From 4ff375e0ff62b5b4612b1a568d4fc5b5459a9dbe Mon Sep 17 00:00:00 2001 From: laenas Date: Tue, 1 Dec 2020 22:28:57 +0100 Subject: [PATCH 1/5] Add FSC option for retrieving raw lexer tokens --- src/fsharp/CompilerConfig.fs | 11 ++++++++--- src/fsharp/CompilerConfig.fsi | 9 +++++++-- src/fsharp/CompilerOptions.fs | 7 ++++++- src/fsharp/ParseAndCheckInputs.fs | 20 +++++++++++++------- 4 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/fsharp/CompilerConfig.fs b/src/fsharp/CompilerConfig.fs index 8fd22f80cab..812ea5d9dd8 100644 --- a/src/fsharp/CompilerConfig.fs +++ b/src/fsharp/CompilerConfig.fs @@ -266,6 +266,11 @@ type LStatus = | Unprocessed | Processed +type TokenizeOption = + | AndCompile + | Only + | Unfiltered + type PackageManagerLine = { Directive: Directive LineStatus: LStatus @@ -362,7 +367,7 @@ type TcConfigBuilder = mutable importAllReferencesOnly: bool mutable simulateException: string option mutable printAst: bool - mutable tokenizeOnly: bool + mutable tokenize: TokenizeOption mutable testInteractionParser: bool mutable reportNumDecls: bool mutable printSignature: bool @@ -526,7 +531,7 @@ type TcConfigBuilder = importAllReferencesOnly = false simulateException = None printAst = false - tokenizeOnly = false + tokenize = TokenizeOption.AndCompile testInteractionParser = false reportNumDecls = false printSignature = false @@ -923,7 +928,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = member x.simulateException = data.simulateException member x.printAst = data.printAst member x.targetFrameworkVersion = targetFrameworkVersionValue - member x.tokenizeOnly = data.tokenizeOnly + member x.tokenize = data.tokenize member x.testInteractionParser = data.testInteractionParser member x.reportNumDecls = data.reportNumDecls member x.printSignature = data.printSignature diff --git a/src/fsharp/CompilerConfig.fsi b/src/fsharp/CompilerConfig.fsi index e7ed55d43e1..ae0aed70338 100644 --- a/src/fsharp/CompilerConfig.fsi +++ b/src/fsharp/CompilerConfig.fsi @@ -119,6 +119,11 @@ type LStatus = | Unprocessed | Processed +type TokenizeOption = + | AndCompile + | Only + | Unfiltered + type PackageManagerLine = { Directive: Directive LineStatus: LStatus @@ -180,7 +185,7 @@ type TcConfigBuilder = mutable importAllReferencesOnly: bool mutable simulateException: string option mutable printAst: bool - mutable tokenizeOnly: bool + mutable tokenize: TokenizeOption mutable testInteractionParser: bool mutable reportNumDecls: bool mutable printSignature: bool @@ -358,7 +363,7 @@ type TcConfig = member importAllReferencesOnly: bool member simulateException: string option member printAst: bool - member tokenizeOnly: bool + member tokenize: TokenizeOption member testInteractionParser: bool member reportNumDecls: bool member printSignature: bool diff --git a/src/fsharp/CompilerOptions.fs b/src/fsharp/CompilerOptions.fs index d324ebfadec..78ad4dcc54f 100644 --- a/src/fsharp/CompilerOptions.fs +++ b/src/fsharp/CompilerOptions.fs @@ -1137,8 +1137,13 @@ let internalFlags (tcConfigB:TcConfigBuilder) = CompilerOption ("tokenize", tagNone, - OptionUnit (fun () -> tcConfigB.tokenizeOnly <- true), + OptionUnit (fun () -> tcConfigB.tokenize <- TokenizeOption.Only), Some(InternalCommandLineOption("--tokenize", rangeCmdArgs)), None) + + CompilerOption + ("tokenize-unfiltered", tagNone, + OptionUnit (fun () -> tcConfigB.tokenize <- TokenizeOption.Unfiltered), + Some(InternalCommandLineOption("--tokenize-unfiltered", rangeCmdArgs)), None) CompilerOption ("testInteractionParser", tagNone, diff --git a/src/fsharp/ParseAndCheckInputs.fs b/src/fsharp/ParseAndCheckInputs.fs index 25d6a88e23a..13b6fa3beba 100644 --- a/src/fsharp/ParseAndCheckInputs.fs +++ b/src/fsharp/ParseAndCheckInputs.fs @@ -286,11 +286,13 @@ let ParseInput (lexer, errorLogger: ErrorLogger, lexbuf: UnicodeLexing.Lexbuf, d let filteringErrorLogger = GetErrorLoggerFilteringByScopedPragmas(false, scopedPragmas, errorLogger) delayLogger.CommitDelayedDiagnostics filteringErrorLogger +type Tokenizer = unit -> Parser.token + // Show all tokens in the stream, for testing purposes -let ShowAllTokensAndExit (shortFilename, tokenizer: LexFilter.LexFilter, lexbuf: LexBuffer) = +let ShowAllTokensAndExit (shortFilename, tokenizer: Tokenizer, lexbuf: LexBuffer) = while true do printf "tokenize - getting one token from %s\n" shortFilename - let t = tokenizer.GetToken() + let t = tokenizer () printf "tokenize - got %s @ %a\n" (Parser.token_to_string t) outputRange lexbuf.LexemeRange match t with | Parser.EOF _ -> exit 0 @@ -298,9 +300,9 @@ let ShowAllTokensAndExit (shortFilename, tokenizer: LexFilter.LexFilter, lexbuf: if lexbuf.IsPastEndOfStream then printf "!!! at end of stream\n" // Test one of the parser entry points, just for testing purposes -let TestInteractionParserAndExit (tokenizer: LexFilter.LexFilter, lexbuf: LexBuffer) = +let TestInteractionParserAndExit (tokenizer: Tokenizer, lexbuf: LexBuffer) = while true do - match (Parser.interaction (fun _ -> tokenizer.GetToken()) lexbuf) with + match (Parser.interaction (fun _ -> tokenizer ()) lexbuf) with | IDefns(l, m) -> printfn "Parsed OK, got %d defs @ %a" l.Length outputRange m | IHash (_, m) -> printfn "Parsed OK, got hash @ %a" outputRange m exit 0 @@ -341,10 +343,14 @@ let ParseOneInputLexbuf (tcConfig: TcConfig, lexResourceManager, conditionalComp Lexhelp.usingLexbufForParsing (lexbuf, filename) (fun lexbuf -> // Set up the LexFilter over the token stream - let tokenizer = LexFilter.LexFilter(lightStatus, tcConfig.compilingFslib, Lexer.token lexargs skipWhitespaceTokens, lexbuf) + let tokenizer,tokenizeOnly = + match tcConfig.tokenize with + | Unfiltered -> (fun () -> Lexer.token lexargs skipWhitespaceTokens lexbuf), true + | Only -> LexFilter.LexFilter(lightStatus, tcConfig.compilingFslib, Lexer.token lexargs skipWhitespaceTokens, lexbuf).GetToken, true + | _ -> LexFilter.LexFilter(lightStatus, tcConfig.compilingFslib, Lexer.token lexargs skipWhitespaceTokens, lexbuf).GetToken, false // If '--tokenize' then show the tokens now and exit - if tcConfig.tokenizeOnly then + if tokenizeOnly then ShowAllTokensAndExit(shortFilename, tokenizer, lexbuf) // Test hook for one of the parser entry points @@ -352,7 +358,7 @@ let ParseOneInputLexbuf (tcConfig: TcConfig, lexResourceManager, conditionalComp TestInteractionParserAndExit (tokenizer, lexbuf) // Parse the input - let res = ParseInput((fun _ -> tokenizer.GetToken()), errorLogger, lexbuf, None, filename, isLastCompiland) + let res = ParseInput((fun _ -> tokenizer ()), errorLogger, lexbuf, None, filename, isLastCompiland) // Report the statistics for testing purposes if tcConfig.reportNumDecls then From 4080ff801c18db9c7cf3a6766b754f79b1cc3e47 Mon Sep 17 00:00:00 2001 From: Vlad Zarytovskii Date: Tue, 29 Jun 2021 10:37:11 +0200 Subject: [PATCH 2/5] Revert "Merge branch 'main' into unfiltered-tokenize" This reverts commit 9e8980cc49e6cfd2b739ecd0c1d7e7b9d4742d1f, reversing changes made to 4ff375e0ff62b5b4612b1a568d4fc5b5459a9dbe. --- .github/ISSUE_TEMPLATE/feature_request.md | 8 - .gitignore | 32 +- DEVGUIDE.md | 15 +- FSharp.Profiles.props | 1 + FSharp.sln | 47 +- FSharpBuild.Directory.Build.props | 6 - FSharpTests.Directory.Build.props | 6 +- INTERNAL.md | 4 - NuGet.config | 3 +- README.md | 13 + VisualFSharp.sln | 118 +- azure-pipelines.yml | 97 +- docs/compiler-guide.md | 115 +- docs/fcs/compiler.fsx | 2 +- docs/fcs/corelib.fsx | 46 +- docs/fcs/editor.fsx | 13 +- docs/fcs/filesystem.fsx | 12 +- docs/fcs/interactive.fsx | 13 +- docs/fcs/ja/compiler.fsx | 2 +- docs/fcs/ja/corelib.fsx | 21 + docs/fcs/ja/editor.fsx | 12 +- docs/fcs/ja/filesystem.fsx | 14 +- docs/fcs/ja/interactive.fsx | 15 +- docs/fcs/ja/project.fsx | 16 +- docs/fcs/ja/symbols.fsx | 3 +- docs/fcs/ja/tokenizer.fsx | 6 +- docs/fcs/ja/untypedtree.fsx | 14 +- docs/fcs/project.fsx | 15 +- docs/fcs/queue.fsx | 71 +- docs/fcs/symbols.fsx | 3 +- docs/fcs/tokenizer.fsx | 4 +- docs/fcs/typedtree.fsx | 99 +- docs/fcs/untypedtree.fsx | 15 +- docs/fsharp-core-notes.md | 162 +- eng/Build.ps1 | 114 +- eng/DumpPackageRoot/DumpPackageRoot.csproj | 2 +- eng/Signing.props | 3 - eng/SourceBuild.props | 47 - eng/SourceBuildPrebuiltBaseline.xml | 5 - eng/Version.Details.xml | 10 +- eng/Versions.props | 21 +- eng/build-utils.ps1 | 8 +- eng/build.sh | 55 +- eng/common/build.ps1 | 2 - eng/common/build.sh | 2 +- eng/common/cross/arm64/tizen-fetch.sh | 2 +- eng/common/cross/armel/tizen-fetch.sh | 2 +- eng/common/cross/build-android-rootfs.sh | 2 +- eng/common/cross/build-rootfs.sh | 42 +- eng/common/darc-init.sh | 2 +- eng/common/dotnet-install.sh | 13 +- eng/common/generate-locproject.ps1 | 117 - eng/common/init-tools-native.sh | 113 +- eng/common/internal-feed-operations.ps1 | 8 +- eng/common/internal-feed-operations.sh | 6 +- eng/common/msbuild.ps1 | 1 - eng/common/msbuild.sh | 2 +- eng/common/native/install-cmake-test.sh | 6 +- eng/common/native/install-cmake.sh | 6 +- eng/common/native/install-tool.ps1 | 2 +- eng/common/performance/blazor_perf.proj | 30 + eng/common/performance/crossgen_perf.proj | 110 + eng/common/performance/microbenchmarks.proj | 144 + eng/common/performance/performance-setup.ps1 | 149 + eng/common/performance/performance-setup.sh | 298 + eng/common/pipeline-logging-functions.sh | 10 +- eng/common/post-build/publish-using-darc.ps1 | 10 +- .../post-build/sourcelink-validation.ps1 | 80 +- eng/common/post-build/symbols-validation.ps1 | 124 +- eng/common/sdk-task.ps1 | 8 +- eng/common/sdl/execute-all-sdl-tools.ps1 | 6 +- eng/common/sdl/init-sdl.ps1 | 16 +- eng/common/sdl/packages.config | 2 +- eng/common/sdl/push-gdn.ps1 | 69 + eng/common/sdl/run-sdl.ps1 | 2 +- eng/common/templates/job/execute-sdl.yml | 4 +- eng/common/templates/job/onelocbuild.yml | 93 - eng/common/templates/job/performance.yml | 95 + .../templates/job/publish-build-assets.yml | 8 - eng/common/templates/job/source-build.yml | 11 - .../templates/job/source-index-stage1.yml | 62 - eng/common/templates/jobs/jobs.yml | 29 +- eng/common/templates/jobs/source-build.yml | 12 +- .../templates/phases/publish-build-assets.yml | 1 - .../channels/generic-internal-channel.yml | 8 - .../channels/generic-public-channel.yml | 8 - .../templates/post-build/post-build.yml | 46 +- .../post-build/setup-maestro-vars.yml | 1 - .../templates/steps/perf-send-to-helix.yml | 50 + eng/common/templates/steps/send-to-helix.yml | 4 +- eng/common/templates/steps/source-build.yml | 7 +- eng/common/tools.ps1 | 128 +- eng/common/tools.sh | 56 +- eng/release/insert-into-vs.yml | 18 +- .../0005-Fix-package-downgrade-warning.patch | 56 - eng/tests/UpToDate.ps1 | 3 +- .../EditorService/EditorService.fsproj | 2 +- fcs-samples/FscExe/FscMain.fs | 4 +- fcs-samples/UntypedTree/Program.fs | 2 +- global.json | 6 +- proto.proj | 4 +- release-notes.md | 436 +- .../Microsoft.FSharp.Compiler.MSBuild.csproj | 89 +- .../Microsoft.FSharp.Dependencies/fsharp.bat | 2 +- .../Microsoft.FSharp.IDE.csproj | 8 +- setup/Swix/Microsoft.FSharp.IDE/Package.swr | 6 +- .../shims/Microsoft.FSharp.NetSdk.Shim.props | 2 +- .../Microsoft.FSharp.NetSdk.Shim.targets | 2 +- ...osoft.FSharp.Overrides.NetSdk.Shim.targets | 2 +- setup/shims/Microsoft.FSharp.Shim.targets | 2 +- .../Microsoft.Portable.FSharp.Shim.targets | 2 +- src/buildtools/AssemblyCheck/AssemblyCheck.fs | 71 +- .../AssemblyCheck/AssemblyCheck.fsproj | 2 +- src/buildtools/fslex/Arg.fs | 28 +- src/buildtools/fslex/Parsing.fsi | 2 +- src/buildtools/fslex/fslex.fsproj | 2 +- src/buildtools/fsyacc/Arg.fs | 28 +- src/buildtools/fsyacc/Parsing.fsi | 2 +- src/buildtools/fsyacc/fsyacc.fsproj | 2 +- src/fsharp/AccessibilityLogic.fs | 2 +- src/fsharp/AccessibilityLogic.fsi | 4 +- src/fsharp/AttributeChecking.fs | 23 +- src/fsharp/AttributeChecking.fsi | 5 +- src/fsharp/AugmentWithHashCompare.fs | 38 +- src/fsharp/AugmentWithHashCompare.fsi | 26 +- src/fsharp/BinaryResourceFormats.fs | 282 +- src/fsharp/BuildGraph.fs | 393 - src/fsharp/BuildGraph.fsi | 120 - src/fsharp/CheckComputationExpressions.fs | 198 +- src/fsharp/CheckComputationExpressions.fsi | 5 +- src/fsharp/CheckDeclarations.fs | 335 +- src/fsharp/CheckDeclarations.fsi | 14 +- src/fsharp/CheckExpressions.fs | 7225 ++- src/fsharp/CheckExpressions.fsi | 32 +- src/fsharp/CheckFormatStrings.fs | 18 +- src/fsharp/CheckFormatStrings.fsi | 5 +- src/fsharp/CompilerConfig.fs | 519 +- src/fsharp/CompilerConfig.fsi | 180 +- src/fsharp/CompilerDiagnostics.fs | 802 +- src/fsharp/CompilerDiagnostics.fsi | 17 +- src/fsharp/CompilerGlobalState.fs | 10 +- src/fsharp/CompilerGlobalState.fsi | 4 +- src/fsharp/CompilerImports.fs | 1332 +- src/fsharp/CompilerImports.fsi | 64 +- src/fsharp/CompilerOptions.fs | 513 +- src/fsharp/CompilerOptions.fsi | 65 +- src/fsharp/ConstraintSolver.fs | 53 +- src/fsharp/ConstraintSolver.fsi | 6 +- src/fsharp/CreateILModule.fs | 330 +- src/fsharp/CreateILModule.fsi | 5 +- src/fsharp/DetupleArgs.fs | 18 +- src/fsharp/DetupleArgs.fsi | 5 +- src/fsharp/Diagnostics.fs | 33 - src/fsharp/Diagnostics.fsi | 25 - src/fsharp/Directory.Build.props | 1 + src/fsharp/DotNetFrameworkDependencies.fs | 562 + src/fsharp/ErrorLogger.fs | 146 +- src/fsharp/ErrorLogger.fsi | 38 +- src/fsharp/ErrorResolutionHints.fs | 21 +- src/fsharp/ErrorResolutionHints.fsi | 9 + src/fsharp/ExtensionTyping.fs | 369 +- src/fsharp/ExtensionTyping.fsi | 14 +- src/fsharp/FSComp.txt | 17 +- src/fsharp/FSharp.Build/FSharp.Build.fsproj | 2 + .../FSharp.Build/FSharpEmbedResourceText.fs | 34 +- src/fsharp/FSharp.Build/Fsc.fs | 63 +- src/fsharp/FSharp.Build/Fsi.fs | 6 +- .../Microsoft.FSharp.NetSdk.props | 20 +- .../Microsoft.FSharp.NetSdk.targets | 2 +- .../FSharp.Build/Microsoft.FSharp.Targets | 2 - ...Sharp.Compiler.Interactive.Settings.fsproj | 1 + .../Directory.Build.props | 9 + .../FSharp.Compiler.Private.Scripting.fsproj | 34 + .../FSharp.Compiler.Private.Scripting.nuspec | 30 + .../FSharpScript.fs | 71 + .../Directory.Build.props | 9 + .../FSharp.Compiler.Private.fsproj | 939 + .../FSharp.Compiler.Server.Shared.fsproj | 1 + .../FSharp.Compiler.Service.fsproj | 191 +- .../FSharp.Compiler.Service.nuspec | 1 - src/fsharp/FSharp.Core/Query.fs | 102 +- src/fsharp/FSharp.Core/async.fs | 94 +- src/fsharp/FSharp.Core/async.fsi | 22 - src/fsharp/FSharp.Core/collections.fs | 16 +- src/fsharp/FSharp.Core/event.fs | 31 +- src/fsharp/FSharp.Core/event.fsi | 2 +- .../FSharp.Core/fslib-extra-pervasives.fs | 24 +- src/fsharp/FSharp.Core/list.fs | 24 +- src/fsharp/FSharp.Core/local.fs | 38 +- src/fsharp/FSharp.Core/mailbox.fs | 28 +- src/fsharp/FSharp.Core/map.fs | 280 +- src/fsharp/FSharp.Core/option.fsi | 212 +- src/fsharp/FSharp.Core/prim-types.fs | 30 +- src/fsharp/FSharp.Core/prim-types.fsi | 2 +- src/fsharp/FSharp.Core/printf.fs | 24 +- src/fsharp/FSharp.Core/quotations.fs | 6 +- src/fsharp/FSharp.Core/reflect.fs | 118 +- src/fsharp/FSharp.Core/seq.fs | 82 +- src/fsharp/FSharp.Core/seqcore.fs | 210 +- src/fsharp/FSharp.Core/seqcore.fsi | 46 - src/fsharp/FSharp.Core/set.fs | 301 +- src/fsharp/FSharp.Core/string.fs | 2 +- .../FSharp.DependencyManager.Nuget.fsproj | 3 - .../FSharp.DependencyManager.ProjectFile.fs | 9 +- .../FSharp.DependencyManager.Utilities.fs | 131 +- .../FSharp.DependencyManager.fs | 35 +- .../FSharp.DependencyManager.fsi | 4 +- .../FSharp.DependencyManager.Nuget/README.md | 2 + .../xlf/FSDependencyManager.txt.cs.xlf | 6 +- .../xlf/FSDependencyManager.txt.de.xlf | 6 +- .../xlf/FSDependencyManager.txt.es.xlf | 6 +- .../xlf/FSDependencyManager.txt.fr.xlf | 6 +- .../xlf/FSDependencyManager.txt.it.xlf | 6 +- .../xlf/FSDependencyManager.txt.ja.xlf | 6 +- .../xlf/FSDependencyManager.txt.ko.xlf | 6 +- .../xlf/FSDependencyManager.txt.pl.xlf | 6 +- .../xlf/FSDependencyManager.txt.pt-BR.xlf | 6 +- .../xlf/FSDependencyManager.txt.ru.xlf | 6 +- .../xlf/FSDependencyManager.txt.tr.xlf | 6 +- .../xlf/FSDependencyManager.txt.zh-Hans.xlf | 6 +- .../xlf/FSDependencyManager.txt.zh-Hant.xlf | 6 +- src/fsharp/FindUnsolved.fs | 6 +- src/fsharp/FindUnsolved.fsi | 1 + src/fsharp/FxResolver.fs | 892 - src/fsharp/IlxGen.fs | 1684 +- src/fsharp/IlxGen.fsi | 1 + src/fsharp/InfoReader.fs | 165 +- src/fsharp/InfoReader.fsi | 31 +- src/fsharp/InnerLambdasToTopLevelFuncs.fs | 23 +- src/fsharp/InternalCollections.fsi | 32 +- src/fsharp/LanguageFeatures.fs | 12 - src/fsharp/LanguageFeatures.fsi | 4 - src/fsharp/LegacyHostedCompilerForTesting.fs | 13 +- src/fsharp/LegacyMSBuildReferenceResolver.fs | 56 +- src/fsharp/LegacyMSBuildReferenceResolver.fsi | 6 +- src/fsharp/LexFilter.fs | 13 +- src/fsharp/Logger.fs | 6 +- src/fsharp/Logger.fsi | 2 +- src/fsharp/LowerCallsAndSeqs.fs | 463 +- src/fsharp/LowerCallsAndSeqs.fsi | 9 +- src/fsharp/MethodCalls.fs | 30 +- src/fsharp/MethodCalls.fsi | 16 +- src/fsharp/MethodOverrides.fs | 30 +- src/fsharp/MethodOverrides.fsi | 10 +- .../AssemblyResolveHandler.fs | 42 +- .../AssemblyResolveHandler.fsi | 3 +- .../DependencyManager.txt | 4 + .../DependencyProvider.fs | 31 +- .../DependencyProvider.fsi | 8 +- .../Directory.Build.props | 9 + .../Microsoft.DotNet.DependencyManager.fsproj | 67 + .../NativeDllResolveHandler.fs | 75 +- .../NativeDllResolveHandler.fsi | 4 +- .../README.md | 44 + .../xlf/DependencyManager.txt.cs.xlf | 0 .../xlf/DependencyManager.txt.de.xlf | 0 .../xlf/DependencyManager.txt.es.xlf | 0 .../xlf/DependencyManager.txt.fr.xlf | 0 .../xlf/DependencyManager.txt.it.xlf | 0 .../xlf/DependencyManager.txt.ja.xlf | 0 .../xlf/DependencyManager.txt.ko.xlf | 0 .../xlf/DependencyManager.txt.pl.xlf | 0 .../xlf/DependencyManager.txt.pt-BR.xlf | 0 .../xlf/DependencyManager.txt.ru.xlf | 0 .../xlf/DependencyManager.txt.tr.xlf | 0 .../xlf/DependencyManager.txt.zh-Hans.xlf | 0 .../xlf/DependencyManager.txt.zh-Hant.xlf | 0 .../Microsoft.FSharp.Compiler.csproj | 6 +- .../Microsoft.FSharp.Compiler.nuspec | 38 +- src/fsharp/NameResolution.fs | 91 +- src/fsharp/NameResolution.fsi | 218 +- src/fsharp/NicePrint.fs | 712 +- src/fsharp/NicePrint.fsi | 44 +- src/fsharp/OptimizeInputs.fs | 144 +- src/fsharp/OptimizeInputs.fsi | 5 +- src/fsharp/Optimizer.fs | 210 +- src/fsharp/Optimizer.fsi | 16 +- src/fsharp/ParseAndCheckInputs.fs | 653 +- src/fsharp/ParseAndCheckInputs.fsi | 38 +- src/fsharp/ParseHelpers.fs | 60 +- src/fsharp/ParseHelpers.fsi | 46 +- src/fsharp/PatternMatchCompilation.fs | 112 +- src/fsharp/PatternMatchCompilation.fsi | 13 +- src/fsharp/PostInferenceChecks.fs | 39 +- src/fsharp/PrettyNaming.fs | 105 +- src/fsharp/PrettyNaming.fsi | 118 +- src/fsharp/QueueList.fs | 13 +- src/fsharp/QueueList.fsi | 2 +- src/fsharp/QuotationPickler.fs | 332 +- src/fsharp/QuotationPickler.fsi | 32 +- src/fsharp/QuotationTranslator.fs | 19 +- src/fsharp/QuotationTranslator.fsi | 4 +- src/fsharp/ReferenceResolver.fs | 101 +- src/fsharp/ReferenceResolver.fsi | 98 +- src/fsharp/ScriptClosure.fs | 351 +- src/fsharp/ScriptClosure.fsi | 37 +- src/fsharp/SignatureConformance.fs | 125 +- src/fsharp/SignatureConformance.fsi | 17 +- .../SimulatedMSBuildReferenceResolver.fs | 45 +- .../SimulatedMSBuildReferenceResolver.fsi | 7 +- src/fsharp/StaticLinking.fs | 345 +- src/fsharp/StaticLinking.fsi | 2 +- src/fsharp/SyntaxTree.fs | 883 +- src/fsharp/SyntaxTree.fsi | 2160 - src/fsharp/SyntaxTreeOps.fs | 112 +- src/fsharp/SyntaxTreeOps.fsi | 41 +- src/fsharp/TcGlobals.fs | 1251 +- src/fsharp/TextLayoutRender.fs | 173 - src/fsharp/TextLayoutRender.fsi | 117 - src/fsharp/TypeRelations.fs | 8 +- src/fsharp/TypeRelations.fsi | 4 +- src/fsharp/TypedTree.fs | 289 +- src/fsharp/TypedTreeBasics.fs | 7 +- src/fsharp/TypedTreeBasics.fsi | 30 +- src/fsharp/TypedTreeOps.fs | 267 +- src/fsharp/TypedTreeOps.fsi | 1668 +- src/fsharp/TypedTreePickle.fs | 116 +- src/fsharp/TypedTreePickle.fsi | 27 +- src/fsharp/UnicodeLexing.fs | 21 +- src/fsharp/UnicodeLexing.fsi | 10 +- src/fsharp/XmlAdapters.fs | 2 +- src/fsharp/XmlAdapters.fsi | 2 +- src/fsharp/XmlDoc.fs | 140 +- src/fsharp/XmlDoc.fsi | 40 +- src/fsharp/XmlDocFileWriter.fs | 62 +- src/fsharp/XmlDocFileWriter.fsi | 6 - src/fsharp/absil/bytes.fs | 560 +- src/fsharp/absil/bytes.fsi | 36 +- src/fsharp/absil/il.fs | 407 +- src/fsharp/absil/il.fsi | 1486 +- src/fsharp/absil/ilascii.fs | 5 +- src/fsharp/absil/ilascii.fsi | 7 +- src/fsharp/absil/ilbinary.fs | 4 +- src/fsharp/absil/ilbinary.fsi | 6 +- src/fsharp/absil/illex.fsl | 12 +- src/fsharp/absil/illib.fs | 593 +- src/fsharp/absil/illib.fsi | 379 +- src/fsharp/absil/ilmorph.fs | 108 +- src/fsharp/absil/ilmorph.fsi | 5 +- src/fsharp/absil/ilnativeres.fs | 2 +- src/fsharp/absil/ilnativeres.fsi | 4 +- src/fsharp/absil/ilpars.fsy | 8 +- src/fsharp/absil/ilprint.fs | 63 +- src/fsharp/absil/ilprint.fsi | 2 + src/fsharp/absil/ilread.fs | 2295 +- src/fsharp/absil/ilread.fsi | 28 +- src/fsharp/absil/ilreflect.fs | 1027 +- src/fsharp/absil/ilreflect.fsi | 6 +- src/fsharp/absil/ilsign.fs | 60 +- src/fsharp/absil/ilsign.fsi | 2 +- src/fsharp/absil/ilsupp.fs | 61 +- src/fsharp/absil/ilsupp.fsi | 26 +- src/fsharp/absil/ilwrite.fs | 3006 +- src/fsharp/absil/ilwrite.fsi | 8 +- src/fsharp/absil/ilwritepdb.fs | 222 +- src/fsharp/absil/ilwritepdb.fsi | 6 +- src/fsharp/absil/ilx.fs | 25 +- src/fsharp/absil/ilx.fsi | 36 +- src/fsharp/absil/zmap.fs | 3 +- src/fsharp/absil/zmap.fsi | 6 +- src/fsharp/absil/zset.fs | 5 +- src/fsharp/absil/zset.fsi | 6 +- src/fsharp/autobox.fs | 13 +- src/fsharp/autobox.fsi | 4 +- src/fsharp/fsc.fs | 613 +- src/fsharp/fsc.fsi | 22 +- src/fsharp/fsc/fsc.fsproj | 11 +- src/fsharp/fscmain.fs | 16 +- src/fsharp/fsi/FSIstrings.txt | 2 +- src/fsharp/fsi/console.fs | 38 +- src/fsharp/fsi/fsi.fs | 1716 +- src/fsharp/fsi/fsi.fsi | 154 +- src/fsharp/fsi/fsi.fsproj | 19 +- src/fsharp/fsi/fsimain.fs | 41 +- src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf | 4 +- src/fsharp/fsiAnyCpu/fsiAnyCpu.fsproj | 4 +- src/fsharp/fsiaux.fs | 6 +- src/fsharp/ilx/EraseClosures.fs | 46 +- src/fsharp/ilx/EraseClosures.fsi | 10 +- src/fsharp/ilx/EraseUnions.fs | 68 +- src/fsharp/ilx/EraseUnions.fsi | 4 +- src/fsharp/ilx/ilxsettings.fs | 37 + src/fsharp/import.fs | 26 +- src/fsharp/import.fsi | 9 +- src/fsharp/infos.fs | 78 +- src/fsharp/infos.fsi | 16 +- src/fsharp/layout.fs | 337 + src/fsharp/layout.fsi | 233 + src/fsharp/lex.fsl | 1018 +- src/fsharp/lexhelp.fs | 95 +- src/fsharp/lexhelp.fsi | 33 +- src/fsharp/lib.fs | 255 +- src/fsharp/lib.fsi | 49 +- src/fsharp/pars.fsy | 641 +- src/fsharp/pplex.fsl | 2 +- src/fsharp/pppars.fsy | 2 +- src/fsharp/range.fs | 400 +- src/fsharp/range.fsi | 235 +- src/fsharp/rational.fs | 2 +- src/fsharp/rational.fsi | 2 +- src/fsharp/service/ExternalSymbol.fs | 89 +- src/fsharp/service/ExternalSymbol.fsi | 79 +- src/fsharp/service/FSharpCheckerResults.fs | 1771 +- src/fsharp/service/FSharpCheckerResults.fsi | 239 +- src/fsharp/service/FSharpParseFileResults.fs | 757 - src/fsharp/service/FSharpParseFileResults.fsi | 83 - src/fsharp/service/IncrementalBuild.fs | 1895 +- src/fsharp/service/IncrementalBuild.fsi | 131 +- src/fsharp/service/ItemKey.fs | 102 +- src/fsharp/service/ItemKey.fsi | 7 +- src/fsharp/service/QuickParse.fs | 10 +- src/fsharp/service/QuickParse.fsi | 4 +- src/fsharp/service/Reactor.fs | 204 + src/fsharp/service/Reactor.fsi | 56 + src/fsharp/service/SemanticClassification.fs | 106 +- src/fsharp/service/SemanticClassification.fsi | 89 +- .../service/SemanticClassificationKey.fs | 82 - .../service/SemanticClassificationKey.fsi | 33 - src/fsharp/service/ServiceAnalysis.fs | 63 +- src/fsharp/service/ServiceAnalysis.fsi | 5 +- src/fsharp/service/ServiceAssemblyContent.fs | 825 +- src/fsharp/service/ServiceAssemblyContent.fsi | 134 +- .../service/ServiceCompilerDiagnostics.fs | 22 +- .../service/ServiceCompilerDiagnostics.fsi | 12 +- src/fsharp/service/ServiceConstants.fs | 2 +- src/fsharp/service/ServiceDeclarationLists.fs | 587 +- .../service/ServiceDeclarationLists.fsi | 190 +- .../service/ServiceErrorResolutionHints.fs | 9 +- .../service/ServiceErrorResolutionHints.fsi | 4 +- .../service/ServiceInterfaceStubGenerator.fs | 114 +- .../service/ServiceInterfaceStubGenerator.fsi | 40 +- src/fsharp/service/ServiceLexing.fs | 1294 +- src/fsharp/service/ServiceLexing.fsi | 544 +- src/fsharp/service/ServiceNavigation.fs | 389 +- src/fsharp/service/ServiceNavigation.fsi | 145 +- .../service/ServiceParamInfoLocations.fs | 52 +- .../service/ServiceParamInfoLocations.fsi | 10 +- src/fsharp/service/ServiceParseTreeWalk.fs | 351 +- src/fsharp/service/ServiceParseTreeWalk.fsi | 92 - src/fsharp/service/ServiceParsedInputOps.fsi | 150 - src/fsharp/service/ServiceStructure.fs | 80 +- src/fsharp/service/ServiceStructure.fsi | 8 +- ...rsedInputOps.fs => ServiceUntypedParse.fs} | 1470 +- src/fsharp/service/ServiceUntypedParse.fsi | 157 + src/fsharp/service/ServiceXmlDocParser.fs | 51 +- src/fsharp/service/ServiceXmlDocParser.fsi | 8 +- src/fsharp/service/service.fs | 1437 +- src/fsharp/service/service.fsi | 285 +- src/fsharp/symbols/Exprs.fs | 99 +- src/fsharp/symbols/Exprs.fsi | 134 +- src/fsharp/symbols/SymbolHelpers.fs | 787 +- src/fsharp/symbols/SymbolHelpers.fsi | 302 +- src/fsharp/symbols/SymbolPatterns.fs | 46 +- src/fsharp/symbols/SymbolPatterns.fsi | 98 +- src/fsharp/symbols/Symbols.fs | 417 +- src/fsharp/symbols/Symbols.fsi | 223 +- src/fsharp/tainted.fs | 48 +- src/fsharp/tainted.fsi | 10 +- src/fsharp/utils/CompilerLocationUtils.fs | 179 +- src/fsharp/utils/CompilerLocationUtils.fsi | 28 +- src/fsharp/utils/FileSystem.fs | 949 - src/fsharp/utils/FileSystem.fsi | 405 - src/fsharp/utils/HashMultiMap.fs | 1 + src/fsharp/utils/HashMultiMap.fsi | 2 + src/fsharp/utils/PathMap.fs | 4 +- src/fsharp/utils/PathMap.fsi | 2 +- src/fsharp/utils/ResizeArray.fs | 4 +- src/fsharp/utils/ResizeArray.fsi | 6 + src/fsharp/utils/TaggedCollections.fs | 17 + src/fsharp/utils/filename.fs | 53 + src/fsharp/utils/filename.fsi | 30 + src/fsharp/utils/prim-lexing.fs | 65 +- src/fsharp/utils/prim-lexing.fsi | 73 +- src/fsharp/utils/sformat.fs | 247 +- src/fsharp/utils/sformat.fsi | 275 +- src/fsharp/xlf/FSComp.txt.cs.xlf | 69 +- src/fsharp/xlf/FSComp.txt.de.xlf | 71 +- src/fsharp/xlf/FSComp.txt.es.xlf | 69 +- src/fsharp/xlf/FSComp.txt.fr.xlf | 69 +- src/fsharp/xlf/FSComp.txt.it.xlf | 69 +- src/fsharp/xlf/FSComp.txt.ja.xlf | 69 +- src/fsharp/xlf/FSComp.txt.ko.xlf | 69 +- src/fsharp/xlf/FSComp.txt.pl.xlf | 67 +- src/fsharp/xlf/FSComp.txt.pt-BR.xlf | 69 +- src/fsharp/xlf/FSComp.txt.ru.xlf | 69 +- src/fsharp/xlf/FSComp.txt.tr.xlf | 69 +- src/fsharp/xlf/FSComp.txt.zh-Hans.xlf | 69 +- src/fsharp/xlf/FSComp.txt.zh-Hant.xlf | 69 +- src/scripts/scriptlib.fsx | 2 +- .../BasicProvider.DesignTime.fsproj | 2 +- .../BasicProvider.Tests.fsproj | 2 +- .../BasicProvider.Tests/NuGet.config | 2 +- .../BasicProvider/BasicProvider.fsproj | 2 +- .../BasicProvider/TestBasicProvider.cmd | 8 +- .../ComboProvider.Tests.fsproj | 2 +- .../ComboProvider.Tests/NuGet.config | 2 +- .../ComboProvider/ComboProvider.fsproj | 4 +- .../ComboProvider/TestComboProvider.cmd | 8 +- .../FSharp.Build.UnitTests.fsproj | 4 +- .../LetBindings/UseBindings.fs | 62 - .../Conformance/PatternMatching/Simple.fs | 13 - .../EmittedIL/Misc.fs | 32 - .../EmittedIL/SkipLocalsInit.fs | 133 - .../EmittedIL/TupleElimination.fs | 799 - .../AccessOfTypeAbbreviationTests.fs | 2 +- .../ErrorMessages/InvalidLiteralTests.fs | 18 - .../InvalidNumericLiteralTests.fs | 6 +- .../ErrorMessages/TypeEqualsMissingTests.fs | 4 +- .../FSharp.Compiler.ComponentTests.fsproj | 15 +- .../Language/AttributeCheckingTests.fs | 44 - .../Language/CastingTests.fs | 113 - .../Language/ComputationExpressionTests.fs | 32 +- .../Language/XmlComments.fs | 51 +- .../LetBindings/UseBindingDiscard01.fs | 6 - .../CompletionTests.fs | 2 +- .../ConsoleHelpers.fs | 64 + .../DependencyManagerInteractiveTests.fs | 101 +- .../DependencyManagerLineParserTests.fs | 52 +- ...ompiler.Private.Scripting.UnitTests.fsproj | 11 +- .../FSharpScriptTests.fs | 45 +- .../TestHelpers.fs | 32 + .../FSharp.Compiler.Service.Tests.fsproj | 4 +- .../LibraryTestFx.fs | 36 +- .../SurfaceArea.netstandard.fs | 48891 +++++++++++++--- .../AssemblySigningAttributes.fs | 88 - .../BuildGraphTests.fs | 273 - .../ByteMemoryTests.fs | 5 +- .../CompilerTestHelpers.fs | 1 + .../FSharp.Compiler.UnitTests.fsproj | 11 +- .../HashIfExpression.fs | 7 +- .../ManglingNameOfProvidedTypes.fs | 3 +- .../ProductVersion.fs | 4 +- .../FSharp.Core.UnitTests.fsproj | 7 +- .../FSharp.Core/ComparersRegression.fs | 8398 +-- ...dUnionType.fs => DiscrimantedUnionType.fs} | 0 .../Microsoft.FSharp.Control/AsyncModule.fs | 15 +- .../Microsoft.FSharp.Control/AsyncType.fs | 168 +- .../Microsoft.FSharp.Control/EventTypes.fs | 77 - .../MailboxProcessorType.fs | 109 +- .../Microsoft.FSharp.Core/PrintfTests.fs | 46 +- .../FSharpReflection.fs | 176 +- .../FSharp.Core/PrimTypes.fs | 22 +- tests/FSharp.Core.UnitTests/SurfaceArea.fs | 8 - tests/FSharp.Test.Utilities/Compiler.fs | 62 +- tests/FSharp.Test.Utilities/CompilerAssert.fs | 431 +- .../FSharp.Test.Utilities.fsproj | 24 +- tests/FSharp.Test.Utilities/ScriptHelpers.fs | 158 - tests/FSharp.Test.Utilities/TestFramework.fs | 105 +- tests/FSharp.Test.Utilities/Utilities.fs | 121 +- .../Xunit/Attributes/DirectoryAttribute.fs | 23 +- tests/benchmarks/Benchmarks.sln | 44 + .../CompilerServiceBenchmarks.fsproj | 16 +- .../CompilerServiceBenchmarks/Program.fs | 46 +- tests/benchmarks/MicroPerf/Benchmarks.fs | 49 - .../MicroPerf/CS/MicroPerfCSharp.cs | 17 - .../MicroPerf/CS/MicroPerfCSharp.csproj | 13 - tests/benchmarks/MicroPerf/MicroPerf.fsproj | 31 - .../CodeGen/EmittedIL/BooleanLogic.fs | 55 - .../EmittedIL/ComputedListExpressions.fs | 407 - .../Compiler/CodeGen/EmittedIL/Mutation.fs | 66 +- .../BasicGrammarElements/BasicConstants.fs | 2 +- .../DataExpressions/ComputationExpressions.fs | 20 +- .../Compiler/Language/AnonRecordTests.fs | 6 +- tests/fsharp/Compiler/Language/ByrefTests.fs | 22 +- .../Language/CompilerDirectiveTests.fs | 6 +- .../Language/ComputationExpressionTests.fs | 36 +- .../Language/CustomCollectionTests.fs | 10 +- .../Language/DefaultInterfaceMemberTests.fs | 278 +- .../Compiler/Language/FixedIndexSliceTests.fs | 80 +- .../Compiler/Language/HatDesugaringTests.fs | 20 +- .../InitOnlyPropertyConsumptionTests.fs | 57 - .../Compiler/Language/InterfaceTests.fs | 6 +- .../Language/OpenTypeDeclarationTests.fs | 4 +- .../Compiler/Language/OptionalInteropTests.fs | 3 +- .../Language/SlicingQuotationTests.fs | 2 +- .../Language/SpanOptimizationTests.fs | 296 +- tests/fsharp/Compiler/Language/SpanTests.fs | 71 +- .../Compiler/Language/StringInterpolation.fs | 144 +- .../Language/StructActivePatternTests.fs | 205 - .../Compiler/Language/TypeAttributeTests.fs | 6 +- .../Core/Collections/IEnumerableTests.fs | 10 +- .../Libraries/Core/Collections/ListTests.fs | 6 +- .../Core/NativeInterop/StackallocTests.fs | 16 +- .../Libraries/Core/Operators/AbsTests.fs | 16 +- .../Libraries/Core/Operators/HashTests.fs | 4 +- .../Libraries/Core/Operators/SignTests.fs | 10 +- .../Libraries/Core/Operators/StringTests.fs | 2 +- .../PreComputedTupleConstructorTests.fs | 2 +- .../NullableOptionalRegressionTests.fs | 63 - .../Compiler/Service/MultiProjectTests.fs | 87 - .../Service/SignatureGenerationTests.fs | 109 - tests/fsharp/Compiler/SourceTextTests.fs | 1 - .../fsharp/Compiler/Stress/LargeExprTests.fs | 61 +- .../Warnings/AssignmentWarningTests.fs | 12 +- .../Warnings/ExperimentalAttributeTests.fs | 4 +- .../Warnings/PatternMatchingWarningTests.fs | 2 +- tests/fsharp/FSharpSuite.Tests.fsproj | 12 +- tests/fsharp/NUnitHelpers.fs | 3 - tests/fsharp/TypeProviderTests.fs | 41 +- tests/fsharp/core/innerpoly/test.fsx | 50 - .../fsharp/core/printf-interpolated/test.fsx | 25 +- tests/fsharp/core/printf/test.fsx | 37 +- .../printing/z.output.test.1000.stderr.bsl | 2 +- .../printing/z.output.test.200.stderr.bsl | 2 +- .../printing/z.output.test.default.stderr.bsl | 2 +- .../printing/z.output.test.off.stderr.bsl | 2 +- .../printing/z.output.test.quiet.stderr.bsl | 2 +- tests/fsharp/core/quotes/test.fsx | 396 +- tests/fsharp/readme.md | 2 +- tests/fsharp/single-test.fs | 63 +- tests/fsharp/tests.fs | 862 +- .../tools/fsharp41/net45/providerDesigner.dll | Bin 75264 -> 0 bytes .../fsharp41/net461/providerDesigner.dll | Bin 75264 -> 0 bytes .../netstandard2.0/providerDesigner.dll | Bin 75264 -> 0 bytes .../fsharp41/net45/providerDesigner.dll | Bin 75264 -> 0 bytes .../fsharp41/net461/providerDesigner.dll | Bin 75264 -> 0 bytes .../netstandard2.0/providerDesigner.dll | Bin 75264 -> 0 bytes .../fsharp/typeProviders/helloWorld/test.fsx | 3 - tests/fsharp/typecheck/sigs/neg03.bsl | 6 +- tests/fsharp/typecheck/sigs/neg07.bsl | 4 +- tests/fsharp/typecheck/sigs/neg10.bsl | 6 +- tests/fsharp/typecheck/sigs/neg16.bsl | 18 +- tests/fsharp/typecheck/sigs/neg20.bsl | 2 +- tests/fsharp/typecheck/sigs/neg47.bsl | 6 +- .../CCtorDUWithMember01.il.bsl | 336 +- .../CCtorDUWithMember02.il.bsl | 16 +- .../CCtorDUWithMember03.il.bsl | 24 +- .../CCtorDUWithMember04.il.bsl | 16 +- .../GeneratedIterators/GenIter01.il.bsl | 414 +- .../GeneratedIterators/GenIter02.il.bsl | 424 +- .../GeneratedIterators/GenIter03.il.bsl | 414 +- .../GeneratedIterators/GenIter04.il.bsl | 432 +- .../InequalityComparison01.il.bsl | 14 +- .../InequalityComparison02.il.bsl | 14 +- .../InequalityComparison03.il.bsl | 14 +- .../InequalityComparison04.il.bsl | 14 +- .../InequalityComparison05.il.bsl | 28 +- .../ListExpressionSteppingTest1.il.bsl | 192 +- .../ListExpressionSteppingTest2.il.bsl | 244 +- .../ListExpressionSteppingTest3.il.bsl | 249 +- .../ListExpressionSteppingTest4.il.bsl | 308 +- .../ListExpressionSteppingTest5.il.bsl | 471 +- .../ListExpressionSteppingTest6.il.bsl | 593 +- .../EmittedIL/Misc/AbstractClass.il.bsl | 14 +- .../CodeGen/EmittedIL/Misc/AnonRecd.il.bsl | 482 +- .../Misc/ArgumentNamesInClosures01.il.bsl | 4 +- .../EmittedIL/Misc/CodeGenRenamings01.il.bsl | 146 +- .../CustomAttributeGenericParameter01.il.bsl | 12 +- .../CodeGen/EmittedIL/Misc/Decimal01.il.bsl | 8 +- .../EmittedIL/Misc/EntryPoint01.il.bsl | 36 +- .../EmittedIL/Misc/EqualsOnUnions01.il.bsl | 746 +- .../CodeGen/EmittedIL/Misc/ForLoop01.il.bsl | 14 +- .../CodeGen/EmittedIL/Misc/ForLoop02.il.bsl | 14 +- .../CodeGen/EmittedIL/Misc/ForLoop03.il.bsl | 12 +- .../Misc/GeneralizationOnUnions01.il.bsl | 230 +- .../Misc/GenericTypeStaticField01.il.bsl | 4 +- .../EmittedIL/Misc/IfThenElse01.il.bsl | 18 +- .../EmittedIL/Misc/LetIfThenElse01.il.bsl | 130 +- .../CodeGen/EmittedIL/Misc/Lock01.il.bsl | 36 +- .../CodeGen/EmittedIL/Misc/Marshal.il.bsl | 10 +- .../EmittedIL/Misc/MethodImplNoInline.il.bsl | 6 +- .../Misc/MethodImplNoInline02.il.bsl | 6 +- .../Misc/ModuleWithExpression01.il.bsl | 14 +- .../EmittedIL/Misc/NoBoxingOnDispose01.il.bsl | 12 +- .../Misc/NonEscapingArguments02.il.bsl | 14 +- .../CodeGen/EmittedIL/Misc/PreserveSig.il.bsl | 12 +- .../EmittedIL/Misc/Seq_for_all01.il.bsl | 24 +- .../CodeGen/EmittedIL/Misc/Structs01.il.bsl | 50 +- .../CodeGen/EmittedIL/Misc/Structs02.il.bsl | 50 +- .../Misc/StructsAsArrayElements01.il.bsl | 50 +- .../Misc/TryWith_NoFilterBlocks01.il.bsl | 46 +- .../Source/CodeGen/EmittedIL/Misc/cas.il.bsl | 14 +- .../Linq101Aggregates01.il.bsl | 5474 +- .../Linq101ElementOperators01.il.bsl | 1184 +- .../Linq101Grouping01.il.bsl | 4 +- .../Linq101Joins01.il.bsl | 50 +- .../Linq101Ordering01.il.bsl | 1188 +- .../Linq101Partitioning01.il.bsl | 1180 +- .../Linq101Quantifiers01.il.bsl | 582 +- .../Linq101Select01.il.bsl | 2082 +- .../Linq101SetOperators01.il.bsl | 1190 +- .../Linq101Where01.il.bsl | 344 +- .../SeqExpressionSteppingTest1.il.bsl | 106 +- .../SeqExpressionSteppingTest2.il.bsl | 152 +- .../SeqExpressionSteppingTest3.il.bsl | 138 +- .../SeqExpressionSteppingTest4.il.bsl | 200 +- .../SeqExpressionSteppingTest5.il.bsl | 376 +- .../SeqExpressionSteppingTest6.il.bsl | 452 +- .../SeqExpressionSteppingTest7.il.bsl | 308 +- .../SeqExpressionTailCalls01.il.bsl | 150 +- .../SeqExpressionTailCalls02.il.bsl | 286 +- .../EmittedIL/StaticInit/LetBinding01.il.bsl | 12 +- .../StaticInit/StaticInit_Class01.il.bsl | 48 +- .../StaticInit/StaticInit_Module01.il.bsl | 20 +- .../StaticInit/StaticInit_Struct01.il.bsl | 36 +- .../SteppingMatch/SteppingMatch01.il.bsl | 14 +- .../SteppingMatch/SteppingMatch02.il.bsl | 14 +- .../SteppingMatch/SteppingMatch03.il.bsl | 62 +- .../SteppingMatch/SteppingMatch04.il.bsl | 62 +- .../SteppingMatch/SteppingMatch05.il.bsl | 62 +- .../SteppingMatch/SteppingMatch06.il.bsl | 334 +- .../SteppingMatch/SteppingMatch07.il.bsl | 334 +- .../SteppingMatch/SteppingMatch08.il.bsl | 14 +- .../SteppingMatch/SteppingMatch09.il.bsl | 74 +- .../TestFunctions/TestFunction1.il.bsl | 12 +- .../TestFunctions/TestFunction10.il.bsl | 12 +- .../TestFunctions/TestFunction13.il.bsl | 14 +- .../TestFunctions/TestFunction14.il.bsl | 4 +- .../TestFunctions/TestFunction16.il.bsl | 646 +- .../TestFunctions/TestFunction17.il.bsl | 580 +- .../TestFunctions/TestFunction19.il.bsl | 12 +- .../TestFunctions/TestFunction20.il.bsl | 12 +- .../TestFunctions/TestFunction21.il.bsl | 646 +- .../TestFunctions/TestFunction23.il.bsl | 4 +- .../TestFunctions/TestFunction24.il.bsl | 748 +- .../TestFunctions/TestFunction3b.il.bsl | 48 +- .../TestFunctions/TestFunction3c.il.bsl | 50 +- .../TestFunctions/TestFunction9b4.il.bsl | 14 +- .../TestFunctions/Testfunction11.il.bsl | 14 +- .../TestFunctions/Testfunction12.il.bsl | 12 +- .../TestFunctions/Testfunction15.il.bsl | 4 +- .../TestFunctions/Testfunction18.il.bsl | 14 +- .../TestFunctions/Testfunction2.il.bsl | 14 +- .../TestFunctions/Testfunction22.il.bsl | 12 +- .../TestFunctions/Testfunction22b.il.bsl | 14 +- .../TestFunctions/Testfunction22c.il.bsl | 14 +- .../TestFunctions/Testfunction22d.il.bsl | 14 +- .../TestFunctions/Testfunction22e.il.bsl | 14 +- .../TestFunctions/Testfunction22f.il.bsl | 28 +- .../TestFunctions/Testfunction22g.il.bsl | 34 +- .../TestFunctions/Testfunction22h.il.bsl | 14 +- .../TestFunctions/Testfunction3.il.bsl | 14 +- .../TestFunctions/Testfunction4.il.bsl | 14 +- .../TestFunctions/Testfunction5.il.bsl | 14 +- .../TestFunctions/Testfunction6.il.bsl | 4 +- .../TestFunctions/Testfunction7.il.bsl | 14 +- .../TestFunctions/Testfunction8.il.bsl | 36 +- .../TestFunctions/Testfunction9.il.bsl | 36 +- .../TestFunctions/Testfunction9b.il.bsl | 246 +- .../TestFunctions/Testfunction9b1.il.bsl | 246 +- .../TestFunctions/Testfunction9b2.il.bsl | 246 +- .../TestFunctions/Testfunction9b3.il.bsl | 246 +- .../EmittedIL/Tuples/OptionalArg01.il.bsl | 144 +- .../CodeGen/EmittedIL/Tuples/Tuple01.il.bsl | 14 +- .../CodeGen/EmittedIL/Tuples/Tuple02.il.bsl | 14 +- .../CodeGen/EmittedIL/Tuples/Tuple03.il.bsl | 14 +- .../CodeGen/EmittedIL/Tuples/Tuple04.il.bsl | 14 +- .../CodeGen/EmittedIL/Tuples/Tuple05.il.bsl | 14 +- .../CodeGen/EmittedIL/Tuples/Tuple06.il.bsl | 14 +- .../CodeGen/EmittedIL/Tuples/Tuple07.il.bsl | 14 +- .../CodeGen/EmittedIL/Tuples/Tuple08.il.bsl | 14 +- .../EmittedIL/Tuples/TupleElimination.il.bsl | 18 +- .../EmittedIL/Tuples/TupleMonster.il.bsl | 12 +- .../Tuples/ValueTupleAliasConstructor.il.bsl | 23 +- .../fsc/dumpAllCommandLineOptions/dummy.fs | 1 + .../fsc/dumpAllCommandLineOptions/dummy.fsx | 1 + .../fsc/help/help40.437.1033.bsl | 5 +- .../CompilerOptions/fsc/warnaserror/env.lst | 8 +- .../UnionTypes/W_UnionCaseProduction01.fsx | 3 +- .../CustomAttributes/Basic/E_StructLayout.fs | 4 +- .../SignatureFiles/E_MissingSourceFile01.fsi | 2 +- .../ConditionalCompilation/E_MustBeIdent02.fs | 9 +- .../System.ThreadStatic/W_Deprecated01.fs | 2 +- .../HashConstraint02.fs | 3 +- .../General/W_LowercaseLiteralNotIgnored.fs | 2 +- .../Source/EntryPoint/E_twoentrypoints001.fs | 2 +- .../Misc/UnknownDependencyManager/script1.fsx | 4 +- .../Inlining/StructUnion01.il.bsl | 276 +- .../testenv/bin/KnownFailRewriter.fsx | 2 +- .../HostedCompilerServer.fsproj | 4 +- .../src/HostedCompilerServer/Program.fs | 7 +- .../testenv/src/PEVerify/PEVerify.csproj | 4 +- tests/service/AssemblyContentProviderTests.fs | 6 +- tests/service/AssemblyReaderShim.fs | 3 +- tests/service/CSharpProjectAnalysis.fs | 52 +- tests/service/Common.fs | 207 +- tests/service/EditorTests.fs | 514 +- tests/service/ExprTests.fs | 605 +- tests/service/FileSystemTests.fs | 113 +- tests/service/FsiTests.fs | 6 +- tests/service/InteractiveCheckerTests.fs | 16 +- tests/service/MultiProjectAnalysisTests.fs | 551 +- tests/service/ParserTests.fs | 29 +- tests/service/PatternMatchCompilationTests.fs | 965 +- tests/service/PerfTests.fs | 32 +- tests/service/ProjectAnalysisTests.fs | 1840 +- tests/service/ScriptOptionsTests.fs | 59 +- tests/service/ServiceUntypedParseTests.fs | 503 +- tests/service/StructureTests.fs | 33 +- tests/service/Symbols.fs | 992 +- tests/service/TokenizerTests.fs | 4 +- tests/service/TreeVisitorTests.fs | 17 +- tests/service/data/TestTP/Library.fs | 26 +- tests/service/data/TestTP/ProvidedTypes.fs | 786 +- tests/service/data/TestTP/TestTP.fsproj | 2 +- .../TheBigFileOfDebugStepping.fsx | 20 - .../sdk-script-manual-tests/README.md.txt | 84 - ...etcore-script-reference-netcore-script.fsx | 9 - .../netcore-script.fsx | 26 - .../with-sdk-3.1.0/global.json | 5 - .../netcore-script-sdk-3.1.0.fsx | 26 - .../with-sdk-5.0.101/global.json | 5 - .../netcore-script-sdk-5.0.101.fsx | 26 - .../with-sdk-666.666.666/global.json | 5 - .../netcore-script-sdk-666.666.666 - Copy.fsx | 13 - .../netcore-script-sdk-666.666.666.fsx | 14 - .../with-sdk-666.666.667/global.json | 5 - .../netcore-script-sdk-666.666.666.fsx | 14 - vsintegration/Directory.Build.targets | 6 +- .../Template/ConsoleApplication.fsproj | 1 - .../LibraryProject/Template/Library.fsproj | 1 - .../TutorialProject/Template/Tutorial.fsproj | 1 - .../TutorialProject/Template/Tutorial.fsx | 11 +- .../Properties/launchSettings.json | 2 +- .../Source.extension.vsixmanifest | 4 +- .../VisualFSharp.Core.targets | 256 - .../VisualFSharpFull/VisualFSharpDebug.csproj | 55 - .../VisualFSharpFull/VisualFSharpFull.csproj | 278 +- .../BraceCompletionSessionProvider.fs | 82 +- .../SetGlobalPropertiesForSdkProjects.fs | 4 +- .../ClassificationDefinitions.fs | 8 +- .../Classification/ClassificationService.fs | 73 +- .../CodeFix/AddInstanceMemberParameter.fs | 37 - .../AddMissingEqualsToTypeDefinition.fs | 6 +- .../CodeFix/AddMissingFunKeyword.fs | 64 - .../AddMissingRecToMutuallyRecFunctions.fs | 70 - .../CodeFix/AddOpenCodeFixProvider.fs | 34 +- ...peAnnotationToObjectOfIndeterminateType.fs | 98 - .../ChangePrefixNegationToInfixSubtraction.fs | 6 +- .../ChangeRefCellDerefToNotExpression.fs | 8 +- .../FSharp.Editor/CodeFix/ChangeToUpcast.fs | 2 +- .../ConvertCSharpLambdaToFSharpLambda.fs | 8 +- .../CodeFix/ConvertToAnonymousRecord.fs | 9 +- .../ConvertToNotEqualsEqualityExpression.fs | 44 - ...ConvertToSingleEqualsEqualityExpression.fs | 4 +- .../FSharp.Editor/CodeFix/FixIndexerAccess.fs | 9 +- .../ImplementInterfaceCodeFixProvider.fs | 47 +- .../CodeFix/MakeDeclarationMutable.fs | 21 +- .../CodeFix/MakeOuterBindingRecursive.fs | 8 +- .../MissingReferenceCodeFixProvider.fs | 4 +- .../CodeFix/ProposeUppercaseLabel.fs | 9 +- .../CodeFix/RemoveReturnOrYield.fs | 8 +- .../CodeFix/RemoveUnusedBinding.fs | 64 - .../CodeFix/RemoveUnusedOpens.fs | 12 +- .../CodeFix/RenameParamToMatchSignature.fs | 14 +- .../CodeFix/RenameUnusedValue.fs | 26 +- .../CodeFix/ReplaceWithSuggestion.fs | 25 +- .../CodeFix/UseMutationWhenValueIsMutable.fs | 46 +- .../CodeFix/WrapExpressionInParentheses.fs | 5 +- .../AbstractCodeLensDisplayService.fs | 6 +- .../CodeLens/CodeLensGeneralTagger.fs | 4 +- .../CodeLens/CodeLensProvider.fs | 11 +- .../CodeLens/FSharpCodeLensService.fs | 53 +- .../Commands/FsiCommandService.fs | 2 +- .../Commands/HelpContextService.fs | 23 +- .../Commands/XmlDocCommandService.fs | 50 +- .../Common/CodeAnalysisExtensions.fs | 18 +- .../src/FSharp.Editor/Common/Constants.fs | 4 - .../src/FSharp.Editor/Common/Extensions.fs | 40 +- .../Common/FSharpCodeAnalysisExtensions.fs | 49 - .../src/FSharp.Editor/Common/Logger.fs | 4 +- .../src/FSharp.Editor/Common/Logging.fs | 3 +- .../src/FSharp.Editor/Common/Pervasive.fs | 46 +- .../src/FSharp.Editor/Common/RoslynHelpers.fs | 121 +- vsintegration/src/FSharp.Editor/Common/Vs.fs | 8 +- .../Completion/CompletionProvider.fs | 52 +- .../Completion/CompletionService.fs | 10 +- .../Completion/CompletionUtils.fs | 5 +- .../Completion/PathCompletionUtilities.fs | 2 - .../FSharp.Editor/Completion/SignatureHelp.fs | 399 +- .../Debugging/BreakpointResolutionService.fs | 25 +- .../Debugging/LanguageDebugInfoService.fs | 9 +- .../Diagnostics/DocumentDiagnosticAnalyzer.fs | 74 +- .../SimplifyNameDiagnosticAnalyzer.fs | 16 +- .../Diagnostics/UnusedDeclarationsAnalyzer.fs | 29 +- .../UnusedOpensDiagnosticAnalyzer.fs | 25 +- .../DocComments/XMLDocumentation.fs | 73 +- .../DocumentHighlightsService.fs | 34 +- .../src/FSharp.Editor/FSharp.Editor.fsproj | 25 +- .../src/FSharp.Editor/FSharp.Editor.resx | 27 +- .../Formatting/BraceMatchingService.fs | 11 +- .../Formatting/EditorFormattingService.fs | 22 +- .../Formatting/IndentationService.fs | 9 +- .../InlineRename/InlineRenameService.fs | 112 +- .../AssemblyContentProvider.fs | 9 +- .../FSharpAnalysisSaveFileCommandHandler.fs | 89 - .../FSharpCheckerExtensions.fs | 90 + .../LanguageService/FSharpCheckerProvider.fs | 87 + .../LanguageService/FSharpEditorFactory.fs | 11 +- .../FSharpProjectOptionsManager.fs | 341 +- .../IFSharpWorkspaceService.fs | 15 - .../LanguageService/LanguageService.fs | 206 +- .../LegacyProjectWorkspaceMap.fs | 20 +- .../LanguageService/MetadataAsSource.fs | 147 - .../ProvideBraceCompletionAttribute.fs | 4 +- .../LanguageService/SingleFileWorkspaceMap.fs | 281 +- .../LanguageService/SymbolHelpers.fs | 64 +- .../FSharp.Editor/LanguageService/Symbols.fs | 20 +- .../TextViewCreationListener.fs | 2 +- .../LanguageService/Tokenizer.fs | 88 +- .../LanguageService/WorkspaceExtensions.fs | 217 - .../Navigation/FindUsagesService.fs | 42 +- .../Navigation/GoToDefinition.fs | 383 +- .../Navigation/GoToDefinitionService.fs | 43 +- .../Navigation/NavigableSymbolsService.fs | 46 +- .../Navigation/NavigateToSearchService.fs | 175 +- .../Navigation/NavigationBarItemService.fs | 17 +- .../FSharp.Editor/Options/EditorOptions.fs | 94 +- .../Options/SettingsPersistence.fs | 8 +- .../QuickInfo/NavigableTextRun.fs | 6 +- .../src/FSharp.Editor/QuickInfo/Navigation.fs | 17 +- .../QuickInfo/QuickInfoProvider.fs | 103 +- .../src/FSharp.Editor/QuickInfo/Views.fs | 83 +- .../WpfNagivableTextRunViewElementFactory.fs | 2 +- .../Refactor/AddExplicitTypeToParameter.fs | 96 - .../Refactor/ChangeDerefToValueRefactoring.fs | 59 - .../ChangeTypeofWithNameToNameofExpression.fs | 57 - .../Structure/BlockStructureService.fs | 20 +- .../FSharp.Editor/xlf/FSharp.Editor.cs.xlf | 51 +- .../FSharp.Editor/xlf/FSharp.Editor.de.xlf | 53 +- .../FSharp.Editor/xlf/FSharp.Editor.es.xlf | 53 +- .../FSharp.Editor/xlf/FSharp.Editor.fr.xlf | 51 +- .../FSharp.Editor/xlf/FSharp.Editor.it.xlf | 51 +- .../FSharp.Editor/xlf/FSharp.Editor.ja.xlf | 51 +- .../FSharp.Editor/xlf/FSharp.Editor.ko.xlf | 53 +- .../FSharp.Editor/xlf/FSharp.Editor.pl.xlf | 51 +- .../FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf | 51 +- .../FSharp.Editor/xlf/FSharp.Editor.ru.xlf | 51 +- .../FSharp.Editor/xlf/FSharp.Editor.tr.xlf | 51 +- .../xlf/FSharp.Editor.zh-Hans.xlf | 51 +- .../xlf/FSharp.Editor.zh-Hant.xlf | 51 +- .../FSharp.LanguageService.Base.csproj | 3 +- .../LanguageService.cs | 4 +- .../src/FSharp.LanguageService.Base/Source.cs | 8 +- .../BackgroundRequests.fs | 46 +- .../src/FSharp.LanguageService/Colorize.fs | 15 +- .../FSharp.LanguageService.fsproj | 7 +- .../FSharp.LanguageService/FSharpSource.fs | 16 +- .../FSharp.LanguageService/GotoDefinition.fs | 21 +- .../FSharp.LanguageService/Intellisense.fs | 62 +- .../ProjectSitesAndFiles.fs | 142 +- .../src/FSharp.LanguageService/Vs.fs | 8 +- .../XmlDocumentation.fs | 61 +- .../{ => Project}/AssemblyInfo.cs | 0 .../{ => Project}/AssemblyReferenceNode.cs | 0 .../{ => Project}/Attributes.cs | 0 .../{ => Project}/Automation/OAFileItem.cs | 0 .../{ => Project}/Automation/OAFolderItem.cs | 0 .../Automation/OANavigableProjectItems.cs | 0 .../Automation/OANullProperty.cs | 0 .../{ => Project}/Automation/OAProject.cs | 0 .../{ => Project}/Automation/OAProjectItem.cs | 0 .../Automation/OAProjectItems.cs | 0 .../{ => Project}/Automation/OAProperties.cs | 0 .../{ => Project}/Automation/OAProperty.cs | 0 .../Automation/OAReferenceFolderItem.cs | 0 .../Automation/OAReferenceItem.cs | 0 .../VSProject/OAAssemblyReference.cs | 0 .../Automation/VSProject/OABuildManager.cs | 0 .../Automation/VSProject/OAComReference.cs | 0 .../VSProject/OAProjectReference.cs | 0 .../Automation/VSProject/OAReferenceBase.cs | 0 .../Automation/VSProject/OAReferences.cs | 0 .../Automation/VSProject/OAVSProject.cs | 0 .../Automation/VSProject/OAVSProjectItem.cs | 0 .../{ => Project}/BuildDependency.cs | 0 .../{ => Project}/BuildPropertyPage.cs | 0 .../{ => Project}/ComReferenceNode.cs | 0 .../{ => Project}/ConfigProvider.cs | 0 .../{ => Project}/ConfigurationProperties.cs | 0 .../{ => Project}/DataObject.cs | 0 .../{ => Project}/DesignPropertyDescriptor.cs | 0 .../{ => Project}/DocumentManager.cs | 0 .../{ => Project}/EnumDependencies.cs | 0 .../FSharp.ProjectSystem.Base.ruleset | 0 .../{ => Project}/FileChangeManager.cs | 0 .../{ => Project}/FileDocumentManager.cs | 0 .../{ => Project}/FileNode.cs | 0 .../{ => Project}/FolderNode.cs | 0 .../{ => Project}/GlobalSuppressions.cs | 0 .../{ => Project}/GroupingReferenceNode.cs | 0 .../{ => Project}/HierarchyNode.cs | 0 .../{ => Project}/IDEBuildLogger.cs | 0 .../{ => Project}/ImageHandler.cs | 0 .../{ => Project}/Interfaces.cs | 0 .../{ => Project}/LinkedFileNode.cs | 0 .../{ => Project}/LocalizableProperties.cs | 0 .../Microsoft.VisualStudio.Package.Project.cs | 0 ...icrosoft.VisualStudio.Package.Project.resx | 0 .../Misc/AutomationExtenderManager.cs | 0 .../Misc/ConnectionPointContainer.cs | 0 .../{ => Project}/Misc/ExternDll.cs | 0 .../{ => Project}/Misc/NativeMethods.cs | 0 .../{ => Project}/Misc/UnsafeNativeMethods.cs | 0 .../{ => Project}/NodeProperties.cs | 0 .../{ => Project}/OleServiceProvider.cs | 0 .../{ => Project}/Output.cs | 0 .../{ => Project}/OutputGroup.cs | 0 .../{ => Project}/ProjectBase.files | 0 .../{ => Project}/ProjectConfig.cs | 0 .../ProjectDesignerDocumentManager.cs | 0 .../{ => Project}/ProjectElement.cs | 0 .../{ => Project}/ProjectFactory.cs | 0 .../{ => Project}/ProjectFileConstants.cs | 0 .../{ => Project}/ProjectNode.CopyPaste.cs | 0 .../{ => Project}/ProjectNode.Events.cs | 0 .../{ => Project}/ProjectNode.cs | 0 .../{ => Project}/ProjectOptions.cs | 0 .../{ => Project}/ProjectPackage.cs | 0 .../{ => Project}/ProjectReferenceNode.cs | 0 .../ProjectSystem.Base.csproj} | 0 .../{ => Project}/PropertiesEditorLauncher.cs | 0 .../{ => Project}/ReferenceContainerNode.cs | 0 .../{ => Project}/ReferenceNode.cs | 0 .../{ => Project}/Resources/imagelis.bmp | Bin .../{ => Project}/SelectionListener.cs | 0 .../{ => Project}/SolutionListener.cs | 0 .../SolutionListenerForProjectEvents.cs | 0 .../SolutionListenerForProjectOpen.cs | 0 ...lutionListenerForProjectReferenceUpdate.cs | 0 .../{ => Project}/StructuresEnums.cs | 0 .../{ => Project}/SuspendFileChanges.cs | 0 .../{ => Project}/Tracing.cs | 0 .../{ => Project}/TrackDocumentsHelper.cs | 0 .../{ => Project}/TypeConverters.cs | 0 .../{ => Project}/UIThread.cs | 0 .../UpdateSolutionEventsListener.cs | 0 .../{ => Project}/Utilities.cs | 2 +- .../{ => Project}/VSMDCodeDomProvider.cs | 0 .../{ => Project}/VSProjectConstants.cs | 0 .../{ => Project}/VSShellUtilities.cs | 0 .../{ => Project}/VsCommands.cs | 0 ...rosoft.VisualStudio.Package.Project.cs.xlf | 0 ...rosoft.VisualStudio.Package.Project.de.xlf | 2 +- ...rosoft.VisualStudio.Package.Project.es.xlf | 0 ...rosoft.VisualStudio.Package.Project.fr.xlf | 4 +- ...rosoft.VisualStudio.Package.Project.it.xlf | 0 ...rosoft.VisualStudio.Package.Project.ja.xlf | 0 ...rosoft.VisualStudio.Package.Project.ko.xlf | 0 ...rosoft.VisualStudio.Package.Project.pl.xlf | 0 ...oft.VisualStudio.Package.Project.pt-BR.xlf | 0 ...rosoft.VisualStudio.Package.Project.ru.xlf | 4 +- ...rosoft.VisualStudio.Package.Project.tr.xlf | 0 ...t.VisualStudio.Package.Project.zh-Hans.xlf | 0 ...t.VisualStudio.Package.Project.zh-Hant.xlf | 0 .../CodeGeneratorRegistrationAttribute.cs | 149 + .../ComponentPickerPropertyPageAttribute.cs | 152 + .../EditorFactoryNotifyForProjectAttribute.cs | 161 + .../ProvideAppCommandLineAttribute.cs | 146 + ...olutionPersistenceRegistrationAttribute.cs | 79 + .../WAProvideLanguagePropertyAttribute.cs | 114 + .../WAProvideProjectFactoryAttribute.cs | 243 + ...eProjectFactoryTemplateMappingAttribute.cs | 64 + .../MenusAndCommands.vsct | 16 - .../FSharp.ProjectSystem.FSharp/Overview.xml | 257 + .../FSharp.ProjectSystem.FSharp/Project.fs | 98 +- ...tem.FSharp.fsproj => ProjectSystem.fsproj} | 16 +- .../FSharp.ProjectSystem.FSharp/WaitDialog.fs | 2 +- .../xlf/MenusAndCommands.vsct.cs.xlf | 10 - .../xlf/MenusAndCommands.vsct.de.xlf | 10 - .../xlf/MenusAndCommands.vsct.es.xlf | 10 - .../xlf/MenusAndCommands.vsct.fr.xlf | 10 - .../xlf/MenusAndCommands.vsct.it.xlf | 10 - .../xlf/MenusAndCommands.vsct.ja.xlf | 10 - .../xlf/MenusAndCommands.vsct.ko.xlf | 10 - .../xlf/MenusAndCommands.vsct.pl.xlf | 10 - .../xlf/MenusAndCommands.vsct.pt-BR.xlf | 10 - .../xlf/MenusAndCommands.vsct.ru.xlf | 10 - .../xlf/MenusAndCommands.vsct.tr.xlf | 10 - .../xlf/MenusAndCommands.vsct.zh-Hans.xlf | 10 - .../xlf/MenusAndCommands.vsct.zh-Hant.xlf | 10 - ...s.vbproj => FSharp.PropertiesPages.vbproj} | 2 +- ...osoft.VisualStudio.Editors.Designer.de.xlf | 2 +- .../src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj | 9 +- .../src/FSharp.VS.FSI/Properties.resx | 6 - .../src/FSharp.VS.FSI/VFSIstrings.txt | 3 +- vsintegration/src/FSharp.VS.FSI/fsiBasis.fs | 24 + .../src/FSharp.VS.FSI/fsiLanguageService.fs | 12 +- .../src/FSharp.VS.FSI/fsiPackageHooks.fs | 6 + .../src/FSharp.VS.FSI/fsiSessionToolWindow.fs | 74 +- .../src/FSharp.VS.FSI/fsiTextBufferStream.fs | 14 + vsintegration/src/FSharp.VS.FSI/sessions.fs | 167 +- .../src/FSharp.VS.FSI/xlf/Properties.cs.xlf | 20 +- .../src/FSharp.VS.FSI/xlf/Properties.de.xlf | 20 +- .../src/FSharp.VS.FSI/xlf/Properties.es.xlf | 20 +- .../src/FSharp.VS.FSI/xlf/Properties.fr.xlf | 20 +- .../src/FSharp.VS.FSI/xlf/Properties.it.xlf | 20 +- .../src/FSharp.VS.FSI/xlf/Properties.ja.xlf | 20 +- .../src/FSharp.VS.FSI/xlf/Properties.ko.xlf | 20 +- .../src/FSharp.VS.FSI/xlf/Properties.pl.xlf | 20 +- .../FSharp.VS.FSI/xlf/Properties.pt-BR.xlf | 20 +- .../src/FSharp.VS.FSI/xlf/Properties.ru.xlf | 20 +- .../src/FSharp.VS.FSI/xlf/Properties.tr.xlf | 20 +- .../FSharp.VS.FSI/xlf/Properties.zh-Hans.xlf | 20 +- .../FSharp.VS.FSI/xlf/Properties.zh-Hant.xlf | 20 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.cs.xlf | 9 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.de.xlf | 9 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.es.xlf | 9 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.fr.xlf | 9 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.it.xlf | 9 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.ja.xlf | 9 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.ko.xlf | 9 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.pl.xlf | 9 +- .../xlf/VFSIstrings.txt.pt-BR.xlf | 9 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.ru.xlf | 9 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.tr.xlf | 9 +- .../xlf/VFSIstrings.txt.zh-Hans.xlf | 9 +- .../xlf/VFSIstrings.txt.zh-Hant.xlf | 9 +- .../GetTypesVS.UnitTests.fsproj | 1 - ...myProviderForLanguageServiceTesting.fsproj | 2 +- .../ProvidedTypes.fs | 1490 +- .../Salsa/FSharpLanguageServiceTestable.fs | 11 +- vsintegration/tests/Salsa/SalsaUtils.fs | 3 +- .../tests/Salsa/VisualFSharp.Salsa.fsproj | 10 +- vsintegration/tests/Salsa/VsMocks.fs | 2 +- vsintegration/tests/Salsa/salsa.fs | 26 +- .../tests/UnitTests/AssemblyResolver.fs | 2 +- .../UnitTests/BraceMatchingServiceTests.fs | 3 +- .../UnitTests/BreakpointResolutionService.fs | 11 +- .../UnitTests/CompletionProviderTests.fs | 28 +- .../DocumentDiagnosticAnalyzerTests.fs | 14 +- .../DocumentHighlightsServiceTests.fs | 15 +- .../UnitTests/EditorFormattingServiceTests.fs | 15 +- .../UnitTests/FsxCompletionProviderTests.fs | 74 +- .../UnitTests/GoToDefinitionServiceTests.fs | 32 +- .../UnitTests/IndentationServiceTests.fs | 3 +- .../LanguageDebugInfoServiceTests.fs | 6 +- .../Tests.LanguageService.Completion.fs | 30 +- .../Tests.LanguageService.ErrorList.fs | 2 +- .../Tests.LanguageService.General.fs | 7 +- .../Tests.LanguageService.GotoDefinition.fs | 4 +- .../Tests.LanguageService.ParameterInfo.fs | 12 +- .../Tests.LanguageService.QuickInfo.fs | 43 +- .../Tests.LanguageService.QuickParse.fs | 2 +- .../Tests.LanguageService.Script.fs | 12 +- .../Tests.LanguageService.TimeStamp.fs | 1 - .../Tests.ProjectSystem.Configs.fs | 2 +- .../Tests.ProjectSystem.Miscellaneous.fs | 19 +- .../Tests.ProjectSystem.UpToDate.fs | 2 +- .../tests/UnitTests/ProjectOptionsBuilder.fs | 5 +- .../tests/UnitTests/QuickInfoProviderTests.fs | 6 +- .../tests/UnitTests/QuickInfoTests.fs | 11 +- .../tests/UnitTests/RoslynSourceTextTests.fs | 2 +- .../SemanticColorizationServiceTests.fs | 52 +- .../UnitTests/SignatureHelpProviderTests.fs | 658 +- .../UnitTests/TestLib.LanguageService.fs | 8 +- vsintegration/tests/UnitTests/Tests.Build.fs | 62 +- .../tests/UnitTests/Tests.RoslynHelpers.fs | 278 - vsintegration/tests/UnitTests/Tests.Watson.fs | 4 +- .../tests/UnitTests/UnusedOpensTests.fs | 22 +- .../UnitTests/VisualFSharp.UnitTests.fsproj | 13 +- .../UnitTests/Workspace/WorkspaceTests.fs | 317 - vsintegration/update-vsintegration.cmd | 2 +- 1165 files changed, 104692 insertions(+), 81355 deletions(-) delete mode 100644 eng/SourceBuild.props delete mode 100644 eng/SourceBuildPrebuiltBaseline.xml delete mode 100644 eng/common/generate-locproject.ps1 create mode 100644 eng/common/performance/blazor_perf.proj create mode 100644 eng/common/performance/crossgen_perf.proj create mode 100644 eng/common/performance/microbenchmarks.proj create mode 100644 eng/common/performance/performance-setup.ps1 create mode 100755 eng/common/performance/performance-setup.sh create mode 100644 eng/common/sdl/push-gdn.ps1 delete mode 100644 eng/common/templates/job/onelocbuild.yml create mode 100644 eng/common/templates/job/performance.yml delete mode 100644 eng/common/templates/job/source-index-stage1.yml create mode 100644 eng/common/templates/steps/perf-send-to-helix.yml delete mode 100644 eng/source-build-patches/0005-Fix-package-downgrade-warning.patch delete mode 100644 src/fsharp/BuildGraph.fs delete mode 100644 src/fsharp/BuildGraph.fsi delete mode 100644 src/fsharp/Diagnostics.fs delete mode 100644 src/fsharp/Diagnostics.fsi create mode 100644 src/fsharp/DotNetFrameworkDependencies.fs create mode 100644 src/fsharp/FSharp.Compiler.Private.Scripting/Directory.Build.props create mode 100644 src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj create mode 100644 src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec create mode 100644 src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs create mode 100644 src/fsharp/FSharp.Compiler.Private/Directory.Build.props create mode 100644 src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj delete mode 100644 src/fsharp/FxResolver.fs rename src/fsharp/{DependencyManager => Microsoft.DotNet.DependencyManager}/AssemblyResolveHandler.fs (70%) rename src/fsharp/{DependencyManager => Microsoft.DotNet.DependencyManager}/AssemblyResolveHandler.fsi (88%) create mode 100644 src/fsharp/Microsoft.DotNet.DependencyManager/DependencyManager.txt rename src/fsharp/{DependencyManager => Microsoft.DotNet.DependencyManager}/DependencyProvider.fs (92%) rename src/fsharp/{DependencyManager => Microsoft.DotNet.DependencyManager}/DependencyProvider.fsi (97%) create mode 100644 src/fsharp/Microsoft.DotNet.DependencyManager/Directory.Build.props create mode 100644 src/fsharp/Microsoft.DotNet.DependencyManager/Microsoft.DotNet.DependencyManager.fsproj rename src/fsharp/{DependencyManager => Microsoft.DotNet.DependencyManager}/NativeDllResolveHandler.fs (70%) rename src/fsharp/{DependencyManager => Microsoft.DotNet.DependencyManager}/NativeDllResolveHandler.fsi (83%) create mode 100644 src/fsharp/Microsoft.DotNet.DependencyManager/README.md rename src/fsharp/{DependencyManager => Microsoft.DotNet.DependencyManager}/xlf/DependencyManager.txt.cs.xlf (100%) rename src/fsharp/{DependencyManager => Microsoft.DotNet.DependencyManager}/xlf/DependencyManager.txt.de.xlf (100%) rename src/fsharp/{DependencyManager => Microsoft.DotNet.DependencyManager}/xlf/DependencyManager.txt.es.xlf (100%) rename src/fsharp/{DependencyManager => Microsoft.DotNet.DependencyManager}/xlf/DependencyManager.txt.fr.xlf (100%) rename src/fsharp/{DependencyManager => Microsoft.DotNet.DependencyManager}/xlf/DependencyManager.txt.it.xlf (100%) rename src/fsharp/{DependencyManager => Microsoft.DotNet.DependencyManager}/xlf/DependencyManager.txt.ja.xlf (100%) rename src/fsharp/{DependencyManager => Microsoft.DotNet.DependencyManager}/xlf/DependencyManager.txt.ko.xlf (100%) rename src/fsharp/{DependencyManager => Microsoft.DotNet.DependencyManager}/xlf/DependencyManager.txt.pl.xlf (100%) rename src/fsharp/{DependencyManager => Microsoft.DotNet.DependencyManager}/xlf/DependencyManager.txt.pt-BR.xlf (100%) rename src/fsharp/{DependencyManager => Microsoft.DotNet.DependencyManager}/xlf/DependencyManager.txt.ru.xlf (100%) rename src/fsharp/{DependencyManager => Microsoft.DotNet.DependencyManager}/xlf/DependencyManager.txt.tr.xlf (100%) rename src/fsharp/{DependencyManager => Microsoft.DotNet.DependencyManager}/xlf/DependencyManager.txt.zh-Hans.xlf (100%) rename src/fsharp/{DependencyManager => Microsoft.DotNet.DependencyManager}/xlf/DependencyManager.txt.zh-Hant.xlf (100%) delete mode 100644 src/fsharp/SyntaxTree.fsi delete mode 100644 src/fsharp/TextLayoutRender.fs delete mode 100644 src/fsharp/TextLayoutRender.fsi create mode 100644 src/fsharp/ilx/ilxsettings.fs create mode 100644 src/fsharp/layout.fs create mode 100644 src/fsharp/layout.fsi delete mode 100644 src/fsharp/service/FSharpParseFileResults.fs delete mode 100644 src/fsharp/service/FSharpParseFileResults.fsi mode change 100644 => 100755 src/fsharp/service/IncrementalBuild.fs create mode 100755 src/fsharp/service/Reactor.fs create mode 100755 src/fsharp/service/Reactor.fsi delete mode 100644 src/fsharp/service/SemanticClassificationKey.fs delete mode 100644 src/fsharp/service/SemanticClassificationKey.fsi mode change 100644 => 100755 src/fsharp/service/ServiceLexing.fs delete mode 100644 src/fsharp/service/ServiceParseTreeWalk.fsi delete mode 100644 src/fsharp/service/ServiceParsedInputOps.fsi rename src/fsharp/service/{ServiceParsedInputOps.fs => ServiceUntypedParse.fs} (56%) mode change 100644 => 100755 create mode 100755 src/fsharp/service/ServiceUntypedParse.fsi mode change 100644 => 100755 src/fsharp/service/service.fsi delete mode 100644 src/fsharp/utils/FileSystem.fs delete mode 100644 src/fsharp/utils/FileSystem.fsi create mode 100644 src/fsharp/utils/filename.fs create mode 100644 src/fsharp/utils/filename.fsi delete mode 100644 tests/FSharp.Compiler.ComponentTests/Conformance/DeclarationElements/LetBindings/UseBindings.fs delete mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Misc.fs delete mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/SkipLocalsInit.fs delete mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/TupleElimination.fs delete mode 100644 tests/FSharp.Compiler.ComponentTests/ErrorMessages/InvalidLiteralTests.fs delete mode 100644 tests/FSharp.Compiler.ComponentTests/Language/AttributeCheckingTests.fs delete mode 100644 tests/FSharp.Compiler.ComponentTests/Language/CastingTests.fs delete mode 100644 tests/FSharp.Compiler.ComponentTests/resources/tests/Conformance/DeclarationElements/LetBindings/UseBindingDiscard01.fs create mode 100644 tests/FSharp.Compiler.Private.Scripting.UnitTests/ConsoleHelpers.fs create mode 100644 tests/FSharp.Compiler.Private.Scripting.UnitTests/TestHelpers.fs delete mode 100644 tests/FSharp.Compiler.UnitTests/AssemblySigningAttributes.fs delete mode 100644 tests/FSharp.Compiler.UnitTests/BuildGraphTests.fs rename tests/FSharp.Core.UnitTests/FSharp.Core/{DiscriminatedUnionType.fs => DiscrimantedUnionType.fs} (100%) delete mode 100644 tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/EventTypes.fs delete mode 100644 tests/FSharp.Test.Utilities/ScriptHelpers.fs create mode 100644 tests/benchmarks/Benchmarks.sln delete mode 100644 tests/benchmarks/MicroPerf/Benchmarks.fs delete mode 100644 tests/benchmarks/MicroPerf/CS/MicroPerfCSharp.cs delete mode 100644 tests/benchmarks/MicroPerf/CS/MicroPerfCSharp.csproj delete mode 100644 tests/benchmarks/MicroPerf/MicroPerf.fsproj delete mode 100644 tests/fsharp/Compiler/CodeGen/EmittedIL/BooleanLogic.fs delete mode 100644 tests/fsharp/Compiler/CodeGen/EmittedIL/ComputedListExpressions.fs delete mode 100644 tests/fsharp/Compiler/Language/InitOnlyPropertyConsumptionTests.fs delete mode 100644 tests/fsharp/Compiler/Language/StructActivePatternTests.fs delete mode 100644 tests/fsharp/Compiler/Service/MultiProjectTests.fs delete mode 100644 tests/fsharp/Compiler/Service/SignatureGenerationTests.fs delete mode 100644 tests/fsharp/tools/fsharp41/net45/providerDesigner.dll delete mode 100644 tests/fsharp/tools/fsharp41/net461/providerDesigner.dll delete mode 100644 tests/fsharp/tools/fsharp41/netstandard2.0/providerDesigner.dll delete mode 100644 tests/fsharp/typeProviders/fsharp41/net45/providerDesigner.dll delete mode 100644 tests/fsharp/typeProviders/fsharp41/net461/providerDesigner.dll delete mode 100644 tests/fsharp/typeProviders/fsharp41/netstandard2.0/providerDesigner.dll delete mode 100644 tests/walkthroughs/sdk-script-manual-tests/README.md.txt delete mode 100644 tests/walkthroughs/sdk-script-manual-tests/netcore-script-reference-netcore-script.fsx delete mode 100644 tests/walkthroughs/sdk-script-manual-tests/netcore-script.fsx delete mode 100644 tests/walkthroughs/sdk-script-manual-tests/with-sdk-3.1.0/global.json delete mode 100644 tests/walkthroughs/sdk-script-manual-tests/with-sdk-3.1.0/netcore-script-sdk-3.1.0.fsx delete mode 100644 tests/walkthroughs/sdk-script-manual-tests/with-sdk-5.0.101/global.json delete mode 100644 tests/walkthroughs/sdk-script-manual-tests/with-sdk-5.0.101/netcore-script-sdk-5.0.101.fsx delete mode 100644 tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/global.json delete mode 100644 tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/netcore-script-sdk-666.666.666 - Copy.fsx delete mode 100644 tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/netcore-script-sdk-666.666.666.fsx delete mode 100644 tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.667/global.json delete mode 100644 tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.667/netcore-script-sdk-666.666.666.fsx delete mode 100644 vsintegration/Vsix/VisualFSharpFull/VisualFSharp.Core.targets delete mode 100644 vsintegration/Vsix/VisualFSharpFull/VisualFSharpDebug.csproj delete mode 100644 vsintegration/src/FSharp.Editor/CodeFix/AddInstanceMemberParameter.fs delete mode 100644 vsintegration/src/FSharp.Editor/CodeFix/AddMissingFunKeyword.fs delete mode 100644 vsintegration/src/FSharp.Editor/CodeFix/AddMissingRecToMutuallyRecFunctions.fs delete mode 100644 vsintegration/src/FSharp.Editor/CodeFix/AddTypeAnnotationToObjectOfIndeterminateType.fs delete mode 100644 vsintegration/src/FSharp.Editor/CodeFix/ConvertToNotEqualsEqualityExpression.fs delete mode 100644 vsintegration/src/FSharp.Editor/CodeFix/RemoveUnusedBinding.fs delete mode 100644 vsintegration/src/FSharp.Editor/Common/FSharpCodeAnalysisExtensions.fs delete mode 100644 vsintegration/src/FSharp.Editor/LanguageService/FSharpAnalysisSaveFileCommandHandler.fs create mode 100644 vsintegration/src/FSharp.Editor/LanguageService/FSharpCheckerExtensions.fs create mode 100644 vsintegration/src/FSharp.Editor/LanguageService/FSharpCheckerProvider.fs delete mode 100644 vsintegration/src/FSharp.Editor/LanguageService/IFSharpWorkspaceService.fs delete mode 100644 vsintegration/src/FSharp.Editor/LanguageService/MetadataAsSource.fs delete mode 100644 vsintegration/src/FSharp.Editor/LanguageService/WorkspaceExtensions.fs delete mode 100644 vsintegration/src/FSharp.Editor/Refactor/AddExplicitTypeToParameter.fs delete mode 100644 vsintegration/src/FSharp.Editor/Refactor/ChangeDerefToValueRefactoring.fs delete mode 100644 vsintegration/src/FSharp.Editor/Refactor/ChangeTypeofWithNameToNameofExpression.fs rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/AssemblyInfo.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/AssemblyReferenceNode.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Attributes.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Automation/OAFileItem.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Automation/OAFolderItem.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Automation/OANavigableProjectItems.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Automation/OANullProperty.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Automation/OAProject.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Automation/OAProjectItem.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Automation/OAProjectItems.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Automation/OAProperties.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Automation/OAProperty.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Automation/OAReferenceFolderItem.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Automation/OAReferenceItem.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Automation/VSProject/OAAssemblyReference.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Automation/VSProject/OABuildManager.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Automation/VSProject/OAComReference.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Automation/VSProject/OAProjectReference.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Automation/VSProject/OAReferenceBase.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Automation/VSProject/OAReferences.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Automation/VSProject/OAVSProject.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Automation/VSProject/OAVSProjectItem.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/BuildDependency.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/BuildPropertyPage.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/ComReferenceNode.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/ConfigProvider.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/ConfigurationProperties.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/DataObject.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/DesignPropertyDescriptor.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/DocumentManager.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/EnumDependencies.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/FSharp.ProjectSystem.Base.ruleset (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/FileChangeManager.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/FileDocumentManager.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/FileNode.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/FolderNode.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/GlobalSuppressions.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/GroupingReferenceNode.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/HierarchyNode.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/IDEBuildLogger.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/ImageHandler.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Interfaces.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/LinkedFileNode.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/LocalizableProperties.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Microsoft.VisualStudio.Package.Project.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Microsoft.VisualStudio.Package.Project.resx (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Misc/AutomationExtenderManager.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Misc/ConnectionPointContainer.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Misc/ExternDll.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Misc/NativeMethods.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Misc/UnsafeNativeMethods.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/NodeProperties.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/OleServiceProvider.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Output.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/OutputGroup.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/ProjectBase.files (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/ProjectConfig.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/ProjectDesignerDocumentManager.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/ProjectElement.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/ProjectFactory.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/ProjectFileConstants.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/ProjectNode.CopyPaste.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/ProjectNode.Events.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/ProjectNode.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/ProjectOptions.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/ProjectPackage.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/ProjectReferenceNode.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{FSharp.ProjectSystem.Base.csproj => Project/ProjectSystem.Base.csproj} (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/PropertiesEditorLauncher.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/ReferenceContainerNode.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/ReferenceNode.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Resources/imagelis.bmp (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/SelectionListener.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/SolutionListener.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/SolutionListenerForProjectEvents.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/SolutionListenerForProjectOpen.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/SolutionListenerForProjectReferenceUpdate.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/StructuresEnums.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/SuspendFileChanges.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Tracing.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/TrackDocumentsHelper.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/TypeConverters.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/UIThread.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/UpdateSolutionEventsListener.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/Utilities.cs (99%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/VSMDCodeDomProvider.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/VSProjectConstants.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/VSShellUtilities.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/VsCommands.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/xlf/Microsoft.VisualStudio.Package.Project.cs.xlf (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/xlf/Microsoft.VisualStudio.Package.Project.de.xlf (99%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/xlf/Microsoft.VisualStudio.Package.Project.es.xlf (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf (99%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/xlf/Microsoft.VisualStudio.Package.Project.it.xlf (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/xlf/Microsoft.VisualStudio.Package.Project.ja.xlf (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/xlf/Microsoft.VisualStudio.Package.Project.ko.xlf (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/xlf/Microsoft.VisualStudio.Package.Project.pl.xlf (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/xlf/Microsoft.VisualStudio.Package.Project.pt-BR.xlf (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf (98%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/xlf/Microsoft.VisualStudio.Package.Project.tr.xlf (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/xlf/Microsoft.VisualStudio.Package.Project.zh-Hans.xlf (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{ => Project}/xlf/Microsoft.VisualStudio.Package.Project.zh-Hant.xlf (100%) create mode 100644 vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/CodeGeneratorRegistrationAttribute.cs create mode 100644 vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/ComponentPickerPropertyPageAttribute.cs create mode 100644 vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/EditorFactoryNotifyForProjectAttribute.cs create mode 100644 vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/ProvideAppCommandLineAttribute.cs create mode 100644 vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/SolutionPersistenceRegistrationAttribute.cs create mode 100644 vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideLanguagePropertyAttribute.cs create mode 100644 vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideProjectFactoryAttribute.cs create mode 100644 vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideProjectFactoryTemplateMappingAttribute.cs create mode 100644 vsintegration/src/FSharp.ProjectSystem.FSharp/Overview.xml rename vsintegration/src/FSharp.ProjectSystem.FSharp/{FSharp.ProjectSystem.FSharp.fsproj => ProjectSystem.fsproj} (91%) rename vsintegration/src/FSharp.ProjectSystem.PropertyPages/{FSharp.ProjectSystem.PropertyPages.vbproj => FSharp.PropertiesPages.vbproj} (99%) delete mode 100644 vsintegration/tests/UnitTests/Tests.RoslynHelpers.fs delete mode 100644 vsintegration/tests/UnitTests/Workspace/WorkspaceTests.fs diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 1397683d28c..0a66fd8d385 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -8,21 +8,13 @@ assignees: '' --- **Is your feature request related to a problem? Please describe.** - A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** - A clear and concise description of what you want to happen. **Describe alternatives you've considered** - A clear and concise description of any alternative solutions or features you've considered. **Additional context** - -If the issue is about: -* improving a compiler error message, please mention "related: #1103" -* improving/adjusting the parser, please mention "related: #11481" - Add any other context or screenshots about the feature request here. diff --git a/.gitignore b/.gitignore index 3345325f7a6..89681ee5a61 100644 --- a/.gitignore +++ b/.gitignore @@ -9,19 +9,43 @@ artifacts/ # Patches that may have been generated by scripts. # (These aren't generally useful to commit directly; if anything, they should be applied.) scripts/*.patch +/fcs/FSharp.Compiler.Service/illex.fs +/fcs/FSharp.Compiler.Service/ilpars.fs +/fcs/FSharp.Compiler.Service/ilpars.fsi +/fcs/FSharp.Compiler.Service/lex.fs +/fcs/FSharp.Compiler.Service/pars.fs +/fcs/FSharp.Compiler.Service/pars.fsi +/fcs/FSharp.Compiler.Service/pplex.fs +/fcs/FSharp.Compiler.Service/pppars.fs +/fcs/FSharp.Compiler.Service/pppars.fsi /src/*.userprefs /src/fsharp/FSStrings.resources /src/fsharp/FSharp.Build/*.resx +/src/fsharp/FSharp.Build-proto/*.resx +/src/fsharp/FSharp.Build-proto/*.resources +/src/fsharp/FSharp.Compiler-proto/*.resx +/src/fsharp/FSharp.Compiler-proto/*.resources +/src/fsharp/FSharp.Compiler-proto/*.sln +/src/fsharp/FSharp.Compiler-proto/*.userprefs /src/fsharp/fsi/*.resx /src/fsharp/FSharp.Compiler.Interactive.Settings/*.resx /src/fsharp/FSharp.Compiler.Server.Shared/*.resx /src/fsharp/fsi/Fsi.sln /src/fsharp/FSharp.Build/*.resources -/src/fsharp/FSharp.Compiler.Service/*.resx -/src/fsharp/FSharp.Compiler.Service/*.resources -/src/fsharp/FSharp.Compiler.Service/*.sln -/src/fsharp/FSharp.Compiler.Service/*.userprefs +/src/fsharp/FSharp.Compiler.Private/*.resx +/src/fsharp/FSharp.Compiler.Private/*.resources +/src/fsharp/FSharp.Compiler.Private/*.sln +/src/fsharp/FSharp.Compiler.Private/*.userprefs /src/*.log +/src/fsharp/Fsc-proto/illex.fs +/src/fsharp/Fsc-proto/ilpars.fs +/src/fsharp/Fsc-proto/ilpars.fsi +/src/fsharp/Fsc-proto/lex.fs +/src/fsharp/Fsc-proto/pars.fs +/src/fsharp/Fsc-proto/pars.fsi +/src/fsharp/Fsc-proto/pplex.fs +/src/fsharp/Fsc-proto/pppars.fs +/src/fsharp/Fsc-proto/pppars.fsi /src/fsharp/FSharp.LanguageService.Compiler/illex.* /src/fsharp/FSharp.LanguageService.Compiler/ilpars.* /src/fsharp/FSharp.LanguageService.Compiler/lex.* diff --git a/DEVGUIDE.md b/DEVGUIDE.md index a5e92c63e6d..cc8c7e84a6e 100644 --- a/DEVGUIDE.md +++ b/DEVGUIDE.md @@ -108,8 +108,8 @@ Running any of the above will build the latest changes and run tests against the If your changes involve modifying the list of language keywords in any way, (e.g. when implementing a new keyword), the XLF localization files need to be synced with the corresponding resx files. This can be done automatically by running - pushd src\fsharp\FSharp.Compiler.Service - msbuild FSharp.Compiler.Service.fsproj /t:UpdateXlf + pushd src\fsharp\FSharp.Compiler.Private + msbuild FSharp.Compiler.Private.fsproj /t:UpdateXlf popd This only works on Windows/.NETStandard framework, so changing this from any other platform requires editing and syncing all of the XLF files manually. @@ -122,7 +122,7 @@ See (DEVGUIDE.md#Developing on Windows) for instructions to install what is need ### Quickly see your changes locally -First, ensure that `VisualFSharpDebug` is the startup project. +First, ensure that `VisualFSharpFull` is the startup project. Then, use the **f5** or **ctrl+f5** keyboard shortcuts to test your tooling changes. The former will debug a new instance of Visual Studio. The latter will launch a new instance of Visual Studio, but with your changes installed. @@ -136,7 +136,7 @@ If you'd like to "run with your changes", you can produce a VSIX and install it ``` VSIXInstaller.exe /u:"VisualFSharp" -VSIXInstaller.exe artifacts\VSSetup\Release\VisualFSharpDebug.vsix +VSIXInstaller.exe artifacts\VSSetup\Release\VisualFSharpFull.vsix ``` It's important to use `Release` if you want to see if your changes have had a noticeable performance impact. @@ -170,4 +170,9 @@ See the "Debugging The Compiler" section of this [article](https://medium.com/@w If you are behind a proxy server, NuGet client tool must be configured to use it: -See the Nuget config file documention for use with a proxy server [https://docs.microsoft.com/en-us/nuget/reference/nuget-config-file](https://docs.microsoft.com/en-us/nuget/reference/nuget-config-file) +``` +.nuget\nuget.exe config -set http_proxy=proxy.domain.com:8080 -ConfigFile NuGet.Config +.nuget\nuget.exe config -set http_proxy.user=user_name -ConfigFile NuGet.Config +.nuget\nuget.exe config -set http_proxy.password=user_password -ConfigFile NuGet.Config +``` +Where you should set proper proxy address, user name and password. diff --git a/FSharp.Profiles.props b/FSharp.Profiles.props index 260bccd3bf9..993512bde43 100644 --- a/FSharp.Profiles.props +++ b/FSharp.Profiles.props @@ -20,6 +20,7 @@ $(DefineConstants);FX_NO_SYSTEM_CONFIGURATION $(DefineConstants);FX_NO_WIN_REGISTRY $(DefineConstants);FX_NO_WINFORMS + $(DefineConstants);FX_NO_INDENTED_TEXT_WRITER $(DefineConstants);FX_RESHAPED_REFEMIT $(OtherFlags) --simpleresolution diff --git a/FSharp.sln b/FSharp.sln index da837f9b04f..210dac21ef6 100644 --- a/FSharp.sln +++ b/FSharp.sln @@ -3,6 +3,8 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.28729.10 MinimumVisualStudioVersion = 10.0.40219.1 +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private", "src\fsharp\FSharp.Compiler.Private\FSharp.Compiler.Private.fsproj", "{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}" +EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Server.Shared", "src\fsharp\FSharp.Compiler.Server.Shared\FSharp.Compiler.Server.Shared.fsproj", "{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Core", "src\fsharp\FSharp.Core\FSharp.Core.fsproj", "{DED3BBD7-53F4-428A-8C9F-27968E768605}" @@ -44,8 +46,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.FSharp.Compiler", EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.DependencyManager.Nuget", "src\fsharp\FSharp.DependencyManager.Nuget\FSharp.DependencyManager.Nuget.fsproj", "{8B7BF62E-7D8C-4928-BE40-4E392A9EE851}" EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting", "src\fsharp\FSharp.Compiler.Private.Scripting\FSharp.Compiler.Private.Scripting.fsproj", "{6771860A-614D-4FDD-A655-4C70EBCC91B0}" +EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting.UnitTests", "tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj", "{4FEDF286-0252-4EBC-9E75-879CCA3B85DC}" EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Microsoft.DotNet.DependencyManager", "src\fsharp\Microsoft.DotNet.DependencyManager\Microsoft.DotNet.DependencyManager.fsproj", "{B5A043F8-6D7F-4D4E-B8AD-5880070180B6}" +EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.ComponentTests", "tests\FSharp.Compiler.ComponentTests\FSharp.Compiler.ComponentTests.fsproj", "{FAC5A3BF-C0D6-437A-868A-E962AA00B418}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "fsharpqa", "fsharpqa", "{292C4F92-A313-4CAF-9552-731F39C6C21F}" @@ -70,6 +76,18 @@ Global Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Debug|x86.ActiveCfg = Debug|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Debug|x86.Build.0 = Debug|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Proto|Any CPU.ActiveCfg = Release|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Proto|Any CPU.Build.0 = Release|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Proto|x86.ActiveCfg = Release|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Proto|x86.Build.0 = Release|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Release|Any CPU.Build.0 = Release|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Release|x86.ActiveCfg = Release|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Release|x86.Build.0 = Release|Any CPU {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Debug|Any CPU.Build.0 = Debug|Any CPU {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -238,6 +256,18 @@ Global {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Release|Any CPU.Build.0 = Release|Any CPU {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Release|x86.ActiveCfg = Release|Any CPU {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Release|x86.Build.0 = Release|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Debug|x86.ActiveCfg = Debug|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Debug|x86.Build.0 = Debug|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Proto|Any CPU.ActiveCfg = Debug|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Proto|Any CPU.Build.0 = Debug|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Proto|x86.ActiveCfg = Debug|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Proto|x86.Build.0 = Debug|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Release|Any CPU.Build.0 = Release|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Release|x86.ActiveCfg = Release|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Release|x86.Build.0 = Release|Any CPU {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Debug|Any CPU.Build.0 = Debug|Any CPU {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -250,6 +280,18 @@ Global {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Release|Any CPU.Build.0 = Release|Any CPU {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Release|x86.ActiveCfg = Release|Any CPU {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Release|x86.Build.0 = Release|Any CPU + {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Debug|x86.ActiveCfg = Debug|Any CPU + {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Debug|x86.Build.0 = Debug|Any CPU + {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Proto|Any CPU.ActiveCfg = Debug|Any CPU + {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Proto|Any CPU.Build.0 = Debug|Any CPU + {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Proto|x86.ActiveCfg = Debug|Any CPU + {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Proto|x86.Build.0 = Debug|Any CPU + {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Release|Any CPU.Build.0 = Release|Any CPU + {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Release|x86.ActiveCfg = Release|Any CPU + {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Release|x86.Build.0 = Release|Any CPU {FAC5A3BF-C0D6-437A-868A-E962AA00B418}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FAC5A3BF-C0D6-437A-868A-E962AA00B418}.Debug|Any CPU.Build.0 = Debug|Any CPU {FAC5A3BF-C0D6-437A-868A-E962AA00B418}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -303,6 +345,7 @@ Global HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} {DED3BBD7-53F4-428A-8C9F-27968E768605} = {3058BC79-8E79-4645-B05D-48CC182FA8A6} {702A7979-BCF9-4C41-853E-3ADFC9897890} = {B8DDA694-7939-42E3-95E5-265C2217C142} {C94C257C-3C0A-4858-B5D8-D746498D1F08} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} @@ -316,14 +359,16 @@ Global {53C0DAAD-158C-4658-8EC7-D7341530239F} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} {81B9FE26-C976-4FC7-B6CC-C7DB5903CAA7} = {3840F2E7-3898-45F7-8CF7-1E6829E56DB8} {8B7BF62E-7D8C-4928-BE40-4E392A9EE851} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} + {6771860A-614D-4FDD-A655-4C70EBCC91B0} = {B8DDA694-7939-42E3-95E5-265C2217C142} {4FEDF286-0252-4EBC-9E75-879CCA3B85DC} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} + {B5A043F8-6D7F-4D4E-B8AD-5880070180B6} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} {FAC5A3BF-C0D6-437A-868A-E962AA00B418} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} {292C4F92-A313-4CAF-9552-731F39C6C21F} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} {FF76050A-415A-4FB4-A0E5-13CBF38D83E0} = {292C4F92-A313-4CAF-9552-731F39C6C21F} {07482B5E-4980-4285-B732-820F15870284} = {FF76050A-415A-4FB4-A0E5-13CBF38D83E0} {25568CD2-E654-4C8F-BE5B-59BABFC5BD20} = {07482B5E-4980-4285-B732-820F15870284} {DDFD06DC-D7F2-417F-9177-107764EEBCD8} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {9B4CF83C-C215-4EA0-9F8B-B5A77090F634} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} + {9B4CF83C-C215-4EA0-9F8B-B5A77090F634} = {3058BC79-8E79-4645-B05D-48CC182FA8A6} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BD5177C7-1380-40E7-94D2-7768E1A8B1B8} diff --git a/FSharpBuild.Directory.Build.props b/FSharpBuild.Directory.Build.props index 767e0da6ebc..ff7a1b670da 100644 --- a/FSharpBuild.Directory.Build.props +++ b/FSharpBuild.Directory.Build.props @@ -8,11 +8,6 @@ - - - true - - $(RepoRoot)src $(RepoRoot)tests @@ -20,7 +15,6 @@ $(ArtifactsDir)\Bootstrap 4.4.0 1182;0025;$(WarningsAsErrors) - $(OtherFlags) --nowarn:3384 diff --git a/FSharpTests.Directory.Build.props b/FSharpTests.Directory.Build.props index 9d9983693af..90d73761408 100644 --- a/FSharpTests.Directory.Build.props +++ b/FSharpTests.Directory.Build.props @@ -22,18 +22,18 @@ $([System.IO.Path]::GetDirectoryName('$(DOTNET_HOST_PATH)')) dotnet.exe dotnet - $(MSBuildThisFileDirectory)artifacts\bin\fsc\$(Configuration)\net5.0\fsc.dll + $(MSBuildThisFileDirectory)artifacts\bin\fsc\$(Configuration)\netcoreapp3.1\fsc.exe $([System.IO.Path]::GetDirectoryName('$(DOTNET_HOST_PATH)')) dotnet.exe dotnet - $(MSBuildThisFileDirectory)artifacts\bin\fsi\$(Configuration)\net5.0\fsi.dll + $(MSBuildThisFileDirectory)artifacts\bin\fsi\$(Configuration)\netcoreapp3.1\fsi.exe <_FSharpBuildTargetFramework Condition="'$(MSBuildRuntimeType)'!='Core'">net472 - <_FSharpBuildTargetFramework Condition="'$(MSBuildRuntimeType)'=='Core'">net5.0 + <_FSharpBuildTargetFramework Condition="'$(MSBuildRuntimeType)'=='Core'">netcoreapp3.1 <_FSharpBuildBinPath>$(MSBuildThisFileDirectory)artifacts\bin\fsc\$(Configuration)\$(_FSharpBuildTargetFramework) $(_FSharpBuildBinPath)\FSharp.Build.dll diff --git a/INTERNAL.md b/INTERNAL.md index 2dbfdcd20e0..2d91080f4a6 100644 --- a/INTERNAL.md +++ b/INTERNAL.md @@ -7,10 +7,6 @@ Note that usually only the most recent link in each section is interesting. Old The PR build definition can be found [here](https://dev.azure.com/dnceng/public/_build?definitionId=496) or by navigating through an existing PR. -There is also a duplicate scouting PR build that is identical to the normal PR build _except_ that it uses a different Windows -machine queue that always has the next preview build of Visual Studio installed. This is to hopefully get ahead of any breaking -API changes. That build definition is [here](https://dev.azure.com/dnceng/public/_build?definitionId=961). - ## Signed Build Definitions [VS 16.4 to current](https://dev.azure.com/dnceng/internal/_build?definitionId=499&_a=summary) diff --git a/NuGet.config b/NuGet.config index 7e6ce303990..5b537e8b233 100644 --- a/NuGet.config +++ b/NuGet.config @@ -6,11 +6,12 @@ + - + diff --git a/README.md b/README.md index 1f3ee92dfcf..1eb6e1c3b78 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,19 @@ Even if you find a single-character typo, we're happy to take the change! Althou |:------:|:------:| |main|[![Build Status](https://dev.azure.com/dnceng/public/_apis/build/status/dotnet/fsharp/fsharp-ci?branchName=main)](https://dev.azure.com/dnceng/public/_build/latest?definitionId=496&branchName=main)| +## Using nightly releases in Visual Studio + +You can use the latest `main` build of the F# compiler and tools for Visual Studio via our nightly releases if you are a Visual Studio user. See details on setup here: + +https://blogs.msdn.microsoft.com/dotnet/2017/03/14/announcing-nightly-releases-for-the-visual-f-tools/ + +### Even more nightly than the nightly + +Alternatively, if you _really_ want to live on the bleeding edge, you can set up a nightly feed for the Visual Studio preview releases, which use the latest commit in the preview branch. To do so, follow the same instructions as the above blog post, but instead with these links: + +* Set your feed to the preview feed: https://dotnet.myget.org/F/fsharp-preview/vsix +* Install a VSIX manually from the preview feed: https://dotnet.myget.org/feed/fsharp-preview/package/vsix/VisualFSharp + ## Per-build NuGet packages Per-build verions of our NuGet packages are available via this URL: `https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json ` diff --git a/VisualFSharp.sln b/VisualFSharp.sln index 4ab8ee853dc..629673b8574 100644 --- a/VisualFSharp.sln +++ b/VisualFSharp.sln @@ -28,6 +28,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Legacy", "Legacy", "{CCAB6E EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.VS.FSI", "vsintegration\src\FSharp.VS.FSI\FSharp.VS.FSI.fsproj", "{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}" EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private", "src\fsharp\FSharp.Compiler.Private\FSharp.Compiler.Private.fsproj", "{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}" +EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VisualFSharpFull", "vsintegration\Vsix\VisualFSharpFull\VisualFSharpFull.csproj", "{59ADCE46-9740-4079-834D-9A03A3494EBC}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Server.Shared", "src\fsharp\FSharp.Compiler.Server.Shared\FSharp.Compiler.Server.Shared.fsproj", "{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}" @@ -40,11 +42,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FSharp.LanguageService.Base EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Editor", "vsintegration\src\FSharp.Editor\FSharp.Editor.fsproj", "{65E0E82A-EACE-4787-8994-888674C2FE87}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FSharp.ProjectSystem.Base", "vsintegration\src\FSharp.ProjectSystem.Base\FSharp.ProjectSystem.Base.csproj", "{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProjectSystem.Base", "vsintegration\src\FSharp.ProjectSystem.Base\Project\ProjectSystem.Base.csproj", "{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}" EndProject -Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "FSharp.ProjectSystem.PropertyPages", "vsintegration\src\FSharp.ProjectSystem.PropertyPages\FSharp.ProjectSystem.PropertyPages.vbproj", "{FCFB214C-462E-42B3-91CA-FC557EFEE74F}" +Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "FSharp.PropertiesPages", "vsintegration\src\FSharp.ProjectSystem.PropertyPages\FSharp.PropertiesPages.vbproj", "{FCFB214C-462E-42B3-91CA-FC557EFEE74F}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.ProjectSystem.FSharp", "vsintegration\src\FSharp.ProjectSystem.FSharp\FSharp.ProjectSystem.FSharp.fsproj", "{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "ProjectSystem", "vsintegration\src\FSharp.ProjectSystem.FSharp\ProjectSystem.fsproj", "{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "VisualFSharp.Salsa", "vsintegration\tests\Salsa\VisualFSharp.Salsa.fsproj", "{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}" EndProject @@ -138,6 +140,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NuGet", "NuGet", "{647810D0 EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.FSharp.Compiler", "src\fsharp\Microsoft.FSharp.Compiler\Microsoft.FSharp.Compiler.csproj", "{04C59F6E-1C76-4F6A-AC21-2EA7F296A1B8}" EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting", "src\fsharp\FSharp.Compiler.Private.Scripting\FSharp.Compiler.Private.Scripting.fsproj", "{20B7BC36-CF51-4D75-9E13-66681C07977F}" +EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting.UnitTests", "tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj", "{09F56540-AFA5-4694-B7A6-0DBF6D4618C2}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.DependencyManager.Nuget", "src\fsharp\FSharp.DependencyManager.Nuget\FSharp.DependencyManager.Nuget.fsproj", "{DFA30881-C0B1-4813-B087-C21B5AF9B77F}" @@ -152,24 +156,14 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibraryProject", "vsintegra EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TutorialProject", "vsintegration\ProjectTemplates\TutorialProject\TutorialProject.csproj", "{2937CBEC-262D-4C94-BE1D-291FAB72E3E8}" EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Microsoft.DotNet.DependencyManager", "src\fsharp\Microsoft.DotNet.DependencyManager\Microsoft.DotNet.DependencyManager.fsproj", "{C2F38485-5F87-4986-985B-55D7ED96D5CE}" +EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.ComponentTests", "tests\FSharp.Compiler.ComponentTests\FSharp.Compiler.ComponentTests.fsproj", "{0610FB97-7C15-422A-86FD-32335C6DF14D}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Service", "src\fsharp\FSharp.Compiler.Service\FSharp.Compiler.Service.fsproj", "{B5A9BBD9-2F45-4722-A6CA-BAE3C64CD4E2}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Service.Tests", "tests\FSharp.Compiler.Service.Tests\FSharp.Compiler.Service.Tests.fsproj", "{14F3D3D6-5C8E-43C2-98A2-17EA704D4DEA}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VisualFSharpDebug", "vsintegration\Vsix\VisualFSharpFull\VisualFSharpDebug.csproj", "{A422D673-8E3B-4924-821B-DD3174173426}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Benchmarks", "Benchmarks", "{DFB6ADD7-3149-43D9-AFA0-FC4A818B472B}" -EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "CompilerServiceBenchmarks", "tests\benchmarks\CompilerServiceBenchmarks\CompilerServiceBenchmarks.fsproj", "{564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MicroPerfCSharp", "tests\benchmarks\MicroPerf\CS\MicroPerfCSharp.csproj", "{208E36EE-665C-42D2-B767-C6DB03C4FEB2}" -EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "MicroPerf", "tests\benchmarks\MicroPerf\MicroPerf.fsproj", "{EE08E954-AE91-4EFA-8595-10931D29E628}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MicroPerf", "MicroPerf", "{47112E07-9FF1-43E7-8021-F2A21D6A19A0}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -192,6 +186,18 @@ Global {991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.Release|Any CPU.Build.0 = Release|Any CPU {991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.Release|x86.ActiveCfg = Release|Any CPU {991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.Release|x86.Build.0 = Release|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Debug|x86.ActiveCfg = Debug|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Debug|x86.Build.0 = Debug|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Proto|Any CPU.ActiveCfg = Release|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Proto|Any CPU.Build.0 = Release|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Proto|x86.ActiveCfg = Release|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Proto|x86.Build.0 = Release|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Release|Any CPU.Build.0 = Release|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Release|x86.ActiveCfg = Release|Any CPU + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.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 @@ -828,6 +834,18 @@ Global {04C59F6E-1C76-4F6A-AC21-2EA7F296A1B8}.Release|Any CPU.Build.0 = Release|Any CPU {04C59F6E-1C76-4F6A-AC21-2EA7F296A1B8}.Release|x86.ActiveCfg = Release|Any CPU {04C59F6E-1C76-4F6A-AC21-2EA7F296A1B8}.Release|x86.Build.0 = Release|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Debug|x86.ActiveCfg = Debug|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Debug|x86.Build.0 = Debug|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Proto|Any CPU.ActiveCfg = Debug|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Proto|Any CPU.Build.0 = Debug|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Proto|x86.ActiveCfg = Debug|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Proto|x86.Build.0 = Debug|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Release|Any CPU.Build.0 = Release|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Release|x86.ActiveCfg = Release|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Release|x86.Build.0 = Release|Any CPU {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Debug|Any CPU.Build.0 = Debug|Any CPU {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -900,6 +918,18 @@ Global {2937CBEC-262D-4C94-BE1D-291FAB72E3E8}.Release|Any CPU.Build.0 = Release|Any CPU {2937CBEC-262D-4C94-BE1D-291FAB72E3E8}.Release|x86.ActiveCfg = Release|Any CPU {2937CBEC-262D-4C94-BE1D-291FAB72E3E8}.Release|x86.Build.0 = Release|Any CPU + {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Debug|x86.ActiveCfg = Debug|Any CPU + {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Debug|x86.Build.0 = Debug|Any CPU + {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Proto|Any CPU.ActiveCfg = Debug|Any CPU + {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Proto|Any CPU.Build.0 = Debug|Any CPU + {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Proto|x86.ActiveCfg = Debug|Any CPU + {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Proto|x86.Build.0 = Debug|Any CPU + {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Release|Any CPU.Build.0 = Release|Any CPU + {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Release|x86.ActiveCfg = Release|Any CPU + {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Release|x86.Build.0 = Release|Any CPU {0610FB97-7C15-422A-86FD-32335C6DF14D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0610FB97-7C15-422A-86FD-32335C6DF14D}.Debug|Any CPU.Build.0 = Debug|Any CPU {0610FB97-7C15-422A-86FD-32335C6DF14D}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -936,54 +966,6 @@ Global {14F3D3D6-5C8E-43C2-98A2-17EA704D4DEA}.Release|Any CPU.Build.0 = Release|Any CPU {14F3D3D6-5C8E-43C2-98A2-17EA704D4DEA}.Release|x86.ActiveCfg = Release|Any CPU {14F3D3D6-5C8E-43C2-98A2-17EA704D4DEA}.Release|x86.Build.0 = Release|Any CPU - {A422D673-8E3B-4924-821B-DD3174173426}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A422D673-8E3B-4924-821B-DD3174173426}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A422D673-8E3B-4924-821B-DD3174173426}.Debug|x86.ActiveCfg = Debug|Any CPU - {A422D673-8E3B-4924-821B-DD3174173426}.Debug|x86.Build.0 = Debug|Any CPU - {A422D673-8E3B-4924-821B-DD3174173426}.Proto|Any CPU.ActiveCfg = Debug|Any CPU - {A422D673-8E3B-4924-821B-DD3174173426}.Proto|Any CPU.Build.0 = Debug|Any CPU - {A422D673-8E3B-4924-821B-DD3174173426}.Proto|x86.ActiveCfg = Debug|Any CPU - {A422D673-8E3B-4924-821B-DD3174173426}.Proto|x86.Build.0 = Debug|Any CPU - {A422D673-8E3B-4924-821B-DD3174173426}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A422D673-8E3B-4924-821B-DD3174173426}.Release|Any CPU.Build.0 = Release|Any CPU - {A422D673-8E3B-4924-821B-DD3174173426}.Release|x86.ActiveCfg = Release|Any CPU - {A422D673-8E3B-4924-821B-DD3174173426}.Release|x86.Build.0 = Release|Any CPU - {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Debug|Any CPU.Build.0 = Debug|Any CPU - {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Debug|x86.ActiveCfg = Debug|Any CPU - {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Debug|x86.Build.0 = Debug|Any CPU - {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Proto|Any CPU.ActiveCfg = Debug|Any CPU - {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Proto|Any CPU.Build.0 = Debug|Any CPU - {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Proto|x86.ActiveCfg = Debug|Any CPU - {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Proto|x86.Build.0 = Debug|Any CPU - {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Release|Any CPU.ActiveCfg = Release|Any CPU - {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Release|Any CPU.Build.0 = Release|Any CPU - {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Release|x86.ActiveCfg = Release|Any CPU - {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Release|x86.Build.0 = Release|Any CPU - {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Debug|x86.ActiveCfg = Debug|Any CPU - {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Debug|x86.Build.0 = Debug|Any CPU - {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Proto|Any CPU.ActiveCfg = Debug|Any CPU - {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Proto|Any CPU.Build.0 = Debug|Any CPU - {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Proto|x86.ActiveCfg = Debug|Any CPU - {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Proto|x86.Build.0 = Debug|Any CPU - {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Release|Any CPU.Build.0 = Release|Any CPU - {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Release|x86.ActiveCfg = Release|Any CPU - {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Release|x86.Build.0 = Release|Any CPU - {EE08E954-AE91-4EFA-8595-10931D29E628}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EE08E954-AE91-4EFA-8595-10931D29E628}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EE08E954-AE91-4EFA-8595-10931D29E628}.Debug|x86.ActiveCfg = Debug|Any CPU - {EE08E954-AE91-4EFA-8595-10931D29E628}.Debug|x86.Build.0 = Debug|Any CPU - {EE08E954-AE91-4EFA-8595-10931D29E628}.Proto|Any CPU.ActiveCfg = Debug|Any CPU - {EE08E954-AE91-4EFA-8595-10931D29E628}.Proto|Any CPU.Build.0 = Debug|Any CPU - {EE08E954-AE91-4EFA-8595-10931D29E628}.Proto|x86.ActiveCfg = Debug|Any CPU - {EE08E954-AE91-4EFA-8595-10931D29E628}.Proto|x86.Build.0 = Debug|Any CPU - {EE08E954-AE91-4EFA-8595-10931D29E628}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EE08E954-AE91-4EFA-8595-10931D29E628}.Release|Any CPU.Build.0 = Release|Any CPU - {EE08E954-AE91-4EFA-8595-10931D29E628}.Release|x86.ActiveCfg = Release|Any CPU - {EE08E954-AE91-4EFA-8595-10931D29E628}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -995,6 +977,7 @@ Global {35636A82-401A-4C3A-B2AB-EB7DC5E9C268} = {F7876C9B-FB6A-4EFB-B058-D6967DB75FB2} {CCAB6E50-34C6-42AF-A6B0-567C29FCD91B} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} {991DCF75-C2EB-42B6-9A0D-AA1D2409D519} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} {59ADCE46-9740-4079-834D-9A03A3494EBC} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06} = {B8DDA694-7939-42E3-95E5-265C2217C142} {DED3BBD7-53F4-428A-8C9F-27968E768605} = {3058BC79-8E79-4645-B05D-48CC182FA8A6} @@ -1048,6 +1031,7 @@ Global {E93E7D28-1C6B-4E04-BE83-68428CF7E039} = {6235B3AF-774D-4EA1-8F37-789E767F6368} {9482211E-23D0-4BD0-9893-E4AA5559F67A} = {6235B3AF-774D-4EA1-8F37-789E767F6368} {04C59F6E-1C76-4F6A-AC21-2EA7F296A1B8} = {647810D0-5307-448F-99A2-E83917010DAE} + {20B7BC36-CF51-4D75-9E13-66681C07977F} = {B8DDA694-7939-42E3-95E5-265C2217C142} {09F56540-AFA5-4694-B7A6-0DBF6D4618C2} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} {DFA30881-C0B1-4813-B087-C21B5AF9B77F} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} {AA259A37-418F-4E18-87B2-C7D5F8C26CC4} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} @@ -1055,14 +1039,10 @@ Global {44155269-9B30-43DA-B97F-4F36F887B211} = {12EF27FD-A34B-4373-860A-F9FCE9651859} {B53D9D05-8EF7-43A6-9A5B-0B113CBC54F8} = {12EF27FD-A34B-4373-860A-F9FCE9651859} {2937CBEC-262D-4C94-BE1D-291FAB72E3E8} = {12EF27FD-A34B-4373-860A-F9FCE9651859} + {C2F38485-5F87-4986-985B-55D7ED96D5CE} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} {0610FB97-7C15-422A-86FD-32335C6DF14D} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {B5A9BBD9-2F45-4722-A6CA-BAE3C64CD4E2} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} + {B5A9BBD9-2F45-4722-A6CA-BAE3C64CD4E2} = {3058BC79-8E79-4645-B05D-48CC182FA8A6} {14F3D3D6-5C8E-43C2-98A2-17EA704D4DEA} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {A422D673-8E3B-4924-821B-DD3174173426} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} - {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61} = {DFB6ADD7-3149-43D9-AFA0-FC4A818B472B} - {208E36EE-665C-42D2-B767-C6DB03C4FEB2} = {47112E07-9FF1-43E7-8021-F2A21D6A19A0} - {EE08E954-AE91-4EFA-8595-10931D29E628} = {47112E07-9FF1-43E7-8021-F2A21D6A19A0} - {47112E07-9FF1-43E7-8021-F2A21D6A19A0} = {DFB6ADD7-3149-43D9-AFA0-FC4A818B472B} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {48EDBBBE-C8EE-4E3C-8B19-97184A487B37} diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 609d388714f..37979ac6b9c 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -57,7 +57,7 @@ variables: - name: VisualStudioDropName value: Products/$(System.TeamProject)/$(Build.Repository.Name)/$(Build.SourceBranchName)/$(Build.BuildNumber) - name: DotNetSdkVersion - value: '5.0.300' + value: '5.0.100' - ${{ if and(eq(variables['System.TeamProject'], 'public'), eq(variables['Build.Reason'], 'PullRequest')) }}: - name: RunningAsPullRequest value: true @@ -77,12 +77,6 @@ stages: # Signed build # #-------------------------------------------------------------------------------------------------------------------# - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/main') }}: - - template: /eng/common/templates/job/onelocbuild.yml - parameters: - MirrorRepo: fsharp - LclSource: lclFilesfromPackage - LclPackageId: 'LCL-JUNO-PROD-FSHARP' - template: /eng/common/templates/jobs/jobs.yml parameters: enableMicrobuild: true @@ -90,7 +84,6 @@ stages: enablePublishTestResults: false enablePublishBuildAssets: true enablePublishUsingPipelines: $(_PublishUsingPipelines) - enableSourceBuild: true enableTelemetry: true helixRepo: dotnet/fsharp jobs: @@ -163,7 +156,7 @@ stages: - task: PublishBuildArtifacts@1 displayName: Publish Artifact Nightly inputs: - PathtoPublish: '$(Build.SourcesDirectory)\artifacts\VSSetup\$(_BuildConfig)\VisualFSharpDebug.vsix' + PathtoPublish: '$(Build.SourcesDirectory)\artifacts\VSSetup\$(_BuildConfig)\VisualFSharpFull.vsix' ArtifactName: 'Nightly' condition: succeeded() - task: PublishBuildArtifacts@1 @@ -191,7 +184,6 @@ stages: enablePublishTestResults: false enablePublishBuildAssets: true enablePublishUsingPipelines: $(_PublishUsingPipelines) - enableSourceBuild: true enableTelemetry: true helixRepo: dotnet/fsharp jobs: @@ -199,12 +191,7 @@ stages: # Windows - job: Windows pool: - # The PR build definition sets this variable: - # WindowsMachineQueueName=BuildPool.Windows.10.Amd64.VS2019.Open - # and there is an alternate build definition that sets this to a queue that is always scouting the - # next preview of Visual Studio. - name: NetCorePublic-Pool - queue: $(WindowsMachineQueueName) + vmImage: windows-latest timeoutInMinutes: 120 strategy: maxParallel: 4 @@ -241,7 +228,7 @@ stages: ArtifactName: 'Windows $(_configuration) $(_testKind) test logs' publishLocation: Container continueOnError: true - condition: failed() + condition: eq(variables['_testKind'], 'testFSharpQA') - script: dotnet build $(Build.SourcesDirectory)/eng/DumpPackageRoot/DumpPackageRoot.csproj displayName: Dump NuGet cache contents condition: failed() @@ -284,14 +271,6 @@ stages: searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' continueOnError: true condition: always() - - task: PublishBuildArtifacts@1 - displayName: Publish Test Logs - inputs: - PathtoPublish: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' - ArtifactName: 'Linux $(_BuildConfig) test logs' - publishLocation: Container - continueOnError: true - condition: failed() - script: dotnet build $(Build.SourcesDirectory)/eng/DumpPackageRoot/DumpPackageRoot.csproj displayName: Dump NuGet cache contents condition: failed() @@ -324,14 +303,6 @@ stages: searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' continueOnError: true condition: always() - - task: PublishBuildArtifacts@1 - displayName: Publish Test Logs - inputs: - PathtoPublish: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' - ArtifactName: 'MacOS $(_BuildConfig) test logs' - publishLocation: Container - continueOnError: true - condition: failed() - script: dotnet build $(Build.SourcesDirectory)/eng/DumpPackageRoot/DumpPackageRoot.csproj displayName: Dump NuGet cache contents condition: failed() @@ -355,6 +326,32 @@ stages: - script: .\tests\EndToEndBuildTests\EndToEndBuildTests.cmd -c Release displayName: End to end build tests + # Source Build Windows + - ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: + - job: SourceBuild_Windows + pool: + vmImage: windows-latest + steps: + - checkout: self + clean: true + - script: eng\CIBuild.cmd -configuration Release -noSign -prepareMachine -sourceBuild + displayName: Build + - task: PublishPipelineArtifact@1 + displayName: Publish Logs + inputs: + targetPath: '$(Build.SourcesDirectory)/artifacts/log/Release' + artifactName: 'SourceBuild_Windows Logs' + continueOnError: true + condition: not(succeeded()) + - task: PublishBuildArtifacts@1 + displayName: Publish Logs + inputs: + PathtoPublish: '$(Build.SourcesDirectory)/artifacts/log/Release' + ArtifactName: 'SourceBuild_Windows_Test' + publishLocation: Container + continueOnError: true + condition: not(succeeded()) + # Up-to-date - disabled due to it being flaky #- job: UpToDate_Windows # pool: @@ -368,6 +365,35 @@ stages: # filePath: eng\tests\UpToDate.ps1 # arguments: -configuration $(_BuildConfig) -ci -binaryLog + # Source Build Semi-Official + - ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: + - job: SourceBuild_Official + # used until https://github.com/dotnet/source-build/issues/1795 is fixed + pool: + name: NetCorePublic-Pool + queue: BuildPool.Ubuntu.1604.amd64.Open + timeoutInMinutes: 90 + steps: + - checkout: self + clean: true + - script: ./eng/cibuild.sh --configuration Release --prepareMachine --docker --sourceBuild + displayName: Build + - task: PublishPipelineArtifact@1 + displayName: Publish Logs + inputs: + targetPath: '$(Build.SourcesDirectory)/artifacts/log/Release' + artifactName: 'SourceBuild_Official Logs' + continueOnError: true + condition: not(succeeded()) + - task: PublishBuildArtifacts@1 + displayName: Publish Logs + inputs: + PathtoPublish: '$(Build.SourcesDirectory)/artifacts/log/Release' + ArtifactName: 'SourceBuild_Official_Test' + publishLocation: Container + continueOnError: true + condition: not(succeeded()) + # Plain build Windows # Disabled until the Windows Proto compiler is coreclr # - job: Plain_Build_Windows @@ -471,8 +497,7 @@ stages: - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - template: eng/release/insert-into-vs.yml parameters: - componentBranchName: refs/heads/release/dev16.9 - insertTargetBranch: rel/d16.9 + componentBranchName: release/dev16.8 + insertTargetBranch: master insertTeamEmail: fsharpteam@microsoft.com insertTeamName: 'F#' - completeInsertion: 'auto' diff --git a/docs/compiler-guide.md b/docs/compiler-guide.md index 86e23265268..3bf86f8f600 100644 --- a/docs/compiler-guide.md +++ b/docs/compiler-guide.md @@ -6,15 +6,17 @@ This guide discusses the F# compiler source code and implementation from a techn There are several artifacts involved in the development of F#: -* The [F# compiler library](https://github.com/dotnet/fsharp/tree/main/src/fsharp/FSharp.Compiler.Service), called `FSharp.Compiler.Service`. Contains all logic for F# compilation - including parsing, syntax tree processing, typechecking, constraint solving, optimizations, IL importing, IL writing, pretty printing of F# constructs, and F# metadata format processing - and the F# compiler APIs for tooling. +* The [F# compiler library](https://github.com/dotnet/fsharp/tree/master/src/fsharp/FSharp.Compiler.Private), called `FSharp.Compiler.Private`. Contains all logic for F# compilation - including parsing, syntax tree processing, typechecking, constraint solving, optimizations, IL importing, IL writing, pretty printing of F# constructs, and F# metadata format processing - and the F# compiler APIs for tooling. -* The [F# compiler executable](https://github.com/dotnet/fsharp/tree/main/src/fsharp/fsc), called `fsc`, which is called as a console app. It sets the .NET GC into batch mode and then invokes `FSharp.Compiler.Service` with command-line arguments. +* The [F# compiler executable](https://github.com/dotnet/fsharp/tree/master/src/fsharp/fsc), called `fsc`, which is called as a console app. It sets the .NET GC into batch mode and then invokes `FSharp.Compiler.Private` with command-line arguments. -* The [F# Core Library](https://github.com/dotnet/fsharp/tree/main/src/fsharp/FSharp.Core), called `FSharp.Core`. Contains all primitive F# types and logic for how they interact, core data structures and library functions for operating on them, structured printing logic, units of measure for scientific programming, core numeric functionality, F# quotations, F# type reflection logic, and asynchronous programming types and logic. +* The [F# Core Library](https://github.com/dotnet/fsharp/tree/master/src/fsharp/FSharp.Core), called `FSharp.Core`. Contains all primitive F# types and logic for how they interact, core data structures and library functions for operating on them, structured printing logic, units of measure for scientific programming, core numeric functionality, F# quotations, F# type reflection logic, and asynchronous programming types and logic. -* The [F# Interactive tool](https://github.com/dotnet/fsharp/tree/main/src/fsharp/fsi), called `fsi`. A REPL for F# that supports execution and pretty-printing of F# code and results, loading F# script files, referencing assemblies, and referencing packages from NuGet. +* The [F# Interactive tool](https://github.com/dotnet/fsharp/tree/master/src/fsharp/fsi), called `fsi`. A REPL for F# that supports execution and pretty-printing of F# code and results, loading F# script files, referencing assemblies, and referencing packages from NuGet. -The `FSharp.Compiler.Service` is by far the largest of these components and contains nearly all logic that `fsc` and `fsi` use. It is the primary subject of this guide. +* The [F# Compiler Service](https://github.com/dotnet/fsharp/tree/master/fcs), called `FSharp.Compiler.Service` or abbreviated to FCS. It is mostly identical to `FSharp.Compiler.Private`, but critically contains the "Expression API" that allows other environments to inspect and operate on type-checked F# expressions (such as transpiling F# code to a different runtime target). + +The `FSharp.Compiler.Private` is by far the largest of these components and contains nearly all logic that `fsc` and `fsi` use. It is the primary subject of this guide. ## Resources for learning @@ -28,21 +30,21 @@ The following are the key data formats and internal data representations of the * _Input source files_ Read as Unicode text, or binary for referenced assemblies. -* _Input command-line arguments_ See [CompilerOptions.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/CompilerOptions.fs) for the full code implementing the arguments table. Command-line arguments are also accepted by the F# Compiler Service API in project specifications, and as optional input to F# Interactive. +* _Input command-line arguments_ See [CompileOptions.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/CompileOptions.fs) for the full code implementing the arguments table. Command-line arguments are also accepted by the F# Compiler Service API in project specifications, and as optional input to F# Interactive. -* _Tokens_, see [pars.fsy](https://github.com/dotnet/fsharp/blob/main/src/fsharp/pars.fsy), [lex.fsl](https://github.com/dotnet/fsharp/blob/main/src/fsharp/lex.fsl), [lexhelp.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/lexhelp.fs) and related files. +* _Tokens_, see [pars.fsy](https://github.com/dotnet/fsharp/blob/master/src/fsharp/pars.fsy), [lex.fsl](https://github.com/dotnet/fsharp/blob/master/src/fsharp/lex.fsl), [lexhelp.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/lexhelp.fs) and related files. -* _Abstract Syntax Tree (AST)_, see [SyntaxTree.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/SyntaxTree.fs), the untyped syntax tree resulting from parsing. +* _Abstract Syntax Tree (AST)_, see [SyntaxTree.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/SyntaxTree.fs), the untyped syntax tree resulting from parsing. -* _Typed Abstract Syntax Tree (Typed Tree)_, see [TypedTree.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/TypedTree.fs), [TypedTreeBasics.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/TypedTree.fs), [TypedTreeOps.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/TypedTreeOps.fs), and related files. The typed, bound syntax tree including both type/module definitions and their backing expressions, resulting from type checking and the subject of successive phases of optimization and representation change. +* _Typed Abstract Syntax Tree (Typed Tree)_, see [TypedTree.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/TypedTree.fs), [TypedTreeBasics.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/TypedTree.fs), [TypedTreeOps.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/TypedTreeOps.fs), and related files. The typed, bound syntax tree including both type/module definitions and their backing expressions, resulting from type checking and the subject of successive phases of optimization and representation change. -* _Type checking context/state_, see for example [`TcState` in ParseAndCheckInputs.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/ParseAndCheckInputs.fsi) and its constituent parts, particularly `TcEnv` in [CheckExpressions.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/CheckExpressions.fsi) and `NameResolutionEnv` in [NameResolution.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/NameResolution.fsi). A set of tables representing the available names, assemblies etc. in scope during type checking, plus associated information. +* _Type checking context/state_, see for example [`TcState` in CompileOps.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/CompileOps.fsi) and its constituent parts, particularly `TcEnv` in [CheckExpressions.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/CheckExpressions.fsi) and `NameResolutionEnv` in [NameResolution.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/NameResolution.fsi). A set of tables representing the available names, assemblies etc. in scope during type checking, plus associated information. -* _Abstract IL_, the output of code generation, then used for binary generation, and the input format when reading .NET assemblies, see [`ILModuleDef` in il.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/absil/il.fsi). +* _Abstract IL_, the output of code generation, then used for binary generation, and the input format when reading .NET assemblies, see [`ILModuleDef` in il.fs](https://github.com/dotnet/fsharp/blob/master/src/absil/il.fsi). -* _The .NET Binary format_ (with added "pickled" F# Metadata resource), the final output of fsc.exe, see the ECMA 335 specification and the [ilread.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/absil/ilread.fs) and [ilwrite.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/absil/ilwrite.fs) binary reader/generator implementations. The added F# metadata is stored in a binary resource, see [TypedTreePickle.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/TypedTreePickle.fs). +* _The .NET Binary format_ (with added "pickled" F# Metadata resource), the final output of fsc.exe, see the ECMA 335 specification and the [ilread.fs](https://github.com/dotnet/fsharp/blob/master/src/absil/ilread.fs) and [ilwrite.fs](https://github.com/dotnet/fsharp/blob/master/src/absil/ilwrite.fs) binary reader/generator implementations. The added F# metadata is stored in a binary resource, see [TypedTreePickle.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/TypedTreePickle.fs). -* _The incrementally emitted .NET reflection assembly,_ the incremental output of fsi.exe. See [ilreflect.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/absil/ilreflect.fs). +* _The incrementally emitted .NET reflection assembly,_ the incremental output of fsi.exe. See [ilreflect.fs](https://github.com/dotnet/fsharp/blob/master/src/absil/ilreflect.fs). ## Key constructs and APIs for F# tooling @@ -50,11 +52,11 @@ The following are the most relevant parts of the F# compiler tooling, making up * The incremental project build engine state in [IncrementalBuild.fsi](https://github.com/fsharp/FSharp.Compiler.Service/tree/master/src/fsharp/service/IncrementalBuild.fsi)/[IncrementalBuild.fs](https://github.com/fsharp/FSharp.Compiler.Service/tree/master/src/fsharp/service/IncrementalBuild.fs), a part of the F# Compiler Service API. -* The corresponding APIs wrapping and accessing these structures in the public-facing [`FSharp.Compiler.Service` API](https://github.com/dotnet/fsharp/tree/main/src/fsharp/service) and [Symbol API](https://github.com/dotnet/fsharp/tree/main/src/fsharp/symbols). +* The corresponding APIs wrapping and accessing these structures in the public-facing [`FSharp.Compiler.Service` API](https://github.com/dotnet/fsharp/tree/master/src/fsharp/service) and [Symbol API](https://github.com/dotnet/fsharp/tree/master/src/fsharp/symbols). -* The [F# Compiler Service Operations Queue](https://fsharp.github.io/FSharp.Compiler.Service/queue.html), the mechanism used to sequentially process requests that require semantic information. +* The [F# Compiler Service Operations Queue](fsharp-compiler-service-queue.md), the mechanism used to sequentially process requests that require semantic information. -* The [F# Compiler Service Caches](https://fsharp.github.io/FSharp.Compiler.Service/caches.html), the various caches maintained by an instance of an `FSharpChecker`. +* The [F# Compiler Service Caches](fsharp-compiler-service-caches.md), the various caches maintained by an instance of an `FSharpChecker`. ## Key compiler phases @@ -70,46 +72,43 @@ The following are the key phases and high-level logical operations of the F# com * _Parsing_. Accepts a token stream and produces an AST per the grammar in the F# Language Specification. -* _Resolving references_. For .NET SDK generally references are resolved explicitly by external tooling. - There is a legacy aspect to this if references use old .NET Framework references including for - scripting. See [ReferenceResolver.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/ReferenceResolver.fs) for the abstract definition of compiler reference resolution. See [LegacyMSBuildReferenceResolver.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/LegacyMSBuildReferenceResolver.fs) for reference resolution used by the .NET Framework F# compiler when running on .NET Framework. See [SimulatedMSBuildReferenceResolver.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/SimulatedMSBuildReferenceResolver.fs) when not using the .NET Framework F# compiler. - See [DependencyManager](https://github.com/dotnet/fsharp/tree/main/src/fsharp/DependencyManager) for reference resolution and package management used in `fsi`. +* _Resolving references_. See [ReferenceResolver.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/ReferenceResolver.fs) for the abstract definition of compiler reference resolution. See [LegacyMSBuildReferenceResolver.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/LegacyMSBuildReferenceResolver.fs) for reference resolution used by the .NET Framework F# compiler when running on .NET Framework. See [SimulatedMSBuildReferenceResolver.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/SimulatedMSBuildReferenceResolver.fs) when not using the .NET Framework F# compiler. See [Microsoft.DotNet.DependencyManager](https://github.com/dotnet/fsharp/tree/master/src/fsharp/Microsoft.DotNet.DependencyManager) for reference resolution and package management used in `fsi`. -* _Importing referenced .NET binaries_, see [import.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/import.fsi)/[import.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/import.fs). Accepts file references and produces a Typed Tree node for each referenced assembly, including information about its type definitions (and type forwarders if any). +* _Importing referenced .NET binaries_, see [import.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/import.fsi)/[import.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/import.fs). Accepts file references and produces a Typed Tree node for each referenced assembly, including information about its type definitions (and type forwarders if any). -* _Importing referenced F# binaries and optimization information as Typed Tree data structures_, see [TypedTreePickle.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/TypedTreePickle.fs). Accepts binary data and produces Typed Tree nodes for each referenced assembly, including information about its type/module/function/member definitions. +* _Importing referenced F# binaries and optimization information as Typed Tree data structures_, see [TypedTreePickle.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/TypedTreePickle.fs). Accepts binary data and produces Typed Tree nodes for each referenced assembly, including information about its type/module/function/member definitions. -* _Sequentially type checking files_, see [CheckDeclarations.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/CheckDeclarations.fsi)/[CheckDeclarations.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/CheckDeclarations.fs). Accepts an AST plus a type checking context/state and produces new Typed Tree nodes +* _Sequentially type checking files_, see [CheckDeclarations.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/CheckDeclarations.fsi)/[CheckDeclarations.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/CheckDeclarations.fs). Accepts an AST plus a type checking context/state and produces new Typed Tree nodes incorporated into an updated type checking state, plus additional Typed Tree Expression nodes used during code generation. A key part of this is - checking syntactic types and expressions, see [CheckExpressions.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/CheckDeclarations.fsi)/[CheckExpressions.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/CheckDeclarations.fs) including the state held across the checking of a file (see `TcFileState`) and the + checking syntactic types and expressions, see [CheckExpressions.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/CheckDeclarations.fsi)/[CheckExpressions.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/CheckDeclarations.fs) including the state held across the checking of a file (see `TcFileState`) and the environment active as we traverse declarations and expressions (see `TcEnv`). -* _Pattern match compilation_, see [PatternMatchCompilation.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/PatternMatchCompilation.fsi)/[PatternMatchCompilation.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/PatternMatchCompilation.fs). Accepts a subset of checked Typed Tree nodes representing F# pattern matching and produces Typed Tree expressions implementing the pattern matching. Called during type checking as each construct involving pattern matching is processed. +* _Pattern match compilation_, see [PatternMatchCompilation.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/PatternMatchCompilation.fsi)/[PatternMatchCompilation.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/PatternMatchCompilation.fs). Accepts a subset of checked Typed Tree nodes representing F# pattern matching and produces Typed Tree expressions implementing the pattern matching. Called during type checking as each construct involving pattern matching is processed. -* _Constraint solving_, see [ConstraintSolver.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/ConstraintSolver.fsi)/[ConstraintSolver.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/ConstraintSolver.fs).A constraint solver state is maintained during type checking of a single file, and constraints are progressively asserted (i.e. added to this state). Fresh inference variables are generated and variables are eliminated (solved). Variables are also generalized at various language constructs, or explicitly declared, making them "rigid". Called during type checking as each construct is processed. +* _Constraint solving_, see [ConstraintSolver.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/ConstraintSolver.fsi)/[ConstraintSolver.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/ConstraintSolver.fs).A constraint solver state is maintained during type checking of a single file, and constraints are progressively asserted (i.e. added to this state). Fresh inference variables are generated and variables are eliminated (solved). Variables are also generalized at various language constructs, or explicitly declared, making them "rigid". Called during type checking as each construct is processed. -* _Post-inference type checks_, see [PostInferenceChecks.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/PostInferenceChecks.fsi)/[PostInferenceChecks.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/PostInferenceChecks.fs). Called at the end of type checking/inference for each file. A range of checks that can only be enforced after type checking on a file is complete, such as analysis when using `byref<'T>` or other `IsByRefLike` structs. +* _Post-inference type checks_, see [PostInferenceChecks.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/PostInferenceChecks.fsi)/[PostInferenceChecks.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/PostInferenceChecks.fs). Called at the end of type checking/inference for each file. A range of checks that can only be enforced after type checking on a file is complete, such as analysis when using `byref<'T>` or other `IsByRefLike` structs. -* _Quotation translation_, see [QuotationTranslator.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/QuotationTranslator.fsi)/[QuotationTranslator.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/QuotationTranslator.fs)/[QuotationPickler.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/QuotationPickler.fsi)/[QuotationPickler.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/QuotationPickler.fs). Generates the stored information for F# quotation nodes, generated from the Typed Tree expression structures of the F# compiler. Quotations are ultimately stored as binary data plus some added type references. "ReflectedDefinition" quotations are collected and stored in a single blob. +* _Quotation translation_, see [QuotationTranslator.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/QuotationTranslator.fsi)/[QuotationTranslator.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/QuotationTranslator.fs)/[QuotationPickler.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/QuotationPickler.fsi)/[QuotationPickler.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/QuotationPickler.fs). Generates the stored information for F# quotation nodes, generated from the Typed Tree expression structures of the F# compiler. Quotations are ultimately stored as binary data plus some added type references. "ReflectedDefinition" quotations are collected and stored in a single blob. -* _Optimization phases_, primarily the "Optimize" (peephole/inlining) and "Top Level Representation" (lambda lifting) phases, see [Optimizer.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/Optimizer.fsi)/[Optimizer.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/Optimizer.fs) and [InnerLambdasToTopLevelFuncs.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/InnerLambdasToTopLevelFuncs.fsi)/[InnerLambdasToTopLevelFuncs.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/InnerLambdasToTopLevelFuncs.fs) and [LowerCallsAndSeqs.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/LowerCallsAndSeqs.fs). Each of these takes Typed Tree nodes for types and expressions and either modifies the nodes in place or produces new Typed Tree nodes. These phases are orchestrated in [CompilerOptions.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/CompilerOptions.fs) +* _Optimization phases_, primarily the "Optimize" (peephole/inlining) and "Top Level Representation" (lambda lifting) phases, see [Optimizer.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/Optimizer.fsi)/[Optimizer.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/Optimizer.fs) and [InnerLambdasToTopLevelFuncs.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/InnerLambdasToTopLevelFuncs.fsi)/[InnerLambdasToTopLevelFuncs.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/InnerLambdasToTopLevelFuncs.fs) and [LowerCallsAndSeqs.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/LowerCallsAndSeqs.fs). Each of these takes Typed Tree nodes for types and expressions and either modifies the nodes in place or produces new Typed Tree nodes. These phases are orchestrated in [CompileOptions.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/CompileOptions.fs) -* _Code generation_, see [IlxGen.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/IlxGen.fsi)/[IlxGen.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/IlxGen.fs). Accepts Typed Tree nodes and produces Abstract IL nodes, sometimes applying optimizations. +* _Code generation_, see [IlxGen.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/IlxGen.fsi)/[IlxGen.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/IlxGen.fs). Accepts Typed Tree nodes and produces Abstract IL nodes, sometimes applying optimizations. -* _Abstract IL code rewriting_, see [EraseClosures.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/ilx/EraseClosures.fs) and - [EraseUnions.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/ilx/EraseUnions.fs). Eliminates some constructs by rewriting Abstract IL nodes. +* _Abstract IL code rewriting_, see [EraseClosures.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/ilx/EraseClosures.fs) and + [EraseUnions.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/ilx/EraseUnions.fs). Eliminates some constructs by rewriting Abstract IL nodes. -* _Binary emit_, see [ilwrite.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/absil/ilwrite.fsi)/[ilwrite.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/absil/ilwrite.fs). +* _Binary emit_, see [ilwrite.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/absil/ilwrite.fsi)/[ilwrite.fs](https://github.com/dotnet/fsharp/blob/master/src/absil/ilwrite.fs). -* _Reflection-Emit_, see [ilreflect.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/absil/ilreflect.fs). +* _Reflection-Emit_, see [ilreflect.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/absil/ilreflect.fs). These and transformations used to build the following: -* _The F# Compiler Service API_, see the [Symbol API](https://github.com/dotnet/fsharp/tree/main/src/fsharp/symbols) and [Service API](https://github.com/dotnet/fsharp/tree/main/src/fsharp/service) +* _The F# Compiler Service API_, see the [Symbol API](https://github.com/dotnet/fsharp/tree/master/src/fsharp/symbols) and [Service API](https://github.com/dotnet/fsharp/tree/master/src/fsharp/service) -* _The F# Interactive Shell_, see [fsi.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/fsi/fsi.fs). +* _The F# Interactive Shell_, see [fsi.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/fsi/fsi.fs). -* _The F# Compiler Shell_, see [fsc.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/fsc.fs) and [fscmain.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/fscmain.fs). +* _The F# Compiler Shell_, see [fsc.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/fsc.fs) and [fscmain.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/fscmain.fs). ## Tools to help work with the compiler @@ -282,9 +281,9 @@ The previous example is considered incomplete, because arbitrary _combinations_ ## Code Optimizations -Code optimizations are performed in [`Optimizer.fs`](https://github.com/dotnet/fsharp/blob/main/src/fsharp/Optimizer.fs), [`DetupleArgs.fs`](https://github.com/dotnet/fsharp/blob/main/src/fsharp/DetupleArgs.fs), [`InnerLambdasToTopLevelFuncs.fs`](https://github.com/dotnet/fsharp/blob/main/src/fsharp/InnerLambdasToTopLevelFuncs.fs) and [`LowerCallsAndSeqs.fs`](https://github.com/dotnet/fsharp/blob/main/src/fsharp/LowerCallsAndSeqs.fs). +Code optimizations are performed in [`Optimizer.fs`](https://github.com/dotnet/fsharp/blob/master/src/fsharp/Optimizer.fs), [`DetupleArgs.fs`](https://github.com/dotnet/fsharp/blob/master/src/fsharp/DetupleArgs.fs), [`InnerLambdasToTopLevelFuncs.fs`](https://github.com/dotnet/fsharp/blob/master/src/fsharp/InnerLambdasToTopLevelFuncs.fs) and [`LowerCallsAndSeqs.fs`](https://github.com/dotnet/fsharp/blob/master/src/fsharp/LowerCallsAndSeqs.fs). -Some of the optimizations performed in [`Optimizer.fs`](https://github.com/dotnet/fsharp/blob/main/src/fsharp/Optimizer.fs) are: +Some of the optimizations performed in [`Optimizer.fs`](https://github.com/dotnet/fsharp/blob/master/src/fsharp/Optimizer.fs) are: * Propagation of known values (constants, x = y, lambdas, tuples/records/union-cases of known values) * Inlining of known lambda values @@ -296,7 +295,7 @@ Some of the optimizations performed in [`Optimizer.fs`](https://github.com/dotne * Splitting large functions into multiple methods, especially at match cases, to avoid massive methods that take a long time to JIT * Removing tailcalls when it is determined that no code in the transitive closure does a tailcall nor recurses -In [`DetupleArgs.fs`](https://github.com/dotnet/fsharp/blob/main/src/fsharp/DetupleArgs.fs), tuples at call sites are eliminated if possible. Concretely, functions that accept a tuple at all call sites are replaced by functions that accept each of the tuple's arguments individually. This may require inlining to activate. +In [`DetupleArgs.fs`](https://github.com/dotnet/fsharp/blob/master/src/fsharp/DetupleArgs.fs), tuples at call sites are eliminated if possible. Concretely, functions that accept a tuple at all call sites are replaced by functions that accept each of the tuple's arguments individually. This may require inlining to activate. Considering the following example: @@ -328,7 +327,7 @@ The inner function `offsetValues` will allocate a new tuple when called. However Currently, these optimizations are not applied to `struct` tuples or explicit `ValueTuple`s passed to a function. In most cases, this doesn't matter because the handling of `ValueTuple` is well-optimized and may be erased at runtime. However, in the previous `runWithTuple` function, the overhead of allocating a `ValueTuple` each call ends up being higher than the previous example with `inline` applied to `offsetValues`. This may be addressed in the future. -In [`InnerLambdasToTopLevelFuncs.fs`](https://github.com/dotnet/fsharp/blob/main/src/fsharp/InnerLambdasToTopLevelFuncs.fs), inner functions and lambdas are analyzed and, if possible, rewritten into separate methods that do not require an `FSharpFunc` allocation. +In [`InnerLambdasToTopLevelFuncs.fs`](https://github.com/dotnet/fsharp/blob/master/src/fsharp/InnerLambdasToTopLevelFuncs.fs), inner functions and lambdas are analyzed and, if possible, rewritten into separate methods that do not require an `FSharpFunc` allocation. Consider the following implementation of `sumBy` on an F# list: @@ -343,7 +342,7 @@ let sumBy f xs = The inner `loop` function is emitted as a separate static method named `loop@2` and incurs no overhead involved with allocatin an `FSharpFunc` at runtime. -In [`LowerCallsAndSeqs.fs`](https://github.com/dotnet/fsharp/blob/main/src/fsharp/LowerCallsAndSeqs.fs), a few optimizations are performed: +In [`LowerCallsAndSeqs.fs`](https://github.com/dotnet/fsharp/blob/master/src/fsharp/LowerCallsAndSeqs.fs), a few optimizations are performed: * Performs eta-expansion on under-applied values applied to lambda expressions and does a beta-reduction to bind any known arguments * Analyzes a sequence expression and translates it into a state machine so that operating on sequences doesn't incur significant closure overhead @@ -473,7 +472,7 @@ For example, commands like Find All References and Rename can be cheap if a code In contrast, actions like highlighting all symbols in a document aren't terribly expensive even for very large file files. That's because the symbols to be inspected are ultimately only in a single document. -Operations that use typecheck data execute on a single background thread (see [Reactor.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/service/Reactor.fsi)/[Reactor.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/service/Reactor.fs)). Each operation is cancellable - for example, if you run an expensive Find All References but decide to do something else, the next action you take that requires semantic data will cancel the Find All References operation and start the one you requested. +Operations that use typecheck data execute on a single background thread (see [Reactor.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/service/Reactor.fsi)/[Reactor.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/service/Reactor.fs)). Each operation is cancellable - for example, if you run an expensive Find All References but decide to do something else, the next action you take that requires semantic data will cancel the Find All References operation and start the one you requested. TODO for don --> why single-threaded? why no priority queue if can't be multithreaded? @@ -528,7 +527,7 @@ Some key things to understand are: The biggest question is: could the compiler share this data across projects? In theory, yes. In practice, it's very tricky business. -From a correctness point of view: the process of generating this blob (TypedTreePickle `p_XYZ`) and resurrecting it (TypedTreePickle `u_*`) does some transformations to the Typed Tree that are necessary for correctness of compilation, for example, [in `TypedTreePickle`](https://github.com/dotnet/fsharp/blob/main/src/fsharp/TypedTreePickle.fs#L738). Basically, the Typed Tree nodes from the compilation of one assembly are _not_ valid when compiling a different assembly. +From a correctness point of view: the process of generating this blob (TypedTreePickle `p_XYZ`) and resurrecting it (TypedTreePickle `u_*`) does some transformations to the Typed Tree that are necessary for correctness of compilation, for example, [in `TypedTreePickle`](https://github.com/dotnet/fsharp/blob/master/src/fsharp/TypedTreePickle.fs#L737). Basically, the Typed Tree nodes from the compilation of one assembly are _not_ valid when compiling a different assembly. The Typed Tree nodes include `CcuData` nodes, which have access to a number of callbacks into the `TcImports` compilation context for the assembly being compiled. TypedTree nodes are effectively tied to a particular compilation of a particular assembly due to this. @@ -540,7 +539,7 @@ From a lifetime point of view: the Typed Tree nodes are tied together in a graph Some parts of the F# codebase (specifically, the type checker) are written using `eventually` computation expressions. These define resumption-like computations which can be time-sliced, suspended or discarded at "bind" points. -This is done to ensure that long-running type-checking and other computations in the F# Compiler Service can be interrupted and cancelled. The documentation of the [F# Compiler Service Operations Queue](https://fsharp.github.io/FSharp.Compiler.Service/queue.html) covers some aspects of this. +This is done to ensure that long-running type-checking and other computations in the F# Compiler Service can be interrupted and cancelled. The documentation of the [F# Compiler Service Operations Queue](fsharp-compiler-service-queue.md) covers some aspects of this. When compiling code with `fsc` or executing code with `fsi`, these computations are not time-sliced and simply run synchronously and without interruption (unless the user requests it). @@ -557,35 +556,17 @@ decide not to bother continuing with the computation (it drops it on the floor) The second can be interrupted via having `isResultObsolete` to the F# Compiler Service API return true. -### The F# Compiler Service Public Surface Area - -The "intended" FCS API is the parts under the namespaces - -* FSharp.Compiler.SourceCodeServices.* (analysis, compilation, tooling, lexing) -* FSharp.Compiler.Interactive.Shell.* (scripting support) -* FSharp.Compiler.AbstractIL.* (for ILAssemblyReader hook for Rider) -* FSharp.Compiler.Syntax.* (direct access to full untyped tree) - -These sections are generally designed with F#/.NET design conventions (e.g. types in namespaces, not modules, no nesting of modules etc.) -and we will continue to iterate to make this so. - -In contrast, the public parts of the compiler directly under `FSharp.Compiler.*` and `FSharp.AbstractIL.*` are -"incidental" and not really designed for public use apart from the hook for JetBrains Rider -(Aside: In theory all these other parts could be renamed to FSharp.Compiler though there's no need to do that right now). -These internal parts tend to be implemented with the "module containing lots of stuff in one big file" approach for layers of the compiler. - - ### The F# Compiler Service Operations Queue -See [F# Compiler Service Queue](https://fsharp.github.io/FSharp.Compiler.Service/queue.html). +See [F# Compiler Service Queue](fsharp-compiler-service-queue.md). ### The F# Compiler Service Caches -See [F# Compiler Service Caches](https://fsharp.github.io/FSharp.Compiler.Service/caches.html). +See [F# Compiler Service Caches](fsharp-compiler-service-caches.md). ## Bootstrapping -The F# compiler is bootstrapped. That is, an existing F# compiler is used to build a "proto" compiler from the current source code. That "proto" compiler is then used to compile itself, producing a "final" compiler. This ensures the final compiler is compiled with all relevant optimizations and fixes. +The F# compiler is boostrapped. That is, an existing F# compiler is used to build a "proto" compiler from the current source code. That "proto" compiler is then used to compile itself, producing a "final" compiler. This ensures the final compiler is compiled with all relevant optimizations and fixes. ## FSharp.Build @@ -593,4 +574,4 @@ The F# compiler is bootstrapped. That is, an existing F# compiler is used to bui ### Attribution -This document is based on an original document published in 2015 by the [F# Software Foundation](http://fsharp.org). It has since been updated substantially. +This document is based heavily on an [original document](http://fsharp.github.io/2015/09/29/fsharp-compiler-guide.html) published in 2015 by the [F# Software Foundation](http://fsharp.org). diff --git a/docs/fcs/compiler.fsx b/docs/fcs/compiler.fsx index e880ed57f1a..d4c48325408 100644 --- a/docs/fcs/compiler.fsx +++ b/docs/fcs/compiler.fsx @@ -29,7 +29,7 @@ First, we need to reference the libraries that contain F# interactive service: #r "FSharp.Compiler.Service.dll" open System.IO -open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.SourceCodeServices // Create an interactive checker instance let checker = FSharpChecker.Create() diff --git a/docs/fcs/corelib.fsx b/docs/fcs/corelib.fsx index cfcdba13557..e2aaf41a7db 100644 --- a/docs/fcs/corelib.fsx +++ b/docs/fcs/corelib.fsx @@ -4,25 +4,6 @@ Compiler Services: Notes on FSharp.Core.dll ================================================= -Versions of FSharp.Core involved in the operation of FSharp.Compiler.Service ---------------------------------------------- - -There are three versions of FSharp.Core relevant to the operation of FSharp.Compiler.Service: - -1. **The FSharp.Compiler.Service.dll static reference to FSharp.Core** - The FCS DLL and nuget have a static minbound dependency on FSharp.Core. - - This is just a normal .NET dependency like any other, it expresses the minimum surface area of FSharp.Core that the implementation of FSharp.Compiler.Service (and any components that depend on it) needs. It could be a reference to a reference assembly if we supported that. In theory this could be very low and all is cool - if we could implement FCS in terms of FSharp.Core 2.0.0.0 then that could be the minbound (indeed in theory we could implement FCS pretty almost without any use of FSharp.Core functionality at all, though obviously we don't) - - In practice this is 0-2 versions behind latest FSharp.Core. - -2. **The runtime reference to FSharp.Core in a tool, application or test suite that includes FSharp.Compiler.Service** - This is the actual version of FSharp.Core used when, say, fsc.exe or devenv.exe or fsi.exe or fsdocs.exe runs. - - This must be at least as high as (1) and is usually the very latest FSharp.Core available (in or out of repo tree). This is important to the operation of the FCS-based tool because it is used for execution of scripts, and the default compilation reference for scripts. If scripts are going to use a particular language feature then this must be sufficient to support the language feature - -3. **The FSharp.Core reference in a compilation or analysis being processed by FSharp.Compiler.Service**. - - This can be anything - 2.0.0.0, 4.0.0.0 or 5.0.0 or whatever. For script compilation and execution is is the same as (2). It must be sufficient to support language features used in the compilation. - Shipping an FSharp.Core with your application --------------------------------------------- @@ -32,6 +13,32 @@ include a copy of FSharp.Core.dll as part of your application. For example, if you build a ``HostedCompiler.exe``, you will normally place an FSharp.Core.dll (say 4.3.1.0) alongside your ``HostedCompiler.exe``. +Binding redirects for your application +-------------------------------------- + +The FSharp.Compiler.Service.dll component depends on FSharp.Core 4.4.0.0. Normally your application will target +a later version of FSharp.Core, and you may need a [binding redirect](https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/redirect-assembly-versions) to ensure +that other versions of FSharp.Core forward to the final version of FSharp.Core.dll your application uses. +Binding redirect files are normally generated automatically by build tools. If not, you can use one like this +(if your tool is called ``HostedCompiler.exe``, the binding redirect file is called ``HostedCompiler.exe.config``) + +Some other dependencies may also need to be reconciled and forwarded. + + + + + + + + + + + + + + + + Which FSharp.Core and .NET Framework gets referenced in compilation? -------------------------------------- @@ -82,7 +89,6 @@ Summary In this design note we have discussed three things: -- the versions of FSharp.Core relevant to the operation of FSharp.Compiler.Service.dll - which FSharp.Core.dll is used to run your compilation tools - how to configure binding redirects for the FSharp.Core.dll used to run your compilation tools - which FSharp.Core.dll and/or framework assemblies are referenced during the checking and compilations performed by your tools. diff --git a/docs/fcs/editor.fsx b/docs/fcs/editor.fsx index b707663c01b..144d6e74374 100644 --- a/docs/fcs/editor.fsx +++ b/docs/fcs/editor.fsx @@ -26,10 +26,8 @@ of `InteractiveChecker`: #r "FSharp.Compiler.Service.dll" open System -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices +open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Text -open FSharp.Compiler.Tokenization // Create an interactive checker instance let checker = FSharpChecker.Create() @@ -120,7 +118,7 @@ this is the type that lets you implement most of the interesting F# source code ### Getting a tool tip -To get a tool tip, you can use `GetToolTip` method. The method takes a line number and character +To get a tool tip, you can use `GetToolTipTextAlternate` method. The method takes a line number and character offset. Both of the numbers are zero-based. In the sample code, we want to get tooltip for the `foo` function that is defined on line 3 (line 0 is blank) and the letter `f` starts at index 7 (the tooltip would work anywhere inside the identifier). @@ -130,14 +128,17 @@ identifier (the other option lets you get tooltip with full assembly location wh *) // Get tag of the IDENT token to be used as the last argument +open FSharp.Compiler let identToken = FSharpTokenTag.Identifier // Get tool tip at the specified location -let tip = checkFileResults.GetToolTip(4, 7, inputLines.[1], ["foo"], identToken) +let tip = checkFileResults.GetToolTipText(4, 7, inputLines.[1], ["foo"], identToken) printfn "%A" tip (** +> **NOTE:** `GetToolTipTextAlternate` is an alternative name for the old `GetToolTipText`. The old `GetToolTipText` was +deprecated because it accepted zero-based line numbers. At some point it will be removed, and `GetToolTipTextAlternate` will be renamed back to `GetToolTipText`. *) (** @@ -200,7 +201,7 @@ let methods = // Print concatenated parameter lists for mi in methods.Methods do - [ for p in mi.Parameters do for tt in p.Display do yield tt.Text ] + [ for p in mi.Parameters -> p.Display ] |> String.concat ", " |> printfn "%s(%s)" methods.MethodName (** diff --git a/docs/fcs/filesystem.fsx b/docs/fcs/filesystem.fsx index 503a18ea9f1..b70174de514 100644 --- a/docs/fcs/filesystem.fsx +++ b/docs/fcs/filesystem.fsx @@ -21,11 +21,9 @@ open System open System.IO open System.Collections.Generic open System.Text -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.IO -open FSharp.Compiler.Text +open FSharp.Compiler.AbstractIL.Internal.Library -let defaultFileSystem = FileSystem +let defaultFileSystem = Shim.FileSystem let fileName1 = @"c:\mycode\test1.fs" // note, the path doesn't exist let fileName2 = @"c:\mycode\test2.fs" // note, the path doesn't exist @@ -93,7 +91,7 @@ let B = File1.A + File1.A""" defaultFileSystem.AssemblyLoad assemblyName let myFileSystem = MyFileSystem() -FileSystem <- MyFileSystem() +Shim.FileSystem <- MyFileSystem() (** @@ -101,6 +99,7 @@ Doing a compilation with the FileSystem --------------------------------------- *) +open FSharp.Compiler.SourceCodeServices let checker = FSharpChecker.Create() @@ -144,6 +143,7 @@ let projectOptions = ProjectId = None SourceFiles = [| fileName1; fileName2 |] OriginalLoadReferences = [] + ExtraProjectInfo=None Stamp = None OtherOptions = allFlags ReferencedProjects = [| |] @@ -154,7 +154,7 @@ let projectOptions = let results = checker.ParseAndCheckProject(projectOptions) |> Async.RunSynchronously -results.Diagnostics +results.Errors results.AssemblySignature.Entities.Count //2 results.AssemblySignature.Entities.[0].MembersFunctionsAndValues.Count //1 results.AssemblySignature.Entities.[0].MembersFunctionsAndValues.[0].DisplayName // "B" diff --git a/docs/fcs/interactive.fsx b/docs/fcs/interactive.fsx index e455e7283c4..4dd10119f3d 100644 --- a/docs/fcs/interactive.fsx +++ b/docs/fcs/interactive.fsx @@ -31,8 +31,8 @@ First, we need to reference the libraries that contain F# interactive service: *) #r "FSharp.Compiler.Service.dll" +open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Interactive.Shell -open FSharp.Compiler.Tokenization (** To communicate with F# interactive, we need to create streams that represent input and @@ -115,7 +115,7 @@ Catching errors ``EvalExpression``, ``EvalInteraction`` and ``EvalScript`` are awkward if the code has type checking warnings or errors, or if evaluation fails with an exception. In these cases you can use ``EvalExpressionNonThrowing``, ``EvalInteractionNonThrowing`` -and ``EvalScriptNonThrowing``. These return a tuple of a result and an array of ``FSharpDiagnostic`` values. +and ``EvalScriptNonThrowing``. These return a tuple of a result and an array of ``FSharpErrorInfo`` values. These represent the errors and warnings. The result part is a ``Choice<_,_>`` between an actual result and an exception. @@ -142,7 +142,7 @@ Gives: // show the errors and warnings for w in warnings do - printfn "Warning %s at %d,%d" w.Message w.StartLine w.StartColumn + printfn "Warning %s at %d,%d" w.Message w.StartLineAlternate w.StartColumn (** Gives: @@ -157,7 +157,7 @@ For expressions: let evalExpressionTyped2<'T> text = let res, warnings = fsiSession.EvalExpressionNonThrowing(text) for w in warnings do - printfn "Warning %s at %d,%d" w.Message w.StartLine w.StartColumn + printfn "Warning %s at %d,%d" w.Message w.StartLineAlternate w.StartColumn match res with | Choice1Of2 (Some value) -> value.ReflectionValue |> unbox<'T> | Choice1Of2 None -> failwith "null or no result" @@ -219,7 +219,7 @@ let parseResults, checkResults, checkProjectResults = The `parseResults` and `checkResults` have types `ParseFileResults` and `CheckFileResults` explained in [Editor](editor.html). You can, for example, look at the type errors in the code: *) -checkResults.Diagnostics.Length // 1 +checkResults.Errors.Length // 1 (** The code is checked with respect to the logical type context available in the F# interactive session @@ -227,9 +227,10 @@ based on the declarations executed so far. You can also request declaration list information, tooltip text and symbol resolution: *) +open FSharp.Compiler // get a tooltip -checkResults.GetToolTip(1, 2, "xxx + xx", ["xxx"], FSharpTokenTag.IDENT) +checkResults.GetToolTipText(1, 2, "xxx + xx", ["xxx"], FSharpTokenTag.IDENT) checkResults.GetSymbolUseAtLocation(1, 2, "xxx + xx", ["xxx"]) // symbol xxx diff --git a/docs/fcs/ja/compiler.fsx b/docs/fcs/ja/compiler.fsx index a795d8b2d39..8b14ea3f007 100644 --- a/docs/fcs/ja/compiler.fsx +++ b/docs/fcs/ja/compiler.fsx @@ -18,7 +18,7 @@ *) #r "FSharp.Compiler.Service.dll" -open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.SourceCodeServices open System.IO let scs = FSharpChecker.Create() diff --git a/docs/fcs/ja/corelib.fsx b/docs/fcs/ja/corelib.fsx index f5a7bbd2890..aa5acd33689 100644 --- a/docs/fcs/ja/corelib.fsx +++ b/docs/fcs/ja/corelib.fsx @@ -13,6 +13,27 @@ FSharp.Compiler.Service.dll を利用するアプリケーションまたはプ 動的コンパイルや動的実行を行う場合、FSharp.Core.optdata と FSharp.Core.sigdata も含める必要があるかもしれませんが、これらについては下記の指針をご覧ください。 +あなたのアプリケーションにリダイレクトをバインドする +---------------------------------------------------- + +FSharp.Compiler.Service.dll コンポーネントは FSharp.Core 4.3.0.0 に依存しています。通例、あなたのアプリケーションはこれより後のバージョンの FSharp.Core をターゲットにしており、FSharp.Core 4.3.0.0 をあなたのアプリケーションで用いる FSharp.Core.dll の最終バージョンにちゃんと転送させるように[バインド リダイレクト](https://msdn.microsoft.com/ja-jp/library/7wd6ex19(v=vs.110).aspx)が必要になるでしょう。バインド リダイレクト ファイルは通常ビルドツールによって自動的に生成されます。そうでない場合、下記のようなファイル(あなたのツールが ``HostedCompiler.exe`` という名前で、バインド リダイレクト ファイルが ``HostedCompiler.exe.config`` という名前の場合)を使うことが出来ます。 + + + + + + + + + + + + + + + + + どの FSharp.Core と .NET フレームワークがコンパイル時に参照される? -------------------------------------- diff --git a/docs/fcs/ja/editor.fsx b/docs/fcs/ja/editor.fsx index d5543eefdee..efbd5936ede 100644 --- a/docs/fcs/ja/editor.fsx +++ b/docs/fcs/ja/editor.fsx @@ -28,10 +28,8 @@ #r "FSharp.Compiler.Service.dll" open System -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices +open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Text -open FSharp.Compiler.Tokenization // インタラクティブチェッカーのインスタンスを作成 let checker = FSharpChecker.Create() @@ -140,13 +138,17 @@ let checkFileResults = *) // 最後の引数に指定する、IDENTトークンのタグを取得 +open FSharp.Compiler // 特定の位置におけるツールチップを取得 -let tip = checkFileResults.GetToolTip(4, 7, inputLines.[1], ["foo"], FSharpTokenTag.Identifier) +let tip = checkFileResults.GetToolTipText(4, 7, inputLines.[1], ["foo"], FSharpTokenTag.Identifier) printfn "%A" tip (** +> **注意:** `GetToolTipTextAlternate` は古い関数 `GetToolTipText` に代わるものです。 +`GetToolTipText` は0から始まる行番号を受け取るようになっていたため、非推奨になりました。 + この関数には位置とトークンの種類の他にも、 (ソースコードの変更時に役立つように)特定行の現在の内容と、 現時点における完全修飾された `名前` を表す文字列のリストを指定する必要があります。 @@ -215,7 +217,7 @@ let methods = // 連結された引数リストを表示 for mi in methods.Methods do - [ for p in mi.Parameters do for tt in p.Display do yield tt.Text ] + [ for p in mi.Parameters -> p.Display ] |> String.concat ", " |> printfn "%s(%s)" methods.MethodName (** diff --git a/docs/fcs/ja/filesystem.fsx b/docs/fcs/ja/filesystem.fsx index c012596a73b..5b0db49b294 100644 --- a/docs/fcs/ja/filesystem.fsx +++ b/docs/fcs/ja/filesystem.fsx @@ -17,12 +17,13 @@ FileSystemの設定 以下の例ではディスクからの読み取りを行うような実装をファイルシステムに設定しています: *) #r "FSharp.Compiler.Service.dll" +open System open System.IO +open System.Collections.Generic open System.Text -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.IO +open FSharp.Compiler.AbstractIL.Internal.Library -let defaultFileSystem = FileSystem +let defaultFileSystem = Shim.FileSystem let fileName1 = @"c:\mycode\test1.fs" // 注意: 実際には存在しないファイルのパス let fileName2 = @"c:\mycode\test2.fs" // 注意: 実際には存在しないファイルのパス @@ -90,7 +91,7 @@ let B = File1.A + File1.A""" defaultFileSystem.AssemblyLoad assemblyName let myFileSystem = MyFileSystem() -FileSystem <- MyFileSystem() +Shim.FileSystem <- MyFileSystem() (** @@ -98,7 +99,7 @@ FileSystemによるコンパイルの実行 -------------------------------- *) -open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.SourceCodeServices let checker = FSharpChecker.Create() let projectOptions = @@ -125,6 +126,7 @@ let projectOptions = ProjectId = None SourceFiles = [| fileName1; fileName2 |] OriginalLoadReferences = [] + ExtraProjectInfo=None Stamp = None OtherOptions = allFlags ReferencedProjects=[| |] @@ -135,7 +137,7 @@ let projectOptions = let results = checker.ParseAndCheckProject(projectOptions) |> Async.RunSynchronously -results.Diagnostics +results.Errors results.AssemblySignature.Entities.Count //2 results.AssemblySignature.Entities.[0].MembersFunctionsAndValues.Count //1 results.AssemblySignature.Entities.[0].MembersFunctionsAndValues.[0].DisplayName // "B" diff --git a/docs/fcs/ja/interactive.fsx b/docs/fcs/ja/interactive.fsx index 9f7fb2109f4..b2a27e02760 100644 --- a/docs/fcs/ja/interactive.fsx +++ b/docs/fcs/ja/interactive.fsx @@ -42,7 +42,7 @@ F# Interactiveの開始 *) #r "FSharp.Compiler.Service.dll" -open FSharp.Compiler.Tokenization +open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Interactive.Shell (** @@ -127,7 +127,7 @@ fsiSession.EvalScript "sample.fsx" `EvalExpression` 、 `EvalInteraction` そして `EvalScript` ではあまりうまく処理されません。 これらのケースでは、 `EvalExpressionNonThrowing` 、 `EvalInteractionNonThrowing` そして `EvalScriptNonThrowing` を使うことが出来ます。 -これらは結果と `FSharpDiagnostic` 値の配列の組を返します。 +これらは結果と `FSharpErrorInfo` 値の配列の組を返します。 これらはエラーと警告を表します。結果の部分は実際の結果と例外のいずれかを表す `Choice<_,_>` です。 @@ -156,7 +156,7 @@ match result with // エラーと警告を表示する for w in warnings do - printfn "警告 %s 場所 %d,%d" w.Message w.StartLine w.StartColumn + printfn "警告 %s 場所 %d,%d" w.Message w.StartLineAlternate w.StartColumn (** は次のようになります: @@ -171,7 +171,7 @@ for w in warnings do let evalExpressionTyped2<'T> text = let res, warnings = fsiSession.EvalExpressionNonThrowing(text) for w in warnings do - printfn "警告 %s 場所 %d,%d" w.Message w.StartLine w.StartColumn + printfn "警告 %s 場所 %d,%d" w.Message w.StartLineAlternate w.StartColumn match res with | Choice1Of2 (Some value) -> value.ReflectionValue |> unbox<'T> | Choice1Of2 None -> failwith "null または結果がありません" @@ -231,10 +231,10 @@ let parseResults, checkResults, checkProjectResults = (** `parseResults` と `checkResults` はそれぞれ [エディタ](editor.html) -のページで説明している `FSharpParseFileResults` と `FSharpCheckFileResults` 型です。 +のページで説明している `ParseFileResults` と `CheckFileResults` 型です。 たとえば以下のようなコードでエラーを確認出来ます: *) -checkResults.Diagnostics.Length // 1 +checkResults.Errors.Length // 1 (** コードはF# Interactiveセッション内において、その時点までに実行された @@ -244,9 +244,10 @@ checkResults.Diagnostics.Length // 1 要求することもできます: *) +open FSharp.Compiler // ツールチップを取得する -checkResults.GetToolTip(1, 2, "xxx + xx", ["xxx"], FSharpTokenTag.IDENT) +checkResults.GetToolTipText(1, 2, "xxx + xx", ["xxx"], FSharpTokenTag.IDENT) checkResults.GetSymbolUseAtLocation(1, 2, "xxx + xx", ["xxx"]) // シンボル xxx diff --git a/docs/fcs/ja/project.fsx b/docs/fcs/ja/project.fsx index bdb658a0452..4f59e11da94 100644 --- a/docs/fcs/ja/project.fsx +++ b/docs/fcs/ja/project.fsx @@ -22,9 +22,9 @@ // F#コンパイラAPIへの参照 #r "FSharp.Compiler.Service.dll" +open System open System.Collections.Generic -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Symbols +open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Text // インタラクティブチェッカーのインスタンスを作成 @@ -110,13 +110,13 @@ let wholeProjectResults = checker.ParseAndCheckProject(projectOptions) |> Async. (** 発生したエラーと警告は以下のようにしてチェックできます: *) -wholeProjectResults.Diagnostics.Length // 1 -wholeProjectResults.Diagnostics.[0].Message.Contains("Incomplete pattern matches on this expression") // true +wholeProjectResults.Errors.Length // 1 +wholeProjectResults.Errors.[0].Message.Contains("Incomplete pattern matches on this expression") // true -wholeProjectResults.Diagnostics.[0].StartLine // 13 -wholeProjectResults.Diagnostics.[0].EndLine // 13 -wholeProjectResults.Diagnostics.[0].StartColumn // 15 -wholeProjectResults.Diagnostics.[0].EndColumn // 16 +wholeProjectResults.Errors.[0].StartLineAlternate // 13 +wholeProjectResults.Errors.[0].EndLineAlternate // 13 +wholeProjectResults.Errors.[0].StartColumn // 15 +wholeProjectResults.Errors.[0].EndColumn // 16 (** 推測されたプロジェクトのシグネチャをチェックします: diff --git a/docs/fcs/ja/symbols.fsx b/docs/fcs/ja/symbols.fsx index 02e2ee48602..bc5994c612d 100644 --- a/docs/fcs/ja/symbols.fsx +++ b/docs/fcs/ja/symbols.fsx @@ -19,8 +19,9 @@ // F#コンパイラAPIへの参照 #r "FSharp.Compiler.Service.dll" +open System open System.IO -open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Text // インタラクティブチェッカーのインスタンスを作成 diff --git a/docs/fcs/ja/tokenizer.fsx b/docs/fcs/ja/tokenizer.fsx index 46548bbd74e..a1aa9080aea 100644 --- a/docs/fcs/ja/tokenizer.fsx +++ b/docs/fcs/ja/tokenizer.fsx @@ -18,10 +18,10 @@ F#のソースコードに対して、トークナイザは ------------------ トークナイザを使用するには、 `FSharp.Compiler.Service.dll` への参照を追加した後に -`Tokenization` 名前空間をオープンします: +`SourceCodeServices` 名前空間をオープンします: *) #r "FSharp.Compiler.Service.dll" -open FSharp.Compiler.Tokenization +open FSharp.Compiler.SourceCodeServices (** すると `FSharpSourceTokenizer` のインスタンスを作成できるようになります。 このクラスには2つの引数を指定します。 @@ -32,7 +32,7 @@ open FSharp.Compiler.Tokenization ファイル名はソースコードの位置を特定する場合にのみ指定する必要があります (存在しないファイル名でも指定できます): *) -let sourceTok = FSharpSourceTokenizer([], Some "C:\\test.fsx") +let sourceTok = FSharpSourceTokenizer([], "C:\\test.fsx") (** `sourceTok` オブジェクトを使用することでF#ソースコードの各行を (繰り返し)トークン化することができます。 diff --git a/docs/fcs/ja/untypedtree.fsx b/docs/fcs/ja/untypedtree.fsx index 6504431959f..f4050109d2c 100644 --- a/docs/fcs/ja/untypedtree.fsx +++ b/docs/fcs/ja/untypedtree.fsx @@ -37,11 +37,11 @@ インタラクティブチェッカーを使用するには、 `FSharp.Compiler.Service.dll` への参照を追加した後、 -`CodeAnalysis` 名前空間をオープンします: +`SourceCodeServices` 名前空間をオープンします: *) #r "FSharp.Compiler.Service.dll" open System -open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Text (** @@ -102,7 +102,7 @@ ASTを理解するには ASTに関連する要素は以下の名前空間に含まれています: *) -open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTree (** ASTを処理する場合、異なる文法的要素に対するパターンマッチを行うような @@ -164,8 +164,8 @@ let rec visitExpression = function // ('let .. = .. and .. = .. in ...' に対しては複数回走査されることがある) printfn "以下のバインディングを含むLetOrUse:" for binding in bindings do - let (SynBinding(access, kind, inlin, mutabl, attrs, xmlDoc, - data, pat, retInfo, init, m, sp)) = binding + let (Binding(access, kind, inlin, mutabl, attrs, xmlDoc, + data, pat, retInfo, init, m, sp)) = binding visitPattern pat visitExpression init // 本体の式を走査 @@ -199,8 +199,8 @@ let visitDeclarations decls = // (visitExpressionで処理したような)式としてのletバインディングと // 似ているが、本体を持たない for binding in bindings do - let (SynBinding(access, kind, inlin, mutabl, attrs, xmlDoc, - data, pat, retInfo, body, m, sp)) = binding + let (Binding(access, kind, inlin, mutabl, attrs, xmlDoc, + data, pat, retInfo, body, m, sp)) = binding visitPattern pat visitExpression body | _ -> printfn " - サポート対象外の宣言: %A" declaration diff --git a/docs/fcs/project.fsx b/docs/fcs/project.fsx index 2c01f7f3379..7988face34e 100644 --- a/docs/fcs/project.fsx +++ b/docs/fcs/project.fsx @@ -26,8 +26,7 @@ of `InteractiveChecker`: open System open System.Collections.Generic -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Symbols +open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Text // Create an interactive checker instance @@ -129,13 +128,13 @@ let wholeProjectResults = checker.ParseAndCheckProject(projectOptions) |> Async. (** Now look at the errors and warnings: *) -wholeProjectResults.Diagnostics.Length // 1 -wholeProjectResults.Diagnostics.[0].Message.Contains("Incomplete pattern matches on this expression") // yes it does +wholeProjectResults .Errors.Length // 1 +wholeProjectResults.Errors.[0].Message.Contains("Incomplete pattern matches on this expression") // yes it does -wholeProjectResults.Diagnostics.[0].StartLine // 13 -wholeProjectResults.Diagnostics.[0].EndLine // 13 -wholeProjectResults.Diagnostics.[0].StartColumn // 15 -wholeProjectResults.Diagnostics.[0].EndColumn // 16 +wholeProjectResults.Errors.[0].StartLineAlternate // 13 +wholeProjectResults.Errors.[0].EndLineAlternate // 13 +wholeProjectResults.Errors.[0].StartColumn // 15 +wholeProjectResults.Errors.[0].EndColumn // 16 (** Now look at the inferred signature for the project: diff --git a/docs/fcs/queue.fsx b/docs/fcs/queue.fsx index bc9e8595b5d..88a5af258ec 100644 --- a/docs/fcs/queue.fsx +++ b/docs/fcs/queue.fsx @@ -9,66 +9,47 @@ This is a design note on the FSharpChecker component and its operations queue. FSharpChecker maintains an operations queue. Items from the FSharpChecker operations queue are processed sequentially and in order. -This means the FCS API has three kinds of operations: - -* "Runs on caller thread (runs on caller thread)" - Some requests from FSharp.Editor are - serviced concurrently without using the queue at all. Everything without an Async return type - is in this category. - -* "Queued-at-high-priority (runs on reactor thread)" - These are requests made via the FCS API - (e.g. from FSharp.Editor) and anything with "Async" return type is in this category. The - originating calls are not typically on the UI thread and are associated with active actions - by the user (editing a file etc.). - - These correspond to the calls to EnqueueAndAwaitOpAsync in [service.fs](https://github.com/fsharp/FSharp.Compiler.Service/blob/master/src/fsharp/service/service.fs). - For example, calling `ParseAndCheckProject` enqueues a `ParseAndCheckProjectImpl` operation. The time taken for the +The thread processing these requests can also run a low-priority, interleaved background operation when the +queue is empty. This can be used to implicitly bring the background check of a project "up-to-date". +When the operations queue has been empty for 1 second, +this background work is run in small incremental fragments. This work is cooperatively time-sliced to be approximately <50ms, (see `maxTimeShareMilliseconds` in +IncrementalBuild.fs). The project to be checked in the background is set implicitly +by calls to ``CheckFileInProject`` and ``ParseAndCheckFileInProject``. +To disable implicit background checking completely, set ``checker.ImplicitlyStartBackgroundWork`` to false. +To change the time before background work starts, set ``checker.PauseBeforeBackgroundWork`` to the required number of milliseconds. + +Most calls to the FSharpChecker API enqueue an operation in the FSharpChecker compiler queue. These correspond to the +calls to EnqueueAndAwaitOpAsync in [service.fs](https://github.com/fsharp/FSharp.Compiler.Service/blob/master/src/fsharp/service/service.fs). + +* For example, calling `ParseAndCheckProject` enqueues a `ParseAndCheckProjectImpl` operation. The time taken for the operation will depend on how much work is required to bring the project analysis up-to-date. - The length of the operation will vary - many will be very fast - but they won't - be processed until other operations already in the queue are complete. -* "Queued and interleaved at lower priority (runs on reactor thread)" - This is reserved - for a "background" job (CheckProjectInBackground) used for to prepare the project builder - state of the current project being worked on. The "background" work is intended to be - divided into little chunks so it can always be interrupted in order to service the higher-priority work. +* Likewise, calling any of `GetUsesOfSymbol`, `GetAllUsesOfAllSymbols`, `ParseFileInProject`, + `GetBackgroundParseResultsForFileInProject`, `MatchBraces`, `CheckFileInProjectIfReady`, `ParseAndCheckFileInProject`, `GetBackgroundCheckResultsForFileInProject`, + `ParseAndCheckProject`, `GetProjectOptionsFromScript`, `InvalidateConfiguration`, `InvaidateAll` and operations + on FSharpCheckResults will cause an operation to be enqueued. The length of the operation will + vary - many will be very fast - but they won't be processed until other operations already in the queue are complete. - This operation runs when the queue is empty. When the operations queue has been empty for 1 second, - this work is run in small incremental fragments. The overall work may get cancelled if replaced - by an alternative project build. This work is cooperatively - time-sliced to be approximately <50ms, (see `maxTimeShareMilliseconds` in - IncrementalBuild.fs). The project to be checked in the background is set implicitly - by calls to ``CheckFileInProject`` and ``ParseAndCheckFileInProject``. - To disable implicit background checking completely, set ``checker.ImplicitlyStartBackgroundWork`` to false. - To change the time before background work starts, set ``checker.PauseBeforeBackgroundWork`` to the required - number of milliseconds. +Some operations do not enqueue anything on the FSharpChecker operations queue - notably any accesses to the Symbol APIs. +These use cross-threaded access to the TAST data produced by other FSharpChecker operations. -Some tools throw a lot of "Queued-at-high-priority" work at the FSharpChecker operations queue. +Some tools throw a lot of interactive work at the FSharpChecker operations queue. If you are writing such a component, consider running your project against a debug build of FSharp.Compiler.Service.dll to see the Trace.WriteInformation messages indicating the length of the operations queue and the time to process requests. For those writing interactive editors which use FCS, you -should be cautious about long running "Queued-at-high-priority" operations - these -will run in preference to other similar operations and must be both asynchronous -and cancelled if the results will no longer be needed. +should be cautious about operations that request a check of the entire project. For example, be careful about requesting the check of an entire project on operations like "Highlight Symbol" or "Find Unused Declarations" (which run automatically when the user opens a file or moves the cursor). as opposed to operations like "Find All References" (which a user explicitly triggers). -Project checking can cause long and contention on the FSharpChecker operations queue. You *must* -cancel such operations if the results will be out-of-date, in order for your editing tools to be performant. +Project checking can cause long and contention on the FSharpChecker operations queue. -Requests can be cancelled via the cancellation token of the async operation. (Some requests also +Requests to FCS can be cancelled by cancelling the async operation. (Some requests also include additional callbacks which can be used to indicate a cancellation condition). -If the operation has not yet started it will remain in the queue and be discarded when it reaches the front. - -The long term intent of FCS is to eventually remove the reactor thread and the operations queue. However the queue -has several operational impacts we need to be mindful of - -1. It acts as a brake on the overall resource usage (if 1000 requests get made from FSharp.Editor they are serviced one at a time, and the work is not generally repeated as it get cached). - -2. It potentially acts as a data-lock on the project builder compilation state. - -3. It runs the low-priority project build. +This cancellation will be effective if the cancellation is performed before the operation +is executed in the operations queue. Summary ------- diff --git a/docs/fcs/symbols.fsx b/docs/fcs/symbols.fsx index c38e23b9943..16607beb122 100644 --- a/docs/fcs/symbols.fsx +++ b/docs/fcs/symbols.fsx @@ -18,8 +18,7 @@ of `FSharpChecker`: open System open System.IO -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Symbols +open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Text // Create an interactive checker instance diff --git a/docs/fcs/tokenizer.fsx b/docs/fcs/tokenizer.fsx index ba584446170..7994379d6f7 100644 --- a/docs/fcs/tokenizer.fsx +++ b/docs/fcs/tokenizer.fsx @@ -17,10 +17,10 @@ Creating the tokenizer --------------------- To use the tokenizer, reference `FSharp.Compiler.Service.dll` and open the -`FSharp.Compiler.Tokenization` namespace: +`SourceCodeServices` namespace: *) #r "FSharp.Compiler.Service.dll" -open FSharp.Compiler.Tokenization +open FSharp.Compiler.SourceCodeServices (** Now you can create an instance of `FSharpSourceTokenizer`. The class takes two arguments - the first is the list of defined symbols and the second is the diff --git a/docs/fcs/typedtree.fsx b/docs/fcs/typedtree.fsx index ad392d38776..f5fbf1d7ab9 100644 --- a/docs/fcs/typedtree.fsx +++ b/docs/fcs/typedtree.fsx @@ -20,14 +20,12 @@ Getting checked expressions To access the type-checked, resolved expressions, you need to create an instance of `InteractiveChecker`. To use the interactive checker, reference `FSharp.Compiler.Service.dll` and open the -relevant namespaces: +`SourceCodeServices` namespace: *) #r "FSharp.Compiler.Service.dll" open System open System.IO -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Symbols +open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Text (** @@ -77,7 +75,8 @@ type MyClass() = let checkProjectResults = parseAndCheckSingleFile(input2) -checkProjectResults.Diagnostics // should be empty +checkProjectResults.Errors // should be empty + (** @@ -171,93 +170,93 @@ Here is a generic expression visitor: let rec visitExpr f (e:FSharpExpr) = f e match e with - | FSharpExprPatterns.AddressOf(lvalueExpr) -> + | BasicPatterns.AddressOf(lvalueExpr) -> visitExpr f lvalueExpr - | FSharpExprPatterns.AddressSet(lvalueExpr, rvalueExpr) -> + | BasicPatterns.AddressSet(lvalueExpr, rvalueExpr) -> visitExpr f lvalueExpr; visitExpr f rvalueExpr - | FSharpExprPatterns.Application(funcExpr, typeArgs, argExprs) -> + | BasicPatterns.Application(funcExpr, typeArgs, argExprs) -> visitExpr f funcExpr; visitExprs f argExprs - | FSharpExprPatterns.Call(objExprOpt, memberOrFunc, typeArgs1, typeArgs2, argExprs) -> + | BasicPatterns.Call(objExprOpt, memberOrFunc, typeArgs1, typeArgs2, argExprs) -> visitObjArg f objExprOpt; visitExprs f argExprs - | FSharpExprPatterns.Coerce(targetType, inpExpr) -> + | BasicPatterns.Coerce(targetType, inpExpr) -> visitExpr f inpExpr - | FSharpExprPatterns.FastIntegerForLoop(startExpr, limitExpr, consumeExpr, isUp) -> + | BasicPatterns.FastIntegerForLoop(startExpr, limitExpr, consumeExpr, isUp) -> visitExpr f startExpr; visitExpr f limitExpr; visitExpr f consumeExpr - | FSharpExprPatterns.ILAsm(asmCode, typeArgs, argExprs) -> + | BasicPatterns.ILAsm(asmCode, typeArgs, argExprs) -> visitExprs f argExprs - | FSharpExprPatterns.ILFieldGet (objExprOpt, fieldType, fieldName) -> + | BasicPatterns.ILFieldGet (objExprOpt, fieldType, fieldName) -> visitObjArg f objExprOpt - | FSharpExprPatterns.ILFieldSet (objExprOpt, fieldType, fieldName, valueExpr) -> + | BasicPatterns.ILFieldSet (objExprOpt, fieldType, fieldName, valueExpr) -> visitObjArg f objExprOpt - | FSharpExprPatterns.IfThenElse (guardExpr, thenExpr, elseExpr) -> + | BasicPatterns.IfThenElse (guardExpr, thenExpr, elseExpr) -> visitExpr f guardExpr; visitExpr f thenExpr; visitExpr f elseExpr - | FSharpExprPatterns.Lambda(lambdaVar, bodyExpr) -> + | BasicPatterns.Lambda(lambdaVar, bodyExpr) -> visitExpr f bodyExpr - | FSharpExprPatterns.Let((bindingVar, bindingExpr), bodyExpr) -> + | BasicPatterns.Let((bindingVar, bindingExpr), bodyExpr) -> visitExpr f bindingExpr; visitExpr f bodyExpr - | FSharpExprPatterns.LetRec(recursiveBindings, bodyExpr) -> + | BasicPatterns.LetRec(recursiveBindings, bodyExpr) -> List.iter (snd >> visitExpr f) recursiveBindings; visitExpr f bodyExpr - | FSharpExprPatterns.NewArray(arrayType, argExprs) -> + | BasicPatterns.NewArray(arrayType, argExprs) -> visitExprs f argExprs - | FSharpExprPatterns.NewDelegate(delegateType, delegateBodyExpr) -> + | BasicPatterns.NewDelegate(delegateType, delegateBodyExpr) -> visitExpr f delegateBodyExpr - | FSharpExprPatterns.NewObject(objType, typeArgs, argExprs) -> + | BasicPatterns.NewObject(objType, typeArgs, argExprs) -> visitExprs f argExprs - | FSharpExprPatterns.NewRecord(recordType, argExprs) -> + | BasicPatterns.NewRecord(recordType, argExprs) -> visitExprs f argExprs - | FSharpExprPatterns.NewAnonRecord(recordType, argExprs) -> + | BasicPatterns.NewAnonRecord(recordType, argExprs) -> visitExprs f argExprs - | FSharpExprPatterns.NewTuple(tupleType, argExprs) -> + | BasicPatterns.NewTuple(tupleType, argExprs) -> visitExprs f argExprs - | FSharpExprPatterns.NewUnionCase(unionType, unionCase, argExprs) -> + | BasicPatterns.NewUnionCase(unionType, unionCase, argExprs) -> visitExprs f argExprs - | FSharpExprPatterns.Quote(quotedExpr) -> + | BasicPatterns.Quote(quotedExpr) -> visitExpr f quotedExpr - | FSharpExprPatterns.FSharpFieldGet(objExprOpt, recordOrClassType, fieldInfo) -> + | BasicPatterns.FSharpFieldGet(objExprOpt, recordOrClassType, fieldInfo) -> visitObjArg f objExprOpt - | FSharpExprPatterns.AnonRecordGet(objExpr, recordOrClassType, fieldInfo) -> + | BasicPatterns.AnonRecordGet(objExpr, recordOrClassType, fieldInfo) -> visitExpr f objExpr - | FSharpExprPatterns.FSharpFieldSet(objExprOpt, recordOrClassType, fieldInfo, argExpr) -> + | BasicPatterns.FSharpFieldSet(objExprOpt, recordOrClassType, fieldInfo, argExpr) -> visitObjArg f objExprOpt; visitExpr f argExpr - | FSharpExprPatterns.Sequential(firstExpr, secondExpr) -> + | BasicPatterns.Sequential(firstExpr, secondExpr) -> visitExpr f firstExpr; visitExpr f secondExpr - | FSharpExprPatterns.TryFinally(bodyExpr, finalizeExpr) -> + | BasicPatterns.TryFinally(bodyExpr, finalizeExpr) -> visitExpr f bodyExpr; visitExpr f finalizeExpr - | FSharpExprPatterns.TryWith(bodyExpr, _, _, catchVar, catchExpr) -> + | BasicPatterns.TryWith(bodyExpr, _, _, catchVar, catchExpr) -> visitExpr f bodyExpr; visitExpr f catchExpr - | FSharpExprPatterns.TupleGet(tupleType, tupleElemIndex, tupleExpr) -> + | BasicPatterns.TupleGet(tupleType, tupleElemIndex, tupleExpr) -> visitExpr f tupleExpr - | FSharpExprPatterns.DecisionTree(decisionExpr, decisionTargets) -> + | BasicPatterns.DecisionTree(decisionExpr, decisionTargets) -> visitExpr f decisionExpr; List.iter (snd >> visitExpr f) decisionTargets - | FSharpExprPatterns.DecisionTreeSuccess (decisionTargetIdx, decisionTargetExprs) -> + | BasicPatterns.DecisionTreeSuccess (decisionTargetIdx, decisionTargetExprs) -> visitExprs f decisionTargetExprs - | FSharpExprPatterns.TypeLambda(genericParam, bodyExpr) -> + | BasicPatterns.TypeLambda(genericParam, bodyExpr) -> visitExpr f bodyExpr - | FSharpExprPatterns.TypeTest(ty, inpExpr) -> + | BasicPatterns.TypeTest(ty, inpExpr) -> visitExpr f inpExpr - | FSharpExprPatterns.UnionCaseSet(unionExpr, unionType, unionCase, unionCaseField, valueExpr) -> + | BasicPatterns.UnionCaseSet(unionExpr, unionType, unionCase, unionCaseField, valueExpr) -> visitExpr f unionExpr; visitExpr f valueExpr - | FSharpExprPatterns.UnionCaseGet(unionExpr, unionType, unionCase, unionCaseField) -> + | BasicPatterns.UnionCaseGet(unionExpr, unionType, unionCase, unionCaseField) -> visitExpr f unionExpr - | FSharpExprPatterns.UnionCaseTest(unionExpr, unionType, unionCase) -> + | BasicPatterns.UnionCaseTest(unionExpr, unionType, unionCase) -> visitExpr f unionExpr - | FSharpExprPatterns.UnionCaseTag(unionExpr, unionType) -> + | BasicPatterns.UnionCaseTag(unionExpr, unionType) -> visitExpr f unionExpr - | FSharpExprPatterns.ObjectExpr(objType, baseCallExpr, overrides, interfaceImplementations) -> + | BasicPatterns.ObjectExpr(objType, baseCallExpr, overrides, interfaceImplementations) -> visitExpr f baseCallExpr List.iter (visitObjMember f) overrides List.iter (snd >> List.iter (visitObjMember f)) interfaceImplementations - | FSharpExprPatterns.TraitCall(sourceTypes, traitName, typeArgs, typeInstantiation, argTypes, argExprs) -> + | BasicPatterns.TraitCall(sourceTypes, traitName, typeArgs, typeInstantiation, argTypes, argExprs) -> visitExprs f argExprs - | FSharpExprPatterns.ValueSet(valToSet, valueExpr) -> + | BasicPatterns.ValueSet(valToSet, valueExpr) -> visitExpr f valueExpr - | FSharpExprPatterns.WhileLoop(guardExpr, bodyExpr) -> + | BasicPatterns.WhileLoop(guardExpr, bodyExpr) -> visitExpr f guardExpr; visitExpr f bodyExpr - | FSharpExprPatterns.BaseValue baseType -> () - | FSharpExprPatterns.DefaultValue defaultType -> () - | FSharpExprPatterns.ThisValue thisType -> () - | FSharpExprPatterns.Const(constValueObj, constType) -> () - | FSharpExprPatterns.Value(valueToGet) -> () + | BasicPatterns.BaseValue baseType -> () + | BasicPatterns.DefaultValue defaultType -> () + | BasicPatterns.ThisValue thisType -> () + | BasicPatterns.Const(constValueObj, constType) -> () + | BasicPatterns.Value(valueToGet) -> () | _ -> failwith (sprintf "unrecognized %+A" e) and visitExprs f exprs = diff --git a/docs/fcs/untypedtree.fsx b/docs/fcs/untypedtree.fsx index 4dd5c369a57..61e97709836 100644 --- a/docs/fcs/untypedtree.fsx +++ b/docs/fcs/untypedtree.fsx @@ -30,7 +30,7 @@ To use the interactive checker, reference `FSharp.Compiler.Service.dll` and open *) #r "FSharp.Compiler.Service.dll" open System -open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Text (** @@ -84,7 +84,7 @@ code](https://github.com/fsharp/fsharp/blob/master/src/fsharp/ast.fs#L464). The relevant parts are in the following namespace: *) -open FSharp.Compiler.Syntax +open FSharp.Compiler.Ast (** When processing the AST, you will typically write a number of mutually recursive functions @@ -126,8 +126,7 @@ options). In the following, we only show how to handle `if .. then ..` and `let /// Walk over an expression - if expression contains two or three /// sub-expressions (two if the 'else' branch is missing), let expression /// contains pattern and two sub-expressions -let rec visitExpression e = - match e with +let rec visitExpression = function | SynExpr.IfThenElse(cond, trueBranch, falseBranchOpt, _, _, _, _) -> // Visit all sub-expressions printfn "Conditional:" @@ -140,8 +139,8 @@ let rec visitExpression e = // for 'let .. = .. and .. = .. in ...' printfn "LetOrUse with the following bindings:" for binding in bindings do - let (SynBinding(access, kind, inlin, mutabl, attrs, xmlDoc, - data, pat, retInfo, init, m, sp)) = binding + let (Binding(access, kind, inlin, mutabl, attrs, xmlDoc, + data, pat, retInfo, init, m, sp)) = binding visitPattern pat visitExpression init // Visit the body expression @@ -171,8 +170,8 @@ let visitDeclarations decls = // Let binding as a declaration is similar to let binding // as an expression (in visitExpression), but has no body for binding in bindings do - let (SynBinding(access, kind, inlin, mutabl, attrs, xmlDoc, - data, pat, retInfo, body, m, sp)) = binding + let (Binding(access, kind, inlin, mutabl, attrs, xmlDoc, + data, pat, retInfo, body, m, sp)) = binding visitPattern pat visitExpression body | _ -> printfn " - not supported declaration: %A" declaration diff --git a/docs/fsharp-core-notes.md b/docs/fsharp-core-notes.md index 1b0b1f1c5ee..e98354bd181 100644 --- a/docs/fsharp-core-notes.md +++ b/docs/fsharp-core-notes.md @@ -1,120 +1,126 @@ -# Notes and Guidance on FSharp.Core +--- +layout: default +title: Notes on FSharp.Core +subtitle: This technical guide discusses the FSharp.Core library. +--- -This technical guide discusses the FSharp.Core library. +# Notes and Guidance on FSharp.Core +{:.no_toc} -Reference documentation for FSharp.Core can be found here: https://fsharp.github.io/fsharp-core-docs/ +This technical guide discusses the FSharp.Core library. Please help improve this guide by editing it and submitting a pull-request. Much of the guidance below applies to any .NET library respecting binary compatibility. -## FSharp.Core is binary compatible +### FSharp.Core is binary compatible -FSharp.Core is binary compatible across versions of the F# language. For example, this means you can create a newer project with a newer FSharp.Core in an older codebase and things should generally "just work". +FSharp.Core is binary compatible across versions of the F# language. For example, FSharp.Core `5.0.0.0` (F# 5.0) is binary compatible with +`4.7.0.0` (F# 4.7), `4.6.0.0` (F# 3.6), `4.4.0.0` (F# 4.0) , `4.4.1.0` (F# 4.1), , `4.4.3.0` (F# 4.1+) and so on. -**Binary compatibility means that a component built for X can bind to Y at runtime. It doesn't mean that Y behaves 100% the same as X, though.** For example, an older compiler that doesn't know how to understand `inref<'T>` referencing a newer FSharp.Core that has `inref<'T>` defined may not behave correctly if `inref<'T>` is used in source. +Likewise, FSharp.Core is binary compatible from "netstandard" profiles to actual runtime implementations. +For example, FSharp.Core for `netstandard2.0` is binary compatible with the runtime implementation assembly `4.7.0.0` and so on. -## FSharp.Core and F# scripts +Binary compatibility means that a component built for X can instead bind to Y at runtime. +It doesn't mean that Y behaves 100% the same as X (some bug fixes may have been made, and Y may have more functionality than X). -F# scripts, executed by F# interactive, execute against the FSharp.Core deployed with the .NET SDK you are using. If you're expecting to use a more modern library feature and find that it's missing, it's likely because you have an older .NET SDK and thus an older F# Interactive. Upgrade your .NET SDK. +### Application v. Library v. Script +{:.no_toc} -## Guidance for package authors +Each project is either an *application* or a *library*. -If you are authoring a NuGet package for consumption in the F# and .NET ecosystem, you already have to make a decision about functionality vs. reach by deciding what target framework(s) you support. +* Examples of application are `.exe` project or a `.dll` project that is a test project, addin, website, or an app. -As an F# package author, you also need to make this decision with respect to FSharp.Core: +* Libraries are just ordinary `.dll` components (excluding those above which are applications). -* Targeting an earlier version of FSharp.Core increases your reach because older codebases can use it without issue -* Targeting a newer version of FSharp.Core lets you use and extend newer features +* Scripts are not projects, just `.fsx` files, possibly referring to other files using `#load` and Libraries using `#r` -This decision is critical, because it can have a network effect. If you choose a higher FSharp.Core version, then that also becomes a dependency for any other package that may depend on your package. +### Do *not* bundle FSharp.Core with a library -### Package authors should pin their FSharp.Core reference +Do _not_ include a copy of FSharp.Core with your library or package. If you do, you will create havoc for users of +your library. -The default templates for F# projects carry an implicit reference to FSharp.Core. This is ideal for application developers, since applications almost always want to be referencing the highest FSharp.Core available to them. As you upgrade your .NET SDK, the FSharp.Core package referenced implicitly will also be upgraded over time, since FSharp.Core is also distributed with the .NET SDK. +The decision about which `FSharp.Core` a library binds to is up to the application hosting of the library. +The library and/or library package can place constraints on this, but it doesn't decide it. -However, as a package author this means that unless you reference FSharp.Core explicitly, you will default to the latest possible version and thus eliminate any hope of reaching older projects in older environments. +Especially, do _not_ include FSharp.Core in the ``lib`` folder of a NuGet package. -### How to explicitly reference FSharp.Core +### Always deploy FSharp.Core as part of a compiled application -It's a simple gesture in your project file that pins to FSharp.Core 4.7.2: +For applications, FSharp.Core is normally part of the application itself (so-called "xcopy deploy" of FSharp.Core). -```xml - - - -``` +For modern templates, this is the default. For older templates, you may need to use ``true`` in your project file. In Visual Studio this is equivalent to setting the `CopyLocal` property to `true` properties for the `FSharp.Core` reference. -Or if you're using Paket: +FSharp.Core.dll will normally appear in the `bin` output folder for your application. For example: ``` -nuget FSharp.Core >= 4.7.2 + Directory of ...\ConsoleApplication3\bin\Debug\netcoreapp3.1 + + 18/04/2020 13:20 5,632 ConsoleApplication3.exe + 14/10/2020 12:12 1,400,472 FSharp.Core.dll ``` -And that's it! +### Always reference FSharp.Core via the NuGet package. -### Compatibility table +FSharp.Core is now always referenced via [the NuGet package](http://www.nuget.org/packages/FSharp.Core). -The following table can help you decide the minimum language/package version you want to support: +### Make your FSharp.Core references explicit -|Minimum F# language version|Minimum FSharp.Core package version| -|------------------------------|------------------------------| -|F# 4.1|4.3.4| -|F# 4.5|4.5.2| -|F# 4.6|4.6.2| -|F# 4.7|4.7.2| -|F# 5.0|5.0.0| +Templates for F# libraries use an **implicit** FSharp.Core package reference where the .NET SDK chooses one. Consider +using an **explicit** reference, especially when creating libraries. -If you want to be compatible with much older projects using an F# 4.0 compiler or earlier, you can still do that but it's not recommended. People using those codebases should upgrade instead. +To select a particular FSharp.Core use `Update`: -### Do *not* bundle FSharp.Core directly with a library + -Do _not_ include a copy of FSharp.Core with your library or package, such in the `lib` folder of a package. If you do this, you will create havoc for users of your library. +In C# projects use: -The decision about which `FSharp.Core` a library binds to is up to the application hosting of the library. - -## Guidance for everyone else - -If you're not authoring packages for distribution, you have a lot less to worry about. + -If you are distributing library code across a private organization as if it were a NuGet package, please see the above guidance, as it likely still applies. Otherwise, the below guidance applies. +If you make your FSharp.Core dependency explicit, you will have to explicitly upgrade your FSharp.Core reference in order to use +new F# language or library features should those features depend on a particular minimal FSharp.Core version. -### Application authors don't have to explicitly reference FSharp.Core +### Libraries should target lower versions of FSharp.Core -In general, applications can always just use the latest FSharp.Core bundled in the SDK they are built with. +F# ecosystem libraries should generally target the *earliest, most portable* profile of FSharp.Core feasible, within reason. -### C# projects referencing F# projects may need to pin FSharp.Core +If your library is part of an ecosystem, it can be helpful to target the _earliest, most widespread language version_ +and the _earliest_ and _most supported_ profiles of the .NET Framework feasible. -You can reference an F# project just fine without needing to be explicit about an FSharp.Core reference when using C# projects based on the .NET SDK. References flow transitively for SDK-style projects, so even if you need to use types directly from FSharp.Core (which you probably shouldn't do anyways) it will pick up the right types from the right assembly. +The version you choose should be based on the minimum F# language version you want to support. The minimum FSharp.Core version for each language version is listed below: -If you do have an explicit FSharp.Core reference in your C# project that you **need**, you should pin your FSharp.Core reference across your entire codebase. Being in a mixed pinned/non-pinned world is difficult to keep straight over a long period of time. - -## Guidance for older projects, compilers, and tools +|Minimum F# language version|Minimum FSharp.Core version| +|------------------------------|------------------------------| +|F# 4.1|4.3.4| +|F# 4.5|4.5.2| +|F# 4.6|4.6.2| +|F# 4.7|4.7.2| +|F# 5.0|5.0.0| -Modern .NET development, including F#, uses SDK-style projects. You can read about that here: https://docs.microsoft.com/dotnet/core/project-sdk/overview +A good choice for libraries is to target `netstandard2.0` and FSharp.Core 4.7.2. -If you are not using SDK-style projects F# projects and/or have an older toolset, the following guidance applies. + -### Consider upgrading +For "libraries" that are effectively part of an application, you can just target +the latest language version and the framework you're using in your application. -Yes, really. The old project system that manages legacy projects is not that good, the compiler is older and unoptimized for supporting larger codebases, tooling is not as responsive, etc. You will really have a much better life if you upgrade. Try out the `try-convert` tool to do that: https://github.com/dotnet/try-convert +### Applications should target higher versions of FSharp.Core -If you cannot upgrade for some reason, the rest of the guidance applies. +F# applications should generally use the *highest* language version and the most *platform-specific* version of FSharp.Core. -### Always deploy FSharp.Core as part of a compiled application +Generally, when writing an application, you want to use the highest version of FSharp.Core available for the platform +you are targeting. -For applications, FSharp.Core is normally part of the application itself (so-called "xcopy deploy" of FSharp.Core). +If your application in being developed by people using multiple versions of F# tooling (common +in open source working) you may need to target a lower version of the language and a correspondingly earlier version +of FSharp.Core. -For older project files, you may need to use ``true`` in your project file. In Visual Studio this is equivalent to setting the `CopyLocal` property to `true` properties for the `FSharp.Core` reference. +### The FSharp.Core used by a script depends on the tool processing the script -FSharp.Core.dll will normally appear in the `bin` output folder for your application. For example: +If you run a script with `dotnet fsi` then the tool will decide which FSharp.Core is used, and which implementation assemblies are used. -``` - Directory of ...\ConsoleApplication3\bin\Debug\net5.0 - - 18/04/2020 13:20 5,632 ConsoleApplication3.exe - 14/10/2020 12:12 1,400,472 FSharp.Core.dll -``` +When editing a script, the editing tools will decide which FSharp.Core is referenced. ### FSharp.Core and static linking +{:.no_toc} The ILMerge tool and the F# compiler both allow static linking of assemblies including static linking of FSharp.Core. This can be useful to build a single standalone file for a tool. @@ -125,6 +131,28 @@ However, these options must be used with caution. Searching on stackoverflow reveals further guidance on this topic. +### FSharp.Core in components using FSharp.Compiler.Service +{:.no_toc} + +If your application of component uses FSharp.Compiler.Service, +see [this guide](http://fsharp.github.io/FSharp.Compiler.Service/corelib.html). This scenario is more complicated +because FSharp.Core is used both to run your script or application, and is referenced during compilation. + +Likewise, if you have a script or library using FSharp.Formatting, then beware that is using FSharp.Compiler.Service. +For scripts that is normally OK because they are processed using F# Interactive, and the default FSharp.Core is used. +If you have an application using FSharp.Formatting as a component then see the guide linked above. + +### FSharp.Core and new language features +{:.no_toc} + +New versions of FSharp.Core must generally be consumable by previous generations of F# compiler tooling. There is nothing stopping +older tooling from adding a reference to the new nuget package. + +This sometimes limits the new language features that can be used in FSharp.Core or requires careful coding in the serializing/deserializing of +F# metadata stored in the FSharp.Core.dll binary as resources. + ## Reference: FSharp.Core version and NuGet package numbers See [the F# version information RFC](https://github.com/fsharp/fslang-design/blob/master/tooling/FST-1004-versioning-plan.md). + + diff --git a/eng/Build.ps1 b/eng/Build.ps1 index 5a6a1342f26..18987e6488c 100644 --- a/eng/Build.ps1 +++ b/eng/Build.ps1 @@ -14,7 +14,7 @@ # it's fine to call `build.ps1 -build -testDesktop` followed by repeated calls to # `.\build.ps1 -testDesktop`. -[CmdletBinding(PositionalBinding = $false)] +[CmdletBinding(PositionalBinding=$false)] param ( [string][Alias('c')]$configuration = "Debug", [string][Alias('v')]$verbosity = "m", @@ -61,7 +61,7 @@ param ( [switch]$noVisualStudio, [switch]$sourceBuild, - [parameter(ValueFromRemainingArguments = $true)][string[]]$properties) + [parameter(ValueFromRemainingArguments=$true)][string[]]$properties) Set-StrictMode -version 2.0 $ErrorActionPreference = "Stop" @@ -120,8 +120,8 @@ function Print-Usage() { # specified. function Process-Arguments() { if ($help -or (($properties -ne $null) -and ($properties.Contains("/help") -or $properties.Contains("/?")))) { - Print-Usage - exit 0 + Print-Usage + exit 0 } $script:nodeReuse = $False; @@ -177,32 +177,34 @@ function Process-Arguments() { function Update-Arguments() { if ($script:noVisualStudio) { - $script:bootstrapTfm = "net5.0" + $script:bootstrapTfm = "netcoreapp3.1" $script:msbuildEngine = "dotnet" } - if ($bootstrapTfm -eq "net5.0") { + if ($bootstrapTfm -eq "netcoreapp3.1") { if (-Not (Test-Path "$ArtifactsDir\Bootstrap\fsc\fsc.runtimeconfig.json")) { $script:bootstrap = $True } - } - else { + } else { if (-Not (Test-Path "$ArtifactsDir\Bootstrap\fsc\fsc.exe") -or (Test-Path "$ArtifactsDir\Bootstrap\fsc\fsc.runtimeconfig.json")) { $script:bootstrap = $True } } } -function BuildSolution([string] $solutionName) { - Write-Host "${solutionName}:" +function BuildSolution() { + # VisualFSharp.sln can't be built with dotnet due to WPF, WinForms and VSIX build task dependencies + $solution = "VisualFSharp.sln" + + Write-Host "$($solution):" $bl = if ($binaryLog) { "/bl:" + (Join-Path $LogDir "Build.binlog") } else { "" } - $projects = Join-Path $RepoRoot $solutionName + $projects = Join-Path $RepoRoot $solution $officialBuildId = if ($official) { $env:BUILD_BUILDNUMBER } else { "" } $toolsetBuildProj = InitializeToolset $quietRestore = !$ci - $testTargetFrameworks = if ($testCoreClr) { "net5.0" } else { "" } + $testTargetFrameworks = if ($testCoreClr) { "netcoreapp3.1" } else { "" } # Do not set the property to true explicitly, since that would override value projects might set. $suppressExtensionDeployment = if (!$deployExtensions) { "/p:DeployExtension=false" } else { "" } @@ -272,7 +274,6 @@ function TestUsingMSBuild([string] $testProject, [string] $targetFramework, [str $testLogPath = "$ArtifactsDir\TestResults\$configuration\${projectName}_$targetFramework.xml" $testBinLogPath = "$LogDir\${projectName}_$targetFramework.binlog" $args = "test $testProject -c $configuration -f $targetFramework -v n --test-adapter-path $testadapterpath --logger ""nunit;LogFilePath=$testLogPath"" /bl:$testBinLogPath" - $args += " --blame --results-directory $ArtifactsDir\TestResults\$configuration" if (-not $noVisualStudio -or $norestore) { $args += " --no-restore" @@ -298,6 +299,32 @@ function TestUsingNUnit([string] $testProject, [string] $targetFramework, [strin TestUsingMsBuild -testProject $testProject -targetFramework $targetFramework -testadapterpath $testadapterpath -noTestFilter $false } +function BuildCompiler() { + if ($bootstrapTfm -eq "netcoreapp3.1") { + $dotnetPath = InitializeDotNetCli + $dotnetExe = Join-Path $dotnetPath "dotnet.exe" + $fscProject = "`"$RepoRoot\src\fsharp\fsc\fsc.fsproj`"" + $fsiProject = "`"$RepoRoot\src\fsharp\fsi\fsi.fsproj`"" + + $argNoRestore = if ($norestore) { " --no-restore" } else { "" } + $argNoIncremental = if ($rebuild) { " --no-incremental" } else { "" } + + if ($binaryLog) { + $logFilePath = Join-Path $LogDir "fscBootstrapLog.binlog" + $args += " /bl:$logFilePath" + } + $args = "build $fscProject -c $configuration -v $verbosity -f netcoreapp3.1" + $argNoRestore + $argNoIncremental + Exec-Console $dotnetExe $args + + if ($binaryLog) { + $logFilePath = Join-Path $LogDir "fsiBootstrapLog.binlog" + $args += " /bl:$logFilePath" + } + $args = "build $fsiProject -c $configuration -v $verbosity -f netcoreapp3.1" + $argNoRestore + $argNoIncremental + Exec-Console $dotnetExe $args + } +} + function Prepare-TempDir() { Copy-Item (Join-Path $RepoRoot "tests\Resources\Directory.Build.props") $TempDir Copy-Item (Join-Path $RepoRoot "tests\Resources\Directory.Build.targets") $TempDir @@ -325,7 +352,8 @@ function TryDownloadDotnetFrameworkSdk() { # If we are not running as admin user, don't bother grabbing ndp sdk -- since we don't need sn.exe $isAdmin = Test-IsAdmin Write-Host "TryDownloadDotnetFrameworkSdk -- Test-IsAdmin = '$isAdmin'" - if ($isAdmin -eq $true) { + if ($isAdmin -eq $true) + { # Get program files(x86) location if (${env:ProgramFiles(x86)} -eq $null) { $programFiles = $env:ProgramFiles @@ -377,7 +405,7 @@ function TryDownloadDotnetFrameworkSdk() { $windowsSDK_ExecutablePath_x86 = $newWindowsSDK_ExecutablePath_x86 # x86 environment variable Write-Host "set WindowsSDK_ExecutablePath_x86=$WindowsSDK_ExecutablePath_x86" - [System.Environment]::SetEnvironmentVariable("WindowsSDK_ExecutablePath_x86", "$newWindowsSDK_ExecutablePath_x86", [System.EnvironmentVariableTarget]::Machine) + [System.Environment]::SetEnvironmentVariable("WindowsSDK_ExecutablePath_x86","$newWindowsSDK_ExecutablePath_x86",[System.EnvironmentVariableTarget]::Machine) $env:WindowsSDK_ExecutablePath_x86 = $newWindowsSDK_ExecutablePath_x86 } } @@ -389,7 +417,7 @@ function TryDownloadDotnetFrameworkSdk() { $windowsSDK_ExecutablePath_x64 = $newWindowsSDK_ExecutablePath_x64 # x64 environment variable Write-Host "set WindowsSDK_ExecutablePath_x64=$WindowsSDK_ExecutablePath_x64" - [System.Environment]::SetEnvironmentVariable("WindowsSDK_ExecutablePath_x64", "$newWindowsSDK_ExecutablePath_x64", [System.EnvironmentVariableTarget]::Machine) + [System.Environment]::SetEnvironmentVariable("WindowsSDK_ExecutablePath_x64","$newWindowsSDK_ExecutablePath_x64",[System.EnvironmentVariableTarget]::Machine) $env:WindowsSDK_ExecutablePath_x64 = $newWindowsSDK_ExecutablePath_x64 } } @@ -397,22 +425,22 @@ function TryDownloadDotnetFrameworkSdk() { } function EnablePreviewSdks() { - if (Test-Path variable:global:_MSBuildExe) { - return - } - $vsInfo = LocateVisualStudio - if ($vsInfo -eq $null) { - # Preview SDKs are allowed when no Visual Studio instance is installed - return - } - - $vsId = $vsInfo.instanceId - $vsMajorVersion = $vsInfo.installationVersion.Split('.')[0] - - $instanceDir = Join-Path ${env:USERPROFILE} "AppData\Local\Microsoft\VisualStudio\$vsMajorVersion.0_$vsId" - Create-Directory $instanceDir - $sdkFile = Join-Path $instanceDir "sdk.txt" - 'UsePreviews=True' | Set-Content $sdkFile + if (Test-Path variable:global:_MSBuildExe) { + return + } + $vsInfo = LocateVisualStudio + if ($vsInfo -eq $null) { + # Preview SDKs are allowed when no Visual Studio instance is installed + return + } + + $vsId = $vsInfo.instanceId + $vsMajorVersion = $vsInfo.installationVersion.Split('.')[0] + + $instanceDir = Join-Path ${env:USERPROFILE} "AppData\Local\Microsoft\VisualStudio\$vsMajorVersion.0_$vsId" + Create-Directory $instanceDir + $sdkFile = Join-Path $instanceDir "sdk.txt" + 'UsePreviews=True' | Set-Content $sdkFile } try { @@ -438,11 +466,6 @@ try { $buildTool = InitializeBuildTool $toolsetBuildProj = InitializeToolset TryDownloadDotnetFrameworkSdk - - $dotnetPath = InitializeDotNetCli - $env:DOTNET_ROOT = "$dotnetPath" - Get-Item -Path Env: - if ($bootstrap) { $script:BuildMessage = "Failure building bootstrap compiler" $bootstrapDir = Make-BootstrapBuild @@ -451,10 +474,9 @@ try { $script:BuildMessage = "Failure building product" if ($restore -or $build -or $rebuild -or $pack -or $sign -or $publish) { if ($noVisualStudio) { - BuildSolution "FSharp.sln" - } - else { - BuildSolution "VisualFSharp.sln" + BuildCompiler + } else { + BuildSolution } } @@ -465,12 +487,11 @@ try { $script:BuildCategory = "Test" $script:BuildMessage = "Failure running tests" $desktopTargetFramework = "net472" - $coreclrTargetFramework = "net5.0" + $coreclrTargetFramework = "netcoreapp3.1" if ($testDesktop) { TestUsingXUnit -testProject "$RepoRoot\tests\FSharp.Compiler.ComponentTests\FSharp.Compiler.ComponentTests.fsproj" -targetFramework $desktopTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.ComponentTests\" -noTestFilter $true TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.UnitTests\FSharp.Compiler.UnitTests.fsproj" -targetFramework $desktopTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.UnitTests\" - TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Service.Tests\FSharp.Compiler.Service.Tests.fsproj" -targetFramework $desktopTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.Service.Tests\" TestUsingXUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj" -targetFramework $desktopTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.Private.Scripting.UnitTests\" TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Build.UnitTests\FSharp.Build.UnitTests.fsproj" -targetFramework $desktopTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Build.UnitTests\" TestUsingXUnit -testProject "$RepoRoot\tests\FSharp.Core.UnitTests\FSharp.Core.UnitTests.fsproj" -targetFramework $desktopTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Core.UnitTests\" @@ -521,7 +542,6 @@ try { } if ($testCompilerService) { - TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Service.Tests\FSharp.Compiler.Service.Tests.fsproj" -targetFramework $desktopTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.Service.Tests\" TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Service.Tests\FSharp.Compiler.Service.Tests.fsproj" -targetFramework $coreclrTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.Service.Tests\" } @@ -530,7 +550,7 @@ try { TestUsingNUnit -testProject "$RepoRoot\tests\fsharp\FSharpSuite.Tests.fsproj" -targetFramework $coreclrTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharpSuite.Tests\" } ` - if ($testScripting) { + if ($testScripting) { TestUsingXUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj" -targetFramework $desktopTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.Private.Scripting.UnitTests\" TestUsingXUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj" -targetFramework $coreclrTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.Private.Scripting.UnitTests\" } @@ -559,11 +579,11 @@ try { $nupkgs = @(Get-ChildItem "$artifactsDir\packages\$configuration\Shipping\*.nupkg" -recurse) $nupkgs | Foreach { Exec-Console """$sourcelink"" test ""$_""" - if (-not $?) { $nupkgtestFailed = $true } + if (-not $?) { $nupkgtestFailed = $true} } } if ($nupkgtestFailed) { - throw "Error Verifying nupkgs have access to the source code" + throw "Error Verifying nupkgs have access to the source code" } ExitWithExitCode 0 diff --git a/eng/DumpPackageRoot/DumpPackageRoot.csproj b/eng/DumpPackageRoot/DumpPackageRoot.csproj index 0c94f0a999c..c3b2cedf8f6 100644 --- a/eng/DumpPackageRoot/DumpPackageRoot.csproj +++ b/eng/DumpPackageRoot/DumpPackageRoot.csproj @@ -3,7 +3,7 @@ - net5.0 + netcoreapp3.1 diff --git a/eng/Signing.props b/eng/Signing.props index 222ad3dc47a..da17d32fa4d 100644 --- a/eng/Signing.props +++ b/eng/Signing.props @@ -5,7 +5,4 @@ - - true - diff --git a/eng/SourceBuild.props b/eng/SourceBuild.props deleted file mode 100644 index 22c929f286c..00000000000 --- a/eng/SourceBuild.props +++ /dev/null @@ -1,47 +0,0 @@ - - - - fsharp - true - - - - - - - - - - - - - - $(InnerBuildArgs) /p:Projects="$(InnerSourceBuildRepoRoot)\FSharp.sln" - - - - - - - - - - diff --git a/eng/SourceBuildPrebuiltBaseline.xml b/eng/SourceBuildPrebuiltBaseline.xml deleted file mode 100644 index c1b6dfbf053..00000000000 --- a/eng/SourceBuildPrebuiltBaseline.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index f1c9aeec802..1b319dbab93 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,17 +1,11 @@ - - https://github.com/dotnet/xliff-tasks - 7e80445ee82adbf9a8e6ae601ac5e239d982afaa - - - + https://github.com/dotnet/arcade - 28a6403ee97077256fcdc60f599f0ad9e38e3cfa - + 26b005488dd7ddf6356873cb01a7b763a82a9622 diff --git a/eng/Versions.props b/eng/Versions.props index 21424130395..c80ce227ee3 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -15,7 +15,7 @@ 5 0 - 3 + 0 0 $(FSMajorVersion).$(FSMinorVersion) @@ -27,19 +27,18 @@ $(FSMajorVersion).$(FSMinorVersion).$(FSBuildVersion) $(FSMajorVersion).$(FSMinorVersion).0.0 - 40 + 39 0 - 1 + 0 $(FSRevisionVersion) $(FCSMajorVersion).$(FCSMinorVersion).$(FCSBuildVersion) - $(FCSMajorVersion).$(FCSMinorVersion).$(FCSBuildVersion).$(FCSRevisionVersion) $(FCSMajorVersion)$(FCSMinorVersion)$(FCSBuildVersion) - 5.0.2 + 4.7.2 $(FSCorePackageVersion)-$(PreReleaseVersionLabel).* 11 - 3 + $(FSMinorVersion) $(FSBuildVersion) $(FSRevisionVersion) $(FSToolsMajorVersion).$(FSToolsMinorVersion).$(FSToolsBuildVersion) @@ -48,7 +47,7 @@ 16 - 10 + 8 $(VSMajorVersion).0 $(VSMajorVersion).$(VSMinorVersion).0 $(VSAssemblyVersionPrefix).0 @@ -70,10 +69,10 @@ $(RestoreSources); - https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json; + https://api.nuget.org/v3/index.json; https://pkgs.dev.azure.com/azure-public/vside/_packaging/vssdk/nuget/v3/index.json; https://pkgs.dev.azure.com/azure-public/vside/_packaging/vs-impl/nuget/v3/index.json; - + 4.5.1 5.0.0 @@ -103,7 +102,7 @@ 4.11.1 4.3.0 4.3.0 - 4.7.1 + 4.5.0 3.8.0-5.20570.14 $(RoslynVersion) @@ -115,7 +114,7 @@ 2.0.28 $(RoslynVersion) - 16.9 + 16.6 $(MicrosoftBuildOverallPackagesVersion) $(MicrosoftBuildOverallPackagesVersion) $(MicrosoftBuildOverallPackagesVersion) diff --git a/eng/build-utils.ps1 b/eng/build-utils.ps1 index ffc4498fb85..c601896faf1 100644 --- a/eng/build-utils.ps1 +++ b/eng/build-utils.ps1 @@ -244,16 +244,16 @@ function Make-BootstrapBuild() { $argNoRestore = if ($norestore) { " --no-restore" } else { "" } $argNoIncremental = if ($rebuild) { " --no-incremental" } else { "" } - $args = "build $buildToolsProject -c $bootstrapConfiguration -v $verbosity" + $argNoRestore + $argNoIncremental + $args = "build $buildToolsProject -c $bootstrapConfiguration -v $verbosity -f netcoreapp3.1" + $argNoRestore + $argNoIncremental if ($binaryLog) { $logFilePath = Join-Path $LogDir "toolsBootstrapLog.binlog" $args += " /bl:$logFilePath" } Exec-Console $dotnetExe $args - Copy-Item "$ArtifactsDir\bin\fslex\$bootstrapConfiguration\net5.0" -Destination "$dir\fslex" -Force -Recurse - Copy-Item "$ArtifactsDir\bin\fsyacc\$bootstrapConfiguration\net5.0" -Destination "$dir\fsyacc" -Force -Recurse - Copy-Item "$ArtifactsDir\bin\AssemblyCheck\$bootstrapConfiguration\net5.0" -Destination "$dir\AssemblyCheck" -Force -Recurse + Copy-Item "$ArtifactsDir\bin\fslex\$bootstrapConfiguration\netcoreapp3.1" -Destination "$dir\fslex" -Force -Recurse + Copy-Item "$ArtifactsDir\bin\fsyacc\$bootstrapConfiguration\netcoreapp3.1" -Destination "$dir\fsyacc" -Force -Recurse + Copy-Item "$ArtifactsDir\bin\AssemblyCheck\$bootstrapConfiguration\netcoreapp3.1" -Destination "$dir\AssemblyCheck" -Force -Recurse # prepare compiler $protoProject = "`"$RepoRoot\proto.proj`"" diff --git a/eng/build.sh b/eng/build.sh index 9a2aa0083f3..e741ff85495 100755 --- a/eng/build.sh +++ b/eng/build.sh @@ -29,7 +29,6 @@ usage() echo " --ci Building in CI" echo " --docker Run in a docker container if applicable" echo " --skipAnalyzers Do not run analyzers during build operations" - echo " --skipBuild Do not run the build" echo " --prepareMachine Prepare machine for CI run, clean up processes after build" echo " --sourceBuild Simulate building for source-build" echo "" @@ -61,7 +60,6 @@ binary_log=false force_bootstrap=false ci=false skip_analyzers=false -skip_build=false prepare_machine=false source_build=false properties="" @@ -128,9 +126,6 @@ while [[ $# > 0 ]]; do --skipanalyzers) skip_analyzers=true ;; - --skipbuild) - skip_build=true - ;; --preparemachine) prepare_machine=true ;; @@ -198,7 +193,7 @@ function TestUsingNUnit() { projectname=$(basename -- "$testproject") projectname="${projectname%.*}" testlogpath="$artifacts_dir/TestResults/$configuration/${projectname}_$targetframework.xml" - args="test \"$testproject\" --no-restore --no-build -c $configuration -f $targetframework --test-adapter-path . --logger \"nunit;LogFilePath=$testlogpath\"$filterArgs --blame --results-directory $artifacts_dir/TestResults/$configuration" + args="test \"$testproject\" --no-restore --no-build -c $configuration -f $targetframework --test-adapter-path . --logger \"nunit;LogFilePath=$testlogpath\"$filterArgs" "$DOTNET_INSTALL_DIR/dotnet" $args || exit $? } @@ -252,8 +247,8 @@ function BuildSolution { /p:Configuration=$bootstrap_config mkdir -p "$bootstrap_dir" - cp -pr $artifacts_dir/bin/fslex/$bootstrap_config/net5.0 $bootstrap_dir/fslex - cp -pr $artifacts_dir/bin/fsyacc/$bootstrap_config/net5.0 $bootstrap_dir/fsyacc + cp -pr $artifacts_dir/bin/fslex/$bootstrap_config/netcoreapp3.1 $bootstrap_dir/fslex + cp -pr $artifacts_dir/bin/fsyacc/$bootstrap_config/netcoreapp3.1 $bootstrap_dir/fsyacc fi if [ ! -f "$bootstrap_dir/fsc.exe" ]; then BuildMessage="Error building bootstrap" @@ -262,30 +257,28 @@ function BuildSolution { /p:Configuration=$bootstrap_config \ - cp -pr $artifacts_dir/bin/fsc/$bootstrap_config/net5.0 $bootstrap_dir/fsc + cp -pr $artifacts_dir/bin/fsc/$bootstrap_config/netcoreapp3.1 $bootstrap_dir/fsc fi - if [[ "$skip_build" != true ]]; then - # do real build - BuildMessage="Error building solution" - MSBuild $toolset_build_proj \ - $bl \ - /v:$verbosity \ - /p:Configuration=$configuration \ - /p:Projects="$projects" \ - /p:RepoRoot="$repo_root" \ - /p:Restore=$restore \ - /p:Build=$build \ - /p:Rebuild=$rebuild \ - /p:Pack=$pack \ - /p:Publish=$publish \ - /p:UseRoslynAnalyzers=$enable_analyzers \ - /p:ContinuousIntegrationBuild=$ci \ - /p:QuietRestore=$quiet_restore \ - /p:QuietRestoreBinaryLog="$binary_log" \ - /p:ArcadeBuildFromSource=$source_build \ - $properties - fi + # do real build + BuildMessage="Error building solution" + MSBuild $toolset_build_proj \ + $bl \ + /v:$verbosity \ + /p:Configuration=$configuration \ + /p:Projects="$projects" \ + /p:RepoRoot="$repo_root" \ + /p:Restore=$restore \ + /p:Build=$build \ + /p:Rebuild=$rebuild \ + /p:Pack=$pack \ + /p:Publish=$publish \ + /p:UseRoslynAnalyzers=$enable_analyzers \ + /p:ContinuousIntegrationBuild=$ci \ + /p:QuietRestore=$quiet_restore \ + /p:QuietRestoreBinaryLog="$binary_log" \ + /p:DotNetBuildFromSource=$source_build \ + $properties } function TrapAndReportError { @@ -304,7 +297,7 @@ InitializeDotNetCli $restore BuildSolution if [[ "$test_core_clr" == true ]]; then - coreclrtestframework=net5.0 + coreclrtestframework=netcoreapp3.1 TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj" --targetframework $coreclrtestframework --notestfilter TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj" --targetframework $coreclrtestframework --notestfilter TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj" --targetframework $coreclrtestframework diff --git a/eng/common/build.ps1 b/eng/common/build.ps1 index 8943da242f6..94a91c0817e 100644 --- a/eng/common/build.ps1 +++ b/eng/common/build.ps1 @@ -25,7 +25,6 @@ Param( [switch] $prepareMachine, [string] $runtimeSourceFeed = '', [string] $runtimeSourceFeedKey = '', - [switch] $excludePrereleaseVS, [switch] $help, [Parameter(ValueFromRemainingArguments=$true)][String[]]$properties ) @@ -66,7 +65,6 @@ function Print-Usage() { Write-Host " -prepareMachine Prepare machine for CI run, clean up processes after build" Write-Host " -warnAsError Sets warnaserror msbuild parameter ('true' or 'false')" Write-Host " -msbuildEngine Msbuild engine to use to run build ('dotnet', 'vs', or unspecified)." - Write-Host " -excludePrereleaseVS Set to exclude build engines in prerelease versions of Visual Studio" Write-Host "" Write-Host "Command line arguments not listed above are passed thru to msbuild." diff --git a/eng/common/build.sh b/eng/common/build.sh index 55b298f16cc..252b63604e6 100755 --- a/eng/common/build.sh +++ b/eng/common/build.sh @@ -81,7 +81,7 @@ runtime_source_feed_key='' properties='' while [[ $# > 0 ]]; do - opt="$(echo "${1/#--/-}" | tr "[:upper:]" "[:lower:]")" + opt="$(echo "${1/#--/-}" | awk '{print tolower($0)}')" case "$opt" in -help|-h) usage diff --git a/eng/common/cross/arm64/tizen-fetch.sh b/eng/common/cross/arm64/tizen-fetch.sh index 16d1301f21e..a48a6f51c49 100644 --- a/eng/common/cross/arm64/tizen-fetch.sh +++ b/eng/common/cross/arm64/tizen-fetch.sh @@ -157,7 +157,7 @@ fetch_tizen_pkgs() Inform "Initialize arm base" fetch_tizen_pkgs_init standard base Inform "fetch common packages" -fetch_tizen_pkgs aarch64 gcc glibc glibc-devel libicu libicu-devel libatomic linux-glibc-devel keyutils keyutils-devel libkeyutils +fetch_tizen_pkgs aarch64 gcc glibc glibc-devel libicu libicu-devel libatomic linux-glibc-devel Inform "fetch coreclr packages" fetch_tizen_pkgs aarch64 lldb lldb-devel libgcc libstdc++ libstdc++-devel libunwind libunwind-devel lttng-ust-devel lttng-ust userspace-rcu-devel userspace-rcu Inform "fetch corefx packages" diff --git a/eng/common/cross/armel/tizen-fetch.sh b/eng/common/cross/armel/tizen-fetch.sh index 64f0187e5aa..2776cbba4e4 100755 --- a/eng/common/cross/armel/tizen-fetch.sh +++ b/eng/common/cross/armel/tizen-fetch.sh @@ -157,7 +157,7 @@ fetch_tizen_pkgs() Inform "Initialize arm base" fetch_tizen_pkgs_init standard base Inform "fetch common packages" -fetch_tizen_pkgs armv7l gcc gcc-devel-static glibc glibc-devel libicu libicu-devel libatomic linux-glibc-devel keyutils keyutils-devel libkeyutils +fetch_tizen_pkgs armv7l gcc glibc glibc-devel libicu libicu-devel libatomic linux-glibc-devel Inform "fetch coreclr packages" fetch_tizen_pkgs armv7l lldb lldb-devel libgcc libstdc++ libstdc++-devel libunwind libunwind-devel lttng-ust-devel lttng-ust userspace-rcu-devel userspace-rcu Inform "fetch corefx packages" diff --git a/eng/common/cross/build-android-rootfs.sh b/eng/common/cross/build-android-rootfs.sh index 42516bbeebc..e7f12edb565 100755 --- a/eng/common/cross/build-android-rootfs.sh +++ b/eng/common/cross/build-android-rootfs.sh @@ -27,7 +27,7 @@ __AndroidToolchain=aarch64-linux-android for i in "$@" do - lowerI="$(echo $i | tr "[:upper:]" "[:lower:]")" + lowerI="$(echo $i | awk '{print tolower($0)}')" case $lowerI in -?|-h|--help) usage diff --git a/eng/common/cross/build-rootfs.sh b/eng/common/cross/build-rootfs.sh index 591d8666a84..6d59e181c8f 100755 --- a/eng/common/cross/build-rootfs.sh +++ b/eng/common/cross/build-rootfs.sh @@ -6,7 +6,7 @@ usage() { echo "Usage: $0 [BuildArch] [CodeName] [lldbx.y] [--skipunmount] --rootfsdir ]" echo "BuildArch can be: arm(default), armel, arm64, x86" - echo "CodeName - optional, Code name for Linux, can be: trusty, xenial(default), zesty, bionic, alpine, alpine3.9 or alpine3.13. If BuildArch is armel, LinuxCodeName is jessie(default) or tizen." + echo "CodeName - optional, Code name for Linux, can be: trusty, xenial(default), zesty, bionic, alpine. If BuildArch is armel, LinuxCodeName is jessie(default) or tizen." echo " for FreeBSD can be: freebsd11 or freebsd12." echo " for illumos can be: illumos." echo "lldbx.y - optional, LLDB version, can be: lldb3.9(default), lldb4.0, lldb5.0, lldb6.0 no-lldb. Ignored for alpine and FReeBSD" @@ -74,10 +74,6 @@ __IllumosPackages+=" mit-krb5-1.16.2nb4" __IllumosPackages+=" openssl-1.1.1e" __IllumosPackages+=" zlib-1.2.11" -# ML.NET dependencies -__UbuntuPackages+=" libomp5" -__UbuntuPackages+=" libomp-dev" - __UseMirror=0 __UnprocessedBuildArgs= @@ -86,7 +82,7 @@ while :; do break fi - lowerI="$(echo $1 | tr "[:upper:]" "[:lower:]")" + lowerI="$(echo $1 | awk '{print tolower($0)}')" case $lowerI in -?|-h|--help) usage @@ -187,20 +183,9 @@ while :; do __UbuntuRepo= __Tizen=tizen ;; - alpine|alpine3.9) + alpine) __CodeName=alpine __UbuntuRepo= - __AlpineVersion=3.9 - ;; - alpine3.13) - __CodeName=alpine - __UbuntuRepo= - __AlpineVersion=3.13 - # Alpine 3.13 has all the packages we need in the 3.13 repository - __AlpinePackages+=$__AlpinePackagesEdgeCommunity - __AlpinePackagesEdgeCommunity= - __AlpinePackages+=$__AlpinePackagesEdgeMain - __AlpinePackagesEdgeMain= ;; freebsd11) __FreeBSDBase="11.3-RELEASE" @@ -258,6 +243,7 @@ __RootfsDir="$( cd "$__RootfsDir" && pwd )" if [[ "$__CodeName" == "alpine" ]]; then __ApkToolsVersion=2.9.1 + __AlpineVersion=3.9 __ApkToolsDir=$(mktemp -d) wget https://github.com/alpinelinux/apk-tools/releases/download/v$__ApkToolsVersion/apk-tools-$__ApkToolsVersion-x86_64-linux.tar.gz -P $__ApkToolsDir tar -xf $__ApkToolsDir/apk-tools-$__ApkToolsVersion-x86_64-linux.tar.gz -C $__ApkToolsDir @@ -270,19 +256,15 @@ if [[ "$__CodeName" == "alpine" ]]; then -U --allow-untrusted --root $__RootfsDir --arch $__AlpineArch --initdb \ add $__AlpinePackages - if [[ -n "$__AlpinePackagesEdgeMain" ]]; then - $__ApkToolsDir/apk-tools-$__ApkToolsVersion/apk \ - -X http://dl-cdn.alpinelinux.org/alpine/edge/main \ - -U --allow-untrusted --root $__RootfsDir --arch $__AlpineArch --initdb \ - add $__AlpinePackagesEdgeMain - fi + $__ApkToolsDir/apk-tools-$__ApkToolsVersion/apk \ + -X http://dl-cdn.alpinelinux.org/alpine/edge/main \ + -U --allow-untrusted --root $__RootfsDir --arch $__AlpineArch --initdb \ + add $__AlpinePackagesEdgeMain - if [[ -n "$__AlpinePackagesEdgeCommunity" ]]; then - $__ApkToolsDir/apk-tools-$__ApkToolsVersion/apk \ - -X http://dl-cdn.alpinelinux.org/alpine/edge/community \ - -U --allow-untrusted --root $__RootfsDir --arch $__AlpineArch --initdb \ - add $__AlpinePackagesEdgeCommunity - fi + $__ApkToolsDir/apk-tools-$__ApkToolsVersion/apk \ + -X http://dl-cdn.alpinelinux.org/alpine/edge/community \ + -U --allow-untrusted --root $__RootfsDir --arch $__AlpineArch --initdb \ + add $__AlpinePackagesEdgeCommunity rm -r $__ApkToolsDir elif [[ "$__CodeName" == "freebsd" ]]; then diff --git a/eng/common/darc-init.sh b/eng/common/darc-init.sh index 39abdbecdcf..d981d7bbf38 100755 --- a/eng/common/darc-init.sh +++ b/eng/common/darc-init.sh @@ -6,7 +6,7 @@ versionEndpoint='https://maestro-prod.westus2.cloudapp.azure.com/api/assets/darc verbosity='minimal' while [[ $# > 0 ]]; do - opt="$(echo "$1" | tr "[:upper:]" "[:lower:]")" + opt="$(echo "$1" | awk '{print tolower($0)}')" case "$opt" in --darcversion) darcVersion=$2 diff --git a/eng/common/dotnet-install.sh b/eng/common/dotnet-install.sh index fdfeea66e7d..ead6a1d9a24 100755 --- a/eng/common/dotnet-install.sh +++ b/eng/common/dotnet-install.sh @@ -19,7 +19,7 @@ runtime='dotnet' runtimeSourceFeed='' runtimeSourceFeedKey='' while [[ $# > 0 ]]; do - opt="$(echo "$1" | tr "[:upper:]" "[:lower:]")" + opt="$(echo "$1" | awk '{print tolower($0)}')" case "$opt" in -version|-v) shift @@ -49,8 +49,13 @@ while [[ $# > 0 ]]; do shift done -# Use uname to determine what the CPU is, see https://en.wikipedia.org/wiki/Uname#Examples -cpuname=$(uname -m) +# Use uname to determine what the CPU is. +cpuname=$(uname -p) +# Some Linux platforms report unknown for platform, but the arch for machine. +if [[ "$cpuname" == "unknown" ]]; then + cpuname=$(uname -m) +fi + case $cpuname in aarch64) buildarch=arm64 @@ -70,7 +75,7 @@ case $cpuname in ;; esac -dotnetRoot="${repo_root}.dotnet" +dotnetRoot="$repo_root/.dotnet" if [[ $architecture != "" ]] && [[ $architecture != $buildarch ]]; then dotnetRoot="$dotnetRoot/$architecture" fi diff --git a/eng/common/generate-locproject.ps1 b/eng/common/generate-locproject.ps1 deleted file mode 100644 index 25e97ac0077..00000000000 --- a/eng/common/generate-locproject.ps1 +++ /dev/null @@ -1,117 +0,0 @@ -Param( - [Parameter(Mandatory=$true)][string] $SourcesDirectory, # Directory where source files live; if using a Localize directory it should live in here - [string] $LanguageSet = 'VS_Main_Languages', # Language set to be used in the LocProject.json - [switch] $UseCheckedInLocProjectJson, # When set, generates a LocProject.json and compares it to one that already exists in the repo; otherwise just generates one - [switch] $CreateNeutralXlfs # Creates neutral xlf files. Only set to false when running locally -) - -# Generates LocProject.json files for the OneLocBuild task. OneLocBuildTask is described here: -# https://ceapex.visualstudio.com/CEINTL/_wiki/wikis/CEINTL.wiki/107/Localization-with-OneLocBuild-Task - -Set-StrictMode -Version 2.0 -$ErrorActionPreference = "Stop" -. $PSScriptRoot\tools.ps1 - -Import-Module -Name (Join-Path $PSScriptRoot 'native\CommonLibrary.psm1') - -$exclusionsFilePath = "$SourcesDirectory\eng\Localize\LocExclusions.json" -$exclusions = @{ Exclusions = @() } -if (Test-Path -Path $exclusionsFilePath) -{ - $exclusions = Get-Content "$exclusionsFilePath" | ConvertFrom-Json -} - -Push-Location "$SourcesDirectory" # push location for Resolve-Path -Relative to work - -# Template files -$jsonFiles = @() -$jsonTemplateFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\.template\.config\\localize\\.+\.en\.json" } # .NET templating pattern -$jsonTemplateFiles | ForEach-Object { - $null = $_.Name -Match "(.+)\.[\w-]+\.json" # matches '[filename].[langcode].json - - $destinationFile = "$($_.Directory.FullName)\$($Matches.1).json" - $jsonFiles += Copy-Item "$($_.FullName)" -Destination $destinationFile -PassThru -} - -$jsonWinformsTemplateFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "en\\strings\.json" } # current winforms pattern - -$xlfFiles = @() - -$allXlfFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory\*\*.xlf" -$langXlfFiles = @() -if ($allXlfFiles) { - $null = $allXlfFiles[0].FullName -Match "\.([\w-]+)\.xlf" # matches '[langcode].xlf' - $firstLangCode = $Matches.1 - $langXlfFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory\*\*.$firstLangCode.xlf" -} -$langXlfFiles | ForEach-Object { - $null = $_.Name -Match "(.+)\.[\w-]+\.xlf" # matches '[filename].[langcode].xlf - - $destinationFile = "$($_.Directory.FullName)\$($Matches.1).xlf" - $xlfFiles += Copy-Item "$($_.FullName)" -Destination $destinationFile -PassThru -} - -$locFiles = $jsonFiles + $jsonWinformsTemplateFiles + $xlfFiles - -$locJson = @{ - Projects = @( - @{ - LanguageSet = $LanguageSet - LocItems = @( - $locFiles | ForEach-Object { - $outputPath = "$(($_.DirectoryName | Resolve-Path -Relative) + "\")" - $continue = $true - foreach ($exclusion in $exclusions.Exclusions) { - if ($outputPath.Contains($exclusion)) - { - $continue = $false - } - } - $sourceFile = ($_.FullName | Resolve-Path -Relative) - if (!$CreateNeutralXlfs -and $_.Extension -eq '.xlf') { - Remove-Item -Path $sourceFile - } - if ($continue) - { - if ($_.Directory.Name -eq 'en' -and $_.Extension -eq '.json') { - return @{ - SourceFile = $sourceFile - CopyOption = "LangIDOnPath" - OutputPath = "$($_.Directory.Parent.FullName | Resolve-Path -Relative)\" - } - } - else { - return @{ - SourceFile = $sourceFile - CopyOption = "LangIDOnName" - OutputPath = $outputPath - } - } - } - } - ) - } - ) -} - -$json = ConvertTo-Json $locJson -Depth 5 -Write-Host "LocProject.json generated:`n`n$json`n`n" -Pop-Location - -if (!$UseCheckedInLocProjectJson) { - New-Item "$SourcesDirectory\eng\Localize\LocProject.json" -Force # Need this to make sure the Localize directory is created - Set-Content "$SourcesDirectory\eng\Localize\LocProject.json" $json -} -else { - New-Item "$SourcesDirectory\eng\Localize\LocProject-generated.json" -Force # Need this to make sure the Localize directory is created - Set-Content "$SourcesDirectory\eng\Localize\LocProject-generated.json" $json - - if ((Get-FileHash "$SourcesDirectory\eng\Localize\LocProject-generated.json").Hash -ne (Get-FileHash "$SourcesDirectory\eng\Localize\LocProject.json").Hash) { - Write-PipelineTelemetryError -Category "OneLocBuild" -Message "Existing LocProject.json differs from generated LocProject.json. Download LocProject-generated.json and compare them." - - exit 1 - } - else { - Write-Host "Generated LocProject.json and current LocProject.json are identical." - } -} \ No newline at end of file diff --git a/eng/common/init-tools-native.sh b/eng/common/init-tools-native.sh index 5bd205b5da3..29fc5db8ae0 100755 --- a/eng/common/init-tools-native.sh +++ b/eng/common/init-tools-native.sh @@ -16,7 +16,7 @@ declare -A native_assets . $scriptroot/native/common-library.sh while (($# > 0)); do - lowerI="$(echo $1 | tr "[:upper:]" "[:lower:]")" + lowerI="$(echo $1 | awk '{print tolower($0)}')" case $lowerI in --baseuri) base_uri=$2 @@ -76,89 +76,24 @@ while (($# > 0)); do done function ReadGlobalJsonNativeTools { - # happy path: we have a proper JSON parsing tool `jq(1)` in PATH! - if command -v jq &> /dev/null; then - - # jq: read each key/value pair under "native-tools" entry and emit: - # KEY="" VALUE="" - # followed by a null byte. - # - # bash: read line with null byte delimeter and push to array (for later `eval`uation). - - while IFS= read -rd '' line; do - native_assets+=("$line") - done < <(jq -r '. | - select(has("native-tools")) | - ."native-tools" | - keys[] as $k | - @sh "KEY=\($k) VALUE=\(.[$k])\u0000"' "$global_json_file") - - return - fi - - # Warning: falling back to manually parsing JSON, which is not recommended. - - # Following routine matches the output and escaping logic of jq(1)'s @sh formatter used above. - # It has been tested with several weird strings with escaped characters in entries (key and value) - # and results were compared with the output of jq(1) in binary representation using xxd(1); - # just before the assignment to 'native_assets' array (above and below). - - # try to capture the section under "native-tools". - if [[ ! "$(cat "$global_json_file")" =~ \"native-tools\"[[:space:]\:\{]*([^\}]+) ]]; then - return - fi - - section="${BASH_REMATCH[1]}" - - parseStarted=0 - possibleEnd=0 - escaping=0 - escaped=0 - isKey=1 - - for (( i=0; i<${#section}; i++ )); do - char="${section:$i:1}" - if ! ((parseStarted)) && [[ "$char" =~ [[:space:],:] ]]; then continue; fi - - if ! ((escaping)) && [[ "$char" == "\\" ]]; then - escaping=1 - elif ((escaping)) && ! ((escaped)); then - escaped=1 - fi - - if ! ((parseStarted)) && [[ "$char" == "\"" ]]; then - parseStarted=1 - possibleEnd=0 - elif [[ "$char" == "'" ]]; then - token="$token'\\\''" - possibleEnd=0 - elif ((escaping)) || [[ "$char" != "\"" ]]; then - token="$token$char" - possibleEnd=1 - fi - - if ((possibleEnd)) && ! ((escaping)) && [[ "$char" == "\"" ]]; then - # Use printf to unescape token to match jq(1)'s @sh formatting rules. - # do not use 'token="$(printf "$token")"' syntax, as $() eats the trailing linefeed. - printf -v token "'$token'" - - if ((isKey)); then - KEY="$token" - isKey=0 - else - line="KEY=$KEY VALUE=$token" - native_assets+=("$line") - isKey=1 - fi - - # reset for next token - parseStarted=0 - token= - elif ((escaping)) && ((escaped)); then - escaping=0 - escaped=0 - fi - done + # Get the native-tools section from the global.json. + local native_tools_section=$(cat $global_json_file | awk '/"native-tools"/,/}/') + # Only extract the contents of the object. + local native_tools_list=$(echo $native_tools_section | awk -F"[{}]" '{print $2}') + native_tools_list=${native_tools_list//[\" ]/} + native_tools_list=$( echo "$native_tools_list" | sed 's/\s//g' | sed 's/,/\n/g' ) + + local old_IFS=$IFS + while read -r line; do + # Lines are of the form: 'tool:version' + IFS=: + while read -r key value; do + native_assets[$key]=$value + done <<< "$line" + done <<< "$native_tools_list" + IFS=$old_IFS + + return 0; } native_base_dir=$install_directory @@ -176,14 +111,14 @@ if [[ ${#native_assets[@]} -eq 0 ]]; then exit 0; else native_installer_dir="$scriptroot/native" - for index in "${!native_assets[@]}"; do - eval "${native_assets["$index"]}" - - installer_path="$native_installer_dir/install-$KEY.sh" + for tool in "${!native_assets[@]}" + do + tool_version=${native_assets[$tool]} + installer_path="$native_installer_dir/install-$tool.sh" installer_command="$installer_path" installer_command+=" --baseuri $base_uri" installer_command+=" --installpath $install_bin" - installer_command+=" --version $VALUE" + installer_command+=" --version $tool_version" echo $installer_command if [[ $force = true ]]; then diff --git a/eng/common/internal-feed-operations.ps1 b/eng/common/internal-feed-operations.ps1 index 92b77347d99..b8f6529fdc8 100644 --- a/eng/common/internal-feed-operations.ps1 +++ b/eng/common/internal-feed-operations.ps1 @@ -45,11 +45,11 @@ function SetupCredProvider { # Then, we set the 'VSS_NUGET_EXTERNAL_FEED_ENDPOINTS' environment variable to restore from the stable # feeds successfully - $nugetConfigPath = Join-Path $RepoRoot "NuGet.config" + $nugetConfigPath = "$RepoRoot\NuGet.config" if (-Not (Test-Path -Path $nugetConfigPath)) { Write-PipelineTelemetryError -Category 'Build' -Message 'NuGet.config file not found in repo root!' - ExitWithExitCode 1 + ExitWithExitCode 1 } $endpoints = New-Object System.Collections.ArrayList @@ -63,6 +63,8 @@ function SetupCredProvider { } if (($endpoints | Measure-Object).Count -gt 0) { + # [SuppressMessage("Microsoft.Security", "CS002:SecretInNextLine", Justification="Endpoint code example with no real credentials.")] + # Create the JSON object. It should look like '{"endpointCredentials": [{"endpoint":"http://example.index.json", "username":"optional", "password":"accesstoken"}]}' $endpointCredentials = @{endpointCredentials=$endpoints} | ConvertTo-Json -Compress # Create the environment variables the AzDo way @@ -85,7 +87,7 @@ function SetupCredProvider { #Workaround for https://github.com/microsoft/msbuild/issues/4430 function InstallDotNetSdkAndRestoreArcade { - $dotnetTempDir = Join-Path $RepoRoot "dotnet" + $dotnetTempDir = "$RepoRoot\dotnet" $dotnetSdkVersion="2.1.507" # After experimentation we know this version works when restoring the SDK (compared to 3.0.*) $dotnet = "$dotnetTempDir\dotnet.exe" $restoreProjPath = "$PSScriptRoot\restore.proj" diff --git a/eng/common/internal-feed-operations.sh b/eng/common/internal-feed-operations.sh index 9378223ba09..9ed225e7e55 100755 --- a/eng/common/internal-feed-operations.sh +++ b/eng/common/internal-feed-operations.sh @@ -39,7 +39,7 @@ function SetupCredProvider { # Then, we set the 'VSS_NUGET_EXTERNAL_FEED_ENDPOINTS' environment variable to restore from the stable # feeds successfully - local nugetConfigPath="{$repo_root}NuGet.config" + local nugetConfigPath="$repo_root/NuGet.config" if [ ! "$nugetConfigPath" ]; then Write-PipelineTelemetryError -category 'Build' "NuGet.config file not found in repo's root!" @@ -62,6 +62,8 @@ function SetupCredProvider { endpoints+=']' if [ ${#endpoints} -gt 2 ]; then + # [SuppressMessage("Microsoft.Security", "CS002:SecretInNextLine", Justification="Endpoint code example with no real credentials.")] + # Create the JSON object. It should look like '{"endpointCredentials": [{"endpoint":"http://example.index.json", "username":"optional", "password":"accesstoken"}]}' local endpointCredentials="{\"endpointCredentials\": "$endpoints"}" echo "##vso[task.setvariable variable=VSS_NUGET_EXTERNAL_FEED_ENDPOINTS]$endpointCredentials" @@ -101,7 +103,7 @@ authToken='' repoName='' while [[ $# > 0 ]]; do - opt="$(echo "$1" | tr "[:upper:]" "[:lower:]")" + opt="$(echo "$1" | awk '{print tolower($0)}')" case "$opt" in --operation) operation=$2 diff --git a/eng/common/msbuild.ps1 b/eng/common/msbuild.ps1 index eea19cd8452..c6401230002 100644 --- a/eng/common/msbuild.ps1 +++ b/eng/common/msbuild.ps1 @@ -5,7 +5,6 @@ Param( [bool] $nodeReuse = $true, [switch] $ci, [switch] $prepareMachine, - [switch] $excludePrereleaseVS, [Parameter(ValueFromRemainingArguments=$true)][String[]]$extraArgs ) diff --git a/eng/common/msbuild.sh b/eng/common/msbuild.sh index 20d3dad5435..8160cd5a59d 100755 --- a/eng/common/msbuild.sh +++ b/eng/common/msbuild.sh @@ -19,7 +19,7 @@ prepare_machine=false extra_args='' while (($# > 0)); do - lowerI="$(echo $1 | tr "[:upper:]" "[:lower:]")" + lowerI="$(echo $1 | awk '{print tolower($0)}')" case $lowerI in --verbosity) verbosity=$2 diff --git a/eng/common/native/install-cmake-test.sh b/eng/common/native/install-cmake-test.sh index 8a5e7cf0db5..12339a40761 100755 --- a/eng/common/native/install-cmake-test.sh +++ b/eng/common/native/install-cmake-test.sh @@ -14,7 +14,7 @@ download_retries=5 retry_wait_time_seconds=30 while (($# > 0)); do - lowerI="$(echo $1 | tr "[:upper:]" "[:lower:]")" + lowerI="$(echo $1 | awk '{print tolower($0)}')" case $lowerI in --baseuri) base_uri=$2 @@ -63,7 +63,7 @@ done tool_name="cmake-test" tool_os=$(GetCurrentOS) -tool_folder="$(echo $tool_os | tr "[:upper:]" "[:lower:]")" +tool_folder=$(echo $tool_os | awk '{print tolower($0)}') tool_arch="x86_64" tool_name_moniker="$tool_name-$version-$tool_os-$tool_arch" tool_install_directory="$install_path/$tool_name/$version" @@ -114,4 +114,4 @@ if [[ $? != 0 ]]; then exit 1 fi -exit 0 +exit 0 \ No newline at end of file diff --git a/eng/common/native/install-cmake.sh b/eng/common/native/install-cmake.sh index de496beebc5..18041be8763 100755 --- a/eng/common/native/install-cmake.sh +++ b/eng/common/native/install-cmake.sh @@ -14,7 +14,7 @@ download_retries=5 retry_wait_time_seconds=30 while (($# > 0)); do - lowerI="$(echo $1 | tr "[:upper:]" "[:lower:]")" + lowerI="$(echo $1 | awk '{print tolower($0)}')" case $lowerI in --baseuri) base_uri=$2 @@ -63,7 +63,7 @@ done tool_name="cmake" tool_os=$(GetCurrentOS) -tool_folder="$(echo $tool_os | tr "[:upper:]" "[:lower:]")" +tool_folder=$(echo $tool_os | awk '{print tolower($0)}') tool_arch="x86_64" tool_name_moniker="$tool_name-$version-$tool_os-$tool_arch" tool_install_directory="$install_path/$tool_name/$version" @@ -114,4 +114,4 @@ if [[ $? != 0 ]]; then exit 1 fi -exit 0 +exit 0 \ No newline at end of file diff --git a/eng/common/native/install-tool.ps1 b/eng/common/native/install-tool.ps1 index 78f2d84a4e4..f397e1c75d4 100644 --- a/eng/common/native/install-tool.ps1 +++ b/eng/common/native/install-tool.ps1 @@ -105,7 +105,7 @@ try { Write-Error "There are multiple copies of $ToolName in $($ToolInstallDirectory): `n$(@($ToolFilePath | out-string))" exit 1 } elseif (@($ToolFilePath).Length -Lt 1) { - Write-Host "$ToolName was not found in $ToolInstallDirectory." + Write-Host "$ToolName was not found in $ToolFilePath." exit 1 } diff --git a/eng/common/performance/blazor_perf.proj b/eng/common/performance/blazor_perf.proj new file mode 100644 index 00000000000..3b25359c438 --- /dev/null +++ b/eng/common/performance/blazor_perf.proj @@ -0,0 +1,30 @@ + + + python3 + $(HelixPreCommands);chmod +x $HELIX_WORKITEM_PAYLOAD/SOD/SizeOnDisk + + + + + %(Identity) + + + + + %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\ + $(ScenarioDirectory)blazor\ + + + $HELIX_CORRELATION_PAYLOAD/performance/src/scenarios/ + $(ScenarioDirectory)blazor/ + + + + + $(WorkItemDirectory) + cd $(BlazorDirectory);$(Python) pre.py publish --msbuild %27/p:_TrimmerDumpDependencies=true%27 --msbuild-static AdditionalMonoLinkerOptions=%27"%24(AdditionalMonoLinkerOptions) --dump-dependencies"%27 --binlog %27./traces/blazor_publish.binlog%27 + $(Python) test.py sod --scenario-name "%(Identity)" + $(Python) post.py + + + \ No newline at end of file diff --git a/eng/common/performance/crossgen_perf.proj b/eng/common/performance/crossgen_perf.proj new file mode 100644 index 00000000000..eb8bdd9c440 --- /dev/null +++ b/eng/common/performance/crossgen_perf.proj @@ -0,0 +1,110 @@ + + + + + %(Identity) + + + + + + py -3 + $(HelixPreCommands) + %HELIX_CORRELATION_PAYLOAD%\Core_Root + %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\ + $(ScenarioDirectory)crossgen\ + $(ScenarioDirectory)crossgen2\ + + + python3 + $(HelixPreCommands);chmod +x $HELIX_WORKITEM_PAYLOAD/startup/Startup;chmod +x $HELIX_WORKITEM_PAYLOAD/startup/perfcollect;sudo apt update;chmod +x $HELIX_WORKITEM_PAYLOAD/SOD/SizeOnDisk + $HELIX_CORRELATION_PAYLOAD/Core_Root + $HELIX_CORRELATION_PAYLOAD/performance/src/scenarios/ + $(ScenarioDirectory)crossgen/ + $(ScenarioDirectory)crossgen2/ + + + + + + + + + + + + + + + + + + + + + + + $(WorkItemDirectory) + $(Python) $(CrossgenDirectory)test.py crossgen --core-root $(CoreRoot) --test-name %(Identity) + + + + + + $(WorkItemDirectory) + $(Python) $(Crossgen2Directory)test.py crossgen2 --core-root $(CoreRoot) --single %(Identity) + + + + + + $(WorkItemDirectory) + $(Python) $(Crossgen2Directory)test.py crossgen2 --core-root $(CoreRoot) --single %(Identity) --singlethreaded True + + + + + + $(WorkItemDirectory) + $(Python) $(CrossgenDirectory)pre.py crossgen --core-root $(CoreRoot) --single %(Identity) + $(Python) $(CrossgenDirectory)test.py sod --scenario-name "Crossgen %(Identity) Size" --dirs ./crossgen.out/ + $(Python) $(CrossgenDirectory)post.py + + + + + + $(WorkItemDirectory) + $(Python) $(Crossgen2Directory)pre.py crossgen2 --core-root $(CoreRoot) --single %(Identity) + $(Python) $(Crossgen2Directory)test.py sod --scenario-name "Crossgen2 %(Identity) Size" --dirs ./crossgen.out/ + $(Python) $(Crossgen2Directory)post.py + + + + + + + 4:00 + + + + 4:00 + + + 4:00 + + + $(WorkItemDirectory) + $(Python) $(Crossgen2Directory)test.py crossgen2 --core-root $(CoreRoot) --composite $(Crossgen2Directory)framework-r2r.dll.rsp + 1:00 + + + 4:00 + + + 4:00 + + + \ No newline at end of file diff --git a/eng/common/performance/microbenchmarks.proj b/eng/common/performance/microbenchmarks.proj new file mode 100644 index 00000000000..318ca5f1b8d --- /dev/null +++ b/eng/common/performance/microbenchmarks.proj @@ -0,0 +1,144 @@ + + + + %HELIX_CORRELATION_PAYLOAD%\performance\scripts\benchmarks_ci.py --csproj %HELIX_CORRELATION_PAYLOAD%\performance\$(TargetCsproj) + --dotnet-versions %DOTNET_VERSION% --cli-source-info args --cli-branch %PERFLAB_BRANCH% --cli-commit-sha %PERFLAB_HASH% --cli-repository https://github.com/%PERFLAB_REPO% --cli-source-timestamp %PERFLAB_BUILDTIMESTAMP% + py -3 + %HELIX_CORRELATION_PAYLOAD%\Core_Root\CoreRun.exe + %HELIX_CORRELATION_PAYLOAD%\Baseline_Core_Root\CoreRun.exe + + $(HelixPreCommands);call %HELIX_CORRELATION_PAYLOAD%\performance\tools\machine-setup.cmd;set PYTHONPATH=%HELIX_WORKITEM_PAYLOAD%\scripts%3B%HELIX_WORKITEM_PAYLOAD% + %HELIX_CORRELATION_PAYLOAD%\artifacts\BenchmarkDotNet.Artifacts + %HELIX_CORRELATION_PAYLOAD%\artifacts\BenchmarkDotNet.Artifacts_Baseline + %HELIX_CORRELATION_PAYLOAD%\performance\src\tools\ResultsComparer\ResultsComparer.csproj + %HELIX_CORRELATION_PAYLOAD%\performance\tools\dotnet\$(Architecture)\dotnet.exe + %25%25 + %HELIX_WORKITEM_ROOT%\testResults.xml + + + + $HELIX_CORRELATION_PAYLOAD + $(BaseDirectory)/performance + + + + $HELIX_WORKITEM_PAYLOAD + $(BaseDirectory) + + + + $(PerformanceDirectory)/scripts/benchmarks_ci.py --csproj $(PerformanceDirectory)/$(TargetCsproj) + --dotnet-versions $DOTNET_VERSION --cli-source-info args --cli-branch $PERFLAB_BRANCH --cli-commit-sha $PERFLAB_HASH --cli-repository https://github.com/$PERFLAB_REPO --cli-source-timestamp $PERFLAB_BUILDTIMESTAMP + python3 + $(BaseDirectory)/Core_Root/corerun + $(BaseDirectory)/Baseline_Core_Root/corerun + $(HelixPreCommands);chmod +x $(PerformanceDirectory)/tools/machine-setup.sh;. $(PerformanceDirectory)/tools/machine-setup.sh + $(BaseDirectory)/artifacts/BenchmarkDotNet.Artifacts + $(BaseDirectory)/artifacts/BenchmarkDotNet.Artifacts_Baseline + $(PerformanceDirectory)/src/tools/ResultsComparer/ResultsComparer.csproj + $(PerformanceDirectory)/tools/dotnet/$(Architecture)/dotnet + %25 + $HELIX_WORKITEM_ROOT/testResults.xml + + + + $(CliArguments) --wasm + + + + --corerun %HELIX_CORRELATION_PAYLOAD%\dotnet-mono\shared\Microsoft.NETCore.App\6.0.0\corerun.exe + + + --corerun $(BaseDirectory)/dotnet-mono/shared/Microsoft.NETCore.App/6.0.0/corerun + + + + --corerun $(CoreRun) + + + + --corerun $(BaselineCoreRun) + + + + $(Python) $(WorkItemCommand) --incremental no --architecture $(Architecture) -f $(_Framework) $(PerfLabArguments) + + + + $(WorkItemCommand) $(CliArguments) + + + + 2:30 + 0:15 + + + + + %(Identity) + + + + + 30 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + false + + + + + + $(WorkItemDirectory) + $(WorkItemCommand) --bdn-artifacts $(BaselineArtifactsDirectory) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(BaselineCoreRunArgument) --partition-count $(PartitionCount) --partition-index %(HelixWorkItem.Index)" + $(WorkItemCommand) --bdn-artifacts $(ArtifactsDirectory) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(CoreRunArgument) --partition-count $(PartitionCount) --partition-index %(HelixWorkItem.Index)" + $(DotnetExe) run -f $(_Framework) -p $(ResultsComparer) --base $(BaselineArtifactsDirectory) --diff $(ArtifactsDirectory) --threshold 2$(Percent) --xml $(XMLResults);$(FinalCommand) + $(WorkItemTimeout) + + + + + + $(WorkItemDirectory) + $(WorkItemCommand) --bdn-artifacts $(BaselineArtifactsDirectory) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(BaselineCoreRunArgument)" + $(WorkItemCommand) --bdn-artifacts $(ArtifactsDirectory) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(CoreRunArgument)" + $(DotnetExe) run -f $(_Framework) -p $(ResultsComparer) --base $(BaselineArtifactsDirectory) --diff $(ArtifactsDirectory) --threshold 2$(Percent) --xml $(XMLResults) + 4:00 + + + diff --git a/eng/common/performance/performance-setup.ps1 b/eng/common/performance/performance-setup.ps1 new file mode 100644 index 00000000000..0edb2ae276e --- /dev/null +++ b/eng/common/performance/performance-setup.ps1 @@ -0,0 +1,149 @@ +Param( + [string] $SourceDirectory=$env:BUILD_SOURCESDIRECTORY, + [string] $CoreRootDirectory, + [string] $BaselineCoreRootDirectory, + [string] $Architecture="x64", + [string] $Framework="net5.0", + [string] $CompilationMode="Tiered", + [string] $Repository=$env:BUILD_REPOSITORY_NAME, + [string] $Branch=$env:BUILD_SOURCEBRANCH, + [string] $CommitSha=$env:BUILD_SOURCEVERSION, + [string] $BuildNumber=$env:BUILD_BUILDNUMBER, + [string] $RunCategories="Libraries Runtime", + [string] $Csproj="src\benchmarks\micro\MicroBenchmarks.csproj", + [string] $Kind="micro", + [switch] $LLVM, + [switch] $MonoInterpreter, + [switch] $MonoAOT, + [switch] $Internal, + [switch] $Compare, + [string] $MonoDotnet="", + [string] $Configurations="CompilationMode=$CompilationMode RunKind=$Kind" +) + +$RunFromPerformanceRepo = ($Repository -eq "dotnet/performance") -or ($Repository -eq "dotnet-performance") +$UseCoreRun = ($CoreRootDirectory -ne [string]::Empty) +$UseBaselineCoreRun = ($BaselineCoreRootDirectory -ne [string]::Empty) + +$PayloadDirectory = (Join-Path $SourceDirectory "Payload") +$PerformanceDirectory = (Join-Path $PayloadDirectory "performance") +$WorkItemDirectory = (Join-Path $SourceDirectory "workitem") +$ExtraBenchmarkDotNetArguments = "--iterationCount 1 --warmupCount 0 --invocationCount 1 --unrollFactor 1 --strategy ColdStart --stopOnFirstError true" +$Creator = $env:BUILD_DEFINITIONNAME +$PerfLabArguments = "" +$HelixSourcePrefix = "pr" + +$Queue = "Windows.10.Amd64.ClientRS4.DevEx.15.8.Open" + +# TODO: Implement a better logic to determine if Framework is .NET Core or >= .NET 5. +if ($Framework.StartsWith("netcoreapp") -or ($Framework -eq "net5.0")) { + $Queue = "Windows.10.Amd64.ClientRS5.Open" +} + +if ($Compare) { + $Queue = "Windows.10.Amd64.19H1.Tiger.Perf.Open" + $PerfLabArguments = "" + $ExtraBenchmarkDotNetArguments = "" +} + +if ($Internal) { + $Queue = "Windows.10.Amd64.19H1.Tiger.Perf" + $PerfLabArguments = "--upload-to-perflab-container" + $ExtraBenchmarkDotNetArguments = "" + $Creator = "" + $HelixSourcePrefix = "official" +} + +if($MonoInterpreter) +{ + $ExtraBenchmarkDotNetArguments = "--category-exclusion-filter NoInterpreter" +} + +if($MonoDotnet -ne "") +{ + $Configurations += " LLVM=$LLVM MonoInterpreter=$MonoInterpreter MonoAOT=$MonoAOT" + if($ExtraBenchmarkDotNetArguments -eq "") + { + #FIX ME: We need to block these tests as they don't run on mono for now + $ExtraBenchmarkDotNetArguments = "--exclusion-filter *Perf_Image* *Perf_NamedPipeStream*" + } + else + { + #FIX ME: We need to block these tests as they don't run on mono for now + $ExtraBenchmarkDotNetArguments += " --exclusion-filter *Perf_Image* *Perf_NamedPipeStream*" + } +} + +# FIX ME: This is a workaround until we get this from the actual pipeline +$CommonSetupArguments="--channel master --queue $Queue --build-number $BuildNumber --build-configs $Configurations --architecture $Architecture" +$SetupArguments = "--repository https://github.com/$Repository --branch $Branch --get-perf-hash --commit-sha $CommitSha $CommonSetupArguments" + + +#This grabs the LKG version number of dotnet and passes it to our scripts +$VersionJSON = Get-Content global.json | ConvertFrom-Json +$DotNetVersion = $VersionJSON.tools.dotnet +# TODO: Change this back to parsing when we have a good story for dealing with TFM changes or when the LKG in runtime gets updated to include net6.0 +# $SetupArguments = "--dotnet-versions $DotNetVersion $SetupArguments" +$SetupArguments = "--dotnet-versions 6.0.100-alpha.1.20553.6 $SetupArguments" + + +if ($RunFromPerformanceRepo) { + $SetupArguments = "--perf-hash $CommitSha $CommonSetupArguments" + + robocopy $SourceDirectory $PerformanceDirectory /E /XD $PayloadDirectory $SourceDirectory\artifacts $SourceDirectory\.git +} +else { + git clone --branch master --depth 1 --quiet https://github.com/dotnet/performance $PerformanceDirectory +} + +if($MonoDotnet -ne "") +{ + $UsingMono = "true" + $MonoDotnetPath = (Join-Path $PayloadDirectory "dotnet-mono") + Move-Item -Path $MonoDotnet -Destination $MonoDotnetPath +} + +if ($UseCoreRun) { + $NewCoreRoot = (Join-Path $PayloadDirectory "Core_Root") + Move-Item -Path $CoreRootDirectory -Destination $NewCoreRoot +} +if ($UseBaselineCoreRun) { + $NewBaselineCoreRoot = (Join-Path $PayloadDirectory "Baseline_Core_Root") + Move-Item -Path $BaselineCoreRootDirectory -Destination $NewBaselineCoreRoot +} + +$DocsDir = (Join-Path $PerformanceDirectory "docs") +robocopy $DocsDir $WorkItemDirectory + +# Set variables that we will need to have in future steps +$ci = $true + +. "$PSScriptRoot\..\pipeline-logging-functions.ps1" + +# Directories +Write-PipelineSetVariable -Name 'PayloadDirectory' -Value "$PayloadDirectory" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'PerformanceDirectory' -Value "$PerformanceDirectory" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'WorkItemDirectory' -Value "$WorkItemDirectory" -IsMultiJobVariable $false + +# Script Arguments +Write-PipelineSetVariable -Name 'Python' -Value "py -3" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'ExtraBenchmarkDotNetArguments' -Value "$ExtraBenchmarkDotNetArguments" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'SetupArguments' -Value "$SetupArguments" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'PerfLabArguments' -Value "$PerfLabArguments" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'BDNCategories' -Value "$RunCategories" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'TargetCsproj' -Value "$Csproj" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'Kind' -Value "$Kind" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'Architecture' -Value "$Architecture" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'UseCoreRun' -Value "$UseCoreRun" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'UseBaselineCoreRun' -Value "$UseBaselineCoreRun" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'RunFromPerfRepo' -Value "$RunFromPerformanceRepo" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'Compare' -Value "$Compare" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'MonoDotnet' -Value "$UsingMono" -IsMultiJobVariable $false + +# Helix Arguments +Write-PipelineSetVariable -Name 'Creator' -Value "$Creator" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'Queue' -Value "$Queue" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'HelixSourcePrefix' -Value "$HelixSourcePrefix" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name '_BuildConfig' -Value "$Architecture.$Kind.$Framework" -IsMultiJobVariable $false + +exit 0 \ No newline at end of file diff --git a/eng/common/performance/performance-setup.sh b/eng/common/performance/performance-setup.sh new file mode 100755 index 00000000000..c8e211bcb1b --- /dev/null +++ b/eng/common/performance/performance-setup.sh @@ -0,0 +1,298 @@ +#!/usr/bin/env bash + +source_directory=$BUILD_SOURCESDIRECTORY +core_root_directory= +baseline_core_root_directory= +architecture=x64 +framework=net5.0 +compilation_mode=tiered +repository=$BUILD_REPOSITORY_NAME +branch=$BUILD_SOURCEBRANCH +commit_sha=$BUILD_SOURCEVERSION +build_number=$BUILD_BUILDNUMBER +internal=false +compare=false +mono_dotnet= +kind="micro" +llvm=false +monointerpreter=false +monoaot=false +run_categories="Libraries Runtime" +csproj="src\benchmarks\micro\MicroBenchmarks.csproj" +configurations="CompliationMode=$compilation_mode RunKind=$kind" +run_from_perf_repo=false +use_core_run=true +use_baseline_core_run=true +using_mono=false +wasm_runtime_loc= +using_wasm=false +use_latest_dotnet=false + +while (($# > 0)); do + lowerI="$(echo $1 | awk '{print tolower($0)}')" + case $lowerI in + --sourcedirectory) + source_directory=$2 + shift 2 + ;; + --corerootdirectory) + core_root_directory=$2 + shift 2 + ;; + --baselinecorerootdirectory) + baseline_core_root_directory=$2 + shift 2 + ;; + --architecture) + architecture=$2 + shift 2 + ;; + --framework) + framework=$2 + shift 2 + ;; + --compilationmode) + compilation_mode=$2 + shift 2 + ;; + --repository) + repository=$2 + shift 2 + ;; + --branch) + branch=$2 + shift 2 + ;; + --commitsha) + commit_sha=$2 + shift 2 + ;; + --buildnumber) + build_number=$2 + shift 2 + ;; + --kind) + kind=$2 + configurations="CompilationMode=$compilation_mode RunKind=$kind" + shift 2 + ;; + --runcategories) + run_categories=$2 + shift 2 + ;; + --csproj) + csproj=$2 + shift 2 + ;; + --internal) + internal=true + shift 1 + ;; + --llvm) + llvm=true + shift 1 + ;; + --monointerpreter) + monointerpreter=true + shift 1 + ;; + --monoaot) + monoaot=true + shift 1 + ;; + --monodotnet) + mono_dotnet=$2 + shift 2 + ;; + --wasm) + wasm_runtime_loc=$2 + shift 2 + ;; + --compare) + compare=true + shift 1 + ;; + --configurations) + configurations=$2 + shift 2 + ;; + --latestdotnet) + use_latest_dotnet=true + shift 1 + ;; + *) + echo "Common settings:" + echo " --corerootdirectory Directory where Core_Root exists, if running perf testing with --corerun" + echo " --architecture Architecture of the testing being run" + echo " --configurations List of key=value pairs that will be passed to perf testing infrastructure." + echo " ex: --configurations \"CompilationMode=Tiered OptimzationLevel=PGO\"" + echo " --help Print help and exit" + echo "" + echo "Advanced settings:" + echo " --framework The framework to run, if not running in master" + echo " --compliationmode The compilation mode if not passing --configurations" + echo " --sourcedirectory The directory of the sources. Defaults to env:BUILD_SOURCESDIRECTORY" + echo " --repository The name of the repository in the / format. Defaults to env:BUILD_REPOSITORY_NAME" + echo " --branch The name of the branch. Defaults to env:BUILD_SOURCEBRANCH" + echo " --commitsha The commit sha1 to run against. Defaults to env:BUILD_SOURCEVERSION" + echo " --buildnumber The build number currently running. Defaults to env:BUILD_BUILDNUMBER" + echo " --csproj The relative path to the benchmark csproj whose tests should be run. Defaults to src\benchmarks\micro\MicroBenchmarks.csproj" + echo " --kind Related to csproj. The kind of benchmarks that should be run. Defaults to micro" + echo " --runcategories Related to csproj. Categories of benchmarks to run. Defaults to \"coreclr corefx\"" + echo " --internal If the benchmarks are running as an official job." + echo " --monodotnet Pass the path to the mono dotnet for mono performance testing." + echo " --wasm Path to the unpacked wasm runtime pack." + echo " --latestdotnet --dotnet-versions will not be specified. --dotnet-versions defaults to LKG version in global.json " + echo "" + exit 0 + ;; + esac +done + +if [ "$repository" == "dotnet/performance" ] || [ "$repository" == "dotnet-performance" ]; then + run_from_perf_repo=true +fi + +if [ -z "$configurations" ]; then + configurations="CompilationMode=$compilation_mode" +fi + +if [ -z "$core_root_directory" ]; then + use_core_run=false +fi + +if [ -z "$baseline_core_root_directory" ]; then + use_baseline_core_run=false +fi + +payload_directory=$source_directory/Payload +performance_directory=$payload_directory/performance +workitem_directory=$source_directory/workitem +extra_benchmark_dotnet_arguments="--iterationCount 1 --warmupCount 0 --invocationCount 1 --unrollFactor 1 --strategy ColdStart --stopOnFirstError true" +perflab_arguments= +queue=Ubuntu.1804.Amd64.Open +creator=$BUILD_DEFINITIONNAME +helix_source_prefix="pr" + +if [[ "$compare" == true ]]; then + extra_benchmark_dotnet_arguments= + perflab_arguments= + + # No open queues for arm64 + if [[ "$architecture" = "arm64" ]]; then + echo "Compare not available for arm64" + exit 1 + fi + + queue=Ubuntu.1804.Amd64.Tiger.Perf.Open +fi + +if [[ "$internal" == true ]]; then + perflab_arguments="--upload-to-perflab-container" + helix_source_prefix="official" + creator= + extra_benchmark_dotnet_arguments= + + if [[ "$architecture" = "arm64" ]]; then + queue=Ubuntu.1804.Arm64.Perf + else + queue=Ubuntu.1804.Amd64.Tiger.Perf + fi +else + if [[ "$architecture" = "arm64" ]]; then + queue=ubuntu.1804.armarch.open + else + queue=Ubuntu.1804.Amd64.Open + fi +fi + +if [[ "$mono_dotnet" != "" ]] && [[ "$monointerpreter" == "false" ]]; then + configurations="$configurations LLVM=$llvm MonoInterpreter=$monointerpreter MonoAOT=$monoaot" + extra_benchmark_dotnet_arguments="$extra_benchmark_dotnet_arguments --category-exclusion-filter NoMono" +fi + +if [[ "$wasm_runtime_loc" != "" ]]; then + configurations="CompilationMode=wasm RunKind=$kind" + extra_benchmark_dotnet_arguments="$extra_benchmark_dotnet_arguments --category-exclusion-filter NoInterpreter NoWASM NoMono" +fi + +if [[ "$mono_dotnet" != "" ]] && [[ "$monointerpreter" == "true" ]]; then + configurations="$configurations LLVM=$llvm MonoInterpreter=$monointerpreter MonoAOT=$monoaot" + extra_benchmark_dotnet_arguments="$extra_benchmark_dotnet_arguments --category-exclusion-filter NoInterpreter NoMono" +fi + +common_setup_arguments="--channel master --queue $queue --build-number $build_number --build-configs $configurations --architecture $architecture" +setup_arguments="--repository https://github.com/$repository --branch $branch --get-perf-hash --commit-sha $commit_sha $common_setup_arguments" + + +if [[ "$use_latest_dotnet" = false ]]; then + # Get the tools section from the global.json. + # This grabs the LKG version number of dotnet and passes it to our scripts + dotnet_version=`cat global.json | python3 -c 'import json,sys;obj=json.load(sys.stdin);print(obj["tools"]["dotnet"])'` + # TODO: Change this back to parsing when we have a good story for dealing with TFM changes or when the LKG in runtime gets updated to include net6.0 + # setup_arguments="--dotnet-versions $dotnet_version $setup_arguments" + setup_arguments="--dotnet-versions 6.0.100-alpha.1.20553.6 $setup_arguments" +fi + +if [[ "$run_from_perf_repo" = true ]]; then + payload_directory= + workitem_directory=$source_directory + performance_directory=$workitem_directory + setup_arguments="--perf-hash $commit_sha $common_setup_arguments" +else + git clone --branch master --depth 1 --quiet https://github.com/dotnet/performance $performance_directory + + docs_directory=$performance_directory/docs + mv $docs_directory $workitem_directory +fi + +if [[ "$wasm_runtime_loc" != "" ]]; then + using_wasm=true + wasm_dotnet_path=$payload_directory/dotnet-wasm + mv $wasm_runtime_loc $wasm_dotnet_path + extra_benchmark_dotnet_arguments="$extra_benchmark_dotnet_arguments --wasmMainJS \$HELIX_CORRELATION_PAYLOAD/dotnet-wasm/runtime-test.js --wasmEngine /home/helixbot/.jsvu/v8 --customRuntimePack \$HELIX_CORRELATION_PAYLOAD/dotnet-wasm" +fi + +if [[ "$mono_dotnet" != "" ]]; then + using_mono=true + mono_dotnet_path=$payload_directory/dotnet-mono + mv $mono_dotnet $mono_dotnet_path +fi + +if [[ "$use_core_run" = true ]]; then + new_core_root=$payload_directory/Core_Root + mv $core_root_directory $new_core_root +fi + +if [[ "$use_baseline_core_run" = true ]]; then + new_baseline_core_root=$payload_directory/Baseline_Core_Root + mv $baseline_core_root_directory $new_baseline_core_root +fi + +ci=true + +_script_dir=$(pwd)/eng/common +. "$_script_dir/pipeline-logging-functions.sh" + +# Make sure all of our variables are available for future steps +Write-PipelineSetVariable -name "UseCoreRun" -value "$use_core_run" -is_multi_job_variable false +Write-PipelineSetVariable -name "UseBaselineCoreRun" -value "$use_baseline_core_run" -is_multi_job_variable false +Write-PipelineSetVariable -name "Architecture" -value "$architecture" -is_multi_job_variable false +Write-PipelineSetVariable -name "PayloadDirectory" -value "$payload_directory" -is_multi_job_variable false +Write-PipelineSetVariable -name "PerformanceDirectory" -value "$performance_directory" -is_multi_job_variable false +Write-PipelineSetVariable -name "WorkItemDirectory" -value "$workitem_directory" -is_multi_job_variable false +Write-PipelineSetVariable -name "Queue" -value "$queue" -is_multi_job_variable false +Write-PipelineSetVariable -name "SetupArguments" -value "$setup_arguments" -is_multi_job_variable false +Write-PipelineSetVariable -name "Python" -value "python3" -is_multi_job_variable false +Write-PipelineSetVariable -name "PerfLabArguments" -value "$perflab_arguments" -is_multi_job_variable false +Write-PipelineSetVariable -name "ExtraBenchmarkDotNetArguments" -value "$extra_benchmark_dotnet_arguments" -is_multi_job_variable false +Write-PipelineSetVariable -name "BDNCategories" -value "$run_categories" -is_multi_job_variable false +Write-PipelineSetVariable -name "TargetCsproj" -value "$csproj" -is_multi_job_variable false +Write-PipelineSetVariable -name "RunFromPerfRepo" -value "$run_from_perf_repo" -is_multi_job_variable false +Write-PipelineSetVariable -name "Creator" -value "$creator" -is_multi_job_variable false +Write-PipelineSetVariable -name "HelixSourcePrefix" -value "$helix_source_prefix" -is_multi_job_variable false +Write-PipelineSetVariable -name "Kind" -value "$kind" -is_multi_job_variable false +Write-PipelineSetVariable -name "_BuildConfig" -value "$architecture.$kind.$framework" -is_multi_job_variable false +Write-PipelineSetVariable -name "Compare" -value "$compare" -is_multi_job_variable false +Write-PipelineSetVariable -name "MonoDotnet" -value "$using_mono" -is_multi_job_variable false +Write-PipelineSetVariable -name "WasmDotnet" -value "$using_wasm" -is_multi_job_variable false diff --git a/eng/common/pipeline-logging-functions.sh b/eng/common/pipeline-logging-functions.sh index 6a0b2255e91..da5a7e6129e 100755 --- a/eng/common/pipeline-logging-functions.sh +++ b/eng/common/pipeline-logging-functions.sh @@ -6,7 +6,7 @@ function Write-PipelineTelemetryError { local function_args=() local message='' while [[ $# -gt 0 ]]; do - opt="$(echo "${1/#--/-}" | tr "[:upper:]" "[:lower:]")" + opt="$(echo "${1/#--/-}" | awk '{print tolower($0)}')" case "$opt" in -category|-c) telemetry_category=$2 @@ -48,7 +48,7 @@ function Write-PipelineTaskError { local force=false while [[ $# -gt 0 ]]; do - opt="$(echo "${1/#--/-}" | tr "[:upper:]" "[:lower:]")" + opt="$(echo "${1/#--/-}" | awk '{print tolower($0)}')" case "$opt" in -type|-t) message_type=$2 @@ -122,7 +122,7 @@ function Write-PipelineSetVariable { local is_multi_job_variable=true while [[ $# -gt 0 ]]; do - opt="$(echo "${1/#--/-}" | tr "[:upper:]" "[:lower:]")" + opt="$(echo "${1/#--/-}" | awk '{print tolower($0)}')" case "$opt" in -name|-n) name=$2 @@ -164,7 +164,7 @@ function Write-PipelinePrependPath { local prepend_path='' while [[ $# -gt 0 ]]; do - opt="$(echo "${1/#--/-}" | tr "[:upper:]" "[:lower:]")" + opt="$(echo "${1/#--/-}" | awk '{print tolower($0)}')" case "$opt" in -path|-p) prepend_path=$2 @@ -186,7 +186,7 @@ function Write-PipelineSetResult { local message='' while [[ $# -gt 0 ]]; do - opt="$(echo "${1/#--/-}" | tr "[:upper:]" "[:lower:]")" + opt="$(echo "${1/#--/-}" | awk '{print tolower($0)}')" case "$opt" in -result|-r) result=$2 diff --git a/eng/common/post-build/publish-using-darc.ps1 b/eng/common/post-build/publish-using-darc.ps1 index 2427ca6b6ae..31cf2767417 100644 --- a/eng/common/post-build/publish-using-darc.ps1 +++ b/eng/common/post-build/publish-using-darc.ps1 @@ -16,18 +16,18 @@ param( try { . $PSScriptRoot\post-build-utils.ps1 - - $darc = Get-Darc + # Hard coding darc version till the next arcade-services roll out, cos this version has required API changes for darc add-build-to-channel + $darc = Get-Darc "1.1.0-beta.20418.1" $optionalParams = [System.Collections.ArrayList]::new() if ("" -ne $ArtifactsPublishingAdditionalParameters) { - $optionalParams.Add("--artifact-publishing-parameters") | Out-Null + $optionalParams.Add("artifact-publishing-parameters") | Out-Null $optionalParams.Add($ArtifactsPublishingAdditionalParameters) | Out-Null } if ("" -ne $SymbolPublishingAdditionalParameters) { - $optionalParams.Add("--symbol-publishing-parameters") | Out-Null + $optionalParams.Add("symbol-publishing-parameters") | Out-Null $optionalParams.Add($SymbolPublishingAdditionalParameters) | Out-Null } @@ -60,7 +60,7 @@ try { --id $buildId ` --publishing-infra-version $PublishingInfraVersion ` --default-channels ` - --source-branch main ` + --source-branch master ` --azdev-pat $AzdoToken ` --bar-uri $MaestroApiEndPoint ` --password $MaestroToken ` diff --git a/eng/common/post-build/sourcelink-validation.ps1 b/eng/common/post-build/sourcelink-validation.ps1 index 85c89861719..1c46f7b6341 100644 --- a/eng/common/post-build/sourcelink-validation.ps1 +++ b/eng/common/post-build/sourcelink-validation.ps1 @@ -14,9 +14,7 @@ param( $global:RepoFiles = @{} # Maximum number of jobs to run in parallel -$MaxParallelJobs = 16 - -$MaxRetries = 5 +$MaxParallelJobs = 6 # Wait time between check for system load $SecondsBetweenLoadChecks = 10 @@ -31,10 +29,7 @@ $ValidatePackage = { # Ensure input file exist if (!(Test-Path $PackagePath)) { Write-Host "Input file does not exist: $PackagePath" - return [pscustomobject]@{ - result = 1 - packagePath = $PackagePath - } + return 1 } # Extensions for which we'll look for SourceLink information @@ -64,10 +59,7 @@ $ValidatePackage = { # We ignore resource DLLs if ($FileName.EndsWith('.resources.dll')) { - return [pscustomobject]@{ - result = 0 - packagePath = $PackagePath - } + return } [System.IO.Compression.ZipFileExtensions]::ExtractToFile($_, $TargetFile, $true) @@ -99,49 +91,36 @@ $ValidatePackage = { $Status = 200 $Cache = $using:RepoFiles - $totalRetries = 0 - - while ($totalRetries -lt $using:MaxRetries) { - if ( !($Cache.ContainsKey($FilePath)) ) { - try { - $Uri = $Link -as [System.URI] - - # Only GitHub links are valid - if ($Uri.AbsoluteURI -ne $null -and ($Uri.Host -match 'github' -or $Uri.Host -match 'githubusercontent')) { - $Status = (Invoke-WebRequest -Uri $Link -UseBasicParsing -Method HEAD -TimeoutSec 5).StatusCode - } - else { - # If it's not a github link, we want to break out of the loop and not retry. - $Status = 0 - $totalRetries = $using:MaxRetries - } + if ( !($Cache.ContainsKey($FilePath)) ) { + try { + $Uri = $Link -as [System.URI] + + # Only GitHub links are valid + if ($Uri.AbsoluteURI -ne $null -and ($Uri.Host -match 'github' -or $Uri.Host -match 'githubusercontent')) { + $Status = (Invoke-WebRequest -Uri $Link -UseBasicParsing -Method HEAD -TimeoutSec 5).StatusCode } - catch { - Write-Host $_ + else { $Status = 0 } } + catch { + write-host $_ + $Status = 0 + } + } - if ($Status -ne 200) { - $totalRetries++ - - if ($totalRetries -ge $using:MaxRetries) { - if ($NumFailedLinks -eq 0) { - if ($FailedFiles.Value -eq 0) { - Write-Host - } - - Write-Host "`tFile $RealPath has broken links:" - } - - Write-Host "`t`tFailed to retrieve $Link" - - $NumFailedLinks++ + if ($Status -ne 200) { + if ($NumFailedLinks -eq 0) { + if ($FailedFiles.Value -eq 0) { + Write-Host } + + Write-Host "`tFile $RealPath has broken links:" } - else { - break - } + + Write-Host "`t`tFailed to retrieve $Link" + + $NumFailedLinks++ } } } @@ -157,7 +136,7 @@ $ValidatePackage = { } } catch { - Write-Host $_ + } finally { $zip.Dispose() @@ -241,7 +220,6 @@ function ValidateSourceLinkLinks { # Process each NuGet package in parallel Get-ChildItem "$InputPath\*.symbols.nupkg" | ForEach-Object { - Write-Host "Starting $($_.FullName)" Start-Job -ScriptBlock $ValidatePackage -ArgumentList $_.FullName | Out-Null $NumJobs = @(Get-Job -State 'Running').Count @@ -289,10 +267,6 @@ function InstallSourcelinkCli { try { InstallSourcelinkCli - foreach ($Job in @(Get-Job)) { - Remove-Job -Id $Job.Id - } - ValidateSourceLinkLinks } catch { diff --git a/eng/common/post-build/symbols-validation.ps1 b/eng/common/post-build/symbols-validation.ps1 index a5af041ba77..99bf28cd5c1 100644 --- a/eng/common/post-build/symbols-validation.ps1 +++ b/eng/common/post-build/symbols-validation.ps1 @@ -1,14 +1,13 @@ param( - [Parameter(Mandatory = $true)][string] $InputPath, # Full path to directory where NuGet packages to be checked are stored - [Parameter(Mandatory = $true)][string] $ExtractPath, # Full path to directory where the packages will be extracted during validation - [Parameter(Mandatory = $true)][string] $DotnetSymbolVersion, # Version of dotnet symbol to use - [Parameter(Mandatory = $false)][switch] $CheckForWindowsPdbs, # If we should check for the existence of windows pdbs in addition to portable PDBs - [Parameter(Mandatory = $false)][switch] $ContinueOnError, # If we should keep checking symbols after an error - [Parameter(Mandatory = $false)][switch] $Clean # Clean extracted symbols directory after checking symbols + [Parameter(Mandatory=$true)][string] $InputPath, # Full path to directory where NuGet packages to be checked are stored + [Parameter(Mandatory=$true)][string] $ExtractPath, # Full path to directory where the packages will be extracted during validation + [Parameter(Mandatory=$true)][string] $DotnetSymbolVersion, # Version of dotnet symbol to use + [Parameter(Mandatory=$false)][switch] $ContinueOnError, # If we should keep checking symbols after an error + [Parameter(Mandatory=$false)][switch] $Clean # Clean extracted symbols directory after checking symbols ) # Maximum number of jobs to run in parallel -$MaxParallelJobs = 16 +$MaxParallelJobs = 6 # Max number of retries $MaxRetry = 5 @@ -20,15 +19,9 @@ $SecondsBetweenLoadChecks = 10 Set-Variable -Name "ERROR_BADEXTRACT" -Option Constant -Value -1 Set-Variable -Name "ERROR_FILEDOESNOTEXIST" -Option Constant -Value -2 -$WindowsPdbVerificationParam = "" -if ($CheckForWindowsPdbs) { - $WindowsPdbVerificationParam = "--windows-pdbs" -} - $CountMissingSymbols = { param( - [string] $PackagePath, # Path to a NuGet package - [string] $WindowsPdbVerificationParam # If we should check for the existence of windows pdbs in addition to portable PDBs + [string] $PackagePath # Path to a NuGet package ) . $using:PSScriptRoot\..\tools.ps1 @@ -41,7 +34,7 @@ $CountMissingSymbols = { if (!(Test-Path $PackagePath)) { Write-PipelineTaskError "Input file does not exist: $PackagePath" return [pscustomobject]@{ - result = $using:ERROR_FILEDOESNOTEXIST + result = $using:ERROR_FILEDOESNOTEXIST packagePath = $PackagePath } } @@ -64,25 +57,24 @@ $CountMissingSymbols = { Write-Host "Something went wrong extracting $PackagePath" Write-Host $_ return [pscustomobject]@{ - result = $using:ERROR_BADEXTRACT + result = $using:ERROR_BADEXTRACT packagePath = $PackagePath } } Get-ChildItem -Recurse $ExtractPath | - Where-Object { $RelevantExtensions -contains $_.Extension } | - ForEach-Object { - $FileName = $_.FullName - if ($FileName -Match '\\ref\\') { - Write-Host "`t Ignoring reference assembly file " $FileName - return - } + Where-Object {$RelevantExtensions -contains $_.Extension} | + ForEach-Object { + $FileName = $_.FullName + if ($FileName -Match '\\ref\\') { + Write-Host "`t Ignoring reference assembly file " $FileName + return + } - $FirstMatchingSymbolDescriptionOrDefault = { + $FirstMatchingSymbolDescriptionOrDefault = { param( - [string] $FullPath, # Full path to the module that has to be checked - [string] $TargetServerParam, # Parameter to pass to `Symbol Tool` indicating the server to lookup for symbols - [string] $WindowsPdbVerificationParam, # Parameter to pass to potential check for windows-pdbs. + [string] $FullPath, # Full path to the module that has to be checked + [string] $TargetServerParam, # Parameter to pass to `Symbol Tool` indicating the server to lookup for symbols [string] $SymbolsPath ) @@ -107,16 +99,15 @@ $CountMissingSymbols = { # DWARF file for a .dylib $DylibDwarf = $SymbolPath.Replace($Extension, '.dylib.dwarf') - + $dotnetSymbolExe = "$env:USERPROFILE\.dotnet\tools" $dotnetSymbolExe = Resolve-Path "$dotnetSymbolExe\dotnet-symbol.exe" $totalRetries = 0 while ($totalRetries -lt $using:MaxRetry) { - # Save the output and get diagnostic output - $output = & $dotnetSymbolExe --symbols --modules $WindowsPdbVerificationParam $TargetServerParam $FullPath -o $SymbolsPath --diagnostics | Out-String + $output = & $dotnetSymbolExe --symbols --modules --windows-pdbs $TargetServerParam $FullPath -o $SymbolsPath --diagnostics | Out-String if (Test-Path $PdbPath) { return 'PDB' @@ -133,50 +124,42 @@ $CountMissingSymbols = { elseif (Test-Path $SymbolPath) { return 'Module' } - else - { + elseif ($output.Contains("503 Service Unavailable")) { + # If we got a 503 error, we should retry. $totalRetries++ } + else { + return $null + } } return $null } - $FileGuid = New-Guid - $ExpandedSymbolsPath = Join-Path -Path $SymbolsPath -ChildPath $FileGuid - - $SymbolsOnMSDL = & $FirstMatchingSymbolDescriptionOrDefault ` - -FullPath $FileName ` - -TargetServerParam '--microsoft-symbol-server' ` - -SymbolsPath "$ExpandedSymbolsPath-msdl" ` - -WindowsPdbVerificationParam $WindowsPdbVerificationParam - $SymbolsOnSymWeb = & $FirstMatchingSymbolDescriptionOrDefault ` - -FullPath $FileName ` - -TargetServerParam '--internal-server' ` - -SymbolsPath "$ExpandedSymbolsPath-symweb" ` - -WindowsPdbVerificationParam $WindowsPdbVerificationParam - - Write-Host -NoNewLine "`t Checking file " $FileName "... " - - if ($SymbolsOnMSDL -ne $null -and $SymbolsOnSymWeb -ne $null) { - Write-Host "Symbols found on MSDL ($SymbolsOnMSDL) and SymWeb ($SymbolsOnSymWeb)" - } - else { - $MissingSymbols++ + $SymbolsOnMSDL = & $FirstMatchingSymbolDescriptionOrDefault $FileName '--microsoft-symbol-server' $SymbolsPath + $SymbolsOnSymWeb = & $FirstMatchingSymbolDescriptionOrDefault $FileName '--internal-server' $SymbolsPath - if ($SymbolsOnMSDL -eq $null -and $SymbolsOnSymWeb -eq $null) { - Write-Host 'No symbols found on MSDL or SymWeb!' + Write-Host -NoNewLine "`t Checking file " $FileName "... " + + if ($SymbolsOnMSDL -ne $null -and $SymbolsOnSymWeb -ne $null) { + Write-Host "Symbols found on MSDL ($SymbolsOnMSDL) and SymWeb ($SymbolsOnSymWeb)" } else { - if ($SymbolsOnMSDL -eq $null) { - Write-Host 'No symbols found on MSDL!' + $MissingSymbols++ + + if ($SymbolsOnMSDL -eq $null -and $SymbolsOnSymWeb -eq $null) { + Write-Host 'No symbols found on MSDL or SymWeb!' } else { - Write-Host 'No symbols found on SymWeb!' + if ($SymbolsOnMSDL -eq $null) { + Write-Host 'No symbols found on MSDL!' + } + else { + Write-Host 'No symbols found on SymWeb!' + } } } } - } if ($using:Clean) { Remove-Item $ExtractPath -Recurse -Force @@ -185,16 +168,16 @@ $CountMissingSymbols = { Pop-Location return [pscustomobject]@{ - result = $MissingSymbols - packagePath = $PackagePath - } + result = $MissingSymbols + packagePath = $PackagePath + } } function CheckJobResult( - $result, - $packagePath, - [ref]$DupedSymbols, - [ref]$TotalFailures) { + $result, + $packagePath, + [ref]$DupedSymbols, + [ref]$TotalFailures) { if ($result -eq $ERROR_BADEXTRACT) { Write-PipelineTelemetryError -Category 'CheckSymbols' -Message "$packagePath has duplicated symbol files" $DupedSymbols.Value++ @@ -217,7 +200,6 @@ function CheckSymbolsAvailable { Remove-Item $ExtractPath -Force -Recurse -ErrorAction SilentlyContinue } - $TotalPackages = 0 $TotalFailures = 0 $DupedSymbols = 0 @@ -240,9 +222,7 @@ function CheckSymbolsAvailable { return } - $TotalPackages++ - - Start-Job -ScriptBlock $CountMissingSymbols -ArgumentList @($FullName,$WindowsPdbVerificationParam) | Out-Null + Start-Job -ScriptBlock $CountMissingSymbols -ArgumentList $FullName | Out-Null $NumJobs = @(Get-Job -State 'Running').Count @@ -267,11 +247,11 @@ function CheckSymbolsAvailable { if ($TotalFailures -gt 0 -or $DupedSymbols -gt 0) { if ($TotalFailures -gt 0) { - Write-PipelineTelemetryError -Category 'CheckSymbols' -Message "Symbols missing for $TotalFailures/$TotalPackages packages" + Write-PipelineTelemetryError -Category 'CheckSymbols' -Message "Symbols missing for $TotalFailures packages" } if ($DupedSymbols -gt 0) { - Write-PipelineTelemetryError -Category 'CheckSymbols' -Message "$DupedSymbols/$TotalPackages packages had duplicated symbol files and could not be extracted" + Write-PipelineTelemetryError -Category 'CheckSymbols' -Message "$DupedSymbols packages had duplicated symbol files" } ExitWithExitCode 1 diff --git a/eng/common/sdk-task.ps1 b/eng/common/sdk-task.ps1 index b1bca63ab1d..f55c43c6f47 100644 --- a/eng/common/sdk-task.ps1 +++ b/eng/common/sdk-task.ps1 @@ -34,7 +34,7 @@ function Print-Usage() { function Build([string]$target) { $logSuffix = if ($target -eq 'Execute') { '' } else { ".$target" } $log = Join-Path $LogDir "$task$logSuffix.binlog" - $outputPath = Join-Path $ToolsetDir "$task\" + $outputPath = Join-Path $ToolsetDir "$task\\" MSBuild $taskProject ` /bl:$log ` @@ -53,7 +53,7 @@ try { } if ($task -eq "") { - Write-PipelineTelemetryError -Category 'Build' -Message "Missing required parameter '-task '" + Write-PipelineTelemetryError -Category 'Build' -Message "Missing required parameter '-task '" -ForegroundColor Red Print-Usage ExitWithExitCode 1 } @@ -64,7 +64,7 @@ try { $GlobalJson.tools | Add-Member -Name "vs" -Value (ConvertFrom-Json "{ `"version`": `"16.5`" }") -MemberType NoteProperty } if( -not ($GlobalJson.tools.PSObject.Properties.Name -match "xcopy-msbuild" )) { - $GlobalJson.tools | Add-Member -Name "xcopy-msbuild" -Value "16.10.0-preview2" -MemberType NoteProperty + $GlobalJson.tools | Add-Member -Name "xcopy-msbuild" -Value "16.8.0-preview3" -MemberType NoteProperty } if ($GlobalJson.tools."xcopy-msbuild".Trim() -ine "none") { $xcopyMSBuildToolsFolder = InitializeXCopyMSBuild $GlobalJson.tools."xcopy-msbuild" -install $true @@ -78,7 +78,7 @@ try { $taskProject = GetSdkTaskProject $task if (!(Test-Path $taskProject)) { - Write-PipelineTelemetryError -Category 'Build' -Message "Unknown task: $task" + Write-PipelineTelemetryError -Category 'Build' -Message "Unknown task: $task" -ForegroundColor Red ExitWithExitCode 1 } diff --git a/eng/common/sdl/execute-all-sdl-tools.ps1 b/eng/common/sdl/execute-all-sdl-tools.ps1 index 2881a56083c..b681d797cda 100644 --- a/eng/common/sdl/execute-all-sdl-tools.ps1 +++ b/eng/common/sdl/execute-all-sdl-tools.ps1 @@ -32,7 +32,7 @@ try { $ErrorActionPreference = 'Stop' Set-StrictMode -Version 2.0 $disableConfigureToolsetImport = $true - $global:LASTEXITCODE = 0 + $LASTEXITCODE = 0 # `tools.ps1` checks $ci to perform some actions. Since the SDL # scripts don't necessarily execute in the same agent that run the @@ -87,6 +87,10 @@ try { & $(Join-Path $PSScriptRoot 'run-sdl.ps1') -GuardianCliLocation $guardianCliLocation -WorkingDirectory $workingDirectory -TargetDirectory $SourceDirectory -GdnFolder $gdnFolder -ToolsList $SourceToolsList -AzureDevOpsAccessToken $AzureDevOpsAccessToken -UpdateBaseline $UpdateBaseline -GuardianLoggerLevel $GuardianLoggerLevel -CrScanAdditionalRunConfigParams $CrScanAdditionalRunConfigParams -PoliCheckAdditionalRunConfigParams $PoliCheckAdditionalRunConfigParams } + if ($UpdateBaseline) { + & (Join-Path $PSScriptRoot 'push-gdn.ps1') -Repository $RepoName -BranchName $BranchName -GdnFolder $GdnFolder -AzureDevOpsAccessToken $AzureDevOpsAccessToken -PushReason 'Update baseline' + } + if ($TsaPublish) { if ($TsaBranchName -and $BuildNumber) { if (-not $TsaRepositoryName) { diff --git a/eng/common/sdl/init-sdl.ps1 b/eng/common/sdl/init-sdl.ps1 index 3ac1d92b370..a68bf0b88ea 100644 --- a/eng/common/sdl/init-sdl.ps1 +++ b/eng/common/sdl/init-sdl.ps1 @@ -10,7 +10,7 @@ Param( $ErrorActionPreference = 'Stop' Set-StrictMode -Version 2.0 $disableConfigureToolsetImport = $true -$global:LASTEXITCODE = 0 +$LASTEXITCODE = 0 # `tools.ps1` checks $ci to perform some actions. Since the SDL # scripts don't necessarily execute in the same agent that run the @@ -29,7 +29,18 @@ $zipFile = "$WorkingDirectory/gdn.zip" Add-Type -AssemblyName System.IO.Compression.FileSystem $gdnFolder = (Join-Path $WorkingDirectory '.gdn') - +try { + # We try to download the zip; if the request fails (e.g. the file doesn't exist), we catch it and init guardian instead + Write-Host 'Downloading gdn folder from internal config repostiory...' + Invoke-WebRequest -Headers @{ "Accept"="application/zip"; "Authorization"="Basic $encodedPat" } -Uri $uri -OutFile $zipFile + if (Test-Path $gdnFolder) { + # Remove the gdn folder if it exists (it shouldn't unless there's too much caching; this is just in case) + Remove-Item -Force -Recurse $gdnFolder + } + [System.IO.Compression.ZipFile]::ExtractToDirectory($zipFile, $WorkingDirectory) + Write-Host $gdnFolder + ExitWithExitCode 0 +} catch [System.Net.WebException] { } # Catch and ignore webexception try { # if the folder does not exist, we'll do a guardian init and push it to the remote repository Write-Host 'Initializing Guardian...' @@ -46,6 +57,7 @@ try { Write-PipelineTelemetryError -Force -Category 'Build' -Message "Guardian baseline failed with exit code $LASTEXITCODE." ExitWithExitCode $LASTEXITCODE } + & $(Join-Path $PSScriptRoot 'push-gdn.ps1') -Repository $Repository -BranchName $BranchName -GdnFolder $gdnFolder -AzureDevOpsAccessToken $AzureDevOpsAccessToken -PushReason 'Initialize gdn folder' ExitWithExitCode 0 } catch { diff --git a/eng/common/sdl/packages.config b/eng/common/sdl/packages.config index 3bd8b29ebd7..968b39bef5f 100644 --- a/eng/common/sdl/packages.config +++ b/eng/common/sdl/packages.config @@ -1,4 +1,4 @@ - + diff --git a/eng/common/sdl/push-gdn.ps1 b/eng/common/sdl/push-gdn.ps1 new file mode 100644 index 00000000000..d8fd2d82a68 --- /dev/null +++ b/eng/common/sdl/push-gdn.ps1 @@ -0,0 +1,69 @@ +Param( + [string] $Repository, + [string] $BranchName='master', + [string] $GdnFolder, + [string] $AzureDevOpsAccessToken, + [string] $PushReason +) + +$ErrorActionPreference = 'Stop' +Set-StrictMode -Version 2.0 +$disableConfigureToolsetImport = $true +$LASTEXITCODE = 0 + +try { + # `tools.ps1` checks $ci to perform some actions. Since the SDL + # scripts don't necessarily execute in the same agent that run the + # build.ps1/sh script this variable isn't automatically set. + $ci = $true + . $PSScriptRoot\..\tools.ps1 + + # We create the temp directory where we'll store the sdl-config repository + $sdlDir = Join-Path $env:TEMP 'sdl' + if (Test-Path $sdlDir) { + Remove-Item -Force -Recurse $sdlDir + } + + Write-Host "git clone https://dnceng:`$AzureDevOpsAccessToken@dev.azure.com/dnceng/internal/_git/sdl-tool-cfg $sdlDir" + git clone https://dnceng:$AzureDevOpsAccessToken@dev.azure.com/dnceng/internal/_git/sdl-tool-cfg $sdlDir + if ($LASTEXITCODE -ne 0) { + Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Git clone failed with exit code $LASTEXITCODE." + ExitWithExitCode $LASTEXITCODE + } + # We copy the .gdn folder from our local run into the git repository so it can be committed + $sdlRepositoryFolder = Join-Path (Join-Path (Join-Path $sdlDir $Repository) $BranchName) '.gdn' + if (Get-Command Robocopy) { + Robocopy /S $GdnFolder $sdlRepositoryFolder + } else { + rsync -r $GdnFolder $sdlRepositoryFolder + } + # cd to the sdl-config directory so we can run git there + Push-Location $sdlDir + # git add . --> git commit --> git push + Write-Host 'git add .' + git add . + if ($LASTEXITCODE -ne 0) { + Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Git add failed with exit code $LASTEXITCODE." + ExitWithExitCode $LASTEXITCODE + } + Write-Host "git -c user.email=`"dn-bot@microsoft.com`" -c user.name=`"Dotnet Bot`" commit -m `"$PushReason for $Repository/$BranchName`"" + git -c user.email="dn-bot@microsoft.com" -c user.name="Dotnet Bot" commit -m "$PushReason for $Repository/$BranchName" + if ($LASTEXITCODE -ne 0) { + Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Git commit failed with exit code $LASTEXITCODE." + ExitWithExitCode $LASTEXITCODE + } + Write-Host 'git push' + git push + if ($LASTEXITCODE -ne 0) { + Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Git push failed with exit code $LASTEXITCODE." + ExitWithExitCode $LASTEXITCODE + } + + # Return to the original directory + Pop-Location +} +catch { + Write-Host $_.ScriptStackTrace + Write-PipelineTelemetryError -Category 'Sdl' -Message $_ + ExitWithExitCode 1 +} diff --git a/eng/common/sdl/run-sdl.ps1 b/eng/common/sdl/run-sdl.ps1 index 3d9c87aba6a..fe95ab35aa5 100644 --- a/eng/common/sdl/run-sdl.ps1 +++ b/eng/common/sdl/run-sdl.ps1 @@ -13,7 +13,7 @@ Param( $ErrorActionPreference = 'Stop' Set-StrictMode -Version 2.0 $disableConfigureToolsetImport = $true -$global:LASTEXITCODE = 0 +$LASTEXITCODE = 0 try { # `tools.ps1` checks $ci to perform some actions. Since the SDL diff --git a/eng/common/templates/job/execute-sdl.yml b/eng/common/templates/job/execute-sdl.yml index 4a32181fd8f..c64c4f5686c 100644 --- a/eng/common/templates/job/execute-sdl.yml +++ b/eng/common/templates/job/execute-sdl.yml @@ -45,7 +45,6 @@ jobs: buildId: $(AzDOBuildId) artifactName: ${{ artifactName }} downloadPath: $(Build.ArtifactStagingDirectory)\artifacts - checkDownloadedFiles: true - ${{ if eq(parameters.artifactNames, '') }}: - task: DownloadBuildArtifacts@0 displayName: Download Build Artifacts @@ -58,7 +57,6 @@ jobs: downloadType: specific files itemPattern: "**" downloadPath: $(Build.ArtifactStagingDirectory)\artifacts - checkDownloadedFiles: true - powershell: eng/common/sdl/extract-artifact-packages.ps1 -InputPath $(Build.ArtifactStagingDirectory)\artifacts\BlobArtifacts -ExtractPath $(Build.ArtifactStagingDirectory)\artifacts\BlobArtifacts @@ -85,7 +83,7 @@ jobs: continueOnError: ${{ parameters.sdlContinueOnError }} - ${{ if eq(parameters.overrideParameters, '') }}: - powershell: eng/common/sdl/execute-all-sdl-tools.ps1 - -GuardianPackageName Microsoft.Guardian.Cli.0.53.3 + -GuardianPackageName Microsoft.Guardian.Cli.win10-x64.0.20.1 -NugetPackageDirectory $(Build.SourcesDirectory)\.packages -AzureDevOpsAccessToken $(dn-bot-dotnet-build-rw-code-rw) ${{ parameters.additionalParameters }} diff --git a/eng/common/templates/job/onelocbuild.yml b/eng/common/templates/job/onelocbuild.yml deleted file mode 100644 index e8bc77d2ebb..00000000000 --- a/eng/common/templates/job/onelocbuild.yml +++ /dev/null @@ -1,93 +0,0 @@ -parameters: - # Optional: dependencies of the job - dependsOn: '' - - # Optional: A defined YAML pool - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#pool - pool: - vmImage: vs2017-win2016 - - CeapexPat: $(dn-bot-ceapex-package-r) # PAT for the loc AzDO instance https://dev.azure.com/ceapex - GithubPat: $(BotAccount-dotnet-bot-repo-PAT) - - SourcesDirectory: $(Build.SourcesDirectory) - CreatePr: true - AutoCompletePr: false - UseLfLineEndings: true - UseCheckedInLocProjectJson: false - LanguageSet: VS_Main_Languages - LclSource: lclFilesInRepo - LclPackageId: '' - RepoType: gitHub - GitHubOrg: dotnet - MirrorRepo: '' - MirrorBranch: main - condition: '' - -jobs: -- job: OneLocBuild - - dependsOn: ${{ parameters.dependsOn }} - - displayName: OneLocBuild - - pool: ${{ parameters.pool }} - - variables: - - group: OneLocBuildVariables # Contains the CeapexPat and GithubPat - - name: _GenerateLocProjectArguments - value: -SourcesDirectory ${{ parameters.SourcesDirectory }} - -LanguageSet "${{ parameters.LanguageSet }}" - -CreateNeutralXlfs - - ${{ if eq(parameters.UseCheckedInLocProjectJson, 'true') }}: - - name: _GenerateLocProjectArguments - value: ${{ variables._GenerateLocProjectArguments }} -UseCheckedInLocProjectJson - - - steps: - - task: Powershell@2 - inputs: - filePath: $(Build.SourcesDirectory)/eng/common/generate-locproject.ps1 - arguments: $(_GenerateLocProjectArguments) - displayName: Generate LocProject.json - condition: ${{ parameters.condition }} - - - task: OneLocBuild@2 - displayName: OneLocBuild - env: - SYSTEM_ACCESSTOKEN: $(System.AccessToken) - inputs: - locProj: eng/Localize/LocProject.json - outDir: $(Build.ArtifactStagingDirectory) - lclSource: ${{ parameters.LclSource }} - lclPackageId: ${{ parameters.LclPackageId }} - isCreatePrSelected: ${{ parameters.CreatePr }} - ${{ if eq(parameters.CreatePr, true) }}: - isAutoCompletePrSelected: ${{ parameters.AutoCompletePr }} - isUseLfLineEndingsSelected: ${{ parameters.UseLfLineEndings }} - packageSourceAuth: patAuth - patVariable: ${{ parameters.CeapexPat }} - ${{ if eq(parameters.RepoType, 'gitHub') }}: - repoType: ${{ parameters.RepoType }} - gitHubPatVariable: "${{ parameters.GithubPat }}" - ${{ if ne(parameters.MirrorRepo, '') }}: - isMirrorRepoSelected: true - gitHubOrganization: ${{ parameters.GitHubOrg }} - mirrorRepo: ${{ parameters.MirrorRepo }} - mirrorBranch: ${{ parameters.MirrorBranch }} - condition: ${{ parameters.condition }} - - - task: PublishBuildArtifacts@1 - displayName: Publish Localization Files - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/loc' - PublishLocation: Container - ArtifactName: Loc - condition: ${{ parameters.condition }} - - - task: PublishBuildArtifacts@1 - displayName: Publish LocProject.json - inputs: - PathtoPublish: '$(Build.SourcesDirectory)/eng/Localize/' - PublishLocation: Container - ArtifactName: Loc - condition: ${{ parameters.condition }} \ No newline at end of file diff --git a/eng/common/templates/job/performance.yml b/eng/common/templates/job/performance.yml new file mode 100644 index 00000000000..f877fd7a898 --- /dev/null +++ b/eng/common/templates/job/performance.yml @@ -0,0 +1,95 @@ +parameters: + steps: [] # optional -- any additional steps that need to happen before pulling down the performance repo and sending the performance benchmarks to helix (ie building your repo) + variables: [] # optional -- list of additional variables to send to the template + jobName: '' # required -- job name + displayName: '' # optional -- display name for the job. Will use jobName if not passed + pool: '' # required -- name of the Build pool + container: '' # required -- name of the container + osGroup: '' # required -- operating system for the job + extraSetupParameters: '' # optional -- extra arguments to pass to the setup script + frameworks: ['netcoreapp3.0'] # optional -- list of frameworks to run against + continueOnError: 'false' # optional -- determines whether to continue the build if the step errors + dependsOn: '' # optional -- dependencies of the job + timeoutInMinutes: 320 # optional -- timeout for the job + enableTelemetry: false # optional -- enable for telemetry + +jobs: +- template: ../jobs/jobs.yml + parameters: + dependsOn: ${{ parameters.dependsOn }} + enableTelemetry: ${{ parameters.enableTelemetry }} + enablePublishBuildArtifacts: true + continueOnError: ${{ parameters.continueOnError }} + + jobs: + - job: '${{ parameters.jobName }}' + + ${{ if ne(parameters.displayName, '') }}: + displayName: '${{ parameters.displayName }}' + ${{ if eq(parameters.displayName, '') }}: + displayName: '${{ parameters.jobName }}' + + timeoutInMinutes: ${{ parameters.timeoutInMinutes }} + + variables: + + - ${{ each variable in parameters.variables }}: + - ${{ if ne(variable.name, '') }}: + - name: ${{ variable.name }} + value: ${{ variable.value }} + - ${{ if ne(variable.group, '') }}: + - group: ${{ variable.group }} + + - IsInternal: '' + - HelixApiAccessToken: '' + - HelixPreCommand: '' + + - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - ${{ if eq( parameters.osGroup, 'Windows_NT') }}: + - HelixPreCommand: 'set "PERFLAB_UPLOAD_TOKEN=$(PerfCommandUploadToken)"' + - IsInternal: -Internal + - ${{ if ne(parameters.osGroup, 'Windows_NT') }}: + - HelixPreCommand: 'export PERFLAB_UPLOAD_TOKEN="$(PerfCommandUploadTokenLinux)"' + - IsInternal: --internal + + - group: DotNet-HelixApi-Access + - group: dotnet-benchview + + workspace: + clean: all + pool: + ${{ parameters.pool }} + container: ${{ parameters.container }} + strategy: + matrix: + ${{ each framework in parameters.frameworks }}: + ${{ framework }}: + _Framework: ${{ framework }} + steps: + - checkout: self + clean: true + # Run all of the steps to setup repo + - ${{ each step in parameters.steps }}: + - ${{ step }} + - powershell: $(Build.SourcesDirectory)\eng\common\performance\performance-setup.ps1 $(IsInternal) -Framework $(_Framework) ${{ parameters.extraSetupParameters }} + displayName: Performance Setup (Windows) + condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT')) + continueOnError: ${{ parameters.continueOnError }} + - script: $(Build.SourcesDirectory)/eng/common/performance/performance-setup.sh $(IsInternal) --framework $(_Framework) ${{ parameters.extraSetupParameters }} + displayName: Performance Setup (Unix) + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) + continueOnError: ${{ parameters.continueOnError }} + - script: $(Python) $(PerformanceDirectory)/scripts/ci_setup.py $(SetupArguments) + displayName: Run ci setup script + # Run perf testing in helix + - template: /eng/common/templates/steps/perf-send-to-helix.yml + parameters: + HelixSource: '$(HelixSourcePrefix)/$(Build.Repository.Name)/$(Build.SourceBranch)' # sources must start with pr/, official/, prodcon/, or agent/ + HelixType: 'test/performance/$(Kind)/$(_Framework)/$(Architecture)' + HelixAccessToken: $(HelixApiAccessToken) + HelixTargetQueues: $(Queue) + HelixPreCommands: $(HelixPreCommand) + Creator: $(Creator) + WorkItemTimeout: 4:00 # 4 hours + WorkItemDirectory: '$(WorkItemDirectory)' # WorkItemDirectory can not be empty, so we send it some docs to keep it happy + CorrelationPayloadDirectory: '$(PayloadDirectory)' # it gets checked out to a folder with shorter path than WorkItemDirectory so we can avoid file name too long exceptions \ No newline at end of file diff --git a/eng/common/templates/job/publish-build-assets.yml b/eng/common/templates/job/publish-build-assets.yml index 3b9e2524ff3..d0c3cc2b3ba 100644 --- a/eng/common/templates/job/publish-build-assets.yml +++ b/eng/common/templates/job/publish-build-assets.yml @@ -37,7 +37,6 @@ jobs: - name: _BuildConfig value: ${{ parameters.configuration }} - group: Publish-Build-Assets - - group: AzureDevOps-Artifact-Feeds-Pats # Skip component governance and codesign validation for SDL. These jobs # create no content. - name: skipComponentGovernanceDetection @@ -52,19 +51,12 @@ jobs: inputs: artifactName: AssetManifests downloadPath: '$(Build.StagingDirectory)/Download' - checkDownloadedFiles: true condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - task: NuGetAuthenticate@0 - - task: PowerShell@2 - displayName: Enable cross-org NuGet feed authentication - inputs: - filePath: $(Build.SourcesDirectory)/eng/common/enable-cross-org-publishing.ps1 - arguments: -token $(dn-bot-all-orgs-artifact-feeds-rw) - - task: PowerShell@2 displayName: Publish Build Assets inputs: diff --git a/eng/common/templates/job/source-build.yml b/eng/common/templates/job/source-build.yml index 5023d36dcb3..9332f5ecc38 100644 --- a/eng/common/templates/job/source-build.yml +++ b/eng/common/templates/job/source-build.yml @@ -15,9 +15,6 @@ parameters: # nonPortable: false # Enables non-portable mode. This means a more specific RID (e.g. fedora.32-x64 rather than # linux-x64), and compiling against distro-provided packages rather than portable ones. - # skipPublishValidation: false - # Disables publishing validation. By default, a check is performed to ensure no packages are - # published by source-build. # container: '' # A container to use. Runs in docker. # pool: {} @@ -31,11 +28,6 @@ parameters: # container and pool. platform: {} - # The default VM host AzDO pool. This should be capable of running Docker containers: almost all - # source-build builds run in Docker, including the default managed platform. - defaultContainerHostPool: - vmImage: ubuntu-20.04 - jobs: - job: ${{ parameters.jobNamePrefix }}_${{ parameters.platform.name }} displayName: Source-Build (${{ parameters.platform.name }}) @@ -45,9 +37,6 @@ jobs: ${{ if ne(parameters.platform.container, '') }}: container: ${{ parameters.platform.container }} - - ${{ if eq(parameters.platform.pool, '') }}: - pool: ${{ parameters.defaultContainerHostPool }} ${{ if ne(parameters.platform.pool, '') }}: pool: ${{ parameters.platform.pool }} diff --git a/eng/common/templates/job/source-index-stage1.yml b/eng/common/templates/job/source-index-stage1.yml deleted file mode 100644 index b58d42364b9..00000000000 --- a/eng/common/templates/job/source-index-stage1.yml +++ /dev/null @@ -1,62 +0,0 @@ -parameters: - runAsPublic: false - sourceIndexPackageVersion: 1.0.1-20210614.1 - sourceIndexPackageSource: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json - sourceIndexBuildCommand: powershell -NoLogo -NoProfile -ExecutionPolicy Bypass -Command "eng/common/build.ps1 -restore -build -binarylog -ci" - preSteps: [] - binlogPath: artifacts/log/Debug/Build.binlog - pool: - vmImage: vs2017-win2016 - condition: '' - dependsOn: '' - -jobs: -- job: SourceIndexStage1 - dependsOn: ${{ parameters.dependsOn }} - condition: ${{ parameters.condition }} - variables: - - name: SourceIndexPackageVersion - value: ${{ parameters.sourceIndexPackageVersion }} - - name: SourceIndexPackageSource - value: ${{ parameters.sourceIndexPackageSource }} - - name: BinlogPath - value: ${{ parameters.binlogPath }} - - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - group: source-dot-net stage1 variables - - pool: ${{ parameters.pool }} - steps: - - ${{ each preStep in parameters.preSteps }}: - - ${{ preStep }} - - - task: UseDotNet@2 - displayName: Use .NET Core sdk 3.1 - inputs: - packageType: sdk - version: 3.1.x - - - task: UseDotNet@2 - displayName: Use .NET Core sdk - inputs: - useGlobalJson: true - - - script: | - dotnet tool install BinLogToSln --version $(SourceIndexPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path .source-index/tools - dotnet tool install UploadIndexStage1 --version $(SourceIndexPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path .source-index/tools - echo ##vso[task.prependpath]$(Build.SourcesDirectory)/.source-index/tools - displayName: Download Tools - - - script: ${{ parameters.sourceIndexBuildCommand }} - displayName: Build Repository - - - script: BinLogToSln -i $(BinlogPath) -r $(Build.SourcesDirectory) -n $(Build.Repository.Name) -o .source-index/stage1output - displayName: Process Binlog into indexable sln - env: - DOTNET_ROLL_FORWARD_ON_NO_CANDIDATE_FX: 2 - - - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - script: UploadIndexStage1 -i .source-index/stage1output -n $(Build.Repository.Name) - displayName: Upload stage1 artifacts to source index - env: - BLOB_CONTAINER_URL: $(source-dot-net-stage1-blob-container-url) - DOTNET_ROLL_FORWARD_ON_NO_CANDIDATE_FX: 2 diff --git a/eng/common/templates/jobs/jobs.yml b/eng/common/templates/jobs/jobs.yml index a1f8fce96ca..08845950f44 100644 --- a/eng/common/templates/jobs/jobs.yml +++ b/eng/common/templates/jobs/jobs.yml @@ -7,14 +7,7 @@ parameters: # Optional: Enable publishing using release pipelines enablePublishUsingPipelines: false - - # Optional: Enable running the source-build jobs to build repo from source - enableSourceBuild: false - - # Optional: Parameters for source-build template. - # See /eng/common/templates/jobs/source-build.yml for options - sourceBuildParameters: [] - + graphFileGeneration: # Optional: Enable generating the graph files at the end of the build enabled: false @@ -31,8 +24,12 @@ parameters: # if 'true', the build won't run any of the internal only steps, even if it is running in non-public projects. runAsPublic: false - enableSourceIndex: false - sourceIndexParams: {} + # Optional: Enable running the source-build jobs to build repo from source + runSourceBuild: false + + # Optional: Parameters for source-build template. + # See /eng/common/templates/jobs/source-build.yml for options + sourceBuildParameters: [] # Internal resources (telemetry, microbuild) can only be accessed from non-public projects, # and some (Microbuild) should only be applied to non-PR cases for internal builds. @@ -53,22 +50,14 @@ jobs: name: ${{ job.job }} -- ${{ if eq(parameters.enableSourceBuild, true) }}: +- ${{ if eq(parameters.runSourceBuild, true) }}: - template: /eng/common/templates/jobs/source-build.yml parameters: allCompletedJobId: Source_Build_Complete ${{ each parameter in parameters.sourceBuildParameters }}: ${{ parameter.key }}: ${{ parameter.value }} -- ${{ if eq(parameters.enableSourceIndex, 'true') }}: - - template: ../job/source-index-stage1.yml - parameters: - runAsPublic: ${{ parameters.runAsPublic }} - ${{ each parameter in parameters.sourceIndexParams }}: - ${{ parameter.key }}: ${{ parameter.value }} - - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - ${{ if or(eq(parameters.enablePublishBuildAssets, true), eq(parameters.artifacts.publish.manifests, 'true'), ne(parameters.artifacts.publish.manifests, '')) }}: - template: ../job/publish-build-assets.yml parameters: @@ -80,7 +69,7 @@ jobs: - ${{ if eq(parameters.publishBuildAssetsDependsOn, '') }}: - ${{ each job in parameters.jobs }}: - ${{ job.job }} - - ${{ if eq(parameters.enableSourceBuild, true) }}: + - ${{ if eq(parameters.runSourceBuild, true) }}: - Source_Build_Complete pool: vmImage: vs2017-win2016 diff --git a/eng/common/templates/jobs/source-build.yml b/eng/common/templates/jobs/source-build.yml index 00aa98eb3bf..f463011e793 100644 --- a/eng/common/templates/jobs/source-build.yml +++ b/eng/common/templates/jobs/source-build.yml @@ -11,14 +11,16 @@ parameters: # See /eng/common/templates/job/source-build.yml jobNamePrefix: 'Source_Build' - # This is the default platform provided by Arcade, intended for use by a managed-only repo. + # If changed to true, causes this template to include the default platform for a managed-only + # repo. The exact Docker image used for this build will be provided by Arcade. This has some risk, + # but since the repo is supposed to be managed-only, the risk should be very low. + includeDefaultManagedPlatform: false defaultManagedPlatform: name: 'Managed' container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-7-3e800f1-20190501005343' # Defines the platforms on which to run build jobs. One job is created for each platform, and the - # object in this array is sent to the job template as 'platform'. If no platforms are specified, - # one job runs on 'defaultManagedPlatform'. + # object in this array is sent to the job template as 'platform'. platforms: [] jobs: @@ -30,7 +32,7 @@ jobs: dependsOn: - ${{ each platform in parameters.platforms }}: - ${{ parameters.jobNamePrefix }}_${{ platform.name }} - - ${{ if eq(length(parameters.platforms), 0) }}: + - ${{ if eq(parameters.includeDefaultManagedPlatform, true) }}: - ${{ parameters.jobNamePrefix }}_${{ parameters.defaultManagedPlatform.name }} - ${{ each platform in parameters.platforms }}: @@ -39,7 +41,7 @@ jobs: jobNamePrefix: ${{ parameters.jobNamePrefix }} platform: ${{ platform }} -- ${{ if eq(length(parameters.platforms), 0) }}: +- ${{ if eq(parameters.includeDefaultManagedPlatform, true) }}: - template: /eng/common/templates/job/source-build.yml parameters: jobNamePrefix: ${{ parameters.jobNamePrefix }} diff --git a/eng/common/templates/phases/publish-build-assets.yml b/eng/common/templates/phases/publish-build-assets.yml index 4e51e472e2b..a0a8074282a 100644 --- a/eng/common/templates/phases/publish-build-assets.yml +++ b/eng/common/templates/phases/publish-build-assets.yml @@ -20,7 +20,6 @@ phases: inputs: artifactName: AssetManifests downloadPath: '$(Build.StagingDirectory)/Download' - checkDownloadedFiles: true condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} - task: AzureKeyVault@1 diff --git a/eng/common/templates/post-build/channels/generic-internal-channel.yml b/eng/common/templates/post-build/channels/generic-internal-channel.yml index 8990dfc8c87..7ae5255921a 100644 --- a/eng/common/templates/post-build/channels/generic-internal-channel.yml +++ b/eng/common/templates/post-build/channels/generic-internal-channel.yml @@ -40,9 +40,6 @@ stages: pool: vmImage: 'windows-2019' steps: - - script: echo "##vso[task.logissue type=warning]Going forward, v2 Arcade publishing is no longer supported. Please read https://github.com/dotnet/arcade/blob/main/Documentation/CorePackages/Publishing.md for details, then contact dnceng if you have further questions." - displayName: Warn about v2 Arcade Publishing Usage - # This is necessary whenever we want to publish/restore to an AzDO private feed - task: NuGetAuthenticate@0 displayName: 'Authenticate to AzDO Feeds' @@ -61,7 +58,6 @@ stages: PdbArtifacts/** BlobArtifacts/** downloadPath: '$(Build.ArtifactStagingDirectory)' - checkDownloadedFiles: true # This is necessary whenever we want to publish/restore to an AzDO private feed # Since sdk-task.ps1 tries to restore packages we need to do this authentication here @@ -113,9 +109,6 @@ stages: pool: vmImage: 'windows-2019' steps: - - script: echo "##vso[task.logissue type=warning]Going forward, v2 Arcade publishing is no longer supported. Please read https://github.com/dotnet/arcade/blob/main/Documentation/CorePackages/Publishing.md for details, then contact dnceng if you have further questions." - displayName: Warn about v2 Arcade Publishing Usage - - task: DownloadBuildArtifacts@0 displayName: Download Build Assets continueOnError: true @@ -131,7 +124,6 @@ stages: BlobArtifacts/** AssetManifests/** downloadPath: '$(Build.ArtifactStagingDirectory)' - checkDownloadedFiles: true - task: NuGetToolInstaller@1 displayName: 'Install NuGet.exe' diff --git a/eng/common/templates/post-build/channels/generic-public-channel.yml b/eng/common/templates/post-build/channels/generic-public-channel.yml index 3220c6a4f92..6cf39dbb290 100644 --- a/eng/common/templates/post-build/channels/generic-public-channel.yml +++ b/eng/common/templates/post-build/channels/generic-public-channel.yml @@ -42,9 +42,6 @@ stages: pool: vmImage: 'windows-2019' steps: - - script: echo "##vso[task.logissue type=warning]Going forward, v2 Arcade publishing is no longer supported. Please read https://github.com/dotnet/arcade/blob/main/Documentation/CorePackages/Publishing.md for details, then contact dnceng if you have further questions." - displayName: Warn about v2 Arcade Publishing Usage - - task: DownloadBuildArtifacts@0 displayName: Download Build Assets continueOnError: true @@ -59,7 +56,6 @@ stages: PdbArtifacts/** BlobArtifacts/** downloadPath: '$(Build.ArtifactStagingDirectory)' - checkDownloadedFiles: true # This is necessary whenever we want to publish/restore to an AzDO private feed # Since sdk-task.ps1 tries to restore packages we need to do this authentication here @@ -112,9 +108,6 @@ stages: pool: vmImage: 'windows-2019' steps: - - script: echo "##vso[task.logissue type=warning]Going forward, v2 Arcade publishing is no longer supported. Please read https://github.com/dotnet/arcade/blob/main/Documentation/CorePackages/Publishing.md for details, then contact dnceng if you have further questions." - displayName: Warn about v2 Arcade Publishing Usage - - task: DownloadBuildArtifacts@0 displayName: Download Build Assets continueOnError: true @@ -130,7 +123,6 @@ stages: BlobArtifacts/** AssetManifests/** downloadPath: '$(Build.ArtifactStagingDirectory)' - checkDownloadedFiles: true - task: NuGetToolInstaller@1 displayName: 'Install NuGet.exe' diff --git a/eng/common/templates/post-build/post-build.yml b/eng/common/templates/post-build/post-build.yml index 4f79cf0f337..41f2d96a608 100644 --- a/eng/common/templates/post-build/post-build.yml +++ b/eng/common/templates/post-build/post-build.yml @@ -61,9 +61,7 @@ parameters: VS167ChannelId: 1011 VS168ChannelId: 1154 VSMasterChannelId: 1012 - VS169ChannelId: 1473 - VS1610ChannelId: 1692 - + stages: - ${{ if or(and(le(parameters.publishingInfraVersion, 2), eq(parameters.inline, 'true')), eq( parameters.enableNugetValidation, 'true'), eq(parameters.enableSigningValidation, 'true'), eq(parameters.enableSourceLinkValidation, 'true'), eq(parameters.SDLValidationParameters.enable, 'true')) }}: - stage: Validate @@ -92,7 +90,7 @@ stages: inputs: filePath: $(Build.SourcesDirectory)/eng/common/post-build/check-channel-consistency.ps1 arguments: -PromoteToChannels "$(TargetChannels)" - -AvailableChannelIds ${{parameters.NetEngLatestChannelId}},${{parameters.NetEngValidationChannelId}},${{parameters.NetDev5ChannelId}},${{parameters.NetDev6ChannelId}},${{parameters.GeneralTestingChannelId}},${{parameters.NETCoreToolingDevChannelId}},${{parameters.NETCoreToolingReleaseChannelId}},${{parameters.NETInternalToolingChannelId}},${{parameters.NETCoreExperimentalChannelId}},${{parameters.NetEngServicesIntChannelId}},${{parameters.NetEngServicesProdChannelId}},${{parameters.NetCoreSDK313xxChannelId}},${{parameters.NetCoreSDK313xxInternalChannelId}},${{parameters.NetCoreSDK314xxChannelId}},${{parameters.NetCoreSDK314xxInternalChannelId}},${{parameters.VS166ChannelId}},${{parameters.VS167ChannelId}},${{parameters.VS168ChannelId}},${{parameters.VSMasterChannelId}},${{parameters.VS169ChannelId}},${{parameters.VS1610ChannelId}} + -AvailableChannelIds ${{parameters.NetEngLatestChannelId}},${{parameters.NetEngValidationChannelId}},${{parameters.NetDev5ChannelId}},${{parameters.NetDev6ChannelId}},${{parameters.GeneralTestingChannelId}},${{parameters.NETCoreToolingDevChannelId}},${{parameters.NETCoreToolingReleaseChannelId}},${{parameters.NETInternalToolingChannelId}},${{parameters.NETCoreExperimentalChannelId}},${{parameters.NetEngServicesIntChannelId}},${{parameters.NetEngServicesProdChannelId}},${{parameters.NetCoreSDK313xxChannelId}},${{parameters.NetCoreSDK313xxInternalChannelId}},${{parameters.NetCoreSDK314xxChannelId}},${{parameters.NetCoreSDK314xxInternalChannelId}},${{parameters.VS166ChannelId}},${{parameters.VS167ChannelId}},${{parameters.VS168ChannelId}},${{parameters.VSMasterChannelId}} - job: displayName: NuGet Validation @@ -117,7 +115,6 @@ stages: pipeline: $(AzDOPipelineId) buildId: $(AzDOBuildId) artifactName: PackageArtifacts - checkDownloadedFiles: true - task: PowerShell@2 displayName: Validate @@ -129,7 +126,7 @@ stages: - job: displayName: Signing Validation dependsOn: setupMaestroVars - condition: and( eq( ${{ parameters.enableSigningValidation }}, 'true'), ne( variables['PostBuildSign'], 'true')) + condition: eq( ${{ parameters.enableSigningValidation }}, 'true') variables: - template: common-variables.yml - name: AzDOProjectName @@ -150,10 +147,6 @@ stages: pipeline: $(AzDOPipelineId) buildId: $(AzDOBuildId) artifactName: PackageArtifacts - checkDownloadedFiles: true - itemPattern: | - ** - !**/Microsoft.SourceBuild.Intermediate.*.nupkg # This is necessary whenever we want to publish/restore to an AzDO private feed # Since sdk-task.ps1 tries to restore packages we need to do this authentication here @@ -207,7 +200,6 @@ stages: pipeline: $(AzDOPipelineId) buildId: $(AzDOBuildId) artifactName: BlobArtifacts - checkDownloadedFiles: true - task: PowerShell@2 displayName: Validate @@ -232,7 +224,7 @@ stages: - ${{ if or(ge(parameters.publishingInfraVersion, 3), eq(parameters.inline, 'false')) }}: - stage: publish_using_darc ${{ if or(eq(parameters.enableNugetValidation, 'true'), eq(parameters.enableSigningValidation, 'true'), eq(parameters.enableSourceLinkValidation, 'true'), eq(parameters.SDLValidationParameters.enable, 'true')) }}: - dependsOn: ${{ parameters.publishDependsOn }} + dependsOn: Validate ${{ if and(ne(parameters.enableNugetValidation, 'true'), ne(parameters.enableSigningValidation, 'true'), ne(parameters.enableSourceLinkValidation, 'true'), ne(parameters.SDLValidationParameters.enable, 'true')) }}: dependsOn: ${{ parameters.validateDependsOn }} displayName: Publish using Darc @@ -557,33 +549,3 @@ stages: transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-transport/nuget/v3/index.json' shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-symbols/nuget/v3/index.json' - - - template: \eng\common\templates\post-build\channels\generic-public-channel.yml - parameters: - BARBuildId: ${{ parameters.BARBuildId }} - PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} - artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - dependsOn: ${{ parameters.publishDependsOn }} - publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} - symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} - stageName: 'VS_16_9_Publishing' - channelName: 'VS 16.9' - channelId: ${{ parameters.VS169ChannelId }} - transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-transport/nuget/v3/index.json' - shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' - symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-symbols/nuget/v3/index.json' - - - template: \eng\common\templates\post-build\channels\generic-public-channel.yml - parameters: - BARBuildId: ${{ parameters.BARBuildId }} - PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} - artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - dependsOn: ${{ parameters.publishDependsOn }} - publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} - symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} - stageName: 'VS_16_10_Publishing' - channelName: 'VS 16.10' - channelId: ${{ parameters.VS1610ChannelId }} - transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-transport/nuget/v3/index.json' - shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' - symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-symbols/nuget/v3/index.json' diff --git a/eng/common/templates/post-build/setup-maestro-vars.yml b/eng/common/templates/post-build/setup-maestro-vars.yml index 4a22b2e6f6d..d0cbfb6c6ff 100644 --- a/eng/common/templates/post-build/setup-maestro-vars.yml +++ b/eng/common/templates/post-build/setup-maestro-vars.yml @@ -18,7 +18,6 @@ jobs: inputs: buildType: current artifactName: ReleaseConfigs - checkDownloadedFiles: true - task: PowerShell@2 name: setReleaseVars diff --git a/eng/common/templates/steps/perf-send-to-helix.yml b/eng/common/templates/steps/perf-send-to-helix.yml new file mode 100644 index 00000000000..a468e92ce44 --- /dev/null +++ b/eng/common/templates/steps/perf-send-to-helix.yml @@ -0,0 +1,50 @@ +# Please remember to update the documentation if you make changes to these parameters! +parameters: + ProjectFile: '' # required -- project file that specifies the helix workitems + HelixSource: 'pr/default' # required -- sources must start with pr/, official/, prodcon/, or agent/ + HelixType: 'tests/default/' # required -- Helix telemetry which identifies what type of data this is; should include "test" for clarity and must end in '/' + HelixBuild: $(Build.BuildNumber) # required -- the build number Helix will use to identify this -- automatically set to the AzDO build number + HelixTargetQueues: '' # required -- semicolon delimited list of Helix queues to test on; see https://helix.dot.net/ for a list of queues + HelixAccessToken: '' # required -- access token to make Helix API requests; should be provided by the appropriate variable group + HelixPreCommands: '' # optional -- commands to run before Helix work item execution + HelixPostCommands: '' # optional -- commands to run after Helix work item execution + WorkItemDirectory: '' # optional -- a payload directory to zip up and send to Helix; requires WorkItemCommand; incompatible with XUnitProjects + CorrelationPayloadDirectory: '' # optional -- a directory to zip up and send to Helix as a correlation payload + IncludeDotNetCli: false # optional -- true will download a version of the .NET CLI onto the Helix machine as a correlation payload; requires DotNetCliPackageType and DotNetCliVersion + DotNetCliPackageType: '' # optional -- either 'sdk', 'runtime' or 'aspnetcore-runtime'; determines whether the sdk or runtime will be sent to Helix; see https://raw.githubusercontent.com/dotnet/core/master/release-notes/releases.json + DotNetCliVersion: '' # optional -- version of the CLI to send to Helix; based on this: https://raw.githubusercontent.com/dotnet/core/master/release-notes/releases.json + EnableXUnitReporter: false # optional -- true enables XUnit result reporting to Mission Control + WaitForWorkItemCompletion: true # optional -- true will make the task wait until work items have been completed and fail the build if work items fail. False is "fire and forget." + Creator: '' # optional -- if the build is external, use this to specify who is sending the job + DisplayNamePrefix: 'Send job to Helix' # optional -- rename the beginning of the displayName of the steps in AzDO + condition: succeeded() # optional -- condition for step to execute; defaults to succeeded() + continueOnError: false # optional -- determines whether to continue the build if the step errors; defaults to false + osGroup: '' # required -- operating system for the job + + +steps: +- template: /eng/pipelines/common/templates/runtimes/send-to-helix-inner-step.yml + parameters: + osGroup: ${{ parameters.osGroup }} + sendParams: $(Build.SourcesDirectory)/eng/common/performance/${{ parameters.ProjectFile }} /restore /t:Test /bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/SendToHelix.binlog + displayName: ${{ parameters.DisplayNamePrefix }} + condition: ${{ parameters.condition }} + continueOnError: ${{ parameters.continueOnError }} + environment: + BuildConfig: $(_BuildConfig) + HelixSource: ${{ parameters.HelixSource }} + HelixType: ${{ parameters.HelixType }} + HelixBuild: ${{ parameters.HelixBuild }} + HelixTargetQueues: ${{ parameters.HelixTargetQueues }} + HelixAccessToken: ${{ parameters.HelixAccessToken }} + HelixPreCommands: ${{ parameters.HelixPreCommands }} + HelixPostCommands: ${{ parameters.HelixPostCommands }} + WorkItemDirectory: ${{ parameters.WorkItemDirectory }} + CorrelationPayloadDirectory: ${{ parameters.CorrelationPayloadDirectory }} + IncludeDotNetCli: ${{ parameters.IncludeDotNetCli }} + DotNetCliPackageType: ${{ parameters.DotNetCliPackageType }} + DotNetCliVersion: ${{ parameters.DotNetCliVersion }} + EnableXUnitReporter: ${{ parameters.EnableXUnitReporter }} + WaitForWorkItemCompletion: ${{ parameters.WaitForWorkItemCompletion }} + Creator: ${{ parameters.Creator }} + SYSTEM_ACCESSTOKEN: $(System.AccessToken) diff --git a/eng/common/templates/steps/send-to-helix.yml b/eng/common/templates/steps/send-to-helix.yml index cd02ae1607f..bb5f1a92938 100644 --- a/eng/common/templates/steps/send-to-helix.yml +++ b/eng/common/templates/steps/send-to-helix.yml @@ -18,8 +18,8 @@ parameters: XUnitRuntimeTargetFramework: '' # optional -- framework to use for the xUnit console runner XUnitRunnerVersion: '' # optional -- version of the xUnit nuget package you wish to use on Helix; required for XUnitProjects IncludeDotNetCli: false # optional -- true will download a version of the .NET CLI onto the Helix machine as a correlation payload; requires DotNetCliPackageType and DotNetCliVersion - DotNetCliPackageType: '' # optional -- either 'sdk', 'runtime' or 'aspnetcore-runtime'; determines whether the sdk or runtime will be sent to Helix; see https://raw.githubusercontent.com/dotnet/core/main/release-notes/releases-index.json - DotNetCliVersion: '' # optional -- version of the CLI to send to Helix; based on this: https://raw.githubusercontent.com/dotnet/core/main/release-notes/releases-index.json + DotNetCliPackageType: '' # optional -- either 'sdk', 'runtime' or 'aspnetcore-runtime'; determines whether the sdk or runtime will be sent to Helix; see https://raw.githubusercontent.com/dotnet/core/master/release-notes/releases-index.json + DotNetCliVersion: '' # optional -- version of the CLI to send to Helix; based on this: https://raw.githubusercontent.com/dotnet/core/master/release-notes/releases-index.json EnableXUnitReporter: false # optional -- true enables XUnit result reporting to Mission Control WaitForWorkItemCompletion: true # optional -- true will make the task wait until work items have been completed and fail the build if work items fail. False is "fire and forget." IsExternal: false # [DEPRECATED] -- doesn't do anything, jobs are external if HelixAccessToken is empty and Creator is set diff --git a/eng/common/templates/steps/source-build.yml b/eng/common/templates/steps/source-build.yml index e20637ed6a1..8e336b7d16b 100644 --- a/eng/common/templates/steps/source-build.yml +++ b/eng/common/templates/steps/source-build.yml @@ -34,14 +34,9 @@ steps: targetRidArgs='/p:TargetRid=${{ parameters.platform.targetRID }}' fi - publishArgs= - if [ '${{ parameters.platform.skipPublishValidation }}' != 'true' ]; then - publishArgs='--publish' - fi - ${{ coalesce(parameters.platform.buildScript, './build.sh') }} --ci \ --configuration $buildConfig \ - --restore --build --pack $publishArgs -bl \ + --restore --build --pack --publish \ $officialBuildArgs \ $targetRidArgs \ /p:SourceBuildNonPortable=${{ parameters.platform.nonPortable }} \ diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index 5619c7aaee1..bc8b66e2943 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -48,9 +48,6 @@ # True to use global NuGet cache instead of restoring packages to repository-local directory. [bool]$useGlobalNuGetCache = if (Test-Path variable:useGlobalNuGetCache) { $useGlobalNuGetCache } else { !$ci } -# True to exclude prerelease versions Visual Studio during build -[bool]$excludePrereleaseVS = if (Test-Path variable:excludePrereleaseVS) { $excludePrereleaseVS } else { $false } - # An array of names of processes to stop on script exit if prepareMachine is true. $processesToStopOnExit = if (Test-Path variable:processesToStopOnExit) { $processesToStopOnExit } else { @('msbuild', 'dotnet', 'vbcscompiler') } @@ -144,7 +141,7 @@ function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) { # Use dotnet installation specified in DOTNET_INSTALL_DIR if it contains the required SDK version, # otherwise install the dotnet CLI and SDK to repo local .dotnet directory to avoid potential permission issues. - if ((-not $globalJsonHasRuntimes) -and (-not [string]::IsNullOrEmpty($env:DOTNET_INSTALL_DIR)) -and (Test-Path(Join-Path $env:DOTNET_INSTALL_DIR "sdk\$dotnetSdkVersion"))) { + if ((-not $globalJsonHasRuntimes) -and ($env:DOTNET_INSTALL_DIR -ne $null) -and (Test-Path(Join-Path $env:DOTNET_INSTALL_DIR "sdk\$dotnetSdkVersion"))) { $dotnetRoot = $env:DOTNET_INSTALL_DIR } else { $dotnetRoot = Join-Path $RepoRoot '.dotnet' @@ -172,7 +169,7 @@ function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) { Set-Content -Path $sdkCacheFileTemp -Value $dotnetRoot try { - Move-Item -Force $sdkCacheFileTemp (Join-Path $ToolsetDir 'sdk.txt') + Rename-Item -Force -Path $sdkCacheFileTemp 'sdk.txt' } catch { # Somebody beat us Remove-Item -Path $sdkCacheFileTemp @@ -193,42 +190,38 @@ function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) { return $global:_DotNetInstallDir = $dotnetRoot } -function Retry($downloadBlock, $maxRetries = 5) { - $retries = 1 - - while($true) { - try { - & $downloadBlock - break - } - catch { - Write-PipelineTelemetryError -Category 'InitializeToolset' -Message $_ - } - - if (++$retries -le $maxRetries) { - $delayInSeconds = [math]::Pow(2, $retries) - 1 # Exponential backoff - Write-Host "Retrying. Waiting for $delayInSeconds seconds before next attempt ($retries of $maxRetries)." - Start-Sleep -Seconds $delayInSeconds - } - else { - Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Unable to download file in $maxRetries attempts." - break - } - - } -} - function GetDotNetInstallScript([string] $dotnetRoot) { $installScript = Join-Path $dotnetRoot 'dotnet-install.ps1' if (!(Test-Path $installScript)) { Create-Directory $dotnetRoot $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit + + $maxRetries = 5 + $retries = 1 + $uri = "https://dot.net/$dotnetInstallScriptVersion/dotnet-install.ps1" - Retry({ - Write-Host "GET $uri" - Invoke-WebRequest $uri -OutFile $installScript - }) + while($true) { + try { + Write-Host "GET $uri" + Invoke-WebRequest $uri -OutFile $installScript + break + } + catch { + Write-Host "Failed to download '$uri'" + Write-Error $_.Exception.Message -ErrorAction Continue + } + + if (++$retries -le $maxRetries) { + $delayInSeconds = [math]::Pow(2, $retries) - 1 # Exponential backoff + Write-Host "Retrying. Waiting for $delayInSeconds seconds before next attempt ($retries of $maxRetries)." + Start-Sleep -Seconds $delayInSeconds + } + else { + throw "Unable to download file in $maxRetries attempts." + } + + } } return $installScript @@ -312,8 +305,8 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements = # If the version of msbuild is going to be xcopied, # use this version. Version matches a package here: - # https://dev.azure.com/dnceng/public/_packaging?_a=package&feed=dotnet-eng&package=RoslynTools.MSBuild&protocolType=NuGet&version=16.10.0-preview2&view=overview - $defaultXCopyMSBuildVersion = '16.10.0-preview2' + # https://dev.azure.com/dnceng/public/_packaging?_a=package&feed=dotnet-eng&package=RoslynTools.MSBuild&protocolType=NuGet&version=16.8.0-preview3&view=overview + $defaultXCopyMSBuildVersion = '16.8.0-preview3' if (!$vsRequirements) { $vsRequirements = $GlobalJson.tools.vs } $vsMinVersionStr = if ($vsRequirements.version) { $vsRequirements.version } else { $vsMinVersionReqdStr } @@ -407,13 +400,9 @@ function InitializeXCopyMSBuild([string]$packageVersion, [bool]$install) { } Create-Directory $packageDir - Write-Host "Downloading $packageName $packageVersion" $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit - Retry({ - Invoke-WebRequest "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/flat2/$packageName/$packageVersion/$packageName.$packageVersion.nupkg" -OutFile $packagePath - }) - + Invoke-WebRequest "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/flat2/$packageName/$packageVersion/$packageName.$packageVersion.nupkg" -OutFile $packagePath Unzip $packagePath $packageDir } @@ -450,17 +439,16 @@ function LocateVisualStudio([object]$vsRequirements = $null){ if (!(Test-Path $vsWhereExe)) { Create-Directory $vsWhereDir Write-Host 'Downloading vswhere' - Retry({ + try { Invoke-WebRequest "https://netcorenativeassets.blob.core.windows.net/resource-packages/external/windows/vswhere/$vswhereVersion/vswhere.exe" -OutFile $vswhereExe - }) + } + catch { + Write-PipelineTelemetryError -Category 'InitializeToolset' -Message $_ + } } if (!$vsRequirements) { $vsRequirements = $GlobalJson.tools.vs } - $args = @('-latest', '-format', 'json', '-requires', 'Microsoft.Component.MSBuild', '-products', '*') - - if (!$excludePrereleaseVS) { - $args += '-prerelease' - } + $args = @('-latest', '-prerelease', '-format', 'json', '-requires', 'Microsoft.Component.MSBuild', '-products', '*') if (Get-Member -InputObject $vsRequirements -Name 'version') { $args += '-version' @@ -486,13 +474,7 @@ function LocateVisualStudio([object]$vsRequirements = $null){ function InitializeBuildTool() { if (Test-Path variable:global:_BuildTool) { - # If the requested msbuild parameters do not match, clear the cached variables. - if($global:_BuildTool.Contains('ExcludePrereleaseVS') -and $global:_BuildTool.ExcludePrereleaseVS -ne $excludePrereleaseVS) { - Remove-Item variable:global:_BuildTool - Remove-Item variable:global:_MSBuildExe - } else { - return $global:_BuildTool - } + return $global:_BuildTool } if (-not $msbuildEngine) { @@ -511,7 +493,7 @@ function InitializeBuildTool() { ExitWithExitCode 1 } $dotnetPath = Join-Path $dotnetRoot (GetExecutableFileName 'dotnet') - $buildTool = @{ Path = $dotnetPath; Command = 'msbuild'; Tool = 'dotnet'; Framework = 'netcoreapp3.1' } + $buildTool = @{ Path = $dotnetPath; Command = 'msbuild'; Tool = 'dotnet'; Framework = 'netcoreapp2.1' } } elseif ($msbuildEngine -eq "vs") { try { $msbuildPath = InitializeVisualStudioMSBuild -install:$restore @@ -520,7 +502,7 @@ function InitializeBuildTool() { ExitWithExitCode 1 } - $buildTool = @{ Path = $msbuildPath; Command = ""; Tool = "vs"; Framework = "net472"; ExcludePrereleaseVS = $excludePrereleaseVS } + $buildTool = @{ Path = $msbuildPath; Command = ""; Tool = "vs"; Framework = "net472" } } else { Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Unexpected value of -msbuildEngine: '$msbuildEngine'." ExitWithExitCode 1 @@ -545,7 +527,7 @@ function GetDefaultMSBuildEngine() { function GetNuGetPackageCachePath() { if ($env:NUGET_PACKAGES -eq $null) { - # Use local cache on CI to ensure deterministic build. + # Use local cache on CI to ensure deterministic build. # Avoid using the http cache as workaround for https://github.com/NuGet/Home/issues/3116 # use global cache in dev builds to avoid cost of downloading packages. # For directory normalization, see also: https://github.com/NuGet/Home/issues/7968 @@ -647,26 +629,9 @@ function MSBuild() { } $toolsetBuildProject = InitializeToolset - $basePath = Split-Path -parent $toolsetBuildProject - $possiblePaths = @( - # new scripts need to work with old packages, so we need to look for the old names/versions - (Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.ArcadeLogging.dll')), - (Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.Arcade.Sdk.dll')), - (Join-Path $basePath (Join-Path netcoreapp2.1 'Microsoft.DotNet.ArcadeLogging.dll')), - (Join-Path $basePath (Join-Path netcoreapp2.1 'Microsoft.DotNet.Arcade.Sdk.dll')) - ) - $selectedPath = $null - foreach ($path in $possiblePaths) { - if (Test-Path $path -PathType Leaf) { - $selectedPath = $path - break - } - } - if (-not $selectedPath) { - Write-PipelineTelemetryError -Category 'Build' -Message 'Unable to find arcade sdk logger assembly.' - ExitWithExitCode 1 - } - $args += "/logger:$selectedPath" + $path = Split-Path -parent $toolsetBuildProject + $path = Join-Path $path (Join-Path $buildTool.Framework 'Microsoft.DotNet.Arcade.Sdk.dll') + $args += "/logger:$path" } MSBuild-Core @args @@ -702,10 +667,7 @@ function MSBuild-Core() { } foreach ($arg in $args) { - if ($null -ne $arg -and $arg.Trim() -ne "") { - if ($arg.EndsWith('\')) { - $arg = $arg + "\" - } + if ($arg -ne $null -and $arg.Trim() -ne "") { $cmdArgs += " `"$arg`"" } } @@ -777,7 +739,7 @@ function Get-Darc($version) { . $PSScriptRoot\pipeline-logging-functions.ps1 -$RepoRoot = Resolve-Path (Join-Path $PSScriptRoot '..\..\') +$RepoRoot = Resolve-Path (Join-Path $PSScriptRoot '..\..') $EngRoot = Resolve-Path (Join-Path $PSScriptRoot '..') $ArtifactsDir = Join-Path $RepoRoot 'artifacts' $ToolsetDir = Join-Path $ArtifactsDir 'toolset' diff --git a/eng/common/tools.sh b/eng/common/tools.sh index 05ca99c6b28..0295dd9ff63 100755 --- a/eng/common/tools.sh +++ b/eng/common/tools.sh @@ -89,16 +89,16 @@ function ResolvePath { function ReadGlobalVersion { local key=$1 - if command -v jq &> /dev/null; then - _ReadGlobalVersion="$(jq -r ".[] | select(has(\"$key\")) | .\"$key\"" "$global_json_file")" - elif [[ "$(cat "$global_json_file")" =~ \"$key\"[[:space:]\:]*\"([^\"]+) ]]; then - _ReadGlobalVersion=${BASH_REMATCH[1]} - fi + local line=$(awk "/$key/ {print; exit}" "$global_json_file") + local pattern="\"$key\" *: *\"(.*)\"" - if [[ -z "$_ReadGlobalVersion" ]]; then + if [[ ! $line =~ $pattern ]]; then Write-PipelineTelemetryError -category 'Build' "Error: Cannot find \"$key\" in $global_json_file" ExitWithExitCode 1 fi + + # return value + _ReadGlobalVersion=${BASH_REMATCH[1]} } function InitializeDotNetCli { @@ -273,11 +273,7 @@ function GetDotNetInstallScript { if command -v curl > /dev/null; then # first, try directly, if this fails we will retry with verbose logging curl "$install_script_url" -sSL --retry 10 --create-dirs -o "$install_script" || { - if command -v openssl &> /dev/null; then - echo "Curl failed; dumping some information about dotnet.microsoft.com for later investigation" - echo | openssl s_client -showcerts -servername dotnet.microsoft.com -connect dotnet.microsoft.com:443 - fi - echo "Will now retry the same URL with verbose logging." + echo "curl failed; will now retry with verbose logging." with_retries curl "$install_script_url" -sSL --verbose --retry 10 --create-dirs -o "$install_script" || { local exit_code=$? Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to acquire dotnet install script (exit code '$exit_code')." @@ -306,7 +302,7 @@ function InitializeBuildTool { # return values _InitializeBuildTool="$_InitializeDotNetCli/dotnet" _InitializeBuildToolCommand="msbuild" - _InitializeBuildToolFramework="netcoreapp3.1" + _InitializeBuildToolFramework="netcoreapp2.1" } # Set RestoreNoCache as a workaround for https://github.com/NuGet/Home/issues/3116 @@ -413,24 +409,8 @@ function MSBuild { fi local toolset_dir="${_InitializeToolset%/*}" - # new scripts need to work with old packages, so we need to look for the old names/versions - local selectedPath= - local possiblePaths=() - possiblePaths+=( "$toolset_dir/$_InitializeBuildToolFramework/Microsoft.DotNet.ArcadeLogging.dll" ) - possiblePaths+=( "$toolset_dir/$_InitializeBuildToolFramework/Microsoft.DotNet.Arcade.Sdk.dll" ) - possiblePaths+=( "$toolset_dir/netcoreapp2.1/Microsoft.DotNet.ArcadeLogging.dll" ) - possiblePaths+=( "$toolset_dir/netcoreapp2.1/Microsoft.DotNet.Arcade.Sdk.dll" ) - for path in "${possiblePaths[@]}"; do - if [[ -f $path ]]; then - selectedPath=$path - break - fi - done - if [[ -z "$selectedPath" ]]; then - Write-PipelineTelemetryError -category 'Build' "Unable to find arcade sdk logger assembly." - ExitWithExitCode 1 - fi - args+=( "-logger:$selectedPath" ) + local logger_path="$toolset_dir/$_InitializeBuildToolFramework/Microsoft.DotNet.Arcade.Sdk.dll" + args=( "${args[@]}" "-logger:$logger_path" ) fi MSBuild-Core ${args[@]} @@ -485,27 +465,23 @@ _script_dir=`dirname "$_ResolvePath"` eng_root=`cd -P "$_script_dir/.." && pwd` repo_root=`cd -P "$_script_dir/../.." && pwd` -repo_root="${repo_root}/" -artifacts_dir="${repo_root}artifacts" +artifacts_dir="$repo_root/artifacts" toolset_dir="$artifacts_dir/toolset" -tools_dir="${repo_root}.tools" +tools_dir="$repo_root/.tools" log_dir="$artifacts_dir/log/$configuration" temp_dir="$artifacts_dir/tmp/$configuration" -global_json_file="${repo_root}global.json" +global_json_file="$repo_root/global.json" # determine if global.json contains a "runtimes" entry global_json_has_runtimes=false -if command -v jq &> /dev/null; then - if jq -er '. | select(has("runtimes"))' "$global_json_file" &> /dev/null; then - global_json_has_runtimes=true - fi -elif [[ "$(cat "$global_json_file")" =~ \"runtimes\"[[:space:]\:]*\{ ]]; then +dotnetlocal_key=$(awk "/runtimes/ {print; exit}" "$global_json_file") || true +if [[ -n "$dotnetlocal_key" ]]; then global_json_has_runtimes=true fi # HOME may not be defined in some scenarios, but it is required by NuGet if [[ -z $HOME ]]; then - export HOME="${repo_root}artifacts/.home/" + export HOME="$repo_root/artifacts/.home/" mkdir -p "$HOME" fi diff --git a/eng/release/insert-into-vs.yml b/eng/release/insert-into-vs.yml index b1048ad2e04..e61143ca239 100644 --- a/eng/release/insert-into-vs.yml +++ b/eng/release/insert-into-vs.yml @@ -4,7 +4,6 @@ parameters: insertTargetBranch: '' insertTeamEmail: '' insertTeamName: '' - completeInsertion: 'false' # 'true', 'false', 'auto' dependsOn: [build] stages: @@ -50,23 +49,10 @@ stages: inputs: filePath: $(Build.SourcesDirectory)/eng/release/scripts/GetAssemblyVersions.ps1 arguments: -assemblyVersionsPath $(Build.ArtifactStagingDirectory)\VSSetup\DevDivPackages\DependentAssemblyVersions.csv - - task: PowerShell@2 - displayName: Calculate autocompletion state - inputs: - targetType: 'inline' - pwsh: true - script: | - # mark the insertion for auto-completion if: - # `parameters.completeInsertion` == `true` - # OR - # `parameters.completeInsertion` == `auto` AND `parameters.insertTargetBranch` does not contain 'rel/' - $completeInsertion = '${{ parameters.completeInsertion }}' - $autoComplete = ($completeInsertion -Eq 'true') -Or (($completeInsertion -Eq 'auto') -And (-Not ($env:INSERTTARGETBRANCH.Contains('rel/')))) - $autoCompleteStr = if ($autoComplete) { 'true' } else { 'false' } - Write-Host "Setting InsertAutoComplete to '$autoCompleteStr'" - Write-Host "##vso[task.setvariable variable=InsertAutoComplete]$autoCompleteStr" - task: ms-vseng.MicroBuildShipTasks.55100717-a81d-45ea-a363-b8fe3ec375ad.MicroBuildInsertVsPayload@3 displayName: 'Insert VS Payload' inputs: + # only auto-complete if the target branch is not `rel/*` + AutoCompletePR: ${{ not(contains(parameters.insertTargetBranch, 'rel/')) }} LinkWorkItemsToPR: false condition: and(succeeded(), or(eq(variables['Build.SourceBranch'], '${{ parameters.componentBranchName }}'), eq(variables['Build.SourceBranch'], 'refs/heads/${{ parameters.componentBranchName }}'))) diff --git a/eng/source-build-patches/0005-Fix-package-downgrade-warning.patch b/eng/source-build-patches/0005-Fix-package-downgrade-warning.patch deleted file mode 100644 index e13b98068f9..00000000000 --- a/eng/source-build-patches/0005-Fix-package-downgrade-warning.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 7f0d25bfaa9a38da2097c9420461232a08951165 Mon Sep 17 00:00:00 2001 -From: Chris Rummel -Date: Thu, 3 Sep 2020 19:02:07 -0500 -Subject: [PATCH 5/5] Fix package downgrade warning - ---- - .../FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj | 4 ++-- - .../Microsoft.FSharp.Compiler.nuspec | 4 ++-- - src/fsharp/fsc/fsc.fsproj | 1 + - 3 files changed, 7 insertions(+), 6 deletions(-) - -diff --git a/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj b/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj -index aced6e1b4..fcdacc30b 100644 ---- a/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj -+++ b/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj -@@ -770,8 +770,8 @@ - - - -- -- -+ -+ - - - -diff --git a/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.nuspec b/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.nuspec -index b96f90d2a..366488b47 100644 ---- a/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.nuspec -+++ b/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.nuspec -@@ -22,8 +22,8 @@ - - - -- -- -+ -+ - - - -diff --git a/src/fsharp/fsc/fsc.fsproj b/src/fsharp/fsc/fsc.fsproj -index 776cddc78..df16c1554 100644 ---- a/src/fsharp/fsc/fsc.fsproj -+++ b/src/fsharp/fsc/fsc.fsproj -@@ -45,6 +45,7 @@ - - - -+ - - - --- -2.18.0 - diff --git a/eng/tests/UpToDate.ps1 b/eng/tests/UpToDate.ps1 index 0a730ac48f3..545e149069a 100644 --- a/eng/tests/UpToDate.ps1 +++ b/eng/tests/UpToDate.ps1 @@ -26,8 +26,9 @@ try { $FscAssemblyDir = Get-ChildItem -Path $ArtifactsBinDir -Filter "fsc" $FsiAssemblyDir = Get-ChildItem -Path $ArtifactsBinDir -Filter "fsi" $FsiAnyCpuAssemblyDir = Get-ChildItem -Path $ArtifactsBinDir -Filter "fsiAnyCpu" + $DmAssemblyDir = Get-ChildItem -Path $ArtifactsBinDir -Filter "Microsoft.DotNet.DependencyManager" $ProjectSystemAssemblyDirs = Get-ChildItem -Path $ArtifactsBinDir -Filter "ProjectSystem*" - $FSharpDirs = @($FSharpAssemblyDirs) + @($FscAssemblyDir) + @($FsiAssemblyDir) + @($FsiAnyCpuAssemblyDir) + @($ProjectSystemAssemblyDirs) + $FSharpDirs = @($FSharpAssemblyDirs) + @($FscAssemblyDir) + @($FsiAssemblyDir) + @($FsiAnyCpuAssemblyDir) + @($DmAssemblyDir) + @($ProjectSystemAssemblyDirs) $FSharpDllPaths = $FSharpDirs | ForEach-Object { Get-ChildItem -Path (Join-Path $ArtifactsBinDir $_) -Recurse -Filter "*.dll" } | ForEach-Object { $_.FullName } $FSharpExePaths = $FSharpDirs | ForEach-Object { Get-ChildItem -Path (Join-Path $ArtifactsBinDir $_) -Recurse -Filter "*.exe" } | ForEach-Object { $_.FullName } $FSharpAssemblyPaths = @($FSharpDllPaths) + @($FSharpExePaths) diff --git a/fcs-samples/EditorService/EditorService.fsproj b/fcs-samples/EditorService/EditorService.fsproj index 27bdbef249c..5ce569ffaac 100644 --- a/fcs-samples/EditorService/EditorService.fsproj +++ b/fcs-samples/EditorService/EditorService.fsproj @@ -1,7 +1,7 @@  - $(FcsTargetNetFxFramework);net5.0 + $(FcsTargetNetFxFramework);netcoreapp3.1 true Exe false diff --git a/fcs-samples/FscExe/FscMain.fs b/fcs-samples/FscExe/FscMain.fs index 4b465cb2ab5..36b980cbbb3 100644 --- a/fcs-samples/FscExe/FscMain.fs +++ b/fcs-samples/FscExe/FscMain.fs @@ -8,8 +8,8 @@ open System.IO open System.Reflection open System.Runtime.CompilerServices open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.AbstractIL.Utils // runningOnMono -open FSharp.Compiler.AbstractIL.Library +open FSharp.Compiler.AbstractIL.Internal.Utils // runningOnMono +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.ErrorLogger #if RESIDENT_COMPILER diff --git a/fcs-samples/UntypedTree/Program.fs b/fcs-samples/UntypedTree/Program.fs index 7203195a173..c3c0ac538a1 100644 --- a/fcs-samples/UntypedTree/Program.fs +++ b/fcs-samples/UntypedTree/Program.fs @@ -1,6 +1,6 @@ // Open the namespace with InteractiveChecker type open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTree // Create a checker instance (ignore notifications) let checker = FSharpChecker.Create() diff --git a/global.json b/global.json index 0884f406b36..56a962b9389 100644 --- a/global.json +++ b/global.json @@ -1,10 +1,10 @@ { "sdk": { - "version": "5.0.300", + "version": "5.0.100", "rollForward": "minor" }, "tools": { - "dotnet": "5.0.300", + "dotnet": "5.0.100", "vs": { "version": "16.8", "components": [ @@ -13,7 +13,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "6.0.0-beta.21321.2", + "Microsoft.DotNet.Arcade.Sdk": "6.0.0-beta.20616.18", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } diff --git a/proto.proj b/proto.proj index bb077834555..bb2f9727045 100644 --- a/proto.proj +++ b/proto.proj @@ -10,10 +10,10 @@ TargetFramework=netstandard2.0 - TargetFramework=net5.0 + TargetFramework=netcoreapp3.1 - TargetFramework=net5.0 + TargetFramework=netcoreapp3.1 diff --git a/release-notes.md b/release-notes.md index 75b9a19c444..3b618ecf344 100644 --- a/release-notes.md +++ b/release-notes.md @@ -14,404 +14,6 @@ This document contains current and historical release notes information. They ar These release notes track our current efforts to document changes to the F# project over time. They are split into the language, core library, compiler/tools, and compiler service. -### F# 5 / Visual Studio 16.9 - -### FSharp.Core 5.0.1 - -* [Performance improvement](https://github.com/dotnet/fsharp/pull/10188) to core collections Map by [Victor Baybekov](https://github.com/buybackoff) - -### FSharp tools 11.0.1 - -* Significant improvements to the performance of code making heavy use of closures at runtime -* Warnings for mismatched parameter names between signature and implementation files -* Warnings for incorrect XML documentation files are turned on by default -* Big performance gains in tools for codebases with F# signature files -* Improved responsiveness for most IDE features -* Signature Help for F# function calls -* .NET 5 scripting for Visual Studio -* Add ConvertToAnonymousRecord quick fix [#10493](https://github.com/dotnet/fsharp/pull/10493) -* Add UseMutationWhenValueIsMutable code fix [#10488](https://github.com/dotnet/fsharp/pull/10488) -* Add MakeDeclarationMutable code fix [#10480](https://github.com/dotnet/fsharp/pull/10480) -* Add ChangeToUpcast code fix [#10463](https://github.com/dotnet/fsharp/pull/10463) -* Add AddMissingEqualsToTypeDefinition code fixer [#10470](https://github.com/dotnet/fsharp/pull/10470) -* Tag items in tooltips consistenly with respect to document classification. [#9563](https://github.com/dotnet/fsharp/pull/9563) -* Add ConvertToSingleEqualsEqualityExpression code fix [#10462](https://github.com/dotnet/fsharp/pull/10462) -* Turn XML doc and Sig<->Impl mismatch warnings on by default [#10457](https://github.com/dotnet/fsharp/pull/10457) -* Add ChangeRefCellDerefToNotExpression code fixer [#10469](https://github.com/dotnet/fsharp/pull/10469) -* Add WrapExpressionInParentheses code fix [#10460](https://github.com/dotnet/fsharp/pull/10460) -* Add ChangePrefixNegationToInfixSubtraction code fixeroo [#10471](https://github.com/dotnet/fsharp/pull/10471) -* Fix generic overloads with nullable [#10582](https://github.com/dotnet/fsharp/pull/10582) -* Resolve issue with implicit yields requiring Zero [#10556](https://github.com/dotnet/fsharp/pull/10556), by [Ryan Coy](https://github.com/laenas) -* Fix issue10550 FSI accessing System.Configuration. [#10572](https://github.com/dotnet/fsharp/pull/10572) -* Add field names to ILNativeType.Custom. [#10567](https://github.com/dotnet/fsharp/pull/10567), by [Scott Hutchinson](https://github.com/ScottHutchinson) -* Add field names to the ILExceptionClause.FilterCatch constructor. [#10559](https://github.com/dotnet/fsharp/pull/10559), by [Scott Hutchinson](https://github.com/ScottHutchinson) -* Fix completion with backticks, underscores, numbers [#10500](https://github.com/dotnet/fsharp/pull/10500), by [zanaptak](https://github.com/zanaptak) -* Emitting IsReadOnly/In attributes on abstract properties [#10542](https://github.com/dotnet/fsharp/pull/10542) -* Disable partial type checking when getting full results for a file [#10448](https://github.com/dotnet/fsharp/pull/10448) -* Fix unused open type declaration detection [#10510](https://github.com/dotnet/fsharp/pull/10510), by [André Slupik](https://github.com/asik) - -### FSharp Compiler Service 40.0.0 - -This is a second big update to FCS. There are significant trimmings and renamings of the API and gets -it close to a more permanent form: - -The primary namespaces are now: - -``` -FSharp.Compiler.IO // FileSystem -FSharp.Compiler.CodeAnalysis // FSharpChecker, FSharpCheckFileResults, FSharpChecProjectResults and friends -FSharp.Compiler.Diagnostics // FSharpDiagnostic and friends -FSharp.Compiler.EditorServices // Misc functionality for editors, e.g. interface stub generation -FSharp.Compiler.Interactive.Shell // F# Interactive -FSharp.Compiler.Symbols // FSharpEntity etc -FSharp.Compiler.Syntax // SyntaxTree, XmlDoc, PrettyNaming -FSharp.Compiler.Text // ISourceFile, Range, TaggedText and other things -FSharp.Compiler.Tokenization // FSharpLineTokenizer etc. -``` - -##### Changes in `FSharp.Compiler.Diagnostics` - -* `ErrorHelpers` --> `DiagnosticHelpers` - -* `ErrorResolutionHints.getSuggestedNames` --> `ErrorResolutionHints.GetSuggestedNames` - -##### Changes in `FSharp.Compiler.SourceCodeServices` - -* Everything is moved to one of the other namespaces - -* The `FSharp` prefix is used for things in `FSharp.Compiler.Symbols` but not `FSharp.Compiler.EditorServices` - -* `AssemblyContentProvider` --> `AssemblyContent` in EditorServices - -* `AstVisitorBase` --> moved to `SyntaxVisitorBase` in FSharp.Compiler.Syntax - -* `AstVisitorBase.*` --> `SyntaxVisitorBase.*` and methods now all take `path` parameters consistently - -* `AstTraversal.Traverse` --> `SyntaxTraversal.Traverse` - -* `BasicPatterns` --> `FSharpExprPatterns` in FSharp.Compiler.Symbols - -* `DebuggerEnvironment.*` merged into `CompilerEnvironment` in FSharp.Compiler - -* `ExternalType` --> `FindDeclExternalType` in EditorServices - -* `FSharpChecker.ParseFileNoCache` --> removed in favour of optional `cache=false` argument on `FSharpChecker.ParseFile` - -* `FSharpChecker.BeforeBackgroundFileCheck` event now takes FSharpProjectOptions arg - -* `FSharpChecker.FileChecked` event now takes FSharpProjectOptions arg - -* `FSharpChecker.FileParsed` event now takes FSharpProjectOptions arg - -* `FSharpChecker.ProjectChecked` event now takes FSharpProjectOptions arg - -* `FSharpCheckFileResults.Errors` --> `FSharpCheckFileResults.Diagnostics` - -* `FSharpCheckProjectResults.Errors` --> `FSharpCheckProjectResults.Diagnostics` - -* `FSharpDeclarationListInfo` --> `DeclarationListInfo` in EditorServices - -* `FSharpEnclosingEntityKind` --> `NavigationEntityKind` in EditorServices - -* `FSharpExternalSymbol` --> `FindDeclExternalSymbol` in EditorServices - -* `FSharpFileUtilities.*` merged into `CompilerEnvironment` in FSharp.Compiler - -* `FSharpFindDeclResult` --> `FindDeclResult` in EditorServices - -* `FSharpLexer.Lex` --> `FSharpLexer.Tokenize` in FSharp.Compiler.Tokenization - -* `FSharpMethodGroup` --> `MethodGroup` in EditorServices - -* `FSharpMethodGroupItem` --> `MethodGroupItem` in EditorServices - -* `FSharpMethodGroupItemParameter` --> `MethodGroupItemParameter` in EditorServices - -* `FSharpMethodGroupItemParameter.StructuredDisplay` ---> `MethodGroupItemParameter.Display` - -* `FSharpMethodGroupItemParameter.StructuredReturnTypeText` ---> `MethodGroupItemParameter.ReturnTypeText` - -* `FSharpNavigationDeclarationItem` --> `NavigationItem` in EditorServices - -* `FSharpNavigationTopLevelDeclaration` --> `NavigationTopLevelDeclaration` in EditorServices - -* `FSharpNavigationItems` --> `NavigationItems` in EditorServices - -* `FSharpNavigation` --> `Navigation` in EditorServices - -* `FSharpNavigationDeclarationItemKind` --> `NavigationItemKind` in EditorServices - -* `FSharpNoteworthyParamInfoLocations` --> `ParameterLocations` - -* `FSharpProjectOptions.ExtraProjectInfo` is removed - -* `FSharpSemanticClassificationItem` --> `SemanticClassificationItem` in EditorServices - -* `FSharpSemanticClassificationView ` --> `SemanticClassificationView` in EditorServices - -* `FSharpStructuredToolTipText` --> `ToolTipText` in EditorServices - -* `FSharpStructuredToolTipElementData` --> `ToolTipElementData` in EditorServices - -* `FSharpStructuredToolTipElement` --> `ToolTipElement` in EditorServices - -* `FSharpSymbol.Accessibility` is now non-optional. Will return "public" in cases it previously returned "None" - -* `FSharpSymbol.XmlDoc` now returns `FSharpXmlDoc` with cases for internal and external XML doc. Use `match symbol.XmlDoc with FSharpXmlDoc.FromText doc -> doc.UnprocessedLines` to get unprocessed XML lines - -* `FSharpSymbol.ElaboratedXmlDoc` now removed. Use `match symbol.XmlDoc with FSharpXmlDoc.FromText doc -> doc.GetElaboratedLine()` - -* `FSharpToolTipText` --> `ToolTipText` in EditorServices - -* `FSharpToolTipElementData` --> `ToolTipElementData` in EditorServices - -* `FSharpToolTipElement` --> `ToolTipElement` in EditorServices - -* `FSharpType.FormatLayout` now returns `TaggedText[]` - -* `FSharpType.FormatLayout` now returns `TaggedText[]` - -* `FSharpUnresolvedSymbol` --> `UnresolvedSymbol` in EditorServices - -* `InterfaceStubGenerator.*` are all capitalized - -* `Idents` --> `ShortIdents` in EditorServices - -* `LongIdent` abbreviation removed and replaced by `string` - -* `NavigateTo.NavigableItemKind ` --> now directly in EditorServices - -* `NavigateTo.ContainerType` --> `NavigableContainerType` now directly in EditorServices - -* `NavigateTo.NavigableItem` --> `NavigableItem` now directly in EditorServices - -* `NavigateTo.getNavigableItems` --> NavigateTo.GetNavigableItems in EditorServices - -* `ParamTypeSymbol` --> `FindDeclExternalParam in EditorServices` - -* `ParsedInput.tryFindInsertionContext` --> `ParsedInput.TryFindInsertionContext` - -* `ParsedInput.findNearestPointToInsertOpenDeclaration ` --> `ParsedInput.FindNearestPointToInsertOpenDeclaration ` - -* `ParsedInput.getLongIdentAt` --> `ParsedInput.GetLongIdentAt` - -* `ParsedInput.adjustInsertionPoint` --> `ParsedInput.AdjustInsertionPoint` - -* `Symbol` --> `FSharpSymbolPatterns` in FSharp.Compiler.Symbols and marked experimental - -* `Symbol.isAttribute` --> now `attrib.IsAttribute<'T>()` - -* `Symbol.getAbbreviatedType` --> now `symbol.StripAbbreviations()` - -* `Symbol.hasAttribute` --> now `symbol.HasAttribute<'T>()` - -* `Symbol.tryGetAttribute` --> now `symbol.TryGetAttribute<'T>()` - -* `TraverseStep` --> `SyntaxNode` in FSharp.Compiler.Syntax - -* ToolTips now only return the structured (TaggedText) tooltips. You can iterate to get the text tooltips - -##### Changes in `FSharp.Compiler.Text` - -* `Pos` --> `Position` - -##### Changes in `FSharp.Compiler.TextLayout` - -* Everything moves to `FSharp.Compiler.Text` - -* `LayoutTag` --> `TextTag` - -* `Layout` is now internal and replaced by `TaggedText[]` - -* `LayoutOps` is now internal - -##### Changes in `FSharp.Compiler.SyntaxTree` - -* Everything moves to namespace `FSharp.Compiler.Syntax` - -* `DebugPointAtBinding` is now RequireQualifiedAccess - -* `NoDebugPointAtStickyBinding` --> `DebugPointAtBinding.NoneAtSticky` - -* `Clause` --> `SynMatchClause` - -* `NormalBinding` -> `SynBindingKind.Normal` - -* `Binding` --> `SynBinding` - -* `Field` --> `SynField` - -* `UnionCase` --> `SynUnionCase` - -* `UnionCaseFullType` --> `SynUnionCaseKind.FullType` - -* `UnionCaseFields` --> `SynUnionCaseKind.Fields` - -* `MemberKind` --> `SynMemberKind` - -* `MemberFlags` --> `SynMemberFlags` - -* `TyconUnspecified` --> `SynTypeDefnKind.Unspecified` - -* `TyconClass` --> `SynTypeDefnKind.Class` - -* `TyconInterface` --> `SynTypeDefnKind.Interface` - -* `TyconStruct` --> `SynTypeDefnKind.Struct` - -* `TyconHiddenRepr` --> `SynTypeDefnKind.Opaque` - -* `TyconUnion` --> `SynTypeDefnKind.Union` - -* `TyconDelegate ` --> `SynTypeDefnKind.Delegate` - -* `ComponentInfo` --> `SynComponentInfo` - -* `TyconAugmentation` --> `SynTypeDefnKind.Augmentation` - -* `TypeDefnSig` --> `SynTypeDefnSig` - -* `HeadTypeStaticReq` --> `TyparStaticReq.HeadType` - -* `NoStaticReq` --> `TyparStaticReq.None` - -* `SynTypeConstraint` is now RequiresQualifiedAccess - -* `ValSpfn` --> `SynValSpfn` - -* `TyparDecl` --> `SynTyparDecl` - -* `Typar` --> `SynTypar` - -* `SynSimplePatAlternativeIdInfo` is now RequiresQualifiedAccess - -* `InterfaceImpl` --> `SynInterfaceImpl` - -* `SynBindingKind` is now RequiresQualifiedAccess - -* `DoBinding` --> `SynBindingKind.Do` - -* `StandaloneExpression` --> `SynBindingKind.StandaloneExpression` - -* `SynModuleOrNamespaceKind` is now RequiresQualifiedAccess - -* `IDefns` --> `ParsedScriptInteraction.Definitions` - -* `IHash ` --> `ParsedScriptInteraction.HashDirective` - -##### Other changes - -* `LegacyReferenceResolver` now marked obsolete - -### FSharp Compiler Service 39.0.0 - -This is a big update to FCS. There are significant trimmings and renamings of the API as a first step towards getting it under control with aims to eventually have a stable, sane public API surface area. - -Renamings: - -```diff --type FSharp.Compiler.AbstractIL.Internal.Library.IFileSystem -+type FSharp.Compiler.SourceCodeServices.IFileSystem - --module FSharp.Compiler.AbstractIL.Internal.Library.Shim -+FSharp.Compiler.SourceCodeServices.FileSystemAutoOpens - --type FSharp.Compiler.AbstractIL.Layout -+type FSharp.Compiler.TextLayout.Layout - --type FSharp.Compiler.AbstractIL.Internal.TaggedText -+type FSharp.Compiler.TextLayout.TaggedText - --type FSharp.Compiler.Layout.layout -+type FSharp.Compiler.TextLayout.layout - --type FSharp.Compiler.Layout.Layout -+FSharp.Compiler.TextLayout.Layout - --module FSharp.Compiler.Layout -+module FSharp.Compiler.TextLayout.LayoutRender - --module FSharp.Compiler.LayoutOps -+module FSharp.Compiler.TextLayout.Layout - --module FSharp.Compiler.Layout.TaggedText -+module FSharp.Compiler.TextLayout.TaggedText - --module FSharp.Compiler.Layout.TaggedTextOps -+FSharp.Compiler.TextLayout.TaggedText - --module FSharp.Compiler.Layout.TaggedTextOps.Literals -+FSharp.Compiler.TextLayout.TaggedText - --type FSharp.Compiler.Range.range -+FSharp.Compiler.Text.Range - --type FSharp.Compiler.Range.pos -+FSharp.Compiler.Text.Pos - --module FSharp.Compiler.Range.Range -+module FSharp.Compiler.Text.Pos -+module FSharp.Compiler.Text.Range - --module FSharp.Compiler.QuickParse -+module FSharp.Compiler.SourceCodeServices.QuickParse - --module FSharp.Compiler.PrettyNaming -+FSharp.Compiler.SourceCodeServices.PrettyNaming - --val FSharpKeywords.PrettyNaming.KeywordNames -+FSharp.Compiler.SourceCodeServices.FSharpKeywords.KeywordNames - --val FSharpKeywords.PrettyNaming.QuoteIdentifierIfNeeded -+FSharp.Compiler.SourceCodeServices.FSharpKeywords.QuoteIdentifierIfNeeded - --val FSharpKeywords.PrettyNaming.FormatAndOtherOverloadsString -+FSharp.Compiler.SourceCodeServices.FSharpKeywords.FormatAndOtherOverloadsString -``` - -Renamings in `FSharp.Compiler.SourceCodeServices`: - -```diff --Lexer.* -+FSharp.Compiler.SourceCodeServices.* - --FSharpSyntaxToken* -+FSharpToken* - --FSharpErrorInfo -+FSharpDiagnostic - --FSharpErrorSeverity -+FSharpDiagnosticSeverity - --ExternalSymbol -+FSharpExternalSymbol - --UnresolvedSymbol -+FSharpUnresolvedSymbol - --CompletionKind -+FSharpCompletionKind - --module Keywords -+module FSharpKeywords - -``` - -* Extension methods in `ServiceAssemblyContent.fsi` are now now intrinsic methods on the symbol types themselves. -* `SemanticClassificationType` is now an enum instead of a discriminated union. -* `GetBackgroundSemanticClassificationForFile` now returns `Async` instead of `Async`. The `SemanticClassificationView` provides a read-only view over the semantic classification contents via the `ForEach (FSharpSemanticClassificationItem -> unit) -> unit` function. - -The following namespaces have been made internal - -* `FSharp.Compiler.AbstractIL.*`, aside from a small hook for JetBrains Rider -* `FSharp.Compiler.ErrorLogger.*` - -New functions in the `SourceCodeServices` API: - -* `FSharpDiagnostic.NewlineifyErrorString` -* `FSharpDiagnostic.NormalizeErrorString` - ### F# 5 / Visual Studio 16.8 / .NET 5 This release covers three important milestones: F# 5, Visual Studio 16.8, and .NET 5. @@ -430,7 +32,7 @@ This release covers three important milestones: F# 5, Visual Studio 16.8, and .N ### FSharp Core 5.0.0 - +* [Performance improvement](https://github.com/dotnet/fsharp/pull/10188) to core collections Set and Map by [Victor Baybekov](https://github.com/buybackoff) * Consistent behavior for empty/non-existent slices for lists, strings, arrays, 2D arrays, 3D arrays, and 4D arrays * Support for fixed-index slices in 3D and 4D arrays * Support for negative indexes (in preview) @@ -463,14 +65,32 @@ This release covers three important milestones: F# 5, Visual Studio 16.8, and .N * Prevent assignment to `const` fields, by [Chet Husk](https://github.com/baronfel) * Compiler message improvements (especially for overload resolution) by [Gauthier Segay](https://github.com/smoothdeveloper), [Vladimir Shchur](https://github.com/Lanayx), and Microsoft -### FSharp Compiler Service 38.0.2 - -* Add FSharp.DependencyManager.Nuget as a project reference and ensure it is in the package, allowing other editors to consume `#r "nuget:..."` references at design-time [#10784](https://github.com/dotnet/fsharp/pull/10784) +### FSharp Compiler Service 39.0.0 +* Add ConvertToAnonymousRecord quick fixeroony [#10493](https://github.com/dotnet/fsharp/pull/10493) +* Add UseMutationWhenValueIsMutable code fix [#10488](https://github.com/dotnet/fsharp/pull/10488) +* Add MakeDeclarationMutable code fix [#10480](https://github.com/dotnet/fsharp/pull/10480) +* Add ChangeToUpcast code fix [#10463](https://github.com/dotnet/fsharp/pull/10463) +* Add AddMissingEqualsToTypeDefinition code fixer [#10470](https://github.com/dotnet/fsharp/pull/10470) +* Tag items in tooltips consistenly with respect to document classification. [#9563](https://github.com/dotnet/fsharp/pull/9563) +* Add ConvertToSingleEqualsEqualityExpression code fix [#10462](https://github.com/dotnet/fsharp/pull/10462) +* Turn XML doc and Sig<->Impl mismatch warnings on by default [#10457](https://github.com/dotnet/fsharp/pull/10457) +* Add ChangeRefCellDerefToNotExpression code fixer [#10469](https://github.com/dotnet/fsharp/pull/10469) +* Add WrapExpressionInParentheses code fix [#10460](https://github.com/dotnet/fsharp/pull/10460) +* Add ChangePrefixNegationToInfixSubtraction code fixeroo [#10471](https://github.com/dotnet/fsharp/pull/10471) +* Fix generic overloads with nullable [#10582](https://github.com/dotnet/fsharp/pull/10582) +* Resolve issue with implicit yields requiring Zero [#10556](https://github.com/dotnet/fsharp/pull/10556), by [Ryan Coy](https://github.com/laenas) +* Fix issue10550 FSI accessing System.Configuration. [#10572](https://github.com/dotnet/fsharp/pull/10572) +* Add field names to ILNativeType.Custom. [#10567](https://github.com/dotnet/fsharp/pull/10567), by [Scott Hutchinson](https://github.com/ScottHutchinson) +* Add field names to the ILExceptionClause.FilterCatch constructor. [#10559](https://github.com/dotnet/fsharp/pull/10559), by [Scott Hutchinson](https://github.com/ScottHutchinson) +* Fix completion with backticks, underscores, numbers [#10500](https://github.com/dotnet/fsharp/pull/10500), by [zanaptak](https://github.com/zanaptak) +* Emitting IsReadOnly/In attributes on abstract properties [#10542](https://github.com/dotnet/fsharp/pull/10542) +* Disable partial type checking when getting full results for a file [#10448](https://github.com/dotnet/fsharp/pull/10448) +* Fix unused open type declaration detection [#10510](https://github.com/dotnet/fsharp/pull/10510), by [André Slupik](https://github.com/asik) ### FSharp Compiler Service 38.0.1 -* Add check for system assemblies completion [#10575](https://github.com/dotnet/fsharp/pull/10575) +* add check for system assemblies completion [#10575](https://github.com/dotnet/fsharp/pull/10575) * Fix net sdk references discovery [#10569](https://github.com/dotnet/fsharp/pull/10569) -* Fix FSC nuget package dependencies [#10588](https://github.com/dotnet/fsharp/pull/10588) +* Fix FSC nuget package dependencies. [#10588](https://github.com/dotnet/fsharp/pull/10588) ### FSharp Compiler Service 38.0.0 @@ -481,7 +101,7 @@ The most notable change for FSharp.Compiler.Service is that it is now built and * Improvements to the F# syntax tree represtation by [Eugene Auduchinok](https://github.com/auduchinok) * Support for `const` in keyword completion info by [Alex Berezhnykh](https://github.com/DedSec256) * Support for passing in a `PrimaryAssembly` for AST compilation routines by [Eirik Tsarpalis](https://github.com/eiriktsarpalis) -* Support for `ToString` in `FSharp.Compiler.SourceCodeServices.StringText` by [Asti](https://github.com/deviousasti) +* Support for `ToString` in `FSharp.Compiler.Text.StringText` by [Asti](https://github.com/deviousasti) * Fix an issue with equality comparisons for `StringText` by [Asti](https://github.com/deviousasti) Significant changes for consumers: @@ -859,7 +479,7 @@ Significant improvements in the F# tools, such as performance enhancements and s There is now an experimental CodeLens implementation, contributed by [Victor Peter Rouven Müller](https://github.com/realvictorprm). You can turn it on in **Options > Text Editor > F# > Code Lens**. * A bug where the F# compiler service would incorrectly elide the module names in XML documentation has been fixed by [Sebastian Urban](https://github.com/surban). * Code that uses `Dictionary` with `ContainsKey` and subsequent `Item` calls has been changed to use `TryGetValue`, by [Eugene Auduchinok](https://github.com/auduchinok). -* [Jakob Majoka](https://github.com/majocha) also contributed in the process of consuming a different API for FSharpToolTip. +* [Jakob Majoka](https://github.com/majocha) also contributed in the process of consuming a different API for Tooltips. #### Infrastructure, Packaging, and Open Source Improvements @@ -1123,7 +743,7 @@ Integrate dotnet/fsharp from 48f932cf8 to 085985140. Notable changes include: * Integrate dotnet/fsharp from 5a8f454a1 to 05c558a61 * Notable changes include: * Removal of the `Microsoft.FSharp.Compiler.SourceCodeServices` namespace - * A new API for determining if an identifier needs to be quoted is available: `FSharp.Compiler.LexHelp.FSharpKeywords.DoesIdentifierNeedQuotation` + * A new API for determining if an identifier needs to be quoted is available: `FSharp.Compiler.LexHelp.Keywords.DoesIdentifierNeedQuotation` * Enhancements to the correctness of PDBs * Better string formatting of records and values * More stack overflow fixes in the compiler @@ -1433,7 +1053,7 @@ Integrate dotnet/fsharp from 48f932cf8 to 085985140. Notable changes include: * Integrate visualfsharp/master and fsharp/master --> master * Expose QualifiedName and FileName of FSharpImplementationFileContents -* Add FSharpDiagnostic.ErrorNumber +* Add FSharpErrorInfo.ErrorNumber ### 2.0.0.1-beta diff --git a/setup/Swix/Microsoft.FSharp.Compiler.MSBuild/Microsoft.FSharp.Compiler.MSBuild.csproj b/setup/Swix/Microsoft.FSharp.Compiler.MSBuild/Microsoft.FSharp.Compiler.MSBuild.csproj index 5ebc1fe5ea4..53580c811cb 100644 --- a/setup/Swix/Microsoft.FSharp.Compiler.MSBuild/Microsoft.FSharp.Compiler.MSBuild.csproj +++ b/setup/Swix/Microsoft.FSharp.Compiler.MSBuild/Microsoft.FSharp.Compiler.MSBuild.csproj @@ -8,12 +8,11 @@ - + - - + - + <_Line> @@ -62,7 +63,11 @@ folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\Tools\%(_XlfLan - + <_Lines> @@ -76,40 +81,36 @@ vs.dependencies version=$(VsixVersion) type=Required -folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\Tools" - file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\fsc.exe" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 vs.file.ngenApplication="[installDir]\Common7\IDE\CommonExtensions\Microsoft\FSharp\Tools\fsc.exe" - file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\fsc.exe.config" - file source="$(BinariesFolder)fsi\$(Configuration)\$(TargetFramework)\fsi.exe" vs.file.ngen=yes vs.file.ngenArchitecture=X86 vs.file.ngenPriority=2 vs.file.ngenApplication="[installDir]\Common7\IDE\CommonExtensions\Microsoft\FSharp\Tools\fsi.exe" - file source="$(BinariesFolder)fsi\$(Configuration)\$(TargetFramework)\fsi.exe.config" - file source="$(BinariesFolder)fsiAnyCpu\$(Configuration)\$(TargetFramework)\fsiAnyCpu.exe" vs.file.ngen=yes vs.file.ngenArchitecture=X64 vs.file.ngenPriority=2 vs.file.ngenApplication="[installDir]\Common7\IDE\CommonExtensions\Microsoft\FSharp\Tools\fsiAnyCpu.exe" - file source="$(BinariesFolder)fsiAnyCpu\$(Configuration)\$(TargetFramework)\fsiAnyCpu.exe.config" - file source="$(BinariesFolder)FSharp.Compiler.Interactive.Settings\$(Configuration)\netstandard2.0\FSharp.Compiler.Interactive.Settings.dll" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 - file source="$(BinariesFolder)FSharp.Compiler.Interactive.Settings\$(Configuration)\netstandard2.0\FSharp.Compiler.Interactive.Settings.xml" - file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\FSharp.Compiler.Service.dll" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 - file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\FSharp.Compiler.Service.xml" - file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\System.Buffers.dll" - file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\System.Collections.Immutable.dll" - file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\System.Memory.dll" - file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\System.Numerics.Vectors.dll" - file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\System.Reflection.Metadata.dll" - file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\System.Resources.Extensions.dll" - file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\System.Runtime.CompilerServices.Unsafe.dll" - file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\System.Threading.Tasks.Dataflow.dll" - file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\Microsoft.Build.Framework.dll" - file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\Microsoft.Build.Tasks.Core.dll" - file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\Microsoft.Build.Utilities.Core.dll" - file source="$(BinariesFolder)FSharp.Compiler.Server.Shared\$(Configuration)\$(TargetFramework)\FSharp.Compiler.Server.Shared.dll" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 - file source="$(BinariesFolder)FSharp.Core\$(Configuration)\netstandard2.0\FSharp.Core.dll" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 - file source="$(BinariesFolder)FSharp.Core\$(Configuration)\netstandard2.0\FSharp.Core.xml" - file source="$(BinariesFolder)FSharp.Build\$(Configuration)\netstandard2.0\FSharp.Build.dll" vs.file.ngen=no vs.file.ngenArchitecture=All vs.file.ngenPriority=2 - file source="$(BinariesFolder)FSharp.Build\$(Configuration)\netstandard2.0\FSharp.Build.xml" - file source="$(BinariesFolder)FSharp.DependencyManager.Nuget\$(Configuration)\netstandard2.0\FSharp.DependencyManager.Nuget.dll" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 - file source="$(BinariesFolder)FSharp.DependencyManager.Nuget\$(Configuration)\netstandard2.0\FSharp.DependencyManager.Nuget.xml" - file source="$(BinariesFolder)FSharp.Build\$(Configuration)\netstandard2.0\Microsoft.Portable.FSharp.Targets" - file source="$(BinariesFolder)FSharp.Build\$(Configuration)\netstandard2.0\Microsoft.FSharp.NetSdk.props" - file source="$(BinariesFolder)FSharp.Build\$(Configuration)\netstandard2.0\Microsoft.FSharp.NetSdk.targets" - file source="$(BinariesFolder)FSharp.Build\$(Configuration)\netstandard2.0\Microsoft.FSharp.Overrides.NetSdk.targets" - file source="$(BinariesFolder)FSharp.Build\$(Configuration)\netstandard2.0\Microsoft.FSharp.Targets" +folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp" + file source="$(BinariesFolder)\fsc\$(Configuration)\$(TargetFramework)\fsc.exe" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 vs.file.ngenApplication="[installDir]\Common7\IDE\CommonExtensions\Microsoft\FSharp\fsc.exe" + file source="$(BinariesFolder)\fsc\$(Configuration)\$(TargetFramework)\fsc.exe.config" + file source="$(BinariesFolder)\fsi\$(Configuration)\$(TargetFramework)\fsi.exe" vs.file.ngen=yes vs.file.ngenArchitecture=X86 vs.file.ngenPriority=2 vs.file.ngenApplication="[installDir]\Common7\IDE\CommonExtensions\Microsoft\FSharp\fsi.exe" + file source="$(BinariesFolder)\fsi\$(Configuration)\$(TargetFramework)\fsi.exe.config" + file source="$(BinariesFolder)\fsiAnyCpu\$(Configuration)\$(TargetFramework)\fsiAnyCpu.exe" vs.file.ngen=yes vs.file.ngenArchitecture=X64 vs.file.ngenPriority=2 vs.file.ngenApplication="[installDir]\Common7\IDE\CommonExtensions\Microsoft\FSharp\fsiAnyCpu.exe" + file source="$(BinariesFolder)\fsiAnyCpu\$(Configuration)\$(TargetFramework)\fsiAnyCpu.exe.config" + file source="$(BinariesFolder)\FSharp.Compiler.Interactive.Settings\$(Configuration)\netstandard2.0\FSharp.Compiler.Interactive.Settings.dll" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 + file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\FSharp.Compiler.Private.dll" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 + file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\System.Buffers.dll" + file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\System.Collections.Immutable.dll" + file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\System.Memory.dll" + file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\System.Numerics.Vectors.dll" + file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\System.Reflection.Metadata.dll" + file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\System.Resources.Extensions.dll" + file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\System.Runtime.CompilerServices.Unsafe.dll" + file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\System.Threading.Tasks.Dataflow.dll" + file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\Microsoft.Build.Framework.dll" + file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\Microsoft.Build.Tasks.Core.dll" + file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\Microsoft.Build.Utilities.Core.dll" + file source="$(BinariesFolder)\FSharp.Compiler.Server.Shared\$(Configuration)\$(TargetFramework)\FSharp.Compiler.Server.Shared.dll" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 + file source="$(BinariesFolder)\FSharp.Core\$(Configuration)\netstandard2.0\FSharp.Core.dll" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 + file source="$(BinariesFolder)\FSharp.Core\$(Configuration)\netstandard2.0\FSharp.Core.xml" + file source="$(BinariesFolder)\FSharp.Build\$(Configuration)\netstandard2.0\FSharp.Build.dll" vs.file.ngen=no vs.file.ngenArchitecture=All vs.file.ngenPriority=2 + file source="$(BinariesFolder)\FSharp.Build\$(Configuration)\netstandard2.0\Microsoft.Portable.FSharp.Targets" + file source="$(BinariesFolder)\FSharp.Build\$(Configuration)\netstandard2.0\Microsoft.FSharp.NetSdk.props" + file source="$(BinariesFolder)\FSharp.Build\$(Configuration)\netstandard2.0\Microsoft.FSharp.NetSdk.targets" + file source="$(BinariesFolder)\FSharp.Build\$(Configuration)\netstandard2.0\Microsoft.FSharp.Overrides.NetSdk.targets" + file source="$(BinariesFolder)\FSharp.Build\$(Configuration)\netstandard2.0\Microsoft.FSharp.Targets" + file source="$(BinariesFolder)\Microsoft.DotNet.DependencyManager\$(Configuration)\net472\Microsoft.DotNet.DependencyManager.dll" vs.file.ngen=no vs.file.ngenArchitecture=All vs.file.ngenPriority=2 @(_BuiltSwrLines) ]]> diff --git a/setup/Swix/Microsoft.FSharp.Dependencies/fsharp.bat b/setup/Swix/Microsoft.FSharp.Dependencies/fsharp.bat index 0090e8ce5fc..adbadf3f819 100644 --- a/setup/Swix/Microsoft.FSharp.Dependencies/fsharp.bat +++ b/setup/Swix/Microsoft.FSharp.Dependencies/fsharp.bat @@ -1,7 +1,7 @@ if "%VSCMD_TEST%" NEQ "" goto :test if "%VSCMD_ARG_CLEAN_ENV%" NEQ "" goto :clean_env -set FSHARPINSTALLDIR=%VSINSTALLDIR%Common7\IDE\CommonExtensions\Microsoft\FSharp\Tools +set FSHARPINSTALLDIR=%VSINSTALLDIR%Common7\IDE\CommonExtensions\Microsoft\FSharp\ set "PATH=%FSHARPINSTALLDIR%;%PATH%" goto :end diff --git a/setup/Swix/Microsoft.FSharp.IDE/Microsoft.FSharp.IDE.csproj b/setup/Swix/Microsoft.FSharp.IDE/Microsoft.FSharp.IDE.csproj index 834d95d3bf1..88cc12d66fd 100644 --- a/setup/Swix/Microsoft.FSharp.IDE/Microsoft.FSharp.IDE.csproj +++ b/setup/Swix/Microsoft.FSharp.IDE/Microsoft.FSharp.IDE.csproj @@ -16,7 +16,8 @@ <_Dependency Include="FSharp.Build" Version="$(FSProductVersion)" /> <_Dependency Include="FSharp.Compiler.Interactive.Settings" Version="$(FSProductVersion)" /> - <_Dependency Include="FSharp.Compiler.Service" Version="$(FSharpCompilerServiceVersion)" /> + <_Dependency Include="FSharp.Compiler.Private" Version="$(FSProductVersion)" /> + <_Dependency Include="Microsoft.DotNet.DependencyManager" Version="$(FSProductVersion)" /> <_Dependency Include="FSharp.DependencyManager.Nuget" Version="$(FSProductVersion)" /> <_Dependency Include="FSharp.Compiler.Server.Shared" Version="$(FSProductVersion)" /> <_Dependency Include="FSharp.Core" Version="$(FSCoreVersion)" /> @@ -31,7 +32,8 @@ <_Dependency Include="FSharp.VS.FSI" Version="$(VSAssemblyVersion)" /> - + $(InsertionDir)\DevDivPackages $(DevDivPackagesDir)\DependentAssemblyVersions.csv @@ -45,4 +47,4 @@ - \ No newline at end of file + diff --git a/setup/Swix/Microsoft.FSharp.IDE/Package.swr b/setup/Swix/Microsoft.FSharp.IDE/Package.swr index ea75aebf1da..8184815f837 100644 --- a/setup/Swix/Microsoft.FSharp.IDE/Package.swr +++ b/setup/Swix/Microsoft.FSharp.IDE/Package.swr @@ -8,10 +8,6 @@ vs.dependencies version=$(VsixVersion) type=Required - vs.dependency id=Microsoft.FSharp.Compiler - version=$(VsixVersion) - type=Required - vs.dependency id=Microsoft.FSharp.VSIX.Full.Core version=$(VsixVersion) type=Required @@ -24,4 +20,4 @@ folder "InstallDir:Common7\IDE\NewScriptItems" folder "InstallDir:Common7\IDE\NewFileItems" file source="$(SetupResourcesDir)\NewFileDialog\General\NewFSharpFileItems.vsdir" file source="$(SetupResourcesDir)\NewFileDialog\General\File.fs" - file source="$(SetupResourcesDir)\NewFileDialog\General\Script.fsx" \ No newline at end of file + file source="$(SetupResourcesDir)\NewFileDialog\General\Script.fsx" diff --git a/setup/shims/Microsoft.FSharp.NetSdk.Shim.props b/setup/shims/Microsoft.FSharp.NetSdk.Shim.props index 28907c3c23c..203b37e5734 100644 --- a/setup/shims/Microsoft.FSharp.NetSdk.Shim.props +++ b/setup/shims/Microsoft.FSharp.NetSdk.Shim.props @@ -1,6 +1,6 @@ - + diff --git a/setup/shims/Microsoft.FSharp.NetSdk.Shim.targets b/setup/shims/Microsoft.FSharp.NetSdk.Shim.targets index b9e0ea907e3..f5212ec914a 100644 --- a/setup/shims/Microsoft.FSharp.NetSdk.Shim.targets +++ b/setup/shims/Microsoft.FSharp.NetSdk.Shim.targets @@ -1,6 +1,6 @@ - + diff --git a/setup/shims/Microsoft.FSharp.Overrides.NetSdk.Shim.targets b/setup/shims/Microsoft.FSharp.Overrides.NetSdk.Shim.targets index cfd530eefd4..c7c7b8a477b 100644 --- a/setup/shims/Microsoft.FSharp.Overrides.NetSdk.Shim.targets +++ b/setup/shims/Microsoft.FSharp.Overrides.NetSdk.Shim.targets @@ -1,6 +1,6 @@ - + diff --git a/setup/shims/Microsoft.FSharp.Shim.targets b/setup/shims/Microsoft.FSharp.Shim.targets index 53acced723e..62b798f5e78 100644 --- a/setup/shims/Microsoft.FSharp.Shim.targets +++ b/setup/shims/Microsoft.FSharp.Shim.targets @@ -1,6 +1,6 @@ - + diff --git a/setup/shims/Microsoft.Portable.FSharp.Shim.targets b/setup/shims/Microsoft.Portable.FSharp.Shim.targets index f24c26561d8..5aecfd384fa 100644 --- a/setup/shims/Microsoft.Portable.FSharp.Shim.targets +++ b/setup/shims/Microsoft.Portable.FSharp.Shim.targets @@ -1,6 +1,6 @@ - + diff --git a/src/buildtools/AssemblyCheck/AssemblyCheck.fs b/src/buildtools/AssemblyCheck/AssemblyCheck.fs index a4f916e2f49..9eb04a3087d 100644 --- a/src/buildtools/AssemblyCheck/AssemblyCheck.fs +++ b/src/buildtools/AssemblyCheck/AssemblyCheck.fs @@ -15,52 +15,35 @@ module AssemblyCheck = let private devVersionPattern = new Regex(@"-(ci|dev)", RegexOptions.Compiled) let verifyEmbeddedPdb (filename:string) = - let isManagedDll = - try - // Is il assembly? throws if not - let _ = AssemblyName.GetAssemblyName(filename).Version - true - with - | :? System.BadImageFormatException -> false // uninterested in embedded pdbs for native dlls - - if isManagedDll then - use fileStream = File.OpenRead(filename) - let reader = new PEReader(fileStream) - let mutable hasEmbeddedPdb = false - - try - for entry in reader.ReadDebugDirectory() do - match entry.Type with - | DebugDirectoryEntryType.CodeView -> - let _ = reader.ReadCodeViewDebugDirectoryData(entry) - () - - | DebugDirectoryEntryType.EmbeddedPortablePdb -> - let _ = reader.ReadEmbeddedPortablePdbDebugDirectoryData(entry) - hasEmbeddedPdb <- true - () - - | DebugDirectoryEntryType.PdbChecksum -> - let _ = reader.ReadPdbChecksumDebugDirectoryData(entry) - () - - | _ -> () - with - | e -> printfn "Error validating assembly %s\nMessage: %s" filename (e.ToString()) - - hasEmbeddedPdb - else - true + use fileStream = File.OpenRead(filename) + let reader = new PEReader(fileStream) + let mutable hasEmbeddedPdb = false + + try + for entry in reader.ReadDebugDirectory() do + match entry.Type with + | DebugDirectoryEntryType.CodeView -> + let _ = reader.ReadCodeViewDebugDirectoryData(entry) + () + + | DebugDirectoryEntryType.EmbeddedPortablePdb -> + let _ = reader.ReadEmbeddedPortablePdbDebugDirectoryData(entry) + hasEmbeddedPdb <- true + () + + | DebugDirectoryEntryType.PdbChecksum -> + let _ = reader.ReadPdbChecksumDebugDirectoryData(entry) + () + + | _ -> () + with | e -> printfn "Error validating assembly %s\nMessage: %s" filename (e.ToString()) + hasEmbeddedPdb let verifyAssemblies (binariesPath:string) = let excludedAssemblies = [ ] |> Set.ofList - let maybeNativeExe = - [ "fsi.exe" - "fsc.exe" ] |> Set.ofList - let fsharpAssemblies = [ "FSharp*.dll" "fsc.exe" @@ -80,12 +63,8 @@ module AssemblyCheck = let failedVersionCheck = fsharpAssemblies |> List.filter (fun a -> - try - let assemblyVersion = AssemblyName.GetAssemblyName(a).Version - assemblyVersion = versionZero || assemblyVersion = versionOne - with | :? System.BadImageFormatException -> - // fsc.exe and fsi.exe are il on the desktop and native on the coreclr - Set.contains (Path.GetFileName(a)) maybeNativeExe |> not) + let assemblyVersion = AssemblyName.GetAssemblyName(a).Version + assemblyVersion = versionZero || assemblyVersion = versionOne) if failedVersionCheck.Length > 0 then printfn "The following assemblies had a version of %A or %A" versionZero versionOne diff --git a/src/buildtools/AssemblyCheck/AssemblyCheck.fsproj b/src/buildtools/AssemblyCheck/AssemblyCheck.fsproj index 464b6ef78c8..be43696d78c 100644 --- a/src/buildtools/AssemblyCheck/AssemblyCheck.fsproj +++ b/src/buildtools/AssemblyCheck/AssemblyCheck.fsproj @@ -2,7 +2,7 @@ Exe - net5.0 + netcoreapp3.1 true diff --git a/src/buildtools/fslex/Arg.fs b/src/buildtools/fslex/Arg.fs index b1131625cf3..a1f63bd9638 100644 --- a/src/buildtools/fslex/Arg.fs +++ b/src/buildtools/fslex/Arg.fs @@ -52,13 +52,13 @@ type ArgParser() = sbuf.ToString() - static member ParsePartial(cursor,argv,arguments:seq,?otherArgs,?usageText) = - let otherArgs = defaultArg otherArgs (fun _ -> ()) + static member ParsePartial(cursor,argv,argSpecs:seq,?other,?usageText) = + let other = defaultArg other (fun _ -> ()) let usageText = defaultArg usageText "" let nargs = Array.length argv incr cursor; - let arguments = arguments |> Seq.toList - let specs = arguments |> List.map (fun (arg:ArgInfo) -> arg.Name, arg.ArgType) + let argSpecs = argSpecs |> Seq.toList + let specs = argSpecs |> List.map (fun (arg:ArgInfo) -> arg.Name, arg.ArgType) while !cursor < nargs do let arg = argv.[!cursor] let rec findMatchingArg args = @@ -66,7 +66,7 @@ type ArgParser() = | ((s, action) :: _) when s = arg -> let getSecondArg () = if !cursor + 1 >= nargs then - raise(Bad("option "+s+" needs an argument.\n"+getUsage arguments usageText)); + raise(Bad("option "+s+" needs an argument.\n"+getUsage argSpecs usageText)); argv.[!cursor+1] match action with @@ -85,12 +85,12 @@ type ArgParser() = cursor := !cursor + 2 | IntArg f -> let arg2 = getSecondArg () - let arg2 = try int32 arg2 with _ -> raise(Bad(getUsage arguments usageText)) in + let arg2 = try int32 arg2 with _ -> raise(Bad(getUsage argSpecs usageText)) in f arg2; cursor := !cursor + 2; | FloatArg f -> let arg2 = getSecondArg() - let arg2 = try float arg2 with _ -> raise(Bad(getUsage arguments usageText)) in + let arg2 = try float arg2 with _ -> raise(Bad(getUsage argSpecs usageText)) in f arg2; cursor := !cursor + 2; | RestArg f -> @@ -102,26 +102,26 @@ type ArgParser() = | (_ :: more) -> findMatchingArg more | [] -> if arg = "-help" || arg = "--help" || arg = "/help" || arg = "/help" || arg = "/?" then - raise (HelpText (getUsage arguments usageText)) + raise (HelpText (getUsage argSpecs usageText)) // Note: for '/abc/def' does not count as an argument // Note: '/abc' does elif arg.Length>0 && (arg.[0] = '-' || (arg.[0] = '/' && not (arg.Length > 1 && arg.[1..].Contains ("/")))) then - raise (Bad ("unrecognized argument: "+ arg + "\n" + getUsage arguments usageText)) + raise (Bad ("unrecognized argument: "+ arg + "\n" + getUsage argSpecs usageText)) else - otherArgs arg; + other arg; incr cursor findMatchingArg specs - static member Usage (arguments,?usage) = + static member Usage (specs,?usage) = let usage = defaultArg usage "" - System.Console.Error.WriteLine (getUsage (Seq.toList arguments) usage) + System.Console.Error.WriteLine (getUsage (Seq.toList specs) usage) #if FX_NO_COMMAND_LINE_ARGS #else - static member Parse (arguments,?otherArgs,?usageText) = + static member Parse (specs,?other,?usageText) = let current = ref 0 let argv = System.Environment.GetCommandLineArgs() - try ArgParser.ParsePartial (current, argv, arguments, ?otherArgs=otherArgs, ?usageText=usageText) + try ArgParser.ParsePartial (current, argv, specs, ?other=other, ?usageText=usageText) with | Bad h | HelpText h -> diff --git a/src/buildtools/fslex/Parsing.fsi b/src/buildtools/fslex/Parsing.fsi index f4d12606462..2fef45975a8 100644 --- a/src/buildtools/fslex/Parsing.fsi +++ b/src/buildtools/fslex/Parsing.fsi @@ -100,7 +100,7 @@ type Tables<'tok> = /// Interpret the parser table taking input from the given lexer, using the given lex buffer, and the given start state. /// Returns an object indicating the final synthesized value for the parse. - member Interpret : lexer:(LexBuffer<'char> -> 'tok) * lexbuf:LexBuffer<'char> * initialState:int -> obj + member Interpret : lexer:(LexBuffer<'char> -> 'tok) * lexbuf:LexBuffer<'char> * startState:int -> obj #if INTERNALIZED_FSLEXYACC_RUNTIME exception internal Accept of obj diff --git a/src/buildtools/fslex/fslex.fsproj b/src/buildtools/fslex/fslex.fsproj index 1959ce59c00..da7c52ba13e 100644 --- a/src/buildtools/fslex/fslex.fsproj +++ b/src/buildtools/fslex/fslex.fsproj @@ -2,7 +2,7 @@ Exe - net5.0 + netcoreapp3.1 INTERNALIZED_FSLEXYACC_RUNTIME;$(DefineConstants) true diff --git a/src/buildtools/fsyacc/Arg.fs b/src/buildtools/fsyacc/Arg.fs index b1131625cf3..a1f63bd9638 100644 --- a/src/buildtools/fsyacc/Arg.fs +++ b/src/buildtools/fsyacc/Arg.fs @@ -52,13 +52,13 @@ type ArgParser() = sbuf.ToString() - static member ParsePartial(cursor,argv,arguments:seq,?otherArgs,?usageText) = - let otherArgs = defaultArg otherArgs (fun _ -> ()) + static member ParsePartial(cursor,argv,argSpecs:seq,?other,?usageText) = + let other = defaultArg other (fun _ -> ()) let usageText = defaultArg usageText "" let nargs = Array.length argv incr cursor; - let arguments = arguments |> Seq.toList - let specs = arguments |> List.map (fun (arg:ArgInfo) -> arg.Name, arg.ArgType) + let argSpecs = argSpecs |> Seq.toList + let specs = argSpecs |> List.map (fun (arg:ArgInfo) -> arg.Name, arg.ArgType) while !cursor < nargs do let arg = argv.[!cursor] let rec findMatchingArg args = @@ -66,7 +66,7 @@ type ArgParser() = | ((s, action) :: _) when s = arg -> let getSecondArg () = if !cursor + 1 >= nargs then - raise(Bad("option "+s+" needs an argument.\n"+getUsage arguments usageText)); + raise(Bad("option "+s+" needs an argument.\n"+getUsage argSpecs usageText)); argv.[!cursor+1] match action with @@ -85,12 +85,12 @@ type ArgParser() = cursor := !cursor + 2 | IntArg f -> let arg2 = getSecondArg () - let arg2 = try int32 arg2 with _ -> raise(Bad(getUsage arguments usageText)) in + let arg2 = try int32 arg2 with _ -> raise(Bad(getUsage argSpecs usageText)) in f arg2; cursor := !cursor + 2; | FloatArg f -> let arg2 = getSecondArg() - let arg2 = try float arg2 with _ -> raise(Bad(getUsage arguments usageText)) in + let arg2 = try float arg2 with _ -> raise(Bad(getUsage argSpecs usageText)) in f arg2; cursor := !cursor + 2; | RestArg f -> @@ -102,26 +102,26 @@ type ArgParser() = | (_ :: more) -> findMatchingArg more | [] -> if arg = "-help" || arg = "--help" || arg = "/help" || arg = "/help" || arg = "/?" then - raise (HelpText (getUsage arguments usageText)) + raise (HelpText (getUsage argSpecs usageText)) // Note: for '/abc/def' does not count as an argument // Note: '/abc' does elif arg.Length>0 && (arg.[0] = '-' || (arg.[0] = '/' && not (arg.Length > 1 && arg.[1..].Contains ("/")))) then - raise (Bad ("unrecognized argument: "+ arg + "\n" + getUsage arguments usageText)) + raise (Bad ("unrecognized argument: "+ arg + "\n" + getUsage argSpecs usageText)) else - otherArgs arg; + other arg; incr cursor findMatchingArg specs - static member Usage (arguments,?usage) = + static member Usage (specs,?usage) = let usage = defaultArg usage "" - System.Console.Error.WriteLine (getUsage (Seq.toList arguments) usage) + System.Console.Error.WriteLine (getUsage (Seq.toList specs) usage) #if FX_NO_COMMAND_LINE_ARGS #else - static member Parse (arguments,?otherArgs,?usageText) = + static member Parse (specs,?other,?usageText) = let current = ref 0 let argv = System.Environment.GetCommandLineArgs() - try ArgParser.ParsePartial (current, argv, arguments, ?otherArgs=otherArgs, ?usageText=usageText) + try ArgParser.ParsePartial (current, argv, specs, ?other=other, ?usageText=usageText) with | Bad h | HelpText h -> diff --git a/src/buildtools/fsyacc/Parsing.fsi b/src/buildtools/fsyacc/Parsing.fsi index f4d12606462..2fef45975a8 100644 --- a/src/buildtools/fsyacc/Parsing.fsi +++ b/src/buildtools/fsyacc/Parsing.fsi @@ -100,7 +100,7 @@ type Tables<'tok> = /// Interpret the parser table taking input from the given lexer, using the given lex buffer, and the given start state. /// Returns an object indicating the final synthesized value for the parse. - member Interpret : lexer:(LexBuffer<'char> -> 'tok) * lexbuf:LexBuffer<'char> * initialState:int -> obj + member Interpret : lexer:(LexBuffer<'char> -> 'tok) * lexbuf:LexBuffer<'char> * startState:int -> obj #if INTERNALIZED_FSLEXYACC_RUNTIME exception internal Accept of obj diff --git a/src/buildtools/fsyacc/fsyacc.fsproj b/src/buildtools/fsyacc/fsyacc.fsproj index 5d1b7141f47..a2b8cb3844e 100644 --- a/src/buildtools/fsyacc/fsyacc.fsproj +++ b/src/buildtools/fsyacc/fsyacc.fsproj @@ -2,7 +2,7 @@ Exe - net5.0 + netcoreapp3.1 INTERNALIZED_FSLEXYACC_RUNTIME;$(DefineConstants) true diff --git a/src/fsharp/AccessibilityLogic.fs b/src/fsharp/AccessibilityLogic.fs index bda68abc118..2a031949e7d 100644 --- a/src/fsharp/AccessibilityLogic.fs +++ b/src/fsharp/AccessibilityLogic.fs @@ -7,10 +7,10 @@ open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Infos -open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.TcGlobals #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping diff --git a/src/fsharp/AccessibilityLogic.fsi b/src/fsharp/AccessibilityLogic.fsi index 7169ce9774e..55fa500f1b2 100644 --- a/src/fsharp/AccessibilityLogic.fsi +++ b/src/fsharp/AccessibilityLogic.fsi @@ -7,9 +7,9 @@ open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler open FSharp.Compiler.Import open FSharp.Compiler.Infos -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text open FSharp.Compiler.TypedTree +open FSharp.Compiler.Range +open FSharp.Compiler.TcGlobals /// Represents the 'keys' a particular piece of code can use to access other constructs?. [] diff --git a/src/fsharp/AttributeChecking.fs b/src/fsharp/AttributeChecking.fs index f8a3f4f34dd..58c69ef404e 100644 --- a/src/fsharp/AttributeChecking.fs +++ b/src/fsharp/AttributeChecking.fs @@ -6,19 +6,20 @@ module internal FSharp.Compiler.AttributeChecking open System open System.Collections.Generic -open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal.Library + open FSharp.Compiler +open FSharp.Compiler.Range open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Infos -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.TcGlobals #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping -open FSharp.Core.CompilerServices +open Microsoft.FSharp.Core.CompilerServices #endif exception ObsoleteWarning of string * range @@ -98,8 +99,8 @@ type AttribInfo = let ty = tyOfExpr g origExpr let obj = evalFSharpAttribArg g evaluatedExpr ty, obj) - | ILAttribInfo (_g, amap, scoref, cattr, m) -> - let parms, _args = decodeILAttribData cattr + | ILAttribInfo (g, amap, scoref, cattr, m) -> + let parms, _args = decodeILAttribData g.ilg cattr [ for (argty, argval) in Seq.zip cattr.Method.FormalArgTypes parms -> let ty = ImportILType scoref amap m [] argty let obj = evalILAttribElem argval @@ -113,8 +114,8 @@ type AttribInfo = let ty = tyOfExpr g origExpr let obj = evalFSharpAttribArg g evaluatedExpr ty, nm, isField, obj) - | ILAttribInfo (_g, amap, scoref, cattr, m) -> - let _parms, namedArgs = decodeILAttribData cattr + | ILAttribInfo (g, amap, scoref, cattr, m) -> + let _parms, namedArgs = decodeILAttribData g.ilg cattr [ for (nm, argty, isProp, argval) in namedArgs -> let ty = ImportILType scoref amap m [] argty let obj = evalILAttribElem argval @@ -198,7 +199,7 @@ let TryBindMethInfoAttribute g (m: range) (AttribInfo(atref, _) as attribSpec) m ignore f3 #endif BindMethInfoAttributes m minfo - (fun ilAttribs -> TryDecodeILAttribute atref ilAttribs |> Option.bind f1) + (fun ilAttribs -> TryDecodeILAttribute g atref ilAttribs |> Option.bind f1) (fun fsAttribs -> TryFindFSharpAttribute g attribSpec fsAttribs |> Option.bind f2) #if !NO_EXTENSIONTYPING (fun provAttribs -> @@ -230,7 +231,7 @@ let MethInfoHasAttribute g m attribSpec minfo = /// Check IL attributes for 'ObsoleteAttribute', returning errors and warnings as data let private CheckILAttributes (g: TcGlobals) isByrefLikeTyconRef cattrs m = let (AttribInfo(tref,_)) = g.attrib_SystemObsolete - match TryDecodeILAttribute tref cattrs with + match TryDecodeILAttribute g tref cattrs with | Some ([ILAttribElem.String (Some msg) ], _) when not isByrefLikeTyconRef -> WarnD(ObsoleteWarning(msg, m)) | Some ([ILAttribElem.String (Some msg); ILAttribElem.Bool isError ], _) when not isByrefLikeTyconRef -> @@ -329,7 +330,7 @@ let private CheckProvidedAttributes (g: TcGlobals) m (provAttribs: Tainted List.foldBack (fun e acc -> let nv, ne = mkCompGenLocal m "n" g.int_ty mkCompGenLet m nv e - (mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m g.int_ty + (mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m g.int_ty (mkClt g m ne (mkZero g m)) ne - (mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m g.int_ty + (mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m g.int_ty (mkCgt g m ne (mkZero g m)) ne acc))) @@ -172,7 +172,7 @@ let mkEqualsTestConjuncts g m exprs = | [h] -> h | l -> let a, b = List.frontAndBack l - List.foldBack (fun e acc -> mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m g.bool_ty e acc (mkFalse g m)) a b + List.foldBack (fun e acc -> mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m g.bool_ty e acc (mkFalse g m)) a b let mkMinimalTy (g: TcGlobals) (tcref: TyconRef) = if tcref.Deref.IsExceptionDecl then [], g.exn_ty @@ -301,7 +301,7 @@ let mkExnEquality (g: TcGlobals) exnref (exnc: Tycon) = (mkExnCaseFieldGet(thate, exnref, i, m)) let expr = mkEqualsTestConjuncts g m (List.mapi mkTest exnc.AllInstanceFieldsAsList) let expr = - let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m ) + let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m ) let cases = [ mkCase(DecisionTreeTest.IsInst(g.exn_ty, mkAppTy exnref []), mbuilder.AddResultTarget(expr, DebugPointForTarget.No)) ] @@ -324,7 +324,7 @@ let mkExnEqualityWithComparer g exnref (exnc: Tycon) (_thisv, thise) thatobje (t (mkExnCaseFieldGet(thataddre, exnref, i, m)) let expr = mkEqualsTestConjuncts g m (List.mapi mkTest exnc.AllInstanceFieldsAsList) let expr = - let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m ) + let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m ) let cases = [ mkCase(DecisionTreeTest.IsInst(g.exn_ty, mkAppTy exnref []), mbuilder.AddResultTarget(expr, DebugPointForTarget.No)) ] @@ -347,7 +347,7 @@ let mkUnionCompare g tcref (tycon: Tycon) = let compe = mkILCallGetComparer g m let expr = - let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m ) + let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m ) let mkCase ucase = let cref = tcref.MakeNestedUnionCaseRef ucase let m = cref.Range @@ -379,7 +379,7 @@ let mkUnionCompare g tcref (tycon: Tycon) = let expr = if ucases.Length = 1 then expr else let tagsEqTested = - mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m g.int_ty + mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m g.int_ty (mkILAsmCeq g m thistage thattage) expr (mkAsmExpr ([ IL.AI_sub ], [], [thistage; thattage], [g.int_ty], m))in @@ -405,7 +405,7 @@ let mkUnionCompareWithComparer g tcref (tycon: Tycon) (_thisv, thise) (_thatobjv let thattagv, thattage = mkCompGenLocal m "thatTag" g.int_ty let expr = - let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m ) + let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m ) let mkCase ucase = let cref = tcref.MakeNestedUnionCaseRef ucase let m = cref.Range @@ -440,7 +440,7 @@ let mkUnionCompareWithComparer g tcref (tycon: Tycon) (_thisv, thise) (_thatobjv let expr = if ucases.Length = 1 then expr else let tagsEqTested = - mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m g.int_ty + mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m g.int_ty (mkILAsmCeq g m thistage thattage) expr (mkAsmExpr ([ IL.AI_sub ], [], [thistage; thattage], [g.int_ty], m)) @@ -466,7 +466,7 @@ let mkUnionEquality g tcref (tycon: Tycon) = let thattagv, thattage = mkCompGenLocal m "thatTag" g.int_ty let expr = - let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m ) + let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m ) let mkCase ucase = let cref = tcref.MakeNestedUnionCaseRef ucase let m = cref.Range @@ -500,7 +500,7 @@ let mkUnionEquality g tcref (tycon: Tycon) = let expr = if ucases.Length = 1 then expr else let tagsEqTested = - mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m g.bool_ty + mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m g.bool_ty (mkILAsmCeq g m thistage thattage) expr (mkFalse g m) @@ -525,7 +525,7 @@ let mkUnionEqualityWithComparer g tcref (tycon: Tycon) (_thisv, thise) thatobje let thataddrv, thataddre = mkThatAddrLocal g m ty let expr = - let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m ) + let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m ) let mkCase ucase = let cref = tcref.MakeNestedUnionCaseRef ucase let m = cref.Range @@ -562,7 +562,7 @@ let mkUnionEqualityWithComparer g tcref (tycon: Tycon) (_thisv, thise) thatobje let expr = if ucases.Length = 1 then expr else let tagsEqTested = - mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m g.bool_ty + mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m g.bool_ty (mkILAsmCeq g m thistage thattage) expr (mkFalse g m) @@ -625,7 +625,7 @@ let mkUnionHashWithComparer g tcref (tycon: Tycon) compe = let ucases = tycon.UnionCasesAsList let tinst, ty = mkMinimalTy g tcref let thisv, thise = mkThisVar g m ty - let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m ) + let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m ) let accv, acce = mkMutableCompGenLocal m "i" g.int_ty let mkCase i ucase1 = let c1ref = tcref.MakeNestedUnionCaseRef ucase1 @@ -864,7 +864,7 @@ let slotImplMethod (final, c, slotsig) : ValMemberInfo = IsDispatchSlot=false IsFinal=final IsOverrideOrExplicitImpl=true - MemberKind=SynMemberKind.Member} + MemberKind=MemberKind.Member} IsImplemented=false ApparentEnclosingEntity=c} @@ -874,7 +874,7 @@ let nonVirtualMethod c : ValMemberInfo = IsDispatchSlot=false IsFinal=false IsOverrideOrExplicitImpl=false - MemberKind=SynMemberKind.Member} + MemberKind=MemberKind.Member} IsImplemented=false ApparentEnclosingEntity=c} diff --git a/src/fsharp/AugmentWithHashCompare.fsi b/src/fsharp/AugmentWithHashCompare.fsi index 4e3acc47ab7..da5b50018fe 100644 --- a/src/fsharp/AugmentWithHashCompare.fsi +++ b/src/fsharp/AugmentWithHashCompare.fsi @@ -7,31 +7,31 @@ open FSharp.Compiler open FSharp.Compiler.TypedTree open FSharp.Compiler.TcGlobals -val CheckAugmentationAttribs: bool -> TcGlobals -> Import.ImportMap -> Tycon -> unit +val CheckAugmentationAttribs : bool -> TcGlobals -> Import.ImportMap -> Tycon -> unit -val TyconIsCandidateForAugmentationWithCompare: TcGlobals -> Tycon -> bool +val TyconIsCandidateForAugmentationWithCompare : TcGlobals -> Tycon -> bool -val TyconIsCandidateForAugmentationWithEquals: TcGlobals -> Tycon -> bool +val TyconIsCandidateForAugmentationWithEquals : TcGlobals -> Tycon -> bool -val TyconIsCandidateForAugmentationWithHash: TcGlobals -> Tycon -> bool +val TyconIsCandidateForAugmentationWithHash : TcGlobals -> Tycon -> bool -val MakeValsForCompareAugmentation: TcGlobals -> TyconRef -> Val * Val +val MakeValsForCompareAugmentation : TcGlobals -> TyconRef -> Val * Val -val MakeValsForCompareWithComparerAugmentation: TcGlobals -> TyconRef -> Val +val MakeValsForCompareWithComparerAugmentation : TcGlobals -> TyconRef -> Val -val MakeValsForEqualsAugmentation: TcGlobals -> TyconRef -> Val * Val +val MakeValsForEqualsAugmentation : TcGlobals -> TyconRef -> Val * Val -val MakeValsForEqualityWithComparerAugmentation: TcGlobals -> TyconRef -> Val * Val * Val +val MakeValsForEqualityWithComparerAugmentation : TcGlobals -> TyconRef -> Val * Val * Val -val MakeBindingsForCompareAugmentation: TcGlobals -> Tycon -> Binding list +val MakeBindingsForCompareAugmentation : TcGlobals -> Tycon -> Binding list -val MakeBindingsForCompareWithComparerAugmentation: TcGlobals -> Tycon -> Binding list +val MakeBindingsForCompareWithComparerAugmentation : TcGlobals -> Tycon -> Binding list -val MakeBindingsForEqualsAugmentation: TcGlobals -> Tycon -> Binding list +val MakeBindingsForEqualsAugmentation : TcGlobals -> Tycon -> Binding list -val MakeBindingsForEqualityWithComparerAugmentation: TcGlobals -> Tycon -> Binding list +val MakeBindingsForEqualityWithComparerAugmentation : TcGlobals -> Tycon -> Binding list /// This predicate can be used once type inference is complete, before then it is an approximation /// that doesn't assert any new constraints -val TypeDefinitelyHasEquality: TcGlobals -> TType -> bool +val TypeDefinitelyHasEquality : TcGlobals -> TType -> bool diff --git a/src/fsharp/BinaryResourceFormats.fs b/src/fsharp/BinaryResourceFormats.fs index 03f83869e13..82c134eeb11 100644 --- a/src/fsharp/BinaryResourceFormats.fs +++ b/src/fsharp/BinaryResourceFormats.fs @@ -1,14 +1,13 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.BinaryResourceFormats +module internal FSharp.Compiler.BinaryResourceFormats -open FSharp.Compiler.IO -open Internal.Utilities open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal // Helpers for generating binary blobs -module BinaryGenerationUtilities = - // Little-endian encoding of int32 +module BinaryGenerationUtilities = + // Little-endian encoding of int32 let b0 n = byte (n &&& 0xFF) let b1 n = byte ((n >>> 8) &&& 0xFF) let b2 n = byte ((n >>> 16) &&& 0xFF) @@ -18,7 +17,7 @@ module BinaryGenerationUtilities = let i32 (i: int32) = [| b0 i; b1 i; b2 i; b3 i |] // Emit the bytes and pad to a 32-bit alignment - let Padded initialAlignment (v: byte[]) = + let Padded initialAlignment (v: byte[]) = [| yield! v for _ in 1..(4 - (initialAlignment + v.Length) % 4) % 4 do yield 0x0uy |] @@ -39,194 +38,195 @@ module ResFileFormat = yield! i32 0x00000000 // DWORD dwCharacteristics yield! Padded 0 data |] - let ResFileHeader() = ResFileNode(0x0, 0x0, 0x0, 0x0, [| |]) + let ResFileHeader() = ResFileNode(0x0, 0x0, 0x0, 0x0, [| |]) // Generate the VS_VERSION_INFO structure held in a Win32 Version Resource in a PE file // // Web reference: http://www.piclist.com/tecHREF/os/win/api/win32/struc/src/str24_5.htm -module VersionResourceFormat = +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. + [| yield! i16 (data.Length + 2) // wLength : int16 // Specifies the length, in bytes, of the VS_VERSION_INFO structure. yield! data |] let VersionInfoElement(wType, szKey, valueOpt: byte[] option, children: byte[][], isString) = // for String structs, wValueLength represents the word count, not the byte count 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. - yield! i16 wType // wType : int16 Specifies the type of data in the version resource. - yield! Padded 2 szKey - match valueOpt with + [| yield! i16 wValueLength // wValueLength: int16. Specifies the length, in words, of the Value member. + yield! i16 wType // wType : int16 Specifies the type of data in the version resource. + yield! Padded 2 szKey + match valueOpt with | None -> yield! [] - | Some value -> yield! Padded 0 value - for child in children do + | Some value -> yield! Padded 0 value + for child in children do yield! child |] - let Version(version: ILVersionInfo) = + let Version(version: ILVersionInfo) = [| // 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 version.Major <<< 16 ||| int32 version.Minor) - - // 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 version.Build <<< 16 ||| int32 version.Revision) + // 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 version.Major <<< 16 ||| int32 version.Minor) + + // 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 version.Build <<< 16 ||| int32 version.Revision) |] - let String(string, value) = - let wType = 0x1 // Specifies the type of data in the version resource. + let String(string, value) = + let wType = 0x1 // Specifies the type of data in the version resource. let szKey = Bytes.stringAsUnicodeNullTerminated string VersionInfoElement(wType, szKey, Some (Bytes.stringAsUnicodeNullTerminated value), [| |], true) - let StringTable(language, strings) = - let wType = 0x1 // Specifies the type of data in the version resource. + let StringTable(language, strings) = + let wType = 0x1 // Specifies the type of data in the version resource. let szKey = Bytes.stringAsUnicodeNullTerminated language - // Specifies an 8-digit hexadecimal number stored as a Unicode string. - - let children = + // Specifies an 8-digit hexadecimal number stored as a Unicode string. + + let children = [| for string in strings do - yield String string |] + yield String string |] VersionInfoElement(wType, szKey, None, children, false) - let StringFileInfo(stringTables: #seq >) = - let wType = 0x1 // Specifies the type of data in the version resource. + let StringFileInfo(stringTables: #seq >) = + let wType = 0x1 // Specifies the type of data in the version resource. let szKey = Bytes.stringAsUnicodeNullTerminated "StringFileInfo" // Contains the Unicode string StringFileInfo - // Contains an array of one or more StringTable structures. - let children = + // Contains an array of one or more StringTable structures. + let children = [| for stringTable in stringTables do - yield StringTable stringTable |] + yield StringTable stringTable |] VersionInfoElement(wType, szKey, None, children, false) - let VarFileInfo(vars: #seq) = - let wType = 0x1 // Specifies the type of data in the version resource. + let VarFileInfo(vars: #seq) = + let wType = 0x1 // Specifies the type of data in the version resource. let szKey = Bytes.stringAsUnicodeNullTerminated "VarFileInfo" // Contains the Unicode string StringFileInfo - // Contains an array of one or more StringTable structures. - let children = + // Contains an array of one or more StringTable structures. + let children = [| for (lang, codePage) in vars do let szKey = Bytes.stringAsUnicodeNullTerminated "Translation" yield VersionInfoElement(0x0, szKey, Some([| yield! i16 lang - yield! i16 codePage |]), [| |], false) |] + yield! i16 codePage |]), [| |], false) |] VersionInfoElement(wType, szKey, None, children, false) - let VS_FIXEDFILEINFO(fileVersion: ILVersionInfo, - productVersion: ILVersionInfo, - dwFileFlagsMask, - dwFileFlags, dwFileOS, - dwFileType, dwFileSubtype, - lwFileDate: int64) = + let VS_FIXEDFILEINFO(fileVersion: ILVersionInfo, + productVersion: ILVersionInfo, + dwFileFlagsMask, + dwFileFlags, dwFileOS, + dwFileType, dwFileSubtype, + lwFileDate: int64) = let dwStrucVersion = 0x00010000 - [| // DWORD dwSignature // Contains the value 0xFEEFO4BD. - yield! i32 0xFEEF04BD - - // DWORD dwStrucVersion // Specifies the binary version number of this structure. - yield! i32 dwStrucVersion - - // DWORD dwFileVersionMS, dwFileVersionLS // Specifies the most/least significant 32 bits of the file's binary version number. - yield! Version fileVersion - - // DWORD dwProductVersionMS, dwProductVersionLS // Specifies the most/least significant 32 bits of the file's binary version number. - yield! Version productVersion - - // DWORD dwFileFlagsMask // Contains a bitmask that specifies the valid bits in dwFileFlags. - yield! i32 dwFileFlagsMask - - // DWORD dwFileFlags // Contains a bitmask that specifies the Boolean attributes of the file. - yield! i32 dwFileFlags - // 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. - // VS_FF_PRERELEASE The file is a development version, not a commercially released product. - // VS_FF_PRIVATEBUILD The file was not built using standard release procedures. If this flag is - // set, the StringFileInfo structure should contain a PrivateBuild entry. - // VS_FF_SPECIALBUILD The file was built by the original company using standard release procedures - // but is a variation of the normal file of the same version number. If this - // flag is set, the StringFileInfo structure should contain a SpecialBuild entry. - - //Specifies the operating system for which this file was designed. This member can be one of the following values: Flag - yield! i32 dwFileOS - //VOS_DOS 0x0001L The file was designed for MS-DOS. - //VOS_NT 0x0004L The file was designed for Windows NT. - //VOS__WINDOWS16 The file was designed for 16-bit Windows. - //VOS__WINDOWS32 The file was designed for the Win32 API. - //VOS_OS216 0x00020000L The file was designed for 16-bit OS/2. - //VOS_OS232 0x00030000L The file was designed for 32-bit OS/2. - //VOS__PM16 The file was designed for 16-bit Presentation Manager. - //VOS__PM32 The file was designed for 32-bit Presentation Manager. - //VOS_UNKNOWN The operating system for which the file was designed is unknown to Windows. - - // Specifies the general type of file. This member can be one of the following values: - yield! i32 dwFileType - - //VFT_UNKNOWN The file type is unknown to Windows. - //VFT_APP The file contains an application. - //VFT_DLL The file contains a dynamic-link library (DLL). - //VFT_DRV The file contains a device driver. If dwFileType is VFT_DRV, dwFileSubtype contains a more specific description of the driver. - //VFT_FONT The file contains a font. If dwFileType is VFT_FONT, dwFileSubtype contains a more specific description of the font file. - //VFT_VXD The file contains a virtual device. - //VFT_STATIC_LIB The file contains a static-link library. - - // Specifies the function of the file. The possible values depend on the value of - // dwFileType. For all values of dwFileType not described in the following list, - // dwFileSubtype is zero. If dwFileType is VFT_DRV, dwFileSubtype can be one of the following values: - yield! i32 dwFileSubtype - //VFT2_UNKNOWN The driver type is unknown by Windows. - //VFT2_DRV_COMM The file contains a communications driver. - //VFT2_DRV_PRINTER The file contains a printer driver. - //VFT2_DRV_KEYBOARD The file contains a keyboard driver. - //VFT2_DRV_LANGUAGE The file contains a language driver. - //VFT2_DRV_DISPLAY The file contains a display driver. - //VFT2_DRV_MOUSE The file contains a mouse driver. - //VFT2_DRV_NETWORK The file contains a network driver. - //VFT2_DRV_SYSTEM The file contains a system driver. - //VFT2_DRV_INSTALLABLE The file contains an installable driver. - //VFT2_DRV_SOUND The file contains a sound driver. - // - //If dwFileType is VFT_FONT, dwFileSubtype can be one of the following values: + [| // DWORD dwSignature // Contains the value 0xFEEFO4BD. + yield! i32 0xFEEF04BD + + // DWORD dwStrucVersion // Specifies the binary version number of this structure. + yield! i32 dwStrucVersion + + // DWORD dwFileVersionMS, dwFileVersionLS // Specifies the most/least significant 32 bits of the file's binary version number. + yield! Version fileVersion + + // DWORD dwProductVersionMS, dwProductVersionLS // Specifies the most/least significant 32 bits of the file's binary version number. + yield! Version productVersion + + // DWORD dwFileFlagsMask // Contains a bitmask that specifies the valid bits in dwFileFlags. + yield! i32 dwFileFlagsMask + + // DWORD dwFileFlags // Contains a bitmask that specifies the Boolean attributes of the file. + yield! i32 dwFileFlags + // 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. + // VS_FF_PRERELEASE The file is a development version, not a commercially released product. + // VS_FF_PRIVATEBUILD The file was not built using standard release procedures. If this flag is + // set, the StringFileInfo structure should contain a PrivateBuild entry. + // VS_FF_SPECIALBUILD The file was built by the original company using standard release procedures + // but is a variation of the normal file of the same version number. If this + // flag is set, the StringFileInfo structure should contain a SpecialBuild entry. + + //Specifies the operating system for which this file was designed. This member can be one of the following values: Flag + yield! i32 dwFileOS + //VOS_DOS 0x0001L The file was designed for MS-DOS. + //VOS_NT 0x0004L The file was designed for Windows NT. + //VOS__WINDOWS16 The file was designed for 16-bit Windows. + //VOS__WINDOWS32 The file was designed for the Win32 API. + //VOS_OS216 0x00020000L The file was designed for 16-bit OS/2. + //VOS_OS232 0x00030000L The file was designed for 32-bit OS/2. + //VOS__PM16 The file was designed for 16-bit Presentation Manager. + //VOS__PM32 The file was designed for 32-bit Presentation Manager. + //VOS_UNKNOWN The operating system for which the file was designed is unknown to Windows. + + // Specifies the general type of file. This member can be one of the following values: + yield! i32 dwFileType + + //VFT_UNKNOWN The file type is unknown to Windows. + //VFT_APP The file contains an application. + //VFT_DLL The file contains a dynamic-link library (DLL). + //VFT_DRV The file contains a device driver. If dwFileType is VFT_DRV, dwFileSubtype contains a more specific description of the driver. + //VFT_FONT The file contains a font. If dwFileType is VFT_FONT, dwFileSubtype contains a more specific description of the font file. + //VFT_VXD The file contains a virtual device. + //VFT_STATIC_LIB The file contains a static-link library. + + // Specifies the function of the file. The possible values depend on the value of + // dwFileType. For all values of dwFileType not described in the following list, + // dwFileSubtype is zero. If dwFileType is VFT_DRV, dwFileSubtype can be one of the following values: + yield! i32 dwFileSubtype + //VFT2_UNKNOWN The driver type is unknown by Windows. + //VFT2_DRV_COMM The file contains a communications driver. + //VFT2_DRV_PRINTER The file contains a printer driver. + //VFT2_DRV_KEYBOARD The file contains a keyboard driver. + //VFT2_DRV_LANGUAGE The file contains a language driver. + //VFT2_DRV_DISPLAY The file contains a display driver. + //VFT2_DRV_MOUSE The file contains a mouse driver. + //VFT2_DRV_NETWORK The file contains a network driver. + //VFT2_DRV_SYSTEM The file contains a system driver. + //VFT2_DRV_INSTALLABLE The file contains an installable driver. + //VFT2_DRV_SOUND The file contains a sound driver. // - //VFT2_UNKNOWN The font type is unknown by Windows. - //VFT2_FONT_RASTER The file contains a raster font. - //VFT2_FONT_VECTOR The file contains a vector font. - //VFT2_FONT_TRUETYPE The file contains a TrueType font. + //If dwFileType is VFT_FONT, dwFileSubtype can be one of the following values: + // + //VFT2_UNKNOWN The font type is unknown by Windows. + //VFT2_FONT_RASTER The file contains a raster font. + //VFT2_FONT_VECTOR The file contains a vector font. + //VFT2_FONT_TRUETYPE The file contains a TrueType font. // - //If dwFileType is VFT_VXD, dwFileSubtype contains the virtual device identifier included in the virtual device control block. - - // Specifies the most significant 32 bits of the file's 64-bit binary creation date and time stamp. - yield! i32 (int32 (lwFileDate >>> 32)) - - //Specifies the least significant 32 bits of the file's 64-bit binary creation date and time stamp. - yield! i32 (int32 lwFileDate) - |] + //If dwFileType is VFT_VXD, dwFileSubtype contains the virtual device identifier included in the virtual device control block. + + // Specifies the most significant 32 bits of the file's 64-bit binary creation date and time stamp. + yield! i32 (int32 (lwFileDate >>> 32)) + + //Specifies the least significant 32 bits of the file's 64-bit binary creation date and time stamp. + yield! i32 (int32 lwFileDate) + |] let VS_VERSION_INFO(fixedFileInfo, stringFileInfo, varFileInfo) = - let wType = 0x0 + let wType = 0x0 let szKey = Bytes.stringAsUnicodeNullTerminated "VS_VERSION_INFO" // Contains the Unicode string VS_VERSION_INFO let value = VS_FIXEDFILEINFO (fixedFileInfo) - let children = - [| yield StringFileInfo stringFileInfo - yield VarFileInfo varFileInfo - |] + let children = + [| yield StringFileInfo stringFileInfo + yield VarFileInfo varFileInfo + |] VersionInfoElement(wType, szKey, Some value, children, false) - - let VS_VERSION_INFO_RESOURCE data = + + let VS_VERSION_INFO_RESOURCE data = let dwTypeID = 0x0010 let dwNameID = 0x0001 let wMemFlags = 0x0030 // REVIEW: HARDWIRED TO ENGLISH let wLangID = 0x0 ResFileFormat.ResFileNode(dwTypeID, dwNameID, wMemFlags, wLangID, VS_VERSION_INFO data) - + module ManifestResourceFormat = - + let VS_MANIFEST_RESOURCE(data, isLibrary) = let dwTypeID = 0x0018 let dwNameID = if isLibrary then 0x2 else 0x1 let wMemFlags = 0x0 let wLangID = 0x0 ResFileFormat.ResFileNode(dwTypeID, dwNameID, wMemFlags, wLangID, data) + diff --git a/src/fsharp/BuildGraph.fs b/src/fsharp/BuildGraph.fs deleted file mode 100644 index d8fe2d14832..00000000000 --- a/src/fsharp/BuildGraph.fs +++ /dev/null @@ -1,393 +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. - -module FSharp.Compiler.BuildGraph - -open System -open System.Threading -open System.Threading.Tasks -open System.Diagnostics -open System.Globalization -open FSharp.Compiler.ErrorLogger -open Internal.Utilities.Library - -/// This represents the thread-local state established as each task function runs as part of the build. -/// -/// Use to reset error and warning handlers. -type CompilationGlobalsScope(errorLogger: ErrorLogger, phase: BuildPhase) = - let unwindEL = PushErrorLoggerPhaseUntilUnwind(fun _ -> errorLogger) - let unwindBP = PushThreadBuildPhaseUntilUnwind phase - - member _.ErrorLogger = errorLogger - member _.Phase = phase - - // Return the disposable object that cleans up - interface IDisposable with - member d.Dispose() = - unwindBP.Dispose() - unwindEL.Dispose() - -[] -type NodeCode<'T> = Node of Async<'T> - -let wrapThreadStaticInfo computation = - async { - let errorLogger = CompileThreadStatic.ErrorLogger - let phase = CompileThreadStatic.BuildPhase - try - return! computation - finally - CompileThreadStatic.ErrorLogger <- errorLogger - CompileThreadStatic.BuildPhase <- phase - } - -type Async<'T> with - - static member AwaitNodeCode(node: NodeCode<'T>) = - match node with - | Node(computation) -> wrapThreadStaticInfo computation - -[] -type NodeCodeBuilder() = - - static let zero = Node(async.Zero()) - - [] - member _.Zero () : NodeCode = zero - - [] - member _.Delay (f: unit -> NodeCode<'T>) = - Node(async.Delay(fun () -> match f() with Node(p) -> p)) - - [] - member _.Return value = Node(async.Return(value)) - - [] - member _.ReturnFrom (computation: NodeCode<_>) = computation - - [] - member _.Bind (Node(p): NodeCode<'a>, binder: 'a -> NodeCode<'b>) : NodeCode<'b> = - Node(async.Bind(p, fun x -> match binder x with Node p -> p)) - - [] - member _.TryWith(Node(p): NodeCode<'T>, binder: exn -> NodeCode<'T>) : NodeCode<'T> = - Node(async.TryWith(p, fun ex -> match binder ex with Node p -> p)) - - [] - member _.TryFinally(Node(p): NodeCode<'T>, binder: unit -> unit) : NodeCode<'T> = - Node(async.TryFinally(p, binder)) - - [] - member _.For(xs: 'T seq, binder: 'T -> NodeCode) : NodeCode = - Node(async.For(xs, fun x -> match binder x with Node p -> p)) - - [] - member _.Combine(Node(p1): NodeCode, Node(p2): NodeCode<'T>) : NodeCode<'T> = - Node(async.Combine(p1, p2)) - - [] - member _.Using(value: CompilationGlobalsScope, binder: CompilationGlobalsScope -> NodeCode<'U>) = - Node( - async { - CompileThreadStatic.ErrorLogger <- value.ErrorLogger - CompileThreadStatic.BuildPhase <- value.Phase - try - return! binder value |> Async.AwaitNodeCode - finally - (value :> IDisposable).Dispose() - } - ) - -let node = NodeCodeBuilder() - -[] -type NodeCode private () = - - static let cancellationToken = - Node(wrapThreadStaticInfo Async.CancellationToken) - - static member RunImmediate (computation: NodeCode<'T>, ct: CancellationToken) = - let errorLogger = CompileThreadStatic.ErrorLogger - let phase = CompileThreadStatic.BuildPhase - try - try - let work = - async { - CompileThreadStatic.ErrorLogger <- errorLogger - CompileThreadStatic.BuildPhase <- phase - return! computation |> Async.AwaitNodeCode - } - Async.StartImmediateAsTask(work, cancellationToken=ct).Result - finally - CompileThreadStatic.ErrorLogger <- errorLogger - CompileThreadStatic.BuildPhase <- phase - with - | :? AggregateException as ex when ex.InnerExceptions.Count = 1 -> - raise(ex.InnerExceptions.[0]) - - static member RunImmediateWithoutCancellation (computation: NodeCode<'T>) = - NodeCode.RunImmediate(computation, CancellationToken.None) - - static member StartAsTask_ForTesting (computation: NodeCode<'T>, ?ct: CancellationToken) = - let errorLogger = CompileThreadStatic.ErrorLogger - let phase = CompileThreadStatic.BuildPhase - try - let work = - async { - CompileThreadStatic.ErrorLogger <- errorLogger - CompileThreadStatic.BuildPhase <- phase - return! computation |> Async.AwaitNodeCode - } - Async.StartAsTask(work, cancellationToken=defaultArg ct CancellationToken.None) - finally - CompileThreadStatic.ErrorLogger <- errorLogger - CompileThreadStatic.BuildPhase <- phase - - static member CancellationToken = cancellationToken - - static member FromCancellable(computation: Cancellable<'T>) = - Node(wrapThreadStaticInfo (Cancellable.toAsync computation)) - - static member AwaitAsync(computation: Async<'T>) = - Node(wrapThreadStaticInfo computation) - - static member AwaitTask(task: Task<'T>) = - Node(wrapThreadStaticInfo(Async.AwaitTask task)) - - static member AwaitTask(task: Task) = - Node(wrapThreadStaticInfo(Async.AwaitTask task)) - - static member AwaitWaitHandle_ForTesting(waitHandle: WaitHandle) = - Node(wrapThreadStaticInfo (Async.AwaitWaitHandle(waitHandle))) - - static member Sleep(ms: int) = - Node(wrapThreadStaticInfo (Async.Sleep(ms))) - - static member Sequential(computations: NodeCode<'T> seq) = - node { - let results = ResizeArray() - for computation in computations do - let! res = computation - results.Add(res) - return results.ToArray() - } - -type private AgentMessage<'T> = - | GetValue of AsyncReplyChannel> * callerCancellationToken: CancellationToken - -type private Agent<'T> = (MailboxProcessor> * CancellationTokenSource) - -[] -type private GraphNodeAction<'T> = - | GetValueByAgent - | GetValue - | CachedValue of 'T - -[] -module GraphNode = - - // We need to store the culture for the VS thread that is executing now, - // so that when the agent in the async lazy object picks up thread from the thread pool we can set the culture - let mutable culture = CultureInfo(CultureInfo.CurrentUICulture.Name) - - let SetPreferredUILang (preferredUiLang: string option) = - match preferredUiLang with - | Some s -> - culture <- CultureInfo s -#if FX_RESHAPED_GLOBALIZATION - CultureInfo.CurrentUICulture <- culture -#else - Thread.CurrentThread.CurrentUICulture <- culture -#endif - | None -> () - -[] -type GraphNode<'T> (retryCompute: bool, computation: NodeCode<'T>) = - - let gate = obj () - let mutable computation = computation - let mutable requestCount = 0 - let mutable cachedResult: Task<'T> = Unchecked.defaultof<_> - let mutable cachedResultNode: NodeCode<'T> = Unchecked.defaultof<_> - - let isCachedResultNodeNotNull() = - not (obj.ReferenceEquals(cachedResultNode, null)) - - let isCachedResultNotNull() = - cachedResult <> null - - // retryCompute indicates that we abandon computations when the originator is - // cancelled. - // - // If retryCompute is 'true', the computation is run directly in the originating requestor's - // thread. If cancelled, other awaiting computations must restart the computation from scratch. - // - // If retryCompute is 'false', a MailboxProcessor is used to allow the cancelled originator - // to detach from the computation, while other awaiting computations continue to wait on the result. - // - // Currently, 'retryCompute' = true for all graph nodes. However, the code for we include the - // code to allow 'retryCompute' = false in case it's needed in the future, and ensure it is under independent - // unit test. - let loop (agent: MailboxProcessor>) = - async { - assert (not retryCompute) - try - while true do - match! agent.Receive() with - | GetValue (replyChannel, callerCancellationToken) -> - - Thread.CurrentThread.CurrentUICulture <- GraphNode.culture - try - use _reg = - // When a cancellation has occured, notify the reply channel to let the requester stop waiting for a response. - callerCancellationToken.Register (fun () -> - let ex = OperationCanceledException() :> exn - replyChannel.Reply (Result.Error ex) - ) - - callerCancellationToken.ThrowIfCancellationRequested () - - if isCachedResultNotNull() then - replyChannel.Reply(Ok cachedResult.Result) - else - // This computation can only be canceled if the requestCount reaches zero. - let! result = computation |> Async.AwaitNodeCode - cachedResult <- Task.FromResult(result) - cachedResultNode <- node { return result } - computation <- Unchecked.defaultof<_> - if not callerCancellationToken.IsCancellationRequested then - replyChannel.Reply(Ok result) - with - | ex -> - if not callerCancellationToken.IsCancellationRequested then - replyChannel.Reply(Result.Error ex) - with - | _ -> - () - } - - let mutable agent: Agent<'T> = Unchecked.defaultof<_> - - let semaphore: SemaphoreSlim = - if retryCompute then - new SemaphoreSlim(1, 1) - else - Unchecked.defaultof<_> - - member _.GetOrComputeValue() = - // fast path - if isCachedResultNodeNotNull() then - cachedResultNode - else - node { - if isCachedResultNodeNotNull() then - return! cachedResult |> NodeCode.AwaitTask - else - let action = - lock gate <| fun () -> - // We try to get the cached result after the lock so we don't spin up a new mailbox processor. - if isCachedResultNodeNotNull() then - GraphNodeAction<'T>.CachedValue cachedResult.Result - else - requestCount <- requestCount + 1 - if retryCompute then - GraphNodeAction<'T>.GetValue - else - match box agent with - | null -> - try - let cts = new CancellationTokenSource() - let mbp = new MailboxProcessor<_>(loop, cancellationToken = cts.Token) - let newAgent = (mbp, cts) - agent <- newAgent - mbp.Start() - GraphNodeAction<'T>.GetValueByAgent - with - | ex -> - agent <- Unchecked.defaultof<_> - raise ex - | _ -> - GraphNodeAction<'T>.GetValueByAgent - - match action with - | GraphNodeAction.CachedValue result -> return result - | GraphNodeAction.GetValue -> - try - let! ct = NodeCode.CancellationToken - - // We must set 'taken' before any implicit cancellation checks - // occur, making sure we are under the protection of the 'try'. - // For example, NodeCode's 'try/finally' (TryFinally) uses async.TryFinally which does - // implicit cancellation checks even before the try is entered, as do the - // de-sugaring of 'do!' and other CodeCode constructs. - let mutable taken = false - try - do! - semaphore.WaitAsync(ct) - .ContinueWith( - (fun _ -> taken <- true), - (TaskContinuationOptions.NotOnCanceled ||| TaskContinuationOptions.NotOnFaulted ||| TaskContinuationOptions.ExecuteSynchronously) - ) - |> NodeCode.AwaitTask - - if isCachedResultNotNull() then - return cachedResult.Result - else - let tcs = TaskCompletionSource<'T>() - let (Node(p)) = computation - Async.StartWithContinuations( - async { - Thread.CurrentThread.CurrentUICulture <- GraphNode.culture - return! p - }, - (fun res -> - cachedResult <- Task.FromResult(res) - cachedResultNode <- node { return res } - computation <- Unchecked.defaultof<_> - tcs.SetResult(res) - ), - (fun ex -> - tcs.SetException(ex) - ), - (fun _ -> - tcs.SetCanceled() - ), - ct - ) - return! tcs.Task |> NodeCode.AwaitTask - finally - if taken then - semaphore.Release() |> ignore - finally - lock gate <| fun () -> - requestCount <- requestCount - 1 - - | GraphNodeAction.GetValueByAgent -> - assert (not retryCompute) - let mbp, cts = agent - try - let! ct = NodeCode.CancellationToken - let! res = mbp.PostAndAsyncReply(fun replyChannel -> GetValue(replyChannel, ct)) |> NodeCode.AwaitAsync - match res with - | Ok result -> return result - | Result.Error ex -> return raise ex - finally - lock gate <| fun () -> - requestCount <- requestCount - 1 - if requestCount = 0 then - cts.Cancel() // cancel computation when all requests are cancelled - try (mbp :> IDisposable).Dispose () with | _ -> () - cts.Dispose() - agent <- Unchecked.defaultof<_> - } - - member _.TryPeekValue() = - match cachedResult with - | null -> ValueNone - | _ -> ValueSome cachedResult.Result - - member _.HasValue = cachedResult <> null - - member _.IsComputing = requestCount > 0 - - new(computation) = - GraphNode(retryCompute=true, computation=computation) \ No newline at end of file diff --git a/src/fsharp/BuildGraph.fsi b/src/fsharp/BuildGraph.fsi deleted file mode 100644 index cf1d750c3e0..00000000000 --- a/src/fsharp/BuildGraph.fsi +++ /dev/null @@ -1,120 +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. - -module internal FSharp.Compiler.BuildGraph - -open System -open System.Threading -open System.Threading.Tasks -open FSharp.Compiler.ErrorLogger -open Internal.Utilities.Library - -/// This represents the global state established as each task function runs as part of the build. -/// -/// Use to reset error and warning handlers. -type CompilationGlobalsScope = - new : ErrorLogger * BuildPhase -> CompilationGlobalsScope - interface IDisposable - -/// Represents code that can be run as part of the build graph. -/// -/// This is essentially cancellable async code where the only asynchronous waits are on nodes. -/// When a node is evaluated the evaluation is run synchronously on the thread of the -/// first requestor. -[] -type NodeCode<'T> - -type Async<'T> with - - /// Asynchronously await code in the build graph - static member AwaitNodeCode: node: NodeCode<'T> -> Async<'T> - -/// A standard builder for node code. -[] -type NodeCodeBuilder = - - member Bind : NodeCode<'T> * ('T -> NodeCode<'U>) -> NodeCode<'U> - - member Zero : unit -> NodeCode - - member Delay : (unit -> NodeCode<'T>) -> NodeCode<'T> - - member Return : 'T -> NodeCode<'T> - - member ReturnFrom : NodeCode<'T> -> NodeCode<'T> - - member TryWith : NodeCode<'T> * (exn -> NodeCode<'T>) -> NodeCode<'T> - - member TryFinally : NodeCode<'T> * (unit -> unit) -> NodeCode<'T> - - member For : xs: 'T seq * binder: ('T -> NodeCode) -> NodeCode - - member Combine : x1: NodeCode * x2: NodeCode<'T> -> NodeCode<'T> - - /// A limited form 'use' for establishing the compilation globals. (Note - /// that a proper generic 'use' could be implemented but has not currently been necessary) - member Using : CompilationGlobalsScope * (CompilationGlobalsScope -> NodeCode<'T>) -> NodeCode<'T> - -/// Specifies code that can be run as part of the build graph. -val node : NodeCodeBuilder - -/// Contains helpers to specify code that can be run as part of the build graph. -[] -type NodeCode = - - /// Only used for testing, do not use - static member RunImmediate: computation: NodeCode<'T> * ct: CancellationToken -> 'T - - /// Used in places where we don't care about cancellation, e.g. the command line compiler - /// and F# Interactive - static member RunImmediateWithoutCancellation: computation: NodeCode<'T> -> 'T - - static member CancellationToken: NodeCode - - static member Sequential: computations: NodeCode<'T> seq -> NodeCode<'T []> - - /// Execute the cancellable computation synchronously using the ambient cancellation token of - /// the NodeCode. - static member FromCancellable: computation: Cancellable<'T> -> NodeCode<'T> - - /// Only used for testing, do not use - static member StartAsTask_ForTesting: computation: NodeCode<'T> * ?ct: CancellationToken -> Task<'T> - - /// Only used for testing, do not use - static member AwaitWaitHandle_ForTesting: waitHandle: WaitHandle -> NodeCode - -/// Contains helpers related to the build graph -[] -module internal GraphNode = - - /// Allows to specify the language for error messages - val SetPreferredUILang: preferredUiLang: string option -> unit - -/// Evaluate the computation, allowing asynchronous waits on existing ongoing evaluations of the -/// same node, and strongly cache the result. -/// -/// Once the result has been cached, the computation function will also be removed, or 'null'ed out, -/// as to prevent any references captured by the computation from being strongly held. -[] -type internal GraphNode<'T> = - - /// - retryCompute - When set to 'true', subsequent requesters will retry the computation if the first-in request cancels. Retrying computations will have better callstacks. - /// - computation - The computation code to run. - new: retryCompute: bool * computation: NodeCode<'T> -> GraphNode<'T> - - /// By default, 'retryCompute' is 'true'. - new : computation: NodeCode<'T> -> GraphNode<'T> - - /// Return NodeCode which, when executed, will get the value of the computation if already computed, or - /// await an existing in-progress computation for the node if one exists, or else will synchronously - /// start the computation on the current thread. - member GetOrComputeValue: unit -> NodeCode<'T> - - /// Return 'Some' if the computation has already been computed, else None if - /// the computation is in-progress or has not yet been started. - member TryPeekValue: unit -> 'T voption - - /// Return 'true' if the computation has already been computed. - member HasValue: bool - - /// Return 'true' if the computation is in-progress. - member IsComputing: bool \ No newline at end of file diff --git a/src/fsharp/CheckComputationExpressions.fs b/src/fsharp/CheckComputationExpressions.fs index fc3d9ace548..fa413a52a02 100644 --- a/src/fsharp/CheckComputationExpressions.fs +++ b/src/fsharp/CheckComputationExpressions.fs @@ -4,7 +4,8 @@ /// with generalization at appropriate points. module internal FSharp.Compiler.CheckComputationExpressions -open Internal.Utilities.Library +open FSharp.Compiler +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.AttributeChecking open FSharp.Compiler.CheckExpressions @@ -15,11 +16,10 @@ open FSharp.Compiler.Infos open FSharp.Compiler.InfoReader open FSharp.Compiler.NameResolution open FSharp.Compiler.PatternMatchCompilation -open FSharp.Compiler.Syntax.PrettyNaming -open FSharp.Compiler.Syntax +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps @@ -99,10 +99,10 @@ let YieldFree (cenv: cenv) expr = YieldFree e2 && Option.forall YieldFree e3opt | SynExpr.TryWith (e1, _, clauses, _, _, _, _) -> - YieldFree e1 && clauses |> List.forall (fun (SynMatchClause(_, _, e, _, _)) -> YieldFree e) + YieldFree e1 && clauses |> List.forall (fun (Clause(_, _, e, _, _)) -> YieldFree e) | (SynExpr.Match (_, _, clauses, _) | SynExpr.MatchBang (_, _, clauses, _)) -> - clauses |> List.forall (fun (SynMatchClause(_, _, e, _, _)) -> YieldFree e) + clauses |> List.forall (fun (Clause(_, _, e, _, _)) -> YieldFree e) | SynExpr.For (_, _, _, _, _, body, _) | SynExpr.TryFinally (body, _, _, _, _) @@ -130,10 +130,10 @@ let YieldFree (cenv: cenv) expr = YieldFree e2 && Option.forall YieldFree e3opt | SynExpr.TryWith (e1, _, clauses, _, _, _, _) -> - YieldFree e1 && clauses |> List.forall (fun (SynMatchClause(_, _, e, _, _)) -> YieldFree e) + YieldFree e1 && clauses |> List.forall (fun (Clause(_, _, e, _, _)) -> YieldFree e) | (SynExpr.Match (_, _, clauses, _) | SynExpr.MatchBang (_, _, clauses, _)) -> - clauses |> List.forall (fun (SynMatchClause(_, _, e, _, _)) -> YieldFree e) + clauses |> List.forall (fun (Clause(_, _, e, _, _)) -> YieldFree e) | SynExpr.For (_, _, _, _, _, body, _) | SynExpr.TryFinally (body, _, _, _, _) @@ -423,52 +423,27 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, // Environment is needed for completions CallEnvSink cenv.tcSink (comp.Range, env.NameEnv, ad) - let tryGetArgAttribsForCustomOperator (nm: Ident) = - match tryGetDataForCustomOperation nm with - | Some argInfos -> - argInfos - |> List.map (fun (_nm, __maintainsVarSpaceUsingBind, _maintainsVarSpace, _allowInto, _isLikeZip, _isLikeJoin, _isLikeGroupJoin, _joinConditionWord, methInfo) -> - match methInfo.GetParamAttribs(cenv.amap, mWhole) with - | [curriedArgInfo] -> Some curriedArgInfo // one for the actual argument group - | _ -> None) - |> Some - | _ -> None - + // Check for the [] attribute on an argument position let tryGetArgInfosForCustomOperator (nm: Ident) = match tryGetDataForCustomOperation nm with | Some argInfos -> argInfos |> List.map (fun (_nm, __maintainsVarSpaceUsingBind, _maintainsVarSpace, _allowInto, _isLikeZip, _isLikeJoin, _isLikeGroupJoin, _joinConditionWord, methInfo) -> - match methInfo with - | FSMeth(_, _, vref, _) -> + match methInfo with + | FSMeth(_, _, vref, _) -> match ArgInfosOfMember cenv.g vref with - | [curriedArgInfo] -> Some curriedArgInfo + | [curriedArgInfo] -> Some curriedArgInfo // one for the actual argument group | _ -> None | _ -> None) |> Some | _ -> None let tryExpectedArgCountForCustomOperator (nm: Ident) = - match tryGetArgAttribsForCustomOperator nm with + match tryGetArgInfosForCustomOperator nm with | None -> None | Some argInfosForOverloads -> let nums = argInfosForOverloads |> List.map (function None -> -1 | Some argInfos -> List.length argInfos) - - // Prior to 'OverloadsForCustomOperations' we count exact arguments. - // - // With 'OverloadsForCustomOperations' we don't compute an exact expected argument count - // if any arguments are optional, out or ParamArray. - let isSpecial = - if cenv.g.langVersion.SupportsFeature LanguageFeature.OverloadsForCustomOperations then - argInfosForOverloads |> List.exists (fun info -> - match info with - | None -> false - | Some args -> - args |> List.exists (fun (isParamArrayArg, _isInArg, isOutArg, optArgInfo, _callerInfo, _reflArgInfo) -> isParamArrayArg || isOutArg || optArgInfo.IsOptional)) - else - false - - if not isSpecial && nums |> List.forall (fun v -> v >= 0 && v = nums.[0]) then + if nums |> List.forall (fun v -> v >= 0 && v = nums.[0]) then Some (max (nums.[0] - 1) 0) // drop the computation context argument else None @@ -626,7 +601,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, | _ -> None - let (|ForEachThenJoinOrGroupJoinOrZipClause|_|) strict e = + let (|ForEachThenJoinOrGroupJoinOrZipClause|_|) e = match e with | ForEachThen (isFromSource, firstSourcePat, firstSource, JoinOrGroupJoinOrZipClause(nm, secondSourcePat, secondSource, keySelectorsOpt, pat3opt, mOpCore), innerComp) when @@ -637,7 +612,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, -> Some (isFromSource, firstSourcePat, firstSource, nm, secondSourcePat, secondSource, keySelectorsOpt, pat3opt, mOpCore, innerComp) - | JoinOrGroupJoinOrZipClause(nm, pat2, expr2, expr3, pat3opt, mOpCore) when strict -> + | JoinOrGroupJoinOrZipClause(nm, pat2, expr2, expr3, pat3opt, mOpCore) -> errorR(Error(FSComp.SR.tcBinaryOperatorRequiresBody(nm.idText, Option.get (customOpUsageText nm)), nm.idRange)) Some (true, arbPat e.Range, arbExpr("_outerSource", e.Range), nm, pat2, expr2, expr3, pat3opt, mOpCore, arbExpr("_innerComp", e.Range)) @@ -708,7 +683,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, let rangeForCombine innerComp1 = match innerComp1 with | SynExpr.IfThenElse (_, _, _, _, _, mIfToThen, _m) -> mIfToThen - | SynExpr.Match (DebugPointAtBinding.Yes mMatch, _, _, _) -> mMatch + | SynExpr.Match (DebugPointAtBinding mMatch, _, _, _) -> mMatch | SynExpr.TryWith (_, _, _, _, _, DebugPointAtTry.Yes mTry, _) -> mTry | SynExpr.TryFinally (_, _, _, DebugPointAtTry.Yes mTry, _) -> mTry | SynExpr.For (DebugPointAtFor.Yes mBind, _, _, _, _, _, _) -> mBind @@ -720,7 +695,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, let checkForBinaryApp comp = match comp with | StripApps(SingleIdent nm, [StripApps(SingleIdent nm2, args); arg2]) when - IsInfixOperator nm.idText && + PrettyNaming.IsInfixOperator nm.idText && (match tryExpectedArgCountForCustomOperator nm2 with Some n -> n > 0 | _ -> false) && not (List.isEmpty args) -> let estimatedRangeOfIntendedLeftAndRightArguments = unionRanges (List.last args).Range arg2.Range @@ -779,7 +754,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, // ... // --> // zip expr1 expr2 (fun pat1 pat3 -> ...) - | ForEachThenJoinOrGroupJoinOrZipClause true (isFromSource, firstSourcePat, firstSource, nm, secondSourcePat, secondSource, keySelectorsOpt, secondResultPatOpt, mOpCore, innerComp) -> + | ForEachThenJoinOrGroupJoinOrZipClause (isFromSource, firstSourcePat, firstSource, nm, secondSourcePat, secondSource, keySelectorsOpt, secondResultPatOpt, mOpCore, innerComp) -> if q = CustomOperationsMode.Denied then error(Error(FSComp.SR.tcCustomOperationMayNotBeUsedHere(), nm.idRange)) @@ -931,7 +906,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, let wrappedSourceExpr = mkSourceExprConditional isFromSource sourceExpr let mFor = match spForLoop with DebugPointAtFor.Yes m -> m | _ -> pat.Range let mPat = pat.Range - let spBind = match spForLoop with DebugPointAtFor.Yes m -> DebugPointAtBinding.Yes m | DebugPointAtFor.No -> DebugPointAtBinding.NoneAtSticky + let spBind = match spForLoop with DebugPointAtFor.Yes m -> DebugPointAtBinding m | DebugPointAtFor.No -> NoDebugPointAtStickyBinding if isNil (TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AtMostOneResult cenv env mFor ad "For" builderTy) then error(Error(FSComp.SR.tcRequireBuilderMethod("For"), mFor)) @@ -944,7 +919,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, Some (trans CompExprTranslationPass.Initial q varSpace innerComp (fun holeFill -> - translatedCtxt (mkSynCall "For" mFor [wrappedSourceExpr; SynExpr.MatchLambda (false, sourceExpr.Range, [SynMatchClause(pat, None, holeFill, mPat, DebugPointForTarget.Yes)], spBind, mFor) ])) ) + translatedCtxt (mkSynCall "For" mFor [wrappedSourceExpr; SynExpr.MatchLambda (false, sourceExpr.Range, [Clause(pat, None, holeFill, mPat, DebugPointForTarget.Yes)], spBind, mFor) ])) ) | SynExpr.For (spBind, id, start, dir, finish, innerComp, m) -> let mFor = match spBind with DebugPointAtFor.Yes m -> m | _ -> m @@ -1048,9 +1023,9 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, | SynExpr.DoBang (rhsExpr, m) -> let sp = match sp with - | DebugPointAtSequential.ExprOnly -> DebugPointAtBinding.Yes m - | DebugPointAtSequential.StmtOnly -> DebugPointAtBinding.NoneAtDo - | DebugPointAtSequential.Both -> DebugPointAtBinding.Yes m + | DebugPointAtSequential.ExprOnly -> DebugPointAtBinding m + | DebugPointAtSequential.StmtOnly -> NoDebugPointAtDoBinding + | DebugPointAtSequential.Both -> DebugPointAtBinding m Some(trans CompExprTranslationPass.Initial q varSpace (SynExpr.LetOrUseBang (sp, false, true, SynPat.Const(SynConst.Unit, rhsExpr.Range), rhsExpr, [], innerComp2, m)) translatedCtxt) // "expr; cexpr" is treated as sequential execution @@ -1088,7 +1063,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, // For 'query' check immediately if isQuery then match (List.map (BindingNormalization.NormalizeBinding ValOrMemberBinding cenv env) binds) with - | [NormalizedBinding(_, SynBindingKind.Normal, (*inline*)false, (*mutable*)false, _, _, _, _, _, _, _, _)] when not isRec -> + | [NormalizedBinding(_, NormalBinding, (*inline*)false, (*mutable*)false, _, _, _, _, _, _, _, _)] when not isRec -> () | normalizedBindings -> let failAt m = error(Error(FSComp.SR.tcNonSimpleLetBindingInQuery(), m)) @@ -1101,7 +1076,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, addVarsToVarSpace varSpace (fun mQueryOp env -> // Normalize the bindings before detecting the bound variables match (List.map (BindingNormalization.NormalizeBinding ValOrMemberBinding cenv env) binds) with - | [NormalizedBinding(_vis, SynBindingKind.Normal, false, false, _, _, _, _, pat, _, _, _)] -> + | [NormalizedBinding(_vis, NormalBinding, false, false, _, _, _, _, pat, _, _, _)] -> // successful case use _holder = TemporarilySuspendReportingTypecheckResultsToSink cenv.tcSink let _, _, vspecs, envinner, _ = TcMatchPattern cenv (NewInferenceType()) env tpenv (pat, None) @@ -1113,11 +1088,11 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, Some (trans CompExprTranslationPass.Initial q varSpace innerComp (fun holeFill -> translatedCtxt (SynExpr.LetOrUse (isRec, false, binds, holeFill, m)))) // 'use x = expr in expr' - | SynExpr.LetOrUse (_, true, [SynBinding (_, SynBindingKind.Normal, _, _, _, _, _, pat, _, rhsExpr, _, spBind)], innerComp, _) -> - let bindRange = match spBind with DebugPointAtBinding.Yes m -> m | _ -> rhsExpr.Range + | SynExpr.LetOrUse (_, true, [Binding (_, NormalBinding, _, _, _, _, _, pat, _, rhsExpr, _, spBind)], innerComp, _) -> + let bindRange = match spBind with DebugPointAtBinding m -> m | _ -> rhsExpr.Range if isQuery then error(Error(FSComp.SR.tcUseMayNotBeUsedInQueries(), bindRange)) let innerCompRange = innerComp.Range - let consumeExpr = SynExpr.MatchLambda(false, innerCompRange, [SynMatchClause(pat, None, transNoQueryOps innerComp, innerCompRange, DebugPointForTarget.Yes)], spBind, innerCompRange) + let consumeExpr = SynExpr.MatchLambda(false, innerCompRange, [Clause(pat, None, transNoQueryOps innerComp, innerCompRange, DebugPointForTarget.Yes)], spBind, innerCompRange) if isNil (TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AtMostOneResult cenv env bindRange ad "Using" builderTy) then error(Error(FSComp.SR.tcRequireBuilderMethod("Using"), bindRange)) Some (translatedCtxt (mkSynCall "Using" bindRange [rhsExpr; consumeExpr ])) @@ -1128,7 +1103,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, // --> build.BindReturn(e1, (fun _argN -> match _argN with pat -> expr-without-return)) | SynExpr.LetOrUseBang (spBind, false, isFromSource, pat, rhsExpr, [], innerComp, _) -> - let bindRange = match spBind with DebugPointAtBinding.Yes m -> m | _ -> rhsExpr.Range + let bindRange = match spBind with DebugPointAtBinding m -> m | _ -> rhsExpr.Range if isQuery then error(Error(FSComp.SR.tcBindMayNotBeUsedInQueries(), bindRange)) // Add the variables to the query variable space, on demand @@ -1142,10 +1117,10 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, Some (transBind q varSpace bindRange "Bind" [rhsExpr] pat spBind innerComp translatedCtxt) // 'use! pat = e1 in e2' --> build.Bind(e1, (function _argN -> match _argN with pat -> build.Using(x, (fun _argN -> match _argN with pat -> e2)))) - | SynExpr.LetOrUseBang (spBind, true, isFromSource, (SynPat.Named (id, false, _, _) as pat) , rhsExpr, [], innerComp, _) + | SynExpr.LetOrUseBang (spBind, true, isFromSource, (SynPat.Named (SynPat.Wild _, id, false, _, _) as pat) , rhsExpr, [], innerComp, _) | SynExpr.LetOrUseBang (spBind, true, isFromSource, (SynPat.LongIdent (longDotId=LongIdentWithDots([id], _)) as pat), rhsExpr, [], innerComp, _) -> - let bindRange = match spBind with DebugPointAtBinding.Yes m -> m | _ -> rhsExpr.Range + let bindRange = match spBind with DebugPointAtBinding m -> m | _ -> rhsExpr.Range if isQuery then error(Error(FSComp.SR.tcBindMayNotBeUsedInQueries(), bindRange)) if isNil (TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AtMostOneResult cenv env bindRange ad "Using" builderTy) then @@ -1153,9 +1128,9 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, if isNil (TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AtMostOneResult cenv env bindRange ad "Bind" builderTy) then error(Error(FSComp.SR.tcRequireBuilderMethod("Bind"), bindRange)) - let consumeExpr = SynExpr.MatchLambda(false, bindRange, [SynMatchClause(pat, None, transNoQueryOps innerComp, innerComp.Range, DebugPointForTarget.Yes)], spBind, bindRange) + let consumeExpr = SynExpr.MatchLambda(false, bindRange, [Clause(pat, None, transNoQueryOps innerComp, innerComp.Range, DebugPointForTarget.Yes)], spBind, bindRange) let consumeExpr = mkSynCall "Using" bindRange [SynExpr.Ident(id); consumeExpr ] - let consumeExpr = SynExpr.MatchLambda(false, bindRange, [SynMatchClause(pat, None, consumeExpr, id.idRange, DebugPointForTarget.Yes)], spBind, bindRange) + let consumeExpr = SynExpr.MatchLambda(false, bindRange, [Clause(pat, None, consumeExpr, id.idRange, DebugPointForTarget.Yes)], spBind, bindRange) let rhsExpr = mkSourceExprConditional isFromSource rhsExpr // TODO: consider allowing translation to BindReturn Some(translatedCtxt (mkSynCall "Bind" bindRange [rhsExpr; consumeExpr])) @@ -1176,7 +1151,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, | SynExpr.LetOrUseBang(letSpBind, false, isFromSource, letPat, letRhsExpr, andBangBindings, innerComp, letBindRange) -> if cenv.g.langVersion.SupportsFeature LanguageFeature.AndBang then if isQuery then error(Error(FSComp.SR.tcBindMayNotBeUsedInQueries(), letBindRange)) - let bindRange = match letSpBind with DebugPointAtBinding.Yes m -> m | _ -> letRhsExpr.Range + let bindRange = match letSpBind with DebugPointAtBinding m -> m | _ -> letRhsExpr.Range let sources = (letRhsExpr :: [for (_, _, _, _, andExpr, _) in andBangBindings -> andExpr ]) |> List.map (mkSourceExprConditional isFromSource) let pats = letPat :: [for (_, _, _, andPat, _, _) in andBangBindings -> andPat ] let sourcesRange = sources |> List.map (fun e -> e.Range) |> List.reduce unionRanges @@ -1277,21 +1252,21 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, error(Error(FSComp.SR.tcAndBangNotSupported(), comp.Range)) | SynExpr.Match (spMatch, expr, clauses, m) -> - let mMatch = match spMatch with DebugPointAtBinding.Yes mMatch -> mMatch | _ -> m + let mMatch = match spMatch with DebugPointAtBinding mMatch -> mMatch | _ -> m if isQuery then error(Error(FSComp.SR.tcMatchMayNotBeUsedWithQuery(), mMatch)) - let clauses = clauses |> List.map (fun (SynMatchClause(pat, cond, innerComp, patm, sp)) -> SynMatchClause(pat, cond, transNoQueryOps innerComp, patm, sp)) + let clauses = clauses |> List.map (fun (Clause(pat, cond, innerComp, patm, sp)) -> Clause(pat, cond, transNoQueryOps innerComp, patm, sp)) Some(translatedCtxt (SynExpr.Match (spMatch, expr, clauses, m))) // 'match! expr with pats ...' --> build.Bind(e1, (function pats ...)) | SynExpr.MatchBang (spMatch, expr, clauses, m) -> let matchExpr = mkSourceExpr expr - let mMatch = match spMatch with DebugPointAtBinding.Yes mMatch -> mMatch | _ -> m + let mMatch = match spMatch with DebugPointAtBinding mMatch -> mMatch | _ -> m if isQuery then error(Error(FSComp.SR.tcMatchMayNotBeUsedWithQuery(), mMatch)) if isNil (TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AtMostOneResult cenv env mMatch ad "Bind" builderTy) then error(Error(FSComp.SR.tcRequireBuilderMethod("Bind"), mMatch)) - let clauses = clauses |> List.map (fun (SynMatchClause(pat, cond, innerComp, patm, sp)) -> SynMatchClause(pat, cond, transNoQueryOps innerComp, patm, sp)) + let clauses = clauses |> List.map (fun (Clause(pat, cond, innerComp, patm, sp)) -> Clause(pat, cond, transNoQueryOps innerComp, patm, sp)) let consumeExpr = SynExpr.MatchLambda (false, mMatch, clauses, spMatch, mMatch) // TODO: consider allowing translation to BindReturn @@ -1301,8 +1276,8 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, let mTry = match spTry with DebugPointAtTry.Yes m -> m | _ -> mTryToLast if isQuery then error(Error(FSComp.SR.tcTryWithMayNotBeUsedInQueries(), mTry)) - let clauses = clauses |> List.map (fun (SynMatchClause(pat, cond, clauseComp, patm, sp)) -> SynMatchClause(pat, cond, transNoQueryOps clauseComp, patm, sp)) - let consumeExpr = SynExpr.MatchLambda(true, mTryToLast, clauses, DebugPointAtBinding.NoneAtSticky, mTryToLast) + let clauses = clauses |> List.map (fun (Clause(pat, cond, clauseComp, patm, sp)) -> Clause(pat, cond, transNoQueryOps clauseComp, patm, sp)) + let consumeExpr = SynExpr.MatchLambda(true, mTryToLast, clauses, NoDebugPointAtStickyBinding, mTryToLast) if isNil (TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AtMostOneResult cenv env mTry ad "TryWith" builderTy) then error(Error(FSComp.SR.tcRequireBuilderMethod("TryWith"), mTry)) @@ -1420,7 +1395,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, // Rebind using either for ... or let!.... let rebind = if maintainsVarSpaceUsingBind then - SynExpr.LetOrUseBang (DebugPointAtBinding.NoneAtLet, false, false, intoPat, dataCompAfterOp, [], contExpr, intoPat.Range) + SynExpr.LetOrUseBang (NoDebugPointAtLetBinding, false, false, intoPat, dataCompAfterOp, [], contExpr, intoPat.Range) else SynExpr.ForEach (DebugPointAtFor.No, SeqExprOnly false, false, intoPat, dataCompAfterOp, contExpr, intoPat.Range) @@ -1442,7 +1417,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, // Rebind using either for ... or let!.... let rebind = if lastUsesBind then - SynExpr.LetOrUseBang (DebugPointAtBinding.NoneAtLet, false, false, varSpacePat, dataCompPrior, [], compClausesExpr, compClausesExpr.Range) + SynExpr.LetOrUseBang (NoDebugPointAtLetBinding, false, false, varSpacePat, dataCompPrior, [], compClausesExpr, compClausesExpr.Range) else SynExpr.ForEach (DebugPointAtFor.No, SeqExprOnly false, false, varSpacePat, dataCompPrior, compClausesExpr, compClausesExpr.Range) @@ -1466,7 +1441,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, SynExpr.ImplicitZero m else SynExpr.YieldOrReturn((false, true), SynExpr.Const(SynConst.Unit, m), m) - trans CompExprTranslationPass.Initial q varSpace (SynExpr.LetOrUseBang (DebugPointAtBinding.NoneAtDo, false, false, SynPat.Const(SynConst.Unit, mUnit), rhsExpr, [], bodyExpr, m)) translatedCtxt + trans CompExprTranslationPass.Initial q varSpace (SynExpr.LetOrUseBang (NoDebugPointAtDoBinding, false, false, SynPat.Const(SynConst.Unit, mUnit), rhsExpr, [], bodyExpr, m)) translatedCtxt // "expr;" in final position is treated as { expr; zero } // Suppress the sequence point on the "zero" @@ -1506,7 +1481,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, // Build the `BindReturn` call let dataCompPriorToOp = - let consumeExpr = SynExpr.MatchLambda(false, consumePat.Range, [SynMatchClause(consumePat, None, innerExpr, innerRange, DebugPointForTarget.Yes)], spBind, innerRange) + let consumeExpr = SynExpr.MatchLambda(false, consumePat.Range, [Clause(consumePat, None, innerExpr, innerRange, DebugPointForTarget.Yes)], spBind, innerRange) translatedCtxt (mkSynCall bindName bindRange (bindArgs @ [consumeExpr])) match customOpInfo with @@ -1522,7 +1497,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, // Build the `Bind` call trans CompExprTranslationPass.Initial q varSpace innerComp (fun holeFill -> - let consumeExpr = SynExpr.MatchLambda(false, consumePat.Range, [SynMatchClause(consumePat, None, holeFill, innerRange, DebugPointForTarget.Yes)], spBind, innerRange) + let consumeExpr = SynExpr.MatchLambda(false, consumePat.Range, [Clause(consumePat, None, holeFill, innerRange, DebugPointForTarget.Yes)], spBind, innerRange) translatedCtxt (mkSynCall bindName bindRange (bindArgs @ [consumeExpr]))) and convertSimpleReturnToExpr varSpace innerComp = @@ -1530,11 +1505,11 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, | SynExpr.YieldOrReturn ((false, _), returnExpr, _) -> Some (returnExpr, None) | SynExpr.Match (spMatch, expr, clauses, m) -> let clauses = - clauses |> List.map (fun (SynMatchClause(pat, cond, innerComp2, patm, sp)) -> + clauses |> List.map (fun (Clause(pat, cond, innerComp2, patm, sp)) -> match convertSimpleReturnToExpr varSpace innerComp2 with | None -> None // failure | Some (_, Some _) -> None // custom op on branch = failure - | Some (innerExpr2, None) -> Some (SynMatchClause(pat, cond, innerExpr2, patm, sp))) + | Some (innerExpr2, None) -> Some (Clause(pat, cond, innerExpr2, patm, sp))) if clauses |> List.forall Option.isSome then Some (SynExpr.Match (spMatch, expr, (clauses |> List.map Option.get), m), None) else @@ -1587,7 +1562,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, and isSimpleExpr comp = match comp with - | ForEachThenJoinOrGroupJoinOrZipClause false _ -> false + | ForEachThenJoinOrGroupJoinOrZipClause _ -> false | SynExpr.ForEach _ -> false | SynExpr.For _ -> false | SynExpr.While _ -> false @@ -1601,11 +1576,11 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, | SynExpr.LetOrUse (_, _, _, innerComp, _) -> isSimpleExpr innerComp | SynExpr.LetOrUseBang _ -> false | SynExpr.Match (_, _, clauses, _) -> - clauses |> List.forall (fun (SynMatchClause(_, _, innerComp, _, _)) -> isSimpleExpr innerComp) + clauses |> List.forall (fun (Clause(_, _, innerComp, _, _)) -> isSimpleExpr innerComp) | SynExpr.MatchBang _ -> false | SynExpr.TryWith (innerComp, _, clauses, _, _, _, _) -> isSimpleExpr innerComp && - clauses |> List.forall (fun (SynMatchClause(_, _, clauseComp, _, _)) -> isSimpleExpr clauseComp) + clauses |> List.forall (fun (Clause(_, _, clauseComp, _, _)) -> isSimpleExpr clauseComp) | SynExpr.YieldOrReturnFrom _ -> false | SynExpr.YieldOrReturn _ -> false | SynExpr.DoBang _ -> false @@ -1668,6 +1643,7 @@ let mkSeqDelay (cenv: cenv) env m genTy lam = UnifyTypes cenv env m genTy (mkSeqTy cenv.g genResultTy) mkCallSeqDelay cenv.g m genResultTy (mkUnitDelayLambda cenv.g m lam) + let mkSeqAppend (cenv: cenv) env m genTy e1 e2 = let genResultTy = NewInferenceType () UnifyTypes cenv env m genTy (mkSeqTy cenv.g genResultTy) @@ -1716,26 +1692,20 @@ let TcSequenceExpression (cenv: cenv) env tpenv comp overallTy m = cenv.g.langVersion.SupportsFeature LanguageFeature.ImplicitYield && (YieldFree cenv comp) - let mkDelayedExpr m (coreExpr: Expr) = + let mkDelayedExpr (coreExpr: Expr) = + let m = coreExpr.Range let overallTy = tyOfExpr cenv.g coreExpr mkSeqDelay cenv env m overallTy coreExpr let rec tryTcSequenceExprBody env genOuterTy tpenv comp = match comp with - | SynExpr.ForEach (spFor, SeqExprOnly _seqExprOnly, _isFromSource, pat, pseudoEnumExpr, innerComp, m) -> + | SynExpr.ForEach (_spBind, SeqExprOnly _seqExprOnly, _isFromSource, pat, pseudoEnumExpr, innerComp, m) -> // This expression is not checked with the knowledge it is an IEnumerable, since we permit other enumerable types with GetEnumerator/MoveNext methods, as does C# let pseudoEnumExpr, arb_ty, tpenv = TcExprOfUnknownType cenv env tpenv pseudoEnumExpr - let enumExpr, enumElemTy = ConvertArbitraryExprToEnumerable cenv arb_ty env pseudoEnumExpr + let (enumExpr: Expr), enumElemTy = ConvertArbitraryExprToEnumerable cenv arb_ty env pseudoEnumExpr let pat', _, (vspecs: Val list), envinner, tpenv = TcMatchPattern cenv enumElemTy env tpenv (pat, None) let innerExpr, tpenv = tcSequenceExprBody envinner genOuterTy tpenv innerComp - let enumExprMark = enumExpr.Range - // We attach the debug point to the lambda expression so we can fetch it out again in LowerComputedListOrArraySeqExpr - let mFor = - match spFor with - | DebugPointAtFor.Yes m -> m - | _ -> enumExprMark - match pat', vspecs, innerExpr with // peephole optimization: "for x in e1 -> e2" == "e1 |> List.map (fun x -> e2)" *) | (TPat_as (TPat_wild _, PBind (v, _), _), @@ -1743,7 +1713,8 @@ let TcSequenceExpression (cenv: cenv) env tpenv comp overallTy m = Expr.App (Expr.Val (vf, _, _), _, [genEnumElemTy], [yexpr], _)) when vs.Length = 1 && valRefEq cenv.g vf cenv.g.seq_singleton_vref -> - let lam = mkLambda mFor v (yexpr, genEnumElemTy) + let enumExprMark = enumExpr.Range + let lam = mkLambda enumExprMark v (yexpr, genEnumElemTy) // SEQUENCE POINTS: need to build a let here consuming spBind let enumExpr = mkCoerceIfNeeded cenv.g (mkSeqTy cenv.g enumElemTy) (tyOfExpr cenv.g enumExpr) enumExpr @@ -1755,47 +1726,31 @@ let TcSequenceExpression (cenv: cenv) env tpenv comp overallTy m = // SEQUENCE POINTS: need to build a let here consuming spBind let matchv, matchExpr = compileSeqExprMatchClauses cenv env enumExprMark (pat', vspecs) innerExpr None enumElemTy genOuterTy - let lam = mkLambda mFor matchv (matchExpr, tyOfExpr cenv.g matchExpr) + let lam = mkLambda enumExprMark matchv (matchExpr, tyOfExpr cenv.g matchExpr) Some(mkSeqCollect cenv env m enumElemTy genOuterTy lam enumExpr, tpenv) | SynExpr.For (spBind, id, start, dir, finish, innerComp, m) -> Some(tcSequenceExprBody env genOuterTy tpenv (elimFastIntegerForLoop (spBind, id, start, dir, finish, innerComp, m))) - | SynExpr.While (spWhile, guardExpr, innerComp, _m) -> + | SynExpr.While (_spWhile, guardExpr, innerComp, _m) -> let guardExpr, tpenv = TcExpr cenv cenv.g.bool_ty env tpenv guardExpr let innerExpr, tpenv = tcSequenceExprBody env genOuterTy tpenv innerComp let guardExprMark = guardExpr.Range let guardExpr = mkUnitDelayLambda cenv.g guardExprMark guardExpr - - // We attach the debug point to the lambda expression so we can fetch it out again in LowerComputedListOrArraySeqExpr - let mWhile = - match spWhile with - | DebugPointAtWhile.Yes m -> m - | _ -> guardExprMark - - let innerExpr = mkDelayedExpr mWhile innerExpr + let innerExpr = mkDelayedExpr innerExpr Some(mkSeqFromFunctions cenv env guardExprMark genOuterTy guardExpr innerExpr, tpenv) - | SynExpr.TryFinally (innerComp, unwindExpr, mTryToLast, spTry, spFinally) -> + | SynExpr.TryFinally (innerComp, unwindExpr, _mTryToLast, _spTry, _spFinally) -> let innerExpr, tpenv = tcSequenceExprBody env genOuterTy tpenv innerComp let (unwindExpr: Expr), tpenv = TcExpr cenv cenv.g.unit_ty env tpenv unwindExpr - // We attach the debug points to the lambda expressions so we can fetch it out again in LowerComputedListOrArraySeqExpr - let mTry = - match spTry with - | DebugPointAtTry.Yes m -> m - | _ -> unwindExpr.Range - - let mFinally = - match spFinally with - | DebugPointAtFinally.Yes m -> m - | _ -> unwindExpr.Range - - let innerExpr = mkDelayedExpr mTry innerExpr - let unwindExpr = mkUnitDelayLambda cenv.g mFinally unwindExpr + let unwindExprMark = unwindExpr.Range + let unwindExpr = mkUnitDelayLambda cenv.g unwindExprMark unwindExpr + let innerExpr = mkDelayedExpr innerExpr + let innerExprMark = innerExpr.Range - Some(mkSeqFinally cenv env mTryToLast genOuterTy innerExpr unwindExpr, tpenv) + Some(mkSeqFinally cenv env innerExprMark genOuterTy innerExpr unwindExpr, tpenv) | SynExpr.Paren (_, _, _, m) when not (cenv.g.langVersion.SupportsFeature LanguageFeature.ImplicitYield)-> error(Error(FSComp.SR.tcConstructIsAmbiguousInSequenceExpression(), m)) @@ -1813,7 +1768,7 @@ let TcSequenceExpression (cenv: cenv) env tpenv comp overallTy m = match res with | Choice1Of2 innerExpr1 -> let innerExpr2, tpenv = tcSequenceExprBody env genOuterTy tpenv innerComp2 - let innerExpr2 = mkDelayedExpr innerExpr2.Range innerExpr2 + let innerExpr2 = mkDelayedExpr innerExpr2 Some(mkSeqAppend cenv env innerComp1.Range genOuterTy innerExpr1 innerExpr2, tpenv) | Choice2Of2 stmt1 -> let innerExpr2, tpenv = tcSequenceExprBody env genOuterTy tpenv innerComp2 @@ -1837,7 +1792,7 @@ let TcSequenceExpression (cenv: cenv) env tpenv comp overallTy m = (fun x -> x) |> Some // 'use x = expr in expr' - | SynExpr.LetOrUse (_isRec, true, [SynBinding (_vis, SynBindingKind.Normal, _, _, _, _, _, pat, _, rhsExpr, _, spBind)], innerComp, wholeExprMark) -> + | SynExpr.LetOrUse (_isRec, true, [Binding (_vis, NormalBinding, _, _, _, _, _, pat, _, rhsExpr, _, _spBind)], innerComp, wholeExprMark) -> let bindPatTy = NewInferenceType () let inputExprTy = NewInferenceType () @@ -1845,13 +1800,9 @@ let TcSequenceExpression (cenv: cenv) env tpenv comp overallTy m = UnifyTypes cenv env m inputExprTy bindPatTy let (inputExpr: Expr), tpenv = TcExpr cenv inputExprTy env tpenv rhsExpr let innerExpr, tpenv = tcSequenceExprBody envinner genOuterTy tpenv innerComp - let mBind = - match spBind with - | DebugPointAtBinding.Yes m -> m - | _ -> inputExpr.Range let inputExprMark = inputExpr.Range let matchv, matchExpr = compileSeqExprMatchClauses cenv env inputExprMark (pat', vspecs) innerExpr (Some inputExpr) bindPatTy genOuterTy - let consumeExpr = mkLambda mBind matchv (matchExpr, genOuterTy) + let consumeExpr = mkLambda wholeExprMark matchv (matchExpr, genOuterTy) //SEQPOINT NEEDED - we must consume spBind on this path Some(mkSeqUsing cenv env wholeExprMark bindPatTy genOuterTy inputExpr consumeExpr, tpenv) @@ -1862,7 +1813,7 @@ let TcSequenceExpression (cenv: cenv) env tpenv comp overallTy m = let inputExpr, matchty, tpenv = TcExprOfUnknownType cenv env tpenv expr let tclauses, tpenv = List.mapFold - (fun tpenv (SynMatchClause(pat, cond, innerComp, _, sp)) -> + (fun tpenv (Clause(pat, cond, innerComp, _, sp)) -> let pat', cond', vspecs, envinner, tpenv = TcMatchPattern cenv matchty env tpenv (pat, cond) let innerExpr, tpenv = tcSequenceExprBody envinner genOuterTy tpenv innerComp TClause(pat', cond', TTarget(vspecs, innerExpr, sp), pat'.Range), tpenv) @@ -1925,7 +1876,7 @@ let TcSequenceExpression (cenv: cenv) env tpenv comp overallTy m = Choice2Of2 stmt, tpenv let coreExpr, tpenv = tcSequenceExprBody env overallTy tpenv comp - let delayedExpr = mkDelayedExpr coreExpr.Range coreExpr + let delayedExpr = mkDelayedExpr coreExpr delayedExpr, tpenv let TcSequenceExpressionEntry (cenv: cenv) env overallTy tpenv (isArrayOrList, isNotNakedRefCell, comp) m = @@ -1964,7 +1915,7 @@ let TcArrayOrListSequenceExpression (cenv: cenv) env overallTy tpenv (isArray, c if nelems > 0 && List.forall (function SynExpr.Const (SynConst.UInt16 _, _) -> true | _ -> false) elems then SynExpr.Const (SynConst.UInt16s (Array.ofList (List.map (function SynExpr.Const (SynConst.UInt16 x, _) -> x | _ -> failwith "unreachable") elems)), m) elif nelems > 0 && List.forall (function SynExpr.Const (SynConst.Byte _, _) -> true | _ -> false) elems - then SynExpr.Const (SynConst.Bytes (Array.ofList (List.map (function SynExpr.Const (SynConst.Byte x, _) -> x | _ -> failwith "unreachable") elems), SynByteStringKind.Regular, m), m) + then SynExpr.Const (SynConst.Bytes (Array.ofList (List.map (function SynExpr.Const (SynConst.Byte x, _) -> x | _ -> failwith "unreachable") elems), m), m) else SynExpr.ArrayOrList (isArray, elems, m) else if elems.Length > 500 then @@ -1989,7 +1940,6 @@ let TcArrayOrListSequenceExpression (cenv: cenv) env overallTy tpenv (isArray, c let expr = if cenv.g.compilingFslib then - //warning(Error(FSComp.SR.fslibUsingComputedListOrArray(), expr.Range)) expr else // We add a call to 'seq ... ' to make sure sequence expression compilation gets applied to the contents of the diff --git a/src/fsharp/CheckComputationExpressions.fsi b/src/fsharp/CheckComputationExpressions.fsi index a40f898e712..f7843840cc1 100644 --- a/src/fsharp/CheckComputationExpressions.fsi +++ b/src/fsharp/CheckComputationExpressions.fsi @@ -3,9 +3,8 @@ module internal FSharp.Compiler.CheckComputationExpressions open FSharp.Compiler.CheckExpressions -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.TypedTree val TcSequenceExpressionEntry: cenv:TcFileState -> env:TcEnv -> overallTy:TType -> tpenv:UnscopedTyparEnv -> isArrayOrList:bool * isNotNakedRefCell:bool ref * comp:SynExpr -> m:range -> Expr * UnscopedTyparEnv diff --git a/src/fsharp/CheckDeclarations.fs b/src/fsharp/CheckDeclarations.fs index 8b47a983b8c..abfe10f7015 100644 --- a/src/fsharp/CheckDeclarations.fs +++ b/src/fsharp/CheckDeclarations.fs @@ -5,13 +5,14 @@ module internal FSharp.Compiler.CheckDeclarations open System open System.Collections.Generic -open Internal.Utilities.Collections -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras -open Internal.Utilities.Library.ResultOrException +open Internal.Utilities + open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Internal.Library.ResultOrException open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.AttributeChecking @@ -23,19 +24,22 @@ open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features open FSharp.Compiler.Infos open FSharp.Compiler.InfoReader +open FSharp.Compiler.Lib +open FSharp.Compiler.MethodCalls open FSharp.Compiler.MethodOverrides open FSharp.Compiler.NameResolution -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.PatternMatchCompilation +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Range +open FSharp.Compiler.Rational +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Xml open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TypeRelations +open FSharp.Compiler.XmlDoc #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping @@ -425,12 +429,12 @@ module TcRecdUnionAndEnumDeclarations = | _ -> () rfspec - let TcAnonFieldDecl cenv env parent tpenv nm (SynField(Attributes attribs, isStatic, idOpt, ty, isMutable, xmldoc, vis, m)) = + let TcAnonFieldDecl cenv env parent tpenv nm (Field(Attributes attribs, isStatic, idOpt, ty, isMutable, xmldoc, vis, m)) = let id = (match idOpt with None -> mkSynId m nm | Some id -> id) let doc = xmldoc.ToXmlDoc(true, Some []) TcFieldDecl cenv env parent false tpenv (isStatic, attribs, id, idOpt.IsNone, ty, isMutable, doc, vis, m) - let TcNamedFieldDecl cenv env parent isIncrClass tpenv (SynField(Attributes attribs, isStatic, id, ty, isMutable, xmldoc, vis, m)) = + let TcNamedFieldDecl cenv env parent isIncrClass tpenv (Field(Attributes attribs, isStatic, id, ty, isMutable, xmldoc, vis, m)) = match id with | None -> error (Error(FSComp.SR.tcFieldRequiresName(), m)) | Some id -> @@ -455,20 +459,20 @@ module TcRecdUnionAndEnumDeclarations = let ValidateFieldNames (synFields: SynField list, tastFields: RecdField list) = let seen = Dictionary() - (synFields, tastFields) ||> List.iter2 (fun sf f -> + for (sf, f) in List.zip synFields tastFields do match seen.TryGetValue f.Name with | true, synField -> match sf, synField with - | SynField(_, _, Some id, _, _, _, _, _), SynField(_, _, Some(_), _, _, _, _, _) -> + | Field(_, _, Some id, _, _, _, _, _), Field(_, _, Some(_), _, _, _, _, _) -> error(Error(FSComp.SR.tcFieldNameIsUsedModeThanOnce(id.idText), id.idRange)) - | SynField(_, _, Some id, _, _, _, _, _), SynField(_, _, None, _, _, _, _, _) - | SynField(_, _, None, _, _, _, _, _), SynField(_, _, Some id, _, _, _, _, _) -> + | Field(_, _, Some id, _, _, _, _, _), Field(_, _, None, _, _, _, _, _) + | Field(_, _, None, _, _, _, _, _), Field(_, _, Some id, _, _, _, _, _) -> error(Error(FSComp.SR.tcFieldNameConflictsWithGeneratedNameForAnonymousField(id.idText), id.idRange)) | _ -> assert false | _ -> - seen.Add(f.Name, sf)) + seen.Add(f.Name, sf) - let TcUnionCaseDecl cenv env parent thisTy thisTyInst tpenv (SynUnionCase(Attributes synAttrs, id, args, xmldoc, vis, m)) = + let TcUnionCaseDecl cenv env parent thisTy thisTyInst tpenv (UnionCase(Attributes synAttrs, id, args, xmldoc, vis, m)) = let attrs = TcAttributes cenv env AttributeTargets.UnionCaseDecl synAttrs // the attributes of a union case decl get attached to the generated "static factory" method let vis, _ = ComputeAccessAndCompPath env None m vis None parent let vis = CombineReprAccess parent vis @@ -477,9 +481,9 @@ module TcRecdUnionAndEnumDeclarations = let rfields, recordTy = match args with - | SynUnionCaseKind.Fields flds -> + | UnionCaseFields flds -> let nFields = flds.Length - let rfields = flds |> List.mapi (fun i (SynField (idOpt = idOpt) as fld) -> + let rfields = flds |> List.mapi (fun i (Field (idOpt = idOpt) as fld) -> match idOpt, parent with | Some fieldId, Parent tcref -> let item = Item.UnionCaseField (UnionCaseInfo (thisTyInst, UnionCaseRef (tcref, id.idText)), i) @@ -490,7 +494,7 @@ module TcRecdUnionAndEnumDeclarations = ValidateFieldNames(flds, rfields) rfields, thisTy - | SynUnionCaseKind.FullType (ty, arity) -> + | UnionCaseFullType (ty, arity) -> let ty', _ = TcTypeAndRecover cenv NoNewTypars CheckCxs ItemOccurence.UseInType env tpenv ty let curriedArgTys, recordTy = GetTopTauTypeInFSharpForm cenv.g (arity |> TranslateTopValSynInfo m (TcAttributes cenv env) |> TranslatePartialArity []).ArgInfos ty' m if curriedArgTys.Length > 1 then @@ -512,7 +516,7 @@ module TcRecdUnionAndEnumDeclarations = let unionCases' = unionCases |> List.map (TcUnionCaseDecl cenv env parent thisTy thisTyInst tpenv) unionCases' |> CheckDuplicates (fun uc -> uc.Id) "union case" - let TcEnumDecl cenv env parent thisTy fieldTy (SynEnumCase(Attributes synAttrs, id, v, _, xmldoc, m)) = + let TcEnumDecl cenv env parent thisTy fieldTy (EnumCase(Attributes synAttrs, id, v, xmldoc, m)) = let attrs = TcAttributes cenv env AttributeTargets.Field synAttrs match v with | SynConst.Bytes _ @@ -943,7 +947,7 @@ module IncrClassChecking = let tps, _, argInfos, _, _ = GetTopValTypeInCompiledForm g topValInfo 0 v.Type v.Range let valSynInfo = SynValInfo(argInfos |> List.mapSquared (fun (_, argInfo) -> SynArgInfo([], false, argInfo.Name)), SynInfo.unnamedRetVal) - let memberFlags = (if isStatic then StaticMemberFlags else NonVirtualMemberFlags) SynMemberKind.Member + let memberFlags = (if isStatic then StaticMemberFlags else NonVirtualMemberFlags) MemberKind.Member let id = mkSynId v.Range name let memberInfo = MakeMemberDataAndMangledNameForMemberVal(g, tcref, false, [], [], memberFlags, valSynInfo, mkSynId v.Range name, true) @@ -1282,7 +1286,7 @@ module IncrClassChecking = match spBind, rhsExpr with // Don't generate big sequence points for functions in classes | _, (Expr.Lambda _ | Expr.TyLambda _) -> v.Range - | DebugPointAtBinding.Yes m, _ -> m + | DebugPointAtBinding m, _ -> m | _ -> v.Range let assignExpr = reps.MakeValueAssign (Some thisVal) thisTyInst NoSafeInitInfo v rhsExpr m let adjustSafeInitFieldExprOpt = @@ -1643,7 +1647,7 @@ module MutRecBindingChecking = | _ -> () if not isStatic && tcref.IsStructOrEnumTycon then - let allDo = letBinds |> List.forall (function (SynBinding(_, SynBindingKind.Do, _, _, _, _, _, _, _, _, _, _)) -> true | _ -> false) + let allDo = letBinds |> List.forall (function (Binding(_, DoBinding, _, _, _, _, _, _, _, _, _, _)) -> true | _ -> false) // Code for potential future design change to allow functions-compiled-as-members in structs if allDo then errorR(Deprecated(FSComp.SR.tcStructsMayNotContainDoBindings(), (trimRangeToLine m))) @@ -1670,7 +1674,7 @@ module MutRecBindingChecking = | Some memberFlags -> if memberFlags.IsInstance then error(Error(FSComp.SR.tcMeasureDeclarationsRequireStaticMembers(), m)) match memberFlags.MemberKind with - | SynMemberKind.Constructor -> error(Error(FSComp.SR.tcMeasureDeclarationsRequireStaticMembersNotConstructors(), m)) + | MemberKind.Constructor -> error(Error(FSComp.SR.tcMeasureDeclarationsRequireStaticMembersNotConstructors(), m)) | _ -> () let rbind = NormalizedRecBindingDefn(containerInfo, newslotsOK, declKind, bind) let overridesOK = DeclKind.CanOverrideOrImplement declKind @@ -1706,7 +1710,7 @@ module MutRecBindingChecking = | Phase2AOpen _ #endif | Phase2AIncrClassCtor _ | Phase2AInherit _ | Phase2AIncrClassCtorJustAfterSuperInit -> false - | Phase2AIncrClassBindings (_, binds, _, _, _) -> binds |> List.exists (function (SynBinding (_, SynBindingKind.Do, _, _, _, _, _, _, _, _, _, _)) -> true | _ -> false) + | Phase2AIncrClassBindings (_, binds, _, _, _) -> binds |> List.exists (function (Binding (_, DoBinding, _, _, _, _, _, _, _, _, _, _)) -> true | _ -> false) | Phase2AIncrClassCtorJustAfterLastLet | Phase2AMember _ -> true let restRev = List.rev rest @@ -1816,10 +1820,10 @@ module MutRecBindingChecking = let envInstance = AddDeclaredTypars CheckForDuplicateTypars incrClassCtorLhs.InstanceCtorDeclaredTypars envInstance let envStatic = AddDeclaredTypars CheckForDuplicateTypars incrClassCtorLhs.InstanceCtorDeclaredTypars envStatic - let envInstance = match incrClassCtorLhs.InstanceCtorSafeThisValOpt with Some v -> AddLocalVal g cenv.tcSink scopem v envInstance | None -> envInstance - let envInstance = List.foldBack (AddLocalValPrimitive cenv.g) incrClassCtorLhs.InstanceCtorArgs envInstance - let envNonRec = match incrClassCtorLhs.InstanceCtorSafeThisValOpt with Some v -> AddLocalVal g cenv.tcSink scopem v envNonRec | None -> envNonRec - let envNonRec = List.foldBack (AddLocalValPrimitive cenv.g) incrClassCtorLhs.InstanceCtorArgs envNonRec + let envInstance = match incrClassCtorLhs.InstanceCtorSafeThisValOpt with Some v -> AddLocalVal cenv.tcSink scopem v envInstance | None -> envInstance + let envInstance = List.foldBack AddLocalValPrimitive incrClassCtorLhs.InstanceCtorArgs envInstance + let envNonRec = match incrClassCtorLhs.InstanceCtorSafeThisValOpt with Some v -> AddLocalVal cenv.tcSink scopem v envNonRec | None -> envNonRec + let envNonRec = List.foldBack AddLocalValPrimitive incrClassCtorLhs.InstanceCtorArgs envNonRec let safeThisValBindOpt = TcLetrecComputeCtorSafeThisValBind cenv incrClassCtorLhs.InstanceCtorSafeThisValOpt let innerState = (tpenv, envInstance, envStatic, envNonRec, generalizedRecBinds, preGeneralizationRecBinds, uncheckedRecBindsTable) @@ -1835,8 +1839,8 @@ module MutRecBindingChecking = with e -> errorRecovery e m mkUnit g m, tpenv - let envInstance = match baseValOpt with Some baseVal -> AddLocalVal g cenv.tcSink scopem baseVal envInstance | None -> envInstance - let envNonRec = match baseValOpt with Some baseVal -> AddLocalVal g cenv.tcSink scopem baseVal envNonRec | None -> envNonRec + let envInstance = match baseValOpt with Some baseVal -> AddLocalVal cenv.tcSink scopem baseVal envInstance | None -> envInstance + let envNonRec = match baseValOpt with Some baseVal -> AddLocalVal cenv.tcSink scopem baseVal envNonRec | None -> envNonRec let innerState = (tpenv, envInstance, envStatic, envNonRec, generalizedRecBinds, preGeneralizationRecBinds, uncheckedRecBindsTable) Phase2BInherit (inheritsExpr, baseValOpt), innerState @@ -1864,7 +1868,7 @@ module MutRecBindingChecking = |> List.unzip List.concat binds, bindRs, env, tpenv - let envNonRec = (envNonRec, binds) ||> List.fold (fun acc bind -> AddLocalValPrimitive g bind.Var acc) + let envNonRec = (envNonRec, binds) ||> List.fold (fun acc bind -> AddLocalValPrimitive bind.Var acc) // Check to see that local bindings and members don't have the same name and check some other adhoc conditions for bind in binds do @@ -1880,7 +1884,7 @@ module MutRecBindingChecking = | _ -> errorR (Error(FSComp.SR.tcMemberAndLocalClassBindingHaveSameName nm, bind.Var.Range)) // Also add static entries to the envInstance if necessary - let envInstance = (if isStatic then (binds, envInstance) ||> List.foldBack (fun b e -> AddLocalVal cenv.g cenv.tcSink scopem b.Var e) else env) + let envInstance = (if isStatic then (binds, envInstance) ||> List.foldBack (fun b e -> AddLocalVal cenv.tcSink scopem b.Var e) else env) let envStatic = (if isStatic then env else envStatic) let innerState = (tpenv, envInstance, envStatic, envNonRec, generalizedRecBinds, preGeneralizationRecBinds, uncheckedRecBindsTable) Phase2BIncrClassBindings bindRs, innerState @@ -2097,7 +2101,7 @@ module MutRecBindingChecking = // Generate the (value, expr) pairs for the implicit // object constructor and implicit static initializer let ctorValueExprBindings = - [ (let ctorValueExprBinding = TBind(incrClassCtorLhs.InstanceCtorVal, ctorBodyLambdaExpr, DebugPointAtBinding.NoneAtSticky) + [ (let ctorValueExprBinding = TBind(incrClassCtorLhs.InstanceCtorVal, ctorBodyLambdaExpr, NoDebugPointAtStickyBinding) let rbind = { ValScheme = incrClassCtorLhs.InstanceCtorValScheme ; Binding = ctorValueExprBinding } FixupLetrecBind cenv envForDecls.DisplayEnv generalizedTyparsForRecursiveBlock rbind) ] @ @@ -2105,7 +2109,7 @@ module MutRecBindingChecking = | None -> [] | Some cctorBodyLambdaExpr -> [ (let _, cctorVal, cctorValScheme = incrClassCtorLhs.StaticCtorValInfo.Force() - let cctorValueExprBinding = TBind(cctorVal, cctorBodyLambdaExpr, DebugPointAtBinding.NoneAtSticky) + let cctorValueExprBinding = TBind(cctorVal, cctorBodyLambdaExpr, NoDebugPointAtStickyBinding) let rbind = { ValScheme = cctorValScheme; Binding = cctorValueExprBinding } FixupLetrecBind cenv envForDecls.DisplayEnv generalizedTyparsForRecursiveBlock rbind) ] ) @@ -2214,7 +2218,7 @@ module MutRecBindingChecking = // Add the module abbreviations let envForDecls = (envForDecls, moduleAbbrevs) ||> List.fold (TcModuleAbbrevDecl cenv scopem) // Add the values and members - let envForDecls = AddLocalVals cenv.g cenv.tcSink scopem lets envForDecls + let envForDecls = AddLocalVals cenv.tcSink scopem lets envForDecls envForDecls) /// Phase 2: Check the members and 'let' definitions in a mutually recursive group of definitions. @@ -2258,8 +2262,8 @@ module MutRecBindingChecking = let envForDeclsUpdated = envForDecls - |> AddLocalVals cenv.g cenv.tcSink scopem prelimRecValues - |> AddLocalVals cenv.g cenv.tcSink scopem ctorVals + |> AddLocalVals cenv.tcSink scopem prelimRecValues + |> AddLocalVals cenv.tcSink scopem ctorVals envForDeclsUpdated) @@ -2366,7 +2370,8 @@ let TcMutRecDefns_Phase2 (cenv: cenv) envInitial bindsm scopem mutRecNSInfo (env let ity' = let envinner = AddDeclaredTypars CheckForDuplicateTypars declaredTyconTypars envForTycon TcTypeAndRecover cenv NoNewTypars CheckCxs ItemOccurence.UseInType envinner emptyUnscopedTyparEnv ity |> fst - + if not (isInterfaceTy g ity') then errorR(Error(FSComp.SR.tcTypeIsNotInterfaceType0(), ity.Range)) + if not (tcref.HasInterface g ity') then error(Error(FSComp.SR.tcAllImplementedInterfacesShouldBeDeclared(), ity.Range)) @@ -2883,7 +2888,7 @@ let CheckForDuplicateModule env nm m = /// Check 'exception' declarations in implementations and signatures module TcExceptionDeclarations = - let TcExnDefnCore_Phase1A cenv env parent (SynExceptionDefnRepr(Attributes synAttrs, SynUnionCase(_, id, _, _, _, _), _, doc, vis, m)) = + let TcExnDefnCore_Phase1A cenv env parent (SynExceptionDefnRepr(Attributes synAttrs, UnionCase(_, id, _, _, _, _), _, doc, vis, m)) = let attrs = TcAttributes cenv env AttributeTargets.ExnDecl synAttrs if not (String.isLeadingIdentifierCharacterUpperCase id.idText) then errorR(NotUpperCaseConstructor m) let vis, cpath = ComputeAccessAndCompPath env None m vis None parent @@ -2894,14 +2899,14 @@ module TcExceptionDeclarations = let doc = doc.ToXmlDoc(true, Some []) Construct.NewExn cpath id vis repr attrs doc - let TcExnDefnCore_Phase1G_EstablishRepresentation (cenv: cenv) (env: TcEnv) parent (exnc: Entity) (SynExceptionDefnRepr(_, SynUnionCase(_, _, args, _, _, _), reprIdOpt, _, _, m)) = + let TcExnDefnCore_Phase1G_EstablishRepresentation (cenv: cenv) (env: TcEnv) parent (exnc: Entity) (SynExceptionDefnRepr(_, UnionCase(_, _, args, _, _, _), reprIdOpt, _, _, m)) = let g = cenv.g - let args = match args with (SynUnionCaseKind.Fields args) -> args | _ -> error(Error(FSComp.SR.tcExplicitTypeSpecificationCannotBeUsedForExceptionConstructors(), m)) + let args = match args with (UnionCaseFields args) -> args | _ -> error(Error(FSComp.SR.tcExplicitTypeSpecificationCannotBeUsedForExceptionConstructors(), m)) let ad = env.AccessRights let id = exnc.Id let args' = - args |> List.mapi (fun i (SynField (idOpt = idOpt) as fdef) -> + args |> List.mapi (fun i (Field (idOpt = idOpt) as fdef) -> match idOpt with | Some fieldId -> let tcref = mkLocalTyconRef exnc @@ -3045,18 +3050,18 @@ module EstablishTypeDefinitionCores = error(Error(FSComp.SR.tcAttributesOfTypeSpecifyMultipleKindsForType(), m)) match kind with - | SynTypeDefnKind.Unspecified -> - if hasClassAttr || hasAbstractClassAttr || hasMeasureAttr then SynTypeDefnKind.Class - elif hasInterfaceAttr then SynTypeDefnKind.Interface - elif hasStructAttr then SynTypeDefnKind.Struct - elif isConcrete || not (isNil fields) then SynTypeDefnKind.Class - elif isNil slotsigs && inSig then SynTypeDefnKind.Opaque - else SynTypeDefnKind.Interface + | TyconUnspecified -> + if hasClassAttr || hasAbstractClassAttr || hasMeasureAttr then TyconClass + elif hasInterfaceAttr then TyconInterface + elif hasStructAttr then TyconStruct + elif isConcrete || not (isNil fields) then TyconClass + elif isNil slotsigs && inSig then TyconHiddenRepr + else TyconInterface | k -> - if hasClassAttr && not (match k with SynTypeDefnKind.Class -> true | _ -> false) || - hasMeasureAttr && not (match k with SynTypeDefnKind.Class | SynTypeDefnKind.Abbrev | SynTypeDefnKind.Opaque -> true | _ -> false) || - hasInterfaceAttr && not (match k with SynTypeDefnKind.Interface -> true | _ -> false) || - hasStructAttr && not (match k with SynTypeDefnKind.Struct | SynTypeDefnKind.Record | SynTypeDefnKind.Union -> true | _ -> false) then + if hasClassAttr && not (match k with TyconClass -> true | _ -> false) || + hasMeasureAttr && not (match k with TyconClass | TyconAbbrev | TyconHiddenRepr -> true | _ -> false) || + hasInterfaceAttr && not (match k with TyconInterface -> true | _ -> false) || + hasStructAttr && not (match k with TyconStruct | TyconRecord | TyconUnion -> true | _ -> false) then error(Error(FSComp.SR.tcKindOfTypeSpecifiedDoesNotMatchDefinition(), m)) k @@ -3083,13 +3088,13 @@ module EstablishTypeDefinitionCores = | SynTypeDefnSimpleRepr.None _ -> () | SynTypeDefnSimpleRepr.Union (_, unionCases, _) -> - for (SynUnionCase (_, _, args, _, _, m)) in unionCases do + for (UnionCase (_, _, args, _, _, m)) in unionCases do match args with - | SynUnionCaseKind.Fields flds -> - for (SynField(_, _, _, ty, _, _, _, m)) in flds do + | UnionCaseFields flds -> + for (Field(_, _, _, ty, _, _, _, m)) in flds do let ty', _ = TcTypeAndRecover cenv NoNewTypars NoCheckCxs ItemOccurence.UseInType env tpenv ty yield (ty', m) - | SynUnionCaseKind.FullType (ty, arity) -> + | UnionCaseFullType (ty, arity) -> let ty', _ = TcTypeAndRecover cenv NoNewTypars NoCheckCxs ItemOccurence.UseInType env tpenv ty let curriedArgTys, _ = GetTopTauTypeInFSharpForm cenv.g (arity |> TranslateTopValSynInfo m (TcAttributes cenv env) |> TranslatePartialArity []).ArgInfos ty' m if curriedArgTys.Length > 1 then @@ -3099,7 +3104,7 @@ module EstablishTypeDefinitionCores = yield (argty, m) | SynTypeDefnSimpleRepr.General (_, _, _, fields, _, _, implicitCtorSynPats, _) when tycon.IsFSharpStructOrEnumTycon -> // for structs - for (SynField(_, isStatic, _, ty, _, _, _, m)) in fields do + for (Field(_, isStatic, _, ty, _, _, _, m)) in fields do if not isStatic then let ty', _ = TcTypeAndRecover cenv NoNewTypars NoCheckCxs ItemOccurence.UseInType env tpenv ty yield (ty', m) @@ -3116,7 +3121,7 @@ module EstablishTypeDefinitionCores = yield (ty, m) | SynTypeDefnSimpleRepr.Record (_, fields, _) -> - for (SynField(_, _, _, ty, _, _, _, m)) in fields do + for (Field(_, _, _, ty, _, _, _, m)) in fields do let ty', _ = TcTypeAndRecover cenv NoNewTypars NoCheckCxs ItemOccurence.UseInType env tpenv ty yield (ty', m) @@ -3152,7 +3157,7 @@ module EstablishTypeDefinitionCores = let TypeNamesInMutRecDecls cenv env (compDecls: MutRecShapes) = [ for d in compDecls do match d with - | MutRecShape.Tycon (MutRecDefnsPhase1DataForTycon(SynComponentInfo(_, TyparDecls typars, _, ids, _, _, _, _), _, _, _, _, isAtOriginalTyconDefn), _) -> + | MutRecShape.Tycon (MutRecDefnsPhase1DataForTycon(ComponentInfo(_, typars, _, ids, _, _, _, _), _, _, _, _, isAtOriginalTyconDefn), _) -> if isAtOriginalTyconDefn && (TcTyparDecls cenv env typars |> List.forall (fun p -> p.Kind = TyparKind.Measure)) then yield (List.last ids).idText | _ -> () ] @@ -3162,10 +3167,10 @@ module EstablishTypeDefinitionCores = [ for def in defs do match def with | SynModuleDecl.Types (typeSpecs, _) -> - for (SynTypeDefn(SynComponentInfo(_, TyparDecls typars, _, ids, _, _, _, _), trepr, _, _, _)) in typeSpecs do + for (TypeDefn(ComponentInfo(_, typars, _, ids, _, _, _, _), trepr, _, _)) in typeSpecs do if isNil typars then match trepr with - | SynTypeDefnRepr.ObjectModel(SynTypeDefnKind.Augmentation, _, _) -> () + | SynTypeDefnRepr.ObjectModel(TyconAugmentation, _, _) -> () | _ -> yield (List.last ids).idText | _ -> () ] |> set @@ -3175,7 +3180,7 @@ module EstablishTypeDefinitionCores = [ for def in defs do match def with | SynModuleSigDecl.Types (typeSpecs, _) -> - for (SynTypeDefnSig(SynComponentInfo(_, TyparDecls typars, _, ids, _, _, _, _), trepr, extraMembers, _)) in typeSpecs do + for (TypeDefnSig(ComponentInfo(_, typars, _, ids, _, _, _, _), trepr, extraMembers, _)) in typeSpecs do if isNil typars then match trepr with | SynTypeDefnSigRepr.Simple((SynTypeDefnSimpleRepr.None _), _) when not (isNil extraMembers) -> () @@ -3184,7 +3189,7 @@ module EstablishTypeDefinitionCores = |> set let TcTyconDefnCore_Phase1A_BuildInitialModule cenv envInitial parent typeNames compInfo decls = - let (SynComponentInfo(Attributes attribs, _, _, longPath, xml, _, vis, im)) = compInfo + let (ComponentInfo(Attributes 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 typeNames modAttrs id.idText @@ -3210,7 +3215,7 @@ module EstablishTypeDefinitionCores = /// but /// - we don't yet 'properly' establish constraints on type parameters let private TcTyconDefnCore_Phase1A_BuildInitialTycon (cenv: cenv) env parent (MutRecDefnsPhase1DataForTycon(synTyconInfo, synTyconRepr, _, preEstablishedHasDefaultCtor, hasSelfReferentialCtor, _)) = - let (SynComponentInfo (_, TyparDecls synTypars, _, id, doc, preferPostfix, synVis, _)) = synTyconInfo + let (ComponentInfo (_, synTypars, _, id, doc, preferPostfix, synVis, _)) = synTyconInfo let checkedTypars = TcTyparDecls cenv env synTypars id |> List.iter (CheckNamespaceModuleOrTypeName cenv.g) match synTyconRepr with @@ -3246,24 +3251,7 @@ module EstablishTypeDefinitionCores = // '' documentation is allowed for delegates let paramNames = match synTyconRepr with - | SynTypeDefnSimpleRepr.General (SynTypeDefnKind.Delegate (_ty, arity), _, _, _, _, _, _, _) -> arity.ArgNames - | SynTypeDefnSimpleRepr.General (SynTypeDefnKind.Unspecified, _, _, _, _, _, Some synPats, _) -> - let rec patName (p: SynSimplePat) = - match p with - | SynSimplePat.Id (id, _, _, _, _, _) -> id.idText - | SynSimplePat.Typed(pat, _, _) -> patName pat - | SynSimplePat.Attrib(pat, _, _) -> patName pat - - let rec pats (p: SynSimplePats) = - match p with - | SynSimplePats.SimplePats (ps, _) -> ps - | SynSimplePats.Typed (ps, _, _) -> pats ps - - let patNames = - pats synPats - |> List.map patName - - patNames + | SynTypeDefnSimpleRepr.General (TyconDelegate (_ty, arity), _, _, _, _, _, _, _) -> arity.ArgNames | _ -> [] let doc = doc.ToXmlDoc(true, Some paramNames ) Construct.NewTycon @@ -3282,7 +3270,7 @@ module EstablishTypeDefinitionCores = /// synTyconInfo: Syntactic AST for the name, attributes etc. of the type constructor /// synTyconRepr: Syntactic AST for the RHS of the type definition let private TcTyconDefnCore_Phase1B_EstablishBasicKind (cenv: cenv) inSig envinner (MutRecDefnsPhase1DataForTycon(synTyconInfo, synTyconRepr, _, _, _, _)) (tycon: Tycon) = - let (SynComponentInfo(Attributes synAttrs, TyparDecls typars, _, _, _, _, _, _)) = synTyconInfo + let (ComponentInfo(Attributes synAttrs, typars, _, _, _, _, _, _)) = synTyconInfo let m = tycon.Range let id = tycon.Id @@ -3314,7 +3302,7 @@ module EstablishTypeDefinitionCores = | SynTypeDefnSimpleRepr.Exception _ -> TNoRepr | SynTypeDefnSimpleRepr.None m -> // Run InferTyconKind to raise errors on inconsistent attribute sets - InferTyconKind cenv.g (SynTypeDefnKind.Opaque, attrs, [], [], inSig, true, m) |> ignore + InferTyconKind cenv.g (TyconHiddenRepr, attrs, [], [], inSig, true, m) |> ignore if not inSig && not hasMeasureAttr then errorR(Error(FSComp.SR.tcTypeRequiresDefinition(), m)) if hasMeasureAttr then @@ -3328,26 +3316,25 @@ module EstablishTypeDefinitionCores = | SynTypeDefnSimpleRepr.Union (_, _, m) -> // Run InferTyconKind to raise errors on inconsistent attribute sets - InferTyconKind cenv.g (SynTypeDefnKind.Union, attrs, [], [], inSig, true, m) |> ignore + InferTyconKind cenv.g (TyconUnion, attrs, [], [], inSig, true, m) |> ignore // Note: the table of union cases is initially empty Construct.MakeUnionRepr [] | SynTypeDefnSimpleRepr.TypeAbbrev _ -> // Run InferTyconKind to raise errors on inconsistent attribute sets - InferTyconKind cenv.g (SynTypeDefnKind.Abbrev, attrs, [], [], inSig, true, m) |> ignore + InferTyconKind cenv.g (TyconAbbrev, attrs, [], [], inSig, true, m) |> ignore TNoRepr | SynTypeDefnSimpleRepr.LibraryOnlyILAssembly (s, m) -> - let s = (s :?> ILType) // Run InferTyconKind to raise errors on inconsistent attribute sets - InferTyconKind cenv.g (SynTypeDefnKind.IL, attrs, [], [], inSig, true, m) |> ignore + InferTyconKind cenv.g (TyconILAssemblyCode, attrs, [], [], inSig, true, m) |> ignore TAsmRepr s | SynTypeDefnSimpleRepr.Record (_, _, m) -> // Run InferTyconKind to raise errors on inconsistent attribute sets - InferTyconKind cenv.g (SynTypeDefnKind.Record, attrs, [], [], inSig, true, m) |> ignore + InferTyconKind cenv.g (TyconRecord, attrs, [], [], inSig, true, m) |> ignore // Note: the table of record fields is initially empty TRecdRepr (Construct.MakeRecdFieldsTable []) @@ -3355,15 +3342,15 @@ module EstablishTypeDefinitionCores = | SynTypeDefnSimpleRepr.General (kind, _, slotsigs, fields, isConcrete, _, _, _) -> let kind = InferTyconKind cenv.g (kind, attrs, slotsigs, fields, inSig, isConcrete, m) match kind with - | SynTypeDefnKind.Opaque -> + | TyconHiddenRepr -> TNoRepr | _ -> let kind = match kind with - | SynTypeDefnKind.Class -> TTyconClass - | SynTypeDefnKind.Interface -> TTyconInterface - | SynTypeDefnKind.Delegate _ -> TTyconDelegate (MakeSlotSig("Invoke", cenv.g.unit_ty, [], [], [], None)) - | SynTypeDefnKind.Struct -> TTyconStruct + | TyconClass -> TTyconClass + | TyconInterface -> TTyconInterface + | TyconDelegate _ -> TTyconDelegate (MakeSlotSig("Invoke", cenv.g.unit_ty, [], [], [], None)) + | TyconStruct -> TTyconStruct | _ -> error(InternalError("should have inferred tycon kind", m)) let repr = @@ -3676,7 +3663,7 @@ module EstablishTypeDefinitionCores = let inheritedTys = fst (List.mapFold (mapFoldFst (TcTypeAndRecover cenv NoNewTypars checkCxs ItemOccurence.UseInType envinner)) tpenv inherits) let implementedTys, inheritedTys = match kind with - | SynTypeDefnKind.Interface -> + | TyconInterface -> explicitImplements |> List.iter (fun (_, m) -> errorR(Error(FSComp.SR.tcInterfacesShouldUseInheritNotInterface(), m))) (implementedTys @ inheritedTys), [] | _ -> implementedTys, inheritedTys @@ -3719,13 +3706,13 @@ module EstablishTypeDefinitionCores = match inheritedTys with | [] -> match kind with - | SynTypeDefnKind.Struct -> Some(cenv.g.system_Value_ty) - | SynTypeDefnKind.Delegate _ -> Some(cenv.g.system_MulticastDelegate_ty ) - | SynTypeDefnKind.Opaque | SynTypeDefnKind.Class | SynTypeDefnKind.Interface -> None + | TyconStruct -> Some(cenv.g.system_Value_ty) + | TyconDelegate _ -> Some(cenv.g.system_MulticastDelegate_ty ) + | TyconHiddenRepr | TyconClass | TyconInterface -> None | _ -> error(InternalError("should have inferred tycon kind", m)) | [(ty, m)] -> - if not firstPass && not (match kind with SynTypeDefnKind.Class -> true | _ -> false) then + if not firstPass && not (match kind with TyconClass -> true | _ -> false) then errorR (Error(FSComp.SR.tcStructsInterfacesEnumsDelegatesMayNotInheritFromOtherTypes(), m)) CheckSuperType cenv ty m if isTyparTy cenv.g ty then @@ -3944,7 +3931,6 @@ module EstablishTypeDefinitionCores = TRecdRepr (Construct.MakeRecdFieldsTable recdFields), None, NoSafeInitInfo | SynTypeDefnSimpleRepr.LibraryOnlyILAssembly (s, _) -> - let s = (s :?> ILType) noCLIMutableAttributeCheck() noMeasureAttributeCheck() noSealedAttributeCheck FSComp.SR.tcTypesAreAlwaysSealedAssemblyCode @@ -3976,7 +3962,7 @@ module EstablishTypeDefinitionCores = let containerInfo = TyconContainerInfo(innerParent, thisTyconRef, thisTyconRef.Typars m, NoSafeInitInfo) let kind = InferTyconKind g (kind, attrs, slotsigs, fields, inSig, isConcrete, m) match kind with - | SynTypeDefnKind.Opaque -> + | TyconHiddenRepr -> hiddenReprChecks true noAllowNullLiteralAttributeCheck() TNoRepr, None, NoSafeInitInfo @@ -3993,7 +3979,7 @@ module EstablishTypeDefinitionCores = let kind = match kind with - | SynTypeDefnKind.Struct -> + | TyconStruct -> noCLIMutableAttributeCheck() noSealedAttributeCheck FSComp.SR.tcTypesAreAlwaysSealedStruct noAbstractClassAttributeCheck() @@ -4003,7 +3989,7 @@ module EstablishTypeDefinitionCores = structLayoutAttributeCheck true TTyconStruct - | SynTypeDefnKind.Interface -> + | TyconInterface -> if hasSealedAttr = Some true then errorR (Error(FSComp.SR.tcInterfaceTypesCannotBeSealed(), m)) noCLIMutableAttributeCheck() structLayoutAttributeCheck false @@ -4011,12 +3997,12 @@ module EstablishTypeDefinitionCores = allowNullLiteralAttributeCheck() noFieldsCheck userFields TTyconInterface - | SynTypeDefnKind.Class -> + | TyconClass -> noCLIMutableAttributeCheck() structLayoutAttributeCheck(not isIncrClass) allowNullLiteralAttributeCheck() TTyconClass - | SynTypeDefnKind.Delegate (ty, arity) -> + | TyconDelegate (ty, arity) -> noCLIMutableAttributeCheck() noSealedAttributeCheck FSComp.SR.tcTypesAreAlwaysSealedDelegate structLayoutAttributeCheck false @@ -4053,7 +4039,7 @@ module EstablishTypeDefinitionCores = let abstractSlots = [ for (valSpfn, memberFlags) in slotsigs do - let (SynValSig(_, _, _, _, _valSynData, _, _, _, _, _, m)) = valSpfn + let (ValSpfn(_, _, _, _, _valSynData, _, _, _, _, _, m)) = valSpfn CheckMemberFlags None NewSlotsOK OverridesOK memberFlags m @@ -4320,8 +4306,7 @@ module EstablishTypeDefinitionCores = match origInfo, tyconOpt with | (typeDefCore, _, _), Some (tycon: Tycon) -> let (MutRecDefnsPhase1DataForTycon(synTyconInfo, _, _, _, _, _)) = typeDefCore - let (SynComponentInfo(_, TyparsAndConstraints (_, cs1), cs2, _, _, _, _, _)) = synTyconInfo - let synTyconConstraints = cs1 @ cs2 + let (ComponentInfo(_, _, synTyconConstraints, _, _, _, _, _)) = synTyconInfo let envForTycon = AddDeclaredTypars CheckForDuplicateTypars (tycon.Typars m) envForDecls let thisTyconRef = mkLocalTyconRef tycon let envForTycon = MakeInnerEnvForTyconRef envForTycon thisTyconRef false @@ -4565,7 +4550,7 @@ module TcDeclarations = declKind, tcref, typars - let private isAugmentationTyconDefnRepr = function (SynTypeDefnSimpleRepr.General(SynTypeDefnKind.Augmentation, _, _, _, _, _, _, _)) -> true | _ -> false + let private isAugmentationTyconDefnRepr = function (SynTypeDefnSimpleRepr.General(TyconAugmentation, _, _, _, _, _, _, _)) -> true | _ -> false let private isAutoProperty = function SynMemberDefn.AutoProperty _ -> true | _ -> false let private isMember = function SynMemberDefn.Member _ -> true | _ -> false let private isImplicitCtor = function SynMemberDefn.ImplicitCtor _ -> true | _ -> false @@ -4640,7 +4625,7 @@ module TcDeclarations = /// where simpleRepr can contain inherit type, declared fields and virtual slots. /// body = members /// where members contain methods/overrides, also implicit ctor, inheritCall and local definitions. - let rec private SplitTyconDefn (SynTypeDefn(synTyconInfo, trepr, extraMembers, _, _)) = + let rec private SplitTyconDefn (TypeDefn(synTyconInfo, trepr, extraMembers, _)) = let implements1 = List.choose (function SynMemberDefn.Interface (ty, _, _) -> Some(ty, ty.Range) | _ -> None) extraMembers match trepr with | SynTypeDefnRepr.ObjectModel(kind, cspec, m) -> @@ -4684,11 +4669,11 @@ module TcDeclarations = let retInfo = match tyOpt with None -> None | Some ty -> Some (SynReturnInfo((ty, SynInfo.unnamedRetVal), ty.Range)) let isMutable = match propKind with - | SynMemberKind.PropertySet - | SynMemberKind.PropertyGetSet -> true + | MemberKind.PropertySet + | MemberKind.PropertyGetSet -> true | _ -> false let attribs = mkAttributeList attribs mWholeAutoProp - let binding = mkSynBinding (xmlDoc, headPat) (None, false, isMutable, mLetPortion, DebugPointAtBinding.NoneAtInvisible, retInfo, synExpr, synExpr.Range, [], attribs, None) + let binding = mkSynBinding (xmlDoc, headPat) (None, false, isMutable, mLetPortion, NoDebugPointAtInvisibleBinding, retInfo, synExpr, synExpr.Range, [], attribs, None) [(SynMemberDefn.LetBindings ([binding], isStatic, false, mWholeAutoProp))] @@ -4711,32 +4696,32 @@ module TcDeclarations = let headPat = SynPat.LongIdent (LongIdentWithDots(headPatIds, []), None, Some noInferredTypars, SynArgPats.Pats [], None, mMemberPortion) match propKind, mGetSetOpt with - | SynMemberKind.PropertySet, Some m -> errorR(Error(FSComp.SR.parsMutableOnAutoPropertyShouldBeGetSetNotJustSet(), m)) + | MemberKind.PropertySet, Some m -> errorR(Error(FSComp.SR.parsMutableOnAutoPropertyShouldBeGetSetNotJustSet(), m)) | _ -> () [ match propKind with - | SynMemberKind.Member - | SynMemberKind.PropertyGet - | SynMemberKind.PropertyGetSet -> + | MemberKind.Member + | MemberKind.PropertyGet + | MemberKind.PropertyGetSet -> let getter = let rhsExpr = SynExpr.Ident fldId let retInfo = match tyOpt with None -> None | Some ty -> Some (SynReturnInfo((ty, SynInfo.unnamedRetVal), ty.Range)) let attribs = mkAttributeList attribs mMemberPortion - let binding = mkSynBinding (xmlDoc, headPat) (access, false, false, mMemberPortion, DebugPointAtBinding.NoneAtInvisible, retInfo, rhsExpr, rhsExpr.Range, [], attribs, Some (memberFlags SynMemberKind.Member)) + let binding = mkSynBinding (xmlDoc, headPat) (access, false, false, mMemberPortion, NoDebugPointAtInvisibleBinding, retInfo, rhsExpr, rhsExpr.Range, [], attribs, Some (memberFlags MemberKind.Member)) SynMemberDefn.Member (binding, mMemberPortion) yield getter | _ -> () match propKind with - | SynMemberKind.PropertySet - | SynMemberKind.PropertyGetSet -> + | MemberKind.PropertySet + | MemberKind.PropertyGetSet -> let setter = let vId = ident("v", mMemberPortion) let headPat = SynPat.LongIdent (LongIdentWithDots(headPatIds, []), None, Some noInferredTypars, SynArgPats.Pats [mkSynPatVar None vId], None, mMemberPortion) let rhsExpr = mkSynAssign (SynExpr.Ident fldId) (SynExpr.Ident vId) //let retInfo = match tyOpt with None -> None | Some ty -> Some (SynReturnInfo((ty, SynInfo.unnamedRetVal), ty.Range)) - let binding = mkSynBinding (xmlDoc, headPat) (access, false, false, mMemberPortion, DebugPointAtBinding.NoneAtInvisible, None, rhsExpr, rhsExpr.Range, [], [], Some (memberFlags SynMemberKind.PropertySet)) + let binding = mkSynBinding (xmlDoc, headPat) (access, false, false, mMemberPortion, NoDebugPointAtInvisibleBinding, None, rhsExpr, rhsExpr.Range, [], [], Some (memberFlags MemberKind.PropertySet)) SynMemberDefn.Member (binding, mMemberPortion) yield setter | _ -> ()] @@ -4756,7 +4741,7 @@ module TcDeclarations = let isConcrete = members |> List.exists (function - | SynMemberDefn.Member(SynBinding(_, _, _, _, _, _, SynValData(Some memberFlags, _, _), _, _, _, _, _), _) -> not memberFlags.IsDispatchSlot + | SynMemberDefn.Member(Binding(_, _, _, _, _, _, SynValData(Some memberFlags, _, _), _, _, _, _, _), _) -> not memberFlags.IsDispatchSlot | SynMemberDefn.Interface (_, defOpt, _) -> Option.isSome defOpt | SynMemberDefn.LetBindings _ -> true | SynMemberDefn.ImplicitCtor _ -> true @@ -4771,7 +4756,7 @@ module TcDeclarations = let hasSelfReferentialCtor = members |> List.exists (function | SynMemberDefn.ImplicitCtor (_, _, _, thisIdOpt, _, _) - | SynMemberDefn.Member(SynBinding(_, _, _, _, _, _, SynValData(_, _, thisIdOpt), _, _, _, _, _), _) -> thisIdOpt.IsSome + | SynMemberDefn.Member(Binding(_, _, _, _, _, _, SynValData(_, _, thisIdOpt), _, _, _, _, _), _) -> thisIdOpt.IsSome | _ -> false) let implicitCtorSynPats = @@ -4783,8 +4768,8 @@ module TcDeclarations = // members of the type let preEstablishedHasDefaultCtor = members |> List.exists (function - | SynMemberDefn.Member(SynBinding(_, _, _, _, _, _, SynValData(Some memberFlags, _, _), SynPatForConstructorDecl SynPatForNullaryArgs, _, _, _, _), _) -> - memberFlags.MemberKind=SynMemberKind.Constructor + | SynMemberDefn.Member(Binding(_, _, _, _, _, _, SynValData(Some memberFlags, _, _), SynPatForConstructorDecl SynPatForNullaryArgs, _, _, _, _), _) -> + memberFlags.MemberKind=MemberKind.Constructor | SynMemberDefn.ImplicitCtor (_, _, SynSimplePats.SimplePats(spats, _), _, _, _) -> isNil spats | _ -> false) let repr = SynTypeDefnSimpleRepr.General(kind, inherits, slotsigs, fields, isConcrete, isIncrClass, implicitCtorSynPats, m) @@ -4825,8 +4810,7 @@ module TcDeclarations = ||> MutRecShapes.mapTyconsWithEnv (fun envForDecls ((typeDefnCore, members, innerParent), tyconOpt, fixupFinalAttrs, (baseValOpt, safeInitInfo)) -> let (MutRecDefnsPhase1DataForTycon(synTyconInfo, _, _, _, _, isAtOriginalTyconDefn)) = typeDefnCore let tyDeclRange = synTyconInfo.Range - let (SynComponentInfo(_, TyparsAndConstraints (typars, cs1), cs2, longPath, _, _, _, _)) = synTyconInfo - let cs = cs1 @ cs2 + let (ComponentInfo(_, typars, cs, longPath, _, _, _, _)) = synTyconInfo let declKind, tcref, declaredTyconTypars = ComputeTyconDeclKind cenv envForDecls tyconOpt isAtOriginalTyconDefn false tyDeclRange typars cs longPath let newslotsOK = (if isAtOriginalTyconDefn && tcref.IsFSharpObjectModelTycon then NewSlotsOK else NoNewSlots) @@ -4836,7 +4820,7 @@ module TcDeclarations = if not (isNil members) && tcref.IsTypeAbbrev then errorR(Error(FSComp.SR.tcTypeAbbreviationsCannotHaveAugmentations(), tyDeclRange)) - let (SynComponentInfo (attributes, _, _, _, _, _, _, _)) = synTyconInfo + let (ComponentInfo (attributes, _, _, _, _, _, _, _)) = synTyconInfo if not (List.isEmpty attributes) && (declKind = ExtrinsicExtensionBinding || declKind = IntrinsicExtensionBinding) then let attributeRange = (List.head attributes).Range error(Error(FSComp.SR.tcAugmentationsCannotHaveAttributes(), attributeRange)) @@ -4886,7 +4870,7 @@ module TcDeclarations = //------------------------------------------------------------------------- /// Separates the signature declaration into core (shape) and body. - let rec private SplitTyconSignature (SynTypeDefnSig(synTyconInfo, trepr, extraMembers, _)) = + let rec private SplitTyconSignature (TypeDefnSig(synTyconInfo, trepr, extraMembers, _)) = let implements1 = extraMembers |> List.choose (function SynMemberSig.Interface (f, m) -> Some(f, m) | _ -> None) @@ -4905,7 +4889,7 @@ module TcDeclarations = | _ -> false) let isConcrete = members |> List.exists (function - | SynMemberSig.Member (_, memberFlags, _) -> memberFlags.MemberKind=SynMemberKind.Constructor + | SynMemberSig.Member (_, memberFlags, _) -> memberFlags.MemberKind=MemberKind.Constructor | _ -> false) // An ugly bit of code to pre-determine if a type has a nullary constructor, prior to establishing the @@ -4913,7 +4897,7 @@ module TcDeclarations = let preEstablishedHasDefaultCtor = members |> List.exists (function | SynMemberSig.Member (valSpfn, memberFlags, _) -> - memberFlags.MemberKind=SynMemberKind.Constructor && + memberFlags.MemberKind=MemberKind.Constructor && // REVIEW: This is a syntactic approximation (match valSpfn.SynType, valSpfn.SynInfo.CurriedArgInfos with | StripParenTypes (SynType.Fun (StripParenTypes (SynType.LongIdent (LongIdentWithDots([id], _))), _, _)), [[_]] when id.idText = "unit" -> true @@ -4952,8 +4936,7 @@ module TcDeclarations = (fun envForDecls ((tyconCore, (synTyconInfo, members), innerParent), tyconOpt, _fixupFinalAttrs, _) -> let tpenv = emptyUnscopedTyparEnv let (MutRecDefnsPhase1DataForTycon (_, _, _, _, _, isAtOriginalTyconDefn)) = tyconCore - let (SynComponentInfo(_, TyparsAndConstraints (typars, cs1), cs2, longPath, _, _, _, m)) = synTyconInfo - let cs = cs1 @ cs2 + let (ComponentInfo(_, typars, cs, longPath, _, _, _, m)) = synTyconInfo let declKind, tcref, declaredTyconTypars = ComputeTyconDeclKind cenv envForDecls tyconOpt isAtOriginalTyconDefn true m typars cs longPath let envForTycon = AddDeclaredTypars CheckForDuplicateTypars declaredTyconTypars envForDecls @@ -4965,7 +4948,7 @@ module TcDeclarations = (fun envForDecls (containerInfo, valSpec) -> let tpenv = emptyUnscopedTyparEnv let idvs, _ = TcAndPublishValSpec (cenv, envForDecls, containerInfo, ModuleOrMemberBinding, None, tpenv, valSpec) - let env = List.foldBack (AddLocalVal cenv.g cenv.tcSink scopem) idvs envForDecls + let env = List.foldBack (AddLocalVal cenv.tcSink scopem) idvs envForDecls env) @@ -5006,8 +4989,8 @@ module TcDeclarations = // Bind module types //------------------------------------------------------------------------- -let rec TcSignatureElementNonMutRec cenv parent typeNames endm (env: TcEnv) synSigDecl: Cancellable = - cancellable { +let rec TcSignatureElementNonMutRec cenv parent typeNames endm (env: TcEnv) synSigDecl: Eventually = + eventually { try match synSigDecl with | SynModuleSigDecl.Exception (edef, m) -> @@ -5029,15 +5012,15 @@ let rec TcSignatureElementNonMutRec cenv parent typeNames endm (env: TcEnv) synS | SynModuleSigDecl.Val (vspec, m) -> let parentModule = match parent with - | ParentNone -> error(Error(FSComp.SR.tcNamespaceCannotContainValues(), vspec.RangeOfId)) + | ParentNone -> error(NumberedError(FSComp.SR.tcNamespaceCannotContainValues(), vspec.RangeOfId)) | Parent p -> p let containerInfo = ModuleOrNamespaceContainerInfo parentModule let idvs, _ = TcAndPublishValSpec (cenv, env, containerInfo, ModuleOrMemberBinding, None, emptyUnscopedTyparEnv, vspec) let scopem = unionRanges m endm - let env = List.foldBack (AddLocalVal cenv.g cenv.tcSink scopem) idvs env + let env = List.foldBack (AddLocalVal cenv.tcSink scopem) idvs env return env - | SynModuleSigDecl.NestedModule(SynComponentInfo(Attributes attribs, _, _, longPath, xml, _, vis, im) as compInfo, isRec, mdefs, m) -> + | SynModuleSigDecl.NestedModule(ComponentInfo(Attributes attribs, _parms, _constraints, longPath, xml, _, vis, im) as compInfo, isRec, mdefs, m) -> if isRec then // Treat 'module rec M = ...' as a single mutually recursive definition group 'module M = ...' let modDecl = SynModuleSigDecl.NestedModule(compInfo, false, mdefs, m) @@ -5106,7 +5089,7 @@ let rec TcSignatureElementNonMutRec cenv parent typeNames endm (env: TcEnv) synS let enclosingNamespacePath, defs = if kind.IsModule then let nsp, modName = List.frontAndBack longId - let modDecl = [SynModuleSigDecl.NestedModule(SynComponentInfo(attribs, None, [], [modName], xml, false, vis, m), false, defs, m)] + let modDecl = [SynModuleSigDecl.NestedModule(ComponentInfo(attribs, [], [], [modName], xml, false, vis, m), false, defs, m)] nsp, modDecl else longId, defs @@ -5158,7 +5141,7 @@ let rec TcSignatureElementNonMutRec cenv parent typeNames endm (env: TcEnv) synS and TcSignatureElements cenv parent endm env xml mutRecNSInfo defs = - cancellable { + eventually { // Ensure the .Deref call in UpdateAccModuleOrNamespaceType succeeds if cenv.compilingCanonicalFslibModuleType then let doc = xml.ToXmlDoc(true, Some []) @@ -5173,10 +5156,10 @@ and TcSignatureElements cenv parent endm env xml mutRecNSInfo defs = } and TcSignatureElementsNonMutRec cenv parent typeNames endm env defs = - Cancellable.fold (TcSignatureElementNonMutRec cenv parent typeNames endm) env defs + Eventually.fold (TcSignatureElementNonMutRec cenv parent typeNames endm) env defs and TcSignatureElementsMutRec cenv parent typeNames m mutRecNSInfo envInitial (defs: SynModuleSigDecl list) = - cancellable { + eventually { let m = match defs with [] -> m | _ -> defs |> List.map (fun d -> d.Range) |> List.reduce unionRanges let scopem = (defs, m) ||> List.foldBack (fun h m -> unionRanges h.Range m) @@ -5194,13 +5177,13 @@ and TcSignatureElementsMutRec cenv parent typeNames m mutRecNSInfo envInitial (d decls, (openOk, moduleAbbrevOk) | SynModuleSigDecl.Exception (SynExceptionSig(exnRepr, members, _), _) -> - let ( SynExceptionDefnRepr(synAttrs, SynUnionCase(_, id, _args, _, _, _), _, doc, vis, m)) = exnRepr - let compInfo = SynComponentInfo(synAttrs, None, [], [id], doc, false, vis, id.idRange) - let decls = [ MutRecShape.Tycon(SynTypeDefnSig.SynTypeDefnSig(compInfo, SynTypeDefnSigRepr.Exception exnRepr, members, m)) ] + let ( SynExceptionDefnRepr(synAttrs, UnionCase(_, id, _args, _, _, _), _, doc, vis, m)) = exnRepr + let compInfo = ComponentInfo(synAttrs, [], [], [id], doc, false, vis, id.idRange) + let decls = [ MutRecShape.Tycon(SynTypeDefnSig.TypeDefnSig(compInfo, SynTypeDefnSigRepr.Exception exnRepr, members, m)) ] decls, (false, false) | SynModuleSigDecl.Val (vspec, _) -> - if isNamespace then error(Error(FSComp.SR.tcNamespaceCannotContainValues(), vspec.RangeOfId)) + if isNamespace then error(NumberedError(FSComp.SR.tcNamespaceCannotContainValues(), vspec.RangeOfId)) let decls = [ MutRecShape.Lets vspec ] decls, (false, false) @@ -5230,7 +5213,7 @@ and TcSignatureElementsMutRec cenv parent typeNames m mutRecNSInfo envInitial (d and TcModuleOrNamespaceSignatureElementsNonMutRec cenv parent env (id, modKind, defs, m: range, xml) = - cancellable { + eventually { let endm = m.EndRange // use end of range for errors // Create the module type that will hold the results of type checking.... @@ -5251,7 +5234,7 @@ and TcModuleOrNamespaceSignatureElementsNonMutRec cenv parent env (id, modKind, let ElimModuleDoBinding bind = match bind with | SynModuleDecl.DoExpr (spExpr, expr, m) -> - let bind2 = SynBinding (None, SynBindingKind.StandaloneExpression, false, false, [], PreXmlDoc.Empty, SynInfo.emptySynValData, SynPat.Wild m, None, expr, m, spExpr) + let bind2 = Binding (None, StandaloneExpression, false, false, [], PreXmlDoc.Empty, SynInfo.emptySynValData, SynPat.Wild m, None, expr, m, spExpr) SynModuleDecl.Let(false, [bind2], m) | _ -> bind @@ -5281,16 +5264,16 @@ let TcMutRecDefnsEscapeCheck (binds: MutRecShapes<_, _, _>) env = let CheckLetOrDoInNamespace binds m = match binds with - | [ SynBinding (None, (SynBindingKind.StandaloneExpression | SynBindingKind.Do), false, false, [], _, _, _, None, (SynExpr.Do (SynExpr.Const (SynConst.Unit, _), _) | SynExpr.Const (SynConst.Unit, _)), _, _) ] -> + | [ Binding (None, (StandaloneExpression | DoBinding), false, false, [], _, _, _, None, (SynExpr.Do (SynExpr.Const (SynConst.Unit, _), _) | SynExpr.Const (SynConst.Unit, _)), _, _) ] -> () | [] -> - error(Error(FSComp.SR.tcNamespaceCannotContainValues(), m)) + error(NumberedError(FSComp.SR.tcNamespaceCannotContainValues(), m)) | _ -> - error(Error(FSComp.SR.tcNamespaceCannotContainValues(), binds.Head.RangeOfHeadPattern)) + error(NumberedError(FSComp.SR.tcNamespaceCannotContainValues(), binds.Head.RangeOfHeadPat)) /// The non-mutually recursive case for a declaration let rec TcModuleOrNamespaceElementNonMutRec (cenv: cenv) parent typeNames scopem env synDecl = - cancellable { + eventually { cenv.synArgNameGenerator.Reset() let tpenv = emptyUnscopedTyparEnv @@ -5357,7 +5340,7 @@ let rec TcModuleOrNamespaceElementNonMutRec (cenv: cenv) parent typeNames scopem let modDecl = SynModuleDecl.NestedModule(compInfo, false, mdefs, isContinuingModule, m) return! TcModuleOrNamespaceElementsMutRec cenv parent typeNames m env None [modDecl] else - let (SynComponentInfo(Attributes attribs, _, _, longPath, xml, _, vis, im)) = compInfo + let (ComponentInfo(Attributes attribs, _parms, _constraints, longPath, xml, _, vis, im)) = compInfo let id = ComputeModuleName longPath let modAttrs = TcAttributes cenv env AttributeTargets.ModuleDecl attribs @@ -5418,7 +5401,7 @@ let rec TcModuleOrNamespaceElementNonMutRec (cenv: cenv) parent typeNames scopem let enclosingNamespacePath, defs = if kind.IsModule then let nsp, modName = List.frontAndBack longId - let modDecl = [SynModuleDecl.NestedModule(SynComponentInfo(attribs, None, [], [modName], xml, false, vis, m), false, defs, true, m)] + let modDecl = [SynModuleDecl.NestedModule(ComponentInfo(attribs, [], [], [modName], xml, false, vis, m), false, defs, true, m)] nsp, modDecl else longId, defs @@ -5471,7 +5454,7 @@ let rec TcModuleOrNamespaceElementNonMutRec (cenv: cenv) parent typeNames scopem /// The non-mutually recursive case for a sequence of declarations and TcModuleOrNamespaceElementsNonMutRec cenv parent typeNames endm (defsSoFar, env, envAtEnd) (moreDefs: SynModuleDecl list) = - cancellable { + eventually { match moreDefs with | (firstDef :: otherDefs) -> // Lookahead one to find out the scope of the next declaration. @@ -5491,7 +5474,7 @@ and TcModuleOrNamespaceElementsNonMutRec cenv parent typeNames endm (defsSoFar, /// The mutually recursive case for a sequence of declarations (and nested modules) and TcModuleOrNamespaceElementsMutRec (cenv: cenv) parent typeNames m envInitial mutRecNSInfo (defs: SynModuleDecl list) = - cancellable { + eventually { let m = match defs with [] -> m | _ -> defs |> List.map (fun d -> d.Range) |> List.reduce unionRanges let scopem = (defs, m) ||> List.foldBack (fun h m -> unionRanges h.Range m) @@ -5526,9 +5509,9 @@ and TcModuleOrNamespaceElementsMutRec (cenv: cenv) parent typeNames m envInitial decls, (openOk, moduleAbbrevOk, attrs) | SynModuleDecl.Exception (SynExceptionDefn(repr, members, _), _m) -> - let (SynExceptionDefnRepr(synAttrs, SynUnionCase(_, id, _args, _, _, _), _repr, doc, vis, m)) = repr - let compInfo = SynComponentInfo(synAttrs, None, [], [id], doc, false, vis, id.idRange) - let decls = [ MutRecShape.Tycon(SynTypeDefn(compInfo, SynTypeDefnRepr.Exception repr, members, None, m)) ] + let (SynExceptionDefnRepr(synAttrs, UnionCase(_, id, _args, _, _, _), _repr, doc, vis, m)) = repr + let compInfo = ComponentInfo(synAttrs, [], [], [id], doc, false, vis, id.idRange) + let decls = [ MutRecShape.Tycon(SynTypeDefn.TypeDefn(compInfo, SynTypeDefnRepr.Exception repr, members, m)) ] decls, (false, false, attrs) | SynModuleDecl.HashDirective _ -> @@ -5581,7 +5564,7 @@ and TcMutRecDefsFinish cenv defs m = TMDefRec(true, tycons, binds, m) and TcModuleOrNamespaceElements cenv parent endm env xml mutRecNSInfo defs = - cancellable { + eventually { // Ensure the deref_nlpath call in UpdateAccModuleOrNamespaceType succeeds if cenv.compilingCanonicalFslibModuleType then let doc = xml.ToXmlDoc(true, Some []) @@ -5714,14 +5697,14 @@ let ApplyDefaults (cenv: cenv) g denvAtEnd m mexpr extraAttribs = // the defaults will be propagated to the new type variable. ConstraintSolver.ApplyTyparDefaultAtPriority denvAtEnd cenv.css priority tp) - // OK, now apply defaults for any unsolved TyparStaticReq.HeadType + // OK, now apply defaults for any unsolved HeadTypeStaticReq unsolved |> List.iter (fun tp -> if not tp.IsSolved then - if (tp.StaticReq <> TyparStaticReq.None) then + if (tp.StaticReq <> NoStaticReq) then ConstraintSolver.ChooseTyparSolutionAndSolve cenv.css denvAtEnd tp) with e -> errorRecovery e m -let CheckValueRestriction denvAtEnd infoReader rootSigOpt implFileTypePriorToSig m = +let CheckValueRestriction denvAtEnd rootSigOpt implFileTypePriorToSig m = if Option.isNone rootSigOpt then let rec check (mty: ModuleOrNamespaceType) = for v in mty.AllValsAndMembers do @@ -5735,7 +5718,7 @@ let CheckValueRestriction denvAtEnd infoReader rootSigOpt implFileTypePriorToSig // for example FSharp 1.0 3661. (match v.ValReprInfo with None -> true | Some tvi -> tvi.HasNoArgs)) then match ftyvs with - | tp :: _ -> errorR (ValueRestriction(denvAtEnd, infoReader, false, v, tp, v.Range)) + | tp :: _ -> errorR (ValueRestriction(denvAtEnd, false, v, tp, v.Range)) | _ -> () mty.ModuleAndNamespaceDefinitions |> List.iter (fun v -> check v.ModuleOrNamespaceType) try check implFileTypePriorToSig with e -> errorRecovery e m @@ -5766,7 +5749,7 @@ let CheckModuleSignature g (cenv: cenv) m denvAtEnd rootSigOpt implFileTypePrior // As typechecked the signature and implementation use different tycons etc. // Here we (a) check there are enough names, (b) match them up to build a renaming and // (c) check signature conformance up to this renaming. - if not (SignatureConformance.CheckNamesOfModuleOrNamespace denv cenv.infoReader (mkLocalTyconRef implFileSpecPriorToSig) sigFileType) then + if not (SignatureConformance.CheckNamesOfModuleOrNamespace denv (mkLocalTyconRef implFileSpecPriorToSig) sigFileType) then raise (ReportedError None) // Compute the remapping from implementation to signature @@ -5774,7 +5757,7 @@ let CheckModuleSignature g (cenv: cenv) m denvAtEnd rootSigOpt implFileTypePrior let aenv = { TypeEquivEnv.Empty with EquivTycons = TyconRefMap.OfList remapInfo.RepackagedEntities } - if not (SignatureConformance.Checker(cenv.g, cenv.amap, denv, remapInfo, true).CheckSignature aenv cenv.infoReader (mkLocalModRef implFileSpecPriorToSig) sigFileType) then ( + if not (SignatureConformance.Checker(cenv.g, cenv.amap, denv, remapInfo, true).CheckSignature aenv (mkLocalModRef implFileSpecPriorToSig) sigFileType) then ( // We can just raise 'ReportedError' since CheckModuleOrNamespace raises its own error raise (ReportedError None) ) @@ -5799,9 +5782,7 @@ let TypeCheckOneImplFile (rootSigOpt: ModuleOrNamespaceType option) (ParsedImplFileInput (_, isScript, qualNameOfFile, scopedPragmas, _, implFileFrags, isLastCompiland)) = - let infoReader = InfoReader(g, amap) - - cancellable { + eventually { let cenv = cenv.Create (g, isScript, niceNameGen, amap, topCcu, false, Option.isSome rootSigOpt, conditionalDefines, tcSink, (LightweightTcValForUsingInBuildMethodCall g), isInternalTestSpanStackReferring, @@ -5812,7 +5793,7 @@ let TypeCheckOneImplFile let envinner, mtypeAcc = MakeInitialEnv env let defs = [ for x in implFileFrags -> SynModuleDecl.NamespaceFragment x ] - let! mexpr, topAttrs, envAtEnd = TcModuleOrNamespaceElements cenv ParentNone qualNameOfFile.Range envinner PreXmlDoc.Empty None defs + let! mexpr, topAttrs, envAtEnd = TcModuleOrNamespaceElements cenv ParentNone qualNameOfFile.Range envinner PreXmlDocEmpty None defs let implFileTypePriorToSig = !mtypeAcc @@ -5844,7 +5825,7 @@ let TypeCheckOneImplFile // Check the value restriction. Only checked if there is no signature. conditionallySuppressErrorReporting (checkForErrors()) (fun () -> - CheckValueRestriction denvAtEnd infoReader rootSigOpt implFileTypePriorToSig m) + CheckValueRestriction denvAtEnd rootSigOpt implFileTypePriorToSig m) // Solve unsolved internal type variables conditionallySuppressErrorReporting (checkForErrors()) (fun () -> @@ -5907,7 +5888,7 @@ let TypeCheckOneImplFile /// Check an entire signature file let TypeCheckOneSigFile (g, niceNameGen, amap, topCcu, checkForErrors, conditionalDefines, tcSink, isInternalTestSpanStackReferring) tcEnv (ParsedSigFileInput (_, qualNameOfFile, _, _, sigFileFrags)) = - cancellable { + eventually { let cenv = cenv.Create (g, false, niceNameGen, amap, topCcu, true, false, conditionalDefines, tcSink, @@ -5919,7 +5900,7 @@ let TypeCheckOneSigFile (g, niceNameGen, amap, topCcu, checkForErrors, condition let envinner, mtypeAcc = MakeInitialEnv tcEnv let specs = [ for x in sigFileFrags -> SynModuleSigDecl.NamespaceFragment x ] - let! tcEnv = TcSignatureElements cenv ParentNone qualNameOfFile.Range envinner PreXmlDoc.Empty None specs + let! tcEnv = TcSignatureElements cenv ParentNone qualNameOfFile.Range envinner PreXmlDocEmpty None specs let sigFileType = !mtypeAcc diff --git a/src/fsharp/CheckDeclarations.fsi b/src/fsharp/CheckDeclarations.fsi index ccfc873fd7f..bce9bed6422 100644 --- a/src/fsharp/CheckDeclarations.fsi +++ b/src/fsharp/CheckDeclarations.fsi @@ -3,20 +3,18 @@ module internal FSharp.Compiler.CheckDeclarations open FSharp.Compiler -open Internal.Utilities.Library +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CheckExpressions open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.NameResolution +open FSharp.Compiler.Range open FSharp.Compiler.Import -open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text open FSharp.Compiler.TypedTree val AddLocalRootModuleOrNamespace : NameResolution.TcResultsSink -> TcGlobals -> ImportMap -> range -> TcEnv -> ModuleOrNamespaceType -> TcEnv - val CreateInitialTcEnv : TcGlobals * ImportMap * range * assemblyName: string * (CcuThunk * string list * string list) list -> TcEnv - val AddCcuToTcEnv: TcGlobals * ImportMap * range * TcEnv * assemblyName: string * ccu: CcuThunk * autoOpens: string list * internalsVisibleToAttributes: string list -> TcEnv type TopAttribs = @@ -27,7 +25,6 @@ type TopAttribs = type ConditionalDefines = string list val EmptyTopAttrs : TopAttribs - val CombineTopAttrs : TopAttribs -> TopAttribs -> TopAttribs val TcOpenModuleOrNamespaceDecl: TcResultsSink -> TcGlobals -> ImportMap -> range -> TcEnv -> (LongIdent * range) -> TcEnv @@ -39,14 +36,13 @@ val TypeCheckOneImplFile : -> TcEnv -> ModuleOrNamespaceType option -> ParsedImplFileInput - -> Cancellable + -> Eventually val TypeCheckOneSigFile : TcGlobals * NiceNameGenerator * ImportMap * CcuThunk * (unit -> bool) * ConditionalDefines option * NameResolution.TcResultsSink * bool -> TcEnv -> ParsedSigFileInput - -> Cancellable + -> Eventually exception ParameterlessStructCtor of range - exception NotUpperCaseConstructor of range diff --git a/src/fsharp/CheckExpressions.fs b/src/fsharp/CheckExpressions.fs index 390f4409574..5de2ff1d4b9 100644 --- a/src/fsharp/CheckExpressions.fs +++ b/src/fsharp/CheckExpressions.fs @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -/// The typechecker. Left-to-right constrained type checking +/// The typechecker. Left-to-right constrained type checking /// with generalization at appropriate points. module internal FSharp.Compiler.CheckExpressions @@ -8,14 +8,12 @@ open System open System.Collections.Generic open Internal.Utilities -open Internal.Utilities.Collections -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras -open Internal.Utilities.Library.ResultOrException -open Internal.Utilities.Rational -open FSharp.Compiler -open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL + +open FSharp.Compiler +open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Internal.Library.ResultOrException open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.AttributeChecking open FSharp.Compiler.CompilerGlobalState @@ -24,22 +22,22 @@ open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features open FSharp.Compiler.Infos open FSharp.Compiler.InfoReader +open FSharp.Compiler.Lib open FSharp.Compiler.MethodCalls open FSharp.Compiler.MethodOverrides open FSharp.Compiler.NameResolution open FSharp.Compiler.PatternMatchCompilation -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Range +open FSharp.Compiler.Rational +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Position -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TypeRelations +open FSharp.Compiler.XmlDoc #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping @@ -47,15 +45,14 @@ open FSharp.Compiler.ExtensionTyping //------------------------------------------------------------------------- // Helpers that should be elsewhere -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- let mkNilListPat (g: TcGlobals) m ty = TPat_unioncase(g.nil_ucref, [ty], [], m) - let mkConsListPat (g: TcGlobals) ty ph pt = TPat_unioncase(g.cons_ucref, [ty], [ph;pt], unionRanges ph.Range pt.Range) //------------------------------------------------------------------------- // Errors. -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- exception BakedInMemberConstraintName of string * range exception FunctionExpected of DisplayEnv * TType * range @@ -79,7 +76,7 @@ exception UnitTypeExpectedWithPossibleAssignment of DisplayEnv * TType * bool * exception UnitTypeExpectedWithPossiblePropertySetter of DisplayEnv * TType * string * string * range exception UnionPatternsBindDifferentNames of range exception VarBoundTwice of Ident -exception ValueRestriction of DisplayEnv * InfoReader * bool * Val * Typar * range +exception ValueRestriction of DisplayEnv * bool * Val * Typar * range exception ValNotMutable of DisplayEnv * ValRef * range exception ValNotLocal of DisplayEnv * ValRef * range exception InvalidRuntimeCoercion of DisplayEnv * TType * TType * range @@ -105,39 +102,39 @@ exception InvalidInternalsVisibleToAssemblyName of (*badName*)string * (*fileNam /// Represents information about the initialization field used to check that object constructors /// have completed before fields are accessed. -type SafeInitData = +type SafeInitData = | SafeInitField of RecdFieldRef * RecdField - | NoSafeInitInfo - + | NoSafeInitInfo + /// Represents information about object constructors -type CtorInfo = +type CtorInfo = { /// Object model constructors have a very specific form to satisfy .NET limitations. - /// For "new = \arg. { new C with ... }" - /// ctor = 3 indicates about to type check "\arg. (body)", - /// ctor = 2 indicates about to type check "body" - /// ctor = 1 indicates actually type checking the body expression - /// 0 indicates everywhere else, including auxiliary expressions such e1 in "let x = e1 in { new ... }" - /// REVIEW: clean up this rather odd approach ... + /// For "new = \arg. { new C with ... }" + /// ctor = 3 indicates about to type check "\arg. (body)", + /// ctor = 2 indicates about to type check "body" + /// ctor = 1 indicates actually type checking the body expression + /// 0 indicates everywhere else, including auxiliary expressions such e1 in "let x = e1 in { new ... }" + /// REVIEW: clean up this rather odd approach ... ctorShapeCounter: int /// A handle to the ref cell to hold results of 'this' for 'type X() as x = ...' and 'new() as x = ...' constructs /// in case 'x' is used in the arguments to the 'inherits' call. - safeThisValOpt: Val option + safeThisValOpt: Val option - /// A handle to the boolean ref cell to hold success of initialized 'this' for 'type X() as x = ...' constructs - safeInitInfo: SafeInitData + /// A handle to the boolean ref cell to hold success of initialized 'this' for 'type X() as x = ...' constructs + safeInitInfo: SafeInitData /// Is the an implicit constructor or an explicit one? - ctorIsImplicit: bool + ctorIsImplicit: bool } - + /// Represents an item in the environment that may restrict the automatic generalization of later /// declarations because it refers to type inference variables. As type inference progresses /// these type inference variables may get solved. [] -type UngeneralizableItem(computeFreeTyvars: (unit -> FreeTyvars)) = +type UngeneralizableItem(computeFreeTyvars: (unit -> FreeTyvars)) = - // Flag is for: have we determined that this item definitely has + // Flag is for: have we determined that this item definitely has // no free type inference variables? This implies that // (a) it will _never_ have any free type inference variables as further constraints are added to the system. // (b) its set of FreeTycons will not change as further constraints are added to the system @@ -149,73 +146,73 @@ type UngeneralizableItem(computeFreeTyvars: (unit -> FreeTyvars)) = // If WillNeverHaveFreeTypars then we can cache the computation of FreeTraitSolutions, since they are invariant. let mutable cachedFreeTraitSolutions = emptyFreeLocals - member item.GetFreeTyvars() = + member item.GetFreeTyvars() = let fvs = computeFreeTyvars() - if fvs.FreeTypars.IsEmpty then - willNeverHaveFreeTypars <- true + if fvs.FreeTypars.IsEmpty then + willNeverHaveFreeTypars <- true cachedFreeLocalTycons <- fvs.FreeTycons cachedFreeTraitSolutions <- fvs.FreeTraitSolutions fvs member item.WillNeverHaveFreeTypars = willNeverHaveFreeTypars - member item.CachedFreeLocalTycons = cachedFreeLocalTycons + member item.CachedFreeLocalTycons = cachedFreeLocalTycons member item.CachedFreeTraitSolutions = cachedFreeTraitSolutions - + /// Represents the type environment at a particular scope. Includes the name /// resolution environment, the ungeneralizable items from earlier in the scope /// and other information about the scope. [] type TcEnv = - { /// Name resolution information - eNameResEnv: NameResolutionEnv + { /// Name resolution information + eNameResEnv: NameResolutionEnv - /// The list of items in the environment that may contain free inference - /// variables (which may not be generalized). The relevant types may - /// change as a result of inference equations being asserted, hence may need to - /// be recomputed. + /// The list of items in the environment that may contain free inference + /// variables (which may not be generalized). The relevant types may + /// change as a result of inference equations being asserted, hence may need to + /// be recomputed. eUngeneralizableItems: UngeneralizableItem list - - // Two (!) versions of the current module path - // These are used to: - // - Look up the appropriate point in the corresponding signature - // see if an item is public or not - // - Change fslib canonical module type to allow compiler references to these items - // - Record the cpath for concrete modul_specs, tycon_specs and excon_specs so they can cache their generated IL representation where necessary - // - Record the pubpath of public, concrete {val, tycon, modul, excon}_specs. - // This information is used mainly when building non-local references - // to public items. - // - // Of the two, 'ePath' is the one that's barely used. It's only + + // Two (!) versions of the current module path + // These are used to: + // - Look up the appropriate point in the corresponding signature + // see if an item is public or not + // - Change fslib canonical module type to allow compiler references to these items + // - Record the cpath for concrete modul_specs, tycon_specs and excon_specs so they can cache their generated IL representation where necessary + // - Record the pubpath of public, concrete {val, tycon, modul, excon}_specs. + // This information is used mainly when building non-local references + // to public items. + // + // Of the two, 'ePath' is the one that's barely used. It's only // used by UpdateAccModuleOrNamespaceType to modify the CCU while compiling FSharp.Core - ePath: Ident list + ePath: Ident list - eCompPath: CompilationPath + eCompPath: CompilationPath - eAccessPath: CompilationPath + eAccessPath: CompilationPath /// This field is computed from other fields, but we amortize the cost of computing it. - eAccessRights: AccessorDomain + eAccessRights: AccessorDomain /// Internals under these should be accessible - eInternalsVisibleCompPaths: CompilationPath list + eInternalsVisibleCompPaths: CompilationPath list - /// Mutable accumulator for the current module type + /// Mutable accumulator for the current module type eModuleOrNamespaceTypeAccumulator: ModuleOrNamespaceType ref /// Context information for type checker - eContextInfo: ContextInfo + eContextInfo: ContextInfo - /// Here Some tcref indicates we can access protected members in all super types - eFamilyType: TyconRef option + /// Here Some tcref indicates we can access protected members in all super types + eFamilyType: TyconRef option - // Information to enforce special restrictions on valid expressions - // for .NET constructors. + // Information to enforce special restrictions on valid expressions + // for .NET constructors. eCtorInfo: CtorInfo option eCallerMemberName: string option - } + } member tenv.DisplayEnv = tenv.eNameResEnv.DisplayEnv @@ -226,38 +223,38 @@ type TcEnv = override tenv.ToString() = "TcEnv(...)" /// Compute the available access rights from a particular location in code -let ComputeAccessRights eAccessPath eInternalsVisibleCompPaths eFamilyType = +let ComputeAccessRights eAccessPath eInternalsVisibleCompPaths eFamilyType = AccessibleFrom (eAccessPath :: eInternalsVisibleCompPaths, eFamilyType) //------------------------------------------------------------------------- // Helpers related to determining if we're in a constructor and/or a class // that may be able to access "protected" members. -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- let InitialExplicitCtorInfo (safeThisValOpt, safeInitInfo) = - { ctorShapeCounter = 3 + { ctorShapeCounter = 3 safeThisValOpt = safeThisValOpt safeInitInfo = safeInitInfo - ctorIsImplicit = false} + ctorIsImplicit = false} let InitialImplicitCtorInfo () = - { ctorShapeCounter = 0 - safeThisValOpt = None + { ctorShapeCounter = 0 + safeThisValOpt = None safeInitInfo = NoSafeInitInfo ctorIsImplicit = true } - -let EnterFamilyRegion tcref env = + +let EnterFamilyRegion tcref env = let eFamilyType = Some tcref - { env with + { env with eAccessRights = ComputeAccessRights env.eAccessPath env.eInternalsVisibleCompPaths eFamilyType // update this computed field eFamilyType = eFamilyType } -let ExitFamilyRegion env = +let ExitFamilyRegion env = let eFamilyType = None - match env.eFamilyType with - | None -> env // optimization to avoid reallocation - | _ -> - { env with + match env.eFamilyType with + | None -> env // optimization to avoid reallocation + | _ -> + { env with eAccessRights = ComputeAccessRights env.eAccessPath env.eInternalsVisibleCompPaths eFamilyType // update this computed field eFamilyType = eFamilyType } @@ -270,60 +267,60 @@ let AdjustCtorShapeCounter f env = {env with eCtorInfo = Option.map (fun ctorInf let ExitCtorShapeRegion env = AdjustCtorShapeCounter (fun _ -> 0) env /// Add a type to the TcEnv, i.e. register it as ungeneralizable. -let addFreeItemOfTy ty eUngeneralizableItems = +let addFreeItemOfTy ty eUngeneralizableItems = let fvs = freeInType CollectAllNoCaching ty - if isEmptyFreeTyvars fvs then eUngeneralizableItems + if isEmptyFreeTyvars fvs then eUngeneralizableItems else UngeneralizableItem(fun () -> freeInType CollectAllNoCaching ty) :: eUngeneralizableItems /// Add the contents of a module type to the TcEnv, i.e. register the contents as ungeneralizable. /// Add a module type to the TcEnv, i.e. register it as ungeneralizable. -let addFreeItemOfModuleTy mtyp eUngeneralizableItems = +let addFreeItemOfModuleTy mtyp eUngeneralizableItems = let fvs = freeInModuleTy mtyp - if isEmptyFreeTyvars fvs then eUngeneralizableItems + if isEmptyFreeTyvars fvs then eUngeneralizableItems else UngeneralizableItem(fun () -> freeInModuleTy mtyp) :: eUngeneralizableItems /// Add a table of values to the name resolution environment. -let AddValMapToNameEnv g vs nenv = - NameMap.foldBackRange (fun v nenv -> AddValRefToNameEnv g nenv (mkLocalValRef v)) vs nenv +let AddValMapToNameEnv vs nenv = + NameMap.foldBackRange (fun v nenv -> AddValRefToNameEnv nenv (mkLocalValRef v)) vs nenv /// Add a list of values to the name resolution environment. -let AddValListToNameEnv g vs nenv = - List.foldBack (fun v nenv -> AddValRefToNameEnv g nenv (mkLocalValRef v)) vs nenv - -/// Add a local value to TcEnv -let AddLocalValPrimitive g (v: Val) env = +let AddValListToNameEnv vs nenv = + List.foldBack (fun v nenv -> AddValRefToNameEnv nenv (mkLocalValRef v)) vs nenv + +/// Add a local value to TcEnv +let AddLocalValPrimitive (v: Val) env = { env with - eNameResEnv = AddValRefToNameEnv g env.eNameResEnv (mkLocalValRef v) - eUngeneralizableItems = addFreeItemOfTy v.Type env.eUngeneralizableItems } + eNameResEnv = AddValRefToNameEnv env.eNameResEnv (mkLocalValRef v) + eUngeneralizableItems = addFreeItemOfTy v.Type env.eUngeneralizableItems } -/// Add a table of local values to TcEnv -let AddLocalValMap g tcSink scopem (vals: Val NameMap) env = - let env = - if vals.IsEmpty then +/// Add a table of local values to TcEnv +let AddLocalValMap tcSink scopem (vals: Val NameMap) env = + let env = + if vals.IsEmpty then env else { env with - eNameResEnv = AddValMapToNameEnv g vals env.eNameResEnv + eNameResEnv = AddValMapToNameEnv vals env.eNameResEnv eUngeneralizableItems = NameMap.foldBackRange (typeOfVal >> addFreeItemOfTy) vals env.eUngeneralizableItems } CallEnvSink tcSink (scopem, env.NameEnv, env.AccessRights) env /// Add a list of local values to TcEnv and report them to the sink -let AddLocalVals g tcSink scopem (vals: Val list) env = - let env = - if isNil vals then +let AddLocalVals tcSink scopem (vals: Val list) env = + let env = + if isNil vals then env else { env with - eNameResEnv = AddValListToNameEnv g vals env.eNameResEnv + eNameResEnv = AddValListToNameEnv vals env.eNameResEnv eUngeneralizableItems = List.foldBack (typeOfVal >> addFreeItemOfTy) vals env.eUngeneralizableItems } CallEnvSink tcSink (scopem, env.NameEnv, env.AccessRights) env /// Add a local value to TcEnv and report it to the sink -let AddLocalVal g tcSink scopem v env = +let AddLocalVal tcSink scopem v env = let env = { env with - eNameResEnv = AddValRefToNameEnv g env.eNameResEnv (mkLocalValRef v) + eNameResEnv = AddValRefToNameEnv env.eNameResEnv (mkLocalValRef v) eUngeneralizableItems = addFreeItemOfTy v.Type env.eUngeneralizableItems } CallEnvSink tcSink (scopem, env.NameEnv, env.eAccessRights) env @@ -344,44 +341,44 @@ let AddUnscopedTypar n p (UnscopedTyparEnv tab) = UnscopedTyparEnv (Map.add n p let TryFindUnscopedTypar n (UnscopedTyparEnv tab) = Map.tryFind n tab -let HideUnscopedTypars typars (UnscopedTyparEnv tab) = +let HideUnscopedTypars typars (UnscopedTyparEnv tab) = UnscopedTyparEnv (List.fold (fun acc (tp: Typar) -> Map.remove tp.Name acc) tab typars) -/// Represents the compilation environment for typechecking a single file in an assembly. +/// Represents the compilation environment for typechecking a single file in an assembly. [] -type TcFileState = +type TcFileState = { g: TcGlobals - /// Push an entry every time a recursive value binding is used, - /// in order to be able to fix up recursive type applications as - /// we infer type parameters + /// Push an entry every time a recursive value binding is used, + /// in order to be able to fix up recursive type applications as + /// we infer type parameters mutable recUses: ValMultiMap<(Expr ref * range * bool)> - - /// Checks to run after all inference is complete. + + /// Checks to run after all inference is complete. mutable postInferenceChecks: ResizeArray unit> /// Set to true if this file causes the creation of generated provided types. mutable createsGeneratedProvidedTypes: bool /// Are we in a script? if so relax the reporting of discarded-expression warnings at the top level - isScript: bool + isScript: bool - /// Environment needed to convert IL types to F# types in the importer. - amap: Import.ImportMap + /// Environment needed to convert IL types to F# types in the importer. + amap: Import.ImportMap /// Used to generate new syntactic argument names in post-parse syntactic processing synArgNameGenerator: SynArgNameGenerator tcSink: TcResultsSink - /// Holds a reference to the component being compiled. - /// This field is very rarely used (mainly when fixing up forward references to fslib. - topCcu: CcuThunk - - /// Holds the current inference constraints + /// Holds a reference to the component being compiled. + /// This field is very rarely used (mainly when fixing up forward references to fslib. + topCcu: CcuThunk + + /// Holds the current inference constraints css: ConstraintSolverState - - /// Are we compiling the signature of a module from fslib? + + /// Are we compiling the signature of a module from fslib? compilingCanonicalFslibModuleType: bool /// Is this a .fsi file? @@ -389,7 +386,7 @@ type TcFileState = /// Does this .fs file have a .fsi file? haveSig: bool - + /// Used to generate names niceNameGen: NiceNameGenerator @@ -398,21 +395,21 @@ type TcFileState = /// Used to resolve names nameResolver: NameResolver - + /// The set of active conditional defines. The value is None when conditional erasure is disabled in tooling. conditionalDefines: string list option - + isInternalTestSpanStackReferring: bool - // forward call + // forward call TcSequenceExpressionEntry: TcFileState -> TcEnv -> TType -> UnscopedTyparEnv -> bool * bool ref * SynExpr -> range -> Expr * UnscopedTyparEnv - // forward call + // forward call TcArrayOrListSequenceExpression: TcFileState -> TcEnv -> TType -> UnscopedTyparEnv -> bool * SynExpr -> range -> Expr * UnscopedTyparEnv - // forward call + // forward call TcComputationExpression: TcFileState -> TcEnv -> TType -> UnscopedTyparEnv -> range * Expr * TType * SynExpr -> Expr * UnscopedTyparEnv - } + } /// Create a new compilation environment - static member Create + static member Create (g, isScript, niceNameGen, amap, topCcu, isSig, haveSig, conditionalDefines, tcSink, tcVal, isInternalTestSpanStackReferring, tcSequenceExpressionEntry, tcArrayOrListSequenceExpression, tcComputationExpression) = let infoReader = new InfoReader(g, amap) @@ -441,22 +438,22 @@ type TcFileState = TcComputationExpression = tcComputationExpression } - override _.ToString() = "" + override __.ToString() = "" type cenv = TcFileState -let CopyAndFixupTypars m rigid tpsorig = +let CopyAndFixupTypars m rigid tpsorig = ConstraintSolver.FreshenAndFixupTypars m rigid [] [] tpsorig -let UnifyTypes cenv (env: TcEnv) m actualTy expectedTy = +let UnifyTypes cenv (env: TcEnv) m actualTy expectedTy = ConstraintSolver.AddCxTypeEqualsType env.eContextInfo env.DisplayEnv cenv.css m (tryNormalizeMeasureInType cenv.g actualTy) (tryNormalizeMeasureInType cenv.g expectedTy) /// Make an environment suitable for a module or namespace. Does not create a new accumulator but uses one we already have/ -let MakeInnerEnvWithAcc addOpenToNameEnv env nm mtypeAcc modKind = +let MakeInnerEnvWithAcc addOpenToNameEnv env nm mtypeAcc modKind = let path = env.ePath @ [nm] let cpath = env.eCompPath.NestedCompPath nm.idText modKind - { env with - ePath = path + { env with + ePath = path eCompPath = cpath eAccessPath = cpath eAccessRights = ComputeAccessRights cpath env.eInternalsVisibleCompPaths env.eFamilyType // update this computed field @@ -468,33 +465,33 @@ let MakeInnerEnvWithAcc addOpenToNameEnv env nm mtypeAcc modKind = eModuleOrNamespaceTypeAccumulator = mtypeAcc } /// Make an environment suitable for a module or namespace, creating a new accumulator. -let MakeInnerEnv addOpenToNameEnv env nm modKind = - // Note: here we allocate a new module type accumulator +let MakeInnerEnv addOpenToNameEnv env nm modKind = + // Note: here we allocate a new module type accumulator let mtypeAcc = ref (Construct.NewEmptyModuleOrNamespaceType modKind) MakeInnerEnvWithAcc addOpenToNameEnv env nm mtypeAcc modKind, mtypeAcc /// Make an environment suitable for processing inside a type definition -let MakeInnerEnvForTyconRef env tcref isExtrinsicExtension = - if isExtrinsicExtension then - // Extension members don't get access to protected stuff - env +let MakeInnerEnvForTyconRef env tcref isExtrinsicExtension = + if isExtrinsicExtension then + // Extension members don't get access to protected stuff + env else - // Regular members get access to protected stuff + // Regular members get access to protected stuff let env = EnterFamilyRegion tcref env - // Note: assumes no nesting + // Note: assumes no nesting let eAccessPath = env.eCompPath.NestedCompPath tcref.LogicalName ModuleOrType - { env with + { env with eAccessRights = ComputeAccessRights eAccessPath env.eInternalsVisibleCompPaths env.eFamilyType // update this computed field eAccessPath = eAccessPath } /// Make an environment suitable for processing inside a member definition -let MakeInnerEnvForMember env (v: Val) = - match v.MemberInfo with +let MakeInnerEnvForMember env (v: Val) = + match v.MemberInfo with | None -> env - | Some _ -> MakeInnerEnvForTyconRef env v.MemberApparentEntity v.IsExtensionMember + | Some _ -> MakeInnerEnvForTyconRef env v.MemberApparentEntity v.IsExtensionMember /// Get the current accumulator for the namespace/module we're in -let GetCurrAccumulatedModuleOrNamespaceType env = !(env.eModuleOrNamespaceTypeAccumulator) +let GetCurrAccumulatedModuleOrNamespaceType env = !(env.eModuleOrNamespaceTypeAccumulator) /// Set the current accumulator for the namespace/module we're in, updating the inferred contents let SetCurrAccumulatedModuleOrNamespaceType env x = env.eModuleOrNamespaceTypeAccumulator := x @@ -502,11 +499,11 @@ let SetCurrAccumulatedModuleOrNamespaceType env x = env.eModuleOrNamespaceTypeAc /// Set up the initial environment accounting for the enclosing "namespace X.Y.Z" definition let LocateEnv ccu env enclosingNamespacePath = let cpath = compPathOfCcu ccu - let env = - {env with + let env = + {env with ePath = [] - eCompPath = cpath - eAccessPath = cpath + eCompPath = cpath + eAccessPath = cpath // update this computed field eAccessRights = ComputeAccessRights cpath env.eInternalsVisibleCompPaths env.eFamilyType } let env = List.fold (fun env id -> MakeInnerEnv false env id Namespace |> fst) env enclosingNamespacePath @@ -516,7 +513,7 @@ let LocateEnv ccu env enclosingNamespacePath = //------------------------------------------------------------------------- // Helpers for unification -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- /// When the context is matching the oldRange then this function shrinks it to newRange. /// This can be used to change context over no-op expressions like parens. @@ -528,35 +525,35 @@ let ShrinkContext env oldRange newRange = | ContextInfo.ReturnInComputationExpression | ContextInfo.YieldInComputationExpression | ContextInfo.RuntimeTypeTest _ - | ContextInfo.DowncastUsedInsteadOfUpcast _ + | ContextInfo.DowncastUsedInsteadOfUpcast _ | ContextInfo.SequenceExpression _ -> env | ContextInfo.CollectionElement (b,m) -> if not (Range.equals m oldRange) then env else { env with eContextInfo = ContextInfo.CollectionElement(b,newRange) } - | ContextInfo.FollowingPatternMatchClause m -> + | ContextInfo.FollowingPatternMatchClause m -> if not (Range.equals m oldRange) then env else { env with eContextInfo = ContextInfo.FollowingPatternMatchClause newRange } - | ContextInfo.PatternMatchGuard m -> + | ContextInfo.PatternMatchGuard m -> if not (Range.equals m oldRange) then env else { env with eContextInfo = ContextInfo.PatternMatchGuard newRange } - | ContextInfo.IfExpression m -> + | ContextInfo.IfExpression m -> if not (Range.equals m oldRange) then env else { env with eContextInfo = ContextInfo.IfExpression newRange } - | ContextInfo.OmittedElseBranch m -> + | ContextInfo.OmittedElseBranch m -> if not (Range.equals m oldRange) then env else { env with eContextInfo = ContextInfo.OmittedElseBranch newRange } - | ContextInfo.ElseBranchResult m -> + | ContextInfo.ElseBranchResult m -> if not (Range.equals m oldRange) then env else { env with eContextInfo = ContextInfo.ElseBranchResult newRange } -/// Optimized unification routine that avoids creating new inference +/// Optimized unification routine that avoids creating new inference /// variables unnecessarily -let UnifyRefTupleType contextInfo cenv denv m ty ps = - let ptys = - if isRefTupleTy cenv.g ty then +let UnifyRefTupleType contextInfo cenv denv m ty ps = + let ptys = + if isRefTupleTy cenv.g ty then let ptys = destRefTupleTy cenv.g ty - if List.length ps = List.length ptys then ptys + if List.length ps = List.length ptys then ptys else NewInferenceTypes ps else NewInferenceTypes ps @@ -570,13 +567,13 @@ let UnifyRefTupleType contextInfo cenv denv m ty ps = /// Allow the inference of structness from the known type, e.g. /// let (x: struct (int * int)) = (3,4) -let UnifyTupleTypeAndInferCharacteristics contextInfo cenv denv m knownTy isExplicitStruct ps = - let tupInfo, ptys = - if isAnyTupleTy cenv.g knownTy then - let tupInfo, ptys = destAnyTupleTy cenv.g knownTy +let UnifyTupleTypeAndInferCharacteristics contextInfo cenv denv m knownTy isExplicitStruct ps = + let tupInfo, ptys = + if isAnyTupleTy cenv.g knownTy then + let tupInfo, ptys = destAnyTupleTy cenv.g knownTy let tupInfo = (if isExplicitStruct then tupInfoStruct else tupInfo) - let ptys = - if List.length ps = List.length ptys then ptys + let ptys = + if List.length ps = List.length ptys then ptys else NewInferenceTypes ps tupInfo, ptys else @@ -593,20 +590,20 @@ let UnifyTupleTypeAndInferCharacteristics contextInfo cenv denv m knownTy isExpl // Allow inference of assembly-affinity and structness from the known type - even from another assembly. This is a rule of // the language design and allows effective cross-assembly use of anonymous types in some limited circumstances. -let UnifyAnonRecdTypeAndInferCharacteristics contextInfo cenv denv m ty isExplicitStruct unsortedNames = - let anonInfo, ptys = - match tryDestAnonRecdTy cenv.g ty with - | ValueSome (anonInfo, ptys) -> +let UnifyAnonRecdTypeAndInferCharacteristics contextInfo cenv denv m ty isExplicitStruct unsortedNames = + let anonInfo, ptys = + match tryDestAnonRecdTy cenv.g ty with + | ValueSome (anonInfo, ptys) -> // Note: use the assembly of the known type, not the current assembly // Note: use the structness of the known type, unless explicit // Note: use the names of our type, since they are always explicit let tupInfo = (if isExplicitStruct then tupInfoStruct else anonInfo.TupInfo) let anonInfo = AnonRecdTypeInfo.Create(anonInfo.Assembly, tupInfo, unsortedNames) - let ptys = + let ptys = if List.length ptys = Array.length unsortedNames then ptys else NewInferenceTypes (Array.toList anonInfo.SortedNames) anonInfo, ptys - | ValueNone -> + | ValueNone -> // Note: no known anonymous record type - use our assembly let anonInfo = AnonRecdTypeInfo.Create(cenv.topCcu, mkTupInfo isExplicitStruct, unsortedNames) anonInfo, NewInferenceTypes (Array.toList anonInfo.SortedNames) @@ -615,34 +612,34 @@ let UnifyAnonRecdTypeAndInferCharacteristics contextInfo cenv denv m ty isExplic anonInfo, ptys -/// Optimized unification routine that avoids creating new inference +/// Optimized unification routine that avoids creating new inference /// variables unnecessarily let UnifyFunctionTypeUndoIfFailed cenv denv m ty = match tryDestFunTy cenv.g ty with | ValueNone -> let domainTy = NewInferenceType () let resultTy = NewInferenceType () - if AddCxTypeEqualsTypeUndoIfFailed denv cenv.css m ty (domainTy --> resultTy) then + if AddCxTypeEqualsTypeUndoIfFailed denv cenv.css m ty (domainTy --> resultTy) then ValueSome(domainTy, resultTy) - else + else ValueNone | r -> r -/// Optimized unification routine that avoids creating new inference +/// Optimized unification routine that avoids creating new inference /// variables unnecessarily let UnifyFunctionType extraInfo cenv denv mFunExpr ty = match UnifyFunctionTypeUndoIfFailed cenv denv mFunExpr ty with | ValueSome res -> res - | ValueNone -> - match extraInfo with + | ValueNone -> + match extraInfo with | Some argm -> error (NotAFunction(denv, ty, mFunExpr, argm)) | None -> error (FunctionExpected(denv, ty, mFunExpr)) let ReportImplicitlyIgnoredBoolExpression denv m ty expr = let checkExpr m expr = - match expr with + match expr with | Expr.App (Expr.Val (vf, _, _), _, _, exprs, _) when vf.LogicalName = opNameEquals -> - match exprs with + match exprs with | Expr.App (Expr.Val (propRef, _, _), _, _, Expr.Val (vf, _, _) :: _, _) :: _ -> if propRef.IsPropertyGetterMethod then let propertyName = propRef.PropertyName @@ -661,12 +658,12 @@ let ReportImplicitlyIgnoredBoolExpression denv m ty expr = UnitTypeExpectedWithEquality (denv, ty, m) | Expr.Op (TOp.ILCall (_, _, _, _, _, _, _, ilMethRef, _, _, _), _, Expr.Val (vf, _, _) :: _, _) :: _ when ilMethRef.Name.StartsWithOrdinal("get_") -> UnitTypeExpectedWithPossiblePropertySetter (denv, ty, vf.DisplayName, PrettyNaming.ChopPropertyName(ilMethRef.Name), m) - | Expr.Val (vf, _, _) :: _ -> + | Expr.Val (vf, _, _) :: _ -> UnitTypeExpectedWithPossibleAssignment (denv, ty, vf.IsMutable, vf.DisplayName, m) | _ -> UnitTypeExpectedWithEquality (denv, ty, m) | _ -> UnitTypeExpected (denv, ty, m) - match expr with + match expr with | Expr.Let (_, Expr.Sequential (_, inner, _, _, _), _, _) | Expr.Sequential (_, inner, _, _, _) -> let rec extractNext expr = @@ -678,16 +675,16 @@ let ReportImplicitlyIgnoredBoolExpression denv m ty expr = let UnifyUnitType cenv (env: TcEnv) m ty expr = let denv = env.DisplayEnv - if AddCxTypeEqualsTypeUndoIfFailed denv cenv.css m ty cenv.g.unit_ty then + if AddCxTypeEqualsTypeUndoIfFailed denv cenv.css m ty cenv.g.unit_ty then true else let domainTy = NewInferenceType () let resultTy = NewInferenceType () - if AddCxTypeEqualsTypeUndoIfFailed denv cenv.css m ty (domainTy --> resultTy) then + if AddCxTypeEqualsTypeUndoIfFailed denv cenv.css m ty (domainTy --> resultTy) then warning (FunctionValueUnexpected(denv, ty, m)) else let reportImplicitlyDiscardError() = - if typeEquiv cenv.g cenv.g.bool_ty ty then + if typeEquiv cenv.g cenv.g.bool_ty ty then warning (ReportImplicitlyIgnoredBoolExpression denv m ty expr) else warning (UnitTypeExpected (denv, ty, m)) @@ -701,7 +698,7 @@ let UnifyUnitType cenv (env: TcEnv) m ty expr = if isListTy cenv.g ty || isArrayTy cenv.g ty || typeEquiv cenv.g seqTy ty then warning (Error (FSComp.SR.implicitlyDiscardedSequenceInSequenceExpression(NicePrint.prettyStringOfTy denv ty), m)) else - reportImplicitlyDiscardError() + reportImplicitlyDiscardError() | _ -> reportImplicitlyDiscardError() @@ -709,7 +706,7 @@ let UnifyUnitType cenv (env: TcEnv) m ty expr = let TryUnifyUnitTypeWithoutWarning cenv (env:TcEnv) m ty = let denv = env.DisplayEnv - AddCxTypeEqualsTypeUndoIfFailedOrWarnings denv cenv.css m ty cenv.g.unit_ty + AddCxTypeEqualsTypeUndoIfFailedOrWarnings denv cenv.css m ty cenv.g.unit_ty // Logically extends System.AttributeTargets module AttributeTargets = @@ -726,12 +723,12 @@ let ForNewConstructors tcSink (env: TcEnv) mObjTy methodName meths = let callSink (item, minst) = CallMethodGroupNameResolutionSink tcSink (mObjTy, env.NameEnv, item, origItem, minst, ItemOccurence.Use, env.AccessRights) let sendToSink minst refinedMeths = callSink (Item.CtorGroup(methodName, refinedMeths), minst) match meths with - | [] -> + | [] -> AfterResolution.DoNothing - | [_] -> + | [_] -> sendToSink emptyTyparInst meths AfterResolution.DoNothing - | _ -> + | _ -> AfterResolution.RecordResolution (None, (fun tpinst -> callSink (origItem, tpinst)), (fun (minfo, _, minst) -> sendToSink minst [minfo]), (fun () -> callSink (origItem, emptyTyparInst))) @@ -746,7 +743,7 @@ let rec TcSynRationalConst c = let TcConst cenv ty m env c = let rec tcMeasure ms = match ms with - | SynMeasure.One -> Measure.One + | 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) @@ -755,37 +752,37 @@ let TcConst cenv ty m env c = | TyparKind.Measure -> Measure.Con tcref | 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) -> + | SynMeasure.Product(ms1, ms2, _) -> Measure.Prod(tcMeasure ms1, tcMeasure ms2) + | SynMeasure.Divide(ms1, ((SynMeasure.Seq (_ :: (_ :: _), _)) as ms2), m) -> warning(Error(FSComp.SR.tcImplicitMeasureFollowingSlash(), m)) Measure.Prod(tcMeasure ms1, Measure.Inv (tcMeasure ms2)) - | SynMeasure.Divide(ms1, ms2, _) -> + | SynMeasure.Divide(ms1, 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)) - + let unif expected = UnifyTypes cenv env m ty expected let unifyMeasureArg iszero tcr c = - let measureTy = - match c with - | SynConst.Measure(_, _, SynMeasure.Anon _) -> - (mkAppTy tcr [TType_measure (Measure.Var (NewAnonTypar (TyparKind.Measure, m, TyparRigidity.Anon, (if iszero then TyparStaticReq.None else TyparStaticReq.HeadType), TyparDynamicReq.No)))]) + let measureTy = + match c with + | SynConst.Measure(_, SynMeasure.Anon _) -> + (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)] + | SynConst.Measure(_, ms) -> mkAppTy tcr [TType_measure (tcMeasure ms)] | _ -> mkAppTy tcr [TType_measure Measure.One] unif measureTy let expandedMeasurablesEnabled = cenv.g.langVersion.SupportsFeature LanguageFeature.ExpandedMeasurables - match c with + match c with | SynConst.Unit -> unif cenv.g.unit_ty; Const.Unit | SynConst.Bool i -> unif cenv.g.bool_ty; Const.Bool i | SynConst.Single f -> unif cenv.g.float32_ty; Const.Single f - | SynConst.Double f -> unif cenv.g.float_ty; Const.Double f - | SynConst.Decimal f -> unif (mkAppTy cenv.g.decimal_tcr []); Const.Decimal f + | SynConst.Double f -> unif cenv.g.float_ty; Const.Double f + | SynConst.Decimal f -> unif (mkAppTy cenv.g.decimal_tcr []); Const.Decimal f | SynConst.SByte i -> unif cenv.g.sbyte_ty; Const.SByte i | SynConst.Int16 i -> unif cenv.g.int16_ty; Const.Int16 i | SynConst.Int32 i -> unif cenv.g.int_ty; Const.Int32 i @@ -796,136 +793,135 @@ let TcConst cenv ty m env c = | SynConst.UInt32 i -> unif cenv.g.uint32_ty; Const.UInt32 i | SynConst.UInt64 i -> unif cenv.g.uint64_ty; Const.UInt64 i | SynConst.UIntPtr i -> unif cenv.g.unativeint_ty; Const.UIntPtr i - | SynConst.Measure(SynConst.Single f, _, _) -> unifyMeasureArg (f=0.0f) cenv.g.pfloat32_tcr c; Const.Single f - | SynConst.Measure(SynConst.Double f, _, _) -> unifyMeasureArg (f=0.0) cenv.g.pfloat_tcr c; Const.Double f - | SynConst.Measure(SynConst.Decimal f, _, _) -> unifyMeasureArg false cenv.g.pdecimal_tcr c; Const.Decimal f - | SynConst.Measure(SynConst.SByte i, _, _) -> unifyMeasureArg (i=0y) cenv.g.pint8_tcr c; Const.SByte i - | SynConst.Measure(SynConst.Int16 i, _, _) -> unifyMeasureArg (i=0s) cenv.g.pint16_tcr c; Const.Int16 i - | SynConst.Measure(SynConst.Int32 i, _, _) -> unifyMeasureArg (i=0) cenv.g.pint_tcr c; Const.Int32 i - | SynConst.Measure(SynConst.Int64 i, _, _) -> unifyMeasureArg (i=0L) cenv.g.pint64_tcr c; Const.Int64 i - | SynConst.Measure(SynConst.IntPtr i, _, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0L) cenv.g.pnativeint_tcr c; Const.IntPtr i - | SynConst.Measure(SynConst.Byte i, _, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0uy) cenv.g.puint8_tcr c; Const.Byte i - | SynConst.Measure(SynConst.UInt16 i, _, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0us) cenv.g.puint16_tcr c; Const.UInt16 i - | SynConst.Measure(SynConst.UInt32 i, _, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0u) cenv.g.puint_tcr c; Const.UInt32 i - | SynConst.Measure(SynConst.UInt64 i, _, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0UL) cenv.g.puint64_tcr c; Const.UInt64 i - | SynConst.Measure(SynConst.UIntPtr i, _, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0UL) cenv.g.punativeint_tcr c; Const.UIntPtr i + | SynConst.Measure(SynConst.Single f, _) -> unifyMeasureArg (f=0.0f) cenv.g.pfloat32_tcr c; Const.Single f + | SynConst.Measure(SynConst.Double f, _) -> unifyMeasureArg (f=0.0) cenv.g.pfloat_tcr c; Const.Double f + | SynConst.Measure(SynConst.Decimal f, _) -> unifyMeasureArg false cenv.g.pdecimal_tcr c; Const.Decimal f + | SynConst.Measure(SynConst.SByte i, _) -> unifyMeasureArg (i=0y) cenv.g.pint8_tcr c; Const.SByte i + | SynConst.Measure(SynConst.Int16 i, _) -> unifyMeasureArg (i=0s) cenv.g.pint16_tcr c; Const.Int16 i + | SynConst.Measure(SynConst.Int32 i, _) -> unifyMeasureArg (i=0) cenv.g.pint_tcr c; Const.Int32 i + | SynConst.Measure(SynConst.Int64 i, _) -> unifyMeasureArg (i=0L) cenv.g.pint64_tcr c; Const.Int64 i + | SynConst.Measure(SynConst.IntPtr i, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0L) cenv.g.pnativeint_tcr c; Const.IntPtr i + | SynConst.Measure(SynConst.Byte i, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0uy) cenv.g.puint8_tcr c; Const.Byte i + | SynConst.Measure(SynConst.UInt16 i, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0us) cenv.g.puint16_tcr c; Const.UInt16 i + | SynConst.Measure(SynConst.UInt32 i, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0u) cenv.g.puint_tcr c; Const.UInt32 i + | SynConst.Measure(SynConst.UInt64 i, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0UL) cenv.g.puint64_tcr c; Const.UInt64 i + | SynConst.Measure(SynConst.UIntPtr i, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0UL) cenv.g.punativeint_tcr c; Const.UIntPtr i | SynConst.Char c -> unif cenv.g.char_ty; Const.Char c - | SynConst.String (s, _, _) - | SynConst.SourceIdentifier (_, s, _) -> unif cenv.g.string_ty; Const.String s + | SynConst.String (s, _) -> unif cenv.g.string_ty; Const.String s | SynConst.UserNum _ -> error (InternalError(FSComp.SR.tcUnexpectedBigRationalConstant(), m)) | SynConst.Measure _ -> error (Error(FSComp.SR.tcInvalidTypeForUnitsOfMeasure(), m)) | SynConst.UInt16s _ -> error (InternalError(FSComp.SR.tcUnexpectedConstUint16Array(), m)) | SynConst.Bytes _ -> error (InternalError(FSComp.SR.tcUnexpectedConstByteArray(), m)) - + /// Convert an Abstract IL ILFieldInit value read from .NET metadata to a TAST constant let TcFieldInit (_m: range) lit = PatternMatchCompilation.ilFieldToTastConst lit //------------------------------------------------------------------------- -// Arities. These serve two roles in the system: +// Arities. These serve two roles in the system: // 1. syntactic arities come from the syntactic forms found // signature files and the syntactic forms of function and member definitions. // 2. compiled arities representing representation choices w.r.t. internal representations of // functions and members. -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -// Adjust the arities that came from the parsing of the toptyp (arities) to be a valSynData. +// Adjust the arities that came from the parsing of the toptyp (arities) to be a valSynData. // This means replacing the "[unitArg]" arising from a "unit -> ty" with a "[]". -let AdjustValSynInfoInSignature g ty (SynValInfo(argsData, retData) as sigMD) = - if argsData.Length = 1 && argsData.Head.Length = 1 && isFunTy g ty && typeEquiv g g.unit_ty (domainOfFunTy g ty) then +let AdjustValSynInfoInSignature g ty (SynValInfo(argsData, retData) as sigMD) = + if argsData.Length = 1 && argsData.Head.Length = 1 && isFunTy g ty && typeEquiv g g.unit_ty (domainOfFunTy g ty) then SynValInfo(argsData.Head.Tail :: argsData.Tail, retData) - else - sigMD + else + sigMD -/// The ValReprInfo for a value, except the number of typars is not yet inferred +/// The ValReprInfo for a value, except the number of typars is not yet inferred type PartialValReprInfo = | PartialValReprInfo of curriedArgInfos: ArgReprInfo list list * - returnInfo: ArgReprInfo + returnInfo: ArgReprInfo -let TranslateTopArgSynInfo isArg m tcAttributes (SynArgInfo(Attributes attrs, isOpt, nm)) = +let TranslateTopArgSynInfo isArg m tcAttributes (SynArgInfo(Attributes attrs, isOpt, nm)) = // Synthesize an artificial "OptionalArgument" attribute for the parameter - let optAttrs = - if isOpt then - [ ( { TypeName=LongIdentWithDots(pathToSynLid m ["Microsoft";"FSharp";"Core";"OptionalArgument"], []) - ArgExpr=mkSynUnit m - Target=None - AppliesToGetterAndSetter=false - Range=m} : SynAttribute) ] - else + let optAttrs = + if isOpt then + [ ( { TypeName=LongIdentWithDots(pathToSynLid m ["Microsoft";"FSharp";"Core";"OptionalArgument"], []) + ArgExpr=mkSynUnit m + Target=None + AppliesToGetterAndSetter=false + Range=m} : SynAttribute) ] + else [] - if isArg && not (isNil attrs) && Option.isNone nm then + if isArg && not (isNil attrs) && Option.isNone nm then errorR(Error(FSComp.SR.tcParameterRequiresName(), m)) - if not isArg && Option.isSome nm then + if not isArg && Option.isSome nm then errorR(Error(FSComp.SR.tcReturnValuesCannotHaveNames(), m)) - - // Call the attribute checking function + + // Call the attribute checking function let attribs = tcAttributes (optAttrs@attrs) ({ Attribs = attribs; Name = nm } : ArgReprInfo) -/// Members have an arity inferred from their syntax. This "valSynData" is not quite the same as the arities -/// used in the middle and backends of the compiler ("topValInfo"). -/// "0" in a valSynData (see arity_of_pat) means a "unit" arg in a topValInfo -/// Hence remove all "zeros" from arity and replace them with 1 here. -/// Note we currently use the compiled form for choosing unique names, to distinguish overloads because this must match up -/// between signature and implementation, and the signature just has "unit". -let TranslateTopValSynInfo m tcAttributes (SynValInfo(argsData, retData)) = - PartialValReprInfo (argsData |> List.mapSquared (TranslateTopArgSynInfo true m (tcAttributes AttributeTargets.Parameter)), +/// Members have an arity inferred from their syntax. This "valSynData" is not quite the same as the arities +/// used in the middle and backends of the compiler ("topValInfo"). +/// "0" in a valSynData (see arity_of_pat) means a "unit" arg in a topValInfo +/// Hence remove all "zeros" from arity and replace them with 1 here. +/// Note we currently use the compiled form for choosing unique names, to distinguish overloads because this must match up +/// between signature and implementation, and the signature just has "unit". +let TranslateTopValSynInfo m tcAttributes (SynValInfo(argsData, retData)) = + PartialValReprInfo (argsData |> List.mapSquared (TranslateTopArgSynInfo true m (tcAttributes AttributeTargets.Parameter)), retData |> TranslateTopArgSynInfo false m (tcAttributes AttributeTargets.ReturnValue)) -let TranslatePartialArity tps (PartialValReprInfo (argsData, retData)) = +let TranslatePartialArity tps (PartialValReprInfo (argsData, retData)) = ValReprInfo(ValReprInfo.InferTyparInfo tps, argsData, retData) //------------------------------------------------------------------------- // Members -//------------------------------------------------------------------------- - -let ComputeLogicalName (id: Ident) (memberFlags: SynMemberFlags) = - match memberFlags.MemberKind with - | SynMemberKind.ClassConstructor -> ".cctor" - | SynMemberKind.Constructor -> ".ctor" - | SynMemberKind.Member -> - match id.idText with +//------------------------------------------------------------------------- + +let ComputeLogicalName (id: Ident) memberFlags = + match memberFlags.MemberKind with + | MemberKind.ClassConstructor -> ".cctor" + | MemberKind.Constructor -> ".ctor" + | MemberKind.Member -> + match id.idText with | (".ctor" | ".cctor") as r -> errorR(Error(FSComp.SR.tcInvalidMemberNameCtor(), id.idRange)); r | r -> r - | SynMemberKind.PropertyGetSet -> error(InternalError(FSComp.SR.tcMemberKindPropertyGetSetNotExpected(), id.idRange)) - | SynMemberKind.PropertyGet -> "get_" + id.idText - | SynMemberKind.PropertySet -> "set_" + id.idText + | MemberKind.PropertyGetSet -> error(InternalError(FSComp.SR.tcMemberKindPropertyGetSetNotExpected(), id.idRange)) + | MemberKind.PropertyGet -> "get_" + id.idText + | MemberKind.PropertySet -> "set_" + id.idText type PreValMemberInfo = | PreValMemberInfo of memberInfo: ValMemberInfo * logicalName: string * - compiledName: string + compiledName: string /// Make the unique "name" for a member. // -// optImplSlotTy = None (for classes) or Some ty (when implementing interface type ty) +// optImplSlotTy = None (for classes) or Some ty (when implementing interface type ty) let MakeMemberDataAndMangledNameForMemberVal(g, tcref, isExtrinsic, attrs, optImplSlotTys, memberFlags, valSynData, id, isCompGen) = let logicalName = ComputeLogicalName id memberFlags let optIntfSlotTys = if optImplSlotTys |> List.forall (isInterfaceTy g) then optImplSlotTys else [] - let memberInfo: ValMemberInfo = - { ApparentEnclosingEntity=tcref - MemberFlags=memberFlags + let memberInfo: ValMemberInfo = + { ApparentEnclosingEntity=tcref + MemberFlags=memberFlags IsImplemented=false - // NOTE: This value is initially only set for interface implementations and those overrides - // where we manage to pre-infer which abstract is overridden by the method. It is filled in - // properly when we check the allImplemented implementation checks at the end of the inference scope. + // NOTE: This value is initially only set for interface implementations and those overrides + // where we manage to pre-infer which abstract is overridden by the method. It is filled in + // properly when we check the allImplemented implementation checks at the end of the inference scope. ImplementedSlotSigs=optImplSlotTys |> List.map (fun ity -> TSlotSig(logicalName, ity, [], [], [], None)) } let isInstance = MemberIsCompiledAsInstance g tcref isExtrinsic memberInfo attrs - if (memberFlags.IsDispatchSlot || not (isNil optIntfSlotTys)) then + if (memberFlags.IsDispatchSlot || not (isNil optIntfSlotTys)) then if not isInstance then errorR(VirtualAugmentationOnNullValuedType(id.idRange)) - elif not memberFlags.IsOverrideOrExplicitImpl && memberFlags.IsInstance then + elif not memberFlags.IsOverrideOrExplicitImpl && memberFlags.IsInstance then if not isExtrinsic && not isInstance then warning(NonVirtualAugmentationOnNullValuedType(id.idRange)) - let compiledName = - if isExtrinsic then + let compiledName = + if isExtrinsic then let tname = tcref.LogicalName let text = tname + "." + logicalName - let text = if memberFlags.MemberKind <> SynMemberKind.Constructor && memberFlags.MemberKind <> SynMemberKind.ClassConstructor && not memberFlags.IsInstance then text + ".Static" else text + let text = if memberFlags.MemberKind <> MemberKind.Constructor && memberFlags.MemberKind <> MemberKind.ClassConstructor && not memberFlags.IsInstance then text + ".Static" else text let text = if memberFlags.IsOverrideOrExplicitImpl then text + ".Override" else text text else if not optIntfSlotTys.IsEmpty then @@ -935,8 +931,8 @@ let MakeMemberDataAndMangledNameForMemberVal(g, tcref, isExtrinsic, attrs, optIm qualifiedInterfaceImplementationName g optIntfSlotTys.Head logicalName else List.foldBack (fun x -> qualifiedMangledNameOfTyconRef (tcrefOfAppTy g x)) optIntfSlotTys logicalName - - if not isCompGen && IsMangledOpName id.idText && IsInfixOperator id.idText then + + if not isCompGen && IsMangledOpName id.idText && IsInfixOperator id.idText then let m = id.idRange let name = DecompileOpName id.idText // Check symbolic members. Expect valSynData implied arity to be [[2]]. @@ -953,21 +949,21 @@ let MakeMemberDataAndMangledNameForMemberVal(g, tcref, isExtrinsic, attrs, optIm PreValMemberInfo(memberInfo, logicalName, compiledName) -type OverridesOK = - | OverridesOK +type OverridesOK = + | OverridesOK | WarnOnOverrides | ErrorOnOverrides /// A type to represent information associated with values to indicate what explicit (declared) type parameters /// are given and what additional type parameters can be inferred, if any. /// -/// The declared type parameters, e.g. let f<'a> (x:'a) = x, plus an indication -/// of whether additional polymorphism may be inferred, e.g. let f<'a, ..> (x:'a) y = x +/// The declared type parameters, e.g. let f<'a> (x:'a) = x, plus an indication +/// of whether additional polymorphism may be inferred, e.g. let f<'a, ..> (x:'a) y = x type ExplicitTyparInfo = | ExplicitTyparInfo of rigidCopyOfDeclaredTypars: Typars * declaredTypars: Typars * - infer: bool + infer: bool let permitInferTypars = ExplicitTyparInfo ([], [], true) let dontInferTypars = ExplicitTyparInfo ([], [], false) @@ -976,29 +972,29 @@ type ArgAndRetAttribs = ArgAndRetAttribs of Attribs list list * Attribs let noArgOrRetAttribs = ArgAndRetAttribs ([], []) /// A flag to represent the sort of bindings are we processing. -/// Processing "declaration" and "class" bindings that make up a module (such as "let x = 1 let y = 2") -/// shares the same code paths (e.g. TcLetBinding and TcLetrec) as processing expression bindings (such as "let x = 1 in ...") -/// Member bindings also use this path. +/// Processing "declaration" and "class" bindings that make up a module (such as "let x = 1 let y = 2") +/// shares the same code paths (e.g. TcLetBinding and TcLetrec) as processing expression bindings (such as "let x = 1 in ...") +/// Member bindings also use this path. // -/// However there are differences in how different bindings get processed, -/// i.e. module bindings get published to the implicitly accumulated module type, but expression 'let' bindings don't. -type DeclKind = - | ModuleOrMemberBinding +/// However there are differences in how different bindings get processed, +/// i.e. module bindings get published to the implicitly accumulated module type, but expression 'let' bindings don't. +type DeclKind = + | ModuleOrMemberBinding /// Extensions to a type within the same assembly - | IntrinsicExtensionBinding + | IntrinsicExtensionBinding /// Extensions to a type in a different assembly - | ExtrinsicExtensionBinding + | ExtrinsicExtensionBinding | ClassLetBinding of isStatic: bool | ObjectExpressionOverrideBinding - | ExpressionBinding + | ExpressionBinding - static member IsModuleOrMemberOrExtensionBinding x = - match x with + static member IsModuleOrMemberOrExtensionBinding x = + match x with | ModuleOrMemberBinding -> true | IntrinsicExtensionBinding -> true | ExtrinsicExtensionBinding -> true @@ -1008,8 +1004,8 @@ type DeclKind = static member MustHaveArity x = DeclKind.IsModuleOrMemberOrExtensionBinding x - member x.CanBeDllImport = - match x with + member x.CanBeDllImport = + match x with | ModuleOrMemberBinding -> true | IntrinsicExtensionBinding -> true | ExtrinsicExtensionBinding -> true @@ -1021,102 +1017,102 @@ type DeclKind = static member ImplicitlyStatic x = DeclKind.IsModuleOrMemberOrExtensionBinding x - static member AllowedAttribTargets (memberFlagsOpt: SynMemberFlags option) x = - match x with - | ModuleOrMemberBinding | ObjectExpressionOverrideBinding -> + static member AllowedAttribTargets memberFlagsOpt x = + match x with + | ModuleOrMemberBinding | ObjectExpressionOverrideBinding -> match memberFlagsOpt with - | Some flags when flags.MemberKind = SynMemberKind.Constructor -> AttributeTargets.Constructor - | Some flags when flags.MemberKind = SynMemberKind.PropertyGetSet -> AttributeTargets.Event ||| AttributeTargets.Property - | Some flags when flags.MemberKind = SynMemberKind.PropertyGet -> AttributeTargets.Event ||| AttributeTargets.Property ||| AttributeTargets.ReturnValue - | Some flags when flags.MemberKind = SynMemberKind.PropertySet -> AttributeTargets.Property - | Some _ -> AttributeTargets.Method ||| AttributeTargets.ReturnValue - | None -> AttributeTargets.Field ||| AttributeTargets.Method ||| AttributeTargets.Property ||| AttributeTargets.ReturnValue - | IntrinsicExtensionBinding -> AttributeTargets.Method ||| AttributeTargets.Property ||| AttributeTargets.ReturnValue - | ExtrinsicExtensionBinding -> AttributeTargets.Method ||| AttributeTargets.Property ||| AttributeTargets.ReturnValue - | ClassLetBinding _ -> AttributeTargets.Field ||| AttributeTargets.Method ||| AttributeTargets.ReturnValue + | Some flags when flags.MemberKind = MemberKind.Constructor -> AttributeTargets.Constructor + | Some flags when flags.MemberKind = MemberKind.PropertyGetSet -> AttributeTargets.Event ||| AttributeTargets.Property + | Some flags when flags.MemberKind = MemberKind.PropertyGet -> AttributeTargets.Event ||| AttributeTargets.Property + | Some flags when flags.MemberKind = MemberKind.PropertySet -> AttributeTargets.Property + | Some _ -> AttributeTargets.Method + | None -> AttributeTargets.Field ||| AttributeTargets.Method ||| AttributeTargets.Property + | IntrinsicExtensionBinding -> AttributeTargets.Method ||| AttributeTargets.Property + | ExtrinsicExtensionBinding -> AttributeTargets.Method ||| AttributeTargets.Property + | ClassLetBinding _ -> AttributeTargets.Field ||| AttributeTargets.Method | ExpressionBinding -> enum 0 // indicates attributes not allowed on expression 'let' bindings // Note: now always true - static member CanGeneralizeConstrainedTypars x = - match x with + static member CanGeneralizeConstrainedTypars x = + match x with | ModuleOrMemberBinding -> true | IntrinsicExtensionBinding -> true | ExtrinsicExtensionBinding -> true | ClassLetBinding _ -> true | ObjectExpressionOverrideBinding -> true | ExpressionBinding -> true - - static member ConvertToLinearBindings x = - match x with + + static member ConvertToLinearBindings x = + match x with | ModuleOrMemberBinding -> true | IntrinsicExtensionBinding -> true | ExtrinsicExtensionBinding -> true | ClassLetBinding _ -> true | ObjectExpressionOverrideBinding -> true - | ExpressionBinding -> false + | ExpressionBinding -> false - static member CanOverrideOrImplement x = - match x with + static member CanOverrideOrImplement x = + match x with | ModuleOrMemberBinding -> OverridesOK | IntrinsicExtensionBinding -> WarnOnOverrides | ExtrinsicExtensionBinding -> ErrorOnOverrides - | ClassLetBinding _ -> ErrorOnOverrides + | ClassLetBinding _ -> ErrorOnOverrides | ObjectExpressionOverrideBinding -> OverridesOK - | ExpressionBinding -> ErrorOnOverrides + | ExpressionBinding -> ErrorOnOverrides //------------------------------------------------------------------------- // Data structures that track the gradual accumulation of information // about values and members during inference. -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- /// The results of preliminary pass over patterns to extract variables being declared. // We should make this a record for cleaner code -type PrelimValScheme1 = - | PrelimValScheme1 of - id: Ident * - explicitTyparInfo: ExplicitTyparInfo * - TType * +type PrelimValScheme1 = + | PrelimValScheme1 of + id: Ident * + explicitTyparInfo: ExplicitTyparInfo * + TType * PartialValReprInfo option * - PreValMemberInfo option * - bool * - ValInline * - ValBaseOrThisInfo * - ArgAndRetAttribs * - SynAccess option * + PreValMemberInfo option * + bool * + ValInline * + ValBaseOrThisInfo * + ArgAndRetAttribs * + SynAccess option * bool member x.Type = let (PrelimValScheme1(_, _, ty, _, _, _, _, _, _, _, _)) = x in ty member x.Ident = let (PrelimValScheme1(id, _, _, _, _, _, _, _, _, _, _)) = x in id - -/// The results of applying let-style generalization after type checking. + +/// The results of applying let-style generalization after type checking. // We should make this a record for cleaner code -type PrelimValScheme2 = - PrelimValScheme2 of - Ident * - TypeScheme * +type PrelimValScheme2 = + PrelimValScheme2 of + Ident * + TypeScheme * PartialValReprInfo option * - PreValMemberInfo option * + PreValMemberInfo option * + bool * + ValInline * + ValBaseOrThisInfo * + ArgAndRetAttribs * + SynAccess option * bool * - ValInline * - ValBaseOrThisInfo * - ArgAndRetAttribs * - SynAccess option * - bool * - bool (* hasDeclaredTypars *) - + bool (* hasDeclaredTypars *) + -/// The results of applying arity inference to PrelimValScheme2 -type ValScheme = - | ValScheme of - id: Ident * - typeScheme: TypeScheme * - topValInfo: ValReprInfo option * - memberInfo: PreValMemberInfo option * +/// The results of applying arity inference to PrelimValScheme2 +type ValScheme = + | ValScheme of + id: Ident * + typeScheme: TypeScheme * + topValInfo: ValReprInfo option * + memberInfo: PreValMemberInfo option * isMutable: bool * - inlineInfo: ValInline * - baseOrThisInfo: ValBaseOrThisInfo * - visibility: SynAccess option * + inlineInfo: ValInline * + baseOrThisInfo: ValBaseOrThisInfo * + visibility: SynAccess option * compgen: bool * isIncrClass: bool * isTyFunc: bool * @@ -1127,33 +1123,33 @@ type ValScheme = member x.TypeScheme = let (ValScheme(_, ts, _, _, _, _, _, _, _, _, _, _)) = x in ts member x.ValReprInfo = let (ValScheme(_, _, topValInfo, _, _, _, _, _, _, _, _, _)) = x in topValInfo - -/// Translation of patterns is split into three phases. The first collects names. -/// The second is run after val_specs have been created for those names and inference -/// has been resolved. The second phase is run by applying a function returned by the -/// first phase. The input to the second phase is a List.map that gives the Val and type scheme -/// for each value bound by the pattern. -type TcPatPhase2Input = + +/// Translation of patterns is split into three phases. The first collects names. +/// The second is run after val_specs have been created for those names and inference +/// has been resolved. The second phase is run by applying a function returned by the +/// first phase. The input to the second phase is a List.map that gives the Val and type scheme +/// for each value bound by the pattern. +type TcPatPhase2Input = | TcPatPhase2Input of (Val * TypeScheme) NameMap * bool // Get an input indicating we are no longer on the left-most path through a disjunctive "or" pattern member x.RightPath = (let (TcPatPhase2Input(a, _)) = x in TcPatPhase2Input(a, false)) -/// The first phase of checking and elaborating a binding leaves a goop of information. -/// This is a bit of a mess: much of this information is also carried on a per-value basis by the -/// "NameMap". -type CheckedBindingInfo = - | CheckedBindingInfo of - inlineFlag: ValInline * - valAttribs: Attribs * - xmlDoc: XmlDoc * - tcPatPhase2: (TcPatPhase2Input -> PatternMatchCompilation.Pattern) * - exlicitTyparInfo: ExplicitTyparInfo * - nameToPrelimValSchemeMap: NameMap * - rhsExprChecked: Expr * - argAndRetAttribs: ArgAndRetAttribs * - overallPatTy: TType * +/// The first phase of checking and elaborating a binding leaves a goop of information. +/// This is a bit of a mess: much of this information is also carried on a per-value basis by the +/// "NameMap". +type CheckedBindingInfo = + | CheckedBindingInfo of + inlineFlag: ValInline * + valAttribs: Attribs * + xmlDoc: XmlDoc * + tcPatPhase2: (TcPatPhase2Input -> PatternMatchCompilation.Pattern) * + exlicitTyparInfo: ExplicitTyparInfo * + nameToPrelimValSchemeMap: NameMap * + rhsExprChecked: Expr * + argAndRetAttribs: ArgAndRetAttribs * + overallPatTy: TType * mBinding: range * - spBind: DebugPointAtBinding * + spBind: DebugPointForBinding * isCompilerGenerated: bool * literalValue: Const option * isFixed: bool @@ -1161,7 +1157,7 @@ type CheckedBindingInfo = member x.SeqPoint = let (CheckedBindingInfo(_, _, _, _, _, _, _, _, _, _, spBind, _, _, _)) = x in spBind /// Return the generalized type for a type scheme -let GeneralizedTypeForTypeScheme typeScheme = +let GeneralizedTypeForTypeScheme typeScheme = let (TypeScheme(generalizedTypars, tau)) = typeScheme mkForallTyIfNeeded generalizedTypars tau @@ -1171,97 +1167,97 @@ let NonGenericTypeScheme ty = TypeScheme([], ty) //------------------------------------------------------------------------- // Helpers related to publishing values, types and members into the // elaborated representation. -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -let UpdateAccModuleOrNamespaceType cenv env f = - // When compiling FSharp.Core, modify the fslib CCU to ensure forward stable references used by - // the compiler can be resolved ASAP. Not at all pretty but it's hard to +let UpdateAccModuleOrNamespaceType cenv env f = + // When compiling FSharp.Core, modify the fslib CCU to ensure forward stable references used by + // the compiler can be resolved ASAP. Not at all pretty but it's hard to // find good ways to do references from the compiler into a term graph. - if cenv.compilingCanonicalFslibModuleType then + if cenv.compilingCanonicalFslibModuleType then let nleref = mkNonLocalEntityRef cenv.topCcu (arrPathOfLid env.ePath) let modul = nleref.Deref modul.entity_modul_contents <- MaybeLazy.Strict (f true modul.ModuleOrNamespaceType) SetCurrAccumulatedModuleOrNamespaceType env (f false (GetCurrAccumulatedModuleOrNamespaceType env)) - -let PublishModuleDefn cenv env mspec = - UpdateAccModuleOrNamespaceType cenv env (fun intoFslibCcu mty -> + +let PublishModuleDefn cenv env mspec = + UpdateAccModuleOrNamespaceType cenv env (fun intoFslibCcu mty -> if intoFslibCcu then mty else mty.AddEntity mspec) let item = Item.ModuleOrNamespaces([mkLocalModRef mspec]) CallNameResolutionSink cenv.tcSink (mspec.Range, env.NameEnv, item, emptyTyparInst, ItemOccurence.Binding, env.AccessRights) -let PublishTypeDefn cenv env mspec = - UpdateAccModuleOrNamespaceType cenv env (fun _ mty -> +let PublishTypeDefn cenv env mspec = + UpdateAccModuleOrNamespaceType cenv env (fun _ mty -> mty.AddEntity mspec) -let PublishValueDefnPrim cenv env (vspec: Val) = - UpdateAccModuleOrNamespaceType cenv env (fun _ mty -> +let PublishValueDefnPrim cenv env (vspec: Val) = + UpdateAccModuleOrNamespaceType cenv env (fun _ mty -> mty.AddVal vspec) let PublishValueDefn cenv env declKind (vspec: Val) = - if (declKind = ModuleOrMemberBinding) && - ((GetCurrAccumulatedModuleOrNamespaceType env).ModuleOrNamespaceKind = Namespace) && - (Option.isNone vspec.MemberInfo) then - errorR(Error(FSComp.SR.tcNamespaceCannotContainValues(), vspec.Range)) + if (declKind = ModuleOrMemberBinding) && + ((GetCurrAccumulatedModuleOrNamespaceType env).ModuleOrNamespaceKind = Namespace) && + (Option.isNone vspec.MemberInfo) then + errorR(NumberedError(FSComp.SR.tcNamespaceCannotContainValues(), vspec.Range)) - if (declKind = ExtrinsicExtensionBinding) && - ((GetCurrAccumulatedModuleOrNamespaceType env).ModuleOrNamespaceKind = Namespace) then + if (declKind = ExtrinsicExtensionBinding) && + ((GetCurrAccumulatedModuleOrNamespaceType env).ModuleOrNamespaceKind = Namespace) then errorR(Error(FSComp.SR.tcNamespaceCannotContainExtensionMembers(), vspec.Range)) - // Publish the value to the module type being generated. - match declKind with + // Publish the value to the module type being generated. + match declKind with | ModuleOrMemberBinding | ExtrinsicExtensionBinding | IntrinsicExtensionBinding -> PublishValueDefnPrim cenv env vspec | _ -> () - match vspec.MemberInfo with - | Some _ when - (not vspec.IsCompilerGenerated && + match vspec.MemberInfo with + | Some _ when + (not vspec.IsCompilerGenerated && // Extrinsic extensions don't get added to the tcaug - not (declKind = ExtrinsicExtensionBinding)) -> - // // Static initializers don't get published to the tcaug - // not (memberInfo.MemberFlags.MemberKind = SynMemberKind.ClassConstructor)) -> - + not (declKind = ExtrinsicExtensionBinding)) -> + // // Static initializers don't get published to the tcaug + // not (memberInfo.MemberFlags.MemberKind = MemberKind.ClassConstructor)) -> + let tcaug = vspec.MemberApparentEntity.TypeContents let vref = mkLocalValRef vspec tcaug.tcaug_adhoc <- NameMultiMap.add vspec.LogicalName vref tcaug.tcaug_adhoc tcaug.tcaug_adhoc_list.Add (ValRefIsExplicitImpl cenv.g vref, vref) | _ -> () -let CombineVisibilityAttribs vis1 vis2 m = +let CombineVisibilityAttribs vis1 vis2 m = match vis1 with | Some _ -> - if Option.isSome vis2 then + if Option.isSome vis2 then errorR(Error(FSComp.SR.tcMultipleVisibilityAttributes(), m)) vis1 | _ -> vis2 -let ComputeAccessAndCompPath env declKindOpt m vis overrideVis actualParent = +let ComputeAccessAndCompPath env declKindOpt m vis overrideVis actualParent = let accessPath = env.eAccessPath - let accessModPermitted = - match declKindOpt with + let accessModPermitted = + match declKindOpt with | None -> true | Some declKind -> DeclKind.IsAccessModifierPermitted declKind - if Option.isSome vis && not accessModPermitted then + if Option.isSome vis && not accessModPermitted then errorR(Error(FSComp.SR.tcMultipleVisibilityAttributesWithLet(), m)) - let vis = - match overrideVis, vis with + let vis = + match overrideVis, vis with | Some v, _ -> v | _, None -> taccessPublic (* a module or member binding defaults to "public" *) | _, Some SynAccess.Public -> taccessPublic | _, Some SynAccess.Private -> taccessPrivate accessPath - | _, Some SynAccess.Internal -> taccessInternal + | _, Some SynAccess.Internal -> taccessInternal - let vis = - match actualParent with - | ParentNone -> vis + let vis = + match actualParent with + | ParentNone -> vis | Parent tcref -> combineAccess vis tcref.Accessibility - + let cpath = if accessModPermitted then Some env.eCompPath else None - vis, cpath + vis, cpath let CheckForAbnormalOperatorNames cenv (idRange: range) coreDisplayName (memberInfoOpt: ValMemberInfo option) = if (idRange.EndColumn - idRange.StartColumn <= 5) && @@ -1275,20 +1271,20 @@ let CheckForAbnormalOperatorNames cenv (idRange: range) coreDisplayName (memberI warning(StandardOperatorRedefinitionWarning(FSComp.SR.tcInvalidMethodNameForRelationalOperator(opName, coreDisplayName), idRange)) else warning(StandardOperatorRedefinitionWarning(FSComp.SR.tcInvalidOperatorDefinitionRelational opName, idRange)) - | PrettyNaming.Equality -> + | PrettyNaming.Equality -> if isMember then warning(StandardOperatorRedefinitionWarning(FSComp.SR.tcInvalidMethodNameForEquality(opName, coreDisplayName), idRange)) else warning(StandardOperatorRedefinitionWarning(FSComp.SR.tcInvalidOperatorDefinitionEquality opName, idRange)) - | PrettyNaming.Control -> + | PrettyNaming.Control -> if isMember then warning(StandardOperatorRedefinitionWarning(FSComp.SR.tcInvalidMemberName(opName, coreDisplayName), idRange)) else warning(StandardOperatorRedefinitionWarning(FSComp.SR.tcInvalidOperatorDefinition opName, idRange)) - | PrettyNaming.Indexer -> + | PrettyNaming.Indexer -> if not isMember then error(StandardOperatorRedefinitionWarning(FSComp.SR.tcInvalidIndexOperatorDefinition opName, idRange)) - | PrettyNaming.FixedTypes -> + | PrettyNaming.FixedTypes -> if isMember then warning(StandardOperatorRedefinitionWarning(FSComp.SR.tcInvalidMemberNameFixedTypes opName, idRange)) | PrettyNaming.Other -> () @@ -1301,8 +1297,8 @@ let MakeAndPublishVal cenv env (altActualParent, inSig, declKind, vrec, vscheme, let m = id.idRange - let isTopBinding = - match declKind with + let isTopBinding = + match declKind with | ModuleOrMemberBinding -> true | ExtrinsicExtensionBinding -> true | IntrinsicExtensionBinding -> true @@ -1310,12 +1306,12 @@ let MakeAndPublishVal cenv env (altActualParent, inSig, declKind, vrec, vscheme, let isExtrinsic = (declKind = ExtrinsicExtensionBinding) - let actualParent, overrideVis = - // Use the parent of the member if it's available + let actualParent, overrideVis = + // Use the parent of the member if it's available // If it's an extrinsic extension member or not a member then use the containing module. - match memberInfoOpt with - | Some (PreValMemberInfo(memberInfo, _, _)) when not isExtrinsic -> - if memberInfo.ApparentEnclosingEntity.IsModuleOrNamespace then + match memberInfoOpt with + | Some (PreValMemberInfo(memberInfo, _, _)) when not isExtrinsic -> + if memberInfo.ApparentEnclosingEntity.IsModuleOrNamespace then errorR(InternalError(FSComp.SR.tcExpectModuleOrNamespaceParent(id.idText), m)) // Members of interface implementations have the accessibility of the interface @@ -1330,16 +1326,16 @@ let MakeAndPublishVal cenv env (altActualParent, inSig, declKind, vrec, vscheme, None Parent(memberInfo.ApparentEnclosingEntity), vis | _ -> altActualParent, None - + let vis, _ = ComputeAccessAndCompPath env (Some declKind) id.idRange vis overrideVis actualParent - let inlineFlag = - if HasFSharpAttributeOpt cenv.g cenv.g.attrib_DllImportAttribute attrs then - if inlineFlag = ValInline.PseudoVal || inlineFlag = ValInline.Always then - errorR(Error(FSComp.SR.tcDllImportStubsCannotBeInlined(), m)) - ValInline.Never - else - let implflags = + let inlineFlag = + if HasFSharpAttributeOpt cenv.g cenv.g.attrib_DllImportAttribute attrs then + if inlineFlag = ValInline.PseudoVal || inlineFlag = ValInline.Always then + errorR(Error(FSComp.SR.tcDllImportStubsCannotBeInlined(), m)) + ValInline.Never + else + let implflags = match TryFindFSharpAttribute cenv.g cenv.g.attrib_MethodImplAttribute attrs with | Some (Attrib(_, _, [ AttribInt32Arg flags ], _, _, _, _)) -> flags | _ -> 0x0 @@ -1350,60 +1346,60 @@ let MakeAndPublishVal cenv env (altActualParent, inSig, declKind, vrec, vscheme, else inlineFlag - // CompiledName not allowed on virtual/abstract/override members + // CompiledName not allowed on virtual/abstract/override members let compiledNameAttrib = TryFindFSharpStringAttribute cenv.g cenv.g.attrib_CompiledNameAttribute attrs if Option.isSome compiledNameAttrib then - match memberInfoOpt with - | Some (PreValMemberInfo(memberInfo, _, _)) -> + match memberInfoOpt with + | Some (PreValMemberInfo(memberInfo, _, _)) -> if memberInfo.MemberFlags.IsDispatchSlot || memberInfo.MemberFlags.IsOverrideOrExplicitImpl then errorR(Error(FSComp.SR.tcCompiledNameAttributeMisused(), m)) - | None -> + | None -> match altActualParent with - | ParentNone -> errorR(Error(FSComp.SR.tcCompiledNameAttributeMisused(), m)) + | ParentNone -> errorR(Error(FSComp.SR.tcCompiledNameAttributeMisused(), m)) | _ -> () let compiledNameIsOnProp = match memberInfoOpt with | Some (PreValMemberInfo(memberInfo, _, _)) -> - memberInfo.MemberFlags.MemberKind = SynMemberKind.PropertyGet || - memberInfo.MemberFlags.MemberKind = SynMemberKind.PropertySet || - memberInfo.MemberFlags.MemberKind = SynMemberKind.PropertyGetSet + memberInfo.MemberFlags.MemberKind = MemberKind.PropertyGet || + memberInfo.MemberFlags.MemberKind = MemberKind.PropertySet || + memberInfo.MemberFlags.MemberKind = MemberKind.PropertyGetSet | _ -> false - let compiledName = - match compiledNameAttrib with + let compiledName = + match compiledNameAttrib with // We fix up CompiledName on properties during codegen - | Some _ when not compiledNameIsOnProp -> compiledNameAttrib - | _ -> - match memberInfoOpt with - | Some (PreValMemberInfo(_, _, compiledName)) -> + | Some _ when not compiledNameIsOnProp -> compiledNameAttrib + | _ -> + match memberInfoOpt with + | Some (PreValMemberInfo(_, _, compiledName)) -> Some compiledName - | None -> + | None -> None - let logicalName = - match memberInfoOpt with - | Some (PreValMemberInfo(_, logicalName, _)) -> + let logicalName = + match memberInfoOpt with + | Some (PreValMemberInfo(_, logicalName, _)) -> logicalName - | None -> + | None -> id.idText - let memberInfoOpt = - match memberInfoOpt with - | Some (PreValMemberInfo(memberInfo, _, _)) -> + let memberInfoOpt = + match memberInfoOpt with + | Some (PreValMemberInfo(memberInfo, _, _)) -> Some memberInfo - | None -> + | None -> None let mut = if isMutable then Mutable else Immutable - let vspec = + let vspec = Construct.NewVal (logicalName, id.idRange, compiledName, ty, mut, compgen, topValData, vis, vrec, memberInfoOpt, baseOrThis, attrs, inlineFlag, - doc, isTopBinding, isExtrinsic, isIncrClass, isTyFunc, + doc, isTopBinding, isExtrinsic, isIncrClass, isTyFunc, (hasDeclaredTypars || inSig), isGeneratedEventVal, konst, actualParent) - + CheckForAbnormalOperatorNames cenv id.idRange vspec.CoreDisplayName memberInfoOpt PublishValueDefn cenv env declKind vspec @@ -1411,8 +1407,8 @@ let MakeAndPublishVal cenv env (altActualParent, inSig, declKind, vrec, vscheme, let shouldNotifySink (vspec: Val) = match vspec.MemberInfo with // `this` reference named `__`. It's either: - // * generated by compiler for auto properties or - // * provided by source code (i.e. `member _.Method = ...`) + // * generated by compiler for auto properties or + // * provided by source code (i.e. `member __.Method = ...`) // We don't notify sink about it to prevent generating `FSharpSymbol` for it and appearing in completion list. | None when let baseOrThisInfo = vspec.BaseOrThisInfo @@ -1421,8 +1417,8 @@ let MakeAndPublishVal cenv env (altActualParent, inSig, declKind, vrec, vscheme, | _ -> true match cenv.tcSink.CurrentSink with - | Some _ when not vspec.IsCompilerGenerated && shouldNotifySink vspec -> - let nenv = AddFakeNamedValRefToNameEnv vspec.DisplayName env.NameEnv (mkLocalValRef vspec) + | Some _ when not vspec.IsCompilerGenerated && shouldNotifySink vspec -> + let nenv = AddFakeNamedValRefToNameEnv vspec.DisplayName env.NameEnv (mkLocalValRef vspec) CallEnvSink cenv.tcSink (vspec.Range, nenv, env.eAccessRights) let item = Item.Value(mkLocalValRef vspec) CallNameResolutionSink cenv.tcSink (vspec.Range, nenv, item, emptyTyparInst, ItemOccurence.Binding, env.eAccessRights) @@ -1432,12 +1428,12 @@ let MakeAndPublishVal cenv env (altActualParent, inSig, declKind, vrec, vscheme, let MakeAndPublishVals cenv env (altActualParent, inSig, declKind, vrec, valSchemes, attrs, doc, literalValue) = Map.foldBack - (fun name (valscheme: ValScheme) values -> + (fun name (valscheme: ValScheme) values -> Map.add name (MakeAndPublishVal cenv env (altActualParent, inSig, declKind, vrec, valscheme, attrs, doc, literalValue, false), valscheme.TypeScheme) values) valSchemes Map.empty -let MakeAndPublishBaseVal cenv env baseIdOpt ty = +let MakeAndPublishBaseVal cenv env baseIdOpt ty = baseIdOpt |> Option.map (fun (id: Ident) -> let valscheme = ValScheme(id, NonGenericTypeScheme ty, None, None, false, ValInline.Never, BaseVal, None, false, false, false, false) @@ -1445,23 +1441,23 @@ let MakeAndPublishBaseVal cenv env baseIdOpt ty = // Make the "delayed reference" value where the this pointer will reside after calling the base class constructor // Make the value for the 'this' pointer for use within a constructor -let MakeAndPublishSafeThisVal cenv env (thisIdOpt: Ident option) thisTy = - match thisIdOpt with - | Some thisId -> - // for structs, thisTy is a byref - if not (isFSharpObjModelTy cenv.g thisTy) then +let MakeAndPublishSafeThisVal cenv env (thisIdOpt: Ident option) thisTy = + match thisIdOpt with + | Some thisId -> + // for structs, thisTy is a byref + if not (isFSharpObjModelTy cenv.g thisTy) then errorR(Error(FSComp.SR.tcStructsCanOnlyBindThisAtMemberDeclaration(), thisId.idRange)) let valScheme = ValScheme(thisId, NonGenericTypeScheme(mkRefCellTy cenv.g thisTy), None, None, false, ValInline.Never, CtorThisVal, None, false, false, false, false) Some(MakeAndPublishVal cenv env (ParentNone, false, ExpressionBinding, ValNotInRecScope, valScheme, [], XmlDoc.Empty, None, false)) - | None -> - None + | None -> + None //------------------------------------------------------------------------- // Helpers for type inference for recursive bindings -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- /// Fixup the type instantiation at recursive references. Used after the bindings have been /// checked. The fixups are applied by using mutation. @@ -1469,70 +1465,70 @@ let AdjustAndForgetUsesOfRecValue cenv (vrefTgt: ValRef) (valScheme: ValScheme) let (TypeScheme(generalizedTypars, _)) = valScheme.TypeScheme let fty = GeneralizedTypeForTypeScheme valScheme.TypeScheme let lvrefTgt = vrefTgt.Deref - if not (isNil generalizedTypars) then - // Find all the uses of this recursive binding and use mutation to adjust the expressions - // at those points in order to record the inferred type parameters. + if not (isNil generalizedTypars) then + // Find all the uses of this recursive binding and use mutation to adjust the expressions + // at those points in order to record the inferred type parameters. let recUses = cenv.recUses.Find lvrefTgt - recUses - |> List.iter (fun (fixupPoint, m, isComplete) -> - if not isComplete then - // Keep any values for explicit type arguments - let fixedUpExpr = - let vrefFlags, tyargs0 = - match fixupPoint.Value with + recUses + |> List.iter (fun (fixupPoint, m, isComplete) -> + if not isComplete then + // Keep any values for explicit type arguments + let fixedUpExpr = + let vrefFlags, tyargs0 = + match fixupPoint.Value with | Expr.App (Expr.Val (_, vrefFlags, _), _, tyargs0, [], _) -> vrefFlags, tyargs0 - | Expr.Val (_, vrefFlags, _) -> vrefFlags, [] - | _ -> - errorR(Error(FSComp.SR.tcUnexpectedExprAtRecInfPoint(), m)) + | Expr.Val (_, vrefFlags, _) -> vrefFlags, [] + | _ -> + errorR(Error(FSComp.SR.tcUnexpectedExprAtRecInfPoint(), m)) NormalValUse, [] - + let ityargs = generalizeTypars (List.skip (List.length tyargs0) generalizedTypars) primMkApp (Expr.Val (vrefTgt, vrefFlags, m), fty) (tyargs0 @ ityargs) [] m fixupPoint.Value <- fixedUpExpr) vrefTgt.Deref.SetValRec ValNotInRecScope - cenv.recUses <- cenv.recUses.Remove vrefTgt.Deref + cenv.recUses <- cenv.recUses.Remove vrefTgt.Deref + - -/// Set the properties of recursive values that are only fully known after inference is complete +/// Set the properties of recursive values that are only fully known after inference is complete let AdjustRecType (vspec: Val) (ValScheme(_, typeScheme, topValData, _, _, _, _, _, _, _, _, _)) = let fty = GeneralizedTypeForTypeScheme typeScheme vspec.SetType fty vspec.SetValReprInfo topValData vspec.SetValRec (ValInRecScope true) - -/// Record the generated value expression as a place where we will have to -/// adjust using AdjustAndForgetUsesOfRecValue at a letrec point. Every use of a value -/// under a letrec gets used at the _same_ type instantiation. -let RecordUseOfRecValue cenv vrec (vrefTgt: ValRef) vexp m = - match vrec with - | ValInRecScope isComplete -> + +/// Record the generated value expression as a place where we will have to +/// adjust using AdjustAndForgetUsesOfRecValue at a letrec point. Every use of a value +/// under a letrec gets used at the _same_ type instantiation. +let RecordUseOfRecValue cenv vrec (vrefTgt: ValRef) vexp m = + match vrec with + | ValInRecScope isComplete -> let fixupPoint = ref vexp - cenv.recUses <- cenv.recUses.Add (vrefTgt.Deref, (fixupPoint, m, isComplete)) + cenv.recUses <- cenv.recUses.Add (vrefTgt.Deref, (fixupPoint, m, isComplete)) Expr.Link fixupPoint - | ValNotInRecScope -> + | ValNotInRecScope -> vexp type RecursiveUseFixupPoints = RecursiveUseFixupPoints of (Expr ref * range) list -/// Get all recursive references, for fixing up delayed recursion using laziness -let GetAllUsesOfRecValue cenv vrefTgt = +/// Get all recursive references, for fixing up delayed recursion using laziness +let GetAllUsesOfRecValue cenv vrefTgt = RecursiveUseFixupPoints (cenv.recUses.Find vrefTgt |> List.map (fun (fixupPoint, m, _) -> (fixupPoint, m))) //------------------------------------------------------------------------- // Helpers for Generalization -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- let ChooseCanonicalDeclaredTyparsAfterInference g denv declaredTypars m = - declaredTypars |> List.iter (fun tp -> + declaredTypars |> List.iter (fun tp -> let ty = mkTyparTy tp - if not (isAnyParTy g ty) then + if not (isAnyParTy g ty) then error(Error(FSComp.SR.tcLessGenericBecauseOfAnnotation(tp.Name, NicePrint.prettyStringOfTy denv ty), tp.Range))) - + let declaredTypars = NormalizeDeclaredTyparsForEquiRecursiveInference g declaredTypars - if ListSet.hasDuplicates typarEq declaredTypars then + if ListSet.hasDuplicates typarEq declaredTypars then errorR(Error(FSComp.SR.tcConstrainedTypeVariableCannotBeGeneralized(), m)) declaredTypars @@ -1548,18 +1544,18 @@ let ChooseCanonicalValSchemeAfterInference g denv vscheme m = let PlaceTyparsInDeclarationOrder declaredTypars generalizedTypars = declaredTypars @ (generalizedTypars |> List.filter (fun tp -> not (ListSet.contains typarEq tp declaredTypars))) -let SetTyparRigid denv m (tp: Typar) = - match tp.Solution with +let SetTyparRigid denv m (tp: Typar) = + match tp.Solution with | None -> () - | Some ty -> - if tp.IsCompilerGenerated then + | Some ty -> + if tp.IsCompilerGenerated then errorR(Error(FSComp.SR.tcGenericParameterHasBeenConstrained(NicePrint.prettyStringOfTy denv ty), m)) - else + else errorR(Error(FSComp.SR.tcTypeParameterHasBeenConstrained(NicePrint.prettyStringOfTy denv ty), tp.Range)) tp.SetRigidity TyparRigidity.Rigid -let GeneralizeVal cenv denv enclosingDeclaredTypars generalizedTyparsForThisBinding - (PrelimValScheme1(id, explicitTyparInfo, ty, partialValReprInfo, memberInfoOpt, isMutable, inlineFlag, baseOrThis, argAttribs, vis, compgen)) = +let GeneralizeVal cenv denv enclosingDeclaredTypars generalizedTyparsForThisBinding + (PrelimValScheme1(id, explicitTyparInfo, ty, partialValReprInfo, memberInfoOpt, isMutable, inlineFlag, baseOrThis, argAttribs, vis, compgen)) = let (ExplicitTyparInfo(_rigidCopyOfDeclaredTypars, declaredTypars, _)) = explicitTyparInfo @@ -1568,67 +1564,67 @@ let GeneralizeVal cenv denv enclosingDeclaredTypars generalizedTyparsForThisBind let allDeclaredTypars = enclosingDeclaredTypars@declaredTypars let allDeclaredTypars = ChooseCanonicalDeclaredTyparsAfterInference cenv.g denv allDeclaredTypars m - // Trim out anything not in type of the value (as opposed to the type of the r.h.s) - // This is important when a single declaration binds - // multiple generic items, where each item does not use all the polymorphism - // of the r.h.s., e.g. let x, y = None, [] - let computeRelevantTypars thruFlag = + // Trim out anything not in type of the value (as opposed to the type of the r.h.s) + // This is important when a single declaration binds + // multiple generic items, where each item does not use all the polymorphism + // of the r.h.s., e.g. let x, y = None, [] + let computeRelevantTypars thruFlag = let ftps = freeInTypeLeftToRight cenv.g thruFlag ty let generalizedTypars = generalizedTyparsForThisBinding |> List.filter (fun tp -> ListSet.contains typarEq tp ftps) - // Put declared typars first - let generalizedTypars = PlaceTyparsInDeclarationOrder allDeclaredTypars generalizedTypars + // Put declared typars first + let generalizedTypars = PlaceTyparsInDeclarationOrder allDeclaredTypars generalizedTypars generalizedTypars let generalizedTypars = computeRelevantTypars false // Check stability of existence and ordering of type parameters under erasure of type abbreviations let generalizedTyparsLookingThroughTypeAbbreviations = computeRelevantTypars true - if not (generalizedTypars.Length = generalizedTyparsLookingThroughTypeAbbreviations.Length && + if not (generalizedTypars.Length = generalizedTyparsLookingThroughTypeAbbreviations.Length && List.forall2 typarEq generalizedTypars generalizedTyparsLookingThroughTypeAbbreviations) then warning(Error(FSComp.SR.tcTypeParametersInferredAreNotStable(), m)) let hasDeclaredTypars = not (isNil declaredTypars) - // This is just about the only place we form a TypeScheme + // This is just about the only place we form a TypeScheme let tyScheme = TypeScheme(generalizedTypars, ty) PrelimValScheme2(id, tyScheme, partialValReprInfo, memberInfoOpt, isMutable, inlineFlag, baseOrThis, argAttribs, vis, compgen, hasDeclaredTypars) -let GeneralizeVals cenv denv enclosingDeclaredTypars generalizedTypars types = +let GeneralizeVals cenv denv enclosingDeclaredTypars generalizedTypars types = NameMap.map (GeneralizeVal cenv denv enclosingDeclaredTypars generalizedTypars) types -let DontGeneralizeVals types = - let dontGeneralizeVal (PrelimValScheme1(id, _, ty, partialValReprInfoOpt, memberInfoOpt, isMutable, inlineFlag, baseOrThis, argAttribs, vis, compgen)) = +let DontGeneralizeVals types = + let dontGeneralizeVal (PrelimValScheme1(id, _, ty, partialValReprInfoOpt, memberInfoOpt, isMutable, inlineFlag, baseOrThis, argAttribs, vis, compgen)) = PrelimValScheme2(id, NonGenericTypeScheme ty, partialValReprInfoOpt, memberInfoOpt, isMutable, inlineFlag, baseOrThis, argAttribs, vis, compgen, false) NameMap.map dontGeneralizeVal types let InferGenericArityFromTyScheme (TypeScheme(generalizedTypars, _)) partialValReprInfo = TranslatePartialArity generalizedTypars partialValReprInfo -let ComputeIsTyFunc(id: Ident, hasDeclaredTypars, arityInfo: ValReprInfo option) = - hasDeclaredTypars && - (match arityInfo with - | None -> error(Error(FSComp.SR.tcExplicitTypeParameterInvalid(), id.idRange)) - | Some info -> info.NumCurriedArgs = 0) +let ComputeIsTyFunc(id: Ident, hasDeclaredTypars, arityInfo: ValReprInfo option) = + hasDeclaredTypars && + (match arityInfo with + | None -> error(Error(FSComp.SR.tcExplicitTypeParameterInvalid(), id.idRange)) + | Some info -> info.NumCurriedArgs = 0) -let UseSyntacticArity declKind typeScheme partialValReprInfo = - if DeclKind.MustHaveArity declKind then +let UseSyntacticArity declKind typeScheme partialValReprInfo = + if DeclKind.MustHaveArity declKind then Some(InferGenericArityFromTyScheme typeScheme partialValReprInfo) - else + else None -/// Combine the results of InferSynValData and InferArityOfExpr. +/// Combine the results of InferSynValData and InferArityOfExpr. // // The F# spec says that we infer arities from declaration forms and types. // // For example -// let f (a, b) c = 1 // gets arity [2;1] +// let f (a, b) c = 1 // gets arity [2;1] // let f (a: int*int) = 1 // gets arity [2], based on type // let f () = 1 // gets arity [0] // let f = (fun (x: int) (y: int) -> 1) // gets arity [1;1] // let f = (fun (x: int*int) y -> 1) // gets arity [2;1] // // Some of this arity inference is purely syntax directed and done in InferSynValData in ast.fs -// Some is done by InferArityOfExpr. +// Some is done by InferArityOfExpr. // // However, there are some corner cases in this specification. In particular, consider // let f () () = 1 // [0;1] or [0;0]? Answer: [0;1] @@ -1637,40 +1633,40 @@ let UseSyntacticArity declKind typeScheme partialValReprInfo = // let f = (fun (a: unit) -> 1) // [0] or [1]? Answer: [1] // // The particular choice of [1] for -// let f (a: unit) = 1 -// is intended to give a disambiguating form for members that override methods taking a single argument +// let f (a: unit) = 1 +// is intended to give a disambiguating form for members that override methods taking a single argument // instantiated to type "unit", e.g. -// type Base<'a> = +// type Base<'a> = // abstract M: 'a -> unit // -// { new Base with +// { new Base with // member x.M(v: int) = () } // -// { new Base with +// { new Base with // member x.M(v: unit) = () } // -let CombineSyntacticAndInferredArities g declKind rhsExpr prelimScheme = +let CombineSyntacticAndInferredArities g declKind rhsExpr prelimScheme = let (PrelimValScheme2(_, typeScheme, partialValReprInfoOpt, memberInfoOpt, isMutable, _, _, ArgAndRetAttribs(argAttribs, retAttribs), _, _, _)) = prelimScheme match partialValReprInfoOpt, DeclKind.MustHaveArity declKind with | _, false -> None | None, true -> Some(PartialValReprInfo([], ValReprInfo.unnamedRetVal)) // Don't use any expression information for members, where syntax dictates the arity completely - | _ when memberInfoOpt.IsSome -> + | _ when memberInfoOpt.IsSome -> partialValReprInfoOpt - | Some partialValReprInfoFromSyntax, true -> + | Some partialValReprInfoFromSyntax, true -> let (PartialValReprInfo(curriedArgInfosFromSyntax, retInfoFromSyntax)) = partialValReprInfoFromSyntax - let partialArityInfo = - if isMutable then + let partialArityInfo = + if isMutable then PartialValReprInfo ([], retInfoFromSyntax) else - - let (ValReprInfo (_, curriedArgInfosFromExpression, _)) = + + let (ValReprInfo (_, curriedArgInfosFromExpression, _)) = InferArityOfExpr g AllowTypeDirectedDetupling.Yes (GeneralizedTypeForTypeScheme typeScheme) argAttribs retAttribs rhsExpr // Choose between the syntactic arity and the expression-inferred arity // If the syntax specifies an eliminated unit arg, then use that - let choose ai1 ai2 = - match ai1, ai2 with + let choose ai1 ai2 = + match ai1, ai2 with | [], _ -> [] // Dont infer eliminated unit args from the expression if they don't occur syntactically. | ai, [] -> ai @@ -1678,7 +1674,7 @@ let CombineSyntacticAndInferredArities g declKind rhsExpr prelimScheme = | _ when ai1.Length < ai2.Length -> ai2 | _ -> ai1 let rec loop ais1 ais2 = - match ais1, ais2 with + match ais1, ais2 with // If the expression infers additional arguments then use those (this shouldn't happen, since the // arity inference done on the syntactic form should give identical results) | [], ais | ais, [] -> ais @@ -1688,31 +1684,31 @@ let CombineSyntacticAndInferredArities g declKind rhsExpr prelimScheme = Some partialArityInfo -let BuildValScheme declKind partialArityInfoOpt prelimScheme = +let BuildValScheme declKind partialArityInfoOpt prelimScheme = let (PrelimValScheme2(id, typeScheme, _, memberInfoOpt, isMutable, inlineFlag, baseOrThis, _, vis, compgen, hasDeclaredTypars)) = prelimScheme - let topValInfo = - if DeclKind.MustHaveArity declKind then + let topValInfo = + if DeclKind.MustHaveArity declKind then Option.map (InferGenericArityFromTyScheme typeScheme) partialArityInfoOpt else None let isTyFunc = ComputeIsTyFunc(id, hasDeclaredTypars, topValInfo) ValScheme(id, typeScheme, topValInfo, memberInfoOpt, isMutable, inlineFlag, baseOrThis, vis, compgen, false, isTyFunc, hasDeclaredTypars) -let UseCombinedArity g declKind rhsExpr prelimScheme = - let partialArityInfoOpt = CombineSyntacticAndInferredArities g declKind rhsExpr prelimScheme +let UseCombinedArity g declKind rhsExpr prelimScheme = + let partialArityInfoOpt = CombineSyntacticAndInferredArities g declKind rhsExpr prelimScheme BuildValScheme declKind partialArityInfoOpt prelimScheme - -let UseNoArity prelimScheme = + +let UseNoArity prelimScheme = BuildValScheme ExpressionBinding None prelimScheme -/// Make and publish the Val nodes for a collection of simple (non-generic) value specifications +/// Make and publish the Val nodes for a collection of simple (non-generic) value specifications let MakeAndPublishSimpleVals cenv env names = let tyschemes = DontGeneralizeVals names let valSchemes = NameMap.map UseNoArity tyschemes let values = MakeAndPublishVals cenv env (ParentNone, false, ExpressionBinding, ValNotInRecScope, valSchemes, [], XmlDoc.Empty, None) let vspecMap = NameMap.map fst values values, vspecMap - + /// Make and publish the Val nodes for a collection of value specifications at Lambda and Match positions /// /// We merge the additions to the name resolution environment into one using a merged range so all values are brought @@ -1720,8 +1716,8 @@ let MakeAndPublishSimpleVals cenv env names = /// intercepts `NotifyNameResolution` calls being emitted by `MakeAndPublishSimpleVals` let MakeAndPublishSimpleValsForMergedScope cenv env m (names: NameMap<_>) = - let values, vspecMap = - if names.Count <= 1 then + let values, vspecMap = + if names.Count <= 1 then MakeAndPublishSimpleVals cenv env names else let nameResolutions = ResizeArray() @@ -1730,12 +1726,12 @@ let MakeAndPublishSimpleValsForMergedScope cenv env m (names: NameMap<_>) = if not m.IsSynthetic then nameResolutions.Add(pos, item, itemGroup, itemTyparInst, occurence, nenv, ad, m, replacing) - let values, vspecMap = + let values, vspecMap = let sink = { new ITypecheckResultsSink with member this.NotifyEnvWithScope(_, _, _) = () // ignore EnvWithScope reports - member this.NotifyNameResolution(pos, item, itemTyparInst, occurence, nenv, ad, m, replacing) = + member this.NotifyNameResolution(pos, item, itemTyparInst, occurence, nenv, ad, m, replacing) = notifyNameResolution (pos, item, item, itemTyparInst, occurence, nenv, ad, m, replacing) member this.NotifyMethodGroupNameResolution(pos, item, itemGroup, itemTyparInst, occurence, nenv, ad, m, replacing) = @@ -1744,17 +1740,17 @@ let MakeAndPublishSimpleValsForMergedScope cenv env m (names: NameMap<_>) = member this.NotifyExprHasType(_, _, _, _) = assert false // no expr typings in MakeAndPublishSimpleVals member this.NotifyFormatSpecifierLocation(_, _) = () member this.NotifyOpenDeclaration(_) = () - member this.CurrentSourceText = None - member this.FormatStringCheckContext = None } + member this.CurrentSourceText = None + member this.FormatStringCheckContext = None } use _h = WithNewTypecheckResultsSink(sink, cenv.tcSink) MakeAndPublishSimpleVals cenv env names - - if nameResolutions.Count <> 0 then + + if nameResolutions.Count <> 0 then let (_, _, _, _, _, _, ad, m1, _replacing) = nameResolutions.[0] // mergedNameEnv - name resolution env that contains all names // mergedRange - union of ranges of names - let mergedNameEnv, mergedRange = + let mergedNameEnv, mergedRange = ((env.NameEnv, m1), nameResolutions) ||> Seq.fold (fun (nenv, merged) (_, item, _, _, _, _, _, m, _) -> // MakeAndPublishVal creates only Item.Value let item = match item with Item.Value item -> item | _ -> failwith "impossible" @@ -1768,111 +1764,111 @@ let MakeAndPublishSimpleValsForMergedScope cenv env m (names: NameMap<_>) = values, vspecMap - let envinner = AddLocalValMap cenv.g cenv.tcSink m vspecMap env + let envinner = AddLocalValMap cenv.tcSink m vspecMap env envinner, values, vspecMap //------------------------------------------------------------------------- // Helpers to freshen existing types and values, i.e. when a reference // to C<_> occurs then generate C for a fresh type inference variable ?ty. -//------------------------------------------------------------------------- - -let FreshenTyconRef m rigid (tcref: TyconRef) declaredTyconTypars = +//------------------------------------------------------------------------- + +let FreshenTyconRef m rigid (tcref: TyconRef) declaredTyconTypars = let tpsorig = declaredTyconTypars let tps = copyTypars tpsorig - if rigid <> TyparRigidity.Rigid then - tps |> List.iter (fun tp -> tp.SetRigidity rigid) - + if rigid <> TyparRigidity.Rigid then + tps |> List.iter (fun tp -> tp.SetRigidity rigid) + let renaming, tinst = FixupNewTypars m [] [] tpsorig tps (TType_app(tcref, List.map mkTyparTy tpsorig), tps, renaming, TType_app(tcref, tinst)) - -let FreshenPossibleForallTy g m rigid ty = + +let FreshenPossibleForallTy g m rigid ty = let tpsorig, tau = tryDestForallTy g ty - if isNil tpsorig then + if isNil tpsorig then [], [], [], tau else - // tps may be have been equated to other tps in equi-recursive type inference and units-of-measure type inference. Normalize them here + // tps may be have been equated to other tps in equi-recursive type inference and units-of-measure type inference. Normalize them here let tpsorig = NormalizeDeclaredTyparsForEquiRecursiveInference g tpsorig let tps, renaming, tinst = CopyAndFixupTypars m rigid tpsorig tpsorig, tps, tinst, instType renaming tau -let FreshenTyconRef2 m (tcref: TyconRef) = +let FreshenTyconRef2 m (tcref: TyconRef) = let tps, renaming, tinst = FreshenTypeInst m (tcref.Typars m) tps, renaming, tinst, TType_app (tcref, tinst) -/// Given a abstract method, which may be a generic method, freshen the type in preparation -/// to apply it as a constraint to the method that implements the abstract slot -let FreshenAbstractSlot g amap m synTyparDecls absMethInfo = - - // Work out if an explicit instantiation has been given. If so then the explicit type - // parameters will be made rigid and checked for generalization. If not then auto-generalize - // by making the copy of the type parameters on the virtual being overridden rigid. +/// Given a abstract method, which may be a generic method, freshen the type in preparation +/// to apply it as a constraint to the method that implements the abstract slot +let FreshenAbstractSlot g amap m synTyparDecls absMethInfo = - let typarsFromAbsSlotAreRigid = + // Work out if an explicit instantiation has been given. If so then the explicit type + // parameters will be made rigid and checked for generalization. If not then auto-generalize + // by making the copy of the type parameters on the virtual being overridden rigid. - match synTyparDecls with - | ValTyparDecls(synTypars, _, infer) -> - if infer && not (isNil synTypars) then + let typarsFromAbsSlotAreRigid = + + match synTyparDecls with + | SynValTyparDecls(synTypars, infer, _) -> + if infer && not (isNil synTypars) then errorR(Error(FSComp.SR.tcOverridingMethodRequiresAllOrNoTypeParameters(), m)) isNil synTypars - + let (CompiledSig (argTys, retTy, fmtps, _)) = CompiledSigOfMeth g amap m absMethInfo - - // If the virtual method is a generic method then copy its type parameters - let typarsFromAbsSlot, typarInstFromAbsSlot, _ = - let ttps = absMethInfo.GetFormalTyparsOfDeclaringType m + + // If the virtual method is a generic method then copy its type parameters + let typarsFromAbsSlot, typarInstFromAbsSlot, _ = + let ttps = absMethInfo.GetFormalTyparsOfDeclaringType m let ttinst = argsOfAppTy g absMethInfo.ApparentEnclosingType let rigid = if typarsFromAbsSlotAreRigid then TyparRigidity.Rigid else TyparRigidity.Flexible ConstraintSolver.FreshenAndFixupTypars m rigid ttps ttinst fmtps - // Work out the required type of the member - let argTysFromAbsSlot = argTys |> List.mapSquared (instType typarInstFromAbsSlot) - let retTyFromAbsSlot = retTy |> GetFSharpViewOfReturnType g |> instType typarInstFromAbsSlot + // Work out the required type of the member + let argTysFromAbsSlot = argTys |> List.mapSquared (instType typarInstFromAbsSlot) + let retTyFromAbsSlot = retTy |> GetFSharpViewOfReturnType g |> instType typarInstFromAbsSlot typarsFromAbsSlotAreRigid, typarsFromAbsSlot, argTysFromAbsSlot, retTyFromAbsSlot //------------------------------------------------------------------------- // Helpers to typecheck expressions and patterns -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -let BuildFieldMap cenv env isPartial ty flds m = +let BuildFieldMap cenv env isPartial ty flds m = let ad = env.eAccessRights if isNil flds then invalidArg "flds" "BuildFieldMap" let fldCount = flds.Length - - let frefSets = + + let frefSets = let allFields = flds |> List.map (fun ((_, ident), _) -> ident) - flds + flds |> List.map (fun (fld, fldExpr) -> let frefSet = ResolveField cenv.tcSink cenv.nameResolver env.eNameResEnv ad ty fld allFields fld, frefSet, fldExpr) - let relevantTypeSets = + let relevantTypeSets = frefSets |> List.map (fun (_, frefSet, _) -> frefSet |> List.map (fun (FieldResolution(rfinfo, _)) -> rfinfo.TypeInst, rfinfo.TyconRef)) - - let tinst, tcref = + + let tinst, tcref = match List.fold (ListSet.intersect (fun (_, tcref1) (_, tcref2) -> tyconRefEq cenv.g tcref1 tcref2)) (List.head relevantTypeSets) (List.tail relevantTypeSets) with | [tinst, tcref] -> tinst, tcref - | tcrefs -> - if isPartial then + | tcrefs -> + if isPartial then warning (Error(FSComp.SR.tcFieldsDoNotDetermineUniqueRecordType(), m)) // try finding a record type with the same number of fields as the ones that are given. match tcrefs |> List.tryFind (fun (_, tc) -> tc.TrueFieldsAsList.Length = fldCount) with - | Some (tinst, tcref) -> tinst, tcref - | _ -> - // OK, there isn't a unique, good type dictated by the intersection for the field refs. - // We're going to get an error of some kind below. - // Just choose one field ref and let the error come later + | Some (tinst, tcref) -> tinst, tcref + | _ -> + // OK, there isn't a unique, good type dictated by the intersection for the field refs. + // We're going to get an error of some kind below. + // Just choose one field ref and let the error come later let (_, frefSet1, _) = List.head frefSets let (FieldResolution(rfinfo1, _)) = List.head frefSet1 rfinfo1.TypeInst, rfinfo1.TyconRef - - let fldsmap, rfldsList = - ((Map.empty, []), frefSets) ||> List.fold (fun (fs, rfldsList) (fld, frefs, fldExpr) -> + + let fldsmap, rfldsList = + ((Map.empty, []), frefSets) ||> List.fold (fun (fs, rfldsList) (fld, frefs, fldExpr) -> match frefs |> List.filter (fun (FieldResolution(rfinfo2, _)) -> tyconRefEq cenv.g tcref rfinfo2.TyconRef) with - | [FieldResolution(rfinfo2, showDeprecated)] -> + | [FieldResolution(rfinfo2, showDeprecated)] -> // Record the precise resolution of the field for intellisense let item = Item.RecdField(rfinfo2) @@ -1881,12 +1877,12 @@ let BuildFieldMap cenv env isPartial ty flds m = let fref2 = rfinfo2.RecdFieldRef CheckRecdFieldAccessible cenv.amap m env.eAccessRights fref2 |> ignore CheckFSharpAttributes cenv.g fref2.PropertyAttribs m |> CommitOperationResult - if Map.containsKey fref2.FieldName fs then + if Map.containsKey fref2.FieldName fs then errorR (Error(FSComp.SR.tcFieldAppearsTwiceInRecord(fref2.FieldName), m)) if showDeprecated then warning(Deprecated(FSComp.SR.nrRecordTypeNeedsQualifiedAccess(fref2.FieldName, fref2.Tycon.DisplayName) |> snd, m)) - - if not (tyconRefEq cenv.g tcref fref2.TyconRef) then + + if not (tyconRefEq cenv.g tcref fref2.TyconRef) then let (_, frefSet1, _) = List.head frefSets let (FieldResolution(rfinfo1, _)) = List.head frefSet1 errorR (FieldsFromDifferentTypes(env.DisplayEnv, rfinfo1.RecdFieldRef, fref2, m)) @@ -1899,8 +1895,8 @@ let BuildFieldMap cenv env isPartial ty flds m = let rec ApplyUnionCaseOrExn (makerForUnionCase, makerForExnTag) m cenv env overallTy item = let ad = env.eAccessRights - match item with - | Item.ExnCase ecref -> + match item with + | Item.ExnCase ecref -> CheckEntityAttributes cenv.g ecref m |> CommitOperationResult UnifyTypes cenv env m overallTy cenv.g.exn_ty CheckTyconAccessible cenv.amap m ad ecref |> ignore @@ -1910,23 +1906,23 @@ let rec ApplyUnionCaseOrExn (makerForUnionCase, makerForExnTag) m cenv env overa | Item.UnionCase(ucinfo, showDeprecated) -> if showDeprecated then warning(Deprecated(FSComp.SR.nrUnionTypeNeedsQualifiedAccess(ucinfo.Name, ucinfo.Tycon.DisplayName) |> snd, m)) - - let ucref = ucinfo.UnionCaseRef + + let ucref = ucinfo.UnionCaseRef CheckUnionCaseAttributes cenv.g ucref m |> CommitOperationResult CheckUnionCaseAccessible cenv.amap m ad ucref |> ignore - let gtyp2 = actualResultTyOfUnionCase ucinfo.TypeInst ucref + let gtyp2 = actualResultTyOfUnionCase ucinfo.TypeInst ucref let inst = mkTyparInst ucref.TyconRef.TyparsNoRange ucinfo.TypeInst UnifyTypes cenv env m overallTy gtyp2 let mkf = makerForUnionCase(ucref, ucinfo.TypeInst) mkf, actualTysOfUnionCaseFields inst ucref, [ for f in ucref.AllFieldsAsList -> f.Id ] | _ -> invalidArg "item" "not a union case or exception reference" -let ApplyUnionCaseOrExnTypes m cenv env overallTy c = - ApplyUnionCaseOrExn ((fun (a, b) mArgs args -> mkUnionCaseExpr(a, b, args, unionRanges m mArgs)), +let ApplyUnionCaseOrExnTypes m cenv env overallTy c = + ApplyUnionCaseOrExn ((fun (a, b) mArgs args -> mkUnionCaseExpr(a, b, args, unionRanges m mArgs)), (fun a mArgs args -> mkExnExpr (a, args, unionRanges m mArgs))) m cenv env overallTy c - -let ApplyUnionCaseOrExnTypesForPat m cenv env overallTy c = - ApplyUnionCaseOrExn ((fun (a, b) mArgs args -> TPat_unioncase(a, b, args, unionRanges m mArgs)), + +let ApplyUnionCaseOrExnTypesForPat m cenv env overallTy c = + ApplyUnionCaseOrExn ((fun (a, b) mArgs args -> TPat_unioncase(a, b, args, unionRanges m mArgs)), (fun a mArgs args -> TPat_exnconstr(a, args, unionRanges m mArgs))) m cenv env overallTy c let UnionCaseOrExnCheck (env: TcEnv) numArgTys numArgs m = @@ -1934,7 +1930,7 @@ let UnionCaseOrExnCheck (env: TcEnv) numArgTys numArgs m = let TcUnionCaseOrExnField cenv (env: TcEnv) ty1 m c n funcs = let ad = env.eAccessRights - let mkf, argTys, _argNames = + let mkf, argTys, _argNames = match ResolvePatternLongIdent cenv.tcSink cenv.nameResolver AllIdsOK false m ad env.eNameResEnv TypeNameResolutionInfo.Default c with | (Item.UnionCase _ | Item.ExnCase _) as item -> ApplyUnionCaseOrExn funcs m cenv env ty1 item @@ -1947,16 +1943,16 @@ let TcUnionCaseOrExnField cenv (env: TcEnv) ty1 m c n funcs = //------------------------------------------------------------------------- // Helpers for generalizing type variables -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -type GeneralizeConstrainedTyparOptions = - | CanGeneralizeConstrainedTypars +type GeneralizeConstrainedTyparOptions = + | CanGeneralizeConstrainedTypars | DoNotGeneralizeConstrainedTypars -module GeneralizationHelpers = - let ComputeUngeneralizableTypars env = - +module GeneralizationHelpers = + let ComputeUngeneralizableTypars env = + let acc = Collections.Generic.List() for item in env.eUngeneralizableItems do if not item.WillNeverHaveFreeTypars then @@ -1964,49 +1960,49 @@ module GeneralizationHelpers = if not ftps.IsEmpty then for ftp in ftps do acc.Add ftp - + Zset.Create(typarOrder, acc) - let ComputeUnabstractableTycons env = - let accInFreeItem acc (item: UngeneralizableItem) = - let ftycs = - if item.WillNeverHaveFreeTypars then item.CachedFreeLocalTycons else + let ComputeUnabstractableTycons env = + let accInFreeItem acc (item: UngeneralizableItem) = + let ftycs = + if item.WillNeverHaveFreeTypars then item.CachedFreeLocalTycons else let ftyvs = item.GetFreeTyvars() ftyvs.FreeTycons if ftycs.IsEmpty then acc else unionFreeTycons ftycs acc - List.fold accInFreeItem emptyFreeTycons env.eUngeneralizableItems + List.fold accInFreeItem emptyFreeTycons env.eUngeneralizableItems - let ComputeUnabstractableTraitSolutions env = - let accInFreeItem acc (item: UngeneralizableItem) = - let ftycs = - if item.WillNeverHaveFreeTypars then item.CachedFreeTraitSolutions else + let ComputeUnabstractableTraitSolutions env = + let accInFreeItem acc (item: UngeneralizableItem) = + let ftycs = + if item.WillNeverHaveFreeTypars then item.CachedFreeTraitSolutions else let ftyvs = item.GetFreeTyvars() ftyvs.FreeTraitSolutions if ftycs.IsEmpty then acc else unionFreeLocals ftycs acc - List.fold accInFreeItem emptyFreeLocals env.eUngeneralizableItems + List.fold accInFreeItem emptyFreeLocals env.eUngeneralizableItems - let rec IsGeneralizableValue g t = - match t with + let rec IsGeneralizableValue g t = + match t with | Expr.Lambda _ | Expr.TyLambda _ | Expr.Const _ -> true // let f(x: byref) = let v = &x in ... shouldn't generalize "v" - | Expr.Val (vref, _, m) -> not (isByrefLikeTy g m vref.Type) + | Expr.Val (vref, _, m) -> not (isByrefLikeTy g m vref.Type) - // Look through coercion nodes corresponding to introduction of subsumption - | Expr.Op (TOp.Coerce, [inputTy;actualTy], [e1], _) when isFunTy g actualTy && isFunTy g inputTy -> + // Look through coercion nodes corresponding to introduction of subsumption + | Expr.Op (TOp.Coerce, [inputTy;actualTy], [e1], _) when isFunTy g actualTy && isFunTy g inputTy -> IsGeneralizableValue g e1 | Expr.Op (op, _, args, _) -> - let canGeneralizeOp = - match op with + let canGeneralizeOp = + match op with | TOp.Tuple _ -> true | TOp.UnionCase uc -> not (isUnionCaseRefDefinitelyMutable uc) - | TOp.Recd (ctorInfo, tcref) -> - match ctorInfo with + | TOp.Recd (ctorInfo, tcref) -> + match ctorInfo with | RecdExpr -> not (isRecdOrUnionOrStructTyconRefDefinitelyMutable tcref) | RecdExprIsObjInit -> false | TOp.Array -> isNil args @@ -2021,60 +2017,60 @@ module GeneralizationHelpers = binds |> List.forall (fun b -> IsGeneralizableValue g b.Expr) && IsGeneralizableValue g body - | Expr.Let (bind, body, _, _) -> + | Expr.Let (bind, body, _, _) -> not bind.Var.IsMutable && IsGeneralizableValue g bind.Expr && IsGeneralizableValue g body - // Applications of type functions are _not_ normally generalizable unless explicitly marked so - | Expr.App (Expr.Val (vref, _, _), _, _, [], _) when vref.IsTypeFunction -> + // Applications of type functions are _not_ normally generalizable unless explicitly marked so + | Expr.App (Expr.Val (vref, _, _), _, _, [], _) when vref.IsTypeFunction -> HasFSharpAttribute g g.attrib_GeneralizableValueAttribute vref.Attribs - + | Expr.App (e1, _, _, [], _) -> IsGeneralizableValue g e1 | Expr.TyChoose (_, b, _) -> IsGeneralizableValue g b | Expr.Obj (_, ty, _, _, _, _, _) -> isInterfaceTy g ty || isDelegateTy g ty | Expr.Link eref -> IsGeneralizableValue g !eref - | _ -> false + | _ -> false - let CanGeneralizeConstrainedTyparsForDecl declKind = - if DeclKind.CanGeneralizeConstrainedTypars declKind - then CanGeneralizeConstrainedTypars + let CanGeneralizeConstrainedTyparsForDecl declKind = + if DeclKind.CanGeneralizeConstrainedTypars declKind + then CanGeneralizeConstrainedTypars else DoNotGeneralizeConstrainedTypars - - /// Recursively knock out typars we can't generalize. - /// For non-generalized type variables be careful to iteratively knock out + + /// Recursively knock out typars we can't generalize. + /// For non-generalized type variables be careful to iteratively knock out /// both the typars and any typars free in the constraints of the typars - /// into the set that are considered free in the environment. - let rec TrimUngeneralizableTypars genConstrainedTyparFlag inlineFlag (generalizedTypars: Typar list) freeInEnv = - // Do not generalize type variables with a static requirement unless function is marked 'inline' - let generalizedTypars, ungeneralizableTypars1 = + /// into the set that are considered free in the environment. + let rec TrimUngeneralizableTypars genConstrainedTyparFlag inlineFlag (generalizedTypars: Typar list) freeInEnv = + // Do not generalize type variables with a static requirement unless function is marked 'inline' + let generalizedTypars, ungeneralizableTypars1 = if inlineFlag = ValInline.PseudoVal then generalizedTypars, [] - else generalizedTypars |> List.partition (fun tp -> tp.StaticReq = TyparStaticReq.None) + else generalizedTypars |> List.partition (fun tp -> tp.StaticReq = NoStaticReq) - // Do not generalize type variables which would escape their scope - // because they are free in the environment - let generalizedTypars, ungeneralizableTypars2 = + // Do not generalize type variables which would escape their scope + // because they are free in the environment + let generalizedTypars, ungeneralizableTypars2 = List.partition (fun x -> not (Zset.contains x freeInEnv)) generalizedTypars - // Some situations, e.g. implicit class constructions that represent functions as fields, + // Some situations, e.g. implicit class constructions that represent functions as fields, // do not allow generalisation over constrained typars. (since they can not be represented as fields) // // Don't generalize IsCompatFlex type parameters to avoid changing inferred types. - let generalizedTypars, ungeneralizableTypars3 = - generalizedTypars - |> List.partition (fun tp -> + let generalizedTypars, ungeneralizableTypars3 = + generalizedTypars + |> List.partition (fun tp -> (genConstrainedTyparFlag = CanGeneralizeConstrainedTypars || tp.Constraints.IsEmpty) && - not tp.IsCompatFlex) + not tp.IsCompatFlex) if isNil ungeneralizableTypars1 && isNil ungeneralizableTypars2 && isNil ungeneralizableTypars3 then generalizedTypars, freeInEnv - else - let freeInEnv = - unionFreeTypars - (accFreeInTypars CollectAllNoCaching ungeneralizableTypars1 - (accFreeInTypars CollectAllNoCaching ungeneralizableTypars2 - (accFreeInTypars CollectAllNoCaching ungeneralizableTypars3 emptyFreeTyvars))).FreeTypars + else + let freeInEnv = + unionFreeTypars + (accFreeInTypars CollectAllNoCaching ungeneralizableTypars1 + (accFreeInTypars CollectAllNoCaching ungeneralizableTypars2 + (accFreeInTypars CollectAllNoCaching ungeneralizableTypars3 emptyFreeTyvars))).FreeTypars freeInEnv TrimUngeneralizableTypars genConstrainedTyparFlag inlineFlag generalizedTypars freeInEnv @@ -2090,32 +2086,32 @@ module GeneralizationHelpers = let returnTypeFreeTypars = freeInTypeLeftToRight cenv.g false retTy let allUntupledArgTysWithFreeVars = allUntupledArgTys |> List.map (fun ty -> (ty, freeInTypeLeftToRight cenv.g false ty)) - let relevantUniqueSubtypeConstraint (tp: Typar) = + let relevantUniqueSubtypeConstraint (tp: Typar) = // Find a single subtype constraint - match tp.Constraints |> List.partition (function (TyparConstraint.CoercesTo _) -> true | _ -> false) with - | [TyparConstraint.CoercesTo(cxty, _)], others -> - // Throw away null constraints if they are implied - if others |> List.exists (function (TyparConstraint.SupportsNull(_)) -> not (TypeSatisfiesNullConstraint cenv.g m cxty) | _ -> true) + match tp.Constraints |> List.partition (function (TyparConstraint.CoercesTo _) -> true | _ -> false) with + | [TyparConstraint.CoercesTo(cxty, _)], others -> + // Throw away null constraints if they are implied + if others |> List.exists (function (TyparConstraint.SupportsNull(_)) -> not (TypeSatisfiesNullConstraint cenv.g m cxty) | _ -> true) then None else Some cxty | _ -> None - + // Condensation typars can't be used in the constraints of any candidate condensation typars. So compute all the // typars free in the constraints of tyIJ - let lhsConstraintTypars = - allUntupledArgTys |> List.collect (fun ty -> + let lhsConstraintTypars = + allUntupledArgTys |> List.collect (fun ty -> match tryDestTyparTy cenv.g ty with | ValueSome tp -> - match relevantUniqueSubtypeConstraint tp with + match relevantUniqueSubtypeConstraint tp with | Some cxty -> freeInTypeLeftToRight cenv.g false cxty | None -> [] | _ -> []) - let IsCondensationTypar (tp: Typar) = + let IsCondensationTypar (tp: Typar) = // A condensation typar may not a user-generated type variable nor has it been unified with any user type variable - (tp.DynamicReq = TyparDynamicReq.No) && + (tp.DynamicReq = TyparDynamicReq.No) && // A condensation typar must have a single constraint "'a :> A" (Option.isSome (relevantUniqueSubtypeConstraint tp)) && // This is type variable is not used on the r.h.s. of the type @@ -2126,11 +2122,11 @@ module GeneralizationHelpers = (match allUntupledArgTysWithFreeVars |> List.partition (fun (ty, _) -> match tryDestTyparTy cenv.g ty with ValueSome destTypar -> typarEq destTypar tp | _ -> false) with | [_], rest -> not (rest |> List.exists (fun (_, fvs) -> ListSet.contains typarEq tp fvs)) | _ -> false) - + let condensationTypars, generalizedTypars = generalizedTypars |> List.partition IsCondensationTypar - // Condensation solves type variables eagerly and removes them from the generalization set - condensationTypars |> List.iter (fun tp -> + // Condensation solves type variables eagerly and removes them from the generalization set + condensationTypars |> List.iter (fun tp -> ConstraintSolver.ChooseTyparSolutionAndSolve cenv.css denv tp) generalizedTypars @@ -2148,97 +2144,97 @@ module GeneralizationHelpers = resultFirst) = let allDeclaredTypars = NormalizeDeclaredTyparsForEquiRecursiveInference cenv.g allDeclaredTypars - let typarsToAttemptToGeneralize = - if (match exprOpt with None -> true | Some e -> IsGeneralizableValue cenv.g e) + let typarsToAttemptToGeneralize = + if (match exprOpt with None -> true | Some e -> IsGeneralizableValue cenv.g e) then (ListSet.unionFavourLeft typarEq allDeclaredTypars maxInferredTypars) else allDeclaredTypars - let generalizedTypars, freeInEnv = + let generalizedTypars, freeInEnv = TrimUngeneralizableTypars genConstrainedTyparFlag inlineFlag typarsToAttemptToGeneralize freeInEnv - allDeclaredTypars - |> List.iter (fun tp -> + allDeclaredTypars + |> List.iter (fun tp -> if Zset.memberOf freeInEnv tp then let ty = mkTyparTy tp error(Error(FSComp.SR.tcNotSufficientlyGenericBecauseOfScope(NicePrint.prettyStringOfTy denv ty), m))) + + let generalizedTypars = CondenseTypars(cenv, denv, generalizedTypars, tauTy, m) - let generalizedTypars = CondenseTypars(cenv, denv, generalizedTypars, tauTy, m) - - let generalizedTypars = - if canInferTypars then generalizedTypars + let generalizedTypars = + if canInferTypars then generalizedTypars else generalizedTypars |> List.filter (fun tp -> ListSet.contains typarEq tp allDeclaredTypars) - let allConstraints = List.collect (fun (tp: Typar) -> tp.Constraints) generalizedTypars + let allConstraints = List.collect (fun (tp: Typar) -> tp.Constraints) generalizedTypars let generalizedTypars = ConstraintSolver.SimplifyMeasuresInTypeScheme cenv.g resultFirst generalizedTypars tauTy allConstraints - // Generalization turns inference type variables into rigid, quantified type variables, + // Generalization turns inference type variables into rigid, quantified type variables, // (they may be rigid already) generalizedTypars |> List.iter (SetTyparRigid denv m) - + // Generalization removes constraints related to generalized type variables EliminateConstraintsForGeneralizedTypars denv cenv.css m NoTrace generalizedTypars - + generalizedTypars //------------------------------------------------------------------------- // Helpers to freshen existing types and values, i.e. when a reference // to C<_> occurs then generate C for a fresh type inference variable ?ty. - //------------------------------------------------------------------------- + //------------------------------------------------------------------------- - let CheckDeclaredTyparsPermitted (memFlagsOpt: SynMemberFlags option, declaredTypars, m) = - match memFlagsOpt with + let CheckDeclaredTyparsPermitted (memFlagsOpt, declaredTypars, m) = + match memFlagsOpt with | None -> () - | Some memberFlags -> - match memberFlags.MemberKind with - // can't infer extra polymorphism for properties - | SynMemberKind.PropertyGet - | SynMemberKind.PropertySet -> - if not (isNil declaredTypars) then + | Some memberFlags -> + match memberFlags.MemberKind with + // can't infer extra polymorphism for properties + | MemberKind.PropertyGet + | MemberKind.PropertySet -> + if not (isNil declaredTypars) then errorR(Error(FSComp.SR.tcPropertyRequiresExplicitTypeParameters(), m)) - | SynMemberKind.Constructor -> - if not (isNil declaredTypars) then + | MemberKind.Constructor -> + if not (isNil declaredTypars) then errorR(Error(FSComp.SR.tcConstructorCannotHaveTypeParameters(), m)) | _ -> () - /// Properties and Constructors may only generalize the variables associated with the containing class (retrieved from the 'this' pointer) - /// Also check they don't declare explicit typars. - let ComputeCanInferExtraGeneralizableTypars (parentRef, canInferTypars, memFlagsOpt: SynMemberFlags option) = + /// Properties and Constructors may only generalize the variables associated with the containing class (retrieved from the 'this' pointer) + /// Also check they don't declare explicit typars. + let ComputeCanInferExtraGeneralizableTypars (parentRef, canInferTypars, memFlagsOpt) = canInferTypars && - (match memFlagsOpt with + (match memFlagsOpt with | None -> true - | Some memberFlags -> - match memberFlags.MemberKind with - // can't infer extra polymorphism for properties - | SynMemberKind.PropertyGet | SynMemberKind.PropertySet -> false - // can't infer extra polymorphism for class constructors - | SynMemberKind.ClassConstructor -> false - // can't infer extra polymorphism for constructors - | SynMemberKind.Constructor -> false - // feasible to infer extra polymorphism + | Some memberFlags -> + match memberFlags.MemberKind with + // can't infer extra polymorphism for properties + | MemberKind.PropertyGet | MemberKind.PropertySet -> false + // can't infer extra polymorphism for class constructors + | MemberKind.ClassConstructor -> false + // can't infer extra polymorphism for constructors + | MemberKind.Constructor -> false + // feasible to infer extra polymorphism | _ -> true) && - (match parentRef with - | Parent tcref -> not tcref.IsFSharpDelegateTycon + (match parentRef with + | Parent tcref -> not tcref.IsFSharpDelegateTycon | _ -> true) // no generic parameters inferred for 'Invoke' method - + //------------------------------------------------------------------------- -// ComputeInlineFlag +// ComputeInlineFlag //------------------------------------------------------------------------- -let ComputeInlineFlag (memFlagsOption: SynMemberFlags option) isInline isMutable m = - let inlineFlag = - // Mutable values may never be inlined - // Constructors may never be inlined - // Calls to virtual/abstract slots may never be inlined - if isMutable || - (match memFlagsOption with +let ComputeInlineFlag memFlagsOption isInline isMutable m = + let inlineFlag = + // Mutable values may never be inlined + // Constructors may never be inlined + // Calls to virtual/abstract slots may never be inlined + if isMutable || + (match memFlagsOption with | None -> false - | Some x -> (x.MemberKind = SynMemberKind.Constructor) || x.IsDispatchSlot || x.IsOverrideOrExplicitImpl) - then ValInline.Never - elif isInline then ValInline.PseudoVal + | Some x -> (x.MemberKind = MemberKind.Constructor) || x.IsDispatchSlot || x.IsOverrideOrExplicitImpl) + then ValInline.Never + elif isInline then ValInline.PseudoVal else ValInline.Optional - if isInline && (inlineFlag <> ValInline.PseudoVal) then + if isInline && (inlineFlag <> ValInline.PseudoVal) then errorR(Error(FSComp.SR.tcThisValueMayNotBeInlined(), m)) inlineFlag @@ -2250,192 +2246,185 @@ let ComputeInlineFlag (memFlagsOption: SynMemberFlags option) isInline isMutable // member, normal function, static member etc.) and make some // name-resolution-sensitive adjustments to the syntax tree. // -// One part of this "normalization" ensures: -// "let SynPat.LongIdent(f) = e" when f not a datatype constructor --> let Pat_var(f) = e" -// "let SynPat.LongIdent(f) pat = e" when f not a datatype constructor --> let Pat_var(f) = \pat. e" -// "let (SynPat.LongIdent(f) : ty) = e" when f not a datatype constructor --> let (Pat_var(f) : ty) = e" -// "let (SynPat.LongIdent(f) : ty) pat = e" when f not a datatype constructor --> let (Pat_var(f) : ty) = \pat. e" -// -// This is because the first lambda in a function definition "let F x = e" -// now looks like a constructor application, i.e. let (F x) = e ... -// also let A.F x = e ... -// also let f x = e ... +// One part of this "normalization" ensures: +// "let SynPat.LongIdent(f) = e" when f not a datatype constructor --> let Pat_var(f) = e" +// "let SynPat.LongIdent(f) pat = e" when f not a datatype constructor --> let Pat_var(f) = \pat. e" +// "let (SynPat.LongIdent(f) : ty) = e" when f not a datatype constructor --> let (Pat_var(f) : ty) = e" +// "let (SynPat.LongIdent(f) : ty) pat = e" when f not a datatype constructor --> let (Pat_var(f) : ty) = \pat. e" +// +// This is because the first lambda in a function definition "let F x = e" +// now looks like a constructor application, i.e. let (F x) = e ... +// also let A.F x = e ... +// also let f x = e ... // // The other parts turn property definitions into method definitions. -//------------------------------------------------------------------------- - +//------------------------------------------------------------------------- + // NormalizedBindingRhs records the r.h.s. of a binding after some munging just before type checking. -// NOTE: This is a bit of a mess. In the early implementation of F# we decided -// to have the parser convert "let f x = e" into -// "let f = fun x -> e". This is called "pushing" a pattern across to the right hand side. Complex -// patterns (e.g. non-tuple patterns) result in a computation on the right. -// However, this approach really isn't that great - especially since -// the language is now considerably more complex, e.g. we use -// type information from the first (but not the second) form in -// type inference for recursive bindings, and the first form -// may specify .NET attributes for arguments. There are still many -// relics of this approach around, e.g. the expression in BindingRhs -// below is of the second form. However, to extract relevant information -// we keep a record of the pats and optional explicit return type already pushed -// into expression so we can use any user-given type information from these -type NormalizedBindingRhs = +// NOTE: This is a bit of a mess. In the early implementation of F# we decided +// to have the parser convert "let f x = e" into +// "let f = fun x -> e". This is called "pushing" a pattern across to the right hand side. Complex +// patterns (e.g. non-tuple patterns) result in a computation on the right. +// However, this approach really isn't that great - especially since +// the language is now considerably more complex, e.g. we use +// type information from the first (but not the second) form in +// type inference for recursive bindings, and the first form +// may specify .NET attributes for arguments. There are still many +// relics of this approach around, e.g. the expression in BindingRhs +// below is of the second form. However, to extract relevant information +// we keep a record of the pats and optional explicit return type already pushed +// into expression so we can use any user-given type information from these +type NormalizedBindingRhs = | NormalizedBindingRhs of simplePats: SynSimplePats list * returnTyOpt: SynBindingReturnInfo option * - rhsExpr: SynExpr + rhsExpr: SynExpr -let PushOnePatternToRhs (cenv: cenv) isMember p (NormalizedBindingRhs(spatsL, rtyOpt, rhsExpr)) = +let PushOnePatternToRhs (cenv: cenv) isMember p (NormalizedBindingRhs(spatsL, rtyOpt, rhsExpr)) = let spats, rhsExpr = PushPatternToExpr cenv.synArgNameGenerator isMember p rhsExpr NormalizedBindingRhs(spats :: spatsL, rtyOpt, rhsExpr) -type NormalizedBindingPatternInfo = - NormalizedBindingPat of SynPat * NormalizedBindingRhs * SynValData * SynValTyparDecls +type NormalizedBindingPatternInfo = + NormalizedBindingPat of SynPat * NormalizedBindingRhs * SynValData * SynValTyparDecls /// Represents a syntactic, unchecked binding after the resolution of the name resolution status of pattern /// constructors and after "pushing" all complex patterns to the right hand side. -type NormalizedBinding = - | NormalizedBinding of +type NormalizedBinding = + | NormalizedBinding of visibility: SynAccess option * kind: SynBindingKind * mustInline: bool * isMutable: bool * - attribs: SynAttribute list * + attribs: SynAttribute list * xmlDoc: XmlDoc * - typars: SynValTyparDecls * - valSynData: SynValData * - pat: SynPat * + typars: SynValTyparDecls * + valSynData: SynValData * + pat: SynPat * rhsExpr: NormalizedBindingRhs * mBinding: range * - spBinding: DebugPointAtBinding + spBinding: DebugPointForBinding -type IsObjExprBinding = - | ObjExprBinding +type IsObjExprBinding = + | ObjExprBinding | ValOrMemberBinding module BindingNormalization = - /// Push a bunch of pats at once. They may contain patterns, e.g. let f (A x) (B y) = ... - /// In this case the semantics is let f a b = let A x = a in let B y = b - let private PushMultiplePatternsToRhs (cenv: cenv) isMember ps (NormalizedBindingRhs(spatsL, rtyOpt, rhsExpr)) = + /// Push a bunch of pats at once. They may contain patterns, e.g. let f (A x) (B y) = ... + /// In this case the semantics is let f a b = let A x = a in let B y = b + let private PushMultiplePatternsToRhs (cenv: cenv) isMember ps (NormalizedBindingRhs(spatsL, rtyOpt, rhsExpr)) = let spatsL2, rhsExpr = PushCurriedPatternsToExpr cenv.synArgNameGenerator rhsExpr.Range isMember ps rhsExpr NormalizedBindingRhs(spatsL2@spatsL, rtyOpt, rhsExpr) - let private MakeNormalizedStaticOrValBinding cenv isObjExprBinding id vis typars args rhsExpr valSynData = - let (SynValData(memberFlagsOpt, _, _)) = valSynData + let private MakeNormalizedStaticOrValBinding cenv isObjExprBinding id vis typars args rhsExpr valSynData = + let (SynValData(memberFlagsOpt, _, _)) = valSynData NormalizedBindingPat(mkSynPatVar vis id, PushMultiplePatternsToRhs cenv ((isObjExprBinding = ObjExprBinding) || Option.isSome memberFlagsOpt) args rhsExpr, valSynData, typars) - let private MakeNormalizedInstanceMemberBinding cenv thisId memberId toolId vis m typars args rhsExpr valSynData = + let private MakeNormalizedInstanceMemberBinding cenv thisId memberId toolId vis m typars args rhsExpr valSynData = NormalizedBindingPat(SynPat.InstanceMember(thisId, memberId, toolId, vis, m), PushMultiplePatternsToRhs cenv true args rhsExpr, valSynData, typars) - let private NormalizeStaticMemberBinding cenv (memberFlags: SynMemberFlags) valSynData id vis typars args m rhsExpr = - let (SynValData(_, valSynInfo, thisIdOpt)) = valSynData - if memberFlags.IsInstance then - // instance method without adhoc "this" argument + let private NormalizeStaticMemberBinding cenv memberFlags valSynData id vis typars args m rhsExpr = + let (SynValData(_, valSynInfo, thisIdOpt)) = valSynData + if memberFlags.IsInstance then + // instance method without adhoc "this" argument error(Error(FSComp.SR.tcInstanceMemberRequiresTarget(), m)) - match args, memberFlags.MemberKind with - | _, SynMemberKind.PropertyGetSet -> error(Error(FSComp.SR.tcUnexpectedPropertyInSyntaxTree(), m)) - | [], SynMemberKind.ClassConstructor -> error(Error(FSComp.SR.tcStaticInitializerRequiresArgument(), m)) - | [], SynMemberKind.Constructor -> error(Error(FSComp.SR.tcObjectConstructorRequiresArgument(), m)) - | [_], SynMemberKind.ClassConstructor - | [_], SynMemberKind.Constructor -> MakeNormalizedStaticOrValBinding cenv ValOrMemberBinding id vis typars args rhsExpr valSynData - // Static property declared using 'static member P = expr': transformed to a method taking a "unit" argument - // static property: these transformed into methods taking one "unit" argument - | [], SynMemberKind.Member -> - let memberFlags = {memberFlags with MemberKind = SynMemberKind.PropertyGet} + match args, memberFlags.MemberKind with + | _, MemberKind.PropertyGetSet -> error(Error(FSComp.SR.tcUnexpectedPropertyInSyntaxTree(), m)) + | [], MemberKind.ClassConstructor -> error(Error(FSComp.SR.tcStaticInitializerRequiresArgument(), m)) + | [], MemberKind.Constructor -> error(Error(FSComp.SR.tcObjectConstructorRequiresArgument(), m)) + | [_], MemberKind.ClassConstructor + | [_], MemberKind.Constructor -> MakeNormalizedStaticOrValBinding cenv ValOrMemberBinding id vis typars args rhsExpr valSynData + // Static property declared using 'static member P = expr': transformed to a method taking a "unit" argument + // static property: these transformed into methods taking one "unit" argument + | [], MemberKind.Member -> + let memberFlags = {memberFlags with MemberKind = MemberKind.PropertyGet} let valSynData = SynValData(Some memberFlags, valSynInfo, thisIdOpt) - NormalizedBindingPat(mkSynPatVar vis id, - PushOnePatternToRhs cenv true (SynPat.Const(SynConst.Unit, m)) rhsExpr, - valSynData, + NormalizedBindingPat(mkSynPatVar vis id, + PushOnePatternToRhs cenv true (SynPat.Const(SynConst.Unit, m)) rhsExpr, + valSynData, typars) | _ -> MakeNormalizedStaticOrValBinding cenv ValOrMemberBinding id vis typars args rhsExpr valSynData - let private NormalizeInstanceMemberBinding cenv (memberFlags: SynMemberFlags) valSynData thisId memberId (toolId: Ident option) vis typars args m rhsExpr = - let (SynValData(_, valSynInfo, thisIdOpt)) = valSynData - if not memberFlags.IsInstance then - // static method with adhoc "this" argument + let private NormalizeInstanceMemberBinding cenv memberFlags valSynData thisId memberId (toolId: Ident option) vis typars args m rhsExpr = + let (SynValData(_, valSynInfo, thisIdOpt)) = valSynData + if not memberFlags.IsInstance then + // static method with adhoc "this" argument error(Error(FSComp.SR.tcStaticMemberShouldNotHaveThis(), m)) - match args, memberFlags.MemberKind with - | _, SynMemberKind.ClassConstructor -> error(Error(FSComp.SR.tcExplicitStaticInitializerSyntax(), m)) - | _, SynMemberKind.Constructor -> error(Error(FSComp.SR.tcExplicitObjectConstructorSyntax(), m)) - | _, SynMemberKind.PropertyGetSet -> error(Error(FSComp.SR.tcUnexpectedPropertySpec(), m)) - // Instance property declared using 'x.Member': transformed to methods taking a "this" and a "unit" argument - // We push across the 'this' arg in mk_rec_binds - | [], SynMemberKind.Member -> - let memberFlags = {memberFlags with MemberKind = SynMemberKind.PropertyGet} + match args, memberFlags.MemberKind with + | _, MemberKind.ClassConstructor -> error(Error(FSComp.SR.tcExplicitStaticInitializerSyntax(), m)) + | _, MemberKind.Constructor -> error(Error(FSComp.SR.tcExplicitObjectConstructorSyntax(), m)) + | _, MemberKind.PropertyGetSet -> error(Error(FSComp.SR.tcUnexpectedPropertySpec(), m)) + // Instance property declared using 'x.Member': transformed to methods taking a "this" and a "unit" argument + // We push across the 'this' arg in mk_rec_binds + | [], MemberKind.Member -> + let memberFlags = {memberFlags with MemberKind = MemberKind.PropertyGet} NormalizedBindingPat - (SynPat.InstanceMember(thisId, memberId, toolId, vis, m), - PushOnePatternToRhs cenv true (SynPat.Const(SynConst.Unit, m)) rhsExpr, - // Update the member info to record that this is a SynMemberKind.PropertyGet - SynValData(Some memberFlags, valSynInfo, thisIdOpt), + (SynPat.InstanceMember(thisId, memberId, toolId, vis, m), + PushOnePatternToRhs cenv true (SynPat.Const(SynConst.Unit, m)) rhsExpr, + // Update the member info to record that this is a MemberKind.PropertyGet + SynValData(Some memberFlags, valSynInfo, thisIdOpt), typars) | _ -> MakeNormalizedInstanceMemberBinding cenv thisId memberId toolId vis m typars args rhsExpr valSynData let private NormalizeBindingPattern cenv nameResolver isObjExprBinding (env: TcEnv) valSynData pat rhsExpr = let ad = env.AccessRights - let (SynValData(memberFlagsOpt, _, _)) = valSynData - let rec normPattern pat = - // One major problem with versions of F# prior to 1.9.x was that data constructors easily 'pollute' the namespace - // of available items, to the point that you can't even define a function with the same name as an existing union case. - match pat with + let (SynValData(memberFlagsOpt, _, _)) = valSynData + let rec normPattern pat = + // One major problem with versions of F# prior to 1.9.x was that data constructors easily 'pollute' the namespace + // of available items, to the point that you can't even define a function with the same name as an existing union case. + match pat with | SynPat.FromParseError(p, _) -> normPattern p | SynPat.LongIdent (LongIdentWithDots(longId, _), toolId, tyargs, SynArgPats.Pats args, vis, m) -> let typars = match tyargs with None -> inferredTyparDecls | Some typars -> typars - match memberFlagsOpt with - | None -> + match memberFlagsOpt with + | None -> match ResolvePatternLongIdent cenv.tcSink nameResolver AllIdsOK true m ad env.NameEnv TypeNameResolutionInfo.Default longId with - | Item.NewDef id -> + | Item.NewDef id -> if id.idText = opNameCons then NormalizedBindingPat(pat, rhsExpr, valSynData, typars) else - if isObjExprBinding = ObjExprBinding then + if isObjExprBinding = ObjExprBinding then errorR(Deprecated(FSComp.SR.tcObjectExpressionFormDeprecated(), m)) MakeNormalizedStaticOrValBinding cenv isObjExprBinding id vis typars args rhsExpr valSynData - | _ -> + | _ -> error(Error(FSComp.SR.tcInvalidDeclaration(), m)) - | Some memberFlags -> - match longId with - // x.Member in member binding patterns. - | [thisId;memberId] -> NormalizeInstanceMemberBinding cenv memberFlags valSynData thisId memberId toolId vis typars args m rhsExpr - | [memberId] -> - if memberFlags.IsInstance then - // instance method without adhoc "this" argument - errorR(Error(FSComp.SR.tcInstanceMemberRequiresTarget(), memberId.idRange)) - let thisId = ident ("_", m) - NormalizeInstanceMemberBinding cenv memberFlags valSynData thisId memberId toolId vis typars args m rhsExpr - else - NormalizeStaticMemberBinding cenv memberFlags valSynData memberId vis typars args m rhsExpr + | Some memberFlags -> + match longId with + // x.Member in member binding patterns. + | [thisId;memberId] -> NormalizeInstanceMemberBinding cenv memberFlags valSynData thisId memberId toolId vis typars args m rhsExpr + | [memberId] -> NormalizeStaticMemberBinding cenv memberFlags valSynData memberId vis typars args m rhsExpr | _ -> NormalizedBindingPat(pat, rhsExpr, valSynData, typars) - // Object constructors are normalized in TcLetrec - // Here we are normalizing member definitions with simple (not long) ids, - // e.g. "static member x = 3" and "member x = 3" (instance with missing "this." comes through here. It is trapped and generates a warning) - | SynPat.Named(id, false, vis, m) - when - (match memberFlagsOpt with - | None -> false - | Some memberFlags -> - memberFlags.MemberKind <> SynMemberKind.Constructor && - memberFlags.MemberKind <> SynMemberKind.ClassConstructor) -> - NormalizeStaticMemberBinding cenv (Option.get memberFlagsOpt) valSynData id vis inferredTyparDecls [] m rhsExpr - - | SynPat.Typed(pat', x, y) -> + // Object constructors are normalized in TcLetrec + // Here we are normalizing member definitions with simple (not long) ids, + // e.g. "static member x = 3" and "member x = 3" (instance with missing "this." comes through here. It is trapped and generates a warning) + | SynPat.Named (SynPat.Wild _, id, false, vis, m) + when + (match memberFlagsOpt with + | None -> false + | Some memberFlags -> + memberFlags.MemberKind <> MemberKind.Constructor && + memberFlags.MemberKind <> MemberKind.ClassConstructor) -> + NormalizeStaticMemberBinding cenv (Option.get memberFlagsOpt) valSynData id vis inferredTyparDecls [] m rhsExpr + + | SynPat.Typed(pat', x, y) -> let (NormalizedBindingPat(pat'', e'', valSynData, typars)) = normPattern pat' NormalizedBindingPat(SynPat.Typed(pat'', x, y), e'', valSynData, typars) - | SynPat.Attrib(_, _, m) -> + | SynPat.Attrib(_, _, m) -> error(Error(FSComp.SR.tcAttributesInvalidInPatterns(), m)) | _ -> - NormalizedBindingPat(pat, rhsExpr, valSynData, inferredTyparDecls) + NormalizedBindingPat(pat, rhsExpr, valSynData, inferredTyparDecls) normPattern pat - let NormalizeBinding isObjExprBinding cenv (env: TcEnv) binding = - match binding with - | SynBinding (vis, bkind, isInline, isMutable, Attributes attrs, doc, valSynData, p, retInfo, rhsExpr, mBinding, spBind) -> - let (NormalizedBindingPat(pat, rhsExpr, valSynData, typars)) = + let NormalizeBinding isObjExprBinding cenv (env: TcEnv) binding = + match binding with + | Binding (vis, bkind, isInline, isMutable, Attributes attrs, doc, valSynData, p, retInfo, rhsExpr, mBinding, spBind) -> + let (NormalizedBindingPat(pat, rhsExpr, valSynData, typars)) = NormalizeBindingPattern cenv cenv.nameResolver isObjExprBinding env valSynData p (NormalizedBindingRhs ([], retInfo, rhsExpr)) let paramNames = Some valSynData.SynValInfo.ArgNames let doc = doc.ToXmlDoc(true, paramNames) @@ -2445,15 +2434,15 @@ module BindingNormalization = // input is: // [] // member x.P with get = fun () -> e -// --> +// --> // member x.add_P< >(argName) = (e).AddHandler(argName) // member x.remove_P< >(argName) = (e).RemoveHandler(argName) -module EventDeclarationNormalization = - let ConvertSynInfo m (SynValInfo(argInfos, retInfo)) = +module EventDeclarationNormalization = + let ConvertSynInfo m (SynValInfo(argInfos, retInfo)) = // reconstitute valSynInfo by adding the argument - let argInfos = - match argInfos with + let argInfos = + match argInfos with | [[thisArgInfo];[]] -> [[thisArgInfo];SynInfo.unnamedTopArg] // instance property getter | [[]] -> [SynInfo.unnamedTopArg] // static property getter | _ -> error(BadEventTransformation m) @@ -2462,24 +2451,24 @@ module EventDeclarationNormalization = SynValInfo(argInfos, retInfo) // The property x.P becomes methods x.add_P and x.remove_P - let ConvertMemberFlags (memberFlags: SynMemberFlags) = { memberFlags with MemberKind = SynMemberKind.Member } + let ConvertMemberFlags memberFlags = { memberFlags with MemberKind = MemberKind.Member } let private ConvertMemberFlagsOpt m memberFlagsOpt = - match memberFlagsOpt with + match memberFlagsOpt with | Some memberFlags -> Some (ConvertMemberFlags memberFlags) | _ -> error(BadEventTransformation m) let private ConvertSynData m valSynData = - let (SynValData(memberFlagsOpt, valSynInfo, thisIdOpt)) = valSynData + let (SynValData(memberFlagsOpt, valSynInfo, thisIdOpt)) = valSynData let memberFlagsOpt = ConvertMemberFlagsOpt m memberFlagsOpt let valSynInfo = ConvertSynInfo m valSynInfo SynValData(memberFlagsOpt, valSynInfo, thisIdOpt) - - let rec private RenameBindingPattern f declPattern = - match declPattern with + + let rec private RenameBindingPattern f declPattern = + match declPattern with | SynPat.FromParseError(p, _) -> RenameBindingPattern f p | SynPat.Typed(pat', _, _) -> RenameBindingPattern f pat' - | SynPat.Named (id, x2, vis2, m) -> SynPat.Named (ident(f id.idText, id.idRange), x2, vis2, m) + | SynPat.Named (SynPat.Wild m1, id, x2, vis2, m) -> SynPat.Named (SynPat.Wild m1, ident(f id.idText, id.idRange), x2, vis2, m) | SynPat.InstanceMember(thisId, id, toolId, vis2, m) -> SynPat.InstanceMember(thisId, ident(f id.idText, id.idRange), toolId, vis2, m) | _ -> error(Error(FSComp.SR.tcOnlySimplePatternsInLetRec(), declPattern.Range)) @@ -2487,108 +2476,108 @@ module EventDeclarationNormalization = /// annotated with [] let GenerateExtraBindings cenv (bindingAttribs, binding) = let (NormalizedBinding(vis1, bindingKind, isInline, isMutable, _, bindingXmlDoc, _synTyparDecls, valSynData, declPattern, bindingRhs, mBinding, spBind)) = binding - if CompileAsEvent cenv.g bindingAttribs then + if CompileAsEvent cenv.g bindingAttribs then - let MakeOne (prefix, target) = + let MakeOne (prefix, target) = let declPattern = RenameBindingPattern (fun s -> prefix + s) declPattern let argName = "handler" // modify the rhs and argument data - let bindingRhs, valSynData = + let bindingRhs, valSynData = let (NormalizedBindingRhs(_, _, rhsExpr)) = bindingRhs let m = rhsExpr.Range // reconstitute valSynInfo by adding the argument let valSynData = ConvertSynData m valSynData - match rhsExpr with + match rhsExpr with // Detect 'fun () -> e' which results from the compilation of a property getter | SynExpr.Lambda (_, _, SynSimplePats.SimplePats([], _), trueRhsExpr, _, m) -> let rhsExpr = mkSynApp1 (SynExpr.DotGet (SynExpr.Paren (trueRhsExpr, range0, None, m), range0, LongIdentWithDots([ident(target, m)], []), m)) (SynExpr.Ident (ident(argName, m))) m - + // reconstitute rhsExpr let bindingRhs = NormalizedBindingRhs([], None, rhsExpr) - // add the argument to the expression - let bindingRhs = PushOnePatternToRhs cenv true (mkSynPatVar None (ident (argName, mBinding))) bindingRhs - + // add the argument to the expression + let bindingRhs = PushOnePatternToRhs cenv true (mkSynPatVar None (ident (argName, mBinding))) bindingRhs + bindingRhs, valSynData - | _ -> + | _ -> error(BadEventTransformation m) // reconstitute the binding - NormalizedBinding(vis1, bindingKind, isInline, isMutable, [], bindingXmlDoc, noInferredTypars, valSynData, declPattern, bindingRhs, mBinding, spBind) + NormalizedBinding(vis1, bindingKind, isInline, isMutable, [], bindingXmlDoc, noInferredTypars, valSynData, declPattern, bindingRhs, mBinding, spBind) [ MakeOne ("add_", "AddHandler"); MakeOne ("remove_", "RemoveHandler") ] - else + else [] /// Make a copy of the "this" type for a generic object type, e.g. List<'T> --> List<'?> for a fresh inference variable. /// Also adjust the "this" type to take into account whether the type is a struct. -let FreshenObjectArgType cenv m rigid tcref isExtrinsic declaredTyconTypars = +let FreshenObjectArgType cenv m rigid tcref isExtrinsic declaredTyconTypars = #if EXTENDED_EXTENSION_MEMBERS // indicates if extension members can add additional constraints to type parameters let tcrefObjTy, enclosingDeclaredTypars, renaming, objTy = FreshenTyconRef m (if isExtrinsic then TyparRigidity.Flexible else rigid) tcref declaredTyconTypars #else let tcrefObjTy, enclosingDeclaredTypars, renaming, objTy = FreshenTyconRef m rigid tcref declaredTyconTypars #endif // Struct members have a byref 'this' type (unless they are extrinsic extension members) - let thisTy = - if not isExtrinsic && tcref.IsStructOrEnumTycon then - if isRecdOrStructTyReadOnly cenv.g m objTy then - mkInByrefTy cenv.g objTy + let thisTy = + if not isExtrinsic && tcref.IsStructOrEnumTycon then + if isRecdOrStructTyReadOnly cenv.g m objTy then + mkInByrefTy cenv.g objTy else - mkByrefTy cenv.g objTy - else + mkByrefTy cenv.g objTy + else objTy tcrefObjTy, enclosingDeclaredTypars, renaming, objTy, thisTy // The early generalization rule of F# 2.0 can be unsound for members in generic types (Bug DevDiv2 10649). -// It gives rise to types like "Forall T. ?X -> ?Y" where ?X and ?Y are later discovered to involve T. +// It gives rise to types like "Forall T. ?X -> ?Y" where ?X and ?Y are later discovered to involve T. // // For example: -// type C<'T>() = +// type C<'T>() = // let mutable x = Unchecked.defaultof<_> // unknown inference variable ?X -// static member A() = x +// static member A() = x // // At this point A is generalized early to "Forall T. unit -> ?X" -// static member B1() = C.A() +// static member B1() = C.A() // // At this point during type inference, the return type of C.A() is '?X' // // After type inference, the return type of C.A() is 'string' -// static member B2() = C.A() +// static member B2() = C.A() // // At this point during type inference, the return type of C.A() is '?X' // // After type inference, the return type of C.A() is 'int' // member this.C() = (x: 'T) // // At this point during type inference the type of 'x' is inferred to be 'T' // -// Here "A" is generalized too early. +// Here "A" is generalized too early. // // Ideally we would simply generalize "A" later, when it is known to be // sound. However, that can lead to other problems (e.g. some programs that typecheck today would no longer // be accepted). As a result, we deal with this unsoundness by an adhoc post-type-checking -// consistency check for recursive uses of "A" with explicit instantiations within the recursive +// consistency check for recursive uses of "A" with explicit instantiations within the recursive // scope of "A". let TcValEarlyGeneralizationConsistencyCheck cenv (env: TcEnv) (v: Val, vrec, tinst, vty, tau, m) = - match vrec with + match vrec with | ValInRecScope isComplete when isComplete && not (isNil tinst) -> //printfn "pushing post-inference check for '%s', vty = '%s'" v.DisplayName (DebugPrint.showType vty) - cenv.postInferenceChecks.Add (fun () -> + cenv.postInferenceChecks.Add (fun () -> //printfn "running post-inference check for '%s'" v.DisplayName //printfn "tau = '%s'" (DebugPrint.showType tau) //printfn "vty = '%s'" (DebugPrint.showType vty) let tpsorig, tau2 = tryDestForallTy cenv.g vty //printfn "tau2 = '%s'" (DebugPrint.showType tau2) - if not (isNil tpsorig) then + if not (isNil tpsorig) then let tpsorig = NormalizeDeclaredTyparsForEquiRecursiveInference cenv.g tpsorig let tau3 = instType (mkTyparInst tpsorig tinst) tau2 //printfn "tau3 = '%s'" (DebugPrint.showType tau3) if not (AddCxTypeEqualsTypeUndoIfFailed env.DisplayEnv cenv.css m tau tau3) then - let txt = bufs (fun buf -> NicePrint.outputQualifiedValSpec env.DisplayEnv cenv.infoReader buf (mkLocalValRef v)) + let txt = bufs (fun buf -> NicePrint.outputQualifiedValSpec env.DisplayEnv buf v) error(Error(FSComp.SR.tcInferredGenericTypeGivesRiseToInconsistency(v.DisplayName, txt), m))) | _ -> () /// TcVal. "Use" a value, normally at a fresh type instance (unless optInst is -/// given). optInst is set when an explicit type instantiation is given, e.g. +/// given). optInst is set when an explicit type instantiation is given, e.g. /// Seq.empty /// In this case the vrefFlags inside optInst are just NormalValUse. /// @@ -2600,167 +2589,167 @@ let TcValEarlyGeneralizationConsistencyCheck cenv (env: TcEnv) (v: Val, vrec, ti /// | CtorValUsedAsSelfInit "new() = new OwnType(3)" /// | VSlotDirectCall "base.OnClick(eventArgs)" let TcVal checkAttributes cenv env tpenv (vref: ValRef) optInst optAfterResolution m = - let (tpsorig, _, _, _, tinst, _) as res = + let (tpsorig, _, _, _, tinst, _) as res = let v = vref.Deref let vrec = v.RecursiveValInfo - v.SetHasBeenReferenced() + v.SetHasBeenReferenced() CheckValAccessible m env.eAccessRights vref - if checkAttributes then + if checkAttributes then CheckValAttributes cenv.g vref m |> CommitOperationResult let vty = vref.Type - // byref-typed values get dereferenced - if isByrefTy cenv.g vty then + // byref-typed values get dereferenced + if isByrefTy cenv.g vty then let isSpecial = true [], mkAddrGet m vref, isSpecial, destByrefTy cenv.g vty, [], tpenv - else - match v.LiteralValue with - | Some c -> - // Literal values go to constants + else + match v.LiteralValue with + | Some c -> + // Literal values go to constants let isSpecial = true - // The value may still be generic, e.g. + // The value may still be generic, e.g. // [] // let Null = null - let tpsorig, _, tinst, tau = FreshenPossibleForallTy cenv.g m TyparRigidity.Flexible vty + let tpsorig, _, tinst, tau = FreshenPossibleForallTy cenv.g m TyparRigidity.Flexible vty tpsorig, Expr.Const (c, m, tau), isSpecial, tau, tinst, tpenv - | None -> + | None -> // References to 'this' in classes get dereferenced from their implicit reference cell and poked - if v.BaseOrThisInfo = CtorThisVal && isRefCellTy cenv.g vty then + if v.BaseOrThisInfo = CtorThisVal && isRefCellTy cenv.g vty then let exprForVal = exprForValRef m vref - //if AreWithinCtorPreConstruct env then + //if AreWithinCtorPreConstruct env then // warning(SelfRefObjCtor(AreWithinImplicitCtor env, m)) let ty = destRefCellTy cenv.g vty let isSpecial = true [], mkCallCheckThis cenv.g m ty (mkRefCellGet cenv.g m ty exprForVal), isSpecial, ty, [], tpenv - else - // Instantiate the value - let tpsorig, vrefFlags, tinst, tau, tpenv = - // Have we got an explicit instantiation? - match optInst with + else + // Instantiate the value + let tpsorig, vrefFlags, tinst, tau, tpenv = + // Have we got an explicit instantiation? + match optInst with // No explicit instantiation (the normal case) - | None -> + | None -> if HasFSharpAttribute cenv.g cenv.g.attrib_RequiresExplicitTypeArgumentsAttribute v.Attribs then errorR(Error(FSComp.SR.tcFunctionRequiresExplicitTypeArguments(v.DisplayName), m)) - - match vrec with - | ValInRecScope false -> + + match vrec with + | ValInRecScope false -> let tpsorig, tau = vref.TypeScheme let tinst = tpsorig |> List.map mkTyparTy tpsorig, NormalValUse, tinst, tau, tpenv - | ValInRecScope true + | ValInRecScope true | ValNotInRecScope -> - let tpsorig, _, tinst, tau = FreshenPossibleForallTy cenv.g m TyparRigidity.Flexible vty + let tpsorig, _, tinst, tau = FreshenPossibleForallTy cenv.g m TyparRigidity.Flexible vty tpsorig, NormalValUse, tinst, tau, tpenv - // If we have got an explicit instantiation then use that - | Some(vrefFlags, checkTys) -> - let checkInst (tinst: TypeInst) = - if not v.IsMember && not v.PermitsExplicitTypeInstantiation && not (List.isEmpty tinst) && not (List.isEmpty v.Typars) then + // If we have got an explicit instantiation then use that + | Some(vrefFlags, checkTys) -> + let checkInst (tinst: TypeInst) = + if not v.IsMember && not v.PermitsExplicitTypeInstantiation && not (List.isEmpty tinst) && not (List.isEmpty v.Typars) then warning(Error(FSComp.SR.tcDoesNotAllowExplicitTypeArguments(v.DisplayName), m)) - match vrec with - | ValInRecScope false -> + match vrec with + | ValInRecScope false -> let tpsorig, tau = vref.TypeScheme let (tinst: TypeInst), tpenv = checkTys tpenv (tpsorig |> List.map (fun tp -> tp.Kind)) checkInst tinst if tpsorig.Length <> tinst.Length then error(Error(FSComp.SR.tcTypeParameterArityMismatch(tpsorig.Length, tinst.Length), m)) let tau2 = instType (mkTyparInst tpsorig tinst) tau - (tpsorig, tinst) ||> List.iter2 (fun tp ty -> + (tpsorig, tinst) ||> List.iter2 (fun tp ty -> try UnifyTypes cenv env m (mkTyparTy tp) ty - with _ -> error (Recursion(env.DisplayEnv, v.Id, tau2, tau, m))) - tpsorig, vrefFlags, tinst, tau2, tpenv - | ValInRecScope true + with _ -> error (Recursion(env.DisplayEnv, v.Id, tau2, tau, m))) + tpsorig, vrefFlags, tinst, tau2, tpenv + | ValInRecScope true | ValNotInRecScope -> - let tpsorig, tps, tptys, tau = FreshenPossibleForallTy cenv.g m TyparRigidity.Flexible vty - //dprintfn "After Freshen: tau = %s" (LayoutRender.showL (typeL tau)) + let tpsorig, tps, tptys, tau = FreshenPossibleForallTy cenv.g m TyparRigidity.Flexible vty + //dprintfn "After Freshen: tau = %s" (Layout.showL (typeL tau)) let (tinst: TypeInst), tpenv = checkTys tpenv (tps |> List.map (fun tp -> tp.Kind)) checkInst tinst - //dprintfn "After Check: tau = %s" (LayoutRender.showL (typeL tau)) + //dprintfn "After Check: tau = %s" (Layout.showL (typeL tau)) if tptys.Length <> tinst.Length then error(Error(FSComp.SR.tcTypeParameterArityMismatch(tps.Length, tinst.Length), m)) List.iter2 (UnifyTypes cenv env m) tptys tinst TcValEarlyGeneralizationConsistencyCheck cenv env (v, vrec, tinst, vty, tau, m) - //dprintfn "After Unify: tau = %s" (LayoutRender.showL (typeL tau)) - tpsorig, vrefFlags, tinst, tau, tpenv - + //dprintfn "After Unify: tau = %s" (Layout.showL (typeL tau)) + tpsorig, vrefFlags, tinst, tau, tpenv + let exprForVal = Expr.Val (vref, vrefFlags, m) let exprForVal = mkTyAppExpr m (exprForVal, vty) tinst - let isSpecial = - (match vrefFlags with NormalValUse | PossibleConstrainedCall _ -> false | _ -> true) || - valRefEq cenv.g vref cenv.g.splice_expr_vref || - valRefEq cenv.g vref cenv.g.splice_raw_expr_vref - + let isSpecial = + (match vrefFlags with NormalValUse | PossibleConstrainedCall _ -> false | _ -> true) || + valRefEq cenv.g vref cenv.g.splice_expr_vref || + valRefEq cenv.g vref cenv.g.splice_raw_expr_vref + let exprForVal = RecordUseOfRecValue cenv vrec vref exprForVal m tpsorig, exprForVal, isSpecial, tau, tinst, tpenv - match optAfterResolution with + match optAfterResolution with | Some (AfterResolution.RecordResolution(_, callSink, _, _)) -> callSink (mkTyparInst tpsorig tinst) | Some AfterResolution.DoNothing | None -> () res /// simplified version of TcVal used in calls to BuildMethodCall (typrelns.fs) /// this function is used on typechecking step for making calls to provided methods and on optimization step (for the same purpose). -let LightweightTcValForUsingInBuildMethodCall g (vref: ValRef) vrefFlags (vrefTypeInst: TTypes) m = - let v = vref.Deref - let vty = vref.Type - // byref-typed values get dereferenced - if isByrefTy g vty then - mkAddrGet m vref, destByrefTy g vty - else - match v.LiteralValue with - | Some c -> - let _, _, _, tau = FreshenPossibleForallTy g m TyparRigidity.Flexible vty +let LightweightTcValForUsingInBuildMethodCall g (vref: ValRef) vrefFlags (vrefTypeInst: TTypes) m = + let v = vref.Deref + let vty = vref.Type + // byref-typed values get dereferenced + if isByrefTy g vty then + mkAddrGet m vref, destByrefTy g vty + else + match v.LiteralValue with + | Some c -> + let _, _, _, tau = FreshenPossibleForallTy g m TyparRigidity.Flexible vty Expr.Const (c, m, tau), tau - | None -> - // Instantiate the value - let tau = - // If we have got an explicit instantiation then use that - let _, tps, tptys, tau = FreshenPossibleForallTy g m TyparRigidity.Flexible vty + | None -> + // Instantiate the value + let tau = + // If we have got an explicit instantiation then use that + let _, tps, tptys, tau = FreshenPossibleForallTy g m TyparRigidity.Flexible vty if tptys.Length <> vrefTypeInst.Length then error(Error(FSComp.SR.tcTypeParameterArityMismatch(tps.Length, vrefTypeInst.Length), m)) - instType (mkTyparInst tps vrefTypeInst) tau - - let exprForVal = Expr.Val (vref, vrefFlags, m) - let exprForVal = mkTyAppExpr m (exprForVal, vty) vrefTypeInst + instType (mkTyparInst tps vrefTypeInst) tau + + let exprForVal = Expr.Val (vref, vrefFlags, m) + let exprForVal = mkTyAppExpr m (exprForVal, vty) vrefTypeInst exprForVal, tau /// Mark points where we decide whether an expression will support automatic /// decondensation or not. This is somewhat a relic of a previous implementation of decondensation and could /// be removed -type ApplicableExpr = - | ApplicableExpr of +type ApplicableExpr = + | ApplicableExpr of // context - cenv * + cenv * // the function-valued expression Expr * // is this the first in an application series - bool + bool - member x.Range = - match x with + member x.Range = + match x with | ApplicableExpr (_, e, _) -> e.Range - member x.Type = - match x with - | ApplicableExpr (cenv, e, _) -> tyOfExpr cenv.g e + member x.Type = + match x with + | ApplicableExpr (cenv, e, _) -> tyOfExpr cenv.g e member x.SupplyArgument(e2, m) = - let (ApplicableExpr (cenv, fe, first)) = x - let combinedExpr = - match fe with - | Expr.App (e1, e1ty, tyargs1, args1, e1m) when + let (ApplicableExpr (cenv, fe, first)) = x + let combinedExpr = + match fe with + | Expr.App (e1, e1ty, tyargs1, args1, e1m) when (not first || isNil args1) && - (not (isForallTy cenv.g e1ty) || isFunTy cenv.g (applyTys cenv.g e1ty (tyargs1, args1))) -> + (not (isForallTy cenv.g e1ty) || isFunTy cenv.g (applyTys cenv.g e1ty (tyargs1, args1))) -> Expr.App (e1, e1ty, tyargs1, args1@[e2], unionRanges e1m m) - | _ -> - Expr.App (fe, tyOfExpr cenv.g fe, [], [e2], m) + | _ -> + Expr.App (fe, tyOfExpr cenv.g fe, [], [e2], m) ApplicableExpr(cenv, combinedExpr, false) member x.Expr = - match x with + match x with | ApplicableExpr(_, e, _) -> e - + let MakeApplicableExprNoFlex cenv expr = ApplicableExpr (cenv, expr, true) @@ -2783,38 +2772,38 @@ let MakeApplicableExprNoFlex cenv expr = /// will type check but /// /// Sealed types and 'obj' do not introduce generic flexibility when functions are used as first class -/// values. +/// values. /// -/// For 'obj' this is because introducing this flexibility would NOT be the reverse of condensation, -/// since we don't condense +/// For 'obj' this is because introducing this flexibility would NOT be the reverse of condensation, +/// since we don't condense /// f: 'a -> unit /// to /// f: obj -> unit /// /// We represent the flexibility in the TAST by leaving a function-to-function coercion node in the tree -/// This "special" node is immediately eliminated by the use of IteratedFlexibleAdjustArityOfLambdaBody as soon as we +/// This "special" node is immediately eliminated by the use of IteratedFlexibleAdjustArityOfLambdaBody as soon as we /// first transform the tree (currently in optimization) let MakeApplicableExprWithFlex cenv (env: TcEnv) expr = let g = cenv.g let exprTy = tyOfExpr g expr let m = expr.Range - - let isNonFlexibleType ty = isSealedTy g ty - + + let isNonFlexibleType ty = isSealedTy g ty + let argTys, retTy = stripFunTy g exprTy let curriedActualTypes = argTys |> List.map (tryDestRefTupleTy g) if (curriedActualTypes.IsEmpty || curriedActualTypes |> List.exists (List.exists (isByrefTy g)) || - curriedActualTypes |> List.forall (List.forall isNonFlexibleType)) then - + curriedActualTypes |> List.forall (List.forall isNonFlexibleType)) then + ApplicableExpr (cenv, expr, true) else - let curriedFlexibleTypes = - curriedActualTypes |> List.mapSquared (fun actualType -> - if isNonFlexibleType actualType - then actualType - else + let curriedFlexibleTypes = + curriedActualTypes |> List.mapSquared (fun actualType -> + if isNonFlexibleType actualType + then actualType + else let flexibleType = NewInferenceType () AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css m NoTrace actualType flexibleType flexibleType) @@ -2824,19 +2813,19 @@ let MakeApplicableExprWithFlex cenv (env: TcEnv) expr = ApplicableExpr (cenv, expr, true) -/// Checks, warnings and constraint assertions for downcasts +/// Checks, warnings and constraint assertions for downcasts let TcRuntimeTypeTest isCast isOperator cenv denv m tgtTy srcTy = let g = cenv.g - if TypeDefinitelySubsumesTypeNoCoercion 0 g cenv.amap m tgtTy srcTy then + if TypeDefinitelySubsumesTypeNoCoercion 0 g cenv.amap m tgtTy srcTy then warning(TypeTestUnnecessary m) - if isTyparTy g srcTy && not (destTyparTy g srcTy).IsCompatFlex then + if isTyparTy g srcTy && not (destTyparTy g srcTy).IsCompatFlex then error(IndeterminateRuntimeCoercion(denv, srcTy, tgtTy, m)) - if isSealedTy g srcTy then + if isSealedTy g srcTy then error(RuntimeCoercionSourceSealed(denv, srcTy, m)) - if isSealedTy g tgtTy || isTyparTy g tgtTy || not (isInterfaceTy g srcTy) then + if isSealedTy g tgtTy || isTyparTy g tgtTy || not (isInterfaceTy g srcTy) then if isCast then AddCxTypeMustSubsumeType (ContextInfo.RuntimeTypeTest isOperator) denv cenv.css m NoTrace srcTy tgtTy else @@ -2848,57 +2837,57 @@ let TcRuntimeTypeTest isCast isOperator cenv denv m tgtTy srcTy = else error(Error(FSComp.SR.tcTypeTestErased(NicePrint.minimalStringOfType denv tgtTy, NicePrint.minimalStringOfType denv (stripTyEqnsWrtErasure EraseAll g tgtTy)), m)) else - getErasedTypes g tgtTy |> - List.iter (fun ety -> if isMeasureTy g ety + getErasedTypes g tgtTy |> + List.iter (fun ety -> if isMeasureTy g ety then warning(Error(FSComp.SR.tcTypeTestLosesMeasures(NicePrint.minimalStringOfType denv ety), m)) else warning(Error(FSComp.SR.tcTypeTestLossy(NicePrint.minimalStringOfType denv ety, NicePrint.minimalStringOfType denv (stripTyEqnsWrtErasure EraseAll g ety)), m))) -/// Checks, warnings and constraint assertions for upcasts +/// Checks, warnings and constraint assertions for upcasts let TcStaticUpcast cenv denv m tgtTy srcTy = - if isTyparTy cenv.g tgtTy then - if not (destTyparTy cenv.g tgtTy).IsCompatFlex then - error(IndeterminateStaticCoercion(denv, srcTy, tgtTy, m)) + if isTyparTy cenv.g tgtTy then + if not (destTyparTy cenv.g tgtTy).IsCompatFlex then + error(IndeterminateStaticCoercion(denv, srcTy, tgtTy, m)) //else warning(UpcastUnnecessary m) - if isSealedTy cenv.g tgtTy && not (isTyparTy cenv.g tgtTy) then + if isSealedTy cenv.g tgtTy && not (isTyparTy cenv.g tgtTy) then warning(CoercionTargetSealed(denv, tgtTy, m)) - if typeEquiv cenv.g srcTy tgtTy then - warning(UpcastUnnecessary m) + if typeEquiv cenv.g srcTy tgtTy then + warning(UpcastUnnecessary m) AddCxTypeMustSubsumeType ContextInfo.NoContext denv cenv.css m NoTrace tgtTy srcTy let BuildPossiblyConditionalMethodCall cenv env isMutable m isProp minfo valUseFlags minst objArgs args = - let conditionalCallDefineOpt = TryFindMethInfoStringAttribute cenv.g m cenv.g.attrib_ConditionalAttribute minfo + let conditionalCallDefineOpt = TryFindMethInfoStringAttribute cenv.g m cenv.g.attrib_ConditionalAttribute minfo - match conditionalCallDefineOpt, cenv.conditionalDefines with - | Some d, Some defines when not (List.contains d defines) -> + match conditionalCallDefineOpt, cenv.conditionalDefines with + | Some d, Some defines when not (List.contains d defines) -> - // Methods marked with 'Conditional' must return 'unit' + // Methods marked with 'Conditional' must return 'unit' UnifyTypes cenv env m cenv.g.unit_ty (minfo.GetFSharpReturnTy(cenv.amap, m, minst)) mkUnit cenv.g m, cenv.g.unit_ty - | _ -> + | _ -> #if !NO_EXTENSIONTYPING match minfo with - | ProvidedMeth(_, mi, _, _) -> + | ProvidedMeth(_, mi, _, _) -> // BuildInvokerExpressionForProvidedMethodCall converts references to F# intrinsics back to values - // and uses TcVal to do this. However we don't want to check attributes again for provided references to values, + // and uses TcVal to do this. However we don't want to check attributes again for provided references to values, // so we pass 'false' for 'checkAttributes'. let tcVal = LightweightTcValForUsingInBuildMethodCall cenv.g let _, retExpt, retTy = ProvidedMethodCalls.BuildInvokerExpressionForProvidedMethodCall tcVal (cenv.g, cenv.amap, mi, objArgs, isMutable, isProp, valUseFlags, args, m) retExpt, retTy - | _ -> -#endif - let tcVal valref valUse ttypes m = + | _ -> +#endif + let tcVal valref valUse ttypes m = let _, a, _, b, _, _ = TcVal true cenv env emptyUnscopedTyparEnv valref (Some (valUse, (fun x _ -> ttypes, x))) None m a, b BuildMethodCall tcVal cenv.g cenv.amap isMutable m isProp minfo valUseFlags minst objArgs args -let TryFindIntrinsicOrExtensionMethInfo collectionSettings (cenv: cenv) (env: TcEnv) m ad nm ty = +let TryFindIntrinsicOrExtensionMethInfo collectionSettings (cenv: cenv) (env: TcEnv) m ad nm ty = AllMethInfosOfTypeInScope collectionSettings cenv.infoReader env.NameEnv (Some nm) ad IgnoreOverrides m ty let TryFindFSharpSignatureInstanceGetterProperty (cenv: cenv) (env: TcEnv) m nm ty (sigTys: TType list) = @@ -2909,33 +2898,33 @@ let TryFindFSharpSignatureInstanceGetterProperty (cenv: cenv) (env: TcEnv) m nm match propInfo.GetterMethod.GetParamTypes(cenv.amap, m, []) with | [] -> false | argTysList -> - + let argTys = (argTysList |> List.reduce (@)) @ [ propInfo.GetterMethod.GetFSharpReturnTy(cenv.amap, m, []) ] in - if argTys.Length <> sigTys.Length then - false + if argTys.Length <> sigTys.Length then + false else (argTys, sigTys) ||> List.forall2 (typeEquiv cenv.g) ) ) -/// Build the 'test and dispose' part of a 'use' statement -let BuildDisposableCleanup cenv env m (v: Val) = - v.SetHasBeenReferenced() +/// Build the 'test and dispose' part of a 'use' statement +let BuildDisposableCleanup cenv env m (v: Val) = + v.SetHasBeenReferenced() let ad = env.eAccessRights - let disposeMethod = - match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AllResults cenv env m ad "Dispose" cenv.g.system_IDisposable_ty with - | [x] -> x - | _ -> error(InternalError(FSComp.SR.tcCouldNotFindIDisposable(), m)) + let disposeMethod = + match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AllResults cenv env m ad "Dispose" cenv.g.system_IDisposable_ty with + | [x] -> x + | _ -> error(InternalError(FSComp.SR.tcCouldNotFindIDisposable(), m)) - // For struct types the test is simpler: we can determine if IDisposable is supported, and even when it is, we can avoid doing the type test + // For struct types the test is simpler: we can determine if IDisposable is supported, and even when it is, we can avoid doing the type test // Note this affects the elaborated form seen by quotations etc. - if isStructTy cenv.g v.Type then + if isStructTy cenv.g v.Type then if TypeFeasiblySubsumesType 0 cenv.g cenv.amap m cenv.g.system_IDisposable_ty CanCoerce v.Type then // We can use NeverMutates here because the variable is going out of scope, there is no need to take a defensive // copy of it. - let disposeExpr, _ = BuildPossiblyConditionalMethodCall cenv env NeverMutates m false disposeMethod NormalValUse [] [exprForVal v.Range v] [] + let disposeExpr, _ = BuildPossiblyConditionalMethodCall cenv env NeverMutates m false disposeMethod NormalValUse [] [exprForVal v.Range v] [] disposeExpr else mkUnit cenv.g m @@ -2943,20 +2932,20 @@ let BuildDisposableCleanup cenv env m (v: Val) = let disposeObjVar, disposeObjExpr = mkCompGenLocal m "objectToDispose" cenv.g.system_IDisposable_ty let disposeExpr, _ = BuildPossiblyConditionalMethodCall cenv env PossiblyMutates m false disposeMethod NormalValUse [] [disposeObjExpr] [] let inpe = mkCoerceExpr(exprForVal v.Range v, cenv.g.obj_ty, m, v.Type) - mkIsInstConditional cenv.g m cenv.g.system_IDisposable_ty inpe disposeObjVar disposeExpr (mkUnit cenv.g m) + mkIsInstConditional cenv.g m cenv.g.system_IDisposable_ty inpe disposeObjVar disposeExpr (mkUnit cenv.g m) /// Build call to get_OffsetToStringData as part of 'fixed' -let BuildOffsetToStringData cenv env m = +let BuildOffsetToStringData cenv env m = let ad = env.eAccessRights - let offsetToStringDataMethod = - match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AllResults cenv env m ad "get_OffsetToStringData" cenv.g.system_RuntimeHelpers_ty with + let offsetToStringDataMethod = + match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AllResults cenv env m ad "get_OffsetToStringData" cenv.g.system_RuntimeHelpers_ty with | [x] -> x - | _ -> error(Error(FSComp.SR.tcCouldNotFindOffsetToStringData(), m)) + | _ -> error(Error(FSComp.SR.tcCouldNotFindOffsetToStringData(), m)) - let offsetExpr, _ = BuildPossiblyConditionalMethodCall cenv env NeverMutates m false offsetToStringDataMethod NormalValUse [] [] [] + let offsetExpr, _ = BuildPossiblyConditionalMethodCall cenv env NeverMutates m false offsetToStringDataMethod NormalValUse [] [] [] offsetExpr -let BuildILFieldGet g amap m objExpr (finfo: ILFieldInfo) = +let BuildILFieldGet g amap m objExpr (finfo: ILFieldInfo) = let fref = finfo.ILFieldRef let isValueType = finfo.IsValueType let valu = if isValueType then AsValue else AsObject @@ -2967,20 +2956,20 @@ let BuildILFieldGet g amap m objExpr (finfo: ILFieldInfo) = match finfo with | ProvidedField _ when (isErasedType g ty) -> // we know it's accessible, and there are no attributes to check for now... - match finfo.LiteralValue with - | None -> + match finfo.LiteralValue with + | None -> error (Error(FSComp.SR.tcTPFieldMustBeLiteral(), m)) - | Some lit -> + | Some lit -> Expr.Const (TcFieldInit m lit, m, fieldType) | _ -> #endif let wrap, objExpr, _readonly, _writeonly = mkExprAddrOfExpr g isValueType false NeverMutates objExpr None m - // The empty instantiation on the AbstractIL fspec is OK, since we make the correct fspec in IlxGen.GenAsm - // This ensures we always get the type instantiation right when doing this from + // The empty instantiation on the AbstractIL fspec is OK, since we make the correct fspec in IlxGen.GenAsm + // This ensures we always get the type instantiation right when doing this from // polymorphic code, after inlining etc. * let fspec = mkILFieldSpec(fref, mkILNamedTy valu fref.DeclaringTypeRef []) - // Add an I_nop if this is an initonly field to make sure we never recognize it as an lvalue. See mkExprAddrOfExpr. - wrap (mkAsmExpr (([ mkNormalLdfld fspec ] @ (if finfo.IsInitOnly then [ AI_nop ] else [])), tinst, [objExpr], [fieldType], m)) + // Add an I_nop if this is an initonly field to make sure we never recognize it as an lvalue. See mkExprAddrOfExpr. + wrap (mkAsmExpr (([ mkNormalLdfld fspec ] @ (if finfo.IsInitOnly then [ AI_nop ] else [])), tinst, [objExpr], [fieldType], m)) /// Checks that setting a field value does not set a literal or initonly field let private CheckFieldLiteralArg (finfo: ILFieldInfo) argExpr m = @@ -2994,137 +2983,137 @@ let private CheckFieldLiteralArg (finfo: ILFieldInfo) argExpr m = ) if finfo.IsInitOnly then error (Error (FSComp.SR.tcFieldIsReadonly(), m)) -let BuildILFieldSet g m objExpr (finfo: ILFieldInfo) argExpr = +let BuildILFieldSet g m objExpr (finfo: ILFieldInfo) argExpr = let fref = finfo.ILFieldRef let isValueType = finfo.IsValueType let valu = if isValueType then AsValue else AsObject let tinst = finfo.TypeInst - // The empty instantiation on the AbstractIL fspec is OK, since we make the correct fspec in IlxGen.GenAsm - // This ensures we always get the type instantiation right when doing this from + // The empty instantiation on the AbstractIL fspec is OK, since we make the correct fspec in IlxGen.GenAsm + // This ensures we always get the type instantiation right when doing this from // polymorphic code, after inlining etc. * let fspec = mkILFieldSpec(fref, mkILNamedTy valu fref.DeclaringTypeRef []) CheckFieldLiteralArg finfo argExpr m - let wrap, objExpr, _readonly, _writeonly = mkExprAddrOfExpr g isValueType false DefinitelyMutates objExpr None m - wrap (mkAsmExpr ([ mkNormalStfld fspec ], tinst, [objExpr; argExpr], [], m)) + let wrap, objExpr, _readonly, _writeonly = mkExprAddrOfExpr g isValueType false DefinitelyMutates objExpr None m + wrap (mkAsmExpr ([ mkNormalStfld fspec ], tinst, [objExpr; argExpr], [], m)) -let BuildILStaticFieldSet m (finfo: ILFieldInfo) argExpr = +let BuildILStaticFieldSet m (finfo: ILFieldInfo) argExpr = let fref = finfo.ILFieldRef let isValueType = finfo.IsValueType let valu = if isValueType then AsValue else AsObject let tinst = finfo.TypeInst - // The empty instantiation on the AbstractIL fspec is OK, since we make the correct fspec in IlxGen.GenAsm - // This ensures we always get the type instantiation right when doing this from - // polymorphic code, after inlining etc. + // The empty instantiation on the AbstractIL fspec is OK, since we make the correct fspec in IlxGen.GenAsm + // This ensures we always get the type instantiation right when doing this from + // polymorphic code, after inlining etc. let fspec = mkILFieldSpec(fref, mkILNamedTy valu fref.DeclaringTypeRef []) CheckFieldLiteralArg finfo argExpr m mkAsmExpr ([ mkNormalStsfld fspec ], tinst, [argExpr], [], m) -let BuildRecdFieldSet g m objExpr (rfinfo: RecdFieldInfo) argExpr = +let BuildRecdFieldSet g m objExpr (rfinfo: RecdFieldInfo) argExpr = let tgtTy = rfinfo.DeclaringType let valu = isStructTy g tgtTy let objExpr = if valu then objExpr else mkCoerceExpr(objExpr, tgtTy, m, tyOfExpr g objExpr) let wrap, objExpr, _readonly, _writeonly = mkExprAddrOfExpr g valu false DefinitelyMutates objExpr None m wrap (mkRecdFieldSetViaExprAddr (objExpr, rfinfo.RecdFieldRef, rfinfo.TypeInst, argExpr, m) ) - + //------------------------------------------------------------------------- // Helpers dealing with named and optional args at callsites -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -let (|BinOpExpr|_|) e = - match e with +let (|BinOpExpr|_|) e = + match e with | SynExpr.App (_, _, SynExpr.App (_, _, SingleIdent opId, a, _), b, _) -> Some (opId, a, b) | _ -> None -let (|SimpleEqualsExpr|_|) e = - match e with +let (|SimpleEqualsExpr|_|) e = + match e with | BinOpExpr(opId, a, b) when opId.idText = opNameEquals -> Some (a, b) | _ -> None /// Detect a named argument at a callsite -let TryGetNamedArg e = - match e with +let TryGetNamedArg e = + match e with | SimpleEqualsExpr(LongOrSingleIdent(isOpt, LongIdentWithDots([a], _), None, _), b) -> Some(isOpt, a, b) - | _ -> None + | _ -> None -let inline IsNamedArg e = - match e with +let inline IsNamedArg e = + match e with | SimpleEqualsExpr(LongOrSingleIdent(_, LongIdentWithDots([_], _), None, _), _) -> true | _ -> false /// Get the method arguments at a callsite, taking into account named and optional arguments let GetMethodArgs arg = - let args = - match arg with + let args = + match arg with | SynExpr.Const (SynConst.Unit, _) -> [] | SynExprParen(SynExpr.Tuple (false, args, _, _), _, _, _) | SynExpr.Tuple (false, args, _, _) -> args | SynExprParen(arg, _, _, _) | arg -> [arg] - let unnamedCallerArgs, namedCallerArgs = + let unnamedCallerArgs, namedCallerArgs = args |> List.takeUntil IsNamedArg - let namedCallerArgs = - namedCallerArgs - |> List.choose (fun e -> + let namedCallerArgs = + namedCallerArgs + |> List.choose (fun e -> match TryGetNamedArg e with | None -> - // ignore errors to avoid confusing error messages in cases like foo(a = 1, ) + // ignore errors to avoid confusing error messages in cases like foo(a = 1, ) // do not abort overload resolution in case if named arguments are mixed with errors match e with | SynExpr.ArbitraryAfterError _ -> None - | _ -> error(Error(FSComp.SR.tcNameArgumentsMustAppearLast(), e.Range)) + | _ -> error(Error(FSComp.SR.tcNameArgumentsMustAppearLast(), e.Range)) | namedArg -> namedArg) unnamedCallerArgs, namedCallerArgs //------------------------------------------------------------------------- // Helpers dealing with pattern match compilation -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- let CompilePatternForMatch cenv (env: TcEnv) mExpr matchm warnOnUnused actionOnFailure (inputVal, generalizedTypars, inputExprOpt) clauses inputTy resultTy = let dtree, targets = CompilePattern cenv.g env.DisplayEnv cenv.amap (LightweightTcValForUsingInBuildMethodCall cenv.g) cenv.infoReader mExpr matchm warnOnUnused actionOnFailure (inputVal, generalizedTypars, inputExprOpt) clauses inputTy resultTy - mkAndSimplifyMatch DebugPointAtBinding.NoneAtInvisible mExpr matchm resultTy dtree targets + mkAndSimplifyMatch NoDebugPointAtInvisibleBinding mExpr matchm resultTy dtree targets /// Compile a pattern -let CompilePatternForMatchClauses cenv env mExpr matchm warnOnUnused actionOnFailure inputExprOpt inputTy resultTy tclauses = - // Avoid creating a dummy in the common cases where we are about to bind a name for the expression - // CLEANUP: avoid code duplication with code further below, i.e.all callers should call CompilePatternForMatch - match tclauses with +let CompilePatternForMatchClauses cenv env mExpr matchm warnOnUnused actionOnFailure inputExprOpt inputTy resultTy tclauses = + // Avoid creating a dummy in the common cases where we are about to bind a name for the expression + // CLEANUP: avoid code duplication with code further below, i.e.all callers should call CompilePatternForMatch + match tclauses with | [TClause(TPat_as (pat1, PBind (asVal, TypeScheme(generalizedTypars, _)), _), None, TTarget(vs, e, spTarget), m2)] -> let expr = CompilePatternForMatch cenv env mExpr matchm warnOnUnused actionOnFailure (asVal, generalizedTypars, None) [TClause(pat1, None, TTarget(ListSet.remove valEq asVal vs, e, spTarget), m2)] inputTy resultTy asVal, expr - | _ -> + | _ -> let matchValueTmp, _ = mkCompGenLocal mExpr "matchValue" inputTy let expr = CompilePatternForMatch cenv env mExpr matchm warnOnUnused actionOnFailure (matchValueTmp, [], inputExprOpt) tclauses inputTy resultTy matchValueTmp, expr //------------------------------------------------------------------------- // Helpers dealing with sequence expressions -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -/// Get the fragmentary expressions resulting from turning -/// an expression into an enumerable value, e.g. at 'for' loops +/// Get the fragmentary expressions resulting from turning +/// an expression into an enumerable value, e.g. at 'for' loops -// localAlloc is relevant if the enumerator is a mutable struct and indicates -// if the enumerator can be allocated as a mutable local variable +// localAlloc is relevant if the enumerator is a mutable struct and indicates +// if the enumerator can be allocated as a mutable local variable let AnalyzeArbitraryExprAsEnumerable cenv (env: TcEnv) localAlloc m exprty expr = let ad = env.AccessRights - let err k ty = + let err k ty = let txt = NicePrint.minimalStringOfType env.DisplayEnv ty let msg = if k then FSComp.SR.tcTypeCannotBeEnumerated txt else FSComp.SR.tcEnumTypeCannotBeEnumerated txt Exception(Error(msg, m)) - let findMethInfo k m nm ty = - match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AtMostOneResult cenv env m ad nm ty with + let findMethInfo k m nm ty = + match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AtMostOneResult cenv env m ad nm ty with | [] -> err k ty | res :: _ -> Result res - + // Ensure there are no curried arguments, and indeed no arguments at all - let hasArgs (minfo: MethInfo) minst = - match minfo.GetParamTypes(cenv.amap, m, minst) with + let hasArgs (minfo: MethInfo) minst = + match minfo.GetParamTypes(cenv.amap, m, minst) with | [[]] -> false | _ -> true - let tryType (exprToSearchForGetEnumeratorAndItem, tyToSearchForGetEnumeratorAndItem) = - match findMethInfo true m "GetEnumerator" tyToSearchForGetEnumeratorAndItem with + let tryType (exprToSearchForGetEnumeratorAndItem, tyToSearchForGetEnumeratorAndItem) = + match findMethInfo true m "GetEnumerator" tyToSearchForGetEnumeratorAndItem with | Exception e -> Exception e | Result getEnumerator_minfo -> @@ -3132,86 +3121,86 @@ let AnalyzeArbitraryExprAsEnumerable cenv (env: TcEnv) localAlloc m exprty expr let retTypeOfGetEnumerator = getEnumerator_minfo.GetFSharpReturnTy(cenv.amap, m, getEnumerator_minst) if hasArgs getEnumerator_minfo getEnumerator_minst then err true tyToSearchForGetEnumeratorAndItem else - match findMethInfo false m "MoveNext" retTypeOfGetEnumerator with + match findMethInfo false m "MoveNext" retTypeOfGetEnumerator with | Exception e -> Exception e | Result moveNext_minfo -> let moveNext_minst = FreshenMethInfo m moveNext_minfo let retTypeOfMoveNext = moveNext_minfo.GetFSharpReturnTy(cenv.amap, m, moveNext_minst) - if not (typeEquiv cenv.g cenv.g.bool_ty retTypeOfMoveNext) then err false retTypeOfGetEnumerator else + if not (typeEquiv cenv.g cenv.g.bool_ty retTypeOfMoveNext) then err false retTypeOfGetEnumerator else if hasArgs moveNext_minfo moveNext_minst then err false retTypeOfGetEnumerator else - match findMethInfo false m "get_Current" retTypeOfGetEnumerator with + match findMethInfo false m "get_Current" retTypeOfGetEnumerator with | Exception e -> Exception e | Result get_Current_minfo -> let get_Current_minst = FreshenMethInfo m get_Current_minfo if hasArgs get_Current_minfo get_Current_minst then err false retTypeOfGetEnumerator else let enumElemTy = get_Current_minfo.GetFSharpReturnTy(cenv.amap, m, get_Current_minst) - + // Compute the element type of the strongly typed enumerator // - // Like C#, we detect the 'GetEnumerator' pattern for .NET version 1.x abstractions that don't + // Like C#, we detect the 'GetEnumerator' pattern for .NET version 1.x abstractions that don't // support the correct generic interface. However unlike C# we also go looking for a 'get_Item' or 'Item' method // with a single integer indexer argument to try to get a strong type for the enumeration should the Enumerator - // not provide anything useful. To enable interop with some legacy COM APIs, + // not provide anything useful. To enable interop with some legacy COM APIs, // the single integer indexer argument is allowed to have type 'object'. - let enumElemTy = + let enumElemTy = if isObjTy cenv.g enumElemTy then - // Look for an 'Item' property, or a set of these with consistent return types - let allEquivReturnTypes (minfo: MethInfo) (others: MethInfo list) = + // Look for an 'Item' property, or a set of these with consistent return types + let allEquivReturnTypes (minfo: MethInfo) (others: MethInfo list) = let returnTy = minfo.GetFSharpReturnTy(cenv.amap, m, []) others |> List.forall (fun other -> typeEquiv cenv.g (other.GetFSharpReturnTy(cenv.amap, m, [])) returnTy) - - let isInt32OrObjectIndexer (minfo: MethInfo) = + + let isInt32OrObjectIndexer (minfo: MethInfo) = match minfo.GetParamTypes(cenv.amap, m, []) with - | [[ty]] -> + | [[ty]] -> // e.g. MatchCollection - typeEquiv cenv.g cenv.g.int32_ty ty || + typeEquiv cenv.g cenv.g.int32_ty ty || // e.g. EnvDTE.Documents.Item typeEquiv cenv.g cenv.g.obj_ty ty | _ -> false - + match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AllResults cenv env m ad "get_Item" tyToSearchForGetEnumeratorAndItem with | (minfo :: others) when (allEquivReturnTypes minfo others && - List.exists isInt32OrObjectIndexer (minfo :: others)) -> + List.exists isInt32OrObjectIndexer (minfo :: others)) -> minfo.GetFSharpReturnTy(cenv.amap, m, []) - - | _ -> - - // Some types such as XmlNodeList have only an Item method + + | _ -> + + // Some types such as XmlNodeList have only an Item method match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AllResults cenv env m ad "Item" tyToSearchForGetEnumeratorAndItem with | (minfo :: others) when (allEquivReturnTypes minfo others && - List.exists isInt32OrObjectIndexer (minfo :: others)) -> + List.exists isInt32OrObjectIndexer (minfo :: others)) -> minfo.GetFSharpReturnTy(cenv.amap, m, []) - + | _ -> enumElemTy - else + else enumElemTy let isEnumeratorTypeStruct = isStructTy cenv.g retTypeOfGetEnumerator let originalRetTypeOfGetEnumerator = retTypeOfGetEnumerator - let (enumeratorVar, enumeratorExpr), retTypeOfGetEnumerator = - if isEnumeratorTypeStruct then - if localAlloc then + let (enumeratorVar, enumeratorExpr), retTypeOfGetEnumerator = + if isEnumeratorTypeStruct then + if localAlloc then mkMutableCompGenLocal m "enumerator" retTypeOfGetEnumerator, retTypeOfGetEnumerator else let refCellTyForRetTypeOfGetEnumerator = mkRefCellTy cenv.g retTypeOfGetEnumerator let v, e = mkMutableCompGenLocal m "enumerator" refCellTyForRetTypeOfGetEnumerator (v, mkRefCellGet cenv.g m retTypeOfGetEnumerator e), refCellTyForRetTypeOfGetEnumerator - + else mkCompGenLocal m "enumerator" retTypeOfGetEnumerator, retTypeOfGetEnumerator - - let getEnumExpr, getEnumTy = + + let getEnumExpr, getEnumTy = let (getEnumExpr, getEnumTy) as res = BuildPossiblyConditionalMethodCall cenv env PossiblyMutates m false getEnumerator_minfo NormalValUse getEnumerator_minst [exprToSearchForGetEnumeratorAndItem] [] - if not isEnumeratorTypeStruct || localAlloc then res - else - // wrap enumerators that are represented as mutable structs into ref cells - let getEnumExpr = mkRefCell cenv.g m originalRetTypeOfGetEnumerator getEnumExpr + if not isEnumeratorTypeStruct || localAlloc then res + else + // wrap enumerators that are represented as mutable structs into ref cells + let getEnumExpr = mkRefCell cenv.g m originalRetTypeOfGetEnumerator getEnumExpr let getEnumTy = mkRefCellTy cenv.g getEnumTy getEnumExpr, getEnumTy @@ -3229,15 +3218,15 @@ let AnalyzeArbitraryExprAsEnumerable cenv (env: TcEnv) localAlloc m exprty expr Result(enumeratorVar, enumeratorExpr, retTypeOfGetEnumerator, enumElemTy, getEnumExpr, getEnumTy, guardExpr, guardTy, currentExpr) // First try the original known static type - match (if isArray1DTy cenv.g exprty then Exception (Failure "") else tryType (expr, exprty)) with + match (if isArray1DTy cenv.g exprty then Exception (Failure "") else tryType (expr, exprty)) with | Result res -> res - | Exception e -> + | Exception e -> let probe ty = - if (AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m ty exprty) then - match tryType (mkCoerceExpr(expr, ty, expr.Range, exprty), ty) with + if (AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m ty exprty) then + match tryType (mkCoerceExpr(expr, ty, expr.Range, exprty), ty) with | Result res -> Some res - | Exception e -> + | Exception e -> PreserveStackTrace e raise e else None @@ -3245,7 +3234,7 @@ let AnalyzeArbitraryExprAsEnumerable cenv (env: TcEnv) localAlloc m exprty expr // Next try to typecheck the thing as a sequence let enumElemTy = NewInferenceType () let exprTyAsSeq = mkSeqTy cenv.g enumElemTy - + match probe exprTyAsSeq with | Some res -> res | None -> @@ -3260,49 +3249,49 @@ let AnalyzeArbitraryExprAsEnumerable cenv (env: TcEnv) localAlloc m exprty expr let ConvertArbitraryExprToEnumerable (cenv: cenv) ty (env: TcEnv) (expr: Expr) = let m = expr.Range let enumElemTy = NewInferenceType () - if AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m ( mkSeqTy cenv.g enumElemTy) ty then + if AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m ( mkSeqTy cenv.g enumElemTy) ty then expr, enumElemTy - else + else let enumerableVar, enumerableExpr = mkCompGenLocal m "inputSequence" ty - let enumeratorVar, _, retTypeOfGetEnumerator, enumElemTy, getEnumExpr, _, guardExpr, guardTy, betterCurrentExpr = + let enumeratorVar, _, retTypeOfGetEnumerator, enumElemTy, getEnumExpr, _, guardExpr, guardTy, betterCurrentExpr = AnalyzeArbitraryExprAsEnumerable cenv env false m ty enumerableExpr - - let expr = - mkCompGenLet m enumerableVar expr + + let expr = + mkCompGenLet m enumerableVar expr (mkCallSeqOfFunctions cenv.g m retTypeOfGetEnumerator enumElemTy (mkUnitDelayLambda cenv.g m getEnumExpr) - (mkLambda m enumeratorVar (guardExpr, guardTy)) + (mkLambda m enumeratorVar (guardExpr, guardTy)) (mkLambda m enumeratorVar (betterCurrentExpr, enumElemTy))) - expr, enumElemTy + expr, enumElemTy //------------------------------------------------------------------------- // Post-transform initialization graphs using the 'lazy' interpretation. // See ML workshop paper. -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -type InitializationGraphAnalysisState = +type InitializationGraphAnalysisState = | Top | InnerTop | DefinitelyStrict | MaybeLazy | DefinitelyLazy -type PreInitializationGraphEliminationBinding = +type PreInitializationGraphEliminationBinding = { FixupPoints: RecursiveUseFixupPoints Binding: Binding } -/// Check for safety and determine if we need to insert lazy thunks -let EliminateInitializationGraphs - g +/// Check for safety and determine if we need to insert lazy thunks +let EliminateInitializationGraphs + g mustHaveArity - denv - (bindings: 'Bindings list) + denv + (bindings: 'Bindings list) (iterBindings: ((PreInitializationGraphEliminationBinding list -> unit) -> 'Bindings list -> unit)) (buildLets: Binding list -> 'Result) (mapBindings: (PreInitializationGraphEliminationBinding list -> Binding list) -> 'Bindings list -> 'Result list) bindsm = - let recursiveVals = + let recursiveVals = let hash = ValHash.Create() let add (pgrbind: PreInitializationGraphEliminationBinding) = let c = pgrbind.Binding.Var in hash.Add(c, c) bindings |> iterBindings (List.iter add) @@ -3315,29 +3304,29 @@ let EliminateInitializationGraphs let mutable reportedEager = false let mutable definiteDependencies = [] - let rec stripChooseAndExpr e = - match stripExpr e with + let rec stripChooseAndExpr e = + match stripExpr e with | Expr.TyChoose (_, b, _) -> stripChooseAndExpr b | e -> e let availIfInOrder = ValHash<_>.Create() - let check boundv expr = + let check boundv expr = let strict = function | MaybeLazy -> MaybeLazy | DefinitelyLazy -> DefinitelyLazy | Top | DefinitelyStrict | InnerTop -> DefinitelyStrict - let lzy = function - | Top | InnerTop | DefinitelyLazy -> DefinitelyLazy + let lzy = function + | Top | InnerTop | DefinitelyLazy -> DefinitelyLazy | MaybeLazy | DefinitelyStrict -> MaybeLazy - let fixable = function + let fixable = function | Top | InnerTop -> InnerTop | DefinitelyStrict -> DefinitelyStrict | MaybeLazy -> MaybeLazy | DefinitelyLazy -> DefinitelyLazy - let rec CheckExpr st e = - match stripChooseAndExpr e with - // Expressions with some lazy parts + let rec CheckExpr st e = + match stripChooseAndExpr e with + // Expressions with some lazy parts | Expr.Lambda (_, _, _, _, b, _, _) -> checkDelayed st b // Type-lambdas are analyzed as if they are strict. @@ -3350,133 +3339,133 @@ let EliminateInitializationGraphs | Expr.TyLambda (_, _, b, _, _) -> CheckExpr st b | Expr.Obj (_, ty, _, e, overrides, extraImpls, _) -> - // NOTE: we can't fixup recursive references inside delegates since the closure delegee of a delegate is not accessible - // from outside. Object expressions implementing interfaces can, on the other hand, be fixed up. See FSharp 1.0 bug 1469 - if isInterfaceTy g ty then + // NOTE: we can't fixup recursive references inside delegates since the closure delegee of a delegate is not accessible + // from outside. Object expressions implementing interfaces can, on the other hand, be fixed up. See FSharp 1.0 bug 1469 + if isInterfaceTy g ty then List.iter (fun (TObjExprMethod(_, _, _, _, e, _)) -> checkDelayed st e) overrides List.iter (snd >> List.iter (fun (TObjExprMethod(_, _, _, _, e, _)) -> checkDelayed st e)) extraImpls - else + else CheckExpr (strict st) e List.iter (fun (TObjExprMethod(_, _, _, _, e, _)) -> CheckExpr (lzy (strict st)) e) overrides List.iter (snd >> List.iter (fun (TObjExprMethod(_, _, _, _, e, _)) -> CheckExpr (lzy (strict st)) e)) extraImpls - - // Expressions where fixups may be needed + + // Expressions where fixups may be needed | Expr.Val (v, _, m) -> CheckValRef st v m - // Expressions where subparts may be fixable - | Expr.Op ((TOp.Tuple _ | TOp.UnionCase _ | TOp.Recd _), _, args, _) -> + // Expressions where subparts may be fixable + | Expr.Op ((TOp.Tuple _ | TOp.UnionCase _ | TOp.Recd _), _, args, _) -> List.iter (CheckExpr (fixable st)) args - // Composite expressions + // Composite expressions | Expr.Const _ -> () | Expr.LetRec (binds, e, _, _) -> - binds |> List.iter (CheckBinding (strict st)) + binds |> List.iter (CheckBinding (strict st)) CheckExpr (strict st) e - | Expr.Let (bind, e, _, _) -> - CheckBinding (strict st) bind + | Expr.Let (bind, e, _, _) -> + CheckBinding (strict st) bind CheckExpr (strict st) e - | Expr.Match (_, _, pt, targets, _, _) -> - CheckDecisionTree (strict st) pt - Array.iter (CheckDecisionTreeTarget (strict st)) targets - | Expr.App (e1, _, _, args, _) -> - CheckExpr (strict st) e1 - List.iter (CheckExpr (strict st)) args - // Binary expressions + | Expr.Match (_, _, pt, targets, _, _) -> + CheckDecisionTree (strict st) pt + Array.iter (CheckDecisionTreeTarget (strict st)) targets + | Expr.App (e1, _, _, args, _) -> + CheckExpr (strict st) e1 + List.iter (CheckExpr (strict st)) args + // Binary expressions | Expr.Sequential (e1, e2, _, _, _) | Expr.StaticOptimization (_, e1, e2, _) -> CheckExpr (strict st) e1; CheckExpr (strict st) e2 - // n-ary expressions + // n-ary expressions | Expr.Op (op, _, args, m) -> CheckExprOp st op m; List.iter (CheckExpr (strict st)) args - // misc + // misc | Expr.Link eref -> CheckExpr st !eref | Expr.TyChoose (_, b, _) -> CheckExpr st b | Expr.Quote _ -> () | Expr.WitnessArg (_witnessInfo, _m) -> () - and CheckBinding st (TBind(_, e, _)) = CheckExpr st e + and CheckBinding st (TBind(_, e, _)) = CheckExpr st e and CheckDecisionTree st = function | TDSwitch(e1, csl, dflt, _) -> CheckExpr st e1; List.iter (fun (TCase(_, d)) -> CheckDecisionTree st d) csl; Option.iter (CheckDecisionTree st) dflt - | TDSuccess (es, _) -> es |> List.iter (CheckExpr st) + | TDSuccess (es, _) -> es |> List.iter (CheckExpr st) | TDBind(bind, e) -> CheckBinding st bind; CheckDecisionTree st e and CheckDecisionTreeTarget st (TTarget(_, e, _)) = CheckExpr st e - and CheckExprOp st op m = - match op with + and CheckExprOp st op m = + match op with | TOp.LValueOp (_, lvr) -> CheckValRef (strict st) lvr m | _ -> () - - and CheckValRef st (v: ValRef) m = - match st with - | MaybeLazy -> - if recursiveVals.TryFind v.Deref |> Option.isSome then - warning (RecursiveUseCheckedAtRuntime (denv, v, m)) - if not reportedEager then + + and CheckValRef st (v: ValRef) m = + match st with + | MaybeLazy -> + if recursiveVals.TryFind v.Deref |> Option.isSome then + warning (RecursiveUseCheckedAtRuntime (denv, v, m)) + if not reportedEager then (warning (LetRecCheckedAtRuntime m); reportedEager <- true) runtimeChecks <- true | Top | DefinitelyStrict -> - if recursiveVals.TryFind v.Deref |> Option.isSome then - if availIfInOrder.TryFind v.Deref |> Option.isNone then - warning (LetRecEvaluatedOutOfOrder (denv, boundv, v, m)) + if recursiveVals.TryFind v.Deref |> Option.isSome then + if availIfInOrder.TryFind v.Deref |> Option.isNone then + warning (LetRecEvaluatedOutOfOrder (denv, boundv, v, m)) outOfOrder <- true - if not reportedEager then + if not reportedEager then (warning (LetRecCheckedAtRuntime m); reportedEager <- true) definiteDependencies <- (boundv, v) :: definiteDependencies - | InnerTop -> - if recursiveVals.TryFind v.Deref |> Option.isSome then + | InnerTop -> + if recursiveVals.TryFind v.Deref |> Option.isSome then directRecursiveData <- true - | DefinitelyLazy -> () - and checkDelayed st b = - match st with + | DefinitelyLazy -> () + and checkDelayed st b = + match st with | MaybeLazy | DefinitelyStrict -> CheckExpr MaybeLazy b - | DefinitelyLazy | Top | InnerTop -> () - - + | DefinitelyLazy | Top | InnerTop -> () + + CheckExpr Top expr - + // Check the bindings one by one, each w.r.t. the previously available set of binding begin - let checkBind (pgrbind: PreInitializationGraphEliminationBinding) = + let checkBind (pgrbind: PreInitializationGraphEliminationBinding) = let (TBind(v, e, _)) = pgrbind.Binding - check (mkLocalValRef v) e + check (mkLocalValRef v) e availIfInOrder.Add(v, 1) bindings |> iterBindings (List.iter checkBind) end - - // ddg = definiteDependencyGraph + + // ddg = definiteDependencyGraph let ddgNodes = recursiveVals.Values |> Seq.toList |> List.map mkLocalValRef let ddg = Graph((fun v -> v.Stamp), ddgNodes, definiteDependencies ) - ddg.IterateCycles (fun path -> error (LetRecUnsound (denv, path, path.Head.Range))) + ddg.IterateCycles (fun path -> error (LetRecUnsound (denv, path, path.Head.Range))) let requiresLazyBindings = runtimeChecks || outOfOrder - if directRecursiveData && requiresLazyBindings then + if directRecursiveData && requiresLazyBindings then error(Error(FSComp.SR.tcInvalidMixtureOfRecursiveForms(), bindsm)) - if requiresLazyBindings then + if requiresLazyBindings then let morphBinding (pgrbind: PreInitializationGraphEliminationBinding) = let (RecursiveUseFixupPoints fixupPoints) = pgrbind.FixupPoints let (TBind(v, e, seqPtOpt)) = pgrbind.Binding match stripChooseAndExpr e with - | Expr.Lambda _ | Expr.TyLambda _ -> - [], [mkInvisibleBind v e] - | _ -> + | Expr.Lambda _ | Expr.TyLambda _ -> + [], [mkInvisibleBind v e] + | _ -> let ty = v.Type let m = v.Range let vty = (mkLazyTy g ty) let fty = (g.unit_ty --> ty) - let flazy, felazy = mkCompGenLocal m v.LogicalName fty + let flazy, felazy = mkCompGenLocal m v.LogicalName fty let frhs = mkUnitDelayLambda g m e if mustHaveArity then flazy.SetValReprInfo (Some(InferArityOfExpr g AllowTypeDirectedDetupling.Yes fty [] [] frhs)) - let vlazy, velazy = mkCompGenLocal m v.LogicalName vty + let vlazy, velazy = mkCompGenLocal m v.LogicalName vty let vrhs = (mkLazyDelayed g m ty felazy) - + if mustHaveArity then vlazy.SetValReprInfo (Some(InferArityOfExpr g AllowTypeDirectedDetupling.Yes vty [] [] vrhs)) fixupPoints |> List.iter (fun (fp, _) -> fp := mkLazyForce g (!fp).Range ty velazy) - [mkInvisibleBind flazy frhs; mkInvisibleBind vlazy vrhs], + [mkInvisibleBind flazy frhs; mkInvisibleBind vlazy vrhs], [mkBind seqPtOpt v (mkLazyForce g m ty velazy)] let newTopBinds = ResizeArray<_>() @@ -3486,164 +3475,164 @@ let EliminateInitializationGraphs if newTopBinds.Count = 0 then res else buildLets (List.concat newTopBinds) :: res else - let noMorph (pgrbinds: PreInitializationGraphEliminationBinding list) = pgrbinds |> List.map (fun pgrbind -> pgrbind.Binding) + let noMorph (pgrbinds: PreInitializationGraphEliminationBinding list) = pgrbinds |> List.map (fun pgrbind -> pgrbind.Binding) bindings |> mapBindings noMorph //------------------------------------------------------------------------- -// Check the shape of an object constructor and rewrite calls -//------------------------------------------------------------------------- +// Check the shape of an object constructor and rewrite calls +//------------------------------------------------------------------------- let CheckAndRewriteObjectCtor g env (ctorLambdaExpr: Expr) = let m = ctorLambdaExpr.Range let tps, vsl, body, returnTy = stripTopLambda (ctorLambdaExpr, tyOfExpr g ctorLambdaExpr) - // Rewrite legitimate self-construction calls to CtorValUsedAsSelfInit - let error (expr: Expr) = + // Rewrite legitimate self-construction calls to CtorValUsedAsSelfInit + let error (expr: Expr) = errorR(Error(FSComp.SR.tcInvalidObjectConstructionExpression(), expr.Range)) expr - // Build an assignment into the safeThisValOpt mutable reference cell that holds recursive references to 'this' + // Build an assignment into the safeThisValOpt mutable reference cell that holds recursive references to 'this' // Build an assignment into the safeInitInfo mutable field that indicates that partial initialization is successful - let rewriteConstruction recdExpr = - match env.eCtorInfo with + let rewriteConstruction recdExpr = + match env.eCtorInfo with | None -> recdExpr - | Some ctorInfo -> - let recdExpr = - match ctorInfo.safeThisValOpt with + | Some ctorInfo -> + let recdExpr = + match ctorInfo.safeThisValOpt with | None -> recdExpr - | Some safeInitVal -> + | Some safeInitVal -> let ty = tyOfExpr g recdExpr let thisExpr = mkGetArg0 m ty let setExpr = mkRefCellSet g m ty (exprForValRef m (mkLocalValRef safeInitVal)) thisExpr Expr.Sequential (recdExpr, setExpr, ThenDoSeq, DebugPointAtSequential.StmtOnly, m) - let recdExpr = - match ctorInfo.safeInitInfo with + let recdExpr = + match ctorInfo.safeInitInfo with | NoSafeInitInfo -> recdExpr - | SafeInitField (rfref, _) -> + | SafeInitField (rfref, _) -> let thisTy = tyOfExpr g recdExpr let thisExpr = mkGetArg0 m thisTy let thisTyInst = argsOfAppTy g thisTy let setExpr = mkRecdFieldSetViaExprAddr (thisExpr, rfref, thisTyInst, mkOne g m, m) Expr.Sequential (recdExpr, setExpr, ThenDoSeq, DebugPointAtSequential.StmtOnly, m) recdExpr + - - let rec checkAndRewrite (expr: Expr) = - match expr with - // = { fields } - // The constructor ends in an object initialization expression - good + let rec checkAndRewrite (expr: Expr) = + match expr with + // = { fields } + // The constructor ends in an object initialization expression - good | Expr.Op (TOp.Recd (RecdExprIsObjInit, _), _, _, _) -> rewriteConstruction expr - // = "a; " - | Expr.Sequential (a, body, NormalSeq, spSeq, b) -> Expr.Sequential (a, checkAndRewrite body, NormalSeq, spSeq, b) + // = "a; " + | Expr.Sequential (a, body, NormalSeq, spSeq, b) -> Expr.Sequential (a, checkAndRewrite body, NormalSeq, spSeq, b) - // = " then " + // = " then " | Expr.Sequential (body, a, ThenDoSeq, spSeq, b) -> Expr.Sequential (checkAndRewrite body, a, ThenDoSeq, spSeq, b) - // = "let pat = expr in " + // = "let pat = expr in " | Expr.Let (bind, body, m, _) -> mkLetBind m bind (checkAndRewrite body) - // The constructor is a sequence "let pat = expr in " + // The constructor is a sequence "let pat = expr in " | Expr.Match (spBind, a, b, targets, c, d) -> Expr.Match (spBind, a, b, (targets |> Array.map (fun (TTarget(vs, body, spTarget)) -> TTarget(vs, checkAndRewrite body, spTarget))), c, d) - // = "let rec binds in " + // = "let rec binds in " | Expr.LetRec (a, body, _, _) -> Expr.LetRec (a, checkAndRewrite body, m, Construct.NewFreeVarsCache()) - // = "new C(...)" - | Expr.App (f, b, c, d, m) -> - // The application had better be an application of a ctor + // = "new C(...)" + | Expr.App (f, b, c, d, m) -> + // The application had better be an application of a ctor let f = checkAndRewriteCtorUsage f let expr = Expr.App (f, b, c, d, m) - rewriteConstruction expr + rewriteConstruction expr - | _ -> + | _ -> error expr - and checkAndRewriteCtorUsage expr = - match expr with - | Expr.Link eref -> + and checkAndRewriteCtorUsage expr = + match expr with + | Expr.Link eref -> let e = checkAndRewriteCtorUsage !eref eref := e expr - - // Type applications are ok, e.g. - // type C<'a>(x: int) = - // new() = C<'a>(3) - | Expr.App (f, fty, tyargs, [], m) -> + + // Type applications are ok, e.g. + // type C<'a>(x: int) = + // new() = C<'a>(3) + | Expr.App (f, fty, tyargs, [], m) -> let f = checkAndRewriteCtorUsage f Expr.App (f, fty, tyargs, [], m) - // Self-calls are OK and get rewritten. + // Self-calls are OK and get rewritten. | Expr.Val (vref, NormalValUse, a) -> - let isCtor = - match vref.MemberInfo with + let isCtor = + match vref.MemberInfo with | None -> false - | Some memberInfo -> memberInfo.MemberFlags.MemberKind = SynMemberKind.Constructor + | Some memberInfo -> memberInfo.MemberFlags.MemberKind = MemberKind.Constructor - if not isCtor then - error expr + if not isCtor then + error expr else Expr.Val (vref, CtorValUsedAsSelfInit, a) - | _ -> + | _ -> error expr - + let body = checkAndRewrite body - mkMultiLambdas m tps vsl (body, returnTy) - + mkMultiLambdas m tps vsl (body, returnTy) + /// Post-typechecking normalizations to enforce semantic constraints /// lazy and, lazy or, rethrow, address-of -let buildApp cenv expr resultTy arg m = +let buildApp cenv expr resultTy arg m = let g = cenv.g - match expr, arg with + match expr, arg with // Special rule for building applications of the 'x && y' operator - | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [x0], _), _), _ - when valRefEq g vf g.and_vref - || valRefEq g vf g.and2_vref -> + | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [x0], _), _), _ + when valRefEq g vf g.and_vref + || valRefEq g vf g.and2_vref -> MakeApplicableExprNoFlex cenv (mkLazyAnd g m x0 arg), resultTy // Special rule for building applications of the 'x || y' operator - | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [x0], _), _), _ + | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [x0], _), _), _ when valRefEq g vf g.or_vref - || valRefEq g vf g.or2_vref -> + || valRefEq g vf g.or2_vref -> MakeApplicableExprNoFlex cenv (mkLazyOr g m x0 arg ), resultTy // Special rule for building applications of the 'reraise' operator - | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [], _), _), _ - when valRefEq g vf g.reraise_vref -> + | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [], _), _), _ + when valRefEq g vf g.reraise_vref -> - // exprty is of type: "unit -> 'a". Break it and store the 'a type here, used later as return type. + // exprty is of type: "unit -> 'a". Break it and store the 'a type here, used later as return type. MakeApplicableExprNoFlex cenv (mkCompGenSequential m arg (mkReraise m resultTy)), resultTy // Special rules for NativePtr.ofByRef to generalize result. // See RFC FS-1053.md - | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [], _), _), _ - when (valRefEq g vf g.nativeptr_tobyref_vref) -> + | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [], _), _), _ + when (valRefEq g vf g.nativeptr_tobyref_vref) -> let argty = NewInferenceType() let resultTy = mkByrefTyWithInference g argty (NewByRefKindInferenceType g m) - expr.SupplyArgument (arg, m), resultTy + expr.SupplyArgument (arg, m), resultTy // Special rules for building applications of the '&expr' operator, which gets the // address of an expression. // // See also RFC FS-1053.md - | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [], _), _), _ - when valRefEq g vf g.addrof_vref -> + | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [], _), _), _ + when valRefEq g vf g.addrof_vref -> let wrap, e1a', readonly, _writeonly = mkExprAddrOfExpr g true false AddressOfOp arg (Some vf) m // Assert the result type to be readonly if we couldn't take the address - let resultTy = + let resultTy = let argTy = tyOfExpr g arg if readonly then mkInByrefTy g argTy // "`outref<'T>` types are never introduced implicitly by F#.", see rationale in RFC FS-1053 // - // We do _not_ introduce outref here, e.g. '&x' where 'x' is outref<_> is _not_ outref. + // We do _not_ introduce outref here, e.g. '&x' where 'x' is outref<_> is _not_ outref. // This effectively makes 'outref<_>' documentation-only. There is frequently a need to pass outref // pointers to .NET library functions whose signatures are not tagged with [] //elif writeonly then @@ -3656,34 +3645,34 @@ let buildApp cenv expr resultTy arg m = // Special rules for building applications of the &&expr' operators, which gets the // address of an expression. - | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [], _), _), _ - when valRefEq g vf g.addrof2_vref -> + | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [], _), _), _ + when valRefEq g vf g.addrof2_vref -> warning(UseOfAddressOfOperator m) let wrap, e1a', _readonly, _writeonly = mkExprAddrOfExpr g true false AddressOfOp arg (Some vf) m MakeApplicableExprNoFlex cenv (wrap(e1a')), resultTy | _ when isByrefTy g resultTy -> - // Handle byref returns, byref-typed returns get implicitly dereferenced + // Handle byref returns, byref-typed returns get implicitly dereferenced let expr = expr.SupplyArgument (arg, m) let expr = mkDerefAddrExpr m expr.Expr m resultTy let resultTy = destByrefTy g resultTy MakeApplicableExprNoFlex cenv expr, resultTy - | _ -> - expr.SupplyArgument (arg, m), resultTy + | _ -> + expr.SupplyArgument (arg, m), resultTy //------------------------------------------------------------------------- // Additional data structures used by type checking -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -type DelayedItem = +type DelayedItem = /// DelayedTypeApp (typeArgs, mTypeArgs, mExprAndTypeArgs) /// /// Represents the in "item" | DelayedTypeApp of SynType list * range * range - /// DelayedApp (isAtomic, argExpr, mFuncAndArg) + /// DelayedApp (isAtomic, argExpr, mFuncAndArg) /// /// Represents the args in "item args", or "item.[args]". | DelayedApp of ExprAtomicFlag * SynExpr * range @@ -3693,34 +3682,34 @@ type DelayedItem = /// Represents an incomplete "item." | DelayedDot - + /// Represents the valueExpr in "item <- valueExpr", also "item.[indexerArgs] <- valueExpr" etc. | DelayedSet of SynExpr * range -let MakeDelayedSet(e: SynExpr, m) = - // We have longId <- e. Wrap 'e' in another pair of parentheses to ensure it's never interpreted as - // a named argument, e.g. for "el.Checked <- (el = el2)" +let MakeDelayedSet(e: SynExpr, m) = + // We have longId <- e. Wrap 'e' in another pair of parentheses to ensure it's never interpreted as + // a named argument, e.g. for "el.Checked <- (el = el2)" DelayedSet (SynExpr.Paren (e, range0, None, e.Range), m) /// Indicates if member declarations are allowed to be abstract members. -type NewSlotsOK = - | NewSlotsOK +type NewSlotsOK = + | NewSlotsOK | NoNewSlots /// Indicates whether a syntactic type is allowed to include new type variables /// not declared anywhere, e.g. `let f (x: 'T option) = x.Value` -type ImplicitlyBoundTyparsAllowed = - | NewTyparsOKButWarnIfNotRigid - | NewTyparsOK +type ImplicitlyBoundTyparsAllowed = + | NewTyparsOKButWarnIfNotRigid + | NewTyparsOK | NoNewTypars /// Indicates whether constraints should be checked when checking syntactic types -type CheckConstraints = - | CheckCxs +type CheckConstraints = + | CheckCxs | NoCheckCxs /// Represents information about the module or type in which a member or value is declared. -type MemberOrValContainerInfo = +type MemberOrValContainerInfo = | MemberOrValContainerInfo of tcref: TyconRef * optIntfSlotTy: (TType * SlotImplSet) option * @@ -3728,18 +3717,18 @@ type MemberOrValContainerInfo = safeInitInfo: SafeInitData * declaredTyconTypars: Typars -/// Provides information about the context for a value or member definition -type ContainerInfo = - | ContainerInfo of - // The nearest containing module. Used as the 'actual' parent for extension members and values - ParentRef * +/// Provides information about the context for a value or member definition +type ContainerInfo = + | ContainerInfo of + // The nearest containing module. Used as the 'actual' parent for extension members and values + ParentRef * // For members: MemberOrValContainerInfo option member x.ParentRef = - let (ContainerInfo(v, _)) = x + let (ContainerInfo(v, _)) = x v - -/// Indicates a declaration is contained in an expression + +/// Indicates a declaration is contained in an expression let ExprContainerInfo = ContainerInfo(ParentNone, None) type NormalizedRecBindingDefn = @@ -3758,35 +3747,35 @@ type ValSpecResult = declaredTypars: Typars * ty: TType * partialValReprInfo: PartialValReprInfo * - declKind: DeclKind + declKind: DeclKind //------------------------------------------------------------------------- // Additional data structures used by checking recursive bindings -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- type RecDefnBindingInfo = - | RecDefnBindingInfo of + | RecDefnBindingInfo of containerInfo: ContainerInfo * newslotsOk: NewSlotsOK * declKind: DeclKind * synBinding: SynBinding -/// RecursiveBindingInfo - flows through initial steps of TcLetrec +/// RecursiveBindingInfo - flows through initial steps of TcLetrec type RecursiveBindingInfo = | RecursiveBindingInfo of recBindIndex: int * // index of the binding in the recursive group - containerInfo: ContainerInfo * - enclosingDeclaredTypars: Typars * - inlineFlag: ValInline * - vspec: Val * - explicitTyparInfo: ExplicitTyparInfo * - partialValReprInfo: PartialValReprInfo * - memberInfoOpt: PreValMemberInfo option * - baseValOpt: Val option * - safeThisValOpt: Val option * - safeInitInfo: SafeInitData * - visibility: SynAccess option * - ty: TType * + containerInfo: ContainerInfo * + enclosingDeclaredTypars: Typars * + inlineFlag: ValInline * + vspec: Val * + explicitTyparInfo: ExplicitTyparInfo * + partialValReprInfo: PartialValReprInfo * + memberInfoOpt: PreValMemberInfo option * + baseValOpt: Val option * + safeThisValOpt: Val option * + safeInitInfo: SafeInitData * + visibility: SynAccess option * + ty: TType * declKind: DeclKind member x.EnclosingDeclaredTypars = let (RecursiveBindingInfo(_, _, enclosingDeclaredTypars, _, _, _, _, _, _, _, _, _, _, _)) = x in enclosingDeclaredTypars @@ -3797,35 +3786,35 @@ type RecursiveBindingInfo = member x.ContainerInfo = let (RecursiveBindingInfo(_, c, _, _, _, _, _, _, _, _, _, _, _, _)) = x in c member x.DeclKind = let (RecursiveBindingInfo(_, _, _, _, _, _, _, _, _, _, _, _, _, declKind)) = x in declKind -type PreCheckingRecursiveBinding = - { SyntacticBinding: NormalizedBinding +type PreCheckingRecursiveBinding = + { SyntacticBinding: NormalizedBinding RecBindingInfo: RecursiveBindingInfo } -type PreGeneralizationRecursiveBinding = +type PreGeneralizationRecursiveBinding = { ExtraGeneralizableTypars: Typars CheckedBinding: CheckedBindingInfo RecBindingInfo: RecursiveBindingInfo } -type PostGeneralizationRecursiveBinding = +type PostGeneralizationRecursiveBinding = { ValScheme: ValScheme CheckedBinding: CheckedBindingInfo RecBindingInfo: RecursiveBindingInfo } member x.GeneralizedTypars = x.ValScheme.GeneralizedTypars -type PostSpecialValsRecursiveBinding = +type PostSpecialValsRecursiveBinding = { ValScheme: ValScheme Binding: Binding } -let CanInferExtraGeneralizedTyparsForRecBinding (pgrbind: PreGeneralizationRecursiveBinding) = +let CanInferExtraGeneralizedTyparsForRecBinding (pgrbind: PreGeneralizationRecursiveBinding) = let explicitTyparInfo = pgrbind.RecBindingInfo.ExplicitTyparInfo let (ExplicitTyparInfo(_, _, canInferTypars)) = explicitTyparInfo let memFlagsOpt = pgrbind.RecBindingInfo.Val.MemberInfo |> Option.map (fun memInfo -> memInfo.MemberFlags) let canInferTypars = GeneralizationHelpers.ComputeCanInferExtraGeneralizableTypars (pgrbind.RecBindingInfo.ContainerInfo.ParentRef, canInferTypars, memFlagsOpt) - canInferTypars + canInferTypars /// Get the "this" variable from an instance member binding let GetInstanceMemberThisVariable (vspec: Val, expr) = - // Skip over LAM tps. Choose 'a. + // Skip over LAM tps. Choose 'a. if vspec.IsInstanceMember then let rec firstArg e = match e with @@ -3833,101 +3822,101 @@ let GetInstanceMemberThisVariable (vspec: Val, expr) = | Expr.TyChoose (_, b, _) -> firstArg b | Expr.Lambda (_, _, _, [v], _, _, _) -> Some v | _ -> failwith "GetInstanceMemberThisVariable: instance member did not have expected internal form" - + firstArg expr else None //------------------------------------------------------------------------- // Checking types and type constraints -//------------------------------------------------------------------------- -/// Check specifications of constraints on type parameters -let rec TcTyparConstraint ridx cenv newOk checkCxs occ (env: TcEnv) tpenv c = +//------------------------------------------------------------------------- +/// Check specifications of constraints on type parameters +let rec TcTyparConstraint ridx cenv newOk checkCxs occ (env: TcEnv) tpenv c = let checkSimpleConstraint tp m constraintAdder = let tp', tpenv = TcTypar cenv env newOk tpenv tp - constraintAdder env.DisplayEnv cenv.css m NoTrace (mkTyparTy tp') - tpenv + constraintAdder env.DisplayEnv cenv.css m NoTrace (mkTyparTy tp') + tpenv - match c with - | SynTypeConstraint.WhereTyparDefaultsToType(tp, ty, m) -> + match c with + | WhereTyparDefaultsToType(tp, ty, m) -> let ty', tpenv = TcTypeAndRecover cenv newOk checkCxs occ env tpenv ty let tp', tpenv = TcTypar cenv env newOk tpenv tp AddCxTyparDefaultsTo env.DisplayEnv cenv.css m env.eContextInfo tp' ridx ty' tpenv - | SynTypeConstraint.WhereTyparSubtypeOfType(tp, ty, m) -> + | WhereTyparSubtypeOfType(tp, ty, m) -> let ty', tpenv = TcTypeAndRecover cenv newOk checkCxs ItemOccurence.UseInType env tpenv ty let tp', tpenv = TcTypar cenv env newOk tpenv tp - if newOk = NoNewTypars && isSealedTy cenv.g ty' then + if newOk = NoNewTypars && isSealedTy cenv.g ty' then errorR(Error(FSComp.SR.tcInvalidConstraintTypeSealed(), m)) - AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css m NoTrace ty' (mkTyparTy tp') + AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css m NoTrace ty' (mkTyparTy tp') tpenv - | SynTypeConstraint.WhereTyparSupportsNull(tp, m) -> checkSimpleConstraint tp m AddCxTypeMustSupportNull - - | SynTypeConstraint.WhereTyparIsComparable(tp, m) -> checkSimpleConstraint tp m AddCxTypeMustSupportComparison + | WhereTyparSupportsNull(tp, m) -> checkSimpleConstraint tp m AddCxTypeMustSupportNull - | SynTypeConstraint.WhereTyparIsEquatable(tp, m) -> checkSimpleConstraint tp m AddCxTypeMustSupportEquality + | WhereTyparIsComparable(tp, m) -> checkSimpleConstraint tp m AddCxTypeMustSupportComparison - | SynTypeConstraint.WhereTyparIsReferenceType(tp, m) -> checkSimpleConstraint tp m AddCxTypeIsReferenceType + | WhereTyparIsEquatable(tp, m) -> checkSimpleConstraint tp m AddCxTypeMustSupportEquality - | SynTypeConstraint.WhereTyparIsValueType(tp, m) -> checkSimpleConstraint tp m AddCxTypeIsValueType + | WhereTyparIsReferenceType(tp, m) -> checkSimpleConstraint tp m AddCxTypeIsReferenceType - | SynTypeConstraint.WhereTyparIsUnmanaged(tp, m) -> checkSimpleConstraint tp m AddCxTypeIsUnmanaged + | WhereTyparIsValueType(tp, m) -> checkSimpleConstraint tp m AddCxTypeIsValueType + + | WhereTyparIsUnmanaged(tp, m) -> checkSimpleConstraint tp m AddCxTypeIsUnmanaged - | SynTypeConstraint.WhereTyparIsEnum(tp, tyargs, m) -> + | WhereTyparIsEnum(tp, tyargs, m) -> let tp', tpenv = TcTypar cenv env newOk tpenv tp - let tpenv = - match tyargs with - | [underlying] -> + let tpenv = + match tyargs with + | [underlying] -> let underlying', tpenv = TcTypeAndRecover cenv newOk checkCxs ItemOccurence.UseInType env tpenv underlying AddCxTypeIsEnum env.DisplayEnv cenv.css m NoTrace (mkTyparTy tp') underlying' tpenv - | _ -> + | _ -> errorR(Error(FSComp.SR.tcInvalidEnumConstraint(), m)) tpenv tpenv - | SynTypeConstraint.WhereTyparIsDelegate(tp, tyargs, m) -> + | WhereTyparIsDelegate(tp, tyargs, m) -> let tp', tpenv = TcTypar cenv env newOk tpenv tp - match tyargs with - | [a;b] -> + match tyargs with + | [a;b] -> let a', tpenv = TcTypeAndRecover cenv newOk checkCxs occ env tpenv a let b', tpenv = TcTypeAndRecover cenv newOk checkCxs occ env tpenv b AddCxTypeIsDelegate env.DisplayEnv cenv.css m NoTrace (mkTyparTy tp') a' b' tpenv - | _ -> + | _ -> errorR(Error(FSComp.SR.tcInvalidEnumConstraint(), m)) tpenv - | SynTypeConstraint.WhereTyparSupportsMember(tps, memSpfn, m) -> + | WhereTyparSupportsMember(tps, memSpfn, m) -> let traitInfo, tpenv = TcPseudoMemberSpec cenv newOk env tps tpenv memSpfn m - match traitInfo with - | TTrait(objtys, ".ctor", memberFlags, argTys, returnTy, _) when memberFlags.MemberKind = SynMemberKind.Constructor -> - match objtys, argTys with + match traitInfo with + | TTrait(objtys, ".ctor", memberFlags, argTys, returnTy, _) when memberFlags.MemberKind = MemberKind.Constructor -> + match objtys, argTys with | [ty], [] when typeEquiv cenv.g ty (GetFSharpViewOfReturnType cenv.g returnTy) -> - AddCxTypeMustSupportDefaultCtor env.DisplayEnv cenv.css m NoTrace ty + AddCxTypeMustSupportDefaultCtor env.DisplayEnv cenv.css m NoTrace ty tpenv - | _ -> + | _ -> errorR(Error(FSComp.SR.tcInvalidNewConstraint(), m)) tpenv - | _ -> + | _ -> AddCxMethodConstraint env.DisplayEnv cenv.css m NoTrace traitInfo tpenv - -and TcPseudoMemberSpec cenv newOk env synTypes 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 tys, tpenv = List.mapFold (TcTypeAndRecover cenv newOk CheckCxs ItemOccurence.UseInType env) tpenv synTypes #endif - match memSpfn with + match memSpfn with | SynMemberSig.Member (valSpfn, memberFlags, m) -> // REVIEW: Test pseudo constraints cannot refer to polymorphic methods. - // REVIEW: Test pseudo constraints cannot be curried. + // REVIEW: Test pseudo constraints cannot be curried. let members, tpenv = TcValSpec cenv env ModuleOrMemberBinding newOk ExprContainerInfo (Some memberFlags) (Some (List.head tys)) tpenv valSpfn [] - match members with - | [ValSpecResult(_, _, id, _, _, memberConstraintTy, partialValReprInfo, _)] -> + match members with + | [ValSpecResult(_, _, id, _, _, memberConstraintTy, partialValReprInfo, _)] -> let memberConstraintTypars, _ = tryDestForallTy cenv.g memberConstraintTy let topValInfo = TranslatePartialArity memberConstraintTypars partialValReprInfo let _, _, curriedArgInfos, returnTy, _ = GetTopValTypeInCompiledForm cenv.g topValInfo 0 memberConstraintTy m @@ -3946,166 +3935,166 @@ and TcPseudoMemberSpec cenv newOk env synTypes tpenv memSpfn m = /// Check a value specification, e.g. in a signature, interface declaration or a constraint and TcValSpec cenv env declKind newOk containerInfo memFlagsOpt thisTyOpt tpenv valSpfn attrs = - let (SynValSig(_, id, ValTyparDecls (synTypars, synTyparConstraints, _), ty, valSynInfo, _, _, _, _, _, m)) = valSpfn + let (ValSpfn(_, id, SynValTyparDecls(synTypars, _, synTyparConstraints), ty, valSynInfo, _, _, _, _, _, m)) = valSpfn let declaredTypars = TcTyparDecls cenv env synTypars let (ContainerInfo(altActualParent, tcrefContainerInfo)) = containerInfo - let enclosingDeclaredTypars, memberContainerInfo, thisTyOpt, declKind = - match tcrefContainerInfo with - | Some(MemberOrValContainerInfo(tcref, _, _, _, declaredTyconTypars)) -> + let enclosingDeclaredTypars, memberContainerInfo, thisTyOpt, declKind = + match tcrefContainerInfo with + | Some(MemberOrValContainerInfo(tcref, _, _, _, declaredTyconTypars)) -> let isExtrinsic = (declKind = ExtrinsicExtensionBinding) let _, enclosingDeclaredTypars, _, _, thisTy = FreshenObjectArgType cenv m TyparRigidity.Rigid tcref isExtrinsic declaredTyconTypars - // An implemented interface type is in terms of the type's type parameters. - // We need a signature in terms of the values' type parameters. - // let optIntfSlotTy = Option.map (instType renaming) optIntfSlotTy in + // An implemented interface type is in terms of the type's type parameters. + // We need a signature in terms of the values' type parameters. + // let optIntfSlotTy = Option.map (instType renaming) optIntfSlotTy in enclosingDeclaredTypars, Some tcref, Some thisTy, declKind - | None -> + | None -> [], None, thisTyOpt, ModuleOrMemberBinding let allDeclaredTypars = enclosingDeclaredTypars @ declaredTypars let envinner = AddDeclaredTypars NoCheckForDuplicateTypars allDeclaredTypars env let checkCxs = CheckCxs let tpenv = TcTyparConstraints cenv newOk checkCxs ItemOccurence.UseInType envinner tpenv synTyparConstraints - + // Treat constraints at the "end" of the type as if they are declared. // This is by far the most convenient place to locate the constraints. - // e.g. - // val FastGenericComparer<'T>: IComparer<'T> when 'T: comparison - let tpenv = - match ty with + // e.g. + // val FastGenericComparer<'T>: IComparer<'T> when 'T: comparison + let tpenv = + match ty with | SynType.WithGlobalConstraints(_, wcs, _) -> TcTyparConstraints cenv newOk checkCxs ItemOccurence.UseInType envinner tpenv wcs - | _ -> + | _ -> tpenv // Enforce "no undeclared constraints allowed on declared typars" allDeclaredTypars |> List.iter (SetTyparRigid env.DisplayEnv m) - // Process the type, including any constraints - let declaredTy, tpenv = TcTypeAndRecover cenv newOk checkCxs ItemOccurence.UseInType envinner tpenv ty - - match memFlagsOpt, thisTyOpt with - | Some memberFlags, Some thisTy -> - let generateOneMember (memberFlags: SynMemberFlags) = + // Process the type, including any constraints + let declaredTy, tpenv = TcTypeAndRecover cenv newOk checkCxs ItemOccurence.UseInType envinner tpenv ty + match memFlagsOpt, thisTyOpt with + | Some memberFlags, Some thisTy -> + let generateOneMember memberFlags = + // Decode members in the signature - let ty', valSynInfo = - match memberFlags.MemberKind with - | SynMemberKind.ClassConstructor - | SynMemberKind.Constructor - | SynMemberKind.Member -> + let ty', valSynInfo = + match memberFlags.MemberKind with + | MemberKind.ClassConstructor + | MemberKind.Constructor + | MemberKind.Member -> declaredTy, valSynInfo - | SynMemberKind.PropertyGet - | SynMemberKind.PropertySet -> + | MemberKind.PropertyGet + | MemberKind.PropertySet -> let fakeArgReprInfos = [ for n in SynInfo.AritiesOfArgs valSynInfo do yield [ for _ in 1 .. n do yield ValReprInfo.unnamedTopArg1 ] ] let arginfos, returnTy = GetTopTauTypeInFSharpForm cenv.g fakeArgReprInfos declaredTy m if arginfos.Length > 1 then error(Error(FSComp.SR.tcInvalidPropertyType(), m)) - match memberFlags.MemberKind with - | SynMemberKind.PropertyGet -> - if SynInfo.HasNoArgs valSynInfo then + match memberFlags.MemberKind with + | MemberKind.PropertyGet -> + if SynInfo.HasNoArgs valSynInfo then (cenv.g.unit_ty --> declaredTy), (SynInfo.IncorporateEmptyTupledArgForPropertyGetter valSynInfo) else declaredTy, valSynInfo - | _ -> + | _ -> let setterTy = (mkRefTupledTy cenv.g (List.map fst (List.concat arginfos) @ [returnTy]) --> cenv.g.unit_ty) let synInfo = SynInfo.IncorporateSetterArg valSynInfo setterTy, synInfo - | SynMemberKind.PropertyGetSet -> - error(InternalError("Unexpected SynMemberKind.PropertyGetSet from signature parsing", m)) + | MemberKind.PropertyGetSet -> + error(InternalError("Unexpected MemberKind.PropertyGetSet from signature parsing", m)) // Take "unit" into account in the signature let valSynInfo = AdjustValSynInfoInSignature cenv.g ty' valSynInfo - let ty', valSynInfo = - if memberFlags.IsInstance then + let ty', valSynInfo = + if memberFlags.IsInstance then (thisTy --> ty'), (SynInfo.IncorporateSelfArg valSynInfo) else ty', valSynInfo - let reallyGenerateOneMember(id: Ident, valSynInfo, ty', memberFlags) = - let (PartialValReprInfo(argsData, _)) as partialValReprInfo = + let reallyGenerateOneMember(id: Ident, valSynInfo, ty', memberFlags) = + let (PartialValReprInfo(argsData, _)) as partialValReprInfo = TranslateTopValSynInfo id.idRange (TcAttributes cenv env) valSynInfo - // Fold in the optional argument information - // Resort to using the syntactic argument information since that is what tells us - // what is optional and what is not. - let ty' = + // Fold in the optional argument information + // Resort to using the syntactic argument information since that is what tells us + // what is optional and what is not. + let ty' = - if SynInfo.HasOptionalArgs valSynInfo then + if SynInfo.HasOptionalArgs valSynInfo then let curriedArgTys, returnTy = GetTopTauTypeInFSharpForm cenv.g argsData ty' m - let curriedArgTys = - ((List.mapSquared fst curriedArgTys), valSynInfo.CurriedArgInfos) - ||> List.map2 (fun argTys argInfos -> - (argTys, argInfos) - ||> List.map2 (fun argty argInfo -> + let curriedArgTys = + (List.zip (List.mapSquared fst curriedArgTys) valSynInfo.CurriedArgInfos) + |> List.map (fun (argTys, argInfos) -> + (List.zip argTys argInfos) + |> List.map (fun (argty, argInfo) -> if SynInfo.IsOptionalArg argInfo then mkOptionTy cenv.g argty else argty)) mkIteratedFunTy (List.map (mkRefTupledTy cenv.g) curriedArgTys) returnTy - else ty' - - let memberInfoOpt = - match memberContainerInfo with - | Some tcref -> + else ty' + + let memberInfoOpt = + match memberContainerInfo with + | Some tcref -> let isExtrinsic = (declKind = ExtrinsicExtensionBinding) let memberInfoTransient = MakeMemberDataAndMangledNameForMemberVal(cenv.g, tcref, isExtrinsic, attrs, [], memberFlags, valSynInfo, id, false) Some memberInfoTransient - | None -> + | None -> None - + ValSpecResult(altActualParent, memberInfoOpt, id, enclosingDeclaredTypars, declaredTypars, ty', partialValReprInfo, declKind) [ yield reallyGenerateOneMember(id, valSynInfo, ty', memberFlags) - if CompileAsEvent cenv.g attrs then + if CompileAsEvent cenv.g attrs then let valSynInfo = EventDeclarationNormalization.ConvertSynInfo id.idRange valSynInfo let memberFlags = EventDeclarationNormalization.ConvertMemberFlags memberFlags - let delTy = FindDelegateTypeOfPropertyEvent cenv.g cenv.amap id.idText id.idRange declaredTy - let ty = - if memberFlags.IsInstance then + let delTy = FindDelegateTypeOfPropertyEvent cenv.g cenv.amap id.idText id.idRange declaredTy + let ty = + if memberFlags.IsInstance then thisTy --> (delTy --> cenv.g.unit_ty) - else + else (delTy --> cenv.g.unit_ty) yield reallyGenerateOneMember(ident("add_" + id.idText, id.idRange), valSynInfo, ty, memberFlags) yield reallyGenerateOneMember(ident("remove_" + id.idText, id.idRange), valSynInfo, ty, memberFlags) ] - - - - match memberFlags.MemberKind with - | SynMemberKind.ClassConstructor - | SynMemberKind.Constructor - | SynMemberKind.Member - | SynMemberKind.PropertyGet - | SynMemberKind.PropertySet -> + + + + match memberFlags.MemberKind with + | MemberKind.ClassConstructor + | MemberKind.Constructor + | MemberKind.Member + | MemberKind.PropertyGet + | MemberKind.PropertySet -> generateOneMember memberFlags, tpenv - | SynMemberKind.PropertyGetSet -> - [ yield! generateOneMember({memberFlags with MemberKind=SynMemberKind.PropertyGet}) - yield! generateOneMember({memberFlags with MemberKind=SynMemberKind.PropertySet}) ], tpenv + | MemberKind.PropertyGetSet -> + [ yield! generateOneMember({memberFlags with MemberKind=MemberKind.PropertyGet}) + yield! generateOneMember({memberFlags with MemberKind=MemberKind.PropertySet}) ], tpenv | _ -> let valSynInfo = AdjustValSynInfoInSignature cenv.g declaredTy valSynInfo let partialValReprInfo = TranslateTopValSynInfo id.idRange (TcAttributes cenv env) valSynInfo [ ValSpecResult(altActualParent, None, id, enclosingDeclaredTypars, declaredTypars, declaredTy, partialValReprInfo, declKind) ], tpenv //------------------------------------------------------------------------- -// Bind types -//------------------------------------------------------------------------- +// Bind types +//------------------------------------------------------------------------- /// Check and elaborate a type or measure parameter occurrence /// If optKind=Some kind, then this is the kind we're expecting (we're in *analysis* mode) /// If optKind=None, we need to determine the kind (we're in *synthesis* mode) /// -and TcTyparOrMeasurePar optKind cenv (env: TcEnv) newOk tpenv (SynTypar(id, _, _) as tp) = +and TcTyparOrMeasurePar optKind cenv (env: TcEnv) newOk tpenv (Typar(id, _, _) as tp) = let checkRes (res: Typar) = match optKind, res.Kind with | Some TyparKind.Measure, TyparKind.Type -> error (Error(FSComp.SR.tcExpectedUnitOfMeasureMarkWithAttribute(), id.idRange)); res, tpenv | Some TyparKind.Type, TyparKind.Measure -> error (Error(FSComp.SR.tcExpectedTypeParameter(), id.idRange)); res, tpenv - | _, _ -> + | _, _ -> let item = Item.TypeVar(id.idText, res) CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.UseInType, env.AccessRights) res, tpenv let key = id.idText match env.eNameResEnv.eTypars.TryGetValue key with | true, res -> checkRes res - | _ -> + | _ -> match TryFindUnscopedTypar key tpenv with | Some res -> checkRes res - | None -> + | None -> if newOk = NoNewTypars then let suggestTypeParameters (addToBuffer: string -> unit) = for p in env.eNameResEnv.eTypars do @@ -4118,8 +4107,8 @@ and TcTyparOrMeasurePar optKind cenv (env: TcEnv) newOk tpenv (SynTypar(id, _, _ let reportedId = Ident("'" + id.idText, id.idRange) error (UndefinedName(0, FSComp.SR.undefinedNameTypeParameter, reportedId, suggestTypeParameters)) - - // OK, this is an implicit declaration of a type parameter + + // OK, this is an implicit declaration of a type parameter // The kind defaults to Type let kind = match optKind with None -> TyparKind.Type | Some kind -> kind let tp' = Construct.NewTypar (kind, TyparRigidity.WarnIfNotRigid, tp, false, TyparDynamicReq.Yes, [], false, false) @@ -4130,7 +4119,7 @@ and TcTyparOrMeasurePar optKind cenv (env: TcEnv) newOk tpenv (SynTypar(id, _, _ and TcTypar cenv env newOk tpenv tp = TcTyparOrMeasurePar (Some TyparKind.Type) cenv env newOk tpenv tp -and TcTyparDecl cenv env (SynTyparDecl(Attributes synAttrs, (SynTypar(id, _, _) as stp))) = +and TcTyparDecl cenv env (TyparDecl(Attributes synAttrs, (Typar(id, _, _) as stp))) = let attrs = TcAttributes cenv env AttributeTargets.GenericParameter synAttrs let hasMeasureAttr = HasFSharpAttribute cenv.g cenv.g.attrib_MeasureAttribute attrs let hasEqDepAttr = HasFSharpAttribute cenv.g cenv.g.attrib_EqualityConditionalOnAttribute attrs @@ -4138,15 +4127,15 @@ and TcTyparDecl cenv env (SynTyparDecl(Attributes synAttrs, (SynTypar(id, _, _) let attrs = attrs |> List.filter (IsMatchingFSharpAttribute cenv.g cenv.g.attrib_MeasureAttribute >> not) let kind = if hasMeasureAttr then TyparKind.Measure else TyparKind.Type let tp = Construct.NewTypar (kind, TyparRigidity.WarnIfNotRigid, stp, false, TyparDynamicReq.Yes, attrs, hasEqDepAttr, hasCompDepAttr) - match TryFindFSharpStringAttribute cenv.g cenv.g.attrib_CompiledNameAttribute attrs with - | Some compiledName -> + match TryFindFSharpStringAttribute cenv.g cenv.g.attrib_CompiledNameAttribute attrs with + | Some compiledName -> tp.SetILName (Some compiledName) - | None -> + | None -> () let item = Item.TypeVar(id.idText, tp) CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.UseInType, env.eAccessRights) tp - + and TcTyparDecls cenv env synTypars = List.map (TcTyparDecl cenv env) synTypars @@ -4157,70 +4146,70 @@ and TcTyparDecls cenv env synTypars = List.map (TcTyparDecl cenv env) synTypars and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv) ty = let g = cenv.g - match ty with - | SynType.LongIdent(LongIdentWithDots([], _)) -> + match ty with + | SynType.LongIdent(LongIdentWithDots([], _)) -> // special case when type name is absent - i.e. empty inherit part in type declaration g.obj_ty, tpenv - | SynType.LongIdent(LongIdentWithDots(tc, _) as lidwd) -> + | SynType.LongIdent(LongIdentWithDots(tc, _) as lidwd) -> let m = lidwd.Range let ad = env.eAccessRights let tinstEnclosing, tcref = ForceRaise(ResolveTypeLongIdent cenv.tcSink cenv.nameResolver occ OpenQualified env.NameEnv ad tc TypeNameResolutionStaticArgsInfo.DefiniteEmpty PermitDirectReferenceToGeneratedType.No) match optKind, tcref.TypeOrMeasureKind with | Some TyparKind.Type, TyparKind.Measure -> - error(Error(FSComp.SR.tcExpectedTypeNotUnitOfMeasure(), m)) + error(Error(FSComp.SR.tcExpectedTypeNotUnitOfMeasure(), m)) NewErrorType (), tpenv | Some TyparKind.Measure, TyparKind.Type -> - error(Error(FSComp.SR.tcExpectedUnitOfMeasureNotType(), m)) + error(Error(FSComp.SR.tcExpectedUnitOfMeasureNotType(), m)) TType_measure (NewErrorMeasure ()), tpenv | _, TyparKind.Measure -> TType_measure (Measure.Con tcref), tpenv | _, TyparKind.Type -> TcTypeApp cenv newOk checkCxs occ env tpenv m tcref tinstEnclosing [] - | SynType.App (StripParenTypes (SynType.LongIdent(LongIdentWithDots(tc, _))), _, args, _commas, _, postfix, m) -> + | SynType.App (StripParenTypes (SynType.LongIdent(LongIdentWithDots(tc, _))), _, args, _commas, _, postfix, m) -> let ad = env.eAccessRights - let tinstEnclosing, tcref = + let tinstEnclosing, tcref = let tyResInfo = TypeNameResolutionStaticArgsInfo.FromTyArgs args.Length ResolveTypeLongIdent cenv.tcSink cenv.nameResolver ItemOccurence.UseInType OpenQualified env.eNameResEnv ad tc tyResInfo PermitDirectReferenceToGeneratedType.No |> ForceRaise match optKind, tcref.TypeOrMeasureKind with | Some TyparKind.Type, TyparKind.Measure -> - error(Error(FSComp.SR.tcExpectedTypeNotUnitOfMeasure(), m)) + error(Error(FSComp.SR.tcExpectedTypeNotUnitOfMeasure(), m)) NewErrorType (), tpenv | Some TyparKind.Measure, TyparKind.Type -> - error(Error(FSComp.SR.tcExpectedUnitOfMeasureNotType(), m)) + error(Error(FSComp.SR.tcExpectedUnitOfMeasureNotType(), m)) TType_measure (NewErrorMeasure ()), tpenv | _, TyparKind.Type -> - if postfix && tcref.Typars m |> List.exists (fun tp -> match tp.Kind with TyparKind.Measure -> true | _ -> false) + if postfix && tcref.Typars m |> List.exists (fun tp -> match tp.Kind with TyparKind.Measure -> true | _ -> false) then error(Error(FSComp.SR.tcInvalidUnitsOfMeasurePrefix(), m)) - TcTypeApp cenv newOk checkCxs occ env tpenv m tcref tinstEnclosing args + TcTypeApp cenv newOk checkCxs occ env tpenv m tcref tinstEnclosing args | _, TyparKind.Measure -> match args, postfix with | [arg], true -> let ms, tpenv = TcMeasure cenv newOk checkCxs occ env tpenv arg m TType_measure (Measure.Prod(Measure.Con tcref, ms)), tpenv - + | _, _ -> errorR(Error(FSComp.SR.tcUnitsOfMeasureInvalidInTypeConstructor(), m)) - NewErrorType (), tpenv + NewErrorType (), tpenv - | SynType.LongIdentApp (ltyp, LongIdentWithDots(longId, _), _, args, _commas, _, m) -> + | SynType.LongIdentApp (ltyp, LongIdentWithDots(longId, _), _, args, _commas, _, m) -> let ad = env.eAccessRights let ltyp, tpenv = TcType cenv newOk checkCxs occ env tpenv ltyp match ltyp with | AppTy g (tcref, tinst) -> - let tcref = ResolveTypeLongIdentInTyconRef cenv.tcSink cenv.nameResolver env.eNameResEnv (TypeNameResolutionInfo.ResolveToTypeRefs (TypeNameResolutionStaticArgsInfo.FromTyArgs args.Length)) ad m tcref longId - TcTypeApp cenv newOk checkCxs occ env tpenv m tcref tinst args + let tcref = ResolveTypeLongIdentInTyconRef cenv.tcSink cenv.nameResolver env.eNameResEnv (TypeNameResolutionInfo.ResolveToTypeRefs (TypeNameResolutionStaticArgsInfo.FromTyArgs args.Length)) ad m tcref longId + TcTypeApp cenv newOk checkCxs occ env tpenv m tcref tinst args | _ -> error(Error(FSComp.SR.tcTypeHasNoNestedTypes(), m)) - | SynType.Tuple(isStruct, args, m) -> + | SynType.Tuple(isStruct, args, m) -> let tupInfo = mkTupInfo isStruct - if isStruct then + if isStruct then let args',tpenv = TcTypesAsTuple cenv newOk checkCxs occ env tpenv args m TType_tuple(tupInfo,args'),tpenv else @@ -4232,38 +4221,38 @@ and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv let args',tpenv = TcTypesAsTuple cenv newOk checkCxs occ env tpenv args m TType_tuple(tupInfo,args'),tpenv - | SynType.AnonRecd(_, [],m) -> + | SynType.AnonRecd(_, [],m) -> error(Error((FSComp.SR.tcAnonymousTypeInvalidInDeclaration()), m)) - | SynType.AnonRecd(isStruct, args,m) -> + | SynType.AnonRecd(isStruct, args,m) -> let tupInfo = mkTupInfo isStruct let args',tpenv = TcTypesAsTuple cenv newOk checkCxs occ env tpenv (args |> List.map snd |> List.map (fun x -> (false,x))) m let unsortedFieldIds = args |> List.map fst |> List.toArray let anonInfo = AnonRecdTypeInfo.Create(cenv.topCcu, tupInfo, unsortedFieldIds) // Sort into canonical order let sortedFieldTys, sortedCheckedArgTys = List.zip args args' |> List.indexed |> List.sortBy (fun (i,_) -> unsortedFieldIds.[i].idText) |> List.map snd |> List.unzip - sortedFieldTys |> List.iteri (fun i (x,_) -> + sortedFieldTys |> List.iteri (fun i (x,_) -> let item = Item.AnonRecdField(anonInfo, sortedCheckedArgTys, i, x.idRange) CallNameResolutionSink cenv.tcSink (x.idRange,env.NameEnv,item,emptyTyparInst,ItemOccurence.UseInType,env.eAccessRights)) TType_anon(anonInfo, sortedCheckedArgTys),tpenv - | SynType.Fun(domainTy, resultTy, _) -> + | SynType.Fun(domainTy, resultTy, _) -> let domainTy', tpenv = TcTypeAndRecover cenv newOk checkCxs occ env tpenv domainTy let resultTy', tpenv = TcTypeAndRecover cenv newOk checkCxs occ env tpenv resultTy (domainTy' --> resultTy'), tpenv - | SynType.Array (n, elemTy, m) -> + | SynType.Array (n, elemTy, m) -> let elemTy, tpenv = TcTypeAndRecover cenv newOk checkCxs occ env tpenv elemTy mkArrayTy g n elemTy m, tpenv - | SynType.Var (tp, _) -> + | SynType.Var (tp, _) -> let tp', tpenv = TcTyparOrMeasurePar optKind cenv env newOk tpenv tp match tp'.Kind with | TyparKind.Measure -> TType_measure (Measure.Var tp'), tpenv | TyparKind.Type -> mkTyparTy tp', tpenv // _ types - | SynType.Anon m -> + | SynType.Anon m -> let tp: Typar = TcAnonTypeOrMeasure optKind cenv TyparRigidity.Anon TyparDynamicReq.No newOk m match tp.Kind with | TyparKind.Measure -> TType_measure (Measure.Var tp), tpenv @@ -4274,43 +4263,43 @@ and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv let tpenv = TcTyparConstraints cenv newOk checkCxs occ env tpenv wcs cty, tpenv - // #typ - | SynType.HashConstraint(ty, m) -> + // #typ + | SynType.HashConstraint(ty, m) -> let tp = TcAnonTypeOrMeasure (Some TyparKind.Type) cenv TyparRigidity.WarnIfNotRigid TyparDynamicReq.Yes newOk m let ty', tpenv = TcTypeAndRecover cenv newOk checkCxs occ env tpenv ty - AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css m NoTrace ty' (mkTyparTy tp) + AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css m NoTrace ty' (mkTyparTy tp) tp.AsType, tpenv | SynType.StaticConstant (c, m) -> match c, optKind with - | _, Some TyparKind.Type -> - errorR(Error(FSComp.SR.parsInvalidLiteralInType(), m)) + | _, Some TyparKind.Type -> + errorR(Error(FSComp.SR.parsInvalidLiteralInType(), m)) NewErrorType (), tpenv - | SynConst.Int32 1, _ -> + | SynConst.Int32 1, _ -> TType_measure Measure.One, tpenv - | _ -> - errorR(Error(FSComp.SR.parsInvalidLiteralInType(), m)) + | _ -> + errorR(Error(FSComp.SR.parsInvalidLiteralInType(), m)) NewErrorType (), tpenv | SynType.StaticConstantNamed (_, _, m) | SynType.StaticConstantExpr (_, m) -> - errorR(Error(FSComp.SR.parsInvalidLiteralInType(), m)) + errorR(Error(FSComp.SR.parsInvalidLiteralInType(), m)) NewErrorType (), tpenv | SynType.MeasurePower(ty, exponent, m) -> match optKind with - | Some TyparKind.Type -> - errorR(Error(FSComp.SR.tcUnexpectedSymbolInTypeExpression("^"), m)) + | Some TyparKind.Type -> + errorR(Error(FSComp.SR.tcUnexpectedSymbolInTypeExpression("^"), m)) NewErrorType (), tpenv - | _ -> + | _ -> let ms, tpenv = TcMeasure cenv newOk checkCxs occ env tpenv ty m TType_measure (Measure.RationalPower (ms, TcSynRationalConst exponent)), tpenv - | SynType.MeasureDivide(typ1, typ2, m) -> + | SynType.MeasureDivide(typ1, typ2, m) -> match optKind with - | Some TyparKind.Type -> - errorR(Error(FSComp.SR.tcUnexpectedSymbolInTypeExpression("/"), m)) + | Some TyparKind.Type -> + errorR(Error(FSComp.SR.tcUnexpectedSymbolInTypeExpression("/"), m)) NewErrorType (), tpenv | _ -> let ms1, tpenv = TcMeasure cenv newOk checkCxs occ env tpenv typ1 m @@ -4325,7 +4314,7 @@ and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv TType_measure (Measure.Prod(ms1, ms2)), tpenv | _ -> - errorR(Error(FSComp.SR.tcTypeParameterInvalidAsTypeConstructor(), m)) + errorR(Error(FSComp.SR.tcTypeParameterInvalidAsTypeConstructor(), m)) NewErrorType (), tpenv | SynType.App(_, _, _, _, _, _, m) -> @@ -4335,10 +4324,10 @@ and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv | SynType.Paren(innerType, _) -> TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv) innerType -and TcType cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv) ty = +and TcType cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv) ty = TcTypeOrMeasure (Some TyparKind.Type) cenv newOk checkCxs occ env tpenv ty -and TcMeasure cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv) (StripParenTypes ty) m = +and TcMeasure cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv) (StripParenTypes ty) m = match ty with | SynType.Anon m -> error(Error(FSComp.SR.tcAnonymousUnitsOfMeasureCannotBeNested(), m)) @@ -4346,35 +4335,35 @@ and TcMeasure cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv) (StripParenT | _ -> match TcTypeOrMeasure (Some TyparKind.Measure) cenv newOk checkCxs occ env tpenv ty with | TType_measure ms, tpenv -> ms, tpenv - | _ -> - error(Error(FSComp.SR.tcExpectedUnitOfMeasureNotType(), m)) + | _ -> + error(Error(FSComp.SR.tcExpectedUnitOfMeasureNotType(), m)) NewErrorMeasure (), tpenv and TcAnonTypeOrMeasure optKind _cenv rigid dyn newOk m = if newOk = NoNewTypars then errorR (Error(FSComp.SR.tcAnonymousTypeInvalidInDeclaration(), m)) let rigid = (if rigid = TyparRigidity.Anon && newOk = NewTyparsOKButWarnIfNotRigid then TyparRigidity.WarnIfNotRigid else rigid) let kind = match optKind with Some TyparKind.Measure -> TyparKind.Measure | _ -> TyparKind.Type - NewAnonTypar (kind, m, rigid, TyparStaticReq.None, dyn) - + NewAnonTypar (kind, m, rigid, NoStaticReq, dyn) + and TcTypes cenv newOk checkCxs occ env tpenv args = - List.mapFold (TcTypeAndRecover cenv newOk checkCxs occ env) tpenv args + List.mapFold (TcTypeAndRecover cenv newOk checkCxs occ env) tpenv args -and TcTypesAsTuple cenv newOk checkCxs occ env tpenv args m = +and TcTypesAsTuple cenv newOk checkCxs occ env tpenv args m = match args with | [] -> error(InternalError("empty tuple type", m)) | [(_, ty)] -> let ty, tpenv = TcTypeAndRecover cenv newOk checkCxs occ env tpenv ty in [ty], tpenv - | (isquot, ty) :: args -> + | (isquot, ty) :: args -> let ty, tpenv = TcTypeAndRecover cenv newOk checkCxs occ env tpenv ty let tys, tpenv = TcTypesAsTuple cenv newOk checkCxs occ env tpenv args m if isquot then errorR(Error(FSComp.SR.tcUnexpectedSlashInType(), m)) ty :: tys, tpenv // Type-check a list of measures separated by juxtaposition, * or / -and TcMeasuresAsTuple cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv) args m = +and TcMeasuresAsTuple cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv) args m = let rec gather args tpenv isquot acc = match args with | [] -> acc, tpenv - | (nextisquot, ty) :: args -> + | (nextisquot, ty) :: args -> let ms1, tpenv = TcMeasure cenv newOk checkCxs occ env tpenv ty m gather args tpenv nextisquot (if isquot then Measure.Prod(acc, Measure.Inv ms1) else Measure.Prod(acc, ms1)) gather args tpenv false Measure.One @@ -4384,21 +4373,21 @@ and TcTypesOrMeasures optKinds cenv newOk checkCxs occ env tpenv args m = | None -> List.mapFold (TcTypeOrMeasure None cenv newOk checkCxs occ env) tpenv args | Some kinds -> - if List.length kinds = List.length args then + if List.length kinds = List.length args then List.mapFold (fun tpenv (arg, kind) -> TcTypeOrMeasure (Some kind) cenv newOk checkCxs occ env tpenv arg) tpenv (List.zip args kinds) elif isNil kinds then error(Error(FSComp.SR.tcUnexpectedTypeArguments(), m)) else error(Error(FSComp.SR.tcTypeParameterArityMismatch((List.length kinds), (List.length args)), m)) and TcTyparConstraints cenv newOk checkCxs occ env tpenv synConstraints = - // Mark up default constraints with a priority in reverse order: last gets 0, second - // last gets 1 etc. See comment on TyparConstraint.DefaultsTo + // Mark up default constraints with a priority in reverse order: last gets 0, second + // last gets 1 etc. See comment on TyparConstraint.DefaultsTo let _, tpenv = List.fold (fun (ridx, tpenv) tc -> ridx - 1, TcTyparConstraint ridx cenv newOk checkCxs occ env tpenv tc) (List.length synConstraints - 1, tpenv) synConstraints tpenv #if !NO_EXTENSIONTYPING and TcStaticConstantParameter cenv (env: TcEnv) tpenv kind (StripParenTypes v) idOpt container = let g = cenv.g - let fail() = error(Error(FSComp.SR.etInvalidStaticArgument(NicePrint.minimalStringOfType env.DisplayEnv kind), v.Range)) + let fail() = error(Error(FSComp.SR.etInvalidStaticArgument(NicePrint.minimalStringOfType env.DisplayEnv kind), v.Range)) let record ttype = match idOpt with | Some id -> @@ -4406,7 +4395,7 @@ and TcStaticConstantParameter cenv (env: TcEnv) tpenv kind (StripParenTypes v) i CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.Use, env.AccessRights) | _ -> () - match v with + match v with | SynType.StaticConstant(sc, _) -> let v = match sc with @@ -4422,8 +4411,7 @@ and TcStaticConstantParameter cenv (env: TcEnv) tpenv kind (StripParenTypes v) i | SynConst.Single n when typeEquiv g g.float32_ty kind -> record(g.float32_ty); box (n: single) | SynConst.Double n when typeEquiv g g.float_ty kind -> record(g.float_ty); box (n: double) | SynConst.Char n when typeEquiv g g.char_ty kind -> record(g.char_ty); box (n: char) - | SynConst.String (s, _, _) - | SynConst.SourceIdentifier (_, s, _) when s <> null && typeEquiv g g.string_ty kind -> record(g.string_ty); box (s: string) + | SynConst.String (s, _) when s <> null && typeEquiv g g.string_ty kind -> record(g.string_ty); box (s: string) | SynConst.Bool b when typeEquiv g g.bool_ty kind -> record(g.bool_ty); box (b: bool) | _ -> fail() v, tpenv @@ -4434,10 +4422,10 @@ and TcStaticConstantParameter cenv (env: TcEnv) tpenv kind (StripParenTypes v) i // Evaluate the constant expression using static attribute argument rules let te = EvalLiteralExprOrAttribArg g te - let v = - match stripExpr te with + let v = + match stripExpr te with // Check we have a residue constant. We know the type was correct because we checked the expression with this type. - | Expr.Const (c, _, _) -> + | Expr.Const (c, _, _) -> match c with | Const.Byte n -> record(g.byte_ty); box (n: byte) | Const.Int16 n -> record(g.int16_ty); box (n: int16) @@ -4451,7 +4439,7 @@ and TcStaticConstantParameter cenv (env: TcEnv) tpenv kind (StripParenTypes v) i | Const.Single n -> record(g.float32_ty); box (n: single) | Const.Double n -> record(g.float_ty); box (n: double) | Const.Char n -> record(g.char_ty); box (n: char) - | Const.String null -> fail() + | Const.String null -> fail() | Const.String s -> record(g.string_ty); box (s: string) | Const.Bool b -> record(g.bool_ty); box (b: bool) | _ -> fail() @@ -4460,12 +4448,12 @@ and TcStaticConstantParameter cenv (env: TcEnv) tpenv kind (StripParenTypes v) i | SynType.LongIdent lidwd -> let m = lidwd.Range TcStaticConstantParameter cenv env tpenv kind (SynType.StaticConstantExpr(SynExpr.LongIdent (false, lidwd, None, m), m)) idOpt container - | _ -> + | _ -> fail() and CrackStaticConstantArgs cenv env tpenv (staticParameters: Tainted[], args: SynType list, container, containerName, m) = - let args = - args |> List.map (function + let args = + args |> List.map (function | StripParenTypes (SynType.StaticConstantNamed(StripParenTypes (SynType.LongIdent(LongIdentWithDots([id], _))), v, _)) -> Some id, v | v -> None, v) @@ -4473,73 +4461,73 @@ and CrackStaticConstantArgs cenv env tpenv (staticParameters: Tainted List.skipWhile (fst >> Option.isNone) let namedArgs = otherArgs |> List.takeWhile (fst >> Option.isSome) |> List.map (map1Of2 Option.get) let otherArgs = otherArgs |> List.skipWhile (fst >> Option.isSome) - if not otherArgs.IsEmpty then + if not otherArgs.IsEmpty then error (Error(FSComp.SR.etBadUnnamedStaticArgs(), m)) let indexedStaticParameters = staticParameters |> Array.toList |> List.indexed for (n, _) in namedArgs do match indexedStaticParameters |> List.filter (fun (j, sp) -> j >= unnamedArgs.Length && n.idText = sp.PUntaint((fun sp -> sp.Name), m)) with - | [] -> - if staticParameters |> Array.exists (fun sp -> n.idText = sp.PUntaint((fun sp -> sp.Name), n.idRange)) then + | [] -> + if staticParameters |> Array.exists (fun sp -> n.idText = sp.PUntaint((fun sp -> sp.Name), n.idRange)) then error (Error(FSComp.SR.etStaticParameterAlreadyHasValue n.idText, n.idRange)) else error (Error(FSComp.SR.etNoStaticParameterWithName n.idText, n.idRange)) | [_] -> () | _ -> error (Error(FSComp.SR.etMultipleStaticParameterWithName n.idText, n.idRange)) - if staticParameters.Length < namedArgs.Length + unnamedArgs.Length then + if staticParameters.Length < namedArgs.Length + unnamedArgs.Length then error (Error(FSComp.SR.etTooManyStaticParameters(staticParameters.Length, unnamedArgs.Length, namedArgs.Length), m)) - let argsInStaticParameterOrderIncludingDefaults = - staticParameters |> Array.mapi (fun i sp -> + let argsInStaticParameterOrderIncludingDefaults = + staticParameters |> Array.mapi (fun i sp -> let spKind = Import.ImportProvidedType cenv.amap m (sp.PApply((fun x -> x.ParameterType), m)) let spName = sp.PUntaint((fun sp -> sp.Name), m) - if i < unnamedArgs.Length then + if i < unnamedArgs.Length then let v = unnamedArgs.[i] let v, _tpenv = TcStaticConstantParameter cenv env tpenv spKind v None container v else - match namedArgs |> List.filter (fun (n, _) -> n.idText = spName) with - | [(n, v)] -> + match namedArgs |> List.filter (fun (n, _) -> n.idText = spName) with + | [(n, v)] -> let v, _tpenv = TcStaticConstantParameter cenv env tpenv spKind v (Some n) container v - | [] -> + | [] -> if sp.PUntaint((fun sp -> sp.IsOptional), m) then match sp.PUntaint((fun sp -> sp.RawDefaultValue), m) with | null -> error (Error(FSComp.SR.etStaticParameterRequiresAValue (spName, containerName, containerName, spName), m)) | v -> v else error (Error(FSComp.SR.etStaticParameterRequiresAValue (spName, containerName, containerName, spName), m)) - | ps -> + | ps -> error (Error(FSComp.SR.etMultipleStaticParameterWithName spName, (fst (List.last ps)).idRange))) argsInStaticParameterOrderIncludingDefaults and TcProvidedTypeAppToStaticConstantArgs cenv env optGeneratedTypePath tpenv (tcref: TyconRef) (args: SynType list) m = - let typeBeforeArguments = - match tcref.TypeReprInfo with + let typeBeforeArguments = + match tcref.TypeReprInfo with | TProvidedTypeExtensionPoint info -> info.ProvidedType | _ -> failwith "unreachable" - let staticParameters = typeBeforeArguments.PApplyWithProvider((fun (typeBeforeArguments, provider) -> typeBeforeArguments.GetStaticParameters provider), range=m) + let staticParameters = typeBeforeArguments.PApplyWithProvider((fun (typeBeforeArguments, provider) -> typeBeforeArguments.GetStaticParameters provider), range=m) let staticParameters = staticParameters.PApplyArray(id, "GetStaticParameters", m) let argsInStaticParameterOrderIncludingDefaults = CrackStaticConstantArgs cenv env tpenv (staticParameters, args, ArgumentContainer.Type tcref, tcref.DisplayName, m) - + // Take the static arguments (as SynType's) and convert them to objects of the appropriate type, based on the expected kind. - let providedTypeAfterStaticArguments, checkTypeName = - match ExtensionTyping.TryApplyProvidedType(typeBeforeArguments, optGeneratedTypePath, argsInStaticParameterOrderIncludingDefaults, m) with + let providedTypeAfterStaticArguments, checkTypeName = + match ExtensionTyping.TryApplyProvidedType(typeBeforeArguments, optGeneratedTypePath, argsInStaticParameterOrderIncludingDefaults, m) with | None -> error(Error(FSComp.SR.etErrorApplyingStaticArgumentsToType(), m)) | Some (ty, checkTypeName) -> (ty, checkTypeName) let hasNoArgs = (argsInStaticParameterOrderIncludingDefaults.Length = 0) - hasNoArgs, providedTypeAfterStaticArguments, checkTypeName + hasNoArgs, providedTypeAfterStaticArguments, checkTypeName and TryTcMethodAppToStaticConstantArgs cenv env tpenv (minfos: MethInfo list, argsOpt, mExprAndArg, mItem) = - match minfos, argsOpt with - | [minfo], Some (args, _) -> - match minfo.ProvidedStaticParameterInfo with - | Some (methBeforeArguments, staticParams) -> + match minfos, argsOpt with + | [minfo], Some (args, _) -> + match minfo.ProvidedStaticParameterInfo with + | Some (methBeforeArguments, staticParams) -> let providedMethAfterStaticArguments = TcProvidedMethodAppToStaticConstantArgs cenv env tpenv (minfo, methBeforeArguments, staticParams, args, mExprAndArg) let minfoAfterStaticArguments = ProvidedMeth(cenv.amap, providedMethAfterStaticArguments, minfo.ExtensionMemberPriorityOption, mItem) Some minfoAfterStaticArguments @@ -4549,60 +4537,60 @@ and TryTcMethodAppToStaticConstantArgs cenv env tpenv (minfos: MethInfo list, ar and TcProvidedMethodAppToStaticConstantArgs cenv env tpenv (minfo, methBeforeArguments, staticParams, args, m) = let argsInStaticParameterOrderIncludingDefaults = CrackStaticConstantArgs cenv env tpenv (staticParams, args, ArgumentContainer.Method minfo, minfo.DisplayName, m) - - let providedMethAfterStaticArguments = - match ExtensionTyping.TryApplyProvidedMethod(methBeforeArguments, argsInStaticParameterOrderIncludingDefaults, m) with + + let providedMethAfterStaticArguments = + match ExtensionTyping.TryApplyProvidedMethod(methBeforeArguments, argsInStaticParameterOrderIncludingDefaults, m) with | None -> error(Error(FSComp.SR.etErrorApplyingStaticArgumentsToMethod(), m)) | Some meth -> meth - providedMethAfterStaticArguments + providedMethAfterStaticArguments -and TcProvidedTypeApp cenv env tpenv tcref args m = +and TcProvidedTypeApp cenv env tpenv tcref args m = let hasNoArgs, providedTypeAfterStaticArguments, checkTypeName = TcProvidedTypeAppToStaticConstantArgs cenv env None tpenv tcref args m let isGenerated = providedTypeAfterStaticArguments.PUntaint((fun st -> not st.IsErased), m) //printfn "adding entity for provided type '%s', isDirectReferenceToGenerated = %b, isGenerated = %b" (st.PUntaint((fun st -> st.Name), m)) isDirectReferenceToGenerated isGenerated let isDirectReferenceToGenerated = isGenerated && ExtensionTyping.IsGeneratedTypeDirectReference (providedTypeAfterStaticArguments, m) - if isDirectReferenceToGenerated then + if isDirectReferenceToGenerated then error(Error(FSComp.SR.etDirectReferenceToGeneratedTypeNotAllowed(tcref.DisplayName), m)) // We put the type name check after the 'isDirectReferenceToGenerated' check because we need the 'isDirectReferenceToGenerated' error to be shown for generated types - checkTypeName() - if hasNoArgs then + checkTypeName() + if hasNoArgs then mkAppTy tcref [], tpenv else let ty = Import.ImportProvidedType cenv.amap m providedTypeAfterStaticArguments - ty, tpenv + ty, tpenv #endif /// Typecheck an application of a generic type to type arguments. /// /// Note that the generic type may be a nested generic type List.ListEnumerator. /// In this case, 'args' is only the instantiation of the suffix type arguments, and pathTypeArgs gives -/// the prefix of type arguments. +/// the prefix of type arguments. and TcTypeApp cenv newOk checkCxs occ env tpenv m tcref pathTypeArgs (synArgTys: SynType list) = let g = cenv.g CheckTyconAccessible cenv.amap m env.AccessRights tcref |> ignore CheckEntityAttributes g tcref m |> CommitOperationResult - + #if !NO_EXTENSIONTYPING - // Provided types are (currently) always non-generic. Their names may include mangled + // Provided types are (currently) always non-generic. Their names may include mangled // static parameters, which are passed by the provider. if tcref.Deref.IsProvided then TcProvidedTypeApp cenv env tpenv tcref synArgTys m else #endif let tps, _, tinst, _ = FreshenTyconRef2 m tcref - // If we're not checking constraints, i.e. when we first assert the super/interfaces of a type definition, then just - // clear the constraint lists of the freshly generated type variables. A little ugly but fairly localized. + // If we're not checking constraints, i.e. when we first assert the super/interfaces of a type definition, then just + // clear the constraint lists of the freshly generated type variables. A little ugly but fairly localized. if checkCxs = NoCheckCxs then tps |> List.iter (fun tp -> tp.SetConstraints []) let synArgTysLength = synArgTys.Length let pathTypeArgsLength = pathTypeArgs.Length - if tinst.Length <> pathTypeArgsLength + synArgTysLength then + if tinst.Length <> pathTypeArgsLength + synArgTysLength then error (TyconBadArgs(env.DisplayEnv, tcref, pathTypeArgsLength + synArgTysLength, m)) - let argTys, tpenv = + let argTys, tpenv = // Get the suffix of typars let tpsForArgs = List.skip (tps.Length - synArgTysLength) tps let kindsForArgs = tpsForArgs |> List.map (fun tp -> tp.Kind) @@ -4620,16 +4608,16 @@ and TcTypeApp cenv newOk checkCxs occ env tpenv m tcref pathTypeArgs (synArgTys: ty, tpenv and TcTypeOrMeasureAndRecover optKind cenv newOk checkCxs occ env tpenv ty = - try TcTypeOrMeasure optKind cenv newOk checkCxs occ env tpenv ty - with e -> - errorRecovery e ty.Range - let rty = - match optKind, newOk with + try TcTypeOrMeasure optKind cenv newOk checkCxs occ env tpenv ty + with e -> + errorRecovery e ty.Range + let rty = + match optKind, newOk with | Some TyparKind.Measure, NoNewTypars -> TType_measure Measure.One | Some TyparKind.Measure, _ -> TType_measure (NewErrorMeasure ()) | _, NoNewTypars -> cenv.g.obj_ty - | _ -> NewErrorType () - rty, tpenv + | _ -> NewErrorType () + rty, tpenv and TcTypeAndRecover cenv newOk checkCxs occ env tpenv ty = @@ -4638,44 +4626,44 @@ and TcTypeAndRecover cenv newOk checkCxs occ env tpenv ty = and TcNestedTypeApplication cenv newOk checkCxs occ env tpenv mWholeTypeApp ty pathTypeArgs tyargs = let ty = convertToTypeWithMetadataIfPossible cenv.g ty if not (isAppTy cenv.g ty) then error(Error(FSComp.SR.tcTypeHasNoNestedTypes(), mWholeTypeApp)) - match ty with - | TType_app(tcref, _) -> - TcTypeApp cenv newOk checkCxs occ env tpenv mWholeTypeApp tcref pathTypeArgs tyargs + match ty with + | TType_app(tcref, _) -> + TcTypeApp cenv newOk checkCxs occ env tpenv mWholeTypeApp tcref pathTypeArgs tyargs | _ -> error(InternalError("TcNestedTypeApplication: expected type application", mWholeTypeApp)) and TryAdjustHiddenVarNameToCompGenName cenv env (id: Ident) altNameRefCellOpt = - match altNameRefCellOpt with - | Some ({contents = SynSimplePatAlternativeIdInfo.Undecided altId } as altNameRefCell) -> - match ResolvePatternLongIdent cenv.tcSink cenv.nameResolver AllIdsOK false id.idRange env.eAccessRights env.eNameResEnv TypeNameResolutionInfo.Default [id] with + match altNameRefCellOpt with + | Some ({contents = Undecided altId } as altNameRefCell) -> + match ResolvePatternLongIdent cenv.tcSink cenv.nameResolver AllIdsOK false id.idRange env.eAccessRights env.eNameResEnv TypeNameResolutionInfo.Default [id] with | Item.NewDef _ -> None // the name is not in scope as a pattern identifier (e.g. union case), so do not use the alternate ID - | _ -> altNameRefCell := SynSimplePatAlternativeIdInfo.Decided altId; Some altId // the name is in scope as a pattern identifier, so use the alternate ID - | Some ({contents = SynSimplePatAlternativeIdInfo.Decided altId }) -> Some altId + | _ -> altNameRefCell := Decided altId; Some altId // the name is in scope as a pattern identifier, so use the alternate ID + | Some ({contents = Decided altId }) -> Some altId | None -> None /// Bind the patterns used in a lambda. Not clear why we don't use TcPat. -and TcSimplePat optArgsOK checkCxs cenv ty env (tpenv, names, takenNames) p = - match p with - | SynSimplePat.Id (id, altNameRefCellOpt, compgen, isMemberThis, isOpt, m) -> +and TcSimplePat optArgsOK checkCxs cenv ty env (tpenv, names, takenNames) p = + match p with + | SynSimplePat.Id (id, altNameRefCellOpt, compgen, isMemberThis, isOpt, m) -> // Check to see if pattern translation decides to use an alternative identifier. - match TryAdjustHiddenVarNameToCompGenName cenv env id altNameRefCellOpt with + match TryAdjustHiddenVarNameToCompGenName cenv env id altNameRefCellOpt with | Some altId -> TcSimplePat optArgsOK checkCxs cenv ty env (tpenv, names, takenNames) (SynSimplePat.Id (altId, None, compgen, isMemberThis, isOpt, m) ) - | None -> - if isOpt then - if not optArgsOK then + | None -> + if isOpt then + if not optArgsOK then errorR(Error(FSComp.SR.tcOptionalArgsOnlyOnMembers(), m)) let tyarg = NewInferenceType () UnifyTypes cenv env m ty (mkOptionTy cenv.g tyarg) - + let _, names, takenNames = TcPatBindingName cenv env id ty isMemberThis None None (ValInline.Optional, permitInferTypars, noArgOrRetAttribs, false, None, compgen) (names, takenNames) - id.idText, + id.idText, (tpenv, names, takenNames) | SynSimplePat.Typed (p, cty, m) -> let cty', tpenv = TcTypeAndRecover cenv NewTyparsOK checkCxs ItemOccurence.UseInType env tpenv cty - match p with - // Optional arguments on members + match p with + // Optional arguments on members | SynSimplePat.Id(_, _, _, _, true, _) -> UnifyTypes cenv env m ty (mkOptionTy cenv.g cty') | _ -> UnifyTypes cenv env m ty cty' @@ -4684,35 +4672,35 @@ and TcSimplePat optArgsOK checkCxs cenv ty env (tpenv, names, takenNames) p = | SynSimplePat.Attrib (p, _, _) -> TcSimplePat optArgsOK checkCxs cenv ty env (tpenv, names, takenNames) p -// raise an error if any optional args precede any non-optional args +// raise an error if any optional args precede any non-optional args and ValidateOptArgOrder (spats: SynSimplePats) = let rec getPats spats = match spats with | SynSimplePats.SimplePats(p, m) -> p, m | SynSimplePats.Typed(p, _, _) -> getPats p - + let rec isOptArg pat = match pat with | SynSimplePat.Id (_, _, _, _, isOpt, _) -> isOpt | SynSimplePat.Typed (p, _, _) -> isOptArg p - | SynSimplePat.Attrib (p, _, _) -> isOptArg p - - let pats, m = getPats spats - + | SynSimplePat.Attrib (p, _, _) -> isOptArg p + + let pats, m = getPats spats + let mutable hitOptArg = false - + List.iter (fun pat -> if isOptArg pat then hitOptArg <- true elif hitOptArg then error(Error(FSComp.SR.tcOptionalArgsMustComeAfterNonOptionalArgs(), m))) pats - - -/// Bind the patterns used in argument position for a function, method or lambda. + + +/// Bind the patterns used in argument position for a function, method or lambda. and TcSimplePats cenv optArgsOK checkCxs ty env (tpenv, names, takenNames: Set<_>) p = - + // validate optional argument declaration ValidateOptArgOrder p - - match p with - | SynSimplePats.SimplePats ([], m) -> + + match p with + | SynSimplePats.SimplePats ([], m) -> // Unit "()" patterns in argument position become SynSimplePats.SimplePats([], _) in the // syntactic translation when building bindings. This is done because the // use of "()" has special significance for arity analysis and argument counting. @@ -4726,11 +4714,11 @@ and TcSimplePats cenv optArgsOK checkCxs ty env (tpenv, names, takenNames: Set<_ let _, names, takenNames = TcPatBindingName cenv env id ty false None None (ValInline.Optional, permitInferTypars, noArgOrRetAttribs, false, None, true) (names, takenNames) [id.idText], (tpenv, names, takenNames) - | SynSimplePats.SimplePats ([p], _) -> + | SynSimplePats.SimplePats ([p], _) -> let v, (tpenv, names, takenNames) = TcSimplePat optArgsOK checkCxs cenv ty env (tpenv, names, takenNames) p [v], (tpenv, names, takenNames) - | SynSimplePats.SimplePats (ps, m) -> + | SynSimplePats.SimplePats (ps, m) -> 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) @@ -4738,8 +4726,8 @@ and TcSimplePats cenv optArgsOK checkCxs ty env (tpenv, names, takenNames: Set<_ | SynSimplePats.Typed (p, cty, m) -> let cty', tpenv = TcTypeAndRecover cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv cty - match p with - // Solitary optional arguments on members + match p with + // Solitary optional arguments on members | SynSimplePats.SimplePats([SynSimplePat.Id(_, _, _, _, true, _)], _) -> UnifyTypes cenv env m ty (mkOptionTy cenv.g cty') | _ -> UnifyTypes cenv env m ty cty' @@ -4749,14 +4737,14 @@ and TcSimplePatsOfUnknownType cenv optArgsOK checkCxs env tpenv spats = let argty = NewInferenceType () TcSimplePats cenv optArgsOK checkCxs argty env (tpenv, NameMap.empty, Set.empty) spats -and TcPatBindingName cenv env id ty isMemberThis vis1 topValData (inlineFlag, declaredTypars, argAttribs, isMutable, vis2, compgen) (names, takenNames: Set) = +and TcPatBindingName cenv env id ty isMemberThis vis1 topValData (inlineFlag, declaredTypars, argAttribs, isMutable, vis2, compgen) (names, takenNames: Set) = let vis = if Option.isSome vis1 then vis1 else vis2 if takenNames.Contains id.idText then errorR (VarBoundTwice id) let compgen = compgen || IsCompilerGeneratedName id.idText let baseOrThis = if isMemberThis then MemberThisVal else NormalVal let names = Map.add id.idText (PrelimValScheme1(id, declaredTypars, ty, topValData, None, isMutable, inlineFlag, baseOrThis, argAttribs, vis, compgen)) names let takenNames = Set.add id.idText takenNames - (fun (TcPatPhase2Input (values, isLeftMost)) -> + (fun (TcPatPhase2Input (values, isLeftMost)) -> let (vspec, typeScheme) = let name = id.idText match values.TryGetValue name with @@ -4772,46 +4760,42 @@ and TcPatBindingName cenv env id ty isMemberThis vis1 topValData (inlineFlag, de // isLeftMost indicates we are processing the left-most path through a disjunctive or pattern. // For those binding locations, CallNameResolutionSink is called in MakeAndPublishValue, like all other bindings // For non-left-most paths, we register the name resolutions here - if not isLeftMost && not vspec.IsCompilerGenerated && not (vspec.LogicalName.StartsWithOrdinal("_")) then + if not isLeftMost && not vspec.IsCompilerGenerated && not (vspec.LogicalName.StartsWithOrdinal("_")) then let item = Item.Value(mkLocalValRef vspec) CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.Binding, env.AccessRights) - PBind(vspec, typeScheme)), + PBind(vspec, typeScheme)), names, takenNames -and TcPatAndRecover warnOnUpper cenv (env: TcEnv) topValInfo vFlags (tpenv, names, takenNames) ty (pat: SynPat) = - try +and TcPatAndRecover warnOnUpper cenv (env: TcEnv) topValInfo vFlags (tpenv, names, takenNames) ty (pat: SynPat) = + try TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty pat with e -> - // Error recovery - return some rubbish expression, but replace/annotate - // the type of the current expression with a type variable that indicates an error - let m = pat.Range + // Error recovery - return some rubbish expression, but replace/annotate + // the type of the current expression with a type variable that indicates an error + let m = pat.Range errorRecovery e m //solveTypAsError cenv env.DisplayEnv m ty (fun _ -> TPat_error m), (tpenv, names, takenNames) -/// Typecheck a pattern. Patterns are type-checked in three phases: -/// 1. TcPat builds a List.map from simple variable names to inferred types for +/// Typecheck a pattern. Patterns are type-checked in three phases: +/// 1. TcPat builds a List.map from simple variable names to inferred types for /// those variables. It also returns a function to perform the second phase. -/// 2. The second phase assumes the caller has built the actual value_spec's -/// for the values being defined, and has decided if the types of these +/// 2. The second phase assumes the caller has built the actual value_spec's +/// for the values being defined, and has decided if the types of these /// variables are to be generalized. The caller hands this information to /// the second-phase function in terms of a List.map from names to actual -/// value specifications. -and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty pat = +/// value specifications. +and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty pat = let ad = env.AccessRights - match pat with - | SynPat.As(_, SynPat.Named _, _) -> () - | SynPat.As (_, _, m) -> checkLanguageFeatureError cenv.g.langVersion LanguageFeature.NonVariablePatternsToRightOfAsPatterns m - | _ -> () - match pat with - | SynPat.Const (c, m) -> - match c with - | SynConst.Bytes (bytes, _, m) -> - UnifyTypes cenv env m ty (mkByteArrayTy cenv.g) + match pat with + | SynPat.Const (c, m) -> + match c with + | SynConst.Bytes (bytes, m) -> + UnifyTypes cenv env m ty (mkByteArrayTy cenv.g) TcPat warnOnUpper cenv env None vFlags (tpenv, names, takenNames) ty (SynPat.ArrayOrList (true, [ for b in bytes -> SynPat.Const(SynConst.Byte b, m) ], m)) - | SynConst.UserNum _ -> + | SynConst.UserNum _ -> errorR (Error (FSComp.SR.tcInvalidNonPrimitiveLiteralInPatternMatch (), m)) (fun _ -> TPat_error m), (tpenv, names, takenNames) @@ -4826,42 +4810,31 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p | SynPat.Wild m -> (fun _ -> TPat_wild m), (tpenv, names, takenNames) - | SynPat.IsInst(cty, m) - | SynPat.As (SynPat.IsInst(cty, m), _, _) -> + | SynPat.IsInst(cty, m) + | SynPat.Named (SynPat.IsInst(cty, m), _, _, _, _) -> let srcTy = ty let tgtTy, tpenv = TcTypeAndRecover cenv NewTyparsOKButWarnIfNotRigid CheckCxs ItemOccurence.UseInType env tpenv cty TcRuntimeTypeTest (*isCast*)false (*isOperator*)true cenv env.DisplayEnv m tgtTy srcTy - match pat with + match pat with | SynPat.IsInst(_, m) -> (fun _ -> TPat_isinst (srcTy, tgtTy, None, m)), (tpenv, names, takenNames) - | SynPat.As (SynPat.IsInst _, p, m) -> - let pat, acc = TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) tgtTy p - (fun values -> TPat_isinst (srcTy, tgtTy, Some (pat values), m)), acc + | SynPat.Named (SynPat.IsInst _, id, isMemberThis, vis, m) -> + let bindf, names, takenNames = TcPatBindingName cenv env id tgtTy isMemberThis vis None vFlags (names, takenNames) + (fun values -> TPat_isinst (srcTy, tgtTy, Some(bindf values), m)), + (tpenv, names, takenNames) | _ -> failwith "TcPat" - | SynPat.As (p, SynPat.Named (id, isMemberThis, vis, m), _) - | SynPat.As (SynPat.Named (id, isMemberThis, vis, m), p, _) -> - let bindf, names, takenNames = TcPatBindingName cenv env id ty isMemberThis vis topValInfo vFlags (names, takenNames) - let pat', acc = TcPat warnOnUpper cenv env None vFlags (tpenv, names, takenNames) ty p - (fun values -> TPat_as (pat' values, bindf values, m)), - acc - - | SynPat.As (pat1, pat2, m) -> - let pats = [pat1; pat2] - let pats', acc = TcPatterns warnOnUpper cenv env vFlags (tpenv, names, takenNames) (List.map (fun _ -> ty) pats) pats - (fun values -> TPat_conjs(List.map (fun f -> f values) pats', m)), acc - - | SynPat.Named (id, isMemberThis, vis, m) -> - let bindf, names, takenNames = TcPatBindingName cenv env id ty isMemberThis vis topValInfo vFlags (names, takenNames) - let pat', acc = TcPat warnOnUpper cenv env None vFlags (tpenv, names, takenNames) ty (SynPat.Wild m) - (fun values -> TPat_as (pat' values, bindf values, m)), - acc - - | SynPat.OptionalVal (id, m) -> + | SynPat.OptionalVal (id, m) -> errorR (Error (FSComp.SR.tcOptionalArgsOnlyOnMembers (), m)) let bindf, names, takenNames = TcPatBindingName cenv env id ty false None topValInfo vFlags (names, takenNames) (fun values -> TPat_as (TPat_wild m, bindf values, m)), (tpenv, names, takenNames) + | SynPat.Named (p, id, isMemberThis, vis, m) -> + let bindf, names, takenNames = TcPatBindingName cenv env id ty isMemberThis vis topValInfo vFlags (names, takenNames) + let pat', acc = TcPat warnOnUpper cenv env None vFlags (tpenv, names, takenNames) ty p + (fun values -> TPat_as (pat' values, bindf values, m)), + acc + | SynPat.Typed (p, cty, m) -> let cty', tpenv = TcTypeAndRecover cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv cty UnifyTypes cenv env m ty cty' @@ -4870,7 +4843,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p | SynPat.Attrib (p, attrs, _) -> errorR (Error (FSComp.SR.tcAttributesInvalidInPatterns (), rangeOfNonNilAttrs attrs)) for attrList in attrs do - TcAttributes cenv env Unchecked.defaultof<_> attrList.Attributes |> ignore + TcAttributes cenv env Unchecked.defaultof<_> attrList.Attributes |> ignore TcPat warnOnUpper cenv env None vFlags (tpenv, names, takenNames) ty p | SynPat.Or (pat1, pat2, m) -> @@ -4879,8 +4852,8 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p if not (takenNames1 = takenNames2) then errorR (UnionPatternsBindDifferentNames m) - names1 |> Map.iter (fun _ (PrelimValScheme1 (id1, _, ty1, _, _, _, _, _, _, _, _)) -> - match names2.TryGetValue id1.idText with + names1 |> Map.iter (fun _ (PrelimValScheme1 (id1, _, ty1, _, _, _, _, _, _, _, _)) -> + match names2.TryGetValue id1.idText with | true, PrelimValScheme1 (id2, _, ty2, _, _, _, _, _, _, _, _) -> try UnifyTypes cenv env id2.idRange ty1 ty2 with e -> errorRecovery e m @@ -4896,18 +4869,18 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p | SynPat.LongIdent (LongIdentWithDots(longId, _), _, tyargs, args, vis, m) -> if Option.isSome tyargs then errorR(Error(FSComp.SR.tcInvalidTypeArgumentUsage(), m)) - let warnOnUpperForId = + let warnOnUpperForId = match args with | SynArgPats.Pats [] -> warnOnUpper | _ -> AllIdsOK let lidRange = rangeOfLid longId - let checkNoArgsForLiteral () = + let checkNoArgsForLiteral () = match args with | SynArgPats.Pats [] | SynArgPats.NamePatPairs ([], _) -> () - | _ -> errorR (Error (FSComp.SR.tcLiteralDoesNotTakeArguments (), m)) + | _ -> errorR (Error (FSComp.SR.tcLiteralDoesNotTakeArguments (), m)) let getArgPatterns () = match args with @@ -4924,7 +4897,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p match x with | SynPat.FromParseError(p, _) -> convSynPatToSynExpr p | SynPat.Const (c, m) -> SynExpr.Const (c, m) - | SynPat.Named (id, _, None, _) -> SynExpr.Ident id + | SynPat.Named (SynPat.Wild _, id, _, None, _) -> SynExpr.Ident id | SynPat.Typed (p, cty, m) -> SynExpr.Typed (convSynPatToSynExpr p, cty, m) | SynPat.LongIdent (LongIdentWithDots(longId, dotms) as lidwd, _, _tyargs, args, None, m) -> let args = match args with SynArgPats.Pats args -> args | _ -> failwith "impossible: active patterns can be used only with SynConstructorArgs.Pats" @@ -4950,7 +4923,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p with _ -> false match ResolvePatternLongIdent cenv.tcSink cenv.nameResolver warnOnUpperForId false m ad env.NameEnv TypeNameResolutionInfo.Default longId with - | Item.NewDef id -> + | Item.NewDef id -> match getArgPatterns () with | [] -> TcPat warnOnUpperForId cenv env topValInfo vFlags (tpenv, names, takenNames) ty (mkSynPatVar vis id) @@ -4965,7 +4938,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p errorR (UndefinedName (0, FSComp.SR.undefinedNamePatternDiscriminator, id, NoSuggestions)) (fun _ -> TPat_error m), acc - | Item.ActivePatternCase (APElemRef (apinfo, vref, idx, isStructRetTy)) as item -> + | Item.ActivePatternCase (APElemRef (apinfo, vref, idx)) as item -> // Report information about the 'active recognizer' occurrence to IDE CallNameResolutionSink cenv.tcSink (rangeOfLid longId, env.NameEnv, item, emptyTyparInst, ItemOccurence.Pattern, env.eAccessRights) @@ -4975,45 +4948,45 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p let args = getArgPatterns () - // TOTAL/PARTIAL ACTIVE PATTERNS + // TOTAL/PARTIAL ACTIVE PATTERNS let _, vexp, _, _, tinst, _ = TcVal true cenv env tpenv vref None None m let vexp = MakeApplicableExprWithFlex cenv env vexp let vexpty = vexp.Type - let activePatArgsAsSynPats, patarg = - match args with - | [] -> [], SynPat.Const(SynConst.Unit, m) - | _ -> + let activePatArgsAsSynPats, patarg = + match args with + | [] -> [], SynPat.Const(SynConst.Unit, m) + | _ -> // This bit of type-directed analysis ensures that parameterized partial active patterns returning unit do not need to take an argument // See FSharp 1.0 3502 let dtys, rty = stripFunTy cenv.g vexpty - - if dtys.Length = args.Length + 1 && isOptionTy cenv.g rty && isUnitTy cenv.g (destOptionTy cenv.g rty) then - args, SynPat.Const(SynConst.Unit, m) - else + + if dtys.Length = args.Length + 1 && isOptionTy cenv.g rty && isUnitTy cenv.g (destOptionTy cenv.g rty) then + args, SynPat.Const(SynConst.Unit, m) + else List.frontAndBack args - if not (isNil activePatArgsAsSynPats) && apinfo.ActiveTags.Length <> 1 then + if not (isNil activePatArgsAsSynPats) && apinfo.ActiveTags.Length <> 1 then errorR (Error (FSComp.SR.tcRequireActivePatternWithOneResult (), m)) let activePatArgsAsSynExprs = List.map convSynPatToSynExpr activePatArgsAsSynPats let activePatResTys = NewInferenceTypes apinfo.Names - let activePatType = apinfo.OverallType cenv.g m ty activePatResTys isStructRetTy + let activePatType = apinfo.OverallType cenv.g m ty activePatResTys - let delayed = activePatArgsAsSynExprs |> List.map (fun arg -> DelayedApp(ExprAtomicFlag.NonAtomic, arg, unionRanges (rangeOfLid longId) arg.Range)) + let delayed = activePatArgsAsSynExprs |> List.map (fun arg -> DelayedApp(ExprAtomicFlag.NonAtomic, arg, unionRanges (rangeOfLid longId) arg.Range)) let activePatExpr, tpenv = PropagateThenTcDelayed cenv activePatType env tpenv m vexp vexpty ExprAtomicFlag.NonAtomic delayed if idx >= activePatResTys.Length then error(Error(FSComp.SR.tcInvalidIndexIntoActivePatternArray(), m)) let argty = List.item idx activePatResTys - + let arg', acc = TcPat warnOnUpper cenv env None vFlags (tpenv, names, takenNames) argty patarg // The identity of an active pattern consists of its value and the types it is applied to. - // If there are any expression args then we've lost identity. + // If there are any expression args then we've lost identity. let activePatIdentity = if isNil activePatArgsAsSynExprs then Some (vref, tinst) else None - (fun values -> - TPat_query((activePatExpr, activePatResTys, isStructRetTy, activePatIdentity, idx, apinfo), arg' values, m)), acc + (fun values -> + TPat_query((activePatExpr, activePatResTys, activePatIdentity, idx, apinfo), arg' values, m)), acc | (Item.UnionCase _ | Item.ExnCase _) as item -> // Report information about the case occurrence to IDE @@ -5036,12 +5009,12 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p for (id, pat) in pairs do match argNames |> List.tryFindIndex (fun id2 -> id.idText = id2.idText) with - | None -> + | None -> extraPatterns.Add pat match item with | Item.UnionCase(uci, _) -> errorR (Error (FSComp.SR.tcUnionCaseConstructorDoesNotHaveFieldWithGivenName (uci.Name, id.idText), id.idRange)) - | Item.ExnCase tcref -> + | Item.ExnCase tcref -> errorR (Error (FSComp.SR.tcExceptionConstructorDoesNotHaveFieldWithGivenName (tcref.DisplayName, id.idText), id.idRange)) | _ -> errorR (Error (FSComp.SR.tcConstructorDoesNotHaveFieldWithGivenName (id.idText), id.idRange)) @@ -5072,14 +5045,14 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p if result.Length = 1 then args, extraPatterns else [ SynPat.Tuple(false, args, m) ], extraPatterns - let args, extraPatterns = - match args with + let args, extraPatterns = + match args with | [] -> [], [] - // note: the next will always be parenthesized + // note: the next will always be parenthesized | [SynPatErrorSkip(SynPat.Tuple (false, args, _)) | SynPatErrorSkip(SynPat.Paren(SynPatErrorSkip(SynPat.Tuple (false, args, _)), _))] when numArgTys > 1 -> args, [] - // note: we allow both 'C _' and 'C (_)' regardless of number of argument of the pattern + // note: we allow both 'C _' and 'C (_)' regardless of number of argument of the pattern | [SynPatErrorSkip(SynPat.Wild _ as e) | SynPatErrorSkip(SynPat.Paren(SynPatErrorSkip(SynPat.Wild _ as e), _))] -> List.replicate numArgTys e, [] @@ -5105,7 +5078,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p if numArgTys > 1 then // Expects tuple without enough args errorR (Error (FSComp.SR.tcUnionCaseExpectsTupledArguments numArgTys, m)) - else + else errorR (UnionCaseWrongArguments (env.DisplayEnv, numArgTys, numArgs, m)) args @ (List.init (numArgTys - numArgs) (fun _ -> SynPat.Wild (m.MakeSynthetic()))), extraPatterns else @@ -5118,15 +5091,15 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p let args', acc = TcPatterns warnOnUpper cenv env vFlags (tpenv, names, takenNames) argTys args let _, acc = TcPatterns warnOnUpper cenv env vFlags acc (NewInferenceTypes extraPatterns) extraPatterns (fun values -> mkf m (List.map (fun f -> f values) args')), acc - + | Item.ILField finfo -> CheckILFieldInfoAccessible cenv.g cenv.amap lidRange env.AccessRights finfo if not finfo.IsStatic then errorR (Error (FSComp.SR.tcFieldIsNotStatic (finfo.FieldName), lidRange)) CheckILFieldAttributes cenv.g finfo m - match finfo.LiteralValue with + match finfo.LiteralValue with | None -> error (Error (FSComp.SR.tcFieldNotLiteralCannotBeUsedInPattern (), lidRange)) - | Some lit -> + | Some lit -> checkNoArgsForLiteral () let _, acc = tcArgPatterns () @@ -5134,15 +5107,15 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p let c' = TcFieldInit lidRange lit let item = Item.ILField finfo CallNameResolutionSink cenv.tcSink (lidRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.Pattern, env.AccessRights) - (fun _ -> TPat_const (c', m)), acc + (fun _ -> TPat_const (c', m)), acc | Item.RecdField rfinfo -> CheckRecdFieldInfoAccessible cenv.amap lidRange env.AccessRights rfinfo if not rfinfo.IsStatic then errorR (Error (FSComp.SR.tcFieldIsNotStatic(rfinfo.Name), lidRange)) - CheckRecdFieldInfoAttributes cenv.g rfinfo lidRange |> CommitOperationResult - match rfinfo.LiteralValue with + CheckRecdFieldInfoAttributes cenv.g rfinfo lidRange |> CommitOperationResult + match rfinfo.LiteralValue with | None -> error (Error(FSComp.SR.tcFieldNotLiteralCannotBeUsedInPattern(), lidRange)) - | Some lit -> + | Some lit -> checkNoArgsForLiteral() let _, acc = tcArgPatterns () @@ -5151,12 +5124,12 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p // FUTURE: can we do better than emptyTyparInst here, in order to display instantiations // of type variables in the quick info provided in the IDE. CallNameResolutionSink cenv.tcSink (lidRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.Pattern, env.AccessRights) - (fun _ -> TPat_const (lit, m)), acc + (fun _ -> TPat_const (lit, m)), acc | Item.Value vref -> - match vref.LiteralValue with + match vref.LiteralValue with | None -> error (Error(FSComp.SR.tcNonLiteralCannotBeUsedInPattern(), m)) - | Some lit -> + | Some lit -> let _, _, _, vexpty, _, _ = TcVal true cenv env tpenv vref None None lidRange CheckValAccessible lidRange env.AccessRights vref CheckFSharpAttributes cenv.g vref.Attribs lidRange |> CommitOperationResult @@ -5166,7 +5139,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p UnifyTypes cenv env m ty vexpty let item = Item.Value vref CallNameResolutionSink cenv.tcSink (lidRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.Pattern, env.AccessRights) - (fun _ -> TPat_const (lit, m)), acc + (fun _ -> TPat_const (lit, m)), acc | _ -> error (Error(FSComp.SR.tcRequireVarConstRecogOrLiteral(), m)) @@ -5191,45 +5164,45 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p let argty = NewInferenceType () UnifyTypes cenv env m ty (if isArray then mkArrayType cenv.g argty else mkListTy cenv.g argty) let args', acc = TcPatterns warnOnUpper cenv env vFlags (tpenv, names, takenNames) (List.map (fun _ -> argty) args) args - (fun values -> + (fun values -> let args' = List.map (fun f -> f values) args' if isArray then TPat_array(args', argty, m) else List.foldBack (mkConsListPat cenv.g argty) args' (mkNilListPat cenv.g m argty)), acc | SynPat.Record (flds, m) -> let tinst, tcref, fldsmap, _fldsList = BuildFieldMap cenv env true ty flds m - // REVIEW: use _fldsList to type check pattern in code order not field defn order + // REVIEW: use _fldsList to type check pattern in code order not field defn order let gtyp = mkAppTy tcref tinst let inst = List.zip (tcref.Typars m) tinst UnifyTypes cenv env m ty gtyp let fields = tcref.TrueInstanceFieldsAsList - let ftys = fields |> List.map (fun fsp -> actualTyOfRecdField inst fsp, fsp) - let fldsmap', acc = - ((tpenv, names, takenNames), ftys) ||> List.mapFold (fun s (ty, fsp) -> + let ftys = fields |> List.map (fun fsp -> actualTyOfRecdField inst fsp, fsp) + let fldsmap', acc = + ((tpenv, names, takenNames), ftys) ||> List.mapFold (fun s (ty, fsp) -> match fldsmap.TryGetValue fsp.rfield_id.idText with | true, v -> TcPat warnOnUpper cenv env None vFlags s ty v | _ -> (fun _ -> TPat_wild m), s) - (fun values -> TPat_recd (tcref, tinst, List.map (fun f -> f values) fldsmap', m)), + (fun values -> TPat_recd (tcref, tinst, List.map (fun f -> f values) fldsmap', m)), acc - | SynPat.DeprecatedCharRange (c1, c2, m) -> + | SynPat.DeprecatedCharRange (c1, c2, m) -> errorR(Deprecated(FSComp.SR.tcUseWhenPatternGuard(), m)) UnifyTypes cenv env m ty (cenv.g.char_ty) (fun _ -> TPat_range(c1, c2, m)), (tpenv, names, takenNames) - | SynPat.Null m -> + | SynPat.Null m -> try AddCxTypeMustSupportNull env.DisplayEnv cenv.css m NoTrace ty with e -> errorRecovery e m (fun _ -> TPat_null m), (tpenv, names, takenNames) - | SynPat.InstanceMember (_, _, _, _, m) -> + | SynPat.InstanceMember (_, _, _, _, m) -> errorR(Error(FSComp.SR.tcIllegalPattern(), pat.Range)) (fun _ -> TPat_wild m), (tpenv, names, takenNames) | SynPat.FromParseError (pat, _) -> suppressErrorReporting (fun () -> TcPatAndRecover warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) (NewErrorType()) pat) -and TcPatterns warnOnUpper cenv env vFlags s argTys args = +and TcPatterns warnOnUpper cenv env vFlags s argTys args = assert (List.length args = List.length argTys) List.mapFold (fun s (ty, pat) -> TcPat warnOnUpper cenv env None vFlags s ty pat) s (List.zip argTys args) @@ -5239,26 +5212,26 @@ and RecordNameAndTypeResolutions_IdeallyWithoutHavingOtherEffects cenv env tpenv // This function is motivated by cases like // query { for ... join(for x in f(). } // where there is incomplete code in a query, and we are current just dropping a piece of the AST on the floor (above, the bit inside the 'join'). - // + // // The problem with dropping the AST on the floor is that we get no captured resolutions, which means no Intellisense/QuickInfo/ParamHelp. // // The idea behind the fix is to semi-typecheck this AST-fragment, just to get resolutions captured. // - // The tricky bit is to not also have any other effects from typechecking, namely producing error diagnostics (which may be spurious) or having + // The tricky bit is to not also have any other effects from typechecking, namely producing error diagnostics (which may be spurious) or having // side-effects on the typecheck environment. // - // REVIEW: We are yet to deal with the tricky bit. As it stands, we turn off error logging, but still have typechecking environment effects. As a result, - // at the very least, you cannot call this function unless you're already reported a typechecking error (the 'worst' possible outcome would be - // to incorrectly solve typecheck constraints as a result of effects in this function, and then have the code compile successfully and behave + // REVIEW: We are yet to deal with the tricky bit. As it stands, we turn off error logging, but still have typechecking environment effects. As a result, + // at the very least, you cannot call this function unless you're already reported a typechecking error (the 'worst' possible outcome would be + // to incorrectly solve typecheck constraints as a result of effects in this function, and then have the code compile successfully and behave // in some weird way; so ensure the code can't possibly compile before calling this function as an expedient way to get better IntelliSense). - suppressErrorReporting (fun () -> + suppressErrorReporting (fun () -> try ignore(TcExprOfUnknownType cenv env tpenv expr) with e -> ()) and RecordNameAndTypeResolutions_IdeallyWithoutHavingOtherEffects_Delayed cenv env tpenv delayed = let rec dummyCheckedDelayed delayed = - match delayed with + match delayed with | DelayedApp (_hpa, arg, _mExprAndArg) :: otherDelayed -> RecordNameAndTypeResolutions_IdeallyWithoutHavingOtherEffects cenv env tpenv arg dummyCheckedDelayed otherDelayed @@ -5281,36 +5254,36 @@ and TcExprOfUnknownType cenv env tpenv expr = and TcExprFlex cenv flex compat ty (env: TcEnv) tpenv (e: SynExpr) = if flex then let argty = NewInferenceType () - if compat then + if compat then (destTyparTy cenv.g argty).SetIsCompatFlex(true) - AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css e.Range NoTrace ty argty - let e', tpenv = TcExpr cenv argty env tpenv e + AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css e.Range NoTrace ty argty + let e', tpenv = TcExpr cenv argty env tpenv e let e' = mkCoerceIfNeeded cenv.g ty argty e' e', tpenv else TcExpr cenv ty env tpenv e - + and TcExpr cenv ty (env: TcEnv) tpenv (expr: SynExpr) = - // Start an error recovery handler + // Start an error recovery handler // Note the try/with can lead to tail-recursion problems for iterated constructs, e.g. let... in... - // So be careful! - try - TcExprNoRecover cenv ty env tpenv expr - with e -> + // So be careful! + try + TcExprNoRecover cenv ty env tpenv expr + with e -> let m = expr.Range - // Error recovery - return some rubbish expression, but replace/annotate - // the type of the current expression with a type variable that indicates an error - errorRecovery e m + // Error recovery - return some rubbish expression, but replace/annotate + // the type of the current expression with a type variable that indicates an error + errorRecovery e m solveTypAsError cenv env.DisplayEnv m ty mkThrow m ty (mkOne cenv.g m), tpenv and TcExprNoRecover cenv ty (env: TcEnv) tpenv (expr: SynExpr) = - // Count our way through the expression shape that makes up an object constructor - // See notes at definition of "ctor" re. object model constructors. - let env = - if GetCtorShapeCounter env > 0 then AdjustCtorShapeCounter (fun x -> x - 1) env + // Count our way through the expression shape that makes up an object constructor + // See notes at definition of "ctor" re. object model constructors. + let env = + if GetCtorShapeCounter env > 0 then AdjustCtorShapeCounter (fun x -> x - 1) env else env TcExprThen cenv ty env tpenv expr [] @@ -5321,35 +5294,35 @@ and TcExprNoRecover cenv ty (env: TcEnv) tpenv (expr: SynExpr) = // through TcExprOfUnknownType, TcExpr and TcExprNoRecover and TcExprOfUnknownTypeThen cenv env tpenv expr delayed = let exprty = NewInferenceType () - let expr', tpenv = + let expr', tpenv = try TcExprThen cenv exprty env tpenv expr delayed - with e -> + with e -> let m = expr.Range - errorRecovery e m + errorRecovery e m solveTypAsError cenv env.DisplayEnv m exprty mkThrow m exprty (mkOne cenv.g m), tpenv expr', exprty, tpenv -/// This is used to typecheck legitimate 'main body of constructor' expressions +/// This is used to typecheck legitimate 'main body of constructor' expressions and TcExprThatIsCtorBody safeInitInfo cenv overallTy env tpenv expr = let env = {env with eCtorInfo = Some (InitialExplicitCtorInfo safeInitInfo) } let expr, tpenv = TcExpr cenv overallTy env tpenv expr let expr = CheckAndRewriteObjectCtor cenv.g env expr expr, tpenv -/// This is used to typecheck all ordinary expressions including constituent -/// parts of ctor. +/// This is used to typecheck all ordinary expressions including constituent +/// parts of ctor. and TcExprThatCanBeCtorBody cenv overallTy env tpenv expr = let env = if AreWithinCtorShape env then AdjustCtorShapeCounter (fun x -> x + 1) env else env TcExpr cenv overallTy env tpenv expr -/// This is used to typecheck legitimate 'non-main body of object constructor' expressions +/// This is used to typecheck legitimate 'non-main body of object constructor' expressions and TcExprThatCantBeCtorBody cenv overallTy env tpenv expr = let env = if AreWithinCtorShape env then ExitCtorShapeRegion env else env TcExpr cenv overallTy env tpenv expr -/// This is used to typecheck legitimate 'non-main body of object constructor' expressions +/// This is used to typecheck legitimate 'non-main body of object constructor' expressions and TcStmtThatCantBeCtorBody cenv env tpenv expr = let env = if AreWithinCtorShape env then ExitCtorShapeRegion env else env TcStmt cenv env tpenv expr @@ -5369,17 +5342,17 @@ and TryTcStmt cenv env tpenv synExpr = let hasTypeUnit = TryUnifyUnitTypeWithoutWarning cenv env m ty hasTypeUnit, expr, tpenv -/// During checking of expressions of the form (x(y)).z(w1, w2) -/// keep a stack of things on the right. This lets us recognize -/// method applications and other item-based syntax. +/// During checking of expressions of the form (x(y)).z(w1, w2) +/// keep a stack of things on the right. This lets us recognize +/// method applications and other item-based syntax. and TcExprThen cenv overallTy env tpenv synExpr delayed = - match synExpr with + match synExpr with | LongOrSingleIdent (isOpt, longId, altNameRefCellOpt, mLongId) -> if isOpt then errorR(Error(FSComp.SR.tcSyntaxErrorUnexpectedQMark(), mLongId)) // Check to see if pattern translation decided to use an alternative identifier. - match altNameRefCellOpt with - | Some {contents = SynSimplePatAlternativeIdInfo.Decided altId} -> TcExprThen cenv overallTy env tpenv (SynExpr.LongIdent (isOpt, LongIdentWithDots([altId], []), None, mLongId)) delayed + match altNameRefCellOpt with + | Some {contents = Decided altId} -> TcExprThen cenv overallTy env tpenv (SynExpr.LongIdent (isOpt, LongIdentWithDots([altId], []), None, mLongId)) delayed | _ -> TcLongIdentThen cenv overallTy env tpenv longId delayed // f x @@ -5394,8 +5367,8 @@ and TcExprThen cenv overallTy env tpenv synExpr delayed = // e1.id1.id2 // etc. | SynExpr.DotGet (e1, _, LongIdentWithDots(longId, _), _) -> - TcExprThen cenv overallTy env tpenv e1 ((DelayedDotLookup (longId, synExpr.RangeWithoutAnyExtraDot)) :: delayed) - + TcExprThen cenv overallTy env tpenv e1 ((DelayedDotLookup (longId, synExpr.RangeSansAnyExtraDot)) :: delayed) + // e1.[e2] // e1.[e21, ..., e2n] // etc. @@ -5407,17 +5380,17 @@ and TcExprThen cenv overallTy env tpenv synExpr delayed = // etc. | SynExpr.DotIndexedSet (e1, e2, _, _, mDot, mWholeExpr) -> TcIndexerThen cenv env overallTy mWholeExpr mDot tpenv synExpr e1 e2 delayed - + | _ -> - match delayed with + match delayed with | [] -> TcExprUndelayed cenv overallTy env tpenv synExpr - | _ -> + | _ -> let expr, exprty, tpenv = TcExprUndelayedNoType cenv env tpenv synExpr PropagateThenTcDelayed cenv overallTy env tpenv synExpr.Range (MakeApplicableExprNoFlex cenv expr) exprty ExprAtomicFlag.NonAtomic delayed -and TcExprs cenv env m tpenv flexes argTys args = +and TcExprs cenv env m tpenv flexes argTys args = if List.length args <> List.length argTys then error(Error(FSComp.SR.tcExpressionCountMisMatch((List.length argTys), (List.length args)), m)) - (tpenv, List.zip3 flexes argTys args) ||> List.mapFold (fun tpenv (flex, ty, e) -> + (tpenv, List.zip3 flexes argTys args) ||> List.mapFold (fun tpenv (flex, ty, e) -> TcExprFlex cenv flex false ty env tpenv e) and CheckSuperInit cenv objTy m = @@ -5429,7 +5402,7 @@ and CheckSuperInit cenv objTy m = //------------------------------------------------------------------------- // TcExprUndelayed -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- and TcExprUndelayedNoType cenv env tpenv synExpr: Expr * TType * _ = let overallTy = NewInferenceType () @@ -5438,10 +5411,10 @@ and TcExprUndelayedNoType cenv env tpenv synExpr: Expr * TType * _ = and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = - match synExpr with - | SynExpr.Paren (expr2, _, _, mWholeExprIncludingParentheses) -> - // We invoke CallExprHasTypeSink for every construct which is atomic in the syntax, i.e. where a '.' immediately following the - // construct is a dot-lookup for the result of the construct. + match synExpr with + | SynExpr.Paren (expr2, _, _, mWholeExprIncludingParentheses) -> + // We invoke CallExprHasTypeSink for every construct which is atomic in the syntax, i.e. where a '.' immediately following the + // construct is a dot-lookup for the result of the construct. CallExprHasTypeSink cenv.tcSink (mWholeExprIncludingParentheses, env.NameEnv, overallTy, env.AccessRights) let env = ShrinkContext env mWholeExprIncludingParentheses expr2.Range TcExpr cenv overallTy env tpenv expr2 @@ -5449,22 +5422,22 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = | SynExpr.DotIndexedGet _ | SynExpr.DotIndexedSet _ | SynExpr.TypeApp _ | SynExpr.Ident _ | SynExpr.LongIdent _ | SynExpr.App _ | SynExpr.DotGet _ -> error(Error(FSComp.SR.tcExprUndelayed(), synExpr.Range)) - | SynExpr.Const (SynConst.String (s, _, m), _) -> + | SynExpr.Const (SynConst.String (s, m), _) -> CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.AccessRights) TcConstStringExpr cenv overallTy env m tpenv s - | SynExpr.InterpolatedString (parts, _, m) -> + | SynExpr.InterpolatedString (parts, m) -> checkLanguageFeatureError cenv.g.langVersion LanguageFeature.StringInterpolation m CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.AccessRights) TcInterpolatedStringExpr cenv overallTy env m tpenv parts - | SynExpr.Const (synConst, m) -> + | SynExpr.Const (synConst, m) -> CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.AccessRights) TcConstExpr cenv overallTy env m tpenv synConst - | SynExpr.Lambda _ -> + | SynExpr.Lambda _ -> TcIteratedLambdas cenv true env overallTy Set.empty tpenv synExpr | SynExpr.Match (spMatch, synInputExpr, synClauses, _m) -> @@ -5477,14 +5450,14 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = // (function[spMatch] pat1 -> expr1 ... | patN -> exprN) // - // --> + // --> // (fun anonArg -> let[spMatch] anonVal = anonArg in pat1 -> expr1 ... | patN -> exprN) // - // Note the presence of the "let" is visible in quotations regardless of the presence of sequence points, so + // Note the presence of the "let" is visible in quotations regardless of the presence of sequence points, so // <@ function x -> (x: int) @> // is // Lambda (_arg2, Let (x, _arg2, x)) - + | SynExpr.MatchLambda (isExnMatch, mArg, clauses, spMatch, m) -> let domainTy, resultTy = UnifyFunctionType None cenv env.DisplayEnv m overallTy @@ -5504,44 +5477,44 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = | SynExpr.Typed (synBodyExpr, synType, m) -> let tgtTy, tpenv = TcTypeAndRecover cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv synType UnifyTypes cenv env m overallTy tgtTy - let expr, tpenv = TcExpr cenv overallTy env tpenv synBodyExpr + let expr, tpenv = TcExpr cenv overallTy env tpenv synBodyExpr expr, tpenv // e :? ty | SynExpr.TypeTest (synInnerExpr, tgtTy, m) -> - let innerExpr, srcTy, tpenv = TcExprOfUnknownType cenv env tpenv synInnerExpr + let innerExpr, srcTy, tpenv = TcExprOfUnknownType cenv env tpenv synInnerExpr UnifyTypes cenv env m overallTy cenv.g.bool_ty let tgtTy, tpenv = TcType cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv tgtTy - TcRuntimeTypeTest (*isCast*)false (*isOperator*)true cenv env.DisplayEnv m tgtTy srcTy + TcRuntimeTypeTest (*isCast*)false (*isOperator*)true cenv env.DisplayEnv m tgtTy srcTy let expr = mkCallTypeTest cenv.g m tgtTy innerExpr expr, tpenv - - // SynExpr.AddressOf is noted in the syntax ast in order to recognize it as concrete type information - // during type checking, in particular prior to resolving overloads. This helps distinguish - // its use at method calls from the use of the conflicting 'ref' mechanism for passing byref parameters - | SynExpr.AddressOf (byref, synInnerExpr, opm, m) -> - TcExpr cenv overallTy env tpenv (mkSynPrefixPrim opm m (if byref then "~&" else "~&&") synInnerExpr) - - | SynExpr.Upcast (synInnerExpr, _, m) | SynExpr.InferredUpcast (synInnerExpr, m) -> - let innerExpr, srcTy, tpenv = TcExprOfUnknownType cenv env tpenv synInnerExpr - let tgtTy, tpenv = + + // SynExpr.AddressOf is noted in the syntax ast in order to recognize it as concrete type information + // during type checking, in particular prior to resolving overloads. This helps distinguish + // its use at method calls from the use of the conflicting 'ref' mechanism for passing byref parameters + | SynExpr.AddressOf (byref, synInnerExpr, opm, m) -> + TcExpr cenv overallTy env tpenv (mkSynPrefixPrim opm m (if byref then "~&" else "~&&") synInnerExpr) + + | SynExpr.Upcast (synInnerExpr, _, m) | SynExpr.InferredUpcast (synInnerExpr, m) -> + let innerExpr, srcTy, tpenv = TcExprOfUnknownType cenv env tpenv synInnerExpr + let tgtTy, tpenv = match synExpr with - | SynExpr.Upcast (_, tgtTy, m) -> + | SynExpr.Upcast (_, tgtTy, m) -> let tgtTy, tpenv = TcType cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv tgtTy UnifyTypes cenv env m tgtTy overallTy tgtTy, tpenv - | SynExpr.InferredUpcast _ -> - overallTy, tpenv + | SynExpr.InferredUpcast _ -> + overallTy, tpenv | _ -> failwith "upcast" TcStaticUpcast cenv env.DisplayEnv m tgtTy srcTy let expr = mkCoerceExpr(innerExpr, tgtTy, m, srcTy) expr, tpenv | SynExpr.Downcast (synInnerExpr, _, m) | SynExpr.InferredDowncast (synInnerExpr, m) -> - let innerExpr, srcTy, tpenv = TcExprOfUnknownType cenv env tpenv synInnerExpr - let tgtTy, tpenv, isOperator = + let innerExpr, srcTy, tpenv = TcExprOfUnknownType cenv env tpenv synInnerExpr + let tgtTy, tpenv, isOperator = match synExpr with - | SynExpr.Downcast (_, tgtTy, m) -> + | SynExpr.Downcast (_, tgtTy, m) -> let tgtTy, tpenv = TcType cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv tgtTy UnifyTypes cenv env m tgtTy overallTy tgtTy, tpenv, true @@ -5549,8 +5522,8 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = | _ -> failwith "downcast" TcRuntimeTypeTest (*isCast*)true isOperator cenv env.DisplayEnv m tgtTy srcTy - // TcRuntimeTypeTest ensures tgtTy is a nominal type. Hence we can insert a check here - // based on the nullness semantics of the nominal type. + // TcRuntimeTypeTest ensures tgtTy is a nominal type. Hence we can insert a check here + // based on the nullness semantics of the nominal type. let expr = mkCallUnbox cenv.g m tgtTy innerExpr expr, tpenv @@ -5561,22 +5534,22 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = | SynExpr.Lazy (synInnerExpr, m) -> let innerTy = NewInferenceType () UnifyTypes cenv env m overallTy (mkLazyTy cenv.g innerTy) - let innerExpr, tpenv = TcExpr cenv innerTy env tpenv synInnerExpr + let innerExpr, tpenv = TcExpr cenv innerTy env tpenv synInnerExpr let expr = mkLazyDelayed cenv.g m innerTy (mkUnitDelayLambda cenv.g m innerExpr) expr, tpenv - | SynExpr.Tuple (isExplicitStruct, args, _, m) -> + | SynExpr.Tuple (isExplicitStruct, args, _, m) -> let tupInfo, argTys = UnifyTupleTypeAndInferCharacteristics env.eContextInfo cenv env.DisplayEnv m overallTy isExplicitStruct args // No subsumption at tuple construction let flexes = argTys |> List.map (fun _ -> false) let args', tpenv = TcExprs cenv env m tpenv flexes argTys args - let expr = mkAnyTupled cenv.g m tupInfo args' argTys + let expr = mkAnyTupled cenv.g m tupInfo args' argTys expr, tpenv - | SynExpr.AnonRecd (isStruct, optOrigExpr, unsortedFieldExprs, mWholeExpr) -> + | SynExpr.AnonRecd (isStruct, optOrigExpr, unsortedFieldExprs, mWholeExpr) -> TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigExpr, unsortedFieldExprs, mWholeExpr) - | SynExpr.ArrayOrList (isArray, args, m) -> + | SynExpr.ArrayOrList (isArray, args, m) -> CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.AccessRights) let argty = NewInferenceType () @@ -5585,30 +5558,30 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = // Always allow subsumption if a nominal type is known prior to type checking any arguments let flex = not (isTyparTy cenv.g argty) let mutable first = true - let getInitEnv m = - if first then + let getInitEnv m = + if first then first <- false env else { env with eContextInfo = ContextInfo.CollectionElement (isArray, m) } let args', tpenv = List.mapFold (fun tpenv (x: SynExpr) -> TcExprFlex cenv flex false argty (getInitEnv x.Range) tpenv x) tpenv args - - let expr = + + let expr = if isArray then Expr.Op (TOp.Array, [argty], args', m) else List.foldBack (mkCons cenv.g argty) args' (mkNil cenv.g m argty) expr, tpenv - | SynExpr.New (superInit, synObjTy, arg, mNewExpr) -> + | SynExpr.New (superInit, synObjTy, arg, mNewExpr) -> let objTy, tpenv = TcType cenv NewTyparsOK CheckCxs ItemOccurence.Use env tpenv synObjTy - UnifyTypes cenv env mNewExpr overallTy objTy + UnifyTypes cenv env mNewExpr overallTy objTy TcNewExpr cenv env tpenv objTy (Some synObjTy.Range) superInit arg mNewExpr | SynExpr.ObjExpr (objTy, argopt, binds, extraImpls, mNewExpr, m) -> CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.eAccessRights) TcObjectExpr cenv overallTy env tpenv (objTy, argopt, binds, extraImpls, mNewExpr, m) - - | SynExpr.Record (inherits, optOrigExpr, flds, mWholeExpr) -> + + | SynExpr.Record (inherits, optOrigExpr, flds, mWholeExpr) -> CallExprHasTypeSink cenv.tcSink (mWholeExpr, env.NameEnv, overallTy, env.AccessRights) TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr) @@ -5623,15 +5596,15 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = let startExpr, tpenv = TcExpr cenv cenv.g.int_ty env tpenv start let finishExpr, tpenv = TcExpr cenv cenv.g.int_ty env tpenv finish let idv, _ = mkLocal id.idRange id.idText cenv.g.int_ty - let envinner = AddLocalVal cenv.g cenv.tcSink m idv env + let envinner = AddLocalVal cenv.tcSink m idv env // notify name resolution sink about loop variable let item = Item.Value(mkLocalValRef idv) CallNameResolutionSink cenv.tcSink (idv.Range, env.NameEnv, item, emptyTyparInst, ItemOccurence.Binding, env.AccessRights) - + let bodyExpr, tpenv = TcStmt cenv envinner tpenv body mkFastForLoop cenv.g (spBind, m, idv, startExpr, dir, finishExpr, bodyExpr), tpenv - + | SynExpr.ForEach (spForLoop, SeqExprOnly seqExprOnly, isFromSource, pat, enumSynExpr, bodySynExpr, m) -> assert isFromSource if seqExprOnly then warning (Error(FSComp.SR.tcExpressionRequiresSequence(), m)) @@ -5640,18 +5613,18 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = | SynExpr.CompExpr (isArrayOrList, isNotNakedRefCell, comp, m) -> let env = ExitFamilyRegion env cenv.TcSequenceExpressionEntry cenv env overallTy tpenv (isArrayOrList, isNotNakedRefCell, comp) m - + | SynExpr.ArrayOrListOfSeqExpr (isArray, comp, m) -> CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.eAccessRights) cenv.TcArrayOrListSequenceExpression cenv env overallTy tpenv (isArray, comp) m | SynExpr.LetOrUse _ -> - TcLinearExprs (TcExprThatCanBeCtorBody cenv) cenv env overallTy tpenv false synExpr (fun x -> x) + TcLinearExprs (TcExprThatCanBeCtorBody cenv) cenv env overallTy tpenv false synExpr (fun x -> x) | SynExpr.TryWith (synBodyExpr, _mTryToWith, synWithClauses, mWithToLast, mTryToLast, spTry, spWith) -> let bodyExpr, tpenv = TcExpr cenv overallTy env tpenv synBodyExpr - // Compile the pattern twice, once as a List.filter with all succeeding targets returning "1", and once as a proper catch block. - let filterClauses = synWithClauses |> List.map (function (SynMatchClause(pat, optWhenExpr, _, m, _)) -> SynMatchClause(pat, optWhenExpr, (SynExpr.Const (SynConst.Int32 1, m)), m, DebugPointForTarget.No)) + // Compile the pattern twice, once as a List.filter with all succeeding targets returning "1", and once as a proper catch block. + let filterClauses = synWithClauses |> List.map (function (Clause(pat, optWhenExpr, _, m, _)) -> Clause(pat, optWhenExpr, (SynExpr.Const (SynConst.Int32 1, m)), m, DebugPointForTarget.No)) let checkedFilterClauses, tpenv = TcMatchClauses cenv cenv.g.exn_ty cenv.g.int_ty env tpenv filterClauses let checkedHandlerClauses, tpenv = TcMatchClauses cenv cenv.g.exn_ty overallTy env tpenv synWithClauses let v1, filterExpr = CompilePatternForMatchClauses cenv env mWithToLast mWithToLast true FailFilter None cenv.g.exn_ty cenv.g.int_ty checkedFilterClauses @@ -5663,13 +5636,13 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = let finallyExpr, tpenv = TcStmt cenv env tpenv synFinallyExpr mkTryFinally cenv.g (bodyExpr, finallyExpr, mTryToLast, overallTy, spTry, spFinally), tpenv - | SynExpr.JoinIn (e1, mInToken, e2, mAll) -> + | SynExpr.JoinIn (e1, mInToken, e2, mAll) -> errorR(Error(FSComp.SR.parsUnfinishedExpression("in"), mInToken)) - let _, _, tpenv = suppressErrorReporting (fun () -> TcExprOfUnknownType cenv env tpenv e1) - let _, _, tpenv = suppressErrorReporting (fun () -> TcExprOfUnknownType cenv env tpenv e2) + let _, _, tpenv = suppressErrorReporting (fun () -> TcExprOfUnknownType cenv env tpenv e1) + let _, _, tpenv = suppressErrorReporting (fun () -> TcExprOfUnknownType cenv env tpenv e2) mkDefault(mAll, overallTy), tpenv - | SynExpr.ArbitraryAfterError (_debugStr, m) -> + | SynExpr.ArbitraryAfterError (_debugStr, m) -> //solveTypAsError cenv env.DisplayEnv m overallTy mkDefault(m, overallTy), tpenv @@ -5678,18 +5651,18 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = let _, _, tpenv = suppressErrorReporting (fun () -> TcExprOfUnknownTypeThen cenv env tpenv e1 [DelayedDot]) mkDefault(m, overallTy), tpenv - | SynExpr.FromParseError (e1, m) -> + | SynExpr.FromParseError (e1, m) -> //solveTypAsError cenv env.DisplayEnv m overallTy let _, tpenv = suppressErrorReporting (fun () -> TcExpr cenv overallTy env tpenv e1) mkDefault(m, overallTy), tpenv | SynExpr.Sequential (sp, dir, synExpr1, synExpr2, m) -> - if dir then - TcLinearExprs (TcExprThatCanBeCtorBody cenv) cenv env overallTy tpenv false synExpr (fun x -> x) - else - // Constructors using "new (...) = then " + if dir then + TcLinearExprs (TcExprThatCanBeCtorBody cenv) cenv env overallTy tpenv false synExpr (fun x -> x) + else + // Constructors using "new (...) = then " let expr1, tpenv = TcExprThatCanBeCtorBody cenv overallTy env tpenv synExpr1 - if (GetCtorShapeCounter env) <> 1 then + if (GetCtorShapeCounter env) <> 1 then errorR(Error(FSComp.SR.tcExpressionFormRequiresObjectConstructor(), m)) let expr2, tpenv = TcStmtThatCantBeCtorBody cenv env tpenv synExpr2 Expr.Sequential (expr1, expr2, ThenDoSeq, sp, m), tpenv @@ -5697,9 +5670,9 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = // Used to implement the type-directed 'implicit yield' rule for computation expressions | SynExpr.SequentialOrImplicitYield (sp, synExpr1, synExpr2, otherExpr, m) -> let isStmt, expr1, tpenv = TryTcStmt cenv env tpenv synExpr1 - if isStmt then + if isStmt then let env = ShrinkContext env m synExpr2.Range - let expr2, tpenv = TcExprThatCanBeCtorBody cenv overallTy env tpenv synExpr2 + let expr2, tpenv = TcExprThatCanBeCtorBody cenv overallTy env tpenv synExpr2 Expr.Sequential(expr1, expr2, NormalSeq, sp, m), tpenv else // The first expression wasn't unit-typed, so proceed to the alternative interpretation @@ -5711,13 +5684,13 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = UnifyTypes cenv env m overallTy cenv.g.unit_ty TcStmtThatCantBeCtorBody cenv env tpenv synInnerExpr - | SynExpr.IfThenElse _ -> - TcLinearExprs (TcExprThatCanBeCtorBody cenv) cenv env overallTy tpenv false synExpr (fun x -> x) + | SynExpr.IfThenElse _ -> + TcLinearExprs (TcExprThatCanBeCtorBody cenv) cenv env overallTy tpenv false synExpr (fun x -> x) - // This is for internal use in the libraries only + // This is for internal use in the libraries only | SynExpr.LibraryOnlyStaticOptimization (constraints, e2, e3, m) -> let constraints', tpenv = List.mapFold (TcStaticOptimizationConstraint cenv env) tpenv constraints - // Do not force the types of the two expressions to be equal + // Do not force the types of the two expressions to be equal // This means uses of this construct have to be very carefully written let e2', _, tpenv = TcExprOfUnknownType cenv env tpenv e2 let e3', tpenv = TcExpr cenv overallTy env tpenv e3 @@ -5747,14 +5720,14 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = let mExprAndDotLookup = unionRanges e1.Range (rangeOfLid longId) TcExprThen cenv overallTy env tpenv e1 [DelayedDotLookup(longId, mExprAndDotLookup); DelayedApp(ExprAtomicFlag.Atomic, e2, mStmt); MakeDelayedSet(e3, mStmt)] - | SynExpr.LongIdentSet (lidwd, e2, m) -> + | SynExpr.LongIdentSet (lidwd, e2, m) -> if lidwd.ThereIsAnExtraDotAtTheEnd then // just drop rhs on the floor TcLongIdentThen cenv overallTy env tpenv lidwd [ ] else TcLongIdentThen cenv overallTy env tpenv lidwd [ MakeDelayedSet(e2, m) ] - - // Type.Items(e1) <- e2 + + // Type.Items(e1) <- e2 | SynExpr.NamedIndexedPropertySet (lidwd, e1, e2, mStmt) -> if lidwd.ThereIsAnExtraDotAtTheEnd then // just drop rhs on the floor @@ -5765,24 +5738,24 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = | SynExpr.TraitCall (tps, memSpfn, arg, m) -> let synTypes = tps |> List.map (fun tp -> SynType.Var(tp, m)) let traitInfo, tpenv = TcPseudoMemberSpec cenv NewTyparsOK env synTypes tpenv memSpfn m - if BakedInTraitConstraintNames.Contains traitInfo.MemberName then + if BakedInTraitConstraintNames.Contains traitInfo.MemberName then warning(BakedInMemberConstraintName(traitInfo.MemberName, m)) - + let argTys = traitInfo.ArgumentTypes let returnTy = GetFSharpViewOfReturnType cenv.g traitInfo.ReturnType - let args, namedCallerArgs = GetMethodArgs arg + let args, namedCallerArgs = GetMethodArgs arg if not (isNil namedCallerArgs) then errorR(Error(FSComp.SR.tcNamedArgumentsCannotBeUsedInMemberTraits(), m)) // Subsumption at trait calls if arguments have nominal type prior to unification of any arguments or return type let flexes = argTys |> List.map (isTyparTy cenv.g >> not) let args', tpenv = TcExprs cenv env m tpenv flexes argTys args AddCxMethodConstraint env.DisplayEnv cenv.css m NoTrace traitInfo - UnifyTypes cenv env m overallTy returnTy + UnifyTypes cenv env m overallTy returnTy Expr.Op (TOp.TraitCall traitInfo, [], args', m), tpenv - + | SynExpr.LibraryOnlyUnionCaseFieldGet (e1, c, n, m) -> let e1', ty1, tpenv = TcExprOfUnknownType cenv env tpenv e1 - let mkf, ty2 = TcUnionCaseOrExnField cenv env ty1 m c n - ((fun (a, b) n -> mkUnionCaseFieldGetUnproven cenv.g (e1', a, b, n, m)), + let mkf, ty2 = TcUnionCaseOrExnField cenv env ty1 m c n + ((fun (a, b) n -> mkUnionCaseFieldGetUnproven cenv.g (e1', a, b, n, m)), (fun a n -> mkExnCaseFieldGet(e1', a, n, m))) UnifyTypes cenv env m overallTy ty2 mkf n, tpenv @@ -5791,25 +5764,24 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = UnifyTypes cenv env m overallTy cenv.g.unit_ty let e1', ty1, tpenv = TcExprOfUnknownType cenv env tpenv e1 let mkf, ty2 = TcUnionCaseOrExnField cenv env ty1 m c n - ((fun (a, b) n e2' -> + ((fun (a, b) n e2' -> if not (isUnionCaseFieldMutable cenv.g a n) then errorR(Error(FSComp.SR.tcFieldIsNotMutable(), m)) - mkUnionCaseFieldSet(e1', a, b, n, e2', m)), - (fun a n e2' -> + mkUnionCaseFieldSet(e1', a, b, n, e2', m)), + (fun a n e2' -> if not (isExnFieldMutable a n) then errorR(Error(FSComp.SR.tcFieldIsNotMutable(), m)) mkExnCaseFieldSet(e1', a, n, e2', m))) let e2', tpenv = TcExpr cenv ty2 env tpenv e2 mkf n e2', tpenv | SynExpr.LibraryOnlyILAssembly (s, tyargs, args, rtys, m) -> - let s = (s :?> ILInstr[]) let argTys = NewInferenceTypes args let tyargs', tpenv = TcTypes cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv tyargs // No subsumption at uses of IL assembly code let flexes = argTys |> List.map (fun _ -> false) let args', tpenv = TcExprs cenv env m tpenv flexes argTys args let rtys', tpenv = TcTypes cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv rtys - let returnTy = - match rtys' with + let returnTy = + match rtys' with | [] -> cenv.g.unit_ty | [ returnTy ] -> returnTy | _ -> error(InternalError("Only zero or one pushed items are permitted in IL assembly code", m)) @@ -5818,92 +5790,92 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = | SynExpr.Quote (oper, raw, ast, isFromQueryExpression, m) -> CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.AccessRights) - TcQuotationExpr cenv overallTy env tpenv (oper, raw, ast, isFromQueryExpression, m) + TcQuotationExpr cenv overallTy env tpenv (oper, raw, ast, isFromQueryExpression, m) | SynExpr.YieldOrReturn ((isTrueYield, _), _, m) - | SynExpr.YieldOrReturnFrom ((isTrueYield, _), _, m) when isTrueYield -> + | SynExpr.YieldOrReturnFrom ((isTrueYield, _), _, m) when isTrueYield -> error(Error(FSComp.SR.tcConstructRequiresListArrayOrSequence(), m)) | SynExpr.YieldOrReturn ((_, isTrueReturn), _, m) - | SynExpr.YieldOrReturnFrom ((_, isTrueReturn), _, m) when isTrueReturn -> + | SynExpr.YieldOrReturnFrom ((_, isTrueReturn), _, m) when isTrueReturn -> error(Error(FSComp.SR.tcConstructRequiresComputationExpressions(), m)) | SynExpr.YieldOrReturn (_, _, m) - | SynExpr.YieldOrReturnFrom (_, _, m) + | SynExpr.YieldOrReturnFrom (_, _, m) | SynExpr.ImplicitZero m -> error(Error(FSComp.SR.tcConstructRequiresSequenceOrComputations(), m)) - | SynExpr.DoBang (_, m) - | SynExpr.LetOrUseBang (range=m) -> + | SynExpr.DoBang (_, m) + | SynExpr.LetOrUseBang (range=m) -> error(Error(FSComp.SR.tcConstructRequiresComputationExpression(), m)) | SynExpr.MatchBang (_, _, _, m) -> error(Error(FSComp.SR.tcConstructRequiresComputationExpression(), m)) /// Check lambdas as a group, to catch duplicate names in patterns -and TcIteratedLambdas cenv isFirst (env: TcEnv) overallTy takenNames tpenv e = - match e with +and TcIteratedLambdas cenv isFirst (env: TcEnv) overallTy takenNames tpenv e = + match e with | SynExpr.Lambda (isMember, isSubsequent, spats, bodyExpr, _, m) when isMember || isFirst || isSubsequent -> let domainTy, resultTy = UnifyFunctionType None cenv env.DisplayEnv m overallTy let vs, (tpenv, names, takenNames) = TcSimplePats cenv isMember CheckCxs domainTy env (tpenv, Map.empty, takenNames) spats - let envinner, _, vspecMap = MakeAndPublishSimpleValsForMergedScope cenv env m names + let envinner, _, vspecMap = MakeAndPublishSimpleValsForMergedScope cenv env m names let byrefs = vspecMap |> Map.map (fun _ v -> isByrefTy cenv.g v.Type, v) let envinner = if isMember then envinner else ExitFamilyRegion envinner let bodyExpr, tpenv = TcIteratedLambdas cenv false envinner resultTy takenNames tpenv bodyExpr // See bug 5758: Non-monotonicity in inference: need to ensure that parameters are never inferred to have byref type, instead it is always declared - byrefs |> Map.iter (fun _ (orig, v) -> + byrefs |> Map.iter (fun _ (orig, v) -> if not orig && isByrefTy cenv.g v.Type then errorR(Error(FSComp.SR.tcParameterInferredByref v.DisplayName, v.Range))) - mkMultiLambda m (List.map (fun nm -> NameMap.find nm vspecMap) vs) (bodyExpr, resultTy), tpenv - | e -> + mkMultiLambda m (List.map (fun nm -> NameMap.find nm vspecMap) vs) (bodyExpr, resultTy), tpenv + | e -> // Dive into the expression to check for syntax errors and suppress them if they show. conditionallySuppressErrorReporting (not isFirst && synExprContainsError e) (fun () -> //TcExprFlex cenv true true overallTy env tpenv e) TcExpr cenv overallTy env tpenv e) + - -// Check expr.[idx] -// This is a little over complicated for my liking. Basically we want to interpret e1.[idx] as e1.Item(idx). -// However it's not so simple as all that. First "Item" can have a different name according to an attribute in -// .NET metadata. This means we manually typecheck 'e1' and look to see if it has a nominal type. We then -// do the right thing in each case. -and TcIndexerThen cenv env overallTy mWholeExpr mDot tpenv wholeExpr e1 indexArgs delayed = +// Check expr.[idx] +// This is a little over complicated for my liking. Basically we want to interpret e1.[idx] as e1.Item(idx). +// However it's not so simple as all that. First "Item" can have a different name according to an attribute in +// .NET metadata. This means we manually typecheck 'e1' and look to see if it has a nominal type. We then +// do the right thing in each case. +and TcIndexerThen cenv env overallTy mWholeExpr mDot tpenv wholeExpr e1 indexArgs delayed = let ad = env.AccessRights let e1', e1ty, tpenv = TcExprOfUnknownType cenv env tpenv e1 - - // Find the first type in the effective hierarchy that either has a DefaultMember attribute OR - // has a member called 'Item' + + // Find the first type in the effective hierarchy that either has a DefaultMember attribute OR + // has a member called 'Item' let isIndex = indexArgs |> List.forall( fun x -> match x with SynIndexerArg.One _ -> true | _ -> false) - let propName = + let propName = if isIndex then - FoldPrimaryHierarchyOfType (fun ty acc -> + FoldPrimaryHierarchyOfType (fun ty acc -> match acc with | None -> match tryTcrefOfAppTy cenv.g ty with | ValueSome tcref -> - TryFindTyconRefStringAttribute cenv.g mWholeExpr cenv.g.attrib_DefaultMemberAttribute tcref + TryFindTyconRefStringAttribute cenv.g mWholeExpr cenv.g.attrib_DefaultMemberAttribute tcref | _ -> let item = Some "Item" match AllPropInfosOfTypeInScope ResultCollectionSettings.AtMostOneResult cenv.infoReader env.NameEnv item ad IgnoreOverrides mWholeExpr ty with | [] -> None | _ -> item | _ -> acc) - cenv.g - cenv.amap - mWholeExpr + cenv.g + cenv.amap + mWholeExpr AllowMultiIntfInstantiations.Yes e1ty None else Some "GetSlice" let isNominal = isAppTy cenv.g e1ty + + let isArray = isArrayTy cenv.g e1ty + let isString = typeEquiv cenv.g cenv.g.string_ty e1ty - let isArray = isArrayTy cenv.g e1ty - let isString = typeEquiv cenv.g cenv.g.string_ty e1ty - - let idxRange = indexArgs |> List.map (fun e -> e.Range) |> List.reduce unionRanges + let idxRange = indexArgs |> List.map (fun e -> e.Range) |> List.reduce unionRanges // xs.GetReverseIndex rank offset - 1 - let rewriteReverseExpr (rank: int) (offset: SynExpr) (range: range) = + let rewriteReverseExpr (rank: int) (offset: SynExpr) (range: range) = let rankExpr = SynExpr.Const(SynConst.Int32(rank), range) let sliceArgs = SynExpr.Paren(SynExpr.Tuple(false, [rankExpr; offset], [], range), range, Some range, range) let xsId = e1 @@ -5913,16 +5885,16 @@ and TcIndexerThen cenv env overallTy mWholeExpr mDot tpenv wholeExpr e1 indexArg sliceArgs range - let rewriteReverseOption (app: SynExpr) (rank: int) (range: range) = + let rewriteReverseOption (app: SynExpr) (rank: int) (range: range) = match app with | SynExpr.App(atomicFlag, isInfix, funcExpr, e1, outerRange) -> SynExpr.App(atomicFlag, isInfix, funcExpr, rewriteReverseExpr rank e1 range, outerRange) | _ -> app - let expandedIndexArgs = - indexArgs + let expandedIndexArgs = + indexArgs |> List.mapi ( fun pos indexerArg -> match indexerArg with - | SynIndexerArg.One(expr, fromEnd, range) -> + | SynIndexerArg.One(expr, fromEnd, range) -> [ if fromEnd then rewriteReverseExpr pos expr range else expr ] | SynIndexerArg.Two ( @@ -5931,25 +5903,25 @@ and TcIndexerThen cenv env overallTy mWholeExpr mDot tpenv wholeExpr e1 indexArg a2, fromEnd2, range1, - range2) -> + range2) -> [ if fromEnd1 then rewriteReverseOption a1 pos range1 else a1 ; if fromEnd2 then rewriteReverseOption a2 pos range2 else a2 ] ) |> List.collect (id) - - let MakeIndexParam setSliceArrayOption = - match indexArgs with + + let MakeIndexParam setSliceArrayOption = + match indexArgs with | [] -> failwith "unexpected empty index list" | [SynIndexerArg.One _] -> SynExpr.Paren (expandedIndexArgs.Head, range0, None, idxRange) | _ -> SynExpr.Paren (SynExpr.Tuple (false, expandedIndexArgs @ Option.toList setSliceArrayOption, [], idxRange), range0, None, idxRange) - let attemptArrayString = + let attemptArrayString = let indexOpPath = ["Microsoft";"FSharp";"Core";"LanguagePrimitives";"IntrinsicFunctions"] let sliceOpPath = ["Microsoft";"FSharp";"Core";"Operators";"OperatorIntrinsics"] - let info = + let info = if isArray then let fixedIndex3d4dEnabled = cenv.g.langVersion.SupportsFeature LanguageFeature.FixedIndexSlice3d4d match wholeExpr with @@ -6025,77 +5997,77 @@ and TcIndexerThen cenv env overallTy mWholeExpr mDot tpenv wholeExpr e1 indexArg | _ -> None else None - - match info with + + match info with | None -> None - | Some (path, functionName, indexArgs) -> + | Some (path, functionName, indexArgs) -> let operPath = mkSynLidGet mDot path (CompileOpName functionName) let f, fty, tpenv = TcExprOfUnknownType cenv env tpenv operPath let domainTy, resultTy = UnifyFunctionType (Some mWholeExpr) cenv env.DisplayEnv mWholeExpr fty - UnifyTypes cenv env mWholeExpr domainTy e1ty + UnifyTypes cenv env mWholeExpr domainTy e1ty let f', resultTy = buildApp cenv (MakeApplicableExprNoFlex cenv f) resultTy e1' mWholeExpr let delayed = List.foldBack (fun idx acc -> DelayedApp(ExprAtomicFlag.Atomic, idx, mWholeExpr) :: acc) indexArgs delayed // atomic, otherwise no ar.[1] <- xyz Some (PropagateThenTcDelayed cenv overallTy env tpenv mWholeExpr f' resultTy ExprAtomicFlag.Atomic delayed ) - match attemptArrayString with + match attemptArrayString with | Some res -> res - | None -> + | None -> if isNominal || Option.isSome propName then - let nm = - match propName with + let nm = + match propName with | None -> "Item" | Some nm -> nm - let delayed = - match wholeExpr with - // e1.[e2] - | SynExpr.DotIndexedGet _ -> + let delayed = + match wholeExpr with + // e1.[e2] + | SynExpr.DotIndexedGet _ -> DelayedDotLookup([ident(nm, mWholeExpr)], mWholeExpr) :: DelayedApp(ExprAtomicFlag.Atomic, MakeIndexParam None, mWholeExpr) :: delayed // e1.[e2] <- e3 - | SynExpr.DotIndexedSet (_, _, e3, mOfLeftOfSet, _, _) -> - match isIndex with + | SynExpr.DotIndexedSet (_, _, e3, mOfLeftOfSet, _, _) -> + match isIndex with | true -> DelayedDotLookup([ident(nm, mOfLeftOfSet)], mOfLeftOfSet) :: DelayedApp(ExprAtomicFlag.Atomic, MakeIndexParam None, mOfLeftOfSet) :: MakeDelayedSet(e3, mWholeExpr) :: delayed | false -> DelayedDotLookup([ident("SetSlice", mOfLeftOfSet)], mOfLeftOfSet) :: DelayedApp(ExprAtomicFlag.Atomic, MakeIndexParam (Some e3), mWholeExpr) :: delayed - + | _ -> error(InternalError("unreachable", mWholeExpr)) - PropagateThenTcDelayed cenv overallTy env tpenv mDot (MakeApplicableExprNoFlex cenv e1') e1ty ExprAtomicFlag.Atomic delayed + PropagateThenTcDelayed cenv overallTy env tpenv mDot (MakeApplicableExprNoFlex cenv e1') e1ty ExprAtomicFlag.Atomic delayed - else - // deprecated constrained lookup + else + // deprecated constrained lookup error(Error(FSComp.SR.tcObjectOfIndeterminateTypeUsedRequireTypeConstraint(), mWholeExpr)) -/// Check a 'new Type(args)' expression, also an 'inheritedTys declaration in an implicit or explicit class +/// Check a 'new Type(args)' expression, also an 'inheritedTys declaration in an implicit or explicit class /// For 'new Type(args)', mWholeExprOrObjTy is the whole expression /// For 'inherit Type(args)', mWholeExprOrObjTy is the whole expression /// For an implicit inherit from System.Object or a default constructor, mWholeExprOrObjTy is the type name of the type being defined and TcNewExpr cenv env tpenv objTy mObjTyOpt superInit arg mWholeExprOrObjTy = let ad = env.AccessRights - // Handle the case 'new 'a()' - if (isTyparTy cenv.g objTy) then + // Handle the case 'new 'a()' + if (isTyparTy cenv.g objTy) then if superInit then error(Error(FSComp.SR.tcCannotInheritFromVariableType(), mWholeExprOrObjTy)) AddCxTypeMustSupportDefaultCtor env.DisplayEnv cenv.css mWholeExprOrObjTy NoTrace objTy - - match arg with + + match arg with | SynExpr.Const (SynConst.Unit, _) -> () | _ -> errorR(Error(FSComp.SR.tcObjectConstructorsOnTypeParametersCannotTakeArguments(), mWholeExprOrObjTy)) - + mkCallCreateInstance cenv.g mWholeExprOrObjTy objTy, tpenv - else + else if not (isAppTy cenv.g objTy) && not (isAnyTupleTy cenv.g objTy) then error(Error(FSComp.SR.tcNamedTypeRequired(if superInit then "inherit" else "new"), mWholeExprOrObjTy)) let item = ForceRaise (ResolveObjectConstructor cenv.nameResolver env.DisplayEnv mWholeExprOrObjTy ad objTy) - + TcCtorCall false cenv env tpenv objTy objTy mObjTyOpt item superInit [arg] mWholeExprOrObjTy [] None -/// Check an 'inheritedTys declaration in an implicit or explicit class +/// Check an 'inheritedTys declaration in an implicit or explicit class and TcCtorCall isNaked cenv env tpenv overallTy objTy mObjTyOpt item superInit args mWholeCall delayed afterTcOverloadResolutionOpt = let ad = env.AccessRights let isSuperInit = (if superInit then CtorValUsedAsSuperInit else NormalValUse) let mItem = match mObjTyOpt with Some m -> m | None -> mWholeCall - if isInterfaceTy cenv.g objTy then + if isInterfaceTy cenv.g objTy then error(Error((if superInit then FSComp.SR.tcInheritCannotBeUsedOnInterfaceType() else FSComp.SR.tcNewCannotBeUsedOnInterfaceType()), mWholeCall)) - match item, args with + match item, args with | Item.CtorGroup(methodName, minfos), _ -> let meths = List.map (fun minfo -> minfo, None) minfos if isNaked && TypeFeasiblySubsumesType 0 cenv.g cenv.amap mWholeCall cenv.g.system_IDisposable_ty NoCoerce objTy then @@ -6109,71 +6081,71 @@ and TcCtorCall isNaked cenv env tpenv overallTy objTy mObjTyOpt item superInit a let afterResolution = match mObjTyOpt, afterTcOverloadResolutionOpt with | _, Some action -> action - | Some mObjTy, None -> ForNewConstructors cenv.tcSink env mObjTy methodName minfos + | Some mObjTy, None -> ForNewConstructors cenv.tcSink env mObjTy methodName minfos | None, _ -> AfterResolution.DoNothing - TcMethodApplicationThen cenv env overallTy (Some objTy) tpenv None [] mWholeCall mItem methodName ad PossiblyMutates false meths afterResolution isSuperInit args ExprAtomicFlag.NonAtomic delayed + TcMethodApplicationThen cenv env overallTy (Some objTy) tpenv None [] mWholeCall mItem methodName ad PossiblyMutates false meths afterResolution isSuperInit args ExprAtomicFlag.NonAtomic delayed | Item.DelegateCtor ty, [arg] -> // Re-record the name resolution since we now know it's a constructor call - match mObjTyOpt with + match mObjTyOpt with | Some mObjTy -> CallNameResolutionSink cenv.tcSink (mObjTy, env.NameEnv, item, emptyTyparInst, ItemOccurence.Use, env.AccessRights) | None -> () TcNewDelegateThen cenv objTy env tpenv mItem mWholeCall ty arg ExprAtomicFlag.NonAtomic delayed - | _ -> + | _ -> error(Error(FSComp.SR.tcSyntaxCanOnlyBeUsedToCreateObjectTypes(if superInit then "inherit" else "new"), mWholeCall)) -// Check a record construction expression +// Check a record construction expression and TcRecordConstruction cenv overallTy env tpenv optOrigExprInfo objTy fldsList m = let tcref, tinst = destAppTy cenv.g objTy let tycon = tcref.Deref UnifyTypes cenv env m overallTy objTy - // Types with implicit constructors can't use record or object syntax: all constructions must go through the implicit constructor - if tycon.MembersOfFSharpTyconByName |> NameMultiMap.existsInRange (fun v -> v.IsIncrClassConstructor) then + // Types with implicit constructors can't use record or object syntax: all constructions must go through the implicit constructor + if tycon.MembersOfFSharpTyconByName |> NameMultiMap.existsInRange (fun v -> v.IsIncrClassConstructor) then errorR(Error(FSComp.SR.tcConstructorRequiresCall(tycon.DisplayName), m)) - + let fspecs = tycon.TrueInstanceFieldsAsList // Freshen types and work out their subtype flexibility - let fldsList = - [ for (fname, fexpr) in fldsList do - let fspec = - try - fspecs |> List.find (fun fspec -> fspec.Name = fname) - with :? KeyNotFoundException -> + let fldsList = + [ for (fname, fexpr) in fldsList do + let fspec = + try + fspecs |> List.find (fun fspec -> fspec.Name = fname) + with :? KeyNotFoundException -> error (Error(FSComp.SR.tcUndefinedField(fname, NicePrint.minimalStringOfType env.DisplayEnv objTy), m)) let fty = actualTyOfRecdFieldForTycon tycon tinst fspec let flex = not (isTyparTy cenv.g fty) yield (fname, fexpr, fty, flex) ] - // Type check and generalize the supplied bindings - let fldsList, tpenv = + // Type check and generalize the supplied bindings + let fldsList, tpenv = let env = { env with eContextInfo = ContextInfo.RecordFields } (tpenv, fldsList) ||> List.mapFold (fun tpenv (fname, fexpr, fty, flex) -> let fieldExpr, tpenv = TcExprFlex cenv flex false fty env tpenv fexpr (fname, fieldExpr), tpenv) - - // Add rebindings for unbound field when an "old value" is available - // Effect order: mutable fields may get modified by other bindings... - let oldFldsList = + + // Add rebindings for unbound field when an "old value" is available + // Effect order: mutable fields may get modified by other bindings... + let oldFldsList = match optOrigExprInfo with | None -> [] - | Some (_, _, oldvaddre) -> + | Some (_, _, oldvaddre) -> let fieldNameUnbound nom = List.forall (fun (name, _) -> name <> nom) fldsList - let flds = - fspecs |> List.choose (fun rfld -> - if fieldNameUnbound rfld.Name && not rfld.IsZeroInit + let flds = + fspecs |> List.choose (fun rfld -> + if fieldNameUnbound rfld.Name && not rfld.IsZeroInit then Some(rfld.Name, mkRecdFieldGetViaExprAddr (oldvaddre, tcref.MakeNestedRecdFieldRef rfld, tinst, m)) else None) flds let fldsList = fldsList @ oldFldsList - // From now on only interested in fspecs that truly need values. + // From now on only interested in fspecs that truly need values. let fspecs = fspecs |> List.filter (fun f -> not f.IsZeroInit) - + // Check all fields are bound fspecs |> List.iter (fun fspec -> if not (fldsList |> List.exists (fun (fname, _) -> fname = fspec.Name)) then @@ -6182,35 +6154,35 @@ and TcRecordConstruction cenv overallTy env tpenv optOrigExprInfo objTy fldsList // Other checks (overlap with above check now clear) let ns1 = NameSet.ofList (List.map fst fldsList) let ns2 = NameSet.ofList (List.map (fun x -> x.rfield_id.idText) fspecs) - + if optOrigExprInfo.IsNone && not (Zset.subset ns2 ns1) then error (MissingFields(Zset.elements (Zset.diff ns2 ns1), m)) - - if not (Zset.subset ns1 ns2) then + + if not (Zset.subset ns1 ns2) then error (Error(FSComp.SR.tcExtraneousFieldsGivenValues(), m)) - - // Build record + + // Build record let rfrefs = List.map (fst >> mkRecdFieldRef tcref) fldsList - // Check accessibility: this is also done in BuildFieldMap, but also need to check - // for fields in { new R with a=1 and b=2 } constructions and { r with a=1 } copy-and-update expressions - rfrefs |> List.iter (fun rfref -> + // Check accessibility: this is also done in BuildFieldMap, but also need to check + // for fields in { new R with a=1 and b=2 } constructions and { r with a=1 } copy-and-update expressions + rfrefs |> List.iter (fun rfref -> CheckRecdFieldAccessible cenv.amap m env.eAccessRights rfref |> ignore - CheckFSharpAttributes cenv.g rfref.PropertyAttribs m |> CommitOperationResult) + CheckFSharpAttributes cenv.g rfref.PropertyAttribs m |> CommitOperationResult) let args = List.map snd fldsList - + let expr = mkRecordExpr cenv.g (GetRecdInfo env, tcref, tinst, rfrefs, args, m) - let expr = - match optOrigExprInfo with + let expr = + match optOrigExprInfo with | None -> // '{ recd fields }'. // expr - - | Some (old, oldvaddr, _) -> - // '{ recd with fields }'. - // Assign the first object to a tmp and then construct + + | Some (old, oldvaddr, _) -> + // '{ recd with fields }'. + // Assign the first object to a tmp and then construct let wrap, oldaddr, _readonly, _writeonly = mkExprAddrOfExpr cenv.g tycon.IsStructOrEnumTycon false NeverMutates old None m wrap (mkCompGenLet m oldvaddr oldaddr expr) @@ -6218,60 +6190,60 @@ and TcRecordConstruction cenv overallTy env tpenv optOrigExprInfo objTy fldsList //------------------------------------------------------------------------- // TcObjectExpr -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- and GetNameAndArityOfObjExprBinding _cenv _env b = let (NormalizedBinding (_, _, _, _, _, _, _, valSynData, pat, rhsExpr, mBinding, _)) = b - let (SynValData(memberFlagsOpt, valSynInfo, _)) = valSynData - match pat, memberFlagsOpt with + let (SynValData(memberFlagsOpt, valSynInfo, _)) = valSynData + match pat, memberFlagsOpt with // This is the normal case for F# 'with member x.M(...) = ...' | SynPat.InstanceMember(_thisId, memberId, _, None, _), Some memberFlags -> let logicalMethId = ident (ComputeLogicalName memberId memberFlags, memberId.idRange) logicalMethId.idText, valSynInfo - | _ -> + | _ -> // This is for the deprecated form 'with M(...) = ...' let rec lookPat pat = - match pat with + match pat with | SynPat.Typed(pat, _, _) -> lookPat pat | SynPat.FromParseError(pat, _) -> lookPat pat - | SynPat.Named (id, _, None, _) -> + | SynPat.Named (SynPat.Wild _, id, _, None, _) -> let (NormalizedBindingRhs(pushedPats, _, _)) = rhsExpr let infosForExplicitArgs = pushedPats |> List.map SynInfo.InferSynArgInfoFromSimplePats - let infosForExplicitArgs = SynInfo.AdjustMemberArgs SynMemberKind.Member infosForExplicitArgs - let infosForExplicitArgs = SynInfo.AdjustArgsForUnitElimination infosForExplicitArgs + let infosForExplicitArgs = SynInfo.AdjustMemberArgs MemberKind.Member infosForExplicitArgs + let infosForExplicitArgs = SynInfo.AdjustArgsForUnitElimination infosForExplicitArgs let argInfos = [SynInfo.selfMetadata] @ infosForExplicitArgs let retInfo = SynInfo.unnamedRetVal //SynInfo.InferSynReturnData pushedRetInfoOpt let valSynData = SynValInfo(argInfos, retInfo) (id.idText, valSynData) - | _ -> error(Error(FSComp.SR.tcObjectExpressionsCanOnlyOverrideAbstractOrVirtual(), mBinding)) + | _ -> error(Error(FSComp.SR.tcObjectExpressionsCanOnlyOverrideAbstractOrVirtual(), mBinding)) lookPat pat -and FreshenObjExprAbstractSlot cenv (env: TcEnv) (implty: TType) virtNameAndArityPairs (bind, bindAttribs, bindName, absSlots:(_ * MethInfo) list) = +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) -> + match absSlots with + | [] when not (CompileAsEvent cenv.g bindAttribs) -> let absSlotsByName = List.filter (fst >> fst >> (=) bindName) virtNameAndArityPairs - let getSignature absSlot = (NicePrint.stringOfMethInfo cenv.infoReader mBinding env.DisplayEnv absSlot).Replace("abstract ", "") - let getDetails (absSlot: MethInfo) = + 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 + let arity = + match SynInfo.AritiesOfArgs synValInfo with | _ :: x :: _ -> x | _ -> 0 - - match absSlotsByName with + + match absSlotsByName with | [] -> let tcref = tcrefOfAppTy cenv.g implty - let containsNonAbstractMemberWithSameName = + let containsNonAbstractMemberWithSameName = tcref.MembersOfFSharpTyconByName |> Seq.exists (fun kv -> kv.Value |> List.exists (fun valRef -> valRef.DisplayName = bindName)) @@ -6287,73 +6259,73 @@ and FreshenObjExprAbstractSlot cenv (env: TcEnv) (implty: TType) virtNameAndArit 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 - - | [(_, absSlot)] -> - + + | [(_, absSlot)] -> + let typarsFromAbsSlotAreRigid, typarsFromAbsSlot, argTysFromAbsSlot, retTyFromAbsSlot = FreshenAbstractSlot cenv.g cenv.amap mBinding synTyparDecls absSlot - // Work out the required type of the member - let bindingTy = implty --> (mkMethodTy cenv.g argTysFromAbsSlot retTyFromAbsSlot) - + // Work out the required type of the member + let bindingTy = implty --> (mkMethodTy cenv.g argTysFromAbsSlot retTyFromAbsSlot) + Some(typarsFromAbsSlotAreRigid, typarsFromAbsSlot, bindingTy) - - | _ -> + + | _ -> None and TcObjectExprBinding cenv (env: TcEnv) implty tpenv (absSlotInfo, bind) = - // 4a1. normalize the binding (note: needlessly repeating what we've done above) + // 4a1. normalize the binding (note: needlessly repeating what we've done above) let (NormalizedBinding(vis, bkind, isInline, isMutable, attrs, doc, synTyparDecls, valSynData, p, bindingRhs, mBinding, spBind)) = bind - let (SynValData(memberFlagsOpt, _, _)) = valSynData - // 4a2. adjust the binding, especially in the "member" case, a subset of the logic of AnalyzeAndMakeAndPublishRecursiveValue - let bindingRhs, logicalMethId, memberFlags = - let rec lookPat p = - match p, memberFlagsOpt with + let (SynValData(memberFlagsOpt, _, _)) = valSynData + // 4a2. adjust the binding, especially in the "member" case, a subset of the logic of AnalyzeAndMakeAndPublishRecursiveValue + let bindingRhs, logicalMethId, memberFlags = + let rec lookPat p = + match p, memberFlagsOpt with | SynPat.FromParseError(pat, _), _ -> lookPat pat - | SynPat.Named (id, _, _, _), None -> - let bindingRhs = PushOnePatternToRhs cenv true (mkSynThisPatVar (ident (CompilerGeneratedName "this", id.idRange))) bindingRhs + | SynPat.Named (SynPat.Wild _, id, _, _, _), None -> + let bindingRhs = PushOnePatternToRhs cenv true (mkSynThisPatVar (ident (CompilerGeneratedName "this", id.idRange))) bindingRhs let logicalMethId = id - let memberFlags = OverrideMemberFlags SynMemberKind.Member + let memberFlags = OverrideMemberFlags MemberKind.Member bindingRhs, logicalMethId, memberFlags - | SynPat.InstanceMember(thisId, memberId, _, _, _), Some memberFlags -> + | SynPat.InstanceMember(thisId, memberId, _, _, _), Some memberFlags -> CheckMemberFlags None NewSlotsOK OverridesOK memberFlags mBinding let bindingRhs = PushOnePatternToRhs cenv true (mkSynThisPatVar thisId) bindingRhs let logicalMethId = ident (ComputeLogicalName memberId memberFlags, memberId.idRange) bindingRhs, logicalMethId, memberFlags - | _ -> + | _ -> error(InternalError("unexpected member binding", mBinding)) lookPat p - let bind = NormalizedBinding (vis, bkind, isInline, isMutable, attrs, doc, synTyparDecls, valSynData, mkSynPatVar vis logicalMethId, bindingRhs, mBinding, spBind) - - // 4b. typecheck the binding - let bindingTy = + let bind = NormalizedBinding (vis, bkind, isInline, isMutable, attrs, doc, synTyparDecls, valSynData, mkSynPatVar vis logicalMethId, bindingRhs, mBinding, spBind) + + // 4b. typecheck the binding + let bindingTy = match absSlotInfo with - | Some(_, _, memberTyFromAbsSlot) -> + | Some(_, _, memberTyFromAbsSlot) -> memberTyFromAbsSlot - | _ -> + | _ -> implty --> NewInferenceType () - let (CheckedBindingInfo(inlineFlag, bindingAttribs, _, _, ExplicitTyparInfo(_, declaredTypars, _), nameToPrelimValSchemeMap, rhsExpr, _, _, m, _, _, _, _), tpenv) = + let (CheckedBindingInfo(inlineFlag, bindingAttribs, _, _, ExplicitTyparInfo(_, declaredTypars, _), nameToPrelimValSchemeMap, rhsExpr, _, _, m, _, _, _, _), tpenv) = let explicitTyparInfo, tpenv = TcNonrecBindingTyparDecls cenv env tpenv bind TcNormalizedBinding ObjectExpressionOverrideBinding cenv env tpenv bindingTy None NoSafeInitInfo ([], explicitTyparInfo) bind - // 4c. generalize the binding - only relevant when implementing a generic virtual method - - match NameMap.range nameToPrelimValSchemeMap with - | [PrelimValScheme1(id, _, _, _, _, _, _, _, _, _, _)] -> + // 4c. generalize the binding - only relevant when implementing a generic virtual method + + match NameMap.range nameToPrelimValSchemeMap with + | [PrelimValScheme1(id, _, _, _, _, _, _, _, _, _, _)] -> let denv = env.DisplayEnv - let declaredTypars = + let declaredTypars = match absSlotInfo with - | Some(typarsFromAbsSlotAreRigid, typarsFromAbsSlot, _) -> + | Some(typarsFromAbsSlotAreRigid, typarsFromAbsSlot, _) -> if typarsFromAbsSlotAreRigid then typarsFromAbsSlot else declaredTypars - | _ -> + | _ -> declaredTypars - // Canonicalize constraints prior to generalization + // Canonicalize constraints prior to generalization ConstraintSolver.CanonicalizePartialInferenceProblem cenv.css denv m declaredTypars let freeInEnv = GeneralizationHelpers.ComputeUngeneralizableTypars env @@ -6361,66 +6333,66 @@ and TcObjectExprBinding cenv (env: TcEnv) implty tpenv (absSlotInfo, bind) = 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 + let generalizedTypars = PlaceTyparsInDeclarationOrder declaredTypars generalizedTypars (id, memberFlags, (generalizedTypars +-> bindingTy), bindingAttribs, rhsExpr), tpenv - | _ -> + | _ -> error(Error(FSComp.SR.tcSimpleMethodNameRequired(), m)) - + and ComputeObjectExprOverrides cenv (env: TcEnv) tpenv impls = // Compute the method sets each implemented type needs to implement let slotImplSets = DispatchSlotChecking.GetSlotImplSets cenv.infoReader env.DisplayEnv env.AccessRights true (impls |> List.map (fun (m, ty, _) -> ty, m)) - let allImpls = - (impls, slotImplSets) ||> List.map2 (fun (m, ty, binds) implTySet -> + let allImpls = + (impls, slotImplSets) ||> List.map2 (fun (m, ty, binds) implTySet -> let binds = binds |> List.map (BindingNormalization.NormalizeBinding ObjExprBinding cenv env) - m, ty, binds, implTySet) + m, ty, binds, implTySet) - let overridesAndVirts, tpenv = + let overridesAndVirts, tpenv = (tpenv, allImpls) ||> List.mapFold (fun tpenv (m, implty, binds, SlotImplSet(reqdSlots, dispatchSlotsKeyed, availPriorOverrides, _) ) -> - + // Generate extra bindings fo object expressions with bindings using the CLIEvent attribute - let binds, bindsAttributes = + let binds, bindsAttributes = [ for binding in binds do let (NormalizedBinding(_, _, _, _, bindingSynAttribs, _, _, valSynData, _, _, _, _)) = binding - let (SynValData(memberFlagsOpt, _, _)) = valSynData + let (SynValData(memberFlagsOpt, _, _)) = valSynData let attrTgt = DeclKind.AllowedAttribTargets memberFlagsOpt ObjectExpressionOverrideBinding let bindingAttribs = TcAttributes cenv env attrTgt bindingSynAttribs yield binding, bindingAttribs for extraBinding in EventDeclarationNormalization.GenerateExtraBindings cenv (bindingAttribs, binding) do yield extraBinding, [] ] |> List.unzip - - // 2. collect all name/arity of all overrides + + // 2. collect all name/arity of all overrides let dispatchSlots = reqdSlots |> List.map (fun reqdSlot -> reqdSlot.MethodInfo) - let virtNameAndArityPairs = dispatchSlots |> List.map (fun virt -> - let vkey = (virt.LogicalName, virt.NumArgs) + let virtNameAndArityPairs = dispatchSlots |> List.map (fun virt -> + let vkey = (virt.LogicalName, virt.NumArgs) //dprintfn "vkey = %A" vkey - (vkey, virt)) - let bindNameAndSynInfoPairs = binds |> List.map (GetNameAndArityOfObjExprBinding cenv env) + (vkey, virt)) + let bindNameAndSynInfoPairs = binds |> List.map (GetNameAndArityOfObjExprBinding cenv env) let bindNames = bindNameAndSynInfoPairs |> List.map fst - let bindKeys = - bindNameAndSynInfoPairs |> List.map (fun (name, valSynData) -> + let bindKeys = + bindNameAndSynInfoPairs |> List.map (fun (name, valSynData) -> // Compute the argument counts of the member arguments let argCounts = (SynInfo.AritiesOfArgs valSynData).Tail //dprintfn "name = %A, argCounts = %A" name argCounts (name, argCounts)) - // 3. infer must-have types by name/arity - let preAssignedVirtsPerBinding = - bindKeys |> List.map (fun bkey -> List.filter (fst >> (=) bkey) virtNameAndArityPairs) + // 3. infer must-have types by name/arity + let preAssignedVirtsPerBinding = + bindKeys |> List.map (fun bkey -> List.filter (fst >> (=) bkey) virtNameAndArityPairs) - let absSlotInfo = - (List.zip4 binds bindsAttributes bindNames preAssignedVirtsPerBinding) + let absSlotInfo = + (List.zip4 binds bindsAttributes bindNames preAssignedVirtsPerBinding) |> List.map (FreshenObjExprAbstractSlot cenv env implty virtNameAndArityPairs) - // 4. typecheck/typeinfer/generalizer overrides using this information + // 4. typecheck/typeinfer/generalizer overrides using this information let overrides, tpenv = (tpenv, List.zip absSlotInfo binds) ||> List.mapFold (TcObjectExprBinding cenv env implty) - // Convert the syntactic info to actual info - let overrides = - (overrides, bindNameAndSynInfoPairs) ||> List.map2 (fun (id: Ident, memberFlags, ty, bindingAttribs, bindingBody) (_, valSynData) -> + // Convert the syntactic info to actual info + let overrides = + (overrides, bindNameAndSynInfoPairs) ||> List.map2 (fun (id: Ident, memberFlags, ty, bindingAttribs, bindingBody) (_, valSynData) -> let partialValInfo = TranslateTopValSynInfo id.idRange (TcAttributes cenv env) valSynData let tps, _ = tryDestForallTy cenv.g ty let valInfo = TranslatePartialArity tps partialValInfo @@ -6430,18 +6402,18 @@ and ComputeObjectExprOverrides cenv (env: TcEnv) tpenv impls = overridesAndVirts, tpenv -and CheckSuperType cenv ty m = +and CheckSuperType cenv ty m = if typeEquiv cenv.g ty cenv.g.system_Value_ty || typeEquiv cenv.g ty cenv.g.system_Enum_ty || typeEquiv cenv.g ty cenv.g.system_Array_ty || typeEquiv cenv.g ty cenv.g.system_MulticastDelegate_ty || - typeEquiv cenv.g ty cenv.g.system_Delegate_ty then + typeEquiv cenv.g ty cenv.g.system_Delegate_ty then error(Error(FSComp.SR.tcPredefinedTypeCannotBeUsedAsSuperType(), m)) if isErasedType cenv.g ty then errorR(Error(FSComp.SR.tcCannotInheritFromErasedType(), m)) - - -and TcObjectExpr cenv overallTy env tpenv (synObjTy, argopt, binds, extraImpls, mNewExpr, mWholeExpr) = + + +and TcObjectExpr cenv overallTy env tpenv (synObjTy, argopt, binds, extraImpls, mNewExpr, mWholeExpr) = let mObjTy = synObjTy.Range let objTy, tpenv = TcType cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv synObjTy @@ -6450,41 +6422,41 @@ and TcObjectExpr cenv overallTy env tpenv (synObjTy, argopt, binds, extraImpls, | ValueSome tcref -> let isRecordTy = tcref.IsRecordTycon if not isRecordTy && not (isInterfaceTy cenv.g objTy) && isSealedTy cenv.g objTy then errorR(Error(FSComp.SR.tcCannotCreateExtensionOfSealedType(), mNewExpr)) + + CheckSuperType cenv objTy synObjTy.Range - CheckSuperType cenv objTy synObjTy.Range - - // Add the object type to the ungeneralizable items - let env = {env with eUngeneralizableItems = addFreeItemOfTy objTy env.eUngeneralizableItems } - - // Object expression members can access protected members of the implemented type + // Add the object type to the ungeneralizable items + let env = {env with eUngeneralizableItems = addFreeItemOfTy objTy env.eUngeneralizableItems } + + // Object expression members can access protected members of the implemented type let env = EnterFamilyRegion tcref env let ad = env.AccessRights - + if // record construction ? - isRecordTy || + isRecordTy || // object construction? - (isFSharpObjModelTy cenv.g objTy && not (isInterfaceTy cenv.g objTy) && argopt.IsNone) then + (isFSharpObjModelTy cenv.g objTy && not (isInterfaceTy cenv.g objTy) && argopt.IsNone) then if argopt.IsSome then error(Error(FSComp.SR.tcNoArgumentsForRecordValue(), mWholeExpr)) if not (isNil extraImpls) then error(Error(FSComp.SR.tcNoInterfaceImplementationForConstructionExpression(), mNewExpr)) - if isFSharpObjModelTy cenv.g objTy && GetCtorShapeCounter env <> 1 then + if isFSharpObjModelTy cenv.g objTy && GetCtorShapeCounter env <> 1 then error(Error(FSComp.SR.tcObjectConstructionCanOnlyBeUsedInClassTypes(), mNewExpr)) - let fldsList = - binds |> List.map (fun b -> - match BindingNormalization.NormalizeBinding ObjExprBinding cenv env b with - | NormalizedBinding (_, _, _, _, [], _, _, _, SynPat.Named(id, _, _, _), NormalizedBindingRhs(_, _, rhsExpr), _, _) -> id.idText, rhsExpr - | _ -> error(Error(FSComp.SR.tcOnlySimpleBindingsCanBeUsedInConstructionExpressions(), b.RangeOfBindingWithoutRhs))) - + let fldsList = + binds |> List.map (fun b -> + match BindingNormalization.NormalizeBinding ObjExprBinding cenv env b with + | NormalizedBinding (_, _, _, _, [], _, _, _, SynPat.Named(SynPat.Wild _, id, _, _, _), NormalizedBindingRhs(_, _, rhsExpr), _, _) -> id.idText, rhsExpr + | _ -> error(Error(FSComp.SR.tcOnlySimpleBindingsCanBeUsedInConstructionExpressions(), b.RangeOfBindingSansRhs))) + TcRecordConstruction cenv overallTy env tpenv None objTy fldsList mWholeExpr else let item = ForceRaise (ResolveObjectConstructor cenv.nameResolver env.DisplayEnv mObjTy ad objTy) - if isFSharpObjModelTy cenv.g objTy && GetCtorShapeCounter env = 1 then + if isFSharpObjModelTy cenv.g objTy && GetCtorShapeCounter env = 1 then error(Error(FSComp.SR.tcObjectsMustBeInitializedWithObjectExpression(), mNewExpr)) - // Work out the type of any interfaces to implement - let extraImpls, tpenv = - (tpenv, extraImpls) ||> List.mapFold (fun tpenv (SynInterfaceImpl(synIntfTy, overrides, m)) -> + // Work out the type of any interfaces to implement + let extraImpls, tpenv = + (tpenv, extraImpls) ||> List.mapFold (fun tpenv (InterfaceImpl(synIntfTy, overrides, m)) -> let intfTy, tpenv = TcType cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv synIntfTy if not (isInterfaceTy cenv.g intfTy) then error(Error(FSComp.SR.tcExpectedInterfaceType(), m)) @@ -6496,70 +6468,74 @@ and TcObjectExpr cenv overallTy env tpenv (synObjTy, argopt, binds, extraImpls, UnifyTypes cenv env mWholeExpr overallTy realObjTy let ctorCall, baseIdOpt, tpenv = - match item, argopt with - | Item.CtorGroup(methodName, minfos), Some (arg, baseIdOpt) -> - let meths = minfos |> List.map (fun minfo -> minfo, None) + match item, argopt with + | Item.CtorGroup(methodName, minfos), Some (arg, baseIdOpt) -> + let meths = minfos |> List.map (fun minfo -> minfo, None) let afterResolution = ForNewConstructors cenv.tcSink env synObjTy.Range methodName minfos let ad = env.AccessRights - let expr, tpenv = TcMethodApplicationThen cenv env objTy None tpenv None [] mWholeExpr mObjTy methodName ad PossiblyMutates false meths afterResolution CtorValUsedAsSuperInit [arg] ExprAtomicFlag.Atomic [] + let expr, tpenv = TcMethodApplicationThen cenv env objTy None tpenv None [] mWholeExpr mObjTy methodName ad PossiblyMutates false meths afterResolution CtorValUsedAsSuperInit [arg] ExprAtomicFlag.Atomic [] // The 'base' value is always bound let baseIdOpt = (match baseIdOpt with None -> Some(ident("base", mObjTy)) | Some id -> Some id) expr, baseIdOpt, tpenv - | Item.FakeInterfaceCtor intfTy, None -> + | Item.FakeInterfaceCtor intfTy, None -> UnifyTypes cenv env mWholeExpr objTy intfTy let expr = BuildObjCtorCall cenv.g mWholeExpr expr, None, tpenv - | Item.FakeInterfaceCtor _, Some _ -> + | Item.FakeInterfaceCtor _, Some _ -> error(Error(FSComp.SR.tcConstructorForInterfacesDoNotTakeArguments(), mNewExpr)) - | Item.CtorGroup _, None -> + | Item.CtorGroup _, None -> error(Error(FSComp.SR.tcConstructorRequiresArguments(), mNewExpr)) | _ -> error(Error(FSComp.SR.tcNewRequiresObjectConstructor(), mNewExpr)) let baseValOpt = MakeAndPublishBaseVal cenv env baseIdOpt objTy - let env = Option.foldBack (AddLocalVal cenv.g cenv.tcSink mNewExpr) baseValOpt env + let env = Option.foldBack (AddLocalVal cenv.tcSink mNewExpr) baseValOpt env + + let impls = (mWholeExpr, objTy, binds) :: extraImpls - - // 1. collect all the relevant abstract slots for each type we have to implement - + + + // 1. collect all the relevant abstract slots for each type we have to implement + let overridesAndVirts, tpenv = ComputeObjectExprOverrides cenv env tpenv impls - overridesAndVirts |> List.iter (fun (m, implty, dispatchSlots, dispatchSlotsKeyed, availPriorOverrides, overrides) -> + + overridesAndVirts |> List.iter (fun (m, implty, dispatchSlots, dispatchSlotsKeyed, availPriorOverrides, overrides) -> let overrideSpecs = overrides |> List.map fst - DispatchSlotChecking.CheckOverridesAreAllUsedOnce (env.DisplayEnv, cenv.g, cenv.infoReader, true, implty, dispatchSlotsKeyed, availPriorOverrides, overrideSpecs) + DispatchSlotChecking.CheckOverridesAreAllUsedOnce (env.DisplayEnv, cenv.g, cenv.amap, true, implty, dispatchSlotsKeyed, availPriorOverrides, overrideSpecs) DispatchSlotChecking.CheckDispatchSlotsAreImplemented (env.DisplayEnv, cenv.infoReader, m, env.NameEnv, cenv.tcSink, false, implty, dispatchSlots, availPriorOverrides, overrideSpecs) |> ignore) - - // 6c. create the specs of overrides - let allTypeImpls = - overridesAndVirts |> List.map (fun (m, implty, _, dispatchSlotsKeyed, _, overrides) -> - let overrides' = - [ for overrideMeth in overrides do + + // 6c. create the specs of overrides + let allTypeImpls = + overridesAndVirts |> List.map (fun (m, implty, _, dispatchSlotsKeyed, _, overrides) -> + let overrides' = + [ for overrideMeth in overrides do let (Override(_, _, id, (mtps, _), _, _, isFakeEventProperty, _) as ovinfo), (_, thisVal, methodVars, bindingAttribs, bindingBody) = overrideMeth - if not isFakeEventProperty then - let searchForOverride = - dispatchSlotsKeyed - |> NameMultiMap.find id.idText - |> List.tryPick (fun reqdSlot -> + if not isFakeEventProperty then + let searchForOverride = + dispatchSlotsKeyed + |> NameMultiMap.find id.idText + |> List.tryPick (fun reqdSlot -> let virt = reqdSlot.MethodInfo - if DispatchSlotChecking.IsExactMatch cenv.g cenv.amap m virt ovinfo then - Some virt - else + if DispatchSlotChecking.IsExactMatch cenv.g cenv.amap m virt ovinfo then + Some virt + else None) - let overridden = - match searchForOverride with + let overridden = + match searchForOverride with | Some x -> x | None -> error(Error(FSComp.SR.tcAtLeastOneOverrideIsInvalid(), synObjTy.Range)) yield TObjExprMethod(overridden.GetSlotSig(cenv.amap, m), bindingAttribs, mtps, [thisVal] :: methodVars, bindingBody, id.idRange) ] (implty, overrides')) - + let (objTy', overrides') = allTypeImpls.Head let extraImpls = allTypeImpls.Tail - - // 7. Build the implementation + + // 7. Build the implementation let expr = mkObjExpr(objTy', baseValOpt, ctorCall, overrides', extraImpls, mWholeExpr) let expr = mkCoerceIfNeeded cenv.g realObjTy objTy' expr expr, tpenv @@ -6568,14 +6544,14 @@ and TcObjectExpr cenv overallTy env tpenv (synObjTy, argopt, binds, extraImpls, //------------------------------------------------------------------------- // TcConstStringExpr -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -/// Check a constant string expression. It might be a 'printf' format string +/// Check a constant string expression. It might be a 'printf' format string and TcConstStringExpr cenv overallTy env m tpenv s = - if (AddCxTypeEqualsTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy cenv.g.string_ty) then + if (AddCxTypeEqualsTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy cenv.g.string_ty) then mkString cenv.g m s, tpenv - else + else TcFormatStringExpr cenv overallTy env m tpenv s and TcFormatStringExpr cenv overallTy env m tpenv (fmtString: string) = @@ -6591,26 +6567,26 @@ and TcFormatStringExpr cenv overallTy env m tpenv (fmtString: string) = let ok = not (isObjTy g overallTy) && AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy formatTy if ok then - // Parse the format string to work out the phantom types + // Parse the format string to work out the phantom types let formatStringCheckContext = match cenv.tcSink.CurrentSink with None -> None | Some sink -> sink.FormatStringCheckContext let normalizedString = (fmtString.Replace("\r\n", "\n").Replace("\r", "\n")) - + let _argTys, atyRequired, etyRequired, _percentATys, specifierLocations, _dotnetFormatString = try CheckFormatStrings.ParseFormatString m [m] g false false formatStringCheckContext normalizedString bty cty dty with Failure errString -> error (Error(FSComp.SR.tcUnableToParseFormatString errString, m)) - match cenv.tcSink.CurrentSink with - | None -> () - | Some sink -> + match cenv.tcSink.CurrentSink with + | None -> () + | Some sink -> for specifierLocation, numArgs in specifierLocations do sink.NotifyFormatSpecifierLocation(specifierLocation, numArgs) UnifyTypes cenv env m aty atyRequired UnifyTypes cenv env m ety etyRequired let fmtExpr = mkCallNewFormat g m aty bty cty dty ety (mkString g m fmtString) - fmtExpr, tpenv + fmtExpr, tpenv - else + else UnifyTypes cenv env m overallTy g.string_ty mkString g m fmtString, tpenv @@ -6619,17 +6595,17 @@ and TcInterpolatedStringExpr cenv overallTy env m tpenv (parts: SynInterpolatedS let g = cenv.g let synFillExprs = - parts + parts |> List.choose (function | SynInterpolatedStringPart.String _ -> None | SynInterpolatedStringPart.FillExpr (fillExpr, _) -> - match fillExpr with + match fillExpr with // Detect "x" part of "...{x,3}..." | SynExpr.Tuple (false, [e; SynExpr.Const (SynConst.Int32 _align, _)], _, _) -> Some e | e -> Some e) let stringFragmentRanges = - parts + parts |> List.choose (function | SynInterpolatedStringPart.String (_,m) -> Some m | SynInterpolatedStringPart.FillExpr _ -> None) @@ -6647,9 +6623,9 @@ and TcInterpolatedStringExpr cenv overallTy env m tpenv (parts: SynInterpolatedS | [ctorInfo] -> ctorInfo | _ -> languageFeatureNotSupportedInLibraryError cenv.g.langVersion LanguageFeature.StringInterpolation m - let stringKind = + let stringKind = // If this is an interpolated string then try to force the result to be a string - if (AddCxTypeEqualsTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy g.string_ty) then + if (AddCxTypeEqualsTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy g.string_ty) then // And if that succeeds, the result of printing is a string UnifyTypes cenv env m printerArgTy g.unit_ty @@ -6657,14 +6633,14 @@ and TcInterpolatedStringExpr cenv overallTy env m tpenv (parts: SynInterpolatedS UnifyTypes cenv env m printerResultTy overallTy // And if that succeeds, the printerTy and printerResultTy must be the same (there are no curried arguments) - UnifyTypes cenv env m printerTy printerResultTy + UnifyTypes cenv env m printerTy printerResultTy Choice1Of2 (true, newFormatMethod) // ... or if that fails then may be a FormattableString by a type-directed rule.... - elif (not (isObjTy g overallTy) && - ((g.system_FormattableString_tcref.CanDeref && AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy g.system_FormattableString_ty) - || (g.system_IFormattable_tcref.CanDeref && AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy g.system_IFormattable_ty))) then + elif (not (isObjTy g overallTy) && + ((g.system_FormattableString_tcref.CanDeref && AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy g.system_FormattableString_ty) + || (g.system_IFormattable_tcref.CanDeref && AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy g.system_IFormattable_ty))) then // And if that succeeds, the result of printing is a string UnifyTypes cenv env m printerArgTy g.unit_ty @@ -6673,20 +6649,20 @@ and TcInterpolatedStringExpr cenv overallTy env m tpenv (parts: SynInterpolatedS // Find the FormattableStringFactor.Create method in the .NET libraries let ad = env.eAccessRights - let createMethodOpt = - match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AllResults cenv env m ad "Create" g.system_FormattableStringFactory_ty with - | [x] -> Some x + let createMethodOpt = + match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AllResults cenv env m ad "Create" g.system_FormattableStringFactory_ty with + | [x] -> Some x | _ -> None - match createMethodOpt with + match createMethodOpt with | Some createMethod -> Choice2Of2 createMethod | None -> languageFeatureNotSupportedInLibraryError cenv.g.langVersion LanguageFeature.StringInterpolation m // ... or if that fails then may be a PrintfFormat by a type-directed rule.... - elif not (isObjTy g overallTy) && AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy formatTy then + elif not (isObjTy g overallTy) && AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy formatTy then // And if that succeeds, the printerTy and printerResultTy must be the same (there are no curried arguments) - UnifyTypes cenv env m printerTy printerResultTy + UnifyTypes cenv env m printerTy printerResultTy Choice1Of2 (false, newFormatMethod) else @@ -6697,16 +6673,16 @@ and TcInterpolatedStringExpr cenv overallTy env m tpenv (parts: SynInterpolatedS let isFormattableString = (match stringKind with Choice2Of2 _ -> true | _ -> false) // The format string used for checking in CheckFormatStrings. This replaces interpolation holes with %P - let printfFormatString = + let printfFormatString = parts - |> List.map (function + |> List.map (function | SynInterpolatedStringPart.String (s, _) -> s - | SynInterpolatedStringPart.FillExpr (fillExpr, format) -> - let alignText = - match fillExpr with + | SynInterpolatedStringPart.FillExpr (fillExpr, format) -> + let alignText = + match fillExpr with // Validate and detect ",3" part of "...{x,3}..." - | SynExpr.Tuple (false, args, _, _) -> - match args with + | SynExpr.Tuple (false, args, _, _) -> + match args with | [_; SynExpr.Const (SynConst.Int32 align, _)] -> string align | _ -> errorR(Error(FSComp.SR.tcInvalidAlignmentInInterpolatedString(), m)); "" | _ -> "" @@ -6719,36 +6695,36 @@ and TcInterpolatedStringExpr cenv overallTy env m tpenv (parts: SynInterpolatedS // If FormatStringCheckContext is set (i.e. we are doing foreground checking in the IDE) // then we check the string twice, once to collect % positions and once to get errors. // The process of getting % positions doesn't process the string in a semantically accurate way - // (but is enough to report % locations correctly), as it fetched the pieces from the + // (but is enough to report % locations correctly), as it fetched the pieces from the // original source and this may include some additional characters, // and also doesn't raise all necessary errors match cenv.tcSink.CurrentSink with - | Some sink when sink.FormatStringCheckContext.IsSome -> - try + | Some sink when sink.FormatStringCheckContext.IsSome -> + try let _argTys, _printerTy, _printerTupleTyRequired, _percentATys, specifierLocations, _dotnetFormatString = CheckFormatStrings.ParseFormatString m stringFragmentRanges g true isFormattableString sink.FormatStringCheckContext printfFormatString printerArgTy printerResidueTy printerResultTy for specifierLocation, numArgs in specifierLocations do sink.NotifyFormatSpecifierLocation(specifierLocation, numArgs) - with _err-> + with _err-> () | _ -> () let argTys, _printerTy, printerTupleTyRequired, percentATys, _specifierLocations, dotnetFormatString = - try + try CheckFormatStrings.ParseFormatString m stringFragmentRanges g true isFormattableString None printfFormatString printerArgTy printerResidueTy printerResultTy - with Failure errString -> + with Failure errString -> error (Error(FSComp.SR.tcUnableToParseInterpolatedString errString, m)) // Check the expressions filling the holes - if argTys.Length <> synFillExprs.Length then + if argTys.Length <> synFillExprs.Length then error (Error(FSComp.SR.tcInterpolationMixedWithPercent(), m)) - match stringKind with + match stringKind with // The case for $"..." used as type string and $"...%d{x}..." used as type PrintfFormat - create a PrintfFormat that captures // is arguments - | Choice1Of2 (isString, newFormatMethod) -> - + | Choice1Of2 (isString, newFormatMethod) -> + UnifyTypes cenv env m printerTupleTy printerTupleTyRequired // Type check the expressions filling the holes @@ -6758,23 +6734,23 @@ and TcInterpolatedStringExpr cenv overallTy env m tpenv (parts: SynInterpolatedS let fillExprsBoxed = (argTys, fillExprs) ||> List.map2 (mkCallBox g m) let argsExpr = mkArray (g.obj_ty, fillExprsBoxed, m) - let percentATysExpr = + let percentATysExpr = if percentATys.Length = 0 then mkNull m (mkArrayType g g.system_Type_ty) - else + else let tyExprs = percentATys |> Array.map (mkCallTypeOf g m) |> Array.toList mkArray (g.system_Type_ty, tyExprs, m) let fmtExpr = MakeMethInfoCall cenv.amap m newFormatMethod [] [mkString g m printfFormatString; argsExpr; percentATysExpr] - if isString then + if isString then // Make the call to sprintf mkCall_sprintf g m printerTy fmtExpr [], tpenv else - fmtExpr, tpenv + fmtExpr, tpenv // The case for $"..." used as type FormattableString or IFormattable - | Choice2Of2 createFormattableStringMethod -> + | Choice2Of2 createFormattableStringMethod -> // Type check the expressions filling the holes let flexes = argTys |> List.map (fun _ -> false) @@ -6786,9 +6762,9 @@ and TcInterpolatedStringExpr cenv overallTy env m tpenv (parts: SynInterpolatedS let argsExpr = mkArray (g.obj_ty, fillExprsBoxed, m) // FormattableString are *always* turned into FormattableStringFactory.Create calls, boxing each argument - let createExpr, _ = BuildPossiblyConditionalMethodCall cenv env NeverMutates m false createFormattableStringMethod NormalValUse [] [dotnetFormatStringExpr; argsExpr] [] + let createExpr, _ = BuildPossiblyConditionalMethodCall cenv env NeverMutates m false createFormattableStringMethod NormalValUse [] [dotnetFormatStringExpr; argsExpr] [] - let resultExpr = + let resultExpr = if typeEquiv g overallTy g.system_IFormattable_ty then mkCoerceIfNeeded g g.system_IFormattable_ty g.system_FormattableString_ty createExpr else @@ -6797,44 +6773,44 @@ and TcInterpolatedStringExpr cenv overallTy env m tpenv (parts: SynInterpolatedS //------------------------------------------------------------------------- // TcConstExpr -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -/// Check a constant expression. +/// Check a constant expression. and TcConstExpr cenv overallTy env m tpenv c = - match c with + match c with - // NOTE: these aren't "really" constants - | SynConst.Bytes (bytes, _, m) -> - UnifyTypes cenv env m overallTy (mkByteArrayTy cenv.g) + // NOTE: these aren't "really" constants + | SynConst.Bytes (bytes, m) -> + UnifyTypes cenv env m overallTy (mkByteArrayTy cenv.g) Expr.Op (TOp.Bytes bytes, [], [], m), tpenv - | SynConst.UInt16s arr -> + | SynConst.UInt16s arr -> UnifyTypes cenv env m overallTy (mkArrayType cenv.g cenv.g.uint16_ty); Expr.Op (TOp.UInt16s arr, [], [], m), tpenv - | SynConst.UserNum (s, suffix) -> - let expr = + | SynConst.UserNum (s, suffix) -> + let expr = let modName = "NumericLiteral" + suffix let ad = env.eAccessRights - match ResolveLongIdentAsModuleOrNamespace cenv.tcSink ResultCollectionSettings.AtMostOneResult cenv.amap m true OpenQualified env.eNameResEnv ad (ident (modName, m)) [] false with + match ResolveLongIdentAsModuleOrNamespace cenv.tcSink ResultCollectionSettings.AtMostOneResult cenv.amap m true OpenQualified env.eNameResEnv ad (ident (modName, m)) [] false with | Result [] | Exception _ -> error(Error(FSComp.SR.tcNumericLiteralRequiresModule modName, m)) - | Result ((_, mref, _) :: _) -> - let expr = - try + | Result ((_, mref, _) :: _) -> + let expr = + try match int32 s with | 0 -> SynExpr.App (ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromZero", SynExpr.Const (SynConst.Unit, m), m) | 1 -> SynExpr.App (ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromOne", SynExpr.Const (SynConst.Unit, m), m) | i32 -> SynExpr.App (ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromInt32", SynExpr.Const (SynConst.Int32 i32, m), m) - with _ -> - try - let i64 = int64 s + with _ -> + try + let i64 = int64 s SynExpr.App (ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromInt64", SynExpr.Const (SynConst.Int64 i64, m), m) - with _ -> - SynExpr.App (ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromString", SynExpr.Const (SynConst.String (s, SynStringKind.Regular, m), m), m) - + with _ -> + SynExpr.App (ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromString", SynExpr.Const (SynConst.String (s, m), m), m) + if suffix <> "I" then expr - else + else match ccuOfTyconRef mref with | Some ccu when ccuEq ccu cenv.g.fslibCcu -> SynExpr.Typed (expr, SynType.LongIdent(LongIdentWithDots(pathToSynLid m ["System";"Numerics";"BigInteger"], [])), m) @@ -6843,20 +6819,20 @@ and TcConstExpr cenv overallTy env m tpenv c = TcExpr cenv overallTy env tpenv expr - | _ -> + | _ -> let c' = TcConst cenv overallTy m env c Expr.Const (c', m, overallTy), tpenv //------------------------------------------------------------------------- // TcAssertExpr -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -// Check an 'assert x' expression. +// Check an 'assert x' expression. and TcAssertExpr cenv overallTy env (m: range) tpenv x = let synm = m.MakeSynthetic() // Mark as synthetic so the language service won't pick it up. - let callDiagnosticsExpr = SynExpr.App (ExprAtomicFlag.Atomic, false, mkSynLidGet synm ["System";"Diagnostics";"Debug"] "Assert", - // wrap an extra parentheses so 'assert(x=1) isn't considered a named argument to a method call + let callDiagnosticsExpr = SynExpr.App (ExprAtomicFlag.Atomic, false, mkSynLidGet synm ["System";"Diagnostics";"Debug"] "Assert", + // wrap an extra parentheses so 'assert(x=1) isn't considered a named argument to a method call SynExpr.Paren (x, range0, None, synm), synm) TcExpr cenv overallTy env tpenv callDiagnosticsExpr @@ -6864,23 +6840,23 @@ and TcAssertExpr cenv overallTy env (m: range) tpenv x = and TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr) = - let requiresCtor = (GetCtorShapeCounter env = 1) // Get special expression forms for constructors + let requiresCtor = (GetCtorShapeCounter env = 1) // Get special expression forms for constructors let haveCtor = Option.isSome inherits - let optOrigExpr, tpenv = - match optOrigExpr with - | None -> None, tpenv - | Some (origExpr, _) -> - match inherits with + let optOrigExpr, tpenv = + match optOrigExpr with + | None -> None, tpenv + | Some (origExpr, _) -> + match inherits with | Some (_, _, mInherits, _, _) -> error(Error(FSComp.SR.tcInvalidRecordConstruction(), mInherits)) - | None -> + | None -> let olde, tpenv = TcExpr cenv overallTy env tpenv origExpr Some (olde), tpenv let hasOrigExpr = optOrigExpr.IsSome - let fldsList = - let flds = + let fldsList = + let flds = [ // if we met at least one field that is not syntactically correct - raise ReportedError to transfer control to the recovery routine for ((lidwd, isOk), v, _) in flds do @@ -6891,8 +6867,8 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr yield (List.frontAndBack lidwd.Lid, v) ] - - match flds with + + match flds with | [] -> [] | _ -> let tinst, tcref, _, fldsList = BuildFieldMap cenv env hasOrigExpr overallTy flds mWholeExpr @@ -6911,43 +6887,43 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr let oldvaddr, oldvaddre = mkCompGenLocal mWholeExpr "inputRecord" (if isStructTy cenv.g overallTy then mkByrefTy cenv.g overallTy else overallTy) Some(olde, oldvaddr, oldvaddre) - if hasOrigExpr && not (isRecdTy cenv.g overallTy) then + if hasOrigExpr && not (isRecdTy cenv.g overallTy) then errorR(Error(FSComp.SR.tcExpressionFormRequiresRecordTypes(), mWholeExpr)) - if requiresCtor || haveCtor then - if not (isFSharpObjModelTy cenv.g overallTy) then + if requiresCtor || haveCtor then + if not (isFSharpObjModelTy cenv.g overallTy) then // Deliberate no-recovery failure here to prevent cascading internal errors error(Error(FSComp.SR.tcInheritedTypeIsNotObjectModelType(), mWholeExpr)) - if not requiresCtor then + if not requiresCtor then errorR(Error(FSComp.SR.tcObjectConstructionExpressionCanOnlyImplementConstructorsInObjectModelTypes(), mWholeExpr)) else - if isNil flds then + if isNil flds then let errorInfo = if hasOrigExpr then FSComp.SR.tcEmptyCopyAndUpdateRecordInvalid() else FSComp.SR.tcEmptyRecordInvalid() error(Error(errorInfo, mWholeExpr)) if isFSharpObjModelTy cenv.g overallTy then errorR(Error(FSComp.SR.tcTypeIsNotARecordTypeNeedConstructor(), mWholeExpr)) elif not (isRecdTy cenv.g overallTy) then errorR(Error(FSComp.SR.tcTypeIsNotARecordType(), mWholeExpr)) - let superTy, tpenv = - match inherits, GetSuperTypeOfType cenv.g cenv.amap mWholeExpr overallTy with + let superTy, tpenv = + match inherits, GetSuperTypeOfType cenv.g cenv.amap mWholeExpr overallTy with | Some (superTy, arg, m, _, _), Some realSuperTy -> - // Constructor expression, with an explicit 'inheritedTys clause. Check the inherits clause. + // Constructor expression, with an explicit 'inheritedTys clause. Check the inherits clause. let e, tpenv = TcExpr cenv realSuperTy env tpenv (SynExpr.New (true, superTy, arg, m)) Some e, tpenv - | None, Some realSuperTy when requiresCtor -> - // Constructor expression, No 'inherited' clause, hence look for a default constructor + | None, Some realSuperTy when requiresCtor -> + // Constructor expression, No 'inherited' clause, hence look for a default constructor let e, tpenv = TcNewExpr cenv env tpenv realSuperTy None true (SynExpr.Const (SynConst.Unit, mWholeExpr)) mWholeExpr Some e, tpenv - | None, _ -> + | None, _ -> None, tpenv - | _, None -> + | _, None -> errorR(InternalError("Unexpected failure in getting super type", mWholeExpr)) None, tpenv let expr, tpenv = TcRecordConstruction cenv overallTy env tpenv optOrigExprInfo overallTy fldsList mWholeExpr - let expr = - match superTy with + let expr = + match superTy with | _ when isStructTy cenv.g overallTy -> expr | Some e -> mkCompGenSequential mWholeExpr e expr | None -> expr @@ -6958,8 +6934,8 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr and TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigSynExpr, unsortedFieldIdsAndSynExprsGiven, mWholeExpr) = let unsortedFieldSynExprsGiven = List.map snd unsortedFieldIdsAndSynExprsGiven - match optOrigSynExpr with - | None -> + match optOrigSynExpr with + | None -> let unsortedFieldIds = unsortedFieldIdsAndSynExprsGiven |> List.map fst |> List.toArray let anonInfo, sortedFieldTys = UnifyAnonRecdTypeAndInferCharacteristics env.eContextInfo cenv env.DisplayEnv mWholeExpr overallTy isStruct unsortedFieldIds @@ -6967,13 +6943,13 @@ and TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigSynExpr, unsortedF let sortedIndexedArgs = unsortedFieldIdsAndSynExprsGiven |> List.indexed - |> List.sortBy (fun (i,_) -> unsortedFieldIds.[i].idText) + |> List.sortBy (fun (i,_) -> unsortedFieldIds.[i].idText) // Map from sorted indexes to unsorted indexes let sigma = List.map fst sortedIndexedArgs |> List.toArray let sortedFieldExprs = List.map snd sortedIndexedArgs - sortedFieldExprs |> List.iteri (fun j (x, _) -> + sortedFieldExprs |> List.iteri (fun j (x, _) -> let item = Item.AnonRecdField(anonInfo, sortedFieldTys, j, x.idRange) CallNameResolutionSink cenv.tcSink (x.idRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.Use, env.eAccessRights)) @@ -6989,7 +6965,7 @@ and TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigSynExpr, unsortedF mkAnonRecd cenv.g mWholeExpr anonInfo unsortedFieldIds unsortedCheckedArgs unsortedFieldTys, tpenv - | Some (origExpr, _) -> + | Some (origExpr, _) -> // The fairly complex case '{| origExpr with X = 1; Y = 2 |}' // The origExpr may be either a record or anonymous record. // The origExpr may be either a struct or not. @@ -7004,13 +6980,13 @@ and TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigSynExpr, unsortedF let oldv, oldve = mkCompGenLocal mWholeExpr "inputRecord" origExprTy let mOrigExpr = origExpr.Range - if not (isAppTy cenv.g origExprTy || isAnonRecdTy cenv.g origExprTy) then + if not (isAppTy cenv.g origExprTy || isAnonRecdTy cenv.g origExprTy) then error (Error (FSComp.SR.tcCopyAndUpdateNeedsRecordType(), mOrigExpr)) - let origExprIsStruct = + let origExprIsStruct = match tryDestAnonRecdTy cenv.g origExprTy with | ValueSome (anonInfo, _) -> evalTupInfoIsStruct anonInfo.TupInfo - | ValueNone -> + | ValueNone -> let tcref, _ = destAppTy cenv.g origExprTy tcref.IsStructOrEnumTycon @@ -7019,19 +6995,19 @@ and TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigSynExpr, unsortedF // Put all the expressions in unsorted order. The new bindings come first. The origin of each is tracked using /// - Choice1Of2 for a new binding /// - Choice2Of2 for a binding coming from the original expression - let unsortedIdAndExprsAll = + let unsortedIdAndExprsAll = [| for (id, e) in unsortedFieldIdsAndSynExprsGiven do yield (id, Choice1Of2 e) match tryDestAnonRecdTy cenv.g origExprTy with - | ValueSome (anonInfo, tinst) -> - for (i, id) in Array.indexed anonInfo.SortedIds do + | ValueSome (anonInfo, tinst) -> + for (i, id) in Array.indexed anonInfo.SortedIds do yield id, Choice2Of2 (mkAnonRecdFieldGetViaExprAddr (anonInfo, oldveaddr, tinst, i, mOrigExpr)) - | ValueNone -> + | ValueNone -> match tryAppTy cenv.g origExprTy with | ValueSome(tcref, tinst) when tcref.IsRecordTycon -> let fspecs = tcref.Deref.TrueInstanceFieldsAsList for fspec in fspecs do - yield fspec.Id, Choice2Of2 (mkRecdFieldGetViaExprAddr (oldveaddr, tcref.MakeNestedRecdFieldRef fspec, tinst, mOrigExpr)) + yield fspec.Id, Choice2Of2 (mkRecdFieldGetViaExprAddr (oldveaddr, tcref.MakeNestedRecdFieldRef fspec, tinst, mOrigExpr)) | _ -> error (Error (FSComp.SR.tcCopyAndUpdateNeedsRecordType(), mOrigExpr)) |] |> Array.distinctBy (fst >> textOfId) @@ -7040,7 +7016,7 @@ and TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigSynExpr, unsortedF let anonInfo, sortedFieldTysAll = UnifyAnonRecdTypeAndInferCharacteristics env.eContextInfo cenv env.DisplayEnv mWholeExpr overallTy isStruct unsortedFieldIdsAll - let sortedIndexedFieldsAll = unsortedIdAndExprsAll |> Array.indexed |> Array.sortBy (snd >> fst >> textOfId) + let sortedIndexedFieldsAll = unsortedIdAndExprsAll |> Array.indexed |> Array.sortBy (snd >> fst >> textOfId) // map from sorted indexes to unsorted indexes let sigma = Array.map fst sortedIndexedFieldsAll @@ -7049,9 +7025,9 @@ and TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigSynExpr, unsortedF // Report _all_ identifiers to name resolution. We should likely just report the ones // that are explicit in source code. - sortedFieldsAll |> Array.iteri (fun j (x, expr) -> - match expr with - | Choice1Of2 _ -> + sortedFieldsAll |> Array.iteri (fun j (x, expr) -> + match expr with + | Choice1Of2 _ -> let item = Item.AnonRecdField(anonInfo, sortedFieldTysAll, j, x.idRange) CallNameResolutionSink cenv.tcSink (x.idRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.Use, env.eAccessRights) | Choice2Of2 _ -> ()) @@ -7078,10 +7054,10 @@ and TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigSynExpr, unsortedF unsortedIdAndExprsAll |> Array.map fst - let unsortedFieldExprs = + let unsortedFieldExprs = unsortedIdAndExprsAll - |> Array.mapi (fun unsortedIdx (_, expr) -> - match expr with + |> Array.mapi (fun unsortedIdx (_, expr) -> + match expr with | Choice1Of2 _ -> unsortedFieldExprsGiven.[unsortedIdx] | Choice2Of2 subExpr -> UnifyTypes cenv env mOrigExpr (tyOfExpr cenv.g subExpr) unsortedFieldTysAll.[unsortedIdx]; subExpr) |> List.ofArray @@ -7094,16 +7070,16 @@ and TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigSynExpr, unsortedF let expr = mkCompGenLet mOrigExpr oldv origExprChecked expr expr, tpenv - + and TcForEachExpr cenv overallTy env tpenv (pat, enumSynExpr, bodySynExpr, mWholeExpr, spForLoop) = let tryGetOptimizeSpanMethodsAux g m ty isReadOnlySpan = match (if isReadOnlySpan then tryDestReadOnlySpanTy g m ty else tryDestSpanTy g m ty) with | ValueSome(struct(_, destTy)) -> - match TryFindFSharpSignatureInstanceGetterProperty cenv env m "Item" ty [ g.int32_ty; (if isReadOnlySpan then mkInByrefTy g destTy else mkByrefTy g destTy) ], + match TryFindFSharpSignatureInstanceGetterProperty cenv env m "Item" ty [ g.int32_ty; (if isReadOnlySpan then mkInByrefTy g destTy else mkByrefTy g destTy) ], TryFindFSharpSignatureInstanceGetterProperty cenv env m "Length" ty [ g.int32_ty ] with - | Some(itemPropInfo), Some(lengthPropInfo) -> + | Some(itemPropInfo), Some(lengthPropInfo) -> ValueSome(struct(itemPropInfo.GetterMethod, lengthPropInfo.GetterMethod, isReadOnlySpan)) - | _ -> + | _ -> ValueNone | _ -> ValueNone @@ -7126,16 +7102,16 @@ and TcForEachExpr cenv overallTy env tpenv (pat, enumSynExpr, bodySynExpr, mWhol 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 + let enumElemTy, bodyExprFixup, overallExprFixup, iterationTechnique = + match enumExpr with - // optimize 'for i in n .. m do' - | Expr.App (Expr.Val (vf, _, _), _, [tyarg], [startExpr;finishExpr], _) - when valRefEq cenv.g vf cenv.g.range_op_vref && typeEquiv cenv.g tyarg cenv.g.int_ty -> + // optimize 'for i in n .. m do' + | Expr.App (Expr.Val (vf, _, _), _, [tyarg], [startExpr;finishExpr], _) + when valRefEq cenv.g vf cenv.g.range_op_vref && typeEquiv cenv.g tyarg cenv.g.int_ty -> (cenv.g.int32_ty, (fun _ x -> x), id, Choice1Of3 (startExpr, finishExpr)) - // optimize 'for i in arr do' - | _ when isArray1DTy cenv.g enumExprTy -> + // optimize 'for i in arr do' + | _ when isArray1DTy cenv.g enumExprTy -> let arrVar, arrExpr = mkCompGenLocal mEnumExpr "arr" enumExprTy let idxVar, idxExpr = mkCompGenLocal mPat "idx" cenv.g.int32_ty let elemTy = destArrayTy cenv.g enumExprTy @@ -7148,8 +7124,8 @@ and TcForEachExpr cenv overallTy env tpenv (pat, enumSynExpr, bodySynExpr, mWhol // Ask for a loop over integers for the given range (elemTy, bodyExprFixup, overallExprFixup, Choice2Of3 (idxVar, mkZero cenv.g mForLoopStart, mkDecr cenv.g mForLoopStart (mkLdlen cenv.g mForLoopStart arrExpr))) - - | _ -> + + | _ -> // try optimize 'for i in span do' for span or readonlyspan match tryGetOptimizeSpanMethods cenv.g mWholeExpr enumExprTy with | ValueSome(struct(getItemMethInfo, getLengthMethInfo, isReadOnlySpan)) -> @@ -7176,17 +7152,17 @@ and TcForEachExpr cenv overallTy env tpenv (pat, enumSynExpr, bodySynExpr, mWhol | _ -> let enumerableVar, enumerableExprInVar = mkCompGenLocal mEnumExpr "inputSequence" enumExprTy - let enumeratorVar, enumeratorExpr, _, enumElemTy, getEnumExpr, getEnumTy, guardExpr, _, currentExpr = + let enumeratorVar, enumeratorExpr, _, enumElemTy, getEnumExpr, getEnumTy, guardExpr, _, currentExpr = 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) - let elemVar, pat = - // nice: don't introduce awful temporary for r.h.s. in the 99% case where we know what we're binding it to + let elemVar, pat = + // nice: don't introduce awful temporary for r.h.s. in the 99% case where we know what we're binding it to match pat with - | TPat_as (pat1, PBind(v, TypeScheme([], _)), _) -> + | TPat_as (pat1, PBind(v, TypeScheme([], _)), _) -> v, pat1 - | _ -> + | _ -> let tmp, _ = mkCompGenLocal pat.Range "forLoopVar" enumElemTy tmp, pat @@ -7194,44 +7170,44 @@ and TcForEachExpr cenv overallTy env tpenv (pat, enumSynExpr, bodySynExpr, mWhol let bodyExpr, tpenv = TcStmt cenv envinner tpenv bodySynExpr // Add the pattern match compilation - let bodyExpr = + let bodyExpr = let valsDefinedByMatching = ListSet.remove valEq elemVar vspecs - CompilePatternForMatch - cenv env enumSynExpr.Range pat.Range false IgnoreWithWarning (elemVar, [], None) - [TClause(pat, None, TTarget(valsDefinedByMatching, bodyExpr, DebugPointForTarget.Yes), mForLoopStart)] - enumElemTy + CompilePatternForMatch + cenv env enumSynExpr.Range pat.Range false IgnoreWithWarning (elemVar, [], None) + [TClause(pat, None, TTarget(valsDefinedByMatching, bodyExpr, DebugPointForTarget.Yes), mForLoopStart)] + enumElemTy overallTy // Apply the fixup to bind the elemVar if needed let bodyExpr = bodyExprFixup elemVar bodyExpr - + // Build the overall loop - let overallExpr = + let overallExpr = - match iterationTechnique with + match iterationTechnique with // Build iteration as a for loop - | Choice1Of3(startExpr, finishExpr) -> + | Choice1Of3(startExpr, finishExpr) -> 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) -> + | Choice2Of3(idxVar, startExpr, finishExpr) -> 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) -> + | Choice3Of3(enumerableVar, enumeratorVar, _, getEnumExpr, _, guardExpr, currentExpr) -> // This compiled for must be matched EXACTLY by CompiledForEachExpr in opt.fs and creflect.fs mkCompGenLet mForLoopStart enumerableVar enumExpr (let cleanupE = BuildDisposableCleanup cenv env mWholeExpr enumeratorVar - let spBind = match spForLoop with DebugPointAtFor.Yes spStart -> DebugPointAtBinding.Yes spStart | DebugPointAtFor.No -> DebugPointAtBinding.NoneAtSticky + let spBind = match spForLoop with DebugPointAtFor.Yes spStart -> DebugPointAtBinding spStart | DebugPointAtFor.No -> NoDebugPointAtStickyBinding (mkLet spBind mForLoopStart enumeratorVar getEnumExpr - (mkTryFinally cenv.g - (mkWhile cenv.g - (DebugPointAtWhile.No, - WhileLoopForCompiledForEachExprMarker, guardExpr, - mkCompGenLet mForLoopStart elemVar currentExpr bodyExpr, - mForLoopStart), + (mkTryFinally cenv.g + (mkWhile cenv.g + (DebugPointAtWhile.No, + WhileLoopForCompiledForEachExprMarker, guardExpr, + mkCompGenLet mForLoopStart elemVar currentExpr bodyExpr, + mForLoopStart), cleanupE, mForLoopStart, cenv.g.unit_ty, DebugPointAtTry.No, DebugPointAtFinally.No)))) let overallExpr = overallExprFixup overallExpr @@ -7239,55 +7215,55 @@ and TcForEachExpr cenv overallTy env tpenv (pat, enumSynExpr, bodySynExpr, mWhol //------------------------------------------------------------------------- // TcQuotationExpr -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- and TcQuotationExpr cenv overallTy env tpenv (_oper, raw, ast, isFromQueryExpression, m) = let astTy = NewInferenceType () // Assert the overall type for the domain of the quotation template - UnifyTypes cenv env m overallTy (if raw then mkRawQuotedExprTy cenv.g else mkQuotedExprTy cenv.g astTy) - - // Check the expression - let expr, tpenv = TcExpr cenv astTy env tpenv ast + UnifyTypes cenv env m overallTy (if raw then mkRawQuotedExprTy cenv.g else mkQuotedExprTy cenv.g astTy) + // Check the expression + let expr, tpenv = TcExpr cenv astTy env tpenv ast + // Wrap the expression let expr = Expr.Quote (expr, ref None, isFromQueryExpression, m, overallTy) // Coerce it if needed let expr = if raw then mkCoerceExpr(expr, (mkRawQuotedExprTy cenv.g), m, (tyOfExpr cenv.g expr)) else expr - // We serialize the quoted expression to bytes in IlxGen after type inference etc. is complete. + // We serialize the quoted expression to bytes in IlxGen after type inference etc. is complete. expr, tpenv -/// When checking sequence of function applications, +/// When checking sequence of function applications, /// type applications and dot-notation projections, first extract known /// type information from the applications. /// /// 'overallTy' is the type expected for the entire chain of expr + lookups. /// 'exprty' is the type of the expression on the left of the lookup chain. /// -/// We propagate information from the expected overall type 'overallTy'. The use +/// We propagate information from the expected overall type 'overallTy'. The use /// of function application syntax unambiguously implies that 'overallTy' is a function type. -and Propagate cenv overallTy env tpenv (expr: ApplicableExpr) exprty delayed = - - let rec propagate isAddrOf delayedList mExpr exprty = - match delayedList with - | [] -> +and Propagate cenv overallTy env tpenv (expr: ApplicableExpr) exprty delayed = + + let rec propagate isAddrOf delayedList mExpr exprty = + match delayedList with + | [] -> - if not (isNil delayed) then + if not (isNil delayed) then // We generate a tag inference parameter to the return type for "&x" and 'NativePtr.toByRef' // See RFC FS-1053.md - let exprty = - if isAddrOf && isByrefTy cenv.g exprty then - mkByrefTyWithInference cenv.g (destByrefTy cenv.g exprty) (NewByRefKindInferenceType cenv.g mExpr) - elif isByrefTy cenv.g exprty then + let exprty = + if isAddrOf && isByrefTy cenv.g exprty then + mkByrefTyWithInference cenv.g (destByrefTy cenv.g exprty) (NewByRefKindInferenceType cenv.g mExpr) + elif isByrefTy cenv.g exprty then // Implicit dereference on byref on return - if isByrefTy cenv.g overallTy then + if isByrefTy cenv.g overallTy then errorR(Error(FSComp.SR.tcByrefReturnImplicitlyDereferenced(), mExpr)) destByrefTy cenv.g exprty - else + else exprty UnifyTypesAndRecover cenv env mExpr overallTy exprty @@ -7296,26 +7272,26 @@ and Propagate cenv overallTy env tpenv (expr: ApplicableExpr) exprty delayed = | DelayedSet _ :: _ | DelayedDotLookup _ :: _ -> () | DelayedTypeApp (_, _mTypeArgs, mExprAndTypeArgs) :: delayedList' -> - // Note this case should not occur: would eventually give an "Unexpected type application" error in TcDelayed - propagate isAddrOf delayedList' mExprAndTypeArgs exprty + // Note this case should not occur: would eventually give an "Unexpected type application" error in TcDelayed + propagate isAddrOf delayedList' mExprAndTypeArgs exprty | DelayedApp (_, arg, mExprAndArg) :: delayedList' -> let denv = env.DisplayEnv match UnifyFunctionTypeUndoIfFailed cenv denv mExpr exprty with - | ValueSome (_, resultTy) -> - + | ValueSome (_, resultTy) -> + // We add tag parameter to the return type for "&x" and 'NativePtr.toByRef' // See RFC FS-1053.md - let isAddrOf = - match expr with - | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [], _), _) - when (valRefEq cenv.g vf cenv.g.addrof_vref || + let isAddrOf = + match expr with + | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [], _), _) + when (valRefEq cenv.g vf cenv.g.addrof_vref || valRefEq cenv.g vf cenv.g.nativeptr_tobyref_vref) -> true | _ -> false - propagate isAddrOf delayedList' mExprAndArg resultTy + propagate isAddrOf delayedList' mExprAndArg resultTy - | _ -> + | _ -> let mArg = arg.Range match arg with | SynExpr.CompExpr _ -> () @@ -7337,37 +7313,37 @@ and Propagate cenv overallTy env tpenv (expr: ApplicableExpr) exprty delayed = propagate false delayed expr.Range exprty -and PropagateThenTcDelayed cenv overallTy env tpenv mExpr expr exprty (atomicFlag: ExprAtomicFlag) delayed = +and PropagateThenTcDelayed cenv overallTy env tpenv mExpr expr exprty (atomicFlag: ExprAtomicFlag) delayed = Propagate cenv overallTy env tpenv expr exprty delayed TcDelayed cenv overallTy env tpenv mExpr expr exprty atomicFlag delayed -/// Typecheck "expr ... " constructs where "..." is a sequence of applications, +/// Typecheck "expr ... " constructs where "..." is a sequence of applications, /// type applications and dot-notation projections. -and TcDelayed cenv overallTy env tpenv mExpr expr exprty (atomicFlag: ExprAtomicFlag) delayed = +and TcDelayed cenv overallTy env tpenv mExpr expr exprty (atomicFlag: ExprAtomicFlag) delayed = - // OK, we've typechecked the thing on the left of the delayed lookup chain. - // We can now record for posterity the type of this expression and the location of the expression. + // OK, we've typechecked the thing on the left of the delayed lookup chain. + // We can now record for posterity the type of this expression and the location of the expression. if (atomicFlag = ExprAtomicFlag.Atomic) then CallExprHasTypeSink cenv.tcSink (mExpr, env.NameEnv, exprty, env.eAccessRights) - match delayed with - | [] - | DelayedDot :: _ -> + match delayed with + | [] + | DelayedDot :: _ -> UnifyTypes cenv env mExpr overallTy exprty expr.Expr, tpenv - // Expr.M (args) where x.M is a .NET method or index property - // expr.M(args) where x.M is a .NET method or index property - // expr.M where x.M is a .NET method or index property + // Expr.M (args) where x.M is a .NET method or index property + // expr.M(args) where x.M is a .NET method or index property + // expr.M where x.M is a .NET method or index property | DelayedDotLookup (longId, mDotLookup) :: otherDelayed -> TcLookupThen cenv overallTy env tpenv mExpr expr.Expr exprty longId otherDelayed mDotLookup - // f x + // f x | DelayedApp (hpa, arg, mExprAndArg) :: otherDelayed -> TcFunctionApplicationThen cenv overallTy env tpenv mExprAndArg expr exprty arg hpa otherDelayed - // f + // f | DelayedTypeApp (_, mTypeArgs, _mExprAndTypeArgs) :: _ -> error(Error(FSComp.SR.tcUnexpectedTypeArguments(), mTypeArgs)) - | DelayedSet (synExpr2, mStmt) :: otherDelayed -> + | DelayedSet (synExpr2, mStmt) :: otherDelayed -> if not (isNil otherDelayed) then error(Error(FSComp.SR.tcInvalidAssignment(), mExpr)) UnifyTypes cenv env mExpr overallTy cenv.g.unit_ty let expr = expr.Expr @@ -7381,17 +7357,17 @@ and TcDelayed cenv overallTy env tpenv mExpr expr exprty (atomicFlag: ExprAtomic /// Convert the delayed identifiers to a dot-lookup. /// -/// TcItemThen: For StaticItem [.Lookup], mPrior is the range of StaticItem +/// TcItemThen: For StaticItem [.Lookup], mPrior is the range of StaticItem /// TcLookupThen: For expr.InstanceItem [.Lookup], mPrior is the range of expr.InstanceItem -and delayRest rest mPrior delayed = - match rest with - | [] -> delayed - | longId -> +and delayRest rest mPrior delayed = + match rest with + | [] -> delayed + | longId -> let mPriorAndLongId = unionRanges mPrior (rangeOfLid longId) DelayedDotLookup (rest, mPriorAndLongId) :: delayed /// Typecheck "nameof" expressions -and TcNameOfExpr cenv env tpenv (synArg: SynExpr) = +and TcNameOfExpr cenv env tpenv (synArg: SynExpr) = let rec stripParens expr = match expr with @@ -7400,20 +7376,20 @@ and TcNameOfExpr cenv env tpenv (synArg: SynExpr) = let cleanSynArg = stripParens synArg let m = cleanSynArg.Range - let rec check overallTyOpt resultOpt expr (delayed: DelayedItem list) = + let rec check overallTyOpt resultOpt expr (delayed: DelayedItem list) = match expr with | LongOrSingleIdent (false, (LongIdentWithDots(longId, _)), _, _) -> let ad = env.eAccessRights let result = defaultArg resultOpt (List.last longId) - + // Demangle back to source operator name if the lengths in the ranges indicate the // original source range matches exactly let result = if IsMangledOpName result.idText then let demangled = DecompileOpName result.idText if demangled.Length = result.idRange.EndColumn - result.idRange.StartColumn then - ident(demangled, result.idRange) + ident(demangled, result.idRange) else result else result @@ -7427,16 +7403,16 @@ and TcNameOfExpr cenv env tpenv (synArg: SynExpr) = let typeNameResInfo = GetLongIdentTypeNameInfo delayed let nameResolutionResult = ResolveLongIdentAsExprAndComputeRange cenv.tcSink cenv.nameResolver (rangeOfLid longId) ad env.eNameResEnv typeNameResInfo longId let resolvesAsExpr = - match nameResolutionResult with - | Result ((_, item, _, _, _) as res) - when - (match item with - | Item.Types _ + match nameResolutionResult with + | Result ((_, item, _, _, _) as res) + when + (match item with + | Item.Types _ | Item.DelegateCtor _ | Item.CtorGroup _ | Item.FakeInterfaceCtor _ -> false - | _ -> true) -> - let overallTy = match overallTyOpt with None -> NewInferenceType() | Some t -> t + | _ -> true) -> + let overallTy = match overallTyOpt with None -> NewInferenceType() | Some t -> t let _, _ = TcItemThen cenv overallTy env tpenv res delayed true | _ -> @@ -7444,17 +7420,17 @@ and TcNameOfExpr cenv env tpenv (synArg: SynExpr) = if resolvesAsExpr then result else // If it's not an expression then try to resolve it as a type name - let resolvedToTypeName = + let resolvedToTypeName = if (match delayed with [DelayedTypeApp _] | [] -> true | _ -> false) then let (TypeNameResolutionInfo(_, staticArgsInfo)) = GetLongIdentTypeNameInfo delayed match ResolveTypeLongIdent cenv.tcSink cenv.nameResolver ItemOccurence.UseInAttribute OpenQualified env.eNameResEnv ad longId staticArgsInfo PermitDirectReferenceToGeneratedType.No with - | Result (tinstEnclosing, tcref) when IsEntityAccessible cenv.amap m ad tcref -> - match delayed with - | [DelayedTypeApp (tyargs, _, mExprAndTypeArgs)] -> + | Result (tinstEnclosing, tcref) when IsEntityAccessible cenv.amap m ad tcref -> + match delayed with + | [DelayedTypeApp (tyargs, _, mExprAndTypeArgs)] -> TcTypeApp cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv mExprAndTypeArgs tcref tinstEnclosing tyargs |> ignore | _ -> () true // resolved to a type name, done with checks - | _ -> + | _ -> false else false @@ -7464,10 +7440,10 @@ and TcNameOfExpr cenv env tpenv (synArg: SynExpr) = let resolvedToModuleOrNamespaceName = if delayed.IsEmpty then let id,rest = List.headAndTail longId - match ResolveLongIdentAsModuleOrNamespace cenv.tcSink ResultCollectionSettings.AllResults cenv.amap m true OpenQualified env.eNameResEnv ad id rest true with - | Result modref when delayed.IsEmpty && modref |> List.exists (p23 >> IsEntityAccessible cenv.amap m ad) -> + match ResolveLongIdentAsModuleOrNamespace cenv.tcSink ResultCollectionSettings.AllResults cenv.amap m true OpenQualified env.eNameResEnv ad id rest true with + | Result modref when delayed.IsEmpty && modref |> List.exists (p23 >> IsEntityAccessible cenv.amap m ad) -> true // resolved to a module or namespace, done with checks - | _ -> + | _ -> false else false @@ -7476,18 +7452,18 @@ and TcNameOfExpr cenv env tpenv (synArg: SynExpr) = ForceRaise nameResolutionResult |> ignore // If that didn't give aan exception then raise a generic error error (Error(FSComp.SR.expressionHasNoName(), m)) - - // expr allowed, even with qualifications + + // expr allowed, even with qualifications | SynExpr.TypeApp (hd, _, types, _, _, _, m) -> check overallTyOpt resultOpt hd (DelayedTypeApp(types, m, m) :: delayed) - // expr.ID allowed + // expr.ID allowed | SynExpr.DotGet (hd, _, LongIdentWithDots(longId, _), _) -> let result = defaultArg resultOpt (List.last longId) - check overallTyOpt (Some result) hd ((DelayedDotLookup (longId, expr.RangeWithoutAnyExtraDot)) :: delayed) + check overallTyOpt (Some result) hd ((DelayedDotLookup (longId, expr.RangeSansAnyExtraDot)) :: delayed) // "(expr)" allowed with no subsequent qualifications - | SynExpr.Paren(expr, _, _, _) when delayed.IsEmpty && overallTyOpt.IsNone -> + | SynExpr.Paren(expr, _, _, _) when delayed.IsEmpty && overallTyOpt.IsNone -> check overallTyOpt resultOpt expr delayed // expr : type" allowed with no subsequent qualifications @@ -7495,21 +7471,21 @@ and TcNameOfExpr cenv env tpenv (synArg: SynExpr) = let tgtTy, _tpenv = TcTypeAndRecover cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv synType check (Some tgtTy) resultOpt synBodyExpr delayed - | _ -> + | _ -> error (Error(FSComp.SR.expressionHasNoName(), m)) - let lastIdent = check None None cleanSynArg [] + let lastIdent = check None None cleanSynArg [] TcNameOfExprResult cenv lastIdent m -and TcNameOfExprResult cenv (lastIdent: Ident) m = +and TcNameOfExprResult cenv (lastIdent: Ident) m = let constRange = mkRange m.FileName m.Start (mkPos m.StartLine (m.StartColumn + lastIdent.idText.Length + 2)) // `2` are for quotes Expr.Const(Const.String(lastIdent.idText), constRange, cenv.g.string_ty) - + //------------------------------------------------------------------------- // TcFunctionApplicationThen: Typecheck "expr x" + projections -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -and TcFunctionApplicationThen cenv overallTy env tpenv mExprAndArg expr exprty (synArg: SynExpr) atomicFlag delayed = +and TcFunctionApplicationThen cenv overallTy env tpenv mExprAndArg expr exprty (synArg: SynExpr) atomicFlag delayed = let denv = env.DisplayEnv let mArg = synArg.Range let mFunExpr = expr.Range @@ -7525,47 +7501,47 @@ and TcFunctionApplicationThen cenv overallTy env tpenv mExprAndArg expr exprty ( | _ -> // Notice the special case 'seq { ... }'. In this case 'seq' is actually a function in the F# library. // Set a flag in the syntax tree to say we noticed a leading 'seq' - match synArg with - | SynExpr.CompExpr (false, isNotNakedRefCell, _comp, _m) -> - isNotNakedRefCell := + match synArg with + | SynExpr.CompExpr (false, isNotNakedRefCell, _comp, _m) -> + isNotNakedRefCell := !isNotNakedRefCell - || - (match expr with - | ApplicableExpr(_, Expr.Op(TOp.Coerce, _, [SeqExpr cenv.g], _), _) -> true + || + (match expr with + | ApplicableExpr(_, Expr.Op(TOp.Coerce, _, [SeqExpr cenv.g], _), _) -> true | _ -> false) | _ -> () - + let arg, tpenv = TcExpr cenv domainTy env tpenv synArg let exprAndArg, resultTy = buildApp cenv expr resultTy arg mExprAndArg TcDelayed cenv overallTy env tpenv mExprAndArg exprAndArg resultTy atomicFlag delayed - - | ValueNone -> - // OK, 'expr' doesn't have function type, but perhaps 'expr' is a computation expression builder, and 'arg' is '{ ... }' - match synArg with - | SynExpr.CompExpr (false, _isNotNakedRefCell, comp, _m) -> + + | ValueNone -> + // OK, 'expr' doesn't have function type, but perhaps 'expr' is a computation expression builder, and 'arg' is '{ ... }' + match synArg with + | SynExpr.CompExpr (false, _isNotNakedRefCell, comp, _m) -> let bodyOfCompExpr, tpenv = cenv.TcComputationExpression cenv env overallTy tpenv (mFunExpr, expr.Expr, exprty, comp) - TcDelayed cenv overallTy env tpenv mExprAndArg (MakeApplicableExprNoFlex cenv bodyOfCompExpr) (tyOfExpr cenv.g bodyOfCompExpr) ExprAtomicFlag.NonAtomic delayed - | _ -> - error (NotAFunction(denv, overallTy, mFunExpr, mArg)) + TcDelayed cenv overallTy env tpenv mExprAndArg (MakeApplicableExprNoFlex cenv bodyOfCompExpr) (tyOfExpr cenv.g bodyOfCompExpr) ExprAtomicFlag.NonAtomic delayed + | _ -> + error (NotAFunction(denv, overallTy, mFunExpr, mArg)) //------------------------------------------------------------------------- // TcLongIdentThen: Typecheck "A.B.C.E.F ... " constructs -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- and GetLongIdentTypeNameInfo delayed = - // Given 'MyOverloadedType.MySubType...' use the number of given type arguments to help - // resolve type name lookup of 'MyOverloadedType' - // Also determine if type names should resolve to Item.Types or Item.CtorGroup - match delayed with - | DelayedTypeApp (tyargs, _, _) :: (DelayedDot | DelayedDotLookup _) :: _ -> - // cases like 'MyType.Sth' + // Given 'MyOverloadedType.MySubType...' use the number of given type arguments to help + // resolve type name lookup of 'MyOverloadedType' + // Also determine if type names should resolve to Item.Types or Item.CtorGroup + match delayed with + | DelayedTypeApp (tyargs, _, _) :: (DelayedDot | DelayedDotLookup _) :: _ -> + // cases like 'MyType.Sth' TypeNameResolutionInfo(ResolveTypeNamesToTypeRefs, TypeNameResolutionStaticArgsInfo.FromTyArgs tyargs.Length) - | DelayedTypeApp (tyargs, _, _) :: _ -> + | DelayedTypeApp (tyargs, _, _) :: _ -> // Note, this also covers the case 'MyType.' (without LValue_get), which is needed for VS (when typing) TypeNameResolutionInfo(ResolveTypeNamesToCtors, TypeNameResolutionStaticArgsInfo.FromTyArgs tyargs.Length) - | _ -> + | _ -> TypeNameResolutionInfo.Default and TcLongIdentThen cenv overallTy env tpenv (LongIdentWithDots(longId, _)) delayed = @@ -7578,24 +7554,24 @@ and TcLongIdentThen cenv overallTy env tpenv (LongIdentWithDots(longId, _)) dela TcItemThen cenv overallTy env tpenv nameResolutionResult delayed //------------------------------------------------------------------------- -// Typecheck "item+projections" +// Typecheck "item+projections" //------------------------------------------------------------------------- *) // mItem is the textual range covered by the long identifiers that make up the item and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afterResolution) delayed = let g = cenv.g let delayed = delayRest rest mItem delayed let ad = env.eAccessRights - match item with - // x where x is a union case or active pattern result tag. - | (Item.UnionCase _ | Item.ExnCase _ | Item.ActivePatternResult _) as item -> - // ucaseAppTy is the type of the union constructor applied to its (optional) argument + match item with + // x where x is a union case or active pattern result tag. + | (Item.UnionCase _ | Item.ExnCase _ | Item.ActivePatternResult _) as item -> + // ucaseAppTy is the type of the union constructor applied to its (optional) argument let ucaseAppTy = NewInferenceType () - let mkConstrApp, argTys, argNames = - match item with - | Item.ActivePatternResult(apinfo, _apOverallTy, n, _) -> + let mkConstrApp, argTys, argNames = + match item with + | Item.ActivePatternResult(apinfo, _, n, _) -> let aparity = apinfo.Names.Length - match aparity with - | 0 | 1 -> + match aparity with + | 0 | 1 -> let mkConstrApp _mArgs = function [arg] -> arg | _ -> error(InternalError("ApplyUnionCaseOrExn", mItem)) mkConstrApp, [ucaseAppTy], [ for (s, m) in apinfo.ActiveTagsWithRanges -> mkSynId m s ] | _ -> @@ -7603,41 +7579,41 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte let _, _, tinst, _ = FreshenTyconRef2 mItem ucref.TyconRef let ucinfo = UnionCaseInfo (tinst, ucref) ApplyUnionCaseOrExnTypes mItem cenv env ucaseAppTy (Item.UnionCase(ucinfo, false)) - | _ -> + | _ -> ApplyUnionCaseOrExnTypes mItem cenv env ucaseAppTy item let numArgTys = List.length argTys // Subsumption at data constructions if argument type is nominal prior to equations for any arguments or return types let flexes = argTys |> List.map (isTyparTy g >> not) - - let (|FittedArgs|_|) arg = - match arg with + + let (|FittedArgs|_|) arg = + match arg with | SynExprParen(SynExpr.Tuple (false, args, _, _), _, _, _) | SynExpr.Tuple (false, args, _, _) when numArgTys > 1 -> Some args | SynExprParen(arg, _, _, _) | arg when numArgTys = 1 -> Some [arg] | _ -> None - match delayed with - // This is where the constructor is applied to an argument + match delayed with + // This is where the constructor is applied to an argument | ((DelayedApp (atomicFlag, (FittedArgs args as origArg), mExprAndArg)) :: otherDelayed) -> // assert the overall result type if possible - if isNil otherDelayed then - UnifyTypes cenv env mExprAndArg overallTy ucaseAppTy + if isNil otherDelayed then + UnifyTypes cenv env mExprAndArg overallTy ucaseAppTy let numArgs = List.length args UnionCaseOrExnCheck env numArgTys numArgs mExprAndArg - + // if we manage to get here - number of formal arguments = number of actual arguments // apply named parameters let args = // GetMethodArgs checks that no named parameters are located before positional let unnamedArgs, namedCallerArgs = GetMethodArgs origArg match namedCallerArgs with - | [] -> + | [] -> args | _ -> let fittedArgs = Array.zeroCreate numArgTys - + // first: put all positional arguments let mutable currentIndex = 0 for arg in unnamedArgs do @@ -7649,28 +7625,28 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte // dealing with named arguments is a bit tricky since prior to these changes we have an ambiguous situation: // regular notation for named parameters Some(Value = 5) can mean either 1) create option with value - result of equality operation or 2) create option using named arg syntax. // so far we've used 1) so we cannot immediately switch to 2) since it will be a definite breaking change. - + for (_, id, arg) in namedCallerArgs do match argNames |> List.tryFindIndex (fun id2 -> id.idText = id2.idText) with - | Some i -> + | Some i -> if isNull(box fittedArgs.[i]) then fittedArgs.[i] <- arg let argItem = match item with | Item.UnionCase (uci, _) -> Item.UnionCaseField (uci, i) | Item.ExnCase tref -> Item.RecdField (RecdFieldInfo ([], RecdFieldRef (tref, id.idText))) - | _ -> failwithf "Expecting union case or exception item, got: %O" item + | _ -> failwithf "Expecting union case or exception item, got: %O" item CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, argItem, emptyTyparInst, ItemOccurence.Use, ad) else error(Error(FSComp.SR.tcUnionCaseFieldCannotBeUsedMoreThanOnce(id.idText), id.idRange)) currentIndex <- SEEN_NAMED_ARGUMENT | None -> // 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 + // 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 = + let isSpecialCaseForBackwardCompatibility = (currentIndex <> SEEN_NAMED_ARGUMENT) && (currentIndex < numArgTys) && match stripTyEqns g argTys.[currentIndex] with @@ -7682,7 +7658,7 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte assert (isNull(box fittedArgs.[currentIndex])) fittedArgs.[currentIndex] <- List.item currentIndex args // grab original argument, not item from the list of named parameters currentIndex <- currentIndex + 1 - else + else match item with | Item.UnionCase(uci, _) -> error(Error(FSComp.SR.tcUnionCaseConstructorDoesNotHaveFieldWithGivenName(uci.Name, id.idText), id.idRange)) @@ -7690,7 +7666,7 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte error(Error(FSComp.SR.tcExceptionConstructorDoesNotHaveFieldWithGivenName(tcref.DisplayName, id.idText), id.idRange)) | Item.ActivePatternResult(_,_,_,_) -> error(Error(FSComp.SR.tcActivePatternsDoNotHaveFields(), id.idRange)) - | _ -> + | _ -> error(Error(FSComp.SR.tcConstructorDoesNotHaveFieldWithGivenName(id.idText), id.idRange)) assert (Seq.forall (box >> ((<>) null) ) fittedArgs) @@ -7701,26 +7677,26 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte | DelayedTypeApp (_x, mTypeArgs, _mExprAndTypeArgs) :: _delayed' -> error(Error(FSComp.SR.tcUnexpectedTypeArguments(), mTypeArgs)) - | _ -> - // Work out how many syntactic arguments we really expect. Also return a function that builds the overall - // expression, but don't apply this function until after we've checked that the number of arguments is OK - // (or else we would be building an invalid expression) - - // Unit-taking active pattern result can be applied to no args - let numArgs, mkExpr = - // This is where the constructor is an active pattern result applied to no argument - // Unit-taking active pattern result can be applied to no args - if (numArgTys = 1 && match item with Item.ActivePatternResult _ -> true | _ -> false) then + | _ -> + // Work out how many syntactic arguments we really expect. Also return a function that builds the overall + // expression, but don't apply this function until after we've checked that the number of arguments is OK + // (or else we would be building an invalid expression) + + // Unit-taking active pattern result can be applied to no args + let numArgs, mkExpr = + // This is where the constructor is an active pattern result applied to no argument + // Unit-taking active pattern result can be applied to no args + if (numArgTys = 1 && match item with Item.ActivePatternResult _ -> true | _ -> false) then UnifyTypes cenv env mItem (List.head argTys) g.unit_ty 1, (fun () -> mkConstrApp mItem [mkUnit g mItem]) - // This is where the constructor expects no arguments and is applied to no argument - elif numArgTys = 0 then - 0, (fun () -> mkConstrApp mItem []) - else - // This is where the constructor expects arguments but is not applied to arguments, hence build a lambda - numArgTys, - (fun () -> + // This is where the constructor expects no arguments and is applied to no argument + elif numArgTys = 0 then + 0, (fun () -> mkConstrApp mItem []) + else + // This is where the constructor expects arguments but is not applied to arguments, hence build a lambda + numArgTys, + (fun () -> let vs, args = argTys |> List.mapi (fun i ty -> mkCompGenLocal mItem ("arg" + string i) ty) |> List.unzip let constrApp = mkConstrApp mItem args let lam = mkMultiLambda mItem vs (constrApp, tyOfExpr g constrApp) @@ -7728,15 +7704,15 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte UnionCaseOrExnCheck env numArgTys numArgs mItem let expr = mkExpr() let exprTy = tyOfExpr g expr - PropagateThenTcDelayed cenv overallTy env tpenv mItem (MakeApplicableExprNoFlex cenv expr) exprTy ExprAtomicFlag.Atomic delayed - - | Item.Types(nm, (ty :: _)) -> + PropagateThenTcDelayed cenv overallTy env tpenv mItem (MakeApplicableExprNoFlex cenv expr) exprTy ExprAtomicFlag.Atomic delayed - match delayed with + | Item.Types(nm, (ty :: _)) -> + + match delayed with | ((DelayedTypeApp(tyargs, _mTypeArgs, mExprAndTypeArgs)) :: (DelayedDotLookup (longId, mLongId)) :: otherDelayed) -> - // If Item.Types is returned then the ty will be of the form TType_app(tcref, genericTyargs) where tyargs - // is a fresh instantiation for tcref. TcNestedTypeApplication will chop off precisely #genericTyargs args - // and replace them by 'tyargs' + // If Item.Types is returned then the ty will be of the form TType_app(tcref, genericTyargs) where tyargs + // is a fresh instantiation for tcref. TcNestedTypeApplication will chop off precisely #genericTyargs args + // and replace them by 'tyargs' let ty, tpenv = TcNestedTypeApplication cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv mExprAndTypeArgs ty tinstEnclosing tyargs // Report information about the whole expression including type arguments to VS @@ -7745,74 +7721,74 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte let typeNameResInfo = GetLongIdentTypeNameInfo otherDelayed let item, mItem, rest, afterResolution = ResolveExprDotLongIdentAndComputeRange cenv.tcSink cenv.nameResolver (unionRanges mExprAndTypeArgs mLongId) ad env.eNameResEnv ty longId typeNameResInfo IgnoreOverrides true TcItemThen cenv overallTy env tpenv ((argsOfAppTy g ty), item, mItem, rest, afterResolution) otherDelayed - + | ((DelayedTypeApp(tyargs, _mTypeArgs, mExprAndTypeArgs)) :: _delayed') -> // A case where we have an incomplete name e.g. 'Foo.' - we still want to report it to VS! let ty, _ = TcNestedTypeApplication cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv mExprAndTypeArgs ty tinstEnclosing tyargs let item = Item.Types(nm, [ty]) CallNameResolutionSink cenv.tcSink (mExprAndTypeArgs, env.NameEnv, item, emptyTyparInst, ItemOccurence.Use, env.eAccessRights) - + // Same error as in the following case error(Error(FSComp.SR.tcInvalidUseOfTypeName(), mItem)) - - | _ -> - // In this case the type is not generic, and indeed we should never have returned Item.Types. - // That's because ResolveTypeNamesToCtors should have been set at the original - // call to ResolveLongIdentAsExprAndComputeRange + + | _ -> + // In this case the type is not generic, and indeed we should never have returned Item.Types. + // That's because ResolveTypeNamesToCtors should have been set at the original + // call to ResolveLongIdentAsExprAndComputeRange error(Error(FSComp.SR.tcInvalidUseOfTypeName(), mItem)) - | Item.MethodGroup (methodName, minfos, _) -> - // Static method calls Type.Foo(arg1, ..., argn) + | Item.MethodGroup (methodName, minfos, _) -> + // Static method calls Type.Foo(arg1, ..., argn) let meths = List.map (fun minfo -> minfo, None) minfos - match delayed with + match delayed with | (DelayedApp (atomicFlag, arg, mExprAndArg) :: otherDelayed) -> TcMethodApplicationThen cenv env overallTy None tpenv None [] mExprAndArg mItem methodName ad NeverMutates false meths afterResolution NormalValUse [arg] atomicFlag otherDelayed | (DelayedTypeApp(tys, mTypeArgs, mExprAndTypeArgs) :: otherDelayed) -> #if !NO_EXTENSIONTYPING - match TryTcMethodAppToStaticConstantArgs cenv env tpenv (minfos, Some (tys, mTypeArgs), mExprAndTypeArgs, mItem) with + match TryTcMethodAppToStaticConstantArgs cenv env tpenv (minfos, Some (tys, mTypeArgs), mExprAndTypeArgs, mItem) with | Some minfoAfterStaticArguments -> // Replace the resolution including the static parameters, plus the extra information about the original method info let item = Item.MethodGroup(methodName, [minfoAfterStaticArguments], Some minfos.[0]) - CallNameResolutionSinkReplacing cenv.tcSink (mItem, env.NameEnv, item, [], ItemOccurence.Use, env.eAccessRights) + CallNameResolutionSinkReplacing cenv.tcSink (mItem, env.NameEnv, item, [], ItemOccurence.Use, env.eAccessRights) - match otherDelayed with - | DelayedApp(atomicFlag, arg, mExprAndArg) :: otherDelayed -> + match otherDelayed with + | DelayedApp(atomicFlag, arg, mExprAndArg) :: otherDelayed -> TcMethodApplicationThen cenv env overallTy None tpenv None [] mExprAndArg mItem methodName ad NeverMutates false [(minfoAfterStaticArguments, None)] afterResolution NormalValUse [arg] atomicFlag otherDelayed - | _ -> + | _ -> TcMethodApplicationThen cenv env overallTy None tpenv None [] mExprAndTypeArgs mItem methodName ad NeverMutates false [(minfoAfterStaticArguments, None)] afterResolution NormalValUse [] ExprAtomicFlag.Atomic otherDelayed | None -> #endif let tyargs, tpenv = TcTypesOrMeasures None cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv tys mTypeArgs - + // FUTURE: can we do better than emptyTyparInst here, in order to display instantiations // of type variables in the quick info provided in the IDE? But note we haven't yet even checked if the // number of type arguments is correct... - CallNameResolutionSink cenv.tcSink (mExprAndTypeArgs, env.NameEnv, item, emptyTyparInst, ItemOccurence.Use, env.eAccessRights) + CallNameResolutionSink cenv.tcSink (mExprAndTypeArgs, env.NameEnv, item, emptyTyparInst, ItemOccurence.Use, env.eAccessRights) - match otherDelayed with - | DelayedApp(atomicFlag, arg, mExprAndArg) :: otherDelayed -> + match otherDelayed with + | DelayedApp(atomicFlag, arg, mExprAndArg) :: otherDelayed -> TcMethodApplicationThen cenv env overallTy None tpenv (Some tyargs) [] mExprAndArg mItem methodName ad NeverMutates false meths afterResolution NormalValUse [arg] atomicFlag otherDelayed - | _ -> + | _ -> TcMethodApplicationThen cenv env overallTy None tpenv (Some tyargs) [] mExprAndTypeArgs mItem methodName ad NeverMutates false meths afterResolution NormalValUse [] ExprAtomicFlag.Atomic otherDelayed - | _ -> + | _ -> #if !NO_EXTENSIONTYPING - if not minfos.IsEmpty && minfos.[0].ProvidedStaticParameterInfo.IsSome then + if not minfos.IsEmpty && minfos.[0].ProvidedStaticParameterInfo.IsSome then error(Error(FSComp.SR.etMissingStaticArgumentsToMethod(), mItem)) #endif - TcMethodApplicationThen cenv env overallTy None tpenv None [] mItem mItem methodName ad NeverMutates false meths afterResolution NormalValUse [] ExprAtomicFlag.Atomic delayed + TcMethodApplicationThen cenv env overallTy None tpenv None [] mItem mItem methodName ad NeverMutates false meths afterResolution NormalValUse [] ExprAtomicFlag.Atomic delayed | Item.CtorGroup(nm, minfos) -> - let objTy = - match minfos with + let objTy = + match minfos with | (minfo :: _) -> minfo.ApparentEnclosingType | [] -> error(Error(FSComp.SR.tcTypeHasNoAccessibleConstructor(), mItem)) - match delayed with + match delayed with | ((DelayedApp (_, arg, mExprAndArg)) :: otherDelayed) -> CallExprHasTypeSink cenv.tcSink (mExprAndArg, env.NameEnv, objTy, env.eAccessRights) @@ -7822,14 +7798,14 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte let objTyAfterTyArgs, tpenv = TcNestedTypeApplication cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv mExprAndTypeArgs objTy tinstEnclosing tyargs CallExprHasTypeSink cenv.tcSink (mExprAndArg, env.NameEnv, objTyAfterTyArgs, env.eAccessRights) - let itemAfterTyArgs, minfosAfterTyArgs = + let itemAfterTyArgs, minfosAfterTyArgs = #if !NO_EXTENSIONTYPING // If the type is provided and took static arguments then the constructor will have changed // to a provided constructor on the statically instantiated type. Re-resolve that constructor. - match objTyAfterTyArgs with + match objTyAfterTyArgs with | AppTy g (tcref, _) when tcref.Deref.IsProvided -> let newItem = ForceRaise (ResolveObjectConstructor cenv.nameResolver env.DisplayEnv mExprAndArg ad objTyAfterTyArgs) - match newItem with + match newItem with | Item.CtorGroup(_, newMinfos) -> newItem, newMinfos | _ -> item, minfos | _ -> @@ -7862,26 +7838,26 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte let isPrefix = PrettyNaming.IsPrefixOperator id.idText let isTernary = PrettyNaming.IsTernaryOperator id.idText - let argData = - if isPrefix then - [ SynTypar(mkSynId mItem (cenv.synArgNameGenerator.New()), TyparStaticReq.HeadType, true) ] - elif isTernary then - [ SynTypar(mkSynId mItem (cenv.synArgNameGenerator.New()), TyparStaticReq.HeadType, true) - SynTypar(mkSynId mItem (cenv.synArgNameGenerator.New()), TyparStaticReq.HeadType, true) - SynTypar(mkSynId mItem (cenv.synArgNameGenerator.New()), TyparStaticReq.HeadType, true) ] + let argData = + if isPrefix then + [ Typar(mkSynId mItem (cenv.synArgNameGenerator.New()), HeadTypeStaticReq, true) ] + elif isTernary then + [ Typar(mkSynId mItem (cenv.synArgNameGenerator.New()), HeadTypeStaticReq, true) + Typar(mkSynId mItem (cenv.synArgNameGenerator.New()), HeadTypeStaticReq, true) + Typar(mkSynId mItem (cenv.synArgNameGenerator.New()), HeadTypeStaticReq, true) ] else - [ SynTypar(mkSynId mItem (cenv.synArgNameGenerator.New()), TyparStaticReq.HeadType, true) - SynTypar(mkSynId mItem (cenv.synArgNameGenerator.New()), TyparStaticReq.HeadType, true) ] - - let retTyData = SynTypar(mkSynId mItem (cenv.synArgNameGenerator.New()), TyparStaticReq.HeadType, true) + [ Typar(mkSynId mItem (cenv.synArgNameGenerator.New()), HeadTypeStaticReq, true) + Typar(mkSynId mItem (cenv.synArgNameGenerator.New()), HeadTypeStaticReq, true) ] + + let retTyData = Typar(mkSynId mItem (cenv.synArgNameGenerator.New()), HeadTypeStaticReq, true) let argTypars = argData |> List.map (fun d -> Construct.NewTypar (TyparKind.Type, TyparRigidity.Flexible, d, false, TyparDynamicReq.Yes, [], false, false)) let retTypar = Construct.NewTypar (TyparKind.Type, TyparRigidity.Flexible, retTyData, false, TyparDynamicReq.Yes, [], false, false) - let argTys = argTypars |> List.map mkTyparTy + let argTys = argTypars |> List.map mkTyparTy let retTy = mkTyparTy retTypar let vs, ves = argTys |> List.mapi (fun i ty -> mkCompGenLocal mItem ("arg" + string i) ty) |> List.unzip - let memberFlags = StaticMemberFlags SynMemberKind.Member + let memberFlags = StaticMemberFlags MemberKind.Member let logicalCompiledName = ComputeLogicalName id memberFlags let traitInfo = TTrait(argTys, logicalCompiledName, memberFlags, argTys, Some retTy, sln) @@ -7890,71 +7866,71 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte let rec isSimpleArgument e = match e with - | SynExpr.New (_, _, synExpr, _) - | SynExpr.Paren (synExpr, _, _, _) - | SynExpr.Typed (synExpr, _, _) - | SynExpr.TypeApp (synExpr, _, _, _, _, _, _) - | SynExpr.TypeTest (synExpr, _, _) - | SynExpr.Upcast (synExpr, _, _) - | SynExpr.DotGet (synExpr, _, _, _) - | SynExpr.Downcast (synExpr, _, _) - | SynExpr.InferredUpcast (synExpr, _) - | SynExpr.InferredDowncast (synExpr, _) - | SynExpr.AddressOf (_, synExpr, _, _) + | SynExpr.New (_, _, synExpr, _) + | SynExpr.Paren (synExpr, _, _, _) + | SynExpr.Typed (synExpr, _, _) + | SynExpr.TypeApp (synExpr, _, _, _, _, _, _) + | SynExpr.TypeTest (synExpr, _, _) + | SynExpr.Upcast (synExpr, _, _) + | SynExpr.DotGet (synExpr, _, _, _) + | SynExpr.Downcast (synExpr, _, _) + | SynExpr.InferredUpcast (synExpr, _) + | SynExpr.InferredDowncast (synExpr, _) + | SynExpr.AddressOf (_, synExpr, _, _) | SynExpr.Quote (_, _, synExpr, _, _) -> isSimpleArgument synExpr | SynExpr.InterpolatedString _ | SynExpr.Null _ - | SynExpr.Ident _ - | SynExpr.Const _ + | SynExpr.Ident _ + | SynExpr.Const _ | SynExpr.LongIdent _ -> true - | SynExpr.Tuple (_, synExprs, _, _) + | SynExpr.Tuple (_, synExprs, _, _) | SynExpr.ArrayOrList (_, synExprs, _) -> synExprs |> List.forall isSimpleArgument - | SynExpr.Record (_, copyOpt, fields, _) -> copyOpt |> Option.forall (fst >> isSimpleArgument) && fields |> List.forall (p23 >> Option.forall isSimpleArgument) + | SynExpr.Record (_, copyOpt, fields, _) -> copyOpt |> Option.forall (fst >> isSimpleArgument) && fields |> List.forall (p23 >> Option.forall isSimpleArgument) | SynExpr.App (_, _, synExpr, synExpr2, _) -> isSimpleArgument synExpr && isSimpleArgument synExpr2 | SynExpr.IfThenElse (synExpr, synExpr2, synExprOpt, _, _, _, _) -> isSimpleArgument synExpr && isSimpleArgument synExpr2 && Option.forall isSimpleArgument synExprOpt - | SynExpr.DotIndexedGet (synExpr, _, _, _) -> isSimpleArgument synExpr - | SynExpr.ObjExpr _ + | SynExpr.DotIndexedGet (synExpr, _, _, _) -> isSimpleArgument synExpr + | SynExpr.ObjExpr _ | SynExpr.AnonRecd _ - | SynExpr.While _ - | SynExpr.For _ - | SynExpr.ForEach _ - | SynExpr.ArrayOrListOfSeqExpr _ - | SynExpr.CompExpr _ + | SynExpr.While _ + | SynExpr.For _ + | SynExpr.ForEach _ + | SynExpr.ArrayOrListOfSeqExpr _ + | SynExpr.CompExpr _ | SynExpr.Lambda _ - | SynExpr.MatchLambda _ - | SynExpr.Match _ - | SynExpr.Do _ - | SynExpr.Assert _ - | SynExpr.Fixed _ + | SynExpr.MatchLambda _ + | SynExpr.Match _ + | SynExpr.Do _ + | SynExpr.Assert _ + | SynExpr.Fixed _ | SynExpr.TryWith _ | SynExpr.TryFinally _ | SynExpr.Lazy _ | SynExpr.Sequential _ | SynExpr.SequentialOrImplicitYield _ - | SynExpr.LetOrUse _ - | SynExpr.DotSet _ - | SynExpr.DotIndexedSet _ - | SynExpr.LongIdentSet _ - | SynExpr.Set _ + | SynExpr.LetOrUse _ + | SynExpr.DotSet _ + | SynExpr.DotIndexedSet _ + | SynExpr.LongIdentSet _ + | SynExpr.Set _ | SynExpr.JoinIn _ - | SynExpr.NamedIndexedPropertySet _ + | SynExpr.NamedIndexedPropertySet _ | SynExpr.DotNamedIndexedPropertySet _ - | SynExpr.LibraryOnlyILAssembly _ - | SynExpr.LibraryOnlyStaticOptimization _ - | SynExpr.LibraryOnlyUnionCaseFieldGet _ - | SynExpr.LibraryOnlyUnionCaseFieldSet _ - | SynExpr.ArbitraryAfterError (_, _) - | SynExpr.FromParseError (_, _) - | SynExpr.DiscardAfterMissingQualificationAfterDot (_, _) + | SynExpr.LibraryOnlyILAssembly _ + | SynExpr.LibraryOnlyStaticOptimization _ + | SynExpr.LibraryOnlyUnionCaseFieldGet _ + | SynExpr.LibraryOnlyUnionCaseFieldSet _ + | SynExpr.ArbitraryAfterError (_, _) + | SynExpr.FromParseError (_, _) + | SynExpr.DiscardAfterMissingQualificationAfterDot (_, _) | SynExpr.ImplicitZero _ | SynExpr.YieldOrReturn _ | SynExpr.YieldOrReturnFrom _ | SynExpr.MatchBang _ | SynExpr.LetOrUseBang _ - | SynExpr.DoBang _ - | SynExpr.TraitCall _ + | SynExpr.DoBang _ + | SynExpr.TraitCall _ -> false @@ -7962,7 +7938,7 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte Propagate cenv overallTy env tpenv (MakeApplicableExprNoFlex cenv expr) (tyOfExpr g expr) delayed // Take all simple arguments and process them before applying the constraint. - let delayed1, delayed2 = + let delayed1, delayed2 = let pred = (function (DelayedApp (_, arg, _)) -> isSimpleArgument arg | _ -> false) List.takeWhile pred delayed, List.skipWhile pred delayed let intermediateTy = if isNil delayed2 then overallTy else NewInferenceType () @@ -7975,26 +7951,26 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte // Process all remaining arguments after the constraint is asserted let resultExpr2, tpenv2 = TcDelayed cenv overallTy env tpenv mItem (MakeApplicableExprNoFlex cenv resultExpr) intermediateTy ExprAtomicFlag.NonAtomic delayed2 resultExpr2, tpenv2 - - + + | Item.DelegateCtor ty -> - match delayed with + match delayed with | ((DelayedApp (atomicFlag, arg, mItemAndArg)) :: otherDelayed) -> TcNewDelegateThen cenv overallTy env tpenv mItem mItemAndArg ty arg atomicFlag otherDelayed | ((DelayedTypeApp(tyargs, _mTypeArgs, mItemAndTypeArgs)) :: (DelayedApp (atomicFlag, arg, mItemAndArg)) :: otherDelayed) -> let ty, tpenv = TcNestedTypeApplication cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv mItemAndTypeArgs ty tinstEnclosing tyargs - + // Report information about the whole expression including type arguments to VS let item = Item.DelegateCtor ty - CallNameResolutionSink cenv.tcSink (mItemAndTypeArgs, env.NameEnv, item, emptyTyparInst, ItemOccurence.Use, env.eAccessRights) + CallNameResolutionSink cenv.tcSink (mItemAndTypeArgs, env.NameEnv, item, emptyTyparInst, ItemOccurence.Use, env.eAccessRights) TcNewDelegateThen cenv overallTy env tpenv mItem mItemAndArg ty arg atomicFlag otherDelayed - | _ -> + | _ -> error(Error(FSComp.SR.tcInvalidUseOfDelegate(), mItem)) - | Item.Value vref -> + | Item.Value vref -> - match delayed with - // Mutable value set: 'v <- e' + match delayed with + // Mutable value set: 'v <- e' | DelayedSet(e2, mStmt) :: otherDelayed -> if not (isNil otherDelayed) then error(Error(FSComp.SR.tcInvalidAssignment(), mStmt)) UnifyTypes cenv env mStmt overallTy g.unit_ty @@ -8002,75 +7978,75 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte CheckValAccessible mItem env.AccessRights vref CheckValAttributes g vref mItem |> CommitOperationResult let vty = vref.Type - let vty2 = - if isByrefTy g vty then - destByrefTy g vty - else + let vty2 = + if isByrefTy g vty then + destByrefTy g vty + else if not vref.IsMutable then errorR (ValNotMutable (env.DisplayEnv, vref, mStmt)) - vty + vty // Always allow subsumption on assignment to fields let e2', tpenv = TcExprFlex cenv true false vty2 env tpenv e2 - let vexp = - if isInByrefTy g vty then + let vexp = + if isInByrefTy g vty then errorR(Error(FSComp.SR.writeToReadOnlyByref(), mStmt)) mkAddrSet mStmt vref e2' - elif isByrefTy g vty then + elif isByrefTy g vty then mkAddrSet mStmt vref e2' - else + else mkValSet mStmt vref e2' - + PropagateThenTcDelayed cenv overallTy env tpenv mStmt (MakeApplicableExprNoFlex cenv vexp) (tyOfExpr g vexp) ExprAtomicFlag.NonAtomic otherDelayed - // Value instantiation: v ... + // Value instantiation: v ... | (DelayedTypeApp(tys, _mTypeArgs, mExprAndTypeArgs) :: otherDelayed) -> - // Note: we know this is a NormalValUse or PossibleConstrainedCall because: - // - it isn't a CtorValUsedAsSuperInit - // - it isn't a CtorValUsedAsSelfInit - // - it isn't a VSlotDirectCall (uses of base values do not take type arguments + // Note: we know this is a NormalValUse or PossibleConstrainedCall because: + // - it isn't a CtorValUsedAsSuperInit + // - it isn't a CtorValUsedAsSelfInit + // - it isn't a VSlotDirectCall (uses of base values do not take type arguments // Allow `nameof<'T>` for a generic parameter match vref with | _ when isNameOfValRef cenv.g vref && cenv.g.langVersion.SupportsFeature LanguageFeature.NameOf -> - match tys with - | [SynType.Var((SynTypar(id, _, false) as tp), _m)] -> + match tys with + | [SynType.Var((Typar(id, _, false) as tp), _m)] -> let _tp', tpenv = TcTyparOrMeasurePar None cenv env ImplicitlyBoundTyparsAllowed.NoNewTypars tpenv tp let vexp = TcNameOfExprResult cenv id mExprAndTypeArgs let vexpFlex = MakeApplicableExprNoFlex cenv vexp PropagateThenTcDelayed cenv overallTy env tpenv mExprAndTypeArgs vexpFlex cenv.g.string_ty ExprAtomicFlag.Atomic otherDelayed | _ -> error (Error(FSComp.SR.expressionHasNoName(), mExprAndTypeArgs)) - | _ -> + | _ -> let checkTys tpenv kinds = TcTypesOrMeasures (Some kinds) cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv tys mItem let _, vexp, isSpecial, _, _, tpenv = TcVal true cenv env tpenv vref (Some (NormalValUse, checkTys)) (Some afterResolution) mItem - + let vexpFlex = (if isSpecial then MakeApplicableExprNoFlex cenv vexp else MakeApplicableExprWithFlex cenv env vexp) // We need to eventually record the type resolution for an expression, but this is done - // inside PropagateThenTcDelayed, so we don't have to explicitly call 'CallExprHasTypeSink' here + // inside PropagateThenTcDelayed, so we don't have to explicitly call 'CallExprHasTypeSink' here PropagateThenTcDelayed cenv overallTy env tpenv mExprAndTypeArgs vexpFlex vexpFlex.Type ExprAtomicFlag.Atomic otherDelayed - // Value get - | _ -> + // Value get + | _ -> let _, vexp, isSpecial, _, _, tpenv = TcVal true cenv env tpenv vref None (Some afterResolution) mItem let vexpFlex = (if isSpecial then MakeApplicableExprNoFlex cenv vexp else MakeApplicableExprWithFlex cenv env vexp) PropagateThenTcDelayed cenv overallTy env tpenv mItem vexpFlex vexpFlex.Type ExprAtomicFlag.Atomic delayed - + | Item.Property (nm, pinfos) -> if isNil pinfos then error (InternalError ("Unexpected error: empty property list", mItem)) // if there are both intrinsics and extensions in pinfos, intrinsics will be listed first. // by looking at List.Head we are letting the intrinsics determine indexed/non-indexed let pinfo = List.head pinfos - let _, tyargsOpt, args, delayed, tpenv = - if pinfo.IsIndexer - then GetMemberApplicationArgs delayed cenv env tpenv + let _, tyargsOpt, args, delayed, tpenv = + if pinfo.IsIndexer + then GetMemberApplicationArgs delayed cenv env tpenv else ExprAtomicFlag.Atomic, None, [mkSynUnit mItem], delayed, tpenv if not pinfo.IsStatic then error (Error (FSComp.SR.tcPropertyIsNotStatic nm, mItem)) - match delayed with + match delayed with | DelayedSet(e2, mStmt) :: otherDelayed -> if not (isNil otherDelayed) then error(Error(FSComp.SR.tcInvalidAssignment(), mStmt)) - // Static Property Set (possibly indexer) + // Static Property Set (possibly indexer) UnifyTypes cenv env mStmt overallTy g.unit_ty let meths = pinfos |> SettersOfPropInfos - if meths.IsEmpty then + if meths.IsEmpty then let meths = pinfos |> GettersOfPropInfos let isByrefMethReturnSetter = meths |> List.exists (function (_,Some pinfo) -> isByrefTy g (pinfo.GetPropertyType(cenv.amap,mItem)) | _ -> false) if not isByrefMethReturnSetter then @@ -8084,56 +8060,56 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte errorR (Error (FSComp.SR.tcPropertyCannotBeSet1 nm, mItem)) // Note: static calls never mutate a struct object argument TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt [] mStmt mItem nm ad NeverMutates true meths afterResolution NormalValUse (args@[e2]) ExprAtomicFlag.NonAtomic otherDelayed - | _ -> - // Static Property Get (possibly indexer) + | _ -> + // Static Property Get (possibly indexer) let meths = pinfos |> GettersOfPropInfos if isNil meths then error (Error (FSComp.SR.tcPropertyIsNotReadable nm, mItem)) // Note: static calls never mutate a struct object argument TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt [] mItem mItem nm ad NeverMutates true meths afterResolution NormalValUse args ExprAtomicFlag.Atomic delayed - | Item.ILField finfo -> + | Item.ILField finfo -> ILFieldStaticChecks g cenv.amap cenv.infoReader ad mItem finfo let fref = finfo.ILFieldRef let exprty = finfo.FieldType(cenv.amap, mItem) - match delayed with + match delayed with | DelayedSet(e2, mStmt) :: _delayed' -> UnifyTypes cenv env mStmt overallTy g.unit_ty // Always allow subsumption on assignment to fields let e2', tpenv = TcExprFlex cenv true false exprty env tpenv e2 let expr = BuildILStaticFieldSet mStmt finfo e2' expr, tpenv - | _ -> - // Get static IL field - let expr = - match finfo.LiteralValue with - | Some lit -> - Expr.Const (TcFieldInit mItem lit, mItem, exprty) - | None -> + | _ -> + // Get static IL field + let expr = + match finfo.LiteralValue with + | Some lit -> + Expr.Const (TcFieldInit mItem lit, mItem, exprty) + | None -> let isValueType = finfo.IsValueType let valu = if isValueType then AsValue else AsObject - // The empty instantiation on the fspec is OK, since we make the correct fspec in IlxGen.GenAsm - // This ensures we always get the type instantiation right when doing this from - // polymorphic code, after inlining etc. + // The empty instantiation on the fspec is OK, since we make the correct fspec in IlxGen.GenAsm + // This ensures we always get the type instantiation right when doing this from + // polymorphic code, after inlining etc. let fspec = mkILFieldSpec(fref, mkILNamedTy valu fref.DeclaringTypeRef []) - // Add an I_nop if this is an initonly field to make sure we never recognize it as an lvalue. See mkExprAddrOfExpr. + // Add an I_nop if this is an initonly field to make sure we never recognize it as an lvalue. See mkExprAddrOfExpr. mkAsmExpr ([ mkNormalLdsfld fspec ] @ (if finfo.IsInitOnly then [ AI_nop ] else []), finfo.TypeInst, [], [exprty], mItem) PropagateThenTcDelayed cenv overallTy env tpenv mItem (MakeApplicableExprWithFlex cenv env expr) exprty ExprAtomicFlag.Atomic delayed - | Item.RecdField rfinfo -> - // Get static F# field or literal + | Item.RecdField rfinfo -> + // Get static F# field or literal CheckRecdFieldInfoAccessible cenv.amap mItem ad rfinfo if not rfinfo.IsStatic then error (Error (FSComp.SR.tcFieldIsNotStatic(rfinfo.Name), mItem)) - CheckRecdFieldInfoAttributes g rfinfo mItem |> CommitOperationResult + CheckRecdFieldInfoAttributes g rfinfo mItem |> CommitOperationResult let fref = rfinfo.RecdFieldRef let fieldTy = rfinfo.FieldType - match delayed with + match delayed with | DelayedSet(e2, mStmt) :: otherDelayed -> if not (isNil otherDelayed) then error(Error(FSComp.SR.tcInvalidAssignment(), mStmt)) - - // Set static F# field + + // Set static F# field CheckRecdFieldMutation mItem env.DisplayEnv rfinfo UnifyTypes cenv env mStmt overallTy g.unit_ty let fieldTy = rfinfo.FieldType @@ -8143,20 +8119,20 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte expr, tpenv | _ -> let exprty = fieldTy - let expr = - match rfinfo.LiteralValue with - // Get literal F# field + let expr = + match rfinfo.LiteralValue with + // Get literal F# field | Some lit -> Expr.Const (lit, mItem, exprty) - // Get static F# field - | None -> mkStaticRecdFieldGet (fref, rfinfo.TypeInst, mItem) + // Get static F# field + | None -> mkStaticRecdFieldGet (fref, rfinfo.TypeInst, mItem) PropagateThenTcDelayed cenv overallTy env tpenv mItem (MakeApplicableExprWithFlex cenv env expr) exprty ExprAtomicFlag.Atomic delayed - | Item.Event einfo -> - // Instance IL event (fake up event-as-value) + | Item.Event einfo -> + // Instance IL event (fake up event-as-value) TcEventValueThen cenv overallTy env tpenv mItem mItem None einfo delayed - - | Item.CustomOperation (nm, usageTextOpt, _) -> - // 'delayed' is about to be dropped on the floor, first do rudimentary checking to get name resolutions in its body + + | Item.CustomOperation (nm, usageTextOpt, _) -> + // 'delayed' is about to be dropped on the floor, first do rudimentary checking to get name resolutions in its body RecordNameAndTypeResolutions_IdeallyWithoutHavingOtherEffects_Delayed cenv env tpenv delayed match usageTextOpt() with | None -> error(Error(FSComp.SR.tcCustomOperationNotUsedCorrectly nm, mItem)) @@ -8166,11 +8142,11 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte //------------------------------------------------------------------------- // Typecheck "expr.A.B.C ... " constructs -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- and GetSynMemberApplicationArgs delayed tpenv = - match delayed with - | DelayedApp (atomicFlag, arg, _) :: otherDelayed -> + match delayed with + | DelayedApp (atomicFlag, arg, _) :: otherDelayed -> atomicFlag, None, [arg], otherDelayed, tpenv | DelayedTypeApp(tyargs, mTypeArgs, _) :: DelayedApp (atomicFlag, arg, _mExprAndArg) :: otherDelayed -> (atomicFlag, Some (tyargs, mTypeArgs), [arg], otherDelayed, tpenv) @@ -8181,107 +8157,107 @@ and GetSynMemberApplicationArgs delayed tpenv = and TcMemberTyArgsOpt cenv env tpenv tyargsOpt = - match tyargsOpt with + match tyargsOpt with | None -> None, tpenv - | Some (tyargs, mTypeArgs) -> + | Some (tyargs, mTypeArgs) -> let tyargsChecked, tpenv = TcTypesOrMeasures None cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv tyargs mTypeArgs Some tyargsChecked, tpenv and GetMemberApplicationArgs delayed cenv env tpenv = - let atomicFlag, tyargsOpt, args, delayed, tpenv = GetSynMemberApplicationArgs delayed tpenv + let atomicFlag, tyargsOpt, args, delayed, tpenv = GetSynMemberApplicationArgs delayed tpenv let tyArgsOptChecked, tpenv = TcMemberTyArgsOpt cenv env tpenv tyargsOpt - atomicFlag, tyArgsOptChecked, args, delayed, tpenv + atomicFlag, tyArgsOptChecked, args, delayed, tpenv and TcLookupThen cenv overallTy env tpenv mObjExpr objExpr objExprTy longId delayed mExprAndLongId = let objArgs = [objExpr] let ad = env.eAccessRights - // 'base' calls use a different resolution strategy when finding methods. - let findFlag = + // 'base' calls use a different resolution strategy when finding methods. + let findFlag = let baseCall = IsBaseCall objArgs (if baseCall then PreferOverrides else IgnoreOverrides) - - // Canonicalize inference problem prior to '.' lookup on variable types - if isTyparTy cenv.g objExprTy then + + // Canonicalize inference problem prior to '.' lookup on variable types + if isTyparTy cenv.g objExprTy then ConstraintSolver.CanonicalizePartialInferenceProblem cenv.css env.DisplayEnv mExprAndLongId (freeInTypeLeftToRight cenv.g false objExprTy) - + let item, mItem, rest, afterResolution = ResolveExprDotLongIdentAndComputeRange cenv.tcSink cenv.nameResolver mExprAndLongId ad env.NameEnv objExprTy longId TypeNameResolutionInfo.Default findFlag false let mExprAndItem = unionRanges mObjExpr mItem let delayed = delayRest rest mExprAndItem delayed match item with - | Item.MethodGroup (methodName, minfos, _) -> - let atomicFlag, tyargsOpt, args, delayed, tpenv = GetSynMemberApplicationArgs delayed tpenv - // We pass PossiblyMutates here because these may actually mutate a value type object - // To get better warnings we special case some of the few known mutate-a-struct method names + | Item.MethodGroup (methodName, minfos, _) -> + let atomicFlag, tyargsOpt, args, delayed, tpenv = GetSynMemberApplicationArgs delayed tpenv + // We pass PossiblyMutates here because these may actually mutate a value type object + // To get better warnings we special case some of the few known mutate-a-struct method names let mutates = (if methodName = "MoveNext" || methodName = "GetNextArg" then DefinitelyMutates else PossiblyMutates) #if !NO_EXTENSIONTYPING - match TryTcMethodAppToStaticConstantArgs cenv env tpenv (minfos, tyargsOpt, mExprAndItem, mItem) with - | Some minfoAfterStaticArguments -> + match TryTcMethodAppToStaticConstantArgs cenv env tpenv (minfos, tyargsOpt, mExprAndItem, mItem) with + | Some minfoAfterStaticArguments -> // Replace the resolution including the static parameters, plus the extra information about the original method info let item = Item.MethodGroup(methodName, [minfoAfterStaticArguments], Some minfos.[0]) - CallNameResolutionSinkReplacing cenv.tcSink (mExprAndItem, env.NameEnv, item, [], ItemOccurence.Use, env.eAccessRights) + CallNameResolutionSinkReplacing cenv.tcSink (mExprAndItem, env.NameEnv, item, [], ItemOccurence.Use, env.eAccessRights) - TcMethodApplicationThen cenv env overallTy None tpenv None objArgs mExprAndItem mItem methodName ad mutates false [(minfoAfterStaticArguments, None)] afterResolution NormalValUse args atomicFlag delayed - | None -> - if not minfos.IsEmpty && minfos.[0].ProvidedStaticParameterInfo.IsSome then + TcMethodApplicationThen cenv env overallTy None tpenv None objArgs mExprAndItem mItem methodName ad mutates false [(minfoAfterStaticArguments, None)] afterResolution NormalValUse args atomicFlag delayed + | None -> + if not minfos.IsEmpty && minfos.[0].ProvidedStaticParameterInfo.IsSome then error(Error(FSComp.SR.etMissingStaticArgumentsToMethod(), mItem)) #endif let tyargsOpt, tpenv = TcMemberTyArgsOpt cenv env tpenv tyargsOpt - let meths = minfos |> List.map (fun minfo -> minfo, None) + let meths = minfos |> List.map (fun minfo -> minfo, None) - TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mExprAndItem mItem methodName ad mutates false meths afterResolution NormalValUse args atomicFlag delayed + TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mExprAndItem mItem methodName ad mutates false meths afterResolution NormalValUse args atomicFlag delayed | Item.Property (nm, pinfos) -> - // Instance property + // Instance property if isNil pinfos then error (InternalError ("Unexpected error: empty property list", mItem)) // if there are both intrinsics and extensions in pinfos, intrinsics will be listed first. // by looking at List.Head we are letting the intrinsics determine indexed/non-indexed let pinfo = List.head pinfos - let atomicFlag, tyargsOpt, args, delayed, tpenv = + let atomicFlag, tyargsOpt, args, delayed, tpenv = if pinfo.IsIndexer - then GetMemberApplicationArgs delayed cenv env tpenv + then GetMemberApplicationArgs delayed cenv env tpenv else ExprAtomicFlag.Atomic, None, [mkSynUnit mItem], delayed, tpenv if pinfo.IsStatic then error (Error (FSComp.SR.tcPropertyIsStatic nm, mItem)) + - - match delayed with + match delayed with | DelayedSet(e2, mStmt) :: otherDelayed -> if not (isNil otherDelayed) then error(Error(FSComp.SR.tcInvalidAssignment(), mStmt)) - // Instance property setter + // Instance property setter UnifyTypes cenv env mStmt overallTy cenv.g.unit_ty let meths = SettersOfPropInfos pinfos - if meths.IsEmpty then + if meths.IsEmpty then let meths = pinfos |> GettersOfPropInfos let isByrefMethReturnSetter = meths |> List.exists (function (_,Some pinfo) -> isByrefTy cenv.g (pinfo.GetPropertyType(cenv.amap,mItem)) | _ -> false) if not isByrefMethReturnSetter then errorR (Error (FSComp.SR.tcPropertyCannotBeSet1 nm, mItem)) // x.P <- ... byref setter if isNil meths then error (Error (FSComp.SR.tcPropertyIsNotReadable nm, mItem)) - TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mExprAndItem mItem nm ad PossiblyMutates true meths afterResolution NormalValUse args atomicFlag delayed + TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mExprAndItem mItem nm ad PossiblyMutates true meths afterResolution NormalValUse args atomicFlag delayed else let args = if pinfo.IsIndexer then args else [] let mut = (if isStructTy cenv.g (tyOfExpr cenv.g objExpr) then DefinitelyMutates else PossiblyMutates) - TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mStmt mItem nm ad mut true meths afterResolution NormalValUse (args @ [e2]) atomicFlag [] - | _ -> + TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mStmt mItem nm ad mut true meths afterResolution NormalValUse (args @ [e2]) atomicFlag [] + | _ -> // Instance property getter let meths = GettersOfPropInfos pinfos if isNil meths then error (Error (FSComp.SR.tcPropertyIsNotReadable nm, mItem)) - TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mExprAndItem mItem nm ad PossiblyMutates true meths afterResolution NormalValUse args atomicFlag delayed - + TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mExprAndItem mItem nm ad PossiblyMutates true meths afterResolution NormalValUse args atomicFlag delayed + | Item.RecdField rfinfo -> - // Get or set instance F# field or literal + // Get or set instance F# field or literal RecdFieldInstanceChecks cenv.g cenv.amap ad mItem rfinfo let tgtTy = rfinfo.DeclaringType let valu = isStructTy cenv.g tgtTy - AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css mItem NoTrace tgtTy objExprTy + AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css mItem NoTrace tgtTy objExprTy let objExpr = if valu then objExpr else mkCoerceExpr(objExpr, tgtTy, mExprAndItem, objExprTy) let fieldTy = rfinfo.FieldType - match delayed with + match delayed with | DelayedSet(e2, mStmt) :: otherDelayed -> - // Mutable value set: 'v <- e' + // Mutable value set: 'v <- e' if not (isNil otherDelayed) then error(Error(FSComp.SR.tcInvalidAssignment(), mItem)) CheckRecdFieldMutation mItem env.DisplayEnv rfinfo UnifyTypes cenv env mStmt overallTy cenv.g.unit_ty @@ -8291,51 +8267,51 @@ and TcLookupThen cenv overallTy env tpenv mObjExpr objExpr objExprTy longId dela | _ -> - // Instance F# Record or Class field + // Instance F# Record or Class field let objExpr' = mkRecdFieldGet cenv.g (objExpr, rfinfo.RecdFieldRef, rfinfo.TypeInst, mExprAndItem) - PropagateThenTcDelayed cenv overallTy env tpenv mExprAndItem (MakeApplicableExprWithFlex cenv env objExpr') fieldTy ExprAtomicFlag.Atomic delayed - + PropagateThenTcDelayed cenv overallTy env tpenv mExprAndItem (MakeApplicableExprWithFlex cenv env objExpr') fieldTy ExprAtomicFlag.Atomic delayed + | Item.AnonRecdField (anonInfo, tinst, n, _) -> let tgty = TType_anon (anonInfo, tinst) - AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css mItem NoTrace tgty objExprTy + AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css mItem NoTrace tgty objExprTy let fieldTy = List.item n tinst - match delayed with + match delayed with | DelayedSet _ :: _otherDelayed -> error(Error(FSComp.SR.tcInvalidAssignment(),mItem)) | _ -> - // Instance F# Anonymous Record + // Instance F# Anonymous Record let objExpr' = mkAnonRecdFieldGet cenv.g (anonInfo,objExpr,tinst,n,mExprAndItem) - PropagateThenTcDelayed cenv overallTy env tpenv mExprAndItem (MakeApplicableExprWithFlex cenv env objExpr') fieldTy ExprAtomicFlag.Atomic delayed - - | Item.ILField finfo -> - // Get or set instance IL field + PropagateThenTcDelayed cenv overallTy env tpenv mExprAndItem (MakeApplicableExprWithFlex cenv env objExpr') fieldTy ExprAtomicFlag.Atomic delayed + + | Item.ILField finfo -> + // Get or set instance IL field ILFieldInstanceChecks cenv.g cenv.amap ad mItem finfo let exprty = finfo.FieldType(cenv.amap, mItem) - - match delayed with - // Set instance IL field + + match delayed with + // Set instance IL field | DelayedSet(e2, mStmt) :: _delayed' -> UnifyTypes cenv env mStmt overallTy cenv.g.unit_ty // Always allow subsumption on assignment to fields let e2', tpenv = TcExprFlex cenv true false exprty env tpenv e2 let expr = BuildILFieldSet cenv.g mStmt objExpr finfo e2' expr, tpenv - | _ -> - let expr = BuildILFieldGet cenv.g cenv.amap mExprAndItem objExpr finfo - PropagateThenTcDelayed cenv overallTy env tpenv mExprAndItem (MakeApplicableExprWithFlex cenv env expr) exprty ExprAtomicFlag.Atomic delayed + | _ -> + let expr = BuildILFieldGet cenv.g cenv.amap mExprAndItem objExpr finfo + PropagateThenTcDelayed cenv overallTy env tpenv mExprAndItem (MakeApplicableExprWithFlex cenv env expr) exprty ExprAtomicFlag.Atomic delayed - | Item.Event einfo -> - // Instance IL event (fake up event-as-value) + | Item.Event einfo -> + // Instance IL event (fake up event-as-value) TcEventValueThen cenv overallTy env tpenv mItem mExprAndItem (Some(objExpr, objExprTy)) einfo delayed - + | (Item.FakeInterfaceCtor _ | Item.DelegateCtor _) -> error (Error (FSComp.SR.tcConstructorsCannotBeFirstClassValues(), mItem)) | _ -> error (Error (FSComp.SR.tcSyntaxFormUsedOnlyWithRecordLabelsPropertiesAndFields(), mItem)) -and TcEventValueThen cenv overallTy env tpenv mItem mExprAndItem objDetails (einfo: EventInfo) delayed = - // Instance IL event (fake up event-as-value) +and TcEventValueThen cenv overallTy env tpenv mItem mExprAndItem objDetails (einfo: EventInfo) delayed = + // Instance IL event (fake up event-as-value) let nm = einfo.EventName let ad = env.eAccessRights - match objDetails, einfo.IsStatic with + match objDetails, einfo.IsStatic with | Some _, true -> error (Error (FSComp.SR.tcEventIsStatic nm, mItem)) | None, false -> error (Error (FSComp.SR.tcEventIsNotStatic nm, mItem)) | _ -> () @@ -8344,21 +8320,21 @@ and TcEventValueThen cenv overallTy env tpenv mItem mExprAndItem objDetails (ein let (SigOfFunctionForDelegate(invokeMethInfo, compiledViewOfDelArgTys, _, _)) = GetSigOfFunctionForDelegate cenv.infoReader delegateType mItem ad let objArgs = Option.toList (Option.map fst objDetails) MethInfoChecks cenv.g cenv.amap true None objArgs env.eAccessRights mItem invokeMethInfo - - // This checks for and drops the 'object' sender + + // This checks for and drops the 'object' sender let argsTy = ArgsTypOfEventInfo cenv.infoReader mItem ad einfo if not (slotSigHasVoidReturnTy (invokeMethInfo.GetSlotSig(cenv.amap, mItem))) then errorR (nonStandardEventError einfo.EventName mItem) let delEventTy = mkIEventType cenv.g delegateType argsTy let bindObjArgs f = - match objDetails with + match objDetails with | None -> f [] - | Some (objExpr, objExprTy) -> mkCompGenLetIn mItem "eventTarget" objExprTy objExpr (fun (_, ve) -> f [ve]) + | Some (objExpr, objExprTy) -> mkCompGenLetIn mItem "eventTarget" objExprTy objExpr (fun (_, ve) -> f [ve]) - // Bind the object target expression to make sure we only run its side effects once, and to make - // sure if it's a mutable reference then we dereference it - see FSharp 1.0 bug 942 - let expr = - bindObjArgs (fun objVars -> + // Bind the object target expression to make sure we only run its side effects once, and to make + // sure if it's a mutable reference then we dereference it - see FSharp 1.0 bug 942 + let expr = + bindObjArgs (fun objVars -> // EventHelper ((fun d -> e.add_X(d)), (fun d -> e.remove_X(d)), (fun f -> new 'Delegate(f))) mkCallCreateEvent cenv.g mItem delegateType argsTy (let dv, de = mkCompGenLocal mItem "eventDelegate" delegateType @@ -8373,175 +8349,175 @@ and TcEventValueThen cenv overallTy env tpenv mItem mExprAndItem objDetails (ein mkLambda mItem fv (createExpr, delegateType))) let exprty = delEventTy - PropagateThenTcDelayed cenv overallTy env tpenv mExprAndItem (MakeApplicableExprNoFlex cenv expr) exprty ExprAtomicFlag.Atomic delayed - + PropagateThenTcDelayed cenv overallTy env tpenv mExprAndItem (MakeApplicableExprNoFlex cenv expr) exprty ExprAtomicFlag.Atomic delayed + //------------------------------------------------------------------------- // Method uses can calls -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- /// Typecheck method/member calls and uses of members as first-class values. -and TcMethodApplicationThen - cenv +and TcMethodApplicationThen + cenv env - overallTy // The type of the overall expression including "delayed". The method "application" may actually be a use of a member as - // a first-class function value, when this would be a function type. + overallTy // The type of the overall expression including "delayed". The method "application" may actually be a use of a member as + // a first-class function value, when this would be a function type. objTyOpt // methodType - tpenv - callerTyArgs // The return type of the overall expression including "delayed" - objArgs // The 'obj' arguments in obj.M(...) and obj.M, if any + tpenv + callerTyArgs // The return type of the overall expression including "delayed" + objArgs // The 'obj' arguments in obj.M(...) and obj.M, if any m // The range of the object argument or whole application. We immediately union this with the range of the arguments mItem // The range of the item that resolved to the method name - methodName // string, name of the method - ad // accessibility rights of the caller - mut // what do we know/assume about whether this method will mutate or not? - isProp // is this a property call? Used for better error messages and passed to BuildMethodCall - meths // the set of methods we may be calling + methodName // string, name of the method + ad // accessibility rights of the caller + mut // what do we know/assume about whether this method will mutate or not? + isProp // is this a property call? Used for better error messages and passed to BuildMethodCall + meths // the set of methods we may be calling afterResolution // do we need to notify sink after overload resolution - isSuperInit // is this a special invocation, e.g. a super-class constructor call. Passed through to BuildMethodCall - args // the _syntactic_ method arguments, not yet type checked. - atomicFlag // is the expression atomic or not? - delayed // further lookups and applications that follow this + isSuperInit // is this a special invocation, e.g. a super-class constructor call. Passed through to BuildMethodCall + args // the _syntactic_ method arguments, not yet type checked. + atomicFlag // is the expression atomic or not? + delayed // further lookups and applications that follow this = - // Nb. args is always of List.length <= 1 except for indexed setters, when it is 2 - let mWholeExpr = (m, args) ||> List.fold (fun m arg -> unionRanges m arg.Range) + // Nb. args is always of List.length <= 1 except for indexed setters, when it is 2 + let mWholeExpr = (m, args) ||> List.fold (fun m arg -> unionRanges m arg.Range) - // Work out if we know anything about the return type of the overall expression. If there are any delayed - // lookups then we don't know anything. + // Work out if we know anything about the return type of the overall expression. If there are any delayed + // lookups then we don't know anything. let exprTy = if isNil delayed then overallTy else NewInferenceType () - // Call the helper below to do the real checking - let (expr, attributeAssignedNamedItems, delayed), tpenv = + // Call the helper below to do the real checking + let (expr, attributeAssignedNamedItems, delayed), tpenv = TcMethodApplication false cenv env tpenv callerTyArgs objArgs mWholeExpr mItem methodName objTyOpt ad mut isProp meths afterResolution isSuperInit args exprTy delayed - // Give errors if some things couldn't be assigned - if not (isNil attributeAssignedNamedItems) then + // Give errors if some things couldn't be assigned + if not (isNil attributeAssignedNamedItems) then let (CallerNamedArg(id, _)) = List.head attributeAssignedNamedItems errorR(Error(FSComp.SR.tcNamedArgumentDidNotMatch(id.idText), id.idRange)) - // Resolve the "delayed" lookups + // Resolve the "delayed" lookups let exprty = (tyOfExpr cenv.g expr) - PropagateThenTcDelayed cenv overallTy env tpenv mWholeExpr (MakeApplicableExprNoFlex cenv expr) exprty atomicFlag delayed + PropagateThenTcDelayed cenv overallTy env tpenv mWholeExpr (MakeApplicableExprNoFlex cenv expr) exprty atomicFlag delayed /// Infer initial type information at the callsite from the syntax of an argument, prior to overload resolution. and GetNewInferenceTypeForMethodArg cenv env tpenv x = - match x with + match x with | SynExprParen(a, _, _, _) -> GetNewInferenceTypeForMethodArg cenv env tpenv a | SynExpr.AddressOf (true, a, _, m) -> mkByrefTyWithInference cenv.g (GetNewInferenceTypeForMethodArg cenv env tpenv a) (NewByRefKindInferenceType cenv.g m) | SynExpr.Lambda (_, _, _, a, _, _) -> mkFunTy (NewInferenceType ()) (GetNewInferenceTypeForMethodArg cenv env tpenv a) - | SynExpr.Quote (_, raw, a, _, _) -> + | SynExpr.Quote (_, raw, a, _, _) -> if raw then mkRawQuotedExprTy cenv.g else mkQuotedExprTy cenv.g (GetNewInferenceTypeForMethodArg cenv env tpenv a) | _ -> NewInferenceType () -/// Method calls, property lookups, attribute constructions etc. get checked through here -and TcMethodApplication - isCheckingAttributeCall - cenv - env - tpenv +/// Method calls, property lookups, attribute constructions etc. get checked through here +and TcMethodApplication + isCheckingAttributeCall + cenv + env + tpenv tyargsOpt - objArgs - mMethExpr // range of the entire method expression + objArgs + mMethExpr // range of the entire method expression mItem - methodName + methodName (objTyOpt: TType option) - ad - mut - isProp - calledMethsAndProps + ad + mut + isProp + calledMethsAndProps afterResolution - isSuperInit - curriedCallerArgs - exprTy + isSuperInit + curriedCallerArgs + exprTy delayed = let denv = env.DisplayEnv - let isSimpleFormalArg (isParamArrayArg, _isInArg, isOutArg, optArgInfo: OptionalArgInfo, callerInfo: CallerInfo, _reflArgInfo: ReflectedArgInfo) = + let isSimpleFormalArg (isParamArrayArg, _isInArg, isOutArg, optArgInfo: OptionalArgInfo, callerInfo: CallerInfo, _reflArgInfo: ReflectedArgInfo) = not isParamArrayArg && not isOutArg && not optArgInfo.IsOptional && callerInfo = NoCallerInfo - + let callerObjArgTys = objArgs |> List.map (tyOfExpr cenv.g) let calledMeths = calledMethsAndProps |> List.map fst - // Uses of curried members are ALWAYS treated as if they are first class uses of members. + // Uses of curried members are ALWAYS treated as if they are first class uses of members. // Curried members may not be overloaded (checked at use-site for curried members brought into scope through extension members) - let curriedCallerArgs, exprTy, delayed = - match calledMeths with + let curriedCallerArgs, exprTy, delayed = + match calledMeths with | [calledMeth] when not isProp && calledMeth.NumArgs.Length > 1 -> [], NewInferenceType (), [ for x in curriedCallerArgs -> DelayedApp(ExprAtomicFlag.NonAtomic, x, x.Range) ] @ delayed | _ when not isProp && calledMeths |> List.exists (fun calledMeth -> calledMeth.NumArgs.Length > 1) -> // This condition should only apply when multiple conflicting curried extension members are brought into scope error(Error(FSComp.SR.tcOverloadsCannotHaveCurriedArguments(), mMethExpr)) - | _ -> + | _ -> curriedCallerArgs, exprTy, delayed - let candidateMethsAndProps = - match calledMethsAndProps |> List.filter (fun (meth, _prop) -> IsMethInfoAccessible cenv.amap mItem ad meth) with - | [] -> calledMethsAndProps - | accessibleMeths -> accessibleMeths + let candidateMethsAndProps = + match calledMethsAndProps |> List.filter (fun (meth, _prop) -> IsMethInfoAccessible cenv.amap mItem ad meth) with + | [] -> calledMethsAndProps + | accessibleMeths -> accessibleMeths let candidates = candidateMethsAndProps |> List.map fst - // Split the syntactic arguments (if any) into named and unnamed parameters + // Split the syntactic arguments (if any) into named and unnamed parameters // // In one case (the second "single named item" rule) we delay the application of a // argument until we've produced a lambda that detuples an input tuple - let curriedCallerArgsOpt, unnamedDelayedCallerArgExprOpt, exprTy = - match curriedCallerArgs with - | [] -> + let curriedCallerArgsOpt, unnamedDelayedCallerArgExprOpt, exprTy = + match curriedCallerArgs with + | [] -> None, None, exprTy - | _ -> - let unnamedCurriedCallerArgs, namedCurriedCallerArgs = curriedCallerArgs |> List.map GetMethodArgs |> List.unzip - - // There is an mismatch when _uses_ of indexed property setters in the tc.fs code that calls this function. + | _ -> + let unnamedCurriedCallerArgs, namedCurriedCallerArgs = curriedCallerArgs |> List.map GetMethodArgs |> List.unzip + + // There is an mismatch when _uses_ of indexed property setters in the tc.fs code that calls this function. // The arguments are passed as if they are curried with arity [numberOfIndexParameters;1], however in the TAST, indexed property setters // are uncurried and have arity [numberOfIndexParameters+1]. // - // Here we work around this mismatch by crunching all property argument lists to uncurried form. + // Here we work around this mismatch by crunching all property argument lists to uncurried form. // Ideally the problem needs to be solved at its root cause at the callsites to this function - let unnamedCurriedCallerArgs, namedCurriedCallerArgs = - if isProp then + let unnamedCurriedCallerArgs, namedCurriedCallerArgs = + if isProp then [List.concat unnamedCurriedCallerArgs], [List.concat namedCurriedCallerArgs] - else + else unnamedCurriedCallerArgs, namedCurriedCallerArgs - + let MakeUnnamedCallerArgInfo x = (x, GetNewInferenceTypeForMethodArg cenv env tpenv x, x.Range) - // "single named item" rule. This is where we have a single accessible method - // member x.M(arg1) - // being used with - // x.M (x, y) - // Without this rule this requires - // x.M ((x, y)) - match candidates with - | [calledMeth] - when (namedCurriedCallerArgs |> List.forall isNil && + // "single named item" rule. This is where we have a single accessible method + // member x.M(arg1) + // being used with + // x.M (x, y) + // Without this rule this requires + // x.M ((x, y)) + match candidates with + | [calledMeth] + when (namedCurriedCallerArgs |> List.forall isNil && let curriedCalledArgs = calledMeth.GetParamAttribs(cenv.amap, mItem) curriedCalledArgs.Length = 1 && - curriedCalledArgs.Head.Length = 1 && + curriedCalledArgs.Head.Length = 1 && curriedCalledArgs.Head.Head |> isSimpleFormalArg) -> let unnamedCurriedCallerArgs = curriedCallerArgs |> List.map (MakeUnnamedCallerArgInfo >> List.singleton) let namedCurriedCallerArgs = namedCurriedCallerArgs |> List.map (fun _ -> []) (Some (unnamedCurriedCallerArgs, namedCurriedCallerArgs), None, exprTy) - // "single named item" rule. This is where we have a single accessible method - // member x.M(arg1, arg2) - // being used with + // "single named item" rule. This is where we have a single accessible method + // member x.M(arg1, arg2) + // being used with // x.M p - // We typecheck this as if it has been written "(fun (v1, v2) -> x.M(v1, v2)) p" - // Without this rule this requires - // x.M (fst p, snd p) - | [calledMeth] - when (namedCurriedCallerArgs |> List.forall isNil && + // We typecheck this as if it has been written "(fun (v1, v2) -> x.M(v1, v2)) p" + // Without this rule this requires + // x.M (fst p, snd p) + | [calledMeth] + when (namedCurriedCallerArgs |> List.forall isNil && unnamedCurriedCallerArgs.Length = 1 && - unnamedCurriedCallerArgs.Head.Length = 1 && + unnamedCurriedCallerArgs.Head.Length = 1 && let curriedCalledArgs = calledMeth.GetParamAttribs(cenv.amap, mItem) curriedCalledArgs.Length = 1 && curriedCalledArgs.Head.Length > 1 && @@ -8549,12 +8525,12 @@ and TcMethodApplication // The call lambda has function type let exprTy = mkFunTy (NewInferenceType ()) exprTy - + (None, Some unnamedCurriedCallerArgs.Head.Head, exprTy) | _ -> let unnamedCurriedCallerArgs = unnamedCurriedCallerArgs |> List.mapSquared MakeUnnamedCallerArgInfo - let namedCurriedCallerArgs = namedCurriedCallerArgs |> List.mapSquared (fun (isOpt, nm, x) -> + let namedCurriedCallerArgs = namedCurriedCallerArgs |> List.mapSquared (fun (isOpt, nm, x) -> let ty = GetNewInferenceTypeForMethodArg cenv env tpenv x // #435263: compiler crash with .net optional parameters and F# optional syntax // named optional arguments should always have option type @@ -8567,7 +8543,7 @@ and TcMethodApplication let CalledMethHasSingleArgumentGroupOfThisLength n (calledMeth: MethInfo) = let curriedMethodArgAttribs = calledMeth.GetParamAttribs(cenv.amap, mItem) - curriedMethodArgAttribs.Length = 1 && + curriedMethodArgAttribs.Length = 1 && curriedMethodArgAttribs.Head.Length = n let GenerateMatchingSimpleArgumentTypes (calledMeth: MethInfo) = @@ -8577,8 +8553,8 @@ and TcMethodApplication let UnifyMatchingSimpleArgumentTypes exprTy (calledMeth: MethInfo) = let curriedArgTys = GenerateMatchingSimpleArgumentTypes calledMeth - let returnTy = - (exprTy, curriedArgTys) ||> List.fold (fun exprTy argTys -> + let returnTy = + (exprTy, curriedArgTys) ||> List.fold (fun exprTy argTys -> let domainTy, resultTy = UnifyFunctionType None cenv denv mMethExpr exprTy UnifyTypes cenv env mMethExpr domainTy (mkRefTupledTy cenv.g argTys) resultTy) @@ -8587,71 +8563,71 @@ and TcMethodApplication if isProp && Option.isNone curriedCallerArgsOpt then error(Error(FSComp.SR.parsIndexerPropertyRequiresAtLeastOneArgument(), mItem)) - // STEP 1. UnifyUniqueOverloading. This happens BEFORE we type check the arguments. - // Extract what we know about the caller arguments, either type-directed if - // no arguments are given or else based on the syntax of the arguments. - let uniquelyResolved, preArgumentTypeCheckingCalledMethGroup = + // STEP 1. UnifyUniqueOverloading. This happens BEFORE we type check the arguments. + // Extract what we know about the caller arguments, either type-directed if + // no arguments are given or else based on the syntax of the arguments. + let uniquelyResolved, preArgumentTypeCheckingCalledMethGroup = let dummyExpr = mkSynUnit mItem - - // Build the CallerArg values for the caller's arguments. - // Fake up some arguments if this is the use of a method as a first class function - let unnamedCurriedCallerArgs, namedCurriedCallerArgs, returnTy = - - match curriedCallerArgsOpt, candidates with - // "single named item" rule. This is where we have a single accessible method - // member x.M(arg1, ..., argN) - // being used in a first-class way, i.e. - // x.M - // Because there is only one accessible method info available based on the name of the item - // being accessed we know the number of arguments the first class use of this - // method will take. Optional and out args are _not_ included, which means they will be resolved - // to their default values (for optionals) and be part of the return tuple (for out args). - | None, [calledMeth] -> + + // Build the CallerArg values for the caller's arguments. + // Fake up some arguments if this is the use of a method as a first class function + let unnamedCurriedCallerArgs, namedCurriedCallerArgs, returnTy = + + match curriedCallerArgsOpt, candidates with + // "single named item" rule. This is where we have a single accessible method + // member x.M(arg1, ..., argN) + // being used in a first-class way, i.e. + // x.M + // Because there is only one accessible method info available based on the name of the item + // being accessed we know the number of arguments the first class use of this + // method will take. Optional and out args are _not_ included, which means they will be resolved + // to their default values (for optionals) and be part of the return tuple (for out args). + | None, [calledMeth] -> let curriedArgTys, returnTy = UnifyMatchingSimpleArgumentTypes exprTy calledMeth - let unnamedCurriedCallerArgs = curriedArgTys |> List.mapSquared (fun ty -> CallerArg(ty, mMethExpr, false, dummyExpr)) + let unnamedCurriedCallerArgs = curriedArgTys |> List.mapSquared (fun ty -> CallerArg(ty, mMethExpr, false, dummyExpr)) let namedCurriedCallerArgs = unnamedCurriedCallerArgs |> List.map (fun _ -> []) unnamedCurriedCallerArgs, namedCurriedCallerArgs, returnTy - - // "type directed" rule for first-class uses of ambiguous methods. - // By context we know a type for the input argument. If it's a tuple - // this gives us the a potential number of arguments expected. Indeed even if it's a variable - // type we assume the number of arguments is just "1". + + // "type directed" rule for first-class uses of ambiguous methods. + // By context we know a type for the input argument. If it's a tuple + // this gives us the a potential number of arguments expected. Indeed even if it's a variable + // type we assume the number of arguments is just "1". | None, _ -> - + let domainTy, returnTy = UnifyFunctionType None cenv denv mMethExpr exprTy 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 + let argTys = + if candidates |> List.exists (CalledMethHasSingleArgumentGroupOfThisLength argTys.Length) then argTys - else + else [domainTy] let unnamedCurriedCallerArgs = [argTys |> List.map (fun ty -> CallerArg(ty, mMethExpr, false, dummyExpr)) ] let namedCurriedCallerArgs = unnamedCurriedCallerArgs |> List.map (fun _ -> []) unnamedCurriedCallerArgs, namedCurriedCallerArgs, returnTy - | Some (unnamedCurriedCallerArgs, namedCurriedCallerArgs), _ -> + | Some (unnamedCurriedCallerArgs, namedCurriedCallerArgs), _ -> let unnamedCurriedCallerArgs = unnamedCurriedCallerArgs |> List.mapSquared (fun (argExpr, argTy, mArg) -> CallerArg(argTy, mArg, false, argExpr)) - let namedCurriedCallerArgs = namedCurriedCallerArgs |> List.mapSquared (fun (id, isOpt, argExpr, argTy, mArg) -> CallerNamedArg(id, CallerArg(argTy, mArg, isOpt, argExpr))) + let namedCurriedCallerArgs = namedCurriedCallerArgs |> List.mapSquared (fun (id, isOpt, argExpr, argTy, mArg) -> CallerNamedArg(id, CallerArg(argTy, mArg, isOpt, argExpr))) unnamedCurriedCallerArgs, namedCurriedCallerArgs, exprTy let callerArgCounts = (List.sumBy List.length unnamedCurriedCallerArgs, List.sumBy List.length namedCurriedCallerArgs) let callerArgs = { Unnamed = unnamedCurriedCallerArgs; Named = namedCurriedCallerArgs } - let makeOneCalledMeth (minfo, pinfoOpt, usesParamArrayConversion) = + let makeOneCalledMeth (minfo, pinfoOpt, usesParamArrayConversion) = let minst = FreshenMethInfo mItem minfo - let callerTyArgs = - match tyargsOpt with + let callerTyArgs = + match tyargsOpt with | Some tyargs -> minfo.AdjustUserTypeInstForFSharpStyleIndexedExtensionMembers tyargs | None -> minst CalledMeth(cenv.infoReader, Some(env.NameEnv), isCheckingAttributeCall, FreshenMethInfo, mMethExpr, ad, minfo, minst, callerTyArgs, pinfoOpt, callerObjArgTys, callerArgs, usesParamArrayConversion, true, objTyOpt) - let preArgumentTypeCheckingCalledMethGroup = + let preArgumentTypeCheckingCalledMethGroup = [ for (minfo, pinfoOpt) in candidateMethsAndProps do - let meth = makeOneCalledMeth (minfo, pinfoOpt, true) + let meth = makeOneCalledMeth (minfo, pinfoOpt, true) yield meth - if meth.UsesParamArrayConversion then + if meth.UsesParamArrayConversion then yield makeOneCalledMeth (minfo, pinfoOpt, false) ] let uniquelyResolved = @@ -8659,36 +8635,36 @@ and TcMethodApplication uniquelyResolved, preArgumentTypeCheckingCalledMethGroup - // STEP 2. Type check arguments - let unnamedCurriedCallerArgs, namedCurriedCallerArgs, lambdaVars, returnTy, tpenv = + // STEP 2. Type check arguments + let unnamedCurriedCallerArgs, namedCurriedCallerArgs, lambdaVars, returnTy, tpenv = - // STEP 2a. First extract what we know about the caller arguments, either type-directed if - // no arguments are given or else based on the syntax of the arguments. - match curriedCallerArgsOpt with + // STEP 2a. First extract what we know about the caller arguments, either type-directed if + // no arguments are given or else based on the syntax of the arguments. + match curriedCallerArgsOpt with | None -> - let curriedArgTys, returnTy = - match candidates with - // "single named item" rule. This is where we have a single accessible method - // member x.M(arg1, ..., argN) - // being used in a first-class way, i.e. - // x.M - // Because there is only one accessible method info available based on the name of the item - // being accessed we know the number of arguments the first class use of this - // method will take. Optional and out args are _not_ included, which means they will be resolved - // to their default values (for optionals) and be part of the return tuple (for out args). - | [calledMeth] -> + let curriedArgTys, returnTy = + match candidates with + // "single named item" rule. This is where we have a single accessible method + // member x.M(arg1, ..., argN) + // being used in a first-class way, i.e. + // x.M + // Because there is only one accessible method info available based on the name of the item + // being accessed we know the number of arguments the first class use of this + // method will take. Optional and out args are _not_ included, which means they will be resolved + // to their default values (for optionals) and be part of the return tuple (for out args). + | [calledMeth] -> UnifyMatchingSimpleArgumentTypes exprTy calledMeth - | _ -> + | _ -> let domainTy, returnTy = UnifyFunctionType None cenv denv mMethExpr exprTy 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 - argTys + let argTys = + if candidates |> List.exists (CalledMethHasSingleArgumentGroupOfThisLength argTys.Length) then + argTys else [domainTy] [argTys], returnTy - + let lambdaVarsAndExprs = curriedArgTys |> List.mapiSquared (fun i j ty -> mkCompGenLocal mMethExpr ("arg"+string i+string j) ty) let unnamedCurriedCallerArgs = lambdaVarsAndExprs |> List.mapSquared (fun (_, e) -> CallerArg(tyOfExpr cenv.g e, e.Range, false, e)) let namedCurriedCallerArgs = lambdaVarsAndExprs |> List.map (fun _ -> []) @@ -8698,13 +8674,13 @@ and TcMethodApplication | Some (unnamedCurriedCallerArgs, namedCurriedCallerArgs) -> // This is the case where some explicit arguments have been given. - let unnamedCurriedCallerArgs = unnamedCurriedCallerArgs |> List.mapSquared (fun (argExpr, argTy, mArg) -> CallerArg(argTy, mArg, false, argExpr)) - let namedCurriedCallerArgs = namedCurriedCallerArgs |> List.mapSquared (fun (id, isOpt, argExpr, argTy, mArg) -> CallerNamedArg(id, CallerArg(argTy, mArg, isOpt, argExpr))) + let unnamedCurriedCallerArgs = unnamedCurriedCallerArgs |> List.mapSquared (fun (argExpr, argTy, mArg) -> CallerArg(argTy, mArg, false, argExpr)) + let namedCurriedCallerArgs = namedCurriedCallerArgs |> List.mapSquared (fun (id, isOpt, argExpr, argTy, mArg) -> CallerNamedArg(id, CallerArg(argTy, mArg, isOpt, argExpr))) // Collect the information for F# 3.1 lambda propagation rule, and apply the caller's object type to the method's object type if the rule is relevant. - let lambdaPropagationInfo = - if preArgumentTypeCheckingCalledMethGroup.Length > 1 then - [| for meth in preArgumentTypeCheckingCalledMethGroup do + let lambdaPropagationInfo = + if preArgumentTypeCheckingCalledMethGroup.Length > 1 then + [| for meth in preArgumentTypeCheckingCalledMethGroup do match ExamineMethodForLambdaPropagation meth with | Some (unnamedInfo, namedInfo) -> let calledObjArgTys = meth.CalledObjArgTys mMethExpr @@ -8715,60 +8691,60 @@ and TcMethodApplication [| |] // Now typecheck the argument expressions - let unnamedCurriedCallerArgs, (lambdaPropagationInfo, tpenv) = TcUnnamedMethodArgs cenv env lambdaPropagationInfo tpenv unnamedCurriedCallerArgs - let namedCurriedCallerArgs, (_, tpenv) = TcMethodNamedArgs cenv env lambdaPropagationInfo tpenv namedCurriedCallerArgs + let unnamedCurriedCallerArgs, (lambdaPropagationInfo, tpenv) = TcUnnamedMethodArgs cenv env lambdaPropagationInfo tpenv unnamedCurriedCallerArgs + let namedCurriedCallerArgs, (_, tpenv) = TcMethodNamedArgs cenv env lambdaPropagationInfo tpenv namedCurriedCallerArgs unnamedCurriedCallerArgs, namedCurriedCallerArgs, None, exprTy, tpenv - let preArgumentTypeCheckingCalledMethGroup = + let preArgumentTypeCheckingCalledMethGroup = preArgumentTypeCheckingCalledMethGroup |> List.map (fun cmeth -> (cmeth.Method, cmeth.CalledTyArgs, cmeth.AssociatedPropertyInfo, cmeth.UsesParamArrayConversion)) - + let uniquelyResolved = match uniquelyResolved with - | ErrorResult _ -> + | ErrorResult _ -> match afterResolution with | AfterResolution.DoNothing -> () | AfterResolution.RecordResolution(_, _, _, onFailure) -> onFailure() | _ -> () uniquelyResolved |> CommitOperationResult - - // STEP 3. Resolve overloading + + // STEP 3. Resolve overloading /// Select the called method that's the result of overload resolution - let finalCalledMeth = + let finalCalledMeth = let callerArgs = { Unnamed = unnamedCurriedCallerArgs ; Named = namedCurriedCallerArgs } - let postArgumentTypeCheckingCalledMethGroup = + let postArgumentTypeCheckingCalledMethGroup = preArgumentTypeCheckingCalledMethGroup |> List.map (fun (minfo: MethInfo, minst, pinfoOpt, usesParamArrayConversion) -> - let callerTyArgs = - match tyargsOpt with + let callerTyArgs = + match tyargsOpt with | Some tyargs -> minfo.AdjustUserTypeInstForFSharpStyleIndexedExtensionMembers tyargs | None -> minst CalledMeth(cenv.infoReader, Some(env.NameEnv), isCheckingAttributeCall, FreshenMethInfo, mMethExpr, ad, minfo, minst, callerTyArgs, pinfoOpt, callerObjArgTys, callerArgs, usesParamArrayConversion, true, objTyOpt)) - - // Commit unassociated constraints prior to member overload resolution where there is ambiguity - // about the possible target of the call. - if not uniquelyResolved then + + // Commit unassociated constraints prior to member overload resolution where there is ambiguity + // about the possible target of the call. + if not uniquelyResolved then ConstraintSolver.CanonicalizePartialInferenceProblem cenv.css denv mItem (//freeInTypeLeftToRight cenv.g false returnTy @ (unnamedCurriedCallerArgs |> List.collectSquared (fun callerArg -> freeInTypeLeftToRight cenv.g false callerArg.CallerArgumentType))) - let result, errors = ResolveOverloadingForCall denv cenv.css mMethExpr methodName 0 None callerArgs ad postArgumentTypeCheckingCalledMethGroup true (Some returnTy) + let result, errors = ResolveOverloadingForCall denv cenv.css mMethExpr methodName 0 None callerArgs ad postArgumentTypeCheckingCalledMethGroup true (Some returnTy) match afterResolution, result with | AfterResolution.DoNothing, _ -> () // Record the precise override resolution - | AfterResolution.RecordResolution(Some unrefinedItem, _, callSink, _), Some result + | AfterResolution.RecordResolution(Some unrefinedItem, _, callSink, _), Some result when result.Method.IsVirtual -> - let overriding = - match unrefinedItem with + let overriding = + match unrefinedItem with | Item.MethodGroup(_, overridenMeths, _) -> overridenMeths |> List.map (fun minfo -> minfo, None) - | Item.Property(_, pinfos) -> - if result.Method.LogicalName.StartsWithOrdinal("set_") then + | Item.Property(_, pinfos) -> + if result.Method.LogicalName.StartsWithOrdinal("set_") then SettersOfPropInfos pinfos - else + else GettersOfPropInfos pinfos | _ -> [] @@ -8777,12 +8753,12 @@ and TcMethodApplication |> List.tryFind (fun (minfo, _) -> minfo.IsVirtual && MethInfosEquivByNameAndSig EraseNone true cenv.g cenv.amap range0 result.Method minfo) match overridingInfo with - | Some (minfo, pinfoOpt) -> - let tps = minfo.FormalMethodTypars + | Some (minfo, pinfoOpt) -> + let tps = minfo.FormalMethodTypars let tyargs = result.CalledTyArgs let tpinst = if tps.Length = tyargs.Length then mkTyparInst tps tyargs else [] (minfo, pinfoOpt, tpinst) |> callSink - | None -> + | None -> (result.Method, result.AssociatedPropertyInfo, result.CalledTyparInst) |> callSink // Record the precise overload resolution and the type instantiation @@ -8793,9 +8769,9 @@ and TcMethodApplication onFailure() - // Raise the errors from the constraint solving + // Raise the errors from the constraint solving RaiseOperationResult errors - match result with + match result with | None -> error(InternalError("at least one error should be returned by failed method overloading", mItem)) | Some res -> res @@ -8804,33 +8780,33 @@ and TcMethodApplication let finalAssignedItemSetters = finalCalledMeth.AssignedItemSetters let finalAttributeAssignedNamedItems = finalCalledMeth.AttributeAssignedNamedArgs - // STEP 4. Check the attributes on the method and the corresponding event/property, if any + // STEP 4. Check the attributes on the method and the corresponding event/property, if any - finalCalledMeth.AssociatedPropertyInfo |> Option.iter (fun pinfo -> CheckPropInfoAttributes pinfo mItem |> CommitOperationResult) + finalCalledMeth.AssociatedPropertyInfo |> Option.iter (fun pinfo -> CheckPropInfoAttributes pinfo mItem |> CommitOperationResult) let isInstance = not (isNil objArgs) MethInfoChecks cenv.g cenv.amap isInstance tyargsOpt objArgs ad mItem finalCalledMethInfo // Adhoc constraints on use of .NET methods - begin + begin // Uses of Object.GetHashCode and Object.Equals imply an equality constraint on the object argument // - if (isInstance && + if (isInstance && finalCalledMethInfo.IsInstance && - typeEquiv cenv.g finalCalledMethInfo.ApparentEnclosingType cenv.g.obj_ty && - (finalCalledMethInfo.LogicalName = "GetHashCode" || finalCalledMethInfo.LogicalName = "Equals")) then - + typeEquiv cenv.g finalCalledMethInfo.ApparentEnclosingType cenv.g.obj_ty && + (finalCalledMethInfo.LogicalName = "GetHashCode" || finalCalledMethInfo.LogicalName = "Equals")) then + objArgs |> List.iter (fun expr -> ConstraintSolver.AddCxTypeMustSupportEquality env.DisplayEnv cenv.css mMethExpr NoTrace (tyOfExpr cenv.g expr)) - // Uses of a Dictionary() constructor without an IEqualityComparer argument imply an equality constraint + // Uses of a Dictionary() constructor without an IEqualityComparer argument imply an equality constraint // on the first type argument. if HasHeadType cenv.g cenv.g.tcref_System_Collections_Generic_Dictionary finalCalledMethInfo.ApparentEnclosingType && finalCalledMethInfo.IsConstructor && - not (finalCalledMethInfo.GetParamDatas(cenv.amap, mItem, finalCalledMeth.CalledTyArgs) - |> List.existsSquared (fun (ParamData(_, _, _, _, _, _, _, ty)) -> - HasHeadType cenv.g cenv.g.tcref_System_Collections_Generic_IEqualityComparer ty)) then - - match argsOfAppTy cenv.g finalCalledMethInfo.ApparentEnclosingType with + not (finalCalledMethInfo.GetParamDatas(cenv.amap, mItem, finalCalledMeth.CalledTyArgs) + |> List.existsSquared (fun (ParamData(_, _, _, _, _, _, _, ty)) -> + HasHeadType cenv.g cenv.g.tcref_System_Collections_Generic_IEqualityComparer ty)) then + + match argsOfAppTy cenv.g finalCalledMethInfo.ApparentEnclosingType with | [dty; _] -> ConstraintSolver.AddCxTypeMustSupportEquality env.DisplayEnv cenv.css mMethExpr NoTrace dty | _ -> () end @@ -8845,33 +8821,33 @@ and TcMethodApplication // Record the resolution of the named argument for the Language Service allArgs |> List.iter (fun assignedArg -> - match assignedArg.NamedArgIdOpt with + match assignedArg.NamedArgIdOpt with | None -> () - | Some id -> + | Some id -> let item = Item.ArgName (defaultArg assignedArg.CalledArg.NameOpt id, assignedArg.CalledArg.CalledArgumentType, Some(ArgumentContainer.Method finalCalledMethInfo)) CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.Use, ad)) /// STEP 6. Build the call expression, then adjust for byref-returns, out-parameters-as-tuples, post-hoc property assignments, methods-as-first-class-value, - /// + /// - let callExpr0, exprty = + let callExpr0, exprty = BuildPossiblyConditionalMethodCall cenv env mut mMethExpr isProp finalCalledMethInfo isSuperInit finalCalledMethInst objArgs allArgsCoerced - + // Handle byref returns - let callExpr1 = - // byref-typed returns get implicitly dereferenced + let callExpr1 = + // byref-typed returns get implicitly dereferenced let vty = tyOfExpr cenv.g callExpr0 - if isByrefTy cenv.g vty then + if isByrefTy cenv.g vty then mkDerefAddrExpr mMethExpr callExpr0 mMethExpr vty - else + else callExpr0 - // Bind "out" parameters as part of the result tuple - let callExpr2, exprty = + // Bind "out" parameters as part of the result tuple + let callExpr2, exprty = let expr = callExpr1 if isNil outArgTmpBinds then expr, exprty - else + else let outArgTys = outArgExprs |> List.map (tyOfExpr cenv.g) let expr = if isUnitTy cenv.g exprty then @@ -8881,92 +8857,92 @@ and TcMethodApplication let expr = mkLetsBind mMethExpr outArgTmpBinds expr expr, tyOfExpr cenv.g expr - // Handle post-hoc property assignments - let setterExprPrebinders, callExpr3 = + // Handle post-hoc property assignments + let setterExprPrebinders, callExpr3 = let expr = callExpr2 - if isCheckingAttributeCall then - [], expr - elif isNil finalAssignedItemSetters then - [], expr - else - // This holds the result of the call - let objv, objExpr = mkMutableCompGenLocal mMethExpr "returnVal" exprty // mutable in case it's a struct + if isCheckingAttributeCall then + [], expr + elif isNil finalAssignedItemSetters then + [], expr + else + // This holds the result of the call + let objv, objExpr = mkMutableCompGenLocal mMethExpr "returnVal" exprty // mutable in case it's a struct // Build the expression that mutates the properties on the result of the call - let setterExprPrebinders, propSetExpr = + let setterExprPrebinders, propSetExpr = (mkUnit cenv.g mMethExpr, finalAssignedItemSetters) ||> List.mapFold (fun acc assignedItemSetter -> let argExprPrebinder, action, m = TcSetterArgExpr cenv env denv objExpr ad assignedItemSetter argExprPrebinder, mkCompGenSequential m acc action) - // now put them together + // now put them together let expr = mkCompGenLet mMethExpr objv expr (mkCompGenSequential mMethExpr propSetExpr objExpr) setterExprPrebinders, expr // Build the lambda expression if any, if the method is used as a first-class value - let callExpr4 = + let callExpr4 = let expr = callExpr3 - match lambdaVars with + match lambdaVars with | None -> expr - | Some curriedLambdaVars -> - let mkLambda vs expr = - match vs with - | [] -> mkUnitDelayLambda cenv.g mMethExpr expr + | Some curriedLambdaVars -> + let mkLambda vs expr = + match vs with + | [] -> mkUnitDelayLambda cenv.g mMethExpr expr | _ -> mkMultiLambda mMethExpr vs (expr, tyOfExpr cenv.g expr) List.foldBack mkLambda curriedLambdaVars expr - let callExpr5, tpenv = + let callExpr5, tpenv = let expr = callExpr4 - match unnamedDelayedCallerArgExprOpt with - | Some synArgExpr -> - match lambdaVars with - | Some [lambdaVars] -> - let argExpr, tpenv = TcExpr cenv (mkRefTupledVarsTy cenv.g lambdaVars) env tpenv synArgExpr + match unnamedDelayedCallerArgExprOpt with + | Some synArgExpr -> + match lambdaVars with + | Some [lambdaVars] -> + 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)) - | None -> + | None -> expr, tpenv - // Apply the PreBinders, if any - let callExpr6 = + // Apply the PreBinders, if any + let callExpr6 = let expr = callExpr5 let expr = (expr, setterExprPrebinders) ||> List.fold (fun expr argPreBinder -> match argPreBinder with None -> expr | Some f -> f expr) let expr = (expr, paramArrayPreBinders) ||> List.fold (fun expr argPreBinder -> match argPreBinder with None -> expr | Some f -> f expr) let expr = (expr, allArgsPreBinders) ||> List.fold (fun expr argPreBinder -> match argPreBinder with None -> expr | Some f -> f expr) - + let expr = optArgPreBinder expr let expr = objArgPreBinder expr expr - + (callExpr6, finalAttributeAssignedNamedItems, delayed), tpenv - + and TcSetterArgExpr cenv env denv objExpr ad (AssignedItemSetter(id, setter, CallerArg(callerArgTy, m, isOptCallerArg, argExpr))) = if isOptCallerArg then error(Error(FSComp.SR.tcInvalidOptionalAssignmentToPropertyOrField(), m)) - - let argExprPrebinder, action, defnItem = - match setter with - | AssignedPropSetter (pinfo, pminfo, pminst) -> + + let argExprPrebinder, action, defnItem = + match setter with + | AssignedPropSetter (pinfo, pminfo, pminst) -> MethInfoChecks cenv.g cenv.amap true None [objExpr] ad m pminfo let calledArgTy = List.head (List.head (pminfo.GetParamTypes(cenv.amap, m, pminst))) let argExprPrebinder, argExpr = MethodCalls.AdjustCallerArgExprForCoercions cenv.g cenv.amap cenv.infoReader ad false calledArgTy ReflectedArgInfo.None callerArgTy m argExpr let mut = (if isStructTy cenv.g (tyOfExpr cenv.g objExpr) then DefinitelyMutates else PossiblyMutates) - let action = BuildPossiblyConditionalMethodCall cenv env mut m true pminfo NormalValUse pminst [objExpr] [argExpr] |> fst + let action = BuildPossiblyConditionalMethodCall cenv env mut m true pminfo NormalValUse pminst [objExpr] [argExpr] |> fst argExprPrebinder, action, Item.Property (pinfo.PropertyName, [pinfo]) | AssignedILFieldSetter finfo -> - // Get or set instance IL field + // Get or set instance IL field ILFieldInstanceChecks cenv.g cenv.amap ad m finfo let calledArgTy = finfo.FieldType (cenv.amap, m) let argExprPrebinder, argExpr = MethodCalls.AdjustCallerArgExprForCoercions cenv.g cenv.amap cenv.infoReader ad false calledArgTy ReflectedArgInfo.None callerArgTy m argExpr - let action = BuildILFieldSet cenv.g m objExpr finfo argExpr + let action = BuildILFieldSet cenv.g m objExpr finfo argExpr argExprPrebinder, action, Item.ILField finfo - + | AssignedRecdFieldSetter rfinfo -> - RecdFieldInstanceChecks cenv.g cenv.amap ad m rfinfo + RecdFieldInstanceChecks cenv.g cenv.amap ad m rfinfo let calledArgTy = rfinfo.FieldType CheckRecdFieldMutation m denv rfinfo let argExprPrebinder, argExpr = MethodCalls.AdjustCallerArgExprForCoercions cenv.g cenv.amap cenv.infoReader ad false calledArgTy ReflectedArgInfo.None callerArgTy m argExpr - let action = BuildRecdFieldSet cenv.g m objExpr rfinfo argExpr + let action = BuildRecdFieldSet cenv.g m objExpr rfinfo argExpr argExprPrebinder, action, Item.RecdField rfinfo // Record the resolution for the Language Service @@ -8975,81 +8951,81 @@ and TcSetterArgExpr cenv env denv objExpr ad (AssignedItemSetter(id, setter, Cal argExprPrebinder, action, m -and TcUnnamedMethodArgs cenv env lambdaPropagationInfo tpenv args = - List.mapiFoldSquared (TcUnnamedMethodArg cenv env) (lambdaPropagationInfo, tpenv) args +and TcUnnamedMethodArgs cenv env lambdaPropagationInfo tpenv args = + List.mapiFoldSquared (TcUnnamedMethodArg cenv env) (lambdaPropagationInfo, tpenv) args -and TcUnnamedMethodArg cenv env (lambdaPropagationInfo, tpenv) (i, j, CallerArg(argTy, mArg, isOpt, argExpr)) = +and TcUnnamedMethodArg cenv env (lambdaPropagationInfo, tpenv) (i, j, CallerArg(argTy, mArg, isOpt, argExpr)) = // Try to find the lambda propagation info for the corresponding unnamed argument at this position - let lambdaPropagationInfoForArg = - [| for (unnamedInfo, _) in lambdaPropagationInfo -> - if i < unnamedInfo.Length && j < unnamedInfo.[i].Length then unnamedInfo.[i].[j] else NoInfo |] + let lambdaPropagationInfoForArg = + [| for (unnamedInfo, _) in lambdaPropagationInfo -> + if i < unnamedInfo.Length && j < unnamedInfo.[i].Length then unnamedInfo.[i].[j] else NoInfo |] TcMethodArg cenv env (lambdaPropagationInfo, tpenv) (lambdaPropagationInfoForArg, CallerArg(argTy, mArg, isOpt, argExpr)) -and TcMethodNamedArgs cenv env lambdaPropagationInfo tpenv args = +and TcMethodNamedArgs cenv env lambdaPropagationInfo tpenv args = List.mapFoldSquared (TcMethodNamedArg cenv env) (lambdaPropagationInfo, tpenv) args -and TcMethodNamedArg cenv env (lambdaPropagationInfo, tpenv) (CallerNamedArg(id, arg)) = +and TcMethodNamedArg cenv env (lambdaPropagationInfo, tpenv) (CallerNamedArg(id, arg)) = // Try to find the lambda propagation info for the corresponding named argument - let lambdaPropagationInfoForArg = - [| for (_, namedInfo) in lambdaPropagationInfo -> - namedInfo |> Array.tryPick (fun namedInfoForArgSet -> - namedInfoForArgSet |> Array.tryPick (fun (nm, info) -> + let lambdaPropagationInfoForArg = + [| for (_, namedInfo) in lambdaPropagationInfo -> + namedInfo |> Array.tryPick (fun namedInfoForArgSet -> + namedInfoForArgSet |> Array.tryPick (fun (nm, info) -> if nm.idText = id.idText then Some info else None)) |] |> Array.map (fun x -> defaultArg x NoInfo) let arg', (lambdaPropagationInfo, tpenv) = TcMethodArg cenv env (lambdaPropagationInfo, tpenv) (lambdaPropagationInfoForArg, arg) CallerNamedArg(id, arg'), (lambdaPropagationInfo, tpenv) -and TcMethodArg cenv env (lambdaPropagationInfo, tpenv) (lambdaPropagationInfoForArg, CallerArg(argTy, mArg, isOpt, argExpr)) = +and TcMethodArg cenv env (lambdaPropagationInfo, tpenv) (lambdaPropagationInfoForArg, CallerArg(argTy, mArg, isOpt, argExpr)) = // Apply the F# 3.1 rule for extracting information for lambdas // // Before we check the argument, check to see if we can propagate info from a called lambda expression into the arguments of a received lambda - if lambdaPropagationInfoForArg.Length > 0 then - let allOverloadsAreNotCalledArgMatchesForThisArg = - lambdaPropagationInfoForArg + if lambdaPropagationInfoForArg.Length > 0 then + let allOverloadsAreNotCalledArgMatchesForThisArg = + lambdaPropagationInfoForArg |> Array.forall (function ArgDoesNotMatch | CallerLambdaHasArgTypes _ | NoInfo -> true | CalledArgMatchesType _ -> false) - if allOverloadsAreNotCalledArgMatchesForThisArg then + if allOverloadsAreNotCalledArgMatchesForThisArg then let overloadsWhichAreFuncAtThisPosition = lambdaPropagationInfoForArg |> Array.choose (function CallerLambdaHasArgTypes r -> Some (List.toArray r) | _ -> None) - if overloadsWhichAreFuncAtThisPosition.Length > 0 then + if overloadsWhichAreFuncAtThisPosition.Length > 0 then let minFuncArity = overloadsWhichAreFuncAtThisPosition |> Array.minBy Array.length |> Array.length let prefixOfLambdaArgsForEachOverload = overloadsWhichAreFuncAtThisPosition |> Array.map (Array.take minFuncArity) - - if prefixOfLambdaArgsForEachOverload.Length > 0 then + + if prefixOfLambdaArgsForEachOverload.Length > 0 then let numLambdaVars = prefixOfLambdaArgsForEachOverload.[0].Length // Fold across the lambda var positions checking if all method overloads imply the same argument type for a lambda variable. // If so, force the caller to have a function type that looks like the calledLambdaArgTy. // The loop variable callerLambdaTyOpt becomes None if something failed. - let rec loop callerLambdaTy lambdaVarNum = + let rec loop callerLambdaTy lambdaVarNum = if lambdaVarNum < numLambdaVars then let calledLambdaArgTy = prefixOfLambdaArgsForEachOverload.[0].[lambdaVarNum] let allRowsGiveSameArgumentType = prefixOfLambdaArgsForEachOverload - |> Array.forall (fun row -> typeEquiv cenv.g calledLambdaArgTy row.[lambdaVarNum]) + |> Array.forall (fun row -> typeEquiv cenv.g calledLambdaArgTy row.[lambdaVarNum]) if allRowsGiveSameArgumentType then // Force the caller to be a function type. - match UnifyFunctionTypeUndoIfFailed cenv env.DisplayEnv mArg callerLambdaTy with + match UnifyFunctionTypeUndoIfFailed cenv env.DisplayEnv mArg callerLambdaTy with | ValueSome (callerLambdaDomainTy, callerLambdaRangeTy) -> - if AddCxTypeEqualsTypeUndoIfFailed env.DisplayEnv cenv.css mArg calledLambdaArgTy callerLambdaDomainTy then + if AddCxTypeEqualsTypeUndoIfFailed env.DisplayEnv cenv.css mArg calledLambdaArgTy callerLambdaDomainTy then loop callerLambdaRangeTy (lambdaVarNum + 1) | _ -> () loop argTy 0 let e', tpenv = TcExpr cenv argTy env tpenv argExpr - // After we have checked, propagate the info from argument into the overloads that receive it. + // After we have checked, propagate the info from argument into the overloads that receive it. // - // Filter out methods where an argument doesn't match. This just filters them from lambda propagation but not from + // Filter out methods where an argument doesn't match. This just filters them from lambda propagation but not from // later method overload resolution. - let lambdaPropagationInfo = - [| for (info, argInfo) in Array.zip lambdaPropagationInfo lambdaPropagationInfoForArg do - match argInfo with + let lambdaPropagationInfo = + [| for (info, argInfo) in Array.zip lambdaPropagationInfo lambdaPropagationInfoForArg do + match argInfo with | ArgDoesNotMatch _ -> () - | NoInfo | CallerLambdaHasArgTypes _ -> + | NoInfo | CallerLambdaHasArgTypes _ -> yield info - | CalledArgMatchesType adjustedCalledTy -> + | CalledArgMatchesType adjustedCalledTy -> if AddCxTypeMustSubsumeTypeMatchingOnlyUndoIfFailed env.DisplayEnv cenv.css mArg adjustedCalledTy argTy then yield info |] @@ -9063,64 +9039,63 @@ and TcNewDelegateThen cenv overallTy env tpenv mDelTy mExprAndArg delegateTy arg // We pass isInstance = true here because we're checking the rights to access the "Invoke" method MethInfoChecks cenv.g cenv.amap true None [] env.eAccessRights mExprAndArg invokeMethInfo let args = GetMethodArgs arg - match args with - | [farg], [] -> + match args with + | [farg], [] -> let m = arg.Range let callerArg, (_, tpenv) = TcMethodArg cenv env (Array.empty, tpenv) (Array.empty, CallerArg(fty, m, false, farg)) let expr = BuildNewDelegateExpr (None, cenv.g, cenv.amap, delegateTy, invokeMethInfo, delArgTys, callerArg.Expr, fty, m) - PropagateThenTcDelayed cenv overallTy env tpenv m (MakeApplicableExprNoFlex cenv expr) delegateTy atomicFlag delayed - | _ -> + PropagateThenTcDelayed cenv overallTy env tpenv m (MakeApplicableExprNoFlex cenv expr) delegateTy atomicFlag delayed + | _ -> error(Error(FSComp.SR.tcDelegateConstructorMustBePassed(), mExprAndArg)) -and bindLetRec (binds: Bindings) m e = - if isNil binds then - e - else - Expr.LetRec (binds, e, m, Construct.NewFreeVarsCache()) +and bindLetRec (binds: Bindings) m e = + if isNil binds then + e + else + Expr.LetRec (binds, e, m, Construct.NewFreeVarsCache()) /// Check for duplicate bindings in simple recursive patterns and CheckRecursiveBindingIds binds = let hashOfBinds = new HashSet() - - for (SynBinding.SynBinding(_, _, _, _, _, _, _, b, _, _, m, _)) in binds do + + for (SynBinding.Binding(_, _, _, _, _, _, _, b, _, _, m, _)) in binds do let nm = match b with - | SynPat.Named(id, _, _, _) - | SynPat.As(_, SynPat.Named(id, _, _, _), _) + | SynPat.Named(_, id, _, _, _) -> id.idText | SynPat.LongIdent(LongIdentWithDots([id], _), _, _, _, _, _) -> id.idText | _ -> "" if nm <> "" && not (hashOfBinds.Add nm) then error(Duplicate("value", nm, m)) -/// Process a sequence of sequentials mixed with iterated lets "let ... in let ... in ..." in a tail recursive way +/// Process a sequence of sequentials 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 +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 let env = ShrinkContext env m e2.Range // tailcall - TcLinearExprs bodyChecker cenv env overallTy tpenv isCompExpr e2 (fun (e2', tpenv) -> + 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 + 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 + let bodyExpr, tpenv = bodyChecker overallTy envinner tpenv body let bodyExpr = bindLetRec binds m bodyExpr cont (bodyExpr, tpenv) - else + 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) let envinner = ShrinkContext envinner m body.Range // tailcall - TcLinearExprs bodyChecker cenv envinner overallTy tpenv isCompExpr body (fun (x, tpenv) -> + TcLinearExprs bodyChecker cenv envinner overallTy tpenv isCompExpr body (fun (x, tpenv) -> cont (fst (mkf (x, overallTy)), tpenv)) | SynExpr.IfThenElse (synBoolExpr, synThenExpr, synElseExprOpt, spIfToThen, isRecovery, mIfToThen, m) when not isCompExpr -> @@ -9129,7 +9104,7 @@ and TcLinearExprs bodyChecker cenv env overallTy tpenv isCompExpr expr cont = let env = match env.eContextInfo with | ContextInfo.ElseBranchResult _ -> { env with eContextInfo = ContextInfo.ElseBranchResult synThenExpr.Range } - | _ -> + | _ -> match synElseExprOpt with | None -> { env with eContextInfo = ContextInfo.OmittedElseBranch synThenExpr.Range } | _ -> { env with eContextInfo = ContextInfo.IfExpression synThenExpr.Range } @@ -9139,7 +9114,7 @@ and TcLinearExprs bodyChecker cenv env overallTy tpenv isCompExpr expr cont = TcExprThatCanBeCtorBody cenv overallTy env tpenv synThenExpr - match synElseExprOpt with + match synElseExprOpt with | None -> let elseExpr = mkUnit cenv.g mIfToThen let spElse = DebugPointForTarget.No // the fake 'unit' value gets exactly the same range as spIfToThen @@ -9149,11 +9124,11 @@ and TcLinearExprs bodyChecker cenv env overallTy tpenv isCompExpr expr cont = | Some synElseExpr -> let env = { env with eContextInfo = ContextInfo.ElseBranchResult synElseExpr.Range } // tailcall - TcLinearExprs bodyChecker cenv env overallTy tpenv isCompExpr synElseExpr (fun (elseExpr, tpenv) -> + TcLinearExprs bodyChecker cenv env overallTy tpenv isCompExpr synElseExpr (fun (elseExpr, tpenv) -> let resExpr = primMkCond spIfToThen DebugPointForTarget.Yes DebugPointForTarget.Yes m overallTy boolExpr thenExpr elseExpr cont (resExpr, tpenv)) - | _ -> + | _ -> cont (bodyChecker overallTy env tpenv expr) /// Typecheck and compile pattern-matching constructs @@ -9165,8 +9140,8 @@ and TcAndPatternCompileMatchClauses mExpr matchm actionOnFailure cenv inputExprO and TcMatchPattern cenv inputTy env tpenv (pat: SynPat, optWhenExpr: SynExpr option) = let m = pat.Range let patf', (tpenv, names, _) = TcPat WarnOnUpperCase cenv env None (ValInline.Optional, permitInferTypars, noArgOrRetAttribs, false, None, false) (tpenv, Map.empty, Set.empty) inputTy pat - let envinner, values, vspecMap = MakeAndPublishSimpleValsForMergedScope cenv env m names - let optWhenExpr', tpenv = + let envinner, values, vspecMap = MakeAndPublishSimpleValsForMergedScope cenv env m names + let optWhenExpr', tpenv = match optWhenExpr with | Some whenExpr -> let guardEnv = { envinner with eContextInfo = ContextInfo.PatternMatchGuard whenExpr.Range } @@ -9180,22 +9155,22 @@ and TcMatchClauses cenv inputTy resultTy env tpenv clauses = let isFirst() = if first then first <- false; true else false List.mapFold (fun clause -> TcMatchClause cenv inputTy resultTy env (isFirst()) clause) tpenv clauses -and TcMatchClause cenv inputTy resultTy env isFirst tpenv (SynMatchClause(pat, optWhenExpr, e, patm, spTgt)) = +and TcMatchClause cenv inputTy resultTy env isFirst tpenv (Clause(pat, optWhenExpr, e, patm, spTgt)) = let pat', optWhenExpr', vspecs, envinner, tpenv = TcMatchPattern cenv inputTy env tpenv (pat, optWhenExpr) let resultEnv = if isFirst then envinner else { envinner with eContextInfo = ContextInfo.FollowingPatternMatchClause e.Range } let e', tpenv = TcExprThatCanBeCtorBody cenv resultTy resultEnv tpenv e TClause(pat', optWhenExpr', TTarget(vspecs, e', spTgt), patm), tpenv -and TcStaticOptimizationConstraint cenv env tpenv c = - match c with - | SynStaticOptimizationConstraint.WhenTyparTyconEqualsTycon(tp, ty, m) -> - if not cenv.g.compilingFslib then +and TcStaticOptimizationConstraint cenv env tpenv c = + match c with + | WhenTyparTyconEqualsTycon(tp, ty, m) -> + if not cenv.g.compilingFslib then errorR(Error(FSComp.SR.tcStaticOptimizationConditionalsOnlyForFSharpLibrary(), m)) let ty', tpenv = TcType cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv ty let tp', tpenv = TcTypar cenv env NewTyparsOK tpenv tp TTyconEqualsTycon(mkTyparTy tp', ty'), tpenv - | SynStaticOptimizationConstraint.WhenTyparIsStruct(tp, m) -> - if not cenv.g.compilingFslib then + | WhenTyparIsStruct(tp, m) -> + if not cenv.g.compilingFslib then errorR(Error(FSComp.SR.tcStaticOptimizationConditionalsOnlyForFSharpLibrary(), m)) let tp', tpenv = TcTypar cenv env NewTyparsOK tpenv tp TTyconIsStruct(mkTyparTy tp'), tpenv @@ -9203,39 +9178,39 @@ and TcStaticOptimizationConstraint cenv env tpenv c = /// Emit a conv.i instruction and mkConvToNativeInt (g: TcGlobals) e m = Expr.Op (TOp.ILAsm ([ AI_conv ILBasicType.DT_I], [ g.nativeint_ty ]), [], [e], m) -/// Fix up the r.h.s. of a 'use x = fixed expr' +/// Fix up the r.h.s. of a 'use x = fixed expr' and TcAndBuildFixedExpr cenv env (overallPatTy, fixedExpr, overallExprTy, mBinding) = warning(PossibleUnverifiableCode mBinding) - match overallExprTy with - | ty when isByrefTy cenv.g ty -> - let okByRef = - match stripExpr fixedExpr with + match overallExprTy with + | ty when isByrefTy cenv.g ty -> + let okByRef = + match stripExpr fixedExpr with | Expr.Op (op, tyargs, args, _) -> - match op, tyargs, args with + match op, tyargs, args with | TOp.ValFieldGetAddr (rfref, _), _, [_] -> not rfref.Tycon.IsStructOrEnumTycon | TOp.ILAsm ([ I_ldflda fspec], _), _, _ -> fspec.DeclaringType.Boxity = ILBoxity.AsObject | TOp.ILAsm ([ I_ldelema _], _), _, _ -> true | TOp.RefAddrGet _, _, _ -> true | _ -> false | _ -> false - if not okByRef then + if not okByRef then error(Error(FSComp.SR.tcFixedNotAllowed(), mBinding)) let elemTy = destByrefTy cenv.g overallExprTy UnifyTypes cenv env mBinding (mkNativePtrTy cenv.g elemTy) overallPatTy - mkCompGenLetIn mBinding "pinnedByref" ty fixedExpr (fun (v, ve) -> + mkCompGenLetIn mBinding "pinnedByref" ty fixedExpr (fun (v, ve) -> v.SetIsFixed() mkConvToNativeInt cenv.g ve mBinding) - - | ty when isStringTy cenv.g ty -> + + | ty when isStringTy cenv.g ty -> let charPtrTy = mkNativePtrTy cenv.g cenv.g.char_ty UnifyTypes cenv env mBinding charPtrTy overallPatTy // - // let ptr: nativeptr = + // let ptr: nativeptr = // let pinned s = str // (nativeptr)s + get_OffsettoStringData() - mkCompGenLetIn mBinding "pinnedString" cenv.g.string_ty fixedExpr (fun (v, ve) -> + mkCompGenLetIn mBinding "pinnedString" cenv.g.string_ty fixedExpr (fun (v, ve) -> v.SetIsFixed() let addrOffset = BuildOffsetToStringData cenv env mBinding let stringAsNativeInt = mkConvToNativeInt cenv.g ve mBinding @@ -9243,150 +9218,125 @@ and TcAndBuildFixedExpr cenv env (overallPatTy, fixedExpr, overallExprTy, mBindi // check for non-null mkNullTest cenv.g mBinding ve plusOffset ve) - | ty when isArray1DTy cenv.g ty -> + | ty when isArray1DTy cenv.g ty -> let elemTy = destArrayTy cenv.g overallExprTy let elemPtrTy = mkNativePtrTy cenv.g elemTy UnifyTypes cenv env mBinding elemPtrTy overallPatTy - // let ptr: nativeptr = + // let ptr: nativeptr = // let tmpArray: elem[] = arr // if nonNull tmpArray then // if tmpArray.Length <> 0 then // let pinned tmpArrayByref: byref = &arr.[0] // (nativeint) tmpArrayByref - // else + // else // (nativeint) 0 - // else + // else // (nativeint) 0 // - mkCompGenLetIn mBinding "tmpArray" overallExprTy fixedExpr (fun (_, ve) -> + mkCompGenLetIn mBinding "tmpArray" overallExprTy fixedExpr (fun (_, ve) -> // This is &arr.[0] let elemZeroAddress = mkArrayElemAddress cenv.g (false, ILReadonly.NormalAddress, false, ILArrayShape.SingleDimensional, elemTy, [ve; mkInt32 cenv.g mBinding 0], mBinding) // check for non-null and non-empty - let zero = mkConvToNativeInt cenv.g (mkInt32 cenv.g mBinding 0) mBinding + let zero = mkConvToNativeInt cenv.g (mkInt32 cenv.g mBinding 0) mBinding // This is arr.Length - let arrayLengthExpr = mkCallArrayLength cenv.g mBinding elemTy ve - mkNullTest cenv.g mBinding ve - (mkNullTest cenv.g mBinding arrayLengthExpr - (mkCompGenLetIn mBinding "pinnedByref" (mkByrefTy cenv.g elemTy) elemZeroAddress (fun (v, ve) -> + let arrayLengthExpr = mkCallArrayLength cenv.g mBinding elemTy ve + mkNullTest cenv.g mBinding ve + (mkNullTest cenv.g mBinding arrayLengthExpr + (mkCompGenLetIn mBinding "pinnedByref" (mkByrefTy cenv.g elemTy) elemZeroAddress (fun (v, ve) -> v.SetIsFixed() (mkConvToNativeInt cenv.g ve mBinding))) - zero) + zero) zero) | _ -> error(Error(FSComp.SR.tcFixedNotAllowed(), mBinding)) -/// Binding checking code, for all bindings including let bindings, let-rec bindings, member bindings and object-expression bindings and +/// 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 overallTy safeThisValOpt safeInitInfo (enclosingDeclaredTypars, (ExplicitTyparInfo(_, declaredTypars, _) as explicitTyparInfo)) bind = let envinner = AddDeclaredTypars NoCheckForDuplicateTypars (enclosingDeclaredTypars@declaredTypars) env - match bind with + match bind with | NormalizedBinding(vis, bkind, isInline, isMutable, attrs, doc, _, valSynData, pat, NormalizedBindingRhs(spatsL, rtyOpt, rhsExpr), mBinding, spBind) -> - let (SynValData(memberFlagsOpt, _, _)) = valSynData + let (SynValData(memberFlagsOpt, valSynInfo, _)) = valSynData - let callerName = + let callerName = match declKind, bkind, pat with | ExpressionBinding, _, _ -> envinner.eCallerMemberName - | _, _, (SynPat.Named(name, _, _, _) | SynPat.As(_, SynPat.Named(name, _, _, _), _)) -> + | _, _, SynPat.Named(_, name, _, _, _) -> match memberFlagsOpt with | Some memberFlags -> match memberFlags.MemberKind with - | SynMemberKind.PropertyGet | SynMemberKind.PropertySet | SynMemberKind.PropertyGetSet -> Some(name.idText.Substring 4) - | SynMemberKind.ClassConstructor -> Some(".ctor") - | SynMemberKind.Constructor -> Some(".ctor") + | MemberKind.PropertyGet | MemberKind.PropertySet | MemberKind.PropertyGetSet -> Some(name.idText.Substring 4) + | MemberKind.ClassConstructor -> Some(".ctor") + | MemberKind.Constructor -> Some(".ctor") | _ -> Some(name.idText) | _ -> Some(name.idText) - | ClassLetBinding false, SynBindingKind.Do, _ -> Some(".ctor") - | ClassLetBinding true, SynBindingKind.Do, _ -> Some(".cctor") - | ModuleOrMemberBinding, SynBindingKind.StandaloneExpression, _ -> Some(".cctor") + | ClassLetBinding false, DoBinding, _ -> Some(".ctor") + | ClassLetBinding true, DoBinding, _ -> Some(".cctor") + | ModuleOrMemberBinding, StandaloneExpression, _ -> Some(".cctor") | _, _, _ -> envinner.eCallerMemberName let envinner = {envinner with eCallerMemberName = callerName } - let attrTgt = DeclKind.AllowedAttribTargets memberFlagsOpt declKind + let attrTgt = DeclKind.AllowedAttribTargets memberFlagsOpt declKind - let isFixed, rhsExpr, overallPatTy, overallExprTy = - match rhsExpr with + let isFixed, rhsExpr, overallPatTy, overallExprTy = + match rhsExpr with | SynExpr.Fixed (e, _) -> true, e, NewInferenceType(), overallTy | e -> false, e, overallTy, overallTy // Check the attributes of the binding, parameters or return value - let TcAttrs tgt isRet attrs = - // For all but attributes positioned at the return value, disallow implicitly - // targeting the return value. - let tgtEx = if isRet then enum 0 else AttributeTargets.ReturnValue - let attrs, _ = TcAttributesMaybeFailEx false cenv envinner tgt tgtEx attrs - if attrTgt = enum 0 && not (isNil attrs) then + let TcAttrs tgt attrs = + let attrs = TcAttributes cenv envinner tgt attrs + if attrTgt = enum 0 && not (isNil attrs) then errorR(Error(FSComp.SR.tcAttributesAreNotPermittedOnLetBindings(), mBinding)) attrs - - // Rotate [] from binding to return value - // Also patch the syntactic representation - let retAttribs, valAttribs, valSynData = - let attribs = TcAttrs attrTgt false attrs - let rotRetSynAttrs, rotRetAttribs, valAttribs = - // Do not rotate if some attrs fail to typecheck... - if attribs.Length <> attrs.Length then [], [], attribs - else attribs - |> List.zip attrs - |> List.partition(function | (_, Attrib(_, _, _, _, _, Some ts, _)) -> ts &&& AttributeTargets.ReturnValue <> enum 0 | _ -> false) - |> fun (r, v) -> (List.map fst r, List.map snd r, List.map snd v) - let retAttribs = - match rtyOpt with - | Some (SynBindingReturnInfo(_, _, Attributes retAttrs)) -> - rotRetAttribs @ TcAttrs AttributeTargets.ReturnValue true retAttrs - | None -> rotRetAttribs - let valSynData = - match rotRetSynAttrs with - | [] -> valSynData - | {Range=mHead} :: _ -> - let (SynValData(valMf, SynValInfo(args, SynArgInfo(attrs, opt, retId)), valId)) = valSynData - in SynValData(valMf, SynValInfo(args, SynArgInfo({Attributes=rotRetSynAttrs; Range=mHead} :: attrs, opt, retId)), valId) - retAttribs, valAttribs, valSynData - + + let valAttribs = TcAttrs attrTgt attrs let isVolatile = HasFSharpAttribute cenv.g cenv.g.attrib_VolatileFieldAttribute valAttribs - + let inlineFlag = ComputeInlineFlag memberFlagsOpt isInline isMutable mBinding let argAttribs = - spatsL |> List.map (SynInfo.InferSynArgInfoFromSimplePats >> List.map (SynInfo.AttribsOfArgData >> TcAttrs AttributeTargets.Parameter false)) - - // Assert the return type of an active pattern. A [] attribute may be used on a partial active pattern. - let isStructRetTy = HasFSharpAttribute cenv.g cenv.g.attrib_StructAttribute retAttribs + spatsL |> List.map (SynInfo.InferSynArgInfoFromSimplePats >> List.map (SynInfo.AttribsOfArgData >> TcAttrs AttributeTargets.Parameter)) + let retAttribs = + match rtyOpt with + | Some (SynBindingReturnInfo(_, _, Attributes retAttrs)) -> TcAttrs AttributeTargets.ReturnValue retAttrs + | None -> [] let argAndRetAttribs = ArgAndRetAttribs(argAttribs, retAttribs) - if HasFSharpAttribute cenv.g cenv.g.attrib_DefaultValueAttribute valAttribs then + if HasFSharpAttribute cenv.g cenv.g.attrib_DefaultValueAttribute valAttribs then errorR(Error(FSComp.SR.tcDefaultValueAttributeRequiresVal(), mBinding)) - + let isThreadStatic = isThreadOrContextStatic cenv.g valAttribs if isThreadStatic then errorR(DeprecatedThreadStaticBindingWarning mBinding) - if isVolatile then + if isVolatile then match declKind with | ClassLetBinding(_) -> () | _ -> errorR(Error(FSComp.SR.tcVolatileOnlyOnClassLetBindings(), mBinding)) - if (not isMutable || isThreadStatic) then + if (not isMutable || isThreadStatic) then errorR(Error(FSComp.SR.tcVolatileFieldsMustBeMutable(), mBinding)) if isFixed && (declKind <> ExpressionBinding || isInline || isMutable) then errorR(Error(FSComp.SR.tcFixedNotAllowed(), mBinding)) if (not declKind.CanBeDllImport || (match memberFlagsOpt with Some memberFlags -> memberFlags.IsInstance | _ -> false)) && - HasFSharpAttributeOpt cenv.g cenv.g.attrib_DllImportAttribute valAttribs - then + HasFSharpAttributeOpt cenv.g cenv.g.attrib_DllImportAttribute valAttribs + then errorR(Error(FSComp.SR.tcDllImportNotAllowed(), mBinding)) - - if Option.isNone memberFlagsOpt && HasFSharpAttribute cenv.g cenv.g.attrib_ConditionalAttribute valAttribs then + + if Option.isNone memberFlagsOpt && HasFSharpAttribute cenv.g cenv.g.attrib_ConditionalAttribute valAttribs then errorR(Error(FSComp.SR.tcConditionalAttributeRequiresMembers(), mBinding)) - if HasFSharpAttribute cenv.g cenv.g.attrib_EntryPointAttribute valAttribs then - if Option.isSome memberFlagsOpt then + if HasFSharpAttribute cenv.g cenv.g.attrib_EntryPointAttribute valAttribs then + if Option.isSome memberFlagsOpt then errorR(Error(FSComp.SR.tcEntryPointAttributeRequiresFunctionInModule(), mBinding)) - else + else UnifyTypes cenv env mBinding overallPatTy (mkArrayType cenv.g cenv.g.string_ty --> cenv.g.int_ty) if isMutable && isInline then errorR(Error(FSComp.SR.tcMutableValuesCannotBeInline(), mBinding)) @@ -9397,65 +9347,64 @@ and TcNormalizedBinding declKind (cenv: cenv) env tpenv overallTy safeThisValOpt if isMutable && not (isNil spatsL) then errorR(Error(FSComp.SR.tcMutableValuesSyntax(), mBinding)) - let isInline = - if isInline && isNil spatsL && isNil declaredTypars then + let isInline = + if isInline && isNil spatsL && isNil declaredTypars then errorR(Error(FSComp.SR.tcOnlyFunctionsCanBeInline(), mBinding)) false - else - isInline + else + isInline let compgen = false - - // Use the syntactic arity if we're defining a function - let (SynValData(_, valSynInfo, _)) = valSynData + + // Use the syntactic arity if we're defining a function let partialValReprInfo = TranslateTopValSynInfo mBinding (TcAttributes cenv env) valSynInfo - // Check the pattern of the l.h.s. of the binding - let tcPatPhase2, (tpenv, nameToPrelimValSchemeMap, _) = + // Check the pattern of the l.h.s. of the binding + let tcPatPhase2, (tpenv, nameToPrelimValSchemeMap, _) = TcPat AllIdsOK cenv envinner (Some partialValReprInfo) (inlineFlag, explicitTyparInfo, argAndRetAttribs, isMutable, vis, compgen) (tpenv, NameMap.empty, Set.empty) overallPatTy pat - // Add active pattern result names to the environment - let apinfoOpt = - match NameMap.range nameToPrelimValSchemeMap with - | [PrelimValScheme1(id, _, ty, _, _, _, _, _, _, _, _) ] -> - match ActivePatternInfoOfValName id.idText id.idRange with + // Add active pattern result names to the environment + let apinfoOpt = + match NameMap.range nameToPrelimValSchemeMap with + | [PrelimValScheme1(id, _, ty, _, _, _, _, _, _, _, _) ] -> + match ActivePatternInfoOfValName id.idText id.idRange with | Some apinfo -> Some (apinfo, ty, id.idRange) | None -> None | _ -> None - // Add active pattern result names to the environment - let envinner = - match apinfoOpt with - | Some (apinfo, apOverallTy, m) -> - if Option.isSome memberFlagsOpt || (not apinfo.IsTotal && apinfo.ActiveTags.Length > 1) then + // Add active pattern result names to the environment + let envinner = + match apinfoOpt with + | Some (apinfo, ty, m) -> + if Option.isSome memberFlagsOpt || (not apinfo.IsTotal && apinfo.ActiveTags.Length > 1) then error(Error(FSComp.SR.tcInvalidActivePatternName(), mBinding)) apinfo.ActiveTagsWithRanges |> List.iteri (fun i (_tag, tagRange) -> - let item = Item.ActivePatternResult(apinfo, apOverallTy, i, tagRange) + let item = Item.ActivePatternResult(apinfo, cenv.g.unit_ty, i, tagRange) CallNameResolutionSink cenv.tcSink (tagRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.Binding, env.AccessRights)) - { envinner with eNameResEnv = AddActivePatternResultTagsToNameEnv apinfo envinner.eNameResEnv apOverallTy m } - | None -> + { envinner with eNameResEnv = AddActivePatternResultTagsToNameEnv apinfo envinner.eNameResEnv ty m } + | None -> envinner - - // Now tc the r.h.s. - // If binding a ctor then set the ugly counter that permits us to write ctor expressions on the r.h.s. - let isCtor = (match memberFlagsOpt with Some memberFlags -> memberFlags.MemberKind = SynMemberKind.Constructor | _ -> false) + + // Now tc the r.h.s. + // If binding a ctor then set the ugly counter that permits us to write ctor expressions on the r.h.s. + let isCtor = (match memberFlagsOpt with Some memberFlags -> memberFlags.MemberKind = MemberKind.Constructor | _ -> false) // At each module binding, dive into the expression to check for syntax errors and suppress them if they show. // Don't do this for lambdas, because we always check for suppression for all lambda bodies in TcIteratedLambdas - let rhsExprChecked, tpenv = - let atTopNonLambdaDefn = - DeclKind.IsModuleOrMemberOrExtensionBinding declKind && - (match rhsExpr with SynExpr.Lambda _ -> false | _ -> true) && + let rhsExprChecked, tpenv = + let atTopNonLambdaDefn = + DeclKind.IsModuleOrMemberOrExtensionBinding declKind && + (match rhsExpr with SynExpr.Lambda _ -> false | _ -> true) && synExprContainsError rhsExpr - conditionallySuppressErrorReporting atTopNonLambdaDefn (fun () -> + conditionallySuppressErrorReporting atTopNonLambdaDefn (fun () -> if isCtor then TcExprThatIsCtorBody (safeThisValOpt, safeInitInfo) cenv overallExprTy envinner tpenv rhsExpr else TcExprThatCantBeCtorBody cenv overallExprTy envinner tpenv rhsExpr) - if bkind = SynBindingKind.StandaloneExpression && not cenv.isScript then + if bkind = StandaloneExpression && not cenv.isScript then UnifyUnitType cenv env mBinding overallPatTy rhsExprChecked |> ignore // Fix up the r.h.s. expression for 'fixed' @@ -9463,58 +9412,54 @@ and TcNormalizedBinding declKind (cenv: cenv) env tpenv overallTy safeThisValOpt if isFixed then TcAndBuildFixedExpr cenv env (overallPatTy, rhsExprChecked, overallExprTy, mBinding) else rhsExprChecked - match apinfoOpt with - | Some (apinfo, apOverallTy, _) -> + // Assert the return type of an active pattern + match apinfoOpt with + | Some (apinfo, ty, _) -> let activePatResTys = NewInferenceTypes apinfo.ActiveTags - let _, apReturnTy = stripFunTy cenv.g apOverallTy - if isStructRetTy && apinfo.IsTotal then - errorR(Error(FSComp.SR.tcInvalidStructReturn(), mBinding)) - if isStructRetTy then - checkLanguageFeatureError cenv.g.langVersion LanguageFeature.StructActivePattern mBinding - UnifyTypes cenv env mBinding (apinfo.ResultType cenv.g rhsExpr.Range activePatResTys isStructRetTy) apReturnTy - | None -> - if isStructRetTy then - errorR(Error(FSComp.SR.tcInvalidStructReturn(), mBinding)) + let _, rty = stripFunTy cenv.g ty + UnifyTypes cenv env mBinding (apinfo.ResultType cenv.g rhsExpr.Range activePatResTys) rty + | None -> + () // Check other attributes let hasLiteralAttr, literalValue = TcLiteral cenv overallExprTy env tpenv (valAttribs, rhsExpr) if hasLiteralAttr then - if isThreadStatic then + if isThreadStatic then errorR(Error(FSComp.SR.tcIllegalAttributesForLiteral(), mBinding)) - if isMutable then + if isMutable then errorR(Error(FSComp.SR.tcLiteralCannotBeMutable(), mBinding)) - if isInline then + if isInline then errorR(Error(FSComp.SR.tcLiteralCannotBeInline(), mBinding)) - if not (isNil declaredTypars) then + if not (isNil declaredTypars) then errorR(Error(FSComp.SR.tcLiteralCannotHaveGenericParameters(), mBinding)) CheckedBindingInfo(inlineFlag, valAttribs, doc, tcPatPhase2, explicitTyparInfo, nameToPrelimValSchemeMap, rhsExprChecked, argAndRetAttribs, overallPatTy, mBinding, spBind, compgen, literalValue, isFixed), tpenv -and TcLiteral cenv overallTy env tpenv (attrs, synLiteralValExpr) = +and TcLiteral cenv overallTy env tpenv (attrs, synLiteralValExpr) = let hasLiteralAttr = HasFSharpAttribute cenv.g cenv.g.attrib_LiteralAttribute attrs - if hasLiteralAttr then + if hasLiteralAttr then let literalValExpr, _ = TcExpr cenv overallTy env tpenv synLiteralValExpr - match EvalLiteralExprOrAttribArg cenv.g literalValExpr with - | Expr.Const (c, _, ty) -> + match EvalLiteralExprOrAttribArg cenv.g literalValExpr with + | Expr.Const (c, _, ty) -> if c = Const.Zero && isStructTy cenv.g ty then warning(Error(FSComp.SR.tcIllegalStructTypeForConstantExpression(), synLiteralValExpr.Range)) false, None else true, Some c - | _ -> + | _ -> errorR(Error(FSComp.SR.tcInvalidConstantExpression(), synLiteralValExpr.Range)) true, Some Const.Unit - - else hasLiteralAttr, None - -and TcBindingTyparDecls alwaysRigid cenv env tpenv (ValTyparDecls(synTypars, synTyparConstraints, infer)) = + + else hasLiteralAttr, None + +and TcBindingTyparDecls alwaysRigid cenv env tpenv (SynValTyparDecls(synTypars, infer, synTyparConstraints)) = let declaredTypars = TcTyparDecls cenv env synTypars let envinner = AddDeclaredTypars CheckForDuplicateTypars declaredTypars env let tpenv = TcTyparConstraints cenv NoNewTypars CheckCxs ItemOccurence.UseInType envinner tpenv synTyparConstraints - let rigidCopyOfDeclaredTypars = - if alwaysRigid then + let rigidCopyOfDeclaredTypars = + if alwaysRigid then declaredTypars |> List.iter (fun tp -> SetTyparRigid env.DisplayEnv tp.Range tp) declaredTypars else @@ -9524,24 +9469,23 @@ and TcBindingTyparDecls alwaysRigid cenv env tpenv (ValTyparDecls(synTypars, syn // The type parameters using during inference will be marked rigid after inference declaredTypars |> List.iter (fun tp -> tp.SetRigidity TyparRigidity.WillBeRigid) rigidCopyOfDeclaredTypars - + ExplicitTyparInfo(rigidCopyOfDeclaredTypars, declaredTypars, infer), tpenv -and TcNonrecBindingTyparDecls cenv env tpenv bind = +and TcNonrecBindingTyparDecls cenv env tpenv bind = let (NormalizedBinding(_, _, _, _, _, _, synTyparDecls, _, _, _, _, _)) = bind TcBindingTyparDecls true cenv env tpenv synTyparDecls and TcNonRecursiveBinding declKind cenv env tpenv ty b = let b = BindingNormalization.NormalizeBinding ValOrMemberBinding cenv env b let explicitTyparInfo, tpenv = TcNonrecBindingTyparDecls cenv env tpenv b - TcNormalizedBinding declKind cenv env tpenv ty None NoSafeInitInfo ([], explicitTyparInfo) b + TcNormalizedBinding declKind cenv env tpenv ty None NoSafeInitInfo ([], explicitTyparInfo) b //------------------------------------------------------------------------- // TcAttribute* -// *Ex means the function accepts attribute targets that must be explicit //------------------------------------------------------------------------ -and TcAttributeEx canFail cenv (env: TcEnv) attrTgt attrEx (synAttr: SynAttribute) = +and TcAttribute canFail cenv (env: TcEnv) attrTgt (synAttr: SynAttribute) = let (LongIdentWithDots(tycon, _)) = synAttr.TypeName let arg = synAttr.ArgExpr let targetIndicator = synAttr.Target @@ -9553,8 +9497,8 @@ and TcAttributeEx canFail cenv (env: TcEnv) attrTgt attrEx (synAttr: SynAttribut // if we're checking an attribute that was applied directly to a getter or a setter, then // what we're really checking against is a method, not a property let attrTgt = if isAppliedToGetterOrSetter then ((attrTgt ^^^ AttributeTargets.Property) ||| AttributeTargets.Method) else attrTgt - let ty, tpenv = - let try1 n = + let ty, tpenv = + let try1 n = let tyid = mkSynId tyid.idRange n let tycon = (typath @ [tyid]) let ad = env.eAccessRights @@ -9569,30 +9513,30 @@ and TcAttributeEx canFail cenv (env: TcEnv) attrTgt attrEx (synAttr: SynAttribut let tcref = tcrefOfAppTy cenv.g ty - let conditionalCallDefineOpt = TryFindTyconRefStringAttribute cenv.g mAttr cenv.g.attrib_ConditionalAttribute tcref + let conditionalCallDefineOpt = TryFindTyconRefStringAttribute cenv.g mAttr cenv.g.attrib_ConditionalAttribute tcref - match conditionalCallDefineOpt, cenv.conditionalDefines with - | Some d, Some defines when not (List.contains d defines) -> + match conditionalCallDefineOpt, cenv.conditionalDefines with + | Some d, Some defines when not (List.contains d defines) -> [], false | _ -> - // REVIEW: take notice of inherited? - let validOn, _inherited = + // REVIEW: take notice of inherited? + let validOn, _inherited = let validOnDefault = 0x7fff let inheritedDefault = true - if tcref.IsILTycon then + if tcref.IsILTycon then let tdef = tcref.ILTyconRawMetadata let tref = cenv.g.attrib_AttributeUsageAttribute.TypeRef - - match TryDecodeILAttribute tref tdef.CustomAttrs with - | Some ([ILAttribElem.Int32 validOn ], named) -> - let inherited = - match List.tryPick (function ("Inherited", _, _, ILAttribElem.Bool res) -> Some res | _ -> None) named with + + match TryDecodeILAttribute cenv.g tref tdef.CustomAttrs with + | Some ([ILAttribElem.Int32 validOn ], named) -> + let inherited = + match List.tryPick (function ("Inherited", _, _, ILAttribElem.Bool res) -> Some res | _ -> None) named with | None -> inheritedDefault | Some x -> x (validOn, inherited) - | Some ([ILAttribElem.Int32 validOn; ILAttribElem.Bool _allowMultiple; ILAttribElem.Bool inherited ], _) -> + | Some ([ILAttribElem.Int32 validOn; ILAttribElem.Bool _allowMultiple; ILAttribElem.Bool inherited ], _) -> (validOn, inherited) - | _ -> + | _ -> (validOnDefault, inheritedDefault) else match (TryFindFSharpAttribute cenv.g cenv.g.attrib_AttributeUsageAttribute tcref.Attribs) with @@ -9604,11 +9548,11 @@ and TcAttributeEx canFail cenv (env: TcEnv) attrTgt attrEx (synAttr: SynAttribut (validOn, inherited) | Some _ -> warning(Error(FSComp.SR.tcUnexpectedConditionInImportedAssembly(), mAttr)) - (validOnDefault, inheritedDefault) - | _ -> + (validOnDefault, inheritedDefault) + | _ -> (validOnDefault, inheritedDefault) let possibleTgts = enum validOn &&& attrTgt - let directedTgts = + let directedTgts = match targetIndicator with | Some id when id.idText = "assembly" -> AttributeTargets.Assembly | Some id when id.idText = "module" -> AttributeTargets.Module @@ -9620,59 +9564,58 @@ and TcAttributeEx canFail cenv (env: TcEnv) attrTgt attrEx (synAttr: SynAttribut | Some id when id.idText = "type" -> AttributeTargets.TyconDecl | Some id when id.idText = "constructor" -> AttributeTargets.Constructor | Some id when id.idText = "event" -> AttributeTargets.Event - | Some id -> - errorR(Error(FSComp.SR.tcUnrecognizedAttributeTarget(), id.idRange)) + | Some id -> + errorR(Error(FSComp.SR.tcUnrecognizedAttributeTarget(), id.idRange)) possibleTgts - // mask explicit targets - | _ -> possibleTgts &&& ~~~ attrEx + | _ -> possibleTgts let constrainedTgts = possibleTgts &&& directedTgts - if constrainedTgts = enum 0 then - if (directedTgts = AttributeTargets.Assembly || directedTgts = AttributeTargets.Module) then + if constrainedTgts = enum 0 then + if (directedTgts = AttributeTargets.Assembly || directedTgts = AttributeTargets.Module) then error(Error(FSComp.SR.tcAttributeIsNotValidForLanguageElementUseDo(), mAttr)) else error(Error(FSComp.SR.tcAttributeIsNotValidForLanguageElement(), mAttr)) - match ResolveObjectConstructor cenv.nameResolver env.DisplayEnv mAttr ad ty with + match ResolveObjectConstructor cenv.nameResolver env.DisplayEnv mAttr ad ty with | Exception _ when canFail -> [ ], true - | res -> + | res -> let item = ForceRaise res if not (ExistsHeadTypeInEntireHierarchy cenv.g cenv.amap mAttr ty cenv.g.tcref_System_Attribute) then warning(Error(FSComp.SR.tcTypeDoesNotInheritAttribute(), mAttr)) - let attrib = - match item with + let attrib = + match item with | Item.CtorGroup(methodName, minfos) -> - let meths = minfos |> List.map (fun minfo -> minfo, None) + let meths = minfos |> List.map (fun minfo -> minfo, None) let afterResolution = ForNewConstructors cenv.tcSink env tyid.idRange methodName minfos - let (expr, attributeAssignedNamedItems, _), _ = + let (expr, attributeAssignedNamedItems, _), _ = TcMethodApplication true cenv env tpenv None [] mAttr mAttr methodName None ad PossiblyMutates false meths afterResolution NormalValUse [arg] (NewInferenceType ()) [] UnifyTypes cenv env mAttr ty (tyOfExpr cenv.g expr) - - let mkAttribExpr e = + + let mkAttribExpr e = AttribExpr(e, EvalLiteralExprOrAttribArg cenv.g e) - let namedAttribArgMap = + let namedAttribArgMap = attributeAssignedNamedItems |> List.map (fun (CallerNamedArg(id, CallerArg(argtyv, m, isOpt, callerArgExpr))) -> if isOpt then error(Error(FSComp.SR.tcOptionalArgumentsCannotBeUsedInCustomAttribute(), m)) let m = callerArgExpr.Range let setterItem, _ = ResolveLongIdentInType cenv.tcSink cenv.nameResolver env.NameEnv LookupKind.Expr m ad id IgnoreOverrides TypeNameResolutionInfo.Default ty - let nm, isProp, argty = - match setterItem with - | Item.Property (_, [pinfo]) -> - if not pinfo.HasSetter then + let nm, isProp, argty = + match setterItem with + | Item.Property (_, [pinfo]) -> + if not pinfo.HasSetter then errorR(Error(FSComp.SR.tcPropertyCannotBeSet0(), m)) id.idText, true, pinfo.GetPropertyType(cenv.amap, m) - | Item.ILField finfo -> + | Item.ILField finfo -> CheckILFieldInfoAccessible cenv.g cenv.amap m ad finfo CheckILFieldAttributes cenv.g finfo m id.idText, false, finfo.FieldType(cenv.amap, m) - | Item.RecdField rfinfo when not rfinfo.IsStatic -> - CheckRecdFieldInfoAttributes cenv.g rfinfo m |> CommitOperationResult + | Item.RecdField rfinfo when not rfinfo.IsStatic -> + CheckRecdFieldInfoAttributes cenv.g rfinfo m |> CommitOperationResult CheckRecdFieldInfoAccessible cenv.amap m ad rfinfo - // This uses the F# backend name mangling of fields.... + // This uses the F# backend name mangling of fields.... let nm = ComputeFieldName rfinfo.Tycon rfinfo.RecdField nm, false, rfinfo.FieldType - | _ -> - errorR(Error(FSComp.SR.tcPropertyOrFieldNotFoundInAttribute(), m)) + | _ -> + errorR(Error(FSComp.SR.tcPropertyOrFieldNotFoundInAttribute(), m)) id.idText, false, cenv.g.unit_ty let propNameItem = Item.SetterArg(id, setterItem) CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, propNameItem, emptyTyparInst, ItemOccurence.Use, ad) @@ -9681,63 +9624,54 @@ and TcAttributeEx canFail cenv (env: TcEnv) attrTgt attrEx (synAttr: SynAttribut AttribNamedArg(nm, argty, isProp, mkAttribExpr callerArgExpr)) - match expr with - | Expr.Op (TOp.ILCall (_, _, isStruct, _, _, _, _, ilMethRef, [], [], _), [], args, m) -> + match expr with + | Expr.Op (TOp.ILCall (_, _, isStruct, _, _, _, _, ilMethRef, [], [], _), [], args, m) -> if isStruct then error (Error(FSComp.SR.tcCustomAttributeMustBeReferenceType(), m)) if args.Length <> ilMethRef.ArgTypes.Length then error (Error(FSComp.SR.tcCustomAttributeArgumentMismatch(), m)) let args = args |> List.map mkAttribExpr Attrib(tcref, ILAttrib ilMethRef, args, namedAttribArgMap, isAppliedToGetterOrSetter, Some constrainedTgts, m) - | Expr.App ((InnerExprPat(ExprValWithPossibleTypeInst(vref, _, _, _))), _, _, args, _) -> + | Expr.App ((InnerExprPat(ExprValWithPossibleTypeInst(vref, _, _, _))), _, _, args, _) -> 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) - | _ -> + | _ -> error (Error(FSComp.SR.tcCustomAttributeMustInvokeConstructor(), mAttr)) - | _ -> + | _ -> error(Error(FSComp.SR.tcAttributeExpressionsMustBeConstructorCalls(), mAttr)) [ (constrainedTgts, attrib) ], false -and TcAttributesWithPossibleTargetsEx canFail cenv env attrTgt attrEx synAttribs = +and TcAttributesWithPossibleTargets canFail cenv env attrTgt synAttribs = - (false, synAttribs) ||> List.collectFold (fun didFail synAttrib -> - try - let attribsAndTargets, didFail2 = TcAttributeEx canFail cenv env attrTgt attrEx synAttrib - - // This is where we place any checks that completely exclude the use of some particular + (false, synAttribs) ||> List.collectFold (fun didFail synAttrib -> + try + let attribsAndTargets, didFail2 = TcAttribute canFail cenv env attrTgt synAttrib + + // This is where we place any checks that completely exclude the use of some particular // attributes from F#. let attribs = List.map snd attribsAndTargets if HasFSharpAttribute cenv.g cenv.g.attrib_TypeForwardedToAttribute attribs || HasFSharpAttribute cenv.g cenv.g.attrib_CompilationArgumentCountsAttribute attribs || - HasFSharpAttribute cenv.g cenv.g.attrib_CompilationMappingAttribute attribs then + HasFSharpAttribute cenv.g cenv.g.attrib_CompilationMappingAttribute attribs then errorR(Error(FSComp.SR.tcUnsupportedAttribute(), synAttrib.Range)) attribsAndTargets, didFail || didFail2 - with e -> - errorRecovery e synAttrib.Range - [], false) + with e -> + errorRecovery e synAttrib.Range + [], false) -and TcAttributesMaybeFailEx canFail cenv env attrTgt attrEx synAttribs = - let attribsAndTargets, didFail = TcAttributesWithPossibleTargetsEx canFail cenv env attrTgt attrEx synAttribs +and TcAttributesMaybeFail canFail cenv env attrTgt synAttribs = + let attribsAndTargets, didFail = TcAttributesWithPossibleTargets canFail cenv env attrTgt synAttribs attribsAndTargets |> List.map snd, didFail -and TcAttributesWithPossibleTargets canFail cenv env attrTgt synAttribs = - TcAttributesWithPossibleTargetsEx canFail cenv env attrTgt (enum 0) synAttribs - -and TcAttribute canFail cenv (env: TcEnv) attrTgt (synAttr: SynAttribute) = - TcAttributeEx canFail cenv env attrTgt (enum 0) synAttr - -and TcAttributesMaybeFail canFail cenv env attrTgt synAttribs = - TcAttributesMaybeFailEx canFail cenv env attrTgt (enum 0) synAttribs - -and TcAttributesCanFail cenv env attrTgt synAttribs = +and TcAttributesCanFail cenv env attrTgt synAttribs = let attrs, didFail = TcAttributesMaybeFail true cenv env attrTgt synAttribs attrs, (fun () -> if didFail then TcAttributes cenv env attrTgt synAttribs else attrs) -and TcAttributes cenv env attrTgt synAttribs = +and TcAttributes cenv env attrTgt synAttribs = TcAttributesMaybeFail false cenv env attrTgt synAttribs |> fst //------------------------------------------------------------------------- @@ -9749,11 +9683,11 @@ and TcLetBinding cenv isUse env containerInfo declKind tpenv (synBinds, synBinds // Typecheck all the bindings... let checkedBinds, tpenv = List.mapFold (fun tpenv b -> TcNonRecursiveBinding declKind cenv env tpenv (NewInferenceType ()) b) tpenv synBinds let (ContainerInfo(altActualParent, _)) = containerInfo - - // Canonicalize constraints prior to generalization + + // Canonicalize constraints prior to generalization let denv = env.DisplayEnv ConstraintSolver.CanonicalizePartialInferenceProblem cenv.css denv synBindsRange - (checkedBinds |> List.collect (fun tbinfo -> + (checkedBinds |> List.collect (fun tbinfo -> let (CheckedBindingInfo(_, _, _, _, explicitTyparInfo, _, _, _, tauTy, _, _, _, _, _)) = tbinfo let (ExplicitTyparInfo(_, declaredTypars, _)) = explicitTyparInfo let maxInferredTypars = (freeInTypeLeftToRight cenv.g false tauTy) @@ -9762,20 +9696,20 @@ and TcLetBinding cenv isUse env containerInfo declKind tpenv (synBinds, synBinds let lazyFreeInEnv = lazy (GeneralizationHelpers.ComputeUngeneralizableTypars env) // Generalize the bindings... - (((fun x -> x), env, tpenv), checkedBinds) ||> List.fold (fun (buildExpr, env, tpenv) tbinfo -> + (((fun x -> x), env, tpenv), checkedBinds) ||> List.fold (fun (buildExpr, env, tpenv) tbinfo -> let (CheckedBindingInfo(inlineFlag, attrs, doc, tcPatPhase2, explicitTyparInfo, nameToPrelimValSchemeMap, rhsExpr, _, tauTy, m, spBind, _, literalValue, isFixed)) = tbinfo let enclosingDeclaredTypars = [] let (ExplicitTyparInfo(_, declaredTypars, canInferTypars)) = explicitTyparInfo let allDeclaredTypars = enclosingDeclaredTypars @ declaredTypars - let generalizedTypars, prelimValSchemes2 = + let generalizedTypars, prelimValSchemes2 = let canInferTypars = GeneralizationHelpers. ComputeCanInferExtraGeneralizableTypars (containerInfo.ParentRef, canInferTypars, None) let maxInferredTypars = freeInTypeLeftToRight cenv.g false tauTy - let generalizedTypars = - if isNil maxInferredTypars && isNil allDeclaredTypars then - [] - else + let generalizedTypars = + if isNil maxInferredTypars && isNil allDeclaredTypars then + [] + else let freeInEnv = lazyFreeInEnv.Force() let canConstrain = GeneralizationHelpers.CanGeneralizeConstrainedTyparsForDecl declKind GeneralizationHelpers.ComputeAndGeneralizeGenericTypars @@ -9785,64 +9719,54 @@ and TcLetBinding cenv isUse env containerInfo declKind tpenv (synBinds, synBinds generalizedTypars, prelimValSchemes2 - // REVIEW: this scopes generalized type variables. Ensure this is handled properly - // on all other paths. + // REVIEW: this scopes generalized type variables. Ensure this is handled properly + // on all other paths. let tpenv = HideUnscopedTypars generalizedTypars tpenv let valSchemes = NameMap.map (UseCombinedArity cenv.g declKind rhsExpr) prelimValSchemes2 let values = MakeAndPublishVals cenv env (altActualParent, false, declKind, ValNotInRecScope, valSchemes, attrs, doc, literalValue) let checkedPat = tcPatPhase2 (TcPatPhase2Input (values, true)) let prelimRecValues = NameMap.map fst values - - // Now bind the r.h.s. to the l.h.s. + + // Now bind the r.h.s. to the l.h.s. let rhsExpr = mkTypeLambda m generalizedTypars (rhsExpr, tauTy) - match checkedPat with - // Don't introduce temporary or 'let' for 'match against wild' or 'match against unit' + match checkedPat with + // Don't introduce temporary or 'let' for 'match against wild' or 'match against unit' | (TPat_wild _ | TPat_const (Const.Unit, _)) when not isUse && not isFixed && isNil generalizedTypars -> let mkSequentialBind (tm, tmty) = (mkSequential DebugPointAtSequential.Both m rhsExpr tm, tmty) (buildExpr >> mkSequentialBind, env, tpenv) - | _ -> - - // nice: don't introduce awful temporary for r.h.s. in the 99% case where we know what we're binding it to - let patternInputTmp, checkedPat2 = - match checkedPat with - // nice: don't introduce awful temporary for r.h.s. in the 99% case where we know what we're binding it to - | TPat_as (pat, PBind(v, TypeScheme(generalizedTypars', _)), _) - when List.lengthsEqAndForall2 typarRefEq generalizedTypars generalizedTypars' -> - + | _ -> + + // nice: don't introduce awful temporary for r.h.s. in the 99% case where we know what we're binding it to + let patternInputTmp, checkedPat2 = + match checkedPat with + // nice: don't introduce awful temporary for r.h.s. in the 99% case where we know what we're binding it to + | TPat_as (pat, PBind(v, TypeScheme(generalizedTypars', _)), _) + when List.lengthsEqAndForall2 typarRefEq generalizedTypars generalizedTypars' -> + v, pat //Op (LValueOp (LByrefGet,x),[],[],C:\GitHub\dsyme\visualfsharp\a.fs (15,42--15,43) IsSynthetic=false) - | _ when inlineFlag.MustInline -> + | _ when inlineFlag.MustInline -> error(Error(FSComp.SR.tcInvalidInlineSpecification(), m)) - | TPat_query _ when HasFSharpAttribute cenv.g cenv.g.attrib_LiteralAttribute attrs -> - error(Error(FSComp.SR.tcLiteralAttributeCannotUseActivePattern(), m)) - - | _ -> + | _ -> let tmp, _ = mkCompGenLocal m "patternInput" (generalizedTypars +-> tauTy) - if isUse then - let isDiscarded = match checkedPat with TPat_wild _ -> true | _ -> false - if not isDiscarded then - errorR(Error(FSComp.SR.tcInvalidUseBinding(), m)) - else - ErrorLogger.checkLanguageFeatureError cenv.g.langVersion Features.LanguageFeature.UseBindingValueDiscard checkedPat.Range - - elif isFixed then + if isUse || isFixed then errorR(Error(FSComp.SR.tcInvalidUseBinding(), m)) - - // If the overall declaration is declaring statics or a module value, then force the patternInputTmp to also + + // If the overall declaration is declaring statics or a module value, then force the patternInputTmp to also // have representation as module value. - if (DeclKind.MustHaveArity declKind) then + if (DeclKind.MustHaveArity declKind) then AdjustValToTopVal tmp altActualParent (InferArityOfExprBinding cenv.g AllowTypeDirectedDetupling.Yes tmp rhsExpr) tmp, checkedPat // Add the bind "let patternInputTmp = rhsExpr" to the bodyExpr we get from mkPatBind - let mkRhsBind (bodyExpr, bodyExprTy) = + let mkRhsBind (bodyExpr, bodyExprTy) = let letExpr = mkLet spBind m patternInputTmp rhsExpr bodyExpr letExpr, bodyExprTy @@ -9856,19 +9780,17 @@ and TcLetBinding cenv isUse env containerInfo declKind tpenv (synBinds, synBinds let matchx = if (DeclKind.ConvertToLinearBindings declKind) then LinearizeTopMatch cenv.g altActualParent matchx else matchx matchx, bodyExprTy - // Add the dispose of any "use x = ..." to bodyExpr + // Add the dispose of any "use x = ..." to bodyExpr let mkCleanup (bodyExpr, bodyExprTy) = - if isUse && not isFixed then - let isDiscarded = match checkedPat2 with TPat_wild _ -> true | _ -> false - let allValsDefinedByPattern = if isDiscarded then [patternInputTmp] else allValsDefinedByPattern + if isUse && not isFixed then (allValsDefinedByPattern, (bodyExpr, bodyExprTy)) ||> List.foldBack (fun v (bodyExpr, bodyExprTy) -> AddCxTypeMustSubsumeType ContextInfo.NoContext denv cenv.css v.Range NoTrace cenv.g.system_IDisposable_ty v.Type let cleanupE = BuildDisposableCleanup cenv env m v mkTryFinally cenv.g (bodyExpr, cleanupE, m, bodyExprTy, DebugPointAtTry.Body, DebugPointAtFinally.No), bodyExprTy) - else + else (bodyExpr, bodyExprTy) - let envInner = AddLocalValMap cenv.g cenv.tcSink scopem prelimRecValues env + let envInner = AddLocalValMap cenv.tcSink scopem prelimRecValues env ((buildExpr >> mkCleanup >> mkPatBind >> mkRhsBind), envInner, tpenv)) @@ -9893,112 +9815,112 @@ and TcLetBindings cenv env containerInfo declKind tpenv (binds, bindsm, scopem) let binds = stripLets [] expr binds, env, tpenv -and CheckMemberFlags optIntfSlotTy newslotsOK overridesOK memberFlags m = - if newslotsOK = NoNewSlots && memberFlags.IsDispatchSlot then +and CheckMemberFlags optIntfSlotTy newslotsOK overridesOK memberFlags m = + if newslotsOK = NoNewSlots && memberFlags.IsDispatchSlot then errorR(Error(FSComp.SR.tcAbstractMembersIllegalInAugmentation(), m)) - if overridesOK = ErrorOnOverrides && memberFlags.MemberKind = SynMemberKind.Constructor then + if overridesOK = ErrorOnOverrides && memberFlags.MemberKind = MemberKind.Constructor then errorR(Error(FSComp.SR.tcConstructorsIllegalInAugmentation(), m)) - if overridesOK = WarnOnOverrides && memberFlags.IsOverrideOrExplicitImpl && Option.isNone optIntfSlotTy then + if overridesOK = WarnOnOverrides && memberFlags.IsOverrideOrExplicitImpl && Option.isNone optIntfSlotTy then warning(OverrideInIntrinsicAugmentation m) - if overridesOK = ErrorOnOverrides && memberFlags.IsOverrideOrExplicitImpl then + if overridesOK = ErrorOnOverrides && memberFlags.IsOverrideOrExplicitImpl then error(Error(FSComp.SR.tcMethodOverridesIllegalHere(), m)) - -/// Apply the pre-assumed knowledge available to type inference prior to looking at -/// the _body_ of the binding. For example, in a letrec we may assume this knowledge -/// for each binding in the letrec prior to any type inference. This might, for example, -/// tell us the type of the arguments to a recursive function. -and ApplyTypesFromArgumentPatterns (cenv, env, optArgsOK, ty, m, tpenv, NormalizedBindingRhs (pushedPats, retInfoOpt, e), memberFlagsOpt: SynMemberFlags option) = + +/// Apply the pre-assumed knowledge available to type inference prior to looking at +/// the _body_ of the binding. For example, in a letrec we may assume this knowledge +/// for each binding in the letrec prior to any type inference. This might, for example, +/// tell us the type of the arguments to a recursive function. +and ApplyTypesFromArgumentPatterns (cenv, env, optArgsOK, ty, m, tpenv, NormalizedBindingRhs (pushedPats, retInfoOpt, e), memberFlagsOpt: MemberFlags option) = match pushedPats with | [] -> - match retInfoOpt with + match retInfoOpt with | None -> () - | Some (SynBindingReturnInfo (retInfoTy, m, _)) -> + | Some (SynBindingReturnInfo (retInfoTy, m, _)) -> let retInfoTy, _ = TcTypeAndRecover cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv retInfoTy UnifyTypes cenv env m ty retInfoTy // Property setters always have "unit" return type - match memberFlagsOpt with - | Some memFlags when memFlags.MemberKind = SynMemberKind.PropertySet -> + match memberFlagsOpt with + | Some memFlags when memFlags.MemberKind = MemberKind.PropertySet -> UnifyTypes cenv env m ty cenv.g.unit_ty | _ -> () - - | pushedPat :: morePushedPats -> + + | pushedPat :: morePushedPats -> let domainTy, resultTy = UnifyFunctionType None cenv env.DisplayEnv m ty // We apply the type information from the patterns by type checking the - // "simple" patterns against 'domainTy'. They get re-typechecked later. + // "simple" patterns against 'domainTy'. They get re-typechecked later. ignore (TcSimplePats cenv optArgsOK CheckCxs domainTy env (tpenv, Map.empty, Set.empty) pushedPat) ApplyTypesFromArgumentPatterns (cenv, env, optArgsOK, resultTy, m, tpenv, NormalizedBindingRhs (morePushedPats, retInfoOpt, e), memberFlagsOpt) /// Check if the type annotations and inferred type information in a value give a /// full and complete generic type for a value. If so, enable generic recursion. -and ComputeIsComplete enclosingDeclaredTypars declaredTypars ty = - Zset.isEmpty (List.fold (fun acc v -> Zset.remove v acc) - (freeInType CollectAllNoCaching ty).FreeTypars - (enclosingDeclaredTypars@declaredTypars)) +and ComputeIsComplete enclosingDeclaredTypars declaredTypars ty = + Zset.isEmpty (List.fold (fun acc v -> Zset.remove v acc) + (freeInType CollectAllNoCaching ty).FreeTypars + (enclosingDeclaredTypars@declaredTypars)) -/// Determine if a uniquely-identified-abstract-slot exists for an override member (or interface member implementation) based on the information available -/// at the syntactic definition of the member (i.e. prior to type inference). If so, we know the expected signature of the override, and the full slotsig -/// it implements. Apply the inferred slotsig. -and ApplyAbstractSlotInference (cenv: cenv) (envinner: TcEnv) (bindingTy, m, synTyparDecls, declaredTypars, memberId, tcrefObjTy, renaming, _objTy, optIntfSlotTy, valSynData, memberFlags: SynMemberFlags, attribs) = +/// Determine if a uniquely-identified-abstract-slot exists for an override member (or interface member implementation) based on the information available +/// at the syntactic definition of the member (i.e. prior to type inference). If so, we know the expected signature of the override, and the full slotsig +/// it implements. Apply the inferred slotsig. +and ApplyAbstractSlotInference (cenv: cenv) (envinner: TcEnv) (bindingTy, m, synTyparDecls, declaredTypars, memberId, tcrefObjTy, renaming, _objTy, optIntfSlotTy, valSynData, memberFlags, attribs) = let ad = envinner.eAccessRights - let typToSearchForAbstractMembers = - match optIntfSlotTy with - | Some (ty, abstractSlots) -> - // The interface type is in terms of the type's type parameters. - // We need a signature in terms of the values' type parameters. - ty, Some abstractSlots - | None -> + let typToSearchForAbstractMembers = + match optIntfSlotTy with + | Some (ty, abstractSlots) -> + // The interface type is in terms of the type's type parameters. + // We need a signature in terms of the values' type parameters. + ty, Some abstractSlots + | None -> tcrefObjTy, None - // Determine if a uniquely-identified-override exists based on the information - // at the member signature. If so, we know the type of this member, and the full slotsig - // it implements. Apply the inferred slotsig. - if memberFlags.IsOverrideOrExplicitImpl then - + // Determine if a uniquely-identified-override exists based on the information + // at the member signature. If so, we know the type of this member, and the full slotsig + // it implements. Apply the inferred slotsig. + if memberFlags.IsOverrideOrExplicitImpl then + // for error detection, we want to compare finality when testing for equivalence - let methInfosEquivByNameAndSig meths = + let methInfosEquivByNameAndSig meths = match meths with | [] -> false | head :: tail -> tail |> List.forall (MethInfosEquivByNameAndSig EraseNone false cenv.g cenv.amap m head) - - match memberFlags.MemberKind with - | SynMemberKind.Member -> - let dispatchSlots, dispatchSlotsArityMatch = + + match memberFlags.MemberKind with + | MemberKind.Member -> + let dispatchSlots, dispatchSlotsArityMatch = GetAbstractMethInfosForSynMethodDecl(cenv.infoReader, ad, memberId, m, typToSearchForAbstractMembers, valSynData) - let uniqueAbstractMethSigs = - match dispatchSlots with - | [] -> + let uniqueAbstractMethSigs = + match dispatchSlots with + | [] -> errorR(Error(FSComp.SR.tcNoMemberFoundForOverride(), memberId.idRange)) [] - | slots -> - match dispatchSlotsArityMatch with + | slots -> + match dispatchSlotsArityMatch with | meths when methInfosEquivByNameAndSig meths -> meths - | [] -> + | [] -> let details = slots - |> Seq.map (NicePrint.stringOfMethInfo cenv.infoReader m envinner.DisplayEnv) + |> Seq.map (NicePrint.stringOfMethInfo cenv.amap m envinner.DisplayEnv) |> Seq.map (sprintf "%s %s" System.Environment.NewLine) |> String.concat "" errorR(Error(FSComp.SR.tcOverrideArityMismatch details, memberId.idRange)) [] | _ -> [] // check that method to override is sealed is located at CheckOverridesAreAllUsedOnce (typrelns.fs) - // We hit this case when it is ambiguous which abstract method is being implemented. - - + // We hit this case when it is ambiguous which abstract method is being implemented. - // If we determined a unique member then utilize the type information from the slotsig - let declaredTypars = - match uniqueAbstractMethSigs with - | uniqueAbstractMeth :: _ -> + + + // If we determined a unique member then utilize the type information from the slotsig + let declaredTypars = + match uniqueAbstractMethSigs with + | uniqueAbstractMeth :: _ -> let uniqueAbstractMeth = uniqueAbstractMeth.Instantiate(cenv.amap, m, renaming) - - let typarsFromAbsSlotAreRigid, typarsFromAbsSlot, argTysFromAbsSlot, retTyFromAbsSlot = + + let typarsFromAbsSlotAreRigid, typarsFromAbsSlot, argTysFromAbsSlot, retTyFromAbsSlot = FreshenAbstractSlot cenv.g cenv.amap m synTyparDecls uniqueAbstractMeth let declaredTypars = (if typarsFromAbsSlotAreRigid then typarsFromAbsSlot else declaredTypars) @@ -10007,98 +9929,98 @@ and ApplyAbstractSlotInference (cenv: cenv) (envinner: TcEnv) (bindingTy, m, syn UnifyTypes cenv envinner m bindingTy absSlotTy declaredTypars - | _ -> declaredTypars + | _ -> declaredTypars // Retained to ensure use of an FSComp.txt entry, can be removed at a later date: errorR(Error(FSComp.SR.tcDefaultAmbiguous(), memberId.idRange)) - // What's the type containing the abstract slot we're implementing? Used later on in MakeMemberDataAndMangledNameForMemberVal. - // This type must be in terms of the enclosing type's formal type parameters, hence the application of revRenaming + // What's the type containing the abstract slot we're implementing? Used later on in MakeMemberDataAndMangledNameForMemberVal. + // This type must be in terms of the enclosing type's formal type parameters, hence the application of revRenaming - let optInferredImplSlotTys = - match optIntfSlotTy with + let optInferredImplSlotTys = + match optIntfSlotTy with | Some (x, _) -> [x] | None -> uniqueAbstractMethSigs |> List.map (fun x -> x.ApparentEnclosingType) optInferredImplSlotTys, declaredTypars - | SynMemberKind.PropertyGet - | SynMemberKind.PropertySet as k -> + | MemberKind.PropertyGet + | MemberKind.PropertySet as k -> let dispatchSlots = GetAbstractPropInfosForSynPropertyDecl(cenv.infoReader, ad, memberId, m, typToSearchForAbstractMembers, k, valSynData) - // Only consider those abstract slots where the get/set flags match the value we're defining - let dispatchSlots = - dispatchSlots - |> List.filter (fun pinfo -> - (pinfo.HasGetter && k=SynMemberKind.PropertyGet) || - (pinfo.HasSetter && k=SynMemberKind.PropertySet)) - - // Find the unique abstract slot if it exists - let uniqueAbstractPropSigs = - match dispatchSlots with - | [] when not (CompileAsEvent cenv.g attribs) -> - errorR(Error(FSComp.SR.tcNoPropertyFoundForOverride(), memberId.idRange)) + // Only consider those abstract slots where the get/set flags match the value we're defining + let dispatchSlots = + dispatchSlots + |> List.filter (fun pinfo -> + (pinfo.HasGetter && k=MemberKind.PropertyGet) || + (pinfo.HasSetter && k=MemberKind.PropertySet)) + + // Find the unique abstract slot if it exists + let uniqueAbstractPropSigs = + match dispatchSlots with + | [] when not (CompileAsEvent cenv.g attribs) -> + errorR(Error(FSComp.SR.tcNoPropertyFoundForOverride(), memberId.idRange)) [] | [uniqueAbstractProp] -> [uniqueAbstractProp] - | _ -> - // We hit this case when it is ambiguous which abstract property is being implemented. + | _ -> + // We hit this case when it is ambiguous which abstract property is being implemented. [] - // If we determined a unique member then utilize the type information from the slotsig - uniqueAbstractPropSigs |> List.iter (fun uniqueAbstractProp -> + // If we determined a unique member then utilize the type information from the slotsig + uniqueAbstractPropSigs |> List.iter (fun uniqueAbstractProp -> - let kIsGet = (k = SynMemberKind.PropertyGet) + let kIsGet = (k = MemberKind.PropertyGet) - if not (if kIsGet then uniqueAbstractProp.HasGetter else uniqueAbstractProp.HasSetter) then + if not (if kIsGet then uniqueAbstractProp.HasGetter else uniqueAbstractProp.HasSetter) then error(Error(FSComp.SR.tcAbstractPropertyMissingGetOrSet(if kIsGet then "getter" else "setter"), memberId.idRange)) let uniqueAbstractMeth = if kIsGet then uniqueAbstractProp.GetterMethod else uniqueAbstractProp.SetterMethod let uniqueAbstractMeth = uniqueAbstractMeth.Instantiate(cenv.amap, m, renaming) - let _, typarsFromAbsSlot, argTysFromAbsSlot, retTyFromAbsSlot = + let _, typarsFromAbsSlot, argTysFromAbsSlot, retTyFromAbsSlot = FreshenAbstractSlot cenv.g cenv.amap m synTyparDecls uniqueAbstractMeth - if not (isNil typarsFromAbsSlot) then + if not (isNil typarsFromAbsSlot) then errorR(InternalError("Unexpected generic property", memberId.idRange)) - let absSlotTy = - if (memberFlags.MemberKind = SynMemberKind.PropertyGet) - then mkMethodTy cenv.g argTysFromAbsSlot retTyFromAbsSlot - else - match argTysFromAbsSlot with + let absSlotTy = + if (memberFlags.MemberKind = MemberKind.PropertyGet) + then mkMethodTy cenv.g argTysFromAbsSlot retTyFromAbsSlot + else + match argTysFromAbsSlot with | [argTysFromAbsSlot] -> mkRefTupledTy cenv.g argTysFromAbsSlot --> cenv.g.unit_ty - | _ -> - error(Error(FSComp.SR.tcInvalidSignatureForSet(), memberId.idRange)) + | _ -> + error(Error(FSComp.SR.tcInvalidSignatureForSet(), memberId.idRange)) retTyFromAbsSlot --> cenv.g.unit_ty UnifyTypes cenv envinner m bindingTy absSlotTy) - - // What's the type containing the abstract slot we're implementing? Used later on in MakeMemberDataAndMangledNameForMemberVal. + + // What's the type containing the abstract slot we're implementing? Used later on in MakeMemberDataAndMangledNameForMemberVal. // This type must be in terms of the enclosing type's formal type parameters, hence the application of revRenaming. - - let optInferredImplSlotTys = - match optIntfSlotTy with + + let optInferredImplSlotTys = + match optIntfSlotTy with | Some (x, _) -> [ x ] - | None -> uniqueAbstractPropSigs |> List.map (fun pinfo -> pinfo.ApparentEnclosingType) + | None -> uniqueAbstractPropSigs |> List.map (fun pinfo -> pinfo.ApparentEnclosingType) optInferredImplSlotTys, declaredTypars - | _ -> - match optIntfSlotTy with - | Some (x, _) -> [x], declaredTypars + | _ -> + match optIntfSlotTy with + | Some (x, _) -> [x], declaredTypars | None -> [], declaredTypars else - [], declaredTypars + [], declaredTypars -and CheckForNonAbstractInterface declKind tcref (memberFlags: SynMemberFlags) m = - if isInterfaceTyconRef tcref then - if memberFlags.MemberKind = SynMemberKind.ClassConstructor then +and CheckForNonAbstractInterface declKind tcref memberFlags m = + if isInterfaceTyconRef tcref then + if memberFlags.MemberKind = MemberKind.ClassConstructor then error(Error(FSComp.SR.tcStaticInitializersIllegalInInterface(), m)) - elif memberFlags.MemberKind = SynMemberKind.Constructor then + elif memberFlags.MemberKind = MemberKind.Constructor then error(Error(FSComp.SR.tcObjectConstructorsIllegalInInterface(), m)) - elif memberFlags.IsOverrideOrExplicitImpl then + elif memberFlags.IsOverrideOrExplicitImpl then error(Error(FSComp.SR.tcMemberOverridesIllegalInInterface(), m)) elif not (declKind=ExtrinsicExtensionBinding || memberFlags.IsDispatchSlot ) then error(Error(FSComp.SR.tcConcreteMembersIllegalInInterface(), m)) @@ -10107,107 +10029,107 @@ and CheckForNonAbstractInterface declKind tcref (memberFlags: SynMemberFlags) m // TcLetrec - AnalyzeAndMakeAndPublishRecursiveValue s //------------------------------------------------------------------------ -and AnalyzeRecursiveStaticMemberOrValDecl +and AnalyzeRecursiveStaticMemberOrValDecl (cenv, - envinner: TcEnv, + envinner: TcEnv, tpenv, - declKind, + declKind, newslotsOK, overridesOK, tcrefContainerInfo, vis1, id: Ident, vis2, - declaredTypars, + declaredTypars, memberFlagsOpt, - thisIdOpt, + thisIdOpt, bindingAttribs, valSynInfo, - ty, + ty, bindingRhs, mBinding, explicitTyparInfo) = let vis = CombineVisibilityAttribs vis1 vis2 mBinding - // Check if we're defining a member, in which case generate the internal unique - // name for the member and the information about which type it is augmenting - - match tcrefContainerInfo, memberFlagsOpt with - | (Some(MemberOrValContainerInfo(tcref, optIntfSlotTy, baseValOpt, _safeInitInfo, declaredTyconTypars)), Some memberFlags) -> + // Check if we're defining a member, in which case generate the internal unique + // name for the member and the information about which type it is augmenting + + match tcrefContainerInfo, memberFlagsOpt with + | (Some(MemberOrValContainerInfo(tcref, optIntfSlotTy, baseValOpt, _safeInitInfo, declaredTyconTypars)), Some memberFlags) -> assert (Option.isNone optIntfSlotTy) - + CheckMemberFlags None newslotsOK overridesOK memberFlags id.idRange CheckForNonAbstractInterface declKind tcref memberFlags id.idRange - if memberFlags.MemberKind = SynMemberKind.Constructor && tcref.Deref.IsExceptionDecl then - error(Error(FSComp.SR.tcConstructorsDisallowedInExceptionAugmentation(), id.idRange)) + if memberFlags.MemberKind = MemberKind.Constructor && tcref.Deref.IsExceptionDecl then + error(Error(FSComp.SR.tcConstructorsDisallowedInExceptionAugmentation(), id.idRange)) let isExtrinsic = (declKind = ExtrinsicExtensionBinding) let _, enclosingDeclaredTypars, _, objTy, thisTy = FreshenObjectArgType cenv mBinding TyparRigidity.WillBeRigid tcref isExtrinsic declaredTyconTypars let envinner = AddDeclaredTypars CheckForDuplicateTypars enclosingDeclaredTypars envinner - let envinner = MakeInnerEnvForTyconRef envinner tcref isExtrinsic - - let safeThisValOpt, baseValOpt = - match memberFlags.MemberKind with + let envinner = MakeInnerEnvForTyconRef envinner tcref isExtrinsic + let safeThisValOpt, baseValOpt = + match memberFlags.MemberKind with + // Explicit struct or class constructor - | SynMemberKind.Constructor -> - // A fairly adhoc place to put this check + | MemberKind.Constructor -> + // A fairly adhoc place to put this check if tcref.IsStructOrEnumTycon && (match valSynInfo with SynValInfo([[]], _) -> true | _ -> false) then errorR(Error(FSComp.SR.tcStructsCannotHaveConstructorWithNoArguments(), mBinding)) - if not tcref.IsFSharpObjectModelTycon then + if not tcref.IsFSharpObjectModelTycon then errorR(Error(FSComp.SR.tcConstructorsIllegalForThisType(), id.idRange)) let safeThisValOpt = MakeAndPublishSafeThisVal cenv envinner thisIdOpt thisTy - - // baseValOpt is the 'base' variable associated with the inherited portion of a class - // It is declared once on the 'inheritedTys clause, but a fresh binding is made for - // each member that may use it. - let baseValOpt = - match GetSuperTypeOfType cenv.g cenv.amap mBinding objTy with - | Some superTy -> MakeAndPublishBaseVal cenv envinner (match baseValOpt with None -> None | Some v -> Some v.Id) superTy + + // baseValOpt is the 'base' variable associated with the inherited portion of a class + // It is declared once on the 'inheritedTys clause, but a fresh binding is made for + // each member that may use it. + let baseValOpt = + match GetSuperTypeOfType cenv.g cenv.amap mBinding objTy with + | Some superTy -> MakeAndPublishBaseVal cenv envinner (match baseValOpt with None -> None | Some v -> Some v.Id) superTy | None -> None let domainTy = NewInferenceType () - // This is the type we pretend a constructor has, because its implementation must ultimately appear to return a value of the given type - // This is somewhat awkward later in codegen etc. + // This is the type we pretend a constructor has, because its implementation must ultimately appear to return a value of the given type + // This is somewhat awkward later in codegen etc. UnifyTypes cenv envinner mBinding ty (domainTy --> objTy) safeThisValOpt, baseValOpt - - | _ -> + + | _ -> None, None - - let memberInfo = + + let memberInfo = let isExtrinsic = (declKind = ExtrinsicExtensionBinding) MakeMemberDataAndMangledNameForMemberVal(cenv.g, tcref, isExtrinsic, bindingAttribs, [], memberFlags, valSynInfo, id, false) envinner, tpenv, id, None, Some memberInfo, vis, vis2, safeThisValOpt, enclosingDeclaredTypars, baseValOpt, explicitTyparInfo, bindingRhs, declaredTypars - - // non-member bindings. How easy. - | _ -> + + // non-member bindings. How easy. + | _ -> envinner, tpenv, id, None, None, vis, vis2, None, [], None, explicitTyparInfo, bindingRhs, declaredTypars + - -and AnalyzeRecursiveInstanceMemberDecl +and AnalyzeRecursiveInstanceMemberDecl (cenv, envinner: TcEnv, tpenv, declKind, synTyparDecls, - valSynInfo, + valSynInfo, explicitTyparInfo: ExplicitTyparInfo, newslotsOK, overridesOK, vis1, - thisId, + thisId, memberId: Ident, toolId: Ident option, bindingAttribs, - vis2, + vis2, tcrefContainerInfo, memberFlagsOpt, ty, @@ -10216,50 +10138,50 @@ and AnalyzeRecursiveInstanceMemberDecl let vis = CombineVisibilityAttribs vis1 vis2 mBinding let (ExplicitTyparInfo(_, declaredTypars, infer)) = explicitTyparInfo - match tcrefContainerInfo, memberFlagsOpt with - // Normal instance members. - | Some(MemberOrValContainerInfo(tcref, optIntfSlotTy, baseValOpt, _safeInitInfo, declaredTyconTypars)), Some memberFlags -> - + match tcrefContainerInfo, memberFlagsOpt with + // Normal instance members. + | Some(MemberOrValContainerInfo(tcref, optIntfSlotTy, baseValOpt, _safeInitInfo, declaredTyconTypars)), Some memberFlags -> + CheckMemberFlags optIntfSlotTy newslotsOK overridesOK memberFlags mBinding - if Option.isSome vis && memberFlags.IsOverrideOrExplicitImpl then + if Option.isSome vis && memberFlags.IsOverrideOrExplicitImpl then errorR(Error(FSComp.SR.tcOverridesCannotHaveVisibilityDeclarations(), memberId.idRange)) - // Syntactically push the "this" variable across to be a lambda on the right + // Syntactically push the "this" variable across to be a lambda on the right let bindingRhs = PushOnePatternToRhs cenv true (mkSynThisPatVar thisId) bindingRhs - - // The type being augmented tells us the type of 'this' + + // The type being augmented tells us the type of 'this' let isExtrinsic = (declKind = ExtrinsicExtensionBinding) let tcrefObjTy, enclosingDeclaredTypars, renaming, objTy, thisTy = FreshenObjectArgType cenv mBinding TyparRigidity.WillBeRigid tcref isExtrinsic declaredTyconTypars let envinner = AddDeclaredTypars CheckForDuplicateTypars enclosingDeclaredTypars envinner - // If private, the member's accessibility is related to 'tcref' - let envinner = MakeInnerEnvForTyconRef envinner tcref isExtrinsic + // If private, the member's accessibility is related to 'tcref' + let envinner = MakeInnerEnvForTyconRef envinner tcref isExtrinsic let baseValOpt = if tcref.IsFSharpObjectModelTycon then baseValOpt else None - // Apply the known type of 'this' + // Apply the known type of 'this' let bindingTy = NewInferenceType () UnifyTypes cenv envinner mBinding ty (thisTy --> bindingTy) - CheckForNonAbstractInterface declKind tcref memberFlags memberId.idRange - - // Determine if a uniquely-identified-override List.exists based on the information - // at the member signature. If so, we know the type of this member, and the full slotsig - // it implements. Apply the inferred slotsig. - let optInferredImplSlotTys, declaredTypars = + CheckForNonAbstractInterface declKind tcref memberFlags memberId.idRange + + // Determine if a uniquely-identified-override List.exists based on the information + // at the member signature. If so, we know the type of this member, and the full slotsig + // it implements. Apply the inferred slotsig. + let optInferredImplSlotTys, declaredTypars = ApplyAbstractSlotInference cenv envinner (bindingTy, mBinding, synTyparDecls, declaredTypars, memberId, tcrefObjTy, renaming, objTy, optIntfSlotTy, valSynInfo, memberFlags, bindingAttribs) - // Update the ExplicitTyparInfo to reflect the declaredTypars inferred from the abstract slot + // Update the ExplicitTyparInfo to reflect the declaredTypars inferred from the abstract slot let explicitTyparInfo = ExplicitTyparInfo(declaredTypars, declaredTypars, infer) - // baseValOpt is the 'base' variable associated with the inherited portion of a class - // It is declared once on the 'inheritedTys clause, but a fresh binding is made for - // each member that may use it. - let baseValOpt = - match GetSuperTypeOfType cenv.g cenv.amap mBinding objTy with - | Some superTy -> MakeAndPublishBaseVal cenv envinner (match baseValOpt with None -> None | Some v -> Some v.Id) superTy + // baseValOpt is the 'base' variable associated with the inherited portion of a class + // It is declared once on the 'inheritedTys clause, but a fresh binding is made for + // each member that may use it. + let baseValOpt = + match GetSuperTypeOfType cenv.g cenv.amap mBinding objTy with + | Some superTy -> MakeAndPublishBaseVal cenv envinner (match baseValOpt with None -> None | Some v -> Some v.Id) superTy | None -> None let memberInfo = MakeMemberDataAndMangledNameForMemberVal(cenv.g, tcref, isExtrinsic, bindingAttribs, optInferredImplSlotTys, memberFlags, valSynInfo, memberId, false) @@ -10272,11 +10194,11 @@ and AnalyzeRecursiveInstanceMemberDecl //ignore toolId envinner, tpenv, memberId, toolId, Some memberInfo, vis, vis2, None, enclosingDeclaredTypars, baseValOpt, explicitTyparInfo, bindingRhs, declaredTypars - | _ -> - error(Error(FSComp.SR.tcRecursiveBindingsWithMembersMustBeDirectAugmentation(), mBinding)) + | _ -> + error(Error(FSComp.SR.tcRecursiveBindingsWithMembersMustBeDirectAugmentation(), mBinding)) and AnalyzeRecursiveDecl - (cenv, + (cenv, envinner, tpenv, declKind, @@ -10296,41 +10218,41 @@ and AnalyzeRecursiveDecl bindingRhs, mBinding) = - let rec analyzeRecursiveDeclPat tpenv p = - match p with + let rec analyzeRecursiveDeclPat tpenv p = + match p with | SynPat.FromParseError(pat', _) -> analyzeRecursiveDeclPat tpenv pat' - | SynPat.Typed(pat', cty, _) -> + | SynPat.Typed(pat', cty, _) -> let cty', tpenv = TcTypeAndRecover cenv NewTyparsOK CheckCxs ItemOccurence.UseInType envinner tpenv cty UnifyTypes cenv envinner mBinding ty cty' - analyzeRecursiveDeclPat tpenv pat' - | SynPat.Attrib(_pat', _attribs, m) -> + analyzeRecursiveDeclPat tpenv pat' + | SynPat.Attrib(_pat', _attribs, m) -> error(Error(FSComp.SR.tcAttributesInvalidInPatterns(), m)) - //analyzeRecursiveDeclPat pat' + //analyzeRecursiveDeclPat pat' // This is for the construct 'let rec x = ... and do ... and y = ...' (DEPRECATED IN pars.mly ) // - // Also for - // module rec M = + // Also for + // module rec M = // printfn "hello" // side effects in recursive modules // let x = 1 - | SynPat.Const (SynConst.Unit, m) | SynPat.Wild m -> + | SynPat.Const (SynConst.Unit, m) | SynPat.Wild m -> let id = ident (cenv.niceNameGen.FreshCompilerGeneratedName("doval", m), m) - analyzeRecursiveDeclPat tpenv (SynPat.Named (id, false, None, m)) - - | SynPat.Named (id, _, vis2, _) -> - AnalyzeRecursiveStaticMemberOrValDecl - (cenv, envinner, tpenv, declKind, - newslotsOK, overridesOK, tcrefContainerInfo, - vis1, id, vis2, declaredTypars, - memberFlagsOpt, thisIdOpt, bindingAttribs, + analyzeRecursiveDeclPat tpenv (SynPat.Named (SynPat.Wild m, id, false, None, m)) + + | SynPat.Named (SynPat.Wild _, id, _, vis2, _) -> + AnalyzeRecursiveStaticMemberOrValDecl + (cenv, envinner, tpenv, declKind, + newslotsOK, overridesOK, tcrefContainerInfo, + vis1, id, vis2, declaredTypars, + memberFlagsOpt, thisIdOpt, bindingAttribs, valSynInfo, ty, bindingRhs, mBinding, explicitTyparInfo) - - | SynPat.InstanceMember(thisId, memberId, toolId, vis2, _) -> - AnalyzeRecursiveInstanceMemberDecl - (cenv, envinner, tpenv, declKind, - synTyparDecls, valSynInfo, explicitTyparInfo, newslotsOK, - overridesOK, vis1, thisId, memberId, toolId, - bindingAttribs, vis2, tcrefContainerInfo, + + | SynPat.InstanceMember(thisId, memberId, toolId, vis2, _) -> + AnalyzeRecursiveInstanceMemberDecl + (cenv, envinner, tpenv, declKind, + synTyparDecls, valSynInfo, explicitTyparInfo, newslotsOK, + overridesOK, vis1, thisId, memberId, toolId, + bindingAttribs, vis2, tcrefContainerInfo, memberFlagsOpt, ty, bindingRhs, mBinding) | _ -> error(Error(FSComp.SR.tcOnlySimplePatternsInLetRec(), mBinding)) @@ -10338,7 +10260,7 @@ and AnalyzeRecursiveDecl analyzeRecursiveDeclPat tpenv declPattern -/// This is a major routine that generates the Val for a recursive binding +/// This is a major routine that generates the Val for a recursive binding /// prior to the analysis of the definition of the binding. This includes /// members of all flavours (including properties, implicit class constructors /// and overrides). At this point we perform override inference, to infer @@ -10355,18 +10277,18 @@ and AnalyzeAndMakeAndPublishRecursiveValue // Pull apart the inputs let (NormalizedBinding(vis1, bindingKind, isInline, isMutable, bindingSynAttribs, bindingXmlDoc, synTyparDecls, valSynData, declPattern, bindingRhs, mBinding, spBind)) = binding let (NormalizedBindingRhs(_, _, bindingExpr)) = bindingRhs - let (SynValData(memberFlagsOpt, valSynInfo, thisIdOpt)) = valSynData + let (SynValData(memberFlagsOpt, valSynInfo, thisIdOpt)) = valSynData let (ContainerInfo(altActualParent, tcrefContainerInfo)) = containerInfo - - let attrTgt = DeclKind.AllowedAttribTargets memberFlagsOpt declKind + + let attrTgt = DeclKind.AllowedAttribTargets memberFlagsOpt declKind // Check the attributes on the declaration let bindingAttribs = TcAttributes cenv env attrTgt bindingSynAttribs // Allocate the type inference variable for the inferred type - let ty = NewInferenceType () - - + let ty = NewInferenceType () + + let inlineFlag = ComputeInlineFlag memberFlagsOpt isInline isMutable mBinding if isMutable then errorR(Error(FSComp.SR.tcOnlyRecordFieldsAndSimpleLetCanBeMutable(), mBinding)) @@ -10375,12 +10297,12 @@ and AnalyzeAndMakeAndPublishRecursiveValue let explicitTyparInfo, tpenv = TcBindingTyparDecls false cenv env tpenv synTyparDecls let (ExplicitTyparInfo(_, declaredTypars, _)) = explicitTyparInfo let envinner = AddDeclaredTypars CheckForDuplicateTypars declaredTypars env - + // OK, analyze the declaration and return lots of information about it - let envinner, tpenv, bindingId, toolIdOpt, memberInfoOpt, vis, vis2, safeThisValOpt, enclosingDeclaredTypars, baseValOpt, explicitTyparInfo, bindingRhs, declaredTypars = + let envinner, tpenv, bindingId, toolIdOpt, memberInfoOpt, vis, vis2, safeThisValOpt, enclosingDeclaredTypars, baseValOpt, explicitTyparInfo, bindingRhs, declaredTypars = - AnalyzeRecursiveDecl (cenv, envinner, tpenv, declKind, synTyparDecls, declaredTypars, thisIdOpt, valSynInfo, explicitTyparInfo, - newslotsOK, overridesOK, vis1, declPattern, bindingAttribs, tcrefContainerInfo, + AnalyzeRecursiveDecl (cenv, envinner, tpenv, declKind, synTyparDecls, declaredTypars, thisIdOpt, valSynInfo, explicitTyparInfo, + newslotsOK, overridesOK, vis1, declPattern, bindingAttribs, tcrefContainerInfo, memberFlagsOpt, ty, bindingRhs, mBinding) let optArgsOK = Option.isSome memberFlagsOpt @@ -10388,12 +10310,12 @@ and AnalyzeAndMakeAndPublishRecursiveValue // Assert the types given in the argument patterns ApplyTypesFromArgumentPatterns(cenv, envinner, optArgsOK, ty, mBinding, tpenv, bindingRhs, memberFlagsOpt) - // Do the type annotations give the full and complete generic type? - // If so, generic recursion can be used when using this type. + // Do the type annotations give the full and complete generic type? + // If so, generic recursion can be used when using this type. let isComplete = ComputeIsComplete enclosingDeclaredTypars declaredTypars ty - - // NOTE: The type scheme here is normally not 'complete'!!!! The type is more or less just a type variable at this point. - // NOTE: top arity, type and typars get fixed-up after inference + + // NOTE: The type scheme here is normally not 'complete'!!!! The type is more or less just a type variable at this point. + // NOTE: top arity, type and typars get fixed-up after inference let prelimTyscheme = TypeScheme(enclosingDeclaredTypars@declaredTypars, ty) let partialValReprInfo = TranslateTopValSynInfo mBinding (TcAttributes cenv envinner) valSynInfo let topValInfo = UseSyntacticArity declKind prelimTyscheme partialValReprInfo @@ -10403,47 +10325,47 @@ and AnalyzeAndMakeAndPublishRecursiveValue // Check the literal r.h.s., if any let _, literalValue = TcLiteral cenv ty envinner tpenv (bindingAttribs, bindingExpr) - let extraBindings, extraValues, tpenv, recBindIdx = - let extraBindings = + let extraBindings, extraValues, tpenv, recBindIdx = + let extraBindings = [ for extraBinding in EventDeclarationNormalization.GenerateExtraBindings cenv (bindingAttribs, binding) do yield (NormalizedRecBindingDefn(containerInfo, newslotsOK, declKind, extraBinding)) ] let res, (tpenv, recBindIdx) = List.mapFold (AnalyzeAndMakeAndPublishRecursiveValue overridesOK true cenv env) (tpenv, recBindIdx) extraBindings let extraBindings, extraValues = List.unzip res List.concat extraBindings, List.concat extraValues, tpenv, recBindIdx - - // Create the value + + // Create the value let vspec = MakeAndPublishVal cenv envinner (altActualParent, false, declKind, ValInRecScope isComplete, prelimValScheme, bindingAttribs, bindingXmlDoc, literalValue, isGeneratedEventVal) // Suppress hover tip for "get" and "set" at property definitions, where toolId <> bindingId - match toolIdOpt with + match toolIdOpt with | Some tid when not tid.idRange.IsSynthetic && not (Range.equals tid.idRange bindingId.idRange) -> let item = Item.Value (mkLocalValRef vspec) CallNameResolutionSink cenv.tcSink (tid.idRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.RelatedText, env.eAccessRights) | _ -> () - + let mangledId = ident(vspec.LogicalName, vspec.Range) // Reconstitute the binding with the unique name let revisedBinding = NormalizedBinding (vis1, bindingKind, isInline, isMutable, bindingSynAttribs, bindingXmlDoc, synTyparDecls, valSynData, mkSynPatVar vis2 mangledId, bindingRhs, mBinding, spBind) // Create the RecursiveBindingInfo to use in later phases - let rbinfo = - let safeInitInfo = - match tcrefContainerInfo with + let rbinfo = + let safeInitInfo = + match tcrefContainerInfo with | Some(MemberOrValContainerInfo(_, _, _, safeInitInfo, _)) -> safeInitInfo | _ -> NoSafeInitInfo - + RecursiveBindingInfo(recBindIdx, containerInfo, enclosingDeclaredTypars, inlineFlag, vspec, explicitTyparInfo, partialValReprInfo, memberInfoOpt, baseValOpt, safeThisValOpt, safeInitInfo, vis, ty, declKind) let recBindIdx = recBindIdx + 1 - // Done - add the declared name to the List.map and return the bundle for use by TcLetrec - let primaryBinding: PreCheckingRecursiveBinding = + // Done - add the declared name to the List.map and return the bundle for use by TcLetrec + let primaryBinding: PreCheckingRecursiveBinding = { SyntacticBinding = revisedBinding RecBindingInfo = rbinfo } ((primaryBinding :: extraBindings), (vspec :: extraValues)), (tpenv, recBindIdx) -and AnalyzeAndMakeAndPublishRecursiveValues overridesOK cenv env tpenv binds = +and AnalyzeAndMakeAndPublishRecursiveValues overridesOK cenv env tpenv binds = let recBindIdx = 0 let res, tpenv = List.mapFold (AnalyzeAndMakeAndPublishRecursiveValue overridesOK false cenv env) (tpenv, recBindIdx) binds let bindings, values = List.unzip res @@ -10454,27 +10376,27 @@ and AnalyzeAndMakeAndPublishRecursiveValues overridesOK cenv env tpenv binds = // TcLetrecBinding //------------------------------------------------------------------------- -and TcLetrecBinding +and TcLetrecBinding (cenv, envRec: TcEnv, scopem, extraGeneralizableTypars: Typars, reqdThisValTyOpt: TType option) - + // The state of the left-to-right iteration through the bindings - (envNonRec: TcEnv, - generalizedRecBinds: PostGeneralizationRecursiveBinding list, - preGeneralizationRecBinds: PreGeneralizationRecursiveBinding list, - tpenv, - uncheckedRecBindsTable: Map) - + (envNonRec: TcEnv, + generalizedRecBinds: PostGeneralizationRecursiveBinding list, + preGeneralizationRecBinds: PreGeneralizationRecursiveBinding list, + tpenv, + uncheckedRecBindsTable: Map) + // This is the actual binding to check - (rbind: PreCheckingRecursiveBinding) = + (rbind: PreCheckingRecursiveBinding) = let (RecursiveBindingInfo(_, _, enclosingDeclaredTypars, _, vspec, explicitTyparInfo, _, _, baseValOpt, safeThisValOpt, safeInitInfo, _, tau, declKind)) = rbind.RecBindingInfo - + let allDeclaredTypars = enclosingDeclaredTypars @ rbind.RecBindingInfo.DeclaredTypars // Notes on FSharp 1.0, 3187: // - Progressively collect the "eligible for early generalization" set of bindings -- DONE // - After checking each binding, check this set to find generalizable bindings - // - The only reason we can't generalize is if a binding refers to type variables to which + // - The only reason we can't generalize is if a binding refers to type variables to which // additional constraints may be applied as part of checking a later binding // - Compute the set by iteratively knocking out bindings that refer to type variables free in later bindings // - Implementation notes: @@ -10482,69 +10404,69 @@ and TcLetrecBinding // - Pass in "free in later bindings" by passing in the set of inference variables for the bindings, i.e. the binding types // - For classes the bindings will include all members in a recursive group of types // - - // Example 1: + + // Example 1: // let f() = g() f: unit -> ?b // and g() = 1 f: unit -> int, can generalize (though now monomorphic) - // Example 2: + // Example 2: // let f() = g() f: unit -> ?b // and g() = [] f: unit -> ?c list, can generalize - - // Example 3: + + // Example 3: // let f() = [] f: unit -> ?b, can generalize immediately // and g() = [] - let envRec = Option.foldBack (AddLocalVal cenv.g cenv.tcSink scopem) baseValOpt envRec - let envRec = Option.foldBack (AddLocalVal cenv.g cenv.tcSink scopem) safeThisValOpt envRec + let envRec = Option.foldBack (AddLocalVal cenv.tcSink scopem) baseValOpt envRec + let envRec = Option.foldBack (AddLocalVal cenv.tcSink scopem) safeThisValOpt envRec - // Members can access protected members of parents of the type, and private members in the type - let envRec = MakeInnerEnvForMember envRec vspec + // Members can access protected members of parents of the type, and private members in the type + let envRec = MakeInnerEnvForMember envRec vspec - let checkedBind, tpenv = + let checkedBind, tpenv = TcNormalizedBinding declKind cenv envRec tpenv tau safeThisValOpt safeInitInfo (enclosingDeclaredTypars, explicitTyparInfo) rbind.SyntacticBinding - (try UnifyTypes cenv envRec vspec.Range (allDeclaredTypars +-> tau) vspec.Type + (try UnifyTypes cenv envRec vspec.Range (allDeclaredTypars +-> tau) vspec.Type with e -> error (Recursion(envRec.DisplayEnv, vspec.Id, tau, vspec.Type, vspec.Range))) - // Inside the incremental class syntax we assert the type of the 'this' variable to be precisely the same type as the + // Inside the incremental class syntax we assert the type of the 'this' variable to be precisely the same type as the // this variable for the implicit class constructor. For static members, we assert the type variables associated // for the class to be identical to those used for the implicit class constructor and the static class constructor. - match reqdThisValTyOpt with - | None -> () - | Some reqdThisValTy -> + match reqdThisValTyOpt with + | None -> () + | Some reqdThisValTy -> let reqdThisValTy, actualThisValTy, rangeForCheck = match GetInstanceMemberThisVariable (vspec, checkedBind.Expr) with - | None -> + | None -> let reqdThisValTy = if isByrefTy cenv.g reqdThisValTy then destByrefTy cenv.g reqdThisValTy else reqdThisValTy let enclosingTyconRef = tcrefOfAppTy cenv.g reqdThisValTy reqdThisValTy, (mkAppTy enclosingTyconRef (List.map mkTyparTy enclosingDeclaredTypars)), vspec.Range - | Some thisVal -> + | Some thisVal -> reqdThisValTy, thisVal.Type, thisVal.Range - if not (AddCxTypeEqualsTypeUndoIfFailed envRec.DisplayEnv cenv.css rangeForCheck actualThisValTy reqdThisValTy) then + if not (AddCxTypeEqualsTypeUndoIfFailed envRec.DisplayEnv cenv.css rangeForCheck actualThisValTy reqdThisValTy) then errorR (Error(FSComp.SR.tcNonUniformMemberUse vspec.DisplayName, vspec.Range)) - let preGeneralizationRecBind = - { RecBindingInfo = rbind.RecBindingInfo + let preGeneralizationRecBind = + { RecBindingInfo = rbind.RecBindingInfo CheckedBinding= checkedBind ExtraGeneralizableTypars= extraGeneralizableTypars } // Remove one binding from the unchecked list - let uncheckedRecBindsTable = + let uncheckedRecBindsTable = assert (uncheckedRecBindsTable.ContainsKey rbind.RecBindingInfo.Val.Stamp) uncheckedRecBindsTable.Remove rbind.RecBindingInfo.Val.Stamp - + // Add one binding to the candidates eligible for generalization let preGeneralizationRecBinds = (preGeneralizationRecBind :: preGeneralizationRecBinds) // Incrementally generalize as many bindings as we can - TcIncrementalLetRecGeneralization cenv scopem (envNonRec, generalizedRecBinds, preGeneralizationRecBinds, tpenv, uncheckedRecBindsTable) + TcIncrementalLetRecGeneralization cenv scopem (envNonRec, generalizedRecBinds, preGeneralizationRecBinds, tpenv, uncheckedRecBindsTable) and TcIncrementalLetRecGeneralization cenv scopem // The state of the left-to-right iteration through the bindings - (envNonRec: TcEnv, - generalizedRecBinds: PostGeneralizationRecursiveBinding list, - preGeneralizationRecBinds: PreGeneralizationRecursiveBinding list, - tpenv, + (envNonRec: TcEnv, + generalizedRecBinds: PostGeneralizationRecursiveBinding list, + preGeneralizationRecBinds: PreGeneralizationRecursiveBinding list, + tpenv, uncheckedRecBindsTable: Map) = let denv = envNonRec.DisplayEnv @@ -10553,23 +10475,23 @@ and TcIncrementalLetRecGeneralization cenv scopem // Attempt to actually generalize some of the candidates eligible for generalization. // Compute which bindings are now eligible for early generalization. - // Do this by computing a greatest fixed point by iteratively knocking out bindings that refer + // Do this by computing a greatest fixed point by iteratively knocking out bindings that refer // to type variables free in later bindings. Look for ones whose type doesn't involve any of the other types - let newGeneralizedRecBinds, preGeneralizationRecBinds, tpenv = + let newGeneralizedRecBinds, preGeneralizationRecBinds, tpenv = //printfn "\n---------------------\nConsidering early generalization after type checking binding %s" vspec.DisplayName // Get the type variables free in bindings that have not yet been checked. - // + // // The naive implementation of this is to iterate all the forward bindings, but this is quadratic. // - // It turns out we can remove the quadratic behaviour as follows. - // - During type checking we already keep a table of recursive uses of values, indexed by target value. - // - This table is usually much smaller than the number of remaining forward declarations ? e.g. in the pathological case you mentioned below this table is size 1. - // - If a forward declaration does not have an entry in this table then its type can't involve any inference variables from the declarations we have already checked. - // - So by scanning the domain of this table we can reduce the complexity down to something like O(n * average-number-of-forward-calls). + // It turns out we can remove the quadratic behaviour as follows. + // - During type checking we already keep a table of recursive uses of values, indexed by target value. + // - This table is usually much smaller than the number of remaining forward declarations ? e.g. in the pathological case you mentioned below this table is size 1. + // - If a forward declaration does not have an entry in this table then its type can't involve any inference variables from the declarations we have already checked. + // - So by scanning the domain of this table we can reduce the complexity down to something like O(n * average-number-of-forward-calls). // - For a fully connected programs or programs where every forward declaration is subject to a forward call, this would be quadratic. However we do not expect call graphs to be like this in practice - // + // // Hence we use the recursive-uses table to guide the process of scraping forward references for frozen types // If the is no entry in the recursive use table then a forward binding has never been used and // the type of a binding will not contain any inference variables. @@ -10579,26 +10501,26 @@ and TcIncrementalLetRecGeneralization cenv scopem // // The forward uses table will always be smaller than the number of potential forward bindings except in extremely // pathological situations - let freeInUncheckedRecBinds = - lazy ((emptyFreeTyvars, cenv.recUses.Contents) ||> Map.fold (fun acc vStamp _ -> + let freeInUncheckedRecBinds = + lazy ((emptyFreeTyvars, cenv.recUses.Contents) ||> Map.fold (fun acc vStamp _ -> match uncheckedRecBindsTable.TryGetValue vStamp with | true, fwdBind -> accFreeInType CollectAllNoCaching fwdBind.RecBindingInfo.Val.Type acc | _ -> acc)) - let rec loop (preGeneralizationRecBinds: PreGeneralizationRecursiveBinding list, - frozenBindings: PreGeneralizationRecursiveBinding list) = + let rec loop (preGeneralizationRecBinds: PreGeneralizationRecursiveBinding list, + frozenBindings: PreGeneralizationRecursiveBinding list) = - let frozenBindingTypes = frozenBindings |> List.map (fun pgrbind -> pgrbind.RecBindingInfo.Val.Type) + let frozenBindingTypes = frozenBindings |> List.map (fun pgrbind -> pgrbind.RecBindingInfo.Val.Type) - let freeInFrozenAndLaterBindings = - if frozenBindingTypes.IsEmpty then + let freeInFrozenAndLaterBindings = + if frozenBindingTypes.IsEmpty then freeInUncheckedRecBinds - else + else lazy (accFreeInTypes CollectAllNoCaching frozenBindingTypes (freeInUncheckedRecBinds.Force())) - let preGeneralizationRecBinds, newFrozenBindings = + let preGeneralizationRecBinds, newFrozenBindings = preGeneralizationRecBinds |> List.partition (fun pgrbind -> @@ -10607,11 +10529,11 @@ and TcIncrementalLetRecGeneralization cenv scopem // Get the free type variables in the binding // // We use the TauType here because the binding may already have been pre-generalized because it has - // a fully type-annotated type signature. We effectively want to generalize the binding + // a fully type-annotated type signature. We effectively want to generalize the binding // again here, properly - for example this means adjusting the expression for the binding to include // a Expr_tlambda. If we use Val.Type then the type will appear closed. let freeInBinding = (freeInType CollectAllNoCaching pgrbind.RecBindingInfo.Val.TauType).FreeTypars - + // Is the binding free of type inference variables? If so, it can be generalized immediately if freeInBinding.IsEmpty then true else @@ -10630,7 +10552,7 @@ and TcIncrementalLetRecGeneralization cenv scopem //printfn "(failed generalization test 3 for binding for %s)" pgrbind.RecBindingInfo.Val.DisplayName - // Type variables free in the non-recursive environment do not stop us generalizing the binding, + // Type variables free in the non-recursive environment do not stop us generalizing the binding, // since they can't be generalized anyway let freeInBinding = Zset.diff freeInBinding freeInEnv @@ -10644,67 +10566,67 @@ and TcIncrementalLetRecGeneralization cenv scopem if freeInBinding.IsEmpty then true else //printfn "(failed generalization test 5 for binding for %s)" pgrbind.RecBindingInfo.Val.DisplayName - + false) - //if canGeneralize then + //if canGeneralize then // printfn "YES: binding for %s can be generalized early" pgrbind.RecBindingInfo.Val.DisplayName - //else + //else // printfn "NO: binding for %s can't be generalized early" pgrbind.RecBindingInfo.Val.DisplayName // Have we reached a fixed point? - if newFrozenBindings.IsEmpty then + if newFrozenBindings.IsEmpty then preGeneralizationRecBinds, frozenBindings else // if not, then repeat loop(preGeneralizationRecBinds, newFrozenBindings@frozenBindings) - + // start with no frozen bindings let newGeneralizableBindings, preGeneralizationRecBinds = loop(preGeneralizationRecBinds, []) - + // Some of the bindings may now have been marked as 'generalizable' (which means they now transition - // from PreGeneralization --> PostGeneralization, since we won't get any more information on - // these bindings by processing later bindings). But this doesn't mean we - // actually generalize all the individual type variables occuring in these bindings - for example, some + // from PreGeneralization --> PostGeneralization, since we won't get any more information on + // these bindings by processing later bindings). But this doesn't mean we + // actually generalize all the individual type variables occuring in these bindings - for example, some // type variables may be free in the environment, and some definitions - // may be value definitions which can't be generalized, e.g. - // let rec f x = g x - // and g = id f + // may be value definitions which can't be generalized, e.g. + // let rec f x = g x + // and g = id f // Here the type variables in 'g' can't be generalized because it's a computation on the right. // - // Note that in the normal case each binding passes IsGeneralizableValue. Properties and + // Note that in the normal case each binding passes IsGeneralizableValue. Properties and // constructors do not pass CanInferExtraGeneralizedTyparsForRecBinding. let freeInEnv = - (freeInEnv, newGeneralizableBindings) ||> List.fold (fun freeInEnv pgrbind -> - if GeneralizationHelpers.IsGeneralizableValue cenv.g pgrbind.CheckedBinding.Expr then - freeInEnv - else + (freeInEnv, newGeneralizableBindings) ||> List.fold (fun freeInEnv pgrbind -> + if GeneralizationHelpers.IsGeneralizableValue cenv.g pgrbind.CheckedBinding.Expr then + freeInEnv + else let freeInBinding = (freeInType CollectAllNoCaching pgrbind.RecBindingInfo.Val.TauType).FreeTypars let freeInBinding = Zset.diff freeInBinding (Zset.ofList typarOrder (NormalizeDeclaredTyparsForEquiRecursiveInference cenv.g pgrbind.ExtraGeneralizableTypars)) let freeInBinding = Zset.diff freeInBinding (Zset.ofList typarOrder (NormalizeDeclaredTyparsForEquiRecursiveInference cenv.g pgrbind.RecBindingInfo.DeclaredTypars)) Zset.union freeInBinding freeInEnv) // Process the bindings marked for transition from PreGeneralization --> PostGeneralization - let newGeneralizedRecBinds, tpenv = - if newGeneralizableBindings.IsEmpty then + let newGeneralizedRecBinds, tpenv = + if newGeneralizableBindings.IsEmpty then [], tpenv else - + let supportForBindings = newGeneralizableBindings |> List.collect (TcLetrecComputeSupportForBinding cenv) - ConstraintSolver.CanonicalizePartialInferenceProblem cenv.css denv scopem supportForBindings - - let generalizedTyparsL = newGeneralizableBindings |> List.map (TcLetrecComputeAndGeneralizeGenericTyparsForBinding cenv denv freeInEnv) - - // Generalize the bindings. - let newGeneralizedRecBinds = (generalizedTyparsL, newGeneralizableBindings) ||> List.map2 (TcLetrecGeneralizeBinding cenv denv ) + ConstraintSolver.CanonicalizePartialInferenceProblem cenv.css denv scopem supportForBindings + + let generalizedTyparsL = newGeneralizableBindings |> List.map (TcLetrecComputeAndGeneralizeGenericTyparsForBinding cenv denv freeInEnv) + + // Generalize the bindings. + let newGeneralizedRecBinds = (generalizedTyparsL, newGeneralizableBindings) ||> List.map2 (TcLetrecGeneralizeBinding cenv denv ) let tpenv = HideUnscopedTypars (List.concat generalizedTyparsL) tpenv newGeneralizedRecBinds, tpenv - - + + newGeneralizedRecBinds, preGeneralizationRecBinds, tpenv - let envNonRec = envNonRec |> AddLocalVals cenv.g cenv.tcSink scopem (newGeneralizedRecBinds |> List.map (fun b -> b.RecBindingInfo.Val)) - let generalizedRecBinds = newGeneralizedRecBinds @ generalizedRecBinds + let envNonRec = envNonRec |> AddLocalVals cenv.tcSink scopem (newGeneralizedRecBinds |> List.map (fun b -> b.RecBindingInfo.Val)) + let generalizedRecBinds = newGeneralizedRecBinds @ generalizedRecBinds (envNonRec, generalizedRecBinds, preGeneralizationRecBinds, tpenv, uncheckedRecBindsTable) @@ -10712,7 +10634,7 @@ and TcIncrementalLetRecGeneralization cenv scopem // TcLetrecComputeAndGeneralizeGenericTyparsForBinding //------------------------------------------------------------------------- -/// Compute the type variables which may be generalized and perform the generalization +/// Compute the type variables which may be generalized and perform the generalization and TcLetrecComputeAndGeneralizeGenericTyparsForBinding cenv denv freeInEnv (pgrbind: PreGeneralizationRecursiveBinding) = let freeInEnv = Zset.diff freeInEnv (Zset.ofList typarOrder (NormalizeDeclaredTyparsForEquiRecursiveInference cenv.g pgrbind.ExtraGeneralizableTypars)) @@ -10722,15 +10644,15 @@ and TcLetrecComputeAndGeneralizeGenericTyparsForBinding cenv denv freeInEnv (pgr let (CheckedBindingInfo(inlineFlag, _, _, _, _, _, expr, _, _, m, _, _, _, _)) = pgrbind.CheckedBinding let (ExplicitTyparInfo(rigidCopyOfDeclaredTypars, declaredTypars, _)) = rbinfo.ExplicitTyparInfo let allDeclaredTypars = rbinfo.EnclosingDeclaredTypars @ declaredTypars - + // The declared typars were not marked rigid to allow equi-recursive type inference to unify // two declared type variables. So we now check that, for each binding, the declared // type variables can be unified with a rigid version of the same and undo the results // of this unification. - ConstraintSolver.CheckDeclaredTypars denv cenv.css m rigidCopyOfDeclaredTypars declaredTypars + ConstraintSolver.CheckDeclaredTypars denv cenv.css m rigidCopyOfDeclaredTypars declaredTypars let memFlagsOpt = vspec.MemberInfo |> Option.map (fun memInfo -> memInfo.MemberFlags) - let isCtor = (match memFlagsOpt with None -> false | Some memberFlags -> memberFlags.MemberKind = SynMemberKind.Constructor) + let isCtor = (match memFlagsOpt with None -> false | Some memberFlags -> memberFlags.MemberKind = MemberKind.Constructor) GeneralizationHelpers.CheckDeclaredTyparsPermitted(memFlagsOpt, declaredTypars, m) let canInferTypars = CanInferExtraGeneralizedTyparsForRecBinding pgrbind @@ -10742,7 +10664,7 @@ and TcLetrecComputeAndGeneralizeGenericTyparsForBinding cenv denv freeInEnv (pgr 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 +/// Compute the type variables which may have member constraints that need to be canonicalized prior to generalization and TcLetrecComputeSupportForBinding cenv (pgrbind: PreGeneralizationRecursiveBinding) = let rbinfo = pgrbind.RecBindingInfo let allDeclaredTypars = rbinfo.EnclosingDeclaredTypars @ rbinfo.DeclaredTypars @@ -10758,8 +10680,8 @@ and TcLetrecGeneralizeBinding cenv denv generalizedTypars (pgrbind: PreGeneraliz let (RecursiveBindingInfo(_, _, enclosingDeclaredTypars, _, vspec, explicitTyparInfo, partialValReprInfo, memberInfoOpt, _, _, _, vis, _, declKind)) = pgrbind.RecBindingInfo let (CheckedBindingInfo(inlineFlag, _, _, _, _, _, expr, argAttribs, _, _, _, compgen, _, isFixed)) = pgrbind.CheckedBinding - - if isFixed then + + if isFixed then errorR(Error(FSComp.SR.tcFixedNotAllowed(), expr.Range)) let _, tau = vspec.TypeScheme @@ -10767,7 +10689,7 @@ and TcLetrecGeneralizeBinding cenv denv generalizedTypars (pgrbind: PreGeneraliz let pvalscheme1 = PrelimValScheme1(vspec.Id, explicitTyparInfo, tau, Some partialValReprInfo, memberInfoOpt, false, inlineFlag, NormalVal, argAttribs, vis, compgen) let pvalscheme2 = GeneralizeVal cenv denv enclosingDeclaredTypars generalizedTypars pvalscheme1 - let valscheme = UseCombinedArity cenv.g declKind expr pvalscheme2 + let valscheme = UseCombinedArity cenv.g declKind expr pvalscheme2 AdjustRecType vspec valscheme { ValScheme = valscheme @@ -10776,9 +10698,9 @@ and TcLetrecGeneralizeBinding cenv denv generalizedTypars (pgrbind: PreGeneraliz and TcLetrecComputeCtorSafeThisValBind cenv safeThisValOpt = - match safeThisValOpt with + match safeThisValOpt with | None -> None - | Some (v: Val) -> + | Some (v: Val) -> let m = v.Range let ty = destRefCellTy cenv.g v.Type Some (mkCompGenBind v (mkRefCell cenv.g m ty (mkNull m ty))) @@ -10786,55 +10708,55 @@ and TcLetrecComputeCtorSafeThisValBind cenv safeThisValOpt = and MakeCheckSafeInitField g tinst thisValOpt rfref reqExpr (expr: Expr) = let m = expr.Range let availExpr = - match thisValOpt with + match thisValOpt with | None -> mkStaticRecdFieldGet (rfref, tinst, m) - | Some thisVar -> + | Some thisVar -> // This is an instance method, it must have a 'this' var mkRecdFieldGetViaExprAddr (exprForVal m thisVar, rfref, tinst, m) let failureExpr = match thisValOpt with None -> mkCallFailStaticInit g m | Some _ -> mkCallFailInit g m mkCompGenSequential m (mkIfThen g m (mkILAsmClt g m availExpr reqExpr) failureExpr) expr and MakeCheckSafeInit g tinst safeInitInfo reqExpr expr = - match safeInitInfo with + match safeInitInfo with | SafeInitField (rfref, _) -> MakeCheckSafeInitField g tinst None rfref reqExpr expr | NoSafeInitInfo -> expr // Given a method binding (after generalization) // // method M = (fun -> ) -// +// // wrap the following around it if needed // -// method M = (fun baseVal -> -// check ctorSafeInitInfo +// method M = (fun baseVal -> +// check ctorSafeInitInfo // let ctorSafeThisVal = ref null // ) // -// The "check ctorSafeInitInfo" is only added for non-constructor instance members in a class where at least one type in the +// The "check ctorSafeInitInfo" is only added for non-constructor instance members in a class where at least one type in the // hierarchy has HasSelfReferentialConstructor // // The "let ctorSafeThisVal = ref null" is only added for explicit constructors with a self-reference parameter (Note: check later code for exact conditions) // For implicit constructors the binding is added to the bindings of the implicit constructor and TcLetrecAdjustMemberForSpecialVals cenv (pgrbind: PostGeneralizationRecursiveBinding) : PostSpecialValsRecursiveBinding = - + let (RecursiveBindingInfo(_, _, _, _, vspec, _, _, _, baseValOpt, safeThisValOpt, safeInitInfo, _, _, _)) = pgrbind.RecBindingInfo let expr = pgrbind.CheckedBinding.Expr let spBind = pgrbind.CheckedBinding.SeqPoint - - let expr = - match TcLetrecComputeCtorSafeThisValBind cenv safeThisValOpt with + + let expr = + match TcLetrecComputeCtorSafeThisValBind cenv safeThisValOpt with | None -> expr - | Some bind -> + | Some bind -> let m = expr.Range let tps, vsl, body, returnTy = stripTopLambda (expr, vspec.Type) mkMultiLambdas m tps vsl (mkLetBind m bind body, returnTy) // Add a call to CheckInit if necessary for instance members - let expr = + let expr = if vspec.IsInstanceMember && not vspec.IsExtensionMember && not vspec.IsConstructor then - match safeInitInfo with - | SafeInitField (rfref, _) -> + match safeInitInfo with + | SafeInitField (rfref, _) -> let m = expr.Range let tps, vsl, body, returnTy = stripTopLambda (expr, vspec.Type) // This is an instance member, it must have a 'this' @@ -10842,41 +10764,41 @@ and TcLetrecAdjustMemberForSpecialVals cenv (pgrbind: PostGeneralizationRecursiv let thisTypeInst = argsOfAppTy cenv.g thisVar.Type let newBody = MakeCheckSafeInitField cenv.g thisTypeInst (Some thisVar) rfref (mkOne cenv.g m) body mkMultiLambdas m tps vsl (newBody, returnTy) - | NoSafeInitInfo -> + | NoSafeInitInfo -> expr - + else expr - let expr = - match baseValOpt with + let expr = + match baseValOpt with | None -> expr - | _ -> + | _ -> let m = expr.Range let tps, vsl, body, returnTy = stripTopLambda (expr, vspec.Type) mkMemberLambdas m tps None baseValOpt vsl (body, returnTy) - + { ValScheme = pgrbind.ValScheme Binding = TBind(vspec, expr, spBind) } -and FixupLetrecBind cenv denv generalizedTyparsForRecursiveBlock (bind: PostSpecialValsRecursiveBinding) = +and FixupLetrecBind cenv denv generalizedTyparsForRecursiveBlock (bind: PostSpecialValsRecursiveBinding) = let (TBind(vspec, expr, spBind)) = bind.Binding - // Check coherence of generalization of variables for memberInfo members in generic classes - match vspec.MemberInfo with + // Check coherence of generalization of variables for memberInfo members in generic classes + match vspec.MemberInfo with #if EXTENDED_EXTENSION_MEMBERS // indicates if extension members can add additional constraints to type parameters - | Some _ when not vspec.IsExtensionMember -> + | Some _ when not vspec.IsExtensionMember -> #else - | Some _ -> + | Some _ -> #endif match PartitionValTyparsForApparentEnclosingType cenv.g vspec with - | Some(parentTypars, memberParentTypars, _, _, _) -> + | Some(parentTypars, memberParentTypars, _, _, _) -> ignore(SignatureConformance.Checker(cenv.g, cenv.amap, denv, SignatureRepackageInfo.Empty, false).CheckTypars vspec.Range TypeEquivEnv.Empty memberParentTypars parentTypars) - | None -> + | None -> errorR(Error(FSComp.SR.tcMemberIsNotSufficientlyGeneric(), vspec.Range)) | _ -> () - // Fixup recursive references... + // Fixup recursive references... let fixupPoints = GetAllUsesOfRecValue cenv vspec AdjustAndForgetUsesOfRecValue cenv (mkLocalValRef vspec) bind.ValScheme @@ -10885,12 +10807,12 @@ and FixupLetrecBind cenv denv generalizedTyparsForRecursiveBlock (bind: PostSpec { FixupPoints = fixupPoints Binding = TBind(vspec, expr, spBind) } - + //------------------------------------------------------------------------- // TcLetrec - for both expressions and class-let-rec-declarations //------------------------------------------------------------------------ -and unionGeneralizedTypars typarSets = List.foldBack (ListSet.unionFavourRight typarEq) typarSets [] +and unionGeneralizedTypars typarSets = List.foldBack (ListSet.unionFavourRight typarEq) typarSets [] and TcLetrec overridesOK cenv env tpenv (binds, bindsm, scopem) = @@ -10898,114 +10820,114 @@ and TcLetrec overridesOK cenv env tpenv (binds, bindsm, scopem) = let binds = binds |> List.map (fun (RecDefnBindingInfo(a, b, c, bind)) -> NormalizedRecBindingDefn(a, b, c, BindingNormalization.NormalizeBinding ValOrMemberBinding cenv env bind)) let uncheckedRecBinds, prelimRecValues, (tpenv, _) = AnalyzeAndMakeAndPublishRecursiveValues overridesOK cenv env tpenv binds - let envRec = AddLocalVals cenv.g cenv.tcSink scopem prelimRecValues env - - // Typecheck bindings - let uncheckedRecBindsTable = uncheckedRecBinds |> List.map (fun rbind -> rbind.RecBindingInfo.Val.Stamp, rbind) |> Map.ofList + let envRec = AddLocalVals cenv.tcSink scopem prelimRecValues env + + // Typecheck bindings + let uncheckedRecBindsTable = uncheckedRecBinds |> List.map (fun rbind -> rbind.RecBindingInfo.Val.Stamp, rbind) |> Map.ofList - let (_, generalizedRecBinds, preGeneralizationRecBinds, tpenv, _) = - ((env, [], [], tpenv, uncheckedRecBindsTable), uncheckedRecBinds) ||> List.fold (TcLetrecBinding (cenv, envRec, scopem, [], None)) + let (_, generalizedRecBinds, preGeneralizationRecBinds, tpenv, _) = + ((env, [], [], tpenv, uncheckedRecBindsTable), uncheckedRecBinds) ||> List.fold (TcLetrecBinding (cenv, envRec, scopem, [], None)) // There should be no bindings that have not been generalized since checking the vary last binding always // results in the generalization of all remaining ungeneralized bindings, since there are no remaining unchecked bindings - // to prevent the generalization + // to prevent the generalization assert preGeneralizationRecBinds.IsEmpty - + let generalizedRecBinds = generalizedRecBinds |> List.sortBy (fun pgrbind -> pgrbind.RecBindingInfo.Index) - let generalizedTyparsForRecursiveBlock = - generalizedRecBinds + let generalizedTyparsForRecursiveBlock = + generalizedRecBinds |> List.map (fun pgrbind -> pgrbind.GeneralizedTypars) |> unionGeneralizedTypars - let vxbinds = generalizedRecBinds |> List.map (TcLetrecAdjustMemberForSpecialVals cenv) + let vxbinds = generalizedRecBinds |> List.map (TcLetrecAdjustMemberForSpecialVals cenv) - // Now that we know what we've generalized we can adjust the recursive references - let vxbinds = vxbinds |> List.map (FixupLetrecBind cenv env.DisplayEnv generalizedTyparsForRecursiveBlock) - - // Now eliminate any initialization graphs - let binds = + // Now that we know what we've generalized we can adjust the recursive references + let vxbinds = vxbinds |> List.map (FixupLetrecBind cenv env.DisplayEnv generalizedTyparsForRecursiveBlock) + + // Now eliminate any initialization graphs + let binds = let bindsWithoutLaziness = vxbinds - let mustHaveArity = - match uncheckedRecBinds with + let mustHaveArity = + match uncheckedRecBinds with | [] -> false | (rbind :: _) -> DeclKind.MustHaveArity rbind.RecBindingInfo.DeclKind - - let results = - EliminateInitializationGraphs - cenv.g mustHaveArity env.DisplayEnv + + let results = + EliminateInitializationGraphs + cenv.g mustHaveArity env.DisplayEnv bindsWithoutLaziness - //(fun + //(fun (fun doBindings bindings -> doBindings bindings) (fun bindings -> bindings) (fun doBindings bindings -> [doBindings bindings]) bindsm List.concat results - - // Post letrec env - let envbody = AddLocalVals cenv.g cenv.tcSink scopem prelimRecValues env + + // Post letrec env + let envbody = AddLocalVals cenv.tcSink scopem prelimRecValues env binds, envbody, tpenv //------------------------------------------------------------------------- // Bind specifications of values -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -let TcAndPublishValSpec (cenv, env, containerInfo: ContainerInfo, declKind, memFlagsOpt, tpenv, valSpfn) = +let TcAndPublishValSpec (cenv, env, containerInfo: ContainerInfo, declKind, memFlagsOpt, tpenv, valSpfn) = - let (SynValSig (Attributes synAttrs, _, ValTyparDecls (synTypars, _, synCanInferTypars), _, _, isInline, mutableFlag, doc, vis, literalExprOpt, m)) = valSpfn + let (ValSpfn (Attributes synAttrs, _, SynValTyparDecls (synTypars, synCanInferTypars, _), _, _, isInline, mutableFlag, doc, vis, literalExprOpt, m)) = valSpfn GeneralizationHelpers.CheckDeclaredTyparsPermitted(memFlagsOpt, synTypars, m) let canInferTypars = GeneralizationHelpers.ComputeCanInferExtraGeneralizableTypars (containerInfo.ParentRef, synCanInferTypars, memFlagsOpt) - - let attrTgt = DeclKind.AllowedAttribTargets memFlagsOpt declKind + + let attrTgt = DeclKind.AllowedAttribTargets memFlagsOpt declKind let attrs = TcAttributes cenv env attrTgt synAttrs let newOk = if canInferTypars then NewTyparsOK else NoNewTypars let valinfos, tpenv = TcValSpec cenv env declKind newOk containerInfo memFlagsOpt None tpenv valSpfn attrs let denv = env.DisplayEnv - - (tpenv, valinfos) ||> List.mapFold (fun tpenv valSpecResult -> + + (tpenv, valinfos) ||> List.mapFold (fun tpenv valSpecResult -> let (ValSpecResult (altActualParent, memberInfoOpt, id, enclosingDeclaredTypars, declaredTypars, ty, partialValReprInfo, declKind)) = valSpecResult - + let inlineFlag = ComputeInlineFlag (memberInfoOpt |> Option.map (fun (PreValMemberInfo(memberInfo, _, _)) -> memberInfo.MemberFlags)) isInline mutableFlag m - + let freeInType = freeInTypeLeftToRight cenv.g false ty let allDeclaredTypars = enclosingDeclaredTypars @ declaredTypars let explicitTyparInfo = ExplicitTyparInfo(declaredTypars, declaredTypars, synCanInferTypars) - + let generalizedTypars = GeneralizationHelpers.ComputeAndGeneralizeGenericTypars(cenv, denv, id.idRange, emptyFreeTypars, canInferTypars, CanGeneralizeConstrainedTypars, inlineFlag, None, allDeclaredTypars, freeInType, ty, false) - + let valscheme1 = PrelimValScheme1(id, explicitTyparInfo, ty, Some partialValReprInfo, memberInfoOpt, mutableFlag, inlineFlag, NormalVal, noArgOrRetAttribs, vis, false) let valscheme2 = GeneralizeVal cenv denv enclosingDeclaredTypars generalizedTypars valscheme1 let tpenv = HideUnscopedTypars generalizedTypars tpenv - let valscheme = BuildValScheme declKind (Some partialValReprInfo) valscheme2 + let valscheme = BuildValScheme declKind (Some partialValReprInfo) valscheme2 - let literalValue = - match literalExprOpt with - | None -> + let literalValue = + match literalExprOpt with + | None -> let hasLiteralAttr = HasFSharpAttribute cenv.g cenv.g.attrib_LiteralAttribute attrs - if hasLiteralAttr then + if hasLiteralAttr then errorR(Error(FSComp.SR.tcLiteralAttributeRequiresConstantValue(), m)) None - - | Some e -> + + | Some e -> let hasLiteralAttr, literalValue = TcLiteral cenv ty env tpenv (attrs, e) - if not hasLiteralAttr then + if not hasLiteralAttr then errorR(Error(FSComp.SR.tcValueInSignatureRequiresLiteralAttribute(), e.Range)) literalValue - let paramNames = - match valscheme.ValReprInfo with + let paramNames = + match valscheme.ValReprInfo with | None -> None | Some topValInfo -> topValInfo.ArgNames @@ -11014,3 +10936,4 @@ let TcAndPublishValSpec (cenv, env, containerInfo: ContainerInfo, declKind, memF assert(vspec.InlineInfo = inlineFlag) vspec, tpenv) + diff --git a/src/fsharp/CheckExpressions.fsi b/src/fsharp/CheckExpressions.fsi index fa33a268406..e208ee42a81 100644 --- a/src/fsharp/CheckExpressions.fsi +++ b/src/fsharp/CheckExpressions.fsi @@ -3,10 +3,10 @@ module internal FSharp.Compiler.CheckExpressions open System -open Internal.Utilities.Collections -open Internal.Utilities.Library open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.ConstraintSolver @@ -16,11 +16,11 @@ open FSharp.Compiler.Infos open FSharp.Compiler.MethodOverrides open FSharp.Compiler.NameResolution open FSharp.Compiler.PatternMatchCompilation -open FSharp.Compiler.Syntax +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps +open FSharp.Compiler.XmlDoc open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps @@ -131,7 +131,7 @@ exception UnitTypeExpectedWithPossibleAssignment of DisplayEnv * TType * bool * exception FunctionValueUnexpected of DisplayEnv * TType * range exception UnionPatternsBindDifferentNames of range exception VarBoundTwice of Ident -exception ValueRestriction of DisplayEnv * InfoReader * bool * Val * Typar * range +exception ValueRestriction of DisplayEnv * bool * Val * Typar * range exception ValNotMutable of DisplayEnv * ValRef * range exception ValNotLocal of DisplayEnv * ValRef * range exception InvalidRuntimeCoercion of DisplayEnv * TType * TType * range @@ -309,7 +309,7 @@ type DeclKind = static member ImplicitlyStatic: DeclKind -> bool - static member AllowedAttribTargets: SynMemberFlags option -> DeclKind -> AttributeTargets + static member AllowedAttribTargets: MemberFlags option -> DeclKind -> AttributeTargets // Note: now always true static member CanGeneralizeConstrainedTypars: DeclKind -> bool @@ -404,7 +404,7 @@ type NormalizedBinding = pat: SynPat * rhsExpr: NormalizedBindingRhs * mBinding: range * - spBinding: DebugPointAtBinding + spBinding: DebugPointForBinding /// RecursiveBindingInfo - flows through initial steps of TcLetrec type RecursiveBindingInfo = @@ -508,13 +508,13 @@ val unionGeneralizedTypars: typarSets:Typar list list -> Typar list val AddDeclaredTypars: check: CheckForDuplicateTyparFlag -> typars: Typar list -> env: TcEnv -> TcEnv /// Add a value to the environment, producing a new environment. Report to the sink. -val AddLocalVal: g: TcGlobals -> NameResolution.TcResultsSink -> scopem: range -> v: Val -> TcEnv -> TcEnv +val AddLocalVal: NameResolution.TcResultsSink -> scopem: range -> v: Val -> TcEnv -> TcEnv /// Add a value to the environment, producing a new environment -val AddLocalValPrimitive: g: TcGlobals -> v: Val -> TcEnv -> TcEnv +val AddLocalValPrimitive: v: Val -> TcEnv -> TcEnv /// Add a list of values to the environment, producing a new environment. Report to the sink. -val AddLocalVals: g: TcGlobals -> tcSink: TcResultsSink -> scopem: range -> vals: Val list -> env: TcEnv -> TcEnv +val AddLocalVals: tcSink: TcResultsSink -> scopem: range -> vals: Val list -> env: TcEnv -> TcEnv /// Set the type of a 'Val' after it has been fully inferred. val AdjustRecType: vspec: Val -> vscheme: ValScheme -> unit @@ -523,10 +523,10 @@ val AdjustRecType: vspec: Val -> vscheme: ValScheme -> unit val AnalyzeAndMakeAndPublishRecursiveValue: overridesOK:OverridesOK -> isGeneratedEventVal:bool -> cenv:TcFileState -> env:TcEnv -> tpenv:UnscopedTyparEnv * recBindIdx:int -> NormalizedRecBindingDefn -> (PreCheckingRecursiveBinding list * Val list) * (UnscopedTyparEnv * int) /// Check that a member can be included in an interface -val CheckForNonAbstractInterface: declKind:DeclKind -> tcref:TyconRef -> memberFlags:SynMemberFlags -> m:range -> unit +val CheckForNonAbstractInterface: declKind:DeclKind -> tcref:TyconRef -> memberFlags:MemberFlags -> m:range -> unit /// Check the flags on a member definition for consistency -val CheckMemberFlags: optIntfSlotTy:'a option -> newslotsOK:NewSlotsOK -> overridesOK:OverridesOK -> memberFlags:SynMemberFlags -> m:range -> unit +val CheckMemberFlags: optIntfSlotTy:'a option -> newslotsOK:NewSlotsOK -> overridesOK:OverridesOK -> memberFlags:MemberFlags -> m:range -> unit /// Check a super type is valid val CheckSuperType: cenv:TcFileState -> ty:TType -> m:range -> unit @@ -603,7 +603,7 @@ val MakeAndPublishSimpleVals: cenv: TcFileState -> env: TcEnv -> names: NameMap< val MakeAndPublishSafeThisVal: cenv: TcFileState -> env: TcEnv -> thisIdOpt: Ident option -> thisTy: TType -> Val option /// Make initial information for a member value -val MakeMemberDataAndMangledNameForMemberVal: g: TcGlobals * tcref: TyconRef * isExtrinsic: bool * attrs: Attribs * optImplSlotTys: TType list * memberFlags: SynMemberFlags * valSynData: SynValInfo * id: Ident * isCompGen: bool -> PreValMemberInfo +val MakeMemberDataAndMangledNameForMemberVal: g: TcGlobals * tcref: TyconRef * isExtrinsic: bool * attrs: Attribs * optImplSlotTys: TType list * memberFlags: MemberFlags * valSynData: SynValInfo * id: Ident * isCompGen: bool -> PreValMemberInfo /// Return a new environment suitable for processing declarations in the interior of a type definition val MakeInnerEnvForTyconRef: env: TcEnv -> tcref: TyconRef -> isExtrinsicExtension: bool -> TcEnv @@ -635,7 +635,7 @@ val SetTyparRigid: DisplayEnv -> range -> Typar -> unit /// Check and publish a value specification (in a signature or 'abstract' member) to the /// module/namespace type accumulator and return the resulting Val(s). Normally only one /// 'Val' results but CLI events may produce both and add_Event and _remove_Event Val. -val TcAndPublishValSpec: cenv: TcFileState * env: TcEnv * containerInfo: ContainerInfo * declKind: DeclKind * memFlagsOpt: SynMemberFlags option * tpenv: UnscopedTyparEnv * valSpfn: SynValSig -> Val list * UnscopedTyparEnv +val TcAndPublishValSpec: cenv: TcFileState * env: TcEnv * containerInfo: ContainerInfo * declKind: DeclKind * memFlagsOpt: MemberFlags option * tpenv: UnscopedTyparEnv * valSpfn: SynValSig -> Val list * UnscopedTyparEnv /// Check a set of attributes val TcAttributes: cenv: TcFileState -> env: TcEnv -> attrTgt: AttributeTargets -> synAttribs: SynAttribute list -> Attrib list @@ -722,7 +722,7 @@ val TcTypeOrMeasureAndRecover: optKind: TyparKind option -> cenv: TcFileState -> val TcTypeAndRecover: cenv: TcFileState -> newOk: ImplicitlyBoundTyparsAllowed -> checkCxs: CheckConstraints -> occ: ItemOccurence -> env: TcEnv -> tpenv: UnscopedTyparEnv -> ty: SynType -> TType * UnscopedTyparEnv /// Check a specification of a value or member in a signature or an abstract member -val TcValSpec: cenv: TcFileState -> TcEnv -> DeclKind -> ImplicitlyBoundTyparsAllowed -> ContainerInfo -> SynMemberFlags option -> thisTyOpt: TType option -> UnscopedTyparEnv -> SynValSig -> Attrib list -> ValSpecResult list * UnscopedTyparEnv +val TcValSpec: cenv: TcFileState -> TcEnv -> DeclKind -> ImplicitlyBoundTyparsAllowed -> ContainerInfo -> MemberFlags option -> thisTyOpt: TType option -> UnscopedTyparEnv -> SynValSig -> Attrib list -> ValSpecResult list * UnscopedTyparEnv /// Given the declaration of a function or member, process it to produce the ValReprInfo /// giving the names and attributes relevant to arguments and return, but before type diff --git a/src/fsharp/CheckFormatStrings.fs b/src/fsharp/CheckFormatStrings.fs index 4556a9190f3..ced6b33b0fd 100644 --- a/src/fsharp/CheckFormatStrings.fs +++ b/src/fsharp/CheckFormatStrings.fs @@ -3,13 +3,14 @@ module internal FSharp.Compiler.CheckFormatStrings open System.Text -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras +open FSharp.Compiler +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.ConstraintSolver +open FSharp.Compiler.Lib open FSharp.Compiler.NameResolution -open FSharp.Compiler.Syntax +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TcGlobals @@ -23,7 +24,7 @@ let copyAndFixupFormatTypar m tp = let lowestDefaultPriority = 0 (* See comment on TyparConstraint.DefaultsTo *) let mkFlexibleFormatTypar m tys dflt = - let tp = Construct.NewTypar (TyparKind.Type, TyparRigidity.Rigid, SynTypar(mkSynId m "fmt",TyparStaticReq.HeadType,true),false,TyparDynamicReq.Yes,[],false,false) + let tp = Construct.NewTypar (TyparKind.Type,TyparRigidity.Rigid,Typar(mkSynId m "fmt",HeadTypeStaticReq,true),false,TyparDynamicReq.Yes,[],false,false) tp.SetConstraints [ TyparConstraint.SimpleChoice (tys,m); TyparConstraint.DefaultsTo (lowestDefaultPriority,dflt,m)] copyAndFixupFormatTypar m tp @@ -355,8 +356,8 @@ let parseFormatStringInternal (m: range) (fragRanges: range list) (g: TcGlobals) numStdArgs + (if widthArg then 1 else 0) + (if precisionArg then 1 else 0) specifierLocations.Add( (Range.mkFileIndexRange m.FileIndex - (Position.mkPos fragLine startFragCol) - (Position.mkPos fragLine (fragCol + 1))), numArgsForSpecifier) + (Range.mkPos fragLine startFragCol) + (Range.mkPos fragLine (fragCol + 1))), numArgsForSpecifier) | None -> () let ch = fmt.[i] @@ -366,8 +367,7 @@ let parseFormatStringInternal (m: range) (fragRanges: range list) (g: TcGlobals) appendToDotnetFormatString "%" parseLoop acc (i+1, fragLine, fragCol+1) fragments - | ('d' | 'i' | 'u' | 'B' | 'o' | 'x' | 'X') -> - if ch = 'B' then ErrorLogger.checkLanguageFeatureError g.langVersion Features.LanguageFeature.PrintfBinaryFormat m + | ('d' | 'i' | 'o' | 'u' | 'x' | 'X') -> if info.precision then failwithf "%s" <| FSComp.SR.forFormatDoesntSupportPrecision(ch.ToString()) collectSpecifierLocation fragLine fragCol 1 let i = skipPossibleInterpolationHole (i+1) diff --git a/src/fsharp/CheckFormatStrings.fsi b/src/fsharp/CheckFormatStrings.fsi index ffafb37d6c0..13b28964aed 100644 --- a/src/fsharp/CheckFormatStrings.fsi +++ b/src/fsharp/CheckFormatStrings.fsi @@ -7,10 +7,11 @@ module internal FSharp.Compiler.CheckFormatStrings +open FSharp.Compiler open FSharp.Compiler.NameResolution -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text +open FSharp.Compiler.Range open FSharp.Compiler.TypedTree +open FSharp.Compiler.TcGlobals val ParseFormatString : m: range -> fragmentRanges: range list -> g: TcGlobals -> isInterpolated: bool -> isFormattableString: bool -> formatStringCheckContext: FormatStringCheckContext option -> fmt: string -> printerArgTy: TType -> printerResidueTy: TType -> printerResultTy: TType -> TType list * TType * TType * TType[] * (range * int) list * string diff --git a/src/fsharp/CompilerConfig.fs b/src/fsharp/CompilerConfig.fs index 0bdc81698c5..812ea5d9dd8 100644 --- a/src/fsharp/CompilerConfig.fs +++ b/src/fsharp/CompilerConfig.fs @@ -4,32 +4,36 @@ module internal FSharp.Compiler.CompilerConfig open System +open System.Collections.Generic open System.Collections.Concurrent +open System.Diagnostics open System.IO +open System.Text + open Internal.Utilities -open Internal.Utilities.FSharpEnvironment -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras +open Internal.Utilities.Filename + open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILBinaryReader open FSharp.Compiler.AbstractIL.ILPdbWriter -open FSharp.Compiler.DependencyManager -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Internal.Utils +open FSharp.Compiler.DotNetFrameworkDependencies open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features -open FSharp.Compiler.IO -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Xml +open FSharp.Compiler.Lib +open FSharp.Compiler.Range +open FSharp.Compiler.ReferenceResolver open FSharp.Compiler.TypedTree -open FSharp.Compiler.BuildGraph + +open Microsoft.DotNet.DependencyManager #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping -open FSharp.Core.CompilerServices +open Microsoft.FSharp.Core.CompilerServices #endif let (++) x s = x @ [s] @@ -39,15 +43,10 @@ let (++) x s = x @ [s] //-------------------------------------------------------------------------- let FSharpSigFileSuffixes = [".mli";".fsi"] - let mlCompatSuffixes = [".mli";".ml"] - let FSharpImplFileSuffixes = [".ml";".fs";".fsscript";".fsx"] - let FSharpScriptFileSuffixes = [".fsscript";".fsx"] - let doNotRequireNamespaceOrModuleSuffixes = [".mli";".ml"] @ FSharpScriptFileSuffixes - let FSharpLightSyntaxFileSuffixes: string list = [ ".fs";".fsscript";".fsx";".fsi" ] //-------------------------------------------------------------------------- @@ -59,15 +58,15 @@ exception LoadedSourceNotFoundIgnoring of (*filename*) string * range /// Will return None if the filename is not found. let TryResolveFileUsingPaths(paths, m, name) = - let () = - try FileSystem.IsPathRootedShim name |> ignore - with :? ArgumentException as e -> error(Error(FSComp.SR.buildProblemWithFilename(name, e.Message), m)) - if FileSystem.IsPathRootedShim name && FileSystem.FileExistsShim name - then Some name + let () = + try FileSystem.IsPathRootedShim name |> ignore + with :? System.ArgumentException as e -> error(Error(FSComp.SR.buildProblemWithFilename(name, e.Message), m)) + if FileSystem.IsPathRootedShim name && FileSystem.SafeExists name + then Some name else - let res = paths |> List.tryPick (fun path -> + let res = paths |> List.tryPick (fun path -> let n = Path.Combine (path, name) - if FileSystem.FileExistsShim n then Some n + if FileSystem.SafeExists n then Some n else None) res @@ -77,7 +76,7 @@ let ResolveFileUsingPaths(paths, m, name) = | Some res -> res | None -> let searchMessage = String.concat "\n " paths - raise (FileNameNotResolved(name, searchMessage, m)) + raise (FileNameNotResolved(name, searchMessage, m)) let GetWarningNumber(m, warningNumber: string) = try @@ -92,25 +91,25 @@ let GetWarningNumber(m, warningNumber: string) = warning(Error(FSComp.SR.buildInvalidWarningNumber warningNumber, m)) None -let ComputeMakePathAbsolute implicitIncludeDir (path: string) = - try +let ComputeMakePathAbsolute implicitIncludeDir (path: string) = + try // remove any quotation marks from the path first let path = path.Replace("\"", "") - if not (FileSystem.IsPathRootedShim path) + if not (FileSystem.IsPathRootedShim path) then Path.Combine (implicitIncludeDir, path) - else path - with - :? System.ArgumentException -> path + else path + with + :? System.ArgumentException -> path //---------------------------------------------------------------------------- // Configuration //---------------------------------------------------------------------------- [] -type CompilerTarget = - | WinExe - | ConsoleExe - | Dll +type CompilerTarget = + | WinExe + | ConsoleExe + | Dll | Module member x.IsExe = (match x with ConsoleExe | WinExe -> true | _ -> false) @@ -121,38 +120,37 @@ type ResolveAssemblyReferenceMode = Speculative | ReportErrors type CopyFSharpCoreFlag = Yes | No /// Represents the file or string used for the --version flag -type VersionFlag = +type VersionFlag = | VersionString of string | VersionFile of string | VersionNone member x.GetVersionInfo implicitIncludeDir = let vstr = x.GetVersionString implicitIncludeDir - try + try IL.parseILVersion vstr with _ -> errorR(Error(FSComp.SR.buildInvalidVersionString vstr, rangeStartup)); IL.parseILVersion "0.0.0.0" - member x.GetVersionString implicitIncludeDir = - match x with + 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.FileExistsShim s) then + if not(FileSystem.SafeExists s) then errorR(Error(FSComp.SR.buildInvalidVersionFile s, rangeStartup)); "0.0.0.0" else - use fs = FileSystem.OpenFileForReadShim(s) - use is = new StreamReader(fs) + 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. -type IRawFSharpAssemblyData = +type IRawFSharpAssemblyData = /// The raw list AutoOpenAttribute attributes in the assembly - abstract GetAutoOpenAttributes: unit -> string list + abstract GetAutoOpenAttributes: ILGlobals -> string list /// The raw list InternalsVisibleToAttribute attributes in the assembly - abstract GetInternalsVisibleToAttributes: unit -> string list + abstract GetInternalsVisibleToAttributes: ILGlobals -> string list /// The raw IL module definition in the assembly, if any. This is not present for cross-project references /// in the language service @@ -176,49 +174,49 @@ type IRawFSharpAssemblyData = abstract HasAnyFSharpSignatureDataAttribute: bool - abstract HasMatchingFSharpSignatureDataAttribute: bool + abstract HasMatchingFSharpSignatureDataAttribute: ILGlobals -> bool /// Cache of time stamps as we traverse a project description -type TimeStampCache(defaultTimeStamp: DateTime) = +type TimeStampCache(defaultTimeStamp: DateTime) = let files = ConcurrentDictionary() let projects = ConcurrentDictionary(HashIdentity.Reference) - member cache.GetFileTimeStamp fileName = + member cache.GetFileTimeStamp fileName = let ok, v = files.TryGetValue fileName if ok then v else - let v = - try + let v = + try FileSystem.GetLastWriteTimeShim fileName - with + with | :? FileNotFoundException -> - defaultTimeStamp + defaultTimeStamp files.[fileName] <- v v - member cache.GetProjectReferenceTimeStamp (pr: IProjectReference) = + member cache.GetProjectReferenceTimeStamp (pr: IProjectReference, ctok) = let ok, v = projects.TryGetValue pr - if ok then v else - let v = defaultArg (pr.TryGetLogicalTimeStamp (cache)) defaultTimeStamp + if ok then v else + let v = defaultArg (pr.TryGetLogicalTimeStamp (cache, ctok)) defaultTimeStamp projects.[pr] <- v v -and IProjectReference = +and IProjectReference = /// The name of the assembly file generated by the project - abstract FileName: string + abstract FileName: string /// Evaluate raw contents of the assembly file generated by the project - abstract EvaluateRawContents: unit -> NodeCode + abstract EvaluateRawContents: CompilationThreadToken -> Cancellable /// Get the logical timestamp that would be the timestamp of the assembly file generated by the project /// /// For project references this is maximum of the timestamps of all dependent files. - /// The project is not actually built, nor are any assemblies read, but the timestamps for each dependent file + /// The project is not actually built, nor are any assemblies read, but the timestamps for each dependent file /// are read via the FileSystem. If the files don't exist, then a default timestamp is used. /// /// The operation returns None only if it is not possible to create an IncrementalBuilder for the project at all, e.g. if there /// are fatal errors in the options for the project. - abstract TryGetLogicalTimeStamp: TimeStampCache -> System.DateTime option + abstract TryGetLogicalTimeStamp: TimeStampCache * CompilationThreadToken -> System.DateTime option -type AssemblyReference = +type AssemblyReference = | AssemblyReference of range * string * IProjectReference option member x.Range = (let (AssemblyReference(m, _, _)) = x in m) @@ -227,14 +225,12 @@ type AssemblyReference = member x.ProjectReference = (let (AssemblyReference(_, _, contents)) = x in contents) - member x.SimpleAssemblyNameIs name = - (String.Compare(FileSystemUtils.fileNameWithoutExtensionWithValidate false x.Text, name, StringComparison.OrdinalIgnoreCase) = 0) || - not (x.Text.Contains "/") && - not (x.Text.Contains "\\") && - not (x.Text.EndsWith(".dll", StringComparison.InvariantCultureIgnoreCase)) && - not (x.Text.EndsWith(".exe", StringComparison.InvariantCultureIgnoreCase)) && - (try let aname = System.Reflection.AssemblyName x.Text in aname.Name = name - with _ -> false) + member x.SimpleAssemblyNameIs name = + (String.Compare(fileNameWithoutExtensionWithValidate false x.Text, name, StringComparison.OrdinalIgnoreCase) = 0) || + (let text = x.Text.ToLowerInvariant() + not (text.Contains "/") && not (text.Contains "\\") && not (text.Contains ".dll") && not (text.Contains ".exe") && + try let aname = System.Reflection.AssemblyName x.Text in aname.Name = name + with _ -> false) override x.ToString() = sprintf "AssemblyReference(%s)" x.Text @@ -244,7 +240,7 @@ type ResolvedExtensionReference = ResolvedExtensionReference of string * Assembl #endif type ImportedAssembly = - { ILScopeRef: ILScopeRef + { ILScopeRef: ILScopeRef FSharpViewOfMetadata: CcuThunk AssemblyAutoOpenAttributes: string list AssemblyInternalsVisibleToAttributes: string list @@ -311,7 +307,7 @@ type PackageManagerLine = static member SetLinesAsProcessed (packageKey:string) (packageManagerLines: Map): Map = let map = - packageManagerLines + packageManagerLines |> Map.map(fun key lines -> if key = packageKey then lines |> List.map(fun line -> {line with LineStatus = LStatus.Processed;}) @@ -324,8 +320,7 @@ type PackageManagerLine = [] type TcConfigBuilder = - { - mutable primaryAssembly: PrimaryAssembly + { mutable primaryAssembly: PrimaryAssembly mutable noFeedback: bool mutable stackReserveSize: int32 option mutable implicitIncludeDir: string (* normally "." *) @@ -337,7 +332,7 @@ type TcConfigBuilder = mutable implicitOpens: string list mutable useFsiAuxLib: bool mutable framework: bool - mutable resolutionEnvironment: LegacyResolutionEnvironment + mutable resolutionEnvironment: ReferenceResolver.ResolutionEnvironment mutable implicitlyResolveAssemblies: bool mutable light: bool option mutable conditionalCompilationDefines: string list @@ -352,7 +347,7 @@ type TcConfigBuilder = mutable useHighEntropyVA: bool mutable inputCodePage: int option mutable embedResources: string list - mutable errorSeverityOptions: FSharpDiagnosticOptions + mutable errorSeverityOptions: FSharpErrorSeverityOptions mutable mlCompatibility: bool mutable checkOverflow: bool mutable showReferenceResolutions: bool @@ -377,7 +372,6 @@ type TcConfigBuilder = mutable reportNumDecls: bool mutable printSignature: bool mutable printSignatureFile: string - mutable printAllSignatureFiles: bool mutable xmlDocOutputFile: string option mutable stats: bool mutable generateFilterBlocks: bool (* don't generate filter blocks due to bugs on Mono *) @@ -387,10 +381,10 @@ type TcConfigBuilder = mutable delaysign: bool mutable publicsign: bool - mutable version: VersionFlag + mutable version: VersionFlag mutable metadataVersion: string option mutable standalone: bool - mutable extraStaticLinkRoots: string list + mutable extraStaticLinkRoots: string list mutable noSignatureData: bool mutable onlyEssentialOptimizationData: bool mutable useOptimizationDataFile: bool @@ -398,19 +392,18 @@ type TcConfigBuilder = mutable portablePDB: bool mutable embeddedPDB: bool mutable embedAllSource: bool - mutable embedSourceList: string list + mutable embedSourceList: string list mutable sourceLink: string mutable ignoreSymbolStoreSequencePoints: bool mutable internConstantStrings: bool mutable extraOptimizationIterations: int - mutable win32icon: string - mutable win32res: string + mutable win32res: string mutable win32manifest: string mutable includewin32manifest: bool mutable linkResources: string list - mutable legacyReferenceResolver: LegacyReferenceResolver + mutable legacyReferenceResolver: ReferenceResolver.Resolver mutable showFullPaths: bool mutable errorStyle: ErrorStyle @@ -430,17 +423,16 @@ type TcConfigBuilder = mutable doTLR: bool (* run TLR pass? *) mutable doFinalSimplify: bool (* do final simplification pass *) mutable optsOn: bool (* optimizations are turned on *) - mutable optSettings: Optimizer.OptimizationSettings + mutable optSettings: Optimizer.OptimizationSettings mutable emitTailcalls: bool mutable deterministic: bool - mutable concurrentBuild: bool mutable preferredUiLang: string option mutable lcid: int option mutable productNameForBannerText: string - /// show the MS (c) notice, e.g. with help or fsi? + /// show the MS (c) notice, e.g. with help or fsi? mutable showBanner: bool - /// show times between passes? + /// show times between passes? mutable showTimes: bool mutable showLoadedAssemblies: bool mutable continueAfterParseFailure: bool @@ -449,7 +441,7 @@ type TcConfigBuilder = mutable showExtensionTypeMessages: bool #endif - /// pause between passes? + /// pause between passes? mutable pause: bool /// whenever possible, emit callvirt instead of call mutable alwaysCallVirt: bool @@ -475,13 +467,6 @@ type TcConfigBuilder = /// When false FSI will lock referenced assemblies requiring process restart, false = disable Shadow Copy false (*default*) mutable shadowCopyReferences: bool mutable useSdkRefs: bool - mutable fxResolver: FxResolver option - - /// specify the error range for FxResolver - rangeForErrors: range - - /// Override the SDK directory used by FxResolver, used for FCS only - sdkDirOverride: string option /// A function to call to try to get an object that acts as a snapshot of the metadata section of a .NET binary, /// and from which we can read the metadata. Only used when metadataOnly=true. @@ -494,57 +479,24 @@ type TcConfigBuilder = mutable pathMap: PathMap mutable langVersion: LanguageVersion - - mutable xmlDocInfoLoader: IXmlDocumentationInfoLoader option } - - // Directories to start probing in - // Algorithm: - // Search for native libraries using: - // 1. Include directories - // 2. compilerToolPath directories - // 3. reference dll's - // 4. The implicit include directory - // - // NOTE: it is important this is a delayed IEnumerable sequence. It is recomputed - // each time a resolution happens and additional paths may be added as a result. - member tcConfigB.GetNativeProbingRoots () = - seq { - yield! tcConfigB.includes - yield! tcConfigB.compilerToolPaths - yield! (tcConfigB.referencedDLLs |> Seq.map(fun ref -> Path.GetDirectoryName(ref.Text))) - yield tcConfigB.implicitIncludeDir - } - |> Seq.distinct - - static member CreateNew(legacyReferenceResolver, - defaultFSharpBinariesDir, - reduceMemoryUsage, - implicitIncludeDir, - isInteractive, - isInvalidationSupported, - defaultCopyFSharpCore, - tryGetMetadataSnapshot, - sdkDirOverride, - rangeForErrors) = - - if (String.IsNullOrEmpty defaultFSharpBinariesDir) then - failwith "Expected a valid defaultFSharpBinariesDir" - - // These are all default values, many can be overridden using the command line switch + static member Initial = { - primaryAssembly = PrimaryAssembly.Mscorlib + primaryAssembly = PrimaryAssembly.Mscorlib // default value, can be overridden using the command line switch light = None noFeedback = false stackReserveSize = None conditionalCompilationDefines = [] + implicitIncludeDir = String.Empty openDebugInformationForLaterStaticLinking = false + defaultFSharpBinariesDir = String.Empty compilingFslib = false useIncrementalBuilder = false + useFsiAuxLib = false implicitOpens = [] includes = [] - resolutionEnvironment = LegacyResolutionEnvironment.EditingOrCompilation false + resolutionEnvironment = ResolutionEnvironment.EditingOrCompilation false framework = true implicitlyResolveAssemblies = true compilerToolPaths = [] @@ -553,9 +505,10 @@ type TcConfigBuilder = projectReferences = [] knownUnresolvedReferences = [] loadedSources = [] - errorSeverityOptions = FSharpDiagnosticOptions.Default + errorSeverityOptions = FSharpErrorSeverityOptions.Default embedResources = [] inputCodePage = None + reduceMemoryUsage = ReduceMemoryFlag.Yes // always gets set explicitly subsystemVersion = 4, 0 // per spec for 357994 useHighEntropyVA = false mlCompatibility = false @@ -583,7 +536,6 @@ type TcConfigBuilder = reportNumDecls = false printSignature = false printSignatureFile = "" - printAllSignatureFiles = false xmlDocOutputFile = None stats = false generateFilterBlocks = false (* don't generate filter blocks *) @@ -614,11 +566,11 @@ type TcConfigBuilder = internConstantStrings = true extraOptimizationIterations = 0 - win32icon = "" win32res = "" win32manifest = "" includewin32manifest = true linkResources = [] + legacyReferenceResolver = null showFullPaths = false errorStyle = ErrorStyle.DefaultErrors @@ -638,10 +590,9 @@ type TcConfigBuilder = optSettings = Optimizer.OptimizationSettings.Defaults emitTailcalls = true deterministic = false - concurrentBuild = true preferredUiLang = None lcid = None - productNameForBannerText = FSharpProductName + productNameForBannerText = FSharpEnvironment.FSharpProductName showBanner = true showTimes = false showLoadedAssemblies = false @@ -649,52 +600,65 @@ type TcConfigBuilder = #if !NO_EXTENSIONTYPING showExtensionTypeMessages = false #endif - pause = false + pause = false alwaysCallVirt = true noDebugData = false + isInteractive = false + isInvalidationSupported = false emitDebugInfoInQuotations = false exename = None + copyFSharpCore = CopyFSharpCoreFlag.No shadowCopyReferences = false useSdkRefs = true - fxResolver = None + tryGetMetadataSnapshot = (fun _ -> None) internalTestSpanStackReferring = false noConditionalErasure = false pathMap = PathMap.empty langVersion = LanguageVersion("default") - implicitIncludeDir = implicitIncludeDir - defaultFSharpBinariesDir = defaultFSharpBinariesDir - reduceMemoryUsage = reduceMemoryUsage - legacyReferenceResolver = legacyReferenceResolver - isInteractive = isInteractive - isInvalidationSupported = isInvalidationSupported - copyFSharpCore = defaultCopyFSharpCore - tryGetMetadataSnapshot = tryGetMetadataSnapshot - useFsiAuxLib = isInteractive - rangeForErrors = rangeForErrors - sdkDirOverride = sdkDirOverride - xmlDocInfoLoader = None } - member tcConfigB.FxResolver = - // We compute the FxResolver on-demand. It depends on some configuration parameters - // which may be later adjusted. - match tcConfigB.fxResolver with - | None -> - let useDotNetFramework = (tcConfigB.primaryAssembly = PrimaryAssembly.Mscorlib) - let fxResolver = FxResolver(useDotNetFramework, tcConfigB.implicitIncludeDir, rangeForErrors=tcConfigB.rangeForErrors, useSdkRefs=tcConfigB.useSdkRefs, isInteractive=tcConfigB.isInteractive, sdkDirOverride=tcConfigB.sdkDirOverride) - tcConfigB.fxResolver <- Some fxResolver - fxResolver - | Some fxResolver -> fxResolver + // Directories to start probing in + // Algorithm: + // Search for native libraries using: + // 1. Include directories + // 2. compilerToolPath directories + // 3. reference dll's + // 4. The implicit include directory + // + // NOTE: it is important this is a delayed IEnumerable sequence. It is recomputed + // each time a resolution happens and additional paths may be added as a result. + member tcConfigB.GetNativeProbingRoots () = + seq { + yield! tcConfigB.includes + yield! tcConfigB.compilerToolPaths + yield! (tcConfigB.referencedDLLs |> Seq.map(fun ref -> Path.GetDirectoryName(ref.Text))) + yield tcConfigB.implicitIncludeDir + } + |> Seq.distinct + + static member CreateNew(legacyReferenceResolver, defaultFSharpBinariesDir, reduceMemoryUsage, implicitIncludeDir, + isInteractive, isInvalidationSupported, defaultCopyFSharpCore, tryGetMetadataSnapshot) = - member tcConfigB.SetPrimaryAssembly primaryAssembly = - tcConfigB.primaryAssembly <- primaryAssembly - tcConfigB.fxResolver <- None // this needs to be recreated when the primary assembly changes + Debug.Assert(FileSystem.IsPathRootedShim implicitIncludeDir, sprintf "implicitIncludeDir should be absolute: '%s'" implicitIncludeDir) - member tcConfigB.SetUseSdkRefs useSdkRefs = - tcConfigB.useSdkRefs <- useSdkRefs - tcConfigB.fxResolver <- None // this needs to be recreated when the primary assembly changes + if (String.IsNullOrEmpty defaultFSharpBinariesDir) then + failwith "Expected a valid defaultFSharpBinariesDir" - member tcConfigB.ResolveSourceFile(m, nm, pathLoadedFrom) = + let tcConfigBuilder = + { TcConfigBuilder.Initial with + implicitIncludeDir = implicitIncludeDir + defaultFSharpBinariesDir = defaultFSharpBinariesDir + reduceMemoryUsage = reduceMemoryUsage + legacyReferenceResolver = legacyReferenceResolver + isInteractive = isInteractive + isInvalidationSupported = isInvalidationSupported + copyFSharpCore = defaultCopyFSharpCore + tryGetMetadataSnapshot = tryGetMetadataSnapshot + useFsiAuxLib = isInteractive + } + tcConfigBuilder + + member tcConfigB.ResolveSourceFile(m, nm, pathLoadedFrom) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter ResolveFileUsingPaths(tcConfigB.includes @ [pathLoadedFrom], m, nm) @@ -703,22 +667,22 @@ type TcConfigBuilder = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter if sourceFiles = [] then errorR(Error(FSComp.SR.buildNoInputsSpecified(), rangeCmdArgs)) let ext() = match tcConfigB.target with CompilerTarget.Dll -> ".dll" | CompilerTarget.Module -> ".netmodule" | CompilerTarget.ConsoleExe | CompilerTarget.WinExe -> ".exe" - let implFiles = sourceFiles |> List.filter (fun lower -> List.exists (FileSystemUtils.checkSuffix (String.lowercase lower)) FSharpImplFileSuffixes) - let outfile = - match tcConfigB.outputFile, List.rev implFiles with + let implFiles = sourceFiles |> List.filter (fun lower -> List.exists (Filename.checkSuffix (String.lowercase lower)) FSharpImplFileSuffixes) + let outfile = + match tcConfigB.outputFile, List.rev implFiles with | None, [] -> "out" + ext() - | None, h :: _ -> - let basic = FileSystemUtils.fileNameOfPath h - let modname = try FileSystemUtils.chopExtension basic with _ -> basic + | None, h :: _ -> + let basic = fileNameOfPath h + let modname = try Filename.chopExtension basic with _ -> basic modname+(ext()) | Some f, _ -> f - let assemblyName = - let baseName = FileSystemUtils.fileNameOfPath outfile - (FileSystemUtils.fileNameWithoutExtension baseName) + let assemblyName = + let baseName = fileNameOfPath outfile + (fileNameWithoutExtension baseName) - let pdbfile = + let pdbfile = if tcConfigB.debuginfo then - Some (match tcConfigB.debugSymbolFile with + Some (match tcConfigB.debugSymbolFile with | None -> FSharp.Compiler.AbstractIL.ILPdbWriter.getDebugFileName outfile tcConfigB.portablePDB #if ENABLE_MONO_SUPPORT | Some _ when runningOnMono -> @@ -726,9 +690,9 @@ type TcConfigBuilder = warning(Error(FSComp.SR.ilwriteMDBFileNameCannotBeChangedWarning(), rangeCmdArgs)) FSharp.Compiler.AbstractIL.ILPdbWriter.getDebugFileName outfile tcConfigB.portablePDB #endif - | Some f -> f) + | Some f -> f) elif (tcConfigB.debugSymbolFile <> None) && (not (tcConfigB.debuginfo)) then - error(Error(FSComp.SR.buildPdbRequiresDebug(), rangeStartup)) + error(Error(FSComp.SR.buildPdbRequiresDebug(), rangeStartup)) else None tcConfigB.outputFile <- Some outfile @@ -736,9 +700,9 @@ type TcConfigBuilder = member tcConfigB.TurnWarningOff(m, s: string) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter - match GetWarningNumber(m, s) with + match GetWarningNumber(m, s) with | None -> () - | Some n -> + | Some n -> // nowarn:62 turns on mlCompatibility, e.g. shows ML compat items in intellisense menus if n = 62 then tcConfigB.mlCompatibility <- true tcConfigB.errorSeverityOptions <- @@ -746,33 +710,33 @@ type TcConfigBuilder = member tcConfigB.TurnWarningOn(m, s: string) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter - match GetWarningNumber(m, s) with + match GetWarningNumber(m, s) with | None -> () - | Some n -> + | Some n -> // warnon 62 turns on mlCompatibility, e.g. shows ML compat items in intellisense menus if n = 62 then tcConfigB.mlCompatibility <- false tcConfigB.errorSeverityOptions <- { tcConfigB.errorSeverityOptions with WarnOn = ListSet.insert (=) n tcConfigB.errorSeverityOptions.WarnOn } - member tcConfigB.AddIncludePath (m, path, pathIncludedFrom) = + member tcConfigB.AddIncludePath (m, path, pathIncludedFrom) = let absolutePath = ComputeMakePathAbsolute pathIncludedFrom path - let ok = - let existsOpt = - try Some(FileSystem.DirectoryExistsShim absolutePath) + let ok = + let existsOpt = + try Some(Directory.Exists absolutePath) 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)) + match existsOpt with + | Some exists -> + if not exists then warning(Error(FSComp.SR.buildSearchDirectoryNotFound absolutePath, m)) exists | None -> false - if ok && not (List.contains absolutePath tcConfigB.includes) then + if ok && not (List.contains absolutePath tcConfigB.includes) then tcConfigB.includes <- tcConfigB.includes ++ absolutePath member tcConfigB.AddLoadedSource(m, originalPath, pathLoadedFrom) = if FileSystem.IsInvalidPathShim originalPath then warning(Error(FSComp.SR.buildInvalidFilename originalPath, m)) - else - let path = + else + let path = match TryResolveFileUsingPaths(tcConfigB.includes @ [pathLoadedFrom], m, originalPath) with | Some path -> path | None -> @@ -781,19 +745,19 @@ type TcConfigBuilder = if not (List.contains path (List.map (fun (_, _, path) -> path) tcConfigB.loadedSources)) then tcConfigB.loadedSources <- tcConfigB.loadedSources ++ (m, originalPath, path) - member tcConfigB.AddEmbeddedSourceFile (file) = + member tcConfigB.AddEmbeddedSourceFile (file) = tcConfigB.embedSourceList <- tcConfigB.embedSourceList ++ file member tcConfigB.AddEmbeddedResource filename = tcConfigB.embedResources <- tcConfigB.embedResources ++ filename - member tcConfigB.AddCompilerToolsByPath (path) = + member tcConfigB.AddCompilerToolsByPath (path) = if not (tcConfigB.compilerToolPaths |> List.exists (fun text -> path = text)) then // NOTE: We keep same paths if range is different. let compilerToolPath = tcConfigB.compilerToolPaths |> List.tryPick (fun text -> if text = path then Some text else None) if compilerToolPath.IsNone then tcConfigB.compilerToolPaths <- tcConfigB.compilerToolPaths ++ path - member tcConfigB.AddReferencedAssemblyByPath (m, path) = + member tcConfigB.AddReferencedAssemblyByPath (m, path) = if FileSystem.IsInvalidPathShim path then warning(Error(FSComp.SR.buildInvalidAssemblyName(path), m)) elif not (tcConfigB.referencedDLLs |> List.exists (fun ar2 -> Range.equals m ar2.Range && path=ar2.Text)) then // NOTE: We keep same paths if range is different. @@ -834,27 +798,27 @@ type TcConfigBuilder = member tcConfigB.AddPathMapping (oldPrefix, newPrefix) = tcConfigB.pathMap <- tcConfigB.pathMap |> PathMap.addMapping oldPrefix newPrefix - + static member SplitCommandLineResourceInfo (ri: string) = let p = ri.IndexOf ',' if p <> -1 then - let file = String.sub ri 0 p - let rest = String.sub ri (p+1) (String.length ri - p - 1) - let p = rest.IndexOf ',' + let file = String.sub ri 0 p + let rest = String.sub ri (p+1) (String.length ri - p - 1) + let p = rest.IndexOf ',' if p <> -1 then - let name = String.sub rest 0 p+".resources" - let pubpri = String.sub rest (p+1) (rest.Length - p - 1) - if pubpri = "public" then file, name, ILResourceAccess.Public + let name = String.sub rest 0 p+".resources" + let pubpri = String.sub rest (p+1) (rest.Length - p - 1) + if pubpri = "public" then file, name, ILResourceAccess.Public elif pubpri = "private" then file, name, ILResourceAccess.Private else error(Error(FSComp.SR.buildInvalidPrivacy pubpri, rangeStartup)) - else + else file, rest, ILResourceAccess.Public - else - ri, FileSystemUtils.fileNameOfPath ri, ILResourceAccess.Public + else + ri, fileNameOfPath ri, ILResourceAccess.Public //---------------------------------------------------------------------------- -// TcConfig +// TcConfig //-------------------------------------------------------------------------- [] @@ -863,16 +827,16 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = // Validate the inputs - this helps ensure errors in options are shown in visual studio rather than only when built // However we only validate a minimal number of options at the moment - do if validate then try data.version.GetVersionInfo(data.implicitIncludeDir) |> ignore with e -> errorR e + do if validate then try data.version.GetVersionInfo(data.implicitIncludeDir) |> ignore with e -> errorR e // clone the input builder to ensure nobody messes with it. let data = { data with pause = data.pause } - let computeKnownDllReference libraryName = + let computeKnownDllReference libraryName = let defaultCoreLibraryReference = AssemblyReference(range0, libraryName+".dll", None) - let nameOfDll(r: AssemblyReference) = + let nameOfDll(r: AssemblyReference) = let filename = ComputeMakePathAbsolute data.implicitIncludeDir r.Text - if FileSystem.FileExistsShim filename then + if FileSystem.SafeExists filename then r, Some filename else // If the file doesn't exist, let reference resolution logic report the error later... @@ -889,7 +853,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = let dllReference, fileNameOpt = computeKnownDllReference getFSharpCoreLibraryName match fileNameOpt with | Some _ -> dllReference - | None -> AssemblyReference(range0, getDefaultFSharpCoreLocation(), None) + | None -> AssemblyReference(range0, getDefaultFSharpCoreLocation, None) // clrRoot: the location of the primary assembly (mscorlib.dll or netstandard.dll or System.Runtime.dll) // @@ -899,13 +863,13 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = // targetFrameworkVersion shouldn't matter since resolution has already happened. // In those cases where it does matter (e.g. --noframework is not being used or we are processing further // resolutions for a script) then it is correct to just use HighestInstalledNetFrameworkVersion(). - let clrRootValue, targetFrameworkVersionValue = + let clrRootValue, targetFrameworkVersionValue = match primaryAssemblyExplicitFilenameOpt with | Some primaryAssemblyFilename -> let filename = ComputeMakePathAbsolute data.implicitIncludeDir primaryAssemblyFilename - try + try let clrRoot = Some(Path.GetDirectoryName(FileSystem.GetFullPathShim filename)) - clrRoot, data.legacyReferenceResolver.Impl.HighestInstalledNetFrameworkVersion() + clrRoot, data.legacyReferenceResolver.HighestInstalledNetFrameworkVersion() with e -> // We no longer expect the above to fail but leaving this just in case error(Error(FSComp.SR.buildErrorOpeningBinaryFile(filename, e.Message), rangeStartup)) @@ -916,12 +880,11 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = None, "" else #endif - None, data.legacyReferenceResolver.Impl.HighestInstalledNetFrameworkVersion() + None, data.legacyReferenceResolver.HighestInstalledNetFrameworkVersion() - member x.FxResolver = data.FxResolver member x.primaryAssembly = data.primaryAssembly member x.noFeedback = data.noFeedback - member x.stackReserveSize = data.stackReserveSize + member x.stackReserveSize = data.stackReserveSize member x.implicitIncludeDir = data.implicitIncludeDir member x.openDebugInformationForLaterStaticLinking = data.openDebugInformationForLaterStaticLinking member x.fsharpBinariesDir = data.defaultFSharpBinariesDir @@ -970,7 +933,6 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = member x.reportNumDecls = data.reportNumDecls member x.printSignature = data.printSignature member x.printSignatureFile = data.printSignatureFile - member x.printAllSignatureFiles = data.printAllSignatureFiles member x.xmlDocOutputFile = data.xmlDocOutputFile member x.stats = data.stats member x.generateFilterBlocks = data.generateFilterBlocks @@ -995,7 +957,6 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = member x.ignoreSymbolStoreSequencePoints = data.ignoreSymbolStoreSequencePoints member x.internConstantStrings = data.internConstantStrings member x.extraOptimizationIterations = data.extraOptimizationIterations - member x.win32icon = data.win32icon member x.win32res = data.win32res member x.win32manifest = data.win32manifest member x.includewin32manifest = data.includewin32manifest @@ -1018,7 +979,6 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = member x.optSettings = data.optSettings member x.emitTailcalls = data.emitTailcalls member x.deterministic = data.deterministic - member x.concurrentBuild = data.concurrentBuild member x.pathMap = data.pathMap member x.langVersion = data.langVersion member x.preferredUiLang = data.preferredUiLang @@ -1041,39 +1001,37 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = member x.copyFSharpCore = data.copyFSharpCore member x.shadowCopyReferences = data.shadowCopyReferences member x.useSdkRefs = data.useSdkRefs - member x.sdkDirOverride = data.sdkDirOverride member x.tryGetMetadataSnapshot = data.tryGetMetadataSnapshot member x.internalTestSpanStackReferring = data.internalTestSpanStackReferring member x.noConditionalErasure = data.noConditionalErasure - member x.xmlDocInfoLoader = data.xmlDocInfoLoader - static member Create(builder, validate) = + static member Create(builder, validate) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter TcConfig(builder, validate) member x.legacyReferenceResolver = data.legacyReferenceResolver - member tcConfig.CloneToBuilder() = + member tcConfig.CloneToBuilder() = { data with conditionalCompilationDefines=data.conditionalCompilationDefines } - member tcConfig.ComputeCanContainEntryPoint(sourceFiles: string list) = - let n = sourceFiles.Length in + member tcConfig.ComputeCanContainEntryPoint(sourceFiles: string list) = + let n = sourceFiles.Length in (sourceFiles |> List.mapi (fun i _ -> (i = n-1)), tcConfig.target.IsExe) - + // This call can fail if no CLR is found (this is the path to mscorlib) - member tcConfig.GetTargetFrameworkDirectories() = + member tcConfig.GetTargetFrameworkDirectories() = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter - try - [ + try + [ // Check if we are given an explicit framework root - if so, use that - match tcConfig.clrRoot with + match tcConfig.clrRoot with | Some x -> let clrRoot = tcConfig.MakePathAbsolute x yield clrRoot let clrFacades = Path.Combine(clrRoot, "Facades") - if FileSystem.DirectoryExistsShim(clrFacades) then yield clrFacades + if Directory.Exists(clrFacades) then yield clrFacades - | None -> + | None -> // "there is no really good notion of runtime directory on .NETCore" #if NETSTANDARD let runtimeRoot = Path.GetDirectoryName(typeof.Assembly.Location) @@ -1085,75 +1043,75 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = let runtimeRootWPF = Path.Combine(runtimeRootWithoutSlash, "WPF") match tcConfig.resolutionEnvironment with - | LegacyResolutionEnvironment.CompilationAndEvaluation -> + | ResolutionEnvironment.CompilationAndEvaluation -> // Default compilation-and-execution-time references on .NET Framework and Mono, e.g. for F# Interactive // // In the current way of doing things, F# Interactive refers to implementation assemblies. yield runtimeRoot - if FileSystem.DirectoryExistsShim runtimeRootFacades then + if Directory.Exists runtimeRootFacades then yield runtimeRootFacades // System.Runtime.dll is in /usr/lib/mono/4.5/Facades - if FileSystem.DirectoryExistsShim runtimeRootWPF then + if Directory.Exists runtimeRootWPF then yield runtimeRootWPF // PresentationCore.dll is in C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF - match tcConfig.FxResolver.GetFrameworkRefsPackDirectory() with - | Some path when FileSystem.DirectoryExistsShim(path) -> + match frameworkRefsPackDirectory with + | Some path when Directory.Exists(path) -> yield path | _ -> () - | LegacyResolutionEnvironment.EditingOrCompilation _ -> + | ResolutionEnvironment.EditingOrCompilation _ -> #if ENABLE_MONO_SUPPORT - if runningOnMono then + if runningOnMono then // Default compilation-time references on Mono // // On Mono, the default references come from the implementation assemblies. // This is because we have had trouble reliably using MSBuild APIs to compute DotNetFrameworkReferenceAssembliesRootDirectory on Mono. yield runtimeRoot - if FileSystem.DirectoryExistsShim runtimeRootFacades then + if Directory.Exists runtimeRootFacades then yield runtimeRootFacades // System.Runtime.dll is in /usr/lib/mono/4.5/Facades - if FileSystem.DirectoryExistsShim runtimeRootWPF then + if Directory.Exists runtimeRootWPF then yield runtimeRootWPF // PresentationCore.dll is in C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF - // On Mono we also add a default reference to the 4.5-api and 4.5-api/Facades directories. + // On Mono we also add a default reference to the 4.5-api and 4.5-api/Facades directories. let runtimeRootApi = runtimeRootWithoutSlash + "-api" let runtimeRootApiFacades = Path.Combine(runtimeRootApi, "Facades") - if FileSystem.DirectoryExistsShim runtimeRootApi then + if Directory.Exists runtimeRootApi then yield runtimeRootApi - if FileSystem.DirectoryExistsShim runtimeRootApiFacades then + if Directory.Exists runtimeRootApiFacades then yield runtimeRootApiFacades - else + else #endif // Default compilation-time references on .NET Framework // // This is the normal case for "fsc.exe a.fs". We refer to the reference assemblies folder. - let frameworkRoot = tcConfig.legacyReferenceResolver.Impl.DotNetFrameworkReferenceAssembliesRootDirectory + let frameworkRoot = tcConfig.legacyReferenceResolver.DotNetFrameworkReferenceAssembliesRootDirectory let frameworkRootVersion = Path.Combine(frameworkRoot, tcConfig.targetFrameworkVersion) yield frameworkRootVersion let facades = Path.Combine(frameworkRootVersion, "Facades") - if FileSystem.DirectoryExistsShim facades then + if Directory.Exists facades then yield facades - match tcConfig.FxResolver.GetFrameworkRefsPackDirectory() with - | Some path when FileSystem.DirectoryExistsShim(path) -> + match frameworkRefsPackDirectory with + | Some path when Directory.Exists(path) -> yield path | _ -> () ] - with e -> - errorRecovery e range0; [] + with e -> + errorRecovery e range0; [] - member tcConfig.ComputeLightSyntaxInitialStatus filename = + member tcConfig.ComputeLightSyntaxInitialStatus filename = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter let lower = String.lowercase filename - let lightOnByDefault = List.exists (FileSystemUtils.checkSuffix lower) FSharpLightSyntaxFileSuffixes + let lightOnByDefault = List.exists (Filename.checkSuffix lower) FSharpLightSyntaxFileSuffixes if lightOnByDefault then (tcConfig.light <> Some false) else (tcConfig.light = Some true ) member tcConfig.GetAvailableLoadedSources() = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter let resolveLoadedSource (m, originalPath, path) = try - if not(FileSystem.FileExistsShim(path)) then - let secondTrial = + if not(FileSystem.SafeExists(path)) then + let secondTrial = tcConfig.includes |> List.tryPick (fun root -> let path = ComputeMakePathAbsolute root originalPath - if FileSystem.FileExistsShim(path) then Some path else None) + if FileSystem.SafeExists(path) then Some path else None) match secondTrial with | Some path -> Some(m,path) @@ -1163,23 +1121,23 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = else Some(m,path) with e -> errorRecovery e m; None - tcConfig.loadedSources - |> List.choose resolveLoadedSource - |> List.distinct + tcConfig.loadedSources + |> List.choose resolveLoadedSource + |> List.distinct - // This is not the complete set of search paths, it is just the set + // 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.GetSearchPathsForLibraryFiles() = + member tcConfig.GetSearchPathsForLibraryFiles() = [ yield! tcConfig.GetTargetFrameworkDirectories() yield! List.map (tcConfig.MakePathAbsolute) tcConfig.includes - yield tcConfig.implicitIncludeDir + yield tcConfig.implicitIncludeDir yield tcConfig.fsharpBinariesDir ] - member tcConfig.MakePathAbsolute path = + member tcConfig.MakePathAbsolute path = let result = ComputeMakePathAbsolute tcConfig.implicitIncludeDir path result - member _.ResolveSourceFile(m, filename, pathLoadedFrom) = + member _.ResolveSourceFile(m, filename, pathLoadedFrom) = data.ResolveSourceFile(m, filename, pathLoadedFrom) member _.PrimaryAssemblyDllReference() = primaryAssemblyReference @@ -1189,7 +1147,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = member _.GetNativeProbingRoots() = data.GetNativeProbingRoots() /// A closed set of assemblies where, for any subset S: - /// - the TcImports object built for S (and thus the F# Compiler CCUs for the assemblies in S) + /// - the TcImports object built for S (and thus the F# Compiler CCUs for the assemblies in S) /// is a resource that can be shared between any two IncrementalBuild objects that reference /// precisely S /// @@ -1199,25 +1157,22 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = /// 'framework' reference set that is potentially shared across multiple compilations. member tcConfig.IsSystemAssembly (filename: string) = try - FileSystem.FileExistsShim filename && + FileSystem.SafeExists filename && ((tcConfig.GetTargetFrameworkDirectories() |> List.exists (fun clrRoot -> clrRoot = Path.GetDirectoryName filename)) || - (tcConfig.FxResolver.GetSystemAssemblies().Contains (FileSystemUtils.fileNameWithoutExtension filename)) || - tcConfig.FxResolver.IsInReferenceAssemblyPackDirectory filename) + (systemAssemblies.Contains (fileNameWithoutExtension filename)) || + isInReferenceAssemblyPackDirectory filename) with _ -> false - member tcConfig.GenerateSignatureData = - not tcConfig.standalone && not tcConfig.noSignatureData + member tcConfig.GenerateSignatureData = + not tcConfig.standalone && not tcConfig.noSignatureData - member tcConfig.GenerateOptimizationData = + member tcConfig.GenerateOptimizationData = tcConfig.GenerateSignatureData - member tcConfig.assumeDotNetFramework = - tcConfig.primaryAssembly = PrimaryAssembly.Mscorlib - -/// Represents a computation to return a TcConfig. Normally this is just a constant immutable TcConfig, +/// Represents a computation to return a TcConfig. Normally this is just a constant immutable TcConfig, /// but for F# Interactive it may be based on an underlying mutable TcConfigBuilder. -type TcConfigProvider = +type TcConfigProvider = | TcConfigProvider of (CompilationThreadToken -> TcConfig) member x.Get ctok = (let (TcConfigProvider f) = x in f ctok) @@ -1227,5 +1182,5 @@ type TcConfigProvider = /// Get a TcConfigProvider which will continue to respect changes in the underlying /// TcConfigBuilder rather than delivering snapshots. static member BasedOnMutableBuilder tcConfigB = TcConfigProvider(fun _ctok -> TcConfig.Create(tcConfigB, validate=false)) - + let GetFSharpCoreLibraryName () = getFSharpCoreLibraryName diff --git a/src/fsharp/CompilerConfig.fsi b/src/fsharp/CompilerConfig.fsi index acb5f140b3d..ae0aed70338 100644 --- a/src/fsharp/CompilerConfig.fsi +++ b/src/fsharp/CompilerConfig.fsi @@ -4,35 +4,33 @@ module internal FSharp.Compiler.CompilerConfig open System -open FSharp.Compiler.IO + open Internal.Utilities -open Internal.Utilities.Library + open FSharp.Compiler -open FSharp.Compiler.Xml -open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILBinaryReader open FSharp.Compiler.AbstractIL.ILPdbWriter -open FSharp.Compiler.DependencyManager -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Text -open FSharp.Compiler.BuildGraph +open FSharp.Compiler.Range + +open Microsoft.DotNet.DependencyManager exception FileNameNotResolved of (*filename*) string * (*description of searched locations*) string * range exception LoadedSourceNotFoundIgnoring of (*filename*) string * range /// Represents a reference to an F# assembly. May be backed by a real assembly on disk (read by Abstract IL), or a cross-project /// reference in FSharp.Compiler.Service. -type IRawFSharpAssemblyData = +type IRawFSharpAssemblyData = /// The raw list AutoOpenAttribute attributes in the assembly - abstract GetAutoOpenAttributes: unit -> string list + abstract GetAutoOpenAttributes: ILGlobals -> string list /// The raw list InternalsVisibleToAttribute attributes in the assembly - abstract GetInternalsVisibleToAttributes: unit -> string list + abstract GetInternalsVisibleToAttributes: ILGlobals -> string list /// The raw IL module definition in the assembly, if any. This is not present for cross-project references /// in the language service @@ -40,7 +38,7 @@ type IRawFSharpAssemblyData = abstract HasAnyFSharpSignatureDataAttribute: bool - abstract HasMatchingFSharpSignatureDataAttribute: bool + abstract HasMatchingFSharpSignatureDataAttribute: ILGlobals -> bool /// The raw F# signature data in the assembly, if any abstract GetRawFSharpSignatureData: range * ilShortAssemName: string * fileName: string -> (string * (unit -> ReadOnlyByteMemory)) list @@ -58,36 +56,36 @@ type IRawFSharpAssemblyData = abstract ShortAssemblyName: string -type TimeStampCache = +type TimeStampCache = new: defaultTimeStamp: DateTime -> TimeStampCache member GetFileTimeStamp: string -> DateTime - member GetProjectReferenceTimeStamp: IProjectReference -> DateTime + member GetProjectReferenceTimeStamp: IProjectReference * CompilationThreadToken -> DateTime -and IProjectReference = +and IProjectReference = /// The name of the assembly file generated by the project - abstract FileName: string + abstract FileName: string /// Evaluate raw contents of the assembly file generated by the project - abstract EvaluateRawContents: unit -> NodeCode + abstract EvaluateRawContents: CompilationThreadToken -> Cancellable /// Get the logical timestamp that would be the timestamp of the assembly file generated by the project. /// /// For project references this is maximum of the timestamps of all dependent files. - /// The project is not actually built, nor are any assemblies read, but the timestamps for each dependent file + /// The project is not actually built, nor are any assemblies read, but the timestamps for each dependent file /// are read via the FileSystem. If the files don't exist, then a default timestamp is used. /// /// The operation returns None only if it is not possible to create an IncrementalBuilder for the project at all, e.g. if there /// are fatal errors in the options for the project. - abstract TryGetLogicalTimeStamp: TimeStampCache -> System.DateTime option + abstract TryGetLogicalTimeStamp: TimeStampCache * CompilationThreadToken -> System.DateTime option -type AssemblyReference = +type AssemblyReference = | AssemblyReference of range * string * IProjectReference option - + member Range: range - + member Text: string - + member ProjectReference: IProjectReference option member SimpleAssemblyNameIs: string -> bool @@ -95,18 +93,18 @@ type AssemblyReference = type UnresolvedAssemblyReference = UnresolvedAssemblyReference of string * AssemblyReference list [] -type CompilerTarget = - | WinExe - | ConsoleExe - | Dll +type CompilerTarget = + | WinExe + | ConsoleExe + | Dll | Module member IsExe: bool - + [] type CopyFSharpCoreFlag = Yes | No /// Represents the file or string used for the --version flag -type VersionFlag = +type VersionFlag = | VersionString of string | VersionFile of string | VersionNone @@ -151,7 +149,7 @@ type TcConfigBuilder = mutable implicitOpens: string list mutable useFsiAuxLib: bool mutable framework: bool - mutable resolutionEnvironment: LegacyResolutionEnvironment + mutable resolutionEnvironment: ReferenceResolver.ResolutionEnvironment mutable implicitlyResolveAssemblies: bool /// Set if the user has explicitly turned indentation-aware syntax on/off mutable light: bool option @@ -168,7 +166,7 @@ type TcConfigBuilder = mutable useHighEntropyVA: bool mutable inputCodePage: int option mutable embedResources: string list - mutable errorSeverityOptions: FSharpDiagnosticOptions + mutable errorSeverityOptions: FSharpErrorSeverityOptions mutable mlCompatibility:bool mutable checkOverflow:bool mutable showReferenceResolutions:bool @@ -192,18 +190,17 @@ type TcConfigBuilder = mutable reportNumDecls: bool mutable printSignature: bool mutable printSignatureFile: string - mutable printAllSignatureFiles: bool mutable xmlDocOutputFile: string option mutable stats: bool - mutable generateFilterBlocks: bool + mutable generateFilterBlocks: bool mutable signer: string option mutable container: string option mutable delaysign: bool mutable publicsign: bool - mutable version: VersionFlag + mutable version: VersionFlag mutable metadataVersion: string option mutable standalone: bool - mutable extraStaticLinkRoots: string list + mutable extraStaticLinkRoots: string list mutable noSignatureData: bool mutable onlyEssentialOptimizationData: bool mutable useOptimizationDataFile: bool @@ -216,12 +213,11 @@ type TcConfigBuilder = mutable ignoreSymbolStoreSequencePoints: bool mutable internConstantStrings: bool mutable extraOptimizationIterations: int - mutable win32icon: string - mutable win32res: string + mutable win32res: string mutable win32manifest: string mutable includewin32manifest: bool mutable linkResources: string list - mutable legacyReferenceResolver: LegacyReferenceResolver + mutable legacyReferenceResolver: ReferenceResolver.Resolver mutable showFullPaths: bool mutable errorStyle: ErrorStyle mutable utf8output: bool @@ -233,16 +229,15 @@ type TcConfigBuilder = #if DEBUG mutable showOptimizationData: bool #endif - mutable showTerms : bool - mutable writeTermsToFiles: bool - mutable doDetuple : bool - mutable doTLR : bool + mutable showTerms : bool + mutable writeTermsToFiles: bool + mutable doDetuple : bool + mutable doTLR : bool mutable doFinalSimplify: bool - mutable optsOn : bool - mutable optSettings : Optimizer.OptimizationSettings + mutable optsOn : bool + mutable optSettings : Optimizer.OptimizationSettings mutable emitTailcalls: bool mutable deterministic: bool - mutable concurrentBuild: bool mutable preferredUiLang: string option mutable lcid : int option mutable productNameForBannerText: string @@ -253,21 +248,18 @@ type TcConfigBuilder = #if !NO_EXTENSIONTYPING mutable showExtensionTypeMessages: bool #endif - mutable pause: bool + mutable pause: bool mutable alwaysCallVirt: bool mutable noDebugData: bool /// If true, indicates all type checking and code generation is in the context of fsi.exe - isInteractive: bool - isInvalidationSupported: bool + isInteractive: bool + isInvalidationSupported: bool mutable emitDebugInfoInQuotations: bool - mutable exename: string option + mutable exename: string option mutable copyFSharpCore: CopyFSharpCoreFlag mutable shadowCopyReferences: bool mutable useSdkRefs: bool - mutable fxResolver: FxResolver option - rangeForErrors: range - sdkDirOverride: string option /// A function to call to try to get an object that acts as a snapshot of the metadata section of a .NET binary, /// and from which we can read the metadata. Only used when metadataOnly=true. @@ -282,24 +274,22 @@ type TcConfigBuilder = mutable pathMap : PathMap mutable langVersion : LanguageVersion - - mutable xmlDocInfoLoader : IXmlDocumentationInfoLoader option } - static member CreateNew: - legacyReferenceResolver: LegacyReferenceResolver * - defaultFSharpBinariesDir: string * - reduceMemoryUsage: ReduceMemoryFlag * - implicitIncludeDir: string * - isInteractive: bool * + static member Initial: TcConfigBuilder + + static member CreateNew: + legacyReferenceResolver: ReferenceResolver.Resolver * + defaultFSharpBinariesDir: string * + reduceMemoryUsage: ReduceMemoryFlag * + implicitIncludeDir: string * + isInteractive: bool * isInvalidationSupported: bool * defaultCopyFSharpCore: CopyFSharpCoreFlag * - tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot * - sdkDirOverride: string option * - rangeForErrors: range + tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot -> TcConfigBuilder - member DecideNames: string list -> outfile: string * pdbfile: string option * assemblyName: string + member DecideNames: string list -> outfile: string * pdbfile: string option * assemblyName: string member TurnWarningOff: range * string -> unit @@ -328,12 +318,6 @@ type TcConfigBuilder = member AddLoadedSource: m: range * originalPath: string * pathLoadedFrom: string -> unit - member FxResolver: FxResolver - - member SetUseSdkRefs: useSdkRefs: bool -> unit - - member SetPrimaryAssembly: primaryAssembly: PrimaryAssembly -> unit - /// Immutable TcConfig, modifications are made via a TcConfigBuilder [] type TcConfig = @@ -360,7 +344,7 @@ type TcConfig = member reduceMemoryUsage: ReduceMemoryFlag member inputCodePage: int option member embedResources: string list - member errorSeverityOptions: FSharpDiagnosticOptions + member errorSeverityOptions: FSharpErrorSeverityOptions member mlCompatibility:bool member checkOverflow:bool member showReferenceResolutions:bool @@ -384,18 +368,17 @@ type TcConfig = member reportNumDecls: bool member printSignature: bool member printSignatureFile: string - member printAllSignatureFiles: bool member xmlDocOutputFile: string option member stats: bool - member generateFilterBlocks: bool + member generateFilterBlocks: bool member signer: string option member container: string option member delaysign: bool member publicsign: bool - member version: VersionFlag + member version: VersionFlag member metadataVersion: string option member standalone: bool - member extraStaticLinkRoots: string list + member extraStaticLinkRoots: string list member noSignatureData: bool member onlyEssentialOptimizationData: bool member useOptimizationDataFile: bool @@ -408,8 +391,7 @@ type TcConfig = member ignoreSymbolStoreSequencePoints: bool member internConstantStrings: bool member extraOptimizationIterations: int - member win32icon: string - member win32res: string + member win32res: string member win32manifest: string member includewin32manifest: bool member linkResources: string list @@ -424,18 +406,17 @@ type TcConfig = #if DEBUG member showOptimizationData: bool #endif - member showTerms : bool - member writeTermsToFiles: bool - member doDetuple : bool - member doTLR : bool + member showTerms : bool + member writeTermsToFiles: bool + member doDetuple : bool + member doTLR : bool member doFinalSimplify: bool - member optSettings : Optimizer.OptimizationSettings + member optSettings : Optimizer.OptimizationSettings member emitTailcalls: bool member deterministic: bool - member concurrentBuild: bool member pathMap: PathMap member preferredUiLang: string option - member optsOn : bool + member optsOn : bool member productNameForBannerText: string member showBanner : bool member showTimes: bool @@ -444,26 +425,22 @@ type TcConfig = #if !NO_EXTENSIONTYPING member showExtensionTypeMessages: bool #endif - member pause: bool + member pause: bool member alwaysCallVirt: bool member noDebugData: bool /// If true, indicates all type checking and code generation is in the context of fsi.exe member isInteractive: bool - member isInvalidationSupported: bool - - member xmlDocInfoLoader: IXmlDocumentationInfoLoader option - - member FxResolver: FxResolver + member isInvalidationSupported: bool member ComputeLightSyntaxInitialStatus: string -> bool member GetTargetFrameworkDirectories: unit -> string list - + /// Get the loaded sources that exist and issue a warning for the ones that don't member GetAvailableLoadedSources: unit -> (range*string) list - - member ComputeCanContainEntryPoint: sourceFiles:string list -> bool list *bool + + member ComputeCanContainEntryPoint: sourceFiles:string list -> bool list *bool /// File system query based on TcConfig settings member ResolveSourceFile: range * filename: string * pathLoadedFrom: string -> string @@ -471,7 +448,7 @@ type TcConfig = /// File system query based on TcConfig settings member MakePathAbsolute: string -> string - member resolutionEnvironment: LegacyResolutionEnvironment + member resolutionEnvironment: ReferenceResolver.ResolutionEnvironment member copyFSharpCore: CopyFSharpCoreFlag @@ -479,9 +456,7 @@ type TcConfig = member useSdkRefs: bool - member sdkDirOverride: string option - - member legacyReferenceResolver: LegacyReferenceResolver + member legacyReferenceResolver: ReferenceResolver.Resolver member emitDebugInfoInQuotations: bool @@ -517,18 +492,15 @@ type TcConfig = member CloneToBuilder: unit -> TcConfigBuilder /// Indicates if the compilation will result in F# signature data resource in the generated binary - member GenerateSignatureData: bool + member GenerateSignatureData: bool /// Indicates if the compilation will result in an F# optimization data resource in the generated binary member GenerateOptimizationData: bool - /// Check if the primary assembly is mscorlib - member assumeDotNetFramework: bool - /// Represents a computation to return a TcConfig. Normally this is just a constant immutable TcConfig, /// but for F# Interactive it may be based on an underlying mutable TcConfigBuilder. [] -type TcConfigProvider = +type TcConfigProvider = member Get: CompilationThreadToken -> TcConfig @@ -562,4 +534,4 @@ val FSharpLightSyntaxFileSuffixes: string list val doNotRequireNamespaceOrModuleSuffixes: string list -val mlCompatSuffixes: string list +val mlCompatSuffixes: string list \ No newline at end of file diff --git a/src/fsharp/CompilerDiagnostics.fs b/src/fsharp/CompilerDiagnostics.fs index bcbe770d69b..6cda66e36a9 100644 --- a/src/fsharp/CompilerDiagnostics.fs +++ b/src/fsharp/CompilerDiagnostics.fs @@ -8,11 +8,12 @@ open System.Diagnostics open System.IO open System.Text -open Internal.Utilities.Library.Extras -open Internal.Utilities.Library +open Internal.Utilities +open Internal.Utilities.Filename open Internal.Utilities.Text open FSharp.Compiler +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AttributeChecking open FSharp.Compiler.CheckExpressions open FSharp.Compiler.CheckDeclarations @@ -20,21 +21,18 @@ open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerImports open FSharp.Compiler.ConstraintSolver open FSharp.Compiler.DiagnosticMessage -open FSharp.Compiler.Diagnostics open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Infos -open FSharp.Compiler.IO open FSharp.Compiler.Lexhelp +open FSharp.Compiler.Lib open FSharp.Compiler.MethodCalls open FSharp.Compiler.MethodOverrides open FSharp.Compiler.NameResolution open FSharp.Compiler.ParseHelpers +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Range open FSharp.Compiler.SignatureConformance -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Position -open FSharp.Compiler.Text.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps @@ -44,7 +42,7 @@ open FSharp.Compiler.TypedTreeOps module internal CompilerService = let showAssertForUnexpectedException = ref true #endif // DEBUG - + /// This exception is an old-style way of reporting a diagnostic exception HashIncludeNotAllowedInNonScript of range @@ -75,149 +73,150 @@ exception DeprecatedCommandLineOptionNoDescription of string * range /// This exception is an old-style way of reporting a diagnostic exception InternalCommandLineOption of string * range -let GetRangeOfDiagnostic(err: PhasedDiagnostic) = +let GetRangeOfDiagnostic(err: PhasedDiagnostic) = let rec RangeFromException = function - | ErrorFromAddingConstraint(_, err2, _) -> RangeFromException err2 + | ErrorFromAddingConstraint(_, err2, _) -> RangeFromException err2 #if !NO_EXTENSIONTYPING | ExtensionTyping.ProvidedTypeResolutionNoRange e -> RangeFromException e | ExtensionTyping.ProvidedTypeResolution(m, _) #endif | ReservedKeyword(_, m) | IndentationProblem(_, m) - | ErrorFromAddingTypeEquation(_, _, _, _, _, m) - | ErrorFromApplyingDefault(_, _, _, _, _, m) + | ErrorFromAddingTypeEquation(_, _, _, _, _, m) + | ErrorFromApplyingDefault(_, _, _, _, _, m) | ErrorsFromAddingSubsumptionConstraint(_, _, _, _, _, _, m) | FunctionExpected(_, _, m) | BakedInMemberConstraintName(_, m) | StandardOperatorRedefinitionWarning(_, m) | BadEventTransformation m | ParameterlessStructCtor m - | FieldNotMutable (_, _, m) - | Recursion (_, _, _, _, m) - | InvalidRuntimeCoercion(_, _, _, m) + | FieldNotMutable (_, _, m) + | Recursion (_, _, _, _, m) + | InvalidRuntimeCoercion(_, _, _, m) | IndeterminateRuntimeCoercion(_, _, _, m) | IndeterminateStaticCoercion (_, _, _, m) | StaticCoercionShouldUseBox (_, _, _, m) | CoercionTargetSealed(_, _, m) | UpcastUnnecessary m - | QuotationTranslator.IgnoringPartOfQuotedTermWarning (_, m) - + | QuotationTranslator.IgnoringPartOfQuotedTermWarning (_, m) + | TypeTestUnnecessary m | RuntimeCoercionSourceSealed(_, _, m) | OverrideDoesntOverride(_, _, _, _, _, m) - | UnionPatternsBindDifferentNames m - | UnionCaseWrongArguments (_, _, _, m) - | TypeIsImplicitlyAbstract m - | RequiredButNotSpecified (_, _, _, _, m) + | UnionPatternsBindDifferentNames m + | UnionCaseWrongArguments (_, _, _, m) + | TypeIsImplicitlyAbstract m + | RequiredButNotSpecified (_, _, _, _, m) | FunctionValueUnexpected (_, _, m) | UnitTypeExpected (_, _, m) | UnitTypeExpectedWithEquality (_, _, m) | UnitTypeExpectedWithPossiblePropertySetter (_, _, _, _, m) | UnitTypeExpectedWithPossibleAssignment (_, _, _, _, m) - | UseOfAddressOfOperator m - | DeprecatedThreadStaticBindingWarning m - | NonUniqueInferredAbstractSlot (_, _, _, _, _, m) + | UseOfAddressOfOperator m + | DeprecatedThreadStaticBindingWarning m + | NonUniqueInferredAbstractSlot (_, _, _, _, _, m) | DefensiveCopyWarning (_, m) - | LetRecCheckedAtRuntime m + | LetRecCheckedAtRuntime m | UpperCaseIdentifierInPattern m | NotUpperCaseConstructor m - | RecursiveUseCheckedAtRuntime (_, _, m) - | LetRecEvaluatedOutOfOrder (_, _, _, m) + | RecursiveUseCheckedAtRuntime (_, _, m) + | LetRecEvaluatedOutOfOrder (_, _, _, m) | Error (_, m) | ErrorWithSuggestions (_, m, _, _) - | SyntaxError (_, m) + | NumberedError (_, m) + | SyntaxError (_, m) | InternalError (_, m) - | InterfaceNotRevealed(_, _, m) + | InterfaceNotRevealed(_, _, m) | WrappedError (_, m) | PatternMatchCompilation.MatchIncomplete (_, _, m) | PatternMatchCompilation.EnumMatchIncomplete (_, _, m) - | PatternMatchCompilation.RuleNeverMatched m + | PatternMatchCompilation.RuleNeverMatched m | ValNotMutable(_, _, m) - | ValNotLocal(_, _, m) - | MissingFields(_, m) + | ValNotLocal(_, _, m) + | MissingFields(_, m) | OverrideInIntrinsicAugmentation m - | IntfImplInIntrinsicAugmentation m + | IntfImplInIntrinsicAugmentation m | OverrideInExtrinsicAugmentation m - | IntfImplInExtrinsicAugmentation m - | ValueRestriction(_, _, _, _, _, m) - | LetRecUnsound (_, _, m) - | ObsoleteError (_, m) - | ObsoleteWarning (_, m) - | Experimental (_, m) + | IntfImplInExtrinsicAugmentation m + | ValueRestriction(_, _, _, _, m) + | LetRecUnsound (_, _, m) + | ObsoleteError (_, m) + | ObsoleteWarning (_, m) + | Experimental (_, m) | PossibleUnverifiableCode m - | UserCompilerMessage (_, _, m) - | Deprecated(_, m) - | LibraryUseOnly m - | FieldsFromDifferentTypes (_, _, _, m) + | UserCompilerMessage (_, _, m) + | Deprecated(_, m) + | LibraryUseOnly m + | FieldsFromDifferentTypes (_, _, _, m) | IndeterminateType m - | TyconBadArgs(_, _, _, m) -> + | TyconBadArgs(_, _, _, m) -> Some m - | FieldNotContained(_, _, _, arf, _, _) -> Some arf.Range - | ValueNotContained(_, _, _, aval, _, _) -> Some aval.Range - | ConstrNotContained(_, _, _, aval, _, _) -> Some aval.Id.idRange - | ExnconstrNotContained(_, _, aexnc, _, _) -> Some aexnc.Range + | FieldNotContained(_, arf, _, _) -> Some arf.Range + | ValueNotContained(_, _, aval, _, _) -> Some aval.Range + | ConstrNotContained(_, aval, _, _) -> Some aval.Id.idRange + | ExnconstrNotContained(_, aexnc, _, _) -> Some aexnc.Range - | VarBoundTwice id - | UndefinedName(_, _, id, _) -> - Some id.idRange + | VarBoundTwice id + | UndefinedName(_, _, id, _) -> + Some id.idRange - | Duplicate(_, _, m) - | NameClash(_, _, _, m, _, _, _) - | UnresolvedOverloading(_, _, _, m) + | Duplicate(_, _, m) + | NameClash(_, _, _, m, _, _, _) + | UnresolvedOverloading(_, _, _, m) | UnresolvedConversionOperator (_, _, _, m) | VirtualAugmentationOnNullValuedType m | NonVirtualAugmentationOnNullValuedType m | NonRigidTypar(_, _, _, _, _, m) - | ConstraintSolverTupleDiffLengths(_, _, _, m, _) - | ConstraintSolverInfiniteTypes(_, _, _, _, m, _) - | ConstraintSolverMissingConstraint(_, _, _, m, _) + | ConstraintSolverTupleDiffLengths(_, _, _, m, _) + | ConstraintSolverInfiniteTypes(_, _, _, _, m, _) + | ConstraintSolverMissingConstraint(_, _, _, m, _) | ConstraintSolverTypesNotInEqualityRelation(_, _, _, m, _, _) - | ConstraintSolverError(_, m, _) - | ConstraintSolverTypesNotInSubsumptionRelation(_, _, _, m, _) - | ConstraintSolverRelatedInformation(_, m, _) - | SelfRefObjCtor(_, m) -> + | ConstraintSolverError(_, m, _) + | ConstraintSolverTypesNotInSubsumptionRelation(_, _, _, m, _) + | ConstraintSolverRelatedInformation(_, m, _) + | SelfRefObjCtor(_, m) -> Some m - | NotAFunction(_, _, mfun, _) -> + | NotAFunction(_, _, mfun, _) -> Some mfun - - | NotAFunctionButIndexer(_, _, _, mfun, _) -> + + | NotAFunctionButIndexer(_, _, _, mfun, _) -> Some mfun | IllegalFileNameChar(_) -> Some rangeCmdArgs - | UnresolvedReferenceError(_, m) - | UnresolvedPathReference(_, _, m) - | DeprecatedCommandLineOptionFull(_, m) - | DeprecatedCommandLineOptionForHtmlDoc(_, m) - | DeprecatedCommandLineOptionSuggestAlternative(_, _, m) - | DeprecatedCommandLineOptionNoDescription(_, m) + | UnresolvedReferenceError(_, m) + | UnresolvedPathReference(_, _, m) + | DeprecatedCommandLineOptionFull(_, m) + | DeprecatedCommandLineOptionForHtmlDoc(_, m) + | DeprecatedCommandLineOptionSuggestAlternative(_, _, m) + | DeprecatedCommandLineOptionNoDescription(_, m) | InternalCommandLineOption(_, m) | HashIncludeNotAllowedInNonScript m - | HashReferenceNotAllowedInNonScript m - | HashDirectiveNotAllowedInNonScript m - | FileNameNotResolved(_, _, m) - | LoadedSourceNotFoundIgnoring(_, m) - | MSBuildReferenceResolutionWarning(_, _, m) - | MSBuildReferenceResolutionError(_, _, m) - | AssemblyNotResolved(_, m) - | HashLoadedSourceHasIssues(_, _, m) - | HashLoadedScriptConsideredSource m -> + | HashReferenceNotAllowedInNonScript m + | HashDirectiveNotAllowedInNonScript m + | FileNameNotResolved(_, _, m) + | LoadedSourceNotFoundIgnoring(_, m) + | MSBuildReferenceResolutionWarning(_, _, m) + | MSBuildReferenceResolutionError(_, _, m) + | AssemblyNotResolved(_, m) + | HashLoadedSourceHasIssues(_, _, m) + | HashLoadedScriptConsideredSource m -> Some m // Strip TargetInvocationException wrappers - | :? System.Reflection.TargetInvocationException as e -> + | :? System.Reflection.TargetInvocationException as e -> RangeFromException e.InnerException #if !NO_EXTENSIONTYPING | :? TypeProviderError as e -> e.Range |> Some #endif - + | _ -> None - + RangeFromException err.Exception -let GetDiagnosticNumber(err: PhasedDiagnostic) = - let rec GetFromException(e: exn) = +let GetDiagnosticNumber(err: PhasedDiagnostic) = + let rec GetFromException(e: exn) = match e with (* DO NOT CHANGE THESE NUMBERS *) | ErrorFromAddingTypeEquation _ -> 1 @@ -235,7 +234,7 @@ let GetDiagnosticNumber(err: PhasedDiagnostic) = | IndeterminateStaticCoercion _ -> 13 | StaticCoercionShouldUseBox _ -> 14 // 15 cannot be reused - | RuntimeCoercionSourceSealed _ -> 16 + | RuntimeCoercionSourceSealed _ -> 16 | OverrideDoesntOverride _ -> 17 | UnionPatternsBindDifferentNames _ -> 18 | UnionCaseWrongArguments _ -> 19 @@ -280,7 +279,7 @@ let GetDiagnosticNumber(err: PhasedDiagnostic) = | DeprecatedThreadStaticBindingWarning _ -> 56 | Experimental _ -> 57 | IndentationProblem _ -> 58 - | CoercionTargetSealed _ -> 59 + | CoercionTargetSealed _ -> 59 | OverrideInIntrinsicAugmentation _ -> 60 | NonVirtualAugmentationOnNullValuedType _ -> 61 | UserCompilerMessage (_, n, _) -> n @@ -296,19 +295,19 @@ let GetDiagnosticNumber(err: PhasedDiagnostic) = | IndeterminateType _ -> 72 | InternalError _ -> 73 | UnresolvedReferenceNoRange _ - | UnresolvedReferenceError _ - | UnresolvedPathReferenceNoRange _ + | UnresolvedReferenceError _ + | UnresolvedPathReferenceNoRange _ | UnresolvedPathReference _ -> 74 | DeprecatedCommandLineOptionFull _ | DeprecatedCommandLineOptionForHtmlDoc _ | DeprecatedCommandLineOptionSuggestAlternative _ - | DeprecatedCommandLineOptionNoDescription _ + | DeprecatedCommandLineOptionNoDescription _ | InternalCommandLineOption _ -> 75 - | HashIncludeNotAllowedInNonScript _ - | HashReferenceNotAllowedInNonScript _ + | HashIncludeNotAllowedInNonScript _ + | HashReferenceNotAllowedInNonScript _ | HashDirectiveNotAllowedInNonScript _ -> 76 | BakedInMemberConstraintName _ -> 77 - | FileNameNotResolved _ -> 78 + | FileNameNotResolved _ -> 78 | LoadedSourceNotFoundIgnoring _ -> 79 // 80 cannot be reused | ParameterlessStructCtor _ -> 81 @@ -334,14 +333,15 @@ let GetDiagnosticNumber(err: PhasedDiagnostic) = (* DO NOT CHANGE THE NUMBERS *) // Strip TargetInvocationException wrappers - | :? System.Reflection.TargetInvocationException as e -> + | :? System.Reflection.TargetInvocationException as e -> GetFromException e.InnerException - - | WrappedError(e, _) -> GetFromException e + + | WrappedError(e, _) -> GetFromException e | Error ((n, _), _) -> n | ErrorWithSuggestions ((n, _), _, _, _) -> n | Failure _ -> 192 + | NumberedError((n, _), _) -> n | IllegalFileNameChar(fileName, invalidChar) -> fst (FSComp.SR.buildUnexpectedFileNameCharacter(fileName, string invalidChar)) #if !NO_EXTENSIONTYPING | :? TypeProviderError as e -> e.Number @@ -349,58 +349,59 @@ let GetDiagnosticNumber(err: PhasedDiagnostic) = | ErrorsFromAddingSubsumptionConstraint (_, _, _, _, _, ContextInfo.DowncastUsedInsteadOfUpcast _, _) -> fst (FSComp.SR.considerUpcast("", "")) | _ -> 193 GetFromException err.Exception - -let GetWarningLevel err = - match err.Exception with + +let GetWarningLevel err = + match err.Exception with // Level 5 warnings | RecursiveUseCheckedAtRuntime _ | LetRecEvaluatedOutOfOrder _ | DefensiveCopyWarning _ -> 5 - | Error((n, _), _) - | ErrorWithSuggestions((n, _), _, _, _) -> + | NumberedError((n, _), _) + | ErrorWithSuggestions((n, _), _, _, _) + | Error((n, _), _) -> // 1178, tcNoComparisonNeeded1, "The struct, record or union type '%s' is not structurally comparable because the type parameter %s does not satisfy the 'comparison' constraint..." // 1178, tcNoComparisonNeeded2, "The struct, record or union type '%s' is not structurally comparable because the type '%s' does not satisfy the 'comparison' constraint...." // 1178, tcNoEqualityNeeded1, "The struct, record or union type '%s' does not support structural equality because the type parameter %s does not satisfy the 'equality' constraint..." // 1178, tcNoEqualityNeeded2, "The struct, record or union type '%s' does not support structural equality because the type '%s' does not satisfy the 'equality' constraint...." if (n = 1178) then 5 else 2 - // Level 2 + // Level 2 | _ -> 2 -let warningOn err level specificWarnOn = +let warningOn err level specificWarnOn = let n = GetDiagnosticNumber err List.contains n specificWarnOn || // Some specific warnings are never on by default, i.e. unused variable warnings - match n with + match n with | 1182 -> false // chkUnusedValue - off by default | 3180 -> false // abImplicitHeapAllocation - off by default - | _ -> level >= GetWarningLevel err + | _ -> level >= GetWarningLevel err -let SplitRelatedDiagnostics(err: PhasedDiagnostic) : PhasedDiagnostic * PhasedDiagnostic list = +let SplitRelatedDiagnostics(err: PhasedDiagnostic) : PhasedDiagnostic * PhasedDiagnostic list = let ToPhased e = {Exception=e; Phase = err.Phase} let rec SplitRelatedException = function - | ConstraintSolverRelatedInformation(fopt, m2, e) -> + | ConstraintSolverRelatedInformation(fopt, m2, e) -> let e, related = SplitRelatedException e ConstraintSolverRelatedInformation(fopt, m2, e.Exception)|>ToPhased, related | ErrorFromAddingTypeEquation(g, denv, t1, t2, e, m) -> let e, related = SplitRelatedException e ErrorFromAddingTypeEquation(g, denv, t1, t2, e.Exception, m)|>ToPhased, related - | ErrorFromApplyingDefault(g, denv, tp, defaultType, e, m) -> + | ErrorFromApplyingDefault(g, denv, tp, defaultType, e, m) -> let e, related = SplitRelatedException e ErrorFromApplyingDefault(g, denv, tp, defaultType, e.Exception, m)|>ToPhased, related - | ErrorsFromAddingSubsumptionConstraint(g, denv, t1, t2, e, contextInfo, m) -> + | ErrorsFromAddingSubsumptionConstraint(g, denv, t1, t2, e, contextInfo, m) -> let e, related = SplitRelatedException e ErrorsFromAddingSubsumptionConstraint(g, denv, t1, t2, e.Exception, contextInfo, m)|>ToPhased, related - | ErrorFromAddingConstraint(x, e, m) -> + | ErrorFromAddingConstraint(x, e, m) -> let e, related = SplitRelatedException e ErrorFromAddingConstraint(x, e.Exception, m)|>ToPhased, related - | WrappedError (e, m) -> + | WrappedError (e, m) -> let e, related = SplitRelatedException e WrappedError(e.Exception, m)|>ToPhased, related // Strip TargetInvocationException wrappers - | :? System.Reflection.TargetInvocationException as e -> + | :? System.Reflection.TargetInvocationException as e -> SplitRelatedException e.InnerException - | e -> + | e -> ToPhased e, [] SplitRelatedException err.Exception @@ -559,7 +560,7 @@ let FileNameNotResolvedE() = DeclareResourceString("FileNameNotResolved", "%s%s" let AssemblyNotResolvedE() = DeclareResourceString("AssemblyNotResolved", "%s") let HashLoadedSourceHasIssues1E() = DeclareResourceString("HashLoadedSourceHasIssues1", "") let HashLoadedSourceHasIssues2E() = DeclareResourceString("HashLoadedSourceHasIssues2", "") -let HashLoadedScriptConsideredSourceE() = DeclareResourceString("HashLoadedScriptConsideredSource", "") +let HashLoadedScriptConsideredSourceE() = DeclareResourceString("HashLoadedScriptConsideredSource", "") let InvalidInternalsVisibleToAssemblyName1E() = DeclareResourceString("InvalidInternalsVisibleToAssemblyName1", "%s%s") let InvalidInternalsVisibleToAssemblyName2E() = DeclareResourceString("InvalidInternalsVisibleToAssemblyName2", "%s") let LoadedSourceNotFoundIgnoringE() = DeclareResourceString("LoadedSourceNotFoundIgnoring", "%s") @@ -589,12 +590,12 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa os.Append " " |> ignore os.Append(DecompileOpName value) |> ignore - let rec OutputExceptionR (os: StringBuilder) error = + let rec OutputExceptionR (os: StringBuilder) error = match error with - | ConstraintSolverTupleDiffLengths(_, tl1, tl2, m, m2) -> + | ConstraintSolverTupleDiffLengths(_, tl1, tl2, m, m2) -> os.Append(ConstraintSolverTupleDiffLengthsE().Format tl1.Length tl2.Length) |> ignore - if m.StartLine <> m2.StartLine then + if m.StartLine <> m2.StartLine then os.Append(SeeAlsoE().Format (stringOfRange m)) |> ignore | ConstraintSolverInfiniteTypes(denv, contextInfo, t1, t2, m, m2) -> @@ -609,30 +610,30 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa os.Append(" " + FSComp.SR.yieldUsedInsteadOfYieldBang()) |> ignore | _ -> () - if m.StartLine <> m2.StartLine then + if m.StartLine <> m2.StartLine then os.Append(SeeAlsoE().Format (stringOfRange m)) |> ignore - | ConstraintSolverMissingConstraint(denv, tpr, tpc, m, m2) -> + | ConstraintSolverMissingConstraint(denv, tpr, tpc, m, m2) -> os.Append(ConstraintSolverMissingConstraintE().Format (NicePrint.stringOfTyparConstraint denv (tpr, tpc))) |> ignore - if m.StartLine <> m2.StartLine then + if m.StartLine <> m2.StartLine then os.Append(SeeAlsoE().Format (stringOfRange m)) |> ignore - | ConstraintSolverTypesNotInEqualityRelation(denv, (TType_measure _ as t1), (TType_measure _ as t2), m, m2, _) -> + | ConstraintSolverTypesNotInEqualityRelation(denv, (TType_measure _ as t1), (TType_measure _ as t2), m, m2, _) -> // REVIEW: consider if we need to show _cxs (the type parameter constraints) let t1, t2, _cxs = NicePrint.minimalStringsOfTwoTypes denv t1 t2 - + os.Append(ConstraintSolverTypesNotInEqualityRelation1E().Format t1 t2 ) |> ignore - + if m.StartLine <> m2.StartLine then os.Append(SeeAlsoE().Format (stringOfRange m)) |> ignore - | ConstraintSolverTypesNotInEqualityRelation(denv, t1, t2, m, m2, contextInfo) -> + | ConstraintSolverTypesNotInEqualityRelation(denv, t1, t2, m, m2, contextInfo) -> // REVIEW: consider if we need to show _cxs (the type parameter constraints) let t1, t2, _cxs = NicePrint.minimalStringsOfTwoTypes denv t1 t2 - + match contextInfo with | ContextInfo.IfExpression range when Range.equals range m -> os.Append(FSComp.SR.ifExpression(t1, t2)) |> ignore - | ContextInfo.CollectionElement (isArray, range) when Range.equals range m -> + | ContextInfo.CollectionElement (isArray, range) when Range.equals range m -> if isArray then os.Append(FSComp.SR.arrayElementHasWrongType(t1, t2)) |> ignore else @@ -642,34 +643,34 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | ContextInfo.FollowingPatternMatchClause range when Range.equals range m -> os.Append(FSComp.SR.followingPatternMatchClauseHasWrongType(t1, t2)) |> ignore | ContextInfo.PatternMatchGuard range when Range.equals range m -> os.Append(FSComp.SR.patternMatchGuardIsNotBool(t2)) |> ignore | _ -> os.Append(ConstraintSolverTypesNotInEqualityRelation2E().Format t1 t2) |> ignore - if m.StartLine <> m2.StartLine then + if m.StartLine <> m2.StartLine then os.Append(SeeAlsoE().Format (stringOfRange m)) |> ignore - | ConstraintSolverTypesNotInSubsumptionRelation(denv, t1, t2, m, m2) -> + | ConstraintSolverTypesNotInSubsumptionRelation(denv, t1, t2, m, m2) -> // REVIEW: consider if we need to show _cxs (the type parameter constraints) let t1, t2, cxs = NicePrint.minimalStringsOfTwoTypes denv t1 t2 os.Append(ConstraintSolverTypesNotInSubsumptionRelationE().Format t2 t1 cxs) |> ignore - if m.StartLine <> m2.StartLine then + if m.StartLine <> m2.StartLine then os.Append(SeeAlsoE().Format (stringOfRange m2)) |> ignore - | ConstraintSolverError(msg, m, m2) -> + | ConstraintSolverError(msg, m, m2) -> os.Append msg |> ignore - if m.StartLine <> m2.StartLine then + if m.StartLine <> m2.StartLine then os.Append(SeeAlsoE().Format (stringOfRange m2)) |> ignore - | ConstraintSolverRelatedInformation(fopt, _, e) -> - match e with + | ConstraintSolverRelatedInformation(fopt, _, e) -> + match e with | ConstraintSolverError _ -> OutputExceptionR os e | _ -> () fopt |> Option.iter (Printf.bprintf os " %s") - | ErrorFromAddingTypeEquation(g, denv, t1, t2, ConstraintSolverTypesNotInEqualityRelation(_, t1', t2', m, _, contextInfo), _) + | ErrorFromAddingTypeEquation(g, denv, t1, t2, ConstraintSolverTypesNotInEqualityRelation(_, t1', t2', m, _, contextInfo), _) when typeEquiv g t1 t1' && typeEquiv g t2 t2' -> let t1, t2, tpcs = NicePrint.minimalStringsOfTwoTypes denv t1 t2 match contextInfo with | ContextInfo.IfExpression range when Range.equals range m -> os.Append(FSComp.SR.ifExpression(t1, t2)) |> ignore - | ContextInfo.CollectionElement (isArray, range) when Range.equals range m -> + | ContextInfo.CollectionElement (isArray, range) when Range.equals range m -> if isArray then os.Append(FSComp.SR.arrayElementHasWrongType(t1, t2)) |> ignore else @@ -687,10 +688,10 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | _ -> os.Append(ErrorFromAddingTypeEquation1E().Format t2 t1 tpcs) |> ignore | ErrorFromAddingTypeEquation(_, _, _, _, ((ConstraintSolverTypesNotInEqualityRelation (_, _, _, _, _, contextInfo) ) as e), _) - when (match contextInfo with ContextInfo.NoContext -> false | _ -> true) -> + when (match contextInfo with ContextInfo.NoContext -> false | _ -> true) -> OutputExceptionR os e - | ErrorFromAddingTypeEquation(_, _, _, _, ((ConstraintSolverTypesNotInSubsumptionRelation _ | ConstraintSolverError _ ) as e), _) -> + | ErrorFromAddingTypeEquation(_, _, _, _, ((ConstraintSolverTypesNotInSubsumptionRelation _ | ConstraintSolverError _ ) as e), _) -> OutputExceptionR os e | ErrorFromAddingTypeEquation(g, denv, t1, t2, e, _) -> @@ -700,7 +701,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa OutputExceptionR os e - | ErrorFromApplyingDefault(_, denv, _, defaultType, e, _) -> + | ErrorFromApplyingDefault(_, denv, _, defaultType, e, _) -> let defaultType = NicePrint.minimalStringOfType denv defaultType os.Append(ErrorFromApplyingDefault1E().Format defaultType) |> ignore OutputExceptionR os e @@ -708,7 +709,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | ErrorsFromAddingSubsumptionConstraint(g, denv, t1, t2, e, contextInfo, _) -> match contextInfo with - | ContextInfo.DowncastUsedInsteadOfUpcast isOperator -> + | ContextInfo.DowncastUsedInsteadOfUpcast isOperator -> let t1, t2, _ = NicePrint.minimalStringsOfTwoTypes denv t1 t2 if isOperator then os.Append(FSComp.SR.considerUpcastOperator(t1, t2) |> snd) |> ignore @@ -717,26 +718,26 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | _ -> if not (typeEquiv g t1 t2) then let t1, t2, tpcs = NicePrint.minimalStringsOfTwoTypes denv t1 t2 - if t1 <> (t2 + tpcs) then + if t1 <> (t2 + tpcs) then os.Append(ErrorsFromAddingSubsumptionConstraintE().Format t2 t1 tpcs) |> ignore else OutputExceptionR os e else OutputExceptionR os e - | UpperCaseIdentifierInPattern(_) -> + | UpperCaseIdentifierInPattern(_) -> os.Append(UpperCaseIdentifierInPatternE().Format) |> ignore - | NotUpperCaseConstructor(_) -> + | NotUpperCaseConstructor(_) -> os.Append(NotUpperCaseConstructorE().Format) |> ignore - | ErrorFromAddingConstraint(_, e, _) -> + | ErrorFromAddingConstraint(_, e, _) -> OutputExceptionR os e #if !NO_EXTENSIONTYPING | ExtensionTyping.ProvidedTypeResolutionNoRange e - | ExtensionTyping.ProvidedTypeResolution(_, e) -> + | ExtensionTyping.ProvidedTypeResolution(_, e) -> OutputExceptionR os e | :? TypeProviderError as e -> @@ -744,7 +745,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa #endif | UnresolvedOverloading(denv, callerArgs, failure, m) -> - + // extract eventual information (return type and type parameters) // from ConstraintTraitInfo let knownReturnType, genericParameterTypes = @@ -752,31 +753,31 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | NoOverloadsFound (cx=Some cx) | PossibleCandidates (cx=Some cx) -> cx.ReturnType, cx.ArgumentTypes | _ -> None, [] - + // prepare message parts (known arguments, known return type, known generic parameters) let argsMessage, returnType, genericParametersMessage = - + let retTy = knownReturnType |> Option.defaultValue (TType.TType_var (Typar.NewUnlinked())) - - let argRepr = + + let argRepr = callerArgs.ArgumentNamesAndTypes |> List.map (fun (name,tTy) -> tTy, {ArgReprInfo.Name = name |> Option.map (fun name -> Ident(name, range.Zero)); ArgReprInfo.Attribs = []}) - + let argsL,retTyL,genParamTysL = NicePrint.prettyLayoutsOfUnresolvedOverloading denv argRepr retTy genericParameterTypes - + match callerArgs.ArgumentNamesAndTypes with - | [] -> None, LayoutRender.showL retTyL, LayoutRender.showL genParamTysL + | [] -> None, Layout.showL retTyL, Layout.showL genParamTysL | items -> - let args = LayoutRender.showL argsL + let args = Layout.showL argsL let prefixMessage = match items with | [_] -> FSComp.SR.csNoOverloadsFoundArgumentsPrefixSingular | _ -> FSComp.SR.csNoOverloadsFoundArgumentsPrefixPlural Some (prefixMessage args) - , LayoutRender.showL retTyL - , LayoutRender.showL genParamTysL + , Layout.showL retTyL + , Layout.showL genParamTysL let knownReturnType = match knownReturnType with @@ -796,12 +797,12 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa let nameOrOneBasedIndexMessage = x.calledArg.NameOpt |> Option.map (fun n -> FSComp.SR.csOverloadCandidateNamedArgumentTypeMismatch n.idText) - |> Option.defaultValue (FSComp.SR.csOverloadCandidateIndexedArgumentTypeMismatch ((vsnd x.calledArg.Position) + 1)) //snd + |> Option.defaultValue (FSComp.SR.csOverloadCandidateIndexedArgumentTypeMismatch ((Lib.vsnd x.calledArg.Position) + 1)) //snd sprintf " // %s" nameOrOneBasedIndexMessage | _ -> "" - - (NicePrint.stringOfMethInfo x.infoReader m displayEnv x.methodSlot.Method) + paramInfo - + + (NicePrint.stringOfMethInfo x.amap m displayEnv x.methodSlot.Method) + paramInfo + let nl = System.Environment.NewLine let formatOverloads (overloads: OverloadInformation list) = overloads @@ -809,7 +810,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa |> List.sort |> List.map FSComp.SR.formatDashItem |> String.concat nl - + // assemble final message composing the parts let msg = let optionalParts = @@ -818,11 +819,11 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa |> String.concat (nl + nl) |> function | "" -> nl | result -> nl + nl + result + nl + nl - + match failure with | NoOverloadsFound (methodName, overloads, _) -> FSComp.SR.csNoOverloadsFound methodName - + optionalParts + + optionalParts + (FSComp.SR.csAvailableOverloads (formatOverloads overloads)) | PossibleCandidates (methodName, [], _) -> FSComp.SR.csMethodIsOverloaded methodName @@ -830,10 +831,10 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa FSComp.SR.csMethodIsOverloaded methodName + optionalParts + FSComp.SR.csCandidates (formatOverloads overloads) - + os.Append msg |> ignore - | UnresolvedConversionOperator(denv, fromTy, toTy, _) -> + | UnresolvedConversionOperator(denv, fromTy, toTy, _) -> let t1, t2, _tpcs = NicePrint.minimalStringsOfTwoTypes denv fromTy toTy os.Append(FSComp.SR.csTypeDoesNotSupportConversion(t1, t2)) |> ignore @@ -843,7 +844,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | BakedInMemberConstraintName(nm, _) -> os.Append(BakedInMemberConstraintNameE().Format nm) |> ignore - | StandardOperatorRedefinitionWarning(msg, _) -> + | StandardOperatorRedefinitionWarning(msg, _) -> os.Append msg |> ignore | BadEventTransformation(_) -> @@ -866,58 +867,58 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa else os.Append(FSComp.SR.notAFunction()) |> ignore - | TyconBadArgs(_, tcref, d, _) -> + | TyconBadArgs(_, tcref, d, _) -> let exp = tcref.TyparsNoRange.Length if exp = 0 then os.Append(FSComp.SR.buildUnexpectedTypeArgs(fullDisplayTextOfTyconRef tcref, d)) |> ignore else os.Append(TyconBadArgsE().Format (fullDisplayTextOfTyconRef tcref) exp d) |> ignore - | IndeterminateType(_) -> + | IndeterminateType(_) -> os.Append(IndeterminateTypeE().Format) |> ignore - | NameClash(nm, k1, nm1, _, k2, nm2, _) -> - if nm = nm1 && nm1 = nm2 && k1 = k2 then + | NameClash(nm, k1, nm1, _, k2, nm2, _) -> + if nm = nm1 && nm1 = nm2 && k1 = k2 then os.Append(NameClash1E().Format k1 nm1) |> ignore else os.Append(NameClash2E().Format k1 nm1 nm k2 nm2) |> ignore - | Duplicate(k, s, _) -> - if k = "member" then + | Duplicate(k, s, _) -> + if k = "member" then os.Append(Duplicate1E().Format (DecompileOpName s)) |> ignore - else + else os.Append(Duplicate2E().Format k (DecompileOpName s)) |> ignore | UndefinedName(_, k, id, suggestionsF) -> os.Append(k (DecompileOpName id.idText)) |> ignore suggestNames suggestionsF id.idText - | InternalUndefinedItemRef(f, smr, ccuName, s) -> + | InternalUndefinedItemRef(f, smr, ccuName, s) -> let _, errs = f(smr, ccuName, s) - os.Append errs |> ignore + os.Append errs |> ignore - | FieldNotMutable _ -> + | FieldNotMutable _ -> os.Append(FieldNotMutableE().Format) |> ignore - | FieldsFromDifferentTypes (_, fref1, fref2, _) -> + | FieldsFromDifferentTypes (_, fref1, fref2, _) -> os.Append(FieldsFromDifferentTypesE().Format fref1.FieldName fref2.FieldName) |> ignore - | VarBoundTwice id -> + | VarBoundTwice id -> os.Append(VarBoundTwiceE().Format (DecompileOpName id.idText)) |> ignore - | Recursion (denv, id, ty1, ty2, _) -> + | Recursion (denv, id, ty1, ty2, _) -> let t1, t2, tpcs = NicePrint.minimalStringsOfTwoTypes denv ty1 ty2 os.Append(RecursionE().Format (DecompileOpName id.idText) t1 t2 tpcs) |> ignore - | InvalidRuntimeCoercion(denv, ty1, ty2, _) -> + | InvalidRuntimeCoercion(denv, ty1, ty2, _) -> let t1, t2, tpcs = NicePrint.minimalStringsOfTwoTypes denv ty1 ty2 os.Append(InvalidRuntimeCoercionE().Format t1 t2 tpcs) |> ignore - | IndeterminateRuntimeCoercion(denv, ty1, ty2, _) -> + | IndeterminateRuntimeCoercion(denv, ty1, ty2, _) -> let t1, t2, _cxs = NicePrint.minimalStringsOfTwoTypes denv ty1 ty2 os.Append(IndeterminateRuntimeCoercionE().Format t1 t2) |> ignore - | IndeterminateStaticCoercion(denv, ty1, ty2, _) -> + | IndeterminateStaticCoercion(denv, ty1, ty2, _) -> // REVIEW: consider if we need to show _cxs (the type parameter constraints) let t1, t2, _cxs = NicePrint.minimalStringsOfTwoTypes denv ty1 ty2 os.Append(IndeterminateStaticCoercionE().Format t1 t2) |> ignore @@ -927,59 +928,59 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa let t1, t2, _cxs = NicePrint.minimalStringsOfTwoTypes denv ty1 ty2 os.Append(StaticCoercionShouldUseBoxE().Format t1 t2) |> ignore - | TypeIsImplicitlyAbstract(_) -> + | TypeIsImplicitlyAbstract(_) -> os.Append(TypeIsImplicitlyAbstractE().Format) |> ignore - | NonRigidTypar(denv, tpnmOpt, typarRange, ty1, ty, _) -> + | NonRigidTypar(denv, tpnmOpt, typarRange, ty1, ty, _) -> // REVIEW: consider if we need to show _cxs (the type parameter constraints) let (ty1, ty), _cxs = PrettyTypes.PrettifyTypePair denv.g (ty1, ty) - match tpnmOpt with - | None -> + match tpnmOpt with + | None -> os.Append(NonRigidTypar1E().Format (stringOfRange typarRange) (NicePrint.stringOfTy denv ty)) |> ignore - | Some tpnm -> - match ty1 with - | TType_measure _ -> + | Some tpnm -> + match ty1 with + | TType_measure _ -> os.Append(NonRigidTypar2E().Format tpnm (NicePrint.stringOfTy denv ty)) |> ignore - | _ -> + | _ -> os.Append(NonRigidTypar3E().Format tpnm (NicePrint.stringOfTy denv ty)) |> ignore - | SyntaxError (ctxt, _) -> + | SyntaxError (ctxt, _) -> let ctxt = unbox>(ctxt) - - let (|EndOfStructuredConstructToken|_|) token = + + let (|EndOfStructuredConstructToken|_|) token = match token with - | Parser.TOKEN_ODECLEND - | Parser.TOKEN_OBLOCKSEP - | Parser.TOKEN_OEND - | Parser.TOKEN_ORIGHT_BLOCK_END + | Parser.TOKEN_ODECLEND + | Parser.TOKEN_OBLOCKSEP + | Parser.TOKEN_OEND + | Parser.TOKEN_ORIGHT_BLOCK_END | Parser.TOKEN_OBLOCKEND | Parser.TOKEN_OBLOCKEND_COMING_SOON | Parser.TOKEN_OBLOCKEND_IS_HERE -> Some() | _ -> None - let tokenIdToText tid = - match tid with + let tokenIdToText tid = + match tid with | Parser.TOKEN_IDENT -> getErrorString("Parser.TOKEN.IDENT") - | Parser.TOKEN_BIGNUM - | Parser.TOKEN_INT8 - | Parser.TOKEN_UINT8 - | Parser.TOKEN_INT16 - | Parser.TOKEN_UINT16 - | Parser.TOKEN_INT32 - | Parser.TOKEN_UINT32 - | Parser.TOKEN_INT64 - | Parser.TOKEN_UINT64 - | Parser.TOKEN_UNATIVEINT + | Parser.TOKEN_BIGNUM + | Parser.TOKEN_INT8 + | Parser.TOKEN_UINT8 + | Parser.TOKEN_INT16 + | Parser.TOKEN_UINT16 + | Parser.TOKEN_INT32 + | Parser.TOKEN_UINT32 + | Parser.TOKEN_INT64 + | Parser.TOKEN_UINT64 + | Parser.TOKEN_UNATIVEINT | Parser.TOKEN_NATIVEINT -> getErrorString("Parser.TOKEN.INT") - | Parser.TOKEN_IEEE32 + | Parser.TOKEN_IEEE32 | Parser.TOKEN_IEEE64 -> getErrorString("Parser.TOKEN.FLOAT") | Parser.TOKEN_DECIMAL -> getErrorString("Parser.TOKEN.DECIMAL") | Parser.TOKEN_CHAR -> getErrorString("Parser.TOKEN.CHAR") - + | Parser.TOKEN_BASE -> getErrorString("Parser.TOKEN.BASE") | Parser.TOKEN_LPAREN_STAR_RPAREN -> getErrorString("Parser.TOKEN.LPAREN.STAR.RPAREN") | Parser.TOKEN_DOLLAR -> getErrorString("Parser.TOKEN.DOLLAR") | Parser.TOKEN_INFIX_STAR_STAR_OP -> getErrorString("Parser.TOKEN.INFIX.STAR.STAR.OP") | Parser.TOKEN_INFIX_COMPARE_OP -> getErrorString("Parser.TOKEN.INFIX.COMPARE.OP") - | Parser.TOKEN_COLON_GREATER -> getErrorString("Parser.TOKEN.COLON.GREATER") + | Parser.TOKEN_COLON_GREATER -> getErrorString("Parser.TOKEN.COLON.GREATER") | Parser.TOKEN_COLON_COLON ->getErrorString("Parser.TOKEN.COLON.COLON") | Parser.TOKEN_PERCENT_OP -> getErrorString("Parser.TOKEN.PERCENT.OP") | Parser.TOKEN_INFIX_AT_HAT_OP -> getErrorString("Parser.TOKEN.INFIX.AT.HAT.OP") @@ -1010,7 +1011,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | Parser.TOKEN_GREATER_BAR_RBRACK -> getErrorString("Parser.TOKEN.GREATER.BAR.RBRACK") | Parser.TOKEN_MINUS -> getErrorString("Parser.TOKEN.MINUS") | Parser.TOKEN_ADJACENT_PREFIX_OP -> getErrorString("Parser.TOKEN.ADJACENT.PREFIX.OP") - | Parser.TOKEN_FUNKY_OPERATOR_NAME -> getErrorString("Parser.TOKEN.FUNKY.OPERATOR.NAME") + | Parser.TOKEN_FUNKY_OPERATOR_NAME -> getErrorString("Parser.TOKEN.FUNKY.OPERATOR.NAME") | Parser.TOKEN_COMMA-> getErrorString("Parser.TOKEN.COMMA") | Parser.TOKEN_DOT -> getErrorString("Parser.TOKEN.DOT") | Parser.TOKEN_BAR-> getErrorString("Parser.TOKEN.BAR") @@ -1029,7 +1030,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | Parser.TOKEN_BAR_RBRACK -> getErrorString("Parser.TOKEN.BAR.RBRACK") | Parser.TOKEN_BAR_RBRACE -> getErrorString("Parser.TOKEN.BAR.RBRACE") | Parser.TOKEN_GREATER_RBRACK -> getErrorString("Parser.TOKEN.GREATER.RBRACK") - | Parser.TOKEN_RQUOTE_DOT _ + | Parser.TOKEN_RQUOTE_DOT _ | Parser.TOKEN_RQUOTE -> getErrorString("Parser.TOKEN.RQUOTE") | Parser.TOKEN_RBRACK -> getErrorString("Parser.TOKEN.RBRACK") | Parser.TOKEN_RBRACE | Parser.TOKEN_RBRACE_COMING_SOON | Parser.TOKEN_RBRACE_IS_HERE -> getErrorString("Parser.TOKEN.RBRACE") @@ -1048,17 +1049,17 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | Parser.TOKEN_MEMBER -> getErrorString("Parser.TOKEN.MEMBER") | Parser.TOKEN_STATIC -> getErrorString("Parser.TOKEN.STATIC") | Parser.TOKEN_NAMESPACE-> getErrorString("Parser.TOKEN.NAMESPACE") - | Parser.TOKEN_OBLOCKBEGIN -> getErrorString("Parser.TOKEN.OBLOCKBEGIN") - | EndOfStructuredConstructToken -> getErrorString("Parser.TOKEN.OBLOCKEND") - | Parser.TOKEN_THEN + | Parser.TOKEN_OBLOCKBEGIN -> getErrorString("Parser.TOKEN.OBLOCKBEGIN") + | EndOfStructuredConstructToken -> getErrorString("Parser.TOKEN.OBLOCKEND") + | Parser.TOKEN_THEN | Parser.TOKEN_OTHEN -> getErrorString("Parser.TOKEN.OTHEN") | Parser.TOKEN_ELSE | Parser.TOKEN_OELSE -> getErrorString("Parser.TOKEN.OELSE") - | Parser.TOKEN_LET(_) + | Parser.TOKEN_LET(_) | Parser.TOKEN_OLET(_) -> getErrorString("Parser.TOKEN.OLET") - | Parser.TOKEN_OBINDER + | Parser.TOKEN_OBINDER | Parser.TOKEN_BINDER -> getErrorString("Parser.TOKEN.BINDER") - | Parser.TOKEN_OAND_BANG + | Parser.TOKEN_OAND_BANG | Parser.TOKEN_AND_BANG -> getErrorString("Parser.TOKEN.AND.BANG") | Parser.TOKEN_ODO -> getErrorString("Parser.TOKEN.ODO") | Parser.TOKEN_OWITH -> getErrorString("Parser.TOKEN.OWITH") @@ -1066,7 +1067,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | Parser.TOKEN_OFUN -> getErrorString("Parser.TOKEN.OFUN") | Parser.TOKEN_ORESET -> getErrorString("Parser.TOKEN.ORESET") | Parser.TOKEN_ODUMMY -> getErrorString("Parser.TOKEN.ODUMMY") - | Parser.TOKEN_DO_BANG + | Parser.TOKEN_DO_BANG | Parser.TOKEN_ODO_BANG -> getErrorString("Parser.TOKEN.ODO.BANG") | Parser.TOKEN_YIELD -> getErrorString("Parser.TOKEN.YIELD") | Parser.TOKEN_YIELD_BANG -> getErrorString("Parser.TOKEN.YIELD.BANG") @@ -1124,9 +1125,9 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | Parser.TOKEN_BEGIN -> getErrorString("Parser.TOKEN.BEGIN") | Parser.TOKEN_END -> getErrorString("Parser.TOKEN.END") | Parser.TOKEN_HASH_LIGHT - | Parser.TOKEN_HASH_LINE - | Parser.TOKEN_HASH_IF - | Parser.TOKEN_HASH_ELSE + | Parser.TOKEN_HASH_LINE + | Parser.TOKEN_HASH_IF + | Parser.TOKEN_HASH_ELSE | Parser.TOKEN_HASH_ENDIF -> getErrorString("Parser.TOKEN.HASH.ENDIF") | Parser.TOKEN_INACTIVECODE -> getErrorString("Parser.TOKEN.INACTIVECODE") | Parser.TOKEN_LEX_FAILURE-> getErrorString("Parser.TOKEN.LEX.FAILURE") @@ -1144,7 +1145,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | Parser.TOKEN_INTERP_STRING_BEGIN_PART -> getErrorString("Parser.TOKEN.INTERP.STRING.BEGIN.PART") | Parser.TOKEN_INTERP_STRING_PART -> getErrorString("Parser.TOKEN.INTERP.STRING.PART") | Parser.TOKEN_INTERP_STRING_END -> getErrorString("Parser.TOKEN.INTERP.STRING.END") - | unknown -> + | unknown -> Debug.Assert(false, "unknown token tag") let result = sprintf "%+A" unknown Debug.Assert(false, result) @@ -1152,25 +1153,25 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa #if DEBUG if showParserStackOnParseError then - printfn "parser stack:" - for rps in ctxt.ReducibleProductions do - printfn " ----" + printfn "parser stack:" + for rps in ctxt.ReducibleProductions do + printfn " ----" //printfn " state %d" state for rp in rps do printfn " non-terminal %+A: ... " (Parser.prodIdxToNonTerminal rp) #endif - match ctxt.CurrentToken with + match ctxt.CurrentToken with | None -> os.Append(UnexpectedEndOfInputE().Format) |> ignore - | Some token -> - match (token |> Parser.tagOfToken |> Parser.tokenTagToTokenId), token with + | Some token -> + match (token |> Parser.tagOfToken |> Parser.tokenTagToTokenId), token with | EndOfStructuredConstructToken, _ -> os.Append(OBlockEndSentenceE().Format) |> ignore | Parser.TOKEN_LEX_FAILURE, Parser.LEX_FAILURE str -> Printf.bprintf os "%s" str (* Fix bug://2431 *) | token, _ -> os.Append(UnexpectedE().Format (token |> tokenIdToText)) |> ignore (* Search for a state producing a single recognized non-terminal in the states on the stack *) let foundInContext = - + (* Merge a bunch of expression non terminals *) let (|NONTERM_Category_Expr|_|) = function | Parser.NONTERM_argExpr|Parser.NONTERM_minusExpr|Parser.NONTERM_parenExpr|Parser.NONTERM_atomicExpr @@ -1178,17 +1179,17 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | Parser.NONTERM_typedSeqExprBlock | Parser.NONTERM_interactiveExpr -> Some() | _ -> None - + (* Merge a bunch of pattern non terminals *) - let (|NONTERM_Category_Pattern|_|) = function - | Parser.NONTERM_constrPattern|Parser.NONTERM_parenPattern|Parser.NONTERM_atomicPattern -> Some() + let (|NONTERM_Category_Pattern|_|) = function + | Parser.NONTERM_constrPattern|Parser.NONTERM_parenPattern|Parser.NONTERM_atomicPattern -> Some() | _ -> None - + (* Merge a bunch of if/then/else non terminals *) let (|NONTERM_Category_IfThenElse|_|) = function | Parser.NONTERM_ifExprThen|Parser.NONTERM_ifExprElifs|Parser.NONTERM_ifExprCases -> Some() | _ -> None - + (* Merge a bunch of non terminals *) let (|NONTERM_Category_SignatureFile|_|) = function | Parser.NONTERM_signatureFile|Parser.NONTERM_moduleSpfn|Parser.NONTERM_moduleSpfns -> Some() @@ -1200,7 +1201,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | Parser.NONTERM_fileModuleImpl|Parser.NONTERM_moduleDefn|Parser.NONTERM_interactiveDefns |Parser.NONTERM_moduleDefns|Parser.NONTERM_moduleDefnsOrExpr -> Some() | _ -> None - + let (|NONTERM_Category_Type|_|) = function | Parser.NONTERM_typ|Parser.NONTERM_tupleType -> Some() | _ -> None @@ -1208,24 +1209,24 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa let (|NONTERM_Category_Interaction|_|) = function | Parser.NONTERM_interactiveItemsTerminator|Parser.NONTERM_interaction|Parser.NONTERM__startinteraction -> Some() | _ -> None - - + + // Canonicalize the categories and check for a unique category - ctxt.ReducibleProductions |> List.exists (fun prods -> - match prods - |> List.map Parser.prodIdxToNonTerminal - |> List.map (function + ctxt.ReducibleProductions |> List.exists (fun prods -> + match prods + |> List.map Parser.prodIdxToNonTerminal + |> List.map (function | NONTERM_Category_Type -> Parser.NONTERM_typ - | NONTERM_Category_Expr -> Parser.NONTERM_declExpr - | NONTERM_Category_Pattern -> Parser.NONTERM_atomicPattern + | NONTERM_Category_Expr -> Parser.NONTERM_declExpr + | NONTERM_Category_Pattern -> Parser.NONTERM_atomicPattern | NONTERM_Category_IfThenElse -> Parser.NONTERM_ifExprThen | NONTERM_Category_SignatureFile -> Parser.NONTERM_signatureFile | NONTERM_Category_ImplementationFile -> Parser.NONTERM_implementationFile | NONTERM_Category_Definition -> Parser.NONTERM_moduleDefn | NONTERM_Category_Interaction -> Parser.NONTERM_interaction | nt -> nt) - |> Set.ofList - |> Set.toList with + |> Set.ofList + |> Set.toList with | [Parser.NONTERM_interaction] -> os.Append(NONTERM_interactionE().Format) |> ignore; true | [Parser.NONTERM_hashDirective] -> os.Append(NONTERM_hashDirectiveE().Format) |> ignore; true | [Parser.NONTERM_fieldDecl] -> os.Append(NONTERM_fieldDeclE().Format) |> ignore; true @@ -1260,9 +1261,9 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | [NONTERM_Category_Expr] -> os.Append(NONTERM_Category_ExprE().Format) |> ignore; true | [NONTERM_Category_Type] -> os.Append(NONTERM_Category_TypeE().Format) |> ignore; true | [Parser.NONTERM_typeArgsActual] -> os.Append(NONTERM_typeArgsActualE().Format) |> ignore; true - | _ -> + | _ -> false) - + #if DEBUG if not foundInContext then Printf.bprintf os ". (no 'in' context found: %+A)" (List.map (List.map Parser.prodIdxToNonTerminal) ctxt.ReducibleProductions) @@ -1270,18 +1271,18 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa foundInContext |> ignore // suppress unused variable warning in RELEASE #endif let fix (s: string) = s.Replace(SR.GetString("FixKeyword"), "").Replace(SR.GetString("FixSymbol"), "").Replace(SR.GetString("FixReplace"), "") - match (ctxt.ShiftTokens - |> List.map Parser.tokenTagToTokenId - |> List.filter (function Parser.TOKEN_error | Parser.TOKEN_EOF -> false | _ -> true) - |> List.map tokenIdToText - |> Set.ofList - |> Set.toList) with + match (ctxt.ShiftTokens + |> List.map Parser.tokenTagToTokenId + |> List.filter (function Parser.TOKEN_error | Parser.TOKEN_EOF -> false | _ -> true) + |> List.map tokenIdToText + |> Set.ofList + |> Set.toList) with | [tokenName1] -> os.Append(TokenName1E().Format (fix tokenName1)) |> ignore | [tokenName1;tokenName2] -> os.Append(TokenName1TokenName2E().Format (fix tokenName1) (fix tokenName2)) |> ignore | [tokenName1;tokenName2;tokenName3] -> os.Append(TokenName1TokenName2TokenName3E().Format (fix tokenName1) (fix tokenName2) (fix tokenName3)) |> ignore | _ -> () (* - Printf.bprintf os ".\n\n state = %A\n token = %A\n expect (shift) %A\n expect (reduce) %A\n prods=%A\n non terminals: %A" + Printf.bprintf os ".\n\n state = %A\n token = %A\n expect (shift) %A\n expect (reduce) %A\n prods=%A\n non terminals: %A" ctxt.StateStack ctxt.CurrentToken (List.map Parser.tokenTagToTokenId ctxt.ShiftTokens) @@ -1290,39 +1291,39 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa (List.mapSquared Parser.prodIdxToNonTerminal ctxt.ReducibleProductions) *) - | RuntimeCoercionSourceSealed(denv, ty, _) -> + | RuntimeCoercionSourceSealed(denv, ty, _) -> // REVIEW: consider if we need to show _cxs (the type parameter constraints) let ty, _cxs = PrettyTypes.PrettifyType denv.g ty - if isTyparTy denv.g ty + if isTyparTy denv.g ty then os.Append(RuntimeCoercionSourceSealed1E().Format (NicePrint.stringOfTy denv ty)) |> ignore else os.Append(RuntimeCoercionSourceSealed2E().Format (NicePrint.stringOfTy denv ty)) |> ignore - | CoercionTargetSealed(denv, ty, _) -> + | CoercionTargetSealed(denv, ty, _) -> // REVIEW: consider if we need to show _cxs (the type parameter constraints) let ty, _cxs= PrettyTypes.PrettifyType denv.g ty os.Append(CoercionTargetSealedE().Format (NicePrint.stringOfTy denv ty)) |> ignore - | UpcastUnnecessary(_) -> + | UpcastUnnecessary(_) -> os.Append(UpcastUnnecessaryE().Format) |> ignore - | TypeTestUnnecessary(_) -> + | TypeTestUnnecessary(_) -> os.Append(TypeTestUnnecessaryE().Format) |> ignore - | QuotationTranslator.IgnoringPartOfQuotedTermWarning (msg, _) -> + | QuotationTranslator.IgnoringPartOfQuotedTermWarning (msg, _) -> Printf.bprintf os "%s" msg | OverrideDoesntOverride(denv, impl, minfoVirtOpt, g, amap, m) -> let sig1 = DispatchSlotChecking.FormatOverride denv impl - match minfoVirtOpt with - | None -> + match minfoVirtOpt with + | None -> os.Append(OverrideDoesntOverride1E().Format sig1) |> ignore | Some minfoVirt -> - // https://github.com/Microsoft/visualfsharp/issues/35 + // https://github.com/Microsoft/visualfsharp/issues/35 // Improve error message when attempting to override generic return type with unit: // we need to check if unit was used as a type argument let rec hasUnitTType_app (types: TType list) = match types with - | TType_app (maybeUnit, []) :: ts -> + | TType_app (maybeUnit, []) :: ts -> match maybeUnit.TypeAbbrev with | Some ttype when isUnitTy g ttype -> true | _ -> hasUnitTType_app ts @@ -1333,44 +1334,42 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | TType_app (t, types) when t.IsFSharpInterfaceTycon && hasUnitTType_app types -> // match abstract member with 'unit' passed as generic argument os.Append(OverrideDoesntOverride4E().Format sig1) |> ignore - | _ -> + | _ -> os.Append(OverrideDoesntOverride2E().Format sig1) |> ignore let sig2 = DispatchSlotChecking.FormatMethInfoSig g amap m denv minfoVirt - if sig1 <> sig2 then + if sig1 <> sig2 then os.Append(OverrideDoesntOverride3E().Format sig2) |> ignore | UnionCaseWrongArguments (_, n1, n2, _) -> os.Append(UnionCaseWrongArgumentsE().Format n2 n1) |> ignore - | UnionPatternsBindDifferentNames _ -> + | UnionPatternsBindDifferentNames _ -> os.Append(UnionPatternsBindDifferentNamesE().Format) |> ignore - | ValueNotContained (denv, infoReader, mref, implVal, sigVal, f) -> - let text1, text2 = NicePrint.minimalStringsOfTwoValues denv infoReader (mkLocalValRef implVal) (mkLocalValRef sigVal) + | ValueNotContained (denv, mref, implVal, sigVal, f) -> + let text1, text2 = NicePrint.minimalStringsOfTwoValues denv implVal sigVal os.Append(f((fullDisplayTextOfModRef mref), text1, text2)) |> ignore - | ConstrNotContained (denv, infoReader, enclosingTycon, v1, v2, f) -> - let enclosingTcref = mkLocalEntityRef enclosingTycon - os.Append(f((NicePrint.stringOfUnionCase denv infoReader enclosingTcref v1), (NicePrint.stringOfUnionCase denv infoReader enclosingTcref v2))) |> ignore + | ConstrNotContained (denv, v1, v2, f) -> + os.Append(f((NicePrint.stringOfUnionCase denv v1), (NicePrint.stringOfUnionCase denv v2))) |> ignore - | ExnconstrNotContained (denv, infoReader, v1, v2, f) -> - os.Append(f((NicePrint.stringOfExnDef denv infoReader (mkLocalEntityRef v1)), (NicePrint.stringOfExnDef denv infoReader (mkLocalEntityRef v2)))) |> ignore + | ExnconstrNotContained (denv, v1, v2, f) -> + os.Append(f((NicePrint.stringOfExnDef denv v1), (NicePrint.stringOfExnDef denv v2))) |> ignore - | FieldNotContained (denv, infoReader, enclosingTycon, v1, v2, f) -> - let enclosingTcref = mkLocalEntityRef enclosingTycon - os.Append(f((NicePrint.stringOfRecdField denv infoReader enclosingTcref v1), (NicePrint.stringOfRecdField denv infoReader enclosingTcref v2))) |> ignore + | FieldNotContained (denv, v1, v2, f) -> + os.Append(f((NicePrint.stringOfRecdField denv v1), (NicePrint.stringOfRecdField denv v2))) |> ignore | RequiredButNotSpecified (_, mref, k, name, _) -> let nsb = new System.Text.StringBuilder() name nsb; os.Append(RequiredButNotSpecifiedE().Format (fullDisplayTextOfModRef mref) k (nsb.ToString())) |> ignore - | UseOfAddressOfOperator _ -> + | UseOfAddressOfOperator _ -> os.Append(UseOfAddressOfOperatorE().Format) |> ignore | DefensiveCopyWarning(s, _) -> os.Append(DefensiveCopyWarningE().Format s) |> ignore - | DeprecatedThreadStaticBindingWarning(_) -> + | DeprecatedThreadStaticBindingWarning(_) -> os.Append(DeprecatedThreadStaticBindingWarningE().Format) |> ignore | FunctionValueUnexpected (denv, ty, _) -> @@ -1395,34 +1394,34 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | UnitTypeExpectedWithPossibleAssignment (denv, ty, isAlreadyMutable, bindingName, _) -> let ty, _cxs = PrettyTypes.PrettifyType denv.g ty - let warningText = + let warningText = if isAlreadyMutable then UnitTypeExpectedWithPossibleAssignmentToMutableE().Format (NicePrint.stringOfTy denv ty) bindingName else UnitTypeExpectedWithPossibleAssignmentE().Format (NicePrint.stringOfTy denv ty) bindingName os.Append warningText |> ignore - | RecursiveUseCheckedAtRuntime _ -> + | RecursiveUseCheckedAtRuntime _ -> os.Append(RecursiveUseCheckedAtRuntimeE().Format) |> ignore - | LetRecUnsound (_, [v], _) -> + | LetRecUnsound (_, [v], _) -> os.Append(LetRecUnsound1E().Format v.DisplayName) |> ignore - | LetRecUnsound (_, path, _) -> + | LetRecUnsound (_, path, _) -> let bos = new System.Text.StringBuilder() - (path.Tail @ [path.Head]) |> List.iter (fun (v: ValRef) -> bos.Append(LetRecUnsoundInnerE().Format v.DisplayName) |> ignore) + (path.Tail @ [path.Head]) |> List.iter (fun (v: ValRef) -> bos.Append(LetRecUnsoundInnerE().Format v.DisplayName) |> ignore) os.Append(LetRecUnsound2E().Format (List.head path).DisplayName (bos.ToString())) |> ignore - | LetRecEvaluatedOutOfOrder (_, _, _, _) -> + | LetRecEvaluatedOutOfOrder (_, _, _, _) -> os.Append(LetRecEvaluatedOutOfOrderE().Format) |> ignore - | LetRecCheckedAtRuntime _ -> + | LetRecCheckedAtRuntime _ -> os.Append(LetRecCheckedAtRuntimeE().Format) |> ignore - | SelfRefObjCtor(false, _) -> + | SelfRefObjCtor(false, _) -> os.Append(SelfRefObjCtor1E().Format) |> ignore - | SelfRefObjCtor(true, _) -> + | SelfRefObjCtor(true, _) -> os.Append(SelfRefObjCtor2E().Format) |> ignore | VirtualAugmentationOnNullValuedType(_) -> @@ -1438,25 +1437,27 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa // REVIEW: consider if we need to show _cxs (the type parameter constraints) let t1, t2, _cxs = NicePrint.minimalStringsOfTwoTypes denv ty1 ty2 os.Append(NonUniqueInferredAbstractSlot2E().Format) |> ignore - if t1 <> t2 then + if t1 <> t2 then os.Append(NonUniqueInferredAbstractSlot3E().Format t1 t2) |> ignore os.Append(NonUniqueInferredAbstractSlot4E().Format) |> ignore | Error ((_, s), _) -> os.Append s |> ignore - | ErrorWithSuggestions ((_, s), _, idText, suggestionF) -> + | ErrorWithSuggestions ((_, s), _, idText, suggestionF) -> os.Append(DecompileOpName s) |> ignore suggestNames suggestionF idText - | InternalError (s, _) + | NumberedError ((_, s), _) -> os.Append s |> ignore + + | InternalError (s, _) - | InvalidArgument s + | InvalidArgument s | Failure s as exn -> ignore exn // use the argument, even in non DEBUG let f1 = SR.GetString("Failure1") - let f2 = SR.GetString("Failure2") - match s with + let f2 = SR.GetString("Failure2") + match s with | f when f = f1 -> os.Append(Failure3E().Format s) |> ignore | f when f = f2 -> os.Append(Failure3E().Format s) |> ignore | _ -> os.Append(Failure4E().Format s) |> ignore @@ -1467,13 +1468,13 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | WrappedError (exn, _) -> OutputExceptionR os exn - | PatternMatchCompilation.MatchIncomplete (isComp, cexOpt, _) -> + | PatternMatchCompilation.MatchIncomplete (isComp, cexOpt, _) -> os.Append(MatchIncomplete1E().Format) |> ignore - match cexOpt with + match cexOpt with | None -> () | Some (cex, false) -> os.Append(MatchIncomplete2E().Format cex) |> ignore | Some (cex, true) -> os.Append(MatchIncomplete3E().Format cex) |> ignore - if isComp then + if isComp then os.Append(MatchIncomplete4E().Format) |> ignore | PatternMatchCompilation.EnumMatchIncomplete (isComp, cexOpt, _) -> @@ -1491,9 +1492,9 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | ValNotLocal _ -> os.Append(ValNotLocalE().Format) |> ignore - | ObsoleteError (s, _) + | ObsoleteError (s, _) - | ObsoleteWarning (s, _) -> + | ObsoleteWarning (s, _) -> os.Append(Obsolete1E().Format) |> ignore if s <> "" then os.Append(Obsolete2E().Format s) |> ignore @@ -1509,42 +1510,42 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | MissingFields(sl, _) -> os.Append(MissingFieldsE().Format (String.concat "," sl + ".")) |> ignore - | ValueRestriction(denv, infoReader, hassig, v, _, _) -> + | ValueRestriction(denv, hassig, v, _, _) -> let denv = { denv with showImperativeTyparAnnotations=true } let tau = v.TauType - if hassig then - if isFunTy denv.g tau && (arityOfVal v).HasNoArgs then + if hassig then + if isFunTy denv.g tau && (arityOfVal v).HasNoArgs then os.Append(ValueRestriction1E().Format - v.DisplayName - (NicePrint.stringOfQualifiedValOrMember denv infoReader (mkLocalValRef v)) + v.DisplayName + (NicePrint.stringOfQualifiedValOrMember denv v) v.DisplayName) |> ignore else os.Append(ValueRestriction2E().Format - v.DisplayName - (NicePrint.stringOfQualifiedValOrMember denv infoReader (mkLocalValRef v)) + v.DisplayName + (NicePrint.stringOfQualifiedValOrMember denv v) v.DisplayName) |> ignore else - match v.MemberInfo with - | Some membInfo when - begin match membInfo.MemberFlags.MemberKind with - | SynMemberKind.PropertyGet - | SynMemberKind.PropertySet - | SynMemberKind.Constructor -> true (* can't infer extra polymorphism *) + match v.MemberInfo with + | Some membInfo when + begin match membInfo.MemberFlags.MemberKind with + | MemberKind.PropertyGet + | MemberKind.PropertySet + | MemberKind.Constructor -> true (* can't infer extra polymorphism *) | _ -> false (* can infer extra polymorphism *) - end -> - os.Append(ValueRestriction3E().Format (NicePrint.stringOfQualifiedValOrMember denv infoReader (mkLocalValRef v))) |> ignore - | _ -> - if isFunTy denv.g tau && (arityOfVal v).HasNoArgs then + end -> + os.Append(ValueRestriction3E().Format (NicePrint.stringOfQualifiedValOrMember denv v)) |> ignore + | _ -> + if isFunTy denv.g tau && (arityOfVal v).HasNoArgs then os.Append(ValueRestriction4E().Format v.DisplayName - (NicePrint.stringOfQualifiedValOrMember denv infoReader (mkLocalValRef v)) + (NicePrint.stringOfQualifiedValOrMember denv v) v.DisplayName) |> ignore else os.Append(ValueRestriction5E().Format v.DisplayName - (NicePrint.stringOfQualifiedValOrMember denv infoReader (mkLocalValRef v)) + (NicePrint.stringOfQualifiedValOrMember denv v) v.DisplayName) |> ignore - + | Parsing.RecoverableParseError -> os.Append(RecoverableParseErrorE().Format) |> ignore @@ -1565,7 +1566,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | UnresolvedReferenceNoRange assemblyName -> os.Append(UnresolvedReferenceNoRangeE().Format assemblyName) |> ignore - | UnresolvedPathReference(assemblyName, pathname, _) + | UnresolvedPathReference(assemblyName, pathname, _) | UnresolvedPathReferenceNoRange(assemblyName, pathname) -> os.Append(UnresolvedPathReferenceNoRangeE().Format pathname assemblyName) |> ignore @@ -1594,7 +1595,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | HashDirectiveNotAllowedInNonScript(_) -> os.Append(HashDirectiveNotAllowedInNonScriptE().Format) |> ignore - | FileNameNotResolved(filename, locations, _) -> + | FileNameNotResolved(filename, locations, _) -> os.Append(FileNameNotResolvedE().Format filename locations) |> ignore | AssemblyNotResolved(originalName, _) -> @@ -1603,10 +1604,10 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | IllegalFileNameChar(fileName, invalidChar) -> os.Append(FSComp.SR.buildUnexpectedFileNameCharacter(fileName, string invalidChar)|>snd) |> ignore - | HashLoadedSourceHasIssues(warnings, errors, _) -> + | HashLoadedSourceHasIssues(warnings, errors, _) -> let Emit(l: exn list) = OutputExceptionR os (List.head l) - if errors=[] then + if errors=[] then os.Append(HashLoadedSourceHasIssues1E().Format) |> ignore Emit warnings else @@ -1616,21 +1617,21 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | HashLoadedScriptConsideredSource(_) -> os.Append(HashLoadedScriptConsideredSourceE().Format) |> ignore - | InvalidInternalsVisibleToAssemblyName(badName, fileNameOption) -> - match fileNameOption with + | InvalidInternalsVisibleToAssemblyName(badName, fileNameOption) -> + match fileNameOption with | Some file -> os.Append(InvalidInternalsVisibleToAssemblyName1E().Format badName file) |> ignore | None -> os.Append(InvalidInternalsVisibleToAssemblyName2E().Format badName) |> ignore | LoadedSourceNotFoundIgnoring(filename, _) -> os.Append(LoadedSourceNotFoundIgnoringE().Format filename) |> ignore - | MSBuildReferenceResolutionWarning(code, message, _) + | MSBuildReferenceResolutionWarning(code, message, _) - | MSBuildReferenceResolutionError(code, message, _) -> + | MSBuildReferenceResolutionError(code, message, _) -> os.Append(MSBuildReferenceResolutionErrorE().Format message code) |> ignore // Strip TargetInvocationException wrappers - | :? System.Reflection.TargetInvocationException as e -> + | :? System.Reflection.TargetInvocationException as e -> OutputExceptionR os e.InnerException | :? FileNotFoundException as e -> Printf.bprintf os "%s" e.Message @@ -1645,11 +1646,11 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | :? System.UnauthorizedAccessException as e -> Printf.bprintf os "%s" e.Message - | e -> + | e -> os.Append(TargetInvocationExceptionWrapperE().Format e.Message) |> ignore #if DEBUG Printf.bprintf os "\nStack Trace\n%s\n" (e.ToString()) - if !showAssertForUnexpectedException then + if !showAssertForUnexpectedException then System.Diagnostics.Debug.Assert(false, sprintf "Unknown exception seen in compiler: %s" (e.ToString())) #endif @@ -1662,20 +1663,20 @@ let OutputPhasedDiagnostic (os: System.Text.StringBuilder) (err: PhasedDiagnosti OutputPhasedErrorR buf err suggestNames let s = if flattenErrors then ErrorLogger.NormalizeErrorString (buf.ToString()) else buf.ToString() - + os.Append s |> ignore let SanitizeFileName fileName implicitIncludeDir = // The assert below is almost ok, but it fires in two cases: // - fsi.exe sometimes passes "stdin" as a dummy filename - // - if you have a #line directive, e.g. + // - if you have a #line directive, e.g. // # 1000 "Line01.fs" // then it also asserts. But these are edge cases that can be fixed later, e.g. in bug 4651. //System.Diagnostics.Debug.Assert(FileSystem.IsPathRootedShim fileName, sprintf "filename should be absolute: '%s'" fileName) try let fullPath = FileSystem.GetFullPathShim fileName let currentDir = implicitIncludeDir - + // if the file name is not rooted in the current directory, return the full path if not(fullPath.StartsWithOrdinal currentDir) then fullPath @@ -1693,58 +1694,58 @@ type DiagnosticLocation = IsEmpty: bool } [] -type DiagnosticCanonicalInformation = +type DiagnosticCanonicalInformation = { ErrorNumber: int Subcategory: string TextRepresentation: string } [] -type DiagnosticDetailedInfo = +type DiagnosticDetailedInfo = { Location: DiagnosticLocation option Canonical: DiagnosticCanonicalInformation Message: string } [] -type Diagnostic = - | Short of FSharpDiagnosticSeverity * string - | Long of FSharpDiagnosticSeverity * DiagnosticDetailedInfo +type Diagnostic = + | Short of bool * string + | Long of bool * DiagnosticDetailedInfo /// returns sequence that contains Diagnostic for the given error + Diagnostic for all related errors -let CollectDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorStyle, severity: FSharpDiagnosticSeverity, err: PhasedDiagnostic, suggestNames: bool) = +let CollectDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorStyle, isError, err: PhasedDiagnostic, suggestNames: bool) = let outputWhere (showFullPaths, errorStyle) m: DiagnosticLocation = if Range.equals m rangeStartup || Range.equals m rangeCmdArgs then { Range = m; TextRepresentation = ""; IsEmpty = true; File = "" } else let file = m.FileName - let file = if showFullPaths then - FileSystem.GetFullFilePathInDirectoryShim implicitIncludeDir file - else + let file = if showFullPaths then + Filename.fullpath implicitIncludeDir file + else SanitizeFileName file implicitIncludeDir - let text, m, file = + let text, m, file = match errorStyle with - | ErrorStyle.EmacsErrors -> + | ErrorStyle.EmacsErrors -> let file = file.Replace("\\", "/") (sprintf "File \"%s\", line %d, characters %d-%d: " file m.StartLine m.StartColumn m.EndColumn), m, file // We're adjusting the columns here to be 1-based - both for parity with C# and for MSBuild, which assumes 1-based columns for error output - | ErrorStyle.DefaultErrors -> + | ErrorStyle.DefaultErrors -> let file = file.Replace('/', System.IO.Path.DirectorySeparatorChar) let m = mkRange m.FileName (mkPos m.StartLine (m.StartColumn + 1)) m.End (sprintf "%s(%d,%d): " file m.StartLine m.StartColumn), m, file // We may also want to change TestErrors to be 1-based - | ErrorStyle.TestErrors -> + | ErrorStyle.TestErrors -> let file = file.Replace("/", "\\") let m = mkRange m.FileName (mkPos m.StartLine (m.StartColumn + 1)) (mkPos m.EndLine (m.EndColumn + 1) ) sprintf "%s(%d,%d-%d,%d): " file m.StartLine m.StartColumn m.EndLine m.EndColumn, m, file - | ErrorStyle.GccErrors -> + | ErrorStyle.GccErrors -> let file = file.Replace('/', System.IO.Path.DirectorySeparatorChar) let m = mkRange m.FileName (mkPos m.StartLine (m.StartColumn + 1)) (mkPos m.EndLine (m.EndColumn + 1) ) sprintf "%s:%d:%d: " file m.StartLine m.StartColumn, m, file // Here, we want the complete range information so Project Systems can generate proper squiggles - | ErrorStyle.VSErrors -> + | ErrorStyle.VSErrors -> // Show prefix only for real files. Otherwise, we just want a truncated error like: // parse error FS0031: blah blah if not (Range.equals m range0) && not (Range.equals m rangeStartup) && not (Range.equals m rangeCmdArgs) then @@ -1755,65 +1756,59 @@ let CollectDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorSt "", m, file { Range = m; TextRepresentation = text; IsEmpty = false; File = file } - match err.Exception with - | ReportedError _ -> - assert ("" = "Unexpected ReportedError") // this should never happen + match err.Exception with + | ReportedError _ -> + assert ("" = "Unexpected ReportedError") // this should never happen Seq.empty - | StopProcessing -> - assert ("" = "Unexpected StopProcessing") // this should never happen + | StopProcessing -> + assert ("" = "Unexpected StopProcessing") // this should never happen Seq.empty - | _ -> + | _ -> let errors = ResizeArray() let report err = - let OutputWhere err = - match GetRangeOfDiagnostic err with + let OutputWhere err = + match GetRangeOfDiagnostic err with | Some m -> Some(outputWhere (showFullPaths, errorStyle) m) | None -> None - let OutputCanonicalInformation(subcategory, errorNumber) : DiagnosticCanonicalInformation = - let message = - match severity with - | FSharpDiagnosticSeverity.Error -> "error" - | FSharpDiagnosticSeverity.Warning -> "warning" - | FSharpDiagnosticSeverity.Info - | FSharpDiagnosticSeverity.Hidden -> "info" - let text = + let OutputCanonicalInformation(subcategory, errorNumber) : DiagnosticCanonicalInformation = + 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 message errorNumber - | _ -> sprintf "%s FS%04d: " message errorNumber + | ErrorStyle.VSErrors -> sprintf "%s %s FS%04d: " subcategory (if isError then "error" else "warning") errorNumber + | _ -> sprintf "%s FS%04d: " (if isError then "error" else "warning") errorNumber { ErrorNumber = errorNumber; Subcategory = subcategory; TextRepresentation = text} - + let mainError, relatedErrors = SplitRelatedDiagnostics err let where = OutputWhere mainError let canonical = OutputCanonicalInformation(err.Subcategory(), GetDiagnosticNumber mainError) - let message = + let message = let os = System.Text.StringBuilder() OutputPhasedDiagnostic os mainError flattenErrors suggestNames os.ToString() - + let entry: DiagnosticDetailedInfo = { Location = where; Canonical = canonical; Message = message } - - errors.Add ( Diagnostic.Long(severity, entry ) ) + + errors.Add ( Diagnostic.Long(isError, entry ) ) let OutputRelatedError(err: PhasedDiagnostic) = match errorStyle with // Give a canonical string when --vserror. - | ErrorStyle.VSErrors -> + | ErrorStyle.VSErrors -> let relWhere = OutputWhere mainError // mainError? let relCanonical = OutputCanonicalInformation(err.Subcategory(), GetDiagnosticNumber mainError) // Use main error for code - let relMessage = + let relMessage = let os = System.Text.StringBuilder() OutputPhasedDiagnostic os err flattenErrors suggestNames os.ToString() let entry: DiagnosticDetailedInfo = { Location = relWhere; Canonical = relCanonical; Message = relMessage} - errors.Add( Diagnostic.Long (severity, entry) ) + errors.Add( Diagnostic.Long (isError, entry) ) - | _ -> + | _ -> let os = System.Text.StringBuilder() OutputPhasedDiagnostic os err flattenErrors suggestNames - errors.Add( Diagnostic.Short(severity, os.ToString()) ) + errors.Add( Diagnostic.Short(isError, os.ToString()) ) relatedErrors |> List.iter OutputRelatedError @@ -1831,14 +1826,14 @@ let CollectDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorSt /// used by fsc.exe and fsi.exe, but not by VS /// prints error and related errors to the specified StringBuilder -let rec OutputDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorStyle, severity) os (err: PhasedDiagnostic) = - +let rec OutputDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorStyle, isError) os (err: PhasedDiagnostic) = + // 'true' for "canSuggestNames" is passed last here because we want to report suggestions in fsc.exe and fsi.exe, just not in regular IDE usage. - let errors = CollectDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorStyle, severity, err, true) + let errors = CollectDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorStyle, isError, err, true) for e in errors do Printf.bprintf os "\n" match e with - | Diagnostic.Short(_, txt) -> + | Diagnostic.Short(_, txt) -> os.Append txt |> ignore | Diagnostic.Long(_, details) -> match details.Location with @@ -1846,23 +1841,23 @@ let rec OutputDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, erro | _ -> () os.Append( details.Canonical.TextRepresentation ) |> ignore os.Append( details.Message ) |> ignore - + let OutputDiagnosticContext prefix fileLineFunction os err = match GetRangeOfDiagnostic err with - | None -> () - | Some m -> + | None -> () + | Some m -> let filename = m.FileName let lineA = m.StartLine let lineB = m.EndLine let line = fileLineFunction filename lineA - if line<>"" then + if line<>"" then 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%s\n" prefix (String.make iA '-') (String.make iLen '^') -let ReportWarning options err = +let ReportWarning options err = warningOn err (options.WarnLevel) (options.WarnOn) && not (List.contains (GetDiagnosticNumber err) (options.WarnOff)) let ReportWarningAsError options err = @@ -1877,33 +1872,34 @@ let ReportWarningAsError options err = /// Build an ErrorLogger that delegates to another ErrorLogger but filters warnings turned off by the given pragma declarations // -// NOTE: we allow a flag to turn of strict file checking. This is because file names sometimes don't match due to use of +// NOTE: we allow a flag to turn of strict file checking. This is because file names sometimes don't match due to use of // #line directives, e.g. for pars.fs/pars.fsy. In this case we just test by line number - in most cases this is sufficient // because we install a filtering error handler on a file-by-file basis for parsing and type-checking. -// However this is indicative of a more systematic problem where source-line +// However this is indicative of a more systematic problem where source-line // sensitive operations (lexfilter and warning filtering) do not always // interact well with #line directives. type ErrorLoggerFilteringByScopedPragmas (checkFile, scopedPragmas, errorLogger: ErrorLogger) = inherit ErrorLogger("ErrorLoggerFilteringByScopedPragmas") - override x.DiagnosticSink (phasedError, severity) = - if severity = FSharpDiagnosticSeverity.Error then - errorLogger.DiagnosticSink (phasedError, severity) - else - let report = + override x.DiagnosticSink (phasedError, isError) = + if isError then + errorLogger.DiagnosticSink (phasedError, isError) + else + let report = let warningNum = GetDiagnosticNumber phasedError - match GetRangeOfDiagnostic phasedError with - | Some m -> + match GetRangeOfDiagnostic phasedError with + | Some m -> not (scopedPragmas |> List.exists (fun pragma -> - match pragma with - | ScopedPragma.WarningOff(pragmaRange, warningNumFromPragma) -> - warningNum = warningNumFromPragma && + match pragma with + | ScopedPragma.WarningOff(pragmaRange, warningNumFromPragma) -> + warningNum = warningNumFromPragma && (not checkFile || m.FileIndex = pragmaRange.FileIndex) && - Position.posGeq m.Start pragmaRange.Start)) + Range.posGeq m.Start pragmaRange.Start)) | None -> true - if report then errorLogger.DiagnosticSink(phasedError, severity) + if report then errorLogger.DiagnosticSink(phasedError, false) override x.ErrorCount = errorLogger.ErrorCount -let GetErrorLoggerFilteringByScopedPragmas(checkFile, scopedPragmas, errorLogger) = +let GetErrorLoggerFilteringByScopedPragmas(checkFile, scopedPragmas, errorLogger) = (ErrorLoggerFilteringByScopedPragmas(checkFile, scopedPragmas, errorLogger) :> ErrorLogger) + diff --git a/src/fsharp/CompilerDiagnostics.fsi b/src/fsharp/CompilerDiagnostics.fsi index 3eb231abf97..173d5c8f509 100644 --- a/src/fsharp/CompilerDiagnostics.fsi +++ b/src/fsharp/CompilerDiagnostics.fsi @@ -4,10 +4,9 @@ module internal FSharp.Compiler.CompilerDiagnostics open System.Text -open FSharp.Compiler.Diagnostics open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree #if DEBUG module internal CompilerService = @@ -60,7 +59,7 @@ val SplitRelatedDiagnostics: PhasedDiagnostic -> PhasedDiagnostic * PhasedDiagno val OutputPhasedDiagnostic: StringBuilder -> PhasedDiagnostic -> flattenErrors: bool -> suggestNames: bool -> unit /// Output an error or warning to a buffer -val OutputDiagnostic: implicitIncludeDir:string * showFullPaths: bool * flattenErrors: bool * errorStyle: ErrorStyle * severity: FSharpDiagnosticSeverity -> StringBuilder -> PhasedDiagnostic -> unit +val OutputDiagnostic: implicitIncludeDir:string * showFullPaths: bool * flattenErrors: bool * errorStyle: ErrorStyle * isError:bool -> StringBuilder -> PhasedDiagnostic -> unit /// Output extra context information for an error or warning to a buffer val OutputDiagnosticContext: prefix:string -> fileLineFunction:(string -> int -> string) -> StringBuilder -> PhasedDiagnostic -> unit @@ -90,11 +89,11 @@ type DiagnosticDetailedInfo = /// Part of LegacyHostedCompilerForTesting [] type Diagnostic = - | Short of FSharpDiagnosticSeverity * string - | Long of FSharpDiagnosticSeverity * DiagnosticDetailedInfo + | Short of bool * string + | Long of bool * DiagnosticDetailedInfo /// Part of LegacyHostedCompilerForTesting -val CollectDiagnostic: implicitIncludeDir:string * showFullPaths: bool * flattenErrors: bool * errorStyle: ErrorStyle * severity: FSharpDiagnosticSeverity * PhasedDiagnostic * suggestNames: bool -> seq +val CollectDiagnostic: implicitIncludeDir:string * showFullPaths: bool * flattenErrors: bool * errorStyle: ErrorStyle * isError:bool * PhasedDiagnostic * suggestNames: bool -> seq /// Get an error logger that filters the reporting of warnings based on scoped pragma information val GetErrorLoggerFilteringByScopedPragmas: checkFile:bool * ScopedPragma list * ErrorLogger -> ErrorLogger @@ -102,9 +101,9 @@ val GetErrorLoggerFilteringByScopedPragmas: checkFile:bool * ScopedPragma list * val SanitizeFileName: fileName: string -> implicitIncludeDir: string -> string /// Indicates if we should report a warning -val ReportWarning: FSharpDiagnosticOptions -> PhasedDiagnostic -> bool +val ReportWarning: FSharpErrorSeverityOptions -> PhasedDiagnostic -> bool /// Indicates if we should report a warning as an error -val ReportWarningAsError: FSharpDiagnosticOptions -> PhasedDiagnostic -> bool +val ReportWarningAsError: FSharpErrorSeverityOptions -> PhasedDiagnostic -> bool diff --git a/src/fsharp/CompilerGlobalState.fs b/src/fsharp/CompilerGlobalState.fs index 153111b3151..589a145baf0 100644 --- a/src/fsharp/CompilerGlobalState.fs +++ b/src/fsharp/CompilerGlobalState.fs @@ -5,8 +5,8 @@ module FSharp.Compiler.CompilerGlobalState open System.Collections.Generic -open FSharp.Compiler.Syntax.PrettyNaming -open FSharp.Compiler.Text +open FSharp.Compiler.Range +open FSharp.Compiler.PrettyNaming /// Generates compiler-generated names. Each name generated also includes the StartLine number of the range passed in /// at the point of first generation. @@ -82,11 +82,11 @@ type internal CompilerGlobalState () = /// A name generator used by IlxGen for static fields, some generated arguments and other things. let ilxgenGlobalNng = NiceNameGenerator () - member _.NiceNameGenerator = globalNng + member __.NiceNameGenerator = globalNng - member _.StableNameGenerator = globalStableNameGenerator + member __.StableNameGenerator = globalStableNameGenerator - member _.IlxGenNiceNameGenerator = ilxgenGlobalNng + member __.IlxGenNiceNameGenerator = ilxgenGlobalNng /// Unique name generator for stamps attached to lambdas and object expressions type Unique = int64 diff --git a/src/fsharp/CompilerGlobalState.fsi b/src/fsharp/CompilerGlobalState.fsi index 4a1e646ffc0..77ba46b2782 100644 --- a/src/fsharp/CompilerGlobalState.fsi +++ b/src/fsharp/CompilerGlobalState.fsi @@ -2,9 +2,9 @@ /// Defines the global environment for all type checking. -module internal FSharp.Compiler.CompilerGlobalState +module FSharp.Compiler.CompilerGlobalState -open FSharp.Compiler.Text +open FSharp.Compiler.Range /// Generates compiler-generated names. Each name generated also includes the StartLine number of the range passed in /// at the point of first generation. diff --git a/src/fsharp/CompilerImports.fs b/src/fsharp/CompilerImports.fs index 82b55aaff7e..ba78d9bdc37 100644 --- a/src/fsharp/CompilerImports.fs +++ b/src/fsharp/CompilerImports.fs @@ -12,38 +12,38 @@ open System.IO open Internal.Utilities open Internal.Utilities.Collections -open Internal.Utilities.FSharpEnvironment -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras open FSharp.Compiler +open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILBinaryReader -open FSharp.Compiler.AbstractIL.ILX +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Extensions.ILX open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.CompilerConfig -open FSharp.Compiler.DependencyManager +open FSharp.Compiler.DotNetFrameworkDependencies open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Import -open FSharp.Compiler.IO -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.Lib +open FSharp.Compiler.PrettyNaming open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Xml +open FSharp.Compiler.Range +open FSharp.Compiler.ReferenceResolver open FSharp.Compiler.TypedTreePickle open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.BuildGraph +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.XmlDoc + +open Microsoft.DotNet.DependencyManager #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping -open FSharp.Core.CompilerServices +open Microsoft.FSharp.Core.CompilerServices #endif let (++) x s = x @ [s] @@ -52,32 +52,32 @@ let (++) x s = x @ [s] // Signature and optimization data blobs //-------------------------------------------------------------------------- -let IsSignatureDataResource (r: ILResource) = +let IsSignatureDataResource (r: ILResource) = r.Name.StartsWithOrdinal FSharpSignatureDataResourceName || r.Name.StartsWithOrdinal FSharpSignatureDataResourceName2 -let IsOptimizationDataResource (r: ILResource) = - r.Name.StartsWithOrdinal FSharpOptimizationDataResourceName|| +let IsOptimizationDataResource (r: ILResource) = + r.Name.StartsWithOrdinal FSharpOptimizationDataResourceName|| r.Name.StartsWithOrdinal FSharpOptimizationDataResourceName2 -let GetSignatureDataResourceName (r: ILResource) = - if r.Name.StartsWithOrdinal FSharpSignatureDataResourceName then +let GetSignatureDataResourceName (r: ILResource) = + if r.Name.StartsWithOrdinal FSharpSignatureDataResourceName then String.dropPrefix r.Name FSharpSignatureDataResourceName - elif r.Name.StartsWithOrdinal FSharpSignatureDataResourceName2 then + elif r.Name.StartsWithOrdinal FSharpSignatureDataResourceName2 then String.dropPrefix r.Name FSharpSignatureDataResourceName2 else failwith "GetSignatureDataResourceName" -let GetOptimizationDataResourceName (r: ILResource) = - if r.Name.StartsWithOrdinal FSharpOptimizationDataResourceName then +let GetOptimizationDataResourceName (r: ILResource) = + if r.Name.StartsWithOrdinal FSharpOptimizationDataResourceName then String.dropPrefix r.Name FSharpOptimizationDataResourceName - elif r.Name.StartsWithOrdinal FSharpOptimizationDataResourceName2 then + elif r.Name.StartsWithOrdinal FSharpOptimizationDataResourceName2 then String.dropPrefix r.Name FSharpOptimizationDataResourceName2 else failwith "GetOptimizationDataResourceName" let IsReflectedDefinitionsResource (r: ILResource) = r.Name.StartsWithOrdinal(QuotationPickler.SerializedReflectedDefinitionsResourceNameBase) -let MakeILResource rName bytes = +let MakeILResource rName bytes = { Name = rName Location = ILResourceLocation.Local(ByteStorage.FromByteArray(bytes)) Access = ILResourceAccess.Public @@ -90,11 +90,9 @@ let PickleToResource inMem file (g: TcGlobals) scope rName p x = let bytes = pickleObjWithDanglingCcus inMem file g scope p x let byteStorage = if inMem then - ByteStorage.FromMemoryAndCopy(bytes.AsMemory(), useBackingMemoryMappedFile = true) + ByteStorage.FromByteArrayAndCopy(bytes, useBackingMemoryMappedFile = true) else - ByteStorage.FromByteArray(bytes.AsMemory().ToArray()) - - (bytes :> IDisposable).Dispose() + ByteStorage.FromByteArray(bytes) { Name = rName Location = ILResourceLocation.Local(byteStorage) @@ -102,13 +100,13 @@ let PickleToResource inMem file (g: TcGlobals) scope rName p x = CustomAttrsStored = storeILCustomAttrs emptyILCustomAttrs MetadataIndex = NoMetadataIdx } -let GetSignatureData (file, ilScopeRef, ilModule, byteReader) : PickledDataWithReferences = +let GetSignatureData (file, ilScopeRef, ilModule, byteReader) : PickledDataWithReferences = unpickleObjWithDanglingCcus file ilScopeRef ilModule unpickleCcuInfo (byteReader()) let WriteSignatureData (tcConfig: TcConfig, tcGlobals, exportRemapping, ccu: CcuThunk, filename, inMem) : ILResource = let mspec = ccu.Contents let mspec = ApplyExportRemappingToEntity tcGlobals exportRemapping mspec - // For historical reasons, we use a different resource name for FSharp.Core, so older F# compilers + // For historical reasons, we use a different resource name for FSharp.Core, so older F# compilers // don't complain when they see the resource. let rName = if ccu.AssemblyName = getFSharpCoreLibraryName then FSharpSignatureDataResourceName2 else FSharpSignatureDataResourceName @@ -116,82 +114,39 @@ let WriteSignatureData (tcConfig: TcConfig, tcGlobals, exportRemapping, ccu: Ccu if String.IsNullOrEmpty tcConfig.implicitIncludeDir then "" else tcConfig.implicitIncludeDir - |> FileSystem.GetFullPathShim + |> System.IO.Path.GetFullPath |> PathMap.applyDir tcGlobals.pathMap - - PickleToResource inMem filename tcGlobals ccu (rName+ccu.AssemblyName) pickleCcuInfo - { mspec=mspec + + PickleToResource inMem filename tcGlobals ccu (rName+ccu.AssemblyName) pickleCcuInfo + { mspec=mspec compileTimeWorkingDir=includeDir usesQuotations = ccu.UsesFSharp20PlusQuotations } -let GetOptimizationData (file, ilScopeRef, ilModule, byteReader) = +let GetOptimizationData (file, ilScopeRef, ilModule, byteReader) = unpickleObjWithDanglingCcus file ilScopeRef ilModule Optimizer.u_CcuOptimizationInfo (byteReader()) -let WriteOptimizationData (tcGlobals, filename, inMem, ccu: CcuThunk, modulInfo) = - // For historical reasons, we use a different resource name for FSharp.Core, so older F# compilers +let WriteOptimizationData (tcGlobals, filename, inMem, ccu: CcuThunk, modulInfo) = + // For historical reasons, we use a different resource name for FSharp.Core, so older F# compilers // don't complain when they see the resource. - let rName = if ccu.AssemblyName = getFSharpCoreLibraryName then FSharpOptimizationDataResourceName2 else FSharpOptimizationDataResourceName + let rName = if ccu.AssemblyName = getFSharpCoreLibraryName then FSharpOptimizationDataResourceName2 else FSharpOptimizationDataResourceName PickleToResource inMem filename tcGlobals ccu (rName+ccu.AssemblyName) Optimizer.p_CcuOptimizationInfo modulInfo -let EncodeSignatureData(tcConfig: TcConfig, tcGlobals, exportRemapping, generatedCcu, outfile, isIncrementalBuild) = - if tcConfig.GenerateSignatureData then - let resource = WriteSignatureData (tcConfig, tcGlobals, exportRemapping, generatedCcu, outfile, isIncrementalBuild) - // The resource gets written to a file for FSharp.Core - let useDataFiles = (tcConfig.useOptimizationDataFile || tcGlobals.compilingFslib) && not isIncrementalBuild - - if useDataFiles then - let sigDataFileName = (FileSystemUtils.chopExtension outfile)+".sigdata" - let bytes = resource.GetBytes() - use fileStream = FileSystem.OpenFileForWriteShim(sigDataFileName, FileMode.Create, FileAccess.ReadWrite, FileShare.None) - - bytes.CopyTo fileStream - let resources = - [ resource ] - let sigAttr = mkSignatureDataVersionAttr tcGlobals (parseILVersion Internal.Utilities.FSharpEnvironment.FSharpBinaryMetadataFormatRevision) - [sigAttr], resources - else - [], [] - -let EncodeOptimizationData(tcGlobals, tcConfig: TcConfig, outfile, exportRemapping, data, isIncrementalBuild) = - if tcConfig.GenerateOptimizationData then - let data = map2Of2 (Optimizer.RemapOptimizationInfo tcGlobals exportRemapping) data - // As with the sigdata file, the optdata gets written to a file for FSharp.Core - let useDataFiles = (tcConfig.useOptimizationDataFile || tcGlobals.compilingFslib) && not isIncrementalBuild - - if useDataFiles then - let ccu, modulInfo = data - let bytes = TypedTreePickle.pickleObjWithDanglingCcus isIncrementalBuild outfile tcGlobals ccu Optimizer.p_CcuOptimizationInfo modulInfo - let optDataFileName = (FileSystemUtils.chopExtension outfile)+".optdata" - use fileStream = FileSystem.OpenFileForWriteShim(optDataFileName, FileMode.Create, FileAccess.ReadWrite, FileShare.None) - fileStream.Write(bytes) - - let (ccu, optData) = - if tcConfig.onlyEssentialOptimizationData then - map2Of2 Optimizer.AbstractOptimizationInfoToEssentials data - else - data - [ WriteOptimizationData (tcGlobals, outfile, isIncrementalBuild, ccu, optData) ] - else - [ ] - exception AssemblyNotResolved of (*originalName*) string * range - exception MSBuildReferenceResolutionWarning of (*MSBuild warning code*)string * (*Message*)string * range - exception MSBuildReferenceResolutionError of (*MSBuild warning code*)string * (*Message*)string * range let OpenILBinary(filename, reduceMemoryUsage, pdbDirPath, shadowCopyReferences, tryGetMetadataSnapshot) = - let opts: ILReaderOptions = + let opts: ILReaderOptions = { metadataOnly = MetadataOnlyFlag.Yes reduceMemoryUsage = reduceMemoryUsage pdbDirPath = pdbDirPath - tryGetMetadataSnapshot = tryGetMetadataSnapshot } - + tryGetMetadataSnapshot = tryGetMetadataSnapshot } + let location = #if FX_NO_APP_DOMAINS // In order to use memory mapped files on the shadow copied version of the Assembly, we `preload the assembly // We swallow all exceptions so that we do not change the exception contract of this API - if shadowCopyReferences then + if shadowCopyReferences then try System.Reflection.Assembly.ReflectionOnlyLoadFrom(filename).Location with e -> filename @@ -212,12 +167,12 @@ type ResolvedExtensionReference = ResolvedExtensionReference of string * Assembl #if DEBUG [] #endif -type AssemblyResolution = +type AssemblyResolution = { /// The original reference to the assembly. originalReference: AssemblyReference /// Path to the resolvedFile - resolvedPath: string + resolvedPath: string /// Create the tooltip text for the assembly reference prepareToolTip: unit -> string @@ -225,7 +180,7 @@ type AssemblyResolution = /// Whether or not this is an installed system assembly (for example, System.dll) sysdir: bool - /// Lazily populated ilAssemblyRef for this reference. + /// Lazily populated ilAssemblyRef for this reference. mutable ilAssemblyRef: ILAssemblyRef option } override this.ToString() = sprintf "%s%s" (if this.sysdir then "[sys]" else "") this.resolvedPath @@ -234,30 +189,47 @@ type AssemblyResolution = /// Compute the ILAssemblyRef for a resolved assembly. This is done by reading the binary if necessary. The result /// is cached. - /// - /// Only used in F# Interactive - member this.GetILAssemblyRef(reduceMemoryUsage, tryGetMetadataSnapshot) = - match this.ilAssemblyRef with - | Some assemblyRef -> assemblyRef + /// + /// For project references in the language service, this would result in a build of the project. + /// This is because ``EvaluateRawContents ctok`` is used. However this path is only currently used + /// in fsi.fs, which does not use project references. + // + member this.GetILAssemblyRef(ctok, reduceMemoryUsage, tryGetMetadataSnapshot) = + cancellable { + match this.ilAssemblyRef with + | Some assemblyRef -> return assemblyRef | None -> - match this.ProjectReference with - | Some _ -> failwith "IProjectReference is not allowed to be used in GetILAssemblyRef" - | None -> () - - let assemblyRef = - let readerSettings: ILReaderOptions = - { pdbDirPath=None - reduceMemoryUsage = reduceMemoryUsage - metadataOnly = MetadataOnlyFlag.Yes - tryGetMetadataSnapshot = tryGetMetadataSnapshot } - use reader = OpenILModuleReader this.resolvedPath readerSettings - mkRefToILAssembly reader.ILModuleDef.ManifestOfAssembly + let! assemblyRefOpt = + cancellable { + match this.ProjectReference with + | Some r -> + let! contents = r.EvaluateRawContents ctok + match contents with + | None -> return None + | Some contents -> + match contents.ILScopeRef with + | ILScopeRef.Assembly aref -> return Some aref + | _ -> return None + | None -> return None + } + let assemblyRef = + match assemblyRefOpt with + | Some aref -> aref + | None -> + let readerSettings: ILReaderOptions = + { pdbDirPath=None + reduceMemoryUsage = reduceMemoryUsage + metadataOnly = MetadataOnlyFlag.Yes + tryGetMetadataSnapshot = tryGetMetadataSnapshot } + use reader = OpenILModuleReader this.resolvedPath readerSettings + mkRefToILAssembly reader.ILModuleDef.ManifestOfAssembly this.ilAssemblyRef <- Some assemblyRef - assemblyRef + return assemblyRef + } type ImportedBinary = { FileName: string - RawMetadata: IRawFSharpAssemblyData + RawMetadata: IRawFSharpAssemblyData #if !NO_EXTENSIONTYPING ProviderGeneratedAssembly: System.Reflection.Assembly option IsProviderGenerated: bool @@ -267,7 +239,7 @@ type ImportedBinary = ILScopeRef: ILScopeRef } type ImportedAssembly = - { ILScopeRef: ILScopeRef + { ILScopeRef: ILScopeRef FSharpViewOfMetadata: CcuThunk AssemblyAutoOpenAttributes: string list AssemblyInternalsVisibleToAttributes: string list @@ -285,26 +257,19 @@ type CcuLoadFailureAction = | RaiseError | ReturnNone -type TcImportsLockToken() = - interface LockToken - -type TcImportsLock = Lock - -let RequireTcImportsLock (_tcitok: TcImportsLockToken, _thingProtected: 'T) = () - type TcConfig with - - member tcConfig.TryResolveLibWithDirectories (r: AssemblyReference) = + + member tcConfig.TryResolveLibWithDirectories (r: AssemblyReference) = let m, nm = r.Range, r.Text use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter // Only want to resolve certain extensions (otherwise, 'System.Xml' is ambiguous). // MSBuild resolution is limited to .exe and .dll so do the same here. let ext = System.IO.Path.GetExtension nm - let isNetModule = String.Compare(ext, ".netmodule", StringComparison.OrdinalIgnoreCase)=0 - + let isNetModule = String.Compare(ext, ".netmodule", StringComparison.OrdinalIgnoreCase)=0 + // See if the language service has already produced the contents of the assembly for us, virtually - match r.ProjectReference with - | Some _ -> + match r.ProjectReference with + | Some _ -> let resolved = r.Text let sysdir = tcConfig.IsSystemAssembly resolved Some @@ -313,10 +278,10 @@ type TcConfig with prepareToolTip = (fun () -> resolved) sysdir = sysdir ilAssemblyRef = None } - | None -> + | None -> - if String.Compare(ext, ".dll", StringComparison.OrdinalIgnoreCase)=0 - || String.Compare(ext, ".exe", StringComparison.OrdinalIgnoreCase)=0 + if String.Compare(ext, ".dll", StringComparison.OrdinalIgnoreCase)=0 + || String.Compare(ext, ".exe", StringComparison.OrdinalIgnoreCase)=0 || isNetModule then let searchPaths = @@ -332,17 +297,17 @@ type TcConfig with if isPoundRReference m then tcConfig.GetSearchPathsForLibraryFiles() @ [Path.GetDirectoryName(m.FileName)] - else + else tcConfig.GetSearchPathsForLibraryFiles() let resolved = TryResolveFileUsingPaths(searchPaths, m, nm) - match resolved with - | Some resolved -> + match resolved with + | Some resolved -> let sysdir = tcConfig.IsSystemAssembly resolved Some { originalReference = r resolvedPath = resolved - prepareToolTip = (fun () -> + prepareToolTip = (fun () -> let fusionName = System.Reflection.AssemblyName.GetAssemblyName(resolved).ToString() let line(append: string) = append.Trim([|' '|])+"\n" line resolved + line fusionName) @@ -360,7 +325,7 @@ type TcConfig with let isDLL = (String.Compare(ext, ".dll", StringComparison.OrdinalIgnoreCase) = 0) let isNetModule = (String.Compare(ext, ".netmodule", StringComparison.OrdinalIgnoreCase) = 0) - let rs = + let rs = if isExe || isDLL || isNetModule then [r] else @@ -376,56 +341,56 @@ type TcConfig with | CcuLoadFailureAction.ReturnNone -> None member tcConfig.MsBuildResolve (references, mode, errorAndWarningRange, showMessages) = - let logMessage showMessages = + let logMessage showMessages = if showMessages && tcConfig.showReferenceResolutions then (fun (message: string)->dprintf "%s\n" message) else ignore - let logDiagnostic showMessages = + let logDiagnostic showMessages = (fun isError code message-> - if showMessages && mode = ResolveAssemblyReferenceMode.ReportErrors then + if showMessages && mode = ResolveAssemblyReferenceMode.ReportErrors then if isError then errorR(MSBuildReferenceResolutionError(code, message, errorAndWarningRange)) else - match code with + match code with // These are warnings that mean 'not resolved' for some assembly. // Note that we don't get to know the name of the assembly that couldn't be resolved. // Ignore these and rely on the logic below to emit an error for each unresolved reference. | "MSB3246" // Resolved file has a bad image, no metadata, or is otherwise inaccessible. - | "MSB3106" + | "MSB3106" -> () - | _ -> - if code = "MSB3245" then + | _ -> + if code = "MSB3245" then errorR(MSBuildReferenceResolutionWarning(code, message, errorAndWarningRange)) else warning(MSBuildReferenceResolutionWarning(code, message, errorAndWarningRange))) - let targetProcessorArchitecture = + let targetProcessorArchitecture = match tcConfig.platform with | None -> "MSIL" | Some X86 -> "x86" | Some AMD64 -> "amd64" | Some IA64 -> "ia64" - - try - tcConfig.legacyReferenceResolver.Impl.Resolve - (tcConfig.resolutionEnvironment, - references, - tcConfig.targetFrameworkVersion, - tcConfig.GetTargetFrameworkDirectories(), - targetProcessorArchitecture, + + try + tcConfig.legacyReferenceResolver.Resolve + (tcConfig.resolutionEnvironment, + references, + tcConfig.targetFrameworkVersion, + tcConfig.GetTargetFrameworkDirectories(), + targetProcessorArchitecture, tcConfig.fsharpBinariesDir, // FSharp binaries directory tcConfig.includes, // Explicit include directories tcConfig.implicitIncludeDir, // Implicit include directory (likely the project directory) logMessage showMessages, logDiagnostic showMessages) - with - | LegacyResolutionFailure -> error(Error(FSComp.SR.buildAssemblyResolutionFailed(), errorAndWarningRange)) + with + ReferenceResolver.ResolutionFailure -> error(Error(FSComp.SR.buildAssemblyResolutionFailed(), errorAndWarningRange)) // NOTE!! if mode=Speculative then this method must not report ANY warnings or errors through 'warning' or 'error'. Instead // it must return warnings and errors as data // // NOTE!! if mode=ReportErrors then this method must not raise exceptions. It must just report the errors and recover - static member TryResolveLibsUsingMSBuildRules (tcConfig: TcConfig, + static member TryResolveLibsUsingMSBuildRules (tcConfig: TcConfig, originalReferences: AssemblyReference list, errorAndWarningRange: range, mode: ResolveAssemblyReferenceMode) : AssemblyResolution list * UnresolvedAssemblyReference list = @@ -437,7 +402,7 @@ type TcConfig with else // Group references by name with range values in the grouped value list. // In the grouped reference, store the index of the last use of the reference. - let groupedReferences = + let groupedReferences = originalReferences |> List.indexed |> Seq.groupBy(fun (_, reference) -> reference.Text) @@ -449,32 +414,32 @@ type TcConfig with |> Array.ofSeq // First, try to resolve everything as a file using simple resolution - let resolvedAsFile = - groupedReferences + let resolvedAsFile = + groupedReferences |> Array.map(fun (_filename, maxIndexOfReference, references)-> let assemblyResolution = references |> List.choose (fun r -> tcConfig.TryResolveLibWithDirectories r) - (maxIndexOfReference, assemblyResolution)) + (maxIndexOfReference, assemblyResolution)) |> Array.filter(fun (_, refs)->refs |> isNil |> not) - - let toMsBuild = [|0..groupedReferences.Length-1|] - |> Array.map(fun i->(p13 groupedReferences.[i]), (p23 groupedReferences.[i]), i) + + let toMsBuild = [|0..groupedReferences.Length-1|] + |> 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 = tcConfig.MsBuildResolve(toMsBuild, mode, errorAndWarningRange, (*showMessages*)true) + let resolutions = tcConfig.MsBuildResolve(toMsBuild, mode, errorAndWarningRange, (*showMessages*)true) // Map back to original assembly resolutions. - let resolvedByMsbuild = + let resolvedByMsbuild = resolutions - |> Array.map(fun resolvedFile -> + |> Array.map(fun resolvedFile -> let i = int resolvedFile.baggage let _, maxIndexOfReference, ms = groupedReferences.[i] let assemblyResolutions = 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 + { originalReference=originalReference + resolvedPath=canonicalItemSpec prepareToolTip = (fun () -> resolvedFile.prepareToolTip (originalReference.Text, canonicalItemSpec)) sysdir= tcConfig.IsSystemAssembly canonicalItemSpec ilAssemblyRef = None }) @@ -484,40 +449,41 @@ type TcConfig with // in the original specification and resort it to match the ordering that we had. let resultingResolutions = [resolvedByMsbuild;resolvedAsFile] - |> Array.concat + |> Array.concat |> Array.sortBy fst |> Array.map snd |> List.ofArray - |> List.concat - + |> List.concat + // O(N^2) here over a small set of referenced assemblies. let IsResolved(originalName: string) = if resultingResolutions |> List.exists(fun resolution -> resolution.originalReference.Text = originalName) then true - else + else // MSBuild resolution may have unified the result of two duplicate references. Try to re-resolve now. // If re-resolution worked then this was a removed duplicate. - tcConfig.MsBuildResolve([|originalName, ""|], mode, errorAndWarningRange, (*showMessages*)false).Length<>0 - - let unresolvedReferences = - groupedReferences + tcConfig.MsBuildResolve([|originalName, ""|], mode, errorAndWarningRange, (*showMessages*)false).Length<>0 + + let unresolvedReferences = + groupedReferences //|> Array.filter(p13 >> IsNotFileOrIsAssembly) - |> Array.filter(p13 >> IsResolved >> not) - |> List.ofArray + |> Array.filter(p13 >> IsResolved >> not) + |> List.ofArray // If mode=Speculative, then we haven't reported any errors. // We report the error condition by returning an empty list of resolutions - if mode = ResolveAssemblyReferenceMode.Speculative && (List.length unresolvedReferences) > 0 then + if mode = ResolveAssemblyReferenceMode.Speculative && (List.length unresolvedReferences) > 0 then [], (List.ofArray groupedReferences) |> List.map (fun (name, _, r) -> (name, r)) |> List.map UnresolvedAssemblyReference - else - resultingResolutions, unresolvedReferences |> List.map (fun (name, _, r) -> (name, r)) |> List.map UnresolvedAssemblyReference + else + resultingResolutions, unresolvedReferences |> List.map (fun (name, _, r) -> (name, r)) |> List.map UnresolvedAssemblyReference -[] -type TcAssemblyResolutions(tcConfig: TcConfig, results: AssemblyResolution list, unresolved: UnresolvedAssemblyReference list) = + +[] +type TcAssemblyResolutions(tcConfig: TcConfig, results: AssemblyResolution list, unresolved: UnresolvedAssemblyReference list) = let originalReferenceToResolution = results |> List.map (fun r -> r.originalReference.Text, r) |> Map.ofList let resolvedPathToResolution = results |> List.map (fun r -> r.resolvedPath, r) |> Map.ofList - /// Add some resolutions to the map of resolution results. + /// Add some resolutions to the map of resolution results. member _.AddResolutionResults newResults = TcAssemblyResolutions(tcConfig, results @ newResults, unresolved) /// Add some unresolved results. @@ -530,47 +496,47 @@ type TcAssemblyResolutions(tcConfig: TcConfig, results: AssemblyResolution list, member _.TryFindByOriginalReference(assemblyReference: AssemblyReference) = originalReferenceToResolution.TryFind assemblyReference.Text - /// Only used by F# Interactive - member _.TryFindByExactILAssemblyRef (assemblyRef) = + /// This doesn't need to be cancellable, it is only used by F# Interactive + member _.TryFindByExactILAssemblyRef (ctok, assemblyRef) = results |> List.tryFind (fun ar-> - let r = ar.GetILAssemblyRef(tcConfig.reduceMemoryUsage, tcConfig.tryGetMetadataSnapshot) + let r = ar.GetILAssemblyRef(ctok, tcConfig.reduceMemoryUsage, tcConfig.tryGetMetadataSnapshot) |> Cancellable.runWithoutCancellation r = assemblyRef) - /// Only used by F# Interactive - member _.TryFindBySimpleAssemblyName (simpleAssemName) = + /// This doesn't need to be cancellable, it is only used by F# Interactive + member _.TryFindBySimpleAssemblyName (ctok, simpleAssemName) = results |> List.tryFind (fun ar-> - let r = ar.GetILAssemblyRef(tcConfig.reduceMemoryUsage, tcConfig.tryGetMetadataSnapshot) + let r = ar.GetILAssemblyRef(ctok, tcConfig.reduceMemoryUsage, tcConfig.tryGetMetadataSnapshot) |> Cancellable.runWithoutCancellation r.Name = simpleAssemName) member _.TryFindByResolvedPath nm = resolvedPathToResolution.TryFind nm member _.TryFindByOriginalReferenceText nm = originalReferenceToResolution.TryFind nm - static member ResolveAssemblyReferences (tcConfig: TcConfig, assemblyList: AssemblyReference list, knownUnresolved: UnresolvedAssemblyReference list) : TcAssemblyResolutions = - let resolved, unresolved = - if tcConfig.useSimpleResolution then - let resolutions = - assemblyList - |> List.map (fun assemblyReference -> - try + static member ResolveAssemblyReferences (ctok, tcConfig: TcConfig, assemblyList: AssemblyReference list, knownUnresolved: UnresolvedAssemblyReference list) : TcAssemblyResolutions = + let resolved, unresolved = + if tcConfig.useSimpleResolution then + let resolutions = + assemblyList + |> List.map (fun assemblyReference -> + try Choice1Of2 (tcConfig.ResolveLibWithDirectories (CcuLoadFailureAction.RaiseError, assemblyReference) |> Option.get) - with e -> + with e -> errorRecovery e assemblyReference.Range Choice2Of2 assemblyReference) let successes = resolutions |> List.choose (function Choice1Of2 x -> Some x | _ -> None) let failures = resolutions |> List.choose (function Choice2Of2 x -> Some (UnresolvedAssemblyReference(x.Text, [x])) | _ -> None) successes, failures else - // we don't want to do assembly resolution concurrently, we assume MSBuild doesn't handle this + RequireCompilationThread ctok // we don't want to do assembly resolution concurrently, we assume MSBuild doesn't handle this TcConfig.TryResolveLibsUsingMSBuildRules (tcConfig, assemblyList, rangeStartup, ResolveAssemblyReferenceMode.ReportErrors) - TcAssemblyResolutions(tcConfig, resolved, unresolved @ knownUnresolved) + TcAssemblyResolutions(tcConfig, resolved, unresolved @ knownUnresolved) static member GetAllDllReferences (tcConfig: TcConfig) = [ let primaryReference = tcConfig.PrimaryAssemblyDllReference() let assumeDotNetFramework = primaryReference.SimpleAssemblyNameIs("mscorlib") - if not tcConfig.compilingFslib then + if not tcConfig.compilingFslib then yield tcConfig.CoreLibraryDllReference() if assumeDotNetFramework then // When building desktop then we need these additional dependencies @@ -588,212 +554,155 @@ type TcAssemblyResolutions(tcConfig: TcConfig, results: AssemblyResolution list, if found then yield asm if tcConfig.framework then - let references, _useDotNetFramework = tcConfig.FxResolver.GetDefaultReferences(tcConfig.useFsiAuxLib) - for s in references do + for s in defaultReferencesForScriptsAndOutOfProjectSources tcConfig.useFsiAuxLib assumeDotNetFramework tcConfig.useSdkRefs do yield AssemblyReference(rangeStartup, (if s.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) then s else s+".dll"), None) yield! tcConfig.referencedDLLs ] - static member SplitNonFoundationalResolutions (tcConfig: TcConfig) = + static member SplitNonFoundationalResolutions (ctok, tcConfig: TcConfig) = let assemblyList = TcAssemblyResolutions.GetAllDllReferences tcConfig - let resolutions = TcAssemblyResolutions.ResolveAssemblyReferences (tcConfig, assemblyList, tcConfig.knownUnresolvedReferences) - let frameworkDLLs, nonFrameworkReferences = resolutions.GetAssemblyResolutions() |> List.partition (fun r -> r.sysdir) + let resolutions = TcAssemblyResolutions.ResolveAssemblyReferences (ctok, tcConfig, assemblyList, tcConfig.knownUnresolvedReferences) + let frameworkDLLs, nonFrameworkReferences = resolutions.GetAssemblyResolutions() |> List.partition (fun r -> r.sysdir) let unresolved = resolutions.GetUnresolvedReferences() #if DEBUG let mutable itFailed = 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." - - for (UnresolvedAssemblyReference(referenceText, _ranges)) in unresolved do + unresolved + |> List.iter (fun (UnresolvedAssemblyReference(referenceText, _ranges)) -> if referenceText.Contains("mscorlib") then System.Diagnostics.Debug.Assert(false, sprintf "whoops, did not resolve mscorlib: '%s'%s" referenceText addedText) - itFailed <- true - - for x in frameworkDLLs do + itFailed <- true) + frameworkDLLs + |> List.iter (fun x -> if not(FileSystem.IsPathRootedShim(x.resolvedPath)) then System.Diagnostics.Debug.Assert(false, sprintf "frameworkDLL should be absolute path: '%s'%s" x.resolvedPath addedText) - itFailed <- true - - for x in nonFrameworkReferences do + itFailed <- true) + nonFrameworkReferences + |> List.iter (fun x -> if not(FileSystem.IsPathRootedShim(x.resolvedPath)) then - System.Diagnostics.Debug.Assert(false, sprintf "nonFrameworkReference should be absolute path: '%s'%s" x.resolvedPath addedText) - itFailed <- true - + System.Diagnostics.Debug.Assert(false, sprintf "nonFrameworkReference should be absolute path: '%s'%s" x.resolvedPath addedText) + itFailed <- true) if itFailed then // idea is, put a breakpoint here and then step through let assemblyList = TcAssemblyResolutions.GetAllDllReferences tcConfig - let resolutions = TcAssemblyResolutions.ResolveAssemblyReferences (tcConfig, assemblyList, []) - let _frameworkDLLs, _nonFrameworkReferences = resolutions.GetAssemblyResolutions() |> List.partition (fun r -> r.sysdir) + let resolutions = TcAssemblyResolutions.ResolveAssemblyReferences (ctok, tcConfig, assemblyList, []) + let _frameworkDLLs, _nonFrameworkReferences = resolutions.GetAssemblyResolutions() |> List.partition (fun r -> r.sysdir) () #endif frameworkDLLs, nonFrameworkReferences, unresolved - static member BuildFromPriorResolutions (tcConfig: TcConfig, resolutions, knownUnresolved) = + static member BuildFromPriorResolutions (ctok, tcConfig: TcConfig, resolutions, knownUnresolved) = let references = resolutions |> List.map (fun r -> r.originalReference) - TcAssemblyResolutions.ResolveAssemblyReferences (tcConfig, references, knownUnresolved) - - static member GetAssemblyResolutionInformation(tcConfig: TcConfig) = + TcAssemblyResolutions.ResolveAssemblyReferences (ctok, tcConfig, references, knownUnresolved) + + static member GetAssemblyResolutionInformation(ctok, tcConfig: TcConfig) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter let assemblyList = TcAssemblyResolutions.GetAllDllReferences tcConfig - let resolutions = TcAssemblyResolutions.ResolveAssemblyReferences (tcConfig, assemblyList, []) + let resolutions = TcAssemblyResolutions.ResolveAssemblyReferences (ctok, tcConfig, assemblyList, []) resolutions.GetAssemblyResolutions(), resolutions.GetUnresolvedReferences() //---------------------------------------------------------------------------- // Abstraction for project reference -let GetNameOfILModule (m: ILModuleDef) = - match m.Manifest with +let GetNameOfILModule (m: ILModuleDef) = + match m.Manifest with | Some manifest -> manifest.Name | None -> m.Name -let MakeScopeRefForILModule (ilModule: ILModuleDef) = - match ilModule.Manifest with +let MakeScopeRefForILModule (ilModule: ILModuleDef) = + match ilModule.Manifest with | Some m -> ILScopeRef.Assembly (mkRefToILAssembly m) | None -> ILScopeRef.Module (mkRefToILModule ilModule) -let GetCustomAttributesOfILModule (ilModule: ILModuleDef) = - (match ilModule.Manifest with Some m -> m.CustomAttrs | None -> ilModule.CustomAttrs).AsList +let GetCustomAttributesOfILModule (ilModule: ILModuleDef) = + (match ilModule.Manifest with Some m -> m.CustomAttrs | None -> ilModule.CustomAttrs).AsList -let GetAutoOpenAttributes ilModule = - ilModule |> GetCustomAttributesOfILModule |> List.choose TryFindAutoOpenAttr +let GetAutoOpenAttributes ilg ilModule = + ilModule |> GetCustomAttributesOfILModule |> List.choose (TryFindAutoOpenAttr ilg) -let GetInternalsVisibleToAttributes ilModule = - ilModule |> GetCustomAttributesOfILModule |> List.choose TryFindInternalsVisibleToAttr - -type RawFSharpAssemblyDataBackedByFileOnDisk (ilModule: ILModuleDef, ilAssemblyRefs) = +let GetInternalsVisibleToAttributes ilg ilModule = + ilModule |> GetCustomAttributesOfILModule |> List.choose (TryFindInternalsVisibleToAttr ilg) + +type RawFSharpAssemblyDataBackedByFileOnDisk (ilModule: ILModuleDef, ilAssemblyRefs) = let externalSigAndOptData = ["FSharp.Core"] - interface IRawFSharpAssemblyData with + interface IRawFSharpAssemblyData with - member _.GetAutoOpenAttributes() = GetAutoOpenAttributes ilModule + member __.GetAutoOpenAttributes ilg = GetAutoOpenAttributes ilg ilModule - member _.GetInternalsVisibleToAttributes() = GetInternalsVisibleToAttributes ilModule + member __.GetInternalsVisibleToAttributes ilg = GetInternalsVisibleToAttributes ilg ilModule - member _.TryGetILModuleDef() = Some ilModule + member __.TryGetILModuleDef() = Some ilModule - member _.GetRawFSharpSignatureData(m, ilShortAssemName, filename) = + member __.GetRawFSharpSignatureData(m, ilShortAssemName, filename) = let resources = ilModule.Resources.AsList - let sigDataReaders = + let sigDataReaders = [ for iresource in resources do - if IsSignatureDataResource iresource then + if IsSignatureDataResource iresource then let ccuName = GetSignatureDataResourceName iresource yield (ccuName, fun () -> iresource.GetBytes()) ] - - let sigDataReaders = - if sigDataReaders.IsEmpty && List.contains ilShortAssemName externalSigAndOptData then + + let sigDataReaders = + if sigDataReaders.IsEmpty && List.contains ilShortAssemName externalSigAndOptData then let sigFileName = Path.ChangeExtension(filename, "sigdata") - if not (FileSystem.FileExistsShim sigFileName) then + if not (FileSystem.SafeExists sigFileName) then error(Error(FSComp.SR.buildExpectedSigdataFile (FileSystem.GetFullPathShim sigFileName), m)) - [ (ilShortAssemName, fun () -> FileSystem.OpenFileForReadShim(sigFileName, useMemoryMappedFile=true, shouldShadowCopy=true).AsByteMemory().AsReadOnly())] + [ (ilShortAssemName, fun () -> ByteMemory.FromFile(sigFileName, FileAccess.Read, canShadowCopy=true).AsReadOnly())] else sigDataReaders sigDataReaders - member _.GetRawFSharpOptimizationData(m, ilShortAssemName, filename) = - let optDataReaders = + member __.GetRawFSharpOptimizationData(m, ilShortAssemName, filename) = + let optDataReaders = ilModule.Resources.AsList |> List.choose (fun r -> if IsOptimizationDataResource r then Some(GetOptimizationDataResourceName r, (fun () -> r.GetBytes())) else None) - // Look for optimization data in a file - let optDataReaders = - if optDataReaders.IsEmpty && List.contains ilShortAssemName externalSigAndOptData then + // Look for optimization data in a file + let optDataReaders = + if optDataReaders.IsEmpty && List.contains ilShortAssemName externalSigAndOptData then let optDataFile = Path.ChangeExtension(filename, "optdata") - if not (FileSystem.FileExistsShim optDataFile) then + if not (FileSystem.SafeExists optDataFile) then error(Error(FSComp.SR.buildExpectedFileAlongSideFSharpCore(optDataFile, FileSystem.GetFullPathShim optDataFile), m)) - [ (ilShortAssemName, (fun () -> FileSystem.OpenFileForReadShim(optDataFile, useMemoryMappedFile=true, shouldShadowCopy=true).AsByteMemory().AsReadOnly()))] + [ (ilShortAssemName, (fun () -> ByteMemory.FromFile(optDataFile, FileAccess.Read, canShadowCopy=true).AsReadOnly()))] else optDataReaders optDataReaders - member _.GetRawTypeForwarders() = - match ilModule.Manifest with + member __.GetRawTypeForwarders() = + match ilModule.Manifest with | Some manifest -> manifest.ExportedTypes | None -> mkILExportedTypes [] - member _.ShortAssemblyName = GetNameOfILModule ilModule + member __.ShortAssemblyName = GetNameOfILModule ilModule - member _.ILScopeRef = MakeScopeRefForILModule ilModule + member __.ILScopeRef = MakeScopeRefForILModule ilModule - member _.ILAssemblyRefs = ilAssemblyRefs + member __.ILAssemblyRefs = ilAssemblyRefs - member _.HasAnyFSharpSignatureDataAttribute = + member __.HasAnyFSharpSignatureDataAttribute = let attrs = GetCustomAttributesOfILModule ilModule List.exists IsSignatureDataVersionAttr attrs - member _.HasMatchingFSharpSignatureDataAttribute = + member __.HasMatchingFSharpSignatureDataAttribute ilg = let attrs = GetCustomAttributesOfILModule ilModule - List.exists (IsMatchingSignatureDataVersionAttr (parseILVersion Internal.Utilities.FSharpEnvironment.FSharpBinaryMetadataFormatRevision)) attrs - -[] -type RawFSharpAssemblyData (ilModule: ILModuleDef, ilAssemblyRefs) = - - interface IRawFSharpAssemblyData with - - member _.GetAutoOpenAttributes() = GetAutoOpenAttributes ilModule - - member _.GetInternalsVisibleToAttributes() = GetInternalsVisibleToAttributes ilModule - - member _.TryGetILModuleDef() = Some ilModule - - member _.GetRawFSharpSignatureData(_, _, _) = - let resources = ilModule.Resources.AsList - [ for iresource in resources do - if IsSignatureDataResource iresource then - let ccuName = GetSignatureDataResourceName iresource - yield (ccuName, fun () -> iresource.GetBytes()) ] - - member _.GetRawFSharpOptimizationData(_, _, _) = - ilModule.Resources.AsList - |> List.choose (fun r -> if IsOptimizationDataResource r then Some(GetOptimizationDataResourceName r, (fun () -> r.GetBytes())) else None) - - member _.GetRawTypeForwarders() = - match ilModule.Manifest with - | Some manifest -> manifest.ExportedTypes - | None -> mkILExportedTypes [] - - member _.ShortAssemblyName = GetNameOfILModule ilModule - - member _.ILScopeRef = MakeScopeRefForILModule ilModule - - member _.ILAssemblyRefs = ilAssemblyRefs - - member _.HasAnyFSharpSignatureDataAttribute = - let attrs = GetCustomAttributesOfILModule ilModule - List.exists IsSignatureDataVersionAttr attrs - - member _.HasMatchingFSharpSignatureDataAttribute = - let attrs = GetCustomAttributesOfILModule ilModule - List.exists (IsMatchingSignatureDataVersionAttr (parseILVersion Internal.Utilities.FSharpEnvironment.FSharpBinaryMetadataFormatRevision)) attrs + List.exists (IsMatchingSignatureDataVersionAttr ilg (IL.parseILVersion Internal.Utilities.FSharpEnvironment.FSharpBinaryMetadataFormatRevision)) attrs //---------------------------------------------------------------------------- // TcImports //-------------------------------------------------------------------------- [] -type TcImportsSafeDisposal(tciLock: TcImportsLock, disposeActions: ResizeArray unit>,disposeTypeProviderActions: ResizeArray unit>) = +type TcImportsSafeDisposal(disposeActions: ResizeArray unit>,disposeTypeProviderActions: ResizeArray unit>) = let mutable isDisposed = false let dispose () = - tciLock.AcquireLock (fun tcitok -> - - RequireTcImportsLock (tcitok, isDisposed) - RequireTcImportsLock (tcitok, disposeTypeProviderActions) - RequireTcImportsLock (tcitok, disposeActions) - - // disposing deliberately only closes this tcImports, not the ones up the chain - isDisposed <- true - if verbose then + // disposing deliberately only closes this tcImports, not the ones up the chain + isDisposed <- true + if verbose then dprintf "disposing of TcImports, %d binaries\n" disposeActions.Count - - let actions1 = disposeTypeProviderActions |> Seq.toArray - let actions2 = disposeActions |> Seq.toArray - - disposeTypeProviderActions.Clear() - disposeActions.Clear() - - for action in actions1 do action() - for action in actions2 do action() - ) + for action in disposeTypeProviderActions do action() + for action in disposeActions do action() override _.Finalize() = dispose () @@ -816,15 +725,13 @@ type TcImportsDllInfoHack = FileName: string } -and TcImportsWeakHack (tciLock: TcImportsLock, tcImports: WeakReference) = +and TcImportsWeakHack (tcImports: WeakReference) = let mutable dllInfos: TcImportsDllInfoHack list = [] - member _.SetDllInfos (value: ImportedBinary list) = - tciLock.AcquireLock <| fun tcitok -> - RequireTcImportsLock(tcitok, dllInfos) + member __.SetDllInfos (value: ImportedBinary list) = dllInfos <- value |> List.map (fun x -> { FileName = x.FileName }) - member _.Base: TcImportsWeakHack option = + member __.Base: TcImportsWeakHack option = match tcImports.TryGetTarget() with | true, strong -> match strong.Base with @@ -832,45 +739,48 @@ and TcImportsWeakHack (tciLock: TcImportsLock, tcImports: WeakReference None - | _ -> + | _ -> None - member _.SystemRuntimeContainsType typeName = + member __.SystemRuntimeContainsType typeName = match tcImports.TryGetTarget () with | true, strong -> strong.SystemRuntimeContainsType typeName | _ -> false -#endif +#endif /// Represents a table of imported assemblies with their resolutions. /// Is a disposable object, but it is recommended not to explicitly call Dispose unless you absolutely know nothing will be using its contents after the disposal. /// Otherwise, simply allow the GC to collect this and it will properly call Dispose from the finalizer. -and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAssemblyResolutions, importsBase: TcImports option, dependencyProviderOpt: DependencyProvider option) +and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAssemblyResolutions, importsBase: TcImports option, + ilGlobalsOpt, dependencyProviderOpt: DependencyProvider option) #if !NO_EXTENSIONTYPING - as this + as this #endif = - let tciLock = TcImportsLock() - - //---- Start protected by tciLock ------- let mutable resolutions = initialResolutions + let mutable importsBase: TcImports option = importsBase let mutable dllInfos: ImportedBinary list = [] let mutable dllTable: NameMap = NameMap.empty let mutable ccuInfos: ImportedAssembly list = [] let mutable ccuTable: NameMap = NameMap.empty - let mutable ccuThunks = ResizeArray unit)>() + + /// ccuThunks is a ConcurrentDictionary thus threadsafe + /// the key is a ccuThunk object, the value is a (unit->unit) func that when executed + /// the func is used to fix up the func and operates on data captured at the time the func is created. + /// func() is captured during phase2() of RegisterAndPrepareToImportReferencedDll(..) and PrepareToImportReferencedFSharpAssembly ( .. ) + let mutable ccuThunks = new ConcurrentDictionary unit)>() + let disposeActions = ResizeArray() + let mutable disposed = false + let mutable ilGlobalsOpt = ilGlobalsOpt + let mutable tcGlobals = None let disposeTypeProviderActions = ResizeArray() - #if !NO_EXTENSIONTYPING - let mutable generatedTypeRoots = new Dictionary() - let tcImportsWeak = TcImportsWeakHack (tciLock, WeakReference<_> this) + let mutable generatedTypeRoots = new System.Collections.Generic.Dictionary() + let mutable tcImportsWeak = TcImportsWeakHack (WeakReference<_> this) #endif - let disposal = new TcImportsSafeDisposal(tciLock, disposeActions, disposeTypeProviderActions) - //---- End protected by tciLock ------- - - let mutable disposed = false // this doesn't need locking, it's only for debugging - let mutable tcGlobals = None // this doesn't need locking, it's set during construction of the TcImports + let disposal = new TcImportsSafeDisposal(disposeActions, disposeTypeProviderActions) let CheckDisposed() = if disposed then assert false @@ -879,22 +789,24 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse CheckDisposed() (disposal :> IDisposable).Dispose() + // This is used to fixe up unresolved ccuThunks that were created during assembly import. + // the ccuThunks dictionary is a ConcurrentDictionary and thus threadsafe. + // Algorithm: // Get a snapshot of the current unFixedUp ccuThunks. // for each of those thunks, remove them from the dictionary, so any parallel threads can't do this work // If it successfully removed it from the dictionary then do the fixup // If the thunk remains unresolved add it back to the ccuThunks dictionary for further processing // If not then move on to the next thunk let fixupOrphanCcus () = - tciLock.AcquireLock <| fun tcitok -> - RequireTcImportsLock(tcitok, ccuThunks) - let contents = ccuThunks |> Seq.toArray - let unsuccessful = - [ for (ccuThunk, func) in contents do + let keys = ccuThunks.Keys + for ccuThunk in keys do + match ccuThunks.TryRemove(ccuThunk) with + | true, func -> if ccuThunk.IsUnresolvedReference then func() if ccuThunk.IsUnresolvedReference then - yield (ccuThunk, func) ] - ccuThunks <- ResizeArray (unsuccessful) + ccuThunks.TryAdd(ccuThunk, func) |> ignore + | _ -> () let availableToOptionalCcu = function | ResolvedCcu ccu -> Some ccu @@ -914,72 +826,58 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse | None -> false | None -> false - member internal tcImports.Base = - CheckDisposed() - importsBase + member internal tcImports.Base = + CheckDisposed() + importsBase member tcImports.CcuTable = - tciLock.AcquireLock <| fun tcitok -> - RequireTcImportsLock(tcitok, ccuTable) - CheckDisposed() - ccuTable - + CheckDisposed() + ccuTable + member tcImports.DllTable = - tciLock.AcquireLock <| fun tcitok -> - RequireTcImportsLock(tcitok, dllTable) - CheckDisposed() - dllTable - + CheckDisposed() + dllTable + #if !NO_EXTENSIONTYPING - member tcImports.Weak = + member tcImports.Weak = CheckDisposed() tcImportsWeak #endif member tcImports.RegisterCcu ccuInfo = - tciLock.AcquireLock <| fun tcitok -> CheckDisposed() - RequireTcImportsLock(tcitok, ccuInfos) - RequireTcImportsLock(tcitok, ccuTable) ccuInfos <- ccuInfos ++ ccuInfo // Assembly Ref Resolution: remove this use of ccu.AssemblyName ccuTable <- NameMap.add (ccuInfo.FSharpViewOfMetadata.AssemblyName) ccuInfo ccuTable member tcImports.RegisterDll dllInfo = - tciLock.AcquireLock <| fun tcitok -> CheckDisposed() - RequireTcImportsLock(tcitok, dllInfos) - RequireTcImportsLock(tcitok, dllTable) dllInfos <- dllInfos ++ dllInfo #if !NO_EXTENSIONTYPING tcImportsWeak.SetDllInfos dllInfos #endif dllTable <- NameMap.add (getNameOfScopeRef dllInfo.ILScopeRef) dllInfo dllTable - member tcImports.GetDllInfos() : ImportedBinary list = - tciLock.AcquireLock <| fun tcitok -> + member tcImports.GetDllInfos() : ImportedBinary list = CheckDisposed() - RequireTcImportsLock(tcitok, dllInfos) - match importsBase with - | Some importsBase -> importsBase.GetDllInfos() @ dllInfos + match importsBase with + | Some importsBase-> importsBase.GetDllInfos() @ dllInfos | None -> dllInfos - - member tcImports.AllAssemblyResolutions() = - tciLock.AcquireLock <| fun tcitok -> + + member tcImports.AllAssemblyResolutions() = CheckDisposed() - RequireTcImportsLock(tcitok, resolutions) let ars = resolutions.GetAssemblyResolutions() - match importsBase with + match importsBase with | Some importsBase-> importsBase.AllAssemblyResolutions() @ ars | None -> ars - + member tcImports.TryFindDllInfo (ctok: CompilationThreadToken, m, assemblyName, lookupOnly) = CheckDisposed() - let rec look (t: TcImports) = + let rec look (t: TcImports) = match NameMap.tryFind assemblyName t.DllTable with | Some res -> Some res - | None -> - match t.Base with + | None -> + match t.Base with | Some t2 -> look t2 | None -> None match look tcImports with @@ -989,44 +887,40 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse look tcImports member tcImports.FindDllInfo (ctok, m, assemblyName) = - match tcImports.TryFindDllInfo (ctok, m, assemblyName, lookupOnly=false) with + match tcImports.TryFindDllInfo (ctok, m, assemblyName, lookupOnly=false) with | Some res -> res | None -> error(Error(FSComp.SR.buildCouldNotResolveAssembly assemblyName, m)) member tcImports.GetImportedAssemblies() = - tciLock.AcquireLock <| fun tcitok -> CheckDisposed() - RequireTcImportsLock(tcitok, ccuInfos) match importsBase with - | Some importsBase -> List.append (importsBase.GetImportedAssemblies()) ccuInfos + | Some importsBase-> List.append (importsBase.GetImportedAssemblies()) ccuInfos | None -> ccuInfos member tcImports.GetCcusExcludingBase() = - tciLock.AcquireLock <| fun tcitok -> CheckDisposed() - RequireTcImportsLock(tcitok, ccuInfos) ccuInfos |> List.map (fun x -> x.FSharpViewOfMetadata) member tcImports.GetCcusInDeclOrder() = CheckDisposed() - List.map (fun x -> x.FSharpViewOfMetadata) (tcImports.GetImportedAssemblies()) + List.map (fun x -> x.FSharpViewOfMetadata) (tcImports.GetImportedAssemblies()) - // This is the main "assembly reference --> assembly" resolution routine. + // This is the main "assembly reference --> assembly" resolution routine. member tcImports.FindCcuInfo (ctok, m, assemblyName, lookupOnly) = CheckDisposed() let rec look (t: TcImports) = match NameMap.tryFind assemblyName t.CcuTable with | Some res -> Some res - | None -> - match t.Base with - | Some t2 -> look t2 + | None -> + match t.Base with + | Some t2 -> look t2 | None -> None match look tcImports with | Some res -> ResolvedImportedAssembly res | None -> tcImports.ImplicitLoadIfAllowed(ctok, m, assemblyName, lookupOnly) - match look tcImports with + match look tcImports with | Some res -> ResolvedImportedAssembly res | None -> UnresolvedImportedAssembly assemblyName @@ -1036,59 +930,46 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse | ResolvedImportedAssembly importedAssembly -> ResolvedCcu(importedAssembly.FSharpViewOfMetadata) | UnresolvedImportedAssembly assemblyName -> UnresolvedCcu assemblyName - member tcImports.FindCcuFromAssemblyRef(ctok, m, assemblyRef: ILAssemblyRef) = + member tcImports.FindCcuFromAssemblyRef(ctok, m, assemblyRef: ILAssemblyRef) = CheckDisposed() match tcImports.FindCcuInfo(ctok, m, assemblyRef.Name, lookupOnly=false) with | ResolvedImportedAssembly importedAssembly -> ResolvedCcu(importedAssembly.FSharpViewOfMetadata) | UnresolvedImportedAssembly _ -> UnresolvedCcu(assemblyRef.QualifiedName) - member tcImports.TryFindXmlDocumentationInfo(assemblyName: string) = - CheckDisposed() - let rec look (t: TcImports) = - match NameMap.tryFind assemblyName t.CcuTable with - | Some res -> Some res - | None -> - match t.Base with - | Some t2 -> look t2 - | None -> None - - match look tcImports with - | Some res -> res.FSharpViewOfMetadata.Deref.XmlDocumentationInfo - | _ -> None #if !NO_EXTENSIONTYPING - member tcImports.GetProvidedAssemblyInfo(ctok, m, assembly: Tainted) = + member tcImports.GetProvidedAssemblyInfo(ctok, m, assembly: Tainted) = let anameOpt = assembly.PUntaint((fun assembly -> match assembly with null -> None | a -> Some (a.GetName())), m) - match anameOpt with + match anameOpt with | None -> false, None - | Some aname -> + | Some aname -> let ilShortAssemName = aname.Name - match tcImports.FindCcu (ctok, m, ilShortAssemName, lookupOnly=true) with - | ResolvedCcu ccu -> - if ccu.IsProviderGenerated then + match tcImports.FindCcu (ctok, m, ilShortAssemName, lookupOnly=true) with + | ResolvedCcu ccu -> + if ccu.IsProviderGenerated then let dllinfo = tcImports.FindDllInfo(ctok, m, ilShortAssemName) true, dllinfo.ProviderGeneratedStaticLinkMap else false, None - | UnresolvedCcu _ -> + | UnresolvedCcu _ -> let g = tcImports.GetTcGlobals() let ilScopeRef = ILScopeRef.Assembly (ILAssemblyRef.FromAssemblyName aname) let fileName = aname.Name + ".dll" let bytes = assembly.PApplyWithProvider((fun (assembly, provider) -> assembly.GetManifestModuleContents provider), m).PUntaint(id, m) let tcConfig = tcConfigP.Get ctok - let ilModule, ilAssemblyRefs = - let opts: ILReaderOptions = + let ilModule, ilAssemblyRefs = + let opts: ILReaderOptions = { reduceMemoryUsage = tcConfig.reduceMemoryUsage - pdbDirPath = None + pdbDirPath = None metadataOnly = MetadataOnlyFlag.Yes tryGetMetadataSnapshot = tcConfig.tryGetMetadataSnapshot } let reader = OpenILModuleReaderFromBytes fileName bytes opts reader.ILModuleDef, reader.ILAssemblyRefs let theActualAssembly = assembly.PUntaint((fun x -> x.Handle), m) - let dllinfo = - { RawMetadata= RawFSharpAssemblyDataBackedByFileOnDisk (ilModule, ilAssemblyRefs) + let dllinfo = + { RawMetadata= RawFSharpAssemblyDataBackedByFileOnDisk (ilModule, ilAssemblyRefs) FileName=fileName ProviderGeneratedAssembly=Some theActualAssembly IsProviderGenerated=true @@ -1097,9 +978,9 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse ILAssemblyRefs = ilAssemblyRefs } tcImports.RegisterDll dllinfo - let ccuContents = Construct.NewCcuContents ilScopeRef m ilShortAssemName (Construct.NewEmptyModuleOrNamespaceType Namespace) + let ccuContents = Construct.NewCcuContents ilScopeRef m ilShortAssemName (Construct.NewEmptyModuleOrNamespaceType Namespace) - let ccuData: CcuData = + let ccuData: CcuData = { IsFSharp=false UsesFSharp20PlusQuotations=false InvalidateEvent=(new Event<_>()).Publish @@ -1108,22 +989,17 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse Contents = ccuContents ILScopeRef = ilScopeRef Stamp = newStamp() - SourceCodeDirectory = "" + SourceCodeDirectory = "" FileName = Some fileName MemberSignatureEquality = (fun ty1 ty2 -> typeEquivAux EraseAll g ty1 ty2) ImportProvidedType = (fun ty -> Import.ImportProvidedType (tcImports.GetImportMap()) m ty) TryGetILModuleDef = (fun () -> Some ilModule) - TypeForwarders = Map.empty - XmlDocumentationInfo = - match tcConfig.xmlDocInfoLoader with - | Some xmlDocInfoLoader -> xmlDocInfoLoader.TryLoad(fileName, ilModule) - | _ -> None - } - + TypeForwarders = Map.empty } + let ccu = CcuThunk.Create(ilShortAssemName, ccuData) - let ccuinfo = - { FSharpViewOfMetadata=ccu - ILScopeRef = ilScopeRef + let ccuinfo = + { FSharpViewOfMetadata=ccu + ILScopeRef = ilScopeRef AssemblyAutoOpenAttributes = [] AssemblyInternalsVisibleToAttributes = [] IsProviderGenerated = true @@ -1133,20 +1009,16 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse // Yes, it is generative true, dllinfo.ProviderGeneratedStaticLinkMap - member tcImports.RecordGeneratedTypeRoot root = - tciLock.AcquireLock <| fun tcitok -> - // checking if given ProviderGeneratedType was already recorded before (probably for another set of static parameters) + member tcImports.RecordGeneratedTypeRoot root = + // checking if given ProviderGeneratedType was already recorded before (probably for another set of static parameters) let (ProviderGeneratedType(_, ilTyRef, _)) = root - let index = - RequireTcImportsLock(tcitok, generatedTypeRoots) + let index = match generatedTypeRoots.TryGetValue ilTyRef with | true, (index, _) -> index | false, _ -> generatedTypeRoots.Count generatedTypeRoots.[ilTyRef] <- (index, root) - member tcImports.ProviderGeneratedTypeRoots = - tciLock.AcquireLock <| fun tcitok -> - RequireTcImportsLock(tcitok, generatedTypeRoots) + member tcImports.ProviderGeneratedTypeRoots = generatedTypeRoots.Values |> Seq.sortBy fst |> Seq.map snd @@ -1154,9 +1026,7 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse #endif member private tcImports.AttachDisposeAction action = - tciLock.AcquireLock <| fun tcitok -> CheckDisposed() - RequireTcImportsLock(tcitok, disposeActions) disposeActions.Add action #if !NO_EXTENSIONTYPING @@ -1164,21 +1034,21 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse CheckDisposed() disposeTypeProviderActions.Add action #endif - - // Note: the returned binary reader is associated with the tcImports, i.e. when the tcImports are closed - // then the reader is closed. - member tcImports.OpenILBinaryModule(ctok, filename, m) = + + // Note: the returned binary reader is associated with the tcImports, i.e. when the tcImports are closed + // then the reader is closed. + member tcImports.OpenILBinaryModule(ctok, filename, m) = try CheckDisposed() let tcConfig = tcConfigP.Get ctok let pdbDirPath = - // We open the pdb file if one exists parallel to the binary we - // are reading, so that --standalone will preserve debug information. - if tcConfig.openDebugInformationForLaterStaticLinking then - let pdbDir = try FileSystem.GetDirectoryNameShim filename with _ -> "." - let pdbFile = (try FileSystemUtils.chopExtension filename with _ -> filename) + ".pdb" + // We open the pdb file if one exists parallel to the binary we + // are reading, so that --standalone will preserve debug information. + if tcConfig.openDebugInformationForLaterStaticLinking then + let pdbDir = try Filename.directoryName filename with _ -> "." + let pdbFile = (try Filename.chopExtension filename with _ -> filename) + ".pdb" - if FileSystem.FileExistsShim pdbFile then + if FileSystem.SafeExists pdbFile then if verbose then dprintf "reading PDB file %s from directory %s\n" pdbFile pdbDir Some pdbDir else @@ -1199,45 +1069,41 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse CheckDisposed() let auxModTable = HashMultiMap(10, HashIdentity.Structural) fun viewedScopeRef -> - + let tcConfig = tcConfigP.Get ctok match viewedScopeRef with - | ILScopeRef.Module modref -> + | ILScopeRef.Module modref -> let key = modref.Name if not (auxModTable.ContainsKey key) then let resolution = tcConfig.ResolveLibWithDirectories (CcuLoadFailureAction.RaiseError, AssemblyReference(m, key, None)) |> Option.get let ilModule, _ = tcImports.OpenILBinaryModule(ctok, resolution.resolvedPath, m) auxModTable.[key] <- ilModule - auxModTable.[key] + auxModTable.[key] - | _ -> + | _ -> error(InternalError("Unexpected ILScopeRef.Local or ILScopeRef.Assembly in exported type table", m)) member tcImports.IsAlreadyRegistered nm = CheckDisposed() - tcImports.GetDllInfos() |> List.exists (fun dll -> - match dll.ILScopeRef with - | ILScopeRef.Assembly a -> a.Name = nm + tcImports.GetDllInfos() |> List.exists (fun dll -> + match dll.ILScopeRef with + | ILScopeRef.Assembly a -> a.Name = nm | _ -> false) - member tcImports.DependencyProvider = + member tcImports.DependencyProvider = CheckDisposed() - match dependencyProviderOpt with + match dependencyProviderOpt with | None -> Debug.Assert(false, "this should never be called on FrameworkTcImports") new DependencyProvider(null, null) | Some dependencyProvider -> dependencyProvider - member tcImports.GetImportMap() = + member tcImports.GetImportMap() = CheckDisposed() - let loaderInterface = - { new Import.AssemblyLoader with - member x.FindCcuFromAssemblyRef (ctok, m, ilAssemblyRef) = + let loaderInterface = + { new Import.AssemblyLoader with + member x.FindCcuFromAssemblyRef (ctok, m, ilAssemblyRef) = tcImports.FindCcuFromAssemblyRef (ctok, m, ilAssemblyRef) - - member x.TryFindXmlDocumentationInfo (assemblyName) = - tcImports.TryFindXmlDocumentationInfo(assemblyName) - #if !NO_EXTENSIONTYPING member x.GetProvidedAssemblyInfo (ctok, m, assembly) = tcImports.GetProvidedAssemblyInfo (ctok, m, assembly) member x.RecordGeneratedTypeRoot root = tcImports.RecordGeneratedTypeRoot root @@ -1245,7 +1111,7 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse } new Import.ImportMap (tcImports.GetTcGlobals(), loaderInterface) - // Note the tcGlobals are only available once mscorlib and fslib have been established. For TcImports, + // Note the tcGlobals are only available once mscorlib and fslib have been established. For TcImports, // they are logically only needed when converting AbsIL data structures into F# data structures, and // when converting AbsIL types in particular, since these types are normalized through the tables // in the tcGlobals (E.g. normalizing 'System.Int32' to 'int'). On the whole ImportILAssembly doesn't @@ -1255,40 +1121,44 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse // ImportILAssembly had a tcGlobals available when it really needs it. member tcImports.GetTcGlobals() : TcGlobals = CheckDisposed() - match tcGlobals with - | Some g -> g - | None -> - match importsBase with - | Some b -> b.GetTcGlobals() + match tcGlobals with + | Some g -> g + | None -> + match importsBase with + | Some b -> b.GetTcGlobals() | None -> failwith "unreachable: GetGlobals - are the references to mscorlib.dll and FSharp.Core.dll valid?" + member private tcImports.SetILGlobals ilg = + CheckDisposed() + ilGlobalsOpt <- Some ilg + member private tcImports.SetTcGlobals g = CheckDisposed() tcGlobals <- Some g #if !NO_EXTENSIONTYPING - member private tcImports.InjectProvidedNamespaceOrTypeIntoEntity - (typeProviderEnvironment, - tcConfig: TcConfig, - m, entity: Entity, - injectedNamespace, remainingNamespace, - provider, - st: Tainted option) = + member private tcImports.InjectProvidedNamespaceOrTypeIntoEntity + (typeProviderEnvironment, + tcConfig: TcConfig, + m, entity: Entity, + injectedNamespace, remainingNamespace, + provider, + st: Tainted option) = match remainingNamespace with | next :: rest -> - // Inject the namespace entity + // Inject the namespace entity match entity.ModuleOrNamespaceType.ModulesAndNamespacesByDemangledName.TryFind next with | Some childEntity -> tcImports.InjectProvidedNamespaceOrTypeIntoEntity (typeProviderEnvironment, tcConfig, m, childEntity, next :: injectedNamespace, rest, provider, st) - | None -> + | None -> // Build up the artificial namespace if there is not a real one. let cpath = CompPath(ILScopeRef.Local, injectedNamespace |> List.rev |> List.map (fun n -> (n, ModuleOrNamespaceKind.Namespace)) ) let mid = ident (next, rangeStartup) let mty = Construct.NewEmptyModuleOrNamespaceType Namespace - let newNamespace = Construct.NewModuleOrNamespace (Some cpath) taccessPublic mid XmlDoc.Empty [] (MaybeLazy.Strict mty) + let newNamespace = Construct.NewModuleOrNamespace (Some cpath) taccessPublic mid XmlDoc.Empty [] (MaybeLazy.Strict mty) entity.ModuleOrNamespaceType.AddModuleOrNamespaceByMutation newNamespace tcImports.InjectProvidedNamespaceOrTypeIntoEntity (typeProviderEnvironment, tcConfig, m, newNamespace, next :: injectedNamespace, rest, provider, st) - | [] -> + | [] -> match st with | Some st -> // Inject the wrapper type into the provider assembly. @@ -1296,73 +1166,73 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse // Generated types get properly injected into the provided (i.e. generated) assembly CCU in tc.fs let importProvidedType t = Import.ImportProvidedType (tcImports.GetImportMap()) m t - let isSuppressRelocate = tcConfig.isInteractive || st.PUntaint((fun st -> st.IsSuppressRelocate), m) - let newEntity = Construct.NewProvidedTycon(typeProviderEnvironment, st, importProvidedType, isSuppressRelocate, m) + let isSuppressRelocate = tcConfig.isInteractive || st.PUntaint((fun st -> st.IsSuppressRelocate), m) + let newEntity = Construct.NewProvidedTycon(typeProviderEnvironment, st, importProvidedType, isSuppressRelocate, m) entity.ModuleOrNamespaceType.AddProvidedTypeEntity newEntity | None -> () entity.entity_tycon_repr <- - match entity.TypeReprInfo with - // This is the first extension - | TNoRepr -> + match entity.TypeReprInfo with + // This is the first extension + | TNoRepr -> TProvidedNamespaceExtensionPoint(typeProviderEnvironment, [provider]) - + // Add to the existing list of extensions - | TProvidedNamespaceExtensionPoint(resolutionFolder, prior) as repr -> - if not(prior |> List.exists(fun r->Tainted.EqTainted r provider)) then + | TProvidedNamespaceExtensionPoint(resolutionFolder, prior) as repr -> + if not(prior |> List.exists(fun r->Tainted.EqTainted r provider)) then TProvidedNamespaceExtensionPoint(resolutionFolder, provider :: prior) - else + else repr | _ -> failwith "Unexpected representation in namespace entity referred to by a type provider" - member tcImportsStrong.ImportTypeProviderExtensions - (ctok, tcConfig: TcConfig, - fileNameOfRuntimeAssembly, - ilScopeRefOfRuntimeAssembly, - runtimeAssemblyAttributes: ILAttribute list, - entityToInjectInto, invalidateCcu: Event<_>, m) = + member tcImportsStrong.ImportTypeProviderExtensions + (ctok, tcConfig: TcConfig, + fileNameOfRuntimeAssembly, + ilScopeRefOfRuntimeAssembly, + runtimeAssemblyAttributes: ILAttribute list, + entityToInjectInto, invalidateCcu: Event<_>, m) = let startingErrorCount = CompileThreadStatic.ErrorLogger.ErrorCount - // Find assembly level TypeProviderAssemblyAttributes. These will point to the assemblies that + // Find assembly level TypeProviderAssemblyAttributes. These will point to the assemblies that // have class which implement ITypeProvider and which have TypeProviderAttribute on them. - let designTimeAssemblyNames = - runtimeAssemblyAttributes - |> List.choose (TryDecodeTypeProviderAssemblyAttr) + let designTimeAssemblyNames = + runtimeAssemblyAttributes + |> List.choose (TryDecodeTypeProviderAssemblyAttr (defaultArg ilGlobalsOpt EcmaMscorlibILGlobals)) // If no design-time assembly is specified, use the runtime assembly |> List.map (function null -> fileNameOfRuntimeAssembly | s -> s) - // For each simple name of a design-time assembly, we take the first matching one in the order they are + // For each simple name of a design-time assembly, we take the first matching one in the order they are // specified in the attributes |> List.distinctBy (fun s -> try Path.GetFileNameWithoutExtension s with _ -> s) if not (List.isEmpty designTimeAssemblyNames) then // Find the SystemRuntimeAssemblyVersion value to report in the TypeProviderConfig. - let primaryAssemblyVersion = + let primaryAssemblyVersion = let primaryAssemblyRef = tcConfig.PrimaryAssemblyDllReference() let resolution = tcConfig.ResolveLibWithDirectories (CcuLoadFailureAction.RaiseError, primaryAssemblyRef) |> Option.get // MSDN: this method causes the file to be opened and closed, but the assembly is not added to this domain let name = System.Reflection.AssemblyName.GetAssemblyName(resolution.resolvedPath) name.Version - let typeProviderEnvironment = + let typeProviderEnvironment = { resolutionFolder = tcConfig.implicitIncludeDir outputFile = tcConfig.outputFile - showResolutionMessages = tcConfig.showExtensionTypeMessages + showResolutionMessages = tcConfig.showExtensionTypeMessages referencedAssemblies = Array.distinct [| for r in tcImportsStrong.AllAssemblyResolutions() -> r.resolvedPath |] temporaryFolder = FileSystem.GetTempPathShim() } // The type provider should not hold strong references to disposed // TcImport objects. So the callbacks provided in the type provider config - // dispatch via a thunk which gets set to a non-resource-capturing - // failing function when the object is disposed. - let systemRuntimeContainsType = + // dispatch via a thunk which gets set to a non-resource-capturing + // failing function when the object is disposed. + let systemRuntimeContainsType = // NOTE: do not touch this, edit: but we did, we had no choice - TPs cannot hold a strong reference on TcImports "ever". let tcImports = tcImportsWeak let mutable systemRuntimeContainsTypeRef = fun typeName -> tcImports.SystemRuntimeContainsType typeName tcImportsStrong.AttachDisposeTypeProviderAction(fun () -> systemRuntimeContainsTypeRef <- fun _ -> raise (System.ObjectDisposedException("The type provider has been disposed"))) - fun arg -> systemRuntimeContainsTypeRef arg + fun arg -> systemRuntimeContainsTypeRef arg let providers = [ for designTimeAssemblyName in designTimeAssemblyNames do @@ -1378,16 +1248,16 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse m) ] // Note, type providers are disposable objects. The TcImports owns the provider objects - when/if it is disposed, the providers are disposed. // We ignore all exceptions from provider disposal. - for provider in providers do - tcImportsStrong.AttachDisposeTypeProviderAction(fun () -> - try + for provider in providers do + tcImportsStrong.AttachDisposeTypeProviderAction(fun () -> + try provider.PUntaintNoFailure(fun x -> x.Dispose()) - with e -> + with e -> ()) - + // Add the invalidation signal handlers to each provider - for provider in providers do - provider.PUntaint((fun tp -> + for provider in providers do + provider.PUntaint((fun tp -> // Register the type provider invalidation handler. // @@ -1395,33 +1265,33 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse // lifetime of captured objects, especially in case the type provider instance gets leaked // or keeps itself alive mistakenly, e.g. via some global state in the type provider instance. // - // The closure captures + // The closure captures // 1. an Event value, ultimately this is made available in all CCus as ccu.InvalidateEvent - // 2. any handlers registered to ccu.InvalidateEvent + // 2. any handlers registered to ccu.InvalidateEvent // 3. a message string // - // Note that the invalidation handler does not explicitly capture the TcImports. + // Note that the invalidation handler does not explicitly capture the TcImports. // The only place where handlers are registered is to ccu.InvalidateEvent is in IncrementalBuilder.fs. let capturedInvalidateCcu = invalidateCcu let capturedMessage = "The provider '" + fileNameOfRuntimeAssembly + "' reported a change" - let handler = tp.Invalidate.Subscribe(fun _ -> capturedInvalidateCcu.Trigger (capturedMessage)) + let handler = tp.Invalidate.Subscribe(fun _ -> capturedInvalidateCcu.Trigger (capturedMessage)) // When the TcImports is disposed we detach the invalidation callback - tcImportsStrong.AttachDisposeTypeProviderAction(fun () -> try handler.Dispose() with _ -> ())), m) - + tcImportsStrong.AttachDisposeTypeProviderAction(fun () -> try handler.Dispose() with _ -> ())), m) + match providers with - | [] -> - warning(Error(FSComp.SR.etHostingAssemblyFoundWithoutHosts(fileNameOfRuntimeAssembly, typeof.FullName), m)) - | _ -> + | [] -> + warning(Error(FSComp.SR.etHostingAssemblyFoundWithoutHosts(fileNameOfRuntimeAssembly, typeof.FullName), m)) + | _ -> #if DEBUG if typeProviderEnvironment.showResolutionMessages then dprintfn "Found extension type hosting hosting assembly '%s' with the following extensions:" fileNameOfRuntimeAssembly providers |> List.iter(fun provider ->dprintfn " %s" (ExtensionTyping.DisplayNameOfTypeProvider(provider.TypeProvider, m))) #endif - - for provider in providers do + + for provider in providers do try // Inject an entity for the namespace, or if one already exists, then record this as a provider // for that namespace. @@ -1429,17 +1299,17 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse let path = ExtensionTyping.GetProvidedNamespaceAsPath(m, provider, providedNamespace.PUntaint((fun r -> r.NamespaceName), m)) tcImportsStrong.InjectProvidedNamespaceOrTypeIntoEntity (typeProviderEnvironment, tcConfig, m, entityToInjectInto, [], path, provider, None) - // Inject entities for the types returned by provider.GetTypes(). + // Inject entities for the types returned by provider.GetTypes(). // // NOTE: The types provided by GetTypes() are available for name resolution // when the namespace is "opened". This is part of the specification of the language // feature. let tys = providedNamespace.PApplyArray((fun provider -> provider.GetTypes()), "GetTypes", m) let ptys = [| for ty in tys -> ty.PApply((fun ty -> ty |> ProvidedType.CreateNoContext), m) |] - for st in ptys do + for st in ptys do tcImportsStrong.InjectProvidedNamespaceOrTypeIntoEntity (typeProviderEnvironment, tcConfig, m, entityToInjectInto, [], path, provider, Some st) - for providedNestedNamespace in providedNamespace.PApplyArray((fun provider -> provider.GetNestedNamespaces()), "GetNestedNamespaces", m) do + for providedNestedNamespace in providedNamespace.PApplyArray((fun provider -> provider.GetNestedNamespaces()), "GetNestedNamespaces", m) do loop providedNestedNamespace RequireCompilationThread ctok // IProvidedType.GetNamespaces is an example of a type provider call @@ -1447,58 +1317,59 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse for providedNamespace in providedNamespaces do loop providedNamespace - with e -> + with e -> errorRecovery e m if startingErrorCount Option.isSome // Add a referenced assembly // - // Retargetable assembly refs are required for binaries that must run + // Retargetable assembly refs are required for binaries that must run // against DLLs supported by multiple publishers. For example // Compact Framework binaries must use this. However it is not // clear when else it is required, e.g. for Mono. - + member tcImports.PrepareToImportReferencedILAssembly (ctok, m, filename, dllinfo: ImportedBinary) = CheckDisposed() let tcConfig = tcConfigP.Get ctok assert dllinfo.RawMetadata.TryGetILModuleDef().IsSome let ilModule = dllinfo.RawMetadata.TryGetILModuleDef().Value let ilScopeRef = dllinfo.ILScopeRef - let aref = - match ilScopeRef with - | ILScopeRef.Assembly aref -> aref + let aref = + match ilScopeRef with + | ILScopeRef.Assembly aref -> aref | _ -> error(InternalError("PrepareToImportReferencedILAssembly: cannot reference .NET netmodules directly, reference the containing assembly instead", m)) let nm = aref.Name if verbose then dprintn ("Converting IL assembly to F# data structures "+nm) let auxModuleLoader = tcImports.MkLoaderForMultiModuleILAssemblies ctok m let invalidateCcu = new Event<_>() - let ccu = Import.ImportILAssembly(tcImports.GetImportMap, m, auxModuleLoader, tcConfig.xmlDocInfoLoader, ilScopeRef, tcConfig.implicitIncludeDir, Some filename, ilModule, invalidateCcu.Publish) + let ccu = Import.ImportILAssembly(tcImports.GetImportMap, m, auxModuleLoader, ilScopeRef, tcConfig.implicitIncludeDir, Some filename, ilModule, invalidateCcu.Publish) + + let ilg = defaultArg ilGlobalsOpt EcmaMscorlibILGlobals - let ccuinfo = - { FSharpViewOfMetadata=ccu - ILScopeRef = ilScopeRef - AssemblyAutoOpenAttributes = GetAutoOpenAttributes ilModule - AssemblyInternalsVisibleToAttributes = GetInternalsVisibleToAttributes ilModule + let ccuinfo = + { FSharpViewOfMetadata=ccu + ILScopeRef = ilScopeRef + AssemblyAutoOpenAttributes = GetAutoOpenAttributes ilg ilModule + AssemblyInternalsVisibleToAttributes = GetInternalsVisibleToAttributes ilg ilModule #if !NO_EXTENSIONTYPING - IsProviderGenerated = false + IsProviderGenerated = false TypeProviders = [] #endif FSharpOptimizationData = notlazy None } tcImports.RegisterCcu ccuinfo - let phase2 () = #if !NO_EXTENSIONTYPING ccuinfo.TypeProviders <- tcImports.ImportTypeProviderExtensions (ctok, tcConfig, filename, ilScopeRef, ilModule.ManifestOfAssembly.CustomAttrs.AsList, ccu.Contents, invalidateCcu, m) @@ -1511,36 +1382,36 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse #if !NO_EXTENSIONTYPING let tcConfig = tcConfigP.Get ctok #endif - let ilModule = dllinfo.RawMetadata - let ilScopeRef = dllinfo.ILScopeRef - let ilShortAssemName = getNameOfScopeRef ilScopeRef + let ilModule = dllinfo.RawMetadata + let ilScopeRef = dllinfo.ILScopeRef + let ilShortAssemName = getNameOfScopeRef ilScopeRef if verbose then dprintn ("Converting F# assembly to F# data structures "+(getNameOfScopeRef ilScopeRef)) if verbose then dprintn ("Relinking interface info from F# assembly "+ilShortAssemName) let optDataReaders = ilModule.GetRawFSharpOptimizationData(m, ilShortAssemName, filename) - let ccuRawDataAndInfos = + let ccuRawDataAndInfos = ilModule.GetRawFSharpSignatureData(m, ilShortAssemName, filename) - |> List.map (fun (ccuName, sigDataReader) -> + |> List.map (fun (ccuName, sigDataReader) -> let data = GetSignatureData (filename, ilScopeRef, ilModule.TryGetILModuleDef(), sigDataReader) let optDatas = Map.ofList optDataReaders - let minfo: PickledCcuInfo = data.RawData - let mspec = minfo.mspec + let minfo: PickledCcuInfo = data.RawData + let mspec = minfo.mspec #if !NO_EXTENSIONTYPING let invalidateCcu = new Event<_>() #endif let codeDir = minfo.compileTimeWorkingDir - let ccuData: CcuData = + let ccuData: CcuData = { ILScopeRef=ilScopeRef Stamp = newStamp() - FileName = Some filename + FileName = Some filename QualifiedName= Some(ilScopeRef.QualifiedName) SourceCodeDirectory = codeDir (* note: in some cases we fix up this information later *) IsFSharp=true - Contents = mspec + Contents = mspec #if !NO_EXTENSIONTYPING InvalidateEvent=invalidateCcu.Publish IsProviderGenerated = false @@ -1549,50 +1420,44 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse TryGetILModuleDef = ilModule.TryGetILModuleDef UsesFSharp20PlusQuotations = minfo.usesQuotations MemberSignatureEquality= (fun ty1 ty2 -> typeEquivAux EraseAll (tcImports.GetTcGlobals()) ty1 ty2) - TypeForwarders = ImportILAssemblyTypeForwarders(tcImports.GetImportMap, m, ilModule.GetRawTypeForwarders()) - XmlDocumentationInfo = - match tcConfig.xmlDocInfoLoader, ilModule.TryGetILModuleDef() with - | Some xmlDocInfoLoader, Some ilModuleDef -> xmlDocInfoLoader.TryLoad(filename, ilModuleDef) - | _ -> None - } + TypeForwarders = ImportILAssemblyTypeForwarders(tcImports.GetImportMap, m, ilModule.GetRawTypeForwarders()) } let ccu = CcuThunk.Create(ccuName, ccuData) - let optdata = - lazy - (match Map.tryFind ccuName optDatas with - | None -> - if verbose then dprintf "*** no optimization data for CCU %s, was DLL compiled with --no-optimization-data??\n" ccuName + let optdata = + lazy + (match Map.tryFind ccuName optDatas with + | None -> + if verbose then dprintf "*** no optimization data for CCU %s, was DLL compiled with --no-optimization-data??\n" ccuName None | Some info -> let data = GetOptimizationData (filename, ilScopeRef, ilModule.TryGetILModuleDef(), info) let fixupThunk () = data.OptionalFixup(fun nm -> availableToOptionalCcu(tcImports.FindCcu(ctok, m, nm, lookupOnly=false))) // Make a note of all ccuThunks that may still need to be fixed up when other dlls are loaded - tciLock.AcquireLock (fun tcitok -> - RequireTcImportsLock(tcitok, ccuThunks) - for ccuThunk in data.FixupThunks do - if ccuThunk.IsUnresolvedReference then - ccuThunks.Add(ccuThunk, fun () -> fixupThunk () |> ignore) |> ignore - ) + for ccuThunk in data.FixupThunks do + if ccuThunk.IsUnresolvedReference then + ccuThunks.TryAdd(ccuThunk, fun () -> fixupThunk () |> ignore) |> ignore if verbose then dprintf "found optimization data for CCU %s\n" ccuName Some (fixupThunk ())) - let ccuinfo = - { FSharpViewOfMetadata=ccu - AssemblyAutoOpenAttributes = ilModule.GetAutoOpenAttributes() - AssemblyInternalsVisibleToAttributes = ilModule.GetInternalsVisibleToAttributes() - FSharpOptimizationData=optdata + let ilg = defaultArg ilGlobalsOpt EcmaMscorlibILGlobals + + let ccuinfo = + { FSharpViewOfMetadata=ccu + AssemblyAutoOpenAttributes = ilModule.GetAutoOpenAttributes ilg + AssemblyInternalsVisibleToAttributes = ilModule.GetInternalsVisibleToAttributes ilg + FSharpOptimizationData=optdata #if !NO_EXTENSIONTYPING IsProviderGenerated = false TypeProviders = [] #endif - ILScopeRef = ilScopeRef } + ILScopeRef = ilScopeRef } - let phase2() = + let phase2() = #if !NO_EXTENSIONTYPING - match ilModule.TryGetILModuleDef() with + match ilModule.TryGetILModuleDef() with | None -> () // no type providers can be used without a real IL Module present | Some ilModule -> let tps = tcImports.ImportTypeProviderExtensions (ctok, tcConfig, filename, ilScopeRef, ilModule.ManifestOfAssembly.CustomAttrs.AsList, ccu.Contents, invalidateCcu, m) @@ -1602,7 +1467,7 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse #endif data, ccuinfo, phase2) - // Register all before relinking to cope with mutually-referential ccus + // Register all before relinking to cope with mutually-referential ccus ccuRawDataAndInfos |> List.iter (p23 >> tcImports.RegisterCcu) let phase2 () = (* Relink *) @@ -1613,9 +1478,7 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse fixupThunk() for ccuThunk in data.FixupThunks do if ccuThunk.IsUnresolvedReference then - tciLock.AcquireLock <| fun tcitok -> - RequireTcImportsLock(tcitok, ccuThunks) - ccuThunks.Add(ccuThunk, fixupThunk) |> ignore + ccuThunks.TryAdd(ccuThunk, fixupThunk) |> ignore ) #if !NO_EXTENSIONTYPING ccuRawDataAndInfos |> List.iter (fun (_, _, phase2) -> phase2()) @@ -1624,43 +1487,35 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse phase2 // NOTE: When used in the Language Service this can cause the transitive checking of projects. Hence it must be cancellable. - member tcImports.TryRegisterAndPrepareToImportReferencedDll (ctok, r: AssemblyResolution) : NodeCode<(_ * (unit -> AvailableImportedAssembly list)) option> = - node { + member tcImports.RegisterAndPrepareToImportReferencedDll (ctok, r: AssemblyResolution) : Cancellable<_ * (unit -> AvailableImportedAssembly list)> = + cancellable { CheckDisposed() let m = r.originalReference.Range let filename = r.resolvedPath - let! contentsOpt = - node { - match r.ProjectReference with - | Some ilb -> - return! ilb.EvaluateRawContents() - | None -> - return None + let! contentsOpt = + cancellable { + match r.ProjectReference with + | Some ilb -> return! ilb.EvaluateRawContents ctok + | None -> return None } - // If we have a project reference but did not get any valid contents, - // just return None and do not attempt to read elsewhere. - if contentsOpt.IsNone && r.ProjectReference.IsSome then - return None - else - - let assemblyData = - match contentsOpt with + let assemblyData = + match contentsOpt with | Some ilb -> ilb - | None -> + | None -> let ilModule, ilAssemblyRefs = tcImports.OpenILBinaryModule(ctok, filename, m) RawFSharpAssemblyDataBackedByFileOnDisk (ilModule, ilAssemblyRefs) :> IRawFSharpAssemblyData - let ilShortAssemName = assemblyData.ShortAssemblyName + let ilShortAssemName = assemblyData.ShortAssemblyName let ilScopeRef = assemblyData.ILScopeRef - if tcImports.IsAlreadyRegistered ilShortAssemName then + if tcImports.IsAlreadyRegistered ilShortAssemName then let dllinfo = tcImports.FindDllInfo(ctok, m, ilShortAssemName) - let phase2() = [tcImports.FindCcuInfo(ctok, m, ilShortAssemName, lookupOnly=true)] - return Some(dllinfo, phase2) - else - let dllinfo = - { RawMetadata=assemblyData + let phase2() = [tcImports.FindCcuInfo(ctok, m, ilShortAssemName, lookupOnly=true)] + return dllinfo, phase2 + else + let dllinfo = + { RawMetadata=assemblyData FileName=filename #if !NO_EXTENSIONTYPING ProviderGeneratedAssembly=None @@ -1670,63 +1525,59 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse ILScopeRef = ilScopeRef ILAssemblyRefs = assemblyData.ILAssemblyRefs } tcImports.RegisterDll dllinfo + let ilg = defaultArg ilGlobalsOpt EcmaMscorlibILGlobals let phase2 = - if assemblyData.HasAnyFSharpSignatureDataAttribute then - if not assemblyData.HasMatchingFSharpSignatureDataAttribute then + if assemblyData.HasAnyFSharpSignatureDataAttribute then + if not (assemblyData.HasMatchingFSharpSignatureDataAttribute ilg) then errorR(Error(FSComp.SR.buildDifferentVersionMustRecompile filename, m)) tcImports.PrepareToImportReferencedILAssembly (ctok, m, filename, dllinfo) - else + else try tcImports.PrepareToImportReferencedFSharpAssembly (ctok, m, filename, dllinfo) with e -> error(Error(FSComp.SR.buildErrorOpeningBinaryFile(filename, e.Message), m)) else tcImports.PrepareToImportReferencedILAssembly (ctok, m, filename, dllinfo) - return Some(dllinfo, phase2) + return dllinfo, phase2 } // NOTE: When used in the Language Service this can cause the transitive checking of projects. Hence it must be cancellable. member tcImports.RegisterAndImportReferencedAssemblies (ctok, nms: AssemblyResolution list) = - node { + cancellable { CheckDisposed() - - let! results = - nms - |> List.map (fun nm -> - node { - try - return! tcImports.TryRegisterAndPrepareToImportReferencedDll (ctok, nm) - with e -> - errorR(Error(FSComp.SR.buildProblemReadingAssembly(nm.resolvedPath, e.Message), nm.originalReference.Range)) - return None - } - ) - |> NodeCode.Sequential - - let dllinfos, phase2s = results |> Array.choose id |> List.ofArray |> List.unzip + let! results = + nms |> Cancellable.each (fun nm -> + cancellable { + try + let! res = tcImports.RegisterAndPrepareToImportReferencedDll (ctok, nm) + return Some res + with e -> + errorR(Error(FSComp.SR.buildProblemReadingAssembly(nm.resolvedPath, e.Message), nm.originalReference.Range)) + return None + }) + + let dllinfos, phase2s = results |> List.choose id |> List.unzip fixupOrphanCcus() - let ccuinfos = (List.collect (fun phase2 -> phase2()) phase2s) + let ccuinfos = (List.collect (fun phase2 -> phase2()) phase2s) return dllinfos, ccuinfos } - + /// Note that implicit loading is not used for compilations from MSBuild, which passes ``--noframework`` - /// Implicit loading is done in non-cancellation mode. Implicit loading is never used in the language service, so + /// Implicit loading is done in non-cancellation mode. Implicit loading is never used in the language service, so /// no cancellation is needed. - member tcImports.ImplicitLoadIfAllowed (ctok, m, assemblyName, lookupOnly) = + member tcImports.ImplicitLoadIfAllowed (ctok, m, assemblyName, lookupOnly) = CheckDisposed() // If the user is asking for the default framework then also try to resolve other implicit assemblies as they are discovered. // Using this flag to mean 'allow implicit discover of assemblies'. let tcConfig = tcConfigP.Get ctok if not lookupOnly && tcConfig.implicitlyResolveAssemblies then - let tryFile speculativeFileName = + let tryFile speculativeFileName = let foundFile = tcImports.TryResolveAssemblyReference (ctok, AssemblyReference (m, speculativeFileName, None), ResolveAssemblyReferenceMode.Speculative) - match foundFile with + match foundFile with | OkResult (warns, res) -> ReportWarnings warns - tcImports.RegisterAndImportReferencedAssemblies(ctok, res) - |> NodeCode.RunImmediateWithoutCancellation - |> ignore + tcImports.RegisterAndImportReferencedAssemblies(ctok, res) |> Cancellable.runWithoutCancellation |> ignore true - | ErrorResult (_warns, _err) -> + | ErrorResult (_warns, _err) -> // Throw away warnings and errors - this is speculative loading false @@ -1734,55 +1585,48 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse else tryFile (assemblyName + ".exe") |> ignore #if !NO_EXTENSIONTYPING - member tcImports.TryFindProviderGeneratedAssemblyByName(ctok, assemblyName: string) : System.Reflection.Assembly option = + member tcImports.TryFindProviderGeneratedAssemblyByName(ctok, assemblyName: string) : System.Reflection.Assembly option = // The assembly may not be in the resolutions, but may be in the load set including EST injected assemblies - match tcImports.TryFindDllInfo (ctok, range0, assemblyName, lookupOnly=true) with - | Some res -> + match tcImports.TryFindDllInfo (ctok, range0, assemblyName, lookupOnly=true) with + | Some res -> // Provider-generated assemblies don't necessarily have an on-disk representation we can load. - res.ProviderGeneratedAssembly + res.ProviderGeneratedAssembly | _ -> None #endif - /// Only used by F# Interactive - member tcImports.TryFindExistingFullyQualifiedPathBySimpleAssemblyName (simpleAssemName) : string option = - tciLock.AcquireLock <| fun tcitok -> - RequireTcImportsLock(tcitok, resolutions) - resolutions.TryFindBySimpleAssemblyName (simpleAssemName) |> Option.map (fun r -> r.resolvedPath) + /// This doesn't need to be cancellable, it is only used by F# Interactive + member tcImports.TryFindExistingFullyQualifiedPathBySimpleAssemblyName (ctok, simpleAssemName) : string option = + resolutions.TryFindBySimpleAssemblyName (ctok, simpleAssemName) |> Option.map (fun r -> r.resolvedPath) - /// Only used by F# Interactive - member tcImports.TryFindExistingFullyQualifiedPathByExactAssemblyRef(assemblyRef: ILAssemblyRef) : string option = - tciLock.AcquireLock <| fun tcitok -> - RequireTcImportsLock(tcitok, resolutions) - resolutions.TryFindByExactILAssemblyRef (assemblyRef) |> Option.map (fun r -> r.resolvedPath) + /// This doesn't need to be cancellable, it is only used by F# Interactive + member tcImports.TryFindExistingFullyQualifiedPathByExactAssemblyRef(ctok, assemblyRef: ILAssemblyRef) : string option = + resolutions.TryFindByExactILAssemblyRef (ctok, assemblyRef) |> Option.map (fun r -> r.resolvedPath) - member tcImports.TryResolveAssemblyReference(ctok, assemblyReference: AssemblyReference, mode: ResolveAssemblyReferenceMode) : OperationResult = - tciLock.AcquireLock <| fun tcitok -> + member tcImports.TryResolveAssemblyReference(ctok, assemblyReference: AssemblyReference, mode: ResolveAssemblyReferenceMode) : OperationResult = let tcConfig = tcConfigP.Get ctok - - RequireTcImportsLock(tcitok, resolutions) // First try to lookup via the original reference text. match resolutions.TryFindByOriginalReference assemblyReference with - | Some assemblyResolution -> + | Some assemblyResolution -> ResultD [assemblyResolution] | None -> #if NO_MSBUILD_REFERENCE_RESOLUTION try ResultD [tcConfig.ResolveLibWithDirectories assemblyReference] - with e -> + with e -> ErrorD e -#else +#else // Next try to lookup up by the exact full resolved path. - match resolutions.TryFindByResolvedPath assemblyReference.Text with - | Some assemblyResolution -> + match resolutions.TryFindByResolvedPath assemblyReference.Text with + | Some assemblyResolution -> ResultD [assemblyResolution] - | None -> + | None -> if tcConfigP.Get(ctok).useSimpleResolution then - let action = - match mode with + let action = + match mode with | ResolveAssemblyReferenceMode.ReportErrors -> CcuLoadFailureAction.RaiseError | ResolveAssemblyReferenceMode.Speculative -> CcuLoadFailureAction.ReturnNone - match tcConfig.ResolveLibWithDirectories (action, assemblyReference) with - | Some resolved -> + match tcConfig.ResolveLibWithDirectories (action, assemblyReference) with + | Some resolved -> resolutions <- resolutions.AddResolutionResults [resolved] ResultD [resolved] | None -> @@ -1792,34 +1636,34 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse // But don't cache resolution failures because the assembly may appear on the disk later. let resolved, unresolved = TcConfig.TryResolveLibsUsingMSBuildRules(tcConfig, [ assemblyReference ], assemblyReference.Range, mode) match resolved, unresolved with - | (assemblyResolution :: _, _) -> + | (assemblyResolution :: _, _) -> resolutions <- resolutions.AddResolutionResults resolved ResultD [assemblyResolution] - | (_, _ :: _) -> + | (_, _ :: _) -> resolutions <- resolutions.AddUnresolvedReferences unresolved ErrorD(AssemblyNotResolved(assemblyReference.Text, assemblyReference.Range)) - | [], [] -> + | [], [] -> // Note, if mode=ResolveAssemblyReferenceMode.Speculative and the resolution failed then TryResolveLibsUsingMSBuildRules returns // the empty list and we convert the failure into an AssemblyNotResolved here. ErrorD(AssemblyNotResolved(assemblyReference.Text, assemblyReference.Range)) #endif - member tcImports.ResolveAssemblyReference(ctok, assemblyReference, mode) : AssemblyResolution list = + member tcImports.ResolveAssemblyReference(ctok, assemblyReference, mode) : AssemblyResolution list = CommitOperationResult(tcImports.TryResolveAssemblyReference(ctok, assemblyReference, mode)) // Note: This returns a TcImports object. However, framework TcImports are not currently disposed. The only reason // we dispose TcImports is because we need to dispose type providers, and type providers are never included in the framework DLL set. // If a framework set ever includes type providers, you will not have to worry about explicitly calling Dispose as the Finalizer will handle it. - static member BuildFrameworkTcImports (tcConfigP: TcConfigProvider, frameworkDLLs, nonFrameworkDLLs) = - node { - let ctok = CompilationThreadToken() + static member BuildFrameworkTcImports (ctok, tcConfigP: TcConfigProvider, frameworkDLLs, nonFrameworkDLLs) = + cancellable { + let tcConfig = tcConfigP.Get ctok - let tcResolutions = TcAssemblyResolutions.BuildFromPriorResolutions(tcConfig, frameworkDLLs, []) - let tcAltResolutions = TcAssemblyResolutions.BuildFromPriorResolutions(tcConfig, nonFrameworkDLLs, []) + let tcResolutions = TcAssemblyResolutions.BuildFromPriorResolutions(ctok, tcConfig, frameworkDLLs, []) + let tcAltResolutions = TcAssemblyResolutions.BuildFromPriorResolutions(ctok, tcConfig, nonFrameworkDLLs, []) - let frameworkTcImports = new TcImports(tcConfigP, tcResolutions, None, None) + let frameworkTcImports = new TcImports(tcConfigP, tcResolutions, None, None, None) - // Fetch the primaryAssembly from the referenced assemblies otherwise + // Fetch the primaryAssembly from the referenced assemblies otherwise let primaryAssemblyReference = let path = frameworkDLLs |> List.tryFind(fun dll -> String.Compare(Path.GetFileNameWithoutExtension(dll.resolvedPath), tcConfig.primaryAssembly.Name, StringComparison.OrdinalIgnoreCase) = 0) match path with @@ -1828,7 +1672,7 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse let primaryAssemblyResolution = frameworkTcImports.ResolveAssemblyReference(ctok, primaryAssemblyReference, ResolveAssemblyReferenceMode.ReportErrors) let! primaryAssem = frameworkTcImports.RegisterAndImportReferencedAssemblies(ctok, primaryAssemblyResolution) - let primaryScopeRef = + let primaryScopeRef = match primaryAssem with | (_, [ResolvedImportedAssembly ccu]) -> ccu.FSharpViewOfMetadata.ILScopeRef | _ -> failwith "unexpected" @@ -1840,7 +1684,7 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse let resolvedAssemblies = tcResolutions.GetAssemblyResolutions() - let readerSettings: ILReaderOptions = + let readerSettings: ILReaderOptions = { pdbDirPath=None reduceMemoryUsage = tcConfig.reduceMemoryUsage metadataOnly = MetadataOnlyFlag.Yes @@ -1851,7 +1695,7 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse | ILScopeRef.Assembly aref1, ILScopeRef.Assembly aref2 when aref1.EqualsIgnoringVersion aref2 -> mkRefToILAssembly manifest |> Some - | _ -> + | _ -> None let tryFindAssemblyThatForwardsToPrimaryAssembly manifest = @@ -1870,32 +1714,8 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse else None) - let! fslibCcu, fsharpCoreAssemblyScopeRef = - node { - if tcConfig.compilingFslib then - // When compiling FSharp.Core.dll, the fslibCcu reference to FSharp.Core.dll is a delayed ccu thunk fixed up during type checking - return CcuThunk.CreateDelayed getFSharpCoreLibraryName, ILScopeRef.Local - else - let coreLibraryReference = tcConfig.CoreLibraryDllReference() - - let resolvedAssemblyRef = - match tcResolutions.TryFindByOriginalReference coreLibraryReference with - | Some resolution -> Some resolution - | _ -> - // Are we using a "non-canonical" FSharp.Core? - match tcAltResolutions.TryFindByOriginalReference coreLibraryReference with - | Some resolution -> Some resolution - | _ -> tcResolutions.TryFindByOriginalReferenceText (getFSharpCoreLibraryName) // was the ".dll" elided? - - match resolvedAssemblyRef with - | Some coreLibraryResolution -> - match! frameworkTcImports.RegisterAndImportReferencedAssemblies(ctok, [coreLibraryResolution]) with - | (_, [ResolvedImportedAssembly fslibCcuInfo ]) -> return fslibCcuInfo.FSharpViewOfMetadata, fslibCcuInfo.ILScopeRef - | _ -> - return error(InternalError("BuildFrameworkTcImports: no successful import of "+coreLibraryResolution.resolvedPath, coreLibraryResolution.originalReference.Range)) - | None -> - return error(InternalError(sprintf "BuildFrameworkTcImports: no resolution of '%s'" coreLibraryReference.Text, rangeStartup)) - } + let ilGlobals = mkILGlobals (primaryScopeRef, assembliesThatForwardToPrimaryAssembly) + frameworkTcImports.SetILGlobals ilGlobals // Load the rest of the framework DLLs all at once (they may be mutually recursive) let! _assemblies = frameworkTcImports.RegisterAndImportReferencedAssemblies (ctok, resolvedAssemblies) @@ -1903,12 +1723,47 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse // These are the DLLs we can search for well-known types let sysCcus = [| for ccu in frameworkTcImports.GetCcusInDeclOrder() do + //printfn "found sys ccu %s" ccu.AssemblyName yield ccu |] + //for ccu in nonFrameworkDLLs do + // printfn "found non-sys ccu %s" ccu.resolvedPath + let tryFindSysTypeCcu path typeName = - sysCcus |> Array.tryFind (fun ccu -> ccuHasType ccu path typeName) + sysCcus |> Array.tryFind (fun ccu -> ccuHasType ccu path typeName) - let ilGlobals = mkILGlobals (primaryScopeRef, assembliesThatForwardToPrimaryAssembly, fsharpCoreAssemblyScopeRef) + let fslibCcu = + if tcConfig.compilingFslib then + // When compiling FSharp.Core.dll, the fslibCcu reference to FSharp.Core.dll is a delayed ccu thunk fixed up during type checking + CcuThunk.CreateDelayed getFSharpCoreLibraryName + else + let fslibCcuInfo = + let coreLibraryReference = tcConfig.CoreLibraryDllReference() + + let resolvedAssemblyRef = + match tcResolutions.TryFindByOriginalReference coreLibraryReference with + | Some resolution -> Some resolution + | _ -> + // Are we using a "non-canonical" FSharp.Core? + match tcAltResolutions.TryFindByOriginalReference coreLibraryReference with + | Some resolution -> Some resolution + | _ -> tcResolutions.TryFindByOriginalReferenceText (getFSharpCoreLibraryName) // was the ".dll" elided? + + match resolvedAssemblyRef with + | Some coreLibraryResolution -> + match frameworkTcImports.RegisterAndImportReferencedAssemblies(ctok, [coreLibraryResolution]) |> Cancellable.runWithoutCancellation with + | (_, [ResolvedImportedAssembly fslibCcuInfo ]) -> fslibCcuInfo + | _ -> + error(InternalError("BuildFrameworkTcImports: no successful import of "+coreLibraryResolution.resolvedPath, coreLibraryResolution.originalReference.Range)) + | None -> + error(InternalError(sprintf "BuildFrameworkTcImports: no resolution of '%s'" coreLibraryReference.Text, rangeStartup)) + IlxSettings.ilxFsharpCoreLibAssemRef <- + (let scoref = fslibCcuInfo.ILScopeRef + match scoref with + | ILScopeRef.Assembly aref -> Some aref + | ILScopeRef.Local | ILScopeRef.Module _ | ILScopeRef.PrimaryAssembly -> + error(InternalError("not ILScopeRef.Assembly", rangeStartup))) + fslibCcuInfo.FSharpViewOfMetadata // OK, now we have both mscorlib.dll and FSharp.Core.dll we can create TcGlobals let tcGlobals = TcGlobals(tcConfig.compilingFslib, ilGlobals, fslibCcu, @@ -1926,52 +1781,49 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse member tcImports.ReportUnresolvedAssemblyReferences knownUnresolved = // Report that an assembly was not resolved. - let reportAssemblyNotResolved(file, originalReferences: AssemblyReference list) = + let reportAssemblyNotResolved(file, originalReferences: AssemblyReference list) = originalReferences |> List.iter(fun originalReference -> errorR(AssemblyNotResolved(file, originalReference.Range))) knownUnresolved |> List.map (function UnresolvedAssemblyReference(file, originalReferences) -> file, originalReferences) |> List.iter reportAssemblyNotResolved + + static member BuildNonFrameworkTcImports + (ctok, tcConfigP: TcConfigProvider, tcGlobals: TcGlobals, baseTcImports, + nonFrameworkReferences, knownUnresolved, dependencyProvider) = - static member BuildNonFrameworkTcImports - (tcConfigP: TcConfigProvider, baseTcImports, - nonFrameworkReferences, knownUnresolved, dependencyProvider) = - - node { - let ctok = CompilationThreadToken() + cancellable { let tcConfig = tcConfigP.Get ctok - let tcResolutions = TcAssemblyResolutions.BuildFromPriorResolutions(tcConfig, nonFrameworkReferences, knownUnresolved) + let tcResolutions = TcAssemblyResolutions.BuildFromPriorResolutions(ctok, tcConfig, nonFrameworkReferences, knownUnresolved) let references = tcResolutions.GetAssemblyResolutions() - let tcImports = new TcImports(tcConfigP, tcResolutions, Some baseTcImports, Some dependencyProvider) + let tcImports = new TcImports(tcConfigP, tcResolutions, Some baseTcImports, Some tcGlobals.ilg, Some dependencyProvider) let! _assemblies = tcImports.RegisterAndImportReferencedAssemblies(ctok, references) tcImports.ReportUnresolvedAssemblyReferences knownUnresolved return tcImports } - - static member BuildTcImports(tcConfigP: TcConfigProvider, dependencyProvider) = - node { - let ctok = CompilationThreadToken() + + static member BuildTcImports(ctok, tcConfigP: TcConfigProvider, dependencyProvider) = + cancellable { let tcConfig = tcConfigP.Get ctok - let frameworkDLLs, nonFrameworkReferences, knownUnresolved = TcAssemblyResolutions.SplitNonFoundationalResolutions(tcConfig) - let! tcGlobals, frameworkTcImports = TcImports.BuildFrameworkTcImports (tcConfigP, frameworkDLLs, nonFrameworkReferences) - let! tcImports = TcImports.BuildNonFrameworkTcImports(tcConfigP, frameworkTcImports, nonFrameworkReferences, knownUnresolved, dependencyProvider) + //let foundationalTcImports, tcGlobals = TcImports.BuildFoundationalTcImports tcConfigP + let frameworkDLLs, nonFrameworkReferences, knownUnresolved = TcAssemblyResolutions.SplitNonFoundationalResolutions(ctok, tcConfig) + let! tcGlobals, frameworkTcImports = TcImports.BuildFrameworkTcImports (ctok, tcConfigP, frameworkDLLs, nonFrameworkReferences) + let! tcImports = TcImports.BuildNonFrameworkTcImports(ctok, tcConfigP, tcGlobals, frameworkTcImports, nonFrameworkReferences, knownUnresolved, dependencyProvider) return tcGlobals, tcImports } - - interface System.IDisposable with - member tcImports.Dispose() = + + interface System.IDisposable with + member tcImports.Dispose() = dispose () override tcImports.ToString() = "TcImports(...)" - + /// Process #r in F# Interactive. /// Adds the reference to the tcImports and add the ccu to the type checking environment. let RequireDLL (ctok, tcImports: TcImports, tcEnv, thisAssemblyName, referenceRange, file) = let resolutions = CommitOperationResult(tcImports.TryResolveAssemblyReference(ctok, AssemblyReference(referenceRange, file, None), ResolveAssemblyReferenceMode.ReportErrors)) - let dllinfos, ccuinfos = - tcImports.RegisterAndImportReferencedAssemblies(ctok, resolutions) - |> NodeCode.RunImmediateWithoutCancellation + let dllinfos, ccuinfos = tcImports.RegisterAndImportReferencedAssemblies(ctok, resolutions) |> Cancellable.runWithoutCancellation - let asms = + let asms = ccuinfos |> List.map (function | ResolvedImportedAssembly asm -> asm | UnresolvedImportedAssembly assemblyName -> error(Error(FSComp.SR.buildCouldNotResolveAssemblyRequiredByFile(assemblyName, file), referenceRange))) @@ -1982,3 +1834,7 @@ let RequireDLL (ctok, tcImports: TcImports, tcEnv, thisAssemblyName, referenceRa AddCcuToTcEnv(g, amap, referenceRange, tcEnv, thisAssemblyName, asm.FSharpViewOfMetadata, asm.AssemblyAutoOpenAttributes, asm.AssemblyInternalsVisibleToAttributes) let tcEnv = (tcEnv, asms) ||> List.fold buildTcEnv tcEnv, (dllinfos, asms) + +// Existing public APIs delegate to newer implementations +let DefaultReferencesForScriptsAndOutOfProjectSources assumeDotNetFramework = + defaultReferencesForScriptsAndOutOfProjectSources (*useFsiAuxLib*)false assumeDotNetFramework (*useSdkRefs*)false diff --git a/src/fsharp/CompilerImports.fsi b/src/fsharp/CompilerImports.fsi index 5a840c368b6..d6eedc6d214 100644 --- a/src/fsharp/CompilerImports.fsi +++ b/src/fsharp/CompilerImports.fsi @@ -5,25 +5,25 @@ module internal FSharp.Compiler.CompilerImports open System -open Internal.Utilities.Library + open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CheckExpressions open FSharp.Compiler.CompilerConfig -open FSharp.Compiler.DependencyManager open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Optimizer +open FSharp.Compiler.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TcGlobals -open FSharp.Compiler.BuildGraph -open FSharp.Compiler.Text open FSharp.Core.CompilerServices #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping #endif +open Microsoft.DotNet.DependencyManager + /// This exception is an old-style way of reporting a diagnostic exception AssemblyNotResolved of (*originalName*) string * range @@ -41,27 +41,13 @@ val IsOptimizationDataResource: ILResource -> bool /// Determine if an IL resource attached to an F# assembly is an F# quotation data resource for reflected definitions val IsReflectedDefinitionsResource: ILResource -> bool - val GetSignatureDataResourceName: ILResource -> string -/// Encode the F# interface data into a set of IL attributes and resources -val EncodeSignatureData: - tcConfig:TcConfig * - tcGlobals:TcGlobals * - exportRemapping:Remap * - generatedCcu: CcuThunk * - outfile: string * - isIncrementalBuild: bool - -> ILAttribute list * ILResource list - -val EncodeOptimizationData: - tcGlobals:TcGlobals * - tcConfig:TcConfig * - outfile: string * - exportRemapping:Remap * - (CcuThunk * #CcuOptimizationInfo) * - isIncrementalBuild: bool - -> ILResource list +/// Write F# signature data as an IL resource +val WriteSignatureData: TcConfig * TcGlobals * Remap * CcuThunk * filename: string * inMem: bool -> ILResource + +/// Write F# optimization data as an IL resource +val WriteOptimizationData: TcGlobals * filename: string * inMem: bool * CcuThunk * Optimizer.LazyModuleInfo -> ILResource [] type ResolveAssemblyReferenceMode = @@ -123,18 +109,11 @@ type TcAssemblyResolutions = member GetAssemblyResolutions: unit -> AssemblyResolution list - static member SplitNonFoundationalResolutions: tcConfig: TcConfig -> AssemblyResolution list * AssemblyResolution list * UnresolvedAssemblyReference list + static member SplitNonFoundationalResolutions: ctok: CompilationThreadToken * tcConfig: TcConfig -> AssemblyResolution list * AssemblyResolution list * UnresolvedAssemblyReference list - static member BuildFromPriorResolutions: tcConfig: TcConfig * AssemblyResolution list * UnresolvedAssemblyReference list -> TcAssemblyResolutions + static member BuildFromPriorResolutions: ctok: CompilationThreadToken * tcConfig: TcConfig * AssemblyResolution list * UnresolvedAssemblyReference list -> TcAssemblyResolutions - static member GetAssemblyResolutionInformation: tcConfig: TcConfig -> AssemblyResolution list * UnresolvedAssemblyReference list - -[] -type RawFSharpAssemblyData = - - new : ilModule: ILModuleDef * ilAssemblyRefs: ILAssemblyRef list -> RawFSharpAssemblyData - - interface IRawFSharpAssemblyData + static member GetAssemblyResolutionInformation: ctok: CompilationThreadToken * tcConfig: TcConfig -> AssemblyResolution list * UnresolvedAssemblyReference list /// Represents a table of imported assemblies with their resolutions. /// Is a disposable object, but it is recommended not to explicitly call Dispose unless you absolutely know nothing will be using its contents after the disposal. @@ -174,10 +153,10 @@ type TcImports = /// Try to find the given assembly reference by simple name. Used in magic assembly resolution. Effectively does implicit /// unification of assemblies by simple assembly name. - member TryFindExistingFullyQualifiedPathBySimpleAssemblyName: string -> string option + member TryFindExistingFullyQualifiedPathBySimpleAssemblyName: CompilationThreadToken * string -> string option /// Try to find the given assembly reference. - member TryFindExistingFullyQualifiedPathByExactAssemblyRef: ILAssemblyRef -> string option + member TryFindExistingFullyQualifiedPathByExactAssemblyRef: CompilationThreadToken * ILAssemblyRef -> string option #if !NO_EXTENSIONTYPING /// Try to find a provider-generated assembly @@ -191,24 +170,31 @@ type TcImports = member internal Base: TcImports option static member BuildFrameworkTcImports: + CompilationThreadToken * TcConfigProvider * AssemblyResolution list * AssemblyResolution list - -> NodeCode + -> Cancellable static member BuildNonFrameworkTcImports: + CompilationThreadToken * TcConfigProvider * + TcGlobals * TcImports * AssemblyResolution list * UnresolvedAssemblyReference list * DependencyProvider - -> NodeCode + -> Cancellable static member BuildTcImports: + ctok: CompilationThreadToken * tcConfigP: TcConfigProvider * dependencyProvider: DependencyProvider - -> NodeCode + -> Cancellable /// Process #r in F# Interactive. /// Adds the reference to the tcImports and add the ccu to the type checking environment. val RequireDLL: ctok: CompilationThreadToken * tcImports: TcImports * tcEnv: TcEnv * thisAssemblyName: string * referenceRange: range * file: string -> TcEnv * (ImportedBinary list * ImportedAssembly list) + +/// This list is the default set of references for "non-project" files. +val DefaultReferencesForScriptsAndOutOfProjectSources: bool -> string list diff --git a/src/fsharp/CompilerOptions.fs b/src/fsharp/CompilerOptions.fs index 51339cb8453..78ad4dcc54f 100644 --- a/src/fsharp/CompilerOptions.fs +++ b/src/fsharp/CompilerOptions.fs @@ -6,32 +6,35 @@ module internal FSharp.Compiler.CompilerOptions open System open System.IO -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras -open FSharp.Compiler + +open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILPdbWriter -open FSharp.Compiler.AbstractIL.ILX +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Internal.Utils +open FSharp.Compiler.AbstractIL.Extensions.ILX open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerDiagnostics -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.CompilerImports open FSharp.Compiler.Features -open FSharp.Compiler.Syntax -open FSharp.Compiler.IO -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Text -open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.IlxGen +open FSharp.Compiler.Lib +open FSharp.Compiler.Range +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.TypedTree +open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.ErrorLogger open Internal.Utilities +open Internal.Utilities.StructuredFormat -module Attributes = +module Attributes = open System.Runtime.CompilerServices //[] - [] + [] do() //---------------------------------------------------------------------------- @@ -46,11 +49,11 @@ module Attributes = //-------------------------------------------------------------------------- [] -type OptionSwitch = +type OptionSwitch = | On | Off -type OptionSpec = +type OptionSpec = | OptionClear of bool ref | OptionFloat of (float -> unit) | OptionInt of (int -> unit) @@ -66,12 +69,12 @@ type OptionSpec = | OptionHelp of (CompilerOptionBlock list -> unit) // like OptionUnit, but given the "options" | OptionGeneral of (string list -> bool) * (string list -> string list) // Applies? * (ApplyReturningResidualArgs) -and CompilerOption = CompilerOption of name: string * argumentDescriptionString: string * actionSpec: OptionSpec * deprecationError: Option * helpText: string option -and CompilerOptionBlock = PublicOptions of heading: string * options: CompilerOption list | PrivateOptions of options: CompilerOption list +and CompilerOption = CompilerOption of string * string * OptionSpec * Option * string option +and CompilerOptionBlock = PublicOptions of string * CompilerOption list | PrivateOptions of CompilerOption list -let GetOptionsOfBlock block = - match block with - | PublicOptions (_, opts) -> opts +let GetOptionsOfBlock block = + match block with + | PublicOptions (_, opts) -> opts | PrivateOptions opts -> opts let FilterCompilerOptionBlock pred block = @@ -82,24 +85,24 @@ let FilterCompilerOptionBlock pred block = let compilerOptionUsage (CompilerOption(s, tag, spec, _, _)) = let s = if s="--" then "" else s (* s="flag" for "--flag" options. s="--" for "--" option. Adjust printing here for "--" case. *) match spec with - | (OptionUnit _ | OptionSet _ | OptionClear _ | OptionHelp _) -> sprintf "--%s" s + | (OptionUnit _ | OptionSet _ | OptionClear _ | OptionHelp _) -> sprintf "--%s" s | OptionStringList _ -> sprintf "--%s:%s" s tag | OptionIntList _ -> sprintf "--%s:%s" s tag - | OptionSwitch _ -> sprintf "--%s[+|-]" s + | OptionSwitch _ -> sprintf "--%s[+|-]" s | OptionStringListSwitch _ -> sprintf "--%s[+|-]:%s" s tag | OptionIntListSwitch _ -> sprintf "--%s[+|-]:%s" s tag | OptionString _ -> sprintf "--%s:%s" s tag | OptionInt _ -> sprintf "--%s:%s" s tag - | OptionFloat _ -> sprintf "--%s:%s" s tag + | OptionFloat _ -> sprintf "--%s:%s" s tag | OptionRest _ -> sprintf "--%s ..." s | 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 = 42 // fixed width for printing of flags, e.g. --debug:{full|pdbonly|portable|embedded} let defaultLineWidth = 80 // the fallback width - let lineWidth = - try - System.Console.BufferWidth + let lineWidth = + try + System.Console.BufferWidth with e -> defaultLineWidth let lineWidth = if lineWidth=0 then defaultLineWidth else lineWidth (* Have seen BufferWidth=0 on Linux/Mono *) // Lines have this form: @@ -125,7 +128,7 @@ let PrintCompilerOption (CompilerOption(_s, _tag, _spec, _, help) as compilerOpt let PrintPublicOptions (heading, opts) = if not (isNil opts) then printfn "" - printfn "" + printfn "" printfn "\t\t%s" heading List.iter PrintCompilerOption opts @@ -165,7 +168,7 @@ let dumpCompilerOptionBlock = function | PrivateOptions opts -> List.iter (dumpCompilerOption "NoSection") opts let DumpCompilerOptionBlocks blocks = List.iter dumpCompilerOptionBlock blocks -let isSlashOpt (opt:string) = +let isSlashOpt (opt:string) = opt.[0] = '/' && (opt.Length = 1 || not (opt.[1..].Contains "/")) module ResponseFile = @@ -183,8 +186,8 @@ module ResponseFile = | s -> Some (ResponseFileLine.CompilerOptionSpec (s.Trim())) try - use stream = FileSystem.OpenFileForReadShim(path) - use reader = new StreamReader(stream, true) + use stream = FileSystem.FileStreamReadShim path + use reader = new System.IO.StreamReader(stream, true) let data = seq { while not reader.EndOfStream do yield reader.ReadLine () } |> Seq.choose parseLine @@ -193,13 +196,14 @@ module ResponseFile = with e -> Choice2Of2 e + let ParseCompilerOptions (collectOtherArgument: string -> unit, blocks: CompilerOptionBlock list, args) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter - + let specs = List.collect GetOptionsOfBlock blocks - + // returns a tuple - the option token, the option argument string - let parseOption (s: string) = + let parseOption (s: string) = // grab the option token let opts = s.Split([|':'|]) let mutable opt = opts.[0] @@ -219,35 +223,35 @@ let ParseCompilerOptions (collectOtherArgument: string -> unit, blocks: Compiler else opt <- "" - // get the argument string + // get the argument string let optArgs = if opts.Length > 1 then String.Join(":", opts.[1 ..]) else "" opt, optArgs - + let getOptionArg compilerOption (argString: string) = if argString = "" then - errorR(Error(FSComp.SR.buildOptionRequiresParameter(compilerOptionUsage compilerOption), rangeCmdArgs)) + errorR(Error(FSComp.SR.buildOptionRequiresParameter(compilerOptionUsage compilerOption), rangeCmdArgs)) argString - + let getOptionArgList compilerOption (argString: string) = if argString = "" then - errorR(Error(FSComp.SR.buildOptionRequiresParameter(compilerOptionUsage compilerOption), rangeCmdArgs)) + errorR(Error(FSComp.SR.buildOptionRequiresParameter(compilerOptionUsage compilerOption), rangeCmdArgs)) [] else argString.Split([|',';';'|]) |> List.ofArray - + let getSwitchOpt (opt: string) = // if opt is a switch, strip the '+' or '-' if opt <> "--" && opt.Length > 1 && (opt.EndsWithOrdinal("+") || opt.EndsWithOrdinal("-")) then opt.[0 .. opt.Length - 2] else opt - - let getSwitch (s: string) = + + let getSwitch (s: string) = let s = (s.Split([|':'|])).[0] if s <> "--" && s.EndsWithOrdinal("-") then OptionSwitch.Off else OptionSwitch.On - let rec processArg args = - match args with + let rec processArg args = + match args with | [] -> () | ((rsp: string) :: t) when rsp.StartsWithOrdinal("@") -> let responseFileOptions = @@ -261,7 +265,7 @@ let ParseCompilerOptions (collectOtherArgument: string -> unit, blocks: Compiler | None -> errorR(Error(FSComp.SR.optsResponseFileNameInvalid rsp, rangeCmdArgs)) [] - | Some path when not (FileSystem.FileExistsShim path) -> + | Some path when not (FileSystem.SafeExists path) -> errorR(Error(FSComp.SR.optsResponseFileNotFound(rsp, path), rangeCmdArgs)) [] | Some path -> @@ -277,7 +281,9 @@ let ParseCompilerOptions (collectOtherArgument: string -> unit, blocks: Compiler rspData |> List.choose onlyOptions processArg (responseFileOptions @ t) - | opt :: t -> + + | opt :: t -> + let optToken, argString = parseOption opt let reportDeprecatedOption errOpt = @@ -285,89 +291,89 @@ let ParseCompilerOptions (collectOtherArgument: string -> unit, blocks: Compiler | Some e -> warning e | None -> () - let rec attempt l = - match l with - | (CompilerOption(s, _, OptionHelp f, d, _) :: _) when optToken = s && argString = "" -> + let rec attempt l = + match l with + | (CompilerOption(s, _, OptionHelp f, d, _) :: _) when optToken = s && argString = "" -> reportDeprecatedOption d f blocks; t - | (CompilerOption(s, _, OptionUnit f, d, _) :: _) when optToken = s && argString = "" -> + | (CompilerOption(s, _, OptionUnit f, d, _) :: _) when optToken = s && argString = "" -> reportDeprecatedOption d f (); t - | (CompilerOption(s, _, OptionSwitch f, d, _) :: _) when getSwitchOpt optToken = s && argString = "" -> + | (CompilerOption(s, _, OptionSwitch f, d, _) :: _) when getSwitchOpt optToken = s && argString = "" -> reportDeprecatedOption d f (getSwitch opt); t - | (CompilerOption(s, _, OptionSet f, d, _) :: _) when optToken = s && argString = "" -> + | (CompilerOption(s, _, OptionSet f, d, _) :: _) when optToken = s && argString = "" -> reportDeprecatedOption d f := true; t - | (CompilerOption(s, _, OptionClear f, d, _) :: _) when optToken = s && argString = "" -> + | (CompilerOption(s, _, OptionClear f, d, _) :: _) when optToken = s && argString = "" -> reportDeprecatedOption d f := false; t - | (CompilerOption(s, _, OptionString f, d, _) as compilerOption :: _) when optToken = s -> + | (CompilerOption(s, _, OptionString f, d, _) as compilerOption :: _) when optToken = s -> reportDeprecatedOption d let oa = getOptionArg compilerOption argString if oa <> "" then f (getOptionArg compilerOption oa) - t + t | (CompilerOption(s, _, OptionInt f, d, _) as compilerOption :: _) when optToken = s -> reportDeprecatedOption d let oa = getOptionArg compilerOption argString - if oa <> "" then - f (try int32 oa with _ -> + if oa <> "" then + f (try int32 oa with _ -> errorR(Error(FSComp.SR.buildArgInvalidInt(getOptionArg compilerOption argString), rangeCmdArgs)); 0) t - | (CompilerOption(s, _, OptionFloat f, d, _) as compilerOption :: _) when optToken = s -> + | (CompilerOption(s, _, OptionFloat f, d, _) as compilerOption :: _) when optToken = s -> reportDeprecatedOption d let oa = getOptionArg compilerOption argString if oa <> "" then - f (try float oa with _ -> + f (try float oa with _ -> errorR(Error(FSComp.SR.buildArgInvalidFloat(getOptionArg compilerOption argString), rangeCmdArgs)); 0.0) t - | (CompilerOption(s, _, OptionRest f, d, _) :: _) when optToken = s -> + | (CompilerOption(s, _, OptionRest f, d, _) :: _) when optToken = s -> reportDeprecatedOption d List.iter f t; [] | (CompilerOption(s, _, OptionIntList f, d, _) as compilerOption :: _) when optToken = s -> reportDeprecatedOption d let al = getOptionArgList compilerOption argString if al <> [] then - List.iter (fun i -> f (try int32 i with _ -> errorR(Error(FSComp.SR.buildArgInvalidInt i, rangeCmdArgs)); 0)) al + List.iter (fun i -> f (try int32 i with _ -> errorR(Error(FSComp.SR.buildArgInvalidInt i, rangeCmdArgs)); 0)) al t - | (CompilerOption(s, _, OptionIntListSwitch f, d, _) as compilerOption :: _) when getSwitchOpt optToken = s -> + | (CompilerOption(s, _, OptionIntListSwitch f, d, _) as compilerOption :: _) when getSwitchOpt optToken = s -> reportDeprecatedOption d let al = getOptionArgList compilerOption argString if al <> [] then let switch = getSwitch opt - List.iter (fun i -> f (try int32 i with _ -> errorR(Error(FSComp.SR.buildArgInvalidInt i, rangeCmdArgs)); 0) switch) al + List.iter (fun i -> f (try int32 i with _ -> errorR(Error(FSComp.SR.buildArgInvalidInt i, rangeCmdArgs)); 0) switch) al t // here - | (CompilerOption(s, _, OptionStringList f, d, _) as compilerOption :: _) when optToken = s -> + | (CompilerOption(s, _, OptionStringList f, d, _) as compilerOption :: _) when optToken = s -> reportDeprecatedOption d let al = getOptionArgList compilerOption argString if al <> [] then List.iter f (getOptionArgList compilerOption argString) t - | (CompilerOption(s, _, OptionStringListSwitch f, d, _) as compilerOption :: _) when getSwitchOpt optToken = s -> + | (CompilerOption(s, _, OptionStringListSwitch f, d, _) as compilerOption :: _) when getSwitchOpt optToken = s -> reportDeprecatedOption d let al = getOptionArgList compilerOption argString if al <> [] then let switch = getSwitch opt List.iter (fun s -> f s switch) (getOptionArgList compilerOption argString) t - | (CompilerOption(_, _, OptionGeneral (pred, exec), d, _) :: _) when pred args -> + | (CompilerOption(_, _, OptionGeneral (pred, exec), d, _) :: _) when pred args -> reportDeprecatedOption d let rest = exec args in rest // arguments taken, rest remaining - | (_ :: more) -> attempt more - | [] -> + | (_ :: more) -> attempt more + | [] -> if opt.Length = 0 || opt.[0] = '-' || isSlashOpt opt - then + then // want the whole opt token - delimiter and all let unrecOpt = (opt.Split([|':'|]).[0]) - errorR(Error(FSComp.SR.buildUnrecognizedOption unrecOpt, rangeCmdArgs)) + errorR(Error(FSComp.SR.buildUnrecognizedOption unrecOpt, rangeCmdArgs)) t - else + else (collectOtherArgument opt; t) - let rest = attempt specs + let rest = attempt specs processArg rest - + processArg args //---------------------------------------------------------------------------- @@ -377,13 +383,13 @@ let ParseCompilerOptions (collectOtherArgument: string -> unit, blocks: Compiler let lexFilterVerbose = false let mutable enableConsoleColoring = true // global state -let setFlag r n = - match n with +let setFlag r n = + match n with | 0 -> r false | 1 -> r true | _ -> raise (Failure "expected 0/1") -let SetOptimizeOff(tcConfigB: TcConfigBuilder) = +let SetOptimizeOff(tcConfigB: TcConfigBuilder) = tcConfigB.optSettings <- { tcConfigB.optSettings with jitOptUser = Some false } tcConfigB.optSettings <- { tcConfigB.optSettings with localOptUser = Some false } tcConfigB.optSettings <- { tcConfigB.optSettings with crossModuleOptUser = Some false } @@ -392,7 +398,7 @@ let SetOptimizeOff(tcConfigB: TcConfigBuilder) = tcConfigB.doTLR <- false tcConfigB.doFinalSimplify <- false -let SetOptimizeOn(tcConfigB: TcConfigBuilder) = +let SetOptimizeOn(tcConfigB: TcConfigBuilder) = tcConfigB.optSettings <- { tcConfigB.optSettings with jitOptUser = Some true } tcConfigB.optSettings <- { tcConfigB.optSettings with localOptUser = Some true } tcConfigB.optSettings <- { tcConfigB.optSettings with crossModuleOptUser = Some true } @@ -401,7 +407,7 @@ let SetOptimizeOn(tcConfigB: TcConfigBuilder) = tcConfigB.doTLR <- true tcConfigB.doFinalSimplify <- true -let SetOptimizeSwitch (tcConfigB: TcConfigBuilder) switch = +let SetOptimizeSwitch (tcConfigB: TcConfigBuilder) switch = if (switch = OptionSwitch.On) then SetOptimizeOn tcConfigB else SetOptimizeOff tcConfigB let SetTailcallSwitch (tcConfigB: TcConfigBuilder) switch = @@ -419,10 +425,10 @@ let AddPathMapping (tcConfigB: TcConfigBuilder) (pathPair: string) = let jitoptimizeSwitch (tcConfigB: TcConfigBuilder) switch = tcConfigB.optSettings <- { tcConfigB.optSettings with jitOptUser = Some (switch = OptionSwitch.On) } - + let localoptimizeSwitch (tcConfigB: TcConfigBuilder) switch = tcConfigB.optSettings <- { tcConfigB.optSettings with localOptUser = Some (switch = OptionSwitch.On) } - + let crossOptimizeSwitch (tcConfigB: TcConfigBuilder) switch = tcConfigB.optSettings <- { tcConfigB.optSettings with crossModuleOptUser = Some (switch = OptionSwitch.On) } @@ -430,31 +436,30 @@ let splittingSwitch (tcConfigB: TcConfigBuilder) switch = tcConfigB.optSettings <- { tcConfigB.optSettings with abstractBigTargets = switch = OptionSwitch.On } let callVirtSwitch (tcConfigB: TcConfigBuilder) switch = - tcConfigB.alwaysCallVirt <- switch = OptionSwitch.On + tcConfigB.alwaysCallVirt <- switch = OptionSwitch.On -let useHighEntropyVASwitch (tcConfigB: TcConfigBuilder) switch = +let useHighEntropyVASwitch (tcConfigB: TcConfigBuilder) switch = tcConfigB.useHighEntropyVA <- switch = OptionSwitch.On -let subSystemVersionSwitch (tcConfigB: TcConfigBuilder) (text: string) = +let subSystemVersionSwitch (tcConfigB: TcConfigBuilder) (text: string) = let fail() = error(Error(FSComp.SR.optsInvalidSubSystemVersion text, rangeCmdArgs)) // per spec for 357994: Validate input string, should be two positive integers x.y when x>=4 and y>=0 and both <= 65535 - if System.String.IsNullOrEmpty text then + if System.String.IsNullOrEmpty text then fail() else match text.Split('.') with | [| majorStr; minorStr|] -> match (Int32.TryParse majorStr), (Int32.TryParse minorStr) with - | (true, major), (true, minor) - when major >= 4 && major <= 65535 - && minor >=0 && minor <= 65535 -> + | (true, major), (true, minor) + when major >= 4 && major <= 65535 + && minor >=0 && minor <= 65535 -> tcConfigB.subsystemVersion <- (major, minor) | _ -> fail() | _ -> fail() let SetUseSdkSwitch (tcConfigB: TcConfigBuilder) switch = - let useSdkRefs = (switch = OptionSwitch.On) - tcConfigB.SetUseSdkRefs useSdkRefs + tcConfigB.useSdkRefs <- (switch = OptionSwitch.On) let (++) x s = x @ [s] @@ -469,29 +474,29 @@ let SetTarget (tcConfigB: TcConfigBuilder)(s: string) = let SetDebugSwitch (tcConfigB: TcConfigBuilder) (dtype: string option) (s: OptionSwitch) = match dtype with | Some s -> - match s with - | "portable" -> + match s with + | "portable" -> tcConfigB.portablePDB <- true tcConfigB.embeddedPDB <- false tcConfigB.jitTracking <- true tcConfigB.ignoreSymbolStoreSequencePoints <- true - | "pdbonly" -> + | "pdbonly" -> tcConfigB.portablePDB <- false tcConfigB.embeddedPDB <- false tcConfigB.jitTracking <- false - | "embedded" -> + | "embedded" -> tcConfigB.portablePDB <- true tcConfigB.embeddedPDB <- true tcConfigB.jitTracking <- true tcConfigB.ignoreSymbolStoreSequencePoints <- true #if FX_NO_PDB_WRITER // When building on the coreclr, full means portable - | "full" -> + | "full" -> tcConfigB.portablePDB <- true tcConfigB.embeddedPDB <- false tcConfigB.jitTracking <- true #else - | "full" -> + | "full" -> tcConfigB.portablePDB <- false tcConfigB.embeddedPDB <- false tcConfigB.jitTracking <- true @@ -501,7 +506,7 @@ let SetDebugSwitch (tcConfigB: TcConfigBuilder) (dtype: string option) (s: Optio | None -> tcConfigB.portablePDB <- false; tcConfigB.embeddedPDB <- false; tcConfigB.jitTracking <- s = OptionSwitch.On tcConfigB.debuginfo <- s = OptionSwitch.On -let SetEmbedAllSourceSwitch (tcConfigB: TcConfigBuilder) switch = +let SetEmbedAllSourceSwitch (tcConfigB: TcConfigBuilder) switch = if (switch = OptionSwitch.On) then tcConfigB.embedAllSource <- true else tcConfigB.embedAllSource <- false let setOutFileName tcConfigB path = @@ -509,13 +514,10 @@ let setOutFileName tcConfigB path = tcConfigB.outputDir <- Some outputDir tcConfigB.outputFile <- Some path -let setSignatureFile tcConfigB s = - tcConfigB.printSignature <- true +let setSignatureFile tcConfigB s = + tcConfigB.printSignature <- true tcConfigB.printSignatureFile <- s -let setAllSignatureFiles tcConfigB () = - tcConfigB.printAllSignatureFiles <- true - // option tags let tagString = "" let tagExe = "exe" @@ -540,7 +542,7 @@ let tagLangVersionValues = "{?|version|latest|preview}" // PrintOptionInfo //---------------- -/// Print internal "option state" information for diagnostics and regression tests. +/// Print internal "option state" information for diagnostics and regression tests. let PrintOptionInfo (tcConfigB:TcConfigBuilder) = printfn " jitOptUser . . . . . . : %+A" tcConfigB.optSettings.jitOptUser printfn " localOptUser . . . . . : %+A" tcConfigB.optSettings.localOptUser @@ -592,17 +594,19 @@ let inputFileFlagsFsi (tcConfigB: TcConfigBuilder) = // OptionBlock: Errors and warnings //--------------------------------- -let errorsAndWarningsFlags (tcConfigB: TcConfigBuilder) = +let errorsAndWarningsFlags (tcConfigB: TcConfigBuilder) = let trimFS (s:string) = if s.StartsWithOrdinal "FS" then s.Substring 2 else s let trimFStoInt (s:string) = - match Int32.TryParse (trimFS s) with - | true, n -> Some n - | false, _ -> None + try + Some (int32 (trimFS s)) + with _ -> + errorR(Error(FSComp.SR.buildArgInvalidInt s, rangeCmdArgs)) + None [ CompilerOption("warnaserror", tagNone, OptionSwitch(fun switch -> tcConfigB.errorSeverityOptions <- { tcConfigB.errorSeverityOptions with - GlobalWarnAsError = switch <> OptionSwitch.Off }), None, Some (FSComp.SR.optsWarnaserrorPM())) + GlobalWarnAsError = switch <> OptionSwitch.Off }), None, Some (FSComp.SR.optsWarnaserrorPM())) CompilerOption("warnaserror", tagWarnList, OptionStringListSwitch (fun n switch -> match trimFStoInt n with @@ -630,7 +634,7 @@ let errorsAndWarningsFlags (tcConfigB: TcConfigBuilder) = CompilerOption("warnon", tagWarnList, OptionStringList (fun n -> tcConfigB.TurnWarningOn(rangeCmdArgs, trimFS n)), None, Some (FSComp.SR.optsWarnOn())) - + CompilerOption("consolecolors", tagNone, OptionSwitch (fun switch -> enableConsoleColoring <- switch = OptionSwitch.On), None, Some (FSComp.SR.optsConsoleColors())) ] @@ -688,20 +692,25 @@ let outputFileFlagsFsc (tcConfigB: TcConfigBuilder) = OptionString (fun s -> tcConfigB.signer <- Some s), None, Some (FSComp.SR.optsStrongKeyFile())) + CompilerOption + ("keycontainer", tagString, + OptionString(fun s -> tcConfigB.container <- Some s), None, + 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" -> + OptionString (fun s -> + tcConfigB.platform <- + match s with + | "x86" -> Some X86 + | "x64" -> Some AMD64 + | "Itanium" -> Some IA64 + | "anycpu32bitpreferred" -> tcConfigB.prefer32Bit <- true - None - | "anycpu" -> None + None + | "anycpu" -> None | _ -> error(Error(FSComp.SR.optsUnknownPlatform s, rangeCmdArgs))), None, - Some(FSComp.SR.optsPlatform())) + Some(FSComp.SR.optsPlatform())) CompilerOption ("nooptimizationdata", tagNone, @@ -716,13 +725,8 @@ let outputFileFlagsFsc (tcConfigB: TcConfigBuilder) = CompilerOption ("sig", tagFile, OptionString (setSignatureFile tcConfigB), None, - Some (FSComp.SR.optsSig())) - - CompilerOption - ("allsigs", tagNone, - OptionUnit (setAllSignatureFiles tcConfigB), None, - Some (FSComp.SR.optsAllSigs())) - + Some (FSComp.SR.optsSig())) + CompilerOption ("nocopyfsharpcore", tagNone, OptionUnit (fun () -> tcConfigB.copyFSharpCore <- CopyFSharpCoreFlag.No), None, @@ -736,20 +740,16 @@ let outputFileFlagsFsc (tcConfigB: TcConfigBuilder) = let resourcesFlagsFsi (_tcConfigB: TcConfigBuilder) = [] let resourcesFlagsFsc (tcConfigB: TcConfigBuilder) = [ - CompilerOption - ("win32icon", tagFile, - OptionString (fun s -> tcConfigB.win32icon <- s), None, - Some (FSComp.SR.optsWin32icon())) CompilerOption ("win32res", tagFile, OptionString (fun s -> tcConfigB.win32res <- s), None, Some (FSComp.SR.optsWin32res())) - + CompilerOption ("win32manifest", tagFile, OptionString (fun s -> tcConfigB.win32manifest <- s), None, Some (FSComp.SR.optsWin32manifest())) - + CompilerOption ("nowin32manifest", tagNone, OptionUnit (fun () -> tcConfigB.includewin32manifest <- false), None, @@ -776,7 +776,7 @@ let codeGenerationFlags isFsi (tcConfigB: TcConfigBuilder) = ("debug", tagNone, OptionSwitch (SetDebugSwitch tcConfigB None), None, Some (FSComp.SR.optsDebugPM())) - + CompilerOption ("debug", tagFullPDBOnlyPortable, OptionString (fun s -> SetDebugSwitch tcConfigB (Some s) OptionSwitch.On), None, @@ -787,12 +787,12 @@ let codeGenerationFlags isFsi (tcConfigB: TcConfigBuilder) = ("embed", tagNone, OptionSwitch (SetEmbedAllSourceSwitch tcConfigB), None, Some (FSComp.SR.optsEmbedAllSource())) - + CompilerOption ("embed", tagFileList, OptionStringList (fun f -> tcConfigB.AddEmbeddedSourceFile f), None, Some ( FSComp.SR.optsEmbedSource())) - + CompilerOption ("sourcelink", tagFile, OptionString (fun f -> tcConfigB.sourceLink <- f), None, @@ -804,12 +804,12 @@ let codeGenerationFlags isFsi (tcConfigB: TcConfigBuilder) = ("optimize", tagNone, OptionSwitch (SetOptimizeSwitch tcConfigB), None, Some (FSComp.SR.optsOptimize())) - + CompilerOption ("tailcalls", tagNone, OptionSwitch (SetTailcallSwitch tcConfigB), None, Some (FSComp.SR.optsTailcalls())) - + CompilerOption ("deterministic", tagNone, OptionSwitch (SetDeterministicSwitch tcConfigB), None, @@ -833,7 +833,7 @@ let codeGenerationFlags isFsi (tcConfigB: TcConfigBuilder) = let defineSymbol tcConfigB s = tcConfigB.conditionalCompilationDefines <- s :: tcConfigB.conditionalCompilationDefines -let mlCompatibilityFlag (tcConfigB: TcConfigBuilder) = +let mlCompatibilityFlag (tcConfigB: TcConfigBuilder) = CompilerOption ("mlcompatibility", tagNone, OptionUnit (fun () -> tcConfigB.mlCompatibility<-true; tcConfigB.TurnWarningOff(rangeCmdArgs, "62")), None, @@ -871,50 +871,50 @@ let languageFlags tcConfigB = // OptionBlock: Advanced user options //----------------------------------- -let libFlag (tcConfigB: TcConfigBuilder) = +let libFlag (tcConfigB: TcConfigBuilder) = CompilerOption ("lib", tagDirList, OptionStringList (fun s -> tcConfigB.AddIncludePath (rangeStartup, s, tcConfigB.implicitIncludeDir)), None, Some (FSComp.SR.optsLib())) -let codePageFlag (tcConfigB: TcConfigBuilder) = +let codePageFlag (tcConfigB: TcConfigBuilder) = CompilerOption ("codepage", tagInt, - OptionInt (fun n -> - try + OptionInt (fun n -> + try System.Text.Encoding.GetEncoding n |> ignore - with :? System.ArgumentException as err -> + with :? System.ArgumentException as err -> error(Error(FSComp.SR.optsProblemWithCodepage(n, err.Message), rangeCmdArgs)) tcConfigB.inputCodePage <- Some n), None, Some (FSComp.SR.optsCodepage())) -let preferredUiLang (tcConfigB: TcConfigBuilder) = +let preferredUiLang (tcConfigB: TcConfigBuilder) = CompilerOption ("preferreduilang", tagString, OptionString (fun s -> tcConfigB.preferredUiLang <- Some s), None, Some(FSComp.SR.optsPreferredUiLang())) -let utf8OutputFlag (tcConfigB: TcConfigBuilder) = +let utf8OutputFlag (tcConfigB: TcConfigBuilder) = CompilerOption ("utf8output", tagNone, OptionUnit (fun () -> tcConfigB.utf8output <- true), None, Some (FSComp.SR.optsUtf8output())) -let fullPathsFlag (tcConfigB: TcConfigBuilder) = +let fullPathsFlag (tcConfigB: TcConfigBuilder) = CompilerOption ("fullpaths", tagNone, OptionUnit (fun () -> tcConfigB.showFullPaths <- true), None, Some (FSComp.SR.optsFullpaths())) -let cliRootFlag (_tcConfigB: TcConfigBuilder) = +let cliRootFlag (_tcConfigB: TcConfigBuilder) = CompilerOption ("cliroot", tagString, OptionString (fun _ -> ()), Some(DeprecatedCommandLineOptionFull(FSComp.SR.optsClirootDeprecatedMsg(), rangeCmdArgs)), Some(FSComp.SR.optsClirootDescription())) -let SetTargetProfile (tcConfigB: TcConfigBuilder) v = - let primaryAssembly = +let SetTargetProfile tcConfigB v = + tcConfigB.primaryAssembly <- match v with // Indicates we assume "mscorlib.dll", i.e .NET Framework, Mono and Profile 47 | "mscorlib" -> PrimaryAssembly.Mscorlib @@ -923,7 +923,6 @@ let SetTargetProfile (tcConfigB: TcConfigBuilder) v = // Indicates we assume "netstandard.dll", i.e .NET Standard 2.0 and above | "netstandard" -> PrimaryAssembly.NetStandard | _ -> error(Error(FSComp.SR.optsInvalidTargetProfile v, rangeCmdArgs)) - tcConfigB.SetPrimaryAssembly primaryAssembly let advancedFlagsBoth tcConfigB = [ @@ -944,16 +943,16 @@ let advancedFlagsBoth tcConfigB = Some(FSComp.SR.optsTargetProfile())) ] -let noFrameworkFlag isFsc tcConfigB = +let noFrameworkFlag isFsc tcConfigB = CompilerOption ("noframework", tagNone, - OptionUnit (fun () -> - tcConfigB.framework <- false - if isFsc then + OptionUnit (fun () -> + tcConfigB.framework <- false + if isFsc then tcConfigB.implicitlyResolveAssemblies <- false), None, Some (FSComp.SR.optsNoframework())) -let advancedFlagsFsi tcConfigB = +let advancedFlagsFsi tcConfigB = advancedFlagsBoth tcConfigB @ [ yield noFrameworkFlag false tcConfigB @@ -981,8 +980,8 @@ let advancedFlagsFsc tcConfigB = yield CompilerOption ("standalone", tagNone, - OptionUnit (fun _ -> - tcConfigB.openDebugInformationForLaterStaticLinking <- true + OptionUnit (fun _ -> + tcConfigB.openDebugInformationForLaterStaticLinking <- true tcConfigB.standalone <- true tcConfigB.implicitlyResolveAssemblies <- true), None, Some (FSComp.SR.optsStandalone())) @@ -995,7 +994,7 @@ let advancedFlagsFsc tcConfigB = Some (FSComp.SR.optsStaticlink())) #if ENABLE_MONO_SUPPORT - if runningOnMono then + if runningOnMono then yield CompilerOption ("resident", tagFile, OptionUnit (fun () -> ()), None, @@ -1027,14 +1026,14 @@ let advancedFlagsFsc tcConfigB = // OptionBlock: Internal options (test use only) //-------------------------------------------------- -let testFlag tcConfigB = +let testFlag tcConfigB = CompilerOption ("test", tagString, - OptionString (fun s -> + OptionString (fun s -> match s with | "StackSpan" -> tcConfigB.internalTestSpanStackReferring <- true | "ErrorRanges" -> tcConfigB.errorStyle <- ErrorStyle.TestErrors - | "Tracking" -> tracking <- true (* general purpose on/off diagnostics flag *) + | "Tracking" -> Lib.tracking <- true (* general purpose on/off diagnostics flag *) | "NoNeedToTailcall" -> tcConfigB.optSettings <- { tcConfigB.optSettings with reportNoNeedToTailcall = true } | "FunctionSizes" -> tcConfigB.optSettings <- { tcConfigB.optSettings with reportFunctionSizes = true } | "TotalSizes" -> tcConfigB.optSettings <- { tcConfigB.optSettings with reportTotalSizes = true } @@ -1044,7 +1043,6 @@ let testFlag tcConfigB = | "DumpDebugInfo" -> tcConfigB.dumpDebugInfo <- true | "ShowLoadedAssemblies" -> tcConfigB.showLoadedAssemblies <- true | "ContinueAfterParseFailure" -> tcConfigB.continueAfterParseFailure <- true - | "ParallelOff" -> tcConfigB.concurrentBuild <- false #if DEBUG | "ShowParserStackOnParseError" -> showParserStackOnParseError <- true #endif @@ -1052,13 +1050,13 @@ let testFlag tcConfigB = None) // Not shown in fsc.exe help, no warning on use, motivation is for use from tooling. -let editorSpecificFlags (tcConfigB: TcConfigBuilder) = +let editorSpecificFlags (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("LCID", tagInt, OptionInt ignore, None, None) - CompilerOption("flaterrors", tagNone, OptionUnit (fun () -> tcConfigB.flatErrors <- true), None, None) + CompilerOption("flaterrors", tagNone, OptionUnit (fun () -> tcConfigB.flatErrors <- true), None, None) CompilerOption("sqmsessionguid", tagNone, OptionString ignore, None, None) - CompilerOption("gccerrors", tagNone, OptionUnit (fun () -> tcConfigB.errorStyle <- ErrorStyle.GccErrors), 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("noconditionalerasure", tagNone, OptionUnit (fun () -> tcConfigB.noConditionalErasure <- true), None, None) ] @@ -1069,12 +1067,12 @@ let internalFlags (tcConfigB:TcConfigBuilder) = ("stamps", tagNone, OptionUnit ignore, Some(InternalCommandLineOption("--stamps", rangeCmdArgs)), None) - + CompilerOption ("ranges", tagNone, OptionSet DebugPrint.layoutRanges, - Some(InternalCommandLineOption("--ranges", rangeCmdArgs)), None) - + Some(InternalCommandLineOption("--ranges", rangeCmdArgs)), None) + CompilerOption ("terms", tagNone, OptionUnit (fun () -> tcConfigB.showTerms <- true), @@ -1091,27 +1089,27 @@ let internalFlags (tcConfigB:TcConfigBuilder) = OptionUnit (fun () -> Internal.Utilities.Text.Parsing.Flags.debug <- true), Some(InternalCommandLineOption("--debug-parse", 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") - + 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)), @@ -1126,17 +1124,17 @@ let internalFlags (tcConfigB:TcConfigBuilder) = ("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.tokenize <- TokenizeOption.Only), @@ -1151,56 +1149,56 @@ let internalFlags (tcConfigB:TcConfigBuilder) = ("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) - // "Display assembly reference resolution information") + // "Display assembly reference resolution information") CompilerOption ("resolutions", tagNone, OptionUnit (fun () -> tcConfigB.showReferenceResolutions <- true), - Some(InternalCommandLineOption("", rangeCmdArgs)), None) - + 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 ("resolutionframeworkregistrybase", tagString, OptionString (fun _ -> ()), - Some(InternalCommandLineOption("", rangeCmdArgs)), None) - + 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 _ -> ()), Some(InternalCommandLineOption("resolutionassemblyfoldersuffix", rangeCmdArgs)), None) - + // "Additional reference resolution conditions. For example \"OSVersion=5.1.2600.0, PlatformID=id") CompilerOption ("resolutionassemblyfoldersconditions", tagString, OptionString (fun _ -> ()), - Some(InternalCommandLineOption("resolutionassemblyfoldersconditions", rangeCmdArgs)), None) - + Some(InternalCommandLineOption("resolutionassemblyfoldersconditions", rangeCmdArgs)), None) + // "Resolve assembly references using MSBuild resolution rules rather than directory based (Default=true except when running fsc.exe under mono)") CompilerOption ("msbuildresolution", tagNone, @@ -1216,7 +1214,7 @@ let internalFlags (tcConfigB:TcConfigBuilder) = ("nodebugdata", tagNone, OptionUnit (fun () -> tcConfigB.noDebugData<-true), Some(InternalCommandLineOption("--nodebugdata", rangeCmdArgs)), None) - + testFlag tcConfigB ] @ editorSpecificFlags tcConfigB @ @@ -1224,17 +1222,17 @@ let internalFlags (tcConfigB:TcConfigBuilder) = ("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), @@ -1244,14 +1242,14 @@ let internalFlags (tcConfigB:TcConfigBuilder) = CompilerOption ("times", tagNone, OptionUnit (fun () -> tcConfigB.showTimes <- true), - Some(InternalCommandLineOption("times", rangeCmdArgs)), None) + Some(InternalCommandLineOption("times", rangeCmdArgs)), None) #if !NO_EXTENSIONTYPING // "Display information about extension type resolution") CompilerOption ("showextensionresolution", tagNone, OptionUnit (fun () -> tcConfigB.showExtensionTypeMessages <- true), - Some(InternalCommandLineOption("showextensionresolution", rangeCmdArgs)), None) + Some(InternalCommandLineOption("showextensionresolution", rangeCmdArgs)), None) #endif CompilerOption @@ -1263,12 +1261,14 @@ let internalFlags (tcConfigB:TcConfigBuilder) = // OptionBlock: Deprecated flags (fsc, service only) //-------------------------------------------------- -let compilingFsLibFlag (tcConfigB: TcConfigBuilder) = +let compilingFsLibFlag (tcConfigB: TcConfigBuilder) = CompilerOption ("compiling-fslib", tagNone, - OptionUnit (fun () -> - tcConfigB.compilingFslib <- true - tcConfigB.TurnWarningOff(rangeStartup, "42")), + OptionUnit (fun () -> + tcConfigB.compilingFslib <- true + tcConfigB.TurnWarningOff(rangeStartup, "42") + ErrorLogger.reportLibraryOnlyFeatures <- false + IlxSettings.ilxCompilingFSharpCoreLib <- true), Some(InternalCommandLineOption("--compiling-fslib", rangeCmdArgs)), None) let compilingFsLib20Flag = @@ -1280,13 +1280,13 @@ let compilingFsLib40Flag = let compilingFsLibNoBigIntFlag = CompilerOption ("compiling-fslib-nobigint", tagNone, OptionUnit (fun () -> () ), None, None) -let mlKeywordsFlag = +let mlKeywordsFlag = CompilerOption ("ml-keywords", tagNone, OptionUnit (fun () -> ()), Some(DeprecatedCommandLineOptionNoDescription("--ml-keywords", rangeCmdArgs)), None) -let gnuStyleErrorsFlag tcConfigB = +let gnuStyleErrorsFlag tcConfigB = CompilerOption ("gnu-style-errors", tagNone, OptionUnit (fun () -> tcConfigB.errorStyle <- ErrorStyle.EmacsErrors), @@ -1307,7 +1307,7 @@ let deprecatedFlagsBoth tcConfigB = CompilerOption ("no-indentation-syntax", tagNone, OptionUnit (fun () -> tcConfigB.light <- Some false), - Some(DeprecatedCommandLineOptionNoDescription("--no-indentation-syntax", rangeCmdArgs)), None) + Some(DeprecatedCommandLineOptionNoDescription("--no-indentation-syntax", rangeCmdArgs)), None) ] let deprecatedFlagsFsi tcConfigB = deprecatedFlagsBoth tcConfigB @@ -1370,58 +1370,48 @@ let deprecatedFlagsFsc tcConfigB = ("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) - + 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) - + // 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) - - CompilerOption - ("keycontainer", tagString, - OptionString(fun s -> - if FSharpEnvironment.isRunningOnCoreClr then error(Error(FSComp.SR.containerSigningUnsupportedOnThisPlatform(), rangeCmdArgs)) - else tcConfigB.container <- Some s), - if FSharpEnvironment.isRunningOnCoreClr then None - else Some(DeprecatedCommandLineOptionSuggestAlternative("--keycontainer", "--keyfile", rangeCmdArgs)) - ,None) - - mlKeywordsFlag + mlKeywordsFlag gnuStyleErrorsFlag tcConfigB ] @@ -1439,16 +1429,16 @@ let displayHelpFsc tcConfigB (blocks:CompilerOptionBlock list) = DisplayBannerText tcConfigB PrintCompilerOptionBlocks blocks exit 0 - + let displayVersion tcConfigB = printfn "%s" tcConfigB.productNameForBannerText exit 0 -let miscFlagsBoth tcConfigB = +let miscFlagsBoth tcConfigB = [ CompilerOption("nologo", tagNone, OptionUnit (fun () -> tcConfigB.showBanner <- false), None, Some (FSComp.SR.optsNologo())) CompilerOption("version", tagNone, OptionUnit (fun () -> displayVersion tcConfigB), None, Some (FSComp.SR.optsVersion())) ] - + let miscFlagsFsc tcConfigB = miscFlagsBoth tcConfigB @ [ CompilerOption("help", tagNone, OptionHelp (fun blocks -> displayHelpFsc tcConfigB blocks), None, Some (FSComp.SR.optsHelp())) @@ -1459,7 +1449,7 @@ let miscFlagsFsi tcConfigB = miscFlagsBoth tcConfigB // OptionBlock: Abbreviations of existing options //----------------------------------------------- - + let abbreviatedFlagsBoth tcConfigB = [ CompilerOption("d", tagString, OptionString (defineSymbol tcConfigB), None, Some(FSComp.SR.optsShortFormOf("--define"))) @@ -1468,7 +1458,7 @@ let abbreviatedFlagsBoth tcConfigB = CompilerOption("i", tagString, OptionUnit (fun () -> tcConfigB.printSignature <- true), None, Some(FSComp.SR.optsShortFormOf("--sig"))) CompilerOption("r", tagFile, OptionString (fun s -> tcConfigB.AddReferencedAssemblyByPath (rangeStartup, s)), None, Some(FSComp.SR.optsShortFormOf("--reference"))) - CompilerOption("I", tagDirList, OptionStringList (fun s -> tcConfigB.AddIncludePath (rangeStartup, s, tcConfigB.implicitIncludeDir)), + CompilerOption("I", tagDirList, OptionStringList (fun s -> tcConfigB.AddIncludePath (rangeStartup, s, tcConfigB.implicitIncludeDir)), None, Some (FSComp.SR.optsShortFormOf("--lib"))) ] @@ -1476,34 +1466,34 @@ let abbreviatedFlagsFsi tcConfigB = abbreviatedFlagsBoth tcConfigB let abbreviatedFlagsFsc tcConfigB = abbreviatedFlagsBoth tcConfigB @ - [ // FSC only abbreviated options + [ // FSC only abbreviated options CompilerOption ("o", tagString, OptionString (setOutFileName tcConfigB), None, Some(FSComp.SR.optsShortFormOf("--out"))) - + CompilerOption ("a", tagString, OptionUnit (fun () -> tcConfigB.target <- CompilerTarget.Dll), None, Some(FSComp.SR.optsShortFormOf("--target library"))) - - // FSC help abbreviations. FSI has it's own help options... + + // 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 ("full-help", tagNone, OptionHelp (fun blocks -> displayHelpFsc tcConfigB blocks), None, Some(FSComp.SR.optsShortFormOf("--help"))) ] - + let GetAbbrevFlagSet tcConfigB isFsc = let mutable argList: string list = [] for c in ((if isFsc then abbreviatedFlagsFsc else abbreviatedFlagsFsi) tcConfigB) do @@ -1512,7 +1502,7 @@ let GetAbbrevFlagSet tcConfigB isFsc = | CompilerOption(arg, _, OptionStringList _, _, _) -> argList <- argList @ ["-"+arg;"/"+arg] | _ -> () Set.ofList argList - + // check for abbreviated options that accept spaces instead of colons, and replace the spaces // with colons when necessary let PostProcessCompilerArgs (abbrevArgs: string Set) (args: string []) = @@ -1520,10 +1510,10 @@ let PostProcessCompilerArgs (abbrevArgs: string Set) (args: string []) = let mutable idx = 0 let len = args.Length let mutable arga: string[] = Array.create len "" - + 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] @@ -1533,7 +1523,7 @@ let PostProcessCompilerArgs (abbrevArgs: string Set) (args: string []) = // OptionBlock: QA options //------------------------ - + let testingAndQAFlags _tcConfigB = [ CompilerOption @@ -1545,16 +1535,16 @@ let testingAndQAFlags _tcConfigB = // Core compiler options, overview //-------------------------------- - + (* The "core" compiler options are "the ones defined here". Currently, fsi.exe has some additional options, defined in fsi.fs. - + The compiler options are put into blocks, named as Flags. Some block options differ between fsc and fsi, in this case they split as FlagsFsc and FlagsFsi. - + The "service.fs" (language service) flags are the same as the fsc flags (except help options are removed). REVIEW: is this correct? what about fsx files in VS and fsi options? - + Block | notes ---------------------------|-------------------- outputFileFlags | @@ -1576,8 +1566,8 @@ 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) +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 false tcConfigB) @@ -1617,7 +1607,7 @@ let GetCoreFsiCompilerOptions (tcConfigB: TcConfigBuilder) = let ApplyCommandLineArgs(tcConfigB: TcConfigBuilder, sourceFiles: string list, argv) = try let sourceFilesAcc = ResizeArray sourceFiles - let collect name = if not (FileSystemUtils.isDll name) then sourceFilesAcc.Add name + let collect name = if not (Filename.isDll name) then sourceFilesAcc.Add name ParseCompilerOptions(collect, GetCoreServiceCompilerOptions tcConfigB, argv) ResizeArray.toList sourceFilesAcc with e -> @@ -1629,31 +1619,31 @@ let ApplyCommandLineArgs(tcConfigB: TcConfigBuilder, sourceFiles: string list, a // PrintWholeAssemblyImplementation //---------------------------------------------------------------------------- -let mutable showTermFileCount = 0 +let mutable showTermFileCount = 0 let PrintWholeAssemblyImplementation g (tcConfig:TcConfig) outfile header expr = if tcConfig.showTerms then - if tcConfig.writeTermsToFiles then + if tcConfig.writeTermsToFiles then let filename = outfile + ".terms" - use f = FileSystem.OpenFileForWriteShim(filename + "-" + string showTermFileCount + "-" + header).GetWriter() + use f = System.IO.File.CreateText (filename + "-" + string showTermFileCount + "-" + header) showTermFileCount <- showTermFileCount + 1 - LayoutRender.outL f (Display.squashTo 192 (DebugPrint.implFilesL g expr)) - else + Layout.outL f (Display.squashTo 192 (DebugPrint.implFilesL g expr)) + else dprintf "\n------------------\nshowTerm: %s:\n" header - LayoutRender.outL stderr (Display.squashTo 192 (DebugPrint.implFilesL g expr)) + Layout.outL stderr (Display.squashTo 192 (DebugPrint.implFilesL g expr)) dprintf "\n------------------\n" //---------------------------------------------------------------------------- -// ReportTime +// ReportTime //---------------------------------------------------------------------------- let mutable tPrev = None let mutable nPrev = None let ReportTime (tcConfig:TcConfig) descr = - + match nPrev with | None -> () | Some prevDescr -> - if tcConfig.pause then + if tcConfig.pause then 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. @@ -1682,7 +1672,7 @@ let ReportTime (tcConfig:TcConfig) descr = - if (tcConfig.showTimes || verbose) then + if (tcConfig.showTimes || verbose) then // Note that timing calls are relatively expensive on the startup path so we don't // make this call unless showTimes has been turned on. let timeNow = System.Diagnostics.Process.GetCurrentProcess().UserProcessorTime.TotalSeconds @@ -1694,10 +1684,10 @@ let ReportTime (tcConfig:TcConfig) descr = match tPrev, nPrev with | Some (timePrev, gcPrev:int []), Some prevDescr -> 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) + dprintf "TIME: %4.1f Delta: %4.1f Mem: %3d" + timeNow (timeNow - timePrev) wsNow - dprintf " G0: %3d G1: %2d G2: %2d [%s]\n" + 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 @@ -1729,16 +1719,11 @@ let DoWithColor newColor f = finally ignoreFailureOnMono1_1_16 (fun () -> Console.ForegroundColor <- c) -let DoWithDiagnosticColor severity f = +let DoWithErrorColor isError f = match foreBackColor() with | None -> f() | Some (_, backColor) -> - let infoColor = if backColor = ConsoleColor.White then ConsoleColor.Blue else ConsoleColor.Green let warnColor = if backColor = ConsoleColor.White then ConsoleColor.DarkBlue else ConsoleColor.Cyan let errorColor = ConsoleColor.Red - let color = - match severity with - | FSharpDiagnosticSeverity.Error -> errorColor - | FSharpDiagnosticSeverity.Warning -> warnColor - | _ -> infoColor + let color = if isError then errorColor else warnColor DoWithColor color f diff --git a/src/fsharp/CompilerOptions.fsi b/src/fsharp/CompilerOptions.fsi index a2f9c8cd10c..5c83869d87c 100644 --- a/src/fsharp/CompilerOptions.fsi +++ b/src/fsharp/CompilerOptions.fsi @@ -1,11 +1,21 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -/// Compiler Option Parser module internal FSharp.Compiler.CompilerOptions open System +open FSharp.Compiler +open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CompilerConfig -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.CompilerImports +open FSharp.Compiler.Import +open FSharp.Compiler.Optimizer +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.TypedTree + +//---------------------------------------------------------------------------- +// Compiler Option Parser +//---------------------------------------------------------------------------- // For command-line options that can be suffixed with +/- [] @@ -31,55 +41,56 @@ type OptionSpec = | OptionHelp of (CompilerOptionBlock list -> unit) // like OptionUnit, but given the "options" | OptionGeneral of (string list -> bool) * (string list -> string list) // Applies? * (ApplyReturningResidualArgs) -and CompilerOption = - | CompilerOption of name: string * argumentDescriptionString: string * actionSpec: OptionSpec * deprecationError: Option * helpText: string option +and CompilerOption = + /// CompilerOption(name, argumentDescriptionString, actionSpec, exceptionOpt, helpTextOpt + | CompilerOption of string * string * OptionSpec * Option * string option -and CompilerOptionBlock = - | PublicOptions of heading: string * options: CompilerOption list - | PrivateOptions of options: CompilerOption list +and CompilerOptionBlock = + | PublicOptions of string * CompilerOption list + | PrivateOptions of CompilerOption list -val PrintCompilerOptionBlocks: CompilerOptionBlock list -> unit // for printing usage +val PrintCompilerOptionBlocks : CompilerOptionBlock list -> unit // for printing usage -val DumpCompilerOptionBlocks: CompilerOptionBlock list -> unit // for QA +val DumpCompilerOptionBlocks : CompilerOptionBlock list -> unit // for QA -val FilterCompilerOptionBlock: (CompilerOption -> bool) -> CompilerOptionBlock -> CompilerOptionBlock +val FilterCompilerOptionBlock : (CompilerOption -> bool) -> CompilerOptionBlock -> CompilerOptionBlock /// Parse and process a set of compiler options -val ParseCompilerOptions: (string -> unit) * CompilerOptionBlock list * string list -> unit +val ParseCompilerOptions : (string -> unit) * CompilerOptionBlock list * string list -> unit -val DisplayBannerText: TcConfigBuilder -> unit +val DisplayBannerText : TcConfigBuilder -> unit -val GetCoreFscCompilerOptions: TcConfigBuilder -> CompilerOptionBlock list +val GetCoreFscCompilerOptions : TcConfigBuilder -> CompilerOptionBlock list -val GetCoreFsiCompilerOptions: TcConfigBuilder -> CompilerOptionBlock list +val GetCoreFsiCompilerOptions : TcConfigBuilder -> CompilerOptionBlock list -val GetCoreServiceCompilerOptions: TcConfigBuilder -> CompilerOptionBlock list +val GetCoreServiceCompilerOptions : TcConfigBuilder -> CompilerOptionBlock list /// Apply args to TcConfigBuilder and return new list of source files val ApplyCommandLineArgs: tcConfigB: TcConfigBuilder * sourceFiles: string list * argv: string list -> string list // Expose the "setters" for some user switches, to enable setting of defaults -val SetOptimizeSwitch: TcConfigBuilder -> OptionSwitch -> unit +val SetOptimizeSwitch : TcConfigBuilder -> OptionSwitch -> unit -val SetTailcallSwitch: TcConfigBuilder -> OptionSwitch -> unit +val SetTailcallSwitch : TcConfigBuilder -> OptionSwitch -> unit -val SetDebugSwitch: TcConfigBuilder -> string option -> OptionSwitch -> unit +val SetDebugSwitch : TcConfigBuilder -> string option -> OptionSwitch -> unit -val PrintOptionInfo: TcConfigBuilder -> unit +val PrintOptionInfo : TcConfigBuilder -> unit -val SetTargetProfile: TcConfigBuilder -> string -> unit +val SetTargetProfile : TcConfigBuilder -> string -> unit // Miscellany -val ignoreFailureOnMono1_1_16: (unit -> unit) -> unit +val ignoreFailureOnMono1_1_16 : (unit -> unit) -> unit -val mutable enableConsoleColoring: bool +val mutable enableConsoleColoring : bool -val DoWithColor: ConsoleColor -> (unit -> 'a) -> 'a +val DoWithColor : ConsoleColor -> (unit -> 'a) -> 'a -val DoWithDiagnosticColor: FSharpDiagnosticSeverity -> (unit -> 'a) -> 'a +val DoWithErrorColor : bool -> (unit -> 'a) -> 'a -val ReportTime: TcConfig -> string -> unit +val ReportTime : TcConfig -> string -> unit -val GetAbbrevFlagSet: TcConfigBuilder -> bool -> Set +val GetAbbrevFlagSet : TcConfigBuilder -> bool -> Set -val PostProcessCompilerArgs: string Set -> string [] -> string list +val PostProcessCompilerArgs : string Set -> string [] -> string list diff --git a/src/fsharp/ConstraintSolver.fs b/src/fsharp/ConstraintSolver.fs index a3837ae5fc2..a8f2ff5d9d4 100644 --- a/src/fsharp/ConstraintSolver.fs +++ b/src/fsharp/ConstraintSolver.fs @@ -43,12 +43,10 @@ module internal FSharp.Compiler.ConstraintSolver open Internal.Utilities.Collections -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras -open Internal.Utilities.Rational open FSharp.Compiler open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.AttributeChecking open FSharp.Compiler.ErrorLogger @@ -56,13 +54,13 @@ open FSharp.Compiler.Features open FSharp.Compiler.Import open FSharp.Compiler.InfoReader open FSharp.Compiler.Infos +open FSharp.Compiler.Lib open FSharp.Compiler.MethodCalls -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range +open FSharp.Compiler.Range +open FSharp.Compiler.Rational open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps @@ -78,27 +76,27 @@ open FSharp.Compiler.TypeRelations let compgenId = mkSynId range0 unassignedTyparName let NewCompGenTypar (kind, rigid, staticReq, dynamicReq, error) = - Construct.NewTypar(kind, rigid, SynTypar(compgenId, staticReq, true), error, dynamicReq, [], false, false) + Construct.NewTypar(kind, rigid, Typar(compgenId, staticReq, true), error, dynamicReq, [], false, false) let AnonTyparId m = mkSynId m unassignedTyparName let NewAnonTypar (kind, m, rigid, var, dyn) = - Construct.NewTypar (kind, rigid, SynTypar(AnonTyparId m, var, true), false, dyn, [], false, false) + Construct.NewTypar (kind, rigid, Typar(AnonTyparId m, var, true), false, dyn, [], false, false) let NewNamedInferenceMeasureVar (_m, rigid, var, id) = - Construct.NewTypar(TyparKind.Measure, rigid, SynTypar(id, var, false), false, TyparDynamicReq.No, [], false, false) + Construct.NewTypar(TyparKind.Measure, rigid, Typar(id, var, false), false, TyparDynamicReq.No, [], false, false) let NewInferenceMeasurePar () = - NewCompGenTypar (TyparKind.Measure, TyparRigidity.Flexible, TyparStaticReq.None, TyparDynamicReq.No, false) + NewCompGenTypar (TyparKind.Measure, TyparRigidity.Flexible, NoStaticReq, TyparDynamicReq.No, false) let NewErrorTypar () = - NewCompGenTypar (TyparKind.Type, TyparRigidity.Flexible, TyparStaticReq.None, TyparDynamicReq.No, true) + NewCompGenTypar (TyparKind.Type, TyparRigidity.Flexible, NoStaticReq, TyparDynamicReq.No, true) let NewErrorMeasureVar () = - NewCompGenTypar (TyparKind.Measure, TyparRigidity.Flexible, TyparStaticReq.None, TyparDynamicReq.No, true) + NewCompGenTypar (TyparKind.Measure, TyparRigidity.Flexible, NoStaticReq, TyparDynamicReq.No, true) let NewInferenceType () = - mkTyparTy (Construct.NewTypar (TyparKind.Type, TyparRigidity.Flexible, SynTypar(compgenId, TyparStaticReq.None, true), false, TyparDynamicReq.No, [], false, false)) + mkTyparTy (Construct.NewTypar (TyparKind.Type, TyparRigidity.Flexible, Typar(compgenId, NoStaticReq, true), false, TyparDynamicReq.No, [], false, false)) let NewErrorType () = mkTyparTy (NewErrorTypar ()) @@ -106,7 +104,7 @@ let NewErrorType () = let NewErrorMeasure () = Measure.Var (NewErrorMeasureVar ()) let NewByRefKindInferenceType (g: TcGlobals) m = - let tp = Construct.NewTypar (TyparKind.Type, TyparRigidity.Flexible, SynTypar(compgenId, TyparStaticReq.HeadType, true), false, TyparDynamicReq.No, [], false, false) + let tp = Construct.NewTypar (TyparKind.Type, TyparRigidity.Flexible, Typar(compgenId, HeadTypeStaticReq, true), false, TyparDynamicReq.No, [], false, false) if g.byrefkind_InOut_tcr.CanDeref then tp.SetConstraints [TyparConstraint.DefaultsTo(10, TType_app(g.byrefkind_InOut_tcr, []), m)] mkTyparTy tp @@ -195,7 +193,7 @@ type ContextInfo = type OverloadInformation = { methodSlot: CalledMeth - infoReader : InfoReader + amap : ImportMap error: exn } @@ -610,8 +608,8 @@ and SolveTypStaticReqTypar (csenv: ConstraintSolverEnv) trace req (tpr: Typar) = and SolveTypStaticReq (csenv: ConstraintSolverEnv) trace req ty = match req with - | TyparStaticReq.None -> CompleteD - | TyparStaticReq.HeadType -> + | NoStaticReq -> CompleteD + | HeadTypeStaticReq -> // requires that a type constructor be known at compile time match stripTyparEqns ty with | TType_measure ms -> @@ -1237,7 +1235,7 @@ and SolveMemberConstraint (csenv: ConstraintSolverEnv) ignoreUnresolvedOverload | _ -> do! ErrorD (ConstraintSolverError(FSComp.SR.csExpectedArguments(), m, m2)) // Trait calls are only supported on pseudo type (variables) for e in tys do - do! SolveTypStaticReq csenv trace TyparStaticReq.HeadType e + do! SolveTypStaticReq csenv trace HeadTypeStaticReq e let argtys = if memFlags.IsInstance then List.tail traitObjAndArgTys else traitObjAndArgTys @@ -1701,7 +1699,7 @@ and GetRelevantMethodsForTrait (csenv: ConstraintSolverEnv) (permitWeakResolutio let m = csenv.m let minfos = match memFlags.MemberKind with - | SynMemberKind.Constructor -> + | MemberKind.Constructor -> tys |> List.map (GetIntrinsicConstructorInfosOfType csenv.SolverState.InfoReader m) | _ -> tys |> List.map (GetIntrinsicMethInfosOfType csenv.SolverState.InfoReader (Some nm) AccessibleFromSomeFSharpCode AllowMultiIntfInstantiations.Yes IgnoreOverrides m) @@ -2395,7 +2393,6 @@ and ReportNoCandidatesError (csenv: ConstraintSolverEnv) (nUnnamedCallerArgs, nN let amap = csenv.amap let m = csenv.m let denv = csenv.DisplayEnv - let infoReader = csenv.InfoReader match (calledMethGroup |> List.partition (CalledMeth.GetMethod >> IsMethInfoAccessible amap m ad)), (calledMethGroup |> List.partition (fun cmeth -> cmeth.HasCorrectObjArgs(m))), @@ -2420,7 +2417,7 @@ and ReportNoCandidatesError (csenv: ConstraintSolverEnv) (nUnnamedCallerArgs, nN // One method, incorrect name/arg assignment | _, _, _, _, ([], [cmeth]) -> let minfo = cmeth.Method - let msgNum, msgText = FSComp.SR.csRequiredSignatureIs(NicePrint.stringOfMethInfo infoReader m denv minfo) + let msgNum, msgText = FSComp.SR.csRequiredSignatureIs(NicePrint.stringOfMethInfo amap m denv minfo) match cmeth.UnassignedNamedArgs with | CallerNamedArg(id, _) :: _ -> if minfo.IsConstructor then @@ -2438,7 +2435,7 @@ and ReportNoCandidatesError (csenv: ConstraintSolverEnv) (nUnnamedCallerArgs, nN let minfo = cmeth.Method let nReqd = cmeth.TotalNumUnnamedCalledArgs let nActual = cmeth.TotalNumUnnamedCallerArgs - let signature = NicePrint.stringOfMethInfo infoReader m denv minfo + let signature = NicePrint.stringOfMethInfo amap m denv minfo if nActual = nReqd then let nreqdTyArgs = cmeth.NumCalledTyArgs let nactualTyArgs = cmeth.NumCallerTyArgs @@ -2527,7 +2524,7 @@ and ResolveOverloading reqdRetTyOpt // The expected return type, if known = let g = csenv.g - let infoReader = csenv.InfoReader + let amap = csenv.amap let m = csenv.m let denv = csenv.DisplayEnv let isOpConversion = methodName = "op_Explicit" || methodName = "op_Implicit" @@ -2622,7 +2619,7 @@ and ResolveOverloading calledMeth) with | OkResult _ -> None | ErrorResult(_warnings, exn) -> - Some {methodSlot = calledMeth; infoReader = infoReader; error = exn }) + Some {methodSlot = calledMeth; amap = amap; error = exn }) None, ErrorD (failOverloading (NoOverloadsFound (methodName, errors, cx))), NoTrace @@ -2799,8 +2796,8 @@ and ResolveOverloading let methods = let getMethodSlotsAndErrors methodSlot errors = [ match errors with - | [] -> yield { methodSlot = methodSlot; error = Unchecked.defaultof; infoReader = infoReader } - | errors -> for error in errors do yield { methodSlot = methodSlot; error = error; infoReader = infoReader } ] + | [] -> yield { methodSlot = methodSlot; error = Unchecked.defaultof; amap = amap } + | errors -> for error in errors do yield { methodSlot = methodSlot; error = error; amap = amap } ] // use the most precise set diff --git a/src/fsharp/ConstraintSolver.fsi b/src/fsharp/ConstraintSolver.fsi index b37d4445eac..888ac4805c7 100644 --- a/src/fsharp/ConstraintSolver.fsi +++ b/src/fsharp/ConstraintSolver.fsi @@ -10,9 +10,9 @@ open FSharp.Compiler.Import open FSharp.Compiler.Infos open FSharp.Compiler.InfoReader open FSharp.Compiler.MethodCalls -open FSharp.Compiler.Syntax +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps @@ -94,7 +94,7 @@ type ContextInfo = type OverloadInformation = { methodSlot: CalledMeth - infoReader: InfoReader + amap : ImportMap error: exn } diff --git a/src/fsharp/CreateILModule.fs b/src/fsharp/CreateILModule.fs index c08b7d6b813..6c61235a878 100644 --- a/src/fsharp/CreateILModule.fs +++ b/src/fsharp/CreateILModule.fs @@ -1,63 +1,96 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.CreateILModule +module internal FSharp.Compiler.CreateILModule open System +open System.Collections.Generic +open System.Diagnostics +open System.Globalization open System.IO open System.Reflection +open System.Text +open System.Threading open Internal.Utilities -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras +open Internal.Utilities.Collections +open Internal.Utilities.Filename +open Internal.Utilities.StructuredFormat + open FSharp.Compiler +open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.NativeRes -open FSharp.Compiler.AbstractIL.StrongNameSign +open FSharp.Compiler.AbstractIL.ILBinaryReader +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Internal.Utils +open FSharp.Compiler.AbstractIL.Diagnostics +open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.BinaryResourceFormats +open FSharp.Compiler.CheckExpressions open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerConfig +open FSharp.Compiler.CompilerDiagnostics open FSharp.Compiler.CompilerImports +open FSharp.Compiler.CompilerOptions open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.ErrorLogger open FSharp.Compiler.IlxGen -open FSharp.Compiler.IO +open FSharp.Compiler.InfoReader +open FSharp.Compiler.Lib +open FSharp.Compiler.ParseAndCheckInputs +open FSharp.Compiler.PrettyNaming open FSharp.Compiler.OptimizeInputs -open FSharp.Compiler.Text.Range +open FSharp.Compiler.ScriptClosure +open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Range open FSharp.Compiler.TypedTree +open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TcGlobals +open FSharp.Compiler.XmlDocFileWriter +open FSharp.Compiler.StaticLinking +open Microsoft.DotNet.DependencyManager + +open FSharp.Compiler.AbstractIL.Internal.StrongNameSign + +#if !NO_EXTENSIONTYPING +open FSharp.Compiler.ExtensionTyping +#endif + +//---------------------------------------------------------------------------- +// Helpers for finding attributes +//---------------------------------------------------------------------------- -/// Helpers for finding attributes -module AttributeHelpers = +module AttributeHelpers = /// Try to find an attribute that takes a string argument let TryFindStringAttribute (g: TcGlobals) attrib attribs = - match g.TryFindSysAttrib attrib with + match g.TryFindSysAttrib attrib with | None -> None - | Some attribRef -> + | Some attribRef -> match TryFindFSharpAttribute g attribRef attribs with | Some (Attrib(_, _, [ AttribStringArg s ], _, _, _, _)) -> Some (s) | _ -> None - + let TryFindIntAttribute (g: TcGlobals) attrib attribs = - match g.TryFindSysAttrib attrib with + match g.TryFindSysAttrib attrib with | None -> None - | Some attribRef -> + | Some attribRef -> match TryFindFSharpAttribute g attribRef attribs with | Some (Attrib(_, _, [ AttribInt32Arg i ], _, _, _, _)) -> Some (i) | _ -> None - + let TryFindBoolAttribute (g: TcGlobals) attrib attribs = - match g.TryFindSysAttrib attrib with + match g.TryFindSysAttrib attrib with | None -> None - | Some attribRef -> + | Some attribRef -> match TryFindFSharpAttribute g attribRef attribs with | Some (Attrib(_, _, [ AttribBoolArg p ], _, _, _, _)) -> Some (p) | _ -> None let (|ILVersion|_|) (versionString: string) = - try Some (parseILVersion versionString) - with e -> + try Some (IL.parseILVersion versionString) + with e -> None //---------------------------------------------------------------------------- @@ -72,63 +105,61 @@ let ValidateKeySigningAttributes (tcConfig : TcConfig, tcGlobals, topAttrs) = let delaySignAttrib = AttributeHelpers.TryFindBoolAttribute tcGlobals "System.Reflection.AssemblyDelaySignAttribute" topAttrs.assemblyAttrs let signerAttrib = AttributeHelpers.TryFindStringAttribute tcGlobals "System.Reflection.AssemblyKeyFileAttribute" topAttrs.assemblyAttrs let containerAttrib = AttributeHelpers.TryFindStringAttribute tcGlobals "System.Reflection.AssemblyKeyNameAttribute" topAttrs.assemblyAttrs - + // if delaySign is set via an attribute, validate that it wasn't set via an option - let delaysign = - match delaySignAttrib with - | Some delaysign -> + let delaysign = + 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 | _ -> tcConfig.delaysign - + // if signer is set via an attribute, validate that it wasn't set via an option - let signer = + let signer = match signerAttrib with - | Some signer -> + | 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 | None -> tcConfig.signer - + // if container is set via an attribute, validate that it wasn't set via an option, and that they keyfile wasn't set // if keyfile was set, use that instead (silently) // REVIEW: This is C# behavior, but it seems kind of sketchy that we fail silently - let container = - match containerAttrib with - | Some container -> - if not (FSharpEnvironment.isRunningOnCoreClr) then - warning(Error(FSComp.SR.containerDeprecated(), rangeCmdArgs)) + let container = + 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 | None -> tcConfig.container - + StrongNameSigningInfo (delaysign, tcConfig.publicsign, signer, container) /// Get the object used to perform strong-name signing -let GetStrongNameSigner signingInfo = +let GetStrongNameSigner signingInfo = let (StrongNameSigningInfo(delaysign, publicsign, signer, container)) = signingInfo // REVIEW: favor the container over the key file - C# appears to do this match container with | Some container -> Some (ILStrongNameSigner.OpenKeyContainer container) | None -> - match signer with + match signer with | None -> None | Some s -> - try + try if publicsign || delaysign then Some (ILStrongNameSigner.OpenPublicKeyOptions s publicsign) else - Some (ILStrongNameSigner.OpenKeyPairFile s) - with _ -> + Some (ILStrongNameSigner.OpenKeyPairFile s) + with _ -> // Note :: don't use errorR here since we really want to fail and not produce a binary error(Error(FSComp.SR.fscKeyFileCouldNotBeOpened s, rangeCmdArgs)) @@ -136,12 +167,12 @@ let GetStrongNameSigner signingInfo = // Building the contents of the finalized IL module //---------------------------------------------------------------------------- -module MainModuleBuilder = +module MainModuleBuilder = - let injectedCompatTypes = + let injectedCompatTypes = set [ "System.Tuple`1" - "System.Tuple`2" - "System.Tuple`3" + "System.Tuple`2" + "System.Tuple`3" "System.Tuple`4" "System.Tuple`5" "System.Tuple`6" @@ -152,7 +183,7 @@ module MainModuleBuilder = "System.Collections.IStructuralComparable" "System.Collections.IStructuralEquatable" ] - let typesForwardedToMscorlib = + let typesForwardedToMscorlib = set [ "System.AggregateException" "System.Threading.CancellationTokenRegistration" "System.Threading.CancellationToken" @@ -168,7 +199,7 @@ module MainModuleBuilder = // 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 -> mkTypeForwarder (tcGlobals.ilg.primaryAssemblyScopeRef) t (mkILNestedExportedTypes List.empty) (mkILCustomAttrs List.empty) ILTypeDefAccess.Public ) + Seq.map (fun t -> mkTypeForwarder (tcGlobals.ilg.primaryAssemblyScopeRef) t (mkILNestedExportedTypes List.empty) (mkILCustomAttrs List.empty) ILTypeDefAccess.Public ) |> Seq.toList let createSystemNumericsExportList (tcConfig: TcConfig) (tcImports: TcImports) = @@ -178,7 +209,7 @@ module MainModuleBuilder = let numericsAssemblyRef = match tcImports.GetImportedAssemblies() |> List.tryFind(fun a -> a.FSharpViewOfMetadata.AssemblyName = refNumericsDllName) with | Some asm -> - match asm.ILScopeRef with + match asm.ILScopeRef with | ILScopeRef.Assembly aref -> Some aref | _ -> None | None -> None @@ -211,7 +242,7 @@ module MainModuleBuilder = match findStringAttr attrName with | None | Some "" -> fileVersion |> toDotted | Some (AttributeHelpers.ILVersion v) -> v |> toDotted - | Some v -> + | Some v -> // Warning will be reported by CheckExpressions.fs v @@ -240,18 +271,18 @@ module MainModuleBuilder = | x -> failwithf "error converting product version '%s' to binary, tried '%A' " version x - let CreateMainModule - (ctok, tcConfig: TcConfig, tcGlobals, tcImports: TcImports, - pdbfile, assemblyName, outfile, topAttrs, - sigDataAttributes: ILAttribute list, sigDataResources: ILResource list, optDataResources: ILResource list, + let CreateMainModule + (ctok, tcConfig: TcConfig, tcGlobals, tcImports: TcImports, + pdbfile, assemblyName, outfile, topAttrs, + sigDataAttributes: ILAttribute list, sigDataResources: ILResource list, optDataResources: ILResource list, codegenResults, assemVerFromAttrib, metadataVersion, secDecls) = RequireCompilationThread ctok - let ilTypeDefs = + let ilTypeDefs = //let topTypeDef = mkILTypeDefForGlobalFunctions tcGlobals.ilg (mkILMethods [], emptyILFields) mkILTypeDefs codegenResults.ilTypeDefs - let mainModule = + let mainModule = let hashAlg = AttributeHelpers.TryFindIntAttribute tcGlobals "System.Reflection.AssemblyAlgorithmIdAttribute" topAttrs.assemblyAttrs let locale = AttributeHelpers.TryFindStringAttribute tcGlobals "System.Reflection.AssemblyCultureAttribute" topAttrs.assemblyAttrs let flags = match AttributeHelpers.TryFindIntAttribute tcGlobals "System.Reflection.AssemblyFlagsAttribute" topAttrs.assemblyAttrs with | Some f -> f | _ -> 0x0 @@ -275,44 +306,44 @@ module MainModuleBuilder = let tcVersion = tcConfig.version.GetVersionInfo(tcConfig.implicitIncludeDir) - let reflectedDefinitionAttrs, reflectedDefinitionResources = - codegenResults.quotationResourceInfo - |> List.map (fun (referencedTypeDefs, reflectedDefinitionBytes) -> + let reflectedDefinitionAttrs, reflectedDefinitionResources = + codegenResults.quotationResourceInfo + |> List.map (fun (referencedTypeDefs, reflectedDefinitionBytes) -> let reflectedDefinitionResourceName = QuotationPickler.SerializedReflectedDefinitionsResourceNameBase+"-"+assemblyName+"-"+string(newUnique())+"-"+string(hash reflectedDefinitionBytes) - let reflectedDefinitionAttrs = - let qf = QuotationTranslator.QuotationGenerationScope.ComputeQuotationFormat tcGlobals + let reflectedDefinitionAttrs = + let qf = QuotationTranslator.QuotationGenerationScope.ComputeQuotationFormat tcGlobals if qf.SupportsDeserializeEx then [ mkCompilationMappingAttrForQuotationResource tcGlobals (reflectedDefinitionResourceName, referencedTypeDefs) ] - else + else [ ] - let reflectedDefinitionResource = + let reflectedDefinitionResource = { Name=reflectedDefinitionResourceName Location = ILResourceLocation.Local(ByteStorage.FromByteArray(reflectedDefinitionBytes)) Access= ILResourceAccess.Public CustomAttrsStored = storeILCustomAttrs emptyILCustomAttrs MetadataIndex = NoMetadataIdx } - reflectedDefinitionAttrs, reflectedDefinitionResource) + reflectedDefinitionAttrs, reflectedDefinitionResource) |> List.unzip |> (fun (attrs, resource) -> List.concat attrs, resource) - let manifestAttrs = + let manifestAttrs = mkILCustomAttrs - [ if not tcConfig.internConstantStrings then - yield mkILCustomAttribute - (tcGlobals.FindSysILTypeRef "System.Runtime.CompilerServices.CompilationRelaxationsAttribute", - [tcGlobals.ilg.typ_Int32], [ILAttribElem.Int32( 8)], []) + [ if not tcConfig.internConstantStrings then + yield mkILCustomAttribute tcGlobals.ilg + (tcGlobals.FindSysILTypeRef "System.Runtime.CompilerServices.CompilationRelaxationsAttribute", + [tcGlobals.ilg.typ_Int32], [ILAttribElem.Int32( 8)], []) yield! sigDataAttributes yield! codegenResults.ilAssemAttrs if Option.isSome pdbfile then - yield (tcGlobals.mkDebuggableAttributeV2 (tcConfig.jitTracking, tcConfig.ignoreSymbolStoreSequencePoints, disableJitOptimizations, false (* enableEnC *) )) + yield (tcGlobals.mkDebuggableAttributeV2 (tcConfig.jitTracking, tcConfig.ignoreSymbolStoreSequencePoints, disableJitOptimizations, false (* enableEnC *) )) yield! reflectedDefinitionAttrs ] // Make the manifest of the assembly - let manifest = + let manifest = if tcConfig.target = CompilerTarget.Module then None else let man = mainModule.ManifestOfAssembly - let ver = - match assemVerFromAttrib with + let ver = + match assemVerFromAttrib with | None -> tcVersion | Some v -> v Some { man with Version= Some ver @@ -320,49 +351,48 @@ module MainModuleBuilder = DisableJitOptimizations=disableJitOptimizations JitTracking= tcConfig.jitTracking IgnoreSymbolStoreSequencePoints = tcConfig.ignoreSymbolStoreSequencePoints - SecurityDeclsStored=storeILSecurityDecls secDecls } + SecurityDeclsStored=storeILSecurityDecls secDecls } - let resources = - mkILResources + let resources = + mkILResources [ for file in tcConfig.embedResources do - let name, bytes, pub = + let name, bytes, pub = let file, name, pub = TcConfigBuilder.SplitCommandLineResourceInfo file let file = tcConfig.ResolveSourceFile(rangeStartup, file, tcConfig.implicitIncludeDir) - let bytes = FileSystem.OpenFileForReadShim(file).ReadAllBytes() + let bytes = FileSystem.ReadAllBytesShim file name, bytes, pub - yield { Name=name - // TODO: We probably can directly convert ByteMemory to ByteStorage, without reading all bytes. + yield { Name=name Location=ILResourceLocation.Local(ByteStorage.FromByteArray(bytes)) - Access=pub - CustomAttrsStored=storeILCustomAttrs emptyILCustomAttrs + Access=pub + CustomAttrsStored=storeILCustomAttrs emptyILCustomAttrs MetadataIndex = NoMetadataIdx } - + yield! reflectedDefinitionResources yield! sigDataResources yield! optDataResources - for ri in tcConfig.linkResources do + 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.OpenFileForReadShim(file).ReadAllBytes()))), 0) - Access=pub + yield { Name=name + Location=ILResourceLocation.File(ILModuleRef.Create(name=file, hasMetadata=false, hash=Some (sha1HashBytes (FileSystem.ReadAllBytesShim file))), 0) + Access=pub CustomAttrsStored=storeILCustomAttrs emptyILCustomAttrs MetadataIndex = NoMetadataIdx } ] - let assemblyVersion = + let assemblyVersion = match tcConfig.version with | VersionNone -> assemVerFromAttrib | _ -> Some tcVersion let findAttribute name = - AttributeHelpers.TryFindStringAttribute tcGlobals name topAttrs.assemblyAttrs + AttributeHelpers.TryFindStringAttribute tcGlobals name topAttrs.assemblyAttrs //NOTE: the culture string can be turned into a number using this: // sprintf "%04x" (CultureInfo.GetCultureInfo("en").KeyboardLayoutId ) let assemblyVersionResources assemblyVersion = - match assemblyVersion with + match assemblyVersion with | None -> [] | Some assemblyVersion -> - let FindAttribute key attrib = + let FindAttribute key attrib = match findAttribute attrib with | Some text -> [(key, text)] | _ -> [] @@ -371,13 +401,13 @@ module MainModuleBuilder = let productVersionString = productVersion findAttribute fileVersionInfo - let stringFileInfo = + let stringFileInfo = // 000004b0: - // Specifies an 8-digit hexadecimal number stored as a Unicode string. The - // four most significant digits represent the language identifier. The four least - // significant digits represent the code page for which the data is formatted. - // Each Microsoft Standard Language identifier contains two parts: the low-order 10 bits - // specify the major language, and the high-order 6 bits specify the sublanguage. + // Specifies an 8-digit hexadecimal number stored as a Unicode string. The + // four most significant digits represent the language identifier. The four least + // significant digits represent the code page for which the data is formatted. + // Each Microsoft Standard Language identifier contains two parts: the low-order 10 bits + // specify the major language, and the high-order 6 bits specify the sublanguage. // For a table of valid identifiers see Language Identifiers. // // see e.g. http://msdn.microsoft.com/en-us/library/aa912040.aspx 0000 is neutral and 04b0(hex)=1252(dec) is the code page. [ ("000004b0", [ yield ("Assembly Version", (sprintf "%d.%d.%d.%d" assemblyVersion.Major assemblyVersion.Minor assemblyVersion.Build assemblyVersion.Revision)) @@ -386,46 +416,46 @@ module MainModuleBuilder = match tcConfig.outputFile with | Some f -> yield ("OriginalFilename", Path.GetFileName f) | None -> () - yield! FindAttribute "Comments" "System.Reflection.AssemblyDescriptionAttribute" - yield! FindAttribute "FileDescription" "System.Reflection.AssemblyTitleAttribute" - yield! FindAttribute "ProductName" "System.Reflection.AssemblyProductAttribute" - yield! FindAttribute "CompanyName" "System.Reflection.AssemblyCompanyAttribute" - yield! FindAttribute "LegalCopyright" "System.Reflection.AssemblyCopyrightAttribute" + yield! FindAttribute "Comments" "System.Reflection.AssemblyDescriptionAttribute" + yield! FindAttribute "FileDescription" "System.Reflection.AssemblyTitleAttribute" + yield! FindAttribute "ProductName" "System.Reflection.AssemblyProductAttribute" + yield! FindAttribute "CompanyName" "System.Reflection.AssemblyCompanyAttribute" + yield! FindAttribute "LegalCopyright" "System.Reflection.AssemblyCopyrightAttribute" yield! FindAttribute "LegalTrademarks" "System.Reflection.AssemblyTrademarkAttribute" ]) ] // These entries listed in the MSDN documentation as "standard" string entries are not yet settable - // InternalName: - // The Value member identifies the file's internal name, if one exists. For example, this - // string could contain the module name for Windows dynamic-link libraries (DLLs), a virtual - // device name for Windows virtual devices, or a device name for MS-DOS device drivers. - // OriginalFilename: - // The Value member identifies the original name of the file, not including a path. This - // enables an application to determine whether a file has been renamed by a user. This name - // may not be MS-DOS 8.3-format if the file is specific to a non-FAT file system. - // PrivateBuild: - // The Value member describes by whom, where, and why this private version of the - // file was built. This string should only be present if the VS_FF_PRIVATEBUILD flag - // is set in the dwFileFlags member of the VS_FIXEDFILEINFO structure. For example, - // Value could be 'Built by OSCAR on \OSCAR2'. - // SpecialBuild: - // The Value member describes how this version of the file differs from the normal version. - // This entry should only be present if the VS_FF_SPECIALBUILD flag is set in the dwFileFlags - // member of the VS_FIXEDFILEINFO structure. For example, Value could be 'Private build - // for Olivetti solving mouse problems on M250 and M250E computers'. - - // "If you use the Var structure to list the languages your application - // or DLL supports instead of using multiple version resources, - // use the Value member to contain an array of DWORD values indicating the - // language and code page combinations supported by this file. The - // low-order word of each DWORD must contain a Microsoft language identifier, - // and the high-order word must contain the IBM code page number. - // Either high-order or low-order word can be zero, indicating that - // the file is language or code page independent. If the Var structure is + // InternalName: + // The Value member identifies the file's internal name, if one exists. For example, this + // string could contain the module name for Windows dynamic-link libraries (DLLs), a virtual + // device name for Windows virtual devices, or a device name for MS-DOS device drivers. + // OriginalFilename: + // The Value member identifies the original name of the file, not including a path. This + // enables an application to determine whether a file has been renamed by a user. This name + // may not be MS-DOS 8.3-format if the file is specific to a non-FAT file system. + // PrivateBuild: + // The Value member describes by whom, where, and why this private version of the + // file was built. This string should only be present if the VS_FF_PRIVATEBUILD flag + // is set in the dwFileFlags member of the VS_FIXEDFILEINFO structure. For example, + // Value could be 'Built by OSCAR on \OSCAR2'. + // SpecialBuild: + // The Value member describes how this version of the file differs from the normal version. + // This entry should only be present if the VS_FF_SPECIALBUILD flag is set in the dwFileFlags + // member of the VS_FIXEDFILEINFO structure. For example, Value could be 'Private build + // for Olivetti solving mouse problems on M250 and M250E computers'. + + // "If you use the Var structure to list the languages your application + // or DLL supports instead of using multiple version resources, + // use the Value member to contain an array of DWORD values indicating the + // language and code page combinations supported by this file. The + // low-order word of each DWORD must contain a Microsoft language identifier, + // and the high-order word must contain the IBM code page number. + // Either high-order or low-order word can be zero, indicating that + // the file is language or code page independent. If the Var structure is // omitted, the file will be interpreted as both language and code page independent. " let varFileInfo = [ (0x0, 0x04b0) ] - let fixedFileInfo = + let fixedFileInfo = let dwFileFlagsMask = 0x3f // REVIEW: HARDWIRED let dwFileFlags = 0x00 // REVIEW: HARDWIRED let dwFileOS = 0x04 // REVIEW: HARDWIRED @@ -434,10 +464,10 @@ module MainModuleBuilder = let lwFileDate = 0x00L // REVIEW: HARDWIRED (fileVersionInfo, productVersionString |> productVersionToILVersionInfo, dwFileFlagsMask, dwFileFlags, dwFileOS, dwFileType, dwFileSubtype, lwFileDate) - let vsVersionInfoResource = + let vsVersionInfoResource = VersionResourceFormat.VS_VERSION_INFO_RESOURCE(fixedFileInfo, stringFileInfo, varFileInfo) - let resource = + let resource = [| yield! ResFileFormat.ResFileHeader() yield! vsVersionInfoResource |] @@ -456,40 +486,36 @@ module MainModuleBuilder = // otherwise, include the default manifest else let path = Path.Combine(System.AppContext.BaseDirectory, @"default.win32manifest") - if FileSystem.FileExistsShim(path) then path + if File.Exists(path) then path else Path.Combine(System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory(), @"default.win32manifest") - let nativeResources = + let nativeResources = [ for av in assemblyVersionResources assemblyVersion do yield ILNativeResource.Out av if not(tcConfig.win32res = "") then - yield ILNativeResource.Out (FileSystem.OpenFileForReadShim(tcConfig.win32res).ReadAllBytes()) + yield ILNativeResource.Out (FileSystem.ReadAllBytesShim tcConfig.win32res) if tcConfig.includewin32manifest && not(win32Manifest = "") && not runningOnMono then - yield ILNativeResource.Out [| yield! ResFileFormat.ResFileHeader() - yield! (ManifestResourceFormat.VS_MANIFEST_RESOURCE((FileSystem.OpenFileForReadShim(win32Manifest).ReadAllBytes()), tcConfig.target = CompilerTarget.Dll)) |] - if tcConfig.win32res = "" && tcConfig.win32icon <> "" && tcConfig.target <> CompilerTarget.Dll then - use ms = new MemoryStream() - Win32ResourceConversions.AppendIconToResourceStream(ms, FileSystem.OpenFileForWriteShim(tcConfig.win32icon)) - yield ILNativeResource.Out [| yield! ResFileFormat.ResFileHeader() - yield! ms.ToArray() |] ] - - // Add attributes, version number, resources etc. - {mainModule with + yield ILNativeResource.Out [| yield! ResFileFormat.ResFileHeader() + yield! (ManifestResourceFormat.VS_MANIFEST_RESOURCE((FileSystem.ReadAllBytesShim win32Manifest), tcConfig.target = CompilerTarget.Dll)) |]] + + // Add attributes, version number, resources etc. + {mainModule with StackReserveSize = tcConfig.stackReserveSize - Name = (if tcConfig.target = CompilerTarget.Module then FileSystemUtils.fileNameOfPath outfile else mainModule.Name) - SubSystemFlags = (if tcConfig.target = CompilerTarget.WinExe then 2 else 3) + Name = (if tcConfig.target = CompilerTarget.Module then Filename.fileNameOfPath outfile else mainModule.Name) + SubSystemFlags = (if tcConfig.target = CompilerTarget.WinExe then 2 else 3) Resources= resources ImageBase = (match tcConfig.baseAddress with None -> 0x00400000l | Some b -> b) IsDLL=(tcConfig.target = CompilerTarget.Dll || tcConfig.target=CompilerTarget.Module) - Platform = tcConfig.platform + Platform = tcConfig.platform Is32Bit=(match tcConfig.platform with Some X86 -> true | _ -> false) - Is64Bit=(match tcConfig.platform with Some AMD64 | Some IA64 -> 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 - CustomAttrsStored= + CustomAttrsStored= storeILCustomAttrs - (mkILCustomAttrs - [ if tcConfig.target = CompilerTarget.Module then - yield! sigDataAttributes + (mkILCustomAttrs + [ if tcConfig.target = CompilerTarget.Module then + yield! sigDataAttributes yield! codegenResults.ilNetModuleAttrs ]) NativeResources=nativeResources Manifest = manifest } + diff --git a/src/fsharp/CreateILModule.fsi b/src/fsharp/CreateILModule.fsi index 686f587c635..26ae6596002 100644 --- a/src/fsharp/CreateILModule.fsi +++ b/src/fsharp/CreateILModule.fsi @@ -2,9 +2,9 @@ module internal FSharp.Compiler.CreateILModule -open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.StrongNameSign +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Internal.StrongNameSign open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerImports @@ -21,7 +21,6 @@ val ValidateKeySigningAttributes: tcConfig:TcConfig * tcGlobals:TcGlobals * TopA /// Get the object used to perform strong-name signing val GetStrongNameSigner: signingInfo: StrongNameSigningInfo -> ILStrongNameSigner option -/// Helpers for finding attributes module AttributeHelpers = val TryFindStringAttribute: g: TcGlobals -> attrib: string -> attribs: Attribs -> string option diff --git a/src/fsharp/DetupleArgs.fs b/src/fsharp/DetupleArgs.fs index 2ff48082fa5..f9277e762f1 100644 --- a/src/fsharp/DetupleArgs.fs +++ b/src/fsharp/DetupleArgs.fs @@ -2,16 +2,16 @@ module internal FSharp.Compiler.Detuple -open Internal.Utilities.Collections -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras +open FSharp.Compiler +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.Lib open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Xml +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.XmlDoc // This pass has one aim. // - to eliminate tuples allocated at call sites (due to uncurried style) @@ -631,10 +631,10 @@ type env = prefix: string - m: range + m: Range.range } - override _.ToString() = "" + override __.ToString() = "" let suffixE env s = {env with prefix = env.prefix + s} @@ -665,7 +665,7 @@ let buildProjections env bindings x xtys = xtys |> List.mapi (fun i xty -> let vi, vix = newLocalN env i xty - let bind = mkBind DebugPointAtBinding.NoneAtInvisible vi (mkTupleFieldGet env.eg (tupInfoRef, x, xtys, i, env.m)) + let bind = mkBind NoDebugPointAtInvisibleBinding vi (mkTupleFieldGet env.eg (tupInfoRef, x, xtys, i, env.m)) bind, vix) |> List.unzip diff --git a/src/fsharp/DetupleArgs.fsi b/src/fsharp/DetupleArgs.fsi index f00f9c150ab..e830b97200c 100644 --- a/src/fsharp/DetupleArgs.fsi +++ b/src/fsharp/DetupleArgs.fsi @@ -2,7 +2,7 @@ module internal FSharp.Compiler.Detuple -open Internal.Utilities.Collections +open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypedTree @@ -13,6 +13,9 @@ module GlobalUsageAnalysis = type accessor + /// Results is "expr information". + /// This could extend to be a full graph view of the expr. + /// Later could support "safe" change operations, and optimisations could be in terms of those. type Results = { /// v -> context / APP inst args diff --git a/src/fsharp/Diagnostics.fs b/src/fsharp/Diagnostics.fs deleted file mode 100644 index 350703012ed..00000000000 --- a/src/fsharp/Diagnostics.fs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -// This file contains simple types related to diagnsotics that are made public in the -// FSharp.Compiler.Service API but which are also used throughout the -// F# compiler. -namespace FSharp.Compiler.Diagnostics - -[] -type FSharpDiagnosticSeverity = - | Hidden - | Info - | Warning - | Error - -type FSharpDiagnosticOptions = - { - WarnLevel: int - GlobalWarnAsError: bool - WarnOff: int list - WarnOn: int list - WarnAsError: int list - WarnAsWarn: int list - } - static member Default = - { - WarnLevel = 3 - GlobalWarnAsError = false - WarnOff = [] - WarnOn = [] - WarnAsError = [] - WarnAsWarn = [] - } - diff --git a/src/fsharp/Diagnostics.fsi b/src/fsharp/Diagnostics.fsi deleted file mode 100644 index b1dc86be20b..00000000000 --- a/src/fsharp/Diagnostics.fsi +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -// This file contains simple types related to diagnsotics that are made public in the -// FSharp.Compiler.Service API but which are also used throughout the -// F# compiler. - -namespace FSharp.Compiler.Diagnostics - -[] -type FSharpDiagnosticSeverity = - | Hidden - | Info - | Warning - | Error - -type FSharpDiagnosticOptions = - { WarnLevel: int - GlobalWarnAsError: bool - WarnOff: int list - WarnOn: int list - WarnAsError: int list - WarnAsWarn: int list } - - static member Default: FSharpDiagnosticOptions - diff --git a/src/fsharp/Directory.Build.props b/src/fsharp/Directory.Build.props index ba0693c81e5..5b972c79383 100644 --- a/src/fsharp/Directory.Build.props +++ b/src/fsharp/Directory.Build.props @@ -12,6 +12,7 @@ + true true false $(ArtifactsPackagesDir)\$(Configuration) diff --git a/src/fsharp/DotNetFrameworkDependencies.fs b/src/fsharp/DotNetFrameworkDependencies.fs new file mode 100644 index 00000000000..cfff44efc81 --- /dev/null +++ b/src/fsharp/DotNetFrameworkDependencies.fs @@ -0,0 +1,562 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +// Functions to retrieve framework dependencies +module internal FSharp.Compiler.DotNetFrameworkDependencies + + open System + open System.Collections.Generic + open System.Diagnostics + open System.Globalization + open System.IO + open System.Reflection + open System.Runtime.InteropServices + open Internal.Utilities + open Internal.Utilities.FSharpEnvironment + + type private TypeInThisAssembly = class end + + let fSharpCompilerLocation = + let location = Path.GetDirectoryName(typeof.Assembly.Location) + match FSharpEnvironment.BinFolderOfDefaultFSharpCompiler (Some location) with + | Some path -> path + | None -> +#if DEBUG + Debug.Print(sprintf """FSharpEnvironment.BinFolderOfDefaultFSharpCompiler (Some '%s') returned None Location + customized incorrectly: algorithm here: https://github.com/dotnet/fsharp/blob/03f3f1c35f82af26593d025dabca57a6ef3ea9a1/src/utils/CompilerLocationUtils.fs#L171""" + location) +#endif + // Use the location of this dll + location + + let inline ifEmptyUse alternative filename = if String.IsNullOrWhiteSpace filename then alternative else filename + + let getFSharpCoreLibraryName = "FSharp.Core" + let getFsiLibraryName = "FSharp.Compiler.Interactive.Settings" + let getDefaultFSharpCoreLocation = Path.Combine(fSharpCompilerLocation, getFSharpCoreLibraryName + ".dll") + let getDefaultFsiLibraryLocation = Path.Combine(fSharpCompilerLocation, getFsiLibraryName + ".dll") + let implementationAssemblyDir = Path.GetDirectoryName(typeof.Assembly.Location) |> ifEmptyUse fSharpCompilerLocation + + // Use the ValueTuple that is executing with the compiler if it is from System.ValueTuple + // or the System.ValueTuple.dll that sits alongside the compiler. (Note we always ship one with the compiler) + let getDefaultSystemValueTupleReference () = + try + let asm = typeof>.Assembly + if asm.FullName.StartsWith("System.ValueTuple", StringComparison.OrdinalIgnoreCase) then + Some asm.Location + else + let valueTuplePath = Path.Combine(fSharpCompilerLocation, "System.ValueTuple.dll") + if File.Exists(valueTuplePath) then + Some valueTuplePath + else + None + with _ -> None + + // Algorithm: + // use implementation location of obj type, on shared frameworks it will always be in: + // + // dotnet\shared\Microsoft.NETCore.App\sdk-version\System.Private.CoreLib.dll + // + // if that changes we will need to find another way to do this. Hopefully the sdk will eventually provide an API + // use the well know location for obj to traverse the file system towards the + // + // packs\Microsoft.NETCore.App.Ref\sdk-version\netcoreappn.n + // we will rely on the sdk-version match on the two paths to ensure that we get the product that ships with the + // version of the runtime we are executing on + // Use the reference assemblies for the highest netcoreapp tfm that we find in that location that is + // lower than or equal to the implementation version. + let zeroVersion = Version("0.0.0.0") + let version, frameworkRefsPackDirectoryRoot = + try + let computeVersion version = + match Version.TryParse(version) with + | true, v -> v + | false, _ -> zeroVersion + + let version = computeVersion (DirectoryInfo(implementationAssemblyDir).Name) + let microsoftNETCoreAppRef = Path.Combine(implementationAssemblyDir, "../../../packs/Microsoft.NETCore.App.Ref") + if Directory.Exists(microsoftNETCoreAppRef) then + let directory = DirectoryInfo(microsoftNETCoreAppRef).GetDirectories() + |> Array.map (fun di -> computeVersion di.Name) + |> Array.sort + |> Array.filter(fun v -> v <= version) + |> Array.last + Some (directory.ToString()), Some microsoftNETCoreAppRef + else + None, None + with | _ -> None, None + + // Tries to figure out the tfm for the compiler instance. + // On coreclr it uses the deps.json file + let netcoreTfm = + let file = + try + let asm = Assembly.GetEntryAssembly() + match asm with + | null -> "" + | asm -> + let depsJsonPath = Path.ChangeExtension(asm.Location, "deps.json") + if File.Exists(depsJsonPath) then + File.ReadAllText(depsJsonPath) + else + "" + with _ -> "" + + let tfmPrefix=".NETCoreApp,Version=v" + let pattern = "\"name\": \"" + tfmPrefix + let startPos = + let startPos = file.IndexOf(pattern, StringComparison.OrdinalIgnoreCase) + if startPos >= 0 then startPos + (pattern.Length) else startPos + + let length = + if startPos >= 0 then + let ep = file.IndexOf("\"", startPos) + if ep >= 0 then ep - startPos else ep + else -1 + match startPos, length with + | -1, _ + | _, -1 -> + if isRunningOnCoreClr then + // Running on coreclr but no deps.json was deployed with the host so default to 3.0 + Some "netcoreapp3.1" + else + // Running on desktop + None + | pos, length -> + // use value from the deps.json file + Some ("netcoreapp" + file.Substring(pos, length)) + + // Tries to figure out the tfm for the compiler instance on the Windows desktop. + // On full clr it uses the mscorlib version number + let getWindowsDesktopTfm () = + let defaultMscorlibVersion = 4,8,3815,0 + let desktopProductVersionMonikers = [| + // major, minor, build, revision, moniker + 4, 8, 3815, 0, "net48" + 4, 8, 3761, 0, "net48" + 4, 7, 3190, 0, "net472" + 4, 7, 3062, 0, "net472" + 4, 7, 2600, 0, "net471" + 4, 7, 2558, 0, "net471" + 4, 7, 2053, 0, "net47" + 4, 7, 2046, 0, "net47" + 4, 6, 1590, 0, "net462" + 4, 6, 57, 0, "net462" + 4, 6, 1055, 0, "net461" + 4, 6, 81, 0, "net46" + 4, 0, 30319, 34209, "net452" + 4, 0, 30319, 17020, "net452" + 4, 0, 30319, 18408, "net451" + 4, 0, 30319, 17929, "net45" + 4, 0, 30319, 1, "net4" + |] + + let majorPart, minorPart, buildPart, privatePart= + try + let attrOpt = typeof.Assembly.GetCustomAttributes(typeof) |> Seq.tryHead + match attrOpt with + | Some attr -> + let fv = (downcast attr : AssemblyFileVersionAttribute).Version.Split([|'.'|]) |> Array.map(fun e -> Int32.Parse(e)) + fv.[0], fv.[1], fv.[2], fv.[3] + | _ -> defaultMscorlibVersion + with _ -> defaultMscorlibVersion + + // Get the ProductVersion of this framework compare with table yield compatible monikers + match desktopProductVersionMonikers + |> Array.tryFind (fun (major, minor, build, revision, _) -> + (majorPart >= major) && + (minorPart >= minor) && + (buildPart >= build) && + (privatePart >= revision)) with + | Some (_,_,_,_,moniker) -> + moniker + | None -> + // no TFM could be found, assume latest stable? + "net48" + + /// Gets the tfm E.g netcore3.0, net472 + let executionTfm = + match netcoreTfm with + | Some tfm -> tfm + | _ -> getWindowsDesktopTfm () + + // Computer valid dotnet-rids for this environment: + // https://docs.microsoft.com/en-us/dotnet/core/rid-catalog + // + // Where rid is: win, win-x64, win-x86, osx-x64, linux-x64 etc ... + let executionRid = + let processArchitecture = RuntimeInformation.ProcessArchitecture + let baseRid = + if RuntimeInformation.IsOSPlatform(OSPlatform.Windows) then "win" + elif RuntimeInformation.IsOSPlatform(OSPlatform.OSX) then "osx" + else "linux" + let platformRid = + match processArchitecture with + | Architecture.X64 -> baseRid + "-x64" + | Architecture.X86 -> baseRid + "-x86" + | Architecture.Arm64 -> baseRid + "-arm64" + | _ -> baseRid + "-arm" + platformRid + + let isInReferenceAssemblyPackDirectory filename = + match frameworkRefsPackDirectoryRoot with + | Some root -> + let path = Path.GetDirectoryName(filename) + path.StartsWith(root, StringComparison.OrdinalIgnoreCase) + | _ -> false + + let frameworkRefsPackDirectory = + let tfmPrefix = "netcoreapp" + let tfmCompare c1 c2 = + let deconstructTfmApp (netcoreApp: DirectoryInfo) = + let name = netcoreApp.Name + try + if name.StartsWith(tfmPrefix, StringComparison.InvariantCultureIgnoreCase) then + Some (Double.Parse(name.Substring(tfmPrefix.Length), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture)) + else + None + with _ -> None + + if c1 = c2 then 0 + else + match (deconstructTfmApp c1), (deconstructTfmApp c2) with + | Some c1, Some c2 -> int(c1 - c2) + | None, Some _ -> -1 + | Some _, None -> 1 + | _ -> 0 + + match version, frameworkRefsPackDirectoryRoot with + | Some version, Some root -> + try + let ref = Path.Combine(root, version, "ref") + let highestTfm = DirectoryInfo(ref).GetDirectories() + |> Array.sortWith tfmCompare + |> Array.tryLast + + match highestTfm with + | Some tfm -> Some (Path.Combine(ref, tfm.Name)) + | None -> None + with | _ -> None + | _ -> None + + let getDependenciesOf assemblyReferences = + let assemblies = new Dictionary() + + // Identify path to a dll in the framework directory from a simple name + let frameworkPathFromSimpleName simpleName = + let root = Path.Combine(implementationAssemblyDir, simpleName) + let pathOpt = + [| ""; ".dll"; ".exe" |] + |> Seq.tryPick(fun ext -> + let path = root + ext + if File.Exists(path) then Some path + else None) + match pathOpt with + | Some path -> path + | None -> root + + // Collect all assembly dependencies into assemblies dictionary + let rec traverseDependencies reference = + // Reference can be either path to a file on disk or a Assembly Simple Name + let referenceName, path = + try + if File.Exists(reference) then + // Reference is a path to a file on disk + Path.GetFileNameWithoutExtension(reference), reference + else + // Reference is a SimpleAssembly name + reference, frameworkPathFromSimpleName reference + + with _ -> reference, frameworkPathFromSimpleName reference + + if not (assemblies.ContainsKey(referenceName)) then + try + if File.Exists(path) then + match referenceName with + | "System.Runtime.WindowsRuntime" + | "System.Runtime.WindowsRuntime.UI.Xaml" -> + // The Windows compatibility pack included in the runtime contains a reference to + // System.Runtime.WindowsRuntime, but to properly use that type the runtime also needs a + // reference to the Windows.md meta-package, which isn't referenced by default. To avoid + // a bug where types from `Windows, Version=255.255.255.255` can't be found we're going to + // not default include this assembly. It can still be manually referenced if it's needed + // via the System.Runtime.WindowsRuntime NuGet package. + // + // In the future this branch can be removed because WinRT support is being removed from the + // .NET 5 SDK (https://github.com/dotnet/runtime/pull/36715) + () + | "System.Private.CoreLib" -> + // System.Private.CoreLib doesn't load with reflection + assemblies.Add(referenceName, path) + | _ -> + try + let asm = System.Reflection.Assembly.LoadFrom(path) + assemblies.Add(referenceName, path) + for reference in asm.GetReferencedAssemblies() do + traverseDependencies reference.Name + with e -> () + with e -> () + + assemblyReferences |> List.iter(traverseDependencies) + assemblies + + // This list is the default set of references for "non-project" files. + // + // These DLLs are + // (a) included in the environment used for all .fsx files (see service.fs) + // (b) included in environment for files 'orphaned' from a project context + // -- for orphaned files (files in VS without a project context) + let getDesktopDefaultReferences useFsiAuxLib = [ + yield "mscorlib" + yield "System" + yield "System.Xml" + yield "System.Runtime.Remoting" + yield "System.Runtime.Serialization.Formatters.Soap" + yield "System.Data" + yield "System.Drawing" + yield "System.Core" + yield "System.Configuration" + + yield getFSharpCoreLibraryName + if useFsiAuxLib then yield getFsiLibraryName + + // always include a default reference to System.ValueTuple.dll in scripts and out-of-project sources + match getDefaultSystemValueTupleReference () with + | None -> () + | Some v -> yield v + + // These are the Portable-profile and .NET Standard 1.6 dependencies of FSharp.Core.dll. These are needed + // when an F# script 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 "netstandard" + 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.Net.Requests" // System.Net.WebResponse etc. + yield "System.Collections" // System.Collections.Generic.List + yield "System.Runtime.Numerics" // BigInteger + yield "System.Threading" // OperationCanceledException + yield "System.Web" + yield "System.Web.Services" + yield "System.Windows.Forms" + yield "System.Numerics" + ] + + let fetchPathsForDefaultReferencesForScriptsAndOutOfProjectSources useFsiAuxLib useSdkRefs assumeDotNetFramework = + let results = + if assumeDotNetFramework then + getDesktopDefaultReferences useFsiAuxLib + else + let dependencies = + let getImplementationReferences () = + // Coreclr supports netstandard assemblies only for now + (getDependenciesOf [ + yield! Directory.GetFiles(implementationAssemblyDir, "*.dll") + yield getDefaultFSharpCoreLocation + if useFsiAuxLib then yield getDefaultFsiLibraryLocation + ]).Values |> Seq.toList + + if useSdkRefs then + // Go fetch references + match frameworkRefsPackDirectory with + | Some path -> + try [ yield! Directory.GetFiles(path, "*.dll") + yield getDefaultFSharpCoreLocation + if useFsiAuxLib then yield getDefaultFsiLibraryLocation + ] + with | _ -> List.empty + | None -> + getImplementationReferences () + else + getImplementationReferences () + dependencies + results + + let defaultReferencesForScriptsAndOutOfProjectSources useFsiAuxLib assumeDotNetFramework useSdkRefs = + fetchPathsForDefaultReferencesForScriptsAndOutOfProjectSources useFsiAuxLib useSdkRefs assumeDotNetFramework + + // A set of assemblies to always consider to be system assemblies. A common set of these can be used a shared + // resources between projects in the compiler services. Also all assemblies where well-known system types exist + // referenced from TcGlobals must be listed here. + let systemAssemblies = + HashSet [ + // NOTE: duplicates are ok in this list + + // .NET Framework list + yield "mscorlib" + yield "netstandard" + yield "System" + yield getFSharpCoreLibraryName + yield "FSharp.Compiler.Interactive.Settings" + yield "Microsoft.CSharp" + yield "Microsoft.VisualBasic" + yield "Microsoft.VisualBasic.Core" + yield "Microsoft.Win32.Primitives" + yield "Microsoft.Win32.Registry" + yield "System.AppContext" + yield "System.Buffers" + yield "System.Collections" + yield "System.Collections.Concurrent" + yield "System.Collections.Immutable" + yield "System.Collections.NonGeneric" + yield "System.Collections.Specialized" + yield "System.ComponentModel" + yield "System.ComponentModel.Annotations" + yield "System.ComponentModel.DataAnnotations" + yield "System.ComponentModel.EventBasedAsync" + yield "System.ComponentModel.Primitives" + yield "System.ComponentModel.TypeConverter" + yield "System.Configuration" + yield "System.Console" + yield "System.Core" + yield "System.Data" + yield "System.Data.Common" + yield "System.Data.DataSetExtensions" + yield "System.Deployment" + yield "System.Design" + yield "System.Diagnostics.Contracts" + yield "System.Diagnostics.Debug" + yield "System.Diagnostics.DiagnosticSource" + yield "System.Diagnostics.FileVersionInfo" + yield "System.Diagnostics.Process" + yield "System.Diagnostics.StackTrace" + yield "System.Diagnostics.TextWriterTraceListener" + yield "System.Diagnostics.Tools" + yield "System.Diagnostics.TraceSource" + yield "System.Diagnostics.Tracing" + yield "System.Drawing" + yield "System.Drawing.Primitives" + yield "System.Dynamic.Runtime" + yield "System.Formats.Asn1" + yield "System.Globalization" + yield "System.Globalization.Calendars" + yield "System.Globalization.Extensions" + yield "System.IO" + yield "System.IO.Compression" + yield "System.IO.Compression.Brotli" + yield "System.IO.Compression.FileSystem" + yield "System.IO.Compression.ZipFile" + yield "System.IO.FileSystem" + yield "System.IO.FileSystem.DriveInfo" + yield "System.IO.FileSystem.Primitives" + yield "System.IO.FileSystem.Watcher" + yield "System.IO.IsolatedStorage" + yield "System.IO.MemoryMappedFiles" + yield "System.IO.Pipes" + yield "System.IO.UnmanagedMemoryStream" + yield "System.Linq" + yield "System.Linq.Expressions" + yield "System.Linq.Expressions" + yield "System.Linq.Parallel" + yield "System.Linq.Queryable" + yield "System.Memory" + yield "System.Messaging" + yield "System.Net" + yield "System.Net.Http" + yield "System.Net.Http.Json" + yield "System.Net.HttpListener" + yield "System.Net.Mail" + yield "System.Net.NameResolution" + yield "System.Net.NetworkInformation" + yield "System.Net.Ping" + yield "System.Net.Primitives" + yield "System.Net.Requests" + yield "System.Net.Security" + yield "System.Net.ServicePoint" + yield "System.Net.Sockets" + yield "System.Net.WebClient" + yield "System.Net.WebHeaderCollection" + yield "System.Net.WebProxy" + yield "System.Net.WebSockets" + yield "System.Net.WebSockets.Client" + yield "System.Numerics" + yield "System.Numerics.Vectors" + yield "System.ObjectModel" + yield "System.Observable" + yield "System.Private.Uri" + yield "System.Reflection" + yield "System.Reflection.DispatchProxy" + yield "System.Reflection.Emit" + yield "System.Reflection.Emit.ILGeneration" + yield "System.Reflection.Emit.Lightweight" + yield "System.Reflection.Extensions" + yield "System.Reflection.Metadata" + yield "System.Reflection.Primitives" + yield "System.Reflection.TypeExtensions" + yield "System.Resources.Reader" + yield "System.Resources.ResourceManager" + yield "System.Resources.Writer" + yield "System.Runtime" + yield "System.Runtime.CompilerServices.Unsafe" + yield "System.Runtime.CompilerServices.VisualC" + yield "System.Runtime.Extensions" + yield "System.Runtime.Handles" + yield "System.Runtime.InteropServices" + yield "System.Runtime.InteropServices.PInvoke" + yield "System.Runtime.InteropServices.RuntimeInformation" + yield "System.Runtime.InteropServices.WindowsRuntime" + yield "System.Runtime.Intrinsics" + yield "System.Runtime.Loader" + yield "System.Runtime.Numerics" + yield "System.Runtime.Remoting" + yield "System.Runtime.Serialization" + yield "System.Runtime.Serialization.Formatters" + yield "System.Runtime.Serialization.Formatters.Soap" + yield "System.Runtime.Serialization.Json" + yield "System.Runtime.Serialization.Primitives" + yield "System.Runtime.Serialization.Xml" + yield "System.Security" + yield "System.Security.Claims" + yield "System.Security.Cryptography.Algorithms" + yield "System.Security.Cryptography.Cng" + yield "System.Security.Cryptography.Csp" + yield "System.Security.Cryptography.Encoding" + yield "System.Security.Cryptography.OpenSsl" + yield "System.Security.Cryptography.Primitives" + yield "System.Security.Cryptography.X509Certificates" + yield "System.Security.Principal" + yield "System.Security.Principal.Windows" + yield "System.Security.SecureString" + yield "System.ServiceModel.Web" + yield "System.ServiceProcess" + yield "System.Text.Encoding" + yield "System.Text.Encoding.CodePages" + yield "System.Text.Encoding.Extensions" + yield "System.Text.Encodings.Web" + yield "System.Text.Json" + yield "System.Text.RegularExpressions" + yield "System.Threading" + yield "System.Threading.Channels" + yield "System.Threading.Overlapped" + yield "System.Threading.Tasks" + yield "System.Threading.Tasks.Dataflow" + yield "System.Threading.Tasks.Extensions" + yield "System.Threading.Tasks.Parallel" + yield "System.Threading.Thread" + yield "System.Threading.ThreadPool" + yield "System.Threading.Timer" + yield "System.Transactions" + yield "System.Transactions.Local" + yield "System.ValueTuple" + yield "System.Web" + yield "System.Web.HttpUtility" + yield "System.Web.Services" + yield "System.Windows" + yield "System.Windows.Forms" + yield "System.Xml" + yield "System.Xml.Linq" + yield "System.Xml.ReaderWriter" + yield "System.Xml.Serialization" + yield "System.Xml.XDocument" + yield "System.Xml.XmlDocument" + yield "System.Xml.XmlSerializer" + yield "System.Xml.XPath" + yield "System.Xml.XPath.XDocument" + yield "WindowsBase" + ] + + // The set of references entered into the TcConfigBuilder for scripts prior to computing the load closure. + let basicReferencesForScriptLoadClosure useFsiAuxLib useSdkRefs assumeDotNetFramework = + fetchPathsForDefaultReferencesForScriptsAndOutOfProjectSources useFsiAuxLib useSdkRefs assumeDotNetFramework diff --git a/src/fsharp/ErrorLogger.fs b/src/fsharp/ErrorLogger.fs index a81e048c8ce..1e391eb2aaf 100644 --- a/src/fsharp/ErrorLogger.fs +++ b/src/fsharp/ErrorLogger.fs @@ -1,13 +1,15 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module FSharp.Compiler.ErrorLogger +module public FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Diagnostics +open FSharp.Compiler +open FSharp.Compiler.Range open FSharp.Compiler.Features -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Text open System -open System.Diagnostics + +//------------------------------------------------------------------------ +// General error recovery mechanism +//----------------------------------------------------------------------- /// Represents the style being used to format errors [] @@ -51,7 +53,7 @@ let NoSuggestions : Suggestions = ignore /// Thrown when we stop processing the F# Interactive entry or #load. exception StopProcessingExn of exn option with - override _.Message = "Processing of a script fragment has stopped because an exception has been raised" + override this.Message = "Processing of a script fragment has stopped because an exception has been raised" override this.ToString() = match this :> exn with @@ -60,15 +62,21 @@ exception StopProcessingExn of exn option with let (|StopProcessing|_|) exn = match exn with StopProcessingExn _ -> Some () | _ -> None - let StopProcessing<'T> = StopProcessingExn None -exception Error of (int * string) * range with // int is e.g. 191 in FS0191 +exception NumberedError of (int * string) * range with // int is e.g. 191 in FS0191 + override this.Message = + match this :> exn with + | NumberedError((_, msg), _) -> msg + | _ -> "impossible" + +exception Error of (int * string) * range with // int is e.g. 191 in FS0191 // eventually remove this type, it is a transitional artifact of the old unnumbered error style override this.Message = match this :> exn with | Error((_, msg), _) -> msg | _ -> "impossible" + exception InternalError of msg: string * range with override this.Message = match this :> exn with @@ -76,19 +84,13 @@ exception InternalError of msg: string * range with | _ -> "impossible" exception UserCompilerMessage of string * int * range - exception LibraryUseOnly of range - exception Deprecated of string * range - exception Experimental of string * range - exception PossibleUnverifiableCode of range exception UnresolvedReferenceNoRange of (*assemblyName*) string - exception UnresolvedReferenceError of (*assemblyName*) string * range - exception UnresolvedPathReferenceNoRange of (*assemblyName*) string * (*path*) string with override this.Message = match this :> exn with @@ -97,6 +99,8 @@ exception UnresolvedPathReferenceNoRange of (*assemblyName*) string * (*path*) s exception UnresolvedPathReference of (*assemblyName*) string * (*path*) string * range + + exception ErrorWithSuggestions of (int * string) * range * string * Suggestions with // int is e.g. 191 in FS0191 override this.Message = match this :> exn with @@ -138,12 +142,17 @@ let rec AttachRange m (exn:exn) = | :? System.ArgumentException as exn -> InternalError(exn.Message + " (ArgumentException)", m) | notARangeDual -> notARangeDual + +//---------------------------------------------------------------------------- +// Error logger interface + type Exiter = abstract Exit : int -> 'T + let QuitProcessExiter = { new Exiter with - member _.Exit n = + member __.Exit n = try System.Environment.Exit n with _ -> @@ -188,7 +197,7 @@ module BuildPhaseSubcategory = [] let Internal = "internal" // Compiler ICE -[] +[] type PhasedDiagnostic = { Exception:exn; Phase:BuildPhase } @@ -263,23 +272,23 @@ type PhasedDiagnostic = isPhaseInCompile [] -[] +[] type ErrorLogger(nameForDebugging:string) = abstract ErrorCount: int // The 'Impl' factoring enables a developer to place a breakpoint at the non-Impl // code just below and get a breakpoint for all error logger implementations. - abstract DiagnosticSink: phasedError: PhasedDiagnostic * severity: FSharpDiagnosticSeverity -> unit - member _.DebugDisplay() = sprintf "ErrorLogger(%s)" nameForDebugging + abstract DiagnosticSink: phasedError: PhasedDiagnostic * isError: bool -> unit + member __.DebugDisplay() = sprintf "ErrorLogger(%s)" nameForDebugging let DiscardErrorsLogger = { new ErrorLogger("DiscardErrorsLogger") with - member x.DiagnosticSink(phasedError, severity) = () + member x.DiagnosticSink(phasedError, isError) = () member x.ErrorCount = 0 } let AssertFalseErrorLogger = { new ErrorLogger("AssertFalseErrorLogger") with // TODO: reenable these asserts in the compiler service - member x.DiagnosticSink(phasedError, severity) = (* assert false; *) () + member x.DiagnosticSink(phasedError, isError) = (* assert false; *) () member x.ErrorCount = (* assert false; *) 0 } @@ -287,30 +296,26 @@ type CapturingErrorLogger(nm) = inherit ErrorLogger(nm) let mutable errorCount = 0 let diagnostics = ResizeArray() - - override _.DiagnosticSink(phasedError, severity) = - if severity = FSharpDiagnosticSeverity.Error then errorCount <- errorCount + 1 - diagnostics.Add (phasedError, severity) - - override _.ErrorCount = errorCount - - member _.Diagnostics = diagnostics |> Seq.toList - - member _.CommitDelayedDiagnostics(errorLogger:ErrorLogger) = + override x.DiagnosticSink(phasedError, isError) = + if isError then errorCount <- errorCount + 1 + diagnostics.Add (phasedError, isError) + override x.ErrorCount = errorCount + member x.Diagnostics = diagnostics |> Seq.toList + member x.CommitDelayedDiagnostics(errorLogger:ErrorLogger) = // Eagerly grab all the errors and warnings from the mutable collection let errors = diagnostics.ToArray() errors |> Array.iter errorLogger.DiagnosticSink + /// Type holds thread-static globals for use by the compile. type internal CompileThreadStatic = - [] + [] static val mutable private buildPhase : BuildPhase - [] + [] static val mutable private errorLogger : ErrorLogger - static member BuildPhaseUnchecked = CompileThreadStatic.buildPhase (* This can be a null value *) - + static member BuildPhaseUnchecked with get() = CompileThreadStatic.buildPhase (* This can be a null value *) static member BuildPhase with get() = match box CompileThreadStatic.buildPhase with @@ -366,7 +371,7 @@ module ErrorLoggerExtensions = type ErrorLogger with - member x.EmitDiagnostic (exn, severity) = + member x.ErrorR exn = match exn with | InternalError (s, _) | Failure s as exn -> System.Diagnostics.Debug.Assert(false, sprintf "Unexpected exception raised in compiler: %s\n%s" s (exn.ToString())) @@ -377,20 +382,22 @@ module ErrorLoggerExtensions = | ReportedError _ -> PreserveStackTrace exn raise exn - | _ -> x.DiagnosticSink(PhasedDiagnostic.Create(exn, CompileThreadStatic.BuildPhase), severity) - - member x.ErrorR exn = - x.EmitDiagnostic (exn, FSharpDiagnosticSeverity.Error) + | _ -> x.DiagnosticSink(PhasedDiagnostic.Create(exn, CompileThreadStatic.BuildPhase), true) member x.Warning exn = - x.EmitDiagnostic (exn, FSharpDiagnosticSeverity.Warning) + match exn with + | StopProcessing + | ReportedError _ -> + PreserveStackTrace exn + raise exn + | _ -> x.DiagnosticSink(PhasedDiagnostic.Create(exn, CompileThreadStatic.BuildPhase), false) member x.Error exn = x.ErrorR exn raise (ReportedError (Some exn)) - member x.SimulateError (ph: PhasedDiagnostic) = - x.DiagnosticSink (ph, FSharpDiagnosticSeverity.Error) + member x.SimulateError (ph: PhasedDiagnostic) = + x.DiagnosticSink (ph, true) raise (ReportedError (Some ph.Exception)) member x.ErrorRecovery (exn: exn) (m: range) = @@ -443,18 +450,17 @@ let PushErrorLoggerPhaseUntilUnwind(errorLoggerTransformer : ErrorLogger -> #Err let mutable newInstalled = true let newIsInstalled() = if newInstalled then () else (assert false; (); (*failwith "error logger used after unwind"*)) // REVIEW: ok to throw? let chkErrorLogger = { new ErrorLogger("PushErrorLoggerPhaseUntilUnwind") with - member _.DiagnosticSink(phasedError, isError) = newIsInstalled(); newErrorLogger.DiagnosticSink(phasedError, isError) - member _.ErrorCount = newIsInstalled(); newErrorLogger.ErrorCount } + member __.DiagnosticSink(phasedError, isError) = newIsInstalled(); newErrorLogger.DiagnosticSink(phasedError, isError) + member __.ErrorCount = newIsInstalled(); newErrorLogger.ErrorCount } CompileThreadStatic.ErrorLogger <- chkErrorLogger { new System.IDisposable with - member _.Dispose() = + member __.Dispose() = CompileThreadStatic.ErrorLogger <- oldErrorLogger newInstalled <- false } let SetThreadBuildPhaseNoUnwind(phase:BuildPhase) = CompileThreadStatic.BuildPhase <- phase - let SetThreadErrorLoggerNoUnwind errorLogger = CompileThreadStatic.ErrorLogger <- errorLogger // Global functions are still used by parser and TAST ops. @@ -471,29 +477,24 @@ let error exn = CompileThreadStatic.ErrorLogger.Error exn /// Simulates an error. For test purposes only. let simulateError (p : PhasedDiagnostic) = CompileThreadStatic.ErrorLogger.SimulateError p -let diagnosticSink (phasedError, severity) = CompileThreadStatic.ErrorLogger.DiagnosticSink (phasedError, severity) - -let errorSink pe = diagnosticSink (pe, FSharpDiagnosticSeverity.Error) - -let warnSink pe = diagnosticSink (pe, FSharpDiagnosticSeverity.Warning) - +let diagnosticSink (phasedError, isError) = CompileThreadStatic.ErrorLogger.DiagnosticSink (phasedError, isError) +let errorSink pe = diagnosticSink (pe, true) +let warnSink pe = diagnosticSink (pe, false) let errorRecovery exn m = CompileThreadStatic.ErrorLogger.ErrorRecovery exn m - let stopProcessingRecovery exn m = CompileThreadStatic.ErrorLogger.StopProcessingRecovery exn m - let errorRecoveryNoRange exn = CompileThreadStatic.ErrorLogger.ErrorRecoveryNoRange exn + let report f = f() let deprecatedWithError s m = errorR(Deprecated(s, m)) -let libraryOnlyError m = errorR(LibraryUseOnly m) - -let libraryOnlyWarning m = warning(LibraryUseOnly m) - +// Note: global state, but only for compiling FSharp.Core.dll +let mutable reportLibraryOnlyFeatures = true +let libraryOnlyError m = if reportLibraryOnlyFeatures then errorR(LibraryUseOnly m) +let libraryOnlyWarning m = if reportLibraryOnlyFeatures then warning(LibraryUseOnly m) let deprecatedOperator m = deprecatedWithError (FSComp.SR.elDeprecatedOperator()) m - let mlCompatWarning s m = warning(UserCompilerMessage(FSComp.SR.mlCompatMessage s, 62, m)) let suppressErrorReporting f = @@ -501,8 +502,8 @@ let suppressErrorReporting f = try let errorLogger = { new ErrorLogger("suppressErrorReporting") with - member _.DiagnosticSink(_phasedError, _isError) = () - member _.ErrorCount = 0 } + member __.DiagnosticSink(_phasedError, _isError) = () + member __.ErrorCount = 0 } SetThreadErrorLoggerNoUnwind errorLogger f() finally @@ -615,9 +616,9 @@ let TryD f g = | res -> res let rec RepeatWhileD nDeep body = body nDeep ++ (fun x -> if x then RepeatWhileD (nDeep+1) body else CompleteD) - let AtLeastOneD f l = MapD f l ++ (fun res -> ResultD (List.exists id res)) + [] module OperationResult = let inline ignore (res: OperationResult<'a>) = @@ -657,6 +658,25 @@ let NormalizeErrorString (text : string) = i <- i + delta buf.ToString() +type public FSharpErrorSeverityOptions = + { + WarnLevel: int + GlobalWarnAsError: bool + WarnOff: int list + WarnOn: int list + WarnAsError: int list + WarnAsWarn: int list + } + static member Default = + { + WarnLevel = 3 + GlobalWarnAsError = false + WarnOff = [] + WarnOn = [] + WarnAsError = [] + WarnAsWarn = [] + } + let private tryLanguageFeatureErrorAux (langVersion: LanguageVersion) (langFeature: LanguageFeature) (m: range) = if not (langVersion.SupportsFeature langFeature) then let featureStr = langVersion.GetFeatureString langFeature diff --git a/src/fsharp/ErrorLogger.fsi b/src/fsharp/ErrorLogger.fsi index bded498a198..4a0e187b974 100644 --- a/src/fsharp/ErrorLogger.fsi +++ b/src/fsharp/ErrorLogger.fsi @@ -1,11 +1,11 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.ErrorLogger +module public FSharp.Compiler.ErrorLogger open System -open FSharp.Compiler.Diagnostics +open FSharp.Compiler +open FSharp.Compiler.Range open FSharp.Compiler.Features -open FSharp.Compiler.Text /// Represents the style being used to format errors [] @@ -41,6 +41,8 @@ val ( |StopProcessing|_| ): exn:exn -> unit option val StopProcessing<'T> : exn +exception NumberedError of (int * string) * range + exception Error of (int * string) * range exception InternalError of msg: string * range @@ -138,7 +140,7 @@ type ErrorLogger = member DebugDisplay: unit -> string - abstract member DiagnosticSink: phasedError:PhasedDiagnostic * severity:FSharpDiagnosticSeverity -> unit + abstract member DiagnosticSink: phasedError:PhasedDiagnostic * isError:bool -> unit abstract member ErrorCount: int @@ -153,14 +155,14 @@ type CapturingErrorLogger = member CommitDelayedDiagnostics: errorLogger:ErrorLogger -> unit - override DiagnosticSink: phasedError:PhasedDiagnostic * severity:FSharpDiagnosticSeverity -> unit + override DiagnosticSink: phasedError:PhasedDiagnostic * isError:bool -> unit - member Diagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list + member Diagnostics: (PhasedDiagnostic * bool) list override ErrorCount: int [] -type CompileThreadStatic = +type internal CompileThreadStatic = static member BuildPhase: BuildPhase with get, set @@ -206,7 +208,7 @@ val error: exn:exn -> 'a val simulateError: p:PhasedDiagnostic -> 'a -val diagnosticSink: phasedError:PhasedDiagnostic * severity: FSharpDiagnosticSeverity -> unit +val diagnosticSink: phasedError:PhasedDiagnostic * isError:bool -> unit val errorSink: pe:PhasedDiagnostic -> unit @@ -222,6 +224,8 @@ val report: f:(unit -> 'a) -> 'a val deprecatedWithError: s:string -> m:range -> unit +val mutable reportLibraryOnlyFeatures: bool + val libraryOnlyError: m:range -> unit val libraryOnlyWarning: m:range -> unit @@ -316,11 +320,21 @@ val NewlineifyErrorString: message:string -> string /// NOTE: newlines are recognized and replaced with stringThatIsAProxyForANewlineInFlatErrors (ASCII 29, the 'group separator'), /// which is decoded by the IDE with 'NewlineifyErrorString' back into newlines, so that multi-line errors can be displayed in QuickInfo val NormalizeErrorString: text:string -> string + +type FSharpErrorSeverityOptions = + { WarnLevel: int + GlobalWarnAsError: bool + WarnOff: int list + WarnOn: int list + WarnAsError: int list + WarnAsWarn: int list } + + static member Default: FSharpErrorSeverityOptions -val checkLanguageFeatureError: langVersion:LanguageVersion -> langFeature:LanguageFeature -> m:range -> unit +val internal checkLanguageFeatureError: langVersion:LanguageVersion -> langFeature:LanguageFeature -> m:range -> unit -val checkLanguageFeatureErrorRecover: langVersion:LanguageVersion -> langFeature:LanguageFeature -> m:range -> unit +val internal checkLanguageFeatureErrorRecover: langVersion:LanguageVersion -> langFeature:LanguageFeature -> m:range -> unit -val tryLanguageFeatureErrorOption: langVersion:LanguageVersion -> langFeature:LanguageFeature -> m:range -> exn option +val internal tryLanguageFeatureErrorOption: langVersion:LanguageVersion -> langFeature:LanguageFeature -> m:range -> exn option -val languageFeatureNotSupportedInLibraryError: langVersion:LanguageVersion -> langFeature:LanguageFeature -> m:range -> 'a +val internal languageFeatureNotSupportedInLibraryError: langVersion:LanguageVersion -> langFeature:LanguageFeature -> m:range -> 'a diff --git a/src/fsharp/ErrorResolutionHints.fs b/src/fsharp/ErrorResolutionHints.fs index 537e59146d8..ee80985935e 100644 --- a/src/fsharp/ErrorResolutionHints.fs +++ b/src/fsharp/ErrorResolutionHints.fs @@ -4,16 +4,13 @@ module internal FSharp.Compiler.ErrorResolutionHints open Internal.Utilities -open Internal.Utilities.Library +open FSharp.Compiler.AbstractIL.Internal.Library open System.Collections open System.Collections.Generic let maxSuggestions = 5 - let minThresholdForSuggestions = 0.7 - let highConfidenceThreshold = 0.85 - let minStringLengthForSuggestion = 3 /// We report a candidate if its edit distance is <= the threshold. @@ -38,18 +35,18 @@ let DemangleOperator (nm: string) = type SuggestionBufferEnumerator(tail: int, data: KeyValuePair []) = let mutable current = data.Length interface IEnumerator with - member _.Current + member __.Current with get () = let kvpr = &data.[current] kvpr.Value interface System.Collections.IEnumerator with - member _.Current with get () = box data.[current].Value - member _.MoveNext() = + member __.Current with get () = box data.[current].Value + member __.MoveNext() = current <- current - 1 current > tail || (current = tail && data.[current] <> Unchecked.defaultof<_>) - member _.Reset () = current <- data.Length + member __.Reset () = current <- data.Length interface System.IDisposable with - member _.Dispose () = () + member __.Dispose () = () type SuggestionBuffer(idText: string) = let data = Array.zeroCreate>(maxSuggestions) @@ -71,7 +68,7 @@ type SuggestionBuffer(idText: string) = data.[pos - 1] <- KeyValuePair(k,v) if tail > 0 then tail <- tail - 1 - member _.Add (suggestion: string) = + member __.Add (suggestion: string) = if not disableSuggestions then if suggestion = idText then // some other parse error happened disableSuggestions <- true @@ -90,9 +87,9 @@ type SuggestionBuffer(idText: string) = then insert(similarity, suggestion) |> ignore - member _.Disabled with get () = disableSuggestions + member __.Disabled with get () = disableSuggestions - member _.IsEmpty with get () = disableSuggestions || (tail = maxSuggestions - 1) + member __.IsEmpty with get () = disableSuggestions || (tail = maxSuggestions - 1) interface IEnumerable with member this.GetEnumerator () = diff --git a/src/fsharp/ErrorResolutionHints.fsi b/src/fsharp/ErrorResolutionHints.fsi index 6b98f6793ab..a99b769770f 100644 --- a/src/fsharp/ErrorResolutionHints.fsi +++ b/src/fsharp/ErrorResolutionHints.fsi @@ -3,6 +3,8 @@ /// Functions to format error message details module internal FSharp.Compiler.ErrorResolutionHints +open Internal.Utilities +open FSharp.Compiler.AbstractIL.Internal.Library open System open System.Collections open System.Collections.Generic @@ -14,6 +16,13 @@ val IsInEditDistanceProximity: idText:string -> suggestion:string -> bool /// Demangles a suggestion val DemangleOperator: nm:string -> string +type SuggestionBufferEnumerator = + + interface IDisposable + interface IEnumerator + interface IEnumerator + new: tail:int * data: KeyValuePair [] -> SuggestionBufferEnumerator + type SuggestionBuffer = interface IEnumerable diff --git a/src/fsharp/ExtensionTyping.fs b/src/fsharp/ExtensionTyping.fs index c3a0e38f952..63fdadea901 100644 --- a/src/fsharp/ExtensionTyping.fs +++ b/src/fsharp/ExtensionTyping.fs @@ -6,20 +6,17 @@ namespace FSharp.Compiler #if !NO_EXTENSIONTYPING -open System -open System.IO -open System.Collections.Generic -open System.Reflection -open Internal.Utilities.Library -open Internal.Utilities.FSharpEnvironment -open FSharp.Core.CompilerServices -open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range - module internal ExtensionTyping = + open System + open System.IO + open System.Collections.Generic + open System.Reflection + open Microsoft.FSharp.Core.CompilerServices + open FSharp.Compiler.ErrorLogger + open FSharp.Compiler.Range + open FSharp.Compiler.AbstractIL.IL + open FSharp.Compiler.AbstractIL.Internal.Library // frontAndBack + open Internal.Utilities.FSharpEnvironment type TypeProviderDesignation = TypeProviderDesignation of string @@ -30,11 +27,11 @@ module internal ExtensionTyping = /// Represents some of the configuration parameters passed to type provider components type ResolutionEnvironment = - { resolutionFolder: string - outputFile: string option - showResolutionMessages: bool - referencedAssemblies: string[] - temporaryFolder: string } + { resolutionFolder : string + outputFile : string option + showResolutionMessages : bool + referencedAssemblies : string[] + temporaryFolder : string } /// Load a the design-time part of a type-provider into the host process, and look for types /// marked with the TypeProviderAttribute attribute. @@ -133,8 +130,8 @@ module internal ExtensionTyping = resolutionEnvironment: ResolutionEnvironment, isInvalidationSupported: bool, isInteractive: bool, - systemRuntimeContainsType: string -> bool, - systemRuntimeAssemblyVersion: System.Version, + systemRuntimeContainsType : string -> bool, + systemRuntimeAssemblyVersion : System.Version, compilerToolPaths: string list, m:range) = @@ -171,7 +168,7 @@ module internal ExtensionTyping = () ] with :? TypeProviderError as tpe -> - tpe.Iter(fun e -> errorR(Error((e.Number, e.ContextualErrorMessage), m)) ) + tpe.Iter(fun e -> errorR(NumberedError((e.Number, e.ContextualErrorMessage), m)) ) [] let providers = Tainted<_>.CreateAll(providerSpecs) @@ -257,8 +254,8 @@ module internal ExtensionTyping = let key (ty: ProvidedType) = (ty.Assembly.FullName, ty.FullName) static member val Instance = ProvidedTypeComparer() interface IEqualityComparer with - member _.GetHashCode(ty: ProvidedType) = hash (key ty) - member _.Equals(ty1: ProvidedType, ty2: ProvidedType) = (key ty1 = key ty2) + member __.GetHashCode(ty: ProvidedType) = hash (key ty) + member __.Equals(ty1: ProvidedType, ty2: ProvidedType) = (key ty1 = key ty2) /// The context used to interpret information in the closure of System.Type, System.MethodInfo and other /// info objects coming from the type provider. @@ -318,9 +315,9 @@ module internal ExtensionTyping = |> Seq.exists (fun a -> a.Constructor.DeclaringType.FullName = typeof.FullName) let provide () = ProvidedCustomAttributeProvider.Create (fun _provider -> x.CustomAttributes) interface IProvidedCustomAttributeProvider with - member _.GetHasTypeProviderEditorHideMethodsAttribute provider = provide().GetHasTypeProviderEditorHideMethodsAttribute provider - member _.GetDefinitionLocationAttribute provider = provide().GetDefinitionLocationAttribute provider - member _.GetXmlDocAttributes provider = provide().GetXmlDocAttributes provider + member __.GetHasTypeProviderEditorHideMethodsAttribute provider = provide().GetHasTypeProviderEditorHideMethodsAttribute provider + member __.GetDefinitionLocationAttribute provider = provide().GetDefinitionLocationAttribute provider + member __.GetXmlDocAttributes provider = provide().GetXmlDocAttributes provider // The type provider spec distinguishes between // - calls that can be made on provided types (i.e. types given by ReturnType, ParameterType, and generic argument types) @@ -329,73 +326,73 @@ module internal ExtensionTyping = // Alternatively we could use assertions to enforce this. // Suppress relocation of generated types - member _.IsSuppressRelocate = (x.Attributes &&& enum (int32 TypeProviderTypeAttributes.SuppressRelocate)) <> enum 0 - member _.IsErased = (x.Attributes &&& enum (int32 TypeProviderTypeAttributes.IsErased)) <> enum 0 - member _.IsGenericType = x.IsGenericType - member _.Namespace = x.Namespace - member _.FullName = x.FullName - member _.IsArray = x.IsArray - member _.Assembly: ProvidedAssembly = x.Assembly |> ProvidedAssembly.Create - member _.GetInterfaces() = x.GetInterfaces() |> ProvidedType.CreateArray ctxt - member _.GetMethods() = x.GetMethods bindingFlags |> ProvidedMethodInfo.CreateArray ctxt - member _.GetEvents() = x.GetEvents bindingFlags |> ProvidedEventInfo.CreateArray ctxt - member _.GetEvent nm = x.GetEvent(nm, bindingFlags) |> ProvidedEventInfo.Create ctxt - member _.GetProperties() = x.GetProperties bindingFlags |> ProvidedPropertyInfo.CreateArray ctxt - member _.GetProperty nm = x.GetProperty(nm, bindingFlags) |> ProvidedPropertyInfo.Create ctxt - member _.GetConstructors() = x.GetConstructors bindingFlags |> ProvidedConstructorInfo.CreateArray ctxt - member _.GetFields() = x.GetFields bindingFlags |> ProvidedFieldInfo.CreateArray ctxt - member _.GetField nm = x.GetField(nm, bindingFlags) |> ProvidedFieldInfo.Create ctxt - member _.GetAllNestedTypes() = x.GetNestedTypes(bindingFlags ||| BindingFlags.NonPublic) |> ProvidedType.CreateArray ctxt - member _.GetNestedTypes() = x.GetNestedTypes bindingFlags |> ProvidedType.CreateArray ctxt + member __.IsSuppressRelocate = (x.Attributes &&& enum (int32 TypeProviderTypeAttributes.SuppressRelocate)) <> enum 0 + member __.IsErased = (x.Attributes &&& enum (int32 TypeProviderTypeAttributes.IsErased)) <> enum 0 + member __.IsGenericType = x.IsGenericType + member __.Namespace = x.Namespace + member __.FullName = x.FullName + member __.IsArray = x.IsArray + member __.Assembly: ProvidedAssembly = x.Assembly |> ProvidedAssembly.Create + member __.GetInterfaces() = x.GetInterfaces() |> ProvidedType.CreateArray ctxt + member __.GetMethods() = x.GetMethods bindingFlags |> ProvidedMethodInfo.CreateArray ctxt + member __.GetEvents() = x.GetEvents bindingFlags |> ProvidedEventInfo.CreateArray ctxt + member __.GetEvent nm = x.GetEvent(nm, bindingFlags) |> ProvidedEventInfo.Create ctxt + member __.GetProperties() = x.GetProperties bindingFlags |> ProvidedPropertyInfo.CreateArray ctxt + member __.GetProperty nm = x.GetProperty(nm, bindingFlags) |> ProvidedPropertyInfo.Create ctxt + member __.GetConstructors() = x.GetConstructors bindingFlags |> ProvidedConstructorInfo.CreateArray ctxt + member __.GetFields() = x.GetFields bindingFlags |> ProvidedFieldInfo.CreateArray ctxt + member __.GetField nm = x.GetField(nm, bindingFlags) |> ProvidedFieldInfo.Create ctxt + member __.GetAllNestedTypes() = x.GetNestedTypes(bindingFlags ||| BindingFlags.NonPublic) |> ProvidedType.CreateArray ctxt + member __.GetNestedTypes() = x.GetNestedTypes bindingFlags |> ProvidedType.CreateArray ctxt /// Type.GetNestedType(string) can return null if there is no nested type with given name - member _.GetNestedType nm = x.GetNestedType (nm, bindingFlags) |> ProvidedType.Create ctxt + member __.GetNestedType nm = x.GetNestedType (nm, bindingFlags) |> ProvidedType.Create ctxt /// Type.GetGenericTypeDefinition() either returns type or throws exception, null is not permitted - member _.GetGenericTypeDefinition() = x.GetGenericTypeDefinition() |> ProvidedType.CreateWithNullCheck ctxt "GenericTypeDefinition" + member __.GetGenericTypeDefinition() = x.GetGenericTypeDefinition() |> ProvidedType.CreateWithNullCheck ctxt "GenericTypeDefinition" /// Type.BaseType can be null when Type is interface or object - member _.BaseType = x.BaseType |> ProvidedType.Create ctxt - member _.GetStaticParameters(provider: ITypeProvider) = provider.GetStaticParameters x |> ProvidedParameterInfo.CreateArray ctxt + member __.BaseType = x.BaseType |> ProvidedType.Create ctxt + member __.GetStaticParameters(provider: ITypeProvider) = provider.GetStaticParameters x |> ProvidedParameterInfo.CreateArray ctxt /// Type.GetElementType can be null if i.e. Type is not array\pointer\byref type - member _.GetElementType() = x.GetElementType() |> ProvidedType.Create ctxt - member _.GetGenericArguments() = x.GetGenericArguments() |> ProvidedType.CreateArray ctxt - member _.ApplyStaticArguments(provider: ITypeProvider, fullTypePathAfterArguments, staticArgs: obj[]) = + member __.GetElementType() = x.GetElementType() |> ProvidedType.Create ctxt + member __.GetGenericArguments() = x.GetGenericArguments() |> ProvidedType.CreateArray ctxt + member __.ApplyStaticArguments(provider: ITypeProvider, fullTypePathAfterArguments, staticArgs: obj[]) = provider.ApplyStaticArguments(x, fullTypePathAfterArguments, staticArgs) |> ProvidedType.Create ctxt - member _.IsVoid = (typeof.Equals x || (x.Namespace = "System" && x.Name = "Void")) - member _.IsGenericParameter = x.IsGenericParameter - member _.IsValueType = x.IsValueType - member _.IsByRef = x.IsByRef - member _.IsPointer = x.IsPointer - member _.IsPublic = x.IsPublic - member _.IsNestedPublic = x.IsNestedPublic - member _.IsEnum = x.IsEnum - member _.IsClass = x.IsClass - member _.IsMeasure = isMeasure.Value - member _.IsSealed = x.IsSealed - member _.IsAbstract = x.IsAbstract - member _.IsInterface = x.IsInterface - member _.GetArrayRank() = x.GetArrayRank() - member _.GenericParameterPosition = x.GenericParameterPosition - member _.RawSystemType = x + member __.IsVoid = (typeof.Equals x || (x.Namespace = "System" && x.Name = "Void")) + member __.IsGenericParameter = x.IsGenericParameter + member __.IsValueType = x.IsValueType + member __.IsByRef = x.IsByRef + member __.IsPointer = x.IsPointer + member __.IsPublic = x.IsPublic + member __.IsNestedPublic = x.IsNestedPublic + member __.IsEnum = x.IsEnum + member __.IsClass = x.IsClass + member __.IsMeasure = isMeasure.Value + member __.IsSealed = x.IsSealed + member __.IsAbstract = x.IsAbstract + member __.IsInterface = x.IsInterface + member __.GetArrayRank() = x.GetArrayRank() + member __.GenericParameterPosition = x.GenericParameterPosition + member __.RawSystemType = x /// Type.GetEnumUnderlyingType either returns type or raises exception, null is not permitted - member _.GetEnumUnderlyingType() = + member __.GetEnumUnderlyingType() = x.GetEnumUnderlyingType() |> ProvidedType.CreateWithNullCheck ctxt "EnumUnderlyingType" - member _.MakePointerType() = ProvidedType.CreateNoContext(x.MakePointerType()) - member _.MakeByRefType() = ProvidedType.CreateNoContext(x.MakeByRefType()) - member _.MakeArrayType() = ProvidedType.CreateNoContext(x.MakeArrayType()) - member _.MakeArrayType rank = ProvidedType.CreateNoContext(x.MakeArrayType(rank)) - member _.MakeGenericType (args: ProvidedType[]) = + member __.MakePointerType() = ProvidedType.CreateNoContext(x.MakePointerType()) + member __.MakeByRefType() = ProvidedType.CreateNoContext(x.MakeByRefType()) + member __.MakeArrayType() = ProvidedType.CreateNoContext(x.MakeArrayType()) + member __.MakeArrayType rank = ProvidedType.CreateNoContext(x.MakeArrayType(rank)) + member __.MakeGenericType (args: ProvidedType[]) = let argTypes = args |> Array.map (fun arg -> arg.RawSystemType) ProvidedType.CreateNoContext(x.MakeGenericType(argTypes)) - member _.AsProvidedVar name = ProvidedVar.Create ctxt (Quotations.Var(name, x)) + member __.AsProvidedVar name = ProvidedVar.Create ctxt (Quotations.Var(name, x)) static member Create ctxt x = match x with null -> null | t -> ProvidedType (t, ctxt) static member CreateWithNullCheck ctxt name x = match x with null -> nullArg name | t -> ProvidedType (t, ctxt) static member CreateArray ctxt xs = match xs with null -> null | _ -> xs |> Array.map (ProvidedType.Create ctxt) static member CreateNoContext (x: Type) = ProvidedType.Create ProvidedTypeContext.Empty x static member Void = ProvidedType.CreateNoContext typeof - member _.Handle = x - override _.Equals y = assert false; match y with :? ProvidedType as y -> x.Equals y.Handle | _ -> false - override _.GetHashCode() = assert false; x.GetHashCode() - member _.Context = ctxt + member __.Handle = x + override __.Equals y = assert false; match y with :? ProvidedType as y -> x.Equals y.Handle | _ -> false + override __.GetHashCode() = assert false; x.GetHashCode() + member __.Context = ctxt member this.TryGetILTypeRef() = this.Context.TryGetILTypeRef this member this.TryGetTyconRef() = this.Context.TryGetTyconRef this static member ApplyContext (pt: ProvidedType, ctxt) = ProvidedType(pt.Handle, ctxt) @@ -404,19 +401,19 @@ module internal ExtensionTyping = and [] IProvidedCustomAttributeProvider = - abstract GetDefinitionLocationAttribute: provider: ITypeProvider -> (string * int * int) option - abstract GetXmlDocAttributes: provider: ITypeProvider -> string[] - abstract GetHasTypeProviderEditorHideMethodsAttribute: provider: ITypeProvider -> bool + abstract GetDefinitionLocationAttribute : provider: ITypeProvider -> (string * int * int) option + abstract GetXmlDocAttributes : provider: ITypeProvider -> string[] + abstract GetHasTypeProviderEditorHideMethodsAttribute : provider: ITypeProvider -> bool abstract GetAttributeConstructorArgs: provider: ITypeProvider * attribName: string -> (obj option list * (string * obj option) list) option and ProvidedCustomAttributeProvider = - static member Create (attributes :(ITypeProvider -> seq)): IProvidedCustomAttributeProvider = + static member Create (attributes :(ITypeProvider -> seq)) : IProvidedCustomAttributeProvider = let (|Member|_|) (s: string) (x: CustomAttributeNamedArgument) = if x.MemberName = s then Some x.TypedValue else None let (|Arg|_|) (x: CustomAttributeTypedArgument) = match x.Value with null -> None | v -> Some v let findAttribByName tyFullName (a: CustomAttributeData) = (a.Constructor.DeclaringType.FullName = tyFullName) let findAttrib (ty: System.Type) a = findAttribByName ty.FullName a { new IProvidedCustomAttributeProvider with - member _.GetAttributeConstructorArgs (provider, attribName) = + member __.GetAttributeConstructorArgs (provider, attribName) = attributes provider |> Seq.tryFind (findAttribByName attribName) |> Option.map (fun a -> @@ -430,11 +427,11 @@ module internal ExtensionTyping = |> List.map (fun arg -> arg.MemberName, match arg.TypedValue with Arg null -> None | Arg obj -> Some obj | _ -> None) ctorArgs, namedArgs) - member _.GetHasTypeProviderEditorHideMethodsAttribute provider = + member __.GetHasTypeProviderEditorHideMethodsAttribute provider = attributes provider |> Seq.exists (findAttrib typeof) - member _.GetDefinitionLocationAttribute provider = + member __.GetDefinitionLocationAttribute provider = attributes provider |> Seq.tryFind (findAttrib typeof) |> Option.map (fun a -> @@ -442,7 +439,7 @@ module internal ExtensionTyping = defaultArg (a.NamedArguments |> Seq.tryPick (function Member "Line" (Arg (:? int as v)) -> Some v | _ -> None)) 0, defaultArg (a.NamedArguments |> Seq.tryPick (function Member "Column" (Arg (:? int as v)) -> Some v | _ -> None)) 0)) - member _.GetXmlDocAttributes provider = + member __.GetXmlDocAttributes provider = attributes provider |> Seq.choose (fun a -> if findAttrib typeof a then @@ -456,71 +453,71 @@ module internal ExtensionTyping = and [] ProvidedMemberInfo (x: System.Reflection.MemberInfo, ctxt) = let provide () = ProvidedCustomAttributeProvider.Create (fun _provider -> x.CustomAttributes) - member _.Name = x.Name + member __.Name = x.Name /// DeclaringType can be null if MemberInfo belongs to Module, not to Type - member _.DeclaringType = ProvidedType.Create ctxt x.DeclaringType + member __.DeclaringType = ProvidedType.Create ctxt x.DeclaringType interface IProvidedCustomAttributeProvider with - member _.GetHasTypeProviderEditorHideMethodsAttribute provider = provide().GetHasTypeProviderEditorHideMethodsAttribute provider - member _.GetDefinitionLocationAttribute provider = provide().GetDefinitionLocationAttribute provider - member _.GetXmlDocAttributes provider = provide().GetXmlDocAttributes provider - member _.GetAttributeConstructorArgs (provider, attribName) = provide().GetAttributeConstructorArgs (provider, attribName) + member __.GetHasTypeProviderEditorHideMethodsAttribute provider = provide().GetHasTypeProviderEditorHideMethodsAttribute provider + member __.GetDefinitionLocationAttribute provider = provide().GetDefinitionLocationAttribute provider + member __.GetXmlDocAttributes provider = provide().GetXmlDocAttributes provider + member __.GetAttributeConstructorArgs (provider, attribName) = provide().GetAttributeConstructorArgs (provider, attribName) and [] ProvidedParameterInfo (x: System.Reflection.ParameterInfo, ctxt) = let provide () = ProvidedCustomAttributeProvider.Create (fun _provider -> x.CustomAttributes) - member _.Name = x.Name - member _.IsOut = x.IsOut - member _.IsIn = x.IsIn - member _.IsOptional = x.IsOptional - member _.RawDefaultValue = x.RawDefaultValue - member _.HasDefaultValue = x.Attributes.HasFlag(System.Reflection.ParameterAttributes.HasDefault) + member __.Name = x.Name + member __.IsOut = x.IsOut + member __.IsIn = x.IsIn + member __.IsOptional = x.IsOptional + member __.RawDefaultValue = x.RawDefaultValue + member __.HasDefaultValue = x.Attributes.HasFlag(System.Reflection.ParameterAttributes.HasDefault) /// ParameterInfo.ParameterType cannot be null - member _.ParameterType = ProvidedType.CreateWithNullCheck ctxt "ParameterType" x.ParameterType + member __.ParameterType = ProvidedType.CreateWithNullCheck ctxt "ParameterType" x.ParameterType static member Create ctxt x = match x with null -> null | t -> ProvidedParameterInfo (t, ctxt) static member CreateArray ctxt xs = match xs with null -> null | _ -> xs |> Array.map (ProvidedParameterInfo.Create ctxt) // TODO null wrong? interface IProvidedCustomAttributeProvider with - member _.GetHasTypeProviderEditorHideMethodsAttribute provider = provide().GetHasTypeProviderEditorHideMethodsAttribute provider - member _.GetDefinitionLocationAttribute provider = provide().GetDefinitionLocationAttribute provider - member _.GetXmlDocAttributes provider = provide().GetXmlDocAttributes provider - member _.GetAttributeConstructorArgs (provider, attribName) = provide().GetAttributeConstructorArgs (provider, attribName) - member _.Handle = x - override _.Equals y = assert false; match y with :? ProvidedParameterInfo as y -> x.Equals y.Handle | _ -> false - override _.GetHashCode() = assert false; x.GetHashCode() + member __.GetHasTypeProviderEditorHideMethodsAttribute provider = provide().GetHasTypeProviderEditorHideMethodsAttribute provider + member __.GetDefinitionLocationAttribute provider = provide().GetDefinitionLocationAttribute provider + member __.GetXmlDocAttributes provider = provide().GetXmlDocAttributes provider + member __.GetAttributeConstructorArgs (provider, attribName) = provide().GetAttributeConstructorArgs (provider, attribName) + member __.Handle = x + override __.Equals y = assert false; match y with :? ProvidedParameterInfo as y -> x.Equals y.Handle | _ -> false + override __.GetHashCode() = assert false; x.GetHashCode() and [] ProvidedAssembly (x: System.Reflection.Assembly) = - member _.GetName() = x.GetName() - member _.FullName = x.FullName - member _.GetManifestModuleContents(provider: ITypeProvider) = provider.GetGeneratedAssemblyContents x + member __.GetName() = x.GetName() + member __.FullName = x.FullName + member __.GetManifestModuleContents(provider: ITypeProvider) = provider.GetGeneratedAssemblyContents x static member Create (x: System.Reflection.Assembly) = match x with null -> null | t -> ProvidedAssembly (t) - member _.Handle = x - override _.Equals y = assert false; match y with :? ProvidedAssembly as y -> x.Equals y.Handle | _ -> false - override _.GetHashCode() = assert false; x.GetHashCode() + member __.Handle = x + override __.Equals y = assert false; match y with :? ProvidedAssembly as y -> x.Equals y.Handle | _ -> false + override __.GetHashCode() = assert false; x.GetHashCode() and [] ProvidedMethodBase (x: System.Reflection.MethodBase, ctxt) = inherit ProvidedMemberInfo(x, ctxt) - member _.Context = ctxt - member _.IsGenericMethod = x.IsGenericMethod - member _.IsStatic = x.IsStatic - member _.IsFamily = x.IsFamily - member _.IsFamilyOrAssembly = x.IsFamilyOrAssembly - member _.IsFamilyAndAssembly = x.IsFamilyAndAssembly - member _.IsVirtual = x.IsVirtual - member _.IsFinal = x.IsFinal - member _.IsPublic = x.IsPublic - member _.IsAbstract = x.IsAbstract - member _.IsHideBySig = x.IsHideBySig - member _.IsConstructor = x.IsConstructor - member _.GetParameters() = x.GetParameters() |> ProvidedParameterInfo.CreateArray ctxt - member _.GetGenericArguments() = x.GetGenericArguments() |> ProvidedType.CreateArray ctxt - member _.Handle = x + member __.Context = ctxt + member __.IsGenericMethod = x.IsGenericMethod + member __.IsStatic = x.IsStatic + member __.IsFamily = x.IsFamily + member __.IsFamilyOrAssembly = x.IsFamilyOrAssembly + member __.IsFamilyAndAssembly = x.IsFamilyAndAssembly + member __.IsVirtual = x.IsVirtual + member __.IsFinal = x.IsFinal + member __.IsPublic = x.IsPublic + member __.IsAbstract = x.IsAbstract + member __.IsHideBySig = x.IsHideBySig + member __.IsConstructor = x.IsConstructor + member __.GetParameters() = x.GetParameters() |> ProvidedParameterInfo.CreateArray ctxt + member __.GetGenericArguments() = x.GetGenericArguments() |> ProvidedType.CreateArray ctxt + member __.Handle = x static member TaintedGetHashCode (x: Tainted) = Tainted.GetHashCodeTainted (x.PApplyNoFailure(fun st -> (st.Name, st.DeclaringType.Assembly.FullName, st.DeclaringType.FullName))) static member TaintedEquals (pt1: Tainted, pt2: Tainted) = Tainted.EqTainted (pt1.PApplyNoFailure(fun st -> st.Handle)) (pt2.PApplyNoFailure(fun st -> st.Handle)) - member _.GetStaticParametersForMethod(provider: ITypeProvider) = + member __.GetStaticParametersForMethod(provider: ITypeProvider) = let bindingFlags = BindingFlags.Instance ||| BindingFlags.NonPublic ||| BindingFlags.Public let staticParams = @@ -541,7 +538,7 @@ module internal ExtensionTyping = staticParams |> ProvidedParameterInfo.CreateArray ctxt - member _.ApplyStaticArgumentsForMethod(provider: ITypeProvider, fullNameAfterArguments: string, staticArgs: obj[]) = + member __.ApplyStaticArgumentsForMethod(provider: ITypeProvider, fullNameAfterArguments: string, staticArgs: obj[]) = let bindingFlags = BindingFlags.Instance ||| BindingFlags.Public ||| BindingFlags.InvokeMethod let mb = @@ -566,8 +563,8 @@ module internal ExtensionTyping = | :? System.Reflection.MethodBase as mb -> mb | _ -> failwith (FSComp.SR.estApplyStaticArgumentsForMethodNotImplemented()) match mb with - | :? System.Reflection.MethodInfo as mi -> (mi |> ProvidedMethodInfo.Create ctxt: ProvidedMethodInfo) :> ProvidedMethodBase - | :? System.Reflection.ConstructorInfo as ci -> (ci |> ProvidedConstructorInfo.Create ctxt: ProvidedConstructorInfo) :> ProvidedMethodBase + | :? System.Reflection.MethodInfo as mi -> (mi |> ProvidedMethodInfo.Create ctxt : ProvidedMethodInfo) :> ProvidedMethodBase + | :? System.Reflection.ConstructorInfo as ci -> (ci |> ProvidedConstructorInfo.Create ctxt : ProvidedConstructorInfo) :> ProvidedMethodBase | _ -> failwith (FSComp.SR.estApplyStaticArgumentsForMethodNotImplemented()) @@ -576,21 +573,21 @@ module internal ExtensionTyping = inherit ProvidedMemberInfo(x, ctxt) static member Create ctxt x = match x with null -> null | t -> ProvidedFieldInfo (t, ctxt) static member CreateArray ctxt xs = match xs with null -> null | _ -> xs |> Array.map (ProvidedFieldInfo.Create ctxt) - member _.IsInitOnly = x.IsInitOnly - member _.IsStatic = x.IsStatic - member _.IsSpecialName = x.IsSpecialName - member _.IsLiteral = x.IsLiteral - member _.GetRawConstantValue() = x.GetRawConstantValue() + member __.IsInitOnly = x.IsInitOnly + member __.IsStatic = x.IsStatic + member __.IsSpecialName = x.IsSpecialName + member __.IsLiteral = x.IsLiteral + member __.GetRawConstantValue() = x.GetRawConstantValue() /// FieldInfo.FieldType cannot be null - member _.FieldType = x.FieldType |> ProvidedType.CreateWithNullCheck ctxt "FieldType" - member _.Handle = x - member _.IsPublic = x.IsPublic - member _.IsFamily = x.IsFamily - member _.IsPrivate = x.IsPrivate - member _.IsFamilyOrAssembly = x.IsFamilyOrAssembly - member _.IsFamilyAndAssembly = x.IsFamilyAndAssembly - override _.Equals y = assert false; match y with :? ProvidedFieldInfo as y -> x.Equals y.Handle | _ -> false - override _.GetHashCode() = assert false; x.GetHashCode() + member __.FieldType = x.FieldType |> ProvidedType.CreateWithNullCheck ctxt "FieldType" + member __.Handle = x + member __.IsPublic = x.IsPublic + member __.IsFamily = x.IsFamily + member __.IsPrivate = x.IsPrivate + member __.IsFamilyOrAssembly = x.IsFamilyOrAssembly + member __.IsFamilyAndAssembly = x.IsFamilyAndAssembly + override __.Equals y = assert false; match y with :? ProvidedFieldInfo as y -> x.Equals y.Handle | _ -> false + override __.GetHashCode() = assert false; x.GetHashCode() static member TaintedEquals (pt1: Tainted, pt2: Tainted) = Tainted.EqTainted (pt1.PApplyNoFailure(fun st -> st.Handle)) (pt2.PApplyNoFailure(fun st -> st.Handle)) @@ -600,31 +597,31 @@ module internal ExtensionTyping = ProvidedMethodInfo (x: System.Reflection.MethodInfo, ctxt) = inherit ProvidedMethodBase(x, ctxt) - member _.ReturnType = x.ReturnType |> ProvidedType.CreateWithNullCheck ctxt "ReturnType" + member __.ReturnType = x.ReturnType |> ProvidedType.CreateWithNullCheck ctxt "ReturnType" static member Create ctxt x = match x with null -> null | t -> ProvidedMethodInfo (t, ctxt) static member CreateArray ctxt xs = match xs with null -> null | _ -> xs |> Array.map (ProvidedMethodInfo.Create ctxt) - member _.Handle = x - member _.MetadataToken = x.MetadataToken - override _.Equals y = assert false; match y with :? ProvidedMethodInfo as y -> x.Equals y.Handle | _ -> false - override _.GetHashCode() = assert false; x.GetHashCode() + member __.Handle = x + member __.MetadataToken = x.MetadataToken + override __.Equals y = assert false; match y with :? ProvidedMethodInfo as y -> x.Equals y.Handle | _ -> false + override __.GetHashCode() = assert false; x.GetHashCode() and [] ProvidedPropertyInfo (x: System.Reflection.PropertyInfo, ctxt) = inherit ProvidedMemberInfo(x, ctxt) - member _.GetGetMethod() = x.GetGetMethod() |> ProvidedMethodInfo.Create ctxt - member _.GetSetMethod() = x.GetSetMethod() |> ProvidedMethodInfo.Create ctxt - member _.CanRead = x.CanRead - member _.CanWrite = x.CanWrite - member _.GetIndexParameters() = x.GetIndexParameters() |> ProvidedParameterInfo.CreateArray ctxt + member __.GetGetMethod() = x.GetGetMethod() |> ProvidedMethodInfo.Create ctxt + member __.GetSetMethod() = x.GetSetMethod() |> ProvidedMethodInfo.Create ctxt + member __.CanRead = x.CanRead + member __.CanWrite = x.CanWrite + member __.GetIndexParameters() = x.GetIndexParameters() |> ProvidedParameterInfo.CreateArray ctxt /// PropertyInfo.PropertyType cannot be null - member _.PropertyType = x.PropertyType |> ProvidedType.CreateWithNullCheck ctxt "PropertyType" + member __.PropertyType = x.PropertyType |> ProvidedType.CreateWithNullCheck ctxt "PropertyType" static member Create ctxt x = match x with null -> null | t -> ProvidedPropertyInfo (t, ctxt) static member CreateArray ctxt xs = match xs with null -> null | _ -> xs |> Array.map (ProvidedPropertyInfo.Create ctxt) - member _.Handle = x - override _.Equals y = assert false; match y with :? ProvidedPropertyInfo as y -> x.Equals y.Handle | _ -> false - override _.GetHashCode() = assert false; x.GetHashCode() + member __.Handle = x + override __.Equals y = assert false; match y with :? ProvidedPropertyInfo as y -> x.Equals y.Handle | _ -> false + override __.GetHashCode() = assert false; x.GetHashCode() static member TaintedGetHashCode (x: Tainted) = Tainted.GetHashCodeTainted (x.PApplyNoFailure(fun st -> (st.Name, st.DeclaringType.Assembly.FullName, st.DeclaringType.FullName))) static member TaintedEquals (pt1: Tainted, pt2: Tainted) = @@ -633,15 +630,15 @@ module internal ExtensionTyping = and [] ProvidedEventInfo (x: System.Reflection.EventInfo, ctxt) = inherit ProvidedMemberInfo(x, ctxt) - member _.GetAddMethod() = x.GetAddMethod() |> ProvidedMethodInfo.Create ctxt - member _.GetRemoveMethod() = x.GetRemoveMethod() |> ProvidedMethodInfo.Create ctxt + member __.GetAddMethod() = x.GetAddMethod() |> ProvidedMethodInfo.Create ctxt + member __.GetRemoveMethod() = x.GetRemoveMethod() |> ProvidedMethodInfo.Create ctxt /// EventInfo.EventHandlerType cannot be null - member _.EventHandlerType = x.EventHandlerType |> ProvidedType.CreateWithNullCheck ctxt "EventHandlerType" + member __.EventHandlerType = x.EventHandlerType |> ProvidedType.CreateWithNullCheck ctxt "EventHandlerType" static member Create ctxt x = match x with null -> null | t -> ProvidedEventInfo (t, ctxt) static member CreateArray ctxt xs = match xs with null -> null | _ -> xs |> Array.map (ProvidedEventInfo.Create ctxt) - member _.Handle = x - override _.Equals y = assert false; match y with :? ProvidedEventInfo as y -> x.Equals y.Handle | _ -> false - override _.GetHashCode() = assert false; x.GetHashCode() + member __.Handle = x + override __.Equals y = assert false; match y with :? ProvidedEventInfo as y -> x.Equals y.Handle | _ -> false + override __.GetHashCode() = assert false; x.GetHashCode() static member TaintedGetHashCode (x: Tainted) = Tainted.GetHashCodeTainted (x.PApplyNoFailure(fun st -> (st.Name, st.DeclaringType.Assembly.FullName, st.DeclaringType.FullName))) static member TaintedEquals (pt1: Tainted, pt2: Tainted) = @@ -652,9 +649,9 @@ module internal ExtensionTyping = inherit ProvidedMethodBase(x, ctxt) static member Create ctxt x = match x with null -> null | t -> ProvidedConstructorInfo (t, ctxt) static member CreateArray ctxt xs = match xs with null -> null | _ -> xs |> Array.map (ProvidedConstructorInfo.Create ctxt) - member _.Handle = x - override _.Equals y = assert false; match y with :? ProvidedConstructorInfo as y -> x.Equals y.Handle | _ -> false - override _.GetHashCode() = assert false; x.GetHashCode() + member __.Handle = x + override __.Equals y = assert false; match y with :? ProvidedConstructorInfo as y -> x.Equals y.Handle | _ -> false + override __.GetHashCode() = assert false; x.GetHashCode() and ProvidedExprType = | ProvidedNewArrayExpr of ProvidedType * ProvidedExpr[] @@ -683,11 +680,11 @@ module internal ExtensionTyping = and [] ProvidedExpr (x: Quotations.Expr, ctxt) = - member _.Type = x.Type |> ProvidedType.Create ctxt - member _.Handle = x - member _.Context = ctxt - member _.UnderlyingExpressionString = x.ToString() - member _.GetExprType() = + member __.Type = x.Type |> ProvidedType.Create ctxt + member __.Handle = x + member __.Context = ctxt + member __.UnderlyingExpressionString = x.ToString() + member __.GetExprType() = match x with | Quotations.Patterns.NewObject(ctor, args) -> Some (ProvidedNewObjectExpr (ProvidedConstructorInfo.Create ctxt ctor, [| for a in args -> ProvidedExpr.Create ctxt a |])) @@ -736,20 +733,20 @@ module internal ExtensionTyping = | _ -> None static member Create ctxt t = match box t with null -> null | _ -> ProvidedExpr (t, ctxt) static member CreateArray ctxt xs = match xs with null -> null | _ -> xs |> Array.map (ProvidedExpr.Create ctxt) - override _.Equals y = match y with :? ProvidedExpr as y -> x.Equals y.Handle | _ -> false - override _.GetHashCode() = x.GetHashCode() + override __.Equals y = match y with :? ProvidedExpr as y -> x.Equals y.Handle | _ -> false + override __.GetHashCode() = x.GetHashCode() and [] ProvidedVar (x: Quotations.Var, ctxt) = - member _.Type = x.Type |> ProvidedType.Create ctxt - member _.Name = x.Name - member _.IsMutable = x.IsMutable - member _.Handle = x - member _.Context = ctxt + member __.Type = x.Type |> ProvidedType.Create ctxt + member __.Name = x.Name + member __.IsMutable = x.IsMutable + member __.Handle = x + member __.Context = ctxt static member Create ctxt t = match box t with null -> null | _ -> ProvidedVar (t, ctxt) static member CreateArray ctxt xs = match xs with null -> null | _ -> xs |> Array.map (ProvidedVar.Create ctxt) - override _.Equals y = match y with :? ProvidedVar as y -> x.Equals y.Handle | _ -> false - override _.GetHashCode() = x.GetHashCode() + override __.Equals y = match y with :? ProvidedVar as y -> x.Equals y.Handle | _ -> false + override __.GetHashCode() = x.GetHashCode() /// Get the provided invoker expression for a particular use of a method. let GetInvokerExpression (provider: ITypeProvider, methodBase: ProvidedMethodBase, paramExprs: ProvidedVar[]) = @@ -777,7 +774,7 @@ module internal ExtensionTyping = /// Verify that a provided type has the expected name - let ValidateExpectedName m expectedPath expectedName (st: Tainted) = + let ValidateExpectedName m expectedPath expectedName (st : Tainted) = let name = CheckAndComputeProvidedNameProperty(m, st, (fun st -> st.Name), "Name") if name <> expectedName then raise (TypeProviderError(FSComp.SR.etProvidedTypeHasUnexpectedName(expectedName, name), st.TypeProviderDesignation, m)) @@ -799,7 +796,7 @@ module internal ExtensionTyping = errorR(Error(FSComp.SR.etProvidedTypeHasUnexpectedPath(expectedPath, path), m)) /// Eagerly validate a range of conditions on a provided type, after static instantiation (if any) has occurred - let ValidateProvidedTypeAfterStaticInstantiation(m, st: Tainted, expectedPath: string[], expectedName: string) = + let ValidateProvidedTypeAfterStaticInstantiation(m, st: Tainted, expectedPath : string[], expectedName : string) = // Do all the calling into st up front with recovery let fullName, namespaceName, usedMembers = let name = CheckAndComputeProvidedNameProperty(m, st, (fun st -> st.Name), "Name") @@ -807,7 +804,7 @@ module internal ExtensionTyping = let fullName = TryTypeMemberNonNull(st, name, "FullName", m, FSComp.SR.invalidFullNameForProvidedType(), fun st -> st.FullName) |> unmarshal ValidateExpectedName m expectedPath expectedName st // Must be able to call (GetMethods|GetEvents|GetProperties|GetNestedTypes|GetConstructors)(bindingFlags). - let usedMembers: Tainted[] = + let usedMembers : Tainted[] = // These are the members the compiler will actually use [| for x in TryTypeMemberArray(st, fullName, "GetMethods", m, fun st -> st.GetMethods()) -> x.Coerce m for x in TryTypeMemberArray(st, fullName, "GetEvents", m, fun st -> st.GetEvents()) -> x.Coerce m @@ -904,7 +901,7 @@ module internal ExtensionTyping = | None -> errorR(Error(FSComp.SR.etUnsupportedMemberKind(memberName, fullName), m)) - let ValidateProvidedTypeDefinition(m, st: Tainted, expectedPath: string[], expectedName: string) = + let ValidateProvidedTypeDefinition(m, st: Tainted, expectedPath : string[], expectedName : string) = // Validate the Name, Namespace and FullName properties let name = CheckAndComputeProvidedNameProperty(m, st, (fun st -> st.Name), "Name") diff --git a/src/fsharp/ExtensionTyping.fsi b/src/fsharp/ExtensionTyping.fsi index 311d7959982..8719c09ce67 100755 --- a/src/fsharp/ExtensionTyping.fsi +++ b/src/fsharp/ExtensionTyping.fsi @@ -6,14 +6,16 @@ namespace FSharp.Compiler #if !NO_EXTENSIONTYPING -open System -open System.Collections.Generic -open FSharp.Core.CompilerServices -open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.Text - module internal ExtensionTyping = + open System + open System.IO + open System.Collections.Generic + open Microsoft.FSharp.Core.CompilerServices + open FSharp.Compiler.AbstractIL.IL + open FSharp.Compiler.AbstractIL.Internal.Library + open FSharp.Compiler.Range + type TypeProviderDesignation = TypeProviderDesignation of string /// Raised when a type provider has thrown an exception. diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index f3fd98c6d50..dd5488d7edc 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -482,7 +482,7 @@ tcUnexpectedConstUint16Array,"Unexpected Const_uint16array" tcUnexpectedConstByteArray,"Unexpected Const_bytearray" 640,tcParameterRequiresName,"A parameter with attributes must also be given a name, e.g. '[] Name : Type'" 641,tcReturnValuesCannotHaveNames,"Return values cannot have names" -tcMemberKindPropertyGetSetNotExpected,"SynMemberKind.PropertyGetSet only expected in parse trees" +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 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" @@ -851,10 +851,8 @@ optsPlatform,"Limit which platforms this code can run on: x86, Itanium, x64, any optsNoOpt,"Only include optimization information essential for implementing inlined constructs. Inhibits cross-module inlining but improves binary compatibility." optsNoInterface,"Don't add a resource to the generated assembly containing F#-specific metadata" optsSig,"Print the inferred interface of the assembly to a file" -optsAllSigs,"Print the inferred interfaces of all compilation files to associated signature files" optsReference,"Reference an assembly (Short form: -r)" optsCompilerTool,"Reference an assembly or directory containing a design time tool (Short form: -t)" -optsWin32icon,"Specify a Win32 icon file (.ico)" optsWin32res,"Specify a Win32 resource file (.res)" optsWin32manifest,"Specify a Win32 manifest file" optsNowin32manifest,"Do not include the default Win32 manifest" @@ -1230,9 +1228,6 @@ invalidFullNameForProvidedType,"invalid full name for provided type" 3087,tcCustomOperationMayNotBeOverloaded,"The custom operation '%s' refers to a method which is overloaded. The implementations of custom operations may not be overloaded." featureOverloadsForCustomOperations,"overloads for custom operations" featureExpandedMeasurables,"more types support units of measure" -featurePrintfBinaryFormat,"binary formatting for integers" -featureDiscardUseValue,"discard pattern in use binding" -featureNonVariablePatternsToRightOfAsPatterns,"non-variable patterns to the right of 'as' patterns" 3090,tcIfThenElseMayNotBeUsedWithinQueries,"An if/then/else expression may not be used within queries. Consider using either an if/then expression, or use a sequence expression instead." 3091,ilxgenUnexpectedArgumentToMethodHandleOfDuringCodegen,"Invalid argument to 'methodhandleof' during codegen" 3092,etProvidedTypeReferenceMissingArgument,"A reference to a provided type was missing a value for the static parameter '%s'. You may need to recompile one or more referenced assemblies." @@ -1526,7 +1521,6 @@ featureNullableOptionalInterop,"nullable optional interop" featureDefaultInterfaceMemberConsumption,"default interface member consumption" featureStringInterpolation,"string interpolation" featureWitnessPassing,"witness passing for trait constraints in F# quotations" -featureStructActivePattern,"struct representation for active patterns" 3353,fsiInvalidDirective,"Invalid directive '#%s %s'" 3360,typrelInterfaceWithConcreteAndVariable,"'%s' cannot implement the interface '%s' with the two instantiations '%s' and '%s' because they may unify." 3361,typrelInterfaceWithConcreteAndVariableObjectExpression,"You cannot implement the interface '%s' with the two instantiations '%s' and '%s' because they may unify." @@ -1549,10 +1543,6 @@ forFormatInvalidForInterpolated4,"Interpolated strings used as type IFormattable 3381,parsEofInInterpolatedTripleQuoteString,"Incomplete interpolated triple-quote string begun at or before here" 3382,parsEmptyFillInInterpolatedString,"Invalid interpolated string. This interpolated string expression fill is empty, an expression was expected." 3383,lexRBraceInInterpolatedString,"A '}}' character must be escaped (by doubling) in an interpolated string." -3384,scriptSdkNotDetermined,"The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '%s --version' in the directory '%s' was: '%s' and the exit code was '%d'." -3384,scriptSdkNotDeterminedUnexpected,"The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '%s'." -3384,scriptSdkNotDeterminedNoHost,"The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed." -3385,tcInvalidStructReturn,"The use of '[]' on values, functions and methods is only allowed on partial active pattern definitions" #3501 "This construct is not supported by your version of the F# compiler" CompilerMessage(ExperimentalAttributeMessages.NotSupportedYet, 3501, IsError=true) 3390,xmlDocBadlyFormed,"This XML comment is invalid: '%s'" 3390,xmlDocMissingParameterName,"This XML comment is invalid: missing 'name' attribute for parameter or parameter reference" @@ -1560,7 +1550,4 @@ forFormatInvalidForInterpolated4,"Interpolated strings used as type IFormattable 3390,xmlDocInvalidParameterName,"This XML comment is invalid: unknown parameter '%s'" 3390,xmlDocDuplicateParameter,"This XML comment is invalid: multiple documentation entries for parameter '%s'" 3390,xmlDocUnresolvedCrossReference,"This XML comment is invalid: unresolved cross-reference '%s'" -3390,xmlDocMissingParameter,"This XML comment is incomplete: no documentation for parameter '%s'" -3391,tcLiteralAttributeCannotUseActivePattern,"A [] declaration cannot use an active pattern for its identifier" -3392,containerDeprecated,"The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead." -3393,containerSigningUnsupportedOnThisPlatform,"Key container signing is not supported on this platform." \ No newline at end of file +3390,xmlDocMissingParameter,"This XML comment is incomplete: no documentation for parameter '%s'" \ No newline at end of file diff --git a/src/fsharp/FSharp.Build/FSharp.Build.fsproj b/src/fsharp/FSharp.Build/FSharp.Build.fsproj index 72a843adc8b..3d36804a7a8 100644 --- a/src/fsharp/FSharp.Build/FSharp.Build.fsproj +++ b/src/fsharp/FSharp.Build/FSharp.Build.fsproj @@ -10,6 +10,7 @@ $(NoWarn);45;55;62;75;1204 true $(OtherFlags) --maxerrors:20 --extraoptimizationloops:1 + true $(DefineConstants);LOCALIZATION_FSBUILD NU1701;FS0075 true @@ -49,6 +50,7 @@ + diff --git a/src/fsharp/FSharp.Build/FSharpEmbedResourceText.fs b/src/fsharp/FSharp.Build/FSharpEmbedResourceText.fs index 1a8efbe5b66..3428d60ad8f 100644 --- a/src/fsharp/FSharp.Build/FSharpEmbedResourceText.fs +++ b/src/fsharp/FSharp.Build/FSharpEmbedResourceText.fs @@ -29,7 +29,7 @@ type FSharpEmbedResourceText() = let xmlBoilerPlateString = @" + + + + Library + net472;netstandard2.0 + netstandard2.0 + FSharp.Compiler.Private + $(NoWarn);45;55;62;75;1204 + true + $(DefineConstants);COMPILER + $(DefineConstants);LOCALIZATION_FCOMP + $(OtherFlags) --warnon:3218 --warnon:1182 /warnon:3390 --maxerrors:20 --extraoptimizationloops:1 + true + + + + $(IntermediateOutputPath)$(TargetFramework)\ + $(IntermediateOutputPath)$(TargetFramework)\ + + + + + $(BaseOutputPath)\$(Configuration)\$(TargetFramework) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FSComp.txt + + + FSStrings.resx + + + ErrorText\sformat.fsi + + + ErrorText\sformat.fs + + + ErrorText\sr.fsi + + + ErrorText\sr.fs + + + Facilities\Logger.fsi + + + Facilities\Logger.fs + + + Facilities\LanguageFeatures.fsi + + + Facilities\LanguageFeatures.fs + + + LexYaccRuntime\prim-lexing.fsi + + + LexYaccRuntime\prim-lexing.fs + + + LexYaccRuntime\prim-parsing.fsi + + + LexYaccRuntime\prim-parsing.fs + + + Utilities\ResizeArray.fsi + + + Utilities\ResizeArray.fs + + + Utilities\HashMultiMap.fsi + + + Utilities\HashMultiMap.fs + + + Utilities\EditDistance.fsi + + + Utilities\EditDistance.fs + + + Utilities\TaggedCollections.fsi + + + Utilities\TaggedCollections.fs + + + Utilities\ildiag.fsi + + + Utilities\ildiag.fs + + + Utilities\illib.fsi + + + Utilities\illib.fs + + + Utilities\filename.fsi + + + Utilities\filename.fs + + + Utilities\zmap.fsi + + + Utilities\zmap.fs + + + Utilities\zset.fsi + + + Utilities\zset.fs + + + Utilities\bytes.fsi + + + Utilities\bytes.fs + + + Utilities\XmlAdapters.fsi + + + Utilities\XmlAdapters.fs + + + Utilities\InternalCollections.fsi + + + Utilities\InternalCollections.fs + + + Utilities\QueueList.fsi + + + Utilities\QueueList.fs + + + Utilities\lib.fsi + + + Utilities\lib.fs + + + Utilities\rational.fsi + + + Utilities\rational.fs + + + Utilities\PathMap.fsi + + + Utilities\PathMap.fs + + + ErrorLogging\range.fsi + + + ErrorLogging\range.fs + + + ErrorLogging\ErrorLogger.fsi + + + ErrorLogging\ErrorLogger.fs + + + ErrorLogging\ErrorResolutionHints.fsi + + + ErrorLogging\ErrorResolutionHints.fs + + + --unicode --lexlib Internal.Utilities.Text.Lexing + AbsIL\illex.fsl + + + AbsIL\FsLex\illex.fsl + + + --module FSharp.Compiler.AbstractIL.Internal.AsciiParser --open FSharp.Compiler.AbstractIL --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing + AbsIL\ilpars.fsy + + + AbsIL\FsYacc\ilpars.fsy + + + AbsIL\il.fsi + + + AbsIL\il.fs + + + AbsIL\ilx.fsi + + + AbsIL\ilx.fs + + + AbsIL\ilascii.fsi + + + AbsIL\ilascii.fs + + + AbsIL\FsYaccOut\ilpars.fs + + + AbsIL\FsLexOut\illex.fs + + + AbsIL\ilprint.fsi + + + AbsIL\ilprint.fs + + + AbsIL\ilmorph.fsi + + + AbsIL\ilmorph.fs + + + AbsIL\ilsign.fsi + + + AbsIL\ilsign.fs + + + AbsIL\ilnativeres.fsi + + + AbsIL\ilnativeres.fs + + + AbsIL\ilsupp.fsi + + + AbsIL\ilsupp.fs + + + AbsIL\ilbinary.fsi + + + AbsIL\ilbinary.fs + + + AbsIL\ilread.fsi + + + AbsIL\ilread.fs + + + AbsIL\ilwritepdb.fsi + + + AbsIL\ilwritepdb.fs + + + AbsIL\ilwrite.fsi + + + AbsIL\ilwrite.fs + + + AbsIL\ilreflect.fsi + + + AbsIL\ilreflect.fs + + + ReferenceResolution\ReferenceResolver.fsi + + + ReferenceResolution\ReferenceResolver.fs + + + + ReferenceResolution/LegacyMSBuildReferenceResolver.fsi + + + ReferenceResolution/LegacyMSBuildReferenceResolver.fs + + + + ReferenceResolution/SimulatedMSBuildReferenceResolver.fsi + + + ReferenceResolution/SimulatedMSBuildReferenceResolver.fs + + + + CompilerLocation\CompilerLocationUtils.fsi + + + CompilerLocation\CompilerLocationUtils.fs + + + PrettyNaming\PrettyNaming.fsi + + + PrettyNaming\PrettyNaming.fs + + + ILXErase\ilxsettings.fs + + + ILXErase\EraseClosures.fsi + + + ILXErase\EraseClosures.fs + + + ILXErase\EraseUnions.fsi + + + ILXErase\EraseUnions.fs + + + --unicode --lexlib Internal.Utilities.Text.Lexing + ParserAndUntypedAST\pplex.fsl + + + --module FSharp.Compiler.PPParser --open FSharp.Compiler --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing + ParserAndUntypedAST\pppars.fsy + + + --unicode --lexlib Internal.Utilities.Text.Lexing + ParserAndUntypedAST\lex.fsl + + + --module FSharp.Compiler.Parser --open FSharp.Compiler --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing + ParserAndUntypedAST\pars.fsy + + + ParserAndUntypedAST\FsLex\pplex.fsl + + + ParserAndUntypedAST\FsLex\lex.fsl + + + ParserAndUntypedAST\FsYacc\pppars.fsy + + + ParserAndUntypedAST\FsYacc\pars.fsy + + + ParserAndUntypedAST\UnicodeLexing.fsi + + + ParserAndUntypedAST\UnicodeLexing.fs + + + ParserAndUntypedAST\layout.fsi + + + ParserAndUntypedAST\layout.fs + + + ParserAndUntypedAST\XmlDoc.fsi + + + ParserAndUntypedAST\XmlDoc.fs + + + ParserAndUntypedAST\SyntaxTree.fs + + + ParserAndUntypedAST\SyntaxTreeOps.fsi + + + ParserAndUntypedAST\SyntaxTreeOps.fs + + + ParserAndUntypedAST\ParseHelpers.fsi + + + ParserAndUntypedAST\ParseHelpers.fs + + + ParserAndUntypedAST\FsYaccOutput\pppars.fs + + + ParserAndUntypedAST\FsYaccOutput\pars.fs + + + ParserAndUntypedAST\lexhelp.fsi + + + ParserAndUntypedAST\lexhelp.fs + + + ParserAndUntypedAST\FsLexOutput\pplex.fs + + + ParserAndUntypedAST\FsLexOutput\lex.fs + + + ParserAndUntypedAST\LexFilter.fsi + + + ParserAndUntypedAST\LexFilter.fs + + + TypedTree\tainted.fsi + + + TypedTree\tainted.fs + + + TypedTree\ExtensionTyping.fsi + + + TypedTree\ExtensionTyping.fs + + + TypedTree\QuotationPickler.fsi + + + TypedTree\QuotationPickler.fs + + + TypedTree\CompilerGlobalState.fsi + + + TypedTree\CompilerGlobalState.fs + + + TypedTree\TypedTree.fs + + + TypedTree\TypedTreeBasics.fsi + + + TypedTree\TypedTreeBasics.fs + + + TypedTree\TcGlobals.fs + + + TypedTree\TypedTreeOps.fsi + + + TypedTree\TypedTreeOps.fs + + + TypedTree\TypedTreePickle.fsi + + + TypedTree\TypedTreePickle.fs + + + Logic\import.fsi + + + Logic\import.fs + + + Logic\infos.fsi + + + Logic\infos.fs + + + Logic\AccessibilityLogic.fsi + + + Logic\AccessibilityLogic.fs + + + Logic\AttributeChecking.fsi + + + Logic\AttributeChecking.fs + + + Logic\TypeRelations.fsi + + + Logic\TypeRelations.fs + + + Logic\InfoReader.fsi + + + Logic\InfoReader.fs + + + Logic\NicePrint.fsi + + + Logic\NicePrint.fs + + + Logic\AugmentWithHashCompare.fsi + + + Logic\AugmentWithHashCompare.fs + + + Logic\NameResolution.fsi + + + Logic\NameResolution.fs + + + Logic\SignatureConformance.fsi + + + Logic\SignatureConformance.fs + + + Logic\MethodOverrides.fsi + + + Logic\MethodOverrides.fs + + + Logic\MethodCalls.fsi + + + Logic\MethodCalls.fs + + + Logic\PatternMatchCompilation.fsi + + + Logic\PatternMatchCompilation.fs + + + Logic\ConstraintSolver.fsi + + + Logic\ConstraintSolver.fs + + + Logic\CheckFormatStrings.fsi + + + Logic\CheckFormatStrings.fs + + + Logic\FindUnsolved.fsi + + + Logic\FindUnsolved.fs + + + Logic\QuotationTranslator.fsi + + + Logic\QuotationTranslator.fs + + + Logic\PostInferenceChecks.fsi + + + Logic\PostInferenceChecks.fs + + + Logic\CheckExpressions.fsi + + + Logic\CheckExpressions.fs + + + Logic\CheckComputationExpressions.fsi + + + Logic\CheckComputationExpressions.fs + + + Logic\CheckDeclarations.fsi + + + Logic\CheckDeclarations.fs + + + Optimize\Optimizer.fsi + + + Optimize\Optimizer.fs + + + Optimize\DetupleArgs.fsi + + + Optimize\DetupleArgs.fs + + + Optimize\InnerLambdasToTopLevelFuncs.fsi + + + Optimize\InnerLambdasToTopLevelFuncs.fs + + + Optimize\LowerCallsAndSeqs.fsi + + + Optimize\LowerCallsAndSeqs.fs + + + Optimize\autobox.fsi + + + Optimize\autobox.fs + + + CodeGen\IlxGen.fsi + + + CodeGen\IlxGen.fs + + + Driver\DotNetFrameworkDependencies.fs + + + Driver\CompilerConfig.fsi + + + Driver\CompilerConfig.fs + + + Driver\CompilerImports.fsi + + + Driver\CompilerImports.fs + + + Driver\CompilerDiagnostics.fsi + + + Driver\CompilerDiagnostics.fs + + + Driver\ParseAndCheckInputs.fsi + + + Driver\ParseAndCheckInputs.fs + + + Driver\ScriptClosure.fsi + + + Driver\ScriptClosure.fs + + + Driver\CompilerOptions.fsi + + + Driver\CompilerOptions.fs + + + Driver\OptimizeInputs.fsi + + + Driver\OptimizeInputs.fs + + + Driver\XmlDocFileWriter.fsi + + + Driver\XmlDocFileWriter.fs + + + Driver\BinaryResourceFormats.fsi + + + Driver\BinaryResourceFormats.fs + + + Driver\StaticLinking.fsi + + + Driver\StaticLinking.fs + + + Driver\CreateILModule.fsi + + + Driver\CreateILModule.fs + + + Driver\fsc.fsi + + + Driver\fsc.fs + + + + + Symbols/SymbolHelpers.fsi + + + Symbols/SymbolHelpers.fs + + + Symbols/Symbols.fsi + + + Symbols/Symbols.fs + + + Symbols/Exprs.fsi + + + Symbols/Exprs.fs + + + Symbols/SymbolPatterns.fsi + + + Symbols/SymbolPatterns.fs + + + Service/Reactor.fsi + + + Service/Reactor.fs + + + + + Service/SemanticClassification.fsi + + + Service/SemanticClassification.fs + + + Service/ItemKey.fsi + + + Service/ItemKey.fs + + + Service/IncrementalBuild.fsi + + + Service/IncrementalBuild.fs + + + Service/ServiceCompilerDiagnostics.fsi + + + Service/ServiceCompilerDiagnostics.fs + + + Service/ServiceConstants.fs + + + Service/ServiceDeclarationLists.fsi + + + Service/ServiceDeclarationLists.fs + + + Service/ServiceLexing.fsi + + + Service/ServiceLexing.fs + + + Service/ServiceParseTreeWalk.fs + + + Service/ServiceNavigation.fsi + + + Service/ServiceNavigation.fs + + + Service/ServiceParamInfoLocations.fsi + + + Service/ServiceParamInfoLocations.fs + + + Service/ServiceUntypedParse.fsi + + + Service/ServiceUntypedParse.fs + + + Service/ServiceAssemblyContent.fsi + + + Service/ServiceAssemblyContent.fs + + + Service/ServiceXmlDocParser.fsi + + + Service/ServiceXmlDocParser.fs + + + Service/ExternalSymbol.fsi + + + Service/ExternalSymbol.fs + + + Service/QuickParse.fsi + + + Service/QuickParse.fs + + + Service/FSharpCheckerResults.fsi + + + Service/FSharpCheckerResults.fs + + + Service/service.fsi + + + Service/service.fs + + + Service/ServiceErrorResolutionHints.fsi + + + Service/ServiceErrorResolutionHints.fs + + + Service/ServiceInterfaceStubGenerator.fsi + + + Service/ServiceInterfaceStubGenerator.fs + + + Service/ServiceStructure.fsi + + + Service/ServiceStructure.fs + + + Service/ServiceAnalysis.fsi + + + Service/ServiceAnalysis.fs + + + + + FSIstrings.txt + + + InteractiveSession/fsi.fsi + + + InteractiveSession/fsi.fs + + + + + Misc/LegacyHostedCompilerForTesting.fs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj b/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj index 8241f891960..75a7353bb96 100644 --- a/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj +++ b/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj @@ -3,6 +3,7 @@ + true net472 FSharp.Compiler.Server.Shared true diff --git a/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj b/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj index dd96b7da59e..6d5c7fbb19e 100644 --- a/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj +++ b/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj @@ -1,32 +1,26 @@ - - + - net472;netstandard2.0 - Library - $(NoWarn);44;45;54;55;57;61;62;69;65;75;1204;2003;NU5125 - FSharp.Compiler.Service + netstandard2.0 + $(NoWarn);44;62;69;65;54;61;75;62;9;2003;NU5125 true + $(DefineConstants);COMPILER_SERVICE_AS_DLL $(DefineConstants);COMPILER $(DefineConstants);ENABLE_MONO_SUPPORT - $(OtherFlags) /warnon:3218 /warnon:1182 /warnon:3390 --maxerrors:20 --extraoptimizationloops:1 --times - true - $(IntermediateOutputPath)$(TargetFramework)\ - $(IntermediateOutputPath)$(TargetFramework)\ - + $(OtherFlags) /warnon:3218 /warnon:1182 /warnon:3390 --times + true + + true - $(IntermediateOutputPath)$(TargetFramework)\ $(IntermediateOutputPath)$(TargetFramework)\ - - FSharp.Compiler.Service FSharp.Compiler.Service.nuspec true The F# Compiler Services package For F# $(FSLanguageVersion) exposes additional functionality for implementing F# language bindings, additional tools based on the compiler or refactoring tools. The package also includes F# interactive service that can be used for embedding F# scripting into your applications. Contains code from the F# Software Foundation. - /blob/main/release-notes.md#FSharp-Compiler-Service-$(FSharpCompilerServiceReleaseNotesVersion) + https://github.com/dotnet/fsharp/blob/main/release-notes.md#FSharp-Compiler-Service-$(FSharpCompilerServiceReleaseNotesVersion) F#, fsharp, interactive, compiler, editor preview $(MSBuildThisFileDirectory)logo.png @@ -59,13 +53,10 @@ - - - @@ -81,6 +72,9 @@ FSComp.txt + + DependencyManager.txt + FSIstrings.txt @@ -148,23 +142,23 @@ Utilities\TaggedCollections.fs + + Utilities\ildiag.fsi + + + Utilities\ildiag.fs + Utilities\illib.fsi Utilities\illib.fs - - Utilities\FileSystem.fsi - - - Utilities\FileSystem.fs + + Utilities\filename.fsi - - Utilities\ildiag.fsi - - - Utilities\ildiag.fs + + Utilities\filename.fs Utilities\zmap.fsi @@ -178,6 +172,12 @@ Utilities\zset.fs + + Utilities\bytes.fsi + + + Utilities\bytes.fs + Utilities\XmlAdapters.fsi @@ -223,18 +223,6 @@ ErrorLogging\range.fs - - ErrorLogging\Diagnostics.fsi - - - ErrorLogging\Diagnostics.fs - - - ErrorLogging\TextLayoutRender.fsi - - - ErrorLogging\TextLayoutRender.fs - ErrorLogging\ErrorLogger.fsi @@ -251,16 +239,10 @@ --unicode --lexlib Internal.Utilities.Text.Lexing AbsIL\illex.fsl - - AbsIL\illex.fsl - - --module FSharp.Compiler.AbstractIL.AsciiParser --open FSharp.Compiler.AbstractIL --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing + --module FSharp.Compiler.AbstractIL.Internal.AsciiParser --open FSharp.Compiler.AbstractIL --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing AbsIL\ilpars.fsy - - AbsIL\FsYacc\ilpars.fsy - AbsIL\il.fsi @@ -279,12 +261,6 @@ AbsIL\ilascii.fs - - AbsIL\FsYaccOut\ilpars.fs - - - AbsIL\FsLexOut\illex.fs - AbsIL\ilprint.fsi @@ -315,6 +291,12 @@ AbsIL\ilsupp.fs + + AbsIL\FsYaccOut\ilpars.fs + + + AbsIL\FsLexOut\illex.fs + AbsIL\ilbinary.fsi @@ -351,13 +333,6 @@ ReferenceResolution\ReferenceResolver.fs - - - ReferenceResolution/LegacyMSBuildReferenceResolver.fsi - - - ReferenceResolution/LegacyMSBuildReferenceResolver.fs - ReferenceResolution/SimulatedMSBuildReferenceResolver.fsi @@ -377,6 +352,9 @@ PrettyNaming\PrettyNaming.fs + + ILXErase\ilxsettings.fs + ILXErase\EraseClosures.fsi @@ -394,7 +372,7 @@ ParserAndUntypedAST\pplex.fsl - --module FSharp.Compiler.PPParser --open FSharp.Compiler --open FSharp.Compiler.Syntax --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing + --module FSharp.Compiler.PPParser --open FSharp.Compiler --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing ParserAndUntypedAST\pppars.fsy @@ -402,36 +380,27 @@ ParserAndUntypedAST\lex.fsl - --module FSharp.Compiler.Parser --open FSharp.Compiler --open FSharp.Compiler.Syntax --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing + --module FSharp.Compiler.Parser --open FSharp.Compiler --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing ParserAndUntypedAST\pars.fsy - - ParserAndUntypedAST\FsLex\pplex.fsl - - - ParserAndUntypedAST\FsLex\lex.fsl - - - ParserAndUntypedAST\FsYacc\pppars.fsy - - - ParserAndUntypedAST\FsYacc\pars.fsy - ParserAndUntypedAST\UnicodeLexing.fsi ParserAndUntypedAST\UnicodeLexing.fs + + ParserAndUntypedAST\layout.fsi + + + ParserAndUntypedAST\layout.fs + ParserAndUntypedAST\XmlDoc.fsi ParserAndUntypedAST\XmlDoc.fs - - ParserAndUntypedAST\SyntaxTree.fsi - ParserAndUntypedAST\SyntaxTree.fs @@ -460,9 +429,9 @@ ParserAndUntypedAST\lexhelp.fs - ParserAndUntypedAST\FsLexOutput\pplex.fs + ParserAndUntypedAST\FsLexOutput\pplex.fsl - + ParserAndUntypedAST\FsLexOutput\lex.fs @@ -681,33 +650,27 @@ CodeGen\IlxGen.fs - - Driver\FxResolver.fs + + Driver\DotNetFrameworkDependencies.fs - + Driver\AssemblyResolveHandler.fsi - + Driver\AssemblyResolveHandler.fs - + Driver\NativeDllResolveHandler.fsi - + Driver\NativeDllResolveHandler.fs - + Driver\DependencyProvider.fsi - + Driver\DependencyProvider.fs - - Driver\BuildGraph.fsi - - - Driver\BuildGraph.fs - Driver\CompilerConfig.fsi @@ -806,6 +769,12 @@ Symbols/SymbolPatterns.fs + + Service/Reactor.fsi + + + Service/Reactor.fs + @@ -820,12 +789,6 @@ Service/ItemKey.fs - - Service/SemanticClassificationKey.fsi - - - Service/SemanticClassificationKey.fs - Service/IncrementalBuild.fsi @@ -853,9 +816,6 @@ Service/ServiceLexing.fs - - Service/ServiceParseTreeWalk.fsi - Service/ServiceParseTreeWalk.fs @@ -871,17 +831,11 @@ Service/ServiceParamInfoLocations.fs - - Service/FSharpParseFileResults.fsi + + Service/ServiceUntypedParse.fsi - - Service/FSharpParseFileResults.fs - - - Service/ServiceParsedInputOps.fsi - - - Service/ServiceParsedInputOps.fs + + Service/ServiceUntypedParse.fs Service/ServiceAssemblyContent.fsi @@ -919,6 +873,12 @@ Service/service.fs + + Service/ServiceErrorResolutionHints.fsi + + + Service/ServiceErrorResolutionHints.fs + Service/ServiceInterfaceStubGenerator.fsi @@ -943,11 +903,6 @@ InteractiveSession/fsi.fs - - - - Misc/LegacyHostedCompilerForTesting.fs - @@ -988,7 +943,5 @@ - - diff --git a/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.nuspec b/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.nuspec index 065f1cdb31c..c7f35f65030 100644 --- a/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.nuspec +++ b/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.nuspec @@ -30,7 +30,6 @@ - diff --git a/src/fsharp/FSharp.Core/Query.fs b/src/fsharp/FSharp.Core/Query.fs index 8d54ff85228..79ffc178d05 100644 --- a/src/fsharp/FSharp.Core/Query.fs +++ b/src/fsharp/FSharp.Core/Query.fs @@ -18,7 +18,7 @@ open Microsoft.FSharp.Linq.RuntimeHelpers [] type QuerySource<'T, 'Q> (source: seq<'T>) = - member _.Source = source + member __.Source = source [] module Helpers = @@ -50,98 +50,98 @@ module ForwardDeclarations = } type QueryBuilder() = - member _.For (source: QuerySource<'T, 'Q>, body: 'T -> QuerySource<'Result, 'Q2>) : QuerySource<'Result, 'Q> = + member __.For (source: QuerySource<'T, 'Q>, body: 'T -> QuerySource<'Result, 'Q2>) : QuerySource<'Result, 'Q> = QuerySource (Seq.collect (fun x -> (body x).Source) source.Source) - member _.Zero () = + member __.Zero () = QuerySource Seq.empty - member _.Yield value = + member __.Yield value = QuerySource (Seq.singleton value) - member _.YieldFrom (computation: QuerySource<'T, 'Q>) : QuerySource<'T, 'Q> = + member __.YieldFrom (computation: QuerySource<'T, 'Q>) : QuerySource<'T, 'Q> = computation // Indicates to the F# compiler that an implicit quotation is added to use of 'query' - member _.Quote (quotation: Quotations.Expr<'T>) = + member __.Quote (quotation: Quotations.Expr<'T>) = quotation - member _.Source (source: IQueryable<'T>) = + member __.Source (source: IQueryable<'T>) = QuerySource source - member _.Source (source: IEnumerable<'T>) : QuerySource<'T, System.Collections.IEnumerable> = + member __.Source (source: IEnumerable<'T>) : QuerySource<'T, System.Collections.IEnumerable> = QuerySource source - member _.Contains (source: QuerySource<'T, 'Q>, key) = + member __.Contains (source: QuerySource<'T, 'Q>, key) = Enumerable.Contains(source.Source, key) - member _.Select (source: QuerySource<'T, 'Q>, projection) : QuerySource<'U, 'Q> = + member __.Select (source: QuerySource<'T, 'Q>, projection) : QuerySource<'U, 'Q> = QuerySource (Seq.map projection source.Source) - member _.Where (source: QuerySource<'T, 'Q>, predicate) : QuerySource<'T, 'Q> = + member __.Where (source: QuerySource<'T, 'Q>, predicate) : QuerySource<'T, 'Q> = QuerySource (Enumerable.Where (source.Source, Func<_, _>(predicate)) ) - member _.Last (source: QuerySource<'T, 'Q>) = + member __.Last (source: QuerySource<'T, 'Q>) = Enumerable.Last source.Source - member _.LastOrDefault (source: QuerySource<'T, 'Q>) = + member __.LastOrDefault (source: QuerySource<'T, 'Q>) = Enumerable.LastOrDefault source.Source - member _.ExactlyOne (source: QuerySource<'T, 'Q>) = + member __.ExactlyOne (source: QuerySource<'T, 'Q>) = Enumerable.Single source.Source - member _.ExactlyOneOrDefault (source: QuerySource<'T, 'Q>) = + member __.ExactlyOneOrDefault (source: QuerySource<'T, 'Q>) = Enumerable.SingleOrDefault source.Source - member _.Count (source: QuerySource<'T, 'Q>) = + member __.Count (source: QuerySource<'T, 'Q>) = Enumerable.Count source.Source - member _.Distinct (source: QuerySource<'T, 'Q> when 'T : equality) : QuerySource<'T, 'Q> = + member __.Distinct (source: QuerySource<'T, 'Q> when 'T : equality) : QuerySource<'T, 'Q> = QuerySource (Enumerable.Distinct source.Source) - member _.Exists(source: QuerySource<'T, 'Q>, predicate) = + member __.Exists(source: QuerySource<'T, 'Q>, predicate) = Enumerable.Any (source.Source, Func<_, _>(predicate)) - member _.All (source: QuerySource<'T, 'Q>, predicate) = + member __.All (source: QuerySource<'T, 'Q>, predicate) = Enumerable.All (source.Source, Func<_, _>(predicate)) - member _.Head (source: QuerySource<'T, 'Q>) = + member __.Head (source: QuerySource<'T, 'Q>) = Enumerable.First source.Source - member _.Nth (source: QuerySource<'T, 'Q>, index) = + member __.Nth (source: QuerySource<'T, 'Q>, index) = Enumerable.ElementAt (source.Source, index) - member _.Skip (source: QuerySource<'T, 'Q>, count) : QuerySource<'T, 'Q> = + member __.Skip (source: QuerySource<'T, 'Q>, count) : QuerySource<'T, 'Q> = QuerySource (Enumerable.Skip (source.Source, count)) - member _.SkipWhile (source: QuerySource<'T, 'Q>, predicate) : QuerySource<'T, 'Q> = + member __.SkipWhile (source: QuerySource<'T, 'Q>, predicate) : QuerySource<'T, 'Q> = QuerySource (Enumerable.SkipWhile (source.Source, Func<_, _>(predicate))) - member _.Take (source: QuerySource<'T, 'Q>, count) : QuerySource<'T, 'Q> = + member __.Take (source: QuerySource<'T, 'Q>, count) : QuerySource<'T, 'Q> = QuerySource (Enumerable.Take (source.Source, count)) - member _.TakeWhile (source: QuerySource<'T, 'Q>, predicate) : QuerySource<'T, 'Q> = + member __.TakeWhile (source: QuerySource<'T, 'Q>, predicate) : QuerySource<'T, 'Q> = QuerySource (Enumerable.TakeWhile (source.Source, Func<_, _>(predicate))) - member _.Find (source: QuerySource<'T, 'Q>, predicate) = + member __.Find (source: QuerySource<'T, 'Q>, predicate) = Enumerable.First (source.Source, Func<_, _>(predicate)) - member _.HeadOrDefault (source: QuerySource<'T, 'Q>) = + member __.HeadOrDefault (source: QuerySource<'T, 'Q>) = Enumerable.FirstOrDefault source.Source - member _.MinBy<'T, 'Q, 'Key when 'Key: equality and 'Key: comparison> (source: QuerySource<'T, 'Q>, valueSelector: 'T -> 'Key) = + member __.MinBy<'T, 'Q, 'Key when 'Key: equality and 'Key: comparison> (source: QuerySource<'T, 'Q>, valueSelector: 'T -> 'Key) = Enumerable.Min(source.Source, Func<'T, 'Key>(valueSelector)) - member _.MaxBy<'T, 'Q, 'Key when 'Key: equality and 'Key: comparison> (source: QuerySource<'T, 'Q>, valueSelector: 'T -> 'Key) = + member __.MaxBy<'T, 'Q, 'Key when 'Key: equality and 'Key: comparison> (source: QuerySource<'T, 'Q>, valueSelector: 'T -> 'Key) = Enumerable.Max(source.Source, Func<'T, 'Key>(valueSelector)) - member _.MinByNullable<'T, 'Q, 'Key when 'Key: equality and 'Key: comparison and 'Key: (new: unit -> 'Key) and 'Key: struct and 'Key:> ValueType> (source: QuerySource<'T, 'Q>, valueSelector: 'T -> Nullable<'Key>) = + member __.MinByNullable<'T, 'Q, 'Key when 'Key: equality and 'Key: comparison and 'Key: (new: unit -> 'Key) and 'Key: struct and 'Key:> ValueType> (source: QuerySource<'T, 'Q>, valueSelector: 'T -> Nullable<'Key>) = Enumerable.Min(source.Source, Func<'T, Nullable<'Key>>(valueSelector)) - member _.MaxByNullable<'T, 'Q, 'Key when 'Key: equality and 'Key: comparison and 'Key: (new: unit -> 'Key) and 'Key: struct and 'Key:> ValueType> (source: QuerySource<'T, 'Q>, valueSelector: 'T -> Nullable<'Key>) = + member __.MaxByNullable<'T, 'Q, 'Key when 'Key: equality and 'Key: comparison and 'Key: (new: unit -> 'Key) and 'Key: struct and 'Key:> ValueType> (source: QuerySource<'T, 'Q>, valueSelector: 'T -> Nullable<'Key>) = Enumerable.Max(source.Source, Func<'T, Nullable<'Key>>(valueSelector)) - member inline _.SumByNullable<'T, 'Q, ^Value + member inline __.SumByNullable<'T, 'Q, ^Value when ^Value :> ValueType and ^Value : struct and ^Value : (new : unit -> ^Value) @@ -160,7 +160,7 @@ type QueryBuilder() = acc <- plus acc (v.Value : ^Value) Nullable acc - member inline _.AverageByNullable< 'T, 'Q, ^Value + member inline __.AverageByNullable< 'T, 'Q, ^Value when ^Value :> ValueType and ^Value : struct and ^Value : (new : unit -> ^Value) @@ -183,7 +183,7 @@ type QueryBuilder() = count <- count + 1 if count = 0 then Nullable() else Nullable(LanguagePrimitives.DivideByInt< (^Value) > acc count) - member inline _.AverageBy< 'T, 'Q, ^Value + member inline __.AverageBy< 'T, 'Q, ^Value when ^Value : (static member ( + ) : ^Value * ^Value -> ^Value) and ^Value : (static member DivideByInt : ^Value * int -> ^Value) and ^Value : (static member Zero : ^Value) @@ -202,7 +202,7 @@ type QueryBuilder() = invalidOp "source" LanguagePrimitives.DivideByInt< (^U) > acc count - member inline _.SumBy< 'T, 'Q, ^Value + member inline __.SumBy< 'T, 'Q, ^Value when ^Value : (static member ( + ) : ^Value * ^Value -> ^Value) and ^Value : (static member Zero : ^Value) and default ^Value : int > @@ -210,54 +210,54 @@ type QueryBuilder() = Seq.sumBy projection source.Source - member _.GroupBy (source: QuerySource<'T, 'Q>, keySelector: _ -> 'Key) : QuerySource<_, 'Q> when 'Key : equality = + member __.GroupBy (source: QuerySource<'T, 'Q>, keySelector: _ -> 'Key) : QuerySource<_, 'Q> when 'Key : equality = QuerySource (Enumerable.GroupBy(source.Source, Func<_, _>(keySelector))) - member _.SortBy (source: QuerySource<'T, 'Q>, keySelector: 'T -> 'Key) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = + member __.SortBy (source: QuerySource<'T, 'Q>, keySelector: 'T -> 'Key) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = QuerySource (Enumerable.OrderBy(source.Source, Func<_, _>(keySelector))) - member _.SortByDescending (source: QuerySource<'T, 'Q>, keySelector: 'T -> 'Key) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = + member __.SortByDescending (source: QuerySource<'T, 'Q>, keySelector: 'T -> 'Key) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = QuerySource (Enumerable.OrderByDescending(source.Source, Func<_, _>(keySelector))) - member _.ThenBy (source: QuerySource<'T, 'Q>, keySelector: 'T -> 'Key) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = + member __.ThenBy (source: QuerySource<'T, 'Q>, keySelector: 'T -> 'Key) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = QuerySource (Enumerable.ThenBy(checkThenBySource source.Source, Func<_, _>(keySelector))) - member _.ThenByDescending (source: QuerySource<'T, 'Q>, keySelector: 'T -> 'Key) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = + member __.ThenByDescending (source: QuerySource<'T, 'Q>, keySelector: 'T -> 'Key) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = QuerySource (Enumerable.ThenByDescending(checkThenBySource source.Source, Func<_, _>(keySelector))) - member _.SortByNullable (source: QuerySource<'T, 'Q>, keySelector: 'T -> Nullable<'Key>) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = + member __.SortByNullable (source: QuerySource<'T, 'Q>, keySelector: 'T -> Nullable<'Key>) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = QuerySource (Enumerable.OrderBy(source.Source, Func<_, _>(keySelector))) - member _.SortByNullableDescending (source: QuerySource<'T, 'Q>, keySelector: 'T -> Nullable<'Key>) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = + member __.SortByNullableDescending (source: QuerySource<'T, 'Q>, keySelector: 'T -> Nullable<'Key>) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = QuerySource (Enumerable.OrderByDescending(source.Source, Func<_, _>(keySelector))) - member _.ThenByNullable (source: QuerySource<'T, 'Q>, keySelector: 'T -> Nullable<'Key>) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = + member __.ThenByNullable (source: QuerySource<'T, 'Q>, keySelector: 'T -> Nullable<'Key>) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = QuerySource (Enumerable.ThenBy(checkThenBySource source.Source, Func<_, _>(keySelector))) - member _.ThenByNullableDescending (source: QuerySource<'T, 'Q>, keySelector: 'T -> Nullable<'Key>) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = + member __.ThenByNullableDescending (source: QuerySource<'T, 'Q>, keySelector: 'T -> Nullable<'Key>) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = QuerySource (Enumerable.ThenByDescending(checkThenBySource source.Source, Func<_, _>(keySelector))) - member _.GroupValBy<'T, 'Key, 'Result, 'Q when 'Key : equality > (source: QuerySource<'T, 'Q>, resultSelector: 'T -> 'Result, keySelector: 'T -> 'Key) : QuerySource, 'Q> = + member __.GroupValBy<'T, 'Key, 'Result, 'Q when 'Key : equality > (source: QuerySource<'T, 'Q>, resultSelector: 'T -> 'Result, keySelector: 'T -> 'Key) : QuerySource, 'Q> = QuerySource (Enumerable.GroupBy(source.Source, Func<'T, 'Key>(keySelector), Func<'T, 'Result>(resultSelector))) - member _.Join (outerSource: QuerySource<_, 'Q>, innerSource: QuerySource<_, 'Q>, outerKeySelector, innerKeySelector, resultSelector) : QuerySource<_, 'Q> = + member __.Join (outerSource: QuerySource<_, 'Q>, innerSource: QuerySource<_, 'Q>, outerKeySelector, innerKeySelector, resultSelector) : QuerySource<_, 'Q> = QuerySource (Enumerable.Join(outerSource.Source, innerSource.Source, Func<_, _>(outerKeySelector), Func<_, _>(innerKeySelector), Func<_, _, _>(resultSelector))) - member _.GroupJoin (outerSource: QuerySource<_, 'Q>, innerSource: QuerySource<_, 'Q>, outerKeySelector, innerKeySelector, resultSelector: _ -> seq<_> -> _) : QuerySource<_, 'Q> = + member __.GroupJoin (outerSource: QuerySource<_, 'Q>, innerSource: QuerySource<_, 'Q>, outerKeySelector, innerKeySelector, resultSelector: _ -> seq<_> -> _) : QuerySource<_, 'Q> = QuerySource (Enumerable.GroupJoin(outerSource.Source, innerSource.Source, Func<_, _>(outerKeySelector), Func<_, _>(innerKeySelector), Func<_, _, _>(fun x g -> resultSelector x g))) - member _.LeftOuterJoin (outerSource: QuerySource<_, 'Q>, innerSource: QuerySource<_, 'Q>, outerKeySelector, innerKeySelector, resultSelector: _ -> seq<_> -> _) : QuerySource<_, 'Q> = + member __.LeftOuterJoin (outerSource: QuerySource<_, 'Q>, innerSource: QuerySource<_, 'Q>, outerKeySelector, innerKeySelector, resultSelector: _ -> seq<_> -> _) : QuerySource<_, 'Q> = QuerySource (Enumerable.GroupJoin(outerSource.Source, innerSource.Source, Func<_, _>(outerKeySelector), Func<_, _>(innerKeySelector), Func<_, _, _>(fun x g -> resultSelector x (g.DefaultIfEmpty())))) - member _.RunQueryAsValue (q: Quotations.Expr<'T>) : 'T = + member __.RunQueryAsValue (q: Quotations.Expr<'T>) : 'T = ForwardDeclarations.Query.Execute q - member _.RunQueryAsEnumerable (q: Quotations.Expr>) : IEnumerable<'T> = + member __.RunQueryAsEnumerable (q: Quotations.Expr>) : IEnumerable<'T> = let queryAfterEliminatingNestedQueries = ForwardDeclarations.Query.EliminateNestedQueries q let queryAfterCleanup = Microsoft.FSharp.Linq.RuntimeHelpers.Adapters.CleanupLeaf queryAfterEliminatingNestedQueries (LeafExpressionConverter.EvaluateQuotation queryAfterCleanup :?> QuerySource<'T, IEnumerable>).Source - member _.RunQueryAsQueryable (q: Quotations.Expr>) : IQueryable<'T> = + member __.RunQueryAsQueryable (q: Quotations.Expr>) : IQueryable<'T> = ForwardDeclarations.Query.Execute q member this.Run q = this.RunQueryAsQueryable q diff --git a/src/fsharp/FSharp.Core/async.fs b/src/fsharp/FSharp.Core/async.fs index 0d5abef0333..4224440e6f1 100644 --- a/src/fsharp/FSharp.Core/async.fs +++ b/src/fsharp/FSharp.Core/async.fs @@ -92,7 +92,7 @@ namespace Microsoft.FSharp.Control /// Use this trampoline on the synchronous stack if none exists, and execute /// the given function. The function might write its continuation into the trampoline. [] - member _.Execute (firstAction: unit -> AsyncReturn) = + member __.Execute (firstAction: unit -> AsyncReturn) = let thisThreadHadTrampoline = Trampoline.thisThreadHasTrampoline Trampoline.thisThreadHasTrampoline <- true @@ -124,19 +124,19 @@ namespace Microsoft.FSharp.Control /// Increment the counter estimating the size of the synchronous stack and /// return true if time to jump on trampoline. - member _.IncrementBindCount() = + member __.IncrementBindCount() = bindCount <- bindCount + 1 bindCount >= bindLimitBeforeHijack /// Prepare to abandon the synchronous stack of the current execution and save the continuation in the trampoline. - member _.Set action = + member __.Set action = assert storedCont.IsNone bindCount <- 0 storedCont <- Some action AsyncReturn.Fake() /// Save the exception continuation during propagation of an exception, or prior to raising an exception - member _.OnExceptionRaised (action: econt) = + member __.OnExceptionRaised (action: econt) = assert storedExnCont.IsNone storedExnCont <- Some action @@ -164,7 +164,7 @@ namespace Microsoft.FSharp.Control /// Execute an async computation after installing a trampoline on its synchronous stack. [] - member _.ExecuteWithTrampoline firstAction = + member __.ExecuteWithTrampoline firstAction = trampoline <- Trampoline() trampoline.Execute firstAction @@ -183,16 +183,16 @@ namespace Microsoft.FSharp.Control | _ -> this.PostWithTrampoline syncCtxt f // This should be the only call to Thread.Start in this library. We must always install a trampoline. - member _.StartThreadWithTrampoline (f: unit -> AsyncReturn) = + member __.StartThreadWithTrampoline (f: unit -> AsyncReturn) = Thread(threadStartCallbackForStartThreadWithTrampoline, IsBackground=true).Start(f|>box) AsyncReturn.Fake() /// Save the exception continuation during propagation of an exception, or prior to raising an exception - member inline _.OnExceptionRaised econt = + member inline __.OnExceptionRaised econt = trampoline.OnExceptionRaised econt /// Call a continuation, but first check if an async computation should trampoline on its synchronous stack. - member inline _.HijackCheckThenCall (cont: 'T -> AsyncReturn) res = + member inline __.HijackCheckThenCall (cont: 'T -> AsyncReturn) res = if trampoline.IncrementBindCount() then trampoline.Set (fun () -> cont res) else @@ -643,7 +643,7 @@ namespace Microsoft.FSharp.Control let trampolineHolder = ctxt.trampolineHolder - member _.ContinueImmediate res = + member __.ContinueImmediate res = let action () = ctxt.cont res let inline executeImmediately () = trampolineHolder.ExecuteWithTrampoline action let currentSyncCtxt = SynchronizationContext.Current @@ -657,7 +657,7 @@ namespace Microsoft.FSharp.Control | _ -> trampolineHolder.PostOrQueueWithTrampoline syncCtxt action - member _.ContinueWithPostOrQueue res = + member __.ContinueWithPostOrQueue res = trampolineHolder.PostOrQueueWithTrampoline syncCtxt (fun () -> ctxt.cont res) /// A utility type to provide a synchronization point between an asynchronous computation @@ -800,7 +800,7 @@ namespace Microsoft.FSharp.Control /// Create an instance of an arbitrary delegate type delegating to the given F# function type FuncDelegate<'T>(f) = - member _.Invoke(sender:obj, a:'T) : unit = ignore sender; f a + member __.Invoke(sender:obj, a:'T) : unit = ignore sender; f a static member Create<'Delegate when 'Delegate :> Delegate>(f) = let obj = FuncDelegate<'T>(f) let invokeMeth = (typeof>).GetMethod("Invoke", BindingFlags.Public ||| BindingFlags.NonPublic ||| BindingFlags.Instance) @@ -871,9 +871,11 @@ namespace Microsoft.FSharp.Control [] let RunSynchronously cancellationToken (computation: Async<'T>) timeout = - // Reuse the current ThreadPool thread if possible. - match Thread.CurrentThread.IsThreadPoolThread, timeout with - | true, None -> RunSynchronouslyInCurrentThread (cancellationToken, computation) + // Reuse the current ThreadPool thread if possible. Unfortunately + // Thread.IsThreadPoolThread isn't available on all profiles so + // we approximate it by testing synchronization context for null. + match SynchronizationContext.Current, timeout with + | null, None -> RunSynchronouslyInCurrentThread (cancellationToken, computation) // When the timeout is given we need a dedicated thread // which cancels the computation. // Performing the cancellation in the ThreadPool eg. by using @@ -923,44 +925,42 @@ namespace Microsoft.FSharp.Control // Helper to attach continuation to the given task. [] - let taskContinueWith (task: Task<'T>) (ctxt: AsyncActivation<'T>) = + let taskContinueWith (task: Task<'T>) (ctxt: AsyncActivation<'T>) useCcontForTaskCancellation = let continuation (completedTask: Task<_>) : unit = ctxt.trampolineHolder.ExecuteWithTrampoline (fun () -> if completedTask.IsCanceled then - let edi = ExceptionDispatchInfo.Capture(TaskCanceledException completedTask) - ctxt.econt edi + if useCcontForTaskCancellation then + ctxt.OnCancellation () + else + let edi = ExceptionDispatchInfo.Capture(TaskCanceledException completedTask) + ctxt.econt edi elif completedTask.IsFaulted then let edi = ExceptionDispatchInfo.RestoreOrCapture completedTask.Exception ctxt.econt edi else ctxt.cont completedTask.Result) |> unfake - if task.IsCompleted then - continuation task |> fake - else - task.ContinueWith(Action>(continuation), TaskContinuationOptions.ExecuteSynchronously) - |> ignore |> fake + task.ContinueWith(Action>(continuation)) |> ignore |> fake [] - let taskContinueWithUnit (task: Task) (ctxt: AsyncActivation) = + let taskContinueWithUnit (task: Task) (ctxt: AsyncActivation) useCcontForTaskCancellation = let continuation (completedTask: Task) : unit = ctxt.trampolineHolder.ExecuteWithTrampoline (fun () -> if completedTask.IsCanceled then - let edi = ExceptionDispatchInfo.Capture(TaskCanceledException(completedTask)) - ctxt.econt edi + if useCcontForTaskCancellation then + ctxt.OnCancellation () + else + let edi = ExceptionDispatchInfo.Capture(TaskCanceledException(completedTask)) + ctxt.econt edi elif completedTask.IsFaulted then let edi = ExceptionDispatchInfo.RestoreOrCapture completedTask.Exception ctxt.econt edi else ctxt.cont ()) |> unfake - if task.IsCompleted then - continuation task |> fake - else - task.ContinueWith(Action(continuation), TaskContinuationOptions.ExecuteSynchronously) - |> ignore |> fake + task.ContinueWith(Action(continuation)) |> ignore |> fake [] type AsyncIAsyncResult<'T>(callback: System.AsyncCallback, state:obj) = @@ -1047,29 +1047,29 @@ namespace Microsoft.FSharp.Control [] type AsyncBuilder() = - member _.Zero () = unitAsync + member __.Zero () = unitAsync - member _.Delay generator = CreateDelayAsync generator + member __.Delay generator = CreateDelayAsync generator - member inline _.Return value = CreateReturnAsync value + member inline __.Return value = CreateReturnAsync value - member inline _.ReturnFrom (computation:Async<_>) = computation + member inline __.ReturnFrom (computation:Async<_>) = computation - member inline _.Bind (computation, binder) = CreateBindAsync computation binder + member inline __.Bind (computation, binder) = CreateBindAsync computation binder - member _.Using (resource, binder) = CreateUsingAsync resource binder + member __.Using (resource, binder) = CreateUsingAsync resource binder - member _.While (guard, computation) = CreateWhileAsync guard computation + member __.While (guard, computation) = CreateWhileAsync guard computation - member _.For (sequence, body) = CreateForLoopAsync sequence body + member __.For (sequence, body) = CreateForLoopAsync sequence body - member inline _.Combine (computation1, computation2) = CreateSequentialAsync computation1 computation2 + member inline __.Combine (computation1, computation2) = CreateSequentialAsync computation1 computation2 - member inline _.TryFinally (computation, compensation) = CreateTryFinallyAsync compensation computation + member inline __.TryFinally (computation, compensation) = CreateTryFinallyAsync compensation computation - member inline _.TryWith (computation, catchHandler) = CreateTryWithAsync catchHandler computation + member inline __.TryWith (computation, catchHandler) = CreateTryWithAsync catchHandler computation - // member inline _.TryWithFilter (computation, catchHandler) = CreateTryWithFilterAsync catchHandler computation + // member inline __.TryWithFilter (computation, catchHandler) = CreateTryWithFilterAsync catchHandler computation [] module AsyncBuilderImpl = @@ -1692,16 +1692,10 @@ namespace Microsoft.FSharp.Control CreateWhenCancelledAsync compensation computation static member AwaitTask (task:Task<'T>) : Async<'T> = - if task.IsCompleted then - CreateProtectedAsync (fun ctxt -> taskContinueWith task ctxt) - else - CreateDelimitedUserCodeAsync (fun ctxt -> taskContinueWith task ctxt) + CreateDelimitedUserCodeAsync (fun ctxt -> taskContinueWith task ctxt false) static member AwaitTask (task:Task) : Async = - if task.IsCompleted then - CreateProtectedAsync (fun ctxt -> taskContinueWithUnit task ctxt) - else - CreateDelimitedUserCodeAsync (fun ctxt -> taskContinueWithUnit task ctxt) + CreateDelimitedUserCodeAsync (fun ctxt -> taskContinueWithUnit task ctxt false) module CommonExtensions = diff --git a/src/fsharp/FSharp.Core/async.fsi b/src/fsharp/FSharp.Core/async.fsi index a49c75d8ec2..0d2a1867fa5 100644 --- a/src/fsharp/FSharp.Core/async.fsi +++ b/src/fsharp/FSharp.Core/async.fsi @@ -365,17 +365,6 @@ namespace Microsoft.FSharp.Control /// /// The task to await. /// - /// If an exception occurs in the asynchronous computation then an exception is re-raised by this - /// function. - /// - /// If the task is cancelled then is raised. Note - /// that the task may be governed by a different cancellation token to the overall async computation - /// where the AwaitTask occurs. In practice you should normally start the task with the - /// cancellation token returned by let! ct = Async.CancellationToken, and catch - /// any at the point where the - /// overall async is started. - /// - /// /// Awaiting Results static member AwaitTask: task: Task<'T> -> Async<'T> @@ -384,17 +373,6 @@ namespace Microsoft.FSharp.Control /// /// The task to await. /// - /// If an exception occurs in the asynchronous computation then an exception is re-raised by this - /// function. - /// - /// If the task is cancelled then is raised. Note - /// that the task may be governed by a different cancellation token to the overall async computation - /// where the AwaitTask occurs. In practice you should normally start the task with the - /// cancellation token returned by let! ct = Async.CancellationToken, and catch - /// any at the point where the - /// overall async is started. - /// - /// /// Awaiting Results static member AwaitTask: task: Task -> Async diff --git a/src/fsharp/FSharp.Core/collections.fs b/src/fsharp/FSharp.Core/collections.fs index f15cb4894a3..547fe99fd54 100644 --- a/src/fsharp/FSharp.Core/collections.fs +++ b/src/fsharp/FSharp.Core/collections.fs @@ -19,19 +19,19 @@ namespace Microsoft.FSharp.Collections let Reference<'T when 'T : not struct > : IEqualityComparer<'T> = { new IEqualityComparer<'T> with - member _.GetHashCode(x) = LanguagePrimitives.PhysicalHash(x) - member _.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 _.GetHashCode(x) = NonStructuralComparison.hash x - member _.Equals(x, y) = NonStructuralComparison.(=) x y } + member __.GetHashCode(x) = NonStructuralComparison.hash x + member __.Equals(x, y) = NonStructuralComparison.(=) x y } let inline FromFunctions hasher equality : IEqualityComparer<'T> = let eq = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(equality) { new IEqualityComparer<'T> with - member _.GetHashCode(x) = hasher x - member _.Equals(x,y) = eq.Invoke(x,y) } + member __.GetHashCode(x) = hasher x + member __.Equals(x,y) = eq.Invoke(x,y) } module ComparisonIdentity = @@ -41,10 +41,10 @@ namespace Microsoft.FSharp.Collections 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 _.Compare(x,y) = NonStructuralComparison.compare x y } + member __.Compare(x,y) = NonStructuralComparison.compare x y } let FromFunction comparer = let comparer = OptimizedClosures.FSharpFunc<'T,'T,int>.Adapt(comparer) { new IComparer<'T> with - member _.Compare(x,y) = comparer.Invoke(x,y) } + member __.Compare(x,y) = comparer.Invoke(x,y) } diff --git a/src/fsharp/FSharp.Core/event.fs b/src/fsharp/FSharp.Core/event.fs index 8e1d0826f33..d14eea26904 100644 --- a/src/fsharp/FSharp.Core/event.fs +++ b/src/fsharp/FSharp.Core/event.fs @@ -10,19 +10,6 @@ namespace Microsoft.FSharp.Control open Microsoft.FSharp.Control open System.Reflection open System.Diagnostics - - module private Atomic = - open System.Threading - - let inline setWith (thunk: 'a -> 'a) (value: byref<'a>) = - let mutable exchanged = false - let mutable oldValue = value - while not exchanged do - let comparand = oldValue - let newValue = thunk comparand - oldValue <- Interlocked.CompareExchange(&value, newValue, comparand) - if obj.ReferenceEquals(comparand, oldValue) then - exchanged <- true [] type DelegateEvent<'Delegate when 'Delegate :> System.Delegate>() = @@ -34,9 +21,9 @@ namespace Microsoft.FSharp.Control member x.Publish = { new IDelegateEvent<'Delegate> with member x.AddHandler(d) = - Atomic.setWith (fun value -> System.Delegate.Combine(value, d)) &multicast - member x.RemoveHandler(d) = - Atomic.setWith (fun value -> System.Delegate.Remove(value, d)) &multicast } + multicast <- System.Delegate.Combine(multicast, d) + member x.RemoveHandler(d) = + multicast <- System.Delegate.Remove(multicast, d) } type EventDelegee<'Args>(observer: System.IObserver<'Args>) = static let makeTuple = @@ -67,7 +54,7 @@ namespace Microsoft.FSharp.Control type EventWrapper<'Delegate,'Args> = delegate of 'Delegate * obj * 'Args -> unit [] - type Event<'Delegate, 'Args when 'Delegate : delegate<'Args, unit> and 'Delegate :> System.Delegate and 'Delegate: not struct>() = + type Event<'Delegate, 'Args when 'Delegate : delegate<'Args, unit> and 'Delegate :> System.Delegate>() = let mutable multicast : 'Delegate = Unchecked.defaultof<_> @@ -98,8 +85,6 @@ namespace Microsoft.FSharp.Control mi member x.Trigger(sender:obj,args: 'Args) = - // Copy multicast value into local variable to avoid changing during member call. - let multicast = multicast match box multicast with | null -> () | _ -> @@ -117,9 +102,9 @@ namespace Microsoft.FSharp.Control member x.ToString() = "" interface IEvent<'Delegate,'Args> with member e.AddHandler(d) = - Atomic.setWith (fun value -> System.Delegate.Combine(value, d) :?> 'Delegate) &multicast + multicast <- System.Delegate.Combine(multicast, d) :?> 'Delegate member e.RemoveHandler(d) = - Atomic.setWith (fun value -> System.Delegate.Remove(value, d) :?> 'Delegate) &multicast + multicast <- System.Delegate.Remove(multicast, d) :?> 'Delegate interface System.IObservable<'Args> with member e.Subscribe(observer) = let obj = new EventDelegee<'Args>(observer) @@ -143,9 +128,9 @@ namespace Microsoft.FSharp.Control member x.ToString() = "" interface IEvent<'T> with member e.AddHandler(d) = - Atomic.setWith (fun value -> System.Delegate.Combine(value, d) :?> Handler<'T>) &x.multicast + x.multicast <- (System.Delegate.Combine(x.multicast, d) :?> Handler<'T>) member e.RemoveHandler(d) = - Atomic.setWith (fun value -> System.Delegate.Remove(value, d) :?> Handler<'T>) &x.multicast + x.multicast <- (System.Delegate.Remove(x.multicast, d) :?> Handler<'T>) interface System.IObservable<'T> with member e.Subscribe(observer) = let h = new Handler<_>(fun sender args -> observer.OnNext(args)) diff --git a/src/fsharp/FSharp.Core/event.fsi b/src/fsharp/FSharp.Core/event.fsi index fd6c23e0008..855a259121b 100644 --- a/src/fsharp/FSharp.Core/event.fsi +++ b/src/fsharp/FSharp.Core/event.fsi @@ -26,7 +26,7 @@ namespace Microsoft.FSharp.Control /// /// Events and Observables [] - type Event<'Delegate,'Args when 'Delegate : delegate<'Args,unit> and 'Delegate :> System.Delegate and 'Delegate : not struct> = + type Event<'Delegate,'Args when 'Delegate : delegate<'Args,unit> and 'Delegate :> System.Delegate > = /// Creates an event object suitable for delegate types following the standard .NET Framework convention of a first 'sender' argument. /// The created event. new : unit -> Event<'Delegate,'Args> diff --git a/src/fsharp/FSharp.Core/fslib-extra-pervasives.fs b/src/fsharp/FSharp.Core/fslib-extra-pervasives.fs index 7d05c29b497..b3fa821511a 100644 --- a/src/fsharp/FSharp.Core/fslib-extra-pervasives.fs +++ b/src/fsharp/FSharp.Core/fslib-extra-pervasives.fs @@ -81,16 +81,16 @@ module ExtraTopLevelOperators = member s.Remove(_ : 'Key) = (raise (NotSupportedException(SR.GetString(SR.thisValueCannotBeMutated))) : bool) interface IReadOnlyDictionary<'Key, 'T> with - member _.Item with get key = t.[makeSafeKey key] - member _.Keys = t.Keys |> Seq.map getKey - member _.TryGetValue(key, r) = + member __.Item with get key = t.[makeSafeKey key] + member __.Keys = t.Keys |> Seq.map getKey + member __.TryGetValue(key, r) = match t.TryGetValue (makeSafeKey key) with | false, _ -> false | true, value -> r <- value true - member _.Values = (t :> IReadOnlyDictionary<_,_>).Values - member _.ContainsKey k = t.ContainsKey (makeSafeKey k) + member __.Values = (t :> IReadOnlyDictionary<_,_>).Values + member __.ContainsKey k = t.ContainsKey (makeSafeKey k) interface ICollection> with member s.Add(_) = raise (NotSupportedException(SR.GetString(SR.thisValueCannotBeMutated))) @@ -106,7 +106,7 @@ module ExtraTopLevelOperators = member s.Count = t.Count interface IReadOnlyCollection> with - member _.Count = t.Count + member __.Count = t.Count interface IEnumerable> with member s.GetEnumerator() = @@ -128,15 +128,15 @@ module ExtraTopLevelOperators = kvps.[index] {new IEnumerator<_> with - member _.Current = current () + member __.Current = current () interface System.Collections.IEnumerator with - member _.Current = box(current()) - member _.MoveNext() = + member __.Current = box(current()) + member __.MoveNext() = if index < endIndex then index <- index + 1 index < endIndex else false - member _.Reset() = index <- -1 + member __.Reset() = index <- -1 interface System.IDisposable with member self.Dispose() = () } #endif @@ -306,12 +306,12 @@ namespace Microsoft.FSharp.Core.CompilerServices type TypeProviderAssemblyAttribute(assemblyName : string) = inherit System.Attribute() new () = TypeProviderAssemblyAttribute(null) - member _.AssemblyName = assemblyName + member __.AssemblyName = assemblyName [] type TypeProviderXmlDocAttribute(commentText: string) = inherit System.Attribute() - member _.CommentText = commentText + member __.CommentText = commentText [] type TypeProviderDefinitionLocationAttribute() = diff --git a/src/fsharp/FSharp.Core/list.fs b/src/fsharp/FSharp.Core/list.fs index 9f7e4dbbb8f..920f0f0d9ff 100644 --- a/src/fsharp/FSharp.Core/list.fs +++ b/src/fsharp/FSharp.Core/list.fs @@ -42,7 +42,11 @@ namespace Microsoft.FSharp.Collections [] let concat lists = Microsoft.FSharp.Primitives.Basics.List.concat lists - let inline countByImpl (comparer:IEqualityComparer<'SafeKey>) (projection:'T->'SafeKey) (getKey:'SafeKey->'Key) (list:'T list) = + let inline countByImpl (comparer:IEqualityComparer<'SafeKey>) (projection:'T->'SafeKey) (getKey:'SafeKey->'Key) (list:'T list) = + match list with + | [] -> [] + | _ -> + let dict = Dictionary comparer let rec loop srcList = match srcList with @@ -63,12 +67,9 @@ namespace Microsoft.FSharp.Collections [] let countBy (projection:'T->'Key) (list:'T list) = - match list with - | [] -> [] - | _ -> - if typeof<'Key>.IsValueType - then countByValueType projection list - else countByRefType projection list + if typeof<'Key>.IsValueType + then countByValueType projection list + else countByRefType projection list [] let map mapping list = Microsoft.FSharp.Primitives.Basics.List.map mapping list @@ -439,12 +440,9 @@ namespace Microsoft.FSharp.Collections [] let groupBy (projection:'T->'Key) (list:'T list) = - match list with - | [] -> [] - | _ -> - if typeof<'Key>.IsValueType - then groupByValueType projection list - else groupByRefType projection list + if typeof<'Key>.IsValueType + then groupByValueType projection list + else groupByRefType projection list [] let partition predicate list = Microsoft.FSharp.Primitives.Basics.List.partition predicate list diff --git a/src/fsharp/FSharp.Core/local.fs b/src/fsharp/FSharp.Core/local.fs index e02cccb7494..3d812fc72c4 100644 --- a/src/fsharp/FSharp.Core/local.fs +++ b/src/fsharp/FSharp.Core/local.fs @@ -194,6 +194,10 @@ module internal List = cons let groupBy (comparer:IEqualityComparer<'SafeKey>) (keyf:'T->'SafeKey) (getKey:'SafeKey->'Key) (list: 'T list) = + match list with + | [] -> [] + | _ -> + let dict = Dictionary<_, _ list []> comparer // Build the groupings @@ -1046,7 +1050,7 @@ module internal Array = let f = OptimizedClosures.FSharpFunc<_, _, _>.Adapt(f) let mutable acc = acc let res = zeroCreateUnchecked len - for i = 0 to len-1 do + for i = 0 to array.Length-1 do let h', s' = f.Invoke(acc, array.[i]) res.[i] <- h' acc <- s' @@ -1077,21 +1081,22 @@ module internal Array = let unstableSortInPlaceBy (projection: 'T -> 'U) (array : array<'T>) = let len = array.Length - if len > 1 then - let keys = zeroCreateUnchecked len - for i = 0 to len - 1 do + if len < 2 then () + else + let keys = zeroCreateUnchecked array.Length + for i = 0 to array.Length - 1 do keys.[i] <- projection array.[i] Array.Sort<_, _>(keys, array, fastComparerForArraySort()) let unstableSortInPlace (array : array<'T>) = - if array.Length > 1 then - Array.Sort<_>(array, fastComparerForArraySort()) + let len = array.Length + if len < 2 then () + 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 - let len = array.Length - let places = zeroCreateUnchecked len - for i = 0 to len - 1 do + // 'places' is an array or integers storing the permutation performed by the sort + let places = zeroCreateUnchecked array.Length + for i = 0 to array.Length - 1 do places.[i] <- i System.Array.Sort<_, _>(keys, places, cFast) // 'array2' is a copy of the original values @@ -1099,6 +1104,7 @@ module internal Array = // Walk through any chunks where the keys are equal let mutable i = 0 + let len = array.Length let intCompare = fastComparerForArraySort() while i < len do @@ -1120,16 +1126,18 @@ module internal Array = let stableSortInPlaceBy (projection: 'T -> 'U) (array : array<'T>) = let len = array.Length - if len > 1 then + if len < 2 then () + else // 'keys' is an array storing the projected keys - let keys = zeroCreateUnchecked len - for i = 0 to len - 1 do + let keys = zeroCreateUnchecked array.Length + for i = 0 to array.Length - 1 do keys.[i] <- projection array.[i] stableSortWithKeys array keys let stableSortInPlace (array : array<'T>) = let len = array.Length - if len > 1 then + if len < 2 then () + else let cFast = LanguagePrimitives.FastGenericComparerCanBeNull<'T> match cFast with | null -> @@ -1146,7 +1154,7 @@ module internal Array = if len > 1 then let keys = (array.Clone() :?> array<'T>) let comparer = OptimizedClosures.FSharpFunc<_, _, _>.Adapt(comparer) - let c = { new IComparer<'T> with member _.Compare(x, y) = comparer.Invoke(x, y) } + let c = { new IComparer<'T> with member __.Compare(x, y) = comparer.Invoke(x, y) } stableSortWithKeysAndComparer c c array keys let inline subUnchecked startIndex count (array : 'T[]) = diff --git a/src/fsharp/FSharp.Core/mailbox.fs b/src/fsharp/FSharp.Core/mailbox.fs index 96782fa1e15..b2bec129719 100644 --- a/src/fsharp/FSharp.Core/mailbox.fs +++ b/src/fsharp/FSharp.Core/mailbox.fs @@ -103,7 +103,7 @@ namespace Microsoft.FSharp.Control else waitOneWithCancellation timeout - member _.inbox = + member __.inbox = match inboxStore with | null -> inboxStore <- new System.Collections.Generic.List<'Msg>(1) | _ -> () @@ -311,7 +311,7 @@ namespace Microsoft.FSharp.Control } interface System.IDisposable with - member _.Dispose() = + member __.Dispose() = if isNotNull pulse then (pulse :> IDisposable).Dispose() #if DEBUG @@ -337,17 +337,17 @@ namespace Microsoft.FSharp.Control let mutable started = false let errorEvent = new Event() - member _.CurrentQueueLength = mailbox.CurrentQueueLength // nb. unprotected access gives an approximation of the queue length + member __.CurrentQueueLength = mailbox.CurrentQueueLength // nb. unprotected access gives an approximation of the queue length - member _.DefaultTimeout + member __.DefaultTimeout with get() = defaultTimeout and set v = defaultTimeout <- v [] - member _.Error = errorEvent.Publish + member __.Error = errorEvent.Publish #if DEBUG - member _.UnsafeMessageQueueContents = mailbox.UnsafeContents + member __.UnsafeMessageQueueContents = mailbox.UnsafeContents #endif member x.Start() = @@ -367,9 +367,9 @@ namespace Microsoft.FSharp.Control Async.Start(computation=p, cancellationToken=cancellationToken) - member _.Post message = mailbox.Post message + member __.Post message = mailbox.Post message - member _.TryPostAndReply(buildMessage : (_ -> 'Msg), ?timeout) : 'Reply option = + member __.TryPostAndReply(buildMessage : (_ -> 'Msg), ?timeout) : 'Reply option = let timeout = defaultArg timeout defaultTimeout use resultCell = new ResultCell<_>() let msg = buildMessage (new AsyncReplyChannel<_>(fun reply -> @@ -384,7 +384,7 @@ namespace Microsoft.FSharp.Control | None -> raise (TimeoutException(SR.GetString(SR.mailboxProcessorPostAndReplyTimedOut))) | Some res -> res - member _.PostAndTryAsyncReply(buildMessage, ?timeout) : Async<'Reply option> = + member __.PostAndTryAsyncReply(buildMessage, ?timeout) : Async<'Reply option> = let timeout = defaultArg timeout defaultTimeout let resultCell = new ResultCell<_>() let msg = buildMessage (new AsyncReplyChannel<_>(fun reply -> @@ -419,20 +419,20 @@ namespace Microsoft.FSharp.Control | None -> return! raise (TimeoutException(SR.GetString(SR.mailboxProcessorPostAndAsyncReplyTimedOut))) | Some res -> return res } - member _.Receive(?timeout) = + member __.Receive(?timeout) = mailbox.Receive(timeout=defaultArg timeout defaultTimeout) - member _.TryReceive(?timeout) = + member __.TryReceive(?timeout) = mailbox.TryReceive(timeout=defaultArg timeout defaultTimeout) - member _.Scan(scanner: 'Msg -> (Async<'T>) option, ?timeout) = + member __.Scan(scanner: 'Msg -> (Async<'T>) option, ?timeout) = mailbox.Scan(scanner, timeout=defaultArg timeout defaultTimeout) - member _.TryScan(scanner: 'Msg -> (Async<'T>) option, ?timeout) = + member __.TryScan(scanner: 'Msg -> (Async<'T>) option, ?timeout) = mailbox.TryScan(scanner, timeout=defaultArg timeout defaultTimeout) interface System.IDisposable with - member _.Dispose() = (mailbox :> IDisposable).Dispose() + member __.Dispose() = (mailbox :> IDisposable).Dispose() static member Start(body, ?cancellationToken) = let mailboxProcessor = new MailboxProcessor<'Msg>(body, ?cancellationToken=cancellationToken) diff --git a/src/fsharp/FSharp.Core/map.fs b/src/fsharp/FSharp.Core/map.fs index 062bb1424da..bbe38a40140 100644 --- a/src/fsharp/FSharp.Core/map.fs +++ b/src/fsharp/FSharp.Core/map.fs @@ -5,27 +5,25 @@ namespace Microsoft.FSharp.Collections open System open System.Collections.Generic open System.Diagnostics -open System.Runtime.CompilerServices open System.Text open Microsoft.FSharp.Core open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators [] [] -type internal MapTree<'Key, 'Value>(k: 'Key, v: 'Value, h: int) = - member _.Height = h +type internal MapTree<'Key, 'Value>(k: 'Key, v: 'Value) = member _.Key = k member _.Value = v - new(k: 'Key, v: 'Value) = MapTree(k,v,1) - + [] [] [] type internal MapTreeNode<'Key, 'Value>(k:'Key, v:'Value, left:MapTree<'Key, 'Value>, right: MapTree<'Key, 'Value>, h: int) = - inherit MapTree<'Key,'Value>(k, v, h) + inherit MapTree<'Key,'Value>(k, v) + member _.Left = left member _.Right = right - + member _.Height = h [] module MapTree = @@ -34,19 +32,14 @@ module MapTree = let inline isEmpty (m:MapTree<'Key, 'Value>) = isNull m - let inline private asNode(value:MapTree<'Key,'Value>) : MapTreeNode<'Key,'Value> = - value :?> MapTreeNode<'Key,'Value> - let rec sizeAux acc (m:MapTree<'Key, 'Value>) = if isEmpty m then acc else - if m.Height = 1 then - acc + 1 - else - let mn = asNode m - sizeAux (sizeAux (acc+1) mn.Left) mn.Right - + match m with + | :? MapTreeNode<'Key, 'Value> as mn -> sizeAux (sizeAux (acc+1) mn.Left) mn.Right + | _ -> acc + 1 + let size x = sizeAux 0 x #if TRACE_SETS_AND_MAPS @@ -73,11 +66,11 @@ module MapTree = (totalSizeOnMapLookup / float numLookups)) System.Console.WriteLine("#largestMapSize = {0}, largestMapStackTrace = {1}", largestMapSize, largestMapStackTrace) - let MapTree (k,v) = + let MapTree n = report() numOnes <- numOnes + 1 totalSizeOnNodeCreation <- totalSizeOnNodeCreation + 1.0 - MapTree (k,v) + MapTree n let MapTreeNode (x, l, v, r, h) = report() @@ -89,7 +82,10 @@ module MapTree = let inline height (m: MapTree<'Key, 'Value>) = if isEmpty m then 0 - else m.Height + else + match m with + | :? MapTreeNode<'Key, 'Value> as mn -> mn.Height + | _ -> 1 [] let tolerance = 2 @@ -102,6 +98,9 @@ module MapTree = MapTree(k,v) else MapTreeNode(k,v,l,r,m+1) :> MapTree<'Key, 'Value> // new map is higher by 1 than the highest + + let inline private asNode(value:MapTree<'Key,'Value>) : MapTreeNode<'Key,'Value> = + value :?> MapTreeNode<'Key,'Value> let rebalance t1 (k: 'Key) (v: 'Value) t2 : MapTree<'Key, 'Value> = let t1h = height t1 @@ -130,37 +129,33 @@ module MapTree = if isEmpty m then MapTree(k,v) else let c = comparer.Compare(k,m.Key) - if m.Height = 1 then - if c < 0 then MapTreeNode (k,v,empty,m,2) :> MapTree<'Key, 'Value> - elif c = 0 then MapTree(k,v) - else MapTreeNode (k,v,m,empty,2) :> MapTree<'Key, 'Value> - else - let mn = asNode m + match m with + | :? MapTreeNode<'Key, 'Value> as mn -> if c < 0 then rebalance (add comparer k v mn.Left) mn.Key mn.Value mn.Right elif c = 0 then MapTreeNode(k,v,mn.Left,mn.Right,mn.Height) :> MapTree<'Key, 'Value> else rebalance mn.Left mn.Key mn.Value (add comparer k v mn.Right) - + | _ -> + if c < 0 then MapTreeNode (k,v,empty,m,2) :> MapTree<'Key, 'Value> + elif c = 0 then MapTree(k,v) + else MapTreeNode (k,v,m,empty,2) :> MapTree<'Key, 'Value> + let rec tryGetValue (comparer: IComparer<'Key>) k (v: byref<'Value>) (m: MapTree<'Key, 'Value>) = if isEmpty m then false else let c = comparer.Compare(k, m.Key) if c = 0 then v <- m.Value; true else - if m.Height = 1 then false - else - let mn = asNode m + match m with + | :? MapTreeNode<'Key, 'Value> as mn -> tryGetValue comparer k &v (if c < 0 then mn.Left else mn.Right) - - [] - let throwKeyNotFound() = raise (KeyNotFoundException()) - - [] + | _ -> false + let find (comparer: IComparer<'Key>) k (m: MapTree<'Key, 'Value>) = let mutable v = Unchecked.defaultof<'Value> if tryGetValue comparer k &v m then v else - throwKeyNotFound() + raise (KeyNotFoundException()) let tryFind (comparer: IComparer<'Key>) k (m: MapTree<'Key, 'Value>) = let mutable v = Unchecked.defaultof<'Value> @@ -175,14 +170,13 @@ module MapTree = let rec partitionAux (comparer: IComparer<'Key>) (f: OptimizedClosures.FSharpFunc<_, _, _>) (m: MapTree<'Key, 'Value>) acc = if isEmpty m then acc else - if m.Height = 1 then - partition1 comparer f m.Key m.Value acc - else - let mn = asNode m + match m with + | :? MapTreeNode<'Key, 'Value> as mn -> let acc = partitionAux comparer f mn.Right acc let acc = partition1 comparer f mn.Key mn.Value acc partitionAux comparer f mn.Left acc - + | _ -> partition1 comparer f m.Key m.Value acc + let partition (comparer: IComparer<'Key>) f m = partitionAux comparer (OptimizedClosures.FSharpFunc<_, _, _>.Adapt f) m (empty, empty) @@ -192,14 +186,12 @@ module MapTree = let rec filterAux (comparer: IComparer<'Key>) (f: OptimizedClosures.FSharpFunc<_, _, _>) (m: MapTree<'Key, 'Value>) acc = if isEmpty m then acc else - if m.Height = 1 then - filter1 comparer f m.Key m.Value acc - else - let mn = asNode m + match m with + | :? MapTreeNode<'Key, 'Value> as mn -> let acc = filterAux comparer f mn.Left acc let acc = filter1 comparer f mn.Key mn.Value acc filterAux comparer f mn.Right acc - + | _ -> filter1 comparer f m.Key m.Value acc let filter (comparer: IComparer<'Key>) f m = filterAux comparer (OptimizedClosures.FSharpFunc<_, _, _>.Adapt f) m empty @@ -207,21 +199,18 @@ module MapTree = let rec spliceOutSuccessor (m: MapTree<'Key, 'Value>) = if isEmpty m then failwith "internal error: Map.spliceOutSuccessor" else - if m.Height = 1 then - m.Key, m.Value, empty - else - let mn = asNode m + match m with + | :? MapTreeNode<'Key, 'Value> as mn -> if isEmpty mn.Left then mn.Key, mn.Value, mn.Right else let k3, v3, l' = spliceOutSuccessor mn.Left in k3, v3, mk l' mn.Key mn.Value mn.Right + | _ -> m.Key, m.Value, empty let rec remove (comparer: IComparer<'Key>) k (m: MapTree<'Key, 'Value>) = if isEmpty m then empty else let c = comparer.Compare(k, m.Key) - if m.Height = 1 then - if c = 0 then empty else m - else - let mn = asNode m + match m with + | :? MapTreeNode<'Key, 'Value> as mn -> if c < 0 then rebalance (remove comparer k mn.Left) mn.Key mn.Value mn.Right elif c = 0 then if isEmpty mn.Left then mn.Right @@ -230,7 +219,8 @@ module MapTree = let sk, sv, r' = spliceOutSuccessor mn.Right mk mn.Left sk sv r' else rebalance mn.Left mn.Key mn.Value (remove comparer k mn.Right) - + | _ -> + if c = 0 then empty else m let rec change (comparer: IComparer<'Key>) k (u: 'Value option -> 'Value option) (m: MapTree<'Key, 'Value>) : MapTree<'Key,'Value> = if isEmpty m then @@ -238,22 +228,8 @@ module MapTree = | None -> m | Some v -> MapTree (k, v) else - if m.Height = 1 then - let c = comparer.Compare(k, m.Key) - if c < 0 then - match u None with - | None -> m - | Some v -> MapTreeNode (k, v, empty, m, 2) :> MapTree<'Key,'Value> - elif c = 0 then - match u (Some m.Value) with - | None -> empty - | Some v -> MapTree (k, v) - else - match u None with - | None -> m - | Some v -> MapTreeNode (k, v, m, empty, 2) :> MapTree<'Key,'Value> - else - let mn = asNode m + match m with + | :? MapTreeNode<'Key, 'Value> as mn -> let c = comparer.Compare(k, mn.Key) if c < 0 then rebalance (change comparer k u mn.Left) mn.Key mn.Value mn.Right @@ -268,28 +244,37 @@ module MapTree = | Some v -> MapTreeNode (k, v, mn.Left, mn.Right, mn.Height) :> MapTree<'Key,'Value> else rebalance mn.Left mn.Key mn.Value (change comparer k u mn.Right) + | _ -> + let c = comparer.Compare(k, m.Key) + if c < 0 then + match u None with + | None -> m + | Some v -> MapTreeNode (k, v, empty, m, 2) :> MapTree<'Key,'Value> + elif c = 0 then + match u (Some m.Value) with + | None -> empty + | Some v -> MapTree (k, v) + else + match u None with + | None -> m + | Some v -> MapTreeNode (k, v, m, empty, 2) :> MapTree<'Key,'Value> let rec mem (comparer: IComparer<'Key>) k (m: MapTree<'Key, 'Value>) = if isEmpty m then false else let c = comparer.Compare(k, m.Key) - if m.Height = 1 then - c = 0 - else - let mn = asNode m + match m with + | :? MapTreeNode<'Key, 'Value> as mn -> if c < 0 then mem comparer k mn.Left else (c = 0 || mem comparer k mn.Right) - + | _ -> c = 0 let rec iterOpt (f: OptimizedClosures.FSharpFunc<_, _, _>) (m: MapTree<'Key, 'Value>) = if isEmpty m then () else - if m.Height = 1 then - f.Invoke (m.Key, m.Value) - else - let mn = asNode m - iterOpt f mn.Left; f.Invoke (mn.Key, mn.Value); iterOpt f mn.Right - + match m with + | :? MapTreeNode<'Key, 'Value> as mn -> iterOpt f mn.Left; f.Invoke (mn.Key, mn.Value); iterOpt f mn.Right + | _ -> f.Invoke (m.Key, m.Value) let iter f m = iterOpt (OptimizedClosures.FSharpFunc<_, _, _>.Adapt f) m @@ -297,10 +282,8 @@ module MapTree = let rec tryPickOpt (f: OptimizedClosures.FSharpFunc<_, _, _>) (m: MapTree<'Key, 'Value>) = if isEmpty m then None else - if m.Height = 1 then - f.Invoke (m.Key, m.Value) - else - let mn = asNode m + match m with + | :? MapTreeNode<'Key, 'Value> as mn -> match tryPickOpt f mn.Left with | Some _ as res -> res | None -> @@ -308,7 +291,7 @@ module MapTree = | Some _ as res -> res | None -> tryPickOpt f mn.Right - + | _ -> f.Invoke (m.Key, m.Value) let tryPick f m = tryPickOpt (OptimizedClosures.FSharpFunc<_, _, _>.Adapt f) m @@ -316,12 +299,9 @@ module MapTree = let rec existsOpt (f: OptimizedClosures.FSharpFunc<_, _, _>) (m: MapTree<'Key, 'Value>) = if isEmpty m then false else - if m.Height = 1 then - f.Invoke (m.Key, m.Value) - else - let mn = asNode m - existsOpt f mn.Left || f.Invoke (mn.Key, mn.Value) || existsOpt f mn.Right - + match m with + | :? MapTreeNode<'Key, 'Value> as mn -> existsOpt f mn.Left || f.Invoke (mn.Key, mn.Value) || existsOpt f mn.Right + | _ -> f.Invoke (m.Key, m.Value) let exists f m = existsOpt (OptimizedClosures.FSharpFunc<_, _, _>.Adapt f) m @@ -329,12 +309,9 @@ module MapTree = let rec forallOpt (f: OptimizedClosures.FSharpFunc<_, _, _>) (m: MapTree<'Key, 'Value>) = if isEmpty m then true else - if m.Height = 1 then - f.Invoke (m.Key, m.Value) - else - let mn = asNode m - forallOpt f mn.Left && f.Invoke (mn.Key, mn.Value) && forallOpt f mn.Right - + match m with + | :? MapTreeNode<'Key, 'Value> as mn -> forallOpt f mn.Left && f.Invoke (mn.Key, mn.Value) && forallOpt f mn.Right + | _ -> f.Invoke (m.Key, m.Value) let forall f m = @@ -343,27 +320,24 @@ module MapTree = let rec map (f:'Value -> 'Result) (m: MapTree<'Key, 'Value>) : MapTree<'Key, 'Result> = if isEmpty m then empty else - if m.Height = 1 then - MapTree (m.Key, f m.Value) - else - let mn = asNode m + match m with + | :? MapTreeNode<'Key, 'Value> as mn -> let l2 = map f mn.Left let v2 = f mn.Value let r2 = map f mn.Right MapTreeNode (mn.Key, v2, l2, r2, mn.Height) :> MapTree<'Key, 'Result> + | _ -> MapTree (m.Key, f m.Value) let rec mapiOpt (f: OptimizedClosures.FSharpFunc<'Key, 'Value, 'Result>) (m: MapTree<'Key, 'Value>) = if isEmpty m then empty else - if m.Height = 1 then - MapTree (m.Key, f.Invoke (m.Key, m.Value)) - else - let mn = asNode m + match m with + | :? MapTreeNode<'Key, 'Value> as mn -> let l2 = mapiOpt f mn.Left let v2 = f.Invoke (mn.Key, mn.Value) let r2 = mapiOpt f mn.Right MapTreeNode (mn.Key, v2, l2, r2, mn.Height) :> MapTree<'Key, 'Result> - + | _ -> MapTree (m.Key, f.Invoke (m.Key, m.Value)) let mapi f m = mapiOpt (OptimizedClosures.FSharpFunc<_, _, _>.Adapt f) m @@ -371,14 +345,12 @@ module MapTree = let rec foldBackOpt (f: OptimizedClosures.FSharpFunc<_, _, _, _>) (m: MapTree<'Key, 'Value>) x = if isEmpty m then x else - if m.Height = 1 then - f.Invoke (m.Key, m.Value, x) - else - let mn = asNode m + match m with + | :? MapTreeNode<'Key, 'Value> as mn -> let x = foldBackOpt f mn.Right x let x = f.Invoke (mn.Key, mn.Value, x) foldBackOpt f mn.Left x - + | _ -> f.Invoke (m.Key, m.Value, x) let foldBack f m x = foldBackOpt (OptimizedClosures.FSharpFunc<_, _, _, _>.Adapt f) m x @@ -386,13 +358,12 @@ module MapTree = let rec foldOpt (f: OptimizedClosures.FSharpFunc<_, _, _, _>) x (m: MapTree<'Key, 'Value>) = if isEmpty m then x else - if m.Height = 1 then - f.Invoke (x, m.Key, m.Value) - else - let mn = asNode m + match m with + | :? MapTreeNode<'Key, 'Value> as mn -> let x = foldOpt f x mn.Left let x = f.Invoke (x, mn.Key, mn.Value) foldOpt f x mn.Right + | _ -> f.Invoke (x, m.Key, m.Value) let fold f x m = foldOpt (OptimizedClosures.FSharpFunc<_, _, _, _>.Adapt f) x m @@ -401,19 +372,19 @@ module MapTree = let rec foldFromTo (f: OptimizedClosures.FSharpFunc<_, _, _, _>) (m: MapTree<'Key, 'Value>) x = if isEmpty m then x else - if m.Height = 1 then - let cLoKey = comparer.Compare(lo, m.Key) - let cKeyHi = comparer.Compare(m.Key, hi) - let x = if cLoKey <= 0 && cKeyHi <= 0 then f.Invoke (m.Key, m.Value, x) else x - x - else - let mn = asNode m + match m with + | :? MapTreeNode<'Key, 'Value> as mn -> let cLoKey = comparer.Compare(lo, mn.Key) let cKeyHi = comparer.Compare(mn.Key, hi) let x = if cLoKey < 0 then foldFromTo f mn.Left x else x let x = if cLoKey <= 0 && cKeyHi <= 0 then f.Invoke (mn.Key, mn.Value, x) else x let x = if cKeyHi < 0 then foldFromTo f mn.Right x else x x + | _ -> + let cLoKey = comparer.Compare(lo, m.Key) + let cKeyHi = comparer.Compare(m.Key, hi) + let x = if cLoKey <= 0 && cKeyHi <= 0 then f.Invoke (m.Key, m.Value, x) else x + x if comparer.Compare(lo, hi) = 1 then x else foldFromTo f m x @@ -424,12 +395,9 @@ module MapTree = let rec loop (m: MapTree<'Key, 'Value>) acc = if isEmpty m then acc else - if m.Height = 1 then - (m.Key, m.Value) :: acc - else - let mn = asNode m - loop mn.Left ((mn.Key, mn.Value) :: loop mn.Right acc) - + match m with + | :? MapTreeNode<'Key, 'Value> as mn -> loop mn.Left ((mn.Key, mn.Value) :: loop mn.Right acc) + | _ -> (m.Key, m.Value) :: acc loop m [] let toArray m = @@ -480,11 +448,9 @@ module MapTree = | m :: rest -> if isEmpty m then collapseLHS rest else - if m.Height = 1 then - stack - else - let mn = asNode m - collapseLHS (mn.Left :: MapTree (mn.Key, mn.Value) :: mn.Right :: rest) + match m with + | :? MapTreeNode<'Key, 'Value> as mn -> collapseLHS (mn.Left :: MapTree (mn.Key, mn.Value) :: mn.Right :: rest) + | _ -> stack let mkIterator m = { stack = collapseLHS [m]; started = false } @@ -494,20 +460,15 @@ module MapTree = let alreadyFinished() = raise (InvalidOperationException(SR.GetString(SR.enumerationAlreadyFinished))) - - let unexpectedStackForCurrent() = - failwith "Please report error: Map iterator, unexpected stack for current" - - let unexpectedStackForMoveNext() = - failwith "Please report error: Map iterator, unexpected stack for moveNext" let current i = if i.started then match i.stack with | [] -> alreadyFinished() | m :: _ -> - if m.Height = 1 then KeyValuePair<_, _>(m.Key, m.Value) - else unexpectedStackForCurrent() + match m with + | :? MapTreeNode<'Key, 'Value> -> failwith "Please report error: Map iterator, unexpected stack for current" + | _ -> new KeyValuePair<_, _>(m.Key, m.Value) else notStarted() @@ -516,10 +477,11 @@ module MapTree = match i.stack with | [] -> false | m :: rest -> - if m.Height = 1 then + match m with + | :? MapTreeNode<'Key, 'Value> -> failwith "Please report error: Map iterator, unexpected stack for moveNext" + | _ -> i.stack <- collapseLHS rest not i.stack.IsEmpty - else unexpectedStackForMoveNext() else i.started <- true (* The first call to MoveNext "starts" the enumeration. *) not i.stack.IsEmpty @@ -527,15 +489,15 @@ module MapTree = let mkIEnumerator m = let mutable i = mkIterator m { new IEnumerator<_> with - member _.Current = current i + member __.Current = current i interface System.Collections.IEnumerator with - member _.Current = box (current i) - member _.MoveNext() = moveNext i - member _.Reset() = i <- mkIterator m + member __.Current = box (current i) + member __.MoveNext() = moveNext i + member __.Reset() = i <- mkIterator m interface System.IDisposable with - member _.Dispose() = ()} + member __.Dispose() = ()} [>)>] [] @@ -565,17 +527,17 @@ type Map<[]'Key, [(comparer, MapTree.empty) [] - member _.OnSerializing(context: System.Runtime.Serialization.StreamingContext) = + member __.OnSerializing(context: System.Runtime.Serialization.StreamingContext) = ignore context serializedData <- MapTree.toArray tree |> Array.map (fun (k, v) -> KeyValuePair(k, v)) // Do not set this to null, since concurrent threads may also be serializing the data //[] - //member _.OnSerialized(context: System.Runtime.Serialization.StreamingContext) = + //member __.OnSerialized(context: System.Runtime.Serialization.StreamingContext) = // serializedData <- null [] - member _.OnDeserialized(context: System.Runtime.Serialization.StreamingContext) = + member __.OnDeserialized(context: System.Runtime.Serialization.StreamingContext) = ignore context comparer <- LanguagePrimitives.FastGenericComparer<'Key> tree <- serializedData |> Array.map (fun kvp -> kvp.Key, kvp.Value) |> MapTree.ofArray comparer @@ -717,10 +679,10 @@ type Map<[]'Key, [> with - member _.GetEnumerator() = MapTree.mkIEnumerator tree + member __.GetEnumerator() = MapTree.mkIEnumerator tree interface System.Collections.IEnumerable with - member _.GetEnumerator() = (MapTree.mkIEnumerator tree :> System.Collections.IEnumerator) + member __.GetEnumerator() = (MapTree.mkIEnumerator tree :> System.Collections.IEnumerator) interface IDictionary<'Key, 'Value> with member m.Item @@ -742,17 +704,17 @@ type Map<[]'Key, [> with - member _.Add 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 __.Clear() = raise (NotSupportedException(SR.GetString(SR.mapCannotBeMutated))) - member _.Remove x = ignore x; raise (NotSupportedException(SR.GetString(SR.mapCannotBeMutated))) + member __.Remove x = ignore x; raise (NotSupportedException(SR.GetString(SR.mapCannotBeMutated))) member m.Contains x = m.ContainsKey x.Key && Unchecked.equals m.[x.Key] x.Value - member _.CopyTo(arr, i) = MapTree.copyToArray tree arr i + member __.CopyTo(arr, i) = MapTree.copyToArray tree arr i - member _.IsReadOnly = true + member __.IsReadOnly = true member m.Count = m.Count diff --git a/src/fsharp/FSharp.Core/option.fsi b/src/fsharp/FSharp.Core/option.fsi index 1c4c74f78a8..0bb89c1468f 100644 --- a/src/fsharp/FSharp.Core/option.fsi +++ b/src/fsharp/FSharp.Core/option.fsi @@ -15,13 +15,6 @@ module Option = /// Returns true if the option is not None. /// The input option. /// - /// - /// - /// None |> Option.isSome // evaluates to false - /// Some 42 |> Option.isSome // evaluates to true - /// - /// - /// /// True if the option is not None. [] val inline isSome: option:'T option -> bool @@ -30,13 +23,6 @@ module Option = /// /// The input option. /// - /// - /// - /// None |> Option.isNone // evaluates to true - /// Some 42 |> Option.isNone // evaluates to false - /// - /// - /// /// True if the option is None. [] val inline isNone: option:'T option -> bool @@ -47,15 +33,7 @@ module Option = /// The input option. /// /// The option if the option is Some, else the default value. - /// /// Identical to the built-in operator, except with the arguments swapped. - /// - /// - /// - /// (99, None) ||> Option.defaultValue // evaluates to 99 - /// (99, Some 42) ||> Option.defaultValue // evaluates to 42 - /// - /// [] val defaultValue: value:'T -> option:'T option -> 'T @@ -66,13 +44,6 @@ module Option = /// /// The option if the option is Some, else the result of evaluating . /// is not evaluated unless is None. - /// - /// - /// - /// None |> Option.defaultWith (fun () -> 99) // evaluates to 99 - /// Some 42 |> Option.defaultWith (fun () -> 99) // evaluates to 42 - /// - /// [] val defaultWith: defThunk:(unit -> 'T) -> option:'T option -> 'T @@ -81,15 +52,6 @@ module Option = /// The value to use if is None. /// The input option. /// - /// - /// - /// (None, None) ||> Option.orElse // evaluates to None - /// (Some 99, None) ||> Option.orElse // evaluates to Some 99 - /// (None, Some 42) ||> Option.orElse // evaluates to Some 42 - /// (Some 99, Some 42) ||> Option.orElse // evaluates to Some 42 - /// - /// - /// /// The option if the option is Some, else the alternate option. [] val orElse: ifNone:'T option -> option:'T option -> 'T option @@ -101,15 +63,6 @@ module Option = /// /// The option if the option is Some, else the result of evaluating . /// is not evaluated unless is None. - /// - /// - /// - /// None |> Option.orElseWith (fun () -> None) // evaluates to None - /// None |> Option.orElseWith (fun () -> (Some 99)) // evaluates to Some 99 - /// Some 42 |> Option.orElseWith (fun () -> None) // evaluates to Some 42 - /// Some 42 |> Option.orElseWith (fun () -> (Some 99)) // evaluates to Some 42 - /// - /// [] val orElseWith: ifNoneThunk:(unit -> 'T option) -> option:'T option -> 'T option @@ -117,13 +70,6 @@ module Option = /// /// The input option. /// - /// - /// - /// Some 42 |> Option.get // evaluates to 42 - /// None |> Option.get // throws exception! - /// - /// - /// /// The value within the option. /// Thrown when the option is None. [] @@ -133,13 +79,6 @@ module Option = /// /// The input option. /// - /// - /// - /// None |> Option.count // evaluates to 0 - /// Some 99 |> Option.count // evaluates to 1 - /// - /// - /// /// A zero if the option is None, a one otherwise. [] val count: option:'T option -> int @@ -150,14 +89,6 @@ module Option = /// The initial state. /// The input option. /// - /// - /// - /// (0, None) ||> Option.fold (fun accum x -> accum + x * 2) // evaluates to 0 - /// (0, Some 1) ||> Option.fold (fun accum x -> accum + x * 2) // evaluates to 2 - /// (10, Some 1) ||> Option.fold (fun accum x -> accum + x * 2) // evaluates to 12 - /// - /// - /// /// The original state if the option is None, otherwise it returns the updated state with the folder /// and the option value. [] @@ -169,14 +100,6 @@ module Option = /// The input option. /// The initial state. /// - /// - /// - /// (None, 0) ||> Option.foldBack (fun x accum -> accum + x * 2) // evaluates to 0 - /// (Some 1, 0) ||> Option.foldBack (fun x accum -> accum + x * 2) // evaluates to 2 - /// (Some 1, 10) ||> Option.foldBack (fun x accum -> accum + x * 2) // evaluates to 12 - /// - /// - /// /// The original state if the option is None, otherwise it returns the updated state with the folder /// and the option value. [] @@ -187,14 +110,6 @@ module Option = /// A function that evaluates to a boolean when given a value from the option type. /// The input option. /// - /// - /// - /// None |> Option.exists (fun x -> x >= 5) // evaluates to false - /// Some 42 |> Option.exists (fun x -> x >= 5) // evaluates to true - /// Some 4 |> Option.exists (fun x -> x >= 5) // evaluates to false - /// - /// - /// /// False if the option is None, otherwise it returns the result of applying the predicate /// to the option value. [] @@ -205,14 +120,6 @@ module Option = /// A function that evaluates to a boolean when given a value from the option type. /// The input option. /// - /// - /// - /// None |> Option.forall (fun x -> x >= 5) // evaluates to true - /// Some 42 |> Option.forall (fun x -> x >= 5) // evaluates to true - /// Some 4 |> Option.forall (fun x -> x >= 5) // evaluates to false - /// - /// - /// /// True if the option is None, otherwise it returns the result of applying the predicate /// to the option value. [] @@ -223,14 +130,6 @@ module Option = /// The value to test for equality. /// The input option. /// - /// - /// - /// (99, None) ||> Option.contains // evaluates to false - /// (99, Some 99) ||> Option.contains // evaluates to true - /// (99, Some 100) ||> Option.contains // evaluates to false - /// - /// - /// /// True if the option is Some and contains a value equal to , otherwise false. [] val inline contains: value:'T -> option:'T option -> bool when 'T : equality @@ -240,13 +139,6 @@ module Option = /// A function to apply to the option value. /// The input option. /// - /// - /// - /// None |> Option.iter (printfn "%s") // does nothing - /// Some "Hello world" |> Option.iter (printfn "%s") // prints "Hello world" - /// - /// - /// /// Unit if the option is None, otherwise it returns the result of applying the predicate /// to the option value. [] @@ -257,13 +149,6 @@ module Option = /// A function to apply to the option value. /// The input option. /// - /// - /// - /// None |> Option.map (fun x -> x * 2) // evaluates to None - /// Some 42 |> Option.map (fun x -> x * 2) // evaluates to Some 84 - /// - /// - /// /// An option of the input value after applying the mapping function, or None if the input is None. [] val map: mapping:('T -> 'U) -> option:'T option -> 'U option @@ -274,15 +159,6 @@ module Option = /// The first option. /// The second option. /// - /// - /// - /// (None, None) ||> Option.map2 (fun x y -> x + y) // evaluates to None - /// (Some 5, None) ||> Option.map2 (fun x y -> x + y) // evaluates to None - /// (None, Some 10) ||> Option.map2 (fun x y -> x + y) // evaluates to None - /// (Some 5, Some 10) ||> Option.map2 (fun x y -> x + y) // evaluates to Some 15 - /// - /// - /// /// An option of the input values after applying the mapping function, or None if either input is None. [] val map2: mapping:('T1 -> 'T2 -> 'U) -> option1: 'T1 option -> option2: 'T2 option -> 'U option @@ -294,16 +170,6 @@ module Option = /// The second option. /// The third option. /// - /// - /// - /// (None, None, None) |||> Option.map3 (fun x y z -> x + y + z) // evaluates to None - /// (Some 100, None, None) |||> Option.map3 (fun x y z -> x + y + z) // evaluates to None - /// (None, Some 100, None) |||> Option.map3 (fun x y z -> x + y + z) // evaluates to None - /// (None, None, Some 100) |||> Option.map3 (fun x y z -> x + y + z) // evaluates to None - /// (Some 5, Some 100, Some 10) |||> Option.map3 (fun x y z -> x + y + z) // evaluates to Some 115 - /// - /// - /// /// An option of the input values after applying the mapping function, or None if any input is None. [] val map3: mapping:('T1 -> 'T2 -> 'T3 -> 'U) -> option1: 'T1 option -> option2: 'T2 option -> option3: 'T3 option -> 'U option @@ -314,18 +180,6 @@ module Option = /// an option containing a value of type U. /// The input option. /// - /// - /// - /// let tryParse input = - /// match System.Int32.TryParse input with - /// | true, v -> Some v - /// | false, _ -> None - /// None |> Option.bind tryParse // evaluates to None - /// Some "42" |> Option.bind tryParse // evaluates to Some 42 - /// Some "Forty-two" |> Option.bind tryParse // evaluates to None - /// - /// - /// /// An option of the output type of the binder. [] val bind: binder:('T -> 'U option) -> option:'T option -> 'U option @@ -334,16 +188,8 @@ module Option = /// /// The input option. /// - /// The input value if the value is Some; otherwise, None. + /// An option of the output type of the binder. /// flatten is equivalent to bind id. - /// - /// - /// - /// None |> Option.flatten // evaluates to None - /// (Some (None)) |> Option.flatten // evaluates to None - /// (Some (Some 42)) |> Option.flatten // evaluates to Some 42 - /// - /// [] val flatten: option:'T option option -> 'T option @@ -352,14 +198,6 @@ module Option = /// A function that evaluates whether the value contained in the option should remain, or be filtered out. /// The input option. /// - /// - /// - /// None |> Option.filter (fun x -> x >= 5) // evaluates to None - /// Some 42 |> Option.filter (fun x -> x >= 5) // evaluates to Some 42 - /// Some 4 |> Option.filter (fun x -> x >= 5) // evaluates to None - /// - /// - /// /// The input if the predicate evaluates to true; otherwise, None. [] val filter: predicate:('T -> bool) -> option:'T option -> 'T option @@ -368,13 +206,6 @@ module Option = /// /// The input option. /// - /// - /// - /// None |> Option.toArray // evaluates to [||] - /// Some 42 |> Option.toArray // evaluates to [|42|] - /// - /// - /// /// The result array. [] val toArray: option:'T option -> 'T[] @@ -383,13 +214,6 @@ module Option = /// /// The input option. /// - /// - /// - /// None |> Option.toList // evaluates to [] - /// Some 42 |> Option.toList // evaluates to [42] - /// - /// - /// /// The result list. [] val toList: option:'T option -> 'T list @@ -398,13 +222,6 @@ module Option = /// /// The input option. /// - /// - /// - /// None |> Option.toNullable // evaluates to new System.Nullable<int>() - /// Some 42 |> Option.toNullable // evaluates to new System.Nullable(42) - /// - /// - /// /// The result value. [] val toNullable: option:'T option -> Nullable<'T> @@ -413,28 +230,14 @@ module Option = /// /// The input nullable value. /// - /// - /// - /// System.Nullable<int>() |> Option.ofNullable // evaluates to None - /// System.Nullable(42) |> Option.ofNullable // evaluates to Some 42 - /// - /// - /// /// The result option. [] - val ofNullable: value:Nullable<'T> -> 'T option + val ofNullable: value:Nullable<'T> -> 'T option /// Convert a potentially null value to an option. /// /// The input value. /// - /// - /// - /// (null: string) |> Option.ofObj // evaluates to None - /// "not a null string" |> Option.ofObj // evaluates to (Some "not a null string") - /// - /// - /// /// The result option. [] val ofObj: value: 'T -> 'T option when 'T : null @@ -443,13 +246,6 @@ module Option = /// /// The input value. /// - /// - /// - /// None |> Option.toObj // evaluates to null - /// Some "not a null string" |> Option.toObj // evaluates to "not a null string" - /// - /// - /// /// The result value, which is null if the input was None. [] val toObj: value: 'T option -> 'T when 'T : null @@ -635,7 +431,7 @@ module ValueOption = /// /// The input value option. /// - /// The input value if the value is Some; otherwise, ValueNone. + /// A value option of the output type of the binder. /// flatten is equivalent to bind id. [] val flatten: voption: 'T voption voption -> 'T voption @@ -679,7 +475,7 @@ module ValueOption = /// /// The result value option. [] - val ofNullable: value:Nullable<'T> -> 'T voption + val ofNullable: value:Nullable<'T> -> 'T voption /// Convert a potentially null value to a value option. /// diff --git a/src/fsharp/FSharp.Core/prim-types.fs b/src/fsharp/FSharp.Core/prim-types.fs index 319481c6814..01908497136 100644 --- a/src/fsharp/FSharp.Core/prim-types.fs +++ b/src/fsharp/FSharp.Core/prim-types.fs @@ -177,7 +177,7 @@ namespace Microsoft.FSharp.Core inherit System.Attribute() member x.CompiledName = compiledName - [] + [] [] type StructAttribute() = inherit System.Attribute() @@ -2140,7 +2140,7 @@ namespace Microsoft.FSharp.Core let inline MakeGenericComparer<'T>() = { new System.Collections.Generic.IComparer<'T> with - member _.Compare(x,y) = GenericComparison x y } + member __.Compare(x,y) = GenericComparison x y } let CharComparer = MakeGenericComparer() let StringComparer = MakeGenericComparer() @@ -5313,20 +5313,20 @@ namespace Microsoft.FSharp.Core state.Current { new IEnumerator<'T> with - member _.Current = current () + member __.Current = current () interface System.IDisposable with - member _.Dispose () = () + member __.Dispose () = () interface IEnumerator with - member _.Current = box (current ()) + member __.Current = box (current ()) - member _.Reset () = + member __.Reset () = state.Started <- false state.Complete <- false state.Current <- Unchecked.defaultof<_> - member _.MoveNext () = + member __.MoveNext () = if not state.Started then state.Started <- true state.Current <- n @@ -5344,7 +5344,7 @@ namespace Microsoft.FSharp.Core not state.Complete} { new IEnumerable<'T> with - member _.GetEnumerator () = variableStepRangeEnumerator () + member __.GetEnumerator () = variableStepRangeEnumerator () interface IEnumerable with member this.GetEnumerator () = (variableStepRangeEnumerator ()) :> IEnumerator } @@ -5371,15 +5371,15 @@ namespace Microsoft.FSharp.Core derefValue { new IEnumerator<'T> with - member _.Current = current () + member __.Current = current () interface System.IDisposable with - member _.Dispose () = () + member __.Dispose () = () interface IEnumerator with - member _.Current = box (current ()) - member _.Reset () = value <- n - LanguagePrimitives.GenericOne - member _.MoveNext () = + member __.Current = box (current ()) + member __.Reset () = value <- n - LanguagePrimitives.GenericOne + member __.MoveNext () = let derefValue = value if derefValue < m then value <- derefValue + LanguagePrimitives.GenericOne @@ -5390,10 +5390,10 @@ namespace Microsoft.FSharp.Core else false } { new IEnumerable<'T> with - member _.GetEnumerator () = singleStepRangeEnumerator () + member __.GetEnumerator () = singleStepRangeEnumerator () interface IEnumerable with - member _.GetEnumerator () = (singleStepRangeEnumerator ()) :> IEnumerator } + member __.GetEnumerator () = (singleStepRangeEnumerator ()) :> IEnumerator } // For RangeStepGeneric, zero and add are functions representing the static resolution of GenericZero and (+) // for the particular static type. diff --git a/src/fsharp/FSharp.Core/prim-types.fsi b/src/fsharp/FSharp.Core/prim-types.fsi index 2ed374eb5ce..064b621e56a 100644 --- a/src/fsharp/FSharp.Core/prim-types.fsi +++ b/src/fsharp/FSharp.Core/prim-types.fsi @@ -199,7 +199,7 @@ namespace Microsoft.FSharp.Core /// Adding this attribute to a type causes it to be represented using a CLI struct. /// /// Attributes - [] + [] [] type StructAttribute = inherit Attribute diff --git a/src/fsharp/FSharp.Core/printf.fs b/src/fsharp/FSharp.Core/printf.fs index 0dbdb801c88..05ffcce3ea6 100644 --- a/src/fsharp/FSharp.Core/printf.fs +++ b/src/fsharp/FSharp.Core/printf.fs @@ -724,7 +724,7 @@ module internal PrintfImpl = else fun (v: obj) -> noJustificationCore (f v) true (isPositive v) prefix - /// contains functions to handle left/right and no justification case for numbers + /// contains functions to handle left\right and no justification case for numbers module Integer = let eliminateNative (v: obj) = @@ -821,27 +821,21 @@ module internal PrintfImpl = (rightJustify f prefix padChar isUnsigned) let getValueConverter (spec: FormatSpecifier) : ValueConverter = - match spec.TypeChar with - | 'd' | 'i' -> + let c = spec.TypeChar + if c = 'd' || c = 'i' then withPadding spec false toString - | 'u' -> + elif c = 'u' then withPadding spec true (toUnsigned >> toString) - | 'x' -> + elif c = 'x' then withPadding spec true (toFormattedString "x") - | 'X' -> + elif c = 'X' then withPadding spec true (toFormattedString "X") - | 'o' -> + elif c = 'o' then withPadding spec true (fun (v: obj) -> - // Convert.ToInt64 throws for uint64 with values above int64 range so cast directly match toUnsigned v with | :? uint64 as u -> Convert.ToString(int64 u, 8) | u -> Convert.ToString(Convert.ToInt64 u, 8)) - | 'B' -> - withPadding spec true (fun (v: obj) -> - match toUnsigned v with - | :? uint64 as u -> Convert.ToString(int64 u, 2) - | u -> Convert.ToString(Convert.ToInt64 u, 2)) - | _ -> invalidArg (nameof spec) "Invalid integer format" + else raise (ArgumentException()) module FloatAndDecimal = @@ -988,7 +982,7 @@ module internal PrintfImpl = Basic.withPadding spec (fun (c: obj) -> (unbox c).ToString()) | 'M' -> FloatAndDecimal.withPadding spec (fun _ -> "G") "G" // %M ignores precision - | 'd' | 'i' | 'u' | 'B' | 'o' | 'x' | 'X' -> + | 'd' | 'i' | 'x' | 'X' | 'u' | 'o'-> Integer.getValueConverter spec | 'e' | 'E' | 'f' | 'F' diff --git a/src/fsharp/FSharp.Core/quotations.fs b/src/fsharp/FSharp.Core/quotations.fs index aabae7bfda5..8c5c5c2824a 100644 --- a/src/fsharp/FSharp.Core/quotations.fs +++ b/src/fsharp/FSharp.Core/quotations.fs @@ -15,8 +15,8 @@ open Microsoft.FSharp.Collections open Microsoft.FSharp.Reflection open Microsoft.FSharp.Core.Printf open Microsoft.FSharp.Text.StructuredPrintfImpl -open Microsoft.FSharp.Text.StructuredPrintfImpl.Layout -open Microsoft.FSharp.Text.StructuredPrintfImpl.TaggedText +open Microsoft.FSharp.Text.StructuredPrintfImpl.LayoutOps +open Microsoft.FSharp.Text.StructuredPrintfImpl.TaggedTextOps #nowarn "52" // The value has been copied to ensure the original is not mutated by this operation @@ -244,7 +244,7 @@ and [] let expr (e: Expr ) = e.GetLayout long let exprs (es: Expr list) = es |> List.map expr let parens ls = bracketL (commaListL ls) - let pairL l1 l2 = bracketL (l1 ^^ sepL comma ^^ l2) + let pairL l1 l2 = bracketL (l1 ^^ sepL Literals.comma ^^ l2) let listL ls = squareBracketL (commaListL ls) let combTaggedL nm ls = wordL nm ^^ parens ls let combL nm ls = combTaggedL (tagKeyword nm) ls diff --git a/src/fsharp/FSharp.Core/reflect.fs b/src/fsharp/FSharp.Core/reflect.fs index 63b8d6d4651..aad98b162f2 100644 --- a/src/fsharp/FSharp.Core/reflect.fs +++ b/src/fsharp/FSharp.Core/reflect.fs @@ -158,87 +158,6 @@ module internal Impl = param) expr.Compile () - let compileTupleConstructor tupleEncField getTupleConstructorMethod typ = - let rec constituentTuple (typ: Type) elements startIndex = - Expression.New ( - getTupleConstructorMethod typ, - [ - let genericArgs = typ.GetGenericArguments () - - for paramIndex in 0 .. genericArgs.Length - 1 do - let genericArg = genericArgs.[paramIndex] - - if paramIndex = tupleEncField then - constituentTuple genericArg elements (startIndex + paramIndex) :> Expression - else - Expression.Convert (Expression.ArrayAccess (elements, Expression.Constant (startIndex + paramIndex)), genericArg) - ]) - - let elements = Expression.Parameter (typeof, "elements") - - let expr = - Expression.Lambda> ( - Expression.Convert ( - constituentTuple typ elements 0, - typeof - ), - elements - ) - - expr.Compile () - - let compileTupleReader tupleEncField getTupleElementAccessors typ = - let rec writeTupleIntoArray (typ: Type) (tuple: Expression) outputArray startIndex = seq { - let elements = - match getTupleElementAccessors typ with - // typ is a struct tuple and its elements are accessed via fields - | Choice1Of2 (fi: FieldInfo[]) -> fi |> Array.map (fun fi -> Expression.Field (tuple, fi), fi.FieldType) - // typ is a class tuple and its elements are accessed via properties - | Choice2Of2 (pi: PropertyInfo[]) -> pi |> Array.map (fun pi -> Expression.Property (tuple, pi), pi.PropertyType) - - for index, (element, elementType) in elements |> Array.indexed do - if index = tupleEncField then - let innerTupleParam = Expression.Parameter (elementType, "innerTuple") - Expression.Block ( - [ innerTupleParam ], - [ - yield Expression.Assign (innerTupleParam, element) :> Expression - yield! writeTupleIntoArray elementType innerTupleParam outputArray (startIndex + index) - ] - ) :> Expression - else - Expression.Assign ( - Expression.ArrayAccess (outputArray, Expression.Constant (index + startIndex)), - Expression.Convert (element, typeof) - ) :> Expression } - - let param = Expression.Parameter (typeof, "outerTuple") - let outputArray = Expression.Variable (typeof, "output") - let rec outputLength tupleEncField (typ: Type) = - let genericArgs = typ.GetGenericArguments () - - if genericArgs.Length > tupleEncField then - tupleEncField + outputLength tupleEncField genericArgs.[genericArgs.Length - 1] - else - genericArgs.Length - - let expr = - Expression.Lambda> ( - Expression.Block ( - [ outputArray ], - [ - yield Expression.Assign ( - outputArray, - Expression.NewArrayBounds (typeof, Expression.Constant (outputLength tupleEncField typ)) - ) :> Expression - yield! writeTupleIntoArray typ (Expression.Convert (param, typ)) outputArray 0 - yield outputArray :> Expression - ] - ), - param) - - expr.Compile () - //----------------------------------------------------------------- // ATTRIBUTE DECOMPILATION @@ -686,19 +605,16 @@ module internal Impl = (fun (args: obj[]) -> ctor.Invoke(BindingFlags.InvokeMethod ||| BindingFlags.Instance ||| BindingFlags.Public, null, args, null)) - let getTupleElementAccessors (typ: Type) = - if typ.IsValueType then - Choice1Of2 (typ.GetFields (instanceFieldFlags ||| BindingFlags.Public) |> orderTupleFields) - else - Choice2Of2 (typ.GetProperties (instancePropertyFlags ||| BindingFlags.Public) |> orderTupleProperties) - let rec getTupleReader (typ: Type) = let etys = typ.GetGenericArguments() // Get the reader for the outer tuple record let reader = - match getTupleElementAccessors typ with - | Choice1Of2 fi -> fun obj -> fi |> Array.map (fun f -> f.GetValue obj) - | Choice2Of2 pi -> fun obj -> pi |> Array.map (fun p -> p.GetValue (obj, null)) + 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 @@ -861,7 +777,7 @@ type UnionCaseInfo(typ: System.Type, tag: int) = let getMethInfo() = getUnionCaseConstructorMethod (typ, tag, BindingFlags.Public ||| BindingFlags.NonPublic) - member _.Name = + member __.Name = match names with | None -> let conv = getUnionTagConverter (typ, BindingFlags.Public ||| BindingFlags.NonPublic) @@ -870,27 +786,27 @@ type UnionCaseInfo(typ: System.Type, tag: int) = | Some conv -> conv tag - member _.DeclaringType = typ + member __.DeclaringType = typ - member _.GetFields() = + member __.GetFields() = fieldsPropsOfUnionCase (typ, tag, BindingFlags.Public ||| BindingFlags.NonPublic) - member _.GetCustomAttributes() = + member __.GetCustomAttributes() = getMethInfo().GetCustomAttributes false - member _.GetCustomAttributes attributeType = + member __.GetCustomAttributes attributeType = getMethInfo().GetCustomAttributes(attributeType, false) - member _.GetCustomAttributesData() = + member __.GetCustomAttributesData() = getMethInfo().CustomAttributes |> Seq.toArray :> IList<_> - member _.Tag = tag + member __.Tag = tag override x.ToString() = typ.Name + "." + x.Name override x.GetHashCode() = typ.GetHashCode() + tag - override _.Equals(obj: obj) = + override __.Equals(obj: obj) = match obj with | :? UnionCaseInfo as uci -> uci.DeclaringType = typ && uci.Tag = tag | _ -> false @@ -982,7 +898,7 @@ type FSharpType = type DynamicFunction<'T1, 'T2>() = inherit FSharpFunc obj, obj>() - override _.Invoke(impl: obj -> obj) : obj = + override __.Invoke(impl: obj -> obj) : obj = box<('T1 -> 'T2)> (fun inp -> unbox<'T2>(impl (box<'T1>(inp)))) [] @@ -1064,7 +980,7 @@ type FSharpValue = static member PreComputeTupleReader(tupleType: Type) : (obj -> obj[]) = checkTupleType("tupleType", tupleType) - (compileTupleReader tupleEncField getTupleElementAccessors tupleType).Invoke + getTupleReader tupleType static member PreComputeTuplePropertyInfo(tupleType: Type, index: int) = checkTupleType("tupleType", tupleType) @@ -1072,7 +988,7 @@ type FSharpValue = static member PreComputeTupleConstructor(tupleType: Type) = checkTupleType("tupleType", tupleType) - (compileTupleConstructor tupleEncField getTupleConstructorMethod tupleType).Invoke + getTupleConstructor tupleType static member PreComputeTupleConstructorInfo(tupleType: Type) = checkTupleType("tupleType", tupleType) diff --git a/src/fsharp/FSharp.Core/seq.fs b/src/fsharp/FSharp.Core/seq.fs index 857eebdbd9e..f81e3f84aba 100644 --- a/src/fsharp/FSharp.Core/seq.fs +++ b/src/fsharp/FSharp.Core/seq.fs @@ -66,20 +66,20 @@ namespace Microsoft.FSharp.Collections else state <- Finished false - member _.Reset() = noReset() + member __.Reset() = noReset() interface System.IDisposable with member this.Dispose() = this.Dispose() let map f (e : IEnumerator<_>) : IEnumerator<_>= upcast { new MapEnumerator<_>() with - member _.DoMoveNext (curr : byref<_>) = + member __.DoMoveNext (curr : byref<_>) = if e.MoveNext() then curr <- f e.Current true else false - member _.Dispose() = e.Dispose() + member __.Dispose() = e.Dispose() } let mapi f (e : IEnumerator<_>) : IEnumerator<_> = @@ -87,21 +87,21 @@ namespace Microsoft.FSharp.Collections let mutable i = -1 upcast { new MapEnumerator<_>() with - member _.DoMoveNext curr = + member __.DoMoveNext curr = i <- i + 1 if e.MoveNext() then curr <- f.Invoke(i, e.Current) true else false - member _.Dispose() = e.Dispose() + member __.Dispose() = e.Dispose() } let map2 f (e1 : IEnumerator<_>) (e2 : IEnumerator<_>) : IEnumerator<_>= let f = OptimizedClosures.FSharpFunc<_, _, _>.Adapt(f) upcast { new MapEnumerator<_>() with - member _.DoMoveNext curr = + member __.DoMoveNext curr = let n1 = e1.MoveNext() let n2 = e2.MoveNext() if n1 && n2 then @@ -109,7 +109,7 @@ namespace Microsoft.FSharp.Collections true else false - member _.Dispose() = + member __.Dispose() = try e1.Dispose() finally @@ -121,14 +121,14 @@ namespace Microsoft.FSharp.Collections let mutable i = -1 upcast { new MapEnumerator<_>() with - member _.DoMoveNext curr = + member __.DoMoveNext curr = i <- i + 1 if (e1.MoveNext() && e2.MoveNext()) then curr <- f.Invoke(i, e1.Current, e2.Current) true else false - member _.Dispose() = + member __.Dispose() = try e1.Dispose() finally @@ -139,7 +139,7 @@ namespace Microsoft.FSharp.Collections let f = OptimizedClosures.FSharpFunc<_, _, _, _>.Adapt(f) upcast { new MapEnumerator<_>() with - member _.DoMoveNext curr = + member __.DoMoveNext curr = let n1 = e1.MoveNext() let n2 = e2.MoveNext() let n3 = e3.MoveNext() @@ -149,7 +149,7 @@ namespace Microsoft.FSharp.Collections true else false - member _.Dispose() = + member __.Dispose() = try e1.Dispose() finally @@ -169,48 +169,48 @@ namespace Microsoft.FSharp.Collections | Some x -> x { new IEnumerator<'U> with - member _.Current = get() + member __.Current = get() interface IEnumerator with - member _.Current = box (get()) - member _.MoveNext() = + member __.Current = box (get()) + member __.MoveNext() = if not started then started <- true curr <- None while (curr.IsNone && e.MoveNext()) do curr <- f e.Current Option.isSome curr - member _.Reset() = noReset() + member __.Reset() = noReset() interface System.IDisposable with - member _.Dispose() = e.Dispose() } + member __.Dispose() = e.Dispose() } let filter f (e : IEnumerator<'T>) = let mutable started = false let this = { new IEnumerator<'T> with - member _.Current = check started; e.Current + member __.Current = check started; e.Current interface IEnumerator with - member _.Current = check started; box e.Current - member _.MoveNext() = + member __.Current = check started; box e.Current + member __.MoveNext() = let rec next() = if not started then started <- true e.MoveNext() && (f e.Current || next()) next() - member _.Reset() = noReset() + member __.Reset() = noReset() interface System.IDisposable with - member _.Dispose() = e.Dispose() } + member __.Dispose() = e.Dispose() } this let unfold f x : IEnumerator<_> = let mutable state = x upcast { new MapEnumerator<_>() with - member _.DoMoveNext curr = + member __.DoMoveNext curr = match f state with | None -> false | Some (r,s) -> curr <- r state <- s true - member _.Dispose() = () + member __.Dispose() = () } let upto lastOption f = @@ -244,10 +244,10 @@ namespace Microsoft.FSharp.Collections // forced or re-forced immediately. current.Force() { new IEnumerator<'U> with - member _.Current = getCurrent() + member __.Current = getCurrent() interface IEnumerator with - member _.Current = box (getCurrent()) - member _.MoveNext() = + member __.Current = box (getCurrent()) + member __.MoveNext() = if index = completed then false elif index = unstarted then @@ -261,15 +261,15 @@ namespace Microsoft.FSharp.Collections setIndex (index + 1) true - member _.Reset() = noReset() + member __.Reset() = noReset() interface System.IDisposable with - member _.Dispose() = () } + member __.Dispose() = () } [] type ArrayEnumerator<'T>(arr: 'T array) = let mutable curr = -1 let mutable len = arr.Length - member _.Get() = + member __.Get() = if curr >= 0 then if curr >= len then alreadyFinished() else arr.[curr] @@ -278,7 +278,7 @@ namespace Microsoft.FSharp.Collections interface IEnumerator<'T> with member x.Current = x.Get() interface System.Collections.IEnumerator with - member _.MoveNext() = + member __.MoveNext() = if curr >= len then false else curr <- curr + 1 @@ -335,10 +335,10 @@ namespace Microsoft.FSharp.Collections // yield n } type GenerateThen<'T>(g:Generator<'T>, cont : unit -> Generator<'T>) = - member _.Generator = g - member _.Cont = cont + member __.Generator = g + member __.Cont = cont interface Generator<'T> with - member _.Apply = (fun () -> + member __.Apply = (fun () -> match appG g with | Stop -> // OK, move onto the generator given by the continuation @@ -349,7 +349,7 @@ namespace Microsoft.FSharp.Collections | Goto next -> Goto(GenerateThen<_>.Bind(next, cont))) - member _.Disposer = + member __.Disposer = g.Disposer static member Bind (g:Generator<'T>, cont) = @@ -386,9 +386,9 @@ namespace Microsoft.FSharp.Collections let mutable g = g let mutable curr = None let mutable finished = false - member _.Generator = g + member __.Generator = g interface IEnumerator<'T> with - member _.Current = + member __.Current = match curr with | Some v -> v | None -> invalidOp (SR.GetString(SR.moveNextNotCalledOrFinished)) @@ -408,21 +408,21 @@ namespace Microsoft.FSharp.Collections | Goto next -> (g <- next) (x :> IEnumerator).MoveNext() - member _.Reset() = IEnumerator.noReset() + member __.Reset() = IEnumerator.noReset() interface System.IDisposable with - member _.Dispose() = + member __.Dispose() = if not finished then disposeG g // Internal type, used to optimize Enumerator/Generator chains type LazyGeneratorWrappingEnumerator<'T>(e:IEnumerator<'T>) = - member _.Enumerator = e + member __.Enumerator = e interface Generator<'T> with - member _.Apply = (fun () -> + member __.Apply = (fun () -> if e.MoveNext() then Yield e.Current else Stop) - member _.Disposer= Some e.Dispose + member __.Disposer= Some e.Dispose let EnumerateFromGenerator(g:Generator<'T>) = match g with diff --git a/src/fsharp/FSharp.Core/seqcore.fs b/src/fsharp/FSharp.Core/seqcore.fs index 5a6e8142960..663227cb4e5 100644 --- a/src/fsharp/FSharp.Core/seqcore.fs +++ b/src/fsharp/FSharp.Core/seqcore.fs @@ -23,13 +23,13 @@ namespace Microsoft.FSharp.Collections let cast (e : IEnumerator) : IEnumerator<'T> = { new IEnumerator<'T> with - member _.Current = unbox<'T> e.Current + member __.Current = unbox<'T> e.Current interface IEnumerator with - member _.Current = unbox<'T> e.Current :> obj - member _.MoveNext() = e.MoveNext() - member _.Reset() = noReset() + member __.Current = unbox<'T> e.Current :> obj + member __.MoveNext() = e.MoveNext() + member __.Reset() = noReset() interface System.IDisposable with - member _.Dispose() = + member __.Dispose() = match e with | :? System.IDisposable as e -> e.Dispose() | _ -> () } @@ -39,20 +39,20 @@ namespace Microsoft.FSharp.Collections type EmptyEnumerator<'T>() = let mutable started = false interface IEnumerator<'T> with - member _.Current = + member __.Current = check started (alreadyFinished() : 'T) interface System.Collections.IEnumerator with - member _.Current = + member __.Current = check started (alreadyFinished() : obj) - member _.MoveNext() = + member __.MoveNext() = if not started then started <- true false - member _.Reset() = noReset() + member __.Reset() = noReset() interface System.IDisposable with - member _.Dispose() = () + member __.Dispose() = () let Empty<'T> () = (new EmptyEnumerator<'T>() :> IEnumerator<'T>) @@ -60,9 +60,9 @@ namespace Microsoft.FSharp.Collections type EmptyEnumerable<'T> = | EmptyEnumerable interface IEnumerable<'T> with - member _.GetEnumerator() = Empty<'T>() + member __.GetEnumerator() = Empty<'T>() interface IEnumerable with - member _.GetEnumerator() = (Empty<'T>() :> IEnumerator) + member __.GetEnumerator() = (Empty<'T>() :> IEnumerator) let readAndClear r = lock r (fun () -> match !r with None -> None | Some _ as res -> r := None; res) @@ -79,10 +79,10 @@ namespace Microsoft.FSharp.Collections let dispose() = readAndClear state |> Option.iter closef let finish() = try dispose() finally curr <- None { new IEnumerator<'U> with - member _.Current = getCurr() + member __.Current = getCurr() interface IEnumerator with - member _.Current = box (getCurr()) - member _.MoveNext() = + member __.Current = box (getCurr()) + member __.MoveNext() = start() match !state with | None -> false (* we started, then reached the end, then got another MoveNext *) @@ -91,33 +91,33 @@ namespace Microsoft.FSharp.Collections | None -> finish(); false | Some _ as x -> curr <- x; true - member _.Reset() = noReset() + member __.Reset() = noReset() interface System.IDisposable with - member _.Dispose() = dispose() } + member __.Dispose() = dispose() } [] type Singleton<'T>(v:'T) = let mutable started = false interface IEnumerator<'T> with - member _.Current = v + member __.Current = v interface IEnumerator with - member _.Current = box v - member _.MoveNext() = if started then false else (started <- true; true) - member _.Reset() = noReset() + member __.Current = box v + member __.MoveNext() = if started then false else (started <- true; true) + member __.Reset() = noReset() interface System.IDisposable with - member _.Dispose() = () + member __.Dispose() = () let Singleton x = (new Singleton<'T>(x) :> IEnumerator<'T>) let EnumerateThenFinally f (e : IEnumerator<'T>) = { new IEnumerator<'T> with - member _.Current = e.Current + member __.Current = e.Current interface IEnumerator with - member _.Current = (e :> IEnumerator).Current - member _.MoveNext() = e.MoveNext() - member _.Reset() = noReset() + member __.Current = (e :> IEnumerator).Current + member __.MoveNext() = e.MoveNext() + member __.Reset() = noReset() interface System.IDisposable with - member _.Dispose() = + member __.Dispose() = try e.Dispose() finally @@ -130,9 +130,9 @@ namespace Microsoft.FSharp.Collections let mkSeq f = { new IEnumerable<'U> with - member _.GetEnumerator() = f() + member __.GetEnumerator() = f() interface IEnumerable with - member _.GetEnumerator() = (f() :> IEnumerator) } + member __.GetEnumerator() = (f() :> IEnumerator) } namespace Microsoft.FSharp.Core.CompilerServices @@ -156,8 +156,8 @@ namespace Microsoft.FSharp.Core.CompilerServices static member Comparer = let gcomparer = HashIdentity.Structural<'T> { new IEqualityComparer> with - member _.GetHashCode(v) = gcomparer.GetHashCode(v.Value) - member _.Equals(v1,v2) = gcomparer.Equals(v1.Value,v2.Value) } + member __.GetHashCode(v) = gcomparer.GetHashCode(v.Value) + member __.Equals(v1,v2) = gcomparer.Equals(v1.Value,v2.Value) } let Generate openf compute closef = mkSeq (fun () -> IEnumerator.generateWhileSome openf compute closef) @@ -187,7 +187,7 @@ namespace Microsoft.FSharp.Core.CompilerServices [] type FinallyEnumerable<'T>(compensation: unit -> unit, restf: unit -> seq<'T>) = interface IEnumerable<'T> with - member _.GetEnumerator() = + member __.GetEnumerator() = try let ie = restf().GetEnumerator() match ie with @@ -215,7 +215,7 @@ namespace Microsoft.FSharp.Core.CompilerServices [] // false = unchecked val mutable private currElement : 'T - member _.Finish() = + member __.Finish() = finished <- true try match currInnerEnum with @@ -250,7 +250,7 @@ namespace Microsoft.FSharp.Core.CompilerServices if finished then IEnumerator.alreadyFinished() else x.currElement interface IFinallyEnumerator with - member _.AppendFinallyAction(f) = + member __.AppendFinallyAction(f) = compensations <- f :: compensations interface IEnumerator<'T> with @@ -291,7 +291,7 @@ namespace Microsoft.FSharp.Core.CompilerServices takeOuter() takeInner () - member _.Reset() = IEnumerator.noReset() + member __.Reset() = IEnumerator.noReset() interface System.IDisposable with member x.Dispose() = @@ -347,10 +347,6 @@ namespace Microsoft.FSharp.Core.CompilerServices { new System.IDisposable with member x.Dispose() = removeHandler h } } - let inline SetFreshConsTail cons tail = cons.( :: ).1 <- tail - - [] - let inline FreshConsNoTail head = head :: (# "ldnull" : 'T list #) [] type GeneratedSequenceBase<'T>() = @@ -403,138 +399,4 @@ namespace Microsoft.FSharp.Core.CompilerServices //[] member x.MoveNext() = x.MoveNextImpl() - member _.Reset() = raise <| new System.NotSupportedException() - - [] - type ListCollector<'T> = - [] - val mutable Result : 'T list - - [] - val mutable LastCons : 'T list - - member this.Add (value: 'T) = - match box this.Result with - | null -> - let ra = RuntimeHelpers.FreshConsNoTail value - this.Result <- ra - this.LastCons <- ra - | _ -> - let ra = RuntimeHelpers.FreshConsNoTail value - RuntimeHelpers.SetFreshConsTail this.LastCons ra - this.LastCons <- ra - - member this.AddMany (values: seq<'T>) = - // cook a faster iterator for lists and arrays - match values with - | :? ('T[]) as valuesAsArray -> - for v in valuesAsArray do - this.Add v - | :? ('T list) as valuesAsList -> - for v in valuesAsList do - this.Add v - | _ -> - for v in values do - this.Add v - - // In the particular case of closing with a final add of an F# list - // we can simply stitch the list into the end of the resulting list - member this.AddManyAndClose (values: seq<'T>) = - match values with - | :? ('T list) as valuesAsList -> - let res = - match box this.Result with - | null -> - valuesAsList - | _ -> - RuntimeHelpers.SetFreshConsTail this.LastCons valuesAsList - this.Result - this.Result <- Unchecked.defaultof<_> - this.LastCons <- Unchecked.defaultof<_> - res - | _ -> - this.AddMany values - this.Close() - - member this.Close() = - match box this.Result with - | null -> [] - | _ -> - RuntimeHelpers.SetFreshConsTail this.LastCons [] - let res = this.Result - this.Result <- Unchecked.defaultof<_> - this.LastCons <- Unchecked.defaultof<_> - res - - // Optimized for 0, 1 and 2 sized arrays - [] - type ArrayCollector<'T> = - [] - val mutable ResizeArray: ResizeArray<'T> - - [] - val mutable First: 'T - - [] - val mutable Second: 'T - - [] - val mutable Count: int - - member this.Add (value: 'T) = - match this.Count with - | 0 -> - this.Count <- 1 - this.First <- value - | 1 -> - this.Count <- 2 - this.Second <- value - | 2 -> - let ra = ResizeArray<'T>() - ra.Add(this.First) - ra.Add(this.Second) - ra.Add(value) - this.Count <- 3 - this.ResizeArray <- ra - | _ -> - this.ResizeArray.Add(value) - - member this.AddMany (values: seq<'T>) = - if this.Count > 2 then - this.ResizeArray.AddRange(values) - else - // cook a faster iterator for lists and arrays - match values with - | :? ('T[]) as valuesAsArray -> - for v in valuesAsArray do - this.Add v - | :? ('T list) as valuesAsList -> - for v in valuesAsList do - this.Add v - | _ -> - for v in values do - this.Add v - - member this.AddManyAndClose (values: seq<'T>) = - this.AddMany(values) - this.Close() - - member this.Close() = - match this.Count with - | 0 -> Array.Empty<'T>() - | 1 -> - let res = [| this.First |] - this.Count <- 0 - this.First <- Unchecked.defaultof<_> - res - | 2 -> - let res = [| this.First; this.Second |] - this.Count <- 0 - this.First <- Unchecked.defaultof<_> - this.Second <- Unchecked.defaultof<_> - res - | _ -> - let res = this.ResizeArray.ToArray() - this <- ArrayCollector<'T>() - res - + member __.Reset() = raise <| new System.NotSupportedException() diff --git a/src/fsharp/FSharp.Core/seqcore.fsi b/src/fsharp/FSharp.Core/seqcore.fsi index 9a0d9bd1055..d0eda5641fe 100644 --- a/src/fsharp/FSharp.Core/seqcore.fsi +++ b/src/fsharp/FSharp.Core/seqcore.fsi @@ -149,49 +149,3 @@ namespace Microsoft.FSharp.Core.CompilerServices interface IEnumerator<'T> interface IEnumerator interface IDisposable - - /// Collects elements and builds a list - [] - type ListCollector<'T> = - [] - val mutable internal Result: 'T list - - [] - val mutable internal LastCons: 'T list - - /// Add an element to the collector - member Add: value: 'T -> unit - - /// Add multiple elements to the collector - member AddMany: values: seq<'T> -> unit - - /// Add multiple elements to the collector and return the resulting list - member AddManyAndClose: values: seq<'T> -> 'T list - - /// Return the resulting list - member Close: unit -> 'T list - - /// Collects elements and builds an array - [] - type ArrayCollector<'T> = - [] - val mutable internal ResizeArray: ResizeArray<'T> - [] - val mutable internal First: 'T - [] - val mutable internal Second: 'T - [] - val mutable internal Count: int - - /// Add an element to the collector - member Add: value: 'T -> unit - - /// Add multiple elements to the collector - member AddMany: values: seq<'T> -> unit - - /// Add multiple elements to the collector and return the resulting array - member AddManyAndClose: values: seq<'T> -> 'T[] - - /// Return the resulting list - member Close: unit -> 'T[] - diff --git a/src/fsharp/FSharp.Core/set.fs b/src/fsharp/FSharp.Core/set.fs index 769da110ee2..0724cc522c4 100644 --- a/src/fsharp/FSharp.Core/set.fs +++ b/src/fsharp/FSharp.Core/set.fs @@ -16,19 +16,19 @@ open Microsoft.FSharp.Collections [] [] -type internal SetTree<'T>(k: 'T, h: int) = - member _.Height = h +type internal SetTree<'T>(k: 'T) = member _.Key = k - new(k: 'T) = SetTree(k,1) - + [] [] [] type internal SetTreeNode<'T>(v:'T, left:SetTree<'T>, right: SetTree<'T>, h: int) = - inherit SetTree<'T>(v,h) + inherit SetTree<'T>(v) + member _.Left = left member _.Right = right - + member _.Height = h + [] module internal SetTree = @@ -36,18 +36,13 @@ module internal SetTree = let inline isEmpty (t:SetTree<'T>) = isNull t - let inline private asNode(value:SetTree<'T>) : SetTreeNode<'T> = - value :?> SetTreeNode<'T> - let rec countAux (t:SetTree<'T>) acc = if isEmpty t then acc else - if t.Height = 1 then - acc + 1 - else - let tn = asNode t - countAux tn.Left (countAux tn.Right (acc+1)) + match t with + | :? SetTreeNode<'T> as tn -> countAux tn.Left (countAux tn.Right (acc+1)) + | _ -> acc+1 let count s = countAux s 0 @@ -89,7 +84,23 @@ module internal SetTree = let inline height (t:SetTree<'T>) = if isEmpty t then 0 - else t.Height + else + match t with + | :? SetTreeNode<'T> as tn -> tn.Height + | _ -> 1 + +#if CHECKED + let rec checkInvariant (t:SetTree<'T>) = + // A good sanity check, loss of balance can hit perf + if isEmpty t then true + else + match t with + | :? SetTreeNode<'T> as tn -> + let h1 = height tn.Left + let h2 = height tn.Right + (-2 <= (h1 - h2) && (h1 - h2) <= 2) && checkInvariant tn.Left && checkInvariant tn.Right + | _ -> true +#endif [] let private tolerance = 2 @@ -103,6 +114,9 @@ module internal SetTree = else SetTreeNode (k, l, r, m+1) :> SetTree<'T> + let inline private asNode(value:SetTree<'T>) : SetTreeNode<'T> = + value :?> SetTreeNode<'T> + let rebalance t1 v t2 = let t1h = height t1 let t2h = height t2 @@ -130,16 +144,17 @@ module internal SetTree = if isEmpty t then SetTree k else let c = comparer.Compare(k, t.Key) - if t.Height = 1 then + match t with + | :? SetTreeNode<'T> as tn -> + if c < 0 then rebalance (add comparer k tn.Left) tn.Key tn.Right + elif c = 0 then t + else rebalance tn.Left tn.Key (add comparer k tn.Right) + | _ -> // nb. no check for rebalance needed for small trees, also be sure to reuse node already allocated + let c = comparer.Compare(k, t.Key) if c < 0 then SetTreeNode (k, empty, t, 2) :> SetTree<'T> elif c = 0 then t else SetTreeNode (k, t, empty, 2) :> SetTree<'T> - else - let tn = asNode t - if c < 0 then rebalance (add comparer k tn.Left) tn.Key tn.Right - elif c = 0 then t - else rebalance tn.Left tn.Key (add comparer k tn.Right) let rec balance comparer (t1:SetTree<'T>) k (t2:SetTree<'T>) = // Given t1 < k < t2 where t1 and t2 are "balanced", @@ -148,12 +163,10 @@ module internal SetTree = if isEmpty t1 then add comparer k t2 // drop t1 = empty elif isEmpty t2 then add comparer k t1 // drop t2 = empty else - if t1.Height = 1 then add comparer k (add comparer t1.Key t2) - else - let t1n = asNode t1 - if t2.Height = 1 then add comparer k (add comparer t2.Key t1) - else - let t2n = asNode t2 + match t1 with + | :? SetTreeNode<'T> as t1n -> + match t2 with + | :? SetTreeNode<'T> as t2n -> // Have: (t1l < k1 < t1r) < k < (t2l < k2 < t2r) // Either (a) h1, h2 differ by at most 2 - no rebalance needed. // (b) h1 too small, i.e. h1+2 < h2 @@ -169,19 +182,16 @@ module internal SetTree = else // case: a, h1 and h2 meet balance requirement mk t1 k t2 + | _ -> add comparer k (add comparer t2.Key t1) + | _ -> add comparer k (add comparer t1.Key t2) let rec split (comparer: IComparer<'T>) pivot (t:SetTree<'T>) = // Given a pivot and a set t // Return { x in t s.t. x < pivot }, pivot in t?, { x in t s.t. x > pivot } if isEmpty t then empty, false, empty else - if t.Height = 1 then - let c = comparer.Compare(t.Key, pivot) - if c < 0 then t, false, empty // singleton under pivot - elif c = 0 then empty, true, empty // singleton is pivot - else empty, false, t // singleton over pivot - else - let tn = asNode t + match t with + | :? SetTreeNode<'T> as tn -> let c = comparer.Compare(pivot, tn.Key) if c < 0 then // pivot t1 let t11Lo, havePivot, t11Hi = split comparer pivot tn.Left @@ -191,24 +201,27 @@ module internal SetTree = else // pivot t2 let t12Lo, havePivot, t12Hi = split comparer pivot tn.Right balance comparer tn.Left tn.Key t12Lo, havePivot, t12Hi + | _ -> + let c = comparer.Compare(t.Key, pivot) + if c < 0 then t, false, empty // singleton under pivot + elif c = 0 then empty, true, empty // singleton is pivot + else empty, false, t // singleton over pivot let rec spliceOutSuccessor (t:SetTree<'T>) = if isEmpty t then failwith "internal error: Set.spliceOutSuccessor" else - if t.Height = 1 then t.Key, empty - else - let tn = asNode t + match t with + | :? SetTreeNode<'T> as tn -> if isEmpty tn.Left then tn.Key, tn.Right else let k3, l' = spliceOutSuccessor tn.Left in k3, mk l' tn.Key tn.Right + | _ -> t.Key, empty let rec remove (comparer: IComparer<'T>) k (t:SetTree<'T>) = if isEmpty t then t else let c = comparer.Compare(k, t.Key) - if t.Height = 1 then - if c = 0 then empty else t - else - let tn = asNode t + match t with + | :? SetTreeNode<'T> as tn -> if c < 0 then rebalance (remove comparer k tn.Left) tn.Key tn.Right elif c = 0 then if isEmpty tn.Left then tn.Right @@ -216,64 +229,63 @@ module internal SetTree = else let sk, r' = spliceOutSuccessor tn.Right mk tn.Left sk r' - else rebalance tn.Left tn.Key (remove comparer k tn.Right) + else rebalance tn.Left tn.Key (remove comparer k tn.Right) + | _ -> + if c = 0 then empty + else t let rec mem (comparer: IComparer<'T>) k (t:SetTree<'T>) = if isEmpty t then false else let c = comparer.Compare(k, t.Key) - if t.Height = 1 then (c = 0) - else - let tn = asNode t + match t with + | :? SetTreeNode<'T> as tn -> if c < 0 then mem comparer k tn.Left elif c = 0 then true else mem comparer k tn.Right + | _ -> (c = 0) let rec iter f (t:SetTree<'T>) = if isEmpty t then () else - if t.Height = 1 then f t.Key - else - let tn = asNode t - iter f tn.Left; f tn.Key; iter f tn.Right + match t with + | :? SetTreeNode<'T> as tn -> iter f tn.Left; f tn.Key; iter f tn.Right + | _ -> f t.Key let rec foldBackOpt (f:OptimizedClosures.FSharpFunc<_, _, _>) (t:SetTree<'T>) x = if isEmpty t then x else - if t.Height = 1 then f.Invoke(t.Key, x) - else - let tn = asNode t - foldBackOpt f tn.Left (f.Invoke(tn.Key, (foldBackOpt f tn.Right x))) + match t with + | :? SetTreeNode<'T> as tn -> foldBackOpt f tn.Left (f.Invoke(tn.Key, (foldBackOpt f tn.Right x))) + | _ -> f.Invoke(t.Key, x) let foldBack f m x = foldBackOpt (OptimizedClosures.FSharpFunc<_, _, _>.Adapt f) m x let rec foldOpt (f:OptimizedClosures.FSharpFunc<_, _, _>) x (t:SetTree<'T>) = if isEmpty t then x else - if t.Height = 1 then f.Invoke(x, t.Key) - else - let tn = asNode t + match t with + | :? SetTreeNode<'T> as tn -> let x = foldOpt f x tn.Left in let x = f.Invoke(x, tn.Key) foldOpt f x tn.Right + | _ -> f.Invoke(x, t.Key) let fold f x m = foldOpt (OptimizedClosures.FSharpFunc<_, _, _>.Adapt f) x m let rec forall f (t:SetTree<'T>) = if isEmpty t then true else - if t.Height = 1 then f t.Key - else - let tn = asNode t - f tn.Key && forall f tn.Left && forall f tn.Right + match t with + | :? SetTreeNode<'T> as tn -> f tn.Key && forall f tn.Left && forall f tn.Right + | _ -> f t.Key let rec exists f (t:SetTree<'T>) = if isEmpty t then false else - if t.Height = 1 then f t.Key - else - let tn = asNode t - f tn.Key || exists f tn.Left || exists f tn.Right + match t with + | :? SetTreeNode<'T> as tn -> f tn.Key || exists f tn.Left || exists f tn.Right + | _ -> f t.Key let subset comparer a b = forall (fun x -> mem comparer x b) a @@ -284,12 +296,11 @@ module internal SetTree = let rec filterAux comparer f (t:SetTree<'T>) acc = if isEmpty t then acc else - if t.Height = 1 then - if f t.Key then add comparer t.Key acc else acc - else - let tn = asNode t + match t with + | :? SetTreeNode<'T> as tn -> let acc = if f tn.Key then add comparer tn.Key acc else acc filterAux comparer f tn.Left (filterAux comparer f tn.Right acc) + | _ -> if f t.Key then add comparer t.Key acc else acc let filter comparer f s = filterAux comparer f s empty @@ -298,10 +309,9 @@ module internal SetTree = else if isEmpty t then acc else - if t.Height = 1 then remove comparer t.Key acc - else - let tn = asNode t - diffAux comparer tn.Left (diffAux comparer tn.Right (remove comparer tn.Key acc)) + match t with + | :? SetTreeNode<'T> as tn -> diffAux comparer tn.Left (diffAux comparer tn.Right (remove comparer tn.Key acc)) + | _ -> remove comparer t.Key acc let diff comparer a b = diffAux comparer b a @@ -310,12 +320,10 @@ module internal SetTree = if isEmpty t1 then t2 elif isEmpty t2 then t1 else - if t1.Height = 1 then add comparer t1.Key t2 - else - if t2.Height = 1 then add comparer t2.Key t1 - else - let t1n = asNode t1 - let t2n = asNode t2 // (t1l < k < t1r) AND (t2l < k2 < t2r) + match t1 with + | :? SetTreeNode<'T> as t1n -> + match t2 with + | :? SetTreeNode<'T> as t2n -> // (t1l < k < t1r) AND (t2l < k2 < t2r) // Divide and Conquer: // Suppose t1 is largest. // Split t2 using pivot k1 into lo and hi. @@ -326,17 +334,19 @@ module internal SetTree = else let lo, _, hi = split comparer t2n.Key t1 in balance comparer (union comparer t2n.Left lo) t2n.Key (union comparer t2n.Right hi) + | _ -> add comparer t2.Key t1 + | _ -> add comparer t1.Key t2 let rec intersectionAux comparer b (t:SetTree<'T>) acc = if isEmpty t then acc else - if t.Height = 1 then - if mem comparer t.Key b then add comparer t.Key acc else acc - else - let tn = asNode t + match t with + | :? SetTreeNode<'T> as tn -> let acc = intersectionAux comparer b tn.Right acc let acc = if mem comparer tn.Key b then add comparer tn.Key acc else acc intersectionAux comparer b tn.Left acc + | _ -> + if mem comparer t.Key b then add comparer t.Key acc else acc let intersection comparer a b = intersectionAux comparer b a empty @@ -345,46 +355,42 @@ module internal SetTree = let rec partitionAux comparer f (t:SetTree<'T>) acc = if isEmpty t then acc else - if t.Height = 1 then partition1 comparer f t.Key acc - else - let tn = asNode t + match t with + | :? SetTreeNode<'T> as tn -> let acc = partitionAux comparer f tn.Right acc let acc = partition1 comparer f tn.Key acc partitionAux comparer f tn.Left acc + | _ -> partition1 comparer f t.Key acc let partition comparer f s = partitionAux comparer f s (empty, empty) let rec minimumElementAux (t:SetTree<'T>) n = if isEmpty t then n else - if t.Height = 1 then t.Key - else - let tn = asNode t - minimumElementAux tn.Left tn.Key + match t with + | :? SetTreeNode<'T> as tn -> minimumElementAux tn.Left tn.Key + | _ -> t.Key and minimumElementOpt (t:SetTree<'T>) = if isEmpty t then None else - if t.Height = 1 then Some t.Key - else - let tn = asNode t - Some(minimumElementAux tn.Left tn.Key) + match t with + | :? SetTreeNode<'T> as tn -> Some(minimumElementAux tn.Left tn.Key) + | _ -> Some t.Key and maximumElementAux (t:SetTree<'T>) n = if isEmpty t then n else - if t.Height = 1 then t.Key - else - let tn = asNode t - maximumElementAux tn.Right tn.Key + match t with + | :? SetTreeNode<'T> as tn -> maximumElementAux tn.Right tn.Key + | _ -> t.Key and maximumElementOpt (t:SetTree<'T>) = if isEmpty t then None else - if t.Height = 1 then Some t.Key - else - let tn = asNode t - Some(maximumElementAux tn.Right tn.Key) + match t with + | :? SetTreeNode<'T> as tn -> Some(maximumElementAux tn.Right tn.Key) + | _ -> Some t.Key let minimumElement s = match minimumElementOpt s with @@ -412,10 +418,9 @@ module internal SetTree = | x :: rest -> if isEmpty x then collapseLHS rest else - if x.Height = 1 then stack - else - let xn = asNode x - collapseLHS (xn.Left :: SetTree xn.Key :: xn.Right :: rest) + match x with + | :? SetTreeNode<'T> as xn-> collapseLHS (xn.Left :: SetTree xn.Key :: xn.Right :: rest) + | _ -> stack let mkIterator s = { stack = collapseLHS [s]; started = false } @@ -431,19 +436,16 @@ module internal SetTree = else notStarted() - let unexpectedStackForMoveNext() = failwith "Please report error: Set iterator, unexpected stack for moveNext" - let unexpectedstateInSetTreeCompareStacks() = failwith "unexpected state in SetTree.compareStacks" - let rec moveNext i = if i.started then match i.stack with | [] -> false | t :: rest -> - if t.Height = 1 then + match t with + | :? SetTreeNode<'T> -> failwith "Please report error: Set iterator, unexpected stack for moveNext" + | _ -> i.stack <- collapseLHS rest - not i.stack.IsEmpty - else - unexpectedStackForMoveNext() + not i.stack.IsEmpty else i.started <- true; // The first call to MoveNext "starts" the enumeration. not i.stack.IsEmpty @@ -451,31 +453,29 @@ module internal SetTree = let mkIEnumerator s = let mutable i = mkIterator s { new IEnumerator<_> with - member _.Current = current i + member __.Current = current i interface IEnumerator with - member _.Current = box (current i) - member _.MoveNext() = moveNext i - member _.Reset() = i <- mkIterator s + member __.Current = box (current i) + member __.MoveNext() = moveNext i + member __.Reset() = i <- mkIterator s interface System.IDisposable with - member _.Dispose() = () } + member __.Dispose() = () } /// Set comparison. Note this can be expensive. let rec compareStacks (comparer: IComparer<'T>) (l1:SetTree<'T> list) (l2:SetTree<'T> list) : int = let cont() = match l1, l2 with | (x1 :: t1), _ when not (isEmpty x1) -> - if x1.Height = 1 then - compareStacks comparer (empty :: SetTree x1.Key :: t1) l2 - else - let x1n = asNode x1 + match x1 with + | :? SetTreeNode<'T> as x1n -> compareStacks comparer (x1n.Left :: (SetTreeNode (x1n.Key, empty, x1n.Right, 0) :> SetTree<'T>) :: t1) l2 + | _ -> compareStacks comparer (empty :: SetTree x1.Key :: t1) l2 | _, (x2 :: t2) when not (isEmpty x2) -> - if x2.Height = 1 then - compareStacks comparer l1 (empty :: SetTree x2.Key :: t2) - else - let x2n = asNode x2 + match x2 with + | :? SetTreeNode<'T> as x2n -> compareStacks comparer l1 (x2n.Left :: (SetTreeNode (x2n.Key, empty, x2n.Right, 0) :> SetTree<'T> ) :: t2) - | _ -> unexpectedstateInSetTreeCompareStacks() + | _ -> compareStacks comparer l1 (empty :: SetTree x2.Key :: t2) + | _ -> failwith "unexpected state in SetTree.compareStacks" match l1, l2 with | [], [] -> 0 @@ -487,30 +487,30 @@ module internal SetTree = else cont() elif isEmpty x2 then cont() else - if x1.Height = 1 then - if x2.Height = 1 then - let c = comparer.Compare(x1.Key, x2.Key) - if c <> 0 then c else compareStacks comparer t1 t2 - else - let x2n = asNode x2 - if isEmpty x2n.Left then - let c = comparer.Compare(x1.Key, x2n.Key) - if c <> 0 then c else compareStacks comparer (empty :: t1) (x2n.Right :: t2) - else cont() - else - let x1n = asNode x1 + match x1 with + | :? SetTreeNode<'T> as x1n -> if isEmpty x1n.Left then - if x2.Height = 1 then - let c = comparer.Compare(x1n.Key, x2.Key) - if c <> 0 then c else compareStacks comparer (x1n.Right :: t1) (empty :: t2) - else - let x2n = asNode x2 + match x2 with + | :? SetTreeNode<'T> as x2n -> if isEmpty x2n.Left then let c = comparer.Compare(x1n.Key, x2n.Key) if c <> 0 then c else compareStacks comparer (x1n.Right :: t1) (x2n.Right :: t2) else cont() + | _ -> + let c = comparer.Compare(x1n.Key, x2.Key) + if c <> 0 then c else compareStacks comparer (x1n.Right :: t1) (empty :: t2) else cont() - + | _ -> + match x2 with + | :? SetTreeNode<'T> as x2n -> + if isEmpty x2n.Left then + let c = comparer.Compare(x1.Key, x2n.Key) + if c <> 0 then c else compareStacks comparer (empty :: t1) (x2n.Right :: t2) + else cont() + | _ -> + let c = comparer.Compare(x1.Key, x2.Key) + if c <> 0 then c else compareStacks comparer t1 t2 + let compare comparer (t1:SetTree<'T>) (t2:SetTree<'T>) = if isEmpty t1 then if isEmpty t2 then 0 @@ -526,10 +526,9 @@ module internal SetTree = let rec loop (t':SetTree<'T>) acc = if isEmpty t' then acc else - if t'.Height = 1 then t'.Key :: acc - else - let tn = asNode t' - loop tn.Left (tn.Key :: loop tn.Right acc) + match t' with + | :? SetTreeNode<'T> as tn -> loop tn.Left (tn.Key :: loop tn.Right acc) + | _ -> t'.Key :: acc loop t [] let copyToArray s (arr: _[]) i = @@ -582,17 +581,17 @@ type Set<[]'T when 'T: comparison >(comparer:IComparer<'T Set<'T>(comparer, SetTree.empty) [] - member _.OnSerializing(context: System.Runtime.Serialization.StreamingContext) = + member __.OnSerializing(context: System.Runtime.Serialization.StreamingContext) = ignore context serializedData <- SetTree.toArray tree // Do not set this to null, since concurrent threads may also be serializing the data //[] - //member _.OnSerialized(context: System.Runtime.Serialization.StreamingContext) = + //member __.OnSerialized(context: System.Runtime.Serialization.StreamingContext) = // serializedData <- null [] - member _.OnDeserialized(context: System.Runtime.Serialization.StreamingContext) = + member __.OnDeserialized(context: System.Runtime.Serialization.StreamingContext) = ignore context comparer <- LanguagePrimitives.FastGenericComparer<'T> tree <- SetTree.ofArray comparer serializedData diff --git a/src/fsharp/FSharp.Core/string.fs b/src/fsharp/FSharp.Core/string.fs index 37e8fcd7d68..4f73f15a99d 100644 --- a/src/fsharp/FSharp.Core/string.fs +++ b/src/fsharp/FSharp.Core/string.fs @@ -14,7 +14,7 @@ namespace Microsoft.FSharp.Core [] module String = [] - /// LOH threshold is calculated from Internal.Utilities.Library.LOH_SIZE_THRESHOLD_BYTES, + /// LOH threshold is calculated from FSharp.Compiler.AbstractIL.Internal.Library.LOH_SIZE_THRESHOLD_BYTES, /// and is equal to 80_000 / sizeof let LOH_CHAR_THRESHOLD = 40_000 diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Nuget.fsproj b/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Nuget.fsproj index 6c1f6fa60bd..b308308aada 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Nuget.fsproj +++ b/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Nuget.fsproj @@ -21,9 +21,6 @@ - - - diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.ProjectFile.fs b/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.ProjectFile.fs index 315f8e91497..b49bec94db9 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.ProjectFile.fs +++ b/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.ProjectFile.fs @@ -64,7 +64,7 @@ module internal ProjectFile = let findIncludesFromResolutions (resolutions:Resolution[]) = let managedRoots = resolutions - |> Array.filter(fun r -> + |> Array.filter(fun r -> not(String.IsNullOrEmpty(r.NugetPackageId) || String.IsNullOrEmpty(r.PackageRoot)) && Directory.Exists(r.PackageRoot)) @@ -136,11 +136,10 @@ $(POUND_R) $(TARGETFRAMEWORK) $(RUNTIMEIDENTIFIER) false - <_NETCoreSdkIsPreview>false - true true + true $(MSBuildAllProjects);$(MSBuildThisFileFullPath) @@ -275,8 +274,8 @@ $(PACKAGEREFERENCES) KeepDuplicates="false" /> - diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Utilities.fs b/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Utilities.fs index 8519a6daaff..26fe0ca5151 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Utilities.fs +++ b/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Utilities.fs @@ -6,8 +6,6 @@ open System.Diagnostics open System.IO open System.Reflection open FSDependencyManager -open System.Runtime.InteropServices -open Internal.Utilities.FSharpEnvironment [] type DependencyManagerAttribute() = inherit System.Attribute() @@ -69,7 +67,94 @@ module internal Utilities = |> List.ofSeq |> List.map (fun option -> split option) - let executeTool pathToExe arguments workingDir timeout = + // Path to the directory containing the fsharp compilers + let fsharpCompilerPath = Path.GetDirectoryName(typeof.GetTypeInfo().Assembly.Location) + + // We are running on dotnet core if the executing mscorlib is System.Private.CoreLib + let isRunningOnCoreClr = (typeof.Assembly).FullName.StartsWith("System.Private.CoreLib", StringComparison.InvariantCultureIgnoreCase) + + let isWindows = + match Environment.OSVersion.Platform with + | PlatformID.Unix -> false + | PlatformID.MacOSX -> false + | _ -> true + + let dotnet = + if isWindows then "dotnet.exe" else "dotnet" + + let sdks = "Sdks" + + let msbuildExePath = + // Find msbuild.exe when invoked from desktop compiler. + // 1. Look relative to F# compiler location Normal retail build + // 2. Use VSAPPDIR Nightly when started from VS, or F5 + // 3. Use VSINSTALLDIR -- When app is run outside of VS, and + // is not copied relative to a vs install. + let vsRootFromVSAPPIDDIR = + let vsappiddir = Environment.GetEnvironmentVariable("VSAPPIDDIR") + if not (String.IsNullOrEmpty(vsappiddir)) then + Path.GetFullPath(Path.Combine(vsappiddir, "../..")) + else + null + + let roots = [| + Path.GetFullPath(Path.Combine(fsharpCompilerPath, "../../../../..")) + vsRootFromVSAPPIDDIR + Environment.GetEnvironmentVariable("VSINSTALLDIR") + |] + + let msbuildPath root = Path.GetFullPath(Path.Combine(root, "MSBuild/Current/Bin/MSBuild.exe")) + + let msbuildPathExists root = + if String.IsNullOrEmpty(root) then + false + else + File.Exists(msbuildPath root) + + let msbuildOption rootOpt = + match rootOpt with + | Some root -> Some (msbuildPath root) + | _ -> None + + roots |> Array.tryFind(fun root -> msbuildPathExists root) |> msbuildOption + + let dotnetHostPath = + // How to find dotnet.exe --- woe is me; probing rules make me sad. + // Algorithm: + // 1. Look for DOTNET_HOST_PATH environment variable + // this is the main user programable override .. provided by user to find a specific dotnet.exe + // 2. Probe for are we part of an .NetSDK install + // In an sdk install we are always installed in: sdk\3.0.100-rc2-014234\FSharp + // dotnet or dotnet.exe will be found in the directory that contains the sdk directory + // 3. We are loaded in-process to some other application ... Eg. try .net + // See if the host is dotnet.exe ... from netcoreapp3.1 on this is fairly unlikely + // 4. If it's none of the above we are going to have to rely on the path containing the way to find dotnet.exe + // + if isRunningOnCoreClr then + match (Environment.GetEnvironmentVariable("DOTNET_HOST_PATH")) with + | value when not (String.IsNullOrEmpty(value)) -> + Some value // Value set externally + | _ -> + // Probe for netsdk install, dotnet. and dotnet.exe is a constant offset from the location of System.Int32 + let dotnetLocation = + let dotnetApp = + let platform = Environment.OSVersion.Platform + if platform = PlatformID.Unix then "dotnet" else "dotnet.exe" + let assemblyLocation = Path.GetDirectoryName(typeof.GetTypeInfo().Assembly.Location) + Path.GetFullPath(Path.Combine(assemblyLocation, "../../..", dotnetApp)) + + if File.Exists(dotnetLocation) then + Some dotnetLocation + else + let main = Process.GetCurrentProcess().MainModule + if main.ModuleName ="dotnet" then + Some main.FileName + else + Some dotnet + else + None + + let executeBuild pathToExe arguments workingDir timeout = match pathToExe with | Some path -> let errorsList = ResizeArray() @@ -107,7 +192,12 @@ module internal Utilities = // Timed out resolving throw a diagnostic. raise (new TimeoutException(SR.timedoutResolvingPackages(psi.FileName, psi.Arguments))) else - p.WaitForExit() + () + +#if DEBUG + File.WriteAllLines(Path.Combine(workingDir, "StandardOutput.txt"), outputList) + File.WriteAllLines(Path.Combine(workingDir, "StandardError.txt"), errorsList) +#endif p.ExitCode = 0, outputList.ToArray(), errorsList.ToArray() | None -> false, Array.empty, Array.empty @@ -133,12 +223,12 @@ module internal Utilities = let workingDir = Path.GetDirectoryName projectPath let success, stdOut, stdErr = - executeTool (getDotnetHostPath()) (arguments "msbuild -v:quiet") workingDir timeout - -#if DEBUG - File.WriteAllLines(Path.Combine(workingDir, "build_StandardOutput.txt"), stdOut) - File.WriteAllLines(Path.Combine(workingDir, "build_StandardError.txt"), stdErr) -#endif + if not (isRunningOnCoreClr) then + // The Desktop build uses "msbuild" to build + executeBuild msbuildExePath (arguments "-v:quiet") workingDir timeout + else + // The coreclr uses "dotnet msbuild" to build + executeBuild dotnetHostPath (arguments "msbuild -v:quiet") workingDir timeout let outputFile = projectPath + ".resolvedReferences.paths" let resolutionsFile = if success && File.Exists(outputFile) then Some outputFile else None @@ -147,24 +237,3 @@ module internal Utilities = stdOut = stdOut stdErr = stdErr resolutionsFile = resolutionsFile } - - let generateSourcesFromNugetConfigs scriptDirectory workingDir timeout = - let success, stdOut, stdErr = - executeTool (getDotnetHostPath()) "nuget list source --format short" scriptDirectory timeout -#if DEBUG - File.WriteAllLines(Path.Combine(workingDir, "nuget_StandardOutput.txt"), stdOut) - File.WriteAllLines(Path.Combine(workingDir, "nuget_StandardError.txt"), stdErr) -#else - ignore workingDir - ignore stdErr -#endif - seq { - if success then - for source in stdOut do - // String returned by dotnet nuget list source --format short - // is formatted similar to: - // E https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json - // So strip off the flags - let pos = source.IndexOf(" ") - if pos >= 0 then yield ("i", source.Substring(pos).Trim()) - } diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.fs b/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.fs index 7cca8c23f5c..e83e7dc9ec0 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.fs +++ b/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.fs @@ -172,13 +172,13 @@ type ResolveDependenciesResult (success: bool, stdOut: string array, stdError: s member _.Roots = roots [] -type FSharpDependencyManager (outputDirectory:string option) = +type FSharpDependencyManager (outputDir:string option) = let key = "nuget" let name = "MsBuild Nuget DependencyManager" - let workingDirectory = + let scriptsPath = let path = Path.Combine(Path.GetTempPath(), key, Process.GetCurrentProcess().Id.ToString() + "--"+ Guid.NewGuid().ToString()) - match outputDirectory with + match outputDir with | None -> path | Some v -> Path.Combine(path, v) @@ -187,8 +187,8 @@ type FSharpDependencyManager (outputDirectory:string option) = let deleteScripts () = try #if !Debug - if Directory.Exists(workingDirectory) then - Directory.Delete(workingDirectory, true) + if Directory.Exists(scriptsPath) then + Directory.Delete(scriptsPath, true) #else () #endif @@ -196,8 +196,8 @@ type FSharpDependencyManager (outputDirectory:string option) = let deleteAtExit = try - if not (Directory.Exists(workingDirectory)) then - Directory.CreateDirectory(workingDirectory) |> ignore + if not (File.Exists(scriptsPath)) then + Directory.CreateDirectory(scriptsPath) |> ignore true with | _ -> false @@ -208,14 +208,14 @@ type FSharpDependencyManager (outputDirectory:string option) = sw.WriteLine(body) with | _ -> () - let prepareDependencyResolutionFiles (scriptExt: string, directiveLines: (string * string) seq, targetFrameworkMoniker: string, runtimeIdentifier: string, timeout: int): PackageBuildResolutionResult = + let prepareDependencyResolutionFiles (scriptExt: string, packageManagerTextLines: (string * string) seq, targetFrameworkMoniker: string, runtimeIdentifier: string, timeout: int): PackageBuildResolutionResult = let scriptExt = match scriptExt with | ".csx" -> csxExt | _ -> fsxExt let packageReferences, binLogPath, package_timeout = - directiveLines + packageManagerTextLines |> List.ofSeq |> FSharpDependencyManager.parsePackageDirective scriptExt @@ -226,7 +226,7 @@ type FSharpDependencyManager (outputDirectory:string option) = let packageReferenceText = String.Join(Environment.NewLine, packageReferenceLines) - let projectPath = Path.Combine(workingDirectory, "Project.fsproj") + let projectPath = Path.Combine(scriptsPath, "Project.fsproj") let generateAndBuildProjectArtifacts = let writeFile path body = @@ -260,27 +260,24 @@ type FSharpDependencyManager (outputDirectory:string option) = sprintf """ #r "nuget:FSharp.Data";; // %s 'FSharp.Data' %s""" (SR.loadNugetPackage()) (SR.highestVersion()) |] - member this.ResolveDependencies(scriptDirectory: string, scriptName: string, scriptExt: string, packageManagerTextLines: (string * string) seq, targetFrameworkMoniker: string, runtimeIdentifier: string, timeout: int) : obj = - ignore scriptName + member this.ResolveDependencies(scriptExt: string, packageManagerTextLines: (string * string) seq, targetFrameworkMoniker: string, runtimeIdentifier: string, timeout: int) : obj = let poundRprefix = match scriptExt with | ".csx" -> "#r \"" | _ -> "#r @\"" let generateAndBuildProjectArtifacts = - let configIncludes = generateSourcesFromNugetConfigs scriptDirectory workingDirectory timeout - let directiveLines = Seq.append packageManagerTextLines configIncludes - let resolutionResult = prepareDependencyResolutionFiles (scriptExt, directiveLines, targetFrameworkMoniker, runtimeIdentifier, timeout) + let resolutionResult = prepareDependencyResolutionFiles (scriptExt, packageManagerTextLines, targetFrameworkMoniker, runtimeIdentifier, timeout) match resolutionResult.resolutionsFile with | Some file -> let resolutions = getResolutionsFromFile file let references = (findReferencesFromResolutions resolutions) |> Array.toSeq let scripts = - let generatedScriptPath = resolutionResult.projectPath + scriptExt - let generatedScriptBody = makeScriptFromReferences references poundRprefix - emitFile generatedScriptPath generatedScriptBody + let scriptPath = resolutionResult.projectPath + scriptExt + let scriptBody = makeScriptFromReferences references poundRprefix + emitFile scriptPath scriptBody let loads = (findLoadsFromResolutions resolutions) |> Array.toList - List.concat [ [generatedScriptPath]; loads] |> List.toSeq + List.concat [ [scriptPath]; loads] |> List.toSeq let includes = (findIncludesFromResolutions resolutions) |> Array.toSeq ResolveDependenciesResult(resolutionResult.success, resolutionResult.stdOut, resolutionResult.stdErr, references, scripts, includes) diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.fsi b/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.fsi index 1238f80882b..db34173c7f1 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.fsi +++ b/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.fsi @@ -41,7 +41,7 @@ type ResolveDependenciesResult = [] type FSharpDependencyManager = - new: outputDirectory:string option -> FSharpDependencyManager + new: outputDir:string option -> FSharpDependencyManager member Name: string @@ -49,4 +49,4 @@ type FSharpDependencyManager = member HelpMessages:string[] - member ResolveDependencies: scriptDirectory: string * scriptName: string * scriptExt: string * packageManagerTextLines: (string * string) seq * targetFrameworkMoniker: string * runtimeIdentifier: string * timeout: int-> obj + member ResolveDependencies: scriptExt: string * packageManagerTextLines: (string * string) seq * targetFrameworkMoniker: string * runtimeIdentifier: string * timeout: int-> obj diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/README.md b/src/fsharp/FSharp.DependencyManager.Nuget/README.md index 01927f4edcb..ed6d3262313 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/README.md +++ b/src/fsharp/FSharp.DependencyManager.Nuget/README.md @@ -13,3 +13,5 @@ let o = {| X = 2; Y = "Hello" |} printfn "%s" (JsonConvert.SerializeObject o)" ``` + +There are more Dependency Manager extensions, find more about them: [Microsoft.DotNet.DependencyManager](https://github.com/dotnet/fsharp/tree/main/src/fsharp/Microsoft.DotNet.DependencyManager) diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.cs.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.cs.xlf index 2866d233f47..6d1e714fffe 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.cs.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.cs.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Neplatná hodnota pro časový limit {0}. Platné hodnoty: none, -1 a celočíselný počet milisekund, po které se má počkat + Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait @@ -24,7 +24,7 @@ Missing value for timeout - Chybí hodnota pro časový limit + Missing value for timeout @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Při řešení balíčků vypršel časový limit. Proces: {0} {1} + Timed out resolving packages, process: '{0}' '{1}' diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.de.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.de.xlf index 3d060a10414..54771a9aa69 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.de.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.de.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Ungültiger Wert für Timeout "{0}", gültige Werte: keine, -1 und ganzzahlige Millisekundenwerte für die Wartezeit + Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait @@ -24,7 +24,7 @@ Missing value for timeout - Fehlender Wert für Timeout + Missing value for timeout @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Timeout beim Auflösen von Paketen, Prozess: "{0}" "{1}" + Timed out resolving packages, process: '{0}' '{1}' diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.es.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.es.xlf index 5b8974e7605..38ae9838c49 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.es.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.es.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Valor de tiempo de espera "{0}" no válido. Valores válidos: ninguno, -1 y un número entero de milisegundos de espera + Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait @@ -24,7 +24,7 @@ Missing value for timeout - Falta un valor para el tiempo de espera + Missing value for timeout @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Se agotó el tiempo de espera en la resolución de paquetes, proceso: "{0}" "{1}" + Timed out resolving packages, process: '{0}' '{1}' diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.fr.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.fr.xlf index 58f97bce018..c3d489413c6 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.fr.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.fr.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Valeur non valide pour le délai d'expiration : '{0}'. Valeurs valides : aucune valeur, -1 ou un nombre entier pour le délai d'attente en millisecondes + Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait @@ -24,7 +24,7 @@ Missing value for timeout - Valeur manquante pour le délai d'expiration + Missing value for timeout @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Expiration du délai de résolution des packages. Processus : '{0}' '{1}' + Timed out resolving packages, process: '{0}' '{1}' diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.it.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.it.xlf index e840741112b..bde3abd644b 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.it.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.it.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Valore non valido per il timeout '{0}'. I valori validi sono: nessuno, -1 e numeri interi per i millisecondi di attesa + Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait @@ -24,7 +24,7 @@ Missing value for timeout - Manca il valore per il timeout + Missing value for timeout @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Timeout durante la risoluzione dei pacchetti. Processo: '{0}' '{1}' + Timed out resolving packages, process: '{0}' '{1}' diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ja.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ja.xlf index f0437133108..41883b2b5d0 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ja.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ja.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - タイムアウト '{0}' の値が無効です。有効な値: なし、-1、および整数 (待機するミリ秒) + Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait @@ -24,7 +24,7 @@ Missing value for timeout - タイムアウトの値がありません + Missing value for timeout @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - パッケージの解決中にタイムアウトになりました。プロセス: '{0}' '{1}' + Timed out resolving packages, process: '{0}' '{1}' diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ko.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ko.xlf index 53d85ca1b4f..baa2f51913a 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ko.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ko.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - 시간 제한 '{0}'의 값이 잘못되었습니다. 유효한 값: 없음, -1 및 정수 대기 시간(밀리초) + Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait @@ -24,7 +24,7 @@ Missing value for timeout - 시간 제한 값 누락 + Missing value for timeout @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - 패키지를 확인하는 동안 시간이 초과되었습니다. 프로세스: '{0}' '{1}' + Timed out resolving packages, process: '{0}' '{1}' diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.pl.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.pl.xlf index 9a908307899..d1e492e63cd 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.pl.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.pl.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Nieprawidłowa wartość limitu czasu „{0}”; prawidłowe wartości: none, -1 i liczba całkowita określająca liczbę milisekund oczekiwania + Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait @@ -24,7 +24,7 @@ Missing value for timeout - Brak wartości limitu czasu + Missing value for timeout @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Przekroczono limit czasu podczas rozpoznawania pakietów, proces: „{0}” „{1}” + Timed out resolving packages, process: '{0}' '{1}' diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.pt-BR.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.pt-BR.xlf index af23785016a..f4797e17455 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.pt-BR.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.pt-BR.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Valor inválido para o tempo limite '{0}'. Valores válidos: none,-1 e milissegundos inteiros de espera + Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait @@ -24,7 +24,7 @@ Missing value for timeout - Valor ausente para o tempo limite + Missing value for timeout @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Tempo limite atingido ao resolver os pacotes. Processo: '{0}' '{1}' + Timed out resolving packages, process: '{0}' '{1}' diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ru.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ru.xlf index f57d66e3342..746afe45808 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ru.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ru.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Недопустимое значение времени ожидания "{0}". Допустимые значения: none, –1 и integer, мс ожидания. + Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait @@ -24,7 +24,7 @@ Missing value for timeout - Отсутствует значение времени ожидания + Missing value for timeout @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Истекло время ожидания при разрешении пакетов. Процесс: "{0}" "{1}". + Timed out resolving packages, process: '{0}' '{1}' diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.tr.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.tr.xlf index d628c815565..0716a294667 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.tr.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.tr.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Zaman aşımı için '{0}' değeri geçersiz, geçerli değerler: none, -1 ve tamsayı milisaniye cinsinden bekleme süresi + Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait @@ -24,7 +24,7 @@ Missing value for timeout - Zaman aşımı için değer eksik + Missing value for timeout @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Paketler çözümlenirken zaman aşımı gerçekleşti, işlem: '{0}' '{1}' + Timed out resolving packages, process: '{0}' '{1}' diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.zh-Hans.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.zh-Hans.xlf index 65cd28177b1..67d21ef5907 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.zh-Hans.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.zh-Hans.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - 超时 "{0}" 的值无效,有效值: none、-1 和要等待的毫秒数(整数) + Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait @@ -24,7 +24,7 @@ Missing value for timeout - 缺少超时值 + Missing value for timeout @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - 解析包超时,进程: "{0}" "{1}" + Timed out resolving packages, process: '{0}' '{1}' diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.zh-Hant.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.zh-Hant.xlf index 580ca08a73f..7a310871942 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.zh-Hant.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.zh-Hant.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - 逾時 '{0}' 值無效,有效的值: 無、-1 和要等候的整數毫秒 + Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait @@ -24,7 +24,7 @@ Missing value for timeout - 遺漏逾時值 + Missing value for timeout @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - 解析套件時發生逾時,處理序: '{0}' '{1}' + Timed out resolving packages, process: '{0}' '{1}' diff --git a/src/fsharp/FindUnsolved.fs b/src/fsharp/FindUnsolved.fs index 3728ec59aa8..9b36c3a82a5 100644 --- a/src/fsharp/FindUnsolved.fs +++ b/src/fsharp/FindUnsolved.fs @@ -3,9 +3,9 @@ /// Find unsolved, uninstantiated type variables module internal FSharp.Compiler.FindUnsolved -open Internal.Utilities.Collections -open Internal.Utilities.Library open FSharp.Compiler +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps @@ -191,7 +191,7 @@ and accDiscrim cenv env d = | DecisionTreeTest.Const _ | DecisionTreeTest.IsNull -> () | DecisionTreeTest.IsInst (srcty, tgty) -> accTy cenv env srcty; accTy cenv env tgty - | DecisionTreeTest.ActivePatternCase (exp, tys, _, _, _, _) -> + | DecisionTreeTest.ActivePatternCase (exp, tys, _, _, _) -> accExpr cenv env exp accTypeInst cenv env tys | DecisionTreeTest.Error _ -> () diff --git a/src/fsharp/FindUnsolved.fsi b/src/fsharp/FindUnsolved.fsi index 12c5c536bb0..48d3dc3a43b 100644 --- a/src/fsharp/FindUnsolved.fsi +++ b/src/fsharp/FindUnsolved.fsi @@ -1,5 +1,6 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + module internal FSharp.Compiler.FindUnsolved open FSharp.Compiler.TypedTree diff --git a/src/fsharp/FxResolver.fs b/src/fsharp/FxResolver.fs deleted file mode 100644 index dc8cd59a310..00000000000 --- a/src/fsharp/FxResolver.fs +++ /dev/null @@ -1,892 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -// Functions to retrieve framework dependencies -namespace FSharp.Compiler - -open System -open System.Collections.Concurrent -open System.Collections.Generic -open System.Diagnostics -open System.Globalization -open System.IO -open System.Reflection -open System.Runtime.InteropServices -open Internal.Utilities.FSharpEnvironment -open Internal.Utilities.Library -open FSharp.Compiler.AbstractIL.ILBinaryReader -open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Text -open FSharp.Compiler.IO - -type internal FxResolverLockToken() = - interface LockToken - -type internal FxResolverLock = Lock - -/// Resolves the references for a chosen or currently-executing framework, for -/// - script execution -/// - script editing -/// - script compilation -/// - out-of-project sources editing -/// - default references for fsc.exe -/// - default references for fsi.exe -type internal FxResolver(assumeDotNetFramework: bool, projectDir: string, useSdkRefs: bool, isInteractive: bool, rangeForErrors: range, sdkDirOverride: string option) = - - let fxlock = FxResolverLock() - - static let RequireFxResolverLock (_fxtok: FxResolverLockToken, _thingProtected: 'T) = () - - /// We only try once for each directory (cleared on solution unload) to prevent conditions where - /// we repeatedly try to run dotnet.exe on every keystroke for a script - static let desiredDotNetSdkVersionForDirectoryCache = ConcurrentDictionary>() - - // Execute the process pathToExe passing the arguments: arguments with the working directory: workingDir timeout after timeout milliseconds -1 = wait forever - // returns exit code, stdio and stderr as string arrays - let executeProcess pathToExe arguments (workingDir:string option) timeout = - if not (String.IsNullOrEmpty pathToExe) then - let errorsList = ResizeArray() - let outputList = ResizeArray() - let mutable errorslock = obj - let mutable outputlock = obj - let outputDataReceived (message: string) = - if not (isNull message) then - lock outputlock (fun () -> outputList.Add(message)) - - let errorDataReceived (message: string) = - if not (isNull message) then - lock errorslock (fun () -> errorsList.Add(message)) - - let psi = ProcessStartInfo() - psi.FileName <- pathToExe - if workingDir.IsSome then - psi.WorkingDirectory <- workingDir.Value - psi.RedirectStandardOutput <- true - psi.RedirectStandardError <- true - psi.Arguments <- arguments - psi.CreateNoWindow <- true - psi.EnvironmentVariables.Remove("MSBuildSDKsPath") // Host can sometimes add this, and it can break things - psi.UseShellExecute <- false - - use p = new Process() - p.StartInfo <- psi - - p.OutputDataReceived.Add(fun a -> outputDataReceived a.Data) - p.ErrorDataReceived.Add(fun a -> errorDataReceived a.Data) - - if p.Start() then - p.BeginOutputReadLine() - p.BeginErrorReadLine() - if not(p.WaitForExit(timeout)) then - // Timed out resolving throw a diagnostic. - raise (new TimeoutException(sprintf "Timeout executing command '%s' '%s'" (psi.FileName) (psi.Arguments))) - else - p.WaitForExit() -#if DEBUG - if workingDir.IsSome then - FileSystem.OpenFileForWriteShim(Path.Combine(workingDir.Value, "StandardOutput.txt")).WriteAllLines(outputList) - FileSystem.OpenFileForWriteShim(Path.Combine(workingDir.Value, "StandardError.txt")).WriteAllLines(errorsList) -#endif - p.ExitCode, outputList.ToArray(), errorsList.ToArray() - else - -1, Array.empty, Array.empty - - /// Find the relevant sdk version by running `dotnet --version` in the script/project location, - /// taking into account any global.json - let tryGetDesiredDotNetSdkVersionForDirectoryInfo() = - desiredDotNetSdkVersionForDirectoryCache.GetOrAdd(projectDir, (fun _ -> - match getDotnetHostPath() with - | Some dotnetHostPath -> - try - let workingDir = - if FileSystem.DirectoryExistsShim(projectDir) then - Some projectDir - else - None - let exitCode, output, errors = executeProcess dotnetHostPath "--version" workingDir 30000 - if exitCode <> 0 then - Result.Error (Error(FSComp.SR.scriptSdkNotDetermined(dotnetHostPath, projectDir, (errors |> String.concat "\n"), exitCode), rangeForErrors)) - else - Result.Ok (output |> String.concat "\n") - with err -> - Result.Error (Error(FSComp.SR.scriptSdkNotDetermined(dotnetHostPath, projectDir, err.Message, 1), rangeForErrors)) - | _ -> Result.Error (Error(FSComp.SR.scriptSdkNotDeterminedNoHost(), rangeForErrors)))) - - // We need to make sure the warning gets replayed each time, despite the lazy computations - // To do this we pass it back as data and eventually replay it at the entry points to FxResolver. - let tryGetDesiredDotNetSdkVersionForDirectory() = - match tryGetDesiredDotNetSdkVersionForDirectoryInfo() with - | Result.Ok res -> Some res, [] - | Result.Error exn -> None, [exn] - - // This is used to replay the warnings generated in the function above. - // It should not be used under the lazy on-demand computations in this type, nor should the warnings be explicitly ignored - let replayWarnings (res, warnings: exn list) = - for exn in warnings do warning exn - res - - /// Compute the .NET Core SDK directory relevant to projectDir, used to infer the default target framework assemblies. - /// - /// On-demand because (a) some FxResolver are ephemeral (b) we want to avoid recomputation - let trySdkDir = - lazy - // This path shouldn't be used with reflective processes - assert not isInteractive - match assumeDotNetFramework with - | true -> None, [] - | _ when not useSdkRefs -> None, [] - | _ -> - match sdkDirOverride with - | Some sdkDir -> Some sdkDir, [] - | None -> - let sdksDir = - match getDotnetHostDirectory() with - | Some dotnetDir -> - let candidate = FileSystem.GetFullPathShim(Path.Combine(dotnetDir, "sdk")) - if FileSystem.DirectoryExistsShim(candidate) then Some candidate else None - | None -> None - - match sdksDir with - | Some sdksDir -> - // Find the sdk version by running `dotnet --version` in the script/project location - let desiredSdkVer, warnings = tryGetDesiredDotNetSdkVersionForDirectory() - - let sdkDir = - DirectoryInfo(sdksDir).GetDirectories() - // Filter to the version reported by `dotnet --version` in the location, if that succeeded - // If it didn't succeed we will revert back to implementation assemblies, but still need an SDK - // to use, so we find the SDKs by looking for dotnet.runtimeconfig.json - |> Array.filter (fun di -> - match desiredSdkVer with - | None -> FileSystem.FileExistsShim(Path.Combine(di.FullName,"dotnet.runtimeconfig.json")) - | Some v -> di.Name = v) - |> Array.sortBy (fun di -> di.FullName) - |> Array.tryLast - |> Option.map (fun di -> di.FullName) - sdkDir, warnings - | _ -> - None, [] - - let tryGetSdkDir() = trySdkDir.Force() - - /// Get the framework implementation directory of the currently running process - let getRunningImplementationAssemblyDir() = - let filename = Path.GetDirectoryName(typeof.Assembly.Location) - if String.IsNullOrWhiteSpace filename then getFSharpCompilerLocation() else filename - - // Compute the framework implementation directory, either of the selected SDK or the currently running process as a backup - // F# interactive/reflective scenarios use the implementation directory of the currently running process - // - // On-demand because (a) some FxResolver are ephemeral (b) we want to avoid recomputation - let implementationAssemblyDir = - lazy - if isInteractive then - getRunningImplementationAssemblyDir(), [] - else - let sdkDir, warnings = tryGetSdkDir() - match sdkDir with - | Some dir -> - try - let dotnetConfigFile = Path.Combine(dir, "dotnet.runtimeconfig.json") - use stream = FileSystem.OpenFileForReadShim(dotnetConfigFile) - let dotnetConfig = stream.ReadAllText() - let pattern = "\"version\": \"" - let startPos = dotnetConfig.IndexOf(pattern, StringComparison.OrdinalIgnoreCase) + pattern.Length - let endPos = dotnetConfig.IndexOf("\"", startPos) - let ver = dotnetConfig.[startPos..endPos-1] - let path = FileSystem.GetFullPathShim(Path.Combine(dir, "..", "..", "shared", "Microsoft.NETCore.App", ver)) - if FileSystem.DirectoryExistsShim(path) then - path, warnings - else - getRunningImplementationAssemblyDir(), warnings - with e -> - let warn = Error(FSComp.SR.scriptSdkNotDeterminedUnexpected(e.Message), rangeForErrors) - let path = getRunningImplementationAssemblyDir() - path, [warn] - | _ -> - let path = getRunningImplementationAssemblyDir() - path, [] - - let getImplementationAssemblyDir() = implementationAssemblyDir.Force() - - let getFSharpCoreLibraryName = "FSharp.Core" - - let getFsiLibraryName = "FSharp.Compiler.Interactive.Settings" - - // Use the FSharp.Core that is executing with the compiler as a backup reference - let getFSharpCoreImplementationReference() = Path.Combine(getFSharpCompilerLocation(), getFSharpCoreLibraryName + ".dll") - - // Use the FSharp.Compiler.Interactive.Settings executing with the compiler as a backup reference - let getFsiLibraryImplementationReference() = Path.Combine(getFSharpCompilerLocation(), getFsiLibraryName + ".dll") - - // Use the ValueTuple that is executing with the compiler if it is from System.ValueTuple - // or the System.ValueTuple.dll that sits alongside the compiler. (Note we always ship one with the compiler) - let getSystemValueTupleImplementationReference() = - let implDir = getImplementationAssemblyDir() |> replayWarnings - let probeFile = Path.Combine(implDir, "System.ValueTuple.dll") - if FileSystem.FileExistsShim(probeFile) then - Some probeFile - else - try - let asm = typeof>.Assembly - if asm.FullName.StartsWith("System.ValueTuple", StringComparison.OrdinalIgnoreCase) then - Some asm.Location - else - let valueTuplePath = Path.Combine(getFSharpCompilerLocation(), "System.ValueTuple.dll") - if FileSystem.FileExistsShim(valueTuplePath) then - Some valueTuplePath - else - None - with _ -> - // This is defensive coding, we don't expect this exception to happen - None - - // Algorithm: - // search the sdk for a versioned subdirectory of the sdk that matches or is lower than the version passed as an argument - // path is the path to the versioned directories - // it may be a subdirectory of a locally xcopied sdk or the global sdk - // version is nuget format version id e.g 5.0.1-preview-4.3 - // - let tryGetVersionedSubDirectory (path:string) (version:string) = - let zeroVersion = Version("0.0.0.0") - - // Split the version into a number + it's suffix - let computeVersion (version: string) = - let ver, suffix = - let suffixPos = version.IndexOf('-') - if suffixPos >= 0 then - version.Substring(0, suffixPos), version.Substring(suffixPos + 1) - else - version, "" - - match Version.TryParse(ver) with - | true, v -> v, suffix - | false, _ -> zeroVersion, suffix - - let compareVersion (v1:Version * string) (v2:Version * string) = - let fstCompare = (fst v1).CompareTo(fst v2) - if fstCompare <> 0 then - fstCompare - else - (snd v1).CompareTo(snd v2) - - let directories = getDotnetHostSubDirectories path - let targetVersion = computeVersion version - - if directories.Length > 0 then - directories - |> Array.map (fun di -> computeVersion di.Name, di) - |> Array.filter(fun (v, _) -> (compareVersion v targetVersion) <= 0) - |> Array.sortWith (fun (v1,_) (v2,_) -> compareVersion v1 v2) - |> Array.map (fun (_, di) -> di) - |> Array.tryLast - else - None - - // Algorithm: - // use implementation location of obj type, on shared frameworks it will always be in: - // - // dotnet\shared\Microsoft.NETCore.App\sdk-version\System.Private.CoreLib.dll - // - // if that changes we will need to find another way to do this. Hopefully the sdk will eventually provide an API - // use the well know location for obj to traverse the file system towards the - // - // packs\Microsoft.NETCore.App.Ref\sdk-version\netcoreappn.n - // we will rely on the sdk-version match on the two paths to ensure that we get the product that ships with the - // version of the runtime we are executing on - // Use the reference assemblies for the highest netcoreapp tfm that we find in that location. - // - // On-demand because (a) some FxResolver are ephemeral (b) we want to avoid recomputation - let tryNetCoreRefsPackDirectoryRoot = - lazy - try - // Use the reference assemblies for the highest netcoreapp tfm that we find in that location that is - // lower than or equal to the implementation version. - let implDir, warnings = getImplementationAssemblyDir() - let version = DirectoryInfo(implDir).Name - if version.StartsWith("x") then - // Is running on the desktop - (None, None), warnings - else - let di = tryGetVersionedSubDirectory "packs/Microsoft.NETCore.App.Ref" version - match di with - | Some di -> (Some(di.Name), Some(di.Parent.FullName)), warnings - | None -> (None, None), warnings - with e -> - let warn = Error(FSComp.SR.scriptSdkNotDeterminedUnexpected(e.Message), rangeForErrors) - // This is defensive coding, we don't expect this exception to happen - // NOTE: consider reporting this exception as a warning - (None, None), [warn] - - let tryGetNetCoreRefsPackDirectoryRoot() = tryNetCoreRefsPackDirectoryRoot.Force() - - // Tries to figure out the tfm for the compiler instance. - // On coreclr it uses the deps.json file - // - // On-demand because (a) some FxResolver are ephemeral (b) we want to avoid recomputation - let tryRunningDotNetCoreTfm = - lazy - let file = - try - let asm = Assembly.GetEntryAssembly() - match asm with - | null -> "" - | asm -> - let depsJsonPath = Path.ChangeExtension(asm.Location, "deps.json") - if FileSystem.FileExistsShim(depsJsonPath) then - use stream = FileSystem.OpenFileForReadShim(depsJsonPath) - stream.ReadAllText() - else - "" - with _ -> - // This is defensive coding, we don't expect this exception to happen - // NOTE: consider reporting this exception as a warning - "" - - let tfmPrefix=".NETCoreApp,Version=v" - let pattern = "\"name\": \"" + tfmPrefix - let startPos = - let startPos = file.IndexOf(pattern, StringComparison.OrdinalIgnoreCase) - if startPos >= 0 then startPos + (pattern.Length) else startPos - let length = - if startPos >= 0 then - let ep = file.IndexOf("\"", startPos) - if ep >= 0 then ep - startPos else ep - else -1 - match startPos, length with - | -1, _ - | _, -1 -> - if isRunningOnCoreClr then - // Running on coreclr but no deps.json was deployed with the host so default to 5.0 - Some "net5.0" - else - // Running on desktop - None - | pos, length -> - // use value from the deps.json file - let suffix = file.Substring(pos, length) - let prefix = - match Double.TryParse(suffix) with - | true, value when value < 5.0 -> "netcoreapp" - | _ -> "net" - Some (prefix + suffix) - - let tryGetRunningDotNetCoreTfm() = tryRunningDotNetCoreTfm.Force() - - // Tries to figure out the tfm for the compiler instance on the Windows desktop - // On full clr it uses the mscorlib version number - let getRunningDotNetFrameworkTfm () = - let defaultMscorlibVersion = 4,8,3815,0 - let desktopProductVersionMonikers = [| - // major, minor, build, revision, moniker - 4, 8, 3815, 0, "net48" - 4, 8, 3761, 0, "net48" - 4, 7, 3190, 0, "net472" - 4, 7, 3062, 0, "net472" - 4, 7, 2600, 0, "net471" - 4, 7, 2558, 0, "net471" - 4, 7, 2053, 0, "net47" - 4, 7, 2046, 0, "net47" - 4, 6, 1590, 0, "net462" - 4, 6, 57, 0, "net462" - 4, 6, 1055, 0, "net461" - 4, 6, 81, 0, "net46" - 4, 0, 30319, 34209, "net452" - 4, 0, 30319, 17020, "net452" - 4, 0, 30319, 18408, "net451" - 4, 0, 30319, 17929, "net45" - 4, 0, 30319, 1, "net4" - |] - - let majorPart, minorPart, buildPart, privatePart= - try - let attrOpt = typeof.Assembly.GetCustomAttributes(typeof) |> Seq.tryHead - match attrOpt with - | Some attr -> - let fv = (downcast attr : AssemblyFileVersionAttribute).Version.Split([|'.'|]) |> Array.map(fun e -> Int32.Parse(e)) - fv.[0], fv.[1], fv.[2], fv.[3] - | _ -> defaultMscorlibVersion - with _ -> defaultMscorlibVersion - - // Get the ProductVersion of this framework compare with table yield compatible monikers - match desktopProductVersionMonikers - |> Array.tryFind (fun (major, minor, build, revision, _) -> - (majorPart >= major) && - (minorPart >= minor) && - (buildPart >= build) && - (privatePart >= revision)) with - | Some (_,_,_,_,moniker) -> - moniker - | None -> - // no TFM could be found, assume latest stable? - "net48" - - let trySdkRefsPackDirectory = - lazy - let tfmPrefix = "netcoreapp" - let tfmCompare c1 c2 = - let deconstructTfmApp (netcoreApp: DirectoryInfo) = - let name = netcoreApp.Name - try - if name.StartsWith(tfmPrefix, StringComparison.InvariantCultureIgnoreCase) then - Some (Double.Parse(name.Substring(tfmPrefix.Length), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture)) - else - None - with _ -> - // This is defensive coding, we don't expect this exception to happen - // NOTE: consider reporting this exception as a warning - None - - if c1 = c2 then 0 - else - match (deconstructTfmApp c1), (deconstructTfmApp c2) with - | Some c1, Some c2 -> int(c1 - c2) - | None, Some _ -> -1 - | Some _, None -> 1 - | _ -> 0 - - match tryGetNetCoreRefsPackDirectoryRoot() with - | (Some version, Some root), warnings -> - try - let ref = Path.Combine(root, version, "ref") - let highestTfm = - DirectoryInfo(ref).GetDirectories() - |> Array.sortWith tfmCompare - |> Array.tryLast - - match highestTfm with - | Some tfm -> Some (Path.Combine(ref, tfm.Name)), warnings - | None -> None, warnings - with e -> - let warn = Error(FSComp.SR.scriptSdkNotDeterminedUnexpected(e.Message), rangeForErrors) - // This is defensive coding, we don't expect this exception to happen - // NOTE: consider reporting this exception as a warning - None, warnings @ [warn] - | _ -> None, [] - - let tryGetSdkRefsPackDirectory() = trySdkRefsPackDirectory.Force() - - let getDependenciesOf assemblyReferences = - let assemblies = new Dictionary() - - // Identify path to a dll in the framework directory from a simple name - let frameworkPathFromSimpleName simpleName = - let implDir = getImplementationAssemblyDir() |> replayWarnings - let root = Path.Combine(implDir, simpleName) - let pathOpt = - [| ""; ".dll"; ".exe" |] - |> Seq.tryPick(fun ext -> - let path = root + ext - if FileSystem.FileExistsShim(path) then Some path - else None) - match pathOpt with - | Some path -> path - | None -> root - - // Collect all assembly dependencies into assemblies dictionary - let rec traverseDependencies reference = - // Reference can be either path to a file on disk or a Assembly Simple Name - let referenceName, path = - try - if FileSystem.FileExistsShim(reference) then - // Reference is a path to a file on disk - Path.GetFileNameWithoutExtension(reference), reference - else - // Reference is a SimpleAssembly name - reference, frameworkPathFromSimpleName reference - - with _ -> - // This is defensive coding, we don't expect this exception to happen - reference, frameworkPathFromSimpleName reference - - if not (assemblies.ContainsKey(referenceName)) then - try - if FileSystem.FileExistsShim(path) then - match referenceName with - | "System.Runtime.WindowsRuntime" - | "System.Runtime.WindowsRuntime.UI.Xaml" -> - // The Windows compatibility pack included in the runtime contains a reference to - // System.Runtime.WindowsRuntime, but to properly use that type the runtime also needs a - // reference to the Windows.md meta-package, which isn't referenced by default. To avoid - // a bug where types from `Windows, Version=255.255.255.255` can't be found we're going to - // not default include this assembly. It can still be manually referenced if it's needed - // via the System.Runtime.WindowsRuntime NuGet package. - // - // In the future this branch can be removed because WinRT support is being removed from the - // .NET 5 SDK (https://github.com/dotnet/runtime/pull/36715) - () - | "System.Private.CoreLib" -> - // System.Private.CoreLib doesn't load with reflection - assemblies.Add(referenceName, path) - | _ -> - try - let opts = - { metadataOnly = MetadataOnlyFlag.Yes // turn this off here as we need the actual IL code - reduceMemoryUsage = ReduceMemoryFlag.Yes - pdbDirPath = None - tryGetMetadataSnapshot = (fun _ -> None) (* tryGetMetadataSnapshot *) } - - let reader = OpenILModuleReader path opts - assemblies.Add(referenceName, path) - for reference in reader.ILAssemblyRefs do - traverseDependencies reference.Name - - // There are many native assemblies which can't be cracked, raising exceptions - with _ -> () - with _ -> () - - assemblyReferences |> List.iter traverseDependencies - assemblies - - // This list is the default set of references for "non-project" files. - // - // These DLLs are - // (a) included in the environment used for all .fsx files (see service.fs) - // (b) included in environment for files 'orphaned' from a project context - // -- for orphaned files (files in VS without a project context) - let getDotNetFrameworkDefaultReferences useFsiAuxLib = [ - yield "mscorlib" - yield "System" - yield "System.Xml" - yield "System.Runtime.Remoting" - yield "System.Runtime.Serialization.Formatters.Soap" - yield "System.Data" - yield "System.Drawing" - yield "System.Core" - yield "System.Configuration" - - yield getFSharpCoreLibraryName - if useFsiAuxLib then yield fsiLibraryName - - // always include a default reference to System.ValueTuple.dll in scripts and out-of-project sources - match getSystemValueTupleImplementationReference () with - | None -> () - | Some v -> yield v - - // These are the Portable-profile and .NET Standard 1.6 dependencies of FSharp.Core.dll. These are needed - // when an F# script 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 "netstandard" - 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.Net.Requests" // System.Net.WebResponse etc. - yield "System.Collections" // System.Collections.Generic.List - yield "System.Runtime.Numerics" // BigInteger - yield "System.Threading" // OperationCanceledException - yield "System.Web" - yield "System.Web.Services" - yield "System.Windows.Forms" - yield "System.Numerics" - ] - - let getDotNetCoreImplementationReferences useFsiAuxLib = - let implDir = getImplementationAssemblyDir() |> replayWarnings - let roots = - [ yield! Directory.GetFiles(implDir, "*.dll") - yield getFSharpCoreImplementationReference() - if useFsiAuxLib then yield getFsiLibraryImplementationReference() ] - (getDependenciesOf roots).Values |> Seq.toList - - // A set of assemblies to always consider to be system assemblies. A common set of these can be used a shared - // resources between projects in the compiler services. Also all assemblies where well-known system types exist - // referenced from TcGlobals must be listed here. - let systemAssemblies = - HashSet [ - // NOTE: duplicates are ok in this list - - // .NET Framework list - yield "mscorlib" - yield "netstandard" - yield "System" - yield getFSharpCoreLibraryName - yield "FSharp.Compiler.Interactive.Settings" - yield "Microsoft.CSharp" - yield "Microsoft.VisualBasic" - yield "Microsoft.VisualBasic.Core" - yield "Microsoft.Win32.Primitives" - yield "Microsoft.Win32.Registry" - yield "System.AppContext" - yield "System.Buffers" - yield "System.Collections" - yield "System.Collections.Concurrent" - yield "System.Collections.Immutable" - yield "System.Collections.NonGeneric" - yield "System.Collections.Specialized" - yield "System.ComponentModel" - yield "System.ComponentModel.Annotations" - yield "System.ComponentModel.DataAnnotations" - yield "System.ComponentModel.EventBasedAsync" - yield "System.ComponentModel.Primitives" - yield "System.ComponentModel.TypeConverter" - yield "System.Configuration" - yield "System.Console" - yield "System.Core" - yield "System.Data" - yield "System.Data.Common" - yield "System.Data.DataSetExtensions" - yield "System.Deployment" - yield "System.Design" - yield "System.Diagnostics.Contracts" - yield "System.Diagnostics.Debug" - yield "System.Diagnostics.DiagnosticSource" - yield "System.Diagnostics.FileVersionInfo" - yield "System.Diagnostics.Process" - yield "System.Diagnostics.StackTrace" - yield "System.Diagnostics.TextWriterTraceListener" - yield "System.Diagnostics.Tools" - yield "System.Diagnostics.TraceSource" - yield "System.Diagnostics.Tracing" - yield "System.Drawing" - yield "System.Drawing.Primitives" - yield "System.Dynamic.Runtime" - yield "System.Formats.Asn1" - yield "System.Globalization" - yield "System.Globalization.Calendars" - yield "System.Globalization.Extensions" - yield "System.IO" - yield "System.IO.Compression" - yield "System.IO.Compression.Brotli" - yield "System.IO.Compression.FileSystem" - yield "System.IO.Compression.ZipFile" - yield "System.IO.FileSystem" - yield "System.IO.FileSystem.DriveInfo" - yield "System.IO.FileSystem.Primitives" - yield "System.IO.FileSystem.Watcher" - yield "System.IO.IsolatedStorage" - yield "System.IO.MemoryMappedFiles" - yield "System.IO.Pipes" - yield "System.IO.UnmanagedMemoryStream" - yield "System.Linq" - yield "System.Linq.Expressions" - yield "System.Linq.Expressions" - yield "System.Linq.Parallel" - yield "System.Linq.Queryable" - yield "System.Memory" - yield "System.Messaging" - yield "System.Net" - yield "System.Net.Http" - yield "System.Net.Http.Json" - yield "System.Net.HttpListener" - yield "System.Net.Mail" - yield "System.Net.NameResolution" - yield "System.Net.NetworkInformation" - yield "System.Net.Ping" - yield "System.Net.Primitives" - yield "System.Net.Requests" - yield "System.Net.Security" - yield "System.Net.ServicePoint" - yield "System.Net.Sockets" - yield "System.Net.WebClient" - yield "System.Net.WebHeaderCollection" - yield "System.Net.WebProxy" - yield "System.Net.WebSockets" - yield "System.Net.WebSockets.Client" - yield "System.Numerics" - yield "System.Numerics.Vectors" - yield "System.ObjectModel" - yield "System.Observable" - yield "System.Private.Uri" - yield "System.Reflection" - yield "System.Reflection.DispatchProxy" - yield "System.Reflection.Emit" - yield "System.Reflection.Emit.ILGeneration" - yield "System.Reflection.Emit.Lightweight" - yield "System.Reflection.Extensions" - yield "System.Reflection.Metadata" - yield "System.Reflection.Primitives" - yield "System.Reflection.TypeExtensions" - yield "System.Resources.Reader" - yield "System.Resources.ResourceManager" - yield "System.Resources.Writer" - yield "System.Runtime" - yield "System.Runtime.CompilerServices.Unsafe" - yield "System.Runtime.CompilerServices.VisualC" - yield "System.Runtime.Extensions" - yield "System.Runtime.Handles" - yield "System.Runtime.InteropServices" - yield "System.Runtime.InteropServices.PInvoke" - yield "System.Runtime.InteropServices.RuntimeInformation" - yield "System.Runtime.InteropServices.WindowsRuntime" - yield "System.Runtime.Intrinsics" - yield "System.Runtime.Loader" - yield "System.Runtime.Numerics" - yield "System.Runtime.Remoting" - yield "System.Runtime.Serialization" - yield "System.Runtime.Serialization.Formatters" - yield "System.Runtime.Serialization.Formatters.Soap" - yield "System.Runtime.Serialization.Json" - yield "System.Runtime.Serialization.Primitives" - yield "System.Runtime.Serialization.Xml" - yield "System.Security" - yield "System.Security.Claims" - yield "System.Security.Cryptography.Algorithms" - yield "System.Security.Cryptography.Cng" - yield "System.Security.Cryptography.Csp" - yield "System.Security.Cryptography.Encoding" - yield "System.Security.Cryptography.OpenSsl" - yield "System.Security.Cryptography.Primitives" - yield "System.Security.Cryptography.X509Certificates" - yield "System.Security.Principal" - yield "System.Security.Principal.Windows" - yield "System.Security.SecureString" - yield "System.ServiceModel.Web" - yield "System.ServiceProcess" - yield "System.Text.Encoding" - yield "System.Text.Encoding.CodePages" - yield "System.Text.Encoding.Extensions" - yield "System.Text.Encodings.Web" - yield "System.Text.Json" - yield "System.Text.RegularExpressions" - yield "System.Threading" - yield "System.Threading.Channels" - yield "System.Threading.Overlapped" - yield "System.Threading.Tasks" - yield "System.Threading.Tasks.Dataflow" - yield "System.Threading.Tasks.Extensions" - yield "System.Threading.Tasks.Parallel" - yield "System.Threading.Thread" - yield "System.Threading.ThreadPool" - yield "System.Threading.Timer" - yield "System.Transactions" - yield "System.Transactions.Local" - yield "System.ValueTuple" - yield "System.Web" - yield "System.Web.HttpUtility" - yield "System.Web.Services" - yield "System.Windows" - yield "System.Windows.Forms" - yield "System.Xml" - yield "System.Xml.Linq" - yield "System.Xml.ReaderWriter" - yield "System.Xml.Serialization" - yield "System.Xml.XDocument" - yield "System.Xml.XmlDocument" - yield "System.Xml.XmlSerializer" - yield "System.Xml.XPath" - yield "System.Xml.XPath.XDocument" - yield "WindowsBase" - ] - - member _.GetSystemAssemblies() = systemAssemblies - - member _.IsInReferenceAssemblyPackDirectory filename = - fxlock.AcquireLock <| fun fxtok -> - RequireFxResolverLock(fxtok, "assuming all member require lock") - - match tryGetNetCoreRefsPackDirectoryRoot() |> replayWarnings with - | _, Some root -> - let path = Path.GetDirectoryName(filename) - path.StartsWith(root, StringComparison.OrdinalIgnoreCase) - | _ -> false - - member _.TryGetSdkDir() = - fxlock.AcquireLock <| fun fxtok -> - RequireFxResolverLock(fxtok, "assuming all member require lock") - tryGetSdkDir() |> replayWarnings - - /// Gets the selected target framework moniker, e.g netcore3.0, net472, and the running rid of the current machine - member _.GetTfmAndRid() = - fxlock.AcquireLock <| fun fxtok -> - RequireFxResolverLock(fxtok, "assuming all member require lock") - // Interactive processes read their own configuration to find the running tfm - - let tfm = - if isInteractive then - match tryGetRunningDotNetCoreTfm() with - | Some tfm -> tfm - | _ -> getRunningDotNetFrameworkTfm () - else - let sdkDir = tryGetSdkDir() |> replayWarnings - match sdkDir with - | Some dir -> - let dotnetConfigFile = Path.Combine(dir, "dotnet.runtimeconfig.json") - use stream = FileSystem.OpenFileForReadShim(dotnetConfigFile) - let dotnetConfig = stream.ReadAllText() - let pattern = "\"tfm\": \"" - let startPos = dotnetConfig.IndexOf(pattern, StringComparison.OrdinalIgnoreCase) + pattern.Length - let endPos = dotnetConfig.IndexOf("\"", startPos) - let tfm = dotnetConfig.[startPos..endPos-1] - //printfn "GetTfmAndRid, tfm = '%s'" tfm - tfm - | None -> - match tryGetRunningDotNetCoreTfm() with - | Some tfm -> tfm - | _ -> getRunningDotNetFrameworkTfm () - - // Computer valid dotnet-rids for this environment: - // https://docs.microsoft.com/en-us/dotnet/core/rid-catalog - // - // Where rid is: win, win-x64, win-x86, osx-x64, linux-x64 etc ... - let runningRid = - let processArchitecture = RuntimeInformation.ProcessArchitecture - let baseRid = - if RuntimeInformation.IsOSPlatform(OSPlatform.Windows) then "win" - elif RuntimeInformation.IsOSPlatform(OSPlatform.OSX) then "osx" - else "linux" - match processArchitecture with - | Architecture.X64 -> baseRid + "-x64" - | Architecture.X86 -> baseRid + "-x86" - | Architecture.Arm64 -> baseRid + "-arm64" - | _ -> baseRid + "-arm" - - tfm, runningRid - - static member ClearStaticCaches() = - desiredDotNetSdkVersionForDirectoryCache.Clear() - - member _.GetFrameworkRefsPackDirectory() = - fxlock.AcquireLock <| fun fxtok -> - RequireFxResolverLock(fxtok, "assuming all member require lock") - tryGetSdkRefsPackDirectory() |> replayWarnings - - member _.TryGetDesiredDotNetSdkVersionForDirectory() = - fxlock.AcquireLock <| fun fxtok -> - RequireFxResolverLock(fxtok, "assuming all member require lock") - tryGetDesiredDotNetSdkVersionForDirectoryInfo() - - // The set of references entered into the TcConfigBuilder for scripts prior to computing the load closure. - member _.GetDefaultReferences (useFsiAuxLib) = - fxlock.AcquireLock <| fun fxtok -> - RequireFxResolverLock(fxtok, "assuming all member require lock") - let defaultReferences = - if assumeDotNetFramework then - getDotNetFrameworkDefaultReferences useFsiAuxLib, assumeDotNetFramework - else - if useSdkRefs then - // Go fetch references - let sdkDir = tryGetSdkRefsPackDirectory() |> replayWarnings - match sdkDir with - | Some path -> - try - let sdkReferences = - [ yield! Directory.GetFiles(path, "*.dll") - yield getFSharpCoreImplementationReference() - if useFsiAuxLib then yield getFsiLibraryImplementationReference() - ] |> List.filter(fun f -> systemAssemblies.Contains(Path.GetFileNameWithoutExtension(f))) - sdkReferences, false - with e -> - warning (Error(FSComp.SR.scriptSdkNotDeterminedUnexpected(e.Message), rangeForErrors)) - // This is defensive coding, we don't expect this exception to happen - if isRunningOnCoreClr then - // If running on .NET Core and something goes wrong with getting the - // .NET Core references then use .NET Core implementation assemblies for running process - getDotNetCoreImplementationReferences useFsiAuxLib, false - else - // If running on .NET Framework and something goes wrong with getting the - // .NET Core references then default back to .NET Framework and return a flag indicating this has been done - getDotNetFrameworkDefaultReferences useFsiAuxLib, true - | None -> - if isRunningOnCoreClr then - // If running on .NET Core and there is no Sdk refs pack directory - // then use .NET Core implementation assemblies for running process - getDotNetCoreImplementationReferences useFsiAuxLib, false - else - // If running on .NET Framework and there is no Sdk refs pack directory - // then default back to .NET Framework and return a flag indicating this has been done - getDotNetFrameworkDefaultReferences useFsiAuxLib, true - else - getDotNetCoreImplementationReferences useFsiAuxLib, assumeDotNetFramework - defaultReferences diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 6cefacd50c3..1f541e4bdf5 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -6,50 +6,49 @@ module internal FSharp.Compiler.IlxGen open System.IO open System.Reflection open System.Collections.Generic +open System.Collections.Immutable -open FSharp.Compiler.IO open Internal.Utilities open Internal.Utilities.Collections -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.BinaryConstants -open FSharp.Compiler.AbstractIL.ILX -open FSharp.Compiler.AbstractIL.ILX.Types +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Extensions.ILX +open FSharp.Compiler.AbstractIL.Extensions.ILX.Types +open FSharp.Compiler.AbstractIL.Internal.BinaryConstants open FSharp.Compiler.AttributeChecking open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Import open FSharp.Compiler.Infos +open FSharp.Compiler.Import +open FSharp.Compiler.Layout +open FSharp.Compiler.Lib open FSharp.Compiler.LowerCallsAndSeqs -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Text -open FSharp.Compiler.Text.LayoutRender -open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TypedTreeOps.DebugPrint +open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypeRelations +open FSharp.Compiler.XmlDoc -let IsNonErasedTypar (tp: Typar) = +let IsNonErasedTypar (tp: Typar) = not tp.IsErased let DropErasedTypars (tps: Typar list) = tps |> List.filter IsNonErasedTypar -let DropErasedTyargs tys = +let DropErasedTyargs tys = tys |> List.filter (fun ty -> match ty with TType_measure _ -> false | _ -> true) -let AddNonUserCompilerGeneratedAttribs (g: TcGlobals) (mdef: ILMethodDef) = +let AddNonUserCompilerGeneratedAttribs (g: TcGlobals) (mdef: ILMethodDef) = g.AddMethodGeneratedAttributes mdef let debugDisplayMethodName = "__DebugDisplay" @@ -116,15 +115,15 @@ type AttributeDecoder(namedArgs) = let findConst x = match NameMap.tryFind x nameMap with | Some(AttribExpr(_, Expr.Const (c, _, _))) -> Some c | _ -> None let findAppTr x = match NameMap.tryFind x nameMap with | Some(AttribExpr(_, Expr.App (_, _, [TType_app(tr, _)], _, _))) -> Some tr | _ -> None - member _.FindInt16 x dflt = match findConst x with | Some(Const.Int16 x) -> x | _ -> dflt + member __.FindInt16 x dflt = match findConst x with | Some(Const.Int16 x) -> x | _ -> dflt - member _.FindInt32 x dflt = match findConst x with | Some(Const.Int32 x) -> x | _ -> dflt + member __.FindInt32 x dflt = match findConst x with | Some(Const.Int32 x) -> x | _ -> dflt - member _.FindBool x dflt = match findConst x with | Some(Const.Bool x) -> x | _ -> dflt + member __.FindBool x dflt = match findConst x with | Some(Const.Bool x) -> x | _ -> dflt - member _.FindString x dflt = match findConst x with | Some(Const.String x) -> x | _ -> dflt + member __.FindString x dflt = match findConst x with | Some(Const.String x) -> x | _ -> dflt - member _.FindTypeName x dflt = match findAppTr x with | Some tr -> tr.DisplayName | _ -> dflt + member __.FindTypeName x dflt = match findAppTr x with | Some tr -> tr.DisplayName | _ -> dflt //-------------------------------------------------------------------------- // Statistics @@ -132,11 +131,11 @@ type AttributeDecoder(namedArgs) = let mutable reports = (fun _ -> ()) -let AddReport f = - let old = reports +let AddReport f = + let old = reports reports <- (fun oc -> old oc; f oc) -let ReportStatistics (oc: TextWriter) = +let ReportStatistics (oc: TextWriter) = reports oc let NewCounter nm = @@ -154,7 +153,7 @@ let CountCallFuncInstructions = NewCounter "callfunc instructions (indirect call /// Non-local information related to internals of code generation within an assembly type IlxGenIntraAssemblyInfo = - { + { /// A table recording the generated name of the static backing fields for each mutable top level value where /// we may need to take the address of that value, e.g. static mutable module-bound values which are structs. These are /// only accessible intra-assembly. Across assemblies, taking the address of static mutable module-bound values is not permitted. @@ -176,33 +175,33 @@ type IlxGenBackend = [] type IlxGenOptions = - { + { /// Indicates the "fragment name" for the part of the assembly we are emitting, particularly for incremental /// emit using Reflection.Emit in F# Interactive. fragName: string - + /// Indicates if we are generating filter blocks generateFilterBlocks: bool - + /// Indicates if we are working around historical Reflection.Emit bugs workAroundReflectionEmitBugs: bool - + /// Indicates if we should/shouldn't emit constant arrays as static data blobs emitConstantArraysUsingStaticDataBlobs: bool - + /// If this is set, then the last module becomes the "main" module and its toplevel bindings are executed at startup mainMethodInfo: Attribs option - + /// Indicates if local optimizations are on localOptimizationsAreOn: bool - + /// Indicates if we are generating debug symbols generateDebugSymbols: bool - - /// Indicates that FeeFee debug values should be emitted as value 100001 for + + /// Indicates that FeeFee debug values should be emitted as value 100001 for /// easier detection in debug output testFlagEmitFeeFeeAs100001: bool - + ilxBackend: IlxGenBackend /// Indicates the code is being generated in FSI.EXE and is executed immediately after code generation @@ -214,38 +213,38 @@ type IlxGenOptions = isInteractiveItExpr: bool /// Whenever possible, use callvirt instead of call - alwaysCallVirt: bool + alwaysCallVirt: bool } /// Compilation environment for compiling a fragment of an assembly [] type cenv = - { + { /// The TcGlobals for the compilation g: TcGlobals - + /// The ImportMap for reading IL amap: ImportMap - - /// A callback for TcVal in the typechecker. Used to generalize values when finding witnesses. + + /// A callback for TcVal in the typechecker. Used to generalize values when finding witnesses. /// It is unfortunate this is needed but it is until we supply witnesses through the compilation. tcVal: ConstraintSolver.TcValF - + /// The TAST for the assembly being emitted viewCcu: CcuThunk - + /// The options for ILX code generation opts: IlxGenOptions - + /// Cache the generation of the "unit" type mutable ilUnitTy: ILType option - + /// Other information from the emit of this assembly intraAssemblyInfo: IlxGenIntraAssemblyInfo - + /// Cache methods with SecurityAttribute applied to them, to prevent unnecessary calls to ExistsInEntireHierarchyOfType casApplied: Dictionary - + /// Used to apply forced inlining optimizations to witnesses generated late during codegen mutable optimizeDuringCodeGen: (bool -> Expr -> Expr) @@ -264,7 +263,7 @@ let mkTypeOfExpr cenv m ilty = mkAsmExpr ([ mkNormalCall (mspec_Type_GetTypeFromHandle g) ], [], [mkAsmExpr ([ I_ldtoken (ILToken.ILType ilty) ], [], [], [g.system_RuntimeTypeHandle_ty], m)], [g.system_Type_ty], m) - + let mkGetNameExpr cenv (ilt: ILType) m = mkAsmExpr ([I_ldstr ilt.BasicQualifiedName], [], [], [cenv.g.string_ty], m) @@ -332,7 +331,7 @@ let NestedTypeRefForCompLoc cloc n = let tyname = mkTopName cloc.Namespace n mkILTyRef(cloc.Scope, tyname) | h :: t -> mkILNestedTyRef(cloc.Scope, mkTopName cloc.Namespace h :: t, n) - + let CleanUpGeneratedTypeName (nm: string) = if nm.IndexOfAny IllegalCharactersInTypeAndNamespaceNames = -1 then nm @@ -382,7 +381,7 @@ let ComputeTypeAccess (tref: ILTypeRef) hidden = match tref.Enclosing with | [] -> if hidden then ILTypeDefAccess.Private else ComputePublicTypeAccess() | _ -> ILTypeDefAccess.Nested (ComputeMemberAccess hidden) - + //-------------------------------------------------------------------------- // TypeReprEnv //-------------------------------------------------------------------------- @@ -392,7 +391,7 @@ let ComputeTypeAccess (tref: ILTypeRef) hidden = type TypeReprEnv(reprs: Map, count: int) = /// Lookup a type parameter - member _.Item (tp: Typar, m: range) = + member __.Item (tp: Typar, m: range) = try reprs.[tp.Stamp] with :? KeyNotFoundException -> errorR(InternalError("Undefined or unsolved type variable: " + showL(typarL tp), m)) @@ -412,7 +411,7 @@ type TypeReprEnv(reprs: Map, count: int) = (tyenv, tps) ||> List.fold (fun tyenv tp -> tyenv.AddOne tp) /// Get the count of the non-erased type parameters in scope. - member _.Count = count + member __.Count = count /// Get the empty environment, where no type parameters are in scope. static member Empty = @@ -421,14 +420,15 @@ type TypeReprEnv(reprs: Map, count: int) = /// Get the environment for a fixed set of type parameters static member ForTypars tps = TypeReprEnv.Empty.Add tps - + /// Get the environment for within a type definition static member ForTycon (tycon: Tycon) = TypeReprEnv.ForTypars (tycon.TyparsNoRange) - + /// Get the environment for generating a reference to items within a type definition static member ForTyconRef (tycon: TyconRef) = TypeReprEnv.ForTycon tycon.Deref + //-------------------------------------------------------------------------- // Generate type references @@ -439,7 +439,7 @@ let GenTyconRef (tcref: TyconRef) = assert(not tcref.IsTypeAbbrev) tcref.CompiledRepresentation -type VoidNotOK = +type VoidNotOK = | VoidNotOK | VoidOK @@ -460,7 +460,7 @@ type PtrsOK = let GenReadOnlyAttributeIfNecessary (g: TcGlobals) ty = let add = isInByrefTy g ty && g.attrib_IsReadOnlyAttribute.TyconRef.CanDeref if add then - let attr = mkILCustomAttribute (g.attrib_IsReadOnlyAttribute.TypeRef, [], [], []) + let attr = mkILCustomAttribute g.ilg (g.attrib_IsReadOnlyAttribute.TypeRef, [], [], []) Some attr else None @@ -522,7 +522,7 @@ and GenTypeAux amap m (tyenv: TypeReprEnv) voidOK ptrsOK ty = #endif match stripTyEqnsAndMeasureEqns g ty with | TType_app (tcref, tinst) -> GenNamedTyAppAux amap m tyenv ptrsOK tcref tinst - + | TType_tuple (tupInfo, args) -> GenTypeAux amap m tyenv VoidNotOK ptrsOK (mkCompiledTupleTy g (evalTupInfoIsStruct tupInfo) args) @@ -555,7 +555,7 @@ and GenUnionCaseRef (amap: ImportMap) m tyenv i (fspecs: RecdField[]) = fspecs |> Array.mapi (fun j fspec -> let ilFieldDef = IL.mkILInstanceField(fspec.Name, GenType amap m tyenv fspec.FormalType, None, ILMemberAccess.Public) // These properties on the "field" of an alternative end up going on a property generated by cu_erase.fs - IlxUnionCaseField + IlxUnionField (ilFieldDef.With(customAttrs = mkILCustomAttrs [(mkCompilationMappingAttrWithVariantNumAndSeqNum g (int SourceConstructFlags.Field) i j )]))) @@ -672,114 +672,25 @@ let GenRecdFieldRef m cenv tyenv (rfref: RecdFieldRef) tyargs = GenType cenv.amap m tyenvinner rfref.RecdField.FormalType) let GenExnType amap m tyenv (ecref: TyconRef) = GenTyApp amap m tyenv ecref.CompiledRepresentation [] - -type ArityInfo = int list - + //-------------------------------------------------------------------------- // Closure summaries -// -// Function, Object, Delegate and State Machine Closures -// ===================================================== -// -// For a normal expression closure, we generate: -// -// class Implementation : FSharpFunc<...> { -// override Invoke(..) { expr } -// } -// -// Local Type Functions -// ==================== -// -// The input expression is: -// let input-val : FORALL. body-type = LAM . body-expr : body-type -// ... -// -// This is called at some point: -// -// input-val -// -// Note 'input-val' is never used without applying it to some type arguments. -// -// Basic examples - first define some functions that extract information from generic parameters, and which are constrained: -// -// type TypeInfo<'T> = TypeInfo of System.Type -// type TypeName = TypeName of string -// -// let typeinfo<'T when 'T :> System.IComparable) = TypeInfo (typeof<'T>) -// let typename<'T when 'T :> System.IComparable) = TypeName (typeof<'T>.Name) -// -// Then here are examples: -// -// LAM <'T>{addWitness}. (typeinfo<'T>, typeinfo<'T[]>, (incr{ : 'T -> 'T)) : TypeInfo<'T> * TypeInfo<'T[]> * ('T -> 'T) -// directTypars = 'T -// cloFreeTyvars = empty -// -// or -// LAM <'T>. (typeinfo<'T>, typeinfo<'U>) : TypeInfo<'T> * TypeInfo<'U> -// directTypars = 'T -// cloFreeTyvars = 'U -// -// or -// LAM <'T>. (typeinfo<'T>, typeinfo<'U>, typename<'V>) : TypeInfo<'T> * TypeInfo<'U> * TypeName -// directTypars = 'T -// cloFreeTyvars = 'U,'V -// -// or, for witnesses: -// -// let inline incr{addWitnessForT} (x: 'T) = x + GenericZero<'T> // has witness argment for '+' -// -// LAM <'T when 'T :... op_Addition ...>{addWitnessForT}. (incr<'T>{addWitnessForT}, incr<'U>{addWitnessForU}, incr<'V>{addWitnessForV}) : ('T -> 'T) * ('U -> 'U) * ('V -> 'V) -// directTypars = 'T -// cloFreeTyvars = 'U,'V -// cloFreeTyvarsWitnesses = witnesses implied by cloFreeTyvars = {addWitnessForU, addWitnessForV} -// directTyparsWitnesses = witnesses implied by directTypars = {addWitnessForT} -// -// Define the free variable sets: -// -// cloFreeTyvars = free-tyvars-of(input-expr) -// -// where IsNamedLocalTypeFuncVal is true. -// -// The directTypars may have constraints that require some witnesses. Making those explicit with "{ ... }" syntax for witnesses: -// input-expr = {LAM {directWitnessInfoArgs}. body-expr : body-type } -// -// let x : FORALL<'T ... constrained ...> ... = clo{directWitnessInfos} -// -// Given this, we generate this shape of code: -// -// type Implementation(cloFreeTyvarsWitnesses) = -// member DirectInvoke(directTyparsWitnesses) : body-type = -// body-expr -// -// local x : obj = new Implementation(cloFreeTyvarsWitnesses) -// .... -// ldloc x -// unbox Implementation -// call Implementation::DirectInvoke(directTyparsWitnesses) -// -// First-class Type Functions -// ========================== -// -// If IsNamedLocalTypeFuncVal is false, we have a "non-local" or "first-class" type function closure -// that implements FSharpTypeFunc, and we generate: -// -// class Implementation : FSharpTypeFunc { -// override Specialize : overall-type { expr } -// } -// +//-------------------------------------------------------------------------- +type ArityInfo = int list + [] type IlxClosureInfo = { /// The whole expression for the closure cloExpr: Expr - + /// The name of the generated closure class cloName: string - + /// The counts of curried arguments for the closure cloArityInfo: ArityInfo - /// The formal return type + /// The formal return type ilCloFormalReturnTy: ILType /// An immutable array of free variable descriptions for the closure @@ -804,6 +715,24 @@ type IlxClosureInfo = /// ILX view of the lambdas for the closures ilCloLambdas: IlxClosureLambdas + /// The free type parameters occuring in the type of the closure (and not just its body) + /// This is used for local type functions, whose contract class must use these types + /// type Contract<'fv> = + /// abstract DirectInvoke: ty['fv] + /// type Implementation<'fv, 'fv2> : Contract<'fv> = + /// override DirectInvoke: ty['fv] = expr['fv, 'fv2] + /// + /// At the callsite we generate + /// unbox ty['fv] + /// callvirt clo.DirectInvoke + localTypeFuncILGenericArgs: ILType list + + /// The free type parameters for the local type function as F# TAST types + localTypeFuncContractFreeTypars: Typar list + + localTypeFuncDirectILGenericParams: IL.ILGenericParameterDefs + + localTypeFuncInternalFreeTypars: Typar list } @@ -811,7 +740,7 @@ type IlxClosureInfo = // ValStorage //-------------------------------------------------------------------------- - + /// Describes the storage for a value [] type ValStorage = @@ -826,7 +755,7 @@ type ValStorage = /// Indicates the value is represented as an IL method (in a "main" class for a F# /// compilation unit, or as a member) according to its inferred or specified arity. - | Method of ValReprInfo * ValRef * ILMethodSpec * ILMethodSpec * range * Typars * Typars * CurriedArgInfos * ArgReprInfo list * TraitWitnessInfos * TType list * ArgReprInfo + | Method of ValReprInfo * ValRef * ILMethodSpec * ILMethodSpec * Range.range * Typars * Typars * CurriedArgInfos * ArgReprInfo list * TraitWitnessInfos * TType list * ArgReprInfo /// Indicates the value is stored at the given position in the closure environment accessed via "ldarg 0" | Env of ILType * ILFieldSpec * NamedLocalIlxClosureInfo ref option @@ -850,17 +779,17 @@ and NamedLocalIlxClosureInfo = | NamedLocalIlxClosureInfoGenerator of (IlxGenEnv -> IlxClosureInfo) | NamedLocalIlxClosureInfoGenerated of IlxClosureInfo - override _.ToString() = "" + override __.ToString() = "" /// Indicates the overall representation decisions for all the elements of a namespace of module and ModuleStorage = - { + { Vals: Lazy> - + SubModules: Lazy> } - override _.ToString() = "" + override __.ToString() = "" /// Indicate whether a call to the value can be implemented as /// a branch. At the moment these are only used for generating branch calls back to @@ -884,14 +813,17 @@ and BranchCallItem = // num actual args in IL int - override _.ToString() = "" - + override __.ToString() = "" + /// Represents a place we can branch to and Mark = | Mark of ILCodeLabel member x.CodeLabel = (let (Mark lab) = x in lab) -/// Represents "what to do next after we generate this expression" +//-------------------------------------------------------------------------- +// We normally generate in the context of a "what to do next" continuation +//-------------------------------------------------------------------------- + and sequel = | EndFilter @@ -901,9 +833,6 @@ and sequel = /// Branch to the given mark | Br of Mark - - /// Execute the given comparison-then-branch instructions on the result of the expression - /// If the branch isn't taken then drop through. | CmpThenBrOrContinue of Pops * ILInstr list /// Continue and leave the value on the IL computation stack @@ -929,10 +858,10 @@ and Pops = int and IlxGenEnv = { /// The representation decisions for the (non-erased) type parameters that are in scope tyenv: TypeReprEnv - + /// An ILType for some random type in this assembly someTypeInThisAssembly: ILType - + /// Indicates if we are generating code for the last file in a .EXE isFinalFile: bool @@ -967,12 +896,9 @@ and IlxGenEnv = /// Are we inside of a recursive let binding, while loop, or a for loop? isInLoop: bool - - /// Indicates that the .locals init flag should be set on a method and all its nested methods and lambdas - initLocals: bool } - override _.ToString() = "" + override __.ToString() = "" let discard = DiscardThen Continue let discardAndReturnVoid = DiscardThen ReturnVoid @@ -989,7 +915,7 @@ let AddTyparsToEnv typars (eenv: IlxGenEnv) = {eenv with tyenv = eenv.tyenv.Add let AddSignatureRemapInfo _msg (rpi, mhi) eenv = { eenv with sigToImplRemapInfo = (mkRepackageRemapping rpi, mhi) :: eenv.sigToImplRemapInfo } - + let OutputStorage (pps: TextWriter) s = match s with | StaticField _ -> pps.Write "(top)" @@ -1056,8 +982,8 @@ let StorageForValRef g m (v: ValRef) eenv = StorageForVal g m v.Deref eenv let ComputeGenerateWitnesses (g: TcGlobals) eenv = g.generateWitnesses && not eenv.witnessesInScope.IsEmpty && not eenv.suppressWitnesses -let TryStorageForWitness (_g: TcGlobals) eenv (w: TraitWitnessInfo) = - match eenv.witnessesInScope.TryGetValue w with +let TryStorageForWitness (_g: TcGlobals) eenv (w: TraitWitnessInfo) = + match eenv.witnessesInScope.TryGetValue w with | true, storage -> Some storage | _ -> None @@ -1074,8 +1000,8 @@ let GetMethodSpecForMemberVal amap g (memberInfo: ValMemberInfo) (vref: ValRef) GetTopValTypeInCompiledForm g vref.ValReprInfo.Value numEnclosingTypars vref.Type m let tyenvUnderTypars = TypeReprEnv.ForTypars tps let flatArgInfos = List.concat curriedArgInfos - let isCtor = (memberInfo.MemberFlags.MemberKind = SynMemberKind.Constructor) - let cctor = (memberInfo.MemberFlags.MemberKind = SynMemberKind.ClassConstructor) + let isCtor = (memberInfo.MemberFlags.MemberKind = MemberKind.Constructor) + let cctor = (memberInfo.MemberFlags.MemberKind = MemberKind.ClassConstructor) let parentTcref = vref.TopValDeclaringEntity let parentTypars = parentTcref.TyparsNoRange let numParentTypars = parentTypars.Length @@ -1102,8 +1028,8 @@ let GetMethodSpecForMemberVal amap g (memberInfo: ValMemberInfo) (vref: ValRef) let thisTy = if isByrefTy g thisTy then destByrefTy g thisTy else thisTy let thisArgTys = argsOfAppTy g thisTy if numParentTypars <> thisArgTys.Length then - let msg = - sprintf + let msg = + sprintf "CodeGen check: type checking did not quantify the correct number of type variables for this method, #parentTypars = %d, #mtps = %d, #thisArgTys = %d" numParentTypars mtps.Length thisArgTys.Length warning(InternalError(msg, m)) @@ -1120,14 +1046,14 @@ let GetMethodSpecForMemberVal amap g (memberInfo: ValMemberInfo) (vref: ValRef) let ilMethodArgTys = GenParamTypes amap m tyenvUnderTypars isSlotSig methodArgTys let ilMethodInst = GenTypeArgs amap m tyenvUnderTypars (List.map mkTyparTy mtps) let mspec = mkILInstanceMethSpecInTy (ilTy, nm, ilMethodArgTys, ilActualRetTy, ilMethodInst) - let mspecW = + let mspecW = if not g.generateWitnesses || witnessInfos.IsEmpty then - mspec + mspec else let ilWitnessArgTys = GenTypes amap m tyenvUnderTypars (GenWitnessTys g witnessInfos) let nmW = ExtraWitnessMethodName nm mkILInstanceMethSpecInTy (ilTy, nmW, ilWitnessArgTys @ ilMethodArgTys, ilActualRetTy, ilMethodInst) - + mspec, mspecW, ctps, mtps, curriedArgInfos, paramInfos, retInfo, witnessInfos, methodArgTys, returnTy else let methodArgTys, paramInfos = List.unzip flatArgInfos @@ -1136,12 +1062,12 @@ let GetMethodSpecForMemberVal amap g (memberInfo: ValMemberInfo) (vref: ValRef) let mspec = mkILStaticMethSpecInTy (ilTy, nm, ilMethodArgTys, ilActualRetTy, ilMethodInst) let mspecW = if not g.generateWitnesses || witnessInfos.IsEmpty then - mspec + mspec else let ilWitnessArgTys = GenTypes amap m tyenvUnderTypars (GenWitnessTys g witnessInfos) let nmW = ExtraWitnessMethodName nm mkILStaticMethSpecInTy (ilTy, nmW, ilWitnessArgTys @ ilMethodArgTys, ilActualRetTy, ilMethodInst) - + mspec, mspecW, ctps, mtps, curriedArgInfos, paramInfos, retInfo, witnessInfos, methodArgTys, returnTy /// Determine how a top-level value is represented, when representing as a field, by computing an ILFieldSpec @@ -1198,7 +1124,7 @@ let ComputeStorageForFSharpFunctionOrFSharpExtensionMember amap (g: TcGlobals) c let mspec = mkILStaticMethSpecInTy (ilLocTy, nm, ilMethodArgTys, ilRetTy, ilMethodInst) let mspecW = if not g.generateWitnesses || witnessInfos.IsEmpty then - mspec + mspec else let ilWitnessArgTys = GenTypes amap m tyenvUnderTypars (GenWitnessTys g witnessInfos) mkILStaticMethSpecInTy (ilLocTy, ExtraWitnessMethodName nm, (ilWitnessArgTys @ ilMethodArgTys), ilRetTy, ilMethodInst) @@ -1229,7 +1155,7 @@ let ComputeStorageForTopVal (amap, g, optIntraAssemblyInfo: IlxGenIntraAssemblyI match vref.ValReprInfo with | None -> error(InternalError("ComputeStorageForTopVal: no arity found for " + showL(valRefL vref), vref.Range)) | Some a -> a - + let m = vref.Range let nm = vref.CompiledName g.CompilerGlobalState @@ -1304,7 +1230,7 @@ let rec AddBindingsForLocalModuleType allocVal cloc eenv (mty: ModuleOrNamespace eenv /// Record how all the top level F#-declared values, functions and members are represented, for a set of referenced assemblies. -let AddExternalCcusToIlxGenEnv amap g eenv ccus = +let AddExternalCcusToIlxGenEnv amap g eenv ccus = List.fold (AddStorageForExternalCcu amap g) eenv ccus /// Record how all the unrealized abstract slots are represented, for a type definition. @@ -1345,7 +1271,7 @@ and AddBindingsForModule allocVal cloc x eenv = let cloc = if mspec.IsNamespace then cloc else CompLocForFixedModule cloc.QualifiedNameOfFile cloc.TopImplQualifiedName mspec - + AddBindingsForModuleDef allocVal cloc eenv mdef /// Record how constructs are represented, for the values and functions defined in a module or namespace fragment. @@ -1493,7 +1419,7 @@ and TypeDefsBuilder() = //The order we emit type definitions is not deterministic since it is using the reverse of a range from a hash table. We should use an approximation of source order. // Ideally it shouldn't matter which order we use. // However, for some tests FSI generated code appears sensitive to the order, especially for nested types. - + [ for (b, eliminateIfEmpty) in HashRangeSorted tdefs do let tdef = b.Close() // Skip the type if it is empty @@ -1522,7 +1448,7 @@ and TypeDefsBuilder() = type AnonTypeGenerationTable() = // Dictionary is safe here as it will only be used during the codegen stage - will happen on a single thread. let dict = Dictionary(HashIdentity.Structural) - member _.Table = dict + member __.Table = dict /// Assembly generation buffers type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbuf = @@ -1549,7 +1475,7 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu keyComparer=HashIdentity.Structural) let generateAnonType genToStringMethod (isStruct, ilTypeRef, nms) = - + let propTys = [ for (i, nm) in Array.indexed nms -> nm, ILType.TypeVar (uint16 i) ] // Note that this alternative below would give the same names as C#, but the generated @@ -1557,7 +1483,7 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu //let flds = [ for (i, nm) in Array.indexed nms -> (nm, "<" + nm + ">" + "i__Field", ILType.TypeVar (uint16 i)) ] let ilCtorRef = mkILMethRef(ilTypeRef, ILCallingConv.Instance, ".ctor", 0, List.map snd propTys, ILType.Void) - let ilMethodRefs = + let ilMethodRefs = [| for (propName, propTy) in propTys -> mkILMethRef (ilTypeRef, ILCallingConv.Instance, "get_" + propName, 0, [], propTy) |] @@ -1586,7 +1512,7 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu [ for (_, fldName, fldTy) in flds -> let fdef = mkILInstanceField (fldName, fldTy, None, ILMemberAccess.Private) fdef.With(customAttrs = mkILCustomAttrs [ g.DebuggerBrowsableNeverAttribute ]) ] - + // Generate property definitions for the fields compiled as properties let ilProperties = mkILProperties @@ -1600,27 +1526,27 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu init= None, args=[], customAttrs=mkILCustomAttrs [ mkCompilationMappingAttrWithSeqNum g (int SourceConstructFlags.Field) i ]) ] - + let ilMethods = [ for (propName, fldName, fldTy) in flds -> mkLdfldMethodDef ("get_" + propName, ILMemberAccess.Public, false, ilTy, fldName, fldTy) yield! genToStringMethod ilTy ] let ilBaseTy = (if isStruct then g.iltyp_ValueType else g.ilg.typ_Object) - + let ilCtorDef = mkILSimpleStorageCtorWithParamNames(None, (if isStruct then None else Some ilBaseTy.TypeSpec), ilTy, [], flds, ILMemberAccess.Public) // Create a tycon that looks exactly like a record definition, to help drive the generation of equality/comparison code let m = range0 let tps = [ for nm in nms -> - let stp = SynTypar(mkSynId m ("T"+nm), TyparStaticReq.None, true) + let stp = Typar(mkSynId m ("T"+nm), TyparStaticReq.NoStaticReq, true) Construct.NewTypar (TyparKind.Type, TyparRigidity.WarnIfNotRigid, stp, false, TyparDynamicReq.Yes, [], true, true) ] let tycon = let lmtyp = MaybeLazy.Strict (Construct.NewEmptyModuleOrNamespaceType ModuleOrType) let cpath = CompPath(ilTypeRef.Scope, []) - Construct.NewTycon(Some cpath, ilTypeRef.Name, m, taccessPublic, taccessPublic, TyparKind.Type, LazyWithContext.NotLazy tps, XmlDoc.Empty, false, false, false, lmtyp) + Construct.NewTycon(Some cpath, ilTypeRef.Name, m, taccessPublic, taccessPublic, TyparKind.Type, LazyWithContext.NotLazy tps, XmlDoc.Empty, false, false, false, lmtyp) if isStruct then tycon.SetIsStructRecordOrUnion true @@ -1628,13 +1554,13 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu tycon.entity_tycon_repr <- TRecdRepr (Construct.MakeRecdFieldsTable - ((tps, flds) ||> List.map2 (fun tp (propName, _fldName, _fldTy) -> - Construct.NewRecdField false None (mkSynId m propName) false (mkTyparTy tp) true false [] [] XmlDoc.Empty taccessPublic false))) + [ for (tp, (propName, _fldName, _fldTy)) in (List.zip tps flds) -> + Construct.NewRecdField false None (mkSynId m propName) false (mkTyparTy tp) true false [] [] XmlDoc.Empty taccessPublic false ]) let tcref = mkLocalTyconRef tycon let _, typ = generalizeTyconRef tcref let tcaug = tcref.TypeContents - + tcaug.tcaug_interfaces <- [ (g.mk_IStructuralComparable_ty, true, m) (g.mk_IComparable_ty, true, m) @@ -1663,11 +1589,11 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu mkILMethods (ilCtorDef :: ilMethods), ilFieldDefs, emptyILTypeDefs, ilProperties, mkILEvents [], ilTypeDefAttribs, ILTypeInit.BeforeField) - + let ilTypeDef = ilTypeDef.WithSealed(true).WithSerializable(true) mgbuf.AddTypeDef(ilTypeRef, ilTypeDef, false, true, None) - + let extraBindings = [ yield! AugmentWithHashCompare.MakeBindingsForCompareAugmentation g tycon yield! AugmentWithHashCompare.MakeBindingsForCompareWithComparerAugmentation g tycon @@ -1688,9 +1614,9 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu /// static init fields on script modules. let mutable scriptInitFspecs: (ILFieldSpec * range) list = [] - member _.AddScriptInitFieldSpec (fieldSpec, range) = + member __.AddScriptInitFieldSpec (fieldSpec, range) = scriptInitFspecs <- (fieldSpec, range) :: scriptInitFspecs - + /// This initializes the script in #load and fsc command-line order causing their /// side effects to be executed. member mgbuf.AddInitializeScriptsInOrderToEntryPoint () = @@ -1698,18 +1624,18 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu match explicitEntryPointInfo with | Some tref -> let InitializeCompiledScript(fspec, m) = - mgbuf.AddExplicitInitToSpecificMethodDef((fun (md: ILMethodDef) -> md.IsEntryPoint), tref, fspec, GenPossibleILSourceMarker cenv m, [], []) + mgbuf.AddExplicitInitToSpecificMethodDef((fun (md: ILMethodDef) -> md.IsEntryPoint), tref, fspec, GenPossibleILSourceMarker cenv m, [], []) scriptInitFspecs |> List.iter InitializeCompiledScript | None -> () - member _.GenerateRawDataValueType (cloc, size) = + member __.GenerateRawDataValueType (cloc, size) = // Byte array literals require a ValueType of size the required number of bytes. // With fsi.exe, S.R.Emit TypeBuilder CreateType has restrictions when a ValueType VT is nested inside a type T, and T has a field of type VT. // To avoid this situation, these ValueTypes are generated under the private implementation rather than in the current cloc. [was bug 1532]. let cloc = CompLocForPrivateImplementationDetails cloc rawDataValueTypeGenerator.Apply((cloc, size)) - member _.GenerateAnonType (genToStringMethod, anonInfo: AnonRecdTypeInfo) = + member __.GenerateAnonType (genToStringMethod, anonInfo: AnonRecdTypeInfo) = let isStruct = evalAnonInfoIsStruct anonInfo let key = anonInfo.Stamp if not (anonTypeTable.Table.ContainsKey key) then @@ -1719,39 +1645,39 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu member this.LookupAnonType (genToStringMethod, anonInfo: AnonRecdTypeInfo) = match anonTypeTable.Table.TryGetValue anonInfo.Stamp with | true, res -> res - | _ -> + | _ -> if anonInfo.ILTypeRef.Scope.IsLocalRef then failwithf "the anonymous record %A has not been generated in the pre-phase of generating this module" anonInfo.ILTypeRef this.GenerateAnonType (genToStringMethod, anonInfo) anonTypeTable.Table.[anonInfo.Stamp] - member _.GrabExtraBindingsToGenerate () = + member __.GrabExtraBindingsToGenerate () = let result = extraBindingsToGenerate extraBindingsToGenerate <- [] result - member _.AddTypeDef (tref: ILTypeRef, tdef, eliminateIfEmpty, addAtEnd, tdefDiscards) = + member __.AddTypeDef (tref: ILTypeRef, tdef, eliminateIfEmpty, addAtEnd, tdefDiscards) = gtdefs.FindNestedTypeDefsBuilder(tref.Enclosing).AddTypeDef(tdef, eliminateIfEmpty, addAtEnd, tdefDiscards) - member _.GetCurrentFields (tref: ILTypeRef) = + member __.GetCurrentFields (tref: ILTypeRef) = gtdefs.FindNestedTypeDefBuilder(tref).GetCurrentFields() - member _.AddReflectedDefinition (vspec: Val, expr) = + member __.AddReflectedDefinition (vspec: Val, expr) = // preserve order by storing index of item let n = reflectedDefinitions.Count reflectedDefinitions.Add(vspec, (vspec.CompiledName cenv.g.CompilerGlobalState, n, expr)) - member _.ReplaceNameOfReflectedDefinition (vspec, newName) = + member __.ReplaceNameOfReflectedDefinition (vspec, newName) = match reflectedDefinitions.TryGetValue vspec with | true, (name, n, expr) when name <> newName -> reflectedDefinitions.[vspec] <- (newName, n, expr) | _ -> () - member _.AddMethodDef (tref: ILTypeRef, ilMethodDef) = + member __.AddMethodDef (tref: ILTypeRef, ilMethodDef) = gtdefs.FindNestedTypeDefBuilder(tref).AddMethodDef(ilMethodDef) if ilMethodDef.IsEntryPoint then explicitEntryPointInfo <- Some tref - member _.AddExplicitInitToSpecificMethodDef (cond, tref, fspec, sourceOpt, feefee, seqpt) = + member __.AddExplicitInitToSpecificMethodDef (cond, tref, fspec, sourceOpt, feefee, seqpt) = // Authoring a .cctor with effects forces the cctor for the 'initialization' module by doing a dummy store & load of a field // Doing both a store and load keeps FxCop happier because it thinks the field is useful let instrs = @@ -1762,16 +1688,16 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu yield AI_pop] gtdefs.FindNestedTypeDefBuilder(tref).PrependInstructionsToSpecificMethodDef(cond, instrs, sourceOpt) - member _.AddEventDef (tref, edef) = + member __.AddEventDef (tref, edef) = gtdefs.FindNestedTypeDefBuilder(tref).AddEventDef(edef) - member _.AddFieldDef (tref, ilFieldDef) = + member __.AddFieldDef (tref, ilFieldDef) = gtdefs.FindNestedTypeDefBuilder(tref).AddFieldDef(ilFieldDef) - member _.AddOrMergePropertyDef (tref, pdef, m) = + member __.AddOrMergePropertyDef (tref, pdef, m) = gtdefs.FindNestedTypeDefBuilder(tref).AddOrMergePropertyDef(pdef, m) - member _.Close() = + member __.Close() = // old implementation adds new element to the head of list so result was accumulated in reversed order let orderedReflectedDefinitions = [for (KeyValue(vspec, (name, n, expr))) in reflectedDefinitions -> n, ((name, vspec), expr)] @@ -1779,9 +1705,9 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu |> List.map snd gtdefs.Close(), orderedReflectedDefinitions - member _.cenv = cenv + member __.cenv = cenv - member _.GetExplicitEntryPointInfo() = explicitEntryPointInfo + member __.GetExplicitEntryPointInfo() = explicitEntryPointInfo /// Record the types of the things on the evaluation stack. /// Used for the few times we have to flush the IL evaluation stack and to compute maxStack. @@ -1809,7 +1735,7 @@ type CodeGenBuffer(m: range, let exnSpecs = new ResizeArray(10) // Keep track of the current stack so we can spill stuff when we hit a "try" when some stuff - // is on the stack. + // is on the stack. let mutable stack: ILType list = [] let mutable nstack = 0 let mutable maxStack = 0 @@ -1833,13 +1759,13 @@ type CodeGenBuffer(m: range, let i = FeeFeeInstr mgbuf.cenv doc codebuf.Add i // for the FeeFee or a better sequence point - member _.DoPushes (pushes: Pushes) = + member cgbuf.DoPushes (pushes: Pushes) = for ty in pushes do stack <- ty :: stack nstack <- nstack + 1 maxStack <- Operators.max maxStack nstack - member _.DoPops (n: Pops) = + member cgbuf.DoPops (n: Pops) = for i = 0 to n - 1 do match stack with | [] -> @@ -1850,8 +1776,8 @@ type CodeGenBuffer(m: range, stack <- t nstack <- nstack - 1 - member _.GetCurrentStack() = stack - member _.AssertEmptyStack() = + member cgbuf.GetCurrentStack() = stack + member cgbuf.AssertEmptyStack() = if not (isNil stack) then let msg = sprintf "stack flush didn't work, or extraneous expressions left on stack before stack restore, methodName = %s, stack = %+A, m = %s" @@ -1870,17 +1796,17 @@ type CodeGenBuffer(m: range, cgbuf.DoPushes pushes is |> List.iter codebuf.Add - member _.GetLastDebugPoint() = + member cgbuf.GetLastDebugPoint() = lastSeqPoint - - member private _.EnsureNopBetweenDebugPoints() = + + member private cgbuf.EnsureNopBetweenDebugPoints() = // Always add a nop between sequence points to help .NET get the stepping right // Don't do this after a FeeFee marker for hidden code if (codebuf.Count > 0 && (match codebuf.[codebuf.Count-1] with | I_seqpoint sm when sm.Line <> FeeFee mgbuf.cenv -> true | _ -> false)) then - + codebuf.Add(AI_nop) member cgbuf.EmitSeqPoint src = @@ -1901,7 +1827,7 @@ type CodeGenBuffer(m: range, // Save the last sequence point away so we can make a decision graph look consistent (i.e. reassert the sequence point at each target) lastSeqPoint <- Some src anyDocument <- Some attr.Document - + // Emit FeeFee breakpoints for hidden code, see https://blogs.msdn.microsoft.com/jmstall/2005/06/19/line-hidden-and-0xfeefee-sequence-points/ member cgbuf.EmitStartOfHiddenCode() = if mgbuf.cenv.opts.generateDebugSymbols then @@ -1916,14 +1842,14 @@ type CodeGenBuffer(m: range, cgbuf.EnsureNopBetweenDebugPoints() codebuf.Add i - member _.EmitExceptionClause clause = + member cgbuf.EmitExceptionClause clause = exnSpecs.Add clause - member _.GenerateDelayMark(_nm) = + member cgbuf.GenerateDelayMark(_nm) = let lab = IL.generateCodeLabel() Mark lab - member _.SetCodeLabelToCodeLabel(lab1, lab2) = + member cgbuf.SetCodeLabelToCodeLabel(lab1, lab2) = #if DEBUG if codeLabelToCodeLabel.ContainsKey lab1 then let msg = sprintf "two values given for label %s, methodName = %s, m = %s" (formatCodeLabel lab1) methodName (stringOfRange m) @@ -1932,7 +1858,7 @@ type CodeGenBuffer(m: range, #endif codeLabelToCodeLabel.[lab1] <- lab2 - member _.SetCodeLabelToPC(lab, pc) = + member cgbuf.SetCodeLabelToPC(lab, pc) = #if DEBUG if codeLabelToPC.ContainsKey lab then let msg = sprintf "two values given for label %s, methodName = %s, m = %s" (formatCodeLabel lab) methodName (stringOfRange m) @@ -1943,20 +1869,10 @@ type CodeGenBuffer(m: range, member cgbuf.SetMark (mark1: Mark, mark2: Mark) = cgbuf.SetCodeLabelToCodeLabel(mark1.CodeLabel, mark2.CodeLabel) - + member cgbuf.SetMarkToHere (Mark lab) = cgbuf.SetCodeLabelToPC(lab, codebuf.Count) - member cgbuf.SetMarkToHereIfNecessary (inplabOpt: Mark option) = - match inplabOpt with - | None -> () - | Some inplab -> cgbuf.SetMarkToHere inplab - - member cgbuf.SetMarkOrEmitBranchIfNecessary (inplabOpt: Mark option, target: Mark) = - match inplabOpt with - | None -> cgbuf.EmitInstr (pop 0, Push0, I_br target.CodeLabel) - | Some inplab -> cgbuf.SetMark(inplab, target) - member cgbuf.SetStack s = stack <- s nstack <- s.Length @@ -1966,13 +1882,13 @@ type CodeGenBuffer(m: range, cgbuf.SetMarkToHere res res - member _.mgbuf = mgbuf + member cgbuf.mgbuf = mgbuf - member _.MethodName = methodName + member cgbuf.MethodName = methodName - member _.PreallocatedArgCount = alreadyUsedArgs + member cgbuf.PreallocatedArgCount = alreadyUsedArgs - member _.AllocLocal(ranges, ty, isFixed) = + member cgbuf.AllocLocal(ranges, ty, isFixed) = let j = locals.Count locals.Add((ranges, ty, isFixed)) j @@ -1986,7 +1902,7 @@ type CodeGenBuffer(m: range, | None -> cgbuf.AllocLocal(ranges, ty, isFixed), false - member _.Close() = + member cgbuf.Close() = let instrs = codebuf.ToArray() @@ -2018,6 +1934,8 @@ module CG = let SetStack (cgbuf: CodeGenBuffer) s = cgbuf.SetStack s let GenerateMark (cgbuf: CodeGenBuffer) s = cgbuf.Mark s + + //-------------------------------------------------------------------------- // Compile constants //-------------------------------------------------------------------------- @@ -2027,13 +1945,13 @@ let GenString cenv cgbuf s = let GenConstArray cenv (cgbuf: CodeGenBuffer) eenv ilElementType (data:'a[]) (write: ByteBuffer -> 'a -> unit) = let g = cenv.g - use buf = ByteBuffer.Create data.Length + let buf = ByteBuffer.Create data.Length data |> Array.iter (write buf) - let bytes = buf.AsMemory().ToArray() + let bytes = buf.Close() let ilArrayType = mkILArr1DTy ilElementType if data.Length = 0 then CG.EmitInstrs cgbuf (pop 0) (Push [ilArrayType]) [ mkLdcInt32 0; I_newarr (ILArrayShape.SingleDimensional, ilElementType); ] - else + else let vtspec = cgbuf.mgbuf.GenerateRawDataValueType(eenv.cloc, bytes.Length) let ilFieldName = CompilerGeneratedName ("field" + string(newUnique())) let fty = ILType.Value vtspec @@ -2048,7 +1966,7 @@ let GenConstArray cenv (cgbuf: CodeGenBuffer) eenv ilElementType (data:'a[]) (wr [ mkLdcInt32 data.Length I_newarr (ILArrayShape.SingleDimensional, ilElementType) AI_dup - I_ldtoken (ILToken.ILField fspec) ] + I_ldtoken (ILToken.ILField fspec) ] CG.EmitInstrs cgbuf (pop 2) Push0 @@ -2117,8 +2035,8 @@ let CodeGenMethod cenv mgbuf (entryPointInfo, methodName, eenv, alreadyUsedArgs, // The old union erasure phase increased maxstack by 2 since the code pushes some items, we do the same here let maxStack = maxStack + 2 - // Build an Abstract IL method - instrs, mkILMethodBody (eenv.initLocals, locals, maxStack, code, sourceRange) + // Build an Abstract IL method + instrs, mkILMethodBody (true, locals, maxStack, code, sourceRange) let StartDelayedLocalScope nm cgbuf = let startScope = CG.GenerateDelayMark cgbuf ("start_" + nm) @@ -2162,20 +2080,20 @@ let ComputeDebugPointForBinding g (TBind(_, e, spBind) as bind) = false, None, SPSuppress else match spBind, stripExpr e with - | DebugPointAtBinding.NoneAtInvisible, _ -> false, None, SPSuppress - | DebugPointAtBinding.NoneAtSticky, _ -> true, None, SPSuppress - | DebugPointAtBinding.NoneAtDo, _ -> false, None, SPAlways - | DebugPointAtBinding.NoneAtLet, _ -> false, None, SPSuppress + | NoDebugPointAtInvisibleBinding, _ -> false, None, SPSuppress + | NoDebugPointAtStickyBinding, _ -> true, None, SPSuppress + | NoDebugPointAtDoBinding, _ -> false, None, SPAlways + | NoDebugPointAtLetBinding, _ -> false, None, SPSuppress // Don't emit sequence points for lambdas. // SEQUENCE POINT REVIEW: don't emit for lazy either, nor any builder expressions, nor interface-implementing object expressions | _, (Expr.Lambda _ | Expr.TyLambda _) -> false, None, SPSuppress - | DebugPointAtBinding.Yes m, _ -> false, Some m, SPSuppress + | DebugPointAtBinding m, _ -> false, Some m, SPSuppress /// Determines if a sequence will be emitted when we generate the code for a binding. /// -/// False for Lambdas, BindingEmitsNoCode, DebugPointAtBinding.NoneAtSticky, DebugPointAtBinding.NoneAtInvisible, and DebugPointAtBinding.NoneAtLet. -/// True for DebugPointAtBinding.Yes, DebugPointAtBinding.NoneAtDo. +/// False for Lambdas, BindingEmitsNoCode, NoDebugPointAtStickyBinding, NoDebugPointAtInvisibleBinding, and NoDebugPointAtLetBinding. +/// True for DebugPointAtBinding, NoDebugPointAtDoBinding. let BindingEmitsDebugPoint g bind = match ComputeDebugPointForBinding g bind with | _, None, SPSuppress -> false @@ -2183,7 +2101,7 @@ let BindingEmitsDebugPoint g bind = let BindingIsInvisible (TBind(_, _, spBind)) = match spBind with - | DebugPointAtBinding.NoneAtInvisible _ -> true + | NoDebugPointAtInvisibleBinding _ -> true | _ -> false /// Determines if the code generated for a binding is to be marked as hidden, e.g. the 'newobj' for a local function definition. @@ -2211,7 +2129,7 @@ let rec FirstEmittedCodeWillBeDebugPoint g sp expr = | DebugPointAtSequential.Both -> true | DebugPointAtSequential.StmtOnly -> true | DebugPointAtSequential.ExprOnly -> false - | Expr.Match (DebugPointAtBinding.Yes _, _, _, _, _, _) -> true + | Expr.Match (DebugPointAtBinding _, _, _, _, _, _) -> true | Expr.Op ((TOp.TryWith (DebugPointAtTry.Yes _, _) | TOp.TryFinally (DebugPointAtTry.Yes _, _) | TOp.For (DebugPointAtFor.Yes _, _) @@ -2219,7 +2137,7 @@ let rec FirstEmittedCodeWillBeDebugPoint g sp expr = | _ -> false | SPSuppress -> - false + false /// Suppress sequence points for some compound expressions - though not all - even if "SPAlways" is set. /// @@ -2233,7 +2151,7 @@ let EmitDebugPointForWholeExpr g sp expr = // In some cases, we emit sequence points for the 'whole' of a 'let' expression. // Specifically, when // + SPAlways (i.e. a sequence point is required as soon as meaningful) - // + binding is DebugPointAtBinding.NoneAtSticky, or DebugPointAtBinding.NoneAtLet. + // + binding is NoDebugPointAtStickyBinding, or NoDebugPointAtLetBinding. // + not FirstEmittedCodeWillBeDebugPoint // For example if we start with // let someCode () = f x @@ -2312,7 +2230,7 @@ let DoesGenExprStartWithDebugPoint g sp expr = FirstEmittedCodeWillBeDebugPoint g sp expr || EmitDebugPointForWholeExpr g sp expr -let ProcessDebugPointForExpr (cenv: cenv) (cgbuf: CodeGenBuffer) sp expr = +let ProcessDebugPointForExpr (cenv: cenv) (cgbuf: CodeGenBuffer) sp expr = let g = cenv.g if not (FirstEmittedCodeWillBeDebugPoint g sp expr) then if EmitDebugPointForWholeExpr g sp expr then @@ -2359,12 +2277,6 @@ and GenExprPreSteps (cenv: cenv) (cgbuf: CodeGenBuffer) eenv sp expr sequel = ProcessDebugPointForExpr cenv cgbuf sp expr - match (if compileSequenceExpressions then LowerComputedListOrArrayExpr cenv.tcVal g cenv.amap expr else None) with - | Some altExpr -> - GenExpr cenv cgbuf eenv sp altExpr sequel - true - | None -> - match (if compileSequenceExpressions then ConvertSequenceExprToObject g cenv.amap expr else None) with | Some info -> GenSequenceExpr cenv cgbuf eenv info sequel @@ -2385,8 +2297,8 @@ and GenExprAux (cenv: cenv) (cgbuf: CodeGenBuffer) eenv sp expr sequel = // for large lists we have to process the linearity separately | Expr.Sequential _ | Expr.Let _ - | LinearOpExpr _ - | Expr.Match _ -> + | LinearOpExpr _ + | Expr.Match _ -> GenLinearExpr cenv cgbuf eenv sp expr sequel false id |> ignore | Expr.Const (c, m, ty) -> @@ -2409,65 +2321,65 @@ and GenExprAux (cenv: cenv) (cgbuf: CodeGenBuffer) eenv sp expr sequel = // application of local type functions with type parameters = measure types and body = local value - inline the body GenExpr cenv cgbuf eenv sp v sequel - | Expr.App (f, fty, tyargs, curriedArgs, m) -> + | Expr.App (f, fty, tyargs, curriedArgs, m) -> GenApp cenv cgbuf eenv (f, fty, tyargs, curriedArgs, m) sequel - | Expr.Val (v, _, m) -> + | Expr.Val (v, _, m) -> GenGetVal cenv cgbuf eenv (v, m) sequel - | Expr.Op (op, tyargs, args, m) -> - match op, args, tyargs with - | TOp.ExnConstr c, _, _ -> + | Expr.Op (op, tyargs, args, m) -> + match op, args, tyargs with + | TOp.ExnConstr c, _, _ -> GenAllocExn cenv cgbuf eenv (c, args, m) sequel - | TOp.UnionCase c, _, _ -> + | TOp.UnionCase c, _, _ -> GenAllocUnionCase cenv cgbuf eenv (c, tyargs, args, m) sequel - | TOp.Recd (isCtor, tycon), _, _ -> + | TOp.Recd (isCtor, tycon), _, _ -> GenAllocRecd cenv cgbuf eenv isCtor (tycon, tyargs, args, m) sequel - | TOp.AnonRecd anonInfo, _, _ -> + | TOp.AnonRecd anonInfo, _, _ -> GenAllocAnonRecd cenv cgbuf eenv (anonInfo, tyargs, args, m) sequel - | TOp.AnonRecdGet (anonInfo, n), [e], _ -> + | TOp.AnonRecdGet (anonInfo, n), [e], _ -> GenGetAnonRecdField cenv cgbuf eenv (anonInfo, e, tyargs, n, m) sequel - | TOp.TupleFieldGet (tupInfo, n), [e], _ -> + | TOp.TupleFieldGet (tupInfo, n), [e], _ -> GenGetTupleField cenv cgbuf eenv (tupInfo, e, tyargs, n, m) sequel - | TOp.ExnFieldGet (ecref, n), [e], _ -> + | TOp.ExnFieldGet (ecref, n), [e], _ -> GenGetExnField cenv cgbuf eenv (e, ecref, n, m) sequel - | TOp.UnionCaseFieldGet (ucref, n), [e], _ -> + | TOp.UnionCaseFieldGet (ucref, n), [e], _ -> GenGetUnionCaseField cenv cgbuf eenv (e, ucref, tyargs, n, m) sequel - | TOp.UnionCaseFieldGetAddr (ucref, n, _readonly), [e], _ -> + | TOp.UnionCaseFieldGetAddr (ucref, n, _readonly), [e], _ -> GenGetUnionCaseFieldAddr cenv cgbuf eenv (e, ucref, tyargs, n, m) sequel - | TOp.UnionCaseTagGet ucref, [e], _ -> + | TOp.UnionCaseTagGet ucref, [e], _ -> GenGetUnionCaseTag cenv cgbuf eenv (e, ucref, tyargs, m) sequel - | TOp.UnionCaseProof ucref, [e], _ -> + | TOp.UnionCaseProof ucref, [e], _ -> GenUnionCaseProof cenv cgbuf eenv (e, ucref, tyargs, m) sequel - | TOp.ExnFieldSet (ecref, n), [e;e2], _ -> - GenSetExnField cenv cgbuf eenv (e, ecref, n, e2, m) sequel - | TOp.UnionCaseFieldSet (ucref, n), [e;e2], _ -> + | TOp.ExnFieldSet (ecref, n), [e;e2], _ -> + GenSetExnField cenv cgbuf eenv (e, ecref, n, e2, m) sequel + | TOp.UnionCaseFieldSet (ucref, n), [e;e2], _ -> GenSetUnionCaseField cenv cgbuf eenv (e, ucref, tyargs, n, e2, m) sequel - | TOp.ValFieldGet f, [e], _ -> + | TOp.ValFieldGet f, [e], _ -> GenGetRecdField cenv cgbuf eenv (e, f, tyargs, m) sequel - | TOp.ValFieldGet f, [], _ -> + | TOp.ValFieldGet f, [], _ -> GenGetStaticField cenv cgbuf eenv (f, tyargs, m) sequel - | TOp.ValFieldGetAddr (f, _readonly), [e], _ -> + | TOp.ValFieldGetAddr (f, _readonly), [e], _ -> GenGetRecdFieldAddr cenv cgbuf eenv (e, f, tyargs, m) sequel - | TOp.ValFieldGetAddr (f, _readonly), [], _ -> + | TOp.ValFieldGetAddr (f, _readonly), [], _ -> GenGetStaticFieldAddr cenv cgbuf eenv (f, tyargs, m) sequel - | TOp.ValFieldSet f, [e1;e2], _ -> + | TOp.ValFieldSet f, [e1;e2], _ -> GenSetRecdField cenv cgbuf eenv (e1, f, tyargs, e2, m) sequel - | TOp.ValFieldSet f, [e2], _ -> + | TOp.ValFieldSet f, [e2], _ -> GenSetStaticField cenv cgbuf eenv (f, tyargs, e2, m) sequel - | TOp.Tuple tupInfo, _, _ -> + | TOp.Tuple tupInfo, _, _ -> GenAllocTuple cenv cgbuf eenv (tupInfo, args, tyargs, m) sequel - | TOp.ILAsm (instrs, retTypes), _, _ -> - GenAsmCode cenv cgbuf eenv (instrs, tyargs, args, retTypes, m) sequel - | TOp.While (sp, _), [Expr.Lambda (_, _, _, [_], e1, _, _);Expr.Lambda (_, _, _, [_], e2, _, _)], [] -> - GenWhileLoop cenv cgbuf eenv (sp, e1, e2, m) sequel - | TOp.For (spStart, dir), [Expr.Lambda (_, _, _, [_], e1, _, _);Expr.Lambda (_, _, _, [_], e2, _, _);Expr.Lambda (_, _, _, [v], e3, _, _)], [] -> + | TOp.ILAsm (instrs, retTypes), _, _ -> + GenAsmCode cenv cgbuf eenv (instrs, tyargs, args, retTypes, m) sequel + | TOp.While (sp, _), [Expr.Lambda (_, _, _, [_], e1, _, _);Expr.Lambda (_, _, _, [_], e2, _, _)], [] -> + GenWhileLoop cenv cgbuf eenv (sp, e1, e2, m) sequel + | TOp.For (spStart, dir), [Expr.Lambda (_, _, _, [_], e1, _, _);Expr.Lambda (_, _, _, [_], e2, _, _);Expr.Lambda (_, _, _, [v], e3, _, _)], [] -> GenForLoop cenv cgbuf eenv (spStart, v, e1, dir, e2, e3, m) sequel - | TOp.TryFinally (spTry, spFinally), [Expr.Lambda (_, _, _, [_], e1, _, _); Expr.Lambda (_, _, _, [_], e2, _, _)], [resty] -> + | TOp.TryFinally (spTry, spFinally), [Expr.Lambda (_, _, _, [_], e1, _, _); Expr.Lambda (_, _, _, [_], e2, _, _)], [resty] -> GenTryFinally cenv cgbuf eenv (e1, e2, m, resty, spTry, spFinally) sequel | TOp.TryWith (spTry, spWith), [Expr.Lambda (_, _, _, [_], e1, _, _); Expr.Lambda (_, _, _, [vf], ef, _, _);Expr.Lambda (_, _, _, [vh], eh, _, _)], [resty] -> GenTryWith cenv cgbuf eenv (e1, vf, ef, vh, eh, m, resty, spTry, spWith) sequel - | TOp.ILCall (isVirtual, _, isStruct, isCtor, valUseFlag, _, noTailCall, ilMethRef, enclTypeInst, methInst, returnTypes), args, [] -> + | TOp.ILCall (isVirtual, _, isStruct, isCtor, valUseFlag, _, noTailCall, ilMethRef, enclTypeInst, methInst, returnTypes), args, [] -> GenILCall cenv cgbuf eenv (isVirtual, isStruct, isCtor, valUseFlag, noTailCall, ilMethRef, enclTypeInst, methInst, args, returnTypes, m) sequel | TOp.RefAddrGet _readonly, [e], [ty] -> GenGetAddrOfRefCellField cenv cgbuf eenv (e, ty, m) sequel | TOp.Coerce, [e], [tgty;srcty] -> GenCoerce cenv cgbuf eenv (e, tgty, m, srcty) sequel @@ -2478,8 +2390,8 @@ and GenExprAux (cenv: cenv) (cgbuf: CodeGenBuffer) eenv sp expr sequel = | TOp.LValueOp (LByrefSet, v), [e], [] -> GenSetByref cenv cgbuf eenv (v, e, m) sequel | TOp.LValueOp (LAddrOf _, v), [], [] -> GenGetValAddr cenv cgbuf eenv (v, m) sequel | TOp.Array, elems, [elemTy] -> GenNewArray cenv cgbuf eenv (elems, elemTy, m) sequel - | TOp.Bytes bytes, [], [] -> - if cenv.opts.emitConstantArraysUsingStaticDataBlobs then + | TOp.Bytes bytes, [], [] -> + if cenv.opts.emitConstantArraysUsingStaticDataBlobs then GenConstArray cenv cgbuf eenv g.ilg.typ_Byte bytes (fun buf b -> buf.EmitByte b) GenSequel cenv eenv.cloc cgbuf sequel else @@ -2535,7 +2447,7 @@ and CodeGenMethodForExpr cenv mgbuf (spReq, entryPointInfo, methodName, eenv, al CodeGenMethod cenv mgbuf (entryPointInfo, methodName, eenv, alreadyUsedArgs, (fun cgbuf eenv -> GenExpr cenv cgbuf eenv spReq expr0 sequel0), expr0.Range) - code + code //-------------------------------------------------------------------------- // Generate sequels @@ -2740,7 +2652,7 @@ and GenAllocUnionCase cenv cgbuf eenv (c,tyargs,args,m) sequel = and GenLinearExpr cenv cgbuf eenv sp expr sequel preSteps (contf: FakeUnit -> FakeUnit) = let expr = stripExpr expr - match expr with + match expr with | Expr.Sequential (e1, e2, specialSeqFlag, spSeq, _) -> // Process the debug point and see if there's a replacement technique to process this expression if preSteps && GenExprPreSteps cenv cgbuf eenv sp expr sequel then contf Fake else @@ -2778,12 +2690,12 @@ and GenLinearExpr cenv cgbuf eenv sp expr sequel preSteps (contf: FakeUnit -> Fa // For sticky bindings arising from inlining we suppress any immediate sequence point in the body let spBody = match bind.DebugPoint with - | DebugPointAtBinding.Yes _ - | DebugPointAtBinding.NoneAtLet - | DebugPointAtBinding.NoneAtDo -> SPAlways - | DebugPointAtBinding.NoneAtInvisible -> sp - | DebugPointAtBinding.NoneAtSticky -> SPSuppress - + | DebugPointAtBinding _ + | NoDebugPointAtLetBinding + | NoDebugPointAtDoBinding -> SPAlways + | NoDebugPointAtInvisibleBinding -> sp + | NoDebugPointAtStickyBinding -> SPSuppress + // Generate the body GenLinearExpr cenv cgbuf eenv spBody body (EndLocalScope(sequel, endScope)) true contf @@ -2792,11 +2704,11 @@ and GenLinearExpr cenv cgbuf eenv sp expr sequel preSteps (contf: FakeUnit -> Fa if preSteps && GenExprPreSteps cenv cgbuf eenv sp expr sequel then contf Fake else match spBind with - | DebugPointAtBinding.Yes m -> CG.EmitSeqPoint cgbuf m - | DebugPointAtBinding.NoneAtDo - | DebugPointAtBinding.NoneAtLet - | DebugPointAtBinding.NoneAtInvisible - | DebugPointAtBinding.NoneAtSticky -> () + | DebugPointAtBinding m -> CG.EmitSeqPoint cgbuf m + | NoDebugPointAtDoBinding + | NoDebugPointAtLetBinding + | NoDebugPointAtInvisibleBinding + | NoDebugPointAtStickyBinding -> () // The target of branch needs a sequence point. // If we don't give it one it will get entirely the wrong sequence point depending on earlier codegen @@ -2826,7 +2738,7 @@ and GenLinearExpr cenv cgbuf eenv sp expr sequel preSteps (contf: FakeUnit -> Fa // match-testing (dtrees) should not contribute to the stack. // Each branch-RHS (targets) may contribute to the stack, leaving it in the "stackAfterJoin" state, for the join point. // Since code is branching and joining, the cgbuf stack is maintained manually. - GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequelOnBranches (contf << (fun Fake -> + GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequelOnBranches (contf << (fun Fake -> CG.SetMarkToHere cgbuf afterJoin //assert(cgbuf.GetCurrentStack() = stackAfterJoin) // REVIEW: Since gen_dtree* now sets stack, stack should be stackAfterJoin at this point... @@ -2853,12 +2765,12 @@ and GenLinearExpr cenv cgbuf eenv sp expr sequel preSteps (contf: FakeUnit -> Fa if preSteps && GenExprPreSteps cenv cgbuf eenv sp expr sequel then contf Fake else GenExprs cenv cgbuf eenv argsFront - GenLinearExpr cenv cgbuf eenv SPSuppress argLast Continue true (contf << (fun Fake -> + GenLinearExpr cenv cgbuf eenv SPSuppress argLast Continue true (contf << (fun Fake -> GenAllocUnionCaseCore cenv cgbuf eenv (c, tyargs, argsFront.Length + 1, m) GenSequel cenv eenv.cloc cgbuf sequel Fake)) - | _ -> + | _ -> GenExpr cenv cgbuf eenv sp expr sequel contf Fake @@ -2904,7 +2816,7 @@ and GenGetAnonRecdField cenv cgbuf eenv (anonInfo: AnonRecdTypeInfo, e, tyargs, let ilTypeArgs = GenTypeArgs cenv.amap m eenv.tyenv tyargs let anonMethod = anonMethods.[n] let anonFieldType = ilTypeArgs.[n] - GenExpr cenv cgbuf eenv SPSuppress e Continue + GenExpr cenv cgbuf eenv SPSuppress e Continue CG.EmitInstr cgbuf (pop 1) (Push [anonFieldType]) (mkNormalCall (mkILMethSpec(anonMethod, boxity, ilTypeArgs, []))) GenSequel cenv eenv.cloc cgbuf sequel @@ -2912,15 +2824,11 @@ and GenNewArraySimple cenv cgbuf eenv (elems, elemTy, m) sequel = let ilElemTy = GenType cenv.amap m eenv.tyenv elemTy let ilArrTy = mkILArr1DTy ilElemTy - if List.isEmpty elems && cenv.g.isArrayEmptyAvailable then - mkNormalCall (mkILMethSpecInTy (cenv.g.ilg.typ_Array, ILCallingConv.Static, "Empty", [], mkILArr1DTy (mkILTyvarTy 0us), [ilElemTy])) - |> CG.EmitInstr cgbuf (pop 0) (Push [ilArrTy]) - else - CG.EmitInstrs cgbuf (pop 0) (Push [ilArrTy]) [ (AI_ldc (DT_I4, ILConst.I4 (elems.Length))); I_newarr (ILArrayShape.SingleDimensional, ilElemTy) ] - elems |> List.iteri (fun i e -> - CG.EmitInstrs cgbuf (pop 0) (Push [ilArrTy; cenv.g.ilg.typ_Int32]) [ AI_dup; (AI_ldc (DT_I4, ILConst.I4 i)) ] - GenExpr cenv cgbuf eenv SPSuppress e Continue - CG.EmitInstr cgbuf (pop 3) Push0 (I_stelem_any (ILArrayShape.SingleDimensional, ilElemTy))) + CG.EmitInstrs cgbuf (pop 0) (Push [ilArrTy]) [ (AI_ldc (DT_I4, ILConst.I4 (elems.Length))); I_newarr (ILArrayShape.SingleDimensional, ilElemTy) ] + elems |> List.iteri (fun i e -> + CG.EmitInstrs cgbuf (pop 0) (Push [ilArrTy; cenv.g.ilg.typ_Int32]) [ AI_dup; (AI_ldc (DT_I4, ILConst.I4 i)) ] + GenExpr cenv cgbuf eenv SPSuppress e Continue + CG.EmitInstr cgbuf (pop 3) Push0 (I_stelem_any (ILArrayShape.SingleDimensional, ilElemTy))) GenSequel cenv eenv.cloc cgbuf sequel @@ -2966,7 +2874,7 @@ and GenNewArray cenv cgbuf eenv (elems: Expr list, elemTy, m) sequel = (fun buf -> function Const.Int32 b -> buf.EmitInt32 b | _ -> failwith "unreachable") | Expr.Const (Const.Int64 _, _, _) -> (function Const.Int64 _ -> true | _ -> false), - (fun buf -> function Const.Int64 b -> buf.EmitInt64 b | _ -> failwith "unreachable") + (fun buf -> function Const.Int64 b -> buf.EmitInt64 b | _ -> failwith "unreachable") | _ -> (function _ -> false), (fun _ _ -> failwith "unreachable") if elems' |> Array.forall (function Expr.Const (c, _, _) -> test c | _ -> false) then @@ -2982,7 +2890,7 @@ and GenCoerce cenv cgbuf eenv (e, tgty, m, srcty) sequel = // Is this an upcast? if TypeRelations.TypeDefinitelySubsumesTypeNoCoercion 0 g cenv.amap m tgty srcty && // Do an extra check - should not be needed - TypeRelations.TypeFeasiblySubsumesType 0 g cenv.amap m tgty TypeRelations.NoCoerce srcty + TypeRelations.TypeFeasiblySubsumesType 0 g cenv.amap m tgty TypeRelations.NoCoerce srcty then if isInterfaceTy g tgty then GenExpr cenv cgbuf eenv SPSuppress e Continue @@ -3003,7 +2911,7 @@ and GenCoerce cenv cgbuf eenv (e, tgty, m, srcty) sequel = CG.EmitInstrs cgbuf (pop 1) (Push [ilToTy]) [ I_unbox_any ilToTy ] GenSequel cenv eenv.cloc cgbuf sequel -and GenReraise cenv cgbuf eenv (rtnty, m) sequel = +and GenReraise cenv cgbuf eenv (rtnty, m) sequel = let ilReturnTy = GenType cenv.amap m eenv.tyenv rtnty CG.EmitInstrs cgbuf (pop 0) Push0 [I_rethrow] // [See comment related to I_throw]. @@ -3040,13 +2948,13 @@ and GenSetExnField cenv cgbuf eenv (e, ecref, fieldNum, e2, m) sequel = and UnionCodeGen (cgbuf: CodeGenBuffer) = { new EraseUnions.ICodeGen with - member _.CodeLabel m = m.CodeLabel - member _.GenerateDelayMark() = CG.GenerateDelayMark cgbuf "unionCodeGenMark" - member _.GenLocal ilty = cgbuf.AllocLocal([], ilty, false) |> uint16 - member _.SetMarkToHere m = CG.SetMarkToHere cgbuf m - member _.MkInvalidCastExnNewobj () = mkInvalidCastExnNewobj cgbuf.mgbuf.cenv.g - member _.EmitInstr x = CG.EmitInstr cgbuf (pop 0) (Push []) x - member _.EmitInstrs xs = CG.EmitInstrs cgbuf (pop 0) (Push []) xs } + member __.CodeLabel m = m.CodeLabel + member __.GenerateDelayMark() = CG.GenerateDelayMark cgbuf "unionCodeGenMark" + member __.GenLocal ilty = cgbuf.AllocLocal([], ilty, false) |> uint16 + member __.SetMarkToHere m = CG.SetMarkToHere cgbuf m + member __.MkInvalidCastExnNewobj () = mkInvalidCastExnNewobj cgbuf.mgbuf.cenv.g + member __.EmitInstr x = CG.EmitInstr cgbuf (pop 0) (Push []) x + member __.EmitInstrs xs = CG.EmitInstrs cgbuf (pop 0) (Push []) xs } and GenUnionCaseProof cenv cgbuf eenv (e, ucref, tyargs, m) sequel = let g = cenv.g @@ -3105,12 +3013,12 @@ and GenGetRecdFieldAddr cenv cgbuf eenv (e, f, tyargs, m) sequel = let fref = GenRecdFieldRef m cenv eenv.tyenv f tyargs CG.EmitInstrs cgbuf (pop 1) (Push [ILType.Byref fref.ActualType]) [ I_ldflda fref ] GenSequel cenv eenv.cloc cgbuf sequel - + and GenGetStaticFieldAddr cenv cgbuf eenv (f, tyargs, m) sequel = let fspec = GenRecdFieldRef m cenv eenv.tyenv f tyargs CG.EmitInstrs cgbuf (pop 0) (Push [ILType.Byref fspec.ActualType]) [ I_ldsflda fspec ] GenSequel cenv eenv.cloc cgbuf sequel - + and GenGetRecdField cenv cgbuf eenv (e, f, tyargs, m) sequel = GenExpr cenv cgbuf eenv SPSuppress e Continue GenFieldGet false cenv cgbuf eenv (f, tyargs, m) @@ -3211,10 +3119,10 @@ and GenUntupledArgExpr cenv cgbuf eenv m argInfos expr = and GenWitnessArgFromTraitInfo cenv cgbuf eenv m traitInfo = let g = cenv.g let storage = TryStorageForWitness g eenv traitInfo.TraitKey - match storage with + match storage with | None -> let witnessExpr = - ConstraintSolver.CodegenWitnessArgForTraitConstraint cenv.tcVal g cenv.amap m traitInfo + ConstraintSolver.CodegenWitnessArgForTraitConstraint cenv.tcVal g cenv.amap m traitInfo |> CommitOperationResult match witnessExpr with | Choice1Of2 _traitInfo -> @@ -3223,18 +3131,18 @@ and GenWitnessArgFromTraitInfo cenv cgbuf eenv m traitInfo = | Choice2Of2 arg -> let eenv = { eenv with suppressWitnesses = true } GenExpr cenv cgbuf eenv SPSuppress arg Continue - | Some storage -> + | Some storage -> let ty = GenWitnessTy g traitInfo.TraitKey GenGetStorageAndSequel cenv cgbuf eenv m (ty, GenType cenv.amap m eenv.tyenv ty) storage None and GenWitnessArgFromWitnessInfo cenv cgbuf eenv m witnessInfo = let g = cenv.g let storage = TryStorageForWitness g eenv witnessInfo - match storage with + match storage with | None -> System.Diagnostics.Debug.Assert(false, "expected storage for witness") failwith "unexpected non-generation of witness " - | Some storage -> + | Some storage -> let ty = GenWitnessTy g witnessInfo GenGetStorageAndSequel cenv cgbuf eenv m (ty, GenType cenv.amap m eenv.tyenv ty) storage None @@ -3242,7 +3150,7 @@ and GenWitnessArgsFromWitnessInfos cenv cgbuf eenv m witnessInfos = let g = cenv.g let generateWitnesses = ComputeGenerateWitnesses g eenv // Witness arguments are only generated in emitted 'inline' code where witness parameters are available. - if generateWitnesses then + if generateWitnesses then for witnessInfo in witnessInfos do GenWitnessArgFromWitnessInfo cenv cgbuf eenv m witnessInfo @@ -3250,13 +3158,13 @@ and GenWitnessArgs cenv cgbuf eenv m tps tyargs = let g = cenv.g let generateWitnesses = ComputeGenerateWitnesses g eenv // Witness arguments are only generated in emitted 'inline' code where witness parameters are available. - if generateWitnesses then - let mwitnesses = - ConstraintSolver.CodegenWitnessesForTyparInst cenv.tcVal g cenv.amap m tps tyargs + if generateWitnesses then + let mwitnesses = + ConstraintSolver.CodegenWitnessesForTyparInst cenv.tcVal g cenv.amap m tps tyargs |> CommitOperationResult for witnessArg in mwitnesses do - match witnessArg with + match witnessArg with | Choice1Of2 traitInfo -> GenWitnessArgFromTraitInfo cenv cgbuf eenv m traitInfo | Choice2Of2 arg -> @@ -3265,7 +3173,7 @@ and GenWitnessArgs cenv cgbuf eenv m tps tyargs = and GenApp (cenv: cenv) cgbuf eenv (f, fty, tyargs, curriedArgs, m) sequel = let g = cenv.g match (f, tyargs, curriedArgs) with - // Look for tailcall to turn into branch + // Look for tailcall to turn into branch | (Expr.Val (v, _, _), _, _) when match ListAssoc.tryFind g.valRefEq v eenv.innerVals with | Some (kind, _) -> @@ -3314,12 +3222,12 @@ and GenApp (cenv: cenv) cgbuf eenv (f, fty, tyargs, curriedArgs, m) sequel = // Extension methods with empty arguments are evidently not quite in sufficiently normalized form, // so apply a fixup here. This feels like a mistake associated with BindUnitVars, where that is not triggering // in this case. - let numArgs = + let numArgs = if v.IsExtensionMember then match curriedArgInfos, curriedArgs with - // static extension method with empty arguments. + // static extension method with empty arguments. | [[]], [_] when numObjArgs = 0 -> 0 - // instance extension method with empty arguments. + // instance extension method with empty arguments. | [[_];[]], [_;_] when numObjArgs = 0 -> 1 | _ -> numMethodArgs else numMethodArgs @@ -3335,14 +3243,14 @@ and GenApp (cenv: cenv) cgbuf eenv (f, fty, tyargs, curriedArgs, m) sequel = CG.EmitInstrs cgbuf (pop 0) Push0 [ I_br mark.CodeLabel ] GenSequelEndScopes cgbuf sequel - + // PhysicalEquality becomes cheap reference equality once // a nominal type is known. We can't replace it for variable types since // a "ceq" instruction can't be applied to variable type values. | (Expr.Val (v, _, _), [ty], [arg1;arg2]) when (valRefEq g v g.reference_equality_inner_vref) && isAppTy g ty -> - + GenExpr cenv cgbuf eenv SPSuppress arg1 Continue GenExpr cenv cgbuf eenv SPSuppress arg2 Continue CG.EmitInstr cgbuf (pop 2) (Push [g.ilg.typ_Bool]) AI_ceq @@ -3358,18 +3266,18 @@ and GenApp (cenv: cenv) cgbuf eenv (f, fty, tyargs, curriedArgs, m) sequel = // Generate ldtoken instruction for "methodhandleof(fun (a, b, c) -> f(a, b, c))" // where f is an F# function value or F# method | Expr.Lambda (_, _, _, _, Expr.App (OptionalCoerce(OptionalTyapp(Expr.Val (vref, _, _))), _, _, _, _), _, _) -> - + let storage = StorageForValRef g m vref eenv match storage with | Method (_, _, mspec, _, _, _, _, _, _, _, _, _) -> CG.EmitInstr cgbuf (pop 0) (Push [g.iltyp_RuntimeMethodHandle]) (I_ldtoken (ILToken.ILMethod mspec)) | _ -> errorR(Error(FSComp.SR.ilxgenUnexpectedArgumentToMethodHandleOfDuringCodegen(), m)) - + // Generate ldtoken instruction for "methodhandleof(fun (a, b, c) -> obj.M(a, b, c))" // where M is an IL method. | Expr.Lambda (_, _, _, _, Expr.Op (TOp.ILCall (_, _, isStruct, _, _, _, _, ilMethRef, enclTypeInst, methInst, _), _, _, _), _, _) -> - + let boxity = (if isStruct then AsValue else AsObject) let mkFormalParams gparams = gparams |> DropErasedTyargs |> List.mapi (fun n _gf -> mkILTyvarTy (uint16 n)) let ilGenericMethodSpec = IL.mkILMethSpec (ilMethRef, boxity, mkFormalParams enclTypeInst, mkFormalParams methInst) @@ -3404,11 +3312,11 @@ and GenApp (cenv: cenv) cgbuf eenv (f, fty, tyargs, curriedArgs, m) sequel = let _, witnessInfos, curriedArgInfos, returnTy, _ = GetTopValTypeInCompiledForm cenv.g topValInfo ctps.Length vref.Type m - let mspec = + let mspec = let generateWitnesses = ComputeGenerateWitnesses g eenv if not generateWitnesses || witnessInfos.IsEmpty then - mspec - else + mspec + else mspecW let ilTyArgs = GenTypeArgs cenv.amap m eenv.tyenv tyargs @@ -3431,15 +3339,15 @@ and GenApp (cenv: cenv) cgbuf eenv (f, fty, tyargs, curriedArgs, m) sequel = let boxity = mspec.DeclaringType.Boxity let mspec = mkILMethSpec (mspec.MethodRef, boxity, ilEnclArgTys, ilMethArgTys) - + // "Unit" return types on static methods become "void" let mustGenerateUnitAfterCall = Option.isNone returnTy - + let ccallInfo = match valUseFlags with | PossibleConstrainedCall ty -> Some ty | _ -> None - + let isBaseCall = match valUseFlags with VSlotDirectCall -> true | _ -> false let isTailCall = @@ -3450,9 +3358,9 @@ and GenApp (cenv: cenv) cgbuf eenv (f, fty, tyargs, curriedArgs, m) sequel = CanTailcall((boxity=AsValue), ccallInfo, eenv.withinSEH, hasByrefArg, mustGenerateUnitAfterCall, isDllImport, isSelfInit, makesNoCriticalTailcalls, sequel) else Normalcall - + let useICallVirt = virtualCall || useCallVirt cenv boxity mspec isBaseCall - + let callInstr = match valUseFlags with | PossibleConstrainedCall ty -> @@ -3515,21 +3423,21 @@ and GenApp (cenv: cenv) cgbuf eenv (f, fty, tyargs, curriedArgs, m) sequel = | Choice1Of2 (ilTy, loc) -> EmitGetLocal cgbuf ilTy loc | Choice2Of2 expr -> GenExpr cenv cgbuf eenv SPSuppress expr Continue) GenIndirectCall cenv cgbuf eenv (actualRetTy, [], laterArgs, m) sequel) - + | _ -> failwith "??" - + // This case is for getting/calling a value, when we can't call it directly. // However, we know the type instantiation for the value. // In this case we can often generate a type-specific local expression for the value. // This reduces the number of dynamic type applications. | (Expr.Val (vref, _, _), _, _) -> GenGetValRefAndSequel cenv cgbuf eenv m vref (Some (tyargs, curriedArgs, m, sequel)) - + | _ -> (* worst case: generate a first-class function value and call *) GenExpr cenv cgbuf eenv SPSuppress f Continue GenCurriedArgsAndIndirectCall cenv cgbuf eenv (fty, tyargs, curriedArgs, m) sequel - + and CanTailcall (hasStructObjArg, ccallInfo, withinSEH, hasByrefArg, mustGenerateUnitAfterCall, isDllImport, isSelfInit, makesNoCriticalTailcalls, sequel) = // Can't tailcall with a struct object arg since it involves a byref @@ -3545,107 +3453,35 @@ and CanTailcall (hasStructObjArg, ccallInfo, withinSEH, hasByrefArg, mustGenerat | _ -> false) then Tailcall else Normalcall - -/// Choose the names for TraitWitnessInfo representations in arguments and free variables -and ChooseWitnessInfoNames takenNames (witnessInfos: TraitWitnessInfo list) = - witnessInfos - |> List.map (fun w -> String.uncapitalize w.MemberName) - |> ChooseFreeVarNames takenNames - -/// Represent the TraitWitnessInfos as arguments, e.g. in local type functions -and ArgStorageForWitnessInfos (cenv: cenv) (eenv: IlxGenEnv) takenNames pretakenArgs m (witnessInfos: TraitWitnessInfo list) = - let names = ChooseWitnessInfoNames takenNames witnessInfos - (witnessInfos, List.indexed names) - ||> List.map2 (fun w (i, nm) -> - let ty = GenWitnessTy cenv.g w - let ilTy = GenType cenv.amap m eenv.tyenv ty - let ilParam = mkILParam (Some nm, ilTy) - let storage = Arg (i+pretakenArgs) - ilParam, (w, storage)) - |> List.unzip - -/// Represent the TraitWitnessInfos as free variables, e.g. in closures -and FreeVarStorageForWitnessInfos (cenv: cenv) (eenv: IlxGenEnv) takenNames ilCloTyInner m (witnessInfos: TraitWitnessInfo list) = - let names = ChooseWitnessInfoNames takenNames witnessInfos - (witnessInfos, names) - ||> List.map2 (fun w nm -> - let ty = GenWitnessTy cenv.g w - let ilTy = GenType cenv.amap m eenv.tyenv ty - let ilFv = mkILFreeVar (nm, true, ilTy) - let storage = - let ilField = mkILFieldSpecInTy (ilCloTyInner, ilFv.fvName, ilFv.fvType) - Env(ilCloTyInner, ilField, None) - ilFv, (w, storage)) - |> List.unzip - -//-------------------------------------------------------------------------- -// Named local type functions -//-------------------------------------------------------------------------- - -and IsNamedLocalTypeFuncVal g (v: Val) expr = - not v.IsCompiledAsTopLevel && - IsGenericValWithGenericConstraints g v && - (match stripExpr expr with Expr.TyLambda _ -> true | _ -> false) - -and AddDirectTyparWitnessParams cenv eenv cloinfo m = - let directTypars = - match cloinfo.cloExpr with - | Expr.TyLambda (_, tvs, _, _, _) -> tvs - | _ -> [] - - let directWitnessInfos = - let generateWitnesses = ComputeGenerateWitnesses cenv.g eenv - if generateWitnesses then - // The 0 here represents that a closure doesn't reside within a generic class - there are no "enclosing class type parameters" to lop off. - GetTraitWitnessInfosOfTypars cenv.g 0 directTypars - else - [] - - // Direct witnesses get passed as arguments to DirectInvoke - let ilDirectWitnessParams, ilDirectWitnessParamsStorage = - let pretakenArgs = 1 - ArgStorageForWitnessInfos cenv eenv [] pretakenArgs m directWitnessInfos - let eenv = eenv |> AddStorageForLocalWitnesses ilDirectWitnessParamsStorage - - directTypars, ilDirectWitnessParams, directWitnessInfos, eenv - + and GenNamedLocalTyFuncCall cenv (cgbuf: CodeGenBuffer) eenv ty cloinfo tyargs m = let g = cenv.g + let ilContractClassTyargs = + cloinfo.localTypeFuncContractFreeTypars + |> List.map mkTyparTy + |> GenTypeArgs cenv.amap m eenv.tyenv let ilTyArgs = tyargs |> GenTypeArgs cenv.amap m eenv.tyenv - let ilCloTy = cloinfo.cloSpec.ILType - let ilDirectGenericParams, ilDirectWitnessParams, directWitnessInfos = - let eenvinner = EnvForTypars cloinfo.cloFreeTyvars eenv - let directTypars = - match cloinfo.cloExpr with - | Expr.TyLambda (_, tvs, _, _, _) -> tvs - | _ -> [] + let _, (ilContractMethTyargs: ILGenericParameterDefs), (ilContractCloTySpec: ILTypeSpec), ilContractFormalRetTy = + GenNamedLocalTypeFuncContractInfo cenv eenv m cloinfo - let eenvinner = AddTyparsToEnv directTypars eenvinner + let ilContractTy = mkILBoxedTy ilContractCloTySpec.TypeRef ilContractClassTyargs - let ilDirectGenericParams = GenGenericParams cenv eenvinner directTypars - let _directTypars, ilDirectWitnessParams, directWitnessInfos, _eenv = AddDirectTyparWitnessParams cenv eenvinner cloinfo m - ilDirectGenericParams, ilDirectWitnessParams, directWitnessInfos - - if not (List.length ilDirectGenericParams = ilTyArgs.Length) then errorR(Error(FSComp.SR.ilIncorrectNumberOfTypeArguments(), m)) + if not (ilContractMethTyargs.Length = ilTyArgs.Length) then errorR(Error(FSComp.SR.ilIncorrectNumberOfTypeArguments(), m)) + // Local TyFunc are represented as a $contract type. they currently get stored in a value of type object // Recover result (value or reference types) via unbox_any. - CG.EmitInstrs cgbuf (pop 1) (Push [ilCloTy]) [I_unbox_any ilCloTy] - + CG.EmitInstrs cgbuf (pop 1) (Push [ilContractTy]) [I_unbox_any ilContractTy] let actualRetTy = applyTys g ty (tyargs, []) - let ilDirectWitnessParamsTys = ilDirectWitnessParams |> List.map (fun p -> p.Type) - let ilDirectInvokeMethSpec = mkILInstanceMethSpecInTy(ilCloTy, "DirectInvoke", ilDirectWitnessParamsTys, cloinfo.ilCloFormalReturnTy, ilTyArgs) - - GenWitnessArgsFromWitnessInfos cenv cgbuf eenv m directWitnessInfos - + let ilDirectInvokeMethSpec = mkILInstanceMethSpecInTy(ilContractTy, "DirectInvoke", [], ilContractFormalRetTy, ilTyArgs) let ilActualRetTy = GenType cenv.amap m eenv.tyenv actualRetTy CountCallFuncInstructions() - CG.EmitInstr cgbuf (pop (1+ilDirectWitnessParamsTys.Length)) (Push [ilActualRetTy]) (mkNormalCall ilDirectInvokeMethSpec) + CG.EmitInstr cgbuf (pop 1) (Push [ilActualRetTy]) (mkNormalCallvirt ilDirectInvokeMethSpec) actualRetTy - + /// Generate an indirect call, converting to an ILX callfunc instruction and GenCurriedArgsAndIndirectCall cenv cgbuf eenv (functy, tyargs, curriedArgs, m) sequel = @@ -3687,7 +3523,7 @@ and GenIndirectCall cenv cgbuf eenv (functy, tyargs, curriedArgs, m) sequel = | Apps_app(arg, apps) -> IsILTypeByref arg || check apps | _ -> false check ilxClosureApps - + let isTailCall = CanTailcall(false, None, eenv.withinSEH, hasByrefArg, false, false, false, false, sequel) CountCallFuncInstructions() @@ -3776,20 +3612,20 @@ and GenTryWith cenv cgbuf eenv (e1, vf: Val, ef, vh: Val, eh, m, resty, spTry, s CG.SetMarkToHere cgbuf afterFilter let startOfHandler = CG.GenerateMark cgbuf "startOfHandler" - + CG.SetStack cgbuf [g.ilg.typ_Object] let _, eenvinner = AllocLocalVal cenv cgbuf vh eenvinner None (startOfHandler, afterHandler) CG.EmitInstr cgbuf (pop 1) (Push [g.iltyp_Exception]) (I_castclass g.iltyp_Exception) GenStoreVal cenv cgbuf eenvinner vh.Range vh GenExpr cenv cgbuf eenvinner SPAlways eh (LeaveHandler (false, whereToSave, afterHandler)) - + let endOfHandler = CG.GenerateMark cgbuf "endOfHandler" let handlerMarks = (startOfHandler.CodeLabel, endOfHandler.CodeLabel) ILExceptionClause.FilterCatch(filterMarks, handlerMarks) else let startOfHandler = CG.GenerateMark cgbuf "startOfHandler" - + match spWith with | DebugPointAtWith.Yes m -> CG.EmitSeqPoint cgbuf m | DebugPointAtWith.No -> () @@ -3801,7 +3637,7 @@ and GenTryWith cenv cgbuf eenv (e1, vf: Val, ef, vh: Val, eh, m, resty, spTry, s GenStoreVal cenv cgbuf eenvinner m vh GenExpr cenv cgbuf eenvinner SPAlways eh (LeaveHandler (false, whereToSave, afterHandler)) - + let endOfHandler = CG.GenerateMark cgbuf "endOfHandler" let handlerMarks = (startOfHandler.CodeLabel, endOfHandler.CodeLabel) ILExceptionClause.TypeCatch(g.ilg.typ_Object, handlerMarks) @@ -3833,11 +3669,10 @@ and GenTryFinally cenv cgbuf eenv (bodyExpr, handlerExpr, m, resty, spTry, spFin // Now the catch/finally block let startOfHandler = CG.GenerateMark cgbuf "startOfHandler" CG.SetStack cgbuf [] - + let sp = match spFinally with | DebugPointAtFinally.Yes m -> CG.EmitSeqPoint cgbuf m; SPAlways - | DebugPointAtFinally.Body -> SPAlways | DebugPointAtFinally.No -> SPSuppress GenExpr cenv cgbuf eenvinner sp handlerExpr (LeaveHandler (true, whereToSave, afterHandler)) @@ -3903,7 +3738,7 @@ and GenForLoop cenv cgbuf eenv (spFor, v, e1, dir, e2, loopBody, m) sequel = GenExpr cenv cgbuf eenvinner SPSuppress e2 Continue EmitSetLocal cgbuf finishIdx EmitGetLocal cgbuf g.ilg.typ_Int32 finishIdx - GenGetLocalVal cenv cgbuf eenvinner e2.Range v None + GenGetLocalVal cenv cgbuf eenvinner e2.Range v None CG.EmitInstr cgbuf (pop 2) Push0 (I_brcmp ((if isUp then BI_blt else BI_bgt), finish.CodeLabel)) else @@ -3959,13 +3794,12 @@ and GenWhileLoop cenv cgbuf eenv (spWhile, e1, e2, m) sequel = let finish = CG.GenerateDelayMark cgbuf "while_finish" let startTest = CG.GenerateMark cgbuf "startTest" - let spCondition = - match spWhile with - | DebugPointAtWhile.Yes spStart -> CG.EmitSeqPoint cgbuf spStart; SPSuppress - | DebugPointAtWhile.No -> SPSuppress + match spWhile with + | DebugPointAtWhile.Yes spStart -> CG.EmitSeqPoint cgbuf spStart + | DebugPointAtWhile.No -> () // SEQUENCE POINTS: Emit a sequence point to cover all of 'while e do' - GenExpr cenv cgbuf eenv spCondition e1 (CmpThenBrOrContinue (pop 1, [ I_brcmp(BI_brfalse, finish.CodeLabel) ])) + GenExpr cenv cgbuf eenv SPSuppress e1 (CmpThenBrOrContinue (pop 1, [ I_brcmp(BI_brfalse, finish.CodeLabel) ])) GenExpr cenv cgbuf eenv SPAlways e2 (DiscardThen (Br startTest)) CG.SetMarkToHere cgbuf finish @@ -3997,7 +3831,7 @@ and GenAsmCode cenv cgbuf eenv (il, tyargs, args, returnTys, m) sequel = {fspec with DeclaringType= let ty = fspec.DeclaringType let tspec = ty.TypeSpec - mkILTy ty.Boxity (mkILTySpec(tspec.TypeRef, ilTyArgs)) } + mkILTy ty.Boxity (mkILTySpec(tspec.TypeRef, ilTyArgs)) } match i, ilTyArgs with | I_unbox_any (ILType.TypeVar _), [tyarg] -> I_unbox_any tyarg | I_box (ILType.TypeVar _), [tyarg] -> I_box tyarg @@ -4012,8 +3846,8 @@ and GenAsmCode cenv cgbuf eenv (il, tyargs, args, returnTys, m) sequel = | I_ldtoken (ILToken.ILType (ILType.TypeVar _)), [tyarg] -> I_ldtoken (ILToken.ILType tyarg) | I_sizeof (ILType.TypeVar _), [tyarg] -> I_sizeof tyarg // currently unused, added for forward compat, see https://visualfsharp.codeplex.com/SourceControl/network/forks/jackpappas/fsharpcontrib/contribution/7134 - | I_cpobj (ILType.TypeVar _), [tyarg] -> I_cpobj tyarg - | I_initobj (ILType.TypeVar _), [tyarg] -> I_initobj tyarg + | I_cpobj (ILType.TypeVar _), [tyarg] -> I_cpobj tyarg + | I_initobj (ILType.TypeVar _), [tyarg] -> I_initobj tyarg | I_ldfld (al, vol, fspec), _ -> I_ldfld (al, vol, modFieldSpec fspec) | I_ldflda fspec, _ -> I_ldflda (modFieldSpec fspec) | I_stfld (al, vol, fspec), _ -> I_stfld (al, vol, modFieldSpec fspec) @@ -4081,7 +3915,7 @@ and GenAsmCode cenv cgbuf eenv (il, tyargs, args, returnTys, m) sequel = CG.SetMarkToHere cgbuf after1 CG.EmitInstrs cgbuf (pop 0) (Push [ilRetTy]) [AI_ldnull; I_unbox_any ilRetTy; I_br after3.CodeLabel ] - + CG.SetMarkToHere cgbuf after2 GenExpr cenv cgbuf eenv SPSuppress arg1 Continue CG.EmitInstr cgbuf (pop 1) Push0 I_throw @@ -4107,9 +3941,9 @@ and GenAsmCode cenv cgbuf eenv (il, tyargs, args, returnTys, m) sequel = CG.EmitInstr cgbuf (pop 2) Push0 (I_brcmp(BI_ble_un, label1)) | [ AI_ceq ], CmpThenBrOrContinue(1, [ I_brcmp (BI_brfalse, label1) ]) when not (anyfpType (tyOfExpr g args.Head)) -> CG.EmitInstr cgbuf (pop 2) Push0 (I_brcmp(BI_bne_un, label1)) - + // THESE ARE VALID ON FP w.r.t. NaN - + | [ AI_clt ], CmpThenBrOrContinue(1, [ I_brcmp (BI_brtrue, label1) ]) -> CG.EmitInstr cgbuf (pop 2) Push0 (I_brcmp(BI_blt, label1)) | [ AI_cgt ], CmpThenBrOrContinue(1, [ I_brcmp (BI_brtrue, label1) ]) -> @@ -4141,7 +3975,7 @@ and GenQuotation cenv cgbuf eenv (ast, qdataCell, m, ety) sequel = match qdataCell.Value with | Some (data1, data2) -> if suppressWitnesses then data1 else data2 - + | None -> try let qscope = QuotationTranslator.QuotationGenerationScope.Create (g, cenv.amap, cenv.viewCcu, cenv.tcVal, QuotationTranslator.IsReflectedDefinition.No) @@ -4154,14 +3988,14 @@ and GenQuotation cenv cgbuf eenv (ast, qdataCell, m, ety) sequel = let astSerializedBytes = QuotationPickler.pickle astSpec let someTypeInModuleExpr = mkTypeOfExpr cenv m eenv.someTypeInThisAssembly - let rawTy = mkRawQuotedExprTy g + let rawTy = mkRawQuotedExprTy g let typeSpliceExprs = List.map (GenType cenv.amap m eenv.tyenv >> (mkTypeOfExpr cenv m)) typeSplices let bytesExpr = Expr.Op (TOp.Bytes astSerializedBytes, [], [], m) let deserializeExpr = - let qf = QuotationTranslator.QuotationGenerationScope.ComputeQuotationFormat g - if qf.SupportsDeserializeEx then + let qf = QuotationTranslator.QuotationGenerationScope.ComputeQuotationFormat g + if qf.SupportsDeserializeEx then let referencedTypeDefExprs = List.map (mkILNonGenericBoxedTy >> mkTypeOfExpr cenv m) referencedTypeDefs let referencedTypeDefsExpr = mkArray (g.system_Type_ty, referencedTypeDefExprs, m) let typeSplicesExpr = mkArray (g.system_Type_ty, typeSpliceExprs, m) @@ -4240,24 +4074,24 @@ and MakeNotSupportedExnExpr cenv eenv (argExpr, m) = and GenTraitCall (cenv: cenv) cgbuf eenv (traitInfo: TraitConstraintInfo, argExprs, m) expr sequel = let g = cenv.g let generateWitnesses = ComputeGenerateWitnesses g eenv - let witness = - if generateWitnesses then + let witness = + if generateWitnesses then TryStorageForWitness g eenv traitInfo.TraitKey else None - match witness with - | Some storage -> - + match witness with + | Some storage -> + let ty = GenWitnessTy g traitInfo.TraitKey - let argExprs = if argExprs.Length = 0 then [ mkUnit g m ] else argExprs + let argExprs = if argExprs.Length = 0 then [ mkUnit g m ] else argExprs GenGetStorageAndSequel cenv cgbuf eenv m (ty, GenType cenv.amap m eenv.tyenv ty) storage (Some([], argExprs, m, sequel)) - - | None -> + + | None -> // If witnesses are available, we should now always find trait witnesses in scope assert not generateWitnesses - + let minfoOpt = CommitOperationResult (ConstraintSolver.CodegenWitnessExprForTraitConstraint cenv.tcVal g cenv.amap m traitInfo argExprs) match minfoOpt with | None -> @@ -4301,7 +4135,7 @@ and GenGetValAddr cenv cgbuf eenv (v: ValRef, m) sequel = | 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 *) ) ] + CG.EmitInstrs cgbuf (pop 1) (Push [ILType.Byref ilTy]) [ I_ldarga (uint16 669 (* random value for post-hoc diagnostic analysis on generated tree *) ) ] GenSequel cenv eenv.cloc cgbuf sequel @@ -4538,7 +4372,7 @@ and GenObjectMethod cenv eenvinner (cgbuf: CodeGenBuffer) useMethodImpl tmethod GenGenericParams cenv eenvUnderTypars methTyparsOfOverridingMethod, ilParamsOfOverridingMethod, ilReturnOfOverridingMethod, - MethodBody.IL (lazy ilMethodBody)) + MethodBody.IL ilMethodBody) // fixup attributes to generate a method impl let mdef = if useMethodImpl then fixupMethodImplFlags mdef else mdef let mdef = fixupVirtualSlotFlags mdef @@ -4555,6 +4389,7 @@ and GenObjectExpr cenv cgbuf eenvouter expr (baseType, baseValOpt, basecall, ove let ilCloAllFreeVars = cloinfo.ilCloAllFreeVars let ilCloGenericFormals = cloinfo.cloILGenericParams + assert (isNil cloinfo.localTypeFuncDirectILGenericParams) let ilCloGenericActuals = cloinfo.cloSpec.GenericArgs let ilCloRetTy = cloinfo.ilCloFormalReturnTy let ilCloTypeRef = cloinfo.cloSpec.TypeRef @@ -4605,7 +4440,7 @@ and GenSequenceExpr eenvouter |> AddStorageForLocalVals g (stateVars |> List.map (fun v -> v.Deref, Local(0, false, None))) // Get the free variables. Make a lambda to pretend that the 'nextEnumeratorValRef' is bound (it is an argument to GenerateNext) - let (cloAttribs, cloFreeTyvars, cloWitnessInfos, cloFreeVars, ilCloTypeRef: ILTypeRef, ilCloAllFreeVars, eenvinner) = + let (cloAttribs, _, _, cloFreeTyvars, cloWitnessInfos, cloFreeVars, ilCloTypeRef: ILTypeRef, ilCloAllFreeVars, eenvinner) = GetIlxClosureFreeVars cenv m [] eenvouter [] (mkLambda m nextEnumeratorValRef.Deref (generateNextExpr, g.int32_ty)) let ilCloSeqElemTy = GenType cenv.amap m eenvinner.tyenv seqElemTy @@ -4639,20 +4474,20 @@ and GenSequenceExpr CG.EmitInstr cgbuf (pop ilCloAllFreeVars.Length) (Push [ilCloRetTyInner]) (I_newobj (formalClospec.Constructor, None)) GenSequel cenv eenv.cloc cgbuf Return), m) - mkILNonGenericVirtualMethod("GetFreshEnumerator", ILMemberAccess.Public, [], mkILReturn ilCloEnumeratorTy, MethodBody.IL (lazy mbody)) + mkILNonGenericVirtualMethod("GetFreshEnumerator", ILMemberAccess.Public, [], mkILReturn ilCloEnumeratorTy, MethodBody.IL mbody) |> AddNonUserCompilerGeneratedAttribs g let closeMethod = // Note: We suppress the first sequence point in the body of this method since it is the initial state machine jump let spReq = SPSuppress let ilCode = CodeGenMethodForExpr cenv cgbuf.mgbuf (spReq, [], "Close", eenvinner, 1, closeExpr, discardAndReturnVoid) - mkILNonGenericVirtualMethod("Close", ILMemberAccess.Public, [], mkILReturn ILType.Void, MethodBody.IL (lazy ilCode)) + mkILNonGenericVirtualMethod("Close", ILMemberAccess.Public, [], mkILReturn ILType.Void, MethodBody.IL ilCode) let checkCloseMethod = // Note: We suppress the first sequence point in the body of this method since it is the initial state machine jump let spReq = SPSuppress let ilCode = CodeGenMethodForExpr cenv cgbuf.mgbuf (spReq, [], "get_CheckClose", eenvinner, 1, checkCloseExpr, Return) - mkILNonGenericVirtualMethod("get_CheckClose", ILMemberAccess.Public, [], mkILReturn g.ilg.typ_Bool, MethodBody.IL (lazy ilCode)) + mkILNonGenericVirtualMethod("get_CheckClose", ILMemberAccess.Public, [], mkILReturn g.ilg.typ_Bool, MethodBody.IL ilCode) let generateNextMethod = // Note: We suppress the first sequence point in the body of this method since it is the initial state machine jump @@ -4661,12 +4496,12 @@ and GenSequenceExpr let eenvinner = eenvinner |> AddStorageForLocalVals g [ (nextEnumeratorValRef.Deref, Arg 1) ] let ilParams = [mkILParamNamed("next", ILType.Byref ilCloEnumerableTy)] let ilReturn = mkILReturn g.ilg.typ_Int32 - let ilCode = MethodBody.IL (lazy (CodeGenMethodForExpr cenv cgbuf.mgbuf (spReq, [], "GenerateNext", eenvinner, 2, generateNextExpr, Return))) + let ilCode = MethodBody.IL (CodeGenMethodForExpr cenv cgbuf.mgbuf (spReq, [], "GenerateNext", eenvinner, 2, generateNextExpr, Return)) mkILNonGenericVirtualMethod("GenerateNext", ILMemberAccess.Public, ilParams, ilReturn, ilCode) let lastGeneratedMethod = let ilCode = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPSuppress, [], "get_LastGenerated", eenvinner, 1, exprForValRef m currvref, Return) - mkILNonGenericVirtualMethod("get_LastGenerated", ILMemberAccess.Public, [], mkILReturn ilCloSeqElemTy, MethodBody.IL (lazy ilCode)) + mkILNonGenericVirtualMethod("get_LastGenerated", ILMemberAccess.Public, [], mkILReturn ilCloSeqElemTy, MethodBody.IL ilCode) |> AddNonUserCompilerGeneratedAttribs g let ilCtorBody = @@ -4688,7 +4523,7 @@ and GenSequenceExpr GenDefaultValue cenv cgbuf eenvouter (fv.Type, m) else GenGetLocalVal cenv cgbuf eenvouter m fv None - + CG.EmitInstr cgbuf (pop ilCloAllFreeVars.Length) (Push [ilCloRetTyOuter]) (I_newobj (ilxCloSpec.Constructor, None)) GenSequel cenv eenvouter.cloc cgbuf sequel @@ -4709,7 +4544,7 @@ and GenClosureTypeDefs cenv (tref: ILTypeRef, ilGenParams, attrs, ilCloAllFreeVa let fspec = mkILFieldSpec (cloSpec.GetStaticFieldSpec().FieldRef, cloTy) let ctorSpec = mkILMethSpecForMethRefInTy (cloSpec.Constructor.MethodRef, cloTy, []) let ilCode = mkILMethodBody (true, [], 8, nonBranchingInstrsToCode ([ I_newobj (ctorSpec, None); mkNormalStsfld fspec ]), None) - let cctor = mkILClassCtor (MethodBody.IL (lazy ilCode)) + let cctor = mkILClassCtor (MethodBody.IL ilCode) let ilFieldDef = mkILStaticField(fspec.Name, fspec.FormalType, None, None, ILMemberAccess.Assembly).WithInitOnly(true) (cctor :: mdefs), [ ilFieldDef ] else @@ -4749,69 +4584,78 @@ and GenStaticDelegateClosureTypeDefs cenv (tref: ILTypeRef, ilGenParams, attrs, tdefs |> List.map (fun td -> td.WithAbstract(true) .With(methods= mkILMethodsFromArray (td.Methods.AsArray |> Array.filter (fun m -> not m.IsConstructor)))) -and GenGenericParams cenv eenv tps = +and GenGenericParams cenv eenv tps = tps |> DropErasedTypars |> List.map (GenGenericParam cenv eenv) and GenGenericArgs m (tyenv: TypeReprEnv) tps = tps |> DropErasedTypars |> List.map (fun c -> (mkILTyvarTy tyenv.[c, m])) -/// Generate a local type function contract class and implementation -and GenClosureAsLocalTypeFunction cenv (cgbuf: CodeGenBuffer) eenv isLocalTypeFunc thisVars expr m = - let g = cenv.g - let cloinfo, body, eenvinner = GetIlxClosureInfo cenv m isLocalTypeFunc true thisVars eenv expr - let ilCloTypeRef = cloinfo.cloSpec.TypeRef - let entryPointInfo = thisVars |> List.map (fun v -> (v, BranchCallClosure (cloinfo.cloArityInfo))) - // Now generate the actual closure implementation w.r.t. eenvinner - let directTypars, ilDirectWitnessParams, _directWitnessInfos, eenvinner = - AddDirectTyparWitnessParams cenv eenvinner cloinfo m - - let ilDirectGenericParams = GenGenericParams cenv eenvinner directTypars - - // The type-lambdas are dealt with by the local type function - let ilCloFormalReturnTy, ilCloLambdas = - let rec strip lambdas = - match lambdas with - | Lambdas_forall(_, r) -> strip r - | Lambdas_return returnTy -> returnTy, lambdas - | _ -> failwith "AdjustNamedLocalTypeFuncIlxClosureInfo: local functions can currently only be type functions" - strip cloinfo.ilCloLambdas - - let ilCloBody = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPAlways, entryPointInfo, cloinfo.cloName, eenvinner, 1, body, Return) - let ilCtorBody = mkILMethodBody (true, [], 8, nonBranchingInstrsToCode (mkCallBaseConstructor(g.ilg.typ_Object, [])), None ) - let cloMethods = [ mkILGenericVirtualMethod("DirectInvoke", ILMemberAccess.Assembly, ilDirectGenericParams, ilDirectWitnessParams, mkILReturn ilCloFormalReturnTy, MethodBody.IL(lazy ilCloBody)) ] - - let cloTypeDefs = GenClosureTypeDefs cenv (ilCloTypeRef, cloinfo.cloILGenericParams, [], cloinfo.ilCloAllFreeVars, ilCloLambdas, ilCtorBody, cloMethods, [], g.ilg.typ_Object, [], Some cloinfo.cloSpec) - cloinfo, ilCloTypeRef, cloTypeDefs - -and GenClosureAsFirstClassFunction cenv (cgbuf: CodeGenBuffer) eenv isLocalTypeFunc thisVars m expr = - let g = cenv.g - let cloinfo, body, eenvinner = GetIlxClosureInfo cenv m isLocalTypeFunc true thisVars eenv expr - let entryPointInfo = thisVars |> List.map (fun v -> (v, BranchCallClosure (cloinfo.cloArityInfo))) - let ilCloTypeRef = cloinfo.cloSpec.TypeRef - - let ilCloBody = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPAlways, entryPointInfo, cloinfo.cloName, eenvinner, 1, body, Return) - let cloTypeDefs = GenClosureTypeDefs cenv (ilCloTypeRef, cloinfo.cloILGenericParams, [], cloinfo.ilCloAllFreeVars, cloinfo.ilCloLambdas, ilCloBody, [], [], g.ilg.typ_Object, [], Some cloinfo.cloSpec) - cloinfo, ilCloTypeRef, cloTypeDefs - /// Generate the closure class for a function and GenLambdaClosure cenv (cgbuf: CodeGenBuffer) eenv isLocalTypeFunc thisVars expr = + let g = cenv.g match expr with | Expr.Lambda (_, _, _, _, _, m, _) | Expr.TyLambda (_, _, _, m, _) -> + + let cloinfo, body, eenvinner = GetIlxClosureInfo cenv m isLocalTypeFunc true thisVars eenv expr - let cloinfo, ilCloTypeRef, cloTypeDefs = + let entryPointInfo = thisVars |> List.map (fun v -> (v, BranchCallClosure (cloinfo.cloArityInfo))) + + let ilCloBody = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPAlways, entryPointInfo, cloinfo.cloName, eenvinner, 1, body, Return) + let ilCloTypeRef = cloinfo.cloSpec.TypeRef + let cloTypeDefs = if isLocalTypeFunc then - GenClosureAsLocalTypeFunction cenv cgbuf eenv isLocalTypeFunc thisVars expr m - else - GenClosureAsFirstClassFunction cenv cgbuf eenv isLocalTypeFunc thisVars m expr + // Work out the contract type and generate a class with an abstract method for this type + let (ilContractGenericParams, ilContractMethTyargs, ilContractTySpec: ILTypeSpec, ilContractFormalRetTy) = GenNamedLocalTypeFuncContractInfo cenv eenv m cloinfo + let ilContractTypeRef = ilContractTySpec.TypeRef + let ilContractTy = mkILFormalBoxedTy ilContractTypeRef ilContractGenericParams + let ilContractCtor = mkILNonGenericEmptyCtor None g.ilg.typ_Object + + let ilContractMeths = [ilContractCtor; mkILGenericVirtualMethod("DirectInvoke", ILMemberAccess.Assembly, ilContractMethTyargs, [], mkILReturn ilContractFormalRetTy, MethodBody.Abstract) ] + let ilContractTypeDef = + ILTypeDef(name = ilContractTypeRef.Name, + layout = ILTypeDefLayout.Auto, + attributes = enum 0, + genericParams = ilContractGenericParams, + customAttrs = mkILCustomAttrs [mkCompilationMappingAttr g (int SourceConstructFlags.Closure) ], + fields = emptyILFields, + events= emptyILEvents, + properties = emptyILProperties, + methods= mkILMethods ilContractMeths, + methodImpls= emptyILMethodImpls, + nestedTypes=emptyILTypeDefs, + implements = [], + extends= Some g.ilg.typ_Object, + securityDecls= emptyILSecurityDecls) + + // the contract type is an abstract type and not sealed + let ilContractTypeDef = + ilContractTypeDef + .WithAbstract(true) + .WithAccess(ComputeTypeAccess ilContractTypeRef true) + .WithSerializable(true) + .WithSpecialName(true) + .WithLayout(ILTypeDefLayout.Auto) + .WithInitSemantics(ILTypeInit.BeforeField) + .WithEncoding(ILDefaultPInvokeEncoding.Auto) + + cgbuf.mgbuf.AddTypeDef(ilContractTypeRef, ilContractTypeDef, false, false, None) + + let ilCtorBody = mkILMethodBody (true, [], 8, nonBranchingInstrsToCode (mkCallBaseConstructor(ilContractTy, [])), None ) + let cloMethods = [ mkILGenericVirtualMethod("DirectInvoke", ILMemberAccess.Assembly, cloinfo.localTypeFuncDirectILGenericParams, [], mkILReturn (cloinfo.ilCloFormalReturnTy), MethodBody.IL ilCloBody) ] + let cloTypeDefs = GenClosureTypeDefs cenv (ilCloTypeRef, cloinfo.cloILGenericParams, [], cloinfo.ilCloAllFreeVars, cloinfo.ilCloLambdas, ilCtorBody, cloMethods, [], ilContractTy, [], Some cloinfo.cloSpec) + cloTypeDefs + + else + GenClosureTypeDefs cenv (ilCloTypeRef, cloinfo.cloILGenericParams, [], cloinfo.ilCloAllFreeVars, cloinfo.ilCloLambdas, ilCloBody, [], [], g.ilg.typ_Object, [], Some cloinfo.cloSpec) CountClosure() for cloTypeDef in cloTypeDefs do cgbuf.mgbuf.AddTypeDef(ilCloTypeRef, cloTypeDef, false, false, None) cloinfo, m | _ -> failwith "GenLambda: not a lambda" - + and GenClosureAlloc cenv (cgbuf: CodeGenBuffer) eenv (cloinfo, m) = let g = cenv.g CountClosure() @@ -4887,12 +4731,27 @@ and GetIlxClosureFreeVars cenv m (thisVars: ValRef list) eenvouter takenNames ex cloFreeVarResults.FreeLocals |> Zset.elements |> List.filter (fun fv -> - (thisVars |> List.forall (fun v -> not (valRefEq g (mkLocalValRef fv) v))) && + (thisVars |> List.forall (fun v -> not (valRefEq g (mkLocalValRef fv) v))) && (match StorageForVal cenv.g m fv eenvouter with | (StaticField _ | StaticProperty _ | Method _ | Null) -> false | _ -> true)) - let cloFreeTyvars = cloFreeVarResults.FreeTyvars.FreeTypars |> Zset.elements + // The general shape is: + // {LAM . expr }[free-typars]: overall-type[contract-typars] + // Then + // internal-typars = free-typars - contract-typars + // + // In other words, the free type variables get divided into two sets + // -- "contract" ones, which are part of the return type. We separate these to enable use to + // bake our own function base contracts for local type functions + // + // -- "internal" ones, which get used internally in the implementation + let cloContractFreeTyvarSet = (freeInType CollectTypars (tyOfExpr g expr)).FreeTypars + + let cloInternalFreeTyvars = Zset.diff cloFreeVarResults.FreeTyvars.FreeTypars cloContractFreeTyvarSet |> Zset.elements + let cloContractFreeTyvars = cloContractFreeTyvarSet |> Zset.elements + + let cloFreeTyvars = cloContractFreeTyvars @ cloInternalFreeTyvars let cloAttribs = [] @@ -4907,26 +4766,38 @@ and GetIlxClosureFreeVars cenv m (thisVars: ValRef list) eenvouter takenNames ex // Build the environment that is active inside the closure itself let eenvinner = eenvinner |> AddStorageForLocalVals g (thisVars |> List.map (fun v -> (v.Deref, Arg 0))) - // Work out if the closure captures any witnesses. - let cloWitnessInfos = + // Work out if the closure captures any witnesses. + let cloWitnessInfos = let generateWitnesses = ComputeGenerateWitnesses g eenvinner - if generateWitnesses then - // The 0 here represents that a closure doesn't reside within a generic class - there are no "enclosing class type parameters" to lop off. + if generateWitnesses then + // The 0 here represents that a closure doesn't reside within a generic class - there are no "enclosing class type parameters" to lop off. GetTraitWitnessInfosOfTypars g 0 cloFreeTyvars else [] - // Captured witnesses get captured in free variable fields let ilCloWitnessFreeVars, ilCloWitnessStorage = - FreeVarStorageForWitnessInfos cenv eenvinner takenNames ilCloTyInner m cloWitnessInfos + let names = + cloWitnessInfos + |> List.map (fun w -> String.uncapitalize w.MemberName) + |> ChooseFreeVarNames takenNames + (cloWitnessInfos, names) + ||> List.map2 (fun w nm -> + let ty = GenWitnessTy cenv.g w + let ilTy = GenType cenv.amap m eenvinner.tyenv ty + let ilFv = mkILFreeVar (nm, true, ilTy) + let storage = + let ilField = mkILFieldSpecInTy (ilCloTyInner, ilFv.fvName, ilFv.fvType) + Env(ilCloTyInner, ilField, None) + ilFv, (w, storage)) + |> List.unzip // Allocate storage in the environment for the witnesses let eenvinner = eenvinner |> AddStorageForLocalWitnesses ilCloWitnessStorage let ilCloFreeVars, ilCloFreeVarStorage = let names = - cloFreeVars - |> List.map nameOfVal + cloFreeVars + |> List.map nameOfVal |> ChooseFreeVarNames takenNames (cloFreeVars, names) @@ -4943,12 +4814,12 @@ and GetIlxClosureFreeVars cenv m (thisVars: ValRef list) eenvouter takenNames ex ilFv, (fv, storage)) |> List.unzip - let ilCloAllFreeVars = Array.ofList (ilCloWitnessFreeVars @ ilCloFreeVars) + let ilCloAllFreeVars = Array.ofList (ilCloWitnessFreeVars @ ilCloFreeVars) let eenvinner = eenvinner |> AddStorageForLocalVals g ilCloFreeVarStorage // Return a various results - (cloAttribs, cloFreeTyvars, cloWitnessInfos, cloFreeVars, ilCloTypeRef, ilCloAllFreeVars, eenvinner) + (cloAttribs, cloInternalFreeTyvars, cloContractFreeTyvars, cloFreeTyvars, cloWitnessInfos, cloFreeVars, ilCloTypeRef, ilCloAllFreeVars, eenvinner) and GetIlxClosureInfo cenv m isLocalTypeFunc canUseStaticField thisVars eenvouter expr = let g = cenv.g @@ -4977,7 +4848,7 @@ and GetIlxClosureInfo cenv m isLocalTypeFunc canUseStaticField thisVars eenvoute let takenNames = vs |> List.map (fun v -> v.CompiledName g.CompilerGlobalState) // Get the free variables and the information about the closure, add the free variables to the environment - let (cloAttribs, cloFreeTyvars, cloWitnessInfos, cloFreeVars, ilCloTypeRef, ilCloAllFreeVars, eenvinner) = + let (cloAttribs, cloInternalFreeTyvars, cloContractFreeTyvars, cloFreeTyvars, cloWitnessInfos, cloFreeVars, ilCloTypeRef, ilCloAllFreeVars, eenvinner) = GetIlxClosureFreeVars cenv m thisVars eenvouter takenNames expr // Put the type and value arguments into the environment @@ -5006,13 +4877,65 @@ and GetIlxClosureInfo cenv m isLocalTypeFunc canUseStaticField thisVars eenvoute let narginfo = vs |> List.map (fun _ -> 1) // Generate the ILX view of the lambdas - let ilCloReturnTy = GenType cenv.amap m eenvinner.tyenv returnTy + let ilReturnTy = GenType cenv.amap m eenvinner.tyenv returnTy - /// Compute the contract if it is a local type function - let ilCloGenericFormals = GenGenericParams cenv eenvinner cloFreeTyvars - let ilCloGenericActuals = GenGenericArgs m eenvouter.tyenv cloFreeTyvars + // The general shape is: + // {LAM . expr }[free-typars]: overall-type[contract-typars] + // Then + // internal-typars = free-typars - contract-typars + // + // For a local type function closure, this becomes + // class Contract { + // abstract DirectInvoke : overall-type + // } + // + // class ContractImplementation : Contract { + // override DirectInvoke : overall-type { expr } + // } + // + // For a non-local type function closure, this becomes + // + // class FunctionImplementation : FSharpTypeFunc { + // override Specialize : overall-type { expr } + // } + // + // For a normal function closure, is empty, and this becomes + // + // class FunctionImplementation : overall-type { + // override Invoke(..) { expr } + // } + + // In other words, the free type variables get divided into two sets + // -- "contract" ones, which are part of the return type. We separate these to enable use to + // bake our own function base contracts for local type functions + // + // -- "internal" ones, which get used internally in the implementation + // + // There are also "direct" and "indirect" type variables, which are part of the lambdas of the type function. + // Direct type variables are only used for local type functions, and indirect type variables only used for first class + // function values. - let useStaticField = canUseStaticField && (ilCloAllFreeVars.Length = 0) + /// Compute the contract if it is a local type function + let ilContractGenericParams = GenGenericParams cenv eenvinner cloContractFreeTyvars + let ilContractGenericActuals = GenGenericArgs m eenvouter.tyenv cloContractFreeTyvars + let ilInternalGenericParams = GenGenericParams cenv eenvinner cloInternalFreeTyvars + let ilInternalGenericActuals = GenGenericArgs m eenvouter.tyenv cloInternalFreeTyvars + + let ilCloGenericFormals = ilContractGenericParams @ ilInternalGenericParams + let ilCloGenericActuals = ilContractGenericActuals @ ilInternalGenericActuals + + let ilDirectGenericParams, ilCloReturnTy, ilCloLambdas = + if isLocalTypeFunc then + let rec strip lambdas acc = + match lambdas with + | Lambdas_forall(gp, r) -> strip r (gp :: acc) + | Lambdas_return returnTy -> List.rev acc, returnTy, lambdas + | _ -> failwith "AdjustNamedLocalTypeFuncIlxClosureInfo: local functions can currently only be type functions" + strip ilCloLambdas [] + else + [], ilReturnTy, ilCloLambdas + + let useStaticField = canUseStaticField && (ilCloAllFreeVars.Length = 0) let ilxCloSpec = IlxClosureSpec.Create(IlxClosureRef(ilCloTypeRef, ilCloLambdas, ilCloAllFreeVars), ilCloGenericActuals, useStaticField) @@ -5028,9 +4951,37 @@ and GetIlxClosureInfo cenv m isLocalTypeFunc canUseStaticField thisVars eenvoute cloFreeVars=cloFreeVars cloFreeTyvars=cloFreeTyvars cloWitnessInfos = cloWitnessInfos - cloAttribs=cloAttribs } + cloAttribs=cloAttribs + localTypeFuncContractFreeTypars = cloContractFreeTyvars + localTypeFuncInternalFreeTypars = cloInternalFreeTyvars + localTypeFuncILGenericArgs = ilContractGenericActuals + localTypeFuncDirectILGenericParams = ilDirectGenericParams } cloinfo, body, eenvinner +//-------------------------------------------------------------------------- +// Named local type functions +//-------------------------------------------------------------------------- + +and IsNamedLocalTypeFuncVal g (v: Val) expr = + not v.IsCompiledAsTopLevel && + IsGenericValWithGenericConstraints g v && + (match stripExpr expr with Expr.TyLambda _ -> true | _ -> false) + +/// Generate the information relevant to the contract portion of a named local type function +and GenNamedLocalTypeFuncContractInfo cenv eenv m cloinfo = + let ilCloTypeRef = cloinfo.cloSpec.TypeRef + let ilContractTypeRef = ILTypeRef.Create(scope=ilCloTypeRef.Scope, enclosing=ilCloTypeRef.Enclosing, name=ilCloTypeRef.Name + "$contract") + let eenvForContract = EnvForTypars cloinfo.localTypeFuncContractFreeTypars eenv + let ilContractGenericParams = GenGenericParams cenv eenv cloinfo.localTypeFuncContractFreeTypars + let tvs, contractRetTy = + match cloinfo.cloExpr with + | Expr.TyLambda (_, tvs, _, _, bty) -> tvs, bty + | e -> [], tyOfExpr cenv.g e + let eenvForContract = AddTyparsToEnv tvs eenvForContract + let ilContractMethTyargs = GenGenericParams cenv eenvForContract tvs + let ilContractFormalRetTy = GenType cenv.amap m eenvForContract.tyenv contractRetTy + ilContractGenericParams, ilContractMethTyargs, mkILTySpec(ilContractTypeRef, cloinfo.localTypeFuncILGenericArgs), ilContractFormalRetTy + /// Generate a new delegate construction including a closure class if necessary. This is a lot like generating function closures /// and object expression closures, and most of the code is shared. and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod((TSlotSig(_, delegateTy, _, _, _, _) as slotsig), _attribs, methTyparsOfOverridingMethod, tmvs, body, _), m) sequel = @@ -5059,7 +5010,7 @@ and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod((TSlotSig(_, deleg // Work out the free type variables for the morphing thunk let takenNames = List.map nameOfVal tmvs - let (cloAttribs, cloFreeTyvars, cloWitnessInfos, cloFreeVars, ilDelegeeTypeRef, ilCloAllFreeVars, eenvinner) = + let (cloAttribs, _, _, cloFreeTyvars, cloWitnessInfos, cloFreeVars, ilDelegeeTypeRef, ilCloAllFreeVars, eenvinner) = GetIlxClosureFreeVars cenv m [] eenvouter takenNames expr let ilDelegeeGenericParams = GenGenericParams cenv eenvinner cloFreeTyvars @@ -5071,16 +5022,16 @@ and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod((TSlotSig(_, deleg // Create a new closure class with a single "delegee" method that implements the delegate. let delegeeMethName = "Invoke" let ilDelegeeTyInner = mkILBoxedTy ilDelegeeTypeRef ilDelegeeGenericActualsInner - + let envForDelegeeUnderTypars = AddTyparsToEnv methTyparsOfOverridingMethod eenvinner - + let numthis = if useStaticClosure then 0 else 1 let tmvs, body = BindUnitVars g (tmvs, List.replicate (List.concat slotsig.FormalParams).Length ValReprInfo.unnamedTopArg1, body) - + // The slot sig contains a formal instantiation. When creating delegates we're only // interested in the actual instantiation since we don't have to emit a method impl. let ilDelegeeParams, ilDelegeeRet = GenActualSlotsig m cenv envForDelegeeUnderTypars slotsig methTyparsOfOverridingMethod tmvs - + let envForDelegeeMeth = AddStorageForLocalVals g (List.mapi (fun i v -> (v, Arg (i+numthis))) tmvs) envForDelegeeUnderTypars let ilMethodBody = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPAlways, [], delegeeMethName, envForDelegeeMeth, 1, body, (if slotSigHasVoidReturnTy slotsig then discardAndReturnVoid else Return)) let delegeeInvokeMeth = @@ -5089,13 +5040,13 @@ and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod((TSlotSig(_, deleg ILMemberAccess.Assembly, ilDelegeeParams, ilDelegeeRet, - MethodBody.IL(lazy ilMethodBody)) + MethodBody.IL ilMethodBody) let delegeeCtorMeth = mkILSimpleStorageCtor(None, Some g.ilg.typ_Object.TypeSpec, ilDelegeeTyInner, [], [], ILMemberAccess.Assembly) let ilCtorBody = delegeeCtorMeth.MethodBody - + let ilCloLambdas = Lambdas_return ilCtxtDelTy let ilAttribs = GenAttrs cenv eenvinner cloAttribs - let cloTypeDefs = + let cloTypeDefs = (if useStaticClosure then GenStaticDelegateClosureTypeDefs else GenClosureTypeDefs) cenv (ilDelegeeTypeRef, ilDelegeeGenericParams, ilAttribs, ilCloAllFreeVars, ilCloLambdas, ilCtorBody, [delegeeInvokeMeth], [], g.ilg.typ_Object, [], None) for cloTypeDef in cloTypeDefs do @@ -5135,11 +5086,11 @@ and GenStaticOptimization cenv cgbuf eenv (constraints, e2, e3, _m) sequel = // This means 'when ^T : ^T' is discarded if not resolved. // // This doesn't apply when witnesses are available. In that case, "when ^T : ^T" is resolved as 'Yes', - // this is because all the uses of "when ^T : ^T" in FSharp.Core (e.g. for are for deciding between the + // this is because all the uses of "when ^T : ^T" in FSharp.Core (e.g. for are for deciding between the // witness-based implementation and the legacy dynamic implementation, e.g. // - // let inline ( * ) (x: ^T) (y: ^U) : ^V = - // MultiplyDynamic<(^T),(^U),(^V)> x y + // let inline ( * ) (x: ^T) (y: ^U) : ^V = + // MultiplyDynamic<(^T),(^U),(^V)> x y // ... // when ^T : ^T = ((^T or ^U): (static member (*) : ^T * ^U -> ^V) (x,y)) // @@ -5147,9 +5098,9 @@ and GenStaticOptimization cenv cgbuf eenv (constraints, e2, e3, _m) sequel = let e = let generateWitnesses = ComputeGenerateWitnesses cenv.g eenv - if DecideStaticOptimizations cenv.g constraints generateWitnesses = StaticOptimizationAnswer.Yes then + if DecideStaticOptimizations cenv.g constraints generateWitnesses = StaticOptimizationAnswer.Yes then e2 - else + else e3 GenExpr cenv cgbuf eenv SPSuppress e sequel @@ -5198,14 +5149,10 @@ and GenJoinPoint cenv cgbuf pos eenv ty m sequel = // Accumulate the decision graph as we go and GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequel contf = - let targetCounts = accTargetsOfDecisionTree tree [] |> List.countBy id |> Dictionary.ofList - let targetNext = ref 0 // used to make sure we generate the targets in-order, postponing if necessary - GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv tree targets (targetNext, targetCounts) repeatSP (IntMap.empty()) sequel (fun targetInfos -> - let sortedTargetInfos = - targetInfos + GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv tree targets repeatSP (IntMap.empty()) sequel (fun targetInfos -> + let sortedTargetInfos = + targetInfos |> Seq.sortBy (fun (KeyValue(targetIdx, _)) -> targetIdx) - |> Seq.filter (fun (KeyValue(_, (_, isTargetPostponed))) -> isTargetPostponed) - |> Seq.map (fun (KeyValue(_, (targetInfo, _))) -> targetInfo) |> List.ofSeq GenPostponedDecisionTreeTargets cenv cgbuf sortedTargetInfos stackAtTargets sequel contf ) @@ -5213,21 +5160,29 @@ and GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeat and GenPostponedDecisionTreeTargets cenv cgbuf targetInfos stackAtTargets sequel contf = match targetInfos with | [] -> contf Fake - | targetInfo :: rest -> - let eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget = GenDecisionTreeTarget cenv cgbuf stackAtTargets targetInfo sequel - GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget true (fun Fake -> + | (KeyValue(_, (targetInfo, isTargetPostponed))) :: rest -> + if isTargetPostponed then + let eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget = GenDecisionTreeTarget cenv cgbuf stackAtTargets targetInfo sequel + GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget true (fun Fake -> + GenPostponedDecisionTreeTargets cenv cgbuf rest stackAtTargets sequel contf + ) + else GenPostponedDecisionTreeTargets cenv cgbuf rest stackAtTargets sequel contf - ) + +and TryFindTargetInfo targetInfos n = + match IntMap.tryFind n targetInfos with + | Some (targetInfo, _) -> Some targetInfo + | None -> None /// When inplabOpt is None, we are assuming a branch or fallthrough to the current code location /// /// When inplabOpt is "Some inplab", we are assuming an existing branch to "inplab" and can optionally /// set inplab to point to another location if no codegen is required. -and GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree targets targetCounts repeatSP targetInfos sequel (contf: Zmap<_,_> -> FakeUnit) = +and GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree targets repeatSP targetInfos sequel (contf: Zmap<_,_> -> FakeUnit) = CG.SetStack cgbuf stackAtTargets // Set the expected initial stack. match tree with | TDBind(bind, rest) -> - cgbuf.SetMarkToHereIfNecessary inplabOpt + 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 = GenDebugPointForBind cenv cgbuf bind @@ -5236,10 +5191,10 @@ and GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree // we effectively lose an EndLocalScope for all dtrees that go to the same target // So we just pretend that the variable goes out of scope here. CG.SetMarkToHere cgbuf endScope - GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv rest targets targetCounts repeatSP targetInfos sequel contf + GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv rest targets repeatSP targetInfos sequel contf | TDSuccess(es, targetIdx) -> - let targetInfos, genTargetInfoOpt = GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets targetCounts repeatSP targetInfos sequel + let targetInfos, genTargetInfoOpt = GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets repeatSP targetInfos sequel match genTargetInfoOpt with | Some (eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget) -> GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget true (fun Fake -> contf targetInfos) @@ -5247,37 +5202,29 @@ and GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree contf targetInfos | TDSwitch(e, cases, dflt, m) -> - GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases dflt m targets targetCounts repeatSP targetInfos sequel contf + GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases dflt m targets repeatSP targetInfos sequel contf and GetTarget (targets:_[]) n = if n >= targets.Length then failwith "GetTarget: target not found in decision tree" targets.[n] -/// Generate a success node of a decision tree, binding the variables and going to the target -/// If inplabOpt is present, this label must get set to the first logical place to execute. -/// For example, if no variables get bound this can just be set to jump straight to the target. -and GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets (targetNext: int ref, targetCounts: Dictionary) repeatSP targetInfos sequel = +and GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets repeatSP targetInfos sequel = let (TTarget(vs, successExpr, spTarget)) = GetTarget targets targetIdx - match IntMap.tryFind targetIdx targetInfos with - | Some (targetInfo, isTargetPostponed) -> - - let (targetMarkBeforeBinds, targetMarkAfterBinds: Mark, eenvAtTarget, _, _, _, _, _, _, _) = targetInfo - - // We have encountered this target before. See if we should generate it now - let targetCount = targetCounts.[targetIdx] - let generateTargetNow = isTargetPostponed && cenv.opts.localOptimizationsAreOn && targetCount = 1 && targetNext.Value = targetIdx - targetCounts.[targetIdx] <- targetCount - 1 + match TryFindTargetInfo targetInfos targetIdx with + | Some (_, targetMarkAfterBinds: Mark, eenvAtTarget, _, _, _, _, _, _, _) -> - // If not binding anything we can go directly to the targetMarkBeforeBinds point + // If not binding anything we can go directly to the targetMarkAfterBinds point // This is useful to avoid lots of branches e.g. in match A | B | C -> e // In this case each case will just go straight to "e" if isNil vs then - cgbuf.SetMarkOrEmitBranchIfNecessary (inplabOpt, targetMarkBeforeBinds) + match inplabOpt with + | None -> CG.EmitInstr cgbuf (pop 0) Push0 (I_br targetMarkAfterBinds.CodeLabel) + | Some inplab -> CG.SetMark cgbuf inplab targetMarkAfterBinds else - cgbuf.SetMarkToHereIfNecessary inplabOpt + match inplabOpt with None -> () | Some inplab -> CG.SetMarkToHere cgbuf inplab repeatSP() - (vs, es) ||> List.iter2 (fun v e -> + (vs, es) ||> List.iter2 (fun v e -> // Emit the expression GenBindingRhs cenv cgbuf eenv SPSuppress v e) @@ -5287,50 +5234,27 @@ and GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx GenStoreVal cenv cgbuf eenvAtTarget v.Range v) CG.EmitInstr cgbuf (pop 0) Push0 (I_br targetMarkAfterBinds.CodeLabel) - - let genTargetInfoOpt = - if generateTargetNow then - incr targetNext // generate the targets in-order only - Some(GenDecisionTreeTarget cenv cgbuf stackAtTargets targetInfo sequel) - else - None - // Update the targetInfos - let isTargetStillPostponed = isTargetPostponed && not generateTargetNow - let targetInfos = IntMap.add targetIdx (targetInfo, isTargetStillPostponed) targetInfos - targetInfos, genTargetInfoOpt + targetInfos, None | None -> - // We have not encountered this target before. Set up the generation of the target, even if we're - // going to postpone it + match inplabOpt with None -> () | Some inplab -> CG.SetMarkToHere cgbuf inplab let targetMarkBeforeBinds = CG.GenerateDelayMark cgbuf "targetBeforeBinds" let targetMarkAfterBinds = CG.GenerateDelayMark cgbuf "targetAfterBinds" let startScope, endScope as scopeMarks = StartDelayedLocalScope "targetBinds" cgbuf let binds = mkInvisibleBinds vs es let eenvAtTarget = AllocStorageForBinds cenv cgbuf scopeMarks eenv binds let targetInfo = (targetMarkBeforeBinds, targetMarkAfterBinds, eenvAtTarget, successExpr, spTarget, repeatSP, vs, binds, startScope, endScope) - - let targetCount = targetCounts.[targetIdx] - - // In debug mode, postpone all decision tree targets to after the switching. - // In release mode, if a target is the target of multiple incoming success nodes, postpone it to avoid - // making any backward branches - let generateTargetNow = cenv.opts.localOptimizationsAreOn && targetCount = 1 && targetNext.Value = targetIdx - targetCounts.[targetIdx] <- targetCount - 1 - - let genTargetInfoOpt = - if generateTargetNow then - // Here we are generating the target immediately - incr targetNext // generate the targets in-order only - cgbuf.SetMarkToHereIfNecessary inplabOpt - Some(GenDecisionTreeTarget cenv cgbuf stackAtTargets targetInfo sequel) + + // In debug mode push all decision tree targets to after the switching + let isTargetPostponed, genTargetInfoOpt = + if cenv.opts.localOptimizationsAreOn then + false, Some(GenDecisionTreeTarget cenv cgbuf stackAtTargets targetInfo sequel) else - // Here we are postponing the generation of the target. - cgbuf.SetMarkOrEmitBranchIfNecessary (inplabOpt, targetMarkBeforeBinds) - None + CG.EmitInstr cgbuf (pop 0) Push0 (I_br targetMarkBeforeBinds.CodeLabel) + true, None - let isTargetPostponed = not generateTargetNow let targetInfos = IntMap.add targetIdx (targetInfo, isTargetPostponed) targetInfos targetInfos, genTargetInfoOpt @@ -5357,17 +5281,17 @@ and GenDecisionTreeTarget cenv cgbuf stackAtTargets (targetMarkBeforeBinds, targ CG.SetStack cgbuf stackAtTargets (eenvAtTarget, spExpr, successExpr, (EndLocalScope(sequel, endScope))) -and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defaultTargetOpt switchm targets targetCounts repeatSP targetInfos sequel contf = +and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defaultTargetOpt switchm targets repeatSP targetInfos sequel contf = let g = cenv.g let m = e.Range - cgbuf.SetMarkToHereIfNecessary inplabOpt + match inplabOpt with None -> () | Some inplab -> CG.SetMarkToHere cgbuf inplab repeatSP() match cases with // optimize a test against a boolean value, i.e. the all-important if-then-else | TCase(DecisionTreeTest.Const(Const.Bool b), successTree) :: _ -> let failureTree = (match defaultTargetOpt with None -> cases.Tail.Head.CaseTree | Some d -> d) - GenDecisionTreeTest cenv eenv.cloc cgbuf stackAtTargets e None eenv (if b then successTree else failureTree) (if b then failureTree else successTree) targets targetCounts repeatSP targetInfos sequel contf + GenDecisionTreeTest cenv eenv.cloc cgbuf stackAtTargets e None eenv (if b then successTree else failureTree) (if b then failureTree else successTree) targets repeatSP targetInfos sequel contf // // Remove a single test for a union case . Union case tests are always exa //| [ TCase(DecisionTreeTest.UnionCase _, successTree) ] when (defaultTargetOpt.IsNone) -> @@ -5384,8 +5308,7 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau let cuspec = GenUnionSpec cenv.amap m eenv.tyenv c.TyconRef tyargs let idx = c.Index let avoidHelpers = entityRefInThisAssembly g.compilingFslib c.TyconRef - let tester = (Some (pop 1, Push [g.ilg.typ_Bool], Choice1Of2 (avoidHelpers, cuspec, idx))) - GenDecisionTreeTest cenv eenv.cloc cgbuf stackAtTargets e tester eenv successTree failureTree targets targetCounts repeatSP targetInfos sequel contf + GenDecisionTreeTest cenv eenv.cloc cgbuf stackAtTargets e (Some (pop 1, Push [g.ilg.typ_Bool], Choice1Of2 (avoidHelpers, cuspec, idx))) eenv successTree failureTree targets repeatSP targetInfos sequel contf | _ -> let caseLabels = List.map (fun _ -> CG.GenerateDelayMark cgbuf "switch_case") cases @@ -5416,8 +5339,8 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau BI_brtrue | _ -> failwith "internal error: GenDecisionTreeSwitch" CG.EmitInstr cgbuf (pop 1) Push0 (I_brcmp (bi, (List.head caseLabels).CodeLabel)) - GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets targetCounts repeatSP targetInfos sequel caseLabels cases contf - + GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets repeatSP targetInfos sequel caseLabels cases contf + | DecisionTreeTest.ActivePatternCase _ -> error(InternalError("internal error in codegen: DecisionTreeTest.ActivePatternCase", switchm)) | DecisionTreeTest.UnionCase (hdc, tyargs) -> GenExpr cenv cgbuf eenv SPSuppress e Continue @@ -5428,21 +5351,21 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau match case with | TCase(DecisionTreeTest.UnionCase (c, _), _) -> (c.Index, label.CodeLabel) | _ -> failwith "error: mixed constructor/const test?") - + let avoidHelpers = entityRefInThisAssembly g.compilingFslib hdc.TyconRef EraseUnions.emitDataSwitch g.ilg (UnionCodeGen cgbuf) (avoidHelpers, cuspec, dests) CG.EmitInstrs cgbuf (pop 1) Push0 [ ] // push/pop to match the line above - GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets targetCounts repeatSP targetInfos sequel caseLabels cases contf - + GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets repeatSP targetInfos sequel caseLabels cases contf + | DecisionTreeTest.Const c -> GenExpr cenv cgbuf eenv SPSuppress e Continue match c with | Const.Bool _ -> failwith "should have been done earlier" - | Const.SByte _ - | Const.Int16 _ - | Const.Int32 _ - | Const.Byte _ - | Const.UInt16 _ + | Const.SByte _ + | Const.Int16 _ + | Const.Int32 _ + | Const.Byte _ + | Const.UInt16 _ | Const.UInt32 _ | Const.Char _ -> if List.length cases <> List.length caseLabels then failwith "internal error: " @@ -5475,22 +5398,22 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau CG.EmitInstr cgbuf (pop 1) Push0 (I_switch destinationLabels) else error(InternalError("non-dense integer matches not implemented in codegen - these should have been removed by the pattern match compiler", switchm)) - GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets targetCounts repeatSP targetInfos sequel caseLabels cases contf + GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets repeatSP targetInfos sequel caseLabels cases contf | _ -> error(InternalError("these matches should never be needed", switchm)) | DecisionTreeTest.Error m -> error(InternalError("Trying to compile error recovery branch", m)) -and GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets targetCounts repeatSP targetInfos sequel caseLabels cases (contf: Zmap<_,_> -> FakeUnit) = +and GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets repeatSP targetInfos sequel caseLabels cases (contf: Zmap<_,_> -> FakeUnit) = match defaultTargetOpt with - | Some defaultTarget -> - GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv defaultTarget targets targetCounts repeatSP targetInfos sequel (fun targetInfos -> - GenDecisionTreeCases cenv cgbuf stackAtTargets eenv None targets targetCounts repeatSP targetInfos sequel caseLabels cases contf + | Some defaultTarget -> + GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv defaultTarget targets repeatSP targetInfos sequel (fun targetInfos -> + GenDecisionTreeCases cenv cgbuf stackAtTargets eenv None targets repeatSP targetInfos sequel caseLabels cases contf ) | None -> match caseLabels, cases with | caseLabel :: caseLabelsTail, (TCase(_, caseTree)) :: casesTail -> - GenDecisionTreeAndTargetsInner cenv cgbuf (Some caseLabel) stackAtTargets eenv caseTree targets targetCounts repeatSP targetInfos sequel (fun targetInfos -> - GenDecisionTreeCases cenv cgbuf stackAtTargets eenv None targets targetCounts repeatSP targetInfos sequel caseLabelsTail casesTail contf + GenDecisionTreeAndTargetsInner cenv cgbuf (Some caseLabel) stackAtTargets eenv caseTree targets repeatSP targetInfos sequel (fun targetInfos -> + GenDecisionTreeCases cenv cgbuf stackAtTargets eenv None targets repeatSP targetInfos sequel caseLabelsTail casesTail contf ) | _ -> contf targetInfos @@ -5498,7 +5421,7 @@ and GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets // Used for the peephole optimization below and (|BoolExpr|_|) = function Expr.Const (Const.Bool b1, _, _) -> Some b1 | _ -> None -and GenDecisionTreeTest cenv cloc cgbuf stackAtTargets e tester eenv successTree failureTree targets targetCounts repeatSP targetInfos sequel contf = +and GenDecisionTreeTest cenv cloc cgbuf stackAtTargets e tester eenv successTree failureTree targets repeatSP targetInfos sequel contf = let g = cenv.g match successTree, failureTree with @@ -5530,55 +5453,26 @@ and GenDecisionTreeTest cenv cloc cgbuf stackAtTargets e tester eenv successTree | _ -> failwith "internal error: GenDecisionTreeTest during bool elim" | _ -> + let failure = CG.GenerateDelayMark cgbuf "testFailure" match tester with - | None _ -> - // Check if there is more logic in the decision tree for the failure branch - // (and no more logic for the success branch), for example - // when emitting the first part of 'expr1 || expr2'. - // - // If so, emit the failure logic, then came back and do the success target, then - // do any postponed failure target. - match successTree, failureTree with - | TDSuccess _, (TDBind _ | TDSwitch _) -> - - // OK, there is more logic in the decision tree on the failure branch - let success = CG.GenerateDelayMark cgbuf "testSuccess" - GenExpr cenv cgbuf eenv SPSuppress e (CmpThenBrOrContinue(pop 1, [ I_brcmp (BI_brtrue, success.CodeLabel) ])) - GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv failureTree targets targetCounts repeatSP targetInfos sequel (fun targetInfos -> - GenDecisionTreeAndTargetsInner cenv cgbuf (Some success) stackAtTargets eenv successTree targets targetCounts repeatSP targetInfos sequel contf - ) - - | _ -> - - // Either we're not yet done with the success branch, or there is no more logic - // in the decision tree on the failure branch. Continue doing the success branch - // logic first. - let failure = CG.GenerateDelayMark cgbuf "testFailure" - GenExpr cenv cgbuf eenv SPSuppress e (CmpThenBrOrContinue(pop 1, [ I_brcmp (BI_brfalse, failure.CodeLabel) ])) - GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv successTree targets targetCounts repeatSP targetInfos sequel (fun targetInfos -> - GenDecisionTreeAndTargetsInner cenv cgbuf (Some failure) stackAtTargets eenv failureTree targets targetCounts repeatSP targetInfos sequel contf - ) + | None -> + // generate the expression, then test it for "false" + GenExpr cenv cgbuf eenv SPSuppress e (CmpThenBrOrContinue(pop 1, [ I_brcmp (BI_brfalse, failure.CodeLabel) ])) // Turn 'isdata' tests that branch into EI_brisdata tests | Some (_, _, Choice1Of2 (avoidHelpers, cuspec, idx)) -> - let failure = CG.GenerateDelayMark cgbuf "testFailure" GenExpr cenv cgbuf eenv SPSuppress e (CmpThenBrOrContinue(pop 1, EraseUnions.mkBrIsData g.ilg false (avoidHelpers, cuspec, idx, failure.CodeLabel))) - GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv successTree targets targetCounts repeatSP targetInfos sequel (fun targetInfos -> - GenDecisionTreeAndTargetsInner cenv cgbuf (Some failure) stackAtTargets eenv failureTree targets targetCounts repeatSP targetInfos sequel contf - ) - | Some (pops, pushes, i) -> - let failure = CG.GenerateDelayMark cgbuf "testFailure" GenExpr cenv cgbuf eenv SPSuppress e Continue match i with | Choice1Of2 (avoidHelpers, cuspec, idx) -> CG.EmitInstrs cgbuf pops pushes (EraseUnions.mkIsData g.ilg (avoidHelpers, cuspec, idx)) | Choice2Of2 i -> CG.EmitInstr cgbuf pops pushes i CG.EmitInstr cgbuf (pop 1) Push0 (I_brcmp (BI_brfalse, failure.CodeLabel)) - GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv successTree targets targetCounts repeatSP targetInfos sequel (fun targetInfos -> - GenDecisionTreeAndTargetsInner cenv cgbuf (Some failure) stackAtTargets eenv failureTree targets targetCounts repeatSP targetInfos sequel contf - ) + GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv successTree targets repeatSP targetInfos sequel (fun targetInfos -> + GenDecisionTreeAndTargetsInner cenv cgbuf (Some failure) stackAtTargets eenv failureTree targets repeatSP targetInfos sequel contf + ) /// Generate fixups for letrec bindings and GenLetRecFixup cenv cgbuf eenv (ilxCloSpec: IlxClosureSpec, e, ilField: ILFieldSpec, e2, _m) = @@ -5613,7 +5507,7 @@ and GenLetRecBindings cenv (cgbuf: CodeGenBuffer) eenv (allBinds: Bindings, m) = match StorageForVal cenv.g m fv eenvclo with | Env (_, ilField, _) -> fixups := (boundv, fv, (fun () -> GenLetRecFixup cenv cgbuf eenv (clo.cloSpec, access, ilField, exprForVal m fv, m))) :: !fixups | _ -> error (InternalError("GenLetRec: " + fv.LogicalName + " was not in the environment", m)) ) - + | Expr.Val (vref, _, _) -> let fv = vref.Deref let needsFixup = Zset.contains fv forwardReferenceSet @@ -5687,8 +5581,7 @@ and GenBindingAfterDebugPoint cenv cgbuf eenv sp (TBind(vspec, rhsExpr, _)) star | Some _, Some e -> cgbuf.mgbuf.AddReflectedDefinition(vspec, e) | _ -> () - let eenv = { eenv with letBoundVars = (mkLocalValRef vspec) :: eenv.letBoundVars; - initLocals = eenv.initLocals && (match vspec.ApparentEnclosingEntity with Parent ref -> not (HasFSharpAttribute g g.attrib_SkipLocalsInitAttribute ref.Attribs) | _ -> true) } + let eenv = {eenv with letBoundVars= (mkLocalValRef vspec) :: eenv.letBoundVars} let access = ComputeMethodAccessRestrictedBySig eenv vspec @@ -5714,7 +5607,7 @@ and GenBindingAfterDebugPoint cenv cgbuf eenv sp (TBind(vspec, rhsExpr, _)) star let eenv = EnvForTypars tps eenv CommitStartScope cgbuf startScopeMarkOpt GenExpr cenv cgbuf eenv SPSuppress cctorBody discard - + | Method (topValInfo, _, mspec, mspecW, _, ctps, mtps, curriedArgInfos, paramInfos, witnessInfos, argTys, retInfo) -> let methLambdaTypars, methLambdaCtorThisValOpt, methLambdaBaseValOpt, methLambdaCurriedVars, methLambdaBody, methLambdaBodyTy = @@ -5724,14 +5617,15 @@ and GenBindingAfterDebugPoint cenv cgbuf eenv sp (TBind(vspec, rhsExpr, _)) star CommitStartScope cgbuf startScopeMarkOpt - let generator = GenMethodForBinding + // if we have any expression recursion depth, we should delay the generation of a method to prevent stack overflows + let generator = if cenv.exprRecursionDepth > 0 then DelayGenMethodForBinding else GenMethodForBinding let hasWitnessEntry = cenv.g.generateWitnesses && not witnessInfos.IsEmpty generator cenv cgbuf.mgbuf eenv (vspec, mspec, hasWitnessEntry, false, access, ctps, mtps, [], curriedArgInfos, paramInfos, argTys, retInfo, topValInfo, methLambdaCtorThisValOpt, methLambdaBaseValOpt, methLambdaTypars, methLambdaVars, methLambdaBody, methLambdaBodyTy) // If generating witnesses, then generate the second entry point with additional arguments. // Take a copy of the expression to ensure generated names are unique. - if hasWitnessEntry then + if hasWitnessEntry then let copyOfLambdaBody = copyExpr cenv.g CloneAll methLambdaBody generator cenv cgbuf.mgbuf eenv (vspec, mspecW, hasWitnessEntry, true, access, ctps, mtps, witnessInfos, curriedArgInfos, paramInfos, argTys, retInfo, topValInfo, methLambdaCtorThisValOpt, methLambdaBaseValOpt, methLambdaTypars, methLambdaVars, copyOfLambdaBody, methLambdaBodyTy) @@ -5740,7 +5634,7 @@ and GenBindingAfterDebugPoint cenv cgbuf eenv sp (TBind(vspec, rhsExpr, _)) star let ilAttribs = GenAttrs cenv eenv vspec.Attribs let ilTy = ilGetterMethSpec.FormalReturnType let ilPropDef = - ILPropertyDef(name = ChopPropertyName ilGetterMethSpec.Name, + ILPropertyDef(name = PrettyNaming.ChopPropertyName ilGetterMethSpec.Name, attributes = PropertyAttributes.None, setMethod = None, getMethod = Some ilGetterMethSpec.MethodRef, @@ -5752,8 +5646,7 @@ and GenBindingAfterDebugPoint cenv cgbuf eenv sp (TBind(vspec, rhsExpr, _)) star cgbuf.mgbuf.AddOrMergePropertyDef(ilGetterMethSpec.MethodRef.DeclaringTypeRef, ilPropDef, m) let ilMethodDef = - let ilCode = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPSuppress, [], ilGetterMethSpec.Name, eenv, 0, rhsExpr, Return) - let ilMethodBody = MethodBody.IL(lazy ilCode) + let ilMethodBody = MethodBody.IL(CodeGenMethodForExpr cenv cgbuf.mgbuf (SPSuppress, [], ilGetterMethSpec.Name, eenv, 0, rhsExpr, Return)) (mkILStaticMethod ([], ilGetterMethSpec.Name, access, [], mkILReturn ilTy, ilMethodBody)).WithSpecialName |> AddNonUserCompilerGeneratedAttribs g @@ -5769,7 +5662,7 @@ and GenBindingAfterDebugPoint cenv cgbuf eenv sp (TBind(vspec, rhsExpr, _)) star | StaticField (fspec, vref, hasLiteralAttr, ilTyForProperty, ilPropName, fty, ilGetterMethRef, ilSetterMethRef, optShadowLocal) -> let mut = vspec.IsMutable - + let canTarget(targets, goal: System.AttributeTargets) = match targets with | None -> true @@ -5783,7 +5676,7 @@ and GenBindingAfterDebugPoint cenv cgbuf eenv sp (TBind(vspec, rhsExpr, _)) star match vref.LiteralValue with | Some konst -> ilFieldDef.WithLiteralDefaultValue( Some (GenFieldInit m konst) ) | None -> ilFieldDef - + let ilFieldDef = let isClassInitializer = (cgbuf.MethodName = ".cctor") ilFieldDef.WithInitOnly(not (mut || cenv.opts.isInteractiveItExpr || not isClassInitializer || hasLiteralAttr)) @@ -5799,7 +5692,7 @@ and GenBindingAfterDebugPoint cenv cgbuf eenv sp (TBind(vspec, rhsExpr, _)) star let ilFieldDef = ilFieldDef.With(customAttrs = mkILCustomAttrs (ilAttribs @ [ g.DebuggerBrowsableNeverAttribute ])) [ (fspec.DeclaringTypeRef, ilFieldDef) ] - + let ilTypeRefForProperty = ilTyForProperty.TypeRef for (tref, ilFieldDef) in ilFieldDefs do @@ -5906,46 +5799,46 @@ and GenMarshal cenv attribs = match decoder.FindInt32 "SafeArraySubType" 0x0 with (* enumeration values for System.Runtime.InteropServices.VarType taken from mscorlib.il *) | 0x0 -> ILNativeVariant.Empty - | 0x1 -> ILNativeVariant.Null - | 0x02 -> ILNativeVariant.Int16 - | 0x03 -> ILNativeVariant.Int32 - | 0x0C -> ILNativeVariant.Variant - | 0x04 -> ILNativeVariant.Single - | 0x05 -> ILNativeVariant.Double - | 0x06 -> ILNativeVariant.Currency - | 0x07 -> ILNativeVariant.Date - | 0x08 -> ILNativeVariant.BSTR - | 0x09 -> ILNativeVariant.IDispatch - | 0x0a -> ILNativeVariant.Error - | 0x0b -> ILNativeVariant.Bool - | 0x0d -> ILNativeVariant.IUnknown - | 0x0e -> ILNativeVariant.Decimal - | 0x10 -> ILNativeVariant.Int8 - | 0x11 -> ILNativeVariant.UInt8 - | 0x12 -> ILNativeVariant.UInt16 - | 0x13 -> ILNativeVariant.UInt32 - | 0x15 -> ILNativeVariant.UInt64 - | 0x16 -> ILNativeVariant.Int - | 0x17 -> ILNativeVariant.UInt - | 0x18 -> ILNativeVariant.Void - | 0x19 -> ILNativeVariant.HRESULT - | 0x1a -> ILNativeVariant.PTR - | 0x1c -> ILNativeVariant.CArray - | 0x1d -> ILNativeVariant.UserDefined - | 0x1e -> ILNativeVariant.LPSTR - | 0x1B -> ILNativeVariant.SafeArray - | 0x1f -> ILNativeVariant.LPWSTR - | 0x24 -> ILNativeVariant.Record - | 0x40 -> ILNativeVariant.FileTime - | 0x41 -> ILNativeVariant.Blob - | 0x42 -> ILNativeVariant.Stream - | 0x43 -> ILNativeVariant.Storage - | 0x44 -> ILNativeVariant.StreamedObject - | 0x45 -> ILNativeVariant.StoredObject - | 0x46 -> ILNativeVariant.BlobObject - | 0x47 -> ILNativeVariant.CF - | 0x48 -> ILNativeVariant.CLSID - | 0x14 -> ILNativeVariant.Int64 + | 0x1 -> ILNativeVariant.Null + | 0x02 -> ILNativeVariant.Int16 + | 0x03 -> ILNativeVariant.Int32 + | 0x0C -> ILNativeVariant.Variant + | 0x04 -> ILNativeVariant.Single + | 0x05 -> ILNativeVariant.Double + | 0x06 -> ILNativeVariant.Currency + | 0x07 -> ILNativeVariant.Date + | 0x08 -> ILNativeVariant.BSTR + | 0x09 -> ILNativeVariant.IDispatch + | 0x0a -> ILNativeVariant.Error + | 0x0b -> ILNativeVariant.Bool + | 0x0d -> ILNativeVariant.IUnknown + | 0x0e -> ILNativeVariant.Decimal + | 0x10 -> ILNativeVariant.Int8 + | 0x11 -> ILNativeVariant.UInt8 + | 0x12 -> ILNativeVariant.UInt16 + | 0x13 -> ILNativeVariant.UInt32 + | 0x15 -> ILNativeVariant.UInt64 + | 0x16 -> ILNativeVariant.Int + | 0x17 -> ILNativeVariant.UInt + | 0x18 -> ILNativeVariant.Void + | 0x19 -> ILNativeVariant.HRESULT + | 0x1a -> ILNativeVariant.PTR + | 0x1c -> ILNativeVariant.CArray + | 0x1d -> ILNativeVariant.UserDefined + | 0x1e -> ILNativeVariant.LPSTR + | 0x1B -> ILNativeVariant.SafeArray + | 0x1f -> ILNativeVariant.LPWSTR + | 0x24 -> ILNativeVariant.Record + | 0x40 -> ILNativeVariant.FileTime + | 0x41 -> ILNativeVariant.Blob + | 0x42 -> ILNativeVariant.Stream + | 0x43 -> ILNativeVariant.Storage + | 0x44 -> ILNativeVariant.StreamedObject + | 0x45 -> ILNativeVariant.StoredObject + | 0x46 -> ILNativeVariant.BlobObject + | 0x47 -> ILNativeVariant.CF + | 0x48 -> ILNativeVariant.CLSID + | 0x14 -> ILNativeVariant.Int64 | _ -> ILNativeVariant.Empty let safeArrayUserDefinedSubType = // the argument is a System.Type obj, but it's written to MD as a UTF8 string @@ -6029,12 +5922,12 @@ and GenParams (cenv: cenv) eenv m (mspec: ILMethodSpec) witnessInfos (argInfos: | _ -> List.map (fun x -> x, None) ilArgTysAndInfos - let ilParams, _ = + let ilParams, _ = (Set.empty, List.zip methArgTys ilArgTysAndInfoAndVals) ||> List.mapFold (fun takenNames (methodArgTy, ((ilArgTy, topArgInfo), implValOpt)) -> let inFlag, outFlag, optionalFlag, defaultParamValue, Marshal, attribs = GenParamAttribs cenv methodArgTy topArgInfo.Attribs - - let idOpt = + + let idOpt = match topArgInfo.Name with | Some v -> Some v | None -> @@ -6055,10 +5948,10 @@ and GenParams (cenv: cenv) eenv m (mspec: ILMethodSpec) witnessInfos (argInfos: Some nm, takenNames.Add(nm) | None -> None, takenNames - + let ilAttribs = GenAttrs cenv eenv attribs - + let ilAttribs = match GenReadOnlyAttributeIfNecessary g methodArgTy with | Some attr -> ilAttribs @ [attr] @@ -6098,15 +5991,15 @@ and GenReturnInfo cenv eenv returnTy ilRetTy (retInfo: ArgReprInfo) : ILReturn = Marshal=marshal CustomAttrsStored= storeILCustomAttrs ilAttrs MetadataIndex = NoMetadataIdx } - + /// Generate an IL property for a member and GenPropertyForMethodDef compileAsInstance tref mdef (v: Val) (memberInfo: ValMemberInfo) ilArgTys ilPropTy ilAttrs compiledName = let name = match compiledName with | Some n -> n | _ -> v.PropertyName in (* chop "get_" *) ILPropertyDef(name = name, attributes = PropertyAttributes.None, - setMethod = (if memberInfo.MemberFlags.MemberKind= SynMemberKind.PropertySet then Some(mkRefToILMethod(tref, mdef)) else None), - getMethod = (if memberInfo.MemberFlags.MemberKind= SynMemberKind.PropertyGet then Some(mkRefToILMethod(tref, mdef)) else None), + setMethod = (if memberInfo.MemberFlags.MemberKind= MemberKind.PropertySet then Some(mkRefToILMethod(tref, mdef)) else None), + getMethod = (if memberInfo.MemberFlags.MemberKind= MemberKind.PropertyGet then Some(mkRefToILMethod(tref, mdef)) else None), callingConv = (if compileAsInstance then ILThisConvention.Instance else ILThisConvention.Static), propertyType = ilPropTy, init = None, @@ -6140,12 +6033,12 @@ and ComputeUseMethodImpl cenv (v: Val, slotsig: SlotSig) = Option.isSome tcref.GeneratedCompareToValues && (typeEquiv cenv.g oty cenv.g.mk_IComparable_ty || tyconRefEq cenv.g cenv.g.system_GenericIComparable_tcref otcref) - + not isCompare) && (let isGenericEquals = Option.isSome tcref.GeneratedHashAndEqualsWithComparerValues && tyconRefEq cenv.g cenv.g.system_GenericIEquatable_tcref otcref - + not isGenericEquals) && (let isStructural = (Option.isSome tcref.GeneratedCompareToWithComparerValues && typeEquiv cenv.g oty cenv.g.mk_IStructuralComparable_ty) || @@ -6161,22 +6054,22 @@ and ComputeMethodImplNameFixupForMemberBinding cenv (v: Val, memberInfo: ValMemb let useMethodImpl = ComputeUseMethodImpl cenv (v, slotsig) let nameOfOverridingMethod = GenNameOfOverridingMethod cenv (useMethodImpl, slotsig) Some nameOfOverridingMethod - + and ComputeFlagFixupsForMemberBinding cenv (v: Val, memberInfo: ValMemberInfo) = [ if isNil memberInfo.ImplementedSlotSigs then yield fixupVirtualSlotFlags else for slotsig in memberInfo.ImplementedSlotSigs do let useMethodImpl = ComputeUseMethodImpl cenv (v, slotsig) - + if useMethodImpl then yield fixupMethodImplFlags else - yield fixupVirtualSlotFlags - match ComputeMethodImplNameFixupForMemberBinding cenv (v, memberInfo) with - | Some nm -> yield renameMethodDef nm + yield fixupVirtualSlotFlags + match ComputeMethodImplNameFixupForMemberBinding cenv (v, memberInfo) with + | Some nm -> yield renameMethodDef nm | None -> () ] - + and ComputeMethodImplAttribs cenv (_v: Val) attrs = let g = cenv.g let implflags = @@ -6214,7 +6107,7 @@ and GenMethodForBinding ctorThisValOpt, baseValOpt, methLambdaTypars, methLambdaVars, methLambdaBody, returnTy) = let g = cenv.g let m = v.Range - + // If a method has a witness-passing version of the code, then suppress // the generation of any witness in the non-witness passing version of the code let eenv = { eenv with suppressWitnesses = hasWitnessEntry && not generateWitnessArgs } @@ -6241,8 +6134,8 @@ and GenMethodForBinding // Add the arguments to the environment. We add an implicit 'this' argument to constructors let isCtor = v.IsConstructor - let methLambdaWitnessInfos = - if generateWitnessArgs then + let methLambdaWitnessInfos = + if generateWitnessArgs then GetTraitWitnessInfosOfTypars cenv.g ctps.Length methLambdaTypars else [] @@ -6260,7 +6153,6 @@ and GenMethodForBinding let eenvForMeth = eenvForMeth |> AddStorageForLocalWitnesses (methLambdaWitnessInfos |> List.mapi (fun i w -> (w, Arg (numArgsUsed+i)))) let numArgsUsed = numArgsUsed + methLambdaWitnessInfos.Length let eenvForMeth = eenvForMeth |> AddStorageForLocalVals cenv.g (List.mapi (fun i v -> (v, Arg (numArgsUsed+i))) nonUnitNonSelfMethodVars) - let eenvForMeth = if eenvForMeth.initLocals && HasFSharpAttribute g g.attrib_SkipLocalsInitAttribute v.Attribs then { eenvForMeth with initLocals = false } else eenvForMeth eenvForMeth let tailCallInfo = @@ -6296,31 +6188,21 @@ and GenMethodForBinding mkThrow m returnTy exnExpr else body - - let ilCodeLazy = lazy CodeGenMethodForExpr cenv mgbuf (SPAlways, tailCallInfo, mspec.Name, eenvForMeth, 0, bodyExpr, sequel) + + let ilCode = CodeGenMethodForExpr cenv mgbuf (SPAlways, tailCallInfo, mspec.Name, eenvForMeth, 0, bodyExpr, sequel) // This is the main code generation for most methods - false, MethodBody.IL(ilCodeLazy), false - - match ilMethodBody with - | MethodBody.IL(ilCodeLazy) -> - if cenv.exprRecursionDepth > 0 then - cenv.delayedGenMethods.Enqueue(fun _ -> ilCodeLazy.Force() |> ignore) - else - // Eagerly codegen if we are not in an expression depth. - ilCodeLazy.Force() |> ignore - | _ -> - () + false, MethodBody.IL ilCode, false // Do not generate DllImport attributes into the code - they are implicit from the P/Invoke let attrs = v.Attribs |> List.filter (IsMatchingFSharpAttributeOpt g g.attrib_DllImportAttribute >> not) |> List.filter (IsMatchingFSharpAttribute g g.attrib_CompiledNameAttribute >> not) - + let attrsAppliedToGetterOrSetter, attrs = List.partition (fun (Attrib(_, _, _, _, isAppliedToGetterOrSetter, _, _)) -> isAppliedToGetterOrSetter) attrs - + let sourceNameAttribs, compiledName = match v.Attribs |> List.tryFind (IsMatchingFSharpAttribute g g.attrib_CompiledNameAttribute) with | Some (Attrib(_, _, [ AttribStringArg b ], _, _, _, _)) -> [ mkCompilationSourceNameAttr g v.LogicalName ], Some b @@ -6328,7 +6210,7 @@ and GenMethodForBinding // check if the hasPreserveSigNamedArg and hasSynchronizedImplFlag implementation flags have been specified let hasPreserveSigImplFlag, hasSynchronizedImplFlag, hasNoInliningFlag, hasAggressiveInliningImplFlag, attrs = ComputeMethodImplAttribs cenv v attrs - + let securityAttributes, attrs = attrs |> List.partition (fun a -> IsSecurityAttribute g cenv.amap cenv.casApplied a m) let permissionSets = CreatePermissionSets cenv eenv securityAttributes @@ -6343,10 +6225,10 @@ and GenMethodForBinding yield! GenCompilationArgumentCountsAttr cenv v match v.MemberInfo with - | Some memberInfo when - memberInfo.MemberFlags.MemberKind = SynMemberKind.PropertyGet || - memberInfo.MemberFlags.MemberKind = SynMemberKind.PropertySet || - memberInfo.MemberFlags.MemberKind = SynMemberKind.PropertyGetSet -> + | Some memberInfo when + memberInfo.MemberFlags.MemberKind = MemberKind.PropertyGet || + memberInfo.MemberFlags.MemberKind = MemberKind.PropertySet || + memberInfo.MemberFlags.MemberKind = MemberKind.PropertyGetSet -> match GenReadOnlyAttributeIfNecessary g returnTy with Some ilAttr -> ilAttr | _ -> () | _ -> () ] @@ -6364,20 +6246,20 @@ and GenMethodForBinding // compiling CLIEvent properties | Some memberInfo - when not v.IsExtensionMember && - (match memberInfo.MemberFlags.MemberKind with - | (SynMemberKind.PropertySet | SynMemberKind.PropertyGet) -> CompileAsEvent cenv.g v.Attribs + when not v.IsExtensionMember && + (match memberInfo.MemberFlags.MemberKind with + | (MemberKind.PropertySet | MemberKind.PropertyGet) -> CompileAsEvent cenv.g v.Attribs | _ -> false) -> - let useMethodImpl = - if compileAsInstance && + let useMethodImpl = + if compileAsInstance && ((memberInfo.MemberFlags.IsDispatchSlot && memberInfo.IsImplemented) || memberInfo.MemberFlags.IsOverrideOrExplicitImpl) then let useMethodImpl = memberInfo.ImplementedSlotSigs |> List.exists (fun slotsig -> ComputeUseMethodImpl cenv (v, slotsig)) - let nameOfOverridingMethod = - match ComputeMethodImplNameFixupForMemberBinding cenv (v, memberInfo) with + let nameOfOverridingMethod = + match ComputeMethodImplNameFixupForMemberBinding cenv (v, memberInfo) with | None -> mspec.Name | Some nm -> nm @@ -6396,18 +6278,18 @@ and GenMethodForBinding | _ -> - let mdef = + let mdef = match v.MemberInfo with | Some memberInfo when not v.IsExtensionMember -> let ilMethTypars = ilTypars |> List.skip mspec.DeclaringType.GenericArgs.Length - if memberInfo.MemberFlags.MemberKind = SynMemberKind.Constructor then + if memberInfo.MemberFlags.MemberKind = MemberKind.Constructor then assert (isNil ilMethTypars) let mdef = mkILCtor (access, ilParams, ilMethodBody) let mdef = mdef.With(customAttrs= mkILCustomAttrs (ilAttrsThatGoOnPrimaryItem @ sourceNameAttribs @ ilAttrsCompilerGenerated)) mdef - elif memberInfo.MemberFlags.MemberKind = SynMemberKind.ClassConstructor then + elif memberInfo.MemberFlags.MemberKind = MemberKind.ClassConstructor then assert (isNil ilMethTypars) let mdef = mkILClassCtor ilMethodBody let mdef = mdef.With(customAttrs= mkILCustomAttrs (ilAttrsThatGoOnPrimaryItem @ sourceNameAttribs @ ilAttrsCompilerGenerated)) @@ -6443,11 +6325,11 @@ and GenMethodForBinding else mdef match memberInfo.MemberFlags.MemberKind with - - | (SynMemberKind.PropertySet | SynMemberKind.PropertyGet) -> + + | (MemberKind.PropertySet | MemberKind.PropertyGet) -> if not (isNil ilMethTypars) then error(InternalError("A property may not be more generic than the enclosing type - constrain the polymorphism in the expression", v.Range)) - + // Check if we're compiling the property as a .NET event assert not (CompileAsEvent cenv.g v.Attribs) @@ -6460,7 +6342,7 @@ and GenMethodForBinding let ilPropDef = GenPropertyForMethodDef compileAsInstance tref mdef v memberInfo ilArgTys ilPropTy (mkILCustomAttrs ilAttrsThatGoOnPrimaryItem) compiledName mgbuf.AddOrMergePropertyDef(tref, ilPropDef, m) - // Add the special name flag for all properties + // Add the special name flag for all properties let mdef = mdef.WithSpecialName.With(customAttrs= mkILCustomAttrs ((GenAttrs cenv eenv attrsAppliedToGetterOrSetter) @ sourceNameAttribs @ ilAttrsCompilerGenerated)) mdef @@ -6476,7 +6358,7 @@ and GenMethodForBinding match v.MemberInfo with | Some memberInfo when v.IsExtensionMember -> match memberInfo.MemberFlags.MemberKind with - | (SynMemberKind.PropertySet | SynMemberKind.PropertyGet) -> ilAttrsThatGoOnPrimaryItem @ GenAttrs cenv eenv attrsAppliedToGetterOrSetter + | (MemberKind.PropertySet | MemberKind.PropertyGet) -> ilAttrsThatGoOnPrimaryItem @ GenAttrs cenv eenv attrsAppliedToGetterOrSetter | _ -> ilAttrsThatGoOnPrimaryItem | _ -> ilAttrsThatGoOnPrimaryItem @@ -6509,13 +6391,13 @@ and GenMethodForBinding mdef CountMethodDef() mgbuf.AddMethodDef(tref, mdef) - + and GenPInvokeMethod (nm, dll, namedArgs) = let decoder = AttributeDecoder namedArgs let hasPreserveSigNamedArg = decoder.FindBool "PreserveSig" true hasPreserveSigNamedArg, - let pinvoke = + MethodBody.PInvoke { Where=mkSimpleModRef dll Name=decoder.FindString "EntryPoint" nm CallingConv= @@ -6536,9 +6418,8 @@ and GenPInvokeMethod (nm, dll, namedArgs) = NoMangle= decoder.FindBool "ExactSpelling" false LastError= decoder.FindBool "SetLastError" false ThrowOnUnmappableChar= if (decoder.FindBool "ThrowOnUnmappableChar" false) then PInvokeThrowOnUnmappableChar.Enabled else PInvokeThrowOnUnmappableChar.UseAssembly - CharBestFit=if (decoder.FindBool "BestFitMapping" false) then PInvokeCharBestFit.Enabled else PInvokeCharBestFit.UseAssembly } : PInvokeMethod - MethodBody.PInvoke(lazy pinvoke) - + CharBestFit=if (decoder.FindBool "BestFitMapping" false) then PInvokeCharBestFit.Enabled else PInvokeCharBestFit.UseAssembly } + and GenBindings cenv cgbuf eenv binds = List.iter (GenBinding cenv cgbuf eenv) binds //------------------------------------------------------------------------- @@ -6555,7 +6436,7 @@ and GenSetVal cenv cgbuf eenv (vref, e, m) sequel = GenExpr cenv cgbuf eenv SPSuppress e Continue GenSetStorage vref.Range cgbuf storage GenUnitThenSequel cenv eenv m eenv.cloc cgbuf sequel - + and GenGetValRefAndSequel cenv cgbuf eenv m (v: ValRef) storeSequel = let ty = v.Type GenGetStorageAndSequel cenv cgbuf eenv m (ty, GenType cenv.amap m eenv.tyenv ty) (StorageForValRef cenv.g m v eenv) storeSequel @@ -6563,19 +6444,22 @@ and GenGetValRefAndSequel cenv cgbuf eenv m (v: ValRef) storeSequel = and GenGetVal cenv cgbuf eenv (v: ValRef, m) sequel = GenGetValRefAndSequel cenv cgbuf eenv m v None GenSequel cenv eenv.cloc cgbuf sequel - + and GenBindingRhs cenv cgbuf eenv sp (vspec: Val) e = let g = cenv.g match e with | Expr.TyLambda _ | Expr.Lambda _ -> let isLocalTypeFunc = IsNamedLocalTypeFuncVal g vspec e - + match e with | Expr.TyLambda (_, tyargs, body, _, ttype) when ( tyargs |> List.forall (fun tp -> tp.IsErased) && (match StorageForVal g vspec.Range vspec eenv with Local _ -> true | _ -> false) && - (isLocalTypeFunc || isStructOrEnumTyconTy g ttype) + (isLocalTypeFunc || + (match ttype with + TType_var typar -> match typar.Solution with Some(TType_app(t, _))-> t.IsStructOrEnumTycon | _ -> false + | _ -> false)) ) -> // type lambda with erased type arguments that is stored as local variable (not method or property)- inline body GenExpr cenv cgbuf eenv sp body Continue @@ -6589,7 +6473,7 @@ and CommitStartScope cgbuf startScopeMarkOpt = match startScopeMarkOpt with | None -> () | Some ss -> cgbuf.SetMarkToHere ss - + and EmitInitLocal cgbuf ty idx = CG.EmitInstrs cgbuf (pop 0) Push0 [I_ldloca (uint16 idx); (I_initobj ty) ] and EmitSetLocal cgbuf idx = CG.EmitInstr cgbuf (pop 1) Push0 (mkStloc (uint16 idx)) @@ -6629,7 +6513,7 @@ and GenSetStorage m cgbuf storage = and CommitGetStorageSequel cenv cgbuf eenv m ty localCloInfo storeSequel = match localCloInfo, storeSequel with - | Some {contents =NamedLocalIlxClosureInfoGenerator _cloinfo}, _ -> + | Some {contents =NamedLocalIlxClosureInfoGenerator _cloinfo}, _ -> error(InternalError("Unexpected generator", m)) | Some {contents =NamedLocalIlxClosureInfoGenerated cloinfo}, Some (tyargs, args, m, sequel) when not (isNil tyargs) -> @@ -6708,7 +6592,7 @@ and GenGetLocalVRef cenv cgbuf eenv m (vref: ValRef) storeSequel = and GenStoreVal cenv cgbuf eenv m (vspec: Val) = GenSetStorage vspec.Range cgbuf (StorageForVal cenv.g m vspec eenv) -/// Allocate IL locals +/// Allocate IL locals and AllocLocal cenv cgbuf eenv compgen (v, ty, isFixed) (scopeMarks: Mark * Mark) = // The debug range for the local let ranges = if compgen then [] else [(v, scopeMarks)] @@ -6727,20 +6611,20 @@ and AllocLocalVal cenv cgbuf v eenv repr scopeMarks = let ty = v.Type if isUnitTy g ty && not v.IsMutable then Null, eenv else - match repr with + match repr with | Some r when IsNamedLocalTypeFuncVal g v r -> - // known, named, non-escaping type functions + // known, named, non-escaping type functions let cloinfoGenerate eenv = let eenvinner = {eenv with letBoundVars=(mkLocalValRef v) :: eenv.letBoundVars} let cloinfo, _, _ = GetIlxClosureInfo cenv v.Range true true [] eenvinner (Option.get repr) cloinfo - + let idx, realloc, eenv = AllocLocal cenv cgbuf eenv v.IsCompilerGenerated (v.CompiledName g.CompilerGlobalState, g.ilg.typ_Object, false) scopeMarks Local (idx, realloc, Some(ref (NamedLocalIlxClosureInfoGenerator cloinfoGenerate))), eenv - | _ -> - // normal local + | _ -> + // normal local let idx, realloc, eenv = AllocLocal cenv cgbuf eenv v.IsCompilerGenerated (v.CompiledName g.CompilerGlobalState, GenTypeOfVal cenv eenv v, v.IsFixed) scopeMarks Local (idx, realloc, None), eenv let eenv = AddStorageForVal g (v, notlazy repr) eenv @@ -6925,7 +6809,7 @@ and GenAttr amap g eenv (Attrib(_, k, args, props, _, _, _)) = let mspec, _, _, _, _, _, _, _, _, _ = GetMethodSpecForMemberVal amap g (Option.get vref.MemberInfo) vref mspec let ilArgs = List.map2 (fun (AttribExpr(_, vexpr)) ty -> GenAttribArg amap g eenv vexpr ty) args mspec.FormalArgTypes - mkILCustomAttribMethRef (mspec, ilArgs, props) + mkILCustomAttribMethRef g.ilg (mspec, ilArgs, props) and GenAttrs cenv eenv attrs = List.map (GenAttr cenv.amap cenv.g eenv) attrs @@ -6938,7 +6822,7 @@ and GenCompilationArgumentCountsAttr cenv (v: Val) = if arities.Length > 1 then yield mkCompilationArgumentCountsAttr g arities | _ -> - () ] + () ] // Create a permission set for a list of security attributes and CreatePermissionSets cenv eenv (securityAttributes: Attrib list) = @@ -6949,11 +6833,11 @@ and CreatePermissionSets cenv eenv (securityAttributes: Attrib list) = let tref = tcref.CompiledRepresentationForNamedType let ilattr = GenAttr cenv.amap g eenv attr let _, ilNamedArgs = - match TryDecodeILAttribute tref (mkILCustomAttrs [ilattr]) with + match TryDecodeILAttribute g tref (mkILCustomAttrs [ilattr]) with | Some(ae, na) -> ae, na | _ -> [], [] let setArgs = ilNamedArgs |> List.map (fun (n, ilt, _, ilae) -> (n, ilt, ilae)) - yield IL.mkPermissionSet (secaction, [(tref, setArgs)])] + yield IL.mkPermissionSet g.ilg (secaction, [(tref, setArgs)])] //-------------------------------------------------------------------------- // Generate the set of modules for an assembly, and the declarations in each module @@ -7033,7 +6917,7 @@ and GenModuleBinding cenv (cgbuf: CodeGenBuffer) (qname: QualifiedNameOfFile) la let eenvinner = if mspec.IsNamespace then eenv else - { eenv with cloc = CompLocForFixedModule cenv.opts.fragName qname.Text mspec; initLocals = eenv.initLocals && not (HasFSharpAttribute cenv.g cenv.g.attrib_SkipLocalsInitAttribute mspec.Attribs) } + {eenv with cloc = CompLocForFixedModule cenv.opts.fragName qname.Text mspec } // Create the class to hold the contents of this module. No class needed if // we're compiling it as a namespace. @@ -7110,7 +6994,7 @@ and GenImplFile cenv (mgbuf: AssemblyBuilder) mainInfoOpt eenv (implFile: TypedI | Some _ when hasExplicitEntryPoint -> ".cctor" // Final file, implicit entry point | Some _ -> mainMethName - + // topInstrs is ILInstr[] and contains the abstract IL for this file's top-level actions. topCode is the ILMethodBody for that same code. let topInstrs, topCode = CodeGenMethod cenv mgbuf @@ -7144,13 +7028,13 @@ and GenImplFile cenv (mgbuf: AssemblyBuilder) mainInfoOpt eenv (implFile: TypedI // well for the bindings earlier in the file containing the entry point. match mgbuf.GetExplicitEntryPointInfo() with // Final file, explicit entry point: place the code in a .cctor, and add code to main that forces the .cctor (if topCode has initialization effect). - | Some tref -> + | Some tref -> if doesSomething then lazyInitInfo.Add (fun fspec feefee seqpt -> // This adds the explicit init of the .cctor to the explicit entry point main method mgbuf.AddExplicitInitToSpecificMethodDef((fun md -> md.IsEntryPoint), tref, fspec, GenPossibleILSourceMarker cenv m, feefee, seqpt)) - let cctorMethDef = mkILClassCtor (MethodBody.IL (lazy topCode)) + let cctorMethDef = mkILClassCtor (MethodBody.IL topCode) mgbuf.AddMethodDef(initClassTy.TypeRef, cctorMethDef) // Final file, implicit entry point. We generate no .cctor. @@ -7165,7 +7049,7 @@ and GenImplFile cenv (mgbuf: AssemblyBuilder) mainInfoOpt eenv (implFile: TypedI // generate main@ let ilMainMethodDef = - let mdef = mkILNonGenericStaticMethod(mainMethName, ILMemberAccess.Public, [], mkILReturn ILType.Void, MethodBody.IL (lazy topCode)) + let mdef = mkILNonGenericStaticMethod(mainMethName, ILMemberAccess.Public, [], mkILReturn ILType.Void, MethodBody.IL topCode) mdef.With(isEntryPoint= true, customAttrs = ilAttrs) mgbuf.AddMethodDef(initClassTy.TypeRef, ilMainMethodDef) @@ -7175,7 +7059,7 @@ and GenImplFile cenv (mgbuf: AssemblyBuilder) mainInfoOpt eenv (implFile: TypedI | None -> if doesSomething then // Add the cctor - let cctorMethDef = mkILClassCtor (MethodBody.IL (lazy topCode)) + let cctorMethDef = mkILClassCtor (MethodBody.IL topCode) mgbuf.AddMethodDef(initClassTy.TypeRef, cctorMethDef) // Commit the directed initializations @@ -7242,12 +7126,12 @@ and GenFieldInit m c = | ConstToILFieldInit fieldInit -> fieldInit | _ -> error(Error(FSComp.SR.ilTypeCannotBeUsedForLiteralField(), m)) -and GenWitnessParams cenv eenv m (witnessInfos: TraitWitnessInfos) = - ((Set.empty, 0), witnessInfos) ||> List.mapFold (fun (used,i) witnessInfo -> +and GenWitnessParams cenv eenv m (witnessInfos: TraitWitnessInfos) = + ((Set.empty, 0), witnessInfos) ||> List.mapFold (fun (used,i) witnessInfo -> let ty = GenWitnessTy cenv.g witnessInfo let nm = String.uncapitalize witnessInfo.MemberName let nm = if used.Contains nm then nm + string i else nm - let ilParam = + let ilParam = { Name=Some nm Type= GenType cenv.amap m eenv.tyenv ty Default=None @@ -7267,19 +7151,19 @@ and GenAbstractBinding cenv eenv tref (vref: ValRef) = let memberInfo = Option.get vref.MemberInfo let attribs = vref.Attribs let hasPreserveSigImplFlag, hasSynchronizedImplFlag, hasNoInliningFlag, hasAggressiveInliningImplFlag, attribs = ComputeMethodImplAttribs cenv vref.Deref attribs - if memberInfo.MemberFlags.IsDispatchSlot && not memberInfo.IsImplemented then + if memberInfo.MemberFlags.IsDispatchSlot && not memberInfo.IsImplemented then let mspec, _mspecW, ctps, mtps, _curriedArgInfos, argInfos, retInfo, witnessInfos, methArgTys, returnTy = GetMethodSpecForMemberVal cenv.amap cenv.g memberInfo vref let ilAttrs = [ yield! GenAttrs cenv eenv attribs yield! GenCompilationArgumentCountsAttr cenv vref.Deref - + match vref.MemberInfo, returnTy with - | Some memberInfo, Some returnTy when - memberInfo.MemberFlags.MemberKind = SynMemberKind.PropertyGet || - memberInfo.MemberFlags.MemberKind = SynMemberKind.PropertySet || - memberInfo.MemberFlags.MemberKind = SynMemberKind.PropertyGetSet -> + | Some memberInfo, Some returnTy when + memberInfo.MemberFlags.MemberKind = MemberKind.PropertyGet || + memberInfo.MemberFlags.MemberKind = MemberKind.PropertySet || + memberInfo.MemberFlags.MemberKind = MemberKind.PropertyGetSet -> match GenReadOnlyAttributeIfNecessary g returnTy with Some ilAttr -> ilAttr | _ -> () | _ -> () ] @@ -7289,7 +7173,7 @@ and GenAbstractBinding cenv eenv tref (vref: ValRef) = let ilMethTypars = GenGenericParams cenv eenvForMeth mtps let ilReturn = GenReturnInfo cenv eenvForMeth returnTy mspec.FormalReturnType retInfo let ilParams = GenParams cenv eenvForMeth m mspec [] argInfos methArgTys None - + let compileAsInstance = ValRefIsCompiledAsInstanceMember g vref let mdef = mkILGenericVirtualMethod (vref.CompiledName g.CompilerGlobalState, ILMemberAccess.Public, ilMethTypars, ilParams, ilReturn, MethodBody.Abstract) @@ -7303,19 +7187,19 @@ and GenAbstractBinding cenv eenv tref (vref: ValRef) = .WithSynchronized(hasSynchronizedImplFlag) .WithNoInlining(hasNoInliningFlag) .WithAggressiveInlining(hasAggressiveInliningImplFlag) - + match memberInfo.MemberFlags.MemberKind with - | SynMemberKind.ClassConstructor - | SynMemberKind.Constructor - | SynMemberKind.Member -> + | MemberKind.ClassConstructor + | MemberKind.Constructor + | MemberKind.Member -> let mdef = mdef.With(customAttrs= mkILCustomAttrs ilAttrs) [mdef], [], [] - | SynMemberKind.PropertyGetSet -> error(Error(FSComp.SR.ilUnexpectedGetSetAnnotation(), m)) - | SynMemberKind.PropertySet | SynMemberKind.PropertyGet -> + | MemberKind.PropertyGetSet -> error(Error(FSComp.SR.ilUnexpectedGetSetAnnotation(), m)) + | MemberKind.PropertySet | MemberKind.PropertyGet -> let v = vref.Deref let vtyp = ReturnTypeOfPropertyVal g v if CompileAsEvent g attribs then - + let edef = GenEventForProperty cenv eenvForMeth mspec v ilAttrs m vtyp [], [], [edef] else @@ -7401,7 +7285,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = // // Note you only have to implement 'System.IComparable' to customize structural comparison AND equality on F# types // See also FinalTypeDefinitionChecksAtEndOfInferenceScope in tc.fs - // + // // Generate an Equals method implemented via IComparable if the type EXPLICITLY implements IComparable. // HOWEVER, if the type doesn't override Object.Equals already. let augmentOverrideMethodDefs = @@ -7459,7 +7343,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = yield methodImplGenerator (ilThisTy, memberMethodTypars) | _ -> () ] - + // Try to add a DefaultMemberAttribute for the 'Item' property let defaultMemberAttrs = // REVIEW: this should be based off tcaug_adhoc_list, which is in declaration order @@ -7470,8 +7354,8 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = | None -> None | Some memberInfo -> match name, memberInfo.MemberFlags.MemberKind with - | ("Item" | "op_IndexedLookup"), (SynMemberKind.PropertyGet | SynMemberKind.PropertySet) when not (isNil (ArgInfosOfPropertyVal g vref.Deref)) -> - Some( mkILCustomAttribute (g.FindSysILTypeRef "System.Reflection.DefaultMemberAttribute", [g.ilg.typ_String], [ILAttribElem.String(Some name)], []) ) + | ("Item" | "op_IndexedLookup"), (MemberKind.PropertyGet | MemberKind.PropertySet) when not (isNil (ArgInfosOfPropertyVal g vref.Deref)) -> + Some( mkILCustomAttribute g.ilg (g.FindSysILTypeRef "System.Reflection.DefaultMemberAttribute", [g.ilg.typ_String], [ILAttribElem.String(Some name)], []) ) | _ -> None) |> Option.toList @@ -7486,7 +7370,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = let permissionSets = CreatePermissionSets cenv eenv securityAttrs let secDecls = if List.isEmpty securityAttrs then emptyILSecurityDecls else mkILSecurityDecls permissionSets - + let ilDebugDisplayAttributes = [ yield! GenAttrs cenv eenv debugDisplayAttrs if generateDebugDisplayAttribute then @@ -7523,7 +7407,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = tycon.AllFieldsArray |> Array.forall (fun f -> f.IsStatic) isEmptyStruct && cenv.opts.workAroundReflectionEmitBugs && not tycon.TyparsNoRange.IsEmpty - + // Compute a bunch of useful things for each field let isCLIMutable = (TryFindFSharpBoolAttribute g g.attrib_CLIMutableAttribute tycon.Attribs = Some true) let fieldSummaries = @@ -7544,9 +7428,9 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = IsHiddenRecdField eenv.sigToImplRemapInfo (tcref.MakeNestedRecdFieldRef fspec)) let ilType = GenType cenv.amap m eenvinner.tyenv fspec.FormalType let ilFieldName = ComputeFieldName tycon fspec - + yield (useGenuineField, ilFieldName, fspec.IsMutable, fspec.IsStatic, fspec.PropertyAttribs, ilType, isPropHidden, fspec) ] - + // Generate the IL fields let ilFieldDefs = [ for (useGenuineField, ilFieldName, isFSharpMutable, isStatic, _, ilPropType, isPropHidden, fspec) in fieldSummaries do @@ -7568,9 +7452,9 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = if useGenuineField then yield! fspec.PropertyAttribs yield! fspec.FieldAttribs ] - + let ilNotSerialized = HasFSharpAttributeOpt g g.attrib_NonSerializedAttribute attribs - + let fattribs = attribs // Do not generate FieldOffset as a true CLI custom attribute, since it is implied by other corresponding CLI metadata @@ -7584,7 +7468,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = // AND the field is not mutable (because we can take the address of a mutable field). // Otherwise fields are always accessed via their property getters/setters let isFieldHidden = isPropHidden || (not useGenuineField && not isFSharpMutable) - + let extraAttribs = match tyconRepr with | TRecdRepr _ when not useGenuineField -> [ g.DebuggerBrowsableNeverAttribute ] // hide fields in records in debug display @@ -7592,7 +7476,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = let access = ComputeMemberAccess isFieldHidden let literalValue = Option.map (GenFieldInit m) fspec.LiteralValue - + let fdef = ILFieldDef(name = ilFieldName, fieldType = ilPropType, @@ -7612,7 +7496,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = if requiresExtraField then yield mkILInstanceField("__dummy", g.ilg.typ_Int32, None, ILMemberAccess.Assembly) ] - + // Generate property definitions for the fields compiled as properties let ilPropertyDefsForFields = [ for (i, (useGenuineField, _, isFSharpMutable, isStatic, propAttribs, ilPropType, _, fspec)) in Seq.indexed fieldSummaries do @@ -7631,7 +7515,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = init= None, args= [], customAttrs = mkILCustomAttrs ilFieldAttrs) ] - + let methodDefs = [ // Generate property getter methods for those fields that have properties for (useGenuineField, ilFieldName, _, isStatic, _, ilPropType, isPropHidden, fspec) in fieldSummaries do @@ -7736,7 +7620,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = // Records that are value types do not create a default constructor with CLIMutable or ComVisible if not isStructRecord && (isCLIMutable || (TryFindFSharpBoolAttribute g g.attrib_ComVisibleAttribute tycon.Attribs = Some true)) then yield mkILSimpleStorageCtor(None, Some g.ilg.typ_Object.TypeSpec, ilThisTy, [], [], reprAccess) - + if not (tycon.HasMember g "ToString" []) then yield! GenToStringMethod cenv eenv ilThisTy m | TFSharpObjectRepr r when tycon.IsFSharpDelegateTycon -> @@ -7759,12 +7643,12 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = | TUnionRepr _ when not (tycon.HasMember g "ToString" []) -> yield! GenToStringMethod cenv eenv ilThisTy m | _ -> () ] - + let ilMethods = methodDefs @ augmentOverrideMethodDefs @ abstractMethodDefs let ilProperties = mkILProperties (ilPropertyDefsForFields @ abstractPropDefs) let ilEvents = mkILEvents abstractEventDefs let ilFields = mkILFields ilFieldDefs - + let tdef, tdefDiscards = let isSerializable = (TryFindFSharpBoolAttribute g g.attrib_AutoSerializableAttribute tycon.Attribs <> Some false) @@ -7777,7 +7661,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = | TRecdRepr _ | TFSharpObjectRepr _ as tyconRepr -> let super = superOfTycon g tycon let ilBaseTy = GenType cenv.amap m eenvinner.tyenv super - + // Build a basic type definition let isObjectType = (match tyconRepr with TFSharpObjectRepr _ -> true | _ -> false) let ilAttrs = @@ -7787,7 +7671,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = then SourceConstructFlags.ObjectType elif hiddenRepr then SourceConstructFlags.RecordType ||| SourceConstructFlags.NonPublicRepresentation else SourceConstructFlags.RecordType)) ] - + // For now, generic types always use ILTypeInit.BeforeField. This is because // there appear to be some cases where ILTypeInit.OnAny causes problems for // the .NET CLR when used in conjunction with generic classes in cross-DLL @@ -7847,7 +7731,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = ILTypeDefLayout.Auto, ILDefaultPInvokeEncoding.Ansi | _ when (match ilTypeDefKind with ILTypeDefKind.ValueType -> true | _ -> false) -> - + // All structs are sequential by default // Structs with no instance fields get size 1, pack 0 if tycon.AllFieldsArray |> Array.exists (fun f -> not f.IsStatic) || @@ -7858,28 +7742,28 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = ILTypeDefLayout.Sequential { Size=None; Pack=None }, ILDefaultPInvokeEncoding.Ansi else ILTypeDefLayout.Sequential { Size=Some 1; Pack=Some 0us }, ILDefaultPInvokeEncoding.Ansi - + | _ -> ILTypeDefLayout.Auto, ILDefaultPInvokeEncoding.Ansi - + // if the type's layout is Explicit, ensure that each field has a valid offset let validateExplicit (fdef: ILFieldDef) = match fdef.Offset with // Remove field suffix "@" for pretty printing | None -> errorR(Error(FSComp.SR.ilFieldDoesNotHaveValidOffsetForStructureLayout(tdef.Name, fdef.Name.Replace("@", "")), (trimRangeToLine m))) | _ -> () - + // if the type's layout is Sequential, no offsets should be applied let validateSequential (fdef: ILFieldDef) = match fdef.Offset with | Some _ -> errorR(Error(FSComp.SR.ilFieldHasOffsetForSequentialLayout(), (trimRangeToLine m))) | _ -> () - + match tdLayout with | ILTypeDefLayout.Explicit(_) -> List.iter validateExplicit ilFieldDefs | ILTypeDefLayout.Sequential(_) -> List.iter validateSequential ilFieldDefs | _ -> () - + let tdef = tdef.WithKind(ilTypeDefKind).WithLayout(tdLayout).WithEncoding(tdEncoding) tdef, None @@ -7971,7 +7855,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = GenForceWholeFileInitializationAsPartOfCCtor cenv mgbuf lazyInitInfo tref m - + /// Generate the type for an F# exception declaration. and GenExnDef cenv mgbuf eenv m (exnc: Tycon) = let g = cenv.g @@ -8060,7 +7944,7 @@ and GenExnDef cenv mgbuf eenv m (exnc: Tycon) = HasSecurity=true } [ilCtorDefForSerialization; getObjectDataMethodForSerialization] *) -//#endif +//#endif | _ -> [] let ilTypeName = tref.Name @@ -8124,8 +8008,7 @@ let GetEmptyIlxGenEnv (g: TcGlobals) ccu = innerVals = [] sigToImplRemapInfo = [] (* "module remap info" *) withinSEH = false - isInLoop = false - initLocals = true } + isInLoop = false } type IlxGenResults = { ilTypeDefs: ILTypeDef list @@ -8166,7 +8049,7 @@ let GenerateCode (cenv, anonTypeTable, eenv, TypedAssemblyAfterOptimization impl reflectedDefinitions |> List.choose (fun ((methName, v), e) -> try let mbaseR, astExpr = QuotationTranslator.ConvReflectedDefinition qscope methName v e - + Some(mbaseR, astExpr) with | QuotationTranslator.InvalidQuotedTerm e -> warning e; None) @@ -8263,13 +8146,13 @@ let LookupGeneratedValue (amap: ImportMap) (ctxt: ExecutionContext) eenv (v: Val | Null -> Some (null, objTyp()) - | Local _ -> None + | Local _ -> None | Method _ -> None | Arg _ -> None | Env _ -> None with e -> -#if DEBUG +#if DEBUG printf "ilxGen.LookupGeneratedValue for v=%s caught exception:\n%A\n\n" v.LogicalName e #endif None @@ -8293,7 +8176,7 @@ let SetGeneratedValue (ctxt: ExecutionContext) (g: TcGlobals) eenv isForced (v: | _ -> () with e -> -#if DEBUG +#if DEBUG printf "ilxGen.SetGeneratedValue for v=%s caught exception:\n%A\n\n" v.LogicalName e #endif () @@ -8309,7 +8192,7 @@ let ClearGeneratedValue (ctxt: ExecutionContext) (g: TcGlobals) eenv (v: Val) = | _ -> () with e -> -#if DEBUG +#if DEBUG printf "ilxGen.ClearGeneratedValue for v=%s caught exception:\n%A\n\n" v.LogicalName e #endif () @@ -8325,16 +8208,16 @@ type IlxAssemblyGenerator(amap: ImportMap, tcGlobals: TcGlobals, tcVal: Constrai let casApplied = new Dictionary() /// Register a set of referenced assemblies with the ILX code generator - member _.AddExternalCcus ccus = + member __.AddExternalCcus ccus = ilxGenEnv <- AddExternalCcusToIlxGenEnv amap tcGlobals ilxGenEnv ccus /// 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, typedImplFiles) = + 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) = + member __.GenerateCode (codeGenOpts, typedAssembly, assemAttribs, moduleAttribs) = let cenv: cenv = { g=tcGlobals tcVal = tcVal @@ -8350,10 +8233,11 @@ type IlxAssemblyGenerator(amap: ImportMap, tcGlobals: TcGlobals, tcVal: Constrai GenerateCode (cenv, anonTypeTable, ilxGenEnv, typedAssembly, assemAttribs, moduleAttribs) /// Invert the compilation of the given value and clear the storage of the value - member _.ClearGeneratedValue (ctxt, v) = ClearGeneratedValue ctxt tcGlobals ilxGenEnv v + member __.ClearGeneratedValue (ctxt, v) = ClearGeneratedValue ctxt tcGlobals ilxGenEnv v /// Invert the compilation of the given value and set the storage of the value, even if it is immutable - member _.ForceSetGeneratedValue (ctxt, v, value: obj) = SetGeneratedValue ctxt tcGlobals ilxGenEnv true v value + member __.ForceSetGeneratedValue (ctxt, v, value: obj) = SetGeneratedValue ctxt tcGlobals ilxGenEnv true v value /// Invert the compilation of the given value and return its current dynamic value and its compiled System.Type - member _.LookupGeneratedValue (ctxt, v) = LookupGeneratedValue amap ctxt ilxGenEnv v + member __.LookupGeneratedValue (ctxt, v) = LookupGeneratedValue amap ctxt ilxGenEnv v + diff --git a/src/fsharp/IlxGen.fsi b/src/fsharp/IlxGen.fsi index 7e978ce7c52..8bd6bf7e348 100644 --- a/src/fsharp/IlxGen.fsi +++ b/src/fsharp/IlxGen.fsi @@ -5,6 +5,7 @@ module internal FSharp.Compiler.IlxGen open System open System.IO open System.Reflection +open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.TypedTree open FSharp.Compiler.TcGlobals diff --git a/src/fsharp/InfoReader.fs b/src/fsharp/InfoReader.fs index e04b5fb11a3..18345b408d6 100644 --- a/src/fsharp/InfoReader.fs +++ b/src/fsharp/InfoReader.fs @@ -4,22 +4,23 @@ /// Select members from a type by name, searching the type hierarchy if needed module internal FSharp.Compiler.InfoReader +open System +open System.Collections.Generic open System.Collections.Concurrent -open Internal.Utilities.Library + open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.AttributeChecking open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Features open FSharp.Compiler.Infos -open FSharp.Compiler.Syntax -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.TypedTreeBasics +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Features open FSharp.Compiler.TypeRelations /// Use the given function to select some of the member values from the members of an F# type @@ -124,11 +125,11 @@ type PropertyCollector(g, amap, m, ty, optFilter, ad) = member x.Collect(membInfo: ValMemberInfo, vref: ValRef) = match membInfo.MemberFlags.MemberKind with - | SynMemberKind.PropertyGet -> + | MemberKind.PropertyGet -> let pinfo = FSProp(g, ty, Some vref, None) if checkFilter optFilter vref.PropertyName && IsPropInfoAccessible g amap m ad pinfo then add pinfo - | SynMemberKind.PropertySet -> + | MemberKind.PropertySet -> let pinfo = FSProp(g, ty, None, Some vref) if checkFilter optFilter vref.PropertyName && IsPropInfoAccessible g amap m ad pinfo then add pinfo @@ -616,7 +617,7 @@ let rec GetIntrinsicConstructorInfosOfTypeAux (infoReader: InfoReader) m origTy |> NameMultiMap.find ".ctor" |> List.choose(fun vref -> match vref.MemberInfo with - | Some membInfo when (membInfo.MemberFlags.MemberKind = SynMemberKind.Constructor) -> Some vref + | Some membInfo when (membInfo.MemberFlags.MemberKind = MemberKind.Constructor) -> Some vref | _ -> None) |> List.map (fun x -> FSMeth(g, origTy, x, None)) ) @@ -926,147 +927,3 @@ let PropTypOfEventInfo (infoReader: InfoReader) m ad (einfo: EventInfo) = let delTy = einfo.GetDelegateType(amap, m) let argsTy = ArgsTypOfEventInfo infoReader m ad einfo mkIEventType g delTy argsTy - -/// Try to find the name of the metadata file for this external definition -let TryFindMetadataInfoOfExternalEntityRef (infoReader: InfoReader) m eref = - let g = infoReader.g - match eref with - | ERefLocal _ -> None - | ERefNonLocal nlref -> - // Generalize to get a formal signature - let formalTypars = eref.Typars m - let formalTypeInst = generalizeTypars formalTypars - let ty = TType_app(eref, formalTypeInst) - if isILAppTy g ty then - let formalTypeInfo = ILTypeInfo.FromType g ty - Some(nlref.Ccu.FileName, formalTypars, formalTypeInfo) - else None - -/// Try to find the xml doc associated with the assembly name and xml doc signature -let TryFindXmlDocByAssemblyNameAndSig (infoReader: InfoReader) assemblyName xmlDocSig = - infoReader.amap.assemblyLoader.TryFindXmlDocumentationInfo(assemblyName) - |> Option.bind (fun xmlDocInfo -> - xmlDocInfo.TryGetXmlDocBySig(xmlDocSig) - ) - -let private libFileOfEntityRef x = - match x with - | ERefLocal _ -> None - | ERefNonLocal nlref -> nlref.Ccu.FileName - -let GetXmlDocSigOfEntityRef infoReader m (eref: EntityRef) = - if eref.IsILTycon then - match TryFindMetadataInfoOfExternalEntityRef infoReader m eref with - | None -> None - | Some (ccuFileName, _, formalTypeInfo) -> Some(ccuFileName, "T:"+formalTypeInfo.ILTypeRef.FullName) - else - let ccuFileName = libFileOfEntityRef eref - let m = eref.Deref - if m.XmlDocSig = "" then - m.XmlDocSig <- XmlDocSigOfEntity eref - Some (ccuFileName, m.XmlDocSig) - -let GetXmlDocSigOfScopedValRef g (tcref: TyconRef) (vref: ValRef) = - let ccuFileName = libFileOfEntityRef tcref - let v = vref.Deref - if v.XmlDocSig = "" && v.HasDeclaringEntity then - let ap = buildAccessPath vref.TopValDeclaringEntity.CompilationPathOpt - let path = - if vref.TopValDeclaringEntity.IsModule then - let sep = if ap.Length > 0 then "." else "" - ap + sep + vref.TopValDeclaringEntity.CompiledName - else - ap - v.XmlDocSig <- XmlDocSigOfVal g false path v - Some (ccuFileName, v.XmlDocSig) - -let GetXmlDocSigOfRecdFieldRef (rfref: RecdFieldRef) = - let tcref = rfref.TyconRef - let ccuFileName = libFileOfEntityRef tcref - if rfref.RecdField.XmlDocSig = "" then - rfref.RecdField.XmlDocSig <- XmlDocSigOfProperty [tcref.CompiledRepresentationForNamedType.FullName; rfref.RecdField.Name] - Some (ccuFileName, rfref.RecdField.XmlDocSig) - -let GetXmlDocSigOfUnionCaseRef (ucref: UnionCaseRef) = - let tcref = ucref.TyconRef - let ccuFileName = libFileOfEntityRef tcref - if ucref.UnionCase.XmlDocSig = "" then - ucref.UnionCase.XmlDocSig <- XmlDocSigOfUnionCase [tcref.CompiledRepresentationForNamedType.FullName; ucref.CaseName] - Some (ccuFileName, ucref.UnionCase.XmlDocSig) - -let GetXmlDocSigOfMethInfo (infoReader: InfoReader) m (minfo: MethInfo) = - let amap = infoReader.amap - match minfo with - | FSMeth (g, _, vref, _) -> - GetXmlDocSigOfScopedValRef g minfo.DeclaringTyconRef vref - | ILMeth (g, ilminfo, _) -> - let actualTypeName = ilminfo.DeclaringTyconRef.CompiledRepresentationForNamedType.FullName - let fmtps = ilminfo.FormalMethodTypars - let genArity = if fmtps.Length=0 then "" else sprintf "``%d" fmtps.Length - - match TryFindMetadataInfoOfExternalEntityRef infoReader m ilminfo.DeclaringTyconRef with - | None -> None - | Some (ccuFileName, formalTypars, formalTypeInfo) -> - let filminfo = ILMethInfo(g, formalTypeInfo.ToType, None, ilminfo.RawMetadata, fmtps) - let args = - match ilminfo.IsILExtensionMethod with - | true -> filminfo.GetRawArgTypes(amap, m, minfo.FormalMethodInst) - | false -> filminfo.GetParamTypes(amap, m, minfo.FormalMethodInst) - - // http://msdn.microsoft.com/en-us/library/fsbx0t7x.aspx - // If the name of the item itself has periods, they are replaced by the hash-sign ('#'). - // It is assumed that no item has a hash-sign directly in its name. For example, the fully - // qualified name of the String constructor would be "System.String.#ctor". - let normalizedName = ilminfo.ILName.Replace(".", "#") - - Some (ccuFileName, "M:"+actualTypeName+"."+normalizedName+genArity+XmlDocArgsEnc g (formalTypars, fmtps) args) - | DefaultStructCtor _ -> None -#if !NO_EXTENSIONTYPING - | ProvidedMeth _ -> None -#endif - -let GetXmlDocSigOfValRef g (vref: ValRef) = - if not vref.IsLocalRef then - let ccuFileName = vref.nlr.Ccu.FileName - let v = vref.Deref - if v.XmlDocSig = "" && v.HasDeclaringEntity then - v.XmlDocSig <- XmlDocSigOfVal g false vref.TopValDeclaringEntity.CompiledRepresentationForNamedType.Name v - Some (ccuFileName, v.XmlDocSig) - else - match vref.ApparentEnclosingEntity with - | Parent tcref -> - GetXmlDocSigOfScopedValRef g tcref vref - | _ -> - None - -let GetXmlDocSigOfProp infoReader m (pinfo: PropInfo) = - let g = pinfo.TcGlobals - match pinfo with -#if !NO_EXTENSIONTYPING - | ProvidedProp _ -> None // No signature is possible. If an xml comment existed it would have been returned by PropInfo.XmlDoc in infos.fs -#endif - | FSProp _ as fspinfo -> - match fspinfo.ArbitraryValRef with - | None -> None - | Some vref -> GetXmlDocSigOfScopedValRef g pinfo.DeclaringTyconRef vref - | ILProp(ILPropInfo(_, pdef)) -> - match TryFindMetadataInfoOfExternalEntityRef infoReader m pinfo.DeclaringTyconRef with - | Some (ccuFileName, formalTypars, formalTypeInfo) -> - let filpinfo = ILPropInfo(formalTypeInfo, pdef) - Some (ccuFileName, "P:"+formalTypeInfo.ILTypeRef.FullName+"."+pdef.Name+XmlDocArgsEnc g (formalTypars, []) (filpinfo.GetParamTypes(infoReader.amap, m))) - | _ -> None - -let GetXmlDocSigOfEvent infoReader m (einfo: EventInfo) = - match einfo with - | ILEvent _ -> - match TryFindMetadataInfoOfExternalEntityRef infoReader m einfo.DeclaringTyconRef with - | Some (ccuFileName, _, formalTypeInfo) -> - Some(ccuFileName, "E:"+formalTypeInfo.ILTypeRef.FullName+"."+einfo.EventName) - | _ -> None - | _ -> None - -let GetXmlDocSigOfILFieldInfo infoReader m (finfo: ILFieldInfo) = - match TryFindMetadataInfoOfExternalEntityRef infoReader m finfo.DeclaringTyconRef with - | Some (ccuFileName, _, formalTypeInfo) -> - Some(ccuFileName, "F:"+formalTypeInfo.ILTypeRef.FullName+"."+finfo.FieldName) - | _ -> None diff --git a/src/fsharp/InfoReader.fsi b/src/fsharp/InfoReader.fsi index d8606880cec..5cfe9d95b4e 100644 --- a/src/fsharp/InfoReader.fsi +++ b/src/fsharp/InfoReader.fsi @@ -4,15 +4,14 @@ /// Select members from a type by name, searching the type hierarchy if needed module internal FSharp.Compiler.InfoReader -open Internal.Utilities.Library open FSharp.Compiler +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.Import open FSharp.Compiler.Infos -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Xml +open FSharp.Compiler.Range open FSharp.Compiler.TypedTree +open FSharp.Compiler.TcGlobals /// Try to select an F# value when querying members, and if so return a MethInfo that wraps the F# value. val TrySelectMemberVal: g:TcGlobals -> optFilter:string option -> ty:TType -> pri:ExtensionMethodPriority option -> _membInfo:'a -> vref:ValRef -> MethInfo option @@ -154,27 +153,3 @@ val IsStandardEventInfo: infoReader:InfoReader -> m:range -> ad:AccessorDomain - val ArgsTypOfEventInfo: infoReader:InfoReader -> m:range -> ad:AccessorDomain -> einfo:EventInfo -> TType val PropTypOfEventInfo: infoReader:InfoReader -> m:range -> ad:AccessorDomain -> einfo:EventInfo -> TType - -/// Try to find the name of the metadata file for this external definition -val TryFindMetadataInfoOfExternalEntityRef: infoReader:InfoReader -> m:range -> eref:EntityRef -> (string option * Typars * ILTypeInfo) option - -/// Try to find the xml doc associated with the assembly name and metadata key -val TryFindXmlDocByAssemblyNameAndSig: infoReader:InfoReader -> assemblyName: string -> xmlDocSig: string -> XmlDoc option - -val GetXmlDocSigOfEntityRef: infoReader:InfoReader -> m:range -> eref:EntityRef -> (string option * string) option - -val GetXmlDocSigOfScopedValRef: TcGlobals -> tcref:TyconRef -> vref:ValRef -> (string option * string) option - -val GetXmlDocSigOfRecdFieldRef: rfref:RecdFieldRef -> (string option * string) option - -val GetXmlDocSigOfUnionCaseRef: ucref:UnionCaseRef -> (string option * string) option - -val GetXmlDocSigOfMethInfo: infoReader: InfoReader -> m:range -> minfo:MethInfo -> (string option * string) option - -val GetXmlDocSigOfValRef: TcGlobals -> vref: ValRef -> (string option * string) option - -val GetXmlDocSigOfProp: infoReader:InfoReader -> m:range -> pinfo:PropInfo -> (string option * string) option - -val GetXmlDocSigOfEvent: infoReader:InfoReader -> m:range -> einfo:EventInfo -> (string option * string) option - -val GetXmlDocSigOfILFieldInfo: infoReader:InfoReader -> m:range -> finfo:ILFieldInfo -> (string option * string) option \ No newline at end of file diff --git a/src/fsharp/InnerLambdasToTopLevelFuncs.fs b/src/fsharp/InnerLambdasToTopLevelFuncs.fs index 7721d0ccbac..baa5e13240e 100644 --- a/src/fsharp/InnerLambdasToTopLevelFuncs.fs +++ b/src/fsharp/InnerLambdasToTopLevelFuncs.fs @@ -2,23 +2,22 @@ module internal FSharp.Compiler.InnerLambdasToTopLevelFuncs -open Internal.Utilities.Collections -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras +open FSharp.Compiler +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.CompilerGlobalState -open FSharp.Compiler.Detuple.GlobalUsageAnalysis open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Layout -open FSharp.Compiler.Text.LayoutRender -open FSharp.Compiler.Xml +open FSharp.Compiler.Detuple.GlobalUsageAnalysis +open FSharp.Compiler.Layout +open FSharp.Compiler.Lib +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TypedTreeOps.DebugPrint open FSharp.Compiler.TcGlobals +open FSharp.Compiler.XmlDoc let verboseTLR = false @@ -336,7 +335,7 @@ type ReqdItemsForDefn = { reqdTypars: Zset reqdItems: Zset - m: range + m: Range.range } member env.ReqdSubEnvs = [ for x in env.reqdItems do match x with | ReqdSubEnv f -> yield f | ReqdVal _ -> () ] @@ -675,7 +674,7 @@ type PackedReqdItems = // step3: FlatEnvPacks //------------------------------------------------------------------------- -exception AbortTLR of range +exception AbortTLR of Range.range /// A naive packing of environments. /// Chooses to pass all env values as explicit args (no tupling). @@ -766,7 +765,7 @@ let FlatEnvPacks g fclassM topValS declist (reqdItemsMap: Zmap List.map (fun (subv, subaenv) -> mkBind DebugPointAtBinding.NoneAtInvisible subaenv (aenvExprFor subv)) + vaenvs |> List.map (fun (subv, subaenv) -> mkBind NoDebugPointAtInvisibleBinding subaenv (aenvExprFor subv)) List.map unpackCarrier (Zmap.toList cmap) @ List.collect unpackSubenv env.ReqdSubEnvs diff --git a/src/fsharp/InternalCollections.fsi b/src/fsharp/InternalCollections.fsi index 3cd62bae5fa..402b4de20c8 100755 --- a/src/fsharp/InternalCollections.fsi +++ b/src/fsharp/InternalCollections.fsi @@ -2,12 +2,12 @@ namespace Internal.Utilities.Collections -/// Simple aging lookup table. When a member is accessed it's -/// moved to the top of the list and when there are too many elements -/// the least-recently-accessed element falls of the end. -/// -/// - areSimilar: Keep at most once association for two similar keys (as given by areSimilar) -type internal AgedLookup<'Token, 'Key, 'Value when 'Value : not struct> = + /// Simple aging lookup table. When a member is accessed it's + /// moved to the top of the list and when there are too many elements + /// the least-recently-accessed element falls of the end. + /// + /// - areSimilar: Keep at most once association for two similar keys (as given by areSimilar) + type internal AgedLookup<'Token, 'Key, 'Value when 'Value : not struct> = new : keepStrongly:int * areSimilar:('Key * 'Key -> bool) * ?requiredToKeep:('Value -> bool) @@ -39,16 +39,16 @@ type internal AgedLookup<'Token, 'Key, 'Value when 'Value : not struct> = /// Resize member Resize : 'Token * newKeepStrongly: int * ?newKeepMax : int -> unit -/// Simple priority caching for a small number of key/value associations. -/// This cache may age-out results that have been Set by the caller. -/// Because of this, the caller must be able to tolerate values -/// that aren't what was originally passed to the Set function. -/// -/// Concurrency: This collection is thread-safe, though concurrent use may result in different -/// threads seeing different live sets of cached items. -/// -/// - areSimilar: Keep at most once association for two similar keys (as given by areSimilar) -type internal MruCache<'Token, 'Key,'Value when 'Value : not struct> = + /// Simple priority caching for a small number of key/value associations. + /// This cache may age-out results that have been Set by the caller. + /// Because of this, the caller must be able to tolerate values + /// that aren't what was originally passed to the Set function. + /// + /// Concurrency: This collection is thread-safe, though concurrent use may result in different + /// threads seeing different live sets of cached items. + /// + /// - areSimilar: Keep at most once association for two similar keys (as given by areSimilar) + type internal MruCache<'Token, 'Key,'Value when 'Value : not struct> = new : keepStrongly:int * areSame:('Key * 'Key -> bool) * ?isStillValid:('Key * 'Value -> bool) diff --git a/src/fsharp/LanguageFeatures.fs b/src/fsharp/LanguageFeatures.fs index d3d52796c9c..96c4f6baa5c 100644 --- a/src/fsharp/LanguageFeatures.fs +++ b/src/fsharp/LanguageFeatures.fs @@ -36,10 +36,6 @@ type LanguageFeature = | StringInterpolation | OverloadsForCustomOperations | ExpandedMeasurables - | StructActivePattern - | PrintfBinaryFormat - | UseBindingValueDiscard - | NonVariablePatternsToRightOfAsPatterns /// LanguageVersion management type LanguageVersion (specifiedVersionAsString) = @@ -81,10 +77,6 @@ type LanguageVersion (specifiedVersionAsString) = LanguageFeature.OverloadsForCustomOperations, previewVersion LanguageFeature.ExpandedMeasurables, previewVersion LanguageFeature.FromEndSlicing, previewVersion - LanguageFeature.StructActivePattern, previewVersion - LanguageFeature.PrintfBinaryFormat, previewVersion - LanguageFeature.UseBindingValueDiscard, previewVersion - LanguageFeature.NonVariablePatternsToRightOfAsPatterns, previewVersion ] let specified = @@ -158,10 +150,6 @@ type LanguageVersion (specifiedVersionAsString) = | LanguageFeature.StringInterpolation -> FSComp.SR.featureStringInterpolation() | LanguageFeature.OverloadsForCustomOperations -> FSComp.SR.featureOverloadsForCustomOperations() | LanguageFeature.ExpandedMeasurables -> FSComp.SR.featureExpandedMeasurables() - | LanguageFeature.StructActivePattern -> FSComp.SR.featureStructActivePattern() - | LanguageFeature.PrintfBinaryFormat -> FSComp.SR.featurePrintfBinaryFormat() - | LanguageFeature.UseBindingValueDiscard -> FSComp.SR.featureDiscardUseValue() - | LanguageFeature.NonVariablePatternsToRightOfAsPatterns -> FSComp.SR.featureNonVariablePatternsToRightOfAsPatterns() /// Get a version string associated with the given feature. member _.GetFeatureVersionString feature = diff --git a/src/fsharp/LanguageFeatures.fsi b/src/fsharp/LanguageFeatures.fsi index 8ca05f2cede..b914016d9a5 100644 --- a/src/fsharp/LanguageFeatures.fsi +++ b/src/fsharp/LanguageFeatures.fsi @@ -24,10 +24,6 @@ type LanguageFeature = | StringInterpolation | OverloadsForCustomOperations | ExpandedMeasurables - | StructActivePattern - | PrintfBinaryFormat - | UseBindingValueDiscard - | NonVariablePatternsToRightOfAsPatterns /// LanguageVersion management type LanguageVersion = diff --git a/src/fsharp/LegacyHostedCompilerForTesting.fs b/src/fsharp/LegacyHostedCompilerForTesting.fs index 480eb2612d1..692704a1650 100644 --- a/src/fsharp/LegacyHostedCompilerForTesting.fs +++ b/src/fsharp/LegacyHostedCompilerForTesting.fs @@ -3,18 +3,17 @@ // This component is used by the 'fsharpqa' tests for faster in-memory compilation. It should be removed and the // proper compiler service API used instead. -namespace FSharp.Compiler.CodeAnalysis.Hosted +namespace Legacy.FSharp.Compiler.Hosted open System open System.IO open System.Text.RegularExpressions -open FSharp.Compiler.Diagnostics open FSharp.Compiler.Driver open FSharp.Compiler.ErrorLogger open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerDiagnostics open FSharp.Compiler.AbstractIL.ILBinaryReader -open Internal.Utilities.Library +open FSharp.Compiler.AbstractIL.Internal.Library /// build issue location type internal Location = @@ -91,16 +90,16 @@ type internal FscCompiler(legacyReferenceResolver) = /// converts short and long issue types to the same CompilationIssue representation let convert issue : CompilationIssue = match issue with - | Diagnostic.Short(severity, text) -> + | Diagnostic.Short(isError, text) -> { Location = emptyLocation Code = "" Subcategory = "" File = "" Text = text - Type = if (severity = FSharpDiagnosticSeverity.Error) then CompilationIssueType.Error else CompilationIssueType.Warning + Type = if isError then CompilationIssueType.Error else CompilationIssueType.Warning } - | Diagnostic.Long(severity, details) -> + | Diagnostic.Long(isError, details) -> let loc, file = match details.Location with | Some l when not l.IsEmpty -> @@ -117,7 +116,7 @@ type internal FscCompiler(legacyReferenceResolver) = Subcategory = details.Canonical.Subcategory File = file Text = details.Message - Type = if (severity = FSharpDiagnosticSeverity.Error) then CompilationIssueType.Error else CompilationIssueType.Warning + Type = if isError then CompilationIssueType.Error else CompilationIssueType.Warning } /// test if --test:ErrorRanges flag is set diff --git a/src/fsharp/LegacyMSBuildReferenceResolver.fs b/src/fsharp/LegacyMSBuildReferenceResolver.fs index ab60534c718..b7bb5e505ea 100644 --- a/src/fsharp/LegacyMSBuildReferenceResolver.fs +++ b/src/fsharp/LegacyMSBuildReferenceResolver.fs @@ -1,15 +1,16 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module FSharp.Compiler.CodeAnalysis.LegacyMSBuildReferenceResolver +module LegacyMSBuildReferenceResolver open System open System.IO open System.Reflection - open Internal.Utilities.Library + open FSharp.Compiler.AbstractIL.Internal.Library + open FSharp.Compiler.ReferenceResolver open Microsoft.Build.Tasks open Microsoft.Build.Utilities open Microsoft.Build.Framework - open FSharp.Compiler.IO + open FSharp.Compiler // Reflection wrapper for properties type System.Object with @@ -26,11 +27,13 @@ module FSharp.Compiler.CodeAnalysis.LegacyMSBuildReferenceResolver | s -> s PF + @"\Reference Assemblies\Microsoft\Framework\.NETFramework" + /// When targeting .NET 2.0-3.5 on Windows, we expand the {WindowsFramework} and {ReferenceAssemblies} paths manually let internal ReplaceVariablesForLegacyFxOnWindows(dirs: string list) = let windowsFramework = Environment.GetEnvironmentVariable("windir")+ @"\Microsoft.NET\Framework" let referenceAssemblies = DotNetFrameworkReferenceAssembliesRootDirectory dirs |> List.map(fun d -> d.Replace("{WindowsFramework}",windowsFramework).Replace("{ReferenceAssemblies}",referenceAssemblies)) + // ATTENTION!: the following code needs to be updated every time we are switching to the new MSBuild version because new .NET framework version was released // 1. List of frameworks @@ -129,7 +132,7 @@ module FSharp.Compiler.CodeAnalysis.LegacyMSBuildReferenceResolver let v = if dotNetVersion.StartsWith("v") then dotNetVersion.Substring(1) else dotNetVersion let frameworkName = new System.Runtime.Versioning.FrameworkName(".NETFramework", new Version(v)) match ToolLocationHelper.GetPathToReferenceAssemblies(frameworkName) |> Seq.tryHead with - | Some p -> if FileSystem.DirectoryExistsShim(p) then true else false + | Some p -> if Directory.Exists(p) then true else false | None -> false with _ -> false else false @@ -224,7 +227,7 @@ module FSharp.Compiler.CodeAnalysis.LegacyMSBuildReferenceResolver + lineIfExists fusionName /// Perform assembly resolution by instantiating the ResolveAssembly task directly from the MSBuild SDK. - let ResolveCore(resolutionEnvironment: LegacyResolutionEnvironment, + let ResolveCore(resolutionEnvironment: ResolutionEnvironment, references:(string*(*baggage*)string)[], targetFrameworkVersion: string, targetFrameworkDirectories: string list, @@ -249,15 +252,15 @@ module FSharp.Compiler.CodeAnalysis.LegacyMSBuildReferenceResolver let engine = { new IBuildEngine with - member _.BuildProjectFile(projectFileName, targetNames, globalProperties, targetOutputs) = true - member _.LogCustomEvent(e) = protect (fun () -> logMessage e.Message) - member _.LogErrorEvent(e) = protect (fun () -> logDiagnostic true e.Code e.Message) - member _.LogMessageEvent(e) = protect (fun () -> logMessage e.Message) - member _.LogWarningEvent(e) = protect (fun () -> logDiagnostic false e.Code e.Message) - member _.ColumnNumberOfTaskNode with get() = 1 - member _.LineNumberOfTaskNode with get() = 1 - member _.ContinueOnError with get() = true - member _.ProjectFileOfTaskNode with get() = "" } + member __.BuildProjectFile(projectFileName, targetNames, globalProperties, targetOutputs) = true + member __.LogCustomEvent(e) = protect (fun () -> logMessage e.Message) + member __.LogErrorEvent(e) = protect (fun () -> logDiagnostic true e.Code e.Message) + member __.LogMessageEvent(e) = protect (fun () -> logMessage e.Message) + member __.LogWarningEvent(e) = protect (fun () -> logDiagnostic false e.Code e.Message) + member __.ColumnNumberOfTaskNode with get() = 1 + member __.LineNumberOfTaskNode with get() = 1 + member __.ContinueOnError with get() = true + member __.ProjectFileOfTaskNode with get() = "" } // Derive the target framework directory if none was supplied. let targetFrameworkDirectories = @@ -278,9 +281,9 @@ module FSharp.Compiler.CodeAnalysis.LegacyMSBuildReferenceResolver [| // When compiling scripts using fsc.exe, for some reason we have always historically put TargetFrameworkDirectory first // It is unclear why. This is the only place we look at the 'isdifference between ResolutionEnvironment.EditingOrCompilation and ResolutionEnvironment.EditingTime. match resolutionEnvironment with - | LegacyResolutionEnvironment.EditingOrCompilation false -> yield "{TargetFrameworkDirectory}" - | LegacyResolutionEnvironment.EditingOrCompilation true - | LegacyResolutionEnvironment.CompilationAndEvaluation -> () + | ResolutionEnvironment.EditingOrCompilation false -> yield "{TargetFrameworkDirectory}" + | ResolutionEnvironment.EditingOrCompilation true + | ResolutionEnvironment.CompilationAndEvaluation -> () // Quick-resolve straight to filename first if allowRawFileName then @@ -290,9 +293,9 @@ module FSharp.Compiler.CodeAnalysis.LegacyMSBuildReferenceResolver yield implicitIncludeDir // Usually the project directory match resolutionEnvironment with - | LegacyResolutionEnvironment.EditingOrCompilation true - | LegacyResolutionEnvironment.CompilationAndEvaluation -> yield "{TargetFrameworkDirectory}" - | LegacyResolutionEnvironment.EditingOrCompilation false -> () + | ResolutionEnvironment.EditingOrCompilation true + | ResolutionEnvironment.CompilationAndEvaluation -> yield "{TargetFrameworkDirectory}" + | ResolutionEnvironment.EditingOrCompilation false -> () yield registry yield "{AssemblyFolders}" @@ -317,7 +320,7 @@ module FSharp.Compiler.CodeAnalysis.LegacyMSBuildReferenceResolver #if ENABLE_MONO_SUPPORT // The properties TargetedRuntimeVersion and CopyLocalDependenciesWhenParentReferenceInGac // are not available on Mono. So we only set them if available (to avoid a compile-time dependency). - if not runningOnMono then + if not FSharp.Compiler.AbstractIL.Internal.Utils.runningOnMono then typeof.InvokeMember("TargetedRuntimeVersion",(BindingFlags.Instance ||| BindingFlags.SetProperty ||| BindingFlags.Public),null,rar,[| box targetedRuntimeVersionValue |]) |> ignore typeof.InvokeMember("CopyLocalDependenciesWhenParentReferenceInGac",(BindingFlags.Instance ||| BindingFlags.SetProperty ||| BindingFlags.Public),null,rar,[| box true |]) |> ignore #else @@ -328,7 +331,7 @@ module FSharp.Compiler.CodeAnalysis.LegacyMSBuildReferenceResolver let succeeded = rar.Execute() if not succeeded then - raise LegacyResolutionFailure + raise ResolutionFailure let resolvedFiles = [| for p in rar.ResolvedFiles -> @@ -342,12 +345,12 @@ module FSharp.Compiler.CodeAnalysis.LegacyMSBuildReferenceResolver resolvedFiles let getResolver () = - { new ILegacyReferenceResolver with - member _.HighestInstalledNetFrameworkVersion() = HighestInstalledRefAssembliesOrDotNETFramework() - member _.DotNetFrameworkReferenceAssembliesRootDirectory = DotNetFrameworkReferenceAssembliesRootDirectory + { new ReferenceResolver.Resolver with + member __.HighestInstalledNetFrameworkVersion() = HighestInstalledRefAssembliesOrDotNETFramework() + member __.DotNetFrameworkReferenceAssembliesRootDirectory = DotNetFrameworkReferenceAssembliesRootDirectory /// Perform the resolution on rooted and unrooted paths, and then combine the results. - member _.Resolve(resolutionEnvironment, references, targetFrameworkVersion, targetFrameworkDirectories, targetProcessorArchitecture, + member __.Resolve(resolutionEnvironment, references, targetFrameworkVersion, targetFrameworkDirectories, targetProcessorArchitecture, fsharpCoreDir, explicitIncludeDirs, implicitIncludeDir, logMessage, logDiagnostic) = // The {RawFileName} target is 'dangerous', in the sense that is uses Directory.GetCurrentDirectory() to resolve unrooted file paths. @@ -387,4 +390,3 @@ module FSharp.Compiler.CodeAnalysis.LegacyMSBuildReferenceResolver // now unify the two sets of results Array.concat [| rootedResults; unrootedResults |] } - |> LegacyReferenceResolver diff --git a/src/fsharp/LegacyMSBuildReferenceResolver.fsi b/src/fsharp/LegacyMSBuildReferenceResolver.fsi index a3d17795009..1b4aa72858d 100644 --- a/src/fsharp/LegacyMSBuildReferenceResolver.fsi +++ b/src/fsharp/LegacyMSBuildReferenceResolver.fsi @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. +module LegacyMSBuildReferenceResolver -[] -module public FSharp.Compiler.CodeAnalysis.LegacyMSBuildReferenceResolver +open FSharp.Compiler -val getResolver: unit -> LegacyReferenceResolver \ No newline at end of file +val getResolver: unit -> ReferenceResolver.Resolver \ No newline at end of file diff --git a/src/fsharp/LexFilter.fs b/src/fsharp/LexFilter.fs index 152ff46a1af..1f672f5fc4d 100644 --- a/src/fsharp/LexFilter.fs +++ b/src/fsharp/LexFilter.fs @@ -6,7 +6,7 @@ module internal FSharp.Compiler.LexFilter open Internal.Utilities.Text.Lexing open FSharp.Compiler -open Internal.Utilities.Library +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features @@ -2227,13 +2227,6 @@ type LexFilterImpl (lightStatus: LightSyntaxStatus, compilingFsLib, lexer, lexbu and rulesForBothSoftWhiteAndHardWhite(tokenTup: TokenTup) = match tokenTup.Token with - | HASH_IDENT (ident) -> - let hashPos = new LexbufState(tokenTup.StartPos, tokenTup.StartPos.ShiftColumnBy(1), false) - let identPos = new LexbufState(tokenTup.StartPos.ShiftColumnBy(1), tokenTup.EndPos, false) - delayToken(new TokenTup(IDENT(ident), identPos, tokenTup.LastTokenPos)) - delayToken(new TokenTup(HASH, hashPos, tokenTup.LastTokenPos)) - true - // Insert HIGH_PRECEDENCE_PAREN_APP if needed | IDENT _ when (nextTokenIsAdjacentLParenOrLBrack tokenTup).IsSome -> let dotTokenTup = peekNextTokenTup() @@ -2367,9 +2360,9 @@ type LexFilterImpl (lightStatus: LightSyntaxStatus, compilingFsLib, lexer, lexbu // Part VI. Publish the new lexer function. //-------------------------------------------------------------------------- - member _.LexBuffer = lexbuf + member __.LexBuffer = lexbuf - member _.GetToken() = + member __.GetToken() = if not initialized then let _firstTokenTup = peekInitial() () diff --git a/src/fsharp/Logger.fs b/src/fsharp/Logger.fs index e03853492f3..8923464ed72 100644 --- a/src/fsharp/Logger.fs +++ b/src/fsharp/Logger.fs @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.Diagnostics +namespace FSharp.Compiler open System.Diagnostics.Tracing open System @@ -77,11 +77,11 @@ module Logger = let LogBlock(functionId) = FSharpCompilerEventSource.Instance.BlockStart(functionId) { new IDisposable with - member _.Dispose() = + member __.Dispose() = FSharpCompilerEventSource.Instance.BlockStop(functionId) } let LogBlockMessage message functionId = FSharpCompilerEventSource.Instance.BlockMessageStart(message, functionId) { new IDisposable with - member _.Dispose() = + member __.Dispose() = FSharpCompilerEventSource.Instance.BlockMessageStop(message, functionId) } diff --git a/src/fsharp/Logger.fsi b/src/fsharp/Logger.fsi index fcaffdc642b..40ef9025bc6 100644 --- a/src/fsharp/Logger.fsi +++ b/src/fsharp/Logger.fsi @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.Diagnostics +namespace FSharp.Compiler open System diff --git a/src/fsharp/LowerCallsAndSeqs.fs b/src/fsharp/LowerCallsAndSeqs.fs index 3acc080f9b9..050f3cfa040 100644 --- a/src/fsharp/LowerCallsAndSeqs.fs +++ b/src/fsharp/LowerCallsAndSeqs.fs @@ -2,19 +2,17 @@ module internal FSharp.Compiler.LowerCallsAndSeqs -open Internal.Utilities.Collections -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.ErrorLogger open FSharp.Compiler.InfoReader open FSharp.Compiler.Infos +open FSharp.Compiler.Lib open FSharp.Compiler.MethodCalls -open FSharp.Compiler.Syntax -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.TypeRelations +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps @@ -65,7 +63,7 @@ let LowerImplFile g assembly = let mkLambdaNoType g m uv e = mkLambda m uv (e, tyOfExpr g e) -let callNonOverloadedILMethod g amap m methName ty args = +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)) | ILMeth(g, ilMethInfo, _) :: _ -> @@ -118,105 +116,6 @@ let (|Seq|_|) g expr = let IsPossibleSequenceExpr g overallExpr = match overallExpr with Seq g _ -> true | _ -> false -/// Detect a 'yield x' within a 'seq { ... }' -let (|SeqYield|_|) g expr = - match expr with - | ValApp g g.seq_singleton_vref (_, [arg], m) -> Some (arg, m) - | _ -> None - -/// Detect a 'expr; expr' within a 'seq { ... }' -let (|SeqAppend|_|) g expr = - match expr with - | ValApp g g.seq_append_vref (_, [arg1; arg2], m) -> Some (arg1, arg2, m) - | _ -> None - -/// Detect a 'while gd do expr' within a 'seq { ... }' -let (|SeqWhile|_|) g expr = - match expr with - | ValApp g g.seq_generated_vref (_, [Expr.Lambda (_, _, _, [dummyv], gd, _, _);arg2], m) - when not (isVarFreeInExpr dummyv gd) -> - - // The debug point for 'while' is attached to the second argument, see TcSequenceExpression - let mWhile = arg2.Range - Some (gd, arg2, mWhile, m) - - | _ -> - None - -let (|SeqTryFinally|_|) g expr = - match expr with - | ValApp g g.seq_finally_vref (_, [arg1;(Expr.Lambda (_, _, _, [dummyv], compensation, _, _) as arg2)], m) - when not (isVarFreeInExpr dummyv compensation) -> - - // The debug point for 'try' and 'finally' are attached to the first and second arguments - // respectively, see TcSequenceExpression - let mTry = arg1.Range - let mFinally = arg2.Range - - Some (arg1, compensation, mTry, mFinally, m) - - | _ -> - None - -let (|SeqUsing|_|) g expr = - match expr with - | ValApp g g.seq_using_vref ([_;_;elemTy], [resource;Expr.Lambda (_, _, _, [v], body, mBind, _)], m) -> - Some (resource, v, body, elemTy, mBind, m) - | _ -> - None - -let (|SeqForEach|_|) g expr = - match expr with - // Nested for loops are represented by calls to Seq.collect - | ValApp g g.seq_collect_vref ([_inpElemTy;_enumty2;genElemTy], [Expr.Lambda (_, _, _, [v], body, mFor, _); inp], m) -> - // The debug point mFor at the 'for' gets attached to the first argument, see TcSequenceExpression - Some (inp, v, body, genElemTy, mFor, m) - - // "for x in e -> e2" is converted to a call to Seq.map by the F# type checker. This could be removed, except it is also visible in F# quotations. - | ValApp g g.seq_map_vref ([_inpElemTy;genElemTy], [Expr.Lambda (_, _, _, [v], body, mFor, _); inp], m) -> - // The debug point mFor at the 'for' gets attached to the first argument, see TcSequenceExpression - Some (inp, v, mkCallSeqSingleton g body.Range genElemTy body, genElemTy, mFor, m) - - | _ -> None - -let (|SeqDelay|_|) g expr = - match expr with - | ValApp g g.seq_delay_vref ([elemTy], [Expr.Lambda (_, _, _, [v], e, _, _)], _m) - when not (isVarFreeInExpr v e) -> - Some (e, elemTy) - | _ -> None - -let (|SeqEmpty|_|) g expr = - match expr with - | ValApp g g.seq_empty_vref (_, [], m) -> Some (m) - | _ -> None - -let (|SeqToList|_|) g expr = - match expr with - | ValApp g g.seq_to_list_vref (_, [seqExpr], m) -> Some (seqExpr, m) - | _ -> None - -let (|SeqToArray|_|) g expr = - match expr with - | ValApp g g.seq_to_array_vref (_, [seqExpr], m) -> Some (seqExpr, m) - | _ -> None - -let tyConfirmsToSeq g ty = - match tryTcrefOfAppTy g ty with - | ValueSome tcref -> - tyconRefEq g tcref g.tcref_System_Collections_Generic_IEnumerable - | _ -> false - -let (|SeqElemTy|_|) g amap m ty = - match SearchEntireHierarchyOfType (tyConfirmsToSeq g) g amap m ty with - | None -> - // printfn "FAILED - yield! did not yield a sequence! %s" (stringOfRange m) - None - | Some seqTy -> - // printfn "found yield!" - let inpElemTy = List.head (argsOfAppTy g seqTy) - Some inpElemTy - /// Analyze a TAST expression to detect the elaborated form of a sequence expression. /// Then compile it to a state machine represented as a TAST containing goto, return and label nodes. /// The returned state machine will also contain references to state variables (from internal 'let' bindings), @@ -228,6 +127,64 @@ let (|SeqElemTy|_|) g amap m ty = /// We then allocate an integer pc for each state label and proceed with the second phase, which builds two related state machine /// expressions: one for 'MoveNext' and one for 'Dispose'. let ConvertSequenceExprToObject g amap overallExpr = + /// Detect a 'yield x' within a 'seq { ... }' + let (|SeqYield|_|) expr = + match expr with + | ValApp g g.seq_singleton_vref (_, [arg], m) -> Some (arg, m) + | _ -> None + + /// Detect a 'expr; expr' within a 'seq { ... }' + let (|SeqAppend|_|) expr = + match expr with + | ValApp g g.seq_append_vref (_, [arg1; arg2], m) -> Some (arg1, arg2, m) + | _ -> None + + /// Detect a 'while gd do expr' within a 'seq { ... }' + let (|SeqWhile|_|) expr = + match expr with + | ValApp g g.seq_generated_vref (_, [Expr.Lambda (_, _, _, [dummyv], gd, _, _);arg2], m) + when not (isVarFreeInExpr dummyv gd) -> + Some (gd, arg2, m) + | _ -> + None + + let (|SeqTryFinally|_|) expr = + match expr with + | ValApp g g.seq_finally_vref (_, [arg1;Expr.Lambda (_, _, _, [dummyv], compensation, _, _)], m) + when not (isVarFreeInExpr dummyv compensation) -> + Some (arg1, compensation, m) + | _ -> + None + + let (|SeqUsing|_|) expr = + match expr with + | ValApp g g.seq_using_vref ([_;_;elemTy], [resource;Expr.Lambda (_, _, _, [v], body, _, _)], m) -> + Some (resource, v, body, elemTy, m) + | _ -> + None + + let (|SeqFor|_|) expr = + match expr with + // Nested for loops are represented by calls to Seq.collect + | ValApp g g.seq_collect_vref ([_inpElemTy;_enumty2;genElemTy], [Expr.Lambda (_, _, _, [v], body, _, _); inp], m) -> + Some (inp, v, body, genElemTy, m) + // "for x in e -> e2" is converted to a call to Seq.map by the F# type checker. This could be removed, except it is also visible in F# quotations. + | ValApp g g.seq_map_vref ([_inpElemTy;genElemTy], [Expr.Lambda (_, _, _, [v], body, _, _); inp], m) -> + Some (inp, v, mkCallSeqSingleton g body.Range genElemTy body, genElemTy, m) + | _ -> None + + let (|SeqDelay|_|) expr = + match expr with + | ValApp g g.seq_delay_vref ([elemTy], [Expr.Lambda (_, _, _, [v], e, _, _)], _m) + when not (isVarFreeInExpr v e) -> + Some (e, elemTy) + | _ -> None + + let (|SeqEmpty|_|) expr = + match expr with + | ValApp g g.seq_empty_vref (_, [], m) -> Some (m) + | _ -> None + /// Implement a decision to represent a 'let' binding as a non-escaping local variable (rather than a state machine variable) let RepresentBindingAsLocal (bind: Binding) res2 m = if verbose then @@ -250,7 +207,7 @@ let ConvertSequenceExprToObject g amap overallExpr = let (TBind(v, e, sp)) = bind let sp, spm = match sp with - | DebugPointAtBinding.Yes m -> DebugPointAtSequential.Both, m + | DebugPointAtBinding m -> DebugPointAtSequential.Both, m | _ -> DebugPointAtSequential.StmtOnly, e.Range let vref = mkLocalValRef v { res2 with @@ -288,7 +245,7 @@ let ConvertSequenceExprToObject g amap overallExpr = expr = match expr with - | SeqYield g (e, m) -> + | SeqYield(e, m) -> // printfn "found Seq.singleton" //this.pc <- NEXT //curr <- e @@ -297,9 +254,9 @@ let ConvertSequenceExprToObject g amap overallExpr = let label = IL.generateCodeLabel() Some { phase2 = (fun (pcVar, currVar, _nextv, pcMap) -> let generate = - mkSequential DebugPointAtSequential.Both m + mkCompGenSequential m (mkValSet m pcVar (mkInt32 g m pcMap.[label])) - (mkCompGenSequential m + (mkSequential DebugPointAtSequential.Both m (mkValSet m currVar e) (mkCompGenSequential m (Expr.Op (TOp.Return, [], [mkOne g m], m)) @@ -317,12 +274,12 @@ let ConvertSequenceExprToObject g amap overallExpr = asyncVars = emptyFreeVars } - | SeqDelay g (delayedExpr, _elemTy) -> + | SeqDelay(delayedExpr, _elemTy) -> // printfn "found Seq.delay" // note, using 'isWholeExpr' here prevents 'seq { yield! e }' and 'seq { 0 .. 1000 }' from being compiled ConvertSeqExprCode isWholeExpr isTailCall noDisposeContinuationLabel currentDisposeContinuationLabel delayedExpr - | SeqAppend g (e1, e2, m) -> + | SeqAppend(e1, e2, m) -> // printfn "found Seq.append" let res1 = ConvertSeqExprCode false false noDisposeContinuationLabel currentDisposeContinuationLabel e1 let res2 = ConvertSeqExprCode false isTailCall noDisposeContinuationLabel currentDisposeContinuationLabel e2 @@ -339,7 +296,7 @@ let ConvertSequenceExprToObject g amap overallExpr = Some { phase2 = (fun ctxt -> let generate1, dispose1, checkDispose1 = res1.phase2 ctxt let generate2, dispose2, checkDispose2 = res2.phase2 ctxt - let generate = mkSequential DebugPointAtSequential.Both m generate1 generate2 + let generate = mkCompGenSequential m generate1 generate2 // Order shouldn't matter here, since disposals actions are linked together by goto's (each ends in a goto). // However leaving as is for now. let dispose = mkCompGenSequential m dispose2 dispose1 @@ -352,7 +309,7 @@ let ConvertSequenceExprToObject g amap overallExpr = | _ -> None - | SeqWhile g (guardExpr, bodyExpr, mWhile, m) -> + | SeqWhile(guardExpr, bodyExpr, m) -> // printfn "found Seq.while" let resBody = ConvertSeqExprCode false false noDisposeContinuationLabel currentDisposeContinuationLabel bodyExpr match resBody with @@ -365,7 +322,7 @@ let ConvertSequenceExprToObject g amap overallExpr = Some { phase2 = (fun ctxt -> let generate2, dispose2, checkDispose2 = res2.phase2 ctxt - let generate = mkWhile g (DebugPointAtWhile.Yes mWhile, NoSpecialWhileLoopMarker, guardExpr, generate2, m) + let generate = mkWhile g (DebugPointAtWhile.Yes guardExpr.Range, NoSpecialWhileLoopMarker, guardExpr, generate2, m) let dispose = dispose2 let checkDispose = checkDispose2 generate, dispose, checkDispose) @@ -376,16 +333,16 @@ let ConvertSequenceExprToObject g amap overallExpr = | _ -> None - | SeqUsing g (resource, v, body, elemTy, mBind, m) -> + | SeqUsing(resource, v, body, elemTy, m) -> // printfn "found Seq.using" let reduction = - mkLet (DebugPointAtBinding.Yes mBind) m v resource + mkLet (DebugPointAtBinding body.Range) m v resource (mkCallSeqFinally g m elemTy body (mkUnitDelayLambda g m (mkCallDispose g m v.Type (exprForVal m v)))) ConvertSeqExprCode false isTailCall noDisposeContinuationLabel currentDisposeContinuationLabel reduction - | SeqForEach g (inp, v, body, genElemTy, mFor, m) -> + | SeqFor(inp, v, body, genElemTy, m) -> // printfn "found Seq.for" let inpElemTy = v.Type let inpEnumTy = mkIEnumeratorTy g inpElemTy @@ -395,14 +352,14 @@ let ConvertSequenceExprToObject g amap overallExpr = // let v = enum.Current // body ]] let reduction = - mkCallSeqUsing g m inpEnumTy genElemTy (callNonOverloadedILMethod g amap m "GetEnumerator" (mkSeqTy g inpElemTy) [inp]) + mkCallSeqUsing g m inpEnumTy genElemTy (callNonOverloadedMethod g amap m "GetEnumerator" (mkSeqTy g inpElemTy) [inp]) (mkLambdaNoType g m enumv - (mkCallSeqGenerated g m genElemTy (mkUnitDelayLambda g mFor (callNonOverloadedILMethod g amap m "MoveNext" inpEnumTy [enume])) - (mkInvisibleLet m v (callNonOverloadedILMethod g amap m "get_Current" inpEnumTy [enume]) + (mkCallSeqGenerated g m genElemTy (mkUnitDelayLambda g m (callNonOverloadedMethod g amap m "MoveNext" inpEnumTy [enume])) + (mkInvisibleLet m v (callNonOverloadedMethod g amap m "get_Current" inpEnumTy [enume]) (mkCoerceIfNeeded g (mkSeqTy g genElemTy) (tyOfExpr g body) body)))) ConvertSeqExprCode false isTailCall noDisposeContinuationLabel currentDisposeContinuationLabel reduction - | SeqTryFinally g (e1, compensation, mTry, mFinally, m) -> + | SeqTryFinally(e1, compensation, m) -> // printfn "found Seq.try/finally" let innerDisposeContinuationLabel = IL.generateCodeLabel() let resBody = ConvertSeqExprCode false false noDisposeContinuationLabel innerDisposeContinuationLabel e1 @@ -416,8 +373,8 @@ let ConvertSequenceExprToObject g amap overallExpr = let compensation = copyExpr g CloneAllAndMarkExprValsAsCompilerGenerated compensation mkCompGenSequential m // set the PC to the inner finally, so that if an exception happens we run the right finally - (mkSequential DebugPointAtSequential.StmtOnly m - (mkValSet mTry pcVar (mkInt32 g m pcMap.[innerDisposeContinuationLabel])) + (mkCompGenSequential m + (mkValSet m pcVar (mkInt32 g m pcMap.[innerDisposeContinuationLabel])) generate1 ) // set the PC past the try/finally before trying to run it, to make sure we only run it once (mkLabelled m innerDisposeContinuationLabel @@ -430,8 +387,8 @@ let ConvertSequenceExprToObject g amap overallExpr = dispose1 // set the PC past the try/finally before trying to run it, to make sure we only run it once (mkLabelled m innerDisposeContinuationLabel - (mkSequential DebugPointAtSequential.StmtOnly m - (mkValSet mFinally pcVar (mkInt32 g m pcMap.[currentDisposeContinuationLabel])) + (mkCompGenSequential m + (mkValSet m pcVar (mkInt32 g m pcMap.[currentDisposeContinuationLabel])) (mkCompGenSequential m compensation (Expr.Op (TOp.Goto currentDisposeContinuationLabel, [], [], m))))) @@ -449,7 +406,7 @@ let ConvertSequenceExprToObject g amap overallExpr = | _ -> None - | SeqEmpty g m -> + | SeqEmpty m -> // printfn "found Seq.empty" Some { phase2 = (fun _ -> let generate = mkUnit g m @@ -461,14 +418,14 @@ let ConvertSequenceExprToObject g amap overallExpr = significantClose = false asyncVars = emptyFreeVars } - | Expr.Sequential (expr1, expr2, NormalSeq, sp, m) -> - match ConvertSeqExprCode false isTailCall noDisposeContinuationLabel currentDisposeContinuationLabel expr2 with + | Expr.Sequential (x1, x2, NormalSeq, ty, m) -> + match ConvertSeqExprCode false isTailCall noDisposeContinuationLabel currentDisposeContinuationLabel x2 with | Some res2-> // printfn "found sequential execution" Some { res2 with phase2 = (fun ctxt -> let generate2, dispose2, checkDispose2 = res2.phase2 ctxt - let generate = Expr.Sequential (expr1, generate2, NormalSeq, sp, m) + let generate = Expr.Sequential (x1, generate2, NormalSeq, ty, m) let dispose = dispose2 let checkDispose = checkDispose2 generate, dispose, checkDispose) } @@ -585,9 +542,18 @@ let ConvertSequenceExprToObject g amap overallExpr = // printfn "FAILED - not worth compiling an unrecognized immediate yield! %s " (stringOfRange m) None else - match tyOfExpr g arbitrarySeqExpr with - | SeqElemTy g amap m inpElemTy -> + let tyConfirmsToSeq g ty = + match tryTcrefOfAppTy g ty with + | ValueSome tcref -> + tyconRefEq g tcref g.tcref_System_Collections_Generic_IEnumerable + | _ -> false + match SearchEntireHierarchyOfType (tyConfirmsToSeq g) g amap m (tyOfExpr g arbitrarySeqExpr) with + | None -> + // printfn "FAILED - yield! did not yield a sequence! %s" (stringOfRange m) + None + | Some ty -> // printfn "found yield!" + let inpElemTy = List.head (argsOfAppTy g ty) if isTailCall then //this.pc <- NEXT //nextEnumerator <- e @@ -617,7 +583,6 @@ let ConvertSequenceExprToObject g amap overallExpr = else let v, ve = mkCompGenLocal m "v" inpElemTy ConvertSeqExprCode false isTailCall noDisposeContinuationLabel currentDisposeContinuationLabel (mkCallSeqCollect g m inpElemTy inpElemTy (mkLambdaNoType g m v (mkCallSeqSingleton g m inpElemTy ve)) arbitrarySeqExpr) - | _ -> None match overallExpr with @@ -681,7 +646,7 @@ let ConvertSequenceExprToObject g amap overallExpr = // A utility to add a jump table to the three generated methods let addJumpTable isDisposal expr = - let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m ) + let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m ) let mkGotoLabelTarget lab = mbuilder.AddResultTarget(Expr.Op (TOp.Goto lab, [], [], m), DebugPointForTarget.No) let dtree = TDSwitch(pcExpr, @@ -748,7 +713,7 @@ let ConvertSequenceExprToObject g amap overallExpr = // goto startLabel // DONE_DISPOSE: let whileLoop = - let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m) + let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m) let addResultTarget e = mbuilder.AddResultTarget(e, DebugPointForTarget.No) let dtree = TDSwitch(pcExpr, @@ -775,7 +740,7 @@ let ConvertSequenceExprToObject g amap overallExpr = // --loop-- // if exn != null then raise exn mkLet - DebugPointAtBinding.NoneAtLet m exnV (Expr.Const (Const.Zero, m, g.exn_ty)) + NoDebugPointAtLetBinding m exnV (Expr.Const (Const.Zero, m, g.exn_ty)) (mkCompGenSequential m whileLoop doRaise) // Add the jump table to the GenerateNext method @@ -813,229 +778,3 @@ let ConvertSequenceExprToObject g amap overallExpr = | _ -> None -/// Build the 'test and dispose' part of a 'use' statement -let BuildDisposableCleanup tcVal (g: TcGlobals) infoReader m (v: Val) = - let disposeMethod = - match GetIntrinsicMethInfosOfType infoReader (Some "Dispose") AccessibleFromSomewhere AllowMultiIntfInstantiations.Yes IgnoreOverrides m g.system_IDisposable_ty with - | [x] -> x - | _ -> error(InternalError(FSComp.SR.tcCouldNotFindIDisposable(), m)) - // For struct types the test is simpler - if isStructTy g v.Type then - assert (TypeFeasiblySubsumesType 0 g infoReader.amap m g.system_IDisposable_ty CanCoerce v.Type) - // We can use NeverMutates here because the variable is going out of scope, there is no need to take a defensive - // copy of it. - let disposeExpr, _ = BuildMethodCall tcVal g infoReader.amap NeverMutates m false disposeMethod NormalValUse [] [exprForVal v.Range v] [] - //callNonOverloadedILMethod g infoReader.amap m "Dispose" g.system_IDisposable_ty [exprForVal v.Range v] - - disposeExpr - else - let disposeObjVar, disposeObjExpr = mkCompGenLocal m "objectToDispose" g.system_IDisposable_ty - let disposeExpr, _ = BuildMethodCall tcVal g infoReader.amap PossiblyMutates m false disposeMethod NormalValUse [] [disposeObjExpr] [] - let inpe = mkCoerceExpr(exprForVal v.Range v, g.obj_ty, m, v.Type) - mkIsInstConditional g m g.system_IDisposable_ty inpe disposeObjVar disposeExpr (mkUnit g m) - -let mkCallCollectorMethod tcVal (g: TcGlobals) infoReader m name collExpr args = - let listCollectorTy = tyOfExpr g collExpr - let addMethod = - match GetIntrinsicMethInfosOfType infoReader (Some name) AccessibleFromSomewhere AllowMultiIntfInstantiations.Yes IgnoreOverrides m listCollectorTy with - | [x] -> x - | _ -> error(InternalError("no " + name + " method found on Collector", m)) - let expr, _ = BuildMethodCall tcVal g infoReader.amap DefinitelyMutates m false addMethod NormalValUse [] [collExpr] args - expr - -let mkCallCollectorAdd tcVal (g: TcGlobals) infoReader m collExpr arg = - mkCallCollectorMethod tcVal g infoReader m "Add" collExpr [arg] - -let mkCallCollectorAddMany tcVal (g: TcGlobals) infoReader m collExpr arg = - mkCallCollectorMethod tcVal g infoReader m "AddMany" collExpr [arg] - -let mkCallCollectorAddManyAndClose tcVal (g: TcGlobals) infoReader m collExpr arg = - mkCallCollectorMethod tcVal g infoReader m "AddManyAndClose" collExpr [arg] - -let mkCallCollectorClose tcVal (g: TcGlobals) infoReader m collExpr = - mkCallCollectorMethod tcVal g infoReader m "Close" collExpr [] - -let LowerComputedListOrArraySeqExpr tcVal g amap m collectorTy overallSeqExpr = - let infoReader = InfoReader(g, amap) - let collVal, collExpr = mkMutableCompGenLocal m "@collector" collectorTy - //let collExpr = mkValAddr m false (mkLocalValRef collVal) - let rec ConvertSeqExprCode isUninteresting isTailcall expr = - match expr with - | SeqYield g (e, m) -> - let exprR = mkCallCollectorAdd tcVal (g: TcGlobals) infoReader m collExpr e - Result.Ok (false, exprR) - - | SeqDelay g (delayedExpr, _elemTy) -> - ConvertSeqExprCode isUninteresting isTailcall delayedExpr - - | SeqAppend g (e1, e2, m) -> - let res1 = ConvertSeqExprCode false false e1 - let res2 = ConvertSeqExprCode false isTailcall e2 - match res1, res2 with - | Result.Ok (_, e1R), Result.Ok (closed2, e2R) -> - let exprR = mkSequential DebugPointAtSequential.Both m e1R e2R - Result.Ok (closed2, exprR) - | Result.Error msg, _ | _, Result.Error msg -> Result.Error msg - - | SeqWhile g (guardExpr, bodyExpr, mWhile, m) -> - let resBody = ConvertSeqExprCode false false bodyExpr - match resBody with - | Result.Ok (_, bodyExprR) -> - let exprR = mkWhile g (DebugPointAtWhile.Yes mWhile, NoSpecialWhileLoopMarker, guardExpr, bodyExprR, m) - Result.Ok (false, exprR) - | Result.Error msg -> Result.Error msg - - | SeqUsing g (resource, v, bodyExpr, _elemTy, mBind, m) -> - let resBody = ConvertSeqExprCode false false bodyExpr - match resBody with - | Result.Ok (_, bodyExprR) -> - // printfn "found Seq.using" - let cleanupE = BuildDisposableCleanup tcVal g infoReader m v - let exprR = - mkLet (DebugPointAtBinding.Yes mBind) m v resource - (mkTryFinally g (bodyExprR, cleanupE, m, tyOfExpr g bodyExpr, DebugPointAtTry.Body, DebugPointAtFinally.No)) - Result.Ok (false, exprR) - | Result.Error msg -> Result.Error msg - - | SeqForEach g (inp, v, bodyExpr, _genElemTy, mFor, m) -> - let resBody = ConvertSeqExprCode false false bodyExpr - match resBody with - | Result.Ok (_, bodyExprR) -> - // printfn "found Seq.for" - let inpElemTy = v.Type - let inpEnumTy = mkIEnumeratorTy g inpElemTy - let enumv, enumve = mkCompGenLocal m "enum" inpEnumTy - let guardExpr = callNonOverloadedILMethod g amap m "MoveNext" inpEnumTy [enumve] - let cleanupE = BuildDisposableCleanup tcVal g infoReader m enumv - let exprR = - mkInvisibleLet m enumv (callNonOverloadedILMethod g amap m "GetEnumerator" (mkSeqTy g inpElemTy) [inp]) - (mkTryFinally g - (mkWhile g (DebugPointAtWhile.Yes mFor, NoSpecialWhileLoopMarker, guardExpr, - (mkInvisibleLet m v - (callNonOverloadedILMethod g amap m "get_Current" inpEnumTy [enumve])) - bodyExprR, m), - cleanupE, m, tyOfExpr g bodyExpr, DebugPointAtTry.Body, DebugPointAtFinally.Body)) - Result.Ok (false, exprR) - | Result.Error msg -> Result.Error msg - - | SeqTryFinally g (bodyExpr, compensation, mTry, mFinally, m) -> - let resBody = ConvertSeqExprCode false false bodyExpr - match resBody with - | Result.Ok (_, bodyExprR) -> - let exprR = - mkTryFinally g (bodyExprR, compensation, m, tyOfExpr g bodyExpr, DebugPointAtTry.Yes mTry, DebugPointAtFinally.Yes mFinally) - Result.Ok (false, exprR) - | Result.Error msg -> Result.Error msg - - | SeqEmpty g m -> - let exprR = mkUnit g m - Result.Ok(false, exprR) - - | Expr.Sequential (x1, bodyExpr, NormalSeq, ty, m) -> - let resBody = ConvertSeqExprCode isUninteresting isTailcall bodyExpr - match resBody with - | Result.Ok (closed, bodyExprR) -> - let exprR = Expr.Sequential (x1, bodyExprR, NormalSeq, ty, m) - Result.Ok(closed, exprR) - | Result.Error msg -> Result.Error msg - - | Expr.Let (bind, bodyExpr, m, _) -> - let resBody = ConvertSeqExprCode isUninteresting isTailcall bodyExpr - match resBody with - | Result.Ok (closed, bodyExprR) -> - let exprR = mkLetBind m bind bodyExprR - Result.Ok(closed, exprR) - | Result.Error msg -> Result.Error msg - - | Expr.LetRec (binds, bodyExpr, m, _) -> - let resBody = ConvertSeqExprCode isUninteresting isTailcall bodyExpr - match resBody with - | Result.Ok (closed, bodyExprR) -> - let exprR = mkLetRecBinds m binds bodyExprR - Result.Ok(closed, exprR) - | Result.Error msg -> Result.Error msg - - | Expr.Match (spBind, exprm, pt, targets, m, ty) -> - // lower all the targets. abandon if any fail to lower - let resTargets = - targets |> Array.map (fun (TTarget(vs, targetExpr, spTarget)) -> - match ConvertSeqExprCode false false targetExpr with - | Result.Ok (_, targetExprR) -> - Result.Ok (TTarget(vs, targetExprR, spTarget)) - | Result.Error msg -> Result.Error msg ) - if resTargets |> Array.forall (function Result.Ok _ -> true | _ -> false) then - let tglArray = Array.map (function Result.Ok v -> v | _ -> failwith "unreachable") resTargets - - let exprR = primMkMatch (spBind, exprm, pt, tglArray, m, ty) - Result.Ok(false, exprR) - else - resTargets |> Array.pick (function Result.Error msg -> Some (Result.Error msg) | _ -> None) - - // yield! e ---> (for x in e -> x) - - | arbitrarySeqExpr -> - let m = arbitrarySeqExpr.Range - if isUninteresting then - // printfn "FAILED - not worth compiling an unrecognized Seq.toList at %s " (stringOfRange m) - Result.Error () - else - // If we're the final in a sequential chain then we can AddMany, Close and return - if isTailcall then - let exprR = mkCallCollectorAddManyAndClose tcVal (g: TcGlobals) infoReader m collExpr arbitrarySeqExpr - // Return 'true' to indicate the collector was closed and the overall result of the expression is the result - Result.Ok(true, exprR) - else - let exprR = mkCallCollectorAddMany tcVal (g: TcGlobals) infoReader m collExpr arbitrarySeqExpr - Result.Ok(false, exprR) - - - // Perform conversion - match ConvertSeqExprCode true true overallSeqExpr with - | Result.Ok (closed, overallSeqExprR) -> - mkInvisibleLet m collVal (mkDefault (m, collectorTy)) - (if closed then - // If we ended with AddManyAndClose then we're done - overallSeqExprR - else - mkCompGenSequential m - overallSeqExprR - (mkCallCollectorClose tcVal g infoReader m collExpr)) - |> Some - | Result.Error () -> - None - -let (|OptionalCoerce|) expr = - match expr with - | Expr.Op (TOp.Coerce, _, [arg], _) -> arg - | _ -> expr - -// Making 'seq' optional means this kicks in for FSharp.Core, see TcArrayOrListSequenceExpression -// which only adds a 'seq' call outside of FSharp.Core -let (|OptionalSeq|_|) g amap expr = - match expr with - // use 'seq { ... }' as an indicator - | Seq g (e, elemTy) -> - Some (e, elemTy) - | _ -> - // search for the relevant element type - match tyOfExpr g expr with - | SeqElemTy g amap expr.Range elemTy -> - Some (expr, elemTy) - | _ -> None - -let LowerComputedListOrArrayExpr tcVal (g: TcGlobals) amap overallExpr = - // If ListCollector is in FSharp.Core then this optimization kicks in - if g.ListCollector_tcr.CanDeref then - - match overallExpr with - | SeqToList g (OptionalCoerce (OptionalSeq g amap (overallSeqExpr, overallElemTy)), m) -> - let collectorTy = g.mk_ListCollector_ty overallElemTy - LowerComputedListOrArraySeqExpr tcVal g amap m collectorTy overallSeqExpr - - | SeqToArray g (OptionalCoerce (OptionalSeq g amap (overallSeqExpr, overallElemTy)), m) -> - let collectorTy = g.mk_ArrayCollector_ty overallElemTy - LowerComputedListOrArraySeqExpr tcVal g amap m collectorTy overallSeqExpr - - | _ -> None - else - None diff --git a/src/fsharp/LowerCallsAndSeqs.fsi b/src/fsharp/LowerCallsAndSeqs.fsi index 10a5e26550a..16989637e2b 100644 --- a/src/fsharp/LowerCallsAndSeqs.fsi +++ b/src/fsharp/LowerCallsAndSeqs.fsi @@ -2,11 +2,10 @@ module internal FSharp.Compiler.LowerCallsAndSeqs -open FSharp.Compiler.Import -open FSharp.Compiler.InfoReader -open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypedTree -open FSharp.Compiler.Text +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Import +open FSharp.Compiler.Range /// An "expr -> expr" pass that eta-expands under-applied values of /// known arity to lambda expressions and beta-var-reduces to bind @@ -23,5 +22,3 @@ val LowerImplFile: g: TcGlobals -> assembly: TypedImplFile -> TypedImplFile val ConvertSequenceExprToObject: g: TcGlobals -> amap: ImportMap -> overallExpr: Expr -> (ValRef * ValRef * ValRef * ValRef list * Expr * Expr * Expr * TType * range) option val IsPossibleSequenceExpr: g: TcGlobals -> overallExpr: Expr -> bool - -val LowerComputedListOrArrayExpr: tcVal: ConstraintSolver.TcValF -> g: TcGlobals -> amap: ImportMap -> Expr -> Expr option diff --git a/src/fsharp/MethodCalls.fs b/src/fsharp/MethodCalls.fs index 0cd10e2fc4e..52ea6aaff39 100644 --- a/src/fsharp/MethodCalls.fs +++ b/src/fsharp/MethodCalls.fs @@ -5,25 +5,22 @@ module internal FSharp.Compiler.MethodCalls open Internal.Utilities -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.AttributeChecking open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features open FSharp.Compiler.InfoReader open FSharp.Compiler.Infos -open FSharp.Compiler.IO +open FSharp.Compiler.Lib open FSharp.Compiler.NameResolution -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps @@ -214,13 +211,14 @@ let AdjustCalledArgTypeForOptionals (g: TcGlobals) enforceNullableOptionalsKnown calledArgTy // If at the beginning of inference then use a type variable. else + let destTy = destNullableTy g calledArgTy match calledArg.OptArgInfo with - // If inference has not solved the kind of Nullable on the called arg and is not optional then use this. - | NotOptional when isTyparTy g (destNullableTy g calledArgTy) -> - calledArgTy + // Use the type variable from the Nullable if called arg is not optional. + | NotOptional when isTyparTy g destTy -> + destTy | _ -> let compgenId = mkSynId range0 unassignedTyparName - mkTyparTy (Construct.NewTypar (TyparKind.Type, TyparRigidity.Flexible, SynTypar(compgenId, TyparStaticReq.None, true), false, TyparDynamicReq.No, [], false, false)) + mkTyparTy (Construct.NewTypar (TyparKind.Type, TyparRigidity.Flexible, Typar(compgenId, NoStaticReq, true), false, TyparDynamicReq.No, [], false, false)) else calledArgTy @@ -767,7 +765,7 @@ let BuildILMethInfoCall g amap m isProp (minfo: ILMethInfo) valUseFlags minst di let ilMethRef = minfo.ILMethodRef let newobj = ctor && (match valUseFlags with NormalValUse -> true | _ -> false) let exprTy = if ctor then minfo.ApparentEnclosingType else minfo.GetFSharpReturnTy(amap, m, minst) - let retTy = if not ctor && (stripILModifiedFromTy ilMethRef.ReturnType) = ILType.Void then [] else [exprTy] + let retTy = if not ctor && ilMethRef.ReturnType = ILType.Void then [] else [exprTy] let isDllImport = minfo.IsDllImport g Expr.Op (TOp.ILCall (useCallvirt, isProtected, valu, newobj, valUseFlags, isProp, isDllImport, ilMethRef, minfo.DeclaringTypeInst, minst, retTy), [], args, m), exprTy @@ -789,7 +787,7 @@ let BuildFSharpMethodApp g m (vref: ValRef) vexp vexprty (args: Exprs) = match arity, args with | (0|1), [] when typeEquiv g (domainOfFunTy g fty) g.unit_ty -> mkUnit g m, (args, rangeOfFunTy g fty) | 0, (arg :: argst) -> - let msg = LayoutRender.showL (Layout.sepListL (Layout.rightL (TaggedText.tagText ";")) (List.map exprL args)) + let msg = Layout.showL (Layout.sepListL (Layout.rightL (Layout.TaggedTextOps.tagText ";")) (List.map exprL args)) warning(InternalError(sprintf "Unexpected zero arity, args = %s" msg, m)) arg, (argst, rangeOfFunTy g fty) | 1, (arg :: argst) -> arg, (argst, rangeOfFunTy g fty) @@ -1517,7 +1515,7 @@ module ProvidedMethodCalls = let testExpr = exprToExpr test let ifTrueExpr = exprToExpr thenBranch let ifFalseExpr = exprToExpr elseBranch - let te = mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m (tyOfExpr g ifTrueExpr) testExpr ifTrueExpr ifFalseExpr + let te = mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m (tyOfExpr g ifTrueExpr) testExpr ifTrueExpr ifFalseExpr None, (te, tyOfExpr g te) | ProvidedVarExpr providedVar -> let _, vTe = varToExpr (exprType.PApply((fun _ -> providedVar), m)) @@ -1692,7 +1690,7 @@ module ProvidedMethodCalls = | true, v -> v | _ -> let typeProviderDesignation = ExtensionTyping.DisplayNameOfTypeProvider (pe.TypeProvider, m) - error(Error(FSComp.SR.etIncorrectParameterExpression(typeProviderDesignation, vRaw.Name), m)) + error(NumberedError(FSComp.SR.etIncorrectParameterExpression(typeProviderDesignation, vRaw.Name), m)) and exprToExpr expr = let _, (resExpr, _) = exprToExprAndWitness false expr diff --git a/src/fsharp/MethodCalls.fsi b/src/fsharp/MethodCalls.fsi index ac96b7b30d8..c9bc2381894 100644 --- a/src/fsharp/MethodCalls.fsi +++ b/src/fsharp/MethodCalls.fsi @@ -6,15 +6,27 @@ module internal FSharp.Compiler.MethodCalls open Internal.Utilities open FSharp.Compiler +open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic +open FSharp.Compiler.AttributeChecking +open FSharp.Compiler.ErrorLogger +open FSharp.Compiler.Features open FSharp.Compiler.Import open FSharp.Compiler.InfoReader open FSharp.Compiler.Infos +open FSharp.Compiler.Lib open FSharp.Compiler.NameResolution -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.SyntaxTreeOps open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypedTree +open FSharp.Compiler.TypedTreeBasics +open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.TypedTreeOps.DebugPrint +open FSharp.Compiler.TypeRelations #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping diff --git a/src/fsharp/MethodOverrides.fs b/src/fsharp/MethodOverrides.fs index f26b67afa2d..d5105e649dc 100644 --- a/src/fsharp/MethodOverrides.fs +++ b/src/fsharp/MethodOverrides.fs @@ -3,21 +3,19 @@ /// Primary logic related to method overrides. module internal FSharp.Compiler.MethodOverrides -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras open FSharp.Compiler +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.ErrorLogger open FSharp.Compiler.InfoReader +open FSharp.Compiler.Lib open FSharp.Compiler.Infos open FSharp.Compiler.Features open FSharp.Compiler.NameResolution -open FSharp.Compiler.Syntax +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps @@ -89,7 +87,7 @@ module DispatchSlotChecking = match argTys with | [] -> [[(denv.g.unit_ty, ValReprInfo.unnamedTopArg1)]] | _ -> argTys |> List.mapSquared (fun ty -> (ty, ValReprInfo.unnamedTopArg1)) - LayoutRender.bufferL os (NicePrint.prettyLayoutOfMemberSig denv (memberToParentInst, id.idText, mtps, argInfos, retTy)) + Layout.bufferL os (NicePrint.prettyLayoutOfMemberSig denv (memberToParentInst, id.idText, mtps, argInfos, retTy)) /// Print the signature of a MethInfo to a buffer as part of an error message let PrintMethInfoSigToBuffer g amap m denv os minfo = @@ -98,7 +96,7 @@ module DispatchSlotChecking = let retTy = (retTy |> GetFSharpViewOfReturnType g) let argInfos = argTys |> List.mapSquared (fun ty -> (ty, ValReprInfo.unnamedTopArg1)) let nm = minfo.LogicalName - LayoutRender.bufferL os (NicePrint.prettyLayoutOfMemberSig denv (ttpinst, nm, fmtps, argInfos, retTy)) + Layout.bufferL os (NicePrint.prettyLayoutOfMemberSig denv (ttpinst, nm, fmtps, argInfos, retTy)) /// Format the signature of an override as a string as part of an error message let FormatOverride denv d = bufs (fun buf -> PrintOverrideToBuffer denv buf d) @@ -334,13 +332,13 @@ module DispatchSlotChecking = checkLanguageFeatureErrorRecover g.langVersion LanguageFeature.DefaultInterfaceMemberConsumption m if reqdSlot.PossiblyNoMostSpecificImplementation then - errorR(Error(FSComp.SR.typrelInterfaceMemberNoMostSpecificImplementation(NicePrint.stringOfMethInfo infoReader m denv dispatchSlot), m)) + errorR(Error(FSComp.SR.typrelInterfaceMemberNoMostSpecificImplementation(NicePrint.stringOfMethInfo amap m denv dispatchSlot), m)) // error reporting path let compiledSig = CompiledSigOfMeth g amap m dispatchSlot let noimpl() = - missingOverloadImplementation.Add((isReqdTyInterface, lazy NicePrint.stringOfMethInfo infoReader m denv dispatchSlot)) + missingOverloadImplementation.Add((isReqdTyInterface, lazy NicePrint.stringOfMethInfo amap m denv dispatchSlot)) match overrides |> List.filter (IsPartialMatch g dispatchSlot compiledSig) with | [] -> @@ -370,7 +368,7 @@ module DispatchSlotChecking = elif not (IsTyparKindMatch compiledSig overrideBy) then fail(Error(FSComp.SR.typrelMemberDoesNotHaveCorrectKindsOfGenericParameters(FormatOverride denv overrideBy, FormatMethInfoSig g amap m denv dispatchSlot), overrideBy.Range)) else - fail(Error(FSComp.SR.typrelMemberCannotImplement(FormatOverride denv overrideBy, NicePrint.stringOfMethInfo infoReader m denv dispatchSlot, FormatMethInfoSig g amap m denv dispatchSlot), overrideBy.Range)) + fail(Error(FSComp.SR.typrelMemberCannotImplement(FormatOverride denv overrideBy, NicePrint.stringOfMethInfo amap m denv dispatchSlot, FormatMethInfoSig g amap m denv dispatchSlot), overrideBy.Range)) | overrideBy :: _ -> errorR(Error(FSComp.SR.typrelOverloadNotFound(FormatMethInfoSig g amap m denv dispatchSlot, FormatMethInfoSig g amap m denv dispatchSlot), overrideBy.Range)) @@ -538,12 +536,10 @@ module DispatchSlotChecking = [ (reqdTy, GetClassDispatchSlots infoReader ad m reqdTy) ] /// Check all implementations implement some dispatch slot. - let CheckOverridesAreAllUsedOnce(denv, g, infoReader: InfoReader, isObjExpr, reqdTy, + let CheckOverridesAreAllUsedOnce(denv, g, amap, isObjExpr, reqdTy, dispatchSlotsKeyed: NameMultiMap, availPriorOverrides: OverrideInfo list, overrides: OverrideInfo list) = - let amap = infoReader.amap - let availPriorOverridesKeyed = availPriorOverrides |> NameMultiMap.initBy (fun ov -> ov.LogicalName) for overrideBy in overrides do if not overrideBy.IsFakeEventProperty then @@ -574,13 +570,13 @@ module DispatchSlotChecking = | [dispatchSlot] -> if dispatchSlot.IsFinal && (isObjExpr || not (typeEquiv g reqdTy dispatchSlot.ApparentEnclosingType)) then - errorR(Error(FSComp.SR.typrelMethodIsSealed(NicePrint.stringOfMethInfo infoReader m denv dispatchSlot), m)) + errorR(Error(FSComp.SR.typrelMethodIsSealed(NicePrint.stringOfMethInfo amap m denv dispatchSlot), m)) | dispatchSlots -> match dispatchSlots |> List.filter (fun dispatchSlot -> isInterfaceTy g dispatchSlot.ApparentEnclosingType || not (DispatchSlotIsAlreadyImplemented g amap m availPriorOverridesKeyed dispatchSlot)) with | h1 :: h2 :: _ -> - errorR(Error(FSComp.SR.typrelOverrideImplementsMoreThenOneSlot((FormatOverride denv overrideBy), (NicePrint.stringOfMethInfo infoReader m denv h1), (NicePrint.stringOfMethInfo infoReader m denv h2)), m)) + errorR(Error(FSComp.SR.typrelOverrideImplementsMoreThenOneSlot((FormatOverride denv overrideBy), (NicePrint.stringOfMethInfo amap m denv h1), (NicePrint.stringOfMethInfo amap m denv h2)), m)) | _ -> // dispatch slots are ordered from the derived classes to base // so we can check the topmost dispatch slot if it is final @@ -784,7 +780,7 @@ module DispatchSlotChecking = |> List.filter (fst >> mustOverrideSomething reqdTy) |> List.map snd - CheckOverridesAreAllUsedOnce (denv, g, infoReader, false, reqdTy, dispatchSlotsKeyed, availPriorOverrides, overridesToCheck) + CheckOverridesAreAllUsedOnce (denv, g, amap, false, reqdTy, dispatchSlotsKeyed, availPriorOverrides, overridesToCheck) with e -> errorRecovery e m diff --git a/src/fsharp/MethodOverrides.fsi b/src/fsharp/MethodOverrides.fsi index 1e5a07350a6..cc1d057cc28 100644 --- a/src/fsharp/MethodOverrides.fsi +++ b/src/fsharp/MethodOverrides.fsi @@ -3,15 +3,15 @@ /// Primary logic related to method overrides. module internal FSharp.Compiler.MethodOverrides -open Internal.Utilities.Library +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.InfoReader open FSharp.Compiler.Import open FSharp.Compiler.Infos open FSharp.Compiler.NameResolution -open FSharp.Compiler.Syntax +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps @@ -72,7 +72,7 @@ module DispatchSlotChecking = val FormatMethInfoSig: g:TcGlobals -> amap:ImportMap -> m:range -> denv:DisplayEnv -> d:MethInfo -> string /// Get the override information for an object expression method being used to implement dispatch slots - val GetObjectExprOverrideInfo: g:TcGlobals -> amap:ImportMap -> implty:TType * id:Ident * memberFlags:SynMemberFlags * ty:TType * arityInfo:ValReprInfo * bindingAttribs:Attribs * rhsExpr:Expr -> OverrideInfo * (Val option * Val * Val list list * Attribs * Expr) + val GetObjectExprOverrideInfo: g:TcGlobals -> amap:ImportMap -> implty:TType * id:Ident * memberFlags:MemberFlags * ty:TType * arityInfo:ValReprInfo * bindingAttribs:Attribs * rhsExpr:Expr -> OverrideInfo * (Val option * Val * Val list list * Attribs * Expr) /// Check if an override exactly matches the requirements for a dispatch slot. val IsExactMatch: g:TcGlobals -> amap:ImportMap -> m:range -> dispatchSlot:MethInfo -> overrideBy:OverrideInfo -> bool @@ -81,7 +81,7 @@ module DispatchSlotChecking = val CheckDispatchSlotsAreImplemented: denv:DisplayEnv * infoReader:InfoReader * m:range * nenv:NameResolutionEnv * sink:TcResultsSink * isOverallTyAbstract:bool * reqdTy:TType * dispatchSlots:RequiredSlot list * availPriorOverrides:OverrideInfo list * overrides:OverrideInfo list -> bool /// Check all implementations implement some dispatch slot. - val CheckOverridesAreAllUsedOnce: denv:DisplayEnv * g:TcGlobals * infoReader:InfoReader * isObjExpr:bool * reqdTy:TType * dispatchSlotsKeyed:NameMultiMap * availPriorOverrides:OverrideInfo list * overrides:OverrideInfo list -> unit + val CheckOverridesAreAllUsedOnce: denv:DisplayEnv * g:TcGlobals * amap:ImportMap * isObjExpr:bool * reqdTy:TType * dispatchSlotsKeyed:NameMultiMap * availPriorOverrides:OverrideInfo list * overrides:OverrideInfo list -> unit /// Get the slots of a type that can or must be implemented. val GetSlotImplSets: infoReader:InfoReader -> denv:DisplayEnv -> ad:AccessorDomain -> isObjExpr:bool -> allReqdTys:(TType * range) list -> SlotImplSet list diff --git a/src/fsharp/DependencyManager/AssemblyResolveHandler.fs b/src/fsharp/Microsoft.DotNet.DependencyManager/AssemblyResolveHandler.fs similarity index 70% rename from src/fsharp/DependencyManager/AssemblyResolveHandler.fs rename to src/fsharp/Microsoft.DotNet.DependencyManager/AssemblyResolveHandler.fs index b31ef021de9..f4403c341fe 100644 --- a/src/fsharp/DependencyManager/AssemblyResolveHandler.fs +++ b/src/fsharp/Microsoft.DotNet.DependencyManager/AssemblyResolveHandler.fs @@ -1,39 +1,28 @@ // 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.DependencyManager +namespace Microsoft.DotNet.DependencyManager open System +open System.Collections.Generic open System.IO open System.Reflection -open System.Runtime.Loader open Internal.Utilities.FSharpEnvironment /// Signature for ResolutionProbe callback /// host implements this, it's job is to return a list of assembly paths to probe. type AssemblyResolutionProbe = delegate of Unit -> seq -/// Type that encapsulates AssemblyResolveHandler for managed packages -type AssemblyResolveHandlerCoreclr (assemblyProbingPaths: AssemblyResolutionProbe) as this = - let assemblyLoadContextType: Type = Type.GetType("System.Runtime.Loader.AssemblyLoadContext, System.Runtime.Loader", false) - - let loadFromAssemblyPathMethod = - assemblyLoadContextType.GetMethod("LoadFromAssemblyPath", [| typeof |]) +#if NETSTANDARD - let eventInfo, handler, defaultAssemblyLoadContext = - let eventInfo = assemblyLoadContextType.GetEvent("Resolving") - let mi = - let gmi = this.GetType().GetMethod("ResolveAssemblyNetStandard", BindingFlags.Instance ||| BindingFlags.NonPublic) - gmi.MakeGenericMethod(assemblyLoadContextType) +open System.Runtime.Loader - eventInfo, - Delegate.CreateDelegate(eventInfo.EventHandlerType, this, mi), - assemblyLoadContextType.GetProperty("Default", BindingFlags.Static ||| BindingFlags.Public).GetValue(null, null) +/// Type that encapsulates AssemblyResolveHandler for managed packages +type AssemblyResolveHandlerCoreclr (assemblyProbingPaths: AssemblyResolutionProbe) = - do eventInfo.AddEventHandler(defaultAssemblyLoadContext, handler) + let resolveAssemblyNetStandard (ctxt: AssemblyLoadContext) (assemblyName: AssemblyName): Assembly = - member _.ResolveAssemblyNetStandard (ctxt: 'T) (assemblyName: AssemblyName): Assembly = let loadAssembly path = - loadFromAssemblyPathMethod.Invoke(ctxt, [| path |]) :?> Assembly + ctxt.LoadFromAssemblyPath(path) let assemblyPaths = match assemblyProbingPaths with @@ -46,14 +35,20 @@ type AssemblyResolveHandlerCoreclr (assemblyProbingPaths: AssemblyResolutionProb let simpleName = assemblyName.Name let assemblyPathOpt = assemblyPaths |> Seq.tryFind(fun path -> Path.GetFileNameWithoutExtension(path) = simpleName) match assemblyPathOpt with - | Some path -> loadAssembly path + | Some path -> + loadAssembly path | None -> Unchecked.defaultof with | _ -> Unchecked.defaultof + let handler = Func(resolveAssemblyNetStandard) + do AssemblyLoadContext.Default.add_Resolving(handler) + interface IDisposable with member _x.Dispose() = - eventInfo.RemoveEventHandler(defaultAssemblyLoadContext, handler) + AssemblyLoadContext.Default.remove_Resolving(handler) + +#endif /// Type that encapsulates AssemblyResolveHandler for managed packages type AssemblyResolveHandlerDeskTop (assemblyProbingPaths: AssemblyResolutionProbe) = @@ -74,7 +69,8 @@ type AssemblyResolveHandlerDeskTop (assemblyProbingPaths: AssemblyResolutionProb let simpleName = assemblyName.Name let assemblyPathOpt = assemblyPaths |> Seq.tryFind(fun path -> Path.GetFileNameWithoutExtension(path) = simpleName) match assemblyPathOpt with - | Some path -> loadAssembly path + | Some path -> + loadAssembly path | None -> Unchecked.defaultof with | _ -> Unchecked.defaultof @@ -89,9 +85,11 @@ type AssemblyResolveHandlerDeskTop (assemblyProbingPaths: AssemblyResolutionProb type AssemblyResolveHandler (assemblyProbingPaths: AssemblyResolutionProbe) = let handler = +#if NETSTANDARD if isRunningOnCoreClr then new AssemblyResolveHandlerCoreclr(assemblyProbingPaths) :> IDisposable else +#endif new AssemblyResolveHandlerDeskTop(assemblyProbingPaths) :> IDisposable interface IDisposable with diff --git a/src/fsharp/DependencyManager/AssemblyResolveHandler.fsi b/src/fsharp/Microsoft.DotNet.DependencyManager/AssemblyResolveHandler.fsi similarity index 88% rename from src/fsharp/DependencyManager/AssemblyResolveHandler.fsi rename to src/fsharp/Microsoft.DotNet.DependencyManager/AssemblyResolveHandler.fsi index 9718eb9f2d4..e30cb7839dd 100644 --- a/src/fsharp/DependencyManager/AssemblyResolveHandler.fsi +++ b/src/fsharp/Microsoft.DotNet.DependencyManager/AssemblyResolveHandler.fsi @@ -1,8 +1,9 @@ // 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.DependencyManager +namespace Microsoft.DotNet.DependencyManager open System +open System.Collections.Generic /// Signature for ResolutionProbe callback /// host implements this, it's job is to return a list of assembly paths to probe. diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/DependencyManager.txt b/src/fsharp/Microsoft.DotNet.DependencyManager/DependencyManager.txt new file mode 100644 index 00000000000..28e90747182 --- /dev/null +++ b/src/fsharp/Microsoft.DotNet.DependencyManager/DependencyManager.txt @@ -0,0 +1,4 @@ +# Microsoft.DotNet.DependencyManager resource strings +3400,packageManagerUnknown,"Package manager key '%s' was not registered in %s. Currently registered: %s" +3401,packageManagerError,"%s" +3402,couldNotLoadDependencyManagerExtension,"The dependency manager extension %s could not be loaded. Message: %s" \ No newline at end of file diff --git a/src/fsharp/DependencyManager/DependencyProvider.fs b/src/fsharp/Microsoft.DotNet.DependencyManager/DependencyProvider.fs similarity index 92% rename from src/fsharp/DependencyManager/DependencyProvider.fs rename to src/fsharp/Microsoft.DotNet.DependencyManager/DependencyProvider.fs index cc582e47505..cf16b8cd249 100644 --- a/src/fsharp/DependencyManager/DependencyProvider.fs +++ b/src/fsharp/Microsoft.DotNet.DependencyManager/DependencyProvider.fs @@ -1,6 +1,6 @@ // 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.DependencyManager +namespace Microsoft.DotNet.DependencyManager open System open System.IO @@ -8,13 +8,13 @@ open System.Reflection open System.Runtime.InteropServices open Internal.Utilities open Internal.Utilities.FSharpEnvironment -open FSharp.Reflection +open Microsoft.FSharp.Reflection open System.Collections.Concurrent -module Option = +module Option = /// Convert string into Option string where null and String.Empty result in None - let ofString s = + let ofString s = if String.IsNullOrEmpty(s) then None else Some(s) @@ -131,7 +131,6 @@ type ReflectionDependencyManagerProvider(theType: Type, resolveDeps: MethodInfo option, resolveDepsEx: MethodInfo option, resolveDepsExWithTimeout: MethodInfo option, - resolveDepsExWithScriptInfoAndTimeout: MethodInfo option, outputDir: string option) = let instance = Activator.CreateInstance(theType, [| outputDir :> obj |]) let nameProperty = nameProperty.GetValue >> string @@ -155,14 +154,12 @@ type ReflectionDependencyManagerProvider(theType: Type, let resolveMethod = getInstanceMethod theType [| typeof; typeof; typeof; typeof; typeof |] resolveDependenciesMethodName let resolveMethodEx = getInstanceMethod theType [| typeof; typeof<(string * string) seq>; typeof; typeof |] resolveDependenciesMethodName let resolveMethodExWithTimeout = getInstanceMethod theType [| typeof; typeof<(string * string) seq>; typeof; typeof; typeof |] resolveDependenciesMethodName - let resolveDepsExWithScriptInfoAndTimeout = getInstanceMethod theType [| typeof; typeof; typeof; typeof<(string * string) seq>; typeof; typeof; typeof |] resolveDependenciesMethodName - Some (fun () -> new ReflectionDependencyManagerProvider(theType, nameProperty, keyProperty, None, resolveMethod, resolveMethodEx, resolveMethodExWithTimeout, resolveDepsExWithScriptInfoAndTimeout,outputDir) :> IDependencyManagerProvider) + Some (fun () -> new ReflectionDependencyManagerProvider(theType, nameProperty, keyProperty, None, resolveMethod, resolveMethodEx, resolveMethodExWithTimeout, outputDir) :> IDependencyManagerProvider) | Some _, Some nameProperty, Some keyProperty, Some helpMessagesProperty -> let resolveMethod = getInstanceMethod theType [| typeof; typeof; typeof; typeof; typeof |] resolveDependenciesMethodName let resolveMethodEx = getInstanceMethod theType [| typeof; typeof<(string * string) seq>; typeof; typeof |] resolveDependenciesMethodName let resolveMethodExWithTimeout = getInstanceMethod theType [| typeof; typeof<(string * string) seq>; typeof; typeof; typeof; |] resolveDependenciesMethodName - let resolveDepsExWithScriptInfoAndTimeout = getInstanceMethod theType [| typeof; typeof; typeof; typeof<(string * string) seq>; typeof; typeof; typeof |] resolveDependenciesMethodName - Some (fun () -> new ReflectionDependencyManagerProvider(theType, nameProperty, keyProperty, Some helpMessagesProperty, resolveMethod, resolveMethodEx, resolveMethodExWithTimeout, resolveDepsExWithScriptInfoAndTimeout, outputDir) :> IDependencyManagerProvider) + Some (fun () -> new ReflectionDependencyManagerProvider(theType, nameProperty, keyProperty, Some helpMessagesProperty, resolveMethod, resolveMethodEx, resolveMethodExWithTimeout, outputDir) :> IDependencyManagerProvider) static member MakeResultFromObject(result: obj) = { new IResolveDependenciesResult with @@ -244,9 +241,7 @@ type ReflectionDependencyManagerProvider(theType: Type, // (bool * string list * string list) // We use reflection to get the correct method and to determine what we got back. let method, arguments = - if resolveDepsExWithScriptInfoAndTimeout.IsSome then - resolveDepsExWithScriptInfoAndTimeout, [| box scriptDir; box scriptName; box scriptExt; box packageManagerTextLines; box tfm; box rid; box timeout |] - elif resolveDepsExWithTimeout.IsSome then + if resolveDepsExWithTimeout.IsSome then resolveDepsExWithTimeout, [| box scriptExt; box packageManagerTextLines; box tfm; box rid; box timeout |] elif resolveDepsEx.IsSome then resolveDepsEx, [| box scriptExt; box packageManagerTextLines; box tfm; box rid |] @@ -298,7 +293,7 @@ type DependencyProvider (assemblyProbingPaths: AssemblyResolutionProbe, nativePr | null -> { new IDisposable with member _.Dispose() = () } | _ -> new AssemblyResolveHandler(assemblyProbingPaths) :> IDisposable - // Resolution Path = Location of FSharp.Compiler.Service.dll + // Resolution Path = Location of FSharp.Compiler.Private.dll let assemblySearchPaths = lazy ( [ let assemblyLocation = typeof.GetTypeInfo().Assembly.Location @@ -320,7 +315,7 @@ type DependencyProvider (assemblyProbingPaths: AssemblyResolutionProbe, nativePr with | e -> let e = stripTieWrapper e - let n, m = FSComp.SR.couldNotLoadDependencyManagerExtension(path,e.Message) + let n, m = DependencyManager.SR.couldNotLoadDependencyManagerExtension(path,e.Message) reportError.Invoke(ErrorReportType.Warning, n, m) None) |> Seq.filter (fun a -> assemblyHasAttribute a dependencyManagerAttributeName) @@ -370,7 +365,7 @@ type DependencyProvider (assemblyProbingPaths: AssemblyResolutionProbe, nativePr member _.CreatePackageManagerUnknownError (compilerTools: string seq, outputDir: string, packageManagerKey: string, reportError: ResolvingErrorReport) = let registeredKeys = String.Join(", ", RegisteredDependencyManagers compilerTools (Option.ofString outputDir) reportError |> Seq.map (fun kv -> kv.Value.Key)) let searchPaths = assemblySearchPaths.Force() - FSComp.SR.packageManagerUnknown(packageManagerKey, String.Join(", ", searchPaths, compilerTools), registeredKeys) + DependencyManager.SR.packageManagerUnknown(packageManagerKey, String.Join(", ", searchPaths, compilerTools), registeredKeys) /// Fetch a dependencymanager that supports a specific key member this.TryFindDependencyManagerInPath (compilerTools: string seq, outputDir: string, reportError: ResolvingErrorReport, path: string): string * IDependencyManagerProvider = @@ -390,7 +385,7 @@ type DependencyProvider (assemblyProbingPaths: AssemblyResolutionProbe, nativePr with | e -> let e = stripTieWrapper e - let err, msg = FSComp.SR.packageManagerError(e.Message) + let err, msg = DependencyManager.SR.packageManagerError(e.Message) reportError.Invoke(ErrorReportType.Error, err, msg) null, Unchecked.defaultof @@ -404,7 +399,7 @@ type DependencyProvider (assemblyProbingPaths: AssemblyResolutionProbe, nativePr with | e -> let e = stripTieWrapper e - let err, msg = FSComp.SR.packageManagerError(e.Message) + let err, msg = DependencyManager.SR.packageManagerError(e.Message) reportError.Invoke(ErrorReportType.Error, err, msg) Unchecked.defaultof @@ -434,7 +429,7 @@ type DependencyProvider (assemblyProbingPaths: AssemblyResolutionProbe, nativePr with e -> let e = stripTieWrapper e - Error (FSComp.SR.packageManagerError(e.Message)) + Error (DependencyManager.SR.packageManagerError(e.Message)) )) match result with | Ok res -> diff --git a/src/fsharp/DependencyManager/DependencyProvider.fsi b/src/fsharp/Microsoft.DotNet.DependencyManager/DependencyProvider.fsi similarity index 97% rename from src/fsharp/DependencyManager/DependencyProvider.fsi rename to src/fsharp/Microsoft.DotNet.DependencyManager/DependencyProvider.fsi index 8760c802b7c..1195cefde53 100644 --- a/src/fsharp/DependencyManager/DependencyProvider.fsi +++ b/src/fsharp/Microsoft.DotNet.DependencyManager/DependencyProvider.fsi @@ -1,10 +1,12 @@ // 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. /// Helper members to integrate DependencyManagers into F# codebase -namespace FSharp.Compiler.DependencyManager +namespace Microsoft.DotNet.DependencyManager +open System open System.Runtime.InteropServices + /// The results of ResolveDependencies type IResolveDependenciesResult = @@ -12,10 +14,10 @@ type IResolveDependenciesResult = abstract Success: bool /// The resolution output log - abstract StdOut: string[] + abstract StdOut: string array /// The resolution error log (process stderr) - abstract StdError: string[] + abstract StdError: string array /// The resolution paths - the full paths to selected resolved dll's. /// In scripts this is equivalent to #r @"c:\somepath\to\packages\ResolvedPackage\1.1.1\lib\netstandard2.0\ResolvedAssembly.dll" diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/Directory.Build.props b/src/fsharp/Microsoft.DotNet.DependencyManager/Directory.Build.props new file mode 100644 index 00000000000..7cd41381b5d --- /dev/null +++ b/src/fsharp/Microsoft.DotNet.DependencyManager/Directory.Build.props @@ -0,0 +1,9 @@ + + + + true + + + + + diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/Microsoft.DotNet.DependencyManager.fsproj b/src/fsharp/Microsoft.DotNet.DependencyManager/Microsoft.DotNet.DependencyManager.fsproj new file mode 100644 index 00000000000..f77c694ff6f --- /dev/null +++ b/src/fsharp/Microsoft.DotNet.DependencyManager/Microsoft.DotNet.DependencyManager.fsproj @@ -0,0 +1,67 @@ + + + + + + Library + netstandard2.0;net472 + true + netstandard2.0 + Microsoft.DotNet.DependencyManager + $(NoWarn);45;55;62;75;1204 + true + $(OtherFlags) --warnon:1182 --maxerrors:20 --extraoptimizationloops:1 + true + + + + + $(BaseOutputPath)\$(Configuration)\$(TargetFramework) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/fsharp/DependencyManager/NativeDllResolveHandler.fs b/src/fsharp/Microsoft.DotNet.DependencyManager/NativeDllResolveHandler.fs similarity index 70% rename from src/fsharp/DependencyManager/NativeDllResolveHandler.fs rename to src/fsharp/Microsoft.DotNet.DependencyManager/NativeDllResolveHandler.fs index 9397a04eb3e..21eb3db8528 100644 --- a/src/fsharp/DependencyManager/NativeDllResolveHandler.fs +++ b/src/fsharp/Microsoft.DotNet.DependencyManager/NativeDllResolveHandler.fs @@ -1,6 +1,6 @@ // 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.DependencyManager +namespace Microsoft.DotNet.DependencyManager open System open System.Collections.Concurrent @@ -9,26 +9,28 @@ open System.Reflection open System.Runtime.InteropServices open Internal.Utilities open Internal.Utilities.FSharpEnvironment -open FSharp.Compiler.IO /// Signature for Native library resolution probe callback /// host implements this, it's job is to return a list of package roots to probe. type NativeResolutionProbe = delegate of Unit -> seq -/// Type that encapsulates Native library probing for managed packages -type NativeDllResolveHandlerCoreClr (nativeProbingRoots: NativeResolutionProbe) = +#if NETSTANDARD +open System.Runtime.Loader - let nativeLibraryTryLoad = - let nativeLibraryType: Type = Type.GetType("System.Runtime.InteropServices.NativeLibrary, System.Runtime.InteropServices", false) - nativeLibraryType.GetMethod("TryLoad", [| typeof; typeof.MakeByRefType() |]) +// Cut down AssemblyLoadContext, for loading native libraries +type NativeAssemblyLoadContext () = + inherit AssemblyLoadContext() - let loadNativeLibrary path = - let arguments = [| path:>obj; IntPtr.Zero:>obj |] - if nativeLibraryTryLoad.Invoke(null, arguments) :?> bool then - arguments.[1] :?> IntPtr - else - IntPtr.Zero + member this.LoadNativeLibrary(path: string): IntPtr = + base.LoadUnmanagedDllFromPath(path) + + override _.Load(_path: AssemblyName): Assembly = + raise (NotImplementedException()) + static member NativeLoadContext = new NativeAssemblyLoadContext() + +/// Type that encapsulates Native library probing for managed packages +type NativeDllResolveHandlerCoreClr (nativeProbingRoots: NativeResolutionProbe) = let probingFileNames (name: string) = // coreclr native library probing algorithm: https://github.com/dotnet/coreclr/blob/9773db1e7b1acb3ec75c9cc0e36bd62dcbacd6d5/src/System.Private.CoreLib/shared/System/Runtime/Loader/LibraryNameVariation.Unix.cs let isRooted = Path.IsPathRooted name @@ -62,13 +64,13 @@ type NativeDllResolveHandlerCoreClr (nativeProbingRoots: NativeResolutionProbe) yield (sprintf "%s%s" p name) |] - let resolveUnmanagedDll (_: Assembly) (name: string): IntPtr = + let _resolveUnmanagedDll (_: Assembly) (name: string): IntPtr = // Enumerate probing roots looking for a dll that matches the probing name in the probed locations let probeForNativeLibrary root rid name = // Look for name in root probingFileNames name |> Array.tryPick(fun name -> let path = Path.Combine(root, "runtimes", rid, "native", name) - if FileSystem.FileExistsShim(path) then + if File.Exists(path) then Some path else None) @@ -81,56 +83,59 @@ type NativeDllResolveHandlerCoreClr (nativeProbingRoots: NativeResolutionProbe) |> Seq.tryPick(fun root -> probingFileNames name |> Seq.tryPick(fun name -> let path = Path.Combine(root, name) - if FileSystem.FileExistsShim(path) then + if File.Exists(path) then Some path else RidHelpers.probingRids |> Seq.tryPick(fun rid -> probeForNativeLibrary root rid name))) match probe with - | Some path -> loadNativeLibrary(path) + | Some path -> NativeAssemblyLoadContext.NativeLoadContext.LoadNativeLibrary(path) | None -> IntPtr.Zero // netstandard 2.1 has this property, unfortunately we don't build with that yet //public event Func ResolvingUnmanagedDll - let assemblyLoadContextType: Type = Type.GetType("System.Runtime.Loader.AssemblyLoadContext, System.Runtime.Loader", false) - let eventInfo, handler, defaultAssemblyLoadContext = - assemblyLoadContextType.GetEvent("ResolvingUnmanagedDll"), - Func (resolveUnmanagedDll), - assemblyLoadContextType.GetProperty("Default", BindingFlags.Static ||| BindingFlags.Public).GetValue(null, null) + let eventInfo = typeof.GetEvent("ResolvingUnmanagedDll") + let handler = Func (_resolveUnmanagedDll) - do eventInfo.AddEventHandler(defaultAssemblyLoadContext, handler) + do + if not (isNull eventInfo) then + eventInfo.AddEventHandler(AssemblyLoadContext.Default, handler) interface IDisposable with - member _x.Dispose() = eventInfo.RemoveEventHandler(defaultAssemblyLoadContext, handler) - + member _x.Dispose() = + if not (isNull eventInfo) then + eventInfo.RemoveEventHandler(AssemblyLoadContext.Default, handler) + () +#endif -type NativeDllResolveHandler (nativeProbingRoots: NativeResolutionProbe) = +type NativeDllResolveHandler (_nativeProbingRoots: NativeResolutionProbe) = let handler: IDisposable option = +#if NETSTANDARD if isRunningOnCoreClr then - Some (new NativeDllResolveHandlerCoreClr(nativeProbingRoots) :> IDisposable) + Some (new NativeDllResolveHandlerCoreClr(_nativeProbingRoots) :> IDisposable) else +#endif None - let appendPathSeparator (p: string) = - let separator = string System.IO.Path.PathSeparator - if not(p.EndsWith(separator, StringComparison.OrdinalIgnoreCase)) then - p + separator + let appendSemiColon (p:string) = + if not(p.EndsWith(";", StringComparison.OrdinalIgnoreCase)) then + p + ";" else p let addedPaths = ConcurrentBag() let addProbeToProcessPath probePath = - let probe = appendPathSeparator probePath - let path = appendPathSeparator (Environment.GetEnvironmentVariable("PATH")) + let probe = appendSemiColon probePath + let path = appendSemiColon (Environment.GetEnvironmentVariable("PATH")) if not (path.Contains(probe)) then Environment.SetEnvironmentVariable("PATH", path + probe) addedPaths.Add probe let removeProbeFromProcessPath probePath = if not(String.IsNullOrWhiteSpace(probePath)) then - let probe = appendPathSeparator probePath - let path = appendPathSeparator (Environment.GetEnvironmentVariable("PATH")) + let probe = appendSemiColon probePath + let path = appendSemiColon (Environment.GetEnvironmentVariable("PATH")) if path.Contains(probe) then Environment.SetEnvironmentVariable("PATH", path.Replace(probe, "")) member internal _.RefreshPathsInEnvironment(roots: string seq) = diff --git a/src/fsharp/DependencyManager/NativeDllResolveHandler.fsi b/src/fsharp/Microsoft.DotNet.DependencyManager/NativeDllResolveHandler.fsi similarity index 83% rename from src/fsharp/DependencyManager/NativeDllResolveHandler.fsi rename to src/fsharp/Microsoft.DotNet.DependencyManager/NativeDllResolveHandler.fsi index d0845bb94f3..7c14fa4b3ab 100644 --- a/src/fsharp/DependencyManager/NativeDllResolveHandler.fsi +++ b/src/fsharp/Microsoft.DotNet.DependencyManager/NativeDllResolveHandler.fsi @@ -1,6 +1,6 @@ // 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.DependencyManager +namespace Microsoft.DotNet.DependencyManager open System @@ -12,7 +12,7 @@ type NativeResolutionProbe = delegate of Unit -> seq type NativeDllResolveHandler = /// Construct a new NativeDllResolveHandler - new: nativeProbingRoots: NativeResolutionProbe -> NativeDllResolveHandler + new: _nativeProbingRoots: NativeResolutionProbe -> NativeDllResolveHandler member internal RefreshPathsInEnvironment: string seq -> unit diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/README.md b/src/fsharp/Microsoft.DotNet.DependencyManager/README.md new file mode 100644 index 00000000000..09d27d6dd34 --- /dev/null +++ b/src/fsharp/Microsoft.DotNet.DependencyManager/README.md @@ -0,0 +1,44 @@ +# `dotnet fsi` Dependency Manager Plugins + +Since .NET 5.0, `dotnet fsi` ships with dependency manager plugins support that can be called like so: + +```fsharp +#r "myextension: my extension parameters" +``` + +# `#r "nuget:"` [nuget](https://github.com/dotnet/fsharp/tree/main/src/fsharp/FSharp.DependencyManager.Nuget) + +Reference nuget packages, ships by default with `dotnet fsi`. + +```fsharp +#r "nuget: Newtonsoft.Json" +// Optionally, specify a version explicitly +// #r "nuget: Newtonsoft.Json,11.0.1" + +open Newtonsoft.Json + +let o = {| X = 2; Y = "Hello" |} + +printfn "%s" (JsonConvert.SerializeObject o) +``` + +# `#r "paket:"` [paket](https://fsprojects.github.io/Paket/fsi-integration.html) + +Reference dependencies (nuget, git, gist, github) through [Paket package manager](https://fsprojects.github.io/Paket). + +Learn how to use [Paket FSI integration](https://fsprojects.github.io/Paket/fsi-integration.html). + +```fsharp +#r "paket: nuget FSharp.Data" + +open FSharp.Data + +type MyCsv = CsvProvider<""" +X,Y +2,Hello +4,World +"""> + +for r in MyCsv.GetSample().Rows do + printfn "%i = %s" r.X r.Y +``` diff --git a/src/fsharp/DependencyManager/xlf/DependencyManager.txt.cs.xlf b/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.cs.xlf similarity index 100% rename from src/fsharp/DependencyManager/xlf/DependencyManager.txt.cs.xlf rename to src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.cs.xlf diff --git a/src/fsharp/DependencyManager/xlf/DependencyManager.txt.de.xlf b/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.de.xlf similarity index 100% rename from src/fsharp/DependencyManager/xlf/DependencyManager.txt.de.xlf rename to src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.de.xlf diff --git a/src/fsharp/DependencyManager/xlf/DependencyManager.txt.es.xlf b/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.es.xlf similarity index 100% rename from src/fsharp/DependencyManager/xlf/DependencyManager.txt.es.xlf rename to src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.es.xlf diff --git a/src/fsharp/DependencyManager/xlf/DependencyManager.txt.fr.xlf b/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.fr.xlf similarity index 100% rename from src/fsharp/DependencyManager/xlf/DependencyManager.txt.fr.xlf rename to src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.fr.xlf diff --git a/src/fsharp/DependencyManager/xlf/DependencyManager.txt.it.xlf b/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.it.xlf similarity index 100% rename from src/fsharp/DependencyManager/xlf/DependencyManager.txt.it.xlf rename to src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.it.xlf diff --git a/src/fsharp/DependencyManager/xlf/DependencyManager.txt.ja.xlf b/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.ja.xlf similarity index 100% rename from src/fsharp/DependencyManager/xlf/DependencyManager.txt.ja.xlf rename to src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.ja.xlf diff --git a/src/fsharp/DependencyManager/xlf/DependencyManager.txt.ko.xlf b/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.ko.xlf similarity index 100% rename from src/fsharp/DependencyManager/xlf/DependencyManager.txt.ko.xlf rename to src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.ko.xlf diff --git a/src/fsharp/DependencyManager/xlf/DependencyManager.txt.pl.xlf b/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.pl.xlf similarity index 100% rename from src/fsharp/DependencyManager/xlf/DependencyManager.txt.pl.xlf rename to src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.pl.xlf diff --git a/src/fsharp/DependencyManager/xlf/DependencyManager.txt.pt-BR.xlf b/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.pt-BR.xlf similarity index 100% rename from src/fsharp/DependencyManager/xlf/DependencyManager.txt.pt-BR.xlf rename to src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.pt-BR.xlf diff --git a/src/fsharp/DependencyManager/xlf/DependencyManager.txt.ru.xlf b/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.ru.xlf similarity index 100% rename from src/fsharp/DependencyManager/xlf/DependencyManager.txt.ru.xlf rename to src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.ru.xlf diff --git a/src/fsharp/DependencyManager/xlf/DependencyManager.txt.tr.xlf b/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.tr.xlf similarity index 100% rename from src/fsharp/DependencyManager/xlf/DependencyManager.txt.tr.xlf rename to src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.tr.xlf diff --git a/src/fsharp/DependencyManager/xlf/DependencyManager.txt.zh-Hans.xlf b/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.zh-Hans.xlf similarity index 100% rename from src/fsharp/DependencyManager/xlf/DependencyManager.txt.zh-Hans.xlf rename to src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.zh-Hans.xlf diff --git a/src/fsharp/DependencyManager/xlf/DependencyManager.txt.zh-Hant.xlf b/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.zh-Hant.xlf similarity index 100% rename from src/fsharp/DependencyManager/xlf/DependencyManager.txt.zh-Hant.xlf rename to src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.zh-Hant.xlf diff --git a/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.csproj b/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.csproj index 26620118b48..e75296aa72f 100644 --- a/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.csproj +++ b/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.csproj @@ -2,7 +2,7 @@ true - net5.0 + netcoreapp3.1 Microsoft.FSharp.Compiler.nuspec true .NET Core compatible version of the F# compiler fsc.exe. @@ -11,10 +11,10 @@ - TargetFramework=net5.0 + TargetFramework=netcoreapp3.1 - TargetFramework=net5.0 + TargetFramework=netcoreapp3.1 TargetFramework=netstandard2.0 diff --git a/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.nuspec b/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.nuspec index 8f9f4824dd6..05460a7fe86 100644 --- a/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.nuspec +++ b/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.nuspec @@ -4,7 +4,7 @@ $CommonMetadataElements$ en-US - + @@ -46,19 +46,21 @@ this approach gives a very small deployment. Which is kind of necessary. --> - - - - - - + + + + + + - + target="lib\netcoreapp3.1" /> + + - + @@ -66,13 +68,15 @@ - - + + - + target="lib\netcoreapp3.1" /> + + target="lib\netcoreapp3.1" /> + diff --git a/src/fsharp/NameResolution.fs b/src/fsharp/NameResolution.fs index c0018874162..b6342f47784 100644 --- a/src/fsharp/NameResolution.fs +++ b/src/fsharp/NameResolution.fs @@ -7,12 +7,11 @@ module internal FSharp.Compiler.NameResolution open System.Collections.Generic open Internal.Utilities -open Internal.Utilities.Collections -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras -open Internal.Utilities.Library.ResultOrException open FSharp.Compiler +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Internal.Library.ResultOrException open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AccessibilityLogic @@ -22,16 +21,16 @@ open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.InfoReader open FSharp.Compiler.Infos open FSharp.Compiler.Features -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.Lib +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Position -open FSharp.Compiler.Text.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.Text #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping @@ -82,17 +81,9 @@ let TryFindTypeWithRecdField (modref: ModuleOrNamespaceRef) (id: Ident) = |> QueueList.tryFind (fun tycon -> tycon.GetFieldByName id.idText |> Option.isSome) /// Get the active pattern elements defined by a given value, if any -let ActivePatternElemsOfValRef g (vref: ValRef) = +let ActivePatternElemsOfValRef vref = match TryGetActivePatternInfo vref with - | Some apinfo -> - - let isStructRetTy = - if apinfo.IsTotal then - false - else - let _, apReturnTy = stripFunTy g vref.TauType - isStructTy g apReturnTy - apinfo.ActiveTags |> List.mapi (fun i _ -> APElemRef(apinfo, vref, i, isStructRetTy)) + | Some apinfo -> apinfo.ActiveTags |> List.mapi (fun i _ -> APElemRef(apinfo, vref, i)) | None -> [] /// Try to make a reference to a value in a module. @@ -109,18 +100,19 @@ let TryMkValRefInModRef modref vspec = (fun () -> Some (mkNestedValRef modref vspec)) /// Get the active pattern elements defined by a given value, if any -let ActivePatternElemsOfVal g modref vspec = +let ActivePatternElemsOfVal modref vspec = // If the assembly load set is incomplete then don't add anything to the table match TryMkValRefInModRef modref vspec with | None -> [] - | Some vref -> ActivePatternElemsOfValRef g vref + | Some vref -> ActivePatternElemsOfValRef vref + /// Get the active pattern elements defined in a module, if any. Cache in the slot in the module type. -let ActivePatternElemsOfModuleOrNamespace g (modref: ModuleOrNamespaceRef) : NameMap = +let ActivePatternElemsOfModuleOrNamespace (modref: ModuleOrNamespaceRef) : NameMap = let mtyp = modref.ModuleOrNamespaceType cacheOptRef mtyp.ActivePatternElemRefLookupTable (fun () -> mtyp.AllValsAndMembers - |> Seq.collect (ActivePatternElemsOfVal g modref) + |> Seq.collect (ActivePatternElemsOfVal modref) |> Seq.fold (fun acc apref -> NameMap.add apref.Name apref acc) Map.empty) //--------------------------------------------------------------------------- @@ -162,7 +154,7 @@ type Item = | UnionCase of UnionCaseInfo * hasRequireQualifiedAccessAttr: bool /// Represents the resolution of a name to an F# active pattern result. - | ActivePatternResult of apinfo: ActivePatternInfo * apOverallTy: TType * index: int * range: range + | ActivePatternResult of ActivePatternInfo * TType * int * range /// Represents the resolution of a name to an F# active pattern case within the body of an active pattern. | ActivePatternCase of ActivePatternElemRef @@ -257,9 +249,9 @@ type Item = | Item.Event einfo -> einfo.EventName | Item.Property(_, FSProp(_, _, Some v, _) :: _) | Item.Property(_, FSProp(_, _, _, Some v) :: _) -> v.DisplayName - | Item.Property(nm, _) -> DemangleOperatorName nm + | Item.Property(nm, _) -> PrettyNaming.DemangleOperatorName nm | Item.MethodGroup(_, (FSMeth(_, _, v, _) :: _), _) -> v.DisplayName - | Item.MethodGroup(nm, _, _) -> DemangleOperatorName nm + | Item.MethodGroup(nm, _, _) -> PrettyNaming.DemangleOperatorName nm | Item.CtorGroup(nm, _) -> DemangleGenericTypeName nm | Item.FakeInterfaceCtor (AbbrevOrAppTy tcref) | Item.DelegateCtor (AbbrevOrAppTy tcref) -> DemangleGenericTypeName tcref.DisplayName @@ -710,9 +702,9 @@ let AddFakeNameToNameEnv nm nenv item = {nenv with eUnqualifiedItems = nenv.eUnqualifiedItems.Add (nm, item) } /// Add an F# value to the table of available active patterns -let AddValRefsToActivePatternsNameEnv g ePatItems (vref: ValRef) = +let AddValRefsToActivePatternsNameEnv ePatItems (vref: ValRef) = let ePatItems = - (ActivePatternElemsOfValRef g vref, ePatItems) + (ActivePatternElemsOfValRef vref, ePatItems) ||> List.foldBack (fun apref tab -> NameMap.add apref.Name (Item.ActivePatternCase apref) tab) @@ -725,15 +717,15 @@ let AddValRefsToActivePatternsNameEnv g ePatItems (vref: ValRef) = ePatItems /// Add a set of F# values to the environment. -let AddValRefsToNameEnvWithPriority g bulkAddMode pri nenv (vrefs: ValRef []) = +let AddValRefsToNameEnvWithPriority bulkAddMode pri nenv (vrefs: ValRef []) = if vrefs.Length = 0 then nenv else { nenv with eUnqualifiedItems = AddValRefsToItems bulkAddMode nenv.eUnqualifiedItems vrefs eIndexedExtensionMembers = (nenv.eIndexedExtensionMembers, vrefs) ||> Array.fold (AddValRefToExtensionMembers pri) - ePatItems = (nenv.ePatItems, vrefs) ||> Array.fold (AddValRefsToActivePatternsNameEnv g) } + ePatItems = (nenv.ePatItems, vrefs) ||> Array.fold AddValRefsToActivePatternsNameEnv } /// Add a single F# value to the environment. -let AddValRefToNameEnv g nenv (vref: ValRef) = +let AddValRefToNameEnv nenv (vref: ValRef) = let pri = NextExtensionMethodPriority() { nenv with eUnqualifiedItems = @@ -742,17 +734,17 @@ let AddValRefToNameEnv g nenv (vref: ValRef) = else nenv.eUnqualifiedItems eIndexedExtensionMembers = AddValRefToExtensionMembers pri nenv.eIndexedExtensionMembers vref - ePatItems = AddValRefsToActivePatternsNameEnv g nenv.ePatItems vref } + ePatItems = AddValRefsToActivePatternsNameEnv nenv.ePatItems vref } /// Add a set of active pattern result tags to the environment. -let AddActivePatternResultTagsToNameEnv (apinfo: ActivePatternInfo) nenv apOverallTy m = +let AddActivePatternResultTagsToNameEnv (apinfo: PrettyNaming.ActivePatternInfo) nenv ty m = if List.isEmpty apinfo.Names then nenv else - let apResultNameList = List.indexed apinfo.Names + let apresl = List.indexed apinfo.Names { nenv with eUnqualifiedItems = - (apResultNameList, nenv.eUnqualifiedItems) - ||> List.foldBack (fun (j, nm) acc -> acc.Add(nm, Item.ActivePatternResult(apinfo, apOverallTy, j, m))) } + (apresl, nenv.eUnqualifiedItems) + ||> List.foldBack (fun (j, nm) acc -> acc.Add(nm, Item.ActivePatternResult(apinfo, ty, j, m))) } /// Generalize a union case, from Cons --> List.Cons let GeneralizeUnionCaseRef (ucref: UnionCaseRef) = @@ -1042,7 +1034,7 @@ let ChooseMethInfosForNameEnv g m ty (minfos: MethInfo list) = |> List.filter (fun minfo -> not (minfo.IsInstance || minfo.IsClassConstructor || minfo.IsConstructor) && typeEquiv g minfo.ApparentEnclosingType ty && not (IsMethInfoPlainCSharpStyleExtensionMember g m isExtTy minfo) && - not (IsMangledOpName minfo.LogicalName)) + not (PrettyNaming.IsMangledOpName minfo.LogicalName)) |> List.groupBy (fun minfo -> minfo.LogicalName) |> List.filter (fun (_, methGroup) -> not methGroup.IsEmpty) |> List.map (fun (methName, methGroup) -> KeyValuePair(methName, Item.MethodGroup(methName, methGroup, None))) @@ -1380,7 +1372,7 @@ and AddModuleOrNamespaceContentsToNameEnv (g: TcGlobals) amap (ad: AccessorDomai mty.AllValsAndMembers.ToList() |> List.choose (fun x -> if IsAccessible ad x.Accessibility then TryMkValRefInModRef modref x else None) |> List.toArray - let nenv = AddValRefsToNameEnvWithPriority g BulkAdd.Yes pri nenv vrefs + let nenv = AddValRefsToNameEnvWithPriority BulkAdd.Yes pri nenv vrefs let nestedModules = MakeNestedModuleRefs modref let nenv = (nenv, nestedModules) ||> AddModuleOrNamespaceRefsToNameEnv g amap m root ad nenv @@ -1718,7 +1710,7 @@ let (|ValUse|_|) (item: Item) = let (|ActivePatternCaseUse|_|) (item: Item) = match item with - | Item.ActivePatternCase(APElemRef(_, vref, idx, _)) -> Some (vref.SigRange, vref.DefinitionRange, idx) + | Item.ActivePatternCase(APElemRef(_, vref, idx)) -> Some (vref.SigRange, vref.DefinitionRange, idx) | Item.ActivePatternResult(ap, _, idx, _) -> Some (ap.Range, ap.Range, idx) | _ -> None @@ -1917,14 +1909,14 @@ type TcResultsSinkImpl(tcGlobals, ?sourceText: ISourceText) = let capturedNameResolutionIdentifiers = new System.Collections.Generic.HashSet ( { new IEqualityComparer<_> with - member _.GetHashCode((p: pos, i)) = p.Line + 101 * p.Column + hash i - member _.Equals((p1, i1), (p2, i2)) = posEq p1 p2 && i1 = i2 } ) + member __.GetHashCode((p: pos, i)) = p.Line + 101 * p.Column + hash i + member __.Equals((p1, i1), (p2, i2)) = posEq p1 p2 && i1 = i2 } ) let capturedModulesAndNamespaces = new System.Collections.Generic.HashSet ( { new IEqualityComparer with - member _.GetHashCode ((m, _)) = hash m - member _.Equals ((m1, item1), (m2, item2)) = Range.equals m1 m2 && ItemsAreEffectivelyEqual tcGlobals item1 item2 } ) + member __.GetHashCode ((m, _)) = hash m + member __.Equals ((m1, item1), (m2, item2)) = Range.equals m1 m2 && ItemsAreEffectivelyEqual tcGlobals item1 item2 } ) let allowedRange (m: range) = not m.IsSynthetic @@ -2996,8 +2988,8 @@ let rec ResolvePatternLongIdentInModuleOrNamespace (ncenv: NameResolver) nenv nu success (resInfo, Item.ExnCase (modref.NestedTyconRef exnc), rest) | _ -> // An active pattern constructor in a module - match (ActivePatternElemsOfModuleOrNamespace ncenv.g modref).TryGetValue id.idText with - | true, (APElemRef(_, vref, _, _) as apref) when IsValAccessible ad vref -> + match (ActivePatternElemsOfModuleOrNamespace modref).TryGetValue id.idText with + | true, (APElemRef(_, vref, _) as apref) when IsValAccessible ad vref -> success (resInfo, Item.ActivePatternCase apref, rest) | _ -> match mty.AllValsByLogicalName.TryGetValue id.idText with @@ -4190,7 +4182,7 @@ let rec private EntityRefContainsSomethingAccessible (ncenv: NameResolver) m ad let rec ResolvePartialLongIdentInModuleOrNamespace (ncenv: NameResolver) nenv isApplicableMeth m ad (modref: ModuleOrNamespaceRef) plid allowObsolete = let g = ncenv.g let mty = modref.ModuleOrNamespaceType - + match plid with | [] -> let tycons = @@ -4227,15 +4219,15 @@ let rec ResolvePartialLongIdentInModuleOrNamespace (ncenv: NameResolver) nenv is // Collect up the accessible discriminated union cases in the module @ (UnionCaseRefsInModuleOrNamespace modref |> List.filter (IsUnionCaseUnseen ad g ncenv.amap m >> not) - |> List.filter (fun ucref -> not (HasFSharpAttribute g g.attrib_RequireQualifiedAccessAttribute ucref.TyconRef.Attribs)) |> List.map (fun x -> Item.UnionCase(GeneralizeUnionCaseRef x, false))) // Collect up the accessible active patterns in the module - @ (ActivePatternElemsOfModuleOrNamespace g modref + @ (ActivePatternElemsOfModuleOrNamespace modref |> NameMap.range |> List.filter (fun apref -> apref.ActivePatternVal |> IsValUnseen ad g m |> not) |> List.map Item.ActivePatternCase) + // Collect up the accessible F# exception declarations in the module @ (mty.ExceptionDefinitionsByDemangledName |> NameMap.range @@ -4815,12 +4807,11 @@ let rec ResolvePartialLongIdentInModuleOrNamespaceForItem (ncenv: NameResolver) yield! UnionCaseRefsInModuleOrNamespace modref |> List.filter (IsUnionCaseUnseen ad g ncenv.amap m >> not) - |> List.filter (fun ucref -> not (HasFSharpAttribute g g.attrib_RequireQualifiedAccessAttribute ucref.TyconRef.Attribs)) |> List.map (fun x -> Item.UnionCase(GeneralizeUnionCaseRef x, false)) | Item.ActivePatternCase _ -> // Collect up the accessible active patterns in the module yield! - ActivePatternElemsOfModuleOrNamespace g modref + ActivePatternElemsOfModuleOrNamespace modref |> NameMap.range |> List.filter (fun apref -> apref.ActivePatternVal |> IsValUnseen ad g m |> not) |> List.map Item.ActivePatternCase diff --git a/src/fsharp/NameResolution.fsi b/src/fsharp/NameResolution.fsi index 7eab2ff2144..d71def02718 100755 --- a/src/fsharp/NameResolution.fsi +++ b/src/fsharp/NameResolution.fsi @@ -2,29 +2,30 @@ module internal FSharp.Compiler.NameResolution -open Internal.Utilities.Library open FSharp.Compiler open FSharp.Compiler.AccessibilityLogic +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.Infos +open FSharp.Compiler.Range open FSharp.Compiler.Import open FSharp.Compiler.InfoReader -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming -open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TcGlobals +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Text /// A NameResolver is a context for name resolution. It primarily holds an InfoReader. type NameResolver = - new: g:TcGlobals * amap:ImportMap * infoReader:InfoReader * instantiationGenerator:(range -> Typars -> TypeInst) -> NameResolver - member InfoReader: InfoReader - member amap: ImportMap - member g: TcGlobals - member languageSupportsNameOf: bool + new : g:TcGlobals * amap:ImportMap * infoReader:InfoReader * instantiationGenerator:(range -> Typars -> TypeInst) -> NameResolver + member InfoReader : InfoReader + member amap : ImportMap + member g : TcGlobals + member languageSupportsNameOf : bool /// Get the active pattern elements defined in a module, if any. Cache in the slot in the module type. -val ActivePatternElemsOfModuleOrNamespace: g: TcGlobals -> ModuleOrNamespaceRef -> NameMap +val ActivePatternElemsOfModuleOrNamespace : ModuleOrNamespaceRef -> NameMap [] /// Represents the item with which a named argument is associated. @@ -36,7 +37,7 @@ type ArgumentContainer = /// Detect a use of a nominal type, including type abbreviations. /// When reporting symbols, we care about abbreviations, e.g. 'int' and 'int32' count as two separate symbols. -val (|AbbrevOrAppTy|_|): TType -> TyconRef option +val (|AbbrevOrAppTy|_|) : TType -> TyconRef option type EnclosingTypeInst = TypeInst @@ -50,7 +51,7 @@ type Item = | UnionCase of UnionCaseInfo * hasRequireQualifiedAccessAttr: bool /// Represents the resolution of a name to an F# active pattern result. - | ActivePatternResult of apinfo: ActivePatternInfo * apOverallTy: TType * index: int * range: range + | ActivePatternResult of ActivePatternInfo * TType * int * range /// Represents the resolution of a name to an F# active pattern case within the body of an active pattern. | ActivePatternCase of ActivePatternElemRef @@ -123,17 +124,17 @@ type Item = /// Represents the potential resolution of an unqualified name to a type. | UnqualifiedType of TyconRef list - member DisplayName: string + member DisplayName : string [] /// Pairs an Item with a TyparInst showing how generic type variables of the item are instantiated at /// a particular usage point. type ItemWithInst = - { Item: Item + { Item : Item TyparInst: TyparInst } -val (|ItemWithInst|): ItemWithInst -> Item * TyparInst -val ItemWithNoInst: Item -> ItemWithInst +val (|ItemWithInst|) : ItemWithInst -> Item * TyparInst +val ItemWithNoInst : Item -> ItemWithInst /// Represents a record field resolution and the information if the usage is deprecated. type FieldResolution = FieldResolution of RecdFieldInfo * bool @@ -150,7 +151,7 @@ type ExtensionMember = /// Describes the sequence order of the introduction of an extension method. Extension methods that are introduced /// later through 'open' get priority in overload resolution. - member Priority: ExtensionMethodPriority + member Priority : ExtensionMethodPriority /// The environment of information used to resolve names [] @@ -208,9 +209,9 @@ type NameResolutionEnv = eTypars: NameMap } - static member Empty: g:TcGlobals -> NameResolutionEnv - member DisplayEnv: DisplayEnv - member FindUnqualifiedItem: string -> Item + static member Empty : g:TcGlobals -> NameResolutionEnv + member DisplayEnv : DisplayEnv + member FindUnqualifiedItem : string -> Item type FullyQualifiedFlag = | FullyQualified @@ -220,40 +221,40 @@ type FullyQualifiedFlag = type BulkAdd = Yes | No /// Find a field in anonymous record type -val internal TryFindAnonRecdFieldOfType: TcGlobals -> TType -> string -> Item option +val internal TryFindAnonRecdFieldOfType : TcGlobals -> TType -> string -> Item option /// Add extra items to the environment for Visual Studio, e.g. static members -val internal AddFakeNamedValRefToNameEnv: string -> NameResolutionEnv -> ValRef -> NameResolutionEnv +val internal AddFakeNamedValRefToNameEnv : string -> NameResolutionEnv -> ValRef -> NameResolutionEnv /// Add some extra items to the environment for Visual Studio, e.g. record members -val internal AddFakeNameToNameEnv: string -> NameResolutionEnv -> Item -> NameResolutionEnv +val internal AddFakeNameToNameEnv : string -> NameResolutionEnv -> Item -> NameResolutionEnv /// Add a single F# value to the environment. -val internal AddValRefToNameEnv: TcGlobals -> NameResolutionEnv -> ValRef -> NameResolutionEnv +val internal AddValRefToNameEnv : NameResolutionEnv -> ValRef -> NameResolutionEnv /// Add active pattern result tags to the environment. -val internal AddActivePatternResultTagsToNameEnv: ActivePatternInfo -> NameResolutionEnv -> TType -> range -> NameResolutionEnv +val internal AddActivePatternResultTagsToNameEnv : ActivePatternInfo -> NameResolutionEnv -> TType -> range -> NameResolutionEnv /// Add a list of type definitions to the name resolution environment -val internal AddTyconRefsToNameEnv : BulkAdd -> bool -> TcGlobals -> ImportMap -> AccessorDomain -> range -> bool -> NameResolutionEnv -> TyconRef list -> NameResolutionEnv +val internal AddTyconRefsToNameEnv : BulkAdd -> bool -> TcGlobals -> ImportMap -> AccessorDomain -> range -> bool -> NameResolutionEnv -> TyconRef list -> NameResolutionEnv /// Add an F# exception definition to the name resolution environment -val internal AddExceptionDeclsToNameEnv : BulkAdd -> NameResolutionEnv -> TyconRef -> NameResolutionEnv +val internal AddExceptionDeclsToNameEnv : BulkAdd -> NameResolutionEnv -> TyconRef -> NameResolutionEnv /// Add a module abbreviation to the name resolution environment -val internal AddModuleAbbrevToNameEnv : Ident -> NameResolutionEnv -> ModuleOrNamespaceRef list -> NameResolutionEnv +val internal AddModuleAbbrevToNameEnv : Ident -> NameResolutionEnv -> ModuleOrNamespaceRef list -> NameResolutionEnv /// Add a list of module or namespace to the name resolution environment, including any sub-modules marked 'AutoOpen' -val internal AddModuleOrNamespaceRefsToNameEnv : TcGlobals -> ImportMap -> range -> bool -> AccessorDomain -> NameResolutionEnv -> ModuleOrNamespaceRef list -> NameResolutionEnv +val internal AddModuleOrNamespaceRefsToNameEnv : TcGlobals -> ImportMap -> range -> bool -> AccessorDomain -> NameResolutionEnv -> ModuleOrNamespaceRef list -> NameResolutionEnv /// Add a single modules or namespace to the name resolution environment -val internal AddModuleOrNamespaceRefToNameEnv : TcGlobals -> ImportMap -> range -> bool -> AccessorDomain -> NameResolutionEnv -> ModuleOrNamespaceRef -> NameResolutionEnv +val internal AddModuleOrNamespaceRefToNameEnv : TcGlobals -> ImportMap -> range -> bool -> AccessorDomain -> NameResolutionEnv -> ModuleOrNamespaceRef -> NameResolutionEnv /// Add a list of modules or namespaces to the name resolution environment -val internal AddModuleOrNamespaceRefsContentsToNameEnv: TcGlobals -> ImportMap -> AccessorDomain -> range -> bool -> NameResolutionEnv -> ModuleOrNamespaceRef list -> NameResolutionEnv +val internal AddModuleOrNamespaceRefsContentsToNameEnv : TcGlobals -> ImportMap -> AccessorDomain -> range -> bool -> NameResolutionEnv -> ModuleOrNamespaceRef list -> NameResolutionEnv /// Add the content of a type to the name resolution environment -val internal AddTypeContentsToNameEnv: TcGlobals -> ImportMap -> AccessorDomain -> range -> NameResolutionEnv -> TType -> NameResolutionEnv +val internal AddTypeContentsToNameEnv : TcGlobals -> ImportMap -> AccessorDomain -> range -> NameResolutionEnv -> TType -> NameResolutionEnv /// A flag which indicates if it is an error to have two declared type parameters with identical names /// in the name resolution environment. @@ -262,10 +263,10 @@ type CheckForDuplicateTyparFlag = | NoCheckForDuplicateTypars /// Add some declared type parameters to the name resolution environment -val internal AddDeclaredTyparsToNameEnv: CheckForDuplicateTyparFlag -> NameResolutionEnv -> Typar list -> NameResolutionEnv +val internal AddDeclaredTyparsToNameEnv : CheckForDuplicateTyparFlag -> NameResolutionEnv -> Typar list -> NameResolutionEnv /// Qualified lookup of type names in the environment -val internal LookupTypeNameInEnvNoArity: FullyQualifiedFlag -> string -> NameResolutionEnv -> TyconRef list +val internal LookupTypeNameInEnvNoArity : FullyQualifiedFlag -> string -> NameResolutionEnv -> TyconRef list /// Indicates whether we are resolving type names to type definitions or to constructor methods. type TypeNameResolutionFlag = @@ -281,16 +282,16 @@ type TypeNameResolutionFlag = [] type TypeNameResolutionStaticArgsInfo = /// Indicates definite knowledge of empty type arguments, i.e. the logical equivalent of name< > - static member DefiniteEmpty: TypeNameResolutionStaticArgsInfo + static member DefiniteEmpty : TypeNameResolutionStaticArgsInfo /// Deduce definite knowledge of type arguments - static member FromTyArgs: numTyArgs:int -> TypeNameResolutionStaticArgsInfo + static member FromTyArgs : numTyArgs:int -> TypeNameResolutionStaticArgsInfo /// Represents information which guides name resolution of types. [] type TypeNameResolutionInfo = | TypeNameResolutionInfo of TypeNameResolutionFlag * TypeNameResolutionStaticArgsInfo - static member Default: TypeNameResolutionInfo - static member ResolveToTypeRefs: TypeNameResolutionStaticArgsInfo -> TypeNameResolutionInfo + static member Default : TypeNameResolutionInfo + static member ResolveToTypeRefs : TypeNameResolutionStaticArgsInfo -> TypeNameResolutionInfo /// Represents the kind of the occurrence when reporting a name in name resolution [] @@ -305,58 +306,58 @@ type internal ItemOccurence = | Open /// Check for equality, up to signature matching -val ItemsAreEffectivelyEqual: TcGlobals -> Item -> Item -> bool +val ItemsAreEffectivelyEqual : TcGlobals -> Item -> Item -> bool /// Hash compatible with ItemsAreEffectivelyEqual -val ItemsAreEffectivelyEqualHash: TcGlobals -> Item -> int +val ItemsAreEffectivelyEqualHash : TcGlobals -> Item -> int [] type internal CapturedNameResolution = /// line and column - member Pos: pos + member Pos : pos /// Named item - member Item: Item + member Item : Item /// The active instantiation for any generic type parameters member ItemWithInst: ItemWithInst /// Information about the occurrence of the symbol - member ItemOccurence: ItemOccurence + member ItemOccurence : ItemOccurence /// Information about printing. For example, should redundant keywords be hidden? - member DisplayEnv: DisplayEnv + member DisplayEnv : DisplayEnv /// Naming environment--for example, currently open namespaces. - member NameResolutionEnv: NameResolutionEnv + member NameResolutionEnv : NameResolutionEnv /// The access rights of code at the location - member AccessorDomain: AccessorDomain + member AccessorDomain : AccessorDomain /// The starting and ending position - member Range: range + member Range : range [] type internal TcResolutions = /// Name resolution environments for every interesting region in the file. These regions may /// overlap, in which case the smallest region applicable should be used. - member CapturedEnvs: ResizeArray + member CapturedEnvs : ResizeArray /// Information of exact types found for expressions, that can be to the left of a dot. /// typ - the inferred type for an expression - member CapturedExpressionTypings: ResizeArray + member CapturedExpressionTypings : ResizeArray /// Exact name resolutions - member CapturedNameResolutions: ResizeArray + member CapturedNameResolutions : ResizeArray /// Represents additional resolutions of names to groups of methods. /// CapturedNameResolutions should be checked when no captured method group is found. /// See TypeCheckInfo.GetCapturedNameResolutions for example. - member CapturedMethodGroupResolutions: ResizeArray + member CapturedMethodGroupResolutions : ResizeArray /// Represents the empty set of resolutions - static member Empty: TcResolutions + static member Empty : TcResolutions [] @@ -371,16 +372,16 @@ type TcSymbolUseData = type internal TcSymbolUses = /// Get all the uses of a particular item within the file - member GetUsesOfSymbol: Item -> TcSymbolUseData[] + member GetUsesOfSymbol : Item -> TcSymbolUseData[] /// All the uses of all items within the file - member AllUsesOfSymbols: TcSymbolUseData[][] + member AllUsesOfSymbols : TcSymbolUseData[][] /// Get the locations of all the printf format specifiers in the file - member GetFormatSpecifierLocationsAndArity: unit -> (range * int)[] + member GetFormatSpecifierLocationsAndArity : unit -> (range * int)[] /// Empty collection of symbol uses - static member Empty: TcSymbolUses + static member Empty : TcSymbolUses /// Represents open declaration statement. type internal OpenDeclaration = @@ -388,7 +389,7 @@ type internal OpenDeclaration = Target: SynOpenDeclTarget /// Full range of the open declaration. - Range: range option + Range : range option /// Modules or namespaces which is opened with this declaration. Modules: ModuleOrNamespaceRef list @@ -400,74 +401,71 @@ type internal OpenDeclaration = AppliedScope: range /// If it's `namespace Xxx.Yyy` declaration. - IsOwnNamespace: bool - } + IsOwnNamespace: bool } /// Create a new instance of OpenDeclaration. - static member Create: target: SynOpenDeclTarget * modules: ModuleOrNamespaceRef list * types: TType list * appliedScope: range * isOwnNamespace: bool -> OpenDeclaration + static member Create : target: SynOpenDeclTarget * modules: ModuleOrNamespaceRef list * types: TType list * appliedScope: range * isOwnNamespace: bool -> OpenDeclaration /// Source text and an array of line end positions, used for format string parsing type FormatStringCheckContext = { /// Source text SourceText: ISourceText - /// Array of line start positions - LineStartPositions: int[] - } + LineStartPositions: int[] } /// An abstract type for reporting the results of name resolution and type checking type ITypecheckResultsSink = /// Record that an environment is active over the given scope range - abstract NotifyEnvWithScope: range * NameResolutionEnv * AccessorDomain -> unit + abstract NotifyEnvWithScope : range * NameResolutionEnv * AccessorDomain -> unit /// Record that an expression has a specific type at the given range. - abstract NotifyExprHasType: TType * NameResolutionEnv * AccessorDomain * range -> unit + abstract NotifyExprHasType : TType * NameResolutionEnv * AccessorDomain * range -> unit /// Record that a name resolution occurred at a specific location in the source - abstract NotifyNameResolution: pos * Item * TyparInst * ItemOccurence * NameResolutionEnv * AccessorDomain * range * bool -> unit + abstract NotifyNameResolution : pos * Item * TyparInst * ItemOccurence * NameResolutionEnv * AccessorDomain * range * bool -> unit /// Record that a method group name resolution occurred at a specific location in the source - abstract NotifyMethodGroupNameResolution: pos * Item * Item * TyparInst * ItemOccurence * NameResolutionEnv * AccessorDomain * range * bool -> unit + abstract NotifyMethodGroupNameResolution : pos * Item * Item * TyparInst * ItemOccurence * NameResolutionEnv * AccessorDomain * range * bool -> unit /// Record that a printf format specifier occurred at a specific location in the source - abstract NotifyFormatSpecifierLocation: range * int -> unit + abstract NotifyFormatSpecifierLocation : range * int -> unit /// Record that an open declaration occured in a given scope range - abstract NotifyOpenDeclaration: OpenDeclaration -> unit + abstract NotifyOpenDeclaration : OpenDeclaration -> unit /// Get the current source - abstract CurrentSourceText: ISourceText option + abstract CurrentSourceText : ISourceText option /// Cached line-end normalized source text and an array of line end positions, used for format string parsing - abstract FormatStringCheckContext: FormatStringCheckContext option + abstract FormatStringCheckContext : FormatStringCheckContext option /// An implementation of ITypecheckResultsSink to collect information during type checking type internal TcResultsSinkImpl = /// Create a TcResultsSinkImpl - new: tcGlobals: TcGlobals * ?sourceText: ISourceText -> TcResultsSinkImpl + new : tcGlobals : TcGlobals * ?sourceText: ISourceText -> TcResultsSinkImpl /// Get all the resolutions reported to the sink - member GetResolutions: unit -> TcResolutions + member GetResolutions : unit -> TcResolutions /// Get all the uses of all symbols reported to the sink - member GetSymbolUses: unit -> TcSymbolUses + member GetSymbolUses : unit -> TcSymbolUses /// Get all open declarations reported to the sink - member GetOpenDeclarations: unit -> OpenDeclaration[] + member GetOpenDeclarations : unit -> OpenDeclaration[] /// Get the format specifier locations - member GetFormatSpecifierLocations: unit -> (range * int)[] + member GetFormatSpecifierLocations : unit -> (range * int)[] interface ITypecheckResultsSink /// An abstract type for reporting the results of name resolution and type checking, and which allows /// temporary suspension and/or redirection of reporting. type TcResultsSink = - { mutable CurrentSink: ITypecheckResultsSink option } - static member NoSink: TcResultsSink - static member WithSink: ITypecheckResultsSink -> TcResultsSink + { mutable CurrentSink : ITypecheckResultsSink option } + static member NoSink : TcResultsSink + static member WithSink : ITypecheckResultsSink -> TcResultsSink /// Indicates if we only need one result or all possible results from a resolution. @@ -477,37 +475,37 @@ type ResultCollectionSettings = | AtMostOneResult /// Temporarily redirect reporting of name resolution and type checking results -val internal WithNewTypecheckResultsSink: ITypecheckResultsSink * TcResultsSink -> System.IDisposable +val internal WithNewTypecheckResultsSink : ITypecheckResultsSink * TcResultsSink -> System.IDisposable /// Temporarily suspend reporting of name resolution and type checking results -val internal TemporarilySuspendReportingTypecheckResultsToSink: TcResultsSink -> System.IDisposable +val internal TemporarilySuspendReportingTypecheckResultsToSink : TcResultsSink -> System.IDisposable /// Report the active name resolution environment for a source range -val internal CallEnvSink : TcResultsSink -> range * NameResolutionEnv * AccessorDomain -> unit +val internal CallEnvSink : TcResultsSink -> range * NameResolutionEnv * AccessorDomain -> unit /// Report a specific name resolution at a source range -val internal CallNameResolutionSink: TcResultsSink -> range * NameResolutionEnv * Item * TyparInst * ItemOccurence * AccessorDomain -> unit +val internal CallNameResolutionSink : TcResultsSink -> range * NameResolutionEnv * Item * TyparInst * ItemOccurence * AccessorDomain -> unit /// Report a specific method group name resolution at a source range -val internal CallMethodGroupNameResolutionSink: TcResultsSink -> range * NameResolutionEnv * Item * Item * TyparInst * ItemOccurence * AccessorDomain -> unit +val internal CallMethodGroupNameResolutionSink : TcResultsSink -> range * NameResolutionEnv * Item * Item * TyparInst * ItemOccurence * AccessorDomain -> unit /// Report a specific name resolution at a source range, replacing any previous resolutions -val internal CallNameResolutionSinkReplacing: TcResultsSink -> range * NameResolutionEnv * Item * TyparInst * ItemOccurence * AccessorDomain -> unit +val internal CallNameResolutionSinkReplacing : TcResultsSink -> range * NameResolutionEnv * Item * TyparInst * ItemOccurence * AccessorDomain -> unit /// Report a specific name resolution at a source range -val internal CallExprHasTypeSink : TcResultsSink -> range * NameResolutionEnv * TType * AccessorDomain -> unit +val internal CallExprHasTypeSink : TcResultsSink -> range * NameResolutionEnv * TType * AccessorDomain -> unit /// Report an open declaration -val internal CallOpenDeclarationSink: TcResultsSink -> OpenDeclaration -> unit +val internal CallOpenDeclarationSink : TcResultsSink -> OpenDeclaration -> unit /// Get all the available properties of a type (both intrinsic and extension) -val internal AllPropInfosOfTypeInScope: ResultCollectionSettings -> InfoReader -> NameResolutionEnv -> string option -> AccessorDomain -> FindMemberFlag -> range -> TType -> PropInfo list +val internal AllPropInfosOfTypeInScope : ResultCollectionSettings -> InfoReader -> NameResolutionEnv -> string option -> AccessorDomain -> FindMemberFlag -> range -> TType -> PropInfo list /// Get all the available properties of a type (only extension) -val internal ExtensionPropInfosOfTypeInScope: ResultCollectionSettings -> InfoReader -> NameResolutionEnv -> string option -> AccessorDomain -> range -> TType -> PropInfo list +val internal ExtensionPropInfosOfTypeInScope : ResultCollectionSettings -> InfoReader -> NameResolutionEnv -> string option -> AccessorDomain -> range -> TType -> PropInfo list /// Get the available methods of a type (both declared and inherited) -val internal AllMethInfosOfTypeInScope: ResultCollectionSettings -> InfoReader -> NameResolutionEnv -> string option -> AccessorDomain -> FindMemberFlag -> range -> TType -> MethInfo list +val internal AllMethInfosOfTypeInScope : ResultCollectionSettings -> InfoReader -> NameResolutionEnv -> string option -> AccessorDomain -> FindMemberFlag -> range -> TType -> MethInfo list /// Used to report an error condition where name resolution failed due to an indeterminate type exception internal IndeterminateType of range @@ -516,7 +514,7 @@ exception internal IndeterminateType of range exception internal UpperCaseIdentifierInPattern of range /// Generate a new reference to a record field with a fresh type instantiation -val FreshenRecdFieldRef :NameResolver -> range -> RecdFieldRef -> RecdFieldInfo +val FreshenRecdFieldRef :NameResolver -> Range.range -> RecdFieldRef -> RecdFieldInfo /// Indicates the kind of lookup being performed. Note, this type should be made private to nameres.fs. [] @@ -541,34 +539,34 @@ type PermitDirectReferenceToGeneratedType = | No /// Resolve a long identifier to a namespace, module. -val internal ResolveLongIdentAsModuleOrNamespace: TcResultsSink -> ResultCollectionSettings -> Import.ImportMap -> range -> first: bool -> FullyQualifiedFlag -> NameResolutionEnv -> AccessorDomain -> Ident -> Ident list -> isOpenDecl: bool -> ResultOrException<(int * ModuleOrNamespaceRef * ModuleOrNamespaceType) list > +val internal ResolveLongIdentAsModuleOrNamespace : TcResultsSink -> ResultCollectionSettings -> Import.ImportMap -> range -> first: bool -> FullyQualifiedFlag -> NameResolutionEnv -> AccessorDomain -> Ident -> Ident list -> isOpenDecl: bool -> ResultOrException<(int * ModuleOrNamespaceRef * ModuleOrNamespaceType) list > /// Resolve a long identifier to an object constructor. -val internal ResolveObjectConstructor : NameResolver -> DisplayEnv -> range -> AccessorDomain -> TType -> ResultOrException +val internal ResolveObjectConstructor : NameResolver -> DisplayEnv -> range -> AccessorDomain -> TType -> ResultOrException /// Resolve a long identifier using type-qualified name resolution. -val internal ResolveLongIdentInType : TcResultsSink -> NameResolver -> NameResolutionEnv -> LookupKind -> range -> AccessorDomain -> Ident -> FindMemberFlag -> TypeNameResolutionInfo -> TType -> Item * Ident list +val internal ResolveLongIdentInType : TcResultsSink -> NameResolver -> NameResolutionEnv -> LookupKind -> range -> AccessorDomain -> Ident -> FindMemberFlag -> TypeNameResolutionInfo -> TType -> Item * Ident list /// Resolve a long identifier when used in a pattern. -val internal ResolvePatternLongIdent : TcResultsSink -> NameResolver -> WarnOnUpperFlag -> bool -> range -> AccessorDomain -> NameResolutionEnv -> TypeNameResolutionInfo -> Ident list -> Item +val internal ResolvePatternLongIdent : TcResultsSink -> NameResolver -> WarnOnUpperFlag -> bool -> range -> AccessorDomain -> NameResolutionEnv -> TypeNameResolutionInfo -> Ident list -> Item /// Resolve a long identifier representing a type name -val internal ResolveTypeLongIdentInTyconRef : TcResultsSink -> NameResolver -> NameResolutionEnv -> TypeNameResolutionInfo -> AccessorDomain -> range -> ModuleOrNamespaceRef -> Ident list -> TyconRef +val internal ResolveTypeLongIdentInTyconRef : TcResultsSink -> NameResolver -> NameResolutionEnv -> TypeNameResolutionInfo -> AccessorDomain -> range -> ModuleOrNamespaceRef -> Ident list -> TyconRef /// Resolve a long identifier to a type definition -val internal ResolveTypeLongIdent : TcResultsSink -> NameResolver -> ItemOccurence -> FullyQualifiedFlag -> NameResolutionEnv -> AccessorDomain -> Ident list -> TypeNameResolutionStaticArgsInfo -> PermitDirectReferenceToGeneratedType -> ResultOrException +val internal ResolveTypeLongIdent : TcResultsSink -> NameResolver -> ItemOccurence -> FullyQualifiedFlag -> NameResolutionEnv -> AccessorDomain -> Ident list -> TypeNameResolutionStaticArgsInfo -> PermitDirectReferenceToGeneratedType -> ResultOrException /// Resolve a long identifier to a field -val internal ResolveField : TcResultsSink -> NameResolver -> NameResolutionEnv -> AccessorDomain -> TType -> Ident list * Ident -> Ident list -> FieldResolution list +val internal ResolveField : TcResultsSink -> NameResolver -> NameResolutionEnv -> AccessorDomain -> TType -> Ident list * Ident -> Ident list -> FieldResolution list /// Resolve a long identifier occurring in an expression position -val internal ResolveExprLongIdent : TcResultsSink -> NameResolver -> range -> AccessorDomain -> NameResolutionEnv -> TypeNameResolutionInfo -> Ident list -> ResultOrException +val internal ResolveExprLongIdent : TcResultsSink -> NameResolver -> range -> AccessorDomain -> NameResolutionEnv -> TypeNameResolutionInfo -> Ident list -> ResultOrException /// Resolve a (possibly incomplete) long identifier to a loist of possible class or record fields -val internal ResolvePartialLongIdentToClassOrRecdFields: NameResolver -> NameResolutionEnv -> range -> AccessorDomain -> string list -> bool -> Item list +val internal ResolvePartialLongIdentToClassOrRecdFields : NameResolver -> NameResolutionEnv -> range -> AccessorDomain -> string list -> bool -> Item list /// Return the fields for the given class or record -val internal ResolveRecordOrClassFieldsOfType : NameResolver -> range -> AccessorDomain -> TType -> bool -> Item list +val internal ResolveRecordOrClassFieldsOfType : NameResolver -> range -> AccessorDomain -> TType -> bool -> Item list /// Specifies extra work to do after overload resolution [] @@ -588,19 +586,19 @@ type AfterResolution = | RecordResolution of Item option * (TyparInst -> unit) * (MethInfo * PropInfo option * TyparInst -> unit) * (unit -> unit) /// Resolve a long identifier occurring in an expression position. -val internal ResolveLongIdentAsExprAndComputeRange: TcResultsSink -> NameResolver -> range -> AccessorDomain -> NameResolutionEnv -> TypeNameResolutionInfo -> Ident list -> ResultOrException +val internal ResolveLongIdentAsExprAndComputeRange : TcResultsSink -> NameResolver -> range -> AccessorDomain -> NameResolutionEnv -> TypeNameResolutionInfo -> Ident list -> ResultOrException /// Resolve a long identifier occurring in an expression position, qualified by a type. -val internal ResolveExprDotLongIdentAndComputeRange: TcResultsSink -> NameResolver -> range -> AccessorDomain -> NameResolutionEnv -> TType -> Ident list -> TypeNameResolutionInfo -> FindMemberFlag -> bool -> Item * range * Ident list * AfterResolution +val internal ResolveExprDotLongIdentAndComputeRange : TcResultsSink -> NameResolver -> range -> AccessorDomain -> NameResolutionEnv -> TType -> Ident list -> TypeNameResolutionInfo -> FindMemberFlag -> bool -> Item * range * Ident list * AfterResolution /// A generator of type instantiations used when no more specific type instantiation is known. -val FakeInstantiationGenerator: range -> Typar list -> TType list +val FakeInstantiationGenerator : range -> Typar list -> TType list /// Try to resolve a long identifier as type. -val TryToResolveLongIdentAsType: NameResolver -> NameResolutionEnv -> range -> string list -> TType option +val TryToResolveLongIdentAsType : NameResolver -> NameResolutionEnv -> range -> string list -> TType option /// Resolve a (possibly incomplete) long identifier to a set of possible resolutions. -val ResolvePartialLongIdent: NameResolver -> NameResolutionEnv -> (MethInfo -> TType -> bool) -> range -> AccessorDomain -> string list -> bool -> Item list +val ResolvePartialLongIdent : NameResolver -> NameResolutionEnv -> (MethInfo -> TType -> bool) -> range -> AccessorDomain -> string list -> bool -> Item list [] type ResolveCompletionTargets = @@ -608,11 +606,11 @@ type ResolveCompletionTargets = | SettablePropertiesAndFields /// Resolve a (possibly incomplete) long identifier to a set of possible resolutions, qualified by type. -val ResolveCompletionsInType : NameResolver -> NameResolutionEnv -> ResolveCompletionTargets -> range -> AccessorDomain -> bool -> TType -> Item list +val ResolveCompletionsInType : NameResolver -> NameResolutionEnv -> ResolveCompletionTargets -> Range.range -> AccessorDomain -> bool -> TType -> Item list -val GetVisibleNamespacesAndModulesAtPoint: NameResolver -> NameResolutionEnv -> range -> AccessorDomain -> ModuleOrNamespaceRef list +val GetVisibleNamespacesAndModulesAtPoint : NameResolver -> NameResolutionEnv -> range -> AccessorDomain -> ModuleOrNamespaceRef list -val IsItemResolvable: NameResolver -> NameResolutionEnv -> range -> AccessorDomain -> string list -> Item -> bool +val IsItemResolvable : NameResolver -> NameResolutionEnv -> range -> AccessorDomain -> string list -> Item -> bool -val TrySelectExtensionMethInfoOfILExtMem: range -> ImportMap -> TType -> TyconRef * MethInfo * ExtensionMethodPriority -> MethInfo option +val TrySelectExtensionMethInfoOfILExtMem : range -> ImportMap -> TType -> TyconRef * MethInfo * ExtensionMethodPriority -> MethInfo option \ No newline at end of file diff --git a/src/fsharp/NicePrint.fs b/src/fsharp/NicePrint.fs index 4cf03cb77ec..23fade2dfc1 100755 --- a/src/fsharp/NicePrint.fs +++ b/src/fsharp/NicePrint.fs @@ -3,25 +3,22 @@ /// Print Signatures/Types, for signatures, intellisense, quick info, FSI responses module internal FSharp.Compiler.NicePrint -open Internal.Utilities.Collections -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras -open Internal.Utilities.Rational open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AttributeChecking open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Infos open FSharp.Compiler.InfoReader -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.Layout +open FSharp.Compiler.Layout.TaggedTextOps +open FSharp.Compiler.Lib +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Rational +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Layout -open FSharp.Compiler.Text.LayoutRender -open FSharp.Compiler.Text.TaggedText -open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps @@ -34,15 +31,15 @@ module internal PrintUtilities = let squareAngleL x = LeftL.leftBracketAngle ^^ x ^^ RightL.rightBracketAngle - let angleL x = sepL TaggedText.leftAngle ^^ x ^^ rightL TaggedText.rightAngle + let angleL x = sepL Literals.leftAngle ^^ x ^^ rightL Literals.rightAngle - let braceL x = wordL TaggedText.leftBrace ^^ x ^^ wordL TaggedText.rightBrace + let braceL x = wordL Literals.leftBrace ^^ x ^^ wordL Literals.rightBrace - let braceBarL x = wordL TaggedText.leftBraceBar ^^ x ^^ wordL TaggedText.rightBraceBar + let braceBarL x = wordL Literals.leftBraceBar ^^ x ^^ wordL Literals.rightBraceBar let comment str = wordL (tagText (sprintf "(* %s *)" str)) - let layoutsL (ls: Layout list) : Layout = + let layoutsL (ls: layout list) : layout = match ls with | [] -> emptyL | [x] -> x @@ -121,97 +118,10 @@ module internal PrintUtilities = let tcref = attrib.TyconRef squareAngleL (layoutTyconRefImpl true denv tcref) - /// layout the xml docs immediately before another block - let layoutXmlDoc (denv: DisplayEnv) (xml: XmlDoc) restL = - if denv.showDocumentation - then - let xmlDocL = - if xml.IsEmpty - then - emptyL - else - xml.UnprocessedLines - |> Array.map (fun x -> - x.Split('\n') // These lines may have new-lines in them and we need to split them so we can format it - ) - |> Array.concat - /// note here that we don't add a space after the triple-slash, because - /// the implicit spacing hasn't been trimmed here. - |> Array.map (fun line -> ("///" + line) |> tagText |> wordL) - |> List.ofArray - |> aboveListL - xmlDocL @@ restL - else restL - - let private layoutXmlDocFromSig (denv: DisplayEnv) (infoReader: InfoReader) (possibleXmlDoc: XmlDoc) restL (info: (string option * string) option) = - let xmlDoc = - if possibleXmlDoc.IsEmpty then - match info with - | Some(Some ccuFileName, xmlDocSig) -> - infoReader.amap.assemblyLoader.TryFindXmlDocumentationInfo(System.IO.Path.GetFileNameWithoutExtension ccuFileName) - |> Option.bind (fun xmlDocInfo -> - xmlDocInfo.TryGetXmlDocBySig(xmlDocSig) - ) - |> Option.defaultValue possibleXmlDoc - | _ -> - possibleXmlDoc - else - possibleXmlDoc - layoutXmlDoc denv xmlDoc restL - - let layoutXmlDocOfValRef (denv: DisplayEnv) (infoReader: InfoReader) (vref: ValRef) restL = - if denv.showDocumentation then - GetXmlDocSigOfValRef denv.g vref - |> layoutXmlDocFromSig denv infoReader vref.XmlDoc restL - else - restL - - let layoutXmlDocOfMethInfo (denv: DisplayEnv) (infoReader: InfoReader) (minfo: MethInfo) restL = - if denv.showDocumentation then - GetXmlDocSigOfMethInfo infoReader Range.range0 minfo - |> layoutXmlDocFromSig denv infoReader minfo.XmlDoc restL - else - restL - - let layoutXmlDocOfPropInfo (denv: DisplayEnv) (infoReader: InfoReader) (pinfo: PropInfo) restL = - if denv.showDocumentation then - GetXmlDocSigOfProp infoReader Range.range0 pinfo - |> layoutXmlDocFromSig denv infoReader pinfo.XmlDoc restL - else - restL - - let layoutXmlDocOfEventInfo (denv: DisplayEnv) (infoReader: InfoReader) (einfo: EventInfo) restL = - if denv.showDocumentation then - GetXmlDocSigOfEvent infoReader Range.range0 einfo - |> layoutXmlDocFromSig denv infoReader einfo.XmlDoc restL - else - restL - - let layoutXmlDocOfRecdFieldRef (denv: DisplayEnv) (infoReader: InfoReader) (rfref: RecdFieldRef) restL = - if denv.showDocumentation then - GetXmlDocSigOfRecdFieldRef rfref - |> layoutXmlDocFromSig denv infoReader rfref.RecdField.XmlDoc restL - else - restL - - let layoutXmlDocOfUnionCaseRef (denv: DisplayEnv) (infoReader: InfoReader) (ucref: UnionCaseRef) restL = - if denv.showDocumentation then - GetXmlDocSigOfUnionCaseRef ucref - |> layoutXmlDocFromSig denv infoReader ucref.UnionCase.XmlDoc restL - else - restL - - let layoutXmlDocOfEntityRef (denv: DisplayEnv) (infoReader: InfoReader) (eref: EntityRef) restL = - if denv.showDocumentation then - GetXmlDocSigOfEntityRef infoReader Range.range0 eref - |> layoutXmlDocFromSig denv infoReader eref.XmlDoc restL - else - restL - module private PrintIL = let fullySplitILTypeRef (tref: ILTypeRef) = - (List.collect IL.splitNamespace (tref.Enclosing @ [DemangleGenericTypeName tref.Name])) + (List.collect IL.splitNamespace (tref.Enclosing @ [PrettyNaming.DemangleGenericTypeName tref.Name])) let layoutILTypeRefName denv path = let path = @@ -249,14 +159,14 @@ module private PrintIL = let layoutILArrayShape (ILArrayShape sh) = SepL.leftBracket ^^ wordL (tagPunctuation (sh |> List.tail |> List.map (fun _ -> ",") |> String.concat "")) ^^ RightL.rightBracket // drop off one "," so that a n-dimensional array has n - 1 ","'s - let paramsL (ps: Layout list) : Layout = + let paramsL (ps: layout list) : layout = match ps with | [] -> emptyL | _ -> let body = Layout.commaListL ps SepL.leftAngle ^^ body ^^ RightL.rightAngle - let pruneParams (className: string) (ilTyparSubst: Layout list) = + let pruneParams (className: string) (ilTyparSubst: layout list) = let numParams = // can't find a way to see the number of generic parameters for *this* class (the GenericParams also include type variables for enclosing classes); this will have to do let rightMost = className |> SplitNamesForILPath |> List.last @@ -265,7 +175,7 @@ module private PrintIL = | false, _ -> 0 // looks like it's non-generic ilTyparSubst |> List.rev |> List.truncate numParams |> List.rev - let rec layoutILType (denv: DisplayEnv) (ilTyparSubst: Layout list) (ty: ILType) : Layout = + let rec layoutILType (denv: DisplayEnv) (ilTyparSubst: layout list) (ty: ILType) : layout = match ty with | ILType.Void -> WordL.structUnit // These are type-theoretically totally different type-theoretically `void` is Fin 0 and `unit` is Fin (S 0) ... but, this looks like as close as we can get. | ILType.Array (sh, t) -> layoutILType denv ilTyparSubst t ^^ layoutILArrayShape sh @@ -287,7 +197,7 @@ module private PrintIL = let res = match cons with | Some className -> - let names = SplitNamesForILPath (DemangleGenericTypeName className) + let names = SplitNamesForILPath (PrettyNaming.DemangleGenericTypeName className) // special case for constructor return-type (viz., the class itself) layoutILTypeRefName denv names ^^ (pruneParams className ilTyparSubst |> paramsL) | None -> @@ -305,8 +215,8 @@ module private PrintIL = match init with | ILFieldInit.Bool x -> if x - then Some TaggedText.keywordTrue - else Some TaggedText.keywordFalse + then Some Literals.keywordTrue + else Some Literals.keywordFalse | ILFieldInit.Char c -> ("'" + (char c).ToString () + "'") |> (tagStringLiteral >> Some) | ILFieldInit.Int8 x -> ((x |> int32 |> string) + "y") |> (tagNumericLiteral >> Some) | ILFieldInit.Int16 x -> ((x |> int32 |> string) + "s") |> (tagNumericLiteral >> Some) @@ -344,7 +254,7 @@ module private PrintTypes = let layoutConst g ty c = let str = match c with - | Const.Bool x -> if x then TaggedText.keywordTrue else TaggedText.keywordFalse + | Const.Bool x -> if x then Literals.keywordTrue else Literals.keywordFalse | Const.SByte x -> (x |> string)+"y" |> tagNumericLiteral | Const.Byte x -> (x |> string)+"uy" |> tagNumericLiteral | Const.Int16 x -> (x |> string)+"s" |> tagNumericLiteral @@ -390,12 +300,12 @@ module private PrintTypes = | _ -> itemL /// Layout a reference to a type - let layoutTyconRefImpl denv tycon = layoutTyconRefImpl false denv tycon + let layoutTyconRef denv tycon = layoutTyconRefImpl false denv tycon /// Layout the flags of a member - let layoutMemberFlags (memFlags: SynMemberFlags) = + let layoutMemberFlags memFlags = let stat = - if memFlags.IsInstance || (memFlags.MemberKind = SynMemberKind.Constructor) then emptyL + if memFlags.IsInstance || (memFlags.MemberKind = MemberKind.Constructor) then emptyL else WordL.keywordStatic let stat = if memFlags.IsDispatchSlot then stat ++ WordL.keywordAbstract @@ -404,12 +314,12 @@ module private PrintTypes = let stat = if memFlags.IsOverrideOrExplicitImpl then stat else match memFlags.MemberKind with - | SynMemberKind.ClassConstructor - | SynMemberKind.Constructor - | SynMemberKind.PropertyGetSet -> stat - | SynMemberKind.Member - | SynMemberKind.PropertyGet - | SynMemberKind.PropertySet -> stat ++ WordL.keywordMember + | MemberKind.ClassConstructor + | MemberKind.Constructor + | MemberKind.PropertyGetSet -> stat + | MemberKind.Member + | MemberKind.PropertyGet + | MemberKind.PropertySet -> stat ++ WordL.keywordMember // let stat = if memFlags.IsFinal then stat ++ wordL "final" else stat in stat @@ -474,7 +384,7 @@ module private PrintTypes = let _, _, _, rty, _ = GetTypeOfMemberInMemberForm denv.g vref let rty = GetFSharpViewOfReturnType denv.g rty let tcref = tcrefOfAppTy denv.g rty - layoutTyconRefImpl denv tcref ++ argsL + layoutTyconRef denv tcref ++ argsL and layoutILAttribElement denv arg = match arg with @@ -702,7 +612,7 @@ module private PrintTypes = let negvs, posvs = ListMeasureVarOccsWithNonZeroExponents unt |> sortVars |> List.partition (fun (_, e) -> SignRational e < 0) let negcs, poscs = ListMeasureConOccsWithNonZeroExponents denv.g false unt |> sortCons |> List.partition (fun (_, e) -> SignRational e < 0) let unparL uv = layoutTyparRef denv uv - let unconL tc = layoutTyconRefImpl denv tc + let unconL tc = layoutTyconRef denv tc let rationalL e = wordL (tagNumericLiteral (RationalToString e)) let measureToPowerL x e = if e = OneRational then x else x -- wordL (tagPunctuation "^") -- rationalL e let prefix = spaceListL (List.map (fun (v, e) -> measureToPowerL (unparL v) e) posvs @ @@ -754,7 +664,7 @@ module private PrintTypes = | GenericParameterStyle.Implicit -> tc.IsPrefixDisplay | GenericParameterStyle.Prefix -> true | GenericParameterStyle.Suffix -> false - layoutTypeAppWithInfoAndPrec denv env (layoutTyconRefImpl denv tc) prec usePrefix args + layoutTypeAppWithInfoAndPrec denv env (layoutTyconRef denv tc) prec usePrefix args | TType_ucase (UnionCaseRef(tc, _), args) -> let usePrefix = @@ -762,7 +672,7 @@ module private PrintTypes = | GenericParameterStyle.Implicit -> tc.IsPrefixDisplay | GenericParameterStyle.Prefix -> true | GenericParameterStyle.Suffix -> false - layoutTypeAppWithInfoAndPrec denv env (layoutTyconRefImpl denv tc) prec usePrefix args + layoutTypeAppWithInfoAndPrec denv env (layoutTyconRef denv tc) prec usePrefix args // Layout a tuple type | TType_anon (anonInfo, tys) -> @@ -983,9 +893,10 @@ module private PrintTypes = let typesWithDiscrimants,typarsAndCxs = PrettyTypes.PrettifyDiscriminantAndTypePairs denv.g typesWithDiscrimants let retTy = typesWithDiscrimants |> List.find (function (0, _) -> true | _ -> false) |> snd let argInfos = - typesWithDiscrimants + typesWithDiscrimants |> List.choose (function (1,ty) -> Some ty | _ -> None) - |> List.map2 (fun (_, argInfo) tTy -> tTy, argInfo) argInfos + |> List.zip argInfos + |> List.map (fun ((_,argInfo),tTy) -> tTy, argInfo) let genParamTys = typesWithDiscrimants |> List.choose (function (2,ty) -> Some ty | _ -> None) @@ -1016,12 +927,6 @@ module private PrintTypes = module private PrintTastMemberOrVals = open PrintTypes - let mkInlineL denv (v: Val) nameL = - if v.MustInline && not denv.suppressInlineKeyword then - wordL (tagKeyword "inline") ++ nameL - else - nameL - let private prettyLayoutOfMemberShortOption denv typarInst (v:Val) short = let v = mkLocalValRef v let membInfo = Option.get v.MemberInfo @@ -1037,84 +942,80 @@ module private PrintTastMemberOrVals = let mkNameL niceMethodTypars tagFunction name = let nameL = DemangleOperatorNameAsLayout (tagFunction >> mkNav v.DefinitionRange) name - let nameL = + let nameL = if denv.showMemberContainers then - layoutTyconRefImpl denv v.MemberApparentEntity ^^ SepL.dot ^^ nameL - else + layoutTyconRef denv v.MemberApparentEntity ^^ SepL.dot ^^ nameL + else nameL let nameL = if denv.showTyparBinding then layoutTyparDecls denv nameL true niceMethodTypars else nameL let nameL = layoutAccessibility denv v.Accessibility nameL nameL - let prettyTyparInst, memberL = - match membInfo.MemberFlags.MemberKind with - | SynMemberKind.Member -> + match membInfo.MemberFlags.MemberKind with + | MemberKind.Member -> + let prettyTyparInst, niceMethodTypars,tauL = prettyLayoutOfMemberType denv v typarInst argInfos rty + let resL = + if short then tauL + else + let nameL = mkNameL niceMethodTypars tagMember v.LogicalName + stat --- (nameL ^^ WordL.colon ^^ tauL) + prettyTyparInst, resL + + | MemberKind.ClassConstructor + | MemberKind.Constructor -> + let prettyTyparInst, _, tauL = prettyLayoutOfMemberType denv v typarInst argInfos rty + let resL = + if short then tauL + else + let newL = layoutAccessibility denv v.Accessibility WordL.keywordNew + stat ++ newL ^^ wordL (tagPunctuation ":") ^^ tauL + prettyTyparInst, resL + + | MemberKind.PropertyGetSet -> + emptyTyparInst, stat + + | MemberKind.PropertyGet -> + if isNil argInfos then + // use error recovery because intellisense on an incomplete file will show this + errorR(Error(FSComp.SR.tastInvalidFormForPropertyGetter(), v.Id.idRange)) + let nameL = mkNameL [] tagProperty v.CoreDisplayName + let resL = + if short then nameL --- (WordL.keywordWith ^^ WordL.keywordGet) + else stat --- nameL --- (WordL.keywordWith ^^ WordL.keywordGet) + emptyTyparInst, resL + else + let argInfos = + match argInfos with + | [[(ty, _)]] when isUnitTy denv.g ty -> [] + | _ -> argInfos let prettyTyparInst, niceMethodTypars,tauL = prettyLayoutOfMemberType denv v typarInst argInfos rty - let resL = - if short then tauL + let resL = + if short then + if isNil argInfos then tauL + else tauL --- (WordL.keywordWith ^^ WordL.keywordGet) else - let nameL = mkNameL niceMethodTypars tagMember v.LogicalName - let nameL = if short then nameL else mkInlineL denv v.Deref nameL - stat --- (nameL ^^ WordL.colon ^^ tauL) + let nameL = mkNameL niceMethodTypars tagProperty v.CoreDisplayName + stat --- (nameL ^^ WordL.colon ^^ (if isNil argInfos then tauL else tauL --- (WordL.keywordWith ^^ WordL.keywordGet))) prettyTyparInst, resL - | SynMemberKind.ClassConstructor - | SynMemberKind.Constructor -> - let prettyTyparInst, _, tauL = prettyLayoutOfMemberType denv v typarInst argInfos rty + | MemberKind.PropertySet -> + if argInfos.Length <> 1 || isNil argInfos.Head then + // use error recovery because intellisense on an incomplete file will show this + errorR(Error(FSComp.SR.tastInvalidFormForPropertySetter(), v.Id.idRange)) + let nameL = mkNameL [] tagProperty v.CoreDisplayName + let resL = stat --- nameL --- (WordL.keywordWith ^^ WordL.keywordSet) + emptyTyparInst, resL + else + let argInfos, valueInfo = List.frontAndBack argInfos.Head + let prettyTyparInst, niceMethodTypars, tauL = prettyLayoutOfMemberType denv v typarInst (if isNil argInfos then [] else [argInfos]) (fst valueInfo) let resL = - if short then tauL + if short then + (tauL --- (WordL.keywordWith ^^ WordL.keywordSet)) else - let newL = layoutAccessibility denv v.Accessibility WordL.keywordNew - stat ++ newL ^^ wordL (tagPunctuation ":") ^^ tauL + let nameL = mkNameL niceMethodTypars tagProperty v.CoreDisplayName + stat --- (nameL ^^ wordL (tagPunctuation ":") ^^ (tauL --- (WordL.keywordWith ^^ WordL.keywordSet))) prettyTyparInst, resL - - | SynMemberKind.PropertyGetSet -> - emptyTyparInst, stat - - | SynMemberKind.PropertyGet -> - if isNil argInfos then - // use error recovery because intellisense on an incomplete file will show this - errorR(Error(FSComp.SR.tastInvalidFormForPropertyGetter(), v.Id.idRange)) - let nameL = mkNameL [] tagProperty v.CoreDisplayName - let resL = - if short then nameL --- (WordL.keywordWith ^^ WordL.keywordGet) - else stat --- nameL --- (WordL.keywordWith ^^ WordL.keywordGet) - emptyTyparInst, resL - else - let argInfos = - match argInfos with - | [[(ty, _)]] when isUnitTy denv.g ty -> [] - | _ -> argInfos - let prettyTyparInst, niceMethodTypars,tauL = prettyLayoutOfMemberType denv v typarInst argInfos rty - let resL = - if short then - if isNil argInfos then tauL - else tauL --- (WordL.keywordWith ^^ WordL.keywordGet) - else - let nameL = mkNameL niceMethodTypars tagProperty v.CoreDisplayName - stat --- (nameL ^^ WordL.colon ^^ (if isNil argInfos then tauL else tauL --- (WordL.keywordWith ^^ WordL.keywordGet))) - prettyTyparInst, resL - - | SynMemberKind.PropertySet -> - if argInfos.Length <> 1 || isNil argInfos.Head then - // use error recovery because intellisense on an incomplete file will show this - errorR(Error(FSComp.SR.tastInvalidFormForPropertySetter(), v.Id.idRange)) - let nameL = mkNameL [] tagProperty v.CoreDisplayName - let resL = stat --- nameL --- (WordL.keywordWith ^^ WordL.keywordSet) - emptyTyparInst, resL - else - let argInfos, valueInfo = List.frontAndBack argInfos.Head - let prettyTyparInst, niceMethodTypars, tauL = prettyLayoutOfMemberType denv v typarInst (if isNil argInfos then [] else [argInfos]) (fst valueInfo) - let resL = - if short then - (tauL --- (WordL.keywordWith ^^ WordL.keywordSet)) - else - let nameL = mkNameL niceMethodTypars tagProperty v.CoreDisplayName - stat --- (nameL ^^ wordL (tagPunctuation ":") ^^ (tauL --- (WordL.keywordWith ^^ WordL.keywordSet))) - prettyTyparInst, resL - - prettyTyparInst, memberL - + let prettyLayoutOfMember denv typarInst (v:Val) = prettyLayoutOfMemberShortOption denv typarInst v false let prettyLayoutOfMemberNoInstShort denv v = @@ -1171,9 +1072,13 @@ module private PrintTastMemberOrVals = let nameL = if v.IsMutable && not denv.suppressMutableKeyword then wordL (tagKeyword "mutable") ++ nameL - else - nameL - let nameL = mkInlineL denv v nameL + else + nameL + let nameL = + if v.MustInline && not denv.suppressInlineKeyword then + wordL (tagKeyword "inline") ++ nameL + else + nameL let isOverGeneric = List.length (Zset.elements (freeInType CollectTyparsNoCaching tau).FreeTypars) < List.length tps // Bug: 1143 let isTyFunction = v.IsTypeFunction // Bug: 1143, and innerpoly tests @@ -1190,27 +1095,24 @@ module private PrintTastMemberOrVals = | Some literalValue -> valAndTypeL ++ layoutOfLiteralValue literalValue | None -> valAndTypeL - let prettyLayoutOfValOrMember denv infoReader typarInst (vref: ValRef) = - let prettyTyparInst, vL = - match vref.MemberInfo with - | None -> - let tps, tau = vref.TypeScheme + let prettyLayoutOfValOrMember denv typarInst (v: Val) = + let prettyTyparInst, vL = + match v.MemberInfo with + | None -> + let tps, tau = v.TypeScheme // adjust the type in case this is the 'this' pointer stored in a reference cell - let tau = StripSelfRefCell(denv.g, vref.BaseOrThisInfo, tau) + let tau = StripSelfRefCell(denv.g, v.BaseOrThisInfo, tau) let (prettyTyparInst, prettyTypars, prettyTauTy), cxs = PrettyTypes.PrettifyInstAndTyparsAndType denv.g (typarInst, tps, tau) - let resL = layoutNonMemberVal denv (prettyTypars, vref.Deref, prettyTauTy, cxs) + let resL = layoutNonMemberVal denv (prettyTypars, v, prettyTauTy, cxs) prettyTyparInst, resL | Some _ -> - prettyLayoutOfMember denv typarInst vref.Deref - - prettyTyparInst, - layoutAttribs denv true vref.Type TyparKind.Type vref.Attribs vL - |> layoutXmlDocOfValRef denv infoReader vref + prettyLayoutOfMember denv typarInst v + prettyTyparInst, layoutAttribs denv true v.Type TyparKind.Type v.Attribs vL - let prettyLayoutOfValOrMemberNoInst denv infoReader v = - prettyLayoutOfValOrMember denv infoReader emptyTyparInst v |> snd + let prettyLayoutOfValOrMemberNoInst denv v = + prettyLayoutOfValOrMember denv emptyTyparInst v |> snd let layoutTyparConstraint denv x = x |> PrintTypes.layoutTyparConstraint denv @@ -1220,9 +1122,9 @@ let layoutType denv x = x |> PrintTypes.layoutType denv let outputTypars denv nm os x = x |> PrintTypes.layoutTyparDecls denv (wordL nm) true |> bufferL os -let outputTyconRef denv os x = x |> PrintTypes.layoutTyconRefImpl denv |> bufferL os +let outputTyconRef denv os x = x |> PrintTypes.layoutTyconRef denv |> bufferL os -let layoutTyconRef denv x = x |> PrintTypes.layoutTyconRefImpl denv +let layoutTyconRef denv x = x |> PrintTypes.layoutTyconRef denv let layoutConst g ty c = PrintTypes.layoutConst g ty c @@ -1247,13 +1149,8 @@ module InfoMemberPrinting = | _, Some nm, true, ptyOpt -> // detect parameter type, if ptyOpt is None - this is .NET style optional argument let pty = match ptyOpt with ValueSome x -> x | _ -> pty - let idText = - if denv.escapeKeywordNames && Lexhelp.Keywords.keywordNames |> List.contains nm.idText then - "``" + nm.idText + "``" - else - nm.idText SepL.questionMark ^^ - wordL (tagParameter idText) ^^ + wordL (tagParameter nm.idText) ^^ RightL.colon ^^ PrintTypes.layoutType denv pty // Layout an unnamed argument @@ -1261,22 +1158,12 @@ module InfoMemberPrinting = PrintTypes.layoutType denv pty // Layout a named argument | true, Some nm, _, _ -> - let idText = - if denv.escapeKeywordNames && Lexhelp.Keywords.keywordNames |> List.contains nm.idText then - "``" + nm.idText + "``" - else - nm.idText layoutBuiltinAttribute denv denv.g.attrib_ParamArrayAttribute ^^ - wordL (tagParameter idText) ^^ + wordL (tagParameter nm.idText) ^^ RightL.colon ^^ PrintTypes.layoutType denv pty | false, Some nm, _, _ -> - let idText = - if denv.escapeKeywordNames && Lexhelp.Keywords.keywordNames |> List.contains nm.idText then - "``" + nm.idText + "``" - else - nm.idText - wordL (tagParameter idText) ^^ + wordL (tagParameter nm.idText) ^^ RightL.colon ^^ PrintTypes.layoutType denv pty @@ -1287,12 +1174,10 @@ module InfoMemberPrinting = // That is, this style: // new: argName1: argType1 * ... * argNameN: argTypeN -> retType // Method: argName1: argType1 * ... * argNameN: argTypeN -> retType - let private layoutMethInfoFSharpStyleCore (infoReader: InfoReader) m denv (minfo: MethInfo) minst = - let amap = infoReader.amap - + let private layoutMethInfoFSharpStyleCore amap m denv (minfo: MethInfo) minst = match minfo.ArbitraryValRef with | Some vref -> - PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv infoReader vref + PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv vref.Deref | None -> let layout = if not minfo.IsConstructor && not minfo.IsInstance then WordL.keywordStatic @@ -1308,7 +1193,6 @@ module InfoMemberPrinting = PrintTypes.layoutTyparDecls denv (minfo.LogicalName |> tagMethod |> wordL) true minfo.FormalMethodTypars ) ^^ WordL.colon - let layout = layoutXmlDocOfMethInfo denv infoReader minfo layout let paramDatas = minfo.GetParamDatas(amap, m, minst) let layout = layout ^^ @@ -1336,7 +1220,7 @@ module InfoMemberPrinting = layout ^^ if isAppTy minfo.TcGlobals minfo.ApparentEnclosingAppType then let tcref = minfo.ApparentEnclosingTyconRef - PrintTypes.layoutTyconRefImpl denv tcref + PrintTypes.layoutTyconRef denv tcref else emptyL let layout = @@ -1387,15 +1271,13 @@ module InfoMemberPrinting = // // For C# extension members: // ApparentContainer.Method(argName1: argType1, ..., argNameN: argTypeN) : retType - let prettyLayoutOfMethInfoFreeStyle (infoReader: InfoReader) m denv typarInst methInfo = - let amap = infoReader.amap - + let prettyLayoutOfMethInfoFreeStyle (amap: Import.ImportMap) m denv typarInst methInfo = match methInfo with | DefaultStructCtor _ -> let prettyTyparInst, _ = PrettyTypes.PrettifyInst amap.g typarInst - prettyTyparInst, PrintTypes.layoutTyconRefImpl denv methInfo.ApparentEnclosingTyconRef ^^ wordL (tagPunctuation "()") + prettyTyparInst, PrintTypes.layoutTyconRef denv methInfo.ApparentEnclosingTyconRef ^^ wordL (tagPunctuation "()") | FSMeth(_, _, vref, _) -> - let prettyTyparInst, resL = PrintTastMemberOrVals.prettyLayoutOfValOrMember { denv with showMemberContainers=true } infoReader typarInst vref + let prettyTyparInst, resL = PrintTastMemberOrVals.prettyLayoutOfValOrMember { denv with showMemberContainers=true } typarInst vref.Deref prettyTyparInst, resL | ILMeth(_, ilminfo, _) -> let prettyTyparInst, prettyMethInfo, minst = prettifyILMethInfo amap m methInfo typarInst ilminfo @@ -1449,39 +1331,33 @@ module InfoMemberPrinting = module private TastDefinitionPrinting = open PrintTypes - let layoutExtensionMember denv infoReader (vref: ValRef) = - let tycon = vref.MemberApparentEntity.Deref - let nameL = tagMethod tycon.DisplayName |> mkNav vref.DefinitionRange |> wordL + let layoutExtensionMember denv (v: Val) = + let tycon = v.MemberApparentEntity.Deref + let nameL = tagMethod tycon.DisplayName |> mkNav v.DefinitionRange |> wordL let nameL = layoutAccessibility denv tycon.Accessibility nameL // "type-accessibility" let tps = - match PartitionValTyparsForApparentEnclosingType denv.g vref.Deref with + match PartitionValTyparsForApparentEnclosingType denv.g v with | Some(_, memberParentTypars, _, _, _) -> memberParentTypars | None -> [] let lhsL = WordL.keywordType ^^ layoutTyparDecls denv nameL tycon.IsPrefixDisplay tps - let memberL = PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv infoReader vref + let memberL = PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv v (lhsL ^^ WordL.keywordWith) @@-- memberL - let layoutExtensionMembers denv infoReader vs = - aboveListL (List.map (layoutExtensionMember denv infoReader) vs) + let layoutExtensionMembers denv vs = + aboveListL (List.map (layoutExtensionMember denv) vs) - let layoutRecdField addAccess denv infoReader (enclosingTcref: TyconRef) (fld: RecdField) = + let layoutRecdField addAccess denv (fld: RecdField) = let lhs = tagRecordField fld.Name |> mkNav fld.DefinitionRange |> wordL let lhs = (if addAccess then layoutAccessibility denv fld.Accessibility lhs else lhs) let lhs = if fld.IsMutable then wordL (tagKeyword "mutable") --- lhs else lhs - let fieldL = (lhs ^^ RightL.colon) --- layoutType denv fld.FormalType + (lhs ^^ RightL.colon) --- layoutType denv fld.FormalType - // The enclosing TyconRef might be a union and we can only get fields from union cases, so we need ignore unions here. - if not enclosingTcref.IsUnionTycon then - layoutXmlDocOfRecdFieldRef denv infoReader (RecdFieldRef(enclosingTcref, fld.Id.idText)) fieldL - else - fieldL - - let layoutUnionOrExceptionField denv infoReader isGenerated enclosingTcref i (fld: RecdField) = + let layoutUnionOrExceptionField denv isGenerated i (fld: RecdField) = if isGenerated i fld then layoutTypeWithInfoAndPrec denv SimplifyTypes.typeSimplificationInfo0 2 fld.FormalType - else layoutRecdField false denv infoReader enclosingTcref fld + else layoutRecdField false denv fld let isGeneratedUnionCaseField pos (f: RecdField) = if pos < 0 then f.Name = "Item" @@ -1490,25 +1366,23 @@ module private TastDefinitionPrinting = let isGeneratedExceptionField pos (f: RecdField) = f.Name = "Data" + (string pos) - let layoutUnionCaseFields denv infoReader isUnionCase enclosingTcref fields = + let layoutUnionCaseFields denv isUnionCase fields = match fields with - | [f] when isUnionCase -> layoutUnionOrExceptionField denv infoReader isGeneratedUnionCaseField enclosingTcref -1 f + | [f] when isUnionCase -> layoutUnionOrExceptionField denv isGeneratedUnionCaseField -1 f | _ -> let isGenerated = if isUnionCase then isGeneratedUnionCaseField else isGeneratedExceptionField - sepListL (wordL (tagPunctuation "*")) (List.mapi (layoutUnionOrExceptionField denv infoReader isGenerated enclosingTcref) fields) + sepListL (wordL (tagPunctuation "*")) (List.mapi (layoutUnionOrExceptionField denv isGenerated) fields) - let layoutUnionCase denv infoReader prefixL enclosingTcref (ucase: UnionCase) = + let layoutUnionCase denv prefixL (ucase: UnionCase) = let nmL = DemangleOperatorNameAsLayout (tagUnionCase >> mkNav ucase.DefinitionRange) ucase.Id.idText //let nmL = layoutAccessibility denv ucase.Accessibility nmL - let caseL = - match ucase.RecdFields with - | [] -> (prefixL ^^ nmL) - | fields -> (prefixL ^^ nmL ^^ WordL.keywordOf) --- layoutUnionCaseFields denv infoReader true enclosingTcref fields - layoutXmlDocOfUnionCaseRef denv infoReader (UnionCaseRef(enclosingTcref, ucase.Id.idText)) caseL + match ucase.RecdFields with + | [] -> (prefixL ^^ nmL) + | fields -> (prefixL ^^ nmL ^^ WordL.keywordOf) --- layoutUnionCaseFields denv true fields - let layoutUnionCases denv infoReader enclosingTcref ucases = + let layoutUnionCases denv ucases = let prefixL = WordL.bar // See bug://2964 - always prefix in case preceded by accessibility modifier - List.map (layoutUnionCase denv infoReader prefixL enclosingTcref) ucases + List.map (layoutUnionCase denv prefixL) ucases /// When to force a break? "type tyname = repn" /// When repn is class or datatype constructors (not single one). @@ -1532,9 +1406,7 @@ module private TastDefinitionPrinting = let typL = layoutType denv (e.FieldType(amap, m)) staticL ^^ WordL.keywordVal ^^ nameL ^^ WordL.colon ^^ typL - let private layoutEventInfo denv (infoReader: InfoReader) m (e: EventInfo) = - let amap = infoReader.amap - + let private layoutEventInfo denv amap m (e: EventInfo) = let staticL = if e.IsStatic then WordL.keywordStatic else emptyL let eventTag = @@ -1551,17 +1423,13 @@ module private TastDefinitionPrinting = let nameL = eventTag |> wordL let typL = layoutType denv (e.GetDelegateType(amap, m)) - let overallL = staticL ^^ WordL.keywordMember ^^ nameL ^^ WordL.colon ^^ typL - layoutXmlDocOfEventInfo denv infoReader e overallL - - let private layoutPropInfo denv (infoReader: InfoReader) m (p: PropInfo) = - let amap = infoReader.amap - + staticL ^^ WordL.keywordEvent ^^ nameL ^^ WordL.colon ^^ typL + + let private layoutPropInfo denv amap m (p: PropInfo) = match p.ArbitraryValRef with - | Some vref -> - PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv infoReader vref + | Some v -> + PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv v.Deref | None -> - let modifierAndMember = if p.IsStatic then WordL.keywordStatic ^^ WordL.keywordMember @@ -1576,13 +1444,12 @@ module private TastDefinitionPrinting = let nameL = propTag |> wordL let typL = layoutType denv (p.GetPropertyType(amap, m)) // shouldn't happen - let overallL = modifierAndMember ^^ nameL ^^ WordL.colon ^^ typL - layoutXmlDocOfPropInfo denv infoReader p overallL - let layoutTyconRef (denv: DisplayEnv) (infoReader: InfoReader) ad m simplified typewordL (tcref: TyconRef) = + modifierAndMember ^^ nameL ^^ WordL.colon ^^ typL + + let layoutTycon (denv: DisplayEnv) (infoReader: InfoReader) ad m simplified typewordL (tycon: Tycon) = let g = denv.g - let tycon = tcref.Deref - let _, ty = generalizeTyconRef tcref + let _, ty = generalizeTyconRef (mkLocalTyconRef tycon) let start, name = let n = tycon.DisplayName if isStructTy g ty then @@ -1673,21 +1540,21 @@ module private TastDefinitionPrinting = let ctorLs = if denv.shrinkOverloads then ctors - |> shrinkOverloads (InfoMemberPrinting.layoutMethInfoFSharpStyle infoReader m denv) (fun _ xL -> xL) + |> shrinkOverloads (InfoMemberPrinting.layoutMethInfoFSharpStyle amap m denv) (fun _ xL -> xL) else ctors - |> List.map (fun ctor -> InfoMemberPrinting.layoutMethInfoFSharpStyle infoReader m denv ctor) + |> List.map (fun ctor -> InfoMemberPrinting.layoutMethInfoFSharpStyle amap m denv ctor) let methLs = meths |> List.groupBy (fun md -> md.DisplayName) |> List.collect (fun (_, group) -> if denv.shrinkOverloads then - shrinkOverloads (InfoMemberPrinting.layoutMethInfoFSharpStyle infoReader m denv) (fun x xL -> (sortKey x, xL)) group + shrinkOverloads (InfoMemberPrinting.layoutMethInfoFSharpStyle amap m denv) (fun x xL -> (sortKey x, xL)) group else group |> List.sortBy sortKey - |> List.map (fun methinfo -> ((not methinfo.IsConstructor, methinfo.IsInstance, methinfo.DisplayName, List.sum methinfo.NumArgs, methinfo.NumArgs.Length), InfoMemberPrinting.layoutMethInfoFSharpStyle infoReader m denv methinfo))) + |> List.map (fun methinfo -> ((not methinfo.IsConstructor, methinfo.IsInstance, methinfo.DisplayName, List.sum methinfo.NumArgs, methinfo.NumArgs.Length), InfoMemberPrinting.layoutMethInfoFSharpStyle amap m denv methinfo))) |> List.sortBy fst |> List.map snd @@ -1704,7 +1571,7 @@ module private TastDefinitionPrinting = else tycon.TrueFieldsAsList |> List.filter (fun f -> f.IsStatic && not (isDiscard f.Name)) - |> List.map (fun f -> WordL.keywordStatic ^^ WordL.keywordVal ^^ layoutRecdField true denv infoReader tcref f) + |> List.map (fun f -> WordL.keywordStatic ^^ WordL.keywordVal ^^ layoutRecdField true denv f) let instanceValsLs = if isRecdTy g ty then @@ -1712,17 +1579,17 @@ module private TastDefinitionPrinting = else tycon.TrueInstanceFieldsAsList |> List.filter (fun f -> not (isDiscard f.Name)) - |> List.map (fun f -> WordL.keywordVal ^^ layoutRecdField true denv infoReader tcref f) + |> List.map (fun f -> WordL.keywordVal ^^ layoutRecdField true denv f) let propLs = props - |> List.map (fun x -> (true, x.IsStatic, x.PropertyName, 0, 0), layoutPropInfo denv infoReader m x) + |> List.map (fun x -> (true, x.IsStatic, x.PropertyName, 0, 0), layoutPropInfo denv amap m x) |> List.sortBy fst |> List.map snd let eventLs = events - |> List.map (fun x -> (true, x.IsStatic, x.EventName, 0, 0), layoutEventInfo denv infoReader m x) + |> List.map (fun x -> (true, x.IsStatic, x.EventName, 0, 0), layoutEventInfo denv amap m x) |> List.sortBy fst |> List.map snd @@ -1800,7 +1667,7 @@ module private TastDefinitionPrinting = let denv = denv.AddAccessibility tycon.TypeReprAccessibility match repr with | TRecdRepr _ -> - let recdFieldRefL fld = layoutRecdField false denv infoReader tcref fld + let recdFieldRefL fld = layoutRecdField false denv fld let recdL = tycon.TrueFieldsAsList @@ -1814,7 +1681,7 @@ module private TastDefinitionPrinting = | TUnionRepr _ -> let layoutUnionCases = tycon.UnionCasesAsList - |> layoutUnionCases denv infoReader tcref + |> layoutUnionCases denv |> applyMaxMembers denv.maxMembers |> aboveListL Some (addMembersAsWithEnd (addReprAccessL layoutUnionCases)) @@ -1884,146 +1751,37 @@ module private TastDefinitionPrinting = | Some a -> (lhsL ^^ WordL.equals) --- (layoutType { denv with shortTypeNames = false } a) - let attribsL = layoutAttribs denv false ty tycon.TypeOrMeasureKind tycon.Attribs reprL - layoutXmlDocOfEntityRef denv infoReader tcref attribsL + layoutAttribs denv false ty tycon.TypeOrMeasureKind tycon.Attribs reprL // Layout: exception definition - let layoutExnDefn denv infoReader (exncref: EntityRef) = - let exnc = exncref.Deref + let layoutExnDefn denv (exnc: Entity) = let nm = exnc.LogicalName let nmL = wordL (tagClass nm) let nmL = layoutAccessibility denv exnc.TypeReprAccessibility nmL let exnL = wordL (tagKeyword "exception") ^^ nmL // need to tack on the Exception at the right of the name for goto definition let reprL = match exnc.ExceptionInfo with - | TExnAbbrevRepr ecref -> WordL.equals --- layoutTyconRefImpl denv ecref + | TExnAbbrevRepr ecref -> WordL.equals --- layoutTyconRef denv ecref | TExnAsmRepr _ -> WordL.equals --- wordL (tagText "(# ... #)") | TExnNone -> emptyL | TExnFresh r -> match r.TrueFieldsAsList with | [] -> emptyL - | r -> WordL.keywordOf --- layoutUnionCaseFields denv infoReader false exncref r + | r -> WordL.keywordOf --- layoutUnionCaseFields denv false r - let overallL = exnL ^^ reprL - layoutXmlDocOfEntityRef denv infoReader exncref overallL + exnL ^^ reprL // Layout: module spec let layoutTyconDefns denv infoReader ad m (tycons: Tycon list) = match tycons with | [] -> emptyL - | [h] when h.IsExceptionDecl -> layoutExnDefn denv infoReader (mkLocalEntityRef h) + | [h] when h.IsExceptionDecl -> layoutExnDefn denv h | h :: t -> - let x = layoutTyconRef denv infoReader ad m false WordL.keywordType (mkLocalEntityRef h) - let xs = List.map (mkLocalEntityRef >> layoutTyconRef denv infoReader ad m false (wordL (tagKeyword "and"))) t + let x = layoutTycon denv infoReader ad m false WordL.keywordType h + let xs = List.map (layoutTycon denv infoReader ad m false (wordL (tagKeyword "and"))) t aboveListL (x :: xs) - let rec layoutModuleOrNamespace (denv: DisplayEnv) (infoReader: InfoReader) ad m isFirstTopLevel (mspec: ModuleOrNamespace) = - let rec fullPath (mspec: ModuleOrNamespace) acc = - if mspec.IsNamespace then - match mspec.ModuleOrNamespaceType.ModuleAndNamespaceDefinitions |> List.tryHead with - | Some next when next.IsNamespace -> - fullPath next (acc @ [next.DemangledModuleOrNamespaceName]) - | _ -> - acc, mspec - else - acc, mspec - - let outerPath = mspec.CompilationPath.AccessPath - - let path, mspec = fullPath mspec [mspec.DemangledModuleOrNamespaceName] - - let denv = - let outerPath = outerPath |> List.map fst - denv.AddOpenPath (outerPath @ path) - - let headerL = - if mspec.IsNamespace then - // This is a container namespace. We print the header when we get to the first concrete module. - wordL (tagKeyword "namespace") ^^ sepListL SepL.dot (List.map (tagNamespace >> wordL) path) - else - // This is a module - let nmL = - match path with - | [nm] -> wordL (tagModule nm) - | _ -> - let nm = path |> List.last - let innerPath = path.[..path.Length - 2] - sepListL SepL.dot (List.map (tagNamespace >> wordL) innerPath) ^^ SepL.dot ^^ wordL (tagModule nm) - // Check if its an outer module or a nested module - if (outerPath |> List.forall (fun (_, istype) -> istype = Namespace)) then - // Check if this is an outer module with no namespace - if isNil outerPath then - // If so print a "module" declaration - (wordL (tagKeyword "module") ^^ nmL) - else - if mspec.ModuleOrNamespaceType.AllEntities |> Seq.isEmpty && mspec.ModuleOrNamespaceType.AllValsAndMembers |> Seq.isEmpty then - (wordL (tagKeyword "module") ^^ nmL ^^ WordL.equals ^^ wordL (tagKeyword "begin") ^^ wordL (tagKeyword "end")) - else - // Otherwise this is an outer module contained immediately in a namespace - // We already printed the namespace declaration earlier. So just print the - // module now. - (wordL (tagKeyword "module") ^^ nmL ^^ WordL.equals) - else - if mspec.ModuleOrNamespaceType.AllEntities |> Seq.isEmpty && mspec.ModuleOrNamespaceType.AllValsAndMembers |> Seq.isEmpty then - (wordL (tagKeyword "module") ^^ nmL ^^ WordL.equals ^^ wordL (tagKeyword "begin") ^^ wordL (tagKeyword "end")) - else - // OK, this is a nested module - (wordL (tagKeyword "module") ^^ nmL ^^ WordL.equals) - - let headerL = - PrintTypes.layoutAttribs denv false (generalizedTyconRef(mkLocalEntityRef mspec)) mspec.TypeOrMeasureKind mspec.Attribs headerL - - let shouldShow (v: Val) = - (denv.showObsoleteMembers || not (CheckFSharpAttributesForObsolete denv.g v.Attribs)) && - (denv.showHiddenMembers || not (CheckFSharpAttributesForHidden denv.g v.Attribs)) - - let entityLs = - if mspec.IsNamespace then [] - else - mspec.ModuleOrNamespaceType.AllEntities - |> QueueList.toList - |> List.map (fun entity -> layoutEntityRef denv infoReader ad m (mkLocalEntityRef entity)) - - let valLs = - if mspec.IsNamespace then [] - else - mspec.ModuleOrNamespaceType.AllValsAndMembers - |> QueueList.toList - |> List.filter shouldShow - |> List.sortBy (fun v -> v.DisplayName) - |> List.map (mkLocalValRef >> PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv infoReader) - - if List.isEmpty entityLs && List.isEmpty valLs then - headerL - else - let entitiesL = - entityLs - |> aboveListL - - let valsL = - valLs - |> aboveListL - - if isFirstTopLevel then - aboveListL - [ - headerL - entitiesL - valsL - ] - else - headerL @@---- entitiesL @@ valsL - - and layoutEntityRef (denv: DisplayEnv) (infoReader: InfoReader) ad m (eref: EntityRef) = - if eref.IsModuleOrNamespace then - layoutModuleOrNamespace denv infoReader ad m false eref.Deref - |> layoutXmlDocOfEntityRef denv infoReader eref - elif eref.IsExceptionDecl then - layoutExnDefn denv infoReader eref - else - layoutTyconRef denv infoReader ad m true WordL.keywordType eref - //-------------------------------------------------------------------------- module private InferredSigPrinting = @@ -2058,15 +1816,13 @@ module private InferredSigPrinting = |> List.choose (function ModuleOrNamespaceBinding.Binding bind -> Some bind | _ -> None) |> valsOfBinds |> List.filter filterExtMem - |> List.map mkLocalValRef - |> TastDefinitionPrinting.layoutExtensionMembers denv infoReader) @@ + |> TastDefinitionPrinting.layoutExtensionMembers denv) @@ (mbinds |> List.choose (function ModuleOrNamespaceBinding.Binding bind -> Some bind | _ -> None) |> valsOfBinds |> List.filter filterVal - |> List.map mkLocalValRef - |> List.map (PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv infoReader) + |> List.map (PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv) |> aboveListL) @@ (mbinds @@ -2077,8 +1833,7 @@ module private InferredSigPrinting = | TMDefLet(bind, _) -> ([bind.Var] |> List.filter filterVal - |> List.map mkLocalValRef - |> List.map (PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv infoReader) + |> List.map (PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv) |> aboveListL) | TMDefs defs -> imdefsL denv defs @@ -2095,47 +1850,40 @@ module private InferredSigPrinting = let denv = denv.AddOpenPath (List.map fst innerPath) if mspec.IsNamespace then let basic = imdefL denv def - let basicL = - // Check if this namespace contains anything interesting - if isConcreteNamespace def then - // This is a container namespace. We print the header when we get to the first concrete module. - let headerL = - wordL (tagKeyword "namespace") ^^ sepListL SepL.dot (List.map (fst >> tagNamespace >> wordL) innerPath) - headerL @@-- basic - else - // This is a namespace that only contains namespaces. Skip the header - basic - // NOTE: explicitly not calling `layoutXmlDoc` here, because even though - // `ModuleOrNamespace` has a field for XmlDoc, it is never present at the parser - // level. This should be changed if the parser/spec changes. - basicL + // Check if this namespace contains anything interesting + if isConcreteNamespace def then + // This is a container namespace. We print the header when we get to the first concrete module. + let headerL = + wordL (tagKeyword "namespace") ^^ sepListL SepL.dot (List.map (fst >> tagNamespace >> wordL) innerPath) + headerL @@-- basic + else + // This is a namespace that only contains namespaces. Skip the header + basic else // This is a module let nmL = layoutAccessibility denv mspec.Accessibility (wordL (tagModule nm)) - let denv = denv.AddAccessibility mspec.Accessibility + let denv = denv.AddAccessibility mspec.Accessibility let basic = imdefL denv def - let basicL = - // Check if its an outer module or a nested module - if (outerPath |> List.forall (fun (_, istype) -> istype = Namespace) ) then - // OK, this is an outer module - if showHeader then - // OK, we're not in F# Interactive - // Check if this is an outer module with no namespace - if isNil outerPath then - // If so print a "module" declaration - (wordL (tagKeyword "module") ^^ nmL) @@ basic - else - // Otherwise this is an outer module contained immediately in a namespace - // We already printed the namespace declaration earlier. So just print the - // module now. - ((wordL (tagKeyword"module") ^^ nmL ^^ WordL.equals ^^ wordL (tagKeyword "begin")) @@-- basic) @@ WordL.keywordEnd - else - // OK, we're in F# Interactive, presumably the implicit module for each interaction. - basic + // Check if its an outer module or a nested module + if (outerPath |> List.forall (fun (_, istype) -> istype = Namespace) ) then + // OK, this is an outer module + if showHeader then + // OK, we're not in F# Interactive + // Check if this is an outer module with no namespace + if isNil outerPath then + // If so print a "module" declaration + (wordL (tagKeyword "module") ^^ nmL) @@ basic + else + // Otherwise this is an outer module contained immediately in a namespace + // We already printed the namespace declaration earlier. So just print the + // module now. + ((wordL (tagKeyword"module") ^^ nmL ^^ WordL.equals ^^ wordL (tagKeyword "begin")) @@-- basic) @@ WordL.keywordEnd else - // OK, this is a nested module - ((wordL (tagKeyword "module") ^^ nmL ^^ WordL.equals ^^ wordL (tagKeyword"begin")) @@-- basic) @@ WordL.keywordEnd - layoutXmlDoc denv mspec.XmlDoc basicL + // OK, we're in F# Interactive, presumably the implicit module for each interaction. + basic + else + // OK, this is a nested module + ((wordL (tagKeyword "module") ^^ nmL ^^ WordL.equals ^^ wordL (tagKeyword"begin")) @@-- basic) @@ WordL.keywordEnd imexprL denv expr //-------------------------------------------------------------------------- @@ -2178,7 +1926,7 @@ module private PrintData = leftL (tagPunctuation "{") ^^ semiListL (List.map2 lay fields xs) ^^ rightL (tagPunctuation "}") | Expr.Op (TOp.ValFieldGet (RecdFieldRef.RecdFieldRef (tcref, name)), _, _, _) -> - (layoutTyconRefImpl denv tcref) ^^ sepL (tagPunctuation ".") ^^ wordL (tagField name) + (layoutTyconRef denv tcref) ^^ sepL (tagPunctuation ".") ^^ wordL (tagField name) | Expr.Op (TOp.Array, [_], xs, _) -> leftL (tagPunctuation "[|") ^^ semiListL (dataExprsL denv xs) ^^ RightL.rightBracketBar @@ -2192,44 +1940,42 @@ let dataExprL denv expr = PrintData.dataExprL denv expr // Print Signatures/Types - output functions //-------------------------------------------------------------------------- -let outputValOrMember denv infoReader os x = x |> PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv infoReader |> bufferL os +let outputValOrMember denv os x = x |> PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv |> bufferL os -let stringValOrMember denv infoReader x = x |> PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv infoReader |> showL +let stringValOrMember denv x = x |> PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv |> showL /// Print members with a qualification showing the type they are contained in -let layoutQualifiedValOrMember denv infoReader typarInst v = PrintTastMemberOrVals.prettyLayoutOfValOrMember { denv with showMemberContainers=true; } infoReader typarInst v +let layoutQualifiedValOrMember denv typarInst v = PrintTastMemberOrVals.prettyLayoutOfValOrMember { denv with showMemberContainers=true; } typarInst v -let outputQualifiedValOrMember denv infoReader os v = outputValOrMember { denv with showMemberContainers=true; } infoReader os v +let outputQualifiedValOrMember denv os v = outputValOrMember { denv with showMemberContainers=true; } os v -let outputQualifiedValSpec denv infoReader os v = outputQualifiedValOrMember denv infoReader os v +let outputQualifiedValSpec denv os v = outputQualifiedValOrMember denv os v -let stringOfQualifiedValOrMember denv infoReader v = PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst { denv with showMemberContainers=true; } infoReader v |> showL +let stringOfQualifiedValOrMember denv v = PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst { denv with showMemberContainers=true; } v |> showL /// Convert a MethInfo to a string -let formatMethInfoToBufferFreeStyle infoReader m denv buf d = InfoMemberPrinting.formatMethInfoToBufferFreeStyle infoReader m denv buf d +let formatMethInfoToBufferFreeStyle amap m denv buf d = InfoMemberPrinting.formatMethInfoToBufferFreeStyle amap m denv buf d -let prettyLayoutOfMethInfoFreeStyle infoReader m denv typarInst minfo = InfoMemberPrinting.prettyLayoutOfMethInfoFreeStyle infoReader m denv typarInst minfo +let prettyLayoutOfMethInfoFreeStyle amap m denv typarInst minfo = InfoMemberPrinting.prettyLayoutOfMethInfoFreeStyle amap m denv typarInst minfo /// Convert a PropInfo to a string let prettyLayoutOfPropInfoFreeStyle g amap m denv d = InfoMemberPrinting.prettyLayoutOfPropInfoFreeStyle g amap m denv d /// Convert a MethInfo to a string -let stringOfMethInfo infoReader m denv d = bufs (fun buf -> InfoMemberPrinting.formatMethInfoToBufferFreeStyle infoReader m denv buf d) +let stringOfMethInfo amap m denv d = bufs (fun buf -> InfoMemberPrinting.formatMethInfoToBufferFreeStyle amap m denv buf d) /// Convert a ParamData to a string let stringOfParamData denv paramData = bufs (fun buf -> InfoMemberPrinting.formatParamDataToBuffer denv buf paramData) let layoutOfParamData denv paramData = InfoMemberPrinting.layoutParamData denv paramData -let layoutExnDef denv infoReader x = x |> TastDefinitionPrinting.layoutExnDefn denv infoReader +let layoutExnDef denv x = x |> TastDefinitionPrinting.layoutExnDefn denv let stringOfTyparConstraints denv x = x |> PrintTypes.layoutConstraintsWithInfo denv SimplifyTypes.typeSimplificationInfo0 |> showL -let layoutTycon denv infoReader ad m (* width *) x = TastDefinitionPrinting.layoutTyconRef denv infoReader ad m true WordL.keywordType (mkLocalEntityRef x) (* |> Display.squashTo width *) - -let layoutEntityRef denv infoReader ad m x = TastDefinitionPrinting.layoutEntityRef denv infoReader ad m x +let layoutTycon denv infoReader ad m (* width *) x = TastDefinitionPrinting.layoutTycon denv infoReader ad m true WordL.keywordType x (* |> Display.squashTo width *) -let layoutUnionCases denv infoReader enclosingTcref x = x |> TastDefinitionPrinting.layoutUnionCaseFields denv infoReader true enclosingTcref +let layoutUnionCases denv x = x |> TastDefinitionPrinting.layoutUnionCaseFields denv true /// Pass negative number as pos in case of single cased discriminated unions let isGeneratedUnionCaseField pos f = TastDefinitionPrinting.isGeneratedUnionCaseField pos f @@ -2248,11 +1994,11 @@ let prettyStringOfTy denv x = x |> PrintTypes.prettyLayoutOfType denv |> showL let prettyStringOfTyNoCx denv x = x |> PrintTypes.prettyLayoutOfTypeNoConstraints denv |> showL -let stringOfRecdField denv infoReader enclosingTcref x = x |> TastDefinitionPrinting.layoutRecdField false denv infoReader enclosingTcref |> showL +let stringOfRecdField denv x = x |> TastDefinitionPrinting.layoutRecdField false denv |> showL -let stringOfUnionCase denv infoReader enclosingTcref x = x |> TastDefinitionPrinting.layoutUnionCase denv infoReader WordL.bar enclosingTcref |> showL +let stringOfUnionCase denv x = x |> TastDefinitionPrinting.layoutUnionCase denv WordL.bar |> showL -let stringOfExnDef denv infoReader x = x |> TastDefinitionPrinting.layoutExnDefn denv infoReader |> showL +let stringOfExnDef denv x = x |> TastDefinitionPrinting.layoutExnDefn denv |> showL let stringOfFSAttrib denv x = x |> PrintTypes.layoutAttrib denv |> squareAngleL |> showL @@ -2260,9 +2006,9 @@ let stringOfILAttrib denv x = x |> PrintTypes.layoutILAttrib denv |> squareAngle let layoutInferredSigOfModuleExpr showHeader denv infoReader ad m expr = InferredSigPrinting.layoutInferredSigOfModuleExpr showHeader denv infoReader ad m expr -let prettyLayoutOfValOrMember denv infoReader typarInst v = PrintTastMemberOrVals.prettyLayoutOfValOrMember denv infoReader typarInst v +let prettyLayoutOfValOrMember denv typarInst v = PrintTastMemberOrVals.prettyLayoutOfValOrMember denv typarInst v -let prettyLayoutOfValOrMemberNoInst denv infoReader v = PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv infoReader v +let prettyLayoutOfValOrMemberNoInst denv v = PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv v let prettyLayoutOfMemberNoInstShort denv v = PrintTastMemberOrVals.prettyLayoutOfMemberNoInstShort denv v @@ -2321,16 +2067,16 @@ let minimalStringsOfTwoTypes denv t1 t2= (makeName t1, makeName t2, stringOfTyparConstraints denv tpcs) // Note: Always show imperative annotations when comparing value signatures -let minimalStringsOfTwoValues denv infoReader v1 v2= +let minimalStringsOfTwoValues denv v1 v2= let denvMin = { denv with showImperativeTyparAnnotations=true; showConstraintTyparAnnotations=false } - let min1 = bufs (fun buf -> outputQualifiedValOrMember denvMin infoReader buf v1) - let min2 = bufs (fun buf -> outputQualifiedValOrMember denvMin infoReader buf v2) + let min1 = bufs (fun buf -> outputQualifiedValOrMember denvMin buf v1) + let min2 = bufs (fun buf -> outputQualifiedValOrMember denvMin buf v2) if min1 <> min2 then (min1, min2) else let denvMax = { denv with showImperativeTyparAnnotations=true; showConstraintTyparAnnotations=true } - let max1 = bufs (fun buf -> outputQualifiedValOrMember denvMax infoReader buf v1) - let max2 = bufs (fun buf -> outputQualifiedValOrMember denvMax infoReader buf v2) + let max1 = bufs (fun buf -> outputQualifiedValOrMember denvMax buf v1) + let max2 = bufs (fun buf -> outputQualifiedValOrMember denvMax buf v2) max1, max2 let minimalStringOfType denv ty = diff --git a/src/fsharp/NicePrint.fsi b/src/fsharp/NicePrint.fsi index fd7fc1cbd88..8458fae4eed 100644 --- a/src/fsharp/NicePrint.fsi +++ b/src/fsharp/NicePrint.fsi @@ -4,16 +4,18 @@ module internal FSharp.Compiler.NicePrint open System.Text +open FSharp.Compiler +open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.Import open FSharp.Compiler.Infos open FSharp.Compiler.InfoReader +open FSharp.Compiler.Range open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps +open Internal.Utilities.StructuredFormat module PrintUtilities = val layoutBuiltinAttribute: denv:DisplayEnv -> attrib:BuiltinAttribInfo -> Layout @@ -24,7 +26,7 @@ val outputType: denv:DisplayEnv -> os:StringBuilder -> x:TType -> unit val layoutType: denv:DisplayEnv -> x:TType -> Layout -val outputTypars: denv:DisplayEnv -> nm:TaggedText -> os:StringBuilder -> x:Typars -> unit +val outputTypars: denv:DisplayEnv -> nm:Layout.TaggedText -> os:StringBuilder -> x:Typars -> unit val outputTyconRef: denv:DisplayEnv -> os:StringBuilder -> x:TyconRef -> unit @@ -40,39 +42,37 @@ val prettyLayoutsOfUnresolvedOverloading: denv:DisplayEnv -> argInfos:(TType * A val dataExprL: denv:DisplayEnv -> expr:Expr -> Layout -val outputValOrMember: denv:DisplayEnv -> infoReader:InfoReader -> os:StringBuilder -> x:ValRef -> unit +val outputValOrMember: denv:DisplayEnv -> os:StringBuilder -> x:Val -> unit -val stringValOrMember: denv:DisplayEnv -> infoReader:InfoReader -> x:ValRef -> string +val stringValOrMember: denv:DisplayEnv -> x:Val -> string -val layoutQualifiedValOrMember: denv:DisplayEnv -> infoReader:InfoReader -> typarInst:TyparInst -> v:ValRef -> TyparInst * Layout +val layoutQualifiedValOrMember: denv:DisplayEnv -> typarInst:TyparInst -> v:Val -> TyparInst * Layout -val outputQualifiedValOrMember: denv:DisplayEnv -> infoReader:InfoReader -> os:StringBuilder -> v:ValRef -> unit +val outputQualifiedValOrMember: denv:DisplayEnv -> os:StringBuilder -> v:Val -> unit -val outputQualifiedValSpec: denv:DisplayEnv -> infoReader:InfoReader -> os:StringBuilder -> v:ValRef -> unit +val outputQualifiedValSpec: denv:DisplayEnv -> os:StringBuilder -> v:Val -> unit -val stringOfQualifiedValOrMember: denv:DisplayEnv -> infoReader:InfoReader -> v:ValRef -> string +val stringOfQualifiedValOrMember: denv:DisplayEnv -> v:Val -> string -val formatMethInfoToBufferFreeStyle: infoReader:InfoReader -> m:range -> denv:DisplayEnv -> buf:StringBuilder -> d:MethInfo -> unit +val formatMethInfoToBufferFreeStyle: amap:ImportMap -> m:range -> denv:DisplayEnv -> buf:StringBuilder -> d:MethInfo -> unit -val prettyLayoutOfMethInfoFreeStyle: infoReader:InfoReader -> m:range -> denv:DisplayEnv -> typarInst:TyparInst -> minfo:MethInfo -> TyparInst * Layout +val prettyLayoutOfMethInfoFreeStyle: amap:ImportMap -> m:range -> denv:DisplayEnv -> typarInst:TyparInst -> minfo:MethInfo -> TyparInst * Layout val prettyLayoutOfPropInfoFreeStyle: g:TcGlobals -> amap:ImportMap -> m:range -> denv:DisplayEnv -> d:PropInfo -> Layout -val stringOfMethInfo: infoReader:InfoReader -> m:range -> denv:DisplayEnv -> d:MethInfo -> string +val stringOfMethInfo: amap:ImportMap -> m:range -> denv:DisplayEnv -> d:MethInfo -> string val stringOfParamData: denv:DisplayEnv -> paramData:ParamData -> string val layoutOfParamData: denv:DisplayEnv -> paramData:ParamData -> Layout -val layoutExnDef: denv:DisplayEnv -> infoReader:InfoReader -> x:EntityRef -> Layout +val layoutExnDef: denv:DisplayEnv -> x:Entity -> Layout val stringOfTyparConstraints: denv:DisplayEnv -> x:(Typar * TyparConstraint) list -> string val layoutTycon: denv:DisplayEnv -> infoReader:InfoReader -> ad:AccessorDomain -> m:range -> x:Tycon -> Layout -val layoutEntityRef: denv:DisplayEnv -> infoReader:InfoReader -> ad:AccessorDomain -> m:range -> x:EntityRef -> Layout - -val layoutUnionCases: denv:DisplayEnv -> infoReader:InfoReader -> enclosingTcref:TyconRef -> x:RecdField list -> Layout +val layoutUnionCases: denv:DisplayEnv -> x:RecdField list -> Layout val isGeneratedUnionCaseField: pos:int -> f:RecdField -> bool @@ -90,11 +90,11 @@ val prettyStringOfTy: denv:DisplayEnv -> x:TType -> string val prettyStringOfTyNoCx: denv:DisplayEnv -> x:TType -> string -val stringOfRecdField: denv:DisplayEnv -> infoReader:InfoReader -> enclosingTcref:TyconRef -> x:RecdField -> string +val stringOfRecdField: denv:DisplayEnv -> x:RecdField -> string -val stringOfUnionCase: denv:DisplayEnv -> infoReader:InfoReader -> enclosingTcref:TyconRef -> x:UnionCase -> string +val stringOfUnionCase: denv:DisplayEnv -> x:UnionCase -> string -val stringOfExnDef: denv:DisplayEnv -> infoReader:InfoReader -> x:EntityRef -> string +val stringOfExnDef: denv:DisplayEnv -> x:Entity -> string val stringOfFSAttrib: denv:DisplayEnv -> x:Attrib -> string @@ -102,9 +102,9 @@ val stringOfILAttrib: denv:DisplayEnv -> ILType * ILAttribElem list -> string val layoutInferredSigOfModuleExpr: showHeader:bool -> denv:DisplayEnv -> infoReader:InfoReader -> ad:AccessorDomain -> m:range -> expr:ModuleOrNamespaceExprWithSig -> Layout -val prettyLayoutOfValOrMember: denv:DisplayEnv -> infoReader:InfoReader -> typarInst:TyparInst -> v:ValRef -> TyparInst * Layout +val prettyLayoutOfValOrMember: denv:DisplayEnv -> typarInst:TyparInst -> v:Val -> TyparInst * Layout -val prettyLayoutOfValOrMemberNoInst: denv:DisplayEnv -> infoReader:InfoReader -> v:ValRef -> Layout +val prettyLayoutOfValOrMemberNoInst: denv:DisplayEnv -> v:Val -> Layout val prettyLayoutOfMemberNoInstShort: denv:DisplayEnv -> v:Val -> Layout @@ -112,6 +112,6 @@ val prettyLayoutOfInstAndSig: denv:DisplayEnv -> TyparInst * TTypes * TType -> T val minimalStringsOfTwoTypes: denv:DisplayEnv -> t1:TType -> t2:TType -> string * string * string -val minimalStringsOfTwoValues: denv:DisplayEnv -> infoReader:InfoReader -> v1:ValRef -> v2:ValRef -> string * string +val minimalStringsOfTwoValues: denv:DisplayEnv -> v1:Val -> v2:Val -> string * string val minimalStringOfType: denv:DisplayEnv -> ty:TType -> string diff --git a/src/fsharp/OptimizeInputs.fs b/src/fsharp/OptimizeInputs.fs index 6de165b9455..5a82d7bad1d 100644 --- a/src/fsharp/OptimizeInputs.fs +++ b/src/fsharp/OptimizeInputs.fs @@ -4,96 +4,99 @@ module internal FSharp.Compiler.OptimizeInputs -open System.IO -open Internal.Utilities.Library -open FSharp.Compiler +open FSharp.Compiler +open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.Diagnostics -open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerImports open FSharp.Compiler.CompilerOptions open FSharp.Compiler.IlxGen +open FSharp.Compiler.Range open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.IO open FSharp.Compiler.TypedTree -open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.CheckDeclarations -let mutable showTermFileCount = 0 +open Internal.Utilities.StructuredFormat +//---------------------------------------------------------------------------- +// PrintWholeAssemblyImplementation +//---------------------------------------------------------------------------- + +let mutable showTermFileCount = 0 let PrintWholeAssemblyImplementation g (tcConfig:TcConfig) outfile header expr = if tcConfig.showTerms then - if tcConfig.writeTermsToFiles then + if tcConfig.writeTermsToFiles then let filename = outfile + ".terms" - use f = FileSystem.OpenFileForWriteShim(filename + "-" + string showTermFileCount + "-" + header, FileMode.OpenOrCreate).GetWriter() + use f = System.IO.File.CreateText (filename + "-" + string showTermFileCount + "-" + header) showTermFileCount <- showTermFileCount + 1 - LayoutRender.outL f (Display.squashTo 192 (DebugPrint.implFilesL g expr)) - else + Layout.outL f (Display.squashTo 192 (DebugPrint.implFilesL g expr)) + else dprintf "\n------------------\nshowTerm: %s:\n" header - LayoutRender.outL stderr (Display.squashTo 192 (DebugPrint.implFilesL g expr)) + Layout.outL stderr (Display.squashTo 192 (DebugPrint.implFilesL g expr)) dprintf "\n------------------\n" - let AddExternalCcuToOptimizationEnv tcGlobals optEnv (ccuinfo: ImportedAssembly) = - match ccuinfo.FSharpOptimizationData.Force() with + match ccuinfo.FSharpOptimizationData.Force() with | None -> optEnv | Some data -> Optimizer.BindCcu ccuinfo.FSharpViewOfMetadata data optEnv tcGlobals let GetInitialOptimizationEnv (tcImports:TcImports, tcGlobals:TcGlobals) = let ccuinfos = tcImports.GetImportedAssemblies() let optEnv = Optimizer.IncrementalOptimizationEnv.Empty - let optEnv = List.fold (AddExternalCcuToOptimizationEnv tcGlobals) optEnv ccuinfos + let optEnv = List.fold (AddExternalCcuToOptimizationEnv tcGlobals) optEnv ccuinfos optEnv - + let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importMap, isIncrementalFragment, optEnv, ccu:CcuThunk, implFiles) = - // NOTE: optEnv - threads through + // 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"). + // 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 tcGlobals tcConfig outfile "pass-start" implFiles #if DEBUG - if tcConfig.showOptimizationData then - dprintf "Expression prior to optimization:\n%s\n" (LayoutRender.showL (Display.squashTo 192 (DebugPrint.implFilesL tcGlobals implFiles))) - - if tcConfig.showOptimizationData then - dprintf "CCU prior to optimization:\n%s\n" (LayoutRender.showL (Display.squashTo 192 (DebugPrint.entityL tcGlobals ccu.Contents))) + if tcConfig.showOptimizationData then + dprintf "Expression prior to optimization:\n%s\n" (Layout.showL (Display.squashTo 192 (DebugPrint.implFilesL tcGlobals implFiles))) + + if tcConfig.showOptimizationData then + dprintf "CCU prior to optimization:\n%s\n" (Layout.showL (Display.squashTo 192 (DebugPrint.entityL tcGlobals ccu.Contents))) #endif let optEnv0 = optEnv ReportTime tcConfig ("Optimizations") - // Only do abstract_big_targets on the first pass! Only do it when TLR is on! - let optSettings = tcConfig.optSettings + // 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 -> + + let results, (optEnvFirstLoop, _, _, _) = + ((optEnv0, optEnv0, optEnv0, SignatureHidingInfo.Empty), implFiles) + + ||> List.mapFold (fun (optEnvFirstLoop, optEnvExtraLoop, optEnvFinalSimplify, hidden) implFile -> //ReportTime tcConfig ("Initial simplify") - let (optEnvFirstLoop, implFile, implFileOptData, hidden), optimizeDuringCodeGen = + 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 - + let implFile = AutoBox.TransformImplFile tcGlobals importMap implFile + // Only do this on the first pass! let optSettings = { optSettings with abstractBigTargets = false; reportingPhase = false } #if DEBUG - if tcConfig.showOptimizationData then - dprintf "Optimization implFileOptData:\n%s\n" (LayoutRender.showL (Display.squashTo 192 (Optimizer.moduleInfoL tcGlobals implFileOptData))) + if tcConfig.showOptimizationData then + dprintf "Optimization implFileOptData:\n%s\n" (Layout.showL (Display.squashTo 192 (Optimizer.moduleInfoL tcGlobals implFileOptData))) #endif - let implFile, optEnvExtraLoop = - if tcConfig.extraOptimizationIterations > 0 then + let implFile, optEnvExtraLoop = + if tcConfig.extraOptimizationIterations > 0 then //ReportTime tcConfig ("Extra simplification loop") - let (optEnvExtraLoop, implFile, _, _), _ = + let (optEnvExtraLoop, implFile, _, _), _ = Optimizer.OptimizeImplFile (optSettings, ccu, tcGlobals, tcVal, importMap, optEnvExtraLoop, isIncrementalFragment, @@ -104,37 +107,37 @@ let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importM else implFile, optEnvExtraLoop - let implFile = - if tcConfig.doDetuple then + let implFile = + if tcConfig.doDetuple then //ReportTime tcConfig ("Detupled optimization") - let implFile = implFile |> Detuple.DetupleImplFile ccu tcGlobals + let implFile = implFile |> Detuple.DetupleImplFile ccu tcGlobals //PrintWholeAssemblyImplementation tcConfig outfile "post-detuple" implFile - implFile - else implFile + implFile + else implFile - let implFile = - if tcConfig.doTLR then - implFile |> InnerLambdasToTopLevelFuncs.MakeTLRDecisions ccu tcGlobals - else implFile + let implFile = + if tcConfig.doTLR then + implFile |> InnerLambdasToTopLevelFuncs.MakeTLRDecisions ccu tcGlobals + else implFile - let implFile = + let implFile = LowerCallsAndSeqs.LowerImplFile tcGlobals implFile let implFile, optEnvFinalSimplify = - if tcConfig.doFinalSimplify then + if tcConfig.doFinalSimplify then //ReportTime tcConfig ("Final simplify pass") - let (optEnvFinalSimplify, implFile, _, _), _ = + 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, optEnvFinalSimplify + else + implFile, optEnvFinalSimplify - let implFile = + let implFile = { ImplFile = implFile OptimizeDuringCodeGen = optimizeDuringCodeGen } @@ -148,29 +151,29 @@ let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importM tassembly, assemblyOptData, optEnvFirstLoop //---------------------------------------------------------------------------- -// ILX generation +// ILX generation //---------------------------------------------------------------------------- -let CreateIlxAssemblyGenerator (_tcConfig:TcConfig, tcImports:TcImports, tcGlobals, tcVal, generatedCcu) = +let CreateIlxAssemblyGenerator (_tcConfig:TcConfig, tcImports:TcImports, tcGlobals, tcVal, generatedCcu) = let ilxGenerator = new IlxGen.IlxAssemblyGenerator (tcImports.GetImportMap(), tcGlobals, tcVal, generatedCcu) let ccus = tcImports.GetCcusInDeclOrder() ilxGenerator.AddExternalCcus ccus ilxGenerator -let GenerateIlxCode +let GenerateIlxCode (ilxBackend, isInteractiveItExpr, isInteractiveOnMono, tcConfig:TcConfig, topAttrs: TopAttribs, optimizedImpls, fragName, ilxGenerator: IlxAssemblyGenerator) = - let mainMethodInfo = - if (tcConfig.target = CompilerTarget.Dll) || (tcConfig.target = CompilerTarget.Module) then - None + let mainMethodInfo = + if (tcConfig.target = CompilerTarget.Dll) || (tcConfig.target = CompilerTarget.Module) then + None else Some topAttrs.mainMethodAttrs - let ilxGenOpts: IlxGenOptions = + let ilxGenOpts: IlxGenOptions = { generateFilterBlocks = tcConfig.generateFilterBlocks emitConstantArraysUsingStaticDataBlobs = not isInteractiveOnMono - workAroundReflectionEmitBugs=tcConfig.isInteractive // REVIEW: is this still required? + workAroundReflectionEmitBugs=tcConfig.isInteractive // REVIEW: is this still required? generateDebugSymbols= tcConfig.debuginfo fragName = fragName localOptimizationsAreOn= tcConfig.optSettings.localOpt () @@ -181,7 +184,7 @@ let GenerateIlxCode isInteractiveItExpr = isInteractiveItExpr alwaysCallVirt = tcConfig.alwaysCallVirt } - ilxGenerator.GenerateCode (ilxGenOpts, optimizedImpls, topAttrs.assemblyAttrs, topAttrs.netModuleAttrs) + ilxGenerator.GenerateCode (ilxGenOpts, optimizedImpls, topAttrs.assemblyAttrs, topAttrs.netModuleAttrs) //---------------------------------------------------------------------------- // Assembly ref normalization: make sure all assemblies are referred to @@ -190,17 +193,18 @@ let GenerateIlxCode let NormalizeAssemblyRefs (ctok, ilGlobals: ILGlobals, tcImports:TcImports) scoref = let normalizeAssemblyRefByName nm = - match tcImports.TryFindDllInfo (ctok, Range.rangeStartup, nm, lookupOnly=false) with + match tcImports.TryFindDllInfo (ctok, Range.rangeStartup, nm, lookupOnly=false) with | Some dllInfo -> dllInfo.ILScopeRef | None -> scoref - match scoref with - | ILScopeRef.Local + match scoref with + | ILScopeRef.Local | ILScopeRef.Module _ -> scoref | ILScopeRef.PrimaryAssembly -> normalizeAssemblyRefByName ilGlobals.primaryAssemblyName | ILScopeRef.Assembly aref -> normalizeAssemblyRefByName aref.Name -let GetGeneratedILModuleName (t:CompilerTarget) (s:string) = +let GetGeneratedILModuleName (t:CompilerTarget) (s:string) = // return the name of the file as a module name let ext = match t with CompilerTarget.Dll -> "dll" | CompilerTarget.Module -> "netmodule" | _ -> "exe" s + "." + ext + diff --git a/src/fsharp/OptimizeInputs.fsi b/src/fsharp/OptimizeInputs.fsi index 0ebdcaf8b72..c52eab8645d 100644 --- a/src/fsharp/OptimizeInputs.fsi +++ b/src/fsharp/OptimizeInputs.fsi @@ -2,9 +2,9 @@ module internal FSharp.Compiler.OptimizeInputs -open Internal.Utilities.Library +open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.CheckDeclarations +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerImports open FSharp.Compiler.IlxGen @@ -12,6 +12,7 @@ open FSharp.Compiler.Import open FSharp.Compiler.Optimizer open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypedTree +open FSharp.Compiler.CheckDeclarations val GetGeneratedILModuleName : CompilerTarget -> string -> string diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index d579077b081..7d04b23c49b 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -6,30 +6,29 @@ module internal FSharp.Compiler.Optimizer open Internal.Utilities -open Internal.Utilities.Collections -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras +open Internal.Utilities.StructuredFormat + open FSharp.Compiler open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AttributeChecking open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Infos -open FSharp.Compiler.Syntax +open FSharp.Compiler.Layout +open FSharp.Compiler.Layout.TaggedTextOps +open FSharp.Compiler.Lib +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Layout -open FSharp.Compiler.Text.LayoutRender -open FSharp.Compiler.Text.TaggedText open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TypedTreeOps.DebugPrint open FSharp.Compiler.TypedTreePickle +open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypeRelations open System.Collections.Generic @@ -397,7 +396,7 @@ type cenv = emitTailcalls: bool /// cache methods with SecurityAttribute applied to them, to prevent unnecessary calls to ExistsInEntireHierarchyOfType - casApplied: Dictionary + casApplied : Dictionary } override x.ToString() = "" @@ -513,19 +512,28 @@ let mkValInfo info (v: Val) = { ValExprInfo=info.Info; ValMakesNoCriticalTailcal (* Bind a value *) let BindInternalLocalVal cenv (v: Val) vval env = let vval = if v.IsMutable then UnknownValInfo else vval - +#if CHECKED +#else match vval.ValExprInfo with | UnknownValue -> env - | _ -> + | _ -> +#endif cenv.localInternalVals.[v.Stamp] <- vval env let BindExternalLocalVal cenv (v: Val) vval env = +#if CHECKED + CheckInlineValueIsComplete v vval +#endif + let vval = if v.IsMutable then {vval with ValExprInfo=UnknownValue } else vval - let env = + let env = +#if CHECKED +#else match vval.ValExprInfo with | UnknownValue -> env - | _ -> + | _ -> +#endif { env with localExternalVals=env.localExternalVals.Add (v.Stamp, vval) } // If we're compiling fslib then also bind the value as a non-local path to // allow us to resolve the compiler-non-local-references that arise from env.fs @@ -552,14 +560,21 @@ let rec BindValsInModuleOrNamespace cenv (mval: LazyModuleInfo) env = env let inline BindInternalValToUnknown cenv v env = +#if CHECKED + BindInternalLocalVal cenv v UnknownValue env +#else ignore cenv ignore v env - +#endif let inline BindInternalValsToUnknown cenv vs env = +#if CHECKED + List.foldBack (BindInternalValToUnknown cenv) vs env +#else ignore cenv ignore vs env +#endif let BindTypeVar tyv typeinfo env = { env with typarInfos= (tyv, typeinfo) :: env.typarInfos } @@ -590,6 +605,9 @@ let GetInfoForLocalValue cenv env (v: Val) m = | None -> if v.MustInline then errorR(Error(FSComp.SR.optValueMarkedInlineButWasNotBoundInTheOptEnv(fullDisplayTextOfValRef (mkLocalValRef v)), m)) +#if CHECKED + warning(Error(FSComp.SR.optLocalValueNotFoundDuringOptimization(v.DisplayName), m)) +#endif UnknownValInfo let TryGetInfoForCcu env (ccu: CcuThunk) = env.globalModuleInfos.TryFind(ccu.AssemblyName) @@ -1234,17 +1252,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 (showL (Display.squashTo 192 (moduleInfoL g info))) + if verboseOptimizationInfo then dprintf "%s - %a - Optimization data prior to trim: \n%s\n" msg outputRange m (Layout.showL (Display.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 (showL (Display.squashTo 192 (moduleInfoL g info))) + if verboseOptimizationInfo then dprintf "%s - %a - Optimization data after trim:\n%s\n" msg outputRange m (Layout.showL (Display.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 (showL (Display.squashTo 192 (moduleInfoL g info))) + if verboseOptimizationInfo then dprintf "%s - %a - Optimization data after remap:\n%s\n" msg outputRange m (Layout.showL (Display.squashTo 192 (moduleInfoL g info))) #endif info @@ -1252,12 +1270,9 @@ let AbstractAndRemapModulInfo msg g m (repackage, hidden) info = // Misc helpers //------------------------------------------------------------------------- -/// Mark some variables (the ones we introduce via abstractBigTargets) as don't-eliminate +// Mark some variables (the ones we introduce via abstractBigTargets) as don't-eliminate let [] suffixForVariablesThatMayNotBeEliminated = "$cont" -/// Indicates a ValRef generated to facilitate tuple eliminations -let [] suffixForTupleElementAssignmentTarget = "$tupleElem" - /// Type applications of F# "type functions" may cause side effects, e.g. /// let x<'a> = printfn "hello"; typeof<'a> /// In this case do not treat them as constants. @@ -1278,18 +1293,6 @@ let ValueOfExpr expr = ConstExprValue(0, expr) else UnknownValue -let IsMutableStructuralBindingForTupleElement (vref: ValRef) = - vref.IsCompilerGenerated && - vref.LogicalName.EndsWith suffixForTupleElementAssignmentTarget - -let IsMutableForOutArg (vref: ValRef) = - vref.IsCompilerGenerated && - vref.LogicalName.StartsWith(PrettyNaming.outArgCompilerGeneratedName) - -let IsKnownOnlyMutableBeforeUse (vref: ValRef) = - IsMutableStructuralBindingForTupleElement vref || - IsMutableForOutArg vref - //------------------------------------------------------------------------- // Dead binding elimination //------------------------------------------------------------------------- @@ -1590,12 +1593,7 @@ let MakeStructuralBindingTemp (v: Val) i (arg: Expr) argTy = let name = v.LogicalName + "_" + string i let v, ve = mkCompGenLocal arg.Range name argTy ve, mkCompGenBind v arg - -let MakeMutableStructuralBindingForTupleElement (v: Val) i (arg: Expr) argTy = - let name = sprintf "%s_%d%s" v.LogicalName i suffixForTupleElementAssignmentTarget - let v, ve = mkMutableCompGenLocal arg.Range name argTy - ve, mkCompGenBind v arg - + let ExpandStructuralBindingRaw cenv expr = assert cenv.settings.ExpandStructuralValues() match expr with @@ -1629,86 +1627,6 @@ let rec RearrangeTupleBindings expr fin = | Some b -> Some (mkLetBind m bind b) | None -> None | Expr.Op (TOp.Tuple tupInfo, _, _, _) when not (evalTupInfoIsStruct tupInfo) -> Some (fin expr) - | Expr.Sequential (e1, e2, kind, sp, m) -> - match RearrangeTupleBindings e2 fin with - | Some b -> Some (Expr.Sequential (e1, b, kind, sp, m)) - | None -> None - | _ -> None - -// Attempts to rewrite tuple bindings containing ifs/matches by introducing a mutable local for each tuple element. -// These are assigned to exactly once from each branch in order to eliminate tuple allocations. The tuple binding -// is also rearranged such that OptimizeTupleFieldGet may kick in (see RearrangeTupleBindings comment above). -// First class use of a tuple at the end of any branch prevents this rewrite. -// -// Roughly speaking, the following expression: -// -// let a, b = -// if cond () then -// 1, 2 -// elif cond2 () then -// 3, 4 -// else -// 5, 6 -// in ... -// -// becomes -// -// let mutable a = Unchecked.defaultof<_> -// let mutable b = Unchecked.defaultof<_> -// -// if cond () then -// a <- 1 -// b <- 2 -// elif cond2 () then -// a <- 3 -// b <- 4 -// else -// a <- 5 -// b <- 6 -// in ... -let TryRewriteBranchingTupleBinding g (v: Val) rhs tgtSeqPtOpt body m = - let rec dive g m (requisites: Lazy<_>) expr = - match expr with - | Expr.Match (sp, inputRange, decision, targets, fullRange, ty) -> - // Recurse down every if/match branch - let rewrittenTargets = targets |> Array.choose (fun (TTarget (vals, targetExpr, sp)) -> - match dive g m requisites targetExpr with - | Some rewritten -> TTarget (vals, rewritten, sp) |> Some - | _ -> None) - - // If not all branches can be rewritten, keep the original expression as it is - if rewrittenTargets.Length <> targets.Length then - None - else - Expr.Match (sp, inputRange, decision, rewrittenTargets, fullRange, ty) |> Some - | Expr.Op (TOp.Tuple tupInfo, _, tupleElements, m) when not (evalTupInfoIsStruct tupInfo) -> - // Replace tuple allocation with mutations of locals - let _, _, _, vrefs = requisites.Value - List.map2 (mkValSet m) vrefs tupleElements - |> mkSequentials DebugPointAtSequential.StmtOnly g m - |> Some - | Expr.Sequential (e1, e2, kind, sp, m) -> - match dive g m requisites e2 with - | Some rewritten -> Expr.Sequential (e1, rewritten, kind, sp, m) |> Some - | _ -> None - | Expr.Let (bind, body, m, _) -> - match dive g m requisites body with - | Some rewritten -> mkLetBind m bind rewritten |> Some - | _ -> None - | _ -> None - - let requisites = lazy ( - let argTys = destRefTupleTy g v.Type - let inits = argTys |> List.map (mkNull m) - let ves, binds = List.mapi2 (MakeMutableStructuralBindingForTupleElement v) inits argTys |> List.unzip - let vrefs = binds |> List.map (fun (TBind (v, _, _)) -> mkLocalValRef v) - argTys, ves, binds, vrefs) - - match dive g m requisites rhs with - | Some rewrittenRhs -> - let argTys, ves, binds, _ = requisites.Value - let rhsAndTupleBinding = mkCompGenSequential m rewrittenRhs (mkLet tgtSeqPtOpt m v (mkRefTupled g m ves argTys) body) - mkLetsBind m binds rhsAndTupleBinding |> Some | _ -> None let ExpandStructuralBinding cenv expr = @@ -1720,9 +1638,7 @@ let ExpandStructuralBinding cenv expr = CanExpandStructuralBinding v) -> match RearrangeTupleBindings rhs (fun top -> mkLet tgtSeqPtOpt m v top body) with | Some e -> ExpandStructuralBindingRaw cenv e - | None -> - // RearrangeTupleBindings could have failed because the rhs branches - TryRewriteBranchingTupleBinding cenv.g v rhs tgtSeqPtOpt body m |> Option.defaultValue expr + | None -> expr // Expand 'let v = Some arg in ...' to 'let tmp = arg in let v = Some tp in ...' // Used to give names to values of optional arguments prior as we inline. @@ -2222,7 +2138,7 @@ and OptimizeExprOpReductionsAfter cenv env (op, tyargs, argsR, arginfos, m) = | _ -> None match knownValue with | Some valu -> - match TryOptimizeVal cenv env (None, false, valu, m) with + match TryOptimizeVal cenv env (false, valu, m) with | Some res -> OptimizeExpr cenv env res (* discard e1 since guard ensures it has no effects *) | None -> OptimizeExprOpFallback cenv env (op, tyargs, argsR, m) arginfos valu | None -> OptimizeExprOpFallback cenv env (op, tyargs, argsR, m) arginfos UnknownValue @@ -2368,14 +2284,6 @@ and OptimizeFastIntegerForLoop cenv env (spStart, v, e1, dir, e2, e3, m) = mkLdlen cenv.g (e2R.Range) arre, CSharpForLoopUp - | FSharpForLoopUp, Expr.Op (TOp.ILAsm ([ (AI_sub | AI_sub_ovf)], _), _, [Expr.Op (TOp.ILCall(_,_,_,_,_,_,_, mth, _,_,_), _, [arre], _) as lenOp; Expr.Const (Const.Int32 1, _, _)], _) - when - mth.Name = "get_Length" && (mth.DeclaringTypeRef.FullName = "System.Span`1" || mth.DeclaringTypeRef.FullName = "System.ReadOnlySpan`1") - && not (snd(OptimizeExpr cenv env arre)).HasEffect -> - - lenOp, CSharpForLoopUp - - // detect upwards for loops with constant bounds, but not MaxValue! | FSharpForLoopUp, Expr.Const (Const.Int32 n, _, _) when n < System.Int32.MaxValue -> @@ -2559,7 +2467,7 @@ and OptimizeTraitCall cenv env (traitInfo, args, m) = /// Make optimization decisions once we know the optimization information /// for a value -and TryOptimizeVal cenv env (vOpt: ValRef option, mustInline, valInfoForVal, m) = +and TryOptimizeVal cenv env (mustInline, valInfoForVal, m) = match valInfoForVal with // Inline all constants immediately @@ -2567,25 +2475,15 @@ and TryOptimizeVal cenv env (vOpt: ValRef option, mustInline, valInfoForVal, m) Some (Expr.Const (c, m, ty)) | SizeValue (_, detail) -> - TryOptimizeVal cenv env (vOpt, mustInline, detail, m) + TryOptimizeVal cenv env (mustInline, detail, m) | ValValue (vR, detail) -> // Inline values bound to other values immediately // Prefer to inline using the more specific info if possible // If the more specific info didn't reveal an inline then use the value - match TryOptimizeVal cenv env (vOpt, mustInline, detail, m) with + match TryOptimizeVal cenv env (mustInline, detail, m) with | Some e -> Some e - | None -> - // If we have proven 'v = compilerGeneratedValue' - // and 'v' is being eliminated in favour of 'compilerGeneratedValue' - // then replace the name of 'compilerGeneratedValue' - // by 'v' and mark it not compiler generated so we preserve good debugging and names - match vOpt with - | Some v when not v.IsCompilerGenerated && vR.IsCompilerGenerated -> - vR.Deref.SetIsCompilerGenerated(false) - vR.Deref.SetLogicalName(v.LogicalName) - | _ -> () - Some(exprForValRef m vR) + | None -> Some(exprForValRef m vR) | ConstExprValue(_size, expr) -> Some (remarkExpr m (copyExpr cenv.g CloneAllAndMarkExprValsAsCompilerGenerated expr)) @@ -2604,26 +2502,24 @@ and TryOptimizeVal cenv env (vOpt: ValRef option, mustInline, valInfoForVal, m) | _ -> None and TryOptimizeValInfo cenv env m vinfo = - if vinfo.HasEffect then None else TryOptimizeVal cenv env (None, false, vinfo.Info, m) + if vinfo.HasEffect then None else TryOptimizeVal cenv env (false, vinfo.Info, m) /// Add 'v1 = v2' information into the information stored about a value and AddValEqualityInfo g m (v: ValRef) info = // ValValue is information that v = v2, where v2 does not change // So we can't record this information for mutable values. An exception can be made // for "outArg" values arising from method calls since they are only temporarily mutable - // when their address is passed to the method call. Another exception are mutable variables - // created for tuple elimination in branching tuple bindings because they are assigned to - // exactly once. - if not v.IsMutable || IsKnownOnlyMutableBeforeUse v then - { info with Info = MakeValueInfoForValue g m v info.Info } - else + // when their address is passed to the method call. + if v.IsMutable && not (v.IsCompilerGenerated && v.DisplayName.StartsWith(PrettyNaming.outArgCompilerGeneratedName)) then info + else + {info with Info= MakeValueInfoForValue g m v info.Info} /// Optimize/analyze a use of a value and OptimizeVal cenv env expr (v: ValRef, m) = let valInfoForVal = GetInfoForVal cenv env m v - match TryOptimizeVal cenv env (Some v, v.MustInline, valInfoForVal.ValExprInfo, m) with + match TryOptimizeVal cenv env (v.MustInline, valInfoForVal.ValExprInfo, m) with | Some e -> // don't reoptimize inlined lambdas until they get applied to something match e with @@ -3263,7 +3159,7 @@ and TryOptimizeDecisionTreeTest cenv test vinfo = | DecisionTreeTest.IsNull, StripConstValue c2 -> Some(c2=Const.Zero) | DecisionTreeTest.IsInst (_srcty1, _tgty1), _ -> None // These should not occur in optimization - | DecisionTreeTest.ActivePatternCase _, _ -> None + | DecisionTreeTest.ActivePatternCase (_, _, _vrefOpt1, _, _), _ -> None | _ -> None /// Optimize/analyze a switch construct from pattern matching diff --git a/src/fsharp/Optimizer.fsi b/src/fsharp/Optimizer.fsi index 85504d02628..969e94e885b 100644 --- a/src/fsharp/Optimizer.fsi +++ b/src/fsharp/Optimizer.fsi @@ -4,7 +4,6 @@ module internal FSharp.Compiler.Optimizer open FSharp.Compiler open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TypedTreePickle @@ -17,17 +16,14 @@ type OptimizationSettings = bigTargetSize: int veryBigExprSize: int lambdaInlineThreshold: int - reportingPhase: bool + reportingPhase: bool; reportNoNeedToTailcall: bool reportFunctionSizes: bool reportHasEffect: bool - reportTotalSizes: bool - } + reportTotalSizes: bool } member jitOpt: unit -> bool - member localOpt: unit -> bool - static member Defaults: OptimizationSettings /// Optimization information @@ -62,7 +58,7 @@ val internal OptimizeImplFile: #if DEBUG /// Displaying optimization data -val internal moduleInfoL: TcGlobals -> LazyModuleInfo -> Layout +val internal moduleInfoL: TcGlobals -> LazyModuleInfo -> Layout.layout #endif /// Saving and re-reading optimization information @@ -80,8 +76,4 @@ val UnionOptimizationInfos: seq -> CcuOptimizationInfo /// Check if an expression has an effect val ExprHasEffect: TcGlobals -> Expr -> bool -val internal u_CcuOptimizationInfo: ReaderState -> CcuOptimizationInfo - -/// Indicates the value is only mutable during its initialization and before any access or capture -val IsKnownOnlyMutableBeforeUse: ValRef -> bool - +val internal u_CcuOptimizationInfo: ReaderState -> CcuOptimizationInfo \ No newline at end of file diff --git a/src/fsharp/ParseAndCheckInputs.fs b/src/fsharp/ParseAndCheckInputs.fs index fcd366e6bfb..13b6fa3beba 100644 --- a/src/fsharp/ParseAndCheckInputs.fs +++ b/src/fsharp/ParseAndCheckInputs.fs @@ -5,46 +5,46 @@ module internal FSharp.Compiler.ParseAndCheckInputs open System open System.IO -open System.Threading -open Internal.Utilities.Collections -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras +open Internal.Utilities +open Internal.Utilities.Filename open Internal.Utilities.Text.Lexing open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.CheckExpressions open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerDiagnostics open FSharp.Compiler.CompilerImports -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.DotNetFrameworkDependencies open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.IO open FSharp.Compiler.Lexhelp +open FSharp.Compiler.Lib open FSharp.Compiler.NameResolution open FSharp.Compiler.ParseHelpers -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Position -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Xml +open FSharp.Compiler.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TcGlobals +open FSharp.Compiler.XmlDoc -let CanonicalizeFilename filename = - let basic = FileSystemUtils.fileNameOfPath filename - String.capitalize (try FileSystemUtils.chopExtension basic with _ -> basic) -let IsScript filename = - let lower = String.lowercase filename - FSharpScriptFileSuffixes |> List.exists (FileSystemUtils.checkSuffix lower) +let CanonicalizeFilename filename = + let basic = fileNameOfPath filename + String.capitalize (try Filename.chopExtension basic with _ -> basic) +let IsScript filename = + let lower = String.lowercase filename + FSharpScriptFileSuffixes |> List.exists (Filename.checkSuffix lower) + // Give a unique name to the different kinds of inputs. Used to correlate signature and implementation files // QualFileNameOfModuleName - files with a single module declaration or an anonymous module let QualFileNameOfModuleName m filename modname = @@ -57,14 +57,14 @@ let QualFileNameOfFilename m filename = let ComputeQualifiedNameOfFileFromUniquePath (m, p: string list) = QualifiedNameOfFile(mkSynId m (String.concat "_" p)) -let QualFileNameOfSpecs filename specs = - match specs with +let QualFileNameOfSpecs filename specs = + match specs with | [SynModuleOrNamespaceSig(modname, _, kind, _, _, _, _, m)] when kind.IsModule -> QualFileNameOfModuleName m filename modname | [SynModuleOrNamespaceSig(_, _, kind, _, _, _, _, m)] when not kind.IsModule -> QualFileNameOfFilename m filename | _ -> QualFileNameOfFilename (mkRange filename pos0 pos0) filename -let QualFileNameOfImpls filename specs = - match specs with +let QualFileNameOfImpls filename specs = + match specs with | [SynModuleOrNamespace(modname, _, kind, _, _, _, _, m)] when kind.IsModule -> QualFileNameOfModuleName m filename modname | [SynModuleOrNamespace(_, _, kind, _, _, _, _, m)] when not kind.IsModule -> QualFileNameOfFilename m filename | _ -> QualFileNameOfFilename (mkRange filename pos0 pos0) filename @@ -78,21 +78,21 @@ let PrependPathToImpl x (SynModuleOrNamespace(p, b, c, d, e, f, g, h)) = let PrependPathToSpec x (SynModuleOrNamespaceSig(p, b, c, d, e, f, g, h)) = SynModuleOrNamespaceSig(x@p, b, c, d, e, f, g, h) -let PrependPathToInput x inp = - match inp with +let PrependPathToInput x inp = + match inp with | ParsedInput.ImplFile (ParsedImplFileInput (b, c, q, d, hd, impls, e)) -> ParsedInput.ImplFile (ParsedImplFileInput (b, c, PrependPathToQualFileName x q, d, hd, List.map (PrependPathToImpl x) impls, e)) | ParsedInput.SigFile (ParsedSigFileInput (b, q, d, hd, specs)) -> ParsedInput.SigFile (ParsedSigFileInput (b, PrependPathToQualFileName x q, d, hd, List.map (PrependPathToSpec x) specs)) -let ComputeAnonModuleName check defaultNamespace filename (m: range) = +let ComputeAnonModuleName check defaultNamespace filename (m: range) = let modname = CanonicalizeFilename filename if check && not (modname |> String.forall (fun c -> System.Char.IsLetterOrDigit c || c = '_')) then if not (filename.EndsWith("fsx", StringComparison.OrdinalIgnoreCase) || filename.EndsWith("fsscript", StringComparison.OrdinalIgnoreCase)) then - warning(Error(FSComp.SR.buildImplicitModuleIsNotLegalIdentifier(modname, (FileSystemUtils.fileNameOfPath filename)), m)) - let combined = - match defaultNamespace with + warning(Error(FSComp.SR.buildImplicitModuleIsNotLegalIdentifier(modname, (fileNameOfPath filename)), m)) + let combined = + match defaultNamespace with | None -> modname | Some ns -> textOfPath [ns;modname] @@ -101,120 +101,117 @@ let ComputeAnonModuleName check defaultNamespace filename (m: range) = mkRange filename pos0 pos0 pathToSynLid anonymousModuleNameRange (splitNamespace combined) -let PostParseModuleImpl (_i, defaultNamespace, isLastCompiland, filename, impl) = - match impl with - | ParsedImplFileFragment.NamedModule(SynModuleOrNamespace(lid, isRec, kind, decls, xmlDoc, attribs, access, m)) -> - let lid = - match lid with +let PostParseModuleImpl (_i, defaultNamespace, isLastCompiland, filename, impl) = + match impl with + | ParsedImplFileFragment.NamedModule(SynModuleOrNamespace(lid, isRec, kind, decls, xmlDoc, attribs, access, m)) -> + let lid = + match lid with | [id] when kind.IsModule && id.idText = MangledGlobalName -> error(Error(FSComp.SR.buildInvalidModuleOrNamespaceName(), id.idRange)) | id :: rest when id.idText = MangledGlobalName -> rest | _ -> lid SynModuleOrNamespace(lid, isRec, kind, decls, xmlDoc, attribs, access, m) - | ParsedImplFileFragment.AnonModule (defs, m)-> - let isLast, isExe = isLastCompiland + | ParsedImplFileFragment.AnonModule (defs, m)-> + let isLast, isExe = isLastCompiland let lower = String.lowercase filename - if not (isLast && isExe) && not (doNotRequireNamespaceOrModuleSuffixes |> List.exists (FileSystemUtils.checkSuffix lower)) then + if not (isLast && isExe) && not (doNotRequireNamespaceOrModuleSuffixes |> List.exists (Filename.checkSuffix lower)) then match defs with | SynModuleDecl.NestedModule(_) :: _ -> errorR(Error(FSComp.SR.noEqualSignAfterModule(), trimRangeToLine m)) | _ -> errorR(Error(FSComp.SR.buildMultiFileRequiresNamespaceOrModule(), trimRangeToLine m)) let modname = ComputeAnonModuleName (not (isNil defs)) defaultNamespace filename (trimRangeToLine m) - SynModuleOrNamespace(modname, false, SynModuleOrNamespaceKind.AnonModule, defs, PreXmlDoc.Empty, [], None, m) + SynModuleOrNamespace(modname, false, AnonModule, defs, PreXmlDoc.Empty, [], None, m) - | ParsedImplFileFragment.NamespaceFragment (lid, a, kind, c, d, e, m)-> - let lid, kind = - match lid with + | ParsedImplFileFragment.NamespaceFragment (lid, a, kind, c, d, e, m)-> + let lid, kind = + match lid with | id :: rest when id.idText = MangledGlobalName -> - rest, if List.isEmpty rest then SynModuleOrNamespaceKind.GlobalNamespace else kind + rest, if List.isEmpty rest then GlobalNamespace else kind | _ -> lid, kind SynModuleOrNamespace(lid, a, kind, c, d, e, None, m) -let PostParseModuleSpec (_i, defaultNamespace, isLastCompiland, filename, intf) = - match intf with - | ParsedSigFileFragment.NamedModule(SynModuleOrNamespaceSig(lid, isRec, kind, decls, xmlDoc, attribs, access, m)) -> - let lid = - match lid with +let PostParseModuleSpec (_i, defaultNamespace, isLastCompiland, filename, intf) = + match intf with + | ParsedSigFileFragment.NamedModule(SynModuleOrNamespaceSig(lid, isRec, kind, decls, xmlDoc, attribs, access, m)) -> + let lid = + match lid with | [id] when kind.IsModule && id.idText = MangledGlobalName -> error(Error(FSComp.SR.buildInvalidModuleOrNamespaceName(), id.idRange)) | id :: rest when id.idText = MangledGlobalName -> rest | _ -> lid - SynModuleOrNamespaceSig(lid, isRec, SynModuleOrNamespaceKind.NamedModule, decls, xmlDoc, attribs, access, m) + SynModuleOrNamespaceSig(lid, isRec, NamedModule, decls, xmlDoc, attribs, access, m) - | ParsedSigFileFragment.AnonModule (defs, m) -> + | ParsedSigFileFragment.AnonModule (defs, m) -> let isLast, isExe = isLastCompiland let lower = String.lowercase filename - if not (isLast && isExe) && not (doNotRequireNamespaceOrModuleSuffixes |> List.exists (FileSystemUtils.checkSuffix lower)) then + if not (isLast && isExe) && not (doNotRequireNamespaceOrModuleSuffixes |> List.exists (Filename.checkSuffix lower)) then match defs with | SynModuleSigDecl.NestedModule(_) :: _ -> errorR(Error(FSComp.SR.noEqualSignAfterModule(), m)) | _ -> errorR(Error(FSComp.SR.buildMultiFileRequiresNamespaceOrModule(), m)) let modname = ComputeAnonModuleName (not (isNil defs)) defaultNamespace filename (trimRangeToLine m) - SynModuleOrNamespaceSig(modname, false, SynModuleOrNamespaceKind.AnonModule, defs, PreXmlDoc.Empty, [], None, m) + SynModuleOrNamespaceSig(modname, false, AnonModule, defs, PreXmlDoc.Empty, [], None, m) - | ParsedSigFileFragment.NamespaceFragment (lid, a, kind, c, d, e, m)-> - let lid, kind = - match lid with + | ParsedSigFileFragment.NamespaceFragment (lid, a, kind, c, d, e, m)-> + let lid, kind = + match lid with | id :: rest when id.idText = MangledGlobalName -> - rest, if List.isEmpty rest then SynModuleOrNamespaceKind.GlobalNamespace else kind + rest, if List.isEmpty rest then GlobalNamespace else kind | _ -> lid, kind SynModuleOrNamespaceSig(lid, a, kind, c, d, e, None, m) -let GetScopedPragmasForInput input = - match input with +let GetScopedPragmasForInput input = + match input with | ParsedInput.SigFile (ParsedSigFileInput (scopedPragmas=pragmas)) -> pragmas | ParsedInput.ImplFile (ParsedImplFileInput (scopedPragmas=pragmas)) -> pragmas -let GetScopedPragmasForHashDirective hd = - [ match hd with +let GetScopedPragmasForHashDirective hd = + [ match hd with | ParsedHashDirective("nowarn", numbers, m) -> for s in numbers do - match s with - | ParsedHashDirectiveArgument.SourceIdentifier _ -> () - | ParsedHashDirectiveArgument.String (s, _, _) -> - match GetWarningNumber(m, s) with - | None -> () - | Some n -> yield ScopedPragma.WarningOff(m, n) + match GetWarningNumber(m, s) with + | None -> () + | Some n -> yield ScopedPragma.WarningOff(m, n) | _ -> () ] -let PostParseModuleImpls (defaultNamespace, filename, isLastCompiland, ParsedImplFile (hashDirectives, impls)) = +let PostParseModuleImpls (defaultNamespace, filename, isLastCompiland, ParsedImplFile (hashDirectives, impls)) = match impls |> List.rev |> List.tryPick (function ParsedImplFileFragment.NamedModule(SynModuleOrNamespace(lid, _, _, _, _, _, _, _)) -> Some lid | _ -> None) with - | Some lid when impls.Length > 1 -> + | Some lid when impls.Length > 1 -> errorR(Error(FSComp.SR.buildMultipleToplevelModules(), rangeOfLid lid)) - | _ -> + | _ -> () - let impls = impls |> List.mapi (fun i x -> PostParseModuleImpl (i, defaultNamespace, isLastCompiland, filename, x)) + let impls = impls |> List.mapi (fun i x -> PostParseModuleImpl (i, defaultNamespace, isLastCompiland, filename, x)) let qualName = QualFileNameOfImpls filename impls let isScript = IsScript filename - let scopedPragmas = - [ for (SynModuleOrNamespace(_, _, _, decls, _, _, _, _)) in impls do + let scopedPragmas = + [ for (SynModuleOrNamespace(_, _, _, decls, _, _, _, _)) in impls do for d in decls do - match d with + match d with | SynModuleDecl.HashDirective (hd, _) -> yield! GetScopedPragmasForHashDirective hd - | _ -> () - for hd in hashDirectives do + | _ -> () + for hd in hashDirectives do yield! GetScopedPragmasForHashDirective hd ] ParsedInput.ImplFile (ParsedImplFileInput (filename, isScript, qualName, scopedPragmas, hashDirectives, impls, isLastCompiland)) - -let PostParseModuleSpecs (defaultNamespace, filename, isLastCompiland, ParsedSigFile (hashDirectives, specs)) = + +let PostParseModuleSpecs (defaultNamespace, filename, isLastCompiland, ParsedSigFile (hashDirectives, specs)) = match specs |> List.rev |> List.tryPick (function ParsedSigFileFragment.NamedModule(SynModuleOrNamespaceSig(lid, _, _, _, _, _, _, _)) -> Some lid | _ -> None) with - | Some lid when specs.Length > 1 -> + | Some lid when specs.Length > 1 -> errorR(Error(FSComp.SR.buildMultipleToplevelModules(), rangeOfLid lid)) - | _ -> + | _ -> () - - let specs = specs |> List.mapi (fun i x -> PostParseModuleSpec(i, defaultNamespace, isLastCompiland, filename, x)) + + let specs = specs |> List.mapi (fun i x -> PostParseModuleSpec(i, defaultNamespace, isLastCompiland, filename, x)) let qualName = QualFileNameOfSpecs filename specs - let scopedPragmas = - [ for (SynModuleOrNamespaceSig(_, _, _, decls, _, _, _, _)) in specs do + let scopedPragmas = + [ for (SynModuleOrNamespaceSig(_, _, _, decls, _, _, _, _)) in specs do for d in decls do - match d with + match d with | SynModuleSigDecl.HashDirective(hd, _) -> yield! GetScopedPragmasForHashDirective hd - | _ -> () - for hd in hashDirectives do + | _ -> () + for hd in hashDirectives do yield! GetScopedPragmasForHashDirective hd ] ParsedInput.SigFile (ParsedSigFileInput (filename, qualName, scopedPragmas, hashDirectives, specs)) @@ -227,7 +224,7 @@ let DeduplicateModuleName (moduleNamesDict: ModuleNamesDict) fileName (qualNameO let path = if FileSystem.IsPathRootedShim path then try FileSystem.GetFullPathShim path with _ -> path else path match moduleNamesDict.TryGetValue qualNameOfFile.Text with | true, paths -> - if paths.ContainsKey path then + if paths.ContainsKey path then paths.[path], moduleNamesDict else let count = paths.Count + 1 @@ -251,14 +248,14 @@ let DeduplicateParsedInputModuleName (moduleNamesDict: ModuleNamesDict) input = let inputT = ParsedInput.SigFile (ParsedSigFileInput.ParsedSigFileInput (fileName, qualNameOfFileT, scopedPragmas, hashDirectives, modules)) inputT, moduleNamesDictT -let ParseInput (lexer, errorLogger: ErrorLogger, lexbuf: UnicodeLexing.Lexbuf, defaultNamespace, filename, isLastCompiland) = +let ParseInput (lexer, errorLogger: ErrorLogger, lexbuf: UnicodeLexing.Lexbuf, defaultNamespace, filename, isLastCompiland) = // The assert below is almost ok, but it fires in two cases: // - fsi.exe sometimes passes "stdin" as a dummy filename - // - if you have a #line directive, e.g. + // - if you have a #line directive, e.g. // # 1000 "Line01.fs" // then it also asserts. But these are edge cases that can be fixed later, e.g. in bug 4651. //System.Diagnostics.Debug.Assert(System.IO.Path.IsPathRooted filename, sprintf "should be absolute: '%s'" filename) - let lower = String.lowercase filename + let lower = String.lowercase filename // Delay sending errors and warnings until after the file is parsed. This gives us a chance to scrape the // #nowarn declarations for the file @@ -267,19 +264,19 @@ let ParseInput (lexer, errorLogger: ErrorLogger, lexbuf: UnicodeLexing.Lexbuf, d use unwindBP = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse let mutable scopedPragmas = [] - try - let input = - if mlCompatSuffixes |> List.exists (FileSystemUtils.checkSuffix lower) then - mlCompatWarning (FSComp.SR.buildCompilingExtensionIsForML()) rangeStartup + try + let input = + if mlCompatSuffixes |> List.exists (Filename.checkSuffix lower) then + mlCompatWarning (FSComp.SR.buildCompilingExtensionIsForML()) rangeStartup // Call the appropriate parser - for signature files or implementation files - if FSharpImplFileSuffixes |> List.exists (FileSystemUtils.checkSuffix lower) then - let impl = Parser.implementationFile lexer lexbuf + if FSharpImplFileSuffixes |> List.exists (Filename.checkSuffix lower) then + let impl = Parser.implementationFile lexer lexbuf PostParseModuleImpls (defaultNamespace, filename, isLastCompiland, impl) - elif FSharpSigFileSuffixes |> List.exists (FileSystemUtils.checkSuffix lower) then - let intfs = Parser.signatureFile lexer lexbuf + elif FSharpSigFileSuffixes |> List.exists (Filename.checkSuffix lower) then + let intfs = Parser.signatureFile lexer lexbuf PostParseModuleSpecs (defaultNamespace, filename, isLastCompiland, intfs) - else + else delayLogger.Error(Error(FSComp.SR.buildInvalidSourceFileExtension filename, Range.rangeStartup)) scopedPragmas <- GetScopedPragmasForInput input @@ -298,7 +295,7 @@ let ShowAllTokensAndExit (shortFilename, tokenizer: Tokenizer, lexbuf: LexBuffer let t = tokenizer () printf "tokenize - got %s @ %a\n" (Parser.token_to_string t) outputRange lexbuf.LexemeRange match t with - | Parser.EOF _ -> exit 0 + | Parser.EOF _ -> exit 0 | _ -> () if lexbuf.IsPastEndOfStream then printf "!!! at end of stream\n" @@ -312,64 +309,39 @@ let TestInteractionParserAndExit (tokenizer: Tokenizer, lexbuf: LexBuffer) // Report the statistics for testing purposes let ReportParsingStatistics res = - let rec flattenSpecs specs = + let rec flattenSpecs specs = specs |> List.collect (function (SynModuleSigDecl.NestedModule (_, _, subDecls, _)) -> flattenSpecs subDecls | spec -> [spec]) - let rec flattenDefns specs = + let rec flattenDefns specs = specs |> List.collect (function (SynModuleDecl.NestedModule (_, _, subDecls, _, _)) -> flattenDefns subDecls | defn -> [defn]) let flattenModSpec (SynModuleOrNamespaceSig(_, _, _, decls, _, _, _, _)) = flattenSpecs decls let flattenModImpl (SynModuleOrNamespace(_, _, _, decls, _, _, _, _)) = flattenDefns decls - match res with - | ParsedInput.SigFile (ParsedSigFileInput (_, _, _, _, specs)) -> + match res with + | ParsedInput.SigFile (ParsedSigFileInput (_, _, _, _, specs)) -> printfn "parsing yielded %d specs" (List.collect flattenModSpec specs).Length - | ParsedInput.ImplFile (ParsedImplFileInput (modules = impls)) -> + | ParsedInput.ImplFile (ParsedImplFileInput (modules = impls)) -> printfn "parsing yielded %d definitions" (List.collect flattenModImpl impls).Length -let EmptyParsedInput(filename, isLastCompiland) = - let lower = String.lowercase filename - if FSharpSigFileSuffixes |> List.exists (FileSystemUtils.checkSuffix lower) then - ParsedInput.SigFile( - ParsedSigFileInput( - filename, - QualFileNameOfImpls filename [], - [], - [], - [] - ) - ) - else - ParsedInput.ImplFile( - ParsedImplFileInput( - filename, - false, - QualFileNameOfImpls filename [], - [], - [], - [], - isLastCompiland - ) - ) - /// Parse an input, drawing tokens from the LexBuffer let ParseOneInputLexbuf (tcConfig: TcConfig, lexResourceManager, conditionalCompilationDefines, lexbuf, filename, isLastCompiland, errorLogger) = use unwindbuildphase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse - try + try // Don't report whitespace from lexer - let skipWhitespaceTokens = true + let skipWhitespaceTokens = true // Set up the initial status for indentation-aware processing - let lightStatus = LightSyntaxStatus (tcConfig.ComputeLightSyntaxInitialStatus filename, true) - + let lightStatus = LightSyntaxStatus (tcConfig.ComputeLightSyntaxInitialStatus filename, true) + // Set up the initial lexer arguments let lexargs = mkLexargs (conditionalCompilationDefines@tcConfig.conditionalCompilationDefines, lightStatus, lexResourceManager, [], errorLogger, tcConfig.pathMap) // Set up the initial lexer arguments - let shortFilename = SanitizeFileName filename tcConfig.implicitIncludeDir + let shortFilename = SanitizeFileName filename tcConfig.implicitIncludeDir - let input = + let input = Lexhelp.usingLexbufForParsing (lexbuf, filename) (fun lexbuf -> - + // Set up the LexFilter over the token stream let tokenizer,tokenizeOnly = match tcConfig.tokenize with @@ -382,122 +354,64 @@ let ParseOneInputLexbuf (tcConfig: TcConfig, lexResourceManager, conditionalComp ShowAllTokensAndExit(shortFilename, tokenizer, lexbuf) // Test hook for one of the parser entry points - if tcConfig.testInteractionParser then + if tcConfig.testInteractionParser then TestInteractionParserAndExit (tokenizer, lexbuf) // Parse the input let res = ParseInput((fun _ -> tokenizer ()), errorLogger, lexbuf, None, filename, isLastCompiland) // Report the statistics for testing purposes - if tcConfig.reportNumDecls then + if tcConfig.reportNumDecls then ReportParsingStatistics res res ) - input + Some input - with e -> + with e -> errorRecovery e rangeStartup - EmptyParsedInput(filename, isLastCompiland) - + None + let ValidSuffixes = FSharpSigFileSuffixes@FSharpImplFileSuffixes -let checkInputFile (tcConfig: TcConfig) filename = - let lower = String.lowercase filename +/// Parse an input from disk +let ParseOneInputFile (tcConfig: TcConfig, lexResourceManager, conditionalCompilationDefines, filename, isLastCompiland, errorLogger, retryLocked) = + try + let lower = String.lowercase filename - if List.exists (FileSystemUtils.checkSuffix lower) ValidSuffixes then - if not(FileSystem.FileExistsShim filename) then - error(Error(FSComp.SR.buildCouldNotFindSourceFile filename, rangeStartup)) - else - error(Error(FSComp.SR.buildInvalidSourceFileExtension(SanitizeFileName filename tcConfig.implicitIncludeDir), rangeStartup)) + if List.exists (Filename.checkSuffix lower) ValidSuffixes then -let parseInputFileAux (tcConfig: TcConfig, lexResourceManager, conditionalCompilationDefines, filename, isLastCompiland, errorLogger, retryLocked) = - // Get a stream reader for the file - use fileStream = FileSystem.OpenFileForReadShim(filename) - use reader = fileStream.GetReader(tcConfig.inputCodePage, retryLocked) + if not(FileSystem.SafeExists filename) then + error(Error(FSComp.SR.buildCouldNotFindSourceFile filename, rangeStartup)) - // Set up the LexBuffer for the file - let lexbuf = UnicodeLexing.StreamReaderAsLexbuf(not tcConfig.compilingFslib, tcConfig.langVersion.SupportsFeature, reader) + // Get a stream reader for the file + use reader = File.OpenReaderAndRetry (filename, tcConfig.inputCodePage, retryLocked) - // Parse the file drawing tokens from the lexbuf - ParseOneInputLexbuf(tcConfig, lexResourceManager, conditionalCompilationDefines, lexbuf, filename, isLastCompiland, errorLogger) + // Set up the LexBuffer for the file + let lexbuf = UnicodeLexing.StreamReaderAsLexbuf(tcConfig.langVersion.SupportsFeature, reader) -/// Parse an input from disk -let ParseOneInputFile (tcConfig: TcConfig, lexResourceManager, conditionalCompilationDefines, filename, isLastCompiland, errorLogger, retryLocked) = - try - checkInputFile tcConfig filename - parseInputFileAux(tcConfig, lexResourceManager, conditionalCompilationDefines, filename, isLastCompiland, errorLogger, retryLocked) - with e -> - errorRecovery e rangeStartup - EmptyParsedInput(filename, isLastCompiland) - -/// Parse multiple input files from disk -let ParseInputFiles (tcConfig: TcConfig, lexResourceManager, conditionalCompilationDefines, sourceFiles, errorLogger: ErrorLogger, exiter: Exiter, createErrorLogger: (Exiter -> CapturingErrorLogger), retryLocked) = - try - let isLastCompiland, isExe = sourceFiles |> tcConfig.ComputeCanContainEntryPoint - let sourceFiles = isLastCompiland |> List.zip sourceFiles |> Array.ofList - - if tcConfig.concurrentBuild then - let mutable exitCode = 0 - let delayedExiter = - { new Exiter with - member this.Exit n = exitCode <- n; raise StopProcessing } - - // Check input files and create delayed error loggers before we try to parallel parse. - let delayedErrorLoggers = - sourceFiles - |> Array.map (fun (filename, _) -> - checkInputFile tcConfig filename - createErrorLogger(delayedExiter) - ) - - let results = - try - try - sourceFiles - |> ArrayParallel.mapi (fun i (filename, isLastCompiland) -> - let delayedErrorLogger = delayedErrorLoggers.[i] - - let directoryName = Path.GetDirectoryName filename - let input = parseInputFileAux(tcConfig, lexResourceManager, conditionalCompilationDefines, filename, (isLastCompiland, isExe), delayedErrorLogger, retryLocked) - (input, directoryName) - ) - finally - delayedErrorLoggers - |> Array.iter (fun delayedErrorLogger -> - delayedErrorLogger.CommitDelayedDiagnostics errorLogger - ) - with - | StopProcessing -> - exiter.Exit exitCode - - results - |> List.ofArray - else - sourceFiles - |> Array.map (fun (filename, isLastCompiland) -> - let directoryName = Path.GetDirectoryName filename - let input = ParseOneInputFile(tcConfig, lexResourceManager, conditionalCompilationDefines, filename, (isLastCompiland, isExe), errorLogger, retryLocked) - (input, directoryName)) - |> List.ofArray + // Parse the file drawing tokens from the lexbuf + ParseOneInputLexbuf(tcConfig, lexResourceManager, conditionalCompilationDefines, lexbuf, filename, isLastCompiland, errorLogger) + else + error(Error(FSComp.SR.buildInvalidSourceFileExtension(SanitizeFileName filename tcConfig.implicitIncludeDir), rangeStartup)) - with e -> - errorRecoveryNoRange e - exiter.Exit 1 + with e -> + errorRecovery e rangeStartup + None let ProcessMetaCommandsFromInput (nowarnF: 'state -> range * string -> 'state, hashReferenceF: 'state -> range * string * Directive -> 'state, loadSourceF: 'state -> range * string -> unit) - (tcConfig:TcConfigBuilder, - inp: ParsedInput, - pathOfMetaCommandSource, + (tcConfig:TcConfigBuilder, + inp: ParsedInput, + pathOfMetaCommandSource, state0) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse - let canHaveScriptMetaCommands = - match inp with + let canHaveScriptMetaCommands = + match inp with | ParsedInput.SigFile (_) -> false | ParsedInput.ImplFile (ParsedImplFileInput (isScript = isScript)) -> isScript @@ -519,103 +433,103 @@ let ProcessMetaCommandsFromInput let ProcessMetaCommand state hash = let mutable matchedm = range0 - try - match hash with - | ParsedHashDirective("I", ParsedHashDirectiveArguments args, m) -> - if not canHaveScriptMetaCommands then - errorR(HashIncludeNotAllowedInNonScript m) - match args with - | [path] -> - matchedm <- m - tcConfig.AddIncludePath(m, path, pathOfMetaCommandSource) - state - | _ -> - errorR(Error(FSComp.SR.buildInvalidHashIDirective(), m)) - state - | ParsedHashDirective("nowarn", ParsedHashDirectiveArguments numbers,m) -> - List.fold (fun state d -> nowarnF state (m,d)) state numbers - - | ParsedHashDirective(("reference" | "r"), ParsedHashDirectiveArguments args, m) -> + try + match hash with + | ParsedHashDirective("I", args, m) -> + if not canHaveScriptMetaCommands then + errorR(HashIncludeNotAllowedInNonScript m) + match args with + | [path] -> + matchedm <- m + tcConfig.AddIncludePath(m, path, pathOfMetaCommandSource) + state + | _ -> + errorR(Error(FSComp.SR.buildInvalidHashIDirective(), m)) + state + | ParsedHashDirective("nowarn",numbers,m) -> + List.fold (fun state d -> nowarnF state (m,d)) state numbers + + | ParsedHashDirective(("reference" | "r"), args, m) -> matchedm<-m ProcessDependencyManagerDirective Directive.Resolution args m state - | ParsedHashDirective(("i"), ParsedHashDirectiveArguments args, m) -> + | ParsedHashDirective(("i"), args, m) -> matchedm<-m ProcessDependencyManagerDirective Directive.Include args m state - | ParsedHashDirective("load", ParsedHashDirectiveArguments args, m) -> - if not canHaveScriptMetaCommands then - errorR(HashDirectiveNotAllowedInNonScript m) - match args with - | _ :: _ -> - matchedm<-m - args |> List.iter (fun path -> loadSourceF state (m, path)) - | _ -> - errorR(Error(FSComp.SR.buildInvalidHashloadDirective(), m)) - state - | ParsedHashDirective("time", ParsedHashDirectiveArguments args, m) -> - if not canHaveScriptMetaCommands then - errorR(HashDirectiveNotAllowedInNonScript m) - match args with - | [] -> - () - | ["on" | "off"] -> - () - | _ -> - errorR(Error(FSComp.SR.buildInvalidHashtimeDirective(), m)) - state - - | _ -> - - (* warning(Error("This meta-command has been ignored", m)) *) - state + | ParsedHashDirective("load", args, m) -> + if not canHaveScriptMetaCommands then + errorR(HashDirectiveNotAllowedInNonScript m) + match args with + | _ :: _ -> + matchedm<-m + args |> List.iter (fun path -> loadSourceF state (m, path)) + | _ -> + errorR(Error(FSComp.SR.buildInvalidHashloadDirective(), m)) + state + | ParsedHashDirective("time", args, m) -> + if not canHaveScriptMetaCommands then + errorR(HashDirectiveNotAllowedInNonScript m) + match args with + | [] -> + () + | ["on" | "off"] -> + () + | _ -> + errorR(Error(FSComp.SR.buildInvalidHashtimeDirective(), m)) + state + + | _ -> + + (* warning(Error("This meta-command has been ignored", m)) *) + state with e -> errorRecovery e matchedm; state - let rec WarnOnIgnoredSpecDecls decls = - decls |> List.iter (fun d -> - match d with - | SynModuleSigDecl.HashDirective (_, m) -> warning(Error(FSComp.SR.buildDirectivesInModulesAreIgnored(), m)) + let rec WarnOnIgnoredSpecDecls decls = + decls |> List.iter (fun d -> + match d with + | SynModuleSigDecl.HashDirective (_, m) -> warning(Error(FSComp.SR.buildDirectivesInModulesAreIgnored(), m)) | SynModuleSigDecl.NestedModule (_, _, subDecls, _) -> WarnOnIgnoredSpecDecls subDecls | _ -> ()) - let rec WarnOnIgnoredImplDecls decls = - decls |> List.iter (fun d -> - match d with - | SynModuleDecl.HashDirective (_, m) -> warning(Error(FSComp.SR.buildDirectivesInModulesAreIgnored(), m)) + let rec WarnOnIgnoredImplDecls decls = + decls |> List.iter (fun d -> + match d with + | SynModuleDecl.HashDirective (_, m) -> warning(Error(FSComp.SR.buildDirectivesInModulesAreIgnored(), m)) | SynModuleDecl.NestedModule (_, _, subDecls, _, _) -> WarnOnIgnoredImplDecls subDecls | _ -> ()) let ProcessMetaCommandsFromModuleSpec state (SynModuleOrNamespaceSig(_, _, _, decls, _, _, _, _)) = - List.fold (fun s d -> - match d with + List.fold (fun s d -> + match d with | SynModuleSigDecl.HashDirective (h, _) -> ProcessMetaCommand s h | SynModuleSigDecl.NestedModule (_, _, subDecls, _) -> WarnOnIgnoredSpecDecls subDecls; s | _ -> s) state - decls + decls let ProcessMetaCommandsFromModuleImpl state (SynModuleOrNamespace(_, _, _, decls, _, _, _, _)) = - List.fold (fun s d -> - match d with + List.fold (fun s d -> + match d with | SynModuleDecl.HashDirective (h, _) -> ProcessMetaCommand s h | SynModuleDecl.NestedModule (_, _, subDecls, _, _) -> WarnOnIgnoredImplDecls subDecls; s | _ -> s) state decls - match inp with - | ParsedInput.SigFile (ParsedSigFileInput (_, _, _, hashDirectives, specs)) -> + match inp with + | ParsedInput.SigFile (ParsedSigFileInput (_, _, _, hashDirectives, specs)) -> let state = List.fold ProcessMetaCommand state0 hashDirectives let state = List.fold ProcessMetaCommandsFromModuleSpec state specs state - | ParsedInput.ImplFile (ParsedImplFileInput (_, _, _, _, hashDirectives, impls, _)) -> + | ParsedInput.ImplFile (ParsedImplFileInput (_, _, _, _, hashDirectives, impls, _)) -> let state = List.fold ProcessMetaCommand state0 hashDirectives let state = List.fold ProcessMetaCommandsFromModuleImpl state impls state -let ApplyNoWarnsToTcConfig (tcConfig: TcConfig, inp: ParsedInput, pathOfMetaCommandSource) = +let ApplyNoWarnsToTcConfig (tcConfig: TcConfig, inp: ParsedInput, pathOfMetaCommandSource) = // Clone - let tcConfigB = tcConfig.CloneToBuilder() + let tcConfigB = tcConfig.CloneToBuilder() let addNoWarn = fun () (m,s) -> tcConfigB.TurnWarningOff(m, s) let addReference = fun () (_m, _s, _) -> () let addLoadedSource = fun () (_m, _s) -> () @@ -624,10 +538,10 @@ let ApplyNoWarnsToTcConfig (tcConfig: TcConfig, inp: ParsedInput, pathOfMetaComm (tcConfigB, inp, pathOfMetaCommandSource, ()) TcConfig.Create(tcConfigB, validate=false) -let ApplyMetaCommandsFromInputToTcConfig (tcConfig: TcConfig, inp: ParsedInput, pathOfMetaCommandSource, dependencyProvider) = +let ApplyMetaCommandsFromInputToTcConfig (tcConfig: TcConfig, inp: ParsedInput, pathOfMetaCommandSource, dependencyProvider) = // Clone let tcConfigB = tcConfig.CloneToBuilder() - let getWarningNumber = fun () _ -> () + let getWarningNumber = fun () _ -> () let addReferenceDirective = fun () (m, path, directive) -> tcConfigB.AddReferenceDirective(dependencyProvider, m, path, directive) let addLoadedSource = fun () (m,s) -> tcConfigB.AddLoadedSource(m,s,pathOfMetaCommandSource) ProcessMetaCommandsFromInput @@ -636,12 +550,12 @@ let ApplyMetaCommandsFromInputToTcConfig (tcConfig: TcConfig, inp: ParsedInput, TcConfig.Create(tcConfigB, validate=false) /// Build the initial type checking environment -let GetInitialTcEnv (assemblyName: string, initm: range, tcConfig: TcConfig, tcImports: TcImports, tcGlobals) = +let GetInitialTcEnv (assemblyName: string, initm: range, tcConfig: TcConfig, tcImports: TcImports, tcGlobals) = let initm = initm.StartRange - let ccus = - tcImports.GetImportedAssemblies() - |> List.map (fun asm -> asm.FSharpViewOfMetadata, asm.AssemblyAutoOpenAttributes, asm.AssemblyInternalsVisibleToAttributes) + let ccus = + tcImports.GetImportedAssemblies() + |> List.map (fun asm -> asm.FSharpViewOfMetadata, asm.AssemblyAutoOpenAttributes, asm.AssemblyInternalsVisibleToAttributes) let amap = tcImports.GetImportMap() @@ -654,7 +568,7 @@ let GetInitialTcEnv (assemblyName: string, initm: range, tcConfig: TcConfig, tcI tcEnv /// Inject faults into checking -let CheckSimulateException(tcConfig: TcConfig) = +let CheckSimulateException(tcConfig: TcConfig) = match tcConfig.simulateException with | Some("tc-oom") -> raise(System.OutOfMemoryException()) | Some("tc-an") -> raise(System.ArgumentNullException("simulated")) @@ -687,7 +601,7 @@ type RootImpls = Zset let qnameOrder = Order.orderBy (fun (q: QualifiedNameOfFile) -> q.Text) -type TcState = +type TcState = { tcsCcu: CcuThunk tcsCcuType: ModuleOrNamespace @@ -695,8 +609,8 @@ type TcState = tcsTcSigEnv: TcEnv tcsTcImplEnv: TcEnv tcsCreatesGeneratedProvidedTypes: bool - tcsRootSigs: RootSigs - tcsRootImpls: RootImpls + tcsRootSigs: RootSigs + tcsRootImpls: RootImpls tcsCcuSig: ModuleOrNamespaceType } @@ -712,23 +626,23 @@ type TcState = // Assem(a.fsi + b.fsi + c.fsi) (after checking implementation file ) member x.CcuType = x.tcsCcuType - + // a.fsi + b.fsi + c.fsi (after checking implementation file for c.fs) member x.CcuSig = x.tcsCcuSig - - member x.NextStateAfterIncrementalFragment tcEnvAtEndOfLastInput = + + member x.NextStateAfterIncrementalFragment tcEnvAtEndOfLastInput = { x with tcsTcSigEnv = tcEnvAtEndOfLastInput tcsTcImplEnv = tcEnvAtEndOfLastInput } - + /// Create the initial type checking state for compiling an assembly let GetInitialTcState(m, ccuName, tcConfig: TcConfig, tcGlobals, tcImports: TcImports, niceNameGen, tcEnv0) = ignore tcImports - // Create a ccu to hold all the results of compilation + // Create a ccu to hold all the results of compilation let ccuContents = Construct.NewCcuContents ILScopeRef.Local m ccuName (Construct.NewEmptyModuleOrNamespaceType Namespace) - let ccuData: CcuData = + let ccuData: CcuData = { IsFSharp=true UsesFSharp20PlusQuotations=false #if !NO_EXTENSIONTYPING @@ -737,20 +651,19 @@ let GetInitialTcState(m, ccuName, tcConfig: TcConfig, tcGlobals, tcImports: TcIm ImportProvidedType = (fun ty -> Import.ImportProvidedType (tcImports.GetImportMap()) m ty) #endif TryGetILModuleDef = (fun () -> None) - FileName=None + FileName=None Stamp = newStamp() QualifiedName= None - SourceCodeDirectory = tcConfig.implicitIncludeDir + SourceCodeDirectory = tcConfig.implicitIncludeDir ILScopeRef=ILScopeRef.Local Contents=ccuContents MemberSignatureEquality= typeEquivAux EraseAll tcGlobals - TypeForwarders=Map.empty - XmlDocumentationInfo = None } + TypeForwarders=Map.empty } let ccu = CcuThunk.Create(ccuName, ccuData) - // OK, is this is the FSharp.Core CCU then fix it up. - if tcConfig.compilingFslib then + // OK, is this is the FSharp.Core CCU then fix it up. + if tcConfig.compilingFslib then tcGlobals.fslibCcu.Fixup ccu { tcsCcu= ccu @@ -764,47 +677,50 @@ let GetInitialTcState(m, ccuName, tcConfig: TcConfig, tcGlobals, tcImports: TcIm tcsCcuSig = Construct.NewEmptyModuleOrNamespaceType Namespace } /// Typecheck a single file (or interactive entry into F# Interactive) -let TypeCheckOneInput (checkForErrors, tcConfig: TcConfig, tcImports: TcImports, tcGlobals, prefixPathOpt, tcSink, tcState: TcState, inp: ParsedInput, skipImplIfSigExists: bool) = +let TypeCheckOneInputEventually (checkForErrors, tcConfig: TcConfig, tcImports: TcImports, tcGlobals, prefixPathOpt, tcSink, tcState: TcState, inp: ParsedInput, skipImplIfSigExists: bool) = + + eventually { + try + let! ctok = Eventually.token + RequireCompilationThread ctok // Everything here requires the compilation thread since it works on the TAST - cancellable { - try CheckSimulateException tcConfig let m = inp.Range let amap = tcImports.GetImportMap() - match inp with + match inp with | ParsedInput.SigFile (ParsedSigFileInput (_, qualNameOfFile, _, _, _) as file) -> - - // Check if we've seen this top module signature before. - if Zmap.mem qualNameOfFile tcState.tcsRootSigs then + + // Check if we've seen this top module signature before. + if Zmap.mem qualNameOfFile tcState.tcsRootSigs then errorR(Error(FSComp.SR.buildSignatureAlreadySpecified(qualNameOfFile.Text), m.StartRange)) - // Check if the implementation came first in compilation order - if Zset.contains qualNameOfFile tcState.tcsRootImpls then + // Check if the implementation came first in compilation order + if Zset.contains qualNameOfFile tcState.tcsRootImpls then errorR(Error(FSComp.SR.buildImplementationAlreadyGivenDetail(qualNameOfFile.Text), m)) let conditionalDefines = if tcConfig.noConditionalErasure then None else Some (tcConfig.conditionalCompilationDefines) - // Typecheck the signature file - let! (tcEnv, sigFileType, createsGeneratedProvidedTypes) = + // Typecheck the signature file + let! (tcEnv, sigFileType, createsGeneratedProvidedTypes) = TypeCheckOneSigFile (tcGlobals, tcState.tcsNiceNameGen, amap, tcState.tcsCcu, checkForErrors, conditionalDefines, tcSink, tcConfig.internalTestSpanStackReferring) tcState.tcsTcSigEnv file let rootSigs = Zmap.add qualNameOfFile sigFileType tcState.tcsRootSigs // Add the signature to the signature env (unless it had an explicit signature) let ccuSigForFile = CombineCcuContentFragments m [sigFileType; tcState.tcsCcuSig] - - // Open the prefixPath for fsi.exe - let tcEnv = - match prefixPathOpt with - | None -> tcEnv - | Some prefixPath -> + + // Open the prefixPath for fsi.exe + let tcEnv = + match prefixPathOpt with + | None -> tcEnv + | Some prefixPath -> let m = qualNameOfFile.Range TcOpenModuleOrNamespaceDecl tcSink tcGlobals amap m tcEnv (prefixPath, m) - let tcState = - { tcState with + let tcState = + { tcState with tcsTcSigEnv=tcEnv tcsTcImplEnv=tcState.tcsTcImplEnv tcsRootSigs=rootSigs @@ -813,12 +729,12 @@ let TypeCheckOneInput (checkForErrors, tcConfig: TcConfig, tcImports: TcImports, return (tcEnv, EmptyTopAttrs, None, ccuSigForFile), tcState | ParsedInput.ImplFile (ParsedImplFileInput (_, _, qualNameOfFile, _, _, _, _) as file) -> - - // Check if we've got an interface for this fragment + + // Check if we've got an interface for this fragment let rootSigOpt = tcState.tcsRootSigs.TryFind qualNameOfFile - // Check if we've already seen an implementation for this fragment - if Zset.contains qualNameOfFile tcState.tcsRootImpls then + // Check if we've already seen an implementation for this fragment + if Zset.contains qualNameOfFile tcState.tcsRootImpls then errorR(Error(FSComp.SR.buildImplementationAlreadyGiven(qualNameOfFile.Text), m)) let tcImplEnv = tcState.tcsTcImplEnv @@ -828,14 +744,14 @@ let TypeCheckOneInput (checkForErrors, tcConfig: TcConfig, tcImports: TcImports, let hadSig = rootSigOpt.IsSome - // Typecheck the implementation file - let typeCheckOne = + // Typecheck the implementation file + let typeCheckOne = if skipImplIfSigExists && hadSig then let dummyExpr = ModuleOrNamespaceExprWithSig.ModuleOrNamespaceExprWithSig(rootSigOpt.Value, ModuleOrNamespaceExpr.TMDefs [], range.Zero) let dummyImplFile = TypedImplFile.TImplFile(qualNameOfFile, [], dummyExpr, false, false, StampMap []) (EmptyTopAttrs, dummyImplFile, Unchecked.defaultof<_>, tcImplEnv, false) - |> Cancellable.ret + |> Eventually.Done else TypeCheckOneImplFile (tcGlobals, tcState.tcsNiceNameGen, amap, tcState.tcsCcu, checkForErrors, conditionalDefines, tcSink, tcConfig.internalTestSpanStackReferring) tcImplEnv rootSigOpt file @@ -844,89 +760,88 @@ let TypeCheckOneInput (checkForErrors, tcConfig: TcConfig, tcImports: TcImports, let implFileSigType = SigTypeOfImplFile implFile let rootImpls = Zset.add qualNameOfFile tcState.tcsRootImpls - - // Only add it to the environment if it didn't have a signature + + // Only add it to the environment if it didn't have a signature let m = qualNameOfFile.Range // Add the implementation as to the implementation env let tcImplEnv = AddLocalRootModuleOrNamespace TcResultsSink.NoSink tcGlobals amap m tcImplEnv implFileSigType // Add the implementation as to the signature env (unless it had an explicit signature) - let tcSigEnv = - if hadSig then tcState.tcsTcSigEnv + let tcSigEnv = + if hadSig then tcState.tcsTcSigEnv else AddLocalRootModuleOrNamespace TcResultsSink.NoSink tcGlobals amap m tcState.tcsTcSigEnv implFileSigType - + // Open the prefixPath for fsi.exe (tcImplEnv) - let tcImplEnv = - match prefixPathOpt with + let tcImplEnv = + match prefixPathOpt with | Some prefixPath -> TcOpenModuleOrNamespaceDecl tcSink tcGlobals amap m tcImplEnv (prefixPath, m) - | _ -> tcImplEnv + | _ -> tcImplEnv // Open the prefixPath for fsi.exe (tcSigEnv) - let tcSigEnv = - match prefixPathOpt with + let tcSigEnv = + match prefixPathOpt with | Some prefixPath when not hadSig -> TcOpenModuleOrNamespaceDecl tcSink tcGlobals amap m tcSigEnv (prefixPath, m) - | _ -> tcSigEnv + | _ -> tcSigEnv + + let ccuSig = CombineCcuContentFragments m [implFileSigType; tcState.tcsCcuSig ] let ccuSigForFile = CombineCcuContentFragments m [implFileSigType; tcState.tcsCcuSig] - let tcState = - { tcState with + let tcState = + { tcState with tcsTcSigEnv=tcSigEnv tcsTcImplEnv=tcImplEnv tcsRootImpls=rootImpls - tcsCcuSig=ccuSigForFile + tcsCcuSig=ccuSig tcsCreatesGeneratedProvidedTypes=tcState.tcsCreatesGeneratedProvidedTypes || createsGeneratedProvidedTypes } return (tcEnvAtEnd, topAttrs, Some implFile, ccuSigForFile), tcState - - with e -> - errorRecovery e range0 + + with e -> + errorRecovery e range0 return (tcState.TcEnvFromSignatures, EmptyTopAttrs, None, tcState.tcsCcuSig), tcState } /// Typecheck a single file (or interactive entry into F# Interactive) -let TypeCheckOneInputEntry (ctok, checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt) tcState inp = +let TypeCheckOneInput (ctok, checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt) tcState inp = // 'use' ensures that the warning handler is restored at the end use unwindEL = PushErrorLoggerPhaseUntilUnwind(fun oldLogger -> GetErrorLoggerFilteringByScopedPragmas(false, GetScopedPragmasForInput inp, oldLogger) ) use unwindBP = PushThreadBuildPhaseUntilUnwind BuildPhase.TypeCheck - - RequireCompilationThread ctok - TypeCheckOneInput (checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, TcResultsSink.NoSink, tcState, inp, false) - |> Cancellable.runWithoutCancellation + TypeCheckOneInputEventually (checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, TcResultsSink.NoSink, tcState, inp, false) + |> Eventually.force ctok /// Finish checking multiple files (or one interactive entry into F# Interactive) let TypeCheckMultipleInputsFinish(results, tcState: TcState) = let tcEnvsAtEndFile, topAttrs, implFiles, ccuSigsForFiles = List.unzip4 results let topAttrs = List.foldBack CombineTopAttrs topAttrs EmptyTopAttrs let implFiles = List.choose id implFiles - // This is the environment required by fsi.exe when incrementally adding definitions + // This is the environment required by fsi.exe when incrementally adding definitions let tcEnvAtEndOfLastFile = (match tcEnvsAtEndFile with h :: _ -> h | _ -> tcState.TcEnvFromSignatures) (tcEnvAtEndOfLastFile, topAttrs, implFiles, ccuSigsForFiles), tcState -let TypeCheckOneInputAndFinish(checkForErrors, tcConfig: TcConfig, tcImports, tcGlobals, prefixPathOpt, tcSink, tcState, input) = - cancellable { +let TypeCheckOneInputAndFinishEventually(checkForErrors, tcConfig: TcConfig, tcImports, tcGlobals, prefixPathOpt, tcSink, tcState, input) = + eventually { Logger.LogBlockStart LogCompilerFunctionId.CompileOps_TypeCheckOneInputAndFinishEventually - let! results, tcState = TypeCheckOneInput(checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcSink, tcState, input, false) + let! results, tcState = TypeCheckOneInputEventually(checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcSink, tcState, input, false) let result = TypeCheckMultipleInputsFinish([results], tcState) Logger.LogBlockStop LogCompilerFunctionId.CompileOps_TypeCheckOneInputAndFinishEventually return result } let TypeCheckClosedInputSetFinish (declaredImpls: TypedImplFile list, tcState) = - // Latest contents to the CCU - let ccuContents = Construct.NewCcuContents ILScopeRef.Local range0 tcState.tcsCcu.AssemblyName tcState.tcsCcuSig + // Publish the latest contents to the CCU + tcState.tcsCcu.Deref.Contents <- Construct.NewCcuContents ILScopeRef.Local range0 tcState.tcsCcu.AssemblyName tcState.tcsCcuSig - // Check all interfaces have implementations - tcState.tcsRootSigs |> Zmap.iter (fun qualNameOfFile _ -> - if not (Zset.contains qualNameOfFile tcState.tcsRootImpls) then + // Check all interfaces have implementations + tcState.tcsRootSigs |> Zmap.iter (fun qualNameOfFile _ -> + if not (Zset.contains qualNameOfFile tcState.tcsRootImpls) then errorR(Error(FSComp.SR.buildSignatureWithoutImplementation(qualNameOfFile.Text), qualNameOfFile.Range))) - tcState, declaredImpls, ccuContents - + tcState, declaredImpls + let TypeCheckClosedInputSet (ctok, checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcState, inputs) = - // tcEnvAtEndOfLastFile is the environment required by fsi.exe when incrementally adding definitions - let results, tcState = (tcState, inputs) ||> List.mapFold (TypeCheckOneInputEntry (ctok, checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt)) + // tcEnvAtEndOfLastFile is the environment required by fsi.exe when incrementally adding definitions + let results, tcState = (tcState, inputs) ||> List.mapFold (TypeCheckOneInput (ctok, checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt)) let (tcEnvAtEndOfLastFile, topAttrs, implFiles, _), tcState = TypeCheckMultipleInputsFinish(results, tcState) - let tcState, declaredImpls, ccuContents = TypeCheckClosedInputSetFinish (implFiles, tcState) - tcState.Ccu.Deref.Contents <- ccuContents + let tcState, declaredImpls = TypeCheckClosedInputSetFinish (implFiles, tcState) tcState, topAttrs, declaredImpls, tcEnvAtEndOfLastFile diff --git a/src/fsharp/ParseAndCheckInputs.fsi b/src/fsharp/ParseAndCheckInputs.fsi index 207d41c878b..d211bfa0907 100644 --- a/src/fsharp/ParseAndCheckInputs.fsi +++ b/src/fsharp/ParseAndCheckInputs.fsi @@ -3,19 +3,19 @@ /// Contains logic to coordinate the parsing and checking of one or a group of files module internal FSharp.Compiler.ParseAndCheckInputs -open Internal.Utilities.Library +open FSharp.Compiler +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CheckExpressions open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerImports -open FSharp.Compiler.DependencyManager open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Syntax -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.TypedTree -open FSharp.Compiler.UnicodeLexing +open FSharp.Compiler.TcGlobals +open Microsoft.DotNet.DependencyManager val IsScript: string -> bool @@ -30,7 +30,7 @@ type ModuleNamesDict = Map> val DeduplicateParsedInputModuleName: ModuleNamesDict -> ParsedInput -> ParsedInput * ModuleNamesDict /// Parse a single input (A signature file or implementation file) -val ParseInput: (Lexbuf -> Parser.token) * ErrorLogger * Lexbuf * string option * string * isLastCompiland:(bool * bool) -> ParsedInput +val ParseInput: (UnicodeLexing.Lexbuf -> Parser.token) * ErrorLogger * UnicodeLexing.Lexbuf * string option * string * isLastCompiland:(bool * bool) -> ParsedInput /// A general routine to process hash directives val ProcessMetaCommandsFromInput : @@ -47,10 +47,7 @@ val ApplyMetaCommandsFromInputToTcConfig: TcConfig * ParsedInput * string * Depe val ApplyNoWarnsToTcConfig: TcConfig * ParsedInput * string -> TcConfig /// Parse one input file -val ParseOneInputFile: TcConfig * Lexhelp.LexResourceManager * conditionalCompilationDefines: string list * string * isLastCompiland: (bool * bool) * ErrorLogger * retryLocked: bool -> ParsedInput - -/// Parse multiple input files from disk -val ParseInputFiles: TcConfig * Lexhelp.LexResourceManager * conditionalCompilationDefines: string list * string list * ErrorLogger * Exiter * createErrorLogger: (Exiter -> CapturingErrorLogger) * retryLocked: bool -> (ParsedInput * string) list +val ParseOneInputFile: TcConfig * Lexhelp.LexResourceManager * string list * string * isLastCompiland: (bool * bool) * ErrorLogger * (*retryLocked*) bool -> ParsedInput option /// Get the initial type checking environment including the loading of mscorlib/System.Core, FSharp.Core /// applying the InternalsVisibleTo in referenced assemblies and opening 'Checked' if requested. @@ -83,7 +80,7 @@ val GetInitialTcState: range * string * TcConfig * TcGlobals * TcImports * NiceNameGenerator * TcEnv -> TcState /// Check one input, returned as an Eventually computation -val TypeCheckOneInput: +val TypeCheckOneInputEventually : checkForErrors:(unit -> bool) * TcConfig * TcImports * @@ -93,7 +90,7 @@ val TypeCheckOneInput: TcState * ParsedInput * skipImplIfSigExists: bool - -> Cancellable<(TcEnv * TopAttribs * TypedImplFile option * ModuleOrNamespaceType) * TcState> + -> Eventually<(TcEnv * TopAttribs * TypedImplFile option * ModuleOrNamespaceType) * TcState> /// Finish the checking of multiple inputs val TypeCheckMultipleInputsFinish: (TcEnv * TopAttribs * 'T option * 'U) list * TcState -> (TcEnv * TopAttribs * 'T list * 'U list) * TcState @@ -102,7 +99,7 @@ val TypeCheckMultipleInputsFinish: (TcEnv * TopAttribs * 'T option * 'U) list * val TypeCheckClosedInputSetFinish: TypedImplFile list * TcState - -> TcState * TypedImplFile list * ModuleOrNamespace + -> TcState * TypedImplFile list /// Check a closed set of inputs val TypeCheckClosedInputSet: @@ -116,7 +113,7 @@ val TypeCheckClosedInputSet: -> TcState * TopAttribs * TypedImplFile list * TcEnv /// Check a single input and finish the checking -val TypeCheckOneInputAndFinish : +val TypeCheckOneInputAndFinishEventually : checkForErrors: (unit -> bool) * TcConfig * TcImports * @@ -125,7 +122,7 @@ val TypeCheckOneInputAndFinish : NameResolution.TcResultsSink * TcState * ParsedInput - -> Cancellable<(TcEnv * TopAttribs * TypedImplFile list * ModuleOrNamespaceType list) * TcState> + -> Eventually<(TcEnv * TopAttribs * TypedImplFile list * ModuleOrNamespaceType list) * TcState> val GetScopedPragmasForInput: input: ParsedInput -> ScopedPragma list @@ -133,13 +130,8 @@ val ParseOneInputLexbuf: tcConfig: TcConfig * lexResourceManager: Lexhelp.LexResourceManager * conditionalCompilationDefines: string list * - lexbuf: Lexbuf * + lexbuf: UnicodeLexing.Lexbuf * filename: string * isLastCompiland: (bool * bool) * errorLogger: ErrorLogger - -> ParsedInput - -val EmptyParsedInput: - filename: string * - isLastCompiland: (bool * bool) - -> ParsedInput + -> ParsedInput option diff --git a/src/fsharp/ParseHelpers.fs b/src/fsharp/ParseHelpers.fs index 35a10a0b1f9..0d283e7f957 100644 --- a/src/fsharp/ParseHelpers.fs +++ b/src/fsharp/ParseHelpers.fs @@ -1,16 +1,14 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module FSharp.Compiler.ParseHelpers +module public FSharp.Compiler.ParseHelpers open FSharp.Compiler.AbstractIL open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features +open FSharp.Compiler.Range open FSharp.Compiler.SyntaxTreeOps open FSharp.Compiler.UnicodeLexing -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Position -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Xml +open FSharp.Compiler.XmlDoc open Internal.Utilities.Text.Lexing open Internal.Utilities.Text.Parsing @@ -38,35 +36,35 @@ let warningStringOfPos (p: pos) = //------------------------------------------------------------------------ /// Get an F# compiler position from a lexer position -let posOfLexPosition (p: Position) = +let internal posOfLexPosition (p: Position) = mkPos p.Line p.Column /// Get an F# compiler range from a lexer range -let mkSynRange (p1: Position) (p2: Position) = +let internal mkSynRange (p1: Position) (p2: Position) = mkFileIndexRange p1.FileIndex (posOfLexPosition p1) (posOfLexPosition p2) type LexBuffer<'Char> with - member lexbuf.LexemeRange = mkSynRange lexbuf.StartPos lexbuf.EndPos + member internal lexbuf.LexemeRange = mkSynRange lexbuf.StartPos lexbuf.EndPos /// Get the range corresponding to the result of a grammar rule while it is being reduced -let lhs (parseState: IParseState) = +let internal lhs (parseState: IParseState) = let p1 = parseState.ResultStartPosition let p2 = parseState.ResultEndPosition mkSynRange p1 p2 /// Get the range covering two of the r.h.s. symbols of a grammar rule while it is being reduced -let rhs2 (parseState: IParseState) i j = +let internal rhs2 (parseState: IParseState) i j = let p1 = parseState.InputStartPosition i let p2 = parseState.InputEndPosition j mkSynRange p1 p2 /// Get the range corresponding to one of the r.h.s. symbols of a grammar rule while it is being reduced -let rhs parseState i = rhs2 parseState i i +let internal rhs parseState i = rhs2 parseState i i type IParseState with /// Get the generator used for compiler-generated argument names. - member x.SynArgNameGenerator = + member internal x.SynArgNameGenerator = let key = "SynArgNameGenerator" let bls = x.LexBuffer.BufferLocalStore let gen = @@ -79,7 +77,7 @@ type IParseState with gen :?> SynArgNameGenerator /// Reset the generator used for compiler-generated argument names. - member x.ResetSynArgNameGenerator() = x.SynArgNameGenerator.Reset() + member internal x.ResetSynArgNameGenerator() = x.SynArgNameGenerator.Reset() //------------------------------------------------------------------------ // Parsing: grabbing XmlDoc @@ -91,11 +89,11 @@ module LexbufLocalXmlDocStore = // The key into the BufferLocalStore used to hold the current accumulated XmlDoc lines let private xmlDocKey = "XmlDoc" - let ClearXmlDoc (lexbuf: Lexbuf) = + let internal ClearXmlDoc (lexbuf: Lexbuf) = lexbuf.BufferLocalStore.[xmlDocKey] <- box (XmlDocCollector()) /// Called from the lexer to save a single line of XML doc comment. - let SaveXmlDocLine (lexbuf: Lexbuf, lineText, range: range) = + let internal SaveXmlDocLine (lexbuf: Lexbuf, lineText, range: range) = let collector = match lexbuf.BufferLocalStore.TryGetValue xmlDocKey with | true, collector -> collector @@ -108,7 +106,7 @@ module LexbufLocalXmlDocStore = /// Called from the parser each time we parse a construct that marks the end of an XML doc comment range, /// e.g. a 'type' declaration. The markerRange is the range of the keyword that delimits the construct. - let GrabXmlDocBeforeMarker (lexbuf: Lexbuf, markerRange: range) = + let internal GrabXmlDocBeforeMarker (lexbuf: Lexbuf, markerRange: range) = match lexbuf.BufferLocalStore.TryGetValue xmlDocKey with | true, collector -> let collector = unbox(collector) @@ -220,7 +218,7 @@ and LexCont = LexerContinuation // Parse IL assembly code //------------------------------------------------------------------------ -let ParseAssemblyCodeInstructions s reportLibraryOnlyFeatures (isFeatureSupported: LanguageFeature -> bool) m : IL.ILInstr[] = +let internal internalParseAssemblyCodeInstructions s (isFeatureSupported: LanguageFeature -> bool) m : IL.ILInstr[] = #if NO_INLINE_IL_PARSER ignore s ignore isFeatureSupported @@ -229,28 +227,38 @@ let ParseAssemblyCodeInstructions s reportLibraryOnlyFeatures (isFeatureSupporte [| |] #else try - FSharp.Compiler.AbstractIL.AsciiParser.ilInstrs - FSharp.Compiler.AbstractIL.AsciiLexer.token - (UnicodeLexing.StringAsLexbuf(reportLibraryOnlyFeatures, isFeatureSupported, s)) + FSharp.Compiler.AbstractIL.Internal.AsciiParser.ilInstrs + FSharp.Compiler.AbstractIL.Internal.AsciiLexer.token + (UnicodeLexing.StringAsLexbuf(isFeatureSupported, s)) with _ -> errorR(Error(FSComp.SR.astParseEmbeddedILError(), m)); [||] #endif -let ParseAssemblyCodeType s reportLibraryOnlyFeatures (isFeatureSupported: Features.LanguageFeature -> bool) m = +let ParseAssemblyCodeInstructions s m : IL.ILInstr[] = + // Public API can not answer the isFeatureSupported questions, so here we support everything + let isFeatureSupported (_featureId:LanguageFeature) = true + internalParseAssemblyCodeInstructions s isFeatureSupported m + +let internal internalParseAssemblyCodeType s (isFeatureSupported: Features.LanguageFeature -> bool) m = ignore s ignore isFeatureSupported #if NO_INLINE_IL_PARSER errorR(Error((193, "Inline IL not valid in a hosted environment"), m)) - IL.PrimaryAssemblyILGlobals.typ_Object + IL.EcmaMscorlibILGlobals.typ_Object #else let isFeatureSupported (_featureId:LanguageFeature) = true try - FSharp.Compiler.AbstractIL.AsciiParser.ilType - FSharp.Compiler.AbstractIL.AsciiLexer.token - (UnicodeLexing.StringAsLexbuf(reportLibraryOnlyFeatures, isFeatureSupported, s)) + FSharp.Compiler.AbstractIL.Internal.AsciiParser.ilType + FSharp.Compiler.AbstractIL.Internal.AsciiLexer.token + (UnicodeLexing.StringAsLexbuf(isFeatureSupported, s)) with RecoverableParseError -> errorR(Error(FSComp.SR.astParseEmbeddedILTypeError(), m)); - IL.PrimaryAssemblyILGlobals.typ_Object + IL.EcmaMscorlibILGlobals.typ_Object #endif +/// Helper for parsing the inline IL fragments. +let ParseAssemblyCodeType s m = + // Public API can not answer the isFeatureSupported questions, so here we support everything + let isFeatureSupported (_featureId:LanguageFeature) = true + internalParseAssemblyCodeType s isFeatureSupported m diff --git a/src/fsharp/ParseHelpers.fsi b/src/fsharp/ParseHelpers.fsi index 716246338a2..b2fd5fb832c 100644 --- a/src/fsharp/ParseHelpers.fsi +++ b/src/fsharp/ParseHelpers.fsi @@ -1,10 +1,10 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.ParseHelpers +module public FSharp.Compiler.ParseHelpers +open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.Text -open FSharp.Compiler.Xml +open FSharp.Compiler.Range open Internal.Utilities.Text.Lexing open Internal.Utilities.Text.Parsing @@ -21,30 +21,28 @@ val warningStringOfCoords: line:int -> column:int -> string val warningStringOfPos: p:pos -> string -val posOfLexPosition: p:Position -> pos +val internal posOfLexPosition: p:Position -> pos -val mkSynRange: p1:Position -> p2:Position -> range +val internal mkSynRange: p1:Position -> p2:Position -> range -type LexBuffer<'Char> with - member LexemeRange: range +type internal LexBuffer<'Char> with + member internal LexemeRange: range -val lhs: parseState:IParseState -> range +val internal lhs: parseState:IParseState -> range -val rhs2: parseState:IParseState -> i:int -> j:int -> range +val internal rhs2: parseState:IParseState -> i:int -> j:int -> range -val rhs: parseState:IParseState -> i:int -> range +val internal rhs: parseState:IParseState -> i:int -> range -type IParseState with - member SynArgNameGenerator: SyntaxTreeOps.SynArgNameGenerator - member ResetSynArgNameGenerator: unit -> unit +type internal IParseState with + member internal SynArgNameGenerator: SyntaxTreeOps.SynArgNameGenerator + member internal ResetSynArgNameGenerator: unit -> unit module LexbufLocalXmlDocStore = - - val ClearXmlDoc: lexbuf:UnicodeLexing.Lexbuf -> unit - - val SaveXmlDocLine: lexbuf:UnicodeLexing.Lexbuf * lineText:string * range:range -> unit - - val GrabXmlDocBeforeMarker: lexbuf:UnicodeLexing.Lexbuf * markerRange:range -> PreXmlDoc + val private xmlDocKey: string + val internal ClearXmlDoc: lexbuf:UnicodeLexing.Lexbuf -> unit + val internal SaveXmlDocLine: lexbuf:UnicodeLexing.Lexbuf * lineText:string * range:range -> unit + val internal GrabXmlDocBeforeMarker: lexbuf:UnicodeLexing.Lexbuf * markerRange:range -> XmlDoc.PreXmlDoc type LexerIfdefStackEntry = | IfDefIf @@ -77,13 +75,9 @@ type LexerStringKind = { IsByteString: bool IsInterpolated: bool IsInterpolatedFirst: bool } - static member ByteString: LexerStringKind - static member InterpolatedStringFirst: LexerStringKind - static member InterpolatedStringPart: LexerStringKind - static member String: LexerStringKind type LexerInterpolatedStringNesting = @@ -108,6 +102,8 @@ type LexerContinuation = and LexCont = LexerContinuation -val ParseAssemblyCodeInstructions: s:string -> reportLibraryOnlyFeatures: bool -> isFeatureSupported:(Features.LanguageFeature -> bool) -> m:range -> ILInstr[] +val internal internalParseAssemblyCodeInstructions: s:string -> isFeatureSupported:(Features.LanguageFeature -> bool) -> m:range -> ILInstr[] + +val ParseAssemblyCodeInstructions: s:string -> m:range -> ILInstr array val internal internalParseAssemblyCodeType: s:string -> isFeatureSupported:(Features.LanguageFeature -> bool) -> m:range -> ILType -val ParseAssemblyCodeType: s:string -> reportLibraryOnlyFeatures: bool -> isFeatureSupported:(Features.LanguageFeature -> bool) -> m:range -> ILType +val ParseAssemblyCodeType: s:string -> m:range -> ILType diff --git a/src/fsharp/PatternMatchCompilation.fs b/src/fsharp/PatternMatchCompilation.fs index 403995686d9..fd717f43acb 100644 --- a/src/fsharp/PatternMatchCompilation.fs +++ b/src/fsharp/PatternMatchCompilation.fs @@ -3,22 +3,20 @@ module internal FSharp.Compiler.PatternMatchCompilation open System.Collections.Generic -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.ErrorLogger open FSharp.Compiler.InfoReader +open FSharp.Compiler.Lib open FSharp.Compiler.MethodCalls -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps @@ -43,7 +41,7 @@ type Pattern = | TPat_as of Pattern * PatternValBinding * range (* note: can be replaced by TPat_var, i.e. equals TPat_conjs([TPat_var; pat]) *) | TPat_disjs of Pattern list * range | TPat_conjs of Pattern list * range - | TPat_query of (Expr * TType list * bool * (ValRef * TypeInst) option * int * ActivePatternInfo) * Pattern * range + | 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 TupInfo * Pattern list * TType list * range @@ -51,7 +49,7 @@ type Pattern = | TPat_recd of TyconRef * TypeInst * Pattern list * range | TPat_range of char * char * range | TPat_null of range - | TPat_isinst of TType * TType * Pattern option * range + | TPat_isinst of TType * TType * PatternValBinding option * range | TPat_error of range member this.Range = @@ -363,10 +361,10 @@ let ShowCounterExample g denv m refuted = match refutations with | [] -> raise CannotRefute | (r, eck) :: t -> - if verbose then dprintf "r = %s (enumCoversKnownValue = %b)\n" (LayoutRender.showL (exprL r)) eck + if verbose then dprintf "r = %s (enumCoversKnownValue = %b)\n" (Layout.showL (exprL r)) eck List.fold (fun (rAcc, eckAcc) (r, eck) -> CombineRefutations g rAcc r, eckAcc || eck) (r, eck) t - let text = LayoutRender.showL (NicePrint.dataExprL denv counterExample) + let text = Layout.showL (NicePrint.dataExprL denv counterExample) let failingWhenClause = refuted |> List.exists (function RefutedWhenClause -> true | _ -> false) Some(text, failingWhenClause, enumCoversKnown) @@ -428,8 +426,8 @@ let getDiscrimOfPattern (g: TcGlobals) tpinst t = Some(DecisionTreeTest.UnionCase (c, instTypes tpinst tyargs')) | TPat_array (args, ty, _m) -> Some(DecisionTreeTest.ArrayLength (args.Length, ty)) - | TPat_query ((activePatExpr, resTys, isStructRetTy, apatVrefOpt, idx, apinfo), _, _m) -> - Some (DecisionTreeTest.ActivePatternCase (activePatExpr, instTypes tpinst resTys, isStructRetTy, apatVrefOpt, idx, apinfo)) + | TPat_query ((activePatExpr, resTys, apatVrefOpt, idx, apinfo), _, _m) -> + Some (DecisionTreeTest.ActivePatternCase (activePatExpr, instTypes tpinst resTys, apatVrefOpt, idx, apinfo)) | TPat_error range -> Some (DecisionTreeTest.Error range) @@ -451,7 +449,7 @@ let discrimsEq (g: TcGlobals) d1 d2 = | DecisionTreeTest.Const c1, DecisionTreeTest.Const c2 -> (c1=c2) | DecisionTreeTest.IsNull, DecisionTreeTest.IsNull -> true | DecisionTreeTest.IsInst (srcty1, tgty1), DecisionTreeTest.IsInst (srcty2, tgty2) -> typeEquiv g srcty1 srcty2 && typeEquiv g tgty1 tgty2 - | DecisionTreeTest.ActivePatternCase (_, _, _, vrefOpt1, n1, _), DecisionTreeTest.ActivePatternCase (_, _, _, vrefOpt2, n2, _) -> + | DecisionTreeTest.ActivePatternCase (_, _, vrefOpt1, n1, _), DecisionTreeTest.ActivePatternCase (_, _, vrefOpt2, n2, _) -> match vrefOpt1, vrefOpt2 with | Some (vref1, tinst1), Some (vref2, tinst2) -> valRefEq g vref1 vref2 && n1 = n2 && not (doesActivePatternHaveFreeTypars g vref1) && List.lengthsEqAndForall2 (typeEquiv g) tinst1 tinst2 | _ -> false (* for equality purposes these are considered unequal! This is because adhoc computed patterns have no identity. *) @@ -491,12 +489,13 @@ let canCompactConstantClass c = /// Can two discriminators in a 'column' be decided simultaneously? let discrimsHaveSameSimultaneousClass g d1 d2 = match d1, d2 with - | DecisionTreeTest.Const _, DecisionTreeTest.Const _ - | DecisionTreeTest.IsNull, DecisionTreeTest.IsNull - | DecisionTreeTest.ArrayLength _, DecisionTreeTest.ArrayLength _ - | DecisionTreeTest.UnionCase _, DecisionTreeTest.UnionCase _ -> true + | DecisionTreeTest.Const _, DecisionTreeTest.Const _ + | DecisionTreeTest.IsNull, DecisionTreeTest.IsNull + | DecisionTreeTest.ArrayLength _, DecisionTreeTest.ArrayLength _ + | DecisionTreeTest.UnionCase _, DecisionTreeTest.UnionCase _ -> true + | DecisionTreeTest.IsInst _, DecisionTreeTest.IsInst _ -> false - | DecisionTreeTest.ActivePatternCase (_, _, _, apatVrefOpt1, _, _), DecisionTreeTest.ActivePatternCase (_, _, _, apatVrefOpt2, _, _) -> + | DecisionTreeTest.ActivePatternCase (_, _, apatVrefOpt1, _, _), DecisionTreeTest.ActivePatternCase (_, _, apatVrefOpt2, _, _) -> match apatVrefOpt1, apatVrefOpt2 with | Some (vref1, tinst1), Some (vref2, tinst2) -> valRefEq g vref1 vref2 && not (doesActivePatternHaveFreeTypars g vref1) && List.lengthsEqAndForall2 (typeEquiv g) tinst1 tinst2 | _ -> false (* for equality purposes these are considered different classes of discriminators! This is because adhoc computed patterns have no identity! *) @@ -680,20 +679,20 @@ let rec BuildSwitch inpExprOpt g expr edges dflt m = #if DEBUG let rec layoutPat pat = match pat with - | TPat_query (_, pat, _) -> Layout.(--) (Layout.wordL (TaggedText.tagText "query")) (layoutPat pat) - | TPat_wild _ -> Layout.wordL (TaggedText.tagText "wild") - | TPat_as _ -> Layout.wordL (TaggedText.tagText "var") + | TPat_query (_, pat, _) -> Layout.(--) (Layout.wordL (Layout.TaggedTextOps.tagText "query")) (layoutPat pat) + | TPat_wild _ -> Layout.wordL (Layout.TaggedTextOps.tagText "wild") + | TPat_as _ -> Layout.wordL (Layout.TaggedTextOps.tagText "var") | TPat_tuple (_, pats, _, _) | TPat_array (pats, _, _) -> Layout.bracketL (Layout.tupleL (List.map layoutPat pats)) - | _ -> Layout.wordL (TaggedText.tagText "?") + | _ -> Layout.wordL (Layout.TaggedTextOps.tagText "?") -let layoutPath _p = Layout.wordL (TaggedText.tagText "") +let layoutPath _p = Layout.wordL (Layout.TaggedTextOps.tagText "") let layoutActive (Active (path, _subexpr, pat)) = - Layout.(--) (Layout.wordL (TaggedText.tagText "Active")) (Layout.tupleL [layoutPath path; layoutPat pat]) + Layout.(--) (Layout.wordL (Layout.TaggedTextOps.tagText "Active")) (Layout.tupleL [layoutPath path; layoutPat pat]) let layoutFrontier (Frontier (i, actives, _)) = - Layout.(--) (Layout.wordL (TaggedText.tagText "Frontier ")) (Layout.tupleL [intL i; Layout.listL layoutActive actives]) + Layout.(--) (Layout.wordL (Layout.TaggedTextOps.tagText "Frontier ")) (Layout.tupleL [intL i; Layout.listL layoutActive actives]) #endif let mkFrontiers investigations i = @@ -704,7 +703,7 @@ let getRuleIndex (Frontier (i, _active, _valMap)) = i /// Is a pattern a partial pattern? let rec isPatternPartial p = match p with - | TPat_query ((_, _, _, _, _, apinfo), p, _m) -> not apinfo.IsTotal || isPatternPartial p + | TPat_query ((_, _, _, _, apinfo), p, _m) -> not apinfo.IsTotal || isPatternPartial p | TPat_const _ -> false | TPat_wild _ -> false | TPat_as (p, _, _) -> isPatternPartial p @@ -719,8 +718,8 @@ let rec isPatternPartial p = let rec erasePartialPatterns inpp = match inpp with - | TPat_query ((expr, resTys, isStructRetTy, apatVrefOpt, idx, apinfo), p, m) -> - if apinfo.IsTotal then TPat_query ((expr, resTys, isStructRetTy, apatVrefOpt, idx, apinfo), erasePartialPatterns p, m) + | TPat_query ((expr, resTys, apatVrefOpt, idx, apinfo), p, m) -> + if apinfo.IsTotal then TPat_query ((expr, resTys, apatVrefOpt, idx, apinfo), erasePartialPatterns p, m) else TPat_disjs ([], m) (* always fail *) | TPat_as (p, x, m) -> TPat_as (erasePartialPatterns p, x, m) | TPat_disjs (ps, m) -> TPat_disjs(erasePartials ps, m) @@ -761,7 +760,7 @@ let CompilePatternBasic // Add the targets to a match builder. // Note the input expression has already been evaluated and saved into a variable, // hence no need for a new sequence point. - let matchBuilder = MatchBuilder (DebugPointAtBinding.NoneAtInvisible, exprm) + let matchBuilder = MatchBuilder (NoDebugPointAtInvisibleBinding, exprm) typedClauses |> List.iter (fun c -> matchBuilder.AddTarget c.Target |> ignore) // Add the incomplete or rethrow match clause on demand, @@ -1040,27 +1039,17 @@ let CompilePatternBasic #endif // Active pattern matches: create a variable to hold the results of executing the active pattern. - // If a struct return we continue with an expression for taking the address of that location. - | (EdgeDiscrim(_, (DecisionTreeTest.ActivePatternCase(activePatExpr, resTys, isStructRetTy, _apatVrefOpt, _, apinfo)), m) :: _) -> + | (EdgeDiscrim(_, (DecisionTreeTest.ActivePatternCase(activePatExpr, resTys, _, _, apinfo)), m) :: _) -> if not (isNil origInputValTypars) then error(InternalError("Unexpected generalized type variables when compiling an active pattern", m)) - - let resTy = apinfo.ResultType g m resTys isStructRetTy + let resTy = apinfo.ResultType g m resTys + let v, vExpr = mkCompGenLocal m ("activePatternResult" + string (newUnique())) resTy + if origInputVal.IsMemberOrModuleBinding then + AdjustValToTopVal v origInputVal.DeclaringEntity ValReprInfo.emptyValData let argExpr = GetSubExprOfInput subexpr let appExpr = mkApps g ((activePatExpr, tyOfExpr g activePatExpr), [], [argExpr], m) - let vOpt, addrExp, _readonly, _writeonly = mkExprAddrOfExprAux g isStructRetTy false NeverMutates appExpr None matchm - match vOpt with - | None -> - let v, vExpr = mkCompGenLocal m ("activePatternResult" + string (newUnique())) resTy - if origInputVal.IsMemberOrModuleBinding then - AdjustValToTopVal v origInputVal.DeclaringEntity ValReprInfo.emptyValData - Some vExpr, Some(mkInvisibleBind v addrExp) - | Some (v, e) -> - if origInputVal.IsMemberOrModuleBinding then - AdjustValToTopVal v origInputVal.DeclaringEntity ValReprInfo.emptyValData - Some addrExp, Some (mkInvisibleBind v e) - + Some vExpr, Some(mkInvisibleBind v appExpr) | _ -> None, None @@ -1105,13 +1094,13 @@ let CompilePatternBasic // Convert active pattern edges to tests on results data let discrim' = match discrim with - | DecisionTreeTest.ActivePatternCase(_pexp, resTys, isStructRetTy, _apatVrefOpt, idx, apinfo) -> + | DecisionTreeTest.ActivePatternCase(_pexp, resTys, _apatVrefOpt, idx, apinfo) -> let aparity = apinfo.Names.Length let total = apinfo.IsTotal if not total && aparity > 1 then error(Error(FSComp.SR.patcPartialActivePatternsGenerateOneResult(), m)) - if not total then DecisionTreeTest.UnionCase(mkAnySomeCase g isStructRetTy, resTys) + if not total then DecisionTreeTest.UnionCase(mkSomeCase g, resTys) elif aparity <= 1 then DecisionTreeTest.Const(Const.Unit) else DecisionTreeTest.UnionCase(mkChoiceCaseRef g m aparity idx, resTys) | _ -> discrim @@ -1179,9 +1168,9 @@ let CompilePatternBasic let active' = removeActive path active match pat with | TPat_wild _ | TPat_as _ | TPat_tuple _ | TPat_disjs _ | TPat_conjs _ | TPat_recd _ -> failwith "Unexpected projection pattern" - | TPat_query ((_, resTys, isStructRetTy, apatVrefOpt, idx, apinfo), p, m) -> + | TPat_query ((_, resTys, apatVrefOpt, idx, apinfo), p, m) -> + if apinfo.IsTotal then - // Total active patterns always return choice values let hasParam = (match apatVrefOpt with None -> true | Some (vref, _) -> doesActivePatternHaveFreeTypars g vref) if (hasParam && i = i') || (discrimsEq g discrim (Option.get (getDiscrimOfPattern pat))) then let aparity = apinfo.Names.Length @@ -1203,16 +1192,12 @@ let CompilePatternBasic else [] else - // Partial active patterns always return options or value-options if i = i' then - let accessf' _j tpinst _ = - let expr = Option.get inpExprOpt - if isStructRetTy then - // In this case, the inpExprOpt is already an address-of expression - mkUnionCaseFieldGetProvenViaExprAddr (expr, mkValueSomeCase g, instTypes tpinst resTys, 0, exprm) - else - mkUnionCaseFieldGetUnprovenViaExprAddr (expr, mkSomeCase g, instTypes tpinst resTys, 0, exprm) - mkSubFrontiers path accessf' active' [p] (fun path j -> PathQuery(path, int64 j)) + let accessf' _j tpinst _ = + // TODO: In the future we will want active patterns to be able to return struct-unions + // In that eventuality, we need to check we are taking the address correctly + mkUnionCaseFieldGetUnprovenViaExprAddr (Option.get inpExprOpt, mkSomeCase g, instTypes tpinst resTys, 0, exprm) + mkSubFrontiers path accessf' active' [p] (fun path j -> PathQuery(path, int64 j)) else // Successful active patterns don't refute other patterns [frontier] @@ -1271,8 +1256,9 @@ let CompilePatternBasic | _ -> // Otherwise call the helper mkCallUnboxFast g exprm (instType tpinst tgtTy1) (accessf tpinst exprIn) - BindProjectionPattern (Active(path, SubExpr(accessf', ve), pbind)) (active', valMap) - |> mkFrontiers <| i + + let (v, exprIn) = BindSubExprOfInput g amap origInputValTypars pbind exprm (SubExpr(accessf', ve)) + [Frontier (i, active', valMap.Add v exprIn )] | None -> [Frontier (i, active', valMap)] @@ -1346,7 +1332,7 @@ let CompilePatternBasic res <- BindProjectionPattern (Active(path, subExpr, TPat_const(Const.Char(char i), m))) s @ res res // Assign an identifier to each TPat_query based on our knowledge of the 'identity' of the active pattern, if any - | TPat_query ((_, _, _, apatVrefOpt, _, _), _, _) -> + | TPat_query ((_, _, apatVrefOpt, _, _), _, _) -> let uniqId = match apatVrefOpt with | Some (vref, _) when not (doesActivePatternHaveFreeTypars g vref) -> vref.Stamp @@ -1415,7 +1401,7 @@ let rec CompilePattern g denv amap tcVal infoReader exprm matchm warnOnUnused a let decisionTree, targets = atMostOnePartialAtATime rest // Make the expression that represents the remaining cases of the pattern match. - let expr = mkAndSimplifyMatch DebugPointAtBinding.NoneAtInvisible exprm matchm resultTy decisionTree targets + let expr = mkAndSimplifyMatch NoDebugPointAtInvisibleBinding exprm matchm resultTy decisionTree targets // If the remainder of the match boiled away to nothing interesting. // We measure this simply by seeing if the range of the resulting expression is identical to matchm. diff --git a/src/fsharp/PatternMatchCompilation.fsi b/src/fsharp/PatternMatchCompilation.fsi index 98e195637c1..e1833cdfe54 100644 --- a/src/fsharp/PatternMatchCompilation.fsi +++ b/src/fsharp/PatternMatchCompilation.fsi @@ -2,14 +2,13 @@ module internal FSharp.Compiler.PatternMatchCompilation -open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.InfoReader -open FSharp.Compiler.Syntax.PrettyNaming -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text +open FSharp.Compiler open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Range +open FSharp.Compiler.InfoReader /// What should the decision tree contain for any incomplete match? type ActionOnFailure = @@ -27,7 +26,7 @@ type Pattern = | TPat_as of Pattern * PatternValBinding * range | TPat_disjs of Pattern list * range | TPat_conjs of Pattern list * range - | TPat_query of (Expr * TType list * bool * (ValRef * TypeInst) option * int * ActivePatternInfo) * Pattern * range + | 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 TupInfo * Pattern list * TType list * range @@ -35,7 +34,7 @@ type Pattern = | TPat_recd of TyconRef * TypeInst * Pattern list * range | TPat_range of char * char * range | TPat_null of range - | TPat_isinst of TType * TType * Pattern option * range + | TPat_isinst of TType * TType * PatternValBinding option * range | TPat_error of range member Range: range diff --git a/src/fsharp/PostInferenceChecks.fs b/src/fsharp/PostInferenceChecks.fs index d196a60e363..b3b69aab958 100644 --- a/src/fsharp/PostInferenceChecks.fs +++ b/src/fsharp/PostInferenceChecks.fs @@ -7,22 +7,21 @@ module internal FSharp.Compiler.PostTypeCheckSemanticChecks open System open System.Collections.Generic -open Internal.Utilities.Collections -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features open FSharp.Compiler.Infos open FSharp.Compiler.InfoReader -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.Lib +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps @@ -99,7 +98,7 @@ type env = isInAppExpr: bool } - override _.ToString() = "" + override __.ToString() = "" let BindTypar env (tp: Typar) = { env with @@ -1636,7 +1635,7 @@ and CheckDecisionTreeTest cenv env m discrim = | DecisionTreeTest.Const _ -> () | DecisionTreeTest.IsNull -> () | DecisionTreeTest.IsInst (srcTy, tgtTy) -> CheckTypeNoInnerByrefs cenv env m srcTy; CheckTypeNoInnerByrefs cenv env m tgtTy - | DecisionTreeTest.ActivePatternCase (exp, _, _, _, _, _) -> CheckExprNoByrefs cenv env exp + | DecisionTreeTest.ActivePatternCase (exp, _, _, _, _) -> CheckExprNoByrefs cenv env exp | DecisionTreeTest.Error _ -> () and CheckAttrib cenv env (Attrib(_, _, args, props, _, _, _)) = @@ -1694,24 +1693,21 @@ and CheckAttribArgExpr cenv env expr = and CheckAttribs cenv env (attribs: Attribs) = if isNil attribs then () else - let tcrefs = [ for (Attrib(tcref, _, _, _, gs, _, m)) in attribs -> (tcref, gs, m) ] + let tcrefs = [ for (Attrib(tcref, _, _, _, _, _, m)) in attribs -> (tcref, m) ] // Check for violations of allowMultiple = false let duplicates = tcrefs - |> Seq.groupBy (fun (tcref, gs, _) -> - // Don't allow CompiledNameAttribute on both a property and its getter/setter (see E_CompiledName test) - if tyconRefEq cenv.g cenv.g.attrib_CompiledNameAttribute.TyconRef tcref then (tcref.Stamp, false) else - (tcref.Stamp, gs)) + |> Seq.groupBy (fun (tcref, _) -> tcref.Stamp) |> Seq.map (fun (_, elems) -> List.last (List.ofSeq elems), Seq.length elems) |> Seq.filter (fun (_, count) -> count > 1) |> Seq.map fst |> Seq.toList // Filter for allowMultiple = false - |> List.filter (fun (tcref, _, m) -> TryFindAttributeUsageAttribute cenv.g m tcref <> Some true) + |> List.filter (fun (tcref, m) -> TryFindAttributeUsageAttribute cenv.g m tcref <> Some true) if cenv.reportErrors then - for (tcref, _, m) in duplicates do + for (tcref, m) in duplicates do errorR(Error(FSComp.SR.chkAttrHasAllowMultiFalse(tcref.DisplayName), m)) attribs |> List.iter (CheckAttrib cenv env) @@ -1741,7 +1737,6 @@ and AdjustAccess isHidden (cpath: unit -> CompilationPath) access = access and CheckBinding cenv env alwaysCheckNoReraise context (TBind(v, bindRhs, _) as bind) : Limit = - let vref = mkLocalValRef v let g = cenv.g let isTop = Option.isSome bind.Var.ValReprInfo //printfn "visiting %s..." v.DisplayName @@ -1749,9 +1744,9 @@ and CheckBinding cenv env alwaysCheckNoReraise context (TBind(v, bindRhs, _) as let env = { env with external = env.external || g.attrib_DllImportAttribute |> Option.exists (fun attr -> HasFSharpAttribute g attr v.Attribs) } // Check that active patterns don't have free type variables in their result - match TryGetActivePatternInfo vref with + match TryGetActivePatternInfo (mkLocalValRef v) with | Some _apinfo when _apinfo.ActiveTags.Length > 1 -> - if doesActivePatternHaveFreeTypars g vref then + if doesActivePatternHaveFreeTypars g (mkLocalValRef v) then errorR(Error(FSComp.SR.activePatternChoiceHasFreeTypars(v.LogicalName), v.Range)) | _ -> () @@ -1768,7 +1763,7 @@ and CheckBinding cenv env alwaysCheckNoReraise context (TBind(v, bindRhs, _) as // Check accessibility if (v.IsMemberOrModuleBinding || v.IsMember) && not v.IsIncrClassGeneratedMember then let access = AdjustAccess (IsHiddenVal env.sigToImplRemapInfo v) (fun () -> v.TopValDeclaringEntity.CompilationPath) v.Accessibility - CheckTypeForAccess cenv env (fun () -> NicePrint.stringOfQualifiedValOrMember cenv.denv cenv.infoReader vref) access v.Range v.Type + CheckTypeForAccess cenv env (fun () -> NicePrint.stringOfQualifiedValOrMember cenv.denv v) access v.Range v.Type let env = if v.IsConstructor && not v.IsIncrClassConstructor then { env with ctorLimitedZone=true } else env @@ -1825,7 +1820,7 @@ and CheckBinding cenv env alwaysCheckNoReraise context (TBind(v, bindRhs, _) as match v.MemberInfo with | Some memberInfo when not v.IsIncrClassGeneratedMember -> match memberInfo.MemberFlags.MemberKind with - | (SynMemberKind.PropertySet | SynMemberKind.PropertyGet) -> + | (MemberKind.PropertySet | MemberKind.PropertyGet) -> // These routines raise errors for ill-formed properties v |> ReturnTypeOfPropertyVal g |> ignore v |> ArgInfosOfPropertyVal g |> ignore @@ -2190,7 +2185,7 @@ let CheckEntityDefn cenv env (tycon: Entity) = match parentMethsOfSameName |> List.tryFind (checkForDup EraseAll) with | None -> () | Some minfo -> - let mtext = NicePrint.stringOfMethInfo cenv.infoReader m cenv.denv minfo + let mtext = NicePrint.stringOfMethInfo cenv.amap m cenv.denv minfo if parentMethsOfSameName |> List.exists (checkForDup EraseNone) then warning(Error(FSComp.SR.tcNewMemberHidesAbstractMember mtext, m)) else diff --git a/src/fsharp/PrettyNaming.fs b/src/fsharp/PrettyNaming.fs index 8bdcd36e120..5d649efbb13 100755 --- a/src/fsharp/PrettyNaming.fs +++ b/src/fsharp/PrettyNaming.fs @@ -2,7 +2,7 @@ /// Some general F# utilities for mangling / unmangling / manipulating names. /// Anything to do with special names of identifiers and other lexical rules -module public FSharp.Compiler.Syntax.PrettyNaming +module public FSharp.Compiler.PrettyNaming open System open System.Collections.Generic @@ -12,10 +12,11 @@ open System.Text open FSharp.Compiler open FSharp.Compiler.AbstractIL -open Internal.Utilities.Library -open FSharp.Compiler.Text -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Layout +open FSharp.Compiler.AbstractIL.Internal.Library + +open Internal.Utilities +open Internal.Utilities.StructuredFormat +open Internal.Utilities.StructuredFormat.LayoutOps //------------------------------------------------------------------------ // Operator name compilation @@ -191,17 +192,18 @@ let private compileCustomOpName = // Cache the compiled name so it can be reused. opName) -/// Maps the built-in F# operators to their mangled operator names. -let standardOpNames = - let opNames = Dictionary<_, _> (opNameTable.Length, StringComparer.Ordinal) - for x, y in opNameTable do - opNames.Add (x, y) - opNames - /// Compiles an operator into a mangled operator name. /// For example, "!%" becomes "op_DereferencePercent". /// This function accepts both built-in and custom operators. -let CompileOpName op = +let CompileOpName = + /// Maps the built-in F# operators to their mangled operator names. + let standardOpNames = + let opNames = Dictionary<_, _> (opNameTable.Length, StringComparer.Ordinal) + for x, y in opNameTable do + opNames.Add (x, y) + opNames + + fun op -> match standardOpNames.TryGetValue op with | true, x -> x | false, _ -> @@ -279,18 +281,19 @@ let private decompileCustomOpName = decompile sb opNamePrefixLen -/// Maps the mangled operator names of built-in F# operators back to the operators. -let standardOpsDecompile = - let ops = Dictionary (opNameTable.Length, StringComparer.Ordinal) - for x, y in opNameTable do - ops.Add(y, x) - ops - /// Decompiles a mangled operator name back into an operator. /// For example, "op_DereferencePercent" becomes "!%". /// This function accepts mangled names for both built-in and custom operators. -let DecompileOpName opName = - match standardOpsDecompile.TryGetValue opName with +let DecompileOpName = + /// Maps the mangled operator names of built-in F# operators back to the operators. + let standardOps = + let ops = Dictionary (opNameTable.Length, StringComparer.Ordinal) + for x, y in opNameTable do + ops.Add(y, x) + ops + + fun opName -> + match standardOps.TryGetValue opName with | true, res -> res | false, _ -> if IsMangledOpName opName then @@ -305,7 +308,7 @@ let DemangleOperatorName nm = let DemangleOperatorNameAsLayout nonOpTagged nm = let nm = DecompileOpName nm - if IsOperatorOrBacktickedName nm then wordL (TaggedText.tagPunctuation "(") ^^ wordL (TaggedText.tagOperator nm) ^^ wordL (TaggedText.tagPunctuation ")") + if IsOperatorOrBacktickedName nm then wordL (TaggedTextOps.tagPunctuation "(") ^^ wordL (TaggedTextOps.tagOperator nm) ^^ wordL (TaggedTextOps.tagPunctuation ")") else wordL (nonOpTagged nm) let opNameCons = CompileOpName "::" @@ -411,29 +414,31 @@ let IsPunctuation s = let IsTernaryOperator s = (DecompileOpName s = qmarkSet) -/// EQUALS, INFIX_COMPARE_OP, LESS, GREATER -let relational = [| "=";"!=";"<";">";"$"|] +let IsInfixOperator = + + /// EQUALS, INFIX_COMPARE_OP, LESS, GREATER + let relational = [| "=";"!=";"<";">";"$"|] -/// INFIX_AT_HAT_OP -let concat = [| "@";"^" |] + /// INFIX_AT_HAT_OP + let concat = [| "@";"^" |] -/// PLUS_MINUS_OP, MINUS -let plusMinus = [| "+"; "-" |] + /// PLUS_MINUS_OP, MINUS + let plusMinus = [| "+"; "-" |] -/// PERCENT_OP, STAR, INFIX_STAR_DIV_MOD_OP -let otherMath = [| "*";"/";"%" |] + /// PERCENT_OP, STAR, INFIX_STAR_DIV_MOD_OP + let otherMath = [| "*";"/";"%" |] -/// Characters ignored at the start of the operator name -/// when determining whether an operator is an infix operator. -let ignoredChars = [| '.'; '?' |] + /// Characters ignored at the start of the operator name + /// when determining whether an operator is an infix operator. + let ignoredChars = [| '.'; '?' |] -// Certain operator idents are parsed as infix expression operators. -// The parsing as infix operators is hardwired in the grammar [see declExpr productions] -// where certain operator tokens are accepted in infix forms, i.e. . -// The lexer defines the strings that lead to those tokens. -//------ -// This function recognises these "infix operator" names. -let IsInfixOperator s = (* where s is assumed to be a compiled name *) + fun s (* where s is assumed to be a compiled name *) -> + // Certain operator idents are parsed as infix expression operators. + // The parsing as infix operators is hardwired in the grammar [see declExpr productions] + // where certain operator tokens are accepted in infix forms, i.e. . + // The lexer defines the strings that lead to those tokens. + //------ + // This function recognises these "infix operator" names. let s = DecompileOpName s let skipIgnoredChars = s.TrimStart(ignoredChars) let afterSkipStartsWith prefix = skipIgnoredChars.StartsWithOrdinal(prefix) @@ -623,7 +628,7 @@ let IsActivePatternName (name: string) = isCoreActivePatternName name 1 false type ActivePatternInfo = - | APInfo of bool * (string * range) list * range + | APInfo of bool * (string * Range.range) list * Range.range member x.IsTotal = let (APInfo(p, _, _)) = x in p @@ -633,23 +638,23 @@ type ActivePatternInfo = member x.Range = let (APInfo(_, _, m)) = x in m -let ActivePatternInfoOfValName nm (m: range) = +let ActivePatternInfoOfValName nm (m: Range.range) = // Note: The approximate range calculations in this code assume the name is of the form "(|A|B|)" not "(| A | B |)" // The ranges are used for IDE refactoring support etc. If names of the second type are used, // renaming may be inaccurate/buggy. However names of the first form are dominant in F# code. - let rec loop (nm: string) (mp: range) = + let rec loop (nm: string) (mp: Range.range) = let n = nm.IndexOf '|' if n > 0 then - let m1 = Range.mkRange mp.FileName mp.Start (Position.mkPos mp.StartLine (mp.StartColumn + n)) - let m2 = Range.mkRange mp.FileName (Position.mkPos mp.StartLine (mp.StartColumn + n + 1)) mp.End + let m1 = Range.mkRange mp.FileName mp.Start (Range.mkPos mp.StartLine (mp.StartColumn + n)) + let m2 = Range.mkRange mp.FileName (Range.mkPos mp.StartLine (mp.StartColumn + n + 1)) mp.End (nm.[0..n-1], m1) :: loop nm.[n+1..] m2 else - let m1 = Range.mkRange mp.FileName mp.Start (Position.mkPos mp.StartLine (mp.StartColumn + nm.Length)) + let m1 = Range.mkRange mp.FileName mp.Start (Range.mkPos mp.StartLine (mp.StartColumn + nm.Length)) [(nm, m1)] let nm = DecompileOpName nm if IsActivePatternName nm then // Skip the '|' at each end when recovering ranges - let m0 = Range.mkRange m.FileName (Position.mkPos m.StartLine (m.StartColumn + 1)) (Position.mkPos m.EndLine (m.EndColumn - 1)) + let m0 = Range.mkRange m.FileName (Range.mkPos m.StartLine (m.StartColumn + 1)) (Range.mkPos m.EndLine (m.EndColumn - 1)) let names = loop nm.[1..nm.Length-2] m0 let resH, resT = List.frontAndBack names Some(if fst resT = "_" then APInfo(false, resH, m) else APInfo(true, names, m)) @@ -750,10 +755,6 @@ module CustomOperations = let unassignedTyparName = "?" -let FormatAndOtherOverloadsString remainingOverloads = FSComp.SR.typeInfoOtherOverloads(remainingOverloads) - -let GetLongNameFromString x = SplitNamesForILPath x - //-------------------------------------------------------------------------- // Resource format for pickled data //-------------------------------------------------------------------------- diff --git a/src/fsharp/PrettyNaming.fsi b/src/fsharp/PrettyNaming.fsi index 8c67b0ceb4f..40f7b750358 100644 --- a/src/fsharp/PrettyNaming.fsi +++ b/src/fsharp/PrettyNaming.fsi @@ -2,26 +2,27 @@ /// Some general F# utilities for mangling / unmangling / manipulating names. /// Anything to do with special names of identifiers and other lexical rules -module public FSharp.Compiler.Syntax.PrettyNaming +module public FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Text -open FSharp.Compiler.Text +open FSharp.Compiler +open FSharp.Compiler.AbstractIL +open Internal.Utilities.StructuredFormat [] -val internal parenGet: string = ".()" +val parenGet: string = ".()" [] -val internal parenSet: string = ".()<-" +val parenSet: string = ".()<-" [] -val internal qmark: string = "?" +val qmark: string = "?" [] -val internal qmarkSet: string = "?<-" +val qmarkSet: string = "?<-" /// Prefix for compiled (mangled) operator names. [] -val internal opNamePrefix: string = "op_" +val opNamePrefix: string = "op_" /// Returns `true` if given string is an operator or double backticked name, e.g. ( |>> ) or ( long identifier ). /// (where ( long identifier ) is the display name for ``long identifier``). @@ -35,28 +36,28 @@ val IsMangledOpName: n:string -> bool /// Compiles an operator into a mangled operator name. /// For example, "!%" becomes "op_DereferencePercent". /// This function accepts both built-in and custom operators. -val CompileOpName: string -> string +val CompileOpName: (string -> string) /// Decompiles a mangled operator name back into an operator. /// For example, "op_DereferencePercent" becomes "!%". /// This function accepts mangled names for both built-in and custom operators. -val DecompileOpName: string -> string +val DecompileOpName: (string -> string) val DemangleOperatorName: nm:string -> string -val internal DemangleOperatorNameAsLayout: nonOpTagged:(string -> #TaggedText) -> nm:string -> Layout +val DemangleOperatorNameAsLayout: nonOpTagged:(string -> #TaggedText) -> nm:string -> Layout -val internal opNameCons: string +val opNameCons: string -val internal opNameNil: string +val opNameNil: string -val internal opNameEquals: string +val opNameEquals: string -val internal opNameEqualsNullable: string +val opNameEqualsNullable: string -val internal opNameNullableEquals: string +val opNameNullableEquals: string -val internal opNameNullableEqualsNullable: string +val opNameNullableEqualsNullable: string /// The characters that are allowed to be the first character of an identifier. val IsIdentifierFirstCharacter: c:char -> bool @@ -67,11 +68,11 @@ val IsIdentifierPartCharacter: c:char -> bool /// Is this character a part of a long identifier? val IsLongIdentifierPartCharacter: c:char -> bool -val internal isTildeOnlyString: s:string -> bool +val isTildeOnlyString: s:string -> bool -val internal IsValidPrefixOperatorUse: s:string -> bool +val IsValidPrefixOperatorUse: s:string -> bool -val internal IsValidPrefixOperatorDefinitionName: s:string -> bool +val IsValidPrefixOperatorDefinitionName: s:string -> bool val IsPrefixOperator: s:string -> bool @@ -79,104 +80,99 @@ val IsPunctuation: s:string -> bool val IsTernaryOperator: s:string -> bool -val IsInfixOperator: string -> bool +val IsInfixOperator: (string -> bool) -val internal ( |Control|Equality|Relational|Indexer|FixedTypes|Other| ): +val ( |Control|Equality|Relational|Indexer|FixedTypes|Other| ): opName:string -> Choice val IsCompilerGeneratedName: nm:string -> bool -val internal CompilerGeneratedName: nm:string -> string +val CompilerGeneratedName: nm:string -> string -val internal GetBasicNameOfPossibleCompilerGeneratedName: name:string -> string +val GetBasicNameOfPossibleCompilerGeneratedName: name:string -> string -val internal CompilerGeneratedNameSuffix: basicName:string -> suffix:string -> string +val CompilerGeneratedNameSuffix: basicName:string -> suffix:string -> string -val internal TryDemangleGenericNameAndPos: n:string -> int voption +val TryDemangleGenericNameAndPos: n:string -> int voption -type internal NameArityPair = | NameArityPair of string * int +type NameArityPair = | NameArityPair of string * int -val internal DemangleGenericTypeNameWithPos: pos:int -> mangledName:string -> string +val DemangleGenericTypeNameWithPos: pos:int -> mangledName:string -> string -val internal DecodeGenericTypeNameWithPos: pos:int -> mangledName:string -> NameArityPair +val DecodeGenericTypeNameWithPos: pos:int -> mangledName:string -> NameArityPair -val internal DemangleGenericTypeName: mangledName:string -> string +val DemangleGenericTypeName: mangledName:string -> string -val internal DecodeGenericTypeName: mangledName:string -> NameArityPair +val DecodeGenericTypeName: mangledName:string -> NameArityPair /// Try to chop "get_" or "set_" from a string val TryChopPropertyName: s:string -> string option /// Try to chop "get_" or "set_" from a string. /// If the string does not start with "get_" or "set_", this function raises an exception. -val internal ChopPropertyName: s:string -> string +val ChopPropertyName: s:string -> string -val internal SplitNamesForILPath: s:string -> string list +val SplitNamesForILPath: s:string -> string list [] -val internal FSharpModuleSuffix: string = "Module" +val FSharpModuleSuffix: string = "Module" [] -val internal MangledGlobalName: string = "`global`" +val MangledGlobalName: string = "`global`" -val internal IllegalCharactersInTypeAndNamespaceNames: char [] +val IllegalCharactersInTypeAndNamespaceNames: char [] /// Determines if the specified name is a valid name for an active pattern. val IsActivePatternName: name:string -> bool -type internal ActivePatternInfo = - | APInfo of bool * (string * range) list * range +type ActivePatternInfo = + | APInfo of bool * (string * Range.range) list * Range.range member ActiveTags: string list - member ActiveTagsWithRanges: (string * range) list + member ActiveTagsWithRanges: (string * Range.range) list member IsTotal: bool - member Range: range + member Range: Range.range -val internal ActivePatternInfoOfValName: nm:string -> m:range -> ActivePatternInfo option +val ActivePatternInfoOfValName: nm:string -> m:Range.range -> ActivePatternInfo option -exception internal InvalidMangledStaticArg of string +exception InvalidMangledStaticArg of string -val internal demangleProvidedTypeName: typeLogicalName:string -> string * (string * string) [] +val demangleProvidedTypeName: typeLogicalName:string -> string * (string * string) [] /// Mangle the static parameters for a provided type or method -val internal mangleProvidedTypeName: typeLogicalName:string * nonDefaultArgs:(string * string) [] -> string +val mangleProvidedTypeName: typeLogicalName:string * nonDefaultArgs:(string * string) [] -> string /// Mangle the static parameters for a provided type or method -val internal computeMangledNameWithoutDefaultArgValues: nm:string * staticArgs:'a [] * defaultArgValues:(string * string option) [] -> string +val computeMangledNameWithoutDefaultArgValues: nm:string * staticArgs:'a [] * defaultArgValues:(string * string option) [] -> string -val internal outArgCompilerGeneratedName: string +val outArgCompilerGeneratedName: string -val internal ExtraWitnessMethodName: nm:string -> string +val ExtraWitnessMethodName: nm:string -> string /// Reuses generated union case field name objects for common field numbers -val internal mkUnionCaseFieldName: (int -> int -> string) +val mkUnionCaseFieldName: (int -> int -> string) /// Reuses generated exception field name objects for common field numbers -val internal mkExceptionFieldName: (int -> string) +val mkExceptionFieldName: (int -> string) /// The prefix of the names used for the fake namespace path added to all dynamic code entries in FSI.EXE val FsiDynamicModulePrefix: string -module internal FSharpLib = +module FSharpLib = val Root: string val RootPath: string list val Core: string val CorePath: string list -module internal CustomOperations = +module CustomOperations = [] val Into: string = "into" -val internal unassignedTyparName: string +val unassignedTyparName: string -val internal FSharpOptimizationDataResourceName: string +val FSharpOptimizationDataResourceName: string -val internal FSharpSignatureDataResourceName: string +val FSharpSignatureDataResourceName: string -val internal FSharpOptimizationDataResourceName2: string - -val internal FSharpSignatureDataResourceName2: string - -val GetLongNameFromString: string -> string list - -val FormatAndOtherOverloadsString: int -> string +val FSharpOptimizationDataResourceName2: string +val FSharpSignatureDataResourceName2: string diff --git a/src/fsharp/QueueList.fs b/src/fsharp/QueueList.fs index b8b651b1cad..4914e3d2062 100644 --- a/src/fsharp/QueueList.fs +++ b/src/fsharp/QueueList.fs @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace Internal.Utilities.Collections +namespace Internal.Utilities open System.Collections open System.Collections.Generic @@ -79,3 +79,14 @@ module internal QueueList = let appendOne (x:QueueList<_>) y = x.AppendOne(y) let append (x:QueueList<_>) (ys:QueueList<_>) = x.Append(ys) + +#if QUEUE_LIST_UNITTESTS +module internal Test = + let mutable q = QueueList.empty + + for i = 0 to 100 do + if q |> QueueList.toList <> [0..i-1] then printfn "fail pre check, i = %d" i + q <- q.AppendOne(i) + if q |> QueueList.toList <> [0..i] then printfn "fail post check, i = %d" i *) +#endif + diff --git a/src/fsharp/QueueList.fsi b/src/fsharp/QueueList.fsi index 12c531ff17c..af57486a7ea 100644 --- a/src/fsharp/QueueList.fsi +++ b/src/fsharp/QueueList.fsi @@ -1,4 +1,4 @@ -namespace Internal.Utilities.Collections +namespace Internal.Utilities /// Iterable functional collection with O(1) append-1 time. Useful for data structures where elements get added at the /// end but the collection must occasionally be iterated. Iteration is slower and may allocate because diff --git a/src/fsharp/QuotationPickler.fs b/src/fsharp/QuotationPickler.fs index abcf1a42882..a99ad7298a3 100644 --- a/src/fsharp/QuotationPickler.fs +++ b/src/fsharp/QuotationPickler.fs @@ -2,156 +2,151 @@ module internal FSharp.Compiler.QuotationPickler -open System open System.Text -open FSharp.Compiler.IO -open Internal.Utilities open Internal.Utilities.Collections -open Internal.Utilities.Library.Extras +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.Lib -let mkRLinear mk (vs, body) = List.foldBack (fun v acc -> mk (v, acc)) vs body +let mkRLinear mk (vs, body) = List.foldBack (fun v acc -> mk (v, acc)) vs body -type TypeVarData = { tvName: string } +type TypeVarData = { tvName: string; } -type NamedTypeData = +type NamedTypeData = | Idx of int - | Named of tcName: string * tcAssembly: string + | Named of (* tcName: *) string * (* tcAssembly: *) string -type TypeCombOp = - | ArrayTyOp of int (* rank *) +type TypeCombOp = + | ArrayTyOp of int (* rank *) | FunTyOp | NamedTyOp of NamedTypeData type TypeData = - | VarType of int - | AppType of TypeCombOp * TypeData list + | VarType of int + | AppType of TypeCombOp * TypeData list -let mkVarTy v = VarType v +let mkVarTy v = VarType v +let mkFunTy (x1, x2) = AppType(FunTyOp, [x1; x2]) +let mkArrayTy (n, x) = AppType(ArrayTyOp n, [x]) +let mkILNamedTy (r, l) = AppType(NamedTyOp r, l) -let mkFunTy (x1, x2) = AppType(FunTyOp, [x1; x2]) - -let mkArrayTy (n, x) = AppType(ArrayTyOp n, [x]) - -let mkILNamedTy (r, l) = AppType(NamedTyOp r, l) - -type CtorData = +type CtorData = { ctorParent: NamedTypeData ctorArgTypes: TypeData list; } -type MethodData = +type MethodData = { methParent: NamedTypeData methName: string methArgTypes: TypeData list methRetType: TypeData numGenericArgs: int } - -type VarData = + +type VarData = { vText: string vType: TypeData - vMutable: bool } + vMutable: bool } type PropInfoData = NamedTypeData * string * TypeData * TypeData list -type CombOp = +type CombOp = | AppOp - | CondOp + | CondOp | ModuleValueOp of NamedTypeData * string * bool | ModuleValueWOp of NamedTypeData * string * bool * string * int - | LetRecOp - | LetRecCombOp - | LetOp - | RecdMkOp of NamedTypeData - | RecdGetOp of NamedTypeData * string - | RecdSetOp of NamedTypeData * string - | SumMkOp of NamedTypeData * string - | SumFieldGetOp of NamedTypeData * string * int + | LetRecOp + | LetRecCombOp + | LetOp + | RecdMkOp of NamedTypeData + | RecdGetOp of NamedTypeData * string + | RecdSetOp of NamedTypeData * string + | SumMkOp of NamedTypeData * string + | SumFieldGetOp of NamedTypeData * string * int | SumTagTestOp of NamedTypeData * string - | TupleMkOp + | TupleMkOp | TupleGetOp of int - | UnitOp - | BoolOp of bool - | StringOp of string - | SingleOp of float32 - | DoubleOp of float - | CharOp of char - | SByteOp of sbyte - | ByteOp of byte - | Int16Op of int16 - | UInt16Op of uint16 - | Int32Op of int32 - | UInt32Op of uint32 - | Int64Op of int64 - | UInt64Op of uint64 + | UnitOp + | BoolOp of bool + | StringOp of string + | SingleOp of float32 + | DoubleOp of float + | CharOp of char + | SByteOp of sbyte + | ByteOp of byte + | Int16Op of int16 + | UInt16Op of uint16 + | Int32Op of int32 + | UInt32Op of uint32 + | Int64Op of int64 + | UInt64Op of uint64 | PropGetOp of PropInfoData | FieldGetOp of NamedTypeData * string - | CtorCallOp of CtorData - | MethodCallOp of MethodData + | CtorCallOp of CtorData + | MethodCallOp of MethodData | MethodCallWOp of MethodData * MethodData * int - | CoerceOp + | CoerceOp | NewArrayOp | DelegateOp - | SeqOp - | ForLoopOp - | WhileLoopOp - | NullOp - | DefaultValueOp + | SeqOp + | ForLoopOp + | WhileLoopOp + | NullOp + | DefaultValueOp | PropSetOp of PropInfoData - | FieldSetOp of NamedTypeData * string + | FieldSetOp of NamedTypeData * string | AddressOfOp | ExprSetOp | AddressSetOp - | TypeTestOp + | TypeTestOp | TryFinallyOp - | TryWithOp + | TryWithOp -/// Represents specifications of a subset of F# expressions +/// Represents specifications of a subset of F# expressions type ExprData = - | AttrExpr of ExprData * ExprData list - | CombExpr of CombOp * TypeData list * ExprData list - | VarExpr of int - | QuoteExpr of ExprData + | AttrExpr of ExprData * ExprData list + | CombExpr of CombOp * TypeData list * ExprData list + | VarExpr of int + | QuoteExpr of ExprData | LambdaExpr of VarData * ExprData - | HoleExpr of TypeData * int - | ThisVarExpr of TypeData - | QuoteRawExpr of ExprData - -let mkVar v = VarExpr v + | HoleExpr of TypeData * int + | ThisVarExpr of TypeData + | QuoteRawExpr of ExprData + +let mkVar v = VarExpr v let mkHole (v, idx) = HoleExpr (v, idx) -let mkApp (a, b) = CombExpr(AppOp, [], [a; b]) +let mkApp (a, b) = CombExpr(AppOp, [], [a; b]) -let mkLambda (a, b) = LambdaExpr (a, b) +let mkLambda (a, b) = LambdaExpr (a, b) -let mkQuote (a) = QuoteExpr (a) +let mkQuote (a) = QuoteExpr (a) let mkQuoteRaw40 (a) = QuoteRawExpr (a) -let mkCond (x1, x2, x3) = CombExpr(CondOp, [], [x1;x2;x3]) +let mkCond (x1, x2, x3) = CombExpr(CondOp, [], [x1;x2;x3]) -let mkModuleValueApp (tcref, nm, isProp, tyargs, args: ExprData list) = +let mkModuleValueApp (tcref, nm, isProp, tyargs, args: ExprData list) = CombExpr(ModuleValueOp(tcref, nm, isProp), tyargs, args) -let mkModuleValueWApp (tcref, nm, isProp, nmW, nWitnesses, tyargs, args: ExprData list) = +let mkModuleValueWApp (tcref, nm, isProp, nmW, nWitnesses, tyargs, args: ExprData list) = CombExpr(ModuleValueWOp(tcref, nm, isProp, nmW, nWitnesses), tyargs, args) let mkTuple (ty, x) = CombExpr(TupleMkOp, [ty], x) let mkLet ((v, e), b) = CombExpr(LetOp, [], [e;mkLambda (v, b)]) (* nb. order preserves source order *) -let mkUnit () = CombExpr(UnitOp, [], []) +let mkUnit () = CombExpr(UnitOp, [], []) -let mkNull ty = CombExpr(NullOp, [ty], []) +let mkNull ty = CombExpr(NullOp, [ty], []) let mkLetRecRaw e1 = CombExpr(LetRecOp, [], [e1]) -let mkLetRecCombRaw args = CombExpr(LetRecCombOp, [], args) +let mkLetRecCombRaw args = CombExpr(LetRecCombOp, [], args) -let mkLetRec (ves, body) = - let vs, es = List.unzip ves +let mkLetRec (ves, body) = + let vs, es = List.unzip ves mkLetRecRaw(mkRLinear mkLambda (vs, mkLetRecCombRaw (body :: es))) - -let mkRecdMk (n, tys, args) = CombExpr(RecdMkOp n, tys, args) + +let mkRecdMk (n, tys, args) = CombExpr(RecdMkOp n, tys, args) let mkRecdGet (d1, d2, tyargs, args) = CombExpr(RecdGetOp(d1, d2), tyargs, args) @@ -163,7 +158,7 @@ let mkUnionFieldGet (d1, d2, d3, tyargs, arg) = CombExpr(SumFieldGetOp(d1, d2, d let mkUnionCaseTagTest (d1, d2, tyargs, arg) = CombExpr(SumTagTestOp(d1, d2), tyargs, [arg]) -let mkTupleGet (ty, n, e) = CombExpr(TupleGetOp n, [ty], [e]) +let mkTupleGet (ty, n, e) = CombExpr(TupleGetOp n, [ty], [e]) let mkCoerce (ty, arg) = CombExpr(CoerceOp, [ty], [arg]) @@ -181,35 +176,35 @@ let mkThisVar (ty) = ThisVarExpr(ty) let mkNewArray (ty, args) = CombExpr(NewArrayOp, [ty], args) -let mkBool (v, ty) = CombExpr(BoolOp v, [ty], []) +let mkBool (v, ty) = CombExpr(BoolOp v, [ty], []) -let mkString (v, ty) = CombExpr(StringOp v, [ty], []) +let mkString (v, ty) = CombExpr(StringOp v, [ty], []) -let mkSingle (v, ty) = CombExpr(SingleOp v, [ty], []) +let mkSingle (v, ty) = CombExpr(SingleOp v, [ty], []) -let mkDouble (v, ty) = CombExpr(DoubleOp v, [ty], []) +let mkDouble (v, ty) = CombExpr(DoubleOp v, [ty], []) -let mkChar (v, ty) = CombExpr(CharOp v, [ty], []) +let mkChar (v, ty) = CombExpr(CharOp v, [ty], []) -let mkSByte (v, ty) = CombExpr(SByteOp v, [ty], []) +let mkSByte (v, ty) = CombExpr(SByteOp v, [ty], []) -let mkByte (v, ty) = CombExpr(ByteOp v, [ty], []) +let mkByte (v, ty) = CombExpr(ByteOp v, [ty], []) -let mkInt16 (v, ty) = CombExpr(Int16Op v, [ty], []) +let mkInt16 (v, ty) = CombExpr(Int16Op v, [ty], []) -let mkUInt16 (v, ty) = CombExpr(UInt16Op v, [ty], []) +let mkUInt16 (v, ty) = CombExpr(UInt16Op v, [ty], []) -let mkInt32 (v, ty) = CombExpr(Int32Op v, [ty], []) +let mkInt32 (v, ty) = CombExpr(Int32Op v, [ty], []) -let mkUInt32 (v, ty) = CombExpr(UInt32Op v, [ty], []) +let mkUInt32 (v, ty) = CombExpr(UInt32Op v, [ty], []) -let mkInt64 (v, ty) = CombExpr(Int64Op v, [ty], []) +let mkInt64 (v, ty) = CombExpr(Int64Op v, [ty], []) -let mkUInt64 (v, ty) = CombExpr(UInt64Op v, [ty], []) +let mkUInt64 (v, ty) = CombExpr(UInt64Op v, [ty], []) let mkSequential (e1, e2) = CombExpr(SeqOp, [], [e1;e2]) -let mkForLoop (x1, x2, x3) = CombExpr(ForLoopOp, [], [x1;x2;x3]) +let mkForLoop (x1, x2, x3) = CombExpr(ForLoopOp, [], [x1;x2;x3]) let mkWhileLoop (e1, e2) = CombExpr(WhileLoopOp, [], [e1;e2]) @@ -240,19 +235,15 @@ let isAttributedExpression e = match e with AttrExpr(_, _) -> true | _ -> false //--------------------------------------------------------------------------- // Pickle/unpickle expression and type specifications in a stable format // compatible with those read by Microsoft.FSharp.Quotations -//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- let SerializedReflectedDefinitionsResourceNameBase = "ReflectedDefinitions" let freshVar (n, ty, mut) = { vText=n; vType=ty; vMutable=mut } -/// Arbitrary value -[] -let PickleBufferCapacity = 100000 - -module SimplePickle = +module SimplePickle = - type Table<'T> = + type Table<'T> = { tbl: HashMultiMap<'T, int> // This should be "Dictionary" mutable rows: 'T list mutable count: int } @@ -267,21 +258,21 @@ module SimplePickle = member tbl.Count = tbl.rows.Length member tbl.Add x = - let n = tbl.count + let n = tbl.count tbl.count <- tbl.count + 1 tbl.tbl.Add(x, n) tbl.rows <- x :: tbl.rows n member tbl.FindOrAdd x = - if tbl.tbl.ContainsKey x then tbl.tbl.[x] + if tbl.tbl.ContainsKey x then tbl.tbl.[x] else tbl.Add x - member tbl.Find x = tbl.tbl.[x] + member tbl.Find x = tbl.tbl.[x] - member tbl.ContainsKey x = tbl.tbl.ContainsKey x + member tbl.ContainsKey x = tbl.tbl.ContainsKey x - type QuotationPickleOutState = + type QuotationPickleOutState = { os: ByteBuffer ostrings: Table } @@ -293,37 +284,32 @@ module SimplePickle = let p_unit () (_os: QuotationPickleOutState) = () - let prim_pint32 i st = + let prim_pint32 i st = p_byte (Bits.b0 i) st p_byte (Bits.b1 i) st p_byte (Bits.b2 i) st p_byte (Bits.b3 i) st - // compress integers according to the same scheme used by CLR metadata - // This halves the size of pickled data - let p_int32 n st = - if n >= 0 && n <= 0x7F then + // compress integers according to the same scheme used by CLR metadata + // This halves the size of pickled data + let p_int32 n st = + if n >= 0 && n <= 0x7F then p_byte (Bits.b0 n) st - else if n >= 0x80 && n <= 0x3FFF then + else if n >= 0x80 && n <= 0x3FFF then p_byte (0x80 ||| (n >>> 8)) st - p_byte (n &&& 0xFF) st - else + p_byte (n &&& 0xFF) st + else p_byte 0xFF st prim_pint32 n st - let p_bytes (s:byte[]) st = + let p_bytes (s:byte[]) st = let len = s.Length p_int32 (len) st st.os.EmitBytes s - let p_memory (s:ReadOnlyMemory) st = - let len = s.Length - p_int32 (len) st - st.os.EmitMemory s - - let prim_pstring (s:string) st = - let bytes = Encoding.UTF8.GetBytes s - let len = bytes.Length + let prim_pstring (s:string) st = + let bytes = Encoding.UTF8.GetBytes s + let len = bytes.Length p_int32 (len) st st.os.EmitBytes bytes @@ -339,7 +325,7 @@ module SimplePickle = let puint32 (x:uint32) st = p_int32 (int32 x) st - let p_int64 i st = + let p_int64 i st = p_int32 (int32 (i &&& 0xFFFFFFFFL)) st p_int32 (int32 (i >>> 32)) st @@ -368,49 +354,43 @@ module SimplePickle = let p_string s st = puniq st.ostrings s st let rec p_list f x st = - match x with + match x with | [] -> p_byte 0 st | h :: t -> p_byte 1 st; f h st; p_list f t st - + let pickle_obj p x = - let st1 = - { os = ByteBuffer.Create(PickleBufferCapacity, useArrayPool = true) - ostrings=Table<_>.Create() } let stringTab, phase1bytes = + let st1 = + { os = ByteBuffer.Create 100000 + ostrings=Table<_>.Create() } p x st1 - st1.ostrings.AsList, st1.os.AsMemory() - - let phase2data = (stringTab, phase1bytes) - - let st2 = - { os = ByteBuffer.Create(PickleBufferCapacity, useArrayPool = true) - ostrings=Table<_>.Create() } - let phase2bytes = - p_tup2 (p_list prim_pstring) p_memory phase2data st2 - st2.os.AsMemory() - - let finalBytes = phase2bytes.ToArray() - (st1.os :> IDisposable).Dispose() - (st2.os :> IDisposable).Dispose() - finalBytes + st1.ostrings.AsList, st1.os.Close() + let phase2data = (stringTab, phase1bytes) + let phase2bytes = + let st2 = + { os = ByteBuffer.Create 100000 + ostrings=Table<_>.Create() } + p_tup2 (p_list prim_pstring) p_bytes phase2data st2 + st2.os.Close() + phase2bytes open SimplePickle let p_assemblyref x st = p_string x st -let p_NamedType x st = - match x with +let p_NamedType x st = + match x with | Idx n -> p_tup2 p_string p_assemblyref (string n, "") st | Named (nm, a) -> p_tup2 p_string p_assemblyref (nm, a) st -let p_tycon x st = +let p_tycon x st = match x with | FunTyOp -> p_byte 1 st | NamedTyOp a -> p_byte 2 st; p_NamedType a st | ArrayTyOp a -> p_byte 3 st; p_int a st let rec p_type x st = - match x with + match x with | VarType v -> p_byte 0 st; p_int v st | AppType(c, ts) -> p_byte 1 st; p_tup2 p_tycon p_types (c, ts) st @@ -422,22 +402,22 @@ let p_recdFieldSpec v st = p_tup2 p_NamedType p_string v st let p_ucaseSpec v st = p_tup2 p_NamedType p_string v st -let p_MethodData a st = +let p_MethodData a st = p_tup5 p_NamedType p_types p_type p_string p_int (a.methParent, a.methArgTypes, a.methRetType, a.methName, a.numGenericArgs) st -let p_CtorData a st = +let p_CtorData a st = p_tup2 p_NamedType p_types (a.ctorParent, a.ctorArgTypes) st -let p_PropInfoData a st = +let p_PropInfoData a st = p_tup4 p_NamedType p_string p_type p_types a st - -let p_CombOp x st = - match x with + +let p_CombOp x st = + match x with | CondOp -> p_byte 0 st - | ModuleValueOp (x, y, z) -> + | ModuleValueOp (x, y, z) -> p_byte 1 st - p_NamedType x st - p_string y st + p_NamedType x st + p_string y st p_bool z st | LetRecOp -> p_byte 2 st | RecdMkOp a -> p_byte 3 st; p_NamedType a st @@ -490,16 +470,16 @@ let p_CombOp x st = p_MethodData a st p_MethodData b st p_int c st - | ModuleValueWOp (x, y, z, nmW, nWitnesses) -> + | ModuleValueWOp (x, y, z, nmW, nWitnesses) -> p_byte 51 st p_string nmW st p_int nWitnesses st - p_NamedType x st - p_string y st + p_NamedType x st + p_string y st p_bool z st let rec p_expr x st = - match x with + match x with | CombExpr(c, ts, args) -> p_byte 0 st; p_tup3 p_CombOp p_types (p_list p_expr) (c, ts, args) st | VarExpr v -> p_byte 1 st; p_int v st | LambdaExpr(v, e) -> p_byte 2 st; p_tup2 p_varDecl p_expr (v, e) st @@ -508,37 +488,37 @@ let rec p_expr x st = | AttrExpr(e, attrs) -> p_byte 5 st; p_tup2 p_expr (p_list p_expr) (e, attrs) st | ThisVarExpr(ty) -> p_byte 6 st; p_type ty st | QuoteRawExpr(tm) -> p_byte 7 st; p_expr tm st - -type ModuleDefnData = + +type ModuleDefnData = { Module: NamedTypeData Name: string IsProperty: bool } -type MethodBaseData = +type MethodBaseData = | ModuleDefn of ModuleDefnData * (string * int) option - | Method of MethodData - | Ctor of CtorData + | Method of MethodData + | Ctor of CtorData let pickle = pickle_obj p_expr -let p_MethodBase x st = - match x with - | ModuleDefn (md, None) -> +let p_MethodBase x st = + match x with + | ModuleDefn (md, None) -> p_byte 0 st p_NamedType md.Module st p_string md.Name st p_bool md.IsProperty st - | ModuleDefn (md, Some (nmW, nWitnesses)) -> + | ModuleDefn (md, Some (nmW, nWitnesses)) -> p_byte 3 st p_string nmW st p_int nWitnesses st p_NamedType md.Module st p_string md.Name st p_bool md.IsProperty st - | Method md -> + | Method md -> p_byte 1 st p_MethodData md st - | Ctor md -> + | Ctor md -> p_byte 2 st p_CtorData md st diff --git a/src/fsharp/QuotationPickler.fsi b/src/fsharp/QuotationPickler.fsi index 12c599342a9..0767709238d 100644 --- a/src/fsharp/QuotationPickler.fsi +++ b/src/fsharp/QuotationPickler.fsi @@ -4,22 +4,26 @@ module internal FSharp.Compiler.QuotationPickler #nowarn "1178" // The struct, record or union type 'internal_instr_extension' is not structurally comparable because the type -type TypeData +open Internal.Utilities +open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Bytes +open FSharp.Compiler +open FSharp.Compiler.Lib -type TypeVarData = { tvName: string } +type TypeData +type TypeVarData = { tvName: string } type NamedTypeData = /// Indicates an F# 4.0+ reference into the supplied table of type definition references, ultimately resolved by TypeRef/TypeDef data | Idx of int /// Indicates an F# 3.0+ reference to a named type in an assembly loaded by name - | Named of tcName: string * tcAssembly: string + | Named of (* tcName: *) string * (* tcAssembly: *) string -val mkVarTy : int -> TypeData +val mkVarTy : int -> TypeData val mkFunTy : (TypeData * TypeData) -> TypeData - val mkArrayTy : (int * TypeData ) -> TypeData - val mkILNamedTy : (NamedTypeData * TypeData list) -> TypeData type ExprData @@ -27,19 +31,19 @@ type ExprData type VarData type CtorData = - { ctorParent: NamedTypeData - ctorArgTypes: TypeData list } + { ctorParent: NamedTypeData; + ctorArgTypes: TypeData list; } type MethodData = - { methParent: NamedTypeData - methName: string - methArgTypes: TypeData list - methRetType: TypeData + { methParent: NamedTypeData; + methName: string; + methArgTypes: TypeData list; + methRetType: TypeData; numGenericArgs: int } type ModuleDefnData = - { Module: NamedTypeData - Name: string + { Module: NamedTypeData; + Name: string; IsProperty: bool } type MethodBaseData = diff --git a/src/fsharp/QuotationTranslator.fs b/src/fsharp/QuotationTranslator.fs index 166d62a0b6f..78dc40e9c11 100644 --- a/src/fsharp/QuotationTranslator.fs +++ b/src/fsharp/QuotationTranslator.fs @@ -3,21 +3,22 @@ module internal FSharp.Compiler.QuotationTranslator open Internal.Utilities -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text +open FSharp.Compiler.Lib +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.TcGlobals open System.Collections.Generic +open System.Collections.Immutable module QP = FSharp.Compiler.QuotationPickler @@ -162,7 +163,7 @@ let BindFlatVals env vs = List.fold BindVal env vs // fold left-to-right because exception InvalidQuotedTerm of exn -exception IgnoringPartOfQuotedTermWarning of string * range +exception IgnoringPartOfQuotedTermWarning of string * Range.range let wfail e = raise (InvalidQuotedTerm e) @@ -1087,8 +1088,6 @@ and ConvDecisionTree cenv env tgs typR x = | _ -> let ty = tyOfExpr cenv.g e1 let eq = mkCallEqualsOperator cenv.g m ty e1 (Expr.Const (Const.Zero, m, ty)) - // no need to generate witnesses for generated equality operation calls, see https://github.com/dotnet/fsharp/issues/10389 - let env = { env with suppressWitnesses = true } let eqR = ConvExpr cenv env eq QP.mkCond (eqR, ConvDecisionTree cenv env tgs typR dtree, acc) @@ -1245,7 +1244,7 @@ let ConvMethodBase cenv env (methName, v: Val) = let numEnclTypeArgs = vref.MemberApparentEntity.TyparsNoRange.Length let argTys = argInfos |> List.concat |> List.map fst - let isNewObj = (vspr.MemberFlags.MemberKind = SynMemberKind.Constructor) + let isNewObj = (vspr.MemberFlags.MemberKind = MemberKind.Constructor) // The signature types are w.r.t. to the formal context let envinner = BindFormalTypars env tps diff --git a/src/fsharp/QuotationTranslator.fsi b/src/fsharp/QuotationTranslator.fsi index c6f3bcd48e5..c140beb1639 100755 --- a/src/fsharp/QuotationTranslator.fsi +++ b/src/fsharp/QuotationTranslator.fsi @@ -6,12 +6,12 @@ module internal FSharp.Compiler.QuotationTranslator open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.Import -open FSharp.Compiler.Text +open FSharp.Compiler.Range open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypedTree exception InvalidQuotedTerm of exn -exception IgnoringPartOfQuotedTermWarning of string * range +exception IgnoringPartOfQuotedTermWarning of string * Range.range [] type IsReflectedDefinition = diff --git a/src/fsharp/ReferenceResolver.fs b/src/fsharp/ReferenceResolver.fs index c5e70fd0632..23f68bf0029 100644 --- a/src/fsharp/ReferenceResolver.fs +++ b/src/fsharp/ReferenceResolver.fs @@ -1,63 +1,60 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.CodeAnalysis +namespace FSharp.Compiler -exception internal LegacyResolutionFailure +module public ReferenceResolver = -[] -type LegacyResolutionEnvironment = - /// Indicates a script or source being edited or compiled. Uses reference assemblies (not implementation assemblies). - | EditingOrCompilation of isEditing: bool + exception internal ResolutionFailure - /// Indicates a script or source being dynamically compiled and executed. Uses implementation assemblies. - | CompilationAndEvaluation + [] + type ResolutionEnvironment = + /// Indicates a script or source being edited or compiled. Uses reference assemblies (not implementation assemblies). + | EditingOrCompilation of isEditing: bool -type LegacyResolvedFile = - { - /// Item specification. - itemSpec:string + /// Indicates a script or source being dynamically compiled and executed. Uses implementation assemblies. + | CompilationAndEvaluation - /// Prepare textual information about where the assembly was resolved from, used for tooltip output - prepareToolTip: string * string -> string + type ResolvedFile = + { + /// Item specification. + itemSpec:string - /// Round-tripped baggage - baggage:string - } + /// Prepare textual information about where the assembly was resolved from, used for tooltip output + prepareToolTip: string * string -> string - override this.ToString() = sprintf "LegacyResolvedFile(%s)" this.itemSpec + /// Round-tripped baggage + baggage:string + } -[] -type internal ILegacyReferenceResolver = - /// Get the "v4.5.1"-style moniker for the highest installed .NET Framework version. - /// This is the value passed back to Resolve if no explicit "mscorlib" has been given. - /// - /// Note: If an explicit "mscorlib" is given, then --noframework is being used, and the whole ReferenceResolver logic is essentially - /// unused. However in the future an option may be added to allow an explicit specification of - /// a .NET Framework version to use for scripts. - abstract HighestInstalledNetFrameworkVersion : unit -> string - - /// Get the Reference Assemblies directory for the .NET Framework (on Windows) - /// This is added to the default resolution path for - /// design-time compilations. - abstract DotNetFrameworkReferenceAssembliesRootDirectory : string - - /// Perform assembly resolution on the given references under the given conditions - abstract Resolve : - resolutionEnvironment: LegacyResolutionEnvironment * - // The actual reference paths or assembly name text, plus baggage - references:(string (* baggage *) * string)[] * - // e.g. v4.5.1 - targetFrameworkVersion:string * - targetFrameworkDirectories:string list * - targetProcessorArchitecture:string * - fsharpCoreDir:string * - explicitIncludeDirs:string list * - implicitIncludeDir:string * - logMessage:(string->unit) * - logDiagnostic:(bool -> string -> string -> unit) - -> LegacyResolvedFile[] - -[] -type LegacyReferenceResolver(impl:ILegacyReferenceResolver) = - member internal _.Impl = impl + override this.ToString() = sprintf "ResolvedFile(%s)" this.itemSpec + [] + type Resolver = + /// Get the "v4.5.1"-style moniker for the highest installed .NET Framework version. + /// This is the value passed back to Resolve if no explicit "mscorlib" has been given. + /// + /// Note: If an explicit "mscorlib" is given, then --noframework is being used, and the whole ReferenceResolver logic is essentially + /// unused. However in the future an option may be added to allow an explicit specification of + /// a .NET Framework version to use for scripts. + abstract HighestInstalledNetFrameworkVersion : unit -> string + + /// Get the Reference Assemblies directory for the .NET Framework (on Windows) + /// This is added to the default resolution path for + /// design-time compilations. + abstract DotNetFrameworkReferenceAssembliesRootDirectory : string + + /// Perform assembly resolution on the given references under the given conditions + abstract Resolve : + resolutionEnvironment: ResolutionEnvironment * + // The actual reference paths or assembly name text, plus baggage + references:(string (* baggage *) * string)[] * + // e.g. v4.5.1 + targetFrameworkVersion:string * + targetFrameworkDirectories:string list * + targetProcessorArchitecture:string * + fsharpCoreDir:string * + explicitIncludeDirs:string list * + implicitIncludeDir:string * + logMessage:(string->unit) * + logDiagnostic:(bool -> string -> string -> unit) + -> ResolvedFile[] diff --git a/src/fsharp/ReferenceResolver.fsi b/src/fsharp/ReferenceResolver.fsi index 59e072495a7..fd295cdf34f 100644 --- a/src/fsharp/ReferenceResolver.fsi +++ b/src/fsharp/ReferenceResolver.fsi @@ -1,64 +1,58 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.CodeAnalysis +namespace FSharp.Compiler -open System +module public ReferenceResolver = -exception internal LegacyResolutionFailure + exception internal ResolutionFailure -[] -type internal LegacyResolutionEnvironment = - /// Indicates a script or source being edited or compiled. Uses reference assemblies (not implementation assemblies). - | EditingOrCompilation of isEditing: bool + [] + type ResolutionEnvironment = + /// Indicates a script or source being edited or compiled. Uses reference assemblies (not implementation assemblies). + | EditingOrCompilation of isEditing: bool - /// Indicates a script or source being dynamically compiled and executed. Uses implementation assemblies. - | CompilationAndEvaluation + /// Indicates a script or source being dynamically compiled and executed. Uses implementation assemblies. + | CompilationAndEvaluation -type internal LegacyResolvedFile = - { - /// Item specification. - itemSpec:string + type ResolvedFile = + { + /// Item specification. + itemSpec:string - /// Prepare textual information about where the assembly was resolved from, used for tooltip output - prepareToolTip: string * string -> string + /// Prepare textual information about where the assembly was resolved from, used for tooltip output + prepareToolTip: string * string -> string - /// Round-tripped baggage - baggage:string - } + /// Round-tripped baggage + baggage:string + } -[] -type internal ILegacyReferenceResolver = - /// Get the "v4.5.1"-style moniker for the highest installed .NET Framework version. - /// This is the value passed back to Resolve if no explicit "mscorlib" has been given. - /// - /// Note: If an explicit "mscorlib" is given, then --noframework is being used, and the whole ReferenceResolver logic is essentially - /// unused. However in the future an option may be added to allow an explicit specification of - /// a .NET Framework version to use for scripts. - abstract member HighestInstalledNetFrameworkVersion: unit -> string - - /// Perform assembly resolution on the given references under the given conditions - abstract member Resolve: - resolutionEnvironment: LegacyResolutionEnvironment * - references:(string * string) [] * - targetFrameworkVersion:string * - targetFrameworkDirectories:string list * - targetProcessorArchitecture:string * - fsharpCoreDir:string * - explicitIncludeDirs:string list * - implicitIncludeDir:string * - logMessage:(string -> unit) * - logDiagnostic:(bool -> string -> string -> unit) -> - LegacyResolvedFile [] - - /// Get the Reference Assemblies directory for the .NET Framework (on Windows) - /// This is added to the default resolution path for - /// design-time compilations. - abstract member DotNetFrameworkReferenceAssembliesRootDirectory: string + [] + type Resolver = + /// Get the "v4.5.1"-style moniker for the highest installed .NET Framework version. + /// This is the value passed back to Resolve if no explicit "mscorlib" has been given. + /// + /// Note: If an explicit "mscorlib" is given, then --noframework is being used, and the whole ReferenceResolver logic is essentially + /// unused. However in the future an option may be added to allow an explicit specification of + /// a .NET Framework version to use for scripts. + abstract member HighestInstalledNetFrameworkVersion: unit -> string + + /// Perform assembly resolution on the given references under the given conditions + abstract member Resolve: + resolutionEnvironment:ResolutionEnvironment * + references:(string * string) [] * + targetFrameworkVersion:string * + targetFrameworkDirectories:string list * + targetProcessorArchitecture:string * + fsharpCoreDir:string * + explicitIncludeDirs:string list * + implicitIncludeDir:string * + logMessage:(string -> unit) * + logDiagnostic:(bool -> string -> string -> unit) -> + ResolvedFile [] + + /// Get the Reference Assemblies directory for the .NET Framework (on Windows) + /// This is added to the default resolution path for + /// design-time compilations. + abstract member DotNetFrameworkReferenceAssembliesRootDirectory: string -// Note, two implementations of this are provided, and no further implementations can be added from -// outside FSharp.Compiler.Service -[] -type LegacyReferenceResolver = - internal new: impl: ILegacyReferenceResolver -> LegacyReferenceResolver - member internal Impl: ILegacyReferenceResolver diff --git a/src/fsharp/ScriptClosure.fs b/src/fsharp/ScriptClosure.fs index c7fa44a6b26..e08910609e3 100644 --- a/src/fsharp/ScriptClosure.fs +++ b/src/fsharp/ScriptClosure.fs @@ -7,32 +7,33 @@ open System open System.Collections.Generic open System.IO open System.Text -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras + open FSharp.Compiler -open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerDiagnostics open FSharp.Compiler.CompilerImports -open FSharp.Compiler.DependencyManager -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.DotNetFrameworkDependencies open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.IO -open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Lib open FSharp.Compiler.ParseAndCheckInputs -open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Range +open FSharp.Compiler.ReferenceResolver open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range + +open Microsoft.DotNet.DependencyManager [] -type LoadClosureInput = +type LoadClosureInput = { FileName: string SyntaxTree: ParsedInput option - ParseDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list - MetaCommandDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list } + ParseDiagnostics: (PhasedDiagnostic * bool) list + MetaCommandDiagnostics: (PhasedDiagnostic * bool) list } [] -type LoadClosure = +type LoadClosure = { /// The source files along with the ranges of the #load positions in each file. SourceFiles: (string * range list) list @@ -42,12 +43,6 @@ type LoadClosure = /// The resolved pacakge references along with the ranges of the #r positions in each file. PackageReferences: (range * string list)[] - /// Whether we're decided to use .NET Framework analysis for this script - UseDesktopFramework: bool - - /// Was the SDK directory override given? - SdkDirOverride: string option - /// The list of references that were not resolved during load closure. These may still be extension references. UnresolvedReferences: UnresolvedAssemblyReference list @@ -61,14 +56,14 @@ type LoadClosure = NoWarns: (string * range list) list /// Diagnostics seen while processing resolutions - ResolutionDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list + ResolutionDiagnostics: (PhasedDiagnostic * bool) list /// Diagnostics seen while parsing root of closure - AllRootFileDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list + AllRootFileDiagnostics: (PhasedDiagnostic * bool) list /// Diagnostics seen while processing the compiler options implied root of closure - LoadClosureRootFileDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list - } + LoadClosureRootFileDiagnostics: (PhasedDiagnostic * bool) list + } [] @@ -77,23 +72,24 @@ type CodeContext = | Compilation // in fsc.exe | Editing // in VS -module ScriptPreprocessClosure = - +module ScriptPreprocessClosure = + open Internal.Utilities.Text.Lexing + /// Represents an input to the closure finding process - type ClosureSource = ClosureSource of filename: string * referenceRange: range * sourceText: ISourceText * parseRequired: bool - + type ClosureSource = ClosureSource of filename: string * referenceRange: range * sourceText: ISourceText * parseRequired: bool + /// Represents an output of the closure finding process - type ClosureFile = ClosureFile of string * range * ParsedInput option * (PhasedDiagnostic * FSharpDiagnosticSeverity) list * (PhasedDiagnostic * FSharpDiagnosticSeverity) list * (string * range) list // filename, range, errors, warnings, nowarns + type ClosureFile = ClosureFile of string * range * ParsedInput option * (PhasedDiagnostic * bool) list * (PhasedDiagnostic * bool) list * (string * range) list // filename, range, errors, warnings, nowarns type Observed() = let seen = System.Collections.Generic.Dictionary<_, bool>() - member ob.SetSeen check = - if not(seen.ContainsKey check) then + member ob.SetSeen check = + if not(seen.ContainsKey check) then seen.Add(check, true) - + member ob.HaveSeen check = seen.ContainsKey check - + /// Parse a script from source. let ParseScriptText (filename: string, sourceText: ISourceText, tcConfig: TcConfig, codeContext, @@ -103,126 +99,96 @@ module ScriptPreprocessClosure = // fsi.exe -- !COMPILED\INTERACTIVE // Language service // .fs -- EDITING + COMPILED\!INTERACTIVE - // .fsx -- EDITING + !COMPILED\INTERACTIVE + // .fsx -- EDITING + !COMPILED\INTERACTIVE let defines = - match codeContext with + match codeContext with | CodeContext.CompilationAndEvaluation -> ["INTERACTIVE"] | CodeContext.Compilation -> ["COMPILED"] | CodeContext.Editing -> "EDITING" :: (if IsScript filename then ["INTERACTIVE"] else ["COMPILED"]) let isFeatureSupported featureId = tcConfig.langVersion.SupportsFeature featureId - let lexbuf = UnicodeLexing.SourceTextAsLexbuf(true, isFeatureSupported, sourceText) + let lexbuf = UnicodeLexing.SourceTextAsLexbuf(isFeatureSupported, sourceText) let isLastCompiland = (IsScript filename), tcConfig.target.IsExe // The root compiland is last in the list of compilands. - ParseOneInputLexbuf (tcConfig, lexResourceManager, defines, lexbuf, filename, isLastCompiland, errorLogger) + ParseOneInputLexbuf (tcConfig, lexResourceManager, defines, lexbuf, filename, isLastCompiland, errorLogger) /// Create a TcConfig for load closure starting from a single .fsx file - let CreateScriptTextTcConfig - (legacyReferenceResolver, defaultFSharpBinariesDir, - filename: string, codeContext, - useSimpleResolution, useFsiAuxLib, - basicReferences, applyCommandLineArgs, - assumeDotNetFramework, useSdkRefs, sdkDirOverride, - tryGetMetadataSnapshot, reduceMemoryUsage) = + let CreateScriptTextTcConfig + (legacyReferenceResolver, defaultFSharpBinariesDir, + filename: string, codeContext, + useSimpleResolution, useFsiAuxLib, + basicReferences, applyCommandLineArgs, + assumeDotNetFramework, useSdkRefs, + tryGetMetadataSnapshot, reduceMemoryUsage) = let projectDir = Path.GetDirectoryName filename let isInteractive = (codeContext = CodeContext.CompilationAndEvaluation) let isInvalidationSupported = (codeContext = CodeContext.Editing) - let rangeForErrors = mkFirstLineOfFile filename - let tcConfigB = - TcConfigBuilder.CreateNew(legacyReferenceResolver, - defaultFSharpBinariesDir, - reduceMemoryUsage, - projectDir, - isInteractive, - isInvalidationSupported, - CopyFSharpCoreFlag.No, - tryGetMetadataSnapshot, - sdkDirOverride, - rangeForErrors) - tcConfigB.SetPrimaryAssembly (if assumeDotNetFramework then PrimaryAssembly.Mscorlib else PrimaryAssembly.System_Runtime) - tcConfigB.SetUseSdkRefs useSdkRefs + let tcConfigB = + TcConfigBuilder.CreateNew + (legacyReferenceResolver, defaultFSharpBinariesDir, reduceMemoryUsage, projectDir, + isInteractive, isInvalidationSupported, CopyFSharpCoreFlag.No, + tryGetMetadataSnapshot) applyCommandLineArgs tcConfigB - // Work out the references for the script in its location. This may produce diagnostics. - let scriptDefaultReferencesDiagnostics = - - match basicReferences with - | None -> - let errorLogger = CapturingErrorLogger("ScriptDefaultReferences") - use unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger) - let references, useDotNetFramework = tcConfigB.FxResolver.GetDefaultReferences (useFsiAuxLib) - - // If the user requested .NET Core scripting but something went wrong and we reverted to - // .NET Framework scripting then we must adjust both the primaryAssembly and fxResolver - if useDotNetFramework <> assumeDotNetFramework then - tcConfigB.SetPrimaryAssembly (if useDotNetFramework then PrimaryAssembly.Mscorlib else PrimaryAssembly.System_Runtime) - - // Add script references - for reference in references do - tcConfigB.AddReferencedAssemblyByPath(range0, reference) - - errorLogger.Diagnostics - - | Some (rs, diagnostics) -> - for m, reference in rs do - tcConfigB.AddReferencedAssemblyByPath(m, reference) - diagnostics + match basicReferences with + | None -> (basicReferencesForScriptLoadClosure useFsiAuxLib useSdkRefs assumeDotNetFramework) |> 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 <- - match codeContext with - | CodeContext.Editing -> LegacyResolutionEnvironment.EditingOrCompilation true - | CodeContext.Compilation -> LegacyResolutionEnvironment.EditingOrCompilation false - | CodeContext.CompilationAndEvaluation -> LegacyResolutionEnvironment.CompilationAndEvaluation - tcConfigB.framework <- false + match codeContext with + | CodeContext.Editing -> ResolutionEnvironment.EditingOrCompilation true + | CodeContext.Compilation -> ResolutionEnvironment.EditingOrCompilation false + | CodeContext.CompilationAndEvaluation -> ResolutionEnvironment.CompilationAndEvaluation + tcConfigB.framework <- false tcConfigB.useSimpleResolution <- useSimpleResolution // Indicates that there are some references not in basicReferencesForScriptLoadClosure which should // be added conditionally once the relevant version of mscorlib.dll has been detected. tcConfigB.implicitlyResolveAssemblies <- false - tcConfigB.SetUseSdkRefs useSdkRefs + tcConfigB.useSdkRefs <- useSdkRefs - TcConfig.Create(tcConfigB, validate=true), scriptDefaultReferencesDiagnostics + TcConfig.Create(tcConfigB, validate=true) - let ClosureSourceOfFilename(filename, m, inputCodePage, parseRequired) = + let ClosureSourceOfFilename(filename, m, inputCodePage, parseRequired) = try let filename = FileSystem.GetFullPathShim filename - use stream = FileSystem.OpenFileForReadShim(filename) - use reader = - match inputCodePage with + use stream = FileSystem.FileStreamReadShim filename + use reader = + match inputCodePage with | None -> new StreamReader(stream, true) - | Some (n: int) -> new StreamReader(stream, Encoding.GetEncoding n) + | Some (n: int) -> new StreamReader(stream, Encoding.GetEncoding n) let source = reader.ReadToEnd() [ClosureSource(filename, m, SourceText.ofString source, parseRequired)] - with e -> - errorRecovery e m + with e -> + errorRecovery e m [] - + let ApplyMetaCommandsFromInputToTcConfigAndGatherNoWarn (tcConfig: TcConfig, inp: ParsedInput, - pathOfMetaCommandSource, dependencyProvider) = + pathOfMetaCommandSource, dependencyProvider) = - let tcConfigB = tcConfig.CloneToBuilder() - let mutable nowarns = [] + let tcConfigB = tcConfig.CloneToBuilder() + let mutable nowarns = [] let getWarningNumber = fun () (m, s) -> nowarns <- (s, m) :: nowarns let addReferenceDirective = fun () (m, s, directive) -> tcConfigB.AddReferenceDirective(dependencyProvider, m, s, directive) let addLoadedSource = fun () (m, s) -> tcConfigB.AddLoadedSource(m, s, pathOfMetaCommandSource) - try + try ProcessMetaCommandsFromInput (getWarningNumber, addReferenceDirective, addLoadedSource) (tcConfigB, inp, pathOfMetaCommandSource, ()) with ReportedError _ -> // Recover by using whatever did end up in the tcConfig () - + try TcConfig.Create(tcConfigB, validate=false), nowarns with ReportedError _ -> // Recover by using a default TcConfig. - let tcConfigB = tcConfig.CloneToBuilder() + let tcConfigB = tcConfig.CloneToBuilder() TcConfig.Create(tcConfigB, validate=false), nowarns let FindClosureFiles - (mainFile, _m, closureSources, origTcConfig:TcConfig, + (mainFile, _m, closureSources, origTcConfig:TcConfig, codeContext, lexResourceManager: Lexhelp.LexResourceManager, dependencyProvider: DependencyProvider) = let mutable tcConfig = origTcConfig @@ -261,32 +227,23 @@ module ScriptPreprocessClosure = | Directive.Include -> "i" let packageManagerTextLines = packageManagerLines |> List.map(fun l -> directive l.Directive, l.Line) - let tfm, rid = tcConfig.FxResolver.GetTfmAndRid() - let result = dependencyProvider.Resolve(dependencyManager, ".fsx", packageManagerTextLines, reportError, tfm, rid, tcConfig.implicitIncludeDir, mainFile, scriptName) + let result = dependencyProvider.Resolve(dependencyManager, ".fsx", packageManagerTextLines, reportError, executionTfm, executionRid, tcConfig.implicitIncludeDir, mainFile, scriptName) if result.Success then // Resolution produced no errors //Write outputs in F# Interactive and compiler - if codeContext <> CodeContext.Editing then + if codeContext <> CodeContext.Editing then for line in result.StdOut do Console.Out.WriteLine(line) for line in result.StdError do Console.Error.WriteLine(line) - packageReferences.[m] <- [ for script in result.SourceFiles do yield! FileSystem.OpenFileForReadShim(script).ReadLines() ] + packageReferences.[m] <- [ for script in result.SourceFiles do yield! File.ReadAllLines script ] if not (Seq.isEmpty result.Roots) then let tcConfigB = tcConfig.CloneToBuilder() - for folder in result.Roots do + for folder in result.Roots do tcConfigB.AddIncludePath(m, folder, "") tcConfigB.packageManagerLines <- PackageManagerLine.SetLinesAsProcessed packageManagerKey tcConfigB.packageManagerLines tcConfig <- TcConfig.Create(tcConfigB, validate=false) - - if not (Seq.isEmpty result.Resolutions) then - let tcConfigB = tcConfig.CloneToBuilder() - for resolution in result.Resolutions do - tcConfigB.AddReferencedAssemblyByPath(m, resolution) - tcConfig <- TcConfig.Create(tcConfigB, validate = false) - for script in result.SourceFiles do - use stream = FileSystem.OpenFileForReadShim(script) - let scriptText = stream.ReadAllText() + let scriptText = File.ReadAllText script loadScripts.Add script |> ignore let iSourceText = SourceText.ofString scriptText yield! loop (ClosureSource(script, m, iSourceText, true)) @@ -299,44 +256,49 @@ module ScriptPreprocessClosure = // Resolution produced errors update packagerManagerLines entries to note these failure // failed resolutions will no longer be considered let tcConfigB = tcConfig.CloneToBuilder() - tcConfigB.packageManagerLines <- PackageManagerLine.RemoveUnprocessedLines packageManagerKey tcConfigB.packageManagerLines + tcConfigB.packageManagerLines <- PackageManagerLine.RemoveUnprocessedLines packageManagerKey tcConfigB.packageManagerLines tcConfig <- TcConfig.Create(tcConfigB, validate=false)] else [] - and loop (ClosureSource(filename, m, sourceText, parseRequired)) = + and loop (ClosureSource(filename, m, sourceText, parseRequired)) = [ if not (observedSources.HaveSeen(filename)) then observedSources.SetSeen(filename) //printfn "visiting %s" filename - if IsScript filename || parseRequired then + if IsScript filename || parseRequired then let parseResult, parseDiagnostics = let errorLogger = CapturingErrorLogger("FindClosureParse") use _unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger) - let result = ParseScriptText (filename, sourceText, tcConfig, codeContext, lexResourceManager, errorLogger) + let result = ParseScriptText (filename, sourceText, tcConfig, codeContext, lexResourceManager, errorLogger) result, errorLogger.Diagnostics - let errorLogger = CapturingErrorLogger("FindClosureMetaCommands") - use _unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger) - let pathOfMetaCommandSource = Path.GetDirectoryName filename - let preSources = tcConfig.GetAvailableLoadedSources() + match parseResult with + | Some parsedScriptAst -> + let errorLogger = CapturingErrorLogger("FindClosureMetaCommands") + use _unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger) + let pathOfMetaCommandSource = Path.GetDirectoryName filename + let preSources = tcConfig.GetAvailableLoadedSources() - let tcConfigResult, noWarns = ApplyMetaCommandsFromInputToTcConfigAndGatherNoWarn (tcConfig, parseResult, pathOfMetaCommandSource, dependencyProvider) - tcConfig <- tcConfigResult // We accumulate the tcConfig in order to collect assembly references + let tcConfigResult, noWarns = ApplyMetaCommandsFromInputToTcConfigAndGatherNoWarn (tcConfig, parsedScriptAst, pathOfMetaCommandSource, dependencyProvider) + tcConfig <- tcConfigResult // We accumulate the tcConfig in order to collect assembly references - yield! resolveDependencyManagerSources filename + yield! resolveDependencyManagerSources filename - let postSources = tcConfig.GetAvailableLoadedSources() - let sources = if preSources.Length < postSources.Length then postSources.[preSources.Length..] else [] + let postSources = tcConfig.GetAvailableLoadedSources() + let sources = if preSources.Length < postSources.Length then postSources.[preSources.Length..] else [] - yield! resolveDependencyManagerSources filename - 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, [], [], []) - yield ClosureFile(filename, m, Some parseResult, parseDiagnostics, errorLogger.Diagnostics, noWarns) + yield! resolveDependencyManagerSources filename + 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, [], [], []) + yield ClosureFile(filename, m, Some parsedScriptAst, parseDiagnostics, errorLogger.Diagnostics, noWarns) - else + | None -> + printfn "yielding source %s (failed parse)" filename + yield ClosureFile(filename, m, None, parseDiagnostics, [], []) + else // Don't traverse into .fs leafs. printfn "yielding non-script source %s" filename yield ClosureFile(filename, m, None, [], [], []) ] @@ -344,25 +306,26 @@ module ScriptPreprocessClosure = let sources = closureSources |> List.collect loop let packageReferences = packageReferences |> Seq.map (fun kvp -> kvp.Key, kvp.Value) |> Seq.toArray sources, tcConfig, packageReferences - + + /// Reduce the full directive closure into LoadClosure - let GetLoadClosure(rootFilename, closureFiles, tcConfig: TcConfig, codeContext, packageReferences, earlierDiagnostics) = - - // Mark the last file as isLastCompiland. + let GetLoadClosure(ctok, rootFilename, closureFiles, tcConfig: TcConfig, codeContext, packageReferences) = + + // Mark the last file as isLastCompiland. let closureFiles = - if isNil closureFiles then - closureFiles - else + 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, _))), - parseDiagnostics, metaDiagnostics, nowarns) -> + (filename, m, + Some(ParsedInput.ImplFile (ParsedImplFileInput (name, isScript, qualNameOfFile, scopedPragmas, hashDirectives, implFileFlags, _))), + parseDiagnostics, metaDiagnostics, nowarns) -> let isLastCompiland = (true, tcConfig.target.IsExe) rest @ [ClosureFile - (filename, m, - Some(ParsedInput.ImplFile (ParsedImplFileInput (name, isScript, qualNameOfFile, scopedPragmas, hashDirectives, implFileFlags, isLastCompiland))), + (filename, m, + Some(ParsedInput.ImplFile (ParsedImplFileInput (name, isScript, qualNameOfFile, scopedPragmas, hashDirectives, implFileFlags, isLastCompiland))), parseDiagnostics, metaDiagnostics, nowarns)] | _ -> closureFiles @@ -370,7 +333,7 @@ module ScriptPreprocessClosure = // Get all source files. let sourceFiles = [ for (ClosureFile(filename, m, _, _, _, _)) in closureFiles -> (filename, m) ] - let sourceInputs = + let sourceInputs = [ for (ClosureFile(filename, _, input, parseDiagnostics, metaDiagnostics, _nowarns)) in closureFiles -> ({ FileName=filename SyntaxTree=input @@ -380,25 +343,25 @@ module ScriptPreprocessClosure = let globalNoWarns = closureFiles |> List.collect (fun (ClosureFile(_, _, _, _, _, noWarns)) -> noWarns) // Resolve all references. - let references, unresolvedReferences, resolutionDiagnostics = - let errorLogger = CapturingErrorLogger("GetLoadClosure") - + let references, unresolvedReferences, resolutionDiagnostics = + let errorLogger = CapturingErrorLogger("GetLoadClosure") + use unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger) - let references, unresolvedReferences = TcAssemblyResolutions.GetAssemblyResolutionInformation(tcConfig) + let references, unresolvedReferences = TcAssemblyResolutions.GetAssemblyResolutionInformation(ctok, tcConfig) let references = references |> List.map (fun ar -> ar.resolvedPath, ar) references, unresolvedReferences, errorLogger.Diagnostics // Root errors and warnings - look at the last item in the closureFiles list - let loadClosureRootDiagnostics, allRootDiagnostics = + let loadClosureRootDiagnostics, allRootDiagnostics = match List.rev closureFiles with - | ClosureFile(_, _, _, parseDiagnostics, metaDiagnostics, _) :: _ -> - (earlierDiagnostics @ metaDiagnostics @ resolutionDiagnostics), - (parseDiagnostics @ earlierDiagnostics @ metaDiagnostics @ resolutionDiagnostics) + | ClosureFile(_, _, _, parseDiagnostics, metaDiagnostics, _) :: _ -> + (metaDiagnostics @ resolutionDiagnostics), + (parseDiagnostics @ metaDiagnostics @ resolutionDiagnostics) | _ -> [], [] // When no file existed. - + let isRootRange exn = match GetRangeOfDiagnostic exn with - | Some m -> + | Some m -> // Return true if the error was *not* from a #load-ed file. let isArgParameterWhileNotEditing = (codeContext <> CodeContext.Editing) && (Range.equals m range0 || Range.equals m rangeStartup || Range.equals m rangeCmdArgs) let isThisFileName = (0 = String.Compare(rootFilename, m.FileName, StringComparison.OrdinalIgnoreCase)) @@ -407,13 +370,11 @@ module ScriptPreprocessClosure = // Filter out non-root errors and warnings let allRootDiagnostics = allRootDiagnostics |> List.filter (fst >> isRootRange) - + let result: LoadClosure = { SourceFiles = List.groupBy fst sourceFiles |> List.map (map2Of2 (List.map snd)) References = List.groupBy fst references |> List.map (map2Of2 (List.map snd)) PackageReferences = packageReferences - UseDesktopFramework = (tcConfig.primaryAssembly = PrimaryAssembly.Mscorlib) - SdkDirOverride = tcConfig.sdkDirOverride UnresolvedReferences = unresolvedReferences Inputs = sourceInputs NoWarns = List.groupBy fst globalNoWarns |> List.map (map2Of2 (List.map snd)) @@ -426,10 +387,10 @@ module ScriptPreprocessClosure = /// Given source text, find the full load closure. Used from service.fs, when editing a script file let GetFullClosureOfScriptText - (legacyReferenceResolver, defaultFSharpBinariesDir, - filename, sourceText, codeContext, - useSimpleResolution, useFsiAuxLib, useSdkRefs, sdkDirOverride, - lexResourceManager: Lexhelp.LexResourceManager, + (ctok, legacyReferenceResolver, defaultFSharpBinariesDir, + filename, sourceText, codeContext, + useSimpleResolution, useFsiAuxLib, useSdkRefs, + lexResourceManager: Lexhelp.LexResourceManager, applyCommandLineArgs, assumeDotNetFramework, tryGetMetadataSnapshot, reduceMemoryUsage, dependencyProvider) = @@ -437,61 +398,61 @@ module ScriptPreprocessClosure = // // 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, assumeDotNetFramework, scriptDefaultReferencesDiagnostics = - let tcConfig, scriptDefaultReferencesDiagnostics = - CreateScriptTextTcConfig(legacyReferenceResolver, defaultFSharpBinariesDir, - filename, codeContext, useSimpleResolution, - useFsiAuxLib, None, applyCommandLineArgs, assumeDotNetFramework, - useSdkRefs, sdkDirOverride, tryGetMetadataSnapshot, reduceMemoryUsage) - - let resolutions0, _unresolvedReferences = TcAssemblyResolutions.GetAssemblyResolutionInformation(tcConfig) + let references0 = + let tcConfig = + CreateScriptTextTcConfig(legacyReferenceResolver, defaultFSharpBinariesDir, + filename, codeContext, useSimpleResolution, + useFsiAuxLib, None, applyCommandLineArgs, assumeDotNetFramework, + useSdkRefs, tryGetMetadataSnapshot, reduceMemoryUsage) + + let resolutions0, _unresolvedReferences = TcAssemblyResolutions.GetAssemblyResolutionInformation(ctok, tcConfig) let references0 = resolutions0 |> List.map (fun r->r.originalReference.Range, r.resolvedPath) |> Seq.distinct |> List.ofSeq - references0, tcConfig.assumeDotNetFramework, scriptDefaultReferencesDiagnostics + references0 - let tcConfig, scriptDefaultReferencesDiagnostics = - CreateScriptTextTcConfig(legacyReferenceResolver, defaultFSharpBinariesDir, filename, - codeContext, useSimpleResolution, useFsiAuxLib, Some (references0, scriptDefaultReferencesDiagnostics), - applyCommandLineArgs, assumeDotNetFramework, useSdkRefs, sdkDirOverride, + let tcConfig = + CreateScriptTextTcConfig(legacyReferenceResolver, defaultFSharpBinariesDir, filename, + codeContext, useSimpleResolution, useFsiAuxLib, Some references0, + applyCommandLineArgs, assumeDotNetFramework, useSdkRefs, tryGetMetadataSnapshot, reduceMemoryUsage) let closureSources = [ClosureSource(filename, range0, sourceText, true)] let closureFiles, tcConfig, packageReferences = FindClosureFiles(filename, range0, closureSources, tcConfig, codeContext, lexResourceManager, dependencyProvider) - GetLoadClosure(filename, closureFiles, tcConfig, codeContext, packageReferences, scriptDefaultReferencesDiagnostics) + GetLoadClosure(ctok, filename, closureFiles, tcConfig, codeContext, packageReferences) /// 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, + (ctok, tcConfig:TcConfig, files:(string*range) list, codeContext, lexResourceManager: Lexhelp.LexResourceManager, dependencyProvider) = let mainFile, mainFileRange = List.last files let closureSources = files |> List.collect (fun (filename, m) -> ClosureSourceOfFilename(filename, m,tcConfig.inputCodePage,true)) let closureFiles, tcConfig, packageReferences = FindClosureFiles(mainFile, mainFileRange, closureSources, tcConfig, codeContext, lexResourceManager, dependencyProvider) - GetLoadClosure(mainFile, closureFiles, tcConfig, codeContext, packageReferences, []) + GetLoadClosure(ctok, mainFile, closureFiles, tcConfig, codeContext, packageReferences) type LoadClosure with - /// Analyze a script text and find the closure of its references. - /// Used from FCS, when editing a script file. + /// Analyze a script text and find the closure of its references. + /// Used from FCS, when editing a script file. // /// A temporary TcConfig is created along the way, is why this routine takes so many arguments. We want to be sure to use exactly the /// same arguments as the rest of the application. static member ComputeClosureOfScriptText - (legacyReferenceResolver, defaultFSharpBinariesDir, - filename: string, sourceText: ISourceText, implicitDefines, useSimpleResolution: bool, - useFsiAuxLib, useSdkRefs, sdkDir, lexResourceManager: Lexhelp.LexResourceManager, + (ctok, legacyReferenceResolver, defaultFSharpBinariesDir, + filename: string, sourceText: ISourceText, implicitDefines, useSimpleResolution: bool, + useFsiAuxLib, useSdkRefs, lexResourceManager: Lexhelp.LexResourceManager, applyCompilerOptions, assumeDotNetFramework, tryGetMetadataSnapshot, - reduceMemoryUsage, dependencyProvider) = + reduceMemoryUsage, dependencyProvider) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse ScriptPreprocessClosure.GetFullClosureOfScriptText - (legacyReferenceResolver, defaultFSharpBinariesDir, filename, sourceText, - implicitDefines, useSimpleResolution, useFsiAuxLib, useSdkRefs, sdkDir, lexResourceManager, + (ctok, legacyReferenceResolver, defaultFSharpBinariesDir, filename, sourceText, + implicitDefines, useSimpleResolution, useFsiAuxLib, useSdkRefs, lexResourceManager, applyCompilerOptions, assumeDotNetFramework, tryGetMetadataSnapshot, reduceMemoryUsage, dependencyProvider) /// Analyze a set of script files and find the closure of their references. static member ComputeClosureOfScriptFiles - (tcConfig: TcConfig, files:(string*range) list, implicitDefines, + (ctok, tcConfig: TcConfig, files:(string*range) list, implicitDefines, lexResourceManager: Lexhelp.LexResourceManager, dependencyProvider) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse - ScriptPreprocessClosure.GetFullClosureOfScriptFiles (tcConfig, files, implicitDefines, lexResourceManager, dependencyProvider) + ScriptPreprocessClosure.GetFullClosureOfScriptFiles (ctok, tcConfig, files, implicitDefines, lexResourceManager, dependencyProvider) diff --git a/src/fsharp/ScriptClosure.fsi b/src/fsharp/ScriptClosure.fsi index 6d717a1df71..f5c85d2bfc2 100644 --- a/src/fsharp/ScriptClosure.fsi +++ b/src/fsharp/ScriptClosure.fsi @@ -3,17 +3,16 @@ /// Compute the load closure of a set of script files module internal FSharp.Compiler.ScriptClosure -open Internal.Utilities.Library open FSharp.Compiler open FSharp.Compiler.AbstractIL.ILBinaryReader +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerImports -open FSharp.Compiler.DependencyManager -open FSharp.Compiler.Diagnostics open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Syntax +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.Text +open Microsoft.DotNet.DependencyManager [] type CodeContext = @@ -23,15 +22,10 @@ type CodeContext = [] type LoadClosureInput = - { - FileName: string - + { FileName: string SyntaxTree: ParsedInput option - - ParseDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list - - MetaCommandDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list - } + ParseDiagnostics: (PhasedDiagnostic * bool) list + MetaCommandDiagnostics: (PhasedDiagnostic * bool) list } [] type LoadClosure = @@ -44,12 +38,6 @@ type LoadClosure = /// The resolved pacakge references along with the ranges of the #r positions in each file. PackageReferences: (range * string list)[] - /// Whether we're decided to use .NET Framework analysis for this script - UseDesktopFramework: bool - - /// Was the SDK directory override given? - SdkDirOverride: string option - /// The list of references that were not resolved during load closure. UnresolvedReferences: UnresolvedAssemblyReference list @@ -63,13 +51,13 @@ type LoadClosure = NoWarns: (string * range list) list /// Diagnostics seen while processing resolutions - ResolutionDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list + ResolutionDiagnostics: (PhasedDiagnostic * bool) list /// Diagnostics to show for root of closure (used by fsc.fs) - AllRootFileDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list + AllRootFileDiagnostics: (PhasedDiagnostic * bool) list /// Diagnostics seen while processing the compiler options implied root of closure - LoadClosureRootFileDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list } + LoadClosureRootFileDiagnostics: (PhasedDiagnostic * bool) list } /// Analyze a script text and find the closure of its references. /// Used from FCS, when editing a script file. @@ -77,7 +65,8 @@ type LoadClosure = /// A temporary TcConfig is created along the way, is why this routine takes so many arguments. We want to be sure to use exactly the /// same arguments as the rest of the application. static member ComputeClosureOfScriptText: - legacyReferenceResolver: LegacyReferenceResolver * + CompilationThreadToken * + legacyReferenceResolver: ReferenceResolver.Resolver * defaultFSharpBinariesDir: string * filename: string * sourceText: ISourceText * @@ -85,7 +74,6 @@ type LoadClosure = useSimpleResolution: bool * useFsiAuxLib: bool * useSdkRefs: bool * - sdkDir: string option * lexResourceManager: Lexhelp.LexResourceManager * applyCompilerOptions: (TcConfigBuilder -> unit) * assumeDotNetFramework: bool * @@ -97,6 +85,7 @@ type LoadClosure = /// Analyze a set of script files and find the closure of their references. The resulting references are then added to the given TcConfig. /// Used from fsi.fs and fsc.fs, for #load and command line. static member ComputeClosureOfScriptFiles: + CompilationThreadToken * tcConfig:TcConfig * (string * range) list * implicitDefines:CodeContext * diff --git a/src/fsharp/SignatureConformance.fs b/src/fsharp/SignatureConformance.fs index af0fe7fd5fe..b1bd00345e9 100644 --- a/src/fsharp/SignatureConformance.fs +++ b/src/fsharp/SignatureConformance.fs @@ -6,36 +6,33 @@ module internal FSharp.Compiler.SignatureConformance open System.Text -open Internal.Utilities.Collections -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras open FSharp.Compiler -open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.ErrorLogger +open FSharp.Compiler.Lib open FSharp.Compiler.Infos -open FSharp.Compiler.Syntax +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.InfoReader #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping #endif + exception RequiredButNotSpecified of DisplayEnv * ModuleOrNamespaceRef * string * (StringBuilder -> unit) * range -exception ValueNotContained of DisplayEnv * InfoReader * ModuleOrNamespaceRef * Val * Val * (string * string * string -> string) +exception ValueNotContained of DisplayEnv * ModuleOrNamespaceRef * Val * Val * (string * string * string -> string) -exception ConstrNotContained of DisplayEnv * InfoReader * Tycon * UnionCase * UnionCase * (string * string -> string) +exception ConstrNotContained of DisplayEnv * UnionCase * UnionCase * (string * string -> string) -exception ExnconstrNotContained of DisplayEnv * InfoReader * Tycon * Tycon * (string * string -> string) +exception ExnconstrNotContained of DisplayEnv * Tycon * Tycon * (string * string -> string) -exception FieldNotContained of DisplayEnv * InfoReader * Tycon * RecdField * RecdField * (string * string -> string) +exception FieldNotContained of DisplayEnv * RecdField * RecdField * (string * string -> string) exception InterfaceNotRevealed of DisplayEnv * TType * range @@ -140,7 +137,7 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = | TyparConstraint.DefaultsTo(_, _acty, _) -> true | _ -> if not (List.exists (typarConstraintsAEquiv g aenv implTyparCx) sigTypar.Constraints) - then (errorR(Error(FSComp.SR.typrelSigImplNotCompatibleConstraintsDiffer(sigTypar.Name, LayoutRender.showL(NicePrint.layoutTyparConstraint denv (implTypar, implTyparCx))), m)); false) + then (errorR(Error(FSComp.SR.typrelSigImplNotCompatibleConstraintsDiffer(sigTypar.Name, Layout.showL(NicePrint.layoutTyparConstraint denv (implTypar, implTyparCx))), m)); false) else true) && // Check the constraints in the signature are present in the implementation @@ -153,12 +150,12 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = | TyparConstraint.SupportsEquality _ -> true | _ -> if not (List.exists (fun implTyparCx -> typarConstraintsAEquiv g aenv implTyparCx sigTyparCx) implTypar.Constraints) then - (errorR(Error(FSComp.SR.typrelSigImplNotCompatibleConstraintsDifferRemove(sigTypar.Name, LayoutRender.showL(NicePrint.layoutTyparConstraint denv (sigTypar, sigTyparCx))), m)); false) + (errorR(Error(FSComp.SR.typrelSigImplNotCompatibleConstraintsDifferRemove(sigTypar.Name, Layout.showL(NicePrint.layoutTyparConstraint denv (sigTypar, sigTyparCx))), m)); false) else true) && (not checkingSig || checkAttribs aenv implTypar.Attribs sigTypar.Attribs (fun attribs -> implTypar.SetAttribs attribs))) - and checkTypeDef (aenv: TypeEquivEnv) (infoReader: InfoReader) (implTycon: Tycon) (sigTycon: Tycon) = + and checkTypeDef (aenv: TypeEquivEnv) (implTycon: Tycon) (sigTycon: Tycon) = let m = implTycon.Range // Propagate defn location information from implementation to signature . @@ -175,7 +172,7 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = false else - checkExnInfo (fun f -> ExnconstrNotContained(denv, infoReader, implTycon, sigTycon, f)) aenv infoReader implTycon implTycon.ExceptionInfo sigTycon.ExceptionInfo && + checkExnInfo (fun f -> ExnconstrNotContained(denv, implTycon, sigTycon, f)) aenv implTycon.ExceptionInfo sigTycon.ExceptionInfo && let implTypars = implTycon.Typars m let sigTypars = sigTycon.Typars m @@ -256,10 +253,10 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = else checkTypars m aenv implTypars sigTypars && - checkTypeRepr m aenv infoReader implTycon sigTycon.TypeReprInfo && + checkTypeRepr m aenv implTycon sigTycon.TypeReprInfo && checkTypeAbbrev m aenv implTycon sigTycon && checkAttribs aenv implTycon.Attribs sigTycon.Attribs (fun attribs -> implTycon.entity_attribs <- attribs) && - checkModuleOrNamespaceContents implTycon.Range aenv infoReader (mkLocalEntityRef implTycon) sigTycon.ModuleOrNamespaceType + checkModuleOrNamespaceContents implTycon.Range aenv (mkLocalEntityRef implTycon) sigTycon.ModuleOrNamespaceType and checkValInfo aenv err (implVal : Val) (sigVal : Val) = let id = implVal.Id @@ -303,13 +300,13 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = implVal.SetValReprInfo (Some (ValReprInfo (sigTyparNames, implArgInfos, implRetInfo))) res - and checkVal implModRef (aenv: TypeEquivEnv) (infoReader: InfoReader) (implVal: Val) (sigVal: Val) = + and checkVal implModRef (aenv: TypeEquivEnv) (implVal: Val) (sigVal: Val) = // Propagate defn location information from implementation to signature . sigVal.SetOtherRange (implVal.Range, true) implVal.SetOtherRange (sigVal.Range, false) - let mk_err denv f = ValueNotContained(denv, infoReader, implModRef, implVal, sigVal, f) + let mk_err denv f = ValueNotContained(denv, implModRef, implVal, sigVal, f) let err denv f = errorR(mk_err denv f); false let m = implVal.Range if implVal.IsMutable <> sigVal.IsMutable then (err denv FSComp.SR.ValueNotContainedMutabilityAttributesDiffer) @@ -333,7 +330,7 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = else checkAttribs aenv implVal.Attribs sigVal.Attribs (fun attribs -> implVal.SetAttribs attribs) - and checkExnInfo err aenv (infoReader: InfoReader) (enclosingTycon: Tycon) implTypeRepr sigTypeRepr = + and checkExnInfo err aenv implTypeRepr sigTypeRepr = match implTypeRepr, sigTypeRepr with | TExnAsmRepr _, TExnFresh _ -> (errorR (err FSComp.SR.ExceptionDefsNotCompatibleHiddenBySignature); false) @@ -345,23 +342,23 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = if not (tcrefAEquiv g aenv ecr1 ecr2) then (errorR (err FSComp.SR.ExceptionDefsNotCompatibleSignaturesDiffer); false) else true - | TExnFresh r1, TExnFresh r2-> checkRecordFieldsForExn g denv err aenv infoReader enclosingTycon r1 r2 + | TExnFresh r1, TExnFresh r2-> checkRecordFieldsForExn g denv err aenv r1 r2 | TExnNone, TExnNone -> true | _ -> (errorR (err FSComp.SR.ExceptionDefsNotCompatibleExceptionDeclarationsDiffer); false) - and checkUnionCase aenv infoReader (enclosingTycon: Tycon) implUnionCase sigUnionCase = - let err f = errorR(ConstrNotContained(denv, infoReader, enclosingTycon, implUnionCase, sigUnionCase, f));false + and checkUnionCase aenv implUnionCase sigUnionCase = + let err f = errorR(ConstrNotContained(denv, implUnionCase, sigUnionCase, f));false sigUnionCase.OtherRangeOpt <- Some (implUnionCase.Range, true) implUnionCase.OtherRangeOpt <- Some (sigUnionCase.Range, false) if implUnionCase.Id.idText <> sigUnionCase.Id.idText then err FSComp.SR.ModuleContainsConstructorButNamesDiffer elif implUnionCase.RecdFieldsArray.Length <> sigUnionCase.RecdFieldsArray.Length then err FSComp.SR.ModuleContainsConstructorButDataFieldsDiffer - elif not (Array.forall2 (checkField aenv infoReader enclosingTycon) implUnionCase.RecdFieldsArray sigUnionCase.RecdFieldsArray) then err FSComp.SR.ModuleContainsConstructorButTypesOfFieldsDiffer + elif not (Array.forall2 (checkField aenv) implUnionCase.RecdFieldsArray sigUnionCase.RecdFieldsArray) then err FSComp.SR.ModuleContainsConstructorButTypesOfFieldsDiffer elif isLessAccessible implUnionCase.Accessibility sigUnionCase.Accessibility then err FSComp.SR.ModuleContainsConstructorButAccessibilityDiffers else checkAttribs aenv implUnionCase.Attribs sigUnionCase.Attribs (fun attribs -> implUnionCase.Attribs <- attribs) - and checkField aenv infoReader (enclosingTycon: Tycon) implField sigField = - let err f = errorR(FieldNotContained(denv, infoReader, enclosingTycon, implField, sigField, f)); false + and checkField aenv implField sigField = + let err f = errorR(FieldNotContained(denv, implField, sigField, f)); false sigField.rfield_other_range <- Some (implField.Range, true) implField.rfield_other_range <- Some (sigField.Range, false) if implField.rfield_id.idText <> sigField.rfield_id.idText then err FSComp.SR.FieldNotContainedNamesDiffer @@ -409,67 +406,67 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = | _ -> false - and checkRecordFields m aenv infoReader (implTycon: Tycon) (implFields: TyconRecdFields) (sigFields: TyconRecdFields) = + and checkRecordFields m aenv (implTycon: Tycon) (implFields: TyconRecdFields) (sigFields: TyconRecdFields) = let implFields = implFields.TrueFieldsAsList let sigFields = sigFields.TrueFieldsAsList let m1 = implFields |> NameMap.ofKeyedList (fun rfld -> rfld.Name) let m2 = sigFields |> NameMap.ofKeyedList (fun rfld -> rfld.Name) NameMap.suball2 (fun fieldName _ -> errorR(Error (FSComp.SR.DefinitionsInSigAndImplNotCompatibleFieldRequiredButNotSpecified(implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName, fieldName), m)); false) - (checkField aenv infoReader implTycon) m1 m2 && + (checkField aenv) m1 m2 && NameMap.suball2 (fun fieldName _ -> errorR(Error (FSComp.SR.DefinitionsInSigAndImplNotCompatibleFieldWasPresent(implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName, fieldName), m)); false) - (fun x y -> checkField aenv infoReader implTycon y x) m2 m1 && + (fun x y -> checkField aenv y x) m2 m1 && // This check is required because constructors etc. are externally visible // and thus compiled representations do pick up dependencies on the field order - (if List.forall2 (checkField aenv infoReader implTycon) implFields sigFields + (if List.forall2 (checkField aenv) implFields sigFields then true else (errorR(Error (FSComp.SR.DefinitionsInSigAndImplNotCompatibleFieldOrderDiffer(implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName), m)); false)) - and checkRecordFieldsForExn _g _denv err aenv (infoReader: InfoReader) (enclosingTycon: Tycon) (implFields: TyconRecdFields) (sigFields: TyconRecdFields) = + and checkRecordFieldsForExn _g _denv err aenv (implFields: TyconRecdFields) (sigFields: TyconRecdFields) = let implFields = implFields.TrueFieldsAsList let sigFields = sigFields.TrueFieldsAsList let m1 = implFields |> NameMap.ofKeyedList (fun rfld -> rfld.Name) let m2 = sigFields |> NameMap.ofKeyedList (fun rfld -> rfld.Name) - NameMap.suball2 (fun s _ -> errorR(err (fun (x, y) -> FSComp.SR.ExceptionDefsNotCompatibleFieldInSigButNotImpl(s, x, y))); false) (checkField aenv infoReader enclosingTycon) m1 m2 && - NameMap.suball2 (fun s _ -> errorR(err (fun (x, y) -> FSComp.SR.ExceptionDefsNotCompatibleFieldInImplButNotSig(s, x, y))); false) (fun x y -> checkField aenv infoReader enclosingTycon y x) m2 m1 && + NameMap.suball2 (fun s _ -> errorR(err (fun (x, y) -> FSComp.SR.ExceptionDefsNotCompatibleFieldInSigButNotImpl(s, x, y))); false) (checkField aenv) m1 m2 && + NameMap.suball2 (fun s _ -> errorR(err (fun (x, y) -> FSComp.SR.ExceptionDefsNotCompatibleFieldInImplButNotSig(s, x, y))); false) (fun x y -> checkField aenv y x) m2 m1 && // This check is required because constructors etc. are externally visible // and thus compiled representations do pick up dependencies on the field order - (if List.forall2 (checkField aenv infoReader enclosingTycon) implFields sigFields + (if List.forall2 (checkField aenv) implFields sigFields then true else (errorR(err (FSComp.SR.ExceptionDefsNotCompatibleFieldOrderDiffers)); false)) - and checkVirtualSlots denv infoReader m (implTycon: Tycon) implAbstractSlots sigAbstractSlots = + and checkVirtualSlots denv m (implTycon: Tycon) implAbstractSlots sigAbstractSlots = let m1 = NameMap.ofKeyedList (fun (v: ValRef) -> v.DisplayName) implAbstractSlots let m2 = NameMap.ofKeyedList (fun (v: ValRef) -> v.DisplayName) sigAbstractSlots (m1, m2) ||> NameMap.suball2 (fun _s vref -> let kindText = implTycon.TypeOrMeasureKind.ToString() - let valText = NicePrint.stringValOrMember denv infoReader vref + let valText = NicePrint.stringValOrMember denv vref.Deref errorR(Error (FSComp.SR.DefinitionsInSigAndImplNotCompatibleAbstractMemberMissingInImpl(kindText, implTycon.DisplayName, valText), m)); false) (fun _x _y -> true) && (m2, m1) ||> NameMap.suball2 (fun _s vref -> let kindText = implTycon.TypeOrMeasureKind.ToString() - let valText = NicePrint.stringValOrMember denv infoReader vref + let valText = NicePrint.stringValOrMember denv vref.Deref errorR(Error (FSComp.SR.DefinitionsInSigAndImplNotCompatibleAbstractMemberMissingInSig(kindText, implTycon.DisplayName, valText), m)); false) (fun _x _y -> true) - and checkClassFields isStruct m aenv infoReader (implTycon: Tycon) (implFields: TyconRecdFields) (sigFields: TyconRecdFields) = + and checkClassFields isStruct m aenv (implTycon: Tycon) (implFields: TyconRecdFields) (sigFields: TyconRecdFields) = let implFields = implFields.TrueFieldsAsList let sigFields = sigFields.TrueFieldsAsList let m1 = implFields |> NameMap.ofKeyedList (fun rfld -> rfld.Name) let m2 = sigFields |> NameMap.ofKeyedList (fun rfld -> rfld.Name) NameMap.suball2 (fun fieldName _ -> errorR(Error (FSComp.SR.DefinitionsInSigAndImplNotCompatibleFieldRequiredButNotSpecified(implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName, fieldName), m)); false) - (checkField aenv infoReader implTycon) m1 m2 && + (checkField aenv) m1 m2 && (if isStruct then NameMap.suball2 (fun fieldName _ -> warning(Error (FSComp.SR.DefinitionsInSigAndImplNotCompatibleFieldIsInImplButNotSig(implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName, fieldName), m)); true) - (fun x y -> checkField aenv infoReader implTycon y x) m2 m1 + (fun x y -> checkField aenv y x) m2 m1 else true) - and checkTypeRepr m aenv (infoReader: InfoReader) (implTycon: Tycon) sigTypeRepr = + and checkTypeRepr m aenv (implTycon: Tycon) sigTypeRepr = let reportNiceError k s1 s2 = let aset = NameSet.ofList s1 let fset = NameSet.ofList s2 @@ -505,9 +502,9 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = if ucases1.Length <> ucases2.Length then let names (l: UnionCase list) = l |> List.map (fun c -> c.Id.idText) reportNiceError "union case" (names ucases1) (names ucases2) - else List.forall2 (checkUnionCase aenv infoReader implTycon) ucases1 ucases2 + else List.forall2 (checkUnionCase aenv) ucases1 ucases2 | (TRecdRepr implFields), (TRecdRepr sigFields) -> - checkRecordFields m aenv infoReader implTycon implFields sigFields + checkRecordFields m aenv implTycon implFields sigFields | (TFSharpObjectRepr r1), (TFSharpObjectRepr r2) -> if not (match r1.fsobjmodel_kind, r2.fsobjmodel_kind with | TTyconClass, TTyconClass -> true @@ -529,8 +526,8 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = (errorR (Error(FSComp.SR.DefinitionsInSigAndImplNotCompatibleTypeIsDifferentKind(implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName), m)); false) else let isStruct = (match r1.fsobjmodel_kind with TTyconStruct -> true | _ -> false) - checkClassFields isStruct m aenv infoReader implTycon r1.fsobjmodel_rfields r2.fsobjmodel_rfields && - checkVirtualSlots denv infoReader m implTycon r1.fsobjmodel_vslots r2.fsobjmodel_vslots + checkClassFields isStruct m aenv implTycon r1.fsobjmodel_rfields r2.fsobjmodel_rfields && + checkVirtualSlots denv m implTycon r1.fsobjmodel_vslots r2.fsobjmodel_vslots | (TAsmRepr tcr1), (TAsmRepr tcr2) -> if tcr1 <> tcr2 then (errorR (Error(FSComp.SR.DefinitionsInSigAndImplNotCompatibleILDiffer(implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName), m)); false) else true | (TMeasureableRepr ty1), (TMeasureableRepr ty2) -> @@ -563,7 +560,7 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = | Some _, None -> (errorR (Error (FSComp.SR.DefinitionsInSigAndImplNotCompatibleAbbreviationHiddenBySig(implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName), m)); false) | None, Some _ -> (errorR (Error (FSComp.SR.DefinitionsInSigAndImplNotCompatibleSigHasAbbreviation(implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName), m)); false) - and checkModuleOrNamespaceContents m aenv (infoReader: InfoReader) (implModRef: ModuleOrNamespaceRef) (signModType: ModuleOrNamespaceType) = + and checkModuleOrNamespaceContents m aenv (implModRef: ModuleOrNamespaceRef) (signModType: ModuleOrNamespaceType) = let implModType = implModRef.ModuleOrNamespaceType (if implModType.ModuleOrNamespaceKind <> signModType.ModuleOrNamespaceKind then errorR(Error(FSComp.SR.typrelModuleNamespaceAttributesDifferInSigAndImpl(), m))) @@ -571,19 +568,19 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = (implModType.TypesByMangledName, signModType.TypesByMangledName) ||> NameMap.suball2 (fun s _fx -> errorR(RequiredButNotSpecified(denv, implModRef, "type", (fun os -> Printf.bprintf os "%s" s), m)); false) - (checkTypeDef aenv infoReader) && + (checkTypeDef aenv) && (implModType.ModulesAndNamespacesByDemangledName, signModType.ModulesAndNamespacesByDemangledName ) ||> NameMap.suball2 (fun s fx -> errorR(RequiredButNotSpecified(denv, implModRef, (if fx.IsModule then "module" else "namespace"), (fun os -> Printf.bprintf os "%s" s), m)); false) - (fun x1 x2 -> checkModuleOrNamespace aenv infoReader (mkLocalModRef x1) x2) && + (fun x1 x2 -> checkModuleOrNamespace aenv (mkLocalModRef x1) x2) && let sigValHadNoMatchingImplementation (fx: Val) (_closeActualVal: Val option) = errorR(RequiredButNotSpecified(denv, implModRef, "value", (fun os -> (* In the case of missing members show the full required enclosing type and signature *) if fx.IsMember then - NicePrint.outputQualifiedValOrMember denv infoReader os (mkLocalValRef fx) + NicePrint.outputQualifiedValOrMember denv os fx else Printf.bprintf os "%s" fx.DisplayName), m)) @@ -602,7 +599,7 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = | [], _ | _, [] -> failwith "unreachable" | [av], [fv] -> if valuesPartiallyMatch av fv then - checkVal implModRef aenv infoReader av fv + checkVal implModRef aenv av fv else sigValHadNoMatchingImplementation fv None false @@ -615,7 +612,7 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = | Some av -> Some(fv, av)) // Check the ones with matching linkage - let allPairsOk = matchingPairs |> List.map (fun (fv, av) -> checkVal implModRef aenv infoReader av fv) |> List.forall id + let allPairsOk = matchingPairs |> List.map (fun (fv, av) -> checkVal implModRef aenv av fv) |> List.forall id let someNotOk = matchingPairs.Length < fvs.Length // Report an error for those that don't. Try pairing up by enclosing-type/name if someNotOk then @@ -625,28 +622,28 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = | None -> Choice1Of2 fv | Some av -> Choice2Of2(fv, av)) for (fv, av) in partialMatchingPairs do - checkVal implModRef aenv infoReader av fv |> ignore + checkVal implModRef aenv av fv |> ignore for fv in noMatches do sigValHadNoMatchingImplementation fv None allPairsOk && not someNotOk) - and checkModuleOrNamespace aenv (infoReader: InfoReader) implModRef sigModRef = + and checkModuleOrNamespace aenv implModRef sigModRef = // Propagate defn location information from implementation to signature . sigModRef.SetOtherRange (implModRef.Range, true) implModRef.Deref.SetOtherRange (sigModRef.Range, false) - checkModuleOrNamespaceContents implModRef.Range aenv infoReader implModRef sigModRef.ModuleOrNamespaceType && + checkModuleOrNamespaceContents implModRef.Range aenv implModRef sigModRef.ModuleOrNamespaceType && checkAttribs aenv implModRef.Attribs sigModRef.Attribs implModRef.Deref.SetAttribs - member _.CheckSignature aenv (infoReader: InfoReader) (implModRef: ModuleOrNamespaceRef) (signModType: ModuleOrNamespaceType) = - checkModuleOrNamespaceContents implModRef.Range aenv infoReader implModRef signModType + member __.CheckSignature aenv (implModRef: ModuleOrNamespaceRef) (signModType: ModuleOrNamespaceType) = + checkModuleOrNamespaceContents implModRef.Range aenv implModRef signModType - member _.CheckTypars m aenv (implTypars: Typars) (signTypars: Typars) = + member __.CheckTypars m aenv (implTypars: Typars) (signTypars: Typars) = checkTypars m aenv implTypars signTypars /// Check the names add up between a signature and its implementation. We check this first. -let rec CheckNamesOfModuleOrNamespaceContents denv infoReader (implModRef: ModuleOrNamespaceRef) (signModType: ModuleOrNamespaceType) = +let rec CheckNamesOfModuleOrNamespaceContents denv (implModRef: ModuleOrNamespaceRef) (signModType: ModuleOrNamespaceType) = let m = implModRef.Range let implModType = implModRef.ModuleOrNamespaceType NameMap.suball2 @@ -658,7 +655,7 @@ let rec CheckNamesOfModuleOrNamespaceContents denv infoReader (implModRef: Modul (implModType.ModulesAndNamespacesByDemangledName, signModType.ModulesAndNamespacesByDemangledName ) ||> NameMap.suball2 (fun s fx -> errorR(RequiredButNotSpecified(denv, implModRef, (if fx.IsModule then "module" else "namespace"), (fun os -> Printf.bprintf os "%s" s), m)); false) - (fun x1 (x2: ModuleOrNamespace) -> CheckNamesOfModuleOrNamespace denv infoReader (mkLocalModRef x1) x2.ModuleOrNamespaceType) && + (fun x1 (x2: ModuleOrNamespace) -> CheckNamesOfModuleOrNamespace denv (mkLocalModRef x1) x2.ModuleOrNamespaceType) && (implModType.AllValsAndMembersByLogicalNameUncached, signModType.AllValsAndMembersByLogicalNameUncached) ||> NameMap.suball2 @@ -667,12 +664,12 @@ let rec CheckNamesOfModuleOrNamespaceContents denv infoReader (implModRef: Modul errorR(RequiredButNotSpecified(denv, implModRef, "value", (fun os -> // In the case of missing members show the full required enclosing type and signature if Option.isSome fx.MemberInfo then - NicePrint.outputQualifiedValOrMember denv infoReader os (mkLocalValRef fx) + NicePrint.outputQualifiedValOrMember denv os fx else Printf.bprintf os "%s" fx.DisplayName), m)); false) (fun _ _ -> true) -and CheckNamesOfModuleOrNamespace denv (infoReader: InfoReader) (implModRef: ModuleOrNamespaceRef) signModType = - CheckNamesOfModuleOrNamespaceContents denv infoReader implModRef signModType +and CheckNamesOfModuleOrNamespace denv (implModRef: ModuleOrNamespaceRef) signModType = + CheckNamesOfModuleOrNamespaceContents denv implModRef signModType diff --git a/src/fsharp/SignatureConformance.fsi b/src/fsharp/SignatureConformance.fsi index 673e6037d77..e12dceae5fd 100644 --- a/src/fsharp/SignatureConformance.fsi +++ b/src/fsharp/SignatureConformance.fsi @@ -7,20 +7,19 @@ module internal FSharp.Compiler.SignatureConformance open System.Text open FSharp.Compiler -open FSharp.Compiler.Text +open FSharp.Compiler.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.InfoReader exception RequiredButNotSpecified of DisplayEnv * ModuleOrNamespaceRef * string * (StringBuilder -> unit) * range -exception ValueNotContained of DisplayEnv * InfoReader * ModuleOrNamespaceRef * Val * Val * (string * string * string -> string) +exception ValueNotContained of DisplayEnv * ModuleOrNamespaceRef * Val * Val * (string * string * string -> string) -exception ConstrNotContained of DisplayEnv * InfoReader * Tycon * UnionCase * UnionCase * (string * string -> string) +exception ConstrNotContained of DisplayEnv * UnionCase * UnionCase * (string * string -> string) -exception ExnconstrNotContained of DisplayEnv * InfoReader * Tycon * Tycon * (string * string -> string) +exception ExnconstrNotContained of DisplayEnv * Tycon * Tycon * (string * string -> string) -exception FieldNotContained of DisplayEnv * InfoReader * Tycon * RecdField * RecdField * (string * string -> string) +exception FieldNotContained of DisplayEnv * RecdField * RecdField * (string * string -> string) exception InterfaceNotRevealed of DisplayEnv * TType * range @@ -28,11 +27,11 @@ type Checker = new: g:TcGlobals.TcGlobals * amap:Import.ImportMap * denv:DisplayEnv * remapInfo:SignatureRepackageInfo * checkingSig:bool -> Checker - member CheckSignature: aenv:TypeEquivEnv -> infoReader:InfoReader -> implModRef:ModuleOrNamespaceRef -> signModType:ModuleOrNamespaceType -> bool + member CheckSignature: aenv:TypeEquivEnv -> implModRef:ModuleOrNamespaceRef -> signModType:ModuleOrNamespaceType -> bool member CheckTypars: m:range -> aenv:TypeEquivEnv -> implTypars:Typars -> signTypars:Typars -> bool /// Check the names add up between a signature and its implementation. We check this first. -val CheckNamesOfModuleOrNamespaceContents: denv:DisplayEnv -> infoReader:InfoReader -> implModRef:ModuleOrNamespaceRef -> signModType:ModuleOrNamespaceType -> bool +val CheckNamesOfModuleOrNamespaceContents: denv:DisplayEnv -> implModRef:ModuleOrNamespaceRef -> signModType:ModuleOrNamespaceType -> bool -val CheckNamesOfModuleOrNamespace: denv:DisplayEnv -> infoReader:InfoReader -> implModRef:ModuleOrNamespaceRef -> signModType:ModuleOrNamespaceType -> bool +val CheckNamesOfModuleOrNamespace: denv:DisplayEnv -> implModRef:ModuleOrNamespaceRef -> signModType:ModuleOrNamespaceType -> bool diff --git a/src/fsharp/SimulatedMSBuildReferenceResolver.fs b/src/fsharp/SimulatedMSBuildReferenceResolver.fs index c7fd441ded2..5d80c658d0d 100644 --- a/src/fsharp/SimulatedMSBuildReferenceResolver.fs +++ b/src/fsharp/SimulatedMSBuildReferenceResolver.fs @@ -1,14 +1,14 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.CodeAnalysis.SimulatedMSBuildReferenceResolver +module internal FSharp.Compiler.SimulatedMSBuildReferenceResolver open System open System.IO open System.Reflection open Microsoft.Win32 open Microsoft.Build.Utilities -open Internal.Utilities.Library -open FSharp.Compiler.IO +open FSharp.Compiler.ReferenceResolver +open FSharp.Compiler.AbstractIL.Internal.Library // ATTENTION!: the following code needs to be updated every time we are switching to the new MSBuild version because new .NET framework version was released // 1. List of frameworks @@ -66,13 +66,13 @@ let private SimulatedMSBuildResolver = | Net48 -> Some TargetDotNetFrameworkVersion.Version48 | _ -> assert false; None match v with - | Some v -> + | Some v -> match ToolLocationHelper.GetPathToDotNetFramework v with | null -> [] | x -> [x] | _ -> [] - let GetPathToDotNetFrameworkReferenceAssemblies(version) = + let GetPathToDotNetFrameworkReferenceAssemblies(version) = #if NETSTANDARD ignore version let r : string list = [] @@ -83,16 +83,16 @@ let private SimulatedMSBuildResolver = | x -> [x] #endif - { new ILegacyReferenceResolver with + { new Resolver with member x.HighestInstalledNetFrameworkVersion() = let root = x.DotNetFrameworkReferenceAssembliesRootDirectory - let fwOpt = SupportedDesktopFrameworkVersions |> Seq.tryFind(fun fw -> FileSystem.DirectoryExistsShim(Path.Combine(root, fw) )) + let fwOpt = SupportedDesktopFrameworkVersions |> Seq.tryFind(fun fw -> Directory.Exists(Path.Combine(root, fw) )) match fwOpt with | Some fw -> fw | None -> "v4.5" - member _.DotNetFrameworkReferenceAssembliesRootDirectory = + member __.DotNetFrameworkReferenceAssembliesRootDirectory = if System.Environment.OSVersion.Platform = System.PlatformID.Win32NT then let PF = match Environment.GetEnvironmentVariable("ProgramFiles(x86)") with @@ -102,7 +102,7 @@ let private SimulatedMSBuildResolver = else "" - member _.Resolve(resolutionEnvironment, references, targetFrameworkVersion, targetFrameworkDirectories, targetProcessorArchitecture, + member __.Resolve(resolutionEnvironment, references, targetFrameworkVersion, targetFrameworkDirectories, targetProcessorArchitecture, fsharpCoreDir, explicitIncludeDirs, implicitIncludeDir, logMessage, logWarningOrError) = #if !FX_NO_WIN_REGISTRY @@ -158,8 +158,8 @@ let private SimulatedMSBuildResolver = results.Add { itemSpec = path; prepareToolTip = snd; baggage=baggage } try - if not found && FileSystem.IsPathRootedShim r then - if FileSystem.FileExistsShim r then + if not found && Path.IsPathRooted r then + if FileSystem.SafeExists r then success r with e -> logWarningOrError false "SR001" (e.ToString()) @@ -174,7 +174,7 @@ let private SimulatedMSBuildResolver = | s -> s PF + @"\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\" + n.Version.ToString() let trialPath = Path.Combine(fscoreDir0, n.Name + ".dll") - if FileSystem.FileExistsShim trialPath then + if FileSystem.SafeExists trialPath then success trialPath with e -> logWarningOrError false "SR001" (e.ToString()) @@ -188,7 +188,7 @@ let private SimulatedMSBuildResolver = try if not found then let trialPath = Path.Combine(searchPath, qual) - if FileSystem.FileExistsShim trialPath then + if FileSystem.SafeExists trialPath then success trialPath with e -> logWarningOrError false "SR001" (e.ToString()) @@ -201,13 +201,13 @@ let private SimulatedMSBuildResolver = match n.Version, n.GetPublicKeyToken() with | null, _ | _, null -> let options = - [ if FileSystem.DirectoryExistsShim gac then - for gacDir in FileSystem.EnumerateDirectoriesShim gac do + [ if Directory.Exists gac then + for gacDir in Directory.EnumerateDirectories gac do let assemblyDir = Path.Combine(gacDir, n.Name) - if FileSystem.DirectoryExistsShim assemblyDir then - for tdir in FileSystem.EnumerateDirectoriesShim assemblyDir do + if Directory.Exists assemblyDir then + for tdir in Directory.EnumerateDirectories assemblyDir do let trialPath = Path.Combine(tdir, qual) - if FileSystem.FileExistsShim trialPath then + if FileSystem.SafeExists trialPath then yield trialPath ] //printfn "sorting GAC paths: %A" options options @@ -216,26 +216,25 @@ let private SimulatedMSBuildResolver = |> function None -> () | Some p -> success p | v, tok -> - if FileSystem.DirectoryExistsShim gac then + if Directory.Exists gac then for gacDir in Directory.EnumerateDirectories gac do //printfn "searching GAC directory: %s" gacDir let assemblyDir = Path.Combine(gacDir, n.Name) - if FileSystem.DirectoryExistsShim assemblyDir then + if Directory.Exists assemblyDir then //printfn "searching GAC directory: %s" assemblyDir let tokText = String.concat "" [| for b in tok -> sprintf "%02x" b |] let verDir = Path.Combine(assemblyDir, "v4.0_"+v.ToString()+"__"+tokText) //printfn "searching GAC directory: %s" verDir - if FileSystem.DirectoryExistsShim verDir then + if Directory.Exists verDir then let trialPath = Path.Combine(verDir, qual) //printfn "searching GAC: %s" trialPath - if FileSystem.FileExistsShim trialPath then + if FileSystem.SafeExists trialPath then success trialPath with e -> logWarningOrError false "SR001" (e.ToString()) results.ToArray() } - |> LegacyReferenceResolver let internal getResolver () = SimulatedMSBuildResolver diff --git a/src/fsharp/SimulatedMSBuildReferenceResolver.fsi b/src/fsharp/SimulatedMSBuildReferenceResolver.fsi index 0221673344c..e96efa0849a 100644 --- a/src/fsharp/SimulatedMSBuildReferenceResolver.fsi +++ b/src/fsharp/SimulatedMSBuildReferenceResolver.fsi @@ -1,7 +1,8 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -[] -module internal FSharp.Compiler.CodeAnalysis.SimulatedMSBuildReferenceResolver +module internal FSharp.Compiler.SimulatedMSBuildReferenceResolver -val getResolver: unit -> LegacyReferenceResolver +open FSharp.Compiler.ReferenceResolver + +val getResolver: unit -> Resolver diff --git a/src/fsharp/StaticLinking.fs b/src/fsharp/StaticLinking.fs index 01d04f49936..c97faa8c787 100644 --- a/src/fsharp/StaticLinking.fs +++ b/src/fsharp/StaticLinking.fs @@ -4,23 +4,22 @@ module internal FSharp.Compiler.StaticLinking open System -open Internal.Utilities -open Internal.Utilities.Collections -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras + open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.ILBinaryReader open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerImports open FSharp.Compiler.CompilerOptions open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.IO +open FSharp.Compiler.Lib open FSharp.Compiler.OptimizeInputs -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range +open FSharp.Compiler.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics +open Internal.Utilities +open Internal.Utilities.Collections #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping @@ -38,7 +37,7 @@ type TypeForwarding (tcImports: TcImports) = // If we can't type forward using exact assembly match, we need to rely on the loader (Policy, Configuration or the coreclr load heuristics), so use try simple name let ccuThunksSimpleName = tcImports.GetCcusInDeclOrder() - |> List.choose (fun ccuThunk -> + |> List.choose (fun ccuThunk -> if String.IsNullOrEmpty(ccuThunk.AssemblyName) then None else @@ -89,98 +88,98 @@ type TypeForwarding (tcImports: TcImports) = if scoref1 === scoref2 then tref else ILTypeRef.Create (scoref2, tref.Enclosing, tref.Name) - member _.TypeForwardILTypeRef tref = typeForwardILTypeRef tref + member __.TypeForwardILTypeRef tref = typeForwardILTypeRef tref let debugStaticLinking = condition "FSHARP_DEBUG_STATIC_LINKING" -let StaticLinkILModules (tcConfig:TcConfig, ilGlobals, tcImports, ilxMainModule, dependentILModules: (CcuThunk option * ILModuleDef) list) = - if isNil dependentILModules then - ilxMainModule, (fun x -> x) +let StaticLinkILModules (tcConfig:TcConfig, ilGlobals, tcImports, ilxMainModule, dependentILModules: (CcuThunk option * ILModuleDef) list) = + if isNil dependentILModules then + ilxMainModule, (fun x -> x) else let typeForwarding = new TypeForwarding(tcImports) - // 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)) - | None -> () - + // 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)) + | None -> () + // Check we're not static linking a .EXE - if dependentILModules |> List.exists (fun (_, x) -> not x.IsDLL) then + if dependentILModules |> List.exists (fun (_, x) -> not x.IsDLL) then error(Error(FSComp.SR.fscStaticLinkingNoEXE(), rangeStartup)) // Check we're not static linking something that is not pure IL - if dependentILModules |> List.exists (fun (_, x) -> not x.IsILOnly) then + if dependentILModules |> List.exists (fun (_, x) -> not x.IsILOnly) then error(Error(FSComp.SR.fscStaticLinkingNoMixedDLL(), rangeStartup)) // The set of short names for the all dependent assemblies - let assems = + let assems = set [ for (_, m) in dependentILModules do - match m.Manifest with - | Some m -> yield m.Name + match m.Manifest with + | Some m -> yield m.Name | _ -> () ] - - // A rewriter which rewrites scope references to things in dependent assemblies to be local references - let rewriteExternalRefsToLocalRefs x = + + // A rewriter which rewrites scope references to things in dependent assemblies to be local references + let rewriteExternalRefsToLocalRefs x = if assems.Contains (getNameOfScopeRef x) then ILScopeRef.Local else x - let savedManifestAttrs = - [ for (_, depILModule) in dependentILModules do - match depILModule.Manifest with - | Some m -> + let savedManifestAttrs = + [ for (_, depILModule) in dependentILModules do + match depILModule.Manifest with + | Some m -> for ca in m.CustomAttrs.AsArray do - if ca.Method.MethodRef.DeclaringTypeRef.FullName = typeof.FullName then + if ca.Method.MethodRef.DeclaringTypeRef.FullName = typeof.FullName then yield ca | _ -> () ] - let savedResources = + let savedResources = let allResources = [ for (ccu, m) in dependentILModules do for r in m.Resources.AsList do yield (ccu, r) ] // Don't save interface, optimization or resource definitions for provider-generated assemblies. // These are "fake". - let isProvided (ccu: CcuThunk option) = + let isProvided (ccu: CcuThunk option) = #if !NO_EXTENSIONTYPING - match ccu with - | Some c -> c.IsProviderGenerated + match ccu with + | Some c -> c.IsProviderGenerated | None -> false #else ignore ccu false #endif - // Save only the interface/optimization attributes of generated data + // Save only the interface/optimization attributes of generated data let intfDataResources, others = allResources |> List.partition (snd >> IsSignatureDataResource) - let intfDataResources = - [ for (ccu, r) in intfDataResources do - if tcConfig.GenerateSignatureData && not (isProvided ccu) then + let intfDataResources = + [ for (ccu, r) in intfDataResources do + if tcConfig.GenerateSignatureData && not (isProvided ccu) then yield r ] let optDataResources, others = others |> List.partition (snd >> IsOptimizationDataResource) - let optDataResources = - [ for (ccu, r) in optDataResources do - if tcConfig.GenerateOptimizationData && not (isProvided ccu) then + let optDataResources = + [ for (ccu, r) in optDataResources do + if tcConfig.GenerateOptimizationData && not (isProvided ccu) then yield r ] - let otherResources = others |> List.map snd + let otherResources = others |> List.map snd let result = intfDataResources@optDataResources@otherResources result let moduls = ilxMainModule :: (List.map snd dependentILModules) - let savedNativeResources = - [ //yield! ilxMainModule.NativeResources - for m in moduls do + let savedNativeResources = + [ //yield! ilxMainModule.NativeResources + for m in moduls do yield! m.NativeResources ] - let topTypeDefs, normalTypeDefs = - moduls - |> List.map (fun m -> m.TypeDefs.AsList |> List.partition (fun td -> isTypeNameForGlobalFunctions td.Name)) + let topTypeDefs, normalTypeDefs = + moduls + |> List.map (fun m -> m.TypeDefs.AsList |> List.partition (fun td -> isTypeNameForGlobalFunctions td.Name)) |> List.unzip - let topTypeDef = + let topTypeDef = let topTypeDefs = List.concat topTypeDefs mkILTypeDefForGlobalFunctions ilGlobals - (mkILMethods (topTypeDefs |> List.collect (fun td -> td.Methods.AsList)), + (mkILMethods (topTypeDefs |> List.collect (fun td -> td.Methods.AsList)), mkILFields (topTypeDefs |> List.collect (fun td -> td.Fields.AsList))) let ilxMainModule = @@ -191,141 +190,141 @@ let StaticLinkILModules (tcConfig:TcConfig, ilGlobals, tcImports, ilxMainModule, TypeDefs = mkILTypeDefs (topTypeDef :: List.concat normalTypeDefs) Resources = mkILResources (savedResources @ ilxMainModule.Resources.AsList) NativeResources = savedNativeResources } - Morphs.morphILTypeRefsInILModuleMemoized typeForwarding.TypeForwardILTypeRef main + Morphs.morphILTypeRefsInILModuleMemoized ilGlobals typeForwarding.TypeForwardILTypeRef main ilxMainModule, rewriteExternalRefsToLocalRefs [] -type Node = +type Node = { name: string - data: ILModuleDef + data: ILModuleDef ccu: option refs: ILReferences - mutable edges: list + mutable edges: list mutable visited: bool } // Find all IL modules that are to be statically linked given the static linking roots. -let FindDependentILModulesForStaticLinking (ctok, tcConfig: TcConfig, tcImports: TcImports, ilGlobals: ILGlobals, ilxMainModule) = - if not tcConfig.standalone && tcConfig.extraStaticLinkRoots.IsEmpty then +let FindDependentILModulesForStaticLinking (ctok, tcConfig: TcConfig, tcImports: TcImports, ilGlobals: ILGlobals, ilxMainModule) = + if not tcConfig.standalone && tcConfig.extraStaticLinkRoots.IsEmpty then [] else - // Recursively find all referenced modules and add them to a module graph + // Recursively find all referenced modules and add them to a module graph let depModuleTable = HashMultiMap(0, HashIdentity.Structural) let dummyEntry nm = - { refs = IL.emptyILRefs + { refs = IL.emptyILRefs name=nm ccu=None data=ilxMainModule // any old module - edges = [] + edges = [] visited = true } let assumedIndependentSet = set [ "mscorlib"; "System"; "System.Core"; "System.Xml"; "Microsoft.Build.Framework"; "Microsoft.Build.Utilities"; "netstandard" ] - begin + begin let mutable remaining = (computeILRefs ilGlobals ilxMainModule).AssemblyReferences while not (isNil remaining) do let ilAssemRef = List.head remaining remaining <- List.tail remaining - if assumedIndependentSet.Contains ilAssemRef.Name || (ilAssemRef.PublicKey = Some ecmaPublicKey) then + if assumedIndependentSet.Contains ilAssemRef.Name || (ilAssemRef.PublicKey = Some ecmaPublicKey) then depModuleTable.[ilAssemRef.Name] <- dummyEntry ilAssemRef.Name else if not (depModuleTable.ContainsKey ilAssemRef.Name) then - match tcImports.TryFindDllInfo(ctok, Range.rangeStartup, ilAssemRef.Name, lookupOnly=false) with + match tcImports.TryFindDllInfo(ctok, Range.rangeStartup, ilAssemRef.Name, lookupOnly=false) with | Some dllInfo -> - let ccu = - match tcImports.FindCcuFromAssemblyRef (ctok, Range.rangeStartup, ilAssemRef) with + let ccu = + match tcImports.FindCcuFromAssemblyRef (ctok, Range.rangeStartup, ilAssemRef) with | ResolvedCcu ccu -> Some ccu | UnresolvedCcu(_ccuName) -> None let fileName = dllInfo.FileName - let modul = - let pdbDirPathOption = - // We open the pdb file if one exists parallel to the binary we - // are reading, so that --standalone will preserve debug information. - if tcConfig.openDebugInformationForLaterStaticLinking then - let pdbDir = (try FileSystem.GetDirectoryNameShim fileName with _ -> ".") - let pdbFile = (try FileSystemUtils.chopExtension fileName with _ -> fileName)+".pdb" - if FileSystem.FileExistsShim pdbFile then + let modul = + let pdbDirPathOption = + // We open the pdb file if one exists parallel to the binary we + // are reading, so that --standalone will preserve debug information. + if tcConfig.openDebugInformationForLaterStaticLinking then + let pdbDir = (try Filename.directoryName fileName with _ -> ".") + let pdbFile = (try Filename.chopExtension fileName with _ -> fileName)+".pdb" + if FileSystem.SafeExists pdbFile then Some pdbDir - else - None - else + else + None + else None - let opts : ILReaderOptions = + let opts : ILReaderOptions = { metadataOnly = MetadataOnlyFlag.No // turn this off here as we need the actual IL code reduceMemoryUsage = tcConfig.reduceMemoryUsage pdbDirPath = pdbDirPathOption - tryGetMetadataSnapshot = (fun _ -> None) } + tryGetMetadataSnapshot = (fun _ -> None) } let reader = ILBinaryReader.OpenILModuleReader dllInfo.FileName opts reader.ILModuleDef - let refs = - if ilAssemRef.Name = GetFSharpCoreLibraryName() then - IL.emptyILRefs - elif not modul.IsILOnly then + let refs = + if ilAssemRef.Name = GetFSharpCoreLibraryName() then + IL.emptyILRefs + elif not modul.IsILOnly then warning(Error(FSComp.SR.fscIgnoringMixedWhenLinking ilAssemRef.Name, rangeStartup)) - IL.emptyILRefs + IL.emptyILRefs else - { AssemblyReferences = dllInfo.ILAssemblyRefs + { AssemblyReferences = dllInfo.ILAssemblyRefs ModuleReferences = [] } - depModuleTable.[ilAssemRef.Name] <- + depModuleTable.[ilAssemRef.Name] <- { refs=refs name=ilAssemRef.Name ccu=ccu - data=modul - edges = [] + data=modul + edges = [] visited = false } // Push the new work items remaining <- refs.AssemblyReferences @ remaining - | None -> - warning(Error(FSComp.SR.fscAssumeStaticLinkContainsNoDependencies(ilAssemRef.Name), rangeStartup)) + | None -> + warning(Error(FSComp.SR.fscAssumeStaticLinkContainsNoDependencies(ilAssemRef.Name), rangeStartup)) depModuleTable.[ilAssemRef.Name] <- dummyEntry ilAssemRef.Name done end ReportTime tcConfig "Find dependencies" - // Add edges from modules to the modules that depend on them - for (KeyValue(_, n)) in depModuleTable do + // Add edges from modules to the modules that depend on them + for (KeyValue(_, n)) in depModuleTable do for aref in n.refs.AssemblyReferences do - let n2 = depModuleTable.[aref.Name] + let n2 = depModuleTable.[aref.Name] n2.edges <- n :: n2.edges - + // Find everything that depends on FSharp.Core - let roots = - [ if tcConfig.standalone && depModuleTable.ContainsKey (GetFSharpCoreLibraryName()) then + let roots = + [ if tcConfig.standalone && depModuleTable.ContainsKey (GetFSharpCoreLibraryName()) then yield depModuleTable.[GetFSharpCoreLibraryName()] for n in tcConfig.extraStaticLinkRoots do - match depModuleTable.TryFind n with + 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 mutable remaining = roots [ while not (isNil remaining) do let n = List.head remaining remaining <- List.tail remaining - if not n.visited then + if not n.visited then n.visited <- true remaining <- n.edges @ remaining yield (n.ccu, n.data) ] // Add all provider-generated assemblies into the static linking set -let FindProviderGeneratedILModules (ctok, tcImports: TcImports, providerGeneratedAssemblies: (ImportedBinary * _) list) = - [ for (importedBinary, provAssemStaticLinkInfo) in providerGeneratedAssemblies do +let FindProviderGeneratedILModules (ctok, tcImports: TcImports, providerGeneratedAssemblies: (ImportedBinary * _) list) = + [ for (importedBinary, provAssemStaticLinkInfo) in providerGeneratedAssemblies do let ilAssemRef = match importedBinary.ILScopeRef with | ILScopeRef.Assembly aref -> aref | _ -> failwith "Invalid ILScopeRef, expected ILScopeRef.Assembly" if debugStaticLinking then printfn "adding provider-generated assembly '%s' into static linking set" ilAssemRef.Name - match tcImports.TryFindDllInfo(ctok, Range.rangeStartup, ilAssemRef.Name, lookupOnly=false) with + match tcImports.TryFindDllInfo(ctok, Range.rangeStartup, ilAssemRef.Name, lookupOnly=false) with | Some dllInfo -> - let ccu = - match tcImports.FindCcuFromAssemblyRef (ctok, Range.rangeStartup, ilAssemRef) with + let ccu = + match tcImports.FindCcuFromAssemblyRef (ctok, Range.rangeStartup, ilAssemRef) with | ResolvedCcu ccu -> Some ccu | UnresolvedCcu(_ccuName) -> None @@ -336,25 +335,25 @@ let FindProviderGeneratedILModules (ctok, tcImports: TcImports, providerGenerate // Compute a static linker. This only captures tcImports (a large data structure) if // static linking is enabled. Normally this is not the case, which lets us collect tcImports // prior to this point. -let StaticLink (ctok, tcConfig: TcConfig, tcImports: TcImports, ilGlobals: ILGlobals) = +let StaticLink (ctok, tcConfig: TcConfig, tcImports: TcImports, ilGlobals: ILGlobals) = #if !NO_EXTENSIONTYPING let providerGeneratedAssemblies = [ // Add all EST-generated assemblies into the static linking set for KeyValue(_, importedBinary: ImportedBinary) in tcImports.DllTable do - if importedBinary.IsProviderGenerated then - match importedBinary.ProviderGeneratedStaticLinkMap with + if importedBinary.IsProviderGenerated then + match importedBinary.ProviderGeneratedStaticLinkMap with | None -> () | Some provAssemStaticLinkInfo -> yield (importedBinary, provAssemStaticLinkInfo) ] #endif - if not tcConfig.standalone && tcConfig.extraStaticLinkRoots.IsEmpty + if not tcConfig.standalone && tcConfig.extraStaticLinkRoots.IsEmpty #if !NO_EXTENSIONTYPING - && providerGeneratedAssemblies.IsEmpty + && providerGeneratedAssemblies.IsEmpty #endif - then + then (fun ilxMainModule -> ilxMainModule) - else + else (fun ilxMainModule -> ReportTime tcConfig "Find assembly references" @@ -364,66 +363,66 @@ let StaticLink (ctok, tcConfig: TcConfig, tcImports: TcImports, ilGlobals: ILGlo #if !NO_EXTENSIONTYPING Morphs.enableMorphCustomAttributeData() - let providerGeneratedILModules = FindProviderGeneratedILModules (ctok, tcImports, providerGeneratedAssemblies) + let providerGeneratedILModules = FindProviderGeneratedILModules (ctok, tcImports, providerGeneratedAssemblies) // Transform the ILTypeRefs references in the IL of all provider-generated assemblies so that the references // are now local. - let providerGeneratedILModules = - - providerGeneratedILModules |> List.map (fun ((ccu, ilOrigScopeRef, ilModule), (_, localProvAssemStaticLinkInfo)) -> - let ilAssemStaticLinkMap = - dict [ for (_, (_, provAssemStaticLinkInfo)) in providerGeneratedILModules do - for KeyValue(k, v) in provAssemStaticLinkInfo.ILTypeMap do + let providerGeneratedILModules = + + providerGeneratedILModules |> List.map (fun ((ccu, ilOrigScopeRef, ilModule), (_, localProvAssemStaticLinkInfo)) -> + let ilAssemStaticLinkMap = + dict [ for (_, (_, provAssemStaticLinkInfo)) in providerGeneratedILModules do + for KeyValue(k, v) in provAssemStaticLinkInfo.ILTypeMap do yield (k, v) for KeyValue(k, v) in localProvAssemStaticLinkInfo.ILTypeMap do yield (ILTypeRef.Create(ILScopeRef.Local, k.Enclosing, k.Name), v) ] - let ilModule = - ilModule |> Morphs.morphILTypeRefsInILModuleMemoized (fun tref -> - if debugStaticLinking then printfn "deciding whether to rewrite type ref %A" tref.QualifiedName + let ilModule = + ilModule |> Morphs.morphILTypeRefsInILModuleMemoized ilGlobals (fun tref -> + if debugStaticLinking then printfn "deciding whether to rewrite type ref %A" tref.QualifiedName let ok, v = ilAssemStaticLinkMap.TryGetValue tref - if ok then + if ok then if debugStaticLinking then printfn "rewriting type ref %A to %A" tref.QualifiedName v.QualifiedName v - else + else tref) (ccu, ilOrigScopeRef, ilModule)) // Relocate provider generated type definitions into the expected shape for the [] declarations in an assembly - let providerGeneratedILModules, ilxMainModule = - // Build a dictionary of all remapped IL type defs - let ilOrigTyRefsForProviderGeneratedTypesToRelocate = - let rec walk acc (ProviderGeneratedType(ilOrigTyRef, _, xs) as node) = List.fold walk ((ilOrigTyRef, node) :: acc) xs + let providerGeneratedILModules, ilxMainModule = + // Build a dictionary of all remapped IL type defs + let ilOrigTyRefsForProviderGeneratedTypesToRelocate = + let rec walk acc (ProviderGeneratedType(ilOrigTyRef, _, xs) as node) = List.fold walk ((ilOrigTyRef, node) :: acc) xs dict (Seq.fold walk [] tcImports.ProviderGeneratedTypeRoots) // Build a dictionary of all IL type defs, mapping ilOrigTyRef --> ilTypeDef - let allTypeDefsInProviderGeneratedAssemblies = - let rec loop ilOrigTyRef (ilTypeDef: ILTypeDef) = - seq { yield (ilOrigTyRef, ilTypeDef) - for ntdef in ilTypeDef.NestedTypes do + let allTypeDefsInProviderGeneratedAssemblies = + let rec loop ilOrigTyRef (ilTypeDef: ILTypeDef) = + seq { yield (ilOrigTyRef, ilTypeDef) + for ntdef in ilTypeDef.NestedTypes do yield! loop (mkILTyRefInTyRef (ilOrigTyRef, ntdef.Name)) ntdef } - dict [ - for (_ccu, ilOrigScopeRef, ilModule) in providerGeneratedILModules do - for td in ilModule.TypeDefs do + dict [ + for (_ccu, ilOrigScopeRef, ilModule) in providerGeneratedILModules do + for td in ilModule.TypeDefs do yield! loop (mkILTyRef (ilOrigScopeRef, td.Name)) td ] // Debugging output - if debugStaticLinking then + if debugStaticLinking then for (ProviderGeneratedType(ilOrigTyRef, _, _)) in tcImports.ProviderGeneratedTypeRoots do printfn "Have [] root '%s'" ilOrigTyRef.QualifiedName - // Build the ILTypeDefs for generated types, starting with the roots - let generatedILTypeDefs = - let rec buildRelocatedGeneratedType (ProviderGeneratedType(ilOrigTyRef, ilTgtTyRef, ch)) = + // Build the ILTypeDefs for generated types, starting with the roots + let generatedILTypeDefs = + let rec buildRelocatedGeneratedType (ProviderGeneratedType(ilOrigTyRef, ilTgtTyRef, ch)) = let isNested = not (isNil ilTgtTyRef.Enclosing) match allTypeDefsInProviderGeneratedAssemblies.TryGetValue ilOrigTyRef with | true, ilOrigTypeDef -> if debugStaticLinking then printfn "Relocating %s to %s " ilOrigTyRef.QualifiedName ilTgtTyRef.QualifiedName - let ilOrigTypeDef = + let ilOrigTypeDef = if isNested then ilOrigTypeDef - .WithAccess(match ilOrigTypeDef.Access with + .WithAccess(match ilOrigTypeDef.Access with | ILTypeDefAccess.Public -> ILTypeDefAccess.Nested ILMemberAccess.Public | ILTypeDefAccess.Private -> ILTypeDefAccess.Nested ILMemberAccess.Private | _ -> ilOrigTypeDef.Access) @@ -432,59 +431,59 @@ let StaticLink (ctok, tcConfig: TcConfig, tcImports: TcImports, ilGlobals: ILGlo nestedTypes = mkILTypeDefs (List.map buildRelocatedGeneratedType ch)) | _ -> // If there is no matching IL type definition, then make a simple container class - if debugStaticLinking then - printfn "Generating simple class '%s' because we didn't find an original type '%s' in a provider generated assembly" + if debugStaticLinking then + printfn "Generating simple class '%s' because we didn't find an original type '%s' in a provider generated assembly" ilTgtTyRef.QualifiedName ilOrigTyRef.QualifiedName let access = (if isNested then ILTypeDefAccess.Nested ILMemberAccess.Public else ILTypeDefAccess.Public) let tdefs = mkILTypeDefs (List.map buildRelocatedGeneratedType ch) - mkILSimpleClass ilGlobals (ilTgtTyRef.Name, access, emptyILMethods, emptyILFields, tdefs, emptyILProperties, emptyILEvents, emptyILCustomAttrs, ILTypeInit.OnAny) + mkILSimpleClass ilGlobals (ilTgtTyRef.Name, access, emptyILMethods, emptyILFields, tdefs, emptyILProperties, emptyILEvents, emptyILCustomAttrs, ILTypeInit.OnAny) [ for (ProviderGeneratedType(_, ilTgtTyRef, _) as node) in tcImports.ProviderGeneratedTypeRoots do yield (ilTgtTyRef, buildRelocatedGeneratedType node) ] - + // Implant all the generated type definitions into the ilxMainModule (generating a new ilxMainModule) - let ilxMainModule = + let ilxMainModule = /// Split the list into left, middle and right parts at the first element satisfying 'p'. If no element matches return /// 'None' for the middle part. - let trySplitFind p xs = - let rec loop xs acc = - match xs with - | [] -> List.rev acc, None, [] + let trySplitFind p xs = + let rec loop xs acc = + match xs with + | [] -> List.rev acc, None, [] | h :: t -> if p h then List.rev acc, Some h, t else loop t (h :: acc) loop xs [] - /// Implant the (nested) type definition 'td' at path 'enc' in 'tdefs'. - let rec implantTypeDef isNested (tdefs: ILTypeDefs) (enc: string list) (td: ILTypeDef) = - match enc with + /// Implant the (nested) type definition 'td' at path 'enc' in 'tdefs'. + let rec implantTypeDef isNested (tdefs: ILTypeDefs) (enc: string list) (td: ILTypeDef) = + match enc with | [] -> addILTypeDef td tdefs - | h :: t -> + | h :: t -> let tdefs = tdefs.AsList - let (ltdefs, htd, rtdefs) = - match tdefs |> trySplitFind (fun td -> td.Name = h) with - | (ltdefs, None, rtdefs) -> + let (ltdefs, htd, rtdefs) = + match tdefs |> trySplitFind (fun td -> td.Name = h) with + | (ltdefs, None, rtdefs) -> let access = if isNested then ILTypeDefAccess.Nested ILMemberAccess.Public else ILTypeDefAccess.Public let fresh = mkILSimpleClass ilGlobals (h, access, emptyILMethods, emptyILFields, emptyILTypeDefs, emptyILProperties, emptyILEvents, emptyILCustomAttrs, ILTypeInit.OnAny) (ltdefs, fresh, rtdefs) - | (ltdefs, Some htd, rtdefs) -> + | (ltdefs, Some htd, rtdefs) -> (ltdefs, htd, rtdefs) let htd = htd.With(nestedTypes = implantTypeDef true htd.NestedTypes t td) mkILTypeDefs (ltdefs @ [htd] @ rtdefs) - let newTypeDefs = - (ilxMainModule.TypeDefs, generatedILTypeDefs) ||> List.fold (fun acc (ilTgtTyRef, td) -> - if debugStaticLinking then printfn "implanting '%s' at '%s'" td.Name ilTgtTyRef.QualifiedName - implantTypeDef false acc ilTgtTyRef.Enclosing td) - { ilxMainModule with TypeDefs = newTypeDefs } - + let newTypeDefs = + (ilxMainModule.TypeDefs, generatedILTypeDefs) ||> List.fold (fun acc (ilTgtTyRef, td) -> + if debugStaticLinking then printfn "implanting '%s' at '%s'" td.Name ilTgtTyRef.QualifiedName + implantTypeDef false acc ilTgtTyRef.Enclosing td) + { ilxMainModule with TypeDefs = newTypeDefs } + // Remove any ILTypeDefs from the provider generated modules if they have been relocated because of a [] declaration. - let providerGeneratedILModules = - providerGeneratedILModules |> List.map (fun (ccu, ilOrigScopeRef, ilModule) -> - let ilTypeDefsAfterRemovingRelocatedTypes = - let rec rw enc (tdefs: ILTypeDefs) = + let providerGeneratedILModules = + providerGeneratedILModules |> List.map (fun (ccu, ilOrigScopeRef, ilModule) -> + let ilTypeDefsAfterRemovingRelocatedTypes = + let rec rw enc (tdefs: ILTypeDefs) = mkILTypeDefs - [ for tdef in tdefs do + [ for tdef in tdefs do let ilOrigTyRef = mkILNestedTyRef (ilOrigScopeRef, enc, tdef.Name) if not (ilOrigTyRefsForProviderGeneratedTypesToRelocate.ContainsKey ilOrigTyRef) then if debugStaticLinking then printfn "Keep provided type %s in place because it wasn't relocated" ilOrigTyRef.QualifiedName @@ -493,25 +492,25 @@ let StaticLink (ctok, tcConfig: TcConfig, tcImports: TcImports, ilGlobals: ILGlo (ccu, { ilModule with TypeDefs = ilTypeDefsAfterRemovingRelocatedTypes })) providerGeneratedILModules, ilxMainModule - + Morphs.disableMorphCustomAttributeData() #else let providerGeneratedILModules = [] #endif - // Glue all this stuff into ilxMainModule - let ilxMainModule, rewriteExternalRefsToLocalRefs = + // Glue all this stuff into ilxMainModule + let ilxMainModule, rewriteExternalRefsToLocalRefs = StaticLinkILModules (tcConfig, ilGlobals, tcImports, ilxMainModule, dependentILModules @ providerGeneratedILModules) // Rewrite type and assembly references let ilxMainModule = let isMscorlib = ilGlobals.primaryAssemblyName = PrimaryAssembly.Mscorlib.Name - let validateTargetPlatform (scopeRef : ILScopeRef) = + let validateTargetPlatform (scopeRef : ILScopeRef) = let name = getNameOfScopeRef scopeRef if (not isMscorlib && name = PrimaryAssembly.Mscorlib.Name) then error (Error(FSComp.SR.fscStaticLinkingNoProfileMismatches(), rangeCmdArgs)) scopeRef let rewriteAssemblyRefsToMatchLibraries = NormalizeAssemblyRefs (ctok, ilGlobals, tcImports) - Morphs.morphILTypeRefsInILModuleMemoized (Morphs.morphILScopeRefsInILTypeRef (validateTargetPlatform >> rewriteExternalRefsToLocalRefs >> rewriteAssemblyRefsToMatchLibraries)) ilxMainModule + Morphs.morphILTypeRefsInILModuleMemoized ilGlobals (Morphs.morphILScopeRefsInILTypeRef (validateTargetPlatform >> rewriteExternalRefsToLocalRefs >> rewriteAssemblyRefsToMatchLibraries)) ilxMainModule ilxMainModule) diff --git a/src/fsharp/StaticLinking.fsi b/src/fsharp/StaticLinking.fsi index d9f1c6b9a4e..1c9701e952d 100644 --- a/src/fsharp/StaticLinking.fsi +++ b/src/fsharp/StaticLinking.fsi @@ -3,8 +3,8 @@ /// Optional static linking of all DLLs that depend on the F# Library, plus other specified DLLs module internal FSharp.Compiler.StaticLinking -open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerImports diff --git a/src/fsharp/SyntaxTree.fs b/src/fsharp/SyntaxTree.fs index efec365b65d..ac2574e4eaf 100644 --- a/src/fsharp/SyntaxTree.fs +++ b/src/fsharp/SyntaxTree.fs @@ -1,165 +1,213 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace rec FSharp.Compiler.Syntax +module public rec FSharp.Compiler.SyntaxTree open System.Diagnostics -open Internal.Utilities.Library -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Xml +open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.Range +open FSharp.Compiler.XmlDoc + +/// Represents an identifier in F# code [] type Ident (text: string, range: range) = - member _.idText = text - member _.idRange = range - override _.ToString() = text + member x.idText = text + member x.idRange = range + override x.ToString() = text +/// Represents a long identifier e.g. 'A.B.C' type LongIdent = Ident list +/// Represents a long identifier with possible '.' at end. +/// +/// Typically dotms.Length = lid.Length-1, but they may be same if (incomplete) code ends in a dot, e.g. "Foo.Bar." +/// The dots mostly matter for parsing, and are typically ignored by the typechecker, but +/// if dotms.Length = lid.Length, then the parser must have reported an error, so the typechecker is allowed +/// more freedom about typechecking these expressions. +/// LongIdent can be empty list - it is used to denote that name of some AST element is absent (i.e. empty type name in inherit) type LongIdentWithDots = - | LongIdentWithDots of id: LongIdent * dotRanges: range list + | LongIdentWithDots of id: LongIdent * dotms: range list + /// Gets the syntax range of this construct member this.Range = match this with | LongIdentWithDots([], _) -> failwith "rangeOfLidwd" | LongIdentWithDots([id], []) -> id.idRange | LongIdentWithDots([id], [m]) -> unionRanges id.idRange m | LongIdentWithDots(h :: t, []) -> unionRanges h.idRange (List.last t).idRange - | LongIdentWithDots(h :: t, dotRanges) -> unionRanges h.idRange (List.last t).idRange |> unionRanges (List.last dotRanges) + | LongIdentWithDots(h :: t, dotms) -> unionRanges h.idRange (List.last t).idRange |> unionRanges (List.last dotms) + /// Get the long ident for this construct member this.Lid = match this with LongIdentWithDots(lid, _) -> lid + /// Indicates if the construct ends in '.' due to error recovery member this.ThereIsAnExtraDotAtTheEnd = match this with LongIdentWithDots(lid, dots) -> lid.Length = dots.Length - member this.RangeWithoutAnyExtraDot = + /// Gets the syntax range for part of this construct + member this.RangeSansAnyExtraDot = match this with | LongIdentWithDots([], _) -> failwith "rangeOfLidwd" | LongIdentWithDots([id], _) -> id.idRange - | LongIdentWithDots(h :: t, dotRanges) -> - let nonExtraDots = if dotRanges.Length = t.Length then dotRanges else List.truncate t.Length dotRanges + | LongIdentWithDots(h :: t, dotms) -> + let nonExtraDots = if dotms.Length = t.Length then dotms else List.truncate t.Length dotms unionRanges h.idRange (List.last t).idRange |> unionRanges (List.last nonExtraDots) +/// Indicates if the construct arises from error recovery [] type ParserDetail = + /// The construct arises normally | Ok + /// The construct arises from error recovery | ErrorRecovery -[] +/// Represents whether a type parameter has a static requirement or not (^T or 'T) type TyparStaticReq = - | None + /// The construct is a normal type inference variable + | NoStaticReq - | HeadType + /// The construct is a statically inferred type inference variable '^T' + | HeadTypeStaticReq +/// Represents a syntactic type parameter [] type SynTypar = - | SynTypar of ident: Ident * staticReq: TyparStaticReq * isCompGen: bool + | Typar of ident: Ident * staticReq: TyparStaticReq * isCompGen: bool + /// Gets the syntax range of this construct member this.Range = match this with - | SynTypar(id, _, _) -> + | Typar(id, _, _) -> id.idRange -[] -type SynStringKind = - | Regular - | Verbatim - | TripleQuote - -[] -type SynByteStringKind = - | Regular - | Verbatim - +/// The unchecked abstract syntax tree of constants in F# types and expressions. [] type SynConst = + /// F# syntax: () | Unit + /// F# syntax: true, false | Bool of bool + /// F# syntax: 13y, 0xFFy, 0o077y, 0b0111101y | SByte of sbyte + /// F# syntax: 13uy, 0x40uy, 0oFFuy, 0b0111101uy | Byte of byte + /// F# syntax: 13s, 0x4000s, 0o0777s, 0b0111101s | Int16 of int16 + /// F# syntax: 13us, 0x4000us, 0o0777us, 0b0111101us | UInt16 of uint16 + /// F# syntax: 13, 0x4000, 0o0777 | Int32 of int32 + /// F# syntax: 13u, 0x4000u, 0o0777u | UInt32 of uint32 + /// F# syntax: 13L | Int64 of int64 + /// F# syntax: 13UL | UInt64 of uint64 + /// F# syntax: 13n | IntPtr of int64 + /// F# syntax: 13un | UIntPtr of uint64 + /// F# syntax: 1.30f, 1.40e10f etc. | Single of single + /// F# syntax: 1.30, 1.40e10 etc. | Double of double + /// F# syntax: 'a' | Char of char + /// F# syntax: 23.4M | Decimal of System.Decimal + /// UserNum(value, suffix) + /// + /// F# syntax: 1Q, 1Z, 1R, 1N, 1G | UserNum of value: string * suffix: string - | String of text: string * synStringKind :SynStringKind * range: range + /// F# syntax: verbatim or regular string, e.g. "abc" + | String of text: string * range: range - | Bytes of bytes: byte[] * synByteStringKind: SynByteStringKind * range: range + /// F# syntax: verbatim or regular byte string, e.g. "abc"B. + /// + /// Also used internally in the typechecker once an array of unit16 constants + /// is detected, to allow more efficient processing of large arrays of uint16 constants. + | Bytes of bytes: byte[] * range: range + /// Used internally in the typechecker once an array of unit16 constants + /// is detected, to allow more efficient processing of large arrays of uint16 constants. | UInt16s of uint16[] - | Measure of constant: SynConst * constantRange: Range * SynMeasure - - | SourceIdentifier of constant: string * value: string * range: Range + /// Old comment: "we never iterate, so the const here is not another SynConst.Measure" + | Measure of constant: SynConst * SynMeasure + /// Gets the syntax range of this construct member c.Range dflt = match c with - | SynConst.String (_, _, m0) - | SynConst.Bytes (_, _, m0) - | SynConst.SourceIdentifier(_, _, m0) -> m0 + | SynConst.String (_, m0) | SynConst.Bytes (_, m0) -> m0 | _ -> dflt +/// Represents an unchecked syntax tree of F# unit of measure annotations. [] type SynMeasure = + /// A named unit of measure | Named of longId: LongIdent * range: range - | Product of measure1: SynMeasure * measure2: SynMeasure * range: range + /// A product of two units of measure, e.g. 'kg * m' + | Product of SynMeasure * SynMeasure * range: range - | Seq of measures: SynMeasure list * range: range + /// A sequence of several units of measure, e.g. 'kg m m' + | Seq of SynMeasure list * range: range - | Divide of measure1: SynMeasure * measure2: SynMeasure * range: range + /// A division of two units of measure, e.g. 'kg / m' + | Divide of SynMeasure * SynMeasure * range: range - | Power of measure: SynMeasure * power: SynRationalConst * range: range + /// A power of a unit of measure, e.g. 'kg ^ 2' + | Power of SynMeasure * SynRationalConst * range: range + /// The '1' unit of measure | One + /// An anonymous (inferred) unit of measure | Anon of range: range - | Var of typar: SynTypar * range: range + /// A variable unit of measure + | Var of SynTypar * range: range +/// Represents an unchecked syntax tree of F# unit of measure exponents. [] type SynRationalConst = - | Integer of value: int32 + | Integer of int32 - | Rational of numerator: int32 * denominator: int32 * range: range + | Rational of int32 * int32 * range: range | Negate of SynRationalConst +/// Represents an accessibility modifier in F# syntax [] type SynAccess = + /// A construct marked or assumed 'public' | Public + /// A construct marked or assumed 'internal' | Internal + /// A construct marked or assumed 'private' | Private override this.ToString () = @@ -168,184 +216,211 @@ type SynAccess = | Internal -> "Internal" | Private -> "Private" +/// Represents whether a debug point should be present for the target +/// of a decision tree, that is whether the construct corresponds to a debug +/// point in the original source. [] type DebugPointForTarget = | Yes | No +/// Represents whether a debug point should be present for either the +/// first or second part of a sequential execution, that is whether the +/// construct corresponds to a debug point in the original source. [] type DebugPointAtSequential = | Both + // This means "suppress a in 'a;b'" and "suppress b in 'a before b'" | StmtOnly + // This means "suppress b in 'a;b'" and "suppress a in 'a before b'" | ExprOnly +/// Represents whether a debug point should be present for a 'try', that is whether +/// the construct corresponds to a debug point in the original source. [] type DebugPointAtTry = | Yes of range: range + // Used for "use" and "for" | Body | No +/// Represents whether a debug point should be present for the 'with' in a 'try .. with', +/// that is whether the construct corresponds to a debug point in the original source. [] type DebugPointAtWith = | Yes of range: range | No +/// Represents whether a debug point should be present for the 'finally' in a 'try .. finally', +/// that is whether the construct corresponds to a debug point in the original source. [] type DebugPointAtFinally = | Yes of range: range - | Body | No +/// Represents whether a debug point should be present for the 'for' in a 'for...' loop, +/// that is whether the construct corresponds to a debug point in the original source. [] type DebugPointAtFor = | Yes of range: range | No +/// Represents whether a debug point should be present for the 'while' in a 'while...' loop, +/// that is whether the construct corresponds to a debug point in the original source. [] type DebugPointAtWhile = | Yes of range: range | No -[] -type DebugPointAtBinding = - | Yes of range: range - - | NoneAtDo - - | NoneAtLet - - | NoneAtSticky - - | NoneAtInvisible - - member x.Combine(y: DebugPointAtBinding) = +/// Represents whether a debug point should be present for a 'let' binding, +/// that is whether the construct corresponds to a debug point in the original source. +type DebugPointForBinding = + | DebugPointAtBinding of range: range + + // Indicates the omission of a sequence point for a binding for a 'do expr' + | NoDebugPointAtDoBinding + + // Indicates the omission of a sequence point for a binding for a 'let e = expr' where + // 'expr' has immediate control flow + | NoDebugPointAtLetBinding + + // Indicates the omission of a sequence point for a compiler generated binding + // where we've done a local expansion of some construct into something that involves + // a 'let'. e.g. we've inlined a function and bound its arguments using 'let' + // The let bindings are 'sticky' in that the inversion of the inlining would involve + // replacing the entire expression with the original and not just the let bindings alone. + | NoDebugPointAtStickyBinding + + // Given 'let v = e1 in e2', where this is a compiler generated binding, + // we are sometimes forced to generate a sequence point for the expression anyway based on its + // overall range. If the let binding is given the flag below then it is asserting that + // the binding has no interesting side effects and can be totally ignored and the range + // of the inner expression is used instead + | NoDebugPointAtInvisibleBinding + + // Don't drop sequence points when combining sequence points + member x.Combine(y: DebugPointForBinding) = match x, y with - | DebugPointAtBinding.Yes _ as g, _ -> g - | _, (DebugPointAtBinding.Yes _ as g) -> g + | DebugPointAtBinding _ as g, _ -> g + | _, (DebugPointAtBinding _ as g) -> g | _ -> x +/// Indicates if a for loop is 'for x in e1 -> e2', only valid in sequence expressions type SeqExprOnly = + /// Indicates if a for loop is 'for x in e1 -> e2', only valid in sequence expressions | SeqExprOnly of bool +/// Represents the location of the separator block + optional position +/// of the semicolon (used for tooling support) type BlockSeparator = range * pos option +/// Represents a record field name plus a flag indicating if given record field name is syntactically +/// correct and can be used in name resolution. type RecordFieldName = LongIdentWithDots * bool -[] +/// Indicates if an expression is an atomic expression. +/// +/// An atomic expression has no whitespace unless enclosed in parentheses, e.g. +/// 1, "3", ident, ident.[expr] and (expr). If an atomic expression has type T, +/// then the largest expression ending at the same range as the atomic expression +/// also has type T. type ExprAtomicFlag = | Atomic = 0 | NonAtomic = 1 -[] +/// The kind associated with a binding - "let", "do" or a standalone expression type SynBindingKind = + /// A standalone expression in a module | StandaloneExpression - | Normal + /// A normal 'let' binding in a module + | NormalBinding - | Do + /// A 'do' binding in a module. Must have type 'unit' + | DoBinding +/// Represents the explicit declaration of a type parameter [] type SynTyparDecl = - | SynTyparDecl of attributes: SynAttributes * SynTypar + | TyparDecl of attributes: SynAttributes * SynTypar -[] +/// The unchecked abstract syntax tree of F# type constraints +[] type SynTypeConstraint = + /// F# syntax: is 'typar: struct | WhereTyparIsValueType of typar: SynTypar * range: range + /// F# syntax: is 'typar: not struct | WhereTyparIsReferenceType of typar: SynTypar * range: range + /// F# syntax is 'typar: unmanaged | WhereTyparIsUnmanaged of typar: SynTypar * range: range + /// F# syntax is 'typar: null | WhereTyparSupportsNull of typar: SynTypar * range: range + /// F# syntax is 'typar: comparison | WhereTyparIsComparable of typar: SynTypar * range: range + /// F# syntax is 'typar: equality | WhereTyparIsEquatable of typar: SynTypar * range: range + /// F# syntax is default ^T: type | WhereTyparDefaultsToType of typar: SynTypar * typeName: SynType * range: range + /// F# syntax is 'typar :> type | WhereTyparSubtypeOfType of typar: SynTypar * typeName: SynType * range: range + /// F# syntax is ^T: (static member MemberName: ^T * int -> ^T) | WhereTyparSupportsMember of typars: SynType list * memberSig: SynMemberSig * range: range + /// F# syntax is 'typar: enum<'UnderlyingType> | WhereTyparIsEnum of typar: SynTypar * typeArgs: SynType list * range: range + /// F# syntax is 'typar: delegate<'Args, unit> | WhereTyparIsDelegate of typar: SynTypar * typeArgs: SynType list * range: range - member x.Range = - match x with - | WhereTyparIsValueType(range=range) - | WhereTyparIsReferenceType(range=range) - | WhereTyparIsUnmanaged(range=range) - | WhereTyparSupportsNull(range=range) - | WhereTyparIsComparable(range=range) - | WhereTyparIsEquatable(range=range) - | WhereTyparDefaultsToType(range=range) - | WhereTyparSubtypeOfType(range=range) - | WhereTyparSupportsMember(range=range) - | WhereTyparIsEnum(range=range) - | WhereTyparIsDelegate(range=range) -> range - -[] -type SynTyparDecls = - | PostfixList of decls: SynTyparDecl list * constraints: SynTypeConstraint list * range: range - | PrefixList of decls: SynTyparDecl list * range: range - | SinglePrefix of decl: SynTyparDecl * range: range - - member x.TyparDecls = - match x with - | PostfixList (decls=decls) - | PrefixList (decls=decls) -> decls - | SinglePrefix (decl, _) -> [decl] - - member x.Constraints = - match x with - | PostfixList (constraints=constraints) -> constraints - | _ -> [] - - member x.Range = - match x with - | PostfixList (range=range) - | PrefixList (range=range) -> range - | SinglePrefix (range=range) -> range - +/// Represents a syntax tree for F# types [] type SynType = + /// F# syntax: A.B.C | LongIdent of longDotId: LongIdentWithDots + /// F# syntax: type or type type or (type, ..., type) type + /// isPostfix: indicates a postfix type application e.g. "int list" or "(int, string) dict" | App of typeName: SynType * lessRange: range option * @@ -355,6 +430,7 @@ type SynType = isPostfix: bool * range: range + /// F# syntax: type.A.B.C | LongIdentApp of typeName: SynType * longDotId: LongIdentWithDots * @@ -364,59 +440,76 @@ type SynType = greaterRange: range option * range: range + /// F# syntax: type * ... * type + /// F# syntax: struct (type * ... * type) + // the bool is true if / rather than * follows the type | Tuple of isStruct: bool * elementTypes:(bool*SynType) list * range: range + /// F# syntax: {| id: type; ...; id: type |} + /// F# syntax: struct {| id: type; ...; id: type |} | AnonRecd of isStruct: bool * fields:(Ident * SynType) list * range: range + /// F# syntax: type[] | Array of rank: int * elementType: SynType * range: range + /// F# syntax: type -> type | Fun of argType: SynType * returnType: SynType * range: range + /// F# syntax: 'Var | Var of typar: SynTypar * range: range + /// F# syntax: _ | Anon of range: range + /// F# syntax: typ with constraints | WithGlobalConstraints of typeName: SynType * constraints: SynTypeConstraint list * range: range + /// F# syntax: #type | HashConstraint of innerType: SynType * range: range + /// F# syntax: for units of measure e.g. m / s | MeasureDivide of dividend: SynType * divisor: SynType * range: range + /// F# syntax: for units of measure e.g. m^3, kg^1/2 | MeasurePower of baseMeasure: SynType * exponent: SynRationalConst * range: range + /// F# syntax: 1, "abc" etc, used in parameters to type providers + /// For the dimensionless units i.e. 1, and static parameters to provided types | StaticConstant of constant: SynConst * range: range + /// F# syntax: const expr, used in static parameters to type providers | StaticConstantExpr of expr: SynExpr * range: range + /// F# syntax: ident=1 etc., used in static parameters to type providers | StaticConstantNamed of ident: SynType * value: SynType * @@ -426,6 +519,7 @@ type SynType = innerType: SynType * range: range + /// Gets the syntax range of this construct member x.Range = match x with | SynType.App (range=m) @@ -446,15 +540,23 @@ type SynType = | SynType.Paren (range=m) -> m | SynType.LongIdent lidwd -> lidwd.Range +/// Represents a syntax tree for F# expressions [] type SynExpr = + /// F# syntax: (expr) + /// + /// Parenthesized expressions. Kept in AST to distinguish A.M((x, y)) + /// from A.M(x, y), among other things. | Paren of expr: SynExpr * leftParenRange: range * rightParenRange: range option * range: range + /// F# syntax: <@ expr @>, <@@ expr @@> + /// + /// Quote(operator, isRaw, quotedSynExpr, isFromQueryExpression, m) | Quote of operator: SynExpr * isRaw: bool * @@ -462,44 +564,57 @@ type SynExpr = isFromQueryExpression: bool * range: range + /// F# syntax: 1, 1.3, () etc. | Const of constant: SynConst * range: range + /// F# syntax: expr: type | Typed of expr: SynExpr * targetType: SynType * range: range + /// F# syntax: e1, ..., eN | Tuple of isStruct: bool * exprs: SynExpr list * commaRanges: range list * // interstitial commas range: range + /// F# syntax: {| id1=e1; ...; idN=eN |} + /// F# syntax: struct {| id1=e1; ...; idN=eN |} | AnonRecd of isStruct: bool * copyInfo:(SynExpr * BlockSeparator) option * recordFields:(Ident * SynExpr) list * range: range + /// F# syntax: [ e1; ...; en ], [| e1; ...; en |] | ArrayOrList of - isArray: bool * + isList: bool * exprs: SynExpr list * range: range + /// F# syntax: { f1=e1; ...; fn=en } + /// inherit includes location of separator (for tooling) + /// copyOpt contains range of the following WITH part (for tooling) + /// every field includes range of separator after the field (for tooling) | Record of baseInfo:(SynType * SynExpr * range * BlockSeparator option * range) option * copyInfo:(SynExpr * BlockSeparator) option * recordFields:(RecordFieldName * (SynExpr option) * BlockSeparator option) list * range: range + /// F# syntax: new C(...) + /// The flag is true if known to be 'family' ('protected') scope | New of isProtected: bool * targetType: SynType * expr: SynExpr * range: range + /// F# syntax: { new ... with ... } | ObjExpr of objType: SynType * argOptions:(SynExpr * Ident option) option * @@ -508,12 +623,14 @@ type SynExpr = newExprRange: range * range: range + /// F# syntax: 'while ... do ...' | While of whileSeqPoint: DebugPointAtWhile * whileExpr: SynExpr * doExpr: SynExpr * range: range + /// F# syntax: 'for i = ... to ... do ...' | For of forSeqPoint: DebugPointAtFor * ident: Ident * @@ -523,6 +640,7 @@ type SynExpr = doBody: SynExpr * range: range + /// F# syntax: 'for ... in ... do ...' | ForEach of forSeqPoint: DebugPointAtFor * seqExprOnly: SeqExprOnly * @@ -532,17 +650,25 @@ type SynExpr = bodyExpr: SynExpr * range: range + /// F# syntax: [ expr ], [| expr |] | ArrayOrListOfSeqExpr of isArray: bool * expr: SynExpr * range: range + /// F# syntax: { expr } | CompExpr of isArrayOrList: bool * isNotNakedRefCell: bool ref * expr: SynExpr * range: range + /// First bool indicates if lambda originates from a method. Patterns here are always "simple" + /// Second bool indicates if this is a "later" part of an iterated sequence of lambdas + /// parsedData keeps original parsed patterns and expression, + /// prior to transforming to "simple" patterns and iterated lambdas + /// + /// F# syntax: fun pat -> expr | Lambda of fromMethod: bool * inLambdaSeq: bool * @@ -551,27 +677,36 @@ type SynExpr = parsedData: (SynPat list * SynExpr) option * range: range + /// F# syntax: function pat1 -> expr | ... | patN -> exprN | MatchLambda of isExnMatch: bool * keywordRange: range * matchClauses: SynMatchClause list * - matchSeqPoint: DebugPointAtBinding * + matchSeqPoint: DebugPointForBinding * range: range + /// F# syntax: match expr with pat1 -> expr | ... | patN -> exprN | Match of - matchSeqPoint: DebugPointAtBinding * + matchSeqPoint: DebugPointForBinding * expr: SynExpr * clauses: SynMatchClause list * range: range + /// F# syntax: do expr | Do of expr: SynExpr * range: range + /// F# syntax: assert expr | Assert of expr: SynExpr * range: range + /// F# syntax: f x + /// + /// flag: indicates if the application is syntactically atomic, e.g. f.[1] is atomic, but 'f x' is not + /// isInfix is true for the first app of an infix operator, e.g. 1+2 + /// becomes App(App(+, 1), 2), where the inner node is marked isInfix | App of flag: ExprAtomicFlag * isInfix: bool * @@ -579,6 +714,7 @@ type SynExpr = argExpr: SynExpr * range: range + /// F# syntax: expr | TypeApp of expr: SynExpr * lessRange: range * @@ -588,6 +724,10 @@ type SynExpr = typeArgsRange: range * range: range + /// F# syntax: let pat = expr in expr + /// F# syntax: let f pat1 .. patN = expr in expr + /// F# syntax: let rec f pat1 .. patN = expr in expr + /// F# syntax: use pat = expr in expr | LetOrUse of isRecursive: bool * isUse: bool * @@ -595,6 +735,7 @@ type SynExpr = body: SynExpr * range: range + /// F# syntax: try expr with pat -> expr | TryWith of tryExpr: SynExpr * tryRange: range * @@ -604,6 +745,7 @@ type SynExpr = trySeqPoint: DebugPointAtTry * withSeqPoint: DebugPointAtWith + /// F# syntax: try expr finally expr | TryFinally of tryExpr: SynExpr * finallyExpr: SynExpr * @@ -611,10 +753,14 @@ type SynExpr = trySeqPoint: DebugPointAtTry * finallySeqPoint: DebugPointAtFinally + /// F# syntax: lazy expr | Lazy of expr: SynExpr * range: range + /// F# syntax: expr; expr + /// + /// isTrueSeq: false indicates "let v = a in b; v" | Sequential of seqPoint: DebugPointAtSequential * isTrueSeq: bool * @@ -622,52 +768,67 @@ type SynExpr = expr2: SynExpr * range: range + /// F# syntax: if expr then expr + /// F# syntax: if expr then expr else expr | IfThenElse of ifExpr: SynExpr * thenExpr: SynExpr * elseExpr: SynExpr option * - spIfToThen: DebugPointAtBinding * + spIfToThen: DebugPointForBinding * isFromErrorRecovery: bool * ifToThenRange: range * range: range + /// F# syntax: ident + /// Optimized representation for SynExpr.LongIdent (false, [id], id.idRange) | Ident of ident: Ident + /// F# syntax: ident.ident...ident + /// + /// isOptional: true if preceded by a '?' for an optional named parameter + /// altNameRefCell: Normally 'None' except for some compiler-generated + /// variables in desugaring pattern matching. See SynSimplePat.Id | LongIdent of isOptional: bool * longDotId: LongIdentWithDots * altNameRefCell: SynSimplePatAlternativeIdInfo ref option * range: range + /// F# syntax: ident.ident...ident <- expr | LongIdentSet of longDotId: LongIdentWithDots * expr: SynExpr * range: range + /// F# syntax: expr.ident.ident | DotGet of expr: SynExpr * rangeOfDot: range * longDotId: LongIdentWithDots * range: range + /// F# syntax: expr.ident...ident <- expr | DotSet of targetExpr: SynExpr * longDotId: LongIdentWithDots * rhsExpr: SynExpr * range: range + /// F# syntax: expr <- expr | Set of targetExpr: SynExpr * rhsExpr: SynExpr * range: range + /// F# syntax: expr.[expr, ..., expr] | DotIndexedGet of objectExpr: SynExpr * indexExprs: SynIndexerArg list * dotRange: range * range: range + /// F# syntax: expr.[expr, ..., expr] <- expr | DotIndexedSet of objectExpr: SynExpr * indexExprs: SynIndexerArg list * @@ -676,12 +837,14 @@ type SynExpr = dotRange: range * range: range + /// F# syntax: Type.Items(e1) <- e2, rarely used named-property-setter notation, e.g. Foo.Bar.Chars(3) <- 'a' | NamedIndexedPropertySet of longDotId: LongIdentWithDots * expr1: SynExpr * expr2: SynExpr * range: range + /// F# syntax: expr.Items (e1) <- e2, rarely used named-property-setter notation, e.g. (stringExpr).Chars(3) <- 'a' | DotNamedIndexedPropertySet of targetExpr: SynExpr * longDotId: LongIdentWithDots * @@ -689,53 +852,65 @@ type SynExpr = rhsExpr: SynExpr * range: range + /// F# syntax: expr :? type | TypeTest of expr: SynExpr * targetType: SynType * range: range + /// F# syntax: expr :> type | Upcast of expr: SynExpr * targetType: SynType * range: range + /// F# syntax: expr :?> type | Downcast of expr: SynExpr * targetType: SynType * range: range + /// F# syntax: upcast expr | InferredUpcast of expr: SynExpr * range: range + /// F# syntax: downcast expr | InferredDowncast of expr: SynExpr * range: range + /// F# syntax: null | Null of range: range + /// F# syntax: &expr, &&expr | AddressOf of isByref: bool * expr: SynExpr * opRange: range * range: range + /// F# syntax: ((typar1 or ... or typarN): (member-dig) expr) | TraitCall of supportTys: SynTypar list * traitSig: SynMemberSig * argExpr: SynExpr * range: range + /// F# syntax: ... in ... + /// Computation expressions only, based on JOIN_IN token from lex filter | JoinIn of lhsExpr: SynExpr * lhsRange: range * rhsExpr: SynExpr * range: range + /// Used in parser error recovery and internally during type checking for translating computation expressions. | ImplicitZero of range: range + /// Used internally during type checking for translating computation expressions. | SequentialOrImplicitYield of seqPoint:DebugPointAtSequential * expr1:SynExpr * @@ -743,55 +918,72 @@ type SynExpr = ifNotStmt:SynExpr * range:range + /// F# syntax: yield expr + /// F# syntax: return expr + /// Computation expressions only | YieldOrReturn of flags: (bool * bool) * expr: SynExpr * range: range + /// F# syntax: yield! expr + /// F# syntax: return! expr + /// Computation expressions only | YieldOrReturnFrom of flags: (bool * bool) * expr: SynExpr * range: range + /// F# syntax: let! pat = expr in expr + /// F# syntax: use! pat = expr in expr + /// F# syntax: let! pat = expr and! ... and! ... and! pat = expr in expr + /// Computation expressions only | LetOrUseBang of - bindSeqPoint: DebugPointAtBinding * + bindSeqPoint: DebugPointForBinding * isUse: bool * isFromSource: bool * pat: SynPat * rhs: SynExpr * - andBangs:(DebugPointAtBinding * bool * bool * SynPat * SynExpr * range) list * + andBangs:(DebugPointForBinding * bool * bool * SynPat * SynExpr * range) list * body:SynExpr * range: range + /// F# syntax: match! expr with pat1 -> expr | ... | patN -> exprN | MatchBang of - matchSeqPoint: DebugPointAtBinding * + matchSeqPoint: DebugPointForBinding * expr: SynExpr * clauses: SynMatchClause list * range: range + /// F# syntax: do! expr + /// Computation expressions only | DoBang of expr: SynExpr * range: range + /// Only used in FSharp.Core | LibraryOnlyILAssembly of - ilCode: obj * // this type is ILInstr[] but is hidden to avoid the representation of AbstractIL being public + ilCode: ILInstr array * typeArgs: SynType list * args: SynExpr list * retTy: SynType list * range: range + /// Only used in FSharp.Core | LibraryOnlyStaticOptimization of constraints: SynStaticOptimizationConstraint list * expr: SynExpr * optimizedExpr: SynExpr * range: range + /// Only used in FSharp.Core | LibraryOnlyUnionCaseFieldGet of expr: SynExpr * longId: LongIdent * fieldNum: int * range: range + /// Only used in FSharp.Core | LibraryOnlyUnionCaseFieldSet of expr: SynExpr * longId: LongIdent * @@ -799,27 +991,33 @@ type SynExpr = rhsExpr: SynExpr * range: range + /// Inserted for error recovery | ArbitraryAfterError of debugStr: string * range: range + /// Inserted for error recovery | FromParseError of expr: SynExpr * range: range + /// Inserted for error recovery when there is "expr." and missing tokens or error recovery after the dot | DiscardAfterMissingQualificationAfterDot of expr: SynExpr * range: range + /// 'use x = fixed expr' | Fixed of expr: SynExpr * range: range + /// F# syntax: interpolated string, e.g. "abc{x}" or "abc{x,3}" or "abc{x:N4}" + /// Note the string ranges include the quotes, verbatim markers, dollar sign and braces | InterpolatedString of contents: SynInterpolatedStringPart list * - synStringKind :SynStringKind * range: range + /// Gets the syntax range of this construct member e.Range = match e with | SynExpr.Paren (_, leftParenRange, rightParenRange, r) -> @@ -889,17 +1087,20 @@ type SynExpr = | SynExpr.InterpolatedString (range=m) -> m | SynExpr.Ident id -> id.idRange - member e.RangeWithoutAnyExtraDot = + /// Get the Range ignoring any (parse error) extra trailing dots + member e.RangeSansAnyExtraDot = match e with | SynExpr.DotGet (expr, _, lidwd, m) -> if lidwd.ThereIsAnExtraDotAtTheEnd then - unionRanges expr.Range lidwd.RangeWithoutAnyExtraDot + unionRanges expr.Range lidwd.RangeSansAnyExtraDot else m - | SynExpr.LongIdent (_, lidwd, _, _) -> lidwd.RangeWithoutAnyExtraDot + | SynExpr.LongIdent (_, lidwd, _, _) -> lidwd.RangeSansAnyExtraDot | SynExpr.DiscardAfterMissingQualificationAfterDot (expr, _) -> expr.Range | _ -> e.Range + /// Attempt to get the range of the first token or initial portion only - this + /// is ad-hoc, just a cheap way to improve a certain 'query custom operation' error range member e.RangeOfFirstPortion = match e with // these are better than just .Range, and also commonly applicable inside queries @@ -914,6 +1115,7 @@ type SynExpr = mkRange r.FileName start e | _ -> e.Range + /// Indicates if this expression arises from error recovery member this.IsArbExprAndThusAlreadyReportedError = match this with | SynExpr.ArbitraryAfterError _ -> true @@ -921,11 +1123,13 @@ type SynExpr = [] type SynInterpolatedStringPart = - | String of value: string * range: range - | FillExpr of fillExpr: SynExpr * qualifiers: Ident option + | String of string * range + | FillExpr of SynExpr * Ident option +/// Represents a syntax tree for an F# indexer expression argument [] type SynIndexerArg = + /// A two-element range indexer argument | Two of expr1: SynExpr * fromEnd1: bool * @@ -934,16 +1138,33 @@ type SynIndexerArg = range1: range * range2: range + /// A one-element item indexer argument | One of expr: SynExpr * fromEnd: bool * range + /// Gets the syntax range of this construct member x.Range = match x with Two (e1, _, e2, _, _, _) -> unionRanges e1.Range e2.Range | One (e, _, _) -> e.Range + /// Get the one or two expressions as a list member x.Exprs = match x with Two (e1, _, e2, _, _, _) -> [e1;e2] | One (e, _, _) -> [e] +/// Represents a syntax tree for simple F# patterns [] type SynSimplePat = + + /// Indicates a simple pattern variable. + /// + /// altNameRefCell: + /// Normally 'None' except for some compiler-generated variables in desugaring pattern matching. + /// Pattern processing sets this reference for hidden variable introduced + /// by desugaring pattern matching in arguments. The info indicates an + /// alternative (compiler generated) identifier to be used because the + /// name of the identifier is already bound. + /// + /// isCompilerGenerated: true if a compiler generated name + /// isThisVar: true if 'this' variable in member + /// isOptArg: true if a '?' is in front of the name | Id of ident: Ident * altNameRefCell: SynSimplePatAlternativeIdInfo ref option * @@ -952,43 +1173,49 @@ type SynSimplePat = isOptArg: bool * range: range + /// A type annotated simple pattern | Typed of pat: SynSimplePat * targetType: SynType * range: range + /// An attributed simple pattern | Attrib of pat: SynSimplePat * attributes: SynAttributes * range: range - member x.Range = - match x with - | SynSimplePat.Id(range=range) - | SynSimplePat.Typed(range=range) - | SynSimplePat.Attrib(range=range) -> range - -[] +/// Represents the alternative identifier for a simple pattern type SynSimplePatAlternativeIdInfo = + /// We have not decided to use an alternative name in the pattern and related expression | Undecided of Ident + /// We have decided to use an alternative name in the pattern and related expression | Decided of Ident -[] +/// Represents a syntax tree for a static optimization constraint in the F# core library +[] type SynStaticOptimizationConstraint = + /// A static optimization conditional that activates for a particular type instantiation | WhenTyparTyconEqualsTycon of typar: SynTypar * rhsType: SynType * range: range + /// A static optimization conditional that activates for a struct | WhenTyparIsStruct of typar: SynTypar * range: range +/// Represents a simple set of variable bindings a, (a, b) or (a: Type, b: Type) at a lambda, +/// function definition or other binding point, after the elimination of pattern matching +/// from the construct, e.g. after changing a "function pat1 -> rule1 | ..." to a +/// "fun v -> match v with ..." [] type SynSimplePats = + | SimplePats of pats: SynSimplePat list * range: range @@ -998,12 +1225,7 @@ type SynSimplePats = targetType: SynType * range: range - member x.Range = - match x with - | SynSimplePats.SimplePats(range=range) - | SynSimplePats.Typed(range=range) -> range - -[] +/// Represents a syntax tree for arguments patterns type SynArgPats = | Pats of pats: SynPat list @@ -1012,46 +1234,51 @@ type SynArgPats = pats: (Ident * SynPat) list * range: range +/// Represents a syntax tree for an F# pattern [] type SynPat = + /// A constant in a pattern | Const of constant: SynConst * range: range + /// A wildcard '_' in a pattern | Wild of range: range + /// A named pattern 'pat as ident' | Named of + pat: SynPat * ident: Ident * isSelfIdentifier: bool * accessibility: SynAccess option * range: range + /// A typed pattern 'pat : type' | Typed of pat: SynPat * targetType: SynType * range: range + /// An attributed pattern, used in argument or declaration position | Attrib of pat: SynPat * attributes: SynAttributes * range: range + /// A disjunctive pattern 'pat1 | pat2' | Or of lhsPat: SynPat * rhsPat: SynPat * range: range + /// A conjunctive pattern 'pat1 & pat2' | Ands of pats: SynPat list * range: range - - | As of - lhsPat: SynPat * - rhsPat: SynPat * - range: range + /// A long identifier pattern possibly with argument patterns | LongIdent of longDotId: LongIdentWithDots * extraId: Ident option * // holds additional ident for tooling @@ -1060,44 +1287,54 @@ type SynPat = accessibility: SynAccess option * range: range + /// A tuple pattern | Tuple of isStruct: bool * elementPats: SynPat list * range: range + /// A parenthesized pattern | Paren of pat: SynPat * range: range + /// An array or a list as a pattern | ArrayOrList of isArray: bool * elementPats: SynPat list * range: range + /// A record pattern | Record of fieldPats: ((LongIdent * Ident) * SynPat) list * range: range + /// The 'null' pattern | Null of range: range + /// '?id' -- for optional argument names | OptionalVal of ident: Ident * range: range + /// A type test pattern ':? type ' | IsInst of pat: SynType * range: range + /// <@ expr @>, used for active pattern arguments | QuoteExpr of expr: SynExpr * range: range + /// Deprecated character range: ranges | DeprecatedCharRange of startChar: char * endChar: char * range: range + /// Used internally in the type checker | InstanceMember of thisId: Ident * memberId: Ident * @@ -1105,10 +1342,12 @@ type SynPat = accessibility: SynAccess option * range: range + /// A pattern arising from a parse error | FromParseError of pat: SynPat * range: range + /// Gets the syntax range of this construct member p.Range = match p with | SynPat.Const (range=m) @@ -1116,7 +1355,6 @@ type SynPat = | SynPat.Named (range=m) | SynPat.Or (range=m) | SynPat.Ands (range=m) - | SynPat.As (range=m) | SynPat.LongIdent (range=m) | SynPat.ArrayOrList (range=m) | SynPat.Tuple (range=m) @@ -1132,68 +1370,79 @@ type SynPat = | SynPat.Paren (range=m) | SynPat.FromParseError (range=m) -> m -[] +/// Represents a set of bindings that implement an interface +[] type SynInterfaceImpl = - | SynInterfaceImpl of - interfaceTy: SynType * - bindings: SynBinding list * - range: range + | InterfaceImpl of SynType * SynBinding list * range: range +/// Represents a clause in a 'match' expression [] type SynMatchClause = - | SynMatchClause of + | Clause of pat: SynPat * whenExpr: SynExpr option * resultExpr: SynExpr * range: range * spInfo: DebugPointForTarget + /// Gets the syntax range of part of this construct member this.RangeOfGuardAndRhs = match this with - | SynMatchClause(_, eo, e, _, _) -> + | Clause(_, eo, e, _, _) -> match eo with | None -> e.Range | Some x -> unionRanges e.Range x.Range + /// Gets the syntax range of this construct member this.Range = match this with - | SynMatchClause(range = m) -> m + | Clause(_, eo, e, m, _) -> + match eo with + | None -> unionRanges e.Range m + | Some x -> unionRanges (unionRanges e.Range m) x.Range +/// Represents an attribute [] type SynAttribute = - { TypeName: LongIdentWithDots + { /// The name of the type for the attribute + TypeName: LongIdentWithDots + /// The argument of the attribute, perhaps a tuple ArgExpr: SynExpr + /// Target specifier, e.g. "assembly", "module", etc. Target: Ident option + /// Is this attribute being applied to a property getter or setter? AppliesToGetterAndSetter: bool + /// The syntax range of the attribute Range: range } -[] +/// List of attributes enclosed in [< ... >]. type SynAttributeList = { + /// The list of attributes Attributes: SynAttribute list + /// The syntax range of the list of attributes Range: range } type SynAttributes = SynAttributeList list +/// Represents extra information about the declaration of a value [] type SynValData = - | SynValData of - memberFlags: SynMemberFlags option * - valInfo: SynValInfo * - thisIdOpt: Ident option + | SynValData of MemberFlags option * SynValInfo * Ident option member x.SynValInfo = (let (SynValData(_flags, synValInfo, _)) = x in synValInfo) +/// Represents a binding for a 'let' or 'member' declaration [] type SynBinding = - | SynBinding of + | Binding of accessibility: SynAccess option * kind: SynBindingKind * mustInline: bool * @@ -1205,142 +1454,171 @@ type SynBinding = returnInfo: SynBindingReturnInfo option * expr: SynExpr * range: range * - seqPoint: DebugPointAtBinding + seqPoint: DebugPointForBinding // no member just named "Range", as that would be confusing: // - for everything else, the 'range' member that appears last/second-to-last is the 'full range' of the whole tree construct // - but for Binding, the 'range' is only the range of the left-hand-side, the right-hand-side range is in the SynExpr // - so we use explicit names to avoid confusion - member x.RangeOfBindingWithoutRhs = let (SynBinding(range=m)) = x in m + member x.RangeOfBindingSansRhs = let (Binding(range=m)) = x in m - member x.RangeOfBindingWithRhs = let (SynBinding(expr=e; range=m)) = x in unionRanges e.Range m + member x.RangeOfBindingAndRhs = let (Binding(expr=e; range=m)) = x in unionRanges e.Range m - member x.RangeOfHeadPattern = let (SynBinding(headPat=headPat)) = x in headPat.Range + member x.RangeOfHeadPat = let (Binding(headPat=headPat)) = x in headPat.Range +/// Represents the return information in a binding for a 'let' or 'member' declaration [] type SynBindingReturnInfo = - | SynBindingReturnInfo of + SynBindingReturnInfo of typeName: SynType * range: range * attributes: SynAttributes -[] -type SynMemberFlags = +/// Represents the flags for a 'member' declaration +[] +type MemberFlags = { + /// The member is an instance member (non-static) IsInstance: bool + /// The member is a dispatch slot IsDispatchSlot: bool + /// The member is an 'override' or explicit interface implementation IsOverrideOrExplicitImpl: bool + /// The member is 'final' IsFinal: bool - MemberKind: SynMemberKind + /// The kind of the member + MemberKind: MemberKind } +/// Note the member kind is actually computed partially by a syntax tree transformation in tc.fs [] -type SynMemberKind = +type MemberKind = + /// The member is a class initializer | ClassConstructor + /// The member is a object model constructor | Constructor + /// The member kind is not yet determined | Member + /// The member kind is property getter | PropertyGet + /// The member kind is property setter | PropertySet + /// An artificial member kind used prior to the point where a + /// get/set property is split into two distinct members. | PropertyGetSet +/// Represents the syntax tree for a member signature (used in signature files, abstract member declarations +/// and member constraints) [] type SynMemberSig = + /// A member definition in a type in a signature file | Member of memberSig: SynValSig * - flags: SynMemberFlags * + flags: MemberFlags * range: range + /// An interface definition in a type in a signature file | Interface of interfaceType: SynType * range: range + /// An 'inherit' definition in a type in a signature file | Inherit of inheritedType: SynType * range: range + /// A 'val' definition in a type in a signature file | ValField of field: SynField * range: range + /// A nested type definition in a signature file (an unimplemented feature) | NestedType of nestedType: SynTypeDefnSig * range: range - member d.Range = - match d with - | SynMemberSig.Member (range=m) - | SynMemberSig.Interface (range=m) - | SynMemberSig.Inherit (range=m) - | SynMemberSig.ValField (range=m) - | SynMemberSig.NestedType (range=m) -> m - -[] +/// Represents the kind of a type definition whether explicit or inferred +[] type SynTypeDefnKind = - | Unspecified - | Class - | Interface - | Struct - | Record - | Union - | Abbrev - | Opaque - | Augmentation - | IL - | Delegate of signature: SynType * signatureInfo: SynValInfo - + | TyconUnspecified + | TyconClass + | TyconInterface + | TyconStruct + | TyconRecord + | TyconUnion + | TyconAbbrev + | TyconHiddenRepr + | TyconAugmentation + | TyconILAssemblyCode + | TyconDelegate of SynType * SynValInfo + +/// Represents the syntax tree for the core of a simple type definition, in either signature +/// or implementation. [] type SynTypeDefnSimpleRepr = + /// A union type definition, type X = A | B | Union of accessibility: SynAccess option * unionCases: SynUnionCase list * range: range + /// An enum type definition, type X = A = 1 | B = 2 | Enum of cases: SynEnumCase list * range: range + /// A record type definition, type X = { A: int; B: int } | Record of accessibility: SynAccess option * recordFields: SynField list * range: range + /// An object oriented type definition. This is not a parse-tree form, but represents the core + /// type representation which the type checker splits out from the "ObjectModel" cases of type definitions. | General of kind: SynTypeDefnKind * inherits: (SynType * range * Ident option) list * - slotsigs: (SynValSig * SynMemberFlags) list * + slotsigs: (SynValSig * MemberFlags) list * fields: SynField list * isConcrete: bool * isIncrClass: bool * implicitCtorSynPats: SynSimplePats option * range: range + /// A type defined by using an IL assembly representation. Only used in FSharp.Core. + /// + /// F# syntax: "type X = (# "..."#) | LibraryOnlyILAssembly of - ilType: obj * // this type is ILType but is hidden to avoid the representation of AbstractIL being public + ilType: ILType * range: range + /// A type abbreviation, "type X = A.B.C" | TypeAbbrev of detail: ParserDetail * rhsType: SynType * range: range + /// An abstract definition, "type X" | None of range: range + /// An exception definition, "exception E = ..." | Exception of exnRepr: SynExceptionDefnRepr + /// Gets the syntax range of this construct member this.Range = match this with | Union (range=m) @@ -1352,83 +1630,86 @@ type SynTypeDefnSimpleRepr = | None (range=m) -> m | Exception t -> t.Range +/// Represents the syntax tree for one case in an enum definition. [] type SynEnumCase = - | SynEnumCase of + | EnumCase of attributes: SynAttributes * - ident: Ident * - value: SynConst * - valueRange: range * - xmlDoc: PreXmlDoc * + ident: Ident * SynConst * + xmldoc: PreXmlDoc * range: range + /// Gets the syntax range of this construct member this.Range = match this with - | SynEnumCase (range=m) -> m + | EnumCase (range=m) -> m +/// Represents the syntax tree for one case in a union definition. [] type SynUnionCase = - | SynUnionCase of + | UnionCase of attributes: SynAttributes * ident: Ident * - caseType: SynUnionCaseKind * + caseType: SynUnionCaseType * xmlDoc: PreXmlDoc * accessibility: SynAccess option * range: range + /// Gets the syntax range of this construct member this.Range = match this with - | SynUnionCase (range=m) -> m + | UnionCase (range=m) -> m -[] -type SynUnionCaseKind = +/// Represents the syntax tree for the right-hand-side of union definition, excluding members, +/// in either a signature or implementation. +[] +type SynUnionCaseType = - | Fields of - cases: SynField list + /// Normal style declaration + | UnionCaseFields of cases: SynField list - | FullType of - fullType: SynType * - fullTypeInfo: SynValInfo + /// Full type spec given by 'UnionCase: ty1 * tyN -> rty'. Only used in FSharp.Core, otherwise a warning. + | UnionCaseFullType of SynType * SynValInfo +/// Represents the syntax tree for the right-hand-side of a type definition in a signature. +/// Note: in practice, using a discriminated union to make a distinction between +/// "simple" types and "object oriented" types is not particularly useful. [] type SynTypeDefnSigRepr = + /// Indicates the right right-hand-side is a class, struct, interface or other object-model type | ObjectModel of kind: SynTypeDefnKind * memberSigs: SynMemberSig list * range: range + /// Indicates the right right-hand-side is a record, union or other simple type. | Simple of - repr: SynTypeDefnSimpleRepr * - range: range + repr: SynTypeDefnSimpleRepr * + range: range - | Exception of - repr: SynExceptionDefnRepr + | Exception of SynExceptionDefnRepr + /// Gets the syntax range of this construct member this.Range = match this with | ObjectModel (range=m) | Simple (range=m) -> m | Exception e -> e.Range +/// Represents the syntax tree for a type definition in a signature [] type SynTypeDefnSig = - | SynTypeDefnSig of - typeInfo: SynComponentInfo * - typeRepr: SynTypeDefnSigRepr * - members: SynMemberSig list * - range: range - - member this.Range = - match this with - | SynTypeDefnSig(range=m) -> m + /// The information for a type definition in a signature + | TypeDefnSig of SynComponentInfo * SynTypeDefnSigRepr * SynMemberSig list * range: range +/// Represents the syntax tree for a field declaration in a record or class [] type SynField = - | SynField of + | Field of attributes: SynAttributes * isStatic: bool * idOpt: Ident option * @@ -1438,11 +1719,17 @@ type SynField = accessibility: SynAccess option * range: range +/// Represents the syntax tree associated with the name of a type definition or module +/// in signature or implementation. +/// +/// This includes the name, attributes, type parameters, constraints, documentation and accessibility +/// for a type definition or module. For modules, entries such as the type parameters are +/// always empty. [] type SynComponentInfo = - | SynComponentInfo of + | ComponentInfo of attributes: SynAttributes * - typeParams: SynTyparDecls option * + typeParams: SynTyparDecl list * constraints: SynTypeConstraint list * longId: LongIdent * xmlDoc: PreXmlDoc * @@ -1450,13 +1737,15 @@ type SynComponentInfo = accessibility: SynAccess option * range: range + /// Gets the syntax range of this construct member this.Range = match this with - | SynComponentInfo (range=m) -> m + | ComponentInfo (range=m) -> m +/// Represents the syntax tree for a 'val' definition in an abstract slot or a signature file [] type SynValSig = - | SynValSig of + | ValSpfn of attributes: SynAttributes * ident: Ident * explicitValDecls: SynValTyparDecls * @@ -1469,15 +1758,17 @@ type SynValSig = synExpr: SynExpr option * range: range - member x.RangeOfId = let (SynValSig(ident=id)) = x in id.idRange + member x.RangeOfId = let (ValSpfn(ident=id)) = x in id.idRange - member x.SynInfo = let (SynValSig(arity=v)) = x in v + member x.SynInfo = let (ValSpfn(arity=v)) = x in v - member x.SynType = let (SynValSig(synType=ty)) = x in ty + member x.SynType = let (ValSpfn(synType=ty)) = x in ty +/// The argument names and other metadata for a member or function [] type SynValInfo = + /// SynValInfo(curriedArgInfos, returnInfo) | SynValInfo of curriedArgInfos: SynArgInfo list list * returnInfo: SynArgInfo member x.CurriedArgInfos = (let (SynValInfo(args, _)) = x in args) @@ -1489,6 +1780,7 @@ type SynValInfo = |> List.choose id |> List.map (fun id -> id.idText) +/// Represents the argument names and other metadata for a parameter for a member or function [] type SynArgInfo = @@ -1499,16 +1791,20 @@ type SynArgInfo = member x.Ident : Ident option = let (SynArgInfo(_,_,id)) = x in id +/// Represents the names and other metadata for the type parameters for a member or function [] type SynValTyparDecls = + | SynValTyparDecls of - typars: SynTyparDecls option * - canInfer: bool + typars: SynTyparDecl list * + canInfer: bool * + constraints: SynTypeConstraint list -[] +/// Represents the syntactic elements associated with the "return" of a function or method. type SynReturnInfo = | SynReturnInfo of returnType: (SynType * SynArgInfo) * range: range +/// Represents the right hand side of an exception declaration 'exception E = ... ' [] type SynExceptionDefnRepr = @@ -1520,8 +1816,11 @@ type SynExceptionDefnRepr = accessibility: SynAccess option * range: range + /// Gets the syntax range of this construct member this.Range = match this with SynExceptionDefnRepr (range=m) -> m +/// Represents the right hand side of an exception declaration 'exception E = ... ' plus +/// any member definitions for the exception [] type SynExceptionDefn = @@ -1530,112 +1829,134 @@ type SynExceptionDefn = members: SynMemberDefns * range: range + /// Gets the syntax range of this construct member this.Range = match this with | SynExceptionDefn (range=m) -> m +/// Represents the right hand side of a type or exception declaration 'type C = ... ' plus +/// any additional member definitions for the type [] type SynTypeDefnRepr = + /// An object model type definition (class or interface) | ObjectModel of kind: SynTypeDefnKind * members: SynMemberDefns * range: range + /// A simple type definition (record, union, abbreviation) | Simple of simpleRepr: SynTypeDefnSimpleRepr * range: range + /// An exception definition | Exception of exnRepr: SynExceptionDefnRepr + /// Gets the syntax range of this construct member this.Range = match this with | ObjectModel (range=m) | Simple (range=m) -> m | Exception t -> t.Range +/// Represents a type or exception declaration 'type C = ... ' plus +/// any additional member definitions for the type [] type SynTypeDefn = - | SynTypeDefn of + | TypeDefn of typeInfo: SynComponentInfo * typeRepr: SynTypeDefnRepr * members: SynMemberDefns * - implicitConstructor: SynMemberDefn option * range: range + /// Gets the syntax range of this construct member this.Range = match this with - | SynTypeDefn (range=m) -> m + | TypeDefn (range=m) -> m +/// Represents a definition element within a type definition, e.g. 'member ... ' [] type SynMemberDefn = + /// An 'open' definition within a type | Open of target: SynOpenDeclTarget * range: range + /// A 'member' definition within a type | Member of memberDefn: SynBinding * range: range + /// An implicit constructor definition | ImplicitCtor of accessibility: SynAccess option * attributes: SynAttributes * ctorArgs: SynSimplePats * selfIdentifier: Ident option * - xmlDoc: PreXmlDoc * + doc: PreXmlDoc * range: range + /// An implicit inherit definition, 'inherit (args...) as base' | ImplicitInherit of inheritType: SynType * inheritArgs: SynExpr * inheritAlias: Ident option * range: range + /// A 'let' definition within a class | LetBindings of bindings: SynBinding list * isStatic: bool * isRecursive: bool * range: range + /// An abstract slot definition within a class or interface | AbstractSlot of slotSig: SynValSig * - flags: SynMemberFlags * + flags: MemberFlags * range: range + /// An interface implementation definition within a class | Interface of interfaceType: SynType * members: SynMemberDefns option * range: range + /// An 'inherit' definition within a class | Inherit of baseType: SynType * asIdent: Ident option * range: range + /// A 'val' definition within a class | ValField of fieldInfo: SynField * range: range + /// A nested type definition, a feature that is not implemented | NestedType of typeDefn: SynTypeDefn * accessibility: SynAccess option * range: range + /// An auto-property definition, F# syntax: 'member val X = expr' | AutoProperty of attributes: SynAttributes * isStatic: bool * ident: Ident * typeOpt: SynType option * - propKind: SynMemberKind * - memberFlags:(SynMemberKind -> SynMemberFlags) * + propKind: MemberKind * + memberFlags:(MemberKind -> MemberFlags) * xmlDoc: PreXmlDoc * accessibility: SynAccess option * synExpr: SynExpr * getSetRange: range option * range: range + /// Gets the syntax range of this construct member d.Range = match d with | SynMemberDefn.Member (range=m) @@ -1652,14 +1973,17 @@ type SynMemberDefn = type SynMemberDefns = SynMemberDefn list +/// Represents a definition within a module [] type SynModuleDecl = + /// A module abbreviation definition 'module X = A.B.C' | ModuleAbbrev of ident: Ident * longId: LongIdent * range: range + /// A nested module definition 'module X = ...' | NestedModule of moduleInfo: SynComponentInfo * isRecursive: bool * @@ -1667,39 +1991,48 @@ type SynModuleDecl = isContinuing: bool * range: range + /// A 'let' definition within a module | Let of isRecursive: bool * bindings: SynBinding list * range: range + /// A 'do expr' within a module | DoExpr of - spInfo: DebugPointAtBinding * + spInfo: DebugPointForBinding * expr: SynExpr * range: range + /// One or more 'type' definitions within a module | Types of typeDefns: SynTypeDefn list * range: range + /// An 'exception' definition within a module | Exception of exnDefn: SynExceptionDefn * range: range + /// An 'open' definition within a module | Open of target: SynOpenDeclTarget * range: range + /// An attribute definition within a module, for assembly and .NET module attributes | Attributes of attributes: SynAttributes * range: range + /// A hash directive within a module | HashDirective of hashDirective: ParsedHashDirective * range: range + /// A namespace fragment within a module | NamespaceFragment of fragment: SynModuleOrNamespace + /// Gets the syntax range of this construct member d.Range = match d with | SynModuleDecl.ModuleAbbrev (range=m) @@ -1713,18 +2046,23 @@ type SynModuleDecl = | SynModuleDecl.NamespaceFragment (SynModuleOrNamespace (range=m)) | SynModuleDecl.Attributes (range=m) -> m +/// Represents the target of the open declaration [] type SynOpenDeclTarget = + /// A 'open' declaration | ModuleOrNamespace of longId: LongIdent * range: range + /// A 'open type' declaration | Type of typeName: SynType * range: range + /// Gets the syntax range of this construct member this.Range = match this with | ModuleOrNamespace (range=m) -> m | Type (range=m) -> m +/// Represents the right hand side of an exception definition in a signature file [] type SynExceptionSig = | SynExceptionSig of @@ -1732,42 +2070,53 @@ type SynExceptionSig = members: SynMemberSig list * range: range +/// Represents a definition within a module or namespace in a signature file [] type SynModuleSigDecl = + /// A module abbreviation definition within a module or namespace in a signature file | ModuleAbbrev of ident: Ident * longId: LongIdent * range: range + /// A nested module definition within a module or namespace in a signature file | NestedModule of moduleInfo: SynComponentInfo * isRecursive: bool * moduleDecls: SynModuleSigDecl list * range: range + /// A 'val' definition within a module or namespace in a signature file, corresponding + /// to a 'let' definition in the implementation | Val of valSig: SynValSig * range: range + /// A set of one or more type definitions within a module or namespace in a signature file | Types of types: SynTypeDefnSig list * range: range + /// An exception definition within a module or namespace in a signature file | Exception of exnSig: SynExceptionSig * range: range + /// An 'open' definition within a module or namespace in a signature file | Open of target: SynOpenDeclTarget * range: range + /// A hash directive within a module or namespace in a signature file | HashDirective of hashDirective: ParsedHashDirective * range: range + /// A namespace fragment within a namespace in a signature file | NamespaceFragment of SynModuleOrNamespaceSig + /// Gets the syntax range of this construct member d.Range = match d with | SynModuleSigDecl.ModuleAbbrev (range=m) @@ -1776,24 +2125,31 @@ type SynModuleSigDecl = | SynModuleSigDecl.Types (range=m) | SynModuleSigDecl.Exception (range=m) | SynModuleSigDecl.Open (range=m) - | SynModuleSigDecl.NamespaceFragment (SynModuleOrNamespaceSig.SynModuleOrNamespaceSig(range=m)) + | SynModuleSigDecl.NamespaceFragment (SynModuleOrNamespaceSig(range=m)) | SynModuleSigDecl.HashDirective (range=m) -> m -[] +/// Represents the kind of a module or namespace definition +[] type SynModuleOrNamespaceKind = + /// A module is explicitly named 'module N' | NamedModule + /// A module is anonymously named, e.g. a script | AnonModule + /// A namespace is explicitly declared | DeclaredNamespace + /// A namespace is declared 'global' | GlobalNamespace + /// Indicates if this is a module definition member x.IsModule = match x with | NamedModule | AnonModule -> true | _ -> false +/// Represents the definition of a module or namespace [] type SynModuleOrNamespace = | SynModuleOrNamespace of @@ -1806,10 +2162,12 @@ type SynModuleOrNamespace = accessibility: SynAccess option * range: range + /// Gets the syntax range of this construct member this.Range = match this with | SynModuleOrNamespace (range=m) -> m +/// Represents the definition of a module or namespace in a signature file [] type SynModuleOrNamespaceSig = | SynModuleOrNamespaceSig of @@ -1822,37 +2180,28 @@ type SynModuleOrNamespaceSig = accessibility: SynAccess option * range: range - member this.Range = - match this with - | SynModuleOrNamespaceSig (range=m) -> m - -[] -type ParsedHashDirectiveArgument = - | String of value: string * stringKind: SynStringKind * range: Range - | SourceIdentifier of constant: string * value: string * range: Range - - member this.Range = - match this with - | ParsedHashDirectiveArgument.String (range=m) - | ParsedHashDirectiveArgument.SourceIdentifier (range=m) -> m - +/// Represents a parsed hash directive [] type ParsedHashDirective = | ParsedHashDirective of ident: string * - args: ParsedHashDirectiveArgument list * + args: string list * range: range +/// Represents the syntax tree for the contents of a parsed implementation file [] type ParsedImplFileFragment = + /// An implementation file which is an anonymous module definition, e.g. a script | AnonModule of decls: SynModuleDecl list * range: range + /// An implementation file is a named module definition, 'module N' | NamedModule of namedModule: SynModuleOrNamespace + /// An implementation file fragment which declares a namespace fragment | NamespaceFragment of longId: LongIdent * isRecursive: bool * @@ -1862,16 +2211,20 @@ type ParsedImplFileFragment = attributes: SynAttributes * range: range +/// Represents the syntax tree for the contents of a parsed signature file [] type ParsedSigFileFragment = + /// A signature file which is an anonymous module, e.g. the signature file for the final file in an application | AnonModule of decls: SynModuleSigDecl list * range: range + /// A signature file which is a module, 'module N' | NamedModule of namedModule: SynModuleOrNamespaceSig + /// A signature file namespace fragment | NamespaceFragment of longId: LongIdent * isRecursive: bool * @@ -1881,42 +2234,52 @@ type ParsedSigFileFragment = attributes: SynAttributes * range: range -[] -type ParsedScriptInteraction = - | Definitions of +/// Represents a parsed syntax tree for an F# Interactive interaction +[] +type ParsedFsiInteraction = + | IDefns of defns: SynModuleDecl list * range: range - | HashDirective of + | IHash of hashDirective: ParsedHashDirective * range: range +/// Represents a parsed implementation file made up of fragments [] type ParsedImplFile = | ParsedImplFile of hashDirectives: ParsedHashDirective list * fragments: ParsedImplFileFragment list +/// Represents a parsed signature file made up of fragments [] type ParsedSigFile = | ParsedSigFile of hashDirectives: ParsedHashDirective list * fragments: ParsedSigFileFragment list +/// Represents a scoped pragma [] type ScopedPragma = + /// A pragma to turn a warning off | WarningOff of range: range * warningNumber: int +/// Represents a qualifying name for anonymous module specifications and implementations, [] type QualifiedNameOfFile = | QualifiedNameOfFile of Ident + /// The name of the file member x.Text = (let (QualifiedNameOfFile t) = x in t.idText) + /// The identifier for the name of the file member x.Id = (let (QualifiedNameOfFile t) = x in t) + /// Gets the syntax range of this construct member x.Range = (let (QualifiedNameOfFile t) = x in t.idRange) +/// Represents the full syntax tree, file name and other parsing information for an implementation file [] type ParsedImplFileInput = | ParsedImplFileInput of @@ -1928,6 +2291,7 @@ type ParsedImplFileInput = modules: SynModuleOrNamespace list * isLastCompiland: (bool * bool) +/// Represents the full syntax tree, file name and other parsing information for a signature file [] type ParsedSigFileInput = | ParsedSigFileInput of @@ -1937,17 +2301,16 @@ type ParsedSigFileInput = hashDirectives: ParsedHashDirective list * modules: SynModuleOrNamespaceSig list +/// Represents the syntax tree for a parsed implementation or signature file [] type ParsedInput = + /// A parsed implementation file | ImplFile of ParsedImplFileInput + /// A parsed signature file | SigFile of ParsedSigFileInput - member inp.FileName = - match inp with - | ParsedInput.ImplFile (ParsedImplFileInput (fileName=filename)) - | ParsedInput.SigFile (ParsedSigFileInput (fileName=filename)) -> filename - + /// Gets the syntax range of this construct member inp.Range = match inp with | ParsedInput.ImplFile (ParsedImplFileInput (modules=SynModuleOrNamespace(range=m) :: _)) diff --git a/src/fsharp/SyntaxTree.fsi b/src/fsharp/SyntaxTree.fsi deleted file mode 100644 index a04fc70da39..00000000000 --- a/src/fsharp/SyntaxTree.fsi +++ /dev/null @@ -1,2160 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace rec FSharp.Compiler.Syntax - -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Xml - -/// Represents an identifier in F# code -[] -type Ident = - new: text: string * range: range -> Ident - member idText: string - member idRange: range - - -/// Represents a long identifier e.g. 'A.B.C' -type LongIdent = Ident list - - -/// Represents a long identifier with possible '.' at end. -/// -/// Typically dotRanges.Length = lid.Length-1, but they may be same if (incomplete) code ends in a dot, e.g. "Foo.Bar." -/// The dots mostly matter for parsing, and are typically ignored by the typechecker, but -/// if dotRanges.Length = lid.Length, then the parser must have reported an error, so the typechecker is allowed -/// more freedom about typechecking these expressions. -/// LongIdent can be empty list - it is used to denote that name of some AST element is absent (i.e. empty type name in inherit) -type LongIdentWithDots = - | //[] - LongIdentWithDots of id: LongIdent * dotRanges: range list - - /// Gets the syntax range of this construct - member Range: range - - /// Get the long ident for this construct - member Lid: LongIdent - - /// Indicates if the construct ends in '.' due to error recovery - member ThereIsAnExtraDotAtTheEnd: bool - - /// Gets the syntax range for part of this construct - member RangeWithoutAnyExtraDot: range - -/// Indicates if the construct arises from error recovery -[] -type ParserDetail = - /// The construct arises normally - | Ok - - /// The construct arises from error recovery - | ErrorRecovery - -/// Represents whether a type parameter has a static requirement or not (^T or 'T) -[] -type TyparStaticReq = - /// The construct is a normal type inference variable - | None - - /// The construct is a statically inferred type inference variable '^T' - | HeadType - -/// Represents a syntactic type parameter -[] -type SynTypar = - | SynTypar of ident: Ident * staticReq: TyparStaticReq * isCompGen: bool - - /// Gets the syntax range of this construct - member Range: range - -/// Indicate if the string had a special format -[] -type SynStringKind = - | Regular - | Verbatim - | TripleQuote - -/// Indicate if the byte string had a special format -[] -type SynByteStringKind = - | Regular - | Verbatim - -/// The unchecked abstract syntax tree of constants in F# types and expressions. -[] -type SynConst = - - /// F# syntax: () - | Unit - - /// F# syntax: true, false - | Bool of bool - - /// F# syntax: 13y, 0xFFy, 0o077y, 0b0111101y - | SByte of sbyte - - /// F# syntax: 13uy, 0x40uy, 0oFFuy, 0b0111101uy - | Byte of byte - - /// F# syntax: 13s, 0x4000s, 0o0777s, 0b0111101s - | Int16 of int16 - - /// F# syntax: 13us, 0x4000us, 0o0777us, 0b0111101us - | UInt16 of uint16 - - /// F# syntax: 13, 0x4000, 0o0777 - | Int32 of int32 - - /// F# syntax: 13u, 0x4000u, 0o0777u - | UInt32 of uint32 - - /// F# syntax: 13L - | Int64 of int64 - - /// F# syntax: 13UL - | UInt64 of uint64 - - /// F# syntax: 13n - | IntPtr of int64 - - /// F# syntax: 13un - | UIntPtr of uint64 - - /// F# syntax: 1.30f, 1.40e10f etc. - | Single of single - - /// F# syntax: 1.30, 1.40e10 etc. - | Double of double - - /// F# syntax: 'a' - | Char of char - - /// F# syntax: 23.4M - | Decimal of System.Decimal - - /// UserNum(value, suffix) - /// - /// F# syntax: 1Q, 1Z, 1R, 1N, 1G - | UserNum of value: string * suffix: string - - /// F# syntax: verbatim or regular string, e.g. "abc" - | String of text: string * synStringKind :SynStringKind * range: range - - /// F# syntax: verbatim or regular byte string, e.g. "abc"B. - /// - /// Also used internally in the typechecker once an array of unit16 constants - /// is detected, to allow more efficient processing of large arrays of uint16 constants. - | Bytes of bytes: byte[] * synByteStringKind: SynByteStringKind * range: range - - /// Used internally in the typechecker once an array of unit16 constants - /// is detected, to allow more efficient processing of large arrays of uint16 constants. - | UInt16s of uint16[] - - /// Old comment: "we never iterate, so the const here is not another SynConst.Measure" - | Measure of constant: SynConst * constantRange: range * SynMeasure - - /// Source Line, File, and Path Identifiers - /// Containing both the original value as the evaluated value. - | SourceIdentifier of constant: string * value: string * range: Range - - /// Gets the syntax range of this construct - member Range: dflt: range -> range - -/// Represents an unchecked syntax tree of F# unit of measure annotations. -[] -type SynMeasure = - - /// A named unit of measure - | Named of longId: LongIdent * range: range - - /// A product of two units of measure, e.g. 'kg * m' - | Product of measure1: SynMeasure * measure2: SynMeasure * range: range - - /// A sequence of several units of measure, e.g. 'kg m m' - | Seq of measures: SynMeasure list * range: range - - /// A division of two units of measure, e.g. 'kg / m' - | Divide of measure1: SynMeasure * measure2: SynMeasure * range: range - - /// A power of a unit of measure, e.g. 'kg ^ 2' - | Power of measure: SynMeasure * power: SynRationalConst * range: range - - /// The '1' unit of measure - | One - - /// An anonymous (inferred) unit of measure - | Anon of range: range - - /// A variable unit of measure - | Var of typar: SynTypar * range: range - -/// Represents an unchecked syntax tree of F# unit of measure exponents. -[] -type SynRationalConst = - - | Integer of value: int32 - - | Rational of numerator: int32 * denominator: int32 * range: range - - | Negate of SynRationalConst - -/// Represents an accessibility modifier in F# syntax -[] -type SynAccess = - /// A construct marked or assumed 'public' - | Public - - /// A construct marked or assumed 'internal' - | Internal - - /// A construct marked or assumed 'private' - | Private - -/// Represents whether a debug point should be present for the target -/// of a decision tree, that is whether the construct corresponds to a debug -/// point in the original source. -[] -type DebugPointForTarget = - | Yes - | No - -/// Represents whether a debug point should be present for either the -/// first or second part of a sequential execution, that is whether the -/// construct corresponds to a debug point in the original source. -[] -type DebugPointAtSequential = - | Both - - // This means "suppress a in 'a;b'" and "suppress b in 'a before b'" - | StmtOnly - - // This means "suppress b in 'a;b'" and "suppress a in 'a before b'" - | ExprOnly - -/// Represents whether a debug point should be present for a 'try', that is whether -/// the construct corresponds to a debug point in the original source. -[] -type DebugPointAtTry = - | Yes of range: range - | Body - | No - -/// Represents whether a debug point should be present for the 'with' in a 'try .. with', -/// that is whether the construct corresponds to a debug point in the original source. -[] -type DebugPointAtWith = - | Yes of range: range - | No - -/// Represents whether a debug point should be present for the 'finally' in a 'try .. finally', -/// that is whether the construct corresponds to a debug point in the original source. -[] -type DebugPointAtFinally = - | Yes of range: range - | Body - | No - -/// Represents whether a debug point should be present for the 'for' in a 'for...' loop, -/// that is whether the construct corresponds to a debug point in the original source. -[] -type DebugPointAtFor = - | Yes of range: range - | No - -/// Represents whether a debug point should be present for the 'while' in a 'while...' loop, -/// that is whether the construct corresponds to a debug point in the original source. -[] -type DebugPointAtWhile = - | Yes of range: range - | No - -/// Represents whether a debug point should be present for a 'let' binding, -/// that is whether the construct corresponds to a debug point in the original source. -[] -type DebugPointAtBinding = - // Indicates emit of a debug point prior to the 'let' - | Yes of range: range - - // Indicates the omission of a debug point for a binding for a 'do expr' - | NoneAtDo - - // Indicates the omission of a debug point for a binding for a 'let e = expr' where - // 'expr' has immediate control flow - | NoneAtLet - - // Indicates the omission of a debug point for a compiler generated binding - // where we've done a local expansion of some construct into something that involves - // a 'let'. e.g. we've inlined a function and bound its arguments using 'let' - // The let bindings are 'sticky' in that the inversion of the inlining would involve - // replacing the entire expression with the original and not just the let bindings alone. - | NoneAtSticky - - // Given 'let v = e1 in e2', where this is a compiler generated binding, - // we are sometimes forced to generate a debug point for the expression anyway based on its - // overall range. If the let binding is given the flag below then it is asserting that - // the binding has no interesting side effects and can be totally ignored and the range - // of the inner expression is used instead - | NoneAtInvisible - - // Don't drop debug points when combining debug points - member Combine: y: DebugPointAtBinding -> DebugPointAtBinding - -/// Indicates if a for loop is 'for x in e1 -> e2', only valid in sequence expressions -type SeqExprOnly = - /// Indicates if a for loop is 'for x in e1 -> e2', only valid in sequence expressions - | SeqExprOnly of bool - -/// Represents the location of the separator block + optional position -/// of the semicolon (used for tooling support) -type BlockSeparator = range * pos option - -/// Represents a record field name plus a flag indicating if given record field name is syntactically -/// correct and can be used in name resolution. -type RecordFieldName = LongIdentWithDots * bool - -/// Indicates if an expression is an atomic expression. -/// -/// An atomic expression has no whitespace unless enclosed in parentheses, e.g. -/// 1, "3", ident, ident.[expr] and (expr). If an atomic expression has type T, -/// then the largest expression ending at the same range as the atomic expression -/// also has type T. -[] -type ExprAtomicFlag = - | Atomic = 0 - | NonAtomic = 1 - -/// The kind associated with a binding - "let", "do" or a standalone expression -[] -type SynBindingKind = - - /// A standalone expression in a module - | StandaloneExpression - - /// A normal 'let' binding in a module - | Normal - - /// A 'do' binding in a module. Must have type 'unit' - | Do - -/// Represents the explicit declaration of a type parameter -[] -type SynTyparDecl = - | SynTyparDecl of attributes: SynAttributes * SynTypar - -/// The unchecked abstract syntax tree of F# type constraints -[] -type SynTypeConstraint = - - /// F# syntax: is 'typar: struct - | WhereTyparIsValueType of - typar: SynTypar * - range: range - - /// F# syntax: is 'typar: not struct - | WhereTyparIsReferenceType of - typar: SynTypar * - range: range - - /// F# syntax is 'typar: unmanaged - | WhereTyparIsUnmanaged of - typar: SynTypar * - range: range - - /// F# syntax is 'typar: null - | WhereTyparSupportsNull of - typar: SynTypar * - range: range - - /// F# syntax is 'typar: comparison - | WhereTyparIsComparable of - typar: SynTypar * - range: range - - /// F# syntax is 'typar: equality - | WhereTyparIsEquatable of - typar: SynTypar * - range: range - - /// F# syntax is default ^T: type - | WhereTyparDefaultsToType of - typar: SynTypar * - typeName: SynType * - range: range - - /// F# syntax is 'typar :> type - | WhereTyparSubtypeOfType of - typar: SynTypar * - typeName: SynType * - range: range - - /// F# syntax is ^T: (static member MemberName: ^T * int -> ^T) - | WhereTyparSupportsMember of - typars: SynType list * - memberSig: SynMemberSig * - range: range - - /// F# syntax is 'typar: enum<'UnderlyingType> - | WhereTyparIsEnum of - typar: SynTypar * - typeArgs: SynType list * - range: range - - /// F# syntax is 'typar: delegate<'Args, unit> - | WhereTyparIsDelegate of - typar: SynTypar * - typeArgs: SynType list * - range: range - - member Range: range - -/// List of type parameter declarations with optional type constraints, -/// enclosed in `< ... >` (postfix) or `( ... )` (prefix), or a single prefix parameter. -[] -type SynTyparDecls = - | PostfixList of decls: SynTyparDecl list * constraints: SynTypeConstraint list * range: range - | PrefixList of decls: SynTyparDecl list * range: range - | SinglePrefix of decl: SynTyparDecl * range: range - - member TyparDecls: SynTyparDecl list - member Constraints: SynTypeConstraint list - member Range: range - -/// Represents a syntax tree for F# types -[] -type SynType = - - /// F# syntax: A.B.C - | LongIdent of - longDotId: LongIdentWithDots - - /// F# syntax: type or type type or (type, ..., type) type - /// isPostfix: indicates a postfix type application e.g. "int list" or "(int, string) dict" - | App of - typeName: SynType * - lessRange: range option * - typeArgs: SynType list * - commaRanges: range list * // interstitial commas - greaterRange: range option * - isPostfix: bool * - range: range - - /// F# syntax: type.A.B.C - | LongIdentApp of - typeName: SynType * - longDotId: LongIdentWithDots * - lessRange: range option * - typeArgs: SynType list * - commaRanges: range list * // interstitial commas - greaterRange: range option * - range: range - - /// F# syntax: type * ... * type - /// F# syntax: struct (type * ... * type) - // the bool is true if / rather than * follows the type - | Tuple of - isStruct: bool * - elementTypes:(bool*SynType) list * - range: range - - /// F# syntax: {| id: type; ...; id: type |} - /// F# syntax: struct {| id: type; ...; id: type |} - | AnonRecd of - isStruct: bool * - fields:(Ident * SynType) list * - range: range - - /// F# syntax: type[] - | Array of - rank: int * - elementType: SynType * - range: range - - /// F# syntax: type -> type - | Fun of - argType: SynType * - returnType: SynType * - range: range - - /// F# syntax: 'Var - | Var of - typar: SynTypar * - range: range - - /// F# syntax: _ - | Anon of range: range - - /// F# syntax: typ with constraints - | WithGlobalConstraints of - typeName: SynType * - constraints: SynTypeConstraint list * - range: range - - /// F# syntax: #type - | HashConstraint of - innerType: SynType * - range: range - - /// F# syntax: for units of measure e.g. m / s - | MeasureDivide of - dividend: SynType * - divisor: SynType * - range: range - - /// F# syntax: for units of measure e.g. m^3, kg^1/2 - | MeasurePower of - baseMeasure: SynType * - exponent: SynRationalConst * - range: range - - /// F# syntax: 1, "abc" etc, used in parameters to type providers - /// For the dimensionless units i.e. 1, and static parameters to provided types - | StaticConstant of - constant: SynConst * - range: range - - /// F# syntax: const expr, used in static parameters to type providers - | StaticConstantExpr of - expr: SynExpr * - range: range - - /// F# syntax: ident=1 etc., used in static parameters to type providers - | StaticConstantNamed of - ident: SynType * - value: SynType * - range: range - - | Paren of - innerType: SynType * - range: range - - /// Gets the syntax range of this construct - member Range: range - -/// Represents a syntax tree for F# expressions -[] -type SynExpr = - - /// F# syntax: (expr) - /// - /// Parenthesized expressions. Kept in AST to distinguish A.M((x, y)) - /// from A.M(x, y), among other things. - | Paren of - expr: SynExpr * - leftParenRange: range * - rightParenRange: range option * - range: range - - /// F# syntax: <@ expr @>, <@@ expr @@> - /// - /// Quote(operator, isRaw, quotedSynExpr, isFromQueryExpression, m) - | Quote of - operator: SynExpr * - isRaw: bool * - quotedExpr: SynExpr * - isFromQueryExpression: bool * - range: range - - /// F# syntax: 1, 1.3, () etc. - | Const of - constant: SynConst * - range: range - - /// F# syntax: expr: type - | Typed of - expr: SynExpr * - targetType: SynType * - range: range - - /// F# syntax: e1, ..., eN - | Tuple of - isStruct: bool * - exprs: SynExpr list * - commaRanges: range list * // interstitial commas - range: range - - /// F# syntax: {| id1=e1; ...; idN=eN |} - /// F# syntax: struct {| id1=e1; ...; idN=eN |} - | AnonRecd of - isStruct: bool * - copyInfo:(SynExpr * BlockSeparator) option * - recordFields:(Ident * SynExpr) list * - range: range - - /// F# syntax: [ e1; ...; en ], [| e1; ...; en |] - | ArrayOrList of - isArray: bool * - exprs: SynExpr list * - range: range - - /// F# syntax: { f1=e1; ...; fn=en } - /// inherit includes location of separator (for tooling) - /// copyOpt contains range of the following WITH part (for tooling) - /// every field includes range of separator after the field (for tooling) - | Record of - baseInfo:(SynType * SynExpr * range * BlockSeparator option * range) option * - copyInfo:(SynExpr * BlockSeparator) option * - recordFields:(RecordFieldName * (SynExpr option) * BlockSeparator option) list * - range: range - - /// F# syntax: new C(...) - /// The flag is true if known to be 'family' ('protected') scope - | New of - isProtected: bool * - targetType: SynType * - expr: SynExpr * - range: range - - /// F# syntax: { new ... with ... } - | ObjExpr of - objType: SynType * - argOptions:(SynExpr * Ident option) option * - bindings: SynBinding list * - extraImpls: SynInterfaceImpl list * - newExprRange: range * - range: range - - /// F# syntax: 'while ... do ...' - | While of - whileSeqPoint: DebugPointAtWhile * - whileExpr: SynExpr * - doExpr: SynExpr * - range: range - - /// F# syntax: 'for i = ... to ... do ...' - | For of - forSeqPoint: DebugPointAtFor * - ident: Ident * - identBody: SynExpr * - direction: bool * - toBody: SynExpr * - doBody: SynExpr * - range: range - - /// F# syntax: 'for ... in ... do ...' - | ForEach of - forSeqPoint: DebugPointAtFor * - seqExprOnly: SeqExprOnly * - isFromSource: bool * - pat: SynPat * - enumExpr: SynExpr * - bodyExpr: SynExpr * - range: range - - /// F# syntax: [ expr ], [| expr |] - | ArrayOrListOfSeqExpr of - isArray: bool * - expr: SynExpr * - range: range - - /// F# syntax: { expr } - | CompExpr of - isArrayOrList: bool * - isNotNakedRefCell: bool ref * - expr: SynExpr * - range: range - - /// First bool indicates if lambda originates from a method. Patterns here are always "simple" - /// Second bool indicates if this is a "later" part of an iterated sequence of lambdas - /// parsedData keeps original parsed patterns and expression, - /// prior to transforming to "simple" patterns and iterated lambdas - /// - /// F# syntax: fun pat -> expr - | Lambda of - fromMethod: bool * - inLambdaSeq: bool * - args: SynSimplePats * - body: SynExpr * - parsedData: (SynPat list * SynExpr) option * - range: range - - /// F# syntax: function pat1 -> expr | ... | patN -> exprN - | MatchLambda of - isExnMatch: bool * - keywordRange: range * - matchClauses: SynMatchClause list * - matchSeqPoint: DebugPointAtBinding * - range: range - - /// F# syntax: match expr with pat1 -> expr | ... | patN -> exprN - | Match of - matchSeqPoint: DebugPointAtBinding * - expr: SynExpr * - clauses: SynMatchClause list * - range: range - - /// F# syntax: do expr - | Do of - expr: SynExpr * - range: range - - /// F# syntax: assert expr - | Assert of - expr: SynExpr * - range: range - - /// F# syntax: f x - /// - /// flag: indicates if the application is syntactically atomic, e.g. f.[1] is atomic, but 'f x' is not - /// isInfix is true for the first app of an infix operator, e.g. 1+2 - /// becomes App(App(+, 1), 2), where the inner node is marked isInfix - | App of - flag: ExprAtomicFlag * - isInfix: bool * - funcExpr: SynExpr * - argExpr: SynExpr * - range: range - - /// F# syntax: expr - | TypeApp of - expr: SynExpr * - lessRange: range * - typeArgs: SynType list * - commaRanges: range list * - greaterRange: range option * - typeArgsRange: range * - range: range - - /// F# syntax: let pat = expr in expr - /// F# syntax: let f pat1 .. patN = expr in expr - /// F# syntax: let rec f pat1 .. patN = expr in expr - /// F# syntax: use pat = expr in expr - | LetOrUse of - isRecursive: bool * - isUse: bool * - bindings: SynBinding list * - body: SynExpr * - range: range - - /// F# syntax: try expr with pat -> expr - | TryWith of - tryExpr: SynExpr * - tryRange: range * - withCases: SynMatchClause list * - withRange: range * - range: range * - trySeqPoint: DebugPointAtTry * - withSeqPoint: DebugPointAtWith - - /// F# syntax: try expr finally expr - | TryFinally of - tryExpr: SynExpr * - finallyExpr: SynExpr * - range: range * - trySeqPoint: DebugPointAtTry * - finallySeqPoint: DebugPointAtFinally - - /// F# syntax: lazy expr - | Lazy of - expr: SynExpr * - range: range - - /// F# syntax: expr; expr - /// - /// isTrueSeq: false indicates "let v = a in b; v" - | Sequential of - seqPoint: DebugPointAtSequential * - isTrueSeq: bool * - expr1: SynExpr * - expr2: SynExpr * - range: range - - /// F# syntax: if expr then expr - /// F# syntax: if expr then expr else expr - | IfThenElse of - ifExpr: SynExpr * - thenExpr: SynExpr * - elseExpr: SynExpr option * - spIfToThen: DebugPointAtBinding * - isFromErrorRecovery: bool * - ifToThenRange: range * - range: range - - /// F# syntax: ident - /// Optimized representation for SynExpr.LongIdent (false, [id], id.idRange) - | Ident of - ident: Ident - - /// F# syntax: ident.ident...ident - /// - /// isOptional: true if preceded by a '?' for an optional named parameter - /// altNameRefCell: Normally 'None' except for some compiler-generated - /// variables in desugaring pattern matching. See SynSimplePat.Id - | LongIdent of - isOptional: bool * - longDotId: LongIdentWithDots * - altNameRefCell: SynSimplePatAlternativeIdInfo ref option * - range: range - - /// F# syntax: ident.ident...ident <- expr - | LongIdentSet of - longDotId: LongIdentWithDots * - expr: SynExpr * - range: range - - /// F# syntax: expr.ident.ident - | DotGet of - expr: SynExpr * - rangeOfDot: range * - longDotId: LongIdentWithDots * - range: range - - /// F# syntax: expr.ident...ident <- expr - | DotSet of - targetExpr: SynExpr * - longDotId: LongIdentWithDots * - rhsExpr: SynExpr * - range: range - - /// F# syntax: expr <- expr - | Set of - targetExpr: SynExpr * - rhsExpr: SynExpr * - range: range - - /// F# syntax: expr.[expr, ..., expr] - | DotIndexedGet of - objectExpr: SynExpr * - indexExprs: SynIndexerArg list * - dotRange: range * - range: range - - /// F# syntax: expr.[expr, ..., expr] <- expr - | DotIndexedSet of - objectExpr: SynExpr * - indexExprs: SynIndexerArg list * - valueExpr: SynExpr * - leftOfSetRange: range * - dotRange: range * - range: range - - /// F# syntax: Type.Items(e1) <- e2, rarely used named-property-setter notation, e.g. Foo.Bar.Chars(3) <- 'a' - | NamedIndexedPropertySet of - longDotId: LongIdentWithDots * - expr1: SynExpr * - expr2: SynExpr * - range: range - - /// F# syntax: expr.Items (e1) <- e2, rarely used named-property-setter notation, e.g. (stringExpr).Chars(3) <- 'a' - | DotNamedIndexedPropertySet of - targetExpr: SynExpr * - longDotId: LongIdentWithDots * - argExpr: SynExpr * - rhsExpr: SynExpr * - range: range - - /// F# syntax: expr :? type - | TypeTest of - expr: SynExpr * - targetType: SynType * - range: range - - /// F# syntax: expr :> type - | Upcast of - expr: SynExpr * - targetType: SynType * - range: range - - /// F# syntax: expr :?> type - | Downcast of - expr: SynExpr * - targetType: SynType * - range: range - - /// F# syntax: upcast expr - | InferredUpcast of - expr: SynExpr * - range: range - - /// F# syntax: downcast expr - | InferredDowncast of - expr: SynExpr * - range: range - - /// F# syntax: null - | Null of - range: range - - /// F# syntax: &expr, &&expr - | AddressOf of - isByref: bool * - expr: SynExpr * - opRange: range * - range: range - - /// F# syntax: ((typar1 or ... or typarN): (member-dig) expr) - | TraitCall of - supportTys: SynTypar list * - traitSig: SynMemberSig * - argExpr: SynExpr * - range: range - - /// F# syntax: ... in ... - /// Computation expressions only, based on JOIN_IN token from lex filter - | JoinIn of - lhsExpr: SynExpr * - lhsRange: range * - rhsExpr: SynExpr * - range: range - - /// Used in parser error recovery and internally during type checking for translating computation expressions. - | ImplicitZero of - range: range - - /// Used internally during type checking for translating computation expressions. - | SequentialOrImplicitYield of - seqPoint:DebugPointAtSequential * - expr1:SynExpr * - expr2:SynExpr * - ifNotStmt:SynExpr * - range:range - - /// F# syntax: yield expr - /// F# syntax: return expr - /// Computation expressions only - | YieldOrReturn of - flags: (bool * bool) * - expr: SynExpr * - range: range - - /// F# syntax: yield! expr - /// F# syntax: return! expr - /// Computation expressions only - | YieldOrReturnFrom of - flags: (bool * bool) * - expr: SynExpr * - range: range - - /// F# syntax: let! pat = expr in expr - /// F# syntax: use! pat = expr in expr - /// F# syntax: let! pat = expr and! ... and! ... and! pat = expr in expr - /// Computation expressions only - | LetOrUseBang of - bindSeqPoint: DebugPointAtBinding * - isUse: bool * - isFromSource: bool * - pat: SynPat * - rhs: SynExpr * - andBangs:(DebugPointAtBinding * bool * bool * SynPat * SynExpr * range) list * - body:SynExpr * - range: range - - /// F# syntax: match! expr with pat1 -> expr | ... | patN -> exprN - | MatchBang of - matchSeqPoint: DebugPointAtBinding * - expr: SynExpr * - clauses: SynMatchClause list * - range: range - - /// F# syntax: do! expr - /// Computation expressions only - | DoBang of - expr: SynExpr * - range: range - - /// Only used in FSharp.Core - | LibraryOnlyILAssembly of - ilCode: obj * // this type is ILInstr[] but is hidden to avoid the representation of AbstractIL being public - typeArgs: SynType list * - args: SynExpr list * - retTy: SynType list * - range: range - - /// Only used in FSharp.Core - | LibraryOnlyStaticOptimization of - constraints: SynStaticOptimizationConstraint list * - expr: SynExpr * - optimizedExpr: SynExpr * - range: range - - /// Only used in FSharp.Core - | LibraryOnlyUnionCaseFieldGet of - expr: SynExpr * - longId: LongIdent * - fieldNum: int * - range: range - - /// Only used in FSharp.Core - | LibraryOnlyUnionCaseFieldSet of - expr: SynExpr * - longId: LongIdent * - fieldNum: int * - rhsExpr: SynExpr * - range: range - - /// Inserted for error recovery - | ArbitraryAfterError of - debugStr: string * - range: range - - /// Inserted for error recovery - | FromParseError of - expr: SynExpr * - range: range - - /// Inserted for error recovery when there is "expr." and missing tokens or error recovery after the dot - | DiscardAfterMissingQualificationAfterDot of - expr: SynExpr * - range: range - - /// 'use x = fixed expr' - | Fixed of - expr: SynExpr * - range: range - - /// F# syntax: interpolated string, e.g. "abc{x}" or "abc{x,3}" or "abc{x:N4}" - /// Note the string ranges include the quotes, verbatim markers, dollar sign and braces - | InterpolatedString of - contents: SynInterpolatedStringPart list * - synStringKind :SynStringKind * - range: range - - /// Gets the syntax range of this construct - member Range: range - - member RangeWithoutAnyExtraDot: range - - /// Attempt to get the range of the first token or initial portion only - this - /// is ad-hoc, just a cheap way to improve a certain 'query custom operation' error range - member RangeOfFirstPortion: range - - /// Indicates if this expression arises from error recovery - member IsArbExprAndThusAlreadyReportedError: bool - -[] -type SynInterpolatedStringPart = - | String of value: string * range: range - | FillExpr of fillExpr: SynExpr * qualifiers: Ident option - -/// Represents a syntax tree for an F# indexer expression argument -[] -type SynIndexerArg = - /// A two-element range indexer argument - | Two of - expr1: SynExpr * - fromEnd1: bool * - expr2: SynExpr * - fromEnd2: bool * - range1: range * - range2: range - - /// A one-element item indexer argument - | One of - expr: SynExpr * - fromEnd: bool * range - - /// Gets the syntax range of this construct - member Range: range - - /// Get the one or two expressions as a list - member Exprs: SynExpr list - -/// Represents a syntax tree for simple F# patterns -[] -type SynSimplePat = - - /// Indicates a simple pattern variable. - /// - /// altNameRefCell: - /// Normally 'None' except for some compiler-generated variables in desugaring pattern matching. - /// Pattern processing sets this reference for hidden variable introduced - /// by desugaring pattern matching in arguments. The info indicates an - /// alternative (compiler generated) identifier to be used because the - /// name of the identifier is already bound. - /// - /// isCompilerGenerated: true if a compiler generated name - /// isThisVar: true if 'this' variable in member - /// isOptArg: true if a '?' is in front of the name - | Id of - ident: Ident * - altNameRefCell: SynSimplePatAlternativeIdInfo ref option * - isCompilerGenerated: bool * - isThisVar: bool * - isOptArg: bool * - range: range - - /// A type annotated simple pattern - | Typed of - pat: SynSimplePat * - targetType: SynType * - range: range - - /// An attributed simple pattern - | Attrib of - pat: SynSimplePat * - attributes: SynAttributes * - range: range - - member Range: range - -/// Represents the alternative identifier for a simple pattern -[] -type SynSimplePatAlternativeIdInfo = - - /// We have not decided to use an alternative name in the pattern and related expression - | Undecided of Ident - - /// We have decided to use an alternative name in the pattern and related expression - | Decided of Ident - -/// Represents a syntax tree for a static optimization constraint in the F# core library -[] -type SynStaticOptimizationConstraint = - - /// A static optimization conditional that activates for a particular type instantiation - | WhenTyparTyconEqualsTycon of - typar: SynTypar * - rhsType: SynType * - range: range - - /// A static optimization conditional that activates for a struct - | WhenTyparIsStruct of - typar: SynTypar * - range: range - -/// Represents a simple set of variable bindings a, (a, b) or (a: Type, b: Type) at a lambda, -/// function definition or other binding point, after the elimination of pattern matching -/// from the construct, e.g. after changing a "function pat1 -> rule1 | ..." to a -/// "fun v -> match v with ..." -[] -type SynSimplePats = - | SimplePats of - pats: SynSimplePat list * - range: range - - | Typed of - pats: SynSimplePats * - targetType: SynType * - range: range - - member Range: range - -/// Represents a syntax tree for arguments patterns -[] -type SynArgPats = - | Pats of - pats: SynPat list - - | NamePatPairs of - pats: (Ident * SynPat) list * - range: range - -/// Represents a syntax tree for an F# pattern -[] -type SynPat = - - /// A constant in a pattern - | Const of - constant: SynConst * - range: range - - /// A wildcard '_' in a pattern - | Wild of - range: range - - /// A name pattern 'ident' but @dsyme wants to keep the old name "named" - /// when this double-purposed to also represent 'pat as ident' to reduce churn - | Named of - ident: Ident * - isSelfIdentifier: bool * - accessibility: SynAccess option * - range: range - - /// A typed pattern 'pat : type' - | Typed of - pat: SynPat * - targetType: SynType * - range: range - - /// An attributed pattern, used in argument or declaration position - | Attrib of - pat: SynPat * - attributes: SynAttributes * - range: range - - /// A disjunctive pattern 'pat1 | pat2' - | Or of - lhsPat: SynPat * - rhsPat: SynPat * - range: range - - /// A conjunctive pattern 'pat1 & pat2' - | Ands of - pats: SynPat list * - range: range - - /// A conjunctive pattern 'pat1 as pat2' - | As of - lhsPat: SynPat * - rhsPat: SynPat * - range: range - - /// A long identifier pattern possibly with argument patterns - | LongIdent of - longDotId: LongIdentWithDots * - extraId: Ident option * // holds additional ident for tooling - typarDecls: SynValTyparDecls option * // usually None: temporary used to parse "f<'a> x = x" - argPats: SynArgPats * - accessibility: SynAccess option * - range: range - - /// A tuple pattern - | Tuple of - isStruct: bool * - elementPats: SynPat list * - range: range - - /// A parenthesized pattern - | Paren of - pat: SynPat * - range: range - - /// An array or a list as a pattern - | ArrayOrList of - isArray: bool * - elementPats: SynPat list * - range: range - - /// A record pattern - | Record of - fieldPats: ((LongIdent * Ident) * SynPat) list * - range: range - - /// The 'null' pattern - | Null of - range: range - - /// '?id' -- for optional argument names - | OptionalVal of - ident: Ident * - range: range - - /// A type test pattern ':? type ' - | IsInst of - pat: SynType * - range: range - - /// <@ expr @>, used for active pattern arguments - | QuoteExpr of - expr: SynExpr * - range: range - - /// Deprecated character range: ranges - | DeprecatedCharRange of - startChar: char * - endChar: char * - range: range - - /// Used internally in the type checker - | InstanceMember of - thisId: Ident * - memberId: Ident * - toolingId: Ident option * // holds additional ident for tooling - accessibility: SynAccess option * - range: range - - /// A pattern arising from a parse error - | FromParseError of - pat: SynPat * - range: range - - /// Gets the syntax range of this construct - member Range: range - -/// Represents a set of bindings that implement an interface -[] -type SynInterfaceImpl = - | SynInterfaceImpl of - interfaceTy: SynType * - bindings: SynBinding list * - range: range - -/// Represents a clause in a 'match' expression -[] -type SynMatchClause = - | SynMatchClause of - pat: SynPat * - whenExpr: SynExpr option * - resultExpr: SynExpr * - range: range * - spInfo: DebugPointForTarget - - /// Gets the syntax range of part of this construct - member RangeOfGuardAndRhs: range - - /// Gets the syntax range of this construct - member Range: range - -/// Represents an attribute -[] -type SynAttribute = - { /// The name of the type for the attribute - TypeName: LongIdentWithDots - - /// The argument of the attribute, perhaps a tuple - ArgExpr: SynExpr - - /// Target specifier, e.g. "assembly", "module", etc. - Target: Ident option - - /// Is this attribute being applied to a property getter or setter? - AppliesToGetterAndSetter: bool - - /// The syntax range of the attribute - Range: range - } - -/// List of attributes enclosed in [< ... >]. -[] -type SynAttributeList = - { - /// The list of attributes - Attributes: SynAttribute list - - /// The syntax range of the list of attributes - Range: range - } - -type SynAttributes = SynAttributeList list - -/// Represents extra information about the declaration of a value -[] -type SynValData = - | SynValData of - memberFlags: SynMemberFlags option * - valInfo: SynValInfo * - thisIdOpt: Ident option - - member SynValInfo: SynValInfo - -/// Represents a binding for a 'let' or 'member' declaration -[] -type SynBinding = - | SynBinding of - accessibility: SynAccess option * - kind: SynBindingKind * - mustInline: bool * - isMutable: bool * - attributes: SynAttributes * - xmlDoc: PreXmlDoc * - valData: SynValData * - headPat: SynPat * - returnInfo: SynBindingReturnInfo option * - expr: SynExpr * - range: range * - seqPoint: DebugPointAtBinding - - // no member just named "Range", as that would be confusing: - // - for everything else, the 'range' member that appears last/second-to-last is the 'full range' of the whole tree construct - // - but for Binding, the 'range' is only the range of the left-hand-side, the right-hand-side range is in the SynExpr - // - so we use explicit names to avoid confusion - member RangeOfBindingWithoutRhs: range - - member RangeOfBindingWithRhs: range - - member RangeOfHeadPattern: range - -/// Represents the return information in a binding for a 'let' or 'member' declaration -[] -type SynBindingReturnInfo = - | SynBindingReturnInfo of - typeName: SynType * - range: range * - attributes: SynAttributes - -/// Represents the flags for a 'member' declaration -[] -type SynMemberFlags = - { - /// The member is an instance member (non-static) - IsInstance: bool - - /// The member is a dispatch slot - IsDispatchSlot: bool - - /// The member is an 'override' or explicit interface implementation - IsOverrideOrExplicitImpl: bool - - /// The member is 'final' - IsFinal: bool - - /// The kind of the member - MemberKind: SynMemberKind - } - -/// Note the member kind is actually computed partially by a syntax tree transformation in tc.fs -[] -type SynMemberKind = - - /// The member is a class initializer - | ClassConstructor - - /// The member is a object model constructor - | Constructor - - /// The member kind is not yet determined - | Member - - /// The member kind is property getter - | PropertyGet - - /// The member kind is property setter - | PropertySet - - /// An artificial member kind used prior to the point where a - /// get/set property is split into two distinct members. - | PropertyGetSet - -/// Represents the syntax tree for a member signature (used in signature files, abstract member declarations -/// and member constraints) -[] -type SynMemberSig = - - /// A member definition in a type in a signature file - | Member of - memberSig: SynValSig * - flags: SynMemberFlags * - range: range - - /// An interface definition in a type in a signature file - | Interface of - interfaceType: SynType * - range: range - - /// An 'inherit' definition in a type in a signature file - | Inherit of - inheritedType: SynType * - range: range - - /// A 'val' definition in a type in a signature file - | ValField of - field: SynField * - range: range - - /// A nested type definition in a signature file (an unimplemented feature) - | NestedType of - nestedType: SynTypeDefnSig * - range: range - - /// Gets the syntax range of this construct - member Range: range - -/// Represents the kind of a type definition whether explicit or inferred -[] -type SynTypeDefnKind = - | Unspecified - | Class - | Interface - | Struct - | Record - | Union - | Abbrev - | Opaque - | Augmentation - | IL - | Delegate of signature: SynType * signatureInfo: SynValInfo - -/// Represents the syntax tree for the core of a simple type definition, in either signature -/// or implementation. -[] -type SynTypeDefnSimpleRepr = - - /// A union type definition, type X = A | B - | Union of - accessibility: SynAccess option * - unionCases: SynUnionCase list * - range: range - - /// An enum type definition, type X = A = 1 | B = 2 - | Enum of - cases: SynEnumCase list * - range: range - - /// A record type definition, type X = { A: int; B: int } - | Record of - accessibility: SynAccess option * - recordFields: SynField list * - range: range - - /// An object oriented type definition. This is not a parse-tree form, but represents the core - /// type representation which the type checker splits out from the "ObjectModel" cases of type definitions. - | General of - kind: SynTypeDefnKind * - inherits: (SynType * range * Ident option) list * - slotsigs: (SynValSig * SynMemberFlags) list * - fields: SynField list * - isConcrete: bool * - isIncrClass: bool * - implicitCtorSynPats: SynSimplePats option * - range: range - - /// A type defined by using an IL assembly representation. Only used in FSharp.Core. - /// - /// F# syntax: "type X = (# "..."#) - | LibraryOnlyILAssembly of - ilType: obj * // this type is ILType but is hidden to avoid the representation of AbstractIL being public - range: range - - /// A type abbreviation, "type X = A.B.C" - | TypeAbbrev of - detail: ParserDetail * - rhsType: SynType * - range: range - - /// An abstract definition, "type X" - | None of - range: range - - /// An exception definition, "exception E = ..." - | Exception of - exnRepr: SynExceptionDefnRepr - - /// Gets the syntax range of this construct - member Range: range - -/// Represents the syntax tree for one case in an enum definition. -[] -type SynEnumCase = - - | SynEnumCase of - attributes: SynAttributes * - ident: Ident * - value: SynConst * - valueRange: range * - xmlDoc: PreXmlDoc * - range: range - - /// Gets the syntax range of this construct - member Range: range - -/// Represents the syntax tree for one case in a union definition. -[] -type SynUnionCase = - - | SynUnionCase of - attributes: SynAttributes * - ident: Ident * - caseType: SynUnionCaseKind * - xmlDoc: PreXmlDoc * - accessibility: SynAccess option * - range: range - - /// Gets the syntax range of this construct - member Range: range - -/// Represents the syntax tree for the right-hand-side of union definition, excluding members, -/// in either a signature or implementation. -[] -type SynUnionCaseKind = - - /// Normal style declaration - | Fields of - cases: SynField list - - /// Full type spec given by 'UnionCase: ty1 * tyN -> rty'. Only used in FSharp.Core, otherwise a warning. - | FullType of - fullType: SynType * - fullTypeInfo: SynValInfo - -/// Represents the syntax tree for the right-hand-side of a type definition in a signature. -/// Note: in practice, using a discriminated union to make a distinction between -/// "simple" types and "object oriented" types is not particularly useful. -[] -type SynTypeDefnSigRepr = - - /// Indicates the right right-hand-side is a class, struct, interface or other object-model type - | ObjectModel of - kind: SynTypeDefnKind * - memberSigs: SynMemberSig list * - range: range - - /// Indicates the right right-hand-side is a record, union or other simple type. - | Simple of - repr: SynTypeDefnSimpleRepr * - range: range - - | Exception of - repr: SynExceptionDefnRepr - - /// Gets the syntax range of this construct - member Range: range - -/// Represents the syntax tree for a type definition in a signature -[] -type SynTypeDefnSig = - - /// The information for a type definition in a signature - | SynTypeDefnSig of - typeInfo: SynComponentInfo * - typeRepr: SynTypeDefnSigRepr * - members: SynMemberSig list * - range: range - - /// Gets the syntax range of this construct - member Range: range - -/// Represents the syntax tree for a field declaration in a record or class -[] -type SynField = - | SynField of - attributes: SynAttributes * - isStatic: bool * - idOpt: Ident option * - fieldType: SynType * - isMutable: bool * - xmlDoc: PreXmlDoc * - accessibility: SynAccess option * - range: range - -/// Represents the syntax tree associated with the name of a type definition or module -/// in signature or implementation. -/// -/// This includes the name, attributes, type parameters, constraints, documentation and accessibility -/// for a type definition or module. For modules, entries such as the type parameters are -/// always empty. -[] -type SynComponentInfo = - | SynComponentInfo of - attributes: SynAttributes * - typeParams: SynTyparDecls option * - constraints: SynTypeConstraint list * - longId: LongIdent * - xmlDoc: PreXmlDoc * - preferPostfix: bool * - accessibility: SynAccess option * - range: range - - /// Gets the syntax range of this construct - member Range: range - -/// Represents the syntax tree for a 'val' definition in an abstract slot or a signature file -[] -type SynValSig = - | SynValSig of - attributes: SynAttributes * - ident: Ident * - explicitValDecls: SynValTyparDecls * - synType: SynType * - arity: SynValInfo * - isInline: bool * - isMutable: bool * - xmlDoc: PreXmlDoc * - accessibility: SynAccess option * - synExpr: SynExpr option * - range: range - - member RangeOfId: range - - member SynInfo: SynValInfo - - member SynType: SynType - -/// The argument names and other metadata for a member or function -[] -type SynValInfo = - - /// SynValInfo(curriedArgInfos, returnInfo) - | SynValInfo of curriedArgInfos: SynArgInfo list list * returnInfo: SynArgInfo - - member CurriedArgInfos: SynArgInfo list list - - member ArgNames: string list - -/// Represents the argument names and other metadata for a parameter for a member or function -[] -type SynArgInfo = - - | SynArgInfo of - attributes: SynAttributes * - optional: bool * - ident: Ident option - - member Ident: Ident option - -/// Represents the names and other metadata for the type parameters for a member or function -[] -type SynValTyparDecls = - | SynValTyparDecls of - typars: SynTyparDecls option * - canInfer: bool - -/// Represents the syntactic elements associated with the "return" of a function or method. -[] -type SynReturnInfo = - | SynReturnInfo of returnType: (SynType * SynArgInfo) * range: range - -/// Represents the right hand side of an exception declaration 'exception E = ... ' -[] -type SynExceptionDefnRepr = - - | SynExceptionDefnRepr of - attributes: SynAttributes * - caseName: SynUnionCase * - longId: LongIdent option * - xmlDoc: PreXmlDoc * - accessibility: SynAccess option * - range: range - - /// Gets the syntax range of this construct - member Range: range - -/// Represents the right hand side of an exception declaration 'exception E = ... ' plus -/// any member definitions for the exception -[] -type SynExceptionDefn = - - | SynExceptionDefn of - exnRepr: SynExceptionDefnRepr * - members: SynMemberDefns * - range: range - - /// Gets the syntax range of this construct - member Range: range - -/// Represents the right hand side of a type or exception declaration 'type C = ... ' plus -/// any additional member definitions for the type -[] -type SynTypeDefnRepr = - - /// An object model type definition (class or interface) - | ObjectModel of - kind: SynTypeDefnKind * - members: SynMemberDefns * - range: range - - /// A simple type definition (record, union, abbreviation) - | Simple of - simpleRepr: SynTypeDefnSimpleRepr * - range: range - - /// An exception definition - | Exception of - exnRepr: SynExceptionDefnRepr - - /// Gets the syntax range of this construct - member Range: range - -/// Represents a type or exception declaration 'type C = ... ' plus -/// any additional member definitions for the type -[] -type SynTypeDefn = - | SynTypeDefn of - typeInfo: SynComponentInfo * - typeRepr: SynTypeDefnRepr * - members: SynMemberDefns * - implicitConstructor: SynMemberDefn option * - range: range - - /// Gets the syntax range of this construct - member Range: range - -/// Represents a definition element within a type definition, e.g. 'member ... ' -[] -type SynMemberDefn = - - /// An 'open' definition within a type - | Open of - target: SynOpenDeclTarget * - range: range - - /// A 'member' definition within a type - | Member of - memberDefn: SynBinding * - range: range - - /// An implicit constructor definition - | ImplicitCtor of - accessibility: SynAccess option * - attributes: SynAttributes * - ctorArgs: SynSimplePats * - selfIdentifier: Ident option * - xmlDoc: PreXmlDoc * - range: range - - /// An implicit inherit definition, 'inherit (args...) as base' - | ImplicitInherit of - inheritType: SynType * - inheritArgs: SynExpr * - inheritAlias: Ident option * - range: range - - /// A 'let' definition within a class - | LetBindings of - bindings: SynBinding list * - isStatic: bool * - isRecursive: bool * - range: range - - /// An abstract slot definition within a class or interface - | AbstractSlot of - slotSig: SynValSig * - flags: SynMemberFlags * - range: range - - /// An interface implementation definition within a class - | Interface of - interfaceType: SynType * - members: SynMemberDefns option * - range: range - - /// An 'inherit' definition within a class - | Inherit of - baseType: SynType * - asIdent: Ident option * - range: range - - /// A 'val' definition within a class - | ValField of - fieldInfo: SynField * - range: range - - /// A nested type definition, a feature that is not implemented - | NestedType of - typeDefn: SynTypeDefn * - accessibility: SynAccess option * - range: range - - /// An auto-property definition, F# syntax: 'member val X = expr' - | AutoProperty of - attributes: SynAttributes * - isStatic: bool * - ident: Ident * - typeOpt: SynType option * - propKind: SynMemberKind * - memberFlags:(SynMemberKind -> SynMemberFlags) * - xmlDoc: PreXmlDoc * - accessibility: SynAccess option * - synExpr: SynExpr * - getSetRange: range option * - range: range - - /// Gets the syntax range of this construct - member Range: range - -type SynMemberDefns = SynMemberDefn list - -/// Represents a definition within a module -[] -type SynModuleDecl = - - /// A module abbreviation definition 'module X = A.B.C' - | ModuleAbbrev of - ident: Ident * - longId: LongIdent * - range: range - - /// A nested module definition 'module X = ...' - | NestedModule of - moduleInfo: SynComponentInfo * - isRecursive: bool * - decls: SynModuleDecl list * - isContinuing: bool * - range: range - - /// A 'let' definition within a module - | Let of - isRecursive: bool * - bindings: SynBinding list * - range: range - - /// A 'do expr' within a module - | DoExpr of - spInfo: DebugPointAtBinding * - expr: SynExpr * - range: range - - /// One or more 'type' definitions within a module - | Types of - typeDefns: SynTypeDefn list * - range: range - - /// An 'exception' definition within a module - | Exception of - exnDefn: SynExceptionDefn * - range: range - - /// An 'open' definition within a module - | Open of - target: SynOpenDeclTarget * - range: range - - /// An attribute definition within a module, for assembly and .NET module attributes - | Attributes of - attributes: SynAttributes * - range: range - - /// A hash directive within a module - | HashDirective of - hashDirective: ParsedHashDirective * - range: range - - /// A namespace fragment within a module - | NamespaceFragment of - fragment: SynModuleOrNamespace - - /// Gets the syntax range of this construct - member Range: range - -/// Represents the target of the open declaration -[] -type SynOpenDeclTarget = - - /// A 'open' declaration - | ModuleOrNamespace of longId: LongIdent * range: range - - /// A 'open type' declaration - | Type of typeName: SynType * range: range - - /// Gets the syntax range of this construct - member Range: range - -/// Represents the right hand side of an exception definition in a signature file -[] -type SynExceptionSig = - | SynExceptionSig of - exnRepr: SynExceptionDefnRepr * - members: SynMemberSig list * - range: range - -/// Represents a definition within a module or namespace in a signature file -[] -type SynModuleSigDecl = - - /// A module abbreviation definition within a module or namespace in a signature file - | ModuleAbbrev of - ident: Ident * - longId: LongIdent * - range: range - - /// A nested module definition within a module or namespace in a signature file - | NestedModule of - moduleInfo: SynComponentInfo * - isRecursive: bool * - moduleDecls: SynModuleSigDecl list * - range: range - - /// A 'val' definition within a module or namespace in a signature file, corresponding - /// to a 'let' definition in the implementation - | Val of - valSig: SynValSig * range: range - - /// A set of one or more type definitions within a module or namespace in a signature file - | Types of - types: SynTypeDefnSig list * - range: range - - /// An exception definition within a module or namespace in a signature file - | Exception of - exnSig: SynExceptionSig * - range: range - - /// An 'open' definition within a module or namespace in a signature file - | Open of - target: SynOpenDeclTarget * - range: range - - /// A hash directive within a module or namespace in a signature file - | HashDirective of - hashDirective: ParsedHashDirective * - range: range - - /// A namespace fragment within a namespace in a signature file - | NamespaceFragment of - SynModuleOrNamespaceSig - - /// Gets the syntax range of this construct - member Range: range - -/// Represents the kind of a module or namespace definition -[] -type SynModuleOrNamespaceKind = - /// A module is explicitly named 'module N' - | NamedModule - - /// A module is anonymously named, e.g. a script - | AnonModule - - /// A namespace is explicitly declared - | DeclaredNamespace - - /// A namespace is declared 'global' - | GlobalNamespace - - /// Indicates if this is a module definition - member IsModule: bool - -/// Represents the definition of a module or namespace -[] -type SynModuleOrNamespace = - | SynModuleOrNamespace of - longId: LongIdent * - isRecursive: bool * - kind: SynModuleOrNamespaceKind * - decls: SynModuleDecl list * - xmlDoc: PreXmlDoc * - attribs: SynAttributes * - accessibility: SynAccess option * - range: range - - /// Gets the syntax range of this construct - member Range: range - -/// Represents the definition of a module or namespace in a signature file -[] -type SynModuleOrNamespaceSig = - | SynModuleOrNamespaceSig of - longId: LongIdent * - isRecursive: bool * - kind: SynModuleOrNamespaceKind * - decls: SynModuleSigDecl list * - xmlDoc: PreXmlDoc * - attribs: SynAttributes * - accessibility: SynAccess option * - range: range - - /// Gets the syntax range of this construct - member Range: range - -/// Represents a parsed hash directive argument -[] -type ParsedHashDirectiveArgument = - | String of value: string * stringKind: SynStringKind * range: Range - | SourceIdentifier of constant: string * value: string * range: Range - - /// Gets the syntax range of this construct - member Range: range - -/// Represents a parsed hash directive -[] -type ParsedHashDirective = - | ParsedHashDirective of - ident: string * - args: ParsedHashDirectiveArgument list * - range: range - -/// Represents the syntax tree for the contents of a parsed implementation file -[] -type ParsedImplFileFragment = - - /// An implementation file which is an anonymous module definition, e.g. a script - | AnonModule of - decls: SynModuleDecl list * - range: range - - /// An implementation file is a named module definition, 'module N' - | NamedModule of - namedModule: SynModuleOrNamespace - - /// An implementation file fragment which declares a namespace fragment - | NamespaceFragment of - longId: LongIdent * - isRecursive: bool * - kind: SynModuleOrNamespaceKind * - decls: SynModuleDecl list * - xmlDoc: PreXmlDoc * - attributes: SynAttributes * - range: range - -/// Represents the syntax tree for the contents of a parsed signature file -[] -type ParsedSigFileFragment = - - /// A signature file which is an anonymous module, e.g. the signature file for the final file in an application - | AnonModule of - decls: SynModuleSigDecl list * - range: range - - /// A signature file which is a module, 'module N' - | NamedModule of - namedModule: SynModuleOrNamespaceSig - - /// A signature file namespace fragment - | NamespaceFragment of - longId: LongIdent * - isRecursive: bool * - kind: SynModuleOrNamespaceKind * - decls: SynModuleSigDecl list * - xmlDoc: PreXmlDoc * - attributes: SynAttributes * - range: range - -/// Represents a parsed syntax tree for an F# Interactive interaction -[] -type ParsedScriptInteraction = - | Definitions of - defns: SynModuleDecl list * - range: range - - | HashDirective of - hashDirective: ParsedHashDirective * - range: range - -/// Represents a parsed implementation file made up of fragments -[] -type ParsedImplFile = - | ParsedImplFile of - hashDirectives: ParsedHashDirective list * - fragments: ParsedImplFileFragment list - -/// Represents a parsed signature file made up of fragments -[] -type ParsedSigFile = - | ParsedSigFile of - hashDirectives: ParsedHashDirective list * - fragments: ParsedSigFileFragment list - -/// Represents a scoped pragma -[] -type ScopedPragma = - /// A pragma to turn a warning off - | WarningOff of range: range * warningNumber: int - -/// Represents a qualifying name for anonymous module specifications and implementations, -[] -type QualifiedNameOfFile = - | QualifiedNameOfFile of Ident - - /// The name of the file - member Text: string - - /// The identifier for the name of the file - member Id: Ident - - /// Gets the syntax range of this construct - member Range: range - -/// Represents the full syntax tree, file name and other parsing information for an implementation file -[] -type ParsedImplFileInput = - | ParsedImplFileInput of - fileName: string * - isScript: bool * - qualifiedNameOfFile: QualifiedNameOfFile * - scopedPragmas: ScopedPragma list * - hashDirectives: ParsedHashDirective list * - modules: SynModuleOrNamespace list * - isLastCompiland: (bool * bool) - -/// Represents the full syntax tree, file name and other parsing information for a signature file -[] -type ParsedSigFileInput = - | ParsedSigFileInput of - fileName: string * - qualifiedNameOfFile: QualifiedNameOfFile * - scopedPragmas: ScopedPragma list * - hashDirectives: ParsedHashDirective list * - modules: SynModuleOrNamespaceSig list - -/// Represents the syntax tree for a parsed implementation or signature file -[] -type ParsedInput = - /// A parsed implementation file - | ImplFile of ParsedImplFileInput - - /// A parsed signature file - | SigFile of ParsedSigFileInput - - /// Gets the file name for the parsed input - member FileName: string - - /// Gets the syntax range of this construct - member Range: range diff --git a/src/fsharp/SyntaxTreeOps.fs b/src/fsharp/SyntaxTreeOps.fs index b620983ec25..ede78c3addd 100644 --- a/src/fsharp/SyntaxTreeOps.fs +++ b/src/fsharp/SyntaxTreeOps.fs @@ -1,22 +1,33 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module FSharp.Compiler.SyntaxTreeOps +module public FSharp.Compiler.SyntaxTreeOps -open Internal.Utilities.Library +open Internal.Utilities.Text.Parsing + +open FSharp.Compiler +open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Xml +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Range +open FSharp.Compiler.XmlDoc + +//---------------------------------------------------------------------- +// Construct syntactic AST nodes +//----------------------------------------------------------------------- -/// Generate implicit argument names in parsing type SynArgNameGenerator() = let mutable count = 0 let generatedArgNamePrefix = "_arg" - member _.New() : string = count <- count + 1; generatedArgNamePrefix + string count - member _.Reset() = count <- 0 + member __.New() : string = count <- count + 1; generatedArgNamePrefix + string count + member __.Reset() = count <- 0 + +//---------------------------------------------------------------------- +// AST and parsing utilities. +//---------------------------------------------------------------------- let ident (s, r) = Ident(s, r) @@ -59,7 +70,7 @@ let mkSynCompGenSimplePatVar id = SynSimplePat.Id (id, None, true, false, false, /// Match a long identifier, including the case for single identifiers which gets a more optimized node in the syntax tree. let (|LongOrSingleIdent|_|) inp = match inp with - | SynExpr.LongIdent (isOpt, lidwd, altId, _m) -> Some (isOpt, lidwd, altId, lidwd.RangeWithoutAnyExtraDot) + | SynExpr.LongIdent (isOpt, lidwd, altId, _m) -> Some (isOpt, lidwd, altId, lidwd.RangeSansAnyExtraDot) | SynExpr.Ident id -> Some (false, LongIdentWithDots([id], []), None, id.idRange) | _ -> None @@ -89,13 +100,13 @@ let rec IsControlFlowExpression e = | SynExpr.Typed (e, _, _) -> IsControlFlowExpression e | _ -> false -let mkSynAnonField (ty: SynType) = SynField([], false, None, ty, false, PreXmlDoc.Empty, None, ty.Range) +let mkAnonField (ty: SynType) = Field([], false, None, ty, false, PreXmlDoc.Empty, None, ty.Range) -let mkSynNamedField (ident, ty: SynType, m) = SynField([], false, Some ident, ty, false, PreXmlDoc.Empty, None, m) +let mkNamedField (ident, ty: SynType, m) = Field([], false, Some ident, ty, false, PreXmlDoc.Empty, None, m) -let mkSynPatVar vis (id: Ident) = SynPat.Named (id, false, vis, id.idRange) +let mkSynPatVar vis (id: Ident) = SynPat.Named (SynPat.Wild id.idRange, id, false, vis, id.idRange) -let mkSynThisPatVar (id: Ident) = SynPat.Named (id, true, None, id.idRange) +let mkSynThisPatVar (id: Ident) = SynPat.Named (SynPat.Wild id.idRange, id, true, None, id.idRange) let mkSynPatMaybeVar lidwd vis m = SynPat.LongIdent (lidwd, None, None, SynArgPats.Pats [], vis, m) @@ -140,7 +151,7 @@ let rec SimplePatOfPat (synArgNameGenerator: SynArgNameGenerator) p = SynSimplePat.Attrib(p2, attribs, m), laterF - | SynPat.Named (v, thisV, _, m) -> + | SynPat.Named (SynPat.Wild _, v, thisV, _, m) -> SynSimplePat.Id (v, None, false, thisV, false, m), None @@ -161,14 +172,9 @@ let rec SimplePatOfPat (synArgNameGenerator: SynArgNameGenerator) p = // It may be a real variable, in which case we want to maintain its name. // But it may also be a nullary union case or some other identifier. // In this case, we want to use an alternate compiler generated name for the hidden variable. - let altNameRefCell = Some (ref (SynSimplePatAlternativeIdInfo.Undecided (mkSynId m (synArgNameGenerator.New())))) + let altNameRefCell = Some (ref (Undecided (mkSynId m (synArgNameGenerator.New())))) let item = mkSynIdGetWithAlt m id altNameRefCell false, altNameRefCell, id, item - | SynPat.Named(ident, _, _, _) - | SynPat.As(_, SynPat.Named(ident, _, _, _), _) -> - // named pats should be referred to as their name in docs, tooltips, etc. - let item = mkSynIdGet m ident.idText - false, None, ident, item | _ -> let nm = synArgNameGenerator.New() let id = mkSynId m nm @@ -176,8 +182,8 @@ let rec SimplePatOfPat (synArgNameGenerator: SynArgNameGenerator) p = true, None, id, item SynSimplePat.Id (id, altNameRefCell, isCompGen, false, false, id.idRange), Some (fun e -> - let clause = SynMatchClause(p, None, e, m, DebugPointForTarget.No) - SynExpr.Match (DebugPointAtBinding.NoneAtInvisible, item, [clause], clause.Range)) + let clause = Clause(p, None, e, m, DebugPointForTarget.No) + SynExpr.Match (NoDebugPointAtInvisibleBinding, item, [clause], clause.Range)) let appFunOpt funOpt x = match funOpt with None -> x | Some f -> f x @@ -376,7 +382,7 @@ let arbExpr (debugStr, range: range) = SynExpr.ArbitraryAfterError (debugStr, ra let unionRangeWithListBy projectRangeFromThing m listOfThing = (m, listOfThing) ||> List.fold (fun m thing -> unionRanges m (projectRangeFromThing thing)) -let mkAttributeList attrs range : SynAttributeList list = +let mkAttributeList attrs range = [{ Attributes = attrs Range = range }] @@ -388,21 +394,6 @@ let ConcatAttributesLists (attrsLists: SynAttributeList list) = let (|Attributes|) synAttributes = ConcatAttributesLists synAttributes -let (|TyparDecls|) (typarDecls: SynTyparDecls option) = - typarDecls - |> Option.map (fun x -> x.TyparDecls) - |> Option.defaultValue [] - -let (|TyparsAndConstraints|) (typarDecls: SynTyparDecls option) = - typarDecls - |> Option.map (fun x -> x.TyparDecls, x.Constraints) - |> Option.defaultValue ([], []) - -let (|ValTyparDecls|) (SynValTyparDecls(typarDecls, canInfer)) = - typarDecls - |> Option.map (fun x -> x.TyparDecls, x.Constraints, canInfer) - |> Option.defaultValue ([], [], canInfer) - let rangeOfNonNilAttrs (attrs: SynAttributes) = (attrs.Head.Range, attrs.Tail) ||> unionRangeWithListBy (fun a -> a.Range) @@ -498,7 +489,7 @@ module SynInfo = /// rather than member signatures. let AdjustMemberArgs memFlags infosForArgs = match infosForArgs with - | [] when memFlags = SynMemberKind.Member -> [] :: infosForArgs + | [] when memFlags=MemberKind.Member -> [] :: infosForArgs | _ -> infosForArgs /// For 'let' definitions, we infer syntactic argument information from the r.h.s. of a definition, if it @@ -524,7 +515,7 @@ module SynInfo = /// Infer the syntactic information for a 'let' or 'member' definition, based on the argument pattern, /// any declared return information (e.g. .NET attributes on the return element), and the r.h.s. expression /// in the case of 'let' definitions. - let InferSynValData (memberFlagsOpt: SynMemberFlags option, pat, retInfo, origRhsExpr) = + let InferSynValData (memberFlagsOpt, pat, retInfo, origRhsExpr) = let infosForExplicitArgs = match pat with @@ -566,63 +557,63 @@ let mkSynBindingRhs staticOptimizations rhsExpr mRhs retInfo = let mkSynBinding (xmlDoc, headPat) (vis, isInline, isMutable, mBind, spBind, retInfo, origRhsExpr, mRhs, staticOptimizations, attrs, memberFlagsOpt) = let info = SynInfo.InferSynValData (memberFlagsOpt, Some headPat, retInfo, origRhsExpr) let rhsExpr, retTyOpt = mkSynBindingRhs staticOptimizations origRhsExpr mRhs retInfo - SynBinding (vis, SynBindingKind.Normal, isInline, isMutable, attrs, xmlDoc, info, headPat, retTyOpt, rhsExpr, mBind, spBind) + Binding (vis, NormalBinding, isInline, isMutable, attrs, xmlDoc, info, headPat, retTyOpt, rhsExpr, mBind, spBind) -let NonVirtualMemberFlags k : SynMemberFlags = +let NonVirtualMemberFlags k = { MemberKind=k IsInstance=true IsDispatchSlot=false IsOverrideOrExplicitImpl=false IsFinal=false } -let CtorMemberFlags : SynMemberFlags = - { MemberKind=SynMemberKind.Constructor +let CtorMemberFlags = + { MemberKind=MemberKind.Constructor IsInstance=false IsDispatchSlot=false IsOverrideOrExplicitImpl=false IsFinal=false } -let ClassCtorMemberFlags : SynMemberFlags = - { MemberKind=SynMemberKind.ClassConstructor +let ClassCtorMemberFlags = + { MemberKind=MemberKind.ClassConstructor IsInstance=false IsDispatchSlot=false IsOverrideOrExplicitImpl=false IsFinal=false } -let OverrideMemberFlags k : SynMemberFlags = +let OverrideMemberFlags k = { MemberKind=k IsInstance=true IsDispatchSlot=false IsOverrideOrExplicitImpl=true IsFinal=false } -let AbstractMemberFlags k : SynMemberFlags = +let AbstractMemberFlags k = { MemberKind=k IsInstance=true IsDispatchSlot=true IsOverrideOrExplicitImpl=false IsFinal=false } -let StaticMemberFlags k : SynMemberFlags = +let StaticMemberFlags k = { MemberKind=k IsInstance=false IsDispatchSlot=false IsOverrideOrExplicitImpl=false IsFinal=false } -let inferredTyparDecls = SynValTyparDecls(None, true) +let inferredTyparDecls = SynValTyparDecls([], true, []) -let noInferredTypars = SynValTyparDecls(None, false) +let noInferredTypars = SynValTyparDecls([], false, []) let rec synExprContainsError inpExpr = - let rec walkBind (SynBinding(_, _, _, _, _, _, _, _, _, synExpr, _, _)) = walkExpr synExpr + let rec walkBind (Binding(_, _, _, _, _, _, _, _, _, synExpr, _, _)) = walkExpr synExpr and walkExprs es = es |> List.exists walkExpr and walkBinds es = es |> List.exists walkBind and walkMatchClauses cl = - cl |> List.exists (fun (SynMatchClause(_, whenExpr, e, _, _)) -> walkExprOpt whenExpr || walkExpr e) + cl |> List.exists (fun (Clause(_, whenExpr, e, _, _)) -> walkExprOpt whenExpr || walkExpr e) and walkExprOpt eOpt = eOpt |> Option.exists walkExpr @@ -689,7 +680,7 @@ let rec synExprContainsError inpExpr = walkExprs flds | SynExpr.ObjExpr (_, _, bs, is, _, _) -> - walkBinds bs || walkBinds [ for (SynInterfaceImpl(_, bs, _)) in is do yield! bs ] + walkBinds bs || walkBinds [ for (InterfaceImpl(_, bs, _)) in is do yield! bs ] | SynExpr.ForEach (_, _, _, _, e1, e2, _) | SynExpr.While (_, e1, e2, _) -> @@ -740,17 +731,10 @@ let rec synExprContainsError inpExpr = | SynExpr.LetOrUseBang (rhs=e1;body=e2;andBangs=es) -> walkExpr e1 || walkExprs [ for (_,_,_,_,e,_) in es do yield e ] || walkExpr e2 - | SynExpr.InterpolatedString (parts, _, _m) -> + | SynExpr.InterpolatedString (parts, _m) -> walkExprs (parts |> List.choose (function | SynInterpolatedStringPart.String _ -> None | SynInterpolatedStringPart.FillExpr (x, _) -> Some x)) walkExpr inpExpr - -let (|ParsedHashDirectiveArguments|) (input: ParsedHashDirectiveArgument list) = - List.map - (function - | ParsedHashDirectiveArgument.String (s, _, _) -> s - | ParsedHashDirectiveArgument.SourceIdentifier (_, v, _) -> v) - input \ No newline at end of file diff --git a/src/fsharp/SyntaxTreeOps.fsi b/src/fsharp/SyntaxTreeOps.fsi index 106b7a61540..1bf34b2d936 100644 --- a/src/fsharp/SyntaxTreeOps.fsi +++ b/src/fsharp/SyntaxTreeOps.fsi @@ -1,10 +1,11 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.SyntaxTreeOps +module public FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.Text -open FSharp.Compiler.Xml -open FSharp.Compiler.Syntax + +open FSharp.Compiler +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree [] type SynArgNameGenerator = @@ -48,9 +49,9 @@ val (|SingleIdent|_|): inp:SynExpr -> Ident option /// This affects placement of sequence points val IsControlFlowExpression: e:SynExpr -> bool -val mkSynAnonField: ty:SynType -> SynField +val mkAnonField: ty:SynType -> SynField -val mkSynNamedField: ident:Ident * ty:SynType * m:range -> SynField +val mkNamedField: ident:Ident * ty:SynType * m:range -> SynField val mkSynPatVar: vis:SynAccess option -> id:Ident -> SynPat @@ -153,10 +154,6 @@ val ConcatAttributesLists: attrsLists:SynAttributeList list -> SynAttribute list val ( |Attributes| ): synAttributes:SynAttributeList list -> SynAttribute list -val ( |TyparDecls| ): typarDecls: SynTyparDecls option -> SynTyparDecl list -val ( |TyparsAndConstraints| ): typarDecls: SynTyparDecls option -> SynTyparDecl list * SynTypeConstraint list -val ( |ValTyparDecls| ): valTyparDecls: SynValTyparDecls -> SynTyparDecl list * SynTypeConstraint list * bool - val rangeOfNonNilAttrs: attrs:SynAttributes -> range val stripParenTypes: synType:SynType -> SynType @@ -224,7 +221,7 @@ module SynInfo = /// Transform a property declared using '[static] member P = expr' to a method taking a "unit" argument. /// This is similar to IncorporateEmptyTupledArgForPropertyGetter, but applies to member definitions /// rather than member signatures. - val AdjustMemberArgs: memFlags:SynMemberKind -> infosForArgs:'a list list -> 'a list list + val AdjustMemberArgs: memFlags:MemberKind -> infosForArgs:'a list list -> 'a list list /// For 'let' definitions, we infer syntactic argument information from the r.h.s. of a definition, if it /// is an immediate 'fun ... -> ...' or 'function ...' expression. This is noted in the F# language specification. @@ -238,33 +235,31 @@ module SynInfo = /// Infer the syntactic information for a 'let' or 'member' definition, based on the argument pattern, /// any declared return information (e.g. .NET attributes on the return element), and the r.h.s. expression /// in the case of 'let' definitions. - val InferSynValData: memberFlagsOpt:SynMemberFlags option * pat:SynPat option * retInfo:SynReturnInfo option * origRhsExpr:SynExpr -> SynValData + val InferSynValData: memberFlagsOpt:MemberFlags option * pat:SynPat option * retInfo:SynReturnInfo option * origRhsExpr:SynExpr -> SynValData val mkSynBindingRhs: staticOptimizations:(SynStaticOptimizationConstraint list * SynExpr) list -> rhsExpr:SynExpr -> mRhs:range -> retInfo:SynReturnInfo option -> SynExpr * SynBindingReturnInfo option val mkSynBinding: - xmlDoc:PreXmlDoc * headPat:SynPat -> + xmlDoc:XmlDoc.PreXmlDoc * headPat:SynPat -> vis:SynAccess option * isInline:bool * isMutable:bool * mBind:range * - spBind:DebugPointAtBinding * retInfo:SynReturnInfo option * origRhsExpr:SynExpr * mRhs:range * - staticOptimizations:(SynStaticOptimizationConstraint list * SynExpr) list * attrs:SynAttributes * memberFlagsOpt:SynMemberFlags option + spBind:DebugPointForBinding * retInfo:SynReturnInfo option * origRhsExpr:SynExpr * mRhs:range * + staticOptimizations:(SynStaticOptimizationConstraint list * SynExpr) list * attrs:SynAttributes * memberFlagsOpt:MemberFlags option -> SynBinding -val NonVirtualMemberFlags: k:SynMemberKind -> SynMemberFlags +val NonVirtualMemberFlags: k:MemberKind -> MemberFlags -val CtorMemberFlags: SynMemberFlags +val CtorMemberFlags: MemberFlags -val ClassCtorMemberFlags: SynMemberFlags +val ClassCtorMemberFlags: MemberFlags -val OverrideMemberFlags: k:SynMemberKind -> SynMemberFlags +val OverrideMemberFlags: k:MemberKind -> MemberFlags -val AbstractMemberFlags: k:SynMemberKind -> SynMemberFlags +val AbstractMemberFlags: k:MemberKind -> MemberFlags -val StaticMemberFlags: k:SynMemberKind -> SynMemberFlags +val StaticMemberFlags: k:MemberKind -> MemberFlags val inferredTyparDecls: SynValTyparDecls val noInferredTypars: SynValTyparDecls val synExprContainsError: inpExpr:SynExpr -> bool - -val ( |ParsedHashDirectiveArguments| ) : ParsedHashDirectiveArgument list -> string list \ No newline at end of file diff --git a/src/fsharp/TcGlobals.fs b/src/fsharp/TcGlobals.fs index 80ef6017a0e..c56be3d5bbd 100755 --- a/src/fsharp/TcGlobals.fs +++ b/src/fsharp/TcGlobals.fs @@ -2,25 +2,25 @@ /// Defines the global environment for all type checking. /// -/// The environment (TcGlobals) are well-known types and values are hard-wired +/// The environment (TcGlobals) are well-known types and values are hard-wired /// into the compiler. This lets the compiler perform particular optimizations /// for these types and values, for example emitting optimized calls for -/// comparison and hashing functions. +/// comparison and hashing functions. module internal FSharp.Compiler.TcGlobals +open System.Collections.Generic open System.Collections.Concurrent open System.Diagnostics -open Internal.Utilities.Library -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.ILX +open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Extensions.ILX +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CompilerGlobalState +open FSharp.Compiler.Lib open FSharp.Compiler.Features -open FSharp.Compiler.IO -open FSharp.Compiler.Syntax.PrettyNaming -open FSharp.Compiler.Text.FileIndex -open FSharp.Compiler.Text.Range +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics @@ -31,7 +31,7 @@ let private envRange = rangeN DummyFileNameForRangesWithoutASpecificLocation 0 /// Represents an intrinsic value from FSharp.Core known to the compiler [] -type IntrinsicValRef = +type IntrinsicValRef = | IntrinsicValRef of NonLocalEntityRef * string * bool * TType * ValLinkageFullKey member x.Name = (let (IntrinsicValRef(_, nm, _, _, _)) = x in nm) @@ -42,15 +42,15 @@ type IntrinsicValRef = /// For debugging override x.ToString() = x.Name - + let ValRefForIntrinsic (IntrinsicValRef(mvr, _, _, _, key)) = mkNonLocalValRef mvr key //------------------------------------------------------------------------- // Access the initial environment: names -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- [] -module FSharpLib = +module FSharpLib = let CoreOperatorsCheckedName = FSharpLib.Root + ".Core.Operators.Checked" let ControlName = FSharpLib.Root + ".Control" @@ -60,14 +60,14 @@ module FSharpLib = let CompilerServicesName = FSharpLib.Root + ".Core.CompilerServices" let LinqRuntimeHelpersName = FSharpLib.Root + ".Linq.RuntimeHelpers" let RuntimeHelpersName = FSharpLib.Root + ".Core.CompilerServices.RuntimeHelpers" - let ExtraTopLevelOperatorsName = FSharpLib.Root + ".Core.ExtraTopLevelOperators" + let ExtraTopLevelOperatorsName = FSharpLib.Root + ".Core.ExtraTopLevelOperators" let NativeInteropName = FSharpLib.Root + ".NativeInterop" let QuotationsName = FSharpLib.Root + ".Quotations" - let ControlPath = IL.splitNamespace ControlName - let LinqPath = IL.splitNamespace LinqName - let CollectionsPath = IL.splitNamespace CollectionsName + let ControlPath = IL.splitNamespace ControlName + let LinqPath = IL.splitNamespace LinqName + let CollectionsPath = IL.splitNamespace CollectionsName let NativeInteropPath = IL.splitNamespace NativeInteropName |> Array.ofList let CompilerServicesPath = IL.splitNamespace CompilerServicesName |> Array.ofList let LinqRuntimeHelpersPath = IL.splitNamespace LinqRuntimeHelpersName |> Array.ofList @@ -86,21 +86,21 @@ module FSharpLib = let private mkNonGenericTy tcref = TType_app(tcref, []) -let mkNonLocalTyconRef2 ccu path n = mkNonLocalTyconRef (mkNonLocalEntityRef ccu path) n +let mkNonLocalTyconRef2 ccu path n = mkNonLocalTyconRef (mkNonLocalEntityRef ccu path) n -let mk_MFCore_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.CorePathArray n -let mk_MFQuotations_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.QuotationsPath n -let mk_MFLinq_tcref ccu n = mkNonLocalTyconRef2 ccu LinqPathArray n -let mk_MFCollections_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.CollectionsPathArray n -let mk_MFCompilerServices_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.CompilerServicesPath n -let mk_MFRuntimeHelpers_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.RuntimeHelpersPath n -let mk_MFControl_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.ControlPathArray n +let mk_MFCore_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.CorePathArray n +let mk_MFQuotations_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.QuotationsPath n +let mk_MFLinq_tcref ccu n = mkNonLocalTyconRef2 ccu LinqPathArray n +let mk_MFCollections_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.CollectionsPathArray n +let mk_MFCompilerServices_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.CompilerServicesPath n +let mk_MFRuntimeHelpers_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.RuntimeHelpersPath n +let mk_MFControl_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.ControlPathArray n -type +type [] BuiltinAttribInfo = - | AttribInfo of ILTypeRef * TyconRef + | AttribInfo of ILTypeRef * TyconRef member this.TyconRef = let (AttribInfo(_, tcref)) = this in tcref @@ -111,8 +111,8 @@ type member x.DebugText = x.ToString() /// For debugging - override x.ToString() = x.TyconRef.ToString() - + override x.ToString() = x.TyconRef.ToString() + [] let tname_DebuggerNonUserCodeAttribute = "System.Diagnostics.DebuggerNonUserCodeAttribute" @@ -174,12 +174,12 @@ let tname_IAsyncResult = "System.IAsyncResult" //------------------------------------------------------------------------- // Table of all these "globals" -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, directoryToResolveRelativePaths, - mlCompatibility: bool, isInteractive:bool, +type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, directoryToResolveRelativePaths, + mlCompatibility: bool, isInteractive:bool, // The helper to find system types amongst referenced DLLs - tryFindSysTypeCcu, + tryFindSysTypeCcu, emitDebugInfoInQuotations: bool, noDebugData: bool, pathMap: PathMap, langVersion: LanguageVersion) = @@ -189,8 +189,8 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let vard = Construct.NewRigidTypar "d" envRange let vare = Construct.NewRigidTypar "e" envRange - let varaTy = mkTyparTy vara - let varbTy = mkTyparTy varb + let varaTy = mkTyparTy vara + let varbTy = mkTyparTy varb let varcTy = mkTyparTy varc let vardTy = mkTyparTy vard let vareTy = mkTyparTy vare @@ -215,20 +215,20 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let v_unit_tcr_nice = mk_MFCore_tcref fslibCcu "unit" let v_exn_tcr = mk_MFCore_tcref fslibCcu "exn" let v_char_tcr = mk_MFCore_tcref fslibCcu "char" - let v_float_tcr = mk_MFCore_tcref fslibCcu "float" + let v_float_tcr = mk_MFCore_tcref fslibCcu "float" let v_float32_tcr = mk_MFCore_tcref fslibCcu "float32" - let v_pfloat_tcr = mk_MFCore_tcref fslibCcu "float`1" - let v_pfloat32_tcr = mk_MFCore_tcref fslibCcu "float32`1" - let v_pint_tcr = mk_MFCore_tcref fslibCcu "int`1" - let v_pint8_tcr = mk_MFCore_tcref fslibCcu "sbyte`1" - let v_pint16_tcr = mk_MFCore_tcref fslibCcu "int16`1" - let v_pint64_tcr = mk_MFCore_tcref fslibCcu "int64`1" - let v_pnativeint_tcr = mk_MFCore_tcref fslibCcu "nativeint`1" - let v_puint_tcr = mk_MFCore_tcref fslibCcu "uint`1" - let v_puint8_tcr = mk_MFCore_tcref fslibCcu "byte`1" - let v_puint16_tcr = mk_MFCore_tcref fslibCcu "uint16`1" - let v_puint64_tcr = mk_MFCore_tcref fslibCcu "uint64`1" - let v_punativeint_tcr = mk_MFCore_tcref fslibCcu "unativeint`1" + let v_pfloat_tcr = mk_MFCore_tcref fslibCcu "float`1" + let v_pfloat32_tcr = mk_MFCore_tcref fslibCcu "float32`1" + let v_pint_tcr = mk_MFCore_tcref fslibCcu "int`1" + let v_pint8_tcr = mk_MFCore_tcref fslibCcu "sbyte`1" + let v_pint16_tcr = mk_MFCore_tcref fslibCcu "int16`1" + let v_pint64_tcr = mk_MFCore_tcref fslibCcu "int64`1" + let v_pnativeint_tcr = mk_MFCore_tcref fslibCcu "nativeint`1" + let v_puint_tcr = mk_MFCore_tcref fslibCcu "uint`1" + let v_puint8_tcr = mk_MFCore_tcref fslibCcu "byte`1" + let v_puint16_tcr = mk_MFCore_tcref fslibCcu "uint16`1" + let v_puint64_tcr = mk_MFCore_tcref fslibCcu "uint64`1" + let v_punativeint_tcr = mk_MFCore_tcref fslibCcu "unativeint`1" let v_byref_tcr = mk_MFCore_tcref fslibCcu "byref`1" let v_byref2_tcr = mk_MFCore_tcref fslibCcu "byref`2" let v_outref_tcr = mk_MFCore_tcref fslibCcu "outref`1" @@ -240,7 +240,7 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let v_refcell_tcr_canon = mk_MFCore_tcref fslibCcu "Ref`1" let v_refcell_tcr_nice = mk_MFCore_tcref fslibCcu "ref`1" - let dummyAssemblyNameCarryingUsefulErrorInformation path typeName = + let dummyAssemblyNameCarryingUsefulErrorInformation path typeName = FSComp.SR.tcGlobalsSystemTypeNotFound (String.concat "." path + "." + typeName) // Search for a type. If it is not found, leave a dangling CCU reference with some useful diagnostic information should @@ -250,35 +250,35 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d | None -> CcuThunk.CreateDelayed(dummyAssemblyNameCarryingUsefulErrorInformation path typeName) | Some ccu -> ccu - let tryFindSysTyconRef path nm = - match tryFindSysTypeCcu path nm with + let tryFindSysTyconRef path nm = + match tryFindSysTypeCcu path nm with | Some ccu -> Some (mkNonLocalTyconRef2 ccu (Array.ofList path) nm) | None -> None - let findSysTyconRef path nm = - let ccu = findSysTypeCcu path nm + let findSysTyconRef path nm = + let ccu = findSysTypeCcu path nm mkNonLocalTyconRef2 ccu (Array.ofList path) nm - let findSysILTypeRef (nm:string) = + let findSysILTypeRef (nm:string) = let path, typeName = splitILTypeName nm - let scoref = - match tryFindSysTypeCcu path typeName with + let scoref = + match tryFindSysTypeCcu path typeName with | None -> ILScopeRef.Assembly (mkSimpleAssemblyRef (dummyAssemblyNameCarryingUsefulErrorInformation path typeName)) | Some ccu -> ccu.ILScopeRef mkILTyRef (scoref, nm) - let tryFindSysILTypeRef (nm:string) = + let tryFindSysILTypeRef (nm:string) = let path, typeName = splitILTypeName nm tryFindSysTypeCcu path typeName |> Option.map (fun ccu -> mkILTyRef (ccu.ILScopeRef, nm)) - let findSysAttrib (nm:string) = + let findSysAttrib (nm:string) = let tref = findSysILTypeRef nm let path, typeName = splitILTypeName nm AttribInfo(tref, findSysTyconRef path typeName) - let tryFindSysAttrib nm = + let tryFindSysAttrib nm = let path, typeName = splitILTypeName nm - match tryFindSysTypeCcu path typeName with + match tryFindSysTypeCcu path typeName with | Some _ -> Some (findSysAttrib nm) | None -> None @@ -299,21 +299,20 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let v_fslib_IDelegateEvent_tcr = mk_MFControl_tcref fslibCcu "IDelegateEvent`1" let v_option_tcr_nice = mk_MFCore_tcref fslibCcu "option`1" - let v_valueoption_tcr_nice = mk_MFCore_tcref fslibCcu "voption`1" let v_list_tcr_canon = mk_MFCollections_tcref fslibCcu "List`1" let v_list_tcr_nice = mk_MFCollections_tcref fslibCcu "list`1" let v_lazy_tcr_nice = mk_MFControl_tcref fslibCcu "Lazy`1" let v_seq_tcr = mk_MFCollections_tcref fslibCcu "seq`1" - let v_format_tcr = mk_MFCore_tcref fslibCcu "PrintfFormat`5" - let v_format4_tcr = mk_MFCore_tcref fslibCcu "PrintfFormat`4" + let v_format_tcr = mk_MFCore_tcref fslibCcu "PrintfFormat`5" + let v_format4_tcr = mk_MFCore_tcref fslibCcu "PrintfFormat`4" let v_date_tcr = findSysTyconRef sys "DateTime" let v_IEnumerable_tcr = findSysTyconRef sysGenerics "IEnumerable`1" let v_IEnumerator_tcr = findSysTyconRef sysGenerics "IEnumerator`1" let v_System_Attribute_tcr = findSysTyconRef sys "Attribute" - let v_expr_tcr = mk_MFQuotations_tcref fslibCcu "Expr`1" - let v_raw_expr_tcr = mk_MFQuotations_tcref fslibCcu "Expr" - let v_query_builder_tcref = mk_MFLinq_tcref fslibCcu "QueryBuilder" - let v_querySource_tcr = mk_MFLinq_tcref fslibCcu "QuerySource`2" + let v_expr_tcr = mk_MFQuotations_tcref fslibCcu "Expr`1" + let v_raw_expr_tcr = mk_MFQuotations_tcref fslibCcu "Expr" + let v_query_builder_tcref = mk_MFLinq_tcref fslibCcu "QueryBuilder" + let v_querySource_tcr = mk_MFLinq_tcref fslibCcu "QuerySource`2" let v_linqExpression_tcr = findSysTyconRef ["System";"Linq";"Expressions"] "Expression`1" let v_il_arr_tcr_map = @@ -323,7 +322,7 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d if rank = 1 then "[]`1" else "[" + (String.replicate (rank - 1) ",") + "]`1" mk_MFCore_tcref fslibCcu type_sig) - + let v_byte_ty = mkNonGenericTy v_byte_tcr let v_sbyte_ty = mkNonGenericTy v_sbyte_tcr let v_int16_ty = mkNonGenericTy v_int16_tcr @@ -339,30 +338,29 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let v_unativeint_ty = mkNonGenericTy v_unativeint_tcr let v_enum_ty = mkNonGenericTy v_int_tcr - let v_bool_ty = mkNonGenericTy v_bool_tcr + let v_bool_ty = mkNonGenericTy v_bool_tcr let v_char_ty = mkNonGenericTy v_char_tcr - let v_obj_ty = mkNonGenericTy v_obj_tcr - let v_IFormattable_tcref = findSysTyconRef sys "IFormattable" - let v_FormattableString_tcref = findSysTyconRef sys "FormattableString" + let v_obj_ty = mkNonGenericTy v_obj_tcr + let v_IFormattable_tcref = findSysTyconRef sys "IFormattable" + let v_FormattableString_tcref = findSysTyconRef sys "FormattableString" let v_IFormattable_ty = mkNonGenericTy v_IFormattable_tcref let v_FormattableString_ty = mkNonGenericTy v_FormattableString_tcref - let v_FormattableStringFactory_tcref = findSysTyconRef sysCompilerServices "FormattableStringFactory" + let v_FormattableStringFactory_tcref = findSysTyconRef sysCompilerServices "FormattableStringFactory" let v_FormattableStringFactory_ty = mkNonGenericTy v_FormattableStringFactory_tcref let v_string_ty = mkNonGenericTy v_string_tcr let v_decimal_ty = mkSysNonGenericTy sys "Decimal" - let v_unit_ty = mkNonGenericTy v_unit_tcr_nice - let v_system_Type_ty = mkSysNonGenericTy sys "Type" - let v_Array_tcref = findSysTyconRef sys "Array" - + let v_unit_ty = mkNonGenericTy v_unit_tcr_nice + let v_system_Type_ty = mkSysNonGenericTy sys "Type" + let v_system_Reflection_MethodInfo_ty = mkSysNonGenericTy ["System";"Reflection"] "MethodInfo" let v_nullable_tcr = findSysTyconRef sys "Nullable`1" (* local helpers to build value infos *) - let mkNullableTy ty = TType_app(v_nullable_tcr, [ty]) - let mkByrefTy ty = TType_app(v_byref_tcr, [ty]) - let mkNativePtrTy ty = TType_app(v_nativeptr_tcr, [ty]) - let mkFunTy d r = TType_fun (d, r) + let mkNullableTy ty = TType_app(v_nullable_tcr, [ty]) + let mkByrefTy ty = TType_app(v_byref_tcr, [ty]) + let mkNativePtrTy ty = TType_app(v_nativeptr_tcr, [ty]) + let mkFunTy d r = TType_fun (d, r) let (-->) d r = mkFunTy d r let mkIteratedFunTy dl r = List.foldBack mkFunTy dl r let mkSmallRefTupledTy l = match l with [] -> v_unit_ty | [h] -> h | tys -> mkRawRefTupleTy tys @@ -414,29 +412,29 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d assert (rank >= 1 && rank <= 32) TType_app(v_il_arr_tcr_map.[rank - 1], [ty]) let mkLazyTy ty = TType_app(lazy_tcr, [ty]) - - let mkPrintfFormatTy aty bty cty dty ety = TType_app(v_format_tcr, [aty;bty;cty;dty; ety]) - let mk_format4_ty aty bty cty dty = TType_app(v_format4_tcr, [aty;bty;cty;dty]) - let mkQuotedExprTy aty = TType_app(v_expr_tcr, [aty]) - let mkRawQuotedExprTy = TType_app(v_raw_expr_tcr, []) - let mkQueryBuilderTy = TType_app(v_query_builder_tcref, []) - let mkLinqExpressionTy aty = TType_app(v_linqExpression_tcr, [aty]) - let v_cons_ucref = mkUnionCaseRef v_list_tcr_canon "op_ColonColon" - let v_nil_ucref = mkUnionCaseRef v_list_tcr_canon "op_Nil" - - + + let mkPrintfFormatTy aty bty cty dty ety = TType_app(v_format_tcr, [aty;bty;cty;dty; ety]) + let mk_format4_ty aty bty cty dty = TType_app(v_format4_tcr, [aty;bty;cty;dty]) + let mkQuotedExprTy aty = TType_app(v_expr_tcr, [aty]) + let mkRawQuotedExprTy = TType_app(v_raw_expr_tcr, []) + let mkQueryBuilderTy = TType_app(v_query_builder_tcref, []) + let mkLinqExpressionTy aty = TType_app(v_linqExpression_tcr, [aty]) + let v_cons_ucref = mkUnionCaseRef v_list_tcr_canon "op_ColonColon" + let v_nil_ucref = mkUnionCaseRef v_list_tcr_canon "op_Nil" + + let fslib_MF_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.RootPathArray - let fslib_MFCore_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.CorePathArray - let fslib_MFLinq_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.LinqPathArray - let fslib_MFCollections_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.CollectionsPathArray + let fslib_MFCore_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.CorePathArray + let fslib_MFLinq_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.LinqPathArray + let fslib_MFCollections_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.CollectionsPathArray let fslib_MFCompilerServices_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.CompilerServicesPath let fslib_MFLinqRuntimeHelpers_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.LinqRuntimeHelpersPath let fslib_MFControl_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.ControlPathArray let fslib_MFNativeInterop_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.NativeInteropPath let fslib_MFLanguagePrimitives_nleref = mkNestedNonLocalEntityRef fslib_MFCore_nleref "LanguagePrimitives" - let fslib_MFIntrinsicOperators_nleref = mkNestedNonLocalEntityRef fslib_MFLanguagePrimitives_nleref "IntrinsicOperators" - let fslib_MFIntrinsicFunctions_nleref = mkNestedNonLocalEntityRef fslib_MFLanguagePrimitives_nleref "IntrinsicFunctions" + let fslib_MFIntrinsicOperators_nleref = mkNestedNonLocalEntityRef fslib_MFLanguagePrimitives_nleref "IntrinsicOperators" + let fslib_MFIntrinsicFunctions_nleref = mkNestedNonLocalEntityRef fslib_MFLanguagePrimitives_nleref "IntrinsicFunctions" let fslib_MFHashCompare_nleref = mkNestedNonLocalEntityRef fslib_MFLanguagePrimitives_nleref "HashCompare" let fslib_MFOperators_nleref = mkNestedNonLocalEntityRef fslib_MFCore_nleref "Operators" let fslib_MFByRefKinds_nleref = mkNestedNonLocalEntityRef fslib_MFCore_nleref "ByRefKinds" @@ -448,7 +446,7 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let fslib_MFQueryRunExtensions_nleref = mkNestedNonLocalEntityRef fslib_MFLinq_nleref "QueryRunExtensions" let fslib_MFQueryRunExtensionsLowPriority_nleref = mkNestedNonLocalEntityRef fslib_MFQueryRunExtensions_nleref "LowPriority" let fslib_MFQueryRunExtensionsHighPriority_nleref = mkNestedNonLocalEntityRef fslib_MFQueryRunExtensions_nleref "HighPriority" - + let fslib_MFPrintfModule_nleref = mkNestedNonLocalEntityRef fslib_MFCore_nleref "PrintfModule" let fslib_MFSeqModule_nleref = mkNestedNonLocalEntityRef fslib_MFCollections_nleref "SeqModule" let fslib_MFListModule_nleref = mkNestedNonLocalEntityRef fslib_MFCollections_nleref "ListModule" @@ -463,77 +461,77 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let fslib_MFOptionModule_nleref = mkNestedNonLocalEntityRef fslib_MFCore_nleref "OptionModule" let fslib_MFRuntimeHelpers_nleref = mkNestedNonLocalEntityRef fslib_MFCompilerServices_nleref "RuntimeHelpers" let fslib_MFQuotations_nleref = mkNestedNonLocalEntityRef fslib_MF_nleref "Quotations" - + let fslib_MFLinqRuntimeHelpersQuotationConverter_nleref = mkNestedNonLocalEntityRef fslib_MFLinqRuntimeHelpers_nleref "LeafExpressionConverter" - let fslib_MFLazyExtensions_nleref = mkNestedNonLocalEntityRef fslib_MFControl_nleref "LazyExtensions" - - let v_ref_tuple1_tcr = findSysTyconRef sys "Tuple`1" - let v_ref_tuple2_tcr = findSysTyconRef sys "Tuple`2" - let v_ref_tuple3_tcr = findSysTyconRef sys "Tuple`3" - let v_ref_tuple4_tcr = findSysTyconRef sys "Tuple`4" - let v_ref_tuple5_tcr = findSysTyconRef sys "Tuple`5" - let v_ref_tuple6_tcr = findSysTyconRef sys "Tuple`6" - let v_ref_tuple7_tcr = findSysTyconRef sys "Tuple`7" - let v_ref_tuple8_tcr = findSysTyconRef sys "Tuple`8" - let v_struct_tuple1_tcr = findSysTyconRef sys "ValueTuple`1" - let v_struct_tuple2_tcr = findSysTyconRef sys "ValueTuple`2" - let v_struct_tuple3_tcr = findSysTyconRef sys "ValueTuple`3" - let v_struct_tuple4_tcr = findSysTyconRef sys "ValueTuple`4" - let v_struct_tuple5_tcr = findSysTyconRef sys "ValueTuple`5" - let v_struct_tuple6_tcr = findSysTyconRef sys "ValueTuple`6" - let v_struct_tuple7_tcr = findSysTyconRef sys "ValueTuple`7" + let fslib_MFLazyExtensions_nleref = mkNestedNonLocalEntityRef fslib_MFControl_nleref "LazyExtensions" + + let v_ref_tuple1_tcr = findSysTyconRef sys "Tuple`1" + let v_ref_tuple2_tcr = findSysTyconRef sys "Tuple`2" + let v_ref_tuple3_tcr = findSysTyconRef sys "Tuple`3" + let v_ref_tuple4_tcr = findSysTyconRef sys "Tuple`4" + let v_ref_tuple5_tcr = findSysTyconRef sys "Tuple`5" + let v_ref_tuple6_tcr = findSysTyconRef sys "Tuple`6" + let v_ref_tuple7_tcr = findSysTyconRef sys "Tuple`7" + let v_ref_tuple8_tcr = findSysTyconRef sys "Tuple`8" + let v_struct_tuple1_tcr = findSysTyconRef sys "ValueTuple`1" + let v_struct_tuple2_tcr = findSysTyconRef sys "ValueTuple`2" + let v_struct_tuple3_tcr = findSysTyconRef sys "ValueTuple`3" + let v_struct_tuple4_tcr = findSysTyconRef sys "ValueTuple`4" + let v_struct_tuple5_tcr = findSysTyconRef sys "ValueTuple`5" + let v_struct_tuple6_tcr = findSysTyconRef sys "ValueTuple`6" + let v_struct_tuple7_tcr = findSysTyconRef sys "ValueTuple`7" let v_struct_tuple8_tcr = findSysTyconRef sys "ValueTuple`8" - - let v_choice2_tcr = mk_MFCore_tcref fslibCcu "Choice`2" - let v_choice3_tcr = mk_MFCore_tcref fslibCcu "Choice`3" - let v_choice4_tcr = mk_MFCore_tcref fslibCcu "Choice`4" - let v_choice5_tcr = mk_MFCore_tcref fslibCcu "Choice`5" - let v_choice6_tcr = mk_MFCore_tcref fslibCcu "Choice`6" - let v_choice7_tcr = mk_MFCore_tcref fslibCcu "Choice`7" + + let v_choice2_tcr = mk_MFCore_tcref fslibCcu "Choice`2" + let v_choice3_tcr = mk_MFCore_tcref fslibCcu "Choice`3" + let v_choice4_tcr = mk_MFCore_tcref fslibCcu "Choice`4" + let v_choice5_tcr = mk_MFCore_tcref fslibCcu "Choice`5" + let v_choice6_tcr = mk_MFCore_tcref fslibCcu "Choice`6" + let v_choice7_tcr = mk_MFCore_tcref fslibCcu "Choice`7" let tyconRefEq x y = primEntityRefEq compilingFslib fslibCcu x y - let v_suppressed_types = + let v_suppressed_types = [ mk_MFCore_tcref fslibCcu "Option`1"; - mk_MFCore_tcref fslibCcu "Ref`1"; + mk_MFCore_tcref fslibCcu "Ref`1"; mk_MFCore_tcref fslibCcu "FSharpTypeFunc"; - mk_MFCore_tcref fslibCcu "FSharpFunc`2"; - mk_MFCore_tcref fslibCcu "Unit" ] + mk_MFCore_tcref fslibCcu "FSharpFunc`2"; + mk_MFCore_tcref fslibCcu "Unit" ] - let v_knownFSharpCoreModules = - dict [ for nleref in [ fslib_MFLanguagePrimitives_nleref + let v_knownFSharpCoreModules = + dict [ for nleref in [ fslib_MFLanguagePrimitives_nleref fslib_MFIntrinsicOperators_nleref fslib_MFIntrinsicFunctions_nleref fslib_MFHashCompare_nleref - fslib_MFOperators_nleref + fslib_MFOperators_nleref fslib_MFOperatorIntrinsics_nleref fslib_MFOperatorsUnchecked_nleref fslib_MFOperatorsChecked_nleref fslib_MFExtraTopLevelOperators_nleref fslib_MFNullableOperators_nleref - fslib_MFQueryRunExtensions_nleref - fslib_MFQueryRunExtensionsLowPriority_nleref - fslib_MFQueryRunExtensionsHighPriority_nleref + fslib_MFQueryRunExtensions_nleref + fslib_MFQueryRunExtensionsLowPriority_nleref + fslib_MFQueryRunExtensionsHighPriority_nleref - fslib_MFPrintfModule_nleref - fslib_MFSeqModule_nleref + fslib_MFPrintfModule_nleref + fslib_MFSeqModule_nleref fslib_MFListModule_nleref - fslib_MFArrayModule_nleref - fslib_MFArray2DModule_nleref - fslib_MFArray3DModule_nleref - fslib_MFArray4DModule_nleref - fslib_MFSetModule_nleref - fslib_MFMapModule_nleref - fslib_MFStringModule_nleref - fslib_MFNativePtrModule_nleref - fslib_MFOptionModule_nleref + fslib_MFArrayModule_nleref + fslib_MFArray2DModule_nleref + fslib_MFArray3DModule_nleref + fslib_MFArray4DModule_nleref + fslib_MFSetModule_nleref + fslib_MFMapModule_nleref + fslib_MFStringModule_nleref + fslib_MFNativePtrModule_nleref + fslib_MFOptionModule_nleref fslib_MFRuntimeHelpers_nleref ] do yield nleref.LastItemMangledName, ERefNonLocal nleref ] - - let tryDecodeTupleTy tupInfo l = - match l with - | [t1;t2;t3;t4;t5;t6;t7;marker] -> - match marker with + + let tryDecodeTupleTy tupInfo l = + match l with + | [t1;t2;t3;t4;t5;t6;t7;marker] -> + match marker with | TType_app(tcref, [t8]) when tyconRefEq tcref v_ref_tuple1_tcr -> mkRawRefTupleTy [t1;t2;t3;t4;t5;t6;t7;t8] |> Some | TType_app(tcref, [t8]) when tyconRefEq tcref v_struct_tuple1_tcr -> mkRawStructTupleTy [t1;t2;t3;t4;t5;t6;t7;t8] |> Some | TType_tuple (_structness2, t8plus) -> TType_tuple (tupInfo, [t1;t2;t3;t4;t5;t6;t7] @ t8plus) |> Some @@ -541,64 +539,64 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d | [] -> None | [_] -> None | _ -> TType_tuple (tupInfo, l) |> Some + - - let decodeTupleTy tupInfo l = - match tryDecodeTupleTy tupInfo l with + let decodeTupleTy tupInfo l = + match tryDecodeTupleTy tupInfo l with | Some ty -> ty | None -> failwith "couldn't decode tuple ty" - let decodeTupleTyIfPossible tcref tupInfo l = - match tryDecodeTupleTy tupInfo l with + let decodeTupleTyIfPossible tcref tupInfo l = + match tryDecodeTupleTy tupInfo l with | Some ty -> ty | None -> TType_app(tcref, l) - let mk_MFCore_attrib nm : BuiltinAttribInfo = - AttribInfo(mkILTyRef(ilg.fsharpCoreAssemblyScopeRef, FSharpLib.Core + "." + nm), mk_MFCore_tcref fslibCcu nm) - + let mk_MFCore_attrib nm : BuiltinAttribInfo = + AttribInfo(mkILTyRef(IlxSettings.ilxFsharpCoreLibScopeRef (), FSharpLib.Core + "." + nm), mk_MFCore_tcref fslibCcu nm) + let mk_doc filename = ILSourceDocument.Create(language=None, vendor=None, documentType=None, file=filename) // Build the memoization table for files - let v_memoize_file = new MemoizationTable ((fileOfFileIndex >> FileSystem.GetFullFilePathInDirectoryShim directoryToResolveRelativePaths >> mk_doc), keyComparer=HashIdentity.Structural) + let v_memoize_file = new MemoizationTable ((fileOfFileIndex >> Filename.fullpath directoryToResolveRelativePaths >> mk_doc), keyComparer=HashIdentity.Structural) - let v_and_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, CompileOpName "&" , None , None , [], mk_rel_sig v_bool_ty) - let v_addrof_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, CompileOpName "~&" , None , None , [vara], ([[varaTy]], mkByrefTy varaTy)) + let v_and_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, CompileOpName "&" , None , None , [], mk_rel_sig v_bool_ty) + let v_addrof_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, CompileOpName "~&" , None , None , [vara], ([[varaTy]], mkByrefTy varaTy)) let v_addrof2_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, CompileOpName "~&&" , None , None , [vara], ([[varaTy]], mkNativePtrTy varaTy)) - let v_and2_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, CompileOpName "&&" , None , None , [], mk_rel_sig v_bool_ty) - let v_or_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, "or" , None , Some "Or" , [], mk_rel_sig v_bool_ty) - let v_or2_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, CompileOpName "||" , None , None , [], mk_rel_sig v_bool_ty) - let v_compare_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "compare" , None , Some "Compare", [vara], mk_compare_sig varaTy) - let v_equals_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName "=" , None , None , [vara], mk_rel_sig varaTy) - let v_equals_nullable_operator_info = makeIntrinsicValRef(fslib_MFNullableOperators_nleref, CompileOpName "=?" , None , None , [vara], ([[varaTy];[mkNullableTy varaTy]], v_bool_ty)) - let v_nullable_equals_operator_info = makeIntrinsicValRef(fslib_MFNullableOperators_nleref, CompileOpName "?=" , None , None , [vara], ([[mkNullableTy varaTy];[varaTy]], v_bool_ty)) - let v_nullable_equals_nullable_operator_info = makeIntrinsicValRef(fslib_MFNullableOperators_nleref, CompileOpName "?=?" , None , None , [vara], ([[mkNullableTy varaTy];[mkNullableTy varaTy]], v_bool_ty)) - let v_not_equals_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName "<>" , None , None , [vara], mk_rel_sig varaTy) - let v_less_than_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName "<" , None , None , [vara], mk_rel_sig varaTy) - let v_less_than_or_equals_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName "<=" , None , None , [vara], mk_rel_sig varaTy) - let v_greater_than_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName ">" , None , None , [vara], mk_rel_sig varaTy) - let v_greater_than_or_equals_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName ">=" , None , None , [vara], mk_rel_sig varaTy) - - let v_enumOfValue_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "EnumOfValue" , None , None , [vara; varb], ([[varaTy]], varbTy)) - - let v_generic_comparison_withc_outer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericComparisonWithComparer" , None , None , [vara], mk_compare_withc_sig varaTy) - let v_generic_hash_withc_tuple2_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastHashTuple2" , None , None , [vara;varb], mk_hash_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy])) - let v_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 v_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 v_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 v_generic_equals_withc_tuple2_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastEqualsTuple2" , None , None , [vara;varb], mk_equality_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy])) - let v_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 v_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 v_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 v_generic_compare_withc_tuple2_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastCompareTuple2" , None , None , [vara;varb], mk_compare_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy])) - let v_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 v_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 v_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 v_generic_equality_er_outer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericEqualityER" , None , None , [vara], mk_rel_sig varaTy) - let v_get_generic_comparer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericComparer" , None , None , [], ([], v_IComparer_ty)) - let v_get_generic_er_equality_comparer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericEqualityERComparer" , None , None , [], ([], v_IEqualityComparer_ty)) - let v_get_generic_per_equality_comparer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericEqualityComparer" , None , None , [], ([], v_IEqualityComparer_ty)) + let v_and2_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, CompileOpName "&&" , None , None , [], mk_rel_sig v_bool_ty) + let v_or_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, "or" , None , Some "Or" , [], mk_rel_sig v_bool_ty) + let v_or2_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, CompileOpName "||" , None , None , [], mk_rel_sig v_bool_ty) + let v_compare_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "compare" , None , Some "Compare", [vara], mk_compare_sig varaTy) + let v_equals_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName "=" , None , None , [vara], mk_rel_sig varaTy) + let v_equals_nullable_operator_info = makeIntrinsicValRef(fslib_MFNullableOperators_nleref, CompileOpName "=?" , None , None , [vara], ([[varaTy];[mkNullableTy varaTy]], v_bool_ty)) + let v_nullable_equals_operator_info = makeIntrinsicValRef(fslib_MFNullableOperators_nleref, CompileOpName "?=" , None , None , [vara], ([[mkNullableTy varaTy];[varaTy]], v_bool_ty)) + let v_nullable_equals_nullable_operator_info = makeIntrinsicValRef(fslib_MFNullableOperators_nleref, CompileOpName "?=?" , None , None , [vara], ([[mkNullableTy varaTy];[mkNullableTy varaTy]], v_bool_ty)) + let v_not_equals_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName "<>" , None , None , [vara], mk_rel_sig varaTy) + let v_less_than_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName "<" , None , None , [vara], mk_rel_sig varaTy) + let v_less_than_or_equals_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName "<=" , None , None , [vara], mk_rel_sig varaTy) + let v_greater_than_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName ">" , None , None , [vara], mk_rel_sig varaTy) + let v_greater_than_or_equals_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName ">=" , None , None , [vara], mk_rel_sig varaTy) + + let v_enumOfValue_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "EnumOfValue" , None , None , [vara; varb], ([[varaTy]], varbTy)) + + let v_generic_comparison_withc_outer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericComparisonWithComparer" , None , None , [vara], mk_compare_withc_sig varaTy) + let v_generic_hash_withc_tuple2_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastHashTuple2" , None , None , [vara;varb], mk_hash_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy])) + let v_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 v_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 v_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 v_generic_equals_withc_tuple2_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastEqualsTuple2" , None , None , [vara;varb], mk_equality_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy])) + let v_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 v_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 v_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 v_generic_compare_withc_tuple2_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastCompareTuple2" , None , None , [vara;varb], mk_compare_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy])) + let v_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 v_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 v_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 v_generic_equality_er_outer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericEqualityER" , None , None , [vara], mk_rel_sig varaTy) + let v_get_generic_comparer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericComparer" , None , None , [], ([], v_IComparer_ty)) + let v_get_generic_er_equality_comparer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericEqualityERComparer" , None , None , [], ([], v_IEqualityComparer_ty)) + let v_get_generic_per_equality_comparer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericEqualityComparer" , None , None , [], ([], v_IEqualityComparer_ty)) let v_generic_equality_withc_outer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericEqualityWithComparer" , None , None , [vara], mk_equality_withc_sig varaTy) let v_generic_hash_withc_outer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericHashWithComparer" , None , None , [vara], mk_hash_withc_sig varaTy) @@ -610,95 +608,95 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let v_generic_hash_inner_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "GenericHashIntrinsic" , None , None , [vara], mk_hash_sig varaTy) let v_generic_hash_withc_inner_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "GenericHashWithComparerIntrinsic" , None , None , [vara], mk_hash_withc_sig varaTy) - + let v_create_instance_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "CreateInstance" , None , None , [vara], ([[v_unit_ty]], varaTy)) let v_unbox_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "UnboxGeneric" , None , None , [vara], ([[v_obj_ty]], varaTy)) let v_unbox_fast_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "UnboxFast" , None , None , [vara], ([[v_obj_ty]], varaTy)) - let v_istype_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "TypeTestGeneric" , None , None , [vara], ([[v_obj_ty]], v_bool_ty)) - let v_istype_fast_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "TypeTestFast" , None , None , [vara], ([[v_obj_ty]], v_bool_ty)) + let v_istype_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "TypeTestGeneric" , None , None , [vara], ([[v_obj_ty]], v_bool_ty)) + let v_istype_fast_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "TypeTestFast" , None , None , [vara], ([[v_obj_ty]], v_bool_ty)) let v_dispose_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "Dispose" , None , None , [vara], ([[varaTy]], v_unit_ty)) let v_getstring_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "GetString" , None , None , [], ([[v_string_ty];[v_int_ty]], v_char_ty)) - let v_reference_equality_inner_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "PhysicalEqualityIntrinsic" , None , None , [vara], mk_rel_sig varaTy) - - let v_bitwise_or_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_BitwiseOr" , None , None , [vara], mk_binop_ty varaTy) - let v_bitwise_and_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_BitwiseAnd" , None , None , [vara], mk_binop_ty varaTy) - let v_bitwise_xor_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_ExclusiveOr" , None , None , [vara], mk_binop_ty varaTy) - let v_bitwise_unary_not_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_LogicalNot" , None , None , [vara], mk_unop_ty varaTy) - let v_bitwise_shift_left_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_LeftShift" , None , None , [vara], mk_shiftop_ty varaTy) - let v_bitwise_shift_right_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_RightShift" , None , None , [vara], mk_shiftop_ty varaTy) - let v_unchecked_addition_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Addition" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) - let v_unchecked_subtraction_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Subtraction" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) - let v_unchecked_multiply_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Multiply" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) - let v_unchecked_division_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Division" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) - let v_unchecked_modulus_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Modulus" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) - let v_unchecked_unary_plus_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_UnaryPlus" , None , None , [vara], mk_unop_ty varaTy) - let v_unchecked_unary_minus_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_UnaryNegation" , None , None , [vara], mk_unop_ty varaTy) - let v_unchecked_unary_not_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "not" , None , Some "Not" , [], mk_unop_ty v_bool_ty) - - let v_checked_addition_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "op_Addition" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) - let v_checked_subtraction_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "op_Subtraction" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) - let v_checked_multiply_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "op_Multiply" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) - let v_checked_unary_minus_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "op_UnaryNegation" , None , None , [vara], mk_unop_ty varaTy) - - let v_byte_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "byte" , None , Some "ToByte", [vara], ([[varaTy]], v_byte_ty)) - let v_sbyte_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "sbyte" , None , Some "ToSByte", [vara], ([[varaTy]], v_sbyte_ty)) - let v_int16_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "int16" , None , Some "ToInt16", [vara], ([[varaTy]], v_int16_ty)) - let v_uint16_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "uint16" , None , Some "ToUInt16", [vara], ([[varaTy]], v_uint16_ty)) - let v_int_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "int" , None , Some "ToInt", [vara], ([[varaTy]], v_int_ty)) - let v_int32_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "int32" , None , Some "ToInt32", [vara], ([[varaTy]], v_int32_ty)) - let v_uint32_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "uint32" , None , Some "ToUInt32", [vara], ([[varaTy]], v_uint32_ty)) - let v_int64_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "int64" , None , Some "ToInt64", [vara], ([[varaTy]], v_int64_ty)) - let v_uint64_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "uint64" , None , Some "ToUInt64", [vara], ([[varaTy]], v_uint64_ty)) - let v_nativeint_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "nativeint" , None , Some "ToIntPtr", [vara], ([[varaTy]], v_nativeint_ty)) + let v_reference_equality_inner_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "PhysicalEqualityIntrinsic" , None , None , [vara], mk_rel_sig varaTy) + + let v_bitwise_or_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_BitwiseOr" , None , None , [vara], mk_binop_ty varaTy) + let v_bitwise_and_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_BitwiseAnd" , None , None , [vara], mk_binop_ty varaTy) + let v_bitwise_xor_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_ExclusiveOr" , None , None , [vara], mk_binop_ty varaTy) + let v_bitwise_unary_not_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_LogicalNot" , None , None , [vara], mk_unop_ty varaTy) + let v_bitwise_shift_left_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_LeftShift" , None , None , [vara], mk_shiftop_ty varaTy) + let v_bitwise_shift_right_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_RightShift" , None , None , [vara], mk_shiftop_ty varaTy) + let v_unchecked_addition_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Addition" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) + let v_unchecked_subtraction_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Subtraction" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) + let v_unchecked_multiply_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Multiply" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) + let v_unchecked_division_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Division" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) + let v_unchecked_modulus_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Modulus" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) + let v_unchecked_unary_plus_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_UnaryPlus" , None , None , [vara], mk_unop_ty varaTy) + let v_unchecked_unary_minus_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_UnaryNegation" , None , None , [vara], mk_unop_ty varaTy) + let v_unchecked_unary_not_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "not" , None , Some "Not" , [], mk_unop_ty v_bool_ty) + + let v_checked_addition_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "op_Addition" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) + let v_checked_subtraction_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "op_Subtraction" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) + let v_checked_multiply_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "op_Multiply" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) + let v_checked_unary_minus_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "op_UnaryNegation" , None , None , [vara], mk_unop_ty varaTy) + + let v_byte_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "byte" , None , Some "ToByte", [vara], ([[varaTy]], v_byte_ty)) + let v_sbyte_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "sbyte" , None , Some "ToSByte", [vara], ([[varaTy]], v_sbyte_ty)) + let v_int16_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "int16" , None , Some "ToInt16", [vara], ([[varaTy]], v_int16_ty)) + let v_uint16_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "uint16" , None , Some "ToUInt16", [vara], ([[varaTy]], v_uint16_ty)) + let v_int_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "int" , None , Some "ToInt", [vara], ([[varaTy]], v_int_ty)) + let v_int32_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "int32" , None , Some "ToInt32", [vara], ([[varaTy]], v_int32_ty)) + let v_uint32_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "uint32" , None , Some "ToUInt32", [vara], ([[varaTy]], v_uint32_ty)) + let v_int64_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "int64" , None , Some "ToInt64", [vara], ([[varaTy]], v_int64_ty)) + let v_uint64_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "uint64" , None , Some "ToUInt64", [vara], ([[varaTy]], v_uint64_ty)) + let v_nativeint_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "nativeint" , None , Some "ToIntPtr", [vara], ([[varaTy]], v_nativeint_ty)) let v_unativeint_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "unativeint" , None , Some "ToUIntPtr", [vara], ([[varaTy]], v_unativeint_ty)) - let v_byte_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "byte" , None , Some "ToByte", [vara], ([[varaTy]], v_byte_ty)) - let v_sbyte_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "sbyte" , None , Some "ToSByte", [vara], ([[varaTy]], v_sbyte_ty)) - let v_int16_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "int16" , None , Some "ToInt16", [vara], ([[varaTy]], v_int16_ty)) - let v_uint16_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "uint16" , None , Some "ToUInt16", [vara], ([[varaTy]], v_uint16_ty)) - let v_int_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "int" , None , Some "ToInt", [vara], ([[varaTy]], v_int_ty)) - let v_int32_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "int32" , None , Some "ToInt32", [vara], ([[varaTy]], v_int32_ty)) - let v_uint32_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "uint32" , None , Some "ToUInt32", [vara], ([[varaTy]], v_uint32_ty)) - let v_int64_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "int64" , None , Some "ToInt64", [vara], ([[varaTy]], v_int64_ty)) - let v_uint64_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "uint64" , None , Some "ToUInt64", [vara], ([[varaTy]], v_uint64_ty)) - let v_float32_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "float32" , None , Some "ToSingle", [vara], ([[varaTy]], v_float32_ty)) - let v_float_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "float" , None , Some "ToDouble", [vara], ([[varaTy]], v_float_ty)) - let v_nativeint_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "nativeint" , None , Some "ToIntPtr", [vara], ([[varaTy]], v_nativeint_ty)) + let v_byte_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "byte" , None , Some "ToByte", [vara], ([[varaTy]], v_byte_ty)) + let v_sbyte_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "sbyte" , None , Some "ToSByte", [vara], ([[varaTy]], v_sbyte_ty)) + let v_int16_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "int16" , None , Some "ToInt16", [vara], ([[varaTy]], v_int16_ty)) + let v_uint16_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "uint16" , None , Some "ToUInt16", [vara], ([[varaTy]], v_uint16_ty)) + let v_int_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "int" , None , Some "ToInt", [vara], ([[varaTy]], v_int_ty)) + let v_int32_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "int32" , None , Some "ToInt32", [vara], ([[varaTy]], v_int32_ty)) + let v_uint32_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "uint32" , None , Some "ToUInt32", [vara], ([[varaTy]], v_uint32_ty)) + let v_int64_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "int64" , None , Some "ToInt64", [vara], ([[varaTy]], v_int64_ty)) + let v_uint64_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "uint64" , None , Some "ToUInt64", [vara], ([[varaTy]], v_uint64_ty)) + let v_float32_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "float32" , None , Some "ToSingle", [vara], ([[varaTy]], v_float32_ty)) + let v_float_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "float" , None , Some "ToDouble", [vara], ([[varaTy]], v_float_ty)) + let v_nativeint_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "nativeint" , None , Some "ToIntPtr", [vara], ([[varaTy]], v_nativeint_ty)) let v_unativeint_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "unativeint" , None , Some "ToUIntPtr", [vara], ([[varaTy]], v_unativeint_ty)) - let v_char_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "char" , None , Some "ToChar", [vara], ([[varaTy]], v_char_ty)) - let v_enum_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "enum" , None , Some "ToEnum", [vara], ([[varaTy]], v_enum_ty)) + let v_char_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "char" , None , Some "ToChar", [vara], ([[varaTy]], v_char_ty)) + let v_enum_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "enum" , None , Some "ToEnum", [vara], ([[varaTy]], v_enum_ty)) let v_hash_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "hash" , None , Some "Hash" , [vara], ([[varaTy]], v_int_ty)) let v_box_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "box" , None , Some "Box" , [vara], ([[varaTy]], v_obj_ty)) let v_isnull_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "isNull" , None , Some "IsNull" , [vara], ([[varaTy]], v_bool_ty)) let v_isnotnull_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "isNotNull" , None , Some "IsNotNull" , [vara], ([[varaTy]], v_bool_ty)) - let v_raise_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "raise" , None , Some "Raise" , [vara], ([[mkSysNonGenericTy sys "Exception"]], varaTy)) - let v_failwith_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "failwith" , None , Some "FailWith" , [vara], ([[v_string_ty]], varaTy)) - let v_invalid_arg_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "invalidArg" , None , Some "InvalidArg" , [vara], ([[v_string_ty]; [v_string_ty]], varaTy)) - let v_null_arg_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "nullArg" , None , Some "NullArg" , [vara], ([[v_string_ty]], varaTy)) - let v_invalid_op_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "invalidOp" , None , Some "InvalidOp" , [vara], ([[v_string_ty]], varaTy)) - let v_failwithf_info = makeIntrinsicValRef(fslib_MFExtraTopLevelOperators_nleref, "failwithf" , None , Some "PrintFormatToStringThenFail" , [vara;varb], ([[mk_format4_ty varaTy v_unit_ty v_string_ty v_string_ty]], varaTy)) - + let v_raise_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "raise" , None , Some "Raise" , [vara], ([[mkSysNonGenericTy sys "Exception"]], varaTy)) + let v_failwith_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "failwith" , None , Some "FailWith" , [vara], ([[v_string_ty]], varaTy)) + let v_invalid_arg_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "invalidArg" , None , Some "InvalidArg" , [vara], ([[v_string_ty]; [v_string_ty]], varaTy)) + let v_null_arg_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "nullArg" , None , Some "NullArg" , [vara], ([[v_string_ty]], varaTy)) + let v_invalid_op_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "invalidOp" , None , Some "InvalidOp" , [vara], ([[v_string_ty]], varaTy)) + let v_failwithf_info = makeIntrinsicValRef(fslib_MFExtraTopLevelOperators_nleref, "failwithf" , None , Some "PrintFormatToStringThenFail" , [vara;varb], ([[mk_format4_ty varaTy v_unit_ty v_string_ty v_string_ty]], varaTy)) + let v_reraise_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "reraise" , None , Some "Reraise", [vara], ([[v_unit_ty]], varaTy)) - let v_typeof_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "typeof" , None , Some "TypeOf" , [vara], ([], v_system_Type_ty)) + let v_typeof_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "typeof" , None , Some "TypeOf" , [vara], ([], v_system_Type_ty)) let v_methodhandleof_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "methodhandleof" , None , Some "MethodHandleOf", [vara;varb], ([[varaTy --> varbTy]], v_system_RuntimeMethodHandle_ty)) - let v_sizeof_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "sizeof" , None , Some "SizeOf" , [vara], ([], v_int_ty)) + let v_sizeof_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "sizeof" , None , Some "SizeOf" , [vara], ([], v_int_ty)) let v_nameof_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "nameof" , None , Some "NameOf" , [vara], ([[varaTy]], v_string_ty)) - let v_unchecked_defaultof_info = makeIntrinsicValRef(fslib_MFOperatorsUnchecked_nleref, "defaultof" , None , Some "DefaultOf", [vara], ([], varaTy)) - let v_typedefof_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "typedefof" , None , Some "TypeDefOf", [vara], ([], v_system_Type_ty)) + let v_unchecked_defaultof_info = makeIntrinsicValRef(fslib_MFOperatorsUnchecked_nleref, "defaultof" , None , Some "DefaultOf", [vara], ([], varaTy)) + let v_typedefof_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "typedefof" , None , Some "TypeDefOf", [vara], ([], v_system_Type_ty)) let v_range_op_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Range" , None , None , [vara], ([[varaTy];[varaTy]], mkSeqTy varaTy)) let v_range_step_op_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_RangeStep" , None , None , [vara;varb], ([[varaTy];[varbTy];[varaTy]], mkSeqTy varaTy)) let v_range_int32_op_info = makeIntrinsicValRef(fslib_MFOperatorIntrinsics_nleref, "RangeInt32" , None , None , [], ([[v_int_ty];[v_int_ty];[v_int_ty]], mkSeqTy v_int_ty)) let v_array_length_info = makeIntrinsicValRef(fslib_MFArrayModule_nleref, "length" , None , Some "Length" , [vara], ([[mkArrayType 1 varaTy]], v_int_ty)) let v_array_get_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "GetArray" , None , None , [vara], ([[mkArrayType 1 varaTy]; [v_int_ty]], varaTy)) - let v_array2D_get_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "GetArray2D" , None , None , [vara], ([[mkArrayType 2 varaTy];[v_int_ty]; [v_int_ty]], varaTy)) + let v_array2D_get_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "GetArray2D" , None , None , [vara], ([[mkArrayType 2 varaTy];[v_int_ty]; [v_int_ty]], varaTy)) let v_array3D_get_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "GetArray3D" , None , None , [vara], ([[mkArrayType 3 varaTy];[v_int_ty]; [v_int_ty]; [v_int_ty]], varaTy)) let v_array4D_get_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "GetArray4D" , None , None , [vara], ([[mkArrayType 4 varaTy];[v_int_ty]; [v_int_ty]; [v_int_ty]; [v_int_ty]], varaTy)) let v_array_set_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "SetArray" , None , None , [vara], ([[mkArrayType 1 varaTy]; [v_int_ty]; [varaTy]], v_unit_ty)) @@ -709,23 +707,23 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let v_option_toNullable_info = makeIntrinsicValRef(fslib_MFOptionModule_nleref, "toNullable" , None , Some "ToNullable" , [vara], ([[mkOptionTy varaTy]], mkNullableTy varaTy)) let v_option_defaultValue_info = makeIntrinsicValRef(fslib_MFOptionModule_nleref, "defaultValue" , None , Some "DefaultValue" , [vara], ([[varaTy]; [mkOptionTy varaTy]], varaTy)) - let v_nativeptr_tobyref_info = makeIntrinsicValRef(fslib_MFNativePtrModule_nleref, "toByRef" , None , Some "ToByRefInlined", [vara], ([[mkNativePtrTy varaTy]], mkByrefTy varaTy)) + let v_nativeptr_tobyref_info = makeIntrinsicValRef(fslib_MFNativePtrModule_nleref, "toByRef" , None , Some "ToByRefInlined", [vara], ([[mkNativePtrTy varaTy]], mkByrefTy varaTy)) - let v_seq_collect_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "collect" , None , Some "Collect", [vara;varb;varc], ([[varaTy --> varbTy]; [mkSeqTy varaTy]], mkSeqTy varcTy)) - let v_seq_delay_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "delay" , None , Some "Delay" , [varb], ([[v_unit_ty --> mkSeqTy varbTy]], mkSeqTy varbTy)) - let v_seq_append_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "append" , None , Some "Append" , [varb], ([[mkSeqTy varbTy]; [mkSeqTy varbTy]], mkSeqTy varbTy)) + let v_seq_collect_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "collect" , None , Some "Collect", [vara;varb;varc], ([[varaTy --> varbTy]; [mkSeqTy varaTy]], mkSeqTy varcTy)) + let v_seq_delay_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "delay" , None , Some "Delay" , [varb], ([[v_unit_ty --> mkSeqTy varbTy]], mkSeqTy varbTy)) + let v_seq_append_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "append" , None , Some "Append" , [varb], ([[mkSeqTy varbTy]; [mkSeqTy varbTy]], mkSeqTy varbTy)) let v_seq_using_info = makeIntrinsicValRef(fslib_MFRuntimeHelpers_nleref, "EnumerateUsing" , None , None , [vara;varb;varc], ([[varaTy];[(varaTy --> varbTy)]], mkSeqTy varcTy)) let v_seq_generated_info = makeIntrinsicValRef(fslib_MFRuntimeHelpers_nleref, "EnumerateWhile" , None , None , [varb], ([[v_unit_ty --> v_bool_ty]; [mkSeqTy varbTy]], mkSeqTy varbTy)) let v_seq_finally_info = makeIntrinsicValRef(fslib_MFRuntimeHelpers_nleref, "EnumerateThenFinally" , None , None , [varb], ([[mkSeqTy varbTy]; [v_unit_ty --> v_unit_ty]], mkSeqTy varbTy)) - let v_seq_of_functions_info = makeIntrinsicValRef(fslib_MFRuntimeHelpers_nleref, "EnumerateFromFunctions" , None , None , [vara;varb], ([[v_unit_ty --> varaTy]; [varaTy --> v_bool_ty]; [varaTy --> varbTy]], mkSeqTy varbTy)) + let v_seq_of_functions_info = makeIntrinsicValRef(fslib_MFRuntimeHelpers_nleref, "EnumerateFromFunctions" , None , None , [vara;varb], ([[v_unit_ty --> varaTy]; [varaTy --> v_bool_ty]; [varaTy --> varbTy]], mkSeqTy varbTy)) let v_create_event_info = makeIntrinsicValRef(fslib_MFRuntimeHelpers_nleref, "CreateEvent" , None , None , [vara;varb], ([[varaTy --> v_unit_ty]; [varaTy --> v_unit_ty]; [(v_obj_ty --> (varbTy --> v_unit_ty)) --> varaTy]], TType_app (v_fslib_IEvent2_tcr, [varaTy;varbTy]))) - let v_seq_to_array_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "toArray" , None , Some "ToArray", [varb], ([[mkSeqTy varbTy]], mkArrayType 1 varbTy)) + let v_seq_to_array_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "toArray" , None , Some "ToArray", [varb], ([[mkSeqTy varbTy]], mkArrayType 1 varbTy)) let v_seq_to_list_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "toList" , None , Some "ToList" , [varb], ([[mkSeqTy varbTy]], mkListTy varbTy)) let v_seq_map_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "map" , None , Some "Map" , [vara;varb], ([[varaTy --> varbTy]; [mkSeqTy varaTy]], mkSeqTy varbTy)) let v_seq_singleton_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "singleton" , None , Some "Singleton" , [vara], ([[varaTy]], mkSeqTy varaTy)) let v_seq_empty_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "empty" , None , Some "Empty" , [vara], ([], mkSeqTy varaTy)) - let v_new_format_info = makeIntrinsicValRef(fslib_MFCore_nleref, ".ctor" , Some "PrintfFormat`5", None , [vara;varb;varc;vard;vare], ([[v_string_ty]], mkPrintfFormatTy varaTy varbTy varcTy vardTy vareTy)) - let v_sprintf_info = makeIntrinsicValRef(fslib_MFExtraTopLevelOperators_nleref, "sprintf" , None , Some "PrintFormatToStringThen", [vara], ([[mk_format4_ty varaTy v_unit_ty v_string_ty v_string_ty]], varaTy)) + let v_new_format_info = makeIntrinsicValRef(fslib_MFCore_nleref, ".ctor" , Some "PrintfFormat`5", None , [vara;varb;varc;vard;vare], ([[v_string_ty]], mkPrintfFormatTy varaTy varbTy varcTy vardTy vareTy)) + let v_sprintf_info = makeIntrinsicValRef(fslib_MFExtraTopLevelOperators_nleref, "sprintf" , None , Some "PrintFormatToStringThen", [vara], ([[mk_format4_ty varaTy v_unit_ty v_string_ty v_string_ty]], varaTy)) let v_lazy_force_info = makeIntrinsicValRef(fslib_MFLazyExtensions_nleref, "Force" , Some "Lazy`1" , None , [vara], ([[mkLazyTy varaTy]; []], varaTy)) let v_lazy_create_info = makeIntrinsicValRef(fslib_MFLazyExtensions_nleref, "Create" , Some "Lazy`1" , None , [vara], ([[v_unit_ty --> varaTy]], mkLazyTy varaTy)) @@ -761,17 +759,17 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let tref_DebuggableAttribute = findSysILTypeRef tname_DebuggableAttribute let tref_CompilerGeneratedAttribute = findSysILTypeRef tname_CompilerGeneratedAttribute - let mutable generatedAttribsCache = [] - let mutable debuggerBrowsableNeverAttributeCache = None - let mkDebuggerNonUserCodeAttribute() = mkILCustomAttribute (findSysILTypeRef tname_DebuggerNonUserCodeAttribute, [], [], []) - let mkCompilerGeneratedAttribute () = mkILCustomAttribute (tref_CompilerGeneratedAttribute, [], [], []) + let mutable generatedAttribsCache = [] + let mutable debuggerBrowsableNeverAttributeCache = None + let mkDebuggerNonUserCodeAttribute() = mkILCustomAttribute ilg (findSysILTypeRef tname_DebuggerNonUserCodeAttribute, [], [], []) + let mkCompilerGeneratedAttribute () = mkILCustomAttribute ilg (tref_CompilerGeneratedAttribute, [], [], []) let compilerGlobalState = CompilerGlobalState() // Requests attributes to be added to compiler generated methods. - let addGeneratedAttrs (attrs: ILAttributes) = - let attribs = - match generatedAttribsCache with - | [] -> + let addGeneratedAttrs (attrs: ILAttributes) = + let attribs = + match generatedAttribsCache with + | [] -> let res = [ if not noDebugData then yield mkCompilerGeneratedAttribute() yield mkDebuggerNonUserCodeAttribute()] @@ -784,13 +782,13 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let addPropertyGeneratedAttrs (pdef:ILPropertyDef) = pdef.With(customAttrs = addGeneratedAttrs pdef.CustomAttrs) let addFieldGeneratedAttrs (fdef:ILFieldDef) = fdef.With(customAttrs = addGeneratedAttrs fdef.CustomAttrs) - let tref_DebuggerBrowsableAttribute n = - let typ_DebuggerBrowsableState = + let tref_DebuggerBrowsableAttribute n = + let typ_DebuggerBrowsableState = let tref = findSysILTypeRef tname_DebuggerBrowsableState ILType.Value (mkILNonGenericTySpec tref) - mkILCustomAttribute (findSysILTypeRef tname_DebuggerBrowsableAttribute, [typ_DebuggerBrowsableState], [ILAttribElem.Int32 n], []) + mkILCustomAttribute ilg (findSysILTypeRef tname_DebuggerBrowsableAttribute, [typ_DebuggerBrowsableState], [ILAttribElem.Int32 n], []) - let mkDebuggerBrowsableNeverAttribute() = + let mkDebuggerBrowsableNeverAttribute() = match debuggerBrowsableNeverAttributeCache with | None -> let res = tref_DebuggerBrowsableAttribute 0 @@ -801,14 +799,14 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let addNeverAttrs (attrs: ILAttributes) = mkILCustomAttrs (attrs.AsList @ [mkDebuggerBrowsableNeverAttribute()]) let addPropertyNeverAttrs (pdef:ILPropertyDef) = pdef.With(customAttrs = addNeverAttrs pdef.CustomAttrs) let addFieldNeverAttrs (fdef:ILFieldDef) = fdef.With(customAttrs = addNeverAttrs fdef.CustomAttrs) - let mkDebuggerTypeProxyAttribute (ty : ILType) = mkILCustomAttribute (findSysILTypeRef tname_DebuggerTypeProxyAttribute, [ilg.typ_Type], [ILAttribElem.TypeRef (Some ty.TypeRef)], []) + let mkDebuggerTypeProxyAttribute (ty : ILType) = mkILCustomAttribute ilg (findSysILTypeRef tname_DebuggerTypeProxyAttribute, [ilg.typ_Type], [ILAttribElem.TypeRef (Some ty.TypeRef)], []) - let betterTyconEntries = - [| "Int32" , v_int_tcr - "IntPtr" , v_nativeint_tcr + let betterTyconEntries = + [| "Int32" , v_int_tcr + "IntPtr" , v_nativeint_tcr "UIntPtr" , v_unativeint_tcr - "Int16" , v_int16_tcr - "Int64" , v_int64_tcr + "Int16" , v_int16_tcr + "Int64" , v_int64_tcr "UInt16" , v_uint16_tcr "UInt32" , v_uint32_tcr "UInt64" , v_uint64_tcr @@ -821,13 +819,13 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d "Exception", v_exn_tcr "Char" , v_char_tcr "Double" , v_float_tcr - "Single" , v_float32_tcr |] - |> Array.map (fun (nm, tcr) -> - let ty = mkNonGenericTy tcr - nm, findSysTyconRef sys nm, (fun _ -> ty)) + "Single" , v_float32_tcr |] + |> Array.map (fun (nm, tcr) -> + let ty = mkNonGenericTy tcr + nm, findSysTyconRef sys nm, (fun _ -> ty)) let decompileTyconEntries = - [| + [| "FSharpFunc`2" , v_fastFunc_tcr , (fun tinst -> mkFunTy (List.item 0 tinst) (List.item 1 tinst)) "Tuple`2" , v_ref_tuple2_tcr , decodeTupleTy tupInfoRef "Tuple`3" , v_ref_tuple3_tcr , decodeTupleTy tupInfoRef @@ -842,7 +840,7 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d "ValueTuple`5" , v_struct_tuple5_tcr , decodeTupleTy tupInfoStruct "ValueTuple`6" , v_struct_tuple6_tcr , decodeTupleTy tupInfoStruct "ValueTuple`7" , v_struct_tuple7_tcr , decodeTupleTy tupInfoStruct - "ValueTuple`8" , v_struct_tuple8_tcr , decodeTupleTyIfPossible v_struct_tuple8_tcr tupInfoStruct |] + "ValueTuple`8" , v_struct_tuple8_tcr , decodeTupleTyIfPossible v_struct_tuple8_tcr tupInfoStruct |] let betterEntries = Array.append betterTyconEntries decompileTyconEntries @@ -850,10 +848,10 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let mutable betterTypeDict1 = null let mutable betterTypeDict2 = null - /// This map is indexed by stamps and lazy to avoid dereferencing while setting up the base imports. - let getDecompileTypeDict () = - match decompileTypeDict with - | null -> + /// This map is indexed by stamps and lazy to avoid dereferencing while setting up the base imports. + let getDecompileTypeDict () = + match decompileTypeDict with + | null -> let entries = decompileTyconEntries let t = Dictionary.newWithSize entries.Length for _, tcref, builder in entries do @@ -865,10 +863,10 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d /// This map is for use when building FSharp.Core.dll. The backing Tycon's may not yet exist for /// the TyconRef's we have in our hands, hence we can't dereference them to find their stamps. - /// So this dictionary is indexed by names. Make it lazy to avoid dereferencing while setting up the base imports. - let getBetterTypeDict1 () = - match betterTypeDict1 with - | null -> + /// So this dictionary is indexed by names. Make it lazy to avoid dereferencing while setting up the base imports. + let getBetterTypeDict1 () = + match betterTypeDict1 with + | null -> let entries = betterEntries let t = Dictionary.newWithSize entries.Length for nm, tcref, builder in entries do @@ -878,10 +876,10 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d | t -> t /// This map is for use in normal times (not building FSharp.Core.dll). It is indexed by stamps - /// and lazy to avoid dereferencing while setting up the base imports. - let getBetterTypeDict2 () = - match betterTypeDict2 with - | null -> + /// and lazy to avoid dereferencing while setting up the base imports. + let getBetterTypeDict2 () = + match betterTypeDict2 with + | null -> let entries = betterEntries let t = Dictionary.newWithSize entries.Length for _, tcref, builder in entries do @@ -894,8 +892,8 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d /// For logical purposes equate some F# types with .NET types, e.g. TType_tuple == System.Tuple/ValueTuple. /// Doing this normalization is a fairly performance critical piece of code as it is frequently invoked /// in the process of converting .NET metadata to F# internal compiler data structures (see import.fs). - let decompileTy (tcref: EntityRef) tinst = - if compilingFslib then + let decompileTy (tcref: EntityRef) tinst = + if compilingFslib then // No need to decompile when compiling FSharp.Core.dll TType_app (tcref, tinst) else @@ -904,11 +902,11 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d | true, builder -> builder tinst | _ -> TType_app (tcref, tinst) - /// For cosmetic purposes "improve" some .NET types, e.g. Int32 --> int32. + /// For cosmetic purposes "improve" some .NET types, e.g. Int32 --> int32. /// Doing this normalization is a fairly performance critical piece of code as it is frequently invoked /// in the process of converting .NET metadata to F# internal compiler data structures (see import.fs). - let improveTy (tcref: EntityRef) tinst = - if compilingFslib then + let improveTy (tcref: EntityRef) tinst = + if compilingFslib then let dict = getBetterTypeDict1() match dict.TryGetValue tcref.LogicalName with | true, builder -> builder tcref tinst @@ -921,119 +919,112 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d override x.ToString() = "" - member _.ilg=ilg + member __.ilg=ilg // A table of all intrinsics that the compiler cares about - member _.knownIntrinsics = v_knownIntrinsics + member __.knownIntrinsics = v_knownIntrinsics // A table of known modules in FSharp.Core. Not all modules are necessarily listed, but the more we list the // better the job we do of mapping from provided expressions back to FSharp.Core F# functions and values. - member _.knownFSharpCoreModules = v_knownFSharpCoreModules - member _.compilingFslib = compilingFslib - member _.mlCompatibility = mlCompatibility - member _.emitDebugInfoInQuotations = emitDebugInfoInQuotations - member _.directoryToResolveRelativePaths= directoryToResolveRelativePaths - member _.pathMap = pathMap - member _.langVersion = langVersion - member _.unionCaseRefEq x y = primUnionCaseRefEq compilingFslib fslibCcu x y - member _.valRefEq x y = primValRefEq compilingFslib fslibCcu x y - member _.fslibCcu = fslibCcu + member __.knownFSharpCoreModules = v_knownFSharpCoreModules + member __.compilingFslib = compilingFslib + member __.mlCompatibility = mlCompatibility + member __.emitDebugInfoInQuotations = emitDebugInfoInQuotations + member __.directoryToResolveRelativePaths= directoryToResolveRelativePaths + member __.pathMap = pathMap + member __.langVersion = langVersion + member __.unionCaseRefEq x y = primUnionCaseRefEq compilingFslib fslibCcu x y + member __.valRefEq x y = primValRefEq compilingFslib fslibCcu x y + member __.fslibCcu = fslibCcu member val refcell_tcr_canon = v_refcell_tcr_canon member val option_tcr_canon = mk_MFCore_tcref fslibCcu "Option`1" - member val valueoption_tcr_canon = mk_MFCore_tcref fslibCcu "ValueOption`1" - member _.list_tcr_canon = v_list_tcr_canon + member __.list_tcr_canon = v_list_tcr_canon member val set_tcr_canon = mk_MFCollections_tcref fslibCcu "Set`1" member val map_tcr_canon = mk_MFCollections_tcref fslibCcu "Map`2" - member _.lazy_tcr_canon = lazy_tcr + member __.lazy_tcr_canon = lazy_tcr member val refcell_tcr_nice = v_refcell_tcr_nice member val array_tcr_nice = v_il_arr_tcr_map.[0] - member _.option_tcr_nice = v_option_tcr_nice - member _.valueoption_tcr_nice = v_valueoption_tcr_nice - member _.list_tcr_nice = v_list_tcr_nice - member _.lazy_tcr_nice = v_lazy_tcr_nice - member _.format_tcr = v_format_tcr - member _.expr_tcr = v_expr_tcr - member _.raw_expr_tcr = v_raw_expr_tcr - member _.nativeint_tcr = v_nativeint_tcr - member _.unativeint_tcr = v_unativeint_tcr - member _.int_tcr = v_int_tcr - member _.int32_tcr = v_int32_tcr - member _.int16_tcr = v_int16_tcr - member _.int64_tcr = v_int64_tcr - member _.uint16_tcr = v_uint16_tcr - member _.uint32_tcr = v_uint32_tcr - member _.uint64_tcr = v_uint64_tcr - member _.sbyte_tcr = v_sbyte_tcr - member _.decimal_tcr = v_decimal_tcr - member _.date_tcr = v_date_tcr - member _.pdecimal_tcr = v_pdecimal_tcr - member _.byte_tcr = v_byte_tcr - member _.bool_tcr = v_bool_tcr - member _.unit_tcr_canon = v_unit_tcr_canon - member _.unit_tcr_nice = v_unit_tcr_nice - member _.exn_tcr = v_exn_tcr - member _.char_tcr = v_char_tcr - member _.float_tcr = v_float_tcr - member _.float32_tcr = v_float32_tcr - member _.pfloat_tcr = v_pfloat_tcr - member _.pfloat32_tcr = v_pfloat32_tcr - member _.pint_tcr = v_pint_tcr - member _.pint8_tcr = v_pint8_tcr - member _.pint16_tcr = v_pint16_tcr - member _.pint64_tcr = v_pint64_tcr - member _.pnativeint_tcr = v_pnativeint_tcr - member _.puint_tcr = v_puint_tcr - member _.puint8_tcr = v_puint8_tcr - member _.puint16_tcr = v_puint16_tcr - member _.puint64_tcr = v_puint64_tcr - member _.punativeint_tcr = v_punativeint_tcr - member _.byref_tcr = v_byref_tcr - member _.byref2_tcr = v_byref2_tcr - member _.outref_tcr = v_outref_tcr - member _.inref_tcr = v_inref_tcr - member _.nativeptr_tcr = v_nativeptr_tcr - member _.voidptr_tcr = v_voidptr_tcr - member _.ilsigptr_tcr = v_ilsigptr_tcr - member _.fastFunc_tcr = v_fastFunc_tcr - member _.tcref_IQueryable = v_tcref_IQueryable - member _.tcref_IObservable = v_tcref_IObservable - member _.tcref_IObserver = v_tcref_IObserver - member _.fslib_IEvent2_tcr = v_fslib_IEvent2_tcr - member _.fslib_IDelegateEvent_tcr = v_fslib_IDelegateEvent_tcr - member _.seq_tcr = v_seq_tcr + member __.option_tcr_nice = v_option_tcr_nice + member __.list_tcr_nice = v_list_tcr_nice + member __.lazy_tcr_nice = v_lazy_tcr_nice + member __.format_tcr = v_format_tcr + member __.expr_tcr = v_expr_tcr + member __.raw_expr_tcr = v_raw_expr_tcr + member __.nativeint_tcr = v_nativeint_tcr + member __.unativeint_tcr = v_unativeint_tcr + member __.int_tcr = v_int_tcr + member __.int32_tcr = v_int32_tcr + member __.int16_tcr = v_int16_tcr + member __.int64_tcr = v_int64_tcr + member __.uint16_tcr = v_uint16_tcr + member __.uint32_tcr = v_uint32_tcr + member __.uint64_tcr = v_uint64_tcr + member __.sbyte_tcr = v_sbyte_tcr + member __.decimal_tcr = v_decimal_tcr + member __.date_tcr = v_date_tcr + member __.pdecimal_tcr = v_pdecimal_tcr + member __.byte_tcr = v_byte_tcr + member __.bool_tcr = v_bool_tcr + member __.unit_tcr_canon = v_unit_tcr_canon + member __.unit_tcr_nice = v_unit_tcr_nice + member __.exn_tcr = v_exn_tcr + member __.char_tcr = v_char_tcr + member __.float_tcr = v_float_tcr + member __.float32_tcr = v_float32_tcr + member __.pfloat_tcr = v_pfloat_tcr + member __.pfloat32_tcr = v_pfloat32_tcr + member __.pint_tcr = v_pint_tcr + member __.pint8_tcr = v_pint8_tcr + member __.pint16_tcr = v_pint16_tcr + member __.pint64_tcr = v_pint64_tcr + member __.pnativeint_tcr = v_pnativeint_tcr + member __.puint_tcr = v_puint_tcr + member __.puint8_tcr = v_puint8_tcr + member __.puint16_tcr = v_puint16_tcr + member __.puint64_tcr = v_puint64_tcr + member __.punativeint_tcr = v_punativeint_tcr + member __.byref_tcr = v_byref_tcr + member __.byref2_tcr = v_byref2_tcr + member __.outref_tcr = v_outref_tcr + member __.inref_tcr = v_inref_tcr + member __.nativeptr_tcr = v_nativeptr_tcr + member __.voidptr_tcr = v_voidptr_tcr + member __.ilsigptr_tcr = v_ilsigptr_tcr + member __.fastFunc_tcr = v_fastFunc_tcr + member __.tcref_IQueryable = v_tcref_IQueryable + member __.tcref_IObservable = v_tcref_IObservable + member __.tcref_IObserver = v_tcref_IObserver + member __.fslib_IEvent2_tcr = v_fslib_IEvent2_tcr + member __.fslib_IDelegateEvent_tcr = v_fslib_IDelegateEvent_tcr + member __.seq_tcr = v_seq_tcr member val seq_base_tcr = mk_MFCompilerServices_tcref fslibCcu "GeneratedSequenceBase`1" - member val ListCollector_tcr = mk_MFCompilerServices_tcref fslibCcu "ListCollector`1" - member val ArrayCollector_tcr = mk_MFCompilerServices_tcref fslibCcu "ArrayCollector`1" - member g.mk_GeneratedSequenceBase_ty seqElemTy = TType_app(g.seq_base_tcr,[seqElemTy]) - member g.mk_ListCollector_ty seqElemTy = TType_app(g.ListCollector_tcr,[seqElemTy]) - member g.mk_ArrayCollector_ty seqElemTy = TType_app(g.ArrayCollector_tcr,[seqElemTy]) member val byrefkind_In_tcr = mkNonLocalTyconRef fslib_MFByRefKinds_nleref "In" member val byrefkind_Out_tcr = mkNonLocalTyconRef fslib_MFByRefKinds_nleref "Out" member val byrefkind_InOut_tcr = mkNonLocalTyconRef fslib_MFByRefKinds_nleref "InOut" member val measureproduct_tcr = mk_MFCompilerServices_tcref fslibCcu "MeasureProduct`2" member val measureinverse_tcr = mk_MFCompilerServices_tcref fslibCcu "MeasureInverse`1" member val measureone_tcr = mk_MFCompilerServices_tcref fslibCcu "MeasureOne" - member _.il_arr_tcr_map = v_il_arr_tcr_map - member _.ref_tuple1_tcr = v_ref_tuple1_tcr - member _.ref_tuple2_tcr = v_ref_tuple2_tcr - member _.ref_tuple3_tcr = v_ref_tuple3_tcr - member _.ref_tuple4_tcr = v_ref_tuple4_tcr - member _.ref_tuple5_tcr = v_ref_tuple5_tcr - member _.ref_tuple6_tcr = v_ref_tuple6_tcr - member _.ref_tuple7_tcr = v_ref_tuple7_tcr - member _.ref_tuple8_tcr = v_ref_tuple8_tcr - member _.struct_tuple1_tcr = v_struct_tuple1_tcr - member _.struct_tuple2_tcr = v_struct_tuple2_tcr - member _.struct_tuple3_tcr = v_struct_tuple3_tcr - member _.struct_tuple4_tcr = v_struct_tuple4_tcr - member _.struct_tuple5_tcr = v_struct_tuple5_tcr - member _.struct_tuple6_tcr = v_struct_tuple6_tcr - member _.struct_tuple7_tcr = v_struct_tuple7_tcr - member _.struct_tuple8_tcr = v_struct_tuple8_tcr - member _.choice2_tcr = v_choice2_tcr - member _.choice3_tcr = v_choice3_tcr - member _.choice4_tcr = v_choice4_tcr - member _.choice5_tcr = v_choice5_tcr - member _.choice6_tcr = v_choice6_tcr - member _.choice7_tcr = v_choice7_tcr + member __.il_arr_tcr_map = v_il_arr_tcr_map + member __.ref_tuple1_tcr = v_ref_tuple1_tcr + member __.ref_tuple2_tcr = v_ref_tuple2_tcr + member __.ref_tuple3_tcr = v_ref_tuple3_tcr + member __.ref_tuple4_tcr = v_ref_tuple4_tcr + member __.ref_tuple5_tcr = v_ref_tuple5_tcr + member __.ref_tuple6_tcr = v_ref_tuple6_tcr + member __.ref_tuple7_tcr = v_ref_tuple7_tcr + member __.ref_tuple8_tcr = v_ref_tuple8_tcr + member __.struct_tuple1_tcr = v_struct_tuple1_tcr + member __.struct_tuple2_tcr = v_struct_tuple2_tcr + member __.struct_tuple3_tcr = v_struct_tuple3_tcr + member __.struct_tuple4_tcr = v_struct_tuple4_tcr + member __.struct_tuple5_tcr = v_struct_tuple5_tcr + member __.struct_tuple6_tcr = v_struct_tuple6_tcr + member __.struct_tuple7_tcr = v_struct_tuple7_tcr + member __.struct_tuple8_tcr = v_struct_tuple8_tcr + member __.choice2_tcr = v_choice2_tcr + member __.choice3_tcr = v_choice3_tcr + member __.choice4_tcr = v_choice4_tcr + member __.choice5_tcr = v_choice5_tcr + member __.choice6_tcr = v_choice6_tcr + member __.choice7_tcr = v_choice7_tcr member val nativeint_ty = v_nativeint_ty member val unativeint_ty = v_unativeint_ty member val int32_ty = v_int32_ty @@ -1043,26 +1034,26 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val uint32_ty = v_uint32_ty member val uint64_ty = v_uint64_ty member val sbyte_ty = v_sbyte_ty - member _.byte_ty = v_byte_ty - member _.bool_ty = v_bool_ty - member _.int_ty = v_int_ty - member _.string_ty = v_string_ty - member _.system_IFormattable_tcref = v_IFormattable_tcref - member _.system_FormattableString_tcref = v_FormattableString_tcref - member _.system_FormattableStringFactory_tcref = v_FormattableStringFactory_tcref - member _.system_IFormattable_ty = v_IFormattable_ty - member _.system_FormattableString_ty = v_FormattableString_ty - member _.system_FormattableStringFactory_ty = v_FormattableStringFactory_ty - member _.unit_ty = v_unit_ty - member _.obj_ty = v_obj_ty - member _.char_ty = v_char_ty - member _.decimal_ty = v_decimal_ty + member __.byte_ty = v_byte_ty + member __.bool_ty = v_bool_ty + member __.int_ty = v_int_ty + member __.string_ty = v_string_ty + member __.system_IFormattable_tcref = v_IFormattable_tcref + member __.system_FormattableString_tcref = v_FormattableString_tcref + member __.system_FormattableStringFactory_tcref = v_FormattableStringFactory_tcref + member __.system_IFormattable_ty = v_IFormattable_ty + member __.system_FormattableString_ty = v_FormattableString_ty + member __.system_FormattableStringFactory_ty = v_FormattableStringFactory_ty + member __.unit_ty = v_unit_ty + member __.obj_ty = v_obj_ty + member __.char_ty = v_char_ty + member __.decimal_ty = v_decimal_ty member val exn_ty = mkNonGenericTy v_exn_tcr member val float_ty = v_float_ty member val float32_ty = v_float32_ty /// Memoization table to help minimize the number of ILSourceDocument objects we create - member _.memoize_file x = v_memoize_file.Apply x + member __.memoize_file x = v_memoize_file.Apply x member val system_Array_ty = mkSysNonGenericTy sys "Array" member val system_Object_ty = mkSysNonGenericTy sys "Object" @@ -1076,7 +1067,7 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val system_String_typ = mkSysNonGenericTy sys "String" member val system_String_tcref = findSysTyconRef sys "String" member val system_Int32_ty = mkSysNonGenericTy sys "Int32" - member _.system_Type_ty = v_system_Type_ty + member __.system_Type_ty = v_system_Type_ty member val system_TypedReference_tcref = tryFindSysTyconRef sys "TypedReference" member val system_ArgIterator_tcref = tryFindSysTyconRef sys "ArgIterator" member val system_RuntimeArgumentHandle_tcref = tryFindSysTyconRef sys "RuntimeArgumentHandle" @@ -1086,7 +1077,7 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val system_Int32_tcref = findSysTyconRef sys "Int32" member val system_Int64_tcref = findSysTyconRef sys "Int64" member val system_IntPtr_tcref = findSysTyconRef sys "IntPtr" - member val system_Bool_tcref = findSysTyconRef sys "Boolean" + member val system_Bool_tcref = findSysTyconRef sys "Boolean" member val system_Byte_tcref = findSysTyconRef sys "Byte" member val system_UInt16_tcref = findSysTyconRef sys "UInt16" member val system_Char_tcref = findSysTyconRef sys "Char" @@ -1096,17 +1087,17 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val system_Single_tcref = findSysTyconRef sys "Single" member val system_Double_tcref = findSysTyconRef sys "Double" member val system_RuntimeTypeHandle_ty = mkSysNonGenericTy sys "RuntimeTypeHandle" - member _.system_RuntimeMethodHandle_ty = v_system_RuntimeMethodHandle_ty - + member __.system_RuntimeMethodHandle_ty = v_system_RuntimeMethodHandle_ty + member val system_MarshalByRefObject_tcref = tryFindSysTyconRef sys "MarshalByRefObject" member val system_MarshalByRefObject_ty = tryMkSysNonGenericTy sys "MarshalByRefObject" member val system_ExceptionDispatchInfo_ty = tryMkSysNonGenericTy ["System"; "Runtime"; "ExceptionServices"] "ExceptionDispatchInfo" - member _.system_Reflection_MethodInfo_ty = v_system_Reflection_MethodInfo_ty - - member val system_Array_tcref = v_Array_tcref + member __.system_Reflection_MethodInfo_ty = v_system_Reflection_MethodInfo_ty + + member val system_Array_tcref = findSysTyconRef sys "Array" member val system_Object_tcref = findSysTyconRef sys "Object" member val system_Value_tcref = findSysTyconRef sys "ValueType" member val system_Void_tcref = findSysTyconRef sys "Void" @@ -1118,22 +1109,22 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val system_LinqExpression_tcref = v_linqExpression_tcr member val mk_IStructuralComparable_ty = mkSysNonGenericTy sysCollections "IStructuralComparable" - + member val mk_IStructuralEquatable_ty = mkSysNonGenericTy sysCollections "IStructuralEquatable" - member _.IComparer_ty = v_IComparer_ty - member _.IEqualityComparer_ty = v_IEqualityComparer_ty + member __.IComparer_ty = v_IComparer_ty + member __.IEqualityComparer_ty = v_IEqualityComparer_ty member val tcref_System_Collections_IComparer = findSysTyconRef sysCollections "IComparer" member val tcref_System_Collections_IEqualityComparer = findSysTyconRef sysCollections "IEqualityComparer" member val tcref_System_Collections_Generic_IEqualityComparer = findSysTyconRef sysGenerics "IEqualityComparer`1" member val tcref_System_Collections_Generic_Dictionary = findSysTyconRef sysGenerics "Dictionary`2" member val tcref_System_Collections_Generic_IDictionary = findSysTyconRef sysGenerics "IDictionary`2" - + member val tcref_System_IComparable = findSysTyconRef sys "IComparable" member val tcref_System_IStructuralComparable = findSysTyconRef sysCollections "IStructuralComparable" member val tcref_System_IStructuralEquatable = findSysTyconRef sysCollections "IStructuralEquatable" member val tcref_System_IDisposable = findSysTyconRef sys "IDisposable" - + member val tcref_LanguagePrimitives = mk_MFCore_tcref fslibCcu "LanguagePrimitives" member val tcref_System_Collections_Generic_List = findSysTyconRef sysGenerics "List`1" @@ -1141,12 +1132,12 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val tcref_System_Collections_Generic_IReadOnlyList = findSysTyconRef sysGenerics "IReadOnlyList`1" member val tcref_System_Collections_Generic_ICollection = findSysTyconRef sysGenerics "ICollection`1" member val tcref_System_Collections_Generic_IReadOnlyCollection = findSysTyconRef sysGenerics "IReadOnlyCollection`1" - member _.tcref_System_Collections_IEnumerable = v_tcref_System_Collections_IEnumerable + member __.tcref_System_Collections_IEnumerable = v_tcref_System_Collections_IEnumerable - member _.tcref_System_Collections_Generic_IEnumerable = v_IEnumerable_tcr - member _.tcref_System_Collections_Generic_IEnumerator = v_IEnumerator_tcr - - member _.tcref_System_Attribute = v_System_Attribute_tcr + member __.tcref_System_Collections_Generic_IEnumerable = v_IEnumerable_tcr + member __.tcref_System_Collections_Generic_IEnumerator = v_IEnumerator_tcr + + member __.tcref_System_Attribute = v_System_Attribute_tcr // Review: Does this need to be an option type? member val System_Runtime_CompilerServices_RuntimeFeature_ty = tryFindSysTyconRef sysCompilerServices "RuntimeFeature" |> Option.map mkNonGenericTy @@ -1169,24 +1160,24 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val attrib_ParamArrayAttribute = findSysAttrib "System.ParamArrayAttribute" member val attrib_IDispatchConstantAttribute = tryFindSysAttrib "System.Runtime.CompilerServices.IDispatchConstantAttribute" member val attrib_IUnknownConstantAttribute = tryFindSysAttrib "System.Runtime.CompilerServices.IUnknownConstantAttribute" - + // We use 'findSysAttrib' here because lookup on attribute is done by name comparison, and can proceed // even if the type is not found in a system assembly. member val attrib_IsByRefLikeAttribute = findSysAttrib "System.Runtime.CompilerServices.IsByRefLikeAttribute" member val attrib_IsReadOnlyAttribute = findSysAttrib "System.Runtime.CompilerServices.IsReadOnlyAttribute" - + member val attrib_SystemObsolete = findSysAttrib "System.ObsoleteAttribute" member val attrib_DllImportAttribute = tryFindSysAttrib "System.Runtime.InteropServices.DllImportAttribute" member val attrib_StructLayoutAttribute = findSysAttrib "System.Runtime.InteropServices.StructLayoutAttribute" member val attrib_TypeForwardedToAttribute = findSysAttrib "System.Runtime.CompilerServices.TypeForwardedToAttribute" member val attrib_ComVisibleAttribute = findSysAttrib "System.Runtime.InteropServices.ComVisibleAttribute" member val attrib_ComImportAttribute = tryFindSysAttrib "System.Runtime.InteropServices.ComImportAttribute" - member val attrib_FieldOffsetAttribute = findSysAttrib "System.Runtime.InteropServices.FieldOffsetAttribute" + member val attrib_FieldOffsetAttribute = findSysAttrib "System.Runtime.InteropServices.FieldOffsetAttribute" member val attrib_MarshalAsAttribute = tryFindSysAttrib "System.Runtime.InteropServices.MarshalAsAttribute" - member val attrib_InAttribute = findSysAttrib "System.Runtime.InteropServices.InAttribute" - member val attrib_OutAttribute = findSysAttrib "System.Runtime.InteropServices.OutAttribute" - member val attrib_OptionalAttribute = tryFindSysAttrib "System.Runtime.InteropServices.OptionalAttribute" - member val attrib_DefaultParameterValueAttribute = tryFindSysAttrib "System.Runtime.InteropServices.DefaultParameterValueAttribute" + member val attrib_InAttribute = findSysAttrib "System.Runtime.InteropServices.InAttribute" + member val attrib_OutAttribute = findSysAttrib "System.Runtime.InteropServices.OutAttribute" + member val attrib_OptionalAttribute = tryFindSysAttrib "System.Runtime.InteropServices.OptionalAttribute" + member val attrib_DefaultParameterValueAttribute = tryFindSysAttrib "System.Runtime.InteropServices.DefaultParameterValueAttribute" member val attrib_ThreadStaticAttribute = tryFindSysAttrib "System.ThreadStaticAttribute" member val attrib_SpecialNameAttribute = tryFindSysAttrib "System.Runtime.CompilerServices.SpecialNameAttribute" member val attrib_VolatileFieldAttribute = mk_MFCore_attrib "VolatileFieldAttribute" @@ -1201,12 +1192,11 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val attrib_CallerLineNumberAttribute = findSysAttrib "System.Runtime.CompilerServices.CallerLineNumberAttribute" member val attrib_CallerFilePathAttribute = findSysAttrib "System.Runtime.CompilerServices.CallerFilePathAttribute" member val attrib_CallerMemberNameAttribute = findSysAttrib "System.Runtime.CompilerServices.CallerMemberNameAttribute" - member val attrib_SkipLocalsInitAttribute = findSysAttrib "System.Runtime.CompilerServices.SkipLocalsInitAttribute" member val attrib_ProjectionParameterAttribute = mk_MFCore_attrib "ProjectionParameterAttribute" member val attrib_CustomOperationAttribute = mk_MFCore_attrib "CustomOperationAttribute" member val attrib_NonSerializedAttribute = tryFindSysAttrib "System.NonSerializedAttribute" - + member val attrib_AutoSerializableAttribute = mk_MFCore_attrib "AutoSerializableAttribute" member val attrib_RequireQualifiedAccessAttribute = mk_MFCore_attrib "RequireQualifiedAccessAttribute" member val attrib_EntryPointAttribute = mk_MFCore_attrib "EntryPointAttribute" @@ -1256,27 +1246,27 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member g.decompileType tcref tinst = decompileTy tcref tinst - member _.new_decimal_info = v_new_decimal_info - member _.seq_info = v_seq_info - member val seq_vref = (ValRefForIntrinsic v_seq_info) + member __.new_decimal_info = v_new_decimal_info + member __.seq_info = v_seq_info + member val seq_vref = (ValRefForIntrinsic v_seq_info) member val fsharpref_vref = (ValRefForIntrinsic v_refcell_info) - member val and_vref = (ValRefForIntrinsic v_and_info) + member val and_vref = (ValRefForIntrinsic v_and_info) member val and2_vref = (ValRefForIntrinsic v_and2_info) member val addrof_vref = (ValRefForIntrinsic v_addrof_info) member val addrof2_vref = (ValRefForIntrinsic v_addrof2_info) member val or_vref = (ValRefForIntrinsic v_or_info) member val splice_expr_vref = (ValRefForIntrinsic v_splice_expr_info) member val splice_raw_expr_vref = (ValRefForIntrinsic v_splice_raw_expr_info) - member val or2_vref = (ValRefForIntrinsic v_or2_info) + member val or2_vref = (ValRefForIntrinsic v_or2_info) member val generic_equality_er_inner_vref = ValRefForIntrinsic v_generic_equality_er_inner_info member val generic_equality_per_inner_vref = ValRefForIntrinsic v_generic_equality_per_inner_info member val generic_equality_withc_inner_vref = ValRefForIntrinsic v_generic_equality_withc_inner_info member val generic_comparison_inner_vref = ValRefForIntrinsic v_generic_comparison_inner_info member val generic_comparison_withc_inner_vref = ValRefForIntrinsic v_generic_comparison_withc_inner_info - member _.generic_comparison_withc_outer_info = v_generic_comparison_withc_outer_info - member _.generic_equality_er_outer_info = v_generic_equality_er_outer_info - member _.generic_equality_withc_outer_info = v_generic_equality_withc_outer_info - member _.generic_hash_withc_outer_info = v_generic_hash_withc_outer_info + member __.generic_comparison_withc_outer_info = v_generic_comparison_withc_outer_info + member __.generic_equality_er_outer_info = v_generic_equality_er_outer_info + member __.generic_equality_withc_outer_info = v_generic_equality_withc_outer_info + member __.generic_hash_withc_outer_info = v_generic_hash_withc_outer_info member val generic_hash_inner_vref = ValRefForIntrinsic v_generic_hash_inner_info member val generic_hash_withc_inner_vref = ValRefForIntrinsic v_generic_hash_withc_inner_info @@ -1296,55 +1286,55 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val unchecked_multiply_vref = ValRefForIntrinsic v_unchecked_multiply_info member val unchecked_defaultof_vref = ValRefForIntrinsic v_unchecked_defaultof_info - member _.bitwise_or_info = v_bitwise_or_info - member _.bitwise_and_info = v_bitwise_and_info - member _.bitwise_xor_info = v_bitwise_xor_info - member _.bitwise_unary_not_info = v_bitwise_unary_not_info - member _.bitwise_shift_left_info = v_bitwise_shift_left_info - member _.bitwise_shift_right_info = v_bitwise_shift_right_info - member _.unchecked_addition_info = v_unchecked_addition_info - member _.unchecked_subtraction_info = v_unchecked_subtraction_info - member _.unchecked_multiply_info = v_unchecked_multiply_info - member _.unchecked_division_info = v_unchecked_division_info - member _.unchecked_modulus_info = v_unchecked_modulus_info - member _.unchecked_unary_plus_info = v_unchecked_unary_plus_info - member _.unchecked_unary_minus_info = v_unchecked_unary_minus_info - member _.unchecked_unary_not_info = v_unchecked_unary_not_info - member _.unchecked_defaultof_info = v_unchecked_defaultof_info - - member _.checked_addition_info = v_checked_addition_info - member _.checked_subtraction_info = v_checked_subtraction_info - member _.checked_multiply_info = v_checked_multiply_info - member _.checked_unary_minus_info = v_checked_unary_minus_info - - member _.byte_checked_info = v_byte_checked_info - member _.sbyte_checked_info = v_sbyte_checked_info - member _.int16_checked_info = v_int16_checked_info - member _.uint16_checked_info = v_uint16_checked_info - member _.int_checked_info = v_int_checked_info - member _.int32_checked_info = v_int32_checked_info - member _.uint32_checked_info = v_uint32_checked_info - member _.int64_checked_info = v_int64_checked_info - member _.uint64_checked_info = v_uint64_checked_info - member _.nativeint_checked_info = v_nativeint_checked_info - member _.unativeint_checked_info = v_unativeint_checked_info - - member _.byte_operator_info = v_byte_operator_info - member _.sbyte_operator_info = v_sbyte_operator_info - member _.int16_operator_info = v_int16_operator_info - member _.uint16_operator_info = v_uint16_operator_info - member _.int_operator_info = v_int_operator_info - member _.int32_operator_info = v_int32_operator_info - member _.uint32_operator_info = v_uint32_operator_info - member _.int64_operator_info = v_int64_operator_info - member _.uint64_operator_info = v_uint64_operator_info - member _.float32_operator_info = v_float32_operator_info - member _.float_operator_info = v_float_operator_info - member _.nativeint_operator_info = v_nativeint_operator_info - member _.unativeint_operator_info = v_unativeint_operator_info - - member _.char_operator_info = v_char_operator_info - member _.enum_operator_info = v_enum_operator_info + member __.bitwise_or_info = v_bitwise_or_info + member __.bitwise_and_info = v_bitwise_and_info + member __.bitwise_xor_info = v_bitwise_xor_info + member __.bitwise_unary_not_info = v_bitwise_unary_not_info + member __.bitwise_shift_left_info = v_bitwise_shift_left_info + member __.bitwise_shift_right_info = v_bitwise_shift_right_info + member __.unchecked_addition_info = v_unchecked_addition_info + member __.unchecked_subtraction_info = v_unchecked_subtraction_info + member __.unchecked_multiply_info = v_unchecked_multiply_info + member __.unchecked_division_info = v_unchecked_division_info + member __.unchecked_modulus_info = v_unchecked_modulus_info + member __.unchecked_unary_plus_info = v_unchecked_unary_plus_info + member __.unchecked_unary_minus_info = v_unchecked_unary_minus_info + member __.unchecked_unary_not_info = v_unchecked_unary_not_info + member __.unchecked_defaultof_info = v_unchecked_defaultof_info + + member __.checked_addition_info = v_checked_addition_info + member __.checked_subtraction_info = v_checked_subtraction_info + member __.checked_multiply_info = v_checked_multiply_info + member __.checked_unary_minus_info = v_checked_unary_minus_info + + member __.byte_checked_info = v_byte_checked_info + member __.sbyte_checked_info = v_sbyte_checked_info + member __.int16_checked_info = v_int16_checked_info + member __.uint16_checked_info = v_uint16_checked_info + member __.int_checked_info = v_int_checked_info + member __.int32_checked_info = v_int32_checked_info + member __.uint32_checked_info = v_uint32_checked_info + member __.int64_checked_info = v_int64_checked_info + member __.uint64_checked_info = v_uint64_checked_info + member __.nativeint_checked_info = v_nativeint_checked_info + member __.unativeint_checked_info = v_unativeint_checked_info + + member __.byte_operator_info = v_byte_operator_info + member __.sbyte_operator_info = v_sbyte_operator_info + member __.int16_operator_info = v_int16_operator_info + member __.uint16_operator_info = v_uint16_operator_info + member __.int_operator_info = v_int_operator_info + member __.int32_operator_info = v_int32_operator_info + member __.uint32_operator_info = v_uint32_operator_info + member __.int64_operator_info = v_int64_operator_info + member __.uint64_operator_info = v_uint64_operator_info + member __.float32_operator_info = v_float32_operator_info + member __.float_operator_info = v_float_operator_info + member __.nativeint_operator_info = v_nativeint_operator_info + member __.unativeint_operator_info = v_unativeint_operator_info + + member __.char_operator_info = v_char_operator_info + member __.enum_operator_info = v_enum_operator_info member val compare_operator_vref = ValRefForIntrinsic v_compare_operator_info member val equals_operator_vref = ValRefForIntrinsic v_equals_operator_info @@ -1364,27 +1354,27 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val invalid_op_vref = ValRefForIntrinsic v_invalid_op_info member val failwithf_vref = ValRefForIntrinsic v_failwithf_info - member _.equals_operator_info = v_equals_operator_info - member _.not_equals_operator = v_not_equals_operator_info - member _.less_than_operator = v_less_than_operator_info - member _.less_than_or_equals_operator = v_less_than_or_equals_operator_info - member _.greater_than_operator = v_greater_than_operator_info - member _.greater_than_or_equals_operator = v_greater_than_or_equals_operator_info - - member _.hash_info = v_hash_info - member _.box_info = v_box_info - member _.isnull_info = v_isnull_info - member _.isnotnull_info = v_isnotnull_info - member _.raise_info = v_raise_info - member _.failwith_info = v_failwith_info - member _.invalid_arg_info = v_invalid_arg_info - member _.null_arg_info = v_null_arg_info - member _.invalid_op_info = v_invalid_op_info - member _.failwithf_info = v_failwithf_info - member _.reraise_info = v_reraise_info - member _.methodhandleof_info = v_methodhandleof_info - member _.typeof_info = v_typeof_info - member _.typedefof_info = v_typedefof_info + member __.equals_operator_info = v_equals_operator_info + member __.not_equals_operator = v_not_equals_operator_info + member __.less_than_operator = v_less_than_operator_info + member __.less_than_or_equals_operator = v_less_than_or_equals_operator_info + member __.greater_than_operator = v_greater_than_operator_info + member __.greater_than_or_equals_operator = v_greater_than_or_equals_operator_info + + member __.hash_info = v_hash_info + member __.box_info = v_box_info + member __.isnull_info = v_isnull_info + member __.isnotnull_info = v_isnotnull_info + member __.raise_info = v_raise_info + member __.failwith_info = v_failwith_info + member __.invalid_arg_info = v_invalid_arg_info + member __.null_arg_info = v_null_arg_info + member __.invalid_op_info = v_invalid_op_info + member __.failwithf_info = v_failwithf_info + member __.reraise_info = v_reraise_info + member __.methodhandleof_info = v_methodhandleof_info + member __.typeof_info = v_typeof_info + member __.typedefof_info = v_typedefof_info member val reraise_vref = ValRefForIntrinsic v_reraise_info member val methodhandleof_vref = ValRefForIntrinsic v_methodhandleof_info @@ -1428,64 +1418,62 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val query_select_vref = ValRefForIntrinsic v_query_select_value_info member val query_where_vref = ValRefForIntrinsic v_query_where_value_info member val query_zero_vref = ValRefForIntrinsic v_query_zero_value_info - member val seq_to_list_vref = ValRefForIntrinsic v_seq_to_list_info - member val seq_to_array_vref = ValRefForIntrinsic v_seq_to_array_info - - member _.seq_collect_info = v_seq_collect_info - member _.seq_using_info = v_seq_using_info - member _.seq_delay_info = v_seq_delay_info - member _.seq_append_info = v_seq_append_info - member _.seq_generated_info = v_seq_generated_info - member _.seq_finally_info = v_seq_finally_info - member _.seq_of_functions_info = v_seq_of_functions_info - member _.seq_map_info = v_seq_map_info - member _.seq_singleton_info = v_seq_singleton_info - member _.seq_empty_info = v_seq_empty_info - member _.sprintf_info = v_sprintf_info - member _.new_format_info = v_new_format_info - member _.unbox_info = v_unbox_info - member _.get_generic_comparer_info = v_get_generic_comparer_info - member _.get_generic_er_equality_comparer_info = v_get_generic_er_equality_comparer_info - member _.get_generic_per_equality_comparer_info = v_get_generic_per_equality_comparer_info - member _.dispose_info = v_dispose_info - member _.getstring_info = v_getstring_info - member _.unbox_fast_info = v_unbox_fast_info - member _.istype_info = v_istype_info - member _.istype_fast_info = v_istype_fast_info - member _.lazy_force_info = v_lazy_force_info - member _.lazy_create_info = v_lazy_create_info - member _.create_instance_info = v_create_instance_info - member _.create_event_info = v_create_event_info - member _.seq_to_list_info = v_seq_to_list_info - member _.seq_to_array_info = v_seq_to_array_info - - member _.array_length_info = v_array_length_info - member _.array_get_info = v_array_get_info - member _.array2D_get_info = v_array2D_get_info - member _.array3D_get_info = v_array3D_get_info - member _.array4D_get_info = v_array4D_get_info - member _.array_set_info = v_array_set_info - member _.array2D_set_info = v_array2D_set_info - member _.array3D_set_info = v_array3D_set_info - member _.array4D_set_info = v_array4D_set_info + + member __.seq_collect_info = v_seq_collect_info + member __.seq_using_info = v_seq_using_info + member __.seq_delay_info = v_seq_delay_info + member __.seq_append_info = v_seq_append_info + member __.seq_generated_info = v_seq_generated_info + member __.seq_finally_info = v_seq_finally_info + member __.seq_of_functions_info = v_seq_of_functions_info + member __.seq_map_info = v_seq_map_info + member __.seq_singleton_info = v_seq_singleton_info + member __.seq_empty_info = v_seq_empty_info + member __.sprintf_info = v_sprintf_info + member __.new_format_info = v_new_format_info + member __.unbox_info = v_unbox_info + member __.get_generic_comparer_info = v_get_generic_comparer_info + member __.get_generic_er_equality_comparer_info = v_get_generic_er_equality_comparer_info + member __.get_generic_per_equality_comparer_info = v_get_generic_per_equality_comparer_info + member __.dispose_info = v_dispose_info + member __.getstring_info = v_getstring_info + member __.unbox_fast_info = v_unbox_fast_info + member __.istype_info = v_istype_info + member __.istype_fast_info = v_istype_fast_info + member __.lazy_force_info = v_lazy_force_info + member __.lazy_create_info = v_lazy_create_info + member __.create_instance_info = v_create_instance_info + member __.create_event_info = v_create_event_info + member __.seq_to_list_info = v_seq_to_list_info + member __.seq_to_array_info = v_seq_to_array_info + + member __.array_length_info = v_array_length_info + member __.array_get_info = v_array_get_info + member __.array2D_get_info = v_array2D_get_info + member __.array3D_get_info = v_array3D_get_info + member __.array4D_get_info = v_array4D_get_info + member __.array_set_info = v_array_set_info + member __.array2D_set_info = v_array2D_set_info + member __.array3D_set_info = v_array3D_set_info + member __.array4D_set_info = v_array4D_set_info member val option_toNullable_info = v_option_toNullable_info member val option_defaultValue_info = v_option_defaultValue_info - member _.deserialize_quoted_FSharp_20_plus_info = v_deserialize_quoted_FSharp_20_plus_info - member _.deserialize_quoted_FSharp_40_plus_info = v_deserialize_quoted_FSharp_40_plus_info - member _.call_with_witnesses_info = v_call_with_witnesses_info - member _.cast_quotation_info = v_cast_quotation_info - member _.lift_value_info = v_lift_value_info - member _.lift_value_with_name_info = v_lift_value_with_name_info - member _.lift_value_with_defn_info = v_lift_value_with_defn_info - member _.query_source_as_enum_info = v_query_source_as_enum_info - member _.new_query_source_info = v_new_query_source_info - member _.query_builder_tcref = v_query_builder_tcref - member _.fail_init_info = v_fail_init_info - member _.fail_static_init_info = v_fail_static_init_info - member _.check_this_info = v_check_this_info - member _.quote_to_linq_lambda_info = v_quote_to_linq_lambda_info + member __.deserialize_quoted_FSharp_20_plus_info = v_deserialize_quoted_FSharp_20_plus_info + member __.deserialize_quoted_FSharp_40_plus_info = v_deserialize_quoted_FSharp_40_plus_info + member __.call_with_witnesses_info = v_call_with_witnesses_info + member __.cast_quotation_info = v_cast_quotation_info + member __.lift_value_info = v_lift_value_info + member __.lift_value_with_name_info = v_lift_value_with_name_info + member __.lift_value_with_defn_info = v_lift_value_with_defn_info + member __.query_source_as_enum_info = v_query_source_as_enum_info + member __.new_query_source_info = v_new_query_source_info + member __.query_builder_tcref = v_query_builder_tcref + member __.fail_init_info = v_fail_init_info + member __.fail_static_init_info = v_fail_static_init_info + member __.check_this_info = v_check_this_info + member __.quote_to_linq_lambda_info = v_quote_to_linq_lambda_info member val generic_hash_withc_tuple2_vref = ValRefForIntrinsic v_generic_hash_withc_tuple2_info @@ -1503,99 +1491,96 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val generic_equality_withc_outer_vref = ValRefForIntrinsic v_generic_equality_withc_outer_info - member _.cons_ucref = v_cons_ucref - member _.nil_ucref = v_nil_ucref - - // A list of types that are explicitly suppressed from the F# intellisense + member __.cons_ucref = v_cons_ucref + member __.nil_ucref = v_nil_ucref + + // A list of types that are explicitly suppressed from the F# intellisense // Note that the suppression checks for the precise name of the type // so the lowercase versions are visible - member _.suppressed_types = v_suppressed_types + member __.suppressed_types = v_suppressed_types - /// Are we assuming all code gen is for F# interactive, with no static linking - member _.isInteractive=isInteractive + /// Are we assuming all code gen is for F# interactive, with no static linking + member __.isInteractive=isInteractive /// Indicates if we are generating witness arguments for SRTP constraints. Only done if the FSharp.Core /// supports witness arguments. member g.generateWitnesses = - compilingFslib || + compilingFslib || ((ValRefForIntrinsic g.call_with_witnesses_info).TryDeref.IsSome && langVersion.SupportsFeature LanguageFeature.WitnessPassing) - /// Indicates if we can use System.Array.Empty when emitting IL for empty array literals - member val isArrayEmptyAvailable = v_Array_tcref.ILTyconRawMetadata.Methods.FindByName "Empty" |> List.isEmpty |> not - - member _.FindSysTyconRef path nm = findSysTyconRef path nm + member __.FindSysTyconRef path nm = findSysTyconRef path nm - member _.TryFindSysTyconRef path nm = tryFindSysTyconRef path nm + member __.TryFindSysTyconRef path nm = tryFindSysTyconRef path nm - member _.FindSysILTypeRef nm = findSysILTypeRef nm + member __.FindSysILTypeRef nm = findSysILTypeRef nm - member _.TryFindSysILTypeRef nm = tryFindSysILTypeRef nm + member __.TryFindSysILTypeRef nm = tryFindSysILTypeRef nm - member _.FindSysAttrib nm = findSysAttrib nm + member __.FindSysAttrib nm = findSysAttrib nm - member _.TryFindSysAttrib nm = tryFindSysAttrib nm + member __.TryFindSysAttrib nm = tryFindSysAttrib nm - member val ilxPubCloEnv = + member val ilxPubCloEnv = EraseClosures.newIlxPubCloEnv(ilg, addMethodGeneratedAttrs, addFieldGeneratedAttrs, addFieldNeverAttrs) - member _.AddMethodGeneratedAttributes mdef = addMethodGeneratedAttrs mdef + member __.AddMethodGeneratedAttributes mdef = addMethodGeneratedAttrs mdef - member _.AddFieldGeneratedAttrs mdef = addFieldGeneratedAttrs mdef + member __.AddFieldGeneratedAttrs mdef = addFieldGeneratedAttrs mdef - member _.AddFieldNeverAttrs mdef = addFieldNeverAttrs mdef + member __.AddFieldNeverAttrs mdef = addFieldNeverAttrs mdef - member _.mkDebuggerHiddenAttribute() = mkILCustomAttribute (findSysILTypeRef tname_DebuggerHiddenAttribute, [], [], []) + member __.mkDebuggerHiddenAttribute() = mkILCustomAttribute ilg (findSysILTypeRef tname_DebuggerHiddenAttribute, [], [], []) - member _.mkDebuggerDisplayAttribute s = mkILCustomAttribute (findSysILTypeRef tname_DebuggerDisplayAttribute, [ilg.typ_String], [ILAttribElem.String (Some s)], []) + member __.mkDebuggerDisplayAttribute s = mkILCustomAttribute ilg (findSysILTypeRef tname_DebuggerDisplayAttribute, [ilg.typ_String], [ILAttribElem.String (Some s)], []) - member _.DebuggerBrowsableNeverAttribute = mkDebuggerBrowsableNeverAttribute() + member __.DebuggerBrowsableNeverAttribute = mkDebuggerBrowsableNeverAttribute() - member _.mkDebuggerStepThroughAttribute() = - mkILCustomAttribute (findSysILTypeRef tname_DebuggerStepThroughAttribute, [], [], []) + member __.mkDebuggerStepThroughAttribute() = + mkILCustomAttribute ilg (findSysILTypeRef tname_DebuggerStepThroughAttribute, [], [], []) - member _.mkDebuggableAttribute (jitOptimizerDisabled) = - mkILCustomAttribute (tref_DebuggableAttribute, [ilg.typ_Bool; ilg.typ_Bool], [ILAttribElem.Bool false; ILAttribElem.Bool jitOptimizerDisabled], []) + member __.mkDebuggableAttribute (jitOptimizerDisabled) = + mkILCustomAttribute ilg (tref_DebuggableAttribute, [ilg.typ_Bool; ilg.typ_Bool], [ILAttribElem.Bool false; ILAttribElem.Bool jitOptimizerDisabled], []) - member _.mkDebuggableAttributeV2(jitTracking, ignoreSymbolStoreSequencePoints, jitOptimizerDisabled, enableEnC) = - let debuggingMode = + member __.mkDebuggableAttributeV2(jitTracking, ignoreSymbolStoreSequencePoints, jitOptimizerDisabled, enableEnC) = + let debuggingMode = (if jitTracking then 1 else 0) ||| - (if jitOptimizerDisabled then 256 else 0) ||| + (if jitOptimizerDisabled then 256 else 0) ||| (if ignoreSymbolStoreSequencePoints then 2 else 0) ||| (if enableEnC then 4 else 0) let tref_DebuggableAttribute_DebuggingModes = mkILTyRefInTyRef (tref_DebuggableAttribute, tname_DebuggableAttribute_DebuggingModes) - mkILCustomAttribute + mkILCustomAttribute ilg (tref_DebuggableAttribute, [mkILNonGenericValueTy tref_DebuggableAttribute_DebuggingModes], (* See System.Diagnostics.DebuggableAttribute.DebuggingModes *) [ILAttribElem.Int32( debuggingMode )], []) - member internal _.CompilerGlobalState = Some compilerGlobalState + member internal __.CompilerGlobalState = Some compilerGlobalState - member _.CompilerGeneratedAttribute = mkCompilerGeneratedAttribute () + member __.CompilerGeneratedAttribute = mkCompilerGeneratedAttribute () /// Find an FSharp.Core LaguagePrimitives dynamic function that corresponds to a trait witness, e.g. /// AdditionDynamic for op_Addition. Also work out the type instantiation of the dynamic function. - member _.MakeBuiltInWitnessInfo (t: TraitConstraintInfo) = - let memberName = + member __.MakeBuiltInWitnessInfo (t: TraitConstraintInfo) = + let memberName = let nm = t.MemberName - let coreName = + let coreName = if nm.StartsWith "op_" then nm.[3..] elif nm = "get_Zero" then "GenericZero" elif nm = "get_One" then "GenericOne" else nm coreName + "Dynamic" - let gtps, argTys, retTy, tinst = - match memberName, t.ArgumentTypes, t.ReturnType with - | ("AdditionDynamic" | "MultiplyDynamic" | "SubtractionDynamic"| "DivisionDynamic" | "ModulusDynamic" | "CheckedAdditionDynamic" | "CheckedMultiplyDynamic" | "CheckedSubtractionDynamic" | "LeftShiftDynamic" | "RightShiftDynamic" | "BitwiseAndDynamic" | "BitwiseOrDynamic" | "ExclusiveOrDynamic" | "LessThanDynamic" | "GreaterThanDynamic" | "LessThanOrEqualDynamic" | "GreaterThanOrEqualDynamic" | "EqualityDynamic" | "InequalityDynamic"), - [ arg0Ty; arg1Ty ], - Some retTy -> + let gtps, argTys, retTy, tinst = + match memberName, t.ArgumentTypes, t.ReturnType with + | ("AdditionDynamic" | "MultiplyDynamic" | "SubtractionDynamic"| "DivisionDynamic" | "ModulusDynamic" | "CheckedAdditionDynamic" | "CheckedMultiplyDynamic" | "CheckedSubtractionDynamic" | "LeftShiftDynamic" | "RightShiftDynamic" | "BitwiseAndDynamic" | "BitwiseOrDynamic" | "ExclusiveOrDynamic" | "LessThanDynamic" | "GreaterThanDynamic" | "LessThanOrEqualDynamic" | "GreaterThanOrEqualDynamic" | "EqualityDynamic" | "InequalityDynamic"), + [ arg0Ty; arg1Ty ], + Some retTy -> [vara; varb; varc], [ varaTy; varbTy ], varcTy, [ arg0Ty; arg1Ty; retTy ] - | ("UnaryNegationDynamic" | "CheckedUnaryNegationDynamic" | "LogicalNotDynamic" | "ExplicitDynamic"), - [ arg0Ty ], - Some retTy -> + | ("UnaryNegationDynamic" | "CheckedUnaryNegationDynamic" | "LogicalNotDynamic" | "ExplicitDynamic"), + [ arg0Ty ], + Some retTy -> [vara; varb ], [ varaTy ], varbTy, [ arg0Ty; retTy ] - | "DivideByIntDynamic", [arg0Ty; _], _ -> + | "DivideByIntDynamic", [arg0Ty; _], _ -> [vara], [ varaTy; v_int32_ty ], varaTy, [ arg0Ty ] - | ("GenericZeroDynamic" | "GenericOneDynamic"), [], Some retTy -> + | ("GenericZeroDynamic" | "GenericOneDynamic"), [], Some retTy -> [vara], [ ], varaTy, [ retTy ] | _ -> failwithf "unknown builtin witness '%s'" memberName let vref = makeOtherIntrinsicValRef (fslib_MFLanguagePrimitives_nleref, memberName, None, None, gtps, (List.map List.singleton argTys, retTy)) @@ -1604,8 +1589,8 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d /// Find an FSharp.Core operator that corresponds to a trait witness member g.TryMakeOperatorAsBuiltInWitnessInfo isStringTy isArrayTy (t: TraitConstraintInfo) argExprs = - match t.MemberName, t.ArgumentTypes, t.ReturnType, argExprs with - | "get_Sign", [aty], _, (objExpr :: _) -> + match t.MemberName, t.ArgumentTypes, t.ReturnType, argExprs with + | "get_Sign", [aty], _, (objExpr :: _) -> // Call Operators.sign let info = makeOtherIntrinsicValRef (fslib_MFOperators_nleref, "sign", None, Some "Sign", [vara], ([[varaTy]], v_int32_ty)) let tyargs = [aty] @@ -1635,18 +1620,18 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let info = makeOtherIntrinsicValRef (fslib_MFLanguagePrimitives_nleref, "GenericOne", None, None, [vara], ([], varaTy)) let tyargs = [aty] Some (info, tyargs, []) - | ("Abs" | "Sin" | "Cos" | "Tan" | "Sinh" | "Cosh" | "Tanh" | "Atan" | "Acos" | "Asin" | "Exp" | "Ceiling" | "Floor" | "Round" | "Truncate" | "Log10"| "Log"), [aty], _, [_] -> + | ("Abs" | "Sin" | "Cos" | "Tan" | "Sinh" | "Cosh" | "Tanh" | "Atan" | "Acos" | "Asin" | "Exp" | "Ceiling" | "Floor" | "Round" | "Truncate" | "Log10"| "Log"), [aty], _, [_] -> // Call corresponding Operators.* let nm = t.MemberName let lower = if nm = "Ceiling" then "ceil" else nm.ToLowerInvariant() let info = makeOtherIntrinsicValRef (fslib_MFOperators_nleref, lower, None, Some nm, [vara], ([[varaTy]], varaTy)) let tyargs = [aty] Some (info, tyargs, argExprs) - | "get_Item", [arrTy; _], Some rty, [_; _] when isArrayTy g arrTy -> + | "get_Item", [arrTy; _], Some rty, [_; _] when isArrayTy g arrTy -> Some (g.array_get_info, [rty], argExprs) - | "set_Item", [arrTy; _; ety], _, [_; _; _] when isArrayTy g arrTy -> + | "set_Item", [arrTy; _; ety], _, [_; _; _] when isArrayTy g arrTy -> Some (g.array_set_info, [ety], argExprs) - | "get_Item", [sty; _; _], _, [_; _] when isStringTy g sty -> + | "get_Item", [sty; _; _], _, [_; _] when isStringTy g sty -> Some (g.getstring_info, [], argExprs) | "op_UnaryPlus", [aty], _, [_] -> // Call Operators.id @@ -1656,10 +1641,10 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d | _ -> None - member _.EraseClassUnionDef cud = + member __.EraseClassUnionDef cud = EraseUnions.mkClassUnionDef (addMethodGeneratedAttrs, addPropertyGeneratedAttrs, addPropertyNeverAttrs, addFieldGeneratedAttrs, addFieldNeverAttrs, mkDebuggerTypeProxyAttribute) ilg cud #if DEBUG -// This global is only used during debug output +// This global is only used during debug output let mutable global_g = None : TcGlobals option #endif diff --git a/src/fsharp/TextLayoutRender.fs b/src/fsharp/TextLayoutRender.fs deleted file mode 100644 index 83a8e1d0590..00000000000 --- a/src/fsharp/TextLayoutRender.fs +++ /dev/null @@ -1,173 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.Text - -open System -open System.Collections.Immutable -open System.IO -open FSharp.Compiler.Text -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Layout -open FSharp.Core.Printf - -#nowarn "62" // This construct is for ML compatibility. - -type NavigableTaggedText(taggedText: TaggedText, range: range) = - inherit TaggedText(taggedText.Tag, taggedText.Text) - member val Range = range - -module SepL = - let dot = sepL TaggedText.dot - let star = sepL TaggedText.star - let colon = sepL TaggedText.colon - let questionMark = sepL TaggedText.questionMark - let leftParen = sepL TaggedText.leftParen - let comma = sepL TaggedText.comma - let space = sepL TaggedText.space - let leftBracket = sepL TaggedText.leftBracket - let leftAngle = sepL TaggedText.leftAngle - let lineBreak = sepL TaggedText.lineBreak - let rightParen = sepL TaggedText.rightParen - -module WordL = - let arrow = wordL TaggedText.arrow - let star = wordL TaggedText.star - let colon = wordL TaggedText.colon - let equals = wordL TaggedText.equals - let keywordNew = wordL TaggedText.keywordNew - let structUnit = wordL TaggedText.structUnit - let keywordStatic = wordL TaggedText.keywordStatic - let keywordMember = wordL TaggedText.keywordMember - let keywordVal = wordL TaggedText.keywordVal - let keywordEvent = wordL TaggedText.keywordEvent - let keywordWith = wordL TaggedText.keywordWith - let keywordSet = wordL TaggedText.keywordSet - let keywordGet = wordL TaggedText.keywordGet - let keywordTrue = wordL TaggedText.keywordTrue - let keywordFalse = wordL TaggedText.keywordFalse - let bar = wordL TaggedText.bar - let keywordStruct = wordL TaggedText.keywordStruct - let keywordInherit = wordL TaggedText.keywordInherit - let keywordEnd = wordL TaggedText.keywordEnd - let keywordNested = wordL TaggedText.keywordNested - let keywordType = wordL TaggedText.keywordType - let keywordDelegate = wordL TaggedText.keywordDelegate - let keywordOf = wordL TaggedText.keywordOf - let keywordInternal = wordL TaggedText.keywordInternal - let keywordPrivate = wordL TaggedText.keywordPrivate - let keywordAbstract = wordL TaggedText.keywordAbstract - let keywordOverride = wordL TaggedText.keywordOverride - let keywordEnum = wordL TaggedText.keywordEnum - -module LeftL = - let leftParen = leftL TaggedText.leftParen - let questionMark = leftL TaggedText.questionMark - let colon = leftL TaggedText.colon - let leftBracketAngle = leftL TaggedText.leftBracketAngle - let leftBracketBar = leftL TaggedText.leftBracketBar - let keywordTypeof = leftL TaggedText.keywordTypeof - let keywordTypedefof = leftL TaggedText.keywordTypedefof - -module RightL = - let comma = rightL TaggedText.comma - let rightParen = rightL TaggedText.rightParen - let colon = rightL TaggedText.colon - let rightBracket = rightL TaggedText.rightBracket - let rightAngle = rightL TaggedText.rightAngle - let rightBracketAngle = rightL TaggedText.rightBracketAngle - let rightBracketBar = rightL TaggedText.rightBracketBar - -type LayoutRenderer<'a, 'b> = - abstract Start : unit -> 'b - abstract AddText : 'b -> TaggedText -> 'b - abstract AddBreak : 'b -> int -> 'b - abstract AddTag : 'b -> string * (string * string) list * bool -> 'b - abstract Finish : 'b -> 'a - -type NoState = NoState -type NoResult = NoResult - -[] -module LayoutRender = - let mkNav r t = NavigableTaggedText(t, r) :> TaggedText - - let spaces n = new String(' ', n) - - let renderL (rr: LayoutRenderer<_, _>) layout = - let rec addL z pos i layout k = - match layout with - | ObjLeaf _ -> failwith "ObjLeaf should never appear here" - (* pos is tab level *) - | Leaf (_, text, _) -> - k(rr.AddText z text, i + text.Text.Length) - | Node (l, r, Broken indent) -> - addL z pos i l <| - fun (z, _i) -> - let z, i = rr.AddBreak z (pos+indent), (pos+indent) - addL z (pos+indent) i r k - | Node (l, r, _) -> - let jm = Layout.JuxtapositionMiddle (l, r) - addL z pos i l <| - fun (z, i) -> - let z, i = if jm then z, i else rr.AddText z TaggedText.space, i+1 - let pos = i - addL z pos i r k - | Attr (tag, attrs, l) -> - let z = rr.AddTag z (tag, attrs, true) - addL z pos i l <| - fun (z, i) -> - let z = rr.AddTag z (tag, attrs, false) - k(z, i) - let pos = 0 - let z, i = rr.Start(), 0 - let z, _i = addL z pos i layout id - rr.Finish z - - /// string render - let stringR = - { new LayoutRenderer with - member _.Start () = [] - member _.AddText rstrs taggedText = taggedText.Text :: rstrs - member _.AddBreak rstrs n = (spaces n) :: "\n" :: rstrs - member _.AddTag z (_, _, _) = z - member _.Finish rstrs = String.Join("", Array.ofList (List.rev rstrs)) } - - /// string render - let taggedTextListR collector = - { new LayoutRenderer with - member _.Start () = NoState - member _.AddText z text = collector text; z - member _.AddBreak rstrs n = collector TaggedText.lineBreak; collector (TaggedText.tagSpace(spaces n)); rstrs - member _.AddTag z (_, _, _) = z - member _.Finish rstrs = NoResult } - - /// channel LayoutRenderer - let channelR (chan:TextWriter) = - { new LayoutRenderer with - member r.Start () = NoState - member r.AddText z s = chan.Write s.Text; z - member r.AddBreak z n = chan.WriteLine(); chan.Write (spaces n); z - member r.AddTag z (tag, attrs, start) = z - member r.Finish z = NoResult } - - /// buffer render - let bufferR os = - { new LayoutRenderer with - member r.Start () = NoState - member r.AddText z s = bprintf os "%s" s.Text; z - member r.AddBreak z n = bprintf os "\n"; bprintf os "%s" (spaces n); z - member r.AddTag z (tag, attrs, start) = z - member r.Finish z = NoResult } - - let showL layout = renderL stringR layout - - let outL (chan:TextWriter) layout = renderL (channelR chan) layout |> ignore - - let bufferL os layout = renderL (bufferR os) layout |> ignore - - let emitL f layout = renderL (taggedTextListR f) layout |> ignore - - let toArray layout = - let output = ResizeArray() - renderL (taggedTextListR (fun tt -> output.Add(tt))) layout |> ignore - output.ToArray() diff --git a/src/fsharp/TextLayoutRender.fsi b/src/fsharp/TextLayoutRender.fsi deleted file mode 100644 index 25f67418c02..00000000000 --- a/src/fsharp/TextLayoutRender.fsi +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -/// DSL to create structured layout objects with optional breaks and render them -namespace FSharp.Compiler.Text - -open System.Collections.Immutable -open System.Text -open System.IO -open FSharp.Compiler.Text - -/// An enhancement to TaggedText in the TaggedText layouts generated by FSharp.Compiler.Service -type public NavigableTaggedText = - internal new: TaggedText * range -> NavigableTaggedText - member Range: range - inherit TaggedText - -/// Render a Layout yielding an 'a using a 'b (hidden state) type -type internal LayoutRenderer<'a,'b> = - abstract Start: unit -> 'b - abstract AddText: 'b -> TaggedText -> 'b - abstract AddBreak: 'b -> int -> 'b - abstract AddTag: 'b -> string * (string * string) list * bool -> 'b - abstract Finish: 'b -> 'a - -type internal NoState = NoState -type internal NoResult = NoResult - -module internal LayoutRender = - - val internal toArray: Layout -> TaggedText[] - - val internal emitL: (TaggedText -> unit) -> Layout -> unit - - val internal mkNav: range -> TaggedText -> TaggedText - - val internal showL: Layout -> string - - val internal outL: TextWriter -> Layout -> unit - - val internal bufferL: StringBuilder -> Layout -> unit - - /// Run a render on a Layout - val internal renderL: LayoutRenderer<'b,'a> -> Layout -> 'b - - /// Render layout to string - val internal stringR: LayoutRenderer - - /// Render layout to channel - val internal channelR: TextWriter -> LayoutRenderer - - /// Render layout to StringBuilder - val internal bufferR: StringBuilder -> LayoutRenderer - - /// Render layout to collector of TaggedText - val internal taggedTextListR: collector: (TaggedText -> unit) -> LayoutRenderer - -module internal SepL = - val dot: Layout - val star: Layout - val colon: Layout - val questionMark: Layout - val leftParen: Layout - val comma: Layout - val space: Layout - val leftBracket: Layout - val leftAngle: Layout - val lineBreak: Layout - val rightParen: Layout - -module internal WordL = - val arrow: Layout - val star: Layout - val colon: Layout - val equals: Layout - val keywordNew: Layout - val structUnit: Layout - val keywordStatic: Layout - val keywordMember: Layout - val keywordVal: Layout - val keywordEvent: Layout - val keywordWith: Layout - val keywordSet: Layout - val keywordGet: Layout - val keywordTrue: Layout - val keywordFalse: Layout - val bar: Layout - val keywordStruct: Layout - val keywordInherit: Layout - val keywordEnd: Layout - val keywordNested: Layout - val keywordType: Layout - val keywordDelegate: Layout - val keywordOf: Layout - val keywordInternal: Layout - val keywordPrivate: Layout - val keywordAbstract: Layout - val keywordOverride: Layout - val keywordEnum: Layout - -module internal LeftL = - val leftParen: Layout - val questionMark: Layout - val colon: Layout - val leftBracketAngle: Layout - val leftBracketBar: Layout - val keywordTypeof: Layout - val keywordTypedefof: Layout - -module internal RightL = - val comma: Layout - val rightParen: Layout - val colon: Layout - val rightBracket: Layout - val rightAngle: Layout - val rightBracketAngle: Layout - val rightBracketBar: Layout - diff --git a/src/fsharp/TypeRelations.fs b/src/fsharp/TypeRelations.fs index fa41844797e..487d8f96c32 100755 --- a/src/fsharp/TypeRelations.fs +++ b/src/fsharp/TypeRelations.fs @@ -4,14 +4,14 @@ /// constraint solving and method overload resolution. module internal FSharp.Compiler.TypeRelations -open Internal.Utilities.Collections -open Internal.Utilities.Library +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Infos -open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Infos /// Implements a :> b without coercion based on finalized (no type variable) types // Note: This relation is approximate and not part of the language specification. diff --git a/src/fsharp/TypeRelations.fsi b/src/fsharp/TypeRelations.fsi index 2138e0e57f8..0348c1cd478 100644 --- a/src/fsharp/TypeRelations.fsi +++ b/src/fsharp/TypeRelations.fsi @@ -5,9 +5,9 @@ module internal FSharp.Compiler.TypeRelations open FSharp.Compiler.Import -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text +open FSharp.Compiler.Range open FSharp.Compiler.TypedTree +open FSharp.Compiler.TcGlobals type CanCoerce = | CanCoerce diff --git a/src/fsharp/TypedTree.fs b/src/fsharp/TypedTree.fs index 3798883baee..b5f3bffaf6b 100644 --- a/src/fsharp/TypedTree.fs +++ b/src/fsharp/TypedTree.fs @@ -8,24 +8,25 @@ open System.Collections.Generic open System.Diagnostics open System.Reflection -open Internal.Utilities.Collections -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras -open Internal.Utilities.Rational +open Internal.Utilities open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.ILX.Types +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Extensions.ILX.Types open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.Lib +open FSharp.Compiler.PrettyNaming open FSharp.Compiler.QuotationPickler +open FSharp.Compiler.Range +open FSharp.Compiler.Rational +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Xml +open FSharp.Compiler.XmlDoc +open FSharp.Core.Printf #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping @@ -158,7 +159,7 @@ type ValFlags(flags: int64) = member x.IsCompilerGenerated = (flags &&& 0b00000000000000001000L) <> 0x0L - member x.WithIsCompilerGenerated isCompGen = + member x.SetIsCompilerGenerated isCompGen = let flags = (flags &&& ~~~0b00000000000000001000L) ||| (match isCompGen with | false -> 0b00000000000000000000L @@ -300,8 +301,8 @@ type TyparFlags(flags: int32) = TyparFlags((if isFromError then 0b00000000000000010 else 0) ||| (if isCompGen then 0b00000000000000100 else 0) ||| (match staticReq with - | TyparStaticReq.None -> 0b00000000000000000 - | TyparStaticReq.HeadType -> 0b00000000000001000) ||| + | NoStaticReq -> 0b00000000000000000 + | HeadTypeStaticReq -> 0b00000000000001000) ||| (match rigidity with | TyparRigidity.Rigid -> 0b00000000000000000 | TyparRigidity.WillBeRigid -> 0b00000000000100000 @@ -328,8 +329,8 @@ type TyparFlags(flags: int32) = /// 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 &&& 0b00000000000001000) with - | 0b00000000000000000 -> TyparStaticReq.None - | 0b00000000000001000 -> TyparStaticReq.HeadType + | 0b00000000000000000 -> NoStaticReq + | 0b00000000000001000 -> HeadTypeStaticReq | _ -> failwith "unreachable" /// Indicates if the type variable can be solved or given new constraints. The status of a type variable @@ -464,11 +465,7 @@ type EntityFlags(flags: int64) = -exception UndefinedName of - depth: int * - error: (string -> string) * - id: Ident * - suggestions: ErrorLogger.Suggestions +exception UndefinedName of int * (string -> string) * Ident * ErrorLogger.Suggestions exception InternalUndefinedItemRef of (string * string * string -> int * string) * string * string * string @@ -599,7 +596,7 @@ type Entity = /// The methods and properties of the type // // MUTABILITY; used only during creation and remapping of tycons - mutable entity_tycon_tcaug: TyconAugmentation + mutable entity_tycon_tcaug: TyconAugmentation /// This field is used when the 'tycon' is really a module definition. It holds statically nested type definitions and nested modules // @@ -1256,7 +1253,7 @@ type EntityData = Entity /// Represents the parent entity of a type definition, if any type ParentRef = - | Parent of parent: EntityRef + | Parent of EntityRef | ParentNone /// Specifies the compiled representations of type and exception definitions. Basically @@ -1273,9 +1270,9 @@ type CompiledTypeRepr = /// The ilTypeOpt is present for non-generic types. It is an ILType corresponding to the first two elements of the case. This /// prevents reallocation of the ILType each time we need to generate it. For generic types, it is None. | ILAsmNamed of - ilTypeRef: ILTypeRef * - ilBoxity: ILBoxity * - ilTypeOpt: ILType option + ILTypeRef * + ILBoxity * + ILType option /// An AbstractIL type representation that may include type variables // This case is only used for types defined in the F# library by their translation to ILASM types, e.g. @@ -1285,7 +1282,7 @@ type CompiledTypeRepr = // type byref<'T> = (# "!0&" #) // type nativeptr<'T when 'T: unmanaged> = (# "native int" #) // type ilsigptr<'T> = (# "!0*" #) - | ILAsmOpen of ilType: ILType + | ILAsmOpen of ILType [] member x.DebugText = x.ToString() @@ -1366,7 +1363,7 @@ type TyconAugmentation = [] member x.DebugText = x.ToString() - override x.ToString() = "SynTypeDefnKind.Augmentation(...)" + override x.ToString() = "TyconAugmentation(...)" /// The information for the contents of a type. Also used for a provided namespace. [] @@ -1504,7 +1501,7 @@ type TyconObjModelKind = | TTyconStruct /// Indicates the type is a delegate with the given Invoke signature - | TTyconDelegate of slotSig: SlotSig + | TTyconDelegate of SlotSig /// Indicates the type is an enumeration | TTyconEnum @@ -2023,7 +2020,7 @@ type Tycon = Entity type Accessibility = /// Indicates the construct can only be accessed from any code in the given type constructor, module or assembly. [] indicates global scope. - | TAccess of compilationPaths: CompilationPath list + | TAccess of CompilationPath list [] member x.DebugText = x.ToString() @@ -2052,7 +2049,7 @@ type TyparOptionalData = [] member x.DebugText = x.ToString() - override _.ToString() = sprintf "TyparOptionalData(...)" + override __.ToString() = sprintf "TyparOptionalData(...)" type TyparData = Typar @@ -2255,45 +2252,45 @@ type Typar = type TyparConstraint = /// A constraint that a type is a subtype of the given type - | CoercesTo of ty: TType * range: range + | CoercesTo of TType * range /// A constraint for a default value for an inference type variable should it be neither generalized nor solved - | DefaultsTo of priority: int * ty: TType * range: range + | DefaultsTo of int * TType * range /// A constraint that a type has a 'null' value - | SupportsNull of range: range + | SupportsNull of range /// A constraint that a type has a member with the given signature - | MayResolveMember of constraintInfo: TraitConstraintInfo * range: range + | MayResolveMember of TraitConstraintInfo * range /// A constraint that a type is a non-Nullable value type /// These are part of .NET's model of generic constraints, and in order to /// generate verifiable code we must attach them to F# generalized type variables as well. - | IsNonNullableStruct of range: range + | IsNonNullableStruct of range /// A constraint that a type is a reference type - | IsReferenceType of range: range + | IsReferenceType of range /// A constraint that a type is a simple choice between one of the given ground types. Only arises from 'printf' format strings. See format.fs - | SimpleChoice of tys: TTypes * range: range + | SimpleChoice of TTypes * range /// A constraint that a type has a parameterless constructor - | RequiresDefaultConstructor of range: range + | RequiresDefaultConstructor of range /// A constraint that a type is an enum with the given underlying - | IsEnum of ty: TType * range: range + | IsEnum of TType * range /// A constraint that a type implements IComparable, with special rules for some known structural container types - | SupportsComparison of range: range + | SupportsComparison of range /// A constraint that a type does not have the Equality(false) attribute, or is not a structural type with this attribute, with special rules for some known structural container types - | SupportsEquality of range: range + | SupportsEquality of range /// A constraint that a type is a delegate from the given tuple of args to the given return type - | IsDelegate of aty: TType * bty: TType * range: range + | IsDelegate of TType * TType * range /// A constraint that a type is .NET unmanaged type - | IsUnmanaged of range: range + | IsUnmanaged of range // %+A formatting is used, so this is not needed //[] @@ -2303,7 +2300,7 @@ type TyparConstraint = [] type TraitWitnessInfo = - | TraitWitnessInfo of TTypes * string * SynMemberFlags * TTypes * TType option + | TraitWitnessInfo of TTypes * string * MemberFlags * TTypes * TType option /// Get the member name associated with the member constraint. member x.MemberName = (let (TraitWitnessInfo(_, b, _, _, _)) = x in b) @@ -2322,7 +2319,7 @@ type TraitConstraintInfo = /// Indicates the signature of a member constraint. Contains a mutable solution cell /// to store the inferred solution of the constraint. - | TTrait of tys: TTypes * memberName: string * _memFlags: SynMemberFlags * argTys: TTypes * returnTy: TType option * solution: TraitConstraintSln option ref + | TTrait of tys: TTypes * memberName: string * _memFlags: MemberFlags * argTys: TTypes * returnTy: TType option * solution: TraitConstraintSln option ref /// Get the key associated with the member constraint. member x.TraitKey = (let (TTrait(a, b, c, d, e, _)) = x in TraitWitnessInfo(a, b, c, d, e)) @@ -2360,7 +2357,7 @@ type TraitConstraintSln = /// ty -- the type and its instantiation /// vref -- the method that solves the trait constraint /// minst -- the generic method instantiation - | FSMethSln of ty: TType * vref: ValRef * minst: TypeInst + | FSMethSln of TType * ValRef * TypeInst /// FSRecdFieldSln(tinst, rfref, isSetProp) /// @@ -2368,10 +2365,10 @@ type TraitConstraintSln = /// tinst -- the instantiation of the declaring type /// rfref -- the reference to the record field /// isSetProp -- indicates if this is a set of a record field - | FSRecdFieldSln of tinst: TypeInst * rfref: RecdFieldRef * isSetProp: bool + | FSRecdFieldSln of TypeInst * RecdFieldRef * bool /// Indicates a trait is solved by an F# anonymous record field. - | FSAnonRecdFieldSln of anonInfo: AnonRecdTypeInfo * tinst: TypeInst * index: int + | FSAnonRecdFieldSln of AnonRecdTypeInfo * TypeInst * int /// ILMethSln(ty, extOpt, ilMethodRef, minst) /// @@ -2380,12 +2377,12 @@ type TraitConstraintSln = /// extOpt -- information about an extension member, if any /// ilMethodRef -- the method that solves the trait constraint /// minst -- the generic method instantiation - | ILMethSln of ty: TType * extOpt: ILTypeRef option * ilMethodRef: ILMethodRef * minst: TypeInst + | ILMethSln of TType * ILTypeRef option * ILMethodRef * TypeInst /// ClosedExprSln expr /// /// Indicates a trait is solved by an erased provided expression - | ClosedExprSln of expr: Expr + | ClosedExprSln of Expr /// Indicates a trait is solved by a 'fake' instance of an operator, like '+' on integers | BuiltInSln @@ -2650,13 +2647,13 @@ type Val = /// Indicates if this is an F#-defined 'new' constructor member member x.IsConstructor = match x.MemberInfo with - | Some memberInfo when not x.IsExtensionMember && (memberInfo.MemberFlags.MemberKind = SynMemberKind.Constructor) -> true + | Some memberInfo when not x.IsExtensionMember && (memberInfo.MemberFlags.MemberKind = MemberKind.Constructor) -> true | _ -> false /// Indicates if this is a compiler-generated class constructor member member x.IsClassConstructor = match x.MemberInfo with - | Some memberInfo when not x.IsExtensionMember && (memberInfo.MemberFlags.MemberKind = SynMemberKind.ClassConstructor) -> true + | Some memberInfo when not x.IsExtensionMember && (memberInfo.MemberFlags.MemberKind = MemberKind.ClassConstructor) -> true | _ -> false /// Indicates if this value was a member declared 'override' or an implementation of an interface slot @@ -2833,10 +2830,6 @@ type Val = | slotsig :: _ -> slotsig.Name | _ -> x.val_logical_name - // Set the logical name of the value - member x.SetLogicalName(nm) = - x.val_logical_name <- nm - member x.ValCompiledName = match x.val_opt_data with | Some optData -> optData.val_compiled_name @@ -2886,12 +2879,12 @@ type Val = match x.MemberInfo with | Some membInfo -> match membInfo.MemberFlags.MemberKind with - | SynMemberKind.ClassConstructor - | SynMemberKind.Constructor - | SynMemberKind.Member -> x.LogicalName - | SynMemberKind.PropertyGetSet - | SynMemberKind.PropertySet - | SynMemberKind.PropertyGet -> x.PropertyName + | MemberKind.ClassConstructor + | MemberKind.Constructor + | MemberKind.Member -> x.LogicalName + | MemberKind.PropertyGetSet + | MemberKind.PropertySet + | MemberKind.PropertyGet -> x.PropertyName | None -> x.LogicalName /// - If this is a property then this is 'Foo' @@ -2902,8 +2895,6 @@ type Val = member x.SetValRec b = x.val_flags <- x.val_flags.WithRecursiveValInfo b - member x.SetIsCompilerGenerated(v) = x.val_flags <- x.val_flags.WithIsCompilerGenerated(v) - member x.SetIsMemberOrModuleBinding() = x.val_flags <- x.val_flags.WithIsMemberOrModuleBinding member x.SetMakesNoCriticalTailcalls() = x.val_flags <- x.val_flags.WithMakesNoCriticalTailcalls @@ -3009,7 +3000,7 @@ type ValMemberInfo = /// Gets updated with 'true' if an abstract slot is implemented in the file being typechecked. Internal only. mutable IsImplemented: bool - MemberFlags: SynMemberFlags + MemberFlags: MemberFlags } [] @@ -3049,7 +3040,7 @@ type ValPublicPath = [] member x.DebugText = x.ToString() - override _.ToString() = sprintf "ValPubPath(...)" + override __.ToString() = sprintf "ValPubPath(...)" /// Represents an index into the namespace/module structure of an assembly [] @@ -3689,13 +3680,13 @@ type ValRef = member x.IsPropertyGetterMethod = match x.MemberInfo with | None -> false - | Some (memInfo: ValMemberInfo) -> memInfo.MemberFlags.MemberKind = SynMemberKind.PropertyGet || memInfo.MemberFlags.MemberKind = SynMemberKind.PropertyGetSet + | Some (memInfo: ValMemberInfo) -> memInfo.MemberFlags.MemberKind = MemberKind.PropertyGet || memInfo.MemberFlags.MemberKind = MemberKind.PropertyGetSet /// Indicates whether this value represents a property setter. member x.IsPropertySetterMethod = match x.MemberInfo with | None -> false - | Some (memInfo: ValMemberInfo) -> memInfo.MemberFlags.MemberKind = SynMemberKind.PropertySet || memInfo.MemberFlags.MemberKind = SynMemberKind.PropertyGetSet + | Some (memInfo: ValMemberInfo) -> memInfo.MemberFlags.MemberKind = MemberKind.PropertySet || memInfo.MemberFlags.MemberKind = MemberKind.PropertyGetSet /// A unique stamp within the context of this invocation of the compiler process member x.Stamp = x.Deref.Stamp @@ -3766,7 +3757,7 @@ type ValRef = /// Indicates if this is a 'base' or 'this' value? member x.BaseOrThisInfo = x.Deref.BaseOrThisInfo - /// Indicates if this value was declared to be a type function, e.g. "let f<'a> = typeof<'a>" + // Indicates if this value was declared to be a type function, e.g. "let f<'a> = typeof<'a>" member x.IsTypeFunction = x.Deref.IsTypeFunction /// Records the "extra information" for a value compiled as a method. @@ -3877,7 +3868,7 @@ type UnionCaseRef = /// Represents a reference to a field in a record, class or struct [] type RecdFieldRef = - | RecdFieldRef of tcref: TyconRef * id: string + | RecdFieldRef of TyconRef * string /// Get a reference to the type containing this union case member x.TyconRef = let (RecdFieldRef(tcref, _)) = x in tcref @@ -3932,40 +3923,40 @@ type TType = /// TType_forall(typars, bodyTy). /// /// Indicates the type is a universal type, only used for types of values and members - | TType_forall of typars: Typars * bodyTy: TType + | TType_forall of Typars * TType /// TType_app(tyconRef, typeInstantiation). /// /// Indicates the type is built from a named type and a number of type arguments - | TType_app of tyconRef: TyconRef * typeInstantiation: TypeInst + | TType_app of TyconRef * TypeInst /// TType_anon /// /// Indicates the type is an anonymous record type whose compiled representation is located in the given assembly - | TType_anon of anonInfo: AnonRecdTypeInfo * tys: TType list + | TType_anon of AnonRecdTypeInfo * TType list /// TType_tuple(elementTypes). /// /// Indicates the type is a tuple type. elementTypes must be of length 2 or greater. - | TType_tuple of tupInfo: TupInfo * elementTypes: TTypes + | TType_tuple of TupInfo * TTypes /// TType_fun(domainType, rangeType). /// /// Indicates the type is a function type - | TType_fun of domainType: TType * rangeType: TType + | TType_fun of TType * TType /// TType_ucase(unionCaseRef, typeInstantiation) /// /// Indicates the type is a non-F#-visible type representing a "proof" that a union value belongs to a particular union case /// These types are not user-visible and will never appear as an inferred type. They are the types given to /// the temporaries arising out of pattern matching on union values. - | TType_ucase of unionCaseRef: UnionCaseRef * typeInstantiation: TypeInst + | TType_ucase of UnionCaseRef * TypeInst /// Indicates the type is a variable type, whether declared, generalized or an inference type parameter - | TType_var of typar: Typar + | 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 measure: Measure + | TType_measure of Measure /// For now, used only as a discriminant in error message. /// See https://github.com/Microsoft/visualfsharp/issues/2561 @@ -4073,22 +4064,22 @@ type TupInfo = type Measure = /// A variable unit-of-measure - | Var of typar: Typar + | Var of Typar /// A constant, leaf unit-of-measure such as 'kg' or 'm' - | Con of tyconRef: TyconRef + | Con of TyconRef /// A product of two units of measure - | Prod of measure1: Measure * measure2: Measure + | Prod of Measure*Measure /// An inverse of a units of measure expression - | Inv of measure: Measure + | Inv of Measure /// The unit of measure '1', e.g. float = float<1> | One /// Raising a measure to a rational power - | RationalPower of measure: Measure * power: Rational + | RationalPower of Measure * Rational // %+A formatting is used, so this is not needed //[] @@ -4102,10 +4093,10 @@ type Attribs = Attrib list type AttribKind = /// Indicates an attribute refers to a type defined in an imported .NET assembly - | ILAttrib of ilMethodRef: ILMethodRef + | ILAttrib of ILMethodRef /// Indicates an attribute refers to a type defined in an imported F# assembly - | FSAttrib of valRef: ValRef + | FSAttrib of ValRef // %+A formatting is used, so this is not needed //[] @@ -4113,18 +4104,11 @@ type AttribKind = override x.ToString() = sprintf "%+A" x -/// Attrib(tyconRef, kind, unnamedArgs, propVal, appliedToAGetterOrSetter, targetsOpt, range) +/// Attrib(kind, unnamedArgs, propVal, appliedToAGetterOrSetter, targetsOpt, range) [] type Attrib = - | Attrib of - tyconRef: TyconRef * - kind: AttribKind * - unnamedArgs: AttribExpr list * - propVal: AttribNamedArg list * - appliedToAGetterOrSetter: bool * - targetsOpt: AttributeTargets option * - range: range + | Attrib of TyconRef * AttribKind * AttribExpr list * AttribNamedArg list * bool * AttributeTargets option * range [] member x.DebugText = x.ToString() @@ -4140,7 +4124,7 @@ type Attrib = type AttribExpr = /// AttribExpr(source, evaluated) - | AttribExpr of source: Expr * evaluated: Expr + | AttribExpr of Expr * Expr [] member x.DebugText = x.ToString() @@ -4219,14 +4203,14 @@ type DecisionTree = /// cases -- The list of tests and their subsequent decision trees /// default -- The default decision tree, if any /// range -- (precise documentation needed) - | TDSwitch of input: Expr * cases: DecisionTreeCase list * defaultOpt: DecisionTree option * range: range + | TDSwitch of Expr * DecisionTreeCase list * DecisionTree option * range /// TDSuccess(results, targets) /// /// Indicates the decision tree has terminated with success, transferring control to the given target with the given parameters. /// results -- the expressions to be bound to the variables at the target /// target -- the target number for the continuation - | TDSuccess of results: Exprs * targetNum: int + | TDSuccess of Exprs * int /// TDBind(binding, body) /// @@ -4235,7 +4219,7 @@ type DecisionTree = /// repeated computations in decision trees. /// binding -- the value and the expression it is bound to /// body -- the rest of the decision tree - | TDBind of binding: Binding * body: DecisionTree + | TDBind of Binding * DecisionTree // %+A formatting is used, so this is not needed //[] @@ -4246,7 +4230,7 @@ type DecisionTree = /// Represents a test and a subsequent decision tree [] type DecisionTreeCase = - | TCase of discriminator: DecisionTreeTest * caseTree: DecisionTree + | TCase of DecisionTreeTest * DecisionTree /// Get the discriminator associated with the case member x.Discriminator = let (TCase(d, _)) = x in d @@ -4262,13 +4246,13 @@ type DecisionTreeCase = [] type DecisionTreeTest = /// Test if the input to a decision tree matches the given union case - | UnionCase of caseRef: UnionCaseRef * tinst: TypeInst + | UnionCase of UnionCaseRef * TypeInst /// Test if the input to a decision tree is an array of the given length - | ArrayLength of length: int * ty: TType + | ArrayLength of int * TType /// Test if the input to a decision tree is the given constant value - | Const of value: Const + | Const of Const /// Test if the input to a decision tree is null | IsNull @@ -4276,28 +4260,21 @@ type DecisionTreeTest = /// IsInst(source, target) /// /// Test if the input to a decision tree is an instance of the given type - | IsInst of source: TType * target: TType + | IsInst of TType * TType - /// Test.ActivePatternCase(activePatExpr, activePatResTys, isStructRetTy, activePatIdentity, idx, activePatInfo) + /// Test.ActivePatternCase(activePatExpr, activePatResTys, activePatIdentity, idx, activePatInfo) /// /// Run the active pattern and bind a successful result to a /// variable in the remaining tree. /// activePatExpr -- The active pattern function being called, perhaps applied to some active pattern parameters. /// activePatResTys -- The result types (case types) of the active pattern. - /// isStructRetTy -- Is the active pattern a struct return /// activePatIdentity -- The value and the types it is applied to. If there are any active pattern parameters then this is empty. /// idx -- The case number of the active pattern which the test relates to. /// activePatternInfo -- The extracted info for the active pattern. - | ActivePatternCase of - activePatExpr: Expr * - activePatResTys: TTypes * - isStructRetTy: bool * - activePatIdentity: (ValRef * TypeInst) option * - idx: int * - activePatternInfo: ActivePatternInfo + | ActivePatternCase of Expr * TTypes * (ValRef * TypeInst) option * int * ActivePatternInfo /// Used in error recovery - | Error of range: range + | Error of range // %+A formatting is used, so this is not needed //[] @@ -4321,7 +4298,7 @@ type Bindings = Binding list /// A binding of a variable to an expression, as in a `let` binding or similar [] type Binding = - | TBind of var: Val * expr: Expr * debugPoint: DebugPointAtBinding + | TBind of Val * Expr * DebugPointForBinding /// The value being bound member x.Var = (let (TBind(v, _, _)) = x in v) @@ -4341,31 +4318,28 @@ type Binding = /// integer indicates which choice in the target set is being selected by this item. [] type ActivePatternElemRef = - | APElemRef of activePatternInfo: ActivePatternInfo * activePatternVal: ValRef * caseIndex: int * isStructRetTy: bool + | APElemRef of ActivePatternInfo * ValRef * int /// Get the full information about the active pattern being referred to - member x.ActivePatternInfo = (let (APElemRef(info, _, _, _)) = x in info) + member x.ActivePatternInfo = (let (APElemRef(info, _, _)) = x in info) /// Get a reference to the value for the active pattern being referred to - member x.ActivePatternVal = (let (APElemRef(_, vref, _, _)) = x in vref) - - /// Get a reference to the value for the active pattern being referred to - member x.IsStructReturn = (let (APElemRef(_, _, _, isStructRetTy)) = x in isStructRetTy) + member x.ActivePatternVal = (let (APElemRef(_, vref, _)) = x in vref) /// Get the index of the active pattern element within the overall active pattern - member x.CaseIndex = (let (APElemRef(_, _, n, _)) = x in n) + member x.CaseIndex = (let (APElemRef(_, _, n)) = x in n) [] member x.DebugText = x.ToString() - override _.ToString() = "ActivePatternElemRef(...)" + override __.ToString() = "ActivePatternElemRef(...)" /// Records the "extra information" for a value compiled as a method (rather /// than a closure or a local), including argument names, attributes etc. [] type ValReprInfo = - /// ValReprInfo (typars, args, result) - | ValReprInfo of typars: TyparReprInfo list * args: ArgReprInfo list list * result: ArgReprInfo + /// ValReprInfo (numTypars, args, result) + | ValReprInfo of TyparReprInfo list * ArgReprInfo list list * ArgReprInfo /// Get the extra information about the arguments for the value member x.ArgInfos = (let (ValReprInfo(_, args, _)) = x in args) @@ -4404,7 +4378,7 @@ type ValReprInfo = [] member x.DebugText = x.ToString() - override _.ToString() = "ValReprInfo(...)" + override __.ToString() = "ValReprInfo(...)" /// Records the "extra information" for an argument compiled as a real /// method argument, specifically the argument name and attributes. @@ -4423,7 +4397,7 @@ type ArgReprInfo = [] member x.DebugText = x.ToString() - override _.ToString() = "ArgReprInfo(...)" + override __.ToString() = "ArgReprInfo(...)" /// Records the extra metadata stored about typars for type parameters /// compiled as "real" IL type parameters, specifically for values with @@ -4527,7 +4501,7 @@ type Expr = /// as the range for all the decision making and binding that happens during the decision tree /// execution. | Match of - debugPoint: DebugPointAtBinding * + debugPoint: DebugPointForBinding * inputRange: range * decision: DecisionTree * targets: DecisionTreeTarget array * @@ -4643,7 +4617,7 @@ type TOp = | Array /// Constant byte arrays (used for parser tables and other embedded data) - | Bytes of byte[] + | Bytes of byte[] /// Constant uint16 arrays (used for parser tables) | UInt16s of uint16[] @@ -4849,7 +4823,7 @@ type ValUseFlag = /// a .NET 2.0 constrained call. A constrained call is only used for calls where // the object argument is a value type or generic type, and the call is to a method // on System.Object, System.ValueType, System.Enum or an interface methods. - | PossibleConstrainedCall of ty: TType + | PossibleConstrainedCall of TType /// A normal use of a value | NormalValUse @@ -4867,10 +4841,10 @@ type ValUseFlag = type StaticOptimization = /// Indicates the static optimization applies when a type equality holds - | TTyconEqualsTycon of ty1: TType * ty2: TType + | TTyconEqualsTycon of TType * TType /// Indicates the static optimization applies when a type is a struct - | TTyconIsStruct of ty: TType + | TTyconIsStruct of TType /// A representation of a method in an object expression. /// @@ -4878,13 +4852,7 @@ type StaticOptimization = [] type ObjExprMethod = - | TObjExprMethod of - slotSig: SlotSig * - attribs: Attribs * - methTyparsOfOverridingMethod: Typars * - methodParams: Val list list * - methodBodyExpr: Expr * - range: range + | TObjExprMethod of SlotSig * Attribs * Typars * Val list list * Expr * range member x.Id = let (TObjExprMethod(slotsig, _, _, _, _, m)) = x in mkSynId m slotsig.Name @@ -4970,19 +4938,19 @@ type ModuleOrNamespaceExprWithSig = [] type ModuleOrNamespaceExpr = /// Indicates the module is a module with a signature - | TMAbstract of moduleOrNamespaceExprWithSig: ModuleOrNamespaceExprWithSig + | TMAbstract of ModuleOrNamespaceExprWithSig /// Indicates the module fragment is made of several module fragments in succession - | TMDefs of moduleOrNamespaceExprs: ModuleOrNamespaceExpr list + | TMDefs of ModuleOrNamespaceExpr list /// Indicates the module fragment is a 'let' definition - | TMDefLet of binding: Binding * range: range + | TMDefLet of Binding * range /// Indicates the module fragment is an evaluation of expression for side-effects - | TMDefDo of expr: Expr * range: range + | TMDefDo of Expr * range /// Indicates the module fragment is a 'rec' or 'non-rec' definition of types and modules - | TMDefRec of isRec: bool * tycons: Tycon list * moduleOrNamespaceBindings: ModuleOrNamespaceBinding list * range: range + | TMDefRec of isRec: bool * Tycon list * ModuleOrNamespaceBinding list * range // %+A formatting is used, so this is not needed //[] @@ -4994,32 +4962,26 @@ type ModuleOrNamespaceExpr = [] type ModuleOrNamespaceBinding = - | Binding of binding: Binding + | Binding of Binding | Module of /// This ModuleOrNamespace that represents the compilation of a module as a class. /// The same set of tycons etc. are bound in the ModuleOrNamespace as in the ModuleOrNamespaceExpr - moduleOrNamespace: ModuleOrNamespace * + ModuleOrNamespace * /// This is the body of the module/namespace - moduleOrNamespaceExpr: ModuleOrNamespaceExpr + ModuleOrNamespaceExpr [] member x.DebugText = x.ToString() - override _.ToString() = "ModuleOrNamespaceBinding(...)" + override __.ToString() = "ModuleOrNamespaceBinding(...)" /// Represents a complete typechecked implementation file, including its typechecked signature if any. /// -/// TImplFile (qualifiedNameOfFile, pragmas, implementationExpressionWithSignature, hasExplicitEntryPoint, isScript, anonRecdTypeInfo) +/// TImplFile (qualifiedNameOfFile, pragmas, implementationExpressionWithSignature, hasExplicitEntryPoint, isScript) [] type TypedImplFile = - | TImplFile of - qualifiedNameOfFile: QualifiedNameOfFile * - pragmas: ScopedPragma list * - implementationExpressionWithSignature: ModuleOrNamespaceExprWithSig * - hasExplicitEntryPoint: bool * - isScript: bool * - anonRecdTypeInfo: StampMap + | TImplFile of QualifiedNameOfFile * ScopedPragma list * ModuleOrNamespaceExprWithSig * bool * bool * StampMap [] member x.DebugText = x.ToString() @@ -5096,9 +5058,7 @@ type CcuData = MemberSignatureEquality: (TType -> TType -> bool) /// The table of .NET CLI type forwarders for this assembly - TypeForwarders: CcuTypeForwarderTable - - XmlDocumentationInfo: XmlDocumentationInfo option } + TypeForwarders: CcuTypeForwarderTable } [] member x.DebugText = x.ToString() @@ -5244,11 +5204,6 @@ type CcuThunk = [] member x.DebugText = x.ToString() - /// Used at the end of comppiling an assembly to get a frozen, final stable CCU - /// for the compilation which we no longer mutate. - member x.CloneWithFinalizedContents(ccuContents) = - { x with target = { x.target with Contents = ccuContents } } - override ccu.ToString() = ccu.AssemblyName /// The result of attempting to resolve an assembly name to a full ccu. @@ -5279,7 +5234,7 @@ type PickledCcuInfo = [] member x.DebugText = x.ToString() - override _.ToString() = "PickledCcuInfo(...)" + override __.ToString() = "PickledCcuInfo(...)" /// Represents a set of free local values. Computed and cached by later phases @@ -5522,7 +5477,7 @@ type Construct() = static member MakeUnionRepr ucs = TUnionRepr (Construct.MakeUnionCases ucs) /// Create a new type parameter node - static member NewTypar (kind, rigid, SynTypar(id, staticReq, isCompGen), isFromError, dynamicReq, attribs, eqDep, compDep) = + static member NewTypar (kind, rigid, Typar(id, staticReq, isCompGen), isFromError, dynamicReq, attribs, eqDep, compDep) = Typar.New { typar_id = id typar_stamp = newStamp() @@ -5536,7 +5491,7 @@ type Construct() = /// Create a new type parameter node for a declared type parameter static member NewRigidTypar nm m = - Construct.NewTypar (TyparKind.Type, TyparRigidity.Rigid, SynTypar(mkSynId m nm, TyparStaticReq.None, true), false, TyparDynamicReq.Yes, [], false, false) + Construct.NewTypar (TyparKind.Type, TyparRigidity.Rigid, Typar(mkSynId m nm, NoStaticReq, true), false, TyparDynamicReq.Yes, [], false, false) /// Create a new union case node static member NewUnionCase id tys rty attribs docOption access: UnionCase = @@ -5689,7 +5644,7 @@ type Construct() = | Some (filePath, line, column) -> // Coordinates from type provider are 1-based for lines and columns // Coordinates internally in the F# compiler are 1-based for lines and 0-based for columns - let pos = Position.mkPos line (max 0 (column - 1)) + let pos = Range.mkPos line (max 0 (column - 1)) Range.mkRange filePath pos pos |> Some #endif diff --git a/src/fsharp/TypedTreeBasics.fs b/src/fsharp/TypedTreeBasics.fs index be95f4c2419..5074b3f90e6 100644 --- a/src/fsharp/TypedTreeBasics.fs +++ b/src/fsharp/TypedTreeBasics.fs @@ -6,11 +6,12 @@ module internal FSharp.Compiler.TypedTreeBasics -open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CompilerGlobalState -open FSharp.Compiler.Text -open FSharp.Compiler.Syntax +open FSharp.Compiler.Lib +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.TypedTree #if DEBUG diff --git a/src/fsharp/TypedTreeBasics.fsi b/src/fsharp/TypedTreeBasics.fsi index fd9fe751e9e..1a79098d0a8 100644 --- a/src/fsharp/TypedTreeBasics.fsi +++ b/src/fsharp/TypedTreeBasics.fsi @@ -6,10 +6,8 @@ module internal FSharp.Compiler.TypedTreeBasics -open Internal.Utilities.Library.Extras -open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text +open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.Range open FSharp.Compiler.TypedTree val getNameOfScopeRef: sref:ILScopeRef -> string @@ -81,15 +79,15 @@ val mkRecdFieldRef: tcref:TyconRef -> f:string -> RecdFieldRef val mkUnionCaseRef: tcref:TyconRef -> c:string -> UnionCaseRef -val ERefLocal: x:NonNullSlot -> EntityRef +val ERefLocal: x:Lib.NonNullSlot -> EntityRef val ERefNonLocal: x:NonLocalEntityRef -> EntityRef -val ERefNonLocalPreResolved: x:NonNullSlot -> xref:NonLocalEntityRef -> EntityRef +val ERefNonLocalPreResolved: x:Lib.NonNullSlot -> xref:NonLocalEntityRef -> EntityRef -val ( |ERefLocal|ERefNonLocal| ): x:EntityRef -> Choice,NonLocalEntityRef> +val ( |ERefLocal|ERefNonLocal| ): x:EntityRef -> Choice,NonLocalEntityRef> -val mkLocalTyconRef: x:NonNullSlot -> EntityRef +val mkLocalTyconRef: x:Lib.NonNullSlot -> EntityRef val mkNonLocalEntityRef: ccu:CcuThunk -> mp:string [] -> NonLocalEntityRef @@ -97,24 +95,24 @@ val mkNestedNonLocalEntityRef: nleref:NonLocalEntityRef -> id:string -> NonLocal val mkNonLocalTyconRef: nleref:NonLocalEntityRef -> id:string -> EntityRef -val mkNonLocalTyconRefPreResolved: x:NonNullSlot -> nleref:NonLocalEntityRef -> id:string -> EntityRef +val mkNonLocalTyconRefPreResolved: x:Lib.NonNullSlot -> nleref:NonLocalEntityRef -> id:string -> EntityRef type EntityRef with member NestedTyconRef: x:Entity -> EntityRef - member RecdFieldRefInNestedTycon: tycon:Entity -> id:Ident -> RecdFieldRef + member RecdFieldRefInNestedTycon: tycon:Entity -> id:SyntaxTree.Ident -> RecdFieldRef /// Make a reference to a union case for type in a module or namespace -val mkModuleUnionCaseRef: modref:ModuleOrNamespaceRef -> tycon:Entity -> uc:UnionCase -> UnionCaseRef val VRefLocal: x:NonNullSlot -> ValRef +val mkModuleUnionCaseRef: modref:ModuleOrNamespaceRef -> tycon:Entity -> uc:UnionCase -> UnionCaseRef val VRefLocal: x:Lib.NonNullSlot -> ValRef val VRefNonLocal: x:NonLocalValOrMemberRef -> ValRef -val VRefNonLocalPreResolved: x:NonNullSlot -> xref:NonLocalValOrMemberRef -> ValRef +val VRefNonLocalPreResolved: x:Lib.NonNullSlot -> xref:NonLocalValOrMemberRef -> ValRef -val ( |VRefLocal|VRefNonLocal| ): x:ValRef -> Choice,NonLocalValOrMemberRef> +val ( |VRefLocal|VRefNonLocal| ): x:ValRef -> Choice,NonLocalValOrMemberRef> val mkNonLocalValRef: mp:NonLocalEntityRef -> id:ValLinkageFullKey -> ValRef -val mkNonLocalValRefPreResolved: x:NonNullSlot -> mp:NonLocalEntityRef -> id:ValLinkageFullKey -> ValRef +val mkNonLocalValRefPreResolved: x:Lib.NonNullSlot -> mp:NonLocalEntityRef -> id:ValLinkageFullKey -> ValRef val ccuOfValRef: vref:ValRef -> CcuThunk option @@ -224,7 +222,7 @@ val taccessInternal: Accessibility val combineAccess: Accessibility -> Accessibility -> Accessibility -exception Duplicate of string * string * range +exception Duplicate of string * string * Range.range -exception NameClash of string * string * string * range * string * string * range +exception NameClash of string * string * string * Range.range * string * string * Range.range diff --git a/src/fsharp/TypedTreeOps.fs b/src/fsharp/TypedTreeOps.fs index 8ddaa5e7e17..b059698bebc 100644 --- a/src/fsharp/TypedTreeOps.fs +++ b/src/fsharp/TypedTreeOps.fs @@ -6,30 +6,29 @@ module internal FSharp.Compiler.TypedTreeOps open System.Collections.Generic open System.Collections.Immutable open Internal.Utilities -open Internal.Utilities.Collections -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras -open Internal.Utilities.Rational +open FSharp.Compiler open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.ILX open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Diagnostics +open FSharp.Compiler.AbstractIL.Extensions.ILX +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.Layout +open FSharp.Compiler.Layout.TaggedTextOps +open FSharp.Compiler.Lib +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Range +open FSharp.Compiler.Rational +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Layout -open FSharp.Compiler.Text.LayoutRender -open FSharp.Compiler.Text.TaggedText -open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.XmlDoc #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping #endif @@ -164,7 +163,11 @@ let remapTyconRef (tcmap: TyconRefMap<_>) tcref = let remapUnionCaseRef tcmap (UnionCaseRef(tcref, nm)) = UnionCaseRef(remapTyconRef tcmap tcref, nm) let remapRecdFieldRef tcmap (RecdFieldRef(tcref, nm)) = RecdFieldRef(remapTyconRef tcmap tcref, nm) -let mkTyparInst (typars: Typars) tyargs = +let mkTyparInst (typars: Typars) tyargs = +#if CHECKED + if List.length typars <> List.length tyargs then + failwith ("mkTyparInst: invalid type" + (sprintf " %d <> %d" (List.length typars) (List.length tyargs))) +#endif (List.zip typars tyargs: TyparInst) let generalizeTypar tp = mkTyparTy tp @@ -1092,18 +1095,18 @@ let rec getErasedTypes g ty = // Standard orderings, e.g. for order set/map keys //--------------------------------------------------------------------------- -let valOrder = { new IComparer with member _.Compare(v1, v2) = compare v1.Stamp v2.Stamp } -let tyconOrder = { new IComparer with member _.Compare(tc1, tc2) = compare tc1.Stamp tc2.Stamp } +let valOrder = { new IComparer with member __.Compare(v1, v2) = compare v1.Stamp v2.Stamp } +let tyconOrder = { new IComparer with member __.Compare(tc1, tc2) = compare tc1.Stamp tc2.Stamp } let recdFieldRefOrder = { new IComparer with - member _.Compare(RecdFieldRef(tcref1, nm1), RecdFieldRef(tcref2, nm2)) = + member __.Compare(RecdFieldRef(tcref1, nm1), RecdFieldRef(tcref2, nm2)) = let c = tyconOrder.Compare (tcref1.Deref, tcref2.Deref) if c <> 0 then c else compare nm1 nm2 } let unionCaseRefOrder = { new IComparer with - member _.Compare(UnionCaseRef(tcref1, nm1), UnionCaseRef(tcref2, nm2)) = + member __.Compare(UnionCaseRef(tcref1, nm1), UnionCaseRef(tcref2, nm2)) = let c = tyconOrder.Compare (tcref1.Deref, tcref2.Deref) if c <> 0 then c else compare nm1 nm2 } @@ -1196,7 +1199,7 @@ type Expr with let primMkMatch(spBind, exprm, tree, targets, matchm, ty) = Expr.Match (spBind, exprm, tree, targets, matchm, ty) -type MatchBuilder(spBind, inpRange: range) = +type MatchBuilder(spBind, inpRange: Range.range) = let targets = new ResizeArray<_>(10) member x.AddTarget tg = @@ -1277,13 +1280,13 @@ let mkLetsFromBindings m binds body = List.foldBack (mkLetBind m) binds body let mkLet seqPtOpt m v x body = mkLetBind m (mkBind seqPtOpt v x) body /// Make sticky bindings that are compiler generated (though the variables may not be - e.g. they may be lambda arguments in a beta reduction) -let mkCompGenBind v e = TBind(v, e, DebugPointAtBinding.NoneAtSticky) +let mkCompGenBind v e = TBind(v, e, NoDebugPointAtStickyBinding) let mkCompGenBinds (vs: Val list) (es: Expr list) = List.map2 mkCompGenBind vs es let mkCompGenLet m v x body = mkLetBind m (mkCompGenBind v x) body let mkCompGenLets m vs xs body = mkLetsBind m (mkCompGenBinds vs xs) body let mkCompGenLetsFromBindings m vs xs body = mkLetsFromBindings m (mkCompGenBinds vs xs) body -let mkInvisibleBind v e = TBind(v, e, DebugPointAtBinding.NoneAtInvisible) +let mkInvisibleBind v e = TBind(v, e, NoDebugPointAtInvisibleBinding) let mkInvisibleBinds (vs: Val list) (es: Expr list) = List.map2 mkInvisibleBind vs es let mkInvisibleLet m v x body = mkLetBind m (mkInvisibleBind v x) body let mkInvisibleLets m vs xs body = mkLetsBind m (mkInvisibleBinds vs xs) body @@ -1342,8 +1345,8 @@ let isBeingGeneralized tp typeScheme = // Build conditional expressions... //------------------------------------------------------------------------- -let mkLazyAnd (g: TcGlobals) m e1 e2 = mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m g.bool_ty e1 e2 (Expr.Const (Const.Bool false, m, g.bool_ty)) -let mkLazyOr (g: TcGlobals) m e1 e2 = mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m g.bool_ty e1 (Expr.Const (Const.Bool true, m, g.bool_ty)) e2 +let mkLazyAnd (g: TcGlobals) m e1 e2 = mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m g.bool_ty e1 e2 (Expr.Const (Const.Bool false, m, g.bool_ty)) +let mkLazyOr (g: TcGlobals) m e1 e2 = mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m g.bool_ty e1 (Expr.Const (Const.Bool true, m, g.bool_ty)) e2 let mkCoerceExpr(e, to_ty, m, from_ty) = Expr.Op (TOp.Coerce, [to_ty;from_ty], [e], m) @@ -1608,6 +1611,9 @@ let GetTopTauTypeInFSharpForm g (curriedArgInfos: ArgReprInfo list list) tau m = let destTopForallTy g (ValReprInfo (ntps, _, _)) ty = let tps, tau = (if isNil ntps then [], ty else tryDestForallTy g ty) +#if CHECKED + if tps.Length <> kinds.Length then failwith (sprintf "destTopForallTy: internal error, #tps = %d, #ntps = %d" (List.length tps) ntps) +#endif // tps may be have been equated to other tps in equi-recursive type inference. Normalize them here let tps = NormalizeDeclaredTyparsForEquiRecursiveInference g tps tps, tau @@ -2278,7 +2284,7 @@ let valsOfBinds (binds: Bindings) = binds |> List.map (fun b -> b.Var) // Pull apart the type for an F# value that represents an object model method. Do not strip off a 'unit' argument. // Review: Should GetMemberTypeInFSharpForm have any other direct callers? -let GetMemberTypeInFSharpForm g (memberFlags: SynMemberFlags) arities ty m = +let GetMemberTypeInFSharpForm g memberFlags arities ty m = let tps, argInfos, rty, retInfo = GetTopValTypeInFSharpForm g arities ty m let argInfos = @@ -2433,14 +2439,14 @@ let GetFSharpViewOfReturnType (g: TcGlobals) retTy = let ReturnTypeOfPropertyVal g (v: Val) = let membInfo, topValInfo = checkMemberVal v.MemberInfo v.ValReprInfo v.Range match membInfo.MemberFlags.MemberKind with - | SynMemberKind.PropertySet -> + | MemberKind.PropertySet -> let numEnclosingTypars = CountEnclosingTyparsOfActualParentOfVal v let _, _, arginfos, _, _ = GetMemberTypeInMemberForm g membInfo.MemberFlags topValInfo numEnclosingTypars v.Type v.Range if not arginfos.IsEmpty && not arginfos.Head.IsEmpty then arginfos.Head |> List.last |> fst else error(Error(FSComp.SR.tastValueDoesNotHaveSetterType(), v.Range)) - | SynMemberKind.PropertyGet -> + | MemberKind.PropertyGet -> let numEnclosingTypars = CountEnclosingTyparsOfActualParentOfVal v let _, _, _, rty, _ = GetMemberTypeInMemberForm g membInfo.MemberFlags topValInfo numEnclosingTypars v.Type v.Range GetFSharpViewOfReturnType g rty @@ -2452,9 +2458,9 @@ let ReturnTypeOfPropertyVal g (v: Val) = let ArgInfosOfPropertyVal g (v: Val) = let membInfo, topValInfo = checkMemberVal v.MemberInfo v.ValReprInfo v.Range match membInfo.MemberFlags.MemberKind with - | SynMemberKind.PropertyGet -> + | MemberKind.PropertyGet -> ArgInfosOfMemberVal g v |> List.concat - | SynMemberKind.PropertySet -> + | MemberKind.PropertySet -> let numEnclosingTypars = CountEnclosingTyparsOfActualParentOfVal v let _, _, arginfos, _, _ = GetMemberTypeInMemberForm g membInfo.MemberFlags topValInfo numEnclosingTypars v.Type v.Range if not arginfos.IsEmpty && not arginfos.Head.IsEmpty then @@ -2485,8 +2491,8 @@ let isTTyparCoercesToType = function TyparConstraint.CoercesTo _ -> true | _ -> let prefixOfStaticReq s = match s with - | TyparStaticReq.None -> "'" - | TyparStaticReq.HeadType -> " ^" + | NoStaticReq -> "'" + | HeadTypeStaticReq -> " ^" let prefixOfRigidTypar (typar: Typar) = if (typar.Rigidity <> TyparRigidity.Rigid) then "_" else "" @@ -2499,7 +2505,7 @@ type TyparConstraintsWithTypars = (Typar * TyparConstraint) list module PrettyTypes = let newPrettyTypar (tp: Typar) nm = - Construct.NewTypar (tp.Kind, tp.Rigidity, SynTypar(ident(nm, tp.Range), tp.StaticReq, false), false, TyparDynamicReq.Yes, [], false, false) + Construct.NewTypar (tp.Kind, tp.Rigidity, Typar(ident(nm, tp.Range), tp.StaticReq, false), false, TyparDynamicReq.Yes, [], false, false) let NewPrettyTypars renaming tps names = let niceTypars = List.map2 newPrettyTypar tps names @@ -2758,13 +2764,11 @@ type DisplayEnv = showConstraintTyparAnnotations: bool abbreviateAdditionalConstraints: bool showTyparDefaultConstraints: bool - showDocumentation: bool shrinkOverloads: bool - printVerboseSignatures: bool - escapeKeywordNames: bool + printVerboseSignatures : bool g: TcGlobals contextAccessibility: Accessibility - generatedValueLayout : (Val -> Layout option) + generatedValueLayout : (Val -> layout option) genericParameterStyle: GenericParameterStyle } member x.SetOpenPaths paths = @@ -2784,20 +2788,18 @@ type DisplayEnv = showHiddenMembers = false showTyparBinding = false showImperativeTyparAnnotations = false - suppressInlineKeyword = true + suppressInlineKeyword = false suppressMutableKeyword = false showMemberContainers = false showAttributes = false showOverrides = true showConstraintTyparAnnotations = true - showDocumentation = false abbreviateAdditionalConstraints = false showTyparDefaultConstraints = false shortConstraints = false useColonForReturnType = false shrinkOverloads = true printVerboseSignatures = false - escapeKeywordNames = false g = tcGlobals contextAccessibility = taccessPublic generatedValueLayout = (fun _ -> None) @@ -2816,24 +2818,6 @@ type DisplayEnv = member denv.UseGenericParameterStyle style = { denv with genericParameterStyle = style } - static member InitialForSigFileGeneration g = - let denv = - { DisplayEnv.Empty g with - showImperativeTyparAnnotations = true - showHiddenMembers = true - showObsoleteMembers = true - showAttributes = true - suppressInlineKeyword = false - showDocumentation = true - shrinkOverloads = false - escapeKeywordNames = true } - denv.SetOpenPaths - [ FSharpLib.RootPath - FSharpLib.CorePath - FSharpLib.CollectionsPath - FSharpLib.ControlPath - (IL.splitNamespace FSharpLib.ExtraTopLevelOperatorsName) ] - let (+.+) s1 s2 = if s1 = "" then s2 else s1+"."+s2 let layoutOfPath p = @@ -2947,12 +2931,12 @@ let fullDisplayTextOfValRefAsLayout (vref: ValRef) = else tagUnknownEntity vref.DisplayName | Some memberInfo -> match memberInfo.MemberFlags.MemberKind with - | SynMemberKind.PropertyGet - | SynMemberKind.PropertySet - | SynMemberKind.PropertyGetSet -> tagProperty vref.DisplayName - | SynMemberKind.ClassConstructor - | SynMemberKind.Constructor -> tagMethod vref.DisplayName - | SynMemberKind.Member -> tagMember vref.DisplayName + | MemberKind.PropertyGet + | MemberKind.PropertySet + | MemberKind.PropertyGetSet -> tagProperty vref.DisplayName + | MemberKind.ClassConstructor + | MemberKind.Constructor -> tagMethod vref.DisplayName + | MemberKind.Member -> tagMember vref.DisplayName match fullNameOfParentOfValRefAsLayout vref with | ValueNone -> wordL n | ValueSome pathText -> @@ -3026,11 +3010,6 @@ let superOfTycon (g: TcGlobals) (tycon: Tycon) = | None -> g.obj_ty | Some ty -> ty -/// walk a TyconRef's inheritance tree, yielding any parent types as an array -let supersOfTyconRef (tcref: TyconRef) = - Array.unfold (fun (tcref: TyconRef) -> match tcref.TypeContents.tcaug_super with Some (TType_app(sup, _)) -> Some(sup, sup) | _ -> None) tcref - - //---------------------------------------------------------------------------- // Detect attributes //---------------------------------------------------------------------------- @@ -3051,8 +3030,8 @@ let isILAttrib (tref: ILTypeRef) (attr: ILAttribute) = let HasILAttribute tref (attrs: ILAttributes) = attrs.AsArray |> Array.exists (isILAttrib tref) -let TryDecodeILAttribute tref (attrs: ILAttributes) = - attrs.AsArray |> Array.tryPick (fun x -> if isILAttrib tref x then Some(decodeILAttribData x) else None) +let TryDecodeILAttribute (g: TcGlobals) tref (attrs: ILAttributes) = + attrs.AsArray |> Array.tryPick (fun x -> if isILAttrib tref x then Some(decodeILAttribData g.ilg x) else None) // F# view of attributes (these get converted to AbsIL attributes in ilxgen) let IsMatchingFSharpAttribute g (AttribInfo(_, tcref)) (Attrib(tcref2, _, _, _, _, _, _)) = tyconRefEq g tcref tcref2 @@ -3114,7 +3093,7 @@ let TryBindTyconRefAttribute g (m: range) (AttribInfo (atref, _) as args) (tcref | None -> None #endif | ILTypeMetadata (TILObjectReprData(_, _, tdef)) -> - match TryDecodeILAttribute atref tdef.CustomAttrs with + match TryDecodeILAttribute g atref tdef.CustomAttrs with | Some attr -> f1 attr | _ -> None | FSharpOrArrayOrByrefOrTupleOrExnTypeMetadata -> @@ -3137,16 +3116,12 @@ let TryFindTyconRefBoolAttribute g m attribSpec tcref = | ([ Some ((:? bool as v) : obj) ], _) -> Some v | _ -> None) -/// Try to find the resolved attributeusage for an type by walking its inheritance tree and picking the correct attribute usage value let TryFindAttributeUsageAttribute g m tcref = - [| yield tcref - yield! supersOfTyconRef tcref |] - |> Array.tryPick (fun tcref -> - TryBindTyconRefAttribute g m g.attrib_AttributeUsageAttribute tcref + TryBindTyconRefAttribute g m g.attrib_AttributeUsageAttribute tcref (fun (_, named) -> named |> List.tryPick (function ("AllowMultiple", _, _, ILAttribElem.Bool res) -> Some res | _ -> None)) (fun (Attrib(_, _, _, named, _, _, _)) -> named |> List.tryPick (function AttribNamedArg("AllowMultiple", _, _, AttribBoolArg res ) -> Some res | _ -> None)) (fun (_, named) -> named |> List.tryPick (function ("AllowMultiple", Some ((:? bool as res) : obj)) -> Some res | _ -> None)) - ) + /// Try to find a specific attribute on a type definition, where the attribute accepts a string argument. /// @@ -3273,8 +3248,6 @@ let mkPrintfFormatTy (g: TcGlobals) aty bty cty dty ety = TType_app(g.format_tcr let mkOptionTy (g: TcGlobals) ty = TType_app (g.option_tcr_nice, [ty]) -let mkValueOptionTy (g: TcGlobals) ty = TType_app (g.valueoption_tcr_nice, [ty]) - let mkNullableTy (g: TcGlobals) ty = TType_app (g.system_Nullable_tcref, [ty]) let mkListTy (g: TcGlobals) ty = TType_app (g.list_tcr_nice, [ty]) @@ -3342,9 +3315,7 @@ let mkSome g ty arg m = mkUnionCaseExpr(mkSomeCase g, [ty], [arg], m) let mkNone g ty m = mkUnionCaseExpr(mkNoneCase g, [ty], [], m) -let mkValueSomeCase (g: TcGlobals) = mkUnionCaseRef g.valueoption_tcr_canon "ValueSome" - -let mkAnySomeCase g isStruct = (if isStruct then mkValueSomeCase g else mkSomeCase g) +let mkOptionGetValueUnprovenViaAddr g expr ty m = mkUnionCaseFieldGetUnprovenViaExprAddr (expr, mkSomeCase g, [ty], 0, m) type ValRef with member vref.IsDispatchSlot = @@ -3453,11 +3424,11 @@ module DebugPrint = let squareAngleL x = LeftL.leftBracketAngle ^^ x ^^ RightL.rightBracketAngle - let angleL x = sepL TaggedText.leftAngle ^^ x ^^ rightL TaggedText.rightAngle + let angleL x = sepL Literals.leftAngle ^^ x ^^ rightL Literals.rightAngle - let braceL x = leftL TaggedText.leftBrace ^^ x ^^ rightL TaggedText.rightBrace + let braceL x = leftL Literals.leftBrace ^^ x ^^ rightL Literals.rightBrace - let braceBarL x = leftL TaggedText.leftBraceBar ^^ x ^^ rightL TaggedText.rightBraceBar + let braceBarL x = leftL Literals.leftBraceBar ^^ x ^^ rightL Literals.rightBraceBar let boolL = function true -> WordL.keywordTrue | false -> WordL.keywordFalse @@ -3480,9 +3451,9 @@ module DebugPrint = let angleBracketListL l = angleBracketL (sepListL (sepL (tagText ",")) l) - let layoutMemberFlags (memFlags: SynMemberFlags) = + let layoutMemberFlags memFlags = let stat = - if memFlags.IsInstance || (memFlags.MemberKind = SynMemberKind.Constructor) then emptyL + if memFlags.IsInstance || (memFlags.MemberKind = MemberKind.Constructor) then emptyL else wordL (tagText "static") let stat = if memFlags.IsDispatchSlot then stat ++ wordL (tagText "abstract") @@ -4105,7 +4076,7 @@ module DebugPrint = | (DecisionTreeTest.Const c) -> wordL(tagText "is") ^^ constL c | (DecisionTreeTest.IsNull ) -> wordL(tagText "isnull") | (DecisionTreeTest.IsInst (_, ty)) -> wordL(tagText "isinst") ^^ typeL ty - | (DecisionTreeTest.ActivePatternCase (exp, _, _, _, _, _)) -> wordL(tagText "query") ^^ exprL g exp + | (DecisionTreeTest.ActivePatternCase (exp, _, _, _, _)) -> wordL(tagText "query") ^^ exprL g exp | (DecisionTreeTest.Error _) -> wordL (tagText "error recovery") and targetL g i (TTarget (argvs, body, _)) = @@ -4122,9 +4093,9 @@ module DebugPrint = and iimplL g (ty, tmeths) = wordL(tagText "impl") ^^ aboveListL (typeL ty :: List.map (tmethodL g) tmeths) - let showType x = LayoutRender.showL (typeL x) + let showType x = Layout.showL (typeL x) - let showExpr g x = LayoutRender.showL (exprL g x) + let showExpr g x = Layout.showL (exprL g x) let traitL x = auxTraitL SimplifyTypes.typeSimplificationInfo0 x @@ -4582,7 +4553,7 @@ and accFreeInTest (opts: FreeVarOptions) discrim acc = | DecisionTreeTest.Const _ | DecisionTreeTest.IsNull -> acc | DecisionTreeTest.IsInst (srcty, tgty) -> accFreeVarsInTy opts srcty (accFreeVarsInTy opts tgty acc) - | DecisionTreeTest.ActivePatternCase (exp, tys, _, activePatIdentity, _, _) -> + | DecisionTreeTest.ActivePatternCase (exp, tys, activePatIdentity, _, _) -> accFreeInExpr opts exp (accFreeVarsInTys opts tys (Option.foldBack (fun (vref, tinst) acc -> accFreeValRef opts vref (accFreeVarsInTys opts tinst acc)) activePatIdentity acc)) @@ -4953,7 +4924,7 @@ let InferArityOfExpr g allowTypeDirectedDetupling ty partialArgAttribsL retAttri assert (List.length vsl = List.length dtys) let curriedArgInfos = - (vsl, dtys) ||> List.mapi2 (fun i vs ty -> + (List.zip vsl dtys) |> List.mapi (fun i (vs, ty) -> let partialAttribs = if i < partialArgAttribsL.Length then partialArgAttribsL.[i] else [] let tys = match allowTypeDirectedDetupling with @@ -5030,7 +5001,7 @@ let decideStaticOptimizationConstraint g c haveWitnesses = match c with // When witnesses are available in generic code during codegen, "when ^T : ^T" resolves StaticOptimizationAnswer.Yes // This doesn't apply to "when 'T : 'T" use for "FastGenericEqualityComparer" and others. - | TTyconEqualsTycon (a, b) when haveWitnesses && typeEquiv g a b && (match tryDestTyparTy g a with ValueSome tp -> tp.StaticReq = TyparStaticReq.HeadType | _ -> false) -> + | TTyconEqualsTycon (a, b) when haveWitnesses && typeEquiv g a b && (match tryDestTyparTy g a with ValueSome tp -> tp.StaticReq = TyparStaticReq.HeadTypeStaticReq | _ -> false) -> StaticOptimizationAnswer.Yes | TTyconEqualsTycon (a, b) -> // Both types must be nominal for a definite result @@ -5100,7 +5071,7 @@ let markAsCompGen compgen d = match compgen with | CloneAllAndMarkExprValsAsCompilerGenerated -> true | _ -> false - { d with val_flags= d.val_flags.WithIsCompilerGenerated(d.val_flags.IsCompilerGenerated || compgen) } + { d with val_flags= d.val_flags.SetIsCompilerGenerated(d.val_flags.IsCompilerGenerated || compgen) } let bindLocalVal (v: Val) (v': Val) tmenv = { tmenv with valRemap=tmenv.valRemap.Add v (mkLocalValRef v') } @@ -5728,7 +5699,7 @@ let rec remarkExpr m x = | Expr.Match (_, _, pt, targets, _, ty) -> let targetsR = targets |> Array.map (fun (TTarget(vs, e, _)) -> TTarget(vs, remarkExpr m e, DebugPointForTarget.No)) - primMkMatch (DebugPointAtBinding.NoneAtInvisible, m, remarkDecisionTree m pt, targetsR, m, ty) + primMkMatch (NoDebugPointAtInvisibleBinding, m, remarkDecisionTree m pt, targetsR, m, ty) | Expr.Val (x, valUseFlags, _) -> Expr.Val (x, valUseFlags, m) @@ -5793,7 +5764,7 @@ and remarkBinds m binds = List.map (remarkBind m) binds // This very deliberately drops the sequence points since this is used when adjusting the marks for inlined expressions and remarkBind m (TBind(v, repr, _)) = - TBind(v, remarkExpr m repr, DebugPointAtBinding.NoneAtSticky) + TBind(v, remarkExpr m repr, NoDebugPointAtStickyBinding) //-------------------------------------------------------------------------- // Mutability analysis @@ -6525,8 +6496,8 @@ let rec IterateRecursiveFixups g (selfv: Val option) rvs ((access: Expr), set) e let JoinTyparStaticReq r1 r2 = match r1, r2 with - | TyparStaticReq.None, r | r, TyparStaticReq.None -> r - | TyparStaticReq.HeadType, r | r, TyparStaticReq.HeadType -> r + | NoStaticReq, r | r, NoStaticReq -> r + | HeadTypeStaticReq, r | r, HeadTypeStaticReq -> r //------------------------------------------------------------------------- // ExprFolder - fold steps @@ -7343,7 +7314,7 @@ let tref_CompilationSourceNameAttr (g: TcGlobals) = mkILTyRef (g.fslibCcu.ILScop let tref_SourceConstructFlags (g: TcGlobals) = mkILTyRef (g.fslibCcu.ILScopeRef, tnameSourceConstructFlags) let mkCompilationMappingAttrPrim (g: TcGlobals) k nums = - mkILCustomAttribute (tref_CompilationMappingAttr g, + mkILCustomAttribute g.ilg (tref_CompilationMappingAttr g, ((mkILNonGenericValueTy (tref_SourceConstructFlags g)) :: (nums |> List.map (fun _ -> g.ilg.typ_Int32))), ((k :: nums) |> List.map (fun n -> ILAttribElem.Int32 n)), []) @@ -7355,17 +7326,17 @@ let mkCompilationMappingAttrWithSeqNum g kind seqNum = mkCompilationMappingAttrP let mkCompilationMappingAttrWithVariantNumAndSeqNum g kind varNum seqNum = mkCompilationMappingAttrPrim g kind [varNum;seqNum] let mkCompilationArgumentCountsAttr (g: TcGlobals) nums = - mkILCustomAttribute (tref_CompilationArgumentCountsAttr g, [ mkILArr1DTy g.ilg.typ_Int32 ], + mkILCustomAttribute g.ilg (tref_CompilationArgumentCountsAttr g, [ mkILArr1DTy g.ilg.typ_Int32 ], [ILAttribElem.Array (g.ilg.typ_Int32, List.map (fun n -> ILAttribElem.Int32 n) nums)], []) let mkCompilationSourceNameAttr (g: TcGlobals) n = - mkILCustomAttribute (tref_CompilationSourceNameAttr g, [ g.ilg.typ_String ], + mkILCustomAttribute g.ilg (tref_CompilationSourceNameAttr g, [ g.ilg.typ_String ], [ILAttribElem.String(Some n)], []) let mkCompilationMappingAttrForQuotationResource (g: TcGlobals) (nm, tys: ILTypeRef list) = - mkILCustomAttribute (tref_CompilationMappingAttr g, + mkILCustomAttribute g.ilg (tref_CompilationMappingAttr g, [ g.ilg.typ_String; mkILArr1DTy g.ilg.typ_Type ], [ ILAttribElem.String (Some nm); ILAttribElem.Array (g.ilg.typ_Type, [ for ty in tys -> ILAttribElem.TypeRef (Some ty) ]) ], []) @@ -7379,9 +7350,9 @@ let mkCompilationMappingAttrForQuotationResource (g: TcGlobals) (nm, tys: ILType let isTypeProviderAssemblyAttr (cattr: ILAttribute) = cattr.Method.DeclaringType.BasicQualifiedName = typeof.FullName -let TryDecodeTypeProviderAssemblyAttr (cattr: ILAttribute) = +let TryDecodeTypeProviderAssemblyAttr ilg (cattr: ILAttribute) = if isTypeProviderAssemblyAttr cattr then - let parms, _args = decodeILAttribData cattr + let parms, _args = decodeILAttribData ilg cattr match parms with // The first parameter to the attribute is the name of the assembly with the compiler extensions. | (ILAttribElem.String (Some assemblyName)) :: _ -> Some assemblyName | (ILAttribElem.String None) :: _ -> Some null @@ -7400,11 +7371,11 @@ let tname_SignatureDataVersionAttr = FSharpLib.Core + ".FSharpInterfaceDataVersi let tnames_SignatureDataVersionAttr = splitILTypeName tname_SignatureDataVersionAttr -let tref_SignatureDataVersionAttr fsharpCoreAssemblyScopeRef = mkILTyRef(fsharpCoreAssemblyScopeRef, tname_SignatureDataVersionAttr) +let tref_SignatureDataVersionAttr () = mkILTyRef(IlxSettings.ilxFsharpCoreLibScopeRef (), tname_SignatureDataVersionAttr) let mkSignatureDataVersionAttr (g: TcGlobals) (version: ILVersionInfo) = - mkILCustomAttribute - (tref_SignatureDataVersionAttr g.ilg.fsharpCoreAssemblyScopeRef, + mkILCustomAttribute g.ilg + (tref_SignatureDataVersionAttr(), [g.ilg.typ_Int32;g.ilg.typ_Int32;g.ilg.typ_Int32], [ILAttribElem.Int32 (int32 version.Major) ILAttribElem.Int32 (int32 version.Minor) @@ -7414,9 +7385,9 @@ let tname_AutoOpenAttr = FSharpLib.Core + ".AutoOpenAttribute" let IsSignatureDataVersionAttr cattr = isILAttribByName ([], tname_SignatureDataVersionAttr) cattr -let TryFindAutoOpenAttr cattr = +let TryFindAutoOpenAttr (ilg: IL.ILGlobals) cattr = if isILAttribByName ([], tname_AutoOpenAttr) cattr then - match decodeILAttribData cattr with + match decodeILAttribData ilg cattr with | [ILAttribElem.String s], _ -> s | [], _ -> None | _ -> @@ -7427,9 +7398,9 @@ let TryFindAutoOpenAttr cattr = let tname_InternalsVisibleToAttr = "System.Runtime.CompilerServices.InternalsVisibleToAttribute" -let TryFindInternalsVisibleToAttr cattr = +let TryFindInternalsVisibleToAttr ilg cattr = if isILAttribByName ([], tname_InternalsVisibleToAttr) cattr then - match decodeILAttribData cattr with + match decodeILAttribData ilg cattr with | [ILAttribElem.String s], _ -> s | [], _ -> None | _ -> @@ -7438,9 +7409,9 @@ let TryFindInternalsVisibleToAttr cattr = else None -let IsMatchingSignatureDataVersionAttr (version: ILVersionInfo) cattr = +let IsMatchingSignatureDataVersionAttr ilg (version: ILVersionInfo) cattr = IsSignatureDataVersionAttr cattr && - match decodeILAttribData cattr with + match decodeILAttribData ilg cattr with | [ILAttribElem.Int32 u1; ILAttribElem.Int32 u2;ILAttribElem.Int32 u3 ], _ -> (version.Major = uint16 u1) && (version.Minor = uint16 u2) && (version.Build = uint16 u3) | _ -> @@ -7448,7 +7419,7 @@ let IsMatchingSignatureDataVersionAttr (version: ILVersionInfo) cattr = false let mkCompilerGeneratedAttr (g: TcGlobals) n = - mkILCustomAttribute (tref_CompilationMappingAttr g, [mkILNonGenericValueTy (tref_SourceConstructFlags g)], [ILAttribElem.Int32 n], []) + mkILCustomAttribute g.ilg (tref_CompilationMappingAttr g, [mkILNonGenericValueTy (tref_SourceConstructFlags g)], [ILAttribElem.Int32 n], []) //-------------------------------------------------------------------------- // tupled lambda --> method/function with a given topValInfo specification. @@ -8121,12 +8092,12 @@ let XmlDocSigOfVal g full path (v: Val) = let tps, witnessInfos, argInfos, rty, _ = GetMemberTypeInMemberForm g membInfo.MemberFlags (Option.get v.ValReprInfo) numEnclosingTypars v.Type v.Range let prefix, name = match membInfo.MemberFlags.MemberKind with - | SynMemberKind.ClassConstructor - | SynMemberKind.Constructor -> "M:", "#ctor" - | SynMemberKind.Member -> "M:", v.CompiledName g.CompilerGlobalState - | SynMemberKind.PropertyGetSet - | SynMemberKind.PropertySet - | SynMemberKind.PropertyGet -> "P:", v.PropertyName + | MemberKind.ClassConstructor + | MemberKind.Constructor -> "M:", "#ctor" + | MemberKind.Member -> "M:", v.CompiledName g.CompilerGlobalState + | MemberKind.PropertyGetSet + | MemberKind.PropertySet + | MemberKind.PropertyGet -> "P:", v.PropertyName let path = if v.HasDeclaringEntity then prependPath path v.TopValDeclaringEntity.CompiledName else path let parentTypars, methTypars = match PartitionValTypars g v with @@ -8347,7 +8318,7 @@ let mkIsInstConditional g m tgty vinpe v e2 e3 = if canUseTypeTestFast g tgty then - let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m) + let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m) let tg2 = mbuilder.AddResultTarget(e2, DebugPointForTarget.No) let tg3 = mbuilder.AddResultTarget(e3, DebugPointForTarget.No) let dtree = TDSwitch(exprForVal m v, [TCase(DecisionTreeTest.IsNull, tg3)], Some tg2, m) @@ -8355,7 +8326,7 @@ let mkIsInstConditional g m tgty vinpe v e2 e3 = mkCompGenLet m v (mkIsInst tgty vinpe m) expr else - let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m) + let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m) let tg2 = TDSuccess([mkCallUnbox g m tgty vinpe], mbuilder.AddTarget(TTarget([v], e2, DebugPointForTarget.No))) let tg3 = mbuilder.AddResultTarget(e3, DebugPointForTarget.No) let dtree = TDSwitch(vinpe, [TCase(DecisionTreeTest.IsInst(tyOfExpr g vinpe, tgty), tg2)], Some tg3, m) @@ -8366,7 +8337,7 @@ let mkIsInstConditional g m tgty vinpe v e2 e3 = // 1. The compilation of array patterns in the pattern match compiler // 2. The compilation of string patterns in the pattern match compiler let mkNullTest g m e1 e2 e3 = - let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m) + let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m) let tg2 = mbuilder.AddResultTarget(e2, DebugPointForTarget.No) let tg3 = mbuilder.AddResultTarget(e3, DebugPointForTarget.No) let dtree = TDSwitch(e1, [TCase(DecisionTreeTest.IsNull, tg3)], Some tg2, m) @@ -8375,9 +8346,9 @@ let mkNullTest g m e1 e2 e3 = let mkNonNullTest (g: TcGlobals) m e = mkAsmExpr ([ IL.AI_ldnull ; IL.AI_cgt_un ], [], [e], [g.bool_ty], m) -let mkNonNullCond g m ty e1 e2 e3 = mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m ty (mkNonNullTest g m e1) e2 e3 +let mkNonNullCond g m ty e1 e2 e3 = mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m ty (mkNonNullTest g m e1) e2 e3 -let mkIfThen (g: TcGlobals) m e1 e2 = mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m g.unit_ty e1 e2 (mkUnit g m) +let mkIfThen (g: TcGlobals) m e1 e2 = mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m g.unit_ty e1 e2 (mkUnit g m) let ModuleNameIsMangled g attrs = match TryFindFSharpInt32Attribute g g.attrib_CompilationRepresentationAttribute attrs with @@ -8456,13 +8427,13 @@ let GetMemberCallInfo g (vref: ValRef, vFlags) = membInfo.MemberFlags.IsDispatchSlot) && not membInfo.MemberFlags.IsFinal && (match vFlags with VSlotDirectCall -> false | _ -> true) - let isNewObj = (membInfo.MemberFlags.MemberKind = SynMemberKind.Constructor) && (match vFlags with NormalValUse -> true | _ -> false) - let isSuperInit = (membInfo.MemberFlags.MemberKind = SynMemberKind.Constructor) && (match vFlags with CtorValUsedAsSuperInit -> true | _ -> false) - let isSelfInit = (membInfo.MemberFlags.MemberKind = SynMemberKind.Constructor) && (match vFlags with CtorValUsedAsSelfInit -> true | _ -> false) + let isNewObj = (membInfo.MemberFlags.MemberKind = MemberKind.Constructor) && (match vFlags with NormalValUse -> true | _ -> false) + let isSuperInit = (membInfo.MemberFlags.MemberKind = MemberKind.Constructor) && (match vFlags with CtorValUsedAsSuperInit -> true | _ -> false) + let isSelfInit = (membInfo.MemberFlags.MemberKind = MemberKind.Constructor) && (match vFlags with CtorValUsedAsSelfInit -> true | _ -> false) let isCompiledAsInstance = ValRefIsCompiledAsInstanceMember g vref let takesInstanceArg = isCompiledAsInstance && not isNewObj - let isPropGet = (membInfo.MemberFlags.MemberKind = SynMemberKind.PropertyGet) && (membInfo.MemberFlags.IsInstance = isCompiledAsInstance) - let isPropSet = (membInfo.MemberFlags.MemberKind = SynMemberKind.PropertySet) && (membInfo.MemberFlags.IsInstance = isCompiledAsInstance) + let isPropGet = (membInfo.MemberFlags.MemberKind = MemberKind.PropertyGet) && (membInfo.MemberFlags.IsInstance = isCompiledAsInstance) + let isPropSet = (membInfo.MemberFlags.MemberKind = MemberKind.PropertySet) && (membInfo.MemberFlags.IsInstance = isCompiledAsInstance) numEnclTypeArgs, virtualCall, isNewObj, isSuperInit, isSelfInit, takesInstanceArg, isPropGet, isPropSet | _ -> 0, false, false, false, false, false, false, false @@ -8482,7 +8453,7 @@ let TryGetActivePatternInfo (vref: ValRef) = type ActivePatternElemRef with member x.Name = - let (APElemRef(_, vref, n, _)) = x + let (APElemRef(_, vref, n)) = x match TryGetActivePatternInfo vref with | None -> error(InternalError("not an active pattern name", vref.Range)) | Some apinfo -> @@ -8513,14 +8484,12 @@ let mkChoiceCaseRef g m n i = type PrettyNaming.ActivePatternInfo with member x.Names = x.ActiveTags - member apinfo.ResultType g m rtys isStruct = + member apinfo.ResultType g m rtys = let choicety = mkChoiceTy g m rtys - if apinfo.IsTotal then choicety - elif isStruct then mkValueOptionTy g choicety - else mkOptionTy g choicety + if apinfo.IsTotal then choicety else mkOptionTy g choicety - member apinfo.OverallType g m dty rtys isStruct = - mkFunTy dty (apinfo.ResultType g m rtys isStruct) + member apinfo.OverallType g m dty rtys = + mkFunTy dty (apinfo.ResultType g m rtys) //--------------------------------------------------------------------------- // Active pattern validation @@ -8821,7 +8790,7 @@ and remapValToNonLocal g tmenv inp = let ApplyExportRemappingToEntity g tmenv x = remapTyconToNonLocal g tmenv x (* Which constraints actually get compiled to .NET constraints? *) -let isCompiledOrWitnessPassingConstraint (g: TcGlobals) cx = +let isCompiledConstraint cx = match cx with | TyparConstraint.SupportsNull _ // this implies the 'class' constraint | TyparConstraint.IsReferenceType _ // this is the 'class' constraint @@ -8829,15 +8798,13 @@ let isCompiledOrWitnessPassingConstraint (g: TcGlobals) cx = | TyparConstraint.IsReferenceType _ | TyparConstraint.RequiresDefaultConstructor _ | TyparConstraint.CoercesTo _ -> true - | TyparConstraint.MayResolveMember _ when g.langVersion.SupportsFeature LanguageFeature.WitnessPassing -> true | _ -> false -// Is a value a first-class polymorphic value with .NET constraints, or witness-passing constraints? -// Used to turn off TLR and method splitting and do not compile to -// FSharpTypeFunc, but rather bake a "local type function" for each TyLambda abstraction. +// Is a value a first-class polymorphic value with .NET constraints? +// Used to turn off TLR and method splitting let IsGenericValWithGenericConstraints g (v: Val) = isForallTy g v.Type && - v.Type |> destForallTy g |> fst |> List.exists (fun tp -> List.exists (isCompiledOrWitnessPassingConstraint g) tp.Constraints) + v.Type |> destForallTy g |> fst |> List.exists (fun tp -> List.exists isCompiledConstraint tp.Constraints) // Does a type support a given interface? type Entity with @@ -9181,8 +9148,8 @@ let (|CompiledForEachExpr|_|) g expr = let mBody = bodyExpr.Range let mWholeExpr = expr.Range - let spForLoop, mForLoop = match enumeratorBind with DebugPointAtBinding.Yes spStart -> DebugPointAtFor.Yes spStart, spStart | _ -> DebugPointAtFor.No, mEnumExpr - let spWhileLoop = match enumeratorBind with DebugPointAtBinding.Yes spStart -> DebugPointAtWhile.Yes spStart| _ -> DebugPointAtWhile.No + let spForLoop, mForLoop = match enumeratorBind with DebugPointAtBinding spStart -> DebugPointAtFor.Yes spStart, spStart | _ -> DebugPointAtFor.No, mEnumExpr + let spWhileLoop = match enumeratorBind with DebugPointAtBinding spStart -> DebugPointAtWhile.Yes spStart| _ -> DebugPointAtWhile.No let enumerableTy = tyOfExpr g enumerableExpr Some (enumerableTy, enumerableExpr, elemVar, bodyExpr, (mEnumExpr, mBody, spForLoop, mForLoop, spWhileLoop, mWholeExpr)) @@ -9263,7 +9230,7 @@ let DetectAndOptimizeForExpression g option expr = let expr = // let mutable current = enumerableExpr - let spBind = (match spForLoop with DebugPointAtFor.Yes spStart -> DebugPointAtBinding.Yes spStart | DebugPointAtFor.No -> DebugPointAtBinding.NoneAtSticky) + let spBind = (match spForLoop with DebugPointAtFor.Yes spStart -> DebugPointAtBinding spStart | DebugPointAtFor.No -> NoDebugPointAtStickyBinding) mkLet spBind mEnumExpr currentVar enumerableExpr // let mutable next = current.TailOrNull (mkCompGenLet mForLoop nextVar tailOrNullExpr @@ -9288,7 +9255,7 @@ let BindUnitVars g (mvs: Val list, paramInfos: ArgReprInfo list, body) = match mvs, paramInfos with | [v], [] -> assert isUnitTy g v.Type - [], mkLet DebugPointAtBinding.NoneAtInvisible v.Range v (mkUnit g v.Range) body + [], mkLet NoDebugPointAtInvisibleBinding v.Range v (mkUnit g v.Range) body | _ -> mvs, body let isThreadOrContextStatic g attrs = @@ -9371,8 +9338,8 @@ type TraitWitnessInfoHashMap<'T> = ImmutableDictionary let EmptyTraitWitnessInfoHashMap g : TraitWitnessInfoHashMap<'T> = ImmutableDictionary.Create( { new IEqualityComparer<_> with - member _.Equals(a, b) = traitKeysAEquiv g TypeEquivEnv.Empty a b - member _.GetHashCode(a) = hash a.MemberName + member __.Equals(a, b) = traitKeysAEquiv g TypeEquivEnv.Empty a b + member __.GetHashCode(a) = hash a.MemberName }) let (|WhileExpr|_|) expr = diff --git a/src/fsharp/TypedTreeOps.fsi b/src/fsharp/TypedTreeOps.fsi index 8e3dc20b995..70846f8e96f 100755 --- a/src/fsharp/TypedTreeOps.fsi +++ b/src/fsharp/TypedTreeOps.fsi @@ -4,27 +4,32 @@ module internal FSharp.Compiler.TypedTreeOps open System.Collections.Generic -open System.Collections.Immutable -open Internal.Utilities.Collections -open Internal.Utilities.Rational + +open Internal.Utilities + +open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Xml +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.Layout +open FSharp.Compiler.Range +open FSharp.Compiler.Rational +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.TypedTree open FSharp.Compiler.TcGlobals +open FSharp.Compiler.XmlDoc +open System.Collections.Immutable type Erasure = EraseAll | EraseMeasures | EraseNone /// Check the equivalence of two types up to an erasure flag -val typeEquivAux: Erasure -> TcGlobals -> TType -> TType -> bool +val typeEquivAux : Erasure -> TcGlobals -> TType -> TType -> bool /// Check the equivalence of two types -val typeEquiv: TcGlobals -> TType -> TType -> bool +val typeEquiv : TcGlobals -> TType -> TType -> bool /// Check the equivalence of two units-of-measure -val measureEquiv: TcGlobals -> Measure -> Measure -> bool +val measureEquiv : TcGlobals -> Measure -> Measure -> bool /// Get the unit of measure for an annotated type val getMeasureOfType: TcGlobals -> TType -> (TyconRef * Measure) option @@ -33,165 +38,165 @@ val getMeasureOfType: TcGlobals -> TType -> (TyconRef * Measure) option val stripTyEqnsWrtErasure: Erasure -> TcGlobals -> TType -> TType /// Build a function type -val mkFunTy: TType -> TType -> TType +val mkFunTy : TType -> TType -> TType /// Build a function type -val ( --> ): TType -> TType -> TType +val ( --> ) : TType -> TType -> TType /// Build a type-forall anonymous generic type if necessary -val mkForallTyIfNeeded: Typars -> TType -> TType +val mkForallTyIfNeeded : Typars -> TType -> TType -val ( +-> ): Typars -> TType -> TType +val ( +-> ) : Typars -> TType -> TType /// Build a curried function type -val mkIteratedFunTy: TTypes -> TType -> TType +val mkIteratedFunTy : TTypes -> TType -> TType /// Get the natural type of a single argument amongst a set of curried arguments -val typeOfLambdaArg: range -> Val list -> TType +val typeOfLambdaArg : range -> Val list -> TType /// Get the curried type corresponding to a lambda -val mkMultiLambdaTy: range -> Val list -> TType -> TType +val mkMultiLambdaTy : range -> Val list -> TType -> TType /// Get the curried type corresponding to a lambda -val mkLambdaTy: Typars -> TTypes -> TType -> TType +val mkLambdaTy : Typars -> TTypes -> TType -> TType /// Module publication, used while compiling fslib. -val ensureCcuHasModuleOrNamespaceAtPath: CcuThunk -> Ident list -> CompilationPath -> XmlDoc -> unit +val ensureCcuHasModuleOrNamespaceAtPath : CcuThunk -> Ident list -> CompilationPath -> XmlDoc -> unit /// Ignore 'Expr.Link' in an expression -val stripExpr: Expr -> Expr +val stripExpr : Expr -> Expr /// Get the values for a set of bindings -val valsOfBinds: Bindings -> Vals +val valsOfBinds : Bindings -> Vals /// Look for a use of an F# value, possibly including application of a generic thing to a set of type arguments -val (|ExprValWithPossibleTypeInst|_|): Expr -> (ValRef * ValUseFlag * TType list * range) option +val (|ExprValWithPossibleTypeInst|_|) : Expr -> (ValRef * ValUseFlag * TType list * range) option /// Build decision trees imperatively type MatchBuilder = /// Create a new builder - new: DebugPointAtBinding * range -> MatchBuilder + new : DebugPointForBinding * range -> MatchBuilder /// Add a new destination target - member AddTarget: DecisionTreeTarget -> int + member AddTarget : DecisionTreeTarget -> int /// Add a new destination target that is an expression result - member AddResultTarget: Expr * DebugPointForTarget -> DecisionTree + member AddResultTarget : Expr * DebugPointForTarget -> DecisionTree /// Finish the targets - member CloseTargets: unit -> DecisionTreeTarget list + member CloseTargets : unit -> DecisionTreeTarget list /// Build the overall expression - member Close: DecisionTree * range * TType -> Expr + member Close : DecisionTree * range * TType -> Expr /// Add an if-then-else boolean conditional node into a decision tree -val mkBoolSwitch: range -> Expr -> DecisionTree -> DecisionTree -> DecisionTree +val mkBoolSwitch : range -> Expr -> DecisionTree -> DecisionTree -> DecisionTree /// Build a conditional expression -val primMkCond: DebugPointAtBinding -> DebugPointForTarget -> DebugPointForTarget -> range -> TType -> Expr -> Expr -> Expr -> Expr +val primMkCond : DebugPointForBinding -> DebugPointForTarget -> DebugPointForTarget -> range -> TType -> Expr -> Expr -> Expr -> Expr /// Build a conditional expression -val mkCond: DebugPointAtBinding -> DebugPointForTarget -> range -> TType -> Expr -> Expr -> Expr -> Expr +val mkCond : DebugPointForBinding -> DebugPointForTarget -> range -> TType -> Expr -> Expr -> Expr -> Expr /// Build a conditional expression that checks for non-nullness -val mkNonNullCond: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr +val mkNonNullCond : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr /// Build an if-then statement -val mkIfThen: TcGlobals -> range -> Expr -> Expr -> Expr +val mkIfThen : TcGlobals -> range -> Expr -> Expr -> Expr /// Build an expression corresponding to the use of a value /// Note: try to use exprForValRef or the expression returned from mkLocal instead of this. -val exprForVal: range -> Val -> Expr +val exprForVal : range -> Val -> Expr /// Build an expression corresponding to the use of a reference to a value -val exprForValRef: range -> ValRef -> Expr +val exprForValRef : range -> ValRef -> Expr /// Make a new local value and build an expression to reference it -val mkLocal: range -> string -> TType -> Val * Expr +val mkLocal : range -> string -> TType -> Val * Expr /// Make a new compiler-generated local value and build an expression to reference it -val mkCompGenLocal: range -> string -> TType -> Val * Expr +val mkCompGenLocal : range -> string -> TType -> Val * Expr /// Make a new mutable compiler-generated local value and build an expression to reference it -val mkMutableCompGenLocal: range -> string -> TType -> Val * Expr +val mkMutableCompGenLocal : range -> string -> TType -> Val * Expr /// Make a new mutable compiler-generated local value, 'let' bind it to an expression /// 'invisibly' (no sequence point etc.), and build an expression to reference it -val mkCompGenLocalAndInvisibleBind: TcGlobals -> string -> range -> Expr -> Val * Expr * Binding +val mkCompGenLocalAndInvisibleBind : TcGlobals -> string -> range -> Expr -> Val * Expr * Binding /// Build a lambda expression taking multiple values -val mkMultiLambda: range -> Val list -> Expr * TType -> Expr +val mkMultiLambda : range -> Val list -> Expr * TType -> Expr /// Rebuild a lambda during an expression tree traversal -val rebuildLambda: range -> Val option -> Val option -> Val list -> Expr * TType -> Expr +val rebuildLambda : range -> Val option -> Val option -> Val list -> Expr * TType -> Expr /// Build a lambda expression taking a single value -val mkLambda: range -> Val -> Expr * TType -> Expr +val mkLambda : range -> Val -> Expr * TType -> Expr /// Build a generic lambda expression (type abstraction) -val mkTypeLambda: range -> Typars -> Expr * TType -> Expr +val mkTypeLambda : range -> Typars -> Expr * TType -> Expr /// Build an object expression -val mkObjExpr: TType * Val option * Expr * ObjExprMethod list * (TType * ObjExprMethod list) list * range -> Expr +val mkObjExpr : TType * Val option * Expr * ObjExprMethod list * (TType * ObjExprMethod list) list * Range.range -> Expr /// Build an type-chose expression, indicating that a local free choice of a type variable -val mkTypeChoose: range -> Typars -> Expr -> Expr +val mkTypeChoose : range -> Typars -> Expr -> Expr /// Build an iterated (curried) lambda expression -val mkLambdas: range -> Typars -> Val list -> Expr * TType -> Expr +val mkLambdas : range -> Typars -> Val list -> Expr * TType -> Expr /// Build an iterated (tupled+curried) lambda expression -val mkMultiLambdasCore: range -> Val list list -> Expr * TType -> Expr * TType +val mkMultiLambdasCore : range -> Val list list -> Expr * TType -> Expr * TType /// Build an iterated generic (type abstraction + tupled+curried) lambda expression -val mkMultiLambdas: range -> Typars -> Val list list -> Expr * TType -> Expr +val mkMultiLambdas : range -> Typars -> Val list list -> Expr * TType -> Expr /// Build a lambda expression that corresponds to the implementation of a member -val mkMemberLambdas: range -> Typars -> Val option -> Val option -> Val list list -> Expr * TType -> Expr +val mkMemberLambdas : range -> Typars -> Val option -> Val option -> Val list list -> Expr * TType -> Expr /// Build a 'while' loop expression -val mkWhile: TcGlobals -> DebugPointAtWhile * SpecialWhileLoopMarker * Expr * Expr * range -> Expr +val mkWhile : TcGlobals -> DebugPointAtWhile * SpecialWhileLoopMarker * Expr * Expr * range -> Expr /// Build a 'for' loop expression -val mkFor: TcGlobals -> DebugPointAtFor * Val * Expr * ForLoopStyle * Expr * Expr * range -> Expr +val mkFor : TcGlobals -> DebugPointAtFor * Val * Expr * ForLoopStyle * Expr * Expr * range -> Expr /// Build a 'try/with' expression -val mkTryWith: TcGlobals -> Expr * (* filter val *) Val * (* filter expr *) Expr * (* handler val *) Val * (* handler expr *) Expr * range * TType * DebugPointAtTry * DebugPointAtWith -> Expr +val mkTryWith : TcGlobals -> Expr * (* filter val *) Val * (* filter expr *) Expr * (* handler val *) Val * (* handler expr *) Expr * range * TType * DebugPointAtTry * DebugPointAtWith -> Expr /// Build a 'try/finally' expression val mkTryFinally: TcGlobals -> Expr * Expr * range * TType * DebugPointAtTry * DebugPointAtFinally -> Expr /// Build a user-level value binding -val mkBind: DebugPointAtBinding -> Val -> Expr -> Binding +val mkBind : DebugPointForBinding -> Val -> Expr -> Binding /// Build a user-level let-binding -val mkLetBind: range -> Binding -> Expr -> Expr +val mkLetBind : range -> Binding -> Expr -> Expr /// Build a user-level value sequence of let bindings -val mkLetsBind: range -> Binding list -> Expr -> Expr +val mkLetsBind : range -> Binding list -> Expr -> Expr /// Build a user-level value sequence of let bindings -val mkLetsFromBindings: range -> Bindings -> Expr -> Expr +val mkLetsFromBindings : range -> Bindings -> Expr -> Expr /// Build a user-level let expression -val mkLet: DebugPointAtBinding -> range -> Val -> Expr -> Expr -> Expr +val mkLet : DebugPointForBinding -> range -> Val -> Expr -> Expr -> Expr /// Make a binding that binds a function value to a lambda taking multiple arguments -val mkMultiLambdaBind: Val -> DebugPointAtBinding -> range -> Typars -> Val list list -> Expr * TType -> Binding +val mkMultiLambdaBind : Val -> DebugPointForBinding -> range -> Typars -> Val list list -> Expr * TType -> Binding // Compiler generated bindings may involve a user variable. // Compiler generated bindings may give rise to a sequence point if they are part of // an SPAlways expression. Compiler generated bindings can arise from for example, inlining. -val mkCompGenBind: Val -> Expr -> Binding +val mkCompGenBind : Val -> Expr -> Binding /// Make a set of bindings that bind compiler generated values to corresponding expressions. /// Compiler-generated bindings do not give rise to a sequence point in debugging. -val mkCompGenBinds: Val list -> Exprs -> Bindings +val mkCompGenBinds : Val list -> Exprs -> Bindings /// Make a let-expression that locally binds a compiler-generated value to an expression. /// Compiler-generated bindings do not give rise to a sequence point in debugging. -val mkCompGenLet: range -> Val -> Expr -> Expr -> Expr +val mkCompGenLet : range -> Val -> Expr -> Expr -> Expr /// Make a let-expression that locally binds a compiler-generated value to an expression, where the expression /// is returned by the given continuation. Compiler-generated bindings do not give rise to a sequence point in debugging. @@ -199,18 +204,18 @@ val mkCompGenLetIn: range -> string -> TType -> Expr -> (Val * Expr -> Expr) -> /// Make a let-expression that locally binds a value to an expression in an "invisible" way. /// Invisible bindings are not given a sequence point and should not have side effects. -val mkInvisibleLet: range -> Val -> Expr -> Expr -> Expr +val mkInvisibleLet : range -> Val -> Expr -> Expr -> Expr /// Make a binding that binds a value to an expression in an "invisible" way. /// Invisible bindings are not given a sequence point and should not have side effects. -val mkInvisibleBind: Val -> Expr -> Binding +val mkInvisibleBind : Val -> Expr -> Binding /// Make a set of bindings that bind values to expressions in an "invisible" way. /// Invisible bindings are not given a sequence point and should not have side effects. -val mkInvisibleBinds: Vals -> Exprs -> Bindings +val mkInvisibleBinds : Vals -> Exprs -> Bindings /// Make a let-rec expression that locally binds values to expressions where self-reference back to the values is possible. -val mkLetRecBinds: range -> Bindings -> Expr -> Expr +val mkLetRecBinds : range -> Bindings -> Expr -> Expr /// TypeScheme (generalizedTypars, tauTy) /// @@ -220,143 +225,143 @@ type TypeScheme = TypeScheme of Typars * TType /// Make the right-hand side of a generalized binding, incorporating the generalized generic parameters from the type /// scheme into the right-hand side as type generalizations. -val mkGenericBindRhs: TcGlobals -> range -> Typars -> TypeScheme -> Expr -> Expr +val mkGenericBindRhs : TcGlobals -> range -> Typars -> TypeScheme -> Expr -> Expr /// Test if the type parameter is one of those being generalized by a type scheme. -val isBeingGeneralized: Typar -> TypeScheme -> bool +val isBeingGeneralized : Typar -> TypeScheme -> bool /// Make the expression corresponding to 'expr1 && expr2' -val mkLazyAnd: TcGlobals -> range -> Expr -> Expr -> Expr +val mkLazyAnd : TcGlobals -> range -> Expr -> Expr -> Expr /// Make the expression corresponding to 'expr1 || expr2' -val mkLazyOr: TcGlobals -> range -> Expr -> Expr -> Expr +val mkLazyOr : TcGlobals -> range -> Expr -> Expr -> Expr /// Make a byref type -val mkByrefTy: TcGlobals -> TType -> TType +val mkByrefTy : TcGlobals -> TType -> TType /// Make a byref type with a in/out kind inference parameter -val mkByrefTyWithInference: TcGlobals -> TType -> TType -> TType +val mkByrefTyWithInference : TcGlobals -> TType -> TType -> TType /// Make a in-byref type with a in kind parameter -val mkInByrefTy: TcGlobals -> TType -> TType +val mkInByrefTy : TcGlobals -> TType -> TType /// Make an out-byref type with an out kind parameter -val mkOutByrefTy: TcGlobals -> TType -> TType +val mkOutByrefTy : TcGlobals -> TType -> TType /// Make an expression that constructs a union case, e.g. 'Some(expr)' -val mkUnionCaseExpr: UnionCaseRef * TypeInst * Exprs * range -> Expr +val mkUnionCaseExpr : UnionCaseRef * TypeInst * Exprs * range -> Expr /// Make an expression that constructs an exception value -val mkExnExpr: TyconRef * Exprs * range -> Expr +val mkExnExpr : TyconRef * Exprs * range -> Expr /// Make an expression that is IL assembly code -val mkAsmExpr: ILInstr list * TypeInst * Exprs * TTypes * range -> Expr +val mkAsmExpr : ILInstr list * TypeInst * Exprs * TTypes * range -> Expr /// Make an expression that coerces one expression to another type -val mkCoerceExpr: Expr * TType * range * TType -> Expr +val mkCoerceExpr : Expr * TType * range * TType -> Expr /// Make an expression that re-raises an exception -val mkReraise: range -> TType -> Expr +val mkReraise : range -> TType -> Expr /// Make an expression that re-raises an exception via a library call -val mkReraiseLibCall: TcGlobals -> TType -> range -> Expr +val mkReraiseLibCall : TcGlobals -> TType -> range -> Expr /// Make an expression that gets an item from a tuple -val mkTupleFieldGet: TcGlobals -> TupInfo * Expr * TypeInst * int * range -> Expr +val mkTupleFieldGet : TcGlobals -> TupInfo * Expr * TypeInst * int * range -> Expr /// Make an expression that gets an item from an anonymous record -val mkAnonRecdFieldGet: TcGlobals -> AnonRecdTypeInfo * Expr * TypeInst * int * range -> Expr +val mkAnonRecdFieldGet : TcGlobals -> AnonRecdTypeInfo * Expr * TypeInst * int * range -> Expr /// Make an expression that gets an item from an anonymous record (via the address of the value if it is a struct) -val mkAnonRecdFieldGetViaExprAddr: AnonRecdTypeInfo * Expr * TypeInst * int * range -> Expr +val mkAnonRecdFieldGetViaExprAddr : AnonRecdTypeInfo * Expr * TypeInst * int * range -> Expr /// Make an expression that gets an instance field from a record or class (via the address of the value if it is a struct) -val mkRecdFieldGetViaExprAddr: Expr * RecdFieldRef * TypeInst * range -> Expr +val mkRecdFieldGetViaExprAddr : Expr * RecdFieldRef * TypeInst * range -> Expr /// Make an expression that gets the address of an instance field from a record or class (via the address of the value if it is a struct) -val mkRecdFieldGetAddrViaExprAddr: readonly: bool * Expr * RecdFieldRef * TypeInst * range -> Expr +val mkRecdFieldGetAddrViaExprAddr : readonly: bool * Expr * RecdFieldRef * TypeInst * range -> Expr /// Make an expression that gets a static field from a record or class -val mkStaticRecdFieldGet: RecdFieldRef * TypeInst * range -> Expr +val mkStaticRecdFieldGet : RecdFieldRef * TypeInst * range -> Expr /// Make an expression that sets a static field in a record or class -val mkStaticRecdFieldSet: RecdFieldRef * TypeInst * Expr * range -> Expr +val mkStaticRecdFieldSet : RecdFieldRef * TypeInst * Expr * range -> Expr /// Make an expression that gets the address of a static field in a record or class -val mkStaticRecdFieldGetAddr: readonly: bool * RecdFieldRef * TypeInst * range -> Expr +val mkStaticRecdFieldGetAddr : readonly: bool * RecdFieldRef * TypeInst * range -> Expr /// Make an expression that sets an instance the field of a record or class (via the address of the value if it is a struct) -val mkRecdFieldSetViaExprAddr: Expr * RecdFieldRef * TypeInst * Expr * range -> Expr +val mkRecdFieldSetViaExprAddr : Expr * RecdFieldRef * TypeInst * Expr * range -> Expr /// Make an expression that gets the tag of a union value (via the address of the value if it is a struct) -val mkUnionCaseTagGetViaExprAddr: Expr * TyconRef * TypeInst * range -> Expr +val mkUnionCaseTagGetViaExprAddr : Expr * TyconRef * TypeInst * range -> Expr /// Make a 'TOp.UnionCaseProof' expression, which proves a union value is over a particular case (used only for ref-unions, not struct-unions) -val mkUnionCaseProof: Expr * UnionCaseRef * TypeInst * range -> Expr +val mkUnionCaseProof : Expr * UnionCaseRef * TypeInst * range -> Expr /// Build a 'TOp.UnionCaseFieldGet' expression for something we've already determined to be a particular union case. For ref-unions, /// the input expression has 'TType_ucase', which is an F# compiler internal "type" corresponding to the union case. For struct-unions, /// the input should be the address of the expression. -val mkUnionCaseFieldGetProvenViaExprAddr: Expr * UnionCaseRef * TypeInst * int * range -> Expr +val mkUnionCaseFieldGetProvenViaExprAddr : Expr * UnionCaseRef * TypeInst * int * range -> Expr /// Build a 'TOp.UnionCaseFieldGetAddr' expression for a field of a union when we've already determined the value to be a particular union case. For ref-unions, /// the input expression has 'TType_ucase', which is an F# compiler internal "type" corresponding to the union case. For struct-unions, /// the input should be the address of the expression. -val mkUnionCaseFieldGetAddrProvenViaExprAddr: readonly: bool * Expr * UnionCaseRef * TypeInst * int * range -> Expr +val mkUnionCaseFieldGetAddrProvenViaExprAddr : readonly: bool * Expr * UnionCaseRef * TypeInst * int * range -> Expr /// Build a 'TOp.UnionCaseFieldGetAddr' expression for a field of a union when we've already determined the value to be a particular union case. For ref-unions, /// the input expression has 'TType_ucase', which is an F# compiler internal "type" corresponding to the union case. For struct-unions, /// the input should be the address of the expression. -val mkUnionCaseFieldGetUnprovenViaExprAddr: Expr * UnionCaseRef * TypeInst * int * range -> Expr +val mkUnionCaseFieldGetUnprovenViaExprAddr : Expr * UnionCaseRef * TypeInst * int * range -> Expr /// Build a 'TOp.UnionCaseFieldSet' expression. For ref-unions, the input expression has 'TType_ucase', which is /// an F# compiler internal "type" corresponding to the union case. For struct-unions, /// the input should be the address of the expression. -val mkUnionCaseFieldSet: Expr * UnionCaseRef * TypeInst * int * Expr * range -> Expr +val mkUnionCaseFieldSet : Expr * UnionCaseRef * TypeInst * int * Expr * range -> Expr /// Like mkUnionCaseFieldGetUnprovenViaExprAddr, but for struct-unions, the input should be a copy of the expression. -val mkUnionCaseFieldGetUnproven: TcGlobals -> Expr * UnionCaseRef * TypeInst * int * range -> Expr +val mkUnionCaseFieldGetUnproven : TcGlobals -> Expr * UnionCaseRef * TypeInst * int * range -> Expr /// Make an expression that gets an instance field from an F# exception value -val mkExnCaseFieldGet: Expr * TyconRef * int * range -> Expr +val mkExnCaseFieldGet : Expr * TyconRef * int * range -> Expr /// Make an expression that sets an instance field in an F# exception value -val mkExnCaseFieldSet: Expr * TyconRef * int * Expr * range -> Expr +val mkExnCaseFieldSet : Expr * TyconRef * int * Expr * range -> Expr /// Make an expression that gets the address of an element in an array -val mkArrayElemAddress: TcGlobals -> readonly: bool * ILReadonly * bool * ILArrayShape * TType * Expr list * range -> Expr +val mkArrayElemAddress : TcGlobals -> readonly: bool * ILReadonly * bool * ILArrayShape * TType * Expr list * range -> Expr /// The largest tuple before we start encoding, i.e. 7 -val maxTuple: int +val maxTuple : int /// The number of fields in the largest tuple before we start encoding, i.e. 7 -val goodTupleFields: int +val goodTupleFields : int /// Check if a TyconRef is for a .NET tuple type. Currently this includes Tuple`1 even though /// that' not really part of the target set of TyconRef used to represent F# tuples. -val isCompiledTupleTyconRef: TcGlobals -> TyconRef -> bool +val isCompiledTupleTyconRef : TcGlobals -> TyconRef -> bool /// Get a TyconRef for a .NET tuple type -val mkCompiledTupleTyconRef: TcGlobals -> bool -> int -> TyconRef +val mkCompiledTupleTyconRef : TcGlobals -> bool -> int -> TyconRef /// Convert from F# tuple types to .NET tuple types. -val mkCompiledTupleTy: TcGlobals -> bool -> TTypes -> TType +val mkCompiledTupleTy : TcGlobals -> bool -> TTypes -> TType /// Convert from F# tuple creation expression to .NET tuple creation expressions -val mkCompiledTuple: TcGlobals -> bool -> TTypes * Exprs * range -> TyconRef * TTypes * Exprs * range +val mkCompiledTuple : TcGlobals -> bool -> TTypes * Exprs * range -> TyconRef * TTypes * Exprs * range /// Make a TAST expression representing getting an item fromm a tuple -val mkGetTupleItemN: TcGlobals -> range -> int -> ILType -> bool -> Expr -> TType -> Expr +val mkGetTupleItemN : TcGlobals -> range -> int -> ILType -> bool -> Expr -> TType -> Expr /// Evaluate the TupInfo to work out if it is a struct or a ref. Currently this is very simple /// but TupInfo may later be used carry variables that infer structness. -val evalTupInfoIsStruct: TupInfo -> bool +val evalTupInfoIsStruct : TupInfo -> bool /// Evaluate the AnonRecdTypeInfo to work out if it is a struct or a ref. -val evalAnonInfoIsStruct: AnonRecdTypeInfo -> bool +val evalAnonInfoIsStruct : AnonRecdTypeInfo -> bool /// If it is a tuple type, ensure it's outermost type is a .NET tuple type, otherwise leave unchanged -val convertToTypeWithMetadataIfPossible: TcGlobals -> TType -> TType +val convertToTypeWithMetadataIfPossible : TcGlobals -> TType -> TType /// An exception representing a warning for a defensive copy of an immutable struct exception DefensiveCopyWarning of string * range @@ -367,126 +372,126 @@ type Mutates = AddressOfOp | DefinitelyMutates | PossiblyMutates | NeverMutates val mkDerefAddrExpr: mAddrGet: range -> expr: Expr -> mExpr: range -> exprTy: TType -> Expr /// Helper to take the address of an expression -val mkExprAddrOfExprAux: TcGlobals -> bool -> bool -> Mutates -> Expr -> ValRef option -> range -> (Val * Expr) option * Expr * bool * bool +val mkExprAddrOfExprAux : TcGlobals -> bool -> bool -> Mutates -> Expr -> ValRef option -> range -> (Val * Expr) option * Expr * bool * bool /// Take the address of an expression, or force it into a mutable local. Any allocated /// mutable local may need to be kept alive over a larger expression, hence we return /// a wrapping function that wraps "let mutable loc = Expr in ..." around a larger /// expression. -val mkExprAddrOfExpr: TcGlobals -> bool -> bool -> Mutates -> Expr -> ValRef option -> range -> (Expr -> Expr) * Expr * bool * bool +val mkExprAddrOfExpr : TcGlobals -> bool -> bool -> Mutates -> Expr -> ValRef option -> range -> (Expr -> Expr) * Expr * bool * bool /// Maps Val to T, based on stamps [] type ValMap<'T> = - member Contents: StampMap<'T> + member Contents : StampMap<'T> - member Item: Val -> 'T with get + member Item : Val -> 'T with get - member TryFind: Val -> 'T option + member TryFind : Val -> 'T option - member ContainsVal: Val -> bool + member ContainsVal : Val -> bool - member Add: Val -> 'T -> ValMap<'T> + member Add : Val -> 'T -> ValMap<'T> - member Remove: Val -> ValMap<'T> + member Remove : Val -> ValMap<'T> - member IsEmpty: bool + member IsEmpty : bool - static member Empty: ValMap<'T> + static member Empty : ValMap<'T> - static member OfList: (Val * 'T) list -> ValMap<'T> + static member OfList : (Val * 'T) list -> ValMap<'T> /// Mutable data structure mapping Val's to T based on stamp keys [] type ValHash<'T> = - member Values: seq<'T> + member Values : seq<'T> - member TryFind: Val -> 'T option + member TryFind : Val -> 'T option - member Add: Val * 'T -> unit + member Add : Val * 'T -> unit - static member Create: unit -> ValHash<'T> + static member Create : unit -> ValHash<'T> /// Maps Val's to list of T based on stamp keys [] type ValMultiMap<'T> = - member ContainsKey: Val -> bool + member ContainsKey : Val -> bool - member Find: Val -> 'T list + member Find : Val -> 'T list - member Add: Val * 'T -> ValMultiMap<'T> + member Add : Val * 'T -> ValMultiMap<'T> - member Remove: Val -> ValMultiMap<'T> + member Remove : Val -> ValMultiMap<'T> - member Contents: StampMap<'T list> + member Contents : StampMap<'T list> - static member Empty: ValMultiMap<'T> + static member Empty : ValMultiMap<'T> /// Maps type parameters to entries based on stamp keys [] type TyparMap<'T> = /// Get the entry for the given type parameter - member Item: Typar -> 'T with get + member Item : Typar -> 'T with get /// Determine is the map contains an entry for the given type parameter - member ContainsKey: Typar -> bool + member ContainsKey : Typar -> bool /// Try to find the entry for the given type parameter - member TryFind: Typar -> 'T option + member TryFind : Typar -> 'T option /// Make a new map, containing a new entry for the given type parameter - member Add: Typar * 'T -> TyparMap<'T> + member Add : Typar * 'T -> TyparMap<'T> /// The empty map - static member Empty: TyparMap<'T> + static member Empty : TyparMap<'T> /// Maps TyconRef to T based on stamp keys [] type TyconRefMap<'T> = /// Get the entry for the given type definition - member Item: TyconRef -> 'T with get + member Item : TyconRef -> 'T with get /// Try to find the entry for the given type definition - member TryFind: TyconRef -> 'T option + member TryFind : TyconRef -> 'T option /// Determine is the map contains an entry for the given type definition - member ContainsKey: TyconRef -> bool + member ContainsKey : TyconRef -> bool /// Make a new map, containing a new entry for the given type definition - member Add: TyconRef -> 'T -> TyconRefMap<'T> + member Add : TyconRef -> 'T -> TyconRefMap<'T> /// Remove the entry for the given type definition, if any - member Remove: TyconRef -> TyconRefMap<'T> + member Remove : TyconRef -> TyconRefMap<'T> /// Determine if the map is empty - member IsEmpty: bool + member IsEmpty : bool /// The empty map - static member Empty: TyconRefMap<'T> + static member Empty : TyconRefMap<'T> /// Make a new map, containing entries for the given type definitions - static member OfList: (TyconRef * 'T) list -> TyconRefMap<'T> + static member OfList : (TyconRef * 'T) list -> TyconRefMap<'T> /// Maps TyconRef to list of T based on stamp keys [] type TyconRefMultiMap<'T> = /// Fetch the entries for the given type definition - member Find: TyconRef -> 'T list + member Find : TyconRef -> 'T list /// Make a new map, containing a new entry for the given type definition - member Add: TyconRef * 'T -> TyconRefMultiMap<'T> + member Add : TyconRef * 'T -> TyconRefMultiMap<'T> /// The empty map - static member Empty: TyconRefMultiMap<'T> + static member Empty : TyconRefMultiMap<'T> /// Make a new map, containing a entries for the given type definitions - static member OfList: (TyconRef * 'T) list -> TyconRefMultiMap<'T> + static member OfList : (TyconRef * 'T) list -> TyconRefMultiMap<'T> /// An ordering for value definitions, based on stamp val valOrder: IComparer @@ -501,10 +506,10 @@ val recdFieldRefOrder: IComparer val typarOrder: IComparer /// Equality for type definition references -val tyconRefEq: TcGlobals -> TyconRef -> TyconRef -> bool +val tyconRefEq : TcGlobals -> TyconRef -> TyconRef -> bool /// Equality for value references -val valRefEq: TcGlobals -> ValRef -> ValRef -> bool +val valRefEq : TcGlobals -> ValRef -> ValRef -> bool //------------------------------------------------------------------------- // Operations on types: substitution @@ -522,186 +527,186 @@ type ValRemap = ValMap /// Represents a combination of substitutions/instantiations where things replace other things during remapping [] type Remap = - { tpinst: TyparInst + { tpinst : TyparInst valRemap: ValRemap - tyconRefRemap: TyconRefRemap + tyconRefRemap : TyconRefRemap removeTraitSolutions: bool } - static member Empty: Remap + static member Empty : Remap -val addTyconRefRemap: TyconRef -> TyconRef -> Remap -> Remap +val addTyconRefRemap : TyconRef -> TyconRef -> Remap -> Remap -val addValRemap: Val -> Val -> Remap -> Remap +val addValRemap : Val -> Val -> Remap -> Remap -val mkTyparInst: Typars -> TTypes -> TyparInst +val mkTyparInst : Typars -> TTypes -> TyparInst -val mkTyconRefInst: TyconRef -> TypeInst -> TyparInst +val mkTyconRefInst : TyconRef -> TypeInst -> TyparInst -val emptyTyparInst: TyparInst +val emptyTyparInst : TyparInst -val instType: TyparInst -> TType -> TType +val instType : TyparInst -> TType -> TType -val instTypes: TyparInst -> TypeInst -> TypeInst +val instTypes : TyparInst -> TypeInst -> TypeInst -val instTyparConstraints: TyparInst -> TyparConstraint list -> TyparConstraint list +val instTyparConstraints : TyparInst -> TyparConstraint list -> TyparConstraint list -val instTrait: TyparInst -> TraitConstraintInfo -> TraitConstraintInfo +val instTrait : TyparInst -> TraitConstraintInfo -> TraitConstraintInfo /// From typars to types -val generalizeTypars: Typars -> TypeInst +val generalizeTypars : Typars -> TypeInst -val generalizeTyconRef: TyconRef -> TTypes * TType +val generalizeTyconRef : TyconRef -> TTypes * TType -val generalizedTyconRef: TyconRef -> TType +val generalizedTyconRef : TyconRef -> TType -val mkTyparToTyparRenaming: Typars -> Typars -> TyparInst * TTypes +val mkTyparToTyparRenaming : Typars -> Typars -> TyparInst * TTypes //------------------------------------------------------------------------- // See through typar equations from inference and/or type abbreviation equations. //------------------------------------------------------------------------- -val reduceTyconRefAbbrev: TyconRef -> TypeInst -> TType +val reduceTyconRefAbbrev : TyconRef -> TypeInst -> TType -val reduceTyconRefMeasureableOrProvided: TcGlobals -> TyconRef -> TypeInst -> TType +val reduceTyconRefMeasureableOrProvided : TcGlobals -> TyconRef -> TypeInst -> TType -val reduceTyconRefAbbrevMeasureable: TyconRef -> Measure +val reduceTyconRefAbbrevMeasureable : TyconRef -> Measure /// set bool to 'true' to allow shortcutting of type parameter equation chains during stripping -val stripTyEqnsA: TcGlobals -> bool -> TType -> TType +val stripTyEqnsA : TcGlobals -> bool -> TType -> TType -val stripTyEqns: TcGlobals -> TType -> TType +val stripTyEqns : TcGlobals -> TType -> TType -val stripTyEqnsAndMeasureEqns: TcGlobals -> TType -> TType +val stripTyEqnsAndMeasureEqns : TcGlobals -> TType -> TType -val tryNormalizeMeasureInType: TcGlobals -> TType -> TType +val tryNormalizeMeasureInType : TcGlobals -> TType -> TType /// See through F# exception abbreviations -val stripExnEqns: TyconRef -> Tycon +val stripExnEqns : TyconRef -> Tycon -val recdFieldsOfExnDefRef: TyconRef -> RecdField list +val recdFieldsOfExnDefRef : TyconRef -> RecdField list -val recdFieldTysOfExnDefRef: TyconRef -> TType list +val recdFieldTysOfExnDefRef : TyconRef -> TType list //------------------------------------------------------------------------- // Analyze types. These all look through type abbreviations and // inference equations, i.e. are "stripped" //------------------------------------------------------------------------- -val destForallTy: TcGlobals -> TType -> Typars * TType +val destForallTy : TcGlobals -> TType -> Typars * TType -val destFunTy: TcGlobals -> TType -> TType * TType +val destFunTy : TcGlobals -> TType -> TType * TType -val destAnyTupleTy: TcGlobals -> TType -> TupInfo * TTypes +val destAnyTupleTy : TcGlobals -> TType -> TupInfo * TTypes -val destRefTupleTy: TcGlobals -> TType -> TTypes +val destRefTupleTy : TcGlobals -> TType -> TTypes -val destStructTupleTy: TcGlobals -> TType -> TTypes +val destStructTupleTy : TcGlobals -> TType -> TTypes -val destTyparTy: TcGlobals -> TType -> Typar +val destTyparTy : TcGlobals -> TType -> Typar -val destAnyParTy: TcGlobals -> TType -> Typar +val destAnyParTy : TcGlobals -> TType -> Typar -val destMeasureTy: TcGlobals -> TType -> Measure +val destMeasureTy : TcGlobals -> TType -> Measure -val tryDestForallTy: TcGlobals -> TType -> Typars * TType +val tryDestForallTy : TcGlobals -> TType -> Typars * TType -val isFunTy: TcGlobals -> TType -> bool +val isFunTy : TcGlobals -> TType -> bool -val isForallTy: TcGlobals -> TType -> bool +val isForallTy : TcGlobals -> TType -> bool -val isAnyTupleTy: TcGlobals -> TType -> bool +val isAnyTupleTy : TcGlobals -> TType -> bool -val isRefTupleTy: TcGlobals -> TType -> bool +val isRefTupleTy : TcGlobals -> TType -> bool -val isStructTupleTy: TcGlobals -> TType -> bool +val isStructTupleTy : TcGlobals -> TType -> bool -val isStructAnonRecdTy: TcGlobals -> TType -> bool +val isStructAnonRecdTy : TcGlobals -> TType -> bool -val isAnonRecdTy: TcGlobals -> TType -> bool +val isAnonRecdTy : TcGlobals -> TType -> bool -val isUnionTy: TcGlobals -> TType -> bool +val isUnionTy : TcGlobals -> TType -> bool -val isReprHiddenTy: TcGlobals -> TType -> bool +val isReprHiddenTy : TcGlobals -> TType -> bool -val isFSharpObjModelTy: TcGlobals -> TType -> bool +val isFSharpObjModelTy : TcGlobals -> TType -> bool -val isRecdTy: TcGlobals -> TType -> bool +val isRecdTy : TcGlobals -> TType -> bool -val isFSharpStructOrEnumTy: TcGlobals -> TType -> bool +val isFSharpStructOrEnumTy : TcGlobals -> TType -> bool -val isFSharpEnumTy: TcGlobals -> TType -> bool +val isFSharpEnumTy : TcGlobals -> TType -> bool -val isTyparTy: TcGlobals -> TType -> bool +val isTyparTy : TcGlobals -> TType -> bool -val isAnyParTy: TcGlobals -> TType -> bool +val isAnyParTy : TcGlobals -> TType -> bool -val tryAnyParTy: TcGlobals -> TType -> ValueOption +val tryAnyParTy : TcGlobals -> TType -> ValueOption -val tryAnyParTyOption: TcGlobals -> TType -> Typar option +val tryAnyParTyOption : TcGlobals -> TType -> Typar option -val isMeasureTy: TcGlobals -> TType -> bool +val isMeasureTy : TcGlobals -> TType -> bool -val mkAppTy: TyconRef -> TypeInst -> TType +val mkAppTy : TyconRef -> TypeInst -> TType -val mkProvenUnionCaseTy: UnionCaseRef -> TypeInst -> TType +val mkProvenUnionCaseTy : UnionCaseRef -> TypeInst -> TType -val isProvenUnionCaseTy: TType -> bool +val isProvenUnionCaseTy : TType -> bool -val isAppTy: TcGlobals -> TType -> bool +val isAppTy : TcGlobals -> TType -> bool -val tryAppTy: TcGlobals -> TType -> ValueOption +val tryAppTy : TcGlobals -> TType -> ValueOption -val destAppTy: TcGlobals -> TType -> TyconRef * TypeInst +val destAppTy : TcGlobals -> TType -> TyconRef * TypeInst -val tcrefOfAppTy: TcGlobals -> TType -> TyconRef +val tcrefOfAppTy : TcGlobals -> TType -> TyconRef -val tryTcrefOfAppTy: TcGlobals -> TType -> ValueOption +val tryTcrefOfAppTy : TcGlobals -> TType -> ValueOption -val tryDestTyparTy: TcGlobals -> TType -> ValueOption +val tryDestTyparTy : TcGlobals -> TType -> ValueOption -val tryDestFunTy: TcGlobals -> TType -> ValueOption<(TType * TType)> +val tryDestFunTy : TcGlobals -> TType -> ValueOption<(TType * TType)> -val tryDestAnonRecdTy: TcGlobals -> TType -> ValueOption +val tryDestAnonRecdTy : TcGlobals -> TType -> ValueOption -val argsOfAppTy: TcGlobals -> TType -> TypeInst +val argsOfAppTy : TcGlobals -> TType -> TypeInst -val mkInstForAppTy: TcGlobals -> TType -> TyparInst +val mkInstForAppTy : TcGlobals -> TType -> TyparInst /// Try to get a TyconRef for a type without erasing type abbreviations -val tryNiceEntityRefOfTy: TType -> ValueOption +val tryNiceEntityRefOfTy : TType -> ValueOption -val tryNiceEntityRefOfTyOption: TType -> TyconRef option +val tryNiceEntityRefOfTyOption : TType -> TyconRef option -val domainOfFunTy: TcGlobals -> TType -> TType +val domainOfFunTy : TcGlobals -> TType -> TType -val rangeOfFunTy: TcGlobals -> TType -> TType +val rangeOfFunTy : TcGlobals -> TType -> TType -val stripFunTy: TcGlobals -> TType -> TType list * TType +val stripFunTy : TcGlobals -> TType -> TType list * TType -val stripFunTyN: TcGlobals -> int -> TType -> TType list * TType +val stripFunTyN : TcGlobals -> int -> TType -> TType list * TType -val applyForallTy: TcGlobals -> TType -> TypeInst -> TType +val applyForallTy : TcGlobals -> TType -> TypeInst -> TType -val tryDestAnyTupleTy: TcGlobals -> TType -> TupInfo * TType list +val tryDestAnyTupleTy : TcGlobals -> TType -> TupInfo * TType list -val tryDestRefTupleTy: TcGlobals -> TType -> TType list +val tryDestRefTupleTy : TcGlobals -> TType -> TType list //------------------------------------------------------------------------- // Compute actual types of union cases and fields given an instantiation // of the generic type parameters of the enclosing type. //------------------------------------------------------------------------- -val actualResultTyOfUnionCase: TypeInst -> UnionCaseRef -> TType +val actualResultTyOfUnionCase : TypeInst -> UnionCaseRef -> TType -val actualTysOfUnionCaseFields: TyparInst -> UnionCaseRef -> TType list +val actualTysOfUnionCaseFields : TyparInst -> UnionCaseRef -> TType list -val actualTysOfInstanceRecdFields: TyparInst -> TyconRef -> TType list +val actualTysOfInstanceRecdFields : TyparInst -> TyconRef -> TType list -val actualTyOfRecdField: TyparInst -> RecdField -> TType +val actualTyOfRecdField : TyparInst -> RecdField -> TType -val actualTyOfRecdFieldRef: RecdFieldRef -> TypeInst -> TType +val actualTyOfRecdFieldRef : RecdFieldRef -> TypeInst -> TType -val actualTyOfRecdFieldForTycon: Tycon -> TypeInst -> RecdField -> TType +val actualTyOfRecdFieldForTycon : Tycon -> TypeInst -> RecdField -> TType //------------------------------------------------------------------------- // Top types: guaranteed to be compiled to .NET methods, and must be able to @@ -715,96 +720,96 @@ type CurriedArgInfos = UncurriedArgInfos list type TraitWitnessInfos = TraitWitnessInfo list -val destTopForallTy: TcGlobals -> ValReprInfo -> TType -> Typars * TType +val destTopForallTy : TcGlobals -> ValReprInfo -> TType -> Typars * TType -val GetTopTauTypeInFSharpForm: TcGlobals -> ArgReprInfo list list -> TType -> range -> CurriedArgInfos * TType +val GetTopTauTypeInFSharpForm : TcGlobals -> ArgReprInfo list list -> TType -> range -> CurriedArgInfos * TType -val GetTopValTypeInFSharpForm: TcGlobals -> ValReprInfo -> TType -> range -> Typars * CurriedArgInfos * TType * ArgReprInfo +val GetTopValTypeInFSharpForm : TcGlobals -> ValReprInfo -> TType -> range -> Typars * CurriedArgInfos * TType * ArgReprInfo -val IsCompiledAsStaticProperty: TcGlobals -> Val -> bool +val IsCompiledAsStaticProperty : TcGlobals -> Val -> bool -val IsCompiledAsStaticPropertyWithField: TcGlobals -> Val -> bool +val IsCompiledAsStaticPropertyWithField : TcGlobals -> Val -> bool -val GetTopValTypeInCompiledForm: TcGlobals -> ValReprInfo -> int -> TType -> range -> Typars * TraitWitnessInfos * CurriedArgInfos * TType option * ArgReprInfo +val GetTopValTypeInCompiledForm : TcGlobals -> ValReprInfo -> int -> TType -> range -> Typars * TraitWitnessInfos * CurriedArgInfos * TType option * ArgReprInfo -val GetFSharpViewOfReturnType: TcGlobals -> TType option -> TType +val GetFSharpViewOfReturnType : TcGlobals -> TType option -> TType -val NormalizeDeclaredTyparsForEquiRecursiveInference: TcGlobals -> Typars -> Typars +val NormalizeDeclaredTyparsForEquiRecursiveInference : TcGlobals -> Typars -> Typars //------------------------------------------------------------------------- // Compute the return type after an application //------------------------------------------------------------------------- -val applyTys: TcGlobals -> TType -> TType list * 'T list -> TType +val applyTys : TcGlobals -> TType -> TType list * 'T list -> TType //------------------------------------------------------------------------- // Compute free variables in types //------------------------------------------------------------------------- -val emptyFreeTypars: FreeTypars +val emptyFreeTypars : FreeTypars -val unionFreeTypars: FreeTypars -> FreeTypars -> FreeTypars +val unionFreeTypars : FreeTypars -> FreeTypars -> FreeTypars -val emptyFreeTycons: FreeTycons +val emptyFreeTycons : FreeTycons -val unionFreeTycons: FreeTycons -> FreeTycons -> FreeTycons +val unionFreeTycons : FreeTycons -> FreeTycons -> FreeTycons -val emptyFreeTyvars: FreeTyvars +val emptyFreeTyvars : FreeTyvars -val isEmptyFreeTyvars: FreeTyvars -> bool +val isEmptyFreeTyvars : FreeTyvars -> bool -val unionFreeTyvars: FreeTyvars -> FreeTyvars -> FreeTyvars +val unionFreeTyvars : FreeTyvars -> FreeTyvars -> FreeTyvars -val emptyFreeLocals: FreeLocals +val emptyFreeLocals : FreeLocals -val unionFreeLocals: FreeLocals -> FreeLocals -> FreeLocals +val unionFreeLocals : FreeLocals -> FreeLocals -> FreeLocals type FreeVarOptions -val CollectLocalsNoCaching: FreeVarOptions +val CollectLocalsNoCaching : FreeVarOptions -val CollectTyparsNoCaching: FreeVarOptions +val CollectTyparsNoCaching : FreeVarOptions -val CollectTyparsAndLocalsNoCaching: FreeVarOptions +val CollectTyparsAndLocalsNoCaching : FreeVarOptions -val CollectTyparsAndLocals: FreeVarOptions +val CollectTyparsAndLocals : FreeVarOptions -val CollectLocals: FreeVarOptions +val CollectLocals : FreeVarOptions -val CollectTypars: FreeVarOptions +val CollectTypars : FreeVarOptions -val CollectAllNoCaching: FreeVarOptions +val CollectAllNoCaching : FreeVarOptions -val CollectAll: FreeVarOptions +val CollectAll : FreeVarOptions -val accFreeInTypes: FreeVarOptions -> TType list -> FreeTyvars -> FreeTyvars +val accFreeInTypes : FreeVarOptions -> TType list -> FreeTyvars -> FreeTyvars -val accFreeInType: FreeVarOptions -> TType -> FreeTyvars -> FreeTyvars +val accFreeInType : FreeVarOptions -> TType -> FreeTyvars -> FreeTyvars -val accFreeInTypars: FreeVarOptions -> Typars -> FreeTyvars -> FreeTyvars +val accFreeInTypars : FreeVarOptions -> Typars -> FreeTyvars -> FreeTyvars -val freeInType: FreeVarOptions -> TType -> FreeTyvars +val freeInType : FreeVarOptions -> TType -> FreeTyvars -val freeInTypes: FreeVarOptions -> TType list -> FreeTyvars +val freeInTypes : FreeVarOptions -> TType list -> FreeTyvars -val freeInVal: FreeVarOptions -> Val -> FreeTyvars +val freeInVal : FreeVarOptions -> Val -> FreeTyvars // This one puts free variables in canonical left-to-right order. -val freeInTypeLeftToRight: TcGlobals -> bool -> TType -> Typars +val freeInTypeLeftToRight : TcGlobals -> bool -> TType -> Typars -val freeInTypesLeftToRight: TcGlobals -> bool -> TType list -> Typars +val freeInTypesLeftToRight : TcGlobals -> bool -> TType list -> Typars -val freeInTypesLeftToRightSkippingConstraints: TcGlobals -> TType list -> Typars +val freeInTypesLeftToRightSkippingConstraints : TcGlobals -> TType list -> Typars val freeInModuleTy: ModuleOrNamespaceType -> FreeTyvars -val isDimensionless: TcGlobals -> TType -> bool +val isDimensionless : TcGlobals -> TType -> bool //--------------------------------------------------------------------------- // TType modifications and comparisons //--------------------------------------------------------------------------- -val stripMeasuresFromTType: TcGlobals -> TType -> TType +val stripMeasuresFromTType : TcGlobals -> TType -> TType //------------------------------------------------------------------------- // Equivalence of types (up to substitution of type variables in the left-hand type) @@ -815,102 +820,102 @@ type TypeEquivEnv = { EquivTypars: TyparMap EquivTycons: TyconRefRemap } - static member Empty: TypeEquivEnv + static member Empty : TypeEquivEnv - member BindEquivTypars: Typars -> Typars -> TypeEquivEnv + member BindEquivTypars : Typars -> Typars -> TypeEquivEnv - static member FromTyparInst: TyparInst -> TypeEquivEnv + static member FromTyparInst : TyparInst -> TypeEquivEnv - static member FromEquivTypars: Typars -> Typars -> TypeEquivEnv + static member FromEquivTypars : Typars -> Typars -> TypeEquivEnv -val traitsAEquivAux: Erasure -> TcGlobals -> TypeEquivEnv -> TraitConstraintInfo -> TraitConstraintInfo -> bool +val traitsAEquivAux : Erasure -> TcGlobals -> TypeEquivEnv -> TraitConstraintInfo -> TraitConstraintInfo -> bool -val traitsAEquiv: TcGlobals -> TypeEquivEnv -> TraitConstraintInfo -> TraitConstraintInfo -> bool +val traitsAEquiv : TcGlobals -> TypeEquivEnv -> TraitConstraintInfo -> TraitConstraintInfo -> bool -val traitKeysAEquivAux: Erasure -> TcGlobals -> TypeEquivEnv -> TraitWitnessInfo -> TraitWitnessInfo -> bool +val traitKeysAEquivAux : Erasure -> TcGlobals -> TypeEquivEnv -> TraitWitnessInfo -> TraitWitnessInfo -> bool -val traitKeysAEquiv: TcGlobals -> TypeEquivEnv -> TraitWitnessInfo -> TraitWitnessInfo -> bool +val traitKeysAEquiv : TcGlobals -> TypeEquivEnv -> TraitWitnessInfo -> TraitWitnessInfo -> bool -val typarConstraintsAEquivAux: Erasure -> TcGlobals -> TypeEquivEnv -> TyparConstraint -> TyparConstraint -> bool +val typarConstraintsAEquivAux : Erasure -> TcGlobals -> TypeEquivEnv -> TyparConstraint -> TyparConstraint -> bool -val typarConstraintsAEquiv: TcGlobals -> TypeEquivEnv -> TyparConstraint -> TyparConstraint -> bool +val typarConstraintsAEquiv : TcGlobals -> TypeEquivEnv -> TyparConstraint -> TyparConstraint -> bool -val typarsAEquiv: TcGlobals -> TypeEquivEnv -> Typars -> Typars -> bool +val typarsAEquiv : TcGlobals -> TypeEquivEnv -> Typars -> Typars -> bool -val typeAEquivAux: Erasure -> TcGlobals -> TypeEquivEnv -> TType -> TType -> bool +val typeAEquivAux : Erasure -> TcGlobals -> TypeEquivEnv -> TType -> TType -> bool -val typeAEquiv: TcGlobals -> TypeEquivEnv -> TType -> TType -> bool +val typeAEquiv : TcGlobals -> TypeEquivEnv -> TType -> TType -> bool -val returnTypesAEquivAux: Erasure -> TcGlobals -> TypeEquivEnv -> TType option -> TType option -> bool +val returnTypesAEquivAux : Erasure -> TcGlobals -> TypeEquivEnv -> TType option -> TType option -> bool -val returnTypesAEquiv: TcGlobals -> TypeEquivEnv -> TType option -> TType option -> bool +val returnTypesAEquiv : TcGlobals -> TypeEquivEnv -> TType option -> TType option -> bool -val tcrefAEquiv: TcGlobals -> TypeEquivEnv -> TyconRef -> TyconRef -> bool +val tcrefAEquiv : TcGlobals -> TypeEquivEnv -> TyconRef -> TyconRef -> bool -val valLinkageAEquiv: TcGlobals -> TypeEquivEnv -> Val -> Val -> bool +val valLinkageAEquiv : TcGlobals -> TypeEquivEnv -> Val -> Val -> bool -val anonInfoEquiv: AnonRecdTypeInfo -> AnonRecdTypeInfo -> bool +val anonInfoEquiv : AnonRecdTypeInfo -> AnonRecdTypeInfo -> bool //------------------------------------------------------------------------- // Erasure of types wrt units-of-measure and type providers //------------------------------------------------------------------------- // Return true if this type is a nominal type that is an erased provided type -val isErasedType: TcGlobals -> TType -> bool +val isErasedType : TcGlobals -> TType -> bool // Return all components (units-of-measure, and types) of this type that would be erased -val getErasedTypes: TcGlobals -> TType -> TType list +val getErasedTypes : TcGlobals -> TType -> TType list //------------------------------------------------------------------------- // Unit operations //------------------------------------------------------------------------- -val MeasurePower: Measure -> int -> Measure +val MeasurePower : Measure -> int -> Measure -val ListMeasureVarOccsWithNonZeroExponents: Measure -> (Typar * Rational) list +val ListMeasureVarOccsWithNonZeroExponents : Measure -> (Typar * Rational) list -val ListMeasureConOccsWithNonZeroExponents: TcGlobals -> bool -> Measure -> (TyconRef * Rational) list +val ListMeasureConOccsWithNonZeroExponents : TcGlobals -> bool -> Measure -> (TyconRef * Rational) list -val ProdMeasures: Measure list -> Measure +val ProdMeasures : Measure list -> Measure -val MeasureVarExponent: Typar -> Measure -> Rational +val MeasureVarExponent : Typar -> Measure -> Rational -val MeasureExprConExponent: TcGlobals -> bool -> TyconRef -> Measure -> Rational +val MeasureExprConExponent : TcGlobals -> bool -> TyconRef -> Measure -> Rational -val normalizeMeasure: TcGlobals -> Measure -> Measure +val normalizeMeasure : TcGlobals -> Measure -> Measure //------------------------------------------------------------------------- // Members //------------------------------------------------------------------------- -val GetTypeOfMemberInFSharpForm: TcGlobals -> ValRef -> Typars * CurriedArgInfos * TType * ArgReprInfo +val GetTypeOfMemberInFSharpForm : TcGlobals -> ValRef -> Typars * CurriedArgInfos * TType * ArgReprInfo -val GetTypeOfMemberInMemberForm: TcGlobals -> ValRef -> Typars * TraitWitnessInfos * CurriedArgInfos * TType option * ArgReprInfo +val GetTypeOfMemberInMemberForm : TcGlobals -> ValRef -> Typars * TraitWitnessInfos * CurriedArgInfos * TType option * ArgReprInfo -val GetTypeOfIntrinsicMemberInCompiledForm: TcGlobals -> ValRef -> Typars * TraitWitnessInfos * CurriedArgInfos * TType option * ArgReprInfo +val GetTypeOfIntrinsicMemberInCompiledForm : TcGlobals -> ValRef -> Typars * TraitWitnessInfos * CurriedArgInfos * TType option * ArgReprInfo -val GetMemberTypeInMemberForm: TcGlobals -> SynMemberFlags -> ValReprInfo -> int -> TType -> range -> Typars * TraitWitnessInfos * CurriedArgInfos * TType option * ArgReprInfo +val GetMemberTypeInMemberForm : TcGlobals -> MemberFlags -> ValReprInfo -> int -> TType -> range -> Typars * TraitWitnessInfos * CurriedArgInfos * TType option * ArgReprInfo /// Returns (parentTypars,memberParentTypars,memberMethodTypars,memberToParentInst,tinst) -val PartitionValTyparsForApparentEnclosingType: TcGlobals -> Val -> (Typars * Typars * Typars * TyparInst * TType list) option +val PartitionValTyparsForApparentEnclosingType : TcGlobals -> Val -> (Typars * Typars * Typars * TyparInst * TType list) option /// Returns (parentTypars,memberParentTypars,memberMethodTypars,memberToParentInst,tinst) -val PartitionValTypars: TcGlobals -> Val -> (Typars * Typars * Typars * TyparInst * TType list) option +val PartitionValTypars : TcGlobals -> Val -> (Typars * Typars * Typars * TyparInst * TType list) option /// Returns (parentTypars,memberParentTypars,memberMethodTypars,memberToParentInst,tinst) -val PartitionValRefTypars: TcGlobals -> ValRef -> (Typars * Typars * Typars * TyparInst * TType list) option +val PartitionValRefTypars : TcGlobals -> ValRef -> (Typars * Typars * Typars * TyparInst * TType list) option /// Count the number of type parameters on the enclosing type val CountEnclosingTyparsOfActualParentOfVal: Val -> int -val ReturnTypeOfPropertyVal: TcGlobals -> Val -> TType +val ReturnTypeOfPropertyVal : TcGlobals -> Val -> TType -val ArgInfosOfPropertyVal: TcGlobals -> Val -> UncurriedArgInfos +val ArgInfosOfPropertyVal : TcGlobals -> Val -> UncurriedArgInfos val ArgInfosOfMember: TcGlobals -> ValRef -> CurriedArgInfos -val GetMemberCallInfo: TcGlobals -> ValRef * ValUseFlag -> int * bool * bool * bool * bool * bool * bool * bool +val GetMemberCallInfo : TcGlobals -> ValRef * ValUseFlag -> int * bool * bool * bool * bool * bool * bool * bool //------------------------------------------------------------------------- // Printing @@ -920,40 +925,40 @@ type TyparConstraintsWithTypars = (Typar * TyparConstraint) list module PrettyTypes = - val NeedsPrettyTyparName: Typar -> bool + val NeedsPrettyTyparName : Typar -> bool - val NewPrettyTypars: TyparInst -> Typars -> string list -> Typars * TyparInst + val NewPrettyTypars : TyparInst -> Typars -> string list -> Typars * TyparInst - val PrettyTyparNames: (Typar -> bool) -> string list -> Typars -> string list + val PrettyTyparNames : (Typar -> bool) -> string list -> Typars -> string list - val PrettifyType: TcGlobals -> TType -> TType * TyparConstraintsWithTypars + val PrettifyType : TcGlobals -> TType -> TType * TyparConstraintsWithTypars - val PrettifyInstAndTyparsAndType: TcGlobals -> TyparInst * Typars * TType -> (TyparInst * Typars * TType) * TyparConstraintsWithTypars + val PrettifyInstAndTyparsAndType : TcGlobals -> TyparInst * Typars * TType -> (TyparInst * Typars * TType) * TyparConstraintsWithTypars - val PrettifyTypePair: TcGlobals -> TType * TType -> (TType * TType) * TyparConstraintsWithTypars + val PrettifyTypePair : TcGlobals -> TType * TType -> (TType * TType) * TyparConstraintsWithTypars - val PrettifyTypes: TcGlobals -> TTypes -> TTypes * TyparConstraintsWithTypars + val PrettifyTypes : TcGlobals -> TTypes -> TTypes * TyparConstraintsWithTypars /// same as PrettifyTypes, but allows passing the types along with a discriminant value /// useful to prettify many types that need to be sorted out after prettifying operation /// took place. - val PrettifyDiscriminantAndTypePairs: TcGlobals -> ('Discriminant * TType) list -> ('Discriminant * TType) list * TyparConstraintsWithTypars + val PrettifyDiscriminantAndTypePairs : TcGlobals -> ('Discriminant * TType) list -> ('Discriminant * TType) list * TyparConstraintsWithTypars - val PrettifyInst: TcGlobals -> TyparInst -> TyparInst * TyparConstraintsWithTypars + val PrettifyInst : TcGlobals -> TyparInst -> TyparInst * TyparConstraintsWithTypars - val PrettifyInstAndType: TcGlobals -> TyparInst * TType -> (TyparInst * TType) * TyparConstraintsWithTypars + val PrettifyInstAndType : TcGlobals -> TyparInst * TType -> (TyparInst * TType) * TyparConstraintsWithTypars - val PrettifyInstAndTypes: TcGlobals -> TyparInst * TTypes -> (TyparInst * TTypes) * TyparConstraintsWithTypars + val PrettifyInstAndTypes : TcGlobals -> TyparInst * TTypes -> (TyparInst * TTypes) * TyparConstraintsWithTypars - val PrettifyInstAndSig: TcGlobals -> TyparInst * TTypes * TType -> (TyparInst * TTypes * TType) * TyparConstraintsWithTypars + val PrettifyInstAndSig : TcGlobals -> TyparInst * TTypes * TType -> (TyparInst * TTypes * TType) * TyparConstraintsWithTypars - val PrettifyCurriedTypes: TcGlobals -> TType list list -> TType list list * TyparConstraintsWithTypars + val PrettifyCurriedTypes : TcGlobals -> TType list list -> TType list list * TyparConstraintsWithTypars - val PrettifyCurriedSigTypes: TcGlobals -> TType list list * TType -> (TType list list * TType) * TyparConstraintsWithTypars + val PrettifyCurriedSigTypes : TcGlobals -> TType list list * TType -> (TType list list * TType) * TyparConstraintsWithTypars - val PrettifyInstAndUncurriedSig: TcGlobals -> TyparInst * UncurriedArgInfos * TType -> (TyparInst * UncurriedArgInfos * TType) * TyparConstraintsWithTypars + val PrettifyInstAndUncurriedSig : TcGlobals -> TyparInst * UncurriedArgInfos * TType -> (TyparInst * UncurriedArgInfos * TType) * TyparConstraintsWithTypars - val PrettifyInstAndCurriedSig: TcGlobals -> TyparInst * TTypes * CurriedArgInfos * TType -> (TyparInst * TTypes * CurriedArgInfos * TType) * TyparConstraintsWithTypars + val PrettifyInstAndCurriedSig : TcGlobals -> TyparInst * TTypes * CurriedArgInfos * TType -> (TyparInst * TTypes * CurriedArgInfos * TType) * TyparConstraintsWithTypars /// Describes how generic type parameters in a type will be formatted during printing type GenericParameterStyle = @@ -966,12 +971,12 @@ type GenericParameterStyle = [] type DisplayEnv = - { includeStaticParametersInTypeNames: bool + { includeStaticParametersInTypeNames : bool openTopPathsSorted: Lazy openTopPathsRaw: string list list shortTypeNames: bool suppressNestedTypes: bool - maxMembers: int option + maxMembers : int option showObsoleteMembers: bool showHiddenMembers: bool showTyparBinding: bool @@ -986,122 +991,116 @@ type DisplayEnv = showConstraintTyparAnnotations:bool abbreviateAdditionalConstraints: bool showTyparDefaultConstraints: bool - /// If set, signatures will be rendered with XML documentation comments for members if they exist - /// Defaults to false, expected use cases include things like signature file generation. - showDocumentation: bool shrinkOverloads: bool - printVerboseSignatures: bool - escapeKeywordNames: bool + printVerboseSignatures : bool g: TcGlobals contextAccessibility: Accessibility - generatedValueLayout: (Val -> Layout option) + generatedValueLayout: (Val -> layout option) genericParameterStyle: GenericParameterStyle } member SetOpenPaths: string list list -> DisplayEnv static member Empty: TcGlobals -> DisplayEnv - member AddAccessibility: Accessibility -> DisplayEnv - - member AddOpenPath: string list -> DisplayEnv + member AddAccessibility : Accessibility -> DisplayEnv - member AddOpenModuleOrNamespace: ModuleOrNamespaceRef -> DisplayEnv + member AddOpenPath : string list -> DisplayEnv - member UseGenericParameterStyle: GenericParameterStyle -> DisplayEnv + member AddOpenModuleOrNamespace : ModuleOrNamespaceRef -> DisplayEnv - static member InitialForSigFileGeneration: TcGlobals -> DisplayEnv + member UseGenericParameterStyle : GenericParameterStyle -> DisplayEnv -val tagEntityRefName: xref: EntityRef -> name: string -> TaggedText +val tagEntityRefName: xref: EntityRef -> name: string -> StructuredFormat.TaggedText /// Return the full text for an item as we want it displayed to the user as a fully qualified entity -val fullDisplayTextOfModRef: ModuleOrNamespaceRef -> string +val fullDisplayTextOfModRef : ModuleOrNamespaceRef -> string -val fullDisplayTextOfParentOfModRef: ModuleOrNamespaceRef -> ValueOption +val fullDisplayTextOfParentOfModRef : ModuleOrNamespaceRef -> ValueOption -val fullDisplayTextOfValRef: ValRef -> string +val fullDisplayTextOfValRef : ValRef -> string -val fullDisplayTextOfValRefAsLayout: ValRef -> Layout +val fullDisplayTextOfValRefAsLayout : ValRef -> StructuredFormat.Layout -val fullDisplayTextOfTyconRef: TyconRef -> string +val fullDisplayTextOfTyconRef : TyconRef -> string -val fullDisplayTextOfTyconRefAsLayout: TyconRef -> Layout +val fullDisplayTextOfTyconRefAsLayout : TyconRef -> StructuredFormat.Layout -val fullDisplayTextOfExnRef: TyconRef -> string +val fullDisplayTextOfExnRef : TyconRef -> string -val fullDisplayTextOfExnRefAsLayout: TyconRef -> Layout +val fullDisplayTextOfExnRefAsLayout : TyconRef -> StructuredFormat.Layout -val fullDisplayTextOfUnionCaseRef: UnionCaseRef -> string +val fullDisplayTextOfUnionCaseRef : UnionCaseRef -> string -val fullDisplayTextOfRecdFieldRef: RecdFieldRef -> string +val fullDisplayTextOfRecdFieldRef : RecdFieldRef -> string -val ticksAndArgCountTextOfTyconRef: TyconRef -> string +val ticksAndArgCountTextOfTyconRef : TyconRef -> string /// A unique qualified name for each type definition, used to qualify the names of interface implementation methods -val qualifiedMangledNameOfTyconRef: TyconRef -> string -> string +val qualifiedMangledNameOfTyconRef : TyconRef -> string -> string -val qualifiedInterfaceImplementationName: TcGlobals -> TType -> string -> string +val qualifiedInterfaceImplementationName : TcGlobals -> TType -> string -> string -val trimPathByDisplayEnv: DisplayEnv -> string list -> string +val trimPathByDisplayEnv : DisplayEnv -> string list -> string -val prefixOfStaticReq: TyparStaticReq -> string +val prefixOfStaticReq : TyparStaticReq -> string -val prefixOfRigidTypar: Typar -> string +val prefixOfRigidTypar : Typar -> string /// Utilities used in simplifying types for visual presentation module SimplifyTypes = type TypeSimplificationInfo = - { singletons: Typar Zset - inplaceConstraints: Zmap - postfixConstraints: TyparConstraintsWithTypars } + { singletons : Typar Zset + inplaceConstraints : Zmap + postfixConstraints : TyparConstraintsWithTypars } - val typeSimplificationInfo0: TypeSimplificationInfo + val typeSimplificationInfo0 : TypeSimplificationInfo - val CollectInfo: bool -> TType list -> TyparConstraintsWithTypars -> TypeSimplificationInfo + val CollectInfo : bool -> TType list -> TyparConstraintsWithTypars -> TypeSimplificationInfo -val superOfTycon: TcGlobals -> Tycon -> TType +val superOfTycon : TcGlobals -> Tycon -> TType -val abstractSlotValRefsOfTycons: Tycon list -> ValRef list +val abstractSlotValRefsOfTycons : Tycon list -> ValRef list -val abstractSlotValsOfTycons: Tycon list -> Val list +val abstractSlotValsOfTycons : Tycon list -> Val list //------------------------------------------------------------------------- // Free variables in expressions etc. //------------------------------------------------------------------------- -val emptyFreeVars: FreeVars +val emptyFreeVars : FreeVars -val unionFreeVars: FreeVars -> FreeVars -> FreeVars +val unionFreeVars : FreeVars -> FreeVars -> FreeVars -val accFreeInTargets: FreeVarOptions -> DecisionTreeTarget array -> FreeVars -> FreeVars +val accFreeInTargets : FreeVarOptions -> DecisionTreeTarget array -> FreeVars -> FreeVars -val accFreeInExprs: FreeVarOptions -> Exprs -> FreeVars -> FreeVars +val accFreeInExprs : FreeVarOptions -> Exprs -> FreeVars -> FreeVars -val accFreeInSwitchCases: FreeVarOptions -> DecisionTreeCase list -> DecisionTree option -> FreeVars -> FreeVars +val accFreeInSwitchCases : FreeVarOptions -> DecisionTreeCase list -> DecisionTree option -> FreeVars -> FreeVars -val accFreeInDecisionTree: FreeVarOptions -> DecisionTree -> FreeVars -> FreeVars +val accFreeInDecisionTree : FreeVarOptions -> DecisionTree -> FreeVars -> FreeVars /// Get the free variables in a module definition. -val freeInModuleOrNamespace: FreeVarOptions -> ModuleOrNamespaceExpr -> FreeVars +val freeInModuleOrNamespace : FreeVarOptions -> ModuleOrNamespaceExpr -> FreeVars /// Get the free variables in an expression. -val freeInExpr: FreeVarOptions -> Expr -> FreeVars +val freeInExpr : FreeVarOptions -> Expr -> FreeVars /// Get the free variables in the right hand side of a binding. -val freeInBindingRhs: FreeVarOptions -> Binding -> FreeVars +val freeInBindingRhs : FreeVarOptions -> Binding -> FreeVars /// Check if a set of free type variables are all public -val freeTyvarsAllPublic: FreeTyvars -> bool +val freeTyvarsAllPublic : FreeTyvars -> bool /// Check if a set of free variables are all public -val freeVarsAllPublic: FreeVars -> bool +val freeVarsAllPublic : FreeVars -> bool /// Get the mark/range/position information from an expression type Expr with - member Range: range + member Range : range /// Compute the type of an expression from the expression itself -val tyOfExpr: TcGlobals -> Expr -> TType +val tyOfExpr : TcGlobals -> Expr -> TType /// A flag to govern whether arity inference should be type-directed or syntax-directed when /// inferring an arity from a lambda expression. @@ -1111,17 +1110,17 @@ type AllowTypeDirectedDetupling = | No /// Given a (curried) lambda expression, pull off its arguments -val stripTopLambda: Expr * TType -> Typars * Val list list * Expr * TType +val stripTopLambda : Expr * TType -> Typars * Val list list * Expr * TType /// Given a lambda expression, extract the ValReprInfo for its arguments and other details -val InferArityOfExpr: TcGlobals -> AllowTypeDirectedDetupling -> TType -> Attribs list list -> Attribs -> Expr -> ValReprInfo +val InferArityOfExpr : TcGlobals -> AllowTypeDirectedDetupling -> TType -> Attribs list list -> Attribs -> Expr -> ValReprInfo /// Given a lambda binding, extract the ValReprInfo for its arguments and other details -val InferArityOfExprBinding: TcGlobals -> AllowTypeDirectedDetupling -> Val -> Expr -> ValReprInfo +val InferArityOfExprBinding : TcGlobals -> AllowTypeDirectedDetupling -> Val -> Expr -> ValReprInfo /// Mutate a value to indicate it should be considered a local rather than a module-bound definition // REVIEW: this mutation should not be needed -val setValHasNoArity: Val -> Val +val setValHasNoArity : Val -> Val /// Indicate what should happen to value definitions when copying expressions type ValCopyFlag = @@ -1137,43 +1136,43 @@ type ValCopyFlag = | OnlyCloneExprVals /// Remap a reference to a type definition using the given remapping substitution -val remapTyconRef: TyconRefRemap -> TyconRef -> TyconRef +val remapTyconRef : TyconRefRemap -> TyconRef -> TyconRef /// Remap a reference to a union case using the given remapping substitution -val remapUnionCaseRef: TyconRefRemap -> UnionCaseRef -> UnionCaseRef +val remapUnionCaseRef : TyconRefRemap -> UnionCaseRef -> UnionCaseRef /// Remap a reference to a record field using the given remapping substitution -val remapRecdFieldRef: TyconRefRemap -> RecdFieldRef -> RecdFieldRef +val remapRecdFieldRef : TyconRefRemap -> RecdFieldRef -> RecdFieldRef /// Remap a reference to a value using the given remapping substitution -val remapValRef: Remap -> ValRef -> ValRef +val remapValRef : Remap -> ValRef -> ValRef /// Remap an expression using the given remapping substitution -val remapExpr: TcGlobals -> ValCopyFlag -> Remap -> Expr -> Expr +val remapExpr : TcGlobals -> ValCopyFlag -> Remap -> Expr -> Expr /// Remap an attribute using the given remapping substitution -val remapAttrib: TcGlobals -> Remap -> Attrib -> Attrib +val remapAttrib : TcGlobals -> Remap -> Attrib -> Attrib /// Remap a (possible generic) type using the given remapping substitution -val remapPossibleForallTy: TcGlobals -> Remap -> TType -> TType +val remapPossibleForallTy : TcGlobals -> Remap -> TType -> TType /// Copy an entire module or namespace type using the given copying flags -val copyModuleOrNamespaceType: TcGlobals -> ValCopyFlag -> ModuleOrNamespaceType -> ModuleOrNamespaceType +val copyModuleOrNamespaceType : TcGlobals -> ValCopyFlag -> ModuleOrNamespaceType -> ModuleOrNamespaceType /// Copy an entire expression using the given copying flags -val copyExpr: TcGlobals -> ValCopyFlag -> Expr -> Expr +val copyExpr : TcGlobals -> ValCopyFlag -> Expr -> Expr /// Copy an entire implementation file using the given copying flags -val copyImplFile: TcGlobals -> ValCopyFlag -> TypedImplFile -> TypedImplFile +val copyImplFile : TcGlobals -> ValCopyFlag -> TypedImplFile -> TypedImplFile /// Copy a method slot signature, including new generic type parameters if the slot signature represents a generic method -val copySlotSig: SlotSig -> SlotSig +val copySlotSig : SlotSig -> SlotSig /// Instantiate the generic type parameters in a method slot signature, building a new one -val instSlotSig: TyparInst -> SlotSig -> SlotSig +val instSlotSig : TyparInst -> SlotSig -> SlotSig /// Instantiate the generic type parameters in an expression, building a new one -val instExpr: TcGlobals -> TyparInst -> Expr -> Expr +val instExpr : TcGlobals -> TyparInst -> Expr -> Expr /// The remapping that corresponds to a module meeting its signature /// and also report the set of tycons, tycon representations and values hidden in the process. @@ -1185,7 +1184,7 @@ type SignatureRepackageInfo = RepackagedEntities: (TyconRef * TyconRef) list } /// The empty table - static member Empty: SignatureRepackageInfo + static member Empty : SignatureRepackageInfo /// A set of tables summarizing the items hidden by a signature type SignatureHidingInfo = @@ -1196,36 +1195,36 @@ type SignatureHidingInfo = HiddenUnionCases: Zset } /// The empty table representing no hiding - static member Empty: SignatureHidingInfo + static member Empty : SignatureHidingInfo /// Compute the remapping information implied by a signature being inferred for a particular implementation -val ComputeRemappingFromImplementationToSignature: TcGlobals -> ModuleOrNamespaceExpr -> ModuleOrNamespaceType -> SignatureRepackageInfo * SignatureHidingInfo +val ComputeRemappingFromImplementationToSignature : TcGlobals -> ModuleOrNamespaceExpr -> ModuleOrNamespaceType -> SignatureRepackageInfo * SignatureHidingInfo /// Compute the remapping information implied by an explicit signature being given for an inferred signature -val ComputeRemappingFromInferredSignatureToExplicitSignature: TcGlobals -> ModuleOrNamespaceType -> ModuleOrNamespaceType -> SignatureRepackageInfo * SignatureHidingInfo +val ComputeRemappingFromInferredSignatureToExplicitSignature : TcGlobals -> ModuleOrNamespaceType -> ModuleOrNamespaceType -> SignatureRepackageInfo * SignatureHidingInfo /// Compute the hiding information that corresponds to the hiding applied at an assembly boundary -val ComputeHidingInfoAtAssemblyBoundary: ModuleOrNamespaceType -> SignatureHidingInfo -> SignatureHidingInfo +val ComputeHidingInfoAtAssemblyBoundary : ModuleOrNamespaceType -> SignatureHidingInfo -> SignatureHidingInfo -val mkRepackageRemapping: SignatureRepackageInfo -> Remap +val mkRepackageRemapping : SignatureRepackageInfo -> Remap /// Wrap one module or namespace implementation in a 'namespace N' outer wrapper -val wrapModuleOrNamespaceExprInNamespace: Ident -> CompilationPath -> ModuleOrNamespaceExpr -> ModuleOrNamespaceExpr +val wrapModuleOrNamespaceExprInNamespace : Ident -> CompilationPath -> ModuleOrNamespaceExpr -> ModuleOrNamespaceExpr /// Wrap one module or namespace definition in a 'namespace N' outer wrapper -val wrapModuleOrNamespaceTypeInNamespace: Ident -> CompilationPath -> ModuleOrNamespaceType -> ModuleOrNamespaceType * ModuleOrNamespace +val wrapModuleOrNamespaceTypeInNamespace : Ident -> CompilationPath -> ModuleOrNamespaceType -> ModuleOrNamespaceType * ModuleOrNamespace /// Wrap one module or namespace definition in a 'module M = ..' outer wrapper -val wrapModuleOrNamespaceType: Ident -> CompilationPath -> ModuleOrNamespaceType -> ModuleOrNamespace +val wrapModuleOrNamespaceType : Ident -> CompilationPath -> ModuleOrNamespaceType -> ModuleOrNamespace /// Given an implementation, fetch its recorded signature -val SigTypeOfImplFile: TypedImplFile -> ModuleOrNamespaceType +val SigTypeOfImplFile : TypedImplFile -> ModuleOrNamespaceType /// Given a namespace, module or type definition, try to produce a reference to that entity. -val tryRescopeEntity: CcuThunk -> Entity -> ValueOption +val tryRescopeEntity : CcuThunk -> Entity -> ValueOption /// Given a value definition, try to produce a reference to that value. Fails for local values. -val tryRescopeVal: CcuThunk -> Remap -> Val -> ValueOption +val tryRescopeVal : CcuThunk -> Remap -> Val -> ValueOption /// Make the substitution (remapping) table for viewing a module or namespace 'from the outside' /// @@ -1233,10 +1232,10 @@ val tryRescopeVal: CcuThunk -> Remap -> Val -> ValueOption /// of an assembly, compute a remapping that converts local references to non-local references. /// This remapping must be applied to all pickled expressions and types /// exported from the assembly. -val MakeExportRemapping: CcuThunk -> ModuleOrNamespace -> Remap +val MakeExportRemapping : CcuThunk -> ModuleOrNamespace -> Remap /// Make a remapping table for viewing a module or namespace 'from the outside' -val ApplyExportRemappingToEntity: TcGlobals -> Remap -> ModuleOrNamespace -> ModuleOrNamespace +val ApplyExportRemappingToEntity : TcGlobals -> Remap -> ModuleOrNamespace -> ModuleOrNamespace /// Determine if a type definition is hidden by a signature val IsHiddenTycon: (Remap * SignatureHidingInfo) list -> Tycon -> bool @@ -1252,187 +1251,187 @@ val IsHiddenRecdField: (Remap * SignatureHidingInfo) list -> RecdFieldRef -> boo /// Adjust marks in expressions, replacing all marks by the given mark. /// Used when inlining. -val remarkExpr: range -> Expr -> Expr +val remarkExpr : range -> Expr -> Expr /// Build the application of a (possibly generic, possibly curried) function value to a set of type and expression arguments -val primMkApp: (Expr * TType) -> TypeInst -> Exprs -> range -> Expr +val primMkApp : (Expr * TType) -> TypeInst -> Exprs -> range -> Expr /// Build the application of a (possibly generic, possibly curried) function value to a set of type and expression arguments. /// Reduce the application via let-bindings if the function value is a lambda expression. -val mkApps: TcGlobals -> (Expr * TType) * TType list list * Exprs * range -> Expr +val mkApps : TcGlobals -> (Expr * TType) * TType list list * Exprs * range -> Expr /// Build the application of a generic construct to a set of type arguments. /// Reduce the application via substitution if the function value is a typed lambda expression. -val mkTyAppExpr: range -> Expr * TType -> TType list -> Expr +val mkTyAppExpr : range -> Expr * TType -> TType list -> Expr /// Build an expression to mutate a local /// localv <- e -val mkValSet: range -> ValRef -> Expr -> Expr +val mkValSet : range -> ValRef -> Expr -> Expr /// Build an expression to mutate the contents of a local pointer /// *localv_ptr = e -val mkAddrSet: range -> ValRef -> Expr -> Expr +val mkAddrSet : range -> ValRef -> Expr -> Expr /// Build an expression to dereference a local pointer /// *localv_ptr -val mkAddrGet: range -> ValRef -> Expr +val mkAddrGet : range -> ValRef -> Expr /// Build an expression to take the address of a local /// &localv -val mkValAddr: range -> readonly: bool -> ValRef -> Expr +val mkValAddr : range -> readonly: bool -> ValRef -> Expr /// Build an expression representing the read of an instance class or record field. /// First take the address of the record expression if it is a struct. -val mkRecdFieldGet: TcGlobals -> Expr * RecdFieldRef * TypeInst * range -> Expr +val mkRecdFieldGet : TcGlobals -> Expr * RecdFieldRef * TypeInst * range -> Expr /// Accumulate the targets actually used in a decision graph (for reporting warnings) -val accTargetsOfDecisionTree: DecisionTree -> int list -> int list +val accTargetsOfDecisionTree : DecisionTree -> int list -> int list /// Make a 'match' expression applying some peep-hole optimizations along the way, e.g to /// pre-decide the branch taken at compile-time. -val mkAndSimplifyMatch: DebugPointAtBinding -> range -> range -> TType -> DecisionTree -> DecisionTreeTarget list -> Expr +val mkAndSimplifyMatch : DebugPointForBinding -> range -> range -> TType -> DecisionTree -> DecisionTreeTarget list -> Expr /// Make a 'match' expression without applying any peep-hole optimizations. -val primMkMatch: DebugPointAtBinding * range * DecisionTree * DecisionTreeTarget array * range * TType -> Expr +val primMkMatch : DebugPointForBinding * range * DecisionTree * DecisionTreeTarget array * range * TType -> Expr /// Work out what things on the right-han-side of a 'let rec' recursive binding need to be fixed up -val IterateRecursiveFixups: - TcGlobals -> Val option -> +val IterateRecursiveFixups : + TcGlobals -> Val option -> (Val option -> Expr -> (Expr -> Expr) -> Expr -> unit) -> Expr * (Expr -> Expr) -> Expr -> unit /// Given a lambda expression taking multiple variables, build a corresponding lambda taking a tuple -val MultiLambdaToTupledLambda: TcGlobals -> Val list -> Expr -> Val * Expr +val MultiLambdaToTupledLambda : TcGlobals -> Val list -> Expr -> Val * Expr /// Given a lambda expression, adjust it to have be one or two lambda expressions (fun a -> (fun b -> ...)) /// where the first has the given arity. -val AdjustArityOfLambdaBody: TcGlobals -> int -> Val list -> Expr -> Val list * Expr +val AdjustArityOfLambdaBody : TcGlobals -> int -> Val list -> Expr -> Val list * Expr /// Make an application expression, doing beta reduction by introducing let-bindings -val MakeApplicationAndBetaReduce: TcGlobals -> Expr * TType * TypeInst list * Exprs * range -> Expr +val MakeApplicationAndBetaReduce : TcGlobals -> Expr * TType * TypeInst list * Exprs * range -> Expr /// Combine two static-resolution requirements on a type parameter -val JoinTyparStaticReq: TyparStaticReq -> TyparStaticReq -> TyparStaticReq +val JoinTyparStaticReq : TyparStaticReq -> TyparStaticReq -> TyparStaticReq /// Layout for internal compiler debugging purposes module DebugPrint = /// A global flag indicating whether debug output should include ranges - val layoutRanges: bool ref + val layoutRanges : bool ref /// Convert a type to a string for debugging purposes - val showType: TType -> string + val showType : TType -> string /// Convert an expression to a string for debugging purposes - val showExpr: TcGlobals -> Expr -> string + val showExpr : TcGlobals -> Expr -> string /// Debug layout for a reference to a value - val valRefL: ValRef -> Layout + val valRefL : ValRef -> layout /// Debug layout for a reference to a union case - val unionCaseRefL: UnionCaseRef -> Layout + val unionCaseRefL : UnionCaseRef -> layout /// Debug layout for an value definition at its binding site - val valAtBindL: TcGlobals -> Val -> Layout + val valAtBindL : TcGlobals -> Val -> layout /// Debug layout for an integer - val intL: int -> Layout + val intL : int -> layout /// Debug layout for a value definition - val valL: Val -> Layout + val valL : Val -> layout /// Debug layout for a type parameter definition - val typarDeclL: Typar -> Layout + val typarDeclL : Typar -> layout /// Debug layout for a trait constraint - val traitL: TraitConstraintInfo -> Layout + val traitL : TraitConstraintInfo -> layout /// Debug layout for a type parameter - val typarL: Typar -> Layout + val typarL : Typar -> layout /// Debug layout for a set of type parameters - val typarsL: Typars -> Layout + val typarsL : Typars -> layout /// Debug layout for a type - val typeL: TType -> Layout + val typeL : TType -> layout /// Debug layout for a method slot signature - val slotSigL: SlotSig -> Layout + val slotSigL : SlotSig -> layout /// Debug layout for the type signature of a module or namespace definition - val entityTypeL: TcGlobals -> ModuleOrNamespaceType -> Layout + val entityTypeL : TcGlobals -> ModuleOrNamespaceType -> layout /// Debug layout for a module or namespace definition - val entityL: TcGlobals -> ModuleOrNamespace -> Layout + val entityL : TcGlobals -> ModuleOrNamespace -> layout /// Debug layout for the type of a value - val typeOfValL: Val -> Layout + val typeOfValL : Val -> layout /// Debug layout for a binding of an expression to a value - val bindingL: TcGlobals -> Binding -> Layout + val bindingL : TcGlobals -> Binding -> layout /// Debug layout for an expression - val exprL: TcGlobals -> Expr -> Layout + val exprL : TcGlobals -> Expr -> layout /// Debug layout for a type definition - val tyconL: TcGlobals -> Tycon -> Layout + val tyconL : TcGlobals -> Tycon -> layout /// Debug layout for a decision tree - val decisionTreeL: TcGlobals -> DecisionTree -> Layout + val decisionTreeL : TcGlobals -> DecisionTree -> layout /// Debug layout for an implementation file - val implFileL: TcGlobals -> TypedImplFile -> Layout + val implFileL : TcGlobals -> TypedImplFile -> layout /// Debug layout for a list of implementation files - val implFilesL: TcGlobals -> TypedImplFile list -> Layout + val implFilesL : TcGlobals -> TypedImplFile list -> layout /// Debug layout for class and record fields - val recdFieldRefL: RecdFieldRef -> Layout + val recdFieldRefL : RecdFieldRef -> layout /// A set of function parameters (visitor) for folding over expressions type ExprFolder<'State> = - { exprIntercept: (* recurseF *) ('State -> Expr -> 'State) -> (* noInterceptF *) ('State -> Expr -> 'State) -> 'State -> Expr -> 'State - valBindingSiteIntercept: 'State -> bool * Val -> 'State - nonRecBindingsIntercept: 'State -> Binding -> 'State - recBindingsIntercept: 'State -> Bindings -> 'State - dtreeIntercept: 'State -> DecisionTree -> 'State - targetIntercept: ('State -> Expr -> 'State) -> 'State -> DecisionTreeTarget -> 'State option - tmethodIntercept: ('State -> Expr -> 'State) -> 'State -> ObjExprMethod -> 'State option} + { exprIntercept : (* recurseF *) ('State -> Expr -> 'State) -> (* noInterceptF *) ('State -> Expr -> 'State) -> 'State -> Expr -> 'State + valBindingSiteIntercept : 'State -> bool * Val -> 'State + nonRecBindingsIntercept : 'State -> Binding -> 'State + recBindingsIntercept : 'State -> Bindings -> 'State + dtreeIntercept : 'State -> DecisionTree -> 'State + targetIntercept : ('State -> Expr -> 'State) -> 'State -> DecisionTreeTarget -> 'State option + tmethodIntercept : ('State -> Expr -> 'State) -> 'State -> ObjExprMethod -> 'State option} /// The empty set of actions for folding over expressions -val ExprFolder0: ExprFolder<'State> +val ExprFolder0 : ExprFolder<'State> /// Fold over all the expressions in an implementation file val FoldImplFile: ExprFolder<'State> -> ('State -> TypedImplFile -> 'State) /// Fold over all the expressions in an expression -val FoldExpr: ExprFolder<'State> -> ('State -> Expr -> 'State) +val FoldExpr : ExprFolder<'State> -> ('State -> Expr -> 'State) #if DEBUG /// Extract some statistics from an expression -val ExprStats: Expr -> string +val ExprStats : Expr -> string #endif /// Build a nativeptr type -val mkNativePtrTy: TcGlobals -> TType -> TType +val mkNativePtrTy : TcGlobals -> TType -> TType /// Build a 'voidptr' type -val mkVoidPtrTy: TcGlobals -> TType +val mkVoidPtrTy : TcGlobals -> TType /// Build a single-dimensional array type -val mkArrayType: TcGlobals -> TType -> TType +val mkArrayType : TcGlobals -> TType -> TType /// Determine if a type is an option type -val isOptionTy: TcGlobals -> TType -> bool +val isOptionTy : TcGlobals -> TType -> bool /// Take apart an option type -val destOptionTy: TcGlobals -> TType -> TType +val destOptionTy : TcGlobals -> TType -> TType /// Try to take apart an option type -val tryDestOptionTy: TcGlobals -> TType -> ValueOption +val tryDestOptionTy : TcGlobals -> TType -> ValueOption /// Determine is a type is a System.Nullable type -val isNullableTy: TcGlobals -> TType -> bool +val isNullableTy : TcGlobals -> TType -> bool /// Try to take apart a System.Nullable type val tryDestNullableTy: TcGlobals -> TType -> ValueOption @@ -1441,34 +1440,34 @@ val tryDestNullableTy: TcGlobals -> TType -> ValueOption val destNullableTy: TcGlobals -> TType -> TType /// Determine if a type is a System.Linq.Expression type -val isLinqExpressionTy: TcGlobals -> TType -> bool +val isLinqExpressionTy : TcGlobals -> TType -> bool /// Take apart a System.Linq.Expression type -val destLinqExpressionTy: TcGlobals -> TType -> TType +val destLinqExpressionTy : TcGlobals -> TType -> TType /// Try to take apart a System.Linq.Expression type -val tryDestLinqExpressionTy: TcGlobals -> TType -> TType option +val tryDestLinqExpressionTy : TcGlobals -> TType -> TType option /// Determine if a type is an IDelegateEvent type -val isIDelegateEventType: TcGlobals -> TType -> bool +val isIDelegateEventType : TcGlobals -> TType -> bool /// Take apart an IDelegateEvent type -val destIDelegateEventType: TcGlobals -> TType -> TType +val destIDelegateEventType : TcGlobals -> TType -> TType /// Build an IEvent type -val mkIEventType: TcGlobals -> TType -> TType -> TType +val mkIEventType : TcGlobals -> TType -> TType -> TType /// Build an IObservable type -val mkIObservableType: TcGlobals -> TType -> TType +val mkIObservableType : TcGlobals -> TType -> TType /// Build an IObserver type -val mkIObserverType: TcGlobals -> TType -> TType +val mkIObserverType : TcGlobals -> TType -> TType /// Build an Lazy type -val mkLazyTy: TcGlobals -> TType -> TType +val mkLazyTy : TcGlobals -> TType -> TType /// Build an PrintFormat type -val mkPrintfFormatTy: TcGlobals -> TType -> TType -> TType -> TType -> TType -> TType +val mkPrintfFormatTy : TcGlobals -> TType -> TType -> TType -> TType -> TType -> TType //------------------------------------------------------------------------- // Classify types @@ -1483,131 +1482,129 @@ type TypeDefMetadata = #endif /// Extract metadata from a type definition -val metadataOfTycon: Tycon -> TypeDefMetadata +val metadataOfTycon : Tycon -> TypeDefMetadata /// Extract metadata from a type -val metadataOfTy: TcGlobals -> TType -> TypeDefMetadata +val metadataOfTy : TcGlobals -> TType -> TypeDefMetadata /// Determine if a type is the System.String type -val isStringTy: TcGlobals -> TType -> bool +val isStringTy : TcGlobals -> TType -> bool /// Determine if a type is an F# list type -val isListTy: TcGlobals -> TType -> bool +val isListTy : TcGlobals -> TType -> bool /// Determine if a type is a nominal .NET type -val isILAppTy: TcGlobals -> TType -> bool +val isILAppTy : TcGlobals -> TType -> bool /// Determine if a type is any kind of array type -val isArrayTy: TcGlobals -> TType -> bool +val isArrayTy : TcGlobals -> TType -> bool /// Determine if a type is a single-dimensional array type -val isArray1DTy: TcGlobals -> TType -> bool +val isArray1DTy : TcGlobals -> TType -> bool /// Get the element type of an array type -val destArrayTy: TcGlobals -> TType -> TType +val destArrayTy : TcGlobals -> TType -> TType /// Get the element type of an F# list type -val destListTy: TcGlobals -> TType -> TType +val destListTy : TcGlobals -> TType -> TType /// Build an array type of the given rank -val mkArrayTy: TcGlobals -> int -> TType -> range -> TType +val mkArrayTy : TcGlobals -> int -> TType -> range -> TType /// Check if a type definition is one of the artificial type definitions used for array types of different ranks -val isArrayTyconRef: TcGlobals -> TyconRef -> bool +val isArrayTyconRef : TcGlobals -> TyconRef -> bool /// Determine the rank of one of the artificial type definitions used for array types -val rankOfArrayTyconRef: TcGlobals -> TyconRef -> int +val rankOfArrayTyconRef : TcGlobals -> TyconRef -> int /// Determine if a type is the F# unit type -val isUnitTy: TcGlobals -> TType -> bool +val isUnitTy : TcGlobals -> TType -> bool /// Determine if a type is the System.Object type -val isObjTy: TcGlobals -> TType -> bool +val isObjTy : TcGlobals -> TType -> bool /// Determine if a type is the System.ValueType type -val isValueTypeTy: TcGlobals -> TType -> bool +val isValueTypeTy : TcGlobals -> TType -> bool /// Determine if a type is the System.Void type -val isVoidTy: TcGlobals -> TType -> bool +val isVoidTy : TcGlobals -> TType -> bool /// Get the element type of an array type -val destArrayTy: TcGlobals -> TType -> TType +val destArrayTy : TcGlobals -> TType -> TType /// Get the rank of an array type -val rankOfArrayTy: TcGlobals -> TType -> int +val rankOfArrayTy : TcGlobals -> TType -> int /// Determine if a reference to a type definition is an interface type -val isInterfaceTyconRef: TyconRef -> bool +val isInterfaceTyconRef : TyconRef -> bool /// Determine if a type is a delegate type -val isDelegateTy: TcGlobals -> TType -> bool +val isDelegateTy : TcGlobals -> TType -> bool /// Determine if a type is an interface type -val isInterfaceTy: TcGlobals -> TType -> bool +val isInterfaceTy : TcGlobals -> TType -> bool /// Determine if a type is a FSharpRef type -val isRefTy: TcGlobals -> TType -> bool +val isRefTy : TcGlobals -> TType -> bool /// Determine if a type is a function (including generic). Not the same as isFunTy. -val isForallFunctionTy: TcGlobals -> TType -> bool +val isForallFunctionTy : TcGlobals -> TType -> bool /// Determine if a type is a sealed type -val isSealedTy: TcGlobals -> TType -> bool +val isSealedTy : TcGlobals -> TType -> bool /// Determine if a type is a ComInterop type -val isComInteropTy: TcGlobals -> TType -> bool +val isComInteropTy : TcGlobals -> TType -> bool /// Determine the underlying type of an enum type (normally int32) -val underlyingTypeOfEnumTy: TcGlobals -> TType -> TType +val underlyingTypeOfEnumTy : TcGlobals -> TType -> TType /// If the input type is an enum type, then convert to its underlying type, otherwise return the input type -val normalizeEnumTy: TcGlobals -> TType -> TType +val normalizeEnumTy : TcGlobals -> TType -> TType /// Determine if a type is a struct type -val isStructTy: TcGlobals -> TType -> bool - -val isStructOrEnumTyconTy: TcGlobals -> TType -> bool +val isStructTy : TcGlobals -> TType -> bool /// Determine if a type is a variable type with the ': struct' constraint. /// /// Note, isStructTy does not include type parameters with the ': struct' constraint /// This predicate is used to detect those type parameters. -val isNonNullableStructTyparTy: TcGlobals -> TType -> bool +val isNonNullableStructTyparTy : TcGlobals -> TType -> bool /// Determine if a type is a variable type with the ': not struct' constraint. /// /// Note, isRefTy does not include type parameters with the ': not struct' constraint /// This predicate is used to detect those type parameters. -val isReferenceTyparTy: TcGlobals -> TType -> bool +val isReferenceTyparTy : TcGlobals -> TType -> bool /// Determine if a type is an unmanaged type -val isUnmanagedTy: TcGlobals -> TType -> bool +val isUnmanagedTy : TcGlobals -> TType -> bool /// Determine if a type is a class type -val isClassTy: TcGlobals -> TType -> bool +val isClassTy : TcGlobals -> TType -> bool /// Determine if a type is an enum type -val isEnumTy: TcGlobals -> TType -> bool +val isEnumTy : TcGlobals -> TType -> bool /// Determine if a type is a struct, record or union type -val isStructRecordOrUnionTyconTy: TcGlobals -> TType -> bool +val isStructRecordOrUnionTyconTy : TcGlobals -> TType -> bool /// For "type Class as self", 'self' is fixed up after initialization. To support this, /// it is converted behind the scenes to a ref. This function strips off the ref and /// returns the underlying type. -val StripSelfRefCell: TcGlobals * ValBaseOrThisInfo * TType -> TType +val StripSelfRefCell : TcGlobals * ValBaseOrThisInfo * TType -> TType /// An active pattern to determine if a type is a nominal type, possibly instantiated -val (|AppTy|_|): TcGlobals -> TType -> (TyconRef * TType list) option +val (|AppTy|_|) : TcGlobals -> TType -> (TyconRef * TType list) option /// An active pattern to match System.Nullable types -val (|NullableTy|_|): TcGlobals -> TType -> TType option +val (|NullableTy|_|) : TcGlobals -> TType -> TType option /// An active pattern to transform System.Nullable types to their input, otherwise leave the input unchanged -val (|StripNullableTy|): TcGlobals -> TType -> TType +val (|StripNullableTy|) : TcGlobals -> TType -> TType /// Matches any byref type, yielding the target type -val (|ByrefTy|_|): TcGlobals -> TType -> TType option +val (|ByrefTy|_|) : TcGlobals -> TType -> TType option //------------------------------------------------------------------------- // Special semantic constraints @@ -1615,43 +1612,43 @@ val (|ByrefTy|_|): TcGlobals -> TType -> TType option val IsUnionTypeWithNullAsTrueValue: TcGlobals -> Tycon -> bool -val TyconHasUseNullAsTrueValueAttribute: TcGlobals -> Tycon -> bool +val TyconHasUseNullAsTrueValueAttribute : TcGlobals -> Tycon -> bool -val CanHaveUseNullAsTrueValueAttribute: TcGlobals -> Tycon -> bool +val CanHaveUseNullAsTrueValueAttribute : TcGlobals -> Tycon -> bool -val MemberIsCompiledAsInstance: TcGlobals -> TyconRef -> bool -> ValMemberInfo -> Attribs -> bool +val MemberIsCompiledAsInstance : TcGlobals -> TyconRef -> bool -> ValMemberInfo -> Attribs -> bool -val ValSpecIsCompiledAsInstance: TcGlobals -> Val -> bool +val ValSpecIsCompiledAsInstance : TcGlobals -> Val -> bool -val ValRefIsCompiledAsInstanceMember: TcGlobals -> ValRef -> bool +val ValRefIsCompiledAsInstanceMember : TcGlobals -> ValRef -> bool -val ModuleNameIsMangled: TcGlobals -> Attribs -> bool +val ModuleNameIsMangled : TcGlobals -> Attribs -> bool -val CompileAsEvent: TcGlobals -> Attribs -> bool +val CompileAsEvent : TcGlobals -> Attribs -> bool -val TypeNullIsExtraValue: TcGlobals -> range -> TType -> bool +val TypeNullIsExtraValue : TcGlobals -> range -> TType -> bool -val TypeNullIsTrueValue: TcGlobals -> TType -> bool +val TypeNullIsTrueValue : TcGlobals -> TType -> bool -val TypeNullNotLiked: TcGlobals -> range -> TType -> bool +val TypeNullNotLiked : TcGlobals -> range -> TType -> bool -val TypeNullNever: TcGlobals -> TType -> bool +val TypeNullNever : TcGlobals -> TType -> bool -val TypeSatisfiesNullConstraint: TcGlobals -> range -> TType -> bool +val TypeSatisfiesNullConstraint : TcGlobals -> range -> TType -> bool -val TypeHasDefaultValue: TcGlobals -> range -> TType -> bool +val TypeHasDefaultValue : TcGlobals -> range -> TType -> bool -val isAbstractTycon: Tycon -> bool +val isAbstractTycon : Tycon -> bool -val isUnionCaseRefDefinitelyMutable: UnionCaseRef -> bool +val isUnionCaseRefDefinitelyMutable : UnionCaseRef -> bool -val isRecdOrUnionOrStructTyconRefDefinitelyMutable: TyconRef -> bool +val isRecdOrUnionOrStructTyconRefDefinitelyMutable : TyconRef -> bool -val isExnDefinitelyMutable: TyconRef -> bool +val isExnDefinitelyMutable : TyconRef -> bool -val isUnionCaseFieldMutable: TcGlobals -> UnionCaseRef -> int -> bool +val isUnionCaseFieldMutable : TcGlobals -> UnionCaseRef -> int -> bool -val isExnFieldMutable: TyconRef -> int -> bool +val isExnFieldMutable : TyconRef -> int -> bool val isRecdOrStructTyconRefReadOnly: TcGlobals -> range -> TyconRef -> bool @@ -1659,88 +1656,82 @@ val isRecdOrStructTyconRefAssumedImmutable: TcGlobals -> TyconRef -> bool val isRecdOrStructTyReadOnly: TcGlobals -> range -> TType -> bool -val useGenuineField: Tycon -> RecdField -> bool +val useGenuineField : Tycon -> RecdField -> bool -val ComputeFieldName: Tycon -> RecdField -> string +val ComputeFieldName : Tycon -> RecdField -> string //------------------------------------------------------------------------- // Destruct slotsigs etc. //------------------------------------------------------------------------- -val slotSigHasVoidReturnTy: SlotSig -> bool +val slotSigHasVoidReturnTy : SlotSig -> bool -val actualReturnTyOfSlotSig: TypeInst -> TypeInst -> SlotSig -> TType option +val actualReturnTyOfSlotSig : TypeInst -> TypeInst -> SlotSig -> TType option -val returnTyOfMethod: TcGlobals -> ObjExprMethod -> TType option +val returnTyOfMethod : TcGlobals -> ObjExprMethod -> TType option //------------------------------------------------------------------------- // Primitives associated with initialization graphs //------------------------------------------------------------------------- -val mkRefCell: TcGlobals -> range -> TType -> Expr -> Expr +val mkRefCell : TcGlobals -> range -> TType -> Expr -> Expr -val mkRefCellGet: TcGlobals -> range -> TType -> Expr -> Expr +val mkRefCellGet : TcGlobals -> range -> TType -> Expr -> Expr -val mkRefCellSet: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkRefCellSet : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkLazyDelayed: TcGlobals -> range -> TType -> Expr -> Expr +val mkLazyDelayed : TcGlobals -> range -> TType -> Expr -> Expr -val mkLazyForce: TcGlobals -> range -> TType -> Expr -> Expr +val mkLazyForce : TcGlobals -> range -> TType -> Expr -> Expr -val mkRefCellContentsRef: TcGlobals -> RecdFieldRef +val mkRefCellContentsRef : TcGlobals -> RecdFieldRef /// Check if a type is an FSharpRef type -val isRefCellTy: TcGlobals -> TType -> bool +val isRefCellTy : TcGlobals -> TType -> bool /// Get the element type of an FSharpRef type -val destRefCellTy: TcGlobals -> TType -> TType +val destRefCellTy : TcGlobals -> TType -> TType /// Create the FSharpRef type for a given element type -val mkRefCellTy: TcGlobals -> TType -> TType +val mkRefCellTy : TcGlobals -> TType -> TType /// Create the IEnumerable (seq) type for a given element type -val mkSeqTy: TcGlobals -> TType -> TType +val mkSeqTy : TcGlobals -> TType -> TType /// Create the IEnumerator type for a given element type -val mkIEnumeratorTy: TcGlobals -> TType -> TType +val mkIEnumeratorTy : TcGlobals -> TType -> TType /// Create the list type for a given element type -val mkListTy: TcGlobals -> TType -> TType +val mkListTy : TcGlobals -> TType -> TType /// Create the option type for a given element type -val mkOptionTy: TcGlobals -> TType -> TType - -/// Create the voption type for a given element type -val mkValueOptionTy : TcGlobals -> TType -> TType +val mkOptionTy : TcGlobals -> TType -> TType /// Create the Nullable type for a given element type val mkNullableTy: TcGlobals -> TType -> TType /// Create the union case 'None' for an option type -val mkNoneCase: TcGlobals -> UnionCaseRef +val mkNoneCase : TcGlobals -> UnionCaseRef /// Create the union case 'Some(expr)' for an option type val mkSomeCase: TcGlobals -> UnionCaseRef -/// Create the struct union case 'ValueSome(expr)' for a voption type -val mkValueSomeCase: TcGlobals -> UnionCaseRef - -/// Create the struct union case 'Some' or 'ValueSome(expr)' for a voption type -val mkAnySomeCase: TcGlobals -> isStruct: bool -> UnionCaseRef - /// Create the expression '[]' for a list type -val mkNil: TcGlobals -> range -> TType -> Expr +val mkNil : TcGlobals -> range -> TType -> Expr -/// Create the expression 'headExpr:: tailExpr' -val mkCons: TcGlobals -> TType -> Expr -> Expr -> Expr +/// Create the expression 'headExpr :: tailExpr' +val mkCons : TcGlobals -> TType -> Expr -> Expr -> Expr /// Create the expression 'Some(expr)' -val mkSome: TcGlobals -> TType -> Expr -> range -> Expr +val mkSome : TcGlobals -> TType -> Expr -> range -> Expr /// Create the expression 'None' for an option-type val mkNone: TcGlobals -> TType -> range -> Expr -val mkOptionToNullable: TcGlobals -> range -> TType -> Expr -> Expr +/// Create the expression 'expr.Value' for an option-typed expression +val mkOptionGetValueUnprovenViaAddr: TcGlobals -> Expr -> TType -> range -> Expr + +val mkOptionToNullable : TcGlobals -> range -> TType -> Expr -> Expr val mkOptionDefaultValue: TcGlobals -> range -> TType -> Expr -> Expr -> Expr @@ -1748,87 +1739,87 @@ val mkOptionDefaultValue: TcGlobals -> range -> TType -> Expr -> Expr -> Expr // Make a few more expressions //------------------------------------------------------------------------- -val mkSequential: DebugPointAtSequential -> range -> Expr -> Expr -> Expr +val mkSequential : DebugPointAtSequential -> range -> Expr -> Expr -> Expr -val mkCompGenSequential: range -> Expr -> Expr -> Expr +val mkCompGenSequential : range -> Expr -> Expr -> Expr -val mkSequentials: DebugPointAtSequential -> TcGlobals -> range -> Exprs -> Expr +val mkSequentials : DebugPointAtSequential -> TcGlobals -> range -> Exprs -> Expr -val mkRecordExpr: TcGlobals -> RecordConstructionInfo * TyconRef * TypeInst * RecdFieldRef list * Exprs * range -> Expr +val mkRecordExpr : TcGlobals -> RecordConstructionInfo * TyconRef * TypeInst * RecdFieldRef list * Exprs * range -> Expr -val mkUnbox: TType -> Expr -> range -> Expr +val mkUnbox : TType -> Expr -> range -> Expr -val mkBox: TType -> Expr -> range -> Expr +val mkBox : TType -> Expr -> range -> Expr -val mkIsInst: TType -> Expr -> range -> Expr +val mkIsInst : TType -> Expr -> range -> Expr -val mkNull: range -> TType -> Expr +val mkNull : range -> TType -> Expr -val mkNullTest: TcGlobals -> range -> Expr -> Expr -> Expr -> Expr +val mkNullTest : TcGlobals -> range -> Expr -> Expr -> Expr -> Expr -val mkNonNullTest: TcGlobals -> range -> Expr -> Expr +val mkNonNullTest : TcGlobals -> range -> Expr -> Expr -val mkIsInstConditional: TcGlobals -> range -> TType -> Expr -> Val -> Expr -> Expr -> Expr +val mkIsInstConditional : TcGlobals -> range -> TType -> Expr -> Val -> Expr -> Expr -> Expr -val mkThrow: range -> TType -> Expr -> Expr +val mkThrow : range -> TType -> Expr -> Expr -val mkGetArg0: range -> TType -> Expr +val mkGetArg0 : range -> TType -> Expr -val mkDefault: range * TType -> Expr +val mkDefault : range * TType -> Expr -val isThrow: Expr -> bool +val isThrow : Expr -> bool -val mkString: TcGlobals -> range -> string -> Expr +val mkString : TcGlobals -> range -> string -> Expr -val mkBool: TcGlobals -> range -> bool -> Expr +val mkBool : TcGlobals -> range -> bool -> Expr -val mkByte: TcGlobals -> range -> byte -> Expr +val mkByte : TcGlobals -> range -> byte -> Expr -val mkUInt16: TcGlobals -> range -> uint16 -> Expr +val mkUInt16 : TcGlobals -> range -> uint16 -> Expr -val mkTrue: TcGlobals -> range -> Expr +val mkTrue : TcGlobals -> range -> Expr -val mkFalse: TcGlobals -> range -> Expr +val mkFalse : TcGlobals -> range -> Expr -val mkUnit: TcGlobals -> range -> Expr +val mkUnit : TcGlobals -> range -> Expr -val mkInt32: TcGlobals -> range -> int32 -> Expr +val mkInt32 : TcGlobals -> range -> int32 -> Expr -val mkInt: TcGlobals -> range -> int -> Expr +val mkInt : TcGlobals -> range -> int -> Expr -val mkZero: TcGlobals -> range -> Expr +val mkZero : TcGlobals -> range -> Expr -val mkOne: TcGlobals -> range -> Expr +val mkOne : TcGlobals -> range -> Expr -val mkTwo: TcGlobals -> range -> Expr +val mkTwo : TcGlobals -> range -> Expr -val mkMinusOne: TcGlobals -> range -> Expr +val mkMinusOne : TcGlobals -> range -> Expr -val destInt32: Expr -> int32 option +val destInt32 : Expr -> int32 option //------------------------------------------------------------------------- // Primitives associated with quotations //------------------------------------------------------------------------- -val isQuotedExprTy: TcGlobals -> TType -> bool +val isQuotedExprTy : TcGlobals -> TType -> bool -val destQuotedExprTy: TcGlobals -> TType -> TType +val destQuotedExprTy : TcGlobals -> TType -> TType -val mkQuotedExprTy: TcGlobals -> TType -> TType +val mkQuotedExprTy : TcGlobals -> TType -> TType -val mkRawQuotedExprTy: TcGlobals -> TType +val mkRawQuotedExprTy : TcGlobals -> TType //------------------------------------------------------------------------- // Primitives associated with IL code gen //------------------------------------------------------------------------- -val mspec_Type_GetTypeFromHandle: TcGlobals -> ILMethodSpec +val mspec_Type_GetTypeFromHandle : TcGlobals -> ILMethodSpec -val fspec_Missing_Value: TcGlobals -> ILFieldSpec +val fspec_Missing_Value : TcGlobals -> ILFieldSpec val mkInitializeArrayMethSpec: TcGlobals -> ILMethodSpec -val mkByteArrayTy: TcGlobals -> TType +val mkByteArrayTy : TcGlobals -> TType val mkInvalidCastExnNewobj: TcGlobals -> ILInstr @@ -1839,425 +1830,425 @@ val mkInvalidCastExnNewobj: TcGlobals -> ILInstr val mkCallNewFormat: TcGlobals -> range -> TType -> TType -> TType -> TType -> TType -> formatStringExpr: Expr -> Expr -val mkCallUnbox: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallUnbox : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallGetGenericComparer: TcGlobals -> range -> Expr +val mkCallGetGenericComparer : TcGlobals -> range -> Expr -val mkCallGetGenericEREqualityComparer: TcGlobals -> range -> Expr +val mkCallGetGenericEREqualityComparer : TcGlobals -> range -> Expr -val mkCallGetGenericPEREqualityComparer: TcGlobals -> range -> Expr +val mkCallGetGenericPEREqualityComparer : TcGlobals -> range -> Expr -val mkCallUnboxFast: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallUnboxFast : TcGlobals -> range -> TType -> Expr -> Expr -val canUseUnboxFast: TcGlobals -> range -> TType -> bool +val canUseUnboxFast : TcGlobals -> range -> TType -> bool -val mkCallDispose: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallDispose : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallSeq: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallSeq : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallTypeTest: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallTypeTest : TcGlobals -> range -> TType -> Expr -> Expr -val canUseTypeTestFast: TcGlobals -> TType -> bool +val canUseTypeTestFast : TcGlobals -> TType -> bool -val mkCallTypeOf: TcGlobals -> range -> TType -> Expr +val mkCallTypeOf : TcGlobals -> range -> TType -> Expr -val mkCallTypeDefOf: TcGlobals -> range -> TType -> Expr +val mkCallTypeDefOf : TcGlobals -> range -> TType -> Expr -val mkCallCreateInstance: TcGlobals -> range -> TType -> Expr +val mkCallCreateInstance : TcGlobals -> range -> TType -> Expr -val mkCallCreateEvent: TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr -> Expr +val mkCallCreateEvent : TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr -> Expr -val mkCallArrayLength: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallArrayLength : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallArrayGet: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallArrayGet : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallArray2DGet: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr +val mkCallArray2DGet : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -val mkCallArray3DGet: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -> Expr +val mkCallArray3DGet : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -> Expr -val mkCallArray4DGet: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr +val mkCallArray4DGet : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr -val mkCallArraySet: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr +val mkCallArraySet : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -val mkCallArray2DSet: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -> Expr +val mkCallArray2DSet : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -> Expr -val mkCallArray3DSet: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr +val mkCallArray3DSet : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr -val mkCallArray4DSet: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr +val mkCallArray4DSet : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr -val mkCallHash: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallHash : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallBox: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallBox : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallIsNull: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallIsNull : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallIsNotNull: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallIsNotNull : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallRaise: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallRaise : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallGenericComparisonWithComparerOuter: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr +val mkCallGenericComparisonWithComparerOuter : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -val mkCallGenericEqualityEROuter: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallGenericEqualityEROuter : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallGenericEqualityWithComparerOuter: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr +val mkCallGenericEqualityWithComparerOuter : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -val mkCallGenericHashWithComparerOuter: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallGenericHashWithComparerOuter : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallEqualsOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallEqualsOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallNotEqualsOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallNotEqualsOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallLessThanOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallLessThanOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallLessThanOrEqualsOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallLessThanOrEqualsOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallGreaterThanOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallGreaterThanOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallGreaterThanOrEqualsOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallGreaterThanOrEqualsOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallAdditionOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallAdditionOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallSubtractionOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallSubtractionOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallMultiplyOperator: TcGlobals -> range -> ty1: TType -> ty2: TType -> rty: TType -> Expr -> Expr -> Expr +val mkCallMultiplyOperator : TcGlobals -> range -> ty1: TType -> ty2: TType -> rty: TType -> Expr -> Expr -> Expr -val mkCallDivisionOperator: TcGlobals -> range -> ty1: TType -> ty2: TType -> rty: TType -> Expr -> Expr -> Expr +val mkCallDivisionOperator : TcGlobals -> range -> ty1: TType -> ty2: TType -> rty: TType -> Expr -> Expr -> Expr -val mkCallModulusOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallModulusOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallDefaultOf: TcGlobals -> range -> TType -> Expr +val mkCallDefaultOf : TcGlobals -> range -> TType -> Expr -val mkCallBitwiseAndOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallBitwiseAndOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallBitwiseOrOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallBitwiseOrOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallBitwiseXorOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallBitwiseXorOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallShiftLeftOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallShiftLeftOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallShiftRightOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallShiftRightOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallUnaryNegOperator: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallUnaryNegOperator : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallUnaryNotOperator: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallUnaryNotOperator : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallAdditionChecked: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallAdditionChecked : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallSubtractionChecked: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallSubtractionChecked : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallMultiplyChecked: TcGlobals -> range -> ty1: TType -> ty2: TType -> rty: TType -> Expr -> Expr -> Expr +val mkCallMultiplyChecked : TcGlobals -> range -> ty1: TType -> ty2: TType -> rty: TType -> Expr -> Expr -> Expr -val mkCallUnaryNegChecked: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallUnaryNegChecked : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToByteChecked: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToByteChecked : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToSByteChecked: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToSByteChecked : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToInt16Checked: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToInt16Checked : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToUInt16Checked: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToUInt16Checked : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToIntChecked: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToIntChecked : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToInt32Checked: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToInt32Checked : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToUInt32Checked: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToUInt32Checked : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToInt64Checked: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToInt64Checked : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToUInt64Checked: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToUInt64Checked : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToIntPtrChecked: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToIntPtrChecked : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToUIntPtrChecked: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToUIntPtrChecked : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToByteOperator: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToByteOperator : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToSByteOperator: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToSByteOperator : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToInt16Operator: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToInt16Operator : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToUInt16Operator: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToUInt16Operator : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToIntOperator: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToIntOperator : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToInt32Operator: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToInt32Operator : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToUInt32Operator: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToUInt32Operator : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToInt64Operator: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToInt64Operator : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToUInt64Operator: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToUInt64Operator : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToSingleOperator: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToSingleOperator : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToDoubleOperator: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToDoubleOperator : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToIntPtrOperator: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToIntPtrOperator : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToUIntPtrOperator: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToUIntPtrOperator : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToCharOperator: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToCharOperator : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToEnumOperator: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToEnumOperator : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallDeserializeQuotationFSharp20Plus: TcGlobals -> range -> Expr -> Expr -> Expr -> Expr -> Expr +val mkCallDeserializeQuotationFSharp20Plus : TcGlobals -> range -> Expr -> Expr -> Expr -> Expr -> Expr -val mkCallDeserializeQuotationFSharp40Plus: TcGlobals -> range -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr +val mkCallDeserializeQuotationFSharp40Plus : TcGlobals -> range -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr -val mkCallCastQuotation: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallCastQuotation : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallLiftValueWithName: TcGlobals -> range -> TType -> string -> Expr -> Expr +val mkCallLiftValueWithName : TcGlobals -> range -> TType -> string -> Expr -> Expr val mkCallLiftValue: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallLiftValueWithDefn: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallLiftValueWithDefn : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallSeqCollect: TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr +val mkCallSeqCollect : TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr -val mkCallSeqUsing: TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr +val mkCallSeqUsing : TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr -val mkCallSeqDelay: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallSeqDelay : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallSeqAppend: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallSeqAppend : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallSeqFinally: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallSeqFinally : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallSeqGenerated: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallSeqGenerated : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallSeqOfFunctions: TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr -> Expr +val mkCallSeqOfFunctions : TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr -> Expr -val mkCallSeqToArray: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallSeqToArray : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallSeqToList: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallSeqToList : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallSeqMap: TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr +val mkCallSeqMap : TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr -val mkCallSeqSingleton: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallSeqSingleton : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallSeqEmpty: TcGlobals -> range -> TType -> Expr +val mkCallSeqEmpty : TcGlobals -> range -> TType -> Expr /// Make a call to the 'isprintf' function for string interpolation val mkCall_sprintf: g: TcGlobals -> m: range -> funcTy: TType -> fmtExpr: Expr -> fillExprs: Expr list -> Expr -val mkILAsmCeq: TcGlobals -> range -> Expr -> Expr -> Expr +val mkILAsmCeq : TcGlobals -> range -> Expr -> Expr -> Expr -val mkILAsmClt: TcGlobals -> range -> Expr -> Expr -> Expr +val mkILAsmClt : TcGlobals -> range -> Expr -> Expr -> Expr -val mkCallFailInit: TcGlobals -> range -> Expr +val mkCallFailInit : TcGlobals -> range -> Expr -val mkCallFailStaticInit: TcGlobals -> range -> Expr +val mkCallFailStaticInit : TcGlobals -> range -> Expr -val mkCallCheckThis: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallCheckThis : TcGlobals -> range -> TType -> Expr -> Expr -val mkCase: DecisionTreeTest * DecisionTree -> DecisionTreeCase +val mkCase : DecisionTreeTest * DecisionTree -> DecisionTreeCase -val mkCallQuoteToLinqLambdaExpression: TcGlobals -> range -> TType -> Expr -> Expr +val mkCallQuoteToLinqLambdaExpression : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallGetQuerySourceAsEnumerable: TcGlobals -> range -> TType -> TType -> Expr -> Expr +val mkCallGetQuerySourceAsEnumerable : TcGlobals -> range -> TType -> TType -> Expr -> Expr -val mkCallNewQuerySource: TcGlobals -> range -> TType -> TType -> Expr -> Expr +val mkCallNewQuerySource : TcGlobals -> range -> TType -> TType -> Expr -> Expr -val mkArray: TType * Exprs * range -> Expr +val mkArray : TType * Exprs * range -> Expr -val mkStaticCall_String_Concat2: TcGlobals -> range -> Expr -> Expr -> Expr +val mkStaticCall_String_Concat2 : TcGlobals -> range -> Expr -> Expr -> Expr -val mkStaticCall_String_Concat3: TcGlobals -> range -> Expr -> Expr -> Expr -> Expr +val mkStaticCall_String_Concat3 : TcGlobals -> range -> Expr -> Expr -> Expr -> Expr -val mkStaticCall_String_Concat4: TcGlobals -> range -> Expr -> Expr -> Expr -> Expr -> Expr +val mkStaticCall_String_Concat4 : TcGlobals -> range -> Expr -> Expr -> Expr -> Expr -> Expr -val mkStaticCall_String_Concat_Array: TcGlobals -> range -> Expr -> Expr +val mkStaticCall_String_Concat_Array : TcGlobals -> range -> Expr -> Expr /// Use a witness in BuiltInWitnesses -val tryMkCallBuiltInWitness: TcGlobals -> TraitConstraintInfo -> Expr list -> range -> Expr option +val tryMkCallBuiltInWitness : TcGlobals -> TraitConstraintInfo -> Expr list -> range -> Expr option /// Use an operator as a witness -val tryMkCallCoreFunctionAsBuiltInWitness: TcGlobals -> IntrinsicValRef -> TType list -> Expr list -> range -> Expr option +val tryMkCallCoreFunctionAsBuiltInWitness : TcGlobals -> IntrinsicValRef -> TType list -> Expr list -> range -> Expr option //------------------------------------------------------------------------- // operations primarily associated with the optimization to fix // up loops to generate .NET code that does not include array bound checks //------------------------------------------------------------------------- -val mkDecr: TcGlobals -> range -> Expr -> Expr +val mkDecr : TcGlobals -> range -> Expr -> Expr -val mkIncr: TcGlobals -> range -> Expr -> Expr +val mkIncr : TcGlobals -> range -> Expr -> Expr -val mkLdlen: TcGlobals -> range -> Expr -> Expr +val mkLdlen : TcGlobals -> range -> Expr -> Expr -val mkLdelem: TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkLdelem : TcGlobals -> range -> TType -> Expr -> Expr -> Expr //------------------------------------------------------------------------- // Analyze attribute sets //------------------------------------------------------------------------- -val TryDecodeILAttribute: ILTypeRef -> ILAttributes -> (ILAttribElem list * ILAttributeNamedArg list) option +val TryDecodeILAttribute : TcGlobals -> ILTypeRef -> ILAttributes -> (ILAttribElem list * ILAttributeNamedArg list) option -val TryFindILAttribute: BuiltinAttribInfo -> ILAttributes -> bool +val TryFindILAttribute : BuiltinAttribInfo -> ILAttributes -> bool -val TryFindILAttributeOpt: BuiltinAttribInfo option -> ILAttributes -> bool +val TryFindILAttributeOpt : BuiltinAttribInfo option -> ILAttributes -> bool -val IsMatchingFSharpAttribute: TcGlobals -> BuiltinAttribInfo -> Attrib -> bool +val IsMatchingFSharpAttribute : TcGlobals -> BuiltinAttribInfo -> Attrib -> bool -val IsMatchingFSharpAttributeOpt: TcGlobals -> BuiltinAttribInfo option -> Attrib -> bool +val IsMatchingFSharpAttributeOpt : TcGlobals -> BuiltinAttribInfo option -> Attrib -> bool -val HasFSharpAttribute: TcGlobals -> BuiltinAttribInfo -> Attribs -> bool +val HasFSharpAttribute : TcGlobals -> BuiltinAttribInfo -> Attribs -> bool -val HasFSharpAttributeOpt: TcGlobals -> BuiltinAttribInfo option -> Attribs -> bool +val HasFSharpAttributeOpt : TcGlobals -> BuiltinAttribInfo option -> Attribs -> bool -val TryFindFSharpAttribute: TcGlobals -> BuiltinAttribInfo -> Attribs -> Attrib option +val TryFindFSharpAttribute : TcGlobals -> BuiltinAttribInfo -> Attribs -> Attrib option -val TryFindFSharpAttributeOpt: TcGlobals -> BuiltinAttribInfo option -> Attribs -> Attrib option +val TryFindFSharpAttributeOpt : TcGlobals -> BuiltinAttribInfo option -> Attribs -> Attrib option -val TryFindFSharpBoolAttribute: TcGlobals -> BuiltinAttribInfo -> Attribs -> bool option +val TryFindFSharpBoolAttribute : TcGlobals -> BuiltinAttribInfo -> Attribs -> bool option -val TryFindFSharpBoolAttributeAssumeFalse: TcGlobals -> BuiltinAttribInfo -> Attribs -> bool option +val TryFindFSharpBoolAttributeAssumeFalse : TcGlobals -> BuiltinAttribInfo -> Attribs -> bool option -val TryFindFSharpStringAttribute: TcGlobals -> BuiltinAttribInfo -> Attribs -> string option +val TryFindFSharpStringAttribute : TcGlobals -> BuiltinAttribInfo -> Attribs -> string option -val TryFindFSharpInt32Attribute: TcGlobals -> BuiltinAttribInfo -> Attribs -> int32 option +val TryFindFSharpInt32Attribute : TcGlobals -> BuiltinAttribInfo -> Attribs -> int32 option /// Try to find a specific attribute on a type definition, where the attribute accepts a string argument. /// /// This is used to detect the 'DefaultMemberAttribute' and 'ConditionalAttribute' attributes (on type definitions) -val TryFindTyconRefStringAttribute: TcGlobals -> range -> BuiltinAttribInfo -> TyconRef -> string option +val TryFindTyconRefStringAttribute : TcGlobals -> range -> BuiltinAttribInfo -> TyconRef -> string option /// Try to find a specific attribute on a type definition, where the attribute accepts a bool argument. -val TryFindTyconRefBoolAttribute: TcGlobals -> range -> BuiltinAttribInfo -> TyconRef -> bool option +val TryFindTyconRefBoolAttribute : TcGlobals -> range -> BuiltinAttribInfo -> TyconRef -> bool option /// Try to find a specific attribute on a type definition -val TyconRefHasAttribute: TcGlobals -> range -> BuiltinAttribInfo -> TyconRef -> bool +val TyconRefHasAttribute : TcGlobals -> range -> BuiltinAttribInfo -> TyconRef -> bool /// Try to find the AttributeUsage attribute, looking for the value of the AllowMultiple named parameter -val TryFindAttributeUsageAttribute: TcGlobals -> range -> TyconRef -> bool option +val TryFindAttributeUsageAttribute : TcGlobals -> range -> TyconRef -> bool option #if !NO_EXTENSIONTYPING /// returns Some(assemblyName) for success -val TryDecodeTypeProviderAssemblyAttr: ILAttribute -> string option +val TryDecodeTypeProviderAssemblyAttr : ILGlobals -> ILAttribute -> string option #endif -val IsSignatureDataVersionAttr: ILAttribute -> bool +val IsSignatureDataVersionAttr : ILAttribute -> bool -val TryFindAutoOpenAttr: ILAttribute -> string option +val TryFindAutoOpenAttr : IL.ILGlobals -> ILAttribute -> string option -val TryFindInternalsVisibleToAttr: ILAttribute -> string option +val TryFindInternalsVisibleToAttr : IL.ILGlobals -> ILAttribute -> string option -val IsMatchingSignatureDataVersionAttr: ILVersionInfo -> ILAttribute -> bool +val IsMatchingSignatureDataVersionAttr : IL.ILGlobals -> ILVersionInfo -> ILAttribute -> bool -val mkCompilationMappingAttr: TcGlobals -> int -> ILAttribute -val mkCompilationMappingAttrWithSeqNum: TcGlobals -> int -> int -> ILAttribute +val mkCompilationMappingAttr : TcGlobals -> int -> ILAttribute +val mkCompilationMappingAttrWithSeqNum : TcGlobals -> int -> int -> ILAttribute -val mkCompilationMappingAttrWithVariantNumAndSeqNum: TcGlobals -> int -> int -> int -> ILAttribute +val mkCompilationMappingAttrWithVariantNumAndSeqNum : TcGlobals -> int -> int -> int -> ILAttribute -val mkCompilationMappingAttrForQuotationResource: TcGlobals -> string * ILTypeRef list -> ILAttribute +val mkCompilationMappingAttrForQuotationResource : TcGlobals -> string * ILTypeRef list -> ILAttribute -val mkCompilationArgumentCountsAttr: TcGlobals -> int list -> ILAttribute +val mkCompilationArgumentCountsAttr : TcGlobals -> int list -> ILAttribute -val mkCompilationSourceNameAttr: TcGlobals -> string -> ILAttribute +val mkCompilationSourceNameAttr : TcGlobals -> string -> ILAttribute -val mkSignatureDataVersionAttr: TcGlobals -> ILVersionInfo -> ILAttribute +val mkSignatureDataVersionAttr : TcGlobals -> ILVersionInfo -> ILAttribute -val mkCompilerGeneratedAttr: TcGlobals -> int -> ILAttribute +val mkCompilerGeneratedAttr : TcGlobals -> int -> ILAttribute //------------------------------------------------------------------------- // More common type construction //------------------------------------------------------------------------- -val isInByrefTy: TcGlobals -> TType -> bool +val isInByrefTy : TcGlobals -> TType -> bool -val isOutByrefTy: TcGlobals -> TType -> bool +val isOutByrefTy : TcGlobals -> TType -> bool -val isByrefTy: TcGlobals -> TType -> bool +val isByrefTy : TcGlobals -> TType -> bool -val isNativePtrTy: TcGlobals -> TType -> bool +val isNativePtrTy : TcGlobals -> TType -> bool -val destByrefTy: TcGlobals -> TType -> TType +val destByrefTy : TcGlobals -> TType -> TType -val destNativePtrTy: TcGlobals -> TType -> TType +val destNativePtrTy : TcGlobals -> TType -> TType -val isByrefTyconRef: TcGlobals -> TyconRef -> bool +val isByrefTyconRef : TcGlobals -> TyconRef -> bool -val isByrefLikeTyconRef: TcGlobals -> range -> TyconRef -> bool +val isByrefLikeTyconRef : TcGlobals -> range -> TyconRef -> bool -val isSpanLikeTyconRef: TcGlobals -> range -> TyconRef -> bool +val isSpanLikeTyconRef : TcGlobals -> range -> TyconRef -> bool -val isByrefLikeTy: TcGlobals -> range -> TType -> bool +val isByrefLikeTy : TcGlobals -> range -> TType -> bool /// Check if the type is a byref-like but not a byref. -val isSpanLikeTy: TcGlobals -> range -> TType -> bool +val isSpanLikeTy : TcGlobals -> range -> TType -> bool -val isSpanTy: TcGlobals -> range -> TType -> bool +val isSpanTy : TcGlobals -> range -> TType -> bool -val tryDestSpanTy: TcGlobals -> range -> TType -> struct(TyconRef * TType) voption +val tryDestSpanTy : TcGlobals -> range -> TType -> struct(TyconRef * TType) voption -val destSpanTy: TcGlobals -> range -> TType -> struct(TyconRef * TType) +val destSpanTy : TcGlobals -> range -> TType -> struct(TyconRef * TType) -val isReadOnlySpanTy: TcGlobals -> range -> TType -> bool +val isReadOnlySpanTy : TcGlobals -> range -> TType -> bool -val tryDestReadOnlySpanTy: TcGlobals -> range -> TType -> struct(TyconRef * TType) voption +val tryDestReadOnlySpanTy : TcGlobals -> range -> TType -> struct(TyconRef * TType) voption -val destReadOnlySpanTy: TcGlobals -> range -> TType -> struct(TyconRef * TType) +val destReadOnlySpanTy : TcGlobals -> range -> TType -> struct(TyconRef * TType) //------------------------------------------------------------------------- // Tuple constructors/destructors //------------------------------------------------------------------------- -val isRefTupleExpr: Expr -> bool +val isRefTupleExpr : Expr -> bool -val tryDestRefTupleExpr: Expr -> Exprs +val tryDestRefTupleExpr : Expr -> Exprs -val mkAnyTupledTy: TcGlobals -> TupInfo -> TType list -> TType +val mkAnyTupledTy : TcGlobals -> TupInfo -> TType list -> TType -val mkAnyTupled: TcGlobals -> range -> TupInfo -> Exprs -> TType list -> Expr +val mkAnyTupled : TcGlobals -> range -> TupInfo -> Exprs -> TType list -> Expr -val mkRefTupled: TcGlobals -> range -> Exprs -> TType list -> Expr +val mkRefTupled : TcGlobals -> range -> Exprs -> TType list -> Expr -val mkRefTupledNoTypes: TcGlobals -> range -> Exprs -> Expr +val mkRefTupledNoTypes : TcGlobals -> range -> Exprs -> Expr -val mkRefTupledTy: TcGlobals -> TType list -> TType +val mkRefTupledTy : TcGlobals -> TType list -> TType -val mkRefTupledVarsTy: TcGlobals -> Val list -> TType +val mkRefTupledVarsTy : TcGlobals -> Val list -> TType -val mkRefTupledVars: TcGlobals -> range -> Val list -> Expr +val mkRefTupledVars : TcGlobals -> range -> Val list -> Expr -val mkMethodTy: TcGlobals -> TType list list -> TType -> TType +val mkMethodTy : TcGlobals -> TType list list -> TType -> TType -val mkAnyAnonRecdTy: TcGlobals -> AnonRecdTypeInfo -> TType list -> TType +val mkAnyAnonRecdTy : TcGlobals -> AnonRecdTypeInfo -> TType list -> TType -val mkAnonRecd: TcGlobals -> range -> AnonRecdTypeInfo -> Ident[] -> Exprs -> TType list -> Expr +val mkAnonRecd : TcGlobals -> range -> AnonRecdTypeInfo -> Ident[] -> Exprs -> TType list -> Expr -val AdjustValForExpectedArity: TcGlobals -> range -> ValRef -> ValUseFlag -> ValReprInfo -> Expr * TType +val AdjustValForExpectedArity : TcGlobals -> range -> ValRef -> ValUseFlag -> ValReprInfo -> Expr * TType -val AdjustValToTopVal: Val -> ParentRef -> ValReprInfo -> unit +val AdjustValToTopVal : Val -> ParentRef -> ValReprInfo -> unit -val LinearizeTopMatch: TcGlobals -> ParentRef -> Expr -> Expr +val LinearizeTopMatch : TcGlobals -> ParentRef -> Expr -> Expr -val AdjustPossibleSubsumptionExpr: TcGlobals -> Expr -> Exprs -> (Expr * Exprs) option +val AdjustPossibleSubsumptionExpr : TcGlobals -> Expr -> Exprs -> (Expr * Exprs) option -val NormalizeAndAdjustPossibleSubsumptionExprs: TcGlobals -> Expr -> Expr +val NormalizeAndAdjustPossibleSubsumptionExprs : TcGlobals -> Expr -> Expr //------------------------------------------------------------------------- // XmlDoc signatures, used by both VS mode and XML-help emit //------------------------------------------------------------------------- -val buildAccessPath: CompilationPath option -> string +val buildAccessPath : CompilationPath option -> string -val XmlDocArgsEnc: TcGlobals -> Typars * Typars -> TType list -> string +val XmlDocArgsEnc : TcGlobals -> Typars * Typars -> TType list -> string -val XmlDocSigOfVal: TcGlobals -> full: bool -> string -> Val -> string +val XmlDocSigOfVal : TcGlobals -> full: bool -> string -> Val -> string -val XmlDocSigOfUnionCase: (string list -> string) +val XmlDocSigOfUnionCase : (string list -> string) -val XmlDocSigOfField: (string list -> string) +val XmlDocSigOfField : (string list -> string) -val XmlDocSigOfProperty: (string list -> string) +val XmlDocSigOfProperty : (string list -> string) -val XmlDocSigOfTycon: (string list -> string) +val XmlDocSigOfTycon : (string list -> string) -val XmlDocSigOfSubModul: (string list -> string) +val XmlDocSigOfSubModul : (string list -> string) -val XmlDocSigOfEntity: EntityRef -> string +val XmlDocSigOfEntity : EntityRef -> string //--------------------------------------------------------------------------- // Resolve static optimizations @@ -2268,33 +2259,33 @@ type StaticOptimizationAnswer = | No = -1y | Unknown = 0y -val DecideStaticOptimizations: TcGlobals -> StaticOptimization list -> haveWitnesses: bool -> StaticOptimizationAnswer +val DecideStaticOptimizations : TcGlobals -> StaticOptimization list -> haveWitnesses: bool -> StaticOptimizationAnswer -val mkStaticOptimizationExpr: TcGlobals -> StaticOptimization list * Expr * Expr * range -> Expr +val mkStaticOptimizationExpr : TcGlobals -> StaticOptimization list * Expr * Expr * range -> Expr /// Build for loops -val mkFastForLoop: TcGlobals -> DebugPointAtFor * range * Val * Expr * bool * Expr * Expr -> Expr +val mkFastForLoop : TcGlobals -> DebugPointAtFor * range * Val * Expr * bool * Expr * Expr -> Expr //--------------------------------------------------------------------------- // Active pattern helpers //------------------------------------------------------------------------- type ActivePatternElemRef with - member Name: string + member Name : string -val TryGetActivePatternInfo: ValRef -> PrettyNaming.ActivePatternInfo option +val TryGetActivePatternInfo : ValRef -> PrettyNaming.ActivePatternInfo option -val mkChoiceCaseRef: g: TcGlobals -> m: range -> n: int -> i: int -> UnionCaseRef +val mkChoiceCaseRef : TcGlobals -> range -> int -> int -> UnionCaseRef type PrettyNaming.ActivePatternInfo with - member Names: string list + member Names : string list - member ResultType: g: TcGlobals -> range -> TType list -> bool -> TType + member ResultType : TcGlobals -> range -> TType list -> TType - member OverallType: g: TcGlobals -> m: range -> dty: TType -> rtys: TType list -> isStruct: bool -> TType + member OverallType : TcGlobals -> range -> TType -> TType list -> TType -val doesActivePatternHaveFreeTypars: TcGlobals -> ValRef -> bool +val doesActivePatternHaveFreeTypars : TcGlobals -> ValRef -> bool //--------------------------------------------------------------------------- // Structural rewrites @@ -2307,97 +2298,98 @@ type ExprRewritingEnv = PreInterceptBinding: ((Expr -> Expr) -> Binding -> Binding option) option IsUnderQuotations: bool } -val RewriteExpr: ExprRewritingEnv -> Expr -> Expr +val RewriteExpr : ExprRewritingEnv -> Expr -> Expr -val RewriteImplFile: ExprRewritingEnv -> TypedImplFile -> TypedImplFile +val RewriteImplFile : ExprRewritingEnv -> TypedImplFile -> TypedImplFile val IsGenericValWithGenericConstraints: TcGlobals -> Val -> bool type Entity with - member HasInterface: TcGlobals -> TType -> bool + member HasInterface : TcGlobals -> TType -> bool - member HasOverride: TcGlobals -> string -> TType list -> bool + member HasOverride : TcGlobals -> string -> TType list -> bool - member HasMember: TcGlobals -> string -> TType list -> bool + member HasMember : TcGlobals -> string -> TType list -> bool type EntityRef with - member HasInterface: TcGlobals -> TType -> bool + member HasInterface : TcGlobals -> TType -> bool - member HasOverride: TcGlobals -> string -> TType list -> bool + member HasOverride : TcGlobals -> string -> TType list -> bool - member HasMember: TcGlobals -> string -> TType list -> bool + member HasMember : TcGlobals -> string -> TType list -> bool -val (|AttribBitwiseOrExpr|_|): TcGlobals -> Expr -> (Expr * Expr) option +val (|AttribBitwiseOrExpr|_|) : TcGlobals -> Expr -> (Expr * Expr) option -val (|EnumExpr|_|): TcGlobals -> Expr -> Expr option +val (|EnumExpr|_|) : TcGlobals -> Expr -> Expr option -val (|TypeOfExpr|_|): TcGlobals -> Expr -> TType option +val (|TypeOfExpr|_|) : TcGlobals -> Expr -> TType option -val (|TypeDefOfExpr|_|): TcGlobals -> Expr -> TType option +val (|TypeDefOfExpr|_|) : TcGlobals -> Expr -> TType option val isNameOfValRef: TcGlobals -> ValRef -> bool -val (|NameOfExpr|_|): TcGlobals -> Expr -> TType option +val (|NameOfExpr|_|) : TcGlobals -> Expr -> TType option -val (|SeqExpr|_|): TcGlobals -> Expr -> unit option +val (|SeqExpr|_|) : TcGlobals -> Expr -> unit option val EvalLiteralExprOrAttribArg: TcGlobals -> Expr -> Expr -val EvaledAttribExprEquality: TcGlobals -> Expr -> Expr -> bool +val EvaledAttribExprEquality : TcGlobals -> Expr -> Expr -> bool val IsSimpleSyntacticConstantExpr: TcGlobals -> Expr -> bool val (|ConstToILFieldInit|_|): Const -> ILFieldInit option -val (|ExtractAttribNamedArg|_|): string -> AttribNamedArg list -> AttribExpr option +val (|ExtractAttribNamedArg|_|) : string -> AttribNamedArg list -> AttribExpr option + +val (|AttribInt32Arg|_|) : AttribExpr -> int32 option -val (|AttribInt32Arg|_|): AttribExpr -> int32 option +val (|AttribInt16Arg|_|) : AttribExpr -> int16 option -val (|AttribInt16Arg|_|): AttribExpr -> int16 option +val (|AttribBoolArg|_|) : AttribExpr -> bool option -val (|AttribBoolArg|_|): AttribExpr -> bool option +val (|AttribStringArg|_|) : AttribExpr -> string option -val (|AttribStringArg|_|): AttribExpr -> string option +val (|Int32Expr|_|) : Expr -> int32 option -val (|Int32Expr|_|): Expr -> int32 option /// Determines types that are potentially known to satisfy the 'comparable' constraint and returns /// a set of residual types that must also satisfy the constraint -val (|SpecialComparableHeadType|_|): TcGlobals -> TType -> TType list option +val (|SpecialComparableHeadType|_|) : TcGlobals -> TType -> TType list option -val (|SpecialEquatableHeadType|_|): TcGlobals -> TType -> TType list option +val (|SpecialEquatableHeadType|_|) : TcGlobals -> TType -> TType list option -val (|SpecialNotEquatableHeadType|_|): TcGlobals -> TType -> unit option +val (|SpecialNotEquatableHeadType|_|) : TcGlobals -> TType -> unit option type OptimizeForExpressionOptions = OptimizeIntRangesOnly | OptimizeAllForExpressions -val DetectAndOptimizeForExpression: TcGlobals -> OptimizeForExpressionOptions -> Expr -> Expr +val DetectAndOptimizeForExpression : TcGlobals -> OptimizeForExpressionOptions -> Expr -> Expr -val TryEliminateDesugaredConstants: TcGlobals -> range -> Const -> Expr option +val TryEliminateDesugaredConstants : TcGlobals -> range -> Const -> Expr option -val MemberIsExplicitImpl: TcGlobals -> ValMemberInfo -> bool +val MemberIsExplicitImpl : TcGlobals -> ValMemberInfo -> bool -val ValIsExplicitImpl: TcGlobals -> Val -> bool +val ValIsExplicitImpl : TcGlobals -> Val -> bool -val ValRefIsExplicitImpl: TcGlobals -> ValRef -> bool +val ValRefIsExplicitImpl : TcGlobals -> ValRef -> bool -val (|LinearMatchExpr|_|): Expr -> (DebugPointAtBinding * range * DecisionTree * DecisionTreeTarget * Expr * DebugPointForTarget * range * TType) option +val (|LinearMatchExpr|_|) : Expr -> (DebugPointForBinding * range * DecisionTree * DecisionTreeTarget * Expr * DebugPointForTarget * range * TType) option -val rebuildLinearMatchExpr: (DebugPointAtBinding * range * DecisionTree * DecisionTreeTarget * Expr * DebugPointForTarget * range * TType) -> Expr +val rebuildLinearMatchExpr : (DebugPointForBinding * range * DecisionTree * DecisionTreeTarget * Expr * DebugPointForTarget * range * TType) -> Expr -val (|LinearOpExpr|_|): Expr -> (TOp * TypeInst * Expr list * Expr * range) option +val (|LinearOpExpr|_|) : Expr -> (TOp * TypeInst * Expr list * Expr * range) option -val rebuildLinearOpExpr: (TOp * TypeInst * Expr list * Expr * range) -> Expr +val rebuildLinearOpExpr : (TOp * TypeInst * Expr list * Expr * range) -> Expr -val mkCoerceIfNeeded: TcGlobals -> tgtTy: TType -> srcTy: TType -> Expr -> Expr +val mkCoerceIfNeeded : TcGlobals -> tgtTy: TType -> srcTy: TType -> Expr -> Expr -val (|InnerExprPat|): Expr -> Expr +val (|InnerExprPat|) : Expr -> Expr -val allValsOfModDef: ModuleOrNamespaceExpr -> seq +val allValsOfModDef : ModuleOrNamespaceExpr -> seq -val BindUnitVars: TcGlobals -> (Val list * ArgReprInfo list * Expr) -> Val list * Expr +val BindUnitVars : TcGlobals -> (Val list * ArgReprInfo list * Expr) -> Val list * Expr val isThreadOrContextStatic: TcGlobals -> Attrib list -> bool @@ -2422,7 +2414,7 @@ type TraitWitnessInfoHashMap<'T> = ImmutableDictionary val EmptyTraitWitnessInfoHashMap: TcGlobals -> TraitWitnessInfoHashMap<'T> /// Match expressions that are an application of a particular F# function value -val (|ValApp|_|): TcGlobals -> ValRef -> Expr -> (TypeInst * Exprs * range) option +val (|ValApp|_|) : TcGlobals -> ValRef -> Expr -> (TypeInst * Exprs * range) option val CombineCcuContentFragments: range -> ModuleOrNamespaceType list -> ModuleOrNamespaceType @@ -2450,4 +2442,4 @@ val TryBindTyconRefAttribute: f1:(ILAttribElem list * ILAttributeNamedArg list -> 'a option) -> f2:(Attrib -> 'a option) -> f3:(obj option list * (string * obj option) list -> 'a option) - -> 'a option + -> 'a option diff --git a/src/fsharp/TypedTreePickle.fs b/src/fsharp/TypedTreePickle.fs index b8325c261d1..14cb41f75b9 100644 --- a/src/fsharp/TypedTreePickle.fs +++ b/src/fsharp/TypedTreePickle.fs @@ -5,29 +5,27 @@ module internal FSharp.Compiler.TypedTreePickle open System.Collections.Generic open System.Text -open FSharp.Compiler.IO open Internal.Utilities -open Internal.Utilities.Collections -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras -open Internal.Utilities.Library.Extras.Bits -open Internal.Utilities.Rational open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Text.Position -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Syntax +open FSharp.Compiler.Lib +open FSharp.Compiler.Lib.Bits +open FSharp.Compiler.Range +open FSharp.Compiler.Rational +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.Text -open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TcGlobals +open FSharp.Compiler.XmlDoc + let verbose = false @@ -213,11 +211,6 @@ let p_bytes (s: byte[]) st = p_int32 len st st.os.EmitBytes s -let p_memory (s: System.ReadOnlyMemory) st = - let len = s.Length - p_int32 len st - st.os.EmitMemory s - let p_prim_string (s: string) st = let bytes = Encoding.UTF8.GetBytes s let len = bytes.Length @@ -780,13 +773,10 @@ let p_encoded_simpletyp x st = p_int x st let p_encoded_anoninfo x st = p_int x st let p_simpletyp x st = p_int (encode_simpletyp st.occus st.ostrings st.onlerefs st.osimpletys st.oscope x) st -/// Arbitrary value -[] -let PickleBufferCapacity = 100000 - let pickleObjWithDanglingCcus inMem file g scope p x = - let st1 = - { os = ByteBuffer.Create(PickleBufferCapacity, useArrayPool = true) + let ccuNameTab, (ntycons, ntypars, nvals, nanoninfos), stringTab, pubpathTab, nlerefTab, simpleTyTab, phase1bytes = + let st1 = + { os = ByteBuffer.Create 100000 oscope=scope occus= Table<_>.Create "occus" oentities=NodeOutTable<_, _>.Create((fun (tc: Tycon) -> tc.Stamp), (fun tc -> tc.LogicalName), (fun tc -> tc.Range), (fun osgn -> osgn), "otycons") @@ -801,32 +791,31 @@ let pickleObjWithDanglingCcus inMem file g scope p x = ofile=file oInMem=inMem isStructThisArgPos = false} - let ccuNameTab, (ntycons, ntypars, nvals, nanoninfos), stringTab, pubpathTab, nlerefTab, simpleTyTab, phase1bytes = p x st1 let sizes = st1.oentities.Size, st1.otypars.Size, st1.ovals.Size, st1.oanoninfos.Size - st1.occus, sizes, st1.ostrings, st1.opubpaths, st1.onlerefs, st1.osimpletys, st1.os.AsMemory() - - let st2 = - { os = ByteBuffer.Create(PickleBufferCapacity, useArrayPool = true) - oscope=scope - occus= Table<_>.Create "occus (fake)" - oentities=NodeOutTable<_, _>.Create((fun (tc: Tycon) -> tc.Stamp), (fun tc -> tc.LogicalName), (fun tc -> tc.Range), (fun osgn -> osgn), "otycons") - otypars=NodeOutTable<_, _>.Create((fun (tp: Typar) -> tp.Stamp), (fun tp -> tp.DisplayName), (fun tp -> tp.Range), (fun osgn -> osgn), "otypars") - ovals=NodeOutTable<_, _>.Create((fun (v: Val) -> v.Stamp), (fun v -> v.LogicalName), (fun v -> v.Range), (fun osgn -> osgn), "ovals") - oanoninfos=NodeOutTable<_, _>.Create((fun (v: AnonRecdTypeInfo) -> v.Stamp), (fun v -> string v.Stamp), (fun _ -> range0), id, "oanoninfos") - ostrings=Table<_>.Create "ostrings (fake)" - opubpaths=Table<_>.Create "opubpaths (fake)" - onlerefs=Table<_>.Create "onlerefs (fake)" - osimpletys=Table<_>.Create "osimpletys (fake)" - oglobals=g - ofile=file - oInMem=inMem - isStructThisArgPos = false } + st1.occus, sizes, st1.ostrings, st1.opubpaths, st1.onlerefs, st1.osimpletys, st1.os.Close() + let phase2bytes = + let st2 = + { os = ByteBuffer.Create 100000 + oscope=scope + occus= Table<_>.Create "occus (fake)" + oentities=NodeOutTable<_, _>.Create((fun (tc: Tycon) -> tc.Stamp), (fun tc -> tc.LogicalName), (fun tc -> tc.Range), (fun osgn -> osgn), "otycons") + otypars=NodeOutTable<_, _>.Create((fun (tp: Typar) -> tp.Stamp), (fun tp -> tp.DisplayName), (fun tp -> tp.Range), (fun osgn -> osgn), "otypars") + ovals=NodeOutTable<_, _>.Create((fun (v: Val) -> v.Stamp), (fun v -> v.LogicalName), (fun v -> v.Range), (fun osgn -> osgn), "ovals") + oanoninfos=NodeOutTable<_, _>.Create((fun (v: AnonRecdTypeInfo) -> v.Stamp), (fun v -> string v.Stamp), (fun _ -> range0), id, "oanoninfos") + ostrings=Table<_>.Create "ostrings (fake)" + opubpaths=Table<_>.Create "opubpaths (fake)" + onlerefs=Table<_>.Create "onlerefs (fake)" + osimpletys=Table<_>.Create "osimpletys (fake)" + oglobals=g + ofile=file + oInMem=inMem + isStructThisArgPos = false } p_array p_encoded_ccuref ccuNameTab.AsArray st2 // Add a 4th integer indicated by a negative 1st integer let z1 = if nanoninfos > 0 then -ntycons-1 else ntycons @@ -839,14 +828,11 @@ let pickleObjWithDanglingCcus inMem file g scope p x = (p_array p_encoded_pubpath) (p_array p_encoded_nleref) (p_array p_encoded_simpletyp) - p_memory + p_bytes (stringTab.AsArray, pubpathTab.AsArray, nlerefTab.AsArray, simpleTyTab.AsArray, phase1bytes) st2 - st2.os - - let finalBytes = phase2bytes - (st1.os :> System.IDisposable).Dispose() - finalBytes + st2.os.Close() + phase2bytes let check (ilscope: ILScopeRef) (inMap : NodeInTable<_, _>) = for i = 0 to inMap.Count - 1 do @@ -955,7 +941,7 @@ let u_ILPublicKey st = | 1 -> u_bytes st |> PublicKeyToken | _ -> ufailwith st "u_ILPublicKey" -let u_ILVersion st = +let u_ILVersion st = let (major, minor, build, revision) = u_tup4 u_uint16 u_uint16 u_uint16 u_uint16 st ILVersionInfo(major, minor, build, revision) @@ -1345,7 +1331,7 @@ let p_namemap p = p_Map p_string p let u_Map_core uk uv n st = Map.ofSeq (seq { for _ in 1..n -> (uk st, uv st) }) -let u_Map uk uv st = +let u_Map uk uv st = let n = u_int st u_Map_core uk uv n st @@ -1463,12 +1449,12 @@ let p_kind x st = let p_member_kind x st = p_byte (match x with - | SynMemberKind.Member -> 0 - | SynMemberKind.PropertyGet -> 1 - | SynMemberKind.PropertySet -> 2 - | SynMemberKind.Constructor -> 3 - | SynMemberKind.ClassConstructor -> 4 - | SynMemberKind.PropertyGetSet -> pfailwith st "pickling: SynMemberKind.PropertyGetSet only expected in parse trees") st + | MemberKind.Member -> 0 + | MemberKind.PropertyGet -> 1 + | MemberKind.PropertySet -> 2 + | MemberKind.Constructor -> 3 + | MemberKind.ClassConstructor -> 4 + | MemberKind.PropertyGetSet -> pfailwith st "pickling: MemberKind.PropertyGetSet only expected in parse trees") st let u_kind st = match u_byte st with @@ -1478,14 +1464,14 @@ let u_kind st = let u_member_kind st = match u_byte st with - | 0 -> SynMemberKind.Member - | 1 -> SynMemberKind.PropertyGet - | 2 -> SynMemberKind.PropertySet - | 3 -> SynMemberKind.Constructor - | 4 -> SynMemberKind.ClassConstructor + | 0 -> MemberKind.Member + | 1 -> MemberKind.PropertyGet + | 2 -> MemberKind.PropertySet + | 3 -> MemberKind.Constructor + | 4 -> MemberKind.ClassConstructor | _ -> ufailwith st "u_member_kind" -let p_MemberFlags (x: SynMemberFlags) st = +let p_MemberFlags x st = p_tup6 p_bool p_bool p_bool p_bool p_bool p_member_kind (x.IsInstance, false (* _x3UnusedBoolInFormat *), @@ -1493,7 +1479,7 @@ let p_MemberFlags (x: SynMemberFlags) st = x.IsOverrideOrExplicitImpl, x.IsFinal, x.MemberKind) st -let u_MemberFlags st : SynMemberFlags= +let u_MemberFlags st = let x2, _x3UnusedBoolInFormat, x4, x5, x6, x7 = u_tup6 u_bool u_bool u_bool u_bool u_bool u_member_kind st { IsInstance=x2 IsDispatchSlot=x4 @@ -2455,7 +2441,7 @@ and u_dtree_discrim st = and u_target st = let a, b = u_tup2 u_Vals u_expr st in (TTarget(a, b, DebugPointForTarget.No)) -and u_bind st = let a = u_Val st in let b = u_expr st in TBind(a, b, DebugPointAtBinding.NoneAtSticky) +and u_bind st = let a = u_Val st in let b = u_expr st in TBind(a, b, NoDebugPointAtStickyBinding) and u_lval_op_kind st = match u_byte st with @@ -2656,7 +2642,7 @@ and u_expr st = let c = u_targets st let d = u_dummy_range st let e = u_ty st - Expr.Match (DebugPointAtBinding.NoneAtSticky, a, b, c, d, e) + Expr.Match (NoDebugPointAtStickyBinding, a, b, c, d, e) | 10 -> let b = u_ty st let c = (u_option u_Val) st let d = u_expr st @@ -2680,7 +2666,7 @@ and u_expr st = | 14 -> let traitInfo = u_trait st let m = u_dummy_range st - Expr.WitnessArg (traitInfo, m) + Expr.WitnessArg (traitInfo, m) | _ -> ufailwith st "u_expr" and p_static_optimization_constraint x st = diff --git a/src/fsharp/TypedTreePickle.fsi b/src/fsharp/TypedTreePickle.fsi index 5a2ade30289..b5d1547430b 100644 --- a/src/fsharp/TypedTreePickle.fsi +++ b/src/fsharp/TypedTreePickle.fsi @@ -1,33 +1,31 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// Defines the framework for serializing and de-serializing TAST data structures as binary blobs for the F# metadata format. -module internal FSharp.Compiler.TypedTreePickle +module internal FSharp.Compiler.TypedTreePickle -open FSharp.Compiler.IO -open Internal.Utilities -open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.TypedTree open FSharp.Compiler.TcGlobals /// Represents deserialized data with a dangling set of CCU fixup thunks indexed by name [] -type PickledDataWithReferences<'RawData> = +type PickledDataWithReferences<'RawData> = { /// The data that uses a collection of CcuThunks internally - RawData: 'RawData + RawData: 'RawData /// The assumptions that need to be fixed up FixupThunks: CcuThunk [] - } + } member Fixup : (CcuReference -> CcuThunk) -> 'RawData - /// Like Fixup but loader may return None, in which case there is no fixup. member OptionalFixup: (CcuReference -> CcuThunk option) -> 'RawData - + /// The type of state written to by picklers -type WriterState +type WriterState /// A function to pickle a value into a given stateful writer type pickler<'T> = 'T -> WriterState -> unit @@ -84,10 +82,10 @@ val internal p_ty : pickler val internal pickleCcuInfo : pickler /// Serialize an arbitrary object using the given pickler -val pickleObjWithDanglingCcus : inMem: bool -> file: string -> TcGlobals -> scope:CcuThunk -> pickler<'T> -> 'T -> ByteBuffer +val pickleObjWithDanglingCcus : inMem: bool -> file: string -> TcGlobals -> scope:CcuThunk -> pickler<'T> -> 'T -> byte[] /// The type of state unpicklers read from -type ReaderState +type ReaderState /// A function to read a value from a given state type unpickler<'T> = ReaderState -> 'T @@ -134,7 +132,7 @@ val internal u_tcref : unpickler /// Deserialize a TAST union case reference val internal u_ucref : unpickler -/// Deserialize a TAST expression +/// Deserialize a TAST expression val internal u_expr : unpickler /// Deserialize a TAST type @@ -145,3 +143,6 @@ val internal unpickleCcuInfo : ReaderState -> PickledCcuInfo /// Deserialize an arbitrary object which may have holes referring to other compilation units val internal unpickleObjWithDanglingCcus : file:string -> viewedScope:ILScopeRef -> ilModule:ILModuleDef option -> ('T unpickler) -> ReadOnlyByteMemory -> PickledDataWithReferences<'T> + + + diff --git a/src/fsharp/UnicodeLexing.fs b/src/fsharp/UnicodeLexing.fs index 99ee27ff721..e2c9ed7df65 100644 --- a/src/fsharp/UnicodeLexing.fs +++ b/src/fsharp/UnicodeLexing.fs @@ -1,25 +1,28 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -/// Functions for Unicode char-based lexing module internal FSharp.Compiler.UnicodeLexing +//------------------------------------------------------------------ +// Functions for Unicode char-based lexing (new code). +// + open System.IO open Internal.Utilities.Text.Lexing type Lexbuf = LexBuffer -let StringAsLexbuf (reportLibraryOnlyFeatures, supportsFeature, s: string) = - LexBuffer.FromChars (reportLibraryOnlyFeatures, supportsFeature, s.ToCharArray()) +let StringAsLexbuf (supportsFeature, s: string) = + LexBuffer.FromChars (supportsFeature, s.ToCharArray()) -let FunctionAsLexbuf (reportLibraryOnlyFeatures, supportsFeature, bufferFiller) = - LexBuffer.FromFunction(reportLibraryOnlyFeatures, supportsFeature, bufferFiller) +let FunctionAsLexbuf (supportsFeature, bufferFiller) = + LexBuffer.FromFunction(supportsFeature, bufferFiller) -let SourceTextAsLexbuf (reportLibraryOnlyFeatures, supportsFeature, sourceText) = - LexBuffer.FromSourceText(reportLibraryOnlyFeatures, supportsFeature, sourceText) +let SourceTextAsLexbuf (supportsFeature, sourceText) = + LexBuffer.FromSourceText(supportsFeature, sourceText) -let StreamReaderAsLexbuf (reportLibraryOnlyFeatures, supportsFeature, reader: StreamReader) = +let StreamReaderAsLexbuf (supportsFeature, reader: StreamReader) = let mutable isFinished = false - FunctionAsLexbuf (reportLibraryOnlyFeatures, supportsFeature, fun (chars, start, length) -> + FunctionAsLexbuf (supportsFeature, fun (chars, start, length) -> if isFinished then 0 else let nBytesRead = reader.Read(chars, start, length) diff --git a/src/fsharp/UnicodeLexing.fsi b/src/fsharp/UnicodeLexing.fsi index 838b96a6a11..1885d246b78 100644 --- a/src/fsharp/UnicodeLexing.fsi +++ b/src/fsharp/UnicodeLexing.fsi @@ -7,13 +7,13 @@ open FSharp.Compiler.Features open FSharp.Compiler.Text open Internal.Utilities.Text.Lexing -type Lexbuf = LexBuffer +type Lexbuf = LexBuffer -val internal StringAsLexbuf: reportLibraryOnlyFeatures: bool * (LanguageFeature -> bool) * string -> Lexbuf +val internal StringAsLexbuf: (LanguageFeature -> bool) * string -> Lexbuf -val public FunctionAsLexbuf: reportLibraryOnlyFeatures: bool * (LanguageFeature -> bool) * (char [] * int * int -> int) -> Lexbuf +val public FunctionAsLexbuf: (LanguageFeature -> bool) * (char [] * int * int -> int) -> Lexbuf -val public SourceTextAsLexbuf: reportLibraryOnlyFeatures: bool * (LanguageFeature -> bool) * ISourceText -> Lexbuf +val public SourceTextAsLexbuf: (LanguageFeature -> bool) * ISourceText -> Lexbuf /// Will not dispose of the stream reader. -val public StreamReaderAsLexbuf: reportLibraryOnlyFeatures: bool * (LanguageFeature -> bool) * StreamReader -> Lexbuf +val public StreamReaderAsLexbuf: (LanguageFeature -> bool) * StreamReader -> Lexbuf diff --git a/src/fsharp/XmlAdapters.fs b/src/fsharp/XmlAdapters.fs index f4bde8561b7..908f5f059ff 100644 --- a/src/fsharp/XmlAdapters.fs +++ b/src/fsharp/XmlAdapters.fs @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal Internal.Utilities.XmlAdapters +module internal FSharp.Compiler.XmlAdapters //Replacement for: System.Security.SecurityElement.Escape(line) All platforms let s_escapeChars = [| '<'; '>'; '\"'; '\''; '&' |] diff --git a/src/fsharp/XmlAdapters.fsi b/src/fsharp/XmlAdapters.fsi index eb45763930c..9b2f4f68188 100644 --- a/src/fsharp/XmlAdapters.fsi +++ b/src/fsharp/XmlAdapters.fsi @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal Internal.Utilities.XmlAdapters +module internal FSharp.Compiler.XmlAdapters val s_escapeChars : char [] diff --git a/src/fsharp/XmlDoc.fs b/src/fsharp/XmlDoc.fs index 3236e7c2f66..f4404e66314 100644 --- a/src/fsharp/XmlDoc.fs +++ b/src/fsharp/XmlDoc.fs @@ -1,19 +1,13 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.Xml +module public FSharp.Compiler.XmlDoc open System -open System.IO -open System.Xml open System.Xml.Linq -open Internal.Utilities.Library -open Internal.Utilities.Collections open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.IO -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Position -open FSharp.Compiler.Text.Range -open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.Lib +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.Range /// Represents collected XmlDoc lines [] @@ -25,9 +19,9 @@ type XmlDoc(unprocessedLines: string[], range: range) = let lineAT = lineA.TrimStart([|' '|]) if lineAT = "" then processLines rest elif lineAT.StartsWithOrdinal("<") then lines - else + else [""] @ - (lines |> List.map Internal.Utilities.XmlAdapters.escape) @ + (lines |> List.map FSharp.Compiler.XmlAdapters.escape) @ [""] /// Get the lines before insertion of implicit summary tags and encoding @@ -44,16 +38,16 @@ type XmlDoc(unprocessedLines: string[], range: range) = member _.Range = range static member Empty = XmlDocStatics.Empty - + member _.IsEmpty = unprocessedLines |> Array.forall String.IsNullOrWhiteSpace member doc.NonEmpty = not doc.IsEmpty - - static member Merge (doc1: XmlDoc) (doc2: XmlDoc) = + + static member Merge (doc1: XmlDoc) (doc2: XmlDoc) = XmlDoc(Array.append doc1.UnprocessedLines doc2.UnprocessedLines, unionRanges doc1.Range doc2.Range) - + member doc.GetXmlText() = if doc.IsEmpty then "" else @@ -66,29 +60,29 @@ type XmlDoc(unprocessedLines: string[], range: range) = let xml = XDocument.Parse("\n"+doc.GetXmlText()+"\n", LoadOptions.SetLineInfo ||| LoadOptions.PreserveWhitespace) - - // The parameter names are checked for consistency, so parameter references and + + // The parameter names are checked for consistency, so parameter references and // parameter documentation must match an actual parameter. In addition, if any parameters // have documentation then all parameters must have documentation - match paramNamesOpt with + match paramNamesOpt with | None -> () - | Some paramNames -> + | Some paramNames -> for p in xml.Descendants(XName.op_Implicit "param") do - match p.Attribute(XName.op_Implicit "name") with - | null -> + match p.Attribute(XName.op_Implicit "name") with + | null -> warning (Error (FSComp.SR.xmlDocMissingParameterName(), doc.Range)) - | attr -> + | attr -> let nm = attr.Value if not (paramNames |> List.contains nm) then warning (Error (FSComp.SR.xmlDocInvalidParameterName(nm), doc.Range)) - let paramsWithDocs = + let paramsWithDocs = [ for p in xml.Descendants(XName.op_Implicit "param") do - match p.Attribute(XName.op_Implicit "name") with + match p.Attribute(XName.op_Implicit "name") with | null -> () | attr -> attr.Value ] - if paramsWithDocs.Length > 0 then + if paramsWithDocs.Length > 0 then for p in paramNames do if not (paramsWithDocs |> List.contains p) then warning (Error (FSComp.SR.xmlDocMissingParameter(p), doc.Range)) @@ -99,38 +93,38 @@ type XmlDoc(unprocessedLines: string[], range: range) = warning (Error (FSComp.SR.xmlDocDuplicateParameter(d), doc.Range)) for pref in xml.Descendants(XName.op_Implicit "paramref") do - match pref.Attribute(XName.op_Implicit "name") with + match pref.Attribute(XName.op_Implicit "name") with | null -> warning (Error (FSComp.SR.xmlDocMissingParameterName(), doc.Range)) - | attr -> + | attr -> let nm = attr.Value if not (paramNames |> List.contains nm) then warning (Error (FSComp.SR.xmlDocInvalidParameterName(nm), doc.Range)) - with e -> + with e -> warning (Error (FSComp.SR.xmlDocBadlyFormed(e.Message), doc.Range)) #if CREF_ELABORATION member doc.Elaborate (crefResolver) = - for see in seq { yield! xml.Descendants(XName.op_Implicit "see") + for see in seq { yield! xml.Descendants(XName.op_Implicit "see") yield! xml.Descendants(XName.op_Implicit "seealso") yield! xml.Descendants(XName.op_Implicit "exception") } do - match see.Attribute(XName.op_Implicit "cref") with + match see.Attribute(XName.op_Implicit "cref") with | null -> warning (Error (FSComp.SR.xmlDocMissingCrossReference(), doc.Range)) - | attr -> + | attr -> let cref = attr.Value - if cref.StartsWith("T:") || cref.StartsWith("P:") || cref.StartsWith("M:") || - cref.StartsWith("E:") || cref.StartsWith("F:") then + if cref.StartsWith("T:") || cref.StartsWith("P:") || cref.StartsWith("M:") || + cref.StartsWith("E:") || cref.StartsWith("F:") then () else - match crefResolver cref with + match crefResolver cref with | None -> warning (Error (FSComp.SR.xmlDocUnresolvedCrossReference(nm), doc.Range)) - | Some text -> + | Some text -> attr.Value <- text modified <- true - if modified then - let m = doc.Range - let newLines = + if modified then + let m = doc.Range + let newLines = [| for e in xml.Elements() do yield! e.ToString().Split([| '\r'; '\n' |], StringSplitOptions.RemoveEmptyEntries) |] lines <- newLines @@ -187,25 +181,23 @@ type XmlDocCollector() = /// Represents the XmlDoc fragments as collected from the lexer during parsing type PreXmlDoc = - | PreXmlDirect of unprocessedLines: string[] * range: range | PreXmlMerge of PreXmlDoc * PreXmlDoc | PreXmlDoc of pos * XmlDocCollector | PreXmlDocEmpty - member x.ToXmlDoc(check: bool, paramNamesOpt: string list option) = + member x.ToXmlDoc(check, paramNamesOpt: string list option) = match x with - | PreXmlDirect (lines, m) -> XmlDoc(lines, m) | PreXmlMerge(a, b) -> XmlDoc.Merge (a.ToXmlDoc(check, paramNamesOpt)) (b.ToXmlDoc(check, paramNamesOpt)) | PreXmlDocEmpty -> XmlDoc.Empty | PreXmlDoc (pos, collector) -> let preLines = collector.LinesBefore pos if preLines.Length = 0 then XmlDoc.Empty - else + else let lines = Array.map fst preLines let m = Array.reduce Range.unionRanges (Array.map snd preLines) let doc = XmlDoc (lines, m) - if check then + if check then doc.Check(paramNamesOpt) doc @@ -215,65 +207,5 @@ type PreXmlDoc = static member Empty = PreXmlDocEmpty - static member Create(unprocessedLines, range) = PreXmlDirect(unprocessedLines, range) - static member Merge a b = PreXmlMerge (a, b) -[] -type XmlDocumentationInfo private (tryGetXmlDocument: unit -> XmlDocument option) = - - // 2 and 4 are arbitrary but should be reasonable enough - [] - static let cacheStrongSize = 2 - [] - static let cacheMaxSize = 4 - static let cacheAreSimilar = - fun ((str1: string, dt1: DateTime), (str2: string, dt2: DateTime)) -> - str1.Equals(str2, StringComparison.OrdinalIgnoreCase) && - dt1 = dt2 - static let cache = AgedLookup(keepStrongly=cacheStrongSize, areSimilar=cacheAreSimilar, keepMax=cacheMaxSize) - - let tryGetSummaryNode xmlDocSig = - tryGetXmlDocument() - |> Option.bind (fun doc -> - match doc.SelectSingleNode(sprintf "doc/members/member[@name='%s']" xmlDocSig) with - | null -> None - | node when node.HasChildNodes -> Some node - | _ -> None) - - member _.TryGetXmlDocBySig(xmlDocSig: string) = - tryGetSummaryNode xmlDocSig - |> Option.map (fun node -> - let childNodes = node.ChildNodes - let lines = Array.zeroCreate childNodes.Count - for i = 0 to childNodes.Count - 1 do - let childNode = childNodes.[i] - lines.[i] <- childNode.OuterXml - XmlDoc(lines, range0) - ) - - static member TryCreateFromFile(xmlFileName: string) = - if not (FileSystem.FileExistsShim(xmlFileName)) || not (String.Equals(Path.GetExtension(xmlFileName), ".xml", StringComparison.OrdinalIgnoreCase)) then - None - else - let tryGetXmlDocument = - fun () -> - try - let lastWriteTime = FileSystem.GetLastWriteTimeShim(xmlFileName) - let cacheKey = (xmlFileName, lastWriteTime) - match cache.TryGet((), cacheKey) with - | Some doc -> Some doc - | _ -> - let doc = XmlDocument() - use xmlStream = FileSystem.OpenFileForReadShim(xmlFileName) - doc.Load(xmlStream) - cache.Put((), cacheKey, doc) - Some doc - with - | _ -> - None - Some(XmlDocumentationInfo(tryGetXmlDocument)) - -type IXmlDocumentationInfoLoader = - - abstract TryLoad : assemblyFileName: string * ILModuleDef -> XmlDocumentationInfo option diff --git a/src/fsharp/XmlDoc.fsi b/src/fsharp/XmlDoc.fsi index 17662aaa9ae..69f12953493 100644 --- a/src/fsharp/XmlDoc.fsi +++ b/src/fsharp/XmlDoc.fsi @@ -1,27 +1,22 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.Xml +module public FSharp.Compiler.XmlDoc -open System.Xml -open FSharp.Compiler.Text -open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.Range /// Represents collected XmlDoc lines [] -type public XmlDoc = +type XmlDoc = new: unprocessedLines:string [] * range:range -> XmlDoc - /// Merge two XML documentation static member Merge: doc1:XmlDoc -> doc2:XmlDoc -> XmlDoc - /// Check the XML documentation - member internal Check: paramNamesOpt:string list option -> unit + member Check: paramNamesOpt:string list option -> unit /// Get the lines after insertion of implicit summary tags and encoding member GetElaboratedXmlLines: unit -> string [] - /// Get the elaborated XML documentation as XML text member GetXmlText: unit -> string member IsEmpty: bool @@ -36,37 +31,26 @@ type public XmlDoc = static member Empty: XmlDoc /// Used to collect XML documentation during lexing and parsing. -type internal XmlDocCollector = +type XmlDocCollector = new: unit -> XmlDocCollector - member AddGrabPoint: pos: pos -> unit + member AddGrabPoint: pos:pos -> unit member AddXmlDocLine: line:string * range:range -> unit - member LinesBefore: grabPointPos: pos -> (string * range) [] + member LinesBefore: grabPointPos:pos -> (string * range) [] /// Represents the XmlDoc fragments as collected from the lexer during parsing -[] -type public PreXmlDoc = +type PreXmlDoc = + | PreXmlMerge of PreXmlDoc * PreXmlDoc + | PreXmlDoc of pos * XmlDocCollector + | PreXmlDocEmpty - static member internal CreateFromGrabPoint: collector:XmlDocCollector * grabPointPos: pos -> PreXmlDoc + static member CreateFromGrabPoint: collector:XmlDocCollector * grabPointPos:pos -> PreXmlDoc static member Merge: a:PreXmlDoc -> b:PreXmlDoc -> PreXmlDoc - - static member Create: unprocessedLines:string [] * range:range -> PreXmlDoc member ToXmlDoc: check:bool * paramNamesOpt:string list option -> XmlDoc static member Empty: PreXmlDoc - -[] -type internal XmlDocumentationInfo = - - member TryGetXmlDocBySig : xmlDocSig: string -> XmlDoc option - - static member TryCreateFromFile : xmlFileName: string -> XmlDocumentationInfo option - -type internal IXmlDocumentationInfoLoader = - - abstract TryLoad : assemblyFileName: string * ILModuleDef -> XmlDocumentationInfo option diff --git a/src/fsharp/XmlDocFileWriter.fs b/src/fsharp/XmlDocFileWriter.fs index 09fef99f9f5..b396d622b10 100644 --- a/src/fsharp/XmlDocFileWriter.fs +++ b/src/fsharp/XmlDocFileWriter.fs @@ -4,32 +4,33 @@ module internal FSharp.Compiler.XmlDocFileWriter open System.IO open System.Reflection -open Internal.Utilities.Library +open Internal.Utilities +open FSharp.Compiler +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.IO -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Xml +open FSharp.Compiler.Lib +open FSharp.Compiler.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.XmlDoc module XmlDocWriter = let hasDoc (doc: XmlDoc) = not doc.IsEmpty - + let ComputeXmlDocSigs (tcGlobals, generatedCcu: CcuThunk) = let g = tcGlobals let doValSig ptext (v: Val) = if hasDoc v.XmlDoc then v.XmlDocSig <- XmlDocSigOfVal g false ptext v - let doTyconSig ptext (tc: Tycon) = + let doTyconSig ptext (tc: Tycon) = if (hasDoc tc.XmlDoc) then tc.XmlDocSig <- XmlDocSigOfTycon [ptext; tc.CompiledName] - for vref in tc.MembersOfFSharpTyconSorted do + for vref in tc.MembersOfFSharpTyconSorted do doValSig ptext vref.Deref for uc in tc.UnionCasesArray do if (hasDoc uc.XmlDoc) then uc.XmlDocSig <- XmlDocSigOfUnionCase [ptext; tc.CompiledName; uc.Id.idText] for rf in tc.AllFieldsArray do if (hasDoc rf.XmlDoc) then rf.XmlDocSig <- - if tc.IsRecordTycon && (not rf.IsStatic) then + if tc.IsRecordTycon && (not rf.IsStatic) then // represents a record field, which is exposed as a property XmlDocSigOfProperty [ptext; tc.CompiledName; rf.Id.idText] else @@ -37,75 +38,76 @@ module XmlDocWriter = let doModuleMemberSig path (m: ModuleOrNamespace) = m.XmlDocSig <- XmlDocSigOfSubModul [path] (* moduleSpec - recurses *) - let rec doModuleSig path (mspec: ModuleOrNamespace) = + let rec doModuleSig path (mspec: ModuleOrNamespace) = let mtype = mspec.ModuleOrNamespaceType - let path = + let path = (* skip the first item in the path which is the assembly name *) - match path with + match path with | None -> Some "" | 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 - let vals = + let vals = mtype.AllValsAndMembers |> Seq.toList - |> List.filter (fun x -> not x.IsCompilerGenerated) + |> 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 (doTyconSig ptext) mtype.TypeDefinitions - - doModuleSig None generatedCcu.Contents + + doModuleSig None generatedCcu.Contents let WriteXmlDocFile (assemblyName, generatedCcu: CcuThunk, xmlfile) = - if not (FileSystemUtils.hasSuffixCaseInsensitive "xml" xmlfile ) then + if not (Filename.hasSuffixCaseInsensitive "xml" xmlfile ) then error(Error(FSComp.SR.docfileNoXmlSuffix(), Range.rangeStartup)) let mutable members = [] - let addMember id xmlDoc = + let addMember id xmlDoc = if hasDoc xmlDoc then let doc = xmlDoc.GetXmlText() members <- (id, doc) :: members let doVal (v: Val) = addMember v.XmlDocSig v.XmlDoc let doUnionCase (uc: UnionCase) = addMember uc.XmlDocSig uc.XmlDoc let doField (rf: RecdField) = addMember rf.XmlDocSig rf.XmlDoc - let doTycon (tc: Tycon) = + let doTycon (tc: Tycon) = addMember tc.XmlDocSig tc.XmlDoc - for vref in tc.MembersOfFSharpTyconSorted do - doVal vref.Deref + for vref in tc.MembersOfFSharpTyconSorted do + doVal vref.Deref for uc in tc.UnionCasesArray do doUnionCase uc for rf in tc.AllFieldsArray do doField rf let modulMember (m: ModuleOrNamespace) = addMember m.XmlDocSig m.XmlDoc - - let rec doModule (mspec: ModuleOrNamespace) = + + let rec doModule (mspec: ModuleOrNamespace) = let mtype = mspec.ModuleOrNamespaceType if mspec.IsModule then modulMember mspec - let vals = + let vals = mtype.AllValsAndMembers |> Seq.toList - |> List.filter (fun x -> not x.IsCompilerGenerated) + |> 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 doTycon mtype.TypeDefinitions - + doModule generatedCcu.Contents - use os = FileSystem.OpenFileForWriteShim(xmlfile, FileMode.OpenOrCreate).GetWriter() + use os = File.CreateText xmlfile fprintfn os ("") fprintfn os ("") fprintfn os ("%s") assemblyName fprintfn os ("") - members |> List.iter (fun (id, doc) -> + members |> List.iter (fun (id, doc) -> fprintfn os "" id fprintfn os "%s" doc fprintfn os "") - fprintfn os "" - fprintfn os "" + fprintfn os "" + fprintfn os "" + diff --git a/src/fsharp/XmlDocFileWriter.fsi b/src/fsharp/XmlDocFileWriter.fsi index 23319eae40e..7d30366ecb8 100644 --- a/src/fsharp/XmlDocFileWriter.fsi +++ b/src/fsharp/XmlDocFileWriter.fsi @@ -7,12 +7,6 @@ open FSharp.Compiler.TcGlobals module XmlDocWriter = - /// Writes the XML document signature to the XmlDocSig property of each - /// element (field, union case, etc) of the specified compilation unit. - /// The XmlDocSig is the unique identifier of this XmlDoc in the generated Xml documentation file. - /// The full format is described at https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/documentation-comments#id-string-format val ComputeXmlDocSigs: tcGlobals: TcGlobals * generatedCcu: CcuThunk -> unit - /// Writes the XmlDocSig property of each element (field, union case, etc) - /// of the specified compilation unit to an XML document in a new text file. val WriteXmlDocFile: assemblyName: string * generatedCcu: CcuThunk * xmlfile: string -> unit diff --git a/src/fsharp/absil/bytes.fs b/src/fsharp/absil/bytes.fs index ef5556513c9..7d231337d63 100644 --- a/src/fsharp/absil/bytes.fs +++ b/src/fsharp/absil/bytes.fs @@ -1,8 +1,566 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// Byte arrays -namespace FSharp.Compiler.IO +namespace FSharp.Compiler.AbstractIL.Internal +open System +open System.IO +open System.IO.MemoryMappedFiles +open System.Runtime.InteropServices +open System.Runtime.CompilerServices +open FSharp.NativeInterop +#nowarn "9" + +module Utils = + let runningOnMono = + #if ENABLE_MONO_SUPPORT + // Officially supported way to detect if we are running on Mono. + // See http://www.mono-project.com/FAQ:_Technical + // "How can I detect if am running in Mono?" section + try + System.Type.GetType ("Mono.Runtime") <> null + with _ -> + // Must be robust in the case that someone else has installed a handler into System.AppDomain.OnTypeResolveEvent + // that is not reliable. + // This is related to bug 5506--the issue is actually a bug in VSTypeResolutionService.EnsurePopulated which is + // called by OnTypeResolveEvent. The function throws a NullReferenceException. I'm working with that team to get + // their issue fixed but we need to be robust here anyway. + false + #else + false + #endif + +module internal Bytes = + let b0 n = (n &&& 0xFF) + let b1 n = ((n >>> 8) &&& 0xFF) + let b2 n = ((n >>> 16) &&& 0xFF) + let b3 n = ((n >>> 24) &&& 0xFF) + + let dWw1 n = int32 ((n >>> 32) &&& 0xFFFFFFFFL) + let dWw0 n = int32 (n &&& 0xFFFFFFFFL) + + let get (b:byte[]) n = int32 (Array.get b n) + let zeroCreate n : byte[] = Array.zeroCreate n + + let sub ( b:byte[]) s l = Array.sub b s l + let blit (a:byte[]) b c d e = Array.blit a b c d e + + let ofInt32Array (arr:int[]) = Array.init arr.Length (fun i -> byte arr.[i]) + + let stringAsUtf8NullTerminated (s:string) = + Array.append (System.Text.Encoding.UTF8.GetBytes s) (ofInt32Array [| 0x0 |]) + + let stringAsUnicodeNullTerminated (s:string) = + Array.append (System.Text.Encoding.Unicode.GetBytes s) (ofInt32Array [| 0x0;0x0 |]) + +[] +type ByteMemory () = + + abstract Item: int -> byte with get, set + + abstract Length: int + + abstract ReadBytes: pos: int * count: int -> byte[] + + abstract ReadInt32: pos: int -> int + + abstract ReadUInt16: pos: int -> uint16 + + abstract ReadUtf8String: pos: int * count: int -> string + + abstract Slice: pos: int * count: int -> ByteMemory + + abstract CopyTo: Stream -> unit + + abstract Copy: srcOffset: int * dest: byte[] * destOffset: int * count: int -> unit + + abstract ToArray: unit -> byte[] + + abstract AsStream: unit -> Stream + + abstract AsReadOnlyStream: unit -> Stream + +[] +type ByteArrayMemory(bytes: byte[], offset, length) = + inherit ByteMemory() + + let checkCount count = + if count < 0 then + raise (ArgumentOutOfRangeException("count", "Count is less than zero.")) + + do + if length < 0 || length > bytes.Length then + raise (ArgumentOutOfRangeException("length")) + + if offset < 0 || (offset + length) > bytes.Length then + raise (ArgumentOutOfRangeException("offset")) + + override _.Item + with get i = bytes.[offset + i] + and set i v = bytes.[offset + i] <- v + + override _.Length = length + + override _.ReadBytes(pos, count) = + checkCount count + if count > 0 then + Array.sub bytes (offset + pos) count + else + Array.empty + + override _.ReadInt32 pos = + let finalOffset = offset + pos + (uint32 bytes.[finalOffset]) ||| + ((uint32 bytes.[finalOffset + 1]) <<< 8) ||| + ((uint32 bytes.[finalOffset + 2]) <<< 16) ||| + ((uint32 bytes.[finalOffset + 3]) <<< 24) + |> int + + override _.ReadUInt16 pos = + let finalOffset = offset + pos + (uint16 bytes.[finalOffset]) ||| + ((uint16 bytes.[finalOffset + 1]) <<< 8) + + override _.ReadUtf8String(pos, count) = + checkCount count + if count > 0 then + System.Text.Encoding.UTF8.GetString(bytes, offset + pos, count) + else + String.Empty + + override _.Slice(pos, count) = + checkCount count + if count > 0 then + ByteArrayMemory(bytes, offset + pos, count) :> ByteMemory + else + ByteArrayMemory(Array.empty, 0, 0) :> ByteMemory + + override _.CopyTo stream = + if length > 0 then + stream.Write(bytes, offset, length) + + override _.Copy(srcOffset, dest, destOffset, count) = + checkCount count + if count > 0 then + Array.blit bytes (offset + srcOffset) dest destOffset count + + override _.ToArray() = + if length > 0 then + Array.sub bytes offset length + else + Array.empty + + override _.AsStream() = + if length > 0 then + new MemoryStream(bytes, offset, length) :> Stream + else + new MemoryStream([||], 0, 0, false) :> Stream + + override _.AsReadOnlyStream() = + if length > 0 then + new MemoryStream(bytes, offset, length, false) :> Stream + else + new MemoryStream([||], 0, 0, false) :> Stream + +[] +type SafeUnmanagedMemoryStream = + inherit UnmanagedMemoryStream + + val mutable private holder: obj + val mutable private isDisposed: bool + + new (addr, length, holder) = + { + inherit UnmanagedMemoryStream(addr, length) + holder = holder + isDisposed = false + } + + new (addr: nativeptr, length: int64, capacity: int64, access: FileAccess, holder) = + { + inherit UnmanagedMemoryStream(addr, length, capacity, access) + holder = holder + isDisposed = false + } + + override x.Dispose disposing = + base.Dispose disposing + x.holder <- null // Null out so it can be collected. + +type RawByteMemory(addr: nativeptr, length: int, holder: obj) = + inherit ByteMemory () + + let check i = + if i < 0 || i >= length then + raise (ArgumentOutOfRangeException("i")) + + let checkCount count = + if count < 0 then + raise (ArgumentOutOfRangeException("count", "Count is less than zero.")) + + do + if length < 0 then + raise (ArgumentOutOfRangeException("length")) + + override _.Item + with get i = + check i + NativePtr.add addr i + |> NativePtr.read + and set i v = + check i + NativePtr.set addr i v + + override _.Length = length + + override _.ReadUtf8String(pos, count) = + checkCount count + if count > 0 then + check pos + check (pos + count - 1) + System.Text.Encoding.UTF8.GetString(NativePtr.add addr pos, count) + else + String.Empty + + override _.ReadBytes(pos, count) = + checkCount count + if count > 0 then + check pos + check (pos + count - 1) + let res = Bytes.zeroCreate count + Marshal.Copy(NativePtr.toNativeInt addr + nativeint pos, res, 0, count) + res + else + Array.empty + + override _.ReadInt32 pos = + check pos + check (pos + 3) + Marshal.ReadInt32(NativePtr.toNativeInt addr + nativeint pos) + + override _.ReadUInt16 pos = + check pos + check (pos + 1) + uint16(Marshal.ReadInt16(NativePtr.toNativeInt addr + nativeint pos)) + + override _.Slice(pos, count) = + checkCount count + if count > 0 then + check pos + check (pos + count - 1) + RawByteMemory(NativePtr.add addr pos, count, holder) :> ByteMemory + else + ByteArrayMemory(Array.empty, 0, 0) :> ByteMemory + + override x.CopyTo stream = + if length > 0 then + use stream2 = x.AsStream() + stream2.CopyTo stream + + override _.Copy(srcOffset, dest, destOffset, count) = + checkCount count + if count > 0 then + check srcOffset + Marshal.Copy(NativePtr.toNativeInt addr + nativeint srcOffset, dest, destOffset, count) + + override _.ToArray() = + if length > 0 then + let res = Array.zeroCreate length + Marshal.Copy(NativePtr.toNativeInt addr, res, 0, res.Length) + res + else + Array.empty + + override _.AsStream() = + if length > 0 then + new SafeUnmanagedMemoryStream(addr, int64 length, holder) :> Stream + else + new MemoryStream([||], 0, 0, false) :> Stream + + override _.AsReadOnlyStream() = + if length > 0 then + new SafeUnmanagedMemoryStream(addr, int64 length, int64 length, FileAccess.Read, holder) :> Stream + else + new MemoryStream([||], 0, 0, false) :> Stream + +[] +type ReadOnlyByteMemory(bytes: ByteMemory) = + + member _.Item with get i = bytes.[i] + + member _.Length with get () = bytes.Length + + member _.ReadBytes(pos, count) = bytes.ReadBytes(pos, count) + + member _.ReadInt32 pos = bytes.ReadInt32 pos + + member _.ReadUInt16 pos = bytes.ReadUInt16 pos + + member _.ReadUtf8String(pos, count) = bytes.ReadUtf8String(pos, count) + + member _.Slice(pos, count) = bytes.Slice(pos, count) |> ReadOnlyByteMemory + + member _.CopyTo stream = bytes.CopyTo stream + + member _.Copy(srcOffset, dest, destOffset, count) = bytes.Copy(srcOffset, dest, destOffset, count) + + member _.ToArray() = bytes.ToArray() + + member _.AsStream() = bytes.AsReadOnlyStream() + + member _.Underlying = bytes + +[] +module MemoryMappedFileExtensions = + + type MemoryMappedFile with + + static member TryFromByteMemory(bytes: ReadOnlyByteMemory) = + let length = int64 bytes.Length + if length = 0L then + None + else + if Utils.runningOnMono + then + // mono's MemoryMappedFile implementation throws with null `mapName`, so we use byte arrays instead: https://github.com/mono/mono/issues/1024 + None + else + // Try to create a memory mapped file and copy the contents of the given bytes to it. + // If this fails, then we clean up and return None. + try + let mmf = MemoryMappedFile.CreateNew(null, length, MemoryMappedFileAccess.ReadWrite, MemoryMappedFileOptions.None, HandleInheritability.None) + try + use stream = mmf.CreateViewStream(0L, length, MemoryMappedFileAccess.ReadWrite) + bytes.CopyTo stream + Some mmf + with + | _ -> + mmf.Dispose() + None + with + | _ -> + None + +type ByteMemory with + + member x.AsReadOnly() = ReadOnlyByteMemory x + + static member Empty = ByteArrayMemory([||], 0, 0) :> ByteMemory + + static member FromMemoryMappedFile(mmf: MemoryMappedFile) = + let accessor = mmf.CreateViewAccessor() + RawByteMemory.FromUnsafePointer(accessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), int accessor.Capacity, (mmf, accessor)) + + static member FromFile(path, access, ?canShadowCopy: bool) = + let canShadowCopy = defaultArg canShadowCopy false + + if Utils.runningOnMono + then + // mono's MemoryMappedFile implementation throws with null `mapName`, so we use byte arrays instead: https://github.com/mono/mono/issues/10245 + let bytes = File.ReadAllBytes path + ByteArrayMemory.FromArray bytes + else + let memoryMappedFileAccess = + match access with + | FileAccess.Read -> MemoryMappedFileAccess.Read + | FileAccess.Write -> MemoryMappedFileAccess.Write + | _ -> MemoryMappedFileAccess.ReadWrite + + let fileStream = File.Open(path, FileMode.Open, access, FileShare.Read) + + let length = fileStream.Length + + let mmf, accessor, length = + let mmf = + if canShadowCopy then + let mmf = + MemoryMappedFile.CreateNew( + null, + length, + MemoryMappedFileAccess.ReadWrite, + MemoryMappedFileOptions.None, + HandleInheritability.None) + use stream = mmf.CreateViewStream(0L, length, MemoryMappedFileAccess.ReadWrite) + fileStream.CopyTo(stream) + fileStream.Dispose() + mmf + else + MemoryMappedFile.CreateFromFile( + fileStream, + null, + length, + memoryMappedFileAccess, + HandleInheritability.None, + leaveOpen=false) + mmf, mmf.CreateViewAccessor(0L, length, memoryMappedFileAccess), length + + // Validate MMF with the access that was intended. + match access with + | FileAccess.Read when not accessor.CanRead -> invalidOp "Cannot read file" + | FileAccess.Write when not accessor.CanWrite -> invalidOp "Cannot write file" + | FileAccess.ReadWrite when not accessor.CanRead || not accessor.CanWrite -> invalidOp "Cannot read or write file" + | _ -> () + + RawByteMemory.FromUnsafePointer(accessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), int length, (mmf, accessor)) + + static member FromUnsafePointer(addr, length, holder: obj) = + RawByteMemory(NativePtr.ofNativeInt addr, length, holder) :> ByteMemory + + static member FromArray(bytes, offset, length) = + ByteArrayMemory(bytes, offset, length) :> ByteMemory + + static member FromArray bytes = + if bytes.Length = 0 then + ByteMemory.Empty + else + ByteArrayMemory.FromArray(bytes, 0, bytes.Length) + +type internal ByteStream = + { bytes: ReadOnlyByteMemory + mutable pos: int + max: int } + member b.ReadByte() = + if b.pos >= b.max then failwith "end of stream" + let res = b.bytes.[b.pos] + b.pos <- b.pos + 1 + res + member b.ReadUtf8String n = + let res = b.bytes.ReadUtf8String(b.pos,n) + b.pos <- b.pos + n; res + + static member FromBytes (b: ReadOnlyByteMemory,start,length) = + if start < 0 || (start+length) > b.Length then failwith "FromBytes" + { bytes = b; pos = start; max = start+length } + + member b.ReadBytes n = + if b.pos + n > b.max then failwith "ReadBytes: end of stream" + let res = b.bytes.Slice(b.pos, n) + b.pos <- b.pos + n + res + + member b.Position = b.pos +#if LAZY_UNPICKLE + member b.CloneAndSeek = { bytes=b.bytes; pos=pos; max=b.max } + member b.Skip = b.pos <- b.pos + n +#endif + + +type internal ByteBuffer = + { mutable bbArray: byte[] + mutable bbCurrent: int } + + member buf.Ensure newSize = + let oldBufSize = buf.bbArray.Length + if newSize > oldBufSize then + let old = buf.bbArray + buf.bbArray <- Bytes.zeroCreate (max newSize (oldBufSize * 2)) + Bytes.blit old 0 buf.bbArray 0 buf.bbCurrent + + member buf.Close () = Bytes.sub buf.bbArray 0 buf.bbCurrent + + member buf.EmitIntAsByte (i:int) = + let newSize = buf.bbCurrent + 1 + buf.Ensure newSize + buf.bbArray.[buf.bbCurrent] <- byte i + buf.bbCurrent <- newSize + + member buf.EmitByte (b:byte) = buf.EmitIntAsByte (int b) + + member buf.EmitIntsAsBytes (arr:int[]) = + let n = arr.Length + let newSize = buf.bbCurrent + n + buf.Ensure newSize + let bbArr = buf.bbArray + let bbBase = buf.bbCurrent + for i = 0 to n - 1 do + bbArr.[bbBase + i] <- byte arr.[i] + buf.bbCurrent <- newSize + + member bb.FixupInt32 pos value = + bb.bbArray.[pos] <- (Bytes.b0 value |> byte) + bb.bbArray.[pos + 1] <- (Bytes.b1 value |> byte) + bb.bbArray.[pos + 2] <- (Bytes.b2 value |> byte) + bb.bbArray.[pos + 3] <- (Bytes.b3 value |> byte) + + member buf.EmitInt32 n = + let newSize = buf.bbCurrent + 4 + buf.Ensure newSize + buf.FixupInt32 buf.bbCurrent n + buf.bbCurrent <- newSize + + member buf.EmitBytes (i:byte[]) = + let n = i.Length + let newSize = buf.bbCurrent + n + buf.Ensure newSize + Bytes.blit i 0 buf.bbArray buf.bbCurrent n + buf.bbCurrent <- newSize + + member buf.EmitByteMemory (i:ReadOnlyByteMemory) = + let n = i.Length + let newSize = buf.bbCurrent + n + buf.Ensure newSize + i.Copy(0, buf.bbArray, buf.bbCurrent, n) + buf.bbCurrent <- newSize + + member buf.EmitInt32AsUInt16 n = + let newSize = buf.bbCurrent + 2 + buf.Ensure newSize + buf.bbArray.[buf.bbCurrent] <- (Bytes.b0 n |> byte) + buf.bbArray.[buf.bbCurrent + 1] <- (Bytes.b1 n |> byte) + buf.bbCurrent <- newSize + + member buf.EmitBoolAsByte (b:bool) = buf.EmitIntAsByte (if b then 1 else 0) + + member buf.EmitUInt16 (x:uint16) = buf.EmitInt32AsUInt16 (int32 x) + + member buf.EmitInt64 x = + buf.EmitInt32 (Bytes.dWw0 x) + buf.EmitInt32 (Bytes.dWw1 x) + + member buf.Position = buf.bbCurrent + + static member Create sz = + { bbArray=Bytes.zeroCreate sz + bbCurrent = 0 } + +[] +type ByteStorage(getByteMemory: unit -> ReadOnlyByteMemory) = + + let mutable cached = Unchecked.defaultof> + + let getAndCache () = + let byteMemory = getByteMemory () + cached <- WeakReference(byteMemory.Underlying) + byteMemory + + member _.GetByteMemory() = + match cached with + | null -> getAndCache () + | _ -> + match cached.TryGetTarget() with + | true, byteMemory -> byteMemory.AsReadOnly() + | _ -> getAndCache () + + static member FromByteArray(bytes: byte []) = + ByteStorage.FromByteMemory(ByteMemory.FromArray(bytes).AsReadOnly()) + + static member FromByteMemory(bytes: ReadOnlyByteMemory) = + ByteStorage(fun () -> bytes) + + static member FromByteMemoryAndCopy(bytes: ReadOnlyByteMemory, useBackingMemoryMappedFile: bool) = + if useBackingMemoryMappedFile then + match MemoryMappedFile.TryFromByteMemory(bytes) with + | Some mmf -> + ByteStorage(fun () -> ByteMemory.FromMemoryMappedFile(mmf).AsReadOnly()) + | _ -> + let copiedBytes = ByteMemory.FromArray(bytes.ToArray()).AsReadOnly() + ByteStorage.FromByteMemory(copiedBytes) + else + let copiedBytes = ByteMemory.FromArray(bytes.ToArray()).AsReadOnly() + ByteStorage.FromByteMemory(copiedBytes) + + static member FromByteArrayAndCopy(bytes: byte [], useBackingMemoryMappedFile: bool) = + ByteStorage.FromByteMemoryAndCopy(ByteMemory.FromArray(bytes).AsReadOnly(), useBackingMemoryMappedFile) diff --git a/src/fsharp/absil/bytes.fsi b/src/fsharp/absil/bytes.fsi index fe7d77679af..6471f9310e4 100644 --- a/src/fsharp/absil/bytes.fsi +++ b/src/fsharp/absil/bytes.fsi @@ -1,18 +1,24 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -/// Blobs of bytes, cross-compiling -namespace FSharp.Compiler.IO +/// Blobs of bytes, cross-compiling +namespace FSharp.Compiler.AbstractIL.Internal open System.IO open System.IO.MemoryMappedFiles +open Internal.Utilities +open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.Internal -module internal Bytes = +module Utils = + val runningOnMono: bool + +module internal Bytes = /// returned int will be 0 <= x <= 255 - val get: byte[] -> int -> int + val get: byte[] -> int -> int val zeroCreate: int -> byte[] - /// each int must be 0 <= x <= 255 - val ofInt32Array: int[] -> byte[] - /// each int will be 0 <= x <= 255 + /// each int must be 0 <= x <= 255 + val ofInt32Array: int[] -> byte[] + /// each int will be 0 <= x <= 255 val blit: byte[] -> int -> byte[] -> int -> int -> unit @@ -22,7 +28,7 @@ module internal Bytes = /// A view over bytes. /// May be backed by managed or unmanaged memory, or memory mapped file. [] -type ByteMemory = +type internal ByteMemory = abstract Item: int -> byte with get @@ -54,7 +60,7 @@ type ByteMemory = abstract AsReadOnlyStream: unit -> Stream [] -type ReadOnlyByteMemory = +type internal ReadOnlyByteMemory = new: ByteMemory -> ReadOnlyByteMemory @@ -81,7 +87,7 @@ type ReadOnlyByteMemory = member AsStream: unit -> Stream [] -module MemoryMappedFileExtensions = +module internal MemoryMappedFileExtensions = type MemoryMappedFile with @@ -89,7 +95,7 @@ module MemoryMappedFileExtensions = /// If the given ByteMemory's length is zero or a memory mapped file is not supported, the result will be None. static member TryFromByteMemory : bytes: ReadOnlyByteMemory -> MemoryMappedFile option -type ByteMemory with +type internal ByteMemory with member AsReadOnly: unit -> ReadOnlyByteMemory @@ -114,8 +120,8 @@ type ByteMemory with /// Imperative buffers and streams of byte[] [] -type internal ByteBuffer = - member Close : unit -> byte[] +type internal ByteBuffer = + member Close : unit -> byte[] member EmitIntAsByte : int -> unit member EmitIntsAsBytes : int[] -> unit member EmitByte : byte -> unit @@ -136,9 +142,9 @@ type internal ByteStream = member ReadByte : unit -> byte member ReadBytes : int -> ReadOnlyByteMemory member ReadUtf8String : int -> string - member Position : int + member Position : int static member FromBytes : ReadOnlyByteMemory * start:int * length:int -> ByteStream - + #if LAZY_UNPICKLE member CloneAndSeek : int -> ByteStream member Skip : int -> unit diff --git a/src/fsharp/absil/il.fs b/src/fsharp/absil/il.fs index 68d0d20ed48..f2f895611e8 100644 --- a/src/fsharp/absil/il.fs +++ b/src/fsharp/absil/il.fs @@ -2,14 +2,13 @@ module FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.IO - #nowarn "49" #nowarn "343" // The type 'ILAssemblyRef' implements 'System.IComparable' explicitly but provides no corresponding override for 'Object.Equals'. #nowarn "346" // The struct, record or union type 'IlxExtensionType' has an explicit implementation of 'Object.Equals'. ... open System open System.Diagnostics +open System.IO open System.Collections open System.Collections.Generic open System.Collections.Concurrent @@ -18,8 +17,11 @@ open System.Reflection open System.Text open System.Threading +open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.Diagnostics -open Internal.Utilities.Library +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library + open Internal.Utilities let logging = false @@ -95,6 +97,8 @@ let splitILTypeName (nm: string) = let s1, s2 = splitNameAt nm idx splitNamespace s1, s2 +let emptyStringArray = ([| |] : string[]) + // Duplicate of comment in import.fs: // The type names that flow to the point include the "mangled" type names used for static parameters for provided types. // For example, @@ -109,7 +113,7 @@ let splitILTypeNameWithPossibleStaticArguments (nm: string) = let nsp, nm = match nm.LastIndexOf '.' with - | -1 -> [| |], nm + | -1 -> emptyStringArray, nm | idx -> let s1, s2 = splitNameAt nm idx splitNamespaceToArray s1, s2 @@ -460,6 +464,7 @@ type ILAssemblyRef(data) = add ", Retargetable=Yes" b.ToString() + [] type ILModuleRef = { name: string @@ -1297,20 +1302,20 @@ type ILFieldInit = | Null member x.AsObject() = - match x with + match x with | ILFieldInit.String s -> box s - | ILFieldInit.Bool bool -> box bool - | ILFieldInit.Char u16 -> box (char (int u16)) - | ILFieldInit.Int8 i8 -> box i8 - | ILFieldInit.Int16 i16 -> box i16 - | ILFieldInit.Int32 i32 -> box i32 - | ILFieldInit.Int64 i64 -> box i64 - | ILFieldInit.UInt8 u8 -> box u8 - | ILFieldInit.UInt16 u16 -> box u16 - | ILFieldInit.UInt32 u32 -> box u32 - | ILFieldInit.UInt64 u64 -> box u64 - | ILFieldInit.Single ieee32 -> box ieee32 - | ILFieldInit.Double ieee64 -> box ieee64 + | ILFieldInit.Bool bool -> box bool + | ILFieldInit.Char u16 -> box (char (int u16)) + | ILFieldInit.Int8 i8 -> box i8 + | ILFieldInit.Int16 i16 -> box i16 + | ILFieldInit.Int32 i32 -> box i32 + | ILFieldInit.Int64 i64 -> box i64 + | ILFieldInit.UInt8 u8 -> box u8 + | ILFieldInit.UInt16 u16 -> box u16 + | ILFieldInit.UInt32 u32 -> box u32 + | ILFieldInit.UInt64 u64 -> box u64 + | ILFieldInit.Single ieee32 -> box ieee32 + | ILFieldInit.Double ieee64 -> box ieee64 | ILFieldInit.Null -> (null :> Object) // -------------------------------------------------------------------- @@ -1541,20 +1546,36 @@ type ILMethodVirtualInfo = IsCheckAccessOnOverride: bool IsAbstract: bool } +type MethodKind = + | Static + | Cctor + | Ctor + | NonVirtual + | Virtual of ILMethodVirtualInfo + [] type MethodBody = - | IL of Lazy - | PInvoke of Lazy (* platform invoke to native *) + | IL of ILMethodBody + | PInvoke of PInvokeMethod (* platform invoke to native *) | Abstract | Native | NotAvailable +type ILLazyMethodBody = + | ILLazyMethodBody of Lazy + + member x.Contents = let (ILLazyMethodBody mb) = x in mb.Force() + [] type MethodCodeKind = | IL | Native | Runtime +let mkMethBodyAux mb = ILLazyMethodBody (notlazy mb) + +let mkMethBodyLazyAux mb = ILLazyMethodBody mb + let typesOfILParams (ps: ILParameters) : ILTypes = ps |> List.map (fun p -> p.Type) [] @@ -1610,43 +1631,41 @@ let NoMetadataIdx = -1 [] type ILMethodDef (name: string, attributes: MethodAttributes, implAttributes: MethodImplAttributes, callingConv: ILCallingConv, - parameters: ILParameters, ret: ILReturn, body: Lazy, isEntryPoint: bool, genericParams: ILGenericParameterDefs, + parameters: ILParameters, ret: ILReturn, body: ILLazyMethodBody, isEntryPoint: bool, genericParams: ILGenericParameterDefs, securityDeclsStored: ILSecurityDeclsStored, customAttrsStored: ILAttributesStored, metadataIndex: int32) = new (name, attributes, implAttributes, callingConv, parameters, ret, body, isEntryPoint, genericParams, securityDecls, customAttrs) = ILMethodDef (name, attributes, implAttributes, callingConv, parameters, ret, body, isEntryPoint, genericParams, storeILSecurityDecls securityDecls, storeILCustomAttrs customAttrs, NoMetadataIdx) - member private _.LazyBody = body - // The captured data - remember the object will be as large as the data captured by these members - member _.Name = name + member __.Name = name - member _.Attributes = attributes + member __.Attributes = attributes - member _.ImplAttributes = implAttributes + member __.ImplAttributes = implAttributes - member _.CallingConv = callingConv + member __.CallingConv = callingConv - member _.Parameters = parameters + member __.Parameters = parameters - member _.Return = ret + member __.Return = ret - member _.Body = body.Value + member __.Body = body - member _.SecurityDeclsStored = securityDeclsStored + member __.SecurityDeclsStored = securityDeclsStored - member _.IsEntryPoint = isEntryPoint + member __.IsEntryPoint = isEntryPoint - member _.GenericParams = genericParams + member __.GenericParams = genericParams - member _.CustomAttrsStored = customAttrsStored + member __.CustomAttrsStored = customAttrsStored - member _.MetadataIndex = metadataIndex + member __.MetadataIndex = metadataIndex member x.With (?name: string, ?attributes: MethodAttributes, ?implAttributes: MethodImplAttributes, ?callingConv: ILCallingConv, ?parameters: ILParameters, ?ret: ILReturn, - ?body: Lazy, ?securityDecls: ILSecurityDecls, ?isEntryPoint: bool, + ?body: ILLazyMethodBody, ?securityDecls: ILSecurityDecls, ?isEntryPoint: bool, ?genericParams: ILGenericParameterDefs, ?customAttrs: ILAttributes) = ILMethodDef (name = defaultArg name x.Name, @@ -1655,7 +1674,7 @@ type ILMethodDef (name: string, attributes: MethodAttributes, implAttributes: Me callingConv = defaultArg callingConv x.CallingConv, parameters = defaultArg parameters x.Parameters, ret = defaultArg ret x.Return, - body = defaultArg body x.LazyBody, + body = defaultArg body x.Body, securityDecls = (match securityDecls with None -> x.SecurityDecls | Some attrs -> attrs), isEntryPoint = defaultArg isEntryPoint x.IsEntryPoint, genericParams = defaultArg genericParams x.GenericParams, @@ -1668,15 +1687,15 @@ type ILMethodDef (name: string, attributes: MethodAttributes, implAttributes: Me member x.ParameterTypes = typesOfILParams x.Parameters member md.Code = - match md.Body with - | MethodBody.IL il-> Some il.Value.Code + match md.Body.Contents with + | MethodBody.IL il-> Some il.Code | _ -> None - member x.IsIL = match x.Body with | MethodBody.IL _ -> true | _ -> false + member x.IsIL = match x.Body.Contents with | MethodBody.IL _ -> true | _ -> false - member x.Locals = match x.Body with | MethodBody.IL il -> il.Value.Locals | _ -> [] + member x.Locals = match x.Body.Contents with | MethodBody.IL il -> il.Locals | _ -> [] - member x.MethodBody = match x.Body with MethodBody.IL il -> il.Value | _ -> failwith "not IL" + member x.MethodBody = match x.Body.Contents with MethodBody.IL il -> il | _ -> failwith "not IL" member x.SourceMarker = x.MethodBody.SourceMarker @@ -1765,8 +1784,8 @@ type ILMethodDefs(f : (unit -> ILMethodDef[])) = member x.FindByNameAndArity (nm, arity) = x.FindByName nm |> List.filter (fun x -> List.length x.Parameters = arity) - member x.TryFindInstanceByNameAndCallingSignature (nm, callingSig) = - x.FindByName nm + member x.TryFindInstanceByNameAndCallingSignature (nm, callingSig) = + x.FindByName nm |> List.tryFind (fun x -> not x.IsStatic && x.CallingSignature = callingSig) [] @@ -1777,15 +1796,15 @@ type ILEventDef(eventType: ILType option, name: string, attributes: EventAttribu new (eventType, name, attributes, addMethod, removeMethod, fireMethod, otherMethods, customAttrs) = ILEventDef(eventType, name, attributes, addMethod, removeMethod, fireMethod, otherMethods, storeILCustomAttrs customAttrs, NoMetadataIdx) - member _.EventType = eventType - member _.Name = name - member _.Attributes = attributes - member _.AddMethod = addMethod - member _.RemoveMethod = removeMethod - member _.FireMethod = fireMethod - member _.OtherMethods = otherMethods - member _.CustomAttrsStored = customAttrsStored - member _.MetadataIndex = metadataIndex + member __.EventType = eventType + member __.Name = name + member __.Attributes = attributes + member __.AddMethod = addMethod + member __.RemoveMethod = removeMethod + member __.FireMethod = fireMethod + member __.OtherMethods = otherMethods + member __.CustomAttrsStored = customAttrsStored + member __.MetadataIndex = metadataIndex member x.CustomAttrs = customAttrsStored.GetCustomAttrs x.MetadataIndex member x.With(?eventType, ?name, ?attributes, ?addMethod, ?removeMethod, ?fireMethod, ?otherMethods, ?customAttrs) = @@ -1880,13 +1899,13 @@ type ILFieldDef(name: string, fieldType: ILType, attributes: FieldAttributes, da new (name, fieldType, attributes, data, literalValue, offset, marshal, customAttrs) = ILFieldDef(name, fieldType, attributes, data, literalValue, offset, marshal, storeILCustomAttrs customAttrs, NoMetadataIdx) - member _.Name=name - member _.FieldType = fieldType - member _.Attributes=attributes - member _.Data=data - member _.LiteralValue=literalValue - member _.Offset=offset - member _.Marshal=marshal + member __.Name=name + member __.FieldType = fieldType + member __.Attributes=attributes + member __.Data=data + member __.LiteralValue=literalValue + member __.Offset=offset + member __.Marshal=marshal member x.CustomAttrsStored = customAttrsStored member x.CustomAttrs = customAttrsStored.GetCustomAttrs x.MetadataIndex member x.MetadataIndex = metadataIndex @@ -2054,21 +2073,21 @@ type ILTypeDef(name: string, attributes: TypeAttributes, layout: ILTypeDefLayout new (name, attributes, layout, implements, genericParams, extends, methods, nestedTypes, fields, methodImpls, events, properties, securityDecls, customAttrs) = ILTypeDef (name, attributes, layout, implements, genericParams, extends, methods, nestedTypes, fields, methodImpls, events, properties, storeILSecurityDecls securityDecls, storeILCustomAttrs customAttrs, NoMetadataIdx) - member _.Name = name - member _.Attributes = attributes - member _.GenericParams = genericParams - member _.Layout = layout - member _.NestedTypes = nestedTypes - member _.Implements = implements - member _.Extends = extends - member _.Methods = methods - member _.SecurityDeclsStored = securityDeclsStored - member _.Fields = fields - member _.MethodImpls = methodImpls - member _.Events = events - member _.Properties = properties - member _.CustomAttrsStored = customAttrsStored - member _.MetadataIndex = metadataIndex + member __.Name = name + member __.Attributes = attributes + member __.GenericParams = genericParams + member __.Layout = layout + member __.NestedTypes = nestedTypes + member __.Implements = implements + member __.Extends = extends + member __.Methods = methods + member __.SecurityDeclsStored = securityDeclsStored + member __.Fields = fields + member __.MethodImpls = methodImpls + member __.Events = events + member __.Properties = properties + member __.CustomAttrsStored = customAttrsStored + member __.MetadataIndex = metadataIndex member x.With(?name, ?attributes, ?layout, ?implements, ?genericParams, ?extends, ?methods, ?nestedTypes, ?fields, ?methodImpls, ?events, ?properties, ?customAttrs, ?securityDecls) = ILTypeDef(name=defaultArg name x.Name, @@ -2165,8 +2184,8 @@ and [] ILPreTypeDefImpl(nameSpace: string list, name: string, metadataIn let mutable store : ILTypeDef = Unchecked.defaultof<_> interface ILPreTypeDef with - member _.Namespace = nameSpace - member _.Name = name + member __.Namespace = nameSpace + member __.Name = name member x.GetTypeDef() = match box store with @@ -2270,7 +2289,6 @@ type ILAssemblyLongevity = | PlatformProcess | PlatformSystem - static member Default = Unspecified type ILAssemblyManifest = { Name: string @@ -2631,15 +2649,15 @@ let tname_UIntPtr = "System.UIntPtr" let tname_TypedReference = "System.TypedReference" [] -type ILGlobals(primaryScopeRef: ILScopeRef, assembliesThatForwardToPrimaryAssembly: ILAssemblyRef list, fsharpCoreAssemblyScopeRef: ILScopeRef) = +type ILGlobals(primaryScopeRef: ILScopeRef, assembliesThatForwardToPrimaryAssembly: ILAssemblyRef list) = let assembliesThatForwardToPrimaryAssembly = Array.ofList assembliesThatForwardToPrimaryAssembly let mkSysILTypeRef nm = mkILTyRef (primaryScopeRef, nm) member _.primaryAssemblyScopeRef = primaryScopeRef - member x.primaryAssemblyRef = - match primaryScopeRef with + member x.primaryAssemblyRef = + match primaryScopeRef with | ILScopeRef.Assembly aref -> aref | _ -> failwith "Invalid primary assembly" member x.primaryAssemblyName = x.primaryAssemblyRef.Name @@ -2664,8 +2682,6 @@ type ILGlobals(primaryScopeRef: ILScopeRef, assembliesThatForwardToPrimaryAssemb member val typ_UIntPtr = ILType.Value (mkILNonGenericTySpec (mkSysILTypeRef tname_UIntPtr)) member val typ_TypedReference = ILType.Value (mkILNonGenericTySpec (mkSysILTypeRef tname_TypedReference)) - member _.fsharpCoreAssemblyScopeRef = fsharpCoreAssemblyScopeRef - member x.IsPossiblePrimaryAssemblyRef(aref: ILAssemblyRef) = aref.EqualsIgnoringVersion x.primaryAssemblyRef || assembliesThatForwardToPrimaryAssembly @@ -2677,7 +2693,7 @@ type ILGlobals(primaryScopeRef: ILScopeRef, assembliesThatForwardToPrimaryAssemb override x.ToString() = "" -let mkILGlobals (primaryScopeRef, assembliesThatForwardToPrimaryAssembly, fsharpCoreAssemblyScopeRef) = ILGlobals (primaryScopeRef, assembliesThatForwardToPrimaryAssembly, fsharpCoreAssemblyScopeRef) +let mkILGlobals (primaryScopeRef, assembliesThatForwardToPrimaryAssembly) = ILGlobals (primaryScopeRef, assembliesThatForwardToPrimaryAssembly) let mkNormalCall mspec = I_call (Normalcall, mspec, None) @@ -2722,15 +2738,10 @@ let isILBoxedTy = function ILType.Boxed _ -> true | _ -> false let isILValueTy = function ILType.Value _ -> true | _ -> false -let rec stripILModifiedFromTy (ty: ILType) = - match ty with - | ILType.Modified(_, _, ty) -> stripILModifiedFromTy ty - | _ -> ty - let isBuiltInTySpec (ilg: ILGlobals) (tspec: ILTypeSpec) n = let tref = tspec.TypeRef let scoref = tref.Scope - tref.Name = n && + tref.Name = n && (match scoref with | ILScopeRef.Local | ILScopeRef.Module _ -> false @@ -2933,9 +2944,7 @@ let mkILMethodBody (initlocals, locals, maxstack, code, tag) : ILMethodBody = Code= code SourceMarker=tag } -let mkMethodBody (zeroinit, locals, maxstack, code, tag) = - let ilCode = mkILMethodBody (zeroinit, locals, maxstack, code, tag) - MethodBody.IL (lazy ilCode) +let mkMethodBody (zeroinit, locals, maxstack, code, tag) = MethodBody.IL (mkILMethodBody (zeroinit, locals, maxstack, code, tag)) // -------------------------------------------------------------------- // Make a constructor @@ -2943,11 +2952,11 @@ let mkMethodBody (zeroinit, locals, maxstack, code, tag) = let mkILVoidReturn = mkILReturn ILType.Void -let methBodyNotAvailable = notlazy MethodBody.NotAvailable +let methBodyNotAvailable = mkMethBodyAux MethodBody.NotAvailable -let methBodyAbstract = notlazy MethodBody.Abstract +let methBodyAbstract = mkMethBodyAux MethodBody.Abstract -let methBodyNative = notlazy MethodBody.Native +let methBodyNative = mkMethBodyAux MethodBody.Native let mkILCtor (access, args, impl) = ILMethodDef(name=".ctor", @@ -2956,7 +2965,7 @@ let mkILCtor (access, args, impl) = callingConv=ILCallingConv.Instance, parameters = args, ret= mkILVoidReturn, - body= notlazy impl, + body= mkMethBodyAux impl, securityDecls=emptyILSecurityDecls, isEntryPoint=false, genericParams=mkILEmptyGenericParams, @@ -3005,7 +3014,7 @@ let mkILStaticMethod (genparams, nm, access, args, ret, impl) = securityDecls=emptyILSecurityDecls, isEntryPoint=false, customAttrs = emptyILCustomAttrs, - body= notlazy impl) + body= mkMethBodyAux impl) let mkILNonGenericStaticMethod (nm, access, args, ret, impl) = mkILStaticMethod (mkILEmptyGenericParams, nm, access, args, ret, impl) @@ -3021,7 +3030,7 @@ let mkILClassCtor impl = isEntryPoint=false, securityDecls=emptyILSecurityDecls, customAttrs=emptyILCustomAttrs, - body= notlazy impl) + body= mkMethBodyAux impl) // -------------------------------------------------------------------- // Make a virtual method, where the overriding is simply the default @@ -3045,7 +3054,7 @@ let mkILGenericVirtualMethod (nm, access, genparams, actual_args, actual_ret, im isEntryPoint=false, securityDecls=emptyILSecurityDecls, customAttrs = emptyILCustomAttrs, - body= notlazy impl) + body= mkMethBodyAux impl) let mkILNonGenericVirtualMethod (nm, access, args, ret, impl) = mkILGenericVirtualMethod (nm, access, mkILEmptyGenericParams, args, ret, impl) @@ -3061,7 +3070,7 @@ let mkILGenericNonVirtualMethod (nm, access, genparams, actual_args, actual_ret, isEntryPoint=false, securityDecls=emptyILSecurityDecls, customAttrs = emptyILCustomAttrs, - body= notlazy impl) + body= mkMethBodyAux impl) let mkILNonGenericInstanceMethod (nm, access, args, ret, impl) = mkILGenericNonVirtualMethod (nm, access, mkILEmptyGenericParams, args, ret, impl) @@ -3077,12 +3086,11 @@ let ilmbody_code2code f (il: ILMethodBody) = let mdef_code2code f (md: ILMethodDef) = let il = - match md.Body with + match md.Body.Contents with | MethodBody.IL il-> il | _ -> failwith "mdef_code2code - method not IL" - let ilCode = ilmbody_code2code f il.Value - let b = MethodBody.IL (notlazy ilCode) - md.With(body = notlazy b) + let b = MethodBody.IL (ilmbody_code2code f il) + md.With(body = mkMethBodyAux b) let prependInstrsToCode (instrs: ILInstr list) (c2: ILCode) = let instrs = Array.ofList instrs @@ -3214,7 +3222,6 @@ let mkILNestedExportedTypesLazy (l: Lazy<_>) = ILNestedExportedTypes (lazy (List.foldBack addNestedExportedTypeToTable (l.Force()) Map.empty)) let mkILResources l = ILResources l -let emptyILResources = ILResources [] let addMethodImplToTable y tab = let key = (y.Overrides.MethodRef.Name, y.Overrides.MethodRef.ArgTypes.Length) @@ -3656,85 +3663,32 @@ let rec encodeCustomAttrElemTypeForObject x = | ILAttribElem.Double _ -> [| et_R8 |] | ILAttribElem.Array (elemTy, _) -> [| yield et_SZARRAY; yield! encodeCustomAttrElemType elemTy |] -let tspan = TimeSpan (DateTime.UtcNow.Ticks - DateTime(2000, 1, 1).Ticks) - -let parseILVersion (vstr : string) = - // matches "v1.2.3.4" or "1.2.3.4". Note, if numbers are missing, returns -1 (not 0). - let mutable vstr = vstr.TrimStart [|'v'|] - // if the version string contains wildcards, replace them - let versionComponents = vstr.Split ([|'.'|]) - - // account for wildcards - if versionComponents.Length > 2 then - let defaultBuild = uint16 tspan.Days % UInt16.MaxValue - 1us - let defaultRevision = uint16 (DateTime.UtcNow.TimeOfDay.TotalSeconds / 2.0) % UInt16.MaxValue - 1us - if versionComponents.[2] = "*" then - if versionComponents.Length > 3 then - failwith "Invalid version format" - else - // set the build number to the number of days since Jan 1, 2000 - versionComponents.[2] <- defaultBuild.ToString() - // Set the revision number to number of seconds today / 2 - vstr <- String.Join (".", versionComponents) + "." + defaultRevision.ToString() - elif versionComponents.Length > 3 && versionComponents.[3] = "*" then - // Set the revision number to number of seconds today / 2 - versionComponents.[3] <- defaultRevision.ToString() - vstr <- String.Join (".", versionComponents) - - let version = System.Version vstr - let zero32 n = if n < 0 then 0us else uint16 n - // since the minor revision will be -1 if none is specified, we need to truncate to 0 to not break existing code - let minorRevision = if version.Revision = -1 then 0us else uint16 version.MinorRevision - ILVersionInfo (zero32 version.Major, zero32 version.Minor, zero32 version.Build, minorRevision) - -let compareILVersions (version1 : ILVersionInfo) (version2 : ILVersionInfo) = - let c = compare version1.Major version2.Major - if c <> 0 then c else - let c = compare version1.Minor version2.Minor - if c <> 0 then c else - let c = compare version1.Build version2.Build - if c <> 0 then c else - let c = compare version1.Revision version2.Revision - if c <> 0 then c else - 0 - -let DummyFSharpCoreScopeRef = - let asmRef = - // The exact public key token and version used here don't actually matter, or shouldn't. - ILAssemblyRef.Create("FSharp.Core", None, - Some (PublicKeyToken(Bytes.ofInt32Array [| 0xb0; 0x3f; 0x5f; 0x7f; 0x11; 0xd5; 0x0a; 0x3a |])), - false, - Some (parseILVersion "0.0.0.0"), None) - ILScopeRef.Assembly asmRef - -let PrimaryAssemblyILGlobals = mkILGlobals (ILScopeRef.PrimaryAssembly, [], DummyFSharpCoreScopeRef) - -let rec decodeCustomAttrElemType bytes sigptr x = +let rec decodeCustomAttrElemType (ilg: ILGlobals) bytes sigptr x = match x with - | x when x = et_I1 -> PrimaryAssemblyILGlobals.typ_SByte, sigptr - | x when x = et_U1 -> PrimaryAssemblyILGlobals.typ_Byte, sigptr - | x when x = et_I2 -> PrimaryAssemblyILGlobals.typ_Int16, sigptr - | x when x = et_U2 -> PrimaryAssemblyILGlobals.typ_UInt16, sigptr - | x when x = et_I4 -> PrimaryAssemblyILGlobals.typ_Int32, sigptr - | x when x = et_U4 -> PrimaryAssemblyILGlobals.typ_UInt32, sigptr - | x when x = et_I8 -> PrimaryAssemblyILGlobals.typ_Int64, sigptr - | x when x = et_U8 -> PrimaryAssemblyILGlobals.typ_UInt64, sigptr - | x when x = et_R8 -> PrimaryAssemblyILGlobals.typ_Double, sigptr - | x when x = et_R4 -> PrimaryAssemblyILGlobals.typ_Single, sigptr - | x when x = et_CHAR -> PrimaryAssemblyILGlobals.typ_Char, sigptr - | x when x = et_BOOLEAN -> PrimaryAssemblyILGlobals.typ_Bool, sigptr - | x when x = et_STRING -> PrimaryAssemblyILGlobals.typ_String, sigptr - | x when x = et_OBJECT -> PrimaryAssemblyILGlobals.typ_Object, sigptr + | x when x = et_I1 -> ilg.typ_SByte, sigptr + | x when x = et_U1 -> ilg.typ_Byte, sigptr + | x when x = et_I2 -> ilg.typ_Int16, sigptr + | x when x = et_U2 -> ilg.typ_UInt16, sigptr + | x when x = et_I4 -> ilg.typ_Int32, sigptr + | x when x = et_U4 -> ilg.typ_UInt32, sigptr + | x when x = et_I8 -> ilg.typ_Int64, sigptr + | x when x = et_U8 -> ilg.typ_UInt64, sigptr + | x when x = et_R8 -> ilg.typ_Double, sigptr + | x when x = et_R4 -> ilg.typ_Single, sigptr + | x when x = et_CHAR -> ilg.typ_Char, sigptr + | x when x = et_BOOLEAN -> ilg.typ_Bool, sigptr + | x when x = et_STRING -> ilg.typ_String, sigptr + | x when x = et_OBJECT -> ilg.typ_Object, sigptr | x when x = et_SZARRAY -> let et, sigptr = sigptr_get_u8 bytes sigptr - let elemTy, sigptr = decodeCustomAttrElemType bytes sigptr et + let elemTy, sigptr = decodeCustomAttrElemType ilg bytes sigptr et mkILArr1DTy elemTy, sigptr - | x when x = 0x50uy -> PrimaryAssemblyILGlobals.typ_Type, sigptr + | x when x = 0x50uy -> ilg.typ_Type, sigptr | _ -> failwithf "decodeCustomAttrElemType ilg: unrecognized custom element type: %A" x /// Given a custom attribute element, encode it to a binary representation according to the rules in Ecma 335 Partition II. -let rec encodeCustomAttrPrimValue c = +let rec encodeCustomAttrPrimValue ilg c = match c with | ILAttribElem.Bool b -> [| (if b then 0x01uy else 0x00uy) |] | ILAttribElem.String None @@ -3756,49 +3710,54 @@ let rec encodeCustomAttrPrimValue c = | ILAttribElem.Type (Some ty) -> encodeCustomAttrString ty.QualifiedName | ILAttribElem.TypeRef (Some tref) -> encodeCustomAttrString tref.QualifiedName | ILAttribElem.Array (_, elems) -> - [| yield! i32AsBytes elems.Length; for elem in elems do yield! encodeCustomAttrPrimValue elem |] + [| yield! i32AsBytes elems.Length; for elem in elems do yield! encodeCustomAttrPrimValue ilg elem |] -and encodeCustomAttrValue ty c = +and encodeCustomAttrValue ilg ty c = match ty, c with | ILType.Boxed tspec, _ when tspec.Name = tname_Object -> - [| yield! encodeCustomAttrElemTypeForObject c; yield! encodeCustomAttrPrimValue c |] + [| yield! encodeCustomAttrElemTypeForObject c; yield! encodeCustomAttrPrimValue ilg c |] | ILType.Array (shape, _), ILAttribElem.Null when shape = ILArrayShape.SingleDimensional -> [| yield! i32AsBytes 0xFFFFFFFF |] | ILType.Array (shape, elemType), ILAttribElem.Array (_, elems) when shape = ILArrayShape.SingleDimensional -> - [| yield! i32AsBytes elems.Length; for elem in elems do yield! encodeCustomAttrValue elemType elem |] + [| yield! i32AsBytes elems.Length; for elem in elems do yield! encodeCustomAttrValue ilg elemType elem |] | _ -> - encodeCustomAttrPrimValue c + encodeCustomAttrPrimValue ilg c -let encodeCustomAttrNamedArg (nm, ty, prop, elem) = +let encodeCustomAttrNamedArg ilg (nm, ty, prop, elem) = [| yield (if prop then 0x54uy else 0x53uy) yield! encodeCustomAttrElemType ty yield! encodeCustomAttrString nm - yield! encodeCustomAttrValue ty elem |] + yield! encodeCustomAttrValue ilg ty elem |] -let encodeCustomAttrArgs (mspec: ILMethodSpec) (fixedArgs: list<_>) (namedArgs: list<_>) = +let encodeCustomAttrArgs (ilg: ILGlobals) (mspec: ILMethodSpec) (fixedArgs: list<_>) (namedArgs: list<_>) = let argtys = mspec.MethodRef.ArgTypes [| yield! [| 0x01uy; 0x00uy; |] for (argty, fixedArg) in Seq.zip argtys fixedArgs do - yield! encodeCustomAttrValue argty fixedArg + yield! encodeCustomAttrValue ilg argty fixedArg yield! u16AsBytes (uint16 namedArgs.Length) for namedArg in namedArgs do - yield! encodeCustomAttrNamedArg namedArg |] + yield! encodeCustomAttrNamedArg ilg namedArg |] -let encodeCustomAttr (mspec: ILMethodSpec, fixedArgs: list<_>, namedArgs: list<_>) = - let args = encodeCustomAttrArgs mspec fixedArgs namedArgs +let encodeCustomAttr (ilg: ILGlobals) (mspec: ILMethodSpec, fixedArgs: list<_>, namedArgs: list<_>) = + let args = encodeCustomAttrArgs ilg mspec fixedArgs namedArgs ILAttribute.Encoded (mspec, args, fixedArgs @ (namedArgs |> List.map (fun (_, _, _, e) -> e))) -let mkILCustomAttribMethRef (mspec: ILMethodSpec, fixedArgs: list<_>, namedArgs: list<_>) = - encodeCustomAttr (mspec, fixedArgs, namedArgs) +let mkILCustomAttribMethRef (ilg: ILGlobals) (mspec: ILMethodSpec, fixedArgs: list<_>, namedArgs: list<_>) = + encodeCustomAttr ilg (mspec, fixedArgs, namedArgs) -let mkILCustomAttribute (tref, argtys, argvs, propvs) = - encodeCustomAttr (mkILNonGenericCtorMethSpec (tref, argtys), argvs, propvs) +let mkILCustomAttribute ilg (tref, argtys, argvs, propvs) = + encodeCustomAttr ilg (mkILNonGenericCtorMethSpec (tref, argtys), argvs, propvs) -let getCustomAttrData cattr = +let getCustomAttrData (ilg: ILGlobals) cattr = match cattr with | ILAttribute.Encoded (_, data, _) -> data | ILAttribute.Decoded (mspec, fixedArgs, namedArgs) -> - encodeCustomAttrArgs mspec fixedArgs namedArgs + encodeCustomAttrArgs ilg mspec fixedArgs namedArgs + +let MscorlibScopeRef = ILScopeRef.Assembly (ILAssemblyRef.Create ("mscorlib", None, Some ecmaPublicKey, true, None, None)) + +let EcmaMscorlibILGlobals = mkILGlobals (MscorlibScopeRef, []) +let PrimaryAssemblyILGlobals = mkILGlobals (ILScopeRef.PrimaryAssembly, []) // ILSecurityDecl is a 'blob' having the following format: // - A byte containing a period (.). @@ -3808,7 +3767,7 @@ let getCustomAttrData cattr = // as a compressed int to indicate the size followed by an array of UTF8 characters.) // - A set of properties, encoded as the named arguments to a custom attribute would be (as // in §23.3, beginning with NumNamed). -let mkPermissionSet (action, attributes: list<(ILTypeRef * (string * ILType * ILAttribElem) list)>) = +let mkPermissionSet (ilg: ILGlobals) (action, attributes: list<(ILTypeRef * (string * ILType * ILAttribElem) list)>) = let bytes = [| yield (byte '.') yield! z_unsigned_int attributes.Length @@ -3817,7 +3776,7 @@ let mkPermissionSet (action, attributes: list<(ILTypeRef * (string * ILType * IL let bytes = [| yield! z_unsigned_int props.Length for (nm, ty, value) in props do - yield! encodeCustomAttrNamedArg (nm, ty, true, value)|] + yield! encodeCustomAttrNamedArg ilg (nm, ty, true, value)|] yield! z_unsigned_int bytes.Length yield! bytes |] @@ -3961,7 +3920,7 @@ type ILTypeSigParser (tstring : string) = let ilty = x.ParseType() ILAttribElem.Type (Some ilty) -let decodeILAttribData (ca: ILAttribute) = +let decodeILAttribData (ilg: ILGlobals) (ca: ILAttribute) = match ca with | ILAttribute.Decoded (_, fixedArgs, namedArgs) -> fixedArgs, namedArgs | ILAttribute.Encoded (_, bytes, _) -> @@ -4027,7 +3986,7 @@ let decodeILAttribData (ca: ILAttribute) = if et = 0xFFuy then ILAttribElem.Null, sigptr else - let ty, sigptr = decodeCustomAttrElemType bytes sigptr et + let ty, sigptr = decodeCustomAttrElemType ilg bytes sigptr et parseVal ty sigptr | ILType.Array (shape, elemTy) when shape = ILArrayShape.SingleDimensional -> let n, sigptr = sigptr_get_i32 bytes sigptr @@ -4069,13 +4028,13 @@ let decodeILAttribData (ca: ILAttribute) = let scoref = match rest with | Some aname -> ILScopeRef.Assembly (ILAssemblyRef.FromAssemblyName (AssemblyName aname)) - | None -> PrimaryAssemblyILGlobals.primaryAssemblyScopeRef + | None -> ilg.primaryAssemblyScopeRef let tref = mkILTyRef (scoref, unqualified_tname) let tspec = mkILNonGenericTySpec tref ILType.Value tspec, sigptr else - decodeCustomAttrElemType bytes sigptr et + decodeCustomAttrElemType ilg bytes sigptr et let nm, sigptr = sigptr_get_serstring bytes sigptr let v, sigptr = parseVal ty sigptr parseNamed ((nm, ty, isProp, v) :: acc) (n-1) sigptr @@ -4216,14 +4175,14 @@ and refs_of_local s loc = refs_of_typ s loc.Type and refs_of_mbody s x = match x with - | MethodBody.IL il -> refs_of_ilmbody s il.Value - | MethodBody.PInvoke (attr) -> refs_of_modref s attr.Value.Where + | MethodBody.IL il -> refs_of_ilmbody s il + | MethodBody.PInvoke (attr) -> refs_of_modref s attr.Where | _ -> () and refs_of_mdef s (md: ILMethodDef) = List.iter (refs_of_param s) md.Parameters refs_of_return s md.Return - refs_of_mbody s md.Body + refs_of_mbody s md.Body.Contents refs_of_custom_attrs s md.CustomAttrs refs_of_genparams s md.GenericParams @@ -4319,6 +4278,48 @@ let computeILRefs ilg modul = { AssemblyReferences = Seq.fold (fun acc x -> x :: acc) [] s.refsA ModuleReferences = Seq.fold (fun acc x -> x :: acc) [] s.refsM } +let tspan = TimeSpan (DateTime.UtcNow.Ticks - DateTime(2000, 1, 1).Ticks) + +let parseILVersion (vstr : string) = + // matches "v1.2.3.4" or "1.2.3.4". Note, if numbers are missing, returns -1 (not 0). + let mutable vstr = vstr.TrimStart [|'v'|] + // if the version string contains wildcards, replace them + let versionComponents = vstr.Split ([|'.'|]) + + // account for wildcards + if versionComponents.Length > 2 then + let defaultBuild = uint16 tspan.Days % UInt16.MaxValue - 1us + let defaultRevision = uint16 (DateTime.UtcNow.TimeOfDay.TotalSeconds / 2.0) % UInt16.MaxValue - 1us + if versionComponents.[2] = "*" then + if versionComponents.Length > 3 then + failwith "Invalid version format" + else + // set the build number to the number of days since Jan 1, 2000 + versionComponents.[2] <- defaultBuild.ToString() + // Set the revision number to number of seconds today / 2 + vstr <- String.Join (".", versionComponents) + "." + defaultRevision.ToString() + elif versionComponents.Length > 3 && versionComponents.[3] = "*" then + // Set the revision number to number of seconds today / 2 + versionComponents.[3] <- defaultRevision.ToString() + vstr <- String.Join (".", versionComponents) + + let version = System.Version vstr + let zero32 n = if n < 0 then 0us else uint16 n + // since the minor revision will be -1 if none is specified, we need to truncate to 0 to not break existing code + let minorRevision = if version.Revision = -1 then 0us else uint16 version.MinorRevision + ILVersionInfo (zero32 version.Major, zero32 version.Minor, zero32 version.Build, minorRevision) + +let compareILVersions (version1 : ILVersionInfo) (version2 : ILVersionInfo) = + let c = compare version1.Major version2.Major + if c <> 0 then c else + let c = compare version1.Minor version2.Minor + if c <> 0 then c else + let c = compare version1.Build version2.Build + if c <> 0 then c else + let c = compare version1.Revision version2.Revision + if c <> 0 then c else + 0 + let unscopeILTypeRef (x: ILTypeRef) = ILTypeRef.Create (ILScopeRef.Local, x.Enclosing, x.Name) let rec unscopeILTypeSpec (tspec: ILTypeSpec) = diff --git a/src/fsharp/absil/il.fsi b/src/fsharp/absil/il.fsi index 03f233ea370..bcfeb3eca36 100644 --- a/src/fsharp/absil/il.fsi +++ b/src/fsharp/absil/il.fsi @@ -1,44 +1,46 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// The "unlinked" view of .NET metadata and code. Central to the Abstract IL library +module public FSharp.Compiler.AbstractIL.IL -module rec FSharp.Compiler.AbstractIL.IL - -open FSharp.Compiler.IO -open Internal.Utilities +open FSharp.Compiler.AbstractIL.Internal open System.Collections.Generic open System.Reflection [] -type internal PrimaryAssembly = +type PrimaryAssembly = | Mscorlib | System_Runtime | NetStandard member Name: string -/// Represents guids +/// Represents guids type ILGuid = byte[] [] -type ILPlatform = - internal +type ILPlatform = | X86 | AMD64 | IA64 -/// Debug info. Values of type "source" can be attached at sequence -/// points and some other locations. +/// Debug info. Values of type "source" can be attached at sequence +/// points and some other locations. [] type ILSourceDocument = - static member Create: language: ILGuid option * vendor: ILGuid option * documentType: ILGuid option * file: string -> ILSourceDocument + static member Create: + language: ILGuid option * + vendor: ILGuid option * + documentType: ILGuid option * + file: string -> ILSourceDocument member Language: ILGuid option member Vendor: ILGuid option member DocumentType: ILGuid option member File: string + [] -type internal ILSourceMarker = +type ILSourceMarker = static member Create: document: ILSourceDocument * line: int * column: int * endLine:int * endColumn: int-> ILSourceMarker member Document: ILSourceDocument member Line: int @@ -47,14 +49,14 @@ type internal ILSourceMarker = member EndColumn: int [] -type PublicKey = +type PublicKey = | PublicKey of byte[] | PublicKeyToken of byte[] member IsKey: bool member IsKeyToken: bool member Key: byte[] member KeyToken: byte[] - static member KeyAsToken: byte[] -> PublicKey + static member KeyAsToken: byte[] -> PublicKey [] type ILVersionInfo = @@ -69,23 +71,17 @@ type ILVersionInfo = [] type ILAssemblyRef = static member Create: name: string * hash: byte[] option * publicKey: PublicKey option * retargetable: bool * version: ILVersionInfo option * locale: string option -> ILAssemblyRef - static member FromAssemblyName: System.Reflection.AssemblyName -> ILAssemblyRef - member Name: string /// The fully qualified name of the assembly reference, e.g. mscorlib, Version=1.0.3705 etc. - member QualifiedName: string - + member QualifiedName: string member Hash: byte[] option - member PublicKey: PublicKey option - /// CLI says this indicates if the assembly can be retargeted (at runtime) to be from a different publisher. + /// CLI says this indicates if the assembly can be retargeted (at runtime) to be from a different publisher. member Retargetable: bool - member Version: ILVersionInfo option - member Locale: string option member EqualsIgnoringVersion: ILAssemblyRef -> bool @@ -95,100 +91,88 @@ type ILAssemblyRef = [] type ILModuleRef = static member Create: name: string * hasMetadata: bool * hash: byte[] option -> ILModuleRef - member Name: string - member HasMetadata: bool - member Hash: byte[] option - interface System.IComparable // Scope references [] -type ILScopeRef = +type ILScopeRef = /// A reference to the type in the current module - | Local - + | Local /// A reference to a type in a module in the same assembly | Module of ILModuleRef - /// A reference to a type in another assembly | Assembly of ILAssemblyRef - /// A reference to a type in the primary assembly | PrimaryAssembly - member IsLocalRef: bool - member QualifiedName: string -// Calling conventions. +// Calling conventions. // // For nearly all purposes you simply want to use ILArgConvention.Default combined // with ILThisConvention.Instance or ILThisConvention.Static, i.e. // ILCallingConv.Instance == Callconv(ILThisConvention.Instance, ILArgConvention.Default): for an instance method // ILCallingConv.Static == Callconv(ILThisConvention.Static, ILArgConvention.Default): for a static method // -// ILThisConvention.InstanceExplicit is only used by Managed C++, and indicates -// that the 'this' pointer is actually explicit in the signature. +// ILThisConvention.InstanceExplicit is only used by Managed C++, and indicates +// that the 'this' pointer is actually explicit in the signature. [] -type ILArgConvention = +type ILArgConvention = | Default - | CDecl - | StdCall - | ThisCall - | FastCall + | CDecl + | StdCall + | ThisCall + | FastCall | VarArg - + [] type ILThisConvention = - /// accepts an implicit 'this' pointer - | Instance - - /// accepts an explicit 'this' pointer - | InstanceExplicit - + /// accepts an implicit 'this' pointer + | Instance + /// accepts an explicit 'this' pointer + | InstanceExplicit /// no 'this' pointer is passed - | Static + | Static [] type ILCallingConv = | Callconv of ILThisConvention * ILArgConvention - member internal IsInstance: bool - member internal IsInstanceExplicit: bool - member internal IsStatic: bool - member internal ThisConv: ILThisConvention - member internal BasicConv: ILArgConvention + member IsInstance: bool + member IsInstanceExplicit: bool + member IsStatic: bool + member ThisConv: ILThisConvention + member BasicConv: ILArgConvention static member Instance: ILCallingConv static member Static : ILCallingConv -/// Array shapes. For most purposes the rank is the only thing that matters. -type internal ILArrayBound = int32 option +/// Array shapes. For most purposes the rank is the only thing that matters. +type ILArrayBound = int32 option -/// Lower-bound/size pairs -type internal ILArrayBounds = ILArrayBound * ILArrayBound +/// Lower-bound/size pairs +type ILArrayBounds = ILArrayBound * ILArrayBound type ILArrayShape = - internal - | ILArrayShape of ILArrayBounds list + | ILArrayShape of ILArrayBounds list member Rank: int - /// Bounds for a single dimensional, zero based array + /// Bounds for a single dimensional, zero based array static member SingleDimensional: ILArrayShape static member FromRank: int -> ILArrayShape -type internal ILBoxity = +type ILBoxity = | AsObject | AsValue -type ILGenericVariance = - | NonVariant - | CoVariant - | ContraVariant +type ILGenericVariance = + | NonVariant + | CoVariant + | ContraVariant /// Type refs, i.e. references to types in some .NET assembly [] @@ -197,7 +181,7 @@ type ILTypeRef = /// Create a ILTypeRef. static member Create: scope: ILScopeRef * enclosing: string list * name: string -> ILTypeRef - /// Where is the type, i.e. is it in this module, in another module in this assembly or in another assembly? + /// Where is the type, i.e. is it in this module, in another module in this assembly or in another assembly? member Scope: ILScopeRef /// The list of enclosing type names for a nested type. If non-nil then the first of these also contains the namespace. @@ -217,8 +201,8 @@ type ILTypeRef = member internal EqualsWithPrimaryScopeRef: ILScopeRef * obj -> bool interface System.IComparable - -/// Type specs and types. + +/// Type specs and types. [] type ILTypeSpec = /// Create an ILTypeSpec. @@ -232,7 +216,7 @@ type ILTypeSpec = /// Where is the type, i.e. is it in this module, in another module in this assembly or in another assembly? member Scope: ILScopeRef - + /// The list of enclosing type names for a nested type. If non-nil then the first of these also contains the namespace. member Enclosing: string list @@ -246,45 +230,46 @@ type ILTypeSpec = interface System.IComparable -[] -type ILType = +and + [] + ILType = /// Used only in return and pointer types. - | Void + | Void - /// Array types - | Array of ILArrayShape * ILType + /// Array types + | Array of ILArrayShape * ILType /// Unboxed types, including builtin types. - | Value of ILTypeSpec + | Value of ILTypeSpec - /// Reference types. Also may be used for parents of members even if for members in value types. - | Boxed of ILTypeSpec + /// Reference types. Also may be used for parents of members even if for members in value types. + | Boxed of ILTypeSpec /// Unmanaged pointers. Nb. the type is used by tools and for binding only, not by the verifier. - | Ptr of ILType + | Ptr of ILType /// Managed pointers. - | Byref of ILType + | Byref of ILType - /// ILCode pointers. - | FunctionPointer of ILCallingSignature + /// ILCode pointers. + | FunctionPointer of ILCallingSignature - /// Reference a generic arg. - | TypeVar of uint16 + /// Reference a generic arg. + | TypeVar of uint16 - /// Custom modifiers. - | Modified of - /// True if modifier is "required". - bool * - /// The class of the custom modifier. - ILTypeRef * - /// The type being modified. - ILType + /// Custom modifiers. + | Modified of + /// True if modifier is "required". + bool * + /// The class of the custom modifier. + ILTypeRef * + /// The type being modified. + ILType member TypeSpec: ILTypeSpec - member internal Boxity: ILBoxity + member Boxity: ILBoxity member TypeRef: ILTypeRef @@ -298,28 +283,28 @@ type ILType = member QualifiedName: string -[] -type ILCallingSignature = +and [] + ILCallingSignature = { CallingConv: ILCallingConv ArgTypes: ILTypes ReturnType: ILType } -/// Actual generic parameters are always types. -type ILGenericArgs = ILType list +/// Actual generic parameters are always types. +and ILGenericArgs = ILType list -type ILTypes = ILType list +and ILTypes = ILType list -/// Formal identities of methods. +/// Formal identities of methods. [] type ILMethodRef = /// Functional creation - static member Create: - enclosingTypeRef: ILTypeRef * - callingConv: ILCallingConv * - name: string * - genericArity: int * - argTypes: ILTypes * + static member Create: + enclosingTypeRef: ILTypeRef * + callingConv: ILCallingConv * + name: string * + genericArity: int * + argTypes: ILTypes * returnType: ILType -> ILMethodRef member DeclaringTypeRef: ILTypeRef @@ -339,10 +324,10 @@ type ILMethodRef = member CallingSignature: ILCallingSignature interface System.IComparable - -/// Formal identities of fields. + +/// Formal identities of fields. [] -type ILFieldRef = +type ILFieldRef = { DeclaringTypeRef: ILTypeRef Name: string Type: ILType } @@ -356,7 +341,7 @@ type ILMethodSpec = member MethodRef: ILMethodRef - member DeclaringType: ILType + member DeclaringType: ILType member GenericArgs: ILGenericArgs @@ -371,12 +356,12 @@ type ILMethodSpec = member FormalReturnType: ILType interface System.IComparable - + /// Field specs. The data given for a ldfld, stfld etc. instruction. -[] +[] type ILFieldSpec = { FieldRef: ILFieldRef - DeclaringType: ILType } + DeclaringType: ILType } member DeclaringTypeRef: ILTypeRef @@ -387,10 +372,10 @@ type ILFieldSpec = member ActualType: ILType /// ILCode labels. In structured code each code label refers to a basic block somewhere in the code of the method. -type internal ILCodeLabel = int +type ILCodeLabel = int [] -type internal ILBasicType = +type ILBasicType = | DT_R | DT_I1 | DT_U1 @@ -407,89 +392,89 @@ type internal ILBasicType = | DT_REF [] -type internal ILToken = - | ILType of ILType - | ILMethod of ILMethodSpec +type ILToken = + | ILType of ILType + | ILMethod of ILMethodSpec | ILField of ILFieldSpec [] -type internal ILConst = +type ILConst = | I4 of int32 | I8 of int64 | R4 of single | R8 of double -type internal ILTailcall = +type ILTailcall = | Tailcall | Normalcall -type internal ILAlignment = +type ILAlignment = | Aligned | Unaligned1 | Unaligned2 | Unaligned4 -type internal ILVolatility = +type ILVolatility = | Volatile | Nonvolatile -type internal ILReadonly = +type ILReadonly = | ReadonlyAddress | NormalAddress -type internal ILVarArgs = ILTypes option +type ILVarArgs = ILTypes option [] -type internal ILComparisonInstr = - | BI_beq - | BI_bge - | BI_bge_un - | BI_bgt - | BI_bgt_un - | BI_ble - | BI_ble_un - | BI_blt - | BI_blt_un - | BI_bne_un - | BI_brfalse - | BI_brtrue - -/// The instruction set. +type ILComparisonInstr = + | BI_beq + | BI_bge + | BI_bge_un + | BI_bgt + | BI_bgt_un + | BI_ble + | BI_ble_un + | BI_blt + | BI_blt_un + | BI_bne_un + | BI_brfalse + | BI_brtrue + +/// The instruction set. [] -type internal ILInstr = - | AI_add +type ILInstr = + | AI_add | AI_add_ovf | AI_add_ovf_un - | AI_and - | AI_div + | AI_and + | AI_div | AI_div_un - | AI_ceq - | AI_cgt - | AI_cgt_un - | AI_clt - | AI_clt_un + | AI_ceq + | AI_cgt + | AI_cgt_un + | AI_clt + | AI_clt_un | AI_conv of ILBasicType | AI_conv_ovf of ILBasicType | AI_conv_ovf_un of ILBasicType - | AI_mul - | AI_mul_ovf + | AI_mul + | AI_mul_ovf | AI_mul_ovf_un - | AI_rem - | AI_rem_un - | AI_shl - | AI_shr + | AI_rem + | AI_rem_un + | AI_shl + | AI_shr | AI_shr_un - | AI_sub - | AI_sub_ovf - | AI_sub_ovf_un - | AI_xor - | AI_or - | AI_neg - | AI_not - | AI_ldnull - | AI_dup + | AI_sub + | AI_sub_ovf + | AI_sub_ovf_un + | AI_xor + | AI_or + | AI_neg + | AI_not + | AI_ldnull + | AI_dup | AI_pop - | AI_ckfinite + | AI_ckfinite | AI_nop | AI_ldc of ILBasicType * ILConst | I_ldarg of uint16 @@ -501,33 +486,33 @@ type internal ILInstr = | I_stind of ILAlignment * ILVolatility * ILBasicType | I_stloc of uint16 - // Control transfer + // Control transfer | I_br of ILCodeLabel | I_jmp of ILMethodSpec - | I_brcmp of ILComparisonInstr * ILCodeLabel - | I_switch of ILCodeLabel list - | I_ret + | I_brcmp of ILComparisonInstr * ILCodeLabel + | I_switch of ILCodeLabel list + | I_ret - // Method call + // Method call | I_call of ILTailcall * ILMethodSpec * ILVarArgs | I_callvirt of ILTailcall * ILMethodSpec * ILVarArgs | I_callconstraint of ILTailcall * ILType * ILMethodSpec * ILVarArgs | I_calli of ILTailcall * ILCallingSignature * ILVarArgs | I_ldftn of ILMethodSpec | I_newobj of ILMethodSpec * ILVarArgs - - // Exceptions + + // Exceptions | I_throw | I_endfinally | I_endfilter | I_leave of ILCodeLabel | I_rethrow - // Object instructions + // Object instructions | I_ldsfld of ILVolatility * ILFieldSpec | I_ldfld of ILAlignment * ILVolatility * ILFieldSpec | I_ldsflda of ILFieldSpec - | I_ldflda of ILFieldSpec + | I_ldflda of ILFieldSpec | I_stsfld of ILVolatility * ILFieldSpec | I_stfld of ILAlignment * ILVolatility * ILFieldSpec | I_ldstr of string @@ -536,7 +521,7 @@ type internal ILInstr = | I_ldtoken of ILToken | I_ldvirtftn of ILMethodSpec - // Value type instructions + // Value type instructions | I_cpobj of ILType | I_initobj of ILType | I_ldobj of ILAlignment * ILVolatility * ILType @@ -546,18 +531,18 @@ type internal ILInstr = | I_unbox_any of ILType | I_sizeof of ILType - // Generalized array instructions. In AbsIL these instructions include - // both the single-dimensional variants (with ILArrayShape == ILArrayShape.SingleDimensional) - // and calls to the "special" multi-dimensional "methods" such as: - // newobj void string[,]::.ctor(int32, int32) - // call string string[,]::Get(int32, int32) - // call string& string[,]::Address(int32, int32) - // call void string[,]::Set(int32, int32,string) + // Generalized array instructions. In AbsIL these instructions include + // both the single-dimensional variants (with ILArrayShape == ILArrayShape.SingleDimensional) + // and calls to the "special" multi-dimensional "methods" such as: + // newobj void string[,]::.ctor(int32, int32) + // call string string[,]::Get(int32, int32) + // call string& string[,]::Address(int32, int32) + // call void string[,]::Set(int32, int32,string) // - // The IL reader transforms calls of this form to the corresponding - // generalized instruction with the corresponding ILArrayShape - // argument. This is done to simplify the IL and make it more uniform. - // The IL writer then reverses this when emitting the binary. + // The IL reader transforms calls of this form to the corresponding + // generalized instruction with the corresponding ILArrayShape + // argument. This is done to simplify the IL and make it more uniform. + // The IL writer then reverses this when emitting the binary. | I_ldelem of ILBasicType | I_stelem of ILBasicType | I_ldelema of ILReadonly * bool * ILArrayShape * ILType (* ILArrayShape = ILArrayShape.SingleDimensional for single dimensional arrays *) @@ -566,26 +551,26 @@ type internal ILInstr = | I_newarr of ILArrayShape * ILType (* ILArrayShape = ILArrayShape.SingleDimensional for single dimensional arrays *) | I_ldlen - // "System.TypedReference" related instructions: almost - // no languages produce these, though they do occur in mscorlib.dll + // "System.TypedReference" related instructions: almost + // no languages produce these, though they do occur in mscorlib.dll // System.TypedReference represents a pair of a type and a byref-pointer - // to a value of that type. + // to a value of that type. | I_mkrefany of ILType - | I_refanytype + | I_refanytype | I_refanyval of ILType - - // Debug-specific - // I_seqpoint is a fake instruction to represent a sequence point: - // the next instruction starts the execution of the - // statement covered by the given range - this is a - // dummy instruction and is not emitted - | I_break - | I_seqpoint of ILSourceMarker - - // Varargs - C++ only - | I_arglist - - // Local aggregates, i.e. stack allocated data (alloca): C++ only + + // Debug-specific + // I_seqpoint is a fake instruction to represent a sequence point: + // the next instruction starts the execution of the + // statement covered by the given range - this is a + // dummy instruction and is not emitted + | I_break + | I_seqpoint of ILSourceMarker + + // Varargs - C++ only + | I_arglist + + // Local aggregates, i.e. stack allocated data (alloca): C++ only | I_localloc | I_cpblk of ILAlignment * ILVolatility | I_initblk of ILAlignment * ILVolatility @@ -595,40 +580,40 @@ type internal ILInstr = | EI_ldlen_multi of int32 * int32 [] -type internal ILExceptionClause = +type ILExceptionClause = | Finally of (ILCodeLabel * ILCodeLabel) | Fault of (ILCodeLabel * ILCodeLabel) | FilterCatch of filterRange: (ILCodeLabel * ILCodeLabel) * handlerRange: (ILCodeLabel * ILCodeLabel) | TypeCatch of ILType * (ILCodeLabel * ILCodeLabel) [] -type internal ILExceptionSpec = +type ILExceptionSpec = { Range: (ILCodeLabel * ILCodeLabel) Clause: ILExceptionClause } -/// Indicates that a particular local variable has a particular source -/// language name within a given set of ranges. This does not effect local -/// variable numbering, which is global over the whole method. +/// Indicates that a particular local variable has a particular source +/// language name within a given set of ranges. This does not effect local +/// variable numbering, which is global over the whole method. [] -type internal ILLocalDebugMapping = +type ILLocalDebugMapping = { LocalIndex: int LocalName: string } [] -type internal ILLocalDebugInfo = +type ILLocalDebugInfo = { Range: (ILCodeLabel * ILCodeLabel); DebugMappings: ILLocalDebugMapping list } [] -type internal ILCode = - { Labels: Dictionary - Instrs:ILInstr[] - Exceptions: ILExceptionSpec list +type ILCode = + { Labels: Dictionary + Instrs:ILInstr[] + Exceptions: ILExceptionSpec list Locals: ILLocalDebugInfo list } /// Field Init [] -type ILFieldInit = +type ILFieldInit = | String of string | Bool of bool | Char of uint16 @@ -647,57 +632,57 @@ type ILFieldInit = member AsObject: unit -> obj [] -type internal ILNativeVariant = +type ILNativeVariant = | Empty | Null | Variant | Currency - | Decimal - | Date - | BSTR - | LPSTR - | LPWSTR - | IUnknown - | IDispatch - | SafeArray - | Error - | HRESULT - | CArray - | UserDefined - | Record + | Decimal + | Date + | BSTR + | LPSTR + | LPWSTR + | IUnknown + | IDispatch + | SafeArray + | Error + | HRESULT + | CArray + | UserDefined + | Record | FileTime - | Blob - | Stream - | Storage - | StreamedObject - | StoredObject - | BlobObject - | CF + | Blob + | Stream + | Storage + | StreamedObject + | StoredObject + | BlobObject + | CF | CLSID - | Void + | Void | Bool | Int8 - | Int16 - | Int32 - | Int64 - | Single - | Double - | UInt8 - | UInt16 - | UInt32 - | UInt64 - | PTR - | Array of ILNativeVariant - | Vector of ILNativeVariant - | Byref of ILNativeVariant - | Int - | UInt + | Int16 + | Int32 + | Int64 + | Single + | Double + | UInt8 + | UInt16 + | UInt32 + | UInt64 + | PTR + | Array of ILNativeVariant + | Vector of ILNativeVariant + | Byref of ILNativeVariant + | Int + | UInt /// Native Types, for marshalling to the native C interface. /// These are taken directly from the ILASM syntax. -/// Most of these are listed in the CLI ECMA-335 Spec (Partition II, 7.4). +/// Most of these are listed in the CLI ECMA-335 Spec (Partition II, 7.4). [] -type ILNativeType = +type ILNativeType = | Empty | Custom of ILGuid * nativeTypeName: string * custMarshallerName: string * cookieString: byte[] | FixedSysString of int32 @@ -723,8 +708,8 @@ type ILNativeType = | UInt16 | UInt32 | UInt64 - /// optional idx of parameter giving size plus optional additive i.e. num elems - | Array of ILNativeType option * (int32 * int32 option) option + /// optional idx of parameter giving size plus optional additive i.e. num elems + | Array of ILNativeType option * (int32 * int32 option) option | Int | UInt | Method @@ -733,25 +718,25 @@ type ILNativeType = | IUnknown | IDispatch | Interface - | Error - | SafeArray of ILNativeVariant * string option + | Error + | SafeArray of ILNativeVariant * string option | ANSIBSTR | VariantBool /// Local variables [] -type internal ILLocal = +type ILLocal = { Type: ILType IsPinned: bool DebugInfo: (string * int * int) option } - -type internal ILLocals = list + +type ILLocals = list /// IL method bodies [] -type internal ILMethodBody = +type ILMethodBody = { IsZeroInit: bool - MaxStack: int32 + MaxStack: int32 NoInlining: bool AggressiveInlining: bool Locals: ILLocals @@ -760,20 +745,20 @@ type internal ILMethodBody = /// Member Access [] -type ILMemberAccess = +type ILMemberAccess = | Assembly | CompilerControlled | FamilyAndAssembly | FamilyOrAssembly | Family - | Private - | Public + | Private + | Public [] -type ILAttribElem = +type ILAttribElem = /// Represents a custom attribute parameter of type 'string'. These may be null, in which case they are encoded in a special /// way as indicated by Ecma-335 Partition II. - | String of string option + | String of string option | Bool of bool | Char of char | SByte of sbyte @@ -786,7 +771,7 @@ type ILAttribElem = | UInt64 of uint64 | Single of single | Double of double - | Null + | Null | Type of ILType option | TypeRef of ILTypeRef option | Array of ILType * ILAttribElem list @@ -804,17 +789,16 @@ type ILAttribute = | Decoded of method: ILMethodSpec * fixedArgs: ILAttribElem list * namedArgs: ILAttributeNamedArg list /// Attribute instance constructor. - member internal Method: ILMethodSpec + member Method: ILMethodSpec /// Decoded arguments. May be empty in encoded attribute form. - member internal Elements: ILAttribElem list + member Elements: ILAttribElem list - member internal WithMethod: method: ILMethodSpec -> ILAttribute + member WithMethod: method: ILMethodSpec -> ILAttribute [] type ILAttributes = member AsArray: ILAttribute [] - member AsList: ILAttribute list /// Represents the efficiency-oriented storage of ILAttributes in another item. @@ -823,12 +807,12 @@ type ILAttributesStored /// Method parameters and return values. [] -type ILParameter = +type ILParameter = { Name: string option Type: ILType - Default: ILFieldInit option - /// Marshalling map for parameters. COM Interop only. - Marshal: ILNativeType option + Default: ILFieldInit option + /// Marshalling map for parameters. COM Interop only. + Marshal: ILNativeType option IsIn: bool IsOut: bool IsOptional: bool @@ -836,15 +820,15 @@ type ILParameter = MetadataIndex: int32 } member CustomAttrs: ILAttributes -type ILParameters = ILParameter list +type ILParameters = list -val internal typesOfILParams: ILParameters -> ILType list +val typesOfILParams: ILParameters -> ILType list /// Method return values. [] -type ILReturn = +type ILReturn = { Marshal: ILNativeType option - Type: ILType + Type: ILType CustomAttrsStored: ILAttributesStored MetadataIndex: int32 } @@ -853,13 +837,13 @@ type ILReturn = member WithCustomAttrs: customAttrs: ILAttributes -> ILReturn [] -type internal ILSecurityAction = - | Request +type ILSecurityAction = + | Request | Demand | Assert | Deny | PermitOnly - | LinkCheck + | LinkCheck | InheritCheck | ReqMin | ReqOpt @@ -873,13 +857,13 @@ type internal ILSecurityAction = | InheritanceDemandChoice | DemandChoice -type internal ILSecurityDecl = +type ILSecurityDecl = | ILSecurityDecl of ILSecurityAction * byte[] -/// Abstract type equivalent to ILSecurityDecl list - use helpers +/// Abstract type equivalent to ILSecurityDecl list - use helpers /// below to construct/destruct these. [] -type internal ILSecurityDecls = +type ILSecurityDecls = member AsList: ILSecurityDecl list /// Represents the efficiency-oriented storage of ILSecurityDecls in another item. @@ -888,7 +872,7 @@ type ILSecurityDeclsStored /// PInvoke attributes. [] -type internal PInvokeCallingConvention = +type PInvokeCallingConvention = | None | Cdecl | Stdcall @@ -897,26 +881,26 @@ type internal PInvokeCallingConvention = | WinApi [] -type internal PInvokeCharEncoding = +type PInvokeCharEncoding = | None | Ansi | Unicode | Auto [] -type internal PInvokeCharBestFit = +type PInvokeCharBestFit = | UseAssembly | Enabled | Disabled [] -type internal PInvokeThrowOnUnmappableChar = +type PInvokeThrowOnUnmappableChar = | UseAssembly | Enabled | Disabled [] -type internal PInvokeMethod = +type PInvokeMethod = { Where: ILModuleRef Name: string CallingConv: PInvokeCallingConvention @@ -926,82 +910,106 @@ type internal PInvokeMethod = ThrowOnUnmappableChar: PInvokeThrowOnUnmappableChar CharBestFit: PInvokeCharBestFit } -/// Represents a reference to a method declaration in a superclass or interface. -type internal ILOverridesSpec = + +/// [OverridesSpec] - refer to a method declaration in a superclass or interface. +type ILOverridesSpec = | OverridesSpec of ILMethodRef * ILType member MethodRef: ILMethodRef - member DeclaringType: ILType + member DeclaringType: ILType + +type ILMethodVirtualInfo = + { IsFinal: bool + IsNewSlot: bool + IsCheckAccessOnOverride: bool + IsAbstract: bool } + +[] +type MethodKind = + | Static + | Cctor + | Ctor + | NonVirtual + | Virtual of ILMethodVirtualInfo [] type MethodBody = - | IL of Lazy - | PInvoke of Lazy + | IL of ILMethodBody + | PInvoke of PInvokeMethod | Abstract | Native | NotAvailable +[] +type MethodCodeKind = + | IL + | Native + | Runtime + /// Generic parameters. Formal generic parameter declarations may include the bounds, if any, on the generic parameter. type ILGenericParameterDef = { Name: string /// At most one is the parent type, the others are interface types. - Constraints: ILTypes + Constraints: ILTypes /// Variance of type parameters, only applicable to generic parameters for generic interfaces and delegates. - Variance: ILGenericVariance + Variance: ILGenericVariance /// Indicates the type argument must be a reference type. - HasReferenceTypeConstraint: bool + HasReferenceTypeConstraint: bool /// Indicates the type argument must be a value type, but not Nullable. - HasNotNullableValueTypeConstraint: bool + HasNotNullableValueTypeConstraint: bool /// Indicates the type argument must have a public nullary constructor. - HasDefaultConstructorConstraint: bool - + HasDefaultConstructorConstraint: bool + /// Do not use this CustomAttrsStored: ILAttributesStored /// Do not use this MetadataIndex: int32 } - member CustomAttrs: ILAttributes + member CustomAttrs: ILAttributes type ILGenericParameterDefs = ILGenericParameterDef list -/// IL Method definitions. +[] +type ILLazyMethodBody = + member Contents: MethodBody + +/// IL Method definitions. [] -type ILMethodDef = +type ILMethodDef = /// Functional creation of a value, with delayed reading of some elements via a metadata index - internal new: - name: string * attributes: MethodAttributes * implAttributes: MethodImplAttributes * callingConv: ILCallingConv * - parameters: ILParameters * ret: ILReturn * body: Lazy * isEntryPoint:bool * genericParams: ILGenericParameterDefs * + new: name: string * attributes: MethodAttributes * implAttributes: MethodImplAttributes * callingConv: ILCallingConv * + parameters: ILParameters * ret: ILReturn * body: ILLazyMethodBody * isEntryPoint:bool * genericParams: ILGenericParameterDefs * securityDeclsStored: ILSecurityDeclsStored * customAttrsStored: ILAttributesStored * metadataIndex: int32 -> ILMethodDef /// Functional creation of a value, immediate - new: name: string * attributes: MethodAttributes * implAttributes: MethodImplAttributes * callingConv: ILCallingConv * - parameters: ILParameters * ret: ILReturn * body: Lazy * isEntryPoint:bool * genericParams: ILGenericParameterDefs * + new: name: string * attributes: MethodAttributes * implAttributes: MethodImplAttributes * callingConv: ILCallingConv * + parameters: ILParameters * ret: ILReturn * body: ILLazyMethodBody * isEntryPoint:bool * genericParams: ILGenericParameterDefs * securityDecls: ILSecurityDecls * customAttrs: ILAttributes -> ILMethodDef - + member Name: string member Attributes: MethodAttributes member ImplAttributes: MethodImplAttributes member CallingConv: ILCallingConv member Parameters: ILParameters member Return: ILReturn - member Body: MethodBody + member Body: ILLazyMethodBody member SecurityDecls: ILSecurityDecls member IsEntryPoint:bool member GenericParams: ILGenericParameterDefs - member CustomAttrs: ILAttributes + member CustomAttrs: ILAttributes member ParameterTypes: ILTypes member IsIL: bool member Code: ILCode option member Locals: ILLocals member MaxStack: int32 member IsZeroInit: bool - + /// Indicates a .cctor method. member IsClassInitializer: bool @@ -1014,9 +1022,9 @@ type ILMethodDef = /// Indicates this is an instance methods that is not virtual. member IsNonVirtualInstance: bool - /// Indicates an instance methods that is virtual or abstract or implements an interface slot. + /// Indicates an instance methods that is virtual or abstract or implements an interface slot. member IsVirtual: bool - + member IsFinal: bool member IsNewSlot: bool member IsCheckAccessOnOverride: bool @@ -1031,7 +1039,7 @@ type ILMethodDef = member IsUnmanagedExport: bool member IsReqSecObj: bool - /// Some methods are marked "HasSecurity" even if there are no permissions attached, e.g. if they use SuppressUnmanagedCodeSecurityAttribute + /// Some methods are marked "HasSecurity" even if there are no permissions attached, e.g. if they use SuppressUnmanagedCodeSecurityAttribute member HasSecurity: bool member IsManaged: bool member IsForwardRef: bool @@ -1043,29 +1051,28 @@ type ILMethodDef = /// SafeHandle finalizer must be run. member IsMustRun: bool - + /// Functional update of the value - member internal - With: ?name: string * ?attributes: MethodAttributes * ?implAttributes: MethodImplAttributes * ?callingConv: ILCallingConv * - ?parameters: ILParameters * ?ret: ILReturn * ?body: Lazy * ?securityDecls: ILSecurityDecls * ?isEntryPoint:bool * + member With: ?name: string * ?attributes: MethodAttributes * ?implAttributes: MethodImplAttributes * ?callingConv: ILCallingConv * + ?parameters: ILParameters * ?ret: ILReturn * ?body: ILLazyMethodBody * ?securityDecls: ILSecurityDecls * ?isEntryPoint:bool * ?genericParams: ILGenericParameterDefs * ?customAttrs: ILAttributes -> ILMethodDef - member internal WithSpecialName: ILMethodDef - member internal WithHideBySig: unit -> ILMethodDef - member internal WithHideBySig: bool -> ILMethodDef - member internal WithFinal: bool -> ILMethodDef - member internal WithAbstract: bool -> ILMethodDef - member internal WithAccess: ILMemberAccess -> ILMethodDef - member internal WithNewSlot: ILMethodDef - member internal WithSecurity: bool -> ILMethodDef - member internal WithPInvoke: bool -> ILMethodDef - member internal WithPreserveSig: bool -> ILMethodDef - member internal WithSynchronized: bool -> ILMethodDef - member internal WithNoInlining: bool -> ILMethodDef - member internal WithAggressiveInlining: bool -> ILMethodDef - member internal WithRuntime: bool -> ILMethodDef + member WithSpecialName: ILMethodDef + member WithHideBySig: unit -> ILMethodDef + member WithHideBySig: bool -> ILMethodDef + member WithFinal: bool -> ILMethodDef + member WithAbstract: bool -> ILMethodDef + member WithAccess: ILMemberAccess -> ILMethodDef + member WithNewSlot: ILMethodDef + member WithSecurity: bool -> ILMethodDef + member WithPInvoke: bool -> ILMethodDef + member WithPreserveSig: bool -> ILMethodDef + member WithSynchronized: bool -> ILMethodDef + member WithNoInlining: bool -> ILMethodDef + member WithAggressiveInlining: bool -> ILMethodDef + member WithRuntime: bool -> ILMethodDef /// Tables of methods. Logically equivalent to a list of methods but -/// the table is kept in a form optimized for looking up methods by +/// the table is kept in a form optimized for looking up methods by /// name and arity. [] type ILMethodDefs = @@ -1077,28 +1084,27 @@ type ILMethodDefs = /// Field definitions. [] -type ILFieldDef = +type ILFieldDef = /// Functional creation of a value using delayed reading via a metadata index - internal new: - name: string * fieldType: ILType * attributes: FieldAttributes * data: byte[] option * - literalValue: ILFieldInit option * offset: int32 option * marshal: ILNativeType option * + new: name: string * fieldType: ILType * attributes: FieldAttributes * data: byte[] option * + literalValue: ILFieldInit option * offset: int32 option * marshal: ILNativeType option * customAttrsStored: ILAttributesStored * metadataIndex: int32 -> ILFieldDef /// Functional creation of a value, immediate - new: name: string * fieldType: ILType * attributes: FieldAttributes * data: byte[] option * - literalValue: ILFieldInit option * offset: int32 option * marshal: ILNativeType option * + new: name: string * fieldType: ILType * attributes: FieldAttributes * data: byte[] option * + literalValue: ILFieldInit option * offset: int32 option * marshal: ILNativeType option * customAttrs: ILAttributes -> ILFieldDef member Name: string member FieldType: ILType member Attributes: FieldAttributes member Data: byte[] option - member LiteralValue: ILFieldInit option + member LiteralValue: ILFieldInit option /// The explicit offset in bytes when explicit layout is used. - member Offset: int32 option - member Marshal: ILNativeType option + member Offset: int32 option + member Marshal: ILNativeType option member CustomAttrs: ILAttributes member IsStatic: bool member IsSpecialName: bool @@ -1108,43 +1114,41 @@ type ILFieldDef = member Access: ILMemberAccess /// Functional update of the value - member internal With: - ?name: string * ?fieldType: ILType * ?attributes: FieldAttributes * ?data: byte[] option * ?literalValue: ILFieldInit option * - ?offset: int32 option * ?marshal: ILNativeType option * ?customAttrs: ILAttributes -> ILFieldDef - member internal WithAccess: ILMemberAccess -> ILFieldDef - member internal WithInitOnly: bool -> ILFieldDef - member internal WithStatic: bool -> ILFieldDef - member internal WithSpecialName: bool -> ILFieldDef - member internal WithNotSerialized: bool -> ILFieldDef - member internal WithLiteralDefaultValue: ILFieldInit option -> ILFieldDef - member internal WithFieldMarshal: ILNativeType option -> ILFieldDef - -/// Tables of fields. Logically equivalent to a list of fields but the table is kept in + member With: ?name: string * ?fieldType: ILType * ?attributes: FieldAttributes * ?data: byte[] option * ?literalValue: ILFieldInit option * + ?offset: int32 option * ?marshal: ILNativeType option * ?customAttrs: ILAttributes -> ILFieldDef + member WithAccess: ILMemberAccess -> ILFieldDef + member WithInitOnly: bool -> ILFieldDef + member WithStatic: bool -> ILFieldDef + member WithSpecialName: bool -> ILFieldDef + member WithNotSerialized: bool -> ILFieldDef + member WithLiteralDefaultValue: ILFieldInit option -> ILFieldDef + member WithFieldMarshal: ILNativeType option -> ILFieldDef + +/// Tables of fields. Logically equivalent to a list of fields but the table is kept in /// a form to allow efficient looking up fields by name. [] type ILFieldDefs = - member internal AsList: ILFieldDef list - member internal LookupByName: string -> ILFieldDef list + member AsList: ILFieldDef list + member LookupByName: string -> ILFieldDef list /// Event definitions. [] type ILEventDef = /// Functional creation of a value, using delayed reading via a metadata index, for ilread.fs - internal new: - eventType: ILType option * name: string * attributes: EventAttributes * addMethod: ILMethodRef * - removeMethod: ILMethodRef * fireMethod: ILMethodRef option * otherMethods: ILMethodRef list * + new: eventType: ILType option * name: string * attributes: EventAttributes * addMethod: ILMethodRef * + removeMethod: ILMethodRef * fireMethod: ILMethodRef option * otherMethods: ILMethodRef list * customAttrsStored: ILAttributesStored * metadataIndex: int32 -> ILEventDef /// Functional creation of a value, immediate - new: eventType: ILType option * name: string * attributes: EventAttributes * addMethod: ILMethodRef * - removeMethod: ILMethodRef * fireMethod: ILMethodRef option * otherMethods: ILMethodRef list * + new: eventType: ILType option * name: string * attributes: EventAttributes * addMethod: ILMethodRef * + removeMethod: ILMethodRef * fireMethod: ILMethodRef option * otherMethods: ILMethodRef list * customAttrs: ILAttributes -> ILEventDef member EventType: ILType option member Name: string member Attributes: EventAttributes - member AddMethod: ILMethodRef + member AddMethod: ILMethodRef member RemoveMethod: ILMethodRef member FireMethod: ILMethodRef option member OtherMethods: ILMethodRef list @@ -1153,30 +1157,28 @@ type ILEventDef = member IsRTSpecialName: bool /// Functional update of the value - member internal With: - ?eventType: ILType option * ?name: string * ?attributes: EventAttributes * ?addMethod: ILMethodRef * - ?removeMethod: ILMethodRef * ?fireMethod: ILMethodRef option * ?otherMethods: ILMethodRef list * - ?customAttrs: ILAttributes -> ILEventDef + member With: ?eventType: ILType option * ?name: string * ?attributes: EventAttributes * ?addMethod: ILMethodRef * + ?removeMethod: ILMethodRef * ?fireMethod: ILMethodRef option * ?otherMethods: ILMethodRef list * + ?customAttrs: ILAttributes -> ILEventDef /// Table of those events in a type definition. [] type ILEventDefs = - member internal AsList: ILEventDef list - member internal LookupByName: string -> ILEventDef list + member AsList: ILEventDef list + member LookupByName: string -> ILEventDef list /// Property definitions [] type ILPropertyDef = /// Functional creation of a value, using delayed reading via a metadata index, for ilread.fs - internal new: - name: string * attributes: PropertyAttributes * setMethod: ILMethodRef option * getMethod: ILMethodRef option * - callingConv: ILThisConvention * propertyType: ILType * init: ILFieldInit option * args: ILTypes * + new: name: string * attributes: PropertyAttributes * setMethod: ILMethodRef option * getMethod: ILMethodRef option * + callingConv: ILThisConvention * propertyType: ILType * init: ILFieldInit option * args: ILTypes * customAttrsStored: ILAttributesStored * metadataIndex: int32 -> ILPropertyDef /// Functional creation of a value, immediate - new: name: string * attributes: PropertyAttributes * setMethod: ILMethodRef option * getMethod: ILMethodRef option * - callingConv: ILThisConvention * propertyType: ILType * init: ILFieldInit option * args: ILTypes * + new: name: string * attributes: PropertyAttributes * setMethod: ILMethodRef option * getMethod: ILMethodRef option * + callingConv: ILThisConvention * propertyType: ILType * init: ILFieldInit option * args: ILTypes * customAttrs: ILAttributes -> ILPropertyDef member Name: string @@ -1184,7 +1186,7 @@ type ILPropertyDef = member SetMethod: ILMethodRef option member GetMethod: ILMethodRef option member CallingConv: ILThisConvention - member PropertyType: ILType + member PropertyType: ILType member Init: ILFieldInit option member Args: ILTypes member CustomAttrs: ILAttributes @@ -1192,17 +1194,16 @@ type ILPropertyDef = member IsRTSpecialName: bool /// Functional update of the value - member internal With: - ?name: string * ?attributes: PropertyAttributes * ?setMethod: ILMethodRef option * ?getMethod: ILMethodRef option * - ?callingConv: ILThisConvention * ?propertyType: ILType * ?init: ILFieldInit option * ?args: ILTypes * - ?customAttrs: ILAttributes -> ILPropertyDef + member With: ?name: string * ?attributes: PropertyAttributes * ?setMethod: ILMethodRef option * ?getMethod: ILMethodRef option * + ?callingConv: ILThisConvention * ?propertyType: ILType * ?init: ILFieldInit option * ?args: ILTypes * + ?customAttrs: ILAttributes -> ILPropertyDef /// Table of properties in an IL type definition. [] [] type ILPropertyDefs = - member internal AsList: ILPropertyDef list - member internal LookupByName: string -> ILPropertyDef list + member AsList: ILPropertyDef list + member LookupByName: string -> ILPropertyDef list /// Method Impls type ILMethodImplDef = @@ -1211,18 +1212,18 @@ type ILMethodImplDef = [] type ILMethodImplDefs = - member internal AsList: ILMethodImplDef list + member AsList: ILMethodImplDef list /// Type Layout information. [] type ILTypeDefLayout = | Auto | Sequential of ILTypeDefLayoutInfo - | Explicit of ILTypeDefLayoutInfo + | Explicit of ILTypeDefLayoutInfo -type internal ILTypeDefLayoutInfo = +and ILTypeDefLayoutInfo = { Size: int32 option - Pack: uint16 option } + Pack: uint16 option } /// Indicate the initialization semantics of a type. [] @@ -1240,9 +1241,9 @@ type ILDefaultPInvokeEncoding = /// Type Access. [] type ILTypeDefAccess = - | Public + | Public | Private - | Nested of ILMemberAccess + | Nested of ILMemberAccess /// A categorization of type definitions into "kinds" [] @@ -1250,43 +1251,42 @@ type ILTypeDefKind = | Class | ValueType | Interface - | Enum - | Delegate + | Enum + | Delegate -/// Tables of named type definitions. +/// Tables of named type definitions. [] type ILTypeDefs = interface IEnumerable - member internal AsArray: ILTypeDef[] + member AsArray: ILTypeDef[] - member internal AsList: ILTypeDef list + member AsList: ILTypeDef list /// Get some information about the type defs, but do not force the read of the type defs themselves. - member internal AsArrayOfPreTypeDefs: ILPreTypeDef[] + member AsArrayOfPreTypeDefs: ILPreTypeDef[] - /// Calls to FindByName will result in any laziness in the overall - /// set of ILTypeDefs being read in in addition - /// to the details for the type found, but the remaining individual - /// type definitions will not be read. - member internal FindByName: string -> ILTypeDef + /// Calls to FindByName will result in any laziness in the overall + /// set of ILTypeDefs being read in in addition + /// to the details for the type found, but the remaining individual + /// type definitions will not be read. + member FindByName: string -> ILTypeDef -/// Represents IL Type Definitions. -[] -type ILTypeDef = +/// Represents IL Type Definitions. +and [] + ILTypeDef = /// Functional creation of a value, using delayed reading via a metadata index, for ilread.fs - internal new: - name: string * attributes: TypeAttributes * layout: ILTypeDefLayout * implements: ILTypes * genericParams: ILGenericParameterDefs * - extends: ILType option * methods: ILMethodDefs * nestedTypes: ILTypeDefs * fields: ILFieldDefs * methodImpls: ILMethodImplDefs * - events: ILEventDefs * properties: ILPropertyDefs * securityDeclsStored: ILSecurityDeclsStored * customAttrsStored: ILAttributesStored * metadataIndex: int32 -> ILTypeDef + new: name: string * attributes: TypeAttributes * layout: ILTypeDefLayout * implements: ILTypes * genericParams: ILGenericParameterDefs * + extends: ILType option * methods: ILMethodDefs * nestedTypes: ILTypeDefs * fields: ILFieldDefs * methodImpls: ILMethodImplDefs * + events: ILEventDefs * properties: ILPropertyDefs * securityDeclsStored: ILSecurityDeclsStored * customAttrsStored: ILAttributesStored * metadataIndex: int32 -> ILTypeDef /// Functional creation of a value, immediate - new: name: string * attributes: TypeAttributes * layout: ILTypeDefLayout * implements: ILTypes * genericParams: ILGenericParameterDefs * - extends: ILType option * methods: ILMethodDefs * nestedTypes: ILTypeDefs * fields: ILFieldDefs * methodImpls: ILMethodImplDefs * + new: name: string * attributes: TypeAttributes * layout: ILTypeDefLayout * implements: ILTypes * genericParams: ILGenericParameterDefs * + extends: ILType option * methods: ILMethodDefs * nestedTypes: ILTypeDefs * fields: ILFieldDefs * methodImpls: ILMethodImplDefs * events: ILEventDefs * properties: ILPropertyDefs * securityDecls: ILSecurityDecls * customAttrs: ILAttributes -> ILTypeDef - member Name: string + member Name: string member Attributes: TypeAttributes member GenericParams: ILGenericParameterDefs member Layout: ILTypeDefLayout @@ -1310,31 +1310,31 @@ type ILTypeDef = member IsAbstract: bool member IsSealed: bool member IsSerializable: bool - /// Class or interface generated for COM interop. + /// Class or interface generated for COM interop. member IsComInterop: bool member IsSpecialName: bool - /// Some classes are marked "HasSecurity" even if there are no permissions attached, - /// e.g. if they use SuppressUnmanagedCodeSecurityAttribute + /// Some classes are marked "HasSecurity" even if there are no permissions attached, + /// e.g. if they use SuppressUnmanagedCodeSecurityAttribute member HasSecurity: bool member Encoding: ILDefaultPInvokeEncoding - member internal WithAccess: ILTypeDefAccess -> ILTypeDef - member internal WithNestedAccess: ILMemberAccess -> ILTypeDef - member internal WithSealed: bool -> ILTypeDef - member internal WithSerializable: bool -> ILTypeDef - member internal WithAbstract: bool -> ILTypeDef - member internal WithImport: bool -> ILTypeDef - member internal WithHasSecurity: bool -> ILTypeDef - member internal WithLayout: ILTypeDefLayout -> ILTypeDef - member internal WithKind: ILTypeDefKind -> ILTypeDef - member internal WithEncoding: ILDefaultPInvokeEncoding -> ILTypeDef - member internal WithSpecialName: bool -> ILTypeDef - member internal WithInitSemantics: ILTypeInit -> ILTypeDef + member WithAccess: ILTypeDefAccess -> ILTypeDef + member WithNestedAccess: ILMemberAccess -> ILTypeDef + member WithSealed: bool -> ILTypeDef + member WithSerializable: bool -> ILTypeDef + member WithAbstract: bool -> ILTypeDef + member WithImport: bool -> ILTypeDef + member WithHasSecurity: bool -> ILTypeDef + member WithLayout: ILTypeDefLayout -> ILTypeDef + member WithKind: ILTypeDefKind -> ILTypeDef + member WithEncoding: ILDefaultPInvokeEncoding -> ILTypeDef + member WithSpecialName: bool -> ILTypeDef + member WithInitSemantics: ILTypeInit -> ILTypeDef /// Functional update - member With: ?name: string * ?attributes: TypeAttributes * ?layout: ILTypeDefLayout * ?implements: ILTypes * - ?genericParams:ILGenericParameterDefs * ?extends:ILType option * ?methods:ILMethodDefs * - ?nestedTypes:ILTypeDefs * ?fields: ILFieldDefs * ?methodImpls:ILMethodImplDefs * ?events:ILEventDefs * + member With: ?name: string * ?attributes: TypeAttributes * ?layout: ILTypeDefLayout * ?implements: ILTypes * + ?genericParams:ILGenericParameterDefs * ?extends:ILType option * ?methods:ILMethodDefs * + ?nestedTypes:ILTypeDefs * ?fields: ILFieldDefs * ?methodImpls:ILMethodImplDefs * ?events:ILEventDefs * ?properties:ILPropertyDefs * ?customAttrs:ILAttributes * ?securityDecls: ILSecurityDecls -> ILTypeDef /// Represents a prefix of information for ILTypeDef. @@ -1342,67 +1342,64 @@ type ILTypeDef = /// The information is enough to perform name resolution for the F# compiler, probe attributes /// for ExtensionAttribute etc. This is key to the on-demand exploration of .NET metadata. /// This information has to be "Goldilocks" - not too much, not too little, just right. -[] -type ILPreTypeDef = +and [] ILPreTypeDef = abstract Namespace: string list abstract Name: string /// Realise the actual full typedef abstract GetTypeDef : unit -> ILTypeDef -[] -type internal ILPreTypeDefImpl = +and [] ILPreTypeDefImpl = interface ILPreTypeDef -[] -type internal ILTypeDefStored -val internal mkILPreTypeDef : ILTypeDef -> ILPreTypeDef -val internal mkILPreTypeDefComputed : string list * string * (unit -> ILTypeDef) -> ILPreTypeDef -val internal mkILPreTypeDefRead : string list * string * int32 * ILTypeDefStored -> ILPreTypeDef -val internal mkILTypeDefReader: (int32 -> ILTypeDef) -> ILTypeDefStored +and [] ILTypeDefStored + +val mkILPreTypeDef : ILTypeDef -> ILPreTypeDef +val mkILPreTypeDefComputed : string list * string * (unit -> ILTypeDef) -> ILPreTypeDef +val mkILPreTypeDefRead : string list * string * int32 * ILTypeDefStored -> ILPreTypeDef +val mkILTypeDefReader: (int32 -> ILTypeDef) -> ILTypeDefStored [] type ILNestedExportedTypes = - member internal AsList: ILNestedExportedType list + member AsList: ILNestedExportedType list /// "Classes Elsewhere" - classes in auxiliary modules. /// -/// Manifests include declarations for all the classes in an +/// Manifests include declarations for all the classes in an /// assembly, regardless of which module they are in. /// -/// The ".class extern" construct describes so-called exported types -- +/// The ".class extern" construct describes so-called exported types -- /// these are public classes defined in the auxiliary modules of this assembly, -/// i.e. modules other than the manifest-carrying module. -/// -/// For example, if you have a two-module -/// assembly (A.DLL and B.DLL), and the manifest resides in the A.DLL, +/// i.e. modules other than the manifest-carrying module. +/// +/// For example, if you have a two-module +/// assembly (A.DLL and B.DLL), and the manifest resides in the A.DLL, /// then in the manifest all the public classes declared in B.DLL should -/// be defined as exported types, i.e., as ".class extern". The public classes -/// defined in A.DLL should not be defined as ".class extern" -- they are -/// already available in the manifest-carrying module. The union of all -/// public classes defined in the manifest-carrying module and all -/// exported types defined there is the set of all classes exposed by -/// this assembly. Thus, by analysing the metadata of the manifest-carrying -/// module of an assembly, you can identify all the classes exposed by +/// be defined as exported types, i.e., as ".class extern". The public classes +/// defined in A.DLL should not be defined as ".class extern" -- they are +/// already available in the manifest-carrying module. The union of all +/// public classes defined in the manifest-carrying module and all +/// exported types defined there is the set of all classes exposed by +/// this assembly. Thus, by analysing the metadata of the manifest-carrying +/// module of an assembly, you can identify all the classes exposed by /// this assembly, and where to find them. /// -/// Nested classes found in external modules should also be located in +/// Nested classes found in external modules should also be located in /// this table, suitably nested inside another "ILExportedTypeOrForwarder" /// definition. -/// these are only found in the "Nested" field of ILExportedTypeOrForwarder objects +/// these are only found in the "Nested" field of ILExportedTypeOrForwarder objects // REVIEW: fold this into ILExportedTypeOrForwarder. There's not much value in keeping these distinct -type ILNestedExportedType = +and ILNestedExportedType = { Name: string Access: ILMemberAccess Nested: ILNestedExportedTypes CustomAttrsStored: ILAttributesStored - MetadataIndex: int32 } - + MetadataIndex: int32 } member CustomAttrs: ILAttributes -/// these are only found in the ILExportedTypesAndForwarders table in the manifest +/// these are only found in the ILExportedTypesAndForwarders table in the manifest [] type ILExportedTypeOrForwarder = { ScopeRef: ILScopeRef @@ -1412,27 +1409,24 @@ type ILExportedTypeOrForwarder = Nested: ILNestedExportedTypes CustomAttrsStored: ILAttributesStored MetadataIndex: int32 } - member Access: ILTypeDefAccess - member IsForwarder: bool - member CustomAttrs: ILAttributes [] [] type ILExportedTypesAndForwarders = - member internal AsList: ILExportedTypeOrForwarder list - member internal TryFindByName: string -> ILExportedTypeOrForwarder option + member AsList: ILExportedTypeOrForwarder list + member TryFindByName: string -> ILExportedTypeOrForwarder option [] -type internal ILResourceAccess = - | Public - | Private +type ILResourceAccess = + | Public + | Private [] -type internal ILResourceLocation = - +type ILResourceLocation = + internal /// Represents a manifest resource that can be read or written to a PE file | Local of ByteStorage @@ -1444,9 +1438,9 @@ type internal ILResourceLocation = /// "Manifest ILResources" are chunks of resource data, being one of: /// - the data section of the current module (byte[] of resource given directly). -/// - in an external file in this assembly (offset given in the ILResourceLocation field). -/// - as a resources in another assembly of the same name. -type internal ILResource = +/// - in an external file in this assembly (offset given in the ILResourceLocation field). +/// - as a resources in another assembly of the same name. +type ILResource = { Name: string Location: ILResourceLocation Access: ILResourceAccess @@ -1462,70 +1456,54 @@ type internal ILResource = [] [] type ILResources = - member internal AsList: ILResource list + member AsList: ILResource list + [] type ILAssemblyLongevity = - internal | Unspecified | Library | PlatformAppDomain | PlatformProcess | PlatformSystem - static member Default : ILAssemblyLongevity - /// The main module of an assembly is a module plus some manifest information. -type ILAssemblyManifest = +type ILAssemblyManifest = { Name: string - /// This is the ID of the algorithm used for the hashes of auxiliary - /// files in the assembly. These hashes are stored in the - /// ILModuleRef.Hash fields of this assembly. These are not - /// cryptographic hashes: they are simple file hashes. The algorithm - /// is normally 0x00008004 indicating the SHA1 hash algorithm. - AuxModuleHashAlgorithm: int32 - + /// This is the ID of the algorithm used for the hashes of auxiliary + /// files in the assembly. These hashes are stored in the + /// ILModuleRef.Hash fields of this assembly. These are not + /// cryptographic hashes: they are simple file hashes. The algorithm + /// is normally 0x00008004 indicating the SHA1 hash algorithm. + AuxModuleHashAlgorithm: int32 SecurityDeclsStored: ILSecurityDeclsStored - - /// This is the public key used to sign this - /// assembly (the signature itself is stored elsewhere: see the - /// binary format, and may not have been written if delay signing - /// is used). (member Name, member PublicKey) forms the full - /// public name of the assembly. - PublicKey: byte[] option - + /// This is the public key used to sign this + /// assembly (the signature itself is stored elsewhere: see the + /// binary format, and may not have been written if delay signing + /// is used). (member Name, member PublicKey) forms the full + /// public name of the assembly. + PublicKey: byte[] option Version: ILVersionInfo option - Locale: string option - CustomAttrsStored: ILAttributesStored - - AssemblyLongevity: ILAssemblyLongevity - + AssemblyLongevity: ILAssemblyLongevity DisableJitOptimizations: bool - JitTracking: bool - IgnoreSymbolStoreSequencePoints: bool - Retargetable: bool - - /// Records the types implemented by this assembly in auxiliary - /// modules. + /// Records the types implemented by this assembly in auxiliary + /// modules. ExportedTypes: ILExportedTypesAndForwarders - - /// Records whether the entrypoint resides in another module. + /// Records whether the entrypoint resides in another module. EntrypointElsewhere: ILModuleRef option - MetadataIndex: int32 - } + } member CustomAttrs: ILAttributes member SecurityDecls: ILSecurityDecls - + [] -type ILNativeResource = - internal +type ILNativeResource = /// Represents a native resource to be read from the PE file | In of fileName: string * linkedResourceBase: int * linkedResourceStart: int * linkedResourceLength: int @@ -1535,9 +1513,9 @@ type ILNativeResource = /// One module in the "current" assembly, either a main-module or /// an auxiliary module. The main module will have a manifest. /// -/// An assembly is built by joining together a "main" module plus -/// several auxiliary modules. -type ILModuleDef = +/// An assembly is built by joining together a "main" module plus +/// several auxiliary modules. +type ILModuleDef = { Manifest: ILAssemblyManifest option Name: string TypeDefs: ILTypeDefs @@ -1555,27 +1533,23 @@ type ILModuleDef = PhysicalAlignment: int32 ImageBase: int32 MetadataVersion: string - Resources: ILResources + Resources: ILResources /// e.g. win86 resources, as the exact contents of a .res or .obj file. Must be unlinked manually. NativeResources: ILNativeResource list CustomAttrsStored: ILAttributesStored MetadataIndex: int32 } - - member ManifestOfAssembly: ILAssemblyManifest - + member ManifestOfAssembly: ILAssemblyManifest member HasManifest: bool - member CustomAttrs: ILAttributes -/// Find the method definition corresponding to the given property or -/// event operation. These are always in the same class as the property -/// or event. This is useful especially if your code is not using the Ilbind -/// API to bind references. -val internal resolveILMethodRef: ILTypeDef -> ILMethodRef -> ILMethodDef - -val internal resolveILMethodRefWithRescope: (ILType -> ILType) -> ILTypeDef -> ILMethodRef -> ILMethodDef +/// Find the method definition corresponding to the given property or +/// event operation. These are always in the same class as the property +/// or event. This is useful especially if your code is not using the Ilbind +/// API to bind references. +val resolveILMethodRef: ILTypeDef -> ILMethodRef -> ILMethodDef +val resolveILMethodRefWithRescope: (ILType -> ILType) -> ILTypeDef -> ILMethodRef -> ILMethodDef -// ------------------------------------------------------------------ +// ------------------------------------------------------------------ // Type Names // // The name of a type stored in the Name field is as follows: @@ -1584,42 +1558,42 @@ val internal resolveILMethodRefWithRescope: (ILType -> ILType) -> ILTypeDef -> I // - For nested types, it is simply the type name. The namespace // must be gleaned from the context in which the nested type // lies. -// ------------------------------------------------------------------ +// ------------------------------------------------------------------ -val internal splitNamespace: string -> string list +val splitNamespace: string -> string list -val internal splitNamespaceToArray: string -> string[] +val splitNamespaceToArray: string -> string[] /// The splitILTypeName utility helps you split a string representing /// a type name into the leading namespace elements (if any), the /// names of any nested types and the type name itself. This function /// memoizes and interns the splitting of the namespace portion of -/// the type name. -val internal splitILTypeName: string -> string list * string +/// the type name. +val splitILTypeName: string -> string list * string -val internal splitILTypeNameWithPossibleStaticArguments: string -> string[] * string +val splitILTypeNameWithPossibleStaticArguments: string -> string[] * string -/// splitTypeNameRight is like splitILTypeName except the +/// splitTypeNameRight is like splitILTypeName except the /// namespace is kept as a whole string, rather than split at dots. -val internal splitTypeNameRight: string -> string option * string +val splitTypeNameRight: string -> string option * string -val internal typeNameForGlobalFunctions: string +val typeNameForGlobalFunctions: string -val internal isTypeNameForGlobalFunctions: string -> bool +val isTypeNameForGlobalFunctions: string -> bool // ==================================================================== // PART 2 -// +// // Making metadata. Where no explicit constructor -// is given, you should create the concrete datatype directly, +// is given, you should create the concrete datatype directly, // e.g. by filling in all appropriate record fields. // ==================================================================== *) /// A table of common references to items in primary assembly (System.Runtime or mscorlib). -/// If a particular version of System.Runtime.dll has been loaded then you should -/// reference items from it via an ILGlobals for that specific version built using mkILGlobals. +/// If a particular version of System.Runtime.dll has been loaded then you should +/// reference items from it via an ILGlobals for that specific version built using mkILGlobals. [] -type internal ILGlobals = +type ILGlobals = member primaryAssemblyScopeRef: ILScopeRef member primaryAssemblyRef: ILAssemblyRef member primaryAssemblyName: string @@ -1643,11 +1617,9 @@ type internal ILGlobals = member typ_Char: ILType member typ_TypedReference: ILType - member fsharpCoreAssemblyScopeRef: ILScopeRef - /// Is the given assembly possibly a primary assembly? /// In practice, a primary assembly is an assembly that contains the System.Object type definition - /// and has no referenced assemblies. + /// and has no referenced assemblies. /// However, we must consider assemblies that forward the System.Object type definition /// to be possible primary assemblies. /// Therefore, this will return true if the given assembly is the real primary assembly or an assembly that forwards @@ -1656,229 +1628,237 @@ type internal ILGlobals = member IsPossiblePrimaryAssemblyRef: ILAssemblyRef -> bool /// Build the table of commonly used references given functions to find types in system assemblies -val internal mkILGlobals: primaryScopeRef: ILScopeRef * assembliesThatForwardToPrimaryAssembly: ILAssemblyRef list * fsharpCoreAssemblyScopeRef: ILScopeRef -> ILGlobals +val mkILGlobals: primaryScopeRef: ILScopeRef * assembliesThatForwardToPrimaryAssembly: ILAssemblyRef list -> ILGlobals -val internal PrimaryAssemblyILGlobals: ILGlobals +val EcmaMscorlibILGlobals: ILGlobals +val PrimaryAssemblyILGlobals: ILGlobals /// When writing a binary the fake "toplevel" type definition (called ) -/// must come first. This function puts it first, and creates it in the returned +/// must come first. This function puts it first, and creates it in the returned /// list as an empty typedef if it doesn't already exist. -val internal destTypeDefsWithGlobalFunctionsFirst: ILGlobals -> ILTypeDefs -> ILTypeDef list - -/// Not all custom attribute data can be decoded without binding types. In particular -/// enums must be bound in order to discover the size of the underlying integer. -/// The following assumes enums have size int32. -val internal decodeILAttribData: - ILAttribute -> +val destTypeDefsWithGlobalFunctionsFirst: ILGlobals -> ILTypeDefs -> ILTypeDef list + +/// Not all custom attribute data can be decoded without binding types. In particular +/// enums must be bound in order to discover the size of the underlying integer. +/// The following assumes enums have size int32. +val decodeILAttribData: + ILGlobals -> + ILAttribute -> ILAttribElem list * (* fixed args *) - ILAttributeNamedArg list (* named args: values and flags indicating if they are fields or properties *) + ILAttributeNamedArg list (* named args: values and flags indicating if they are fields or properties *) /// Generate simple references to assemblies and modules. -val internal mkSimpleAssemblyRef: string -> ILAssemblyRef +val mkSimpleAssemblyRef: string -> ILAssemblyRef -val internal mkSimpleModRef: string -> ILModuleRef +val mkSimpleModRef: string -> ILModuleRef -val internal mkILTyvarTy: uint16 -> ILType +val mkILTyvarTy: uint16 -> ILType /// Make type refs. -val internal mkILNestedTyRef: ILScopeRef * string list * string -> ILTypeRef -val internal mkILTyRef: ILScopeRef * string -> ILTypeRef -val internal mkILTyRefInTyRef: ILTypeRef * string -> ILTypeRef +val mkILNestedTyRef: ILScopeRef * string list * string -> ILTypeRef +val mkILTyRef: ILScopeRef * string -> ILTypeRef +val mkILTyRefInTyRef: ILTypeRef * string -> ILTypeRef -type internal ILGenericArgsList = ILType list +type ILGenericArgsList = ILType list /// Make type specs. -val internal mkILNonGenericTySpec: ILTypeRef -> ILTypeSpec -val internal mkILTySpec: ILTypeRef * ILGenericArgsList -> ILTypeSpec +val mkILNonGenericTySpec: ILTypeRef -> ILTypeSpec +val mkILTySpec: ILTypeRef * ILGenericArgsList -> ILTypeSpec /// Make types. -val internal mkILTy: ILBoxity -> ILTypeSpec -> ILType -val internal mkILNamedTy: ILBoxity -> ILTypeRef -> ILGenericArgsList -> ILType -val internal mkILBoxedTy: ILTypeRef -> ILGenericArgsList -> ILType -val internal mkILValueTy: ILTypeRef -> ILGenericArgsList -> ILType -val internal mkILNonGenericBoxedTy: ILTypeRef -> ILType -val internal mkILNonGenericValueTy: ILTypeRef -> ILType -val internal mkILArrTy: ILType * ILArrayShape -> ILType -val internal mkILArr1DTy: ILType -> ILType -val internal isILArrTy: ILType -> bool -val internal destILArrTy: ILType -> ILArrayShape * ILType -val internal mkILBoxedType: ILTypeSpec -> ILType +val mkILTy: ILBoxity -> ILTypeSpec -> ILType +val mkILNamedTy: ILBoxity -> ILTypeRef -> ILGenericArgsList -> ILType +val mkILBoxedTy: ILTypeRef -> ILGenericArgsList -> ILType +val mkILValueTy: ILTypeRef -> ILGenericArgsList -> ILType +val mkILNonGenericBoxedTy: ILTypeRef -> ILType +val mkILNonGenericValueTy: ILTypeRef -> ILType +val mkILArrTy: ILType * ILArrayShape -> ILType +val mkILArr1DTy: ILType -> ILType +val isILArrTy: ILType -> bool +val destILArrTy: ILType -> ILArrayShape * ILType +val mkILBoxedType: ILTypeSpec -> ILType /// Make method references and specs. -val internal mkILMethRef: ILTypeRef * ILCallingConv * string * int * ILType list * ILType -> ILMethodRef -val internal mkILMethSpec: ILMethodRef * ILBoxity * ILGenericArgsList * ILGenericArgsList -> ILMethodSpec -val internal mkILMethSpecForMethRefInTy: ILMethodRef * ILType * ILGenericArgsList -> ILMethodSpec -val internal mkILMethSpecInTy: ILType * ILCallingConv * string * ILType list * ILType * ILGenericArgsList -> ILMethodSpec +val mkILMethRef: ILTypeRef * ILCallingConv * string * int * ILType list * ILType -> ILMethodRef +val mkILMethSpec: ILMethodRef * ILBoxity * ILGenericArgsList * ILGenericArgsList -> ILMethodSpec +val mkILMethSpecForMethRefInTy: ILMethodRef * ILType * ILGenericArgsList -> ILMethodSpec +val mkILMethSpecInTy: ILType * ILCallingConv * string * ILType list * ILType * ILGenericArgsList -> ILMethodSpec /// Construct references to methods on a given type . -val internal mkILNonGenericMethSpecInTy: ILType * ILCallingConv * string * ILType list * ILType -> ILMethodSpec +val mkILNonGenericMethSpecInTy: ILType * ILCallingConv * string * ILType list * ILType -> ILMethodSpec /// Construct references to instance methods. -val internal mkILInstanceMethSpecInTy: ILType * string * ILType list * ILType * ILGenericArgsList -> ILMethodSpec +val mkILInstanceMethSpecInTy: ILType * string * ILType list * ILType * ILGenericArgsList -> ILMethodSpec /// Construct references to instance methods. -val internal mkILNonGenericInstanceMethSpecInTy: ILType * string * ILType list * ILType -> ILMethodSpec +val mkILNonGenericInstanceMethSpecInTy: ILType * string * ILType list * ILType -> ILMethodSpec /// Construct references to static methods. -val internal mkILStaticMethSpecInTy: ILType * string * ILType list * ILType * ILGenericArgsList -> ILMethodSpec +val mkILStaticMethSpecInTy: ILType * string * ILType list * ILType * ILGenericArgsList -> ILMethodSpec /// Construct references to static, non-generic methods. -val internal mkILNonGenericStaticMethSpecInTy: ILType * string * ILType list * ILType -> ILMethodSpec +val mkILNonGenericStaticMethSpecInTy: ILType * string * ILType list * ILType -> ILMethodSpec /// Construct references to constructors. -val internal mkILCtorMethSpecForTy: ILType * ILType list -> ILMethodSpec +val mkILCtorMethSpecForTy: ILType * ILType list -> ILMethodSpec /// Construct references to fields. -val internal mkILFieldRef: ILTypeRef * string * ILType -> ILFieldRef -val internal mkILFieldSpec: ILFieldRef * ILType -> ILFieldSpec -val internal mkILFieldSpecInTy: ILType * string * ILType -> ILFieldSpec +val mkILFieldRef: ILTypeRef * string * ILType -> ILFieldRef +val mkILFieldSpec: ILFieldRef * ILType -> ILFieldSpec +val mkILFieldSpecInTy: ILType * string * ILType -> ILFieldSpec -val internal mkILCallSig: ILCallingConv * ILType list * ILType -> ILCallingSignature +val mkILCallSig: ILCallingConv * ILType list * ILType -> ILCallingSignature /// Make generalized versions of possibly-generic types, e.g. Given the ILTypeDef for List, return the type "List". -val internal mkILFormalBoxedTy: ILTypeRef -> ILGenericParameterDef list -> ILType -val internal mkILFormalNamedTy: ILBoxity -> ILTypeRef -> ILGenericParameterDef list -> ILType +val mkILFormalBoxedTy: ILTypeRef -> ILGenericParameterDef list -> ILType +val mkILFormalNamedTy: ILBoxity -> ILTypeRef -> ILGenericParameterDef list -> ILType -val internal mkILFormalTypars: ILType list -> ILGenericParameterDefs -val internal mkILFormalGenericArgs: int -> ILGenericParameterDefs -> ILGenericArgsList -val internal mkILSimpleTypar: string -> ILGenericParameterDef +val mkILFormalTypars: ILType list -> ILGenericParameterDefs +val mkILFormalGenericArgs: int -> ILGenericParameterDefs -> ILGenericArgsList +val mkILSimpleTypar: string -> ILGenericParameterDef /// Make custom attributes. -val internal mkILCustomAttribMethRef: - ILMethodSpec - * ILAttribElem list (* fixed args: values and implicit types *) - * ILAttributeNamedArg list (* named args: values and flags indicating if they are fields or properties *) +val mkILCustomAttribMethRef: + ILGlobals + -> ILMethodSpec + * ILAttribElem list (* fixed args: values and implicit types *) + * ILAttributeNamedArg list (* named args: values and flags indicating if they are fields or properties *) -> ILAttribute -val internal mkILCustomAttribute: - ILTypeRef * ILType list * - ILAttribElem list (* fixed args: values and implicit types *) * - ILAttributeNamedArg list (* named args: values and flags indicating if they are fields or properties *) +val mkILCustomAttribute: + ILGlobals + -> ILTypeRef * ILType list * + ILAttribElem list (* fixed args: values and implicit types *) * + ILAttributeNamedArg list (* named args: values and flags indicating if they are fields or properties *) -> ILAttribute -val internal getCustomAttrData: ILAttribute -> byte[] +val getCustomAttrData: ILGlobals -> ILAttribute -> byte[] -val internal mkPermissionSet: ILSecurityAction * (ILTypeRef * (string * ILType * ILAttribElem) list) list -> ILSecurityDecl +val mkPermissionSet: ILGlobals -> ILSecurityAction * (ILTypeRef * (string * ILType * ILAttribElem) list) list -> ILSecurityDecl /// Making code. -val internal generateCodeLabel: unit -> ILCodeLabel -val internal formatCodeLabel: ILCodeLabel -> string +val generateCodeLabel: unit -> ILCodeLabel +val formatCodeLabel: ILCodeLabel -> string -/// Make some code that is a straight line sequence of instructions. +/// Make some code that is a straight line sequence of instructions. /// The function will add a "return" if the last instruction is not an exiting instruction. -val internal nonBranchingInstrsToCode: ILInstr list -> ILCode +val nonBranchingInstrsToCode: ILInstr list -> ILCode /// Helpers for codegen: scopes for allocating new temporary variables. -type internal ILLocalsAllocator = +type ILLocalsAllocator = new: preAlloc: int -> ILLocalsAllocator member AllocLocal: ILLocal -> uint16 member Close: unit -> ILLocal list /// Derived functions for making some common patterns of instructions. -val internal mkNormalCall: ILMethodSpec -> ILInstr -val internal mkNormalCallvirt: ILMethodSpec -> ILInstr -val internal mkNormalCallconstraint: ILType * ILMethodSpec -> ILInstr -val internal mkNormalNewobj: ILMethodSpec -> ILInstr -val internal mkCallBaseConstructor: ILType * ILType list -> ILInstr list -val internal mkNormalStfld: ILFieldSpec -> ILInstr -val internal mkNormalStsfld: ILFieldSpec -> ILInstr -val internal mkNormalLdsfld: ILFieldSpec -> ILInstr -val internal mkNormalLdfld: ILFieldSpec -> ILInstr -val internal mkNormalLdflda: ILFieldSpec -> ILInstr -val internal mkNormalLdobj: ILType -> ILInstr -val internal mkNormalStobj: ILType -> ILInstr -val internal mkLdcInt32: int32 -> ILInstr -val internal mkLdarg0: ILInstr -val internal mkLdloc: uint16 -> ILInstr -val internal mkStloc: uint16 -> ILInstr -val internal mkLdarg: uint16 -> ILInstr - -val internal andTailness: ILTailcall -> bool -> ILTailcall +val mkNormalCall: ILMethodSpec -> ILInstr +val mkNormalCallvirt: ILMethodSpec -> ILInstr +val mkNormalCallconstraint: ILType * ILMethodSpec -> ILInstr +val mkNormalNewobj: ILMethodSpec -> ILInstr +val mkCallBaseConstructor: ILType * ILType list -> ILInstr list +val mkNormalStfld: ILFieldSpec -> ILInstr +val mkNormalStsfld: ILFieldSpec -> ILInstr +val mkNormalLdsfld: ILFieldSpec -> ILInstr +val mkNormalLdfld: ILFieldSpec -> ILInstr +val mkNormalLdflda: ILFieldSpec -> ILInstr +val mkNormalLdobj: ILType -> ILInstr +val mkNormalStobj: ILType -> ILInstr +val mkLdcInt32: int32 -> ILInstr +val mkLdarg0: ILInstr +val mkLdloc: uint16 -> ILInstr +val mkStloc: uint16 -> ILInstr +val mkLdarg: uint16 -> ILInstr + +val andTailness: ILTailcall -> bool -> ILTailcall /// Derived functions for making return, parameter and local variable /// objects for use in method definitions. -val internal mkILParam: string option * ILType -> ILParameter -val internal mkILParamAnon: ILType -> ILParameter -val internal mkILParamNamed: string * ILType -> ILParameter +val mkILParam: string option * ILType -> ILParameter +val mkILParamAnon: ILType -> ILParameter +val mkILParamNamed: string * ILType -> ILParameter val mkILReturn: ILType -> ILReturn -val internal mkILLocal: ILType -> (string * int * int) option -> ILLocal +val mkILLocal: ILType -> (string * int * int) option -> ILLocal /// Make a formal generic parameters. -val internal mkILEmptyGenericParams: ILGenericParameterDefs +val mkILEmptyGenericParams: ILGenericParameterDefs /// Make method definitions. -val internal mkILMethodBody: initlocals:bool * ILLocals * int * ILCode * ILSourceMarker option -> ILMethodBody -val internal mkMethodBody: bool * ILLocals * int * ILCode * ILSourceMarker option -> MethodBody -val internal methBodyNotAvailable: Lazy -val internal methBodyAbstract: Lazy -val internal methBodyNative: Lazy - -val internal mkILCtor: ILMemberAccess * ILParameter list * MethodBody -> ILMethodDef -val internal mkILClassCtor: MethodBody -> ILMethodDef -val internal mkILNonGenericEmptyCtor: ILSourceMarker option -> ILType -> ILMethodDef -val internal mkILStaticMethod: ILGenericParameterDefs * string * ILMemberAccess * ILParameter list * ILReturn * MethodBody -> ILMethodDef -val internal mkILNonGenericStaticMethod: string * ILMemberAccess * ILParameter list * ILReturn * MethodBody -> ILMethodDef -val internal mkILGenericVirtualMethod: string * ILMemberAccess * ILGenericParameterDefs * ILParameter list * ILReturn * MethodBody -> ILMethodDef -val internal mkILGenericNonVirtualMethod: string * ILMemberAccess * ILGenericParameterDefs * ILParameter list * ILReturn * MethodBody -> ILMethodDef -val internal mkILNonGenericVirtualMethod: string * ILMemberAccess * ILParameter list * ILReturn * MethodBody -> ILMethodDef -val internal mkILNonGenericInstanceMethod: string * ILMemberAccess * ILParameter list * ILReturn * MethodBody -> ILMethodDef +val mkILMethodBody: initlocals:bool * ILLocals * int * ILCode * ILSourceMarker option -> ILMethodBody +val mkMethodBody: bool * ILLocals * int * ILCode * ILSourceMarker option -> MethodBody +val methBodyNotAvailable: ILLazyMethodBody +val methBodyAbstract: ILLazyMethodBody +val methBodyNative: ILLazyMethodBody + +val mkILCtor: ILMemberAccess * ILParameter list * MethodBody -> ILMethodDef +val mkILClassCtor: MethodBody -> ILMethodDef +val mkILNonGenericEmptyCtor: ILSourceMarker option -> ILType -> ILMethodDef +val mkILStaticMethod: ILGenericParameterDefs * string * ILMemberAccess * ILParameter list * ILReturn * MethodBody -> ILMethodDef +val mkILNonGenericStaticMethod: string * ILMemberAccess * ILParameter list * ILReturn * MethodBody -> ILMethodDef +val mkILGenericVirtualMethod: string * ILMemberAccess * ILGenericParameterDefs * ILParameter list * ILReturn * MethodBody -> ILMethodDef +val mkILGenericNonVirtualMethod: string * ILMemberAccess * ILGenericParameterDefs * ILParameter list * ILReturn * MethodBody -> ILMethodDef +val mkILNonGenericVirtualMethod: string * ILMemberAccess * ILParameter list * ILReturn * MethodBody -> ILMethodDef +val mkILNonGenericInstanceMethod: string * ILMemberAccess * ILParameter list * ILReturn * MethodBody -> ILMethodDef + /// Make field definitions. -val internal mkILInstanceField: string * ILType * ILFieldInit option * ILMemberAccess -> ILFieldDef -val internal mkILStaticField: string * ILType * ILFieldInit option * byte[] option * ILMemberAccess -> ILFieldDef -val internal mkILLiteralField: string * ILType * ILFieldInit * byte[] option * ILMemberAccess -> ILFieldDef +val mkILInstanceField: string * ILType * ILFieldInit option * ILMemberAccess -> ILFieldDef +val mkILStaticField: string * ILType * ILFieldInit option * byte[] option * ILMemberAccess -> ILFieldDef +val mkILLiteralField: string * ILType * ILFieldInit * byte[] option * ILMemberAccess -> ILFieldDef /// Make a type definition. -val internal mkILGenericClass: string * ILTypeDefAccess * ILGenericParameterDefs * ILType * ILType list * ILMethodDefs * ILFieldDefs * ILTypeDefs * ILPropertyDefs * ILEventDefs * ILAttributes * ILTypeInit -> ILTypeDef -val internal mkILSimpleClass: ILGlobals -> string * ILTypeDefAccess * ILMethodDefs * ILFieldDefs * ILTypeDefs * ILPropertyDefs * ILEventDefs * ILAttributes * ILTypeInit -> ILTypeDef -val internal mkILTypeDefForGlobalFunctions: ILGlobals -> ILMethodDefs * ILFieldDefs -> ILTypeDef +val mkILGenericClass: string * ILTypeDefAccess * ILGenericParameterDefs * ILType * ILType list * ILMethodDefs * ILFieldDefs * ILTypeDefs * ILPropertyDefs * ILEventDefs * ILAttributes * ILTypeInit -> ILTypeDef +val mkILSimpleClass: ILGlobals -> string * ILTypeDefAccess * ILMethodDefs * ILFieldDefs * ILTypeDefs * ILPropertyDefs * ILEventDefs * ILAttributes * ILTypeInit -> ILTypeDef +val mkILTypeDefForGlobalFunctions: ILGlobals -> ILMethodDefs * ILFieldDefs -> ILTypeDef /// Make a type definition for a value type used to point to raw data. -/// These are useful when generating array initialization code -/// according to the +/// These are useful when generating array initialization code +/// according to the /// ldtoken field valuetype ''/'$$struct0x6000127-1' ''::'$$method0x6000127-1' /// call void System.Runtime.CompilerServices.RuntimeHelpers::InitializeArray(class System.Array,valuetype System.RuntimeFieldHandle) /// idiom. -val internal mkRawDataValueTypeDef: ILType -> string * size:int32 * pack:uint16 -> ILTypeDef +val mkRawDataValueTypeDef: ILType -> string * size:int32 * pack:uint16 -> ILTypeDef /// Injecting code into existing code blocks. A branch will /// be added from the given instructions to the (unique) entry of /// the code, and the first instruction will be the new entry /// of the method. The instructions should be non-branching. -val internal prependInstrsToCode: ILInstr list -> ILCode -> ILCode -val internal prependInstrsToMethod: ILInstr list -> ILMethodDef -> ILMethodDef +val prependInstrsToCode: ILInstr list -> ILCode -> ILCode +val prependInstrsToMethod: ILInstr list -> ILMethodDef -> ILMethodDef /// Injecting initialization code into a class. /// Add some code to the end of the .cctor for a type. Create a .cctor /// if one doesn't exist already. -val internal prependInstrsToClassCtor: ILInstr list -> ILSourceMarker option -> ILTypeDef -> ILTypeDef +val prependInstrsToClassCtor: ILInstr list -> ILSourceMarker option -> ILTypeDef -> ILTypeDef /// Derived functions for making some simple constructors -val internal mkILStorageCtor: ILSourceMarker option * ILInstr list * ILType * (string * ILType) list * ILMemberAccess -> ILMethodDef -val internal mkILSimpleStorageCtor: ILSourceMarker option * ILTypeSpec option * ILType * ILParameter list * (string * ILType) list * ILMemberAccess -> ILMethodDef -val internal mkILSimpleStorageCtorWithParamNames: ILSourceMarker option * ILTypeSpec option * ILType * ILParameter list * (string * string * ILType) list * ILMemberAccess -> ILMethodDef +val mkILStorageCtor: ILSourceMarker option * ILInstr list * ILType * (string * ILType) list * ILMemberAccess -> ILMethodDef +val mkILSimpleStorageCtor: ILSourceMarker option * ILTypeSpec option * ILType * ILParameter list * (string * ILType) list * ILMemberAccess -> ILMethodDef +val mkILSimpleStorageCtorWithParamNames: ILSourceMarker option * ILTypeSpec option * ILType * ILParameter list * (string * string * ILType) list * ILMemberAccess -> ILMethodDef -val internal mkILDelegateMethods: ILMemberAccess -> ILGlobals -> ILType * ILType -> ILParameter list * ILReturn -> ILMethodDef list +val mkILDelegateMethods: ILMemberAccess -> ILGlobals -> ILType * ILType -> ILParameter list * ILReturn -> ILMethodDef list -/// Given a delegate type definition which lies in a particular scope, +/// Given a delegate type definition which lies in a particular scope, /// make a reference to its constructor. -val internal mkCtorMethSpecForDelegate: ILGlobals -> ILType * bool -> ILMethodSpec +val mkCtorMethSpecForDelegate: ILGlobals -> ILType * bool -> ILMethodSpec /// The toplevel "class" for a module or assembly. -val internal mkILTypeForGlobalFunctions: ILScopeRef -> ILType +val mkILTypeForGlobalFunctions: ILScopeRef -> ILType /// Making tables of custom attributes, etc. val mkILCustomAttrs: ILAttribute list -> ILAttributes val mkILCustomAttrsFromArray: ILAttribute[] -> ILAttributes val storeILCustomAttrs: ILAttributes -> ILAttributesStored -val internal mkILCustomAttrsReader: (int32 -> ILAttribute[]) -> ILAttributesStored +val mkILCustomAttrsReader: (int32 -> ILAttribute[]) -> ILAttributesStored val emptyILCustomAttrs: ILAttributes val mkILSecurityDecls: ILSecurityDecl list -> ILSecurityDecls val emptyILSecurityDecls: ILSecurityDecls val storeILSecurityDecls: ILSecurityDecls -> ILSecurityDeclsStored -val internal mkILSecurityDeclsReader: (int32 -> ILSecurityDecl[]) -> ILSecurityDeclsStored +val mkILSecurityDeclsReader: (int32 -> ILSecurityDecl[]) -> ILSecurityDeclsStored + +val mkMethBodyAux: MethodBody -> ILLazyMethodBody +val mkMethBodyLazyAux: Lazy -> ILLazyMethodBody val mkILEvents: ILEventDef list -> ILEventDefs val mkILEventsLazy: Lazy -> ILEventDefs @@ -1905,161 +1885,157 @@ val mkILTypeDefs: ILTypeDef list -> ILTypeDefs val mkILTypeDefsFromArray: ILTypeDef[] -> ILTypeDefs val emptyILTypeDefs: ILTypeDefs -/// Create table of types which is loaded/computed on-demand, and whose individual -/// elements are also loaded/computed on-demand. Any call to tdefs.AsList will +/// Create table of types which is loaded/computed on-demand, and whose individual +/// elements are also loaded/computed on-demand. Any call to tdefs.AsList will /// result in the laziness being forced. Operations can examine the /// custom attributes and name of each type in order to decide whether /// to proceed with examining the other details of the type. -/// -/// Note that individual type definitions may contain further delays -/// in their method, field and other tables. +/// +/// Note that individual type definitions may contain further delays +/// in their method, field and other tables. val mkILTypeDefsComputed: (unit -> ILPreTypeDef[]) -> ILTypeDefs -val internal addILTypeDef: ILTypeDef -> ILTypeDefs -> ILTypeDefs +val addILTypeDef: ILTypeDef -> ILTypeDefs -> ILTypeDefs -val internal mkTypeForwarder: ILScopeRef -> string -> ILNestedExportedTypes -> ILAttributes -> ILTypeDefAccess -> ILExportedTypeOrForwarder +val mkTypeForwarder: ILScopeRef -> string -> ILNestedExportedTypes -> ILAttributes -> ILTypeDefAccess -> ILExportedTypeOrForwarder val mkILNestedExportedTypes: ILNestedExportedType list -> ILNestedExportedTypes -val internal mkILNestedExportedTypesLazy: Lazy -> ILNestedExportedTypes +val mkILNestedExportedTypesLazy: Lazy -> ILNestedExportedTypes val mkILExportedTypes: ILExportedTypeOrForwarder list -> ILExportedTypesAndForwarders -val internal mkILExportedTypesLazy: Lazy -> ILExportedTypesAndForwarders +val mkILExportedTypesLazy: Lazy -> ILExportedTypesAndForwarders -val emptyILResources: ILResources -val internal mkILResources: ILResource list -> ILResources +val mkILResources: ILResource list -> ILResources /// Making modules. val mkILSimpleModule: assemblyName:string -> moduleName:string -> dll:bool -> subsystemVersion: (int * int) -> useHighEntropyVA: bool -> ILTypeDefs -> int32 option -> string option -> int -> ILExportedTypesAndForwarders -> string -> ILModuleDef /// Generate references to existing type definitions, method definitions /// etc. Useful for generating references, e.g. to a class we're processing -/// Also used to reference type definitions that we've generated. [ILScopeRef] +/// Also used to reference type definitions that we've generated. [ILScopeRef] /// is normally ILScopeRef.Local, unless we've generated the ILTypeDef in -/// an auxiliary module or are generating multiple assemblies at +/// an auxiliary module or are generating multiple assemblies at /// once. -val internal mkRefForNestedILTypeDef: ILScopeRef -> ILTypeDef list * ILTypeDef -> ILTypeRef -val internal mkRefForILMethod : ILScopeRef -> ILTypeDef list * ILTypeDef -> ILMethodDef -> ILMethodRef -val internal mkRefForILField : ILScopeRef -> ILTypeDef list * ILTypeDef -> ILFieldDef -> ILFieldRef +val mkRefForNestedILTypeDef: ILScopeRef -> ILTypeDef list * ILTypeDef -> ILTypeRef +val mkRefForILMethod : ILScopeRef -> ILTypeDef list * ILTypeDef -> ILMethodDef -> ILMethodRef +val mkRefForILField : ILScopeRef -> ILTypeDef list * ILTypeDef -> ILFieldDef -> ILFieldRef -val internal mkRefToILMethod: ILTypeRef * ILMethodDef -> ILMethodRef -val internal mkRefToILField: ILTypeRef * ILFieldDef -> ILFieldRef +val mkRefToILMethod: ILTypeRef * ILMethodDef -> ILMethodRef +val mkRefToILField: ILTypeRef * ILFieldDef -> ILFieldRef -val internal mkRefToILAssembly: ILAssemblyManifest -> ILAssemblyRef -val internal mkRefToILModule: ILModuleDef -> ILModuleRef +val mkRefToILAssembly: ILAssemblyManifest -> ILAssemblyRef +val mkRefToILModule: ILModuleDef -> ILModuleRef val NoMetadataIdx: int32 -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // Rescoping. // -// Given an object O1 referenced from where1 (e.g. O1 binds to some -// result R when referenced from where1), and given that SR2 resolves to where1 from where2, +// Given an object O1 referenced from where1 (e.g. O1 binds to some +// result R when referenced from where1), and given that SR2 resolves to where1 from where2, // produce a new O2 for use from where2 (e.g. O2 binds to R from where2) // -// So, ILScopeRef tells you how to reference the original scope from +// So, ILScopeRef tells you how to reference the original scope from // the new scope. e.g. if ILScopeRef is: // [ILScopeRef.Local] then the object is returned unchanged -// [ILScopeRef.Module m] then an object is returned -// where all ILScopeRef.Local references +// [ILScopeRef.Module m] then an object is returned +// where all ILScopeRef.Local references // become ILScopeRef.Module m -// [ILScopeRef.Assembly m] then an object is returned -// where all ILScopeRef.Local and ILScopeRef.Module references +// [ILScopeRef.Assembly m] then an object is returned +// where all ILScopeRef.Local and ILScopeRef.Module references // become ILScopeRef.Assembly m -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -/// Rescoping. The first argument tells the function how to reference the original scope from -/// the new scope. -val internal rescopeILScopeRef: ILScopeRef -> ILScopeRef -> ILScopeRef +/// Rescoping. The first argument tells the function how to reference the original scope from +/// the new scope. +val rescopeILScopeRef: ILScopeRef -> ILScopeRef -> ILScopeRef -/// Rescoping. The first argument tells the function how to reference the original scope from -/// the new scope. -val internal rescopeILTypeSpec: ILScopeRef -> ILTypeSpec -> ILTypeSpec +/// Rescoping. The first argument tells the function how to reference the original scope from +/// the new scope. +val rescopeILTypeSpec: ILScopeRef -> ILTypeSpec -> ILTypeSpec -/// Rescoping. The first argument tells the function how to reference the original scope from -/// the new scope. -val internal rescopeILType: ILScopeRef -> ILType -> ILType +/// Rescoping. The first argument tells the function how to reference the original scope from +/// the new scope. +val rescopeILType: ILScopeRef -> ILType -> ILType -/// Rescoping. The first argument tells the function how to reference the original scope from -/// the new scope. -val internal rescopeILMethodRef: ILScopeRef -> ILMethodRef -> ILMethodRef +/// Rescoping. The first argument tells the function how to reference the original scope from +/// the new scope. +val rescopeILMethodRef: ILScopeRef -> ILMethodRef -> ILMethodRef -/// Rescoping. The first argument tells the function how to reference the original scope from -/// the new scope. -val internal rescopeILFieldRef: ILScopeRef -> ILFieldRef -> ILFieldRef +/// Rescoping. The first argument tells the function how to reference the original scope from +/// the new scope. +val rescopeILFieldRef: ILScopeRef -> ILFieldRef -> ILFieldRef /// Unscoping. Clears every scope information, use for looking up IL method references only. -val internal unscopeILType: ILType -> ILType - -val internal buildILCode: string -> lab2pc: Dictionary -> instrs:ILInstr[] -> ILExceptionSpec list -> ILLocalDebugInfo list -> ILCode +val unscopeILType: ILType -> ILType -/// Instantiate type variables that occur within types and other items. -val internal instILTypeAux: int -> ILGenericArgs -> ILType -> ILType +val buildILCode: string -> lab2pc: Dictionary -> instrs:ILInstr[] -> ILExceptionSpec list -> ILLocalDebugInfo list -> ILCode -/// Instantiate type variables that occur within types and other items. -val internal instILType: ILGenericArgs -> ILType -> ILType +/// Instantiate type variables that occur within types and other items. +val instILTypeAux: int -> ILGenericArgs -> ILType -> ILType -/// This is a 'vendor neutral' way of referencing mscorlib. -val internal ecmaPublicKey: PublicKey +/// Instantiate type variables that occur within types and other items. +val instILType: ILGenericArgs -> ILType -> ILType -/// Strips ILType.Modified from the ILType. -val internal stripILModifiedFromTy: ILType -> ILType +/// This is a 'vendor neutral' way of referencing mscorlib. +val ecmaPublicKey: PublicKey /// Discriminating different important built-in types. -val internal isILObjectTy: ILGlobals -> ILType -> bool -val internal isILStringTy: ILGlobals -> ILType -> bool -val internal isILSByteTy: ILGlobals -> ILType -> bool -val internal isILByteTy: ILGlobals -> ILType -> bool -val internal isILInt16Ty: ILGlobals -> ILType -> bool -val internal isILUInt16Ty: ILGlobals -> ILType -> bool -val internal isILInt32Ty: ILGlobals -> ILType -> bool -val internal isILUInt32Ty: ILGlobals -> ILType -> bool -val internal isILInt64Ty: ILGlobals -> ILType -> bool -val internal isILUInt64Ty: ILGlobals -> ILType -> bool -val internal isILIntPtrTy: ILGlobals -> ILType -> bool -val internal isILUIntPtrTy: ILGlobals -> ILType -> bool -val internal isILBoolTy: ILGlobals -> ILType -> bool -val internal isILCharTy: ILGlobals -> ILType -> bool -val internal isILTypedReferenceTy: ILGlobals -> ILType -> bool -val internal isILDoubleTy: ILGlobals -> ILType -> bool -val internal isILSingleTy: ILGlobals -> ILType -> bool - -val internal sha1HashInt64 : byte[] -> int64 +val isILObjectTy: ILGlobals -> ILType -> bool +val isILStringTy: ILGlobals -> ILType -> bool +val isILSByteTy: ILGlobals -> ILType -> bool +val isILByteTy: ILGlobals -> ILType -> bool +val isILInt16Ty: ILGlobals -> ILType -> bool +val isILUInt16Ty: ILGlobals -> ILType -> bool +val isILInt32Ty: ILGlobals -> ILType -> bool +val isILUInt32Ty: ILGlobals -> ILType -> bool +val isILInt64Ty: ILGlobals -> ILType -> bool +val isILUInt64Ty: ILGlobals -> ILType -> bool +val isILIntPtrTy: ILGlobals -> ILType -> bool +val isILUIntPtrTy: ILGlobals -> ILType -> bool +val isILBoolTy: ILGlobals -> ILType -> bool +val isILCharTy: ILGlobals -> ILType -> bool +val isILTypedReferenceTy: ILGlobals -> ILType -> bool +val isILDoubleTy: ILGlobals -> ILType -> bool +val isILSingleTy: ILGlobals -> ILType -> bool + +val sha1HashInt64 : byte[] -> int64 /// Get a public key token from a public key. -val internal sha1HashBytes: byte[] -> byte[] (* SHA1 hash *) +val sha1HashBytes: byte[] -> byte[] (* SHA1 hash *) /// Get a version number from a CLR version string, e.g. 1.0.3705.0 -val internal parseILVersion: string -> ILVersionInfo -val internal formatILVersion: ILVersionInfo -> string -val internal compareILVersions: ILVersionInfo -> ILVersionInfo -> int +val parseILVersion: string -> ILVersionInfo +val formatILVersion: ILVersionInfo -> string +val compareILVersions: ILVersionInfo -> ILVersionInfo -> int /// Decompose a type definition according to its kind. -type internal ILEnumInfo = - { enumValues: (string * ILFieldInit) list +type ILEnumInfo = + { enumValues: (string * ILFieldInit) list enumType: ILType } -val internal getTyOfILEnumInfo: ILEnumInfo -> ILType +val getTyOfILEnumInfo: ILEnumInfo -> ILType -val internal computeILEnumInfo: string * ILFieldDefs -> ILEnumInfo +val computeILEnumInfo: string * ILFieldDefs -> ILEnumInfo /// A utility type provided for completeness [] -type internal ILEventRef = +type ILEventRef = static member Create: ILTypeRef * string -> ILEventRef member DeclaringTypeRef: ILTypeRef member Name: string /// A utility type provided for completeness [] -type internal ILPropertyRef = +type ILPropertyRef = static member Create: ILTypeRef * string -> ILPropertyRef member DeclaringTypeRef: ILTypeRef member Name: string interface System.IComparable -type internal ILReferences = - { AssemblyReferences: ILAssemblyRef list +type ILReferences = + { AssemblyReferences: ILAssemblyRef list ModuleReferences: ILModuleRef list } /// Find the full set of assemblies referenced by a module. -val internal computeILRefs: ILGlobals -> ILModuleDef -> ILReferences -val internal emptyILRefs: ILReferences +val computeILRefs: ILGlobals -> ILModuleDef -> ILReferences +val emptyILRefs: ILReferences diff --git a/src/fsharp/absil/ilascii.fs b/src/fsharp/absil/ilascii.fs index 2a6448ee7f4..3bad59046ec 100644 --- a/src/fsharp/absil/ilascii.fs +++ b/src/fsharp/absil/ilascii.fs @@ -1,9 +1,10 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.AbstractIL.AsciiConstants +module internal FSharp.Compiler.AbstractIL.Internal.AsciiConstants open Internal.Utilities.Collections -open Internal.Utilities.Library + +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.IL /// Table of parsing and pretty printing data for instructions. diff --git a/src/fsharp/absil/ilascii.fsi b/src/fsharp/absil/ilascii.fsi index f787dc11c1e..45b4bf47e08 100644 --- a/src/fsharp/absil/ilascii.fsi +++ b/src/fsharp/absil/ilascii.fsi @@ -1,8 +1,13 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// Various constants and utilities used when parsing the ILASM format for IL -module internal FSharp.Compiler.AbstractIL.AsciiConstants +module internal FSharp.Compiler.AbstractIL.Internal.AsciiConstants +open Internal.Utilities + +open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Extensions.ILX.Types open FSharp.Compiler.AbstractIL.IL // -------------------------------------------------------------------- diff --git a/src/fsharp/absil/ilbinary.fs b/src/fsharp/absil/ilbinary.fs index 18f15bc62ac..eea2f06bfda 100644 --- a/src/fsharp/absil/ilbinary.fs +++ b/src/fsharp/absil/ilbinary.fs @@ -1,9 +1,9 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.AbstractIL.BinaryConstants +module internal FSharp.Compiler.AbstractIL.Internal.BinaryConstants open FSharp.Compiler.AbstractIL.IL -open Internal.Utilities.Library +open FSharp.Compiler.AbstractIL.Internal.Library [] type TableName(idx: int) = diff --git a/src/fsharp/absil/ilbinary.fsi b/src/fsharp/absil/ilbinary.fsi index 30295cebdbd..200ee8b0274 100644 --- a/src/fsharp/absil/ilbinary.fsi +++ b/src/fsharp/absil/ilbinary.fsi @@ -1,9 +1,13 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// Compiler use only. Code and constants shared between binary reader/writer. -module internal FSharp.Compiler.AbstractIL.BinaryConstants +module internal FSharp.Compiler.AbstractIL.Internal.BinaryConstants +open Internal.Utilities +open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal + [] type TableName = diff --git a/src/fsharp/absil/illex.fsl b/src/fsharp/absil/illex.fsl index aad77eb806f..1516e02df4b 100644 --- a/src/fsharp/absil/illex.fsl +++ b/src/fsharp/absil/illex.fsl @@ -2,16 +2,18 @@ { -module internal FSharp.Compiler.AbstractIL.AsciiLexer +module internal FSharp.Compiler.AbstractIL.Internal.AsciiLexer +open Internal.Utilities open Internal.Utilities.Collections open Internal.Utilities.Text open Internal.Utilities.Text.Lexing -open Internal.Utilities.Library - open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.AsciiParser -open FSharp.Compiler.AbstractIL.AsciiConstants +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library + +open FSharp.Compiler.AbstractIL.Internal.AsciiParser +open FSharp.Compiler.AbstractIL.Internal.AsciiConstants let lexeme (lexbuf : LexBuffer) = LexBuffer.LexemeString lexbuf diff --git a/src/fsharp/absil/illib.fs b/src/fsharp/absil/illib.fs index 904d5418592..24c637c32c6 100644 --- a/src/fsharp/absil/illib.fs +++ b/src/fsharp/absil/illib.fs @@ -1,90 +1,66 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace Internal.Utilities.Library +module public FSharp.Compiler.AbstractIL.Internal.Library +#nowarn "1178" // The struct, record or union type 'internal_instr_extension' is not structurally comparable because the type + open System open System.Collections.Generic open System.Collections.Concurrent open System.Diagnostics open System.IO +open System.Reflection open System.Threading open System.Runtime.CompilerServices -[] -module internal PervasiveAutoOpens = - /// Logical shift right treating int32 as unsigned integer. - /// Code that uses this should probably be adjusted to use unsigned integer types. - let (>>>&) (x: int32) (n: int32) = int32 (uint32 x >>> n) +/// Logical shift right treating int32 as unsigned integer. +/// Code that uses this should probably be adjusted to use unsigned integer types. +let (>>>&) (x: int32) (n: int32) = int32 (uint32 x >>> n) - let notlazy v = Lazy<_>.CreateFromValue v +let notlazy v = Lazy<_>.CreateFromValue v - let inline isNil l = List.isEmpty l +let inline isNil l = List.isEmpty l - /// Returns true if the list has less than 2 elements. Otherwise false. - let inline isNilOrSingleton l = - match l with - | [] - | [_] -> true - | _ -> false +/// Returns true if the list has less than 2 elements. Otherwise false. +let inline isNilOrSingleton l = + match l with + | [] + | [_] -> true + | _ -> false - /// Returns true if the list contains exactly 1 element. Otherwise false. - let inline isSingleton l = - match l with - | [_] -> true - | _ -> false +/// Returns true if the list contains exactly 1 element. Otherwise false. +let inline isSingleton l = + match l with + | [_] -> true + | _ -> false + +let inline isNonNull x = not (isNull x) + +let inline nonNull msg x = if isNull x then failwith ("null: " + msg) else x + +let inline (===) x y = LanguagePrimitives.PhysicalEquality x y - let inline isNonNull x = not (isNull x) - - let inline nonNull msg x = if isNull x then failwith ("null: " + msg) else x - - let inline (===) x y = LanguagePrimitives.PhysicalEquality x y - - /// Per the docs the threshold for the Large Object Heap is 85000 bytes: https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/large-object-heap#how-an-object-ends-up-on-the-large-object-heap-and-how-gc-handles-them - /// We set the limit to be 80k to account for larger pointer sizes for when F# is running 64-bit. - let LOH_SIZE_THRESHOLD_BYTES = 80_000 - - let runningOnMono = -#if ENABLE_MONO_SUPPORT - // Officially supported way to detect if we are running on Mono. - // See http://www.mono-project.com/FAQ:_Technical - // "How can I detect if am running in Mono?" section - try - System.Type.GetType ("Mono.Runtime") <> null - with _ -> - // Must be robust in the case that someone else has installed a handler into System.AppDomain.OnTypeResolveEvent - // that is not reliable. - // This is related to bug 5506--the issue is actually a bug in VSTypeResolutionService.EnsurePopulated which is - // called by OnTypeResolveEvent. The function throws a NullReferenceException. I'm working with that team to get - // their issue fixed but we need to be robust here anyway. - false -#else - false -#endif - - type String with - member inline x.StartsWithOrdinal value = - x.StartsWith(value, StringComparison.Ordinal) - - member inline x.EndsWithOrdinal value = - x.EndsWith(value, StringComparison.Ordinal) - - /// Get an initialization hole - let getHole r = match !r with None -> failwith "getHole" | Some x -> x - - let reportTime = - let mutable tFirst =None - let mutable tPrev = None - fun showTimes descr -> - if showTimes then - let t = Process.GetCurrentProcess().UserProcessorTime.TotalSeconds - let prev = match tPrev with None -> 0.0 | Some t -> t - let first = match tFirst with None -> (tFirst <- Some t; t) | Some t -> t - printf "ilwrite: TIME %10.3f (total) %10.3f (delta) - %s\n" (t - first) (t - prev) descr - tPrev <- Some t - - let foldOn p f z x = f z (p x) - - let notFound() = raise (KeyNotFoundException()) +/// Per the docs the threshold for the Large Object Heap is 85000 bytes: https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/large-object-heap#how-an-object-ends-up-on-the-large-object-heap-and-how-gc-handles-them +/// We set the limit to be 80k to account for larger pointer sizes for when F# is running 64-bit. +let LOH_SIZE_THRESHOLD_BYTES = 80_000 + +//--------------------------------------------------------------------- +// Library: ReportTime +//--------------------------------------------------------------------- +let reportTime = + let mutable tFirst =None + let mutable tPrev = None + fun showTimes descr -> + if showTimes then + let t = Process.GetCurrentProcess().UserProcessorTime.TotalSeconds + let prev = match tPrev with None -> 0.0 | Some t -> t + let first = match tFirst with None -> (tFirst <- Some t; t) | Some t -> t + printf "ilwrite: TIME %10.3f (total) %10.3f (delta) - %s\n" (t - first) (t - prev) descr + tPrev <- Some t + +//------------------------------------------------------------------------- +// Library: projections +//------------------------------------------------------------------------ [] /// An efficient lazy for inline storage in a class type. Results in fewer thunks. @@ -105,12 +81,16 @@ type InlineDelayInit<'T when 'T : not struct> = // Library: projections //------------------------------------------------------------------------ +let foldOn p f z x = f z (p x) + +let notFound() = raise (KeyNotFoundException()) + module Order = let orderBy (p : 'T -> 'U) = - { new IComparer<'T> with member _.Compare(x, xx) = compare (p x) (p xx) } + { new IComparer<'T> with member __.Compare(x, xx) = compare (p x) (p xx) } let orderOn p (pxOrder: IComparer<'U>) = - { new IComparer<'T> with member _.Compare(x, xx) = pxOrder.Compare (p x, p xx) } + { new IComparer<'T> with member __.Compare(x, xx) = pxOrder.Compare (p x, p xx) } let toFunction (pxOrder: IComparer<'U>) x y = pxOrder.Compare(x, y) @@ -139,7 +119,7 @@ module Array = let order (eltOrder: IComparer<'T>) = { new IComparer> with - member _.Compare(xs, ys) = + member __.Compare(xs, ys) = let c = compare xs.Length ys.Length if c <> 0 then c else let rec loop i = @@ -370,7 +350,7 @@ module List = let order (eltOrder: IComparer<'T>) = { new IComparer> with - member _.Compare(xs, ys) = + member __.Compare(xs, ys) = let rec loop xs ys = match xs, ys with | [], [] -> 0 @@ -500,6 +480,13 @@ module ValueOptionInternal = let inline bind f x = match x with ValueSome x -> f x | ValueNone -> ValueNone +type String with + member inline x.StartsWithOrdinal value = + x.StartsWith(value, StringComparison.Ordinal) + + member inline x.EndsWithOrdinal value = + x.EndsWith(value, StringComparison.Ordinal) + module String = let make (n: int) (c: char) : string = new String(c, n) @@ -606,12 +593,6 @@ module String = module Dictionary = let inline newWithSize (size: int) = Dictionary<_, _>(size, HashIdentity.Structural) - let inline ofList (xs: ('Key * 'Value) list) = - let t = Dictionary<_, _>(List.length xs, HashIdentity.Structural) - for (k,v) in xs do - t.Add(k,v) - t - [] type DictionaryExtensions() = @@ -643,49 +624,45 @@ type ExecutionToken = interface end /// /// Like other execution tokens this should be passed via argument passing and not captured/stored beyond /// the lifetime of stack-based calls. This is not checked, it is a discipline within the compiler code. -[] type CompilationThreadToken() = interface ExecutionToken -/// A base type for various types of tokens that must be passed when a lock is taken. -/// Each different static lock should declare a new subtype of this type. -type LockToken = inherit ExecutionToken - -/// Represents a token that indicates execution on any of several potential user threads calling the F# compiler services. -[] -type AnyCallerThreadToken() = interface ExecutionToken +/// Represents a place where we are stating that execution on the compilation thread is required. The +/// reason why will be documented in a comment in the code at the callsite. +let RequireCompilationThread (_ctok: CompilationThreadToken) = () -[] -module internal LockAutoOpens = - /// Represents a place where we are stating that execution on the compilation thread is required. The - /// reason why will be documented in a comment in the code at the callsite. - let RequireCompilationThread (_ctok: CompilationThreadToken) = () - - /// Represents a place in the compiler codebase where we are passed a CompilationThreadToken unnecessarily. - /// This represents code that may potentially not need to be executed on the compilation thread. - let DoesNotRequireCompilerThreadTokenAndCouldPossiblyBeMadeConcurrent (_ctok: CompilationThreadToken) = () +/// Represents a place in the compiler codebase where we are passed a CompilationThreadToken unnecessarily. +/// This represents code that may potentially not need to be executed on the compilation thread. +let DoesNotRequireCompilerThreadTokenAndCouldPossiblyBeMadeConcurrent (_ctok: CompilationThreadToken) = () - /// Represents a place in the compiler codebase where we assume we are executing on a compilation thread - let AssumeCompilationThreadWithoutEvidence () = Unchecked.defaultof +/// Represents a place in the compiler codebase where we assume we are executing on a compilation thread +let AssumeCompilationThreadWithoutEvidence () = Unchecked.defaultof - let AnyCallerThread = Unchecked.defaultof +/// Represents a token that indicates execution on any of several potential user threads calling the F# compiler services. +type AnyCallerThreadToken() = interface ExecutionToken +let AnyCallerThread = Unchecked.defaultof - let AssumeLockWithoutEvidence<'LockTokenType when 'LockTokenType :> LockToken> () = Unchecked.defaultof<'LockTokenType> +/// A base type for various types of tokens that must be passed when a lock is taken. +/// Each different static lock should declare a new subtype of this type. +type LockToken = inherit ExecutionToken +let AssumeLockWithoutEvidence<'LockTokenType when 'LockTokenType :> LockToken> () = Unchecked.defaultof<'LockTokenType> /// Encapsulates a lock associated with a particular token-type representing the acquisition of that lock. type Lock<'LockTokenType when 'LockTokenType :> LockToken>() = let lockObj = obj() - member _.AcquireLock f = lock lockObj (fun () -> f (AssumeLockWithoutEvidence<'LockTokenType>())) + member __.AcquireLock f = lock lockObj (fun () -> f (AssumeLockWithoutEvidence<'LockTokenType>())) //--------------------------------------------------- // Misc +/// Get an initialization hole +let getHole r = match !r with None -> failwith "getHole" | Some x -> x + module Map = let tryFindMulti k map = match Map.tryFind k map with Some res -> res | None -> [] -[] type ResultOrException<'TResult> = - | Result of result: 'TResult - | Exception of ``exception``: Exception + | Result of 'TResult + | Exception of Exception module ResultOrException = @@ -709,10 +686,10 @@ module ResultOrException = | Result x -> success x | Exception _err -> f() -[] +[] type ValueOrCancelled<'TResult> = - | Value of result: 'TResult - | Cancelled of ``exception``: OperationCanceledException + | Value of 'TResult + | Cancelled of OperationCanceledException /// Represents a cancellable computation with explicit representation of a cancelled result. /// @@ -731,21 +708,21 @@ module Cancellable = oper ct /// Bind the result of a cancellable computation - let inline bind f comp1 = + let bind f comp1 = Cancellable (fun ct -> match run ct comp1 with | ValueOrCancelled.Value v1 -> run ct (f v1) | ValueOrCancelled.Cancelled err1 -> ValueOrCancelled.Cancelled err1) /// Map the result of a cancellable computation - let inline map f oper = + let map f oper = Cancellable (fun ct -> match run ct oper with | ValueOrCancelled.Value res -> ValueOrCancelled.Value (f res) | ValueOrCancelled.Cancelled err -> ValueOrCancelled.Cancelled err) /// Return a simple value as the result of a cancellable computation - let inline ret x = Cancellable (fun _ -> ValueOrCancelled.Value x) + let ret x = Cancellable (fun _ -> ValueOrCancelled.Value x) /// Fold a cancellable computation along a sequence of inputs let fold f acc seq = @@ -757,11 +734,22 @@ module Cancellable = | res -> res)) /// Iterate a cancellable computation over a collection - let inline each f seq = - fold (fun acc x -> f x |> map (fun y -> (y :: acc))) [] seq |> map List.rev + let each f seq = + Cancellable (fun ct -> + (ValueOrCancelled.Value [], seq) + ||> Seq.fold (fun acc x -> + match acc with + | ValueOrCancelled.Value acc -> + match run ct (f x) with + | ValueOrCancelled.Value x2 -> ValueOrCancelled.Value (x2 :: acc) + | ValueOrCancelled.Cancelled err1 -> ValueOrCancelled.Cancelled err1 + | canc -> canc) + |> function + | ValueOrCancelled.Value acc -> ValueOrCancelled.Value (List.rev acc) + | canc -> canc) /// Delay a cancellable computation - let inline delay (f: unit -> Cancellable<'T>) = Cancellable (fun ct -> let (Cancellable g) = f() in g ct) + let delay (f: unit -> Cancellable<'T>) = Cancellable (fun ct -> let (Cancellable g) = f() in g ct) /// Run the computation in a mode where it may not be cancelled. The computation never results in a /// ValueOrCancelled.Cancelled. @@ -771,16 +759,6 @@ module Cancellable = | ValueOrCancelled.Cancelled _ -> failwith "unexpected cancellation" | ValueOrCancelled.Value r -> r - let toAsync c = - async { - let! ct = Async.CancellationToken - let res = run ct c - return! Async.FromContinuations (fun (cont, _econt, ccont) -> - match res with - | ValueOrCancelled.Value v -> cont v - | ValueOrCancelled.Cancelled ce -> ccont ce) - } - /// Bind the cancellation token associated with the computation let token () = Cancellable (fun ct -> ValueOrCancelled.Value ct) @@ -788,54 +766,197 @@ module Cancellable = let canceled() = Cancellable (fun ct -> ValueOrCancelled.Cancelled (OperationCanceledException ct)) /// Catch exceptions in a computation - let inline catch e = - let (Cancellable f) = e + let private catch (Cancellable e) = Cancellable (fun ct -> try - match f ct with + match e ct with | ValueOrCancelled.Value r -> ValueOrCancelled.Value (Choice1Of2 r) | ValueOrCancelled.Cancelled e -> ValueOrCancelled.Cancelled e with err -> ValueOrCancelled.Value (Choice2Of2 err)) /// Implement try/finally for a cancellable computation - let inline tryFinally e compensation = + let tryFinally e compensation = catch e |> bind (fun res -> compensation() match res with Choice1Of2 r -> ret r | Choice2Of2 err -> raise err) /// Implement try/with for a cancellable computation - let inline tryWith e handler = + let tryWith e handler = catch e |> bind (fun res -> match res with Choice1Of2 r -> ret r | Choice2Of2 err -> handler err) + // Run the cancellable computation within an Async computation. This isn't actually used in the codebase, but left + // here in case we need it in the future + // + // let toAsync e = + // async { + // let! ct = Async.CancellationToken + // return! + // Async.FromContinuations(fun (cont, econt, ccont) -> + // // Run the computation synchronously using the given cancellation token + // let res = try Choice1Of2 (run ct e) with err -> Choice2Of2 err + // match res with + // | Choice1Of2 (ValueOrCancelled.Value v) -> cont v + // | Choice1Of2 (ValueOrCancelled.Cancelled err) -> ccont err + // | Choice2Of2 err -> econt err) + // } + type CancellableBuilder() = - member inline _.BindReturn(e, k) = Cancellable.map k e + member x.Bind(e, k) = Cancellable.bind k e - member inline _.Bind(e, k) = Cancellable.bind k e + member x.Return v = Cancellable.ret v - member inline _.Return v = Cancellable.ret v + member x.ReturnFrom v = v - member inline _.ReturnFrom (v: Cancellable<'T>) = v + member x.Combine(e1, e2) = e1 |> Cancellable.bind (fun () -> e2) - member inline _.Combine(e1, e2) = e1 |> Cancellable.bind (fun () -> e2) + member x.For(es, f) = es |> Cancellable.each f - member inline _.For(es, f) = es |> Cancellable.each f + member x.TryWith(e, handler) = Cancellable.tryWith e handler - member inline _.TryWith(e, handler) = Cancellable.tryWith e handler + member x.Using(resource, e) = Cancellable.tryFinally (e resource) (fun () -> (resource :> IDisposable).Dispose()) - member inline _.Using(resource, e) = Cancellable.tryFinally (e resource) (fun () -> (resource :> IDisposable).Dispose()) + member x.TryFinally(e, compensation) = Cancellable.tryFinally e compensation - member inline _.TryFinally(e, compensation) = Cancellable.tryFinally e compensation + member x.Delay f = Cancellable.delay f - member inline _.Delay f = Cancellable.delay f + member x.Zero() = Cancellable.ret () - member inline _.Zero() = Cancellable.ret () +let cancellable = CancellableBuilder() -[] -module CancellableAutoOpens = - let cancellable = CancellableBuilder() +/// Computations that can cooperatively yield by returning a continuation +/// +/// - Any yield of a NotYetDone should typically be "abandonable" without adverse consequences. No resource release +/// will be called when the computation is abandoned. +/// +/// - Computations suspend via a NotYetDone may use local state (mutables), where these are +/// captured by the NotYetDone closure. Computations do not need to be restartable. +/// +/// - The key thing is that you can take an Eventually value and run it with +/// Eventually.repeatedlyProgressUntilDoneOrTimeShareOverOrCanceled +/// +/// - Cancellation results in a suspended computation rather than complete abandonment +type Eventually<'T> = + | Done of 'T + | NotYetDone of (CompilationThreadToken -> Eventually<'T>) + +module Eventually = + + let rec box e = + match e with + | Done x -> Done (Operators.box x) + | NotYetDone work -> NotYetDone (fun ctok -> box (work ctok)) + + let rec forceWhile ctok check e = + match e with + | Done x -> Some x + | NotYetDone work -> + if not(check()) + then None + else forceWhile ctok check (work ctok) + + let force ctok e = Option.get (forceWhile ctok (fun () -> true) e) + + /// Keep running the computation bit by bit until a time limit is reached. + /// The runner gets called each time the computation is restarted + /// + /// If cancellation happens, the operation is left half-complete, ready to resume. + let repeatedlyProgressUntilDoneOrTimeShareOverOrCanceled timeShareInMilliseconds (ct: CancellationToken) runner e = + let sw = new Stopwatch() + let rec runTimeShare ctok e = + runner ctok (fun ctok -> + sw.Reset() + sw.Start() + let rec loop ctok ev2 = + match ev2 with + | Done _ -> ev2 + | NotYetDone work -> + if ct.IsCancellationRequested || sw.ElapsedMilliseconds > timeShareInMilliseconds then + sw.Stop() + NotYetDone(fun ctok -> runTimeShare ctok ev2) + else + loop ctok (work ctok) + loop ctok e) + NotYetDone (fun ctok -> runTimeShare ctok e) + + /// Keep running the asynchronous computation bit by bit. The runner gets called each time the computation is restarted. + /// Can be cancelled as an Async in the normal way. + let forceAsync (runner: (CompilationThreadToken -> Eventually<'T>) -> Async>) (e: Eventually<'T>) : Async<'T option> = + let rec loop (e: Eventually<'T>) = + async { + match e with + | Done x -> return Some x + | NotYetDone work -> + let! r = runner work + return! loop r + } + loop e + + let rec bind k e = + match e with + | Done x -> k x + | NotYetDone work -> NotYetDone (fun ctok -> bind k (work ctok)) + + let fold f acc seq = + (Done acc, seq) ||> Seq.fold (fun acc x -> acc |> bind (fun acc -> f acc x)) + + let rec catch e = + match e with + | Done x -> Done(Result x) + | NotYetDone work -> + NotYetDone (fun ctok -> + let res = try Result(work ctok) with | e -> Exception e + match res with + | Result cont -> catch cont + | Exception e -> Done(Exception e)) + + let delay (f: unit -> Eventually<'T>) = NotYetDone (fun _ctok -> f()) + + let tryFinally e compensation = + catch e + |> bind (fun res -> + compensation() + match res with + | Result v -> Eventually.Done v + | Exception e -> raise e) + + let tryWith e handler = + catch e + |> bind (function Result v -> Done v | Exception e -> handler e) + + // All eventually computations carry a CompilationThreadToken + let token = + NotYetDone (fun ctok -> Done ctok) + +type EventuallyBuilder() = + + member x.Bind(e, k) = Eventually.bind k e + + member x.Return v = Eventually.Done v + + member x.ReturnFrom v = v + + member x.Combine(e1, e2) = e1 |> Eventually.bind (fun () -> e2) + + member x.TryWith(e, handler) = Eventually.tryWith e handler + + member x.TryFinally(e, compensation) = Eventually.tryFinally e compensation + + member x.Delay f = Eventually.delay f + + member x.Zero() = Eventually.Done () + +let eventually = new EventuallyBuilder() + +(* +let _ = eventually { return 1 } +let _ = eventually { let x = 1 in return 1 } +let _ = eventually { let! x = eventually { return 1 } in return 1 } +let _ = eventually { try return (failwith "") with _ -> return 1 } +let _ = eventually { use x = null in return 1 } +*) /// Generates unique stamps type UniqueStampGenerator<'T when 'T : equality>() = @@ -882,7 +1003,7 @@ type LazyWithContextFailure(exn: exn) = static let undefined = new LazyWithContextFailure(UndefinedException) - member _.Exception = exn + member x.Exception = exn static member Undefined = undefined @@ -967,9 +1088,9 @@ module IPartialEqualityComparer = let On f (c: IPartialEqualityComparer<_>) = { new IPartialEqualityComparer<_> with - member _.InEqualityRelation x = c.InEqualityRelation (f x) - member _.Equals(x, y) = c.Equals(f x, f y) - member _.GetHashCode x = c.GetHashCode(f x) } + member __.InEqualityRelation x = c.InEqualityRelation (f x) + member __.Equals(x, y) = c.Equals(f x, f y) + member __.GetHashCode x = c.GetHashCode(f x) } // Wrapper type for use by the 'partialDistinctBy' function [] @@ -979,9 +1100,9 @@ module IPartialEqualityComparer = let partialDistinctBy (per: IPartialEqualityComparer<'T>) seq = let wper = { new IPartialEqualityComparer> with - member _.InEqualityRelation (Wrap x) = per.InEqualityRelation x - member _.Equals(Wrap x, Wrap y) = per.Equals(x, y) - member _.GetHashCode (Wrap x) = per.GetHashCode x } + member __.InEqualityRelation (Wrap x) = per.InEqualityRelation x + member __.Equals(Wrap x, Wrap y) = per.Equals(x, y) + member __.GetHashCode (Wrap x) = per.GetHashCode x } // Wrap a Wrap _ around all keys in case the key type is itself a type using null as a representation let dict = Dictionary, obj>(wper) seq |> List.filter (fun v -> @@ -1110,19 +1231,17 @@ module MultiMap = type LayeredMap<'Key, 'Value when 'Key : comparison> = Map<'Key, 'Value> -[] -module MapAutoOpens = - type Map<'Key, 'Value when 'Key : comparison> with +type Map<'Key, 'Value when 'Key : comparison> with - static member Empty : Map<'Key, 'Value> = Map.empty + static member Empty : Map<'Key, 'Value> = Map.empty - member x.Values = [ for (KeyValue(_, v)) in x -> v ] + member x.Values = [ for (KeyValue(_, v)) in x -> v ] - member x.AddAndMarkAsCollapsible (kvs: _[]) = (x, kvs) ||> Array.fold (fun x (KeyValue(k, v)) -> x.Add(k, v)) + member x.AddAndMarkAsCollapsible (kvs: _[]) = (x, kvs) ||> Array.fold (fun x (KeyValue(k, v)) -> x.Add(k, v)) - member x.LinearTryModifyThenLaterFlatten (key, f: 'Value option -> 'Value) = x.Add (key, f (x.TryFind key)) + member x.LinearTryModifyThenLaterFlatten (key, f: 'Value option -> 'Value) = x.Add (key, f (x.TryFind key)) - member x.MarkAsCollapsible () = x + member x.MarkAsCollapsible () = x /// Immutable map collection, with explicit flattening to a backing dictionary [] @@ -1146,3 +1265,159 @@ type LayeredMultiMap<'Key, 'Value when 'Key : equality and 'Key : comparison>(co static member Empty : LayeredMultiMap<'Key, 'Value> = LayeredMultiMap LayeredMap.Empty +[] +module Shim = + + type IFileSystem = + + /// A shim over File.ReadAllBytes + abstract ReadAllBytesShim: fileName: string -> byte[] + + /// A shim over FileStream with FileMode.Open, FileAccess.Read, FileShare.ReadWrite + abstract FileStreamReadShim: fileName: string -> Stream + + /// A shim over FileStream with FileMode.Create, FileAccess.Write, FileShare.Read + abstract FileStreamCreateShim: fileName: string -> Stream + + /// A shim over FileStream with FileMode.Open, FileAccess.Write, FileShare.Read + abstract FileStreamWriteExistingShim: fileName: string -> Stream + + /// Take in a filename with an absolute path, and return the same filename + /// but canonicalized with respect to extra path separators (e.g. C:\\\\foo.txt) + /// and '..' portions + abstract GetFullPathShim: fileName: string -> string + + /// A shim over Path.IsPathRooted + abstract IsPathRootedShim: path: string -> bool + + /// A shim over Path.IsInvalidPath + abstract IsInvalidPathShim: filename: string -> bool + + /// A shim over Path.GetTempPath + abstract GetTempPathShim : unit -> string + + /// Utc time of the last modification + abstract GetLastWriteTimeShim: fileName: string -> DateTime + + /// A shim over File.Exists + abstract SafeExists: fileName: string -> bool + + /// A shim over File.Delete + abstract FileDelete: fileName: string -> unit + + /// Used to load type providers and located assemblies in F# Interactive + abstract AssemblyLoadFrom: fileName: string -> Assembly + + /// Used to load a dependency for F# Interactive and in an unused corner-case of type provider loading + abstract AssemblyLoad: assemblyName: AssemblyName -> Assembly + + /// Used to determine if a file will not be subject to deletion during the lifetime of a typical client process. + abstract IsStableFileHeuristic: fileName: string -> bool + + + type DefaultFileSystem() = + interface IFileSystem with + + member __.AssemblyLoadFrom(fileName: string) = + Assembly.UnsafeLoadFrom fileName + + member __.AssemblyLoad(assemblyName: AssemblyName) = + Assembly.Load assemblyName + + member __.ReadAllBytesShim (fileName: string) = File.ReadAllBytes fileName + + member __.FileStreamReadShim (fileName: string) = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) :> Stream + + member __.FileStreamCreateShim (fileName: string) = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.Read, 0x1000, false) :> Stream + + member __.FileStreamWriteExistingShim (fileName: string) = new FileStream(fileName, FileMode.Open, FileAccess.Write, FileShare.Read, 0x1000, false) :> Stream + + member __.GetFullPathShim (fileName: string) = System.IO.Path.GetFullPath fileName + + member __.IsPathRootedShim (path: string) = Path.IsPathRooted path + + member __.IsInvalidPathShim(path: string) = + let isInvalidPath(p: string) = + String.IsNullOrEmpty p || p.IndexOfAny(Path.GetInvalidPathChars()) <> -1 + + let isInvalidFilename(p: string) = + String.IsNullOrEmpty p || p.IndexOfAny(Path.GetInvalidFileNameChars()) <> -1 + + let isInvalidDirectory(d: string) = + d=null || d.IndexOfAny(Path.GetInvalidPathChars()) <> -1 + + isInvalidPath path || + let directory = Path.GetDirectoryName path + let filename = Path.GetFileName path + isInvalidDirectory directory || isInvalidFilename filename + + member __.GetTempPathShim() = Path.GetTempPath() + + member __.GetLastWriteTimeShim (fileName: string) = File.GetLastWriteTimeUtc fileName + + member __.SafeExists (fileName: string) = File.Exists fileName + + member __.FileDelete (fileName: string) = File.Delete fileName + + member __.IsStableFileHeuristic (fileName: string) = + let directory = Path.GetDirectoryName fileName + directory.Contains("Reference Assemblies/") || + directory.Contains("Reference Assemblies\\") || + directory.Contains("packages/") || + directory.Contains("packages\\") || + directory.Contains("lib/mono/") + + let mutable FileSystem = DefaultFileSystem() :> IFileSystem + + // The choice of 60 retries times 50 ms is not arbitrary. The NTFS FILETIME structure + // uses 2 second resolution for LastWriteTime. We retry long enough to surpass this threshold + // plus 1 second. Once past the threshold the incremental builder will be able to retry asynchronously based + // on plain old timestamp checking. + // + // The sleep time of 50ms is chosen so that we can respond to the user more quickly for Intellisense operations. + // + // This is not run on the UI thread for VS but it is on a thread that must be stopped before Intellisense + // can return any result except for pending. + let private retryDelayMilliseconds = 50 + let private numRetries = 60 + + let private getReader (filename, codePage: int option, retryLocked: bool) = + // Retry multiple times since other processes may be writing to this file. + let rec getSource retryNumber = + try + // Use the .NET functionality to auto-detect the unicode encoding + let stream = FileSystem.FileStreamReadShim(filename) + match codePage with + | None -> new StreamReader(stream,true) + | Some n -> new StreamReader(stream,System.Text.Encoding.GetEncoding(n)) + with + // We can get here if the file is locked--like when VS is saving a file--we don't have direct + // access to the HRESULT to see that this is EONOACCESS. + | :? System.IO.IOException as err when retryLocked && err.GetType() = typeof -> + // This second check is to make sure the exception is exactly IOException and none of these for example: + // DirectoryNotFoundException + // EndOfStreamException + // FileNotFoundException + // FileLoadException + // PathTooLongException + if retryNumber < numRetries then + System.Threading.Thread.Sleep (retryDelayMilliseconds) + getSource (retryNumber + 1) + else + reraise() + getSource 0 + + type File with + + static member ReadBinaryChunk (fileName, start, len) = + use stream = FileSystem.FileStreamReadShim fileName + stream.Seek(int64 start, SeekOrigin.Begin) |> ignore + let buffer = Array.zeroCreate len + let mutable n = 0 + while n < len do + n <- n + stream.Read(buffer, n, len-n) + buffer + + static member OpenReaderAndRetry (filename, codepage, retryLocked) = + getReader (filename, codepage, retryLocked) + diff --git a/src/fsharp/absil/illib.fsi b/src/fsharp/absil/illib.fsi index 2a66a699857..b2f49e0c250 100644 --- a/src/fsharp/absil/illib.fsi +++ b/src/fsharp/absil/illib.fsi @@ -1,65 +1,52 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace Internal.Utilities.Library +module public FSharp.Compiler.AbstractIL.Internal.Library open System +open System.IO open System.Threading open System.Collections.Generic -open System.Diagnostics open System.Runtime.CompilerServices -[] -module internal PervasiveAutoOpens = - /// Logical shift right treating int32 as unsigned integer. - /// Code that uses this should probably be adjusted to use unsigned integer types. - val ( >>>& ): x:int32 -> n:int32 -> int32 - - val notlazy: v:'a -> Lazy<'a> - - val inline isNil: l:'a list -> bool - - /// Returns true if the list has less than 2 elements. Otherwise false. - val inline isNilOrSingleton: l:'a list -> bool - - /// Returns true if the list contains exactly 1 element. Otherwise false. - val inline isSingleton: l:'a list -> bool +/// Logical shift right treating int32 as unsigned integer. +/// Code that uses this should probably be adjusted to use unsigned integer types. +val ( >>>& ): x:int32 -> n:int32 -> int32 - val inline isNonNull: x:'a -> bool when 'a: null +val notlazy: v:'a -> Lazy<'a> - val inline nonNull: msg:string -> x:'a -> 'a when 'a: null +val inline isNil: l:'a list -> bool - val inline ( === ): x:'a -> y:'a -> bool when 'a: not struct +/// Returns true if the list has less than 2 elements. Otherwise false. +val inline isNilOrSingleton: l:'a list -> bool - /// Per the docs the threshold for the Large Object Heap is 85000 bytes: https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/large-object-heap#how-an-object-ends-up-on-the-large-object-heap-and-how-gc-handles-them - /// We set the limit to be 80k to account for larger pointer sizes for when F# is running 64-bit. - val LOH_SIZE_THRESHOLD_BYTES: int +/// Returns true if the list contains exactly 1 element. Otherwise false. +val inline isSingleton: l:'a list -> bool - val reportTime: (bool -> string -> unit) +val inline isNonNull: x:'a -> bool when 'a: null - val runningOnMono: bool +val inline nonNull: msg:string -> x:'a -> 'a when 'a: null - /// Get an initialization hole - val getHole: r:'a option ref -> 'a +val inline ( === ): x:'a -> y:'a -> bool when 'a: not struct - type String with +/// Per the docs the threshold for the Large Object Heap is 85000 bytes: https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/large-object-heap#how-an-object-ends-up-on-the-large-object-heap-and-how-gc-handles-them +/// We set the limit to be 80k to account for larger pointer sizes for when F# is running 64-bit. +val LOH_SIZE_THRESHOLD_BYTES: int - member inline StartsWithOrdinal: value:string -> bool - - member inline EndsWithOrdinal: value:string -> bool - - val foldOn: p:('a -> 'b) -> f:('c -> 'b -> 'd) -> z:'c -> x:'a -> 'd - - val notFound: unit -> 'a +val reportTime: (bool -> string -> unit) [] -type internal InlineDelayInit<'T when 'T: not struct> = +type InlineDelayInit<'T when 'T: not struct> = new: f:(unit -> 'T) -> InlineDelayInit<'T> val mutable store: 'T val mutable func: Func<'T> member Value: 'T -module internal Order = +val foldOn: p:('a -> 'b) -> f:('c -> 'b -> 'd) -> z:'c -> x:'a -> 'd + +val notFound: unit -> 'a + +module Order = val orderBy: p:('T -> 'U) -> IComparer<'T> when 'U: comparison @@ -67,7 +54,7 @@ module internal Order = val toFunction: pxOrder:IComparer<'U> -> x:'U -> y:'U -> int -module internal Array = +module Array = val mapq: f:('a -> 'a) -> inp:'a [] -> 'a [] when 'a: not struct @@ -107,13 +94,13 @@ module internal Array = /// Returns true if one array has trailing elements equal to another's. val endsWith: suffix:'a [] -> whole:'a [] -> bool when 'a: equality -module internal Option = +module Option = val mapFold: f:('a -> 'b -> 'c * 'a) -> s:'a -> opt:'b option -> 'c option * 'a val attempt: f:(unit -> 'T) -> 'T option -module internal List = +module List = val sortWithOrder : c:IComparer<'T> -> elements:'T list -> 'T list @@ -188,7 +175,7 @@ module internal List = val internal allEqual: xs:'T list -> bool when 'T: equality -module internal ResizeArray = +module ResizeArray = /// Split a ResizeArray into an array of smaller chunks. /// This requires `items/chunkSize` Array copies of length `chunkSize` if `items/chunkSize % 0 = 0`, @@ -200,14 +187,19 @@ module internal ResizeArray = /// probability of smaller collections. Stop-the-world is still possible, just less likely. val mapToSmallArrayChunks : f:('t -> 'a) -> inp:ResizeArray<'t> -> 'a [] [] -module internal ValueOptionInternal = +module ValueOptionInternal = val inline ofOption: x:'a option -> 'a voption val inline bind: f:('a -> 'b voption) -> x:'a voption -> 'b voption +type String with -module internal String = + member inline StartsWithOrdinal: value:string -> bool + + member inline EndsWithOrdinal: value:string -> bool + +module String = val make: n:int -> c:char -> string @@ -251,12 +243,11 @@ module internal String = val getLines: str:string -> string [] -module internal Dictionary = +module Dictionary = val inline newWithSize : size:int -> Dictionary<'a,'b> when 'a: equality - val inline ofList : xs: ('Key * 'Value) list -> Dictionary<'Key,'Value> when 'Key: equality [] -type internal DictionaryExtensions = +type DictionaryExtensions = [] static member inline BagAdd: dic:Dictionary<'key,'value list> * key:'key * value:'value -> unit @@ -264,11 +255,11 @@ type internal DictionaryExtensions = [] static member inline BagExistsValueForKey: dic:Dictionary<'key,'value list> * key:'key * f:('value -> bool) -> bool -module internal Lazy = +module Lazy = val force: x:Lazy<'T> -> 'T /// Represents a permission active at this point in execution -type internal ExecutionToken = interface end +type ExecutionToken = interface end /// Represents a token that indicates execution on the compilation thread, i.e. /// - we have full access to the (partially mutable) TAST and TcImports data structures @@ -277,105 +268,98 @@ type internal ExecutionToken = interface end /// /// Like other execution tokens this should be passed via argument passing and not captured/stored beyond /// the lifetime of stack-based calls. This is not checked, it is a discipline within the compiler code. -[] -type internal CompilationThreadToken = +type CompilationThreadToken = interface ExecutionToken new: unit -> CompilationThreadToken +/// Represents a place where we are stating that execution on the compilation thread is required. The +/// reason why will be documented in a comment in the code at the callsite. +val RequireCompilationThread: _ctok:CompilationThreadToken -> unit + +/// Represents a place in the compiler codebase where we are passed a CompilationThreadToken unnecessarily. +/// This represents code that may potentially not need to be executed on the compilation thread. +val DoesNotRequireCompilerThreadTokenAndCouldPossiblyBeMadeConcurrent : _ctok:CompilationThreadToken -> unit + +/// Represents a place in the compiler codebase where we assume we are executing on a compilation thread +val AssumeCompilationThreadWithoutEvidence: unit -> CompilationThreadToken + /// Represents a token that indicates execution on any of several potential user threads calling the F# compiler services. -[] -type internal AnyCallerThreadToken = +type AnyCallerThreadToken = interface ExecutionToken new: unit -> AnyCallerThreadToken +val AnyCallerThread: AnyCallerThreadToken + /// A base type for various types of tokens that must be passed when a lock is taken. /// Each different static lock should declare a new subtype of this type. -type internal LockToken = +type LockToken = interface inherit ExecutionToken end +val AssumeLockWithoutEvidence: unit -> #LockToken + /// Encapsulates a lock associated with a particular token-type representing the acquisition of that lock. -type internal Lock<'LockTokenType when 'LockTokenType :> LockToken> = +type Lock<'LockTokenType when 'LockTokenType :> LockToken> = new: unit -> Lock<'LockTokenType> member AcquireLock: f:('LockTokenType -> 'a) -> 'a -[] -module internal LockAutoOpens = - /// Represents a place where we are stating that execution on the compilation thread is required. The - /// reason why will be documented in a comment in the code at the callsite. - val RequireCompilationThread: _ctok:CompilationThreadToken -> unit +/// Get an initialization hole +val getHole: r:'a option ref -> 'a - /// Represents a place in the compiler codebase where we are passed a CompilationThreadToken unnecessarily. - /// This represents code that may potentially not need to be executed on the compilation thread. - val DoesNotRequireCompilerThreadTokenAndCouldPossiblyBeMadeConcurrent : _ctok:CompilationThreadToken -> unit - - /// Represents a place in the compiler codebase where we assume we are executing on a compilation thread - val AssumeCompilationThreadWithoutEvidence: unit -> CompilationThreadToken - - val AnyCallerThread: AnyCallerThreadToken - - val AssumeLockWithoutEvidence: unit -> #LockToken - -module internal Map = +module Map = val tryFindMulti : k:'a -> map:Map<'a,'b list> -> 'b list when 'a: comparison -[] -type internal ResultOrException<'TResult> = - | Result of result: 'TResult - | Exception of ``exception``: Exception - -module internal ResultOrException = +type ResultOrException<'TResult> = + | Result of 'TResult + | Exception of Exception +module ResultOrException = val success: a:'a -> ResultOrException<'a> - val raze: b:exn -> ResultOrException<'a> - val ( |?> ) : res:ResultOrException<'a> -> f:('a -> 'b) -> ResultOrException<'b> - val ForceRaise: res:ResultOrException<'a> -> 'a - val otherwise : f:(unit -> ResultOrException<'a>) -> x:ResultOrException<'a> -> ResultOrException<'a> -[] -type internal ValueOrCancelled<'TResult> = - | Value of result: 'TResult - | Cancelled of ``exception``: OperationCanceledException +[] +type ValueOrCancelled<'TResult> = + | Value of 'TResult + | Cancelled of OperationCanceledException /// Represents a synchronous cancellable computation with explicit representation of a cancelled result. /// /// A cancellable computation is passed may be cancelled via a CancellationToken, which is propagated implicitly. /// If cancellation occurs, it is propagated as data rather than by raising an OperationCanceledException. [] -type internal Cancellable<'TResult> = +type Cancellable<'TResult> = | Cancellable of (CancellationToken -> ValueOrCancelled<'TResult>) -module internal Cancellable = +module Cancellable = /// Run a cancellable computation using the given cancellation token val run : ct:CancellationToken -> Cancellable<'a> -> ValueOrCancelled<'a> /// Bind the result of a cancellable computation - val inline bind : f:('a -> Cancellable<'b>) -> comp1:Cancellable<'a> -> Cancellable<'b> + val bind : f:('a -> Cancellable<'b>) -> comp1:Cancellable<'a> -> Cancellable<'b> /// Map the result of a cancellable computation - val inline map: f:('a -> 'b) -> oper:Cancellable<'a> -> Cancellable<'b> + val map: f:('a -> 'b) -> oper:Cancellable<'a> -> Cancellable<'b> /// Return a simple value as the result of a cancellable computation - val inline ret: x:'a -> Cancellable<'a> + val ret: x:'a -> Cancellable<'a> /// Fold a cancellable computation along a sequence of inputs val fold : f:('a -> 'b -> Cancellable<'a>) -> acc:'a -> seq:seq<'b> -> Cancellable<'a> /// Iterate a cancellable computation over a collection - val inline each : f:('a -> Cancellable<'b>) -> seq:seq<'a> -> Cancellable<'b list> + val each : f:('a -> Cancellable<'b>) -> seq:seq<'a> -> Cancellable<'b list> /// Delay a cancellable computation - val inline delay: f:(unit -> Cancellable<'T>) -> Cancellable<'T> + val delay: f:(unit -> Cancellable<'T>) -> Cancellable<'T> /// Run the computation in a mode where it may not be cancelled. The computation never results in a /// ValueOrCancelled.Cancelled. @@ -388,76 +372,113 @@ module internal Cancellable = val canceled: unit -> Cancellable<'a> /// Implement try/finally for a cancellable computation - val inline catch : e:Cancellable<'a> -> Cancellable> - - /// Implement try/finally for a cancellable computation - val inline tryFinally : e:Cancellable<'a> -> compensation:(unit -> unit) -> Cancellable<'a> + val tryFinally : e:Cancellable<'a> -> compensation:(unit -> unit) -> Cancellable<'a> /// Implement try/with for a cancellable computation - val inline tryWith : e:Cancellable<'a> -> handler:(exn -> Cancellable<'a>) -> Cancellable<'a> - - val toAsync: Cancellable<'a> -> Async<'a> + val tryWith : e:Cancellable<'a> -> handler:(exn -> Cancellable<'a>) -> Cancellable<'a> -type internal CancellableBuilder = +type CancellableBuilder = new: unit -> CancellableBuilder + member Bind: e:Cancellable<'k> * k:('k -> Cancellable<'l>) -> Cancellable<'l> + member Combine: e1:Cancellable * e2:Cancellable<'h> -> Cancellable<'h> + member Delay: f:(unit -> Cancellable<'a>) -> Cancellable<'a> + member For: es:seq<'f> * f:('f -> Cancellable<'g>) -> Cancellable<'g list> + member Return: v:'j -> Cancellable<'j> + member ReturnFrom: v:'i -> 'i + member TryFinally: e:Cancellable<'b> * compensation:(unit -> unit) -> Cancellable<'b> + member TryWith: e:Cancellable<'e> * handler:(exn -> Cancellable<'e>) -> Cancellable<'e> + member Using: resource:'c * e:('c -> Cancellable<'d>) -> Cancellable<'d> when 'c :> System.IDisposable + member Zero: unit -> Cancellable + +val cancellable: CancellableBuilder - member inline BindReturn: e:Cancellable<'T> * k:('T -> 'U) -> Cancellable<'U> - - member inline Bind: e:Cancellable<'T> * k:('T -> Cancellable<'U>) -> Cancellable<'U> +/// Computations that can cooperatively yield by returning a continuation +/// +/// - Any yield of a NotYetDone should typically be "abandonable" without adverse consequences. No resource release +/// will be called when the computation is abandoned. +/// +/// - Computations suspend via a NotYetDone may use local state (mutables), where these are +/// captured by the NotYetDone closure. Computations do not need to be restartable. +/// +/// - The key thing is that you can take an Eventually value and run it with +/// Eventually.repeatedlyProgressUntilDoneOrTimeShareOverOrCanceled +/// +/// - Cancellation results in a suspended computation rather than complete abandonment +type Eventually<'T> = + | Done of 'T + | NotYetDone of (CompilationThreadToken -> Eventually<'T>) + +module Eventually = + val box: e:Eventually<'a> -> Eventually + val forceWhile : ctok:CompilationThreadToken -> check:(unit -> bool) -> e:Eventually<'a> -> 'a option + val force: ctok:CompilationThreadToken -> e:Eventually<'a> -> 'a + +/// Keep running the computation bit by bit until a time limit is reached. +/// The runner gets called each time the computation is restarted +/// +/// If cancellation happens, the operation is left half-complete, ready to resume. + val repeatedlyProgressUntilDoneOrTimeShareOverOrCanceled : + timeShareInMilliseconds:int64 -> + ct:CancellationToken -> + runner:(CompilationThreadToken -> (#CompilationThreadToken -> Eventually<'b>) -> Eventually<'b>) -> + e:Eventually<'b> + -> Eventually<'b> - member inline Combine: e1:Cancellable * e2:Cancellable<'T> -> Cancellable<'T> + /// Keep running the asynchronous computation bit by bit. The runner gets called each time the computation is restarted. + /// Can be cancelled as an Async in the normal way. + val forceAsync : runner:((CompilationThreadToken -> Eventually<'T>) -> Async>) -> e:Eventually<'T> -> Async<'T option> - member inline Delay: f:(unit -> Cancellable<'T>) -> Cancellable<'T> + val bind: k:('a -> Eventually<'b>) -> e:Eventually<'a> -> Eventually<'b> - member inline For: es:seq<'T> * f:('T -> Cancellable<'U>) -> Cancellable<'U list> + val fold : f:('a -> 'b -> Eventually<'a>) -> acc:'a -> seq:seq<'b> -> Eventually<'a> - member inline Return: v:'T -> Cancellable<'T> + val catch: e:Eventually<'a> -> Eventually> - member inline ReturnFrom: v:Cancellable<'T> -> Cancellable<'T> + val delay: f:(unit -> Eventually<'T>) -> Eventually<'T> - member inline TryFinally: e:Cancellable<'T> * compensation:(unit -> unit) -> Cancellable<'T> + val tryFinally : e:Eventually<'a> -> compensation:(unit -> unit) -> Eventually<'a> - member inline TryWith: e:Cancellable<'T> * handler:(exn -> Cancellable<'T>) -> Cancellable<'T> + val tryWith : e:Eventually<'a> -> handler:(System.Exception -> Eventually<'a>) -> Eventually<'a> - member inline Using: resource:'c * e:('c -> Cancellable<'T>) -> Cancellable<'T> when 'c :> System.IDisposable + // All eventually computations carry a CompilationThreadToken + val token: Eventually - member inline Zero: unit -> Cancellable +[] +type EventuallyBuilder = + member Bind: e:Eventually<'g> * k:('g -> Eventually<'h>) -> Eventually<'h> + member Combine: e1:Eventually * e2:Eventually<'d> -> Eventually<'d> + member Delay: f:(unit -> Eventually<'a>) -> Eventually<'a> + member Return: v:'f -> Eventually<'f> + member ReturnFrom: v:'e -> 'e + member TryFinally: e:Eventually<'b> * compensation:(unit -> unit) -> Eventually<'b> + member TryWith: e:Eventually<'c> * handler:(System.Exception -> Eventually<'c>) -> Eventually<'c> + member Zero: unit -> Eventually -[] -module internal CancellableAutoOpens = - val cancellable: CancellableBuilder +val eventually: EventuallyBuilder /// Generates unique stamps -type internal UniqueStampGenerator<'T when 'T: equality> = - +type UniqueStampGenerator<'T when 'T: equality> = new: unit -> UniqueStampGenerator<'T> - member Encode: str:'T -> int - member Table: ICollection<'T> /// Memoize tables (all entries cached, never collected unless whole table is collected) -type internal MemoizationTable<'T,'U> = - +type MemoizationTable<'T,'U> = new: compute:('T -> 'U) * keyComparer:IEqualityComparer<'T> * ?canMemoize:('T -> bool) -> MemoizationTable<'T,'U> - member Apply: x:'T -> 'U -exception internal UndefinedException - -type internal LazyWithContextFailure = +exception UndefinedException +type LazyWithContextFailure = new: exn:exn -> LazyWithContextFailure - member Exception: exn - static member Undefined: LazyWithContextFailure /// Just like "Lazy" but EVERY forcer must provide an instance of "ctxt", e.g. to help track errors /// on forcing back to at least one sensible user location [] -type internal LazyWithContext<'T,'ctxt> = +type LazyWithContext<'T,'ctxt> = static member Create: f:('ctxt -> 'T) * findOriginalException:(exn -> exn) -> LazyWithContext<'T,'ctxt> static member NotLazy: x:'T -> LazyWithContext<'T,'ctxt> member Force: ctxt:'ctxt -> 'T @@ -466,28 +487,28 @@ type internal LazyWithContext<'T,'ctxt> = member IsForced: bool /// Intern tables to save space. -module internal Tables = +module Tables = val memoize: f:('a -> 'b) -> ('a -> 'b) when 'a: equality /// Interface that defines methods for comparing objects using partial equality relation -type internal IPartialEqualityComparer<'T> = +type IPartialEqualityComparer<'T> = inherit IEqualityComparer<'T> abstract member InEqualityRelation: 'T -> bool /// Interface that defines methods for comparing objects using partial equality relation -module internal IPartialEqualityComparer = +module IPartialEqualityComparer = val On : f:('a -> 'b) -> c:IPartialEqualityComparer<'b> -> IPartialEqualityComparer<'a> /// Like Seq.distinctBy but only filters out duplicates for some of the elements val partialDistinctBy : per:IPartialEqualityComparer<'T> -> seq:'T list -> 'T list -type internal NameMap<'T> = Map +type NameMap<'T> = Map -type internal NameMultiMap<'T> = NameMap<'T list> +type NameMultiMap<'T> = NameMap<'T list> -type internal MultiMap<'T,'U when 'T: comparison> = Map<'T,'U list> +type MultiMap<'T,'U when 'T: comparison> = Map<'T,'U list> -module internal NameMap = +module NameMap = val empty: Map<'a,'b> when 'a: comparison @@ -549,7 +570,7 @@ module internal NameMap = val tryFindInRange : p:('a -> bool) -> m:Map<'b,'a> -> 'a option when 'b: comparison -module internal NameMultiMap = +module NameMultiMap = val existsInRange: f:('T -> bool) -> m:NameMultiMap<'T> -> bool @@ -571,7 +592,7 @@ module internal NameMultiMap = val ofList: xs:(string * 'T) list -> NameMultiMap<'T> -module internal MultiMap = +module MultiMap = val existsInRange : f:('a -> bool) -> m:MultiMap<'b,'a> -> bool when 'b: comparison @@ -585,43 +606,87 @@ module internal MultiMap = val initBy : f:('a -> 'b) -> xs:seq<'a> -> MultiMap<'b,'a> when 'b: comparison -type internal LayeredMap<'Key,'Value when 'Key: comparison> = Map<'Key,'Value> +type LayeredMap<'Key,'Value when 'Key: comparison> = Map<'Key,'Value> +type Map<'Key,'Value when 'Key: comparison> with -[] -module internal MapAutoOpens = - type internal Map<'Key,'Value when 'Key: comparison> with - - static member Empty: Map<'Key,'Value> when 'Key: comparison + static member Empty: Map<'Key,'Value> when 'Key: comparison - member Values: 'Value list + member Values: 'Value list - member AddAndMarkAsCollapsible: kvs:KeyValuePair<'Key,'Value> [] -> Map<'Key,'Value> when 'Key: comparison + member AddAndMarkAsCollapsible: kvs:KeyValuePair<'Key,'Value> [] -> Map<'Key,'Value> when 'Key: comparison - member LinearTryModifyThenLaterFlatten: key:'Key * f:('Value option -> 'Value) -> Map<'Key,'Value> when 'Key: comparison + member LinearTryModifyThenLaterFlatten: key:'Key * f:('Value option -> 'Value) -> Map<'Key,'Value> when 'Key: comparison - type internal Map<'Key,'Value when 'Key: comparison> with - member MarkAsCollapsible: unit -> Map<'Key,'Value> when 'Key: comparison +type Map<'Key,'Value when 'Key: comparison> with + member MarkAsCollapsible: unit -> Map<'Key,'Value> when 'Key: comparison /// Immutable map collection, with explicit flattening to a backing dictionary [] -type internal LayeredMultiMap<'Key,'Value when 'Key: comparison> = +type LayeredMultiMap<'Key,'Value when 'Key: comparison> = new: contents:LayeredMap<'Key,'Value list> -> LayeredMultiMap<'Key,'Value> - member Add: k:'Key * v:'Value -> LayeredMultiMap<'Key,'Value> - member AddAndMarkAsCollapsible: kvs:KeyValuePair<'Key,'Value> [] -> LayeredMultiMap<'Key,'Value> - member MarkAsCollapsible: unit -> LayeredMultiMap<'Key,'Value> - member TryFind: k:'Key -> 'Value list option - member TryGetValue: k:'Key -> bool * 'Value list - member Item: k:'Key -> 'Value list with get - member Values: 'Value list - static member Empty: LayeredMultiMap<'Key,'Value> +[] +module Shim = + type IFileSystem = + + /// Used to load a dependency for F# Interactive and in an unused corner-case of type provider loading + abstract member AssemblyLoad: assemblyName:System.Reflection.AssemblyName -> System.Reflection.Assembly + + /// Used to load type providers and located assemblies in F# Interactive + abstract member AssemblyLoadFrom: fileName:string -> System.Reflection.Assembly + + /// A shim over File.Delete + abstract member FileDelete: fileName:string -> unit + abstract member FileStreamCreateShim: fileName:string -> Stream + + /// A shim over FileStream with FileMode.Open, FileAccess.Read, FileShare.ReadWrite + abstract member FileStreamReadShim: fileName:string -> Stream + + /// A shim over FileStream with FileMode.Open, FileAccess.Write, FileShare.Read + abstract member FileStreamWriteExistingShim: fileName:string -> Stream + + /// Take in a filename with an absolute path, and return the same filename + /// but canonicalized with respect to extra path separators (e.g. C:\\\\foo.txt) + /// and '..' portions + abstract member GetFullPathShim: fileName:string -> string + + /// Utc time of the last modification + abstract member GetLastWriteTimeShim: fileName:string -> DateTime + + /// A shim over Path.GetTempPath + abstract member GetTempPathShim: unit -> string + + /// A shim over Path.IsInvalidPath + abstract member IsInvalidPathShim: filename:string -> bool + + /// A shim over Path.IsPathRooted + abstract member IsPathRootedShim: path:string -> bool + + /// Used to determine if a file will not be subject to deletion during the lifetime of a typical client process. + abstract member IsStableFileHeuristic: fileName:string -> bool + + /// A shim over File.ReadAllBytes + abstract member ReadAllBytesShim: fileName:string -> byte [] + + /// A shim over File.Exists + abstract member SafeExists: fileName:string -> bool + + /// The global hook into the file system + val mutable FileSystem: IFileSystem + + type System.IO.File with + static member ReadBinaryChunk: fileName:string * start:int * len:int -> byte [] + + static member OpenReaderAndRetry: filename:string * codepage:int option * retryLocked:bool -> System.IO.StreamReader + + diff --git a/src/fsharp/absil/ilmorph.fs b/src/fsharp/absil/ilmorph.fs index 600184c8aaf..b6fb7ce69b6 100644 --- a/src/fsharp/absil/ilmorph.fs +++ b/src/fsharp/absil/ilmorph.fs @@ -4,7 +4,7 @@ module internal FSharp.Compiler.AbstractIL.Morphs open System.Collections.Generic open FSharp.Compiler.AbstractIL -open Internal.Utilities.Library +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.IL let mutable morphCustomAttributeData = false @@ -133,27 +133,27 @@ let rec celem_ty2ty f celem = let cnamedarg_ty2ty f ((nm, ty, isProp, elem) : ILAttributeNamedArg) = (nm, f ty, isProp, celem_ty2ty f elem) -let cattr_ty2ty f (c: ILAttribute) = +let cattr_ty2ty ilg f (c: ILAttribute) = let meth = mspec_ty2ty (f, (fun _ -> f)) c.Method // dev11 M3 defensive coding: if anything goes wrong with attribute decoding or encoding, then back out. if morphCustomAttributeData then try - let elems,namedArgs = IL.decodeILAttribData c + let elems,namedArgs = IL.decodeILAttribData ilg c let elems = elems |> List.map (celem_ty2ty f) let namedArgs = namedArgs |> List.map (cnamedarg_ty2ty f) - mkILCustomAttribMethRef (meth, elems, namedArgs) + mkILCustomAttribMethRef ilg (meth, elems, namedArgs) with _ -> c.WithMethod(meth) else c.WithMethod(meth) -let cattrs_ty2ty f (cs: ILAttributes) = - mkILCustomAttrs (List.map (cattr_ty2ty f) cs.AsList) +let cattrs_ty2ty ilg f (cs: ILAttributes) = + mkILCustomAttrs (List.map (cattr_ty2ty ilg f) cs.AsList) -let fdef_ty2ty ftye (fd: ILFieldDef) = +let fdef_ty2ty ilg ftye (fd: ILFieldDef) = fd.With(fieldType=ftye fd.FieldType, - customAttrs=cattrs_ty2ty ftye fd.CustomAttrs) + customAttrs=cattrs_ty2ty ilg ftye fd.CustomAttrs) let local_ty2ty f (l: ILLocal) = {l with Type = f l.Type} let varargs_ty2ty f (varargs: ILVarArgs) = Option.map (List.map f) varargs @@ -197,8 +197,8 @@ let morphILTypesInILInstr ((factualty,fformalty)) i = | ILToken.ILField fr -> I_ldtoken (ILToken.ILField (conv_fspec fr)) | x -> x -let return_ty2ty f (r:ILReturn) = {r with Type=f r.Type; CustomAttrsStored= storeILCustomAttrs (cattrs_ty2ty f r.CustomAttrs)} -let param_ty2ty f (p: ILParameter) = {p with Type=f p.Type; CustomAttrsStored= storeILCustomAttrs (cattrs_ty2ty f p.CustomAttrs)} +let return_ty2ty ilg f (r:ILReturn) = {r with Type=f r.Type; CustomAttrsStored= storeILCustomAttrs (cattrs_ty2ty ilg f r.CustomAttrs)} +let param_ty2ty ilg f (p: ILParameter) = {p with Type=f p.Type; CustomAttrsStored= storeILCustomAttrs (cattrs_ty2ty ilg f p.CustomAttrs)} let morphILMethodDefs f (m:ILMethodDefs) = mkILMethods (List.map f m.AsList) let fdefs_fdef2fdef f (m:ILFieldDefs) = mkILFields (List.map f m.AsList) @@ -213,107 +213,107 @@ let ilmbody_instr2instr_ty2ty fs (il: ILMethodBody) = {il with Code=code_instr2instr_ty2ty (finstr,ftye) il.Code Locals = locals_ty2ty ftye il.Locals } -let morphILMethodBody (filmbody) (x: MethodBody) = - match x with - | MethodBody.IL il -> - let ilCode = filmbody il.Value // Eager - MethodBody.IL (lazy ilCode) - | x -> x +let morphILMethodBody (filmbody) (x: ILLazyMethodBody) = + let c = + match x.Contents with + | MethodBody.IL il -> MethodBody.IL (filmbody il) + | x -> x + mkMethBodyAux c let ospec_ty2ty f (OverridesSpec(mref,ty)) = OverridesSpec(mref_ty2ty f mref, f ty) -let mdef_ty2ty_ilmbody2ilmbody fs (md: ILMethodDef) = +let mdef_ty2ty_ilmbody2ilmbody ilg fs (md: ILMethodDef) = let (ftye,filmbody) = fs let ftye' = ftye (Some md) let body' = morphILMethodBody (filmbody (Some md)) md.Body md.With(genericParams=gparams_ty2ty ftye' md.GenericParams, - body= notlazy body', - parameters = List.map (param_ty2ty ftye') md.Parameters, - ret = return_ty2ty ftye' md.Return, - customAttrs=cattrs_ty2ty ftye' md.CustomAttrs) + body= body', + parameters = List.map (param_ty2ty ilg ftye') md.Parameters, + ret = return_ty2ty ilg ftye' md.Return, + customAttrs=cattrs_ty2ty ilg ftye' md.CustomAttrs) -let fdefs_ty2ty f x = fdefs_fdef2fdef (fdef_ty2ty f) x +let fdefs_ty2ty ilg f x = fdefs_fdef2fdef (fdef_ty2ty ilg f) x -let mdefs_ty2ty_ilmbody2ilmbody fs x = morphILMethodDefs (mdef_ty2ty_ilmbody2ilmbody fs) x +let mdefs_ty2ty_ilmbody2ilmbody ilg fs x = morphILMethodDefs (mdef_ty2ty_ilmbody2ilmbody ilg fs) x let mimpl_ty2ty f e = { Overrides = ospec_ty2ty f e.Overrides OverrideBy = mspec_ty2ty (f,(fun _ -> f)) e.OverrideBy; } -let edef_ty2ty f (e: ILEventDef) = +let edef_ty2ty ilg f (e: ILEventDef) = e.With(eventType = Option.map f e.EventType, addMethod = mref_ty2ty f e.AddMethod, removeMethod = mref_ty2ty f e.RemoveMethod, fireMethod = Option.map (mref_ty2ty f) e.FireMethod, otherMethods = List.map (mref_ty2ty f) e.OtherMethods, - customAttrs = cattrs_ty2ty f e.CustomAttrs) + customAttrs = cattrs_ty2ty ilg f e.CustomAttrs) -let pdef_ty2ty f (p: ILPropertyDef) = +let pdef_ty2ty ilg f (p: ILPropertyDef) = p.With(setMethod = Option.map (mref_ty2ty f) p.SetMethod, getMethod = Option.map (mref_ty2ty f) p.GetMethod, propertyType = f p.PropertyType, args = List.map f p.Args, - customAttrs = cattrs_ty2ty f p.CustomAttrs) + customAttrs = cattrs_ty2ty ilg f p.CustomAttrs) -let pdefs_ty2ty f (pdefs: ILPropertyDefs) = mkILProperties (List.map (pdef_ty2ty f) pdefs.AsList) -let edefs_ty2ty f (edefs: ILEventDefs) = mkILEvents (List.map (edef_ty2ty f) edefs.AsList) +let pdefs_ty2ty ilg f (pdefs: ILPropertyDefs) = mkILProperties (List.map (pdef_ty2ty ilg f) pdefs.AsList) +let edefs_ty2ty ilg f (edefs: ILEventDefs) = mkILEvents (List.map (edef_ty2ty ilg f) edefs.AsList) let mimpls_ty2ty f (mimpls : ILMethodImplDefs) = mkILMethodImpls (List.map (mimpl_ty2ty f) mimpls.AsList) -let rec tdef_ty2ty_ilmbody2ilmbody_mdefs2mdefs enc fs (td: ILTypeDef) = +let rec tdef_ty2ty_ilmbody2ilmbody_mdefs2mdefs ilg enc fs (td: ILTypeDef) = let (ftye,fmdefs) = fs let ftye' = ftye (Some (enc,td)) None let mdefs' = fmdefs (enc,td) td.Methods - let fdefs' = fdefs_ty2ty ftye' td.Fields + let fdefs' = fdefs_ty2ty ilg ftye' td.Fields td.With(implements= List.map ftye' td.Implements, genericParams= gparams_ty2ty ftye' td.GenericParams, extends = Option.map ftye' td.Extends, methods=mdefs', - nestedTypes=tdefs_ty2ty_ilmbody2ilmbody_mdefs2mdefs (enc@[td]) fs td.NestedTypes, + nestedTypes=tdefs_ty2ty_ilmbody2ilmbody_mdefs2mdefs ilg (enc@[td]) fs td.NestedTypes, fields=fdefs', methodImpls = mimpls_ty2ty ftye' td.MethodImpls, - events = edefs_ty2ty ftye' td.Events, - properties = pdefs_ty2ty ftye' td.Properties, - customAttrs = cattrs_ty2ty ftye' td.CustomAttrs) + events = edefs_ty2ty ilg ftye' td.Events, + properties = pdefs_ty2ty ilg ftye' td.Properties, + customAttrs = cattrs_ty2ty ilg ftye' td.CustomAttrs) -and tdefs_ty2ty_ilmbody2ilmbody_mdefs2mdefs enc fs tdefs = - morphILTypeDefs (tdef_ty2ty_ilmbody2ilmbody_mdefs2mdefs enc fs) tdefs +and tdefs_ty2ty_ilmbody2ilmbody_mdefs2mdefs ilg enc fs tdefs = + morphILTypeDefs (tdef_ty2ty_ilmbody2ilmbody_mdefs2mdefs ilg enc fs) tdefs // -------------------------------------------------------------------- // Derived versions of the above, e.g. with defaults added // -------------------------------------------------------------------- -let manifest_ty2ty f (m : ILAssemblyManifest) = - { m with CustomAttrsStored = storeILCustomAttrs (cattrs_ty2ty f m.CustomAttrs) } +let manifest_ty2ty ilg f (m : ILAssemblyManifest) = + { m with CustomAttrsStored = storeILCustomAttrs (cattrs_ty2ty ilg f m.CustomAttrs) } -let morphILTypeInILModule_ilmbody2ilmbody_mdefs2mdefs ((ftye: ILModuleDef -> (ILTypeDef list * ILTypeDef) option -> ILMethodDef option -> ILType -> ILType),fmdefs) m = +let morphILTypeInILModule_ilmbody2ilmbody_mdefs2mdefs ilg ((ftye: ILModuleDef -> (ILTypeDef list * ILTypeDef) option -> ILMethodDef option -> ILType -> ILType),fmdefs) m = - let ftdefs = tdefs_ty2ty_ilmbody2ilmbody_mdefs2mdefs [] (ftye m,fmdefs m) + let ftdefs = tdefs_ty2ty_ilmbody2ilmbody_mdefs2mdefs ilg [] (ftye m,fmdefs m) { m with TypeDefs=ftdefs m.TypeDefs - CustomAttrsStored= storeILCustomAttrs (cattrs_ty2ty (ftye m None None) m.CustomAttrs) - Manifest=Option.map (manifest_ty2ty (ftye m None None)) m.Manifest } + CustomAttrsStored= storeILCustomAttrs (cattrs_ty2ty ilg (ftye m None None) m.CustomAttrs) + Manifest=Option.map (manifest_ty2ty ilg (ftye m None None)) m.Manifest } -let module_instr2instr_ty2ty fs x = +let module_instr2instr_ty2ty ilg fs x = let (fcode,ftye) = fs let filmbody modCtxt tdefCtxt mdefCtxt = ilmbody_instr2instr_ty2ty (fcode modCtxt tdefCtxt mdefCtxt, ftye modCtxt (Some tdefCtxt) mdefCtxt) - let fmdefs modCtxt tdefCtxt = mdefs_ty2ty_ilmbody2ilmbody (ftye modCtxt (Some tdefCtxt), filmbody modCtxt tdefCtxt) - morphILTypeInILModule_ilmbody2ilmbody_mdefs2mdefs (ftye, fmdefs) x + let fmdefs modCtxt tdefCtxt = mdefs_ty2ty_ilmbody2ilmbody ilg (ftye modCtxt (Some tdefCtxt), filmbody modCtxt tdefCtxt) + morphILTypeInILModule_ilmbody2ilmbody_mdefs2mdefs ilg (ftye, fmdefs) x -let morphILInstrsAndILTypesInILModule (f1,f2) x = - module_instr2instr_ty2ty (f1, f2) x +let morphILInstrsAndILTypesInILModule ilg (f1,f2) x = + module_instr2instr_ty2ty ilg (f1, f2) x let morphILInstrsInILCode f x = code_instr2instrs f x -let morphILTypeInILModule ftye y = +let morphILTypeInILModule ilg ftye y = let finstr modCtxt tdefCtxt mdefCtxt = let fty = ftye modCtxt (Some tdefCtxt) mdefCtxt morphILTypesInILInstr ((fun _instrCtxt -> fty), (fun _instrCtxt _formalCtxt -> fty)) - morphILInstrsAndILTypesInILModule (finstr,ftye) y + morphILInstrsAndILTypesInILModule ilg (finstr,ftye) y -let morphILTypeRefsInILModuleMemoized f modul = +let morphILTypeRefsInILModuleMemoized ilg f modul = let fty = Tables.memoize (ty_tref2tref f) - morphILTypeInILModule (fun _ _ _ ty -> fty ty) modul + morphILTypeInILModule ilg (fun _ _ _ ty -> fty ty) modul -let morphILScopeRefsInILModuleMemoized f modul = - morphILTypeRefsInILModuleMemoized (morphILScopeRefsInILTypeRef f) modul +let morphILScopeRefsInILModuleMemoized ilg f modul = + morphILTypeRefsInILModuleMemoized ilg (morphILScopeRefsInILTypeRef f) modul diff --git a/src/fsharp/absil/ilmorph.fsi b/src/fsharp/absil/ilmorph.fsi index 70cb7808f2e..1b5fc1499d9 100644 --- a/src/fsharp/absil/ilmorph.fsi +++ b/src/fsharp/absil/ilmorph.fsi @@ -8,15 +8,16 @@ /// the ILMethodDef (if any) where the item occurs. etc. module internal FSharp.Compiler.AbstractIL.Morphs +open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL /// Morph each scope reference inside a type signature. val morphILScopeRefsInILTypeRef: (ILScopeRef -> ILScopeRef) -> ILTypeRef -> ILTypeRef /// Morph all type references throughout an entire module. -val morphILTypeRefsInILModuleMemoized: (ILTypeRef -> ILTypeRef) -> ILModuleDef -> ILModuleDef +val morphILTypeRefsInILModuleMemoized: ILGlobals -> (ILTypeRef -> ILTypeRef) -> ILModuleDef -> ILModuleDef -val morphILScopeRefsInILModuleMemoized: (ILScopeRef -> ILScopeRef) -> ILModuleDef -> ILModuleDef +val morphILScopeRefsInILModuleMemoized: ILGlobals -> (ILScopeRef -> ILScopeRef) -> ILModuleDef -> ILModuleDef val morphILInstrsInILCode: (ILInstr -> ILInstr list) -> ILCode -> ILCode diff --git a/src/fsharp/absil/ilnativeres.fs b/src/fsharp/absil/ilnativeres.fs index f1892c42cdf..96cff415130 100644 --- a/src/fsharp/absil/ilnativeres.fs +++ b/src/fsharp/absil/ilnativeres.fs @@ -3,7 +3,7 @@ // And https://github.com/dotnet/roslyn/blob/d36121da4b527ee0617e4b0940b9d0b17b584470/src/Compilers/Core/Portable/CvtRes.cs // And their dependencies (some classes) -module internal FSharp.Compiler.AbstractIL.NativeRes +module internal FSharp.Compiler.AbstractIL.Internal.NativeRes open System open System.Collections.Generic diff --git a/src/fsharp/absil/ilnativeres.fsi b/src/fsharp/absil/ilnativeres.fsi index 4294cb14969..c9582400851 100644 --- a/src/fsharp/absil/ilnativeres.fsi +++ b/src/fsharp/absil/ilnativeres.fsi @@ -1,8 +1,10 @@ -module internal FSharp.Compiler.AbstractIL.NativeRes +module internal FSharp.Compiler.AbstractIL.Internal.NativeRes open System open System.Collections.Generic +open System.Linq +open System.Diagnostics open System.IO open System.Reflection.Metadata diff --git a/src/fsharp/absil/ilpars.fsy b/src/fsharp/absil/ilpars.fsy index 29b3dd9127e..eb93edb4806 100644 --- a/src/fsharp/absil/ilpars.fsy +++ b/src/fsharp/absil/ilpars.fsy @@ -5,15 +5,15 @@ #nowarn "1182" // the generated code often has unused variable "parseState" open Internal.Utilities -open Internal.Utilities.Library open Internal.Utilities.Text open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.AsciiConstants +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.AsciiConstants open FSharp.Compiler.AbstractIL.Diagnostics -open FSharp.Compiler.AbstractIL.ILX.Types +open FSharp.Compiler.AbstractIL.Extensions.ILX.Types open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal.Library let pfailwith s = diff --git a/src/fsharp/absil/ilprint.fs b/src/fsharp/absil/ilprint.fs index 782899e9111..42c0dcddd6a 100644 --- a/src/fsharp/absil/ilprint.fs +++ b/src/fsharp/absil/ilprint.fs @@ -2,17 +2,15 @@ module internal FSharp.Compiler.AbstractIL.ILAsciiWriter +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Extensions.ILX.Types +open FSharp.Compiler.AbstractIL.Internal.AsciiConstants +open FSharp.Compiler.AbstractIL.IL + open System.IO open System.Reflection -open FSharp.Compiler.IO -open Internal.Utilities -open Internal.Utilities.Library - -open FSharp.Compiler.AbstractIL.AsciiConstants -open FSharp.Compiler.AbstractIL.ILX.Types -open FSharp.Compiler.AbstractIL.IL - #if DEBUG let pretty () = true @@ -195,20 +193,20 @@ and goutput_typ env os ty = | ILType.Byref typ -> goutput_typ env os typ; output_string os "&" | ILType.Ptr typ -> goutput_typ env os typ; output_string os "*" - | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_SByte.TypeSpec.Name -> output_string os "int8" - | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_Int16.TypeSpec.Name -> output_string os "int16" - | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_Int32.TypeSpec.Name -> output_string os "int32" - | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_Int64.TypeSpec.Name -> output_string os "int64" - | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_IntPtr.TypeSpec.Name -> output_string os "native int" - | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_Byte.TypeSpec.Name -> output_string os "unsigned int8" - | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_UInt16.TypeSpec.Name -> output_string os "unsigned int16" - | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_UInt32.TypeSpec.Name -> output_string os "unsigned int32" - | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_UInt64.TypeSpec.Name -> output_string os "unsigned int64" - | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_UIntPtr.TypeSpec.Name -> output_string os "native unsigned int" - | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_Double.TypeSpec.Name -> output_string os "float64" - | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_Single.TypeSpec.Name -> output_string os "float32" - | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_Bool.TypeSpec.Name -> output_string os "bool" - | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_Char.TypeSpec.Name -> output_string os "char" + | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_SByte.TypeSpec.Name -> output_string os "int8" + | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_Int16.TypeSpec.Name -> output_string os "int16" + | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_Int32.TypeSpec.Name -> output_string os "int32" + | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_Int64.TypeSpec.Name -> output_string os "int64" + | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_IntPtr.TypeSpec.Name -> output_string os "native int" + | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_Byte.TypeSpec.Name -> output_string os "unsigned int8" + | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_UInt16.TypeSpec.Name -> output_string os "unsigned int16" + | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_UInt32.TypeSpec.Name -> output_string os "unsigned int32" + | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_UInt64.TypeSpec.Name -> output_string os "unsigned int64" + | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_UIntPtr.TypeSpec.Name -> output_string os "native unsigned int" + | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_Double.TypeSpec.Name -> output_string os "float64" + | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_Single.TypeSpec.Name -> output_string os "float32" + | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_Bool.TypeSpec.Name -> output_string os "bool" + | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_Char.TypeSpec.Name -> output_string os "char" | ILType.Value tspec -> output_string os "value class " goutput_tref env os tspec.TypeRef @@ -461,7 +459,7 @@ let output_at os b = let output_option f os = function None -> () | Some x -> f os x -let goutput_alternative_ref env os (alt: IlxUnionCase) = +let goutput_alternative_ref env os (alt: IlxUnionAlternative) = output_id os alt.Name alt.FieldDefs |> output_parens (output_array ", " (fun os fdef -> goutput_typ env os fdef.Type)) os @@ -499,7 +497,7 @@ let output_custom_attr_data os data = let goutput_custom_attr env os (attr: ILAttribute) = output_string os " .custom " goutput_mspec env os attr.Method - let data = getCustomAttrData attr + let data = getCustomAttrData env.ilGlobals attr output_custom_attr_data os data let goutput_custom_attrs env os (attrs : ILAttributes) = @@ -730,7 +728,7 @@ let rec goutput_instr env os inst = goutput_dlocref env os (mkILArrTy(typ, shape)) output_string os ".ctor" let rank = shape.Rank - output_parens (output_array ", " (goutput_typ env)) os (Array.create ( rank) PrimaryAssemblyILGlobals.typ_Int32) + output_parens (output_array ", " (goutput_typ env)) os (Array.create ( rank) EcmaMscorlibILGlobals.typ_Int32) | I_stelem_any (shape, dt) -> if shape = ILArrayShape.SingleDimensional then output_string os "stelem.any "; goutput_typ env os dt @@ -739,7 +737,7 @@ let rec goutput_instr env os inst = goutput_dlocref env os (mkILArrTy(dt, shape)) output_string os "Set" let rank = shape.Rank - let arr = Array.create (rank + 1) PrimaryAssemblyILGlobals.typ_Int32 + let arr = Array.create (rank + 1) EcmaMscorlibILGlobals.typ_Int32 arr.[rank] <- dt output_parens (output_array ", " (goutput_typ env)) os arr | I_ldelem_any (shape, tok) -> @@ -752,7 +750,7 @@ let rec goutput_instr env os inst = goutput_dlocref env os (mkILArrTy(tok, shape)) output_string os "Get" let rank = shape.Rank - output_parens (output_array ", " (goutput_typ env)) os (Array.create ( rank) PrimaryAssemblyILGlobals.typ_Int32) + output_parens (output_array ", " (goutput_typ env)) os (Array.create ( rank) EcmaMscorlibILGlobals.typ_Int32) | I_ldelema (ro, _, shape, tok) -> if ro = ReadonlyAddress then output_string os "readonly. " if shape = ILArrayShape.SingleDimensional then @@ -764,7 +762,7 @@ let rec goutput_instr env os inst = goutput_dlocref env os (mkILArrTy(tok, shape)) output_string os "Address" let rank = shape.Rank - output_parens (output_array ", " (goutput_typ env)) os (Array.create ( rank) PrimaryAssemblyILGlobals.typ_Int32) + output_parens (output_array ", " (goutput_typ env)) os (Array.create ( rank) EcmaMscorlibILGlobals.typ_Int32) | I_box tok -> output_string os "box "; goutput_typ env os tok | I_unbox tok -> output_string os "unbox "; goutput_typ env os tok @@ -809,8 +807,8 @@ let goutput_mbody is_entrypoint env os (md: ILMethodDef) = output_string os " \n{ \n" goutput_security_decls env os md.SecurityDecls goutput_custom_attrs env os md.CustomAttrs - match md.Body with - | MethodBody.IL il -> goutput_ilmbody env os il.Value + match md.Body.Contents with + | MethodBody.IL il -> goutput_ilmbody env os il | _ -> () if is_entrypoint then output_string os " .entrypoint" output_string os "\n" @@ -829,9 +827,8 @@ let goutput_mdef env os (md:ILMethodDef) = elif md.IsConstructor then "rtspecialname" elif md.IsStatic then "static " + - (match md.Body with - MethodBody.PInvoke (attrLazy) -> - let attr = attrLazy.Value + (match md.Body.Contents with + MethodBody.PInvoke (attr) -> "pinvokeimpl(\"" + attr.Where.Name + "\" as \"" + attr.Name + "\"" + (match attr.CallingConv with | PInvokeCallingConvention.None -> "" diff --git a/src/fsharp/absil/ilprint.fsi b/src/fsharp/absil/ilprint.fsi index be5e4f53dce..9ba4ccb1bf7 100644 --- a/src/fsharp/absil/ilprint.fsi +++ b/src/fsharp/absil/ilprint.fsi @@ -3,7 +3,9 @@ /// Printer for the abstract syntax. module internal FSharp.Compiler.AbstractIL.ILAsciiWriter +open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal open System.IO #if DEBUG diff --git a/src/fsharp/absil/ilread.fs b/src/fsharp/absil/ilread.fs index b89cccd82c3..51f2a122913 100644 --- a/src/fsharp/absil/ilread.fs +++ b/src/fsharp/absil/ilread.fs @@ -5,7 +5,7 @@ // //--------------------------------------------------------------------- -module FSharp.Compiler.AbstractIL.ILBinaryReader +module FSharp.Compiler.AbstractIL.ILBinaryReader #nowarn "42" // This construct is deprecated: it is only for use in the F# library @@ -16,23 +16,25 @@ open System.Collections.Immutable open System.Diagnostics open System.IO open System.IO.MemoryMappedFiles +open System.Runtime.InteropServices open System.Text +open Internal.Utilities open Internal.Utilities.Collections -open FSharp.Compiler.AbstractIL.Diagnostics +open FSharp.NativeInterop +open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.BinaryConstants -open Internal.Utilities.Library -open FSharp.Compiler.AbstractIL.Support +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.BinaryConstants +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Internal.Support +open FSharp.Compiler.AbstractIL.Internal.Utils open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.IO -open FSharp.Compiler.Text.Range +open FSharp.Compiler.Range open System.Reflection -open System.Reflection.PortableExecutable -open FSharp.NativeInterop #nowarn "9" -let checking = false +let checking = false let logging = false let _ = if checking then dprintn "warning: ILBinaryReader.checking is on" let noStableFileHeuristic = try (System.Environment.GetEnvironmentVariable("FSharp_NoStableFileHeuristic") <> null) with _ -> false @@ -44,61 +46,61 @@ let singleOfBits (x: int32) = System.BitConverter.ToSingle(System.BitConverter.G let doubleOfBits (x: int64) = System.BitConverter.Int64BitsToDouble x //--------------------------------------------------------------------- -// Utilities. +// Utilities. //--------------------------------------------------------------------- let align alignment n = ((n + alignment - 0x1) / alignment) * alignment let uncodedToken (tab: TableName) idx = ((tab.Index <<< 24) ||| idx) -let i32ToUncodedToken tok = +let i32ToUncodedToken tok = let idx = tok &&& 0xffffff let tab = tok >>>& 24 (TableName.FromIndex tab, idx) [] -type TaggedIndex<'T> = +type TaggedIndex<'T> = val tag: 'T val index: int32 new(tag, index) = { tag=tag; index=index } -let uncodedTokenToTypeDefOrRefOrSpec (tab, tok) = +let uncodedTokenToTypeDefOrRefOrSpec (tab, tok) = let tag = - if tab = TableNames.TypeDef then tdor_TypeDef + if tab = TableNames.TypeDef then tdor_TypeDef elif tab = TableNames.TypeRef then tdor_TypeRef elif tab = TableNames.TypeSpec then tdor_TypeSpec - else failwith "bad table in uncodedTokenToTypeDefOrRefOrSpec" + else failwith "bad table in uncodedTokenToTypeDefOrRefOrSpec" TaggedIndex(tag, tok) -let uncodedTokenToMethodDefOrRef (tab, tok) = +let uncodedTokenToMethodDefOrRef (tab, tok) = let tag = - if tab = TableNames.Method then mdor_MethodDef + if tab = TableNames.Method then mdor_MethodDef elif tab = TableNames.MemberRef then mdor_MemberRef - else failwith "bad table in uncodedTokenToMethodDefOrRef" + else failwith "bad table in uncodedTokenToMethodDefOrRef" TaggedIndex(tag, tok) -let (|TaggedIndex|) (x: TaggedIndex<'T>) = x.tag, x.index -let inline tokToTaggedIdx f nbits tok = - let tagmask = - if nbits = 1 then 1 - elif nbits = 2 then 3 - elif nbits = 3 then 7 - elif nbits = 4 then 15 - elif nbits = 5 then 31 +let (|TaggedIndex|) (x: TaggedIndex<'T>) = x.tag, x.index +let inline tokToTaggedIdx f nbits tok = + let tagmask = + if nbits = 1 then 1 + elif nbits = 2 then 3 + elif nbits = 3 then 7 + elif nbits = 4 then 15 + elif nbits = 5 then 31 else failwith "too many nbits" let tag = tok &&& tagmask let idx = tok >>>& nbits - TaggedIndex(f tag, idx) - -type Statistics = + TaggedIndex(f tag, idx) + +type Statistics = { mutable rawMemoryFileCount: int mutable memoryMapFileOpenedCount: int mutable memoryMapFileClosedCount: int mutable weakByteFileCount: int mutable byteFileCount: int } -let stats = +let stats = { rawMemoryFileCount = 0 memoryMapFileOpenedCount = 0 memoryMapFileClosedCount = 0 @@ -110,79 +112,34 @@ let GetStatistics() = stats type private BinaryView = ReadOnlyByteMemory /// An abstraction over how we access the contents of .NET binaries. -type BinaryFile = +type BinaryFile = abstract GetView: unit -> BinaryView /// Gives views over a raw chunk of memory, for example those returned to us by the memory manager in Roslyn's /// Visual Studio integration. 'obj' must keep the memory alive. The object will capture it and thus also keep the memory alive for -/// the lifetime of this object. -type RawMemoryFile = - val mutable private holder: obj - val mutable private fileName: string - val mutable private view: ReadOnlyByteMemory - - new (fileName: string, obj: obj, addr: nativeint, length: int) = - stats.rawMemoryFileCount <- stats.rawMemoryFileCount + 1 - { - holder = obj - fileName = fileName - view = ByteMemory.FromUnsafePointer(addr, length, obj).AsReadOnly() - } - - new (fileName: string, holder: obj, bmem: ByteMemory) = - { - holder = holder // gonna be finalized due to how we pass the holder when create RawByteMemory - fileName = fileName - view = bmem.AsReadOnly() - } - - member r.HoldObj() = r.holder // make sure we capture the holder. - member r.FileName = r.fileName - - interface BinaryFile with - override r.GetView() = r.view - -/// Gives a view over any ByteMemory, can be stream-based, mmap-ed, or just byte array. -type ByteMemoryFile(fileName: string, view: ByteMemory) = - member _.FileName = fileName +/// the lifetime of this object. +type RawMemoryFile(fileName: string, obj: obj, addr: nativeint, length: int) = + do stats.rawMemoryFileCount <- stats.rawMemoryFileCount + 1 + let view = ByteMemory.FromUnsafePointer(addr, length, obj).AsReadOnly() + member __.HoldObj() = obj // make sure we capture 'obj' + member __.FileName = fileName interface BinaryFile with - override _.GetView() = view.AsReadOnly() + override __.GetView() = view /// A BinaryFile backed by an array of bytes held strongly as managed memory [] -type ByteFile(fileName: string, bytes: byte[]) = +type ByteFile(fileName: string, bytes: byte[]) = let view = ByteMemory.FromArray(bytes).AsReadOnly() do stats.byteFileCount <- stats.byteFileCount + 1 - member _.FileName = fileName + member __.FileName = fileName interface BinaryFile with override bf.GetView() = view - -type PEFile(fileName: string, peReader: PEReader) as this = - - // We store a weak byte memory reference so we do not constantly create a lot of byte memory objects. - // We could just have a single ByteMemory stored in the PEFile, but we need to dispose of the stream via the finalizer; we cannot have a cicular reference. - let mutable weakMemory = new WeakReference(Unchecked.defaultof<_>) - - member _.FileName = fileName - - override _.Finalize() = - peReader.Dispose() - - interface BinaryFile with - override _.GetView() = - match weakMemory.TryGetTarget() with - | true, m -> m.AsReadOnly() - | _ -> - let block = peReader.GetEntireImage() // it's ok to call this everytime we do GetView as it is cached in the PEReader. - let m = ByteMemory.FromUnsafePointer(block.Pointer |> NativePtr.toNativeInt, block.Length, this) - weakMemory <- WeakReference(m) - m.AsReadOnly() - + /// Same as ByteFile but holds the bytes weakly. The bytes will be re-read from the backing file when a view is requested. /// This is the default implementation used by F# Compiler Services when accessing "stable" binaries. It is not used /// by Visual Studio, where tryGetMetadataSnapshot provides a RawMemoryFile backed by Roslyn data. [] -type WeakByteFile(fileName: string, chunk: (int * int) option) = +type WeakByteFile(fileName: string, chunk: (int * int) option) = do stats.weakByteFileCount <- stats.weakByteFileCount + 1 @@ -192,23 +149,22 @@ type WeakByteFile(fileName: string, chunk: (int * int) option) = /// The weak handle to the bytes for the file let weakBytes = new WeakReference (null) - member _.FileName = fileName + member __.FileName = fileName /// Get the bytes for the file interface BinaryFile with - override this.GetView() = - let strongBytes = + override this.GetView() = + let strongBytes = let mutable tg = null - if not (weakBytes.TryGetTarget(&tg)) then - if FileSystem.GetLastWriteTimeShim fileName <> fileStamp then + if not (weakBytes.TryGetTarget(&tg)) then + if FileSystem.GetLastWriteTimeShim fileName <> fileStamp then error (Error (FSComp.SR.ilreadFileChanged fileName, range0)) - let bytes = - use stream = FileSystem.OpenFileForReadShim(fileName) - match chunk with - | None -> stream.ReadAllBytes() - | Some(start, length) -> stream.ReadBytes(start, length) + let bytes = + match chunk with + | None -> FileSystem.ReadAllBytesShim fileName + | Some(start, length) -> File.ReadBinaryChunk (fileName, start, length) tg <- bytes @@ -218,15 +174,15 @@ type WeakByteFile(fileName: string, chunk: (int * int) option) = ByteMemory.FromArray(strongBytes).AsReadOnly() - + let seekReadByte (mdv: BinaryView) addr = mdv.[addr] let seekReadBytes (mdv: BinaryView) addr len = mdv.ReadBytes(addr, len) let seekReadInt32 (mdv: BinaryView) addr = mdv.ReadInt32 addr let seekReadUInt16 (mdv: BinaryView) addr = mdv.ReadUInt16 addr - + let seekReadByteAsInt32 mdv addr = int32 (seekReadByte mdv addr) - -let seekReadInt64 mdv addr = + +let seekReadInt64 mdv addr = let b0 = seekReadByte mdv addr let b1 = seekReadByte mdv (addr+1) let b2 = seekReadByte mdv (addr+2) @@ -239,84 +195,84 @@ let seekReadInt64 mdv addr = (int64 b4 <<< 32) ||| (int64 b5 <<< 40) ||| (int64 b6 <<< 48) ||| (int64 b7 <<< 56) let seekReadUInt16AsInt32 mdv addr = int32 (seekReadUInt16 mdv addr) - -let seekReadCompressedUInt32 mdv addr = + +let seekReadCompressedUInt32 mdv addr = let b0 = seekReadByte mdv addr if b0 <= 0x7Fuy then struct (int b0, addr+1) - elif b0 <= 0xBFuy then + elif b0 <= 0xBFuy then let b0 = b0 &&& 0x7Fuy - let b1 = seekReadByteAsInt32 mdv (addr+1) + let b1 = seekReadByteAsInt32 mdv (addr+1) struct ((int b0 <<< 8) ||| int b1, addr+2) - else + else let b0 = b0 &&& 0x3Fuy - let b1 = seekReadByteAsInt32 mdv (addr+1) - let b2 = seekReadByteAsInt32 mdv (addr+2) - let b3 = seekReadByteAsInt32 mdv (addr+3) + let b1 = seekReadByteAsInt32 mdv (addr+1) + let b2 = seekReadByteAsInt32 mdv (addr+2) + let b3 = seekReadByteAsInt32 mdv (addr+3) struct ((int b0 <<< 24) ||| (int b1 <<< 16) ||| (int b2 <<< 8) ||| int b3, addr+4) let seekReadSByte mdv addr = sbyte (seekReadByte mdv addr) let seekReadSingle mdv addr = singleOfBits (seekReadInt32 mdv addr) let seekReadDouble mdv addr = doubleOfBits (seekReadInt64 mdv addr) - -let rec seekCountUtf8String mdv addr n = + +let rec seekCountUtf8String mdv addr n = let c = seekReadByteAsInt32 mdv addr - if c = 0 then n + if c = 0 then n else seekCountUtf8String mdv (addr+1) (n+1) -let seekReadUTF8String (mdv: BinaryView) addr = +let seekReadUTF8String (mdv: BinaryView) addr = let n = seekCountUtf8String mdv addr 0 mdv.ReadUtf8String (addr, n) -let seekReadBlob mdv addr = +let seekReadBlob mdv addr = let struct (len, addr) = seekReadCompressedUInt32 mdv addr seekReadBytes mdv addr len - -let seekReadUserString mdv addr = + +let seekReadUserString mdv addr = let struct (len, addr) = seekReadCompressedUInt32 mdv addr let bytes = seekReadBytes mdv addr (len - 1) Encoding.Unicode.GetString(bytes, 0, bytes.Length) let seekReadGuid mdv addr = seekReadBytes mdv addr 0x10 -let seekReadUncodedToken mdv addr = +let seekReadUncodedToken mdv addr = i32ToUncodedToken (seekReadInt32 mdv addr) - + //--------------------------------------------------------------------- // Primitives to help read signatures. These do not use the file cursor //--------------------------------------------------------------------- -let sigptrCheck (bytes: byte[]) sigptr = +let sigptrCheck (bytes: byte[]) sigptr = if checking && sigptr >= bytes.Length then failwith "read past end of sig. " // All this code should be moved to use a mutable index into the signature // -//type SigPtr(bytes: byte[], sigptr: int) = +//type SigPtr(bytes: byte[], sigptr: int) = // let mutable curr = sigptr // member x.GetByte() = let res = bytes.[curr] in curr <- curr + 1; res - -let sigptrGetByte (bytes: byte[]) sigptr = + +let sigptrGetByte (bytes: byte[]) sigptr = sigptrCheck bytes sigptr bytes.[sigptr], sigptr + 1 -let sigptrGetBool bytes sigptr = +let sigptrGetBool bytes sigptr = let b0, sigptr = sigptrGetByte bytes sigptr (b0 = 0x01uy), sigptr -let sigptrGetSByte bytes sigptr = +let sigptrGetSByte bytes sigptr = let i, sigptr = sigptrGetByte bytes sigptr sbyte i, sigptr -let sigptrGetUInt16 bytes sigptr = +let sigptrGetUInt16 bytes sigptr = let b0, sigptr = sigptrGetByte bytes sigptr let b1, sigptr = sigptrGetByte bytes sigptr uint16 (int b0 ||| (int b1 <<< 8)), sigptr -let sigptrGetInt16 bytes sigptr = +let sigptrGetInt16 bytes sigptr = let u, sigptr = sigptrGetUInt16 bytes sigptr int16 u, sigptr -let sigptrGetInt32 bytes sigptr = +let sigptrGetInt32 bytes sigptr = sigptrCheck bytes sigptr let b0 = bytes.[sigptr] let b1 = bytes.[sigptr+1] @@ -325,122 +281,122 @@ let sigptrGetInt32 bytes sigptr = let res = int b0 ||| (int b1 <<< 8) ||| (int b2 <<< 16) ||| (int b3 <<< 24) res, sigptr + 4 -let sigptrGetUInt32 bytes sigptr = +let sigptrGetUInt32 bytes sigptr = let u, sigptr = sigptrGetInt32 bytes sigptr uint32 u, sigptr -let sigptrGetUInt64 bytes sigptr = +let sigptrGetUInt64 bytes sigptr = let u0, sigptr = sigptrGetUInt32 bytes sigptr let u1, sigptr = sigptrGetUInt32 bytes sigptr (uint64 u0 ||| (uint64 u1 <<< 32)), sigptr -let sigptrGetInt64 bytes sigptr = +let sigptrGetInt64 bytes sigptr = let u, sigptr = sigptrGetUInt64 bytes sigptr int64 u, sigptr -let sigptrGetSingle bytes sigptr = +let sigptrGetSingle bytes sigptr = let u, sigptr = sigptrGetInt32 bytes sigptr singleOfBits u, sigptr -let sigptrGetDouble bytes sigptr = +let sigptrGetDouble bytes sigptr = let u, sigptr = sigptrGetInt64 bytes sigptr doubleOfBits u, sigptr -let sigptrGetZInt32 bytes sigptr = +let sigptrGetZInt32 bytes sigptr = let b0, sigptr = sigptrGetByte bytes sigptr if b0 <= 0x7Fuy then struct (int b0, sigptr) - elif b0 <= 0xBFuy then + elif b0 <= 0xBFuy then let b0 = b0 &&& 0x7Fuy let b1, sigptr = sigptrGetByte bytes sigptr struct ((int b0 <<< 8) ||| int b1, sigptr) - else + else let b0 = b0 &&& 0x3Fuy let b1, sigptr = sigptrGetByte bytes sigptr let b2, sigptr = sigptrGetByte bytes sigptr let b3, sigptr = sigptrGetByte bytes sigptr struct ((int b0 <<< 24) ||| (int b1 <<< 16) ||| (int b2 <<< 8) ||| int b3, sigptr) - -let rec sigptrFoldAcc f n (bytes: byte[]) (sigptr: int) i acc = - if i < n then + +let rec sigptrFoldAcc f n (bytes: byte[]) (sigptr: int) i acc = + if i < n then let x, sp = f bytes sigptr sigptrFoldAcc f n bytes sp (i+1) (x :: acc) - else + else List.rev acc, sigptr -let sigptrFold f n (bytes: byte[]) (sigptr: int) = +let sigptrFold f n (bytes: byte[]) (sigptr: int) = sigptrFoldAcc f n bytes sigptr 0 [] let sigptrFoldStruct f n (bytes: byte[]) (sigptr: int) = - let rec sigptrFoldAcc f n (bytes: byte[]) (sigptr: int) i acc = - if i < n then + let rec sigptrFoldAcc f n (bytes: byte[]) (sigptr: int) i acc = + if i < n then let struct (x, sp) = f bytes sigptr sigptrFoldAcc f n bytes sp (i+1) (x :: acc) - else + else struct (List.rev acc, sigptr) sigptrFoldAcc f n bytes sigptr 0 [] -let sigptrGetBytes n (bytes: byte[]) sigptr = - if checking && sigptr + n >= bytes.Length then - dprintn "read past end of sig. in sigptrGetString" +let sigptrGetBytes n (bytes: byte[]) sigptr = + if checking && sigptr + n >= bytes.Length then + dprintn "read past end of sig. in sigptrGetString" Bytes.zeroCreate 0, sigptr - else + else let res = Bytes.zeroCreate n - for i = 0 to (n - 1) do + for i = 0 to (n - 1) do res.[i] <- bytes.[sigptr + i] res, sigptr + n -let sigptrGetString n bytes sigptr = +let sigptrGetString n bytes sigptr = let bytearray, sigptr = sigptrGetBytes n bytes sigptr (System.Text.Encoding.UTF8.GetString(bytearray, 0, bytearray.Length)), sigptr + - -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // Now the tables of instructions -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- [] -type ILInstrPrefixesRegister = - { mutable al: ILAlignment +type ILInstrPrefixesRegister = + { mutable al: ILAlignment mutable tl: ILTailcall mutable vol: ILVolatility mutable ro: ILReadonly mutable constrained: ILType option} - -let noPrefixes mk prefixes = + +let noPrefixes mk prefixes = if prefixes.al <> Aligned then failwith "an unaligned prefix is not allowed here" if prefixes.vol <> Nonvolatile then failwith "a volatile prefix is not allowed here" if prefixes.tl <> Normalcall then failwith "a tailcall prefix is not allowed here" if prefixes.ro <> NormalAddress then failwith "a readonly prefix is not allowed here" if prefixes.constrained <> None then failwith "a constrained prefix is not allowed here" - mk + mk -let volatileOrUnalignedPrefix mk prefixes = +let volatileOrUnalignedPrefix mk prefixes = if prefixes.tl <> Normalcall then failwith "a tailcall prefix is not allowed here" if prefixes.constrained <> None then failwith "a constrained prefix is not allowed here" if prefixes.ro <> NormalAddress then failwith "a readonly prefix is not allowed here" - mk (prefixes.al, prefixes.vol) + mk (prefixes.al, prefixes.vol) -let volatilePrefix mk prefixes = +let volatilePrefix mk prefixes = if prefixes.al <> Aligned then failwith "an unaligned prefix is not allowed here" if prefixes.tl <> Normalcall then failwith "a tailcall prefix is not allowed here" if prefixes.constrained <> None then failwith "a constrained prefix is not allowed here" if prefixes.ro <> NormalAddress then failwith "a readonly prefix is not allowed here" mk prefixes.vol -let tailPrefix mk prefixes = +let tailPrefix mk prefixes = if prefixes.al <> Aligned then failwith "an unaligned prefix is not allowed here" if prefixes.vol <> Nonvolatile then failwith "a volatile prefix is not allowed here" if prefixes.constrained <> None then failwith "a constrained prefix is not allowed here" if prefixes.ro <> NormalAddress then failwith "a readonly prefix is not allowed here" - mk prefixes.tl + mk prefixes.tl -let constraintOrTailPrefix mk prefixes = +let constraintOrTailPrefix mk prefixes = if prefixes.al <> Aligned then failwith "an unaligned prefix is not allowed here" if prefixes.vol <> Nonvolatile then failwith "a volatile prefix is not allowed here" if prefixes.ro <> NormalAddress then failwith "a readonly prefix is not allowed here" mk (prefixes.constrained, prefixes.tl ) -let readonlyPrefix mk prefixes = +let readonlyPrefix mk prefixes = if prefixes.al <> Aligned then failwith "an unaligned prefix is not allowed here" if prefixes.vol <> Nonvolatile then failwith "a volatile prefix is not allowed here" if prefixes.tl <> Normalcall then failwith "a tailcall prefix is not allowed here" @@ -449,7 +405,7 @@ let readonlyPrefix mk prefixes = [] -type ILInstrDecoder = +type ILInstrDecoder = | I_u16_u8_instr of (ILInstrPrefixesRegister -> uint16 -> ILInstr) | I_u16_u16_instr of (ILInstrPrefixesRegister -> uint16 -> ILInstr) | I_none_instr of (ILInstrPrefixesRegister -> ILInstr) @@ -474,7 +430,7 @@ type ILInstrDecoder = let mkStind dt = volatileOrUnalignedPrefix (fun (x, y) -> I_stind(x, y, dt)) let mkLdind dt = volatileOrUnalignedPrefix (fun (x, y) -> I_ldind(x, y, dt)) -let instrs () = +let instrs () = [ i_ldarg_s, I_u16_u8_instr (noPrefixes mkLdarg) i_starg_s, I_u16_u8_instr (noPrefixes I_starg) i_ldarga_s, I_u16_u8_instr (noPrefixes I_ldarga) @@ -486,7 +442,7 @@ let instrs () = i_ldarga, I_u16_u16_instr (noPrefixes I_ldarga) i_stloc, I_u16_u16_instr (noPrefixes mkStloc) i_ldloc, I_u16_u16_instr (noPrefixes mkLdloc) - i_ldloca, I_u16_u16_instr (noPrefixes I_ldloca) + i_ldloca, I_u16_u16_instr (noPrefixes I_ldloca) i_stind_i, I_none_instr (mkStind DT_I) i_stind_i1, I_none_instr (mkStind DT_I1) i_stind_i2, I_none_instr (mkStind DT_I2) @@ -507,27 +463,27 @@ let instrs () = i_ldind_r8, I_none_instr (mkLdind DT_R8) i_ldind_ref, I_none_instr (mkLdind DT_REF) i_cpblk, I_none_instr (volatileOrUnalignedPrefix I_cpblk) - i_initblk, I_none_instr (volatileOrUnalignedPrefix I_initblk) - i_ldc_i8, I_i64_instr (noPrefixes (fun x ->(AI_ldc (DT_I8, ILConst.I8 x)))) + i_initblk, I_none_instr (volatileOrUnalignedPrefix I_initblk) + i_ldc_i8, I_i64_instr (noPrefixes (fun x ->(AI_ldc (DT_I8, ILConst.I8 x)))) i_ldc_i4, I_i32_i32_instr (noPrefixes mkLdcInt32) i_ldc_i4_s, I_i32_i8_instr (noPrefixes mkLdcInt32) - i_ldc_r4, I_r4_instr (noPrefixes (fun x -> (AI_ldc (DT_R4, ILConst.R4 x)))) + i_ldc_r4, I_r4_instr (noPrefixes (fun x -> (AI_ldc (DT_R4, ILConst.R4 x)))) i_ldc_r8, I_r8_instr (noPrefixes (fun x -> (AI_ldc (DT_R8, ILConst.R8 x)))) i_ldfld, I_field_instr (volatileOrUnalignedPrefix(fun (x, y) fspec -> I_ldfld (x, y, fspec))) i_stfld, I_field_instr (volatileOrUnalignedPrefix(fun (x, y) fspec -> I_stfld (x, y, fspec))) i_ldsfld, I_field_instr (volatilePrefix (fun x fspec -> I_ldsfld (x, fspec))) i_stsfld, I_field_instr (volatilePrefix (fun x fspec -> I_stsfld (x, fspec))) i_ldflda, I_field_instr (noPrefixes I_ldflda) - i_ldsflda, I_field_instr (noPrefixes I_ldsflda) + i_ldsflda, I_field_instr (noPrefixes I_ldsflda) i_call, I_method_instr (tailPrefix (fun tl (mspec, y) -> I_call (tl, mspec, y))) i_ldftn, I_method_instr (noPrefixes (fun (mspec, _y) -> I_ldftn mspec)) i_ldvirtftn, I_method_instr (noPrefixes (fun (mspec, _y) -> I_ldvirtftn mspec)) i_newobj, I_method_instr (noPrefixes I_newobj) - i_callvirt, I_method_instr (constraintOrTailPrefix (fun (c, tl) (mspec, y) -> match c with Some ty -> I_callconstraint(tl, ty, mspec, y) | None -> I_callvirt (tl, mspec, y))) + i_callvirt, I_method_instr (constraintOrTailPrefix (fun (c, tl) (mspec, y) -> match c with Some ty -> I_callconstraint(tl, ty, mspec, y) | None -> I_callvirt (tl, mspec, y))) i_leave_s, I_unconditional_i8_instr (noPrefixes (fun x -> I_leave x)) - i_br_s, I_unconditional_i8_instr (noPrefixes I_br) + i_br_s, I_unconditional_i8_instr (noPrefixes I_br) i_leave, I_unconditional_i32_instr (noPrefixes (fun x -> I_leave x)) - i_br, I_unconditional_i32_instr (noPrefixes I_br) + i_br, I_unconditional_i32_instr (noPrefixes I_br) i_brtrue_s, I_conditional_i8_instr (noPrefixes (fun x -> I_brcmp (BI_brtrue, x))) i_brfalse_s, I_conditional_i8_instr (noPrefixes (fun x -> I_brcmp (BI_brfalse, x))) i_beq_s, I_conditional_i8_instr (noPrefixes (fun x -> I_brcmp (BI_beq, x))) @@ -539,7 +495,7 @@ let instrs () = i_bgt_un_s, I_conditional_i8_instr (noPrefixes (fun x -> I_brcmp (BI_bgt_un, x))) i_bge_s, I_conditional_i8_instr (noPrefixes (fun x -> I_brcmp (BI_bge, x))) i_bge_un_s, I_conditional_i8_instr (noPrefixes (fun x -> I_brcmp (BI_bge_un, x))) - i_bne_un_s, I_conditional_i8_instr (noPrefixes (fun x -> I_brcmp (BI_bne_un, x))) + i_bne_un_s, I_conditional_i8_instr (noPrefixes (fun x -> I_brcmp (BI_bne_un, x))) i_brtrue, I_conditional_i32_instr (noPrefixes (fun x -> I_brcmp (BI_brtrue, x))) i_brfalse, I_conditional_i32_instr (noPrefixes (fun x -> I_brcmp (BI_brfalse, x))) i_beq, I_conditional_i32_instr (noPrefixes (fun x -> I_brcmp (BI_beq, x))) @@ -551,8 +507,8 @@ let instrs () = i_bgt_un, I_conditional_i32_instr (noPrefixes (fun x -> I_brcmp (BI_bgt_un, x))) i_bge, I_conditional_i32_instr (noPrefixes (fun x -> I_brcmp (BI_bge, x))) i_bge_un, I_conditional_i32_instr (noPrefixes (fun x -> I_brcmp (BI_bge_un, x))) - i_bne_un, I_conditional_i32_instr (noPrefixes (fun x -> I_brcmp (BI_bne_un, x))) - i_ldstr, I_string_instr (noPrefixes I_ldstr) + i_bne_un, I_conditional_i32_instr (noPrefixes (fun x -> I_brcmp (BI_bne_un, x))) + i_ldstr, I_string_instr (noPrefixes I_ldstr) i_switch, I_switch_instr (noPrefixes I_switch) i_ldtoken, I_tok_instr (noPrefixes I_ldtoken) i_calli, I_sig_instr (tailPrefix (fun tl (x, y) -> I_calli (tl, x, y))) @@ -561,7 +517,7 @@ let instrs () = i_ldelema, I_type_instr (readonlyPrefix (fun ro x -> I_ldelema (ro, false, ILArrayShape.SingleDimensional, x))) i_ldelem_any, I_type_instr (noPrefixes (fun x -> I_ldelem_any (ILArrayShape.SingleDimensional, x))) i_stelem_any, I_type_instr (noPrefixes (fun x -> I_stelem_any (ILArrayShape.SingleDimensional, x))) - i_newarr, I_type_instr (noPrefixes (fun x -> I_newarr (ILArrayShape.SingleDimensional, x))) + i_newarr, I_type_instr (noPrefixes (fun x -> I_newarr (ILArrayShape.SingleDimensional, x))) i_castclass, I_type_instr (noPrefixes I_castclass) i_isinst, I_type_instr (noPrefixes I_isinst) i_unbox_any, I_type_instr (noPrefixes I_unbox_any) @@ -571,72 +527,72 @@ let instrs () = i_stobj, I_type_instr (volatileOrUnalignedPrefix (fun (x, y) z -> I_stobj (x, y, z))) i_sizeof, I_type_instr (noPrefixes I_sizeof) i_box, I_type_instr (noPrefixes I_box) - i_unbox, I_type_instr (noPrefixes I_unbox) ] + i_unbox, I_type_instr (noPrefixes I_unbox) ] -// The tables are delayed to avoid building them unnecessarily at startup -// Many applications of AbsIL (e.g. a compiler) don't need to read instructions. +// The tables are delayed to avoid building them unnecessarily at startup +// Many applications of AbsIL (e.g. a compiler) don't need to read instructions. let oneByteInstrs = ref None let twoByteInstrs = ref None -let fillInstrs () = +let fillInstrs () = let oneByteInstrTable = Array.create 256 I_invalid_instr let twoByteInstrTable = Array.create 256 I_invalid_instr - let addInstr (i, f) = - if i > 0xff then - assert (i >>>& 8 = 0xfe) + let addInstr (i, f) = + if i > 0xff then + assert (i >>>& 8 = 0xfe) let i = (i &&& 0xff) match twoByteInstrTable.[i] with | I_invalid_instr -> () | _ -> dprintn ("warning: duplicate decode entries for "+string i) twoByteInstrTable.[i] <- f - else + else match oneByteInstrTable.[i] with | I_invalid_instr -> () | _ -> dprintn ("warning: duplicate decode entries for "+string i) - oneByteInstrTable.[i] <- f + oneByteInstrTable.[i] <- f List.iter addInstr (instrs()) List.iter (fun (x, mk) -> addInstr (x, I_none_instr (noPrefixes mk))) (noArgInstrs.Force()) oneByteInstrs := Some oneByteInstrTable twoByteInstrs := Some twoByteInstrTable -let rec getOneByteInstr i = - match !oneByteInstrs with +let rec getOneByteInstr i = + match !oneByteInstrs with | None -> fillInstrs(); getOneByteInstr i | Some t -> t.[i] -let rec getTwoByteInstr i = - match !twoByteInstrs with +let rec getTwoByteInstr i = + match !twoByteInstrs with | None -> fillInstrs(); getTwoByteInstr i | Some t -> t.[i] - + //--------------------------------------------------------------------- -// +// //--------------------------------------------------------------------- type ImageChunk = { size: int32; addr: int32 } -let chunk sz next = ({addr=next; size=sz}, next + sz) +let chunk sz next = ({addr=next; size=sz}, next + sz) let nochunk next = ({addr= 0x0;size= 0x0; }, next) -type RowElementKind = - | UShort - | ULong - | Byte - | Data - | GGuid - | Blob - | SString +type RowElementKind = + | UShort + | ULong + | Byte + | Data + | GGuid + | Blob + | SString | SimpleIndex of TableName | TypeDefOrRefOrSpec | TypeOrMethodDef - | HasConstant + | HasConstant | HasCustomAttribute - | HasFieldMarshal - | HasDeclSecurity - | MemberRefParent - | HasSemantics + | HasFieldMarshal + | HasDeclSecurity + | MemberRefParent + | HasSemantics | MethodDefOrRef | MemberForwarded - | Implementation + | Implementation | CustomAttributeType | ResolutionScope @@ -687,32 +643,32 @@ let kindIllegal = RowKind [ ] // kind of element in that column. //--------------------------------------------------------------------- -let hcCompare (TaggedIndex((t1: HasConstantTag), (idx1: int))) (TaggedIndex((t2: HasConstantTag), idx2)) = +let hcCompare (TaggedIndex((t1: HasConstantTag), (idx1: int))) (TaggedIndex((t2: HasConstantTag), idx2)) = if idx1 < idx2 then -1 elif idx1 > idx2 then 1 else compare t1.Tag t2.Tag -let hsCompare (TaggedIndex((t1: HasSemanticsTag), (idx1: int))) (TaggedIndex((t2: HasSemanticsTag), idx2)) = +let hsCompare (TaggedIndex((t1: HasSemanticsTag), (idx1: int))) (TaggedIndex((t2: HasSemanticsTag), idx2)) = if idx1 < idx2 then -1 elif idx1 > idx2 then 1 else compare t1.Tag t2.Tag -let hcaCompare (TaggedIndex((t1: HasCustomAttributeTag), (idx1: int))) (TaggedIndex((t2: HasCustomAttributeTag), idx2)) = +let hcaCompare (TaggedIndex((t1: HasCustomAttributeTag), (idx1: int))) (TaggedIndex((t2: HasCustomAttributeTag), idx2)) = if idx1 < idx2 then -1 elif idx1 > idx2 then 1 else compare t1.Tag t2.Tag -let mfCompare (TaggedIndex((t1: MemberForwardedTag), (idx1: int))) (TaggedIndex((t2: MemberForwardedTag), idx2)) = +let mfCompare (TaggedIndex((t1: MemberForwardedTag), (idx1: int))) (TaggedIndex((t2: MemberForwardedTag), idx2)) = if idx1 < idx2 then -1 elif idx1 > idx2 then 1 else compare t1.Tag t2.Tag -let hdsCompare (TaggedIndex((t1: HasDeclSecurityTag), (idx1: int))) (TaggedIndex((t2: HasDeclSecurityTag), idx2)) = +let hdsCompare (TaggedIndex((t1: HasDeclSecurityTag), (idx1: int))) (TaggedIndex((t2: HasDeclSecurityTag), idx2)) = if idx1 < idx2 then -1 elif idx1 > idx2 then 1 else compare t1.Tag t2.Tag -let hfmCompare (TaggedIndex((t1: HasFieldMarshalTag), idx1)) (TaggedIndex((t2: HasFieldMarshalTag), idx2)) = +let hfmCompare (TaggedIndex((t1: HasFieldMarshalTag), idx1)) (TaggedIndex((t2: HasFieldMarshalTag), idx2)) = if idx1 < idx2 then -1 elif idx1 > idx2 then 1 else compare t1.Tag t2.Tag -let tomdCompare (TaggedIndex((t1: TypeOrMethodDefTag), idx1)) (TaggedIndex((t2: TypeOrMethodDefTag), idx2)) = +let tomdCompare (TaggedIndex((t1: TypeOrMethodDefTag), idx1)) (TaggedIndex((t2: TypeOrMethodDefTag), idx2)) = if idx1 < idx2 then -1 elif idx1 > idx2 then 1 else compare t1.Tag t2.Tag -let simpleIndexCompare (idx1: int) (idx2: int) = +let simpleIndexCompare (idx1: int) (idx2: int) = compare idx1 idx2 //--------------------------------------------------------------------- -// The various keys for the various caches. +// The various keys for the various caches. //--------------------------------------------------------------------- type TypeDefAsTypIdx = TypeDefAsTypIdx of ILBoxity * ILGenericArgs * int @@ -733,37 +689,37 @@ type GenericParamsIdx = GenericParamsIdx of numtypars: int * TypeOrMethodDefTag let mkCacheInt32 lowMem _inbase _nm _sz = if lowMem then (fun f x -> f x) else - let cache = ref null + let cache = ref null let count = ref 0 #if STATISTICS addReport (fun oc -> if !count <> 0 then oc.WriteLine ((_inbase + string !count + " "+ _nm + " cache hits"): string)) #endif fun f (idx: int32) -> - let cache = + let cache = match !cache with | null -> cache := new ConcurrentDictionary(Environment.ProcessorCount, 11) | _ -> () !cache match cache.TryGetValue idx with | true, res -> - incr count + incr count res | _ -> - let res = f idx - cache.[idx] <- res - res + let res = f idx + cache.[idx] <- res + res let mkCacheGeneric lowMem _inbase _nm _sz = if lowMem then (fun f x -> f x) else - let cache = ref null + let cache = ref null let count = ref 0 #if STATISTICS addReport (fun oc -> if !count <> 0 then oc.WriteLine ((_inbase + string !count + " " + _nm + " cache hits"): string)) #endif fun f (idx :'T) -> - let cache = + let cache = match !cache with - | null -> cache := new ConcurrentDictionary<_, _>(Environment.ProcessorCount, 11 (* sz: int *) ) + | null -> cache := new ConcurrentDictionary<_, _>(Environment.ProcessorCount, 11 (* sz: int *) ) | _ -> () !cache match cache.TryGetValue idx with @@ -781,96 +737,96 @@ let mkCacheGeneric lowMem _inbase _nm _sz = let seekFindRow numRows rowChooser = let mutable i = 1 - while (i <= numRows && not (rowChooser i)) do + while (i <= numRows && not (rowChooser i)) do i <- i + 1 if i > numRows then dprintn "warning: seekFindRow: row not found" - i + i -// search for rows satisfying predicate +// search for rows satisfying predicate let seekReadIndexedRows (numRows, rowReader, keyFunc, keyComparer, binaryChop, rowConverter) = if binaryChop then let mutable low = 0 let mutable high = numRows + 1 - begin + begin let mutable fin = false - while not fin do - if high - low <= 1 then - fin <- true - else + while not fin do + if high - low <= 1 then + fin <- true + else let mid = (low + high) / 2 let midrow = rowReader mid let c = keyComparer (keyFunc midrow) - if c > 0 then + if c > 0 then low <- mid - elif c < 0 then - high <- mid - else + elif c < 0 then + high <- mid + else fin <- true end let mutable res = [] - if high - low > 1 then - // now read off rows, forward and backwards + if high - low > 1 then + // now read off rows, forward and backwards let mid = (low + high) / 2 - // read forward + // read forward let mutable fin = false let mutable curr = mid - while not fin do - if curr > numRows then + while not fin do + if curr > numRows then fin <- true - else + else let currrow = rowReader curr - if keyComparer (keyFunc currrow) = 0 then + if keyComparer (keyFunc currrow) = 0 then res <- rowConverter currrow :: res - else + else fin <- true curr <- curr + 1 res <- List.rev res - // read backwards + // read backwards let mutable fin = false let mutable curr = mid - 1 - while not fin do - if curr = 0 then + while not fin do + if curr = 0 then fin <- true - else + else let currrow = rowReader curr - if keyComparer (keyFunc currrow) = 0 then + if keyComparer (keyFunc currrow) = 0 then res <- rowConverter currrow :: res - else + else fin <- true curr <- curr - 1 - // sanity check + // sanity check #if CHECKING - if checking then - let res2 = + if checking then + let res2 = [ for i = 1 to numRows do let rowinfo = rowReader i - if keyComparer (keyFunc rowinfo) = 0 then + if keyComparer (keyFunc rowinfo) = 0 then yield rowConverter rowinfo ] - if (res2 <> res) then + if (res2 <> res) then failwith ("results of binary search did not match results of linear search: linear search produced "+string res2.Length+", binary search produced "+string res.Length) #endif - + res - else + else let res = ref [] for i = 1 to numRows do let rowinfo = rowReader i - if keyComparer (keyFunc rowinfo) = 0 then + if keyComparer (keyFunc rowinfo) = 0 then res := rowConverter rowinfo :: !res List.rev !res let seekReadOptionalIndexedRow info = - match seekReadIndexedRows info with + match seekReadIndexedRows info with | [k] -> Some k | [] -> None - | h :: _ -> - dprintn ("multiple rows found when indexing table") - Some h - + | h :: _ -> + dprintn ("multiple rows found when indexing table") + Some h + let seekReadIndexedRow info = - match seekReadOptionalIndexedRow info with + match seekReadOptionalIndexedRow info with | Some row -> row | None -> failwith ("no row found for key when indexing table") @@ -882,7 +838,7 @@ type MethodData = MethodData of enclTy: ILType * ILCallingConv * name: string * type VarArgMethodData = VarArgMethodData of enclTy: ILType * ILCallingConv * name: string * argtys: ILTypes * ILVarArgs * retty: ILType * minst: ILTypes [] -type PEReader = +type PEReader = { fileName: string #if FX_NO_PDB_READER pdb: obj option @@ -891,7 +847,7 @@ type PEReader = #endif entryPointToken: TableName * int pefile: BinaryFile - textSegmentPhysicalLoc: int32 + textSegmentPhysicalLoc: int32 textSegmentPhysicalSize: int32 dataSegmentPhysicalLoc: int32 dataSegmentPhysicalSize: int32 @@ -907,14 +863,14 @@ type PEReader = } [] -type ILMetadataReader = +type ILMetadataReader = { sorted: int64 mdfile: BinaryFile pectxtCaptured: PEReader option // only set when reading full PE including code etc. for static linking entryPointToken: TableName * int dataEndPoints: Lazy fileName: string - getNumRows: TableName -> int + getNumRows: TableName -> int userStringsStreamPhysicalLoc: int32 stringsStreamPhysicalLoc: int32 blobsStreamPhysicalLoc: int32 @@ -926,22 +882,22 @@ type ILMetadataReader = guidsStreamPhysicalLoc: int32 rowAddr: (TableName -> int -> int32) tableBigness: bool [] - rsBigness: bool + rsBigness: bool tdorBigness: bool - tomdBigness: bool - hcBigness: bool - hcaBigness: bool - hfmBigness: bool - hdsBigness: bool - mrpBigness: bool - hsBigness: bool - mdorBigness: bool - mfBigness: bool - iBigness: bool - catBigness: bool - stringsBigness: bool - guidsBigness: bool - blobsBigness: bool + tomdBigness: bool + hcBigness: bool + hcaBigness: bool + hfmBigness: bool + hdsBigness: bool + mrpBigness: bool + hsBigness: bool + mdorBigness: bool + mfBigness: bool + iBigness: bool + catBigness: bool + stringsBigness: bool + guidsBigness: bool + blobsBigness: bool seekReadNestedRow: int -> int * int seekReadConstantRow: int -> uint16 * TaggedIndex * int32 seekReadMethodSemanticsRow: int -> int32 * int * TaggedIndex @@ -955,7 +911,7 @@ type ILMetadataReader = seekReadTypeRefAsType: TypeRefAsTypIdx -> ILType readBlobHeapAsPropertySig: BlobAsPropSigIdx -> ILThisConvention * ILType * ILTypes readBlobHeapAsFieldSig: BlobAsFieldSigIdx -> ILType - readBlobHeapAsMethodSig: BlobAsMethodSigIdx -> bool * int32 * ILCallingConv * ILType * ILTypes * ILVarArgs + readBlobHeapAsMethodSig: BlobAsMethodSigIdx -> bool * int32 * ILCallingConv * ILType * ILTypes * ILVarArgs readBlobHeapAsLocalsSig: BlobAsLocalSigIdx -> ILLocal list seekReadTypeDefAsType: TypeDefAsTypIdx -> ILType seekReadMethodDefAsMethodData: int -> MethodData @@ -990,61 +946,61 @@ let seekReadIndexedRowsByInterface numRows binaryChop (reader: ISeekReadIndexedR let mutable high = numRows + 1 let mutable fin = false - while not fin do - if high - low <= 1 then - fin <- true - else + while not fin do + if high - low <= 1 then + fin <- true + else let mid = (low + high) / 2 reader.GetRow(mid, &row) let c = reader.CompareKey(reader.GetKey(&row)) - if c > 0 then + if c > 0 then low <- mid - elif c < 0 then - high <- mid - else + elif c < 0 then + high <- mid + else fin <- true let res = ImmutableArray.CreateBuilder() - if high - low > 1 then - // now read off rows, forward and backwards + if high - low > 1 then + // now read off rows, forward and backwards let mid = (low + high) / 2 - // read backwards + // read backwards let mutable fin = false let mutable curr = mid - 1 - while not fin do - if curr = 0 then + while not fin do + if curr = 0 then fin <- true - else + else reader.GetRow(curr, &row) if reader.CompareKey(reader.GetKey(&row)) = 0 then res.Add(reader.ConvertRow(&row)) - else + else fin <- true curr <- curr - 1 res.Reverse() - // read forward + // read forward let mutable fin = false let mutable curr = mid - while not fin do - if curr > numRows then + while not fin do + if curr > numRows then fin <- true - else + else reader.GetRow(curr, &row) if reader.CompareKey(reader.GetKey(&row)) = 0 then res.Add(reader.ConvertRow(&row)) - else + else fin <- true curr <- curr + 1 res.ToArray() - else + else let res = ImmutableArray.CreateBuilder() for i = 1 to numRows do reader.GetRow(i, &row) - if reader.CompareKey(reader.GetKey(&row)) = 0 then + if reader.CompareKey(reader.GetKey(&row)) = 0 then res.Add(reader.ConvertRow(&row)) res.ToArray() @@ -1054,35 +1010,35 @@ type CustomAttributeRow = val mutable typeIndex: TaggedIndex val mutable valueIndex: int -let seekReadUInt16Adv mdv (addr: byref) = +let seekReadUInt16Adv mdv (addr: byref) = let res = seekReadUInt16 mdv addr addr <- addr + 2 res -let seekReadInt32Adv mdv (addr: byref) = +let seekReadInt32Adv mdv (addr: byref) = let res = seekReadInt32 mdv addr addr <- addr+4 res -let seekReadUInt16AsInt32Adv mdv (addr: byref) = +let seekReadUInt16AsInt32Adv mdv (addr: byref) = let res = seekReadUInt16AsInt32 mdv addr addr <- addr+2 res -let inline seekReadTaggedIdx f nbits big mdv (addr: byref) = - let tok = if big then seekReadInt32Adv mdv &addr else seekReadUInt16AsInt32Adv mdv &addr +let inline seekReadTaggedIdx f nbits big mdv (addr: byref) = + let tok = if big then seekReadInt32Adv mdv &addr else seekReadUInt16AsInt32Adv mdv &addr tokToTaggedIdx f nbits tok -let seekReadIdx big mdv (addr: byref) = +let seekReadIdx big mdv (addr: byref) = if big then seekReadInt32Adv mdv &addr else seekReadUInt16AsInt32Adv mdv &addr -let seekReadUntaggedIdx (tab: TableName) (ctxt: ILMetadataReader) mdv (addr: byref) = +let seekReadUntaggedIdx (tab: TableName) (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadIdx ctxt.tableBigness.[tab.Index] mdv &addr let seekReadResolutionScopeIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkResolutionScopeTag 2 ctxt.rsBigness mdv &addr -let seekReadTypeDefOrRefOrSpecIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkTypeDefOrRefOrSpecTag 2 ctxt.tdorBigness mdv &addr +let seekReadTypeDefOrRefOrSpecIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkTypeDefOrRefOrSpecTag 2 ctxt.tdorBigness mdv &addr let seekReadTypeOrMethodDefIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkTypeOrMethodDefTag 1 ctxt.tomdBigness mdv &addr -let seekReadHasConstantIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkHasConstantTag 2 ctxt.hcBigness mdv &addr +let seekReadHasConstantIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkHasConstantTag 2 ctxt.hcBigness mdv &addr let seekReadHasCustomAttributeIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkHasCustomAttributeTag 5 ctxt.hcaBigness mdv &addr let seekReadHasFieldMarshalIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkHasFieldMarshalTag 1 ctxt.hfmBigness mdv &addr let seekReadHasDeclSecurityIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkHasDeclSecurityTag 2 ctxt.hdsBigness mdv &addr @@ -1091,10 +1047,10 @@ let seekReadHasSemanticsIdx (ctxt: ILMetadataReader) mdv (addr: byref) = se let seekReadMethodDefOrRefIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkMethodDefOrRefTag 1 ctxt.mdorBigness mdv &addr let seekReadMemberForwardedIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkMemberForwardedTag 1 ctxt.mfBigness mdv &addr let seekReadImplementationIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkImplementationTag 2 ctxt.iBigness mdv &addr -let seekReadCustomAttributeTypeIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkILCustomAttributeTypeTag 3 ctxt.catBigness mdv &addr +let seekReadCustomAttributeTypeIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkILCustomAttributeTypeTag 3 ctxt.catBigness mdv &addr let seekReadStringIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadIdx ctxt.stringsBigness mdv &addr let seekReadGuidIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadIdx ctxt.guidsBigness mdv &addr -let seekReadBlobIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadIdx ctxt.blobsBigness mdv &addr +let seekReadBlobIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadIdx ctxt.blobsBigness mdv &addr let seekReadModuleRow (ctxt: ILMetadataReader) mdv idx = if idx = 0 then failwith "cannot read Module table row 0" @@ -1104,7 +1060,7 @@ let seekReadModuleRow (ctxt: ILMetadataReader) mdv idx = let mvidIdx = seekReadGuidIdx ctxt mdv &addr let encidIdx = seekReadGuidIdx ctxt mdv &addr let encbaseidIdx = seekReadGuidIdx ctxt mdv &addr - (generation, nameIdx, mvidIdx, encidIdx, encbaseidIdx) + (generation, nameIdx, mvidIdx, encidIdx, encbaseidIdx) /// Read Table ILTypeRef. let seekReadTypeRefRow (ctxt: ILMetadataReader) mdv idx = @@ -1112,7 +1068,7 @@ let seekReadTypeRefRow (ctxt: ILMetadataReader) mdv idx = let scopeIdx = seekReadResolutionScopeIdx ctxt mdv &addr let nameIdx = seekReadStringIdx ctxt mdv &addr let namespaceIdx = seekReadStringIdx ctxt mdv &addr - (scopeIdx, nameIdx, namespaceIdx) + (scopeIdx, nameIdx, namespaceIdx) /// Read Table ILTypeDef. let seekReadTypeDefRow (ctxt: ILMetadataReader) idx = ctxt.seekReadTypeDefRow idx @@ -1126,7 +1082,7 @@ let seekReadTypeDefRowUncached ctxtH idx = let extendsIdx = seekReadTypeDefOrRefOrSpecIdx ctxt mdv &addr let fieldsIdx = seekReadUntaggedIdx TableNames.Field ctxt mdv &addr let methodsIdx = seekReadUntaggedIdx TableNames.Method ctxt mdv &addr - (flags, nameIdx, namespaceIdx, extendsIdx, fieldsIdx, methodsIdx) + (flags, nameIdx, namespaceIdx, extendsIdx, fieldsIdx, methodsIdx) /// Read Table Field. let seekReadFieldRow (ctxt: ILMetadataReader) mdv idx = @@ -1134,7 +1090,7 @@ let seekReadFieldRow (ctxt: ILMetadataReader) mdv idx = let flags = seekReadUInt16AsInt32Adv mdv &addr let nameIdx = seekReadStringIdx ctxt mdv &addr let typeIdx = seekReadBlobIdx ctxt mdv &addr - (flags, nameIdx, typeIdx) + (flags, nameIdx, typeIdx) /// Read Table Method. let seekReadMethodRow (ctxt: ILMetadataReader) mdv idx = @@ -1145,7 +1101,7 @@ let seekReadMethodRow (ctxt: ILMetadataReader) mdv idx = let nameIdx = seekReadStringIdx ctxt mdv &addr let typeIdx = seekReadBlobIdx ctxt mdv &addr let paramIdx = seekReadUntaggedIdx TableNames.Param ctxt mdv &addr - (codeRVA, implflags, flags, nameIdx, typeIdx, paramIdx) + (codeRVA, implflags, flags, nameIdx, typeIdx, paramIdx) /// Read Table Param. let seekReadParamRow (ctxt: ILMetadataReader) mdv idx = @@ -1153,10 +1109,10 @@ let seekReadParamRow (ctxt: ILMetadataReader) mdv idx = let flags = seekReadUInt16AsInt32Adv mdv &addr let seq = seekReadUInt16AsInt32Adv mdv &addr let nameIdx = seekReadStringIdx ctxt mdv &addr - (flags, seq, nameIdx) + (flags, seq, nameIdx) /// Read Table InterfaceImpl. -let seekReadInterfaceImplRow (ctxt: ILMetadataReader) mdv idx = +let seekReadInterfaceImplRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.InterfaceImpl idx let tidx = seekReadUntaggedIdx TableNames.TypeDef ctxt mdv &addr let intfIdx = seekReadTypeDefOrRefOrSpecIdx ctxt mdv &addr @@ -1168,7 +1124,7 @@ let seekReadMemberRefRow (ctxt: ILMetadataReader) mdv idx = let mrpIdx = seekReadMemberRefParentIdx ctxt mdv &addr let nameIdx = seekReadStringIdx ctxt mdv &addr let typeIdx = seekReadBlobIdx ctxt mdv &addr - (mrpIdx, nameIdx, typeIdx) + (mrpIdx, nameIdx, typeIdx) /// Read Table Constant. let seekReadConstantRow (ctxt: ILMetadataReader) idx = ctxt.seekReadConstantRow idx @@ -1189,7 +1145,7 @@ let seekReadCustomAttributeRow (ctxt: ILMetadataReader) mdv idx (attrRow: byref< attrRow.valueIndex <- seekReadBlobIdx ctxt mdv &addr /// Read Table FieldMarshal. -let seekReadFieldMarshalRow (ctxt: ILMetadataReader) mdv idx = +let seekReadFieldMarshalRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.FieldMarshal idx let parentIdx = seekReadHasFieldMarshalIdx ctxt mdv &addr let typeIdx = seekReadBlobIdx ctxt mdv &addr @@ -1201,58 +1157,58 @@ let seekReadPermissionRow (ctxt: ILMetadataReader) mdv idx = let action = seekReadUInt16Adv mdv &addr let parentIdx = seekReadHasDeclSecurityIdx ctxt mdv &addr let typeIdx = seekReadBlobIdx ctxt mdv &addr - (action, parentIdx, typeIdx) + (action, parentIdx, typeIdx) -/// Read Table ClassLayout. +/// Read Table ClassLayout. let seekReadClassLayoutRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.ClassLayout idx let pack = seekReadUInt16Adv mdv &addr let size = seekReadInt32Adv mdv &addr let tidx = seekReadUntaggedIdx TableNames.TypeDef ctxt mdv &addr - (pack, size, tidx) + (pack, size, tidx) -/// Read Table FieldLayout. +/// Read Table FieldLayout. let seekReadFieldLayoutRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.FieldLayout idx let offset = seekReadInt32Adv mdv &addr let fidx = seekReadUntaggedIdx TableNames.Field ctxt mdv &addr - (offset, fidx) + (offset, fidx) -//// Read Table StandAloneSig. +//// Read Table StandAloneSig. let seekReadStandAloneSigRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.StandAloneSig idx let sigIdx = seekReadBlobIdx ctxt mdv &addr sigIdx -/// Read Table EventMap. +/// Read Table EventMap. let seekReadEventMapRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.EventMap idx let tidx = seekReadUntaggedIdx TableNames.TypeDef ctxt mdv &addr let eventsIdx = seekReadUntaggedIdx TableNames.Event ctxt mdv &addr - (tidx, eventsIdx) + (tidx, eventsIdx) -/// Read Table Event. +/// Read Table Event. let seekReadEventRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.Event idx let flags = seekReadUInt16AsInt32Adv mdv &addr let nameIdx = seekReadStringIdx ctxt mdv &addr let typIdx = seekReadTypeDefOrRefOrSpecIdx ctxt mdv &addr - (flags, nameIdx, typIdx) - -/// Read Table PropertyMap. -let seekReadPropertyMapRow (ctxt: ILMetadataReader) mdv idx = + (flags, nameIdx, typIdx) + +/// Read Table PropertyMap. +let seekReadPropertyMapRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.PropertyMap idx let tidx = seekReadUntaggedIdx TableNames.TypeDef ctxt mdv &addr let propsIdx = seekReadUntaggedIdx TableNames.Property ctxt mdv &addr (tidx, propsIdx) -/// Read Table Property. +/// Read Table Property. let seekReadPropertyRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.Property idx let flags = seekReadUInt16AsInt32Adv mdv &addr let nameIdx = seekReadStringIdx ctxt mdv &addr let typIdx = seekReadBlobIdx ctxt mdv &addr - (flags, nameIdx, typIdx) + (flags, nameIdx, typIdx) /// Read Table MethodSemantics. let seekReadMethodSemanticsRow (ctxt: ILMetadataReader) idx = ctxt.seekReadMethodSemanticsRow idx @@ -1271,19 +1227,19 @@ let seekReadMethodImplRow (ctxt: ILMetadataReader) mdv idx = let tidx = seekReadUntaggedIdx TableNames.TypeDef ctxt mdv &addr let mbodyIdx = seekReadMethodDefOrRefIdx ctxt mdv &addr let mdeclIdx = seekReadMethodDefOrRefIdx ctxt mdv &addr - (tidx, mbodyIdx, mdeclIdx) + (tidx, mbodyIdx, mdeclIdx) /// Read Table ILModuleRef. let seekReadModuleRefRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.ModuleRef idx let nameIdx = seekReadStringIdx ctxt mdv &addr - nameIdx + nameIdx /// Read Table ILTypeSpec. let seekReadTypeSpecRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.TypeSpec idx let blobIdx = seekReadBlobIdx ctxt mdv &addr - blobIdx + blobIdx /// Read Table ImplMap. let seekReadImplMapRow (ctxt: ILMetadataReader) mdv idx = @@ -1292,14 +1248,14 @@ let seekReadImplMapRow (ctxt: ILMetadataReader) mdv idx = let forwrdedIdx = seekReadMemberForwardedIdx ctxt mdv &addr let nameIdx = seekReadStringIdx ctxt mdv &addr let scopeIdx = seekReadUntaggedIdx TableNames.ModuleRef ctxt mdv &addr - (flags, forwrdedIdx, nameIdx, scopeIdx) + (flags, forwrdedIdx, nameIdx, scopeIdx) /// Read Table FieldRVA. let seekReadFieldRVARow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.FieldRVA idx let rva = seekReadInt32Adv mdv &addr let fidx = seekReadUntaggedIdx TableNames.Field ctxt mdv &addr - (rva, fidx) + (rva, fidx) /// Read Table Assembly. let seekReadAssemblyRow (ctxt: ILMetadataReader) mdv idx = @@ -1327,7 +1283,7 @@ let seekReadAssemblyRefRow (ctxt: ILMetadataReader) mdv idx = let nameIdx = seekReadStringIdx ctxt mdv &addr let localeIdx = seekReadStringIdx ctxt mdv &addr let hashValueIdx = seekReadBlobIdx ctxt mdv &addr - (v1, v2, v3, v4, flags, publicKeyOrTokenIdx, nameIdx, localeIdx, hashValueIdx) + (v1, v2, v3, v4, flags, publicKeyOrTokenIdx, nameIdx, localeIdx, hashValueIdx) /// Read Table File. let seekReadFileRow (ctxt: ILMetadataReader) mdv idx = @@ -1335,7 +1291,7 @@ let seekReadFileRow (ctxt: ILMetadataReader) mdv idx = let flags = seekReadInt32Adv mdv &addr let nameIdx = seekReadStringIdx ctxt mdv &addr let hashValueIdx = seekReadBlobIdx ctxt mdv &addr - (flags, nameIdx, hashValueIdx) + (flags, nameIdx, hashValueIdx) /// Read Table ILExportedTypeOrForwarder. let seekReadExportedTypeRow (ctxt: ILMetadataReader) mdv idx = @@ -1345,7 +1301,7 @@ let seekReadExportedTypeRow (ctxt: ILMetadataReader) mdv idx = let nameIdx = seekReadStringIdx ctxt mdv &addr let namespaceIdx = seekReadStringIdx ctxt mdv &addr let implIdx = seekReadImplementationIdx ctxt mdv &addr - (flags, tok, nameIdx, namespaceIdx, implIdx) + (flags, tok, nameIdx, namespaceIdx, implIdx) /// Read Table ManifestResource. let seekReadManifestResourceRow (ctxt: ILMetadataReader) mdv idx = @@ -1354,7 +1310,7 @@ let seekReadManifestResourceRow (ctxt: ILMetadataReader) mdv idx = let flags = seekReadInt32Adv mdv &addr let nameIdx = seekReadStringIdx ctxt mdv &addr let implIdx = seekReadImplementationIdx ctxt mdv &addr - (offset, flags, nameIdx, implIdx) + (offset, flags, nameIdx, implIdx) /// Read Table Nested. let seekReadNestedRow (ctxt: ILMetadataReader) idx = ctxt.seekReadNestedRow idx @@ -1373,88 +1329,90 @@ let seekReadGenericParamRow (ctxt: ILMetadataReader) mdv idx = let flags = seekReadUInt16Adv mdv &addr let ownerIdx = seekReadTypeOrMethodDefIdx ctxt mdv &addr let nameIdx = seekReadStringIdx ctxt mdv &addr - (idx, seq, flags, ownerIdx, nameIdx) + (idx, seq, flags, ownerIdx, nameIdx) // Read Table GenericParamConstraint. let seekReadGenericParamConstraintRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.GenericParamConstraint idx let pidx = seekReadUntaggedIdx TableNames.GenericParam ctxt mdv &addr let constraintIdx = seekReadTypeDefOrRefOrSpecIdx ctxt mdv &addr - (pidx, constraintIdx) + (pidx, constraintIdx) /// Read Table ILMethodSpec. let seekReadMethodSpecRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.MethodSpec idx let mdorIdx = seekReadMethodDefOrRefIdx ctxt mdv &addr let instIdx = seekReadBlobIdx ctxt mdv &addr - (mdorIdx, instIdx) + (mdorIdx, instIdx) -let readUserStringHeapUncached ctxtH idx = +let readUserStringHeapUncached ctxtH idx = let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() seekReadUserString mdv (ctxt.userStringsStreamPhysicalLoc + idx) -let readUserStringHeap (ctxt: ILMetadataReader) idx = ctxt.readUserStringHeap idx +let readUserStringHeap (ctxt: ILMetadataReader) idx = ctxt.readUserStringHeap idx -let readStringHeapUncached ctxtH idx = +let readStringHeapUncached ctxtH idx = let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() - seekReadUTF8String mdv (ctxt.stringsStreamPhysicalLoc + idx) + seekReadUTF8String mdv (ctxt.stringsStreamPhysicalLoc + idx) + +let readStringHeap (ctxt: ILMetadataReader) idx = ctxt.readStringHeap idx -let readStringHeap (ctxt: ILMetadataReader) idx = ctxt.readStringHeap idx +let readStringHeapOption (ctxt: ILMetadataReader) idx = if idx = 0 then None else Some (readStringHeap ctxt idx) -let readStringHeapOption (ctxt: ILMetadataReader) idx = if idx = 0 then None else Some (readStringHeap ctxt idx) +let emptyByteArray: byte[] = [||] -let readBlobHeapUncached ctxtH idx = +let readBlobHeapUncached ctxtH idx = let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() // valid index lies in range [1..streamSize) // NOTE: idx cannot be 0 - Blob\String heap has first empty element that mdv one byte 0 - if idx <= 0 || idx >= ctxt.blobsStreamSize then [| |] - else seekReadBlob mdv (ctxt.blobsStreamPhysicalLoc + idx) - -let readBlobHeap (ctxt: ILMetadataReader) idx = ctxt.readBlobHeap idx - -let readBlobHeapOption ctxt idx = if idx = 0 then None else Some (readBlobHeap ctxt idx) - -//let readGuidHeap ctxt idx = seekReadGuid ctxt.mdv (ctxt.guidsStreamPhysicalLoc + idx) - -// read a single value out of a blob heap using the given function -let readBlobHeapAsBool ctxt vidx = fst (sigptrGetBool (readBlobHeap ctxt vidx) 0) -let readBlobHeapAsSByte ctxt vidx = fst (sigptrGetSByte (readBlobHeap ctxt vidx) 0) -let readBlobHeapAsInt16 ctxt vidx = fst (sigptrGetInt16 (readBlobHeap ctxt vidx) 0) -let readBlobHeapAsInt32 ctxt vidx = fst (sigptrGetInt32 (readBlobHeap ctxt vidx) 0) -let readBlobHeapAsInt64 ctxt vidx = fst (sigptrGetInt64 (readBlobHeap ctxt vidx) 0) -let readBlobHeapAsByte ctxt vidx = fst (sigptrGetByte (readBlobHeap ctxt vidx) 0) -let readBlobHeapAsUInt16 ctxt vidx = fst (sigptrGetUInt16 (readBlobHeap ctxt vidx) 0) -let readBlobHeapAsUInt32 ctxt vidx = fst (sigptrGetUInt32 (readBlobHeap ctxt vidx) 0) -let readBlobHeapAsUInt64 ctxt vidx = fst (sigptrGetUInt64 (readBlobHeap ctxt vidx) 0) -let readBlobHeapAsSingle ctxt vidx = fst (sigptrGetSingle (readBlobHeap ctxt vidx) 0) -let readBlobHeapAsDouble ctxt vidx = fst (sigptrGetDouble (readBlobHeap ctxt vidx) 0) - + if idx <= 0 || idx >= ctxt.blobsStreamSize then emptyByteArray + else seekReadBlob mdv (ctxt.blobsStreamPhysicalLoc + idx) + +let readBlobHeap (ctxt: ILMetadataReader) idx = ctxt.readBlobHeap idx + +let readBlobHeapOption ctxt idx = if idx = 0 then None else Some (readBlobHeap ctxt idx) + +//let readGuidHeap ctxt idx = seekReadGuid ctxt.mdv (ctxt.guidsStreamPhysicalLoc + idx) + +// read a single value out of a blob heap using the given function +let readBlobHeapAsBool ctxt vidx = fst (sigptrGetBool (readBlobHeap ctxt vidx) 0) +let readBlobHeapAsSByte ctxt vidx = fst (sigptrGetSByte (readBlobHeap ctxt vidx) 0) +let readBlobHeapAsInt16 ctxt vidx = fst (sigptrGetInt16 (readBlobHeap ctxt vidx) 0) +let readBlobHeapAsInt32 ctxt vidx = fst (sigptrGetInt32 (readBlobHeap ctxt vidx) 0) +let readBlobHeapAsInt64 ctxt vidx = fst (sigptrGetInt64 (readBlobHeap ctxt vidx) 0) +let readBlobHeapAsByte ctxt vidx = fst (sigptrGetByte (readBlobHeap ctxt vidx) 0) +let readBlobHeapAsUInt16 ctxt vidx = fst (sigptrGetUInt16 (readBlobHeap ctxt vidx) 0) +let readBlobHeapAsUInt32 ctxt vidx = fst (sigptrGetUInt32 (readBlobHeap ctxt vidx) 0) +let readBlobHeapAsUInt64 ctxt vidx = fst (sigptrGetUInt64 (readBlobHeap ctxt vidx) 0) +let readBlobHeapAsSingle ctxt vidx = fst (sigptrGetSingle (readBlobHeap ctxt vidx) 0) +let readBlobHeapAsDouble ctxt vidx = fst (sigptrGetDouble (readBlobHeap ctxt vidx) 0) + //----------------------------------------------------------------------- -// Some binaries have raw data embedded their text sections, e.g. mscorlib, for -// field inits. And there is no information that definitively tells us the extent of -// the text section that may be interesting data. But we certainly don't want to duplicate -// the entire text section as data! -// -// So, we assume: -// 1. no part of the metadata is double-used for raw data -// 2. the data bits are all the bits of the text section -// that stretch from a Field or Resource RVA to one of -// (a) the next Field or resource RVA -// (b) a MethodRVA -// (c) the start of the metadata -// (d) the end of a section +// Some binaries have raw data embedded their text sections, e.g. mscorlib, for +// field inits. And there is no information that definitively tells us the extent of +// the text section that may be interesting data. But we certainly don't want to duplicate +// the entire text section as data! +// +// So, we assume: +// 1. no part of the metadata is double-used for raw data +// 2. the data bits are all the bits of the text section +// that stretch from a Field or Resource RVA to one of +// (a) the next Field or resource RVA +// (b) a MethodRVA +// (c) the start of the metadata +// (d) the end of a section // (e) the start of the native resources attached to the binary if any // ----------------------------------------------------------------------*) // noFileOnDisk indicates that the PE file was read from Memory using OpenILModuleReaderFromBytes // For example the assembly came from a type provider // In this case we eagerly read the native resources into memory -let readNativeResources (pectxt: PEReader) = - [ if pectxt.nativeResourcesSize <> 0x0 && pectxt.nativeResourcesAddr <> 0x0 then +let readNativeResources (pectxt: PEReader) = + [ if pectxt.nativeResourcesSize <> 0x0 && pectxt.nativeResourcesAddr <> 0x0 then let start = pectxt.anyV2P (pectxt.fileName + ": native resources", pectxt.nativeResourcesAddr) if pectxt.noFileOnDisk then let unlinkedResource = @@ -1465,36 +1423,36 @@ let readNativeResources (pectxt: PEReader) = yield ILNativeResource.In (pectxt.fileName, pectxt.nativeResourcesAddr, start, pectxt.nativeResourcesSize ) ] -let getDataEndPointsDelayed (pectxt: PEReader) ctxtH = +let getDataEndPointsDelayed (pectxt: PEReader) ctxtH = lazy let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() - let dataStartPoints = + let dataStartPoints = let res = ref [] for i = 1 to ctxt.getNumRows TableNames.FieldRVA do let rva, _fidx = seekReadFieldRVARow ctxt mdv i res := ("field", rva) :: !res for i = 1 to ctxt.getNumRows TableNames.ManifestResource do let (offset, _, _, TaggedIndex(_tag, idx)) = seekReadManifestResourceRow ctxt mdv i - if idx = 0 then + if idx = 0 then let rva = pectxt.resourcesAddr + offset res := ("manifest resource", rva) :: !res !res - if isNil dataStartPoints then [] + if isNil dataStartPoints then [] else - let methodRVAs = + let methodRVAs = let res = ref [] for i = 1 to ctxt.getNumRows TableNames.Method do let (rva, _, _, nameIdx, _, _) = seekReadMethodRow ctxt mdv i - if rva <> 0 then + if rva <> 0 then let nm = readStringHeap ctxt nameIdx res := (nm, rva) :: !res !res - ([ pectxt.textSegmentPhysicalLoc + pectxt.textSegmentPhysicalSize - pectxt.dataSegmentPhysicalLoc + pectxt.dataSegmentPhysicalSize ] - @ - (List.map pectxt.anyV2P - (dataStartPoints + ([ pectxt.textSegmentPhysicalLoc + pectxt.textSegmentPhysicalSize + pectxt.dataSegmentPhysicalLoc + pectxt.dataSegmentPhysicalSize ] + @ + (List.map pectxt.anyV2P + (dataStartPoints @ [for (virtAddr, _virtSize, _physLoc) in pectxt.sectionHeaders do yield ("section start", virtAddr) done] @ [("md", pectxt.metadataAddr)] @ (if pectxt.nativeResourcesAddr = 0x0 then [] else [("native resources", pectxt.nativeResourcesAddr) ]) @@ -1503,30 +1461,30 @@ let getDataEndPointsDelayed (pectxt: PEReader) ctxtH = @ (if pectxt.vtableFixupsAddr = 0x0 then [] else [("managed vtable_fixups", pectxt.vtableFixupsAddr) ]) @ methodRVAs))) |> List.distinct - |> List.sort - + |> List.sort + -let rvaToData (ctxt: ILMetadataReader) (pectxt: PEReader) nm rva = +let rvaToData (ctxt: ILMetadataReader) (pectxt: PEReader) nm rva = if rva = 0x0 then failwith "rva is zero" let start = pectxt.anyV2P (nm, rva) let endPoints = (Lazy.force ctxt.dataEndPoints) - let rec look l = - match l with - | [] -> - failwithf "find_text_data_extent: none found for fileName=%s, name=%s, rva=0x%08x, start=0x%08x" ctxt.fileName nm rva start - | e :: t -> - if start < e then + let rec look l = + match l with + | [] -> + failwithf "find_text_data_extent: none found for fileName=%s, name=%s, rva=0x%08x, start=0x%08x" ctxt.fileName nm rva start + | e :: t -> + if start < e then let pev = pectxt.pefile.GetView() seekReadBytes pev start (e - start) else look t look endPoints - + //----------------------------------------------------------------------- // Read the AbsIL structure (lazily) by reading off the relevant rows. // ---------------------------------------------------------------------- -let isSorted (ctxt: ILMetadataReader) (tab: TableName) = ((ctxt.sorted &&& (int64 1 <<< tab.Index)) <> int64 0x0) +let isSorted (ctxt: ILMetadataReader) (tab: TableName) = ((ctxt.sorted &&& (int64 1 <<< tab.Index)) <> int64 0x0) // Note, pectxtEager and pevEager must not be captured by the results of this function let rec seekReadModule (ctxt: ILMetadataReader) canReduceMemory (pectxtEager: PEReader) pevEager peinfo ilMetadataVersion idx = @@ -1537,7 +1495,7 @@ let rec seekReadModule (ctxt: ILMetadataReader) canReduceMemory (pectxtEager: PE let nativeResources = readNativeResources pectxtEager { Manifest = - if ctxt.getNumRows TableNames.Assembly > 0 then Some (seekReadAssemblyManifest ctxt pectxtEager 1) + if ctxt.getNumRows TableNames.Assembly > 0 then Some (seekReadAssemblyManifest ctxt pectxtEager 1) else None CustomAttrsStored = ctxt.customAttrsReader_Module MetadataIndex = idx @@ -1558,22 +1516,22 @@ let rec seekReadModule (ctxt: ILMetadataReader) canReduceMemory (pectxtEager: PE PhysicalAlignment = alignPhys ImageBase = imageBaseReal MetadataVersion = ilMetadataVersion - Resources = seekReadManifestResources ctxt canReduceMemory mdv pectxtEager pevEager } + Resources = seekReadManifestResources ctxt canReduceMemory mdv pectxtEager pevEager } and seekReadAssemblyManifest (ctxt: ILMetadataReader) pectxt idx = let mdview = ctxt.mdfile.GetView() let (hash, v1, v2, v3, v4, flags, publicKeyIdx, nameIdx, localeIdx) = seekReadAssemblyRow ctxt mdview idx let name = readStringHeap ctxt nameIdx let pubkey = readBlobHeapOption ctxt publicKeyIdx - { Name= name + { Name= name AuxModuleHashAlgorithm=hash SecurityDeclsStored= ctxt.securityDeclsReader_Assembly - PublicKey= pubkey + PublicKey= pubkey Version= Some (ILVersionInfo (v1, v2, v3, v4)) Locale= readStringHeapOption ctxt localeIdx CustomAttrsStored = ctxt.customAttrsReader_Assembly MetadataIndex = idx - AssemblyLongevity = + AssemblyLongevity = let masked = flags &&& 0x000e if masked = 0x0000 then ILAssemblyLongevity.Unspecified elif masked = 0x0002 then ILAssemblyLongevity.Library @@ -1581,32 +1539,32 @@ and seekReadAssemblyManifest (ctxt: ILMetadataReader) pectxt idx = elif masked = 0x0006 then ILAssemblyLongevity.PlatformProcess elif masked = 0x0008 then ILAssemblyLongevity.PlatformSystem else ILAssemblyLongevity.Unspecified - ExportedTypes= seekReadTopExportedTypes ctxt + ExportedTypes= seekReadTopExportedTypes ctxt EntrypointElsewhere= let (tab, tok) = pectxt.entryPointToken if tab = TableNames.File then Some (seekReadFile ctxt mdview tok) else None Retargetable = 0 <> (flags &&& 0x100) DisableJitOptimizations = 0 <> (flags &&& 0x4000) - JitTracking = 0 <> (flags &&& 0x8000) - IgnoreSymbolStoreSequencePoints = 0 <> (flags &&& 0x2000) } + JitTracking = 0 <> (flags &&& 0x8000) + IgnoreSymbolStoreSequencePoints = 0 <> (flags &&& 0x2000) } and seekReadAssemblyRef (ctxt: ILMetadataReader) idx = ctxt.seekReadAssemblyRef idx -and seekReadAssemblyRefUncached ctxtH idx = +and seekReadAssemblyRefUncached ctxtH idx = let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() let (v1, v2, v3, v4, flags, publicKeyOrTokenIdx, nameIdx, localeIdx, hashValueIdx) = seekReadAssemblyRefRow ctxt mdv idx let nm = readStringHeap ctxt nameIdx - let publicKey = - match readBlobHeapOption ctxt publicKeyOrTokenIdx with + let publicKey = + match readBlobHeapOption ctxt publicKeyOrTokenIdx with | None -> None | Some blob -> Some (if (flags &&& 0x0001) <> 0x0 then PublicKey blob else PublicKeyToken blob) - + ILAssemblyRef.Create - (name = nm, - hash = readBlobHeapOption ctxt hashValueIdx, - publicKey = publicKey, - retargetable = ((flags &&& 0x0100) <> 0x0), - version = Some (ILVersionInfo (v1, v2, v3, v4)), + (name = nm, + hash = readBlobHeapOption ctxt hashValueIdx, + publicKey = publicKey, + retargetable = ((flags &&& 0x0100) <> 0x0), + version = Some (ILVersionInfo (v1, v2, v3, v4)), locale = readStringHeapOption ctxt localeIdx) and seekReadModuleRef (ctxt: ILMetadataReader) mdv idx = @@ -1625,22 +1583,22 @@ and seekReadClassLayout (ctxt: ILMetadataReader) mdv idx = simpleIndexCompare idx, isSorted ctxt TableNames.ClassLayout, (fun (pack, size, _) -> pack, size)) - match res with + match res with | None -> { Size = None; Pack = None } | Some (pack, size) -> { Size = Some size; Pack = Some pack } and typeAccessOfFlags flags = let f = (flags &&& 0x00000007) - if f = 0x00000001 then ILTypeDefAccess.Public - elif f = 0x00000002 then ILTypeDefAccess.Nested ILMemberAccess.Public - elif f = 0x00000003 then ILTypeDefAccess.Nested ILMemberAccess.Private - elif f = 0x00000004 then ILTypeDefAccess.Nested ILMemberAccess.Family - elif f = 0x00000006 then ILTypeDefAccess.Nested ILMemberAccess.FamilyAndAssembly - elif f = 0x00000007 then ILTypeDefAccess.Nested ILMemberAccess.FamilyOrAssembly - elif f = 0x00000005 then ILTypeDefAccess.Nested ILMemberAccess.Assembly + if f = 0x00000001 then ILTypeDefAccess.Public + elif f = 0x00000002 then ILTypeDefAccess.Nested ILMemberAccess.Public + elif f = 0x00000003 then ILTypeDefAccess.Nested ILMemberAccess.Private + elif f = 0x00000004 then ILTypeDefAccess.Nested ILMemberAccess.Family + elif f = 0x00000006 then ILTypeDefAccess.Nested ILMemberAccess.FamilyAndAssembly + elif f = 0x00000007 then ILTypeDefAccess.Nested ILMemberAccess.FamilyOrAssembly + elif f = 0x00000005 then ILTypeDefAccess.Nested ILMemberAccess.Assembly else ILTypeDefAccess.Private -and typeLayoutOfFlags (ctxt: ILMetadataReader) mdv flags tidx = +and typeLayoutOfFlags (ctxt: ILMetadataReader) mdv flags tidx = let f = (flags &&& 0x00000018) if f = 0x00000008 then ILTypeDefLayout.Sequential (seekReadClassLayout ctxt mdv tidx) elif f = 0x00000010 then ILTypeDefLayout.Explicit (seekReadClassLayout ctxt mdv tidx) @@ -1649,27 +1607,27 @@ and typeLayoutOfFlags (ctxt: ILMetadataReader) mdv flags tidx = and isTopTypeDef flags = (typeAccessOfFlags flags = ILTypeDefAccess.Private) || typeAccessOfFlags flags = ILTypeDefAccess.Public - + and seekIsTopTypeDefOfIdx ctxt idx = let (flags, _, _, _, _, _) = seekReadTypeDefRow ctxt idx isTopTypeDef flags - -and readBlobHeapAsSplitTypeName ctxt (nameIdx, namespaceIdx) = + +and readBlobHeapAsSplitTypeName ctxt (nameIdx, namespaceIdx) = let name = readStringHeap ctxt nameIdx let nspace = readStringHeapOption ctxt namespaceIdx - match nspace with - | Some nspace -> splitNamespace nspace, name + match nspace with + | Some nspace -> splitNamespace nspace, name | None -> [], name -and readBlobHeapAsTypeName ctxt (nameIdx, namespaceIdx) = +and readBlobHeapAsTypeName ctxt (nameIdx, namespaceIdx) = let name = readStringHeap ctxt nameIdx let nspace = readStringHeapOption ctxt namespaceIdx - match nspace with - | None -> name + match nspace with + | None -> name | Some ns -> ctxt.memoizeString (ns+"."+name) and seekReadTypeDefRowExtents (ctxt: ILMetadataReader) _info (idx: int) = - if idx >= ctxt.getNumRows TableNames.TypeDef then + if idx >= ctxt.getNumRows TableNames.TypeDef then struct (ctxt.getNumRows TableNames.Field + 1, ctxt.getNumRows TableNames.Method + 1) else let (_, _, _, _, fieldsIdx, methodsIdx) = seekReadTypeDefRow ctxt (idx + 1) @@ -1689,10 +1647,10 @@ and seekReadPreTypeDef ctxt toponly (idx: int) = and typeDefReader ctxtH: ILTypeDefStored = mkILTypeDefReader - (fun idx -> + (fun idx -> let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() - // Re-read so as not to save all these in the lazy closure - this suspension ctxt.is the largest + // Re-read so as not to save all these in the lazy closure - this suspension ctxt.is the largest // heavily allocated one in all of AbsIL let ((flags, nameIdx, namespaceIdx, extendsIdx, fieldsIdx, methodsIdx) as info) = seekReadTypeDefRow ctxt idx @@ -1705,7 +1663,7 @@ and typeDefReader ctxtH: ILTypeDefStored = let hasLayout = (match layout with ILTypeDefLayout.Explicit _ -> true | _ -> false) let mdefs = seekReadMethods ctxt numtypars methodsIdx endMethodsIdx let fdefs = seekReadFields ctxt (numtypars, hasLayout) fieldsIdx endFieldsIdx - let nested = seekReadNestedTypeDefs ctxt idx + let nested = seekReadNestedTypeDefs ctxt idx let impls = seekReadInterfaceImpls ctxt mdv numtypars idx let mimpls = seekReadMethodImpls ctxt numtypars idx let props = seekReadProperties ctxt numtypars idx @@ -1729,27 +1687,27 @@ and typeDefReader ctxtH: ILTypeDefStored = and seekReadTopTypeDefs (ctxt: ILMetadataReader) = [| for i = 1 to ctxt.getNumRows TableNames.TypeDef do - match seekReadPreTypeDef ctxt true i with + match seekReadPreTypeDef ctxt true i with | None -> () | Some td -> yield td |] and seekReadNestedTypeDefs (ctxt: ILMetadataReader) tidx = - mkILTypeDefsComputed (fun () -> + mkILTypeDefsComputed (fun () -> let nestedIdxs = seekReadIndexedRows (ctxt.getNumRows TableNames.Nested, seekReadNestedRow ctxt, snd, simpleIndexCompare tidx, false, fst) - [| for i in nestedIdxs do - match seekReadPreTypeDef ctxt false i with + [| for i in nestedIdxs do + match seekReadPreTypeDef ctxt false i with | None -> () | Some td -> yield td |]) and seekReadInterfaceImpls (ctxt: ILMetadataReader) mdv numtypars tidx = - seekReadIndexedRows (ctxt.getNumRows TableNames.InterfaceImpl, - seekReadInterfaceImplRow ctxt mdv, - fst, - simpleIndexCompare tidx, - isSorted ctxt TableNames.InterfaceImpl, - (snd >> seekReadTypeDefOrRef ctxt numtypars AsObject (*ok*) List.empty)) - -and seekReadGenericParams ctxt numtypars (a, b): ILGenericParameterDefs = + seekReadIndexedRows (ctxt.getNumRows TableNames.InterfaceImpl, + seekReadInterfaceImplRow ctxt mdv, + fst, + simpleIndexCompare tidx, + isSorted ctxt TableNames.InterfaceImpl, + (snd >> seekReadTypeDefOrRef ctxt numtypars AsObject (*ok*) List.empty)) + +and seekReadGenericParams ctxt numtypars (a, b): ILGenericParameterDefs = ctxt.seekReadGenericParams (GenericParamsIdx(numtypars, a, b)) and seekReadGenericParamsUncached ctxtH (GenericParamsIdx(numtypars, a, b)) = @@ -1757,36 +1715,36 @@ and seekReadGenericParamsUncached ctxtH (GenericParamsIdx(numtypars, a, b)) = let mdv = ctxt.mdfile.GetView() let pars = seekReadIndexedRows - (ctxt.getNumRows TableNames.GenericParam, seekReadGenericParamRow ctxt mdv, - (fun (_, _, _, tomd, _) -> tomd), - tomdCompare (TaggedIndex(a, b)), - isSorted ctxt TableNames.GenericParam, - (fun (gpidx, seq, flags, _, nameIdx) -> + (ctxt.getNumRows TableNames.GenericParam, seekReadGenericParamRow ctxt mdv, + (fun (_, _, _, tomd, _) -> tomd), + tomdCompare (TaggedIndex(a, b)), + isSorted ctxt TableNames.GenericParam, + (fun (gpidx, seq, flags, _, nameIdx) -> let flags = int32 flags let variance_flags = flags &&& 0x0003 - let variance = + let variance = if variance_flags = 0x0000 then NonVariant elif variance_flags = 0x0001 then CoVariant - elif variance_flags = 0x0002 then ContraVariant + elif variance_flags = 0x0002 then ContraVariant else NonVariant let constraints = seekReadGenericParamConstraints ctxt mdv numtypars gpidx seq, {Name=readStringHeap ctxt nameIdx Constraints = constraints - Variance=variance + Variance=variance CustomAttrsStored = ctxt.customAttrsReader_GenericParam MetadataIndex=gpidx HasReferenceTypeConstraint= (flags &&& 0x0004) <> 0 HasNotNullableValueTypeConstraint= (flags &&& 0x0008) <> 0 HasDefaultConstructorConstraint=(flags &&& 0x0010) <> 0 })) - pars |> List.sortBy fst |> List.map snd + pars |> List.sortBy fst |> List.map snd and seekReadGenericParamConstraints (ctxt: ILMetadataReader) mdv numtypars gpidx = - seekReadIndexedRows - (ctxt.getNumRows TableNames.GenericParamConstraint, - seekReadGenericParamConstraintRow ctxt mdv, - fst, - simpleIndexCompare gpidx, - isSorted ctxt TableNames.GenericParamConstraint, + seekReadIndexedRows + (ctxt.getNumRows TableNames.GenericParamConstraint, + seekReadGenericParamConstraintRow ctxt mdv, + fst, + simpleIndexCompare gpidx, + isSorted ctxt TableNames.GenericParamConstraint, (snd >> seekReadTypeDefOrRef ctxt numtypars AsObject (*ok*) List.empty)) and seekReadTypeDefAsType (ctxt: ILMetadataReader) boxity (ginst: ILTypes) idx = @@ -1797,9 +1755,9 @@ and seekReadTypeDefAsTypeUncached ctxtH (TypeDefAsTypIdx (boxity, ginst, idx)) = mkILTy boxity (ILTypeSpec.Create(seekReadTypeDefAsTypeRef ctxt idx, ginst)) and seekReadTypeDefAsTypeRef (ctxt: ILMetadataReader) idx = - let enc = - if seekIsTopTypeDefOfIdx ctxt idx then [] - else + let enc = + if seekIsTopTypeDefOfIdx ctxt idx then [] + else let enclIdx = seekReadIndexedRow (ctxt.getNumRows TableNames.Nested, seekReadNestedRow ctxt, fst, simpleIndexCompare idx, isSorted ctxt TableNames.Nested, snd) let tref = seekReadTypeDefAsTypeRef ctxt enclIdx tref.Enclosing@[tref.Name] @@ -1814,7 +1772,7 @@ and seekReadTypeRefUncached ctxtH idx = let scopeIdx, nameIdx, namespaceIdx = seekReadTypeRefRow ctxt mdv idx let scope, enc = seekReadTypeRefScope ctxt mdv scopeIdx let nm = readBlobHeapAsTypeName ctxt (nameIdx, namespaceIdx) - ILTypeRef.Create(scope=scope, enclosing=enc, name = nm) + ILTypeRef.Create(scope=scope, enclosing=enc, name = nm) and seekReadTypeRefAsType (ctxt: ILMetadataReader) boxity ginst idx = ctxt.seekReadTypeRefAsType (TypeRefAsTypIdx (boxity, ginst, idx)) and seekReadTypeRefAsTypeUncached ctxtH (TypeRefAsTypIdx (boxity, ginst, idx)) = @@ -1823,28 +1781,28 @@ and seekReadTypeRefAsTypeUncached ctxtH (TypeRefAsTypIdx (boxity, ginst, idx)) = and seekReadTypeDefOrRef (ctxt: ILMetadataReader) numtypars boxity (ginst: ILTypes) (TaggedIndex(tag, idx) ) = let mdv = ctxt.mdfile.GetView() - match tag with + match tag with | tag when tag = tdor_TypeDef -> seekReadTypeDefAsType ctxt boxity ginst idx | tag when tag = tdor_TypeRef -> seekReadTypeRefAsType ctxt boxity ginst idx - | tag when tag = tdor_TypeSpec -> + | tag when tag = tdor_TypeSpec -> if not (List.isEmpty ginst) then dprintn ("type spec used as type constructor for a generic instantiation: ignoring instantiation") readBlobHeapAsType ctxt numtypars (seekReadTypeSpecRow ctxt mdv idx) | _ -> failwith "seekReadTypeDefOrRef ctxt" and seekReadTypeDefOrRefAsTypeRef (ctxt: ILMetadataReader) (TaggedIndex(tag, idx) ) = - match tag with + match tag with | tag when tag = tdor_TypeDef -> seekReadTypeDefAsTypeRef ctxt idx | tag when tag = tdor_TypeRef -> seekReadTypeRef ctxt idx - | tag when tag = tdor_TypeSpec -> + | tag when tag = tdor_TypeSpec -> dprintn ("type spec used where a type ref or def is required") PrimaryAssemblyILGlobals.typ_Object.TypeRef | _ -> failwith "seekReadTypeDefOrRefAsTypeRef_readTypeDefOrRefOrSpec" and seekReadMethodRefParent (ctxt: ILMetadataReader) mdv numtypars (TaggedIndex(tag, idx)) = - match tag with + match tag with | tag when tag = mrp_TypeRef -> seekReadTypeRefAsType ctxt AsObject (* not ok - no way to tell if a member ref parent is a value type or not *) List.empty idx | tag when tag = mrp_ModuleRef -> mkILTypeForGlobalFunctions (ILScopeRef.Module (seekReadModuleRef ctxt mdv idx)) - | tag when tag = mrp_MethodDef -> + | tag when tag = mrp_MethodDef -> let (MethodData(enclTy, cc, nm, argtys, retty, minst)) = seekReadMethodDefAsMethodData ctxt idx let mspec = mkILMethSpecInTy (enclTy, cc, nm, argtys, retty, minst) mspec.DeclaringType @@ -1852,49 +1810,49 @@ and seekReadMethodRefParent (ctxt: ILMetadataReader) mdv numtypars (TaggedIndex( | _ -> failwith "seekReadMethodRefParent" and seekReadMethodDefOrRef (ctxt: ILMetadataReader) numtypars (TaggedIndex(tag, idx)) = - match tag with - | tag when tag = mdor_MethodDef -> + match tag with + | tag when tag = mdor_MethodDef -> let (MethodData(enclTy, cc, nm, argtys, retty, minst)) = seekReadMethodDefAsMethodData ctxt idx VarArgMethodData(enclTy, cc, nm, argtys, None, retty, minst) - | tag when tag = mdor_MemberRef -> + | tag when tag = mdor_MemberRef -> seekReadMemberRefAsMethodData ctxt numtypars idx | _ -> failwith "seekReadMethodDefOrRef" and seekReadMethodDefOrRefNoVarargs (ctxt: ILMetadataReader) numtypars x = - let (VarArgMethodData(enclTy, cc, nm, argtys, varargs, retty, minst)) = seekReadMethodDefOrRef ctxt numtypars x + let (VarArgMethodData(enclTy, cc, nm, argtys, varargs, retty, minst)) = seekReadMethodDefOrRef ctxt numtypars x if varargs <> None then dprintf "ignoring sentinel and varargs in ILMethodDef token signature" MethodData(enclTy, cc, nm, argtys, retty, minst) and seekReadCustomAttrType (ctxt: ILMetadataReader) (TaggedIndex(tag, idx) ) = - match tag with - | tag when tag = cat_MethodDef -> + match tag with + | tag when tag = cat_MethodDef -> let (MethodData(enclTy, cc, nm, argtys, retty, minst)) = seekReadMethodDefAsMethodData ctxt idx mkILMethSpecInTy (enclTy, cc, nm, argtys, retty, minst) - | tag when tag = cat_MemberRef -> + | tag when tag = cat_MemberRef -> let (MethodData(enclTy, cc, nm, argtys, retty, minst)) = seekReadMemberRefAsMethDataNoVarArgs ctxt 0 idx mkILMethSpecInTy (enclTy, cc, nm, argtys, retty, minst) | _ -> failwith "seekReadCustomAttrType ctxt" - + and seekReadImplAsScopeRef (ctxt: ILMetadataReader) mdv (TaggedIndex(tag, idx) ) = if idx = 0 then ILScopeRef.Local - else - match tag with + else + match tag with | tag when tag = i_File -> ILScopeRef.Module (seekReadFile ctxt mdv idx) | tag when tag = i_AssemblyRef -> ILScopeRef.Assembly (seekReadAssemblyRef ctxt idx) | tag when tag = i_ExportedType -> failwith "seekReadImplAsScopeRef" | _ -> failwith "seekReadImplAsScopeRef" and seekReadTypeRefScope (ctxt: ILMetadataReader) mdv (TaggedIndex(tag, idx) ) = - match tag with + match tag with | tag when tag = rs_Module -> ILScopeRef.Local, [] | tag when tag = rs_ModuleRef -> ILScopeRef.Module (seekReadModuleRef ctxt mdv idx), [] | tag when tag = rs_AssemblyRef -> ILScopeRef.Assembly (seekReadAssemblyRef ctxt idx), [] - | tag when tag = rs_TypeRef -> + | tag when tag = rs_TypeRef -> let tref = seekReadTypeRef ctxt idx tref.Scope, (tref.Enclosing@[tref.Name]) | _ -> failwith "seekReadTypeRefScope" -and seekReadOptionalTypeDefOrRef (ctxt: ILMetadataReader) numtypars boxity idx = +and seekReadOptionalTypeDefOrRef (ctxt: ILMetadataReader) numtypars boxity idx = if idx = TaggedIndex(tdor_TypeDef, 0) then None else Some (seekReadTypeDefOrRef ctxt numtypars boxity List.empty idx) @@ -1906,54 +1864,54 @@ and seekReadField ctxt mdv (numtypars, hasLayout) (idx: int) = fieldType= readBlobHeapAsFieldSig ctxt numtypars typeIdx, attributes = enum(flags), literalValue = (if (flags &&& 0x8000) = 0 then None else Some (seekReadConstant ctxt (TaggedIndex(hc_FieldDef, idx)))), - marshal = - (if (flags &&& 0x1000) = 0 then - None - else - Some (seekReadIndexedRow (ctxt.getNumRows TableNames.FieldMarshal, seekReadFieldMarshalRow ctxt mdv, - fst, hfmCompare (TaggedIndex(hfm_FieldDef, idx)), - isSorted ctxt TableNames.FieldMarshal, + marshal = + (if (flags &&& 0x1000) = 0 then + None + else + Some (seekReadIndexedRow (ctxt.getNumRows TableNames.FieldMarshal, seekReadFieldMarshalRow ctxt mdv, + fst, hfmCompare (TaggedIndex(hfm_FieldDef, idx)), + isSorted ctxt TableNames.FieldMarshal, (snd >> readBlobHeapAsNativeType ctxt)))), - data = - (if (flags &&& 0x0100) = 0 then - None - else + data = + (if (flags &&& 0x0100) = 0 then + None + else match ctxt.pectxtCaptured with | None -> None // indicates metadata only, where Data is not available - | Some pectxt -> - let rva = seekReadIndexedRow (ctxt.getNumRows TableNames.FieldRVA, seekReadFieldRVARow ctxt mdv, - snd, simpleIndexCompare idx, isSorted ctxt TableNames.FieldRVA, fst) + | Some pectxt -> + let rva = seekReadIndexedRow (ctxt.getNumRows TableNames.FieldRVA, seekReadFieldRVARow ctxt mdv, + snd, simpleIndexCompare idx, isSorted ctxt TableNames.FieldRVA, fst) Some (rvaToData ctxt pectxt "field" rva)), - offset = - (if hasLayout && not isStatic then - Some (seekReadIndexedRow (ctxt.getNumRows TableNames.FieldLayout, seekReadFieldLayoutRow ctxt mdv, - snd, simpleIndexCompare idx, isSorted ctxt TableNames.FieldLayout, fst)) else None), + offset = + (if hasLayout && not isStatic then + Some (seekReadIndexedRow (ctxt.getNumRows TableNames.FieldLayout, seekReadFieldLayoutRow ctxt mdv, + snd, simpleIndexCompare idx, isSorted ctxt TableNames.FieldLayout, fst)) else None), customAttrsStored=ctxt.customAttrsReader_FieldDef, metadataIndex = idx) - + and seekReadFields (ctxt: ILMetadataReader) (numtypars, hasLayout) fidx1 fidx2 = - mkILFieldsLazy + mkILFieldsLazy (lazy let mdv = ctxt.mdfile.GetView() - [ if fidx1 > 0 then + [ if fidx1 > 0 then for i = fidx1 to fidx2 - 1 do yield seekReadField ctxt mdv (numtypars, hasLayout) i ]) and seekReadMethods (ctxt: ILMetadataReader) numtypars midx1 midx2 = - mkILMethodsComputed (fun () -> + mkILMethodsComputed (fun () -> let mdv = ctxt.mdfile.GetView() - [| if midx1 > 0 then + [| if midx1 > 0 then for i = midx1 to midx2 - 1 do yield seekReadMethod ctxt mdv numtypars i |]) -and sigptrGetTypeDefOrRefOrSpecIdx bytes sigptr = +and sigptrGetTypeDefOrRefOrSpecIdx bytes sigptr = let struct (n, sigptr) = sigptrGetZInt32 bytes sigptr if (n &&& 0x01) = 0x0 then (* Type Def *) TaggedIndex(tdor_TypeDef, (n >>>& 2)), sigptr else (* Type Ref *) - TaggedIndex(tdor_TypeRef, (n >>>& 2)), sigptr + TaggedIndex(tdor_TypeRef, (n >>>& 2)), sigptr -and sigptrGetTy (ctxt: ILMetadataReader) numtypars bytes sigptr = +and sigptrGetTy (ctxt: ILMetadataReader) numtypars bytes sigptr = let b0, sigptr = sigptrGetByte bytes sigptr if b0 = et_OBJECT then PrimaryAssemblyILGlobals.typ_Object, sigptr elif b0 = et_STRING then PrimaryAssemblyILGlobals.typ_String, sigptr @@ -1971,33 +1929,33 @@ and sigptrGetTy (ctxt: ILMetadataReader) numtypars bytes sigptr = elif b0 = et_R8 then PrimaryAssemblyILGlobals.typ_Double, sigptr elif b0 = et_CHAR then PrimaryAssemblyILGlobals.typ_Char, sigptr elif b0 = et_BOOLEAN then PrimaryAssemblyILGlobals.typ_Bool, sigptr - elif b0 = et_WITH then + elif b0 = et_WITH then let b0, sigptr = sigptrGetByte bytes sigptr let tdorIdx, sigptr = sigptrGetTypeDefOrRefOrSpecIdx bytes sigptr let struct (n, sigptr) = sigptrGetZInt32 bytes sigptr let argtys, sigptr = sigptrFold (sigptrGetTy ctxt numtypars) n bytes sigptr - seekReadTypeDefOrRef ctxt numtypars (if b0 = et_CLASS then AsObject else AsValue) argtys tdorIdx, + seekReadTypeDefOrRef ctxt numtypars (if b0 = et_CLASS then AsObject else AsValue) argtys tdorIdx, sigptr - - elif b0 = et_CLASS then + + elif b0 = et_CLASS then let tdorIdx, sigptr = sigptrGetTypeDefOrRefOrSpecIdx bytes sigptr seekReadTypeDefOrRef ctxt numtypars AsObject List.empty tdorIdx, sigptr - elif b0 = et_VALUETYPE then + elif b0 = et_VALUETYPE then let tdorIdx, sigptr = sigptrGetTypeDefOrRefOrSpecIdx bytes sigptr seekReadTypeDefOrRef ctxt numtypars AsValue List.empty tdorIdx, sigptr - elif b0 = et_VAR then + elif b0 = et_VAR then let struct (n, sigptr) = sigptrGetZInt32 bytes sigptr ILType.TypeVar (uint16 n), sigptr - elif b0 = et_MVAR then + elif b0 = et_MVAR then let struct (n, sigptr) = sigptrGetZInt32 bytes sigptr ILType.TypeVar (uint16 (n + numtypars)), sigptr - elif b0 = et_BYREF then + elif b0 = et_BYREF then let ty, sigptr = sigptrGetTy ctxt numtypars bytes sigptr ILType.Byref ty, sigptr - elif b0 = et_PTR then + elif b0 = et_PTR then let ty, sigptr = sigptrGetTy ctxt numtypars bytes sigptr ILType.Ptr ty, sigptr - elif b0 = et_SZARRAY then + elif b0 = et_SZARRAY then let ty, sigptr = sigptrGetTy ctxt numtypars bytes sigptr mkILArr1DTy ty, sigptr elif b0 = et_ARRAY then @@ -2007,17 +1965,17 @@ and sigptrGetTy (ctxt: ILMetadataReader) numtypars bytes sigptr = let struct (sizes, sigptr) = sigptrFoldStruct sigptrGetZInt32 numSized bytes sigptr let struct (numLoBounded, sigptr) = sigptrGetZInt32 bytes sigptr let struct (lobounds, sigptr) = sigptrFoldStruct sigptrGetZInt32 numLoBounded bytes sigptr - let shape = + let shape = let dim i = - (if i < numLoBounded then Some (List.item i lobounds) else None), + (if i < numLoBounded then Some (List.item i lobounds) else None), (if i < numSized then Some (List.item i sizes) else None) ILArrayShape (List.init rank dim) mkILArrTy (ty, shape), sigptr - + elif b0 = et_VOID then ILType.Void, sigptr - elif b0 = et_TYPEDBYREF then + elif b0 = et_TYPEDBYREF then PrimaryAssemblyILGlobals.typ_TypedReference, sigptr - elif b0 = et_CMOD_REQD || b0 = et_CMOD_OPT then + elif b0 = et_CMOD_REQD || b0 = et_CMOD_OPT then let tdorIdx, sigptr = sigptrGetTypeDefOrRefOrSpecIdx bytes sigptr let ty, sigptr = sigptrGetTy ctxt numtypars bytes sigptr ILType.Modified((b0 = et_CMOD_REQD), seekReadTypeDefOrRefAsTypeRef ctxt tdorIdx, ty), sigptr @@ -2028,7 +1986,7 @@ and sigptrGetTy (ctxt: ILMetadataReader) numtypars bytes sigptr = let struct (numparams, sigptr) = sigptrGetZInt32 bytes sigptr let retty, sigptr = sigptrGetTy ctxt numtypars bytes sigptr let argtys, sigptr = sigptrFold (sigptrGetTy ctxt numtypars) ( numparams) bytes sigptr - let typ = + let typ = ILType.FunctionPointer { CallingConv=cc ArgTypes = argtys @@ -2036,32 +1994,32 @@ and sigptrGetTy (ctxt: ILMetadataReader) numtypars bytes sigptr = typ, sigptr elif b0 = et_SENTINEL then failwith "varargs NYI" else ILType.Void, sigptr + +and sigptrGetVarArgTys (ctxt: ILMetadataReader) n numtypars bytes sigptr = + sigptrFold (sigptrGetTy ctxt numtypars) n bytes sigptr -and sigptrGetVarArgTys (ctxt: ILMetadataReader) n numtypars bytes sigptr = - sigptrFold (sigptrGetTy ctxt numtypars) n bytes sigptr - -and sigptrGetArgTys (ctxt: ILMetadataReader) n numtypars bytes sigptr acc = - if n <= 0 then (List.rev acc, None), sigptr +and sigptrGetArgTys (ctxt: ILMetadataReader) n numtypars bytes sigptr acc = + if n <= 0 then (List.rev acc, None), sigptr else let b0, sigptr2 = sigptrGetByte bytes sigptr - if b0 = et_SENTINEL then + if b0 = et_SENTINEL then let varargs, sigptr = sigptrGetVarArgTys ctxt n numtypars bytes sigptr2 (List.rev acc, Some varargs), sigptr else let x, sigptr = sigptrGetTy ctxt numtypars bytes sigptr sigptrGetArgTys ctxt (n-1) numtypars bytes sigptr (x :: acc) - -and sigptrGetLocal (ctxt: ILMetadataReader) numtypars bytes sigptr = - let pinned, sigptr = + +and sigptrGetLocal (ctxt: ILMetadataReader) numtypars bytes sigptr = + let pinned, sigptr = let b0, sigptr' = sigptrGetByte bytes sigptr - if b0 = et_PINNED then + if b0 = et_PINNED then true, sigptr' - else + else false, sigptr let ty, sigptr = sigptrGetTy ctxt numtypars bytes sigptr let loc: ILLocal = { IsPinned = pinned; Type = ty; DebugInfo = None } loc, sigptr - + and readBlobHeapAsMethodSig (ctxt: ILMetadataReader) numtypars blobIdx = ctxt.readBlobHeapAsMethodSig (BlobAsMethodSigIdx (numtypars, blobIdx)) @@ -2076,8 +2034,8 @@ and readBlobHeapAsMethodSigUncached ctxtH (BlobAsMethodSigIdx (numtypars, blobId let retty, sigptr = sigptrGetTy ctxt numtypars bytes sigptr let (argtys, varargs), _sigptr = sigptrGetArgTys ctxt numparams numtypars bytes sigptr [] generic, genarity, cc, retty, argtys, varargs - -and readBlobHeapAsType ctxt numtypars blobIdx = + +and readBlobHeapAsType ctxt numtypars blobIdx = let bytes = readBlobHeap ctxt blobIdx let ty, _sigptr = sigptrGetTy ctxt numtypars bytes 0 ty @@ -2094,7 +2052,7 @@ and readBlobHeapAsFieldSigUncached ctxtH (BlobAsFieldSigIdx (numtypars, blobIdx) let retty, _sigptr = sigptrGetTy ctxt numtypars bytes sigptr retty - + and readBlobHeapAsPropertySig (ctxt: ILMetadataReader) numtypars blobIdx = ctxt.readBlobHeapAsPropertySig (BlobAsPropSigIdx (numtypars, blobIdx)) @@ -2110,7 +2068,7 @@ and readBlobHeapAsPropertySigUncached ctxtH (BlobAsPropSigIdx (numtypars, blobId let retty, sigptr = sigptrGetTy ctxt numtypars bytes sigptr let argtys, _sigptr = sigptrFold (sigptrGetTy ctxt numtypars) ( numparams) bytes sigptr hasthis, retty, argtys - + and readBlobHeapAsLocalsSig (ctxt: ILMetadataReader) numtypars blobIdx = ctxt.readBlobHeapAsLocalsSig (BlobAsLocalSigIdx (numtypars, blobIdx)) @@ -2123,36 +2081,36 @@ and readBlobHeapAsLocalsSigUncached ctxtH (BlobAsLocalSigIdx (numtypars, blobIdx let struct (numlocals, sigptr) = sigptrGetZInt32 bytes sigptr let localtys, _sigptr = sigptrFold (sigptrGetLocal ctxt numtypars) ( numlocals) bytes sigptr localtys - -and byteAsHasThis b = + +and byteAsHasThis b = let hasthis_masked = b &&& 0x60uy if hasthis_masked = e_IMAGE_CEE_CS_CALLCONV_INSTANCE then ILThisConvention.Instance - elif hasthis_masked = e_IMAGE_CEE_CS_CALLCONV_INSTANCE_EXPLICIT then ILThisConvention.InstanceExplicit - else ILThisConvention.Static + elif hasthis_masked = e_IMAGE_CEE_CS_CALLCONV_INSTANCE_EXPLICIT then ILThisConvention.InstanceExplicit + else ILThisConvention.Static -and byteAsCallConv b = - let cc = +and byteAsCallConv b = + let cc = let ccMaxked = b &&& 0x0Fuy - if ccMaxked = e_IMAGE_CEE_CS_CALLCONV_FASTCALL then ILArgConvention.FastCall - elif ccMaxked = e_IMAGE_CEE_CS_CALLCONV_STDCALL then ILArgConvention.StdCall - elif ccMaxked = e_IMAGE_CEE_CS_CALLCONV_THISCALL then ILArgConvention.ThisCall - elif ccMaxked = e_IMAGE_CEE_CS_CALLCONV_CDECL then ILArgConvention.CDecl - elif ccMaxked = e_IMAGE_CEE_CS_CALLCONV_VARARG then ILArgConvention.VarArg + if ccMaxked = e_IMAGE_CEE_CS_CALLCONV_FASTCALL then ILArgConvention.FastCall + elif ccMaxked = e_IMAGE_CEE_CS_CALLCONV_STDCALL then ILArgConvention.StdCall + elif ccMaxked = e_IMAGE_CEE_CS_CALLCONV_THISCALL then ILArgConvention.ThisCall + elif ccMaxked = e_IMAGE_CEE_CS_CALLCONV_CDECL then ILArgConvention.CDecl + elif ccMaxked = e_IMAGE_CEE_CS_CALLCONV_VARARG then ILArgConvention.VarArg else ILArgConvention.Default let generic = (b &&& e_IMAGE_CEE_CS_CALLCONV_GENERIC) <> 0x0uy - generic, Callconv (byteAsHasThis b, cc) - -and seekReadMemberRefAsMethodData ctxt numtypars idx: VarArgMethodData = + generic, Callconv (byteAsHasThis b, cc) + +and seekReadMemberRefAsMethodData ctxt numtypars idx: VarArgMethodData = ctxt.seekReadMemberRefAsMethodData (MemberRefAsMspecIdx (numtypars, idx)) -and seekReadMemberRefAsMethodDataUncached ctxtH (MemberRefAsMspecIdx (numtypars, idx)) = +and seekReadMemberRefAsMethodDataUncached ctxtH (MemberRefAsMspecIdx (numtypars, idx)) = let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() let (mrpIdx, nameIdx, typeIdx) = seekReadMemberRefRow ctxt mdv idx let nm = readStringHeap ctxt nameIdx let enclTy = seekReadMethodRefParent ctxt mdv numtypars mrpIdx let _generic, genarity, cc, retty, argtys, varargs = readBlobHeapAsMethodSig ctxt enclTy.GenericArgs.Length typeIdx - let minst = List.init genarity (fun n -> mkILTyvarTy (uint16 (numtypars+n))) + let minst = List.init genarity (fun n -> mkILTyvarTy (uint16 (numtypars+n))) (VarArgMethodData(enclTy, cc, nm, argtys, varargs, retty, minst)) and seekReadMemberRefAsMethDataNoVarArgs ctxt numtypars idx: MethodData = @@ -2160,15 +2118,15 @@ and seekReadMemberRefAsMethDataNoVarArgs ctxt numtypars idx: MethodData = if Option.isSome varargs then dprintf "ignoring sentinel and varargs in ILMethodDef token signature" (MethodData(enclTy, cc, nm, argtys, retty, minst)) -and seekReadMethodSpecAsMethodData (ctxt: ILMetadataReader) numtypars idx = +and seekReadMethodSpecAsMethodData (ctxt: ILMetadataReader) numtypars idx = ctxt.seekReadMethodSpecAsMethodData (MethodSpecAsMspecIdx (numtypars, idx)) -and seekReadMethodSpecAsMethodDataUncached ctxtH (MethodSpecAsMspecIdx (numtypars, idx)) = +and seekReadMethodSpecAsMethodDataUncached ctxtH (MethodSpecAsMspecIdx (numtypars, idx)) = let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() let (mdorIdx, instIdx) = seekReadMethodSpecRow ctxt mdv idx let (VarArgMethodData(enclTy, cc, nm, argtys, varargs, retty, _)) = seekReadMethodDefOrRef ctxt numtypars mdorIdx - let minst = + let minst = let bytes = readBlobHeap ctxt instIdx let sigptr = 0 let ccByte, sigptr = sigptrGetByte bytes sigptr @@ -2178,10 +2136,10 @@ and seekReadMethodSpecAsMethodDataUncached ctxtH (MethodSpecAsMspecIdx (numtypar argtys VarArgMethodData(enclTy, cc, nm, argtys, varargs, retty, minst) -and seekReadMemberRefAsFieldSpec (ctxt: ILMetadataReader) numtypars idx = +and seekReadMemberRefAsFieldSpec (ctxt: ILMetadataReader) numtypars idx = ctxt.seekReadMemberRefAsFieldSpec (MemberRefAsFspecIdx (numtypars, idx)) -and seekReadMemberRefAsFieldSpecUncached ctxtH (MemberRefAsFspecIdx (numtypars, idx)) = +and seekReadMemberRefAsFieldSpecUncached ctxtH (MemberRefAsFspecIdx (numtypars, idx)) = let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() let (mrpIdx, nameIdx, typeIdx) = seekReadMemberRefRow ctxt mdv idx @@ -2190,46 +2148,46 @@ and seekReadMemberRefAsFieldSpecUncached ctxtH (MemberRefAsFspecIdx (numtypars, let retty = readBlobHeapAsFieldSig ctxt numtypars typeIdx mkILFieldSpecInTy(enclTy, nm, retty) -// One extremely annoying aspect of the MD format is that given a -// ILMethodDef token it is non-trivial to find which ILTypeDef it belongs -// to. So we do a binary chop through the ILTypeDef table -// looking for which ILTypeDef has the ILMethodDef within its range. -// Although the ILTypeDef table is not "sorted", it is effectively sorted by -// method-range and field-range start/finish indexes +// One extremely annoying aspect of the MD format is that given a +// ILMethodDef token it is non-trivial to find which ILTypeDef it belongs +// to. So we do a binary chop through the ILTypeDef table +// looking for which ILTypeDef has the ILMethodDef within its range. +// Although the ILTypeDef table is not "sorted", it is effectively sorted by +// method-range and field-range start/finish indexes and seekReadMethodDefAsMethodData ctxt idx = ctxt.seekReadMethodDefAsMethodData idx and seekReadMethodDefAsMethodDataUncached ctxtH idx = let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() - // Look for the method def parent. - let tidx = - seekReadIndexedRow (ctxt.getNumRows TableNames.TypeDef, - (fun i -> i, seekReadTypeDefRowWithExtents ctxt i), - (fun r -> r), - (fun (_, ((_, _, _, _, _, methodsIdx), - (_, endMethodsIdx))) -> - if endMethodsIdx <= idx then 1 - elif methodsIdx <= idx && idx < endMethodsIdx then 0 - else -1), + // Look for the method def parent. + let tidx = + seekReadIndexedRow (ctxt.getNumRows TableNames.TypeDef, + (fun i -> i, seekReadTypeDefRowWithExtents ctxt i), + (fun r -> r), + (fun (_, ((_, _, _, _, _, methodsIdx), + (_, endMethodsIdx))) -> + if endMethodsIdx <= idx then 1 + elif methodsIdx <= idx && idx < endMethodsIdx then 0 + else -1), true, fst) // Create a formal instantiation if needed let typeGenericArgs = seekReadGenericParams ctxt 0 (tomd_TypeDef, tidx) let typeGenericArgsCount = typeGenericArgs.Length let methodGenericArgs = seekReadGenericParams ctxt typeGenericArgsCount (tomd_MethodDef, idx) - + let finst = mkILFormalGenericArgs 0 typeGenericArgs let minst = mkILFormalGenericArgs typeGenericArgsCount methodGenericArgs - // Read the method def parent. + // Read the method def parent. let enclTy = seekReadTypeDefAsType ctxt AsObject (* not ok: see note *) finst tidx - // Return the constituent parts: put it together at the place where this is called. + // Return the constituent parts: put it together at the place where this is called. let (_code_rva, _implflags, _flags, nameIdx, typeIdx, _paramIdx) = seekReadMethodRow ctxt mdv idx let nm = readStringHeap ctxt nameIdx - // Read the method def signature. + // Read the method def signature. let _generic, _genarity, cc, retty, argtys, varargs = readBlobHeapAsMethodSig ctxt typeGenericArgsCount typeIdx if varargs <> None then dprintf "ignoring sentinel and varargs in ILMethodDef token signature" @@ -2245,25 +2203,25 @@ and seekReadFieldDefAsFieldSpecUncached ctxtH idx = let (_flags, nameIdx, typeIdx) = seekReadFieldRow ctxt mdv idx let nm = readStringHeap ctxt nameIdx (* Look for the field def parent. *) - let tidx = - seekReadIndexedRow (ctxt.getNumRows TableNames.TypeDef, - (fun i -> i, seekReadTypeDefRowWithExtents ctxt i), - (fun r -> r), - (fun (_, ((_, _, _, _, fieldsIdx, _), (endFieldsIdx, _))) -> - if endFieldsIdx <= idx then 1 - elif fieldsIdx <= idx && idx < endFieldsIdx then 0 - else -1), + let tidx = + seekReadIndexedRow (ctxt.getNumRows TableNames.TypeDef, + (fun i -> i, seekReadTypeDefRowWithExtents ctxt i), + (fun r -> r), + (fun (_, ((_, _, _, _, fieldsIdx, _), (endFieldsIdx, _))) -> + if endFieldsIdx <= idx then 1 + elif fieldsIdx <= idx && idx < endFieldsIdx then 0 + else -1), true, fst) - // Read the field signature. + // Read the field signature. let retty = readBlobHeapAsFieldSig ctxt 0 typeIdx - // Create a formal instantiation if needed + // Create a formal instantiation if needed let finst = mkILFormalGenericArgs 0 (seekReadGenericParams ctxt 0 (tomd_TypeDef, tidx)) - // Read the field def parent. + // Read the field def parent. let enclTy = seekReadTypeDefAsType ctxt AsObject (* not ok: see note *) finst tidx - // Put it together. + // Put it together. mkILFieldSpecInTy(enclTy, nm, retty) and seekReadMethod (ctxt: ILMetadataReader) mdv numtypars (idx: int) = @@ -2278,30 +2236,30 @@ and seekReadMethod (ctxt: ILMetadataReader) mdv numtypars (idx: int) = let aggressiveinline = (implflags &&& 0x0100) <> 0x0 let _generic, _genarity, cc, retty, argtys, varargs = readBlobHeapAsMethodSig ctxt numtypars typeIdx if varargs <> None then dprintf "ignoring sentinel and varargs in ILMethodDef signature" - + let endParamIdx = - if idx >= ctxt.getNumRows TableNames.Method then + if idx >= ctxt.getNumRows TableNames.Method then ctxt.getNumRows TableNames.Param + 1 else let (_, _, _, _, _, paramIdx) = seekReadMethodRow ctxt mdv (idx + 1) paramIdx - + let ret, ilParams = seekReadParams ctxt mdv (retty, argtys) paramIdx endParamIdx - let isEntryPoint = - let (tab, tok) = ctxt.entryPointToken + let isEntryPoint = + let (tab, tok) = ctxt.entryPointToken (tab = TableNames.Method && tok = idx) - let body = - if (codetype = 0x01) && pinvoke then + let body = + if (codetype = 0x01) && pinvoke then methBodyNative - elif pinvoke then + elif pinvoke then seekReadImplMap ctxt nm idx - elif internalcall || abstr || unmanaged || (codetype <> 0x00) then + elif internalcall || abstr || unmanaged || (codetype <> 0x00) then methBodyAbstract - else - match ctxt.pectxtCaptured with - | None -> methBodyNotAvailable + else + match ctxt.pectxtCaptured with + | None -> methBodyNotAvailable | Some pectxt -> seekReadMethodRVA pectxt ctxt (idx, nm, internalcall, noinline, aggressiveinline, numtypars) codeRVA ILMethodDef(name=nm, @@ -2316,8 +2274,8 @@ and seekReadMethod (ctxt: ILMetadataReader) mdv numtypars (idx: int) = body=body, customAttrsStored=ctxt.customAttrsReader_MethodDef, metadataIndex=idx) - - + + and seekReadParams (ctxt: ILMetadataReader) mdv (retty, argtys) pidx1 pidx2 = let retRes = ref (mkILReturn retty) let paramsRes = argtys |> List.toArray |> Array.map mkILParamAnon @@ -2332,14 +2290,14 @@ and seekReadParamExtras (ctxt: ILMetadataReader) mdv (retRes, paramsRes) (idx: i let hasDefault = (flags &&& 0x1000) <> 0x0 let fmReader idx = seekReadIndexedRow (ctxt.getNumRows TableNames.FieldMarshal, seekReadFieldMarshalRow ctxt mdv, fst, hfmCompare idx, isSorted ctxt TableNames.FieldMarshal, (snd >> readBlobHeapAsNativeType ctxt)) if seq = 0 then - retRes := { !retRes with + retRes := { !retRes with Marshal=(if hasMarshal then Some (fmReader (TaggedIndex(hfm_ParamDef, idx))) else None) CustomAttrsStored = ctxt.customAttrsReader_ParamDef MetadataIndex = idx} elif seq > Array.length paramsRes then dprintn "bad seq num. for param" - else - paramsRes.[seq - 1] <- - { paramsRes.[seq - 1] with + else + paramsRes.[seq - 1] <- + { paramsRes.[seq - 1] with Marshal=(if hasMarshal then Some (fmReader (TaggedIndex(hfm_ParamDef, idx))) else None) Default = (if hasDefault then Some (seekReadConstant ctxt (TaggedIndex(hc_ParamDef, idx))) else None) Name = readStringHeapOption ctxt nameIdx @@ -2348,13 +2306,13 @@ and seekReadParamExtras (ctxt: ILMetadataReader) mdv (retRes, paramsRes) (idx: i IsOptional = ((inOutMasked &&& 0x0010) <> 0x0) CustomAttrsStored = ctxt.customAttrsReader_ParamDef MetadataIndex = idx } - + and seekReadMethodImpls (ctxt: ILMetadataReader) numtypars tidx = - mkILMethodImplsLazy - (lazy + mkILMethodImplsLazy + (lazy let mdv = ctxt.mdfile.GetView() let mimpls = seekReadIndexedRows (ctxt.getNumRows TableNames.MethodImpl, seekReadMethodImplRow ctxt mdv, (fun (a, _, _) -> a), simpleIndexCompare tidx, isSorted ctxt TableNames.MethodImpl, (fun (_, b, c) -> b, c)) - mimpls |> List.map (fun (b, c) -> + mimpls |> List.map (fun (b, c) -> { OverrideBy= let (MethodData(enclTy, cc, nm, argtys, retty, minst)) = seekReadMethodDefOrRefNoVarargs ctxt numtypars b mkILMethSpecInTy (enclTy, cc, nm, argtys, retty, minst) @@ -2364,27 +2322,27 @@ and seekReadMethodImpls (ctxt: ILMetadataReader) numtypars tidx = OverridesSpec(mspec.MethodRef, mspec.DeclaringType) })) and seekReadMultipleMethodSemantics (ctxt: ILMetadataReader) (flags, id) = - seekReadIndexedRows - (ctxt.getNumRows TableNames.MethodSemantics, - seekReadMethodSemanticsRow ctxt, - (fun (_flags, _, c) -> c), - hsCompare id, - isSorted ctxt TableNames.MethodSemantics, - (fun (a, b, _c) -> + seekReadIndexedRows + (ctxt.getNumRows TableNames.MethodSemantics, + seekReadMethodSemanticsRow ctxt, + (fun (_flags, _, c) -> c), + hsCompare id, + isSorted ctxt TableNames.MethodSemantics, + (fun (a, b, _c) -> let (MethodData(enclTy, cc, nm, argtys, retty, minst)) = seekReadMethodDefAsMethodData ctxt b a, (mkILMethSpecInTy (enclTy, cc, nm, argtys, retty, minst)).MethodRef)) - |> List.filter (fun (flags2, _) -> flags = flags2) - |> List.map snd + |> List.filter (fun (flags2, _) -> flags = flags2) + |> List.map snd and seekReadoptional_MethodSemantics ctxt id = - match seekReadMultipleMethodSemantics ctxt id with + match seekReadMultipleMethodSemantics ctxt id with | [] -> None | [h] -> Some h | h :: _ -> dprintn "multiple method semantics found"; Some h and seekReadMethodSemantics ctxt id = - match seekReadoptional_MethodSemantics ctxt id with + match seekReadoptional_MethodSemantics ctxt id with | None -> failwith "seekReadMethodSemantics ctxt: no method found" | Some x -> x @@ -2399,23 +2357,23 @@ and seekReadEvent ctxt mdv numtypars idx = otherMethods = seekReadMultipleMethodSemantics ctxt (0x0004, TaggedIndex(hs_Event, idx)), customAttrsStored=ctxt.customAttrsReader_Event, metadataIndex = idx ) - + (* REVIEW: can substantially reduce numbers of EventMap and PropertyMap reads by first checking if the whole table mdv sorted according to ILTypeDef tokens and then doing a binary chop *) and seekReadEvents (ctxt: ILMetadataReader) numtypars tidx = - mkILEventsLazy - (lazy + mkILEventsLazy + (lazy let mdv = ctxt.mdfile.GetView() - match seekReadOptionalIndexedRow (ctxt.getNumRows TableNames.EventMap, (fun i -> i, seekReadEventMapRow ctxt mdv i), (fun (_, row) -> fst row), compare tidx, false, (fun (i, row) -> (i, snd row))) with + match seekReadOptionalIndexedRow (ctxt.getNumRows TableNames.EventMap, (fun i -> i, seekReadEventMapRow ctxt mdv i), (fun (_, row) -> fst row), compare tidx, false, (fun (i, row) -> (i, snd row))) with | None -> [] | Some (rowNum, beginEventIdx) -> let endEventIdx = - if rowNum >= ctxt.getNumRows TableNames.EventMap then + if rowNum >= ctxt.getNumRows TableNames.EventMap then ctxt.getNumRows TableNames.Event + 1 else let (_, endEventIdx) = seekReadEventMapRow ctxt mdv (rowNum + 1) endEventIdx - [ if beginEventIdx > 0 then + [ if beginEventIdx > 0 then for i in beginEventIdx .. endEventIdx - 1 do yield seekReadEvent ctxt mdv numtypars i ]) @@ -2427,10 +2385,10 @@ and seekReadProperty ctxt mdv numtypars idx = (* NOTE: the "ThisConv" value on the property is not reliable: better to look on the getter/setter *) (* NOTE: e.g. tlbimp on Office msword.olb seems to set this incorrectly *) let cc2 = - match getter with + match getter with | Some mref -> mref.CallingConv.ThisConv - | None -> - match setter with + | None -> + match setter with | Some mref -> mref.CallingConv .ThisConv | None -> cc @@ -2444,28 +2402,28 @@ and seekReadProperty ctxt mdv numtypars idx = args=argtys, customAttrsStored=ctxt.customAttrsReader_Property, metadataIndex = idx ) - + and seekReadProperties (ctxt: ILMetadataReader) numtypars tidx = mkILPropertiesLazy - (lazy + (lazy let mdv = ctxt.mdfile.GetView() - match seekReadOptionalIndexedRow (ctxt.getNumRows TableNames.PropertyMap, (fun i -> i, seekReadPropertyMapRow ctxt mdv i), (fun (_, row) -> fst row), compare tidx, false, (fun (i, row) -> (i, snd row))) with + match seekReadOptionalIndexedRow (ctxt.getNumRows TableNames.PropertyMap, (fun i -> i, seekReadPropertyMapRow ctxt mdv i), (fun (_, row) -> fst row), compare tidx, false, (fun (i, row) -> (i, snd row))) with | None -> [] | Some (rowNum, beginPropIdx) -> let endPropIdx = - if rowNum >= ctxt.getNumRows TableNames.PropertyMap then + if rowNum >= ctxt.getNumRows TableNames.PropertyMap then ctxt.getNumRows TableNames.Property + 1 else let (_, endPropIdx) = seekReadPropertyMapRow ctxt mdv (rowNum + 1) endPropIdx - [ if beginPropIdx > 0 then + [ if beginPropIdx > 0 then for i in beginPropIdx .. endPropIdx - 1 do yield seekReadProperty ctxt mdv numtypars i ]) -and customAttrsReader ctxtH tag: ILAttributesStored = +and customAttrsReader ctxtH tag: ILAttributesStored = mkILCustomAttrsReader - (fun idx -> + (fun idx -> let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() let reader = @@ -2477,10 +2435,10 @@ and customAttrsReader ctxtH tag: ILAttributesStored = } seekReadIndexedRowsByInterface (ctxt.getNumRows TableNames.CustomAttribute) (isSorted ctxt TableNames.CustomAttribute) reader) -and seekReadCustomAttr ctxt (TaggedIndex(cat, idx), b) = +and seekReadCustomAttr ctxt (TaggedIndex(cat, idx), b) = ctxt.seekReadCustomAttr (CustomAttrIdx (cat, idx, b)) -and seekReadCustomAttrUncached ctxtH (CustomAttrIdx (cat, idx, valIdx)) = +and seekReadCustomAttrUncached ctxtH (CustomAttrIdx (cat, idx, valIdx)) = let ctxt = getHole ctxtH let method = seekReadCustomAttrType ctxt (TaggedIndex(cat, idx)) let data = @@ -2490,116 +2448,115 @@ and seekReadCustomAttrUncached ctxtH (CustomAttrIdx (cat, idx, valIdx)) = let elements = [] ILAttribute.Encoded (method, data, elements) -and securityDeclsReader ctxtH tag = +and securityDeclsReader ctxtH tag = mkILSecurityDeclsReader - (fun idx -> + (fun idx -> let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() - seekReadIndexedRows (ctxt.getNumRows TableNames.Permission, - seekReadPermissionRow ctxt mdv, - (fun (_, par, _) -> par), - hdsCompare (TaggedIndex(tag,idx)), - isSorted ctxt TableNames.Permission, + seekReadIndexedRows (ctxt.getNumRows TableNames.Permission, + seekReadPermissionRow ctxt mdv, + (fun (_, par, _) -> par), + hdsCompare (TaggedIndex(tag,idx)), + isSorted ctxt TableNames.Permission, (fun (act, _, ty) -> seekReadSecurityDecl ctxt (act, ty))) |> List.toArray) -and seekReadSecurityDecl ctxt (act, ty) = - ILSecurityDecl ((if List.memAssoc (int act) (Lazy.force ILSecurityActionRevMap) then List.assoc (int act) (Lazy.force ILSecurityActionRevMap) else failwith "unknown security action"), +and seekReadSecurityDecl ctxt (act, ty) = + ILSecurityDecl ((if List.memAssoc (int act) (Lazy.force ILSecurityActionRevMap) then List.assoc (int act) (Lazy.force ILSecurityActionRevMap) else failwith "unknown security action"), readBlobHeap ctxt ty) and seekReadConstant (ctxt: ILMetadataReader) idx = - let kind, vidx = seekReadIndexedRow (ctxt.getNumRows TableNames.Constant, - seekReadConstantRow ctxt, - (fun (_, key, _) -> key), + let kind, vidx = seekReadIndexedRow (ctxt.getNumRows TableNames.Constant, + seekReadConstantRow ctxt, + (fun (_, key, _) -> key), hcCompare idx, isSorted ctxt TableNames.Constant, (fun (kind, _, v) -> kind, v)) - match kind with - | x when x = uint16 et_STRING -> + match kind with + | x when x = uint16 et_STRING -> let blobHeap = readBlobHeap ctxt vidx let s = System.Text.Encoding.Unicode.GetString(blobHeap, 0, blobHeap.Length) - ILFieldInit.String s - | x when x = uint16 et_BOOLEAN -> ILFieldInit.Bool (readBlobHeapAsBool ctxt vidx) - | x when x = uint16 et_CHAR -> ILFieldInit.Char (readBlobHeapAsUInt16 ctxt vidx) - | x when x = uint16 et_I1 -> ILFieldInit.Int8 (readBlobHeapAsSByte ctxt vidx) - | x when x = uint16 et_I2 -> ILFieldInit.Int16 (readBlobHeapAsInt16 ctxt vidx) - | x when x = uint16 et_I4 -> ILFieldInit.Int32 (readBlobHeapAsInt32 ctxt vidx) - | x when x = uint16 et_I8 -> ILFieldInit.Int64 (readBlobHeapAsInt64 ctxt vidx) - | x when x = uint16 et_U1 -> ILFieldInit.UInt8 (readBlobHeapAsByte ctxt vidx) - | x when x = uint16 et_U2 -> ILFieldInit.UInt16 (readBlobHeapAsUInt16 ctxt vidx) - | x when x = uint16 et_U4 -> ILFieldInit.UInt32 (readBlobHeapAsUInt32 ctxt vidx) - | x when x = uint16 et_U8 -> ILFieldInit.UInt64 (readBlobHeapAsUInt64 ctxt vidx) - | x when x = uint16 et_R4 -> ILFieldInit.Single (readBlobHeapAsSingle ctxt vidx) - | x when x = uint16 et_R8 -> ILFieldInit.Double (readBlobHeapAsDouble ctxt vidx) + ILFieldInit.String s + | x when x = uint16 et_BOOLEAN -> ILFieldInit.Bool (readBlobHeapAsBool ctxt vidx) + | x when x = uint16 et_CHAR -> ILFieldInit.Char (readBlobHeapAsUInt16 ctxt vidx) + | x when x = uint16 et_I1 -> ILFieldInit.Int8 (readBlobHeapAsSByte ctxt vidx) + | x when x = uint16 et_I2 -> ILFieldInit.Int16 (readBlobHeapAsInt16 ctxt vidx) + | x when x = uint16 et_I4 -> ILFieldInit.Int32 (readBlobHeapAsInt32 ctxt vidx) + | x when x = uint16 et_I8 -> ILFieldInit.Int64 (readBlobHeapAsInt64 ctxt vidx) + | x when x = uint16 et_U1 -> ILFieldInit.UInt8 (readBlobHeapAsByte ctxt vidx) + | x when x = uint16 et_U2 -> ILFieldInit.UInt16 (readBlobHeapAsUInt16 ctxt vidx) + | x when x = uint16 et_U4 -> ILFieldInit.UInt32 (readBlobHeapAsUInt32 ctxt vidx) + | x when x = uint16 et_U8 -> ILFieldInit.UInt64 (readBlobHeapAsUInt64 ctxt vidx) + | x when x = uint16 et_R4 -> ILFieldInit.Single (readBlobHeapAsSingle ctxt vidx) + | x when x = uint16 et_R8 -> ILFieldInit.Double (readBlobHeapAsDouble ctxt vidx) | x when x = uint16 et_CLASS || x = uint16 et_OBJECT -> ILFieldInit.Null | _ -> ILFieldInit.Null -and seekReadImplMap (ctxt: ILMetadataReader) nm midx = - lazy - MethodBody.PInvoke - (lazy +and seekReadImplMap (ctxt: ILMetadataReader) nm midx = + mkMethBodyLazyAux + (lazy let mdv = ctxt.mdfile.GetView() - let (flags, nameIdx, scopeIdx) = seekReadIndexedRow (ctxt.getNumRows TableNames.ImplMap, - seekReadImplMapRow ctxt mdv, - (fun (_, m, _, _) -> m), - mfCompare (TaggedIndex(mf_MethodDef, midx)), - isSorted ctxt TableNames.ImplMap, + let (flags, nameIdx, scopeIdx) = seekReadIndexedRow (ctxt.getNumRows TableNames.ImplMap, + seekReadImplMapRow ctxt mdv, + (fun (_, m, _, _) -> m), + mfCompare (TaggedIndex(mf_MethodDef, midx)), + isSorted ctxt TableNames.ImplMap, (fun (a, _, c, d) -> a, c, d)) - let cc = + let cc = let masked = flags &&& 0x0700 - if masked = 0x0000 then PInvokeCallingConvention.None - elif masked = 0x0200 then PInvokeCallingConvention.Cdecl - elif masked = 0x0300 then PInvokeCallingConvention.Stdcall - elif masked = 0x0400 then PInvokeCallingConvention.Thiscall - elif masked = 0x0500 then PInvokeCallingConvention.Fastcall - elif masked = 0x0100 then PInvokeCallingConvention.WinApi + if masked = 0x0000 then PInvokeCallingConvention.None + elif masked = 0x0200 then PInvokeCallingConvention.Cdecl + elif masked = 0x0300 then PInvokeCallingConvention.Stdcall + elif masked = 0x0400 then PInvokeCallingConvention.Thiscall + elif masked = 0x0500 then PInvokeCallingConvention.Fastcall + elif masked = 0x0100 then PInvokeCallingConvention.WinApi else (dprintn "strange CallingConv"; PInvokeCallingConvention.None) - let enc = + let enc = let masked = flags &&& 0x0006 - if masked = 0x0000 then PInvokeCharEncoding.None - elif masked = 0x0002 then PInvokeCharEncoding.Ansi - elif masked = 0x0004 then PInvokeCharEncoding.Unicode - elif masked = 0x0006 then PInvokeCharEncoding.Auto + if masked = 0x0000 then PInvokeCharEncoding.None + elif masked = 0x0002 then PInvokeCharEncoding.Ansi + elif masked = 0x0004 then PInvokeCharEncoding.Unicode + elif masked = 0x0006 then PInvokeCharEncoding.Auto else (dprintn "strange CharEncoding"; PInvokeCharEncoding.None) - let bestfit = + let bestfit = let masked = flags &&& 0x0030 - if masked = 0x0000 then PInvokeCharBestFit.UseAssembly - elif masked = 0x0010 then PInvokeCharBestFit.Enabled - elif masked = 0x0020 then PInvokeCharBestFit.Disabled + if masked = 0x0000 then PInvokeCharBestFit.UseAssembly + elif masked = 0x0010 then PInvokeCharBestFit.Enabled + elif masked = 0x0020 then PInvokeCharBestFit.Disabled else (dprintn "strange CharBestFit"; PInvokeCharBestFit.UseAssembly) - let unmap = + let unmap = let masked = flags &&& 0x3000 - if masked = 0x0000 then PInvokeThrowOnUnmappableChar.UseAssembly - elif masked = 0x1000 then PInvokeThrowOnUnmappableChar.Enabled - elif masked = 0x2000 then PInvokeThrowOnUnmappableChar.Disabled + if masked = 0x0000 then PInvokeThrowOnUnmappableChar.UseAssembly + elif masked = 0x1000 then PInvokeThrowOnUnmappableChar.Enabled + elif masked = 0x2000 then PInvokeThrowOnUnmappableChar.Disabled else (dprintn "strange ThrowOnUnmappableChar"; PInvokeThrowOnUnmappableChar.UseAssembly) - { CallingConv = cc - CharEncoding = enc - CharBestFit=bestfit - ThrowOnUnmappableChar=unmap - NoMangle = (flags &&& 0x0001) <> 0x0 - LastError = (flags &&& 0x0040) <> 0x0 - Name = - (match readStringHeapOption ctxt nameIdx with - | None -> nm - | Some nm2 -> nm2) - Where = seekReadModuleRef ctxt mdv scopeIdx }) - -and seekReadTopCode (ctxt: ILMetadataReader) pev mdv numtypars (sz: int) start seqpoints = + MethodBody.PInvoke { CallingConv = cc + CharEncoding = enc + CharBestFit=bestfit + ThrowOnUnmappableChar=unmap + NoMangle = (flags &&& 0x0001) <> 0x0 + LastError = (flags &&& 0x0040) <> 0x0 + Name = + (match readStringHeapOption ctxt nameIdx with + | None -> nm + | Some nm2 -> nm2) + Where = seekReadModuleRef ctxt mdv scopeIdx }) + +and seekReadTopCode (ctxt: ILMetadataReader) pev mdv numtypars (sz: int) start seqpoints = let labelsOfRawOffsets = new Dictionary<_, _>(sz/2) let ilOffsetsOfLabels = new Dictionary<_, _>(sz/2) - - let rawToLabel rawOffset = - match labelsOfRawOffsets.TryGetValue rawOffset with + + let rawToLabel rawOffset = + match labelsOfRawOffsets.TryGetValue rawOffset with | true, l -> l - | _ -> + | _ -> let lab = generateCodeLabel() labelsOfRawOffsets.[rawOffset] <- lab lab - let markAsInstructionStart rawOffset ilOffset = + let markAsInstructionStart rawOffset ilOffset = let lab = rawToLabel rawOffset ilOffsetsOfLabels.[lab] <- ilOffset @@ -2609,15 +2566,15 @@ and seekReadTopCode (ctxt: ILMetadataReader) pev mdv numtypars (sz: int) start s let lastb = ref 0x0 let lastb2 = ref 0x0 let b = ref 0x0 - let get () = + let get () = lastb := seekReadByteAsInt32 pev (start + (!curr)) incr curr - b := - if !lastb = 0xfe && !curr < sz then + b := + if !lastb = 0xfe && !curr < sz then lastb2 := seekReadByteAsInt32 pev (start + (!curr)) incr curr !lastb2 - else + else !lastb let seqPointsRemaining = ref seqpoints @@ -2626,26 +2583,26 @@ and seekReadTopCode (ctxt: ILMetadataReader) pev mdv numtypars (sz: int) start s // registering "+string !curr+" as start of an instruction") markAsInstructionStart !curr ibuf.Count - // Insert any sequence points into the instruction sequence - while - (match !seqPointsRemaining with + // Insert any sequence points into the instruction sequence + while + (match !seqPointsRemaining with | (i, _tag) :: _rest when i <= !curr -> true - | _ -> false) + | _ -> false) do - // Emitting one sequence point + // Emitting one sequence point let (_, tag) = List.head !seqPointsRemaining seqPointsRemaining := List.tail !seqPointsRemaining ibuf.Add (I_seqpoint tag) - // Read the prefixes. Leave lastb and lastb2 holding the instruction byte(s) - begin + // Read the prefixes. Leave lastb and lastb2 holding the instruction byte(s) + begin prefixes.al <- Aligned prefixes.tl <- Normalcall prefixes.vol <- Nonvolatile prefixes.ro<-NormalAddress prefixes.constrained<-None get () - while !curr < sz && + while !curr < sz && !lastb = 0xfe && (!b = (i_constrained &&& 0xff) || !b = (i_readonly &&& 0xff) || @@ -2657,13 +2614,13 @@ and seekReadTopCode (ctxt: ILMetadataReader) pev mdv numtypars (sz: int) start s let unal = seekReadByteAsInt32 pev (start + (!curr)) incr curr prefixes.al <- - if unal = 0x1 then Unaligned1 + if unal = 0x1 then Unaligned1 elif unal = 0x2 then Unaligned2 - elif unal = 0x4 then Unaligned4 + elif unal = 0x4 then Unaligned4 else (dprintn "bad alignment for unaligned"; Aligned) elif !b = (i_volatile &&& 0xff) then prefixes.vol <- Volatile elif !b = (i_readonly &&& 0xff) then prefixes.ro <- ReadonlyAddress - elif !b = (i_constrained &&& 0xff) then + elif !b = (i_constrained &&& 0xff) then let uncoded = seekReadUncodedToken pev (start + (!curr)) curr := !curr + 4 let ty = seekReadTypeDefOrRef ctxt numtypars AsObject [] (uncodedTokenToTypeDefOrRefOrSpec uncoded) @@ -2674,23 +2631,23 @@ and seekReadTopCode (ctxt: ILMetadataReader) pev mdv numtypars (sz: int) start s end // data for instruction begins at "+string !curr - // Read and decode the instruction - if (!curr <= sz) then - let idecoder = + // Read and decode the instruction + if (!curr <= sz) then + let idecoder = if !lastb = 0xfe then getTwoByteInstr ( !lastb2) else getOneByteInstr ( !lastb) - let instr = - match idecoder with - | I_u16_u8_instr f -> + let instr = + match idecoder with + | I_u16_u8_instr f -> let x = seekReadByte pev (start + (!curr)) |> uint16 curr := !curr + 1 f prefixes x - | I_u16_u16_instr f -> + | I_u16_u16_instr f -> let x = seekReadUInt16 pev (start + (!curr)) curr := !curr + 2 f prefixes x - | I_none_instr f -> - f prefixes + | I_none_instr f -> + f prefixes | I_i64_instr f -> let x = seekReadInt64 pev (start + (!curr)) curr := !curr + 8 @@ -2714,8 +2671,8 @@ and seekReadTopCode (ctxt: ILMetadataReader) pev mdv numtypars (sz: int) start s | I_field_instr f -> let (tab, tok) = seekReadUncodedToken pev (start + (!curr)) curr := !curr + 4 - let fspec = - if tab = TableNames.Field then + let fspec = + if tab = TableNames.Field then seekReadFieldDefAsFieldSpec ctxt tok elif tab = TableNames.MemberRef then seekReadMemberRefAsFieldSpec ctxt numtypars tok @@ -2723,17 +2680,17 @@ and seekReadTopCode (ctxt: ILMetadataReader) pev mdv numtypars (sz: int) start s f prefixes fspec | I_method_instr f -> // method instruction, curr = "+string !curr - + let (tab, idx) = seekReadUncodedToken pev (start + (!curr)) curr := !curr + 4 let (VarArgMethodData(enclTy, cc, nm, argtys, varargs, retty, minst)) = - if tab = TableNames.Method then + if tab = TableNames.Method then seekReadMethodDefOrRef ctxt numtypars (TaggedIndex(mdor_MethodDef, idx)) - elif tab = TableNames.MemberRef then + elif tab = TableNames.MemberRef then seekReadMethodDefOrRef ctxt numtypars (TaggedIndex(mdor_MemberRef, idx)) - elif tab = TableNames.MethodSpec then - seekReadMethodSpecAsMethodData ctxt numtypars idx - else failwith "bad table in MethodDefOrRefOrSpec" + elif tab = TableNames.MethodSpec then + seekReadMethodSpecAsMethodData ctxt numtypars idx + else failwith "bad table in MethodDefOrRefOrSpec" match enclTy with | ILType.Array (shape, ty) -> match nm with @@ -2776,152 +2733,141 @@ and seekReadTopCode (ctxt: ILMetadataReader) pev mdv numtypars (sz: int) start s curr := !curr + 1 let dest = !curr + offsDest f prefixes (rawToLabel dest) - | I_invalid_instr -> - dprintn ("invalid instruction: "+string !lastb+ (if !lastb = 0xfe then ", "+string !lastb2 else "")) + | I_invalid_instr -> + dprintn ("invalid instruction: "+string !lastb+ (if !lastb = 0xfe then ", "+string !lastb2 else "")) I_ret - | I_tok_instr f -> + | I_tok_instr f -> let (tab, idx) = seekReadUncodedToken pev (start + (!curr)) curr := !curr + 4 - (* REVIEW: this incorrectly labels all MemberRef tokens as ILMethod's: we should go look at the MemberRef sig to determine if it is a field or method *) - let token_info = - if tab = TableNames.Method || tab = TableNames.MemberRef (* REVIEW: generics or tab = TableNames.MethodSpec *) then + (* REVIEW: this incorrectly labels all MemberRef tokens as ILMethod's: we should go look at the MemberRef sig to determine if it is a field or method *) + let token_info = + if tab = TableNames.Method || tab = TableNames.MemberRef (* REVIEW: generics or tab = TableNames.MethodSpec *) then let (MethodData(enclTy, cc, nm, argtys, retty, minst)) = seekReadMethodDefOrRefNoVarargs ctxt numtypars (uncodedTokenToMethodDefOrRef (tab, idx)) ILToken.ILMethod (mkILMethSpecInTy (enclTy, cc, nm, argtys, retty, minst)) - elif tab = TableNames.Field then + elif tab = TableNames.Field then ILToken.ILField (seekReadFieldDefAsFieldSpec ctxt idx) - elif tab = TableNames.TypeDef || tab = TableNames.TypeRef || tab = TableNames.TypeSpec then - ILToken.ILType (seekReadTypeDefOrRef ctxt numtypars AsObject [] (uncodedTokenToTypeDefOrRefOrSpec (tab, idx))) - else failwith "bad token for ldtoken" + elif tab = TableNames.TypeDef || tab = TableNames.TypeRef || tab = TableNames.TypeSpec then + ILToken.ILType (seekReadTypeDefOrRef ctxt numtypars AsObject [] (uncodedTokenToTypeDefOrRefOrSpec (tab, idx))) + else failwith "bad token for ldtoken" f prefixes token_info - | I_sig_instr f -> + | I_sig_instr f -> let (tab, idx) = seekReadUncodedToken pev (start + (!curr)) curr := !curr + 4 if tab <> TableNames.StandAloneSig then dprintn "strange table for callsig token" let generic, _genarity, cc, retty, argtys, varargs = readBlobHeapAsMethodSig ctxt numtypars (seekReadStandAloneSigRow ctxt mdv idx) if generic then failwith "bad image: a generic method signature is begin used at a calli instruction" f prefixes (mkILCallSig (cc, argtys, retty), varargs) - | I_switch_instr f -> + | I_switch_instr f -> let n = (seekReadInt32 pev (start + (!curr))) curr := !curr + 4 - let offsets = - List.init n (fun _ -> + let offsets = + List.init n (fun _ -> let i = (seekReadInt32 pev (start + (!curr))) - curr := !curr + 4 - i) + curr := !curr + 4 + i) let dests = List.map (fun offs -> rawToLabel (!curr + offs)) offsets f prefixes dests ibuf.Add instr done - // Finished reading instructions - mark the end of the instruction stream in case the PDB information refers to it. + // Finished reading instructions - mark the end of the instruction stream in case the PDB information refers to it. markAsInstructionStart !curr ibuf.Count - // Build the function that maps from raw labels (offsets into the bytecode stream) to indexes in the AbsIL instruction stream + // Build the function that maps from raw labels (offsets into the bytecode stream) to indexes in the AbsIL instruction stream let lab2pc = ilOffsetsOfLabels - // Some offsets used in debug info refer to the end of an instruction, rather than the - // start of the subsequent instruction. But all labels refer to instruction starts, - // apart from a final label which refers to the end of the method. This function finds - // the start of the next instruction referred to by the raw offset. - let raw2nextLab rawOffset = - let isInstrStart x = - match labelsOfRawOffsets.TryGetValue x with + // Some offsets used in debug info refer to the end of an instruction, rather than the + // start of the subsequent instruction. But all labels refer to instruction starts, + // apart from a final label which refers to the end of the method. This function finds + // the start of the next instruction referred to by the raw offset. + let raw2nextLab rawOffset = + let isInstrStart x = + match labelsOfRawOffsets.TryGetValue x with | true, lab -> ilOffsetsOfLabels.ContainsKey lab | _ -> false - if isInstrStart rawOffset then rawToLabel rawOffset + if isInstrStart rawOffset then rawToLabel rawOffset elif isInstrStart (rawOffset+1) then rawToLabel (rawOffset+1) else failwith ("the bytecode raw offset "+string rawOffset+" did not refer either to the start or end of an instruction") let instrs = ibuf.ToArray() instrs, rawToLabel, lab2pc, raw2nextLab #if FX_NO_PDB_READER -and seekReadMethodRVA (pectxt: PEReader) (ctxt: ILMetadataReader) (_idx, nm, _internalcall, noinline, aggressiveinline, numtypars) rva = +and seekReadMethodRVA (pectxt: PEReader) (ctxt: ILMetadataReader) (_idx, nm, _internalcall, noinline, aggressiveinline, numtypars) rva = #else -and seekReadMethodRVA (pectxt: PEReader) (ctxt: ILMetadataReader) (idx, nm, _internalcall, noinline, aggressiveinline, numtypars) rva = +and seekReadMethodRVA (pectxt: PEReader) (ctxt: ILMetadataReader) (idx, nm, _internalcall, noinline, aggressiveinline, numtypars) rva = #endif - lazy - let pev = pectxt.pefile.GetView() - let baseRVA = pectxt.anyV2P("method rva", rva) - // ": reading body of method "+nm+" at rva "+string rva+", phys "+string baseRVA - let b = seekReadByte pev baseRVA - - let isTinyFormat = (b &&& e_CorILMethod_FormatMask) = e_CorILMethod_TinyFormat - let isFatFormat = (b &&& e_CorILMethod_FormatMask) = e_CorILMethod_FatFormat - - if not isTinyFormat && not isFatFormat then - if logging then failwith "unknown format" - MethodBody.Abstract - else - - MethodBody.IL + mkMethBodyLazyAux (lazy let pev = pectxt.pefile.GetView() let mdv = ctxt.mdfile.GetView() - // Read any debug information for this method into temporary data structures - // -- a list of locals, marked with the raw offsets (actually closures which accept the resolution function that maps raw offsets to labels) - // -- an overall range for the method - // -- the sequence points for the method - let localPdbInfos, methRangePdbInfo, seqpoints = + // Read any debug information for this method into temporary data structures + // -- a list of locals, marked with the raw offsets (actually closures which accept the resolution function that maps raw offsets to labels) + // -- an overall range for the method + // -- the sequence points for the method + let localPdbInfos, methRangePdbInfo, seqpoints = #if FX_NO_PDB_READER [], None, [] #else - match pectxt.pdb with - | None -> + match pectxt.pdb with + | None -> [], None, [] - | Some (pdbr, get_doc) -> - try + | Some (pdbr, get_doc) -> + try let pdbm = pdbReaderGetMethod pdbr (uncodedToken TableNames.Method idx) let sps = pdbMethodGetSequencePoints pdbm (* let roota, rootb = pdbScopeGetOffsets rootScope in *) let seqpoints = - let arr = - sps |> Array.map (fun sp -> + let arr = + sps |> Array.map (fun sp -> // It is VERY annoying to have to call GetURL for the document for // each sequence point. This appears to be a short coming of the PDB // reader API. They should return an index into the array of documents for the reader let sourcedoc = get_doc (pdbDocumentGetURL sp.pdbSeqPointDocument) - let source = - ILSourceMarker.Create(document = sourcedoc, - line = sp.pdbSeqPointLine, - column = sp.pdbSeqPointColumn, - endLine = sp.pdbSeqPointEndLine, + let source = + ILSourceMarker.Create(document = sourcedoc, + line = sp.pdbSeqPointLine, + column = sp.pdbSeqPointColumn, + endLine = sp.pdbSeqPointEndLine, endColumn = sp.pdbSeqPointEndColumn) (sp.pdbSeqPointOffset, source)) - + Array.sortInPlaceBy fst arr - + Array.toList arr - let rec scopes scp = + let rec scopes scp = let a, b = pdbScopeGetOffsets scp let lvs = pdbScopeGetLocals scp - let ilvs = - lvs - |> Array.toList - |> List.filter (fun l -> + let ilvs = + lvs + |> Array.toList + |> List.filter (fun l -> let k, _idx = pdbVariableGetAddressAttributes l - k = 1 (* ADDR_IL_OFFSET *)) + k = 1 (* ADDR_IL_OFFSET *)) let ilinfos: ILLocalDebugMapping list = - ilvs |> List.map (fun ilv -> + ilvs |> List.map (fun ilv -> let _k, idx = pdbVariableGetAddressAttributes ilv let n = pdbVariableGetName ilv - { LocalIndex= idx + { LocalIndex= idx LocalName=n}) - - let thisOne = + + let thisOne = (fun raw2nextLab -> - { Range= (raw2nextLab a, raw2nextLab b) + { Range= (raw2nextLab a, raw2nextLab b) DebugMappings = ilinfos }: ILLocalDebugInfo ) let others = List.foldBack (scopes >> (@)) (Array.toList (pdbScopeGetChildren scp)) [] thisOne :: others let localPdbInfos = [] (* scopes fail for mscorlib scopes rootScope *) - // REVIEW: look through sps to get ranges? Use GetRanges?? Change AbsIL?? + // REVIEW: look through sps to get ranges? Use GetRanges?? Change AbsIL?? (localPdbInfos, None, seqpoints) - with e -> + with e -> // "* Warning: PDB info for method "+nm+" could not be read and will be ignored: "+e.Message [], None, [] #endif - - if isTinyFormat then + + let baseRVA = pectxt.anyV2P("method rva", rva) + // ": reading body of method "+nm+" at rva "+string rva+", phys "+string baseRVA + let b = seekReadByte pev baseRVA + if (b &&& e_CorILMethod_FormatMask) = e_CorILMethod_TinyFormat then let codeBase = baseRVA + 1 let codeSize = (int32 b >>>& 2) // tiny format for "+nm+", code size = " + string codeSize) @@ -2929,34 +2875,35 @@ and seekReadMethodRVA (pectxt: PEReader) (ctxt: ILMetadataReader) (idx, nm, _int (* Convert the linear code format to the nested code format *) let localPdbInfos2 = List.map (fun f -> f raw2nextLab) localPdbInfos let code = buildILCode nm lab2pc instrs [] localPdbInfos2 - { IsZeroInit=false - MaxStack= 8 - NoInlining=noinline - AggressiveInlining=aggressiveinline - Locals=List.empty - SourceMarker=methRangePdbInfo - Code=code } - - else + MethodBody.IL + { IsZeroInit=false + MaxStack= 8 + NoInlining=noinline + AggressiveInlining=aggressiveinline + Locals=List.empty + SourceMarker=methRangePdbInfo + Code=code } + + elif (b &&& e_CorILMethod_FormatMask) = e_CorILMethod_FatFormat then let hasMoreSections = (b &&& e_CorILMethod_MoreSects) <> 0x0uy let initlocals = (b &&& e_CorILMethod_InitLocals) <> 0x0uy let maxstack = seekReadUInt16AsInt32 pev (baseRVA + 2) let codeSize = seekReadInt32 pev (baseRVA + 4) let localsTab, localToken = seekReadUncodedToken pev (baseRVA + 8) let codeBase = baseRVA + 12 - let locals = - if localToken = 0x0 then [] - else + let locals = + if localToken = 0x0 then [] + else if localsTab <> TableNames.StandAloneSig then dprintn "strange table for locals token" - readBlobHeapAsLocalsSig ctxt numtypars (seekReadStandAloneSigRow ctxt pev localToken) - + readBlobHeapAsLocalsSig ctxt numtypars (seekReadStandAloneSigRow ctxt pev localToken) + // fat format for "+nm+", code size = " + string codeSize+", hasMoreSections = "+(if hasMoreSections then "true" else "false")+", b = "+string b) - - // Read the method body + + // Read the method body let instrs, rawToLabel, lab2pc, raw2nextLab = seekReadTopCode ctxt pev mdv numtypars ( codeSize) codeBase seqpoints - // Read all the sections that follow the method body. - // These contain the exception clauses. + // Read all the sections that follow the method body. + // These contain the exception clauses. let nextSectionBase = ref (align 4 (codeBase + codeSize)) let moreSections = ref hasMoreSections let seh = ref [] @@ -2964,18 +2911,18 @@ and seekReadMethodRVA (pectxt: PEReader) (ctxt: ILMetadataReader) (idx, nm, _int let sectionBase = !nextSectionBase let sectionFlag = seekReadByte pev sectionBase // fat format for "+nm+", sectionFlag = " + string sectionFlag) - let sectionSize, clauses = - if (sectionFlag &&& e_CorILMethod_Sect_FatFormat) <> 0x0uy then + let sectionSize, clauses = + if (sectionFlag &&& e_CorILMethod_Sect_FatFormat) <> 0x0uy then let bigSize = (seekReadInt32 pev sectionBase) >>>& 8 // bigSize = "+string bigSize) - let clauses = - if (sectionFlag &&& e_CorILMethod_Sect_EHTable) <> 0x0uy then - // WORKAROUND: The ECMA spec says this should be - // let numClauses = ((bigSize - 4) / 24) in + let clauses = + if (sectionFlag &&& e_CorILMethod_Sect_EHTable) <> 0x0uy then + // WORKAROUND: The ECMA spec says this should be + // let numClauses = ((bigSize - 4) / 24) in // but the CCI IL generator generates multiples of 24 let numClauses = (bigSize / 24) - - List.init numClauses (fun i -> + + List.init numClauses (fun i -> let clauseBase = sectionBase + 4 + (i * 24) let kind = seekReadInt32 pev (clauseBase + 0) let st1 = seekReadInt32 pev (clauseBase + 4) @@ -2986,16 +2933,16 @@ and seekReadMethodRVA (pectxt: PEReader) (ctxt: ILMetadataReader) (idx, nm, _int (kind, st1, sz1, st2, sz2, extra)) else [] bigSize, clauses - else + else let smallSize = seekReadByteAsInt32 pev (sectionBase + 0x01) - let clauses = - if (sectionFlag &&& e_CorILMethod_Sect_EHTable) <> 0x0uy then - // WORKAROUND: The ECMA spec says this should be - // let numClauses = ((smallSize - 4) / 12) in - // but the C# compiler (or some IL generator) generates multiples of 12 + let clauses = + if (sectionFlag &&& e_CorILMethod_Sect_EHTable) <> 0x0uy then + // WORKAROUND: The ECMA spec says this should be + // let numClauses = ((smallSize - 4) / 12) in + // but the C# compiler (or some IL generator) generates multiples of 12 let numClauses = (smallSize / 12) // dprintn (nm+" has " + string numClauses + " tiny seh clauses") - List.init numClauses (fun i -> + List.init numClauses (fun i -> let clauseBase = sectionBase + 4 + (i * 12) let kind = seekReadUInt16AsInt32 pev (clauseBase + 0) if logging then dprintn ("One tiny SEH clause, kind = "+string kind) @@ -3005,125 +2952,129 @@ and seekReadMethodRVA (pectxt: PEReader) (ctxt: ILMetadataReader) (idx, nm, _int let sz2 = seekReadByteAsInt32 pev (clauseBase + 7) let extra = seekReadInt32 pev (clauseBase + 8) (kind, st1, sz1, st2, sz2, extra)) - else + else [] smallSize, clauses - // Morph together clauses that cover the same range - let sehClauses = - let sehMap = Dictionary<_, _>(clauses.Length, HashIdentity.Structural) - + // Morph together clauses that cover the same range + let sehClauses = + let sehMap = Dictionary<_, _>(clauses.Length, HashIdentity.Structural) + List.iter (fun (kind, st1, sz1, st2, sz2, extra) -> let tryStart = rawToLabel st1 let tryFinish = rawToLabel (st1 + sz1) let handlerStart = rawToLabel st2 let handlerFinish = rawToLabel (st2 + sz2) - let clause = - if kind = e_COR_ILEXCEPTION_CLAUSE_EXCEPTION then + let clause = + if kind = e_COR_ILEXCEPTION_CLAUSE_EXCEPTION then ILExceptionClause.TypeCatch(seekReadTypeDefOrRef ctxt numtypars AsObject List.empty (uncodedTokenToTypeDefOrRefOrSpec (i32ToUncodedToken extra)), (handlerStart, handlerFinish) ) - elif kind = e_COR_ILEXCEPTION_CLAUSE_FILTER then + elif kind = e_COR_ILEXCEPTION_CLAUSE_FILTER then let filterStart = rawToLabel extra let filterFinish = handlerStart ILExceptionClause.FilterCatch((filterStart, filterFinish), (handlerStart, handlerFinish)) - elif kind = e_COR_ILEXCEPTION_CLAUSE_FINALLY then + elif kind = e_COR_ILEXCEPTION_CLAUSE_FINALLY then ILExceptionClause.Finally(handlerStart, handlerFinish) - elif kind = e_COR_ILEXCEPTION_CLAUSE_FAULT then + elif kind = e_COR_ILEXCEPTION_CLAUSE_FAULT then ILExceptionClause.Fault(handlerStart, handlerFinish) else begin dprintn (ctxt.fileName + ": unknown exception handler kind: "+string kind) ILExceptionClause.Finally(handlerStart, handlerFinish) end - + let key = (tryStart, tryFinish) match sehMap.TryGetValue key with | true, prev -> sehMap.[key] <- prev @ [clause] | _ -> sehMap.[key] <- [clause]) clauses - ([], sehMap) ||> Seq.fold (fun acc (KeyValue(key, bs)) -> [ for b in bs -> {Range=key; Clause=b}: ILExceptionSpec ] @ acc) + ([], sehMap) ||> Seq.fold (fun acc (KeyValue(key, bs)) -> [ for b in bs -> {Range=key; Clause=b}: ILExceptionSpec ] @ acc) seh := sehClauses moreSections := (sectionFlag &&& e_CorILMethod_Sect_MoreSects) <> 0x0uy nextSectionBase := sectionBase + sectionSize done (* while *) (* Convert the linear code format to the nested code format *) - if logging then dprintn ("doing localPdbInfos2") + if logging then dprintn ("doing localPdbInfos2") let localPdbInfos2 = List.map (fun f -> f raw2nextLab) localPdbInfos - if logging then dprintn ("done localPdbInfos2, checking code...") + if logging then dprintn ("done localPdbInfos2, checking code...") let code = buildILCode nm lab2pc instrs !seh localPdbInfos2 - if logging then dprintn ("done checking code.") - { IsZeroInit=initlocals - MaxStack= maxstack - NoInlining=noinline - AggressiveInlining=aggressiveinline - Locals = locals - Code=code - SourceMarker=methRangePdbInfo}) - -and int32AsILVariantType (ctxt: ILMetadataReader) (n: int32) = - if List.memAssoc n (Lazy.force ILVariantTypeRevMap) then + if logging then dprintn ("done checking code.") + MethodBody.IL + { IsZeroInit=initlocals + MaxStack= maxstack + NoInlining=noinline + AggressiveInlining=aggressiveinline + Locals = locals + Code=code + SourceMarker=methRangePdbInfo} + else + if logging then failwith "unknown format" + MethodBody.Abstract) + +and int32AsILVariantType (ctxt: ILMetadataReader) (n: int32) = + if List.memAssoc n (Lazy.force ILVariantTypeRevMap) then List.assoc n (Lazy.force ILVariantTypeRevMap) elif (n &&& vt_ARRAY) <> 0x0 then ILNativeVariant.Array (int32AsILVariantType ctxt (n &&& (~~~ vt_ARRAY))) elif (n &&& vt_VECTOR) <> 0x0 then ILNativeVariant.Vector (int32AsILVariantType ctxt (n &&& (~~~ vt_VECTOR))) elif (n &&& vt_BYREF) <> 0x0 then ILNativeVariant.Byref (int32AsILVariantType ctxt (n &&& (~~~ vt_BYREF))) else (dprintn (ctxt.fileName + ": int32AsILVariantType ctxt: unexpected variant type, n = "+string n) ; ILNativeVariant.Empty) -and readBlobHeapAsNativeType ctxt blobIdx = - // reading native type blob "+string blobIdx) +and readBlobHeapAsNativeType ctxt blobIdx = + // reading native type blob "+string blobIdx) let bytes = readBlobHeap ctxt blobIdx let res, _ = sigptrGetILNativeType ctxt bytes 0 res -and sigptrGetILNativeType ctxt bytes sigptr = - // reading native type blob, sigptr= "+string sigptr) +and sigptrGetILNativeType ctxt bytes sigptr = + // reading native type blob, sigptr= "+string sigptr) let ntbyte, sigptr = sigptrGetByte bytes sigptr - if List.memAssoc ntbyte (Lazy.force ILNativeTypeMap) then + if List.memAssoc ntbyte (Lazy.force ILNativeTypeMap) then List.assoc ntbyte (Lazy.force ILNativeTypeMap), sigptr elif ntbyte = 0x0uy then ILNativeType.Empty, sigptr - elif ntbyte = nt_CUSTOMMARSHALER then - // reading native type blob CM1, sigptr= "+string sigptr+ ", bytes.Length = "+string bytes.Length) + elif ntbyte = nt_CUSTOMMARSHALER then + // reading native type blob CM1, sigptr= "+string sigptr+ ", bytes.Length = "+string bytes.Length) let struct (guidLen, sigptr) = sigptrGetZInt32 bytes sigptr - // reading native type blob CM2, sigptr= "+string sigptr+", guidLen = "+string ( guidLen)) + // reading native type blob CM2, sigptr= "+string sigptr+", guidLen = "+string ( guidLen)) let guid, sigptr = sigptrGetBytes ( guidLen) bytes sigptr - // reading native type blob CM3, sigptr= "+string sigptr) + // reading native type blob CM3, sigptr= "+string sigptr) let struct (nativeTypeNameLen, sigptr) = sigptrGetZInt32 bytes sigptr - // reading native type blob CM4, sigptr= "+string sigptr+", nativeTypeNameLen = "+string ( nativeTypeNameLen)) + // reading native type blob CM4, sigptr= "+string sigptr+", nativeTypeNameLen = "+string ( nativeTypeNameLen)) let nativeTypeName, sigptr = sigptrGetString ( nativeTypeNameLen) bytes sigptr - // reading native type blob CM4, sigptr= "+string sigptr+", nativeTypeName = "+nativeTypeName) - // reading native type blob CM5, sigptr= "+string sigptr) + // reading native type blob CM4, sigptr= "+string sigptr+", nativeTypeName = "+nativeTypeName) + // reading native type blob CM5, sigptr= "+string sigptr) let struct (custMarshallerNameLen, sigptr) = sigptrGetZInt32 bytes sigptr - // reading native type blob CM6, sigptr= "+string sigptr+", custMarshallerNameLen = "+string ( custMarshallerNameLen)) + // reading native type blob CM6, sigptr= "+string sigptr+", custMarshallerNameLen = "+string ( custMarshallerNameLen)) let custMarshallerName, sigptr = sigptrGetString ( custMarshallerNameLen) bytes sigptr - // reading native type blob CM7, sigptr= "+string sigptr+", custMarshallerName = "+custMarshallerName) + // reading native type blob CM7, sigptr= "+string sigptr+", custMarshallerName = "+custMarshallerName) let struct (cookieStringLen, sigptr) = sigptrGetZInt32 bytes sigptr - // reading native type blob CM8, sigptr= "+string sigptr+", cookieStringLen = "+string ( cookieStringLen)) + // reading native type blob CM8, sigptr= "+string sigptr+", cookieStringLen = "+string ( cookieStringLen)) let cookieString, sigptr = sigptrGetBytes ( cookieStringLen) bytes sigptr - // reading native type blob CM9, sigptr= "+string sigptr) + // reading native type blob CM9, sigptr= "+string sigptr) ILNativeType.Custom (guid, nativeTypeName, custMarshallerName, cookieString), sigptr - elif ntbyte = nt_FIXEDSYSSTRING then + elif ntbyte = nt_FIXEDSYSSTRING then let struct (i, sigptr) = sigptrGetZInt32 bytes sigptr ILNativeType.FixedSysString i, sigptr - elif ntbyte = nt_FIXEDARRAY then + elif ntbyte = nt_FIXEDARRAY then let struct (i, sigptr) = sigptrGetZInt32 bytes sigptr ILNativeType.FixedArray i, sigptr - elif ntbyte = nt_SAFEARRAY then + elif ntbyte = nt_SAFEARRAY then (if sigptr >= bytes.Length then ILNativeType.SafeArray(ILNativeVariant.Empty, None), sigptr - else + else let struct (i, sigptr) = sigptrGetZInt32 bytes sigptr if sigptr >= bytes.Length then ILNativeType.SafeArray (int32AsILVariantType ctxt i, None), sigptr - else + else let struct (len, sigptr) = sigptrGetZInt32 bytes sigptr let s, sigptr = sigptrGetString ( len) bytes sigptr ILNativeType.SafeArray (int32AsILVariantType ctxt i, Some s), sigptr) - elif ntbyte = nt_ARRAY then + elif ntbyte = nt_ARRAY then if sigptr >= bytes.Length then ILNativeType.Array(None, None), sigptr - else - let nt, sigptr = + else + let nt, sigptr = let struct (u, sigptr') = sigptrGetZInt32 bytes sigptr - if (u = int nt_MAX) then + if (u = int nt_MAX) then ILNativeType.Empty, sigptr' else // NOTE: go back to start and read native type @@ -3134,8 +3085,8 @@ and sigptrGetILNativeType ctxt bytes sigptr = let struct (pnum, sigptr) = sigptrGetZInt32 bytes sigptr if sigptr >= bytes.Length then ILNativeType.Array (Some nt, Some(pnum, None)), sigptr - else - let struct (additive, sigptr) = + else + let struct (additive, sigptr) = if sigptr >= bytes.Length then 0, sigptr else sigptrGetZInt32 bytes sigptr ILNativeType.Array (Some nt, Some(pnum, Some additive)), sigptr @@ -3143,20 +3094,20 @@ and sigptrGetILNativeType ctxt bytes sigptr = // Note, pectxtEager and pevEager must not be captured by the results of this function // As a result, reading the resource offsets in the physical file is done eagerly to avoid holding on to any resources -and seekReadManifestResources (ctxt: ILMetadataReader) canReduceMemory (mdv: BinaryView) (pectxtEager: PEReader) (pevEager: BinaryView) = +and seekReadManifestResources (ctxt: ILMetadataReader) canReduceMemory (mdv: BinaryView) (pectxtEager: PEReader) (pevEager: BinaryView) = mkILResources [ for i = 1 to ctxt.getNumRows TableNames.ManifestResource do let (offset, flags, nameIdx, implIdx) = seekReadManifestResourceRow ctxt mdv i let scoref = seekReadImplAsScopeRef ctxt mdv implIdx - let location = + let location = match scoref with | ILScopeRef.Local -> let start = pectxtEager.anyV2P ("resource", offset + pectxtEager.resourcesAddr) let resourceLength = seekReadInt32 pevEager start let offsetOfBytesFromStartOfPhysicalPEFile = start + 4 - let byteStorage = + let byteStorage = let bytes = pevEager.Slice(offsetOfBytesFromStartOfPhysicalPEFile, resourceLength) ByteStorage.FromByteMemoryAndCopy(bytes, useBackingMemoryMappedFile = canReduceMemory) ILResourceLocation.Local(byteStorage) @@ -3165,7 +3116,7 @@ and seekReadManifestResources (ctxt: ILMetadataReader) canReduceMemory (mdv: Bin | ILScopeRef.Assembly aref -> ILResourceLocation.Assembly aref | _ -> failwith "seekReadManifestResources: Invalid ILScopeRef" - let r = + let r = { Name= readStringHeap ctxt nameIdx Location = location Access = (if (flags &&& 0x01) <> 0x0 then ILResourceAccess.Public else ILResourceAccess.Private) @@ -3173,7 +3124,7 @@ and seekReadManifestResources (ctxt: ILMetadataReader) canReduceMemory (mdv: Bin MetadataIndex = i } yield r ] -and seekReadNestedExportedTypes ctxt (exported: _ []) (nested: Lazy<_ []>) parentIdx = +and seekReadNestedExportedTypes ctxt (exported: _ []) (nested: Lazy<_ []>) parentIdx = mkILNestedExportedTypesLazy (lazy nested.Force().[parentIdx-1] @@ -3188,8 +3139,8 @@ and seekReadNestedExportedTypes ctxt (exported: _ []) (nested: Lazy<_ []>) paren MetadataIndex = i } )) -and seekReadTopExportedTypes (ctxt: ILMetadataReader) = - mkILExportedTypesLazy +and seekReadTopExportedTypes (ctxt: ILMetadataReader) = + mkILExportedTypesLazy (lazy let mdv = ctxt.mdfile.GetView() let numRows = ctxt.getNumRows TableNames.ExportedType @@ -3221,21 +3172,21 @@ and seekReadTopExportedTypes (ctxt: ILMetadataReader) = ]) #if !FX_NO_PDB_READER -let getPdbReader pdbDirPath fileName = - match pdbDirPath with +let getPdbReader pdbDirPath fileName = + match pdbDirPath with | None -> None | Some pdbpath -> - try + try let pdbr = pdbReadOpen fileName pdbpath let pdbdocs = pdbReaderGetDocuments pdbr - + let tab = new Dictionary<_, _>(Array.length pdbdocs) - pdbdocs |> Array.iter (fun pdbdoc -> + pdbdocs |> Array.iter (fun pdbdoc -> let url = pdbDocumentGetURL pdbdoc tab.[url] <- - ILSourceDocument.Create(language=Some (pdbDocumentGetLanguage pdbdoc), - vendor = Some (pdbDocumentGetLanguageVendor pdbdoc), - documentType = Some (pdbDocumentGetType pdbdoc), + ILSourceDocument.Create(language=Some (pdbDocumentGetLanguage pdbdoc), + vendor = Some (pdbDocumentGetLanguageVendor pdbdoc), + documentType = Some (pdbDocumentGetType pdbdoc), file = url)) let docfun url = @@ -3243,11 +3194,11 @@ let getPdbReader pdbDirPath fileName = | true, doc -> doc | _ -> failwith ("Document with URL " + url + " not found in list of documents in the PDB file") Some (pdbr, docfun) - with e -> dprintn ("* Warning: PDB file could not be read and will be ignored: "+e.Message); None + with e -> dprintn ("* Warning: PDB file could not be read and will be ignored: "+e.Message); None #endif - + // Note, pectxtEager and pevEager must not be captured by the results of this function -let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, pectxtEager: PEReader, pevEager, pectxtCaptured, reduceMemoryUsage) = +let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, pectxtEager: PEReader, pevEager, pectxtCaptured, reduceMemoryUsage) = let mdv = mdfile.GetView() let magic = seekReadUInt16AsInt32 mdv metadataPhysLoc if magic <> 0x5342 then failwith (fileName + ": bad metadata magic number: " + string magic) @@ -3262,8 +3213,8 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p let numStreams = seekReadUInt16AsInt32 mdv (metadataPhysLoc + x + 2) let streamHeadersStart = (metadataPhysLoc + x + 4) - let tryFindStream name = - let rec look i pos = + let tryFindStream name = + let rec look i pos = if i >= numStreams then None else let offset = seekReadInt32 mdv (pos + 0) @@ -3271,30 +3222,30 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p let res = ref true let fin = ref false let n = ref 0 - // read and compare the stream name byte by byte - while (not !fin) do + // read and compare the stream name byte by byte + while (not !fin) do let c= seekReadByteAsInt32 mdv (pos + 8 + (!n)) - if c = 0 then + if c = 0 then fin := true - elif !n >= Array.length name || c <> name.[!n] then + elif !n >= Array.length name || c <> name.[!n] then res := false incr n - if !res then Some(offset + metadataPhysLoc, length) + if !res then Some(offset + metadataPhysLoc, length) else look (i+1) (align 0x04 (pos + 8 + (!n))) look 0 streamHeadersStart - let findStream name = + let findStream name = match tryFindStream name with | None -> (0x0, 0x0) | Some positions -> positions - let (tablesStreamPhysLoc, _tablesStreamSize) = + let (tablesStreamPhysLoc, _tablesStreamSize) = match tryFindStream [| 0x23; 0x7e |] (* #~ *) with | Some res -> res - | None -> + | None -> match tryFindStream [| 0x23; 0x2d |] (* #-: at least one DLL I've seen uses this! *) with | Some res -> res - | None -> + | None -> let firstStreamOffset = seekReadInt32 mdv (streamHeadersStart + 0) let firstStreamLength = seekReadInt32 mdv (streamHeadersStart + 4) firstStreamOffset, firstStreamLength @@ -3304,8 +3255,8 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p let (guidsStreamPhysicalLoc, _guidsStreamSize) = findStream [| 0x23; 0x47; 0x55; 0x49; 0x44; |] (* #GUID *) let (blobsStreamPhysicalLoc, blobsStreamSize) = findStream [| 0x23; 0x42; 0x6c; 0x6f; 0x62; |] (* #Blob *) - let tableKinds = - [|kindModule (* Table 0 *) + let tableKinds = + [|kindModule (* Table 0 *) kindTypeRef (* Table 1 *) kindTypeDef (* Table 2 *) kindIllegal (* kindFieldPtr *) (* Table 3 *) @@ -3374,12 +3325,12 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p let heapSizes = seekReadByteAsInt32 mdv (tablesStreamPhysLoc + 6) let valid = seekReadInt64 mdv (tablesStreamPhysLoc + 8) let sorted = seekReadInt64 mdv (tablesStreamPhysLoc + 16) - let tablesPresent, tableRowCount, startOfTables = + let tablesPresent, tableRowCount, startOfTables = let present = ref [] let numRows = Array.create 64 0 let prevNumRowIdx = ref (tablesStreamPhysLoc + 24) - for i = 0 to 63 do - if (valid &&& (int64 1 <<< i)) <> int64 0 then + for i = 0 to 63 do + if (valid &&& (int64 1 <<< i)) <> int64 0 then present := i :: !present numRows.[i] <- (seekReadInt32 mdv !prevNumRowIdx) prevNumRowIdx := !prevNumRowIdx + 4 @@ -3396,26 +3347,26 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p if logging && blobsBigness then dprintn (fileName + ": blobs are big") let tableBigness = Array.map (fun n -> n >= 0x10000) tableRowCount - + let codedBigness nbits tab = let rows = getNumRows tab rows >= (0x10000 >>>& nbits) - - let tdorBigness = - codedBigness 2 TableNames.TypeDef || - codedBigness 2 TableNames.TypeRef || + + let tdorBigness = + codedBigness 2 TableNames.TypeDef || + codedBigness 2 TableNames.TypeRef || codedBigness 2 TableNames.TypeSpec - - let tomdBigness = - codedBigness 1 TableNames.TypeDef || + + let tomdBigness = + codedBigness 1 TableNames.TypeDef || codedBigness 1 TableNames.Method - - let hcBigness = + + let hcBigness = codedBigness 2 TableNames.Field || codedBigness 2 TableNames.Param || codedBigness 2 TableNames.Property - - let hcaBigness = + + let hcaBigness = codedBigness 5 TableNames.Method || codedBigness 5 TableNames.Field || codedBigness 5 TableNames.TypeRef || @@ -3439,53 +3390,52 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p codedBigness 5 TableNames.GenericParamConstraint || codedBigness 5 TableNames.MethodSpec - - let hfmBigness = - codedBigness 1 TableNames.Field || + + let hfmBigness = + codedBigness 1 TableNames.Field || codedBigness 1 TableNames.Param - - let hdsBigness = - codedBigness 2 TableNames.TypeDef || + + let hdsBigness = + codedBigness 2 TableNames.TypeDef || codedBigness 2 TableNames.Method || codedBigness 2 TableNames.Assembly - - let mrpBigness = - codedBigness 3 TableNames.TypeDef || + + let mrpBigness = codedBigness 3 TableNames.TypeRef || codedBigness 3 TableNames.ModuleRef || codedBigness 3 TableNames.Method || codedBigness 3 TableNames.TypeSpec - - let hsBigness = - codedBigness 1 TableNames.Event || - codedBigness 1 TableNames.Property - + + let hsBigness = + codedBigness 1 TableNames.Event || + codedBigness 1 TableNames.Property + let mdorBigness = - codedBigness 1 TableNames.Method || - codedBigness 1 TableNames.MemberRef - + codedBigness 1 TableNames.Method || + codedBigness 1 TableNames.MemberRef + let mfBigness = codedBigness 1 TableNames.Field || - codedBigness 1 TableNames.Method - + codedBigness 1 TableNames.Method + let iBigness = - codedBigness 2 TableNames.File || - codedBigness 2 TableNames.AssemblyRef || - codedBigness 2 TableNames.ExportedType - - let catBigness = - codedBigness 3 TableNames.Method || - codedBigness 3 TableNames.MemberRef - - let rsBigness = - codedBigness 2 TableNames.Module || - codedBigness 2 TableNames.ModuleRef || + codedBigness 2 TableNames.File || + codedBigness 2 TableNames.AssemblyRef || + codedBigness 2 TableNames.ExportedType + + let catBigness = + codedBigness 3 TableNames.Method || + codedBigness 3 TableNames.MemberRef + + let rsBigness = + codedBigness 2 TableNames.Module || + codedBigness 2 TableNames.ModuleRef || codedBigness 2 TableNames.AssemblyRef || codedBigness 2 TableNames.TypeRef - - let rowKindSize (RowKind kinds) = - kinds |> List.sumBy (fun x -> - match x with + + let rowKindSize (RowKind kinds) = + kinds |> List.sumBy (fun x -> + match x with | UShort -> 2 | ULong -> 4 | Byte -> 1 @@ -3506,21 +3456,21 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p | MemberForwarded -> (if mfBigness then 4 else 2) | Implementation -> (if iBigness then 4 else 2) | CustomAttributeType -> (if catBigness then 4 else 2) - | ResolutionScope -> (if rsBigness then 4 else 2)) + | ResolutionScope -> (if rsBigness then 4 else 2)) - let tableRowSizes = tableKinds |> Array.map rowKindSize + let tableRowSizes = tableKinds |> Array.map rowKindSize - let tablePhysLocations = + let tablePhysLocations = let res = Array.create 64 0x0 let mutable prevTablePhysLoc = startOfTables - for i = 0 to 63 do + for i = 0 to 63 do res.[i] <- prevTablePhysLoc prevTablePhysLoc <- prevTablePhysLoc + (tableRowCount.[i] * tableRowSizes.[i]) res + + let inbase = Filename.fileNameOfPath fileName + ": " - let inbase = FileSystemUtils.fileNameOfPath fileName + ": " - - // All the caches. The sizes are guesstimates for the rough sharing-density of the assembly + // All the caches. The sizes are guesstimates for the rough sharing-density of the assembly let cacheAssemblyRef = mkCacheInt32 false inbase "ILAssemblyRef" (getNumRows TableNames.AssemblyRef) let cacheMethodSpecAsMethodData = mkCacheGeneric reduceMemoryUsage inbase "MethodSpecAsMethodData" (getNumRows TableNames.MethodSpec / 20 + 1) let cacheMemberRefAsMemberData = mkCacheGeneric reduceMemoryUsage inbase "MemberRefAsMemberData" (getNumRows TableNames.MemberRef / 20 + 1) @@ -3535,14 +3485,14 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p let cacheGenericParams = mkCacheGeneric reduceMemoryUsage inbase "GenericParams" (getNumRows TableNames.GenericParam / 20 + 1) let cacheFieldDefAsFieldSpec = mkCacheInt32 reduceMemoryUsage inbase "FieldDefAsFieldSpec" (getNumRows TableNames.Field / 20 + 1) let cacheUserStringHeap = mkCacheInt32 reduceMemoryUsage inbase "UserStringHeap" ( userStringsStreamSize / 20 + 1) - // nb. Lots and lots of cache hits on this cache, hence never optimize cache away + // nb. Lots and lots of cache hits on this cache, hence never optimize cache away let cacheStringHeap = mkCacheInt32 false inbase "string heap" ( stringsStreamSize / 50 + 1) - let cacheBlobHeap = mkCacheInt32 reduceMemoryUsage inbase "blob heap" ( blobsStreamSize / 50 + 1) - - // These tables are not required to enforce sharing fo the final data - // structure, but are very useful as searching these tables gives rise to many reads - // in standard applications. + let cacheBlobHeap = mkCacheInt32 reduceMemoryUsage inbase "blob heap" ( blobsStreamSize / 50 + 1) + // These tables are not required to enforce sharing fo the final data + // structure, but are very useful as searching these tables gives rise to many reads + // in standard applications. + let cacheNestedRow = mkCacheInt32 reduceMemoryUsage inbase "Nested Table Rows" (getNumRows TableNames.Nested / 20 + 1) let cacheConstantRow = mkCacheInt32 reduceMemoryUsage inbase "Constant Rows" (getNumRows TableNames.Constant / 20 + 1) let cacheMethodSemanticsRow = mkCacheInt32 reduceMemoryUsage inbase "MethodSemantics Rows" (getNumRows TableNames.MethodSemantics / 20 + 1) @@ -3551,11 +3501,11 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p let rowAddr (tab: TableName) idx = tablePhysLocations.[tab.Index] + (idx - 1) * tableRowSizes.[tab.Index] // Build the reader context - // Use an initialization hole + // Use an initialization hole let ctxtH = ref None - let ctxt: ILMetadataReader = + let ctxt: ILMetadataReader = { sorted=sorted - getNumRows=getNumRows + getNumRows=getNumRows mdfile=mdfile dataEndPoints = match pectxtCaptured with None -> notlazy [] | Some pectxt -> getDataEndPointsDelayed pectxt ctxtH pectxtCaptured=pectxtCaptured @@ -3602,28 +3552,28 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p securityDeclsReader_TypeDef = securityDeclsReader ctxtH hds_TypeDef securityDeclsReader_MethodDef = securityDeclsReader ctxtH hds_MethodDef securityDeclsReader_Assembly = securityDeclsReader ctxtH hds_Assembly - typeDefReader = typeDefReader ctxtH + typeDefReader = typeDefReader ctxtH guidsStreamPhysicalLoc = guidsStreamPhysicalLoc rowAddr=rowAddr rsBigness=rsBigness tdorBigness=tdorBigness - tomdBigness=tomdBigness - hcBigness=hcBigness - hcaBigness=hcaBigness - hfmBigness=hfmBigness + tomdBigness=tomdBigness + hcBigness=hcBigness + hcaBigness=hcaBigness + hfmBigness=hfmBigness hdsBigness=hdsBigness mrpBigness=mrpBigness hsBigness=hsBigness mdorBigness=mdorBigness mfBigness=mfBigness iBigness=iBigness - catBigness=catBigness + catBigness=catBigness stringsBigness=stringsBigness guidsBigness=guidsBigness blobsBigness=blobsBigness - tableBigness=tableBigness } + tableBigness=tableBigness } ctxtH := Some ctxt - + let ilModule = seekReadModule ctxt reduceMemoryUsage pectxtEager pevEager peinfo (System.Text.Encoding.UTF8.GetString (ilMetadataVersion, 0, ilMetadataVersion.Length)) 1 let ilAssemblyRefs = lazy [ for i in 1 .. getNumRows TableNames.AssemblyRef do yield seekReadAssemblyRef ctxt i ] @@ -3634,7 +3584,7 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p // read of the AbsIL module. // ---------------------------------------------------------------------- -let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = +let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = let pev = pefile.GetView() (* MSDOS HEADER *) let peSignaturePhysLoc = seekReadInt32 pev 0x3c @@ -3654,7 +3604,7 @@ let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = optHeaderSize <> 0xf0 then failwith "not a PE file - bad optional header size" let x64adjust = optHeaderSize - 0xe0 let only64 = (optHeaderSize = 0xf0) (* May want to read in the optional header Magic number and check that as well... *) - let platform = match machine with | 0x8664 -> Some AMD64 | 0x200 -> Some IA64 | _ -> Some X86 + let platform = match machine with | 0x8664 -> Some AMD64 | 0x200 -> Some IA64 | _ -> Some X86 let sectionHeadersStartPhysLoc = peOptionalHeaderPhysLoc + optHeaderSize let flags = seekReadUInt16AsInt32 pev (peFileHeaderPhysLoc + 18) @@ -3662,35 +3612,35 @@ let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = (* OPTIONAL PE HEADER *) let _textPhysSize = seekReadInt32 pev (peOptionalHeaderPhysLoc + 4) (* Size of the code (text) section, or the sum of all code sections if there are multiple sections. *) - (* x86: 000000a0 *) + (* x86: 000000a0 *) let _initdataPhysSize = seekReadInt32 pev (peOptionalHeaderPhysLoc + 8) (* Size of the initialized data section, or the sum of all such sections if there are multiple data sections. *) let _uninitdataPhysSize = seekReadInt32 pev (peOptionalHeaderPhysLoc + 12) (* Size of the uninitialized data section, or the sum of all such sections if there are multiple data sections. *) let _entrypointAddr = seekReadInt32 pev (peOptionalHeaderPhysLoc + 16) (* RVA of entry point, needs to point to bytes 0xFF 0x25 followed by the RVA+!0x4000000 in a section marked execute/read for EXEs or 0 for DLLs e.g. 0x0000b57e *) let _textAddr = seekReadInt32 pev (peOptionalHeaderPhysLoc + 20) (* e.g. 0x0002000 *) - (* x86: 000000b0 *) + (* x86: 000000b0 *) let dataSegmentAddr = seekReadInt32 pev (peOptionalHeaderPhysLoc + 24) (* e.g. 0x0000c000 *) - (* REVIEW: For now, we'll use the DWORD at offset 24 for x64. This currently ok since fsc doesn't support true 64-bit image bases, - but we'll have to fix this up when such support is added. *) + (* REVIEW: For now, we'll use the DWORD at offset 24 for x64. This currently ok since fsc doesn't support true 64-bit image bases, + but we'll have to fix this up when such support is added. *) let imageBaseReal = if only64 then dataSegmentAddr else seekReadInt32 pev (peOptionalHeaderPhysLoc + 28) // Image Base Always 0x400000 (see Section 23.1). - let alignVirt = seekReadInt32 pev (peOptionalHeaderPhysLoc + 32) // Section Alignment Always 0x2000 (see Section 23.1). - let alignPhys = seekReadInt32 pev (peOptionalHeaderPhysLoc + 36) // File Alignment Either 0x200 or 0x1000. - (* x86: 000000c0 *) - let _osMajor = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 40) // OS Major Always 4 (see Section 23.1). - let _osMinor = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 42) // OS Minor Always 0 (see Section 23.1). - let _userMajor = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 44) // User Major Always 0 (see Section 23.1). - let _userMinor = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 46) // User Minor Always 0 (see Section 23.1). - let subsysMajor = seekReadUInt16AsInt32 pev (peOptionalHeaderPhysLoc + 48) // SubSys Major Always 4 (see Section 23.1). - let subsysMinor = seekReadUInt16AsInt32 pev (peOptionalHeaderPhysLoc + 50) // SubSys Minor Always 0 (see Section 23.1). - (* x86: 000000d0 *) + let alignVirt = seekReadInt32 pev (peOptionalHeaderPhysLoc + 32) // Section Alignment Always 0x2000 (see Section 23.1). + let alignPhys = seekReadInt32 pev (peOptionalHeaderPhysLoc + 36) // File Alignment Either 0x200 or 0x1000. + (* x86: 000000c0 *) + let _osMajor = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 40) // OS Major Always 4 (see Section 23.1). + let _osMinor = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 42) // OS Minor Always 0 (see Section 23.1). + let _userMajor = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 44) // User Major Always 0 (see Section 23.1). + let _userMinor = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 46) // User Minor Always 0 (see Section 23.1). + let subsysMajor = seekReadUInt16AsInt32 pev (peOptionalHeaderPhysLoc + 48) // SubSys Major Always 4 (see Section 23.1). + let subsysMinor = seekReadUInt16AsInt32 pev (peOptionalHeaderPhysLoc + 50) // SubSys Minor Always 0 (see Section 23.1). + (* x86: 000000d0 *) let _imageEndAddr = seekReadInt32 pev (peOptionalHeaderPhysLoc + 56) // Image Size: Size, in bytes, of image, including all headers and padding let _headerPhysSize = seekReadInt32 pev (peOptionalHeaderPhysLoc + 60) // Header Size Combined size of MS-DOS Header, PE Header, PE Optional Header and padding - let subsys = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 68) // SubSystem Subsystem required to run this image. - let useHighEnthropyVA = + let subsys = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 68) // SubSystem Subsystem required to run this image. + let useHighEnthropyVA = let n = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 70) let highEnthropyVA = 0x20us (n &&& highEnthropyVA) = highEnthropyVA - (* x86: 000000e0 *) + (* x86: 000000e0 *) (* WARNING: THESE ARE 64 bit ON x64/ia64 *) (* REVIEW: If we ever decide that we need these values for x64, we'll have to read them in as 64bit and fix up the rest of the offsets. @@ -3700,31 +3650,31 @@ let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = (* let heapReserve = seekReadInt32 is (peOptionalHeaderPhysLoc + 80) in *) (* Heap Reserve Size Always 0x100000 (1Mb) (see Section 23.1). *) (* let heapCommit = seekReadInt32 is (peOptionalHeaderPhysLoc + 84) in *) (* Heap Commit Size Always 0x1000 (4Kb) (see Section 23.1). *) - (* x86: 000000f0, x64: 00000100 *) + (* x86: 000000f0, x64: 00000100 *) let _numDataDirectories = seekReadInt32 pev (peOptionalHeaderPhysLoc + 92 + x64adjust) (* Number of Data Directories: Always 0x10 (see Section 23.1). *) - (* 00000100 - these addresses are for x86 - for the x64 location, add x64adjust (0x10) *) - let _importTableAddr = seekReadInt32 pev (peOptionalHeaderPhysLoc + 104 + x64adjust) (* Import Table RVA of Import Table, (see clause 24.3.1). e.g. 0000b530 *) + (* 00000100 - these addresses are for x86 - for the x64 location, add x64adjust (0x10) *) + let _importTableAddr = seekReadInt32 pev (peOptionalHeaderPhysLoc + 104 + x64adjust) (* Import Table RVA of Import Table, (see clause 24.3.1). e.g. 0000b530 *) let _importTableSize = seekReadInt32 pev (peOptionalHeaderPhysLoc + 108 + x64adjust) (* Size of Import Table, (see clause 24.3.1). *) let nativeResourcesAddr = seekReadInt32 pev (peOptionalHeaderPhysLoc + 112 + x64adjust) let nativeResourcesSize = seekReadInt32 pev (peOptionalHeaderPhysLoc + 116 + x64adjust) - (* 00000110 *) - (* 00000120 *) + (* 00000110 *) + (* 00000120 *) (* let base_relocTableNames.addr = seekReadInt32 is (peOptionalHeaderPhysLoc + 136) let base_relocTableNames.size = seekReadInt32 is (peOptionalHeaderPhysLoc + 140) in *) - (* 00000130 *) - (* 00000140 *) - (* 00000150 *) - let _importAddrTableAddr = seekReadInt32 pev (peOptionalHeaderPhysLoc + 192 + x64adjust) (* RVA of Import Addr Table, (see clause 24.3.1). e.g. 0x00002000 *) - let _importAddrTableSize = seekReadInt32 pev (peOptionalHeaderPhysLoc + 196 + x64adjust) (* Size of Import Addr Table, (see clause 24.3.1). e.g. 0x00002000 *) - (* 00000160 *) + (* 00000130 *) + (* 00000140 *) + (* 00000150 *) + let _importAddrTableAddr = seekReadInt32 pev (peOptionalHeaderPhysLoc + 192 + x64adjust) (* RVA of Import Addr Table, (see clause 24.3.1). e.g. 0x00002000 *) + let _importAddrTableSize = seekReadInt32 pev (peOptionalHeaderPhysLoc + 196 + x64adjust) (* Size of Import Addr Table, (see clause 24.3.1). e.g. 0x00002000 *) + (* 00000160 *) let cliHeaderAddr = seekReadInt32 pev (peOptionalHeaderPhysLoc + 208 + x64adjust) let _cliHeaderSize = seekReadInt32 pev (peOptionalHeaderPhysLoc + 212 + x64adjust) - (* 00000170 *) + (* 00000170 *) (* Crack section headers *) - let sectionHeaders = + let sectionHeaders = [ for i in 0 .. numSections-1 do let pos = sectionHeadersStartPhysLoc + i * 0x28 let virtSize = seekReadInt32 pev (pos + 8) @@ -3732,16 +3682,16 @@ let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = let physLoc = seekReadInt32 pev (pos + 20) yield (virtAddr, virtSize, physLoc) ] - let findSectionHeader addr = - let rec look i pos = - if i >= numSections then 0x0 + let findSectionHeader addr = + let rec look i pos = + if i >= numSections then 0x0 else let virtSize = seekReadInt32 pev (pos + 8) let virtAddr = seekReadInt32 pev (pos + 12) - if (addr >= virtAddr && addr < virtAddr + virtSize) then pos + if (addr >= virtAddr && addr < virtAddr + virtSize) then pos else look (i+1) (pos + 0x28) look 0 sectionHeadersStartPhysLoc - + let textHeaderStart = findSectionHeader cliHeaderAddr let dataHeaderStart = findSectionHeader dataSegmentAddr (* let relocHeaderStart = findSectionHeader base_relocTableNames.addr in *) @@ -3756,15 +3706,15 @@ let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = let dataSegmentPhysicalSize = if dataHeaderStart = 0x0 then 0x0 else seekReadInt32 pev (dataHeaderStart + 16) let dataSegmentPhysicalLoc = if dataHeaderStart = 0x0 then 0x0 else seekReadInt32 pev (dataHeaderStart + 20) - let anyV2P (n, v) = + let anyV2P (n, v) = let pev = pefile.GetView() - let rec look i pos = + let rec look i pos = if i >= numSections then (failwith (fileName + ": bad "+n+", rva "+string v); 0x0) else let virtSize = seekReadInt32 pev (pos + 8) let virtAddr = seekReadInt32 pev (pos + 12) let physLoc = seekReadInt32 pev (pos + 20) - if (v >= virtAddr && (v < virtAddr + virtSize)) then (v - virtAddr) + physLoc + if (v >= virtAddr && (v < virtAddr + virtSize)) then (v - virtAddr) + physLoc else look (i+1) (pos + 0x28) look 0 sectionHeadersStartPhysLoc @@ -3775,13 +3725,13 @@ let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = let metadataAddr = seekReadInt32 pev (cliHeaderPhysLoc + 8) let metadataSize = seekReadInt32 pev (cliHeaderPhysLoc + 12) let cliFlags = seekReadInt32 pev (cliHeaderPhysLoc + 16) - + let ilOnly = (cliFlags &&& 0x01) <> 0x00 let only32 = (cliFlags &&& 0x02) <> 0x00 let is32bitpreferred = (cliFlags &&& 0x00020003) <> 0x00 let _strongnameSigned = (cliFlags &&& 0x08) <> 0x00 let _trackdebugdata = (cliFlags &&& 0x010000) <> 0x00 - + let entryPointToken = seekReadUncodedToken pev (cliHeaderPhysLoc + 20) let resourcesAddr = seekReadInt32 pev (cliHeaderPhysLoc + 24) let resourcesSize = seekReadInt32 pev (cliHeaderPhysLoc + 28) @@ -3790,11 +3740,11 @@ let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = let vtableFixupsAddr = seekReadInt32 pev (cliHeaderPhysLoc + 40) let _vtableFixupsSize = seekReadInt32 pev (cliHeaderPhysLoc + 44) - if logging then dprintn (fileName + ": metadataAddr = "+string metadataAddr) - if logging then dprintn (fileName + ": resourcesAddr = "+string resourcesAddr) - if logging then dprintn (fileName + ": resourcesSize = "+string resourcesSize) - if logging then dprintn (fileName + ": nativeResourcesAddr = "+string nativeResourcesAddr) - if logging then dprintn (fileName + ": nativeResourcesSize = "+string nativeResourcesSize) + if logging then dprintn (fileName + ": metadataAddr = "+string metadataAddr) + if logging then dprintn (fileName + ": resourcesAddr = "+string resourcesAddr) + if logging then dprintn (fileName + ": resourcesSize = "+string resourcesSize) + if logging then dprintn (fileName + ": nativeResourcesAddr = "+string nativeResourcesAddr) + if logging then dprintn (fileName + ": nativeResourcesSize = "+string nativeResourcesSize) let metadataPhysLoc = anyV2P ("metadata", metadataAddr) //----------------------------------------------------------------------- @@ -3803,16 +3753,16 @@ let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = #if FX_NO_PDB_READER let pdb = ignore pdbDirPath; None #else - let pdb = - if runningOnMono then - None - else + let pdb = + if runningOnMono then + None + else getPdbReader pdbDirPath fileName #endif - let pectxt: PEReader = + let pectxt: PEReader = { pdb=pdb - textSegmentPhysicalLoc=textSegmentPhysicalLoc + textSegmentPhysicalLoc=textSegmentPhysicalLoc textSegmentPhysicalSize=textSegmentPhysicalSize dataSegmentPhysicalLoc=dataSegmentPhysicalLoc dataSegmentPhysicalSize=dataSegmentPhysicalSize @@ -3832,25 +3782,25 @@ let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = let peinfo = (subsys, (subsysMajor, subsysMinor), useHighEnthropyVA, ilOnly, only32, is32bitpreferred, only64, platform, isDll, alignVirt, alignPhys, imageBaseReal) (metadataPhysLoc, metadataSize, peinfo, pectxt, pev, pdb) -let openPE (fileName, pefile, pdbDirPath, reduceMemoryUsage, noFileOnDisk) = - let (metadataPhysLoc, _metadataSize, peinfo, pectxt, pev, pdb) = openPEFileReader (fileName, pefile, pdbDirPath, noFileOnDisk) +let openPE (fileName, pefile, pdbDirPath, reduceMemoryUsage, noFileOnDisk) = + let (metadataPhysLoc, _metadataSize, peinfo, pectxt, pev, pdb) = openPEFileReader (fileName, pefile, pdbDirPath, noFileOnDisk) let ilModule, ilAssemblyRefs = openMetadataReader (fileName, pefile, metadataPhysLoc, peinfo, pectxt, pev, Some pectxt, reduceMemoryUsage) ilModule, ilAssemblyRefs, pdb -let openPEMetadataOnly (fileName, peinfo, pectxtEager, pevEager, mdfile: BinaryFile, reduceMemoryUsage) = +let openPEMetadataOnly (fileName, peinfo, pectxtEager, pevEager, mdfile: BinaryFile, reduceMemoryUsage) = openMetadataReader (fileName, mdfile, 0, peinfo, pectxtEager, pevEager, None, reduceMemoryUsage) - -let ClosePdbReader pdb = + +let ClosePdbReader pdb = #if FX_NO_PDB_READER ignore pdb () #else - match pdb with + match pdb with | Some (pdbr, _) -> pdbReadClose pdbr | None -> () #endif -type ILReaderMetadataSnapshot = (obj * nativeint * int) +type ILReaderMetadataSnapshot = (obj * nativeint * int) type ILReaderTryGetMetadataSnapshot = (* path: *) string * (* snapshotTimeStamp: *) System.DateTime -> ILReaderMetadataSnapshot option [] @@ -3865,20 +3815,22 @@ type ILReaderOptions = metadataOnly: MetadataOnlyFlag tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot } + type ILModuleReader = abstract ILModuleDef: ILModuleDef abstract ILAssemblyRefs: ILAssemblyRef list - + /// ILModuleReader objects only need to be explicitly disposed if memory mapping is used, i.e. reduceMemoryUsage = false inherit System.IDisposable + [] type ILModuleReaderImpl(ilModule: ILModuleDef, ilAssemblyRefs: Lazy, dispose: unit -> unit) = interface ILModuleReader with member x.ILModuleDef = ilModule member x.ILAssemblyRefs = ilAssemblyRefs.Force() member x.Dispose() = dispose() - + // ++GLOBAL MUTABLE STATE (concurrency safe via locking) type ILModuleReaderCacheKey = ILModuleReaderCacheKey of string * DateTime * bool * ReduceMemoryFlag * MetadataOnlyFlag @@ -3886,7 +3838,7 @@ type ILModuleReaderCacheKey = ILModuleReaderCacheKey of string * DateTime * bool type ILModuleReaderCache1LockToken() = interface LockToken let ilModuleReaderCache1 = new AgedLookup - (stronglyHeldReaderCacheSize, + (stronglyHeldReaderCacheSize, keepMax=stronglyHeldReaderCacheSize, // only strong entries areSimilar=(fun (x, y) -> x = y)) let ilModuleReaderCache1Lock = Lock() @@ -3894,27 +3846,27 @@ let ilModuleReaderCache1Lock = Lock() // // Cache to reuse readers that have already been created and are not yet GC'd let ilModuleReaderCache2 = new ConcurrentDictionary>(HashIdentity.Structural) -let stableFileHeuristicApplies fileName = +let stableFileHeuristicApplies fileName = not noStableFileHeuristic && try FileSystem.IsStableFileHeuristic fileName with _ -> false -let createByteFileChunk opts fileName chunk = +let createByteFileChunk opts fileName chunk = // If we're trying to reduce memory usage then we are willing to go back and re-read the binary, so we can use // a weakly-held handle to an array of bytes. - if opts.reduceMemoryUsage = ReduceMemoryFlag.Yes && stableFileHeuristicApplies fileName then - WeakByteFile(fileName, chunk) :> BinaryFile - else - let bytes = - use stream = FileSystem.OpenFileForReadShim(fileName) - match chunk with - | None -> stream.ReadAllBytes() - | Some(start, length) -> stream.ReadBytes(start, length) - + if opts.reduceMemoryUsage = ReduceMemoryFlag.Yes && stableFileHeuristicApplies fileName then + WeakByteFile(fileName, chunk) :> BinaryFile + else + let bytes = + match chunk with + | None -> FileSystem.ReadAllBytesShim fileName + | Some (start, length) -> File.ReadBinaryChunk(fileName, start, length) ByteFile(fileName, bytes) :> BinaryFile -let getBinaryFile fileName useMemoryMappedFile = - let stream = FileSystem.OpenFileForReadShim(fileName, useMemoryMappedFile = useMemoryMappedFile) - let byteMem = stream.AsByteMemory() - +let createMemoryMapFile fileName = + let mmf, accessor, length = + let fileStream = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read) + let length = fileStream.Length + let mmf = MemoryMappedFile.CreateFromFile(fileStream, null, length, MemoryMappedFileAccess.Read, HandleInheritability.None, leaveOpen=false) + mmf, mmf.CreateViewAccessor(0L, fileStream.Length, MemoryMappedFileAccess.Read), length let safeHolder = { new obj() with override x.Finalize() = @@ -3922,123 +3874,116 @@ let getBinaryFile fileName useMemoryMappedFile = interface IDisposable with member x.Dispose() = GC.SuppressFinalize x - stream.Dispose() + accessor.Dispose() + mmf.Dispose() stats.memoryMapFileClosedCount <- stats.memoryMapFileClosedCount + 1 } - stats.memoryMapFileOpenedCount <- stats.memoryMapFileOpenedCount + 1 + safeHolder, RawMemoryFile(fileName, safeHolder, accessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), int length) :> BinaryFile - safeHolder, RawMemoryFile(fileName, safeHolder, byteMem) :> BinaryFile - -let OpenILModuleReaderFromBytes fileName assemblyContents options = +let OpenILModuleReaderFromBytes fileName assemblyContents options = let pefile = ByteFile(fileName, assemblyContents) :> BinaryFile let ilModule, ilAssemblyRefs, pdb = openPE (fileName, pefile, options.pdbDirPath, (options.reduceMemoryUsage = ReduceMemoryFlag.Yes), true) new ILModuleReaderImpl(ilModule, ilAssemblyRefs, (fun () -> ClosePdbReader pdb)) :> ILModuleReader -let OpenILModuleReaderFromStream fileName (peStream: Stream) options = - let peReader = new System.Reflection.PortableExecutable.PEReader(peStream, PEStreamOptions.PrefetchEntireImage) - let pefile = PEFile(fileName, peReader) :> BinaryFile - let ilModule, ilAssemblyRefs, pdb = openPE (fileName, pefile, options.pdbDirPath, (options.reduceMemoryUsage = ReduceMemoryFlag.Yes), true) - new ILModuleReaderImpl(ilModule, ilAssemblyRefs, (fun () -> ClosePdbReader pdb)) :> ILModuleReader - let ClearAllILModuleReaderCache() = ilModuleReaderCache1.Clear(ILModuleReaderCache1LockToken()) ilModuleReaderCache2.Clear() -let OpenILModuleReader fileName opts = +let OpenILModuleReader fileName opts = // Pseudo-normalize the paths. - let (ILModuleReaderCacheKey (fullPath,writeStamp,_,_,_) as key), keyOk = - try + let (ILModuleReaderCacheKey (fullPath,writeStamp,_,_,_) as key), keyOk = + try let fullPath = FileSystem.GetFullPathShim fileName let writeTime = FileSystem.GetLastWriteTimeShim fileName let key = ILModuleReaderCacheKey (fullPath, writeTime, opts.pdbDirPath.IsSome, opts.reduceMemoryUsage, opts.metadataOnly) key, true - with exn -> - System.Diagnostics.Debug.Assert(false, sprintf "Failed to compute key in OpenILModuleReader cache for '%s'. Falling back to uncached. Error = %s" fileName (exn.ToString())) + with exn -> + System.Diagnostics.Debug.Assert(false, sprintf "Failed to compute key in OpenILModuleReader cache for '%s'. Falling back to uncached. Error = %s" fileName (exn.ToString())) let fakeKey = ILModuleReaderCacheKey(fileName, System.DateTime.UtcNow, false, ReduceMemoryFlag.Yes, MetadataOnlyFlag.Yes) fakeKey, false - let cacheResult1 = + let cacheResult1 = // can't used a cached entry when reading PDBs, since it makes the returned object IDisposable - if keyOk && opts.pdbDirPath.IsNone then + if keyOk && opts.pdbDirPath.IsNone then ilModuleReaderCache1Lock.AcquireLock (fun ltok -> ilModuleReaderCache1.TryGet(ltok, key)) - else + else None - - match cacheResult1 with + + match cacheResult1 with | Some ilModuleReader -> ilModuleReader - | None -> + | None -> - let cacheResult2 = + let cacheResult2 = // can't used a cached entry when reading PDBs, since it makes the returned object IDisposable - if keyOk && opts.pdbDirPath.IsNone then + if keyOk && opts.pdbDirPath.IsNone then ilModuleReaderCache2.TryGetValue key - else + else false, Unchecked.defaultof<_> - let mutable res = Unchecked.defaultof<_> - match cacheResult2 with + let mutable res = Unchecked.defaultof<_> + match cacheResult2 with | true, weak when weak.TryGetTarget(&res) -> res - | _ -> + | _ -> let reduceMemoryUsage = (opts.reduceMemoryUsage = ReduceMemoryFlag.Yes) - let metadataOnly = (opts.metadataOnly = MetadataOnlyFlag.Yes) + let metadataOnly = (opts.metadataOnly = MetadataOnlyFlag.Yes) - if reduceMemoryUsage && opts.pdbDirPath.IsNone then + if reduceMemoryUsage && opts.pdbDirPath.IsNone then // This case is used in FCS applications, devenv.exe and fsi.exe // - let ilModuleReader = + let ilModuleReader = // Check if we are doing metadataOnly reading (the most common case in both the compiler and IDE) - if not runningOnMono && metadataOnly then + if metadataOnly then // See if tryGetMetadata gives us a BinaryFile for the metadata section alone. - let mdfileOpt = - match opts.tryGetMetadataSnapshot (fullPath, writeStamp) with + let mdfileOpt = + match opts.tryGetMetadataSnapshot (fullPath, writeStamp) with | Some (obj, start, len) -> Some (RawMemoryFile(fullPath, obj, start, len) :> BinaryFile) | None -> None // For metadata-only, always use a temporary, short-lived PE file reader, preferably over a memory mapped file. // Then use the metadata blob as the long-lived memory resource. - let disposer, pefileEager = getBinaryFile fullPath false + let disposer, pefileEager = createMemoryMapFile fullPath use _disposer = disposer - let (metadataPhysLoc, metadataSize, peinfo, pectxtEager, pevEager, _pdb) = openPEFileReader (fullPath, pefileEager, None, false) - let mdfile = - match mdfileOpt with + let (metadataPhysLoc, metadataSize, peinfo, pectxtEager, pevEager, _pdb) = openPEFileReader (fullPath, pefileEager, None, false) + let mdfile = + match mdfileOpt with | Some mdfile -> mdfile - | None -> + | None -> // If tryGetMetadata doesn't give anything, then just read the metadata chunk out of the binary createByteFileChunk opts fullPath (Some (metadataPhysLoc, metadataSize)) - let ilModule, ilAssemblyRefs = openPEMetadataOnly (fullPath, peinfo, pectxtEager, pevEager, mdfile, reduceMemoryUsage) + let ilModule, ilAssemblyRefs = openPEMetadataOnly (fullPath, peinfo, pectxtEager, pevEager, mdfile, reduceMemoryUsage) new ILModuleReaderImpl(ilModule, ilAssemblyRefs, ignore) else // If we are not doing metadata-only, then just go ahead and read all the bytes and hold them either strongly or weakly // depending on the heuristic let pefile = createByteFileChunk opts fullPath None - let ilModule, ilAssemblyRefs, _pdb = openPE (fullPath, pefile, None, reduceMemoryUsage, false) + let ilModule, ilAssemblyRefs, _pdb = openPE (fullPath, pefile, None, reduceMemoryUsage, false) new ILModuleReaderImpl(ilModule, ilAssemblyRefs, ignore) - let ilModuleReader = ilModuleReader :> ILModuleReader - if keyOk then + let ilModuleReader = ilModuleReader :> ILModuleReader + if keyOk then ilModuleReaderCache1Lock.AcquireLock (fun ltok -> ilModuleReaderCache1.Put(ltok, key, ilModuleReader)) ilModuleReaderCache2.[key] <- System.WeakReference<_>(ilModuleReader) ilModuleReader - - + + else - // This case is primarily used in fsc.exe. + // This case is primarily used in fsc.exe. // - // In fsc.exe, we're not trying to reduce memory usage, nor do we really care if we leak memory. + // In fsc.exe, we're not trying to reduce memory usage, nor do we really care if we leak memory. // // Note we ignore the "metadata only" flag as it's generally OK to read in the // whole binary for the command-line compiler: address space is rarely an issue. // - // We do however care about avoiding locks on files that prevent their deletion during a + // We do however care about avoiding locks on files that prevent their deletion during a // multi-proc build. So use memory mapping, but only for stable files. Other files // still use an in-memory ByteFile - let pefile = - if not runningOnMono && (alwaysMemoryMapFSC || stableFileHeuristicApplies fullPath) then - let _, pefile = getBinaryFile fullPath false + let pefile = + if alwaysMemoryMapFSC || stableFileHeuristicApplies fullPath then + let _, pefile = createMemoryMapFile fullPath pefile else createByteFileChunk opts fullPath None @@ -4046,10 +3991,10 @@ let OpenILModuleReader fileName opts = let ilModule, ilAssemblyRefs, pdb = openPE (fullPath, pefile, opts.pdbDirPath, reduceMemoryUsage, false) let ilModuleReader = new ILModuleReaderImpl(ilModule, ilAssemblyRefs, (fun () -> ClosePdbReader pdb)) - let ilModuleReader = ilModuleReader :> ILModuleReader + let ilModuleReader = ilModuleReader :> ILModuleReader // Readers with PDB reader disposal logic don't go in the cache. Note the PDB reader is only used in static linking. - if keyOk && opts.pdbDirPath.IsNone then + if keyOk && opts.pdbDirPath.IsNone then ilModuleReaderCache1Lock.AcquireLock (fun ltok -> ilModuleReaderCache1.Put(ltok, key, ilModuleReader)) ilModuleReaderCache2.[key] <- WeakReference<_>(ilModuleReader) @@ -4064,7 +4009,7 @@ module Shim = [] type DefaultAssemblyReader() = interface IAssemblyReader with - member _.GetILModuleReader(filename, readerOptions) = + member __.GetILModuleReader(filename, readerOptions) = OpenILModuleReader filename readerOptions let mutable AssemblyReader = DefaultAssemblyReader() :> IAssemblyReader diff --git a/src/fsharp/absil/ilread.fsi b/src/fsharp/absil/ilread.fsi index 97cb687e1ca..4ca7ebe51bd 100644 --- a/src/fsharp/absil/ilread.fsi +++ b/src/fsharp/absil/ilread.fsi @@ -26,8 +26,12 @@ /// you need. module FSharp.Compiler.AbstractIL.ILBinaryReader -open System.IO +open Internal.Utilities +open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.ErrorLogger +open System.IO /// Used to implement a Binary file over native memory, used by Roslyn integration type ILReaderMetadataSnapshot = (obj * nativeint * int) @@ -61,7 +65,7 @@ type ILReaderOptions = /// Represents a reader of the metadata of a .NET binary. May also give some values (e.g. IL code) from the PE file /// if it was provided. -type public ILModuleReader = +type ILModuleReader = abstract ILModuleDef: ILModuleDef abstract ILAssemblyRefs: ILAssemblyRef list @@ -72,34 +76,30 @@ type public ILModuleReader = /// Open a binary reader, except first copy the entire contents of the binary into /// memory, close the file and ensure any subsequent reads happen from the in-memory store. /// PDB files may not be read with this option. -/// Binary reader is internally cached. val internal OpenILModuleReader: string -> ILReaderOptions -> ILModuleReader val internal ClearAllILModuleReaderCache : unit -> unit /// Open a binary reader based on the given bytes. -/// This binary reader is not internally cached. val internal OpenILModuleReaderFromBytes: fileName:string -> assemblyContents: byte[] -> options: ILReaderOptions -> ILModuleReader -/// Open a binary reader based on the given stream. -/// This binary reader is not internally cached. -/// The binary reader will own the given stream and the stream will be disposed when there are no references to the binary reader. -val internal OpenILModuleReaderFromStream: fileName:string -> peStream: Stream -> options: ILReaderOptions -> ILModuleReader - -type internal Statistics = +type Statistics = { mutable rawMemoryFileCount : int mutable memoryMapFileOpenedCount : int mutable memoryMapFileClosedCount : int mutable weakByteFileCount : int mutable byteFileCount : int } -val internal GetStatistics : unit -> Statistics +val GetStatistics : unit -> Statistics -/// The public API hook for changing the IL assembly reader, used by Resharper [] -module public Shim = +module Shim = - type public IAssemblyReader = + type IAssemblyReader = abstract GetILModuleReader: filename: string * readerOptions: ILReaderOptions -> ILModuleReader + [] + type DefaultAssemblyReader = + interface IAssemblyReader + val mutable AssemblyReader: IAssemblyReader diff --git a/src/fsharp/absil/ilreflect.fs b/src/fsharp/absil/ilreflect.fs index 9af3997e31a..5c4d4610e67 100644 --- a/src/fsharp/absil/ilreflect.fs +++ b/src/fsharp/absil/ilreflect.fs @@ -1,7 +1,11 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -/// Write Abstract IL structures at runtime using Reflection.Emit -module internal FSharp.Compiler.AbstractIL.ILRuntimeWriter +//---------------------------------------------------------------------------- +// Write Abstract IL structures at runtime using Reflection.Emit +//---------------------------------------------------------------------------- + + +module internal FSharp.Compiler.AbstractIL.ILRuntimeWriter open System open System.IO @@ -10,14 +14,14 @@ open System.Reflection.Emit open System.Runtime.InteropServices open System.Collections.Generic -open Internal.Utilities.Collections -open Internal.Utilities.Library open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Diagnostics +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Internal.Utils +open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.IO -open FSharp.Compiler.Text.Range +open FSharp.Compiler.Range open FSharp.Core.Printf let codeLabelOrder = ComparisonIdentity.Structural @@ -32,7 +36,7 @@ let wrapCustomAttr setCustomAttr (cinfo, bytes) = let logRefEmitCalls = false -type System.Reflection.Emit.AssemblyBuilder with +type System.Reflection.Emit.AssemblyBuilder with member asmB.DefineDynamicModuleAndLog (a, b, c) = #if FX_RESHAPED_REFEMIT ignore b @@ -43,22 +47,22 @@ type System.Reflection.Emit.AssemblyBuilder with if logRefEmitCalls then printfn "let moduleBuilder%d = assemblyBuilder%d.DefineDynamicModule(%A, %A, %A)" (abs <| hash modB) (abs <| hash asmB) a b c #endif modB - - member asmB.SetCustomAttributeAndLog (cinfo, bytes) = + + member asmB.SetCustomAttributeAndLog (cinfo, bytes) = if logRefEmitCalls then printfn "assemblyBuilder%d.SetCustomAttribute(%A, %A)" (abs <| hash asmB) cinfo bytes wrapCustomAttr asmB.SetCustomAttribute (cinfo, bytes) #if !FX_RESHAPED_REFEMIT - member asmB.AddResourceFileAndLog (nm1, nm2, attrs) = + member asmB.AddResourceFileAndLog (nm1, nm2, attrs) = if logRefEmitCalls then printfn "assemblyBuilder%d.AddResourceFile(%A, %A, enum %d)" (abs <| hash asmB) nm1 nm2 (LanguagePrimitives.EnumToValue attrs) asmB.AddResourceFile(nm1, nm2, attrs) #endif - member asmB.SetCustomAttributeAndLog cab = + member asmB.SetCustomAttributeAndLog cab = if logRefEmitCalls then printfn "assemblyBuilder%d.SetCustomAttribute(%A)" (abs <| hash asmB) cab asmB.SetCustomAttribute cab -type System.Reflection.Emit.ModuleBuilder with +type System.Reflection.Emit.ModuleBuilder with member modB.GetArrayMethodAndLog (aty, nm, flags, rty, tys) = if logRefEmitCalls then printfn "moduleBuilder%d.GetArrayMethod(%A, %A, %A, %A, %A)" (abs <| hash modB) aty nm flags rty tys modB.GetArrayMethod(aty, nm, flags, rty, tys) @@ -77,18 +81,18 @@ type System.Reflection.Emit.ModuleBuilder with let typB = modB.DefineType(name, attrs) if logRefEmitCalls then printfn "let typeBuilder%d = moduleBuilder%d.DefineType(%A, enum %d)" (abs <| hash typB) (abs <| hash modB) name (LanguagePrimitives.EnumToValue attrs) typB - + #if !FX_RESHAPED_REFEMIT member modB.DefineManifestResourceAndLog (name, stream, attrs) = if logRefEmitCalls then printfn "moduleBuilder%d.DefineManifestResource(%A, %A, enum %d)" (abs <| hash modB) name stream (LanguagePrimitives.EnumToValue attrs) modB.DefineManifestResource(name, stream, attrs) #endif - member modB.SetCustomAttributeAndLog (cinfo, bytes) = + member modB.SetCustomAttributeAndLog (cinfo, bytes) = if logRefEmitCalls then printfn "moduleBuilder%d.SetCustomAttribute(%A, %A)" (abs <| hash modB) cinfo bytes wrapCustomAttr modB.SetCustomAttribute (cinfo, bytes) -type System.Reflection.Emit.ConstructorBuilder with +type System.Reflection.Emit.ConstructorBuilder with member consB.SetImplementationFlagsAndLog attrs = if logRefEmitCalls then printfn "constructorBuilder%d.SetImplementationFlags(enum %d)" (abs <| hash consB) (LanguagePrimitives.EnumToValue attrs) consB.SetImplementationFlags attrs @@ -99,16 +103,16 @@ type System.Reflection.Emit.ConstructorBuilder with member consB.GetILGeneratorAndLog () = let ilG = consB.GetILGenerator() - if logRefEmitCalls then printfn "let ilg%d = constructorBuilder%d.GetILGenerator()" (abs <| hash ilG) (abs <| hash consB) + if logRefEmitCalls then printfn "let ilg%d = constructorBuilder%d.GetILGenerator()" (abs <| hash ilG) (abs <| hash consB) ilG -type System.Reflection.Emit.MethodBuilder with +type System.Reflection.Emit.MethodBuilder with member methB.SetImplementationFlagsAndLog attrs = if logRefEmitCalls then printfn "methodBuilder%d.SetImplementationFlags(enum %d)" (abs <| hash methB) (LanguagePrimitives.EnumToValue attrs) methB.SetImplementationFlags attrs member methB.SetSignatureAndLog (returnType, returnTypeRequiredCustomModifiers, returnTypeOptionalCustomModifiers, parameterTypes, parameterTypeRequiredCustomModifiers,parameterTypeOptionalCustomModifiers) = - if logRefEmitCalls then printfn "methodBuilder%d.SetSignature(...)" (abs <| hash methB) + if logRefEmitCalls then printfn "methodBuilder%d.SetSignature(...)" (abs <| hash methB) methB.SetSignature(returnType, returnTypeRequiredCustomModifiers, returnTypeOptionalCustomModifiers, parameterTypes, parameterTypeRequiredCustomModifiers,parameterTypeOptionalCustomModifiers) member methB.DefineParameterAndLog (n, attr, nm) = @@ -121,62 +125,62 @@ type System.Reflection.Emit.MethodBuilder with member methB.GetILGeneratorAndLog () = let ilG = methB.GetILGenerator() - if logRefEmitCalls then printfn "let ilg%d = methodBuilder%d.GetILGenerator()" (abs <| hash ilG) (abs <| hash methB) + if logRefEmitCalls then printfn "let ilg%d = methodBuilder%d.GetILGenerator()" (abs <| hash ilG) (abs <| hash methB) ilG - member methB.SetCustomAttributeAndLog (cinfo, bytes) = + member methB.SetCustomAttributeAndLog (cinfo, bytes) = if logRefEmitCalls then printfn "methodBuilder%d.SetCustomAttribute(%A, %A)" (abs <| hash methB) cinfo bytes wrapCustomAttr methB.SetCustomAttribute (cinfo, bytes) -type System.Reflection.Emit.TypeBuilder with - member typB.CreateTypeAndLog () = +type System.Reflection.Emit.TypeBuilder with + member typB.CreateTypeAndLog () = if logRefEmitCalls then printfn "typeBuilder%d.CreateType()" (abs <| hash typB) #if FX_RESHAPED_REFEMIT typB.CreateTypeInfo().AsType() #else typB.CreateType() #endif - member typB.DefineNestedTypeAndLog (name, attrs) = + member typB.DefineNestedTypeAndLog (name, attrs) = let res = typB.DefineNestedType(name, attrs) if logRefEmitCalls then printfn "let typeBuilder%d = typeBuilder%d.DefineNestedType(\"%s\", enum %d)" (abs <| hash res) (abs <| hash typB) name (LanguagePrimitives.EnumToValue attrs) res - member typB.DefineMethodAndLog (name, attrs, cconv) = + member typB.DefineMethodAndLog (name, attrs, cconv) = let methB = typB.DefineMethod(name, attrs, cconv) if logRefEmitCalls then printfn "let methodBuilder%d = typeBuilder%d.DefineMethod(\"%s\", enum %d, enum %d)" (abs <| hash methB) (abs <| hash typB) name (LanguagePrimitives.EnumToValue attrs) (LanguagePrimitives.EnumToValue cconv) methB - member typB.DefineGenericParametersAndLog gps = + member typB.DefineGenericParametersAndLog gps = if logRefEmitCalls then printfn "typeBuilder%d.DefineGenericParameters(%A)" (abs <| hash typB) gps typB.DefineGenericParameters gps - member typB.DefineConstructorAndLog (attrs, cconv, parms) = + member typB.DefineConstructorAndLog (attrs, cconv, parms) = let consB = typB.DefineConstructor(attrs, cconv, parms) if logRefEmitCalls then printfn "let constructorBuilder%d = typeBuilder%d.DefineConstructor(enum %d, CallingConventions.%A, %A)" (abs <| hash consB) (abs <| hash typB) (LanguagePrimitives.EnumToValue attrs) cconv parms consB - member typB.DefineFieldAndLog (nm, ty: System.Type, attrs) = + member typB.DefineFieldAndLog (nm, ty: System.Type, attrs) = let fieldB = typB.DefineField(nm, ty, attrs) if logRefEmitCalls then printfn "let fieldBuilder%d = typeBuilder%d.DefineField(\"%s\", typeof<%s>, enum %d)" (abs <| hash fieldB) (abs <| hash typB) nm ty.FullName (LanguagePrimitives.EnumToValue attrs) fieldB - member typB.DefinePropertyAndLog (nm, attrs, ty: System.Type, args) = + member typB.DefinePropertyAndLog (nm, attrs, ty: System.Type, args) = if logRefEmitCalls then printfn "typeBuilder%d.DefineProperty(\"%A\", enum %d, typeof<%s>, %A)" (abs <| hash typB) nm (LanguagePrimitives.EnumToValue attrs) ty.FullName args typB.DefineProperty(nm, attrs, ty, args) - member typB.DefineEventAndLog (nm, attrs, ty: System.Type) = + member typB.DefineEventAndLog (nm, attrs, ty: System.Type) = if logRefEmitCalls then printfn "typeBuilder%d.DefineEvent(\"%A\", enum %d, typeof<%A>)" (abs <| hash typB) nm (LanguagePrimitives.EnumToValue attrs) ty.FullName typB.DefineEvent(nm, attrs, ty) - member typB.SetParentAndLog (ty: System.Type) = + member typB.SetParentAndLog (ty: System.Type) = if logRefEmitCalls then printfn "typeBuilder%d.SetParent(typeof<%s>)" (abs <| hash typB) ty.FullName typB.SetParent ty - member typB.AddInterfaceImplementationAndLog ty = + member typB.AddInterfaceImplementationAndLog ty = if logRefEmitCalls then printfn "typeBuilder%d.AddInterfaceImplementation(%A)" (abs <| hash typB) ty typB.AddInterfaceImplementation ty - member typB.InvokeMemberAndLog (nm, _flags, args) = + member typB.InvokeMemberAndLog (nm, _flags, args) = #if FX_RESHAPED_REFEMIT let t = typB.CreateTypeAndLog () let m = @@ -189,85 +193,85 @@ type System.Reflection.Emit.TypeBuilder with typB.InvokeMember(nm, _flags, null, null, args, Globalization.CultureInfo.InvariantCulture) #endif - member typB.SetCustomAttributeAndLog (cinfo, bytes) = + member typB.SetCustomAttributeAndLog (cinfo, bytes) = if logRefEmitCalls then printfn "typeBuilder%d.SetCustomAttribute(%A, %A)" (abs <| hash typB) cinfo bytes wrapCustomAttr typB.SetCustomAttribute (cinfo, bytes) -type System.Reflection.Emit.OpCode with +type System.Reflection.Emit.OpCode with member opcode.RefEmitName = (string (System.Char.ToUpper(opcode.Name.[0])) + opcode.Name.[1..]).Replace(".", "_").Replace("_i4", "_I4") -type System.Reflection.Emit.ILGenerator with - member ilG.DeclareLocalAndLog (ty: System.Type, isPinned) = +type System.Reflection.Emit.ILGenerator with + member ilG.DeclareLocalAndLog (ty: System.Type, isPinned) = if logRefEmitCalls then printfn "ilg%d.DeclareLocal(typeof<%s>, %b)" (abs <| hash ilG) ty.FullName isPinned ilG.DeclareLocal(ty, isPinned) - member ilG.MarkLabelAndLog lab = + member ilG.MarkLabelAndLog lab = if logRefEmitCalls then printfn "ilg%d.MarkLabel(label%d_%d)" (abs <| hash ilG) (abs <| hash ilG) (abs <| hash lab) ilG.MarkLabel lab #if !FX_RESHAPED_REFEMIT - member ilG.MarkSequencePointAndLog (symDoc, l1, c1, l2, c2) = + member ilG.MarkSequencePointAndLog (symDoc, l1, c1, l2, c2) = if logRefEmitCalls then printfn "ilg%d.MarkSequencePoint(docWriter%d, %A, %A, %A, %A)" (abs <| hash ilG) (abs <| hash symDoc) l1 c1 l2 c2 ilG.MarkSequencePoint(symDoc, l1, c1, l2, c2) #endif - member ilG.BeginExceptionBlockAndLog () = - if logRefEmitCalls then printfn "ilg%d.BeginExceptionBlock()" (abs <| hash ilG) + member ilG.BeginExceptionBlockAndLog () = + if logRefEmitCalls then printfn "ilg%d.BeginExceptionBlock()" (abs <| hash ilG) ilG.BeginExceptionBlock() - member ilG.EndExceptionBlockAndLog () = - if logRefEmitCalls then printfn "ilg%d.EndExceptionBlock()" (abs <| hash ilG) + member ilG.EndExceptionBlockAndLog () = + if logRefEmitCalls then printfn "ilg%d.EndExceptionBlock()" (abs <| hash ilG) ilG.EndExceptionBlock() - member ilG.BeginFinallyBlockAndLog () = - if logRefEmitCalls then printfn "ilg%d.BeginFinallyBlock()" (abs <| hash ilG) + member ilG.BeginFinallyBlockAndLog () = + if logRefEmitCalls then printfn "ilg%d.BeginFinallyBlock()" (abs <| hash ilG) ilG.BeginFinallyBlock() - member ilG.BeginCatchBlockAndLog ty = + member ilG.BeginCatchBlockAndLog ty = if logRefEmitCalls then printfn "ilg%d.BeginCatchBlock(%A)" (abs <| hash ilG) ty ilG.BeginCatchBlock ty - member ilG.BeginExceptFilterBlockAndLog () = - if logRefEmitCalls then printfn "ilg%d.BeginExceptFilterBlock()" (abs <| hash ilG) + member ilG.BeginExceptFilterBlockAndLog () = + if logRefEmitCalls then printfn "ilg%d.BeginExceptFilterBlock()" (abs <| hash ilG) ilG.BeginExceptFilterBlock() - member ilG.BeginFaultBlockAndLog () = - if logRefEmitCalls then printfn "ilg%d.BeginFaultBlock()" (abs <| hash ilG) + member ilG.BeginFaultBlockAndLog () = + if logRefEmitCalls then printfn "ilg%d.BeginFaultBlock()" (abs <| hash ilG) ilG.BeginFaultBlock() - member ilG.DefineLabelAndLog () = + member ilG.DefineLabelAndLog () = let lab = ilG.DefineLabel() - if logRefEmitCalls then printfn "let label%d_%d = ilg%d.DefineLabel()" (abs <| hash ilG) (abs <| hash lab) (abs <| hash ilG) + if logRefEmitCalls then printfn "let label%d_%d = ilg%d.DefineLabel()" (abs <| hash ilG) (abs <| hash lab) (abs <| hash ilG) lab - member x.EmitAndLog (op: OpCode) = + member x.EmitAndLog (op: OpCode) = if logRefEmitCalls then printfn "ilg%d.Emit(OpCodes.%s)" (abs <| hash x) op.RefEmitName - x.Emit op - member x.EmitAndLog (op: OpCode, v: Label) = + x.Emit op + member x.EmitAndLog (op: OpCode, v: Label) = if logRefEmitCalls then printfn "ilg%d.Emit(OpCodes.%s, label%d_%d)" (abs <| hash x) op.RefEmitName (abs <| hash x) (abs <| hash v) x.Emit(op, v) - member x.EmitAndLog (op: OpCode, v: int16) = + member x.EmitAndLog (op: OpCode, v: int16) = if logRefEmitCalls then printfn "ilg%d.Emit(OpCodes.%s, int16 %d)" (abs <| hash x) op.RefEmitName v x.Emit(op, v) - member x.EmitAndLog (op: OpCode, v: int32) = + member x.EmitAndLog (op: OpCode, v: int32) = if logRefEmitCalls then printfn "ilg%d.Emit(OpCodes.%s, %d)" (abs <| hash x) op.RefEmitName v x.Emit(op, v) - member x.EmitAndLog (op: OpCode, v: MethodInfo) = + member x.EmitAndLog (op: OpCode, v: MethodInfo) = if logRefEmitCalls then printfn "ilg%d.Emit(OpCodes.%s, methodBuilder%d) // method %s" (abs <| hash x) op.RefEmitName (abs <| hash v) v.Name x.Emit(op, v) - member x.EmitAndLog (op: OpCode, v: string) = + member x.EmitAndLog (op: OpCode, v: string) = if logRefEmitCalls then printfn "ilg%d.Emit(OpCodes.%s, \"@%s\")" (abs <| hash x) op.RefEmitName v x.Emit(op, v) - member x.EmitAndLog (op: OpCode, v: Type) = + member x.EmitAndLog (op: OpCode, v: Type) = if logRefEmitCalls then printfn "ilg%d.Emit(OpCodes.%s, typeof<%s>)" (abs <| hash x) op.RefEmitName v.FullName x.Emit(op, v) - member x.EmitAndLog (op: OpCode, v: FieldInfo) = + member x.EmitAndLog (op: OpCode, v: FieldInfo) = if logRefEmitCalls then printfn "ilg%d.Emit(OpCodes.%s, fieldBuilder%d) // field %s" (abs <| hash x) op.RefEmitName (abs <| hash v) v.Name x.Emit(op, v) - member x.EmitAndLog (op: OpCode, v: ConstructorInfo) = + member x.EmitAndLog (op: OpCode, v: ConstructorInfo) = if logRefEmitCalls then printfn "ilg%d.Emit(OpCodes.%s, constructor_%s)" (abs <| hash x) op.RefEmitName v.DeclaringType.Name x.Emit(op, v) - + //---------------------------------------------------------------------------- // misc @@ -275,33 +279,33 @@ type System.Reflection.Emit.ILGenerator with let inline flagsIf b x = if b then x else enum 0 -module Zmap = +module Zmap = let force x m str = match Zmap.tryFind x m with Some y -> y | None -> failwithf "Zmap.force: %s: x = %+A" str x let equalTypes (s: Type) (t: Type) = s.Equals t let equalTypeLists ss tt = List.lengthsEqAndForall2 equalTypes ss tt let equalTypeArrays ss tt = Array.lengthsEqAndForall2 equalTypes ss tt -let getGenericArgumentsOfType (typT: Type) = +let getGenericArgumentsOfType (typT: Type) = if typT.IsGenericType then typT.GetGenericArguments() else [| |] -let getGenericArgumentsOfMethod (methI: MethodInfo) = - if methI.IsGenericMethod then methI.GetGenericArguments() else [| |] +let getGenericArgumentsOfMethod (methI: MethodInfo) = + if methI.IsGenericMethod then methI.GetGenericArguments() else [| |] -let getTypeConstructor (ty: Type) = +let getTypeConstructor (ty: Type) = if ty.IsGenericType then ty.GetGenericTypeDefinition() else ty //---------------------------------------------------------------------------- // convAssemblyRef //---------------------------------------------------------------------------- -let convAssemblyRef (aref: ILAssemblyRef) = +let convAssemblyRef (aref: ILAssemblyRef) = let asmName = new System.Reflection.AssemblyName() asmName.Name <- aref.Name - (match aref.PublicKey with + (match aref.PublicKey with | None -> () | Some (PublicKey bytes) -> asmName.SetPublicKey bytes | Some (PublicKeyToken bytes) -> asmName.SetPublicKeyToken bytes) - let setVersion (version: ILVersionInfo) = + let setVersion (version: ILVersionInfo) = asmName.Version <- System.Version (int32 version.Major, int32 version.Minor, int32 version.Build, int32 version.Revision) Option.iter setVersion aref.Version // asmName.ProcessorArchitecture <- System.Reflection.ProcessorArchitecture.MSIL @@ -310,7 +314,7 @@ let convAssemblyRef (aref: ILAssemblyRef) = asmName /// The global environment. -type cenv = +type cenv = { ilg: ILGlobals emitTailcalls: bool tryFindSysILTypeRef: string -> ILTypeRef option @@ -320,39 +324,39 @@ type cenv = override x.ToString() = "" let convResolveAssemblyRef (cenv: cenv) (asmref: ILAssemblyRef) qualifiedName = - let assembly = + let assembly = match cenv.resolveAssemblyRef asmref with | Some (Choice1Of2 path) -> // asmRef is a path but the runtime is smarter with assembly names so make one let asmName = AssemblyName.GetAssemblyName(path) asmName.CodeBase <- path - FileSystem.AssemblyLoader.AssemblyLoad asmName + FileSystem.AssemblyLoad asmName | Some (Choice2Of2 assembly) -> assembly | None -> let asmName = convAssemblyRef asmref - FileSystem.AssemblyLoader.AssemblyLoad asmName + FileSystem.AssemblyLoad asmName let typT = assembly.GetType qualifiedName - match typT with + match typT with | null -> error(Error(FSComp.SR.itemNotFoundDuringDynamicCodeGen ("type", qualifiedName, asmref.QualifiedName), range0)) | res -> res /// Convert an Abstract IL type reference to Reflection.Emit System.Type value. -// This ought to be an adequate substitute for this whole function, but it needs +// This ought to be an adequate substitute for this whole function, but it needs // to be thoroughly tested. -// Type.GetType(tref.QualifiedName) +// Type.GetType(tref.QualifiedName) // [] , name -> name // [ns] , name -> ns+name // [ns;typeA;typeB], name -> ns+typeA+typeB+name -let convTypeRefAux (cenv: cenv) (tref: ILTypeRef) = +let convTypeRefAux (cenv: cenv) (tref: ILTypeRef) = let qualifiedName = (String.concat "+" (tref.Enclosing @ [ tref.Name ])).Replace(",", @"\,") match tref.Scope with | ILScopeRef.Assembly asmref -> convResolveAssemblyRef cenv asmref qualifiedName - | ILScopeRef.Module _ + | ILScopeRef.Module _ | ILScopeRef.Local _ -> - let typT = Type.GetType qualifiedName - match typT with + let typT = Type.GetType qualifiedName + match typT with | null -> error(Error(FSComp.SR.itemNotFoundDuringDynamicCodeGen ("type", qualifiedName, ""), range0)) | res -> res | ILScopeRef.PrimaryAssembly -> @@ -362,7 +366,7 @@ let convTypeRefAux (cenv: cenv) (tref: ILTypeRef) = /// and could be placed as hash tables in the global environment. [] type emEnv = - { emTypMap: Zmap + { emTypMap: Zmap emConsMap: Zmap emMethMap: Zmap emFieldMap: Zmap @@ -372,13 +376,13 @@ type emEnv = emTyvars: Type[] list; // stack emEntryPts: (TypeBuilder * string) list delayedFieldInits: (unit -> unit) list} - + let orderILTypeRef = ComparisonIdentity.Structural let orderILMethodRef = ComparisonIdentity.Structural -let orderILFieldRef = ComparisonIdentity.Structural +let orderILFieldRef = ComparisonIdentity.Structural let orderILPropertyRef = ComparisonIdentity.Structural -let emEnv0 = +let emEnv0 = { emTypMap = Zmap.empty orderILTypeRef emConsMap = Zmap.empty orderILMethodRef emMethMap = Zmap.empty orderILMethodRef @@ -390,8 +394,8 @@ let emEnv0 = emEntryPts = [] delayedFieldInits = [] } -let envBindTypeRef emEnv (tref: ILTypeRef) (typT, typB, typeDef) = - match typT with +let envBindTypeRef emEnv (tref: ILTypeRef) (typT, typB, typeDef) = + match typT with | null -> failwithf "binding null type in envBindTypeRef: %s\n" tref.Name | _ -> {emEnv with emTypMap = Zmap.add tref (typT, typB, typeDef, None) emEnv.emTypMap} @@ -407,10 +411,10 @@ let envUpdateCreatedTypeRef emEnv (tref: ILTypeRef) = // match "match x with :? C[] -> ..." before the full loading of an object of type // causes a failure when C is later loaded. One workaround for this is to attempt to do a fake allocation // of objects. We use System.Runtime.Serialization.FormatterServices.GetUninitializedObject to do - // the fake allocation - this creates an "empty" object, even if the object doesn't have + // the fake allocation - this creates an "empty" object, even if the object doesn't have // a constructor. It is not usable in partial trust code. - if runningOnMono && ty.IsClass && not ty.IsAbstract && not ty.IsGenericType && not ty.IsGenericTypeDefinition then - try + if runningOnMono && ty.IsClass && not ty.IsAbstract && not ty.IsGenericType && not ty.IsGenericTypeDefinition then + try System.Runtime.Serialization.FormatterServices.GetUninitializedObject ty |> ignore with e -> () #endif @@ -421,48 +425,48 @@ let envUpdateCreatedTypeRef emEnv (tref: ILTypeRef) = #endif emEnv -let convTypeRef cenv emEnv preferCreated (tref: ILTypeRef) = - let res = +let convTypeRef cenv emEnv preferCreated (tref: ILTypeRef) = + let res = match Zmap.tryFind tref emEnv.emTypMap with - | Some (_typT, _typB, _typeDef, Some createdTy) when preferCreated -> createdTy - | Some (typT, _typB, _typeDef, _) -> typT - | None -> convTypeRefAux cenv tref - match res with + | Some (_typT, _typB, _typeDef, Some createdTy) when preferCreated -> createdTy + | Some (typT, _typB, _typeDef, _) -> typT + | None -> convTypeRefAux cenv tref + match res with | null -> error(Error(FSComp.SR.itemNotFoundDuringDynamicCodeGen ("type", tref.QualifiedName, tref.Scope.QualifiedName), range0)) | _ -> res - -let envBindConsRef emEnv (mref: ILMethodRef) consB = + +let envBindConsRef emEnv (mref: ILMethodRef) consB = {emEnv with emConsMap = Zmap.add mref consB emEnv.emConsMap} -let envGetConsB emEnv (mref: ILMethodRef) = +let envGetConsB emEnv (mref: ILMethodRef) = Zmap.force mref emEnv.emConsMap "envGetConsB: failed" -let envBindMethodRef emEnv (mref: ILMethodRef) methB = +let envBindMethodRef emEnv (mref: ILMethodRef) methB = {emEnv with emMethMap = Zmap.add mref methB emEnv.emMethMap} -let envGetMethB emEnv (mref: ILMethodRef) = +let envGetMethB emEnv (mref: ILMethodRef) = Zmap.force mref emEnv.emMethMap "envGetMethB: failed" -let envBindFieldRef emEnv fref fieldB = +let envBindFieldRef emEnv fref fieldB = {emEnv with emFieldMap = Zmap.add fref fieldB emEnv.emFieldMap} let envGetFieldB emEnv fref = Zmap.force fref emEnv.emFieldMap "- envGetMethB: failed" - -let envBindPropRef emEnv (pref: ILPropertyRef) propB = + +let envBindPropRef emEnv (pref: ILPropertyRef) propB = {emEnv with emPropMap = Zmap.add pref propB emEnv.emPropMap} let envGetPropB emEnv pref = Zmap.force pref emEnv.emPropMap "- envGetPropB: failed" - -let envGetTypB emEnv (tref: ILTypeRef) = + +let envGetTypB emEnv (tref: ILTypeRef) = Zmap.force tref emEnv.emTypMap "envGetTypB: failed" |> (fun (_typT, typB, _typeDef, _createdTypOpt) -> typB) - -let envGetTypeDef emEnv (tref: ILTypeRef) = + +let envGetTypeDef emEnv (tref: ILTypeRef) = Zmap.force tref emEnv.emTypMap "envGetTypeDef: failed" |> (fun (_typT, _typB, typeDef, _createdTypOpt) -> typeDef) - + let envSetLocals emEnv locs = assert (emEnv.emLocals.Length = 0); // check "locals" is not yet set (scopes once only) {emEnv with emLocals = locs} let envGetLocal emEnv i = emEnv.emLocals.[i] // implicit bounds checking @@ -470,19 +474,19 @@ let envGetLocal emEnv i = emEnv.emLocals.[i] // implicit bounds checking let envSetLabel emEnv name lab = assert (not (Zmap.mem name emEnv.emLabels)) {emEnv with emLabels = Zmap.add name lab emEnv.emLabels} - -let envGetLabel emEnv name = + +let envGetLabel emEnv name = Zmap.find name emEnv.emLabels let envPushTyvars emEnv tys = {emEnv with emTyvars = tys :: emEnv.emTyvars} let envPopTyvars emEnv = {emEnv with emTyvars = List.tail emEnv.emTyvars} -let envGetTyvar emEnv u16 = +let envGetTyvar emEnv u16 = match emEnv.emTyvars with | [] -> failwith "envGetTyvar: not scope of type vars" - | tvs :: _ -> - let i = int32 u16 + | tvs :: _ -> + let i = int32 u16 if i<0 || i>= Array.length tvs then failwith (sprintf "want tyvar #%d, but only had %d tyvars" i (Array.length tvs)) else @@ -499,13 +503,13 @@ let envPopEntryPts emEnv = {emEnv with emEntryPts = []}, emEnv.emEntryPts //---------------------------------------------------------------------------- let convCallConv (Callconv (hasThis, basic)) = - let ccA = + let ccA = match hasThis with | ILThisConvention.Static -> CallingConventions.Standard | ILThisConvention.InstanceExplicit -> CallingConventions.ExplicitThis | ILThisConvention.Instance -> CallingConventions.HasThis - let ccB = + let ccB = match basic with | ILArgConvention.Default -> enum 0 | ILArgConvention.CDecl -> enum 0 @@ -522,22 +526,22 @@ let convCallConv (Callconv (hasThis, basic)) = //---------------------------------------------------------------------------- let rec convTypeSpec cenv emEnv preferCreated (tspec: ILTypeSpec) = - let typT = convTypeRef cenv emEnv preferCreated tspec.TypeRef + let typT = convTypeRef cenv emEnv preferCreated tspec.TypeRef let tyargs = List.map (convTypeAux cenv emEnv preferCreated) tspec.GenericArgs - let res = + let res = match isNil tyargs, typT.IsGenericType with - | _, true -> typT.MakeGenericType(List.toArray tyargs) - | true, false -> typT + | _, true -> typT.MakeGenericType(List.toArray tyargs) + | true, false -> typT | _, false -> null - match res with + match res with | null -> error(Error(FSComp.SR.itemNotFoundDuringDynamicCodeGen ("type", tspec.TypeRef.QualifiedName, tspec.Scope.QualifiedName), range0)) | _ -> res - + and convTypeAux cenv emEnv preferCreated ty = match ty with | ILType.Void -> Type.GetType("System.Void") - | ILType.Array (shape, eltType) -> - let baseT = convTypeAux cenv emEnv preferCreated eltType + | ILType.Array (shape, eltType) -> + let baseT = convTypeAux cenv emEnv preferCreated eltType let nDims = shape.Rank // MakeArrayType() returns "eltType[]" // MakeArrayType(1) returns "eltType[*]" @@ -545,19 +549,19 @@ and convTypeAux cenv emEnv preferCreated ty = // MakeArrayType(3) returns "eltType[, , ]" // All non-equal. if nDims=1 - then baseT.MakeArrayType() + then baseT.MakeArrayType() else baseT.MakeArrayType shape.Rank | ILType.Value tspec -> convTypeSpec cenv emEnv preferCreated tspec | ILType.Boxed tspec -> convTypeSpec cenv emEnv preferCreated tspec - | ILType.Ptr eltType -> + | ILType.Ptr eltType -> let baseT = convTypeAux cenv emEnv preferCreated eltType baseT.MakePointerType() - | ILType.Byref eltType -> + | ILType.Byref eltType -> let baseT = convTypeAux cenv emEnv preferCreated eltType baseT.MakeByRefType() | ILType.TypeVar tv -> envGetTyvar emEnv tv - | ILType.Modified (_, _, modifiedTy) -> - + | ILType.Modified (_, _, modifiedTy) -> + convTypeAux cenv emEnv preferCreated modifiedTy | ILType.FunctionPointer _callsig -> failwith "convType: fptr" @@ -573,32 +577,32 @@ and convTypeAux cenv emEnv preferCreated ty = // The external use (reflection and pretty printing) requires the created Type (rather than the builder). // convCreatedType ensures created types are used where possible. // Note: typeBuilder.CreateType() freezes the type and makes a proper Type for the collected information. -//------ +//------ // REVIEW: "convType becomes convCreatedType", the functions could be combined. // If convCreatedType replaced convType functions like convMethodRef, convConstructorSpec, ... (and more?) // will need to be fixed for emitted types to handle both TypeBuilder and later Type proper. - + /// Uses TypeBuilder/TypeBuilderInstantiation for emitted types. let convType cenv emEnv ty = convTypeAux cenv emEnv false ty // Used for ldtoken -let convTypeOrTypeDef cenv emEnv ty = +let convTypeOrTypeDef cenv emEnv ty = match ty with // represents an uninstantiated "TypeDef" or "TypeRef" - | ILType.Boxed tspec when tspec.GenericArgs.IsEmpty -> convTypeRef cenv emEnv false tspec.TypeRef + | ILType.Boxed tspec when tspec.GenericArgs.IsEmpty -> convTypeRef cenv emEnv false tspec.TypeRef | _ -> convType cenv emEnv ty let convTypes cenv emEnv (tys: ILTypes) = List.map (convType cenv emEnv) tys -let convTypesToArray cenv emEnv (tys: ILTypes) = convTypes cenv emEnv tys |> List.toArray +let convTypesToArray cenv emEnv (tys: ILTypes) = convTypes cenv emEnv tys |> List.toArray /// Uses the .CreateType() for emitted type if available. -let convCreatedType cenv emEnv ty = convTypeAux cenv emEnv true ty -let convCreatedTypeRef cenv emEnv ty = convTypeRef cenv emEnv true ty - +let convCreatedType cenv emEnv ty = convTypeAux cenv emEnv true ty +let convCreatedTypeRef cenv emEnv ty = convTypeRef cenv emEnv true ty + let rec convParamModifiersOfType cenv emEnv (pty: ILType) = [| match pty with - | ILType.Modified (modreq, ty, modifiedTy) -> + | ILType.Modified (modreq, ty, modifiedTy) -> yield (modreq, convTypeRef cenv emEnv false ty) yield! convParamModifiersOfType cenv emEnv modifiedTy | _ -> () |] @@ -621,10 +625,10 @@ let convReturnModifiers cenv emEnv (p: ILReturn) = //---------------------------------------------------------------------------- // This is gross. TypeBuilderInstantiation should really be a public type, since we -// have to use alternative means for various Method/Field/Constructor lookups. However since +// have to use alternative means for various Method/Field/Constructor lookups. However since // it isn't we resort to this technique... -let TypeBuilderInstantiationT = - let ty = +let TypeBuilderInstantiationT = + let ty = #if ENABLE_MONO_SUPPORT if runningOnMono then let ty = Type.GetType("System.Reflection.MonoGenericClass") @@ -638,30 +642,30 @@ let TypeBuilderInstantiationT = assert (not (isNull ty)) ty -let typeIsNotQueryable (ty: Type) = +let typeIsNotQueryable (ty: Type) = (ty :? TypeBuilder) || ((ty.GetType()).Equals(TypeBuilderInstantiationT)) //---------------------------------------------------------------------------- // convFieldSpec //---------------------------------------------------------------------------- let queryableTypeGetField _emEnv (parentT: Type) (fref: ILFieldRef) = - let res = parentT.GetField(fref.Name, BindingFlags.Public ||| BindingFlags.NonPublic ||| BindingFlags.Instance ||| BindingFlags.Static ) - match res with + let res = parentT.GetField(fref.Name, BindingFlags.Public ||| BindingFlags.NonPublic ||| BindingFlags.Instance ||| BindingFlags.Static ) + match res with | null -> error(Error(FSComp.SR.itemNotFoundInTypeDuringDynamicCodeGen ("field", fref.Name, fref.DeclaringTypeRef.FullName, fref.DeclaringTypeRef.Scope.QualifiedName), range0)) | _ -> res - -let nonQueryableTypeGetField (parentTI: Type) (fieldInfo: FieldInfo) : FieldInfo = - let res = - if parentTI.IsGenericType then TypeBuilder.GetField(parentTI, fieldInfo) + +let nonQueryableTypeGetField (parentTI: Type) (fieldInfo: FieldInfo) : FieldInfo = + let res = + if parentTI.IsGenericType then TypeBuilder.GetField(parentTI, fieldInfo) else fieldInfo - match res with + match res with | null -> error(Error(FSComp.SR.itemNotFoundInTypeDuringDynamicCodeGen ("field", fieldInfo.Name, parentTI.AssemblyQualifiedName, parentTI.Assembly.FullName), range0)) | _ -> res let convFieldSpec cenv emEnv fspec = let fref = fspec.FieldRef - let tref = fref.DeclaringTypeRef + let tref = fref.DeclaringTypeRef let parentTI = convType cenv emEnv fspec.DeclaringType if isEmittedTypeRef emEnv tref then // NOTE: if "convType becomes convCreatedType", then handle queryable types here too. [bug 4063] (necessary? what repro?) @@ -669,11 +673,11 @@ let convFieldSpec cenv emEnv fspec = nonQueryableTypeGetField parentTI fieldB else // Prior type. - if typeIsNotQueryable parentTI then + if typeIsNotQueryable parentTI then let parentT = getTypeConstructor parentTI - let fieldInfo = queryableTypeGetField emEnv parentT fref + let fieldInfo = queryableTypeGetField emEnv parentT fref nonQueryableTypeGetField parentTI fieldInfo - else + else queryableTypeGetField emEnv parentTI fspec.FieldRef //---------------------------------------------------------------------------- @@ -684,10 +688,10 @@ let queryableTypeGetMethodBySearch cenv emEnv parentT (mref: ILMethodRef) = let cconv = (if mref.CallingConv.IsStatic then BindingFlags.Static else BindingFlags.Instance) let methInfos = parentT.GetMethods(cconv ||| BindingFlags.Public ||| BindingFlags.NonPublic) |> Array.toList (* First, filter on name, if unique, then binding "done" *) - let tyargTs = getGenericArgumentsOfType parentT + let tyargTs = getGenericArgumentsOfType parentT let methInfos = methInfos |> List.filter (fun methInfo -> methInfo.Name = mref.Name) - match methInfos with - | [methInfo] -> + match methInfos with + | [methInfo] -> methInfo | _ -> (* Second, type match. Note type erased (non-generic) F# code would not type match but they have unique names *) @@ -696,29 +700,29 @@ let queryableTypeGetMethodBySearch cenv emEnv parentT (mref: ILMethodRef) = match a with | None -> true | Some a -> - if + if // obvious case - p.IsAssignableFrom a + p.IsAssignableFrom a then true elif // both are generic - p.IsGenericType && a.IsGenericType + p.IsGenericType && a.IsGenericType // non obvious due to contravariance: Action where T: IFoo accepts Action (for FooImpl: IFoo) - && p.GetGenericTypeDefinition().IsAssignableFrom(a.GetGenericTypeDefinition()) + && p.GetGenericTypeDefinition().IsAssignableFrom(a.GetGenericTypeDefinition()) then true else false let satisfiesAllParameters (args: Type option array) (ps: Type array) = if Array.length args <> Array.length ps then false else Array.forall2 satisfiesParameter args ps - + let select (methInfo: MethodInfo) = // mref implied Types - let mtyargTIs = getGenericArgumentsOfMethod methInfo - + let mtyargTIs = getGenericArgumentsOfMethod methInfo + if mtyargTIs.Length <> mref.GenericArity then false (* method generic arity mismatch *) else - // methInfo implied Types + // methInfo implied Types let methodParameters = methInfo.GetParameters() let argTypes = mref.ArgTypes |> List.toArray if argTypes.Length <> methodParameters.Length then false (* method argument length mismatch *) else @@ -732,134 +736,134 @@ let queryableTypeGetMethodBySearch cenv emEnv parentT (mref: ILMethodRef) = // without this check, subsequent call to convTypes would fail because it // constructs generic type without checking constraints if not (satisfiesAllParameters mrefParameterTypes haveArgTs) then false else - - let argTs, resT = + + let argTs, resT = let emEnv = envPushTyvars emEnv (Array.append tyargTs mtyargTIs) let argTs = convTypes cenv emEnv mref.ArgTypes let resT = convType cenv emEnv mref.ReturnType - argTs, resT - + argTs, resT + let haveResT = methInfo.ReturnType (* check for match *) if argTs.Length <> methodParameters.Length then false (* method argument length mismatch *) else let res = equalTypes resT haveResT && equalTypeLists argTs (haveArgTs |> Array.toList) res - + match List.tryFind select methInfos with - | None -> + | None -> let methNames = methInfos |> List.map (fun m -> m.Name) |> List.distinct failwithf "convMethodRef: could not bind to method '%A' of type '%s'" (System.String.Join(", ", methNames)) parentT.AssemblyQualifiedName | Some methInfo -> methInfo (* return MethodInfo for (generic) type's (generic) method *) - + let queryableTypeGetMethod cenv emEnv parentT (mref: ILMethodRef) = assert(not (typeIsNotQueryable parentT)) - if mref.GenericArity = 0 then - let tyargTs = getGenericArgumentsOfType parentT - let argTs, resT = + if mref.GenericArity = 0 then + let tyargTs = getGenericArgumentsOfType parentT + let argTs, resT = let emEnv = envPushTyvars emEnv tyargTs let argTs = convTypesToArray cenv emEnv mref.ArgTypes let resT = convType cenv emEnv mref.ReturnType - argTs, resT + argTs, resT let stat = mref.CallingConv.IsStatic let cconv = (if stat then BindingFlags.Static else BindingFlags.Instance) - let methInfo = - try - parentT.GetMethod(mref.Name, cconv ||| BindingFlags.Public ||| BindingFlags.NonPublic, - null, - argTs, + let methInfo = + try + parentT.GetMethod(mref.Name, cconv ||| BindingFlags.Public ||| BindingFlags.NonPublic, + null, + argTs, (null: ParameterModifier[])) - // This can fail if there is an ambiguity w.r.t. return type + // This can fail if there is an ambiguity w.r.t. return type with _ -> null - if (isNonNull methInfo && equalTypes resT methInfo.ReturnType) then + if (isNonNull methInfo && equalTypes resT methInfo.ReturnType) then methInfo else queryableTypeGetMethodBySearch cenv emEnv parentT mref - else + else queryableTypeGetMethodBySearch cenv emEnv parentT mref -let nonQueryableTypeGetMethod (parentTI: Type) (methInfo: MethodInfo) : MethodInfo = +let nonQueryableTypeGetMethod (parentTI: Type) (methInfo: MethodInfo) : MethodInfo = if (parentTI.IsGenericType && - not (equalTypes parentTI (getTypeConstructor parentTI))) + not (equalTypes parentTI (getTypeConstructor parentTI))) then TypeBuilder.GetMethod(parentTI, methInfo ) - else methInfo + else methInfo let convMethodRef cenv emEnv (parentTI: Type) (mref: ILMethodRef) = let parent = mref.DeclaringTypeRef - let res = + let res = if isEmittedTypeRef emEnv parent then - // NOTE: if "convType becomes convCreatedType", then handle queryable types here too. [bug 4063] + // NOTE: if "convType becomes convCreatedType", then handle queryable types here too. [bug 4063] // Emitted type, can get fully generic MethodBuilder from env. let methB = envGetMethB emEnv mref nonQueryableTypeGetMethod parentTI methB else // Prior type. - if typeIsNotQueryable parentTI then + if typeIsNotQueryable parentTI then let parentT = getTypeConstructor parentTI - let methInfo = queryableTypeGetMethod cenv emEnv parentT mref + let methInfo = queryableTypeGetMethod cenv emEnv parentT mref nonQueryableTypeGetMethod parentTI methInfo - else - queryableTypeGetMethod cenv emEnv parentTI mref - match res with + else + queryableTypeGetMethod cenv emEnv parentTI mref + match res with | null -> error(Error(FSComp.SR.itemNotFoundInTypeDuringDynamicCodeGen ("method", mref.Name, parentTI.FullName, parentTI.Assembly.FullName), range0)) | _ -> res //---------------------------------------------------------------------------- // convMethodSpec //---------------------------------------------------------------------------- - + let convMethodSpec cenv emEnv (mspec: ILMethodSpec) = let typT = convType cenv emEnv mspec.DeclaringType (* (instanced) parent Type *) let methInfo = convMethodRef cenv emEnv typT mspec.MethodRef (* (generic) method of (generic) parent *) let methInfo = - if isNil mspec.GenericArgs then - methInfo // non generic - else + if isNil mspec.GenericArgs then + methInfo // non generic + else let minstTs = convTypesToArray cenv emEnv mspec.GenericArgs - let methInfo = methInfo.MakeGenericMethod minstTs // instantiate method + let methInfo = methInfo.MakeGenericMethod minstTs // instantiate method methInfo - methInfo + methInfo /// Get a constructor on a non-TypeBuilder type let queryableTypeGetConstructor cenv emEnv (parentT: Type) (mref: ILMethodRef) = let tyargTs = getGenericArgumentsOfType parentT - let reqArgTs = + let reqArgTs = let emEnv = envPushTyvars emEnv tyargTs convTypesToArray cenv emEnv mref.ArgTypes - let res = parentT.GetConstructor(BindingFlags.Public ||| BindingFlags.NonPublic ||| BindingFlags.Instance, null, reqArgTs, null) - match res with + let res = parentT.GetConstructor(BindingFlags.Public ||| BindingFlags.NonPublic ||| BindingFlags.Instance, null, reqArgTs, null) + match res with | null -> error(Error(FSComp.SR.itemNotFoundInTypeDuringDynamicCodeGen ("constructor", mref.Name, parentT.FullName, parentT.Assembly.FullName), range0)) | _ -> res -let nonQueryableTypeGetConstructor (parentTI: Type) (consInfo: ConstructorInfo) : ConstructorInfo = +let nonQueryableTypeGetConstructor (parentTI: Type) (consInfo: ConstructorInfo) : ConstructorInfo = if parentTI.IsGenericType then TypeBuilder.GetConstructor(parentTI, consInfo) else consInfo -/// convConstructorSpec (like convMethodSpec) +/// convConstructorSpec (like convMethodSpec) let convConstructorSpec cenv emEnv (mspec: ILMethodSpec) = let mref = mspec.MethodRef let parentTI = convType cenv emEnv mspec.DeclaringType - let res = + let res = if isEmittedTypeRef emEnv mref.DeclaringTypeRef then - let consB = envGetConsB emEnv mref - nonQueryableTypeGetConstructor parentTI consB + let consB = envGetConsB emEnv mref + nonQueryableTypeGetConstructor parentTI consB else // Prior type. - if typeIsNotQueryable parentTI then - let parentT = getTypeConstructor parentTI - let ctorG = queryableTypeGetConstructor cenv emEnv parentT mref + if typeIsNotQueryable parentTI then + let parentT = getTypeConstructor parentTI + let ctorG = queryableTypeGetConstructor cenv emEnv parentT mref nonQueryableTypeGetConstructor parentTI ctorG else - queryableTypeGetConstructor cenv emEnv parentTI mref - match res with + queryableTypeGetConstructor cenv emEnv parentTI mref + match res with | null -> error(Error(FSComp.SR.itemNotFoundInTypeDuringDynamicCodeGen ("constructor", "", parentTI.FullName, parentTI.Assembly.FullName), range0)) | _ -> res let emitLabelMark emEnv (ilG: ILGenerator) (label: ILCodeLabel) = let lab = envGetLabel emEnv label ilG.MarkLabelAndLog lab - + ///Emit comparison instructions. -let emitInstrCompare emEnv (ilG: ILGenerator) comp targ = +let emitInstrCompare emEnv (ilG: ILGenerator) comp targ = match comp with | BI_beq -> ilG.EmitAndLog (OpCodes.Beq, envGetLabel emEnv targ) | BI_bge -> ilG.EmitAndLog (OpCodes.Bge, envGetLabel emEnv targ) @@ -881,14 +885,14 @@ let emitInstrVolatile (ilG: ILGenerator) = function | Nonvolatile -> () /// Emit the align. prefix -let emitInstrAlign (ilG: ILGenerator) = function +let emitInstrAlign (ilG: ILGenerator) = function | Aligned -> () | Unaligned1 -> ilG.Emit(OpCodes.Unaligned, 1L) // note: doc says use "long" overload! | Unaligned2 -> ilG.Emit(OpCodes.Unaligned, 2L) | Unaligned4 -> ilG.Emit(OpCodes.Unaligned, 3L) /// Emit the tail. prefix if necessary -let emitInstrTail (cenv: cenv) (ilG: ILGenerator) tail emitTheCall = +let emitInstrTail (cenv: cenv) (ilG: ILGenerator) tail emitTheCall = match tail with | Tailcall when cenv.emitTailcalls -> ilG.EmitAndLog OpCodes.Tailcall; emitTheCall(); ilG.EmitAndLog OpCodes.Ret | _ -> emitTheCall() @@ -916,22 +920,22 @@ let emitInstrCall cenv emEnv (ilG: ILGenerator) opCall tail (mspec: ILMethodSpec | Some varargTys -> ilG.EmitCall (opCall, minfo, convTypesToArray cenv emEnv varargTys) ) -let getGenericMethodDefinition q (ty: Type) = - let gminfo = - match q with +let getGenericMethodDefinition q (ty: Type) = + let gminfo = + match q with | Quotations.Patterns.Call(_, minfo, _) -> minfo.GetGenericMethodDefinition() | _ -> failwith "unexpected failure decoding quotation at ilreflect startup" gminfo.MakeGenericMethod [| ty |] -let getArrayMethInfo n ty = - match n with +let getArrayMethInfo n ty = + match n with | 2 -> getGenericMethodDefinition <@@ LanguagePrimitives.IntrinsicFunctions.GetArray2D null 0 0 @@> ty | 3 -> getGenericMethodDefinition <@@ LanguagePrimitives.IntrinsicFunctions.GetArray3D null 0 0 0 @@> ty | 4 -> getGenericMethodDefinition <@@ LanguagePrimitives.IntrinsicFunctions.GetArray4D null 0 0 0 0 @@> ty | _ -> invalidArg "n" "not expecting array dimension > 4" - -let setArrayMethInfo n ty = - match n with + +let setArrayMethInfo n ty = + match n with | 2 -> getGenericMethodDefinition <@@ LanguagePrimitives.IntrinsicFunctions.SetArray2D null 0 0 0 @@> ty | 3 -> getGenericMethodDefinition <@@ LanguagePrimitives.IntrinsicFunctions.SetArray3D null 0 0 0 0 @@> ty | 4 -> getGenericMethodDefinition <@@ LanguagePrimitives.IntrinsicFunctions.SetArray4D null 0 0 0 0 0 @@> ty @@ -942,10 +946,10 @@ let setArrayMethInfo n ty = // emitInstr cenv //---------------------------------------------------------------------------- -let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = - match instr with - | AI_add -> ilG.EmitAndLog OpCodes.Add - | AI_add_ovf -> ilG.EmitAndLog OpCodes.Add_Ovf +let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = + match instr with + | AI_add -> ilG.EmitAndLog OpCodes.Add + | AI_add_ovf -> ilG.EmitAndLog OpCodes.Add_Ovf | AI_add_ovf_un -> ilG.EmitAndLog OpCodes.Add_Ovf_Un | AI_and -> ilG.EmitAndLog OpCodes.And | AI_div -> ilG.EmitAndLog OpCodes.Div @@ -955,56 +959,56 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = | AI_cgt_un -> ilG.EmitAndLog OpCodes.Cgt_Un | AI_clt -> ilG.EmitAndLog OpCodes.Clt | AI_clt_un -> ilG.EmitAndLog OpCodes.Clt_Un - // conversion - | AI_conv dt -> + // conversion + | AI_conv dt -> match dt with | DT_I -> ilG.EmitAndLog OpCodes.Conv_I | DT_I1 -> ilG.EmitAndLog OpCodes.Conv_I1 | DT_I2 -> ilG.EmitAndLog OpCodes.Conv_I2 | DT_I4 -> ilG.EmitAndLog OpCodes.Conv_I4 | DT_I8 -> ilG.EmitAndLog OpCodes.Conv_I8 - | DT_U -> ilG.EmitAndLog OpCodes.Conv_U - | DT_U1 -> ilG.EmitAndLog OpCodes.Conv_U1 - | DT_U2 -> ilG.EmitAndLog OpCodes.Conv_U2 - | DT_U4 -> ilG.EmitAndLog OpCodes.Conv_U4 + | DT_U -> ilG.EmitAndLog OpCodes.Conv_U + | DT_U1 -> ilG.EmitAndLog OpCodes.Conv_U1 + | DT_U2 -> ilG.EmitAndLog OpCodes.Conv_U2 + | DT_U4 -> ilG.EmitAndLog OpCodes.Conv_U4 | DT_U8 -> ilG.EmitAndLog OpCodes.Conv_U8 | DT_R -> ilG.EmitAndLog OpCodes.Conv_R_Un | DT_R4 -> ilG.EmitAndLog OpCodes.Conv_R4 | DT_R8 -> ilG.EmitAndLog OpCodes.Conv_R8 | DT_REF -> failwith "AI_conv DT_REF?" // XXX - check // conversion - ovf checks - | AI_conv_ovf dt -> + | AI_conv_ovf dt -> match dt with | DT_I -> ilG.EmitAndLog OpCodes.Conv_Ovf_I | DT_I1 -> ilG.EmitAndLog OpCodes.Conv_Ovf_I1 | DT_I2 -> ilG.EmitAndLog OpCodes.Conv_Ovf_I2 | DT_I4 -> ilG.EmitAndLog OpCodes.Conv_Ovf_I4 | DT_I8 -> ilG.EmitAndLog OpCodes.Conv_Ovf_I8 - | DT_U -> ilG.EmitAndLog OpCodes.Conv_Ovf_U - | DT_U1 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U1 - | DT_U2 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U2 + | DT_U -> ilG.EmitAndLog OpCodes.Conv_Ovf_U + | DT_U1 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U1 + | DT_U2 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U2 | DT_U4 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U4 | DT_U8 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U8 - | DT_R -> failwith "AI_conv_ovf DT_R?" // XXX - check - | DT_R4 -> failwith "AI_conv_ovf DT_R4?" // XXX - check - | DT_R8 -> failwith "AI_conv_ovf DT_R8?" // XXX - check + | DT_R -> failwith "AI_conv_ovf DT_R?" // XXX - check + | DT_R4 -> failwith "AI_conv_ovf DT_R4?" // XXX - check + | DT_R8 -> failwith "AI_conv_ovf DT_R8?" // XXX - check | DT_REF -> failwith "AI_conv_ovf DT_REF?" // XXX - check - // conversion - ovf checks and unsigned - | AI_conv_ovf_un dt -> + // conversion - ovf checks and unsigned + | AI_conv_ovf_un dt -> match dt with | DT_I -> ilG.EmitAndLog OpCodes.Conv_Ovf_I_Un | DT_I1 -> ilG.EmitAndLog OpCodes.Conv_Ovf_I1_Un | DT_I2 -> ilG.EmitAndLog OpCodes.Conv_Ovf_I2_Un | DT_I4 -> ilG.EmitAndLog OpCodes.Conv_Ovf_I4_Un | DT_I8 -> ilG.EmitAndLog OpCodes.Conv_Ovf_I8_Un - | DT_U -> ilG.EmitAndLog OpCodes.Conv_Ovf_U_Un - | DT_U1 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U1_Un - | DT_U2 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U2_Un - | DT_U4 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U4_Un + | DT_U -> ilG.EmitAndLog OpCodes.Conv_Ovf_U_Un + | DT_U1 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U1_Un + | DT_U2 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U2_Un + | DT_U4 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U4_Un | DT_U8 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U8_Un - | DT_R -> failwith "AI_conv_ovf_un DT_R?" // XXX - check - | DT_R4 -> failwith "AI_conv_ovf_un DT_R4?" // XXX - check - | DT_R8 -> failwith "AI_conv_ovf_un DT_R8?" // XXX - check + | DT_R -> failwith "AI_conv_ovf_un DT_R?" // XXX - check + | DT_R4 -> failwith "AI_conv_ovf_un DT_R4?" // XXX - check + | DT_R8 -> failwith "AI_conv_ovf_un DT_R8?" // XXX - check | DT_REF -> failwith "AI_conv_ovf_un DT_REF?" // XXX - check | AI_mul -> ilG.EmitAndLog OpCodes.Mul | AI_mul_ovf -> ilG.EmitAndLog OpCodes.Mul_Ovf @@ -1033,7 +1037,7 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = | AI_ldc (_, _ ) -> failwith "emitInstrI_arith (AI_ldc (ty, const)) iltyped" | I_ldarg u16 -> ilG.EmitAndLog (OpCodes.Ldarg, int16 u16) | I_ldarga u16 -> ilG.EmitAndLog (OpCodes.Ldarga, int16 u16) - | I_ldind (align, vol, dt) -> + | I_ldind (align, vol, dt) -> emitInstrAlign ilG align emitInstrVolatile ilG vol match dt with @@ -1054,7 +1058,7 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = | I_ldloc u16 -> ilG.EmitAndLog (OpCodes.Ldloc, int16 u16) | I_ldloca u16 -> ilG.EmitAndLog (OpCodes.Ldloca, int16 u16) | I_starg u16 -> ilG.EmitAndLog (OpCodes.Starg, int16 u16) - | I_stind (align, vol, dt) -> + | I_stind (align, vol, dt) -> emitInstrAlign ilG align emitInstrVolatile ilG vol match dt with @@ -1075,58 +1079,58 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = | I_stloc u16 -> ilG.EmitAndLog (OpCodes.Stloc, int16 u16) | I_br targ -> ilG.EmitAndLog (OpCodes.Br, envGetLabel emEnv targ) | I_jmp mspec -> ilG.EmitAndLog (OpCodes.Jmp, convMethodSpec cenv emEnv mspec) - | I_brcmp (comp, targ) -> emitInstrCompare emEnv ilG comp targ + | I_brcmp (comp, targ) -> emitInstrCompare emEnv ilG comp targ | I_switch labels -> ilG.Emit(OpCodes.Switch, Array.ofList (List.map (envGetLabel emEnv) labels)) | I_ret -> ilG.EmitAndLog OpCodes.Ret - | I_call (tail, mspec, varargs) -> + | I_call (tail, mspec, varargs) -> emitSilverlightCheck ilG emitInstrCall cenv emEnv ilG OpCodes.Call tail mspec varargs - | I_callvirt (tail, mspec, varargs) -> + | I_callvirt (tail, mspec, varargs) -> emitSilverlightCheck ilG emitInstrCall cenv emEnv ilG OpCodes.Callvirt tail mspec varargs - | I_callconstraint (tail, ty, mspec, varargs) -> + | I_callconstraint (tail, ty, mspec, varargs) -> ilG.Emit(OpCodes.Constrained, convType cenv emEnv ty) - emitInstrCall cenv emEnv ilG OpCodes.Callvirt tail mspec varargs + emitInstrCall cenv emEnv ilG OpCodes.Callvirt tail mspec varargs - | I_calli (tail, callsig, None) -> + | I_calli (tail, callsig, None) -> emitInstrTail cenv ilG tail (fun () -> - ilG.EmitCalli(OpCodes.Calli, - convCallConv callsig.CallingConv, - convType cenv emEnv callsig.ReturnType, - convTypesToArray cenv emEnv callsig.ArgTypes, + ilG.EmitCalli(OpCodes.Calli, + convCallConv callsig.CallingConv, + convType cenv emEnv callsig.ReturnType, + convTypesToArray cenv emEnv callsig.ArgTypes, Unchecked.defaultof)) - | I_calli (tail, callsig, Some varargTys) -> + | I_calli (tail, callsig, Some varargTys) -> emitInstrTail cenv ilG tail (fun () -> - ilG.EmitCalli(OpCodes.Calli, - convCallConv callsig.CallingConv, - convType cenv emEnv callsig.ReturnType, - convTypesToArray cenv emEnv callsig.ArgTypes, - convTypesToArray cenv emEnv varargTys)) + ilG.EmitCalli(OpCodes.Calli, + convCallConv callsig.CallingConv, + convType cenv emEnv callsig.ReturnType, + convTypesToArray cenv emEnv callsig.ArgTypes, + convTypesToArray cenv emEnv varargTys)) - | I_ldftn mspec -> + | I_ldftn mspec -> ilG.EmitAndLog (OpCodes.Ldftn, convMethodSpec cenv emEnv mspec) - | I_newobj (mspec, varargs) -> + | I_newobj (mspec, varargs) -> emitInstrNewobj cenv emEnv ilG mspec varargs | I_throw -> ilG.EmitAndLog OpCodes.Throw | I_endfinally -> ilG.EmitAndLog OpCodes.Endfinally - | I_endfilter -> ilG.EmitAndLog OpCodes.Endfilter + | I_endfilter -> ilG.EmitAndLog OpCodes.Endfilter | I_leave label -> ilG.EmitAndLog (OpCodes.Leave, envGetLabel emEnv label) | I_ldsfld (vol, fspec) -> emitInstrVolatile ilG vol; ilG.EmitAndLog (OpCodes.Ldsfld, convFieldSpec cenv emEnv fspec) | I_ldfld (align, vol, fspec) -> emitInstrAlign ilG align; emitInstrVolatile ilG vol; ilG.EmitAndLog (OpCodes.Ldfld, convFieldSpec cenv emEnv fspec) | I_ldsflda fspec -> ilG.EmitAndLog (OpCodes.Ldsflda, convFieldSpec cenv emEnv fspec) | I_ldflda fspec -> ilG.EmitAndLog (OpCodes.Ldflda, convFieldSpec cenv emEnv fspec) - | I_stsfld (vol, fspec) -> + | I_stsfld (vol, fspec) -> emitInstrVolatile ilG vol ilG.EmitAndLog (OpCodes.Stsfld, convFieldSpec cenv emEnv fspec) - | I_stfld (align, vol, fspec) -> + | I_stfld (align, vol, fspec) -> emitInstrAlign ilG align emitInstrVolatile ilG vol ilG.EmitAndLog (OpCodes.Stfld, convFieldSpec cenv emEnv fspec) @@ -1142,12 +1146,12 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = | I_cpobj ty -> ilG.EmitAndLog (OpCodes.Cpobj, convType cenv emEnv ty) | I_initobj ty -> ilG.EmitAndLog (OpCodes.Initobj, convType cenv emEnv ty) - | I_ldobj (align, vol, ty) -> + | I_ldobj (align, vol, ty) -> emitInstrAlign ilG align emitInstrVolatile ilG vol ilG.EmitAndLog (OpCodes.Ldobj, convType cenv emEnv ty) - | I_stobj (align, vol, ty) -> + | I_stobj (align, vol, ty) -> emitInstrAlign ilG align emitInstrVolatile ilG vol ilG.EmitAndLog (OpCodes.Stobj, convType cenv emEnv ty) @@ -1157,19 +1161,19 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = | I_unbox_any ty -> ilG.EmitAndLog (OpCodes.Unbox_Any, convType cenv emEnv ty) | I_sizeof ty -> ilG.EmitAndLog (OpCodes.Sizeof, convType cenv emEnv ty) - // Generalized array instructions. - // In AbsIL these instructions include - // both the single-dimensional variants (with ILArrayShape == ILArrayShape.SingleDimensional) - // and calls to the "special" multi-dimensional "methods" such as - // newobj void string[, ] :: .ctor(int32, int32) - // call string string[, ] :: Get(int32, int32) - // call string& string[, ] :: Address(int32, int32) - // call void string[, ] :: Set(int32, int32, string) - // The IL reader transforms calls of this form to the corresponding - // generalized instruction with the corresponding ILArrayShape - // argument. This is done to simplify the IL and make it more uniform. - // The IL writer then reverses this when emitting the binary. - | I_ldelem dt -> + // Generalized array instructions. + // In AbsIL these instructions include + // both the single-dimensional variants (with ILArrayShape == ILArrayShape.SingleDimensional) + // and calls to the "special" multi-dimensional "methods" such as + // newobj void string[, ] :: .ctor(int32, int32) + // call string string[, ] :: Get(int32, int32) + // call string& string[, ] :: Address(int32, int32) + // call void string[, ] :: Set(int32, int32, string) + // The IL reader transforms calls of this form to the corresponding + // generalized instruction with the corresponding ILArrayShape + // argument. This is done to simplify the IL and make it more uniform. + // The IL writer then reverses this when emitting the binary. + | I_ldelem dt -> match dt with | DT_I -> ilG.EmitAndLog OpCodes.Ldelem_I | DT_I1 -> ilG.EmitAndLog OpCodes.Ldelem_I1 @@ -1186,7 +1190,7 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = | DT_U8 -> failwith "emitInstr cenv: ldelem U8" | DT_REF -> ilG.EmitAndLog OpCodes.Ldelem_Ref - | I_stelem dt -> + | I_stelem dt -> match dt with | DT_I -> ilG.EmitAndLog OpCodes.Stelem_I | DT_I1 -> ilG.EmitAndLog OpCodes.Stelem_I1 @@ -1203,52 +1207,52 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = | DT_U8 -> failwith "emitInstr cenv: stelem U8" | DT_REF -> ilG.EmitAndLog OpCodes.Stelem_Ref - | I_ldelema (ro, _isNativePtr, shape, ty) -> + | I_ldelema (ro, _isNativePtr, shape, ty) -> if (ro = ReadonlyAddress) then ilG.EmitAndLog OpCodes.Readonly - if (shape = ILArrayShape.SingleDimensional) + if (shape = ILArrayShape.SingleDimensional) then ilG.EmitAndLog (OpCodes.Ldelema, convType cenv emEnv ty) - else - let aty = convType cenv emEnv (ILType.Array(shape, ty)) + else + let aty = convType cenv emEnv (ILType.Array(shape, ty)) let ety = aty.GetElementType() - let rty = ety.MakeByRefType() + let rty = ety.MakeByRefType() let meth = modB.GetArrayMethodAndLog (aty, "Address", System.Reflection.CallingConventions.HasThis, rty, Array.create shape.Rank (typeof) ) ilG.EmitAndLog (OpCodes.Call, meth) - | I_ldelem_any (shape, ty) -> + | I_ldelem_any (shape, ty) -> if (shape = ILArrayShape.SingleDimensional) then ilG.EmitAndLog (OpCodes.Ldelem, convType cenv emEnv ty) - else - let aty = convType cenv emEnv (ILType.Array(shape, ty)) + else + let aty = convType cenv emEnv (ILType.Array(shape, ty)) let ety = aty.GetElementType() - let meth = + let meth = #if ENABLE_MONO_SUPPORT // See bug 6254: Mono has a bug in reflection-emit dynamic calls to the "Get", "Address" or "Set" methods on arrays - if runningOnMono then + if runningOnMono then getArrayMethInfo shape.Rank ety else #endif modB.GetArrayMethodAndLog (aty, "Get", System.Reflection.CallingConventions.HasThis, ety, Array.create shape.Rank (typeof) ) ilG.EmitAndLog (OpCodes.Call, meth) - | I_stelem_any (shape, ty) -> + | I_stelem_any (shape, ty) -> if (shape = ILArrayShape.SingleDimensional) then ilG.EmitAndLog (OpCodes.Stelem, convType cenv emEnv ty) - else - let aty = convType cenv emEnv (ILType.Array(shape, ty)) + else + let aty = convType cenv emEnv (ILType.Array(shape, ty)) let ety = aty.GetElementType() - let meth = + let meth = #if ENABLE_MONO_SUPPORT // See bug 6254: Mono has a bug in reflection-emit dynamic calls to the "Get", "Address" or "Set" methods on arrays - if runningOnMono then + if runningOnMono then setArrayMethInfo shape.Rank ety else #endif - modB.GetArrayMethodAndLog (aty, "Set", System.Reflection.CallingConventions.HasThis, (null: Type), Array.append (Array.create shape.Rank (typeof)) (Array.ofList [ ety ])) + modB.GetArrayMethodAndLog (aty, "Set", System.Reflection.CallingConventions.HasThis, (null: Type), Array.append (Array.create shape.Rank (typeof)) (Array.ofList [ ety ])) ilG.EmitAndLog (OpCodes.Call, meth) - | I_newarr (shape, ty) -> + | I_newarr (shape, ty) -> if (shape = ILArrayShape.SingleDimensional) then ilG.EmitAndLog (OpCodes.Newarr, convType cenv emEnv ty) - else - let aty = convType cenv emEnv (ILType.Array(shape, ty)) + else + let aty = convType cenv emEnv (ILType.Array(shape, ty)) let meth = modB.GetArrayMethodAndLog (aty, ".ctor", System.Reflection.CallingConventions.HasThis, (null: Type), Array.create shape.Rank (typeof)) ilG.EmitAndLog (OpCodes.Newobj, meth) @@ -1258,7 +1262,7 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = | I_refanyval ty -> ilG.EmitAndLog (OpCodes.Refanyval, convType cenv emEnv ty) | I_rethrow -> ilG.EmitAndLog OpCodes.Rethrow | I_break -> ilG.EmitAndLog OpCodes.Break - | I_seqpoint src -> + | I_seqpoint src -> #if FX_RESHAPED_REFEMIT ignore src () @@ -1271,17 +1275,17 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = | I_arglist -> ilG.EmitAndLog OpCodes.Arglist | I_localloc -> ilG.EmitAndLog OpCodes.Localloc - | I_cpblk (align, vol) -> + | I_cpblk (align, vol) -> emitInstrAlign ilG align emitInstrVolatile ilG vol ilG.EmitAndLog OpCodes.Cpblk - | I_initblk (align, vol) -> + | I_initblk (align, vol) -> emitInstrAlign ilG align emitInstrVolatile ilG vol ilG.EmitAndLog OpCodes.Initblk - | EI_ldlen_multi (_, m) -> + | EI_ldlen_multi (_, m) -> emitInstr cenv modB emEnv ilG (mkLdcInt32 m) emitInstr cenv modB emEnv ilG (mkNormalCall(mkILNonGenericMethSpecInTy(cenv.ilg.typ_Array, ILCallingConv.Instance, "GetLength", [cenv.ilg.typ_Int32], cenv.ilg.typ_Int32))) @@ -1291,19 +1295,19 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = let emitCode cenv modB emEnv (ilG: ILGenerator) (code: ILCode) = // Pre-define the labels pending determining their actual marks let pc2lab = Dictionary() - let emEnv = - (emEnv, code.Labels) ||> Seq.fold (fun emEnv (KeyValue(label, pc)) -> + let emEnv = + (emEnv, code.Labels) ||> Seq.fold (fun emEnv (KeyValue(label, pc)) -> let lab = ilG.DefineLabelAndLog () pc2lab.[pc] <- match pc2lab.TryGetValue pc with | true, labels -> lab :: labels | _ -> [lab] envSetLabel emEnv label lab) - + // Build a table that contains the operations that define where exception handlers are let pc2action = Dictionary() let lab2pc = code.Labels - let add lab action = + let add lab action = let pc = lab2pc.[lab] pc2action.[pc] <- match pc2action.TryGetValue pc with @@ -1315,21 +1319,21 @@ let emitCode cenv modB emEnv (ilG: ILGenerator) (code: ILCode) = add startTry (fun () -> ilG.BeginExceptionBlockAndLog () |> ignore) - match e.Clause with - | ILExceptionClause.Finally(startHandler, endHandler) -> + match e.Clause with + | ILExceptionClause.Finally(startHandler, endHandler) -> add startHandler ilG.BeginFinallyBlockAndLog add endHandler ilG.EndExceptionBlockAndLog - | ILExceptionClause.Fault(startHandler, endHandler) -> + | ILExceptionClause.Fault(startHandler, endHandler) -> add startHandler ilG.BeginFaultBlockAndLog add endHandler ilG.EndExceptionBlockAndLog - | ILExceptionClause.FilterCatch((startFilter, _), (startHandler, endHandler)) -> + | ILExceptionClause.FilterCatch((startFilter, _), (startHandler, endHandler)) -> add startFilter ilG.BeginExceptFilterBlockAndLog add startHandler (fun () -> ilG.BeginCatchBlockAndLog null) add endHandler ilG.EndExceptionBlockAndLog - | ILExceptionClause.TypeCatch(ty, (startHandler, endHandler)) -> + | ILExceptionClause.TypeCatch(ty, (startHandler, endHandler)) -> add startHandler (fun () -> ilG.BeginCatchBlockAndLog (convType cenv emEnv ty)) add endHandler ilG.EndExceptionBlockAndLog @@ -1339,7 +1343,7 @@ let emitCode cenv modB emEnv (ilG: ILGenerator) (code: ILCode) = for pc = 0 to instrs.Length do match pc2action.TryGetValue pc with | true, actions -> - for action in actions do + for action in actions do action() | _ -> () @@ -1349,8 +1353,8 @@ let emitCode cenv modB emEnv (ilG: ILGenerator) (code: ILCode) = ilG.MarkLabelAndLog lab | _ -> () - if pc < instrs.Length then - match instrs.[pc] with + if pc < instrs.Length then + match instrs.[pc] with | I_br l when code.Labels.[l] = pc + 1 -> () // compress I_br to next instruction | i -> emitInstr cenv modB emEnv ilG i @@ -1368,23 +1372,23 @@ let emitLocal cenv emEnv (ilG: ILGenerator) (local: ILLocal) = let emitILMethodBody cenv modB emEnv (ilG: ILGenerator) (ilmbody: ILMethodBody) = let localBs = Array.map (emitLocal cenv emEnv ilG) (List.toArray ilmbody.Locals) let emEnv = envSetLocals emEnv localBs - emitCode cenv modB emEnv ilG ilmbody.Code + emitCode cenv modB emEnv ilG ilmbody.Code -let emitMethodBody cenv modB emEnv ilG _name (mbody: MethodBody) = - match mbody with - | MethodBody.IL ilmbody -> emitILMethodBody cenv modB emEnv (ilG()) ilmbody.Value +let emitMethodBody cenv modB emEnv ilG _name (mbody: ILLazyMethodBody) = + match mbody.Contents with + | MethodBody.IL ilmbody -> emitILMethodBody cenv modB emEnv (ilG()) ilmbody | MethodBody.PInvoke _pinvoke -> () | MethodBody.Abstract -> () - | MethodBody.Native -> failwith "emitMethodBody: native" + | MethodBody.Native -> failwith "emitMethodBody: native" | MethodBody.NotAvailable -> failwith "emitMethodBody: metadata only" let convCustomAttr cenv emEnv (cattr: ILAttribute) = - let methInfo = - match convConstructorSpec cenv emEnv cattr.Method with + let methInfo = + match convConstructorSpec cenv emEnv cattr.Method with | null -> failwithf "convCustomAttr: %+A" cattr.Method | res -> res - let data = getCustomAttrData cattr + let data = getCustomAttrData cenv.ilg cattr (methInfo, data) let emitCustomAttr cenv emEnv add cattr = add (convCustomAttr cenv emEnv cattr) @@ -1394,16 +1398,16 @@ let emitCustomAttrs cenv emEnv add (cattrs: ILAttributes) = Array.iter (emitCust // buildGenParams //---------------------------------------------------------------------------- -let buildGenParamsPass1 _emEnv defineGenericParameters (gps: ILGenericParameterDefs) = - match gps with - | [] -> () +let buildGenParamsPass1 _emEnv defineGenericParameters (gps: ILGenericParameterDefs) = + match gps with + | [] -> () | gps -> - let gpsNames = gps |> List.map (fun gp -> gp.Name) + let gpsNames = gps |> List.map (fun gp -> gp.Name) defineGenericParameters (Array.ofList gpsNames) |> ignore -let buildGenParamsPass1b cenv emEnv (genArgs: Type array) (gps: ILGenericParameterDefs) = - let genpBs = genArgs |> Array.map (fun x -> (x :?> GenericTypeParameterBuilder)) +let buildGenParamsPass1b cenv emEnv (genArgs: Type array) (gps: ILGenericParameterDefs) = + let genpBs = genArgs |> Array.map (fun x -> (x :?> GenericTypeParameterBuilder)) gps |> List.iteri (fun i (gp: ILGenericParameterDef) -> let gpB = genpBs.[i] // the Constraints are either the parent (base) type or interfaces. @@ -1419,17 +1423,17 @@ let buildGenParamsPass1b cenv emEnv (genArgs: Type array) (gps: ILGenericParamet gpB.SetInterfaceConstraints(Array.ofList interfaceTs) gp.CustomAttrs |> emitCustomAttrs cenv emEnv (wrapCustomAttr gpB.SetCustomAttribute) - let flags = GenericParameterAttributes.None + let flags = GenericParameterAttributes.None let flags = match gp.Variance with | NonVariant -> flags | CoVariant -> flags ||| GenericParameterAttributes.Covariant | ContraVariant -> flags ||| GenericParameterAttributes.Contravariant - - let flags = if gp.HasReferenceTypeConstraint then flags ||| GenericParameterAttributes.ReferenceTypeConstraint else flags + + let flags = if gp.HasReferenceTypeConstraint then flags ||| GenericParameterAttributes.ReferenceTypeConstraint else flags let flags = if gp.HasNotNullableValueTypeConstraint then flags ||| GenericParameterAttributes.NotNullableValueTypeConstraint else flags let flags = if gp.HasDefaultConstructorConstraint then flags ||| GenericParameterAttributes.DefaultConstructorConstraint else flags - + gpB.SetGenericParameterAttributes flags ) //---------------------------------------------------------------------------- @@ -1440,14 +1444,14 @@ let emitParameter cenv emEnv (defineParameter: int * ParameterAttributes * strin // -Type: ty // -Default: ILFieldInit option // -Marshal: NativeType option; (* Marshalling map for parameters. COM Interop only. *) - let attrs = flagsIf param.IsIn ParameterAttributes.In ||| + let attrs = flagsIf param.IsIn ParameterAttributes.In ||| flagsIf param.IsOut ParameterAttributes.Out ||| flagsIf param.IsOptional ParameterAttributes.Optional - let name = + let name = match param.Name with | Some name -> name | None -> "X" + string(i+1) - + let parB = defineParameter(i, attrs, name) emitCustomAttrs cenv emEnv (wrapCustomAttr parB.SetCustomAttribute) param.CustomAttrs @@ -1486,31 +1490,30 @@ let rec buildMethodPass2 cenv tref (typB: TypeBuilder) emEnv (mdef: ILMethodDef) let implflags = mdef.ImplAttributes let cconv = convCallConv mdef.CallingConv let mref = mkRefToILMethod (tref, mdef) - let emEnv = + let emEnv = if mdef.IsEntryPoint && isNil mdef.ParameterTypes then envAddEntryPt emEnv (typB, mdef.Name) else emEnv - match mdef.Body with - | MethodBody.PInvoke pLazy when enablePInvoke -> - let p = pLazy.Value + match mdef.Body.Contents with + | MethodBody.PInvoke p when enablePInvoke -> let argtys = convTypesToArray cenv emEnv mdef.ParameterTypes let rty = convType cenv emEnv mdef.Return.Type let pcc = - match p.CallingConv with + match p.CallingConv with | PInvokeCallingConvention.Cdecl -> CallingConvention.Cdecl | PInvokeCallingConvention.Stdcall -> CallingConvention.StdCall | PInvokeCallingConvention.Thiscall -> CallingConvention.ThisCall | PInvokeCallingConvention.Fastcall -> CallingConvention.FastCall - | PInvokeCallingConvention.None - | PInvokeCallingConvention.WinApi -> CallingConvention.Winapi - let pcs = - match p.CharEncoding with + | PInvokeCallingConvention.None + | PInvokeCallingConvention.WinApi -> CallingConvention.Winapi + let pcs = + match p.CharEncoding with | PInvokeCharEncoding.None -> CharSet.None | PInvokeCharEncoding.Ansi -> CharSet.Ansi | PInvokeCharEncoding.Unicode -> CharSet.Unicode - | PInvokeCharEncoding.Auto -> CharSet.Auto + | PInvokeCharEncoding.Auto -> CharSet.Auto (* p.ThrowOnUnmappableChar *) (* p.CharBestFit *) (* p.NoMangle *) @@ -1528,29 +1531,29 @@ let rec buildMethodPass2 cenv tref (typB: TypeBuilder) emEnv (mdef: ILMethodDef) methB.SetImplementationFlagsAndLog implflags envBindMethodRef emEnv mref methB - | _ -> + | _ -> match mdef.Name with - | ".cctor" + | ".cctor" | ".ctor" -> let consB = typB.DefineConstructorAndLog (attrs, cconv, convTypesToArray cenv emEnv mdef.ParameterTypes) consB.SetImplementationFlagsAndLog implflags envBindConsRef emEnv mref consB | _name -> // The return/argument types may involve the generic parameters - let methB = typB.DefineMethodAndLog (mdef.Name, attrs, cconv) - - // Method generic type parameters + let methB = typB.DefineMethodAndLog (mdef.Name, attrs, cconv) + + // Method generic type parameters buildGenParamsPass1 emEnv methB.DefineGenericParametersAndLog mdef.GenericParams - let genArgs = getGenericArgumentsOfMethod methB + let genArgs = getGenericArgumentsOfMethod methB let emEnv = envPushTyvars emEnv (Array.append (getGenericArgumentsOfType (typB.AsType())) genArgs) buildGenParamsPass1b cenv emEnv genArgs mdef.GenericParams // Set parameter and return types (may depend on generic args) let parameterTypes = convTypesToArray cenv emEnv mdef.ParameterTypes - let parameterTypeRequiredCustomModifiers,parameterTypeOptionalCustomModifiers = - mdef.Parameters - |> List.toArray - |> Array.map (convParamModifiers cenv emEnv) + let parameterTypeRequiredCustomModifiers,parameterTypeOptionalCustomModifiers = + mdef.Parameters + |> List.toArray + |> Array.map (convParamModifiers cenv emEnv) |> Array.unzip let returnTypeRequiredCustomModifiers, returnTypeOptionalCustomModifiers = mdef.Return |> convReturnModifiers cenv emEnv @@ -1566,11 +1569,11 @@ let rec buildMethodPass2 cenv tref (typB: TypeBuilder) emEnv (mdef: ILMethodDef) //---------------------------------------------------------------------------- // buildMethodPass3 cenv //---------------------------------------------------------------------------- - + let rec buildMethodPass3 cenv tref modB (typB: TypeBuilder) emEnv (mdef: ILMethodDef) = let mref = mkRefToILMethod (tref, mdef) - let isPInvoke = - match mdef.Body with + let isPInvoke = + match mdef.Body.Contents with | MethodBody.PInvoke _p -> true | _ -> false match mdef.Name with @@ -1578,7 +1581,7 @@ let rec buildMethodPass3 cenv tref modB (typB: TypeBuilder) emEnv (mdef: ILMetho let consB = envGetConsB emEnv mref // Constructors can not have generic parameters assert isNil mdef.GenericParams - // Value parameters + // Value parameters let defineParameter (i, attr, name) = consB.DefineParameterAndLog (i+1, attr, name) mdef.Parameters |> List.iteri (emitParameter cenv emEnv defineParameter) // Body @@ -1586,52 +1589,52 @@ let rec buildMethodPass3 cenv tref modB (typB: TypeBuilder) emEnv (mdef: ILMetho emitCustomAttrs cenv emEnv (wrapCustomAttr consB.SetCustomAttribute) mdef.CustomAttrs () | _name -> - + let methB = envGetMethB emEnv mref let emEnv = envPushTyvars emEnv (Array.append (getGenericArgumentsOfType (typB.AsType())) (getGenericArgumentsOfMethod methB)) if not (Array.isEmpty mdef.Return.CustomAttrs.AsArray) then - let retB = methB.DefineParameterAndLog (0, System.Reflection.ParameterAttributes.Retval, null) + let retB = methB.DefineParameterAndLog (0, System.Reflection.ParameterAttributes.Retval, null) emitCustomAttrs cenv emEnv (wrapCustomAttr retB.SetCustomAttribute) mdef.Return.CustomAttrs // Value parameters - let defineParameter (i, attr, name) = methB.DefineParameterAndLog (i+1, attr, name) + let defineParameter (i, attr, name) = methB.DefineParameterAndLog (i+1, attr, name) mdef.Parameters |> List.iteri (fun a b -> emitParameter cenv emEnv defineParameter a b) // Body - if not isPInvoke then + if not isPInvoke then emitMethodBody cenv modB emEnv methB.GetILGeneratorAndLog mdef.Name mdef.Body let emEnv = envPopTyvars emEnv // case fold later... emitCustomAttrs cenv emEnv methB.SetCustomAttributeAndLog mdef.CustomAttrs - + //---------------------------------------------------------------------------- // buildFieldPass2 //---------------------------------------------------------------------------- - + let buildFieldPass2 cenv tref (typB: TypeBuilder) emEnv (fdef: ILFieldDef) = - + let attrs = fdef.Attributes let fieldT = convType cenv emEnv fdef.FieldType - let fieldB = - match fdef.Data with + let fieldB = + match fdef.Data with | Some d -> typB.DefineInitializedData(fdef.Name, d, attrs) - | None -> + | None -> typB.DefineFieldAndLog (fdef.Name, fieldT, attrs) - + // set default value - let emEnv = + let emEnv = match fdef.LiteralValue with | None -> emEnv - | Some initial -> - if not fieldT.IsEnum + | Some initial -> + if not fieldT.IsEnum // it is ok to init fields with type = enum that are defined in other assemblies - || not fieldT.Assembly.IsDynamic - then + || not fieldT.Assembly.IsDynamic + then fieldB.SetConstant(initial.AsObject()) emEnv else - // if field type (enum) is defined in FSI dynamic assembly it is created as nested type + // if field type (enum) is defined in FSI dynamic assembly it is created as nested type // => its underlying type cannot be explicitly specified and will be inferred at the very moment of first field definition // => here we cannot detect if underlying type is already set so as a conservative solution we delay initialization of fields // to the end of pass2 (types and members are already created but method bodies are yet not emitted) @@ -1639,47 +1642,47 @@ let buildFieldPass2 cenv tref (typB: TypeBuilder) emEnv (fdef: ILFieldDef) = fdef.Offset |> Option.iter (fun offset -> fieldB.SetOffset offset) // custom attributes: done on pass 3 as they may reference attribute constructors generated on // pass 2. - let fref = mkILFieldRef (tref, fdef.Name, fdef.FieldType) + let fref = mkILFieldRef (tref, fdef.Name, fdef.FieldType) envBindFieldRef emEnv fref fieldB let buildFieldPass3 cenv tref (_typB: TypeBuilder) emEnv (fdef: ILFieldDef) = - let fref = mkILFieldRef (tref, fdef.Name, fdef.FieldType) + let fref = mkILFieldRef (tref, fdef.Name, fdef.FieldType) let fieldB = envGetFieldB emEnv fref emitCustomAttrs cenv emEnv (wrapCustomAttr fieldB.SetCustomAttribute) fdef.CustomAttrs //---------------------------------------------------------------------------- // buildPropertyPass2, 3 //---------------------------------------------------------------------------- - + let buildPropertyPass2 cenv tref (typB: TypeBuilder) emEnv (prop: ILPropertyDef) = let attrs = flagsIf prop.IsRTSpecialName PropertyAttributes.RTSpecialName ||| flagsIf prop.IsSpecialName PropertyAttributes.SpecialName let propB = typB.DefinePropertyAndLog (prop.Name, attrs, convType cenv emEnv prop.PropertyType, convTypesToArray cenv emEnv prop.Args) - + prop.SetMethod |> Option.iter (fun mref -> propB.SetSetMethod(envGetMethB emEnv mref)) prop.GetMethod |> Option.iter (fun mref -> propB.SetGetMethod(envGetMethB emEnv mref)) // set default value prop.Init |> Option.iter (fun initial -> propB.SetConstant(initial.AsObject())) // custom attributes - let pref = ILPropertyRef.Create (tref, prop.Name) + let pref = ILPropertyRef.Create (tref, prop.Name) envBindPropRef emEnv pref propB -let buildPropertyPass3 cenv tref (_typB: TypeBuilder) emEnv (prop: ILPropertyDef) = - let pref = ILPropertyRef.Create (tref, prop.Name) +let buildPropertyPass3 cenv tref (_typB: TypeBuilder) emEnv (prop: ILPropertyDef) = + let pref = ILPropertyRef.Create (tref, prop.Name) let propB = envGetPropB emEnv pref emitCustomAttrs cenv emEnv (wrapCustomAttr propB.SetCustomAttribute) prop.CustomAttrs //---------------------------------------------------------------------------- // buildEventPass3 //---------------------------------------------------------------------------- + - -let buildEventPass3 cenv (typB: TypeBuilder) emEnv (eventDef: ILEventDef) = +let buildEventPass3 cenv (typB: TypeBuilder) emEnv (eventDef: ILEventDef) = let attrs = flagsIf eventDef.IsSpecialName EventAttributes.SpecialName ||| - flagsIf eventDef.IsRTSpecialName EventAttributes.RTSpecialName + flagsIf eventDef.IsRTSpecialName EventAttributes.RTSpecialName assert eventDef.EventType.IsSome - let eventB = typB.DefineEventAndLog (eventDef.Name, attrs, convType cenv emEnv eventDef.EventType.Value) + let eventB = typB.DefineEventAndLog (eventDef.Name, attrs, convType cenv emEnv eventDef.EventType.Value) eventDef.AddMethod |> (fun mref -> eventB.SetAddOnMethod(envGetMethB emEnv mref)) eventDef.RemoveMethod |> (fun mref -> eventB.SetRemoveOnMethod(envGetMethB emEnv mref)) @@ -1690,11 +1693,11 @@ let buildEventPass3 cenv (typB: TypeBuilder) emEnv (eventDef: ILEventDef) = //---------------------------------------------------------------------------- // buildMethodImplsPass3 //---------------------------------------------------------------------------- - + let buildMethodImplsPass3 cenv _tref (typB: TypeBuilder) emEnv (mimpl: IL.ILMethodImplDef) = let bodyMethInfo = convMethodRef cenv emEnv (typB.AsType()) mimpl.OverrideBy.MethodRef // doc: must be MethodBuilder let (OverridesSpec (mref, dtyp)) = mimpl.Overrides - let declMethTI = convType cenv emEnv dtyp + let declMethTI = convType cenv emEnv dtyp let declMethInfo = convMethodRef cenv emEnv declMethTI mref typB.DefineMethodOverride(bodyMethInfo, declMethInfo) emEnv @@ -1703,8 +1706,8 @@ let buildMethodImplsPass3 cenv _tref (typB: TypeBuilder) emEnv (mimpl: IL.ILMeth // typeAttributesOf* //---------------------------------------------------------------------------- -let typeAttributesOfTypeDefKind x = - match x with +let typeAttributesOfTypeDefKind x = + match x with // required for a TypeBuilder | ILTypeDefKind.Class -> TypeAttributes.Class | ILTypeDefKind.ValueType -> TypeAttributes.Class @@ -1713,10 +1716,10 @@ let typeAttributesOfTypeDefKind x = | ILTypeDefKind.Delegate -> TypeAttributes.Class let typeAttributesOfTypeAccess x = - match x with + match x with | ILTypeDefAccess.Public -> TypeAttributes.Public | ILTypeDefAccess.Private -> TypeAttributes.NotPublic - | ILTypeDefAccess.Nested macc -> + | ILTypeDefAccess.Nested macc -> match macc with | ILMemberAccess.Assembly -> TypeAttributes.NestedAssembly | ILMemberAccess.CompilerControlled -> failwith "Nested compiler controlled." @@ -1725,29 +1728,29 @@ let typeAttributesOfTypeAccess x = | ILMemberAccess.Family -> TypeAttributes.NestedFamily | ILMemberAccess.Private -> TypeAttributes.NestedPrivate | ILMemberAccess.Public -> TypeAttributes.NestedPublic - -let typeAttributesOfTypeEncoding x = - match x with - | ILDefaultPInvokeEncoding.Ansi -> TypeAttributes.AnsiClass + +let typeAttributesOfTypeEncoding x = + match x with + | ILDefaultPInvokeEncoding.Ansi -> TypeAttributes.AnsiClass | ILDefaultPInvokeEncoding.Auto -> TypeAttributes.AutoClass | ILDefaultPInvokeEncoding.Unicode -> TypeAttributes.UnicodeClass -let typeAttributesOfTypeLayout cenv emEnv x = - let attr x p = +let typeAttributesOfTypeLayout cenv emEnv x = + let attr x p = if p.Size =None && p.Pack = None then None - else + else match cenv.tryFindSysILTypeRef "System.Runtime.InteropServices.StructLayoutAttribute", cenv.tryFindSysILTypeRef "System.Runtime.InteropServices.LayoutKind" with | Some tref1, Some tref2 -> Some(convCustomAttr cenv emEnv - (IL.mkILCustomAttribute - (tref1, - [mkILNonGenericValueTy tref2 ], - [ ILAttribElem.Int32 x ], + (IL.mkILCustomAttribute cenv.ilg + (tref1, + [mkILNonGenericValueTy tref2 ], + [ ILAttribElem.Int32 x ], (p.Pack |> Option.toList |> List.map (fun x -> ("Pack", cenv.ilg.typ_Int32, false, ILAttribElem.Int32 (int32 x)))) @ - (p.Size |> Option.toList |> List.map (fun x -> ("Size", cenv.ilg.typ_Int32, false, ILAttribElem.Int32 x)))))) + (p.Size |> Option.toList |> List.map (fun x -> ("Size", cenv.ilg.typ_Int32, false, ILAttribElem.Int32 x)))))) | _ -> None - match x with + match x with | ILTypeDefLayout.Auto -> None | ILTypeDefLayout.Explicit p -> (attr 0x02 p) | ILTypeDefLayout.Sequential p -> (attr 0x00 p) @@ -1756,14 +1759,14 @@ let typeAttributesOfTypeLayout cenv emEnv x = //---------------------------------------------------------------------------- // buildTypeDefPass1 cenv //---------------------------------------------------------------------------- - + let rec buildTypeDefPass1 cenv emEnv (modB: ModuleBuilder) rootTypeBuilder nesting (tdef: ILTypeDef) = - // -IsComInterop: bool; (* Class or interface generated for COM interop *) + // -IsComInterop: bool; (* Class or interface generated for COM interop *) // -SecurityDecls: Permissions // -InitSemantics: ILTypeInit // TypeAttributes let cattrsLayout = typeAttributesOfTypeLayout cenv emEnv tdef.Layout - + let attrsType = tdef.Attributes // TypeBuilder from TypeAttributes. @@ -1772,16 +1775,16 @@ let rec buildTypeDefPass1 cenv emEnv (modB: ModuleBuilder) rootTypeBuilder nesti buildGenParamsPass1 emEnv typB.DefineGenericParametersAndLog tdef.GenericParams // bind tref -> (typT, typB) - let tref = mkRefForNestedILTypeDef ILScopeRef.Local (nesting, tdef) + let tref = mkRefForNestedILTypeDef ILScopeRef.Local (nesting, tdef) let typT = // Q: would it be ok to use typB :> Type ? // Maybe not, recall TypeBuilder maybe subtype of Type, but it is not THE Type. let nameInModule = tref.QualifiedName modB.GetTypeAndLog (nameInModule, false, false) - + let emEnv = envBindTypeRef emEnv tref (typT, typB, tdef) // recurse on nested types - let nesting = nesting @ [tdef] + let nesting = nesting @ [tdef] let buildNestedType emEnv tdef = buildTypeTypeDef cenv emEnv modB typB nesting tdef let emEnv = List.fold buildNestedType emEnv tdef.NestedTypes.AsList emEnv @@ -1792,35 +1795,35 @@ and buildTypeTypeDef cenv emEnv modB (typB: TypeBuilder) nesting tdef = //---------------------------------------------------------------------------- // buildTypeDefPass1b //---------------------------------------------------------------------------- - -let rec buildTypeDefPass1b cenv nesting emEnv (tdef: ILTypeDef) = + +let rec buildTypeDefPass1b cenv nesting emEnv (tdef: ILTypeDef) = let tref = mkRefForNestedILTypeDef ILScopeRef.Local (nesting, tdef) let typB = envGetTypB emEnv tref let genArgs = getGenericArgumentsOfType (typB.AsType()) let emEnv = envPushTyvars emEnv genArgs - // Parent may reference types being defined, so has to come after it's Pass1 creation + // Parent may reference types being defined, so has to come after it's Pass1 creation tdef.Extends |> Option.iter (fun ty -> typB.SetParentAndLog (convType cenv emEnv ty)) - // build constraints on ILGenericParameterDefs. Constraints may reference types being defined, + // build constraints on ILGenericParameterDefs. Constraints may reference types being defined, // so have to come after all types are created buildGenParamsPass1b cenv emEnv genArgs tdef.GenericParams - let emEnv = envPopTyvars emEnv - let nesting = nesting @ [tdef] + let emEnv = envPopTyvars emEnv + let nesting = nesting @ [tdef] List.iter (buildTypeDefPass1b cenv nesting emEnv) tdef.NestedTypes.AsList //---------------------------------------------------------------------------- // buildTypeDefPass2 //---------------------------------------------------------------------------- -let rec buildTypeDefPass2 cenv nesting emEnv (tdef: ILTypeDef) = +let rec buildTypeDefPass2 cenv nesting emEnv (tdef: ILTypeDef) = let tref = mkRefForNestedILTypeDef ILScopeRef.Local (nesting, tdef) let typB = envGetTypB emEnv tref let emEnv = envPushTyvars emEnv (getGenericArgumentsOfType (typB.AsType())) // add interface impls tdef.Implements |> convTypes cenv emEnv |> List.iter (fun implT -> typB.AddInterfaceImplementationAndLog implT) // add methods, properties - let emEnv = Array.fold (buildMethodPass2 cenv tref typB) emEnv tdef.Methods.AsArray - let emEnv = List.fold (buildFieldPass2 cenv tref typB) emEnv tdef.Fields.AsList - let emEnv = List.fold (buildPropertyPass2 cenv tref typB) emEnv tdef.Properties.AsList + let emEnv = Array.fold (buildMethodPass2 cenv tref typB) emEnv tdef.Methods.AsArray + let emEnv = List.fold (buildFieldPass2 cenv tref typB) emEnv tdef.Fields.AsList + let emEnv = List.fold (buildPropertyPass2 cenv tref typB) emEnv tdef.Properties.AsList let emEnv = envPopTyvars emEnv // nested types let nesting = nesting @ [tdef] @@ -1830,7 +1833,7 @@ let rec buildTypeDefPass2 cenv nesting emEnv (tdef: ILTypeDef) = //---------------------------------------------------------------------------- // buildTypeDefPass3 cenv //---------------------------------------------------------------------------- - + let rec buildTypeDefPass3 cenv nesting modB emEnv (tdef: ILTypeDef) = let tref = mkRefForNestedILTypeDef ILScopeRef.Local (nesting, tdef) let typB = envGetTypB emEnv tref @@ -1841,7 +1844,7 @@ let rec buildTypeDefPass3 cenv nesting modB emEnv (tdef: ILTypeDef) = tdef.Events.AsList |> List.iter (buildEventPass3 cenv typB emEnv) tdef.Fields.AsList |> List.iter (buildFieldPass3 cenv tref typB emEnv) let emEnv = List.fold (buildMethodImplsPass3 cenv tref typB) emEnv tdef.MethodImpls.AsList - tdef.CustomAttrs |> emitCustomAttrs cenv emEnv typB.SetCustomAttributeAndLog + tdef.CustomAttrs |> emitCustomAttrs cenv emEnv typB.SetCustomAttributeAndLog // custom attributes let emEnv = envPopTyvars emEnv // nested types @@ -1853,7 +1856,7 @@ let rec buildTypeDefPass3 cenv nesting modB emEnv (tdef: ILTypeDef) = // buildTypeDefPass4 - Create the Types // // The code in this phase is fragile. -// +// // THe background is that System.Reflection.Emit implementations can be finnickity about the // order that CreateType calls are made when types refer to each other. Some of these restrictions // are not well documented, or are related to historical bugs where the F# emit code worked around the @@ -1862,34 +1865,34 @@ let rec buildTypeDefPass3 cenv nesting modB emEnv (tdef: ILTypeDef) = // // Here are some known cases: // -// MSDN says: If this type is a nested type, the CreateType method must +// MSDN says: If this type is a nested type, the CreateType method must // be called on the enclosing type before it is called on the nested type. // -// MSDN says: If the current type derives from an incomplete type or implements -// incomplete interfaces, call the CreateType method on the parent +// MSDN says: If the current type derives from an incomplete type or implements +// incomplete interfaces, call the CreateType method on the parent // type and the interface types before calling it on the current type. // -// MSDN says: If the enclosing type contains a field that is a value type -// defined as a nested type (for example, a field that is an -// enumeration defined as a nested type), calling the CreateType method -// on the enclosing type will generate a AppDomain.TypeResolve event. -// This is because the loader cannot determine the size of the enclosing -// type until the nested type has been completed. The caller should define -// a handler for the TypeResolve event to complete the definition of the -// nested type by calling CreateType on the TypeBuilder object that represents -// the nested type. The code example for this topic shows how to define such +// MSDN says: If the enclosing type contains a field that is a value type +// defined as a nested type (for example, a field that is an +// enumeration defined as a nested type), calling the CreateType method +// on the enclosing type will generate a AppDomain.TypeResolve event. +// This is because the loader cannot determine the size of the enclosing +// type until the nested type has been completed. The caller should define +// a handler for the TypeResolve event to complete the definition of the +// nested type by calling CreateType on the TypeBuilder object that represents +// the nested type. The code example for this topic shows how to define such // an event handler. // -// +// // There is also a case where generic parameter constraints were being checked before -// a generic method was called. This forced the loading of the types involved in the +// a generic method was called. This forced the loading of the types involved in the // constraints very early. // //---------------------------------------------------------------------------- -let getEnclosingTypeRefs (tref: ILTypeRef) = - match tref.Enclosing with +let getEnclosingTypeRefs (tref: ILTypeRef) = + match tref.Enclosing with | [] -> [] | h :: t -> List.scan (fun tr nm -> mkILTyRefInTyRef (tr, nm)) (mkILTyRef(tref.Scope, h)) t @@ -1897,38 +1900,38 @@ let getEnclosingTypeRefs (tref: ILTypeRef) = type CollectTypes = ValueTypesOnly | All // Find all constituent type references -let rec getTypeRefsInType (allTypes: CollectTypes) ty acc = +let rec getTypeRefsInType (allTypes: CollectTypes) ty acc = match ty with - | ILType.Void + | ILType.Void | ILType.TypeVar _ -> acc - | ILType.Ptr eltType | ILType.Byref eltType -> + | ILType.Ptr eltType | ILType.Byref eltType -> getTypeRefsInType allTypes eltType acc - | ILType.Array (_, eltType) -> - match allTypes with - | CollectTypes.ValueTypesOnly -> acc + | ILType.Array (_, eltType) -> + match allTypes with + | CollectTypes.ValueTypesOnly -> acc | CollectTypes.All -> getTypeRefsInType allTypes eltType acc - | ILType.Value tspec -> + | ILType.Value tspec -> // We use CollectTypes.All because the .NET type loader appears to always eagerly require all types // referred to in an instantiation of a generic value type tspec.TypeRef :: List.foldBack (getTypeRefsInType CollectTypes.All) tspec.GenericArgs acc - | ILType.Boxed tspec -> - match allTypes with - | CollectTypes.ValueTypesOnly -> acc + | ILType.Boxed tspec -> + match allTypes with + | CollectTypes.ValueTypesOnly -> acc | CollectTypes.All -> tspec.TypeRef :: List.foldBack (getTypeRefsInType allTypes) tspec.GenericArgs acc | ILType.FunctionPointer _callsig -> failwith "getTypeRefsInType: fptr" | ILType.Modified _ -> failwith "getTypeRefsInType: modified" let verbose2 = false -let createTypeRef (visited: Dictionary<_, _>, created: Dictionary<_, _>) emEnv tref = +let createTypeRef (visited: Dictionary<_, _>, created: Dictionary<_, _>) emEnv tref = let rec traverseTypeDef (tref: ILTypeRef) (tdef: ILTypeDef) = if verbose2 then dprintf "buildTypeDefPass4: Creating Enclosing Types of %s\n" tdef.Name for enc in getEnclosingTypeRefs tref do traverseTypeRef enc - - // WORKAROUND (ProductStudio FSharp 1.0 bug 615): the constraints on generic method parameters - // are resolved overly eagerly by reflection emit's CreateType. + + // WORKAROUND (ProductStudio FSharp 1.0 bug 615): the constraints on generic method parameters + // are resolved overly eagerly by reflection emit's CreateType. if verbose2 then dprintf "buildTypeDefPass4: Doing type typar constraints of %s\n" tdef.Name for gp in tdef.GenericParams do for cx in gp.Constraints do @@ -1936,34 +1939,34 @@ let createTypeRef (visited: Dictionary<_, _>, created: Dictionary<_, _>) emEnv t if verbose2 then dprintf "buildTypeDefPass4: Doing method constraints of %s\n" tdef.Name for md in tdef.Methods.AsArray do - for gp in md.GenericParams do - for cx in gp.Constraints do + for gp in md.GenericParams do + for cx in gp.Constraints do traverseType CollectTypes.All cx - + // We absolutely need the exact parent type... if verbose2 then dprintf "buildTypeDefPass4: Creating Super Class Chain of %s\n" tdef.Name tdef.Extends |> Option.iter (traverseType CollectTypes.All) - + // We absolutely need the exact interface types... if verbose2 then dprintf "buildTypeDefPass4: Creating Interface Chain of %s\n" tdef.Name tdef.Implements |> List.iter (traverseType CollectTypes.All) - + if verbose2 then dprintf "buildTypeDefPass4: Do value types in fields of %s\n" tdef.Name tdef.Fields.AsList |> List.iter (fun fd -> traverseType CollectTypes.ValueTypesOnly fd.FieldType) - - if verbose2 then dprintf "buildTypeDefPass4: Done with dependencies of %s\n" tdef.Name - - and traverseType allTypes ty = + + if verbose2 then dprintf "buildTypeDefPass4: Done with dependencies of %s\n" tdef.Name + + and traverseType allTypes ty = getTypeRefsInType allTypes ty [] |> List.filter (isEmittedTypeRef emEnv) - |> List.iter traverseTypeRef + |> List.iter traverseTypeRef - and traverseTypeRef tref = + and traverseTypeRef tref = let typB = envGetTypB emEnv tref if verbose2 then dprintf "- considering reference to type %s\n" typB.FullName // Re-run traverseTypeDef if we've never visited the type. - if not (visited.ContainsKey tref) then + if not (visited.ContainsKey tref) then visited.[tref] <- true let tdef = envGetTypeDef emEnv tref if verbose2 then dprintf "- traversing type %s\n" typB.FullName @@ -1971,13 +1974,13 @@ let createTypeRef (visited: Dictionary<_, _>, created: Dictionary<_, _>) emEnv t // we require the type r.Name, though with "nestingToProbe" being the enclosing types of the // type being defined. let typeCreationHandler = - let nestingToProbe = tref.Enclosing + let nestingToProbe = tref.Enclosing ResolveEventHandler( fun o r -> let typeName = r.Name let typeRef = ILTypeRef.Create(ILScopeRef.Local, nestingToProbe, typeName) match emEnv.emTypMap.TryFind typeRef with - | Some(_, tb, _, _) -> + | Some(_, tb, _, _) -> if not (tb.IsCreated()) then tb.CreateTypeAndLog () |> ignore tb.Assembly @@ -1993,19 +1996,19 @@ let createTypeRef (visited: Dictionary<_, _>, created: Dictionary<_, _>) emEnv t // At this point, we've done everything we can to prepare the type for loading by eagerly forcing the // load of other types. Everything else is up to the implementation of System.Reflection.Emit. - if not (created.ContainsKey tref) then + if not (created.ContainsKey tref) then created.[tref] <- true if verbose2 then dprintf "- creating type %s\n" typB.FullName typB.CreateTypeAndLog () |> ignore - - traverseTypeRef tref + + traverseTypeRef tref let rec buildTypeDefPass4 (visited, created) nesting emEnv (tdef: ILTypeDef) = if verbose2 then dprintf "buildTypeDefPass4 %s\n" tdef.Name let tref = mkRefForNestedILTypeDef ILScopeRef.Local (nesting, tdef) createTypeRef (visited, created) emEnv tref - - + + // nested types let nesting = nesting @ [tdef] tdef.NestedTypes |> Seq.iter (buildTypeDefPass4 (visited, created) nesting emEnv) @@ -2013,7 +2016,7 @@ let rec buildTypeDefPass4 (visited, created) nesting emEnv (tdef: ILTypeDef) = //---------------------------------------------------------------------------- // buildModuleType //---------------------------------------------------------------------------- - + let buildModuleTypePass1 cenv (modB: ModuleBuilder) emEnv (tdef: ILTypeDef) = buildTypeDefPass1 cenv emEnv modB modB.DefineTypeAndLog [] tdef @@ -2025,37 +2028,37 @@ let buildModuleTypePass4 visited emEnv tdef = buildTypeDefPass4 visited [] emEnv //---------------------------------------------------------------------------- // buildModuleFragment - only the types the fragment get written //---------------------------------------------------------------------------- - + let buildModuleFragment cenv emEnv (asmB: AssemblyBuilder) (modB: ModuleBuilder) (m: ILModuleDef) = let tdefs = m.TypeDefs.AsList - let emEnv = (emEnv, tdefs) ||> List.fold (buildModuleTypePass1 cenv modB) - tdefs |> List.iter (buildModuleTypePass1b cenv emEnv) - let emEnv = (emEnv, tdefs) ||> List.fold (buildModuleTypePass2 cenv) - + let emEnv = (emEnv, tdefs) ||> List.fold (buildModuleTypePass1 cenv modB) + tdefs |> List.iter (buildModuleTypePass1b cenv emEnv) + let emEnv = (emEnv, tdefs) ||> List.fold (buildModuleTypePass2 cenv) + for delayedFieldInit in emEnv.delayedFieldInits do delayedFieldInit() let emEnv = { emEnv with delayedFieldInits = [] } - let emEnv = (emEnv, tdefs) ||> List.fold (buildModuleTypePass3 cenv modB) - let visited = new Dictionary<_, _>(10) - let created = new Dictionary<_, _>(10) - tdefs |> List.iter (buildModuleTypePass4 (visited, created) emEnv) + let emEnv = (emEnv, tdefs) ||> List.fold (buildModuleTypePass3 cenv modB) + let visited = new Dictionary<_, _>(10) + let created = new Dictionary<_, _>(10) + tdefs |> List.iter (buildModuleTypePass4 (visited, created) emEnv) let emEnv = Seq.fold envUpdateCreatedTypeRef emEnv created.Keys // update typT with the created typT emitCustomAttrs cenv emEnv modB.SetCustomAttributeAndLog m.CustomAttrs #if FX_RESHAPED_REFEMIT ignore asmB #else - m.Resources.AsList |> List.iter (fun r -> - let attribs = (match r.Access with ILResourceAccess.Public -> ResourceAttributes.Public | ILResourceAccess.Private -> ResourceAttributes.Private) - match r.Location with - | ILResourceLocation.Local bytes -> + m.Resources.AsList |> List.iter (fun r -> + let attribs = (match r.Access with ILResourceAccess.Public -> ResourceAttributes.Public | ILResourceAccess.Private -> ResourceAttributes.Private) + match r.Location with + | ILResourceLocation.Local bytes -> use stream = bytes.GetByteMemory().AsStream() modB.DefineManifestResourceAndLog (r.Name, stream, attribs) - | ILResourceLocation.File (mr, _) -> + | ILResourceLocation.File (mr, _) -> asmB.AddResourceFileAndLog (r.Name, mr.Name, attribs) - | ILResourceLocation.Assembly _ -> + | ILResourceLocation.Assembly _ -> failwith "references to resources other assemblies may not be emitted using System.Reflection") #endif emEnv @@ -2070,7 +2073,7 @@ let defineDynamicAssemblyAndLog (asmName, flags, asmDir: string) = let currentDom = System.AppDomain.CurrentDomain let asmB = currentDom.DefineDynamicAssembly(asmName, flags, asmDir) #endif - if logRefEmitCalls then + if logRefEmitCalls then printfn "open System" printfn "open System.Reflection" printfn "open System.Reflection.Emit" @@ -2082,15 +2085,15 @@ let mkDynamicAssemblyAndModule (assemblyName, optimize, debugInfo: bool, collect let asmDir = "." let asmName = new AssemblyName() asmName.Name <- assemblyName - let asmAccess = - if collectible then AssemblyBuilderAccess.RunAndCollect + let asmAccess = + if collectible then AssemblyBuilderAccess.RunAndCollect #if FX_RESHAPED_REFEMIT else AssemblyBuilderAccess.Run #else else AssemblyBuilderAccess.RunAndSave #endif - let asmB = defineDynamicAssemblyAndLog (asmName, asmAccess, asmDir) - if not optimize then + let asmB = defineDynamicAssemblyAndLog (asmName, asmAccess, asmDir) + if not optimize then let daType = typeof let daCtor = daType.GetConstructor [| typeof |] let daBuilder = new CustomAttributeBuilder(daCtor, [| System.Diagnostics.DebuggableAttribute.DebuggingModes.DisableOptimizations ||| System.Diagnostics.DebuggableAttribute.DebuggingModes.Default |]) @@ -2103,20 +2106,20 @@ let emitModuleFragment (ilg, emitTailcalls, emEnv, asmB: AssemblyBuilder, modB: let cenv = { ilg = ilg ; emitTailcalls=emitTailcalls; generatePdb = debugInfo; resolveAssemblyRef=resolveAssemblyRef; tryFindSysILTypeRef=tryFindSysILTypeRef } let emEnv = buildModuleFragment cenv emEnv asmB modB modul - match modul.Manifest with + match modul.Manifest with | None -> () - | Some mani -> + | Some mani -> // REVIEW: remainder of manifest emitCustomAttrs cenv emEnv asmB.SetCustomAttributeAndLog mani.CustomAttrs // invoke entry point methods let execEntryPtFun ((typB: TypeBuilder), methodName) () = - try + try ignore (typB.InvokeMemberAndLog (methodName, BindingFlags.InvokeMethod ||| BindingFlags.Public ||| BindingFlags.Static, [| |])) None - with + with | :? System.Reflection.TargetInvocationException as e -> Some e.InnerException - + let emEnv, entryPts = envPopEntryPts emEnv let execs = List.map execEntryPtFun entryPts emEnv, execs @@ -2129,7 +2132,7 @@ let emitModuleFragment (ilg, emitTailcalls, emEnv, asmB: AssemblyBuilder, modB: // TypeBuilder is a subtype of Type. // However, casting TypeBuilder to Type is not the same as getting Type proper. // The builder version does not implement all methods on the parent. -// +// // The emEnv stores (typT: Type) for each tref. // Once the emitted type is created this typT is updated to ensure it is the Type proper. // So Type lookup will return the proper Type not TypeBuilder. diff --git a/src/fsharp/absil/ilreflect.fsi b/src/fsharp/absil/ilreflect.fsi index f2aa21b1f40..403d4479b7b 100644 --- a/src/fsharp/absil/ilreflect.fsi +++ b/src/fsharp/absil/ilreflect.fsi @@ -1,6 +1,10 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -/// Write Abstract IL structures at runtime using Reflection.Emit +//---------------------------------------------------------------------------- +// Write Abstract IL structures at runtime using Reflection.Emit +//---------------------------------------------------------------------------- + + module internal FSharp.Compiler.AbstractIL.ILRuntimeWriter open System.Reflection diff --git a/src/fsharp/absil/ilsign.fs b/src/fsharp/absil/ilsign.fs index 770663809a0..617a102a155 100644 --- a/src/fsharp/absil/ilsign.fs +++ b/src/fsharp/absil/ilsign.fs @@ -1,21 +1,21 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.AbstractIL.StrongNameSign +module internal FSharp.Compiler.AbstractIL.Internal.StrongNameSign #nowarn "9" - open System - open System.IO - open System.Collections.Immutable - open System.Reflection.PortableExecutable - open System.Security.Cryptography - open System.Reflection - open System.Runtime.CompilerServices - open System.Runtime.InteropServices +open System +open System.IO +open System.Collections.Immutable +open System.Reflection +open System.Reflection.PortableExecutable +open System.Security.Cryptography +open System.Runtime.InteropServices +open System.Runtime.CompilerServices - open Internal.Utilities - open Internal.Utilities.Library - open FSharp.Compiler.IO + +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Internal.Utils type KeyType = | Public @@ -245,7 +245,7 @@ module internal FSharp.Compiler.AbstractIL.StrongNameSign patchSignature stream peReader signature let signFile filename keyBlob = - use fs = FileSystem.OpenFileForWriteShim(filename, FileMode.Open, FileAccess.ReadWrite) + use fs = File.Open(filename, FileMode.Open, FileAccess.ReadWrite) signStream fs keyBlob let signatureSize (pk:byte[]) = @@ -272,9 +272,9 @@ module internal FSharp.Compiler.AbstractIL.StrongNameSign type pubkey = byte[] type pubkeyOptions = byte[] * bool - let signerOpenPublicKeyFile filePath = FileSystem.OpenFileForReadShim(filePath).ReadAllBytes() + let signerOpenPublicKeyFile filePath = FileSystem.ReadAllBytesShim filePath - let signerOpenKeyPairFile filePath = FileSystem.OpenFileForReadShim(filePath).ReadAllBytes() + let signerOpenKeyPairFile filePath = FileSystem.ReadAllBytesShim filePath let signerGetPublicKeyForKeyPair (kp: keyPair) : pubkey = getPublicKeyForKeyPair kp @@ -400,9 +400,9 @@ module internal FSharp.Compiler.AbstractIL.StrongNameSign ([] _metaHost : ICLRMetaHost byref)) : unit = failwith "CreateInterface" - let legacySignerOpenPublicKeyFile filePath = FileSystem.OpenFileForReadShim(filePath).ReadAllBytes() + let legacySignerOpenPublicKeyFile filePath = FileSystem.ReadAllBytesShim filePath - let legacySignerOpenKeyPairFile filePath = FileSystem.OpenFileForReadShim(filePath).ReadAllBytes() + let legacySignerOpenKeyPairFile filePath = FileSystem.ReadAllBytesShim filePath let mutable iclrsn: ICLRStrongName option = None let getICLRStrongName () = @@ -492,12 +492,10 @@ module internal FSharp.Compiler.AbstractIL.StrongNameSign iclrSN.StrongNameSignatureVerificationEx(fileName, true, &ok) |> ignore #endif - let failWithContainerSigningUnsupportedOnThisPlatform() = failwith (FSComp.SR.containerSigningUnsupportedOnThisPlatform() |> snd) - //--------------------------------------------------------------------- // Strong name signing //--------------------------------------------------------------------- - type ILStrongNameSigner = + type ILStrongNameSigner = | PublicKeySigner of pubkey | PublicKeyOptionsSigner of pubkeyOptions | KeyPair of keyPair @@ -518,10 +516,10 @@ module internal FSharp.Compiler.AbstractIL.StrongNameSign legacySignerCloseKeyContainer containerName #else ignore containerName - failWithContainerSigningUnsupportedOnThisPlatform() + failwith ("Key container signing is not supported on this platform") #endif member s.IsFullySigned = - match s with + match s with | PublicKeySigner _ -> false | PublicKeyOptionsSigner pko -> let _, usePublicSign = pko usePublicSign @@ -530,11 +528,11 @@ module internal FSharp.Compiler.AbstractIL.StrongNameSign #if !FX_NO_CORHOST_SIGNER true #else - failWithContainerSigningUnsupportedOnThisPlatform() + failwith ("Key container signing is not supported on this platform") #endif - member s.PublicKey = - match s with + member s.PublicKey = + match s with | PublicKeySigner pk -> pk | PublicKeyOptionsSigner pko -> let pk, _ = pko pk @@ -544,7 +542,7 @@ module internal FSharp.Compiler.AbstractIL.StrongNameSign legacySignerGetPublicKeyForKeyContainer containerName #else ignore containerName - failWithContainerSigningUnsupportedOnThisPlatform() + failwith ("Key container signing is not supported on this platform") #endif member s.SignatureSize = @@ -554,7 +552,7 @@ module internal FSharp.Compiler.AbstractIL.StrongNameSign with e -> failwith ("A call to StrongNameSignatureSize failed ("+e.Message+")") 0x80 - match s with + match s with | PublicKeySigner pk -> pkSignatureSize pk | PublicKeyOptionsSigner pko -> let pk, _ = pko pkSignatureSize pk @@ -564,11 +562,11 @@ module internal FSharp.Compiler.AbstractIL.StrongNameSign pkSignatureSize (legacySignerGetPublicKeyForKeyContainer containerName) #else ignore containerName - failWithContainerSigningUnsupportedOnThisPlatform() + failwith ("Key container signing is not supported on this platform") #endif - member s.SignFile file = - match s with + member s.SignFile file = + match s with | PublicKeySigner _ -> () | PublicKeyOptionsSigner _ -> () | KeyPair kp -> signerSignFileWithKeyPair file kp @@ -577,5 +575,5 @@ module internal FSharp.Compiler.AbstractIL.StrongNameSign legacySignerSignFileWithKeyContainer file containerName #else ignore containerName - failWithContainerSigningUnsupportedOnThisPlatform() + failwith ("Key container signing is not supported on this platform") #endif diff --git a/src/fsharp/absil/ilsign.fsi b/src/fsharp/absil/ilsign.fsi index 23a82daffca..ee3043a4f55 100644 --- a/src/fsharp/absil/ilsign.fsi +++ b/src/fsharp/absil/ilsign.fsi @@ -5,7 +5,7 @@ /// Runtime, e.g. between the SSCLI, Mono and the Microsoft CLR. /// -module internal FSharp.Compiler.AbstractIL.StrongNameSign +module internal FSharp.Compiler.AbstractIL.Internal.StrongNameSign //--------------------------------------------------------------------- // Strong name signing diff --git a/src/fsharp/absil/ilsupp.fs b/src/fsharp/absil/ilsupp.fs index cf2658bd31a..44ceded2c30 100644 --- a/src/fsharp/absil/ilsupp.fs +++ b/src/fsharp/absil/ilsupp.fs @@ -1,22 +1,25 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.AbstractIL.Support +module internal FSharp.Compiler.AbstractIL.Internal.Support + +open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Internal.NativeRes +open FSharp.Compiler.AbstractIL.Internal.Utils +#if FX_NO_CORHOST_SIGNER +open FSharp.Compiler.AbstractIL.Internal.StrongNameSign +#endif open System open System.IO open System.Reflection + #if !FX_NO_SYMBOLSTORE open System.Diagnostics.SymbolStore #endif open System.Runtime.InteropServices open System.Runtime.CompilerServices -open Internal.Utilities -open Internal.Utilities.Library -open FSharp.Compiler.AbstractIL.NativeRes -open FSharp.Compiler.IO -#if FX_NO_CORHOST_SIGNER -open FSharp.Compiler.AbstractIL.StrongNameSign -#endif + let DateTime1970Jan01 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) (* ECMA Spec (Oct2002), Part II, 24.2.2 PE File Header. *) let absilWriteGetTimeStamp () = (DateTime.UtcNow - DateTime1970Jan01).TotalSeconds |> int @@ -91,7 +94,7 @@ type IMAGE_FILE_HEADER (m: int16, secs: int16, tds: int32, ptst: int32, nos: int with get() = 20 member x.toBytes () = - use buf = ByteBuffer.Create IMAGE_FILE_HEADER.Width + let buf = ByteBuffer.Create IMAGE_FILE_HEADER.Width buf.EmitUInt16 (uint16 machine) buf.EmitUInt16 (uint16 numberOfSections) buf.EmitInt32 timeDateStamp @@ -99,7 +102,7 @@ type IMAGE_FILE_HEADER (m: int16, secs: int16, tds: int32, ptst: int32, nos: int buf.EmitInt32 numberOfSymbols buf.EmitUInt16 (uint16 sizeOfOptionalHeader) buf.EmitUInt16 (uint16 characteristics) - buf.AsMemory().ToArray() + buf.Close() let bytesToIFH (buffer: byte[]) (offset: int) = if (buffer.Length - offset) < IMAGE_FILE_HEADER.Width then @@ -172,7 +175,7 @@ type IMAGE_SECTION_HEADER(n: int64, ai: int32, va: int32, srd: int32, prd: int32 with get() = 40 member x.toBytes () = - use buf = ByteBuffer.Create IMAGE_SECTION_HEADER.Width + let buf = ByteBuffer.Create IMAGE_SECTION_HEADER.Width buf.EmitInt64 name buf.EmitInt32 addressInfo buf.EmitInt32 virtualAddress @@ -183,7 +186,7 @@ type IMAGE_SECTION_HEADER(n: int64, ai: int32, va: int32, srd: int32, prd: int32 buf.EmitUInt16 (uint16 numberOfRelocations) buf.EmitUInt16 (uint16 numberOfLineNumbers) buf.EmitInt32 characteristics - buf.AsMemory().ToArray() + buf.Close() let bytesToISH (buffer: byte[]) (offset: int) = @@ -236,14 +239,14 @@ type IMAGE_SYMBOL(n: int64, v: int32, sn: int16, t: int16, sc: byte, nas: byte) with get() = 18 member x.toBytes() = - use buf = ByteBuffer.Create IMAGE_SYMBOL.Width + let buf = ByteBuffer.Create IMAGE_SYMBOL.Width buf.EmitInt64 name buf.EmitInt32 value buf.EmitUInt16 (uint16 sectionNumber) buf.EmitUInt16 (uint16 stype) buf.EmitByte storageClass buf.EmitByte numberOfAuxSymbols - buf.AsMemory().ToArray() + buf.Close() let bytesToIS (buffer: byte[]) (offset: int) = if (buffer.Length - offset) < IMAGE_SYMBOL.Width then @@ -280,11 +283,11 @@ type IMAGE_RELOCATION(va: int32, sti: int32, t: int16) = with get() = 10 member x.toBytes() = - use buf = ByteBuffer.Create IMAGE_RELOCATION.Width + let buf = ByteBuffer.Create IMAGE_RELOCATION.Width buf.EmitInt32 virtualAddress buf.EmitInt32 symbolTableIndex buf.EmitUInt16 (uint16 ty) - buf.AsMemory().ToArray() + buf.Close() let bytesToIR (buffer: byte[]) (offset: int) = if (buffer.Length - offset) < IMAGE_RELOCATION.Width then @@ -328,14 +331,14 @@ type IMAGE_RESOURCE_DIRECTORY(c: int32, tds: int32, mjv: int16, mnv: int16, nne: static member Width = 16 member x.toBytes () = - use buf = ByteBuffer.Create IMAGE_RESOURCE_DIRECTORY.Width + let buf = ByteBuffer.Create IMAGE_RESOURCE_DIRECTORY.Width buf.EmitInt32 characteristics buf.EmitInt32 timeDateStamp buf.EmitUInt16 (uint16 majorVersion) buf.EmitUInt16 (uint16 minorVersion) buf.EmitUInt16 (uint16 numberOfNamedEntries) buf.EmitUInt16 (uint16 numberOfIdEntries) - buf.AsMemory().ToArray() + buf.Close() let bytesToIRD (buffer: byte[]) (offset: int) = if (buffer.Length - offset) < IMAGE_RESOURCE_DIRECTORY.Width then @@ -368,10 +371,10 @@ type IMAGE_RESOURCE_DIRECTORY_ENTRY(n: int32, o: int32) = static member Width = 8 member x.toBytes () = - use buf = ByteBuffer.Create IMAGE_RESOURCE_DIRECTORY_ENTRY.Width + let buf = ByteBuffer.Create IMAGE_RESOURCE_DIRECTORY_ENTRY.Width buf.EmitInt32 name buf.EmitInt32 offset - buf.AsMemory().ToArray() + buf.Close() let bytesToIRDE (buffer: byte[]) (offset: int) = if (buffer.Length - offset) < IMAGE_RESOURCE_DIRECTORY_ENTRY.Width then @@ -401,7 +404,7 @@ type IMAGE_RESOURCE_DATA_ENTRY(o: int32, s: int32, c: int32, r: int32) = static member Width = 16 member x.toBytes() = - use buf = ByteBuffer.Create IMAGE_RESOURCE_DATA_ENTRY.Width + let buf = ByteBuffer.Create IMAGE_RESOURCE_DATA_ENTRY.Width buf.EmitInt32 offsetToData buf.EmitInt32 size buf.EmitInt32 codePage @@ -466,7 +469,7 @@ type ResFormatHeader() = static member Width = 32 member x.toBytes() = - use buf = ByteBuffer.Create ResFormatHeader.Width + let buf = ByteBuffer.Create ResFormatHeader.Width buf.EmitInt32 dwDataSize buf.EmitInt32 dwHeaderSize buf.EmitInt32 dwTypeID @@ -476,7 +479,7 @@ type ResFormatHeader() = buf.EmitUInt16 (uint16 wLangID) buf.EmitInt32 dwVersion buf.EmitInt32 dwCharacteristics - buf.AsMemory().ToArray() + buf.Close() type ResFormatNode(tid: int32, nid: int32, lid: int32, dataOffset: int32, pbLinkedResource: byte[]) = let mutable resHdr = ResFormatHeader() @@ -578,14 +581,14 @@ let linkNativeResources (unlinkedResources: byte[] list) (rva: int32) = let resources = unlinkedResources |> Seq.map (fun s -> new MemoryStream(s)) - |> Seq.map (fun s -> + |> Seq.map (fun s -> let res = CvtResFile.ReadResFile s s.Dispose() res) |> Seq.collect id // See MakeWin32ResourceList https://github.com/dotnet/roslyn/blob/f40b89234db51da1e1153c14af184e618504be41/src/Compilers/Core/Portable/Compilation/Compilation.cs - |> Seq.map (fun r -> - Win32Resource(data = r.data, codePage = 0u, languageId = uint32 r.LanguageId, + |> Seq.map (fun r -> + Win32Resource(data = r.data, codePage = 0u, languageId = uint32 r.LanguageId, id = int (int16 r.pstringName.Ordinal), name = r.pstringName.theString, typeId = int (int16 r.pstringType.Ordinal), typeName = r.pstringType.theString)) let bb = new System.Reflection.Metadata.BlobBuilder() @@ -881,7 +884,7 @@ let pdbInitialize (binaryName: string) (pdbName: string) = { symWriter = writer } -[] +[] do() let pdbCloseDocument(documentWriter: PdbDocumentWriter) = @@ -905,7 +908,7 @@ let pdbClose (writer: PdbWriter) dllFilename pdbFilename = let isLocked filename = try - use x = FileSystem.OpenFileForWriteShim(filename, FileMode.Open, FileAccess.ReadWrite, FileShare.None) + use x = File.Open (filename, FileMode.Open, FileAccess.ReadWrite, FileShare.None) false with | _ -> true @@ -931,7 +934,7 @@ let hashSizeOfMD5 = 16 // In this case, catch the failure, and not set a checksum. let internal setCheckSum (url: string, writer: ISymUnmanagedDocumentWriter) = try - use file = FileSystem.OpenFileForReadShim(url) + use file = FileSystem.FileStreamReadShim url use md5 = System.Security.Cryptography.MD5.Create() let checkSum = md5.ComputeHash file if (checkSum.Length = hashSizeOfMD5) then diff --git a/src/fsharp/absil/ilsupp.fsi b/src/fsharp/absil/ilsupp.fsi index 9f74036c44e..f3ba7fa5ce8 100644 --- a/src/fsharp/absil/ilsupp.fsi +++ b/src/fsharp/absil/ilsupp.fsi @@ -5,24 +5,12 @@ /// Runtime, e.g. between the SSCLI, Mono and the Microsoft CLR. /// /// The implementation of the functions can be found in ilsupp-*.fs -module internal FSharp.Compiler.AbstractIL.Support - -open System -open System.Runtime.InteropServices -#if !FX_NO_SYMBOLSTORE -open System.Diagnostics.SymbolStore -#endif - -open Internal.Utilities -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.IL +module internal FSharp.Compiler.AbstractIL.Internal.Support #if !FX_NO_PDB_WRITER type PdbWriter val pdbInitialize : string -> string -> PdbWriter #endif - #if !FX_NO_PDB_READER type PdbReader val pdbReadClose: PdbReader -> unit @@ -30,6 +18,18 @@ val pdbReadClose: PdbReader -> unit val absilWriteGetTimeStamp: unit -> int32 +open System +open System.Runtime.InteropServices +#if FX_NO_SYMBOLSTORE +#else +open System.Diagnostics.SymbolStore +#endif + +open Internal.Utilities +open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.IL + type IStream = System.Runtime.InteropServices.ComTypes.IStream /// Unmanaged resource file linker - for native resources (not managed ones). diff --git a/src/fsharp/absil/ilwrite.fs b/src/fsharp/absil/ilwrite.fs index 2abd677d08e..16bd6118d39 100644 --- a/src/fsharp/absil/ilwrite.fs +++ b/src/fsharp/absil/ilwrite.fs @@ -1,24 +1,22 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.AbstractIL.ILBinaryWriter +module internal FSharp.Compiler.AbstractIL.ILBinaryWriter -open System -open System.Collections.Generic +open System.Collections.Generic open System.IO open Internal.Utilities -open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.Diagnostics -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.BinaryConstants -open FSharp.Compiler.AbstractIL.Support -open Internal.Utilities.Library -open FSharp.Compiler.AbstractIL.StrongNameSign +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.BinaryConstants +open FSharp.Compiler.AbstractIL.Internal.Support +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Internal.Utils +open FSharp.Compiler.AbstractIL.Internal.StrongNameSign open FSharp.Compiler.AbstractIL.ILPdbWriter open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.IO -open FSharp.Compiler.Text.Range +open FSharp.Compiler.Range #if DEBUG let showEntryLookups = false @@ -29,13 +27,13 @@ let showEntryLookups = false // manipulations. //--------------------------------------------------------------------- -// Little-endian encoding of int32 +// Little-endian encoding of int32 let b0 n = byte (n &&& 0xFF) let b1 n = byte ((n >>> 8) &&& 0xFF) let b2 n = byte ((n >>> 16) &&& 0xFF) let b3 n = byte ((n >>> 24) &&& 0xFF) -// Little-endian encoding of int64 +// Little-endian encoding of int64 let dw7 n = byte ((n >>> 56) &&& 0xFFL) let dw6 n = byte ((n >>> 48) &&& 0xFFL) let dw5 n = byte ((n >>> 40) &&& 0xFFL) @@ -48,10 +46,7 @@ let dw0 n = byte (n &&& 0xFFL) let bitsOfSingle (x: float32) = System.BitConverter.ToInt32(System.BitConverter.GetBytes x, 0) let bitsOfDouble (x: float) = System.BitConverter.DoubleToInt64Bits x -/// Arbitrary value -[] -let EmitBytesViaBufferCapacity = 10 -let emitBytesViaBuffer f = use bb = ByteBuffer.Create EmitBytesViaBufferCapacity in f bb; bb.AsMemory().ToArray() +let emitBytesViaBuffer f = let bb = ByteBuffer.Create 10 in f bb; bb.Close() /// Alignment and padding let align alignment n = ((n + alignment - 1) / alignment) * alignment @@ -60,40 +55,40 @@ let align alignment n = ((n + alignment - 1) / alignment) * alignment // Concrete token representations etc. used in PE files //--------------------------------------------------------------------- -type ByteBuffer with +type ByteBuffer with - /// Z32 = compressed unsigned integer - static member Z32Size n = + /// Z32 = compressed unsigned integer + static member Z32Size n = if n <= 0x7F then 1 elif n <= 0x3FFF then 2 else 4 /// Emit int32 as compressed unsigned integer - member buf.EmitZ32 n = - if n >= 0 && n <= 0x7F then - buf.EmitIntAsByte n - elif n >= 0x80 && n <= 0x3FFF then + member buf.EmitZ32 n = + if n >= 0 && n <= 0x7F then + buf.EmitIntAsByte n + elif n >= 0x80 && n <= 0x3FFF then buf.EmitIntAsByte (0x80 ||| (n >>> 8)) - buf.EmitIntAsByte (n &&& 0xFF) - else + buf.EmitIntAsByte (n &&& 0xFF) + else buf.EmitIntAsByte (0xC0 ||| ((n >>> 24) &&& 0xFF)) buf.EmitIntAsByte ((n >>> 16) &&& 0xFF) buf.EmitIntAsByte ((n >>> 8) &&& 0xFF) buf.EmitIntAsByte (n &&& 0xFF) - member buf.EmitPadding n = + member buf.EmitPadding n = for i = 0 to n-1 do buf.EmitByte 0x0uy // Emit compressed untagged integer - member buf.EmitZUntaggedIndex big idx = + member buf.EmitZUntaggedIndex big idx = if big then buf.EmitInt32 idx else // Note, we can have idx=0x10000 generated for method table idx + 1 for just beyond last index of method table. // This indicates that a MethodList, FieldList, PropertyList or EventList has zero entries // For this case, the EmitInt32AsUInt16 writes a 0 (null) into the field. Binary readers respect this as an empty // list of methods/fields/properties/events. - if idx > 0x10000 then + if idx > 0x10000 then System.Diagnostics.Debug.Assert (false, "EmitZUntaggedIndex: too big for small address or simple index") buf.EmitInt32AsUInt16 idx @@ -107,16 +102,16 @@ let getUncodedToken (tab: TableName) idx = ((tab.Index <<< 24) ||| idx) // From ECMA for UserStrings: // This final byte holds the value 1 if and only if any UTF16 character within the string has any bit set in its top byte, or its low byte is any of the following: -// 0x01-0x08, 0x0E-0x1F, 0x27, 0x2D, +// 0x01-0x08, 0x0E-0x1F, 0x27, 0x2D, // 0x7F. Otherwise, it holds 0. The 1 signifies Unicode characters that require handling beyond that normally provided for 8-bit encoding sets. -// HOWEVER, there is a discrepancy here between the ECMA spec and the Microsoft C# implementation. +// HOWEVER, there is a discrepancy here between the ECMA spec and the Microsoft C# implementation. // The code below follows the latter. We've raised the issue with both teams. See Dev10 bug 850073 for details. -let markerForUnicodeBytes (b: byte[]) = +let markerForUnicodeBytes (b: byte[]) = let len = b.Length - let rec scan i = - i < len/2 && + let rec scan i = + i < len/2 && (let b1 = Bytes.get b (i*2) let b2 = Bytes.get b (i*2+1) (b2 <> 0) @@ -130,19 +125,19 @@ let markerForUnicodeBytes (b: byte[]) = marker -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // Fixups -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- /// Check that the data held at a fixup is some special magic value, as a sanity check /// to ensure the fixup is being placed at a ood location. -let checkFixup32 (data: byte[]) offset exp = +let checkFixup32 (data: byte[]) offset exp = if data.[offset + 3] <> b3 exp then failwith "fixup sanity check failed" if data.[offset + 2] <> b2 exp then failwith "fixup sanity check failed" if data.[offset + 1] <> b1 exp then failwith "fixup sanity check failed" if data.[offset] <> b0 exp then failwith "fixup sanity check failed" -let applyFixup32 (data: byte[]) offset v = +let applyFixup32 (data: byte[]) offset v = data.[offset] <- b0 v data.[offset+1] <- b1 v data.[offset+2] <- b2 v @@ -152,7 +147,7 @@ let applyFixup32 (data: byte[]) offset v = // TYPES FOR TABLES //--------------------------------------------------------------------- -module RowElementTags = +module RowElementTags = let [] UShort = 0 let [] ULong = 1 let [] Data = 2 @@ -217,7 +212,7 @@ module RowElementTags = let [] ResolutionScopeMax = 178 [] -type RowElement(tag: int32, idx: int32) = +type RowElement(tag: int32, idx: int32) = member x.Tag = tag member x.Val = idx @@ -226,15 +221,15 @@ type RowElement(tag: int32, idx: int32) = let UShort (x: uint16) = RowElement(RowElementTags.UShort, int32 x) let ULong (x: int32) = RowElement(RowElementTags.ULong, x) /// Index into cenv.data or cenv.resources. Gets fixed up later once we known an overall -/// location for the data section. flag indicates if offset is relative to cenv.resources. +/// location for the data section. flag indicates if offset is relative to cenv.resources. let Data (x: int, k: bool) = RowElement((if k then RowElementTags.DataResources else RowElementTags.Data ), x) -/// pos. in guid array +/// pos. in guid array let Guid (x: int) = RowElement(RowElementTags.Guid, x) -/// pos. in blob array +/// pos. in blob array let Blob (x: int) = RowElement(RowElementTags.Blob, x) -/// pos. in string array +/// pos. in string array let StringE (x: int) = RowElement(RowElementTags.String, x) -/// pos. in some table +/// pos. in some table let SimpleIndex (t, x: int) = RowElement(RowElementTags.SimpleIndex t, x) let TypeDefOrRefOrSpec (t, x: int) = RowElement(RowElementTags.TypeDefOrRefOrSpec t, x) let TypeOrMethodDef (t, x: int) = RowElement(RowElementTags.TypeOrMethodDef t, x) @@ -250,14 +245,14 @@ let Implementation (t, x: int) = RowElement(RowElementTags.Implementation t, x) let CustomAttributeType (t, x: int) = RowElement(RowElementTags.CustomAttributeType t, x) let ResolutionScope (t, x: int) = RowElement(RowElementTags.ResolutionScope t, x) (* -type RowElement = +type RowElement = | UShort of uint16 | ULong of int32 - | Data of int * bool // Index into cenv.data or cenv.resources. Will be adjusted later in writing once we fix an overall location for the data section. flag indicates if offset is relative to cenv.resources. - | Guid of int // pos. in guid array - | Blob of int // pos. in blob array - | String of int // pos. in string array - | SimpleIndex of TableName * int // pos. in some table + | Data of int * bool // Index into cenv.data or cenv.resources. Will be adjusted later in writing once we fix an overall location for the data section. flag indicates if offset is relative to cenv.resources. + | Guid of int // pos. in guid array + | Blob of int // pos. in blob array + | String of int // pos. in string array + | SimpleIndex of TableName * int // pos. in some table | TypeDefOrRefOrSpec of TypeDefOrRefTag * int | TypeOrMethodDef of TypeOrMethodDefTag * int | HasConstant of HasConstantTag * int @@ -281,18 +276,18 @@ let StringIndex (x: StringIndex) : int = x let inline combineHash x2 acc = 37 * acc + x2 // (acc <<< 6 + acc >>> 2 + x2 + 0x9e3779b9) -let hashRow (elems: RowElement[]) = +let hashRow (elems: RowElement[]) = let mutable acc = 0 - for i in 0 .. elems.Length - 1 do - acc <- (acc <<< 1) + elems.[i].Tag + elems.[i].Val + 631 + for i in 0 .. elems.Length - 1 do + acc <- (acc <<< 1) + elems.[i].Tag + elems.[i].Val + 631 acc -let equalRows (elems: RowElement[]) (elems2: RowElement[]) = +let equalRows (elems: RowElement[]) (elems2: RowElement[]) = if elems.Length <> elems2.Length then false else let mutable ok = true let n = elems.Length - let mutable i = 0 - while ok && i < n do + let mutable i = 0 + while ok && i < n do if elems.[i].Tag <> elems2.[i].Tag || elems.[i].Val <> elems2.[i].Val then ok <- false i <- i + 1 ok @@ -307,37 +302,37 @@ type GenericRow = RowElement[] type SharedRow(elems: RowElement[], hashCode: int) = member x.GenericRow = elems override x.GetHashCode() = hashCode - override x.Equals(obj: obj) = - match obj with + override x.Equals(obj: obj) = + match obj with | :? SharedRow as y -> equalRows elems y.GenericRow | _ -> false let SharedRow(elems: RowElement[]) = new SharedRow(elems, hashRow elems) /// Special representation : Note, only hashing by name -let AssemblyRefRow(s1, s2, s3, s4, l1, b1, nameIdx, str2, b2) = +let AssemblyRefRow(s1, s2, s3, s4, l1, b1, nameIdx, str2, b2) = let hashCode = hash nameIdx let genericRow = [| UShort s1; UShort s2; UShort s3; UShort s4; ULong l1; Blob b1; StringE nameIdx; StringE str2; Blob b2 |] new SharedRow(genericRow, hashCode) /// Special representation the computes the hash more efficiently -let MemberRefRow(mrp: RowElement, nmIdx: StringIndex, blobIdx: BlobIndex) = +let MemberRefRow(mrp: RowElement, nmIdx: StringIndex, blobIdx: BlobIndex) = let hashCode = combineHash (hash blobIdx) (combineHash (hash nmIdx) (hash mrp)) let genericRow = [| mrp; StringE nmIdx; Blob blobIdx |] new SharedRow(genericRow, hashCode) /// Unshared rows are used for definitional tables where elements do not need to be made unique -/// e.g. ILMethodDef and ILTypeDef. Most tables are like this. We don't precompute a +/// e.g. ILMethodDef and ILTypeDef. Most tables are like this. We don't precompute a /// hash code for these rows, and indeed the GetHashCode and Equals should not be needed. [] type UnsharedRow(elems: RowElement[]) = member x.GenericRow = elems override x.GetHashCode() = hashRow elems - override x.Equals(obj: obj) = - match obj with + override x.Equals(obj: obj) = + match obj with | :? UnsharedRow as y -> equalRows elems y.GenericRow | _ -> false - + //===================================================================== //===================================================================== @@ -345,8 +340,8 @@ type UnsharedRow(elems: RowElement[]) = //===================================================================== //===================================================================== -// This environment keeps track of how many generic parameters are in scope. -// This lets us translate AbsIL type variable number to IL type variable numbering +// This environment keeps track of how many generic parameters are in scope. +// This lets us translate AbsIL type variable number to IL type variable numbering type ILTypeWriterEnv = { EnclosingTyparCount: int } let envForTypeDef (td: ILTypeDef) = { EnclosingTyparCount=td.GenericParams.Length } let envForMethodRef env (ty: ILType) = { EnclosingTyparCount=(match ty with ILType.Array _ -> env.EnclosingTyparCount | _ -> ty.GenericArgs.Length) } @@ -359,7 +354,7 @@ let envForOverrideSpec (ospec: ILOverridesSpec) = { EnclosingTyparCount=ospec.De //--------------------------------------------------------------------- [] -type MetadataTable<'T> = +type MetadataTable<'T> = { name: string dict: Dictionary<'T, int> // given a row, find its entry number #if DEBUG @@ -368,7 +363,7 @@ type MetadataTable<'T> = mutable rows: ResizeArray<'T> } member x.Count = x.rows.Count - static member New(nm, hashEq) = + static member New(nm, hashEq) = { name=nm #if DEBUG lookups=0 @@ -376,13 +371,13 @@ type MetadataTable<'T> = dict = new Dictionary<_, _>(100, hashEq) rows= new ResizeArray<_>() } - member tbl.EntriesAsArray = + member tbl.EntriesAsArray = #if DEBUG if showEntryLookups then dprintf "--> table %s had %d entries and %d lookups\n" tbl.name tbl.Count tbl.lookups #endif tbl.rows |> ResizeArray.toArray - member tbl.Entries = + member tbl.Entries = #if DEBUG if showEntryLookups then dprintf "--> table %s had %d entries and %d lookups\n" tbl.name tbl.Count tbl.lookups #endif @@ -401,16 +396,16 @@ type MetadataTable<'T> = member tbl.FindOrAddSharedEntry x = #if DEBUG - tbl.lookups <- tbl.lookups + 1 + tbl.lookups <- tbl.lookups + 1 #endif match tbl.dict.TryGetValue x with | true, res -> res | _ -> tbl.AddSharedEntry x - /// This is only used in one special place - see further below. - member tbl.SetRowsOfTable t = - tbl.rows <- ResizeArray.ofArray t + /// This is only used in one special place - see further below. + member tbl.SetRowsOfTable t = + tbl.rows <- ResizeArray.ofArray t let h = tbl.dict h.Clear() t |> Array.iteri (fun i x -> h.[x] <- (i+1)) @@ -419,15 +414,15 @@ type MetadataTable<'T> = if tbl.dict.ContainsKey x then failwith ("duplicate entry '"+getter x+"' in "+nm+" table") else tbl.AddSharedEntry x - member tbl.GetTableEntry x = tbl.dict.[x] + member tbl.GetTableEntry x = tbl.dict.[x] //--------------------------------------------------------------------- // Keys into some of the tables //--------------------------------------------------------------------- -/// We use this key type to help find ILMethodDefs for MethodRefs +/// We use this key type to help find ILMethodDefs for MethodRefs type MethodDefKey(ilg:ILGlobals, tidx: int, garity: int, nm: string, rty: ILType, argtys: ILTypes, isStatic: bool) = - // Precompute the hash. The hash doesn't include the return type or + // Precompute the hash. The hash doesn't include the return type or // argument types (only argument type count). This is very important, since // hashing these is way too expensive let hashCode = @@ -461,19 +456,19 @@ type MethodDefKey(ilg:ILGlobals, tidx: int, garity: int, nm: string, rty: ILType | _ -> false /// We use this key type to help find ILFieldDefs for FieldRefs -type FieldDefKey(tidx: int, nm: string, ty: ILType) = - // precompute the hash. hash doesn't include the type - let hashCode = hash tidx |> combineHash (hash nm) +type FieldDefKey(tidx: int, nm: string, ty: ILType) = + // precompute the hash. hash doesn't include the type + let hashCode = hash tidx |> combineHash (hash nm) member key.TypeIdx = tidx member key.Name = nm member key.Type = ty override x.GetHashCode() = hashCode - override x.Equals(obj: obj) = - match obj with - | :? FieldDefKey as y -> - tidx = y.TypeIdx && - nm = y.Name && - ty = y.Type + override x.Equals(obj: obj) = + match obj with + | :? FieldDefKey as y -> + tidx = y.TypeIdx && + nm = y.Name && + ty = y.Type | _ -> false type PropertyTableKey = PropKey of int (* type. def. idx. *) * string * ILType * ILTypes @@ -491,39 +486,39 @@ type MetadataTable = member t.FindOrAddSharedEntry x = match t with Shared u -> u.FindOrAddSharedEntry x | Unshared u -> failwithf "FindOrAddSharedEntry: incorrect table kind, u.name = %s" u.name member t.AddSharedEntry x = match t with | Shared u -> u.AddSharedEntry x | Unshared u -> failwithf "AddSharedEntry: incorrect table kind, u.name = %s" u.name member t.AddUnsharedEntry x = match t with Unshared u -> u.AddUnsharedEntry x | Shared u -> failwithf "AddUnsharedEntry: incorrect table kind, u.name = %s" u.name - member t.GenericRowsOfTable = match t with Unshared u -> u.EntriesAsArray |> Array.map (fun x -> x.GenericRow) | Shared u -> u.EntriesAsArray |> Array.map (fun x -> x.GenericRow) + member t.GenericRowsOfTable = match t with Unshared u -> u.EntriesAsArray |> Array.map (fun x -> x.GenericRow) | Shared u -> u.EntriesAsArray |> Array.map (fun x -> x.GenericRow) member t.SetRowsOfSharedTable rows = match t with Shared u -> u.SetRowsOfTable (Array.map SharedRow rows) | Unshared u -> failwithf "SetRowsOfSharedTable: incorrect table kind, u.name = %s" u.name - member t.Count = match t with Unshared u -> u.Count | Shared u -> u.Count + member t.Count = match t with Unshared u -> u.Count | Shared u -> u.Count [] -type cenv = +type cenv = { ilg: ILGlobals emitTailcalls: bool deterministic: bool showTimes: bool desiredMetadataVersion: ILVersionInfo requiredDataFixups: (int32 * (int * bool)) list ref - /// References to strings in codestreams: offset of code and a (fixup-location, string token) list) - mutable requiredStringFixups: (int32 * (int * int) list) list - codeChunks: ByteBuffer + /// References to strings in codestreams: offset of code and a (fixup-location, string token) list) + mutable requiredStringFixups: (int32 * (int * int) list) list + codeChunks: ByteBuffer mutable nextCodeAddr: int32 - + // Collected debug information mutable moduleGuid: byte[] generatePdb: bool pdbinfo: ResizeArray documents: MetadataTable - /// Raw data, to go into the data section - data: ByteBuffer - /// Raw resource data, to go into the data section - resources: ByteBuffer - mutable entrypoint: (bool * int) option + /// Raw data, to go into the data section + data: ByteBuffer + /// Raw resource data, to go into the data section + resources: ByteBuffer + mutable entrypoint: (bool * int) option /// Caches trefCache: Dictionary - /// The following are all used to generate unique items in the output + /// The following are all used to generate unique items in the output tables: MetadataTable[] AssemblyRefs: MetadataTable fieldDefs: MetadataTable @@ -531,32 +526,26 @@ type cenv = methodDefIdxs: Dictionary propertyDefs: MetadataTable eventDefs: MetadataTable - typeDefs: MetadataTable - guids: MetadataTable - blobs: MetadataTable - strings: MetadataTable + typeDefs: MetadataTable + guids: MetadataTable + blobs: MetadataTable + strings: MetadataTable userStrings: MetadataTable normalizeAssemblyRefs: ILAssemblyRef -> ILAssemblyRef } member cenv.GetTable (tab: TableName) = cenv.tables.[tab.Index] - member cenv.AddCode ((reqdStringFixupsOffset, requiredStringFixups), code) = + member cenv.AddCode ((reqdStringFixupsOffset, requiredStringFixups), code) = if align 4 cenv.nextCodeAddr <> cenv.nextCodeAddr then dprintn "warning: code not 4-byte aligned" cenv.requiredStringFixups <- (cenv.nextCodeAddr + reqdStringFixupsOffset, requiredStringFixups) :: cenv.requiredStringFixups cenv.codeChunks.EmitBytes code cenv.nextCodeAddr <- cenv.nextCodeAddr + code.Length - member cenv.GetCode() = cenv.codeChunks.AsMemory().ToArray() + member cenv.GetCode() = cenv.codeChunks.Close() override x.ToString() = "" - interface IDisposable with - member this.Dispose() = - (this.codeChunks :> IDisposable).Dispose() - (this.data :> IDisposable).Dispose() - (this.resources :> IDisposable).Dispose() - let FindOrAddSharedRow (cenv: cenv) tbl x = cenv.GetTable(tbl).FindOrAddSharedEntry x // Shared rows must be hash-cons'd to be made unique (no duplicates according to contents) @@ -565,34 +554,34 @@ let AddSharedRow (cenv: cenv) tbl x = cenv.GetTable(tbl).AddSharedEntry x // Unshared rows correspond to definition elements (e.g. a ILTypeDef or a ILMethodDef) let AddUnsharedRow (cenv: cenv) tbl (x: UnsharedRow) = cenv.GetTable(tbl).AddUnsharedEntry x -let metadataSchemaVersionSupportedByCLRVersion v = - // Whidbey Beta 1 version numbers are between 2.0.40520.0 and 2.0.40607.0 - // Later Whidbey versions are post 2.0.40607.0.. However we assume - // internal builds such as 2.0.x86chk are Whidbey Beta 2 or later +let metadataSchemaVersionSupportedByCLRVersion v = + // Whidbey Beta 1 version numbers are between 2.0.40520.0 and 2.0.40607.0 + // Later Whidbey versions are post 2.0.40607.0.. However we assume + // internal builds such as 2.0.x86chk are Whidbey Beta 2 or later if compareILVersions v (parseILVersion ("2.0.40520.0")) >= 0 && compareILVersions v (parseILVersion ("2.0.40608.0")) < 0 then 1, 1 elif compareILVersions v (parseILVersion ("2.0.0.0")) >= 0 then 2, 0 - else 1, 0 + else 1, 0 -let headerVersionSupportedByCLRVersion v = - // The COM20HEADER version number - // Whidbey version numbers are 2.5 - // Earlier are 2.0 - // From an email from jeffschw: "Be built with a compiler that marks the COM20HEADER with Major >=2 and Minor >= 5. The V2.0 compilers produce images with 2.5, V1.x produces images with 2.0." +let headerVersionSupportedByCLRVersion v = + // The COM20HEADER version number + // Whidbey version numbers are 2.5 + // Earlier are 2.0 + // From an email from jeffschw: "Be built with a compiler that marks the COM20HEADER with Major >=2 and Minor >= 5. The V2.0 compilers produce images with 2.5, V1.x produces images with 2.0." if compareILVersions v (parseILVersion ("2.0.0.0")) >= 0 then 2, 5 - else 2, 0 + else 2, 0 -let peOptionalHeaderByteByCLRVersion v = - // A flag in the PE file optional header seems to depend on CLI version - // Whidbey version numbers are 8 - // Earlier are 6 - // Tools are meant to ignore this, but the VS Profiler wants it to have the right value +let peOptionalHeaderByteByCLRVersion v = + // A flag in the PE file optional header seems to depend on CLI version + // Whidbey version numbers are 8 + // Earlier are 6 + // Tools are meant to ignore this, but the VS Profiler wants it to have the right value if compareILVersions v (parseILVersion ("2.0.0.0")) >= 0 then 8 else 6 -// returned by writeBinaryAndReportMappings +// returned by writeBinaryAndReportMappings [] -type ILTokenMappings = +type ILTokenMappings = { TypeDefTokenMap: ILTypeDef list * ILTypeDef -> int32 FieldDefTokenMap: ILTypeDef list * ILTypeDef -> ILFieldDef -> int32 MethodDefTokenMap: ILTypeDef list * ILTypeDef -> ILMethodDef -> int32 @@ -601,125 +590,125 @@ type ILTokenMappings = let recordRequiredDataFixup requiredDataFixups (buf: ByteBuffer) pos lab = requiredDataFixups := (pos, lab) :: !requiredDataFixups - // Write a special value in that we check later when applying the fixup + // Write a special value in that we check later when applying the fixup buf.EmitInt32 0xdeaddddd //--------------------------------------------------------------------- // The UserString, BlobHeap, GuidHeap tables //--------------------------------------------------------------------- -let GetUserStringHeapIdx cenv s = +let GetUserStringHeapIdx cenv s = cenv.userStrings.FindOrAddSharedEntry s -let GetBytesAsBlobIdx cenv (bytes: byte[]) = - if bytes.Length = 0 then 0 +let GetBytesAsBlobIdx cenv (bytes: byte[]) = + if bytes.Length = 0 then 0 else cenv.blobs.FindOrAddSharedEntry bytes -let GetStringHeapIdx cenv s = - if s = "" then 0 +let GetStringHeapIdx cenv s = + if s = "" then 0 else cenv.strings.FindOrAddSharedEntry s let GetGuidIdx cenv info = cenv.guids.FindOrAddSharedEntry info let GetStringHeapIdxOption cenv sopt = - match sopt with + match sopt with | Some ns -> GetStringHeapIdx cenv ns | None -> 0 let GetTypeNameAsElemPair cenv n = let (n1, n2) = splitTypeNameRight n - StringE (GetStringHeapIdxOption cenv n1), + StringE (GetStringHeapIdxOption cenv n1), StringE (GetStringHeapIdx cenv n2) //===================================================================== -// Pass 1 - allocate indexes for types +// Pass 1 - allocate indexes for types //===================================================================== -let rec GenTypeDefPass1 enc cenv (td: ILTypeDef) = +let rec GenTypeDefPass1 enc cenv (td: ILTypeDef) = ignore (cenv.typeDefs.AddUniqueEntry "type index" (fun (TdKey (_, n)) -> n) (TdKey (enc, td.Name))) GenTypeDefsPass1 (enc@[td.Name]) cenv td.NestedTypes.AsList and GenTypeDefsPass1 enc cenv tds = List.iter (GenTypeDefPass1 enc cenv) tds //===================================================================== -// Pass 2 - allocate indexes for methods and fields and write rows for types +// Pass 2 - allocate indexes for methods and fields and write rows for types //===================================================================== -let rec GetIdxForTypeDef cenv key = +let rec GetIdxForTypeDef cenv key = try cenv.typeDefs.GetTableEntry key - with - :? KeyNotFoundException -> + with + :? KeyNotFoundException -> let (TdKey (enc, n) ) = key errorR(InternalError("One of your modules expects the type '"+String.concat "." (enc@[n])+"' to be defined within the module being emitted. You may be missing an input file", range0)) 0 - -// -------------------------------------------------------------------- + +// -------------------------------------------------------------------- // Assembly and module references -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- let rec GetAssemblyRefAsRow cenv (aref: ILAssemblyRef) = - AssemblyRefRow - ((match aref.Version with None -> 0us | Some version -> version.Major), - (match aref.Version with None -> 0us | Some version -> version.Minor), - (match aref.Version with None -> 0us | Some version -> version.Build), - (match aref.Version with None -> 0us | Some version -> version.Revision), + AssemblyRefRow + ((match aref.Version with None -> 0us | Some version -> version.Major), + (match aref.Version with None -> 0us | Some version -> version.Minor), + (match aref.Version with None -> 0us | Some version -> version.Build), + (match aref.Version with None -> 0us | Some version -> version.Revision), ((match aref.PublicKey with Some (PublicKey _) -> 0x0001 | _ -> 0x0000) - ||| (if aref.Retargetable then 0x0100 else 0x0000)), - BlobIndex (match aref.PublicKey with - | None -> 0 - | Some (PublicKey b | PublicKeyToken b) -> GetBytesAsBlobIdx cenv b), - StringIndex (GetStringHeapIdx cenv aref.Name), - StringIndex (match aref.Locale with None -> 0 | Some s -> GetStringHeapIdx cenv s), + ||| (if aref.Retargetable then 0x0100 else 0x0000)), + BlobIndex (match aref.PublicKey with + | None -> 0 + | Some (PublicKey b | PublicKeyToken b) -> GetBytesAsBlobIdx cenv b), + StringIndex (GetStringHeapIdx cenv aref.Name), + StringIndex (match aref.Locale with None -> 0 | Some s -> GetStringHeapIdx cenv s), BlobIndex (match aref.Hash with None -> 0 | Some s -> GetBytesAsBlobIdx cenv s)) -and GetAssemblyRefAsIdx cenv aref = +and GetAssemblyRefAsIdx cenv aref = FindOrAddSharedRow cenv TableNames.AssemblyRef (GetAssemblyRefAsRow cenv (cenv.normalizeAssemblyRefs aref)) and GetModuleRefAsRow cenv (mref: ILModuleRef) = - SharedRow + SharedRow [| StringE (GetStringHeapIdx cenv mref.Name) |] and GetModuleRefAsFileRow cenv (mref: ILModuleRef) = - SharedRow + SharedRow [| ULong (if mref.HasMetadata then 0x0000 else 0x0001) StringE (GetStringHeapIdx cenv mref.Name) (match mref.Hash with None -> Blob 0 | Some s -> Blob (GetBytesAsBlobIdx cenv s)) |] -and GetModuleRefAsIdx cenv mref = +and GetModuleRefAsIdx cenv mref = FindOrAddSharedRow cenv TableNames.ModuleRef (GetModuleRefAsRow cenv mref) -and GetModuleRefAsFileIdx cenv mref = +and GetModuleRefAsFileIdx cenv mref = FindOrAddSharedRow cenv TableNames.File (GetModuleRefAsFileRow cenv mref) -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // Does a ILScopeRef point to this module? -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let isScopeRefLocal scoref = (scoref = ILScopeRef.Local) +let isScopeRefLocal scoref = (scoref = ILScopeRef.Local) let isTypeRefLocal (tref: ILTypeRef) = isScopeRefLocal tref.Scope let isTypeLocal (ty: ILType) = ty.IsNominal && isNil ty.GenericArgs && isTypeRefLocal ty.TypeRef -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // Scopes to Implementation elements. -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let GetScopeRefAsImplementationElem cenv scoref = - match scoref with +let GetScopeRefAsImplementationElem cenv scoref = + match scoref with | ILScopeRef.Local -> (i_AssemblyRef, 0) | ILScopeRef.Assembly aref -> (i_AssemblyRef, GetAssemblyRefAsIdx cenv aref) | ILScopeRef.Module mref -> (i_File, GetModuleRefAsFileIdx cenv mref) | ILScopeRef.PrimaryAssembly -> (i_AssemblyRef, GetAssemblyRefAsIdx cenv cenv.ilg.primaryAssemblyRef) - -// -------------------------------------------------------------------- + +// -------------------------------------------------------------------- // Type references, types etc. -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GetTypeRefAsTypeRefRow cenv (tref: ILTypeRef) = +let rec GetTypeRefAsTypeRefRow cenv (tref: ILTypeRef) = let nselem, nelem = GetTypeNameAsElemPair cenv tref.Name let rs1, rs2 = GetResolutionScopeAsElem cenv (tref.Scope, tref.Enclosing) SharedRow [| ResolutionScope (rs1, rs2); nelem; nselem |] -and GetTypeRefAsTypeRefIdx cenv tref = +and GetTypeRefAsTypeRefIdx cenv tref = match cenv.trefCache.TryGetValue tref with | true, res -> res | _ -> @@ -727,143 +716,143 @@ and GetTypeRefAsTypeRefIdx cenv tref = cenv.trefCache.[tref] <- res res -and GetTypeDescAsTypeRefIdx cenv (scoref, enc, n) = +and GetTypeDescAsTypeRefIdx cenv (scoref, enc, n) = GetTypeRefAsTypeRefIdx cenv (mkILNestedTyRef (scoref, enc, n)) -and GetResolutionScopeAsElem cenv (scoref, enc) = - if isNil enc then - match scoref with - | ILScopeRef.Local -> (rs_Module, 1) +and GetResolutionScopeAsElem cenv (scoref, enc) = + if isNil enc then + match scoref with + | ILScopeRef.Local -> (rs_Module, 1) | ILScopeRef.Assembly aref -> (rs_AssemblyRef, GetAssemblyRefAsIdx cenv aref) | ILScopeRef.Module mref -> (rs_ModuleRef, GetModuleRefAsIdx cenv mref) | ILScopeRef.PrimaryAssembly -> (rs_AssemblyRef, GetAssemblyRefAsIdx cenv cenv.ilg.primaryAssemblyRef) else let enc2, n2 = List.frontAndBack enc (rs_TypeRef, GetTypeDescAsTypeRefIdx cenv (scoref, enc2, n2)) + - -let emitTypeInfoAsTypeDefOrRefEncoded cenv (bb: ByteBuffer) (scoref, enc, nm) = - if isScopeRefLocal scoref then +let emitTypeInfoAsTypeDefOrRefEncoded cenv (bb: ByteBuffer) (scoref, enc, nm) = + if isScopeRefLocal scoref then let idx = GetIdxForTypeDef cenv (TdKey(enc, nm)) - bb.EmitZ32 (idx <<< 2) // ECMA 22.2.8 TypeDefOrRefEncoded - ILTypeDef - else + bb.EmitZ32 (idx <<< 2) // ECMA 22.2.8 TypeDefOrRefEncoded - ILTypeDef + else let idx = GetTypeDescAsTypeRefIdx cenv (scoref, enc, nm) - bb.EmitZ32 ((idx <<< 2) ||| 0x01) // ECMA 22.2.8 TypeDefOrRefEncoded - ILTypeRef + bb.EmitZ32 ((idx <<< 2) ||| 0x01) // ECMA 22.2.8 TypeDefOrRefEncoded - ILTypeRef let getTypeDefOrRefAsUncodedToken (tag, idx) = - let tab = - if tag = tdor_TypeDef then TableNames.TypeDef - elif tag = tdor_TypeRef then TableNames.TypeRef + let tab = + if tag = tdor_TypeDef then TableNames.TypeDef + elif tag = tdor_TypeRef then TableNames.TypeRef elif tag = tdor_TypeSpec then TableNames.TypeSpec else failwith "getTypeDefOrRefAsUncodedToken" getUncodedToken tab idx // REVIEW: write into an accumulating buffer -let EmitArrayShape (bb: ByteBuffer) (ILArrayShape shape) = +let EmitArrayShape (bb: ByteBuffer) (ILArrayShape shape) = let sized = List.filter (function (_, Some _) -> true | _ -> false) shape let lobounded = List.filter (function (Some _, _) -> true | _ -> false) shape bb.EmitZ32 shape.Length bb.EmitZ32 sized.Length sized |> List.iter (function (_, Some sz) -> bb.EmitZ32 sz | _ -> failwith "?") bb.EmitZ32 lobounded.Length - lobounded |> List.iter (function (Some low, _) -> bb.EmitZ32 low | _ -> failwith "?") - + lobounded |> List.iter (function (Some low, _) -> bb.EmitZ32 low | _ -> failwith "?") + let hasthisToByte hasthis = - match hasthis with + match hasthis with | ILThisConvention.Instance -> e_IMAGE_CEE_CS_CALLCONV_INSTANCE | ILThisConvention.InstanceExplicit -> e_IMAGE_CEE_CS_CALLCONV_INSTANCE_EXPLICIT | ILThisConvention.Static -> 0x00uy -let callconvToByte ntypars (Callconv (hasthis, bcc)) = +let callconvToByte ntypars (Callconv (hasthis, bcc)) = hasthisToByte hasthis ||| (if ntypars > 0 then e_IMAGE_CEE_CS_CALLCONV_GENERIC else 0x00uy) ||| - (match bcc with + (match bcc with | ILArgConvention.FastCall -> e_IMAGE_CEE_CS_CALLCONV_FASTCALL | ILArgConvention.StdCall -> e_IMAGE_CEE_CS_CALLCONV_STDCALL | ILArgConvention.ThisCall -> e_IMAGE_CEE_CS_CALLCONV_THISCALL | ILArgConvention.CDecl -> e_IMAGE_CEE_CS_CALLCONV_CDECL | ILArgConvention.Default -> 0x00uy | ILArgConvention.VarArg -> e_IMAGE_CEE_CS_CALLCONV_VARARG) - + // REVIEW: write into an accumulating buffer -let rec EmitTypeSpec cenv env (bb: ByteBuffer) (et, tspec: ILTypeSpec) = - if isNil tspec.GenericArgs then +let rec EmitTypeSpec cenv env (bb: ByteBuffer) (et, tspec: ILTypeSpec) = + if isNil tspec.GenericArgs then bb.EmitByte et emitTypeInfoAsTypeDefOrRefEncoded cenv bb (tspec.Scope, tspec.Enclosing, tspec.Name) - else + else bb.EmitByte et_WITH bb.EmitByte et emitTypeInfoAsTypeDefOrRefEncoded cenv bb (tspec.Scope, tspec.Enclosing, tspec.Name) bb.EmitZ32 tspec.GenericArgs.Length EmitTypes cenv env bb tspec.GenericArgs -and GetTypeAsTypeDefOrRef cenv env (ty: ILType) = - if isTypeLocal ty then +and GetTypeAsTypeDefOrRef cenv env (ty: ILType) = + if isTypeLocal ty then let tref = ty.TypeRef (tdor_TypeDef, GetIdxForTypeDef cenv (TdKey(tref.Enclosing, tref.Name))) elif ty.IsNominal && isNil ty.GenericArgs then (tdor_TypeRef, GetTypeRefAsTypeRefIdx cenv ty.TypeRef) - else + else (tdor_TypeSpec, GetTypeAsTypeSpecIdx cenv env ty) and GetTypeAsBytes cenv env ty = emitBytesViaBuffer (fun bb -> EmitType cenv env bb ty) -and GetTypeOfLocalAsBytes cenv env (l: ILLocal) = +and GetTypeOfLocalAsBytes cenv env (l: ILLocal) = emitBytesViaBuffer (fun bb -> EmitLocalInfo cenv env bb l) -and GetTypeAsBlobIdx cenv env (ty: ILType) = +and GetTypeAsBlobIdx cenv env (ty: ILType) = GetBytesAsBlobIdx cenv (GetTypeAsBytes cenv env ty) -and GetTypeAsTypeSpecRow cenv env (ty: ILType) = +and GetTypeAsTypeSpecRow cenv env (ty: ILType) = SharedRow [| Blob (GetTypeAsBlobIdx cenv env ty) |] -and GetTypeAsTypeSpecIdx cenv env ty = +and GetTypeAsTypeSpecIdx cenv env ty = FindOrAddSharedRow cenv TableNames.TypeSpec (GetTypeAsTypeSpecRow cenv env ty) and EmitType cenv env bb ty = let ilg = cenv.ilg - match ty with - | ty when isILSByteTy ilg ty -> bb.EmitByte et_I1 - | ty when isILInt16Ty ilg ty -> bb.EmitByte et_I2 - | ty when isILInt32Ty ilg ty -> bb.EmitByte et_I4 - | ty when isILInt64Ty ilg ty -> bb.EmitByte et_I8 - | ty when isILByteTy ilg ty -> bb.EmitByte et_U1 - | ty when isILUInt16Ty ilg ty -> bb.EmitByte et_U2 - | ty when isILUInt32Ty ilg ty -> bb.EmitByte et_U4 - | ty when isILUInt64Ty ilg ty -> bb.EmitByte et_U8 - | ty when isILDoubleTy ilg ty -> bb.EmitByte et_R8 - | ty when isILSingleTy ilg ty -> bb.EmitByte et_R4 - | ty when isILBoolTy ilg ty -> bb.EmitByte et_BOOLEAN - | ty when isILCharTy ilg ty -> bb.EmitByte et_CHAR - | ty when isILStringTy ilg ty -> bb.EmitByte et_STRING - | ty when isILObjectTy ilg ty -> bb.EmitByte et_OBJECT - | ty when isILIntPtrTy ilg ty -> bb.EmitByte et_I - | ty when isILUIntPtrTy ilg ty -> bb.EmitByte et_U - | ty when isILTypedReferenceTy ilg ty -> bb.EmitByte et_TYPEDBYREF + match ty with + | ty when isILSByteTy ilg ty -> bb.EmitByte et_I1 + | ty when isILInt16Ty ilg ty -> bb.EmitByte et_I2 + | ty when isILInt32Ty ilg ty -> bb.EmitByte et_I4 + | ty when isILInt64Ty ilg ty -> bb.EmitByte et_I8 + | ty when isILByteTy ilg ty -> bb.EmitByte et_U1 + | ty when isILUInt16Ty ilg ty -> bb.EmitByte et_U2 + | ty when isILUInt32Ty ilg ty -> bb.EmitByte et_U4 + | ty when isILUInt64Ty ilg ty -> bb.EmitByte et_U8 + | ty when isILDoubleTy ilg ty -> bb.EmitByte et_R8 + | ty when isILSingleTy ilg ty -> bb.EmitByte et_R4 + | ty when isILBoolTy ilg ty -> bb.EmitByte et_BOOLEAN + | ty when isILCharTy ilg ty -> bb.EmitByte et_CHAR + | ty when isILStringTy ilg ty -> bb.EmitByte et_STRING + | ty when isILObjectTy ilg ty -> bb.EmitByte et_OBJECT + | ty when isILIntPtrTy ilg ty -> bb.EmitByte et_I + | ty when isILUIntPtrTy ilg ty -> bb.EmitByte et_U + | ty when isILTypedReferenceTy ilg ty -> bb.EmitByte et_TYPEDBYREF | ILType.Boxed tspec -> EmitTypeSpec cenv env bb (et_CLASS, tspec) | ILType.Value tspec -> EmitTypeSpec cenv env bb (et_VALUETYPE, tspec) - | ILType.Array (shape, ty) -> + | ILType.Array (shape, ty) -> if shape = ILArrayShape.SingleDimensional then (bb.EmitByte et_SZARRAY ; EmitType cenv env bb ty) else (bb.EmitByte et_ARRAY; EmitType cenv env bb ty; EmitArrayShape bb shape) - | ILType.TypeVar tv -> + | ILType.TypeVar tv -> let cgparams = env.EnclosingTyparCount - if int32 tv < cgparams then + if int32 tv < cgparams then bb.EmitByte et_VAR bb.EmitZ32 (int32 tv) else bb.EmitByte et_MVAR bb.EmitZ32 (int32 tv - cgparams) - | ILType.Byref ty -> + | ILType.Byref ty -> bb.EmitByte et_BYREF EmitType cenv env bb ty - | ILType.Ptr ty -> + | ILType.Ptr ty -> bb.EmitByte et_PTR EmitType cenv env bb ty - | ILType.Void -> - bb.EmitByte et_VOID + | ILType.Void -> + bb.EmitByte et_VOID | ILType.FunctionPointer x -> bb.EmitByte et_FNPTR EmitCallsig cenv env bb (x.CallingConv, x.ArgTypes, x.ReturnType, None, 0) @@ -874,120 +863,120 @@ and EmitType cenv env bb ty = | _ -> failwith "EmitType" and EmitLocalInfo cenv env (bb: ByteBuffer) (l: ILLocal) = - if l.IsPinned then + if l.IsPinned then bb.EmitByte et_PINNED EmitType cenv env bb l.Type -and EmitCallsig cenv env bb (callconv, args: ILTypes, ret, varargs: ILVarArgs, genarity) = +and EmitCallsig cenv env bb (callconv, args: ILTypes, ret, varargs: ILVarArgs, genarity) = bb.EmitByte (callconvToByte genarity callconv) if genarity > 0 then bb.EmitZ32 genarity bb.EmitZ32 ((args.Length + (match varargs with None -> 0 | Some l -> l.Length))) EmitType cenv env bb ret args |> List.iter (EmitType cenv env bb) - match varargs with - | None -> ()// no extra arg = no sentinel - | Some tys -> - if isNil tys then () // no extra arg = no sentinel - else + match varargs with + | None -> ()// no extra arg = no sentinel + | Some tys -> + if isNil tys then () // no extra arg = no sentinel + else bb.EmitByte et_SENTINEL List.iter (EmitType cenv env bb) tys and GetCallsigAsBytes cenv env x = emitBytesViaBuffer (fun bb -> EmitCallsig cenv env bb x) // REVIEW: write into an accumulating buffer -and EmitTypes cenv env bb (inst: ILTypes) = - inst |> List.iter (EmitType cenv env bb) +and EmitTypes cenv env bb (inst: ILTypes) = + inst |> List.iter (EmitType cenv env bb) let GetTypeAsMemberRefParent cenv env ty = - match GetTypeAsTypeDefOrRef cenv env ty with + match GetTypeAsTypeDefOrRef cenv env ty with | (tag, _) when tag = tdor_TypeDef -> dprintn "GetTypeAsMemberRefParent: mspec should have been encoded as mdtMethodDef?"; MemberRefParent (mrp_TypeRef, 1) | (tag, tok) when tag = tdor_TypeRef -> MemberRefParent (mrp_TypeRef, tok) | (tag, tok) when tag = tdor_TypeSpec -> MemberRefParent (mrp_TypeSpec, tok) | _ -> failwith "GetTypeAsMemberRefParent" -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // Native types -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GetVariantTypeAsInt32 ty = - if List.memAssoc ty (Lazy.force ILVariantTypeMap) then +let rec GetVariantTypeAsInt32 ty = + if List.memAssoc ty (Lazy.force ILVariantTypeMap) then (List.assoc ty (Lazy.force ILVariantTypeMap )) - else - match ty with + else + match ty with | ILNativeVariant.Array vt -> vt_ARRAY ||| GetVariantTypeAsInt32 vt | ILNativeVariant.Vector vt -> vt_VECTOR ||| GetVariantTypeAsInt32 vt | ILNativeVariant.Byref vt -> vt_BYREF ||| GetVariantTypeAsInt32 vt | _ -> failwith "Unexpected variant type" -// based on information in ECMA and asmparse.y in the CLR codebase -let rec GetNativeTypeAsBlobIdx cenv (ty: ILNativeType) = +// based on information in ECMA and asmparse.y in the CLR codebase +let rec GetNativeTypeAsBlobIdx cenv (ty: ILNativeType) = GetBytesAsBlobIdx cenv (GetNativeTypeAsBytes ty) and GetNativeTypeAsBytes ty = emitBytesViaBuffer (fun bb -> EmitNativeType bb ty) // REVIEW: write into an accumulating buffer -and EmitNativeType bb ty = - if List.memAssoc ty (Lazy.force ILNativeTypeRevMap) then +and EmitNativeType bb ty = + if List.memAssoc ty (Lazy.force ILNativeTypeRevMap) then bb.EmitByte (List.assoc ty (Lazy.force ILNativeTypeRevMap)) - else - match ty with + else + match ty with | ILNativeType.Empty -> () | ILNativeType.Custom (guid, nativeTypeName, custMarshallerName, cookieString) -> let u1 = System.Text.Encoding.UTF8.GetBytes nativeTypeName let u2 = System.Text.Encoding.UTF8.GetBytes custMarshallerName let u3 = cookieString - bb.EmitByte nt_CUSTOMMARSHALER + bb.EmitByte nt_CUSTOMMARSHALER bb.EmitZ32 guid.Length bb.EmitBytes guid bb.EmitZ32 u1.Length; bb.EmitBytes u1 bb.EmitZ32 u2.Length; bb.EmitBytes u2 bb.EmitZ32 u3.Length; bb.EmitBytes u3 - | ILNativeType.FixedSysString i -> - bb.EmitByte nt_FIXEDSYSSTRING + | ILNativeType.FixedSysString i -> + bb.EmitByte nt_FIXEDSYSSTRING bb.EmitZ32 i - | ILNativeType.FixedArray i -> + | ILNativeType.FixedArray i -> bb.EmitByte nt_FIXEDARRAY bb.EmitZ32 i - | (* COM interop *) ILNativeType.SafeArray (vt, name) -> + | (* COM interop *) ILNativeType.SafeArray (vt, name) -> bb.EmitByte nt_SAFEARRAY bb.EmitZ32 (GetVariantTypeAsInt32 vt) - match name with - | None -> () - | Some n -> + match name with + | None -> () + | Some n -> let u1 = Bytes.stringAsUtf8NullTerminated n bb.EmitZ32 (Array.length u1) ; bb.EmitBytes u1 | ILNativeType.Array (nt, sizeinfo) -> (* REVIEW: check if this corresponds to the ECMA spec *) - bb.EmitByte nt_ARRAY - match nt with + bb.EmitByte nt_ARRAY + match nt with | None -> bb.EmitZ32 (int nt_MAX) | Some ntt -> - (if ntt = ILNativeType.Empty then + (if ntt = ILNativeType.Empty then bb.EmitZ32 (int nt_MAX) - else - EmitNativeType bb ntt) - match sizeinfo with - | None -> () // chunk out with zeroes because some tools (e.g. asmmeta) read these poorly and expect further elements. + else + EmitNativeType bb ntt) + match sizeinfo with + | None -> () // chunk out with zeroes because some tools (e.g. asmmeta) read these poorly and expect further elements. | Some (pnum, additive) -> - // ParamNum + // ParamNum bb.EmitZ32 pnum - (* ElemMul *) (* z_u32 0x1l *) - match additive with + (* ElemMul *) (* z_u32 0x1l *) + match additive with | None -> () | Some n -> (* NumElem *) bb.EmitZ32 n | _ -> failwith "Unexpected native type" -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // Native types -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GetFieldInitAsBlobIdx cenv (x: ILFieldInit) = +let rec GetFieldInitAsBlobIdx cenv (x: ILFieldInit) = GetBytesAsBlobIdx cenv (emitBytesViaBuffer (fun bb -> GetFieldInit bb x)) // REVIEW: write into an accumulating buffer -and GetFieldInit (bb: ByteBuffer) x = - match x with +and GetFieldInit (bb: ByteBuffer) x = + match x with | ILFieldInit.String b -> bb.EmitBytes (System.Text.Encoding.Unicode.GetBytes b) | ILFieldInit.Bool b -> bb.EmitByte (if b then 0x01uy else 0x00uy) | ILFieldInit.Char x -> bb.EmitUInt16 x @@ -1003,10 +992,10 @@ and GetFieldInit (bb: ByteBuffer) x = | ILFieldInit.Double x -> bb.EmitInt64 (bitsOfDouble x) | ILFieldInit.Null -> bb.EmitInt32 0 -and GetFieldInitFlags i = - UShort +and GetFieldInitFlags i = + UShort (uint16 - (match i with + (match i with | ILFieldInit.String _ -> et_STRING | ILFieldInit.Bool _ -> et_BOOLEAN | ILFieldInit.Char _ -> et_CHAR @@ -1021,12 +1010,12 @@ and GetFieldInitFlags i = | ILFieldInit.Single _ -> et_R4 | ILFieldInit.Double _ -> et_R8 | ILFieldInit.Null -> et_CLASS)) - -// -------------------------------------------------------------------- + +// -------------------------------------------------------------------- // Type definitions -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let GetMemberAccessFlags access = +let GetMemberAccessFlags access = match access with | ILMemberAccess.Public -> 0x00000006 | ILMemberAccess.Private -> 0x00000001 @@ -1036,8 +1025,8 @@ let GetMemberAccessFlags access = | ILMemberAccess.FamilyOrAssembly -> 0x00000005 | ILMemberAccess.Assembly -> 0x00000003 -let GetTypeAccessFlags access = - match access with +let GetTypeAccessFlags access = + match access with | ILTypeDefAccess.Public -> 0x00000001 | ILTypeDefAccess.Private -> 0x00000000 | ILTypeDefAccess.Nested ILMemberAccess.Public -> 0x00000002 @@ -1048,44 +1037,44 @@ let GetTypeAccessFlags access = | ILTypeDefAccess.Nested ILMemberAccess.FamilyOrAssembly -> 0x00000007 | ILTypeDefAccess.Nested ILMemberAccess.Assembly -> 0x00000005 -let rec GetTypeDefAsRow cenv env _enc (td: ILTypeDef) = +let rec GetTypeDefAsRow cenv env _enc (td: ILTypeDef) = let nselem, nelem = GetTypeNameAsElemPair cenv td.Name - let flags = + let flags = if (isTypeNameForGlobalFunctions td.Name) then 0x00000000 else int td.Attributes let tdorTag, tdorRow = GetTypeOptionAsTypeDefOrRef cenv env td.Extends - UnsharedRow - [| ULong flags - nelem - nselem - TypeDefOrRefOrSpec (tdorTag, tdorRow) - SimpleIndex (TableNames.Field, cenv.fieldDefs.Count + 1) - SimpleIndex (TableNames.Method, cenv.methodDefIdxsByKey.Count + 1) |] - -and GetTypeOptionAsTypeDefOrRef cenv env tyOpt = + UnsharedRow + [| ULong flags + nelem + nselem + TypeDefOrRefOrSpec (tdorTag, tdorRow) + SimpleIndex (TableNames.Field, cenv.fieldDefs.Count + 1) + SimpleIndex (TableNames.Method, cenv.methodDefIdxsByKey.Count + 1) |] + +and GetTypeOptionAsTypeDefOrRef cenv env tyOpt = match tyOpt with | None -> (tdor_TypeDef, 0) | Some ty -> (GetTypeAsTypeDefOrRef cenv env ty) -and GetTypeDefAsPropertyMapRow cenv tidx = +and GetTypeDefAsPropertyMapRow cenv tidx = UnsharedRow [| SimpleIndex (TableNames.TypeDef, tidx) - SimpleIndex (TableNames.Property, cenv.propertyDefs.Count + 1) |] + SimpleIndex (TableNames.Property, cenv.propertyDefs.Count + 1) |] -and GetTypeDefAsEventMapRow cenv tidx = +and GetTypeDefAsEventMapRow cenv tidx = UnsharedRow [| SimpleIndex (TableNames.TypeDef, tidx) - SimpleIndex (TableNames.Event, cenv.eventDefs.Count + 1) |] - -and GetKeyForFieldDef tidx (fd: ILFieldDef) = + SimpleIndex (TableNames.Event, cenv.eventDefs.Count + 1) |] + +and GetKeyForFieldDef tidx (fd: ILFieldDef) = FieldDefKey (tidx, fd.Name, fd.FieldType) -and GenFieldDefPass2 cenv tidx fd = +and GenFieldDefPass2 cenv tidx fd = ignore (cenv.fieldDefs.AddUniqueEntry "field" (fun (fdkey: FieldDefKey) -> fdkey.Name) (GetKeyForFieldDef tidx fd)) -and GetKeyForMethodDef cenv tidx (md: ILMethodDef) = +and GetKeyForMethodDef cenv tidx (md: ILMethodDef) = MethodDefKey (cenv.ilg, tidx, md.GenericParams.Length, md.Name, md.Return.Type, md.ParameterTypes, md.CallingConv.IsStatic) and GenMethodDefPass2 cenv tidx md = @@ -1103,51 +1092,51 @@ and GenMethodDefPass2 cenv tidx md = cenv.methodDefIdxs.[md] <- idx -and GetKeyForPropertyDef tidx (x: ILPropertyDef) = +and GetKeyForPropertyDef tidx (x: ILPropertyDef) = PropKey (tidx, x.Name, x.PropertyType, x.Args) -and GenPropertyDefPass2 cenv tidx x = +and GenPropertyDefPass2 cenv tidx x = ignore (cenv.propertyDefs.AddUniqueEntry "property" (fun (PropKey (_, n, _, _)) -> n) (GetKeyForPropertyDef tidx x)) and GetTypeAsImplementsRow cenv env tidx ty = let tdorTag, tdorRow = GetTypeAsTypeDefOrRef cenv env ty - UnsharedRow - [| SimpleIndex (TableNames.TypeDef, tidx) + UnsharedRow + [| SimpleIndex (TableNames.TypeDef, tidx) TypeDefOrRefOrSpec (tdorTag, tdorRow) |] and GenImplementsPass2 cenv env tidx ty = AddUnsharedRow cenv TableNames.InterfaceImpl (GetTypeAsImplementsRow cenv env tidx ty) |> ignore - -and GetKeyForEvent tidx (x: ILEventDef) = + +and GetKeyForEvent tidx (x: ILEventDef) = EventKey (tidx, x.Name) -and GenEventDefPass2 cenv tidx x = +and GenEventDefPass2 cenv tidx x = ignore (cenv.eventDefs.AddUniqueEntry "event" (fun (EventKey(_, b)) -> b) (GetKeyForEvent tidx x)) and GenTypeDefPass2 pidx enc cenv (td: ILTypeDef) = - try + try let env = envForTypeDef td let tidx = GetIdxForTypeDef cenv (TdKey(enc, td.Name)) let tidx2 = AddUnsharedRow cenv TableNames.TypeDef (GetTypeDefAsRow cenv env enc td) if tidx <> tidx2 then failwith "index of typedef on second pass does not match index on first pass" - // Add entries to auxiliary mapping tables, e.g. Nested, PropertyMap etc. - // Note Nested is organised differently to the others... + // Add entries to auxiliary mapping tables, e.g. Nested, PropertyMap etc. + // Note Nested is organised differently to the others... if not (isNil enc) then - AddUnsharedRow cenv TableNames.Nested - (UnsharedRow - [| SimpleIndex (TableNames.TypeDef, tidx) + AddUnsharedRow cenv TableNames.Nested + (UnsharedRow + [| SimpleIndex (TableNames.TypeDef, tidx) SimpleIndex (TableNames.TypeDef, pidx) |]) |> ignore let props = td.Properties.AsList - if not (isNil props) then - AddUnsharedRow cenv TableNames.PropertyMap (GetTypeDefAsPropertyMapRow cenv tidx) |> ignore + if not (isNil props) then + AddUnsharedRow cenv TableNames.PropertyMap (GetTypeDefAsPropertyMapRow cenv tidx) |> ignore let events = td.Events.AsList - if not (isNil events) then + if not (isNil events) then AddUnsharedRow cenv TableNames.EventMap (GetTypeDefAsEventMapRow cenv tidx) |> ignore - // Now generate or assign index numbers for tables referenced by the maps. - // Don't yet generate contents of these tables - leave that to pass3, as - // code may need to embed these entries. + // Now generate or assign index numbers for tables referenced by the maps. + // Don't yet generate contents of these tables - leave that to pass3, as + // code may need to embed these entries. td.Implements |> List.iter (GenImplementsPass2 cenv env tidx) props |> List.iter (GenPropertyDefPass2 cenv tidx) events |> List.iter (GenEventDefPass2 cenv tidx) @@ -1165,56 +1154,56 @@ and GenTypeDefsPass2 pidx enc cenv tds = //===================================================================== exception MethodDefNotFound -let FindMethodDefIdx cenv mdkey = +let FindMethodDefIdx cenv mdkey = try cenv.methodDefIdxsByKey.GetTableEntry mdkey - with :? KeyNotFoundException -> - let typeNameOfIdx i = - match - (cenv.typeDefs.dict - |> Seq.fold (fun sofar kvp -> - let tkey2 = kvp.Key - let tidx2 = kvp.Value - if i = tidx2 then - if sofar = None then - Some tkey2 - else failwith "multiple type names map to index" - else sofar) None) with + with :? KeyNotFoundException -> + let typeNameOfIdx i = + match + (cenv.typeDefs.dict + |> Seq.fold (fun sofar kvp -> + let tkey2 = kvp.Key + let tidx2 = kvp.Value + if i = tidx2 then + if sofar = None then + Some tkey2 + else failwith "multiple type names map to index" + else sofar) None) with | Some x -> x - | None -> raise MethodDefNotFound + | None -> raise MethodDefNotFound let (TdKey (tenc, tname)) = typeNameOfIdx mdkey.TypeIdx dprintn ("The local method '"+(String.concat "." (tenc@[tname]))+"'::'"+mdkey.Name+"' was referenced but not declared") dprintn ("generic arity: "+string mdkey.GenericArity) - cenv.methodDefIdxsByKey.dict |> Seq.iter (fun (KeyValue(mdkey2, _)) -> - if mdkey2.TypeIdx = mdkey.TypeIdx && mdkey.Name = mdkey2.Name then + cenv.methodDefIdxsByKey.dict |> Seq.iter (fun (KeyValue(mdkey2, _)) -> + if mdkey2.TypeIdx = mdkey.TypeIdx && mdkey.Name = mdkey2.Name then let (TdKey (tenc2, tname2)) = typeNameOfIdx mdkey2.TypeIdx dprintn ("A method in '"+(String.concat "." (tenc2@[tname2]))+"' had the right name but the wrong signature:") - dprintn ("generic arity: "+string mdkey2.GenericArity) + dprintn ("generic arity: "+string mdkey2.GenericArity) dprintn (sprintf "mdkey2: %+A" mdkey2)) raise MethodDefNotFound -let rec GetMethodDefIdx cenv md = +let rec GetMethodDefIdx cenv md = cenv.methodDefIdxs.[md] -and FindFieldDefIdx cenv fdkey = - try cenv.fieldDefs.GetTableEntry fdkey - with :? KeyNotFoundException -> +and FindFieldDefIdx cenv fdkey = + try cenv.fieldDefs.GetTableEntry fdkey + with :? KeyNotFoundException -> errorR(InternalError("The local field "+fdkey.Name+" was referenced but not declared", range0)) 1 -and GetFieldDefAsFieldDefIdx cenv tidx fd = - FindFieldDefIdx cenv (GetKeyForFieldDef tidx fd) +and GetFieldDefAsFieldDefIdx cenv tidx fd = + FindFieldDefIdx cenv (GetKeyForFieldDef tidx fd) -// -------------------------------------------------------------------- -// ILMethodRef --> ILMethodDef. -// -// Only successfully converts ILMethodRef's referring to +// -------------------------------------------------------------------- +// ILMethodRef --> ILMethodDef. +// +// Only successfully converts ILMethodRef's referring to // methods in the module being emitted. -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- let GetMethodRefAsMethodDefIdx cenv (mref: ILMethodRef) = let tref = mref.DeclaringTypeRef - try + try if not (isTypeRefLocal tref) then failwithf "method referred to by method impl, event or property is not in a type defined in this module, method ref is %A" mref let tidx = GetIdxForTypeDef cenv (TdKey(tref.Enclosing, tref.Name)) @@ -1224,14 +1213,14 @@ let GetMethodRefAsMethodDefIdx cenv (mref: ILMethodRef) = failwithf "Error in GetMethodRefAsMethodDefIdx for mref = %A, error: %s" (mref.Name, tref.Name) e.Message let rec MethodRefInfoAsMemberRefRow cenv env fenv (nm, ty, callconv, args, ret, varargs, genarity) = - MemberRefRow(GetTypeAsMemberRefParent cenv env ty, - GetStringHeapIdx cenv nm, + MemberRefRow(GetTypeAsMemberRefParent cenv env ty, + GetStringHeapIdx cenv nm, GetMethodRefInfoAsBlobIdx cenv fenv (callconv, args, ret, varargs, genarity)) -and GetMethodRefInfoAsBlobIdx cenv env info = +and GetMethodRefInfoAsBlobIdx cenv env info = GetBytesAsBlobIdx cenv (GetCallsigAsBytes cenv env info) -let GetMethodRefInfoAsMemberRefIdx cenv env ((_, ty, _, _, _, _, _) as minfo) = +let GetMethodRefInfoAsMemberRefIdx cenv env ((_, ty, _, _, _, _, _) as minfo) = let fenv = envForMethodRef env ty FindOrAddSharedRow cenv TableNames.MemberRef (MethodRefInfoAsMemberRefRow cenv env fenv minfo) @@ -1243,26 +1232,26 @@ let GetMethodRefInfoAsMethodRefOrDef isAlwaysMethodDef cenv env ((nm, ty: ILType else (mdor_MemberRef, GetMethodRefInfoAsMemberRefIdx cenv env minfo) -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // ILMethodSpec --> ILMethodRef/ILMethodDef/ILMethodSpec -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GetMethodSpecInfoAsMethodSpecIdx cenv env (nm, ty, cc, args, ret, varargs, minst: ILGenericArgs) = +let rec GetMethodSpecInfoAsMethodSpecIdx cenv env (nm, ty, cc, args, ret, varargs, minst: ILGenericArgs) = let mdorTag, mdorRow = GetMethodRefInfoAsMethodRefOrDef false cenv env (nm, ty, cc, args, ret, varargs, minst.Length) - let blob = - emitBytesViaBuffer (fun bb -> + let blob = + emitBytesViaBuffer (fun bb -> bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_GENERICINST bb.EmitZ32 minst.Length minst |> List.iter (EmitType cenv env bb)) - FindOrAddSharedRow cenv TableNames.MethodSpec - (SharedRow + FindOrAddSharedRow cenv TableNames.MethodSpec + (SharedRow [| MethodDefOrRef (mdorTag, mdorRow) Blob (GetBytesAsBlobIdx cenv blob) |]) and GetMethodDefOrRefAsUncodedToken (tag, idx) = - let tab = + let tab = if tag = mdor_MethodDef then TableNames.Method - elif tag = mdor_MemberRef then TableNames.MemberRef + elif tag = mdor_MemberRef then TableNames.MemberRef else failwith "GetMethodDefOrRefAsUncodedToken" getUncodedToken tab idx @@ -1272,10 +1261,10 @@ and GetMethodSpecInfoAsUncodedToken cenv env ((_, _, _, _, _, _, minst: ILGeneri else getUncodedToken TableNames.MethodSpec (GetMethodSpecInfoAsMethodSpecIdx cenv env minfo) -and GetMethodSpecAsUncodedToken cenv env mspec = +and GetMethodSpecAsUncodedToken cenv env mspec = GetMethodSpecInfoAsUncodedToken cenv env (InfoOfMethodSpec mspec) -and GetMethodRefInfoOfMethodSpecInfo (nm, ty, cc, args, ret, varargs, minst: ILGenericArgs) = +and GetMethodRefInfoOfMethodSpecInfo (nm, ty, cc, args, ret, varargs, minst: ILGenericArgs) = (nm, ty, cc, args, ret, varargs, minst.Length) and GetMethodSpecAsMethodDefOrRef cenv env (mspec, varargs) = @@ -1284,42 +1273,42 @@ and GetMethodSpecAsMethodDefOrRef cenv env (mspec, varargs) = and GetMethodSpecAsMethodDef cenv env (mspec, varargs) = GetMethodRefInfoAsMethodRefOrDef true cenv env (GetMethodRefInfoOfMethodSpecInfo (InfoOfMethodSpec (mspec, varargs))) -and InfoOfMethodSpec (mspec: ILMethodSpec, varargs) = - (mspec.Name, - mspec.DeclaringType, - mspec.CallingConv, - mspec.FormalArgTypes, - mspec.FormalReturnType, - varargs, +and InfoOfMethodSpec (mspec: ILMethodSpec, varargs) = + (mspec.Name, + mspec.DeclaringType, + mspec.CallingConv, + mspec.FormalArgTypes, + mspec.FormalReturnType, + varargs, mspec.GenericArgs) -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // method_in_parent --> ILMethodRef/ILMethodDef -// +// // Used for MethodImpls. // -------------------------------------------------------------------- -let rec GetOverridesSpecAsMemberRefIdx cenv env ospec = +let rec GetOverridesSpecAsMemberRefIdx cenv env ospec = let fenv = envForOverrideSpec ospec let row = MethodRefInfoAsMemberRefRow cenv env fenv (ospec.MethodRef.Name, ospec.DeclaringType, ospec.MethodRef.CallingConv, ospec.MethodRef.ArgTypes, ospec.MethodRef.ReturnType, None, ospec.MethodRef.GenericArity) FindOrAddSharedRow cenv TableNames.MemberRef row - + and GetOverridesSpecAsMethodDefOrRef cenv env (ospec: ILOverridesSpec) = let ty = ospec.DeclaringType - if isTypeLocal ty then - if not ty.IsNominal then failwith "GetOverridesSpecAsMethodDefOrRef: unexpected local tref-ty" + if isTypeLocal ty then + if not ty.IsNominal then failwith "GetOverridesSpecAsMethodDefOrRef: unexpected local tref-ty" try (mdor_MethodDef, GetMethodRefAsMethodDefIdx cenv ospec.MethodRef) - with MethodDefNotFound -> (mdor_MemberRef, GetOverridesSpecAsMemberRefIdx cenv env ospec) - else - (mdor_MemberRef, GetOverridesSpecAsMemberRefIdx cenv env ospec) + with MethodDefNotFound -> (mdor_MemberRef, GetOverridesSpecAsMemberRefIdx cenv env ospec) + else + (mdor_MemberRef, GetOverridesSpecAsMemberRefIdx cenv env ospec) -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // ILMethodRef --> ILMethodRef/ILMethodDef -// +// // Used for Custom Attrs. -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GetMethodRefAsMemberRefIdx cenv env fenv (mref: ILMethodRef) = +let rec GetMethodRefAsMemberRefIdx cenv env fenv (mref: ILMethodRef) = let row = MethodRefInfoAsMemberRefRow cenv env fenv (mref.Name, mkILNonGenericBoxedTy mref.DeclaringTypeRef, mref.CallingConv, mref.ArgTypes, mref.ReturnType, None, mref.GenericArity) FindOrAddSharedRow cenv TableNames.MemberRef row @@ -1332,16 +1321,16 @@ and GetMethodRefAsCustomAttribType cenv (mref: ILMethodRef) = else (cat_MemberRef, GetMethodRefAsMemberRefIdx cenv fenv fenv mref) -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // ILAttributes --> CustomAttribute rows -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GetCustomAttrDataAsBlobIdx cenv (data: byte[]) = +let rec GetCustomAttrDataAsBlobIdx cenv (data: byte[]) = if data.Length = 0 then 0 else GetBytesAsBlobIdx cenv data and GetCustomAttrRow cenv hca (attr: ILAttribute) = let cat = GetMethodRefAsCustomAttribType cenv attr.Method.MethodRef - let data = getCustomAttrData attr + let data = getCustomAttrData cenv.ilg attr for element in attr.Elements do match element with | ILAttribElem.Type (Some ty) when ty.IsNominal -> GetTypeRefAsTypeRefIdx cenv ty.TypeRef |> ignore @@ -1354,50 +1343,50 @@ and GetCustomAttrRow cenv hca (attr: ILAttribute) = Blob (GetCustomAttrDataAsBlobIdx cenv data) |] -and GenCustomAttrPass3Or4 cenv hca attr = +and GenCustomAttrPass3Or4 cenv hca attr = AddUnsharedRow cenv TableNames.CustomAttribute (GetCustomAttrRow cenv hca attr) |> ignore -and GenCustomAttrsPass3Or4 cenv hca (attrs: ILAttributes) = - attrs.AsArray |> Array.iter (GenCustomAttrPass3Or4 cenv hca) +and GenCustomAttrsPass3Or4 cenv hca (attrs: ILAttributes) = + attrs.AsArray |> Array.iter (GenCustomAttrPass3Or4 cenv hca) -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // ILSecurityDecl --> DeclSecurity rows // -------------------------------------------------------------------- *) -let rec GetSecurityDeclRow cenv hds (ILSecurityDecl (action, s)) = - UnsharedRow +let rec GetSecurityDeclRow cenv hds (ILSecurityDecl (action, s)) = + UnsharedRow [| UShort (uint16 (List.assoc action (Lazy.force ILSecurityActionMap))) HasDeclSecurity (fst hds, snd hds) - Blob (GetBytesAsBlobIdx cenv s) |] + Blob (GetBytesAsBlobIdx cenv s) |] -and GenSecurityDeclPass3 cenv hds attr = +and GenSecurityDeclPass3 cenv hds attr = AddUnsharedRow cenv TableNames.Permission (GetSecurityDeclRow cenv hds attr) |> ignore -and GenSecurityDeclsPass3 cenv hds attrs = - List.iter (GenSecurityDeclPass3 cenv hds) attrs +and GenSecurityDeclsPass3 cenv hds attrs = + List.iter (GenSecurityDeclPass3 cenv hds) attrs -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // ILFieldSpec --> FieldRef or ILFieldDef row -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GetFieldSpecAsMemberRefRow cenv env fenv (fspec: ILFieldSpec) = - MemberRefRow (GetTypeAsMemberRefParent cenv env fspec.DeclaringType, - GetStringHeapIdx cenv fspec.Name, +let rec GetFieldSpecAsMemberRefRow cenv env fenv (fspec: ILFieldSpec) = + MemberRefRow (GetTypeAsMemberRefParent cenv env fspec.DeclaringType, + GetStringHeapIdx cenv fspec.Name, GetFieldSpecSigAsBlobIdx cenv fenv fspec) -and GetFieldSpecAsMemberRefIdx cenv env fspec = +and GetFieldSpecAsMemberRefIdx cenv env fspec = let fenv = envForFieldSpec fspec FindOrAddSharedRow cenv TableNames.MemberRef (GetFieldSpecAsMemberRefRow cenv env fenv fspec) // REVIEW: write into an accumulating buffer -and EmitFieldSpecSig cenv env (bb: ByteBuffer) (fspec: ILFieldSpec) = +and EmitFieldSpecSig cenv env (bb: ByteBuffer) (fspec: ILFieldSpec) = bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_FIELD EmitType cenv env bb fspec.FormalType -and GetFieldSpecSigAsBytes cenv env x = - emitBytesViaBuffer (fun bb -> EmitFieldSpecSig cenv env bb x) +and GetFieldSpecSigAsBytes cenv env x = + emitBytesViaBuffer (fun bb -> EmitFieldSpecSig cenv env bb x) -and GetFieldSpecSigAsBlobIdx cenv env x = +and GetFieldSpecSigAsBlobIdx cenv env x = GetBytesAsBlobIdx cenv (GetFieldSpecSigAsBytes cenv env x) and GetFieldSpecAsFieldDefOrRef cenv env (fspec: ILFieldSpec) = @@ -1408,104 +1397,96 @@ and GetFieldSpecAsFieldDefOrRef cenv env (fspec: ILFieldSpec) = let tidx = GetIdxForTypeDef cenv (TdKey(tref.Enclosing, tref.Name)) let fdkey = FieldDefKey (tidx, fspec.Name, fspec.FormalType) (true, FindFieldDefIdx cenv fdkey) - else + else (false, GetFieldSpecAsMemberRefIdx cenv env fspec) and GetFieldDefOrRefAsUncodedToken (tag, idx) = let tab = if tag then TableNames.Field else TableNames.MemberRef getUncodedToken tab idx -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // callsig --> StandAloneSig -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let GetCallsigAsBlobIdx cenv env (callsig: ILCallingSignature, varargs) = - GetBytesAsBlobIdx cenv - (GetCallsigAsBytes cenv env (callsig.CallingConv, - callsig.ArgTypes, +let GetCallsigAsBlobIdx cenv env (callsig: ILCallingSignature, varargs) = + GetBytesAsBlobIdx cenv + (GetCallsigAsBytes cenv env (callsig.CallingConv, + callsig.ArgTypes, callsig.ReturnType, varargs, 0)) - -let GetCallsigAsStandAloneSigRow cenv env x = + +let GetCallsigAsStandAloneSigRow cenv env x = SharedRow [| Blob (GetCallsigAsBlobIdx cenv env x) |] -let GetCallsigAsStandAloneSigIdx cenv env info = +let GetCallsigAsStandAloneSigIdx cenv env info = FindOrAddSharedRow cenv TableNames.StandAloneSig (GetCallsigAsStandAloneSigRow cenv env info) -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // local signatures --> BlobHeap idx -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let EmitLocalSig cenv env (bb: ByteBuffer) (locals: ILLocals) = +let EmitLocalSig cenv env (bb: ByteBuffer) (locals: ILLocals) = bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_LOCAL_SIG bb.EmitZ32 locals.Length locals |> List.iter (EmitLocalInfo cenv env bb) -let GetLocalSigAsBlobHeapIdx cenv env locals = +let GetLocalSigAsBlobHeapIdx cenv env locals = GetBytesAsBlobIdx cenv (emitBytesViaBuffer (fun bb -> EmitLocalSig cenv env bb locals)) -let GetLocalSigAsStandAloneSigIdx cenv env locals = +let GetLocalSigAsStandAloneSigIdx cenv env locals = SharedRow [| Blob (GetLocalSigAsBlobHeapIdx cenv env locals) |] -type ExceptionClauseKind = - | FinallyClause - | FaultClause - | TypeFilterClause of int32 +type ExceptionClauseKind = + | FinallyClause + | FaultClause + | TypeFilterClause of int32 | FilterClause of int type ExceptionClauseSpec = (int * int * int * int * ExceptionClauseKind) -/// Arbitrary value -[] -let CodeBufferCapacity = 200 +type CodeBuffer = -type CodeBuffer = - - // -------------------------------------------------------------------- + // -------------------------------------------------------------------- // Buffer to write results of emitting code into. Also record: // - branch sources (where fixups will occur) // - possible branch destinations // - locations of embedded handles into the string table // - the exception table - // -------------------------------------------------------------------- - { code: ByteBuffer - /// (instruction; optional short form); start of instr in code buffer; code loc for the end of the instruction the fixup resides in ; where is the destination of the fixup - mutable reqdBrFixups: ((int * int option) * int * ILCodeLabel list) list - availBrFixups: Dictionary - /// code loc to fixup in code buffer - mutable reqdStringFixupsInMethod: (int * int) list - /// data for exception handling clauses - mutable seh: ExceptionClauseSpec list + // -------------------------------------------------------------------- + { code: ByteBuffer + /// (instruction; optional short form); start of instr in code buffer; code loc for the end of the instruction the fixup resides in ; where is the destination of the fixup + mutable reqdBrFixups: ((int * int option) * int * ILCodeLabel list) list + availBrFixups: Dictionary + /// code loc to fixup in code buffer + mutable reqdStringFixupsInMethod: (int * int) list + /// data for exception handling clauses + mutable seh: ExceptionClauseSpec list seqpoints: ResizeArray } - interface IDisposable with - member this.Dispose() = - (this.code :> IDisposable).Dispose() - - static member Create _nm = + static member Create _nm = { seh = [] - code= ByteBuffer.Create CodeBufferCapacity + code= ByteBuffer.Create 200 reqdBrFixups=[] reqdStringFixupsInMethod=[] - availBrFixups = Dictionary<_, _>(10, HashIdentity.Structural) + availBrFixups = Dictionary<_, _>(10, HashIdentity.Structural) seqpoints = new ResizeArray<_>(10) } member codebuf.EmitExceptionClause seh = codebuf.seh <- seh :: codebuf.seh - member codebuf.EmitSeqPoint cenv (m: ILSourceMarker) = - if cenv.generatePdb then - // table indexes are 1-based, document array indexes are 0-based - let doc = (cenv.documents.FindOrAddSharedEntry m.Document) - 1 - codebuf.seqpoints.Add + member codebuf.EmitSeqPoint cenv (m: ILSourceMarker) = + if cenv.generatePdb then + // table indexes are 1-based, document array indexes are 0-based + let doc = (cenv.documents.FindOrAddSharedEntry m.Document) - 1 + codebuf.seqpoints.Add { Document=doc Offset= codebuf.code.Position Line=m.Line Column=m.Column EndLine=m.EndLine EndColumn=m.EndColumn } - + member codebuf.EmitByte x = codebuf.code.EmitIntAsByte x member codebuf.EmitUInt16 x = codebuf.code.EmitUInt16 x member codebuf.EmitInt32 x = codebuf.code.EmitInt32 x @@ -1513,51 +1494,51 @@ type CodeBuffer = member codebuf.EmitUncodedToken u = codebuf.EmitInt32 u - member codebuf.RecordReqdStringFixup stringIdx = + member codebuf.RecordReqdStringFixup stringIdx = codebuf.reqdStringFixupsInMethod <- (codebuf.code.Position, stringIdx) :: codebuf.reqdStringFixupsInMethod - // Write a special value in that we check later when applying the fixup + // Write a special value in that we check later when applying the fixup codebuf.EmitInt32 0xdeadbeef - member codebuf.RecordReqdBrFixups i tgs = + member codebuf.RecordReqdBrFixups i tgs = codebuf.reqdBrFixups <- (i, codebuf.code.Position, tgs) :: codebuf.reqdBrFixups - // Write a special value in that we check later when applying the fixup - // Value is 0x11 {deadbbbb}* where 11 is for the instruction and deadbbbb is for each target - codebuf.EmitByte 0x11 // for the instruction - (if fst i = i_switch then + // Write a special value in that we check later when applying the fixup + // Value is 0x11 {deadbbbb}* where 11 is for the instruction and deadbbbb is for each target + codebuf.EmitByte 0x11 // for the instruction + (if fst i = i_switch then codebuf.EmitInt32 tgs.Length) List.iter (fun _ -> codebuf.EmitInt32 0xdeadbbbb) tgs member codebuf.RecordReqdBrFixup i tg = codebuf.RecordReqdBrFixups i [tg] - member codebuf.RecordAvailBrFixup tg = + member codebuf.RecordAvailBrFixup tg = codebuf.availBrFixups.[tg] <- codebuf.code.Position -module Codebuf = - // -------------------------------------------------------------------- +module Codebuf = + // -------------------------------------------------------------------- // Applying branch fixups. Use short versions of instructions // wherever possible. Sadly we can only determine if we can use a short - // version after we've layed out the code for all other instructions. - // This in turn means that using a short version may change + // version after we've layed out the code for all other instructions. + // This in turn means that using a short version may change // the various offsets into the code. - // -------------------------------------------------------------------- + // -------------------------------------------------------------------- - let binaryChop p (arr: 'T[]) = + let binaryChop p (arr: 'T[]) = let rec go n m = if n > m then raise (KeyNotFoundException("binary chop did not find element")) - else + else let i = (n+m)/2 - let c = p arr.[i] + let c = p arr.[i] if c = 0 then i elif c < 0 then go n (i-1) else go (i+1) m go 0 (Array.length arr) - let applyBrFixups (origCode : byte[]) origExnClauses origReqdStringFixups (origAvailBrFixups: Dictionary) origReqdBrFixups origSeqPoints origScopes = + let applyBrFixups (origCode : byte[]) origExnClauses origReqdStringFixups (origAvailBrFixups: Dictionary) origReqdBrFixups origSeqPoints origScopes = let orderedOrigReqdBrFixups = origReqdBrFixups |> List.sortBy (fun (_, fixupLoc, _) -> fixupLoc) - use newCode = ByteBuffer.Create origCode.Length + let newCode = ByteBuffer.Create origCode.Length - // Copy over all the code, working out whether the branches will be short - // or long and adjusting the branch destinations. Record an adjust function to adjust all the other - // gumpf that refers to fixed offsets in the code stream. - let newCode, newReqdBrFixups, adjuster = + // Copy over all the code, working out whether the branches will be short + // or long and adjusting the branch destinations. Record an adjust function to adjust all the other + // gumpf that refers to fixed offsets in the code stream. + let newCode, newReqdBrFixups, adjuster = let remainingReqdFixups = ref orderedOrigReqdBrFixups let origWhere = ref 0 let newWhere = ref 0 @@ -1567,32 +1548,32 @@ module Codebuf = let adjustments = ref [] while (!remainingReqdFixups <> [] || not !doneLast) do - let doingLast = isNil !remainingReqdFixups + let doingLast = isNil !remainingReqdFixups let origStartOfNoBranchBlock = !origWhere let newStartOfNoBranchBlock = !newWhere - let origEndOfNoBranchBlock = + let origEndOfNoBranchBlock = if doingLast then origCode.Length - else + else let (_, origStartOfInstr, _) = List.head !remainingReqdFixups origStartOfInstr - // Copy over a chunk of non-branching code + // Copy over a chunk of non-branching code let nobranch_len = origEndOfNoBranchBlock - origStartOfNoBranchBlock newCode.EmitBytes origCode.[origStartOfNoBranchBlock..origStartOfNoBranchBlock+nobranch_len-1] - - // Record how to adjust addresses in this range, including the branch instruction - // we write below, or the end of the method if we're doing the last bblock + + // Record how to adjust addresses in this range, including the branch instruction + // we write below, or the end of the method if we're doing the last bblock adjustments := (origStartOfNoBranchBlock, origEndOfNoBranchBlock, newStartOfNoBranchBlock) :: !adjustments - - // Increment locations to the branch instruction we're really interested in + + // Increment locations to the branch instruction we're really interested in origWhere := origEndOfNoBranchBlock newWhere := !newWhere + nobranch_len - - // Now do the branch instruction. Decide whether the fixup will be short or long in the new code - if doingLast then + + // Now do the branch instruction. Decide whether the fixup will be short or long in the new code + if doingLast then doneLast := true - else + else let (i, origStartOfInstr, tgs: ILCodeLabel list) = List.head !remainingReqdFixups remainingReqdFixups := List.tail !remainingReqdFixups if origCode.[origStartOfInstr] <> 0x11uy then failwith "br fixup sanity check failed (1)" @@ -1602,17 +1583,17 @@ module Codebuf = let origEndOfInstr = origStartOfInstr + i_length + 4 * tgs.Length let newEndOfInstrIfSmall = !newWhere + i_length + 1 let newEndOfInstrIfBig = !newWhere + i_length + 4 * tgs.Length - - let short = - match i, tgs with - | (_, Some i_short), [tg] + + let short = + match i, tgs with + | (_, Some i_short), [tg] when - // Use the original offsets to compute if the branch is small or large. This is - // a safe approximation because code only gets smaller. + // Use the original offsets to compute if the branch is small or large. This is + // a safe approximation because code only gets smaller. (let origDest = match origAvailBrFixups.TryGetValue tg with | true, fixup -> fixup - | _ -> + | _ -> dprintn ("branch target " + formatCodeLabel tg + " not found in code") 666666 let origRelOffset = origDest - origEndOfInstr @@ -1622,77 +1603,77 @@ module Codebuf = true | (i_long, _), _ -> newCode.EmitIntAsByte i_long - (if i_long = i_switch then + (if i_long = i_switch then newCode.EmitInt32 tgs.Length) false - + newWhere := !newWhere + i_length if !newWhere <> newCode.Position then dprintn "mismatch between newWhere and newCode" tgs |> List.iter (fun tg -> let origFixupLoc = !origWhere checkFixup32 origCode origFixupLoc 0xdeadbbbb - - if short then + + if short then newReqdBrFixups := (!newWhere, newEndOfInstrIfSmall, tg, true) :: !newReqdBrFixups newCode.EmitIntAsByte 0x98 (* sanity check *) newWhere := !newWhere + 1 - else + else newReqdBrFixups := (!newWhere, newEndOfInstrIfBig, tg, false) :: !newReqdBrFixups newCode.EmitInt32 0xf00dd00f (* sanity check *) newWhere := !newWhere + 4 if !newWhere <> newCode.Position then dprintn "mismatch between newWhere and newCode" origWhere := !origWhere + 4) - + if !origWhere <> origEndOfInstr then dprintn "mismatch between origWhere and origEndOfInstr" - let adjuster = + let adjuster = let arr = Array.ofList (List.rev !adjustments) - fun addr -> - let i = - try binaryChop (fun (a1, a2, _) -> if addr < a1 then -1 elif addr > a2 then 1 else 0) arr - with - :? KeyNotFoundException -> + fun addr -> + let i = + try binaryChop (fun (a1, a2, _) -> if addr < a1 then -1 elif addr > a2 then 1 else 0) arr + with + :? KeyNotFoundException -> failwith ("adjuster: address "+string addr+" is out of range") let (origStartOfNoBranchBlock, _, newStartOfNoBranchBlock) = arr.[i] - addr - (origStartOfNoBranchBlock - newStartOfNoBranchBlock) + addr - (origStartOfNoBranchBlock - newStartOfNoBranchBlock) - newCode.AsMemory().ToArray(), - !newReqdBrFixups, + newCode.Close(), + !newReqdBrFixups, adjuster - // Now adjust everything - let newAvailBrFixups = - let tab = Dictionary<_, _>(10, HashIdentity.Structural) - for (KeyValue(tglab, origBrDest)) in origAvailBrFixups do + // Now adjust everything + let newAvailBrFixups = + let tab = Dictionary<_, _>(10, HashIdentity.Structural) + for (KeyValue(tglab, origBrDest)) in origAvailBrFixups do tab.[tglab] <- adjuster origBrDest tab let newReqdStringFixups = List.map (fun (origFixupLoc, stok) -> adjuster origFixupLoc, stok) origReqdStringFixups let newSeqPoints = Array.map (fun (sp: PdbSequencePoint) -> {sp with Offset=adjuster sp.Offset}) origSeqPoints - let newExnClauses = + let newExnClauses = origExnClauses |> List.map (fun (st1, sz1, st2, sz2, kind) -> - (adjuster st1, (adjuster (st1 + sz1) - adjuster st1), - adjuster st2, (adjuster (st2 + sz2) - adjuster st2), - (match kind with + (adjuster st1, (adjuster (st1 + sz1) - adjuster st1), + adjuster st2, (adjuster (st2 + sz2) - adjuster st2), + (match kind with | FinallyClause | FaultClause | TypeFilterClause _ -> kind | FilterClause n -> FilterClause (adjuster n)))) - + let newScopes = let rec remap scope = {scope with StartOffset = adjuster scope.StartOffset EndOffset = adjuster scope.EndOffset Children = Array.map remap scope.Children } List.map remap origScopes - - // Now apply the adjusted fixups in the new code + + // Now apply the adjusted fixups in the new code newReqdBrFixups |> List.iter (fun (newFixupLoc, endOfInstr, tg, small) -> match newAvailBrFixups.TryGetValue tg with | true, n -> let relOffset = n - endOfInstr - if small then + if small then if Bytes.get newCode newFixupLoc <> 0x98 then failwith "br fixup sanity check failed" newCode.[newFixupLoc] <- b0 relOffset - else + else checkFixup32 newCode newFixupLoc 0xf00dd00fl applyFixup32 newCode newFixupLoc relOffset | _ -> failwith ("target " + formatCodeLabel tg + " not found in new fixups")) @@ -1700,91 +1681,91 @@ module Codebuf = newCode, newReqdStringFixups, newExnClauses, newSeqPoints, newScopes - // -------------------------------------------------------------------- + // -------------------------------------------------------------------- // Structured residue of emitting instructions: SEH exception handling // and scopes for local variables. - // -------------------------------------------------------------------- + // -------------------------------------------------------------------- - // Emitting instructions generates a tree of seh specifications - // We then emit the exception handling specs separately. - // nb. ECMA spec says the SEH blocks must be returned inside-out - type SEHTree = + // Emitting instructions generates a tree of seh specifications + // We then emit the exception handling specs separately. + // nb. ECMA spec says the SEH blocks must be returned inside-out + type SEHTree = | Node of ExceptionClauseSpec option * SEHTree list + - - // -------------------------------------------------------------------- + // -------------------------------------------------------------------- // Table of encodings for instructions without arguments, also indexes // for all instructions. - // -------------------------------------------------------------------- + // -------------------------------------------------------------------- let encodingsForNoArgInstrs = Dictionary<_, _>(300, HashIdentity.Structural) - let _ = - List.iter + let _ = + List.iter (fun (x, mk) -> encodingsForNoArgInstrs.[mk] <- x) (noArgInstrs.Force()) let encodingsOfNoArgInstr si = encodingsForNoArgInstrs.[si] - // -------------------------------------------------------------------- + // -------------------------------------------------------------------- // Emit instructions - // -------------------------------------------------------------------- + // -------------------------------------------------------------------- /// Emit the code for an instruction - let emitInstrCode (codebuf: CodeBuffer) i = - if i > 0xFF then - assert (i >>> 8 = 0xFE) - codebuf.EmitByte ((i >>> 8) &&& 0xFF) - codebuf.EmitByte (i &&& 0xFF) - else + let emitInstrCode (codebuf: CodeBuffer) i = + if i > 0xFF then + assert (i >>> 8 = 0xFE) + codebuf.EmitByte ((i >>> 8) &&& 0xFF) + codebuf.EmitByte (i &&& 0xFF) + else codebuf.EmitByte i - let emitTypeInstr cenv codebuf env i ty = - emitInstrCode codebuf i + let emitTypeInstr cenv codebuf env i ty = + emitInstrCode codebuf i codebuf.EmitUncodedToken (getTypeDefOrRefAsUncodedToken (GetTypeAsTypeDefOrRef cenv env ty)) - let emitMethodSpecInfoInstr cenv codebuf env i mspecinfo = - emitInstrCode codebuf i + let emitMethodSpecInfoInstr cenv codebuf env i mspecinfo = + emitInstrCode codebuf i codebuf.EmitUncodedToken (GetMethodSpecInfoAsUncodedToken cenv env mspecinfo) - let emitMethodSpecInstr cenv codebuf env i mspec = - emitInstrCode codebuf i + let emitMethodSpecInstr cenv codebuf env i mspec = + emitInstrCode codebuf i codebuf.EmitUncodedToken (GetMethodSpecAsUncodedToken cenv env mspec) - let emitFieldSpecInstr cenv codebuf env i fspec = - emitInstrCode codebuf i + let emitFieldSpecInstr cenv codebuf env i fspec = + emitInstrCode codebuf i codebuf.EmitUncodedToken (GetFieldDefOrRefAsUncodedToken (GetFieldSpecAsFieldDefOrRef cenv env fspec)) - let emitShortUInt16Instr codebuf (i_short, i) x = + let emitShortUInt16Instr codebuf (i_short, i) x = let n = int32 x - if n <= 255 then - emitInstrCode codebuf i_short + if n <= 255 then + emitInstrCode codebuf i_short codebuf.EmitByte n - else - emitInstrCode codebuf i + else + emitInstrCode codebuf i codebuf.EmitUInt16 x - let emitShortInt32Instr codebuf (i_short, i) x = - if x >= (-128) && x <= 127 then - emitInstrCode codebuf i_short + let emitShortInt32Instr codebuf (i_short, i) x = + if x >= (-128) && x <= 127 then + emitInstrCode codebuf i_short codebuf.EmitByte (if x < 0x0 then x + 256 else x) - else - emitInstrCode codebuf i + else + emitInstrCode codebuf i codebuf.EmitInt32 x - let emitTailness (cenv: cenv) codebuf tl = + let emitTailness (cenv: cenv) codebuf tl = if tl = Tailcall && cenv.emitTailcalls then emitInstrCode codebuf i_tail //let emitAfterTailcall codebuf tl = // if tl = Tailcall then emitInstrCode codebuf i_ret - let emitVolatility codebuf tl = + let emitVolatility codebuf tl = if tl = Volatile then emitInstrCode codebuf i_volatile - let emitConstrained cenv codebuf env ty = + let emitConstrained cenv codebuf env ty = emitInstrCode codebuf i_constrained codebuf.EmitUncodedToken (getTypeDefOrRefAsUncodedToken (GetTypeAsTypeDefOrRef cenv env ty)) - let emitAlignment codebuf tl = - match tl with + let emitAlignment codebuf tl = + match tl with | Aligned -> () | Unaligned1 -> emitInstrCode codebuf i_unaligned; codebuf.EmitByte 0x1 | Unaligned2 -> emitInstrCode codebuf i_unaligned; codebuf.EmitByte 0x2 @@ -1794,203 +1775,203 @@ module Codebuf = match instr with | si when isNoArgInstr si -> emitInstrCode codebuf (encodingsOfNoArgInstr si) - | I_brcmp (cmp, tg1) -> + | I_brcmp (cmp, tg1) -> codebuf.RecordReqdBrFixup ((Lazy.force ILCmpInstrMap).[cmp], Some (Lazy.force ILCmpInstrRevMap).[cmp]) tg1 | I_br tg -> codebuf.RecordReqdBrFixup (i_br, Some i_br_s) tg | I_seqpoint s -> codebuf.EmitSeqPoint cenv s | I_leave tg -> codebuf.RecordReqdBrFixup (i_leave, Some i_leave_s) tg - | I_call (tl, mspec, varargs) -> + | I_call (tl, mspec, varargs) -> emitTailness cenv codebuf tl emitMethodSpecInstr cenv codebuf env i_call (mspec, varargs) //emitAfterTailcall codebuf tl - | I_callvirt (tl, mspec, varargs) -> + | I_callvirt (tl, mspec, varargs) -> emitTailness cenv codebuf tl emitMethodSpecInstr cenv codebuf env i_callvirt (mspec, varargs) //emitAfterTailcall codebuf tl - | I_callconstraint (tl, ty, mspec, varargs) -> + | I_callconstraint (tl, ty, mspec, varargs) -> emitTailness cenv codebuf tl emitConstrained cenv codebuf env ty emitMethodSpecInstr cenv codebuf env i_callvirt (mspec, varargs) //emitAfterTailcall codebuf tl - | I_newobj (mspec, varargs) -> + | I_newobj (mspec, varargs) -> emitMethodSpecInstr cenv codebuf env i_newobj (mspec, varargs) - | I_ldftn mspec -> + | I_ldftn mspec -> emitMethodSpecInstr cenv codebuf env i_ldftn (mspec, None) - | I_ldvirtftn mspec -> + | I_ldvirtftn mspec -> emitMethodSpecInstr cenv codebuf env i_ldvirtftn (mspec, None) - | I_calli (tl, callsig, varargs) -> + | I_calli (tl, callsig, varargs) -> emitTailness cenv codebuf tl - emitInstrCode codebuf i_calli + emitInstrCode codebuf i_calli codebuf.EmitUncodedToken (getUncodedToken TableNames.StandAloneSig (GetCallsigAsStandAloneSigIdx cenv env (callsig, varargs))) //emitAfterTailcall codebuf tl - | I_ldarg u16 -> emitShortUInt16Instr codebuf (i_ldarg_s, i_ldarg) u16 - | I_starg u16 -> emitShortUInt16Instr codebuf (i_starg_s, i_starg) u16 - | I_ldarga u16 -> emitShortUInt16Instr codebuf (i_ldarga_s, i_ldarga) u16 - | I_ldloc u16 -> emitShortUInt16Instr codebuf (i_ldloc_s, i_ldloc) u16 - | I_stloc u16 -> emitShortUInt16Instr codebuf (i_stloc_s, i_stloc) u16 - | I_ldloca u16 -> emitShortUInt16Instr codebuf (i_ldloca_s, i_ldloca) u16 + | I_ldarg u16 -> emitShortUInt16Instr codebuf (i_ldarg_s, i_ldarg) u16 + | I_starg u16 -> emitShortUInt16Instr codebuf (i_starg_s, i_starg) u16 + | I_ldarga u16 -> emitShortUInt16Instr codebuf (i_ldarga_s, i_ldarga) u16 + | I_ldloc u16 -> emitShortUInt16Instr codebuf (i_ldloc_s, i_ldloc) u16 + | I_stloc u16 -> emitShortUInt16Instr codebuf (i_stloc_s, i_stloc) u16 + | I_ldloca u16 -> emitShortUInt16Instr codebuf (i_ldloca_s, i_ldloca) u16 - | I_cpblk (al, vol) -> - emitAlignment codebuf al + | I_cpblk (al, vol) -> + emitAlignment codebuf al emitVolatility codebuf vol emitInstrCode codebuf i_cpblk - | I_initblk (al, vol) -> - emitAlignment codebuf al + | I_initblk (al, vol) -> + emitAlignment codebuf al emitVolatility codebuf vol emitInstrCode codebuf i_initblk - | (AI_ldc (DT_I4, ILConst.I4 x)) -> + | (AI_ldc (DT_I4, ILConst.I4 x)) -> emitShortInt32Instr codebuf (i_ldc_i4_s, i_ldc_i4) x - | (AI_ldc (DT_I8, ILConst.I8 x)) -> - emitInstrCode codebuf i_ldc_i8 + | (AI_ldc (DT_I8, ILConst.I8 x)) -> + emitInstrCode codebuf i_ldc_i8 codebuf.EmitInt64 x - | (AI_ldc (_, ILConst.R4 x)) -> - emitInstrCode codebuf i_ldc_r4 + | (AI_ldc (_, ILConst.R4 x)) -> + emitInstrCode codebuf i_ldc_r4 codebuf.EmitInt32 (bitsOfSingle x) - | (AI_ldc (_, ILConst.R8 x)) -> - emitInstrCode codebuf i_ldc_r8 + | (AI_ldc (_, ILConst.R8 x)) -> + emitInstrCode codebuf i_ldc_r8 codebuf.EmitInt64 (bitsOfDouble x) - | I_ldind (al, vol, dt) -> - emitAlignment codebuf al + | I_ldind (al, vol, dt) -> + emitAlignment codebuf al emitVolatility codebuf vol - emitInstrCode codebuf - (match dt with + emitInstrCode codebuf + (match dt with | DT_I -> i_ldind_i - | DT_I1 -> i_ldind_i1 - | DT_I2 -> i_ldind_i2 - | DT_I4 -> i_ldind_i4 - | DT_U1 -> i_ldind_u1 - | DT_U2 -> i_ldind_u2 - | DT_U4 -> i_ldind_u4 - | DT_I8 -> i_ldind_i8 - | DT_R4 -> i_ldind_r4 - | DT_R8 -> i_ldind_r8 + | DT_I1 -> i_ldind_i1 + | DT_I2 -> i_ldind_i2 + | DT_I4 -> i_ldind_i4 + | DT_U1 -> i_ldind_u1 + | DT_U2 -> i_ldind_u2 + | DT_U4 -> i_ldind_u4 + | DT_I8 -> i_ldind_i8 + | DT_R4 -> i_ldind_r4 + | DT_R8 -> i_ldind_r8 | DT_REF -> i_ldind_ref | _ -> failwith "ldind") - | I_stelem dt -> - emitInstrCode codebuf - (match dt with + | I_stelem dt -> + emitInstrCode codebuf + (match dt with | DT_I | DT_U -> i_stelem_i - | DT_U1 | DT_I1 -> i_stelem_i1 - | DT_I2 | DT_U2 -> i_stelem_i2 - | DT_I4 | DT_U4 -> i_stelem_i4 - | DT_I8 | DT_U8 -> i_stelem_i8 - | DT_R4 -> i_stelem_r4 - | DT_R8 -> i_stelem_r8 + | DT_U1 | DT_I1 -> i_stelem_i1 + | DT_I2 | DT_U2 -> i_stelem_i2 + | DT_I4 | DT_U4 -> i_stelem_i4 + | DT_I8 | DT_U8 -> i_stelem_i8 + | DT_R4 -> i_stelem_r4 + | DT_R8 -> i_stelem_r8 | DT_REF -> i_stelem_ref | _ -> failwith "stelem") - | I_ldelem dt -> - emitInstrCode codebuf - (match dt with + | I_ldelem dt -> + emitInstrCode codebuf + (match dt with | DT_I -> i_ldelem_i - | DT_I1 -> i_ldelem_i1 - | DT_I2 -> i_ldelem_i2 - | DT_I4 -> i_ldelem_i4 - | DT_I8 -> i_ldelem_i8 - | DT_U1 -> i_ldelem_u1 - | DT_U2 -> i_ldelem_u2 - | DT_U4 -> i_ldelem_u4 - | DT_R4 -> i_ldelem_r4 - | DT_R8 -> i_ldelem_r8 + | DT_I1 -> i_ldelem_i1 + | DT_I2 -> i_ldelem_i2 + | DT_I4 -> i_ldelem_i4 + | DT_I8 -> i_ldelem_i8 + | DT_U1 -> i_ldelem_u1 + | DT_U2 -> i_ldelem_u2 + | DT_U4 -> i_ldelem_u4 + | DT_R4 -> i_ldelem_r4 + | DT_R8 -> i_ldelem_r8 | DT_REF -> i_ldelem_ref | _ -> failwith "ldelem") - | I_stind (al, vol, dt) -> - emitAlignment codebuf al + | I_stind (al, vol, dt) -> + emitAlignment codebuf al emitVolatility codebuf vol - emitInstrCode codebuf - (match dt with + emitInstrCode codebuf + (match dt with | DT_U | DT_I -> i_stind_i - | DT_U1 | DT_I1 -> i_stind_i1 - | DT_U2 | DT_I2 -> i_stind_i2 - | DT_U4 | DT_I4 -> i_stind_i4 - | DT_U8 | DT_I8 -> i_stind_i8 - | DT_R4 -> i_stind_r4 - | DT_R8 -> i_stind_r8 + | DT_U1 | DT_I1 -> i_stind_i1 + | DT_U2 | DT_I2 -> i_stind_i2 + | DT_U4 | DT_I4 -> i_stind_i4 + | DT_U8 | DT_I8 -> i_stind_i8 + | DT_R4 -> i_stind_r4 + | DT_R8 -> i_stind_r8 | DT_REF -> i_stind_ref | _ -> failwith "stelem") | I_switch labs -> codebuf.RecordReqdBrFixups (i_switch, None) labs - | I_ldfld (al, vol, fspec) -> - emitAlignment codebuf al + | I_ldfld (al, vol, fspec) -> + emitAlignment codebuf al emitVolatility codebuf vol emitFieldSpecInstr cenv codebuf env i_ldfld fspec - | I_ldflda fspec -> + | I_ldflda fspec -> emitFieldSpecInstr cenv codebuf env i_ldflda fspec - | I_ldsfld (vol, fspec) -> + | I_ldsfld (vol, fspec) -> emitVolatility codebuf vol emitFieldSpecInstr cenv codebuf env i_ldsfld fspec - | I_ldsflda fspec -> + | I_ldsflda fspec -> emitFieldSpecInstr cenv codebuf env i_ldsflda fspec - | I_stfld (al, vol, fspec) -> - emitAlignment codebuf al + | I_stfld (al, vol, fspec) -> + emitAlignment codebuf al emitVolatility codebuf vol emitFieldSpecInstr cenv codebuf env i_stfld fspec - | I_stsfld (vol, fspec) -> + | I_stsfld (vol, fspec) -> emitVolatility codebuf vol emitFieldSpecInstr cenv codebuf env i_stsfld fspec - | I_ldtoken tok -> + | I_ldtoken tok -> emitInstrCode codebuf i_ldtoken - codebuf.EmitUncodedToken - (match tok with - | ILToken.ILType ty -> - match GetTypeAsTypeDefOrRef cenv env ty with + codebuf.EmitUncodedToken + (match tok with + | ILToken.ILType ty -> + match GetTypeAsTypeDefOrRef cenv env ty with | (tag, idx) when tag = tdor_TypeDef -> getUncodedToken TableNames.TypeDef idx | (tag, idx) when tag = tdor_TypeRef -> getUncodedToken TableNames.TypeRef idx | (tag, idx) when tag = tdor_TypeSpec -> getUncodedToken TableNames.TypeSpec idx | _ -> failwith "?" | ILToken.ILMethod mspec -> - match GetMethodSpecAsMethodDefOrRef cenv env (mspec, None) with + match GetMethodSpecAsMethodDefOrRef cenv env (mspec, None) with | (tag, idx) when tag = mdor_MethodDef -> getUncodedToken TableNames.Method idx | (tag, idx) when tag = mdor_MemberRef -> getUncodedToken TableNames.MemberRef idx | _ -> failwith "?" | ILToken.ILField fspec -> - match GetFieldSpecAsFieldDefOrRef cenv env fspec with + match GetFieldSpecAsFieldDefOrRef cenv env fspec with | (true, idx) -> getUncodedToken TableNames.Field idx | (false, idx) -> getUncodedToken TableNames.MemberRef idx) - | I_ldstr s -> + | I_ldstr s -> emitInstrCode codebuf i_ldstr codebuf.RecordReqdStringFixup (GetUserStringHeapIdx cenv s) | I_box ty -> emitTypeInstr cenv codebuf env i_box ty | I_unbox ty -> emitTypeInstr cenv codebuf env i_unbox ty - | I_unbox_any ty -> emitTypeInstr cenv codebuf env i_unbox_any ty + | I_unbox_any ty -> emitTypeInstr cenv codebuf env i_unbox_any ty - | I_newarr (shape, ty) -> - if (shape = ILArrayShape.SingleDimensional) then + | I_newarr (shape, ty) -> + if (shape = ILArrayShape.SingleDimensional) then emitTypeInstr cenv codebuf env i_newarr ty else let args = List.init shape.Rank (fun _ -> cenv.ilg.typ_Int32) emitMethodSpecInfoInstr cenv codebuf env i_newobj (".ctor", mkILArrTy(ty, shape), ILCallingConv.Instance, args, ILType.Void, None, []) - | I_stelem_any (shape, ty) -> - if (shape = ILArrayShape.SingleDimensional) then - emitTypeInstr cenv codebuf env i_stelem_any ty - else + | I_stelem_any (shape, ty) -> + if (shape = ILArrayShape.SingleDimensional) then + emitTypeInstr cenv codebuf env i_stelem_any ty + else let args = List.init (shape.Rank+1) (fun i -> if i < shape.Rank then cenv.ilg.typ_Int32 else ty) emitMethodSpecInfoInstr cenv codebuf env i_call ("Set", mkILArrTy(ty, shape), ILCallingConv.Instance, args, ILType.Void, None, []) - | I_ldelem_any (shape, ty) -> - if (shape = ILArrayShape.SingleDimensional) then - emitTypeInstr cenv codebuf env i_ldelem_any ty - else + | I_ldelem_any (shape, ty) -> + if (shape = ILArrayShape.SingleDimensional) then + emitTypeInstr cenv codebuf env i_ldelem_any ty + else let args = List.init shape.Rank (fun _ -> cenv.ilg.typ_Int32) emitMethodSpecInfoInstr cenv codebuf env i_call ("Get", mkILArrTy(ty, shape), ILCallingConv.Instance, args, ty, None, []) - | I_ldelema (ro, _isNativePtr, shape, ty) -> + | I_ldelema (ro, _isNativePtr, shape, ty) -> if (ro = ReadonlyAddress) then emitInstrCode codebuf i_readonly - if (shape = ILArrayShape.SingleDimensional) then + if (shape = ILArrayShape.SingleDimensional) then emitTypeInstr cenv codebuf env i_ldelema ty - else + else let args = List.init shape.Rank (fun _ -> cenv.ilg.typ_Int32) emitMethodSpecInfoInstr cenv codebuf env i_call ("Address", mkILArrTy(ty, shape), ILCallingConv.Instance, args, ILType.Byref ty, None, []) @@ -1999,24 +1980,24 @@ module Codebuf = | I_refanyval ty -> emitTypeInstr cenv codebuf env i_refanyval ty | I_mkrefany ty -> emitTypeInstr cenv codebuf env i_mkrefany ty | I_initobj ty -> emitTypeInstr cenv codebuf env i_initobj ty - | I_ldobj (al, vol, ty) -> - emitAlignment codebuf al + | I_ldobj (al, vol, ty) -> + emitAlignment codebuf al emitVolatility codebuf vol emitTypeInstr cenv codebuf env i_ldobj ty - | I_stobj (al, vol, ty) -> - emitAlignment codebuf al + | I_stobj (al, vol, ty) -> + emitAlignment codebuf al emitVolatility codebuf vol emitTypeInstr cenv codebuf env i_stobj ty | I_cpobj ty -> emitTypeInstr cenv codebuf env i_cpobj ty | I_sizeof ty -> emitTypeInstr cenv codebuf env i_sizeof ty - | EI_ldlen_multi (_, m) -> + | EI_ldlen_multi (_, m) -> emitShortInt32Instr codebuf (i_ldc_i4_s, i_ldc_i4) m emitInstr cenv codebuf env (mkNormalCall(mkILNonGenericMethSpecInTy(cenv.ilg.typ_Array, ILCallingConv.Instance, "GetLength", [(cenv.ilg.typ_Int32)], (cenv.ilg.typ_Int32)))) | _ -> failwith "an IL instruction cannot be emitted" - let mkScopeNode cenv (localSigs: _[]) (startOffset, endOffset, ls: ILLocalDebugMapping list, childScopes) = + let mkScopeNode cenv (localSigs: _[]) (startOffset, endOffset, ls: ILLocalDebugMapping list, childScopes) = if isNil ls || not cenv.generatePdb then childScopes else [ { Children= Array.ofList childScopes @@ -2024,107 +2005,107 @@ module Codebuf = EndOffset=endOffset Locals= ls |> List.filter (fun v -> v.LocalName <> "") - |> List.map (fun x -> + |> List.map (fun x -> { Name=x.LocalName Signature= (try localSigs.[x.LocalIndex] with _ -> failwith ("local variable index "+string x.LocalIndex+"in debug info does not reference a valid local")) - Index= x.LocalIndex } ) + Index= x.LocalIndex } ) |> Array.ofList } ] - + // Used to put local debug scopes and exception handlers into a tree form let rangeInsideRange (start_pc1, end_pc1) (start_pc2, end_pc2) = (start_pc1: int) >= start_pc2 && start_pc1 < end_pc2 && - (end_pc1: int) > start_pc2 && end_pc1 <= end_pc2 + (end_pc1: int) > start_pc2 && end_pc1 <= end_pc2 - let lranges_of_clause cl = - match cl with + let lranges_of_clause cl = + match cl with | ILExceptionClause.Finally r1 -> [r1] | ILExceptionClause.Fault r1 -> [r1] | ILExceptionClause.FilterCatch (r1, r2) -> [r1;r2] - | ILExceptionClause.TypeCatch (_ty, r1) -> [r1] + | ILExceptionClause.TypeCatch (_ty, r1) -> [r1] let labelsToRange (lab2pc : Dictionary) p = let (l1, l2) = p in lab2pc.[l1], lab2pc.[l2] - let labelRangeInsideLabelRange lab2pc ls1 ls2 = - rangeInsideRange (labelsToRange lab2pc ls1) (labelsToRange lab2pc ls2) + let labelRangeInsideLabelRange lab2pc ls1 ls2 = + rangeInsideRange (labelsToRange lab2pc ls1) (labelsToRange lab2pc ls2) - let findRoots contains vs = + let findRoots contains vs = // For each item, either make it a root or make it a child of an existing root - let addToRoot roots x = + let addToRoot roots x = // Look to see if 'x' is inside one of the roots - let roots, found = - (false, roots) ||> List.mapFold (fun found (r, children) -> + let roots, found = + (false, roots) ||> List.mapFold (fun found (r, children) -> if found then ((r, children), true) - elif contains x r then ((r, x :: children), true) + elif contains x r then ((r, x :: children), true) else ((r, children), false)) - if found then roots - else + if found then roots + else // Find the ones that 'x' encompasses and collapse them let yes, others = roots |> List.partition (fun (r, _) -> contains r x) (x, yes |> List.collect (fun (r, ch) -> r :: ch)) :: others - + ([], vs) ||> List.fold addToRoot - let rec makeSEHTree cenv env (pc2pos: int[]) (lab2pc : Dictionary) (exs : ILExceptionSpec list) = + let rec makeSEHTree cenv env (pc2pos: int[]) (lab2pc : Dictionary) (exs : ILExceptionSpec list) = let clause_inside_lrange cl lr = - List.forall (fun lr1 -> labelRangeInsideLabelRange lab2pc lr1 lr) (lranges_of_clause cl) + List.forall (fun lr1 -> labelRangeInsideLabelRange lab2pc lr1 lr) (lranges_of_clause cl) let tryspec_inside_lrange (tryspec1: ILExceptionSpec) lr = - (labelRangeInsideLabelRange lab2pc tryspec1.Range lr && clause_inside_lrange tryspec1.Clause lr) + (labelRangeInsideLabelRange lab2pc tryspec1.Range lr && clause_inside_lrange tryspec1.Clause lr) let tryspec_inside_clause tryspec1 cl = - List.exists (fun lr -> tryspec_inside_lrange tryspec1 lr) (lranges_of_clause cl) + List.exists (fun lr -> tryspec_inside_lrange tryspec1 lr) (lranges_of_clause cl) let tryspec_inside_tryspec tryspec1 (tryspec2: ILExceptionSpec) = tryspec_inside_lrange tryspec1 tryspec2.Range || tryspec_inside_clause tryspec1 tryspec2.Clause let roots = findRoots tryspec_inside_tryspec exs - let trees = - roots |> List.map (fun (cl, ch) -> + let trees = + roots |> List.map (fun (cl, ch) -> let r1 = labelsToRange lab2pc cl.Range let conv ((s1, e1), (s2, e2)) x = pc2pos.[s1], pc2pos.[e1] - pc2pos.[s1], pc2pos.[s2], pc2pos.[e2] - pc2pos.[s2], x let children = makeSEHTree cenv env pc2pos lab2pc ch - let n = - match cl.Clause with - | ILExceptionClause.Finally r2 -> + let n = + match cl.Clause with + | ILExceptionClause.Finally r2 -> conv (r1, labelsToRange lab2pc r2) ExceptionClauseKind.FinallyClause - | ILExceptionClause.Fault r2 -> + | ILExceptionClause.Fault r2 -> conv (r1, labelsToRange lab2pc r2) ExceptionClauseKind.FaultClause - | ILExceptionClause.FilterCatch ((filterStart, _), r3) -> + | ILExceptionClause.FilterCatch ((filterStart, _), r3) -> conv (r1, labelsToRange lab2pc r3) (ExceptionClauseKind.FilterClause (pc2pos.[lab2pc.[filterStart]])) - | ILExceptionClause.TypeCatch (ty, r2) -> + | ILExceptionClause.TypeCatch (ty, r2) -> conv (r1, labelsToRange lab2pc r2) (TypeFilterClause (getTypeDefOrRefAsUncodedToken (GetTypeAsTypeDefOrRef cenv env ty))) SEHTree.Node (Some n, children) ) - trees + trees - let rec makeLocalsTree cenv localSigs (pc2pos: int[]) (lab2pc : Dictionary) (exs : ILLocalDebugInfo list) = + let rec makeLocalsTree cenv localSigs (pc2pos: int[]) (lab2pc : Dictionary) (exs : ILLocalDebugInfo list) = let localInsideLocal (locspec1: ILLocalDebugInfo) (locspec2: ILLocalDebugInfo) = - labelRangeInsideLabelRange lab2pc locspec1.Range locspec2.Range + labelRangeInsideLabelRange lab2pc locspec1.Range locspec2.Range let roots = findRoots localInsideLocal exs - let trees = - roots |> List.collect (fun (cl, ch) -> + let trees = + roots |> List.collect (fun (cl, ch) -> let (s1, e1) = labelsToRange lab2pc cl.Range let (s1, e1) = pc2pos.[s1], pc2pos.[e1] let children = makeLocalsTree cenv localSigs pc2pos lab2pc ch mkScopeNode cenv localSigs (s1, e1, cl.DebugMappings, children)) - trees + trees - // Emit the SEH tree - let rec emitExceptionHandlerTree (codebuf: CodeBuffer) (Node (x, childSEH)) = - List.iter (emitExceptionHandlerTree codebuf) childSEH // internal first - x |> Option.iter codebuf.EmitExceptionClause + // Emit the SEH tree + let rec emitExceptionHandlerTree (codebuf: CodeBuffer) (Node (x, childSEH)) = + List.iter (emitExceptionHandlerTree codebuf) childSEH // internal first + x |> Option.iter codebuf.EmitExceptionClause - let emitCode cenv localSigs (codebuf: CodeBuffer) env (code: ILCode) = + let emitCode cenv localSigs (codebuf: CodeBuffer) env (code: ILCode) = let instrs = code.Instrs - + // Build a table mapping Abstract IL pcs to positions in the generated code buffer let pc2pos = Array.zeroCreate (instrs.Length+1) let pc2labs = Dictionary() @@ -2142,8 +2123,8 @@ module Codebuf = codebuf.RecordAvailBrFixup lab | _ -> () pc2pos.[pc] <- codebuf.code.Position - if pc < instrs.Length then - match instrs.[pc] with + if pc < instrs.Length then + match instrs.[pc] with | I_br l when code.Labels.[l] = pc + 1 -> () // compress I_br to next instruction | i -> emitInstr cenv codebuf env i @@ -2155,20 +2136,20 @@ module Codebuf = let localsTree = makeLocalsTree cenv localSigs pc2pos code.Labels code.Locals localsTree - let EmitTopCode cenv localSigs env nm code = - use codebuf = CodeBuffer.Create nm + let EmitTopCode cenv localSigs env nm code = + let codebuf = CodeBuffer.Create nm let origScopes = emitCode cenv localSigs codebuf env code - let origCode = codebuf.code.AsMemory().ToArray() + let origCode = codebuf.code.Close() let origExnClauses = List.rev codebuf.seh let origReqdStringFixups = codebuf.reqdStringFixupsInMethod let origAvailBrFixups = codebuf.availBrFixups let origReqdBrFixups = codebuf.reqdBrFixups let origSeqPoints = codebuf.seqpoints.ToArray() - let newCode, newReqdStringFixups, newExnClauses, newSeqPoints, newScopes = + let newCode, newReqdStringFixups, newExnClauses, newSeqPoints, newScopes = applyBrFixups origCode origExnClauses origReqdStringFixups origAvailBrFixups origReqdBrFixups origSeqPoints origScopes - let rootScope = + let rootScope = { Children= Array.ofList newScopes StartOffset=0 EndOffset=newCode.Length @@ -2176,101 +2157,101 @@ module Codebuf = (newReqdStringFixups, newExnClauses, newCode, newSeqPoints, rootScope) -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // ILMethodBody --> bytes -// -------------------------------------------------------------------- -let GetFieldDefTypeAsBlobIdx cenv env ty = - let bytes = emitBytesViaBuffer (fun bb -> bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_FIELD +// -------------------------------------------------------------------- +let GetFieldDefTypeAsBlobIdx cenv env ty = + let bytes = emitBytesViaBuffer (fun bb -> bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_FIELD EmitType cenv env bb ty) GetBytesAsBlobIdx cenv bytes let GenILMethodBody mname cenv env (il: ILMethodBody) = - let localSigs = - if cenv.generatePdb then - il.Locals |> List.toArray |> Array.map (fun l -> + let localSigs = + if cenv.generatePdb then + il.Locals |> List.toArray |> Array.map (fun l -> // Write a fake entry for the local signature headed by e_IMAGE_CEE_CS_CALLCONV_FIELD. This is referenced by the PDB file ignore (FindOrAddSharedRow cenv TableNames.StandAloneSig (SharedRow [| Blob (GetFieldDefTypeAsBlobIdx cenv env l.Type) |])) // Now write the type - GetTypeOfLocalAsBytes cenv env l) - else + GetTypeOfLocalAsBytes cenv env l) + else [| |] let requiredStringFixups, seh, code, seqpoints, scopes = Codebuf.EmitTopCode cenv localSigs env mname il.Code let codeSize = code.Length - use methbuf = ByteBuffer.Create (codeSize * 3) - // Do we use the tiny format? + let methbuf = ByteBuffer.Create (codeSize * 3) + // Do we use the tiny format? if isNil il.Locals && il.MaxStack <= 8 && isNil seh && codeSize < 64 then - // Use Tiny format + // Use Tiny format let alignedCodeSize = align 4 (codeSize + 1) let codePadding = (alignedCodeSize - (codeSize + 1)) let requiredStringFixups' = (1, requiredStringFixups) methbuf.EmitByte (byte codeSize <<< 2 ||| e_CorILMethod_TinyFormat) methbuf.EmitBytes code methbuf.EmitPadding codePadding - 0x0, (requiredStringFixups', methbuf.AsMemory().ToArray()), seqpoints, scopes + 0x0, (requiredStringFixups', methbuf.Close()), seqpoints, scopes else - // Use Fat format - let flags = + // Use Fat format + let flags = e_CorILMethod_FatFormat ||| - (if seh <> [] then e_CorILMethod_MoreSects else 0x0uy) ||| + (if seh <> [] then e_CorILMethod_MoreSects else 0x0uy) ||| (if il.IsZeroInit then e_CorILMethod_InitLocals else 0x0uy) - let localToken = - if isNil il.Locals then 0x0 else + let localToken = + if isNil il.Locals then 0x0 else getUncodedToken TableNames.StandAloneSig (FindOrAddSharedRow cenv TableNames.StandAloneSig (GetLocalSigAsStandAloneSigIdx cenv env il.Locals)) let alignedCodeSize = align 0x4 codeSize let codePadding = (alignedCodeSize - codeSize) - - methbuf.EmitByte flags - methbuf.EmitByte 0x30uy // last four bits record size of fat header in 4 byte chunks - this is always 12 bytes = 3 four word chunks + + methbuf.EmitByte flags + methbuf.EmitByte 0x30uy // last four bits record size of fat header in 4 byte chunks - this is always 12 bytes = 3 four word chunks methbuf.EmitUInt16 (uint16 il.MaxStack) methbuf.EmitInt32 codeSize methbuf.EmitInt32 localToken methbuf.EmitBytes code methbuf.EmitPadding codePadding - if not (isNil seh) then - // Can we use the small exception handling table format? + if not (isNil seh) then + // Can we use the small exception handling table format? let smallSize = (seh.Length * 12 + 4) - let canUseSmall = + let canUseSmall = smallSize <= 0xFF && - seh |> List.forall (fun (st1, sz1, st2, sz2, _) -> - st1 <= 0xFFFF && st2 <= 0xFFFF && sz1 <= 0xFF && sz2 <= 0xFF) - - let kindAsInt32 k = - match k with + seh |> List.forall (fun (st1, sz1, st2, sz2, _) -> + st1 <= 0xFFFF && st2 <= 0xFFFF && sz1 <= 0xFF && sz2 <= 0xFF) + + let kindAsInt32 k = + match k with | FinallyClause -> e_COR_ILEXCEPTION_CLAUSE_FINALLY | FaultClause -> e_COR_ILEXCEPTION_CLAUSE_FAULT | FilterClause _ -> e_COR_ILEXCEPTION_CLAUSE_FILTER | TypeFilterClause _ -> e_COR_ILEXCEPTION_CLAUSE_EXCEPTION - let kindAsExtraInt32 k = - match k with + let kindAsExtraInt32 k = + match k with | FinallyClause | FaultClause -> 0x0 | FilterClause i -> i | TypeFilterClause uncoded -> uncoded - - if canUseSmall then + + if canUseSmall then methbuf.EmitByte e_CorILMethod_Sect_EHTable - methbuf.EmitByte (b0 smallSize) - methbuf.EmitByte 0x00uy + methbuf.EmitByte (b0 smallSize) + methbuf.EmitByte 0x00uy methbuf.EmitByte 0x00uy - seh |> List.iter (fun (st1, sz1, st2, sz2, kind) -> + seh |> List.iter (fun (st1, sz1, st2, sz2, kind) -> let k32 = kindAsInt32 kind - methbuf.EmitInt32AsUInt16 k32 - methbuf.EmitInt32AsUInt16 st1 - methbuf.EmitByte (b0 sz1) - methbuf.EmitInt32AsUInt16 st2 + methbuf.EmitInt32AsUInt16 k32 + methbuf.EmitInt32AsUInt16 st1 + methbuf.EmitByte (b0 sz1) + methbuf.EmitInt32AsUInt16 st2 methbuf.EmitByte (b0 sz2) methbuf.EmitInt32 (kindAsExtraInt32 kind)) - else + else let bigSize = (seh.Length * 24 + 4) methbuf.EmitByte (e_CorILMethod_Sect_EHTable ||| e_CorILMethod_Sect_FatFormat) methbuf.EmitByte (b0 bigSize) methbuf.EmitByte (b1 bigSize) methbuf.EmitByte (b2 bigSize) - seh |> List.iter (fun (st1, sz1, st2, sz2, kind) -> + seh |> List.iter (fun (st1, sz1, st2, sz2, kind) -> let k32 = kindAsInt32 kind methbuf.EmitInt32 k32 methbuf.EmitInt32 st1 @@ -2278,66 +2259,66 @@ let GenILMethodBody mname cenv env (il: ILMethodBody) = methbuf.EmitInt32 st2 methbuf.EmitInt32 sz2 methbuf.EmitInt32 (kindAsExtraInt32 kind)) - + let requiredStringFixups' = (12, requiredStringFixups) - localToken, (requiredStringFixups', methbuf.AsMemory().ToArray()), seqpoints, scopes + localToken, (requiredStringFixups', methbuf.Close()), seqpoints, scopes -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // ILFieldDef --> FieldDef Row -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GetFieldDefAsFieldDefRow cenv env (fd: ILFieldDef) = +let rec GetFieldDefAsFieldDefRow cenv env (fd: ILFieldDef) = let flags = int fd.Attributes - UnsharedRow - [| UShort (uint16 flags) + UnsharedRow + [| UShort (uint16 flags) StringE (GetStringHeapIdx cenv fd.Name) Blob (GetFieldDefSigAsBlobIdx cenv env fd ) |] and GetFieldDefSigAsBlobIdx cenv env fd = GetFieldDefTypeAsBlobIdx cenv env fd.FieldType -and GenFieldDefPass3 cenv env fd = +and GenFieldDefPass3 cenv env fd = let fidx = AddUnsharedRow cenv TableNames.Field (GetFieldDefAsFieldDefRow cenv env fd) GenCustomAttrsPass3Or4 cenv (hca_FieldDef, fidx) fd.CustomAttrs - // Write FieldRVA table - fixups into data section done later - match fd.Data with - | None -> () - | Some b -> + // Write FieldRVA table - fixups into data section done later + match fd.Data with + | None -> () + | Some b -> let offs = cenv.data.Position cenv.data.EmitBytes b - AddUnsharedRow cenv TableNames.FieldRVA + AddUnsharedRow cenv TableNames.FieldRVA (UnsharedRow [| Data (offs, false); SimpleIndex (TableNames.Field, fidx) |]) |> ignore - // Write FieldMarshal table - match fd.Marshal with + // Write FieldMarshal table + match fd.Marshal with | None -> () - | Some ntyp -> - AddUnsharedRow cenv TableNames.FieldMarshal + | Some ntyp -> + AddUnsharedRow cenv TableNames.FieldMarshal (UnsharedRow [| HasFieldMarshal (hfm_FieldDef, fidx) Blob (GetNativeTypeAsBlobIdx cenv ntyp) |]) |> ignore - // Write Content table - match fd.LiteralValue with + // Write Content table + match fd.LiteralValue with | None -> () - | Some i -> - AddUnsharedRow cenv TableNames.Constant - (UnsharedRow + | Some i -> + AddUnsharedRow cenv TableNames.Constant + (UnsharedRow [| GetFieldInitFlags i HasConstant (hc_FieldDef, fidx) Blob (GetFieldInitAsBlobIdx cenv i) |]) |> ignore - // Write FieldLayout table - match fd.Offset with + // Write FieldLayout table + match fd.Offset with | None -> () - | Some offset -> - AddUnsharedRow cenv TableNames.FieldLayout + | Some offset -> + AddUnsharedRow cenv TableNames.FieldLayout (UnsharedRow [| ULong offset; SimpleIndex (TableNames.Field, fidx) |]) |> ignore - -// -------------------------------------------------------------------- + +// -------------------------------------------------------------------- // ILGenericParameterDef --> GenericParam Row -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GetGenericParamAsGenericParamRow cenv _env idx owner gp = - let flags = - (match gp.Variance with +let rec GetGenericParamAsGenericParamRow cenv _env idx owner gp = + let flags = + (match gp.Variance with | NonVariant -> 0x0000 | CoVariant -> 0x0001 | ContraVariant -> 0x0002) ||| @@ -2346,146 +2327,145 @@ let rec GetGenericParamAsGenericParamRow cenv _env idx owner gp = (if gp.HasDefaultConstructorConstraint then 0x0010 else 0x0000) let mdVersionMajor, _ = metadataSchemaVersionSupportedByCLRVersion cenv.desiredMetadataVersion - if (mdVersionMajor = 1) then - SharedRow - [| UShort (uint16 idx) - UShort (uint16 flags) + if (mdVersionMajor = 1) then + SharedRow + [| UShort (uint16 idx) + UShort (uint16 flags) TypeOrMethodDef (fst owner, snd owner) StringE (GetStringHeapIdx cenv gp.Name) TypeDefOrRefOrSpec (tdor_TypeDef, 0) (* empty kind field in deprecated metadata *) |] else - SharedRow - [| UShort (uint16 idx) - UShort (uint16 flags) + SharedRow + [| UShort (uint16 idx) + UShort (uint16 flags) TypeOrMethodDef (fst owner, snd owner) StringE (GetStringHeapIdx cenv gp.Name) |] -and GenTypeAsGenericParamConstraintRow cenv env gpidx ty = +and GenTypeAsGenericParamConstraintRow cenv env gpidx ty = let tdorTag, tdorRow = GetTypeAsTypeDefOrRef cenv env ty - UnsharedRow + UnsharedRow [| SimpleIndex (TableNames.GenericParam, gpidx) TypeDefOrRefOrSpec (tdorTag, tdorRow) |] and GenGenericParamConstraintPass4 cenv env gpidx ty = AddUnsharedRow cenv TableNames.GenericParamConstraint (GenTypeAsGenericParamConstraintRow cenv env gpidx ty) |> ignore -and GenGenericParamPass3 cenv env idx owner gp = +and GenGenericParamPass3 cenv env idx owner gp = // here we just collect generic params, its constraints\custom attributes will be processed on pass4 // shared since we look it up again below in GenGenericParamPass4 - AddSharedRow cenv TableNames.GenericParam (GetGenericParamAsGenericParamRow cenv env idx owner gp) + AddSharedRow cenv TableNames.GenericParam (GetGenericParamAsGenericParamRow cenv env idx owner gp) |> ignore -and GenGenericParamPass4 cenv env idx owner gp = +and GenGenericParamPass4 cenv env idx owner gp = let gpidx = FindOrAddSharedRow cenv TableNames.GenericParam (GetGenericParamAsGenericParamRow cenv env idx owner gp) GenCustomAttrsPass3Or4 cenv (hca_GenericParam, gpidx) gp.CustomAttrs - gp.Constraints |> List.iter (GenGenericParamConstraintPass4 cenv env gpidx) + gp.Constraints |> List.iter (GenGenericParamConstraintPass4 cenv env gpidx) -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // param and return --> Param Row -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GetParamAsParamRow cenv _env seq (param: ILParameter) = - let flags = +let rec GetParamAsParamRow cenv _env seq (param: ILParameter) = + let flags = (if param.IsIn then 0x0001 else 0x0000) ||| (if param.IsOut then 0x0002 else 0x0000) ||| (if param.IsOptional then 0x0010 else 0x0000) ||| (if param.Default <> None then 0x1000 else 0x0000) ||| (if param.Marshal <> None then 0x2000 else 0x0000) - - UnsharedRow - [| UShort (uint16 flags) - UShort (uint16 seq) - StringE (GetStringHeapIdxOption cenv param.Name) |] - -and GenParamPass3 cenv env seq (param: ILParameter) = - if not param.IsIn && not param.IsOut && not param.IsOptional && Option.isNone param.Default && Option.isNone param.Name && Option.isNone param.Marshal + + UnsharedRow + [| UShort (uint16 flags) + UShort (uint16 seq) + StringE (GetStringHeapIdxOption cenv param.Name) |] + +and GenParamPass3 cenv env seq (param: ILParameter) = + if not param.IsIn && not param.IsOut && not param.IsOptional && Option.isNone param.Default && Option.isNone param.Name && Option.isNone param.Marshal then () - else + else let pidx = AddUnsharedRow cenv TableNames.Param (GetParamAsParamRow cenv env seq param) GenCustomAttrsPass3Or4 cenv (hca_ParamDef, pidx) param.CustomAttrs - // Write FieldRVA table - fixups into data section done later - match param.Marshal with + // Write FieldRVA table - fixups into data section done later + match param.Marshal with | None -> () - | Some ntyp -> - AddUnsharedRow cenv TableNames.FieldMarshal + | Some ntyp -> + AddUnsharedRow cenv TableNames.FieldMarshal (UnsharedRow [| HasFieldMarshal (hfm_ParamDef, pidx); Blob (GetNativeTypeAsBlobIdx cenv ntyp) |]) |> ignore // Write Content table for DefaultParameterValue attr match param.Default with | None -> () - | Some i -> - AddUnsharedRow cenv TableNames.Constant - (UnsharedRow + | Some i -> + AddUnsharedRow cenv TableNames.Constant + (UnsharedRow [| GetFieldInitFlags i HasConstant (hc_ParamDef, pidx) Blob (GetFieldInitAsBlobIdx cenv i) |]) |> ignore -let GenReturnAsParamRow (returnv : ILReturn) = +let GenReturnAsParamRow (returnv : ILReturn) = let flags = (if returnv.Marshal <> None then 0x2000 else 0x0000) - UnsharedRow - [| UShort (uint16 flags) + UnsharedRow + [| UShort (uint16 flags) UShort 0us (* sequence num. *) - StringE 0 |] + StringE 0 |] -let GenReturnPass3 cenv (returnv: ILReturn) = +let GenReturnPass3 cenv (returnv: ILReturn) = if Option.isSome returnv.Marshal || not (Array.isEmpty returnv.CustomAttrs.AsArray) then let pidx = AddUnsharedRow cenv TableNames.Param (GenReturnAsParamRow returnv) GenCustomAttrsPass3Or4 cenv (hca_ParamDef, pidx) returnv.CustomAttrs - match returnv.Marshal with + match returnv.Marshal with | None -> () - | Some ntyp -> - AddUnsharedRow cenv TableNames.FieldMarshal - (UnsharedRow + | Some ntyp -> + AddUnsharedRow cenv TableNames.FieldMarshal + (UnsharedRow [| HasFieldMarshal (hfm_ParamDef, pidx) Blob (GetNativeTypeAsBlobIdx cenv ntyp) |]) |> ignore -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // ILMethodDef --> ILMethodDef Row -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let GetMethodDefSigAsBytes cenv env (mdef: ILMethodDef) = - emitBytesViaBuffer (fun bb -> +let GetMethodDefSigAsBytes cenv env (mdef: ILMethodDef) = + emitBytesViaBuffer (fun bb -> bb.EmitByte (callconvToByte mdef.GenericParams.Length mdef.CallingConv) if not (List.isEmpty mdef.GenericParams) then bb.EmitZ32 mdef.GenericParams.Length bb.EmitZ32 mdef.Parameters.Length EmitType cenv env bb mdef.Return.Type mdef.ParameterTypes |> List.iter (EmitType cenv env bb)) -let GenMethodDefSigAsBlobIdx cenv env mdef = +let GenMethodDefSigAsBlobIdx cenv env mdef = GetBytesAsBlobIdx cenv (GetMethodDefSigAsBytes cenv env mdef) -let GenMethodDefAsRow cenv env midx (md: ILMethodDef) = +let GenMethodDefAsRow cenv env midx (md: ILMethodDef) = let flags = md.Attributes - + let implflags = md.ImplAttributes - if md.IsEntryPoint then + if md.IsEntryPoint then if cenv.entrypoint <> None then failwith "duplicate entrypoint" else cenv.entrypoint <- Some (true, midx) - let codeAddr = - (match md.Body with - | MethodBody.IL ilmbodyLazy -> - let ilmbody = ilmbodyLazy.Value + let codeAddr = + (match md.Body.Contents with + | MethodBody.IL ilmbody -> let addr = cenv.nextCodeAddr let (localToken, code, seqpoints, rootScope) = GenILMethodBody md.Name cenv env ilmbody - // Now record the PDB record for this method - we write this out later. - if cenv.generatePdb then - cenv.pdbinfo.Add + // Now record the PDB record for this method - we write this out later. + if cenv.generatePdb then + cenv.pdbinfo.Add { MethToken=getUncodedToken TableNames.Method midx MethName=md.Name LocalSignatureToken=localToken Params= [| |] (* REVIEW *) RootScope = Some rootScope - Range= - match ilmbody.SourceMarker with - | Some m when cenv.generatePdb -> - // table indexes are 1-based, document array indexes are 0-based - let doc = (cenv.documents.FindOrAddSharedEntry m.Document) - 1 + Range= + match ilmbody.SourceMarker with + | Some m when cenv.generatePdb -> + // table indexes are 1-based, document array indexes are 0-based + let doc = (cenv.documents.FindOrAddSharedEntry m.Document) - 1 Some ({ Document=doc Line=m.Line - Column=m.Column }, + Column=m.Column }, { Document=doc Line=m.EndLine Column=m.EndColumn }) @@ -2495,9 +2475,9 @@ let GenMethodDefAsRow cenv env midx (md: ILMethodDef) = addr | MethodBody.Abstract | MethodBody.PInvoke _ -> - // Now record the PDB record for this method - we write this out later. - if cenv.generatePdb then - cenv.pdbinfo.Add + // Now record the PDB record for this method - we write this out later. + if cenv.generatePdb then + cenv.pdbinfo.Add { MethToken = getUncodedToken TableNames.Method midx MethName = md.Name LocalSignatureToken = 0x0 // No locals it's abstract @@ -2506,41 +2486,40 @@ let GenMethodDefAsRow cenv env midx (md: ILMethodDef) = Range = None SequencePoints = [| |] } 0x0000 - | MethodBody.Native -> + | MethodBody.Native -> failwith "cannot write body of native method - Abstract IL cannot roundtrip mixed native/managed binaries" | _ -> 0x0000) - UnsharedRow - [| ULong codeAddr - UShort (uint16 implflags) - UShort (uint16 flags) - StringE (GetStringHeapIdx cenv md.Name) - Blob (GenMethodDefSigAsBlobIdx cenv env md) - SimpleIndex(TableNames.Param, cenv.GetTable(TableNames.Param).Count + 1) |] + UnsharedRow + [| ULong codeAddr + UShort (uint16 implflags) + UShort (uint16 flags) + StringE (GetStringHeapIdx cenv md.Name) + Blob (GenMethodDefSigAsBlobIdx cenv env md) + SimpleIndex(TableNames.Param, cenv.GetTable(TableNames.Param).Count + 1) |] let GenMethodImplPass3 cenv env _tgparams tidx mimpl = let midxTag, midxRow = GetMethodSpecAsMethodDef cenv env (mimpl.OverrideBy, None) let midx2Tag, midx2Row = GetOverridesSpecAsMethodDefOrRef cenv env mimpl.Overrides AddUnsharedRow cenv TableNames.MethodImpl - (UnsharedRow + (UnsharedRow [| SimpleIndex (TableNames.TypeDef, tidx) MethodDefOrRef (midxTag, midxRow) MethodDefOrRef (midx2Tag, midx2Row) |]) |> ignore - -let GenMethodDefPass3 cenv env (md: ILMethodDef) = + +let GenMethodDefPass3 cenv env (md: ILMethodDef) = let midx = GetMethodDefIdx cenv md let idx2 = AddUnsharedRow cenv TableNames.Method (GenMethodDefAsRow cenv env midx md) if midx <> idx2 then failwith "index of method def on pass 3 does not match index on pass 2" - GenReturnPass3 cenv md.Return - md.Parameters |> List.iteri (fun n param -> GenParamPass3 cenv env (n+1) param) - md.CustomAttrs |> GenCustomAttrsPass3Or4 cenv (hca_MethodDef, midx) + GenReturnPass3 cenv md.Return + md.Parameters |> List.iteri (fun n param -> GenParamPass3 cenv env (n+1) param) + md.CustomAttrs |> GenCustomAttrsPass3Or4 cenv (hca_MethodDef, midx) md.SecurityDecls.AsList |> GenSecurityDeclsPass3 cenv (hds_MethodDef, midx) - md.GenericParams |> List.iteri (fun n gp -> GenGenericParamPass3 cenv env n (tomd_MethodDef, midx) gp) - match md.Body with - | MethodBody.PInvoke attrLazy -> - let attr = attrLazy.Value - let flags = - begin match attr.CallingConv with + md.GenericParams |> List.iteri (fun n gp -> GenGenericParamPass3 cenv env n (tomd_MethodDef, midx) gp) + match md.Body.Contents with + | MethodBody.PInvoke attr -> + let flags = + begin match attr.CallingConv with | PInvokeCallingConvention.None -> 0x0000 | PInvokeCallingConvention.Cdecl -> 0x0200 | PInvokeCallingConvention.Stdcall -> 0x0300 @@ -2548,18 +2527,18 @@ let GenMethodDefPass3 cenv env (md: ILMethodDef) = | PInvokeCallingConvention.Fastcall -> 0x0500 | PInvokeCallingConvention.WinApi -> 0x0100 end ||| - begin match attr.CharEncoding with + begin match attr.CharEncoding with | PInvokeCharEncoding.None -> 0x0000 | PInvokeCharEncoding.Ansi -> 0x0002 | PInvokeCharEncoding.Unicode -> 0x0004 | PInvokeCharEncoding.Auto -> 0x0006 end ||| - begin match attr.CharBestFit with + begin match attr.CharBestFit with | PInvokeCharBestFit.UseAssembly -> 0x0000 | PInvokeCharBestFit.Enabled -> 0x0010 | PInvokeCharBestFit.Disabled -> 0x0020 end ||| - begin match attr.ThrowOnUnmappableChar with + begin match attr.ThrowOnUnmappableChar with | PInvokeThrowOnUnmappableChar.UseAssembly -> 0x0000 | PInvokeThrowOnUnmappableChar.Enabled -> 0x1000 | PInvokeThrowOnUnmappableChar.Disabled -> 0x2000 @@ -2567,14 +2546,14 @@ let GenMethodDefPass3 cenv env (md: ILMethodDef) = (if attr.NoMangle then 0x0001 else 0x0000) ||| (if attr.LastError then 0x0040 else 0x0000) AddUnsharedRow cenv TableNames.ImplMap - (UnsharedRow - [| UShort (uint16 flags) + (UnsharedRow + [| UShort (uint16 flags) MemberForwarded (mf_MethodDef, midx) - StringE (GetStringHeapIdx cenv attr.Name) + StringE (GetStringHeapIdx cenv attr.Name) SimpleIndex (TableNames.ModuleRef, GetModuleRefAsIdx cenv attr.Where) |]) |> ignore | _ -> () -let GenMethodDefPass4 cenv env md = +let GenMethodDefPass4 cenv env md = let midx = GetMethodDefIdx cenv md List.iteri (fun n gp -> GenGenericParamPass4 cenv env n (tomd_MethodDef, midx) gp) md.GenericParams @@ -2582,40 +2561,40 @@ let GenPropertyMethodSemanticsPass3 cenv pidx kind mref = // REVIEW: why are we catching exceptions here? let midx = try GetMethodRefAsMethodDefIdx cenv mref with MethodDefNotFound -> 1 AddUnsharedRow cenv TableNames.MethodSemantics - (UnsharedRow + (UnsharedRow [| UShort (uint16 kind) SimpleIndex (TableNames.Method, midx) HasSemantics (hs_Property, pidx) |]) |> ignore - -let rec GetPropertySigAsBlobIdx cenv env prop = + +let rec GetPropertySigAsBlobIdx cenv env prop = GetBytesAsBlobIdx cenv (GetPropertySigAsBytes cenv env prop) -and GetPropertySigAsBytes cenv env (prop: ILPropertyDef) = - emitBytesViaBuffer (fun bb -> +and GetPropertySigAsBytes cenv env (prop: ILPropertyDef) = + emitBytesViaBuffer (fun bb -> let b = ((hasthisToByte prop.CallingConv) ||| e_IMAGE_CEE_CS_CALLCONV_PROPERTY) bb.EmitByte b bb.EmitZ32 prop.Args.Length EmitType cenv env bb prop.PropertyType prop.Args |> List.iter (EmitType cenv env bb)) -and GetPropertyAsPropertyRow cenv env (prop: ILPropertyDef) = +and GetPropertyAsPropertyRow cenv env (prop: ILPropertyDef) = let flags = prop.Attributes - UnsharedRow - [| UShort (uint16 flags) - StringE (GetStringHeapIdx cenv prop.Name) - Blob (GetPropertySigAsBlobIdx cenv env prop) |] + UnsharedRow + [| UShort (uint16 flags) + StringE (GetStringHeapIdx cenv prop.Name) + Blob (GetPropertySigAsBlobIdx cenv env prop) |] /// ILPropertyDef --> Property Row + MethodSemantics entries -and GenPropertyPass3 cenv env prop = +and GenPropertyPass3 cenv env prop = let pidx = AddUnsharedRow cenv TableNames.Property (GetPropertyAsPropertyRow cenv env prop) - prop.SetMethod |> Option.iter (GenPropertyMethodSemanticsPass3 cenv pidx 0x0001) - prop.GetMethod |> Option.iter (GenPropertyMethodSemanticsPass3 cenv pidx 0x0002) - // Write Constant table - match prop.Init with + prop.SetMethod |> Option.iter (GenPropertyMethodSemanticsPass3 cenv pidx 0x0001) + prop.GetMethod |> Option.iter (GenPropertyMethodSemanticsPass3 cenv pidx 0x0002) + // Write Constant table + match prop.Init with | None -> () - | Some i -> - AddUnsharedRow cenv TableNames.Constant - (UnsharedRow + | Some i -> + AddUnsharedRow cenv TableNames.Constant + (UnsharedRow [| GetFieldInitFlags i HasConstant (hc_Property, pidx) Blob (GetFieldInitAsBlobIdx cenv i) |]) |> ignore @@ -2624,67 +2603,67 @@ and GenPropertyPass3 cenv env prop = let rec GenEventMethodSemanticsPass3 cenv eidx kind mref = let addIdx = try GetMethodRefAsMethodDefIdx cenv mref with MethodDefNotFound -> 1 AddUnsharedRow cenv TableNames.MethodSemantics - (UnsharedRow + (UnsharedRow [| UShort (uint16 kind) SimpleIndex (TableNames.Method, addIdx) HasSemantics (hs_Event, eidx) |]) |> ignore /// ILEventDef --> Event Row + MethodSemantics entries -and GenEventAsEventRow cenv env (md: ILEventDef) = +and GenEventAsEventRow cenv env (md: ILEventDef) = let flags = md.Attributes let tdorTag, tdorRow = GetTypeOptionAsTypeDefOrRef cenv env md.EventType - UnsharedRow - [| UShort (uint16 flags) - StringE (GetStringHeapIdx cenv md.Name) + UnsharedRow + [| UShort (uint16 flags) + StringE (GetStringHeapIdx cenv md.Name) TypeDefOrRefOrSpec (tdorTag, tdorRow) |] -and GenEventPass3 cenv env (md: ILEventDef) = +and GenEventPass3 cenv env (md: ILEventDef) = let eidx = AddUnsharedRow cenv TableNames.Event (GenEventAsEventRow cenv env md) - md.AddMethod |> GenEventMethodSemanticsPass3 cenv eidx 0x0008 - md.RemoveMethod |> GenEventMethodSemanticsPass3 cenv eidx 0x0010 - Option.iter (GenEventMethodSemanticsPass3 cenv eidx 0x0020) md.FireMethod + md.AddMethod |> GenEventMethodSemanticsPass3 cenv eidx 0x0008 + md.RemoveMethod |> GenEventMethodSemanticsPass3 cenv eidx 0x0010 + Option.iter (GenEventMethodSemanticsPass3 cenv eidx 0x0020) md.FireMethod List.iter (GenEventMethodSemanticsPass3 cenv eidx 0x0004) md.OtherMethods GenCustomAttrsPass3Or4 cenv (hca_Event, eidx) md.CustomAttrs -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // resource --> generate ... -// -------------------------------------------------------------------- - -let rec GetResourceAsManifestResourceRow cenv r = - let data, impl = - let embedManagedResources (bytes: ReadOnlyByteMemory) = - // Embedded managed resources must be word-aligned. However resource format is - // not specified in ECMA. Some mscorlib resources appear to be non-aligned - it seems it doesn't matter.. - let offset = cenv.resources.Position - let alignedOffset = (align 0x8 offset) - let pad = alignedOffset - offset - let resourceSize = bytes.Length - cenv.resources.EmitPadding pad - cenv.resources.EmitInt32 resourceSize - cenv.resources.EmitByteMemory bytes - Data (alignedOffset, true), (i_File, 0) - - match r.Location with +// -------------------------------------------------------------------- + +let rec GetResourceAsManifestResourceRow cenv r = + let data, impl = + let embedManagedResources (bytes: ReadOnlyByteMemory) = + // Embedded managed resources must be word-aligned. However resource format is + // not specified in ECMA. Some mscorlib resources appear to be non-aligned - it seems it doesn't matter.. + let offset = cenv.resources.Position + let alignedOffset = (align 0x8 offset) + let pad = alignedOffset - offset + let resourceSize = bytes.Length + cenv.resources.EmitPadding pad + cenv.resources.EmitInt32 resourceSize + cenv.resources.EmitByteMemory bytes + Data (alignedOffset, true), (i_File, 0) + + match r.Location with | ILResourceLocation.Local bytes -> embedManagedResources (bytes.GetByteMemory()) - | ILResourceLocation.File (mref, offset) -> ULong offset, (i_File, GetModuleRefAsFileIdx cenv mref) - | ILResourceLocation.Assembly aref -> ULong 0x0, (i_AssemblyRef, GetAssemblyRefAsIdx cenv aref) + | ILResourceLocation.File (mref, offset) -> ULong offset, (i_File, GetModuleRefAsFileIdx cenv mref) + | ILResourceLocation.Assembly aref -> ULong 0x0, (i_AssemblyRef, GetAssemblyRefAsIdx cenv aref) - UnsharedRow - [| data + UnsharedRow + [| data ULong (match r.Access with ILResourceAccess.Public -> 0x01 | ILResourceAccess.Private -> 0x02) - StringE (GetStringHeapIdx cenv r.Name) + StringE (GetStringHeapIdx cenv r.Name) Implementation (fst impl, snd impl) |] -and GenResourcePass3 cenv r = +and GenResourcePass3 cenv r = let idx = AddUnsharedRow cenv TableNames.ManifestResource (GetResourceAsManifestResourceRow cenv r) GenCustomAttrsPass3Or4 cenv (hca_ManifestResource, idx) r.CustomAttrs -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // ILTypeDef --> generate ILFieldDef, ILMethodDef, ILPropertyDef etc. rows -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GenTypeDefPass3 enc cenv (td: ILTypeDef) = +let rec GenTypeDefPass3 enc cenv (td: ILTypeDef) = try let env = envForTypeDef td let tidx = GetIdxForTypeDef cenv (TdKey(enc, td.Name)) @@ -2693,20 +2672,20 @@ let rec GenTypeDefPass3 enc cenv (td: ILTypeDef) = td.Fields.AsList |> List.iter (GenFieldDefPass3 cenv env) td.Methods |> Seq.iter (GenMethodDefPass3 cenv env) td.MethodImpls.AsList |> List.iter (GenMethodImplPass3 cenv env td.GenericParams.Length tidx) - // ClassLayout entry if needed - match td.Layout with + // ClassLayout entry if needed + match td.Layout with | ILTypeDefLayout.Auto -> () - | ILTypeDefLayout.Sequential layout | ILTypeDefLayout.Explicit layout -> - if Option.isSome layout.Pack || Option.isSome layout.Size then + | ILTypeDefLayout.Sequential layout | ILTypeDefLayout.Explicit layout -> + if Option.isSome layout.Pack || Option.isSome layout.Size then AddUnsharedRow cenv TableNames.ClassLayout - (UnsharedRow + (UnsharedRow [| UShort (defaultArg layout.Pack (uint16 0x0)) ULong (defaultArg layout.Size 0x0) SimpleIndex (TableNames.TypeDef, tidx) |]) |> ignore - + td.SecurityDecls.AsList |> GenSecurityDeclsPass3 cenv (hds_TypeDef, tidx) td.CustomAttrs |> GenCustomAttrsPass3Or4 cenv (hca_TypeDef, tidx) - td.GenericParams |> List.iteri (fun n gp -> GenGenericParamPass3 cenv env n (tomd_TypeDef, tidx) gp) + td.GenericParams |> List.iteri (fun n gp -> GenGenericParamPass3 cenv env n (tomd_TypeDef, tidx) gp) td.NestedTypes.AsList |> GenTypeDefsPass3 (enc@[td.Name]) cenv with e -> failwith ("Error in pass3 for type "+td.Name+", error: "+e.Message) @@ -2719,12 +2698,12 @@ and GenTypeDefsPass3 enc cenv tds = /// ILTypeDef --> generate generic params on ILMethodDef: ensures /// GenericParam table is built sorted by owner. -let rec GenTypeDefPass4 enc cenv (td: ILTypeDef) = +let rec GenTypeDefPass4 enc cenv (td: ILTypeDef) = try let env = envForTypeDef td let tidx = GetIdxForTypeDef cenv (TdKey(enc, td.Name)) - td.Methods |> Seq.iter (GenMethodDefPass4 cenv env) - List.iteri (fun n gp -> GenGenericParamPass4 cenv env n (tomd_TypeDef, tidx) gp) td.GenericParams + td.Methods |> Seq.iter (GenMethodDefPass4 cenv env) + List.iteri (fun n gp -> GenGenericParamPass4 cenv env n (tomd_TypeDef, tidx) gp) td.GenericParams GenTypeDefsPass4 (enc@[td.Name]) cenv td.NestedTypes.AsList with e -> failwith ("Error in pass4 for type "+td.Name+", error: "+e.Message) @@ -2737,19 +2716,19 @@ and GenTypeDefsPass4 enc cenv tds = let timestamp = absilWriteGetTimeStamp () -// -------------------------------------------------------------------- -// ILExportedTypesAndForwarders --> ILExportedTypeOrForwarder table -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- +// ILExportedTypesAndForwarders --> ILExportedTypeOrForwarder table +// -------------------------------------------------------------------- -let rec GenNestedExportedTypePass3 cenv cidx (ce: ILNestedExportedType) = +let rec GenNestedExportedTypePass3 cenv cidx (ce: ILNestedExportedType) = let flags = GetMemberAccessFlags ce.Access - let nidx = - AddUnsharedRow cenv TableNames.ExportedType - (UnsharedRow - [| ULong flags + let nidx = + AddUnsharedRow cenv TableNames.ExportedType + (UnsharedRow + [| ULong flags ULong 0x0 - StringE (GetStringHeapIdx cenv ce.Name) - StringE 0 + StringE (GetStringHeapIdx cenv ce.Name) + StringE 0 Implementation (i_ExportedType, cidx) |]) GenCustomAttrsPass3Or4 cenv (hca_ExportedType, nidx) ce.CustomAttrs GenNestedExportedTypesPass3 cenv nidx ce.Nested @@ -2757,39 +2736,39 @@ let rec GenNestedExportedTypePass3 cenv cidx (ce: ILNestedExportedType) = and GenNestedExportedTypesPass3 cenv nidx (nce: ILNestedExportedTypes) = nce.AsList |> List.iter (GenNestedExportedTypePass3 cenv nidx) -and GenExportedTypePass3 cenv (ce: ILExportedTypeOrForwarder) = +and GenExportedTypePass3 cenv (ce: ILExportedTypeOrForwarder) = let nselem, nelem = GetTypeNameAsElemPair cenv ce.Name let flags = int32 ce.Attributes let impl = GetScopeRefAsImplementationElem cenv ce.ScopeRef - let cidx = - AddUnsharedRow cenv TableNames.ExportedType - (UnsharedRow - [| ULong flags + let cidx = + AddUnsharedRow cenv TableNames.ExportedType + (UnsharedRow + [| ULong flags ULong 0x0 - nelem - nselem + nelem + nselem Implementation (fst impl, snd impl) |]) GenCustomAttrsPass3Or4 cenv (hca_ExportedType, cidx) ce.CustomAttrs GenNestedExportedTypesPass3 cenv cidx ce.Nested -and GenExportedTypesPass3 cenv (ce: ILExportedTypesAndForwarders) = +and GenExportedTypesPass3 cenv (ce: ILExportedTypesAndForwarders) = List.iter (GenExportedTypePass3 cenv) ce.AsList -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // manifest --> generate Assembly row -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -and GetManifestAsAssemblyRow cenv m = - UnsharedRow +and GetManifestAsAssemblyRow cenv m = + UnsharedRow [|ULong m.AuxModuleHashAlgorithm UShort (match m.Version with None -> 0us | Some version -> version.Major) UShort (match m.Version with None -> 0us | Some version -> version.Minor) UShort (match m.Version with None -> 0us | Some version -> version.Build) UShort (match m.Version with None -> 0us | Some version -> version.Revision) - ULong - ( (match m.AssemblyLongevity with + ULong + ( (match m.AssemblyLongevity with | ILAssemblyLongevity.Unspecified -> 0x0000 - | ILAssemblyLongevity.Library -> 0x0002 + | ILAssemblyLongevity.Library -> 0x0002 | ILAssemblyLongevity.PlatformAppDomain -> 0x0004 | ILAssemblyLongevity.PlatformProcess -> 0x0006 | ILAssemblyLongevity.PlatformSystem -> 0x0008) ||| @@ -2797,25 +2776,25 @@ and GetManifestAsAssemblyRow cenv m = // Setting these causes peverify errors. Hence both ilread and ilwrite ignore them and refuse to set them. // Any debugging customAttributes will automatically propagate // REVIEW: No longer appears to be the case - (if m.JitTracking then 0x8000 else 0x0) ||| + (if m.JitTracking then 0x8000 else 0x0) ||| (match m.PublicKey with None -> 0x0000 | Some _ -> 0x0001) ||| 0x0000) (match m.PublicKey with None -> Blob 0 | Some x -> Blob (GetBytesAsBlobIdx cenv x)) StringE (GetStringHeapIdx cenv m.Name) (match m.Locale with None -> StringE 0 | Some x -> StringE (GetStringHeapIdx cenv x)) |] -and GenManifestPass3 cenv m = +and GenManifestPass3 cenv m = let aidx = AddUnsharedRow cenv TableNames.Assembly (GetManifestAsAssemblyRow cenv m) GenSecurityDeclsPass3 cenv (hds_Assembly, aidx) m.SecurityDecls.AsList GenCustomAttrsPass3Or4 cenv (hca_Assembly, aidx) m.CustomAttrs GenExportedTypesPass3 cenv m.ExportedTypes - // Record the entrypoint decl if needed. + // Record the entrypoint decl if needed. match m.EntrypointElsewhere with - | Some mref -> + | Some mref -> if cenv.entrypoint <> None then failwith "duplicate entrypoint" else cenv.entrypoint <- Some (false, GetModuleRefAsIdx cenv mref) | None -> () -and newGuid (modul: ILModuleDef) = +and newGuid (modul: ILModuleDef) = let n = timestamp let m = hash n let m2 = hash modul.Name @@ -2826,39 +2805,39 @@ and deterministicGuid (modul: ILModuleDef) = let m2 = Seq.sum (Seq.mapi (fun i x -> i + int x) modul.Name) // use a stable hash [| b0 n; b1 n; b2 n; b3 n; b0 m2; b1 m2; b2 m2; b3 m2; 0xa7uy; 0x45uy; 0x03uy; 0x83uy; b0 n; b1 n; b2 n; b3 n |] -and GetModuleAsRow (cenv: cenv) (modul: ILModuleDef) = +and GetModuleAsRow (cenv: cenv) (modul: ILModuleDef) = // Store the generated MVID in the environment (needed for generating debug information) let modulGuid = if cenv.deterministic then deterministicGuid modul else newGuid modul cenv.moduleGuid <- modulGuid - UnsharedRow - [| UShort (uint16 0x0) - StringE (GetStringHeapIdx cenv modul.Name) - Guid (GetGuidIdx cenv modulGuid) - Guid 0 + UnsharedRow + [| UShort (uint16 0x0) + StringE (GetStringHeapIdx cenv modul.Name) + Guid (GetGuidIdx cenv modulGuid) + Guid 0 Guid 0 |] -let rowElemCompare (e1: RowElement) (e2: RowElement) = - let c = compare e1.Val e2.Val - if c <> 0 then c else +let rowElemCompare (e1: RowElement) (e2: RowElement) = + let c = compare e1.Val e2.Val + if c <> 0 then c else compare e1.Tag e2.Tag -let TableRequiresSorting tab = - List.memAssoc tab sortedTableInfo +let TableRequiresSorting tab = + List.memAssoc tab sortedTableInfo -let SortTableRows tab (rows: GenericRow[]) = +let SortTableRows tab (rows: GenericRow[]) = assert (TableRequiresSorting tab) let col = List.assoc tab sortedTableInfo - rows + rows // This needs to be a stable sort, so we use List.sortWith |> Array.toList - |> List.sortWith (fun r1 r2 -> rowElemCompare r1.[col] r2.[col]) + |> List.sortWith (fun r1 r2 -> rowElemCompare r1.[col] r2.[col]) |> Array.ofList //|> Array.map SharedRow -let GenModule (cenv : cenv) (modul: ILModuleDef) = +let GenModule (cenv : cenv) (modul: ILModuleDef) = let midx = AddUnsharedRow cenv TableNames.Module (GetModuleAsRow cenv modul) - List.iter (GenResourcePass3 cenv) modul.Resources.AsList + List.iter (GenResourcePass3 cenv) modul.Resources.AsList let tds = destTypeDefsWithGlobalFunctionsFirst cenv.ilg modul.TypeDefs reportTime cenv.showTimes "Module Generation Preparation" GenTypeDefsPass1 [] cenv tds @@ -2869,28 +2848,18 @@ let GenModule (cenv : cenv) (modul: ILModuleDef) = GenTypeDefsPass3 [] cenv tds reportTime cenv.showTimes "Module Generation Pass 3" GenCustomAttrsPass3Or4 cenv (hca_Module, midx) modul.CustomAttrs - // GenericParam is the only sorted table indexed by Columns in other tables (GenericParamConstraint\CustomAttributes). - // Hence we need to sort it before we emit any entries in GenericParamConstraint\CustomAttributes that are attached to generic params. - // Note this mutates the rows in a table. 'SetRowsOfTable' clears - // the key --> index map since it is no longer valid + // GenericParam is the only sorted table indexed by Columns in other tables (GenericParamConstraint\CustomAttributes). + // Hence we need to sort it before we emit any entries in GenericParamConstraint\CustomAttributes that are attached to generic params. + // Note this mutates the rows in a table. 'SetRowsOfTable' clears + // the key --> index map since it is no longer valid cenv.GetTable(TableNames.GenericParam).SetRowsOfSharedTable (SortTableRows TableNames.GenericParam (cenv.GetTable(TableNames.GenericParam).GenericRowsOfTable)) GenTypeDefsPass4 [] cenv tds reportTime cenv.showTimes "Module Generation Pass 4" -/// Arbitrary value -[] -let CodeChunkCapacity = 40000 -/// Arbitrary value -[] -let DataCapacity = 200 -/// Arbitrary value -[] -let ResourceCapacity = 200 - let generateIL requiredDataFixups (desiredMetadataVersion, generatePdb, ilg : ILGlobals, emitTailcalls, deterministic, showTimes) (m : ILModuleDef) cilStartAddress normalizeAssemblyRefs = let isDll = m.IsDLL - use cenv = + let cenv = { emitTailcalls=emitTailcalls deterministic = deterministic showTimes=showTimes @@ -2898,12 +2867,12 @@ let generateIL requiredDataFixups (desiredMetadataVersion, generatePdb, ilg : IL desiredMetadataVersion=desiredMetadataVersion requiredDataFixups= requiredDataFixups requiredStringFixups = [] - codeChunks=ByteBuffer.Create(CodeChunkCapacity, useArrayPool = true) + codeChunks=ByteBuffer.Create 40000 nextCodeAddr = cilStartAddress - data = ByteBuffer.Create DataCapacity - resources = ByteBuffer.Create ResourceCapacity - tables= - Array.init 64 (fun i -> + data = ByteBuffer.Create 200 + resources = ByteBuffer.Create 200 + tables= + Array.init 64 (fun i -> if (i = TableNames.AssemblyRef.Index || i = TableNames.MemberRef.Index || i = TableNames.ModuleRef.Index || @@ -2912,7 +2881,7 @@ let generateIL requiredDataFixups (desiredMetadataVersion, generatePdb, ilg : IL i = TableNames.TypeSpec.Index || i = TableNames.MethodSpec.Index || i = TableNames.StandAloneSig.Index || - i = TableNames.GenericParam.Index) then + i = TableNames.GenericParam.Index) then MetadataTable.Shared (MetadataTable.New ("row table "+string i, EqualityComparer.Default)) else MetadataTable.Unshared (MetadataTable.New ("row table "+string i, EqualityComparer.Default))) @@ -2934,29 +2903,29 @@ let generateIL requiredDataFixups (desiredMetadataVersion, generatePdb, ilg : IL // These must use structural comparison since they are keyed by arrays guids=MetadataTable<_>.New("guids", HashIdentity.Structural) blobs= MetadataTable<_>.New("blobs", HashIdentity.Structural) - strings= MetadataTable<_>.New("strings", EqualityComparer.Default) + strings= MetadataTable<_>.New("strings", EqualityComparer.Default) userStrings= MetadataTable<_>.New("user strings", EqualityComparer.Default) normalizeAssemblyRefs = normalizeAssemblyRefs } - // Now the main compilation step + // Now the main compilation step GenModule cenv m // .exe files have a .entrypoint instruction. Do not write it to the entrypoint when writing dll. - let entryPointToken = - match cenv.entrypoint with - | Some (epHere, tok) -> + let entryPointToken = + match cenv.entrypoint with + | Some (epHere, tok) -> if isDll then 0x0 - else getUncodedToken (if epHere then TableNames.Method else TableNames.File) tok - | None -> + else getUncodedToken (if epHere then TableNames.Method else TableNames.File) tok + | None -> if not isDll then dprintn "warning: no entrypoint specified in executable binary" 0x0 - let pdbData = + let pdbData = { EntryPoint= (if isDll then None else Some entryPointToken) Timestamp = timestamp ModuleID = cenv.moduleGuid Documents = cenv.documents.EntriesAsArray - Methods = cenv.pdbinfo.ToArray() + Methods = cenv.pdbinfo.ToArray() TableRowCounts = cenv.tables |> Seq.map(fun t -> t.Count) |> Seq.toArray } let idxForNextedTypeDef (tds: ILTypeDef list, td: ILTypeDef) = @@ -2967,9 +2936,9 @@ let generateIL requiredDataFixups (desiredMetadataVersion, generatePdb, ilg : IL let userStrings = cenv.userStrings.EntriesAsArray |> Array.map System.Text.Encoding.Unicode.GetBytes let blobs = cenv.blobs.EntriesAsArray let guids = cenv.guids.EntriesAsArray - let tables = cenv.tables - let code = cenv.GetCode() - // turn idx tbls into token maps + let tables = cenv.tables + let code = cenv.GetCode() + // turn idx tbls into token maps let mappings = { TypeDefTokenMap = (fun t -> getUncodedToken TableNames.TypeDef (idxForNextedTypeDef t)) @@ -2986,9 +2955,9 @@ let generateIL requiredDataFixups (desiredMetadataVersion, generatePdb, ilg : IL let tidx = idxForNextedTypeDef t getUncodedToken TableNames.Event (cenv.eventDefs.GetTableEntry (EventKey (tidx, ed.Name)))) } reportTime cenv.showTimes "Finalize Module Generation Results" - // New return the results - let data = cenv.data.AsMemory().ToArray() - let resources = cenv.resources.AsMemory().ToArray() + // New return the results + let data = cenv.data.Close() + let resources = cenv.resources.Close() (strings, userStrings, blobs, guids, tables, entryPointToken, code, cenv.requiredStringFixups, data, resources, pdbData, mappings) @@ -2999,10 +2968,10 @@ let chunk sz next = ({addr=next; size=sz}, next + sz) let emptychunk next = ({addr=next; size=0}, next) let nochunk next = ({addr= 0x0;size= 0x0; }, next) -let count f arr = - Array.fold (fun x y -> x + f y) 0x0 arr +let count f arr = + Array.fold (fun x y -> x + f y) 0x0 arr -module FileSystemUtilities = +module FileSystemUtilities = open System open System.Reflection open System.Globalization @@ -3010,19 +2979,19 @@ module FileSystemUtilities = let setExecutablePermission (filename: string) = #if ENABLE_MONO_SUPPORT - if runningOnMono then - try + if runningOnMono then + try let monoPosix = Assembly.Load("Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756") if progress then eprintf "loading type Mono.Unix.UnixFileInfo...\n" - let monoUnixFileInfo = monoPosix.GetType("Mono.Unix.UnixFileSystemInfo") + let monoUnixFileInfo = monoPosix.GetType("Mono.Unix.UnixFileSystemInfo") let fileEntry = monoUnixFileInfo.InvokeMember("GetFileSystemEntry", (BindingFlags.InvokeMethod ||| BindingFlags.Static ||| BindingFlags.Public), null, null, [| box filename |], CultureInfo.InvariantCulture) - let prevPermissions = monoUnixFileInfo.InvokeMember("get_FileAccessPermissions", (BindingFlags.InvokeMethod ||| BindingFlags.Instance ||| BindingFlags.Public), null, fileEntry, [| |], CultureInfo.InvariantCulture) + let prevPermissions = monoUnixFileInfo.InvokeMember("get_FileAccessPermissions", (BindingFlags.InvokeMethod ||| BindingFlags.Instance ||| BindingFlags.Public), null, fileEntry, [| |], CultureInfo.InvariantCulture) let prevPermissionsValue = prevPermissions |> unbox let newPermissionsValue = prevPermissionsValue ||| 0x000001ED let newPermissions = Enum.ToObject(prevPermissions.GetType(), newPermissionsValue) // Add 0x000001ED (UserReadWriteExecute, GroupReadExecute, OtherReadExecute) to the access permissions on Unix monoUnixFileInfo.InvokeMember("set_FileAccessPermissions", (BindingFlags.InvokeMethod ||| BindingFlags.Instance ||| BindingFlags.Public), null, fileEntry, [| newPermissions |], CultureInfo.InvariantCulture) |> ignore - with e -> + with e -> if progress then eprintf "failure: %s...\n" (e.ToString()) // Fail silently else @@ -3031,35 +3000,28 @@ module FileSystemUtilities = #endif () -/// Arbitrary value -[] -let TableCapacity = 20000 -/// Arbitrary value -[] -let MetadataCapacity = 500000 - let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailcalls, deterministic, showTimes) modul cilStartAddress normalizeAssemblyRefs = // When we know the real RVAs of the data section we fixup the references for the FieldRVA table. - // These references are stored as offsets into the metadata we return from this function + // These references are stored as offsets into the metadata we return from this function let requiredDataFixups = ref [] let next = cilStartAddress - let strings, userStrings, blobs, guids, tables, entryPointToken, code, requiredStringFixups, data, resources, pdbData, mappings = + let strings, userStrings, blobs, guids, tables, entryPointToken, code, requiredStringFixups, data, resources, pdbData, mappings = generateIL requiredDataFixups (desiredMetadataVersion, generatePdb, ilg, emitTailcalls, deterministic, showTimes) modul cilStartAddress normalizeAssemblyRefs reportTime showTimes "Generated Tables and Code" let tableSize (tab: TableName) = tables.[tab.Index].Count - // Now place the code + // Now place the code let codeSize = code.Length let alignedCodeSize = align 0x4 codeSize let codep, next = chunk codeSize next let codePadding = Array.create (alignedCodeSize - codeSize) 0x0uy let _codePaddingChunk, next = chunk codePadding.Length next - // Now layout the chunks of metadata and IL + // Now layout the chunks of metadata and IL let metadataHeaderStartChunk, _next = chunk 0x10 next let numStreams = 0x05 @@ -3072,8 +3034,8 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca let paddedVersionLength = align 0x4 (Array.length version) - // Most addresses after this point are measured from the MD root - // Switch to md-rooted addresses + // Most addresses after this point are measured from the MD root + // Switch to md-rooted addresses let next = metadataHeaderStartChunk.size let _metadataHeaderVersionChunk, next = chunk paddedVersionLength next let _metadataHeaderEndChunk, next = chunk 0x04 next @@ -3087,13 +3049,13 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca let stringsStreamUnpaddedSize = count (fun (s: byte[]) -> s.Length) strings + 1 let stringsStreamPaddedSize = align 4 stringsStreamUnpaddedSize - + let userStringsStreamUnpaddedSize = count (fun (s: byte[]) -> let n = s.Length + 1 in n + ByteBuffer.Z32Size n) userStrings + 1 let userStringsStreamPaddedSize = align 4 userStringsStreamUnpaddedSize - + let guidsStreamUnpaddedSize = (Array.length guids) * 0x10 let guidsStreamPaddedSize = align 4 guidsStreamUnpaddedSize - + let blobsStreamUnpaddedSize = count (fun (blob: byte[]) -> let n = blob.Length in n + ByteBuffer.Z32Size n) blobs + 1 let blobsStreamPaddedSize = align 4 blobsStreamUnpaddedSize @@ -3101,31 +3063,31 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca let stringsBig = stringsStreamPaddedSize >= 0x10000 let blobsBig = blobsStreamPaddedSize >= 0x10000 - // 64bit bitvector indicating which tables are in the metadata. - let (valid1, valid2), _ = - (((0, 0), 0), tables) ||> Array.fold (fun ((valid1, valid2) as valid, n) rows -> - let valid = + // 64bit bitvector indicating which tables are in the metadata. + let (valid1, valid2), _ = + (((0, 0), 0), tables) ||> Array.fold (fun ((valid1, valid2) as valid, n) rows -> + let valid = if rows.Count = 0 then valid else - ( (if n < 32 then valid1 ||| (1 <<< n ) else valid1), + ( (if n < 32 then valid1 ||| (1 <<< n ) else valid1), (if n >= 32 then valid2 ||| (1 <<< (n-32)) else valid2) ) (valid, n+1)) - // 64bit bitvector indicating which tables are sorted. - // Constant - REVIEW: make symbolic! compute from sorted table info! + // 64bit bitvector indicating which tables are sorted. + // Constant - REVIEW: make symbolic! compute from sorted table info! let sorted1 = 0x3301fa00 - let sorted2 = - // If there are any generic parameters in the binary we're emitting then mark that - // table as sorted, otherwise don't. This maximizes the number of assemblies we emit - // which have an ECMA-v.1. compliant set of sorted tables. - (if tableSize TableNames.GenericParam > 0 then 0x00000400 else 0x00000000) ||| - (if tableSize TableNames.GenericParamConstraint > 0 then 0x00001000 else 0x00000000) ||| + let sorted2 = + // If there are any generic parameters in the binary we're emitting then mark that + // table as sorted, otherwise don't. This maximizes the number of assemblies we emit + // which have an ECMA-v.1. compliant set of sorted tables. + (if tableSize TableNames.GenericParam > 0 then 0x00000400 else 0x00000000) ||| + (if tableSize TableNames.GenericParamConstraint > 0 then 0x00001000 else 0x00000000) ||| 0x00000200 - + reportTime showTimes "Layout Header of Tables" let guidAddress n = (if n = 0 then 0 else (n - 1) * 0x10 + 0x01) - let stringAddressTable = + let stringAddressTable = let tab = Array.create (strings.Length + 1) 0 let pos = ref 1 for i = 1 to strings.Length do @@ -3134,11 +3096,11 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca pos := !pos + s.Length tab - let stringAddress n = + let stringAddress n = if n >= Array.length stringAddressTable then failwith ("string index "+string n+" out of range") stringAddressTable.[n] - - let userStringAddressTable = + + let userStringAddressTable = let tab = Array.create (Array.length userStrings + 1) 0 let pos = ref 1 for i = 1 to Array.length userStrings do @@ -3148,11 +3110,11 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca pos := !pos + n + ByteBuffer.Z32Size n tab - let userStringAddress n = + let userStringAddress n = if n >= Array.length userStringAddressTable then failwith "userString index out of range" userStringAddressTable.[n] - - let blobAddressTable = + + let blobAddressTable = let tab = Array.create (blobs.Length + 1) 0 let pos = ref 1 for i = 1 to blobs.Length do @@ -3161,44 +3123,44 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca pos := !pos + blob.Length + ByteBuffer.Z32Size blob.Length tab - let blobAddress n = + let blobAddress n = if n >= blobAddressTable.Length then failwith "blob index out of range" blobAddressTable.[n] - + reportTime showTimes "Build String/Blob Address Tables" - let sortedTables = - Array.init 64 (fun i -> + let sortedTables = + Array.init 64 (fun i -> let tab = tables.[i] let tabName = TableName.FromIndex i let rows = tab.GenericRowsOfTable if TableRequiresSorting tabName then SortTableRows tabName rows else rows) - + reportTime showTimes "Sort Tables" - let codedTables = - + let codedTables = + let bignessTable = Array.map (fun rows -> Array.length rows >= 0x10000) sortedTables let bigness (tab: int32) = bignessTable.[tab] - + let codedBigness nbits tab = (tableSize tab) >= (0x10000 >>> nbits) - - let tdorBigness = - codedBigness 2 TableNames.TypeDef || - codedBigness 2 TableNames.TypeRef || + + let tdorBigness = + codedBigness 2 TableNames.TypeDef || + codedBigness 2 TableNames.TypeRef || codedBigness 2 TableNames.TypeSpec - - let tomdBigness = - codedBigness 1 TableNames.TypeDef || + + let tomdBigness = + codedBigness 1 TableNames.TypeDef || codedBigness 1 TableNames.Method - - let hcBigness = + + let hcBigness = codedBigness 2 TableNames.Field || codedBigness 2 TableNames.Param || codedBigness 2 TableNames.Property - - let hcaBigness = + + let hcaBigness = codedBigness 5 TableNames.Method || codedBigness 5 TableNames.Field || codedBigness 5 TableNames.TypeRef || @@ -3222,83 +3184,83 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca codedBigness 5 TableNames.GenericParamConstraint || codedBigness 5 TableNames.MethodSpec - - let hfmBigness = - codedBigness 1 TableNames.Field || + + let hfmBigness = + codedBigness 1 TableNames.Field || codedBigness 1 TableNames.Param - - let hdsBigness = - codedBigness 2 TableNames.TypeDef || + + let hdsBigness = + codedBigness 2 TableNames.TypeDef || codedBigness 2 TableNames.Method || codedBigness 2 TableNames.Assembly - - let mrpBigness = + + let mrpBigness = codedBigness 3 TableNames.TypeRef || codedBigness 3 TableNames.ModuleRef || codedBigness 3 TableNames.Method || codedBigness 3 TableNames.TypeSpec - - let hsBigness = - codedBigness 1 TableNames.Event || - codedBigness 1 TableNames.Property - + + let hsBigness = + codedBigness 1 TableNames.Event || + codedBigness 1 TableNames.Property + let mdorBigness = - codedBigness 1 TableNames.Method || - codedBigness 1 TableNames.MemberRef - + codedBigness 1 TableNames.Method || + codedBigness 1 TableNames.MemberRef + let mfBigness = codedBigness 1 TableNames.Field || - codedBigness 1 TableNames.Method - + codedBigness 1 TableNames.Method + let iBigness = - codedBigness 2 TableNames.File || - codedBigness 2 TableNames.AssemblyRef || - codedBigness 2 TableNames.ExportedType - - let catBigness = - codedBigness 3 TableNames.Method || - codedBigness 3 TableNames.MemberRef - - let rsBigness = - codedBigness 2 TableNames.Module || - codedBigness 2 TableNames.ModuleRef || + codedBigness 2 TableNames.File || + codedBigness 2 TableNames.AssemblyRef || + codedBigness 2 TableNames.ExportedType + + let catBigness = + codedBigness 3 TableNames.Method || + codedBigness 3 TableNames.MemberRef + + let rsBigness = + codedBigness 2 TableNames.Module || + codedBigness 2 TableNames.ModuleRef || codedBigness 2 TableNames.AssemblyRef || codedBigness 2 TableNames.TypeRef - use tablesBuf = ByteBuffer.Create(TableCapacity, useArrayPool = true) + let tablesBuf = ByteBuffer.Create 20000 - // Now the coded tables themselves - first the schemata header - tablesBuf.EmitIntsAsBytes + // Now the coded tables themselves - first the schemata header + tablesBuf.EmitIntsAsBytes [| 0x00; 0x00; 0x00; 0x00 - mdtableVersionMajor // major version of table schemata - mdtableVersionMinor // minor version of table schemata - - ((if stringsBig then 0x01 else 0x00) ||| // bit vector for heap size - (if guidsBig then 0x02 else 0x00) ||| + mdtableVersionMajor // major version of table schemata + mdtableVersionMinor // minor version of table schemata + + ((if stringsBig then 0x01 else 0x00) ||| // bit vector for heap size + (if guidsBig then 0x02 else 0x00) ||| (if blobsBig then 0x04 else 0x00)) 0x01 (* reserved, always 1 *) |] - + tablesBuf.EmitInt32 valid1 tablesBuf.EmitInt32 valid2 tablesBuf.EmitInt32 sorted1 tablesBuf.EmitInt32 sorted2 - - // Numbers of rows in various tables - for rows in sortedTables do - if rows.Length <> 0 then - tablesBuf.EmitInt32 rows.Length - - + + // Numbers of rows in various tables + for rows in sortedTables do + if rows.Length <> 0 then + tablesBuf.EmitInt32 rows.Length + + reportTime showTimes "Write Header of tablebuf" - // The tables themselves + // The tables themselves for rows in sortedTables do - for row in rows do - for x in row do - // Emit the coded token for the array element + for row in rows do + for x in row do + // Emit the coded token for the array element let t = x.Tag let n = x.Val - match t with + match t with | _ when t = RowElementTags.UShort -> tablesBuf.EmitUInt16 (uint16 n) | _ when t = RowElementTags.ULong -> tablesBuf.EmitInt32 n | _ when t = RowElementTags.Data -> recordRequiredDataFixup requiredDataFixups tablesBuf (tablesStreamStart + tablesBuf.Position) (n, false) @@ -3313,8 +3275,8 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca | _ when t <= RowElementTags.HasCustomAttributeMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.HasCustomAttributeMin) 5 hcaBigness n | _ when t <= RowElementTags.HasFieldMarshalMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.HasFieldMarshalMin) 1 hfmBigness n | _ when t <= RowElementTags.HasDeclSecurityMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.HasDeclSecurityMin) 2 hdsBigness n - | _ when t <= RowElementTags.MemberRefParentMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.MemberRefParentMin) 3 mrpBigness n - | _ when t <= RowElementTags.HasSemanticsMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.HasSemanticsMin) 1 hsBigness n + | _ when t <= RowElementTags.MemberRefParentMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.MemberRefParentMin) 3 mrpBigness n + | _ when t <= RowElementTags.HasSemanticsMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.HasSemanticsMin) 1 hsBigness n | _ when t <= RowElementTags.MethodDefOrRefMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.MethodDefOrRefMin) 1 mdorBigness n | _ when t <= RowElementTags.MemberForwardedMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.MemberForwardedMin) 1 mfBigness n | _ when t <= RowElementTags.ImplementationMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.ImplementationMin) 2 iBigness n @@ -3322,13 +3284,13 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca | _ when t <= RowElementTags.ResolutionScopeMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.ResolutionScopeMin) 2 rsBigness n | _ -> failwith "invalid tag in row element" - tablesBuf.AsMemory().ToArray() + tablesBuf.Close() reportTime showTimes "Write Tables to tablebuf" let tablesStreamUnpaddedSize = codedTables.Length - // QUERY: extra 4 empty bytes in array.exe - why? Include some extra padding after - // the tables just in case there is a mistake in the ECMA spec. + // QUERY: extra 4 empty bytes in array.exe - why? Include some extra padding after + // the tables just in case there is a mistake in the ECMA spec. let tablesStreamPaddedSize = align 4 (tablesStreamUnpaddedSize + 4) let tablesChunk, next = chunk tablesStreamPaddedSize next let tablesStreamPadding = tablesChunk.size - tablesStreamUnpaddedSize @@ -3340,25 +3302,25 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca let guidsChunk, next = chunk (0x10 * guids.Length) next let blobsChunk, _next = chunk blobsStreamPaddedSize next let blobsStreamPadding = blobsChunk.size - blobsStreamUnpaddedSize - + reportTime showTimes "Layout Metadata" let metadata, guidStart = - use mdbuf = ByteBuffer.Create(MetadataCapacity, useArrayPool = true) - mdbuf.EmitIntsAsBytes - [| 0x42; 0x53; 0x4a; 0x42 // Magic signature - 0x01; 0x00 // Major version - 0x01; 0x00 // Minor version + let mdbuf = ByteBuffer.Create 500000 + mdbuf.EmitIntsAsBytes + [| 0x42; 0x53; 0x4a; 0x42 // Magic signature + 0x01; 0x00 // Major version + 0x01; 0x00 // Minor version |] - mdbuf.EmitInt32 0x0 // Reserved + mdbuf.EmitInt32 0x0 // Reserved mdbuf.EmitInt32 paddedVersionLength mdbuf.EmitBytes version - for i = 1 to (paddedVersionLength - Array.length version) do + for i = 1 to (paddedVersionLength - Array.length version) do mdbuf.EmitIntAsByte 0x00 - mdbuf.EmitBytes - [| 0x00uy; 0x00uy // flags, reserved + mdbuf.EmitBytes + [| 0x00uy; 0x00uy // flags, reserved b0 numStreams; b1 numStreams; |] mdbuf.EmitInt32 tablesChunk.addr mdbuf.EmitInt32 tablesChunk.size @@ -3375,52 +3337,52 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca mdbuf.EmitInt32 blobsChunk.addr mdbuf.EmitInt32 blobsChunk.size mdbuf.EmitIntsAsBytes [| 0x23; 0x42; 0x6c; 0x6f; 0x62; 0x00; 0x00; 0x00; (* #Blob000 *)|] - + reportTime showTimes "Write Metadata Header" - // Now the coded tables themselves + // Now the coded tables themselves mdbuf.EmitBytes codedTables - for i = 1 to tablesStreamPadding do + for i = 1 to tablesStreamPadding do mdbuf.EmitIntAsByte 0x00 reportTime showTimes "Write Metadata Tables" - // The string stream + // The string stream mdbuf.EmitByte 0x00uy for s in strings do mdbuf.EmitBytes s - for i = 1 to stringsStreamPadding do + for i = 1 to stringsStreamPadding do mdbuf.EmitIntAsByte 0x00 reportTime showTimes "Write Metadata Strings" - // The user string stream + // The user string stream mdbuf.EmitByte 0x00uy for s in userStrings do mdbuf.EmitZ32 (s.Length + 1) mdbuf.EmitBytes s mdbuf.EmitIntAsByte (markerForUnicodeBytes s) - for i = 1 to userStringsStreamPadding do + for i = 1 to userStringsStreamPadding do mdbuf.EmitIntAsByte 0x00 reportTime showTimes "Write Metadata User Strings" - // The GUID stream + // The GUID stream let guidStart = mdbuf.Position Array.iter mdbuf.EmitBytes guids - - // The blob stream + + // The blob stream mdbuf.EmitByte 0x00uy - for s in blobs do + for s in blobs do mdbuf.EmitZ32 s.Length mdbuf.EmitBytes s - for i = 1 to blobsStreamPadding do + for i = 1 to blobsStreamPadding do mdbuf.EmitIntAsByte 0x00 reportTime showTimes "Write Blob Stream" - // Done - close the buffer and return the result. - mdbuf.AsMemory().ToArray(), guidStart - + // Done - close the buffer and return the result. + mdbuf.Close(), guidStart + - // Now we know the user string tables etc. we can fixup the - // uses of strings in the code + // Now we know the user string tables etc. we can fixup the + // uses of strings in the code for (codeStartAddr, l) in requiredStringFixups do - for (codeOffset, userStringIndex) in l do - if codeStartAddr < codep.addr || codeStartAddr >= codep.addr + codep.size then + for (codeOffset, userStringIndex) in l do + if codeStartAddr < codep.addr || codeStartAddr >= codep.addr + codep.size then failwith "strings-in-code fixup: a group of fixups is located outside the code array" let locInCode = ((codeStartAddr + codeOffset) - codep.addr) checkFixup32 code locInCode 0xdeadbeef @@ -3435,17 +3397,17 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca // PHYSICAL METADATA+BLOBS --> PHYSICAL PE FORMAT //--------------------------------------------------------------------- -// THIS LAYS OUT A 2-SECTION .NET PE BINARY -// SECTIONS +// THIS LAYS OUT A 2-SECTION .NET PE BINARY +// SECTIONS // TEXT: physical 0x0200 --> RVA 0x00020000 -// e.g. raw size 0x9600, +// e.g. raw size 0x9600, // e.g. virt size 0x9584 // RELOC: physical 0x9800 --> RVA 0x0000c000 // i.e. physbase --> rvabase // where physbase = textbase + text raw size // phsrva = roundup(0x2000, 0x0002000 + text virt size) -let msdosHeader : byte[] = +let msdosHeader : byte[] = [| 0x4duy; 0x5auy; 0x90uy; 0x00uy; 0x03uy; 0x00uy; 0x00uy; 0x00uy 0x04uy; 0x00uy; 0x00uy; 0x00uy; 0xFFuy; 0xFFuy; 0x00uy; 0x00uy 0xb8uy; 0x00uy; 0x00uy; 0x00uy; 0x00uy; 0x00uy; 0x00uy; 0x00uy @@ -3473,80 +3435,37 @@ let writeInt64 (os: BinaryWriter) x = os.Write (dw6 x) os.Write (dw7 x) -let writeInt32 (os: BinaryWriter) x = +let writeInt32 (os: BinaryWriter) x = os.Write (byte (b0 x)) os.Write (byte (b1 x)) os.Write (byte (b2 x)) - os.Write (byte (b3 x)) + os.Write (byte (b3 x)) -let writeInt32AsUInt16 (os: BinaryWriter) x = +let writeInt32AsUInt16 (os: BinaryWriter) x = os.Write (byte (b0 x)) os.Write (byte (b1 x)) - + let writeDirectory os dict = writeInt32 os (if dict.size = 0x0 then 0x0 else dict.addr) writeInt32 os dict.size -let writeBytes (os: BinaryWriter) (chunk: byte[]) = os.Write(chunk, 0, chunk.Length) - -let rec writeBinaryAndReportMappings (outfile, - ilg: ILGlobals, pdbfile: string option, signer: ILStrongNameSigner option, portablePDB, embeddedPDB, - embedAllSource, embedSourceList, sourceLink, checksumAlgorithm, emitTailcalls, deterministic, showTimes, dumpDebugInfo, pathMap) - modul normalizeAssemblyRefs = - - let stream = - try - // Ensure the output directory exists otherwise it will fail - let dir = FileSystem.GetDirectoryNameShim outfile - if not (FileSystem.DirectoryExistsShim dir) then FileSystem.DirectoryCreateShim dir |> ignore - FileSystem.OpenFileForWriteShim(outfile, FileMode.Create, FileAccess.Write, FileShare.Read) - with _ -> - failwith ("Could not open file for writing (binary mode): " + outfile) - - let pdbData, pdbOpt, debugDirectoryChunk, debugDataChunk, debugChecksumPdbChunk, debugEmbeddedPdbChunk, debugDeterministicPdbChunk, textV2P, mappings = - try - let res = writeBinaryAndReportMappingsAux(stream, false, ilg, pdbfile, signer, portablePDB, embeddedPDB, embedAllSource, embedSourceList, sourceLink, - checksumAlgorithm, emitTailcalls, deterministic, showTimes, pathMap) modul normalizeAssemblyRefs - - try - FileSystemUtilities.setExecutablePermission outfile - with _ -> - () - - res - with - | _ -> - try FileSystem.FileDeleteShim outfile with | _ -> () - reraise() - - writePdb - (dumpDebugInfo, showTimes, portablePDB, embeddedPDB, pdbfile, outfile, signer, deterministic, pathMap) - (pdbData, pdbOpt, debugDirectoryChunk, debugDataChunk, debugChecksumPdbChunk, debugEmbeddedPdbChunk, debugDeterministicPdbChunk, textV2P, mappings) - -and writeBinaryWithNoPdb (stream: Stream, - ilg: ILGlobals, signer: ILStrongNameSigner option, portablePDB, embeddedPDB, - embedAllSource, embedSourceList, sourceLink, checksumAlgorithm, emitTailcalls, deterministic, showTimes, pathMap) - modul normalizeAssemblyRefs = - - writeBinaryAndReportMappingsAux(stream, true, ilg, None, signer, portablePDB, embeddedPDB, embedAllSource, embedSourceList, sourceLink, - checksumAlgorithm, emitTailcalls, deterministic, showTimes, pathMap) modul normalizeAssemblyRefs - |> ignore +let writeBytes (os: BinaryWriter) (chunk: byte[]) = os.Write(chunk, 0, chunk.Length) -and writeBinaryAndReportMappingsAux (stream: Stream, leaveStreamOpen: bool, - ilg: ILGlobals, pdbfile: string option, signer: ILStrongNameSigner option, portablePDB, embeddedPDB, - embedAllSource, embedSourceList, sourceLink, checksumAlgorithm, emitTailcalls, deterministic, showTimes, pathMap) - modul normalizeAssemblyRefs = - // Store the public key from the signer into the manifest. This means it will be written - // to the binary and also acts as an indicator to leave space for delay sign +let writeBinaryAndReportMappings (outfile, + ilg: ILGlobals, pdbfile: string option, signer: ILStrongNameSigner option, portablePDB, embeddedPDB, + embedAllSource, embedSourceList, sourceLink, checksumAlgorithm, emitTailcalls, deterministic, showTimes, dumpDebugInfo, pathMap) + modul normalizeAssemblyRefs = + // Store the public key from the signer into the manifest. This means it will be written + // to the binary and also acts as an indicator to leave space for delay sign reportTime showTimes "Write Started" let isDll = modul.IsDLL - - let signer = + + let signer = match signer, modul.Manifest with | Some _, _ -> signer | _, None -> signer - | None, Some {PublicKey=Some pubkey} -> + | None, Some {PublicKey=Some pubkey} -> (dprintn "Note: The output assembly will be delay-signed using the original public" dprintn "Note: key. In order to load it you will need to either sign it with" dprintn "Note: the original private key or to turn off strong-name verification" @@ -3557,86 +3476,93 @@ and writeBinaryAndReportMappingsAux (stream: Stream, leaveStreamOpen: bool, Some (ILStrongNameSigner.OpenPublicKey pubkey)) | _ -> signer - let modul = + let modul = let pubkey = - match signer with + match signer with | None -> None - | Some s -> - try Some s.PublicKey - with e -> + | Some s -> + try Some s.PublicKey + with e -> failwith ("A call to StrongNameGetPublicKey failed ("+e.Message+")") None - begin match modul.Manifest with - | None -> () - | Some m -> - if m.PublicKey <> None && m.PublicKey <> pubkey then + begin match modul.Manifest with + | None -> () + | Some m -> + if m.PublicKey <> None && m.PublicKey <> pubkey then dprintn "Warning: The output assembly is being signed or delay-signed with a strong name that is different to the original." end { modul with Manifest = match modul.Manifest with None -> None | Some m -> Some {m with PublicKey = pubkey} } - let os = new BinaryWriter(stream, System.Text.Encoding.UTF8, leaveOpen=leaveStreamOpen) + let os = + try + // Ensure the output directory exists otherwise it will fail + let dir = Path.GetDirectoryName outfile + if not (Directory.Exists dir) then Directory.CreateDirectory dir |>ignore + new BinaryWriter(FileSystem.FileStreamCreateShim outfile) + with e -> + failwith ("Could not open file for writing (binary mode): " + outfile) let pdbData, pdbOpt, debugDirectoryChunk, debugDataChunk, debugChecksumPdbChunk, debugEmbeddedPdbChunk, debugDeterministicPdbChunk, textV2P, mappings = - try + try let imageBaseReal = modul.ImageBase // FIXED CHOICE let alignVirt = modul.VirtualAlignment // FIXED CHOICE let alignPhys = modul.PhysicalAlignment // FIXED CHOICE - + let isItanium = modul.Platform = Some IA64 + + let numSections = 3 // .text, .sdata, .reloc - let numSections = 3 // .text, .sdata, .reloc - - // HEADERS + // HEADERS let next = 0x0 let headerSectionPhysLoc = 0x0 let headerAddr = next let next = headerAddr - + let msdosHeaderSize = 0x80 let msdosHeaderChunk, next = chunk msdosHeaderSize next - + let peSignatureSize = 0x04 let peSignatureChunk, next = chunk peSignatureSize next - + let peFileHeaderSize = 0x14 let peFileHeaderChunk, next = chunk peFileHeaderSize next - + let peOptionalHeaderSize = if modul.Is64Bit then 0xf0 else 0xe0 let peOptionalHeaderChunk, next = chunk peOptionalHeaderSize next - + let textSectionHeaderSize = 0x28 let textSectionHeaderChunk, next = chunk textSectionHeaderSize next - + let dataSectionHeaderSize = 0x28 let dataSectionHeaderChunk, next = chunk dataSectionHeaderSize next - + let relocSectionHeaderSize = 0x28 let relocSectionHeaderChunk, next = chunk relocSectionHeaderSize next - + let headerSize = next - headerAddr let nextPhys = align alignPhys (headerSectionPhysLoc + headerSize) let headerSectionPhysSize = nextPhys - headerSectionPhysLoc let next = align alignVirt (headerAddr + headerSize) - - // TEXT SECTION: 8 bytes IAT table 72 bytes CLI header + + // TEXT SECTION: 8 bytes IAT table 72 bytes CLI header let textSectionPhysLoc = nextPhys let textSectionAddr = next let next = textSectionAddr - + let importAddrTableChunk, next = chunk 0x08 next let cliHeaderPadding = (if isItanium then (align 16 next) else next) - next let next = next + cliHeaderPadding let cliHeaderChunk, next = chunk 0x48 next - - let desiredMetadataVersion = + + let desiredMetadataVersion = if modul.MetadataVersion <> "" then parseILVersion modul.MetadataVersion else - match ilg.primaryAssemblyScopeRef with - | ILScopeRef.Local -> failwith "Expected mscorlib to be ILScopeRef.Assembly was ILScopeRef.Local" + match ilg.primaryAssemblyScopeRef with + | ILScopeRef.Local -> failwith "Expected mscorlib to be ILScopeRef.Assembly was ILScopeRef.Local" | ILScopeRef.Module(_) -> failwith "Expected mscorlib to be ILScopeRef.Assembly was ILScopeRef.Module" | ILScopeRef.PrimaryAssembly -> failwith "Expected mscorlib to be ILScopeRef.Assembly was ILScopeRef.PrimaryAssembly" | ILScopeRef.Assembly aref -> @@ -3651,16 +3577,16 @@ and writeBinaryAndReportMappingsAux (stream: Stream, leaveStreamOpen: bool, reportTime showTimes "Generated IL and metadata" let _codeChunk, next = chunk code.Length next let _codePaddingChunk, next = chunk codePadding.Length next - + let metadataChunk, next = chunk metadata.Length next - - let strongnameChunk, next = - match signer with + + let strongnameChunk, next = + match signer with | None -> nochunk next | Some s -> chunk s.SignatureSize next let resourcesChunk, next = chunk resources.Length next - + let rawdataChunk, next = chunk data.Length next let vtfixupsChunk, next = nochunk next // Note: only needed for mixed mode assemblies @@ -3674,15 +3600,15 @@ and writeBinaryAndReportMappingsAux (stream: Stream, leaveStreamOpen: bool, let next = align 0x10 (next + 0x05) - 0x05 let importTableChunk = { addr=importTableChunk.addr; size = next - importTableChunk.addr} let importTableChunkPadding = importTableChunk.size - (0x28 + 0x14 + 0x0e + 0x0c) - + let next = next + 0x03 let entrypointCodeChunk, next = chunk 0x06 next let globalpointerCodeChunk, next = chunk (if isItanium then 0x8 else 0x0) next let pdbOpt = match portablePDB with - | true -> - let (uncompressedLength, contentId, stream, algorithmName, checkSum) as pdbStream = + | true -> + let (uncompressedLength, contentId, stream, algorithmName, checkSum) as pdbStream = generatePortablePdb embedAllSource embedSourceList sourceLink checksumAlgorithm showTimes pdbData pathMap if embeddedPDB then @@ -3701,15 +3627,15 @@ and writeBinaryAndReportMappingsAux (stream: Stream, leaveStreamOpen: bool, (if deterministic then sizeof_IMAGE_DEBUG_DIRECTORY else 0) ) next - // The debug data is given to us by the PDB writer and appears to - // typically be the type of the data plus the PDB file name. We fill - // this in after we've written the binary. We approximate the size according - // to what PDB writers seem to require and leave extra space just in case... + // The debug data is given to us by the PDB writer and appears to + // typically be the type of the data plus the PDB file name. We fill + // this in after we've written the binary. We approximate the size according + // to what PDB writers seem to require and leave extra space just in case... let debugDataJustInCase = 40 let debugDataChunk, next = - chunk (align 0x4 (match pdbfile with + chunk (align 0x4 (match pdbfile with | None -> 0 - | Some f -> (24 + | Some f -> (24 + System.Text.Encoding.Unicode.GetByteCount f // See bug 748444 + debugDataJustInCase))) next @@ -3723,18 +3649,18 @@ and writeBinaryAndReportMappingsAux (stream: Stream, leaveStreamOpen: bool, let debugEmbeddedPdbChunk, next = if embeddedPDB then - let streamLength = + let streamLength = match pdbOpt with | Some (_, _, stream, _, _) -> int stream.Length | None -> 0 - chunk (align 0x4 (match embeddedPDB with + chunk (align 0x4 (match embeddedPDB with | true -> 8 + streamLength | _ -> 0 )) next else nochunk next let debugDeterministicPdbChunk, next = - if deterministic then emptychunk next + if deterministic then emptychunk next else nochunk next @@ -3755,8 +3681,7 @@ and writeBinaryAndReportMappingsAux (stream: Stream, leaveStreamOpen: bool, resources |> List.map (function | ILNativeResource.Out bytes -> bytes | ILNativeResource.In (fileName, linkedResourceBase, start, len) -> - use stream = FileSystem.OpenFileForReadShim(fileName) - let linkedResource = stream.ReadBytes(start, len) + let linkedResource = File.ReadBinaryChunk (fileName, start, len) unlinkResource linkedResourceBase linkedResource) begin @@ -3767,15 +3692,15 @@ and writeBinaryAndReportMappingsAux (stream: Stream, leaveStreamOpen: bool, let nativeResourcesSize = nativeResources.Length let nativeResourcesChunk, next = chunk nativeResourcesSize next - + let dummydatap, next = chunk (if next = dataSectionAddr then 0x01 else 0x0) next - + let dataSectionSize = next - dataSectionAddr let nextPhys = align alignPhys (dataSectionPhysLoc + dataSectionSize) let dataSectionPhysSize = nextPhys - dataSectionPhysLoc let next = align alignVirt (dataSectionAddr + dataSectionSize) - - // .RELOC SECTION base reloc table: 0x0c size + + // .RELOC SECTION base reloc table: 0x0c size let relocSectionPhysLoc = nextPhys let relocSectionAddr = next let baseRelocTableChunk, next = chunk 0x0c next @@ -3785,51 +3710,51 @@ and writeBinaryAndReportMappingsAux (stream: Stream, leaveStreamOpen: bool, let relocSectionPhysSize = nextPhys - relocSectionPhysLoc let next = align alignVirt (relocSectionAddr + relocSectionSize) - // Now we know where the data section lies we can fix up the - // references into the data section from the metadata tables. - begin + // Now we know where the data section lies we can fix up the + // references into the data section from the metadata tables. + begin requiredDataFixups |> List.iter - (fun (metadataOffset32, (dataOffset, kind)) -> + (fun (metadataOffset32, (dataOffset, kind)) -> let metadataOffset = metadataOffset32 if metadataOffset < 0 || metadataOffset >= metadata.Length - 4 then failwith "data RVA fixup: fixup located outside metadata" checkFixup32 metadata metadataOffset 0xdeaddddd - let dataRva = + let dataRva = if kind then let res = dataOffset if res >= resourcesChunk.size then dprintn ("resource offset bigger than resource data section") res - else + else let res = rawdataChunk.addr + dataOffset if res < rawdataChunk.addr then dprintn ("data rva before data section") - if res >= rawdataChunk.addr + rawdataChunk.size then + if res >= rawdataChunk.addr + rawdataChunk.size then dprintn ("data rva after end of data section, dataRva = "+string res+", rawdataChunk.addr = "+string rawdataChunk.addr + ", rawdataChunk.size = "+string rawdataChunk.size) res applyFixup32 metadata metadataOffset dataRva) end - - // IMAGE TOTAL SIZE + + // IMAGE TOTAL SIZE let imageEndSectionPhysLoc = nextPhys let imageEndAddr = next reportTime showTimes "Layout image" - let write p (os: BinaryWriter) chunkName chunk = - match p with - | None -> () - | Some pExpected -> + let write p (os: BinaryWriter) chunkName chunk = + match p with + | None -> () + | Some pExpected -> os.Flush() let pCurrent = int32 os.BaseStream.Position - if pCurrent <> pExpected then - failwith ("warning: "+chunkName+" not where expected, pCurrent = "+string pCurrent+", p.addr = "+string pExpected) - writeBytes os chunk + if pCurrent <> pExpected then + failwith ("warning: "+chunkName+" not where expected, pCurrent = "+string pCurrent+", p.addr = "+string pExpected) + writeBytes os chunk let writePadding (os: BinaryWriter) _comment sz = if sz < 0 then failwith "writePadding: size < 0" - for i = 0 to sz - 1 do + for i = 0 to sz - 1 do os.Write 0uy - // Now we've computed all the offsets, write the image + // Now we've computed all the offsets, write the image write (Some msdosHeaderChunk.addr) os "msdos header" msdosHeader @@ -3840,11 +3765,11 @@ and writeBinaryAndReportMappingsAux (stream: Stream, leaveStreamOpen: bool, write (Some peFileHeaderChunk.addr) os "pe file header" [| |] if (modul.Platform = Some AMD64) then - writeInt32AsUInt16 os 0x8664 // Machine - IMAGE_FILE_MACHINE_AMD64 + writeInt32AsUInt16 os 0x8664 // Machine - IMAGE_FILE_MACHINE_AMD64 elif isItanium then writeInt32AsUInt16 os 0x200 else - writeInt32AsUInt16 os 0x014c // Machine - IMAGE_FILE_MACHINE_I386 + writeInt32AsUInt16 os 0x014c // Machine - IMAGE_FILE_MACHINE_I386 writeInt32AsUInt16 os numSections @@ -3869,7 +3794,7 @@ and writeBinaryAndReportMappingsAux (stream: Stream, leaveStreamOpen: bool, Array.blit final 0 metadata guidStart 16 // Use last 4 bytes for timestamp - High bit set, to stop tool chains becoming confused - let timestamp = int final.[16] ||| (int final.[17] <<< 8) ||| (int final.[18] <<< 16) ||| (int (final.[19] ||| 128uy) <<< 24) + let timestamp = int final.[16] ||| (int final.[17] <<< 8) ||| (int final.[18] <<< 16) ||| (int (final.[19] ||| 128uy) <<< 24) writeInt32 os timestamp // Update pdbData with new guid and timestamp. Portable and embedded PDBs don't need the ModuleID @@ -3879,229 +3804,229 @@ and writeBinaryAndReportMappingsAux (stream: Stream, leaveStreamOpen: bool, writeInt32 os timestamp // date since 1970 pdbData - writeInt32 os 0x00 // Pointer to Symbol Table Always 0 - // 00000090 - writeInt32 os 0x00 // Number of Symbols Always 0 - writeInt32AsUInt16 os peOptionalHeaderSize // Size of the optional header, the format is described below. - + writeInt32 os 0x00 // Pointer to Symbol Table Always 0 + // 00000090 + writeInt32 os 0x00 // Number of Symbols Always 0 + writeInt32AsUInt16 os peOptionalHeaderSize // Size of the optional header, the format is described below. + // 64bit: IMAGE_FILE_32BIT_MACHINE ||| IMAGE_FILE_LARGE_ADDRESS_AWARE // 32bit: IMAGE_FILE_32BIT_MACHINE // Yes, 32BIT_MACHINE is set for AMD64... let iMachineCharacteristic = match modul.Platform with | Some IA64 -> 0x20 | Some AMD64 -> 0x0120 | _ -> 0x0100 - + writeInt32AsUInt16 os ((if isDll then 0x2000 else 0x0000) ||| 0x0002 ||| 0x0004 ||| 0x0008 ||| iMachineCharacteristic) - - // Now comes optional header + + // Now comes optional header let peOptionalHeaderByte = peOptionalHeaderByteByCLRVersion desiredMetadataVersion write (Some peOptionalHeaderChunk.addr) os "pe optional header" [| |] if modul.Is64Bit then - writeInt32AsUInt16 os 0x020B // Magic number is 0x020B for 64-bit + writeInt32AsUInt16 os 0x020B // Magic number is 0x020B for 64-bit else - writeInt32AsUInt16 os 0x010b // Always 0x10B (see Section 23.1). - writeInt32AsUInt16 os peOptionalHeaderByte // ECMA spec says 6, some binaries, e.g. fscmanaged.exe say 7, Whidbey binaries say 8 - writeInt32 os textSectionPhysSize // Size of the code (text) section, or the sum of all code sections if there are multiple sections. - // 000000a0 + writeInt32AsUInt16 os 0x010b // Always 0x10B (see Section 23.1). + writeInt32AsUInt16 os peOptionalHeaderByte // ECMA spec says 6, some binaries, e.g. fscmanaged.exe say 7, Whidbey binaries say 8 + writeInt32 os textSectionPhysSize // Size of the code (text) section, or the sum of all code sections if there are multiple sections. + // 000000a0 writeInt32 os dataSectionPhysSize // Size of the initialized data section writeInt32 os 0x00 // Size of the uninitialized data section - writeInt32 os entrypointCodeChunk.addr // RVA of entry point, needs to point to bytes 0xFF 0x25 followed by the RVA+!0x4000000 - writeInt32 os textSectionAddr // e.g. 0x0002000 - // 000000b0 + writeInt32 os entrypointCodeChunk.addr // RVA of entry point, needs to point to bytes 0xFF 0x25 followed by the RVA+!0x4000000 + writeInt32 os textSectionAddr // e.g. 0x0002000 + // 000000b0 if modul.Is64Bit then - writeInt64 os ((int64)imageBaseReal) // REVIEW: For 64-bit, we should use a 64-bit image base - else - writeInt32 os dataSectionAddr // e.g. 0x0000c000 - writeInt32 os imageBaseReal // Image Base Always 0x400000 (see Section 23.1). - QUERY : no it's not always 0x400000, e.g. 0x034f0000 - - writeInt32 os alignVirt // Section Alignment Always 0x2000 (see Section 23.1). - writeInt32 os alignPhys // File Alignment Either 0x200 or 0x1000. - // 000000c0 - writeInt32AsUInt16 os 0x04 // OS Major Always 4 (see Section 23.1). - writeInt32AsUInt16 os 0x00 // OS Minor Always 0 (see Section 23.1). - writeInt32AsUInt16 os 0x00 // User Major Always 0 (see Section 23.1). - writeInt32AsUInt16 os 0x00 // User Minor Always 0 (see Section 23.1). + writeInt64 os ((int64)imageBaseReal) // REVIEW: For 64-bit, we should use a 64-bit image base + else + writeInt32 os dataSectionAddr // e.g. 0x0000c000 + writeInt32 os imageBaseReal // Image Base Always 0x400000 (see Section 23.1). - QUERY : no it's not always 0x400000, e.g. 0x034f0000 + + writeInt32 os alignVirt // Section Alignment Always 0x2000 (see Section 23.1). + writeInt32 os alignPhys // File Alignment Either 0x200 or 0x1000. + // 000000c0 + writeInt32AsUInt16 os 0x04 // OS Major Always 4 (see Section 23.1). + writeInt32AsUInt16 os 0x00 // OS Minor Always 0 (see Section 23.1). + writeInt32AsUInt16 os 0x00 // User Major Always 0 (see Section 23.1). + writeInt32AsUInt16 os 0x00 // User Minor Always 0 (see Section 23.1). do let (major, minor) = modul.SubsystemVersion writeInt32AsUInt16 os major writeInt32AsUInt16 os minor - writeInt32 os 0x00 // Reserved Always 0 (see Section 23.1). - // 000000d0 + writeInt32 os 0x00 // Reserved Always 0 (see Section 23.1). + // 000000d0 writeInt32 os imageEndAddr // Image Size: Size, in bytes, of image, including all headers and padding writeInt32 os headerSectionPhysSize // Header Size Combined size of MS-DOS Header, PE Header, PE Optional Header and padding - writeInt32 os 0x00 // File Checksum Always 0 (see Section 23.1). QUERY: NOT ALWAYS ZERO + writeInt32 os 0x00 // File Checksum Always 0 (see Section 23.1). QUERY: NOT ALWAYS ZERO writeInt32AsUInt16 os modul.SubSystemFlags // SubSystem Subsystem required to run this image. // DLL Flags Always 0x400 (no unmanaged windows exception handling - see Section 23.1). - // Itanium: see notes at end of file - // IMAGE_DLLCHARACTERISTICS_NX_COMPAT: See FSharp 1.0 bug 5019 and http://blogs.msdn.com/ed_maurer/archive/2007/12/14/nxcompat-and-the-c-compiler.aspx + // Itanium: see notes at end of file + // IMAGE_DLLCHARACTERISTICS_NX_COMPAT: See FSharp 1.0 bug 5019 and http://blogs.msdn.com/ed_maurer/archive/2007/12/14/nxcompat-and-the-c-compiler.aspx // Itanium : IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE | IMAGE_DLLCHARACTERISTICS_ NO_SEH | IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE | IMAGE_DLLCHARACTERISTICS_NX_COMPAT // x86 : IMAGE_DLLCHARACTERISTICS_ NO_SEH | IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE | IMAGE_DLLCHARACTERISTICS_NX_COMPAT // x64 : IMAGE_DLLCHARACTERISTICS_ NO_SEH | IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE | IMAGE_DLLCHARACTERISTICS_NX_COMPAT - let dllCharacteristics = - let flags = + let dllCharacteristics = + let flags = if modul.Is64Bit then (if isItanium then 0x8540 else 0x540) else 0x540 if modul.UseHighEntropyVA then flags ||| 0x20 // IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA else flags writeInt32AsUInt16 os dllCharacteristics - // 000000e0 + // 000000e0 // Note that the defaults differ between x86 and x64 if modul.Is64Bit then let size = defaultArg modul.StackReserveSize 0x400000 |> int64 - writeInt64 os size // Stack Reserve Size Always 0x400000 (4Mb) (see Section 23.1). - writeInt64 os 0x4000L // Stack Commit Size Always 0x4000 (16Kb) (see Section 23.1). - writeInt64 os 0x100000L // Heap Reserve Size Always 0x100000 (1Mb) (see Section 23.1). - writeInt64 os 0x2000L // Heap Commit Size Always 0x800 (8Kb) (see Section 23.1). + writeInt64 os size // Stack Reserve Size Always 0x400000 (4Mb) (see Section 23.1). + writeInt64 os 0x4000L // Stack Commit Size Always 0x4000 (16Kb) (see Section 23.1). + writeInt64 os 0x100000L // Heap Reserve Size Always 0x100000 (1Mb) (see Section 23.1). + writeInt64 os 0x2000L // Heap Commit Size Always 0x800 (8Kb) (see Section 23.1). else let size = defaultArg modul.StackReserveSize 0x100000 - writeInt32 os size // Stack Reserve Size Always 0x100000 (1Mb) (see Section 23.1). - writeInt32 os 0x1000 // Stack Commit Size Always 0x1000 (4Kb) (see Section 23.1). - writeInt32 os 0x100000 // Heap Reserve Size Always 0x100000 (1Mb) (see Section 23.1). - writeInt32 os 0x1000 // Heap Commit Size Always 0x1000 (4Kb) (see Section 23.1). - // 000000f0 - x86 location, moving on, for x64, add 0x10 - writeInt32 os 0x00 // Loader Flags Always 0 (see Section 23.1) - writeInt32 os 0x10 // Number of Data Directories: Always 0x10 (see Section 23.1). - writeInt32 os 0x00 - writeInt32 os 0x00 // Export Table Always 0 (see Section 23.1). - // 00000100 - writeDirectory os importTableChunk // Import Table RVA of Import Table, (see clause 24.3.1). e.g. 0000b530 - // Native Resource Table: ECMA says Always 0 (see Section 23.1), but mscorlib and other files with resources bound into executable do not. + writeInt32 os size // Stack Reserve Size Always 0x100000 (1Mb) (see Section 23.1). + writeInt32 os 0x1000 // Stack Commit Size Always 0x1000 (4Kb) (see Section 23.1). + writeInt32 os 0x100000 // Heap Reserve Size Always 0x100000 (1Mb) (see Section 23.1). + writeInt32 os 0x1000 // Heap Commit Size Always 0x1000 (4Kb) (see Section 23.1). + // 000000f0 - x86 location, moving on, for x64, add 0x10 + writeInt32 os 0x00 // Loader Flags Always 0 (see Section 23.1) + writeInt32 os 0x10 // Number of Data Directories: Always 0x10 (see Section 23.1). + writeInt32 os 0x00 + writeInt32 os 0x00 // Export Table Always 0 (see Section 23.1). + // 00000100 + writeDirectory os importTableChunk // Import Table RVA of Import Table, (see clause 24.3.1). e.g. 0000b530 + // Native Resource Table: ECMA says Always 0 (see Section 23.1), but mscorlib and other files with resources bound into executable do not. writeDirectory os nativeResourcesChunk - // 00000110 - writeInt32 os 0x00 // Exception Table Always 0 (see Section 23.1). - writeInt32 os 0x00 // Exception Table Always 0 (see Section 23.1). - writeInt32 os 0x00 // Certificate Table Always 0 (see Section 23.1). - writeInt32 os 0x00 // Certificate Table Always 0 (see Section 23.1). - // 00000120 - writeDirectory os baseRelocTableChunk - writeDirectory os debugDirectoryChunk // Debug Directory - // 00000130 - writeInt32 os 0x00 // Copyright Always 0 (see Section 23.1). - writeInt32 os 0x00 // Copyright Always 0 (see Section 23.1). - writeInt32 os 0x00 // Global Ptr Always 0 (see Section 23.1). - writeInt32 os 0x00 // Global Ptr Always 0 (see Section 23.1). - // 00000140 - writeInt32 os 0x00 // Load Config Table Always 0 (see Section 23.1). - writeInt32 os 0x00 // Load Config Table Always 0 (see Section 23.1). - writeInt32 os 0x00 // TLS Table Always 0 (see Section 23.1). - writeInt32 os 0x00 // TLS Table Always 0 (see Section 23.1). - // 00000150 - writeInt32 os 0x00 // Bound Import Always 0 (see Section 23.1). - writeInt32 os 0x00 // Bound Import Always 0 (see Section 23.1). - writeDirectory os importAddrTableChunk // Import Addr Table, (see clause 24.3.1). e.g. 0x00002000 - // 00000160 - writeInt32 os 0x00 // Delay Import Descriptor Always 0 (see Section 23.1). - writeInt32 os 0x00 // Delay Import Descriptor Always 0 (see Section 23.1). + // 00000110 + writeInt32 os 0x00 // Exception Table Always 0 (see Section 23.1). + writeInt32 os 0x00 // Exception Table Always 0 (see Section 23.1). + writeInt32 os 0x00 // Certificate Table Always 0 (see Section 23.1). + writeInt32 os 0x00 // Certificate Table Always 0 (see Section 23.1). + // 00000120 + writeDirectory os baseRelocTableChunk + writeDirectory os debugDirectoryChunk // Debug Directory + // 00000130 + writeInt32 os 0x00 // Copyright Always 0 (see Section 23.1). + writeInt32 os 0x00 // Copyright Always 0 (see Section 23.1). + writeInt32 os 0x00 // Global Ptr Always 0 (see Section 23.1). + writeInt32 os 0x00 // Global Ptr Always 0 (see Section 23.1). + // 00000140 + writeInt32 os 0x00 // Load Config Table Always 0 (see Section 23.1). + writeInt32 os 0x00 // Load Config Table Always 0 (see Section 23.1). + writeInt32 os 0x00 // TLS Table Always 0 (see Section 23.1). + writeInt32 os 0x00 // TLS Table Always 0 (see Section 23.1). + // 00000150 + writeInt32 os 0x00 // Bound Import Always 0 (see Section 23.1). + writeInt32 os 0x00 // Bound Import Always 0 (see Section 23.1). + writeDirectory os importAddrTableChunk // Import Addr Table, (see clause 24.3.1). e.g. 0x00002000 + // 00000160 + writeInt32 os 0x00 // Delay Import Descriptor Always 0 (see Section 23.1). + writeInt32 os 0x00 // Delay Import Descriptor Always 0 (see Section 23.1). writeDirectory os cliHeaderChunk - // 00000170 - writeInt32 os 0x00 // Reserved Always 0 (see Section 23.1). - writeInt32 os 0x00 // Reserved Always 0 (see Section 23.1). - + // 00000170 + writeInt32 os 0x00 // Reserved Always 0 (see Section 23.1). + writeInt32 os 0x00 // Reserved Always 0 (see Section 23.1). + write (Some textSectionHeaderChunk.addr) os "text section header" [| |] - - // 00000178 - writeBytes os [| 0x2euy; 0x74uy; 0x65uy; 0x78uy; 0x74uy; 0x00uy; 0x00uy; 0x00uy; |] // ".text\000\000\000" - // 00000180 - writeInt32 os textSectionSize // VirtualSize: Total size of the section when loaded into memory in bytes rounded to Section Alignment. + + // 00000178 + writeBytes os [| 0x2euy; 0x74uy; 0x65uy; 0x78uy; 0x74uy; 0x00uy; 0x00uy; 0x00uy; |] // ".text\000\000\000" + // 00000180 + writeInt32 os textSectionSize // VirtualSize: Total size of the section when loaded into memory in bytes rounded to Section Alignment. writeInt32 os textSectionAddr // VirtualAddress For executable images this is the address of the first byte of the section writeInt32 os textSectionPhysSize // SizeOfRawData Size of the initialized data on disk in bytes - writeInt32 os textSectionPhysLoc // PointerToRawData RVA to section's first page within the PE file. - // 00000190 - writeInt32 os 0x00 // PointerToRelocations RVA of Relocation section. - writeInt32 os 0x00 // PointerToLineNumbers Always 0 (see Section 23.1). - // 00000198 - writeInt32AsUInt16 os 0x00// NumberOfRelocations Number of relocations, set to 0 if unused. - writeInt32AsUInt16 os 0x00 // NumberOfLinenumbers Always 0 (see Section 23.1). - writeBytes os [| 0x20uy; 0x00uy; 0x00uy; 0x60uy |] // Characteristics Flags IMAGE_SCN_CNT_CODE || IMAGE_SCN_MEM_EXECUTE || IMAGE_SCN_MEM_READ - + writeInt32 os textSectionPhysLoc // PointerToRawData RVA to section's first page within the PE file. + // 00000190 + writeInt32 os 0x00 // PointerToRelocations RVA of Relocation section. + writeInt32 os 0x00 // PointerToLineNumbers Always 0 (see Section 23.1). + // 00000198 + writeInt32AsUInt16 os 0x00// NumberOfRelocations Number of relocations, set to 0 if unused. + writeInt32AsUInt16 os 0x00 // NumberOfLinenumbers Always 0 (see Section 23.1). + writeBytes os [| 0x20uy; 0x00uy; 0x00uy; 0x60uy |] // Characteristics Flags IMAGE_SCN_CNT_CODE || IMAGE_SCN_MEM_EXECUTE || IMAGE_SCN_MEM_READ + write (Some dataSectionHeaderChunk.addr) os "data section header" [| |] - - // 000001a0 - writeBytes os [| 0x2euy; 0x72uy; 0x73uy; 0x72uy; 0x63uy; 0x00uy; 0x00uy; 0x00uy; |] // ".rsrc\000\000\000" - // writeBytes os [| 0x2e; 0x73; 0x64; 0x61; 0x74; 0x61; 0x00; 0x00; |] // ".sdata\000\000" - writeInt32 os dataSectionSize // VirtualSize: Total size of the section when loaded into memory in bytes rounded to Section Alignment. + + // 000001a0 + writeBytes os [| 0x2euy; 0x72uy; 0x73uy; 0x72uy; 0x63uy; 0x00uy; 0x00uy; 0x00uy; |] // ".rsrc\000\000\000" + // writeBytes os [| 0x2e; 0x73; 0x64; 0x61; 0x74; 0x61; 0x00; 0x00; |] // ".sdata\000\000" + writeInt32 os dataSectionSize // VirtualSize: Total size of the section when loaded into memory in bytes rounded to Section Alignment. writeInt32 os dataSectionAddr // VirtualAddress For executable images this is the address of the first byte of the section. - // 000001b0 - writeInt32 os dataSectionPhysSize // SizeOfRawData Size of the initialized data on disk in bytes, - writeInt32 os dataSectionPhysLoc // PointerToRawData QUERY: Why does ECMA say "RVA" here? Offset to section's first page within the PE file. - // 000001b8 - writeInt32 os 0x00 // PointerToRelocations RVA of Relocation section. - writeInt32 os 0x00 // PointerToLineNumbers Always 0 (see Section 23.1). - // 000001c0 - writeInt32AsUInt16 os 0x00 // NumberOfRelocations Number of relocations, set to 0 if unused. - writeInt32AsUInt16 os 0x00 // NumberOfLinenumbers Always 0 (see Section 23.1). - writeBytes os [| 0x40uy; 0x00uy; 0x00uy; 0x40uy |] // Characteristics Flags: IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA - + // 000001b0 + writeInt32 os dataSectionPhysSize // SizeOfRawData Size of the initialized data on disk in bytes, + writeInt32 os dataSectionPhysLoc // PointerToRawData QUERY: Why does ECMA say "RVA" here? Offset to section's first page within the PE file. + // 000001b8 + writeInt32 os 0x00 // PointerToRelocations RVA of Relocation section. + writeInt32 os 0x00 // PointerToLineNumbers Always 0 (see Section 23.1). + // 000001c0 + writeInt32AsUInt16 os 0x00 // NumberOfRelocations Number of relocations, set to 0 if unused. + writeInt32AsUInt16 os 0x00 // NumberOfLinenumbers Always 0 (see Section 23.1). + writeBytes os [| 0x40uy; 0x00uy; 0x00uy; 0x40uy |] // Characteristics Flags: IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA + write (Some relocSectionHeaderChunk.addr) os "reloc section header" [| |] - // 000001a0 - writeBytes os [| 0x2euy; 0x72uy; 0x65uy; 0x6cuy; 0x6fuy; 0x63uy; 0x00uy; 0x00uy; |] // ".reloc\000\000" - writeInt32 os relocSectionSize // VirtualSize: Total size of the section when loaded into memory in bytes rounded to Section Alignment. + // 000001a0 + writeBytes os [| 0x2euy; 0x72uy; 0x65uy; 0x6cuy; 0x6fuy; 0x63uy; 0x00uy; 0x00uy; |] // ".reloc\000\000" + writeInt32 os relocSectionSize // VirtualSize: Total size of the section when loaded into memory in bytes rounded to Section Alignment. writeInt32 os relocSectionAddr // VirtualAddress For executable images this is the address of the first byte of the section. - // 000001b0 + // 000001b0 writeInt32 os relocSectionPhysSize // SizeOfRawData Size of the initialized reloc on disk in bytes writeInt32 os relocSectionPhysLoc // PointerToRawData QUERY: Why does ECMA say "RVA" here? Offset to section's first page within the PE file. - // 000001b8 - writeInt32 os 0x00 // PointerToRelocations RVA of Relocation section. - writeInt32 os 0x00 // PointerToLineNumbers Always 0 (see Section 23.1). - // 000001c0 - writeInt32AsUInt16 os 0x00 // NumberOfRelocations Number of relocations, set to 0 if unused. - writeInt32AsUInt16 os 0x00 // NumberOfLinenumbers Always 0 (see Section 23.1). - writeBytes os [| 0x40uy; 0x00uy; 0x00uy; 0x42uy |] // Characteristics Flags: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | - + // 000001b8 + writeInt32 os 0x00 // PointerToRelocations RVA of Relocation section. + writeInt32 os 0x00 // PointerToLineNumbers Always 0 (see Section 23.1). + // 000001c0 + writeInt32AsUInt16 os 0x00 // NumberOfRelocations Number of relocations, set to 0 if unused. + writeInt32AsUInt16 os 0x00 // NumberOfLinenumbers Always 0 (see Section 23.1). + writeBytes os [| 0x40uy; 0x00uy; 0x00uy; 0x42uy |] // Characteristics Flags: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | + writePadding os "pad to text begin" (textSectionPhysLoc - headerSize) - - // TEXT SECTION: e.g. 0x200 - + + // TEXT SECTION: e.g. 0x200 + let textV2P v = v - textSectionAddr + textSectionPhysLoc - - // e.g. 0x0200 + + // e.g. 0x0200 write (Some (textV2P importAddrTableChunk.addr)) os "import addr table" [| |] - writeInt32 os importNameHintTableChunk.addr - writeInt32 os 0x00 // QUERY 4 bytes of zeros not 2 like ECMA 24.3.1 says - - // e.g. 0x0208 - - let flags = - (if modul.IsILOnly then 0x01 else 0x00) ||| - (if modul.Is32Bit then 0x02 else 0x00) ||| - (if modul.Is32BitPreferred then 0x00020003 else 0x00) ||| + writeInt32 os importNameHintTableChunk.addr + writeInt32 os 0x00 // QUERY 4 bytes of zeros not 2 like ECMA 24.3.1 says + + // e.g. 0x0208 + + let flags = + (if modul.IsILOnly then 0x01 else 0x00) ||| + (if modul.Is32Bit then 0x02 else 0x00) ||| + (if modul.Is32BitPreferred then 0x00020003 else 0x00) ||| (if (match signer with None -> false | Some s -> s.IsFullySigned) then 0x08 else 0x00) let headerVersionMajor, headerVersionMinor = headerVersionSupportedByCLRVersion desiredMetadataVersion - writePadding os "pad to cli header" cliHeaderPadding + writePadding os "pad to cli header" cliHeaderPadding write (Some (textV2P cliHeaderChunk.addr)) os "cli header" [| |] - writeInt32 os 0x48 // size of header - writeInt32AsUInt16 os headerVersionMajor // Major part of minimum version of CLR reqd. - writeInt32AsUInt16 os headerVersionMinor // Minor part of minimum version of CLR reqd. ... - // e.g. 0x0210 + writeInt32 os 0x48 // size of header + writeInt32AsUInt16 os headerVersionMajor // Major part of minimum version of CLR reqd. + writeInt32AsUInt16 os headerVersionMinor // Minor part of minimum version of CLR reqd. ... + // e.g. 0x0210 writeDirectory os metadataChunk writeInt32 os flags - - writeInt32 os entryPointToken + + writeInt32 os entryPointToken write None os "rest of cli header" [| |] - - // e.g. 0x0220 + + // e.g. 0x0220 writeDirectory os resourcesChunk writeDirectory os strongnameChunk - // e.g. 0x0230 - writeInt32 os 0x00 // code manager table, always 0 - writeInt32 os 0x00 // code manager table, always 0 - writeDirectory os vtfixupsChunk - // e.g. 0x0240 - writeInt32 os 0x00 // export addr table jumps, always 0 - writeInt32 os 0x00 // export addr table jumps, always 0 - writeInt32 os 0x00 // managed native header, always 0 - writeInt32 os 0x00 // managed native header, always 0 - + // e.g. 0x0230 + writeInt32 os 0x00 // code manager table, always 0 + writeInt32 os 0x00 // code manager table, always 0 + writeDirectory os vtfixupsChunk + // e.g. 0x0240 + writeInt32 os 0x00 // export addr table jumps, always 0 + writeInt32 os 0x00 // export addr table jumps, always 0 + writeInt32 os 0x00 // managed native header, always 0 + writeInt32 os 0x00 // managed native header, always 0 + writeBytes os code write None os "code padding" codePadding - + writeBytes os metadata - - // write 0x80 bytes of empty space for encrypted SHA1 hash, written by SN.EXE or call to signing API - if signer <> None then + + // write 0x80 bytes of empty space for encrypted SHA1 hash, written by SN.EXE or call to signing API + if signer <> None then write (Some (textV2P strongnameChunk.addr)) os "strongname" (Array.create strongnameChunk.size 0x0uy) write (Some (textV2P resourcesChunk.addr)) os "raw resources" [| |] @@ -4111,9 +4036,9 @@ and writeBinaryAndReportMappingsAux (stream: Stream, leaveStreamOpen: bool, writePadding os "start of import table" importTableChunkPrePadding - // vtfixups would go here + // vtfixups would go here write (Some (textV2P importTableChunk.addr)) os "import table" [| |] - + writeInt32 os importLookupTableChunk.addr writeInt32 os 0x00 writeInt32 os 0x00 @@ -4123,38 +4048,38 @@ and writeBinaryAndReportMappingsAux (stream: Stream, leaveStreamOpen: bool, writeInt32 os 0x00 writeInt32 os 0x00 writeInt32 os 0x00 - writeInt32 os 0x00 - + writeInt32 os 0x00 + write (Some (textV2P importLookupTableChunk.addr)) os "import lookup table" [| |] - writeInt32 os importNameHintTableChunk.addr - writeInt32 os 0x00 - writeInt32 os 0x00 - writeInt32 os 0x00 - writeInt32 os 0x00 - + writeInt32 os importNameHintTableChunk.addr + writeInt32 os 0x00 + writeInt32 os 0x00 + writeInt32 os 0x00 + writeInt32 os 0x00 + write (Some (textV2P importNameHintTableChunk.addr)) os "import name hint table" [| |] - // Two zero bytes of hint, then Case sensitive, null-terminated ASCII string containing name to import. + // Two zero bytes of hint, then Case sensitive, null-terminated ASCII string containing name to import. // Shall _CorExeMain a .exe file _CorDllMain for a .dll file. - if isDll then + if isDll then writeBytes os [| 0x00uy; 0x00uy; 0x5fuy; 0x43uy ; 0x6fuy; 0x72uy; 0x44uy; 0x6cuy; 0x6cuy; 0x4duy; 0x61uy; 0x69uy; 0x6euy; 0x00uy |] - else + else writeBytes os [| 0x00uy; 0x00uy; 0x5fuy; 0x43uy; 0x6fuy; 0x72uy; 0x45uy; 0x78uy; 0x65uy; 0x4duy; 0x61uy; 0x69uy; 0x6euy; 0x00uy |] - + write (Some (textV2P mscoreeStringChunk.addr)) os "mscoree string" [| 0x6duy; 0x73uy; 0x63uy; 0x6fuy ; 0x72uy; 0x65uy ; 0x65uy; 0x2euy ; 0x64uy; 0x6cuy ; 0x6cuy; 0x00uy ; |] - + writePadding os "end of import tab" importTableChunkPadding - + writePadding os "head of entrypoint" 0x03 let ep = (imageBaseReal + textSectionAddr) write (Some (textV2P entrypointCodeChunk.addr)) os " entrypoint code" [| 0xFFuy; 0x25uy; (* x86 Instructions for entry *) b0 ep; b1 ep; b2 ep; b3 ep |] - if isItanium then + if isItanium then write (Some (textV2P globalpointerCodeChunk.addr)) os " itanium global pointer" [| 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy |] - if pdbfile.IsSome then + if pdbfile.IsSome then write (Some (textV2P debugDirectoryChunk.addr)) os "debug directory" (Array.create debugDirectoryChunk.size 0x0uy) write (Some (textV2P debugDataChunk.addr)) os "debug data" (Array.create debugDataChunk.size 0x0uy) write (Some (textV2P debugChecksumPdbChunk.addr)) os "debug checksum" (Array.create debugChecksumPdbChunk.size 0x0uy) @@ -4166,7 +4091,7 @@ and writeBinaryAndReportMappingsAux (stream: Stream, leaveStreamOpen: bool, write (Some (textV2P debugDeterministicPdbChunk.addr)) os "debug deterministic" Array.empty writePadding os "end of .text" (dataSectionPhysLoc - textSectionPhysLoc - textSectionSize) - + // DATA SECTION match nativeResources with | [||] -> () @@ -4177,25 +4102,25 @@ and writeBinaryAndReportMappingsAux (stream: Stream, leaveStreamOpen: bool, if dummydatap.size <> 0x0 then write (Some (dataSectionVirtToPhys dummydatap.addr)) os "dummy data" [| 0x0uy |] - writePadding os "end of .rsrc" (relocSectionPhysLoc - dataSectionPhysLoc - dataSectionSize) + writePadding os "end of .rsrc" (relocSectionPhysLoc - dataSectionPhysLoc - dataSectionSize) + + // RELOC SECTION - // RELOC SECTION - - // See ECMA 24.3.2 + // See ECMA 24.3.2 let relocV2P v = v - relocSectionAddr + relocSectionPhysLoc - + let entrypointFixupAddr = entrypointCodeChunk.addr + 0x02 let entrypointFixupBlock = (entrypointFixupAddr / 4096) * 4096 let entrypointFixupOffset = entrypointFixupAddr - entrypointFixupBlock let reloc = (if modul.Is64Bit then 0xA000 (* IMAGE_REL_BASED_DIR64 *) else 0x3000 (* IMAGE_REL_BASED_HIGHLOW *)) ||| entrypointFixupOffset // For the itanium, you need to set a relocation entry for the global pointer - let reloc2 = - if not isItanium then + let reloc2 = + if not isItanium then 0x0 else 0xA000 ||| (globalpointerCodeChunk.addr - ((globalpointerCodeChunk.addr / 4096) * 4096)) - - write (Some (relocV2P baseRelocTableChunk.addr)) os "base reloc table" + + write (Some (relocV2P baseRelocTableChunk.addr)) os "base reloc table" [| b0 entrypointFixupBlock; b1 entrypointFixupBlock; b2 entrypointFixupBlock; b3 entrypointFixupBlock 0x0cuy; 0x00uy; 0x00uy; 0x00uy b0 reloc; b1 reloc @@ -4203,33 +4128,36 @@ and writeBinaryAndReportMappingsAux (stream: Stream, leaveStreamOpen: bool, writePadding os "end of .reloc" (imageEndSectionPhysLoc - relocSectionPhysLoc - relocSectionSize) os.Dispose() - + + try + FileSystemUtilities.setExecutablePermission outfile + with _ -> + () pdbData, pdbOpt, debugDirectoryChunk, debugDataChunk, debugChecksumPdbChunk, debugEmbeddedPdbChunk, debugDeterministicPdbChunk, textV2P, mappings // Looks like a finally - with e -> - (try + with e -> + (try os.Dispose() - with _ -> ()) + FileSystem.FileDelete outfile + with _ -> ()) reraise() reportTime showTimes "Writing Image" - pdbData, pdbOpt, debugDirectoryChunk, debugDataChunk, debugChecksumPdbChunk, debugEmbeddedPdbChunk, debugDeterministicPdbChunk, textV2P, mappings -and writePdb (dumpDebugInfo, showTimes, portablePDB, embeddedPDB, pdbfile, outfile, signer, deterministic, pathMap) (pdbData, pdbOpt, debugDirectoryChunk, debugDataChunk, debugChecksumPdbChunk, debugEmbeddedPdbChunk, debugDeterministicPdbChunk, textV2P, mappings) = if dumpDebugInfo then logDebugInfo outfile pdbData - // Now we've done the bulk of the binary, do the PDB file and fixup the binary. + // Now we've done the bulk of the binary, do the PDB file and fixup the binary. begin match pdbfile with | None -> () #if ENABLE_MONO_SUPPORT | Some fmdb when runningOnMono && not portablePDB -> writeMdbInfo fmdb outfile pdbData #endif - | Some fpdb -> - try - let idd = - match pdbOpt with + | Some fpdb -> + try + let idd = + match pdbOpt with | Some (originalLength, contentId, stream, algorithmName, checkSum) -> if embeddedPDB then embedPortablePdbInfo originalLength contentId stream showTimes fpdb debugDataChunk debugEmbeddedPdbChunk debugDeterministicPdbChunk debugChecksumPdbChunk algorithmName checkSum embeddedPDB deterministic @@ -4243,11 +4171,11 @@ and writePdb (dumpDebugInfo, showTimes, portablePDB, embeddedPDB, pdbfile, outfi #endif reportTime showTimes "Generate PDB Info" - // Now we have the debug data we can go back and fill in the debug directory in the image - use fs2 = FileSystem.OpenFileForWriteShim(outfile, FileMode.Open, FileAccess.Write, FileShare.Read) + // Now we have the debug data we can go back and fill in the debug directory in the image + let fs2 = FileSystem.FileStreamWriteExistingShim outfile let os2 = new BinaryWriter(fs2) - try - // write the IMAGE_DEBUG_DIRECTORY + try + // write the IMAGE_DEBUG_DIRECTORY os2.BaseStream.Seek (int64 (textV2P debugDirectoryChunk.addr), SeekOrigin.Begin) |> ignore for i in idd do writeInt32 os2 i.iddCharacteristics // IMAGE_DEBUG_DIRECTORY.Characteristics @@ -4262,32 +4190,32 @@ and writePdb (dumpDebugInfo, showTimes, portablePDB, embeddedPDB, pdbfile, outfi // Write the Debug Data for i in idd do if i.iddChunk.size <> 0 then - // write the debug raw data as given us by the PDB writer + // write the debug raw data as given us by the PDB writer os2.BaseStream.Seek (int64 (textV2P i.iddChunk.addr), SeekOrigin.Begin) |> ignore if i.iddChunk.size < i.iddData.Length then failwith "Debug data area is not big enough. Debug info may not be usable" writeBytes os2 i.iddData os2.Dispose() - with e -> + with e -> failwith ("Error while writing debug directory entry: "+e.Message) - (try os2.Dispose(); FileSystem.FileDeleteShim outfile with _ -> ()) + (try os2.Dispose(); FileSystem.FileDelete outfile with _ -> ()) reraise() - with e -> + with e -> reraise() end reportTime showTimes "Finalize PDB" - /// Sign the binary. No further changes to binary allowed past this point! - match signer with + /// Sign the binary. No further changes to binary allowed past this point! + match signer with | None -> () - | Some s -> - try + | Some s -> + try s.SignFile outfile - s.Close() - with e -> + s.Close() + with e -> failwith ("Warning: A call to SignFile failed ("+e.Message+")") (try s.Close() with _ -> ()) - (try FileSystem.FileDeleteShim outfile with _ -> ()) + (try FileSystem.FileDelete outfile with _ -> ()) () reportTime showTimes "Signing Image" @@ -4311,13 +4239,7 @@ type options = pathMap: PathMap } let WriteILBinary (filename, (options: options), inputModule, normalizeAssemblyRefs) = - writeBinaryAndReportMappings (filename, - options.ilg, options.pdbfile, options.signer, options.portablePDB, options.embeddedPDB, options.embedAllSource, + writeBinaryAndReportMappings (filename, + options.ilg, options.pdbfile, options.signer, options.portablePDB, options.embeddedPDB, options.embedAllSource, options.embedSourceList, options.sourceLink, options.checksumAlgorithm, options.emitTailcalls, options.deterministic, options.showTimes, options.dumpDebugInfo, options.pathMap) inputModule normalizeAssemblyRefs |> ignore - -let WriteILBinaryStreamWithNoPDB (stream, (options: options), inputModule, normalizeAssemblyRefs) = - writeBinaryWithNoPdb (stream, - options.ilg, options.signer, options.portablePDB, options.embeddedPDB, options.embedAllSource, - options.embedSourceList, options.sourceLink, options.checksumAlgorithm, options.emitTailcalls, options.deterministic, options.showTimes, options.pathMap) inputModule normalizeAssemblyRefs - |> ignore diff --git a/src/fsharp/absil/ilwrite.fsi b/src/fsharp/absil/ilwrite.fsi index 152c9abc45f..edc3322cf58 100644 --- a/src/fsharp/absil/ilwrite.fsi +++ b/src/fsharp/absil/ilwrite.fsi @@ -4,10 +4,11 @@ module internal FSharp.Compiler.AbstractIL.ILBinaryWriter open Internal.Utilities -open System.IO +open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILPdbWriter -open FSharp.Compiler.AbstractIL.StrongNameSign +open FSharp.Compiler.AbstractIL.Internal.StrongNameSign type options = { ilg: ILGlobals @@ -27,6 +28,3 @@ type options = /// Write a binary to the file system. Extra configuration parameters can also be specified. val WriteILBinary: filename: string * options: options * inputModule: ILModuleDef * (ILAssemblyRef -> ILAssemblyRef) -> unit - -/// Write a binary to the given stream. Extra configuration parameters can also be specified. -val WriteILBinaryStreamWithNoPDB: stream: Stream * options: options * inputModule: ILModuleDef * (ILAssemblyRef -> ILAssemblyRef) -> unit \ No newline at end of file diff --git a/src/fsharp/absil/ilwritepdb.fs b/src/fsharp/absil/ilwritepdb.fs index a2bc08dd470..f03f0648df9 100644 --- a/src/fsharp/absil/ilwritepdb.fs +++ b/src/fsharp/absil/ilwritepdb.fs @@ -3,7 +3,7 @@ module internal FSharp.Compiler.AbstractIL.ILPdbWriter open System -open System.Collections.Generic +open System.Collections.Generic open System.Collections.Immutable open System.IO open System.IO.Compression @@ -13,11 +13,12 @@ open System.Reflection.Metadata.Ecma335 open System.Text open Internal.Utilities open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Support -open Internal.Utilities.Library +open FSharp.Compiler.AbstractIL.Internal.Support +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Internal.Utils open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.IO -open FSharp.Compiler.Text.Range +open FSharp.Compiler.Range + type BlobBuildingStream () = inherit Stream() @@ -25,48 +26,48 @@ type BlobBuildingStream () = static let chunkSize = 32 * 1024 let builder = new BlobBuilder(chunkSize) - override _.CanWrite = true - override _.CanRead = false - override _.CanSeek = false - override _.Length = int64 (builder.Count) - - override _.Write(buffer: byte array, offset: int, count: int) = builder.WriteBytes(buffer, offset, count) - override _.WriteByte(value: byte) = builder.WriteByte value - member _.WriteInt32(value: int) = builder.WriteInt32 value - member _.ToImmutableArray() = builder.ToImmutableArray() - member _.TryWriteBytes(stream: Stream, length: int) = builder.TryWriteBytes(stream, length) - - override _.Flush() = () - override _.Dispose(_disposing: bool) = () - override _.Seek(_offset: int64, _origin: SeekOrigin) = raise (new NotSupportedException()) - override _.Read(_buffer: byte array, _offset: int, _count: int) = raise (new NotSupportedException()) - override _.SetLength(_value: int64) = raise (new NotSupportedException()) + override this.CanWrite = true + override this.CanRead = false + override this.CanSeek = false + override this.Length = int64 (builder.Count) + + override this.Write(buffer: byte array, offset: int, count: int) = builder.WriteBytes(buffer, offset, count) + override this.WriteByte(value: byte) = builder.WriteByte value + member this.WriteInt32(value: int) = builder.WriteInt32 value + member this.ToImmutableArray() = builder.ToImmutableArray() + member this.TryWriteBytes(stream: Stream, length: int) = builder.TryWriteBytes(stream, length) + + override this.Flush() = () + override this.Dispose(_disposing: bool) = () + override this.Seek(_offset: int64, _origin: SeekOrigin) = raise (new NotSupportedException()) + override this.Read(_buffer: byte array, _offset: int, _count: int) = raise (new NotSupportedException()) + override this.SetLength(_value: int64) = raise (new NotSupportedException()) override val Position = 0L with get, set -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // PDB types -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- type PdbDocumentData = ILSourceDocument -type PdbLocalVar = +type PdbLocalVar = { Name: string - Signature: byte[] + Signature: byte[] /// the local index the name corresponds to Index: int32 } -type PdbMethodScope = +type PdbMethodScope = { Children: PdbMethodScope array StartOffset: int EndOffset: int Locals: PdbLocalVar array (* REVIEW open_namespaces: pdb_namespace array *) } -type PdbSourceLoc = +type PdbSourceLoc = { Document: int Line: int Column: int } - -type PdbSequencePoint = + +type PdbSequencePoint = { Document: int Offset: int Line: int @@ -75,7 +76,7 @@ type PdbSequencePoint = EndColumn: int } override x.ToString() = sprintf "(%d,%d)-(%d,%d)" x.Line x.Column x.EndLine x.EndColumn -type PdbMethodData = +type PdbMethodData = { MethToken: int32 MethName: string LocalSignatureToken: int32 @@ -84,35 +85,35 @@ type PdbMethodData = Range: (PdbSourceLoc * PdbSourceLoc) option SequencePoints: PdbSequencePoint array } -module SequencePoint = - let orderBySource sp1 sp2 = +module SequencePoint = + let orderBySource sp1 sp2 = let c1 = compare sp1.Document sp2.Document - if c1 <> 0 then - c1 - else + if c1 <> 0 then + c1 + else let c1 = compare sp1.Line sp2.Line - if c1 <> 0 then - c1 - else - compare sp1.Column sp2.Column + if c1 <> 0 then + c1 + else + compare sp1.Column sp2.Column + + let orderByOffset sp1 sp2 = + compare sp1.Offset sp2.Offset - let orderByOffset sp1 sp2 = - compare sp1.Offset sp2.Offset - -/// 28 is the size of the IMAGE_DEBUG_DIRECTORY in ntimage.h -let sizeof_IMAGE_DEBUG_DIRECTORY = 28 +/// 28 is the size of the IMAGE_DEBUG_DIRECTORY in ntimage.h +let sizeof_IMAGE_DEBUG_DIRECTORY = 28 [] -type PdbData = +type PdbData = { EntryPoint: int32 option Timestamp: int32 ModuleID: byte[] Documents: PdbDocumentData[] - Methods: PdbMethodData[] + Methods: PdbMethodData[] TableRowCounts: int[] } -type BinaryChunk = - { size: int32 +type BinaryChunk = + { size: int32 addr: int32 } type idd = @@ -135,7 +136,7 @@ let guidSha2 = Guid("8829d00f-11b8-4213-878b-770e8597ac16") let checkSum (url: string) (checksumAlgorithm: HashAlgorithm) = try - use file = FileSystem.OpenFileForReadShim(url) + use file = FileSystem.FileStreamReadShim url let guid, alg = match checksumAlgorithm with | HashAlgorithm.Sha1 -> guidSha1, System.Security.Cryptography.SHA1.Create() :> System.Security.Cryptography.HashAlgorithm @@ -149,7 +150,7 @@ let checkSum (url: string) (checksumAlgorithm: HashAlgorithm) = // Portable PDB Writer //--------------------------------------------------------------------- let cvMagicNumber = 0x53445352L -let pdbGetCvDebugInfo (mvid: byte[]) (timestamp: int32) (filepath: string) (cvChunk: BinaryChunk) = +let pdbGetCvDebugInfo (mvid: byte[]) (timestamp: int32) (filepath: string) (cvChunk: BinaryChunk) = let iddCvBuffer = // Debug directory entry let path = (System.Text.Encoding.UTF8.GetBytes filepath) @@ -237,7 +238,7 @@ let pdbGetDebugInfo (contentId: byte[]) (timestamp: int32) (filepath: string) |] //------------------------------------------------------------------------------ -// PDB Writer. The function [WritePdbInfo] abstracts the +// PDB Writer. The function [WritePdbInfo] abstracts the // imperative calls to the Symbol Writer API. //------------------------------------------------------------------------------ @@ -246,11 +247,11 @@ let getDebugFileName outfile (portablePDB: bool) = #if ENABLE_MONO_SUPPORT if runningOnMono && not portablePDB then outfile + ".mdb" - else + else #else ignore portablePDB #endif - (FileSystemUtils.chopExtension outfile) + ".pdb" + (Filename.chopExtension outfile) + ".pdb" let sortMethods showTimes info = reportTime showTimes (sprintf "PDB: Defined %d documents" info.Documents.Length) @@ -266,7 +267,7 @@ let getRowCounts tableRowCounts = let generatePortablePdb (embedAllSource: bool) (embedSourceList: string list) (sourceLink: string) checksumAlgorithm showTimes (info: PdbData) (pathMap: PathMap) = sortMethods showTimes info let externalRowCounts = getRowCounts info.TableRowCounts - let docs = + let docs = match info.Documents with | null -> Array.empty | _ -> info.Documents @@ -299,7 +300,7 @@ let generatePortablePdb (embedAllSource: bool) (embedSourceList: string list) (s /// in PDB file size. /// /// Chosen as the point at which we start to see > 10% blob size reduction using all - /// current source files in corefx and roslyn as sample data. + /// current source files in corefx and roslyn as sample data. /// let sourceCompressionThreshold = 200 @@ -307,11 +308,10 @@ let generatePortablePdb (embedAllSource: bool) (embedSourceList: string list) (s let includeSource file = let isInList = embedSourceList |> List.exists (fun f -> String.Compare(file, f, StringComparison.OrdinalIgnoreCase ) = 0) - if not embedAllSource && not isInList || not (FileSystem.FileExistsShim file) then + if not embedAllSource && not isInList || not (File.Exists file) then None else - use stream = FileSystem.OpenFileForReadShim(file) - + let stream = File.OpenRead file let length64 = stream.Length if length64 > int64 (Int32.MaxValue) then raise (new IOException("File is too long")) @@ -333,7 +333,7 @@ let generatePortablePdb (embedAllSource: bool) (embedSourceList: string list) (s let handle = match checkSum doc.File checksumAlgorithm with | Some (hashAlg, checkSum) -> - let dbgInfo = + let dbgInfo = (serializeDocumentName doc.File, metadata.GetOrAddGuid hashAlg, metadata.GetOrAddBlob(checkSum.ToImmutableArray()), @@ -346,7 +346,7 @@ let generatePortablePdb (embedAllSource: bool) (embedSourceList: string list) (s metadata.GetOrAddBlob blob) |> ignore dbgInfo | None -> - let dbgInfo = + let dbgInfo = (serializeDocumentName doc.File, metadata.GetOrAddGuid(System.Guid.Empty), metadata.GetOrAddBlob(ImmutableArray.Empty), @@ -354,9 +354,9 @@ let generatePortablePdb (embedAllSource: bool) (embedSourceList: string list) (s dbgInfo index.Add(doc.File, handle) - if not (String.IsNullOrWhiteSpace sourceLink) then - use fs = FileSystem.OpenFileForReadShim(sourceLink) - use ms = new MemoryStream() + if not (String.IsNullOrEmpty sourceLink) then + let fs = File.OpenRead sourceLink + let ms = new MemoryStream() fs.CopyTo ms metadata.AddCustomDebugInformation( ModuleDefinitionHandle.op_Implicit(EntityHandle.ModuleDefinition), @@ -387,7 +387,7 @@ let generatePortablePdb (embedAllSource: bool) (embedSourceList: string list) (s let getDocumentHandle d = if docs.Length = 0 || d < 0 || d > docs.Length then Unchecked.defaultof - else + else match documentIndex.TryGetValue(docs.[d].File) with | false, _ -> Unchecked.defaultof | true, h -> h @@ -449,9 +449,9 @@ let generatePortablePdb (embedAllSource: bool) (embedSourceList: string list) (s builder.WriteCompressedInteger offsetDelta // Check for hidden-sequence-point-record - if startLine = 0xfeefee || - endLine = 0xfeefee || - (startColumn = 0 && endColumn = 0) || + if startLine = 0xfeefee || + endLine = 0xfeefee || + (startColumn = 0 && endColumn = 0) || ((endLine - startLine) = 0 && (endColumn - startColumn) = 0) then // Hidden-sequence-point-record @@ -556,9 +556,9 @@ let compressPortablePdbStream (uncompressedLength: int64) (contentId: BlobConten (uncompressedLength, contentId, compressedStream) let writePortablePdbInfo (contentId: BlobContentId) (stream: MemoryStream) showTimes fpdb pathMap cvChunk deterministicPdbChunk checksumPdbChunk algorithmName checksum embeddedPdb deterministic = - try FileSystem.FileDeleteShim fpdb with _ -> () - use fs = FileSystem.OpenFileForWriteShim(fpdb, fileMode = FileMode.Create, fileAccess = FileAccess.ReadWrite) - stream.WriteTo fs + try FileSystem.FileDelete fpdb with _ -> () + use pdbFile = new FileStream(fpdb, FileMode.Create, FileAccess.ReadWrite) + stream.WriteTo pdbFile reportTime showTimes "PDB: Closed" pdbGetDebugInfo (contentId.Guid.ToByteArray()) (int32 (contentId.Stamp)) (PathMap.apply pathMap fpdb) cvChunk None deterministicPdbChunk checksumPdbChunk algorithmName checksum 0L None embeddedPdb deterministic @@ -569,12 +569,12 @@ let embedPortablePdbInfo (uncompressedLength: int64) (contentId: BlobContentId) #if !FX_NO_PDB_WRITER //--------------------------------------------------------------------- -// PDB Writer. The function [WritePdbInfo] abstracts the +// PDB Writer. The function [WritePdbInfo] abstracts the // imperative calls to the Symbol Writer API. //--------------------------------------------------------------------- let writePdbInfo showTimes f fpdb info cvChunk = - try FileSystem.FileDeleteShim fpdb with _ -> () + try FileSystem.FileDelete fpdb with _ -> () let pdbw = ref Unchecked.defaultof @@ -582,12 +582,12 @@ let writePdbInfo showTimes f fpdb info cvChunk = pdbw := pdbInitialize f fpdb with _ -> error(Error(FSComp.SR.ilwriteErrorCreatingPdb fpdb, rangeCmdArgs)) - match info.EntryPoint with - | None -> () - | Some x -> pdbSetUserEntryPoint !pdbw x + match info.EntryPoint with + | None -> () + | Some x -> pdbSetUserEntryPoint !pdbw x let docs = info.Documents |> Array.map (fun doc -> pdbDefineDocument !pdbw doc.File) - let getDocument i = + let getDocument i = if i < 0 || i > docs.Length then failwith "getDocument: bad doc number" docs.[i] reportTime showTimes (sprintf "PDB: Defined %d documents" info.Documents.Length) @@ -602,16 +602,16 @@ let writePdbInfo showTimes f fpdb info cvChunk = let sps = Array.sub allSps !spOffset spCounts.[i] spOffset := !spOffset + spCounts.[i] - begin match minfo.Range with - | None -> () + begin match minfo.Range with + | None -> () | Some (a,b) -> pdbOpenMethod !pdbw minfo.MethToken - pdbSetMethodRange !pdbw + pdbSetMethodRange !pdbw (getDocument a.Document) a.Line a.Column (getDocument b.Document) b.Line b.Column - // Partition the sequence points by document + // Partition the sequence points by document let spsets = let res = Dictionary() for (_,sp) in sps do @@ -621,27 +621,27 @@ let writePdbInfo showTimes f fpdb info cvChunk = xsR := sp :: !xsR else res.[k] <- ref [sp] - + res - spsets + spsets |> Seq.iter (fun kv -> let spset = !kv.Value if not spset.IsEmpty then let spset = Array.ofList spset Array.sortInPlaceWith SequencePoint.orderByOffset spset - let sps = - spset |> Array.map (fun sp -> - // Ildiag.dprintf "token 0x%08lx has an sp at offset 0x%08x\n" minfo.MethToken sp.Offset + let sps = + spset |> Array.map (fun sp -> + // Ildiag.dprintf "token 0x%08lx has an sp at offset 0x%08x\n" minfo.MethToken sp.Offset (sp.Offset, sp.Line, sp.Column,sp.EndLine, sp.EndColumn)) - // Use of alloca in implementation of pdbDefineSequencePoints can give stack overflow here - if sps.Length < 5000 then + // Use of alloca in implementation of pdbDefineSequencePoints can give stack overflow here + if sps.Length < 5000 then pdbDefineSequencePoints !pdbw (getDocument spset.[0].Document) sps) - // Write the scopes - let rec writePdbScope parent sco = + // Write the scopes + let rec writePdbScope parent sco = if parent = None || sco.Locals.Length <> 0 || sco.Children.Length <> 0 then - // Only nest scopes if the child scope is a different size from + // Only nest scopes if the child scope is a different size from let nested = match parent with | Some p -> sco.StartOffset <> p.StartOffset || sco.EndOffset <> p.EndOffset @@ -653,7 +653,7 @@ let writePdbInfo showTimes f fpdb info cvChunk = match minfo.RootScope with | None -> () - | Some rootscope -> writePdbScope None rootscope + | Some rootscope -> writePdbScope None rootscope pdbCloseMethod !pdbw end) reportTime showTimes "PDB: Wrote methods" @@ -679,51 +679,51 @@ let writePdbInfo showTimes f fpdb info cvChunk = //--------------------------------------------------------------------- open Microsoft.FSharp.Reflection -// Dynamic invoke operator. Implements simple overload resolution based +// Dynamic invoke operator. Implements simple overload resolution based // on the name and number of parameters only. // Supports the following cases: // obj?Foo() // call with no arguments // obj?Foo(1, "a") // call with two arguments (extracted from tuple) -// NOTE: This doesn't actually handle all overloads. It just picks first entry with right +// NOTE: This doesn't actually handle all overloads. It just picks first entry with right // number of arguments. -let (?) this memb (args:'Args) : 'R = +let (?) this memb (args:'Args) : 'R = // Get array of 'obj' arguments for the reflection call - let args = + let args = if typeof<'Args> = typeof then [| |] elif FSharpType.IsTuple typeof<'Args> then Microsoft.FSharp.Reflection.FSharpValue.GetTupleFields args else [| box args |] - + // Get methods and perform overload resolution let methods = this.GetType().GetMethods() let bestMatch = methods |> Array.tryFind (fun mi -> mi.Name = memb && mi.GetParameters().Length = args.Length) match bestMatch with - | Some mi -> unbox(mi.Invoke(this, args)) + | Some mi -> unbox(mi.Invoke(this, args)) | None -> error(Error(FSComp.SR.ilwriteMDBMemberMissing memb, rangeCmdArgs)) // Creating instances of needed classes from 'Mono.CompilerServices.SymbolWriter' assembly let monoCompilerSvc = new AssemblyName("Mono.CompilerServices.SymbolWriter, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756") -let ctor (asmName: AssemblyName) clsName (args: obj[]) = +let ctor (asmName: AssemblyName) clsName (args: obj[]) = let asm = Assembly.Load asmName let ty = asm.GetType clsName System.Activator.CreateInstance(ty, args) -let createSourceMethodImpl (name: string) (token: int) (namespaceID: int) = +let createSourceMethodImpl (name: string) (token: int) (namespaceID: int) = ctor monoCompilerSvc "Mono.CompilerServices.SymbolWriter.SourceMethodImpl" [| box name; box token; box namespaceID |] -let createWriter (f: string) = +let createWriter (f: string) = ctor monoCompilerSvc "Mono.CompilerServices.SymbolWriter.MonoSymbolWriter" [| box f |] //--------------------------------------------------------------------- // MDB Writer. Generate debug symbols using the MDB format //--------------------------------------------------------------------- -let writeMdbInfo fmdb f info = +let writeMdbInfo fmdb f info = // Note, if we can't delete it code will fail later - try FileSystem.FileDeleteShim fmdb with _ -> () + try FileSystem.FileDelete fmdb with _ -> () // Try loading the MDB symbol writer from an assembly available on Mono dynamically - // Report an error if the assembly is not available. - let wr = + // Report an error if the assembly is not available. + let wr = try createWriter f with e -> error(Error(FSComp.SR.ilwriteErrorCreatingMdb(), rangeCmdArgs)) @@ -735,7 +735,7 @@ let writeMdbInfo fmdb f info = let unit = wr?DefineCompilationUnit doc yield doc, unit |] - let getDocument i = + let getDocument i = if i < 0 || i >= Array.length docs then failwith "getDocument: bad doc number" else docs.[i] // Sort methods and write them to the MDB file @@ -756,13 +756,13 @@ let writeMdbInfo fmdb f info = wr?MarkSequencePoint(sp.Offset, cue?get_SourceFile(), sp.Line, sp.Column, false) // Walk through the tree of scopes and write all variables - let rec writeScope (scope: PdbMethodScope) = + let rec writeScope (scope: PdbMethodScope) = wr?OpenScope(scope.StartOffset) |> ignore for local in scope.Locals do wr?DefineLocalVariable(local.Index, local.Name) - for child in scope.Children do + for child in scope.Children do writeScope child - wr?CloseScope(scope.EndOffset) + wr?CloseScope(scope.EndOffset) match meth.RootScope with | None -> () | Some rootscope -> writeScope rootscope @@ -782,7 +782,7 @@ let writeMdbInfo fmdb f info = //--------------------------------------------------------------------- open Printf -let logDebugInfo (outfile: string) (info: PdbData) = +let logDebugInfo (outfile: string) (info: PdbData) = use sw = new StreamWriter(new FileStream(outfile + ".debuginfo", FileMode.Create)) fprintfn sw "ENTRYPOINT\r\n %b\r\n" info.EntryPoint.IsSome @@ -799,7 +799,7 @@ let logDebugInfo (outfile: string) (info: PdbData) = for meth in info.Methods do fprintfn sw " %s" meth.MethName fprintfn sw " Params: %A" [ for p in meth.Params -> sprintf "%d: %s" p.Index p.Name ] - fprintfn sw " Range: %A" (meth.Range |> Option.map (fun (f, t) -> + fprintfn sw " Range: %A" (meth.Range |> Option.map (fun (f, t) -> sprintf "[%d,%d:%d] - [%d,%d:%d]" f.Document f.Line f.Column t.Document t.Line t.Column)) fprintfn sw " Points:" @@ -808,7 +808,7 @@ let logDebugInfo (outfile: string) (info: PdbData) = // Walk through the tree of scopes and write all variables fprintfn sw " Scopes:" - let rec writeScope offs (scope: PdbMethodScope) = + let rec writeScope offs (scope: PdbMethodScope) = fprintfn sw " %s- [%d-%d]" offs scope.StartOffset scope.EndOffset if scope.Locals.Length > 0 then fprintfn sw " %s Locals: %A" offs [ for p in scope.Locals -> sprintf "%d: %s" p.Index p.Name ] diff --git a/src/fsharp/absil/ilwritepdb.fsi b/src/fsharp/absil/ilwritepdb.fsi index b9620d284bf..5d90d7b8c47 100644 --- a/src/fsharp/absil/ilwritepdb.fsi +++ b/src/fsharp/absil/ilwritepdb.fsi @@ -5,6 +5,9 @@ module internal FSharp.Compiler.AbstractIL.ILPdbWriter open Internal.Utilities open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.ErrorLogger +open FSharp.Compiler.Range +open System.Collections.Generic open System.IO open System.Reflection.Metadata @@ -17,7 +20,7 @@ type PdbLocalVar = Index: int32 } type PdbMethodScope = - { Children: PdbMethodScope[] + { Children: PdbMethodScope array StartOffset: int EndOffset: int Locals: PdbLocalVar array @@ -55,6 +58,7 @@ type PdbData = Methods: PdbMethodData[] TableRowCounts: int[] } + /// Takes the output file name and returns debug file name. val getDebugFileName: string -> bool -> string diff --git a/src/fsharp/absil/ilx.fs b/src/fsharp/absil/ilx.fs index a5ee2f9ec84..7eb0541165a 100644 --- a/src/fsharp/absil/ilx.fs +++ b/src/fsharp/absil/ilx.fs @@ -1,10 +1,14 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// Defines an extension of the IL algebra -module internal FSharp.Compiler.AbstractIL.ILX.Types +module internal FSharp.Compiler.AbstractIL.Extensions.ILX.Types open FSharp.Compiler.AbstractIL.IL -open Internal.Utilities.Library +open FSharp.Compiler.AbstractIL.Internal.Library + +// -------------------------------------------------------------------- +// Define an extension of the IL instruction algebra +// -------------------------------------------------------------------- let mkLowerName (nm: string) = // Use the lower case name of a field or constructor as the field/parameter name if it differs from the uppercase name @@ -12,16 +16,17 @@ let mkLowerName (nm: string) = if lowerName = nm then "_" + nm else lowerName [] -type IlxUnionCaseField(fd: ILFieldDef) = +type IlxUnionField(fd: ILFieldDef) = let lowerName = mkLowerName fd.Name member x.ILField = fd member x.Type = x.ILField.FieldType member x.Name = x.ILField.Name member x.LowerName = lowerName -type IlxUnionCase = + +type IlxUnionAlternative = { altName: string - altFields: IlxUnionCaseField[] + altFields: IlxUnionField[] altCustomAttrs: ILAttributes } member x.FieldDefs = x.altFields @@ -37,7 +42,7 @@ type IlxUnionHasHelpers = | SpecialFSharpOptionHelpers type IlxUnionRef = - | IlxUnionRef of boxity: ILBoxity * ILTypeRef * IlxUnionCase[] * bool * (* hasHelpers: *) IlxUnionHasHelpers + | IlxUnionRef of boxity: ILBoxity * ILTypeRef * IlxUnionAlternative[] * bool * (* hasHelpers: *) IlxUnionHasHelpers type IlxUnionSpec = | IlxUnionSpec of IlxUnionRef * ILGenericArgs @@ -52,6 +57,7 @@ type IlxUnionSpec = member x.Alternative idx = x.AlternativesArray.[idx] member x.FieldDef idx fidx = x.Alternative(idx).FieldDef(fidx) + type IlxClosureLambdas = | Lambdas_forall of ILGenericParameterDef * IlxClosureLambdas | Lambdas_lambda of ILParameter * IlxClosureLambdas @@ -63,7 +69,7 @@ type IlxClosureApps = | Apps_done of ILType let rec instAppsAux n inst = function - | Apps_tyapp (ty, rty) -> Apps_tyapp(instILTypeAux n inst ty, instAppsAux n inst rty) + Apps_tyapp (ty, rty) -> Apps_tyapp(instILTypeAux n inst ty, instAppsAux n inst rty) | Apps_app (dty, rty) -> Apps_app(instILTypeAux n inst dty, instAppsAux n inst rty) | Apps_done rty -> Apps_done(instILTypeAux n inst rty) @@ -142,11 +148,8 @@ type IlxUnionInfo = /// generate the helpers? cudDebugProxies: bool - cudDebugDisplayAttributes: ILAttribute list - - cudAlternatives: IlxUnionCase[] - + cudAlternatives: IlxUnionAlternative[] cudNullPermitted: bool /// debug info for generated code for classunions diff --git a/src/fsharp/absil/ilx.fsi b/src/fsharp/absil/ilx.fsi index c1e700cfd1f..ee139d9f89f 100644 --- a/src/fsharp/absil/ilx.fsi +++ b/src/fsharp/absil/ilx.fsi @@ -1,28 +1,33 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// ILX extensions to Abstract IL types and instructions F# -module internal FSharp.Compiler.AbstractIL.ILX.Types +module internal FSharp.Compiler.AbstractIL.Extensions.ILX.Types +open Internal.Utilities +open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.IL -/// Union case field +// -------------------------------------------------------------------- +// Union references +// -------------------------------------------------------------------- + [] -type IlxUnionCaseField = - new: ILFieldDef -> IlxUnionCaseField +type IlxUnionField = + new: ILFieldDef -> IlxUnionField member Type: ILType member Name: string /// The name used for the field in parameter or IL field position. member LowerName: string member ILField: ILFieldDef -/// Union alternative -type IlxUnionCase = +type IlxUnionAlternative = { altName: string - altFields: IlxUnionCaseField[] + altFields: IlxUnionField[] altCustomAttrs: ILAttributes } - member FieldDefs: IlxUnionCaseField[] - member FieldDef: int -> IlxUnionCaseField + member FieldDefs: IlxUnionField[] + member FieldDef: int -> IlxUnionField member Name: string member IsNullary : bool member FieldTypes: ILType[] @@ -34,9 +39,8 @@ type IlxUnionHasHelpers = | SpecialFSharpListHelpers | SpecialFSharpOptionHelpers -/// Union references type IlxUnionRef = - | IlxUnionRef of boxity: ILBoxity * ILTypeRef * IlxUnionCase[] * bool (* cudNullPermitted *) * IlxUnionHasHelpers (* cudHasHelpers *) + | IlxUnionRef of boxity: ILBoxity * ILTypeRef * IlxUnionAlternative[] * bool (* cudNullPermitted *) * IlxUnionHasHelpers (* cudHasHelpers *) type IlxUnionSpec = | IlxUnionSpec of IlxUnionRef * ILGenericArgs @@ -45,9 +49,9 @@ type IlxUnionSpec = member GenericArgs: ILGenericArgs - member Alternatives: IlxUnionCase list + member Alternatives: IlxUnionAlternative list - member AlternativesArray: IlxUnionCase[] + member AlternativesArray: IlxUnionAlternative[] member Boxity: ILBoxity @@ -57,9 +61,9 @@ type IlxUnionSpec = member HasHelpers: IlxUnionHasHelpers - member Alternative: int -> IlxUnionCase + member Alternative: int -> IlxUnionAlternative - member FieldDef: int -> int -> IlxUnionCaseField + member FieldDef: int -> int -> IlxUnionField // -------------------------------------------------------------------- // Closure references @@ -137,7 +141,7 @@ type IlxUnionInfo = cudDebugDisplayAttributes: ILAttribute list - cudAlternatives: IlxUnionCase[] + cudAlternatives: IlxUnionAlternative[] cudNullPermitted: bool diff --git a/src/fsharp/absil/zmap.fs b/src/fsharp/absil/zmap.fs index 92edf3d1d1f..eebdf0344ff 100644 --- a/src/fsharp/absil/zmap.fs +++ b/src/fsharp/absil/zmap.fs @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace Internal.Utilities.Collections +namespace FSharp.Compiler.AbstractIL.Internal open Internal.Utilities.Collections.Tagged open System.Collections.Generic @@ -8,6 +8,7 @@ open System.Collections.Generic /// Maps with a specific comparison function type internal Zmap<'Key,'T> = Internal.Utilities.Collections.Tagged.Map<'Key,'T> +[] module internal Zmap = let empty (ord: IComparer<'T>) = Map<_,_,_>.Empty(ord) diff --git a/src/fsharp/absil/zmap.fsi b/src/fsharp/absil/zmap.fsi index 6c67f239770..946f4543d4e 100644 --- a/src/fsharp/absil/zmap.fsi +++ b/src/fsharp/absil/zmap.fsi @@ -1,12 +1,16 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace Internal.Utilities.Collections +namespace FSharp.Compiler.AbstractIL.Internal +open Internal.Utilities +open Internal.Utilities.Collections.Tagged +open FSharp.Compiler.AbstractIL.Internal.Library open System.Collections.Generic /// Maps with a specific comparison function type internal Zmap<'Key,'T> = Internal.Utilities.Collections.Tagged.Map<'Key,'T> +[] module internal Zmap = val empty : IComparer<'Key> -> Zmap<'Key,'T> diff --git a/src/fsharp/absil/zset.fs b/src/fsharp/absil/zset.fs index c8314294108..f766178ebb1 100644 --- a/src/fsharp/absil/zset.fs +++ b/src/fsharp/absil/zset.fs @@ -1,13 +1,16 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace Internal.Utilities.Collections +namespace FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.Internal.Library open Internal.Utilities.Collections.Tagged open System.Collections.Generic /// Sets with a specific comparison function type internal Zset<'T> = Internal.Utilities.Collections.Tagged.Set<'T> +[] module internal Zset = let empty (ord : IComparer<'T>) = Internal.Utilities.Collections.Tagged.Set<_,_>.Empty(ord) diff --git a/src/fsharp/absil/zset.fsi b/src/fsharp/absil/zset.fsi index 1128cccbfe5..5d1d3419747 100644 --- a/src/fsharp/absil/zset.fsi +++ b/src/fsharp/absil/zset.fsi @@ -1,13 +1,17 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace Internal.Utilities.Collections +namespace FSharp.Compiler.AbstractIL.Internal +open Internal.Utilities open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.Internal.Library open System.Collections.Generic /// Sets with a specific comparison function type internal Zset<'T> = Internal.Utilities.Collections.Tagged.Set<'T> + +[] module internal Zset = val empty : IComparer<'T> -> Zset<'T> diff --git a/src/fsharp/autobox.fs b/src/fsharp/autobox.fs index d5854daa0ac..d026453a82b 100644 --- a/src/fsharp/autobox.fs +++ b/src/fsharp/autobox.fs @@ -2,13 +2,13 @@ module internal FSharp.Compiler.AutoBox -open Internal.Utilities.Collections -open Internal.Utilities.Library.Extras +open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler open FSharp.Compiler.ErrorLogger open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.Lib open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypeRelations @@ -23,15 +23,12 @@ type cenv = /// Find all the mutable locals that escape a method, function or lambda expression let DecideEscapes syntacticArgs body = - let isMutableEscape v = + let cantBeFree v = let passedIn = ListSet.contains valEq v syntacticArgs - not passedIn && - v.IsMutable && - v.ValReprInfo.IsNone && - not (Optimizer.IsKnownOnlyMutableBeforeUse (mkLocalValRef v)) + not passedIn && (v.IsMutable && v.ValReprInfo.IsNone) let frees = freeInExpr CollectLocals body - frees.FreeLocals |> Zset.filter isMutableEscape + frees.FreeLocals |> Zset.filter cantBeFree /// Find all the mutable locals that escape a lambda expression, ignoring the arguments to the lambda let DecideLambda exprF cenv topValInfo expr ety z = diff --git a/src/fsharp/autobox.fsi b/src/fsharp/autobox.fsi index 00feb25f75a..09e62ff8dfd 100644 --- a/src/fsharp/autobox.fsi +++ b/src/fsharp/autobox.fsi @@ -2,9 +2,9 @@ module internal FSharp.Compiler.AutoBox -open FSharp.Compiler.Import -open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypedTree +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Import /// Rewrite mutable locals to reference cells across an entire implementation file val TransformImplFile: g: TcGlobals -> amap: ImportMap -> implFile: TypedImplFile -> TypedImplFile diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs index e1779881d56..247c822c222 100644 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -1,15 +1,15 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -// Driver for F# compiler. -// +// Driver for F# compiler. +// // Roughly divides into: // - Parsing -// - Flags +// - Flags // - Importing IL assemblies // - Compiling (including optimizing) // - Linking (including ILX-IL transformation) -module internal FSharp.Compiler.Driver +module internal FSharp.Compiler.Driver open System open System.Collections.Generic @@ -21,13 +21,14 @@ open System.Text open System.Threading open Internal.Utilities -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras +open Internal.Utilities.Filename +open Internal.Utilities.StructuredFormat open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILBinaryReader +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.CheckExpressions open FSharp.Compiler.CheckDeclarations @@ -37,26 +38,22 @@ open FSharp.Compiler.CompilerImports open FSharp.Compiler.CompilerOptions open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.CreateILModule -open FSharp.Compiler.DependencyManager -open FSharp.Compiler.Diagnostics open FSharp.Compiler.ErrorLogger open FSharp.Compiler.IlxGen open FSharp.Compiler.InfoReader -open FSharp.Compiler.IO +open FSharp.Compiler.Lib open FSharp.Compiler.ParseAndCheckInputs +open FSharp.Compiler.PrettyNaming open FSharp.Compiler.OptimizeInputs open FSharp.Compiler.ScriptClosure -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming -open FSharp.Compiler.StaticLinking -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Text +open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.TcGlobals open FSharp.Compiler.XmlDocFileWriter -open FSharp.Compiler.BuildGraph +open FSharp.Compiler.StaticLinking +open Microsoft.DotNet.DependencyManager //---------------------------------------------------------------------------- // Reporting - warnings, errors @@ -64,59 +61,59 @@ open FSharp.Compiler.BuildGraph /// An error logger that reports errors up to some maximum, notifying the exiter when that maximum is reached [] -type ErrorLoggerUpToMaxErrors(tcConfigB: TcConfigBuilder, exiter: Exiter, nameForDebugging) = +type ErrorLoggerUpToMaxErrors(tcConfigB: TcConfigBuilder, exiter: Exiter, nameForDebugging) = inherit ErrorLogger(nameForDebugging) let mutable errors = 0 /// Called when an error or warning occurs - abstract HandleIssue: tcConfigB: TcConfigBuilder * error: PhasedDiagnostic * severity: FSharpDiagnosticSeverity -> unit + abstract HandleIssue: tcConfigB: TcConfigBuilder * error: PhasedDiagnostic * isError: bool -> unit /// Called when 'too many errors' has occurred abstract HandleTooManyErrors: text: string -> unit override x.ErrorCount = errors - override x.DiagnosticSink(err, severity) = - if severity = FSharpDiagnosticSeverity.Error || ReportWarningAsError tcConfigB.errorSeverityOptions err then - if errors >= tcConfigB.maxErrors then + override x.DiagnosticSink(err, isError) = + if isError || ReportWarningAsError tcConfigB.errorSeverityOptions err then + if errors >= tcConfigB.maxErrors then x.HandleTooManyErrors(FSComp.SR.fscTooManyErrors()) exiter.Exit 1 - x.HandleIssue(tcConfigB, err, FSharpDiagnosticSeverity.Error) + x.HandleIssue(tcConfigB, err, true) errors <- errors + 1 - match err.Exception, tcConfigB.simulateException with - | InternalError (msg, _), None + match err.Exception, tcConfigB.simulateException with + | InternalError (msg, _), None | Failure msg, None -> Debug.Assert(false, sprintf "Bug in compiler: %s\n%s" msg (err.Exception.ToString())) | :? KeyNotFoundException, None -> Debug.Assert(false, sprintf "Lookup exception in compiler: %s" (err.Exception.ToString())) | _ -> () elif ReportWarning tcConfigB.errorSeverityOptions err then - x.HandleIssue(tcConfigB, err, severity) - + x.HandleIssue(tcConfigB, err, isError) + -/// Create an error logger that counts and prints errors -let ConsoleErrorLoggerUpToMaxErrors (tcConfigB: TcConfigBuilder, exiter : Exiter) = +/// Create an error logger that counts and prints errors +let ConsoleErrorLoggerUpToMaxErrors (tcConfigB: TcConfigBuilder, exiter : Exiter) = { new ErrorLoggerUpToMaxErrors(tcConfigB, exiter, "ConsoleErrorLoggerUpToMaxErrors") with + + member __.HandleTooManyErrors(text : string) = + DoWithErrorColor false (fun () -> Printf.eprintfn "%s" text) - member _.HandleTooManyErrors(text : string) = - DoWithDiagnosticColor FSharpDiagnosticSeverity.Warning (fun () -> Printf.eprintfn "%s" text) - - member _.HandleIssue(tcConfigB, err, severity) = - DoWithDiagnosticColor severity (fun () -> - let diag = OutputDiagnostic (tcConfigB.implicitIncludeDir, tcConfigB.showFullPaths, tcConfigB.flatErrors, tcConfigB.errorStyle, severity) + member __.HandleIssue(tcConfigB, err, isError) = + DoWithErrorColor isError (fun () -> + let diag = OutputDiagnostic (tcConfigB.implicitIncludeDir, tcConfigB.showFullPaths, tcConfigB.flatErrors, tcConfigB.errorStyle, isError) writeViaBuffer stderr diag err stderr.WriteLine()) } :> ErrorLogger /// This error logger delays the messages it receives. At the end, call ForwardDelayedDiagnostics -/// to send the held messages. +/// to send the held messages. type DelayAndForwardErrorLogger(exiter: Exiter, errorLoggerProvider: ErrorLoggerProvider) = inherit CapturingErrorLogger("DelayAndForwardErrorLogger") - member x.ForwardDelayedDiagnostics(tcConfigB: TcConfigBuilder) = + member x.ForwardDelayedDiagnostics(tcConfigB: TcConfigBuilder) = let errorLogger = errorLoggerProvider.CreateErrorLoggerUpToMaxErrors(tcConfigB, exiter) x.CommitDelayedDiagnostics errorLogger @@ -127,128 +124,102 @@ and [] abstract CreateErrorLoggerUpToMaxErrors : tcConfigBuilder : TcConfigBuilder * exiter : Exiter -> ErrorLogger - + /// Part of LegacyHostedCompilerForTesting /// /// Yet another ErrorLogger implementation, capturing the messages but only up to the maxerrors maximum -type InProcErrorLoggerProvider() = +type InProcErrorLoggerProvider() = let errors = ResizeArray() let warnings = ResizeArray() - member _.Provider = + member __.Provider = { new ErrorLoggerProvider() with member log.CreateErrorLoggerUpToMaxErrors(tcConfigBuilder, exiter) = { new ErrorLoggerUpToMaxErrors(tcConfigBuilder, exiter, "InProcCompilerErrorLoggerUpToMaxErrors") with - member this.HandleTooManyErrors text = - warnings.Add(Diagnostic.Short(FSharpDiagnosticSeverity.Warning, text)) + member this.HandleTooManyErrors text = warnings.Add(Diagnostic.Short(false, text)) - member this.HandleIssue(tcConfigBuilder, err, severity) = + member this.HandleIssue(tcConfigBuilder, err, isError) = // 'true' is passed for "suggestNames", since we want to suggest names with fsc.exe runs and this doesn't affect IDE perf - let diagnostics = + let errs = CollectDiagnostic (tcConfigBuilder.implicitIncludeDir, tcConfigBuilder.showFullPaths, - tcConfigBuilder.flatErrors, tcConfigBuilder.errorStyle, severity, err, true) - match severity with - | FSharpDiagnosticSeverity.Error -> - errors.AddRange(diagnostics) - | FSharpDiagnosticSeverity.Warning -> - warnings.AddRange(diagnostics) - | _ -> ()} + tcConfigBuilder.flatErrors, tcConfigBuilder.errorStyle, isError, err, true) + let container = if isError then errors else warnings + container.AddRange(errs) } :> ErrorLogger } - member _.CapturedErrors = errors.ToArray() + member __.CapturedErrors = errors.ToArray() - member _.CapturedWarnings = warnings.ToArray() + member __.CapturedWarnings = warnings.ToArray() /// The default ErrorLogger implementation, reporting messages to the Console up to the maxerrors maximum -type ConsoleLoggerProvider() = +type ConsoleLoggerProvider() = inherit ErrorLoggerProvider() override this.CreateErrorLoggerUpToMaxErrors(tcConfigBuilder, exiter) = ConsoleErrorLoggerUpToMaxErrors(tcConfigBuilder, exiter) -/// Notify the exiter if any error has occurred -let AbortOnError (errorLogger: ErrorLogger, exiter : Exiter) = +/// Notify the exiter if any error has occurred +let AbortOnError (errorLogger: ErrorLogger, exiter : Exiter) = if errorLogger.ErrorCount > 0 then exiter.Exit 1 let TypeCheck (ctok, tcConfig, tcImports, tcGlobals, errorLogger: ErrorLogger, assemblyName, niceNameGen, tcEnv0, inputs, exiter: Exiter) = - try + try if isNil inputs then error(Error(FSComp.SR.fscNoImplementationFiles(), Range.rangeStartup)) let ccuName = assemblyName let tcInitialState = GetInitialTcState (rangeStartup, ccuName, tcConfig, tcGlobals, tcImports, niceNameGen, tcEnv0) TypeCheckClosedInputSet (ctok, (fun () -> errorLogger.ErrorCount > 0), tcConfig, tcImports, tcGlobals, None, tcInitialState, inputs) - with e -> + with e -> errorRecovery e rangeStartup exiter.Exit 1 /// Check for .fsx and, if present, compute the load closure for of #loaded files. -/// -/// This is the "script compilation" feature that has always been present in the F# compiler, that allows you to compile scripts -/// and get the load closure and references from them. This applies even if the script is in a project (with 'Compile' action), for example. -/// -/// Any DLL references implied by package references are also retrieved from the script. -/// -/// When script compilation is invoked, the outputs are not necessarily a functioning application - the referenced DLLs are not -/// copied to the output folder, for example (except perhaps FSharp.Core.dll). -/// -/// NOTE: there is similar code in IncrementalBuilder.fs and this code should really be reconciled with that -let AdjustForScriptCompile(tcConfigB: TcConfigBuilder, commandLineSourceFiles, lexResourceManager, dependencyProvider) = +let AdjustForScriptCompile(ctok, tcConfigB: TcConfigBuilder, commandLineSourceFiles, lexResourceManager, dependencyProvider) = let combineFilePath file = try if FileSystem.IsPathRootedShim file then file else Path.Combine(tcConfigB.implicitIncludeDir, file) with _ -> - error (Error(FSComp.SR.pathIsInvalid file, rangeStartup)) - - let commandLineSourceFiles = - commandLineSourceFiles + error (Error(FSComp.SR.pathIsInvalid file, rangeStartup)) + + let commandLineSourceFiles = + commandLineSourceFiles |> List.map combineFilePath - - // Script compilation is active if the last item being compiled is a script and --noframework has not been specified - let mutable allSources = [] - - let tcConfig = TcConfig.Create(tcConfigB, validate=false) - + + let mutable allSources = [] + + let tcConfig = TcConfig.Create(tcConfigB, validate=false) + let AddIfNotPresent(filename: string) = if not(allSources |> List.contains filename) then allSources <- filename :: allSources - + let AppendClosureInformation filename = - if IsScript filename then - let closure = + if IsScript filename then + let closure = LoadClosure.ComputeClosureOfScriptFiles - (tcConfig, [filename, rangeStartup], CodeContext.Compilation, + (ctok, tcConfig, [filename, rangeStartup], CodeContext.Compilation, lexResourceManager, dependencyProvider) - // Record the new references (non-framework) references from the analysis of the script. (The full resolutions are recorded - // as the corresponding #I paths used to resolve them are local to the scripts and not added to the tcConfigB - they are - // added to localized clones of the tcConfigB). + // Record the references from the analysis of the script. The full resolutions are recorded as the corresponding #I paths used to resolve them + // are local to the scripts and not added to the tcConfigB (they are added to localized clones of the tcConfigB). let references = closure.References |> List.collect snd |> List.filter (fun r -> not (Range.equals r.originalReference.Range range0) && not (Range.equals r.originalReference.Range rangeStartup)) references |> List.iter (fun r -> tcConfigB.AddReferencedAssemblyByPath(r.originalReference.Range, r.resolvedPath)) - - // Also record the other declarations from the script. closure.NoWarns |> List.collect (fun (n, ms) -> ms|>List.map(fun m->m, n)) |> List.iter (fun (x,m) -> tcConfigB.TurnWarningOff(x, m)) closure.SourceFiles |> List.map fst |> List.iter AddIfNotPresent closure.AllRootFileDiagnostics |> List.iter diagnosticSink - - // If there is a target framework for the script then push that as a requirement into the overall compilation and add all the framework references implied - // by the script too. - tcConfigB.SetPrimaryAssembly (if closure.UseDesktopFramework then PrimaryAssembly.Mscorlib else PrimaryAssembly.System_Runtime) - if tcConfigB.framework then - let references = closure.References |> List.collect snd - references |> List.iter (fun r -> tcConfigB.AddReferencedAssemblyByPath(r.originalReference.Range, r.resolvedPath)) - + else AddIfNotPresent filename - + // Find closure of .fsx files. commandLineSourceFiles |> List.iter AppendClosureInformation @@ -258,14 +229,14 @@ let SetProcessThreadLocals tcConfigB = match tcConfigB.preferredUiLang with | Some s -> Thread.CurrentThread.CurrentUICulture <- new CultureInfo(s) | None -> () - if tcConfigB.utf8output then + if tcConfigB.utf8output then Console.OutputEncoding <- Encoding.UTF8 let ProcessCommandLineFlags (tcConfigB: TcConfigBuilder, lcidFromCodePage, argv) = let mutable inputFilesRef = [] - let collect name = + let collect name = let lower = String.lowercase name - if List.exists (FileSystemUtils.checkSuffix lower) [".resx"] then + if List.exists (Filename.checkSuffix lower) [".resx"] then error(Error(FSComp.SR.fscResxSourceFileDeprecated name, rangeStartup)) else inputFilesRef <- name :: inputFilesRef @@ -297,7 +268,7 @@ let ProcessCommandLineFlags (tcConfigB: TcConfigBuilder, lcidFromCodePage, argv) SetProcessThreadLocals tcConfigB (* step - get dll references *) - let dllFiles, sourceFiles = inputFiles |> List.map(fun p -> FileSystemUtils.trimQuotes p) |> List.partition FileSystemUtils.isDll + 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)) @@ -305,57 +276,77 @@ let ProcessCommandLineFlags (tcConfigB: TcConfigBuilder, lcidFromCodePage, argv) dllFiles |> List.iter (fun f->tcConfigB.AddReferencedAssemblyByPath(rangeStartup, f)) sourceFiles +let EncodeSignatureData(tcConfig: TcConfig, tcGlobals, exportRemapping, generatedCcu, outfile, isIncrementalBuild) = + if tcConfig.GenerateSignatureData then + let resource = WriteSignatureData (tcConfig, tcGlobals, exportRemapping, generatedCcu, outfile, isIncrementalBuild) + // The resource gets written to a file for FSharp.Core + let useDataFiles = (tcConfig.useOptimizationDataFile || tcGlobals.compilingFslib) && not isIncrementalBuild + if useDataFiles then + let sigDataFileName = (Filename.chopExtension outfile)+".sigdata" + let bytes = resource.GetBytes() + use fileStream = File.Create(sigDataFileName, bytes.Length) + bytes.CopyTo fileStream + let resources = + [ resource ] + let sigAttr = mkSignatureDataVersionAttr tcGlobals (IL.parseILVersion Internal.Utilities.FSharpEnvironment.FSharpBinaryMetadataFormatRevision) + [sigAttr], resources + else + [], [] + +let EncodeOptimizationData(tcGlobals, tcConfig: TcConfig, outfile, exportRemapping, data, isIncrementalBuild) = + if tcConfig.GenerateOptimizationData then + let data = map2Of2 (Optimizer.RemapOptimizationInfo tcGlobals exportRemapping) data + // As with the sigdata file, the optdata gets written to a file for FSharp.Core + let useDataFiles = (tcConfig.useOptimizationDataFile || tcGlobals.compilingFslib) && not isIncrementalBuild + if useDataFiles then + let ccu, modulInfo = data + let bytes = TypedTreePickle.pickleObjWithDanglingCcus isIncrementalBuild outfile tcGlobals ccu Optimizer.p_CcuOptimizationInfo modulInfo + let optDataFileName = (Filename.chopExtension outfile)+".optdata" + File.WriteAllBytes(optDataFileName, bytes) + let (ccu, optData) = + if tcConfig.onlyEssentialOptimizationData then + map2Of2 Optimizer.AbstractOptimizationInfoToEssentials data + else + data + [ WriteOptimizationData (tcGlobals, outfile, isIncrementalBuild, ccu, optData) ] + else + [ ] + /// Write a .fsi file for the --sig option module InterfaceFileWriter = - let WriteInterfaceFile (tcGlobals, tcConfig: TcConfig, infoReader, declaredImpls: TypedImplFile list) = - // there are two modes here: - // * write one unified sig file to a given path, or - // * write individual sig files to paths matching their impl files - let denv = DisplayEnv.InitialForSigFileGeneration tcGlobals - let denv = { denv with shrinkOverloads = false; printVerboseSignatures = true } - - let writeToFile os (TImplFile (_, _, mexpr, _, _, _)) = - writeViaBuffer os (fun os s -> Printf.bprintf os "%s\n\n" s) - (NicePrint.layoutInferredSigOfModuleExpr true denv infoReader AccessibleFromSomewhere range0 mexpr |> Display.squashTo 80 |> LayoutRender.showL) - - let writeHeader filePath os = - if filePath <> "" && not (List.exists (FileSystemUtils.checkSuffix filePath) FSharpLightSyntaxFileSuffixes) then - fprintfn os "#light" - fprintfn os "" - - let writeAllToSameFile declaredImpls = - /// Use a UTF-8 Encoding with no Byte Order Mark - let os = - if tcConfig.printSignatureFile = "" then - Console.Out - else - FileSystem.OpenFileForWriteShim(tcConfig.printSignatureFile, FileMode.OpenOrCreate).GetWriter() - - writeHeader tcConfig.printSignatureFile os - - for impl in declaredImpls do - writeToFile os impl - - if tcConfig.printSignatureFile <> "" then os.Dispose() - - let extensionForFile (filePath: string) = - if (List.exists (FileSystemUtils.checkSuffix filePath) mlCompatSuffixes) then - ".mli" - else - ".fsi" - - let writeToSeparateFiles (declaredImpls: TypedImplFile list) = - for (TImplFile (name, _, _, _, _, _) as impl) in declaredImpls do - let filename = System.IO.Path.ChangeExtension(name.Range.FileName, extensionForFile name.Range.FileName) - printfn "writing impl file to %s" filename - use os = FileSystem.OpenFileForWriteShim(filename, FileMode.OpenOrCreate).GetWriter() - writeHeader filename os - writeToFile os impl - - if tcConfig.printSignature then - writeAllToSameFile declaredImpls - else if tcConfig.printAllSignatureFiles then - writeToSeparateFiles declaredImpls + + let BuildInitialDisplayEnvForSigFileGeneration tcGlobals = + let denv = DisplayEnv.Empty tcGlobals + let denv = + { denv with + showImperativeTyparAnnotations=true + showHiddenMembers=true + showObsoleteMembers=true + showAttributes=true } + denv.SetOpenPaths + [ FSharpLib.RootPath + FSharpLib.CorePath + FSharpLib.CollectionsPath + FSharpLib.ControlPath + (IL.splitNamespace FSharpLib.ExtraTopLevelOperatorsName) ] + + let WriteInterfaceFile (tcGlobals, tcConfig: TcConfig, infoReader, declaredImpls) = + + /// Use a UTF-8 Encoding with no Byte Order Mark + let os = + if tcConfig.printSignatureFile="" then Console.Out + else (File.CreateText tcConfig.printSignatureFile :> TextWriter) + + if tcConfig.printSignatureFile <> "" && not (List.exists (Filename.checkSuffix tcConfig.printSignatureFile) FSharpLightSyntaxFileSuffixes) then + fprintfn os "#light" + fprintfn os "" + + for (TImplFile (_, _, mexpr, _, _, _)) in declaredImpls do + let denv = BuildInitialDisplayEnvForSigFileGeneration tcGlobals + writeViaBuffer os (fun os s -> Printf.bprintf os "%s\n\n" s) + (NicePrint.layoutInferredSigOfModuleExpr true { denv with shrinkOverloads = false; printVerboseSignatures = true } infoReader AccessibleFromSomewhere range0 mexpr |> Display.squashTo 80 |> Layout.showL) + + if tcConfig.printSignatureFile <> "" then os.Dispose() //---------------------------------------------------------------------------- // CopyFSharpCore @@ -370,8 +361,8 @@ let CopyFSharpCore(outFile: string, referencedDlls: AssemblyReference list) = let fsharpCoreAssemblyName = GetFSharpCoreLibraryName() + ".dll" let fsharpCoreDestinationPath = Path.Combine(outDir, fsharpCoreAssemblyName) let copyFileIfDifferent src dest = - if not (FileSystem.FileExistsShim dest) || (FileSystem.GetCreationTimeShim src <> FileSystem.GetCreationTimeShim dest) then - FileSystem.CopyShim(src, dest, true) + if not (File.Exists dest) || (File.GetCreationTimeUtc src <> File.GetCreationTimeUtc dest) then + File.Copy(src, dest, true) match referencedDlls |> Seq.tryFind (fun dll -> String.Equals(Path.GetFileName(dll.Text), fsharpCoreAssemblyName, StringComparison.CurrentCultureIgnoreCase)) with | Some referencedFsharpCoreDll -> copyFileIfDifferent referencedFsharpCoreDll.Text fsharpCoreDestinationPath @@ -380,12 +371,12 @@ let CopyFSharpCore(outFile: string, referencedDlls: AssemblyReference list) = Assembly.GetExecutingAssembly().Location let compilerLocation = Path.GetDirectoryName executionLocation let compilerFsharpCoreDllPath = Path.Combine(compilerLocation, fsharpCoreAssemblyName) - if FileSystem.FileExistsShim compilerFsharpCoreDllPath then + if File.Exists compilerFsharpCoreDllPath then copyFileIfDifferent compilerFsharpCoreDllPath fsharpCoreDestinationPath else errorR(Error(FSComp.SR.fsharpCoreNotFoundToBeCopied(), rangeCmdArgs)) -// Try to find an AssemblyVersion attribute +// Try to find an AssemblyVersion attribute let TryFindVersionAttribute g attrib attribName attribs deterministic = match AttributeHelpers.TryFindStringAttribute g attrib attribs with | Some versionString -> @@ -406,18 +397,18 @@ let TryFindVersionAttribute g attrib attribName attribs deterministic = [] type Args<'T> = Args of 'T -/// First phase of compilation. +/// First phase of compilation. /// - Set up console encoding and code page settings /// - Process command line, flags and collect filenames /// - Resolve assemblies /// - Import assemblies /// - Parse source files /// - Check the inputs -let main1(ctok, argv, legacyReferenceResolver, bannerAlreadyPrinted, - reduceMemoryUsage: ReduceMemoryFlag, defaultCopyFSharpCore: CopyFSharpCoreFlag, - exiter: Exiter, errorLoggerProvider: ErrorLoggerProvider, disposables: DisposablesTracker) = +let main1(ctok, argv, legacyReferenceResolver, bannerAlreadyPrinted, + reduceMemoryUsage: ReduceMemoryFlag, defaultCopyFSharpCore: CopyFSharpCoreFlag, + exiter: Exiter, errorLoggerProvider: ErrorLoggerProvider, disposables: DisposablesTracker) = - // See Bug 735819 + // See Bug 735819 let lcidFromCodePage = if (Console.OutputEncoding.CodePage <> 65001) && (Console.OutputEncoding.CodePage <> Thread.CurrentThread.CurrentUICulture.TextInfo.OEMCodePage) && @@ -433,122 +424,130 @@ let main1(ctok, argv, legacyReferenceResolver, bannerAlreadyPrinted, let defaultFSharpBinariesDir = FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(FSharpEnvironment.tryCurrentDomain()).Value - let tcConfigB = - TcConfigBuilder.CreateNew(legacyReferenceResolver, - defaultFSharpBinariesDir, - reduceMemoryUsage=reduceMemoryUsage, - implicitIncludeDir=directoryBuildingFrom, - isInteractive=false, - isInvalidationSupported=false, - defaultCopyFSharpCore=defaultCopyFSharpCore, - tryGetMetadataSnapshot=tryGetMetadataSnapshot, - sdkDirOverride=None, - rangeForErrors=range0) + let tcConfigB = + TcConfigBuilder.CreateNew(legacyReferenceResolver, defaultFSharpBinariesDir, + reduceMemoryUsage=reduceMemoryUsage, implicitIncludeDir=directoryBuildingFrom, + isInteractive=false, isInvalidationSupported=false, + defaultCopyFSharpCore=defaultCopyFSharpCore, + tryGetMetadataSnapshot=tryGetMetadataSnapshot) // Preset: --optimize+ -g --tailcalls+ (see 4505) SetOptimizeSwitch tcConfigB OptionSwitch.On SetDebugSwitch tcConfigB None OptionSwitch.Off - SetTailcallSwitch tcConfigB OptionSwitch.On + SetTailcallSwitch tcConfigB OptionSwitch.On // Now install a delayed logger to hold all errors from flags until after all flags have been parsed (for example, --vserrors) let delayForFlagsLogger = errorLoggerProvider.CreateDelayAndForwardLogger exiter - let _unwindEL_1 = PushErrorLoggerPhaseUntilUnwind (fun _ -> delayForFlagsLogger) - + let _unwindEL_1 = PushErrorLoggerPhaseUntilUnwind (fun _ -> delayForFlagsLogger) + // Share intern'd strings across all lexing/parsing let lexResourceManager = new Lexhelp.LexResourceManager() let dependencyProvider = new DependencyProvider() - // Process command line, flags and collect filenames - let sourceFiles = + // Process command line, flags and collect filenames + let sourceFiles = // The ParseCompilerOptions function calls imperative function to process "real" args - // Rather than start processing, just collect names, then process them. - try + // Rather than start processing, just collect names, then process them. + try let files = ProcessCommandLineFlags (tcConfigB, lcidFromCodePage, argv) - AdjustForScriptCompile(tcConfigB, files, lexResourceManager, dependencyProvider) - with e -> + AdjustForScriptCompile(ctok, tcConfigB, files, lexResourceManager, dependencyProvider) + with e -> errorRecovery e rangeStartup delayForFlagsLogger.ForwardDelayedDiagnostics tcConfigB - exiter.Exit 1 - - tcConfigB.conditionalCompilationDefines <- "COMPILED" :: tcConfigB.conditionalCompilationDefines + exiter.Exit 1 + + tcConfigB.conditionalCompilationDefines <- "COMPILED" :: tcConfigB.conditionalCompilationDefines // Display the banner text, if necessary - if not bannerAlreadyPrinted then + if not bannerAlreadyPrinted then DisplayBannerText tcConfigB // Create tcGlobals and frameworkTcImports - let outfile, pdbfile, assemblyName = - try + let outfile, pdbfile, assemblyName = + try tcConfigB.DecideNames sourceFiles with e -> errorRecovery e rangeStartup delayForFlagsLogger.ForwardDelayedDiagnostics tcConfigB - exiter.Exit 1 - + exiter.Exit 1 + // DecideNames may give "no inputs" error. Abort on error at this point. bug://3911 if not tcConfigB.continueAfterParseFailure && delayForFlagsLogger.ErrorCount > 0 then delayForFlagsLogger.ForwardDelayedDiagnostics tcConfigB exiter.Exit 1 - - // If there's a problem building TcConfig, abort - let tcConfig = + + // If there's a problem building TcConfig, abort + let tcConfig = try TcConfig.Create(tcConfigB, validate=false) with e -> errorRecovery e rangeStartup delayForFlagsLogger.ForwardDelayedDiagnostics tcConfigB exiter.Exit 1 - + let errorLogger = errorLoggerProvider.CreateErrorLoggerUpToMaxErrors(tcConfigB, exiter) // Install the global error logger and never remove it. This logger does have all command-line flags considered. let _unwindEL_2 = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger) - + // Forward all errors from flags delayForFlagsLogger.CommitDelayedDiagnostics errorLogger - if not tcConfigB.continueAfterParseFailure then + if not tcConfigB.continueAfterParseFailure then AbortOnError(errorLogger, exiter) // Resolve assemblies ReportTime tcConfig "Import mscorlib and FSharp.Core.dll" let foundationalTcConfigP = TcConfigProvider.Constant tcConfig - let sysRes, otherRes, knownUnresolved = TcAssemblyResolutions.SplitNonFoundationalResolutions(tcConfig) - + let sysRes, otherRes, knownUnresolved = TcAssemblyResolutions.SplitNonFoundationalResolutions(ctok, tcConfig) + // Import basic assemblies - let tcGlobals, frameworkTcImports = - TcImports.BuildFrameworkTcImports (foundationalTcConfigP, sysRes, otherRes) - |> NodeCode.RunImmediateWithoutCancellation + let tcGlobals, frameworkTcImports = TcImports.BuildFrameworkTcImports (ctok, foundationalTcConfigP, sysRes, otherRes) |> Cancellable.runWithoutCancellation // Register framework tcImports to be disposed in future disposables.Register frameworkTcImports - // Parse sourceFiles + // Parse sourceFiles ReportTime tcConfig "Parse inputs" use unwindParsePhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse - let createErrorLogger = (fun exiter -> errorLoggerProvider.CreateDelayAndForwardLogger(exiter) :> CapturingErrorLogger) - let inputs = ParseInputFiles(tcConfig, lexResourceManager, ["COMPILED"], sourceFiles, errorLogger, exiter, createErrorLogger, (*retryLocked*)false) + let inputs = + try + let isLastCompiland, isExe = sourceFiles |> tcConfig.ComputeCanContainEntryPoint + List.zip sourceFiles isLastCompiland + // PERF: consider making this parallel, once uses of global state relevant to parsing are cleaned up + |> List.choose (fun (sourceFile, isLastCompiland) -> + + let sourceFileDirectory = Path.GetDirectoryName sourceFile + + match ParseOneInputFile(tcConfig, lexResourceManager, ["COMPILED"], sourceFile, (isLastCompiland, isExe), errorLogger, (*retryLocked*)false) with + | Some input -> Some (input, sourceFileDirectory) + | None -> None) + + with e -> + errorRecoveryNoRange e + exiter.Exit 1 + let inputs, _ = (Map.empty, inputs) ||> List.mapFold (fun state (input, x) -> - let inputT, stateT = DeduplicateParsedInputModuleName state input + let inputT, stateT = DeduplicateParsedInputModuleName state input (inputT, x), stateT) // Print the AST if requested - if tcConfig.printAst then - for (input, _filename) in inputs do + if tcConfig.printAst then + for (input, _filename) in inputs do printf "AST:\n" printfn "%+A" input printf "\n" - if tcConfig.parseOnly then exiter.Exit 0 + if tcConfig.parseOnly then exiter.Exit 0 - if not tcConfig.continueAfterParseFailure then + if not tcConfig.continueAfterParseFailure then AbortOnError(errorLogger, exiter) // Apply any nowarn flags @@ -562,16 +561,16 @@ let main1(ctok, argv, legacyReferenceResolver, bannerAlreadyPrinted, ReportTime tcConfig "Import non-system references" let tcImports = - TcImports.BuildNonFrameworkTcImports(tcConfigP, frameworkTcImports, otherRes, knownUnresolved, dependencyProvider) - |> NodeCode.RunImmediateWithoutCancellation + TcImports.BuildNonFrameworkTcImports(ctok, tcConfigP, tcGlobals, frameworkTcImports, otherRes, knownUnresolved, dependencyProvider) + |> Cancellable.runWithoutCancellation // register tcImports to be disposed in future disposables.Register tcImports - if not tcConfig.continueAfterParseFailure then + if not tcConfig.continueAfterParseFailure then AbortOnError(errorLogger, exiter) - if tcConfig.importAllReferencesOnly then exiter.Exit 0 + if tcConfig.importAllReferencesOnly then exiter.Exit 0 // Build the initial type checking environment ReportTime tcConfig "Typecheck" @@ -583,7 +582,7 @@ let main1(ctok, argv, legacyReferenceResolver, bannerAlreadyPrinted, // Type check the inputs let inputs = inputs |> List.map fst - let tcState, topAttrs, typedAssembly, _tcEnvAtEnd = + let tcState, topAttrs, typedAssembly, _tcEnvAtEnd = TypeCheck(ctok, tcConfig, tcImports, tcGlobals, errorLogger, assemblyName, NiceNameGenerator(), tcEnv0, inputs, exiter) AbortOnError(errorLogger, exiter) @@ -604,31 +603,25 @@ let main1OfAst let tryGetMetadataSnapshot = (fun _ -> None) - let directoryBuildingFrom = Directory.GetCurrentDirectory() - let defaultFSharpBinariesDir = FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(FSharpEnvironment.tryCurrentDomain()).Value - let tcConfigB = - TcConfigBuilder.CreateNew(legacyReferenceResolver, defaultFSharpBinariesDir, - reduceMemoryUsage=reduceMemoryUsage, implicitIncludeDir=directoryBuildingFrom, - isInteractive=false, isInvalidationSupported=false, - defaultCopyFSharpCore=CopyFSharpCoreFlag.No, - tryGetMetadataSnapshot=tryGetMetadataSnapshot, - sdkDirOverride=None, - rangeForErrors=range0) + let tcConfigB = + TcConfigBuilder.CreateNew(legacyReferenceResolver, defaultFSharpBinariesDir, + reduceMemoryUsage=reduceMemoryUsage, implicitIncludeDir=Directory.GetCurrentDirectory(), + isInteractive=false, isInvalidationSupported=false, + defaultCopyFSharpCore=CopyFSharpCoreFlag.No, + tryGetMetadataSnapshot=tryGetMetadataSnapshot) let primaryAssembly = // temporary workaround until https://github.com/dotnet/fsharp/pull/8043 is merged: - // pick a primary assembly based on whether the developer included System>Runtime in the list of reference assemblies. + // pick a primary assembly based on the current runtime. // It's an ugly compromise used to avoid exposing primaryAssembly in the public api for this function. - let includesSystem_Runtime = dllReferences |> Seq.exists(fun f -> Path.GetFileName(f).Equals("system.runtime.dll",StringComparison.InvariantCultureIgnoreCase)) - if includesSystem_Runtime then - PrimaryAssembly.System_Runtime - else - PrimaryAssembly.Mscorlib + let isNetCoreAppProcess = System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription.StartsWith ".NET Core" + if isNetCoreAppProcess then PrimaryAssembly.System_Runtime + else PrimaryAssembly.Mscorlib tcConfigB.target <- target - tcConfigB.SetPrimaryAssembly primaryAssembly + tcConfigB.primaryAssembly <- primaryAssembly if noframework then tcConfigB.framework <- false tcConfigB.implicitlyResolveAssemblies <- false @@ -643,15 +636,15 @@ let main1OfAst // Now install a delayed logger to hold all errors from flags until after all flags have been parsed (for example, --vserrors) let delayForFlagsLogger = errorLoggerProvider.CreateDelayAndForwardLogger exiter - let _unwindEL_1 = PushErrorLoggerPhaseUntilUnwind (fun _ -> delayForFlagsLogger) + let _unwindEL_1 = PushErrorLoggerPhaseUntilUnwind (fun _ -> delayForFlagsLogger) tcConfigB.conditionalCompilationDefines <- "COMPILED" :: tcConfigB.conditionalCompilationDefines // append assembly dependencies dllReferences |> List.iter (fun ref -> tcConfigB.AddReferencedAssemblyByPath(rangeStartup,ref)) - // If there's a problem building TcConfig, abort - let tcConfig = + // If there's a problem building TcConfig, abort + let tcConfig = try TcConfig.Create(tcConfigB,validate=false) with e -> @@ -666,21 +659,19 @@ let main1OfAst // Forward all errors from flags delayForFlagsLogger.CommitDelayedDiagnostics errorLogger - + // Resolve assemblies ReportTime tcConfig "Import mscorlib and FSharp.Core.dll" let foundationalTcConfigP = TcConfigProvider.Constant tcConfig - let sysRes, otherRes, knownUnresolved = TcAssemblyResolutions.SplitNonFoundationalResolutions(tcConfig) + let sysRes, otherRes, knownUnresolved = TcAssemblyResolutions.SplitNonFoundationalResolutions(ctok, tcConfig) // Import basic assemblies - let tcGlobals, frameworkTcImports = - TcImports.BuildFrameworkTcImports (foundationalTcConfigP, sysRes, otherRes) - |> NodeCode.RunImmediateWithoutCancellation + let tcGlobals, frameworkTcImports = TcImports.BuildFrameworkTcImports (ctok, foundationalTcConfigP, sysRes, otherRes) |> Cancellable.runWithoutCancellation // Register framework tcImports to be disposed in future disposables.Register frameworkTcImports - use unwindParsePhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parse) + use unwindParsePhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parse) let meta = Directory.GetCurrentDirectory() let tcConfig = (tcConfig,inputs) ||> List.fold (fun tcc inp -> ApplyMetaCommandsFromInputToTcConfig (tcc, inp, meta, dependencyProvider)) @@ -688,21 +679,18 @@ let main1OfAst // Import other assemblies ReportTime tcConfig "Import non-system references" - - let tcImports = - TcImports.BuildNonFrameworkTcImports(tcConfigP, frameworkTcImports, otherRes, knownUnresolved, dependencyProvider) - |> NodeCode.RunImmediateWithoutCancellation + let tcImports = TcImports.BuildNonFrameworkTcImports(ctok, tcConfigP, tcGlobals, frameworkTcImports, otherRes, knownUnresolved, dependencyProvider) |> Cancellable.runWithoutCancellation // register tcImports to be disposed in future disposables.Register tcImports // Build the initial type checking environment ReportTime tcConfig "Typecheck" - use unwindParsePhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.TypeCheck) + use unwindParsePhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.TypeCheck) let tcEnv0 = GetInitialTcEnv (assemblyName, rangeStartup, tcConfig, tcImports, tcGlobals) // Type check the inputs - let tcState, topAttrs, typedAssembly, _tcEnvAtEnd = + let tcState, topAttrs, typedAssembly, _tcEnvAtEnd = TypeCheck(ctok, tcConfig, tcImports, tcGlobals, errorLogger, assemblyName, NiceNameGenerator(), tcEnv0, inputs, exiter) AbortOnError(errorLogger, exiter) @@ -715,28 +703,28 @@ let main1OfAst let main2(Args (ctok, tcGlobals, tcImports: TcImports, frameworkTcImports, generatedCcu: CcuThunk, typedImplFiles, topAttrs, tcConfig: TcConfig, outfile, pdbfile, assemblyName, errorLogger, exiter: Exiter)) = if tcConfig.typeCheckOnly then exiter.Exit 0 - + generatedCcu.Contents.SetAttribs(generatedCcu.Contents.Attribs @ topAttrs.assemblyAttrs) use unwindPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.CodeGen let signingInfo = ValidateKeySigningAttributes (tcConfig, tcGlobals, topAttrs) - + AbortOnError(errorLogger, exiter) // Build an updated errorLogger that filters according to the scopedPragmas. Then install // it as the updated global error logger and never remove it let oldLogger = errorLogger - let errorLogger = + let errorLogger = let scopedPragmas = [ for (TImplFile (_, pragmas, _, _, _, _)) in typedImplFiles do yield! pragmas ] GetErrorLoggerFilteringByScopedPragmas(true, scopedPragmas, oldLogger) let _unwindEL_3 = PushErrorLoggerPhaseUntilUnwind(fun _ -> errorLogger) - // Try to find an AssemblyVersion attribute - let assemVerFromAttrib = + // Try to find an AssemblyVersion attribute + let assemVerFromAttrib = match TryFindVersionAttribute tcGlobals "System.Reflection.AssemblyVersionAttribute" "AssemblyVersionAttribute" topAttrs.assemblyAttrs tcConfig.deterministic with - | Some v -> - match tcConfig.version with + | Some v -> + match tcConfig.version with | VersionNone -> Some v | _ -> warning(Error(FSComp.SR.fscAssemblyVersionAttributeIgnored(), Range.rangeStartup)); None | _ -> None @@ -744,14 +732,14 @@ let main2(Args (ctok, tcGlobals, tcImports: TcImports, frameworkTcImports, gener // write interface, xmldoc ReportTime tcConfig ("Write Interface File") use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Output - if tcConfig.printSignature || tcConfig.printAllSignatureFiles then InterfaceFileWriter.WriteInterfaceFile (tcGlobals, tcConfig, InfoReader(tcGlobals, tcImports.GetImportMap()), typedImplFiles) + 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) + if tcConfig.xmlDocOutputFile.IsSome then + XmlDocWriter.ComputeXmlDocSigs (tcGlobals, generatedCcu) ReportTime tcConfig ("Write XML docs") - tcConfig.xmlDocOutputFile |> Option.iter (fun xmlFile -> + tcConfig.xmlDocOutputFile |> Option.iter (fun xmlFile -> let xmlFile = tcConfig.MakePathAbsolute xmlFile XmlDocWriter.WriteXmlDocFile (assemblyName, generatedCcu, xmlFile)) @@ -763,70 +751,70 @@ let main2(Args (ctok, tcGlobals, tcImports: TcImports, frameworkTcImports, gener /// - encode signature data /// - optimize /// - encode optimization data -let main3(Args (ctok, tcConfig, tcImports, frameworkTcImports: TcImports, tcGlobals, - errorLogger: ErrorLogger, generatedCcu: CcuThunk, outfile, typedImplFiles, - topAttrs, pdbfile, assemblyName, assemVerFromAttrib, signingInfo, exiter: Exiter)) = - +let main3(Args (ctok, tcConfig, tcImports, frameworkTcImports: TcImports, tcGlobals, + errorLogger: ErrorLogger, generatedCcu: CcuThunk, outfile, typedImplFiles, + topAttrs, pdbfile, assemblyName, assemVerFromAttrib, signingInfo, exiter: Exiter)) = + // Encode the signature data ReportTime tcConfig ("Encode Interface Data") let exportRemapping = MakeExportRemapping generatedCcu generatedCcu.Contents - - let sigDataAttributes, sigDataResources = + + let sigDataAttributes, sigDataResources = try EncodeSignatureData(tcConfig, tcGlobals, exportRemapping, generatedCcu, outfile, false) - with e -> + with e -> errorRecoveryNoRange e exiter.Exit 1 - + // Perform optimization use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Optimize - + let optEnv0 = GetInitialOptimizationEnv (tcImports, tcGlobals) let importMap = tcImports.GetImportMap() - let metadataVersion = + let metadataVersion = match tcConfig.metadataVersion with | Some v -> v - | _ -> - match frameworkTcImports.DllTable.TryFind tcConfig.primaryAssembly.Name with - | Some ib -> ib.RawMetadata.TryGetILModuleDef().Value.MetadataVersion + | _ -> + match frameworkTcImports.DllTable.TryFind tcConfig.primaryAssembly.Name with + | Some ib -> ib.RawMetadata.TryGetILModuleDef().Value.MetadataVersion | _ -> "" - let optimizedImpls, optimizationData, _ = - ApplyAllOptimizations - (tcConfig, tcGlobals, (LightweightTcValForUsingInBuildMethodCall tcGlobals), outfile, + let optimizedImpls, optimizationData, _ = + ApplyAllOptimizations + (tcConfig, tcGlobals, (LightweightTcValForUsingInBuildMethodCall tcGlobals), outfile, importMap, false, optEnv0, generatedCcu, typedImplFiles) AbortOnError(errorLogger, exiter) - + // Encode the optimization data ReportTime tcConfig ("Encoding OptData") let optDataResources = EncodeOptimizationData(tcGlobals, tcConfig, outfile, exportRemapping, (generatedCcu, optimizationData), false) // Pass on only the minimum information required for the next phase - Args (ctok, tcConfig, tcImports, tcGlobals, errorLogger, - generatedCcu, outfile, optimizedImpls, topAttrs, pdbfile, assemblyName, + Args (ctok, tcConfig, tcImports, tcGlobals, errorLogger, + generatedCcu, outfile, optimizedImpls, topAttrs, pdbfile, assemblyName, sigDataAttributes, sigDataResources, optDataResources, assemVerFromAttrib, signingInfo, metadataVersion, exiter) /// Fourth phase of compilation. /// - Static linking /// - IL code generation -let main4 - (tcImportsCapture,dynamicAssemblyCreator) - (Args (ctok, tcConfig: TcConfig, tcImports, tcGlobals: TcGlobals, errorLogger, - generatedCcu: CcuThunk, outfile, optimizedImpls, topAttrs, pdbfile, assemblyName, - sigDataAttributes, sigDataResources, optDataResources, assemVerFromAttrib, signingInfo, metadataVersion, exiter: Exiter)) = +let main4 + (tcImportsCapture,dynamicAssemblyCreator) + (Args (ctok, tcConfig: TcConfig, tcImports, tcGlobals: TcGlobals, errorLogger, + generatedCcu: CcuThunk, outfile, optimizedImpls, topAttrs, pdbfile, assemblyName, + sigDataAttributes, sigDataResources, optDataResources, assemVerFromAttrib, signingInfo, metadataVersion, exiter: Exiter)) = - match tcImportsCapture with + match tcImportsCapture with | None -> () | Some f -> f tcImports // Compute a static linker, it gets called later. let ilGlobals = tcGlobals.ilg - if tcConfig.standalone && generatedCcu.UsesFSharp20PlusQuotations then - error(Error(FSComp.SR.fscQuotationLiteralsStaticLinking0(), rangeStartup)) + if tcConfig.standalone && generatedCcu.UsesFSharp20PlusQuotations then + error(Error(FSComp.SR.fscQuotationLiteralsStaticLinking0(), rangeStartup)) let staticLinker = StaticLink (ctok, tcConfig, tcImports, ilGlobals) @@ -846,11 +834,11 @@ let main4 let topAssemblyAttrs = codegenResults.topAssemblyAttrs let topAttrs = {topAttrs with assemblyAttrs=topAssemblyAttrs} let permissionSets = codegenResults.permissionSets - let secDecls = mkILSecurityDecls permissionSets + let secDecls = mkILSecurityDecls permissionSets - let ilxMainModule = + let ilxMainModule = MainModuleBuilder.CreateMainModule - (ctok, tcConfig, tcGlobals, tcImports, + (ctok, tcConfig, tcGlobals, tcImports, pdbfile, assemblyName, outfile, topAttrs, sigDataAttributes, sigDataResources, optDataResources, codegenResults, assemVerFromAttrib, metadataVersion, secDecls) @@ -862,27 +850,27 @@ let main4 /// Fifth phase of compilation. /// - static linking -let main5(Args (ctok, tcConfig, tcImports, tcGlobals, errorLogger: ErrorLogger, staticLinker, outfile, pdbfile, ilxMainModule, signingInfo, exiter: Exiter)) = - +let main5(Args (ctok, tcConfig, tcImports, tcGlobals, errorLogger: ErrorLogger, staticLinker, outfile, pdbfile, ilxMainModule, signingInfo, exiter: Exiter)) = + use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Output // Static linking, if any - let ilxMainModule = + let ilxMainModule = try staticLinker ilxMainModule - with e -> + with e -> errorRecoveryNoRange e exiter.Exit 1 AbortOnError(errorLogger, exiter) - + // Pass on only the minimum information required for the next phase Args (ctok, tcConfig, tcImports, tcGlobals, errorLogger, ilxMainModule, outfile, pdbfile, signingInfo, exiter) /// Sixth phase of compilation. /// - write the binaries -let main6 dynamicAssemblyCreator (Args (ctok, tcConfig, tcImports: TcImports, tcGlobals: TcGlobals, - errorLogger: ErrorLogger, ilxMainModule, outfile, pdbfile, - signingInfo, exiter: Exiter)) = +let main6 dynamicAssemblyCreator (Args (ctok, tcConfig, tcImports: TcImports, tcGlobals: TcGlobals, + errorLogger: ErrorLogger, ilxMainModule, outfile, pdbfile, + signingInfo, exiter: Exiter)) = ReportTime tcConfig "Write .NET Binary" @@ -893,20 +881,20 @@ let main6 dynamicAssemblyCreator (Args (ctok, tcConfig, tcImports: TcImports, t let pdbfile = pdbfile |> Option.map (tcConfig.MakePathAbsolute >> FileSystem.GetFullPathShim) - let normalizeAssemblyRefs (aref: ILAssemblyRef) = - match tcImports.TryFindDllInfo (ctok, Range.rangeStartup, aref.Name, lookupOnly=false) with + let normalizeAssemblyRefs (aref: ILAssemblyRef) = + match tcImports.TryFindDllInfo (ctok, Range.rangeStartup, aref.Name, lookupOnly=false) with | Some dllInfo -> - match dllInfo.ILScopeRef with + match dllInfo.ILScopeRef with | ILScopeRef.Assembly ref -> ref | _ -> aref | None -> aref - match dynamicAssemblyCreator with - | None -> + match dynamicAssemblyCreator with + | None -> try - try - ILBinaryWriter.WriteILBinary - (outfile, + try + ILBinaryWriter.WriteILBinary + (outfile, { ilg = tcGlobals.ilg pdbfile=pdbfile emitTailcalls = tcConfig.emitTailcalls @@ -924,11 +912,11 @@ let main6 dynamicAssemblyCreator (Args (ctok, tcConfig, tcImports: TcImports, t ilxMainModule, normalizeAssemblyRefs ) - with Failure msg -> + with Failure msg -> error(Error(FSComp.SR.fscProblemWritingBinary(outfile, msg), rangeCmdArgs)) - with e -> + with e -> errorRecoveryNoRange e - exiter.Exit 1 + exiter.Exit 1 | Some da -> da (tcConfig, tcGlobals, outfile, ilxMainModule) AbortOnError(errorLogger, exiter) @@ -940,16 +928,16 @@ let main6 dynamicAssemblyCreator (Args (ctok, tcConfig, tcImports: TcImports, t ReportTime tcConfig "Exiting" /// The main (non-incremental) compilation entry point used by fsc.exe -let mainCompile - (ctok, argv, legacyReferenceResolver, bannerAlreadyPrinted, reduceMemoryUsage, +let mainCompile + (ctok, argv, legacyReferenceResolver, bannerAlreadyPrinted, reduceMemoryUsage, defaultCopyFSharpCore, exiter: Exiter, loggerProvider, tcImportsCapture, dynamicAssemblyCreator) = use disposables = new DisposablesTracker() let savedOut = System.Console.Out use __ = { new IDisposable with - member _.Dispose() = - try + member __.Dispose() = + try System.Console.SetOut(savedOut) with _ -> ()} @@ -957,19 +945,20 @@ let mainCompile |> main2 |> main3 |> main4 (tcImportsCapture,dynamicAssemblyCreator) - |> main5 + |> main5 |> main6 dynamicAssemblyCreator /// An additional compilation entry point used by FSharp.Compiler.Service taking syntax trees as input -let compileOfAst - (ctok, legacyReferenceResolver, reduceMemoryUsage, assemblyName, target, - targetDll, targetPdb, dependencies, noframework, exiter, loggerProvider, inputs, tcImportsCapture, dynamicAssemblyCreator) = +let compileOfAst + (ctok, legacyReferenceResolver, reduceMemoryUsage, assemblyName, target, + targetDll, targetPdb, dependencies, noframework, exiter, loggerProvider, inputs, tcImportsCapture, dynamicAssemblyCreator) = use disposables = new DisposablesTracker() - main1OfAst (ctok, legacyReferenceResolver, reduceMemoryUsage, assemblyName, target, targetDll, targetPdb, + main1OfAst (ctok, legacyReferenceResolver, reduceMemoryUsage, assemblyName, target, targetDll, targetPdb, dependencies, noframework, exiter, loggerProvider, disposables, inputs) |> main2 |> main3 |> main4 (tcImportsCapture, dynamicAssemblyCreator) |> main5 |> main6 dynamicAssemblyCreator + diff --git a/src/fsharp/fsc.fsi b/src/fsharp/fsc.fsi index 1af3290a3ec..83ee32cee4c 100755 --- a/src/fsharp/fsc.fsi +++ b/src/fsharp/fsc.fsi @@ -2,15 +2,17 @@ module internal FSharp.Compiler.Driver -open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILBinaryReader +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Internal.StrongNameSign +open FSharp.Compiler.CheckExpressions +open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerDiagnostics open FSharp.Compiler.CompilerImports open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps @@ -25,11 +27,21 @@ type ConsoleLoggerProvider = new : unit -> ConsoleLoggerProvider inherit ErrorLoggerProvider +/// Encode the F# interface data into a set of IL attributes and resources +val EncodeSignatureData: + tcConfig:TcConfig * + tcGlobals:TcGlobals * + exportRemapping:Remap * + generatedCcu: CcuThunk * + outfile: string * + isIncrementalBuild: bool + -> ILAttribute list * ILResource list + /// The main (non-incremental) compilation entry point used by fsc.exe val mainCompile: ctok: CompilationThreadToken * argv: string[] * - legacyReferenceResolver: LegacyReferenceResolver * + legacyReferenceResolver: ReferenceResolver.Resolver * bannerAlreadyPrinted: bool * reduceMemoryUsage: ReduceMemoryFlag * defaultCopyFSharpCore: CopyFSharpCoreFlag * @@ -42,7 +54,7 @@ val mainCompile: /// An additional compilation entry point used by FSharp.Compiler.Service taking syntax trees as input val compileOfAst: ctok: CompilationThreadToken * - legacyReferenceResolver: LegacyReferenceResolver * + legacyReferenceResolver: ReferenceResolver.Resolver * reduceMemoryUsage: ReduceMemoryFlag * assemblyName:string * target:CompilerTarget * diff --git a/src/fsharp/fsc/fsc.fsproj b/src/fsharp/fsc/fsc.fsproj index 211415f64e1..c3a5e28dfa9 100644 --- a/src/fsharp/fsc/fsc.fsproj +++ b/src/fsharp/fsc/fsc.fsproj @@ -5,13 +5,14 @@ Exe $(ProtoTargetFramework) - net472;net5.0 - net5.0 - $(NoWarn);44;45;55;62;75;1204 + net472;netcoreapp3.1 + netcoreapp3.1 + .exe + $(NoWarn);45;55;62;75;1204 true $(OtherFlags) --maxerrors:20 --extraoptimizationloops:1 true - true + false @@ -34,7 +35,7 @@ - + diff --git a/src/fsharp/fscmain.fs b/src/fsharp/fscmain.fs index 5bce29fd229..db4d72d9d85 100644 --- a/src/fsharp/fscmain.fs +++ b/src/fsharp/fscmain.fs @@ -6,17 +6,15 @@ open System open System.Reflection open System.Runtime.CompilerServices -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras +open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.ILBinaryReader -open FSharp.Compiler.CompilerConfig -open FSharp.Compiler.Driver open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Text +open FSharp.Compiler.Driver +open FSharp.Compiler.CompilerConfig +open FSharp.Compiler.AbstractIL.Internal.Library -[] +[] do () [] @@ -29,7 +27,7 @@ let main(argv) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter // An SDL recommendation - UnmanagedProcessExecutionOptions.EnableHeapTerminationOnCorruption() + Lib.UnmanagedProcessExecutionOptions.EnableHeapTerminationOnCorruption() try @@ -90,5 +88,5 @@ let main(argv) = with e -> // Last-chance error recovery (note, with a poor error range) - errorRecovery e Range.range0 + errorRecovery e FSharp.Compiler.Range.range0 1 diff --git a/src/fsharp/fsi/FSIstrings.txt b/src/fsharp/fsi/FSIstrings.txt index dbd7642476b..2aa642cba70 100644 --- a/src/fsharp/fsi/FSIstrings.txt +++ b/src/fsharp/fsi/FSIstrings.txt @@ -53,4 +53,4 @@ fsiProductName,"Microsoft (R) F# Interactive version %s" fsiProductNameCommunity,"F# Interactive for F# %s" shadowCopyReferences,"Prevents references from being locked by the F# Interactive process" fsiOperationCouldNotBeCompleted,"Operation could not be completed due to earlier error" -fsiOperationFailed,"Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing" +fsiOperationFailed,"Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing" diff --git a/src/fsharp/fsi/console.fs b/src/fsharp/fsi/console.fs index 2c36a667f82..13276b9ced8 100644 --- a/src/fsharp/fsi/console.fs +++ b/src/fsharp/fsi/console.fs @@ -83,6 +83,41 @@ module internal Utils = with e -> FSharp.Compiler.ErrorLogger.warning(Failure(sprintf "Note: an unexpected exception in fsi.exe readline console support. Consider starting fsi.exe with the --no-readline option and report the stack trace below to the .NET or Mono implementors\n%s\n%s\n" e.Message e.StackTrace)) + // Quick and dirty dirty method lookup for inlined IL + // In some situations, we can't use ldtoken to obtain a RuntimeMethodHandle, since the method + // in question's token may contain typars from an external type environment. Such a token would + // cause the PE file to be flagged as invalid. + // In such a situation, we'll want to search out the MethodRef in a similar fashion to bindMethodBySearch + // but since we can't use ldtoken to obtain System.Type objects, we'll need to do everything with strings. + // This is the least fool-proof method for resolving the binding, but since the scenarios it's used in are + // so constrained, (fsi 2.0, methods with generic multi-dimensional arrays in their signatures), it's + // acceptable + let findMethod (parentT:Type,nm,marity,argtys : string [],rty : string) = + let staticOrInstanceBindingFlags = BindingFlags.Instance ||| BindingFlags.Static ||| BindingFlags.Public ||| BindingFlags.NonPublic ||| BindingFlags.DeclaredOnly + let methInfos = parentT.GetMethods(staticOrInstanceBindingFlags) |> Array.toList + + let methInfos = methInfos |> List.filter (fun methInfo -> methInfo.Name = nm) + match methInfos with + | [methInfo] -> + methInfo + | _ -> + let select (methInfo:MethodInfo) = + let mtyargTIs = if methInfo.IsGenericMethod then methInfo.GetGenericArguments() else [| |] + if mtyargTIs.Length <> marity then false else + + let haveArgTs = + let parameters = Array.toList (methInfo.GetParameters()) + parameters |> List.map (fun param -> param.ParameterType) + let haveResT = methInfo.ReturnType + + if argtys.Length <> haveArgTs.Length then false else + let res = rty :: (Array.toList argtys) = (List.map (fun (t : System.Type) -> t.Name) (haveResT :: haveArgTs)) + res + + match List.tryFind select methInfos with + | None -> failwith "Internal Error: cannot bind to method" + | Some methInfo -> methInfo + let rec previousWordFromIdx (line: string) (idx, isInWord) = if idx < 0 then 0 else match line.Chars(idx), isInWord with @@ -103,7 +138,6 @@ type internal Cursor = Utils.guard(fun () -> Console.CursorTop <- min top (Console.BufferHeight - 1) Console.CursorLeft <- left) - static member Move(inset, delta) = let position = Console.CursorTop * (Console.BufferWidth - inset) + (Console.CursorLeft - inset) + delta let top = position / (Console.BufferWidth - inset) @@ -120,6 +154,8 @@ type internal Anchor = let top = p.top + ( (p.left - inset) + index) / (Console.BufferWidth - inset) Cursor.ResetTo(top,left) + + type internal ReadLineConsole() = let history = new History() let mutable complete : (string option * string -> seq) = fun (_s1,_s2) -> Seq.empty diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index a85d82d90fb..8f20fe41eee 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -2,15 +2,13 @@ module FSharp.Compiler.Interactive.Shell -// Prevents warnings of experimental APIs - we are using FSharpLexer -#nowarn "57" - #nowarn "55" [] -[] +[] do() + open System open System.Collections.Generic open System.Diagnostics @@ -21,59 +19,60 @@ open System.Threading open System.Reflection open System.Runtime.CompilerServices open System.Runtime.InteropServices -open Internal.Utilities -open Internal.Utilities.Collections -open Internal.Utilities.FSharpEnvironment -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras + open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILBinaryReader +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Internal.Utils open FSharp.Compiler.AbstractIL.ILRuntimeWriter open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CheckExpressions -open FSharp.Compiler.CodeAnalysis open FSharp.Compiler.CompilerOptions open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerDiagnostics open FSharp.Compiler.CompilerImports open FSharp.Compiler.CompilerGlobalState -open FSharp.Compiler.DependencyManager -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.EditorServices +open FSharp.Compiler.DotNetFrameworkDependencies open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features open FSharp.Compiler.IlxGen open FSharp.Compiler.InfoReader -open FSharp.Compiler.IO -open FSharp.Compiler.Lexhelp open FSharp.Compiler.NameResolution +open FSharp.Compiler.Layout +open FSharp.Compiler.Lexhelp +open FSharp.Compiler.Lib open FSharp.Compiler.ParseAndCheckInputs +open FSharp.Compiler.PrettyNaming open FSharp.Compiler.OptimizeInputs +open FSharp.Compiler.Range +open FSharp.Compiler.ReferenceResolver open FSharp.Compiler.ScriptClosure -open FSharp.Compiler.Symbols -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Layout -open FSharp.Compiler.Xml -open FSharp.Compiler.Tokenization open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.BuildGraph +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.XmlDoc + +open Internal.Utilities +open Internal.Utilities.StructuredFormat + +open Microsoft.DotNet.DependencyManager + +// Prevents warnings of experimental APIs - we are using FSharpLexer +#nowarn "57" //---------------------------------------------------------------------------- // For the FSI as a service methods... //---------------------------------------------------------------------------- -type FsiValue(reflectionValue:obj, reflectionType:Type, fsharpType:FSharpType) = +type FsiValue(reflectionValue:obj, reflectionType:Type, fsharpType:FSharpType) = member x.ReflectionValue = reflectionValue member x.ReflectionType = reflectionType member x.FSharpType = fsharpType @@ -84,17 +83,17 @@ type FsiBoundValue(name: string, value: FsiValue) = member _.Value = value [] -module internal Utilities = - type IAnyToLayoutCall = - abstract AnyToLayout : FormatOptions * obj * Type -> Layout - abstract FsiAnyToLayout : FormatOptions * obj * Type -> Layout +module internal Utilities = + type IAnyToLayoutCall = + abstract AnyToLayout : FormatOptions * obj * Type -> Internal.Utilities.StructuredFormat.Layout + abstract FsiAnyToLayout : FormatOptions * obj * Type -> Internal.Utilities.StructuredFormat.Layout - type private AnyToLayoutSpecialization<'T>() = + type private AnyToLayoutSpecialization<'T>() = interface IAnyToLayoutCall with - member _.AnyToLayout(options, o : obj, ty : Type) = Display.any_to_layout options ((Unchecked.unbox o : 'T), ty) - member _.FsiAnyToLayout(options, o : obj, ty : Type) = Display.fsi_any_to_layout options ((Unchecked.unbox o : 'T), ty) - - let getAnyToLayoutCall ty = + member this.AnyToLayout(options, o : obj, ty : Type) = Internal.Utilities.StructuredFormat.Display.any_to_layout options ((Unchecked.unbox o : 'T), ty) + member this.FsiAnyToLayout(options, o : obj, ty : Type) = Internal.Utilities.StructuredFormat.Display.fsi_any_to_layout options ((Unchecked.unbox o : 'T), ty) + + let getAnyToLayoutCall ty = let specialized = typedefof>.MakeGenericType [| ty |] Activator.CreateInstance(specialized) :?> IAnyToLayoutCall @@ -150,20 +149,20 @@ module internal Utilities = member r.AddText z s = let color = match s.Tag with - | TextTag.Keyword -> ConsoleColor.White - | TextTag.TypeParameter - | TextTag.Alias - | TextTag.Class - | TextTag.Module - | TextTag.Interface - | TextTag.Record - | TextTag.Struct - | TextTag.Union - | TextTag.UnknownType -> ConsoleColor.Cyan - | TextTag.UnionCase - | TextTag.ActivePatternCase -> ConsoleColor.Magenta - | TextTag.StringLiteral -> ConsoleColor.Yellow - | TextTag.NumericLiteral -> ConsoleColor.Green + | LayoutTag.Keyword -> ConsoleColor.White + | LayoutTag.TypeParameter + | LayoutTag.Alias + | LayoutTag.Class + | LayoutTag.Module + | LayoutTag.Interface + | LayoutTag.Record + | LayoutTag.Struct + | LayoutTag.Union + | LayoutTag.UnknownType -> ConsoleColor.Cyan + | LayoutTag.UnionCase + | LayoutTag.ActivePatternCase -> ConsoleColor.Magenta + | LayoutTag.StringLiteral -> ConsoleColor.Yellow + | LayoutTag.NumericLiteral -> ConsoleColor.Green | _ -> Console.ForegroundColor DoWithColor color (fun () -> outWriter.Write s.Text) @@ -183,8 +182,8 @@ module internal Utilities = } layout - |> Display.squash_layout opts - |> LayoutRender.renderL renderer + |> Internal.Utilities.StructuredFormat.Display.squash_layout opts + |> Layout.renderL renderer |> ignore outWriter.WriteLine() @@ -217,15 +216,15 @@ type internal FsiTimeReporter(outWriter: TextWriter) = stopwatch.Stop() let total = ptime.TotalProcessorTime - startTotal let spanGC = [ for i in 0 .. numGC-> System.GC.CollectionCount(i) - startGC.[i] ] - let elapsed = stopwatch.Elapsed + let elapsed = stopwatch.Elapsed fprintfn outWriter "%s" (FSIstrings.SR.fsiTimeInfoMainString((sprintf "%02d:%02d:%02d.%03d" (int elapsed.TotalHours) elapsed.Minutes elapsed.Seconds elapsed.Milliseconds),(sprintf "%02d:%02d:%02d.%03d" (int total.TotalHours) total.Minutes total.Seconds total.Milliseconds),(String.concat ", " (List.mapi (sprintf "%s%d: %d" (FSIstrings.SR.fsiTimeInfoGCGenerationLabelSomeShorthandForTheWordGeneration())) spanGC)))) res member tr.TimeOpIf flag f = if flag then tr.TimeOp f else f () -type internal FsiValuePrinterMode = - | PrintExpr +type internal FsiValuePrinterMode = + | PrintExpr | PrintDecl type EvaluationEventArgs(fsivalue : FsiValue option, symbolUse : FSharpSymbolUse, decl: FSharpImplementationFileDeclaration) = @@ -239,46 +238,46 @@ type EvaluationEventArgs(fsivalue : FsiValue option, symbolUse : FSharpSymbolUse [] /// User-configurable information that changes how F# Interactive operates, stored in the 'fsi' object /// and accessible via the programming model -type FsiEvaluationSessionHostConfig () = - let evaluationEvent = new Event () +type FsiEvaluationSessionHostConfig () = + let evaluationEvent = new Event () /// Called by the evaluation session to ask the host for parameters to format text for output - abstract FormatProvider: System.IFormatProvider + abstract FormatProvider: System.IFormatProvider /// Called by the evaluation session to ask the host for parameters to format text for output - abstract FloatingPointFormat: string + abstract FloatingPointFormat: string /// Called by the evaluation session to ask the host for parameters to format text for output abstract AddedPrinters : Choice<(System.Type * (obj -> string)), (System.Type * (obj -> obj))> list /// Called by the evaluation session to ask the host for parameters to format text for output - abstract ShowDeclarationValues: bool + abstract ShowDeclarationValues: bool /// Called by the evaluation session to ask the host for parameters to format text for output - abstract ShowIEnumerable: bool + abstract ShowIEnumerable: bool /// Called by the evaluation session to ask the host for parameters to format text for output - abstract ShowProperties : bool + abstract ShowProperties : bool /// Called by the evaluation session to ask the host for parameters to format text for output - abstract PrintSize : int + abstract PrintSize : int /// Called by the evaluation session to ask the host for parameters to format text for output - abstract PrintDepth : int + abstract PrintDepth : int /// Called by the evaluation session to ask the host for parameters to format text for output abstract PrintWidth : int /// Called by the evaluation session to ask the host for parameters to format text for output abstract PrintLength : int - /// The evaluation session calls this to report the preferred view of the command line arguments after + /// The evaluation session calls this to report the preferred view of the command line arguments after /// stripping things like "/use:file.fsx", "-r:Foo.dll" etc. abstract ReportUserCommandLineArgs : string [] -> unit - /// The evaluation session calls this to ask the host for the special console reader. + /// The evaluation session calls this to ask the host for the special console reader. /// Returning 'Some' indicates a console is to be used, so some special rules apply. /// - /// A "console" gets used if - /// --readline- is specified (the default on Windows + .NET); and - /// not --fsi-server (which should always be combined with --readline-); and + /// A "console" gets used if + /// --readline- is specified (the default on Windows + .NET); and + /// not --fsi-server (which should always be combined with --readline-); and /// GetOptionalConsoleReadLine() returns a Some /// /// "Peekahead" occurs if --peekahead- is not specified (i.e. it is the default): - /// - If a console is being used then - /// - a prompt is printed early - /// - a background thread is created + /// - If a console is being used then + /// - a prompt is printed early + /// - a background thread is created /// - the GetOptionalConsoleReadLine() callback is used to read the first line /// - Otherwise call inReader.Peek() /// @@ -286,11 +285,11 @@ type FsiEvaluationSessionHostConfig () = /// - If a console is being used then use GetOptionalConsoleReadLine() /// - Otherwise use inReader.ReadLine() - abstract GetOptionalConsoleReadLine : probeToSeeIfConsoleWorks: bool -> (unit -> string) option + abstract GetOptionalConsoleReadLine : probeToSeeIfConsoleWorks: bool -> (unit -> string) option /// The evaluation session calls this at an appropriate point in the startup phase if the --fsi-server parameter was given abstract StartServer : fsiServerName:string -> unit - + /// Called by the evaluation session to ask the host to enter a dispatch loop like Application.Run(). /// Only called if --gui option is used (which is the default). /// Gets called towards the end of startup and every time a ThreadAbort escaped to the backup driver loop. @@ -313,86 +312,86 @@ type FsiEvaluationSessionHostConfig () = /// Used to print value signatures along with their values, according to the current /// set of pretty printers installed in the system, and default printing rules. -type internal FsiValuePrinter(fsi: FsiEvaluationSessionHostConfig, tcConfigB: TcConfigBuilder, g: TcGlobals, generateDebugInfo, resolveAssemblyRef, outWriter: TextWriter) = +type internal FsiValuePrinter(fsi: FsiEvaluationSessionHostConfig, tcConfigB: TcConfigBuilder, g: TcGlobals, generateDebugInfo, resolveAssemblyRef, outWriter: TextWriter) = /// This printer is used by F# Interactive if no other printers apply. - let DefaultPrintingIntercept (ienv: IEnvironment) (obj:obj) = - match obj with - | null -> None + let DefaultPrintingIntercept (ienv: Internal.Utilities.StructuredFormat.IEnvironment) (obj:obj) = + match obj with + | null -> None | :? System.Collections.IDictionary as ie -> - let it = ie.GetEnumerator() - try - let itemLs = - Layout.unfoldL // the function to layout each object in the unfold - (fun obj -> ienv.GetLayout obj) + let it = ie.GetEnumerator() + try + let itemLs = + Internal.Utilities.StructuredFormat.LayoutOps.unfoldL // the function to layout each object in the unfold + (fun obj -> ienv.GetLayout obj) // the function to call at each step of the unfold - (fun () -> - if it.MoveNext() then - Some((it.Key, it.Value),()) - else None) () + (fun () -> + if it.MoveNext() then + Some((it.Key, it.Value),()) + else None) () // the maximum length - (1+fsi.PrintLength/3) + (1+fsi.PrintLength/3) let makeListL itemLs = - (leftL (TaggedText.tagText "[")) ^^ - sepListL (rightL (TaggedText.tagText ";")) itemLs ^^ - (rightL (TaggedText.tagText "]")) - Some(wordL (TaggedText.tagText "dict") --- makeListL itemLs) + (leftL (TaggedTextOps.tagText "[")) ^^ + sepListL (rightL (TaggedTextOps.tagText ";")) itemLs ^^ + (rightL (TaggedTextOps.tagText "]")) + Some(wordL (TaggedTextOps.tagText "dict") --- makeListL itemLs) finally - match it with + match it with | :? System.IDisposable as d -> d.Dispose() | _ -> () - - | _ -> None + + | _ -> None /// Get the print options used when formatting output using the structured printer. - member _.GetFsiPrintOptions() = - { FormatOptions.Default with + member __.GetFsiPrintOptions() = + { Internal.Utilities.StructuredFormat.FormatOptions.Default with FormatProvider = fsi.FormatProvider; - PrintIntercepts = + PrintIntercepts = // The fsi object supports the addition of two kinds of printers, one which converts to a string // and one which converts to another object that is recursively formatted. // The internal AddedPrinters reports these to FSI.EXE and we pick them up here to produce a layout - [ for x in fsi.AddedPrinters do - match x with - | Choice1Of2 (aty: System.Type, printer) -> + [ for x in fsi.AddedPrinters do + match x with + | Choice1Of2 (aty: System.Type, printer) -> yield (fun _ienv (obj:obj) -> - match obj with - | null -> None - | _ when aty.IsAssignableFrom(obj.GetType()) -> - match printer obj with + match obj with + | null -> None + | _ when aty.IsAssignableFrom(obj.GetType()) -> + match printer obj with | null -> None - | s -> Some (wordL (TaggedText.tagText s)) + | s -> Some (wordL (TaggedTextOps.tagText s)) | _ -> None) - - | Choice2Of2 (aty: System.Type, converter) -> + + | Choice2Of2 (aty: System.Type, converter) -> yield (fun ienv (obj:obj) -> - match obj with - | null -> None - | _ when aty.IsAssignableFrom(obj.GetType()) -> - match converter obj with + match obj with + | null -> None + | _ when aty.IsAssignableFrom(obj.GetType()) -> + match converter obj with | null -> None | res -> Some (ienv.GetLayout res) | _ -> None) yield DefaultPrintingIntercept]; FloatingPointFormat = fsi.FloatingPointFormat; - PrintWidth = fsi.PrintWidth; - PrintDepth = fsi.PrintDepth; + PrintWidth = fsi.PrintWidth; + PrintDepth = fsi.PrintDepth; PrintLength = fsi.PrintLength; PrintSize = fsi.PrintSize; ShowProperties = fsi.ShowProperties; ShowIEnumerable = fsi.ShowIEnumerable; } /// Get the evaluation context used when inverting the storage mapping of the ILRuntimeWriter. - member _.GetEvaluationContext emEnv = + member __.GetEvaluationContext emEnv = let cenv = { ilg = g.ilg ; emitTailcalls= tcConfigB.emitTailcalls; generatePdb = generateDebugInfo; resolveAssemblyRef=resolveAssemblyRef; tryFindSysILTypeRef=g.TryFindSysILTypeRef } { LookupFieldRef = ILRuntimeWriter.LookupFieldRef emEnv >> Option.get LookupMethodRef = ILRuntimeWriter.LookupMethodRef emEnv >> Option.get - LookupTypeRef = ILRuntimeWriter.LookupTypeRef cenv emEnv + LookupTypeRef = ILRuntimeWriter.LookupTypeRef cenv emEnv LookupType = ILRuntimeWriter.LookupType cenv emEnv } /// Generate a layout for an actual F# value, where we know the value has the given static type. - member _.PrintValue (printMode, opts:FormatOptions, x:obj, ty:System.Type) = + member __.PrintValue (printMode, opts:FormatOptions, x:obj, ty:System.Type) = // We do a dynamic invoke of any_to_layout with the right System.Type parameter for the static type of the saved value. // In principle this helps any_to_layout do the right thing as it descends through terms. In practice it means // it at least does the right thing for top level 'null' list and option values (but not for nested ones). @@ -401,29 +400,29 @@ type internal FsiValuePrinter(fsi: FsiEvaluationSessionHostConfig, tcConfigB: Tc // RuntimeHelpers.SaveIt has type ('a -> unit), and fetches the System.Type for 'a by using a typeof<'a> call. // The funny thing here is that you might think that the driver (this file) knows more about the static types // than the compiled code does. But it doesn't! In particular, it's not that easy to get a System.Type value based on the - // static type information we do have: we have no direct way to bind a F# TAST type or even an AbstractIL type to + // static type information we do have: we have no direct way to bind a F# TAST type or even an AbstractIL type to // a System.Type value (I guess that functionality should be in ilreflect.fs). // // This will be more significant when we print values other then 'it' // - try + try let anyToLayoutCall = Utilities.getAnyToLayoutCall ty match printMode with | PrintDecl -> // When printing rhs of fsi declarations, use "fsi_any_to_layout". // This will suppress some less informative values, by returning an empty layout. [fix 4343]. anyToLayoutCall.FsiAnyToLayout(opts, x, ty) - | PrintExpr -> + | PrintExpr -> anyToLayoutCall.AnyToLayout(opts, x, ty) - with - | :? ThreadAbortException -> Layout.wordL (TaggedText.tagText "") + with + | :? ThreadAbortException -> Layout.wordL (TaggedTextOps.tagText "") | e -> #if DEBUG printf "\n\nPrintValue: x = %+A and ty=%s\n" x (ty.FullName) #endif - printf "%s" (FSIstrings.SR.fsiExceptionDuringPrettyPrinting(e.ToString())); - Layout.wordL (TaggedText.tagText "") - + printf "%s" (FSIstrings.SR.fsiExceptionDuringPrettyPrinting(e.ToString())); + Layout.wordL (TaggedTextOps.tagText "") + /// Display the signature of an F# value declaration, along with its actual value. member valuePrinter.InvokeDeclLayout (emEnv, ilxGenerator: IlxAssemblyGenerator, v:Val) = // Implemented via a lookup from v to a concrete (System.Object,System.Type). @@ -435,7 +434,7 @@ type internal FsiValuePrinter(fsi: FsiEvaluationSessionHostConfig, tcConfigB: Tc // Ilreflect knows what the AbsIL was generated to. // Combining these allows for obtaining the (obj,objTy) by reflection where possible. // This assumes the v:Val was given appropriate storage, e.g. StaticField. - if fsi.ShowDeclarationValues then + if fsi.ShowDeclarationValues then // Adjust "opts" for printing for "declared-values": // - No sequences, because they may have effects or time cost. // - No properties, since they may have unexpected effects. @@ -443,70 +442,69 @@ type internal FsiValuePrinter(fsi: FsiEvaluationSessionHostConfig, tcConfigB: Tc // - Limit PrintSize which is a count on nodes. let declaredValueReductionFactor = 10 (* reduce PrintSize for declared values, e.g. see less of large terms *) let opts = valuePrinter.GetFsiPrintOptions() - let opts = {opts with ShowProperties = false // properties off, motivated by Form props - ShowIEnumerable = false // seq off, motivated by db query concerns - StringLimit = max 0 (opts.PrintWidth-4) // 4 allows for an indent of 2 and 2 quotes (rough) - PrintSize = opts.PrintSize / declaredValueReductionFactor } // print less - let res = + let opts = {opts with ShowProperties = false // properties off, motivated by Form props + ShowIEnumerable = false // seq off, motivated by db query concerns + StringLimit = max 0 (opts.PrintWidth-4) // 4 allows for an indent of 2 and 2 quotes (rough) + PrintSize = opts.PrintSize / declaredValueReductionFactor } // print less + let res = try ilxGenerator.LookupGeneratedValue (valuePrinter.GetEvaluationContext emEnv, v) - with e -> + with e -> assert false #if DEBUG //fprintfn fsiConsoleOutput.Out "lookGenerateVal: failed on v=%+A v.Name=%s" v v.LogicalName #endif - None // lookup may fail + None // lookup may fail match res with | None -> None - | Some (obj,objTy) -> + | Some (obj,objTy) -> let lay = valuePrinter.PrintValue (FsiValuePrinterMode.PrintDecl, opts, obj, objTy) - if isEmptyL lay then None else Some lay // suppress empty layout - + if isEmptyL lay then None else Some lay // suppress empty layout + else None - - + + /// Format a value - member valuePrinter.FormatValue (obj:obj, objTy) = + member valuePrinter.FormatValue (obj:obj, objTy) = let opts = valuePrinter.GetFsiPrintOptions() let lay = valuePrinter.PrintValue (FsiValuePrinterMode.PrintExpr, opts, obj, objTy) - Display.layout_to_string opts lay - + Internal.Utilities.StructuredFormat.Display.layout_to_string opts lay + /// Fetch the saved value of an expression out of the 'it' register and show it. - member valuePrinter.InvokeExprPrinter (denv, infoReader, emEnv, ilxGenerator: IlxAssemblyGenerator, vref: ValRef) = + member valuePrinter.InvokeExprPrinter (denv, emEnv, ilxGenerator: IlxAssemblyGenerator, vref) = let opts = valuePrinter.GetFsiPrintOptions() - let res = ilxGenerator.LookupGeneratedValue (valuePrinter.GetEvaluationContext emEnv, vref.Deref) - let rhsL = + let res = ilxGenerator.LookupGeneratedValue (valuePrinter.GetEvaluationContext emEnv, vref) + let rhsL = match res with | None -> None - | Some (obj,objTy) -> + | Some (obj,objTy) -> let lay = valuePrinter.PrintValue (FsiValuePrinterMode.PrintExpr, opts, obj, objTy) - if isEmptyL lay then None else Some lay // suppress empty layout + if isEmptyL lay then None else Some lay // suppress empty layout let denv = { denv with suppressMutableKeyword = true } // suppress 'mutable' in 'val mutable it = ...' - let denv = { denv with suppressInlineKeyword = false } // dont' suppress 'inline' in 'val inline f = ...' - let fullL = + let fullL = if Option.isNone rhsL || isEmptyL rhsL.Value then - NicePrint.prettyLayoutOfValOrMemberNoInst denv infoReader vref (* the rhs was suppressed by the printer, so no value to print *) + NicePrint.prettyLayoutOfValOrMemberNoInst denv vref (* the rhs was suppressed by the printer, so no value to print *) else - (NicePrint.prettyLayoutOfValOrMemberNoInst denv infoReader vref ++ wordL (TaggedText.tagText "=")) --- rhsL.Value + (NicePrint.prettyLayoutOfValOrMemberNoInst denv vref ++ wordL (TaggedTextOps.tagText "=")) --- rhsL.Value Utilities.colorPrintL outWriter opts fullL /// Used to make a copy of input in order to include the input when displaying the error text. -type internal FsiStdinSyphon(errorWriter: TextWriter) = +type internal FsiStdinSyphon(errorWriter: TextWriter) = let syphonText = new StringBuilder() /// Clears the syphon text - member x.Reset () = + member x.Reset () = syphonText.Clear() |> ignore /// Adds a new line to the syphon text - member x.Add (str:string) = - syphonText.Append str |> ignore + member x.Add (str:string) = + syphonText.Append str |> ignore /// Gets the indicated line in the syphon text member x.GetLine filename i = - if filename <> Lexhelp.stdinMockFilename then - "" + if filename <> Lexhelp.stdinMockFilename then + "" else let text = syphonText.ToString() // In Visual Studio, when sending a block of text, it prefixes with '# "filename"\n' @@ -521,65 +519,65 @@ type internal FsiStdinSyphon(errorWriter: TextWriter) = prune (text.Substring(idx + stdinReset.Length)) else text - + let text = prune text let lines = text.Split '\n' if 0 < i && i <= lines.Length then lines.[i-1] else "" /// Display the given error. - member syphon.PrintError (tcConfig:TcConfigBuilder, err) = - Utilities.ignoreAllErrors (fun () -> - let severity = FSharpDiagnosticSeverity.Error - DoWithDiagnosticColor severity (fun () -> + member syphon.PrintError (tcConfig:TcConfigBuilder, err) = + Utilities.ignoreAllErrors (fun () -> + let isError = true + DoWithErrorColor isError (fun () -> errorWriter.WriteLine(); - writeViaBuffer errorWriter (OutputDiagnosticContext " " syphon.GetLine) err; - writeViaBuffer errorWriter (OutputDiagnostic (tcConfig.implicitIncludeDir,tcConfig.showFullPaths,tcConfig.flatErrors,tcConfig.errorStyle,severity)) err; + writeViaBuffer errorWriter (OutputDiagnosticContext " " syphon.GetLine) err; + writeViaBuffer errorWriter (OutputDiagnostic (tcConfig.implicitIncludeDir,tcConfig.showFullPaths,tcConfig.flatErrors,tcConfig.errorStyle,isError)) err; errorWriter.WriteLine() errorWriter.WriteLine() errorWriter.Flush())) - + /// Encapsulates functions used to write to outWriter and errorWriter -type internal FsiConsoleOutput(tcConfigB, outWriter:TextWriter, errorWriter:TextWriter) = +type internal FsiConsoleOutput(tcConfigB, outWriter:TextWriter, errorWriter:TextWriter) = let nullOut = new StreamWriter(Stream.Null) :> TextWriter - let fprintfnn (os: TextWriter) fmt = Printf.kfprintf (fun _ -> os.WriteLine(); os.WriteLine()) os fmt + let fprintfnn (os: TextWriter) fmt = Printf.kfprintf (fun _ -> os.WriteLine(); os.WriteLine()) os fmt /// uprintf to write usual responses to stdout (suppressed by --quiet), with various pre/post newlines - member out.uprintf fmt = fprintf (if tcConfigB.noFeedback then nullOut else outWriter) fmt + member out.uprintf fmt = fprintf (if tcConfigB.noFeedback then nullOut else outWriter) fmt member out.uprintfn fmt = fprintfn (if tcConfigB.noFeedback then nullOut else outWriter) fmt member out.uprintfnn fmt = fprintfnn (if tcConfigB.noFeedback then nullOut else outWriter) fmt member out.uprintnf fmt = out.uprintfn ""; out.uprintf fmt member out.uprintnfn fmt = out.uprintfn ""; out.uprintfn fmt member out.uprintnfnn fmt = out.uprintfn ""; out.uprintfnn fmt - + member out.Out = outWriter member out.Error = errorWriter /// This ErrorLogger reports all warnings, but raises StopProcessing on first error or early exit -type internal ErrorLoggerThatStopsOnFirstError(tcConfigB:TcConfigBuilder, fsiStdinSyphon:FsiStdinSyphon, fsiConsoleOutput: FsiConsoleOutput) = +type internal ErrorLoggerThatStopsOnFirstError(tcConfigB:TcConfigBuilder, fsiStdinSyphon:FsiStdinSyphon, fsiConsoleOutput: FsiConsoleOutput) = inherit ErrorLogger("ErrorLoggerThatStopsOnFirstError") - let mutable errorCount = 0 + let mutable errorCount = 0 - member x.SetError() = + member x.SetError() = errorCount <- 1 member x.ResetErrorCount() = (errorCount <- 0) - - override x.DiagnosticSink(err, severity) = - if (severity = FSharpDiagnosticSeverity.Error) || ReportWarningAsError tcConfigB.errorSeverityOptions err then + + override x.DiagnosticSink(err, isError) = + if isError || ReportWarningAsError tcConfigB.errorSeverityOptions err then fsiStdinSyphon.PrintError(tcConfigB,err) errorCount <- errorCount + 1 if tcConfigB.abortOnError then exit 1 (* non-zero exit code *) // STOP ON FIRST ERROR (AVOIDS PARSER ERROR RECOVERY) raise StopProcessing - else - DoWithDiagnosticColor severity (fun () -> - if ReportWarning tcConfigB.errorSeverityOptions err then + else + DoWithErrorColor isError (fun () -> + if ReportWarning tcConfigB.errorSeverityOptions err then fsiConsoleOutput.Error.WriteLine() writeViaBuffer fsiConsoleOutput.Error (OutputDiagnosticContext " " fsiStdinSyphon.GetLine) err - writeViaBuffer fsiConsoleOutput.Error (OutputDiagnostic (tcConfigB.implicitIncludeDir,tcConfigB.showFullPaths,tcConfigB.flatErrors,tcConfigB.errorStyle,severity)) err + writeViaBuffer fsiConsoleOutput.Error (OutputDiagnostic (tcConfigB.implicitIncludeDir,tcConfigB.showFullPaths,tcConfigB.flatErrors,tcConfigB.errorStyle,isError)) err fsiConsoleOutput.Error.WriteLine() fsiConsoleOutput.Error.WriteLine() fsiConsoleOutput.Error.Flush()) @@ -589,17 +587,17 @@ type internal ErrorLoggerThatStopsOnFirstError(tcConfigB:TcConfigBuilder, fsiStd type ErrorLogger with member x.CheckForErrors() = (x.ErrorCount > 0) /// A helper function to check if its time to abort - member x.AbortOnError(fsiConsoleOutput:FsiConsoleOutput) = - if x.ErrorCount > 0 then + member x.AbortOnError(fsiConsoleOutput:FsiConsoleOutput) = + if x.ErrorCount > 0 then fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.stoppedDueToError()) fsiConsoleOutput.Error.Flush() raise StopProcessing /// Get the directory name from a string, with some defaults if it doesn't have one -let internal directoryName (s:string) = +let internal directoryName (s:string) = if s = "" then "." - else - match Path.GetDirectoryName s with + else + match Path.GetDirectoryName s with | null -> if FileSystem.IsPathRootedShim s then s else "." | res -> if res = "" then "." else res @@ -608,37 +606,36 @@ let internal directoryName (s:string) = // cmd line - state for options //---------------------------------------------------------------------------- -/// Process the command line options +/// Process the command line options type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, - argv: string[], + argv: string[], tcConfigB, - fsiConsoleOutput: FsiConsoleOutput) = + fsiConsoleOutput: FsiConsoleOutput) = - let mutable enableConsoleKeyProcessing = + let mutable enableConsoleKeyProcessing = // Mono on Win32 doesn't implement correct console processing - not (runningOnMono && System.Environment.OSVersion.Platform = System.PlatformID.Win32NT) + not (runningOnMono && System.Environment.OSVersion.Platform = System.PlatformID.Win32NT) let mutable gui = not runningOnMono // override via "--gui", on by default except when on Mono #if DEBUG - let mutable showILCode = false // show modul il code + let mutable showILCode = false // show modul il code #endif let mutable showTypes = true // show types after each interaction? let mutable fsiServerName = "" let mutable interact = true let mutable explicitArgs = [] - let mutable writeReferencesAndExit = None - let mutable inputFilesAcc = [] + let mutable inputFilesAcc = [] let mutable fsiServerInputCodePage = None let mutable fsiServerOutputCodePage = None let mutable fsiLCID = None - // internal options - let mutable probeToSeeIfConsoleWorks = true - let mutable peekAheadOnConsoleToPermitTyping = true + // internal options + let mutable probeToSeeIfConsoleWorks = true + let mutable peekAheadOnConsoleToPermitTyping = true - let isInteractiveServer() = fsiServerName <> "" + let isInteractiveServer() = fsiServerName <> "" let recordExplicitArg arg = explicitArgs <- explicitArgs @ [arg] let executableFileNameWithoutExtension = @@ -658,7 +655,7 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, | PlatformID.MacOSX | PlatformID.Unix -> StringComparison.Ordinal | _ -> StringComparison.OrdinalIgnoreCase - + if String.Compare(processFileName, commandLineExecutableFileName, stringComparison) = 0 then processFileName else sprintf "%s %s" processFileName commandLineExecutableFileName @@ -679,7 +676,7 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, // option tags let tagFile = "" let tagNone = "" - + /// These options precede the FsiCoreCompilerOptions in the help blocks let fsiUsagePrefix tcConfigB = [PublicOptions(FSIstrings.SR.fsiInputFiles(), @@ -694,15 +691,14 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, PublicOptions(FSIstrings.SR.fsiMiscellaneous(),[]); PublicOptions(FSIstrings.SR.fsiAdvanced(),[]); PrivateOptions( - [// Make internal fsi-server* options. Do not print in the help. They are used by VFSI. - CompilerOption("fsi-server-report-references","", OptionString (fun s -> writeReferencesAndExit <- Some s), None, None); + [// Make internal fsi-server* options. Do not print in the help. They are used by VFSI. CompilerOption("fsi-server","", OptionString (fun s -> fsiServerName <- s), None, None); // "FSI server mode on given named channel"); - CompilerOption("fsi-server-input-codepage","",OptionInt (fun n -> fsiServerInputCodePage <- Some(n)), None, None); // " Set the input codepage for the console"); - CompilerOption("fsi-server-output-codepage","",OptionInt (fun n -> fsiServerOutputCodePage <- Some(n)), None, None); // " Set the output codepage for the console"); + CompilerOption("fsi-server-input-codepage","",OptionInt (fun n -> fsiServerInputCodePage <- Some(n)), None, None); // " Set the input codepage for the console"); + CompilerOption("fsi-server-output-codepage","",OptionInt (fun n -> fsiServerOutputCodePage <- Some(n)), None, None); // " Set the output codepage for the console"); CompilerOption("fsi-server-no-unicode","", OptionUnit (fun () -> fsiServerOutputCodePage <- None; fsiServerInputCodePage <- None), None, None); // "Do not set the codepages for the console"); CompilerOption("fsi-server-lcid","", OptionInt (fun n -> fsiLCID <- Some(n)), None, None); // "LCID from Visual Studio" - // We do not want to print the "script.fsx arg2..." as part of the options + // We do not want to print the "script.fsx arg2..." as part of the options CompilerOption("script.fsx arg1 arg2 ...","", OptionGeneral((fun args -> args.Length > 0 && IsScript args.[0]), (fun args -> let scriptFile = args.[0] @@ -717,7 +713,7 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, ]); PrivateOptions( [ - // Private options, related to diagnostics around console probing + // Private options, related to diagnostics around console probing CompilerOption("probeconsole","", OptionSwitch (fun flag -> probeToSeeIfConsoleWorks <- flag=OptionSwitch.On), None, None); // "Probe to see if Console looks functional"); CompilerOption("peekahead","", OptionSwitch (fun flag -> peekAheadOnConsoleToPermitTyping <- flag=OptionSwitch.On), None, None); // "Probe to see if Console looks functional"); @@ -734,8 +730,8 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, [CompilerOption("--","", OptionRest recordExplicitArg, None, Some (FSIstrings.SR.fsiRemaining())); ]); - PublicOptions(FSComp.SR.optsHelpBannerMisc(), - [ CompilerOption("help", tagNone, + PublicOptions(FSComp.SR.optsHelpBannerMisc(), + [ CompilerOption("help", tagNone, OptionHelp (fun blocks -> displayHelpFsi tcConfigB blocks),None, Some (FSIstrings.SR.fsiHelp())) ]); @@ -747,7 +743,7 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, PublicOptions(FSComp.SR.optsHelpBannerAdvanced(), [CompilerOption("exec", "", OptionUnit (fun () -> interact <- false), None, Some (FSIstrings.SR.fsiExec())); CompilerOption("gui", tagNone, OptionSwitch(fun flag -> gui <- (flag = OptionSwitch.On)),None,Some (FSIstrings.SR.fsiGui())); - CompilerOption("quiet", "", OptionUnit (fun () -> tcConfigB.noFeedback <- true), None,Some (FSIstrings.SR.fsiQuiet())); + CompilerOption("quiet", "", OptionUnit (fun () -> tcConfigB.noFeedback <- true), None,Some (FSIstrings.SR.fsiQuiet())); (* Renamed --readline and --no-readline to --tabcompletion:+|- *) CompilerOption("readline", tagNone, OptionSwitch(fun flag -> enableConsoleKeyProcessing <- (flag = OptionSwitch.On)), None, Some(FSIstrings.SR.fsiReadline())); CompilerOption("quotations-debug", tagNone, OptionSwitch(fun switch -> tcConfigB.emitDebugInfoInQuotations <- switch = OptionSwitch.On),None, Some(FSIstrings.SR.fsiEmitDebugInfoInQuotations())); @@ -757,13 +753,13 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, /// Process command line, flags and collect filenames. - /// The ParseCompilerOptions function calls imperative function to process "real" args - /// Rather than start processing, just collect names, then process them. - let sourceFiles = - let collect name = + /// The ParseCompilerOptions function calls imperative function to process "real" args + /// Rather than start processing, just collect names, then process them. + let sourceFiles = + let collect name = let fsx = IsScript name inputFilesAcc <- inputFilesAcc @ [(name,fsx)] // O(n^2), but n small... - try + try let fsiCompilerOptions = fsiUsagePrefix tcConfigB @ GetCoreFsiCompilerOptions tcConfigB @ fsiUsageSuffix tcConfigB let abbrevArgs = GetAbbrevFlagSet tcConfigB false ParseCompilerOptions (collect, fsiCompilerOptions, List.tail (PostProcessCompilerArgs abbrevArgs argv)) @@ -774,7 +770,7 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, // We need a dependency provider with native resolution. Managed resolution is handled by generated `#r` let dependencyProvider = new DependencyProvider(NativeResolutionProbe(tcConfigB.GetNativeProbingRoots)) - do + do if tcConfigB.utf8output then let prev = Console.OutputEncoding Console.OutputEncoding <- System.Text.Encoding.UTF8 @@ -783,12 +779,12 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, #else System.AppDomain.CurrentDomain.ProcessExit.Add(fun _ -> Console.OutputEncoding <- prev) #endif - do - let firstArg = - match sourceFiles with - | [] -> argv.[0] + do + let firstArg = + match sourceFiles with + | [] -> argv.[0] | _ -> fst (List.head (List.rev sourceFiles) ) - let args = Array.ofList (firstArg :: explicitArgs) + let args = Array.ofList (firstArg :: explicitArgs) fsi.ReportUserCommandLineArgs args @@ -796,12 +792,12 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, // Banner //---------------------------------------------------------------------------- - member _.ShowBanner() = + member __.ShowBanner() = fsiConsoleOutput.uprintnfn "%s" (tcConfigB.productNameForBannerText) fsiConsoleOutput.uprintfnn "%s" (FSComp.SR.optsCopyright()) fsiConsoleOutput.uprintfn "%s" (FSIstrings.SR.fsiBanner3()) - - member _.ShowHelp(m) = + + member __.ShowHelp(m) = let helpLine = sprintf "%s --help" executableFileNameWithoutExtension.Value fsiConsoleOutput.uprintfn "" @@ -825,27 +821,23 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, fsiConsoleOutput.uprintfn "" #if DEBUG - member _.ShowILCode with get() = showILCode and set v = showILCode <- v + member __.ShowILCode with get() = showILCode and set v = showILCode <- v #endif - member _.ShowTypes with get() = showTypes and set v = showTypes <- v - member _.FsiServerName = fsiServerName - member _.FsiServerInputCodePage = fsiServerInputCodePage - member _.FsiServerOutputCodePage = fsiServerOutputCodePage - member _.FsiLCID with get() = fsiLCID and set v = fsiLCID <- v - member _.UseServerPrompt = isInteractiveServer() - member _.IsInteractiveServer = isInteractiveServer() - member _.ProbeToSeeIfConsoleWorks = probeToSeeIfConsoleWorks - member _.EnableConsoleKeyProcessing = enableConsoleKeyProcessing - - member _.Interact = interact - member _.PeekAheadOnConsoleToPermitTyping = peekAheadOnConsoleToPermitTyping - member _.SourceFiles = sourceFiles - member _.Gui = gui - - member _.WriteReferencesAndExit = writeReferencesAndExit + member __.ShowTypes with get() = showTypes and set v = showTypes <- v + member __.FsiServerName = fsiServerName + member __.FsiServerInputCodePage = fsiServerInputCodePage + member __.FsiServerOutputCodePage = fsiServerOutputCodePage + member __.FsiLCID with get() = fsiLCID and set v = fsiLCID <- v + member __.IsInteractiveServer = isInteractiveServer() + member __.ProbeToSeeIfConsoleWorks = probeToSeeIfConsoleWorks + member __.EnableConsoleKeyProcessing = enableConsoleKeyProcessing + + member __.Interact = interact + member __.PeekAheadOnConsoleToPermitTyping = peekAheadOnConsoleToPermitTyping + member __.SourceFiles = sourceFiles + member __.Gui = gui member _.DependencyProvider = dependencyProvider - member _.FxResolver = tcConfigB.FxResolver /// Set the current ui culture for the current thread. let internal SetCurrentUICultureForThread (lcid : int option) = @@ -864,33 +856,33 @@ let internal InstallErrorLoggingOnThisThread errorLogger = SetThreadErrorLoggerNoUnwind(errorLogger) SetThreadBuildPhaseNoUnwind(BuildPhase.Interactive) -/// Set the input/output encoding. The use of a thread is due to a known bug on +/// Set the input/output encoding. The use of a thread is due to a known bug on /// on Vista where calls to Console.InputEncoding can block the process. -let internal SetServerCodePages(fsiOptions: FsiCommandLineOptions) = - match fsiOptions.FsiServerInputCodePage, fsiOptions.FsiServerOutputCodePage with +let internal SetServerCodePages(fsiOptions: FsiCommandLineOptions) = + match fsiOptions.FsiServerInputCodePage, fsiOptions.FsiServerOutputCodePage with | None,None -> () - | inputCodePageOpt,outputCodePageOpt -> - let mutable successful = false - Async.Start (async { do match inputCodePageOpt with - | None -> () + | inputCodePageOpt,outputCodePageOpt -> + let mutable successful = false + Async.Start (async { do match inputCodePageOpt with + | None -> () | Some(n:int) -> - let encoding = System.Text.Encoding.GetEncoding(n) + let encoding = System.Text.Encoding.GetEncoding(n) // Note this modifies the real honest-to-goodness settings for the current shell. // and the modifications hang around even after the process has exited. Console.InputEncoding <- encoding - do match outputCodePageOpt with - | None -> () - | Some(n:int) -> + do match outputCodePageOpt with + | None -> () + | Some(n:int) -> let encoding = System.Text.Encoding.GetEncoding n // Note this modifies the real honest-to-goodness settings for the current shell. // and the modifications hang around even after the process has exited. Console.OutputEncoding <- encoding do successful <- true }); - for pause in [10;50;100;1000;2000;10000] do - if not successful then + for pause in [10;50;100;1000;2000;10000] do + if not successful then Thread.Sleep(pause); #if LOGGING_GUI - if not !successful then + if not !successful then System.Windows.Forms.MessageBox.Show(FSIstrings.SR.fsiConsoleProblem()) |> ignore #endif @@ -903,14 +895,14 @@ type internal FsiConsolePrompt(fsiOptions: FsiCommandLineOptions, fsiConsoleOutp // A prompt gets "printed ahead" at start up. Tells users to start type while initialisation completes. // A prompt can be skipped by "silent directives", e.g. ones sent to FSI by VS. let mutable dropPrompt = 0 - // NOTE: SERVER-PROMPT is not user displayed, rather it's a prefix that code elsewhere + // NOTE: SERVER-PROMPT is not user displayed, rather it's a prefix that code elsewhere // uses to identify the prompt, see service\FsPkgs\FSharp.VS.FSI\fsiSessionToolWindow.fs - let prompt = if fsiOptions.UseServerPrompt then "SERVER-PROMPT>\n" else "> " + let prompt = if fsiOptions.IsInteractiveServer then "SERVER-PROMPT>\n" else "> " - member _.Print() = if dropPrompt = 0 then fsiConsoleOutput.uprintf "%s" prompt else dropPrompt <- dropPrompt - 1 - member _.PrintAhead() = dropPrompt <- dropPrompt + 1; fsiConsoleOutput.uprintf "%s" prompt - member _.SkipNext() = dropPrompt <- dropPrompt + 1 - member _.FsiOptions = fsiOptions + member __.Print() = if dropPrompt = 0 then fsiConsoleOutput.uprintf "%s" prompt else dropPrompt <- dropPrompt - 1 + member __.PrintAhead() = dropPrompt <- dropPrompt + 1; fsiConsoleOutput.uprintf "%s" prompt + member __.SkipNext() = dropPrompt <- dropPrompt + 1 + member __.FsiOptions = fsiOptions @@ -938,45 +930,45 @@ type internal FsiConsoleInput(fsi: FsiEvaluationSessionHostConfig, fsiOptions: F /// Peek on the standard input so that the user can type into it from a console window. do if fsiOptions.Interact then - if fsiOptions.PeekAheadOnConsoleToPermitTyping then - (new Thread(fun () -> - match consoleOpt with - | Some console when fsiOptions.EnableConsoleKeyProcessing && not fsiOptions.UseServerPrompt -> - if List.isEmpty fsiOptions.SourceFiles then + if fsiOptions.PeekAheadOnConsoleToPermitTyping then + (new Thread(fun () -> + match consoleOpt with + | Some console when fsiOptions.EnableConsoleKeyProcessing && not fsiOptions.IsInteractiveServer -> + if List.isEmpty fsiOptions.SourceFiles then if progress then fprintfn outWriter "first-line-reader-thread reading first line..."; - firstLine <- Some(console()); + firstLine <- Some(console()); if progress then fprintfn outWriter "first-line-reader-thread got first line = %A..." firstLine; - consoleReaderStartupDone.Set() |> ignore + consoleReaderStartupDone.Set() |> ignore if progress then fprintfn outWriter "first-line-reader-thread has set signal and exited." ; - | _ -> + | _ -> ignore(inReader.Peek()); - consoleReaderStartupDone.Set() |> ignore + consoleReaderStartupDone.Set() |> ignore )).Start() else if progress then fprintfn outWriter "first-line-reader-thread not in use." consoleReaderStartupDone.Set() |> ignore /// Try to get the first line, if we snarfed it while probing. - member _.TryGetFirstLine() = let r = firstLine in firstLine <- None; r + member __.TryGetFirstLine() = let r = firstLine in firstLine <- None; r /// Try to get the console, if it appears operational. - member _.TryGetConsole() = consoleOpt + member __.TryGetConsole() = consoleOpt - member _.In = inReader - - member _.WaitForInitialConsoleInput() = WaitHandle.WaitAll [| consoleReaderStartupDone |] |> ignore; + member __.In = inReader + member __.WaitForInitialConsoleInput() = WaitHandle.WaitAll [| consoleReaderStartupDone |] |> ignore; + //---------------------------------------------------------------------------- // FsiDynamicCompilerState //---------------------------------------------------------------------------- -type internal FsiInteractionStepStatus = - | CtrlC - | EndOfFile +type internal FsiInteractionStepStatus = + | CtrlC + | EndOfFile | Completed of option - | CompletedWithAlreadyReportedError - | CompletedWithReportedError of exn + | CompletedWithAlreadyReportedError + | CompletedWithReportedError of exn [] [] @@ -984,7 +976,7 @@ type internal FsiDynamicCompilerState = { optEnv : Optimizer.IncrementalOptimizationEnv emEnv : ILRuntimeWriter.emEnv tcGlobals : TcGlobals - tcState : TcState + tcState : TcState tcImports : TcImports ilxGenerator : IlxGen.IlxAssemblyGenerator boundValues : NameMap @@ -992,10 +984,10 @@ type internal FsiDynamicCompilerState = timing : bool debugBreak : bool } -let internal WithImplicitHome (tcConfigB, dir) f = - let old = tcConfigB.implicitIncludeDir +let internal WithImplicitHome (tcConfigB, dir) f = + let old = tcConfigB.implicitIncludeDir tcConfigB.implicitIncludeDir <- dir; - try f() + try f() finally tcConfigB.implicitIncludeDir <- old let internal convertReflectionTypeToILTypeRef (reflectionTy: Type) = @@ -1030,9 +1022,9 @@ let rec internal convertReflectionTypeToILType (reflectionTy: Type) = // Special case functions. if FSharp.Reflection.FSharpType.IsFunction reflectionTy then let ctors = reflectionTy.GetConstructors(BindingFlags.Public ||| BindingFlags.NonPublic ||| BindingFlags.Instance) - if ctors.Length = 1 && - ctors.[0].GetCustomAttribute() <> null && - not ctors.[0].IsPublic && + if ctors.Length = 1 && + ctors.[0].GetCustomAttribute() <> null && + not ctors.[0].IsPublic && PrettyNaming.IsCompilerGeneratedName reflectionTy.Name then let rec get (typ: Type) = if FSharp.Reflection.FSharpType.IsFunction typ.BaseType then get typ.BaseType else typ get reflectionTy @@ -1066,12 +1058,12 @@ let internal mkBoundValueTypedImpl tcGlobals m moduleName name ty = Construct.NewVal (name, m, None, ty, ValMutability.Immutable, false, Some(ValReprInfo([], [], { Attribs = []; Name = None })), vis, ValNotInRecScope, None, NormalVal, [], ValInline.Optional, - XmlDoc.Empty, true, false, false, false, + XmlDoc.Empty, true, false, false, false, false, false, None, Parent(TypedTreeBasics.ERefLocal moduleOrNamespace)) mty <- ModuleOrNamespaceType(ModuleOrNamespaceKind.ModuleOrType, QueueList.one v, QueueList.empty) let bindExpr = TypedTreeOps.mkCallDefaultOf tcGlobals range0 ty - let binding = Binding.TBind(v, bindExpr, DebugPointAtBinding.NoneAtLet) + let binding = Binding.TBind(v, bindExpr, NoDebugPointAtLetBinding) let mbinding = ModuleOrNamespaceBinding.Module(moduleOrNamespace, TMDefs([TMDefLet(binding, m)])) let expr = ModuleOrNamespaceExprWithSig(mty, TMDefs([TMDefs[TMDefRec(false, [], [mbinding], m)]]), range0) moduleOrNamespace, v, TypedImplFile.TImplFile(QualifiedNameOfFile.QualifiedNameOfFile(Ident(moduleName, m)), [], expr, false, false, StampMap.Empty) @@ -1082,17 +1074,17 @@ let internal mkBoundValueTypedImpl tcGlobals m moduleName name ty = /// A single instance of this object is created per interactive session. type internal FsiDynamicCompiler (fsi: FsiEvaluationSessionHostConfig, - timeReporter : FsiTimeReporter, - tcConfigB: TcConfigBuilder, - tcLockObject : obj, + timeReporter : FsiTimeReporter, + tcConfigB: TcConfigBuilder, + tcLockObject : obj, outWriter: TextWriter, - tcImports: TcImports, - tcGlobals: TcGlobals, + tcImports: TcImports, + tcGlobals: TcGlobals, fsiOptions : FsiCommandLineOptions, fsiConsoleOutput : FsiConsoleOutput, fsiCollectible: bool, niceNameGen, - resolveAssemblyRef) = + resolveAssemblyRef) = let ilGlobals = tcGlobals.ilg @@ -1116,40 +1108,40 @@ type internal FsiDynamicCompiler //let _writer = moduleBuilder.GetSymWriter() - let infoReader = InfoReader(tcGlobals,tcImports.GetImportMap()) + let infoReader = InfoReader(tcGlobals,tcImports.GetImportMap()) - /// Add attributes + /// Add attributes let CreateModuleFragment (tcConfigB: TcConfigBuilder, assemblyName, codegenResults) = if progress then fprintfn fsiConsoleOutput.Out "Creating main module..."; let mainModule = mkILSimpleModule assemblyName (GetGeneratedILModuleName tcConfigB.target assemblyName) (tcConfigB.target = CompilerTarget.Dll) tcConfigB.subsystemVersion tcConfigB.useHighEntropyVA (mkILTypeDefs codegenResults.ilTypeDefs) None None 0x0 (mkILExportedTypes []) "" - { mainModule - with Manifest = + { mainModule + with Manifest = (let man = mainModule.ManifestOfAssembly Some { man with CustomAttrsStored = storeILCustomAttrs (mkILCustomAttrs codegenResults.ilAssemAttrs) }) } let ProcessCodegenResults (ctok, errorLogger: ErrorLogger, istate, optEnv, tcState: TcState, tcConfig, prefixPath, showTypes: bool, isIncrementalFragment, fragName, declaredImpls, ilxGenerator: IlxAssemblyGenerator, codegenResults) = let emEnv = istate.emEnv - // Each input is like a small separately compiled extension to a single source file. - // The incremental extension to the environment is dictated by the "signature" of the values as they come out - // of the type checker. Hence we add the declaredImpls (unoptimized) to the environment, rather than the - // optimizedImpls. + // Each input is like a small separately compiled extension to a single source file. + // The incremental extension to the environment is dictated by the "signature" of the values as they come out + // of the type checker. Hence we add the declaredImpls (unoptimized) to the environment, rather than the + // optimizedImpls. ilxGenerator.AddIncrementalLocalAssemblyFragment (isIncrementalFragment, fragName, declaredImpls) ReportTime tcConfig "TAST -> ILX"; errorLogger.AbortOnError(fsiConsoleOutput); - + ReportTime tcConfig "Linking"; let ilxMainModule = CreateModuleFragment (tcConfigB, assemblyName, codegenResults) errorLogger.AbortOnError(fsiConsoleOutput); - - ReportTime tcConfig "Assembly refs Normalised"; - let mainmod3 = Morphs.morphILScopeRefsInILModuleMemoized (NormalizeAssemblyRefs (ctok, ilGlobals, tcImports)) ilxMainModule + + ReportTime tcConfig "Assembly refs Normalised"; + let mainmod3 = Morphs.morphILScopeRefsInILModuleMemoized ilGlobals (NormalizeAssemblyRefs (ctok, ilGlobals, tcImports)) ilxMainModule errorLogger.AbortOnError(fsiConsoleOutput); #if DEBUG - if fsiOptions.ShowILCode then + if fsiOptions.ShowILCode then fsiConsoleOutput.uprintnfn "--------------------"; ILAsciiWriter.output_module outWriter ilGlobals mainmod3; fsiConsoleOutput.uprintnfn "--------------------" @@ -1163,28 +1155,28 @@ type internal FsiDynamicCompiler errorLogger.AbortOnError(fsiConsoleOutput); - // Explicitly register the resources with the QuotationPickler module - // We would save them as resources into the dynamic assembly but there is missing - // functionality System.Reflection for dynamic modules that means they can't be read back out + // Explicitly register the resources with the QuotationPickler module + // We would save them as resources into the dynamic assembly but there is missing + // functionality System.Reflection for dynamic modules that means they can't be read back out let cenv = { ilg = ilGlobals ; emitTailcalls = tcConfig.emitTailcalls; generatePdb = generateDebugInfo; resolveAssemblyRef=resolveAssemblyRef; tryFindSysILTypeRef=tcGlobals.TryFindSysILTypeRef } - for (referencedTypeDefs, bytes) in codegenResults.quotationResourceInfo do - let referencedTypes = - [| for tref in referencedTypeDefs do + for (referencedTypeDefs, bytes) in codegenResults.quotationResourceInfo do + let referencedTypes = + [| for tref in referencedTypeDefs do yield ILRuntimeWriter.LookupTypeRef cenv emEnv tref |] Microsoft.FSharp.Quotations.Expr.RegisterReflectedDefinitions (assemblyBuilder, fragName, bytes, referencedTypes); - + ReportTime tcConfig "Run Bindings"; - timeReporter.TimeOpIf istate.timing (fun () -> - execs |> List.iter (fun exec -> - match exec() with - | Some err -> - match errorLogger with - | :? ErrorLoggerThatStopsOnFirstError as errorLogger -> + timeReporter.TimeOpIf istate.timing (fun () -> + execs |> List.iter (fun exec -> + match exec() with + | Some err -> + match errorLogger with + | :? ErrorLoggerThatStopsOnFirstError as errorLogger -> fprintfn fsiConsoleOutput.Error "%s" (err.ToString()) errorLogger.SetError() errorLogger.AbortOnError(fsiConsoleOutput) - | _ -> + | _ -> raise (StopProcessingExn (Some err)) | None -> ())) ; @@ -1194,23 +1186,22 @@ type internal FsiDynamicCompiler // Echo the decls (reach inside wrapping) // This code occurs AFTER the execution of the declarations. // So stored values will have been initialised, modified etc. - if showTypes && not tcConfig.noFeedback then + if showTypes && not tcConfig.noFeedback then let denv = tcState.TcEnvFromImpls.DisplayEnv - let denv = + let denv = if isIncrementalFragment then // Extend denv with a (Val -> layout option) function for printing of val bindings. {denv with generatedValueLayout = (fun v -> valuePrinter.InvokeDeclLayout (emEnv, ilxGenerator, v)) } else // With #load items, the vals in the inferred signature do not tie up with those generated. Disable printing. - denv - let denv = { denv with suppressInlineKeyword = false } // dont' suppress 'inline' in 'val inline f = ...' + denv // 'Open' the path for the fragment we just compiled for any future printing. - let denv = denv.AddOpenPath (pathOfLid prefixPath) + let denv = denv.AddOpenPath (pathOfLid prefixPath) for (TImplFile (_qname,_,mexpr,_,_,_)) in declaredImpls do - let responseL = NicePrint.layoutInferredSigOfModuleExpr false denv infoReader AccessibleFromSomewhere rangeStdin mexpr - if not (isEmptyL responseL) then + let responseL = NicePrint.layoutInferredSigOfModuleExpr false denv infoReader AccessibleFromSomewhere rangeStdin mexpr + if not (Layout.isEmptyL responseL) then let opts = valuePrinter.GetFsiPrintOptions() Utilities.colorPrintL outWriter opts responseL |> ignore @@ -1219,7 +1210,7 @@ type internal FsiDynamicCompiler emEnv = emEnv; ilxGenerator = ilxGenerator; tcState = tcState } - + // Return the new state and the environment at the end of the last input, ready for further inputs. (istate,declaredImpls) @@ -1227,20 +1218,20 @@ type internal FsiDynamicCompiler #if DEBUG // Logging/debugging if tcConfig.printAst then - for input in declaredImpls do - fprintfn fsiConsoleOutput.Out "AST:" + for input in declaredImpls do + fprintfn fsiConsoleOutput.Out "AST:" fprintfn fsiConsoleOutput.Out "%+A" input #endif errorLogger.AbortOnError(fsiConsoleOutput); - + let importMap = tcImports.GetImportMap() - // optimize: note we collect the incremental optimization environment + // optimize: note we collect the incremental optimization environment let optimizedImpls, _optData, optEnv = ApplyAllOptimizations (tcConfig, tcGlobals, (LightweightTcValForUsingInBuildMethodCall tcGlobals), outfile, importMap, isIncrementalFragment, optEnv, tcState.Ccu, declaredImpls) errorLogger.AbortOnError(fsiConsoleOutput); - - let fragName = textOfLid prefixPath + + let fragName = textOfLid prefixPath let codegenResults = GenerateIlxCode (IlReflectBackend, isInteractiveItExpr, runningOnMono, tcConfig, topCustomAttrs, optimizedImpls, fragName, ilxGenerator) errorLogger.AbortOnError(fsiConsoleOutput); codegenResults, optEnv, fragName @@ -1251,9 +1242,9 @@ type internal FsiDynamicCompiler let ilxGenerator = istate.ilxGenerator let tcConfig = TcConfig.Create(tcConfigB,validate=false) - // Typecheck. The lock stops the type checker running at the same time as the + // Typecheck. The lock stops the type checker running at the same time as the // server intellisense implementation (which is currently incomplete and #if disabled) - let (tcState:TcState), topCustomAttrs, declaredImpls, tcEnvAtEndOfLastInput = + let (tcState:TcState),topCustomAttrs,declaredImpls,tcEnvAtEndOfLastInput = lock tcLockObject (fun _ -> TypeCheckClosedInputSet(ctok, errorLogger.CheckForErrors, tcConfig, tcImports, tcGlobals, Some prefixPath, tcState, inputs)) let codegenResults, optEnv, fragName = ProcessTypedImpl(errorLogger, optEnv, tcState, tcConfig, isInteractiveItExpr, topCustomAttrs, prefixPath, isIncrementalFragment, declaredImpls, ilxGenerator) @@ -1269,8 +1260,8 @@ type internal FsiDynamicCompiler let nextFragmentId() = fragmentId <- fragmentId + 1; fragmentId - let mkFragmentPath i = - // NOTE: this text shows in exn traces and type names. Make it clear and fixed width + let mkFragmentPath i = + // NOTE: this text shows in exn traces and type names. Make it clear and fixed width [mkSynId rangeStdin (FsiDynamicModulePrefix + sprintf "%04d" i)] let processContents istate declaredImpls = @@ -1293,7 +1284,7 @@ type internal FsiDynamicCompiler if v.IsModuleValueOrMember && not v.IsMember then let fsiValueOpt = match v.Item with - | Item.Value vref -> + | Item.Value vref -> let fsiValueOpt = tryGetGeneratedValue istate cenv vref.Deref if fsiValueOpt.IsSome then boundValues <- boundValues |> NameMap.add v.CompiledName vref.Deref @@ -1336,7 +1327,7 @@ type internal FsiDynamicCompiler let amap = tcImports.GetImportMap() let prevCcuinfos = tcImports.GetImportedAssemblies() - + let rec import ccuinfos (ilTy: ILType) = let ccuinfos, tinst = (ilTy.GenericArgs, (ccuinfos, [])) @@ -1356,49 +1347,49 @@ type internal FsiDynamicCompiler | _ -> ccuinfos ccuinfos, ty - + let ilTy = convertReflectionTypeToILType reflectionTy if not (Import.CanImportILType amap range0 ilTy) then invalidOp (sprintf "Unable to import type, %A." reflectionTy) let ccuinfos, ty = import [] ilTy - let ccuinfos = - ccuinfos + let ccuinfos = + ccuinfos |> List.distinctBy (fun x -> x.FSharpViewOfMetadata.AssemblyName) |> List.filter (fun asm1 -> not (prevCcuinfos |> List.exists (fun asm2 -> asm2.FSharpViewOfMetadata.AssemblyName = asm1.FSharpViewOfMetadata.AssemblyName))) // After we have successfully imported the type, then we can add newly resolved ccus to the env. addCcusToIncrementalEnv istate ccuinfos, ty - member _.DynamicAssemblyName = assemblyName + member __.DynamicAssemblyName = assemblyName - member _.DynamicAssembly = (assemblyBuilder :> Assembly) + member __.DynamicAssembly = (assemblyBuilder :> Assembly) - member _.EvalParsedSourceFiles (ctok, errorLogger, istate, inputs) = + member __.EvalParsedSourceFiles (ctok, errorLogger, istate, inputs) = let i = nextFragmentId() - let prefix = mkFragmentPath i - // Ensure the path includes the qualifying name - let inputs = inputs |> List.map (PrependPathToInput prefix) + let prefix = mkFragmentPath i + // Ensure the path includes the qualifying name + let inputs = inputs |> List.map (PrependPathToInput prefix) let istate,_,_ = ProcessInputs (ctok, errorLogger, istate, inputs, true, false, false, prefix) istate /// Evaluate the given definitions and produce a new interactive state. - member _.EvalParsedDefinitions (ctok, errorLogger: ErrorLogger, istate, showTypes, isInteractiveItExpr, defs) = + member __.EvalParsedDefinitions (ctok, errorLogger: ErrorLogger, istate, showTypes, isInteractiveItExpr, defs) = let filename = Lexhelp.stdinMockFilename let i = nextFragmentId() let prefix = mkFragmentPath i let prefixPath = pathOfLid prefix - let impl = SynModuleOrNamespace(prefix,(*isRec*)false, SynModuleOrNamespaceKind.NamedModule,defs,PreXmlDoc.Empty,[],None,rangeStdin) + let impl = SynModuleOrNamespace(prefix,(*isRec*)false, NamedModule,defs,PreXmlDoc.Empty,[],None,rangeStdin) let input = ParsedInput.ImplFile (ParsedImplFileInput (filename,true, ComputeQualifiedNameOfFileFromUniquePath (rangeStdin,prefixPath),[],[],[impl],(true (* isLastCompiland *), false (* isExe *)) )) let istate,tcEnvAtEndOfLastInput,declaredImpls = ProcessInputs (ctok, errorLogger, istate, [input], showTypes, true, isInteractiveItExpr, prefix) - let tcState = istate.tcState + let tcState = istate.tcState let newState = { istate with tcState = tcState.NextStateAfterIncrementalFragment(tcEnvAtEndOfLastInput) } processContents newState declaredImpls /// Evaluate the given expression and produce a new interactive state. member fsiDynamicCompiler.EvalParsedExpression (ctok, errorLogger: ErrorLogger, istate, expr: SynExpr) = let tcConfig = TcConfig.Create (tcConfigB, validate=false) - let itName = "it" + let itName = "it" // Construct the code that saves the 'it' value into the 'SaveIt' register. let defs = fsiDynamicCompiler.BuildItBinding expr @@ -1406,15 +1397,14 @@ type internal FsiDynamicCompiler // Evaluate the overall definitions. let istate = fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, false, true, defs) |> fst // Snarf the type for 'it' via the binding - match istate.tcState.TcEnvFromImpls.NameEnv.FindUnqualifiedItem itName with - | NameResolution.Item.Value vref -> - if not tcConfig.noFeedback then - let infoReader = InfoReader(istate.tcGlobals, istate.tcImports.GetImportMap()) - valuePrinter.InvokeExprPrinter (istate.tcState.TcEnvFromImpls.DisplayEnv, infoReader, istate.emEnv, istate.ilxGenerator, vref) + match istate.tcState.TcEnvFromImpls.NameEnv.FindUnqualifiedItem itName with + | NameResolution.Item.Value vref -> + if not tcConfig.noFeedback then + valuePrinter.InvokeExprPrinter (istate.tcState.TcEnvFromImpls.DisplayEnv, istate.emEnv, istate.ilxGenerator, vref.Deref) /// Clear the value held in the previous "it" binding, if any, as long as it has never been referenced. match prevIt with - | Some prevVal when not prevVal.Deref.HasBeenReferenced -> + | Some prevVal when not prevVal.Deref.HasBeenReferenced -> istate.ilxGenerator.ClearGeneratedValue (valuePrinter.GetEvaluationContext istate.emEnv, prevVal.Deref) | _ -> () prevIt <- Some vref @@ -1429,39 +1419,39 @@ type internal FsiDynamicCompiler | _ -> istate, Completed None // Construct the code that saves the 'it' value into the 'SaveIt' register. - member _.BuildItBinding (expr: SynExpr) = + member __.BuildItBinding (expr: SynExpr) = let m = expr.Range - let itName = "it" + let itName = "it" let itID = mkSynId m itName //let itExp = SynExpr.Ident itID - let mkBind pat expr = SynBinding (None, SynBindingKind.Do, false, (*mutable*)false, [], PreXmlDoc.Empty, SynInfo.emptySynValData, pat, None, expr, m, DebugPointAtBinding.NoneAtInvisible) - let bindingA = mkBind (mkSynPatVar None itID) expr (* let it = *) // NOTE: the generalizability of 'expr' must not be damaged, e.g. this can't be an application + let mkBind pat expr = Binding (None, DoBinding, false, (*mutable*)false, [], PreXmlDoc.Empty, SynInfo.emptySynValData, pat, None, expr, m, NoDebugPointAtInvisibleBinding) + let bindingA = mkBind (mkSynPatVar None itID) expr (* let it = *) // NOTE: the generalizability of 'expr' must not be damaged, e.g. this can't be an application //let saverPath = ["Microsoft";"FSharp";"Compiler";"Interactive";"RuntimeHelpers";"SaveIt"] //let dots = List.replicate (saverPath.Length - 1) m //let bindingB = mkBind (SynPat.Wild m) (SynExpr.App (ExprAtomicFlag.NonAtomic, false, SynExpr.LongIdent (false, LongIdentWithDots(List.map (mkSynId m) saverPath,dots),None,m), itExp,m)) (* let _ = saverPath it *) let defA = SynModuleDecl.Let (false, [bindingA], m) //let defB = SynModuleDecl.Let (false, [bindingB], m) - + [defA (* ; defB *) ] // construct an invisible call to Debugger.Break(), in the specified range - member _.CreateDebuggerBreak (m : range) = + member __.CreateDebuggerBreak (m : range) = let breakPath = ["System";"Diagnostics";"Debugger";"Break"] let dots = List.replicate (breakPath.Length - 1) m let methCall = SynExpr.LongIdent (false, LongIdentWithDots(List.map (mkSynId m) breakPath, dots), None, m) let args = SynExpr.Const (SynConst.Unit, m) let breakStatement = SynExpr.App (ExprAtomicFlag.Atomic, false, methCall, args, m) - SynModuleDecl.DoExpr(DebugPointAtBinding.NoneAtDo, breakStatement, m) + SynModuleDecl.DoExpr(DebugPointForBinding.NoDebugPointAtDoBinding, breakStatement, m) - member _.EvalRequireReference (ctok, istate, m, path) = + member __.EvalRequireReference (ctok, istate, m, path) = if FileSystem.IsInvalidPathShim(path) then error(Error(FSIstrings.SR.fsiInvalidAssembly(path),m)) - // Check the file can be resolved before calling requireDLLReference + // Check the file can be resolved before calling requireDLLReference let resolutions = tcImports.ResolveAssemblyReference(ctok, AssemblyReference(m,path,None), ResolveAssemblyReferenceMode.ReportErrors) tcConfigB.AddReferencedAssemblyByPath(m,path) - let tcState = istate.tcState - let tcEnv,(_dllinfos,ccuinfos) = + let tcState = istate.tcState + let tcEnv,(_dllinfos,ccuinfos) = try RequireDLL (ctok, tcImports, tcState.TcEnvFromImpls, assemblyName, m, path) with e -> @@ -1470,12 +1460,12 @@ type internal FsiDynamicCompiler resolutions, { addCcusToIncrementalEnv istate ccuinfos with tcState = tcState.NextStateAfterIncrementalFragment(tcEnv) } - member _.EvalDependencyManagerTextFragment (packageManager:IDependencyManagerProvider, lt, m, path: string) = + member __.EvalDependencyManagerTextFragment (packageManager:IDependencyManagerProvider, lt, m, path: string) = tcConfigB.packageManagerLines <- PackageManagerLine.AddLineWithKey packageManager.Key lt path m tcConfigB.packageManagerLines needsPackageResolution <- true - member fsiDynamicCompiler.CommitDependencyManagerText (ctok, istate: FsiDynamicCompilerState, lexResourceManager, errorLogger) = + member fsiDynamicCompiler.CommitDependencyManagerText (ctok, istate: FsiDynamicCompilerState, lexResourceManager, errorLogger) = if not needsPackageResolution then istate else needsPackageResolution <- false @@ -1500,16 +1490,13 @@ type internal FsiDynamicCompiler packageManagerLines |> List.map (fun line -> directive line.Directive, line.Line) try - let tfm, rid = fsiOptions.FxResolver.GetTfmAndRid() - let result = fsiOptions.DependencyProvider.Resolve(dependencyManager, ".fsx", packageManagerTextLines, reportError m, tfm, rid, tcConfigB.implicitIncludeDir, "stdin.fsx", "stdin.fsx") + let result = fsiOptions.DependencyProvider.Resolve(dependencyManager, ".fsx", packageManagerTextLines, reportError m, executionTfm, executionRid, tcConfigB.implicitIncludeDir, "stdin.fsx", "stdin.fsx") if result.Success then for line in result.StdOut do Console.Out.WriteLine(line) for line in result.StdError do Console.Error.WriteLine(line) tcConfigB.packageManagerLines <- PackageManagerLine.SetLinesAsProcessed packageManagerKey tcConfigB.packageManagerLines for folder in result.Roots do tcConfigB.AddIncludePath(m, folder, "") - for resolution in result.Resolutions do - tcConfigB.AddReferencedAssemblyByPath(m, resolution) let scripts = result.SourceFiles |> Seq.toList if not (isNil scripts) then fsiDynamicCompiler.EvalSourceFiles(ctok, istate, m, scripts, lexResourceManager, errorLogger) @@ -1532,11 +1519,11 @@ type internal FsiDynamicCompiler member fsiDynamicCompiler.ProcessMetaCommandsFromInputAsInteractiveCommands(ctok, istate, sourceFile, inp) = WithImplicitHome - (tcConfigB, directoryName sourceFile) + (tcConfigB, directoryName sourceFile) (fun () -> - ProcessMetaCommandsFromInput + ProcessMetaCommandsFromInput ((fun st (m,nm) -> tcConfigB.TurnWarningOff(m,nm); st), - (fun st (m, path, directive) -> + (fun st (m, path, directive) -> let dm = tcImports.DependencyProvider.TryFindDependencyManagerInPath(tcConfigB.compilerToolPaths, getOutputDir tcConfigB, reportError m, path) @@ -1557,28 +1544,28 @@ type internal FsiDynamicCompiler | path, _ -> snd (fsiDynamicCompiler.EvalRequireReference (ctok, st, m, path)) ), - (fun _ _ -> ())) + (fun _ _ -> ())) (tcConfigB, inp, Path.GetDirectoryName sourceFile, istate)) member fsiDynamicCompiler.EvalSourceFiles(ctok, istate, m, sourceFiles, lexResourceManager, errorLogger: ErrorLogger) = let tcConfig = TcConfig.Create(tcConfigB,validate=false) - match sourceFiles with + match sourceFiles with | [] -> istate - | _ -> + | _ -> // use a set of source files as though they were command line inputs - let sourceFiles = sourceFiles |> List.map (fun nm -> tcConfig.ResolveSourceFile(m, nm, tcConfig.implicitIncludeDir),m) - + let sourceFiles = sourceFiles |> List.map (fun nm -> tcConfig.ResolveSourceFile(m, nm, tcConfig.implicitIncludeDir),m) + // Close the #load graph on each file and gather the inputs from the scripts. let tcConfig = TcConfig.Create(tcConfigB,validate=false) let closure = - LoadClosure.ComputeClosureOfScriptFiles(tcConfig, + LoadClosure.ComputeClosureOfScriptFiles(ctok, tcConfig, sourceFiles, CodeContext.CompilationAndEvaluation, lexResourceManager, fsiOptions.DependencyProvider) - + // Intent "[Loading %s]\n" (String.concat "\n and " sourceFiles) fsiConsoleOutput.uprintf "[%s " (FSIstrings.SR.fsiLoadingFilesPrefixText()) - closure.Inputs |> List.iteri (fun i input -> + closure.Inputs |> List.iteri (fun i input -> if i=0 then fsiConsoleOutput.uprintf "%s" input.FileName else fsiConsoleOutput.uprintnf " %s %s" (FSIstrings.SR.fsiLoadingFilesPrefixText()) input.FileName) fsiConsoleOutput.uprintfn "]" @@ -1587,25 +1574,27 @@ type internal FsiDynamicCompiler // Play errors and warnings from resolution closure.ResolutionDiagnostics |> List.iter diagnosticSink - + // Non-scripts will not have been parsed during #load closure so parse them now - let sourceFiles,inputs = - closure.Inputs - |> List.map (fun input-> + let sourceFiles,inputs = + closure.Inputs + |> List.map (fun input-> input.ParseDiagnostics |> List.iter diagnosticSink input.MetaCommandDiagnostics |> List.iter diagnosticSink - let parsedInput = - match input.SyntaxTree with + let parsedInput = + match input.SyntaxTree with | None -> ParseOneInputFile(tcConfig,lexResourceManager,["INTERACTIVE"],input.FileName,(true,false),errorLogger,(*retryLocked*)false) - | Some parseTree -> parseTree + | _-> input.SyntaxTree input.FileName, parsedInput) |> List.unzip errorLogger.AbortOnError(fsiConsoleOutput); + if inputs |> List.exists Option.isNone then failwith "parse error" + let inputs = List.map Option.get inputs let istate = (istate, sourceFiles, inputs) |||> List.fold2 (fun istate sourceFile input -> fsiDynamicCompiler.ProcessMetaCommandsFromInputAsInteractiveCommands(ctok, istate, sourceFile, input)) fsiDynamicCompiler.EvalParsedSourceFiles (ctok, errorLogger, istate, inputs) - member _.GetBoundValues istate = + member __.GetBoundValues istate = let cenv = SymbolEnv(istate.tcGlobals, istate.tcState.Ccu, Some istate.tcState.CcuSig, istate.tcImports) [ for pair in istate.boundValues do let nm = pair.Key @@ -1616,7 +1605,7 @@ type internal FsiDynamicCompiler | _ -> () ] - member _.TryFindBoundValue(istate, nm) = + member __.TryFindBoundValue(istate, nm) = match istate.boundValues.TryFind nm with | Some v -> let cenv = SymbolEnv(istate.tcGlobals, istate.tcState.Ccu, Some istate.tcState.CcuSig, istate.tcImports) @@ -1638,9 +1627,9 @@ type internal FsiDynamicCompiler invalidArg "name" "Name cannot be null or white-space." // Verify that the name is a valid identifier for a value. - FSharpLexer.Tokenize(SourceText.ofString name, + SourceCodeServices.Lexer.FSharpLexer.Lex(SourceText.ofString name, let mutable foundOne = false - fun t -> + fun t -> if not t.IsIdentifier || foundOne then invalidArg "name" "Name is not a valid identifier." foundOne <- true) @@ -1660,9 +1649,9 @@ type internal FsiDynamicCompiler // Build a simple module with a single 'let' decl with a default value. let moduleOrNamespace, v, impl = mkBoundValueTypedImpl istate.tcGlobals range0 qualifiedName.Text name ty - let tcEnvAtEndOfLastInput = + let tcEnvAtEndOfLastInput = CheckDeclarations.AddLocalSubModule tcGlobals amap range0 istate.tcState.TcEnvFromImpls moduleOrNamespace - |> CheckExpressions.AddLocalVal tcGlobals TcResultsSink.NoSink range0 v + |> CheckExpressions.AddLocalVal TcResultsSink.NoSink range0 v // Generate IL for the given typled impl and create new interactive state. let ilxGenerator = istate.ilxGenerator @@ -1681,13 +1670,13 @@ type internal FsiDynamicCompiler with | ex -> istate, CompletedWithReportedError(StopProcessingExn(Some ex)) - - member _.GetInitialInteractiveState () = + + member __.GetInitialInteractiveState () = let tcConfig = TcConfig.Create(tcConfigB,validate=false) let optEnv0 = GetInitialOptimizationEnv (tcImports, tcGlobals) let emEnv = ILRuntimeWriter.emEnv0 let tcEnv = GetInitialTcEnv (assemblyName, rangeStdin, tcConfig, tcImports, tcGlobals) - let ccuName = assemblyName + let ccuName = assemblyName let tcState = GetInitialTcState (rangeStdin, ccuName, tcConfig, tcGlobals, tcImports, niceNameGen, tcEnv) @@ -1701,15 +1690,15 @@ type internal FsiDynamicCompiler boundValues = NameMap.empty timing = false debugBreak = false - } + } - member _.CurrentPartialAssemblySignature(istate) = + member __.CurrentPartialAssemblySignature(istate) = FSharpAssemblySignature(istate.tcGlobals, istate.tcState.Ccu, istate.tcState.CcuSig, istate.tcImports, None, istate.tcState.CcuSig) - member _.FormatValue(obj:obj, objTy) = + member __.FormatValue(obj:obj, objTy) = valuePrinter.FormatValue(obj, objTy) - member _.ValueBound = valueBoundEvent.Publish + member __.ValueBound = valueBoundEvent.Publish //---------------------------------------------------------------------------- // ctrl-c handling @@ -1717,29 +1706,29 @@ type internal FsiDynamicCompiler type ControlEventHandler = delegate of int -> bool -// One strange case: when a TAE happens a strange thing +// One strange case: when a TAE happens a strange thing // occurs the next read from stdin always returns // 0 bytes, i.e. the channel will look as if it has been closed. So we check // for this condition explicitly. We also recreate the lexbuf whenever CtrlC kicks. -type internal FsiInterruptStdinState = - | StdinEOFPermittedBecauseCtrlCRecentlyPressed +type internal FsiInterruptStdinState = + | StdinEOFPermittedBecauseCtrlCRecentlyPressed | StdinNormal -type internal FsiInterruptControllerState = - | InterruptCanRaiseException - | InterruptIgnored +type internal FsiInterruptControllerState = + | InterruptCanRaiseException + | InterruptIgnored -type internal FsiInterruptControllerKillerThreadRequest = - | ThreadAbortRequest - | NoRequest - | ExitRequest +type internal FsiInterruptControllerKillerThreadRequest = + | ThreadAbortRequest + | NoRequest + | ExitRequest | PrintInterruptRequest type internal FsiInterruptController(fsiOptions: FsiCommandLineOptions, fsiConsoleOutput: FsiConsoleOutput) = let mutable stdinInterruptState = StdinNormal - let CTRL_C = 0 + let CTRL_C = 0 let mutable interruptAllowed = InterruptIgnored let mutable killThreadRequest = NoRequest @@ -1749,24 +1738,24 @@ type internal FsiInterruptController(fsiOptions: FsiCommandLineOptions, fsiConso let mutable posixReinstate = (fun () -> ()) - member _.Exit() = + member __.Exit() = if exitViaKillThread then killThreadRequest <- ExitRequest Thread.Sleep(1000) exit 0 - member _.FsiInterruptStdinState + member __.FsiInterruptStdinState with get () = stdinInterruptState and set v = stdinInterruptState <- v - member _.ClearInterruptRequest() = killThreadRequest <- NoRequest + member __.ClearInterruptRequest() = killThreadRequest <- NoRequest - member _.InterruptAllowed + member __.InterruptAllowed with set v = interruptAllowed <- v - member _.Interrupt() = ctrlEventActions |> List.iter (fun act -> act()) + member __.Interrupt() = ctrlEventActions |> List.iter (fun act -> act()) - member _.EventHandlers = ctrlEventHandlers + member __.EventHandlers = ctrlEventHandlers member controller.InstallKillThread(threadToKill:Thread, pauseMilliseconds:int) = @@ -1776,19 +1765,19 @@ type internal FsiInterruptController(fsiOptions: FsiCommandLineOptions, fsiConso fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiInterrupt()) stdinInterruptState <- StdinEOFPermittedBecauseCtrlCRecentlyPressed - if (interruptAllowed = InterruptCanRaiseException) then + if (interruptAllowed = InterruptCanRaiseException) then killThreadRequest <- ThreadAbortRequest - let killerThread = + let killerThread = new Thread(new ThreadStart(fun () -> use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID - // sleep long enough to allow ControlEventHandler handler on main thread to return - // Also sleep to give computations a bit of time to terminate + // sleep long enough to allow ControlEventHandler handler on main thread to return + // Also sleep to give computations a bit of time to terminate Thread.Sleep(pauseMilliseconds) - if (killThreadRequest = ThreadAbortRequest) then - if progress then fsiConsoleOutput.uprintnfn "%s" (FSIstrings.SR.fsiAbortingMainThread()) + if (killThreadRequest = ThreadAbortRequest) then + if progress then fsiConsoleOutput.uprintnfn "%s" (FSIstrings.SR.fsiAbortingMainThread()) killThreadRequest <- NoRequest threadToKill.Abort() - ()),Name="ControlCAbortThread") + ()),Name="ControlCAbortThread") killerThread.IsBackground <- true killerThread.Start() @@ -1798,18 +1787,18 @@ type internal FsiInterruptController(fsiOptions: FsiCommandLineOptions, fsiConso do Console.CancelKeyPress.Add(fsiInterruptHandler) - // WINDOWS TECHNIQUE: .NET has more safe points, and you can do more when a safe point. + // WINDOWS TECHNIQUE: .NET has more safe points, and you can do more when a safe point. // Hence we actually start up the killer thread within the handler. - let ctrlEventHandler = new ControlEventHandler(fun i -> if i = CTRL_C then (raiseCtrlC(); true) else false ) + let ctrlEventHandler = new ControlEventHandler(fun i -> if i = CTRL_C then (raiseCtrlC(); true) else false ) ctrlEventHandlers <- ctrlEventHandler :: ctrlEventHandlers ctrlEventActions <- raiseCtrlC :: ctrlEventActions exitViaKillThread <- false // don't exit via kill thread - member x.PosixInvoke(n:int) = + member x.PosixInvoke(n:int) = // we run this code once with n = -1 to make sure it is JITted before execution begins // since we are not allowed to JIT a signal handler. This also ensures the "PosixInvoke" // method is not eliminated by dead-code elimination - if n >= 0 then + if n >= 0 then posixReinstate() stdinInterruptState <- StdinEOFPermittedBecauseCtrlCRecentlyPressed killThreadRequest <- if (interruptAllowed = InterruptCanRaiseException) then ThreadAbortRequest else PrintInterruptRequest @@ -1823,39 +1812,39 @@ type internal FsiInterruptController(fsiOptions: FsiCommandLineOptions, fsiConso // From http://msdn.microsoft.com/en-us/library/ff527268.aspx // What the Event Handler Does // -// The handler for the AssemblyResolve event receives the display name of the assembly to -// be loaded, in the ResolveEventArgs.Name property. If the handler does not recognize the -// assembly name, it returns null (Nothing in Visual Basic, nullptr in Visual C++). +// The handler for the AssemblyResolve event receives the display name of the assembly to +// be loaded, in the ResolveEventArgs.Name property. If the handler does not recognize the +// assembly name, it returns null (Nothing in Visual Basic, nullptr in Visual C++). // -// - If the handler recognizes the assembly name, it can load and return an assembly that -// satisfies the request. The following list describes some sample scenarios. +// - If the handler recognizes the assembly name, it can load and return an assembly that +// satisfies the request. The following list describes some sample scenarios. // -// - If the handler knows the location of a version of the assembly, it can load the assembly by -// using the Assembly.LoadFrom or Assembly.LoadFile method, and can return the loaded assembly if successful. +// - If the handler knows the location of a version of the assembly, it can load the assembly by +// using the Assembly.LoadFrom or Assembly.LoadFile method, and can return the loaded assembly if successful. // -// - If the handler has access to a database of assemblies stored as byte arrays, it can load a byte array by -// using one of the Assembly.Load method overloads that take a byte array. +// - If the handler has access to a database of assemblies stored as byte arrays, it can load a byte array by +// using one of the Assembly.Load method overloads that take a byte array. // // - The handler can generate a dynamic assembly and return it. -// -// It is the responsibility of the event handler to return a suitable assembly. The handler can parse the display -// name of the requested assembly by passing the ResolveEventArgs.Name property value to the AssemblyName(String) -// constructor. Beginning with the .NET Framework version 4, the handler can use the ResolveEventArgs.RequestingAssembly -// property to determine whether the current request is a dependency of another assembly. This information can help +// +// It is the responsibility of the event handler to return a suitable assembly. The handler can parse the display +// name of the requested assembly by passing the ResolveEventArgs.Name property value to the AssemblyName(String) +// constructor. Beginning with the .NET Framework version 4, the handler can use the ResolveEventArgs.RequestingAssembly +// property to determine whether the current request is a dependency of another assembly. This information can help // identify an assembly that will satisfy the dependency. -// -// The event handler can return a different version of the assembly than the version that was requested. -// -// In most cases, the assembly that is returned by the handler appears in the load context, regardless of the context -// the handler loads it into. For example, if the handler uses the Assembly.LoadFrom method to load an assembly into -// the load-from context, the assembly appears in the load context when the handler returns it. However, in the following +// +// The event handler can return a different version of the assembly than the version that was requested. +// +// In most cases, the assembly that is returned by the handler appears in the load context, regardless of the context +// the handler loads it into. For example, if the handler uses the Assembly.LoadFrom method to load an assembly into +// the load-from context, the assembly appears in the load context when the handler returns it. However, in the following // case the assembly appears without context when the handler returns it: -// +// // - The handler loads an assembly without context. // - The ResolveEventArgs.RequestingAssembly property is not null. -// - The requesting assembly (that is, the assembly that is returned by the ResolveEventArgs.RequestingAssembly property) -// was loaded without context. -// +// - The requesting assembly (that is, the assembly that is returned by the ResolveEventArgs.RequestingAssembly property) +// was loaded without context. +// // On the coreclr we add an UnmanagedDll Resoution handler to ensure that native dll's can be searched for, // the desktop version of the Clr does not support this mechanism. // @@ -1866,7 +1855,7 @@ module internal MagicAssemblyResolution = // See bug 5501 for details on decision to use UnsafeLoadFrom here. // Summary: // It is an explicit user trust decision to load an assembly with #r. Scripts are not run automatically (for example, by double-clicking in explorer). - // We considered setting loadFromRemoteSources in fsi.exe.config but this would transitively confer unsafe loading to the code in the referenced + // We considered setting loadFromRemoteSources in fsi.exe.config but this would transitively confer unsafe loading to the code in the referenced // assemblies. Better to let those assemblies decide for themselves which is safer. [] let private assemblyLoadFrom (path:string) = Assembly.UnsafeLoadFrom(path) @@ -1875,96 +1864,89 @@ module internal MagicAssemblyResolution = let ResolveAssembly (ctok, m, tcConfigB, tcImports: TcImports, fsiDynamicCompiler: FsiDynamicCompiler, fsiConsoleOutput: FsiConsoleOutput, fullAssemName: string) = - try + try // Grab the name of the assembly let tcConfig = TcConfig.Create(tcConfigB,validate=false) let simpleAssemName = fullAssemName.Split([| ',' |]).[0] - if progress then fsiConsoleOutput.uprintfn "ATTEMPT MAGIC LOAD ON ASSEMBLY, simpleAssemName = %s" simpleAssemName // "Attempting to load a dynamically required assembly in response to an AssemblyResolve event by using known static assembly references..." + if progress then fsiConsoleOutput.uprintfn "ATTEMPT MAGIC LOAD ON ASSEMBLY, simpleAssemName = %s" simpleAssemName // "Attempting to load a dynamically required assembly in response to an AssemblyResolve event by using known static assembly references..." // Special case: Mono Windows Forms attempts to load an assembly called something like "Windows.Forms.resources" // We can't resolve this, so don't try. // REVIEW: Suggest 4481, delete this special case. - if (runningOnMono && simpleAssemName.EndsWith(".resources",StringComparison.OrdinalIgnoreCase)) || - simpleAssemName.EndsWith(".XmlSerializers", StringComparison.OrdinalIgnoreCase) || - (runningOnMono && simpleAssemName = "UIAutomationWinforms") then null - else + if simpleAssemName.EndsWith(".resources",StringComparison.OrdinalIgnoreCase) || + // See F# 1.0 Product Studio bug 1171 + simpleAssemName.EndsWith(".XmlSerializers",StringComparison.OrdinalIgnoreCase) || + (runningOnMono && simpleAssemName = "UIAutomationWinforms") then null else + // Special case: Is this the global unique dynamic assembly for FSI code? In this case just - // return the dynamic assembly itself. + // return the dynamic assembly itself. if fsiDynamicCompiler.DynamicAssemblyName = simpleAssemName then fsiDynamicCompiler.DynamicAssembly else // Otherwise continue - let assemblyReferenceTextDll = (simpleAssemName + ".dll") - let assemblyReferenceTextExe = (simpleAssemName + ".exe") + let assemblyReferenceTextDll = (simpleAssemName + ".dll") + let assemblyReferenceTextExe = (simpleAssemName + ".exe") let overallSearchResult = // OK, try to resolve as an existing DLL in the resolved reference set. This does unification by assembly name // once an assembly has been referenced. - let searchResult = tcImports.TryFindExistingFullyQualifiedPathBySimpleAssemblyName (simpleAssemName) + let searchResult = tcImports.TryFindExistingFullyQualifiedPathBySimpleAssemblyName (ctok, simpleAssemName) match searchResult with | Some r -> OkResult ([], Choice1Of2 r) - | _ -> + | _ -> // OK, try to resolve as a .dll let searchResult = tcImports.TryResolveAssemblyReference (ctok, AssemblyReference (m, assemblyReferenceTextDll, None), ResolveAssemblyReferenceMode.Speculative) match searchResult with | OkResult (warns,[r]) -> OkResult (warns, Choice1Of2 r.resolvedPath) - | _ -> + | _ -> // OK, try to resolve as a .exe let searchResult = tcImports.TryResolveAssemblyReference (ctok, AssemblyReference (m, assemblyReferenceTextExe, None), ResolveAssemblyReferenceMode.Speculative) match searchResult with | OkResult (warns, [r]) -> OkResult (warns, Choice1Of2 r.resolvedPath) - | _ -> + | _ -> if progress then fsiConsoleOutput.uprintfn "ATTEMPT LOAD, assemblyReferenceTextDll = %s" assemblyReferenceTextDll /// Take a look through the files quoted, perhaps with explicit paths - let searchResult = - (tcConfig.referencedDLLs - |> List.tryPick (fun assemblyReference -> + let searchResult = + (tcConfig.referencedDLLs + |> List.tryPick (fun assemblyReference -> if progress then fsiConsoleOutput.uprintfn "ATTEMPT MAGIC LOAD ON FILE, referencedDLL = %s" assemblyReference.Text - if System.String.Compare(FileSystemUtils.fileNameOfPath assemblyReference.Text, assemblyReferenceTextDll,StringComparison.OrdinalIgnoreCase) = 0 || - System.String.Compare(FileSystemUtils.fileNameOfPath assemblyReference.Text, assemblyReferenceTextExe,StringComparison.OrdinalIgnoreCase) = 0 then + if System.String.Compare(Filename.fileNameOfPath assemblyReference.Text, assemblyReferenceTextDll,StringComparison.OrdinalIgnoreCase) = 0 || + System.String.Compare(Filename.fileNameOfPath assemblyReference.Text, assemblyReferenceTextExe,StringComparison.OrdinalIgnoreCase) = 0 then Some(tcImports.TryResolveAssemblyReference (ctok, assemblyReference, ResolveAssemblyReferenceMode.Speculative)) else None )) match searchResult with | Some (OkResult (warns,[r])) -> OkResult (warns, Choice1Of2 r.resolvedPath) - | _ -> + | _ -> #if !NO_EXTENSIONTYPING match tcImports.TryFindProviderGeneratedAssemblyByName(ctok, simpleAssemName) with | Some(assembly) -> OkResult([],Choice2Of2 assembly) - | None -> + | None -> #endif // As a last resort, try to find the reference without an extension - match tcImports.TryFindExistingFullyQualifiedPathByExactAssemblyRef(ILAssemblyRef.Create(simpleAssemName,None,None,false,None,None)) with - | Some(resolvedPath) -> + match tcImports.TryFindExistingFullyQualifiedPathByExactAssemblyRef(ctok, ILAssemblyRef.Create(simpleAssemName,None,None,false,None,None)) with + | Some(resolvedPath) -> OkResult([],Choice1Of2 resolvedPath) - | None -> + | None -> ErrorResult([],Failure (FSIstrings.SR.fsiFailedToResolveAssembly(simpleAssemName))) - match overallSearchResult with + match overallSearchResult with | ErrorResult _ -> null - | OkResult _ -> + | OkResult _ -> let res = CommitOperationResult overallSearchResult - match res with - | Choice1Of2 assemblyName -> + match res with + | Choice1Of2 assemblyName -> if simpleAssemName <> "Mono.Posix" then fsiConsoleOutput.uprintfn "%s" (FSIstrings.SR.fsiBindingSessionTo(assemblyName)) - if isRunningOnCoreClr then - assemblyLoadFrom assemblyName - else - try - let an = AssemblyName.GetAssemblyName(assemblyName) - an.CodeBase <- assemblyName - Assembly.Load an - with | _ -> - assemblyLoadFrom assemblyName - | Choice2Of2 assembly -> + assemblyLoadFrom assemblyName + | Choice2Of2 assembly -> assembly with e -> @@ -1974,7 +1956,7 @@ module internal MagicAssemblyResolution = let rangeStdin = rangeN Lexhelp.stdinMockFilename 0 let resolveAssembly = new ResolveEventHandler(fun _ args -> - // Explanation: our understanding is that magic assembly resolution happens + // Explanation: our understanding is that magic assembly resolution happens // during compilation. So we recover the CompilationThreadToken here. let ctok = AssumeCompilationThreadWithoutEvidence () ResolveAssembly (ctok, rangeStdin, tcConfigB, tcImports, fsiDynamicCompiler, fsiConsoleOutput, args.Name)) @@ -1987,38 +1969,38 @@ module internal MagicAssemblyResolution = } //---------------------------------------------------------------------------- -// Reading stdin +// Reading stdin //---------------------------------------------------------------------------- type internal FsiStdinLexerProvider - (tcConfigB, fsiStdinSyphon, - fsiConsoleInput : FsiConsoleInput, - fsiConsoleOutput : FsiConsoleOutput, + (tcConfigB, fsiStdinSyphon, + fsiConsoleInput : FsiConsoleInput, + fsiConsoleOutput : FsiConsoleOutput, fsiOptions : FsiCommandLineOptions, - lexResourceManager : LexResourceManager) = + lexResourceManager : LexResourceManager) = // #light is the default for FSI - let interactiveInputLightSyntaxStatus = + let interactiveInputLightSyntaxStatus = let initialLightSyntaxStatus = tcConfigB.light <> Some false LightSyntaxStatus (initialLightSyntaxStatus, false (* no warnings *)) let isFeatureSupported featureId = tcConfigB.langVersion.SupportsFeature featureId - let LexbufFromLineReader (fsiStdinSyphon: FsiStdinSyphon) readF = + let LexbufFromLineReader (fsiStdinSyphon: FsiStdinSyphon) readF = UnicodeLexing.FunctionAsLexbuf - (true, isFeatureSupported, (fun (buf: char[], start, len) -> + (isFeatureSupported, (fun (buf: char[], start, len) -> //fprintf fsiConsoleOutput.Out "Calling ReadLine\n" let inputOption = try Some(readF()) with :? EndOfStreamException -> None inputOption |> Option.iter (fun t -> fsiStdinSyphon.Add (t + "\n")) - match inputOption with - | Some(null) | None -> + match inputOption with + | Some(null) | None -> if progress then fprintfn fsiConsoleOutput.Out "End of file from TextReader.ReadLine" 0 | Some (input:string) -> - let input = input + "\n" - let ninput = input.Length + let input = input + "\n" + let ninput = input.Length if ninput > len then fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiLineTooLong()) - let ntrimmed = min len ninput + let ntrimmed = min len ninput for i = 0 to ntrimmed-1 do buf.[i+start] <- input.[i] ntrimmed @@ -2037,7 +2019,7 @@ type internal FsiStdinLexerProvider let CreateLexerForLexBuffer (sourceFileName, lexbuf, errorLogger) = Lexhelp.resetLexbufPos sourceFileName lexbuf - let skip = true // don't report whitespace from lexer + let skip = true // don't report whitespace from lexer let defines = "INTERACTIVE"::tcConfigB.conditionalCompilationDefines let lexargs = mkLexargs (defines, interactiveInputLightSyntaxStatus, lexResourceManager, [], errorLogger, PathMap.empty) let tokenizer = LexFilter.LexFilter(interactiveInputLightSyntaxStatus, tcConfigB.compilingFslib, Lexer.token lexargs skip, lexbuf) @@ -2045,34 +2027,34 @@ type internal FsiStdinLexerProvider let isFeatureSupported featureId = tcConfigB.langVersion.SupportsFeature featureId - // Create a new lexer to read stdin - member _.CreateStdinLexer (errorLogger) = - let lexbuf = - match fsiConsoleInput.TryGetConsole() with - | Some console when fsiOptions.EnableConsoleKeyProcessing && not fsiOptions.UseServerPrompt -> - LexbufFromLineReader fsiStdinSyphon (fun () -> - match fsiConsoleInput.TryGetFirstLine() with + // Create a new lexer to read stdin + member __.CreateStdinLexer (errorLogger) = + let lexbuf = + match fsiConsoleInput.TryGetConsole() with + | Some console when fsiOptions.EnableConsoleKeyProcessing && not fsiOptions.IsInteractiveServer -> + LexbufFromLineReader fsiStdinSyphon (fun () -> + match fsiConsoleInput.TryGetFirstLine() with | Some firstLine -> firstLine | None -> console()) - | _ -> + | _ -> LexbufFromLineReader fsiStdinSyphon (fun () -> fsiConsoleInput.In.ReadLine() |> removeZeroCharsFromString) fsiStdinSyphon.Reset() CreateLexerForLexBuffer (Lexhelp.stdinMockFilename, lexbuf, errorLogger) // Create a new lexer to read an "included" script file - member _.CreateIncludedScriptLexer (sourceFileName, reader, errorLogger) = - let lexbuf = UnicodeLexing.StreamReaderAsLexbuf(true, isFeatureSupported, reader) + member __.CreateIncludedScriptLexer (sourceFileName, reader, errorLogger) = + let lexbuf = UnicodeLexing.StreamReaderAsLexbuf(isFeatureSupported, reader) CreateLexerForLexBuffer (sourceFileName, lexbuf, errorLogger) // Create a new lexer to read a string member this.CreateStringLexer (sourceFileName, source, errorLogger) = - let lexbuf = UnicodeLexing.StringAsLexbuf(true, isFeatureSupported, source) + let lexbuf = UnicodeLexing.StringAsLexbuf(isFeatureSupported, source) CreateLexerForLexBuffer (sourceFileName, lexbuf, errorLogger) - member _.ConsoleInput = fsiConsoleInput + member __.ConsoleInput = fsiConsoleInput - member _.CreateBufferLexer (sourceFileName, lexbuf, errorLogger) = CreateLexerForLexBuffer (sourceFileName, lexbuf, errorLogger) + member __.CreateBufferLexer (sourceFileName, lexbuf, errorLogger) = CreateLexerForLexBuffer (sourceFileName, lexbuf, errorLogger) //---------------------------------------------------------------------------- @@ -2081,8 +2063,8 @@ type internal FsiStdinLexerProvider //---------------------------------------------------------------------------- type internal FsiInteractionProcessor - (fsi: FsiEvaluationSessionHostConfig, - tcConfigB, + (fsi: FsiEvaluationSessionHostConfig, + tcConfigB, fsiOptions: FsiCommandLineOptions, fsiDynamicCompiler: FsiDynamicCompiler, fsiConsolePrompt : FsiConsolePrompt, @@ -2090,7 +2072,7 @@ type internal FsiInteractionProcessor fsiInterruptController : FsiInterruptController, fsiStdinLexerProvider : FsiStdinLexerProvider, lexResourceManager : LexResourceManager, - initialInteractiveState) = + initialInteractiveState) = let referencedAssemblies = Dictionary() @@ -2098,26 +2080,26 @@ type internal FsiInteractionProcessor let event = Control.Event() let setCurrState s = currState <- s; event.Trigger() - let runCodeOnEventLoop errorLogger f istate = - try - fsi.EventLoopInvoke (fun () -> + let runCodeOnEventLoop errorLogger f istate = + try + fsi.EventLoopInvoke (fun () -> - // Explanation: We assume the event loop on the 'fsi' object correctly transfers control to + // Explanation: We assume the event loop on the 'fsi' object correctly transfers control to // a unique compilation thread. let ctok = AssumeCompilationThreadWithoutEvidence() // FSI error logging on switched to thread InstallErrorLoggingOnThisThread errorLogger use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID - f ctok istate) - with _ -> + f ctok istate) + with _ -> (istate,Completed None) - - let InteractiveCatch (errorLogger: ErrorLogger) (f:_ -> _ * FsiInteractionStepStatus) istate = + + let InteractiveCatch (errorLogger: ErrorLogger) (f:_ -> _ * FsiInteractionStepStatus) istate = try - // reset error count - match errorLogger with - | :? ErrorLoggerThatStopsOnFirstError as errorLogger -> errorLogger.ResetErrorCount() + // reset error count + match errorLogger with + | :? ErrorLoggerThatStopsOnFirstError as errorLogger -> errorLogger.ResetErrorCount() | _ -> () f istate @@ -2131,42 +2113,42 @@ type internal FsiInteractionProcessor let ChangeDirectory (path:string) m = let tcConfig = TcConfig.Create(tcConfigB,validate=false) - let path = tcConfig.MakePathAbsolute path - if FileSystem.DirectoryExistsShim(path) then + let path = tcConfig.MakePathAbsolute path + if Directory.Exists(path) then tcConfigB.implicitIncludeDir <- path else error(Error(FSIstrings.SR.fsiDirectoryDoesNotExist(path),m)) /// Parse one interaction. Called on the parser thread. - let ParseInteraction (tokenizer:LexFilter.LexFilter) = - let mutable lastToken = Parser.ELSE // Any token besides SEMICOLON_SEMICOLON will do for initial value - try + let ParseInteraction (tokenizer:LexFilter.LexFilter) = + let mutable lastToken = Parser.ELSE // Any token besides SEMICOLON_SEMICOLON will do for initial value + try if progress then fprintfn fsiConsoleOutput.Out "In ParseInteraction..." - let input = - Lexhelp.reusingLexbufForParsing tokenizer.LexBuffer (fun () -> - let lexerWhichSavesLastToken _lexbuf = + let input = + Lexhelp.reusingLexbufForParsing tokenizer.LexBuffer (fun () -> + let lexerWhichSavesLastToken _lexbuf = let tok = tokenizer.GetToken() lastToken <- tok - tok + tok Parser.interaction lexerWhichSavesLastToken tokenizer.LexBuffer) Some input with e -> // On error, consume tokens until to ;; or EOF. // Caveat: Unless the error parse ended on ;; - so check the lastToken returned by the lexer function. - // Caveat: What if this was a look-ahead? That's fine! Since we need to skip to the ;; anyway. + // Caveat: What if this was a look-ahead? That's fine! Since we need to skip to the ;; anyway. if (match lastToken with Parser.SEMICOLON_SEMICOLON -> false | _ -> true) then let mutable tok = Parser.ELSE (* <-- any token <> SEMICOLON_SEMICOLON will do *) - while (match tok with Parser.SEMICOLON_SEMICOLON -> false | _ -> true) + while (match tok with Parser.SEMICOLON_SEMICOLON -> false | _ -> true) && not tokenizer.LexBuffer.IsPastEndOfStream do tok <- tokenizer.GetToken() - stopProcessingRecovery e range0 + stopProcessingRecovery e range0 None /// Execute a single parsed interaction. Called on the GUI/execute/main thread. - let ExecInteraction (ctok, tcConfig:TcConfig, istate, action:ParsedScriptInteraction, errorLogger: ErrorLogger) = + let ExecInteraction (ctok, tcConfig:TcConfig, istate, action:ParsedFsiInteraction, errorLogger: ErrorLogger) = let packageManagerDirective directive path m = let dm = fsiOptions.DependencyProvider.TryFindDependencyManagerInPath(tcConfigB.compilerToolPaths, getOutputDir tcConfigB, reportError m, path) match dm with @@ -2191,13 +2173,13 @@ type internal FsiInteractionProcessor if String.IsNullOrWhiteSpace(p) then "" else p let resolutions,istate = fsiDynamicCompiler.EvalRequireReference(ctok, istate, m, path) - resolutions |> List.iter (fun ar -> + resolutions |> List.iter (fun ar -> let format = if tcConfig.shadowCopyReferences then let resolvedPath = ar.resolvedPath.ToUpperInvariant() - let fileTime = FileSystem.GetLastWriteTimeShim(resolvedPath) + let fileTime = File.GetLastWriteTimeUtc(resolvedPath) match referencedAssemblies.TryGetValue resolvedPath with - | false, _ -> + | false, _ -> referencedAssemblies.Add(resolvedPath, fileTime) FSIstrings.SR.fsiDidAHashr(ar.resolvedPath) | true, time when time <> fileTime -> @@ -2210,116 +2192,116 @@ type internal FsiInteractionProcessor istate,Completed None istate |> InteractiveCatch errorLogger (fun istate -> - match action with - | ParsedScriptInteraction.Definitions ([], _) -> - let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) + match action with + | IDefns ([], _) -> + let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) istate,Completed None - | ParsedScriptInteraction.Definitions ([SynModuleDecl.DoExpr(_, expr, _)], _) -> - let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) + | IDefns ([SynModuleDecl.DoExpr(_, expr, _)], _) -> + let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) fsiDynamicCompiler.EvalParsedExpression(ctok, errorLogger, istate, expr) - | ParsedScriptInteraction.Definitions (defs,_) -> - let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) + | IDefns (defs,_) -> + let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, true, false, defs) - | ParsedScriptInteraction.HashDirective (ParsedHashDirective("load", ParsedHashDirectiveArguments sourceFiles, m), _) -> - let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) + | IHash (ParsedHashDirective("load", sourceFiles, m), _) -> + let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) fsiDynamicCompiler.EvalSourceFiles (ctok, istate, m, sourceFiles, lexResourceManager, errorLogger),Completed None - | ParsedScriptInteraction.HashDirective (ParsedHashDirective(("reference" | "r"), ParsedHashDirectiveArguments [path], m), _) -> + | IHash (ParsedHashDirective(("reference" | "r"), [path], m), _) -> packageManagerDirective Directive.Resolution path m - | ParsedScriptInteraction.HashDirective (ParsedHashDirective("i", ParsedHashDirectiveArguments [path], m), _) -> + | IHash (ParsedHashDirective("i", [path], m), _) -> packageManagerDirective Directive.Include path m - | ParsedScriptInteraction.HashDirective (ParsedHashDirective("I", ParsedHashDirectiveArguments [path], m), _) -> + | IHash (ParsedHashDirective("I", [path], m), _) -> tcConfigB.AddIncludePath (m, path, tcConfig.implicitIncludeDir) fsiConsoleOutput.uprintnfnn "%s" (FSIstrings.SR.fsiDidAHashI(tcConfig.MakePathAbsolute path)) istate, Completed None - | ParsedScriptInteraction.HashDirective (ParsedHashDirective("cd", ParsedHashDirectiveArguments [path], m), _) -> + | IHash (ParsedHashDirective("cd", [path], m), _) -> ChangeDirectory path m istate, Completed None - | ParsedScriptInteraction.HashDirective (ParsedHashDirective("silentCd", ParsedHashDirectiveArguments [path], m), _) -> + | IHash (ParsedHashDirective("silentCd", [path], m), _) -> ChangeDirectory path m fsiConsolePrompt.SkipNext() (* "silent" directive *) - istate, Completed None - - | ParsedScriptInteraction.HashDirective (ParsedHashDirective("dbgbreak", [], _), _) -> + istate, Completed None + + | IHash (ParsedHashDirective("dbgbreak", [], _), _) -> {istate with debugBreak = true}, Completed None - | ParsedScriptInteraction.HashDirective (ParsedHashDirective("time", [], _), _) -> + | IHash (ParsedHashDirective("time", [], _), _) -> if istate.timing then fsiConsoleOutput.uprintnfnn "%s" (FSIstrings.SR.fsiTurnedTimingOff()) else fsiConsoleOutput.uprintnfnn "%s" (FSIstrings.SR.fsiTurnedTimingOn()) {istate with timing = not istate.timing}, Completed None - | ParsedScriptInteraction.HashDirective (ParsedHashDirective("time", ParsedHashDirectiveArguments [("on" | "off") as v], _), _) -> + | IHash (ParsedHashDirective("time", [("on" | "off") as v], _), _) -> if v <> "on" then fsiConsoleOutput.uprintnfnn "%s" (FSIstrings.SR.fsiTurnedTimingOff()) else fsiConsoleOutput.uprintnfnn "%s" (FSIstrings.SR.fsiTurnedTimingOn()) {istate with timing = (v = "on")}, Completed None - | ParsedScriptInteraction.HashDirective (ParsedHashDirective("nowarn", ParsedHashDirectiveArguments numbers, m), _) -> + | IHash (ParsedHashDirective("nowarn", numbers, m), _) -> List.iter (fun (d:string) -> tcConfigB.TurnWarningOff(m, d)) numbers istate, Completed None - | ParsedScriptInteraction.HashDirective (ParsedHashDirective("terms", [], _), _) -> + | IHash (ParsedHashDirective("terms", [], _), _) -> tcConfigB.showTerms <- not tcConfig.showTerms istate, Completed None - | ParsedScriptInteraction.HashDirective (ParsedHashDirective("types", [], _), _) -> + | IHash (ParsedHashDirective("types", [], _), _) -> fsiOptions.ShowTypes <- not fsiOptions.ShowTypes istate, Completed None #if DEBUG - | ParsedScriptInteraction.HashDirective (ParsedHashDirective("ilcode", [], _m), _) -> - fsiOptions.ShowILCode <- not fsiOptions.ShowILCode; + | IHash (ParsedHashDirective("ilcode", [], _m), _) -> + fsiOptions.ShowILCode <- not fsiOptions.ShowILCode; istate, Completed None - | ParsedScriptInteraction.HashDirective (ParsedHashDirective("info", [], _m), _) -> + | IHash (ParsedHashDirective("info", [], _m), _) -> PrintOptionInfo tcConfigB istate, Completed None #endif - | ParsedScriptInteraction.HashDirective (ParsedHashDirective(("q" | "quit"), [], _), _) -> + | IHash (ParsedHashDirective(("q" | "quit"), [], _), _) -> fsiInterruptController.Exit() - | ParsedScriptInteraction.HashDirective (ParsedHashDirective("help", [], m), _) -> + | IHash (ParsedHashDirective("help", [], m), _) -> fsiOptions.ShowHelp(m) istate, Completed None - | ParsedScriptInteraction.HashDirective (ParsedHashDirective(c, ParsedHashDirectiveArguments arg, m), _) -> + | IHash (ParsedHashDirective(c, arg, m), _) -> warning(Error((FSComp.SR.fsiInvalidDirective(c, String.concat " " arg)), m)) istate, Completed None ) /// Execute a single parsed interaction which may contain multiple items to be executed /// independently, because some are #directives. Called on the GUI/execute/main thread. - /// + /// /// #directive comes through with other definitions as a SynModuleDecl.HashDirective. /// We split these out for individual processing. let rec execParsedInteractions (ctok, tcConfig, istate, action, errorLogger: ErrorLogger, lastResult:option, cancellationToken: CancellationToken) = cancellationToken.ThrowIfCancellationRequested() - let action,nextAction,istate = + let action,nextAction,istate = match action with | None -> None,None,istate - | Some (ParsedScriptInteraction.HashDirective _) -> action,None,istate - | Some (ParsedScriptInteraction.Definitions ([],_)) -> None,None,istate - | Some (ParsedScriptInteraction.Definitions (SynModuleDecl.HashDirective(hash,mh) :: defs,m)) -> - Some (ParsedScriptInteraction.HashDirective(hash,mh)),Some (ParsedScriptInteraction.Definitions(defs,m)),istate + | Some (IHash _) -> action,None,istate + | Some (IDefns ([],_)) -> None,None,istate + | Some (IDefns (SynModuleDecl.HashDirective(hash,mh) :: defs,m)) -> + Some (IHash(hash,mh)),Some (IDefns(defs,m)),istate - | Some (ParsedScriptInteraction.Definitions (defs,m)) -> + | Some (IDefns (defs,m)) -> let isDefHash = function SynModuleDecl.HashDirective(_,_) -> true | _ -> false - let isBreakable def = + let isBreakable def = // only add automatic debugger breaks before 'let' or 'do' expressions with sequence points match def with - | SynModuleDecl.DoExpr (DebugPointAtBinding.Yes _, _, _) - | SynModuleDecl.Let (_, SynBinding(_, _, _, _, _, _, _, _,_,_,_, DebugPointAtBinding.Yes _) :: _, _) -> true + | SynModuleDecl.DoExpr (DebugPointForBinding.DebugPointAtBinding _, _, _) + | SynModuleDecl.Let (_, SynBinding.Binding(_, _, _, _, _, _, _, _,_,_,_, DebugPointForBinding.DebugPointAtBinding _) :: _, _) -> true | _ -> false let defsA = Seq.takeWhile (isDefHash >> not) defs |> Seq.toList let defsB = Seq.skipWhile (isDefHash >> not) defs |> Seq.toList @@ -2336,9 +2318,9 @@ type internal FsiInteractionProcessor | _ -> defsA, istate else defsA,istate - // When the last declaration has a shape of DoExp (i.e., non-binding), + // When the last declaration has a shape of DoExp (i.e., non-binding), // transform it to a shape of "let it = ", so we can refer it. - let defsA = + let defsA = if not (isNil defsB) then defsA else match defsA with | [] -> defsA @@ -2348,7 +2330,7 @@ type internal FsiInteractionProcessor | SynModuleDecl.DoExpr(_,exp,_) :: rest -> (rest |> List.rev) @ (fsiDynamicCompiler.BuildItBinding exp) | _ -> defsA - Some (ParsedScriptInteraction.Definitions(defsA,m)),Some (ParsedScriptInteraction.Definitions(defsB,m)),istate + Some (IDefns(defsA,m)),Some (IDefns(defsB,m)),istate match action, lastResult with | None, Some prev -> assert(nextAction.IsNone); istate, prev @@ -2368,15 +2350,15 @@ type internal FsiInteractionProcessor let istate, completed = execParsedInteractions (ctok, tcConfig, istate, action, errorLogger, lastResult, cancellationToken) match completed with | Completed _ -> - let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) + let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) istate, completed | _ -> istate, completed /// Execute a single parsed interaction on the parser/execute thread. - let mainThreadProcessAction ctok action istate = - try + let mainThreadProcessAction ctok action istate = + try let tcConfig = TcConfig.Create(tcConfigB,validate=false) - if progress then fprintfn fsiConsoleOutput.Out "In mainThreadProcessAction..."; + if progress then fprintfn fsiConsoleOutput.Out "In mainThreadProcessAction..."; fsiInterruptController.InterruptAllowed <- InterruptCanRaiseException; let res = action ctok tcConfig istate fsiInterruptController.ClearInterruptRequest() @@ -2394,7 +2376,7 @@ type internal FsiInteractionProcessor stopProcessingRecovery e range0; istate, CompletedWithReportedError e - let mainThreadProcessParsedInteractions ctok errorLogger (action, istate) cancellationToken = + let mainThreadProcessParsedInteractions ctok errorLogger (action, istate) cancellationToken = istate |> mainThreadProcessAction ctok (fun ctok tcConfig istate -> executeParsedInteractions (ctok, tcConfig, istate, action, errorLogger, None, cancellationToken)) @@ -2402,92 +2384,89 @@ type internal FsiInteractionProcessor reusingLexbufForParsing tokenizer.LexBuffer (fun () -> Parser.typedSeqExprEOF (fun _ -> tokenizer.GetToken()) tokenizer.LexBuffer) - let mainThreadProcessParsedExpression ctok errorLogger (expr, istate) = + let mainThreadProcessParsedExpression ctok errorLogger (expr, istate) = istate |> InteractiveCatch errorLogger (fun istate -> istate |> mainThreadProcessAction ctok (fun ctok _tcConfig istate -> - fsiDynamicCompiler.EvalParsedExpression(ctok, errorLogger, istate, expr) )) + fsiDynamicCompiler.EvalParsedExpression(ctok, errorLogger, istate, expr) )) let commitResult (istate, result) = match result with | FsiInteractionStepStatus.CtrlC -> Choice2Of2 (Some (OperationCanceledException() :> exn)) | FsiInteractionStepStatus.EndOfFile -> Choice2Of2 (Some (System.Exception "End of input")) - | FsiInteractionStepStatus.Completed res -> + | FsiInteractionStepStatus.Completed res -> setCurrState istate Choice1Of2 res - | FsiInteractionStepStatus.CompletedWithReportedError (StopProcessingExn userExnOpt) -> + | FsiInteractionStepStatus.CompletedWithReportedError (StopProcessingExn userExnOpt) -> Choice2Of2 userExnOpt | FsiInteractionStepStatus.CompletedWithReportedError _ - | FsiInteractionStepStatus.CompletedWithAlreadyReportedError -> + | FsiInteractionStepStatus.CompletedWithAlreadyReportedError -> Choice2Of2 None - /// Parse then process one parsed interaction. + /// Parse then process one parsed interaction. /// /// During normal execution, this initially runs on the parser - /// thread, then calls runCodeOnMainThread when it has completed + /// thread, then calls runCodeOnMainThread when it has completed /// parsing and needs to typecheck and execute a definition. This blocks the parser thread /// until execution has competed on the GUI thread. /// /// During processing of startup scripts, this runs on the main thread. /// /// This is blocking: it reads until one chunk of input have been received, unless IsPastEndOfStream is true - member _.ParseAndExecOneSetOfInteractionsFromLexbuf (runCodeOnMainThread, istate:FsiDynamicCompilerState, tokenizer:LexFilter.LexFilter, errorLogger, ?cancellationToken: CancellationToken) = + member __.ParseAndExecOneSetOfInteractionsFromLexbuf (runCodeOnMainThread, istate:FsiDynamicCompilerState, tokenizer:LexFilter.LexFilter, errorLogger, ?cancellationToken: CancellationToken) = let cancellationToken = defaultArg cancellationToken CancellationToken.None - if tokenizer.LexBuffer.IsPastEndOfStream then - let stepStatus = - if fsiInterruptController.FsiInterruptStdinState = StdinEOFPermittedBecauseCtrlCRecentlyPressed then - fsiInterruptController.FsiInterruptStdinState <- StdinNormal; + if tokenizer.LexBuffer.IsPastEndOfStream then + let stepStatus = + if fsiInterruptController.FsiInterruptStdinState = StdinEOFPermittedBecauseCtrlCRecentlyPressed then + fsiInterruptController.FsiInterruptStdinState <- StdinNormal; CtrlC - else + else EndOfFile istate,stepStatus - else + else fsiConsolePrompt.Print(); - istate |> InteractiveCatch errorLogger (fun istate -> + istate |> InteractiveCatch errorLogger (fun istate -> if progress then fprintfn fsiConsoleOutput.Out "entering ParseInteraction..."; - // Parse the interaction. When FSI.EXE is waiting for input from the console the - // parser thread is blocked somewhere deep this call. + // Parse the interaction. When FSI.EXE is waiting for input from the console the + // parser thread is blocked somewhere deep this call. let action = ParseInteraction tokenizer if progress then fprintfn fsiConsoleOutput.Out "returned from ParseInteraction...calling runCodeOnMainThread..."; - // After we've unblocked and got something to run we switch - // over to the run-thread (e.g. the GUI thread) + // After we've unblocked and got something to run we switch + // over to the run-thread (e.g. the GUI thread) let res = istate |> runCodeOnMainThread (fun ctok istate -> mainThreadProcessParsedInteractions ctok errorLogger (action, istate) cancellationToken) if progress then fprintfn fsiConsoleOutput.Out "Just called runCodeOnMainThread, res = %O..." res; res) - - member _.CurrentState = currState + + member __.CurrentState = currState /// Perform an "include" on a script file (i.e. a script file specified on the command line) member processor.EvalIncludedScript (ctok, istate, sourceFile, m, errorLogger) = let tcConfig = TcConfig.Create(tcConfigB, validate=false) // Resolve the filename to an absolute filename - let sourceFile = tcConfig.ResolveSourceFile(m, sourceFile, tcConfig.implicitIncludeDir) - // During the processing of the file, further filenames are + let sourceFile = tcConfig.ResolveSourceFile(m, sourceFile, tcConfig.implicitIncludeDir) + // During the processing of the file, further filenames are // resolved relative to the home directory of the loaded file. WithImplicitHome (tcConfigB, directoryName sourceFile) (fun () -> // An included script file may contain maybe several interaction blocks. // We repeatedly parse and process these, until an error occurs. - - use fileStream = FileSystem.OpenFileForReadShim(sourceFile) - use reader = fileStream.GetReader(tcConfigB.inputCodePage, false) - + use reader = File.OpenReaderAndRetry (sourceFile, tcConfigB.inputCodePage, (*retryLocked*)false) let tokenizer = fsiStdinLexerProvider.CreateIncludedScriptLexer (sourceFile, reader, errorLogger) let rec run istate = let istate,cont = processor.ParseAndExecOneSetOfInteractionsFromLexbuf ((fun f istate -> f ctok istate), istate, tokenizer, errorLogger) - match cont with Completed _ -> run istate | _ -> istate,cont + match cont with Completed _ -> run istate | _ -> istate,cont - let istate,cont = run istate + let istate,cont = run istate match cont with | Completed _ -> failwith "EvalIncludedScript: Completed expected to have relooped" | CompletedWithAlreadyReportedError -> istate,CompletedWithAlreadyReportedError | CompletedWithReportedError e -> istate,CompletedWithReportedError e - | EndOfFile -> istate,Completed None// here file-EOF is normal, continue required + | EndOfFile -> istate,Completed None// here file-EOF is normal, continue required | CtrlC -> istate,CtrlC ) @@ -2503,8 +2482,8 @@ type internal FsiInteractionProcessor | Completed _ -> processor.EvalIncludedScripts (ctok, istate, moreSourceFiles, errorLogger) | CompletedWithAlreadyReportedError -> istate // do not process any more files | CompletedWithReportedError _ -> istate // do not process any more files - | CtrlC -> istate // do not process any more files - | EndOfFile -> assert false; istate // This is unexpected. EndOfFile is replaced by Completed in the called function + | CtrlC -> istate // do not process any more files + | EndOfFile -> assert false; istate // This is unexpected. EndOfFile is replaced by Completed in the called function member processor.LoadInitialFiles (ctok, errorLogger) = @@ -2512,34 +2491,34 @@ type internal FsiInteractionProcessor let rec consume istate sourceFiles = match sourceFiles with | [] -> istate - | (_,isScript1) :: _ -> - let sourceFiles,rest = List.takeUntil (fun (_,isScript2) -> isScript1 <> isScript2) sourceFiles - let sourceFiles = List.map fst sourceFiles - let istate = - if isScript1 then + | (_,isScript1) :: _ -> + let sourceFiles,rest = List.takeUntil (fun (_,isScript2) -> isScript1 <> isScript2) sourceFiles + let sourceFiles = List.map fst sourceFiles + let istate = + if isScript1 then processor.EvalIncludedScripts (ctok, istate, sourceFiles, errorLogger) - else - istate |> InteractiveCatch errorLogger (fun istate -> fsiDynamicCompiler.EvalSourceFiles(ctok, istate, rangeStdin, sourceFiles, lexResourceManager, errorLogger), Completed None) |> fst - consume istate rest + else + istate |> InteractiveCatch errorLogger (fun istate -> fsiDynamicCompiler.EvalSourceFiles(ctok, istate, rangeStdin, sourceFiles, lexResourceManager, errorLogger), Completed None) |> fst + consume istate rest setCurrState (consume currState fsiOptions.SourceFiles) - if not (List.isEmpty fsiOptions.SourceFiles) then + if not (List.isEmpty fsiOptions.SourceFiles) then fsiConsolePrompt.PrintAhead(); // Seems required. I expected this could be deleted. Why not? - /// Send a dummy interaction through F# Interactive, to ensure all the most common code generation paths are + /// Send a dummy interaction through F# Interactive, to ensure all the most common code generation paths are /// JIT'ed and ready for use. - member _.LoadDummyInteraction(ctok, errorLogger) = + member __.LoadDummyInteraction(ctok, errorLogger) = setCurrState (currState |> InteractiveCatch errorLogger (fun istate -> fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, true, false, []) |> fst, Completed None) |> fst) - - member _.EvalInteraction(ctok, sourceText, scriptFileName, errorLogger, ?cancellationToken) = + + member __.EvalInteraction(ctok, sourceText, scriptFileName, errorLogger, ?cancellationToken) = let cancellationToken = defaultArg cancellationToken CancellationToken.None use _unwind1 = ErrorLogger.PushThreadBuildPhaseUntilUnwind(ErrorLogger.BuildPhase.Interactive) use _unwind2 = ErrorLogger.PushErrorLoggerPhaseUntilUnwind(fun _ -> errorLogger) use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID - let lexbuf = UnicodeLexing.StringAsLexbuf(true, isFeatureSupported, sourceText) + let lexbuf = UnicodeLexing.StringAsLexbuf(isFeatureSupported, sourceText) let tokenizer = fsiStdinLexerProvider.CreateBufferLexer(scriptFileName, lexbuf, errorLogger) - currState + currState |> InteractiveCatch errorLogger (fun istate -> let expr = ParseInteraction tokenizer mainThreadProcessParsedInteractions ctok errorLogger (expr, istate) cancellationToken) @@ -2550,81 +2529,81 @@ type internal FsiInteractionProcessor let sourceText = sprintf "#load @\"%s\" " scriptPath this.EvalInteraction (ctok, sourceText, scriptPath, errorLogger) - member _.EvalExpression (ctok, sourceText, scriptFileName, errorLogger) = + member __.EvalExpression (ctok, sourceText, scriptFileName, errorLogger) = use _unwind1 = ErrorLogger.PushThreadBuildPhaseUntilUnwind(ErrorLogger.BuildPhase.Interactive) use _unwind2 = ErrorLogger.PushErrorLoggerPhaseUntilUnwind(fun _ -> errorLogger) use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID - let lexbuf = UnicodeLexing.StringAsLexbuf(true, isFeatureSupported, sourceText) + let lexbuf = UnicodeLexing.StringAsLexbuf(isFeatureSupported, sourceText) let tokenizer = fsiStdinLexerProvider.CreateBufferLexer(scriptFileName, lexbuf, errorLogger) - currState + currState |> InteractiveCatch errorLogger (fun istate -> - let expr = parseExpression tokenizer + let expr = parseExpression tokenizer let m = expr.Range // Make this into "(); expr" to suppress generalization and compilation-as-function let exprWithSeq = SynExpr.Sequential (DebugPointAtSequential.ExprOnly, true, SynExpr.Const (SynConst.Unit,m.StartRange), expr, m) mainThreadProcessParsedExpression ctok errorLogger (exprWithSeq, istate)) |> commitResult - member _.AddBoundValue(ctok, errorLogger, name, value: obj) = - currState - |> InteractiveCatch errorLogger (fun istate -> + member __.AddBoundValue(ctok, errorLogger, name, value: obj) = + currState + |> InteractiveCatch errorLogger (fun istate -> fsiDynamicCompiler.AddBoundValue(ctok, errorLogger, istate, name, value)) |> commitResult - member _.PartialAssemblySignatureUpdated = event.Publish + member __.PartialAssemblySignatureUpdated = event.Publish /// Start the background thread used to read the input reader and/or console /// /// This is the main stdin loop, running on the stdinReaderThread. - /// + /// // We run the actual computations for each action on the main GUI thread by using - // mainForm.Invoke to pipe a message back through the form's main event loop. (The message + // mainForm.Invoke to pipe a message back through the form's main event loop. (The message // is a delegate to execute on the main Thread) // - member processor.StartStdinReadAndProcessThread (errorLogger) = + member processor.StartStdinReadAndProcessThread (errorLogger) = if progress then fprintfn fsiConsoleOutput.Out "creating stdinReaderThread"; - let stdinReaderThread = + let stdinReaderThread = new Thread(new ThreadStart(fun () -> InstallErrorLoggingOnThisThread errorLogger // FSI error logging on stdinReaderThread, e.g. parse errors. use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID - try - try + try + try let initialTokenizer = fsiStdinLexerProvider.CreateStdinLexer(errorLogger) if progress then fprintfn fsiConsoleOutput.Out "READER: stdin thread started..."; // Delay until we've peeked the input or read the entire first line fsiStdinLexerProvider.ConsoleInput.WaitForInitialConsoleInput() - + if progress then fprintfn fsiConsoleOutput.Out "READER: stdin thread got first line..."; - let runCodeOnMainThread = runCodeOnEventLoop errorLogger + let runCodeOnMainThread = runCodeOnEventLoop errorLogger // Keep going until EndOfFile on the inReader or console - let rec loop currTokenizer = + let rec loop currTokenizer = - let istateNew,contNew = - processor.ParseAndExecOneSetOfInteractionsFromLexbuf (runCodeOnMainThread, currState, currTokenizer, errorLogger) + let istateNew,contNew = + processor.ParseAndExecOneSetOfInteractionsFromLexbuf (runCodeOnMainThread, currState, currTokenizer, errorLogger) setCurrState istateNew - match contNew with + match contNew with | EndOfFile -> () | CtrlC -> loop (fsiStdinLexerProvider.CreateStdinLexer(errorLogger)) // After each interrupt, restart to a brand new tokenizer | CompletedWithAlreadyReportedError - | CompletedWithReportedError _ + | CompletedWithReportedError _ | Completed _ -> loop currTokenizer loop initialTokenizer - if progress then fprintfn fsiConsoleOutput.Out "- READER: Exiting stdinReaderThread"; + if progress then fprintfn fsiConsoleOutput.Out "- READER: Exiting stdinReaderThread"; with e -> stopProcessingRecovery e range0; - finally - if progress then fprintfn fsiConsoleOutput.Out "- READER: Exiting process because of failure/exit on stdinReaderThread"; + finally + if progress then fprintfn fsiConsoleOutput.Out "- READER: Exiting process because of failure/exit on stdinReaderThread"; // REVIEW: On some flavors of Mono, calling exit may freeze the process if we're using the WinForms event handler // Basically, on Mono 2.6.3, the GUI thread may be left dangling on exit. At that point: // -- System.Environment.Exit will cause the process to stop responding @@ -2632,7 +2611,7 @@ type internal FsiInteractionProcessor // -- Calling Abort() on the Main thread or the GUI thread will have no effect, and the process will remain unresponsive // Also, even the the GUI thread is up and running, the WinForms event loop will be listed as closed // In this case, killing the process is harmless, since we've already cleaned up after ourselves and FSI is responding - // to an error. (CTRL-C is handled elsewhere.) + // to an error. (CTRL-C is handled elsewhere.) // We'll only do this if we're running on Mono, "--gui" is specified and our input is piped in from stdin, so it's still // fairly constrained. #if FX_NO_WINFORMS @@ -2650,14 +2629,14 @@ type internal FsiInteractionProcessor if progress then fprintfn fsiConsoleOutput.Out "MAIN: starting stdin thread..." stdinReaderThread.Start() - member _.CompletionsForPartialLID (istate, prefix:string) = + member __.CompletionsForPartialLID (istate, prefix:string) = let lid,stem = if prefix.IndexOf(".",StringComparison.Ordinal) >= 0 then let parts = prefix.Split('.') let n = parts.Length Array.sub parts 0 (n-1) |> Array.toList,parts.[n-1] else - [],prefix + [],prefix let tcState = istate.tcState let amap = istate.tcImports.GetImportMap() @@ -2667,15 +2646,15 @@ type internal FsiInteractionProcessor let nenv = tcState.TcEnvFromImpls.NameEnv let nItems = NameResolution.ResolvePartialLongIdent ncenv nenv (ConstraintSolver.IsApplicableMethApprox istate.tcGlobals amap rangeStdin) rangeStdin ad lid false - let names = nItems |> List.map (fun d -> d.DisplayName) - let names = names |> List.filter (fun name -> name.StartsWithOrdinal(stem)) + let names = nItems |> List.map (fun d -> d.DisplayName) + let names = names |> List.filter (fun name -> name.StartsWithOrdinal(stem)) names - member _.ParseAndCheckInteraction (legacyReferenceResolver, istate, text:string) = + member __.ParseAndCheckInteraction (ctok, legacyReferenceResolver, checker, istate, text:string) = let tcConfig = TcConfig.Create(tcConfigB,validate=false) - let fsiInteractiveChecker = FsiInteractiveChecker(legacyReferenceResolver, tcConfig, istate.tcGlobals, istate.tcImports, istate.tcState) - fsiInteractiveChecker.ParseAndCheckInteraction(SourceText.ofString text) + let fsiInteractiveChecker = FsiInteractiveChecker(legacyReferenceResolver, checker, tcConfig, istate.tcGlobals, istate.tcImports, istate.tcState) + fsiInteractiveChecker.ParseAndCheckInteraction(ctok, SourceText.ofString text) //---------------------------------------------------------------------------- @@ -2687,10 +2666,10 @@ let internal SpawnThread name f = th.IsBackground <- true; th.Start() -let internal SpawnInteractiveServer +let internal SpawnInteractiveServer (fsi: FsiEvaluationSessionHostConfig, - fsiOptions : FsiCommandLineOptions, - fsiConsoleOutput: FsiConsoleOutput) = + fsiOptions : FsiCommandLineOptions, + fsiConsoleOutput: FsiConsoleOutput) = //printf "Spawning fsi server on channel '%s'" !fsiServerName; SpawnThread "ServerThread" (fun () -> use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID @@ -2702,41 +2681,41 @@ let internal SpawnInteractiveServer /// Repeatedly drive the event loop (e.g. Application.Run()) but catching ThreadAbortException and re-running. /// /// This gives us a last chance to catch an abort on the main execution thread. -let internal DriveFsiEventLoop (fsi: FsiEvaluationSessionHostConfig, fsiConsoleOutput: FsiConsoleOutput) = - let rec runLoop() = +let internal DriveFsiEventLoop (fsi: FsiEvaluationSessionHostConfig, fsiConsoleOutput: FsiConsoleOutput) = + let rec runLoop() = if progress then fprintfn fsiConsoleOutput.Out "GUI thread runLoop"; - let restart = - try + let restart = + try // BLOCKING POINT: The GUI Thread spends most (all) of its time this event loop if progress then fprintfn fsiConsoleOutput.Out "MAIN: entering event loop..."; fsi.EventLoopRun() with | :? ThreadAbortException -> // If this TAE handler kicks it's almost certainly too late to save the - // state of the process - the state of the message loop may have been corrupted - fsiConsoleOutput.uprintnfn "%s" (FSIstrings.SR.fsiUnexpectedThreadAbortException()); + // state of the process - the state of the message loop may have been corrupted + fsiConsoleOutput.uprintnfn "%s" (FSIstrings.SR.fsiUnexpectedThreadAbortException()); (try Thread.ResetAbort() with _ -> ()); true // Try again, just case we can restart - | e -> + | e -> stopProcessingRecovery e range0; true // Try again, just case we can restart if progress then fprintfn fsiConsoleOutput.Out "MAIN: exited event loop..."; - if restart then runLoop() + if restart then runLoop() runLoop(); /// Thrown when there was an error compiling the given code in FSI. -type FsiCompilationException(message: string, errorInfos: FSharpDiagnostic[] option) = +type FsiCompilationException(message: string, errorInfos: FSharpErrorInfo[] option) = inherit System.Exception(message) - member _.ErrorInfos = errorInfos + member __.ErrorInfos = errorInfos /// The primary type, representing a full F# Interactive session, reading from the given /// text input, writing to the given text output and error writers. -type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], inReader:TextReader, outWriter:TextWriter, errorWriter: TextWriter, fsiCollectible: bool, legacyReferenceResolver: LegacyReferenceResolver option) = +type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], inReader:TextReader, outWriter:TextWriter, errorWriter: TextWriter, fsiCollectible: bool, legacyReferenceResolver: ReferenceResolver.Resolver option) = - do if not runningOnMono then UnmanagedProcessExecutionOptions.EnableHeapTerminationOnCorruption() (* SDL recommendation *) + do if not runningOnMono then Lib.UnmanagedProcessExecutionOptions.EnableHeapTerminationOnCorruption() (* SDL recommendation *) // Explanation: When FsiEvaluationSession.Create is called we do a bunch of processing. For fsi.exe // and fsiAnyCpu.exe there are no other active threads at this point, so we can assume this is the @@ -2754,7 +2733,8 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i // Testing shows "console coloring" is broken on some Mono configurations (e.g. Mono 2.4 Suse LiveCD). // To support fsi usage, the console coloring is switched off by default on Mono. - do if runningOnMono then enableConsoleColoring <- false + do if runningOnMono then enableConsoleColoring <- false + //---------------------------------------------------------------------------- // tcConfig - build the initial config @@ -2765,37 +2745,35 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i let defaultFSharpBinariesDir = FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(FSharpEnvironment.tryCurrentDomain()).Value - let legacyReferenceResolver = - match legacyReferenceResolver with + let legacyReferenceResolver = + match legacyReferenceResolver with | None -> SimulatedMSBuildReferenceResolver.getResolver() | Some rr -> rr let tcConfigB = - TcConfigBuilder.CreateNew(legacyReferenceResolver, - defaultFSharpBinariesDir=defaultFSharpBinariesDir, - reduceMemoryUsage=ReduceMemoryFlag.Yes, - implicitIncludeDir=currentDirectory, - isInteractive=true, - isInvalidationSupported=false, - defaultCopyFSharpCore=CopyFSharpCoreFlag.No, - tryGetMetadataSnapshot=tryGetMetadataSnapshot, - sdkDirOverride=None, - rangeForErrors=range0) + TcConfigBuilder.CreateNew(legacyReferenceResolver, + defaultFSharpBinariesDir=defaultFSharpBinariesDir, + reduceMemoryUsage=ReduceMemoryFlag.Yes, + implicitIncludeDir=currentDirectory, + isInteractive=true, + isInvalidationSupported=false, + defaultCopyFSharpCore=CopyFSharpCoreFlag.No, + tryGetMetadataSnapshot=tryGetMetadataSnapshot) let tcConfigP = TcConfigProvider.BasedOnMutableBuilder(tcConfigB) - do tcConfigB.resolutionEnvironment <- LegacyResolutionEnvironment.CompilationAndEvaluation // See Bug 3608 + do tcConfigB.resolutionEnvironment <- ResolutionEnvironment.CompilationAndEvaluation // See Bug 3608 do tcConfigB.useFsiAuxLib <- fsi.UseFsiAuxLib #if NETSTANDARD - do tcConfigB.SetUseSdkRefs true + do tcConfigB.useSdkRefs <- true do tcConfigB.useSimpleResolution <- true - do if FSharpEnvironment.isRunningOnCoreClr then SetTargetProfile tcConfigB "netcore" // always assume System.Runtime codegen + do SetTargetProfile tcConfigB "netcore" // always assume System.Runtime codegen #endif // Preset: --optimize+ -g --tailcalls+ (see 4505) do SetOptimizeSwitch tcConfigB OptionSwitch.On do SetDebugSwitch tcConfigB (Some "pdbonly") OptionSwitch.On - do SetTailcallSwitch tcConfigB OptionSwitch.On + do SetTailcallSwitch tcConfigB OptionSwitch.On #if NETSTANDARD // set platform depending on whether the current process is a 64-bit process. @@ -2812,21 +2790,11 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i let updateBannerText() = tcConfigB.productNameForBannerText <- FSIstrings.SR.fsiProductName(FSharpEnvironment.FSharpBannerVersion) - + do updateBannerText() // setting the correct banner so that 'fsi -?' display the right thing let fsiOptions = FsiCommandLineOptions(fsi, argv, tcConfigB, fsiConsoleOutput) - do - match fsiOptions.WriteReferencesAndExit with - | Some outFile -> - let tcConfig = tcConfigP.Get(ctokStartup) - let references, _unresolvedReferences = TcAssemblyResolutions.GetAssemblyResolutionInformation(tcConfig) - let lines = [ for r in references -> r.resolvedPath ] - FileSystem.OpenFileForWriteShim(outFile).WriteAllLines(lines) - exit 0 - | _ -> () - let fsiConsolePrompt = FsiConsolePrompt(fsiOptions, fsiConsoleOutput) do @@ -2840,44 +2808,42 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i with e -> warning(e) - do + do updateBannerText() // resetting banner text after parsing options - if tcConfigB.showBanner then + if tcConfigB.showBanner then fsiOptions.ShowBanner() do fsiConsoleOutput.uprintfn "" - // When no source files to load, print ahead prompt here - do if List.isEmpty fsiOptions.SourceFiles then - fsiConsolePrompt.PrintAhead() + // When no source files to load, print ahead prompt here + do if List.isEmpty fsiOptions.SourceFiles then + fsiConsolePrompt.PrintAhead() let fsiConsoleInput = FsiConsoleInput(fsi, fsiOptions, inReader, outWriter) /// The single, global interactive checker that can be safely used in conjunction with other operations - /// on the FsiEvaluationSession. + /// on the FsiEvaluationSession. let checker = FSharpChecker.Create(legacyReferenceResolver=legacyReferenceResolver) - let (tcGlobals,frameworkTcImports,nonFrameworkResolutions,unresolvedReferences) = - try + let (tcGlobals,frameworkTcImports,nonFrameworkResolutions,unresolvedReferences) = + try let tcConfig = tcConfigP.Get(ctokStartup) - checker.FrameworkImportsCache.Get (tcConfig) - |> NodeCode.RunImmediateWithoutCancellation - with e -> + checker.FrameworkImportsCache.Get (ctokStartup, tcConfig) |> Cancellable.runWithoutCancellation + with e -> stopProcessingRecovery e range0; failwithf "Error creating evaluation session: %A" e - let tcImports = - try - TcImports.BuildNonFrameworkTcImports(tcConfigP, frameworkTcImports, nonFrameworkResolutions, unresolvedReferences, fsiOptions.DependencyProvider) - |> NodeCode.RunImmediateWithoutCancellation - with e -> + let tcImports = + try + TcImports.BuildNonFrameworkTcImports(ctokStartup, tcConfigP, tcGlobals, frameworkTcImports, nonFrameworkResolutions, unresolvedReferences, fsiOptions.DependencyProvider) |> Cancellable.runWithoutCancellation + with e -> stopProcessingRecovery e range0; failwithf "Error creating evaluation session: %A" e - let niceNameGen = NiceNameGenerator() + let niceNameGen = NiceNameGenerator() // Share intern'd strings across all lexing/parsing - let lexResourceManager = new Lexhelp.LexResourceManager() + let lexResourceManager = new Lexhelp.LexResourceManager() /// The lock stops the type checker running at the same time as the server intellisense implementation. let tcLockObject = box 7 // any new object will do @@ -2889,9 +2855,9 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i #if !NO_EXTENSIONTYPING match tcImports.TryFindProviderGeneratedAssemblyByName (ctok, aref.Name) with | Some assembly -> Some (Choice2Of2 assembly) - | None -> + | None -> #endif - match tcImports.TryFindExistingFullyQualifiedPathByExactAssemblyRef (aref) with + match tcImports.TryFindExistingFullyQualifiedPathByExactAssemblyRef (ctok, aref) with | Some resolvedPath -> Some (Choice1Of2 resolvedPath) | None -> None @@ -2906,7 +2872,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i let fsiStdinLexerProvider = FsiStdinLexerProvider(tcConfigB, fsiStdinSyphon, fsiConsoleInput, fsiConsoleOutput, fsiOptions, lexResourceManager) - let fsiInteractionProcessor = FsiInteractionProcessor(fsi, tcConfigB, fsiOptions, fsiDynamicCompiler, fsiConsolePrompt, fsiConsoleOutput, fsiInterruptController, fsiStdinLexerProvider, lexResourceManager, initialInteractiveState) + let fsiInteractionProcessor = FsiInteractionProcessor(fsi, tcConfigB, fsiOptions, fsiDynamicCompiler, fsiConsolePrompt, fsiConsoleOutput, fsiInterruptController, fsiStdinLexerProvider, lexResourceManager, initialInteractiveState) // Raising an exception throws away the exception stack making diagnosis hard // this wraps the existing exception as the inner exception @@ -2922,8 +2888,8 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i | Choice2Of2 (Some userExn) -> raise (makeNestedException userExn) let commitResultNonThrowing errorOptions scriptFile (errorLogger: CompilationErrorLogger) res = - let errs = errorLogger.GetDiagnostics() - let errorInfos = DiagnosticHelpers.CreateDiagnostics (errorOptions, true, scriptFile, errs, true) + let errs = errorLogger.GetErrors() + let errorInfos = ErrorHelpers.CreateErrorInfos (errorOptions, true, scriptFile, errs, true) let userRes = match res with | Choice1Of2 r -> Choice1Of2 r @@ -2935,8 +2901,8 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i let dummyScriptFileName = "input.fsx" - interface IDisposable with - member x.Dispose() = + interface IDisposable with + member x.Dispose() = (tcImports :> IDisposable).Dispose() uninstallMagicAssemblyResolution.Dispose() @@ -2945,23 +2911,22 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i member x.Interrupt() = fsiInterruptController.Interrupt() /// A host calls this to get the completions for a long identifier, e.g. in the console - member x.GetCompletions(longIdent) = + member x.GetCompletions(longIdent) = fsiInteractionProcessor.CompletionsForPartialLID (fsiInteractionProcessor.CurrentState, longIdent) |> Seq.ofList - member x.ParseAndCheckInteraction(code) = - fsiInteractionProcessor.ParseAndCheckInteraction (legacyReferenceResolver, fsiInteractionProcessor.CurrentState, code) - |> Cancellable.runWithoutCancellation + member x.ParseAndCheckInteraction(code) = + let ctok = AssumeCompilationThreadWithoutEvidence () + fsiInteractionProcessor.ParseAndCheckInteraction (ctok, legacyReferenceResolver, checker.ReactorOps, fsiInteractionProcessor.CurrentState, code) member x.InteractiveChecker = checker - member x.CurrentPartialAssemblySignature = - fsiDynamicCompiler.CurrentPartialAssemblySignature (fsiInteractionProcessor.CurrentState) + member x.CurrentPartialAssemblySignature = + fsiDynamicCompiler.CurrentPartialAssemblySignature (fsiInteractionProcessor.CurrentState) - member x.DynamicAssembly = + member x.DynamicAssembly = fsiDynamicCompiler.DynamicAssembly - /// A host calls this to determine if the --gui parameter is active - member x.IsGui = fsiOptions.Gui + member x.IsGui = fsiOptions.Gui /// A host calls this to get the active language ID if provided by fsi-server-lcid member x.LCID = fsiOptions.FsiLCID @@ -2972,16 +2937,16 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i /// A host calls this to report an unhandled exception in a standard way, e.g. an exception on the GUI thread gets printed to stderr member x.ReportUnhandledException exn = x.ReportUnhandledExceptionSafe true exn - member x.ReportUnhandledExceptionSafe isFromThreadException (exn:exn) = + member x.ReportUnhandledExceptionSafe isFromThreadException (exn:exn) = fsi.EventLoopInvoke ( - fun () -> + fun () -> fprintfn fsiConsoleOutput.Error "%s" (exn.ToString()) errorLogger.SetError() - try - errorLogger.AbortOnError(fsiConsoleOutput) + try + errorLogger.AbortOnError(fsiConsoleOutput) with StopProcessing -> // BUG 664864 some window that use System.Windows.Forms.DataVisualization types (possible FSCharts) was created in FSI. - // at some moment one chart has raised InvalidArgumentException from OnPaint, this exception was intercepted by the code in higher layer and + // at some moment one chart has raised InvalidArgumentException from OnPaint, this exception was intercepted by the code in higher layer and // passed to Application.OnThreadException. FSI has already attached its own ThreadException handler, inside it will log the original error // and then raise StopProcessing exception to unwind the stack (and possibly shut down current Application) and get to DriveFsiEventLoop. // DriveFsiEventLoop handles StopProcessing by suppressing it and restarting event loop from the beginning. @@ -2989,21 +2954,21 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i // http://msdn.microsoft.com/en-us/library/windows/desktop/ms633573(v=vs.85).aspx // Remarks: - // If your application runs on a 32-bit version of Windows operating system, uncaught exceptions from the callback - // will be passed onto higher-level exception handlers of your application when available. - // The system then calls the unhandled exception filter to handle the exception prior to terminating the process. + // If your application runs on a 32-bit version of Windows operating system, uncaught exceptions from the callback + // will be passed onto higher-level exception handlers of your application when available. + // The system then calls the unhandled exception filter to handle the exception prior to terminating the process. // If the PCA is enabled, it will offer to fix the problem the next time you run the application. - // However, if your application runs on a 64-bit version of Windows operating system or WOW64, - // you should be aware that a 64-bit operating system handles uncaught exceptions differently based on its 64-bit processor architecture, - // exception architecture, and calling convention. + // However, if your application runs on a 64-bit version of Windows operating system or WOW64, + // you should be aware that a 64-bit operating system handles uncaught exceptions differently based on its 64-bit processor architecture, + // exception architecture, and calling convention. // The following table summarizes all possible ways that a 64-bit Windows operating system or WOW64 handles uncaught exceptions. // 1. The system suppresses any uncaught exceptions. - // 2. The system first terminates the process, and then the Program Compatibility Assistant (PCA) offers to fix it the next time + // 2. The system first terminates the process, and then the Program Compatibility Assistant (PCA) offers to fix it the next time // you run the application. You can disable the PCA mitigation by adding a Compatibility section to the application manifest. - // 3. The system calls the exception filters but suppresses any uncaught exceptions when it leaves the callback scope, + // 3. The system calls the exception filters but suppresses any uncaught exceptions when it leaves the callback scope, // without invoking the associated handlers. // Behavior type 2 only applies to the 64-bit version of the Windows 7 operating system. - + // NOTE: tests on Win8 box showed that 64 bit version of the Windows 8 always apply type 2 behavior // Effectively this means that when StopProcessing exception is raised from ThreadException callback - it won't be intercepted in DriveFsiEventLoop. @@ -3012,7 +2977,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i // FIX: detect if current process in 64 bit running on Windows 7 or Windows 8 and if yes - swallow the StopProcessing and ScheduleRestart instead. // Visible behavior should not be different, previously exception unwinds the stack and aborts currently running Application. // After that it will be intercepted and suppressed in DriveFsiEventLoop. - // Now we explicitly shut down Application so after execution of callback will be completed the control flow + // Now we explicitly shut down Application so after execution of callback will be completed the control flow // will also go out of WinFormsEventLoop.Run and again get to DriveFsiEventLoop => restart the loop. I'd like the fix to be as conservative as possible // so we use special case for problematic case instead of just always scheduling restart. @@ -3037,12 +3002,12 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i member x.PartialAssemblySignatureUpdated = fsiInteractionProcessor.PartialAssemblySignatureUpdated - member x.FormatValue(reflectionValue:obj, reflectionType) = + member x.FormatValue(reflectionValue:obj, reflectionType) = fsiDynamicCompiler.FormatValue(reflectionValue, reflectionType) member x.EvalExpression(code) = - // Explanation: When the user of the FsiInteractiveSession object calls this method, the + // Explanation: When the user of the FsiInteractiveSession object calls this method, the // code is parsed, checked and evaluated on the calling thread. This means EvalExpression // is not safe to call concurrently. let ctok = AssumeCompilationThreadWithoutEvidence() @@ -3051,7 +3016,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i |> commitResult member x.EvalExpressionNonThrowing(code) = - // Explanation: When the user of the FsiInteractiveSession object calls this method, the + // Explanation: When the user of the FsiInteractiveSession object calls this method, the // code is parsed, checked and evaluated on the calling thread. This means EvalExpression // is not safe to call concurrently. let ctok = AssumeCompilationThreadWithoutEvidence() @@ -3062,7 +3027,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i |> commitResultNonThrowing errorOptions dummyScriptFileName errorLogger member x.EvalInteraction(code, ?cancellationToken) : unit = - // Explanation: When the user of the FsiInteractiveSession object calls this method, the + // Explanation: When the user of the FsiInteractiveSession object calls this method, the // code is parsed, checked and evaluated on the calling thread. This means EvalExpression // is not safe to call concurrently. let ctok = AssumeCompilationThreadWithoutEvidence() @@ -3072,7 +3037,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i |> ignore member x.EvalInteractionNonThrowing(code, ?cancellationToken) = - // Explanation: When the user of the FsiInteractiveSession object calls this method, the + // Explanation: When the user of the FsiInteractiveSession object calls this method, the // code is parsed, checked and evaluated on the calling thread. This means EvalExpression // is not safe to call concurrently. let ctok = AssumeCompilationThreadWithoutEvidence() @@ -3084,7 +3049,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i |> commitResultNonThrowing errorOptions "input.fsx" errorLogger member x.EvalScript(filePath) : unit = - // Explanation: When the user of the FsiInteractiveSession object calls this method, the + // Explanation: When the user of the FsiInteractiveSession object calls this method, the // code is parsed, checked and evaluated on the calling thread. This means EvalExpression // is not safe to call concurrently. let ctok = AssumeCompilationThreadWithoutEvidence() @@ -3094,7 +3059,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i |> ignore member x.EvalScriptNonThrowing(filePath) = - // Explanation: When the user of the FsiInteractiveSession object calls this method, the + // Explanation: When the user of the FsiInteractiveSession object calls this method, the // code is parsed, checked and evaluated on the calling thread. This means EvalExpression // is not safe to call concurrently. let ctok = AssumeCompilationThreadWithoutEvidence() @@ -3106,16 +3071,16 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i |> function Choice1Of2 (_), errs -> Choice1Of2 (), errs | Choice2Of2 exn, errs -> Choice2Of2 exn, errs /// Event fires when a root-level value is bound to an identifier, e.g., via `let x = ...`. - member _.ValueBound = fsiDynamicCompiler.ValueBound + member __.ValueBound = fsiDynamicCompiler.ValueBound - member _.GetBoundValues() = + member __.GetBoundValues() = fsiDynamicCompiler.GetBoundValues fsiInteractionProcessor.CurrentState - member _.TryFindBoundValue(name: string) = + member __.TryFindBoundValue(name: string) = fsiDynamicCompiler.TryFindBoundValue(fsiInteractionProcessor.CurrentState, name) - member _.AddBoundValue(name: string, value: obj) = - // Explanation: When the user of the FsiInteractiveSession object calls this method, the + member __.AddBoundValue(name: string, value: obj) = + // Explanation: When the user of the FsiInteractiveSession object calls this method, the // code is parsed, checked and evaluated on the calling thread. This means EvalExpression // is not safe to call concurrently. let ctok = AssumeCompilationThreadWithoutEvidence() @@ -3132,15 +3097,15 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i /// - Sit in the GUI event loop indefinitely, if needed /// /// This method only returns after "exit". The method repeatedly calls the event loop and - /// the thread may be subject to Thread.Abort() signals if Interrupt() is used, giving rise + /// the thread may be subject to Thread.Abort() signals if Interrupt() is used, giving rise /// to internal ThreadAbortExceptions. /// /// A background thread is started by this thread to read from the inReader and/or console reader. [] - member x.Run() = + member x.Run() = progress <- condition "FSHARP_INTERACTIVE_PROGRESS" - + // Explanation: When Run is called we do a bunch of processing. For fsi.exe // and fsiAnyCpu.exe there are no other active threads at this point, so we can assume this is the // unique compilation thread. For other users of FsiEvaluationSession it is reasonable to assume that @@ -3149,16 +3114,16 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i // We later switch to doing interaction-by-interaction processing on the "event loop" thread let ctokRun = AssumeCompilationThreadWithoutEvidence () - if not runningOnMono && fsiOptions.IsInteractiveServer then + if not runningOnMono && fsiOptions.IsInteractiveServer then SpawnInteractiveServer (fsi, fsiOptions, fsiConsoleOutput) use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Interactive - if fsiOptions.Interact then - // page in the type check env + if fsiOptions.Interact then + // page in the type check env fsiInteractionProcessor.LoadDummyInteraction(ctokStartup, errorLogger) if progress then fprintfn fsiConsoleOutput.Out "MAIN: InstallKillThread!"; - + // Compute how long to pause before a ThreadAbort is actually executed. // A somewhat arbitrary choice. let pauseMilliseconds = (if fsiOptions.Gui then 400 else 100) @@ -3169,15 +3134,15 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i #if !FX_NO_APP_DOMAINS // Route background exceptions to the exception handlers - AppDomain.CurrentDomain.UnhandledException.Add (fun args -> - match args.ExceptionObject with - | :? System.Exception as err -> x.ReportUnhandledExceptionSafe false err + AppDomain.CurrentDomain.UnhandledException.Add (fun args -> + match args.ExceptionObject with + | :? System.Exception as err -> x.ReportUnhandledExceptionSafe false err | _ -> ()) #endif fsiInteractionProcessor.LoadInitialFiles(ctokRun, errorLogger) - fsiInteractionProcessor.StartStdinReadAndProcessThread(errorLogger) + fsiInteractionProcessor.StartStdinReadAndProcessThread(errorLogger) DriveFsiEventLoop (fsi, fsiConsoleOutput ) @@ -3192,7 +3157,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i // to be explicitly kept alive. GC.KeepAlive fsiInterruptController.EventHandlers - static member Create(fsiConfig, argv, inReader, outWriter, errorWriter, ?collectible, ?legacyReferenceResolver) = + static member Create(fsiConfig, argv, inReader, outWriter, errorWriter, ?collectible, ?legacyReferenceResolver) = new FsiEvaluationSession(fsiConfig, argv, inReader, outWriter, errorWriter, defaultArg collectible false, legacyReferenceResolver) static member GetDefaultConfiguration(fsiObj:obj) = FsiEvaluationSession.GetDefaultConfiguration(fsiObj, true) @@ -3201,40 +3166,40 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i // We want to avoid modifying FSharp.Compiler.Interactive.Settings to avoid republishing that DLL. // So we access these via reflection { // Connect the configuration through to the 'fsi' object from FSharp.Compiler.Interactive.Settings - new FsiEvaluationSessionHostConfig () with - member _.FormatProvider = getInstanceProperty fsiObj "FormatProvider" - member _.FloatingPointFormat = getInstanceProperty fsiObj "FloatingPointFormat" - member _.AddedPrinters = getInstanceProperty fsiObj "AddedPrinters" - member _.ShowDeclarationValues = getInstanceProperty fsiObj "ShowDeclarationValues" - member _.ShowIEnumerable = getInstanceProperty fsiObj "ShowIEnumerable" - member _.ShowProperties = getInstanceProperty fsiObj "ShowProperties" - member _.PrintSize = getInstanceProperty fsiObj "PrintSize" - member _.PrintDepth = getInstanceProperty fsiObj "PrintDepth" - member _.PrintWidth = getInstanceProperty fsiObj "PrintWidth" - member _.PrintLength = getInstanceProperty fsiObj "PrintLength" - member _.ReportUserCommandLineArgs args = setInstanceProperty fsiObj "CommandLineArgs" args - member _.StartServer(fsiServerName) = failwith "--fsi-server not implemented in the default configuration" - member _.EventLoopRun() = callInstanceMethod0 (getInstanceProperty fsiObj "EventLoop") [||] "Run" - member _.EventLoopInvoke(f : unit -> 'T) = callInstanceMethod1 (getInstanceProperty fsiObj "EventLoop") [|typeof<'T>|] "Invoke" f - member _.EventLoopScheduleRestart() = callInstanceMethod0 (getInstanceProperty fsiObj "EventLoop") [||] "ScheduleRestart" - member _.UseFsiAuxLib = useFsiAuxLib - member _.GetOptionalConsoleReadLine(_probe) = None } + new FsiEvaluationSessionHostConfig () with + member __.FormatProvider = getInstanceProperty fsiObj "FormatProvider" + member __.FloatingPointFormat = getInstanceProperty fsiObj "FloatingPointFormat" + member __.AddedPrinters = getInstanceProperty fsiObj "AddedPrinters" + member __.ShowDeclarationValues = getInstanceProperty fsiObj "ShowDeclarationValues" + member __.ShowIEnumerable = getInstanceProperty fsiObj "ShowIEnumerable" + member __.ShowProperties = getInstanceProperty fsiObj "ShowProperties" + member __.PrintSize = getInstanceProperty fsiObj "PrintSize" + member __.PrintDepth = getInstanceProperty fsiObj "PrintDepth" + member __.PrintWidth = getInstanceProperty fsiObj "PrintWidth" + member __.PrintLength = getInstanceProperty fsiObj "PrintLength" + member __.ReportUserCommandLineArgs args = setInstanceProperty fsiObj "CommandLineArgs" args + member __.StartServer(fsiServerName) = failwith "--fsi-server not implemented in the default configuration" + member __.EventLoopRun() = callInstanceMethod0 (getInstanceProperty fsiObj "EventLoop") [||] "Run" + member __.EventLoopInvoke(f : unit -> 'T) = callInstanceMethod1 (getInstanceProperty fsiObj "EventLoop") [|typeof<'T>|] "Invoke" f + member __.EventLoopScheduleRestart() = callInstanceMethod0 (getInstanceProperty fsiObj "EventLoop") [||] "ScheduleRestart" + member __.UseFsiAuxLib = useFsiAuxLib + member __.GetOptionalConsoleReadLine(_probe) = None } //------------------------------------------------------------------------------- // If no "fsi" object for the configuration is specified, make the default -// configuration one which stores the settings in-process +// configuration one which stores the settings in-process -module Settings = +module Settings = type IEventLoop = abstract Run : unit -> bool - abstract Invoke : (unit -> 'T) -> 'T + abstract Invoke : (unit -> 'T) -> 'T abstract ScheduleRestart : unit -> unit - // fsi.fs in FSHarp.Compiler.Service.dll avoids a hard dependency on FSharp.Compiler.Interactive.Settings.dll + // fsi.fs in FSHarp.Compiler.Service.dll avoids a hard dependency on FSharp.Compiler.Interactive.Settings.dll // by providing an optional reimplementation of the functionality // An implementation of IEventLoop suitable for the command-line console [] - type internal SimpleEventLoop() = + type internal SimpleEventLoop() = let runSignal = new AutoResetEvent(false) let exitSignal = new AutoResetEvent(false) let doneSignal = new AutoResetEvent(false) @@ -3242,34 +3207,34 @@ module Settings = let mutable result = (None : obj option) let setSignal(signal : AutoResetEvent) = while not (signal.Set()) do Thread.Sleep(1); done let waitSignal signal = WaitHandle.WaitAll([| (signal :> WaitHandle) |]) |> ignore - let waitSignal2 signal1 signal2 = + let waitSignal2 signal1 signal2 = WaitHandle.WaitAny([| (signal1 :> WaitHandle); (signal2 :> WaitHandle) |]) let mutable running = false let mutable restart = false - interface IEventLoop with - member x.Run() = + interface IEventLoop with + member x.Run() = running <- true - let rec run() = - match waitSignal2 runSignal exitSignal with - | 0 -> - queue |> List.iter (fun f -> result <- try Some(f()) with _ -> None); + let rec run() = + match waitSignal2 runSignal exitSignal with + | 0 -> + queue |> List.iter (fun f -> result <- try Some(f()) with _ -> None); setSignal doneSignal run() - | 1 -> + | 1 -> running <- false; restart | _ -> run() run(); - member x.Invoke(f : unit -> 'T) : 'T = + member x.Invoke(f : unit -> 'T) : 'T = queue <- [f >> box] setSignal runSignal waitSignal doneSignal result.Value |> unbox - member x.ScheduleRestart() = - if running then + member x.ScheduleRestart() = + if running then restart <- true setSignal exitSignal - interface System.IDisposable with + interface System.IDisposable with member x.Dispose() = runSignal.Dispose() exitSignal.Dispose() @@ -3277,7 +3242,7 @@ module Settings = [] - type InteractiveSettings() = + type InteractiveSettings() = let mutable evLoop = (new SimpleEventLoop() :> IEventLoop) let mutable showIDictionary = true let mutable showDeclarationValues = true @@ -3292,72 +3257,72 @@ module Settings = let mutable showProperties = true let mutable addedPrinters = [] - member _.FloatingPointFormat with get() = fpfmt and set v = fpfmt <- v - member _.FormatProvider with get() = fp and set v = fp <- v - member _.PrintWidth with get() = printWidth and set v = printWidth <- v - member _.PrintDepth with get() = printDepth and set v = printDepth <- v - member _.PrintLength with get() = printLength and set v = printLength <- v - member _.PrintSize with get() = printSize and set v = printSize <- v - member _.ShowDeclarationValues with get() = showDeclarationValues and set v = showDeclarationValues <- v - member _.ShowProperties with get() = showProperties and set v = showProperties <- v - member _.ShowIEnumerable with get() = showIEnumerable and set v = showIEnumerable <- v - member _.ShowIDictionary with get() = showIDictionary and set v = showIDictionary <- v - member _.AddedPrinters with get() = addedPrinters and set v = addedPrinters <- v - member _.CommandLineArgs with get() = args and set v = args <- v - member _.AddPrinter(printer : 'T -> string) = + member __.FloatingPointFormat with get() = fpfmt and set v = fpfmt <- v + member __.FormatProvider with get() = fp and set v = fp <- v + member __.PrintWidth with get() = printWidth and set v = printWidth <- v + member __.PrintDepth with get() = printDepth and set v = printDepth <- v + member __.PrintLength with get() = printLength and set v = printLength <- v + member __.PrintSize with get() = printSize and set v = printSize <- v + member __.ShowDeclarationValues with get() = showDeclarationValues and set v = showDeclarationValues <- v + member __.ShowProperties with get() = showProperties and set v = showProperties <- v + member __.ShowIEnumerable with get() = showIEnumerable and set v = showIEnumerable <- v + member __.ShowIDictionary with get() = showIDictionary and set v = showIDictionary <- v + member __.AddedPrinters with get() = addedPrinters and set v = addedPrinters <- v + member __.CommandLineArgs with get() = args and set v = args <- v + member __.AddPrinter(printer : 'T -> string) = addedPrinters <- Choice1Of2 (typeof<'T>, (fun (x:obj) -> printer (unbox x))) :: addedPrinters - member _.EventLoop + member __.EventLoop with get () = evLoop and set (x:IEventLoop) = evLoop.ScheduleRestart(); evLoop <- x - member _.AddPrintTransformer(printer : 'T -> obj) = + member __.AddPrintTransformer(printer : 'T -> obj) = addedPrinters <- Choice2Of2 (typeof<'T>, (fun (x:obj) -> printer (unbox x))) :: addedPrinters - + let fsi = InteractiveSettings() -type FsiEvaluationSession with - static member GetDefaultConfiguration() = +type FsiEvaluationSession with + static member GetDefaultConfiguration() = FsiEvaluationSession.GetDefaultConfiguration(Settings.fsi, false) /// Defines a read-only input stream used to feed content to the hosted F# Interactive dynamic compiler. [] -type CompilerInputStream() = +type CompilerInputStream() = inherit Stream() - // Duration (in milliseconds) of the pause in the loop of waitForAtLeastOneByte. + // Duration (in milliseconds) of the pause in the loop of waitForAtLeastOneByte. let pauseDuration = 100 // Queue of characters waiting to be read. let readQueue = new Queue() let waitForAtLeastOneByte(count : int) = - let rec loop() = - let attempt = + let rec loop() = + let attempt = lock readQueue (fun () -> let n = readQueue.Count - if (n >= 1) then + if (n >= 1) then let lengthToRead = if (n < count) then n else count let ret = Array.zeroCreate lengthToRead for i in 0 .. lengthToRead - 1 do ret.[i] <- readQueue.Dequeue() Some ret - else + else None) - match attempt with + match attempt with | None -> System.Threading.Thread.Sleep(pauseDuration); loop() | Some res -> res - loop() + loop() - override x.CanRead = true + override x.CanRead = true override x.CanWrite = false override x.CanSeek = false override x.Position with get() = raise (NotSupportedException()) and set _v = raise (NotSupportedException()) - override x.Length = raise (NotSupportedException()) + override x.Length = raise (NotSupportedException()) override x.Flush() = () - override x.Seek(_offset, _origin) = raise (NotSupportedException()) - override x.SetLength(_value) = raise (NotSupportedException()) - override x.Write(_buffer, _offset, _count) = raise (NotSupportedException("Cannot write to input stream")) - override x.Read(buffer, offset, count) = + override x.Seek(_offset, _origin) = raise (NotSupportedException()) + override x.SetLength(_value) = raise (NotSupportedException()) + override x.Write(_buffer, _offset, _count) = raise (NotSupportedException("Cannot write to input stream")) + override x.Read(buffer, offset, count) = let bytes = waitForAtLeastOneByte count Array.Copy(bytes, 0, buffer, offset, bytes.Length) bytes.Length @@ -3366,7 +3331,7 @@ type CompilerInputStream() = member x.Add(str:string) = if (System.String.IsNullOrEmpty(str)) then () else - lock readQueue (fun () -> + lock readQueue (fun () -> let bytes = System.Text.Encoding.UTF8.GetBytes(str) for i in 0 .. bytes.Length - 1 do readQueue.Enqueue(bytes.[i])) @@ -3385,27 +3350,28 @@ type CompilerOutputStream() = override x.CanWrite = true override x.CanSeek = false override x.Position with get() = nyi() and set _v = nyi() - override x.Length = nyi() + override x.Length = nyi() override x.Flush() = () - override x.Seek(_offset, _origin) = nyi() - override x.SetLength(_value) = nyi() - override x.Read(_buffer, _offset, _count) = raise (NotSupportedException("Cannot write to input stream")) - override x.Write(buffer, offset, count) = + override x.Seek(_offset, _origin) = nyi() + override x.SetLength(_value) = nyi() + override x.Read(_buffer, _offset, _count) = raise (NotSupportedException("Cannot write to input stream")) + override x.Write(buffer, offset, count) = let stop = offset + count if (stop > buffer.Length) then raise (ArgumentException("offset,count")) - lock contentQueue (fun () -> + lock contentQueue (fun () -> for i in offset .. stop - 1 do contentQueue.Enqueue(buffer.[i])) - member x.Read() = - lock contentQueue (fun () -> + member x.Read() = + lock contentQueue (fun () -> let n = contentQueue.Count - if (n > 0) then + if (n > 0) then let bytes = Array.zeroCreate n - for i in 0 .. n-1 do - bytes.[i] <- contentQueue.Dequeue() + for i in 0 .. n-1 do + bytes.[i] <- contentQueue.Dequeue() System.Text.Encoding.UTF8.GetString(bytes, 0, n) else "") + diff --git a/src/fsharp/fsi/fsi.fsi b/src/fsharp/fsi/fsi.fsi index ba3bfc149cd..2d31d129182 100644 --- a/src/fsharp/fsi/fsi.fsi +++ b/src/fsharp/fsi/fsi.fsi @@ -1,68 +1,69 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + module public FSharp.Compiler.Interactive.Shell -open System open System.IO open System.Threading -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.Symbols +open FSharp.Compiler +open FSharp.Compiler.SourceCodeServices [] /// Represents an evaluated F# value type FsiValue = /// The value, as an object - member ReflectionValue: obj + member ReflectionValue : obj /// The type of the value, from the point of view of the .NET type system - member ReflectionType: Type + member ReflectionType : System.Type +#if COMPILER_API /// The type of the value, from the point of view of the F# type system - member FSharpType: FSharpType + member FSharpType : FSharpType +#endif [] /// Represents an evaluated F# value that is bound to an identifier type FsiBoundValue = /// The identifier of the value - member Name: string + member Name : string /// The evaluated F# value - member Value: FsiValue + member Value : FsiValue [] type EvaluationEventArgs = - inherit EventArgs + inherit System.EventArgs /// The display name of the symbol defined - member Name: string + member Name : string /// The value of the symbol defined, if any - member FsiValue: FsiValue option + member FsiValue : FsiValue option /// The FSharpSymbolUse for the symbol defined - member SymbolUse: FSharpSymbolUse + member SymbolUse : FSharpSymbolUse /// The symbol defined - member Symbol: FSharpSymbol + member Symbol : FSharpSymbol /// The details of the expression defined - member ImplementationDeclaration: FSharpImplementationFileDeclaration + member ImplementationDeclaration : FSharpImplementationFileDeclaration [] type public FsiEvaluationSessionHostConfig = - new: unit -> FsiEvaluationSessionHostConfig + new : unit -> FsiEvaluationSessionHostConfig /// Called by the evaluation session to ask the host for parameters to format text for output - abstract FormatProvider: IFormatProvider + abstract FormatProvider: System.IFormatProvider /// Called by the evaluation session to ask the host for parameters to format text for output abstract FloatingPointFormat: string /// Called by the evaluation session to ask the host for parameters to format text for output - abstract AddedPrinters: Choice<(Type * (obj -> string)), (Type * (obj -> obj))> list + abstract AddedPrinters : Choice<(System.Type * (obj -> string)), (System.Type * (obj -> obj))> list /// Called by the evaluation session to ask the host for parameters to format text for output abstract ShowDeclarationValues: bool @@ -71,26 +72,26 @@ type public FsiEvaluationSessionHostConfig = abstract ShowIEnumerable: bool /// Called by the evaluation session to ask the host for parameters to format text for output - abstract ShowProperties: bool + abstract ShowProperties : bool /// Called by the evaluation session to ask the host for parameters to format text for output - abstract PrintSize: int + abstract PrintSize : int /// Called by the evaluation session to ask the host for parameters to format text for output - abstract PrintDepth: int + abstract PrintDepth : int /// Called by the evaluation session to ask the host for parameters to format text for output - abstract PrintWidth: int + abstract PrintWidth : int /// Called by the evaluation session to ask the host for parameters to format text for output - abstract PrintLength: int + abstract PrintLength : int /// The evaluation session calls this to report the preferred view of the command line arguments after /// stripping things like "/use:file.fsx", "-r:Foo.dll" etc. - abstract ReportUserCommandLineArgs: string [] -> unit + abstract ReportUserCommandLineArgs : string [] -> unit /// Hook for listening for evaluation bindings - member OnEvaluation: IEvent + member OnEvaluation : IEvent /// /// Indicate a special console "readline" reader for the evaluation session, if any.  @@ -109,58 +110,58 @@ type public FsiEvaluationSessionHostConfig = ///   /// - abstract GetOptionalConsoleReadLine: probeToSeeIfConsoleWorks: bool -> (unit -> string) option + abstract GetOptionalConsoleReadLine : probeToSeeIfConsoleWorks: bool -> (unit -> string) option /// The evaluation session calls this at an appropriate point in the startup phase if the --fsi-server parameter was given - abstract StartServer: fsiServerName:string -> unit + abstract StartServer : fsiServerName:string -> unit /// Called by the evaluation session to ask the host to enter a dispatch loop like Application.Run(). /// Only called if --gui option is used (which is the default). /// Gets called towards the end of startup and every time a ThreadAbort escaped to the backup driver loop. /// Return true if a 'restart' is required, which is a bit meaningless. - abstract EventLoopRun: unit -> bool + abstract EventLoopRun : unit -> bool /// Request that the given operation be run synchronously on the event loop. - abstract EventLoopInvoke: codeToRun: (unit -> 'T) -> 'T + abstract EventLoopInvoke : codeToRun: (unit -> 'T) -> 'T /// Schedule a restart for the event loop. - abstract EventLoopScheduleRestart: unit -> unit + abstract EventLoopScheduleRestart : unit -> unit /// Implicitly reference FSharp.Compiler.Interactive.Settings.dll - abstract UseFsiAuxLib: bool + abstract UseFsiAuxLib : bool /// Thrown when there was an error compiling the given code in FSI. [] type FsiCompilationException = - inherit Exception - new: string * FSharpDiagnostic[] option -> FsiCompilationException - member ErrorInfos: FSharpDiagnostic[] option + inherit System.Exception + new : string * FSharpErrorInfo[] option -> FsiCompilationException + member ErrorInfos : FSharpErrorInfo[] option /// Represents an F# Interactive evaluation session. [] type FsiEvaluationSession = - interface IDisposable + interface System.IDisposable + /// Create an FsiEvaluationSession, reading from the given text input, writing to the given text output and error writers. + /// /// Create an FsiEvaluationSession, reading from the given text input, writing to the given text output and error writers /// /// The dynamic configuration of the evaluation session /// The command line arguments for the evaluation session /// Read input from the given reader - /// Write errors to the given writer /// Write output to the given writer /// Optionally make the dynamic assembly for the session collectible - /// An optional resolver for legacy MSBuild references - static member Create: fsiConfig: FsiEvaluationSessionHostConfig * argv:string[] * inReader:TextReader * outWriter:TextWriter * errorWriter: TextWriter * ?collectible: bool * ?legacyReferenceResolver: LegacyReferenceResolver -> FsiEvaluationSession + static member Create : fsiConfig: FsiEvaluationSessionHostConfig * argv:string[] * inReader:TextReader * outWriter:TextWriter * errorWriter: TextWriter * ?collectible: bool * ?legacyReferenceResolver: ReferenceResolver.Resolver -> FsiEvaluationSession /// A host calls this to request an interrupt on the evaluation thread. - member Interrupt: unit -> unit + member Interrupt : unit -> unit /// A host calls this to get the completions for a long identifier, e.g. in the console /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. - member GetCompletions: longIdent: string -> seq + member GetCompletions : longIdent: string -> seq /// Execute the code as if it had been entered as one or more interactions, with an /// implicit termination at the end of the input. Stop on first error, discarding the rest @@ -169,7 +170,7 @@ type FsiEvaluationSession = /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. - member EvalInteraction: code: string * ?cancellationToken: CancellationToken -> unit + member EvalInteraction : code: string * ?cancellationToken: CancellationToken -> unit /// Execute the code as if it had been entered as one or more interactions, with an /// implicit termination at the end of the input. Stop on first error, discarding the rest @@ -178,7 +179,7 @@ type FsiEvaluationSession = /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. - member EvalInteractionNonThrowing: code: string * ?cancellationToken: CancellationToken -> Choice * FSharpDiagnostic[] + member EvalInteractionNonThrowing : code: string * ?cancellationToken: CancellationToken -> Choice * FSharpErrorInfo[] /// Execute the given script. Stop on first error, discarding the rest /// of the script. Errors are sent to the output writer, a 'true' return value indicates there @@ -186,7 +187,7 @@ type FsiEvaluationSession = /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. - member EvalScript: filePath: string -> unit + member EvalScript : filePath: string -> unit /// Execute the given script. Stop on first error, discarding the rest /// of the script. Errors and warnings are collected apart from any exception arising from execution @@ -194,7 +195,7 @@ type FsiEvaluationSession = /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. - member EvalScriptNonThrowing: filePath: string -> Choice * FSharpDiagnostic[] + member EvalScriptNonThrowing : filePath: string -> Choice * FSharpErrorInfo[] /// Execute the code as if it had been entered as one or more interactions, with an /// implicit termination at the end of the input. Stop on first error, discarding the rest @@ -203,7 +204,7 @@ type FsiEvaluationSession = /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. - member EvalExpression: code: string -> FsiValue option + member EvalExpression : code: string -> FsiValue option /// Execute the code as if it had been entered as one or more interactions, with an /// implicit termination at the end of the input. Stop on first error, discarding the rest @@ -213,23 +214,26 @@ type FsiEvaluationSession = /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. - member EvalExpressionNonThrowing: code: string -> Choice * FSharpDiagnostic[] + member EvalExpressionNonThrowing : code: string -> Choice * FSharpErrorInfo[] /// Format a value to a string using the current PrintDepth, PrintLength etc settings provided by the active fsi configuration object - member FormatValue: reflectionValue: obj * reflectionType: Type -> string + member FormatValue : reflectionValue: obj * reflectionType: System.Type -> string /// Raised when an interaction is successfully typechecked and executed, resulting in an update to the /// type checking state. /// /// This event is triggered after parsing and checking, either via input from 'stdin', or via a call to EvalInteraction. - member PartialAssemblySignatureUpdated: IEvent + member PartialAssemblySignatureUpdated : IEvent /// Typecheck the given script fragment in the type checking context implied by the current state /// of F# Interactive. The results can be used to access intellisense, perform resolutions, /// check brace matching and other information. /// /// Operations may be run concurrently with other requests to the InteractiveChecker. - member ParseAndCheckInteraction: code: string -> FSharpParseFileResults * FSharpCheckFileResults * FSharpCheckProjectResults + /// + /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered + /// by input from 'stdin'. + member ParseAndCheckInteraction : code: string -> Async /// The single, global interactive checker to use in conjunction with other operations /// on the FsiEvaluationSession. @@ -239,33 +243,33 @@ type FsiEvaluationSession = member InteractiveChecker: FSharpChecker /// Get a handle to the resolved view of the current signature of the incrementally generated assembly. - member CurrentPartialAssemblySignature: FSharpAssemblySignature + member CurrentPartialAssemblySignature : FSharpAssemblySignature /// Get a handle to the dynamically generated assembly - member DynamicAssembly: System.Reflection.Assembly + member DynamicAssembly : System.Reflection.Assembly /// A host calls this to determine if the --gui parameter is active - member IsGui: bool + member IsGui : bool /// A host calls this to get the active language ID if provided by fsi-server-lcid - member LCID: int option + member LCID : int option /// A host calls this to report an unhandled exception in a standard way, e.g. an exception on the GUI thread gets printed to stderr - member ReportUnhandledException: exn: exn -> unit + member ReportUnhandledException : exn: exn -> unit /// Event fires when a root-level value is bound to an identifier, e.g., via `let x = ...`. - member ValueBound: IEvent + member ValueBound : IEvent /// Gets the root-level values that are bound to an identifier - member GetBoundValues: unit -> FsiBoundValue list + member GetBoundValues : unit -> FsiBoundValue list /// Tries to find a root-level value that is bound to the given identifier - member TryFindBoundValue: name: string -> FsiBoundValue option + member TryFindBoundValue : name: string -> FsiBoundValue option /// Creates a root-level value with the given name and .NET object. /// If the .NET object contains types from assemblies that are not referenced in the interactive session, it will try to implicitly resolve them by default configuration. /// Name must be a valid identifier. - member AddBoundValue: name: string * value: obj -> unit + member AddBoundValue : name: string * value: obj -> unit /// Load the dummy interaction, load the initial files, and, /// if interacting, start the background thread to read the standard input. @@ -277,7 +281,7 @@ type FsiEvaluationSession = /// - Start the background thread to read the standard input, if any /// - Sit in the GUI event loop indefinitely, if needed - member Run: unit -> unit + member Run : unit -> unit /// Get a configuration that uses the 'fsi' object (normally from FSharp.Compiler.Interactive.Settings.dll, /// an object from another DLL with identical characteristics) to provide an implementation of the configuration. @@ -300,12 +304,12 @@ module Settings = type IEventLoop = /// Run the event loop. /// True if the event loop was restarted; false otherwise. - abstract Run: unit -> bool + abstract Run : unit -> bool /// Request that the given operation be run synchronously on the event loop. /// The result of the operation. - abstract Invoke: (unit -> 'T) -> 'T + abstract Invoke : (unit -> 'T) -> 'T /// Schedule a restart for the event loop. - abstract ScheduleRestart: unit -> unit + abstract ScheduleRestart : unit -> unit [] /// Operations supported by the currently executing F# Interactive session. @@ -314,22 +318,22 @@ module Settings = member FloatingPointFormat: string with get,set /// Get or set the format provider used in the output of the interactive session. - member FormatProvider: IFormatProvider with get,set + member FormatProvider: System.IFormatProvider with get,set /// Get or set the print width of the interactive session. - member PrintWidth: int with get,set + member PrintWidth : int with get,set /// Get or set the print depth of the interactive session. - member PrintDepth: int with get,set + member PrintDepth : int with get,set /// Get or set the total print length of the interactive session. - member PrintLength: int with get,set + member PrintLength : int with get,set /// Get or set the total print size of the interactive session. - member PrintSize: int with get,set + member PrintSize : int with get,set /// When set to 'false', disables the display of properties of evaluated objects in the output of the interactive session. - member ShowProperties: bool with get,set + member ShowProperties : bool with get,set /// When set to 'false', disables the display of sequences in the output of the interactive session. member ShowIEnumerable: bool with get,set @@ -343,8 +347,8 @@ module Settings = /// Register a print transformer that controls the output of the interactive session. member AddPrintTransformer: ('T -> obj) -> unit - member internal AddedPrinters: Choice<(Type * (obj -> string)), - (Type * (obj -> obj))> list + member internal AddedPrinters : Choice<(System.Type * (obj -> string)), + (System.Type * (obj -> obj))> list /// The command line arguments after ignoring the arguments relevant to the interactive @@ -352,7 +356,7 @@ module Settings = /// if any. Thus 'fsi.exe test1.fs test2.fs -- hello goodbye' will give arguments /// 'test2.fs', 'hello', 'goodbye'. This value will normally be different to those /// returned by System.Environment.GetCommandLineArgs. - member CommandLineArgs: string [] with get,set + member CommandLineArgs : string [] with get,set /// Gets or sets a the current event loop being used to process interactions. member EventLoop: IEventLoop with get,set @@ -361,13 +365,13 @@ module Settings = /// is a different object to FSharp.Compiler.Interactive.Settings.fsi in FSharp.Compiler.Interactive.Settings.dll, /// which can be used as an alternative implementation of the interactive settings if passed as a parameter /// to GetDefaultConfiguration(fsiObj). - val fsi: InteractiveSettings + val fsi : InteractiveSettings /// Defines a read-only input stream used to feed content to the hosted F# Interactive dynamic compiler. [] type CompilerInputStream = inherit Stream - new: unit -> CompilerInputStream + new : unit -> CompilerInputStream /// Feeds content into the stream. member Add: str:string -> unit @@ -375,6 +379,6 @@ type CompilerInputStream = [] type CompilerOutputStream = inherit Stream - new: unit -> CompilerOutputStream + new : unit -> CompilerOutputStream - member Read: unit -> string + member Read : unit -> string diff --git a/src/fsharp/fsi/fsi.fsproj b/src/fsharp/fsi/fsi.fsproj index 9fd9b1333bf..7751134335e 100644 --- a/src/fsharp/fsi/fsi.fsproj +++ b/src/fsharp/fsi/fsi.fsproj @@ -5,14 +5,15 @@ Exe $(ProtoTargetFramework) - net472;net5.0 - net5.0 - $(NoWarn);44;45;55;62;75;1204 + net472;netcoreapp3.1 + netcoreapp3.1 + .exe + $(NoWarn);45;55;62;75;1204 true - $(OtherFlags) --warnon:1182 --maxerrors:20 --extraoptimizationloops:1 + --warnon:1182 --maxerrors:20 --extraoptimizationloops:1 fsi.res true - true + false @@ -31,8 +32,12 @@ - + + + + + @@ -46,7 +51,7 @@ - + diff --git a/src/fsharp/fsi/fsimain.fs b/src/fsharp/fsi/fsimain.fs index 142c5b8561c..18476c2cba7 100644 --- a/src/fsharp/fsi/fsimain.fs +++ b/src/fsharp/fsi/fsimain.fs @@ -25,14 +25,13 @@ open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.Interactive.Shell open FSharp.Compiler.Interactive.Shell.Settings -open FSharp.Compiler.CodeAnalysis #nowarn "55" #nowarn "40" // let rec on value 'fsiConfig' // Hardbinding dependencies should we NGEN fsi.exe -[] do () +[] do () [] do () // Standard attributes [] @@ -67,7 +66,7 @@ type WinFormsEventLoop() = let mutable lcid = None // Set the default thread exception handler let mutable restart = false - member _.LCID with get () = lcid and set v = lcid <- v + member __.LCID with get () = lcid and set v = lcid <- v interface IEventLoop with member x.Run() = restart <- false @@ -226,32 +225,32 @@ let evaluateSession(argv: string[]) = // Update the configuration to include 'StartServer', WinFormsEventLoop and 'GetOptionalConsoleReadLine()' let rec fsiConfig = { new FsiEvaluationSessionHostConfig () with - member _.FormatProvider = fsiConfig0.FormatProvider - member _.FloatingPointFormat = fsiConfig0.FloatingPointFormat - member _.AddedPrinters = fsiConfig0.AddedPrinters - member _.ShowDeclarationValues = fsiConfig0.ShowDeclarationValues - member _.ShowIEnumerable = fsiConfig0.ShowIEnumerable - member _.ShowProperties = fsiConfig0.ShowProperties - member _.PrintSize = fsiConfig0.PrintSize - member _.PrintDepth = fsiConfig0.PrintDepth - member _.PrintWidth = fsiConfig0.PrintWidth - member _.PrintLength = fsiConfig0.PrintLength - member _.ReportUserCommandLineArgs args = fsiConfig0.ReportUserCommandLineArgs args - member _.EventLoopRun() = + member __.FormatProvider = fsiConfig0.FormatProvider + member __.FloatingPointFormat = fsiConfig0.FloatingPointFormat + member __.AddedPrinters = fsiConfig0.AddedPrinters + member __.ShowDeclarationValues = fsiConfig0.ShowDeclarationValues + member __.ShowIEnumerable = fsiConfig0.ShowIEnumerable + member __.ShowProperties = fsiConfig0.ShowProperties + member __.PrintSize = fsiConfig0.PrintSize + member __.PrintDepth = fsiConfig0.PrintDepth + member __.PrintWidth = fsiConfig0.PrintWidth + member __.PrintLength = fsiConfig0.PrintLength + member __.ReportUserCommandLineArgs args = fsiConfig0.ReportUserCommandLineArgs args + member __.EventLoopRun() = #if !FX_NO_WINFORMS match (if fsiSession.IsGui then fsiWinFormsLoop.Value else None) with | Some l -> (l :> IEventLoop).Run() | _ -> #endif fsiConfig0.EventLoopRun() - member _.EventLoopInvoke(f) = + member __.EventLoopInvoke(f) = #if !FX_NO_WINFORMS match (if fsiSession.IsGui then fsiWinFormsLoop.Value else None) with | Some l -> (l :> IEventLoop).Invoke(f) | _ -> #endif fsiConfig0.EventLoopInvoke(f) - member _.EventLoopScheduleRestart() = + member __.EventLoopScheduleRestart() = #if !FX_NO_WINFORMS match (if fsiSession.IsGui then fsiWinFormsLoop.Value else None) with | Some l -> (l :> IEventLoop).ScheduleRestart() @@ -259,12 +258,12 @@ let evaluateSession(argv: string[]) = #endif fsiConfig0.EventLoopScheduleRestart() - member _.UseFsiAuxLib = fsiConfig0.UseFsiAuxLib + member __.UseFsiAuxLib = fsiConfig0.UseFsiAuxLib - member _.StartServer(fsiServerName) = StartServer fsiSession fsiServerName + member __.StartServer(fsiServerName) = StartServer fsiSession fsiServerName // Connect the configuration through to the 'fsi' Event loop - member _.GetOptionalConsoleReadLine(probe) = getConsoleReadLine(probe) } + member __.GetOptionalConsoleReadLine(probe) = getConsoleReadLine(probe) } // Create the console and fsiSession : FsiEvaluationSession = FsiEvaluationSession.Create (fsiConfig, argv, Console.In, Console.Out, Console.Error, collectible=false, legacyReferenceResolver=legacyReferenceResolver) @@ -316,7 +315,7 @@ let MainMain argv = let savedOut = Console.Out use __ = { new IDisposable with - member _.Dispose() = + member __.Dispose() = try Console.SetOut(savedOut) with _ -> ()} diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf index e7c41ab141d..0c2aa9acc9c 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - Operace nebyla úspěšná. Text chyby se vytiskl do streamu chyb. Pokud chcete vrátit odpovídající FSharpDiagnostic, použijte EvalInteractionNonThrowing, EvalScriptNonThrowing nebo EvalExpressionNonThrowing. + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Operace nebyla úspěšná. Text chyby se vytiskl do streamu chyb. Pokud chcete vrátit odpovídající FSharpErrorInfo, použijte EvalInteractionNonThrowing, EvalScriptNonThrowing nebo EvalExpressionNonThrowing. diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf index e75d448790d..d442378a937 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - Fehler beim Vorgang. Der Fehlertext wurde im Fehlerstream ausgegeben. Verwenden Sie "EvalInteractionNonThrowing", "EvalScriptNonThrowing" oder "EvalExpressionNonThrowing", um die entsprechende FSharpDiagnostic zurückzugeben. + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Der Vorgang ist fehlgeschlagen. Der Fehlertext wurde im Fehlerstream ausgegeben. Verwenden Sie EvalInteractionNonThrowing, EvalScriptNonThrowing oder EvalExpressionNonThrowing, um die entsprechende FSharpErrorInfo zurückzugeben. diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf index 21655a4e010..31bc8a60d52 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - Error en la operación. El texto del error se ha impreso en la secuencia de errores. Para devolver el valor FSharpDiagnostic correspondiente, use EvalInteractionNonThrowing, EvalScriptNonThrowing o EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Error en la operación. El texto del error se ha impreso en la secuencia de errores. Para devolver el correspondiente FSharpErrorInfo, use EvalInteractionNonThrowing, EvalScriptNonThrowing o EvalExpressionNonThrowing diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf index fc42cf0b812..1d0572f315a 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - Échec de l'opération. Le texte d'erreur est affiché dans le flux d'erreur. Pour retourner le FSharpDiagnostic correspondant, utilisez EvalInteractionNonThrowing, EvalScriptNonThrowing ou EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + L'opération a échoué. Le texte d'erreur a été imprimé dans le flux d'erreurs. Pour retourner le FSharpErrorInfo correspondant, utiliser EvalInteractionNonThrowing, EvalScriptNonThrowing ou EvalExpressionNonThrowing diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf index de4f016ad9a..2d496562205 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - L'operazione non è riuscita. Il testo dell'errore è stato stampato nel flusso degli errori. Per restituire l'elemento FSharpDiagnostic corrispondente, usare EvalInteractionNonThrowing, EvalScriptNonThrowing o EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + L'operazione non è riuscita. Il testo dell'errore è stato stampato nel flusso degli errori. Per restituire l'elemento FSharpErrorInfo corrispondente, usare EvalInteractionNonThrowing, EvalScriptNonThrowing o EvalExpressionNonThrowing diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf index 614ddf284ac..3978ef4fb3d 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - 操作に失敗しました。エラー テキストがエラー ストリームに出力されました。対応する FSharpDiagnostic を戻すには、EvalInteractionNonThrowing、EvalScriptNonThrowing、または EvalExpressionNonThrowing を使用します + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + 操作に失敗しました。エラー テキストがエラー ストリームで印刷されました。対応する FSharpErrorInfo を戻すには、EvalInteractionNonThrowing、EvalScriptuNonThrowing、または EvalExpressionNonThrowing を使用します diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf index 4f132496c00..c37c406c7aa 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - 작업이 실패했습니다. 오류 텍스트가 오류 스트림에 출력되었습니다. 해당 FSharpDiagnostic을 반환하려면 EvalInteractionNonThrowing, EvalScriptNonThrowing 또는 EvalExpressionNonThrowing을 사용하세요. + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + 작업이 실패했습니다. 오류 텍스트가 오류 스트림에 인쇄되었습니다. 해당 FSharpErrorInfo를 반환하려면 EvalInteractionNonThrowing, EvalScriptNonThrowing 또는 EvalExpressionNonThrowing를 사용하세요. diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf index 8806c4ace6e..2f3e40bfafe 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - Operacja nie powiodła się. Tekst błędu został umieszczony w strumieniu błędów. Aby zwrócić odpowiedni element FSharpDiagnostic, użyj elementu EvalInteractionNonThrowing, eEvalScriptNonThrowing lub EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Operacja nie powiodła się. Tekst błędu został umieszczony w strumieniu błędów. Aby zwrócić odpowiedni element FSharpErrorInfo, użyj elementu EvalInteractionNonThrowing, eEvalScriptNonThrowing lub EvalExpressionNonThrowing diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf index c67ed4a0e70..693fe83c4df 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - Falha na operação. O texto do erro foi impresso no fluxo de erros. Para retornar o FSharpDiagnostic correspondente, use EvalInteractionNonThrowing, EvalScriptNonThrowing ou EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Falha na operação. O texto do erro foi impresso no fluxo de erros. Para retornar o FSharpErrorInfo correspondente, use EvalInteractionNonThrowing, EvalScriptNonThrowing ou EvalExpressionNonThrowing diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf index efd1f831714..c1b74ff5748 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - Не удалось выполнить операцию. Текст ошибки был выведен в потоке ошибок. Чтобы вернуть соответствующие сведения FSharpDiagnostic, используйте EvalInteractionNonThrowing, EvalScriptNonThrowing или EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Не удалось выполнить операцию. Текст ошибки был выведен в потоке ошибок. Чтобы вернуть соответствующие сведения FSharpErrorInfo, используйте EvalInteractionNonThrowing, EvalScriptNonThrowing или EvalExpressionNonThrowing diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf index 0aa1916e2de..3e96fd14064 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - İşlem başarısız oldu. Hata metni hata akışında yazdırıldı. İlgili FSharpDiagnostic'i döndürmek için EvalInteractionNonThrowing, EvalScriptNonThrowing veya EvalExpressionNonThrowing kullanın + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + İşlem başarısız oldu. Hata metni hata akışında yazdırıldı. İlgili FSharpErrorInfo bilgilerini döndürmek için EvalInteractionNonThrowing, EvalScriptNonThrowing veya EvalExpressionNonThrowing kullanın diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf index d183e5f2349..2cb87ca1539 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - 操作失败。错误文本已在错误流中打印。若要返回相应的 FSharpDiagnostic,请使用 EvalInteractionNonThrowing、EvalScriptNonThrowing 或 EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + 操作失败。错误文本已在错误流中打印。要返回相应的 FSharpErrorInfo,请使用 EvalInteractionNonThrowing、EvalScriptNonThrowing 或 EvalExpressionNonThrowing diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf index ccb733230cb..f7346214d45 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - 作業失敗。錯誤文字已列印在錯誤串流中。若要傳回相對應的 FSharpDiagnostic,請使用 EvalInteractionNonThrowing、EvalScriptNonThrowing 或 EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + 作業失敗。錯誤文字已列印在錯誤資料流中。若要傳回相對應的 FSharpErrorInfo,請使用 EvalInteractionNonThrowing、EvalScriptNonThrowing 或 EvalExpressionNonThrowing diff --git a/src/fsharp/fsiAnyCpu/fsiAnyCpu.fsproj b/src/fsharp/fsiAnyCpu/fsiAnyCpu.fsproj index 85e7e6f929a..d39051b414c 100644 --- a/src/fsharp/fsiAnyCpu/fsiAnyCpu.fsproj +++ b/src/fsharp/fsiAnyCpu/fsiAnyCpu.fsproj @@ -7,7 +7,7 @@ net472 AnyCPU .exe - $(NoWarn);44;45;55;62;75;1204 + $(NoWarn);45;55;62;75;1204 true $(OtherFlags) --warnon:1182 --maxerrors:20 --extraoptimizationloops:1 ..\fsi\fsi.res @@ -30,7 +30,7 @@ - + diff --git a/src/fsharp/fsiaux.fs b/src/fsharp/fsiaux.fs index 3c12d56812d..f4c5ed9cd57 100644 --- a/src/fsharp/fsiaux.fs +++ b/src/fsharp/fsiaux.fs @@ -111,9 +111,9 @@ type InteractiveSession() = member internal self.SetEventLoop (run: (unit -> bool), invoke: ((unit -> obj) -> obj), restart: (unit -> unit)) = evLoop.ScheduleRestart() evLoop <- { new IEventLoop with - member _.Run() = run() - member _.Invoke(f) = invoke((fun () -> f() |> box)) |> unbox - member _.ScheduleRestart() = restart() } + member __.Run() = run() + member __.Invoke(f) = invoke((fun () -> f() |> box)) |> unbox + member __.ScheduleRestart() = restart() } [] do() diff --git a/src/fsharp/ilx/EraseClosures.fs b/src/fsharp/ilx/EraseClosures.fs index 13cd0d6cb5c..c56ae5797e6 100644 --- a/src/fsharp/ilx/EraseClosures.fs +++ b/src/fsharp/ilx/EraseClosures.fs @@ -1,13 +1,14 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.AbstractIL.ILX.EraseClosures +module internal FSharp.Compiler.AbstractIL.Extensions.ILX.EraseClosures -open Internal.Utilities.Library -open FSharp.Compiler.AbstractIL.ILX -open FSharp.Compiler.AbstractIL.ILX.Types + +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Extensions.ILX +open FSharp.Compiler.AbstractIL.Extensions.ILX.Types open FSharp.Compiler.AbstractIL.Morphs open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.PrettyNaming // -------------------------------------------------------------------- // Erase closures and function types @@ -104,13 +105,10 @@ let isSupportedDirectCall apps = // for more refined types later. // -------------------------------------------------------------------- -[] -let fsharpCoreNamespace = "Microsoft.FSharp.Core" - -let mkFuncTypeRef fsharpCoreAssemblyScopeRef n = - if n = 1 then mkILTyRef (fsharpCoreAssemblyScopeRef, fsharpCoreNamespace + ".FSharpFunc`2") - else mkILNestedTyRef (fsharpCoreAssemblyScopeRef, - [fsharpCoreNamespace + ".OptimizedClosures"], +let mkFuncTypeRef n = + if n = 1 then mkILTyRef (IlxSettings.ilxFsharpCoreLibScopeRef (), IlxSettings.ilxNamespace () + ".FSharpFunc`2") + else mkILNestedTyRef (IlxSettings.ilxFsharpCoreLibScopeRef (), + [IlxSettings.ilxNamespace () + ".OptimizedClosures"], "FSharpFunc`"+ string (n + 1)) type cenv = { @@ -127,7 +125,7 @@ type cenv = addMethodGeneratedAttrs: ILMethodDef -> ILMethodDef } - override _.ToString() = "" + override __.ToString() = "" let addMethodGeneratedAttrsToTypeDef cenv (tdef: ILTypeDef) = @@ -135,8 +133,8 @@ let addMethodGeneratedAttrsToTypeDef cenv (tdef: ILTypeDef) = let newIlxPubCloEnv(ilg, addMethodGeneratedAttrs, addFieldGeneratedAttrs, addFieldNeverAttrs) = { ilg = ilg - tref_Func = Array.init 10 (fun i -> mkFuncTypeRef ilg.fsharpCoreAssemblyScopeRef (i+1)) - mkILTyFuncTy = ILType.Boxed (mkILNonGenericTySpec (mkILTyRef (ilg.fsharpCoreAssemblyScopeRef, fsharpCoreNamespace + ".FSharpTypeFunc"))) + tref_Func = Array.init 10 (fun i -> mkFuncTypeRef(i+1)) + mkILTyFuncTy = ILType.Boxed (mkILNonGenericTySpec (mkILTyRef (IlxSettings.ilxFsharpCoreLibScopeRef (), IlxSettings.ilxNamespace () + ".FSharpTypeFunc"))) addMethodGeneratedAttrs = addMethodGeneratedAttrs addFieldGeneratedAttrs = addFieldGeneratedAttrs addFieldNeverAttrs = addFieldNeverAttrs } @@ -147,7 +145,7 @@ let mkILCurriedFuncTy cenv dtys rty = List.foldBack (mkILFuncTy cenv) dtys rty let typ_Func cenv (dtys: ILType list) rty = let n = dtys.Length - let tref = if n <= 10 then cenv.tref_Func.[n-1] else mkFuncTypeRef cenv.ilg.fsharpCoreAssemblyScopeRef n + let tref = if n <= 10 then cenv.tref_Func.[n-1] else mkFuncTypeRef n mkILBoxedTy tref (dtys @ [rty]) let rec mkTyOfApps cenv apps = @@ -314,17 +312,15 @@ let convILMethodBody (thisClo, boxReturnTy) (il: ILMethodBody) = match boxReturnTy with | None -> code | Some ty -> morphILInstrsInILCode (convReturnInstr ty) code - { il with MaxStack = newMax; Code = code } + {il with MaxStack=newMax; IsZeroInit=true; Code= code } let convMethodBody thisClo = function - | MethodBody.IL il -> - let convil = convILMethodBody (thisClo, None) il.Value - MethodBody.IL (lazy convil) + | MethodBody.IL il -> MethodBody.IL (convILMethodBody (thisClo, None) il) | x -> x let convMethodDef thisClo (md: ILMethodDef) = - let b' = convMethodBody thisClo (md.Body) - md.With(body=notlazy b') + let b' = convMethodBody thisClo (md.Body.Contents) + md.With(body=mkMethBodyAux b') // -------------------------------------------------------------------- // Make fields for free variables of a type abstraction. @@ -470,7 +466,6 @@ let rec convIlxClosureDef cenv encl (td: ILTypeDef) clo = else // CASE 1b. Build a type application. let boxReturnTy = Some nowReturnTy (* box prior to all I_ret *) - let convil = convILMethodBody (Some nowCloSpec, boxReturnTy) (Lazy.force clo.cloCode) let nowApplyMethDef = mkILGenericVirtualMethod ("Specialize", @@ -478,7 +473,7 @@ let rec convIlxClosureDef cenv encl (td: ILTypeDef) clo = addedGenParams, (* method is generic over added ILGenericParameterDefs *) [], mkILReturn(cenv.ilg.typ_Object), - MethodBody.IL (lazy convil)) + MethodBody.IL (convILMethodBody (Some nowCloSpec, boxReturnTy) (Lazy.force clo.cloCode))) let ctorMethodDef = mkILStorageCtor (None, @@ -570,13 +565,12 @@ let rec convIlxClosureDef cenv encl (td: ILTypeDef) clo = let nowEnvParentClass = typ_Func cenv (typesOfILParams nowParams) nowReturnTy let cloTypeDef = - let convil = convILMethodBody (Some nowCloSpec, None) (Lazy.force clo.cloCode) let nowApplyMethDef = mkILNonGenericVirtualMethod ("Invoke", ILMemberAccess.Public, nowParams, mkILReturn nowReturnTy, - MethodBody.IL (lazy convil)) + MethodBody.IL (convILMethodBody (Some nowCloSpec, None) (Lazy.force clo.cloCode))) let ctorMethodDef = mkILStorageCtor diff --git a/src/fsharp/ilx/EraseClosures.fsi b/src/fsharp/ilx/EraseClosures.fsi index f7426491da2..9a0d886ca53 100644 --- a/src/fsharp/ilx/EraseClosures.fsi +++ b/src/fsharp/ilx/EraseClosures.fsi @@ -1,21 +1,19 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// Compiler use only. Erase closures -module internal FSharp.Compiler.AbstractIL.ILX.EraseClosures +module internal FSharp.Compiler.AbstractIL.Extensions.ILX.EraseClosures +open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.ILX.Types +open FSharp.Compiler.AbstractIL.Extensions.ILX +open FSharp.Compiler.AbstractIL.Extensions.ILX.Types type cenv - val mkCallFunc : cenv -> allocLocal:(ILType -> uint16) -> numThisGenParams:int -> ILTailcall -> IlxClosureApps -> ILInstr list val mkILFuncTy : cenv -> ILType -> ILType -> ILType - val mkILTyFuncTy : cenv -> ILType - val newIlxPubCloEnv : ILGlobals * addMethodGeneratedAttrs: (ILMethodDef -> ILMethodDef) * addFieldGeneratedAttrs: (ILFieldDef -> ILFieldDef) * addFieldNeverAttrs: (ILFieldDef -> ILFieldDef) -> cenv - val mkTyOfLambdas: cenv -> IlxClosureLambdas -> ILType val convIlxClosureDef : cenv -> encl: string list -> ILTypeDef -> IlxClosureInfo -> ILTypeDef list diff --git a/src/fsharp/ilx/EraseUnions.fs b/src/fsharp/ilx/EraseUnions.fs index 84483698e3a..c24a30a6105 100644 --- a/src/fsharp/ilx/EraseUnions.fs +++ b/src/fsharp/ilx/EraseUnions.fs @@ -1,33 +1,34 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -/// Erase discriminated unions. -module internal FSharp.Compiler.AbstractIL.ILX.EraseUnions +// -------------------------------------------------------------------- +// Erase discriminated unions. +// -------------------------------------------------------------------- + + +module internal FSharp.Compiler.AbstractIL.Extensions.ILX.EraseUnions open System.Collections.Generic -open System.Reflection -open Internal.Utilities.Library + open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.ILX.Types +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Extensions.ILX.Types +open System.Reflection + [] let TagNil = 0 - [] let TagCons = 1 - [] let ALT_NAME_CONS = "Cons" type DiscriminationTechnique = /// Indicates a special representation for the F# list type where the "empty" value has a tail field of value null | TailOrNull - /// Indicates a type with either number of cases < 4, and not a single-class type with an integer tag (IntegerTag) | RuntimeTypes - /// Indicates a type with a single case, e.g. ``type X = ABC of string * int`` | SingleCase - /// Indicates a type with either cases >= 4, or a type like // type X = A | B | C // or type X = A | B | C of string @@ -162,41 +163,37 @@ let cuspecRepr = UnionReprDecisions ((fun (cuspec:IlxUnionSpec) -> cuspec.AlternativesArray), (fun (cuspec:IlxUnionSpec) -> cuspec.IsNullPermitted), - (fun (alt:IlxUnionCase) -> alt.IsNullary), + (fun (alt:IlxUnionAlternative) -> alt.IsNullary), (fun cuspec -> cuspec.HasHelpers = IlxUnionHasHelpers.SpecialFSharpListHelpers), (fun cuspec -> cuspec.Boxity = ILBoxity.AsValue), - (fun (alt:IlxUnionCase) -> alt.Name), + (fun (alt:IlxUnionAlternative) -> alt.Name), (fun cuspec -> cuspec.DeclaringType), (fun (cuspec,nm) -> mkILNamedTy cuspec.Boxity (mkILTyRefInTyRef (mkCasesTypeRef cuspec, nm)) cuspec.GenericArgs)) type NoTypesGeneratedViaThisReprDecider = NoTypesGeneratedViaThisReprDecider - let cudefRepr = UnionReprDecisions ((fun (_td,cud) -> cud.cudAlternatives), (fun (_td,cud) -> cud.cudNullPermitted), - (fun (alt:IlxUnionCase) -> alt.IsNullary), + (fun (alt:IlxUnionAlternative) -> alt.IsNullary), (fun (_td,cud) -> cud.cudHasHelpers = IlxUnionHasHelpers.SpecialFSharpListHelpers), (fun (td:ILTypeDef,_cud) -> td.IsStruct), - (fun (alt:IlxUnionCase) -> alt.Name), + (fun (alt:IlxUnionAlternative) -> alt.Name), (fun (_td,_cud) -> NoTypesGeneratedViaThisReprDecider), (fun ((_td,_cud),_nm) -> NoTypesGeneratedViaThisReprDecider)) let mkTesterName nm = "Is" + nm - let tagPropertyName = "Tag" -let mkUnionCaseFieldId (fdef: IlxUnionCaseField) = +let mkUnionCaseFieldId (fdef: IlxUnionField) = // Use the lower case name of a field or constructor as the field/parameter name if it differs from the uppercase name fdef.LowerName, fdef.Type let refToFieldInTy ty (nm, fldTy) = mkILFieldSpecInTy (ty, nm, fldTy) let formalTypeArgs (baseTy:ILType) = List.mapi (fun i _ -> mkILTyvarTy (uint16 i)) baseTy.GenericArgs - let constFieldName nm = "_unique_" + nm - let constFormalFieldTy (baseTy:ILType) = mkILNamedTy baseTy.Boxity baseTy.TypeRef (formalTypeArgs baseTy) @@ -206,18 +203,17 @@ let mkConstFieldSpecFromId (baseTy:ILType) constFieldId = let mkConstFieldSpec nm (baseTy:ILType) = mkConstFieldSpecFromId baseTy (constFieldName nm, constFormalFieldTy baseTy) + let tyForAlt cuspec alt = cuspecRepr.TypeForAlternative(cuspec,alt) let GetILTypeForAlternative cuspec alt = cuspecRepr.TypeForAlternative(cuspec,cuspec.Alternative alt) let mkTagFieldType (ilg: ILGlobals) _cuspec = ilg.typ_Int32 - let mkTagFieldFormalType (ilg: ILGlobals) _cuspec = ilg.typ_Int32 - let mkTagFieldId ilg cuspec = "_tag", mkTagFieldType ilg cuspec - let mkTailOrNullId baseTy = "tail", constFormalFieldTy baseTy + let altOfUnionSpec (cuspec:IlxUnionSpec) cidx = try cuspec.Alternative cidx with _ -> failwith ("alternative " + string cidx + " not found") @@ -228,7 +224,7 @@ let altOfUnionSpec (cuspec:IlxUnionSpec) cidx = // calling the IsFoo helper. This only applies to discriminations outside the // assembly where the type is defined (indicated by 'avoidHelpers' flag - if this is true // then the reference is intra-assembly). -let doesRuntimeTypeDiscriminateUseHelper avoidHelpers (cuspec: IlxUnionSpec) (alt: IlxUnionCase) = +let doesRuntimeTypeDiscriminateUseHelper avoidHelpers (cuspec: IlxUnionSpec) (alt: IlxUnionAlternative) = not avoidHelpers && alt.IsNullary && cuspec.HasHelpers = IlxUnionHasHelpers.AllHelpers let mkRuntimeTypeDiscriminate (ilg: ILGlobals) avoidHelpers cuspec alt altName altTy = @@ -278,6 +274,7 @@ let mkLdDataAddr (avoidHelpers, cuspec, cidx, fidx) = let mkGetTailOrNull avoidHelpers cuspec = mkLdData (avoidHelpers, cuspec, 1, 1) (* tail is in alternative 1, field number 1 *) + let mkGetTagFromHelpers ilg (cuspec: IlxUnionSpec) = let baseTy = baseTyOfUnionSpec cuspec if cuspecRepr.RepresentOneAlternativeAsNull cuspec then @@ -296,6 +293,7 @@ let mkCeqThen after = | I_brcmp (BI_brtrue,a) -> [I_brcmp (BI_beq,a)] | _ -> [AI_ceq; after] + let mkTagDiscriminate ilg cuspec _baseTy cidx = mkGetTag ilg cuspec @ [ mkLdcInt32 cidx; AI_ceq ] @@ -317,7 +315,7 @@ let rec extraTysAndInstrsForStructCtor (ilg: ILGlobals) cidx = let tys, instrs = extraTysAndInstrsForStructCtor ilg (cidx - 7) (ilg.typ_UInt32 :: tys, mkLdcInt32 0 :: instrs) -let takesExtraParams (alts: IlxUnionCase[]) = +let takesExtraParams (alts: IlxUnionAlternative[]) = alts.Length > 1 && (alts |> Array.exists (fun d -> d.FieldDefs.Length > 0) || // Check if not all lengths are distinct @@ -421,19 +419,20 @@ let genWith g : ILCode = let instrs = ResizeArray() let lab2pc = Dictionary() g { new ICodeGen with - member _.CodeLabel(m) = m - member _.GenerateDelayMark() = generateCodeLabel() - member _.GenLocal(ilty) = failwith "not needed" - member _.SetMarkToHere(m) = lab2pc.[m] <- instrs.Count - member _.EmitInstr x = instrs.Add x + member __.CodeLabel(m) = m + member __.GenerateDelayMark() = generateCodeLabel() + member __.GenLocal(ilty) = failwith "not needed" + member __.SetMarkToHere(m) = lab2pc.[m] <- instrs.Count + member __.EmitInstr x = instrs.Add x member cg.EmitInstrs xs = for i in xs do cg.EmitInstr i - member _.MkInvalidCastExnNewobj () = failwith "not needed" } + member __.MkInvalidCastExnNewobj () = failwith "not needed" } { Labels = lab2pc Instrs = instrs.ToArray() Exceptions = [] Locals = [] } + 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) @@ -604,10 +603,12 @@ let emitDataSwitch ilg (cg: ICodeGen<'Mark>) (avoidHelpers, cuspec, cases) = | TailOrNull -> failwith "unexpected: switches on lists should have been eliminated to brisdata tests" + + //--------------------------------------------------- // Generate the union classes -let mkMethodsAndPropertiesForFields (addMethodGeneratedAttrs, addPropertyGeneratedAttrs) access attr hasHelpers (ilTy: ILType) (fields: IlxUnionCaseField[]) = +let mkMethodsAndPropertiesForFields (addMethodGeneratedAttrs, addPropertyGeneratedAttrs) access attr hasHelpers (ilTy: ILType) (fields: IlxUnionField[]) = let basicProps = fields |> Array.map (fun field -> @@ -636,7 +637,8 @@ let mkMethodsAndPropertiesForFields (addMethodGeneratedAttrs, addPropertyGenerat basicProps, basicMethods -let convAlternativeDef (addMethodGeneratedAttrs, addPropertyGeneratedAttrs, addPropertyNeverAttrs, addFieldGeneratedAttrs, addFieldNeverAttrs, mkDebuggerTypeProxyAttribute) (ilg: ILGlobals) num (td:ILTypeDef) cud info cuspec (baseTy:ILType) (alt:IlxUnionCase) = + +let convAlternativeDef (addMethodGeneratedAttrs, addPropertyGeneratedAttrs, addPropertyNeverAttrs, addFieldGeneratedAttrs, addFieldNeverAttrs, mkDebuggerTypeProxyAttribute) (ilg: ILGlobals) num (td:ILTypeDef) cud info cuspec (baseTy:ILType) (alt:IlxUnionAlternative) = let attr = cud.cudWhere let altName = alt.Name let fields = alt.FieldDefs @@ -1095,3 +1097,5 @@ let mkClassUnionDef (addMethodGeneratedAttrs, addPropertyGeneratedAttrs, addProp |> addConstFieldInit baseTypeDef.WithAbstract(isAbstract).WithSealed(altTypeDefs.IsEmpty) + + diff --git a/src/fsharp/ilx/EraseUnions.fsi b/src/fsharp/ilx/EraseUnions.fsi index acfeab71424..b263a9bf33c 100644 --- a/src/fsharp/ilx/EraseUnions.fsi +++ b/src/fsharp/ilx/EraseUnions.fsi @@ -4,10 +4,10 @@ // Compiler use only. Erase discriminated unions. // -------------------------------------------------------------------- -module internal FSharp.Compiler.AbstractIL.ILX.EraseUnions +module internal FSharp.Compiler.AbstractIL.Extensions.ILX.EraseUnions open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.ILX.Types +open FSharp.Compiler.AbstractIL.Extensions.ILX.Types /// Make the instruction sequence for a "newdata" operation val mkNewData : ILGlobals -> IlxUnionSpec * int -> ILInstr list diff --git a/src/fsharp/ilx/ilxsettings.fs b/src/fsharp/ilx/ilxsettings.fs new file mode 100644 index 00000000000..2355a6b1b6e --- /dev/null +++ b/src/fsharp/ilx/ilxsettings.fs @@ -0,0 +1,37 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +module internal FSharp.Compiler.AbstractIL.Extensions.ILX.IlxSettings + +open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal + +type IlxCallImplementation = + | VirtEntriesVirtCode + +//++GLOBAL MUTABLE STATE (concurrency-safe because assigned only during F# library compilation) +let mutable ilxCompilingFSharpCoreLib = false + +//++GLOBAL MUTABLE STATE (concurrency-safe because assigned only during F# library compilation) +let mutable ilxFsharpCoreLibAssemRef = None : ILAssemblyRef option + +/// Scope references for FSharp.Core.dll +let ilxFsharpCoreLibScopeRef () = + if ilxCompilingFSharpCoreLib then + ILScopeRef.Local + else + let assemblyRef = + match ilxFsharpCoreLibAssemRef with + | Some o -> o + | None -> + // The exact public key token and version used here don't actually matter, or shouldn't. + // ilxFsharpCoreLibAssemRef is only 'None' for startup code paths such as + // IsSignatureDataVersionAttr, where matching is done by assembly name strings + // rather then versions and tokens. + ILAssemblyRef.Create("FSharp.Core", None, + Some (PublicKeyToken(Bytes.ofInt32Array [| 0xb0; 0x3f; 0x5f; 0x7f; 0x11; 0xd5; 0x0a; 0x3a |])), + false, + Some (IL.parseILVersion "0.0.0.0"), None) + ILScopeRef.Assembly assemblyRef + +let ilxNamespace () = "Microsoft.FSharp.Core" \ No newline at end of file diff --git a/src/fsharp/import.fs b/src/fsharp/import.fs index 26b16bfbbcc..90734e9ee39 100644 --- a/src/fsharp/import.fs +++ b/src/fsharp/import.fs @@ -5,20 +5,20 @@ module internal FSharp.Compiler.Import open System.Collections.Concurrent open System.Collections.Generic -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras + open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Syntax +open FSharp.Compiler.Lib +open FSharp.Compiler.Range open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.Text -open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TcGlobals +open FSharp.Compiler.XmlDoc #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping @@ -30,9 +30,6 @@ type AssemblyLoader = /// Resolve an Abstract IL assembly reference to a Ccu abstract FindCcuFromAssemblyRef : CompilationThreadToken * range * ILAssemblyRef -> CcuResolutionResult - - abstract TryFindXmlDocumentationInfo : assemblyName: string -> XmlDocumentationInfo option - #if !NO_EXTENSIONTYPING /// Get a flag indicating if an assembly is a provided assembly, plus the @@ -365,7 +362,7 @@ let ImportProvidedMethodBaseAsILMethodRef (env: ImportMap) (m: range) (mbase: Ta | None -> let methodName = minfo.PUntaint((fun minfo -> minfo.Name), m) let typeName = declaringGenericTypeDefn.PUntaint((fun declaringGenericTypeDefn -> declaringGenericTypeDefn.FullName), m) - error(Error(FSComp.SR.etIncorrectProvidedMethod(ExtensionTyping.DisplayNameOfTypeProvider(minfo.TypeProvider, m), methodName, metadataToken, typeName), m)) + error(NumberedError(FSComp.SR.etIncorrectProvidedMethod(ExtensionTyping.DisplayNameOfTypeProvider(minfo.TypeProvider, m), methodName, metadataToken, typeName), m)) | _ -> match mbase.OfType() with | Some cinfo when cinfo.PUntaint((fun x -> x.DeclaringType.IsGenericType), m) -> @@ -391,7 +388,7 @@ let ImportProvidedMethodBaseAsILMethodRef (env: ImportMap) (m: range) (mbase: Ta | Some found -> found.Coerce(m) | None -> let typeName = declaringGenericTypeDefn.PUntaint((fun x -> x.FullName), m) - error(Error(FSComp.SR.etIncorrectProvidedConstructor(ExtensionTyping.DisplayNameOfTypeProvider(cinfo.TypeProvider, m), typeName), m)) + error(NumberedError(FSComp.SR.etIncorrectProvidedConstructor(ExtensionTyping.DisplayNameOfTypeProvider(cinfo.TypeProvider, m), typeName), m)) | _ -> mbase let rty = @@ -583,7 +580,7 @@ let ImportILAssemblyTypeForwarders (amap, m, exportedTypes: ILExportedTypesAndFo ] |> Map.ofList /// Import an IL assembly as a new TAST CCU -let ImportILAssembly(amap: (unit -> ImportMap), m, auxModuleLoader, xmlDocInfoLoader: IXmlDocumentationInfoLoader option, ilScopeRef, sourceDir, filename, ilModule: ILModuleDef, invalidateCcu: IEvent) = +let ImportILAssembly(amap: (unit -> ImportMap), m, auxModuleLoader, ilScopeRef, sourceDir, filename, ilModule: ILModuleDef, invalidateCcu: IEvent) = invalidateCcu |> ignore let aref = match ilScopeRef with @@ -612,11 +609,6 @@ let ImportILAssembly(amap: (unit -> ImportMap), m, auxModuleLoader, xmlDocInfoLo FileName = filename MemberSignatureEquality= (fun ty1 ty2 -> typeEquivAux EraseAll (amap()).g ty1 ty2) TryGetILModuleDef = (fun () -> Some ilModule) - TypeForwarders = forwarders - XmlDocumentationInfo = - match xmlDocInfoLoader, filename with - | Some xmlDocInfoLoader, Some filename -> xmlDocInfoLoader.TryLoad(filename, ilModule) - | _ -> None - } + TypeForwarders = forwarders } CcuThunk.Create(nm, ccuData) diff --git a/src/fsharp/import.fsi b/src/fsharp/import.fsi index 89d9fdb9ada..cc75a8f8967 100644 --- a/src/fsharp/import.fsi +++ b/src/fsharp/import.fsi @@ -3,11 +3,10 @@ /// Functions to import .NET binary metadata as TAST objects module internal FSharp.Compiler.Import -open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.Range open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree #if !NO_EXTENSIONTYPING @@ -21,8 +20,6 @@ type AssemblyLoader = /// Resolve an Abstract IL assembly reference to a Ccu abstract FindCcuFromAssemblyRef : CompilationThreadToken * range * ILAssemblyRef -> CcuResolutionResult - abstract TryFindXmlDocumentationInfo : assemblyName: string -> XmlDocumentationInfo option - #if !NO_EXTENSIONTYPING /// Get a flag indicating if an assembly is a provided assembly, plus the /// table of information recording remappings from type names in the provided assembly to type @@ -79,7 +76,7 @@ val internal ImportProvidedMethodBaseAsILMethodRef : ImportMap -> range -> Taint val internal ImportILGenericParameters : (unit -> ImportMap) -> range -> ILScopeRef -> TType list -> ILGenericParameterDef list -> Typar list /// Import an IL assembly as a new TAST CCU -val internal ImportILAssembly : (unit -> ImportMap) * range * (ILScopeRef -> ILModuleDef) * IXmlDocumentationInfoLoader option * ILScopeRef * sourceDir:string * filename: string option * ILModuleDef * IEvent -> CcuThunk +val internal ImportILAssembly : (unit -> ImportMap) * range * (ILScopeRef -> ILModuleDef) * ILScopeRef * sourceDir:string * filename: string option * ILModuleDef * IEvent -> CcuThunk /// Import the type forwarder table for an IL assembly val internal ImportILAssemblyTypeForwarders : (unit -> ImportMap) * range * ILExportedTypesAndForwarders -> Map<(string array * string), Lazy> diff --git a/src/fsharp/infos.fs b/src/fsharp/infos.fs index 96422ef10b9..26ff383c38d 100755 --- a/src/fsharp/infos.fs +++ b/src/fsharp/infos.fs @@ -3,21 +3,21 @@ module internal FSharp.Compiler.Infos open System -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Syntax +open FSharp.Compiler.Lib +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TypedTreeOps.DebugPrint +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.XmlDoc #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping @@ -106,30 +106,6 @@ type SkipUnrefInterfaces = Yes | No /// Collect the set of immediate declared interface types for an F# type, but do not /// traverse the type hierarchy to collect further interfaces. let rec GetImmediateInterfacesOfType skipUnref g amap m ty = - - let getInterfaces ty (tcref:TyconRef) tinst = - match metadataOfTy g ty with -#if !NO_EXTENSIONTYPING - | ProvidedTypeMetadata info -> - [ for ity in info.ProvidedType.PApplyArray((fun st -> st.GetInterfaces()), "GetInterfaces", m) do - yield Import.ImportProvidedType amap m ity ] -#endif - | ILTypeMetadata (TILObjectReprData(scoref, _, tdef)) -> - // ImportILType may fail for an interface if the assembly load set is incomplete and the interface - // comes from another assembly. In this case we simply skip the interface: - // if we don't skip it, then compilation will just fail here, and if type checking - // succeeds with fewer non-dereferencable interfaces reported then it would have - // succeeded with more reported. There are pathological corner cases where this - // doesn't apply: e.g. for mscorlib interfaces like IComparable, but we can always - // assume those are present. - tdef.Implements |> List.choose (fun ity -> - if skipUnref = SkipUnrefInterfaces.No || CanImportILType scoref amap m ity then - Some (ImportILType scoref amap m tinst ity) - else - None) - | FSharpOrArrayOrByrefOrTupleOrExnTypeMetadata -> - tcref.ImmediateInterfaceTypesOfFSharpTycon |> List.map (instType (mkInstForAppTy g ty)) - let itys = match tryAppTy g ty with | ValueSome(tcref, tinst) -> @@ -147,17 +123,31 @@ let rec GetImmediateInterfacesOfType skipUnref g amap m ty = yield mkAppTy g.system_GenericIComparable_tcref [ty] yield mkAppTy g.system_GenericIEquatable_tcref [ty]] else - getInterfaces ty tcref tinst - | _ -> - let tyWithMetadata = convertToTypeWithMetadataIfPossible g ty - match tryAppTy g tyWithMetadata with - | ValueSome (tcref, tinst) -> - if isAnyTupleTy g ty then - getInterfaces tyWithMetadata tcref tinst - else - [] - | _ -> [] - + match metadataOfTy g ty with +#if !NO_EXTENSIONTYPING + | ProvidedTypeMetadata info -> + [ for ity in info.ProvidedType.PApplyArray((fun st -> st.GetInterfaces()), "GetInterfaces", m) do + yield Import.ImportProvidedType amap m ity ] +#endif + | ILTypeMetadata (TILObjectReprData(scoref, _, tdef)) -> + + // ImportILType may fail for an interface if the assembly load set is incomplete and the interface + // comes from another assembly. In this case we simply skip the interface: + // if we don't skip it, then compilation will just fail here, and if type checking + // succeeds with fewer non-dereferencable interfaces reported then it would have + // succeeded with more reported. There are pathological corner cases where this + // doesn't apply: e.g. for mscorlib interfaces like IComparable, but we can always + // assume those are present. + tdef.Implements |> List.choose (fun ity -> + if skipUnref = SkipUnrefInterfaces.No || CanImportILType scoref amap m ity then + Some (ImportILType scoref amap m tinst ity) + else None) + + | FSharpOrArrayOrByrefOrTupleOrExnTypeMetadata -> + tcref.ImmediateInterfaceTypesOfFSharpTycon |> List.map (instType (mkInstForAppTy g ty)) + | _ -> [] + + // NOTE: Anonymous record types are not directly considered to implement IComparable, // IComparable or IEquatable. This is because whether they support these interfaces depend on their // consitutent types, which may not yet be known in type inference. @@ -1117,7 +1107,7 @@ type MethInfo = member x.IsConstructor = match x with | ILMeth(_, ilmeth, _) -> ilmeth.IsConstructor - | FSMeth(_g, _, vref, _) -> (vref.MemberInfo.Value.MemberFlags.MemberKind = SynMemberKind.Constructor) + | FSMeth(_g, _, vref, _) -> (vref.MemberInfo.Value.MemberFlags.MemberKind = MemberKind.Constructor) | DefaultStructCtor _ -> true #if !NO_EXTENSIONTYPING | ProvidedMeth(_, mi, _, m) -> mi.PUntaint((fun mi -> mi.IsConstructor), m) @@ -1175,7 +1165,7 @@ type MethInfo = member x.IsNewSlot = (x.IsVirtual && (match x with - | ILMeth(_, x, _) -> x.IsNewSlot || (isInterfaceTy x.TcGlobals x.ApparentEnclosingType && not x.IsFinal) + | ILMeth(_, x, _) -> x.IsNewSlot | FSMeth(_, _, vref, _) -> vref.IsDispatchSlotMember #if !NO_EXTENSIONTYPING | ProvidedMeth(_, mi, _, m) -> mi.PUntaint((fun mi -> mi.IsHideBySig), m) // REVIEW: Check this is correct @@ -1409,7 +1399,7 @@ type MethInfo = [ [ for p in ilMethInfo.ParamMetadata do let isParamArrayArg = TryFindILAttribute g.attrib_ParamArrayAttribute p.CustomAttrs let reflArgInfo = - match TryDecodeILAttribute g.attrib_ReflectedDefinitionAttribute.TypeRef p.CustomAttrs with + match TryDecodeILAttribute g g.attrib_ReflectedDefinitionAttribute.TypeRef p.CustomAttrs with | Some ([ILAttribElem.Bool b ], _) -> ReflectedArgInfo.Quote b | Some _ -> ReflectedArgInfo.Quote false | _ -> ReflectedArgInfo.None diff --git a/src/fsharp/infos.fsi b/src/fsharp/infos.fsi index fb543c2c19f..083fb373ff8 100644 --- a/src/fsharp/infos.fsi +++ b/src/fsharp/infos.fsi @@ -4,13 +4,11 @@ module internal FSharp.Compiler.Infos open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.Syntax open FSharp.Compiler.Import -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Xml +open FSharp.Compiler.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.TcGlobals #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping @@ -190,7 +188,7 @@ type ReflectedArgInfo = /// Partial information about a parameter returned for use by the Language Service [] type ParamNameAndType = - | ParamNameAndType of Ident option * TType + | ParamNameAndType of SyntaxTree.Ident option * TType static member FromArgInfo: ty:TType * argInfo:ArgReprInfo -> ParamNameAndType @@ -209,7 +207,7 @@ type ParamData = isOut: bool * optArgInfo: OptionalArgInfo * callerInfo: CallerInfo * - nameOpt: Ident option * + nameOpt: SyntaxTree.Ident option * reflArgInfo: ReflectedArgInfo * ttype: TType @@ -509,7 +507,7 @@ type MethInfo = member TcGlobals: TcGlobals /// Get the XML documentation associated with the method - member XmlDoc: XmlDoc + member XmlDoc: XmlDoc.XmlDoc /// Build IL method infos. static member CreateILMeth: amap:ImportMap * m:range * ty:TType * md:ILMethodDef -> MethInfo @@ -861,7 +859,7 @@ type PropInfo = member TcGlobals: TcGlobals /// Get the intra-assembly XML documentation for the property. - member XmlDoc: XmlDoc + member XmlDoc: XmlDoc.XmlDoc /// Test whether two property infos have the same underlying definition. /// Uses the same techniques as 'MethInfosUseIdenticalDefinitions'. @@ -982,7 +980,7 @@ type EventInfo = member TcGlobals: TcGlobals /// Get the intra-assembly XML documentation for the property. - member XmlDoc: XmlDoc + member XmlDoc: XmlDoc.XmlDoc /// Test whether two event infos have the same underlying definition. /// Compatible with ItemsAreEffectivelyEqual relation. diff --git a/src/fsharp/layout.fs b/src/fsharp/layout.fs new file mode 100644 index 00000000000..d0aaab9bae9 --- /dev/null +++ b/src/fsharp/layout.fs @@ -0,0 +1,337 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +module FSharp.Compiler.Layout + +open System +open System.IO +open Internal.Utilities.StructuredFormat +open Microsoft.FSharp.Core.Printf + +#nowarn "62" // This construct is for ML compatibility. + +type layout = Internal.Utilities.StructuredFormat.Layout +type LayoutTag = Internal.Utilities.StructuredFormat.LayoutTag +type TaggedText = Internal.Utilities.StructuredFormat.TaggedText + +type NavigableTaggedText(taggedText: TaggedText, range: Range.range) = + member val Range = range + interface TaggedText with + member _.Tag = taggedText.Tag + member _.Text = taggedText.Text + +let mkNav r t = NavigableTaggedText(t, r) :> TaggedText + +let spaces n = new String(' ', n) + +// NOTE: emptyL might be better represented as a constructor, so then (Sep"") would have true meaning +let emptyL = Leaf (true, TaggedTextOps.mkTag LayoutTag.Text "", true) +let isEmptyL = function Leaf(true, tag, true) when tag.Text = "" -> true | _ -> false + +let mkNode l r joint = + if isEmptyL l then r else + if isEmptyL r then l else + Node(l, r, joint) + +//-------------------------------------------------------------------------- +//INDEX: constructors +//-------------------------------------------------------------------------- + +let wordL (str:TaggedText) = Leaf (false, str, false) +let sepL (str:TaggedText) = Leaf (true, str, true) +let rightL (str:TaggedText) = Leaf (true, str, false) +let leftL (str:TaggedText) = Leaf (false, str, true) + +module TaggedTextOps = + let tagActivePatternCase = TaggedTextOps.mkTag LayoutTag.ActivePatternCase + let tagActivePatternResult = TaggedTextOps.mkTag LayoutTag.ActivePatternResult + let tagAlias = TaggedTextOps.tagAlias + let tagClass = TaggedTextOps.tagClass + let tagUnion = TaggedTextOps.mkTag LayoutTag.Union + let tagUnionCase = TaggedTextOps.tagUnionCase + let tagDelegate = TaggedTextOps.tagDelegate + let tagEnum = TaggedTextOps.tagEnum + let tagEvent = TaggedTextOps.tagEvent + let tagField = TaggedTextOps.tagField + let tagInterface = TaggedTextOps.tagInterface + let tagKeyword = TaggedTextOps.tagKeyword + let tagLineBreak = TaggedTextOps.tagLineBreak + let tagLocal = TaggedTextOps.tagLocal + let tagRecord = TaggedTextOps.tagRecord + let tagRecordField = TaggedTextOps.tagRecordField + let tagMethod = TaggedTextOps.tagMethod + let tagMember = TaggedTextOps.mkTag LayoutTag.Member + let tagModule = TaggedTextOps.tagModule + let tagModuleBinding = TaggedTextOps.tagModuleBinding + let tagFunction = TaggedTextOps.tagFunction + let tagNamespace = TaggedTextOps.tagNamespace + let tagNumericLiteral = TaggedTextOps.tagNumericLiteral + let tagOperator = TaggedTextOps.tagOperator + let tagParameter = TaggedTextOps.tagParameter + let tagProperty = TaggedTextOps.tagProperty + let tagSpace = TaggedTextOps.tagSpace + let tagStringLiteral = TaggedTextOps.tagStringLiteral + let tagStruct = TaggedTextOps.tagStruct + let tagTypeParameter = TaggedTextOps.tagTypeParameter + let tagText = TaggedTextOps.tagText + let tagPunctuation = TaggedTextOps.tagPunctuation + let tagUnknownEntity = TaggedTextOps.mkTag LayoutTag.UnknownEntity + let tagUnknownType = TaggedTextOps.mkTag LayoutTag.UnknownType + + module Literals = + // common tagged literals + let lineBreak = TaggedTextOps.Literals.lineBreak + let space = TaggedTextOps.Literals.space + let comma = TaggedTextOps.Literals.comma + let semicolon = TaggedTextOps.Literals.semicolon + let leftParen = TaggedTextOps.Literals.leftParen + let rightParen = TaggedTextOps.Literals.rightParen + let leftBracket = TaggedTextOps.Literals.leftBracket + let rightBracket = TaggedTextOps.Literals.rightBracket + let leftBrace = TaggedTextOps.Literals.leftBrace + let rightBrace = TaggedTextOps.Literals.rightBrace + let leftBraceBar = TaggedTextOps.Literals.leftBraceBar + let rightBraceBar = TaggedTextOps.Literals.rightBraceBar + let equals = TaggedTextOps.Literals.equals + let arrow = TaggedTextOps.Literals.arrow + let questionMark = TaggedTextOps.Literals.questionMark + let dot = tagPunctuation "." + let leftAngle = tagPunctuation "<" + let rightAngle = tagPunctuation ">" + let star = tagOperator "*" + let colon = tagPunctuation ":" + let minus = tagPunctuation "-" + let keywordNew = tagKeyword "new" + let leftBracketAngle = tagPunctuation "[<" + let rightBracketAngle = tagPunctuation ">]" + let structUnit = tagStruct "unit" + let keywordStatic = tagKeyword "static" + let keywordMember = tagKeyword "member" + let keywordVal = tagKeyword "val" + let keywordEvent = tagKeyword "event" + let keywordWith = tagKeyword "with" + let keywordSet = tagKeyword "set" + let keywordGet = tagKeyword "get" + let keywordTrue = tagKeyword "true" + let keywordFalse = tagKeyword "false" + let bar = tagPunctuation "|" + let keywordStruct = tagKeyword "struct" + let keywordInherit = tagKeyword "inherit" + let keywordEnd = tagKeyword "end" + let keywordNested = tagKeyword "nested" + let keywordType = tagKeyword "type" + let keywordDelegate = tagKeyword "delegate" + let keywordOf = tagKeyword "of" + let keywordInternal = tagKeyword "internal" + let keywordPrivate = tagKeyword "private" + let keywordAbstract = tagKeyword "abstract" + let keywordOverride = tagKeyword "override" + let keywordEnum = tagKeyword "enum" + let leftBracketBar = tagPunctuation "[|" + let rightBracketBar = tagPunctuation "|]" + let keywordTypeof = tagKeyword "typeof" + let keywordTypedefof = tagKeyword "typedefof" + +open TaggedTextOps + +module SepL = + let dot = sepL Literals.dot + let star = sepL Literals.star + let colon = sepL Literals.colon + let questionMark = sepL Literals.questionMark + let leftParen = sepL Literals.leftParen + let comma = sepL Literals.comma + let space = sepL Literals.space + let leftBracket = sepL Literals.leftBracket + let leftAngle = sepL Literals.leftAngle + let lineBreak = sepL Literals.lineBreak + let rightParen = sepL Literals.rightParen + +module WordL = + let arrow = wordL Literals.arrow + let star = wordL Literals.star + let colon = wordL Literals.colon + let equals = wordL Literals.equals + let keywordNew = wordL Literals.keywordNew + let structUnit = wordL Literals.structUnit + let keywordStatic = wordL Literals.keywordStatic + let keywordMember = wordL Literals.keywordMember + let keywordVal = wordL Literals.keywordVal + let keywordEvent = wordL Literals.keywordEvent + let keywordWith = wordL Literals.keywordWith + let keywordSet = wordL Literals.keywordSet + let keywordGet = wordL Literals.keywordGet + let keywordTrue = wordL Literals.keywordTrue + let keywordFalse = wordL Literals.keywordFalse + let bar = wordL Literals.bar + let keywordStruct = wordL Literals.keywordStruct + let keywordInherit = wordL Literals.keywordInherit + let keywordEnd = wordL Literals.keywordEnd + let keywordNested = wordL Literals.keywordNested + let keywordType = wordL Literals.keywordType + let keywordDelegate = wordL Literals.keywordDelegate + let keywordOf = wordL Literals.keywordOf + let keywordInternal = wordL Literals.keywordInternal + let keywordPrivate = wordL Literals.keywordPrivate + let keywordAbstract = wordL Literals.keywordAbstract + let keywordOverride = wordL Literals.keywordOverride + let keywordEnum = wordL Literals.keywordEnum + +module LeftL = + let leftParen = leftL Literals.leftParen + let questionMark = leftL Literals.questionMark + let colon = leftL Literals.colon + let leftBracketAngle = leftL Literals.leftBracketAngle + let leftBracketBar = leftL Literals.leftBracketBar + let keywordTypeof = leftL Literals.keywordTypeof + let keywordTypedefof = leftL Literals.keywordTypedefof + +module RightL = + let comma = rightL Literals.comma + let rightParen = rightL Literals.rightParen + let colon = rightL Literals.colon + let rightBracket = rightL Literals.rightBracket + let rightAngle = rightL Literals.rightAngle + let rightBracketAngle = rightL Literals.rightBracketAngle + let rightBracketBar = rightL Literals.rightBracketBar + +let aboveL l r = mkNode l r (Broken 0) + +let tagAttrL str attrs ly = Attr (str, attrs, ly) + +//-------------------------------------------------------------------------- +//INDEX: constructors derived +//-------------------------------------------------------------------------- + +let apply2 f l r = if isEmptyL l then r else + if isEmptyL r then l else f l r + +let (^^) l r = mkNode l r (Unbreakable) +let (++) l r = mkNode l r (Breakable 0) +let (--) l r = mkNode l r (Breakable 1) +let (---) l r = mkNode l r (Breakable 2) +let (----) l r = mkNode l r (Breakable 3) +let (-----) l r = mkNode l r (Breakable 4) +let (@@) l r = apply2 (fun l r -> mkNode l r (Broken 0)) l r +let (@@-) l r = apply2 (fun l r -> mkNode l r (Broken 1)) l r +let (@@--) l r = apply2 (fun l r -> mkNode l r (Broken 2)) l r + +let tagListL tagger = function + | [] -> emptyL + | [x] -> x + | x :: xs -> + let rec process' prefixL = function + | [] -> prefixL + | y :: ys -> process' ((tagger prefixL) ++ y) ys in + process' x xs + +let commaListL x = tagListL (fun prefixL -> prefixL ^^ rightL Literals.comma) x + +let semiListL x = tagListL (fun prefixL -> prefixL ^^ rightL Literals.semicolon) x + +let spaceListL x = tagListL (fun prefixL -> prefixL) x + +let sepListL x y = tagListL (fun prefixL -> prefixL ^^ x) y + +let bracketL l = leftL Literals.leftParen ^^ l ^^ rightL Literals.rightParen + +let tupleL xs = bracketL (sepListL (sepL Literals.comma) xs) + +let aboveListL = function + | [] -> emptyL + | [x] -> x + | x :: ys -> List.fold (fun pre y -> pre @@ y) x ys + +let optionL xL = function + | None -> wordL (tagUnionCase "None") + | Some x -> wordL (tagUnionCase "Some") -- (xL x) + +let listL xL xs = leftL Literals.leftBracket ^^ sepListL (sepL Literals.semicolon) (List.map xL xs) ^^ rightL Literals.rightBracket + +//-------------------------------------------------------------------------- +//INDEX: LayoutRenderer +//-------------------------------------------------------------------------- + +type LayoutRenderer<'a, 'b> = + abstract Start : unit -> 'b + abstract AddText : 'b -> TaggedText -> 'b + abstract AddBreak : 'b -> int -> 'b + abstract AddTag : 'b -> string * (string * string) list * bool -> 'b + abstract Finish : 'b -> 'a + +let renderL (rr: LayoutRenderer<_, _>) layout = + let rec addL z pos i layout k = + match layout with + | ObjLeaf _ -> failwith "ObjLeaf should never appear here" + (* pos is tab level *) + | Leaf (_, text, _) -> + k(rr.AddText z text, i + text.Text.Length) + | Node (l, r, Broken indent) -> + addL z pos i l <| + fun (z, _i) -> + let z, i = rr.AddBreak z (pos+indent), (pos+indent) + addL z (pos+indent) i r k + | Node (l, r, _) -> + let jm = Layout.JuxtapositionMiddle (l, r) + addL z pos i l <| + fun (z, i) -> + let z, i = if jm then z, i else rr.AddText z Literals.space, i+1 + let pos = i + addL z pos i r k + | Attr (tag, attrs, l) -> + let z = rr.AddTag z (tag, attrs, true) + addL z pos i l <| + fun (z, i) -> + let z = rr.AddTag z (tag, attrs, false) + k(z, i) + let pos = 0 + let z, i = rr.Start(), 0 + let z, _i = addL z pos i layout id + rr.Finish z + +/// string render +let stringR = + { new LayoutRenderer with + member _.Start () = [] + member _.AddText rstrs taggedText = taggedText.Text :: rstrs + member _.AddBreak rstrs n = (spaces n) :: "\n" :: rstrs + member _.AddTag z (_, _, _) = z + member _.Finish rstrs = String.Join("", Array.ofList (List.rev rstrs)) } + +type NoState = NoState +type NoResult = NoResult + +/// string render +let taggedTextListR collector = + { new LayoutRenderer with + member _.Start () = NoState + member _.AddText z text = collector text; z + member _.AddBreak rstrs n = collector Literals.lineBreak; collector (tagSpace(spaces n)); rstrs + member _.AddTag z (_, _, _) = z + member _.Finish rstrs = NoResult } + + +/// channel LayoutRenderer +let channelR (chan:TextWriter) = + { new LayoutRenderer with + member r.Start () = NoState + member r.AddText z s = chan.Write s.Text; z + member r.AddBreak z n = chan.WriteLine(); chan.Write (spaces n); z + member r.AddTag z (tag, attrs, start) = z + member r.Finish z = NoResult } + +/// buffer render +let bufferR os = + { new LayoutRenderer with + member r.Start () = NoState + member r.AddText z s = bprintf os "%s" s.Text; z + member r.AddBreak z n = bprintf os "\n"; bprintf os "%s" (spaces n); z + member r.AddTag z (tag, attrs, start) = z + member r.Finish z = NoResult } + +//-------------------------------------------------------------------------- +//INDEX: showL, outL are most common +//-------------------------------------------------------------------------- + +let showL layout = renderL stringR layout +let outL (chan:TextWriter) layout = renderL (channelR chan) layout |> ignore +let bufferL os layout = renderL (bufferR os) layout |> ignore \ No newline at end of file diff --git a/src/fsharp/layout.fsi b/src/fsharp/layout.fsi new file mode 100644 index 00000000000..b7aa6320b3d --- /dev/null +++ b/src/fsharp/layout.fsi @@ -0,0 +1,233 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +/// DSL to create structured layout objects with optional breaks and render them +module public FSharp.Compiler.Layout + +open System.Text +open System.IO +open FSharp.Compiler.Range +open Internal.Utilities.StructuredFormat + +type layout = Internal.Utilities.StructuredFormat.Layout +type LayoutTag = Internal.Utilities.StructuredFormat.LayoutTag +type TaggedText = Internal.Utilities.StructuredFormat.TaggedText + +type NavigableTaggedText = + new : TaggedText * range -> NavigableTaggedText + member Range: range + interface TaggedText + +val mkNav : range -> TaggedText -> TaggedText + +val emptyL : Layout +val isEmptyL : Layout -> bool + +val wordL : TaggedText -> Layout + +val sepL : TaggedText -> Layout + +val rightL : TaggedText -> Layout + +val leftL : TaggedText -> Layout + +/// never break "glue" +val ( ^^ ) : Layout -> Layout -> Layout + +/// optional break, indent=0 +val ( ++ ) : Layout -> Layout -> Layout + +// optional break, indent=1 +val ( -- ) : Layout -> Layout -> Layout + +/// optional break, indent=2 +val ( --- ) : Layout -> Layout -> Layout + +/// optional break, indent=3 +val ( ---- ) : Layout -> Layout -> Layout + +/// optional break, indent=4 +val ( ----- ) : Layout -> Layout -> Layout + +/// non-optional break ident=0 +val ( @@ ) : Layout -> Layout -> Layout + +/// non-optional break ident=1 +val ( @@- ) : Layout -> Layout -> Layout + +/// non-optional break ident=2 +val ( @@-- ) : Layout -> Layout -> Layout + +val commaListL : Layout list -> Layout + +val spaceListL : Layout list -> Layout + +val semiListL : Layout list -> Layout + +val sepListL : Layout -> Layout list -> Layout + +val bracketL : Layout -> Layout + +val tupleL : Layout list -> Layout + +val aboveL : Layout -> Layout -> Layout + +val aboveListL : Layout list -> Layout + +val optionL : ('a -> Layout) -> 'a option -> Layout + +val listL : ('a -> Layout) -> 'a list -> Layout + +val showL : Layout -> string + +val outL : TextWriter -> Layout -> unit + +val bufferL : StringBuilder -> Layout -> unit + +module TaggedTextOps = + val tagActivePatternCase : (string -> TaggedText) + val tagActivePatternResult : (string -> TaggedText) + val tagAlias : (string -> TaggedText) + val tagClass : (string -> TaggedText) + val tagUnion : (string -> TaggedText) + val tagUnionCase : (string -> TaggedText) + val tagDelegate : (string -> TaggedText) + val tagEnum : (string -> TaggedText) + val tagEvent : (string -> TaggedText) + val tagField : (string -> TaggedText) + val tagInterface : (string -> TaggedText) + val tagKeyword : (string -> TaggedText) + val tagLineBreak : (string -> TaggedText) + val tagMethod : (string -> TaggedText) + val tagLocal : (string -> TaggedText) + val tagRecord : (string -> TaggedText) + val tagRecordField : (string -> TaggedText) + val tagModule : (string -> TaggedText) + val tagModuleBinding : (string -> TaggedText) + val tagFunction : (string -> TaggedText) + val tagMember : (string -> TaggedText) + val tagNamespace : (string -> TaggedText) + val tagNumericLiteral : (string -> TaggedText) + val tagOperator : (string -> TaggedText) + val tagParameter : (string -> TaggedText) + val tagProperty : (string -> TaggedText) + val tagSpace : (string -> TaggedText) + val tagStringLiteral : (string -> TaggedText) + val tagStruct : (string -> TaggedText) + val tagTypeParameter : (string -> TaggedText) + val tagText : (string -> TaggedText) + val tagPunctuation : (string -> TaggedText) + val tagUnknownEntity : (string -> TaggedText) + val tagUnknownType : (string -> TaggedText) + + module Literals = + // common tagged literals + val lineBreak : TaggedText + val space : TaggedText + val comma : TaggedText + val dot : TaggedText + val semicolon : TaggedText + val leftParen : TaggedText + val rightParen : TaggedText + val leftBracket : TaggedText + val rightBracket : TaggedText + val leftBrace: TaggedText + val rightBrace : TaggedText + val leftBraceBar: TaggedText + val rightBraceBar : TaggedText + val leftAngle: TaggedText + val rightAngle: TaggedText + val equals : TaggedText + val arrow : TaggedText + val questionMark : TaggedText + val colon: TaggedText + val minus: TaggedText + val keywordTrue: TaggedText + val keywordFalse: TaggedText + +module SepL = + val dot: Layout + val star: Layout + val colon: Layout + val questionMark: Layout + val leftParen: Layout + val comma: Layout + val space: Layout + val leftBracket: Layout + val leftAngle: Layout + val lineBreak: Layout + val rightParen: Layout + +module WordL = + val arrow: Layout + val star: Layout + val colon: Layout + val equals: Layout + val keywordNew: Layout + val structUnit: Layout + val keywordStatic: Layout + val keywordMember: Layout + val keywordVal: Layout + val keywordEvent: Layout + val keywordWith: Layout + val keywordSet: Layout + val keywordGet: Layout + val keywordTrue: Layout + val keywordFalse: Layout + val bar: Layout + val keywordStruct: Layout + val keywordInherit: Layout + val keywordEnd: Layout + val keywordNested: Layout + val keywordType: Layout + val keywordDelegate: Layout + val keywordOf: Layout + val keywordInternal: Layout + val keywordPrivate: Layout + val keywordAbstract: Layout + val keywordOverride: Layout + val keywordEnum: Layout + +module LeftL = + val leftParen: Layout + val questionMark: Layout + val colon: Layout + val leftBracketAngle: Layout + val leftBracketBar: Layout + val keywordTypeof: Layout + val keywordTypedefof: Layout + +module RightL = + val comma: Layout + val rightParen: Layout + val colon: Layout + val rightBracket: Layout + val rightAngle: Layout + val rightBracketAngle: Layout + val rightBracketBar: Layout + +/// Render a Layout yielding an 'a using a 'b (hidden state) type +type LayoutRenderer<'a,'b> = + abstract Start : unit -> 'b + abstract AddText : 'b -> TaggedText -> 'b + abstract AddBreak : 'b -> int -> 'b + abstract AddTag : 'b -> string * (string * string) list * bool -> 'b + abstract Finish : 'b -> 'a + +type NoState = NoState +type NoResult = NoResult + +/// Run a render on a Layout +val renderL : LayoutRenderer<'b,'a> -> Layout -> 'b + +/// Render layout to string +val stringR : LayoutRenderer + +/// Render layout to channel +val channelR : TextWriter -> LayoutRenderer + +/// Render layout to StringBuilder +val bufferR : StringBuilder -> LayoutRenderer + +/// Render layout to collector of TaggedText +val taggedTextListR : collector: (TaggedText -> unit) -> LayoutRenderer + diff --git a/src/fsharp/lex.fsl b/src/fsharp/lex.fsl index 40da3928359..e46718a3d1f 100644 --- a/src/fsharp/lex.fsl +++ b/src/fsharp/lex.fsl @@ -5,8 +5,8 @@ module internal FSharp.Compiler.Lexer //------------------------------------------------------------------------ -// The Lexer. Some of the complication arises from the fact it is -// reused by the Visual Studio mode to do partial lexing reporting +// The Lexer. Some of the complication arises from the fact it is +// reused by the Visual Studio mode to do partial lexing reporting // whitespace etc. //----------------------------------------------------------------------- @@ -15,21 +15,20 @@ open System.Globalization open System.Text open Internal.Utilities -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras open Internal.Utilities.Text.Lexing open FSharp.Compiler open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features -open FSharp.Compiler.IO open FSharp.Compiler.Lexhelp +open FSharp.Compiler.Lib +open FSharp.Compiler.Range open FSharp.Compiler.ParseHelpers open FSharp.Compiler.Parser -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range +open FSharp.Compiler.SyntaxTree module Ranges = /// Whether valid as signed int8 when a minus sign is prepended, compares true to 0x80 @@ -48,7 +47,7 @@ module Ranges = let lexeme (lexbuf : UnicodeLexing.Lexbuf) = UnicodeLexing.Lexbuf.LexemeString lexbuf /// Trim n chars from both sides of lexbuf, return string -let lexemeTrimBoth (lexbuf : UnicodeLexing.Lexbuf) (n:int) (m:int) = +let lexemeTrimBoth (lexbuf : UnicodeLexing.Lexbuf) (n:int) (m:int) = let s = lexbuf.LexemeView s.Slice(n, s.Length - (n+m)).ToString() @@ -72,26 +71,26 @@ let fail args (lexbuf:UnicodeLexing.Lexbuf) msg dflt = // version of the F# core library parsing code with the call to "Trim" // removed, which appears in profiling runs as a small but significant cost. -let getSign32 (s:string) (p:byref) l = - if (l >= p + 1 && s.[p] = '-') - then p <- p + 1; -1 - else 1 +let getSign32 (s:string) (p:byref) l = + if (l >= p + 1 && s.[p] = '-') + then p <- p + 1; -1 + else 1 -let isOXB c = +let isOXB c = let c = Char.ToLowerInvariant c c = 'x' || c = 'o' || c = 'b' -let is0OXB (s:string) p l = +let is0OXB (s:string) p l = l >= p + 2 && s.[p] = '0' && isOXB s.[p+1] -let get0OXB (s:string) (p:byref) l = +let get0OXB (s:string) (p:byref) l = if is0OXB s p l then let r = Char.ToLowerInvariant s.[p+1] in p <- p + 2; r - else 'd' + else 'd' let formatError() = raise (new System.FormatException(SR.GetString("bad format string"))) -let parseBinaryUInt64 (s:string) = +let parseBinaryUInt64 (s:string) = Convert.ToUInt64(s, 2) let parseOctalUInt64 (s:string) = @@ -102,74 +101,58 @@ let removeUnderscores (s:string) = | null -> null | s -> s.Replace("_", "") -let parseInt32 (s:string) = +let parseInt32 (s:string) = let s = removeUnderscores s - let l = s.Length - let mutable p = 0 - let sign = getSign32 s &p l - let specifier = get0OXB s &p l - match Char.ToLower(specifier,CultureInfo.InvariantCulture) with + let l = s.Length + let mutable p = 0 + let sign = getSign32 s &p l + let specifier = get0OXB s &p l + match Char.ToLower(specifier,CultureInfo.InvariantCulture) with | 'x' -> sign * (int32 (Convert.ToUInt32(UInt64.Parse(s.Substring(p), NumberStyles.AllowHexSpecifier,CultureInfo.InvariantCulture)))) | 'b' -> sign * (int32 (Convert.ToUInt32(parseBinaryUInt64 (s.Substring(p))))) | 'o' -> sign * (int32 (Convert.ToUInt32(parseOctalUInt64 (s.Substring(p))))) | _ -> Int32.Parse(s, NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture) - -let lexemeTrimRightToInt32 args lexbuf n = + +let lexemeTrimRightToInt32 args lexbuf n = try parseInt32 (lexemeTrimRight lexbuf n) with _ -> fail args lexbuf (FSComp.SR.lexOutsideIntegerRange()) 0 //-------------------------- // Checks -let checkExprOp (lexbuf:UnicodeLexing.Lexbuf) = - if lexbuf.LexemeContains ':' then +let checkExprOp (lexbuf:UnicodeLexing.Lexbuf) = + if lexbuf.LexemeContains ':' then deprecatedWithError (FSComp.SR.lexCharNotAllowedInOperatorNames(":")) lexbuf.LexemeRange - if lexbuf.LexemeContains '$' then - deprecatedWithError (FSComp.SR.lexCharNotAllowedInOperatorNames("$")) lexbuf.LexemeRange + if lexbuf.LexemeContains '$' then + deprecatedWithError (FSComp.SR.lexCharNotAllowedInOperatorNames("$")) lexbuf.LexemeRange let unexpectedChar lexbuf = LEX_FAILURE (FSComp.SR.lexUnexpectedChar(lexeme lexbuf)) -/// Arbitrary value -[] -let StringCapacity = 100 - let startString args (lexbuf: UnicodeLexing.Lexbuf) = - let buf = ByteBuffer.Create StringCapacity - let m = lexbuf.LexemeRange - let startp = lexbuf.StartPos + let buf = ByteBuffer.Create 100 + let m = lexbuf.LexemeRange + let startp = lexbuf.StartPos let fin = - LexerStringFinisher (fun buf kind context cont -> - // Adjust the start-of-token mark back to the true start of the token + LexerStringFinisher (fun buf kind isPart cont -> + // Adjust the start-of-token mark back to the true start of the token lexbuf.StartPos <- startp - let isPart = context.HasFlag(LexerStringFinisherContext.InterpolatedPart) - let isVerbatim = context.HasFlag(LexerStringFinisherContext.Verbatim) - let isTripleQuote = context.HasFlag(LexerStringFinisherContext.TripleQuote) - if kind.IsByteString then - let synByteStringKind = if isVerbatim then SynByteStringKind.Verbatim else SynByteStringKind.Regular - if kind.IsInterpolated then + if kind.IsInterpolated then fail args lexbuf (FSComp.SR.lexByteStringMayNotBeInterpolated()) () - BYTEARRAY (Lexhelp.stringBufferAsBytes buf, synByteStringKind, cont) + BYTEARRAY (Lexhelp.stringBufferAsBytes buf, cont) elif Lexhelp.stringBufferIsBytes buf then - BYTEARRAY (Lexhelp.stringBufferAsBytes buf, synByteStringKind, cont) + BYTEARRAY (Lexhelp.stringBufferAsBytes buf, cont) else fail args lexbuf (FSComp.SR.lexByteArrayCannotEncode()) () - BYTEARRAY (Lexhelp.stringBufferAsBytes buf, synByteStringKind, cont) - elif kind.IsInterpolated then + BYTEARRAY (Lexhelp.stringBufferAsBytes buf, cont) + elif kind.IsInterpolated then let s = Lexhelp.stringBufferAsString buf - if kind.IsInterpolatedFirst then - let synStringKind = - if isTripleQuote then - SynStringKind.TripleQuote - elif isVerbatim then - SynStringKind.Verbatim - else - SynStringKind.Regular - if isPart then - INTERP_STRING_BEGIN_PART (s, synStringKind, cont) + if kind.IsInterpolatedFirst then + if isPart then + INTERP_STRING_BEGIN_PART (s, cont) else - INTERP_STRING_BEGIN_END (s, synStringKind, cont) + INTERP_STRING_BEGIN_END (s, cont) else if isPart then INTERP_STRING_PART (s, cont) @@ -177,43 +160,36 @@ let startString args (lexbuf: UnicodeLexing.Lexbuf) = INTERP_STRING_END (s, cont) else let s = Lexhelp.stringBufferAsString buf - let synStringKind = - if isVerbatim then - SynStringKind.Verbatim - elif isTripleQuote then - SynStringKind.TripleQuote - else - SynStringKind.Regular - STRING (s, synStringKind, cont)) + STRING (s, cont)) buf,fin,m - - -// Utility functions for processing XML documentation + + +// Utility functions for processing XML documentation let trySaveXmlDoc (lexbuf: LexBuffer) (buff: (range * StringBuilder) option) = - match buff with - | None -> () + match buff with + | None -> () | Some (start, sb) -> let xmlCommentLineRange = mkFileIndexRange start.FileIndex start.Start (posOfLexPosition lexbuf.StartPos) LexbufLocalXmlDocStore.SaveXmlDocLine (lexbuf, sb.ToString(), xmlCommentLineRange) - + let tryAppendXmlDoc (buff: (range * StringBuilder) option) (s:string) = - match buff with + match buff with | None -> () | Some (_, sb) -> ignore(sb.Append s) -// Utilities for parsing #if/#else/#endif +// Utilities for parsing #if/#else/#endif -let shouldStartLine args lexbuf (m:range) err tok = +let shouldStartLine args lexbuf (m:range) err tok = if (m.StartColumn <> 0) then fail args lexbuf err tok else tok -let shouldStartFile args lexbuf (m:range) err tok = +let shouldStartFile args lexbuf (m:range) err tok = if (m.StartColumn <> 0 || m.StartLine <> 1) then fail args lexbuf err tok else tok -let evalIfDefExpression startPos reportLibraryOnlyFeatures isFeatureSupported args (lookup:string->bool) (lexed:string) = - let lexbuf = LexBuffer.FromChars (reportLibraryOnlyFeatures, isFeatureSupported, lexed.ToCharArray ()) +let evalIfDefExpression startPos isFeatureSupported args (lookup:string->bool) (lexed:string) = + let lexbuf = LexBuffer.FromChars (isFeatureSupported, lexed.ToCharArray ()) lexbuf.StartPos <- startPos lexbuf.EndPos <- startPos let tokenStream = FSharp.Compiler.PPLexer.tokenstream args @@ -252,7 +228,7 @@ let ignored_op_char = '.' | '$' | '?' let separator = '_' -let xinteger = +let xinteger = ( '0' ('x'| 'X') hex ((hex | separator)* hex)? | '0' ('o'| 'O') (['0'-'7']) (((['0'-'7']) | separator)* (['0'-'7']))? | '0' ('b'| 'B') (['0'-'1']) (((['0'-'1']) | separator)* (['0'-'1']))?) @@ -261,17 +237,17 @@ let integer = digit ((digit | separator)* digit)? let int8 = integer 'y' -let uint8 = (xinteger | integer) 'u' 'y' +let uint8 = (xinteger | integer) 'u' 'y' let int16 = integer 's' let uint16 = (xinteger | integer) 'u' 's' -let int = integer +let int = integer let int32 = integer 'l' -let uint32 = (xinteger | integer) 'u' +let uint32 = (xinteger | integer) 'u' let uint32l = (xinteger | integer) 'u' 'l' @@ -279,29 +255,29 @@ let nativeint = (xinteger | integer) 'n' let unativeint = (xinteger | integer) 'u' 'n' -let int64 = (xinteger | integer) 'L' +let int64 = (xinteger | integer) 'L' -let uint64 = (xinteger | integer) ('u' | 'U') 'L' +let uint64 = (xinteger | integer) ('u' | 'U') 'L' let xint8 = xinteger 'y' let xint16 = xinteger 's' -let xint = xinteger +let xint = xinteger let xint32 = xinteger 'l' -let floatp = digit ((digit | separator)* digit)? '.' (digit ((digit | separator)* digit)?)? +let floatp = digit ((digit | separator)* digit)? '.' (digit ((digit | separator)* digit)?)? let floate = digit ((digit | separator)* digit)? ('.' (digit ((digit | separator)* digit)?)? )? ('e'| 'E') ['+' '-']? digit ((digit | separator)* digit)? -let float = floatp | floate +let float = floatp | floate let bignum = integer ('I' | 'N' | 'Z' | 'Q' | 'R' | 'G') let ieee64 = float -let ieee32 = float ('f' | 'F') +let ieee32 = float ('f' | 'F') let ieee32_dotless_no_exponent = integer ('f' | 'F') @@ -317,7 +293,7 @@ let char = '\'' ( [^'\\''\n''\r''\t''\b'] | escape_char) '\'' let trigraph = '\\' digit digit digit -let hexGraphShort = '\\' 'x' hex hex +let hexGraphShort = '\\' 'x' hex hex let unicodeGraphShort = '\\' 'u' hex hex hex hex @@ -329,33 +305,33 @@ let connecting_char = '\Pc' let combining_char = '\Mn' | '\Mc' -let formatting_char = '\Cf' +let formatting_char = '\Cf' -let ident_start_char = +let ident_start_char = letter | '_' -let ident_char = +let ident_char = letter - | connecting_char - | combining_char - | formatting_char - | digit + | connecting_char + | combining_char + | formatting_char + | digit | ['\''] - + let ident = ident_start_char ident_char* rule token args skip = parse - | ident + | ident { Keywords.KeywordOrIdentifierToken args lexbuf (lexeme lexbuf) } - | "do!" - { DO_BANG } + | "do!" + { DO_BANG } - | "yield!" - { YIELD_BANG(true) } + | "yield!" + { YIELD_BANG(true) } - | "return!" - { YIELD_BANG(false) } + | "return!" + { YIELD_BANG(false) } | "match!" { MATCH_BANG } @@ -363,23 +339,23 @@ rule token args skip = parse | "and!" { AND_BANG(false) } - | ident '!' - { let tok = Keywords.KeywordOrIdentifierToken args lexbuf (lexemeTrimRight lexbuf 1) - match tok with + | ident '!' + { let tok = Keywords.KeywordOrIdentifierToken args lexbuf (lexemeTrimRight lexbuf 1) + match tok with | LET _ -> BINDER (lexemeTrimRight lexbuf 1) - | _ -> fail args lexbuf (FSComp.SR.lexIdentEndInMarkReserved("!")) (Keywords.KeywordOrIdentifierToken args lexbuf (lexeme lexbuf)) } + | _ -> fail args lexbuf (FSComp.SR.lexIdentEndInMarkReserved("!")) (Keywords.KeywordOrIdentifierToken args lexbuf (lexeme lexbuf)) } - | ident ('#') + | ident ('#') { fail args lexbuf (FSComp.SR.lexIdentEndInMarkReserved("#")) (Keywords.KeywordOrIdentifierToken args lexbuf (lexeme lexbuf)) } - | int8 + | int8 { let n = lexemeTrimRightToInt32 args lexbuf 1 - // Allow to parse as min_int. Allowed only because we parse '-' as an operator. + // Allow to parse as min_int. Allowed only because we parse '-' as an operator. if Ranges.isInt8BadMax n then INT8(SByte.MinValue, true (* 'true' = 'bad'*) ) else if n > int SByte.MaxValue || n < int SByte.MinValue then fail args lexbuf (FSComp.SR.lexOutsideEightBitSigned()) (INT8(0y, false)) else INT8(sbyte n, false) } - | xint8 + | xint8 { let n = lexemeTrimRightToInt32 args lexbuf 1 if n > int Byte.MaxValue || n < 0 then fail args lexbuf (FSComp.SR.lexOutsideEightBitSignedHex()) (INT8(0y, false)) else INT8(sbyte(byte(n)), false) } @@ -389,93 +365,93 @@ rule token args skip = parse if n > int Byte.MaxValue || n < 0 then fail args lexbuf (FSComp.SR.lexOutsideEightBitUnsigned()) (UINT8(0uy)) else UINT8(byte n) } - | int16 + | int16 { let n = lexemeTrimRightToInt32 args lexbuf 1 - // Allow to parse as min_int. Allowed only because we parse '-' as an operator. + // Allow to parse as min_int. Allowed only because we parse '-' as an operator. if Ranges.isInt16BadMax n then INT16(Int16.MinValue, true (* 'true' = 'bad'*) ) else if n > int Int16.MaxValue || n < int Int16.MinValue then fail args lexbuf (FSComp.SR.lexOutsideSixteenBitSigned()) (INT16(0s, false)) else INT16(int16 n, false) } - | xint16 + | xint16 { let n = lexemeTrimRightToInt32 args lexbuf 1 if n > int UInt16.MaxValue || n < 0 then fail args lexbuf (FSComp.SR.lexOutsideSixteenBitSigned()) (INT16(0s,false)) else INT16(int16(uint16(n)), false) } - | uint16 + | uint16 { let n = lexemeTrimRightToInt32 args lexbuf 2 if n > int UInt16.MaxValue || n < 0 then fail args lexbuf (FSComp.SR.lexOutsideSixteenBitUnsigned()) (UINT16(0us)) else UINT16(uint16 n) } - | int '.' '.' + | int '.' '.' { let s = removeUnderscores (lexemeTrimRight lexbuf 2) - // Allow to parse as min_int. Allowed only because we parse '-' as an operator. + // Allow to parse as min_int. Allowed only because we parse '-' as an operator. if Ranges.isInt32BadMax s then INT32_DOT_DOT(Int32.MinValue, true (* 'true' = 'bad'*) ) else let n = try int32 s with _ -> fail args lexbuf (FSComp.SR.lexOutsideThirtyTwoBitSigned()) 0 INT32_DOT_DOT(n, false) - } + } - | xint - | int + | xint + | int { let s = removeUnderscores (lexeme lexbuf) - // Allow to parse as min_int. Allowed only because we parse '-' as an operator. + // Allow to parse as min_int. Allowed only because we parse '-' as an operator. if Ranges.isInt32BadMax s then INT32(Int32.MinValue, true (* 'true' = 'bad'*) ) else let n = try int32 s with _ -> fail args lexbuf (FSComp.SR.lexOutsideThirtyTwoBitSigned()) 0 INT32(n, false) - } + } - | xint32 - | int32 + | xint32 + | int32 { let s = removeUnderscores (lexemeTrimRight lexbuf 1) - // Allow to parse as min_int. Allowed only because we parse '-' as an operator. + // Allow to parse as min_int. Allowed only because we parse '-' as an operator. if Ranges.isInt32BadMax s then INT32(Int32.MinValue, true (* 'true' = 'bad'*) ) else let n = try int32 s with _ -> fail args lexbuf (FSComp.SR.lexOutsideThirtyTwoBitSigned()) 0 INT32(n, false) - } + } | uint32 - { + { let s = removeUnderscores (lexemeTrimRight lexbuf 1) - let n = + let n = try int64 s with _ -> fail args lexbuf (FSComp.SR.lexOutsideThirtyTwoBitUnsigned()) 0L if n > int64 UInt32.MaxValue || n < 0L then fail args lexbuf (FSComp.SR.lexOutsideThirtyTwoBitUnsigned()) (UINT32(0u)) else - UINT32(uint32 (uint64 n)) } + UINT32(uint32 (uint64 n)) } | uint32l - { + { let s = removeUnderscores (lexemeTrimRight lexbuf 2) - let n = + let n = try int64 s with _ -> fail args lexbuf (FSComp.SR.lexOutsideThirtyTwoBitUnsigned()) 0L if n > int64 UInt32.MaxValue || n < 0L then fail args lexbuf (FSComp.SR.lexOutsideThirtyTwoBitUnsigned()) (UINT32(0u)) else - UINT32(uint32 (uint64 n)) } + UINT32(uint32 (uint64 n)) } - | int64 + | int64 { let s = removeUnderscores (lexemeTrimRight lexbuf 1) - // Allow to parse as min_int. Stupid but allowed because we parse '-' as an operator. + // Allow to parse as min_int. Stupid but allowed because we parse '-' as an operator. if Ranges.isInt64BadMax s then INT64(Int64.MinValue, true (* 'true' = 'bad'*) ) else - let n = + let n = try int64 s with _ -> fail args lexbuf (FSComp.SR.lexOutsideSixtyFourBitSigned()) 0L INT64(n,false) } - | uint64 + | uint64 { let s = removeUnderscores (lexemeTrimRight lexbuf 2) - let n = + let n = try uint64 s with _ -> fail args lexbuf (FSComp.SR.lexOutsideSixtyFourBitUnsigned()) 0UL - UINT64(n) } + UINT64(n) } - | nativeint + | nativeint { let s = removeUnderscores (lexemeTrimRight lexbuf 1) - // Allow to parse as min_nativeint. Stupid but allowed because we parse '-' as an operator. + // Allow to parse as min_nativeint. Stupid but allowed because we parse '-' as an operator. if Ranges.isInt64BadMax s then NATIVEINT(Int64.MinValue, true) else - let n = + let n = try int64 s with _ -> fail args lexbuf (FSComp.SR.lexOutsideNativeSigned()) 0L NATIVEINT(n,false) } - | unativeint - { try + | unativeint + { try UNATIVEINT(uint64 (removeUnderscores (lexemeTrimRight lexbuf 2))) with _ -> fail args lexbuf (FSComp.SR.lexOutsideNativeUnsigned()) (UNATIVEINT(0UL)) } @@ -492,137 +468,137 @@ rule token args skip = parse | ieee64 { IEEE64 (try float(lexeme lexbuf) with _ -> fail args lexbuf (FSComp.SR.lexInvalidFloat()) 0.0) } - | decimal - { try + | decimal + { try let s = removeUnderscores (lexemeTrimRight lexbuf 1) - // This implements a range check for decimal literals + // This implements a range check for decimal literals let d = System.Decimal.Parse(s,System.Globalization.NumberStyles.AllowExponent ||| System.Globalization.NumberStyles.Number,System.Globalization.CultureInfo.InvariantCulture) - DECIMAL d - with + DECIMAL d + with e -> fail args lexbuf (FSComp.SR.lexOusideDecimal()) (DECIMAL (decimal 0)) } - | xieee32 - { + | xieee32 + { let s = removeUnderscores (lexemeTrimRight lexbuf 2) - // Even though the intermediate step is an int64, display the "invalid float" message, since it will be less confusing to the user - let n64 = (try (int64 s) with _ -> fail args lexbuf (FSComp.SR.lexInvalidFloat()) 0L) + // Even though the intermediate step is an int64, display the "invalid float" message, since it will be less confusing to the user + let n64 = (try (int64 s) with _ -> fail args lexbuf (FSComp.SR.lexInvalidFloat()) 0L) if n64 > 0xFFFFFFFFL || n64 < 0L then fail args lexbuf (FSComp.SR.lexOusideThirtyTwoBitFloat()) (IEEE32 0.0f) else IEEE32 (System.BitConverter.ToSingle(System.BitConverter.GetBytes(int32 (uint32 (uint64 n64))),0)) } - | xieee64 - { - let n64 = (try int64 (removeUnderscores (lexemeTrimRight lexbuf 2)) with _ -> fail args lexbuf (FSComp.SR.lexInvalidFloat()) 0L) + | xieee64 + { + let n64 = (try int64 (removeUnderscores (lexemeTrimRight lexbuf 2)) with _ -> fail args lexbuf (FSComp.SR.lexInvalidFloat()) 0L) IEEE64 (System.BitConverter.Int64BitsToDouble(n64)) } - - | bignum - { let s = lexeme lexbuf + + | bignum + { let s = lexeme lexbuf BIGNUM (removeUnderscores (lexemeTrimRight lexbuf 1), s.[s.Length-1..s.Length-1]) } | (int | xint | float) ident_char+ { fail args lexbuf (FSComp.SR.lexInvalidNumericLiteral()) (INT32(0,false)) } - + | char - { let s = lexeme lexbuf + { let s = lexeme lexbuf CHAR (if s.[1] = '\\' then escape s.[2] else s.[1]) } - | char 'B' - { let s = lexeme lexbuf + | char 'B' + { let s = lexeme lexbuf let x = int32 (if s.[1] = '\\' then escape s.[2] else s.[1]) - if x < 0 || x > 127 then + if x < 0 || x > 127 then fail args lexbuf (FSComp.SR.lexInvalidByteLiteral()) (UINT8(byte 0)) else UINT8 (byte(x)) } - + | '\'' trigraph '\'' - { let s = lexeme lexbuf - let c = trigraph s.[2] s.[3] s.[4] + { let s = lexeme lexbuf + let c = trigraph s.[2] s.[3] s.[4] let x = int32 c - if x < 0 || x > 255 then + if x < 0 || x > 255 then fail args lexbuf (FSComp.SR.lexInvalidCharLiteral()) (CHAR c) else CHAR c } | '\'' trigraph '\'' 'B' - { let s = lexeme lexbuf + { let s = lexeme lexbuf let x = int32 (trigraph s.[2] s.[3] s.[4]) - if x < 0 || x > 255 then + if x < 0 || x > 255 then fail args lexbuf (FSComp.SR.lexInvalidByteLiteral()) (UINT8(byte 0)) else UINT8 (byte(x)) } | '\'' unicodeGraphShort '\'' 'B' { let x = int32 (unicodeGraphShort (lexemeTrimBoth lexbuf 3 2)) - if x < 0 || x > 127 then + if x < 0 || x > 127 then fail args lexbuf (FSComp.SR.lexInvalidByteLiteral()) (UINT8(byte 0)) else UINT8 (byte(x)) } - + | '\'' hexGraphShort '\'' { CHAR (char (int32 (hexGraphShort (lexemeTrimBoth lexbuf 3 1)))) } | '\'' unicodeGraphShort '\'' { CHAR (char (int32 (unicodeGraphShort (lexemeTrimBoth lexbuf 3 1)))) } - | '\'' unicodeGraphLong '\'' + | '\'' unicodeGraphLong '\'' { match unicodeGraphLong (lexemeTrimBoth lexbuf 3 1) with | SingleChar(c) -> CHAR (char c) | _ -> fail args lexbuf (FSComp.SR.lexThisUnicodeOnlyInStringLiterals()) (CHAR (char 0)) } - | "(*IF-FSHARP" + | "(*IF-FSHARP" { if not skip then COMMENT (LexCont.Token (args.ifdefStack, args.stringNest)) else token args skip lexbuf } - | "(*F#" - { if not skip then COMMENT (LexCont.Token (args.ifdefStack, args.stringNest)) + | "(*F#" + { if not skip then COMMENT (LexCont.Token (args.ifdefStack, args.stringNest)) else token args skip lexbuf } - | "ENDIF-FSHARP*)" + | "ENDIF-FSHARP*)" { if not skip then COMMENT (LexCont.Token (args.ifdefStack, args.stringNest)) else token args skip lexbuf } - | "F#*)" - { if not skip then COMMENT (LexCont.Token (args.ifdefStack, args.stringNest)) + | "F#*)" + { if not skip then COMMENT (LexCont.Token (args.ifdefStack, args.stringNest)) else token args skip lexbuf } - | "(*)" + | "(*)" { LPAREN_STAR_RPAREN } | "(*" - { let m = lexbuf.LexemeRange + { let m = lexbuf.LexemeRange if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, 1, m)) else comment (1,m,args) skip lexbuf } - | "(*IF-CAML*)" | "(*IF-OCAML*)" - { let m = lexbuf.LexemeRange + | "(*IF-CAML*)" | "(*IF-OCAML*)" + { let m = lexbuf.LexemeRange if not skip then COMMENT (LexCont.MLOnly(args.ifdefStack, args.stringNest, m)) else mlOnly m args skip lexbuf } - | '"' - { let buf, fin, m = startString args lexbuf - + | '"' + { let buf, fin, m = startString args lexbuf + // Single quote in triple quote ok, others disallowed - match args.stringNest with + match args.stringNest with | (_, LexerStringStyle.TripleQuote, _) :: _ -> () | _ :: _ -> errorR(Error(FSComp.SR.lexSingleQuoteInSingleQuote(), m)) | [] -> () if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, LexerStringKind.String, m)) else singleQuoteString (buf, fin, m, LexerStringKind.String, args) skip lexbuf } - - | '$' '"' '"' '"' - { let buf, fin, m = startString args lexbuf - + + | '$' '"' '"' '"' + { let buf, fin, m = startString args lexbuf + // Single quote in triple quote ok, others disallowed - match args.stringNest with + match args.stringNest with | _ :: _ -> errorR(Error(FSComp.SR.lexTripleQuoteInTripleQuote(), m)) | [] -> () if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, LexerStringKind.InterpolatedStringFirst, m)) else tripleQuoteString (buf, fin, m, LexerStringKind.InterpolatedStringFirst, args) skip lexbuf } - - | '$' '"' - { let buf,fin,m = startString args lexbuf - + + | '$' '"' + { let buf,fin,m = startString args lexbuf + // Single quote in triple quote ok, others disallowed - match args.stringNest with + match args.stringNest with | (_, LexerStringStyle.TripleQuote, _) :: _ -> () | _ :: _ -> errorR(Error(FSComp.SR.lexSingleQuoteInSingleQuote(), m)) | _ -> () @@ -630,22 +606,22 @@ rule token args skip = parse if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, LexerStringKind.InterpolatedStringFirst, m)) else singleQuoteString (buf, fin, m, LexerStringKind.InterpolatedStringFirst, args) skip lexbuf } - | '"' '"' '"' - { let buf, fin, m = startString args lexbuf - + | '"' '"' '"' + { let buf, fin, m = startString args lexbuf + // Single quote in triple quote ok, others disallowed - match args.stringNest with + match args.stringNest with | _ :: _ -> errorR(Error(FSComp.SR.lexTripleQuoteInTripleQuote(), m)) | _ -> () if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, LexerStringKind.String, m)) else tripleQuoteString (buf, fin, m, LexerStringKind.String, args) skip lexbuf } - - | '@' '"' - { let buf, fin, m = startString args lexbuf - + + | '@' '"' + { let buf, fin, m = startString args lexbuf + // Single quote in triple quote ok, others disallowed - match args.stringNest with + match args.stringNest with | (_, LexerStringStyle.TripleQuote, _) :: _ -> () | _ :: _ -> errorR(Error(FSComp.SR.lexSingleQuoteInSingleQuote(), m)) | _ -> () @@ -653,11 +629,11 @@ rule token args skip = parse if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, LexerStringKind.String, m)) else verbatimString (buf, fin, m, LexerStringKind.String, args) skip lexbuf } - | ("$@" | "@$") '"' - { let buf, fin, m = startString args lexbuf - + | ("$@" | "@$") '"' + { let buf, fin, m = startString args lexbuf + // Single quote in triple quote ok, others disallowed - match args.stringNest with + match args.stringNest with | (_, LexerStringStyle.TripleQuote, _) :: _ -> () | _ :: _ -> errorR(Error(FSComp.SR.lexSingleQuoteInSingleQuote(), m)) | _ -> () @@ -665,92 +641,92 @@ rule token args skip = parse if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, LexerStringKind.InterpolatedStringFirst, m)) else verbatimString (buf, fin, m, LexerStringKind.InterpolatedStringFirst, args) skip lexbuf } - | truewhite+ + | truewhite+ { if skip then token args skip lexbuf else WHITESPACE (LexCont.Token(args.ifdefStack, args.stringNest)) } - | offwhite+ + | offwhite+ { if args.lightStatus.Status then errorR(Error(FSComp.SR.lexTabsNotAllowed(), lexbuf.LexemeRange)) if not skip then WHITESPACE (LexCont.Token(args.ifdefStack, args.stringNest)) else token args skip lexbuf } - | "////" op_char* - { // 4+ slash are 1-line comments, online 3 slash are XmlDoc - let m = lexbuf.LexemeRange + | "////" op_char* + { // 4+ slash are 1-line comments, online 3 slash are XmlDoc + let m = lexbuf.LexemeRange if not skip then LINE_COMMENT (LexCont.SingleLineComment(args.ifdefStack, args.stringNest, 1, m)) else singleLineComment (None,1,m,args) skip lexbuf } | "///" op_char* - { // Match exactly 3 slash, 4+ slash caught by preceding rule + { // Match exactly 3 slash, 4+ slash caught by preceding rule let m = lexbuf.LexemeRange - let doc = lexemeTrimLeft lexbuf 3 + let doc = lexemeTrimLeft lexbuf 3 let sb = (new StringBuilder(100)).Append(doc) - if not skip then LINE_COMMENT (LexCont.SingleLineComment(args.ifdefStack, args.stringNest, 1, m)) + if not skip then LINE_COMMENT (LexCont.SingleLineComment(args.ifdefStack, args.stringNest, 1, m)) else singleLineComment (Some (m, sb),1,m,args) skip lexbuf } | "//" op_char* - { // Need to read all operator symbols too, otherwise it might be parsed by a rule below + { // Need to read all operator symbols too, otherwise it might be parsed by a rule below let m = lexbuf.LexemeRange if not skip then LINE_COMMENT (LexCont.SingleLineComment(args.ifdefStack, args.stringNest, 1, m)) else singleLineComment (None,1,m,args) skip lexbuf } - | newline + | newline { newline lexbuf if not skip then WHITESPACE (LexCont.Token(args.ifdefStack, args.stringNest)) else token args skip lexbuf } - | '`' '`' ([^'`' '\n' '\r' '\t'] | '`' [^'`''\n' '\r' '\t']) + '`' '`' + | '`' '`' ([^'`' '\n' '\r' '\t'] | '`' [^'`''\n' '\r' '\t']) + '`' '`' { Keywords.IdentifierToken args lexbuf (lexemeTrimBoth lexbuf 2 2) } | ('#' anywhite* | "#line" anywhite+ ) digit+ anywhite* ('@'? "\"" [^'\n''\r''"']+ '"')? anywhite* newline - { let pos = lexbuf.EndPos - if skip then - let s = lexeme lexbuf - let rec parseLeadingDirective n = - match s.[n] with - | c when c >= 'a' && c <= 'z' -> parseLeadingDirective (n+1) + { let pos = lexbuf.EndPos + if skip then + let s = lexeme lexbuf + let rec parseLeadingDirective n = + match s.[n] with + | c when c >= 'a' && c <= 'z' -> parseLeadingDirective (n+1) | _ -> parseLeadingWhitespace n // goto the next state - - and parseLeadingWhitespace n = - match s.[n] with - | ' ' | '\t' -> parseLeadingWhitespace (n+1) + + and parseLeadingWhitespace n = + match s.[n] with + | ' ' | '\t' -> parseLeadingWhitespace (n+1) | _ -> parseLineNumber n n // goto the next state - - and parseLineNumber start n = - match s.[n] with + + and parseLineNumber start n = + match s.[n] with | c when c >= '0' && c <= '9' -> parseLineNumber start (n+1) - | _ -> let text = (String.sub s start (n-start)) - let lineNumber = + | _ -> let text = (String.sub s start (n-start)) + let lineNumber = try int32 text with err -> errorR(Error(FSComp.SR.lexInvalidLineNumber(text), lexbuf.LexemeRange)); 0 lineNumber, parseWhitespaceBeforeFile n // goto the next state - - and parseWhitespaceBeforeFile n = - match s.[n] with - | ' ' | '\t' | '@' -> parseWhitespaceBeforeFile (n+1) + + and parseWhitespaceBeforeFile n = + match s.[n] with + | ' ' | '\t' | '@' -> parseWhitespaceBeforeFile (n+1) | '"' -> Some (parseFile (n+1) (n+1)) | _ -> None - - and parseFile start n = - match s.[n] with - | '"' -> String.sub s start (n-start) - | _ -> parseFile start (n+1) + + and parseFile start n = + match s.[n] with + | '"' -> String.sub s start (n-start) + | _ -> parseFile start (n+1) // Call the parser - let line,file = parseLeadingDirective 1 + let line,file = parseLeadingDirective 1 // Construct the new position - if args.applyLineDirectives then - lexbuf.EndPos <- pos.ApplyLineDirective((match file with Some f -> FileIndex.fileIndexOfFile f | None -> pos.FileIndex), line) + if args.applyLineDirectives then + lexbuf.EndPos <- pos.ApplyLineDirective((match file with Some f -> fileIndexOfFile f | None -> pos.FileIndex), line) else // add a newline when we don't apply a directive since we consumed a newline getting here newline lexbuf - token args skip lexbuf + token args skip lexbuf else // add a newline when we don't apply a directive since we consumed a newline getting here newline lexbuf HASH_LINE (LexCont.Token (args.ifdefStack, args.stringNest)) } - + | "<@" { checkExprOp lexbuf; LQUOTE ("<@ @>", false) } | "<@@" { checkExprOp lexbuf; LQUOTE ("<@@ @@>", true) } @@ -850,21 +826,21 @@ rule token args skip = parse | "|" { BAR } - | "}" - { + | "}" + { // We encounter a '}' in the expression token stream. First check if we're in an interpolated string expression // and continue the string if necessary match args.stringNest with | (1, style, _) :: rest -> args.stringNest <- rest - let buf, fin, m = startString args lexbuf - if not skip then + let buf, fin, m = startString args lexbuf + if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, style, LexerStringKind.InterpolatedStringPart, m)) - else - match style with - | LexerStringStyle.Verbatim -> verbatimString (buf, fin, m, LexerStringKind.InterpolatedStringPart, args) skip lexbuf - | LexerStringStyle.SingleQuote -> singleQuoteString (buf, fin, m, LexerStringKind.InterpolatedStringPart, args) skip lexbuf - | LexerStringStyle.TripleQuote -> tripleQuoteString (buf, fin, m, LexerStringKind.InterpolatedStringPart, args) skip lexbuf + else + match style with + | LexerStringStyle.Verbatim -> verbatimString (buf, fin, m, LexerStringKind.InterpolatedStringPart, args) skip lexbuf + | LexerStringStyle.SingleQuote -> singleQuoteString (buf, fin, m, LexerStringKind.InterpolatedStringPart, args) skip lexbuf + | LexerStringStyle.TripleQuote -> tripleQuoteString (buf, fin, m, LexerStringKind.InterpolatedStringPart, args) skip lexbuf | (counter, style, m) :: rest -> // Note, we do not update the 'm', any incomplete-interpolation error @@ -910,44 +886,42 @@ rule token args skip = parse | ".()" | ".()<-" { FUNKY_OPERATOR_NAME(lexeme lexbuf) } - | "#!" op_char* + | "#!" op_char* { // Treat shebangs like regular comments, but they are only allowed at the start of a file let m = lexbuf.LexemeRange let tok = LINE_COMMENT (LexCont.SingleLineComment(args.ifdefStack, args.stringNest, 1, m)) let tok = shouldStartFile args lexbuf m (0,FSComp.SR.lexHashBangMustBeFirstInFile()) tok if not skip then tok else singleLineComment (None,1,m,args) skip lexbuf } - | "#light" anywhite* + | "#light" anywhite* | ("#indent" | "#light") anywhite+ "\"on\"" - { if args.lightStatus.ExplicitlySet && args.lightStatus.WarnOnMultipleTokens then - let s = lexeme lexbuf - warning(Error((0, sprintf "%s should only be set once in an F# source file." s), lexbuf.LexemeRange)) - // TODO: where should this go? (abelb) - //warning(Error((0,"#light should only occur as the first non-comment text in an F# source file."), lexbuf.LexemeRange)) - args.lightStatus.Status <- true + { if args.lightStatus.ExplicitlySet && args.lightStatus.WarnOnMultipleTokens then + 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.lightStatus.Status <- true if not skip then HASH_LIGHT (LexCont.Token(args.ifdefStack, args.stringNest)) - else token args skip lexbuf } + else token args skip lexbuf } - | ("#indent" | "#light") anywhite+ "\"off\"" - { args.lightStatus.Status <- false + | ("#indent" | "#light") anywhite+ "\"off\"" + { args.lightStatus.Status <- false mlCompatWarning (FSComp.SR.lexIndentOffForML()) lexbuf.LexemeRange if not skip then HASH_LIGHT (LexCont.Token (args.ifdefStack, args.stringNest)) - else token args skip lexbuf } - + else token args skip lexbuf } + | anywhite* "#if" anywhite+ anystring - { let m = lexbuf.LexemeRange + { let m = lexbuf.LexemeRange let lookup id = List.contains id args.defines let lexed = lexeme lexbuf - let isTrue = evalIfDefExpression lexbuf.StartPos lexbuf.ReportLibraryOnlyFeatures lexbuf.SupportsFeature args lookup lexed + let isTrue = evalIfDefExpression lexbuf.StartPos lexbuf.SupportsFeature args lookup lexed args.ifdefStack <- (IfDefIf,m) :: args.ifdefStack - + // Get the token; make sure it starts at zero position & return - let cont, f = + let cont, f = if isTrue then let cont = LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Token) let f = endline LexerEndlineContinuation.Token args skip cont, f - else + else let cont = LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Skip(0, m)) let f = endline (LexerEndlineContinuation.Skip(0, m)) args skip cont, f @@ -960,124 +934,116 @@ rule token args skip = parse match args.ifdefStack with | [] -> LEX_FAILURE (FSComp.SR.lexHashElseNoMatchingIf()) | (IfDefElse,_) :: _rest -> LEX_FAILURE (FSComp.SR.lexHashEndifRequiredForElse()) - | (IfDefIf,_) :: rest -> - let m = lexbuf.LexemeRange + | (IfDefIf,_) :: rest -> + let m = lexbuf.LexemeRange args.ifdefStack <- (IfDefElse,m) :: rest let tok = HASH_ELSE(m, lexed, LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Skip(0, m))) let tok = shouldStartLine args lexbuf m (FSComp.SR.lexHashElseMustBeFirst()) tok if not skip then tok else endline (LexerEndlineContinuation.Skip(0, m)) args skip lexbuf } | anywhite* "#endif" anywhite* ("//" [^'\n''\r']*)? - { let lexed = (lexeme lexbuf) - let m = lexbuf.LexemeRange + { let lexed = (lexeme lexbuf) + let m = lexbuf.LexemeRange match args.ifdefStack with | []-> LEX_FAILURE (FSComp.SR.lexHashEndingNoMatchingIf()) - | _ :: rest -> - args.ifdefStack <- rest - let tok = HASH_ENDIF(m,lexed,LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Token)) - let tok = shouldStartLine args lexbuf m (FSComp.SR.lexHashEndifMustBeFirst()) tok + | _ :: rest -> + args.ifdefStack <- rest + let tok = HASH_ENDIF(m,lexed,LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Token)) + let tok = shouldStartLine args lexbuf m (FSComp.SR.lexHashEndifMustBeFirst()) tok if not skip then tok else endline LexerEndlineContinuation.Token args skip lexbuf } - | "#if" + | "#if" { let tok = WHITESPACE (LexCont.Token (args.ifdefStack, args.stringNest)) - let tok = fail args lexbuf (FSComp.SR.lexHashIfMustHaveIdent()) tok + let tok = fail args lexbuf (FSComp.SR.lexHashIfMustHaveIdent()) tok if not skip then tok else token args skip lexbuf } - | anywhite* "#if" ident_char+ - | anywhite* "#else" ident_char+ - | anywhite* "#endif" ident_char+ - | anywhite* "#light" ident_char+ - { let n = (lexeme lexbuf).IndexOf('#') - lexbuf.StartPos <- lexbuf.StartPos.ShiftColumnBy(n) - HASH_IDENT(lexemeTrimLeft lexbuf (n+1)) } - | surrogateChar surrogateChar - | _ - { unexpectedChar lexbuf } + | _ + { unexpectedChar lexbuf } - | eof + | eof { EOF (LexCont.Token(args.ifdefStack, args.stringNest)) } -// Skips INACTIVE code until if finds #else / #endif matching with the #if or #else +// Skips INACTIVE code until if finds #else / #endif matching with the #if or #else -and ifdefSkip n m args skip = parse +and ifdefSkip n m args skip = parse | anywhite* "#if" anywhite+ anystring - { let m = lexbuf.LexemeRange - + { let m = lexbuf.LexemeRange + // If #if is the first thing on the line then increase depth, otherwise skip, because it is invalid (e.g. "(**) #if ...") if (m.StartColumn <> 0) then if not skip then INACTIVECODE (LexCont.IfDefSkip(args.ifdefStack, args.stringNest, n, m)) else ifdefSkip n m args skip lexbuf else - let tok = INACTIVECODE(LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Skip(n+1, m))) + let tok = INACTIVECODE(LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Skip(n+1, m))) if not skip then tok else endline (LexerEndlineContinuation.Skip(n+1, m)) args skip lexbuf } | anywhite* "#else" anywhite* ("//" [^'\n''\r']*)? - { let lexed = (lexeme lexbuf) - let m = lexbuf.LexemeRange - + { let lexed = (lexeme lexbuf) + let m = lexbuf.LexemeRange + // If #else is the first thing on the line then process it, otherwise ignore, because it is invalid (e.g. "(**) #else ...") if (m.StartColumn <> 0) then if not skip then INACTIVECODE (LexCont.IfDefSkip(args.ifdefStack, args.stringNest, n, m)) else ifdefSkip n m args skip lexbuf - elif n = 0 then + elif n = 0 then match args.ifdefStack with | []-> LEX_FAILURE (FSComp.SR.lexHashElseNoMatchingIf()) | (IfDefElse,_) :: _rest -> LEX_FAILURE (FSComp.SR.lexHashEndifRequiredForElse()) - | (IfDefIf,_) :: rest -> - let m = lexbuf.LexemeRange + | (IfDefIf,_) :: rest -> + let m = lexbuf.LexemeRange args.ifdefStack <- (IfDefElse,m) :: rest if not skip then HASH_ELSE(m,lexed,LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Token)) - else endline LexerEndlineContinuation.Token args skip lexbuf + else endline LexerEndlineContinuation.Token args skip lexbuf else if not skip then INACTIVECODE(LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Skip(n, m))) else endline (LexerEndlineContinuation.Skip(n, m)) args skip lexbuf } - + | anywhite* "#endif" anywhite* ("//" [^'\n''\r']*)? { let lexed = lexeme lexbuf - let m = lexbuf.LexemeRange - + let m = lexbuf.LexemeRange + // If #endif is the first thing on the line then process it, otherwise ignore, because it is invalid (e.g. "(**) #endif ...") if (m.StartColumn <> 0) then if not skip then INACTIVECODE (LexCont.IfDefSkip(args.ifdefStack, args.stringNest, n, m)) else ifdefSkip n m args skip lexbuf - elif n = 0 then + elif n = 0 then match args.ifdefStack with | [] -> LEX_FAILURE (FSComp.SR.lexHashEndingNoMatchingIf()) - | _ :: rest -> + | _ :: rest -> args.ifdefStack <- rest if not skip then HASH_ENDIF(m,lexed,LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Token)) - else endline LexerEndlineContinuation.Token args skip lexbuf + else endline LexerEndlineContinuation.Token args skip lexbuf else let tok = INACTIVECODE(LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Skip(n-1, m))) let tok = shouldStartLine args lexbuf m (FSComp.SR.lexWrongNestedHashEndif()) tok if not skip then tok else endline (LexerEndlineContinuation.Skip(n-1, m)) args skip lexbuf } - - | newline + + | newline { newline lexbuf; ifdefSkip n m args skip lexbuf } - + | [^ ' ' '\n' '\r' ]+ | anywhite+ | surrogateChar surrogateChar - | _ + | _ { // This tries to be nice and get tokens as 'words' because VS uses this when selecting stuff if not skip then INACTIVECODE (LexCont.IfDefSkip(args.ifdefStack, args.stringNest, n, m)) else ifdefSkip n m args skip lexbuf } - | eof + | eof { EOF (LexCont.IfDefSkip(args.ifdefStack, args.stringNest, n, m)) } -// Called after lexing #if IDENT/#else/#endif - this checks whether there is nothing except end of line -// or end of file and then calls the lexing function specified by 'cont' - either token or ifdefSkip +// Called after lexing #if IDENT/#else/#endif - this checks whether there is nothing except end of line +// 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 -> + | LexerEndlineContinuation.Token -> if not skip then WHITESPACE(LexCont.Token (args.ifdefStack, args.stringNest)) else token args skip lexbuf @@ -1088,9 +1054,9 @@ and endline cont args skip = parse | eof { match cont with - | LexerEndlineContinuation.Token -> + | LexerEndlineContinuation.Token -> EOF(LexCont.Token(args.ifdefStack, args.stringNest)) - | LexerEndlineContinuation.Skip(n, m) -> + | LexerEndlineContinuation.Skip(n, m) -> EOF(LexCont.IfDefSkip(args.ifdefStack, args.stringNest, n, m)) } @@ -1099,12 +1065,12 @@ and endline cont args skip = parse | _ { let tok = WHITESPACE (LexCont.Token (args.ifdefStack, args.stringNest)) let tok = fail args lexbuf (FSComp.SR.pplexExpectedSingleLineComment()) tok - if not skip then tok else token args skip lexbuf } + if not skip then tok else token args skip lexbuf } and singleQuoteString sargs skip = parse - | '\\' newline anywhite* - { let (_buf, _fin, m, kind, args) = sargs - newline lexbuf + | '\\' newline anywhite* + { let (_buf, _fin, m, kind, args) = sargs + newline lexbuf let text = lexeme lexbuf let text2 = text |> String.filter (fun c -> c <> ' ' && c <> '\t') advanceColumnBy lexbuf (text.Length - text2.Length) @@ -1112,34 +1078,34 @@ and singleQuoteString sargs skip = parse else singleQuoteString sargs skip lexbuf } | escape_char - { let (buf, _fin, m, kind, args) = sargs + { let (buf, _fin, m, kind, args) = sargs addByteChar buf (escape (lexeme lexbuf).[1]) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) - else singleQuoteString sargs skip lexbuf } + else singleQuoteString sargs skip lexbuf } | trigraph - { let (buf, _fin, m, kind, args) = sargs - let s = lexeme lexbuf + { let (buf, _fin, m, kind, args) = sargs + let s = lexeme lexbuf addByteChar buf (trigraph s.[1] s.[2] s.[3]) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf } | hexGraphShort - { let (buf, _fin, m, kind, args) = sargs + { let (buf, _fin, m, kind, args) = sargs addUnicodeChar buf (int (hexGraphShort (lexemeTrimLeft lexbuf 2))) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf } - + | unicodeGraphShort - { let (buf, _fin, m, kind, args) = sargs + { let (buf, _fin, m, kind, args) = sargs addUnicodeChar buf (int (unicodeGraphShort (lexemeTrimLeft lexbuf 2))) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf } - + | unicodeGraphLong { let (buf, _fin, m, kind, args) = sargs let hexChars = lexemeTrimLeft lexbuf 2 - let result() = + let result() = if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf match unicodeGraphLong hexChars with @@ -1148,91 +1114,91 @@ and singleQuoteString sargs skip = parse | SingleChar(c) -> addUnicodeChar buf (int c) result() - | SurrogatePair(hi, lo) -> + | SurrogatePair(hi, lo) -> addUnicodeChar buf (int hi) addUnicodeChar buf (int lo) result() } - - | '"' - { let (buf, fin, _m, kind, args) = sargs + + | '"' + { let (buf, fin, _m, kind, args) = sargs let cont = LexCont.Token(args.ifdefStack, args.stringNest) - fin.Finish buf kind (enum(0)) cont + fin.Finish buf kind false cont } - | '"''B' - { let (buf, fin, _m, kind, args) = sargs + | '"''B' + { let (buf, fin, _m, kind, args) = sargs let cont = LexCont.Token(args.ifdefStack, args.stringNest) - fin.Finish buf { kind with IsByteString = true } (enum(0)) cont + fin.Finish buf { kind with IsByteString = true } false cont } | ("{{" | "}}") - { let (buf, _fin, m, kind, args) = sargs + { let (buf, _fin, m, kind, args) = sargs let s = lexeme lexbuf addUnicodeString buf (if kind.IsInterpolated then s.[0..0] else s) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf } | "{" - { let (buf, fin, m, kind, args) = sargs + { let (buf, fin, m, kind, args) = sargs if kind.IsInterpolated then // get a new range for where the fill starts let m2 = lexbuf.LexemeRange args.stringNest <- (1, LexerStringStyle.SingleQuote, m2) :: args.stringNest let cont = LexCont.Token(args.ifdefStack, args.stringNest) - fin.Finish buf kind LexerStringFinisherContext.InterpolatedPart cont + fin.Finish buf kind true cont else - addUnicodeString buf (lexeme lexbuf) + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) - else singleQuoteString sargs skip lexbuf + else singleQuoteString sargs skip lexbuf } | "}" - { let (buf, _fin, m, kind, args) = sargs - let result() = + { let (buf, _fin, m, kind, args) = sargs + let result() = if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf if kind.IsInterpolated then fail args lexbuf (FSComp.SR.lexRBraceInInterpolatedString()) (result()) else - addUnicodeString buf (lexeme lexbuf) + addUnicodeString buf (lexeme lexbuf) (result()) } | newline - { let (buf, _fin, m, kind, args) = sargs - newline lexbuf - addUnicodeString buf (lexeme lexbuf) + { let (buf, _fin, m, kind, args) = sargs + newline lexbuf + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf } - | ident - { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + | ident + { let (buf, _fin, m, kind, args) = sargs + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf } - | integer + | integer | xinteger { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf } - | anywhite + + | anywhite + { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf } - | eof - { let (_buf, _fin, m, kind, args) = sargs + | eof + { let (_buf, _fin, m, kind, args) = sargs EOF (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) } - | surrogateChar surrogateChar // surrogate code points always come in pairs + | surrogateChar surrogateChar // surrogate code points always come in pairs - | _ + | _ { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf } @@ -1241,261 +1207,261 @@ and verbatimString sargs skip = parse { let (buf, _fin, m, kind, args) = sargs addByteChar buf '\"' if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, kind, m)) - else verbatimString sargs skip lexbuf } + else verbatimString sargs skip lexbuf } - | '"' - { let (buf, fin, _m, kind, args) = sargs + | '"' + { let (buf, fin, _m, kind, args) = sargs let cont = LexCont.Token(args.ifdefStack, args.stringNest) - fin.Finish buf kind LexerStringFinisherContext.Verbatim cont + fin.Finish buf kind false cont } - | '"''B' - { let (buf, fin, _m, kind, args) = sargs + | '"''B' + { let (buf, fin, _m, kind, args) = sargs let cont = LexCont.Token(args.ifdefStack, args.stringNest) - fin.Finish buf { kind with IsByteString = true } LexerStringFinisherContext.Verbatim cont + fin.Finish buf { kind with IsByteString = true } false cont } - | newline - { let (buf, _fin, m, kind, args) = sargs - newline lexbuf - addUnicodeString buf (lexeme lexbuf) + | newline + { let (buf, _fin, m, kind, args) = sargs + newline lexbuf + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, kind, m)) else verbatimString sargs skip lexbuf } | ("{{" | "}}") - { let (buf, _fin, m, kind, args) = sargs + { let (buf, _fin, m, kind, args) = sargs let s = lexeme lexbuf addUnicodeString buf (if kind.IsInterpolated then s.[0..0] else s) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, kind, m)) else verbatimString sargs skip lexbuf } | "{" - { let (buf, fin, m, kind, args) = sargs + { let (buf, fin, m, kind, args) = sargs if kind.IsInterpolated then // get a new range for where the fill starts let m2 = lexbuf.LexemeRange args.stringNest <- (1, LexerStringStyle.Verbatim, m2) :: args.stringNest let cont = LexCont.Token(args.ifdefStack, args.stringNest) - fin.Finish buf kind (enum(3)) cont + fin.Finish buf kind true cont else - addUnicodeString buf (lexeme lexbuf) + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, kind, m)) - else verbatimString sargs skip lexbuf + else verbatimString sargs skip lexbuf } | "}" - { let (buf, _fin, m, kind, args) = sargs - let result() = + { let (buf, _fin, m, kind, args) = sargs + let result() = if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, kind, m)) else verbatimString sargs skip lexbuf if kind.IsInterpolated then fail args lexbuf (FSComp.SR.lexRBraceInInterpolatedString()) (result()) else - addUnicodeString buf (lexeme lexbuf) + addUnicodeString buf (lexeme lexbuf) (result()) } - | ident - { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + | ident + { let (buf, _fin, m, kind, args) = sargs + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, kind, m)) else verbatimString sargs skip lexbuf } - | integer + | integer | xinteger - { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + { let (buf, _fin, m, kind, args) = sargs + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, kind, m)) else verbatimString sargs skip lexbuf } - | anywhite + - { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + | anywhite + + { let (buf, _fin, m, kind, args) = sargs + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, kind, m)) else verbatimString sargs skip lexbuf } - | eof - { let (_buf, _fin, m, kind, args) = sargs + | eof + { let (_buf, _fin, m, kind, args) = sargs EOF (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, kind, m)) } - | surrogateChar surrogateChar // surrogate code points always come in pairs - | _ - { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + | surrogateChar surrogateChar // surrogate code points always come in pairs + | _ + { let (buf, _fin, m, kind, args) = sargs + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, kind, m)) else verbatimString sargs skip lexbuf } and tripleQuoteString sargs skip = parse - | '"' '"' '"' - { let (buf, fin, _m, kind, args) = sargs + | '"' '"' '"' + { let (buf, fin, _m, kind, args) = sargs let cont = LexCont.Token(args.ifdefStack, args.stringNest) - fin.Finish buf kind (enum(4)) cont } + fin.Finish buf kind false cont } - | newline - { let (buf, _fin, m, kind, args) = sargs - newline lexbuf - addUnicodeString buf (lexeme lexbuf) + | newline + { let (buf, _fin, m, kind, args) = sargs + newline lexbuf + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, kind, 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, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) +// The rest is to break into pieces to allow double-click-on-word and other such things + | ident + { let (buf, _fin, m, kind, args) = sargs + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, kind, m)) else tripleQuoteString sargs skip lexbuf } - | integer + | integer | xinteger - { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + { let (buf, _fin, m, kind, args) = sargs + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, kind, m)) else tripleQuoteString sargs skip lexbuf } - | anywhite + - { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + | anywhite + + { let (buf, _fin, m, kind, args) = sargs + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, kind, m)) else tripleQuoteString sargs skip lexbuf } | ("{{" | "}}") - { let (buf, _fin, m, kind, args) = sargs + { let (buf, _fin, m, kind, args) = sargs let s = lexeme lexbuf addUnicodeString buf (if kind.IsInterpolated then s.[0..0] else s) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, kind, m)) else tripleQuoteString sargs skip lexbuf } | "{" - { let (buf, fin, m, kind, args) = sargs + { let (buf, fin, m, kind, args) = sargs if kind.IsInterpolated then // get a new range for where the fill starts let m2 = lexbuf.LexemeRange args.stringNest <- (1, LexerStringStyle.TripleQuote, m2) :: args.stringNest let cont = LexCont.Token(args.ifdefStack, args.stringNest) - fin.Finish buf kind (enum(5)) cont + fin.Finish buf kind true cont else - addUnicodeString buf (lexeme lexbuf) + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, kind, m)) - else tripleQuoteString sargs skip lexbuf + else tripleQuoteString sargs skip lexbuf } | "}" - { let (buf, _fin, m, kind, args) = sargs - let result() = + { let (buf, _fin, m, kind, args) = sargs + let result() = if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, kind, m)) else tripleQuoteString sargs skip lexbuf if kind.IsInterpolated then fail args lexbuf (FSComp.SR.lexRBraceInInterpolatedString()) (result()) else - addUnicodeString buf (lexeme lexbuf) + addUnicodeString buf (lexeme lexbuf) (result()) } - | eof - { let (_buf, _fin, m, kind, args) = sargs + | eof + { let (_buf, _fin, m, kind, args) = sargs EOF (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, kind, m)) } - | surrogateChar surrogateChar // surrogate code points always come in pairs - | _ - { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + | surrogateChar surrogateChar // surrogate code points always come in pairs + | _ + { let (buf, _fin, m, kind, args) = sargs + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, kind, 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 +// 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 + { let buff,_n, _m, args = cargs trySaveXmlDoc lexbuf buff - newline lexbuf + 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, args.stringNest)) else token args skip lexbuf } - - | eof - { let _, _n, _m, args = cargs - // NOTE: it is legal to end a file with this comment, so we'll return EOF as a token - EOF (LexCont.Token(args.ifdefStack, args.stringNest)) } - + + | eof + { let _, _n, _m, args = cargs + // NOTE: it is legal to end a file with this comment, so we'll return EOF as a token + EOF (LexCont.Token(args.ifdefStack, args.stringNest)) } + | [^ ' ' '\n' '\r' ]+ | anywhite+ - { let buff, n, m, args = cargs - // Append the current token to the XML documentation if we're collecting it + { let buff, n, m, args = cargs + // Append the current token to the XML documentation if we're collecting it tryAppendXmlDoc buff (lexeme lexbuf) if not skip then LINE_COMMENT (LexCont.SingleLineComment(args.ifdefStack, args.stringNest, n, m)) - else singleLineComment (buff, n, m, args) skip lexbuf } - + else singleLineComment (buff, n, m, args) skip lexbuf } + | surrogateChar surrogateChar - | _ { let _, _n, _m, args = cargs + | _ { let _, _n, _m, args = cargs if not skip then LINE_COMMENT (LexCont.Token(args.ifdefStack, args.stringNest)) else token args skip lexbuf } - + and comment cargs skip = parse | char - { let n, m, args = cargs + { let n, m, args = cargs if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, n, m)) - else comment (n, m, args) skip lexbuf } - - | '"' - { let n, m, args = cargs + else comment (n, m, args) skip lexbuf } + + | '"' + { let n, m, args = cargs if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, n, m)) else stringInComment n m args skip lexbuf } - | '"' '"' '"' - { let n, m, args = cargs + | '"' '"' '"' + { let n, m, args = cargs if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, n, m)) else tripleQuoteStringInComment n m args skip lexbuf } | '@' '"' - { let n, m, args = cargs + { let n, m, args = cargs if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, n, m)) else verbatimStringInComment n m args skip lexbuf } | "(*)" - { let n, m, args = cargs + { let n, m, args = cargs if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, n, m)) else comment cargs skip lexbuf } | '(' '*' - { let n, m, args = cargs + { let n, m, args = cargs if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, n+1, m)) else comment (n+1,m,args) skip lexbuf } - + | newline - { let n, m, args = cargs - newline lexbuf + { let n, m, args = cargs + newline lexbuf if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, n, m)) else comment cargs skip lexbuf } - | "*)" - { - let n, m, args = cargs - if n > 1 then + | "*)" + { + let n, m, args = cargs + if n > 1 then if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, n-1, m)) - else comment (n-1,m,args) skip lexbuf + else comment (n-1,m,args) skip lexbuf else if not skip then COMMENT (LexCont.Token(args.ifdefStack, args.stringNest)) else token args skip lexbuf } - + | anywhite+ - | [^ '\'' '(' '*' '\n' '\r' '"' ')' '@' ' ' '\t' ]+ - { let n, m, args = cargs + | [^ '\'' '(' '*' '\n' '\r' '"' ')' '@' ' ' '\t' ]+ + { let n, m, args = cargs if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, n, m)) else comment cargs skip lexbuf } - - | eof - { let n, m, args = cargs + + | eof + { let n, m, args = cargs EOF (LexCont.Comment(args.ifdefStack, args.stringNest, n, m)) } - + | surrogateChar surrogateChar - | _ { let n, m, args = cargs + | _ { let n, m, args = cargs if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, n, m)) else comment (n, m, args) skip lexbuf } and stringInComment n m args skip = parse - // Follow string lexing, skipping tokens until it finishes - | '\\' newline anywhite* - { newline lexbuf + // Follow string lexing, skipping tokens until it finishes + | '\\' newline anywhite* + { newline lexbuf if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, n, m)) else stringInComment n m args skip lexbuf } @@ -1504,117 +1470,117 @@ and stringInComment n m args skip = parse | hexGraphShort | unicodeGraphShort | unicodeGraphLong - | ident + | ident | integer | xinteger - | anywhite + + | anywhite + { if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, n, m)) else stringInComment n m args skip lexbuf } - | '"' + | '"' { if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, n, m)) else comment (n, m, args) skip lexbuf } - - | newline - { newline lexbuf + + | newline + { newline lexbuf if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, n, m)) else stringInComment n m args skip lexbuf } - - | eof + + | eof { EOF (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, n, m)) } - + | surrogateChar surrogateChar - | _ + | _ { if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, n, m)) else stringInComment n m args skip lexbuf } and verbatimStringInComment n m args skip = parse - // Follow verbatimString lexing, in short, skip double-quotes and other chars until we hit a single quote + // Follow verbatimString lexing, in short, skip double-quotes and other chars until we hit a single quote | '"' '"' { if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, n, m)) else verbatimStringInComment n m args skip lexbuf } - | '"' + | '"' { if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, n, m)) else comment (n, m, args) skip lexbuf } - | ident - | integer + | ident + | integer | xinteger - | anywhite + + | anywhite + { if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, n, m)) else verbatimStringInComment n m args skip lexbuf } - - | newline + + | newline { newline lexbuf if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, n, m)) else verbatimStringInComment n m args skip lexbuf } - - | eof + + | eof { EOF (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, n, m)) } - + | surrogateChar surrogateChar - | _ + | _ { if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, n, m)) else verbatimStringInComment n m args skip lexbuf } - + and tripleQuoteStringInComment n m args skip = parse - // Follow tripleQuoteString lexing + // Follow tripleQuoteString lexing | '"' '"' '"' { if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, n, m)) else comment (n, m, args) skip lexbuf } - | ident - | integer + | ident + | integer | xinteger - | anywhite + + | anywhite + { if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, n, m)) else tripleQuoteStringInComment n m args skip lexbuf } - - | newline + + | newline { newline lexbuf if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, n, m)) else tripleQuoteStringInComment n m args skip lexbuf } - - | eof + + | eof { EOF (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, n, m)) } - + | surrogateChar surrogateChar - | _ + | _ { if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, n, m)) else tripleQuoteStringInComment n m args skip lexbuf } - + and mlOnly m args skip = parse | "\"" - { let buf = ByteBuffer.Create StringCapacity - let m2 = lexbuf.LexemeRange - let _ = singleQuoteString (buf, LexerStringFinisher.Default, m2, LexerStringKind.String, args) skip lexbuf + { let buf = ByteBuffer.Create 100 + let m2 = lexbuf.LexemeRange + let _ = singleQuoteString (buf, LexerStringFinisher.Default, m2, LexerStringKind.String, args) skip lexbuf if not skip then COMMENT (LexCont.MLOnly(args.ifdefStack, args.stringNest, m)) else mlOnly m args skip lexbuf } - | newline + | newline { newline lexbuf if not skip then COMMENT (LexCont.MLOnly(args.ifdefStack, args.stringNest, m)) else mlOnly m args skip lexbuf } - | "(*ENDIF-CAML*)" + | "(*ENDIF-CAML*)" { if not skip then COMMENT (LexCont.Token(args.ifdefStack, args.stringNest)) else token args skip lexbuf } - | "(*ENDIF-OCAML*)" + | "(*ENDIF-OCAML*)" { if not skip then COMMENT (LexCont.Token(args.ifdefStack, args.stringNest)) else token args skip lexbuf } - | [^ '(' '"' '\n' '\r' ]+ + | [^ '(' '"' '\n' '\r' ]+ { if not skip then COMMENT (LexCont.MLOnly(args.ifdefStack, args.stringNest, m)) else mlOnly m args skip lexbuf } - | eof + | eof { EOF (LexCont.MLOnly(args.ifdefStack, args.stringNest, m)) } - | surrogateChar surrogateChar - | _ + | surrogateChar surrogateChar + | _ { if not skip then COMMENT (LexCont.MLOnly(args.ifdefStack, args.stringNest, m)) else mlOnly m args skip lexbuf } diff --git a/src/fsharp/lexhelp.fs b/src/fsharp/lexhelp.fs index 7de63e244a1..d111f88ee6e 100644 --- a/src/fsharp/lexhelp.fs +++ b/src/fsharp/lexhelp.fs @@ -6,19 +6,19 @@ open System open System.Text open Internal.Utilities -open Internal.Utilities.Library open Internal.Utilities.Text.Lexing open FSharp.Compiler -open FSharp.Compiler.IO +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.ErrorLogger +open FSharp.Compiler.Lib open FSharp.Compiler.ParseHelpers -open FSharp.Compiler.UnicodeLexing open FSharp.Compiler.Parser -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.XmlDoc /// The "mock" filename used by fsi.exe when reading from stdin. /// Has special treatment by the lexer, i.e. __SOURCE_DIRECTORY__ becomes GetCurrentDirectory() @@ -35,6 +35,7 @@ type LightSyntaxStatus(initial:bool,warn:bool) = member x.ExplicitlySet = status.IsSome member x.WarnOnMultipleTokens = warn + /// Manage lexer resources (string interning) [] type LexResourceManager(?capacity: int) = @@ -88,11 +89,11 @@ let reusingLexbufForParsing lexbuf f = with e -> raise (WrappedError(e, (try lexbuf.LexemeRange with _ -> range0))) -let resetLexbufPos filename (lexbuf: Lexbuf) = - lexbuf.EndPos <- Position.FirstLine (FileIndex.fileIndexOfFile filename) +let resetLexbufPos filename (lexbuf: UnicodeLexing.Lexbuf) = + lexbuf.EndPos <- Position.FirstLine (fileIndexOfFile filename) /// Reset the lexbuf, configure the initial position with the given filename and call the given function -let usingLexbufForParsing (lexbuf:Lexbuf, filename) f = +let usingLexbufForParsing (lexbuf:UnicodeLexing.Lexbuf, filename) f = resetLexbufPos filename lexbuf reusingLexbufForParsing lexbuf (fun () -> f lexbuf) @@ -101,12 +102,12 @@ let usingLexbufForParsing (lexbuf:Lexbuf, filename) f = //----------------------------------------------------------------------- let stringBufferAsString (buf: ByteBuffer) = - let buf = buf.AsMemory() + let buf = buf.Close() 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.Span.[i*2+1] - let lo = buf.Span.[i*2] + let hi = buf.[i*2+1] + let lo = buf.[i*2] let c = char (((int hi) * 256) + (int lo)) chars.[i] <- c System.String(chars) @@ -117,59 +118,34 @@ let stringBufferAsString (buf: ByteBuffer) = /// we just take every second byte we stored. Note all bytes > 127 should have been /// stored using addIntChar let stringBufferAsBytes (buf: ByteBuffer) = - let bytes = buf.AsMemory() - Array.init (bytes.Length / 2) (fun i -> bytes.Span.[i*2]) - -[] -type LexerStringFinisherContext = - | InterpolatedPart = 1 - | Verbatim = 2 - | TripleQuote = 4 + let bytes = buf.Close() + Array.init (bytes.Length / 2) (fun i -> bytes.[i*2]) type LexerStringFinisher = - | LexerStringFinisher of (ByteBuffer -> LexerStringKind -> LexerStringFinisherContext -> LexerContinuation -> token) + | LexerStringFinisher of (ByteBuffer -> LexerStringKind -> bool -> LexerContinuation -> token) - member fin.Finish (buf: ByteBuffer) kind context cont = + member fin.Finish (buf: ByteBuffer) kind isInterpolatedStringPart cont = let (LexerStringFinisher f) = fin - f buf kind context cont + f buf kind isInterpolatedStringPart cont static member Default = - LexerStringFinisher (fun buf kind context cont -> - let isPart = context.HasFlag(LexerStringFinisherContext.InterpolatedPart) - let isVerbatim = context.HasFlag(LexerStringFinisherContext.Verbatim) - let isTripleQuote = context.HasFlag(LexerStringFinisherContext.TripleQuote) - + LexerStringFinisher (fun buf kind isPart cont -> if kind.IsInterpolated then let s = stringBufferAsString buf - if kind.IsInterpolatedFirst then - let synStringKind = - if isTripleQuote then - SynStringKind.TripleQuote - elif isVerbatim then - SynStringKind.Verbatim - else - SynStringKind.Regular + if kind.IsInterpolatedFirst then if isPart then - INTERP_STRING_BEGIN_PART (s, synStringKind, cont) + INTERP_STRING_BEGIN_PART (s, cont) else - INTERP_STRING_BEGIN_END (s, synStringKind, cont) + INTERP_STRING_BEGIN_END (s, cont) else if isPart then INTERP_STRING_PART (s, cont) else INTERP_STRING_END (s, cont) - elif kind.IsByteString then - let synByteStringKind = if isVerbatim then SynByteStringKind.Verbatim else SynByteStringKind.Regular - BYTEARRAY (stringBufferAsBytes buf, synByteStringKind, cont) + elif kind.IsByteString then + BYTEARRAY (stringBufferAsBytes buf, cont) else - let synStringKind = - if isVerbatim then - SynStringKind.Verbatim - elif isTripleQuote then - SynStringKind.TripleQuote - else - SynStringKind.Regular - STRING (stringBufferAsString buf, synStringKind, cont) + STRING (stringBufferAsString buf, cont) ) let addUnicodeString (buf: ByteBuffer) (x:string) = @@ -185,10 +161,10 @@ let addByteChar buf (c:char) = addIntChar buf (int32 c % 256) /// Sanity check that high bytes are zeros. Further check each low byte <= 127 let stringBufferIsBytes (buf: ByteBuffer) = - let bytes = buf.AsMemory() + let bytes = buf.Close() let mutable ok = true for i = 0 to bytes.Length / 2-1 do - if bytes.Span.[i*2+1] <> 0uy then ok <- false + if bytes.[i*2+1] <> 0uy then ok <- false ok let newline (lexbuf:LexBuffer<_>) = @@ -352,6 +328,9 @@ module Keywords = "parallel"; "params"; "process"; "protected"; "pure" "sealed"; "trait"; "tailcall"; "virtual" ] + let private unreserveWords = + keywordList |> List.choose (function (mode, keyword, _) -> if mode = FSHARP then Some keyword else None) + //------------------------------------------------------------------------ // Keywords //----------------------------------------------------------------------- @@ -367,12 +346,12 @@ module Keywords = let KeywordToken s = keywordTable.[s] - let IdentifierToken args (lexbuf:Lexbuf) (s:string) = + let IdentifierToken args (lexbuf:UnicodeLexing.Lexbuf) (s:string) = if IsCompilerGeneratedName s then warning(Error(FSComp.SR.lexhlpIdentifiersContainingAtSymbolReserved(), lexbuf.LexemeRange)) args.resourceManager.InternIdentifierToken s - let KeywordOrIdentifierToken args (lexbuf:Lexbuf) s = + let KeywordOrIdentifierToken args (lexbuf:UnicodeLexing.Lexbuf) s = match keywordTable.TryGetValue s with | true, v -> match v with @@ -383,7 +362,7 @@ module Keywords = | _ -> match s with | "__SOURCE_DIRECTORY__" -> - let filename = FileIndex.fileOfFileIndex lexbuf.StartPos.FileIndex + let filename = fileOfFileIndex lexbuf.StartPos.FileIndex let dirname = if String.IsNullOrWhiteSpace(filename) then String.Empty @@ -396,11 +375,11 @@ module Keywords = if String.IsNullOrEmpty dirname then dirname else PathMap.applyDir args.pathMap dirname - |> fun dir -> KEYWORD_STRING(s, dir) + |> KEYWORD_STRING | "__SOURCE_FILE__" -> - KEYWORD_STRING (s, System.IO.Path.GetFileName((FileIndex.fileOfFileIndex lexbuf.StartPos.FileIndex))) + KEYWORD_STRING (System.IO.Path.GetFileName((fileOfFileIndex lexbuf.StartPos.FileIndex))) | "__LINE__" -> - KEYWORD_STRING (s, string lexbuf.StartPos.Line) + KEYWORD_STRING (string lexbuf.StartPos.Line) | _ -> IdentifierToken args lexbuf s diff --git a/src/fsharp/lexhelp.fsi b/src/fsharp/lexhelp.fsi index 0eab9ee0276..9764f34a924 100644 --- a/src/fsharp/lexhelp.fsi +++ b/src/fsharp/lexhelp.fsi @@ -2,15 +2,15 @@ module internal FSharp.Compiler.Lexhelp -open FSharp.Compiler.IO open Internal.Utilities open Internal.Utilities.Text +open FSharp.Compiler +open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.ParseHelpers -open FSharp.Compiler.UnicodeLexing open FSharp.Compiler.Parser -open FSharp.Compiler.Text +open FSharp.Compiler.ParseHelpers +open FSharp.Compiler.Range val stdinMockFilename: string @@ -46,23 +46,18 @@ type LongUnicodeLexResult = | SingleChar of uint16 | Invalid -val resetLexbufPos: string -> Lexbuf -> unit +val resetLexbufPos: string -> UnicodeLexing.Lexbuf -> unit val mkLexargs: string list * LightSyntaxStatus * LexResourceManager * LexerIfdefStack * ErrorLogger * PathMap -> LexArgs -val reusingLexbufForParsing: Lexbuf -> (unit -> 'a) -> 'a +val reusingLexbufForParsing: UnicodeLexing.Lexbuf -> (unit -> 'a) -> 'a -val usingLexbufForParsing: Lexbuf * string -> (UnicodeLexing.Lexbuf -> 'a) -> 'a - -type LexerStringFinisherContext = - | InterpolatedPart = 1 - | Verbatim = 2 - | TripleQuote = 4 +val usingLexbufForParsing: UnicodeLexing.Lexbuf * string -> (UnicodeLexing.Lexbuf -> 'a) -> 'a type LexerStringFinisher = - | LexerStringFinisher of (ByteBuffer -> LexerStringKind -> LexerStringFinisherContext -> LexerContinuation -> token) - - member Finish: buf: ByteBuffer -> kind: LexerStringKind -> context: LexerStringFinisherContext -> cont: LexerContinuation -> token + | LexerStringFinisher of (ByteBuffer -> LexerStringKind -> bool -> LexerContinuation -> token) + + member Finish: buf: ByteBuffer -> kind: LexerStringKind -> isInterpolatedStringPart: bool -> cont: LexerContinuation -> token static member Default: LexerStringFinisher @@ -96,13 +91,13 @@ val unicodeGraphLong: string -> LongUnicodeLexResult val escape: char -> char -exception ReservedKeyword of string * range +exception ReservedKeyword of string * Range.range -module Keywords = +module Keywords = - val KeywordOrIdentifierToken: LexArgs -> Lexbuf -> string -> token + val KeywordOrIdentifierToken: LexArgs -> UnicodeLexing.Lexbuf -> string -> token - val IdentifierToken: LexArgs -> Lexbuf -> string -> token + val IdentifierToken: LexArgs -> UnicodeLexing.Lexbuf -> string -> token val DoesIdentifierNeedQuotation: string -> bool diff --git a/src/fsharp/lib.fs b/src/fsharp/lib.fs index 07ba0f0f91f..f3f82adba57 100755 --- a/src/fsharp/lib.fs +++ b/src/fsharp/lib.fs @@ -1,29 +1,25 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal Internal.Utilities.Library.Extras +module internal FSharp.Compiler.Lib open System open System.IO open System.Collections.Generic -open System.Threading -open System.Threading.Tasks -open System.Globalization open System.Runtime.InteropServices open Internal.Utilities -open Internal.Utilities.Collections -open Internal.Utilities.Library -open FSharp.Compiler.IO +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library -let debug = false +let debug = false let verbose = false -let mutable progress = false +let mutable progress = false // Intended to be a general hook to control diagnostic output when tracking down bugs -let mutable tracking = false +let mutable tracking = false -let condition s = +let condition s = try (System.Environment.GetEnvironmentVariable(s) <> null) with _ -> false let GetEnvInteger e dflt = match System.Environment.GetEnvironmentVariable(e) with null -> dflt | t -> try int t with _ -> dflt @@ -34,34 +30,54 @@ let dispose (x:System.IDisposable) = match x with null -> () | x -> x.Dispose() // Library: bits //------------------------------------------------------------------------ -module Bits = - let b0 n = (n &&& 0xFF) - let b1 n = ((n >>> 8) &&& 0xFF) - let b2 n = ((n >>> 16) &&& 0xFF) - let b3 n = ((n >>> 24) &&& 0xFF) +module Bits = + let b0 n = (n &&& 0xFF) + let b1 n = ((n >>> 8) &&& 0xFF) + let b2 n = ((n >>> 16) &&& 0xFF) + let b3 n = ((n >>> 24) &&& 0xFF) let rec pown32 n = if n = 0 then 0 else (pown32 (n-1) ||| (1 <<< (n-1))) let rec pown64 n = if n = 0 then 0L else (pown64 (n-1) ||| (1L <<< (n-1))) let mask32 m n = (pown32 n) <<< m let mask64 m n = (pown64 n) <<< m + +//------------------------------------------------------------------------- +// Library: files +//------------------------------------------------------------------------ + +module Filename = + let fullpath cwd nm = + let p = if FileSystem.IsPathRootedShim(nm) then nm else Path.Combine(cwd, nm) + try FileSystem.GetFullPathShim(p) with + | :? System.ArgumentException + | :? System.ArgumentNullException + | :? System.NotSupportedException + | :? System.IO.PathTooLongException + | :? System.Security.SecurityException -> p + + let hasSuffixCaseInsensitive suffix filename = (* case-insensitive *) + Filename.checkSuffix (String.lowercase filename) (String.lowercase suffix) + + let isDll file = hasSuffixCaseInsensitive ".dll" file + //------------------------------------------------------------------------- // Library: Orders //------------------------------------------------------------------------ -module Bool = +module Bool = let order = LanguagePrimitives.FastGenericComparer -module Int32 = +module Int32 = let order = LanguagePrimitives.FastGenericComparer -module Int64 = +module Int64 = let order = LanguagePrimitives.FastGenericComparer -module Pair = +module Pair = let order (compare1: IComparer<'T1>, compare2: IComparer<'T2>) = - { new IComparer<'T1 * 'T2> with - member _.Compare((a1, a2), (aa1, aa2)) = + { new IComparer<'T1 * 'T2> with + member __.Compare((a1, a2), (aa1, aa2)) = let res1 = compare1.Compare (a1, aa1) if res1 <> 0 then res1 else compare2.Compare (a2, aa2) } @@ -71,47 +87,47 @@ type NameSet = Zset module NameSet = let ofList l : NameSet = List.foldBack Zset.add l (Zset.empty String.order) -module NameMap = +module NameMap = let domain m = Map.foldBack (fun x _ acc -> Zset.add x acc) m (Zset.empty String.order) let domainL m = Zset.elements (domain m) // Library: Pre\Post checks -//------------------------------------------------------------------------- -module Check = - +//------------------------------------------------------------------------- +module Check = + /// Throw System.InvalidOperationException if argument is None. /// If there is a value (e.g. Some(value)) then value is returned. - let NotNone argName (arg:'T option) : 'T = - match arg with + let NotNone argName (arg:'T option) : 'T = + match arg with | None -> raise (new System.InvalidOperationException(argName)) | Some x -> x /// Throw System.ArgumentNullException if argument is null. - let ArgumentNotNull arg argName = - match box(arg) with + let ArgumentNotNull arg argName = + match box(arg) with | null -> raise (new System.ArgumentNullException(argName)) | _ -> () - + /// Throw System.ArgumentNullException if array argument is null. /// Throw System.ArgumentOutOfRangeException is array argument is empty. - let ArrayArgumentNotNullOrEmpty (arr:'T[]) argName = + let ArrayArgumentNotNullOrEmpty (arr:'T[]) argName = ArgumentNotNull arr argName if (0 = arr.Length) then raise (new System.ArgumentOutOfRangeException(argName)) /// Throw System.ArgumentNullException if string argument is null. /// Throw System.ArgumentOutOfRangeException is string argument is empty. - let StringArgumentNotNullOrEmpty (s:string) argName = + let StringArgumentNotNullOrEmpty (s:string) argName = ArgumentNotNull s argName if s.Length = 0 then raise (new System.ArgumentNullException(argName)) //------------------------------------------------------------------------- -// Library +// Library //------------------------------------------------------------------------ type IntMap<'T> = Zmap -module IntMap = +module IntMap = let empty () = Zmap.empty Int32.order let add k v (t:IntMap<'T>) = Zmap.add k v t @@ -120,7 +136,7 @@ module IntMap = let remove k (t:IntMap<'T>) = Zmap.remove k t let mem k (t:IntMap<'T>) = Zmap.mem k t let iter f (t:IntMap<'T>) = Zmap.iter f t - let map f (t:IntMap<'T>) = Zmap.map f t + let map f (t:IntMap<'T>) = Zmap.map f t let fold f (t:IntMap<'T>) z = Zmap.fold f t z @@ -133,16 +149,16 @@ module ListAssoc = /// Treat a list of key-value pairs as a lookup collection. /// This function looks up a value based on a match from the supplied /// predicate function. - let rec find f x l = - match l with + let rec find f x l = + match l with | [] -> notFound() | (x2, y) :: t -> if f x x2 then y else find f x t /// Treat a list of key-value pairs as a lookup collection. /// This function looks up a value based on a match from the supplied /// predicate function and returns None if value does not exist. - let rec tryFind (f:'key->'key->bool) (x:'key) (l:('key*'value) list) : 'value option = - match l with + let rec tryFind (f:'key->'key->bool) (x:'key) (l:('key*'value) list) : 'value option = + match l with | [] -> None | (x2, y) :: t -> if f x x2 then Some y else tryFind f x t @@ -150,16 +166,16 @@ module ListAssoc = // Library: lists as generalized sets //------------------------------------------------------------------------ -module ListSet = +module ListSet = let inline contains f x l = List.exists (f x) l - /// NOTE: O(n)! + /// NOTE: O(n)! let insert f x l = if contains f x l then l else x :: l - let unionFavourRight f l1 l2 = - match l1, l2 with + let unionFavourRight f l1 l2 = + match l1, l2 with | _, [] -> l1 - | [], _ -> l2 + | [], _ -> l2 | _ -> List.foldBack (insert f) l1 l2 (* nb. foldBack to preserve natural orders *) /// NOTE: O(n)! @@ -171,14 +187,14 @@ module ListSet = /// NOTE: O(n)! let findIndex eq x l = findIndexAux eq x l 0 - let rec remove f x l = - match l with + let rec remove f x l = + match l with | (h :: t) -> if f x h then t else h :: remove f x t | [] -> [] /// NOTE: quadratic! - let rec subtract f l1 l2 = - match l2 with + let rec subtract f l1 l2 = + match l2 with | (h :: t) -> subtract f (remove (fun y2 y1 -> f y1 y2) h l1) t | [] -> l1 @@ -189,15 +205,15 @@ module ListSet = let equals f l1 l2 = isSubsetOf f l1 l2 && isSupersetOf f l1 l2 - let unionFavourLeft f l1 l2 = - match l1, l2 with - | _, [] -> l1 - | [], _ -> l2 + let unionFavourLeft f l1 l2 = + match l1, l2 with + | _, [] -> l1 + | [], _ -> l2 | _ -> l1 @ (subtract f l2 l1) - /// NOTE: not tail recursive! - let rec intersect f l1 l2 = - match l2 with + /// NOTE: not tail recursive! + let rec intersect f l1 l2 = + match l2 with | (h :: t) -> if contains f h l1 then h :: intersect f l1 t else intersect f l1 t | [] -> [] @@ -215,7 +231,7 @@ module ListSet = | [] -> false | x :: rest -> if contains f x acc then - true + true else loop (x :: acc) rest @@ -229,7 +245,7 @@ let mapFoldFst f s (x, y) = let x2, s = f s x in (x2, y), s let mapFoldSnd f s (x, y) = let y2, s = f s y in (x, y2), s -let pair a b = a, b +let pair a b = a, b let p13 (x, _y, _z) = x @@ -273,9 +289,9 @@ let fmap2Of2 f z (a1, a2) = let z, a2 = f z a2 in z, (a1, a2) //--------------------------------------------------------------------------- // Zmap rebinds -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -module Zmap = +module Zmap = let force k mp = match Zmap.tryFind k mp with Some x -> x | None -> failwith "Zmap.force: lookup failed" let mapKey key f mp = @@ -285,7 +301,7 @@ module Zmap = //--------------------------------------------------------------------------- // Zset -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- module Zset = let ofList order xs = Zset.addList xs (Zset.empty order) @@ -299,19 +315,19 @@ module Zset = let equalOn f x y = (f x) = (f y) /// Buffer printing utility -let bufs f = - let buf = System.Text.StringBuilder 100 - f buf +let bufs f = + let buf = System.Text.StringBuilder 100 + f buf buf.ToString() /// Writing to output stream via a string buffer. -let writeViaBuffer (os: TextWriter) f x = - let buf = System.Text.StringBuilder 100 - f buf x +let writeViaBuffer (os: TextWriter) f x = + let buf = System.Text.StringBuilder 100 + f buf x os.Write(buf.ToString()) //--------------------------------------------------------------------------- -// Imperative Graphs +// Imperative Graphs //--------------------------------------------------------------------------- type GraphNode<'Data, 'Id> = { nodeId: 'Id; nodeData: 'Data; mutable nodeNeighbours: GraphNode<'Data, 'Id> list } @@ -322,19 +338,19 @@ type Graph<'Data, 'Id when 'Id : comparison and 'Id : equality> edges: ('Data * 'Data) list) = let edges = edges |> List.map (fun (v1, v2) -> nodeIdentity v1, nodeIdentity v2) - let nodes = nodes |> List.map (fun d -> nodeIdentity d, { nodeId = nodeIdentity d; nodeData=d; nodeNeighbours=[] }) - let tab = Map.ofList nodes + let nodes = nodes |> List.map (fun d -> nodeIdentity d, { nodeId = nodeIdentity d; nodeData=d; nodeNeighbours=[] }) + let tab = Map.ofList nodes let nodes = List.map snd nodes - do for node in nodes do + do for node in nodes do node.nodeNeighbours <- edges |> List.filter (fun (x, _y) -> x = node.nodeId) |> List.map (fun (_, nodeId) -> tab.[nodeId]) member g.GetNodeData nodeId = tab.[nodeId].nodeData - member g.IterateCycles f = - let rec trace path node = + member g.IterateCycles f = + let rec trace path node = if List.exists (nodeIdentity >> (=) node.nodeId) path then f (List.rev path) else List.iter (trace (node.nodeData :: path)) node.nodeNeighbours - List.iter (fun node -> trace [] node) nodes + List.iter (fun node -> trace [] node) nodes //--------------------------------------------------------------------------- // In some cases we play games where we use 'null' as a more efficient representation @@ -346,8 +362,8 @@ type Graph<'Data, 'Id when 'Id : comparison and 'Id : equality> // The following DEBUG code does not currently compile. //#if DEBUG -//type 'T NonNullSlot = 'T option -//let nullableSlotEmpty() = None +//type 'T NonNullSlot = 'T option +//let nullableSlotEmpty() = None //let nullableSlotFull(x) = Some x //#else type NonNullSlot<'T> = 'T @@ -362,19 +378,19 @@ let nullableSlotFull x = x 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 +let inline cached cache resF = + match box cache.cacheVal with + | null -> + let res = resF() + cache.cacheVal <- nullableSlotFull res res - | _ -> + | _ -> cache.cacheVal -let inline cacheOptByref (cache: byref<'T option>) f = - match cache with +let inline cacheOptByref (cache: byref<'T option>) f = + match cache with | Some v -> v - | None -> + | None -> let res = f() cache <- Some res res @@ -382,13 +398,13 @@ let inline cacheOptByref (cache: byref<'T option>) f = // REVIEW: this is only used because we want to mutate a record field, // and because you cannot take a byref<_> of such a thing directly, // we cannot use 'cacheOptByref'. If that is changed, this can be removed. -let inline cacheOptRef cache f = +let inline cacheOptRef cache f = match !cache with | Some v -> v - | None -> + | None -> let res = f() cache := Some res - res + res let inline tryGetCacheValue cache = match box cache.cacheVal with @@ -398,7 +414,7 @@ let inline tryGetCacheValue cache = #if DUMPER type Dumper(x:obj) = [] - member self.Dump = sprintf "%A" x + member self.Dump = sprintf "%A" x #endif //--------------------------------------------------------------------------- @@ -430,9 +446,9 @@ module internal AsyncUtil = let mutable result = None // The continuation for the result, if any let mutable savedConts = [] - + let syncRoot = new obj() - + // Record the result in the AsyncResultCell. // Ignore subsequent sets of the result. This can happen, e.g. for a race between @@ -446,7 +462,7 @@ module internal AsyncUtil = result <- Some res // Invoke continuations in FIFO order // Continuations that Async.FromContinuations provide do QUWI/SyncContext.Post, - // so the order is not overly relevant but still. + // so the order is not overly relevant but still. List.rev savedConts) let postOrQueue (sc:SynchronizationContext, cont) = match sc with @@ -456,7 +472,7 @@ module internal AsyncUtil = // Run continuations outside the lock match grabbedConts with | [] -> () - | [(sc, cont) as c] -> + | [(sc, cont) as c] -> if SynchronizationContext.Current = sc then cont res else @@ -481,7 +497,7 @@ module internal AsyncUtil = match grabbedResult with | None -> () | Some res -> cont res) - + /// Get the result and Commit(...). member x.AsyncResult = @@ -498,11 +514,11 @@ module UnmanagedProcessExecutionOptions = open System open System.Runtime.InteropServices - [] + [] extern UIntPtr private GetProcessHeap() [] - extern bool private HeapSetInformation( + extern bool private HeapSetInformation( UIntPtr _HeapHandle, UInt32 _HeapInformationClass, UIntPtr _HeapInformation, @@ -512,10 +528,10 @@ module UnmanagedProcessExecutionOptions = extern UInt32 private GetLastError() // Translation of C# from http://swikb/v1/DisplayOnlineDoc.aspx?entryID=826 and copy in bug://5018 - [] + [] let EnableHeapTerminationOnCorruption() = if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && System.Environment.OSVersion.Version.Major >= 6 && // If OS is Vista or higher - System.Environment.Version.Major < 3) then // and CLR not 3.0 or higher + System.Environment.Version.Major < 3) then // and CLR not 3.0 or higher // "The flag HeapSetInformation sets is available in Windows XP SP3 and later. // The data structure used for heap information is available on earlier versions of Windows. // The call will either return TRUE (found and set the flag) or false (flag not found). @@ -528,9 +544,9 @@ module UnmanagedProcessExecutionOptions = // http://blogs.msdn.com/michael_howard/archive/2008/02/18/faq-about-heapsetinformation-in-windows-vista-and-heap-based-buffer-overruns.aspx let HeapEnableTerminationOnCorruption = 1u : uint32 if not (HeapSetInformation(GetProcessHeap(), HeapEnableTerminationOnCorruption, UIntPtr.Zero, UIntPtr.Zero)) then - raise (System.Security.SecurityException( - "Unable to enable unmanaged process execution option TerminationOnCorruption. " + - "HeapSetInformation() returned FALSE; LastError = 0x" + + raise (System.Security.SecurityException( + "Unable to enable unmanaged process execution option TerminationOnCorruption. " + + "HeapSetInformation() returned FALSE; LastError = 0x" + GetLastError().ToString("X").PadLeft(8, '0') + ".")) [] @@ -538,14 +554,14 @@ module StackGuard = open System.Runtime.CompilerServices - [] + [] let private MaxUncheckedRecursionDepth = 20 let EnsureSufficientExecutionStack recursionDepth = if recursionDepth > MaxUncheckedRecursionDepth then RuntimeHelpers.EnsureSufficientExecutionStack () -[] +[] type MaybeLazy<'T> = | Strict of 'T | Lazy of Lazy<'T> @@ -563,7 +579,7 @@ type MaybeLazy<'T> = let inline vsnd ((_, y): struct('T * 'T)) = y /// Track a set of resources to cleanup -type DisposablesTracker() = +type DisposablesTracker() = let items = Stack() @@ -572,35 +588,8 @@ type DisposablesTracker() = interface IDisposable with - member _.Dispose() = + member _.Dispose() = let l = List.ofSeq items items.Clear() - for i in l do + for i in l do try i.Dispose() with _ -> () - -/// Specialized parallel functions for an array. -/// Different from Array.Parallel as it will try to minimize the max degree of parallelism. -/// Will flatten aggregate exceptions that contain one exception. -[] -module ArrayParallel = - - let inline iteri f (arr: 'T []) = - let parallelOptions = ParallelOptions(MaxDegreeOfParallelism = max (min Environment.ProcessorCount arr.Length) 1) - try - Parallel.For(0, arr.Length, parallelOptions, fun i -> - f i arr.[i] - ) |> ignore - with - | :? AggregateException as ex when ex.InnerExceptions.Count = 1 -> - raise(ex.InnerExceptions.[0]) - - let inline iter f (arr: 'T []) = - arr |> iteri (fun _ item -> f item) - - let inline mapi f (arr: 'T []) = - let mapped = Array.zeroCreate arr.Length - arr |> iteri (fun i item -> mapped.[i] <- f i item) - mapped - - let inline map f (arr: 'T []) = - arr |> mapi (fun _ item -> f item) diff --git a/src/fsharp/lib.fsi b/src/fsharp/lib.fsi index f7816c129b0..d7957a1a304 100644 --- a/src/fsharp/lib.fsi +++ b/src/fsharp/lib.fsi @@ -1,12 +1,11 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal Internal.Utilities.Library.Extras +module internal FSharp.Compiler.Lib +open System.Collections.Generic open System.IO open System.Text -open System.Globalization -open System.Collections.Generic -open Internal.Utilities.Collections +open FSharp.Compiler.AbstractIL.Internal val debug: bool @@ -23,26 +22,20 @@ val GetEnvInteger: e:string -> dflt:int -> int val dispose: x:System.IDisposable -> unit module Bits = - /// Get the least significant byte of a 32-bit integer val b0: n:int -> int - - /// Get the 2nd least significant byte of a 32-bit integer val b1: n:int -> int - - /// Get the 3rd least significant byte of a 32-bit integer val b2: n:int -> int - - /// Get the most significant byte of a 32-bit integer val b3: n:int -> int - val pown32: n:int -> int - val pown64: n:int -> int64 - val mask32: m:int32 -> n:int -> int - val mask64: m:int32 -> n:int -> int64 +module Filename = + val fullpath: cwd:string -> nm:string -> string + val hasSuffixCaseInsensitive: suffix:string -> filename:string -> bool + val isDll: file:string -> bool + module Bool = val order: IComparer @@ -59,13 +52,11 @@ module Pair = IComparer<'T1 * 'T2> type NameSet = Zset - module NameSet = val ofList: l:string list -> NameSet module NameMap = val domain: m:Map -> Zset - val domainL: m:Map -> string list module Check = @@ -119,7 +110,7 @@ module ListAssoc = module ListSet = val inline contains: f:('a -> 'b -> bool) -> x:'a -> l:'b list -> bool - /// NOTE: O(n)! + /// NOTE: O(n)! val insert: f:('a -> 'a -> bool) -> x:'a -> l:'a list -> 'a list val unionFavourRight : f:('a -> 'a -> bool) -> l1:'a list -> l2:'a list -> 'a list @@ -140,7 +131,7 @@ module ListSet = val unionFavourLeft : f:('a -> 'a -> bool) -> l1:'a list -> l2:'a list -> 'a list - /// NOTE: not tail recursive! + /// NOTE: not tail recursive! val intersect : f:('a -> 'b -> bool) -> l1:'b list -> l2:'a list -> 'a list /// Note: if duplicates appear, keep the ones toward the _front_ of the list @@ -214,7 +205,7 @@ type Graph<'Data,'Id when 'Id: comparison> = edges:('Data * 'Data) list -> Graph<'Data,'Id> member GetNodeData: nodeId:'Id -> 'Data member IterateCycles: f:('Data list -> unit) -> unit - + /// In some cases we play games where we use 'null' as a more efficient representation /// in F#. The functions below are used to give initial values to mutable fields. /// This is an unsafe trick, as it relies on the fact that the type of values @@ -248,15 +239,15 @@ module AsyncUtil = | AsyncException of exn | AsyncCanceled of System.OperationCanceledException static member Commit: res:AsyncResult<'T> -> Async<'T> - + /// When using .NET 4.0 you can replace this type by [] type AsyncResultCell<'T> = - + new: unit -> AsyncResultCell<'T> member RegisterResult: res:AsyncResult<'T> -> unit member AsyncResult: Async<'T> - + module UnmanagedProcessExecutionOptions = val EnableHeapTerminationOnCorruption: unit -> unit @@ -269,7 +260,7 @@ type MaybeLazy<'T> = | Lazy of System.Lazy<'T> member Force: unit -> 'T member Value: 'T - + val inline vsnd: struct ('T * 'T) -> 'T /// Track a set of resources to cleanup @@ -281,13 +272,3 @@ type DisposablesTracker = member Register: i:System.IDisposable -> unit interface System.IDisposable - -/// Specialized parallel functions for an array. -/// Different from Array.Parallel as it will try to minimize the max degree of parallelism. -/// Will flatten aggregate exceptions that contain one exception. -[] -module ArrayParallel = - - val inline map : ('T -> 'U) -> 'T [] -> 'U [] - - val inline mapi : (int -> 'T -> 'U) -> 'T [] -> 'U [] diff --git a/src/fsharp/pars.fsy b/src/fsharp/pars.fsy index c40d81f511f..2f229183503 100644 --- a/src/fsharp/pars.fsy +++ b/src/fsharp/pars.fsy @@ -11,20 +11,17 @@ open Internal.Utilities.Text.Parsing open FSharp.Compiler open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL -open Internal.Utilities.Library +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features -open Internal.Utilities.Library.Extras +open FSharp.Compiler.Lib open FSharp.Compiler.ParseHelpers -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming -open FSharp.Compiler.SyntaxTreeOps +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Position -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Xml +open FSharp.Compiler.XmlDoc #if DEBUG let debugPrint s = @@ -65,14 +62,14 @@ let mkSynDoBinding (vis, strict, expr, m) = match vis with | Some vis -> errorR(Error(FSComp.SR.parsDoCannotHaveVisibilityDeclarations (vis.ToString()), m)) | None -> () - SynBinding(None, - (if strict then SynBindingKind.Do else SynBindingKind.StandaloneExpression), + Binding (None, + (if strict then DoBinding else StandaloneExpression), false, false, [], PreXmlDoc.Empty, SynInfo.emptySynValData, (if strict then SynPat.Const(SynConst.Unit, m) else SynPat.Wild m), - None, expr, m, DebugPointAtBinding.NoneAtDo) + None, expr, m, NoDebugPointAtDoBinding) let mkSynDoDecl (e: SynExpr) = - let spExpr = if IsControlFlowExpression e then DebugPointAtBinding.NoneAtDo else DebugPointAtBinding.Yes e.Range + let spExpr = if IsControlFlowExpression e then NoDebugPointAtDoBinding else DebugPointAtBinding e.Range in SynModuleDecl.DoExpr(spExpr, e, e.Range) let addAttribs attrs p = SynPat.Attrib(p, attrs, p.Range) @@ -156,8 +153,6 @@ let mkClassMemberLocalBindings(isStatic, initialRangeOpt, attrs, vis, BindingSet match initialRangeOpt with | None -> bindingSetRange | Some m -> unionRanges m bindingSetRange - // decls could have a leading attribute - |> fun m -> (m, decls) ||> unionRangeWithListBy (fun (SynBinding(range = m)) -> m) if not (isNil ignoredFreeAttrs) then warning(Error(FSComp.SR.parsAttributesIgnored(), wholeRange)); if isUse then errorR(Error(FSComp.SR.parsUseBindingsIllegalInImplicitClassConstructors(), wholeRange)) SynMemberDefn.LetBindings (decls, isStatic, isRec, wholeRange) @@ -169,9 +164,7 @@ let mkLocalBindings (mWhole, BindingSetPreAttrs(_, isRec, isUse, declsPreAttrs, let mkDefnBindings (mWhole, BindingSetPreAttrs(_, isRec, isUse, declsPreAttrs, _bindingSetRange), attrs, vis, attrsm) = if isUse then warning(Error(FSComp.SR.parsUseBindingsIllegalInModules(), mWhole)) - let freeAttrs, decls = declsPreAttrs attrs vis - // decls might have an extended range due to leading attributes - let mWhole = (mWhole, decls) ||> unionRangeWithListBy (fun (SynBinding(range = m)) -> m) + let freeAttrs, decls = declsPreAttrs attrs vis let letDecls = [ SynModuleDecl.Let (isRec, decls, mWhole) ] let attrDecls = if not (isNil freeAttrs) then [ SynModuleDecl.Attributes (freeAttrs, attrsm) ] else [] attrDecls @ letDecls @@ -180,7 +173,7 @@ let idOfPat (parseState:IParseState) m p = match p with | SynPat.Wild r when parseState.LexBuffer.SupportsFeature LanguageFeature.WildCardInForLoop -> mkSynId r "_" - | SynPat.Named (id, false, _, _) -> id + | SynPat.Named (SynPat.Wild _, id, false, _, _) -> id | SynPat.LongIdent(LongIdentWithDots([id], _), _, None, SynArgPats.Pats [], None, _) -> id | _ -> raiseParseErrorAt m (FSComp.SR.parsIntegerForLoopRequiresSimpleIdentifier()) @@ -198,17 +191,16 @@ let rangeOfLongIdent(lid:LongIdent) = %} // Producing these changes the lex state, e.g. string --> token, or nesting level of braces in interpolated strings -%token BYTEARRAY -%token STRING -%token INTERP_STRING_BEGIN_END -%token INTERP_STRING_BEGIN_PART +%token BYTEARRAY +%token STRING +%token INTERP_STRING_BEGIN_END +%token INTERP_STRING_BEGIN_PART %token INTERP_STRING_PART %token INTERP_STRING_END %token LBRACE RBRACE -%token KEYWORD_STRING // Like __SOURCE_DIRECTORY__ +%token KEYWORD_STRING // Like __SOURCE_DIRECTORY__ %token IDENT -%token HASH_IDENT %token INFIX_STAR_STAR_OP %token INFIX_COMPARE_OP %token INFIX_AT_HAT_OP @@ -315,36 +307,36 @@ let rangeOfLongIdent(lid:LongIdent) = %token HASH_IF HASH_ELSE HASH_ENDIF %start signatureFile implementationFile interaction typedSeqExprEOF typEOF -%type typedSeqExprEOF -%type implementationFile -%type signatureFile -%type interaction -%type ident -%type typ typEOF -%type tyconSpfnList -%type patternResult -%type declExpr -%type minusExpr -%type appExpr -%type argExpr -%type declExprBlock -%type headBindingPattern -%type atomicExprAfterType -%type typedSeqExprBlock -%type atomicExpr -%type tyconDefnOrSpfnSimpleRepr -%type <(SynEnumCase, SynUnionCase) Choice list> unionTypeRepr -%type tyconDefnAugmentation -%type exconDefn -%type exconCore -%type moduleDefnsOrExprPossiblyEmptyOrBlock -%type path -%type pathOp +%type typedSeqExprEOF +%type implementationFile +%type signatureFile +%type interaction +%type ident +%type typ typEOF +%type tyconSpfns +%type patternResult +%type declExpr +%type minusExpr +%type appExpr +%type argExpr +%type declExprBlock +%type headBindingPattern +%type atomicExprAfterType +%type typedSeqExprBlock +%type atomicExpr +%type tyconDefnOrSpfnSimpleRepr +%type <(SyntaxTree.SynEnumCase, SyntaxTree.SynUnionCase) Choice list> unionTypeRepr +%type tyconDefnAugmentation +%type exconDefn +%type exconCore +%type moduleDefnsOrExprPossiblyEmptyOrBlock +%type path +%type pathOp /* LESS GREATER parsedOk typeArgs m for each mWhole */ -%type typeArgsActual +%type typeArgsActual /* LESS GREATER typeArgs m for each mWhole */ -%type typeArgsNoHpaDeprecated -%type typar +%type typeArgsNoHpaDeprecated +%type typar /* About precedence rules: * @@ -545,14 +537,14 @@ let rangeOfLongIdent(lid:LongIdent) = /* An interaction in F# Interactive */ interaction: | interactiveItemsTerminator - { ParsedScriptInteraction.Definitions ($1, lhs parseState) } + { IDefns ($1, lhs parseState) } | SEMICOLON { warning(Error(FSComp.SR.parsUnexpectedSemicolon(), rhs parseState 1)) - ParsedScriptInteraction.Definitions ([], lhs parseState) } + IDefns ([], lhs parseState) } | OBLOCKSEP - { ParsedScriptInteraction.Definitions ([], lhs parseState) } + { IDefns ([], lhs parseState) } interactiveTerminator: @@ -635,8 +627,7 @@ interactiveSeparator: /* A #directive in a module, namespace or an interaction */ hashDirective: | HASH IDENT hashDirectiveArgs - { let m = match $3 with [] -> rhs2 parseState 1 2 | _ -> rhs2 parseState 1 3 - ParsedHashDirective ($2, $3, m) } + { ParsedHashDirective ($2, $3, lhs parseState) } /* The arguments to a #directive */ @@ -649,14 +640,10 @@ hashDirectiveArgs: /* One argument to a #directive */ -hashDirectiveArg: - | string - { let s, kind = $1 - ParsedHashDirectiveArgument.String (s, kind, lhs parseState) } - | sourceIdentifier - { let c,v = $1 - ParsedHashDirectiveArgument.SourceIdentifier (c, v, lhs parseState) } - +hashDirectiveArg: + | stringOrKeywordString + { $1 } + /*--------------------------------------------------------------------------*/ /* F# Language Proper - signature files */ @@ -729,23 +716,19 @@ fileModuleSpec: | opt_attributes opt_declVisibility moduleIntro moduleSpfnsPossiblyEmptyBlock { if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(), rhs parseState 2)) let m2 = rhs parseState 3 - let mDeclsAndAttrs = (List.map (fun (a: SynAttributeList) -> a.Range) $1) @ (List.map (fun (d: SynModuleSigDecl) -> d.Range) $4) - let m = (m2, mDeclsAndAttrs) ||> unionRangeWithListBy id + let m = (rhs2 parseState 1 4) let isRec, path2, xml, vis = $3 (fun (isRec2, path, _) -> if not (isNil path) then errorR(Error(FSComp.SR.parsNamespaceOrModuleNotBoth(), m2)) let lid = path@path2 - ParsedSigFileFragment.NamedModule(SynModuleOrNamespaceSig(lid, (isRec || isRec2), SynModuleOrNamespaceKind.NamedModule, $4, xml, $1, vis, m))) } + ParsedSigFileFragment.NamedModule(SynModuleOrNamespaceSig(lid, (isRec || isRec2), NamedModule, $4, xml, $1, vis, m))) } | moduleSpfnsPossiblyEmptyBlock { let m = (rhs parseState 1) (fun (isRec, path, xml) -> - match path with + match path with | [] -> ParsedSigFileFragment.AnonModule($1, m) - | _ -> - let lastDeclRange = List.tryLast $1 |> Option.map (fun decl -> decl.Range) |> Option.defaultValue (rhs parseState 1) - let m = mkRange lastDeclRange.FileName (lhs parseState).Start lastDeclRange.End - ParsedSigFileFragment.NamespaceFragment(path, isRec, SynModuleOrNamespaceKind.DeclaredNamespace, $1, xml, [], m)) } + | _ -> ParsedSigFileFragment.NamespaceFragment(path, isRec, DeclaredNamespace, $1, xml, [], m)) } moduleSpfnsPossiblyEmptyBlock: @@ -808,31 +791,23 @@ moduleSpfn: { let isRec, path, xml, vis = $3 if not (isSingleton path) then raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsModuleDefnMustBeSimpleName()) if isRec then raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsInvalidUseOfRec()) - let info = SynComponentInfo($1, None, [], path, xml, false, vis, rhs parseState 3) + let info = ComponentInfo($1, [], [], path, xml, false, vis, rhs parseState 3) if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(), rhs parseState 2)) - let m = (rhs2 parseState 1 4, $5) ||> unionRangeWithListBy (fun (d: SynModuleSigDecl) -> d.Range) - SynModuleSigDecl.NestedModule(info, isRec, $5, m) } - - | opt_attributes opt_declVisibility typeKeyword tyconSpfnList - { if Option.isSome $2 then - errorR (Error (FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier (), rhs parseState 2)) + SynModuleSigDecl.NestedModule(info, isRec, $5, rhs2 parseState 1 5) } - match $4 with - | [] -> raiseParseErrorAt (rhs2 parseState 3 4) (FSComp.SR.parsUnexpectedEmptyModuleDefn ()) - | SynTypeDefnSig (SynComponentInfo (cas, a, cs, b, c, d, d2, d3), e, f, g) :: tail -> - let attrs = $1 @ cas - let mTc = - let keywordM = rhs parseState 3 - (keywordM, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) |> unionRanges g - let tc = (SynTypeDefnSig(SynComponentInfo(attrs, a, cs, b, c, d, d2, d3), e, f, mTc)) - let m = (mTc, tail) ||> unionRangeWithListBy (fun (a: SynTypeDefnSig) -> a.Range) - - SynModuleSigDecl.Types (tc :: tail, m) } + | opt_attributes opt_declVisibility tyconSpfns + { if Option.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()) + | h :: t -> h, t + let tc = (TypeDefnSig(ComponentInfo($1@cas, a, cs, b, c, d, d2, d3), e, f, g))in + SynModuleSigDecl.Types (tc :: rest, rhs parseState 3) } | opt_attributes opt_declVisibility exconSpfn { if Option.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) + let ec = (SynExceptionSig(SynExceptionDefnRepr($1@cas, a, b, c, d, d2), e, f)) SynModuleSigDecl.Exception(ec, rhs parseState 3) } | openDecl @@ -844,7 +819,7 @@ valSpfn: 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 not (isNil attr2) then errorR(Deprecated(FSComp.SR.parsAttributesMustComeBeforeVal(), rhs parseState 4)) let m = rhs2 parseState 1 11 - let valSpfn = SynValSig((attr1@attr2), id, explicitValTyparDecls, ty, arity, isInline, isMutable, doc, vis2, konst, m) + let valSpfn = ValSpfn((attr1@attr2), id, explicitValTyparDecls, ty, arity, isInline, isMutable, doc, vis2, konst, m) SynModuleSigDecl.Val(valSpfn, m) } @@ -876,6 +851,12 @@ moduleSpecBlock: { $2 } +/* A group of type definitions in a signature */ +tyconSpfns: + | typeKeyword tyconSpfnList + { $2 } + + tyconSpfnList: | tyconSpfn AND tyconSpfnList { $1 :: $3 } @@ -890,7 +871,7 @@ tyconSpfn: { let lhsm = rhs parseState 1 $3 lhsm $1 } | typeNameInfo opt_classSpfn - { SynTypeDefnSig($1, SynTypeDefnSigRepr.Simple (SynTypeDefnSimpleRepr.None (lhs parseState), lhs parseState), $2, lhs parseState) } + { TypeDefnSig($1, SynTypeDefnSigRepr.Simple (SynTypeDefnSimpleRepr.None (lhs parseState), lhs parseState), $2, lhs parseState) } /* The right-hand-side of a type definition in a signature */ @@ -917,37 +898,32 @@ tyconSpfnRhsBlock: /* The right-hand-side of a type definition in a signature */ tyconSpfnRhs: | tyconDefnOrSpfnSimpleRepr - { (fun lhsm nameInfo augmentation -> - let declRange = unionRanges lhsm $1.Range - let mWhole = (declRange, augmentation) ||> unionRangeWithListBy (fun (mem: SynMemberSig) -> mem.Range) - SynTypeDefnSig(nameInfo, SynTypeDefnSigRepr.Simple ($1, $1.Range), augmentation, mWhole)) } + { let m = $1.Range + (fun lhsm nameInfo augmentation -> + TypeDefnSig(nameInfo, SynTypeDefnSigRepr.Simple ($1, m), augmentation, m)) } | tyconClassSpfn - { let objectModelRange = lhs parseState + { let m = lhs parseState let needsCheck, (kind, decls) = $1 (fun nameRange nameInfo augmentation -> if needsCheck && isNil decls then reportParseErrorAt nameRange (FSComp.SR.parsEmptyTypeDefinition()) - - let declRange = unionRanges nameRange objectModelRange - let mWhole = (declRange, augmentation) ||> unionRangeWithListBy (fun (mem: SynMemberSig) -> mem.Range) - SynTypeDefnSig(nameInfo, SynTypeDefnSigRepr.ObjectModel (kind, decls, objectModelRange), augmentation, mWhole)) } + TypeDefnSig(nameInfo, SynTypeDefnSigRepr.ObjectModel (kind, decls, m), augmentation, m)) } | DELEGATE OF topType { let m = lhs parseState let ty, arity = $3 - let invoke = SynMemberSig.Member(SynValSig([], mkSynId m "Invoke", inferredTyparDecls, ty, arity, false, false, PreXmlDoc.Empty, None, None, m), AbstractMemberFlags SynMemberKind.Member, m) + 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 not (isNil augmentation) then raiseParseErrorAt m (FSComp.SR.parsAugmentationsIllegalOnDelegateType()) - let mWhole = unionRanges nameRange m - SynTypeDefnSig(nameInfo, SynTypeDefnSigRepr.ObjectModel (SynTypeDefnKind.Delegate (ty, arity), [invoke], m), [], mWhole)) } + TypeDefnSig(nameInfo, SynTypeDefnSigRepr.ObjectModel (TyconDelegate (ty, arity), [invoke], m), [], m)) } /* The right-hand-side of an object type definition in a signature */ tyconClassSpfn: | classSpfnBlockKindUnspecified { let needsCheck, decls = $1 - needsCheck, (SynTypeDefnKind.Unspecified, decls) } + needsCheck, (TyconUnspecified, decls) } | classOrInterfaceOrStruct classSpfnBlock END { false, ($1, $2) } @@ -1010,14 +986,13 @@ classMemberSpfn: { if Option.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([], _), SynMemberKind.Member -> SynMemberKind.PropertyGet | _ -> getSet + let getSetAdjuster arity = match arity, getSet with SynValInfo([], _), MemberKind.Member -> MemberKind.PropertyGet | _ -> getSet let wholeRange = let m = rhs parseState 3 match getSetRangeOpt with | None -> unionRanges m ty.Range | Some m2 -> unionRanges m m2 - |> fun m -> (m, $1) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) - let valSpfn = SynValSig($1, id, explicitValTyparDecls, ty, arity, isInline, false, doc, vis2, optLiteralValue, wholeRange) + let valSpfn = ValSpfn($1, id, explicitValTyparDecls, ty, arity, isInline, false, doc, vis2, optLiteralValue, wholeRange) let _, flags = $3 SynMemberSig.Member(valSpfn, flags (getSetAdjuster arity), wholeRange) } @@ -1048,14 +1023,14 @@ classMemberSpfn: { let vis, doc, (ty, valSynInfo) = $2, grabXmlDoc(parseState, 3), $5 let m = unionRanges (rhs parseState 1) ty.Range let isInline = false - let valSpfn = SynValSig ($1, mkSynId (rhs parseState 3) "new", noInferredTypars, ty, valSynInfo, isInline, false, doc, vis, None, m) + let valSpfn = ValSpfn ($1, mkSynId (rhs parseState 3) "new", noInferredTypars, ty, valSynInfo, isInline, false, doc, vis, None, m) SynMemberSig.Member(valSpfn, CtorMemberFlags, m) } /* The optional "with get, set" on a member in a signature */ classMemberSpfnGetSet: | /* EMPTY */ - { None, SynMemberKind.Member } + { None, MemberKind.Member } | WITH classMemberSpfnGetSetElements { Some (rhs2 parseState 1 2), $2 } @@ -1072,8 +1047,8 @@ classMemberSpfnGetSet: classMemberSpfnGetSetElements: | nameop { (let (id:Ident) = $1 - if id.idText = "get" then SynMemberKind.PropertyGet - else if id.idText = "set" then SynMemberKind.PropertySet + if id.idText = "get" then MemberKind.PropertyGet + else if id.idText = "set" then MemberKind.PropertySet else raiseParseErrorAt (rhs parseState 1) (FSComp.SR.parsGetOrSetRequired())) } | nameop COMMA nameop @@ -1081,7 +1056,7 @@ classMemberSpfnGetSetElements: if not ((id.idText = "get" && $3.idText = "set") || (id.idText = "set" && $3.idText = "get")) then raiseParseErrorAt (rhs2 parseState 1 3) (FSComp.SR.parsGetOrSetRequired()) - SynMemberKind.PropertyGetSet } + MemberKind.PropertyGetSet } memberSpecFlags: | memberFlags { $1 } @@ -1165,23 +1140,19 @@ fileModuleImpl: | opt_attributes opt_declVisibility moduleIntro moduleDefnsOrExprPossiblyEmptyOrBlock { if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(), rhs parseState 2)) let m2 = rhs parseState 3 - let mDeclsAndAttrs = (List.map (fun (a: SynAttributeList) -> a.Range) $1) @ (List.map (fun (d: SynModuleDecl) -> d.Range) $4) - let m = (m2, mDeclsAndAttrs) ||> unionRangeWithListBy id + let m = (m2, $4) ||> unionRangeWithListBy (fun modu -> modu.Range) let isRec2, path2, xml, vis = $3 (fun (isRec, path, _) -> if not (isNil path) then errorR(Error(FSComp.SR.parsNamespaceOrModuleNotBoth(), m2)) let lid = path@path2 - ParsedImplFileFragment.NamedModule(SynModuleOrNamespace(lid, (isRec || isRec2), SynModuleOrNamespaceKind.NamedModule, $4, xml, $1, vis, m))) } + ParsedImplFileFragment.NamedModule(SynModuleOrNamespace(lid, (isRec || isRec2), NamedModule, $4, xml, $1, vis, m))) } | moduleDefnsOrExprPossiblyEmptyOrBlock { let m = (rhs parseState 1) (fun (isRec, path, xml) -> match path with | [] -> ParsedImplFileFragment.AnonModule($1, m) - | _ -> - let lastDeclRange = List.tryLast $1 |> Option.map (fun decl -> decl.Range) |> Option.defaultValue (rhs parseState 1) - let m = mkRange lastDeclRange.FileName (lhs parseState).Start lastDeclRange.End - ParsedImplFileFragment.NamespaceFragment(path, isRec, SynModuleOrNamespaceKind.DeclaredNamespace, $1, xml, [], m)) } + | _ -> ParsedImplFileFragment.NamespaceFragment(path, isRec, DeclaredNamespace, $1, xml, [], m)) } /* A collection/block of definitions or expressions making up a module or namespace, possibly empty */ @@ -1295,10 +1266,8 @@ moduleDefn: /* 'type' definitions */ | opt_attributes opt_declVisibility typeKeyword tyconDefn tyconDefnList { if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(), rhs parseState 2)) - let (SynTypeDefn(SynComponentInfo(cas, a, cs, b, c, d, d2, d3), e, f, g, h)) = $4 - let attrs = $1@cas - let mTc = (h, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) - let tc = (SynTypeDefn(SynComponentInfo(attrs, a, cs, b, c, d, d2, d3), e, f, g, mTc)) + 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 [ SynModuleDecl.Types(types, (rhs parseState 3, types) ||> unionRangeWithListBy (fun t -> t.Range) ) ] } @@ -1326,7 +1295,7 @@ moduleDefn: [ SynModuleDecl.ModuleAbbrev(List.head path, eqn, (rhs parseState 3, eqn) ||> unionRangeWithListBy (fun id -> id.idRange) ) ] | Choice2Of2 def -> if not (isSingleton path) then raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsModuleAbbreviationMustBeSimpleName()) - let info = SynComponentInfo(attribs, None, [], path, xml, false, vis, rhs parseState 3) + let info = ComponentInfo(attribs, [], [], path, xml, false, vis, rhs parseState 3) [ SynModuleDecl.NestedModule(info, isRec, def, false, (rhs2 parseState 1 4, def) ||> unionRangeWithListBy (fun d -> d.Range) ) ] } /* unattached custom attributes */ @@ -1511,8 +1480,9 @@ memberFlags: /* The name of a type in a signature or implementation, possibly with type parameters and constraints */ typeNameInfo: | opt_attributes tyconNameAndTyparDecls opt_typeConstraints - { let typars, lid, fixity, vis, xmlDoc = $2 - SynComponentInfo ($1, typars, $3, lid, xmlDoc, fixity, vis, rangeOfLid lid) } + { let typars, lid, fixity, tpcs1, vis, xmlDoc = $2 + let tpcs2 = $3 + ComponentInfo($1, typars, (tpcs1 @ tpcs2), lid, xmlDoc, fixity, vis, rangeOfLid lid) } /* Part of a set of type definitions */ tyconDefnList: @@ -1524,11 +1494,11 @@ tyconDefnList: /* A type definition */ tyconDefn: | typeNameInfo - { SynTypeDefn($1, SynTypeDefnRepr.Simple(SynTypeDefnSimpleRepr.None($1.Range), $1.Range), [], None, $1.Range) } + { TypeDefn($1, SynTypeDefnRepr.Simple(SynTypeDefnSimpleRepr.None($1.Range), $1.Range), [], $1.Range) } | typeNameInfo opt_equals tyconDefnRhsBlock { if not $2 then ( - let (SynComponentInfo(_, _, _, lid, _, _, _, _)) = $1 + let (ComponentInfo(_, _, _, lid, _, _, _, _)) = $1 // While the spec doesn't allow long idents here, the parser doesn't enforce this, so take one ident let typeNameId = List.last lid raiseParseErrorAt (rhs parseState 2) (FSComp.SR.parsEqualsMissingInTypeDefinition(typeNameId.ToString())) @@ -1537,17 +1507,17 @@ tyconDefn: let (tcDefRepr:SynTypeDefnRepr), members = $3 nameRange let declRange = unionRanges (rhs parseState 1) tcDefRepr.Range let mWhole = (declRange, members) ||> unionRangeWithListBy (fun (mem:SynMemberDefn) -> mem.Range) - SynTypeDefn($1, tcDefRepr, members, None, mWhole) } + TypeDefn($1, tcDefRepr, members, mWhole) } | typeNameInfo tyconDefnAugmentation { let m = (rhs parseState 1, $2) ||> unionRangeWithListBy (fun mem -> mem.Range) - SynTypeDefn($1, SynTypeDefnRepr.ObjectModel(SynTypeDefnKind.Augmentation, [], m), $2, None, m) } + TypeDefn($1, SynTypeDefnRepr.ObjectModel(TyconAugmentation, [], m), $2, m) } | typeNameInfo opt_attributes opt_declVisibility opt_HIGH_PRECEDENCE_APP simplePatterns optAsSpec EQUALS tyconDefnRhsBlock { let vis, spats, az = $3, $5, $6 let nameRange = rhs parseState 1 let (tcDefRepr, members) = $8 nameRange - let (SynComponentInfo(_, _, _, lid, _, _, _, _)) = $1 + let (ComponentInfo(_, _, _, lid, _, _, _, _)) = $1 // Gets the XML doc comments prior to the implicit constructor let xmlDoc = grabXmlDoc(parseState, 5) let memberCtorPattern = SynMemberDefn.ImplicitCtor (vis, $2, spats, az, xmlDoc, rangeOfLid lid) @@ -1558,7 +1528,7 @@ tyconDefn: let declRange = unionRanges (rhs parseState 1) tcDefRepr.Range let mWhole = (declRange, members) ||> unionRangeWithListBy (fun (mem:SynMemberDefn) -> mem.Range) - SynTypeDefn($1, tcDefRepr, members, Some memberCtorPattern, mWhole) } + TypeDefn($1, tcDefRepr, members, mWhole) } /* The right-hand-side of a type definition */ @@ -1609,17 +1579,17 @@ tyconDefnRhs: { let m = lhs parseState let ty, arity = $3 (fun nameRange augmentation -> - let valSpfn = SynValSig([], mkSynId m "Invoke", inferredTyparDecls, ty, arity, false, false, PreXmlDoc.Empty, None, None, m) - let invoke = SynMemberDefn.AbstractSlot(valSpfn, AbstractMemberFlags SynMemberKind.Member, m) + 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 not (isNil augmentation) then raiseParseErrorAt m (FSComp.SR.parsAugmentationsIllegalOnDelegateType()) - SynTypeDefnRepr.ObjectModel (SynTypeDefnKind.Delegate (ty, arity), [invoke], m), []) } + SynTypeDefnRepr.ObjectModel (TyconDelegate (ty, arity), [invoke], m), []) } /* The right-hand-side of a object type definition */ tyconClassDefn: | classDefnBlockKindUnspecified { let needsCheck, decls, mopt = $1 - needsCheck, (SynTypeDefnKind.Unspecified, decls), mopt } + needsCheck, (TyconUnspecified, decls), mopt } | classOrInterfaceOrStruct classDefnBlock END { false, ($1, $2), Some (rhs2 parseState 1 3) } @@ -1721,9 +1691,8 @@ memberCore: let optReturnType = $3 let bindingBuilder, mBindLhs = $2 (fun vis memFlagsBuilder attrs rangeStart -> - let memberFlags = Some (memFlagsBuilder SynMemberKind.Member) - let mWholeBindLhs = (mBindLhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) - let binding = bindingBuilder (vis, $1, false, mWholeBindLhs, DebugPointAtBinding.NoneAtInvisible, optReturnType, $5, mRhs, [], attrs, memberFlags) + let memberFlags = Some (memFlagsBuilder MemberKind.Member) + let binding = bindingBuilder (vis, $1, false, mBindLhs, NoDebugPointAtInvisibleBinding, optReturnType, $5, mRhs, [], attrs, memberFlags) let memberRange = unionRanges rangeStart mRhs [ SynMemberDefn.Member (binding, memberRange) ]) } @@ -1749,16 +1718,16 @@ memberCore: let attrs = attrs @ optAttrs - let binding = bindingBuilder (visNoLongerUsed, optInline, isMutable, mBindLhs, DebugPointAtBinding.NoneAtInvisible, optReturnType, expr, exprm, [], attrs, Some (memFlagsBuilder SynMemberKind.Member)) - let (SynBinding (vis, _, isInline, _, attrs, doc, valSynData, pv, _, _, mBindLhs, spBind)) = binding + let binding = bindingBuilder (visNoLongerUsed, optInline, isMutable, mBindLhs, NoDebugPointAtInvisibleBinding, optReturnType, expr, exprm, [], attrs, Some (memFlagsBuilder MemberKind.Member)) + let (Binding (vis, _, isInline, _, attrs, doc, valSynData, pv, _, _, mBindLhs, spBind)) = binding let memberKind = let getset = let rec go p = match p with - | SynPat.LongIdent (LongIdentWithDots([id], _), _, _, _, _, _) -> id.idText - | SynPat.Named (nm, _, _, _) | SynPat.As (_, SynPat.Named (nm, _, _, _), _) -> nm.idText - | SynPat.Typed (p, _, _) -> go p - | SynPat.Attrib (p, _, _) -> go p + | SynPat.LongIdent (LongIdentWithDots([id], _), _, _, _, _, _) -> id.idText + | SynPat.Named (_, nm, _, _, _) -> nm.idText + | SynPat.Typed (p, _, _) -> go p + | SynPat.Attrib (p, _, _) -> go p | _ -> raiseParseErrorAt mBindLhs (FSComp.SR.parsInvalidDeclarationSyntax()) go pv if getset = "get" then @@ -1767,14 +1736,14 @@ memberCore: None else hasGet := true - Some SynMemberKind.PropertyGet + Some MemberKind.PropertyGet else if getset = "set" then if !hasSet then reportParseErrorAt mBindLhs (FSComp.SR.parsGetAndOrSetRequired()) None else hasSet := true - Some SynMemberKind.PropertySet + Some MemberKind.PropertySet else raiseParseErrorAt mBindLhs (FSComp.SR.parsGetAndOrSetRequired()) @@ -1793,21 +1762,20 @@ memberCore: let optReturnType = match (memberKind, optReturnType) with - | SynMemberKind.PropertySet, _ -> optReturnType + | MemberKind.PropertySet, _ -> optReturnType | _, None -> optPropertyType | _ -> optReturnType // REDO with the correct member kind - let binding = bindingBuilder(vis, isInline, isMutable, mBindLhs, DebugPointAtBinding.NoneAtInvisible, optReturnType, expr, exprm, [], attrs, Some(memFlagsBuilder memberKind)) + let binding = bindingBuilder(vis, isInline, isMutable, mBindLhs, NoDebugPointAtInvisibleBinding, optReturnType, expr, exprm, [], attrs, Some(memFlagsBuilder memberKind)) - let (SynBinding (vis, _, isInline, _, attrs, doc, valSynData, pv, rhsRetInfo, rhsExpr, mBindLhs, spBind)) = binding - let mWholeBindLhs = (mBindLhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) + let (Binding (vis, _, isInline, _, attrs, doc, valSynData, pv, rhsRetInfo, rhsExpr, mBindLhs, spBind)) = binding let (SynValData(_, valSynInfo, _)) = valSynData // Setters have all arguments tupled in their internal TAST form, though they don't appear to be // tupled from the syntax - let memFlags : SynMemberFlags = memFlagsBuilder memberKind + let memFlags = memFlagsBuilder memberKind let valSynInfo = let adjustValueArg valueArg = @@ -1816,39 +1784,39 @@ memberCore: | _ -> SynInfo.unnamedTopArg match memberKind, valSynInfo, memFlags.IsInstance with - | SynMemberKind.PropertyGet, SynValInfo ([], _ret), false - | SynMemberKind.PropertyGet, SynValInfo ([_], _ret), true -> - raiseParseErrorAt mWholeBindLhs (FSComp.SR.parsGetterMustHaveAtLeastOneArgument()) + | MemberKind.PropertyGet, SynValInfo ([], _ret), false + | MemberKind.PropertyGet, SynValInfo ([_], _ret), true -> + raiseParseErrorAt mBindLhs (FSComp.SR.parsGetterMustHaveAtLeastOneArgument()) - | SynMemberKind.PropertyGet, SynValInfo (thisArg :: indexOrUnitArgs :: rest, ret), true -> + | MemberKind.PropertyGet, SynValInfo (thisArg :: indexOrUnitArgs :: rest, ret), true -> if not rest.IsEmpty then - reportParseErrorAt mWholeBindLhs (FSComp.SR.parsGetterAtMostOneArgument ()) + reportParseErrorAt mBindLhs (FSComp.SR.parsGetterAtMostOneArgument ()) SynValInfo ([thisArg; indexOrUnitArgs], ret) - | SynMemberKind.PropertyGet, SynValInfo (indexOrUnitArgs :: rest, ret), false -> + | MemberKind.PropertyGet, SynValInfo (indexOrUnitArgs :: rest, ret), false -> if not rest.IsEmpty then - reportParseErrorAt mWholeBindLhs (FSComp.SR.parsGetterAtMostOneArgument ()) + reportParseErrorAt mBindLhs (FSComp.SR.parsGetterAtMostOneArgument ()) SynValInfo ([indexOrUnitArgs], ret) - | SynMemberKind.PropertySet, SynValInfo ([thisArg;valueArg], ret), true -> + | MemberKind.PropertySet, SynValInfo ([thisArg;valueArg], ret), true -> SynValInfo ([thisArg; adjustValueArg valueArg], ret) - | SynMemberKind.PropertySet, SynValInfo (thisArg :: indexArgs :: valueArg :: rest, ret), true -> + | MemberKind.PropertySet, SynValInfo (thisArg :: indexArgs :: valueArg :: rest, ret), true -> if not rest.IsEmpty then - reportParseErrorAt mWholeBindLhs (FSComp.SR.parsSetterAtMostTwoArguments ()) + reportParseErrorAt mBindLhs (FSComp.SR.parsSetterAtMostTwoArguments ()) SynValInfo ([thisArg; indexArgs @ adjustValueArg valueArg], ret) - | SynMemberKind.PropertySet, SynValInfo ([valueArg], ret), false -> + | MemberKind.PropertySet, SynValInfo ([valueArg], ret), false -> SynValInfo ([adjustValueArg valueArg], ret) - | SynMemberKind.PropertySet, SynValInfo (indexArgs :: valueArg :: rest, ret), _ -> + | MemberKind.PropertySet, SynValInfo (indexArgs :: valueArg :: rest, ret), _ -> if not rest.IsEmpty then - reportParseErrorAt mWholeBindLhs (FSComp.SR.parsSetterAtMostTwoArguments ()) + reportParseErrorAt mBindLhs (FSComp.SR.parsSetterAtMostTwoArguments ()) SynValInfo ([indexArgs @ adjustValueArg valueArg], ret) | _ -> // should be unreachable, cover just in case - raiseParseErrorAt mWholeBindLhs (FSComp.SR.parsInvalidProperty ()) + raiseParseErrorAt mBindLhs (FSComp.SR.parsInvalidProperty ()) let valSynData = SynValData(Some(memFlags), valSynInfo, None) @@ -1858,15 +1826,16 @@ memberCore: let bindingPatAdjusted, xmlDocAdjusted = - let bindingOuter = propertyNameBindingBuilder(vis, optInline, isMutable, mWholeBindLhs, spBind, optReturnType, expr, exprm, [], attrs, Some(memFlagsBuilder SynMemberKind.Member)) + let bindingOuter = propertyNameBindingBuilder(vis, optInline, isMutable, mBindLhs, spBind, optReturnType, expr, exprm, [], attrs, Some(memFlagsBuilder MemberKind.Member)) - let (SynBinding (_, _, _, _, _, doc2, _, bindingPatOuter, _, _, _, _)) = bindingOuter + let (Binding (_, _, _, _, _, doc2, _, bindingPatOuter, _, _, _, _)) = bindingOuter + let lidOuter, lidVisOuter = match bindingPatOuter with | SynPat.LongIdent (lid, None, None, SynArgPats.Pats [], lidVisOuter, m) -> lid, lidVisOuter - | SynPat.Named (id, _, visOuter, m) | SynPat.As(_, SynPat.Named (id, _, visOuter, m), _) -> LongIdentWithDots([id], []), visOuter - | p -> raiseParseErrorAt mWholeBindLhs (FSComp.SR.parsInvalidDeclarationSyntax()) + | SynPat.Named (_, id, _, visOuter, m) -> LongIdentWithDots([id], []), visOuter + | p -> raiseParseErrorAt mBindLhs (FSComp.SR.parsInvalidDeclarationSyntax()) // Merge the visibility from the outer point with the inner point, e.g. // member this.Size with get () = m_size @@ -1876,7 +1845,7 @@ memberCore: | None, None -> None | Some lidVisInner, None | None, Some lidVisInner -> Some lidVisInner | Some _, Some _ -> - errorR(Error(FSComp.SR.parsMultipleAccessibilitiesForGetSet(), mWholeBindLhs)) + errorR(Error(FSComp.SR.parsMultipleAccessibilitiesForGetSet(), mBindLhs)) lidVisInner // Replace the "get" or the "set" with the right name @@ -1900,16 +1869,15 @@ memberCore: args // let idTool : Ident list = lidOuter |> List.map (fun (li:Ident) -> ident(li.idText, id.idRange)) |> List.rev |> List.take 1 SynPat.LongIdent (lidOuter, Some(id), tyargs, SynArgPats.Pats args, mergeLidVisOuter lidVisInner, m) - | SynPat.Named (nm, _, lidVisInner, m) - | SynPat.As (_, SynPat.Named (nm, _, lidVisInner, m), _) -> SynPat.LongIdent (lidOuter, None, None, SynArgPats.Pats [], mergeLidVisOuter lidVisInner, m) + | SynPat.Named (_, nm, _, lidVisInner, m) -> SynPat.LongIdent (lidOuter, None, None, SynArgPats.Pats [], mergeLidVisOuter lidVisInner, m) | SynPat.Typed (p, ty, m) -> SynPat.Typed(go p, ty, m) | SynPat.Attrib (p, attribs, m) -> SynPat.Attrib(go p, attribs, m) | SynPat.Wild(m) -> SynPat.Wild(m) - | _ -> raiseParseErrorAt mWholeBindLhs (FSComp.SR.parsInvalidDeclarationSyntax()) + | _ -> raiseParseErrorAt mBindLhs (FSComp.SR.parsInvalidDeclarationSyntax()) go pv, PreXmlDoc.Merge doc2 doc - let binding = SynBinding (vis, SynBindingKind.Normal, isInline, isMutable, attrs, xmlDocAdjusted, valSynData, bindingPatAdjusted, rhsRetInfo, rhsExpr, mWholeBindLhs, spBind) + let binding = Binding (vis, NormalBinding, isInline, isMutable, attrs, xmlDocAdjusted, valSynData, bindingPatAdjusted, rhsRetInfo, rhsExpr, mBindLhs, spBind) let memberRange = unionRanges rangeStart mWhole Some (SynMemberDefn.Member (binding, memberRange)))) } @@ -1951,14 +1919,14 @@ classDefnMember: { let ty, arity = $8 let isInline, doc, id, explicitValTyparDecls = $4, grabXmlDoc(parseState, 3), $5, $6 let getSetRangeOpt, getSet = $9 - let getSetAdjuster arity = match arity, getSet with SynValInfo([], _), SynMemberKind.Member -> SynMemberKind.PropertyGet | _ -> getSet + let getSetAdjuster arity = match arity, getSet with SynValInfo([], _), MemberKind.Member -> MemberKind.PropertyGet | _ -> getSet let wholeRange = let m = rhs parseState 1 match getSetRangeOpt with | None -> unionRanges m ty.Range | Some m2 -> unionRanges m m2 if Option.isSome $2 then errorR(Error(FSComp.SR.parsAccessibilityModsIllegalForAbstract(), wholeRange)) - let valSpfn = SynValSig($1, id, explicitValTyparDecls, ty, arity, isInline, false, doc, None, None, 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 @@ -1984,15 +1952,14 @@ classDefnMember: $4 $1 isStatic flags rangeStart } | opt_attributes opt_declVisibility NEW atomicPattern optAsSpec EQUALS typedSeqExprBlock opt_ODECLEND - { let mWholeBindLhs = rhs2 parseState 1 (if Option.isSome $5 then 5 else 4) - let m = unionRanges mWholeBindLhs $7.Range + { let m = unionRanges (rhs2 parseState 1 6) $7.Range let expr = $7 let valSynData = SynValData (Some CtorMemberFlags, SynValInfo([SynInfo.InferSynArgInfoFromPat $4], SynInfo.unnamedRetVal), $5) let vis = $2 let declPat = SynPat.LongIdent (LongIdentWithDots([mkSynId (rhs parseState 3) "new"], []), None, Some noInferredTypars, SynArgPats.Pats [$4], vis, rhs parseState 3) // Check that 'SynPatForConstructorDecl' matches this correctly assert (match declPat with SynPatForConstructorDecl _ -> true | _ -> false) - [ SynMemberDefn.Member(SynBinding (None, SynBindingKind.Normal, false, false, $1, grabXmlDoc(parseState, 3), valSynData, declPat, None, expr, mWholeBindLhs, DebugPointAtBinding.NoneAtInvisible), m) ] } + [ SynMemberDefn.Member(Binding (None, NormalBinding, false, false, $1, grabXmlDoc(parseState, 3), valSynData, declPat, None, expr, m, NoDebugPointAtInvisibleBinding), m) ] } | opt_attributes opt_declVisibility STATIC typeKeyword tyconDefn { if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(), rhs parseState 2)) @@ -2007,7 +1974,7 @@ valDefnDecl: let mValDecl = rhs2 parseState 1 6 (fun rangeStart attribs isStatic -> let mValDecl = unionRanges rangeStart mValDecl - let fld = SynField(attribs, isStatic, Some $4, $6, $2, doc, $3, mRhs) + let fld = Field(attribs, isStatic, Some $4, $6, $2, doc, $3, mRhs) [ SynMemberDefn.ValField(fld, mValDecl) ]) } @@ -2213,7 +2180,7 @@ tyconDefnOrSpfnSimpleRepr: SynTypeDefnSimpleRepr.Enum ($3 |> List.choose (function | Choice1Of2 data -> Some(data) - | Choice2Of2(SynUnionCase(_, _, _, _, _, m)) -> + | Choice2Of2(UnionCase(_, _, _, _, _, m)) -> errorR(Error(FSComp.SR.parsAllEnumFieldsRequireValues(), m)); None), mWhole) ) else @@ -2227,14 +2194,11 @@ tyconDefnOrSpfnSimpleRepr: SynTypeDefnSimpleRepr.Record ($2, $3, lhs parseState) } /* An inline-assembly type definition, for FSharp.Core library only */ - | opt_attributes opt_declVisibility LPAREN HASH string HASH rparen + | opt_attributes opt_declVisibility LPAREN inlineAssemblyTyconRepr rparen { if not (isNil $1) then errorR(Error(FSComp.SR.parsAttributesIllegalHere(), rhs parseState 1)) - let lhsm = lhs parseState - if parseState.LexBuffer.ReportLibraryOnlyFeatures then libraryOnlyError lhsm + libraryOnlyError (lhs parseState) if Option.isSome $2 then errorR(Error(FSComp.SR.parsInlineAssemblyCannotHaveVisibilityDeclarations(), rhs parseState 2)) - let s, _ = $5 - let ilType = ParseAssemblyCodeType s parseState.LexBuffer.ReportLibraryOnlyFeatures parseState.LexBuffer.SupportsFeature (rhs parseState 5) - SynTypeDefnSimpleRepr.LibraryOnlyILAssembly (box ilType, lhsm) } + $4 } /* The core of a record type definition */ @@ -2267,15 +2231,21 @@ braceBarFieldDeclListCore: | LBRACE_BAR error bar_rbrace { [] } +inlineAssemblyTyconRepr: + | HASH stringOrKeywordString HASH + { libraryOnlyError (lhs parseState) + let lhsm = lhs parseState + SynTypeDefnSimpleRepr.LibraryOnlyILAssembly (internalParseAssemblyCodeType $2 parseState.LexBuffer.SupportsFeature (rhs parseState 2), lhsm) } + classOrInterfaceOrStruct: | CLASS - { SynTypeDefnKind.Class } + { TyconClass } | INTERFACE - { SynTypeDefnKind.Interface } + { TyconInterface } | STRUCT - { SynTypeDefnKind.Struct } + { TyconStruct } interfaceMember: | INTERFACE { } @@ -2283,20 +2253,18 @@ interfaceMember: tyconNameAndTyparDecls: | opt_access path - { None, $2.Lid, false, $1, grabXmlDoc(parseState, 2) } + { [], $2.Lid, false, [], $1, grabXmlDoc(parseState, 2) } | opt_access prefixTyparDecls path - { Some $2, $3.Lid, false, $1, grabXmlDoc(parseState, 2) } + { $2, $3.Lid, false, [], $1, grabXmlDoc(parseState, 2) } | opt_access path postfixTyparDecls - { Some $3, $2.Lid, true, $1, grabXmlDoc(parseState, 2) } + { let tps, tpcs = $3 + tps, $2.Lid, true, tpcs, $1, grabXmlDoc(parseState, 2) } prefixTyparDecls: - | typar - { SynTyparDecls.SinglePrefix (SynTyparDecl([], $1), rhs parseState 1) } - - | LPAREN typarDeclList rparen - { SynTyparDecls.PrefixList (List.rev $2, rhs2 parseState 1 3) } + | typar { [ TyparDecl([], $1) ] } + | LPAREN typarDeclList rparen { List.rev $2 } typarDeclList: | typarDeclList COMMA typarDecl { $3 :: $1 } @@ -2304,15 +2272,14 @@ typarDeclList: typarDecl : | opt_attributes typar - { SynTyparDecl($1, $2) } + { TyparDecl($1, $2) } /* Any tokens in this grammar must be added to the lex filter rule 'peekAdjacentTypars' */ /* See the F# specification "Lexical analysis of type applications and type parameter definitions" */ postfixTyparDecls: | opt_HIGH_PRECEDENCE_TYAPP LESS typarDeclList opt_typeConstraints GREATER - { let m = rhs2 parseState 2 5 - if not $2 then warning(Error(FSComp.SR.parsNonAdjacentTypars(), m)) - SynTyparDecls.PostfixList (List.rev $3, $4, m) } + { 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' */ /* See the F# specification "Lexical analysis of type applications and type parameter definitions" */ @@ -2328,17 +2295,15 @@ explicitValTyparDeclsCore: explicitValTyparDecls: | opt_HIGH_PRECEDENCE_TYAPP LESS explicitValTyparDeclsCore opt_typeConstraints GREATER - { let m = rhs2 parseState 2 5 - if not $2 then warning(Error(FSComp.SR.parsNonAdjacentTypars(), m)) + { if not $2 then warning(Error(FSComp.SR.parsNonAdjacentTypars(), rhs2 parseState 2 5)) let tps, flex = $3 - let tps = SynTyparDecls.PostfixList (tps, $4, m) - SynValTyparDecls(Some tps, flex) } + SynValTyparDecls(tps, flex, $4) } opt_explicitValTyparDecls: | explicitValTyparDecls { $1 } | - { SynValTyparDecls(None, true) } + { SynValTyparDecls([], true, []) } opt_explicitValTyparDecls2: | explicitValTyparDecls @@ -2369,45 +2334,41 @@ typeConstraints: /* See the F# specification "Lexical analysis of type applications and type parameter definitions" */ typeConstraint: | DEFAULT typar COLON typ - { if parseState.LexBuffer.ReportLibraryOnlyFeatures then libraryOnlyError (lhs parseState) - SynTypeConstraint.WhereTyparDefaultsToType($2, $4, lhs parseState) } + { libraryOnlyError (lhs parseState); WhereTyparDefaultsToType($2, $4, lhs parseState) } | typar COLON_GREATER typ - { SynTypeConstraint.WhereTyparSubtypeOfType($1, $3, lhs parseState) } + { WhereTyparSubtypeOfType($1, $3, lhs parseState) } | typar COLON STRUCT - { SynTypeConstraint.WhereTyparIsValueType($1, lhs parseState) } + { WhereTyparIsValueType($1, lhs parseState) } | typar COLON IDENT STRUCT { if $3 <> "not" then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedIdentifier($3)) - SynTypeConstraint.WhereTyparIsReferenceType($1, lhs parseState) } + WhereTyparIsReferenceType($1, lhs parseState) } | typar COLON NULL - { SynTypeConstraint.WhereTyparSupportsNull($1, lhs parseState) } + { WhereTyparSupportsNull($1, lhs parseState) } | typar COLON LPAREN classMemberSpfn rparen { let tp = $1 - SynTypeConstraint.WhereTyparSupportsMember([ SynType.Var(tp, tp.Range) ], $4, lhs parseState) } + WhereTyparSupportsMember([ SynType.Var(tp, tp.Range) ], $4, lhs parseState) } | LPAREN typarAlts rparen COLON LPAREN classMemberSpfn rparen - { SynTypeConstraint.WhereTyparSupportsMember(List.rev($2), $6, lhs parseState) } + { WhereTyparSupportsMember(List.rev($2), $6, lhs parseState) } | typar COLON DELEGATE typeArgsNoHpaDeprecated - { let _ltm, _gtm, args, _commas, mWhole = $4 - SynTypeConstraint.WhereTyparIsDelegate($1, args, unionRanges $1.Range mWhole) } + { let _ltm, _gtm, args, _commas, mWhole = $4 in WhereTyparIsDelegate($1, args, unionRanges $1.Range mWhole) } | typar COLON IDENT typeArgsNoHpaDeprecated { match $3 with - | "enum" -> - let _ltm, _gtm, args, _commas, mWhole = $4 - SynTypeConstraint.WhereTyparIsEnum($1, args, unionRanges $1.Range mWhole) + | "enum" -> let _ltm, _gtm, args, _commas, mWhole = $4 in WhereTyparIsEnum($1, args, unionRanges $1.Range mWhole) | nm -> raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedIdentifier(nm)) } | typar COLON IDENT { match $3 with - | "comparison" -> SynTypeConstraint.WhereTyparIsComparable($1, lhs parseState) - | "equality" -> SynTypeConstraint.WhereTyparIsEquatable($1, lhs parseState) - | "unmanaged" -> SynTypeConstraint.WhereTyparIsUnmanaged($1, lhs parseState) + | "comparison" -> WhereTyparIsComparable($1, lhs parseState) + | "equality" -> WhereTyparIsEquatable($1, lhs parseState) + | "unmanaged" -> WhereTyparIsUnmanaged($1, lhs parseState) | nm -> raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedIdentifier(nm)) } typarAlts: @@ -2442,32 +2403,27 @@ attrUnionCaseDecls: { (fun xmlDoc -> [ $1 xmlDoc ]) } /* The core of a union case definition */ -attrUnionCaseDecl: - | opt_attributes opt_access unionCaseName +attrUnionCaseDecl: + | opt_attributes opt_access unionCaseName opt_OBLOCKSEP { if Option.isSome $2 then errorR(Error(FSComp.SR.parsUnionCasesCannotHaveVisibilityDeclarations(), rhs parseState 2)) let mDecl = rhs parseState 3 - (fun xmlDoc -> Choice2Of2 (SynUnionCase ( $1, $3, SynUnionCaseKind.Fields [], xmlDoc, None, mDecl))) } + (fun xmlDoc -> Choice2Of2 (UnionCase ( $1, $3, UnionCaseFields [], xmlDoc, None, mDecl))) } - | opt_attributes opt_access unionCaseName OF unionCaseRepr + | opt_attributes opt_access unionCaseName OF unionCaseRepr opt_OBLOCKSEP { if Option.isSome $2 then errorR(Error(FSComp.SR.parsUnionCasesCannotHaveVisibilityDeclarations(), rhs parseState 2)) let mDecl = rhs2 parseState 1 5 - (fun xmlDoc -> Choice2Of2 (SynUnionCase ( $1, $3, SynUnionCaseKind.Fields $5, xmlDoc, None, mDecl))) } + (fun xmlDoc -> Choice2Of2 (UnionCase ( $1, $3, UnionCaseFields $5, xmlDoc, None, mDecl))) } - | opt_attributes opt_access unionCaseName OF recover + | opt_attributes opt_access unionCaseName COLON topType opt_OBLOCKSEP { if Option.isSome $2 then errorR(Error(FSComp.SR.parsUnionCasesCannotHaveVisibilityDeclarations(), rhs parseState 2)) - let mDecl = rhs2 parseState 1 4 - (fun xmlDoc -> Choice2Of2 (SynUnionCase ( $1, $3, SynUnionCaseKind.Fields [], xmlDoc, None, mDecl))) } - - | opt_attributes opt_access unionCaseName COLON topType - { if Option.isSome $2 then errorR(Error(FSComp.SR.parsUnionCasesCannotHaveVisibilityDeclarations(), rhs parseState 2)) - if parseState.LexBuffer.ReportLibraryOnlyFeatures then libraryOnlyWarning(lhs parseState) + libraryOnlyWarning(lhs parseState) let mDecl = rhs2 parseState 1 5 - (fun xmlDoc -> Choice2Of2 (SynUnionCase ( $1, $3, SynUnionCaseKind.FullType $5, xmlDoc, None, mDecl))) } + (fun xmlDoc -> Choice2Of2 (UnionCase ( $1, $3, UnionCaseFullType $5, xmlDoc, None, mDecl))) } - | opt_attributes opt_access unionCaseName EQUALS constant + | opt_attributes opt_access unionCaseName EQUALS constant opt_OBLOCKSEP { if Option.isSome $2 then errorR(Error(FSComp.SR.parsEnumFieldsCannotHaveVisibilityDeclarations(), rhs parseState 2)) let mDecl = rhs2 parseState 1 5 - (fun xmlDoc -> Choice1Of2 (SynEnumCase ( $1, $3, fst $5, snd $5, xmlDoc, mDecl))) } + (fun xmlDoc -> Choice1Of2 (EnumCase ( $1, $3, $5, xmlDoc, mDecl))) } /* The name of a union case */ unionCaseName: @@ -2482,20 +2438,20 @@ unionCaseName: firstUnionCaseDeclOfMany: | ident opt_OBLOCKSEP - { Choice2Of2 (SynUnionCase ( [], $1, SynUnionCaseKind.Fields [], PreXmlDoc.Empty, None, rhs parseState 1)) } + { Choice2Of2 (UnionCase ( [], $1, UnionCaseFields [], PreXmlDoc.Empty, None, rhs parseState 1)) } | ident EQUALS constant opt_OBLOCKSEP - { Choice1Of2 (SynEnumCase ([], $1, fst $3, snd $3, PreXmlDoc.Empty, rhs2 parseState 1 3)) } + { Choice1Of2 (EnumCase ([], $1, $3, PreXmlDoc.Empty, rhs2 parseState 1 3)) } | firstUnionCaseDecl opt_OBLOCKSEP { $1 } firstUnionCaseDecl: | ident OF unionCaseRepr - { Choice2Of2 (SynUnionCase ( [], $1, SynUnionCaseKind.Fields $3, PreXmlDoc.Empty, None, rhs2 parseState 1 3)) } + { Choice2Of2 (UnionCase ( [], $1, UnionCaseFields $3, PreXmlDoc.Empty, None, rhs2 parseState 1 3)) } | ident EQUALS constant opt_OBLOCKSEP - { Choice1Of2 (SynEnumCase ([], $1, fst $3, snd $3, PreXmlDoc.Empty, rhs2 parseState 1 3)) } + { Choice1Of2 (EnumCase ([], $1, $3, PreXmlDoc.Empty, rhs2 parseState 1 3)) } unionCaseReprElements: | unionCaseReprElement STAR unionCaseReprElements @@ -2507,10 +2463,10 @@ unionCaseReprElements: unionCaseReprElement: | ident COLON appType { let wholeRange = rhs2 parseState 1 3 - mkSynNamedField($1, $3, wholeRange) } + mkNamedField($1, $3, wholeRange) } | appType - { mkSynAnonField $1 } + { mkAnonField $1 } unionCaseRepr: | braceFieldDeclList @@ -2533,15 +2489,15 @@ recdFieldDecl: | opt_attributes fieldDecl { let wholeRange = rhs2 parseState 1 2 let fld = $2 $1 false wholeRange - let (SynField (a, b, c, d, e, f, vis, wholeRange)) = fld + let (Field (a, b, c, d, e, f, vis, wholeRange)) = fld if Option.isSome vis then errorR (Error (FSComp.SR.parsRecordFieldsCannotHaveVisibilityDeclarations (), rhs parseState 2)) - SynField (a, b, c, d, e, f, None, wholeRange) } + Field (a, b, c, d, e, f, None, wholeRange) } /* Part of a field or val declaration in a record type or object type */ fieldDecl: | opt_mutable opt_access ident COLON typ { let xmlDoc = grabXmlDoc (parseState, 3) - fun attrs stat wholeRange -> SynField(attrs, stat, Some $3, $5, $1, xmlDoc, $2, wholeRange) } + fun attrs stat wholeRange -> Field(attrs, stat, Some $3, $5, $1, xmlDoc, $2, wholeRange) } /* An exception definition */ exconDefn: @@ -2559,15 +2515,12 @@ exconCore: { SynExceptionDefnRepr($2, $4, $5, $1, $3, (match $5 with None -> rhs2 parseState 1 4 | Some p -> unionRanges (rangeOfLongIdent p) (rhs2 parseState 1 4))) } /* Part of an exception definition */ -exconIntro: - | ident - { SynUnionCase([], $1, SynUnionCaseKind.Fields [], PreXmlDoc.Empty, None, lhs parseState) } +exconIntro: + | ident + { UnionCase([], $1, UnionCaseFields [], PreXmlDoc.Empty, None, lhs parseState) } - | ident OF unionCaseRepr - { SynUnionCase([], $1, SynUnionCaseKind.Fields $3, PreXmlDoc.Empty, None, lhs parseState) } - - | ident OF recover - { SynUnionCase([], $1, SynUnionCaseKind.Fields [], PreXmlDoc.Empty, None, lhs parseState) } + | ident OF unionCaseRepr + { UnionCase([], $1, UnionCaseFields $3, PreXmlDoc.Empty, None, lhs parseState) } exconRepr: | /* EMPTY */ @@ -2649,7 +2602,7 @@ hardwhiteDoBinding: | ODO typedSeqExprBlock hardwhiteDefnBindingsTerminator { let mLetKwd = rhs parseState 1 let bindingSetRange = unionRanges mLetKwd $2.Range - let seqPt = DebugPointAtBinding.NoneAtDo + let seqPt = NoDebugPointAtDoBinding // any attributes prior to the 'let' are left free, e.g. become top-level attributes // associated with the module, 'main' function or assembly depending on their target BindingSetPreAttrs(mLetKwd, false, false, (fun attrs vis -> attrs, [mkSynDoBinding (vis, true, $2, bindingSetRange)]), bindingSetRange), $2 } @@ -2698,14 +2651,13 @@ cPrototype: let rhsExpr = SynExpr.App (ExprAtomicFlag.NonAtomic, false, SynExpr.Ident (ident("failwith", rhs parseState 6)), - SynExpr.Const (SynConst.String("extern was not given a DllImport attribute", SynStringKind.Regular, rhs parseState 8), rhs parseState 8), + SynExpr.Const (SynConst.String("extern was not given a DllImport attribute", rhs parseState 8), rhs parseState 8), mRhs) (fun attrs _ -> let bindingId = SynPat.LongIdent (LongIdentWithDots([nm], []), None, Some noInferredTypars, SynArgPats.Pats [SynPat.Tuple(false, args, argsm)], vis, nmm) - let mWholeBindLhs = (mBindLhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) let binding = mkSynBinding (xmlDoc, bindingId) - (vis, false, false, mWholeBindLhs, DebugPointAtBinding.NoneAtInvisible, Some rty, rhsExpr, mRhs, [], attrs, None) + (vis, false, false, mBindLhs, NoDebugPointAtInvisibleBinding, Some rty, rhsExpr, mRhs, [], attrs, None) [], [binding]) } /* A list of arguments in an 'extern' DllImport function definition */ @@ -2734,7 +2686,7 @@ cArg: { let m = lhs parseState in SynPat.Typed(SynPat.Wild m, $2, m) |> addAttribs $1 } | opt_attributes cType ident - { let m = lhs parseState in SynPat.Typed(SynPat.Named ($3, false, None, m), $2, m) |> addAttribs $1 } + { let m = lhs parseState in SynPat.Typed(SynPat.Named (SynPat.Wild m, $3, false, None, m), $2, m) |> addAttribs $1 } /* An type in an 'extern' DllImport function definition */ cType: @@ -2818,10 +2770,9 @@ localBinding: let localBindingRange = unionRanges (rhs2 parseState 1 5) mRhs let localBindingBuilder = (fun attrs vis mLetKwd -> - let mWhole = (unionRanges mLetKwd mRhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) - let spBind = if IsControlFlowExpression expr then DebugPointAtBinding.NoneAtLet else DebugPointAtBinding.Yes mWhole - let mWholeBindLhs = (mBindLhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) - bindingBuilder (vis, $1, $2, mWholeBindLhs, spBind, optReturnType, expr, mRhs, opts, attrs, None)) + let mWhole = unionRanges mLetKwd mRhs + let spBind = if IsControlFlowExpression expr then NoDebugPointAtLetBinding else DebugPointAtBinding mWhole + bindingBuilder (vis, $1, $2, mBindLhs, spBind, optReturnType, expr, mRhs, opts, attrs, None)) localBindingRange, localBindingBuilder } | opt_inline opt_mutable bindingPattern opt_topReturnTypeWithTypeConstraints EQUALS error @@ -2831,7 +2782,7 @@ localBinding: let bindingBuilder, mBindLhs = $3 let localBindingBuilder = (fun attrs vis mLetKwd -> - let spBind = DebugPointAtBinding.Yes (unionRanges mLetKwd mRhs) + let spBind = DebugPointAtBinding (unionRanges mLetKwd mRhs) let eqm = rhs parseState 5 let zeroWidthAtEnd = eqm.EndRange bindingBuilder (vis, $1, $2, mBindLhs, spBind, optReturnType, arbExpr("localBinding1", zeroWidthAtEnd), mRhs, [], attrs, None)) @@ -2845,7 +2796,7 @@ localBinding: let bindingBuilder, mBindLhs = $3 let localBindingBuilder = (fun attrs vis mLetKwd -> - let spBind = DebugPointAtBinding.Yes (unionRanges mLetKwd mRhs) + let spBind = DebugPointAtBinding (unionRanges mLetKwd mRhs) bindingBuilder (vis, $1, $2, mBindLhs, spBind, optReturnType, arbExpr("localBinding2", mRhs), mRhs, [], attrs, None)) mWhole, localBindingBuilder } @@ -2887,10 +2838,10 @@ staticOptimizationConditions: staticOptimizationCondition: | typar COLON typ - { SynStaticOptimizationConstraint.WhenTyparTyconEqualsTycon($1, $3, lhs parseState) } + { WhenTyparTyconEqualsTycon($1, $3, lhs parseState) } | typar STRUCT - { SynStaticOptimizationConstraint.WhenTyparIsStruct($1, lhs parseState) } + { WhenTyparIsStruct($1, lhs parseState) } rawConstant: | INT8 @@ -2943,17 +2894,11 @@ rawConstant: | BIGNUM { SynConst.UserNum $1 } - | string - { let s, synStringKind = $1 - SynConst.String (s, synStringKind, lhs parseState) } - - | sourceIdentifier - { let c,v = $1 - SynConst.SourceIdentifier (c, v, lhs parseState) } + | stringOrKeywordString + { SynConst.String ($1, lhs parseState) } | BYTEARRAY - { let (v, synByteStringKind, _) = $1 - SynConst.Bytes (v, synByteStringKind, lhs parseState) } + { SynConst.Bytes (fst $1, lhs parseState) } rationalConstant: | INT32 INFIX_STAR_DIV_MOD_OP INT32 @@ -2991,10 +2936,10 @@ atomicRationalConstant: constant: | rawConstant - { $1, rhs parseState 1 } + { $1 } | rawConstant HIGH_PRECEDENCE_TYAPP measureTypeArg - { SynConst.Measure($1, rhs parseState 1, $3), lhs parseState } + { SynConst.Measure($1, $3) } bindingPattern: | headBindingPattern @@ -3012,7 +2957,7 @@ bindingPattern: simplePattern: | ident { let m = rhs parseState 1 - SynPat.Named($1, false, None, m) } + SynPat.Named(SynPat.Wild m, $1, false, None, m) } | QMARK ident { SynPat.OptionalVal($2, rhs parseState 2) } @@ -3062,8 +3007,8 @@ simplePatterns: headBindingPattern: - | headBindingPattern AS constrPattern - { SynPat.As($1, $3, rhs2 parseState 1 3) } + | headBindingPattern AS ident + { SynPat.Named ($1, $3, false, None, rhs2 parseState 1 3) } | headBindingPattern BAR headBindingPattern { SynPat.Or($1, $3, rhs2 parseState 1 3) } @@ -3176,7 +3121,7 @@ atomicPattern: else mkSynPatVar vis (List.head lidwd.Lid) } | constant - { SynPat.Const (fst $1, snd $1) } + { SynPat.Const ($1, $1.Range (lhs parseState)) } | FALSE { SynPat.Const(SynConst.Bool false, lhs parseState) } @@ -3244,13 +3189,13 @@ parenPatternBody: /* whole pattern to the left, whereas ': t' binds only the pattern */ /* immediately preceding in the tuple. */ /* */ -/* Also, it is unexpected that '(a, b : t)' in a pattern (a, (b : 't)) binds differently to */ -/* '(a, b : t)' in an expression ((a, b) : 't). It's not that easy to solve that without */ +/* Also, it is unexpected that '(a, b : t)' in a pattern binds differently to */ +/* '(a, b : t)' in an expression. It's not that easy to solve that without */ /* duplicating the entire expression grammar, or making a fairly severe breaking change */ /* to the language. */ parenPattern: - | parenPattern AS constrPattern - { SynPat.As($1, $3, rhs2 parseState 1 3) } + | parenPattern AS ident + { SynPat.Named ($1, $3, false, None, rhs2 parseState 1 3) } | parenPattern BAR parenPattern { SynPat.Or($1, $3, rhs2 parseState 1 3) } @@ -3385,13 +3330,13 @@ recover: moreBinders: | AND_BANG headBindingPattern EQUALS typedSeqExprBlock IN moreBinders %prec expr_let - { let spBind = DebugPointAtBinding.Yes(rhs2 parseState 1 5) (* TODO Pretty sure this is wrong *) + { let spBind = DebugPointAtBinding(rhs2 parseState 1 5) (* TODO Pretty sure this is wrong *) let m = rhs parseState 1 (* TODO Pretty sure this is wrong *) (spBind, $1, true, $2, $4, m) :: $6 } | OAND_BANG headBindingPattern EQUALS typedSeqExprBlock hardwhiteDefnBindingsTerminator opt_OBLOCKSEP moreBinders %prec expr_let { $5 "and!" (rhs parseState 1) // report unterminated error - let spBind = DebugPointAtBinding.Yes(rhs2 parseState 1 5) (* TODO Pretty sure this is wrong *) + let spBind = DebugPointAtBinding(rhs2 parseState 1 5) (* TODO Pretty sure this is wrong *) let m = rhs parseState 1 (* TODO Pretty sure this is wrong *) (spBind, $1, true, $2, $4, m) :: $7 } @@ -3439,7 +3384,7 @@ declExpr: | MATCH typedSeqExpr withClauses %prec expr_match { let mMatch = (rhs parseState 1) let mWith, (clauses, mLast) = $3 - let spBind = DebugPointAtBinding.Yes(unionRanges mMatch mWith) + let spBind = DebugPointAtBinding(unionRanges mMatch mWith) SynExpr.Match (spBind, $2, clauses, unionRanges mMatch mLast) } | MATCH typedSeqExpr recover %prec expr_match @@ -3450,7 +3395,7 @@ declExpr: | MATCH_BANG typedSeqExpr withClauses %prec expr_match { let mMatch = (rhs parseState 1) let mWith, (clauses, mLast) = $3 - let spBind = DebugPointAtBinding.Yes(unionRanges mMatch mWith) + let spBind = DebugPointAtBinding(unionRanges mMatch mWith) SynExpr.MatchBang (spBind, $2, clauses, unionRanges mMatch mLast) } | MATCH_BANG typedSeqExpr recover %prec expr_match @@ -3499,7 +3444,7 @@ declExpr: // for this pathological case. let m = rhs parseState 1 let mEnd = m.EndRange - let spIfToThen = DebugPointAtBinding.Yes mEnd + let spIfToThen = DebugPointAtBinding mEnd exprFromParseError (SynExpr.IfThenElse (arbExpr("ifGuard1", mEnd), arbExpr("thenBody1", mEnd), None, spIfToThen, true, m, m)) } | LAZY declExpr %prec expr_lazy @@ -3688,25 +3633,25 @@ declExpr: SynExpr.YieldOrReturnFrom (($1, not $1), arbExpr("yield!", mYieldAll), mYieldAll) } | BINDER headBindingPattern EQUALS typedSeqExprBlock IN opt_OBLOCKSEP moreBinders typedSeqExprBlock %prec expr_let - { let spBind = DebugPointAtBinding.Yes(rhs2 parseState 1 5) + { let spBind = DebugPointAtBinding(rhs2 parseState 1 5) let m = unionRanges (rhs parseState 1) $8.Range SynExpr.LetOrUseBang(spBind, ($1 = "use"), true, $2, $4, $7, $8, m) } | OBINDER headBindingPattern EQUALS typedSeqExprBlock hardwhiteDefnBindingsTerminator opt_OBLOCKSEP moreBinders typedSeqExprBlock %prec expr_let { $5 (if $1 = "use" then "use!" else "let!") (rhs parseState 1) // report unterminated error - let spBind = DebugPointAtBinding.Yes(unionRanges (rhs parseState 1) $4.Range) + let spBind = DebugPointAtBinding(unionRanges (rhs parseState 1) $4.Range) let m = unionRanges (rhs parseState 1) $8.Range SynExpr.LetOrUseBang(spBind, ($1 = "use"), true, $2, $4, $7, $8, m) } | OBINDER headBindingPattern EQUALS typedSeqExprBlock hardwhiteDefnBindingsTerminator opt_OBLOCKSEP error %prec expr_let { // error recovery that allows intellisense when writing incomplete computation expressions - let spBind = DebugPointAtBinding.Yes(unionRanges (rhs parseState 1) $4.Range) + let spBind = DebugPointAtBinding(unionRanges (rhs parseState 1) $4.Range) let mAll = unionRanges (rhs parseState 1) (rhs parseState 7) let m = $4.Range.EndRange // zero-width range SynExpr.LetOrUseBang(spBind, ($1 = "use"), true, $2, $4, [], SynExpr.ImplicitZero m, mAll) } | DO_BANG typedSeqExpr IN opt_OBLOCKSEP typedSeqExprBlock %prec expr_let - { let spBind = DebugPointAtBinding.NoneAtDo + { let spBind = NoDebugPointAtDoBinding SynExpr.LetOrUseBang(spBind, false, true, SynPat.Const(SynConst.Unit, $2.Range), $2, [], $5, unionRanges (rhs parseState 1) $5.Range) } | ODO_BANG typedSeqExprBlock hardwhiteDefnBindingsTerminator %prec expr_let @@ -3892,7 +3837,7 @@ declExpr: dynamicArg: | IDENT - { let con = SynConst.String ($1, SynStringKind.Regular, rhs parseState 1) + { let con = SynConst.String ($1, rhs parseState 1) let arg2 = SynExpr.Const (con, con.Range (rhs parseState 1)) arg2 } @@ -3936,38 +3881,30 @@ patternClauses: | patternAndGuard patternResult %prec prec_pat_pat_action { let pat, guard, patm = $1 let mLast = $2.Range - let m = unionRanges $2.Range patm - [SynMatchClause(pat, guard, $2, m, DebugPointForTarget.Yes)], mLast } + [Clause(pat, guard, $2, patm, DebugPointForTarget.Yes)], mLast } | patternAndGuard patternResult BAR patternClauses { let pat, guard, patm = $1 - let clauses, mLast = $4 - let m = unionRanges $2.Range patm - (SynMatchClause(pat, guard, $2, m, DebugPointForTarget.Yes) :: clauses), mLast } + let clauses, mLast = $4 + (Clause(pat, guard, $2, patm, DebugPointForTarget.Yes) :: clauses), mLast } | patternAndGuard patternResult BAR error { let pat, guard, patm = $1 let mLast = rhs parseState 3 - let m = unionRanges $2.Range patm - // silent recovery - [SynMatchClause(pat, guard, $2, m, DebugPointForTarget.Yes)], mLast } + // silent recovery + [Clause(pat, guard, $2, patm, DebugPointForTarget.Yes)], mLast } | patternAndGuard patternResult error { let pat, guard, patm = $1 - let mLast = $2.Range - let m = unionRanges $2.Range patm + let mLast = $2.Range // silent recovery - [SynMatchClause(pat, guard, $2, m, DebugPointForTarget.Yes)], mLast } + [Clause(pat, guard, $2, patm, DebugPointForTarget.Yes)], mLast } | patternAndGuard error { let pat, guard, patm = $1 let mLast = rhs parseState 2 - let m = - match guard with - | Some e -> unionRanges patm e.Range - | _ -> patm // silent recovery - [SynMatchClause(pat, guard, SynExpr.Const (SynConst.Unit, mLast.EndRange), m, DebugPointForTarget.Yes)], mLast } + [Clause(pat, guard, SynExpr.Const (SynConst.Unit, mLast.EndRange), patm, DebugPointForTarget.Yes)], mLast } patternGuard: | WHEN declExpr @@ -3987,7 +3924,7 @@ ifExprCases: let mIfToThen = unionRanges mIf mThen let lastBranch : SynExpr = match $2 with None -> exprThen | Some e -> e let mIfToEndOfLastBranch = unionRanges mIf lastBranch.Range - let spIfToThen = DebugPointAtBinding.Yes(mIfToThen) + let spIfToThen = DebugPointAtBinding(mIfToThen) SynExpr.IfThenElse (exprGuard, exprThen, $2, spIfToThen, false, mIfToThen, mIfToEndOfLastBranch)) } ifExprThen: @@ -4159,16 +4096,12 @@ atomicExpr: // silent recovery exprFromParseError (SynExpr.ArrayOrList (false, [ ], rhs parseState 1)), false } - | STRUCT LPAREN tupleExpr rparen - { let exprs, commas = $3 - let m = rhs2 parseState 1 4 - SynExpr.Tuple (true, List.rev exprs, List.rev commas, m), false } + | STRUCT LPAREN tupleExpr rparen + { let exprs, commas = $3 in SynExpr.Tuple (true, 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 - let m = (rhs parseState 1, exprs) ||> unionRangeWithListBy (fun e -> e.Range) - SynExpr.Tuple (true, List.rev exprs, List.rev commas, m), false } + | STRUCT LPAREN tupleExpr recover + { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnmatchedBracket()); + let exprs, commas = $3 in SynExpr.Tuple (true, List.rev exprs, List.rev commas, (commas.Head, exprs) ||> unionRangeWithListBy (fun e -> e.Range) ), false } | atomicExprAfterType { $1, false } @@ -4197,7 +4130,7 @@ atomicExprQualification: SynExpr.DiscardAfterMissingQualificationAfterDot (e, fixedLhsm)) } | LPAREN COLON_COLON rparen DOT INT32 { (fun e lhsm dotm -> - if parseState.LexBuffer.ReportLibraryOnlyFeatures then libraryOnlyError(lhs parseState) + libraryOnlyError(lhs parseState) SynExpr.LibraryOnlyUnionCaseFieldGet (e, mkSynCaseName lhsm opNameCons, (fst $5), lhsm)) } | LPAREN typedSeqExpr rparen @@ -4287,7 +4220,7 @@ rangeDeclExpr: /* the start of atomicExprAfterType must not overlap with the valid postfix tokens of the type syntax, e.g. new List(...) */ atomicExprAfterType: | constant - { SynExpr.Const (fst $1, snd $1) } + { SynExpr.Const ($1, $1.Range (lhs parseState)) } | parenExpr { $1 } @@ -4299,8 +4232,7 @@ atomicExprAfterType: { $1 } | interpolatedString - { let parts, synStringKind = $1 - SynExpr.InterpolatedString(parts, synStringKind, rhs parseState 1) } + { SynExpr.InterpolatedString($1, rhs parseState 1) } | NULL { SynExpr.Null (lhs parseState) } @@ -4543,12 +4475,10 @@ forLoopDirection: | DOWNTO { false } inlineAssemblyExpr: - | HASH string opt_inlineAssemblyTypeArg optCurriedArgExprs optInlineAssemblyReturnTypes HASH - { if parseState.LexBuffer.ReportLibraryOnlyFeatures then libraryOnlyWarning (lhs parseState) - let (s, _), sm = $2, rhs parseState 2 - (fun m -> - let ilInstrs = ParseAssemblyCodeInstructions s parseState.LexBuffer.ReportLibraryOnlyFeatures parseState.LexBuffer.SupportsFeature sm - SynExpr.LibraryOnlyILAssembly (box ilInstrs, $3, List.rev $4, $5, m)) } + | HASH stringOrKeywordString opt_inlineAssemblyTypeArg optCurriedArgExprs optInlineAssemblyReturnTypes HASH + { libraryOnlyWarning (lhs parseState) + let s, sm = $2, rhs parseState 2 + (fun m -> SynExpr.LibraryOnlyILAssembly (internalParseAssemblyCodeInstructions s parseState.LexBuffer.SupportsFeature sm, $3, List.rev $4, $5, m)) } optCurriedArgExprs: | optCurriedArgExprs argExpr %prec expr_args @@ -4776,7 +4706,7 @@ opt_objExprInterfaces: objExprInterface: | interfaceMember appType opt_objExprBindings opt_declEnd opt_OBLOCKSEP - { SynInterfaceImpl($2, $3, lhs parseState) } + { InterfaceImpl($2, $3, lhs parseState) } braceBarExpr: | STRUCT braceBarExprCore @@ -4857,12 +4787,12 @@ anonMatchingExpr: | FUNCTION withPatternClauses %prec expr_function { let clauses, mLast = $2 let mAll = unionRanges (rhs parseState 1) mLast - SynExpr.MatchLambda (false, (rhs parseState 1), clauses, DebugPointAtBinding.NoneAtInvisible, mAll) } + SynExpr.MatchLambda (false, (rhs parseState 1), clauses, NoDebugPointAtInvisibleBinding, mAll) } | OFUNCTION withPatternClauses OEND %prec expr_function { let clauses, mLast = $2 let mAll = unionRanges (rhs parseState 1) mLast - SynExpr.MatchLambda (false, (rhs parseState 1), clauses, DebugPointAtBinding.NoneAtInvisible, mAll) } + SynExpr.MatchLambda (false, (rhs parseState 1), clauses, NoDebugPointAtInvisibleBinding, mAll) } /*--------------------------------------------------------------------------*/ /* TYPE ALGEBRA */ @@ -5015,7 +4945,7 @@ appType: | typar COLON_GREATER typ { let tp, typ = $1, $3 let m = lhs parseState - SynType.WithGlobalConstraints(SynType.Var (tp, rhs parseState 1), [SynTypeConstraint.WhereTyparSubtypeOfType(tp, typ, m)], m) } + SynType.WithGlobalConstraints(SynType.Var (tp, rhs parseState 1), [WhereTyparSubtypeOfType(tp, typ, m)], m) } | UNDERSCORE COLON_GREATER typ %prec COLON_GREATER { SynType.HashConstraint($3, lhs parseState) } @@ -5079,7 +5009,7 @@ atomTypeOrAnonRecdType: { let flds, isStruct = $1 let flds2 = flds |> List.choose (function - | (SynField([], false, Some id, ty, false, _xmldoc, None, _m)) -> Some (id, ty) + | (Field([], false, Some id, ty, false, _xmldoc, None, _m)) -> Some (id, ty) | _ -> reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsInvalidAnonRecdType()); None) SynType.AnonRecd (isStruct, flds2, rhs parseState 1) } @@ -5126,7 +5056,7 @@ atomType: | NULL { let m = rhs parseState 1 - SynType.StaticConstant(SynConst.String (null, SynStringKind.Regular, m), m) } + SynType.StaticConstant(SynConst.String (null, m), m) } | CONST atomicExpr { let e, _ = $2 @@ -5293,7 +5223,7 @@ measureTypeExpr: typar: | QUOTE ident { let id = mkSynId (lhs parseState) ($2).idText - SynTypar(id, TyparStaticReq.None, false) } + Typar(id, NoStaticReq, false) } | staticallyKnownHeadTypar { $1 } @@ -5302,7 +5232,7 @@ staticallyKnownHeadTypar: | INFIX_AT_HAT_OP ident { if $1 <> "^" then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedTypeParameter()); let id = mkSynId (lhs parseState) ($2).idText - SynTypar(id, TyparStaticReq.HeadType, false) } + Typar(id, HeadTypeStaticReq, false) } ident: | IDENT @@ -5581,12 +5511,8 @@ colonOrEquals: | EQUALS { } /* A literal string or a string from a keyword like __SOURCE_FILE__ */ -string: - | STRING - { let (s, synStringKind, _) = $1 - s, synStringKind } - -sourceIdentifier: +stringOrKeywordString: + | STRING { fst $1 } | KEYWORD_STRING { $1 } interpolatedStringFill: @@ -5615,20 +5541,17 @@ interpolatedStringParts: /* INTERP_STRING_BEGIN_PART int32 INTERP_STRING_PART int32 INTERP_STRING_END */ interpolatedString: | INTERP_STRING_BEGIN_PART interpolatedStringFill interpolatedStringParts - { let s, synStringKind, _ = $1 - SynInterpolatedStringPart.String (s, rhs parseState 1) :: SynInterpolatedStringPart.FillExpr $2 :: $3, synStringKind } + { SynInterpolatedStringPart.String (fst $1, rhs parseState 1) :: SynInterpolatedStringPart.FillExpr $2 :: $3 } | INTERP_STRING_BEGIN_END - { let s, synStringKind, _ = $1 - [ SynInterpolatedStringPart.String (s, rhs parseState 1) ], synStringKind } + { [ SynInterpolatedStringPart.String (fst $1, rhs parseState 1) ] } | INTERP_STRING_BEGIN_PART interpolatedStringParts { - let s, synStringKind, _ = $1 let rbrace = parseState.InputEndPosition 1 let lbrace = parseState.InputStartPosition 2 reportParseErrorAt (mkSynRange rbrace lbrace) (FSComp.SR.parsEmptyFillInInterpolatedString()) - SynInterpolatedStringPart.String (s, rhs parseState 1) :: $2, synStringKind } + SynInterpolatedStringPart.String (fst $1, rhs parseState 1) :: $2 } opt_HIGH_PRECEDENCE_APP: | HIGH_PRECEDENCE_BRACK_APP { } diff --git a/src/fsharp/pplex.fsl b/src/fsharp/pplex.fsl index fdd59bc6f81..d4227d28733 100644 --- a/src/fsharp/pplex.fsl +++ b/src/fsharp/pplex.fsl @@ -9,7 +9,7 @@ open System open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Lexhelp open FSharp.Compiler.ParseHelpers -open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTree open Internal.Utilities.Text.Lexing diff --git a/src/fsharp/pppars.fsy b/src/fsharp/pppars.fsy index 5775c898670..0cd9171ae94 100644 --- a/src/fsharp/pppars.fsy +++ b/src/fsharp/pppars.fsy @@ -3,7 +3,7 @@ %{ open FSharp.Compiler.ErrorLogger open FSharp.Compiler.ParseHelpers -open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTree let dummy = IfdefId("DUMMY") diff --git a/src/fsharp/range.fs b/src/fsharp/range.fs index 690420ba7e5..b20cee5c3be 100755 --- a/src/fsharp/range.fs +++ b/src/fsharp/range.fs @@ -1,41 +1,38 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -/// Anything to do with special names of identifiers and other lexical rules -namespace FSharp.Compiler.Text +/// Anything to do with special names of identifiers and other lexical rules +module FSharp.Compiler.Range open System open System.IO -open System.Collections.Concurrent open System.Collections.Generic +open System.Collections.Concurrent open Microsoft.FSharp.Core.Printf -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras.Bits -open FSharp.Compiler.IO -open Internal.Utilities.Library.Extras +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.Lib +open FSharp.Compiler.Lib.Bits -type FileIndex = int32 +type FileIndex = int32 -[] -module PosImpl = - [] - let columnBitCount = 20 +[] +let columnBitCount = 20 - [] - let lineBitCount = 31 +[] +let lineBitCount = 31 - let posBitCount = lineBitCount + columnBitCount +let posBitCount = lineBitCount + columnBitCount - let posColumnMask = mask64 0 columnBitCount +let posColumnMask = mask64 0 columnBitCount - let lineColumnMask = mask64 columnBitCount lineBitCount +let lineColumnMask = mask64 columnBitCount lineBitCount [] [] -type Position(code:int64) = +type pos(code:int64) = - new (l, c) = - let l = max 0 l - let c = max 0 c + new (l, c) = + let l = max 0 l + let c = max 0 c let p = (int64 c &&& posColumnMask) ||| ((int64 l <<< columnBitCount) &&& lineColumnMask) pos p @@ -48,94 +45,98 @@ type Position(code:int64) = static member EncodingSize = posBitCount - static member Decode (code:int64) : pos = Position(code) + static member Decode (code:int64) : pos = pos code - override p.Equals(obj) = match obj with :? Position as p2 -> code = p2.Encoding | _ -> false + override p.Equals(obj) = match obj with :? pos as p2 -> code = p2.Encoding | _ -> false override p.GetHashCode() = hash code override p.ToString() = sprintf "(%d,%d)" p.Line p.Column -and pos = Position - -[] -module RangeImpl = - [] - let fileIndexBitCount = 24 +[] +let fileIndexBitCount = 24 - [] - let startColumnBitCount = columnBitCount // 20 +[] +let startColumnBitCount = columnBitCount // 20 - [] - let endColumnBitCount = columnBitCount // 20 +[] +let endColumnBitCount = columnBitCount // 20 - [] - let startLineBitCount = lineBitCount // 31 +[] +let startLineBitCount = lineBitCount // 31 - [] - let heightBitCount = 27 +[] +let heightBitCount = 27 - [] - let isSyntheticBitCount = 1 +[] +let isSyntheticBitCount = 1 - [] - let fileIndexShift = 0 +[] +let fileIndexShift = 0 - [] - let startColumnShift = 24 +[] +let startColumnShift = 24 - [] - let endColumnShift = 44 +[] +let endColumnShift = 44 - [] - let startLineShift = 0 +[] +let startLineShift = 0 - [] - let heightShift = 31 +[] +let heightShift = 31 - [] - let isSyntheticShift = 58 +[] +let isSyntheticShift = 58 - [] - let fileIndexMask = 0b0000000000000000000000000000000000000000111111111111111111111111L +[] +let fileIndexMask = 0b0000000000000000000000000000000000000000111111111111111111111111L - [] - let startColumnMask = 0b0000000000000000000011111111111111111111000000000000000000000000L +[] +let startColumnMask = 0b0000000000000000000011111111111111111111000000000000000000000000L - [] - let endColumnMask = 0b1111111111111111111100000000000000000000000000000000000000000000L +[] +let endColumnMask = 0b1111111111111111111100000000000000000000000000000000000000000000L - [] - let startLineMask = 0b0000000000000000000000000000000001111111111111111111111111111111L +[] +let startLineMask = 0b0000000000000000000000000000000001111111111111111111111111111111L - [] - let heightMask = 0b0000001111111111111111111111111110000000000000000000000000000000L +[] +let heightMask = 0b0000001111111111111111111111111110000000000000000000000000000000L - [] - let isSyntheticMask = 0b0000010000000000000000000000000000000000000000000000000000000000L +[] +let isSyntheticMask = 0b0000010000000000000000000000000000000000000000000000000000000000L - #if DEBUG - let _ = assert (posBitCount <= 64) - let _ = assert (fileIndexBitCount + startColumnBitCount + endColumnBitCount <= 64) - let _ = assert (startLineBitCount + heightBitCount + isSyntheticBitCount <= 64) +#if DEBUG +let _ = assert (posBitCount <= 64) +let _ = assert (fileIndexBitCount + startColumnBitCount + endColumnBitCount <= 64) +let _ = assert (startLineBitCount + heightBitCount + isSyntheticBitCount <= 64) - let _ = assert (startColumnShift = fileIndexShift + fileIndexBitCount) - let _ = assert (endColumnShift = startColumnShift + startColumnBitCount) +let _ = assert (startColumnShift = fileIndexShift + fileIndexBitCount) +let _ = assert (endColumnShift = startColumnShift + startColumnBitCount) - let _ = assert (heightShift = startLineShift + startLineBitCount) - let _ = assert (isSyntheticShift = heightShift + heightBitCount) +let _ = assert (heightShift = startLineShift + startLineBitCount) +let _ = assert (isSyntheticShift = heightShift + heightBitCount) - let _ = assert (fileIndexMask = mask64 fileIndexShift fileIndexBitCount) - let _ = assert (startLineMask = mask64 startLineShift startLineBitCount) - let _ = assert (startColumnMask = mask64 startColumnShift startColumnBitCount) - let _ = assert (heightMask = mask64 heightShift heightBitCount) - let _ = assert (endColumnMask = mask64 endColumnShift endColumnBitCount) - let _ = assert (isSyntheticMask = mask64 isSyntheticShift isSyntheticBitCount) - #endif +let _ = assert (fileIndexMask = mask64 fileIndexShift fileIndexBitCount) +let _ = assert (startLineMask = mask64 startLineShift startLineBitCount) +let _ = assert (startColumnMask = mask64 startColumnShift startColumnBitCount) +let _ = assert (heightMask = mask64 heightShift heightBitCount) +let _ = assert (endColumnMask = mask64 endColumnShift endColumnBitCount) +let _ = assert (isSyntheticMask = mask64 isSyntheticShift isSyntheticBitCount) +#endif +/// Removes relative parts from any full paths +let normalizeFilePath (filePath: string) = + try + if FileSystem.IsPathRootedShim filePath then + FileSystem.GetFullPathShim filePath + else + filePath + with _ -> filePath /// A unique-index table for file names. -type FileIndexTable() = +type FileIndexTable() = let indexToFileTable = new ResizeArray<_>(11) let fileToIndexTable = new ConcurrentDictionary() @@ -145,74 +146,74 @@ type FileIndexTable() = // do not. Also any file names which are not put into ranges at all are non-normalized. // // TO move forward we should eventually introduce a new type NormalizedFileName that tracks this invariant. - member t.FileToIndex normalize filePath = - match fileToIndexTable.TryGetValue filePath with + member t.FileToIndex normalize filePath = + match fileToIndexTable.TryGetValue filePath with | true, idx -> idx - | _ -> - + | _ -> + // Try again looking for a normalized entry. - let normalizedFilePath = if normalize then FileSystem.NormalizePathShim filePath else filePath - match fileToIndexTable.TryGetValue normalizedFilePath with + let normalizedFilePath = if normalize then normalizeFilePath filePath else filePath + match fileToIndexTable.TryGetValue normalizedFilePath with | true, idx -> // Record the non-normalized entry if necessary - if filePath <> normalizedFilePath then - lock fileToIndexTable (fun () -> + if filePath <> normalizedFilePath then + lock fileToIndexTable (fun () -> fileToIndexTable.[filePath] <- idx) - + // Return the index idx - - | _ -> - lock fileToIndexTable (fun () -> + + | _ -> + lock fileToIndexTable (fun () -> // Get the new index let idx = indexToFileTable.Count - + // Record the normalized entry indexToFileTable.Add normalizedFilePath fileToIndexTable.[normalizedFilePath] <- idx - + // Record the non-normalized entry if necessary - if filePath <> normalizedFilePath then + if filePath <> normalizedFilePath then fileToIndexTable.[filePath] <- idx // Return the index idx) - member t.IndexToFile n = - if n < 0 then + member t.IndexToFile n = + if n < 0 then failwithf "fileOfFileIndex: negative argument: n = %d\n" n if n >= indexToFileTable.Count then failwithf "fileOfFileIndex: invalid argument: n = %d\n" n indexToFileTable.[n] -[] -module FileIndex = - let maxFileIndex = pown32 fileIndexBitCount +let maxFileIndex = pown32 fileIndexBitCount - // ++GLOBAL MUTABLE STATE - // WARNING: Global Mutable State, holding a mapping between integers and filenames - let fileIndexTable = new FileIndexTable() +// ++GLOBAL MUTABLE STATE +// WARNING: Global Mutable State, holding a mapping between integers and filenames +let fileIndexTable = new FileIndexTable() - // If we exceed the maximum number of files we'll start to report incorrect file names - let fileIndexOfFileAux normalize f = fileIndexTable.FileToIndex normalize f % maxFileIndex +// If we exceed the maximum number of files we'll start to report incorrect file names +let fileIndexOfFileAux normalize f = fileIndexTable.FileToIndex normalize f % maxFileIndex - let fileIndexOfFile filePath = fileIndexOfFileAux false filePath +let fileIndexOfFile filePath = fileIndexOfFileAux false filePath - let fileOfFileIndex idx = fileIndexTable.IndexToFile idx +let fileOfFileIndex idx = fileIndexTable.IndexToFile idx - let unknownFileName = "unknown" - let startupFileName = "startup" - let commandLineArgsFileName = "commandLineArgs" +let mkPos line column = pos (line, column) + +let unknownFileName = "unknown" +let startupFileName = "startup" +let commandLineArgsFileName = "commandLineArgs" [] [ {DebugCode}")>] -type Range(code1:int64, code2: int64) = +type range(code1:int64, code2: int64) = static member Zero = range(0L, 0L) - new (fIdx, bl, bc, el, ec) = + new (fIdx, bl, bc, el, ec) = let code1 = ((int64 fIdx) &&& fileIndexMask) ||| ((int64 bc <<< startColumnShift) &&& startColumnMask) ||| ((int64 ec <<< endColumnShift) &&& endColumnMask) - let code2 = + let code2 = ((int64 bl <<< startLineShift) &&& startLineMask) ||| ((int64 (el-bl) <<< heightShift) &&& heightMask) range(code1, code2) @@ -221,13 +222,13 @@ type Range(code1:int64, code2: int64) = member r.StartLine = int32((code2 &&& startLineMask) >>> startLineShift) - member r.StartColumn = int32((code1 &&& startColumnMask) >>> startColumnShift) + member r.StartColumn = int32((code1 &&& startColumnMask) >>> startColumnShift) member r.EndLine = int32((code2 &&& heightMask) >>> heightShift) + r.StartLine member r.EndColumn = int32((code1 &&& endColumnMask) >>> endColumnShift) - member r.IsSynthetic = int32((code2 &&& isSyntheticMask) >>> isSyntheticShift) <> 0 + member r.IsSynthetic = int32((code2 &&& isSyntheticMask) >>> isSyntheticShift) <> 0 member r.Start = pos (r.StartLine, r.StartColumn) @@ -257,15 +258,15 @@ type Range(code1:int64, code2: int64) = let endCol = r.EndColumn - 1 let startCol = r.StartColumn - 1 if FileSystem.IsInvalidPathShim r.FileName then "path invalid: " + r.FileName - elif not (FileSystem.FileExistsShim r.FileName) then "non existing file: " + r.FileName + elif not (FileSystem.SafeExists r.FileName) then "non existing file: " + r.FileName else - FileSystem.OpenFileForReadShim(r.FileName).ReadLines() + File.ReadAllLines(r.FileName) |> Seq.skip (r.StartLine - 1) |> Seq.take (r.EndLine - r.StartLine + 1) |> String.concat "\n" |> fun s -> s.Substring(startCol + 1, s.LastIndexOf("\n", StringComparison.Ordinal) + 1 - startCol + endCol) with e -> - e.ToString() + e.ToString() member r.ToShortString() = sprintf "(%d,%d--%d,%d)" r.StartLine r.StartColumn r.EndLine r.EndColumn @@ -275,130 +276,113 @@ type Range(code1:int64, code2: int64) = override r.ToString() = sprintf "%s (%d,%d--%d,%d) IsSynthetic=%b" r.FileName r.StartLine r.StartColumn r.EndLine r.EndColumn r.IsSynthetic -and range = Range - -#if CHECK_LINE0_TYPES // turn on to check that we correctly transform zero-based line counts to one-based line counts -// Visual Studio uses line counts starting at 0, F# uses them starting at 1 -[] type ZeroBasedLineAnnotation - -type Line0 = int -#else -type Line0 = int -#endif - -type Position01 = Line0 * int +let mkRange filePath startPos endPos = range (fileIndexOfFileAux true filePath, startPos, endPos) -type Range01 = Position01 * Position01 +let equals (r1: range) (r2: range) = + r1.Code1 = r2.Code1 && r1.Code2 = r2.Code2 -module Line = +let mkFileIndexRange fileIndex startPos endPos = range (fileIndex, startPos, endPos) - let fromZ (line:Line0) = int line+1 +let posOrder = Order.orderOn (fun (p:pos) -> p.Line, p.Column) (Pair.order (Int32.order, Int32.order)) - let toZ (line:int) : Line0 = LanguagePrimitives.Int32WithMeasure(line - 1) +/// rangeOrder: not a total order, but enough to sort on ranges +let rangeOrder = Order.orderOn (fun (r:range) -> r.FileName, r.Start) (Pair.order (String.order, posOrder)) -[] -module Position = +let outputPos (os:TextWriter) (m:pos) = fprintf os "(%d,%d)" m.Line m.Column - let mkPos line column = Position (line, column) +let outputRange (os:TextWriter) (m:range) = fprintf os "%s%a-%a" m.FileName outputPos m.Start outputPos m.End + +let posGt (p1: pos) (p2: pos) = + let p1Line = p1.Line + let p2Line = p2.Line + p1Line > p2Line || p1Line = p2Line && p1.Column > p2.Column - let outputPos (os:TextWriter) (m:pos) = fprintf os "(%d,%d)" m.Line m.Column +let posEq (p1: pos) (p2: pos) = p1.Encoding = p2.Encoding - let posGt (p1: pos) (p2: pos) = - let p1Line = p1.Line - let p2Line = p2.Line - p1Line > p2Line || p1Line = p2Line && p1.Column > p2.Column +let posGeq p1 p2 = posEq p1 p2 || posGt p1 p2 - let posEq (p1: pos) (p2: pos) = p1.Encoding = p2.Encoding +let posLt p1 p2 = posGt p2 p1 - let posGeq p1 p2 = posEq p1 p2 || posGt p1 p2 +/// This is deliberately written in an allocation-free way, i.e. m1.Start, m1.End etc. are not called +let unionRanges (m1:range) (m2:range) = + if m1.FileIndex <> m2.FileIndex then m2 else + let b = + if (m1.StartLine > m2.StartLine || (m1.StartLine = m2.StartLine && m1.StartColumn > m2.StartColumn)) then m2 + else m1 + let e = + if (m1.EndLine > m2.EndLine || (m1.EndLine = m2.EndLine && m1.EndColumn > m2.EndColumn)) then m1 + else m2 + range (m1.FileIndex, b.StartLine, b.StartColumn, e.EndLine, e.EndColumn) - let posLt p1 p2 = posGt p2 p1 +let rangeContainsRange (m1:range) (m2:range) = + m1.FileIndex = m2.FileIndex && + posGeq m2.Start m1.Start && + posGeq m1.End m2.End - let fromZ (line:Line0) column = mkPos (Line.fromZ line) column - - let toZ (p:pos) = (Line.toZ p.Line, p.Column) +let rangeContainsPos (m1:range) p = + posGeq p m1.Start && + posGeq m1.End p - (* For Diagnostics *) - let stringOfPos (pos:pos) = sprintf "(%d,%d)" pos.Line pos.Column +let rangeBeforePos (m1:range) p = + posGeq p m1.End - let pos0 = mkPos 1 0 +let rangeN filename line = mkRange filename (mkPos line 0) (mkPos line 0) -module Range = - let mkRange filePath startPos endPos = range (fileIndexOfFileAux true filePath, startPos, endPos) +let pos0 = mkPos 1 0 - let equals (r1: range) (r2: range) = - r1.Code1 = r2.Code1 && r1.Code2 = r2.Code2 +let range0 = rangeN unknownFileName 1 - let mkFileIndexRange fileIndex startPos endPos = range (fileIndex, startPos, endPos) +let rangeStartup = rangeN startupFileName 1 - let posOrder = Order.orderOn (fun (p:pos) -> p.Line, p.Column) (Pair.order (Int32.order, Int32.order)) +let rangeCmdArgs = rangeN commandLineArgsFileName 0 - /// rangeOrder: not a total order, but enough to sort on ranges - let rangeOrder = Order.orderOn (fun (r:range) -> r.FileName, r.Start) (Pair.order (String.order, posOrder)) +let trimRangeToLine (r:range) = + let startL, startC = r.StartLine, r.StartColumn + let endL, _endC = r.EndLine, r.EndColumn + if endL <= startL then + r + else + let endL, endC = startL+1, 0 (* Trim to the start of the next line (we do not know the end of the current line) *) + range (r.FileIndex, startL, startC, endL, endC) - let outputRange (os:TextWriter) (m:range) = fprintf os "%s%a-%a" m.FileName Position.outputPos m.Start Position.outputPos m.End +(* For Diagnostics *) +let stringOfPos (pos:pos) = sprintf "(%d,%d)" pos.Line pos.Column - /// This is deliberately written in an allocation-free way, i.e. m1.Start, m1.End etc. are not called - let unionRanges (m1:range) (m2:range) = - if m1.FileIndex <> m2.FileIndex then m2 else - let b = - if (m1.StartLine > m2.StartLine || (m1.StartLine = m2.StartLine && m1.StartColumn > m2.StartColumn)) then m2 - else m1 - let e = - if (m1.EndLine > m2.EndLine || (m1.EndLine = m2.EndLine && m1.EndColumn > m2.EndColumn)) then m1 - else m2 - range (m1.FileIndex, b.StartLine, b.StartColumn, e.EndLine, e.EndColumn) +let stringOfRange (r:range) = sprintf "%s%s-%s" r.FileName (stringOfPos r.Start) (stringOfPos r.End) - let rangeContainsRange (m1:range) (m2:range) = - m1.FileIndex = m2.FileIndex && - Position.posGeq m2.Start m1.Start && - Position.posGeq m1.End m2.End +#if CHECK_LINE0_TYPES // turn on to check that we correctly transform zero-based line counts to one-based line counts +// Visual Studio uses line counts starting at 0, F# uses them starting at 1 +[] type ZeroBasedLineAnnotation - let rangeContainsPos (m1:range) p = - Position.posGeq p m1.Start && - Position.posGeq m1.End p +type Line0 = int +#else +type Line0 = int +#endif +type Pos01 = Line0 * int +type Range01 = Pos01 * Pos01 - let rangeBeforePos (m1:range) p = - Position.posGeq p m1.End +module Line = - let rangeN filename line = mkRange filename (mkPos line 0) (mkPos line 0) + // Visual Studio uses line counts starting at 0, F# uses them starting at 1 + let fromZ (line:Line0) = int line+1 - let range0 = rangeN unknownFileName 1 + let toZ (line:int) : Line0 = LanguagePrimitives.Int32WithMeasure(line - 1) - let rangeStartup = rangeN startupFileName 1 +module Pos = - let rangeCmdArgs = rangeN commandLineArgsFileName 0 + let fromZ (line:Line0) column = mkPos (Line.fromZ line) column - let trimRangeToLine (r:range) = - let startL, startC = r.StartLine, r.StartColumn - let endL, _endC = r.EndLine, r.EndColumn - if endL <= startL then - r - else - let endL, endC = startL+1, 0 (* Trim to the start of the next line (we do not know the end of the current line) *) - range (r.FileIndex, startL, startC, endL, endC) + let toZ (p:pos) = (Line.toZ p.Line, p.Column) - let stringOfRange (r:range) = sprintf "%s%s-%s" r.FileName (Position.stringOfPos r.Start) (Position.stringOfPos r.End) +module Range = - let toZ (m:range) = Position.toZ m.Start, Position.toZ m.End + let toZ (m:range) = Pos.toZ m.Start, Pos.toZ m.End let toFileZ (m:range) = m.FileName, toZ m - let comparer = - { new IEqualityComparer with - member _.Equals(x1, x2) = equals x1 x2 + let comparer = + { new IEqualityComparer with + member _.Equals(x1, x2) = equals x1 x2 member _.GetHashCode o = o.GetHashCode() } - let mkFirstLineOfFile (file: string) = - try - let lines = FileSystem.OpenFileForReadShim(file).ReadLines() |> Seq.indexed - let nonWhiteLine = lines |> Seq.tryFind (fun (_,s) -> not (String.IsNullOrWhiteSpace s)) - match nonWhiteLine with - | Some (i,s) -> mkRange file (mkPos (i+1) 0) (mkPos (i+1) s.Length) - | None -> - let nonEmptyLine = lines |> Seq.tryFind (fun (_,s) -> not (String.IsNullOrEmpty s)) - match nonEmptyLine with - | Some (i,s) -> mkRange file (mkPos (i+1) 0) (mkPos (i+1) s.Length) - | None -> mkRange file (mkPos 1 0) (mkPos 1 80) - with _ -> - mkRange file (mkPos 1 0) (mkPos 1 80) + diff --git a/src/fsharp/range.fsi b/src/fsharp/range.fsi index 1d2fcdb8634..172ad32c103 100755 --- a/src/fsharp/range.fsi +++ b/src/fsharp/range.fsi @@ -1,56 +1,74 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -/// The Range and Pos types form part of the public API of FSharp.Compiler.Service -namespace FSharp.Compiler.Text +module public FSharp.Compiler.Range +open System.Text open System.Collections.Generic +open Internal.Utilities +open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler + /// An index into a global tables of filenames -type internal FileIndex = int32 +type FileIndex = int32 + +/// Convert a file path to an index +val fileIndexOfFile : filePath: string -> FileIndex + +/// Convert an index into a file path +val fileOfFileIndex : FileIndex -> string /// Represents a position in a file [] -type Position = +type pos = /// The line number for the position - member Line: int + member Line : int /// The column number for the position - member Column: int + member Column : int /// The encoding of the position as a 64-bit integer - member internal Encoding: int64 + member Encoding : int64 /// Decode a position fro a 64-bit integer - static member internal Decode: int64 -> pos + static member Decode : int64 -> pos /// The maximum number of bits needed to store an encoded position - static member internal EncodingSize: int + static member EncodingSize : int + +/// Create a position for the given line and column +val mkPos : line:int -> column:int -> pos -/// Represents a position in a file -and pos = Position +/// Ordering on positions +val posOrder : IComparer + +val unknownFileName: string +val startupFileName: string +val commandLineArgsFileName: string -/// Represents a range within a file +/// Represents a range within a known file [] -type Range = +type range = /// The start line of the range - member StartLine: int + member StartLine : int /// The start column of the range - member StartColumn: int + member StartColumn : int /// The line number for the end position of the range - member EndLine: int + member EndLine : int /// The column number for the end position of the range - member EndColumn: int + member EndColumn : int /// The start position of the range - member Start: pos + member Start : pos /// The end position of the range - member End: pos + member End : pos /// The empty range that is located at the start position of the range member StartRange: range @@ -59,154 +77,129 @@ type Range = member EndRange: range /// The file index for the range - member internal FileIndex: int + member FileIndex : int /// The file name for the file of the range - member FileName: string + member FileName : string /// Synthetic marks ranges which are produced by intermediate compilation phases. This /// bit signifies that the range covers something that should not be visible to language /// service operations like dot-completion. - member IsSynthetic: bool + member IsSynthetic : bool /// Convert a range to be synthetic - member internal MakeSynthetic: unit -> range + member MakeSynthetic : unit -> range /// Convert a range to string - member internal ToShortString: unit -> string + member ToShortString : unit -> string /// The range where all values are zero - static member Zero: range + static member Zero : range -/// Represents a range within a file -and range = Range +/// This view of range marks uses file indexes explicitly +val mkFileIndexRange : FileIndex -> pos -> pos -> range -/// Represents a line number when using zero-based line counting (used by Visual Studio) -#if CHECK_LINE0_TYPES -// Visual Studio uses line counts starting at 0, F# uses them starting at 1 -[] type ZeroBasedLineAnnotation +/// This view hides the use of file indexes and just uses filenames +val mkRange : string -> pos -> pos -> range -type Line0 = int -#else -type Line0 = int -#endif - -/// Represents a position using zero-based line counting (used by Visual Studio) -type Position01 = Line0 * int - -/// Represents a range using zero-based line counting (used by Visual Studio) -type Range01 = Position01 * Position01 - -module Position = - /// Create a position for the given line and column - val mkPos: line:int -> column:int -> pos +val equals : range -> range -> bool - /// Compare positions for less-than - val posLt: pos -> pos -> bool +/// Reduce a range so it only covers a line +val trimRangeToLine : range -> range - /// Compare positions for greater-than - val posGt: pos -> pos -> bool +/// not a total order, but enough to sort on ranges +val rangeOrder : IComparer - /// Compare positions for equality - val posEq: pos -> pos -> bool +/// Output a position +val outputPos : System.IO.TextWriter -> pos -> unit - /// Compare positions for greater-than-or-equal-to - val posGeq: pos -> pos -> bool +/// Output a range +val outputRange : System.IO.TextWriter -> range -> unit + +/// Compare positions for less-than +val posLt : pos -> pos -> bool - /// Convert a position from zero-based line counting (used by Visual Studio) to one-based line counting (used internally in the F# compiler and in F# error messages) - val fromZ: line:Line0 -> column:int -> pos - - /// Convert a position from one-based line counting (used internally in the F# compiler and in F# error messages) to zero-based line counting (used by Visual Studio) - val toZ: pos -> Position01 +/// Compare positions for greater-than +val posGt : pos -> pos -> bool - /// Output a position - val outputPos: System.IO.TextWriter -> pos -> unit +/// Compare positions for equality +val posEq : pos -> pos -> bool - /// Convert a position to a string - val stringOfPos: pos -> string +/// Compare positions for greater-than-or-equal-to +val posGeq : pos -> pos -> bool - /// The zero position - val pos0: pos +/// Union two ranges, taking their first occurring start position and last occurring end position +val unionRanges : range -> range -> range -module internal FileIndex = +/// Test to see if one range contains another range +val rangeContainsRange : range -> range -> bool - /// Convert a file path to an index - val fileIndexOfFile: filePath: string -> FileIndex +/// Test to see if a range contains a position +val rangeContainsPos : range -> pos -> bool - /// Convert an index into a file path - val fileOfFileIndex: FileIndex -> string +/// Test to see if a range occurs fully before a position +val rangeBeforePos : range -> pos -> bool - val startupFileName: string +/// Make a dummy range for a file +val rangeN : string -> int -> range -module Range = - - /// Ordering on positions - val posOrder: IComparer +/// The zero position +val pos0 : pos - /// This view of range marks uses file indexes explicitly - val mkFileIndexRange: FileIndex -> pos -> pos -> range +/// The zero range +val range0 : range - /// This view hides the use of file indexes and just uses filenames - val mkRange: string -> pos -> pos -> range +/// A range associated with a dummy file called "startup" +val rangeStartup : range - /// Make a range for the first non-whitespace line of the file if any. Otherwise use line 1 chars 0-80. - /// This involves reading the file. - val mkFirstLineOfFile: string -> range +/// A range associated with a dummy file for the command line arguments +val rangeCmdArgs : range + +/// Convert a position to a string +val stringOfPos : pos -> string - val equals: range -> range -> bool +/// Convert a range to a string +val stringOfRange : range -> string - /// Reduce a range so it only covers a line - val trimRangeToLine: range -> range +/// Represents a line number when using zero-based line counting (used by Visual Studio) +#if CHECK_LINE0_TYPES +// Visual Studio uses line counts starting at 0, F# uses them starting at 1 +[] type ZeroBasedLineAnnotation - /// not a total order, but enough to sort on ranges - val rangeOrder: IComparer +type Line0 = int +#else +type Line0 = int +#endif - /// Output a range - val outputRange: System.IO.TextWriter -> range -> unit +/// Represents a position using zero-based line counting (used by Visual Studio) +type Pos01 = Line0 * int - /// Union two ranges, taking their first occurring start position and last occurring end position - val unionRanges: range -> range -> range +/// Represents a range using zero-based line counting (used by Visual Studio) +type Range01 = Pos01 * Pos01 - /// Test to see if one range contains another range - val rangeContainsRange: range -> range -> bool +module Line = - /// Test to see if a range contains a position - val rangeContainsPos: range -> pos -> bool + /// Convert a line number from zero-based line counting (used by Visual Studio) to one-based line counting (used internally in the F# compiler and in F# error messages) + val fromZ : Line0 -> int - /// Test to see if a range occurs fully before a position - val rangeBeforePos: range -> pos -> bool + /// Convert a line number from one-based line counting (used internally in the F# compiler and in F# error messages) to zero-based line counting (used by Visual Studio) + val toZ : int -> Line0 - /// Make a dummy range for a file - val rangeN: string -> int -> range +module Pos = - /// The zero range - val range0: range + /// Convert a position from zero-based line counting (used by Visual Studio) to one-based line counting (used internally in the F# compiler and in F# error messages) + val fromZ : line:Line0 -> column:int -> pos - /// A range associated with a dummy file called "startup" - val rangeStartup: range + /// Convert a position from one-based line counting (used internally in the F# compiler and in F# error messages) to zero-based line counting (used by Visual Studio) + val toZ : pos -> Pos01 - /// A range associated with a dummy file for the command line arguments - val rangeCmdArgs: range - - /// Convert a range to a string - val stringOfRange: range -> string +module Range = /// Convert a range from one-based line counting (used internally in the F# compiler and in F# error messages) to zero-based line counting (used by Visual Studio) - val toZ: range -> Range01 + val toZ : range -> Range01 /// Convert a range from one-based line counting (used internally in the F# compiler and in F# error messages) to zero-based line counting (used by Visual Studio) - val toFileZ: range -> string * Range01 + val toFileZ : range -> string * Range01 /// Equality comparer for range. - val comparer: IEqualityComparer - -/// Functions related to converting between lines indexed at 0 and 1 -module Line = - - /// Convert a line number from zero-based line counting (used by Visual Studio) to one-based line counting (used internally in the F# compiler and in F# error messages) - val fromZ: Line0 -> int - - /// Convert a line number from one-based line counting (used internally in the F# compiler and in F# error messages) to zero-based line counting (used by Visual Studio) - val toZ: int -> Line0 - - + val comparer : IEqualityComparer diff --git a/src/fsharp/rational.fs b/src/fsharp/rational.fs index 51d7e2f6eb0..5b36a9e349e 100644 --- a/src/fsharp/rational.fs +++ b/src/fsharp/rational.fs @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// Rational arithmetic, used for exponents on units-of-measure -module internal Internal.Utilities.Rational +module internal FSharp.Compiler.Rational open System.Numerics diff --git a/src/fsharp/rational.fsi b/src/fsharp/rational.fsi index 0bcfc6dd99e..30b5d6b8e7d 100644 --- a/src/fsharp/rational.fsi +++ b/src/fsharp/rational.fsi @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// Rational arithmetic, used for exponents on units-of-measure -module internal Internal.Utilities.Rational +module internal FSharp.Compiler.Rational type Rational diff --git a/src/fsharp/service/ExternalSymbol.fs b/src/fsharp/service/ExternalSymbol.fs index f91a586cd48..dc56f50ee2d 100644 --- a/src/fsharp/service/ExternalSymbol.fs +++ b/src/fsharp/service/ExternalSymbol.fs @@ -1,13 +1,12 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler.SourceCodeServices open FSharp.Reflection -open FSharp.Compiler.Text open FSharp.Compiler.AbstractIL.IL open System.Diagnostics -module Option = +module private Option = let ofOptionList (xs : 'a option list) : 'a list option = @@ -18,15 +17,15 @@ module Option = /// Represents a type in an external (non F#) assembly. [] -type FindDeclExternalType = +type ExternalType = /// Type defined in non-F# assembly. - | Type of fullName: string * genericArgs: FindDeclExternalType list + | Type of fullName: string * genericArgs: ExternalType list /// Array of type that is defined in non-F# assembly. - | Array of inner: FindDeclExternalType + | Array of inner: ExternalType /// Pointer defined in non-F# assembly. - | Pointer of inner: FindDeclExternalType + | Pointer of inner: ExternalType /// Type variable defined in non-F# assembly. | TypeVar of typeName: string @@ -46,61 +45,51 @@ type FindDeclExternalType = | Pointer inner -> sprintf "&%O" inner | TypeVar name -> sprintf "'%s" name -module FindDeclExternalType = - let rec tryOfILType (typeVarNames: string array) (ilType: ILType) = +module ExternalType = + let rec internal tryOfILType (typeVarNames: string array) (ilType: ILType) = match ilType with | ILType.Array (_, inner) -> - tryOfILType typeVarNames inner |> Option.map FindDeclExternalType.Array + tryOfILType typeVarNames inner |> Option.map ExternalType.Array | ILType.Boxed tyspec | ILType.Value tyspec -> tyspec.GenericArgs |> List.map (tryOfILType typeVarNames) |> Option.ofOptionList - |> Option.map (fun genericArgs -> FindDeclExternalType.Type (tyspec.FullName, genericArgs)) + |> Option.map (fun genericArgs -> ExternalType.Type (tyspec.FullName, genericArgs)) | ILType.Ptr inner -> - tryOfILType typeVarNames inner |> Option.map FindDeclExternalType.Pointer + tryOfILType typeVarNames inner |> Option.map ExternalType.Pointer | ILType.TypeVar ordinal -> typeVarNames |> Array.tryItem (int ordinal) - |> Option.map (fun typeVarName -> FindDeclExternalType.TypeVar typeVarName) + |> Option.map (fun typeVarName -> ExternalType.TypeVar typeVarName) | _ -> None [] -type FindDeclExternalParam = - - | Param of parameterType: FindDeclExternalType - - | Byref of parameterType: FindDeclExternalType - - member c.IsByRef = match c with Byref _ -> true | _ -> false - - member c.ParameterType = match c with Byref ty -> ty | Param ty -> ty - - static member Create(parameterType, isByRef) = - if isByRef then Byref parameterType else Param parameterType - +type ParamTypeSymbol = + | Param of ExternalType + | Byref of ExternalType override this.ToString () = match this with | Param t -> t.ToString() | Byref t -> sprintf "ref %O" t -module FindDeclExternalParam = - let tryOfILType (typeVarNames : string array) = +module ParamTypeSymbol = + let rec internal tryOfILType (typeVarNames : string array) = function - | ILType.Byref inner -> FindDeclExternalType.tryOfILType typeVarNames inner |> Option.map FindDeclExternalParam.Byref - | ilType -> FindDeclExternalType.tryOfILType typeVarNames ilType |> Option.map FindDeclExternalParam.Param + | ILType.Byref inner -> ExternalType.tryOfILType typeVarNames inner |> Option.map ParamTypeSymbol.Byref + | ilType -> ExternalType.tryOfILType typeVarNames ilType |> Option.map ParamTypeSymbol.Param - let tryOfILTypes typeVarNames ilTypes = + let internal tryOfILTypes typeVarNames ilTypes = ilTypes |> List.map (tryOfILType typeVarNames) |> Option.ofOptionList [] [] -type FindDeclExternalSymbol = +type ExternalSymbol = | Type of fullName: string - | Constructor of typeName: string * args: FindDeclExternalParam list - | Method of typeName: string * name: string * paramSyms: FindDeclExternalParam list * genericArity: int + | Constructor of typeName: string * args: ParamTypeSymbol list + | Method of typeName: string * name: string * paramSyms: ParamTypeSymbol list * genericArity: int | Field of typeName: string * name: string | Event of typeName: string * name: string | Property of typeName: string * name: string @@ -127,34 +116,6 @@ type FindDeclExternalSymbol = | Property (typeName, name) -> sprintf "%s.%s" typeName name - member this.ToDebuggerDisplay () = - let caseInfo, _ = FSharpValue.GetUnionFields(this, typeof) + member internal this.ToDebuggerDisplay () = + let caseInfo, _ = FSharpValue.GetUnionFields(this, typeof) sprintf "%s %O" caseInfo.Name this - -[] -type FindDeclFailureReason = - - // generic reason: no particular information about error - | Unknown of message: string - - // source code file is not available - | NoSourceCode - - // trying to find declaration of ProvidedType without TypeProviderDefinitionLocationAttribute - | ProvidedType of typeName: string - - // trying to find declaration of ProvidedMember without TypeProviderDefinitionLocationAttribute - | ProvidedMember of memberName: string - -[] -type FindDeclResult = - - /// declaration not found + reason - | DeclNotFound of FindDeclFailureReason - - /// found declaration - | DeclFound of location: range - - /// Indicates an external declaration was found - | ExternalDecl of assembly : string * externalSym : FindDeclExternalSymbol - diff --git a/src/fsharp/service/ExternalSymbol.fsi b/src/fsharp/service/ExternalSymbol.fsi index 1a0492d3c27..01152010126 100644 --- a/src/fsharp/service/ExternalSymbol.fsi +++ b/src/fsharp/service/ExternalSymbol.fsi @@ -1,93 +1,50 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Text open FSharp.Compiler.AbstractIL.IL /// Represents a type in an external (non F#) assembly. [] -type public FindDeclExternalType = +type ExternalType = /// Type defined in non-F# assembly. - | Type of fullName: string * genericArgs: FindDeclExternalType list + | Type of fullName: string * genericArgs: ExternalType list /// Array of type that is defined in non-F# assembly. - | Array of inner: FindDeclExternalType + | Array of inner: ExternalType /// Pointer defined in non-F# assembly. - | Pointer of inner: FindDeclExternalType + | Pointer of inner: ExternalType /// Type variable defined in non-F# assembly. | TypeVar of typeName: string override ToString : unit -> string -module internal FindDeclExternalType = - val internal tryOfILType : string array -> ILType -> FindDeclExternalType option +module ExternalType = + val internal tryOfILType : string array -> ILType -> ExternalType option /// Represents the type of a single method parameter -[] -type public FindDeclExternalParam = - - member IsByRef: bool - - member ParameterType: FindDeclExternalType - - static member Create: parameterType: FindDeclExternalType * isByRef: bool -> FindDeclExternalParam - +[] +type ParamTypeSymbol = + | Param of ExternalType + | Byref of ExternalType override ToString : unit -> string -module internal FindDeclExternalParam = - - val internal tryOfILType : string array -> ILType -> FindDeclExternalParam option - - val internal tryOfILTypes : string array -> ILType list -> FindDeclExternalParam list option +module ParamTypeSymbol = + val internal tryOfILType : string array -> ILType -> ParamTypeSymbol option + val internal tryOfILTypes : string array -> ILType list -> ParamTypeSymbol list option /// Represents a symbol in an external (non F#) assembly [] -type public FindDeclExternalSymbol = +type ExternalSymbol = | Type of fullName: string - - | Constructor of typeName: string * args: FindDeclExternalParam list - - | Method of typeName: string * name: string * paramSyms: FindDeclExternalParam list * genericArity: int - + | Constructor of typeName: string * args: ParamTypeSymbol list + | Method of typeName: string * name: string * paramSyms: ParamTypeSymbol list * genericArity: int | Field of typeName: string * name: string - | Event of typeName: string * name: string - | Property of typeName: string * name: string override ToString : unit -> string - member internal ToDebuggerDisplay : unit -> string - -/// Represents the reason why the GetDeclarationLocation operation failed. -[] -type public FindDeclFailureReason = - - /// Generic reason: no particular information about error apart from a message - | Unknown of message: string - - /// Source code file is not available - | NoSourceCode - - /// Trying to find declaration of ProvidedType without TypeProviderDefinitionLocationAttribute - | ProvidedType of typeName: string - - /// Trying to find declaration of ProvidedMember without TypeProviderDefinitionLocationAttribute - | ProvidedMember of memberName: string - -/// Represents the result of the GetDeclarationLocation operation. -[] -type public FindDeclResult = - - /// Indicates a declaration location was not found, with an additional reason - | DeclNotFound of FindDeclFailureReason - - /// Indicates a declaration location was found - | DeclFound of location: range - - /// Indicates an external declaration was found - | ExternalDecl of assembly: string * externalSym : FindDeclExternalSymbol - + member internal ToDebuggerDisplay : unit -> string \ No newline at end of file diff --git a/src/fsharp/service/FSharpCheckerResults.fs b/src/fsharp/service/FSharpCheckerResults.fs index ecfbcedfb39..e862f4abc0f 100644 --- a/src/fsharp/service/FSharpCheckerResults.fs +++ b/src/fsharp/service/FSharpCheckerResults.fs @@ -3,200 +3,51 @@ // Open up the compiler as an incremental service for parsing, // type checking and intellisense-like environment-reporting. -namespace FSharp.Compiler.CodeAnalysis +namespace FSharp.Compiler.SourceCodeServices open System open System.Diagnostics open System.IO open System.Reflection open System.Threading -open FSharp.Compiler.IO -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras + open FSharp.Core.Printf -open FSharp.Compiler +open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.CheckExpressions open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerDiagnostics open FSharp.Compiler.CompilerImports -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.EditorServices -open FSharp.Compiler.EditorServices.DeclarationListHelpers +open FSharp.Compiler.CompilerOptions open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features open FSharp.Compiler.Infos open FSharp.Compiler.InfoReader +open FSharp.Compiler.Layout open FSharp.Compiler.Lexhelp +open FSharp.Compiler.Lib open FSharp.Compiler.NameResolution -open FSharp.Compiler.OptimizeInputs +open FSharp.Compiler.PrettyNaming open FSharp.Compiler.Parser open FSharp.Compiler.ParseAndCheckInputs open FSharp.Compiler.ParseHelpers +open FSharp.Compiler.OptimizeInputs +open FSharp.Compiler.Range open FSharp.Compiler.ScriptClosure -open FSharp.Compiler.Symbols -open FSharp.Compiler.Symbols.SymbolHelpers -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Layout -open FSharp.Compiler.Text.Position -open FSharp.Compiler.Text.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.AbstractIL -open System.Reflection.PortableExecutable -open FSharp.Compiler.BuildGraph +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.SourceCodeServices.SymbolHelpers open Internal.Utilities open Internal.Utilities.Collections -open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.ILBinaryReader -type FSharpUnresolvedReferencesSet = FSharpUnresolvedReferencesSet of UnresolvedAssemblyReference list - -[] -type internal DelayedILModuleReader = - - val private name : string - val private gate : obj - val mutable private getStream : (CancellationToken -> Stream option) - val mutable private result : ILModuleReader - - new (name, getStream) = { name = name; gate = obj(); getStream = getStream; result = Unchecked.defaultof<_> } - - member this.TryGetILModuleReader() = - // fast path - match box this.result with - | null -> - cancellable { - let! ct = Cancellable.token() - return - lock this.gate (fun () -> - // see if we have a result or not after the lock so we do not evaluate the stream more than once - match box this.result with - | null -> - try - let streamOpt = this.getStream ct - match streamOpt with - | Some stream -> - let ilReaderOptions: ILReaderOptions = - { - pdbDirPath = None - reduceMemoryUsage = ReduceMemoryFlag.Yes - metadataOnly = MetadataOnlyFlag.Yes - tryGetMetadataSnapshot = fun _ -> None - } - let ilReader = ILBinaryReader.OpenILModuleReaderFromStream this.name stream ilReaderOptions - this.result <- ilReader - this.getStream <- Unchecked.defaultof<_> // clear out the function so we do not hold onto anything - Some ilReader - | _ -> - None - with - | ex -> - Trace.TraceInformation("FCS: Unable to get an ILModuleReader: {0}", ex) - None - | _ -> - Some this.result - ) - } - | _ -> - Cancellable.ret (Some this.result) - - -[] -type FSharpReferencedProject = - | FSharpReference of projectFileName: string * options: FSharpProjectOptions - | PEReference of projectFileName: string * stamp: DateTime * delayedReader: DelayedILModuleReader - | ILModuleReference of projectFileName: string * getStamp: (unit -> DateTime) * getReader: (unit -> ILModuleReader) - - member this.FileName = - match this with - | FSharpReference(projectFileName=projectFileName) - | PEReference(projectFileName=projectFileName) - | ILModuleReference(projectFileName=projectFileName) -> projectFileName - - static member CreateFSharp(projectFileName, options) = - FSharpReference(projectFileName, options) - - static member CreatePortableExecutable(projectFileName, stamp, getStream) = - PEReference(projectFileName, stamp, DelayedILModuleReader(projectFileName, getStream)) - - static member CreateFromILModuleReader(projectFileName, getStamp, getReader) = - ILModuleReference(projectFileName, getStamp, getReader) - - override this.Equals(o) = - match o with - | :? FSharpReferencedProject as o -> - match this, o with - | FSharpReference(projectFileName1, options1), FSharpReference(projectFileName2, options2) -> - projectFileName1 = projectFileName2 && options1 = options2 - | PEReference(projectFileName1, stamp1, _), PEReference(projectFileName2, stamp2, _) -> - projectFileName1 = projectFileName2 && stamp1 = stamp2 - | ILModuleReference(projectFileName1, getStamp1, _), ILModuleReference(projectFileName2, getStamp2, _) -> - projectFileName1 = projectFileName2 && (getStamp1()) = (getStamp2()) - | _ -> - false - | _ -> - false - - override this.GetHashCode() = this.FileName.GetHashCode() - -// NOTE: may be better just to move to optional arguments here -and FSharpProjectOptions = - { - ProjectFileName: string - ProjectId: string option - SourceFiles: string[] - OtherOptions: string[] - ReferencedProjects: FSharpReferencedProject[] - IsIncompleteTypeCheckEnvironment : bool - UseScriptResolutionRules : bool - LoadTime : System.DateTime - UnresolvedReferences : FSharpUnresolvedReferencesSet option - OriginalLoadReferences: (range * string * string) list - Stamp : int64 option - } - - static member UseSameProject(options1,options2) = - match options1.ProjectId, options2.ProjectId with - | Some(projectId1), Some(projectId2) when not (String.IsNullOrWhiteSpace(projectId1)) && not (String.IsNullOrWhiteSpace(projectId2)) -> - projectId1 = projectId2 - | Some(_), Some(_) - | None, None -> options1.ProjectFileName = options2.ProjectFileName - | _ -> false - - static member AreSameForChecking(options1,options2) = - match options1.Stamp, options2.Stamp with - | Some x, Some y -> (x = y) - | _ -> - FSharpProjectOptions.UseSameProject(options1, options2) && - options1.SourceFiles = options2.SourceFiles && - options1.OtherOptions = options2.OtherOptions && - options1.UnresolvedReferences = options2.UnresolvedReferences && - options1.OriginalLoadReferences = options2.OriginalLoadReferences && - options1.ReferencedProjects.Length = options2.ReferencedProjects.Length && - (options1.ReferencedProjects, options2.ReferencedProjects) - ||> Array.forall2 (fun r1 r2 -> - match r1, r2 with - | FSharpReferencedProject.FSharpReference(n1,a), FSharpReferencedProject.FSharpReference(n2,b) -> - n1 = n2 && FSharpProjectOptions.AreSameForChecking(a,b) - | FSharpReferencedProject.PEReference(n1, stamp1, _), FSharpReferencedProject.PEReference(n2, stamp2, _) -> - n1 = n2 && stamp1 = stamp2 - | _ -> - false) && - options1.LoadTime = options2.LoadTime - - member po.ProjectDirectory = System.IO.Path.GetDirectoryName(po.ProjectFileName) - - override this.ToString() = "FSharpProjectOptions(" + this.ProjectFileName + ")" - [] module internal FSharpCheckerResultsSettings = @@ -204,79 +55,54 @@ module internal FSharpCheckerResultsSettings = let maxTypeCheckErrorsOutOfProjectContext = GetEnvInteger "FCS_MaxErrorsOutOfProjectContext" 3 + /// Maximum time share for a piece of background work before it should (cooperatively) yield + /// to enable other requests to be serviced. Yielding means returning a continuation function + /// (via an Eventually<_> value of case NotYetDone) that can be called as the next piece of work. + let maxTimeShareMilliseconds = + match System.Environment.GetEnvironmentVariable("FCS_MaxTimeShare") with + | null | "" -> 100L + | s -> int64 s + // Look for DLLs in the location of the service DLL first. let defaultFSharpBinariesDir = FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(Some(Path.GetDirectoryName(typeof.Assembly.Location))).Value -[] -type FSharpSymbolUse(g:TcGlobals, denv: DisplayEnv, symbol:FSharpSymbol, itemOcc, range: range) = - - member _.Symbol = symbol - - member _.DisplayContext = FSharpDisplayContext(fun _ -> denv) - - member x.IsDefinition = x.IsFromDefinition - - member _.IsFromDefinition = itemOcc = ItemOccurence.Binding - - member _.IsFromPattern = itemOcc = ItemOccurence.Pattern - - member _.IsFromType = itemOcc = ItemOccurence.UseInType - - member _.IsFromAttribute = itemOcc = ItemOccurence.UseInAttribute - - member _.IsFromDispatchSlotImplementation = itemOcc = ItemOccurence.Implemented - - member _.IsFromComputationExpression = - match symbol.Item, itemOcc with - // 'seq' in 'seq { ... }' gets colored as keywords - | (Item.Value vref), ItemOccurence.Use when valRefEq g g.seq_vref vref -> true - // custom builders, custom operations get colored as keywords - | (Item.CustomBuilder _ | Item.CustomOperation _), ItemOccurence.Use -> true - | _ -> false +[] +type FSharpFindDeclFailureReason = - member _.IsFromOpenStatement = itemOcc = ItemOccurence.Open + // generic reason: no particular information about error + | Unknown of message: string - member _.FileName = range.FileName + // source code file is not available + | NoSourceCode - member _.Range = range + // trying to find declaration of ProvidedType without TypeProviderDefinitionLocationAttribute + | ProvidedType of string - member this.IsPrivateToFile = - let isPrivate = - match this.Symbol with - | :? FSharpMemberOrFunctionOrValue as m -> not m.IsModuleValueOrMember || m.Accessibility.IsPrivate - | :? FSharpEntity as m -> m.Accessibility.IsPrivate - | :? FSharpGenericParameter -> true - | :? FSharpUnionCase as m -> m.Accessibility.IsPrivate - | :? FSharpField as m -> m.Accessibility.IsPrivate - | _ -> false + // trying to find declaration of ProvidedMember without TypeProviderDefinitionLocationAttribute + | ProvidedMember of string - let declarationLocation = - match this.Symbol.SignatureLocation with - | Some x -> Some x - | _ -> - match this.Symbol.DeclarationLocation with - | Some x -> Some x - | _ -> this.Symbol.ImplementationLocation +[] +type FSharpFindDeclResult = - let declaredInTheFile = - match declarationLocation with - | Some declRange -> declRange.FileName = this.Range.FileName - | _ -> false + /// declaration not found + reason + | DeclNotFound of FSharpFindDeclFailureReason - isPrivate && declaredInTheFile + /// found declaration + | DeclFound of range - override _.ToString() = sprintf "%O, %O, %O" symbol itemOcc range + /// Indicates an external declaration was found + | ExternalDecl of assembly : string * externalSym : ExternalSymbol /// This type is used to describe what was found during the name resolution. /// (Depending on the kind of the items, we may stop processing or continue to find better items) [] -type NameResResult = +type internal NameResResult = | Members of (ItemWithInst list * DisplayEnv * range) | Cancel of DisplayEnv * range | Empty [] -type ResolveOverloads = +type ResolveOverloads = | Yes | No @@ -287,8 +113,8 @@ type GetPreciseCompletionListFromExprTypingsResult = | None | Some of (ItemWithInst list * DisplayEnv * range) * TType -type Names = string list - +type Names = string list + /// A TypeCheckInfo represents everything we get back from the typecheck of a file. /// It acts like an in-memory database about the file. /// It is effectively immutable and not updated: when we re-typecheck we just drop the previous @@ -305,103 +131,102 @@ type internal TypeCheckInfo tcAccessRights: AccessorDomain, projectFileName: string, mainInputFileName: string, - projectOptions: FSharpProjectOptions, sResolutions: TcResolutions, sSymbolUses: TcSymbolUses, // This is a name resolution environment to use if no better match can be found. sFallback: NameResolutionEnv, loadClosure : LoadClosure option, implFileOpt: TypedImplFile option, - openDeclarations: OpenDeclaration[]) = + openDeclarations: OpenDeclaration[]) = // These strings are potentially large and the editor may choose to hold them for a while. - // Use this cache to fold together data tip text results that are the same. - // Is not keyed on 'Names' collection because this is invariant for the current position in + // Use this cache to fold together data tip text results that are the same. + // Is not keyed on 'Names' collection because this is invariant for the current position in // this unchanged file. Keyed on lineStr though to prevent a change to the currently line // being available against a stale scope. - let getToolTipTextCache = AgedLookup(getToolTipTextSize,areSimilar=(fun (x,y) -> x = y)) - + let getToolTipTextCache = AgedLookup>(getToolTipTextSize,areSimilar=(fun (x,y) -> x = y)) + let amap = tcImports.GetImportMap() let infoReader = InfoReader(g,amap) let ncenv = NameResolver(g,amap,infoReader,NameResolution.FakeInstantiationGenerator) let cenv = SymbolEnv(g, thisCcu, Some ccuSigForFile, tcImports, amap, infoReader) - + /// Find the most precise naming environment for the given line and column let GetBestEnvForPos cursorPos = - + let mutable bestSoFar = None // Find the most deeply nested enclosing scope that contains given position - sResolutions.CapturedEnvs |> ResizeArray.iter (fun (possm,env,ad) -> + sResolutions.CapturedEnvs |> ResizeArray.iter (fun (possm,env,ad) -> if rangeContainsPos possm cursorPos then - match bestSoFar with - | Some (bestm,_,_) -> - if rangeContainsRange bestm possm then + match bestSoFar with + | Some (bestm,_,_) -> + if rangeContainsRange bestm possm then bestSoFar <- Some (possm,env,ad) - | None -> + | None -> bestSoFar <- Some (possm,env,ad)) - let mostDeeplyNestedEnclosingScope = bestSoFar - - // Look for better subtrees on the r.h.s. of the subtree to the left of where we are - // Should really go all the way down the r.h.s. of the subtree to the left of where we are - // This is all needed when the index is floating free in the area just after the environment we really want to capture - // We guarantee to only refine to a more nested environment. It may not be strictly - // the right environment, but will always be at least as rich + let mostDeeplyNestedEnclosingScope = bestSoFar + + // Look for better subtrees on the r.h.s. of the subtree to the left of where we are + // Should really go all the way down the r.h.s. of the subtree to the left of where we are + // This is all needed when the index is floating free in the area just after the environment we really want to capture + // We guarantee to only refine to a more nested environment. It may not be strictly + // the right environment, but will always be at least as rich - let mutable bestAlmostIncludedSoFar = None + let mutable bestAlmostIncludedSoFar = None - sResolutions.CapturedEnvs |> ResizeArray.iter (fun (possm,env,ad) -> + sResolutions.CapturedEnvs |> ResizeArray.iter (fun (possm,env,ad) -> // take only ranges that strictly do not include cursorPos (all ranges that touch cursorPos were processed during 'Strict Inclusion' part) - if rangeBeforePos possm cursorPos && not (posEq possm.End cursorPos) then - let contained = - match mostDeeplyNestedEnclosingScope with - | Some (bestm,_,_) -> rangeContainsRange bestm possm - | None -> true - - if contained then - match bestAlmostIncludedSoFar with - | Some (rightm:range,_,_) -> - if posGt possm.End rightm.End || + if rangeBeforePos possm cursorPos && not (posEq possm.End cursorPos) then + let contained = + match mostDeeplyNestedEnclosingScope with + | Some (bestm,_,_) -> rangeContainsRange bestm possm + | None -> true + + if contained then + match bestAlmostIncludedSoFar with + | Some (rightm:range,_,_) -> + if posGt possm.End rightm.End || (posEq possm.End rightm.End && posGt possm.Start rightm.Start) then bestAlmostIncludedSoFar <- Some (possm,env,ad) | _ -> bestAlmostIncludedSoFar <- Some (possm,env,ad)) - - let resEnv = - match bestAlmostIncludedSoFar, mostDeeplyNestedEnclosingScope with + + let resEnv = + match bestAlmostIncludedSoFar, mostDeeplyNestedEnclosingScope with | Some (_,env,ad), None -> env, ad - | Some (_,almostIncludedEnv,ad), Some (_,mostDeeplyNestedEnv,_) - when almostIncludedEnv.eFieldLabels.Count >= mostDeeplyNestedEnv.eFieldLabels.Count -> + | Some (_,almostIncludedEnv,ad), Some (_,mostDeeplyNestedEnv,_) + when almostIncludedEnv.eFieldLabels.Count >= mostDeeplyNestedEnv.eFieldLabels.Count -> almostIncludedEnv,ad - | _ -> - match mostDeeplyNestedEnclosingScope with - | Some (_,env,ad) -> + | _ -> + match mostDeeplyNestedEnclosingScope with + | Some (_,env,ad) -> env,ad - | None -> + | None -> sFallback,AccessibleFromSomeFSharpCode - let pm = mkRange mainInputFileName cursorPos cursorPos + let pm = mkRange mainInputFileName cursorPos cursorPos resEnv,pm /// The items that come back from ResolveCompletionsInType are a bit /// noisy. Filter a few things out. /// - /// e.g. prefer types to constructors for ToolTipText + /// e.g. prefer types to constructors for FSharpToolTipText let FilterItemsForCtors filterCtors (items: ItemWithInst list) = - let items = items |> List.filter (fun item -> match item.Item with (Item.CtorGroup _) when filterCtors = ResolveTypeNamesToTypeRefs -> false | _ -> true) + let items = items |> List.filter (fun item -> match item.Item with (Item.CtorGroup _) when filterCtors = ResolveTypeNamesToTypeRefs -> false | _ -> true) items - + // Filter items to show only valid & return Some if there are any let ReturnItemsOfType (items: ItemWithInst list) g denv (m:range) filterCtors = - let items = - items + let items = + items |> RemoveDuplicateItems g |> RemoveExplicitlySuppressed g |> FilterItemsForCtors filterCtors if not (isNil items) then - NameResResult.Members (items, denv, m) - else + NameResResult.Members (items, denv, m) + else NameResResult.Empty let GetCapturedNameResolutions (endOfNamesPos: pos) resolveOverloads = @@ -410,9 +235,9 @@ type internal TypeCheckInfo let range = cnr.Range range.EndLine = endPos.Line && range.EndColumn = endPos.Column) - match resolveOverloads with + match resolveOverloads with | ResolveOverloads.Yes -> - filter endOfNamesPos sResolutions.CapturedNameResolutions + filter endOfNamesPos sResolutions.CapturedNameResolutions | ResolveOverloads.No -> let items = filter endOfNamesPos sResolutions.CapturedMethodGroupResolutions @@ -422,40 +247,40 @@ type internal TypeCheckInfo filter endOfNamesPos sResolutions.CapturedNameResolutions /// Looks at the exact name resolutions that occurred during type checking - /// If 'membersByResidue' is specified, we look for members of the item obtained + /// If 'membersByResidue' is specified, we look for members of the item obtained /// from the name resolution and filter them by the specified residue (?) - let GetPreciseItemsFromNameResolution(line, colAtEndOfNames, membersByResidue, filterCtors, resolveOverloads) = + let GetPreciseItemsFromNameResolution(line, colAtEndOfNames, membersByResidue, filterCtors, resolveOverloads) = let endOfNamesPos = mkPos line colAtEndOfNames // Logic below expects the list to be in reverse order of resolution let cnrs = GetCapturedNameResolutions endOfNamesPos resolveOverloads |> ResizeArray.toList |> List.rev - match cnrs, membersByResidue with - + match cnrs, membersByResidue with + // If we're looking for members using a residue, we'd expect only // a single item (pick the first one) and we need the residue (which may be "") - | CNR(Item.Types(_,(ty::_)), _, denv, nenv, ad, m)::_, Some _ -> - let items = ResolveCompletionsInType ncenv nenv (ResolveCompletionTargets.All(ConstraintSolver.IsApplicableMethApprox g amap m)) m ad true ty + | CNR(Item.Types(_,(ty::_)), _, denv, nenv, ad, m)::_, Some _ -> + let items = ResolveCompletionsInType ncenv nenv (ResolveCompletionTargets.All(ConstraintSolver.IsApplicableMethApprox g amap m)) m ad true ty let items = List.map ItemWithNoInst items ReturnItemsOfType items g denv m filterCtors - + // Value reference from the name resolution. Primarily to disallow "let x.$ = 1" // In most of the cases, value references can be obtained from expression typings or from environment, // so we wouldn't have to handle values here. However, if we have something like: // let varA = "string" // let varA = if b then 0 else varA. // then the expression typings get confused (thinking 'varA:int'), so we use name resolution even for usual values. - + | CNR(Item.Value(vref), occurence, denv, nenv, ad, m)::_, Some _ -> - if occurence = ItemOccurence.Binding || occurence = ItemOccurence.Pattern then + if occurence = ItemOccurence.Binding || occurence = ItemOccurence.Pattern then // Return empty list to stop further lookup - for value declarations NameResResult.Cancel(denv, m) - else + else // If we have any valid items for the value, then return completions for its type now. // Adjust the type in case this is the 'this' pointer stored in a reference cell. - let ty = StripSelfRefCell(g, vref.BaseOrThisInfo, vref.TauType) + let ty = StripSelfRefCell(g, vref.BaseOrThisInfo, vref.TauType) // patch accessibility domain to remove protected members if accessing NormalVal - let ad = + let ad = match vref.BaseOrThisInfo, ad with | ValBaseOrThisInfo.NormalVal, AccessibleFrom(paths, Some tcref) -> let tcref = generalizedTyconRef tcref @@ -471,34 +296,34 @@ type internal TypeCheckInfo let items = ResolveCompletionsInType ncenv nenv (ResolveCompletionTargets.All(ConstraintSolver.IsApplicableMethApprox g amap m)) m ad false ty let items = List.map ItemWithNoInst items ReturnItemsOfType items g denv m filterCtors - + // No residue, so the items are the full resolution of the name - | CNR(_, _, denv, _, _, m) :: _, None -> - let items = - cnrs + | CNR(_, _, denv, _, _, m) :: _, None -> + let items = + cnrs |> List.map (fun cnr -> cnr.ItemWithInst) - // "into" is special magic syntax, not an identifier or a library call. It is part of capturedNameResolutions as an + // "into" is special magic syntax, not an identifier or a library call. It is part of capturedNameResolutions as an // implementation detail of syntax coloring, but we should not report name resolution results for it, to prevent spurious QuickInfo. - |> List.filter (fun item -> match item.Item with Item.CustomOperation(CustomOperations.Into,_,_) -> false | _ -> true) + |> List.filter (fun item -> match item.Item with Item.CustomOperation(CustomOperations.Into,_,_) -> false | _ -> true) ReturnItemsOfType items g denv m filterCtors | _, _ -> NameResResult.Empty - - let TryGetTypeFromNameResolution(line, colAtEndOfNames, membersByResidue, resolveOverloads) = + + let TryGetTypeFromNameResolution(line, colAtEndOfNames, membersByResidue, resolveOverloads) = let endOfNamesPos = mkPos line colAtEndOfNames let items = GetCapturedNameResolutions endOfNamesPos resolveOverloads |> ResizeArray.toList |> List.rev - - match items, membersByResidue with + + match items, membersByResidue with | CNR(Item.Types(_,(ty::_)),_,_,_,_,_)::_, Some _ -> Some ty | CNR(Item.Value(vref), occurence,_,_,_,_)::_, Some _ -> if (occurence = ItemOccurence.Binding || occurence = ItemOccurence.Pattern) then None else Some (StripSelfRefCell(g, vref.BaseOrThisInfo, vref.TauType)) | _, _ -> None - let CollectParameters (methods: MethInfo list) amap m: Item list = + let CollectParameters (methods: MethInfo list) amap m: Item list = methods |> List.collect (fun meth -> match meth.GetParamDatas(amap, m, meth.FormalMethodInst) with - | x::_ -> x |> List.choose(fun (ParamData(_isParamArray, _isInArg, _isOutArg, _optArgInfo, _callerInfo, name, _, ty)) -> + | x::_ -> x |> List.choose(fun (ParamData(_isParamArray, _isInArg, _isOutArg, _optArgInfo, _callerInfo, name, _, ty)) -> match name with | Some n -> Some (Item.ArgName(n, ty, Some (ArgumentContainer.Method meth))) | None -> None @@ -516,7 +341,7 @@ type internal TypeCheckInfo let items = props @ parameters Some (denv, m, items) | CNR(Item.MethodGroup(_, methods, _), _, denv, nenv, ad, m) ::_ -> - let props = + let props = methods |> List.collect (fun meth -> let retTy = meth.GetFSharpReturnTy(amap, m, meth.FormalMethodInst) @@ -525,25 +350,25 @@ type internal TypeCheckInfo let parameters = CollectParameters methods amap m let items = props @ parameters Some (denv, m, items) - | _ -> + | _ -> None match result with - | None -> + | None -> NameResResult.Empty - | Some (denv, m, items) -> + | Some (denv, m, items) -> let items = List.map ItemWithNoInst items ReturnItemsOfType items g denv m TypeNameResolutionFlag.ResolveTypeNamesToTypeRefs - + /// finds captured typing for the given position - let GetExprTypingForPosition(endOfExprPos) = - let quals = - sResolutions.CapturedExpressionTypings - |> Seq.filter (fun (ty,nenv,_,m) -> + let GetExprTypingForPosition(endOfExprPos) = + let quals = + sResolutions.CapturedExpressionTypings + |> Seq.filter (fun (ty,nenv,_,m) -> // We only want expression types that end at the particular position in the file we are looking at. posEq m.End endOfExprPos && // Get rid of function types. True, given a 2-arg curried function "f x y", it is legal to do "(f x).GetType()", - // but you almost never want to do this in practice, and we choose not to offer up any intellisense for + // but you almost never want to do this in practice, and we choose not to offer up any intellisense for // F# function types. not (isFunTy nenv.DisplayEnv.g ty)) |> Seq.toArray @@ -551,21 +376,21 @@ type internal TypeCheckInfo let thereWereSomeQuals = not (Array.isEmpty quals) // filter out errors - let quals = quals + let quals = quals |> Array.filter (fun (ty,nenv,_,_) -> let denv = nenv.DisplayEnv not (isTyparTy denv.g ty && (destTyparTy denv.g ty).IsFromError)) thereWereSomeQuals, quals - + /// obtains captured typing for the given position /// if type of captured typing is record - returns list of record fields - let GetRecdFieldsForExpr(r : range) = + let GetRecdFieldsForExpr(r : range) = let _, quals = GetExprTypingForPosition(r.End) - let bestQual = + let bestQual = match quals with | [||] -> None - | quals -> - quals |> Array.tryFind (fun (_,_,_,rq) -> + | quals -> + quals |> Array.tryFind (fun (_,_,_,rq) -> ignore(r) // for breakpoint posEq r.Start rq.Start) match bestQual with @@ -574,101 +399,103 @@ type internal TypeCheckInfo Some (items, nenv.DisplayEnv, m) | _ -> None - /// Looks at the exact expression types at the position to the left of the + /// Looks at the exact expression types at the position to the left of the /// residue then the source when it was typechecked. - let GetPreciseCompletionListFromExprTypings(parseResults:FSharpParseFileResults, endOfExprPos, filterCtors) = - + let GetPreciseCompletionListFromExprTypings(parseResults:FSharpParseFileResults, endOfExprPos, filterCtors) = + let thereWereSomeQuals, quals = GetExprTypingForPosition(endOfExprPos) match quals with - | [| |] -> + | [| |] -> if thereWereSomeQuals then - GetPreciseCompletionListFromExprTypingsResult.NoneBecauseThereWereTypeErrors + GetPreciseCompletionListFromExprTypingsResult.NoneBecauseThereWereTypeErrors else GetPreciseCompletionListFromExprTypingsResult.None | _ -> - let bestQual, textChanged = - let input = parseResults.ParseTree - match ParsedInput.GetRangeOfExprLeftOfDot(endOfExprPos,input) with // TODO we say "colAtEndOfNames" everywhere, but that's not really a good name ("foo . $" hit Ctrl-Space at $) - | Some( exprRange) -> - // We have an up-to-date sync parse, and know the exact range of the prior expression. - // The quals all already have the same ending position, so find one with a matching starting position, if it exists. - // If not, then the stale typecheck info does not have a capturedExpressionTyping for this exact expression, and the - // user can wait for typechecking to catch up and second-chance intellisense to give the right result. - let qual = - quals |> Array.tryFind (fun (_,_,_,r) -> - ignore(r) // for breakpoint - posEq exprRange.Start r.Start) - qual, false - | None -> - // TODO In theory I think we should never get to this code path; it would be nice to add an assert. - // In practice, we do get here in some weird cases like "2.0 .. 3.0" and hitting Ctrl-Space in between the two dots of the range operator. - // I wasn't able to track down what was happening in those weird cases, not worth worrying about, it doesn't manifest as a product bug or anything. - None, false + let bestQual, textChanged = + match parseResults.ParseTree with + | Some(input) -> + match UntypedParseImpl.GetRangeOfExprLeftOfDot(endOfExprPos,Some(input)) with // TODO we say "colAtEndOfNames" everywhere, but that's not really a good name ("foo . $" hit Ctrl-Space at $) + | Some( exprRange) -> + // We have an up-to-date sync parse, and know the exact range of the prior expression. + // The quals all already have the same ending position, so find one with a matching starting position, if it exists. + // If not, then the stale typecheck info does not have a capturedExpressionTyping for this exact expression, and the + // user can wait for typechecking to catch up and second-chance intellisense to give the right result. + let qual = + quals |> Array.tryFind (fun (_,_,_,r) -> + ignore(r) // for breakpoint + posEq exprRange.Start r.Start) + qual, false + | None -> + // TODO In theory I think we should never get to this code path; it would be nice to add an assert. + // In practice, we do get here in some weird cases like "2.0 .. 3.0" and hitting Ctrl-Space in between the two dots of the range operator. + // I wasn't able to track down what was happening in those weird cases, not worth worrying about, it doesn't manifest as a product bug or anything. + None, false + | _ -> None, false match bestQual with | Some bestQual -> - let (ty,nenv,ad,m) = bestQual - let items = ResolveCompletionsInType ncenv nenv (ResolveCompletionTargets.All(ConstraintSolver.IsApplicableMethApprox g amap m)) m ad false ty + let (ty,nenv,ad,m) = bestQual + let items = ResolveCompletionsInType ncenv nenv (ResolveCompletionTargets.All(ConstraintSolver.IsApplicableMethApprox g amap m)) m ad false ty let items = items |> List.map ItemWithNoInst let items = items |> RemoveDuplicateItems g let items = items |> RemoveExplicitlySuppressed g - let items = items |> FilterItemsForCtors filterCtors + let items = items |> FilterItemsForCtors filterCtors GetPreciseCompletionListFromExprTypingsResult.Some((items,nenv.DisplayEnv,m), ty) - | None -> + | None -> if textChanged then GetPreciseCompletionListFromExprTypingsResult.NoneBecauseTypecheckIsStaleAndTextChanged else GetPreciseCompletionListFromExprTypingsResult.None /// Find items in the best naming environment. - let GetEnvironmentLookupResolutions(nenv, ad, m, plid, filterCtors, showObsolete) = + let GetEnvironmentLookupResolutions(nenv, ad, m, plid, filterCtors, showObsolete) = let items = NameResolution.ResolvePartialLongIdent ncenv nenv (ConstraintSolver.IsApplicableMethApprox g amap m) m ad plid showObsolete let items = items |> List.map ItemWithNoInst - let items = items |> RemoveDuplicateItems g + let items = items |> RemoveDuplicateItems g let items = items |> RemoveExplicitlySuppressed g - let items = items |> FilterItemsForCtors filterCtors + let items = items |> FilterItemsForCtors filterCtors (items, nenv.DisplayEnv, m) /// Find items in the best naming environment. - let GetEnvironmentLookupResolutionsAtPosition(cursorPos, plid, filterCtors, showObsolete) = + let GetEnvironmentLookupResolutionsAtPosition(cursorPos, plid, filterCtors, showObsolete) = let (nenv,ad),m = GetBestEnvForPos cursorPos GetEnvironmentLookupResolutions(nenv, ad, m, plid, filterCtors, showObsolete) /// Find record fields in the best naming environment. - let GetClassOrRecordFieldsEnvironmentLookupResolutions(cursorPos, plid) = + let GetClassOrRecordFieldsEnvironmentLookupResolutions(cursorPos, plid) = let (nenv, ad),m = GetBestEnvForPos cursorPos let items = NameResolution.ResolvePartialLongIdentToClassOrRecdFields ncenv nenv m ad plid false let items = items |> List.map ItemWithNoInst - let items = items |> RemoveDuplicateItems g + let items = items |> RemoveDuplicateItems g let items = items |> RemoveExplicitlySuppressed g - items, nenv.DisplayEnv, m + items, nenv.DisplayEnv, m /// Resolve a location and/or text to items. // Three techniques are used // - look for an exact known name resolution from type checking - // - use the known type of an expression, e.g. (expr).Name, to generate an item list + // - use the known type of an expression, e.g. (expr).Name, to generate an item list // - lookup an entire name in the name resolution environment, e.g. A.B.Name, to generate an item list // // The overall aim is to resolve as accurately as possible based on what we know from type inference - + let GetBaseClassCandidates = function | Item.ModuleOrNamespaces _ -> true | Item.Types(_, ty::_) when (isClassTy g ty) && not (isSealedTy g ty) -> true - | _ -> false + | _ -> false let GetInterfaceCandidates = function | Item.ModuleOrNamespaces _ -> true | Item.Types(_, ty::_) when (isInterfaceTy g ty) -> true - | _ -> false + | _ -> false // Return only items with the specified name - let FilterDeclItemsByResidue (getItem: 'a -> Item) residue (items: 'a list) = + let FilterDeclItemsByResidue (getItem: 'a -> Item) residue (items: 'a list) = let attributedResidue = residue + "Attribute" let nameMatchesResidue name = (residue = name) || (attributedResidue = name) - items |> List.filter (fun x -> + items |> List.filter (fun x -> let item = getItem x - let n1 = item.DisplayName + let n1 = item.DisplayName match item with | Item.Types _ -> nameMatchesResidue n1 | Item.CtorGroup (_, meths) -> @@ -676,57 +503,57 @@ type internal TypeCheckInfo meths |> List.exists (fun meth -> let tcref = meth.ApparentEnclosingTyconRef #if !NO_EXTENSIONTYPING - tcref.IsProvided || + tcref.IsProvided || #endif nameMatchesResidue tcref.DisplayName) | _ -> residue = n1) - + /// Post-filter items to make sure they have precisely the right name - /// This also checks that there are some remaining results + /// This also checks that there are some remaining results /// exactMatchResidueOpt = Some _ -- means that we are looking for exact matches let FilterRelevantItemsBy (getItem: 'a -> Item) (exactMatchResidueOpt : _ option) check (items: 'a list, denv, m) = // can throw if type is in located in non-resolved CCU: i.e. bigint if reference to System.Numerics is absent let inline safeCheck item = try check item with _ -> false - + // Are we looking for items with precisely the given name? - if isNil items then + if isNil items then // When (items = []) we must returns Some([],..) and not None // because this value is used if we want to stop further processing (e.g. let x.$ = ...) Some(items, denv, m) else match exactMatchResidueOpt with | Some exactMatchResidue -> - let items = - items - |> FilterDeclItemsByResidue getItem exactMatchResidue - |> List.filter safeCheck + let items = + items + |> FilterDeclItemsByResidue getItem exactMatchResidue + |> List.filter safeCheck if not (isNil items) then Some(items, denv, m) else None | _ -> let items = items |> List.filter safeCheck - Some(items, denv, m) + Some(items, denv, m) /// Post-filter items to make sure they have precisely the right name - /// This also checks that there are some remaining results + /// This also checks that there are some remaining results let (|FilterRelevantItems|_|) getItem exactMatchResidueOpt orig = FilterRelevantItemsBy getItem exactMatchResidueOpt (fun _ -> true) orig - + /// Find the first non-whitespace position in a line prior to the given character - let FindFirstNonWhitespacePosition (lineStr: string) i = + let FindFirstNonWhitespacePosition (lineStr: string) i = if i >= lineStr.Length then None else let mutable p = i while p >= 0 && System.Char.IsWhiteSpace(lineStr.[p]) do p <- p - 1 if p >= 0 then Some p else None - + let CompletionItem (ty: ValueOption) (assemblySymbol: ValueOption) (item: ItemWithInst) = - let kind = + let kind = match item.Item with | Item.MethodGroup (_, minfo :: _, _) -> CompletionItemKind.Method minfo.IsExtensionMember | Item.RecdField _ | Item.Property _ -> CompletionItemKind.Property | Item.Event _ -> CompletionItemKind.Event - | Item.ILField _ + | Item.ILField _ | Item.Value _ -> CompletionItemKind.Field | Item.CustomOperation _ -> CompletionItemKind.CustomOperation | _ -> CompletionItemKind.Other @@ -739,41 +566,41 @@ type internal TypeCheckInfo Unresolved = match assemblySymbol with ValueSome x -> Some x.UnresolvedSymbol | _ -> None } let DefaultCompletionItem item = CompletionItem ValueNone ValueNone item - + let getItem (x: ItemWithInst) = x.Item - let GetDeclaredItems (parseResultsOpt: FSharpParseFileResults option, lineStr: string, origLongIdentOpt, colAtEndOfNamesAndResidue, residueOpt, lastDotPos, line, loc, + let GetDeclaredItems (parseResultsOpt: FSharpParseFileResults option, lineStr: string, origLongIdentOpt, colAtEndOfNamesAndResidue, residueOpt, lastDotPos, line, loc, filterCtors, resolveOverloads, isInRangeOperator, allSymbols: unit -> AssemblySymbol list) = // Are the last two chars (except whitespaces) = ".." - let isLikeRangeOp = + let isLikeRangeOp = match FindFirstNonWhitespacePosition lineStr (colAtEndOfNamesAndResidue - 1) with | Some x when x >= 1 && lineStr.[x] = '.' && lineStr.[x - 1] = '.' -> true | _ -> false // if last two chars are .. and we are not in range operator context - no completion if isLikeRangeOp && not isInRangeOperator then None else - + // Try to use the exact results of name resolution during type checking to generate the results // This is based on position (i.e. colAtEndOfNamesAndResidue). This is not used if a residueOpt is given. - let nameResItems = - match residueOpt with + let nameResItems = + match residueOpt with | None -> GetPreciseItemsFromNameResolution(line, colAtEndOfNamesAndResidue, None, filterCtors,resolveOverloads) | Some residue -> // deals with cases when we have spaces between dot and\or identifier, like A . $ // if this is our case - then we need to locate end position of the name skipping whitespaces - // this allows us to handle cases like: let x . $ = 1 + // this allows us to handle cases like: let x . $ = 1 match lastDotPos |> Option.orElseWith (fun _ -> FindFirstNonWhitespacePosition lineStr (colAtEndOfNamesAndResidue - 1)) with | Some p when lineStr.[p] = '.' -> match FindFirstNonWhitespacePosition lineStr (p - 1) with - | Some colAtEndOfNames -> + | Some colAtEndOfNames -> let colAtEndOfNames = colAtEndOfNames + 1 // convert 0-based to 1-based GetPreciseItemsFromNameResolution(line, colAtEndOfNames, Some(residue), filterCtors,resolveOverloads) | None -> NameResResult.Empty - | _ -> NameResResult.Empty - + | _ -> NameResResult.Empty + // Normalize to form A.B.C.D where D is the residue. It may be empty for "A.B.C." // residueOpt = Some when we are looking for the exact match - let plid, exactMatchResidueOpt = + let plid, exactMatchResidueOpt = match origLongIdentOpt, residueOpt with | None, _ -> [], None | Some(origLongIdent), Some _ -> origLongIdent, None @@ -793,7 +620,7 @@ type internal TypeCheckInfo match lastDotPos |> Option.orElseWith (fun _ -> FindFirstNonWhitespacePosition lineStr (colAtEndOfNamesAndResidue - 1)) with | Some p when lineStr.[p] = '.' -> match FindFirstNonWhitespacePosition lineStr (p - 1) with - | Some colAtEndOfNames -> + | Some colAtEndOfNames -> let colAtEndOfNames = colAtEndOfNames + 1 // convert 0-based to 1-based match TryGetTypeFromNameResolution(line, colAtEndOfNames, residueOpt, resolveOverloads) with | Some x -> tryTcrefOfAppTy g x @@ -801,38 +628,38 @@ type internal TypeCheckInfo | None -> ValueNone | _ -> ValueNone - match nameResItems with + match nameResItems with | NameResResult.Cancel(denv,m) -> Some([], denv, m) - | NameResResult.Members(FilterRelevantItems getItem exactMatchResidueOpt (items, denv, m)) -> + | NameResResult.Members(FilterRelevantItems getItem exactMatchResidueOpt (items, denv, m)) -> // lookup based on name resolution results successful Some (items |> List.map (CompletionItem (getType()) ValueNone), denv, m) | _ -> match origLongIdentOpt with | None -> None - | Some _ -> - + | Some _ -> + // Try to use the type of the expression on the left to help generate a completion list - let qualItems, thereIsADotInvolved = + let qualItems, thereIsADotInvolved = match parseResultsOpt with - | None -> - // Note, you will get here if the 'reason' is not CompleteWord/MemberSelect/DisplayMemberList, as those are currently the + | None -> + // Note, you will get here if the 'reason' is not CompleteWord/MemberSelect/DisplayMemberList, as those are currently the // only reasons we do a sync parse to have the most precise and likely-to-be-correct-and-up-to-date info. So for example, // if you do QuickInfo hovering over A in "f(x).A()", you will only get a tip if typechecking has a name-resolution recorded - // for A, not if merely we know the capturedExpressionTyping of f(x) and you very recently typed ".A()" - in that case, + // for A, not if merely we know the capturedExpressionTyping of f(x) and you very recently typed ".A()" - in that case, // you won't won't get a tip until the typechecking catches back up. GetPreciseCompletionListFromExprTypingsResult.None, false - | Some parseResults -> - - match ParsedInput.TryFindExpressionASTLeftOfDotLeftOfCursor(mkPos line colAtEndOfNamesAndResidue,parseResults.ParseTree) with + | Some parseResults -> + + match UntypedParseImpl.TryFindExpressionASTLeftOfDotLeftOfCursor(mkPos line colAtEndOfNamesAndResidue,parseResults.ParseTree) with | Some(pos,_) -> GetPreciseCompletionListFromExprTypings(parseResults, pos, filterCtors), true - | None -> + | None -> // Can get here in a case like: if "f xxx yyy" is legal, and we do "f xxx y" // We have no interest in expression typings, those are only useful for dot-completion. We want to fallback // to "Use an environment lookup as the last resort" below GetPreciseCompletionListFromExprTypingsResult.None, false - - match qualItems,thereIsADotInvolved with + + match qualItems,thereIsADotInvolved with | GetPreciseCompletionListFromExprTypingsResult.Some(FilterRelevantItems getItem exactMatchResidueOpt (items, denv, m), ty), _ // Initially we only use the expression typings when looking up, e.g. (expr).Nam or (expr).Name1.Nam // These come through as an empty plid and residue "". Otherwise we try an environment lookup @@ -842,10 +669,10 @@ type internal TypeCheckInfo // lookup based on expression typings successful Some (items |> List.map (CompletionItem (tryTcrefOfAppTy g ty) ValueNone), denv, m) | GetPreciseCompletionListFromExprTypingsResult.NoneBecauseThereWereTypeErrors, _ -> - // There was an error, e.g. we have "." and there is an error determining the type of + // There was an error, e.g. we have "." and there is an error determining the type of // In this case, we don't want any of the fallback logic, rather, we want to produce zero results. None - | GetPreciseCompletionListFromExprTypingsResult.NoneBecauseTypecheckIsStaleAndTextChanged, _ -> + | GetPreciseCompletionListFromExprTypingsResult.NoneBecauseTypecheckIsStaleAndTextChanged, _ -> // we want to report no result and let second-chance intellisense kick in None | _, true when isNil plid -> @@ -853,47 +680,47 @@ type internal TypeCheckInfo // The user might by typing quickly, and the LS didn't have an expression type right before the dot yet. // Second-chance intellisense will bring up the correct list in a moment. None - | _ -> + | _ -> // Use an environment lookup as the last resort let envItems, denv, m = GetEnvironmentLookupResolutions(nenv, ad, m, plid, filterCtors, residueOpt.IsSome) - + let envResult = match nameResItems, (envItems, denv, m), qualItems with - + // First, use unfiltered name resolution items, if they're not empty - | NameResResult.Members(items, denv, m), _, _ when not (isNil items) -> + | NameResResult.Members(items, denv, m), _, _ when not (isNil items) -> // lookup based on name resolution results successful - ValueSome(items |> List.map (CompletionItem (getType()) ValueNone), denv, m) - - // If we have nonempty items from environment that were resolved from a type, then use them... + ValueSome(items |> List.map (CompletionItem (getType()) ValueNone), 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 getItem exactMatchResidueOpt (items, denv, m), _ when not (isNil items) -> // lookup based on name and environment successful ValueSome(items |> List.map (CompletionItem (getType()) ValueNone), denv, m) - + // Try again with the qualItems | _, _, GetPreciseCompletionListFromExprTypingsResult.Some(FilterRelevantItems getItem exactMatchResidueOpt (items, denv, m), ty) -> ValueSome(items |> List.map (CompletionItem (tryTcrefOfAppTy g ty) ValueNone), denv, m) - + | _ -> ValueNone let globalResult = match origLongIdentOpt with | None | Some [] -> - let globalItems = - allSymbols() + let globalItems = + allSymbols() |> List.filter (fun x -> not x.Symbol.IsExplicitlySuppressed && match x.Symbol with - | :? FSharpMemberOrFunctionOrValue as m when m.IsConstructor && filterCtors = ResolveTypeNamesToTypeRefs -> false + | :? FSharpMemberOrFunctionOrValue as m when m.IsConstructor && filterCtors = ResolveTypeNamesToTypeRefs -> false | _ -> true) - + let getItem (x: AssemblySymbol) = x.Symbol.Item - + match globalItems, denv, m with | FilterRelevantItems getItem exactMatchResidueOpt (globalItemsFiltered, denv, m) when not (isNil globalItemsFiltered) -> - globalItemsFiltered + globalItemsFiltered |> List.map(fun globalItem -> CompletionItem (getType()) (ValueSome globalItem) (ItemWithNoInst globalItem.Symbol.Item)) |> fun r -> ValueSome(r, denv, m) | _ -> ValueNone @@ -910,12 +737,12 @@ type internal TypeCheckInfo items |> List.map DefaultCompletionItem, denv, m /// Get the auto-complete items at a particular location. - let GetDeclItemsForNamesAtPosition(parseResultsOpt: FSharpParseFileResults option, origLongIdentOpt: string list option, - residueOpt:string option, lastDotPos: int option, line:int, lineStr:string, colAtEndOfNamesAndResidue, filterCtors, resolveOverloads, - getAllSymbols: unit -> AssemblySymbol list) - : (CompletionItem list * DisplayEnv * CompletionContext option * range) option = + let GetDeclItemsForNamesAtPosition(parseResultsOpt: FSharpParseFileResults option, origLongIdentOpt: string list option, + residueOpt:string option, lastDotPos: int option, line:int, lineStr:string, colAtEndOfNamesAndResidue, filterCtors, resolveOverloads, + getAllSymbols: unit -> AssemblySymbol list) + : (CompletionItem list * DisplayEnv * CompletionContext option * range) option = - let loc = + let loc = match colAtEndOfNamesAndResidue with | pastEndOfLine when pastEndOfLine >= lineStr.Length -> lineStr.Length | atDot when lineStr.[atDot] = '.' -> atDot + 1 @@ -923,110 +750,110 @@ type internal TypeCheckInfo | otherwise -> otherwise - 1 // Look for a "special" completion context - let completionContext = - parseResultsOpt - |> Option.map (fun x -> x.ParseTree) - |> Option.bind (fun parseTree -> ParsedInput.TryGetCompletionContext(mkPos line colAtEndOfNamesAndResidue, parseTree, lineStr)) - + let completionContext = + parseResultsOpt + |> Option.bind (fun x -> x.ParseTree) + |> Option.bind (fun parseTree -> UntypedParseImpl.TryGetCompletionContext(mkPos line colAtEndOfNamesAndResidue, parseTree, lineStr)) + let res = match completionContext with // Invalid completion locations | Some CompletionContext.Invalid -> None - + // Completion at 'inherit C(...)" | Some (CompletionContext.Inherit(InheritanceContext.Class, (plid, _))) -> GetEnvironmentLookupResolutionsAtPosition(mkPos line loc, plid, filterCtors, false) |> FilterRelevantItemsBy getItem None (getItem >> GetBaseClassCandidates) |> Option.map toCompletionItems - + // Completion at 'interface ..." | Some (CompletionContext.Inherit(InheritanceContext.Interface, (plid, _))) -> GetEnvironmentLookupResolutionsAtPosition(mkPos line loc, plid, filterCtors, false) |> FilterRelevantItemsBy getItem None (getItem >> GetInterfaceCandidates) |> Option.map toCompletionItems - + // Completion at 'implement ..." | Some (CompletionContext.Inherit(InheritanceContext.Unknown, (plid, _))) -> - GetEnvironmentLookupResolutionsAtPosition(mkPos line loc, plid, filterCtors, false) + GetEnvironmentLookupResolutionsAtPosition(mkPos line loc, plid, filterCtors, false) |> FilterRelevantItemsBy getItem None (getItem >> (fun t -> GetBaseClassCandidates t || GetInterfaceCandidates t)) |> Option.map toCompletionItems - + // Completion at ' { XXX = ... } " | Some(CompletionContext.RecordField(RecordContext.New(plid, _))) -> // { x. } can be either record construction or computation expression. Try to get all visible record fields first match GetClassOrRecordFieldsEnvironmentLookupResolutions(mkPos line loc, plid) |> toCompletionItems with - | [],_,_ -> + | [],_,_ -> // no record fields found, return completion list as if we were outside any computation expression GetDeclaredItems (parseResultsOpt, lineStr, origLongIdentOpt, colAtEndOfNamesAndResidue, residueOpt, lastDotPos, line, loc, filterCtors,resolveOverloads, false, fun() -> []) | result -> Some(result) - + // Completion at ' { XXX = ... with ... } " - | Some(CompletionContext.RecordField(RecordContext.CopyOnUpdate(r, (plid, _)))) -> + | Some(CompletionContext.RecordField(RecordContext.CopyOnUpdate(r, (plid, _)))) -> match GetRecdFieldsForExpr(r) with - | None -> + | None -> Some (GetClassOrRecordFieldsEnvironmentLookupResolutions(mkPos line loc, plid)) |> Option.map toCompletionItems - | Some (items, denv, m) -> - Some (List.map ItemWithNoInst items, denv, m) + | Some (items, denv, m) -> + Some (List.map ItemWithNoInst items, denv, m) |> Option.map toCompletionItems - + // Completion at ' { XXX = ... with ... } " | Some(CompletionContext.RecordField(RecordContext.Constructor(typeName))) -> Some(GetClassOrRecordFieldsEnvironmentLookupResolutions(mkPos line loc, [typeName])) |> Option.map toCompletionItems - - // Completion at ' SomeMethod( ... ) ' with named arguments + + // Completion at ' SomeMethod( ... ) ' with named arguments | Some(CompletionContext.ParameterList (endPos, fields)) -> let results = GetNamedParametersAndSettableFields endPos - - let declaredItems = - GetDeclaredItems (parseResultsOpt, lineStr, origLongIdentOpt, colAtEndOfNamesAndResidue, residueOpt, lastDotPos, line, loc, filterCtors, resolveOverloads, + + let declaredItems = + GetDeclaredItems (parseResultsOpt, lineStr, origLongIdentOpt, colAtEndOfNamesAndResidue, residueOpt, lastDotPos, line, loc, filterCtors, resolveOverloads, false, getAllSymbols) - + match results with - | NameResResult.Members(items, denv, m) -> - let filtered = - items + | NameResResult.Members(items, denv, m) -> + let filtered = + items |> RemoveDuplicateItems g |> RemoveExplicitlySuppressed g |> List.filter (fun item -> not (fields.Contains item.Item.DisplayName)) - |> List.map (fun item -> + |> List.map (fun item -> { ItemWithInst = item Kind = CompletionItemKind.Argument MinorPriority = 0 IsOwnMember = false - Type = None + Type = None Unresolved = None }) match declaredItems with | None -> Some (toCompletionItems (items, denv, m)) | Some (declItems, declaredDisplayEnv, declaredRange) -> Some (filtered @ declItems, declaredDisplayEnv, declaredRange) | _ -> declaredItems - + | Some(CompletionContext.AttributeApplication) -> GetDeclaredItems (parseResultsOpt, lineStr, origLongIdentOpt, colAtEndOfNamesAndResidue, residueOpt, lastDotPos, line, loc, filterCtors, resolveOverloads, false, getAllSymbols) - |> Option.map (fun (items, denv, m) -> - items + |> Option.map (fun (items, denv, m) -> + items |> List.filter (fun cItem -> match cItem.Item with | Item.ModuleOrNamespaces _ -> true | _ when IsAttribute infoReader cItem.Item -> true | _ -> false), denv, m) - + | Some(CompletionContext.OpenDeclaration isOpenType) -> GetDeclaredItems (parseResultsOpt, lineStr, origLongIdentOpt, colAtEndOfNamesAndResidue, residueOpt, lastDotPos, line, loc, filterCtors, resolveOverloads, false, getAllSymbols) |> Option.map (fun (items, denv, m) -> - items + items |> List.filter (fun x -> match x.Item with | Item.ModuleOrNamespaces _ -> true | Item.Types _ when isOpenType -> true | _ -> false), denv, m) - + // Completion at '(x: ...)" | Some (CompletionContext.PatternType) -> GetDeclaredItems (parseResultsOpt, lineStr, origLongIdentOpt, colAtEndOfNamesAndResidue, residueOpt, lastDotPos, line, loc, filterCtors, resolveOverloads, false, getAllSymbols) |> Option.map (fun (items, denv, m) -> - items + items |> List.filter (fun cItem -> match cItem.Item with | Item.ModuleOrNamespaces _ @@ -1039,9 +866,9 @@ type internal TypeCheckInfo | cc -> match residueOpt |> Option.bind Seq.tryHead with | Some ''' -> - // The last token in + // The last token in // let x = 'E - // is Ident with text "'E", however it's either unfinished char literal or generic parameter. + // is Ident with text "'E", however it's either unfinished char literal or generic parameter. // We should not provide any completion in the former case, and we don't provide it for the latter one for now // because providing generic parameters list is context aware, which we don't have here (yet). None @@ -1050,7 +877,7 @@ type internal TypeCheckInfo GetDeclaredItems (parseResultsOpt, lineStr, origLongIdentOpt, colAtEndOfNamesAndResidue, residueOpt, lastDotPos, line, loc, filterCtors, resolveOverloads, isInRangeOperator, getAllSymbols) - + res |> Option.map (fun (items, denv, m) -> items, denv, completionContext, m) /// Return 'false' if this is not a completion item valid in an interface file. @@ -1058,34 +885,34 @@ type internal TypeCheckInfo match item with | Item.Types _ | Item.ModuleOrNamespaces _ -> true | _ -> false - + /// Find the most precise display context for the given line and column. - member _.GetBestDisplayEnvForPos cursorPos = GetBestEnvForPos cursorPos + member __.GetBestDisplayEnvForPos cursorPos = GetBestEnvForPos cursorPos - member _.GetVisibleNamespacesAndModulesAtPosition(cursorPos: pos) : ModuleOrNamespaceRef list = + member __.GetVisibleNamespacesAndModulesAtPosition(cursorPos: pos) : ModuleOrNamespaceRef list = let (nenv, ad), m = GetBestEnvForPos cursorPos NameResolution.GetVisibleNamespacesAndModulesAtPoint ncenv nenv m ad /// Determines if a long ident is resolvable at a specific point. - member _.IsRelativeNameResolvable(cursorPos: pos, plid: string list, item: Item) : bool = + member __.IsRelativeNameResolvable(cursorPos: pos, plid: string list, item: Item) : bool = ErrorScope.Protect Range.range0 (fun () -> /// Find items in the best naming environment. let (nenv, ad), m = GetBestEnvForPos cursorPos NameResolution.IsItemResolvable ncenv nenv m ad plid item) - (fun msg -> + (fun msg -> Trace.TraceInformation(sprintf "FCS: recovering from error in IsRelativeNameResolvable: '%s'" msg) false) /// Determines if a long ident is resolvable at a specific point. member scope.IsRelativeNameResolvableFromSymbol(cursorPos: pos, plid: string list, symbol: FSharpSymbol) : bool = scope.IsRelativeNameResolvable(cursorPos, plid, symbol.Item) - + /// Get the auto-complete items at a location - member _.GetDeclarations (parseResultsOpt, line, lineStr, partialName, getAllEntities) = + member __.GetDeclarations (parseResultsOpt, line, lineStr, partialName, getAllEntities) = let isInterfaceFile = SourceFileImpl.IsInterfaceFile mainInputFileName - ErrorScope.Protect Range.range0 + ErrorScope.Protect Range.range0 (fun () -> let declItemsOpt = @@ -1095,25 +922,25 @@ type internal TypeCheckInfo getAllEntities) match declItemsOpt with - | None -> DeclarationListInfo.Empty + | None -> FSharpDeclarationListInfo.Empty | Some (items, denv, ctx, m) -> let items = if isInterfaceFile then items |> List.filter (fun x -> IsValidSignatureFileItem x.Item) else items - let getAccessibility item = FSharpSymbol.Create(cenv, item).Accessibility + let getAccessibility item = FSharpSymbol.GetAccessibility (FSharpSymbol.Create(cenv, item)) let currentNamespaceOrModule = parseResultsOpt - |> Option.map (fun x -> x.ParseTree) - |> Option.map (fun parsedInput -> ParsedInput.GetFullNameOfSmallestModuleOrNamespaceAtPoint(mkPos line 0, parsedInput)) + |> Option.bind (fun x -> x.ParseTree) + |> Option.map (fun parsedInput -> UntypedParseImpl.GetFullNameOfSmallestModuleOrNamespaceAtPoint(parsedInput, mkPos line 0)) let isAttributeApplication = ctx = Some CompletionContext.AttributeApplication - DeclarationListInfo.Create(infoReader,m,denv,getAccessibility,items,currentNamespaceOrModule,isAttributeApplication)) - (fun msg -> + FSharpDeclarationListInfo.Create(infoReader,m,denv,getAccessibility,items,currentNamespaceOrModule,isAttributeApplication)) + (fun msg -> Trace.TraceInformation(sprintf "FCS: recovering from error in GetDeclarations: '%s'" msg) - DeclarationListInfo.Error msg) + FSharpDeclarationListInfo.Error msg) /// Get the symbols for auto-complete items at a location - member _.GetDeclarationListSymbols (parseResultsOpt, line, lineStr, partialName, getAllEntities) = + member __.GetDeclarationListSymbols (parseResultsOpt, line, lineStr, partialName, getAllEntities) = let isInterfaceFile = SourceFileImpl.IsInterfaceFile mainInputFileName - ErrorScope.Protect Range.range0 - (fun () -> + ErrorScope.Protect Range.range0 + (fun () -> let declItemsOpt = GetDeclItemsForNamesAtPosition(parseResultsOpt, Some partialName.QualifyingIdents, @@ -1122,26 +949,26 @@ type internal TypeCheckInfo getAllEntities) match declItemsOpt with - | None -> List.Empty - | Some (items, denv, _, m) -> + | None -> List.Empty + | Some (items, denv, _, m) -> let items = if isInterfaceFile then items |> List.filter (fun x -> IsValidSignatureFileItem x.Item) else items //do filtering like Declarationset let items = items |> RemoveExplicitlySuppressedCompletionItems g - - // Sort by name. For things with the same name, + + // Sort by name. For things with the same name, // - show types with fewer generic parameters first - // - show types before over other related items - they usually have very useful XmlDocs - let items = + // - show types before over other related items - they usually have very useful XmlDocs + let items = items |> List.sortBy (fun d -> - let n = - match d.Item with + let n = + match d.Item with | Item.Types (_,(TType_app(tcref,_) :: _)) -> 1 + tcref.TyparsNoRange.Length // Put delegate ctors after types, sorted by #typars. RemoveDuplicateItems will remove FakeInterfaceCtor and DelegateCtor if an earlier type is also reported with this name - | Item.FakeInterfaceCtor (TType_app(tcref,_)) + | Item.FakeInterfaceCtor (TType_app(tcref,_)) | Item.DelegateCtor (TType_app(tcref,_)) -> 1000 + tcref.TyparsNoRange.Length // Put type ctors after types, sorted by #typars. RemoveDuplicateItems will remove DefaultStructCtors if a type is also reported with this name - | Item.CtorGroup (_, (cinfo :: _)) -> 1000 + 10 * cinfo.DeclaringTyconRef.TyparsNoRange.Length + | Item.CtorGroup (_, (cinfo :: _)) -> 1000 + 10 * cinfo.DeclaringTyconRef.TyparsNoRange.Length | _ -> 0 (d.Item.DisplayName, n)) @@ -1152,124 +979,122 @@ type internal TypeCheckInfo // (We don't want types with the same display name to be grouped as overloads) let items = items |> List.groupBy (fun d -> - match d.Item with + match d.Item with | Item.Types (_,(TType_app(tcref,_) :: _)) | Item.ExnCase tcref -> tcref.LogicalName | Item.UnqualifiedType(tcref :: _) - | Item.FakeInterfaceCtor (TType_app(tcref,_)) + | Item.FakeInterfaceCtor (TType_app(tcref,_)) | Item.DelegateCtor (TType_app(tcref,_)) -> tcref.CompiledName | Item.CtorGroup (_, (cinfo :: _)) -> cinfo.ApparentEnclosingTyconRef.CompiledName | _ -> d.Item.DisplayName) // Filter out operators (and list) - let items = + let items = // Check whether this item looks like an operator. - let isOpItem(nm, item: CompletionItem list) = - match item |> List.map (fun x -> x.Item) with + let isOpItem(nm, item: CompletionItem list) = + match item |> List.map (fun x -> x.Item) with | [Item.Value _] | [Item.MethodGroup(_,[_],_)] -> IsOperatorName nm | [Item.UnionCase _] -> IsOperatorName nm - | _ -> false + | _ -> false let isFSharpList nm = (nm = "[]") // list shows up as a Type and a UnionCase, only such entity with a symbolic name, but want to filter out of intellisense - items |> List.filter (fun (nm,items) -> not (isOpItem(nm,items)) && not(isFSharpList nm)) + items |> List.filter (fun (nm,items) -> not (isOpItem(nm,items)) && not(isFSharpList nm)) - let items = + let items = // Filter out duplicate names - items |> List.map (fun (_nm,itemsWithSameName) -> + items |> List.map (fun (_nm,itemsWithSameName) -> match itemsWithSameName with | [] -> failwith "Unexpected empty bag" | items -> - items + items |> List.map (fun item -> let symbol = FSharpSymbol.Create(cenv, item.Item) FSharpSymbolUse(g, denv, symbol, ItemOccurence.Use, m))) //end filtering items) - (fun msg -> + (fun msg -> Trace.TraceInformation(sprintf "FCS: recovering from error in GetDeclarationListSymbols: '%s'" msg) []) - + /// Get the "reference resolution" tooltip for at a location - member _.GetReferenceResolutionStructuredToolTipText(line,col) = + member __.GetReferenceResolutionStructuredToolTipText(line,col) = let pos = mkPos line col - let isPosMatch(pos, ar:AssemblyReference) : bool = - let isRangeMatch = (Range.rangeContainsPos ar.Range pos) + let isPosMatch(pos, ar:AssemblyReference) : bool = + let isRangeMatch = (Range.rangeContainsPos ar.Range pos) let isNotSpecialRange = not (Range.equals ar.Range rangeStartup) && not (Range.equals ar.Range range0) && not (Range.equals ar.Range rangeCmdArgs) let isMatch = isRangeMatch && isNotSpecialRange - isMatch - - let dataTipOfReferences() = + isMatch + + let dataTipOfReferences() = let matches = match loadClosure with | None -> [] - | Some(loadClosure) -> + | Some(loadClosure) -> loadClosure.References |> List.collect snd |> List.filter(fun ar -> isPosMatch(pos, ar.originalReference)) - match matches with + match matches with | resolved::_ // Take the first seen - | [resolved] -> - let tip = wordL (TaggedText.tagStringLiteral((resolved.prepareToolTip ()).TrimEnd([|'\n'|]))) - let tip = LayoutRender.toArray tip - ToolTipText.ToolTipText [ToolTipElement.Single(tip, FSharpXmlDoc.None)] + | [resolved] -> + let tip = wordL (TaggedTextOps.tagStringLiteral((resolved.prepareToolTip ()).TrimEnd([|'\n'|]))) + FSharpStructuredToolTipText.FSharpToolTipText [FSharpStructuredToolTipElement.Single(tip, FSharpXmlDoc.None)] - | [] -> + | [] -> let matches = match loadClosure with | None -> None - | Some(loadClosure) -> + | Some(loadClosure) -> loadClosure.PackageReferences |> Array.tryFind (fun (m, _) -> Range.rangeContainsPos m pos) - match matches with - | None -> ToolTipText.ToolTipText [] - | Some (_, lines) -> + match matches with + | None -> FSharpStructuredToolTipText.FSharpToolTipText [] + | Some (_, lines) -> let lines = lines |> List.filter (fun line -> not (line.StartsWith("//")) && not (String.IsNullOrEmpty line)) - ToolTipText.ToolTipText - [ for line in lines -> - let tip = wordL (TaggedText.tagStringLiteral line) - let tip = LayoutRender.toArray tip - ToolTipElement.Single(tip, FSharpXmlDoc.None)] - - ErrorScope.Protect Range.range0 + FSharpStructuredToolTipText.FSharpToolTipText + [ for line in lines -> + let tip = wordL (TaggedTextOps.tagStringLiteral line) + FSharpStructuredToolTipElement.Single(tip, FSharpXmlDoc.None)] + + ErrorScope.Protect Range.range0 dataTipOfReferences - (fun err -> + (fun err -> Trace.TraceInformation(sprintf "FCS: recovering from error in GetReferenceResolutionStructuredToolTipText: '%s'" err) - ToolTipText [ToolTipElement.CompositionError err]) + FSharpToolTipText [FSharpStructuredToolTipElement.CompositionError err]) // GetToolTipText: return the "pop up" (or "Quick Info") text given a certain context. - member _.GetStructuredToolTipText(line, lineStr, colAtEndOfNames, names) = - let Compute() = - ErrorScope.Protect Range.range0 - (fun () -> + member __.GetStructuredToolTipText(line, lineStr, colAtEndOfNames, names) = + let Compute() = + ErrorScope.Protect Range.range0 + (fun () -> let declItemsOpt = GetDeclItemsForNamesAtPosition(None, Some names, None, None, line, lineStr, colAtEndOfNames, ResolveTypeNamesToCtors, ResolveOverloads.Yes, (fun() -> [])) match declItemsOpt with - | None -> ToolTipText [] + | None -> FSharpToolTipText [] | Some(items, denv, _, m) -> - ToolTipText(items |> List.map (fun x -> FormatStructuredDescriptionOfItem false infoReader m denv x.ItemWithInst))) + FSharpToolTipText(items |> List.map (fun x -> FormatStructuredDescriptionOfItem false infoReader m denv x.ItemWithInst))) - (fun err -> + (fun err -> Trace.TraceInformation(sprintf "FCS: recovering from error in GetStructuredToolTipText: '%s'" err) - ToolTipText [ToolTipElement.CompositionError err]) - + FSharpToolTipText [FSharpStructuredToolTipElement.CompositionError err]) + // See devdiv bug 646520 for rationale behind truncating and caching these quick infos (they can be big!) let key = line,colAtEndOfNames,lineStr - match getToolTipTextCache.TryGet (AnyCallerThread, key) with + match getToolTipTextCache.TryGet (AnyCallerThread, key) with | Some res -> res | None -> let res = Compute() getToolTipTextCache.Put(AnyCallerThread, key,res) res - member _.GetF1Keyword (line, lineStr, colAtEndOfNames, names) : string option = + member __.GetF1Keyword (line, lineStr, colAtEndOfNames, names) : string option = ErrorScope.Protect Range.range0 (fun () -> @@ -1278,38 +1103,38 @@ type internal TypeCheckInfo line, lineStr, colAtEndOfNames, ResolveTypeNamesToCtors, ResolveOverloads.No, (fun() -> [])) - match declItemsOpt with + match declItemsOpt with | None -> None | Some (items: CompletionItem list, _,_, _) -> match items with | [] -> None | [item] -> - GetF1Keyword g item.Item + GetF1Keyword g item.Item | _ -> // handle new Type() let allTypes, constr, ty = - List.fold + List.fold (fun (allTypes,constr,ty) (item: CompletionItem) -> match item.Item, constr, ty with | (Item.Types _) as t, _, None -> allTypes, constr, Some t | (Item.Types _), _, _ -> allTypes, constr, ty | (Item.CtorGroup _), None, _ -> allTypes, Some item.Item, ty - | _ -> false, None, None) + | _ -> false, None, None) (true,None,None) items match allTypes, constr, ty with - | true, Some (Item.CtorGroup(_, _) as item), _ - -> GetF1Keyword g item + | true, Some (Item.CtorGroup(_, _) as item), _ + -> GetF1Keyword g item | true, _, Some ty -> GetF1Keyword g ty | _ -> None - ) - (fun msg -> + ) + (fun msg -> Trace.TraceInformation(sprintf "FCS: recovering from error in GetF1Keyword: '%s'" msg) None) - member _.GetMethods (line, lineStr, colAtEndOfNames, namesOpt) = + member __.GetMethods (line, lineStr, colAtEndOfNames, namesOpt) = ErrorScope.Protect Range.range0 - (fun () -> + (fun () -> let declItemsOpt = GetDeclItemsForNamesAtPosition(None, namesOpt, None, None, @@ -1317,23 +1142,23 @@ type internal TypeCheckInfo ResolveOverloads.No, (fun() -> [])) match declItemsOpt with - | None -> MethodGroup("",[| |]) - | Some (items, denv, _, m) -> - // GetDeclItemsForNamesAtPosition returns Items.Types and Item.CtorGroup for `new T(|)`, + | None -> FSharpMethodGroup("",[| |]) + | Some (items, denv, _, m) -> + // GetDeclItemsForNamesAtPosition returns Items.Types and Item.CtorGroup for `new T(|)`, // the Item.Types is not needed here as it duplicates (at best) parameterless ctor. let ctors = items |> List.filter (fun x -> match x.Item with Item.CtorGroup _ -> true | _ -> false) let items = match ctors with | [] -> items | ctors -> ctors - MethodGroup.Create(infoReader, m, denv, items |> List.map (fun x -> x.ItemWithInst))) - (fun msg -> + FSharpMethodGroup.Create(infoReader, m, denv, items |> List.map (fun x -> x.ItemWithInst))) + (fun msg -> Trace.TraceInformation(sprintf "FCS: recovering from error in GetMethods: '%s'" msg) - MethodGroup(msg,[| |])) + FSharpMethodGroup(msg,[| |])) - member _.GetMethodsAsSymbols (line, lineStr, colAtEndOfNames, names) = + member __.GetMethodsAsSymbols (line, lineStr, colAtEndOfNames, names) = ErrorScope.Protect Range.range0 - (fun () -> + (fun () -> let declItemsOpt = GetDeclItemsForNamesAtPosition (None, Some names, None, None, line, lineStr, colAtEndOfNames, @@ -1347,14 +1172,14 @@ type internal TypeCheckInfo let symbols = allItems |> List.map (fun item -> FSharpSymbol.Create(cenv, item)) Some (symbols, denv, m) ) - (fun msg -> + (fun msg -> Trace.TraceInformation(sprintf "FCS: recovering from error in GetMethodsAsSymbols: '%s'" msg) None) - - member _.GetDeclarationLocation (line, lineStr, colAtEndOfNames, names, preferFlag) = - ErrorScope.Protect Range.range0 - (fun () -> - + + member __.GetDeclarationLocation (line, lineStr, colAtEndOfNames, names, preferFlag) = + ErrorScope.Protect Range.range0 + (fun () -> + let declItemsOpt = GetDeclItemsForNamesAtPosition (None, Some names, None, None, line, lineStr, colAtEndOfNames, ResolveTypeNamesToCtors, @@ -1362,7 +1187,7 @@ type internal TypeCheckInfo match declItemsOpt with | None - | Some ([], _, _, _) -> FindDeclResult.DeclNotFound (FindDeclFailureReason.Unknown "") + | Some ([], _, _, _) -> FSharpFindDeclResult.DeclNotFound (FSharpFindDeclFailureReason.Unknown "") | Some (item :: _, _, _, _) -> let getTypeVarNames (ilinfo: ILMethInfo) = let classTypeParams = ilinfo.DeclaringTyconRef.ILTyconRawMetadata.GenericParams |> List.map (fun paramDef -> paramDef.Name) @@ -1375,49 +1200,49 @@ type internal TypeCheckInfo match ilinfo.MetadataScope with | ILScopeRef.Assembly assemblyRef -> let typeVarNames = getTypeVarNames ilinfo - FindDeclExternalParam.tryOfILTypes typeVarNames ilinfo.ILMethodRef.ArgTypes + ParamTypeSymbol.tryOfILTypes typeVarNames ilinfo.ILMethodRef.ArgTypes |> Option.map (fun args -> - let externalSym = FindDeclExternalSymbol.Constructor (ilinfo.ILMethodRef.DeclaringTypeRef.FullName, args) - FindDeclResult.ExternalDecl (assemblyRef.Name, externalSym)) + let externalSym = ExternalSymbol.Constructor (ilinfo.ILMethodRef.DeclaringTypeRef.FullName, args) + FSharpFindDeclResult.ExternalDecl (assemblyRef.Name, externalSym)) | _ -> None | Item.MethodGroup (name, (ILMeth (_,ilinfo,_)) :: _, _) -> match ilinfo.MetadataScope with | ILScopeRef.Assembly assemblyRef -> let typeVarNames = getTypeVarNames ilinfo - FindDeclExternalParam.tryOfILTypes typeVarNames ilinfo.ILMethodRef.ArgTypes + ParamTypeSymbol.tryOfILTypes typeVarNames ilinfo.ILMethodRef.ArgTypes |> Option.map (fun args -> - let externalSym = FindDeclExternalSymbol.Method (ilinfo.ILMethodRef.DeclaringTypeRef.FullName, name, args, ilinfo.ILMethodRef.GenericArity) - FindDeclResult.ExternalDecl (assemblyRef.Name, externalSym)) + let externalSym = ExternalSymbol.Method (ilinfo.ILMethodRef.DeclaringTypeRef.FullName, name, args, ilinfo.ILMethodRef.GenericArity) + FSharpFindDeclResult.ExternalDecl (assemblyRef.Name, externalSym)) | _ -> None | Item.Property (name, ILProp propInfo :: _) -> - let methInfo = + let methInfo = if propInfo.HasGetter then Some propInfo.GetterMethod elif propInfo.HasSetter then Some propInfo.SetterMethod else None - + match methInfo with | Some methInfo -> match methInfo.MetadataScope with | ILScopeRef.Assembly assemblyRef -> - let externalSym = FindDeclExternalSymbol.Property (methInfo.ILMethodRef.DeclaringTypeRef.FullName, name) - Some (FindDeclResult.ExternalDecl (assemblyRef.Name, externalSym)) + let externalSym = ExternalSymbol.Property (methInfo.ILMethodRef.DeclaringTypeRef.FullName, name) + Some (FSharpFindDeclResult.ExternalDecl (assemblyRef.Name, externalSym)) | _ -> None | None -> None - + | Item.ILField (ILFieldInfo (typeInfo, fieldDef)) when not typeInfo.TyconRefOfRawMetadata.IsLocalRef -> match typeInfo.ILScopeRef with | ILScopeRef.Assembly assemblyRef -> - let externalSym = FindDeclExternalSymbol.Field (typeInfo.ILTypeRef.FullName, fieldDef.Name) - Some (FindDeclResult.ExternalDecl (assemblyRef.Name, externalSym)) + let externalSym = ExternalSymbol.Field (typeInfo.ILTypeRef.FullName, fieldDef.Name) + Some (FSharpFindDeclResult.ExternalDecl (assemblyRef.Name, externalSym)) | _ -> None - + | Item.Event (ILEvent (ILEventInfo (typeInfo, eventDef))) when not typeInfo.TyconRefOfRawMetadata.IsLocalRef -> match typeInfo.ILScopeRef with | ILScopeRef.Assembly assemblyRef -> - let externalSym = FindDeclExternalSymbol.Event (typeInfo.ILTypeRef.FullName, eventDef.Name) - Some (FindDeclResult.ExternalDecl (assemblyRef.Name, externalSym)) + let externalSym = ExternalSymbol.Event (typeInfo.ILTypeRef.FullName, eventDef.Name) + Some (FSharpFindDeclResult.ExternalDecl (assemblyRef.Name, externalSym)) | _ -> None | Item.ImplicitOp(_, {contents = Some(TraitConstraintSln.FSMethSln(_, _vref, _))}) -> @@ -1430,39 +1255,39 @@ type internal TypeCheckInfo match tr.TypeReprInfo, tr.PublicPath with | TILObjectRepr(TILObjectReprData (ILScopeRef.Assembly assemblyRef, _, _)), Some (PubPath parts) -> let fullName = parts |> String.concat "." - Some (FindDeclResult.ExternalDecl (assemblyRef.Name, FindDeclExternalSymbol.Type fullName)) + Some (FSharpFindDeclResult.ExternalDecl (assemblyRef.Name, ExternalSymbol.Type fullName)) | _ -> None | _ -> None match result with | Some x -> x | None -> match rangeOfItem g preferFlag item.Item with - | Some itemRange -> - let projectDir = FileSystem.GetDirectoryNameShim (if projectFileName = "" then mainInputFileName else projectFileName) + | Some itemRange -> + let projectDir = Filename.directoryName (if projectFileName = "" then mainInputFileName else projectFileName) let range = fileNameOfItem g (Some projectDir) itemRange item.Item - mkRange range itemRange.Start itemRange.End - |> FindDeclResult.DeclFound - | None -> - match item.Item with + mkRange range itemRange.Start itemRange.End + |> FSharpFindDeclResult.DeclFound + | None -> + match item.Item with #if !NO_EXTENSIONTYPING // provided items may have TypeProviderDefinitionLocationAttribute that binds them to some location | Item.CtorGroup (name, ProvidedMeth (_)::_ ) | Item.MethodGroup(name, ProvidedMeth (_)::_, _) - | Item.Property (name, ProvidedProp (_)::_ ) -> FindDeclFailureReason.ProvidedMember name - | Item.Event ( ProvidedEvent(_) as e ) -> FindDeclFailureReason.ProvidedMember e.EventName - | Item.ILField ( ProvidedField(_) as f ) -> FindDeclFailureReason.ProvidedMember f.FieldName - | SymbolHelpers.ItemIsProvidedType g (tcref) -> FindDeclFailureReason.ProvidedType tcref.DisplayName + | Item.Property (name, ProvidedProp (_)::_ ) -> FSharpFindDeclFailureReason.ProvidedMember name + | Item.Event ( ProvidedEvent(_) as e ) -> FSharpFindDeclFailureReason.ProvidedMember e.EventName + | Item.ILField ( ProvidedField(_) as f ) -> FSharpFindDeclFailureReason.ProvidedMember f.FieldName + | SymbolHelpers.ItemIsProvidedType g (tcref) -> FSharpFindDeclFailureReason.ProvidedType tcref.DisplayName #endif - | _ -> FindDeclFailureReason.Unknown "" - |> FindDeclResult.DeclNotFound + | _ -> FSharpFindDeclFailureReason.Unknown "" + |> FSharpFindDeclResult.DeclNotFound ) - (fun msg -> + (fun msg -> Trace.TraceInformation(sprintf "FCS: recovering from error in GetDeclarationLocation: '%s'" msg) - FindDeclResult.DeclNotFound (FindDeclFailureReason.Unknown msg)) + FSharpFindDeclResult.DeclNotFound (FSharpFindDeclFailureReason.Unknown msg)) - member _.GetSymbolUseAtLocation (line, lineStr, colAtEndOfNames, names) = - ErrorScope.Protect Range.range0 - (fun () -> + member __.GetSymbolUseAtLocation (line, lineStr, colAtEndOfNames, names) = + ErrorScope.Protect Range.range0 + (fun () -> let declItemsOpt = GetDeclItemsForNamesAtPosition (None, Some names, None, None, line, lineStr, colAtEndOfNames, ResolveTypeNamesToCtors, @@ -1470,60 +1295,58 @@ type internal TypeCheckInfo match declItemsOpt with | None | Some ([], _, _, _) -> None - | Some (item :: _, denv, _, m) -> + | Some (item :: _, denv, _, m) -> let symbol = FSharpSymbol.Create(cenv, item.Item) Some (symbol, denv, m) - ) - (fun msg -> + ) + (fun msg -> Trace.TraceInformation(sprintf "FCS: recovering from error in GetSymbolUseAtLocation: '%s'" msg) None) - member _.PartialAssemblySignatureForFile = + member __.PartialAssemblySignatureForFile = FSharpAssemblySignature(g, thisCcu, ccuSigForFile, tcImports, None, ccuSigForFile) - member _.AccessRights = tcAccessRights + member __.AccessRights = tcAccessRights - member _.ProjectOptions = projectOptions - - member _.GetReferencedAssemblies() = - [ for x in tcImports.GetImportedAssemblies() do + member __.GetReferencedAssemblies() = + [ for x in tcImports.GetImportedAssemblies() do yield FSharpAssembly(g, tcImports, x.FSharpViewOfMetadata) ] - member _.GetFormatSpecifierLocationsAndArity() = + member __.GetFormatSpecifierLocationsAndArity() = sSymbolUses.GetFormatSpecifierLocationsAndArity() - member _.GetSemanticClassification(range: range option) : SemanticClassificationItem [] = + member __.GetSemanticClassification(range: range option) : struct (range * SemanticClassificationType) [] = sResolutions.GetSemanticClassification(g, amap, sSymbolUses.GetFormatSpecifierLocationsAndArity(), range) /// The resolutions in the file - member _.ScopeResolutions = sResolutions + member __.ScopeResolutions = sResolutions /// The uses of symbols in the analyzed file - member _.ScopeSymbolUses = sSymbolUses + member __.ScopeSymbolUses = sSymbolUses - member _.TcGlobals = g + member __.TcGlobals = g - member _.TcImports = tcImports + member __.TcImports = tcImports /// The inferred signature of the file - member _.CcuSigForFile = ccuSigForFile + member __.CcuSigForFile = ccuSigForFile /// The assembly being analyzed - member _.ThisCcu = thisCcu + member __.ThisCcu = thisCcu - member _.ImplementationFile = implFileOpt + member __.ImplementationFile = implFileOpt /// All open declarations in the file, including auto open modules - member _.OpenDeclarations = openDeclarations + member __.OpenDeclarations = openDeclarations - member _.SymbolEnv = cenv + member __.SymbolEnv = cenv - override _.ToString() = "TypeCheckInfo(" + mainInputFileName + ")" + override __.ToString() = "TypeCheckInfo(" + mainInputFileName + ")" type FSharpParsingOptions = { SourceFiles: string [] ConditionalCompilationDefines: string list - ErrorSeverityOptions: FSharpDiagnosticOptions + ErrorSeverityOptions: FSharpErrorSeverityOptions IsInteractive: bool LightSyntax: bool option CompilingFsLib: bool @@ -1536,7 +1359,7 @@ type FSharpParsingOptions = static member Default = { SourceFiles = Array.empty ConditionalCompilationDefines = [] - ErrorSeverityOptions = FSharpDiagnosticOptions.Default + ErrorSeverityOptions = FSharpErrorSeverityOptions.Default IsInteractive = false LightSyntax = None CompilingFsLib = false @@ -1562,10 +1385,10 @@ type FSharpParsingOptions = IsExe = tcConfigB.target.IsExe } -module internal ParseAndCheckFile = +module internal ParseAndCheckFile = /// Error handler for parsing & type checking while processing a single file - type ErrorHandler(reportErrors, mainInputFileName, errorSeverityOptions: FSharpDiagnosticOptions, sourceText: ISourceText, suggestNamesForErrors: bool) = + type ErrorHandler(reportErrors, mainInputFileName, errorSeverityOptions: FSharpErrorSeverityOptions, sourceText: ISourceText, suggestNamesForErrors: bool) = let mutable options = errorSeverityOptions let errorsAndWarningsCollector = new ResizeArray<_>() let mutable errorCount = 0 @@ -1585,9 +1408,9 @@ module internal ParseAndCheckFile = else exn if reportErrors then let report exn = - for ei in DiagnosticHelpers.ReportDiagnostic (options, false, mainInputFileName, fileInfo, (exn, sev), suggestNamesForErrors) do + for ei in ErrorHelpers.ReportError (options, false, mainInputFileName, fileInfo, (exn, sev), suggestNamesForErrors) do errorsAndWarningsCollector.Add ei - if sev = FSharpDiagnosticSeverity.Error then + if sev = FSharpErrorSeverity.Error then errorCount <- errorCount + 1 match exn with @@ -1598,23 +1421,23 @@ module internal ParseAndCheckFile = let errorLogger = { new ErrorLogger("ErrorHandler") with - member x.DiagnosticSink (exn, severity) = diagnosticSink severity exn + member x.DiagnosticSink (exn, isError) = diagnosticSink (if isError then FSharpErrorSeverity.Error else FSharpErrorSeverity.Warning) exn member x.ErrorCount = errorCount } // Public members - member _.ErrorLogger = errorLogger + member __.ErrorLogger = errorLogger - member _.CollectedDiagnostics = errorsAndWarningsCollector.ToArray() + member __.CollectedDiagnostics = errorsAndWarningsCollector.ToArray() - member _.ErrorCount = errorCount + member __.ErrorCount = errorCount - member _.ErrorSeverityOptions with set opts = options <- opts + member __.ErrorSeverityOptions with set opts = options <- opts - member _.AnyErrors = errorCount > 0 + member __.AnyErrors = errorCount > 0 let getLightSyntaxStatus fileName options = let lower = String.lowercase fileName - let lightOnByDefault = List.exists (FileSystemUtils.checkSuffix lower) FSharpLightSyntaxFileSuffixes + let lightOnByDefault = List.exists (Filename.checkSuffix lower) FSharpLightSyntaxFileSuffixes let lightStatus = if lightOnByDefault then (options.LightSyntax <> Some false) else (options.LightSyntax = Some true) LightSyntaxStatus(lightStatus, true) @@ -1627,7 +1450,7 @@ module internal ParseAndCheckFile = // Note: we don't really attempt to intern strings across a large scope. let lexResourceManager = new Lexhelp.LexResourceManager() - + // When analyzing files using ParseOneFile, i.e. for the use of editing clients, we do not apply line directives. // TODO(pathmap): expose PathMap on the service API, and thread it through here let lexargs = mkLexargs(defines, lightStatus, lexResourceManager, [], errHandler.ErrorLogger, PathMap.empty) @@ -1637,11 +1460,11 @@ module internal ParseAndCheckFile = (fun _ -> tokenizer.GetToken()) // Public callers are unable to answer LanguageVersion feature support questions. - // External Tools including the VS IDE will enable the default LanguageVersion + // External Tools including the VS IDE will enable the default LanguageVersion let isFeatureSupported (_featureId:LanguageFeature) = true let createLexbuf sourceText = - UnicodeLexing.SourceTextAsLexbuf(true, isFeatureSupported, sourceText) + UnicodeLexing.SourceTextAsLexbuf(isFeatureSupported, sourceText) let matchBraces(sourceText: ISourceText, fileName, options: FSharpParsingOptions, userOpName: string, suggestNamesForErrors: bool) = let delayedLogger = CapturingErrorLogger("matchBraces") @@ -1649,12 +1472,12 @@ module internal ParseAndCheckFile = use _unwindBP = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse Trace.TraceInformation("FCS: {0}.{1} ({2})", userOpName, "matchBraces", fileName) - + // Make sure there is an ErrorLogger installed whenever we do stuff that might record errors, even if we ultimately ignore the errors let delayedLogger = CapturingErrorLogger("matchBraces") use _unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> delayedLogger) use _unwindBP = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse - + let matchingBraces = new ResizeArray<_>() Lexhelp.usingLexbufForParsing(createLexbuf sourceText, fileName) (fun lexbuf -> let errHandler = ErrorHandler(false, fileName, options.ErrorSeverityOptions, sourceText, suggestNamesForErrors) @@ -1687,9 +1510,9 @@ module internal ParseAndCheckFile = // For INTERP_STRING_PART and INTERP_STRING_END grab the one character // range that corresponds to the "}" at the start of the token let m2Start = - match tok2 with + match tok2 with | INTERP_STRING_PART _ - | INTERP_STRING_END _ -> + | INTERP_STRING_END _ -> Range.mkFileIndexRange m2.FileIndex m2.Start (mkPos m2.Start.Line (m2.Start.Column+1)) | _ -> m2 @@ -1697,9 +1520,9 @@ module internal ParseAndCheckFile = // INTERP_STRING_PART corresponds to both "} ... {" i.e. both the completion // of a match and the start of a potential new one. - let stackAfterMatch = - match tok2 with - | INTERP_STRING_PART _ -> + let stackAfterMatch = + match tok2 with + | INTERP_STRING_PART _ -> let m2End = Range.mkFileIndexRange m2.FileIndex (mkPos m2.End.Line (max (m2.End.Column-1) 0)) m2.End (tok2, m2End) :: stackAfterMatch | _ -> stackAfterMatch @@ -1741,49 +1564,49 @@ module internal ParseAndCheckFile = ParseAndCheckInputs.IsScript(fileName) let isExe = options.IsExe - try - ParseInput(lexfun, errHandler.ErrorLogger, lexbuf, None, fileName, (isLastCompiland, isExe)) + try + Some (ParseInput(lexfun, errHandler.ErrorLogger, lexbuf, None, fileName, (isLastCompiland, isExe))) with e -> errHandler.ErrorLogger.StopProcessingRecovery e Range.range0 // don't re-raise any exceptions, we must return None. - EmptyParsedInput(fileName, (isLastCompiland, isExe))) + None) errHandler.CollectedDiagnostics, parseResult, errHandler.AnyErrors - let ApplyLoadClosure(tcConfig, parsedMainInput, mainInputFileName, loadClosure: LoadClosure option, tcImports: TcImports, backgroundDiagnostics) = + let ApplyLoadClosure(tcConfig, parsedMainInput, mainInputFileName, loadClosure: LoadClosure option, tcImports: TcImports, backgroundDiagnostics) = // If additional references were brought in by the preprocessor then we need to process them match loadClosure with | Some loadClosure -> // Play unresolved references for this file. tcImports.ReportUnresolvedAssemblyReferences(loadClosure.UnresolvedReferences) - + // If there was a loadClosure, replay the errors and warnings from resolution, excluding parsing loadClosure.LoadClosureRootFileDiagnostics |> List.iter diagnosticSink - + let fileOfBackgroundError err = (match GetRangeOfDiagnostic (fst err) with Some m-> m.FileName | None -> null) - let sameFile file hashLoadInFile = + let sameFile file hashLoadInFile = (0 = String.Compare(hashLoadInFile, file, StringComparison.OrdinalIgnoreCase)) - + // walk the list of #loads and keep the ones for this file. - let hashLoadsInFile = - loadClosure.SourceFiles + let hashLoadsInFile = + loadClosure.SourceFiles |> List.filter(fun (_,ms) -> ms<>[]) // #loaded file, ranges of #load - - let hashLoadBackgroundDiagnostics, otherBackgroundDiagnostics = - backgroundDiagnostics - |> Array.partition (fun backgroundError -> - hashLoadsInFile + + let hashLoadBackgroundDiagnostics, otherBackgroundDiagnostics = + backgroundDiagnostics + |> Array.partition (fun backgroundError -> + hashLoadsInFile |> List.exists (fst >> sameFile (fileOfBackgroundError backgroundError))) - + // Create single errors for the #load-ed files. // Group errors and warnings by file name. - let hashLoadBackgroundDiagnosticsGroupedByFileName = - hashLoadBackgroundDiagnostics - |> Array.map(fun err -> fileOfBackgroundError err,err) + let hashLoadBackgroundDiagnosticsGroupedByFileName = + hashLoadBackgroundDiagnostics + |> Array.map(fun err -> fileOfBackgroundError err,err) |> Array.groupBy fst // fileWithErrors, error list - - // Join the sets and report errors. + + // Join the sets and report errors. // It is by-design that these messages are only present in the language service. A true build would report the errors at their // spots in the individual source files. for fileOfHashLoad, rangesOfHashLoad in hashLoadsInFile do @@ -1791,32 +1614,31 @@ module internal ParseAndCheckFile = if sameFile file fileOfHashLoad then for rangeOfHashLoad in rangesOfHashLoad do // Handle the case of two #loads of the same file let diagnostics = errorGroupedByFileName |> Array.map(fun (_,(pe,f)) -> pe.Exception,f) // Strip the build phase here. It will be replaced, in total, with TypeCheck - let errors = [ for err, sev in diagnostics do if sev = FSharpDiagnosticSeverity.Error then yield err ] - let warnings = [ for err, sev in diagnostics do if sev = FSharpDiagnosticSeverity.Warning then yield err ] - + let errors = [ for err, sev in diagnostics do if sev = FSharpErrorSeverity.Error then yield err ] + let warnings = [ for err, sev in diagnostics do if sev = FSharpErrorSeverity.Warning then yield err ] + let message = HashLoadedSourceHasIssues(warnings,errors,rangeOfHashLoad) - if isNil errors then + if isNil errors then warning message - else + else errorR message - + // Replay other background errors. for phasedError, sev in otherBackgroundDiagnostics do - if sev = FSharpDiagnosticSeverity.Warning then - warning phasedError.Exception - else + if sev = FSharpErrorSeverity.Warning then + warning phasedError.Exception + else errorR phasedError.Exception - - | None -> + + | None -> // For non-scripts, check for disallow #r and #load. ApplyMetaCommandsFromInputToTcConfig (tcConfig, parsedMainInput, Path.GetDirectoryName mainInputFileName, tcImports.DependencyProvider) |> ignore - + // Type check a single file against an initial context, gleaning both errors and intellisense information. let CheckOneFile (parseResults: FSharpParseFileResults, sourceText: ISourceText, mainInputFileName: string, - projectOptions: FSharpProjectOptions, projectFileName: string, tcConfig: TcConfig, tcGlobals: TcGlobals, @@ -1824,44 +1646,52 @@ module internal ParseAndCheckFile = tcState: TcState, moduleNamesDict: ModuleNamesDict, loadClosure: LoadClosure option, - // These are the errors and warnings seen by the background compiler for the entire antecedent - backgroundDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity)[], - suggestNamesForErrors: bool) = + // These are the errors and warnings seen by the background compiler for the entire antecedent + backgroundDiagnostics: (PhasedDiagnostic * FSharpErrorSeverity)[], + reactorOps: IReactorOperations, + userOpName: string, + suggestNamesForErrors: bool) = async { - cancellable { use _logBlock = Logger.LogBlock LogCompilerFunctionId.Service_CheckOneFile - let parsedMainInput = parseResults.ParseTree + match parseResults.ParseTree with + // When processing the following cases, we don't need to type-check + | None -> return [||], Result.Error() + + // Run the type checker... + | Some parsedMainInput -> - // Initialize the error handler + // Initialize the error handler let errHandler = new ErrorHandler(true, mainInputFileName, tcConfig.errorSeverityOptions, sourceText, suggestNamesForErrors) - + use _unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _oldLogger -> errHandler.ErrorLogger) use _unwindBP = PushThreadBuildPhaseUntilUnwind BuildPhase.TypeCheck - + // Apply nowarns to tcConfig (may generate errors, so ensure errorLogger is installed) let tcConfig = ApplyNoWarnsToTcConfig (tcConfig, parsedMainInput,Path.GetDirectoryName mainInputFileName) - + // update the error handler with the modified tcConfig errHandler.ErrorSeverityOptions <- tcConfig.errorSeverityOptions - + // Play background errors and warnings for this file. - do for err, severity in backgroundDiagnostics do - diagnosticSink (err, severity) - + for err, sev in backgroundDiagnostics do + diagnosticSink (err, (sev = FSharpErrorSeverity.Error)) + // If additional references were brought in by the preprocessor then we need to process them ApplyLoadClosure(tcConfig, parsedMainInput, mainInputFileName, loadClosure, tcImports, backgroundDiagnostics) - - // A problem arises with nice name generation, which really should only - // be done in the backend, but is also done in the typechecker for better or worse. - // If we don't do this the NNG accumulates data and we get a memory leak. + + // A problem arises with nice name generation, which really should only + // be done in the backend, but is also done in the typechecker for better or worse. + // If we don't do this the NNG accumulates data and we get a memory leak. tcState.NiceNameGenerator.Reset() - - // Typecheck the real input. + + // Typecheck the real input. let sink = TcResultsSinkImpl(tcGlobals, sourceText = sourceText) + let! ct = Async.CancellationToken + let! resOpt = - cancellable { + async { try let checkForErrors() = (parseResults.ParseHadErrors || errHandler.ErrorCount > 0) @@ -1869,165 +1699,186 @@ module internal ParseAndCheckFile = // Typecheck is potentially a long running operation. We chop it up here with an Eventually continuation and, at each slice, give a chance // for the client to claim the result as obsolete and have the typecheck abort. - - use _unwind = new CompilationGlobalsScope (errHandler.ErrorLogger, BuildPhase.TypeCheck) - let! result = - TypeCheckOneInputAndFinish(checkForErrors, tcConfig, tcImports, tcGlobals, None, TcResultsSink.WithSink sink, tcState, parsedMainInput) - + + let! result = + TypeCheckOneInputAndFinishEventually(checkForErrors, tcConfig, tcImports, tcGlobals, None, TcResultsSink.WithSink sink, tcState, parsedMainInput) + |> Eventually.repeatedlyProgressUntilDoneOrTimeShareOverOrCanceled maxTimeShareMilliseconds ct (fun ctok f -> f ctok) + |> Eventually.forceAsync + (fun work -> + reactorOps.EnqueueAndAwaitOpAsync(userOpName, "CheckOneFile.Fragment", mainInputFileName, + fun ctok -> + // This work is not cancellable + let res = + // Reinstall the compilation globals each time we start or restart + use unwind = new CompilationGlobalsScope (errHandler.ErrorLogger, BuildPhase.TypeCheck) + work ctok + cancellable.Return(res) + )) + return result with e -> errorR e - let mty = Construct.NewEmptyModuleOrNamespaceType ModuleOrNamespaceKind.Namespace - return ((tcState.TcEnvFromSignatures, EmptyTopAttrs, [], [ mty ]), tcState) - } - + let mty = Construct.NewEmptyModuleOrNamespaceType Namespace + return Some((tcState.TcEnvFromSignatures, EmptyTopAttrs, [], [ mty ]), tcState) + } + let errors = errHandler.CollectedDiagnostics - - let res = + + let res = match resOpt with - | ((tcEnvAtEnd, _, implFiles, ccuSigsForFiles), tcState) -> - TypeCheckInfo(tcConfig, tcGlobals, - List.head ccuSigsForFiles, + | Some ((tcEnvAtEnd, _, implFiles, ccuSigsForFiles), tcState) -> + TypeCheckInfo(tcConfig, tcGlobals, + List.head ccuSigsForFiles, tcState.Ccu, tcImports, tcEnvAtEnd.AccessRights, - projectFileName, - mainInputFileName, - projectOptions, - sink.GetResolutions(), + projectFileName, + mainInputFileName, + sink.GetResolutions(), sink.GetSymbolUses(), tcEnvAtEnd.NameEnv, loadClosure, List.tryHead implFiles, - sink.GetOpenDeclarations()) + sink.GetOpenDeclarations()) + |> Result.Ok + | None -> + Result.Error() return errors, res - } + } -[] -type FSharpProjectContext(thisCcu: CcuThunk, assemblies: FSharpAssembly list, ad: AccessorDomain, projectOptions: FSharpProjectOptions) = - member _.ProjectOptions = projectOptions +[] +type FSharpProjectContext(thisCcu: CcuThunk, assemblies: FSharpAssembly list, ad: AccessorDomain) = - member _.GetReferencedAssemblies() = assemblies + /// Get the assemblies referenced + member __.GetReferencedAssemblies() = assemblies - member _.AccessibilityRights = FSharpAccessibilityRights(thisCcu, ad) + member __.AccessibilityRights = FSharpAccessibilityRights(thisCcu, ad) [] /// A live object of this type keeps the background corresponding background builder (and type providers) alive (through reference-counting). // -// Note: objects returned by the methods of this type do not require the corresponding background builder to be alive. +// There is an important property of all the objects returned by the methods of this type: they do not require +// the corresponding background builder to be alive. That is, they are simply plain-old-data through pre-formatting of all result text. type FSharpCheckFileResults - (filename: string, - errors: FSharpDiagnostic[], - scopeOptX: TypeCheckInfo option, - dependencyFiles: string[], - builderX: IncrementalBuilder option, + (filename: string, + errors: FSharpErrorInfo[], + scopeOptX: TypeCheckInfo option, + dependencyFiles: string[], + builderX: IncrementalBuilder option, keepAssemblyContents: bool) = - // Here 'details' keeps 'builder' alive let details = match scopeOptX with None -> None | Some scopeX -> Some (scopeX, builderX) // Run an operation that can be called from any thread - let threadSafeOp dflt f = + let threadSafeOp dflt f = match details with | None -> dflt() | Some (scope, _builderOpt) -> f scope - member _.Diagnostics = errors + member __.Errors = errors - member _.HasFullTypeCheckInfo = details.IsSome - - member _.TryGetCurrentTcImports () = - match details with - | None -> None - | Some (scope, _builderOpt) -> Some scope.TcImports + member __.HasFullTypeCheckInfo = details.IsSome + + member __.TryGetCurrentTcImports () = + match builderX with + | Some builder -> builder.TryGetCurrentTcImports () + | _ -> None /// Intellisense autocompletions - member _.GetDeclarationListInfo(parsedFileResults, line, lineText, partialName, ?getAllEntities) = + member __.GetDeclarationListInfo(parsedFileResults, line, lineText, partialName, ?getAllEntities) = let getAllEntities = defaultArg getAllEntities (fun() -> []) - threadSafeOp (fun () -> DeclarationListInfo.Empty) (fun scope -> + threadSafeOp (fun () -> FSharpDeclarationListInfo.Empty) (fun scope -> scope.GetDeclarations(parsedFileResults, line, lineText, partialName, getAllEntities)) - member _.GetDeclarationListSymbols(parsedFileResults, line, lineText, partialName, ?getAllEntities) = + member __.GetDeclarationListSymbols(parsedFileResults, line, lineText, partialName, ?getAllEntities) = let getAllEntities = defaultArg getAllEntities (fun() -> []) - threadSafeOp (fun () -> []) (fun scope -> + threadSafeOp (fun () -> []) (fun scope -> scope.GetDeclarationListSymbols(parsedFileResults, line, lineText, partialName, getAllEntities)) - /// Resolve the names at the given location to give a data tip - member _.GetToolTip(line, colAtEndOfNames, lineText, names, tokenTag) = - let dflt = ToolTipText [] - match tokenTagToTokenId tokenTag with - | TOKEN_IDENT -> - threadSafeOp (fun () -> dflt) (fun scope -> + /// Resolve the names at the given location to give a data tip + member __.GetStructuredToolTipText(line, colAtEndOfNames, lineText, names, tokenTag) = + let dflt = FSharpToolTipText [] + match tokenTagToTokenId tokenTag with + | TOKEN_IDENT -> + threadSafeOp (fun () -> dflt) (fun scope -> scope.GetStructuredToolTipText(line, lineText, colAtEndOfNames, names)) - | TOKEN_STRING | TOKEN_STRING_TEXT -> + | TOKEN_STRING | TOKEN_STRING_TEXT -> threadSafeOp (fun () -> dflt) (fun scope -> scope.GetReferenceResolutionStructuredToolTipText(line, colAtEndOfNames) ) - | _ -> + | _ -> dflt - member _.GetF1Keyword (line, colAtEndOfNames, lineText, names) = - threadSafeOp (fun () -> None) (fun scope -> + member info.GetToolTipText(line, colAtEndOfNames, lineText, names, tokenTag) = + info.GetStructuredToolTipText(line, colAtEndOfNames, lineText, names, tokenTag) + |> Tooltips.ToFSharpToolTipText + + member __.GetF1Keyword (line, colAtEndOfNames, lineText, names) = + threadSafeOp (fun () -> None) (fun scope -> scope.GetF1Keyword (line, lineText, colAtEndOfNames, names)) // Resolve the names at the given location to a set of methods - member _.GetMethods(line, colAtEndOfNames, lineText, names) = - let dflt = MethodGroup("",[| |]) - threadSafeOp (fun () -> dflt) (fun scope -> + member __.GetMethods(line, colAtEndOfNames, lineText, names) = + let dflt = FSharpMethodGroup("",[| |]) + threadSafeOp (fun () -> dflt) (fun scope -> scope.GetMethods (line, lineText, colAtEndOfNames, names)) - - member _.GetDeclarationLocation (line, colAtEndOfNames, lineText, names, ?preferFlag) = - let dflt = FindDeclResult.DeclNotFound (FindDeclFailureReason.Unknown "") - threadSafeOp (fun () -> dflt) (fun scope -> + + member __.GetDeclarationLocation (line, colAtEndOfNames, lineText, names, ?preferFlag) = + let dflt = FSharpFindDeclResult.DeclNotFound (FSharpFindDeclFailureReason.Unknown "") + threadSafeOp (fun () -> dflt) (fun scope -> scope.GetDeclarationLocation (line, lineText, colAtEndOfNames, names, preferFlag)) - member _.GetSymbolUseAtLocation (line, colAtEndOfNames, lineText, names) = - threadSafeOp (fun () -> None) (fun scope -> + member __.GetSymbolUseAtLocation (line, colAtEndOfNames, lineText, names) = + threadSafeOp (fun () -> None) (fun scope -> scope.GetSymbolUseAtLocation (line, lineText, colAtEndOfNames, names) |> Option.map (fun (sym,denv,m) -> FSharpSymbolUse(scope.TcGlobals,denv,sym,ItemOccurence.Use,m))) - member _.GetMethodsAsSymbols (line, colAtEndOfNames, lineText, names) = - threadSafeOp (fun () -> None) (fun scope -> + member __.GetMethodsAsSymbols (line, colAtEndOfNames, lineText, names) = + threadSafeOp (fun () -> None) (fun scope -> scope.GetMethodsAsSymbols (line, lineText, colAtEndOfNames, names) |> Option.map (fun (symbols,denv,m) -> symbols |> List.map (fun sym -> FSharpSymbolUse(scope.TcGlobals,denv,sym,ItemOccurence.Use,m)))) - member _.GetSymbolAtLocation (line, colAtEndOfNames, lineStr, names) = - threadSafeOp (fun () -> None) (fun scope -> + member __.GetSymbolAtLocation (line, colAtEndOfNames, lineStr, names) = + threadSafeOp (fun () -> None) (fun scope -> scope.GetSymbolUseAtLocation (line, lineStr, colAtEndOfNames, names) |> Option.map (fun (sym,_,_) -> sym)) - member info.GetFormatSpecifierLocations() = + member info.GetFormatSpecifierLocations() = info.GetFormatSpecifierLocationsAndArity() |> Array.map fst - member _.GetFormatSpecifierLocationsAndArity() = - threadSafeOp - (fun () -> [| |]) - (fun scope -> + member __.GetFormatSpecifierLocationsAndArity() = + threadSafeOp + (fun () -> [| |]) + (fun scope -> + // This operation is not asynchronous - GetFormatSpecifierLocationsAndArity can be run on the calling thread scope.GetFormatSpecifierLocationsAndArity()) - member _.GetSemanticClassification(range: range option) = - threadSafeOp - (fun () -> [| |]) - (fun scope -> + member __.GetSemanticClassification(range: range option) = + threadSafeOp + (fun () -> [| |]) + (fun scope -> + // This operation is not asynchronous - GetSemanticClassification can be run on the calling thread scope.GetSemanticClassification(range)) - - member _.PartialAssemblySignature = - threadSafeOp - (fun () -> failwith "not available") - (fun scope -> + + member __.PartialAssemblySignature = + threadSafeOp + (fun () -> failwith "not available") + (fun scope -> + // This operation is not asynchronous - PartialAssemblySignature can be run on the calling thread scope.PartialAssemblySignatureForFile) - member _.ProjectContext = - threadSafeOp - (fun () -> failwith "not available") - (fun scope -> - FSharpProjectContext(scope.ThisCcu, scope.GetReferencedAssemblies(), scope.AccessRights, scope.ProjectOptions)) + member __.ProjectContext = + threadSafeOp + (fun () -> failwith "not available") + (fun scope -> + // This operation is not asynchronous - GetReferencedAssemblies can be run on the calling thread + FSharpProjectContext(scope.ThisCcu, scope.GetReferencedAssemblies(), scope.AccessRights)) - member _.DependencyFiles = dependencyFiles + member __.DependencyFiles = dependencyFiles - member _.GetAllUsesOfAllSymbolsInFile(?cancellationToken: CancellationToken ) = + member __.GetAllUsesOfAllSymbolsInFile(?cancellationToken: CancellationToken ) = threadSafeOp (fun () -> Seq.empty) (fun scope -> @@ -2041,106 +1892,91 @@ type FSharpCheckFileResults FSharpSymbolUse(scope.TcGlobals, symbolUse.DisplayEnv, symbol, symbolUse.ItemOccurence, symbolUse.Range) }) - member _.GetUsesOfSymbolInFile(symbol:FSharpSymbol, ?cancellationToken: CancellationToken) = - threadSafeOp - (fun () -> [| |]) - (fun scope -> + member __.GetUsesOfSymbolInFile(symbol:FSharpSymbol, ?cancellationToken: CancellationToken) = + threadSafeOp + (fun () -> [| |]) + (fun scope -> [| for symbolUse in scope.ScopeSymbolUses.GetUsesOfSymbol(symbol.Item) |> Seq.distinctBy (fun symbolUse -> symbolUse.ItemOccurence, symbolUse.Range) do cancellationToken |> Option.iter (fun ct -> ct.ThrowIfCancellationRequested()) if symbolUse.ItemOccurence <> ItemOccurence.RelatedText then yield FSharpSymbolUse(scope.TcGlobals, symbolUse.DisplayEnv, symbol, symbolUse.ItemOccurence, symbolUse.Range) |]) - member _.GetVisibleNamespacesAndModulesAtPoint(pos: pos) = - threadSafeOp - (fun () -> [| |]) + member __.GetVisibleNamespacesAndModulesAtPoint(pos: pos) = + threadSafeOp + (fun () -> [| |]) (fun scope -> scope.GetVisibleNamespacesAndModulesAtPosition(pos) |> List.toArray) - member _.IsRelativeNameResolvable(cursorPos: pos, plid: string list, item: Item) = - threadSafeOp (fun () -> true) (fun scope -> + member __.IsRelativeNameResolvable(cursorPos: pos, plid: string list, item: Item) = + threadSafeOp (fun () -> true) (fun scope -> scope.IsRelativeNameResolvable(cursorPos, plid, item)) - member _.IsRelativeNameResolvableFromSymbol(cursorPos: pos, plid: string list, symbol: FSharpSymbol) = - threadSafeOp (fun () -> true) (fun scope -> + member __.IsRelativeNameResolvableFromSymbol(cursorPos: pos, plid: string list, symbol: FSharpSymbol) = + threadSafeOp (fun () -> true) (fun scope -> scope.IsRelativeNameResolvableFromSymbol(cursorPos, plid, symbol)) - - member _.GetDisplayContextForPos(cursorPos: pos) = - threadSafeOp (fun () -> None) (fun scope -> + + member __.GetDisplayContextForPos(cursorPos: pos) = + threadSafeOp (fun () -> None) (fun scope -> let (nenv, _), _ = scope.GetBestDisplayEnvForPos cursorPos Some(FSharpDisplayContext(fun _ -> nenv.DisplayEnv))) - - member _.GenerateSignature () = - threadSafeOp (fun () -> None) (fun scope -> - scope.ImplementationFile - |> Option.map (fun implFile -> - let denv = DisplayEnv.InitialForSigFileGeneration scope.TcGlobals - let infoReader = InfoReader(scope.TcGlobals, scope.TcImports.GetImportMap()) - let (TImplFile (_, _, mexpr, _, _, _)) = implFile - let layout = NicePrint.layoutInferredSigOfModuleExpr true denv infoReader AccessibleFromSomewhere range0 mexpr - layout |> LayoutRender.showL |> SourceText.ofString - ) - ) - - member _.ImplementationFile = + + member __.ImplementationFile = if not keepAssemblyContents then invalidOp "The 'keepAssemblyContents' flag must be set to true on the FSharpChecker in order to access the checked contents of assemblies" - scopeOptX - |> Option.map (fun scope -> + scopeOptX + |> Option.map (fun scope -> let cenv = SymbolEnv(scope.TcGlobals, scope.ThisCcu, Some scope.CcuSigForFile, scope.TcImports) scope.ImplementationFile |> Option.map (fun implFile -> FSharpImplementationFileContents(cenv, implFile))) |> Option.defaultValue None - member _.OpenDeclarations = - scopeOptX - |> Option.map (fun scope -> + member __.OpenDeclarations = + scopeOptX + |> Option.map (fun scope -> let cenv = scope.SymbolEnv - scope.OpenDeclarations |> Array.map (fun x -> + scope.OpenDeclarations |> Array.map (fun x -> let modules = x.Modules |> List.map (fun x -> FSharpEntity(cenv, x)) let types = x.Types |> List.map (fun x -> FSharpType(cenv, x)) FSharpOpenDeclaration(x.Target, x.Range, modules, types, x.AppliedScope, x.IsOwnNamespace))) |> Option.defaultValue [| |] - override _.ToString() = "FSharpCheckFileResults(" + filename + ")" + override __.ToString() = "FSharpCheckFileResults(" + filename + ")" - static member MakeEmpty(filename: string, creationErrors: FSharpDiagnostic[], keepAssemblyContents) = + static member MakeEmpty(filename: string, creationErrors: FSharpErrorInfo[], keepAssemblyContents) = FSharpCheckFileResults (filename, creationErrors, None, [| |], None, keepAssemblyContents) - static member JoinErrors(isIncompleteTypeCheckEnvironment, - creationErrors: FSharpDiagnostic[], - parseErrors: FSharpDiagnostic[], - tcErrors: FSharpDiagnostic[]) = - [| yield! creationErrors + static member JoinErrors(isIncompleteTypeCheckEnvironment, + creationErrors: FSharpErrorInfo[], + parseErrors: FSharpErrorInfo[], + tcErrors: FSharpErrorInfo[]) = + [| yield! creationErrors yield! parseErrors - if isIncompleteTypeCheckEnvironment then + if isIncompleteTypeCheckEnvironment then yield! Seq.truncate maxTypeCheckErrorsOutOfProjectContext tcErrors - else + else yield! tcErrors |] static member Make - (mainInputFileName: string, - projectFileName, - tcConfig, tcGlobals, - isIncompleteTypeCheckEnvironment: bool, - builder: IncrementalBuilder, - projectOptions, - dependencyFiles, - creationErrors: FSharpDiagnostic[], - parseErrors: FSharpDiagnostic[], - tcErrors: FSharpDiagnostic[], + (mainInputFileName: string, + projectFileName, + tcConfig, tcGlobals, + isIncompleteTypeCheckEnvironment: bool, + builder: IncrementalBuilder, + dependencyFiles, + creationErrors: FSharpErrorInfo[], + parseErrors: FSharpErrorInfo[], + tcErrors: FSharpErrorInfo[], keepAssemblyContents, - ccuSigForFile, - thisCcu, tcImports, tcAccessRights, - sResolutions, sSymbolUses, + ccuSigForFile, + thisCcu, tcImports, tcAccessRights, + sResolutions, sSymbolUses, sFallback, loadClosure, - implFileOpt, - openDeclarations) = - - let tcFileInfo = - TypeCheckInfo(tcConfig, tcGlobals, ccuSigForFile, thisCcu, tcImports, tcAccessRights, - projectFileName, mainInputFileName, - projectOptions, - sResolutions, sSymbolUses, - sFallback, loadClosure, - implFileOpt, openDeclarations) + implFileOpt, + openDeclarations) = + let tcFileInfo = + TypeCheckInfo(tcConfig, tcGlobals, ccuSigForFile, thisCcu, tcImports, tcAccessRights, + projectFileName, mainInputFileName, sResolutions, sSymbolUses, + sFallback, loadClosure, + implFileOpt, openDeclarations) + let errors = FSharpCheckFileResults.JoinErrors(isIncompleteTypeCheckEnvironment, creationErrors, parseErrors, tcErrors) FSharpCheckFileResults (mainInputFileName, errors, Some tcFileInfo, dependencyFiles, Some builder, keepAssemblyContents) @@ -2155,85 +1991,95 @@ type FSharpCheckFileResults tcState: TcState, moduleNamesDict: ModuleNamesDict, loadClosure: LoadClosure option, - backgroundDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity)[], - isIncompleteTypeCheckEnvironment: bool, - projectOptions: FSharpProjectOptions, - builder: IncrementalBuilder, - dependencyFiles: string[], - creationErrors: FSharpDiagnostic[], - parseErrors: FSharpDiagnostic[], + backgroundDiagnostics: (PhasedDiagnostic * FSharpErrorSeverity)[], + reactorOps: IReactorOperations, + userOpName: string, + isIncompleteTypeCheckEnvironment: bool, + builder: IncrementalBuilder, + dependencyFiles: string[], + creationErrors: FSharpErrorInfo[], + parseErrors: FSharpErrorInfo[], keepAssemblyContents: bool, - suggestNamesForErrors: bool) = - cancellable { - let! tcErrors, tcFileInfo = + suggestNamesForErrors: bool) = + async { + let! tcErrors, tcFileInfo = ParseAndCheckFile.CheckOneFile - (parseResults, sourceText, mainInputFileName, projectOptions, - projectFileName, tcConfig, tcGlobals, tcImports, - tcState, moduleNamesDict, loadClosure, backgroundDiagnostics, suggestNamesForErrors) - let errors = FSharpCheckFileResults.JoinErrors(isIncompleteTypeCheckEnvironment, creationErrors, parseErrors, tcErrors) - let results = FSharpCheckFileResults (mainInputFileName, errors, Some tcFileInfo, dependencyFiles, Some builder, keepAssemblyContents) - return results + (parseResults, sourceText, mainInputFileName, projectFileName, tcConfig, tcGlobals, tcImports, + tcState, moduleNamesDict, loadClosure, backgroundDiagnostics, reactorOps, + userOpName, suggestNamesForErrors) + match tcFileInfo with + | Result.Error () -> + return FSharpCheckFileAnswer.Aborted + | Result.Ok tcFileInfo -> + let errors = FSharpCheckFileResults.JoinErrors(isIncompleteTypeCheckEnvironment, creationErrors, parseErrors, tcErrors) + let results = FSharpCheckFileResults (mainInputFileName, errors, Some tcFileInfo, dependencyFiles, Some builder, keepAssemblyContents) + return FSharpCheckFileAnswer.Succeeded(results) } +and [] FSharpCheckFileAnswer = + | Aborted + | Succeeded of FSharpCheckFileResults + + [] // 'details' is an option because the creation of the tcGlobals etc. for the project may have failed. type FSharpCheckProjectResults - (projectFileName:string, - tcConfigOption: TcConfig option, - keepAssemblyContents: bool, - diagnostics: FSharpDiagnostic[], - details:(TcGlobals * TcImports * CcuThunk * ModuleOrNamespaceType * Choice * + (projectFileName:string, + tcConfigOption: TcConfig option, + keepAssemblyContents: bool, + errors: FSharpErrorInfo[], + details:(TcGlobals * TcImports * CcuThunk * ModuleOrNamespaceType * TcSymbolUses list * TopAttribs option * IRawFSharpAssemblyData option * ILAssemblyRef * - AccessorDomain * TypedImplFile list option * string[] * FSharpProjectOptions) option) = + AccessorDomain * TypedImplFile list option * string[]) option) = - let getDetails() = - match details with - | None -> invalidOp ("The project has no results due to critical errors in the project options. Check the HasCriticalErrors before accessing the detailed results. Errors: " + String.concat "\n" [ for e in diagnostics -> e.Message ]) + let getDetails() = + match details with + | None -> invalidOp ("The project has no results due to critical errors in the project options. Check the HasCriticalErrors before accessing the detailed results. Errors: " + String.concat "\n" [ for e in errors -> e.Message ]) | Some d -> d - let getTcConfig() = - match tcConfigOption with - | None -> invalidOp ("The project has no results due to critical errors in the project options. Check the HasCriticalErrors before accessing the detailed results. Errors: " + String.concat "\n" [ for e in diagnostics -> e.Message ]) + let getTcConfig() = + match tcConfigOption with + | None -> invalidOp ("The project has no results due to critical errors in the project options. Check the HasCriticalErrors before accessing the detailed results. Errors: " + String.concat "\n" [ for e in errors -> e.Message ]) | Some d -> d - member _.Diagnostics = diagnostics + member __.Errors = errors - member _.HasCriticalErrors = details.IsNone + member __.HasCriticalErrors = details.IsNone - member _.AssemblySignature = - let (tcGlobals, tcImports, thisCcu, ccuSig, _builderOrSymbolUses, topAttribs, _tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles, _projectOptions) = getDetails() + member __.AssemblySignature = + let (tcGlobals, tcImports, thisCcu, ccuSig, _tcSymbolUses, topAttribs, _tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles) = getDetails() FSharpAssemblySignature(tcGlobals, thisCcu, ccuSig, tcImports, topAttribs, ccuSig) - member _.TypedImplementationFiles = + member __.TypedImplementationFiles = if not keepAssemblyContents then invalidOp "The 'keepAssemblyContents' flag must be set to true on the FSharpChecker in order to access the checked contents of assemblies" - let (tcGlobals, tcImports, thisCcu, _ccuSig, _builderOrSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, tcAssemblyExpr, _dependencyFiles, _projectOptions) = getDetails() - let mimpls = - match tcAssemblyExpr with + let (tcGlobals, tcImports, thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, tcAssemblyExpr, _dependencyFiles) = getDetails() + let mimpls = + match tcAssemblyExpr with | None -> [] | Some mimpls -> mimpls tcGlobals, thisCcu, tcImports, mimpls - member info.AssemblyContents = + member info.AssemblyContents = if not keepAssemblyContents then invalidOp "The 'keepAssemblyContents' flag must be set to true on the FSharpChecker in order to access the checked contents of assemblies" - let (tcGlobals, tcImports, thisCcu, ccuSig, _builderOrSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, tcAssemblyExpr, _dependencyFiles, _projectOptions) = getDetails() - let mimpls = - match tcAssemblyExpr with + let (tcGlobals, tcImports, thisCcu, ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, tcAssemblyExpr, _dependencyFiles) = getDetails() + let mimpls = + match tcAssemblyExpr with | None -> [] | Some mimpls -> mimpls FSharpAssemblyContents(tcGlobals, thisCcu, Some ccuSig, tcImports, mimpls) - member _.GetOptimizedAssemblyContents() = + member __.GetOptimizedAssemblyContents() = if not keepAssemblyContents then invalidOp "The 'keepAssemblyContents' flag must be set to true on the FSharpChecker in order to access the checked contents of assemblies" - let (tcGlobals, tcImports, thisCcu, ccuSig, _builderOrSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, tcAssemblyExpr, _dependencyFiles, _projectOptions) = getDetails() - let mimpls = - match tcAssemblyExpr with + let (tcGlobals, tcImports, thisCcu, ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, tcAssemblyExpr, _dependencyFiles) = getDetails() + let mimpls = + match tcAssemblyExpr with | None -> [] | Some mimpls -> mimpls let outfile = "" // only used if tcConfig.writeTermsToFiles is true let importMap = tcImports.GetImportMap() let optEnv0 = GetInitialOptimizationEnv (tcImports, tcGlobals) let tcConfig = getTcConfig() - let optimizedImpls, _optimizationData, _ = ApplyAllOptimizations (tcConfig, tcGlobals, (LightweightTcValForUsingInBuildMethodCall tcGlobals), outfile, importMap, false, optEnv0, thisCcu, mimpls) + let optimizedImpls, _optimizationData, _ = ApplyAllOptimizations (tcConfig, tcGlobals, (LightweightTcValForUsingInBuildMethodCall tcGlobals), outfile, importMap, false, optEnv0, thisCcu, mimpls) let mimpls = match optimizedImpls with | TypedAssemblyAfterOptimization files -> @@ -2242,60 +2088,23 @@ type FSharpCheckProjectResults FSharpAssemblyContents(tcGlobals, thisCcu, Some ccuSig, tcImports, mimpls) // Not, this does not have to be a SyncOp, it can be called from any thread - member _.GetUsesOfSymbol(symbol:FSharpSymbol, ?cancellationToken: CancellationToken) = - let (tcGlobals, _tcImports, _thisCcu, _ccuSig, builderOrSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles, _projectOptions) = getDetails() - - let results = - match builderOrSymbolUses with - | Choice1Of2 builder -> - builder.SourceFiles - |> Array.ofList - |> Array.collect (fun x -> - match builder.GetCheckResultsForFileInProjectEvenIfStale x with - | Some partialCheckResults -> - match partialCheckResults.TryPeekTcInfoWithExtras() with - | Some(_, tcInfoExtras) -> - tcInfoExtras.TcSymbolUses.GetUsesOfSymbol symbol.Item - | _ -> - [||] - | _ -> - [||] - ) - | Choice2Of2 tcSymbolUses -> - tcSymbolUses.GetUsesOfSymbol symbol.Item + member __.GetUsesOfSymbol(symbol:FSharpSymbol, ?cancellationToken: CancellationToken) = + let (tcGlobals, _tcImports, _thisCcu, _ccuSig, tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles) = getDetails() - results + tcSymbolUses + |> Seq.collect (fun r -> r.GetUsesOfSymbol symbol.Item) |> Seq.filter (fun symbolUse -> symbolUse.ItemOccurence <> ItemOccurence.RelatedText) |> Seq.distinctBy (fun symbolUse -> symbolUse.ItemOccurence, symbolUse.Range) - |> Seq.map (fun symbolUse -> + |> Seq.map (fun symbolUse -> cancellationToken |> Option.iter (fun ct -> ct.ThrowIfCancellationRequested()) - FSharpSymbolUse(tcGlobals, symbolUse.DisplayEnv, symbol, symbolUse.ItemOccurence, symbolUse.Range)) + FSharpSymbolUse(tcGlobals, symbolUse.DisplayEnv, symbol, symbolUse.ItemOccurence, symbolUse.Range)) |> Seq.toArray // Not, this does not have to be a SyncOp, it can be called from any thread - member _.GetAllUsesOfAllSymbols(?cancellationToken: CancellationToken) = - let (tcGlobals, tcImports, thisCcu, ccuSig, builderOrSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles, _projectOptions) = getDetails() + member __.GetAllUsesOfAllSymbols(?cancellationToken: CancellationToken) = + let (tcGlobals, tcImports, thisCcu, ccuSig, tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles) = getDetails() let cenv = SymbolEnv(tcGlobals, thisCcu, Some ccuSig, tcImports) - let tcSymbolUses = - match builderOrSymbolUses with - | Choice1Of2 builder -> - builder.SourceFiles - |> Array.ofList - |> Array.map (fun x -> - match builder.GetCheckResultsForFileInProjectEvenIfStale x with - | Some partialCheckResults -> - match partialCheckResults.TryPeekTcInfoWithExtras() with - | Some(_, tcInfoExtras) -> - tcInfoExtras.TcSymbolUses - | _ -> - TcSymbolUses.Empty - | _ -> - TcSymbolUses.Empty - ) - | Choice2Of2 tcSymbolUses -> - [|tcSymbolUses|] - [| for r in tcSymbolUses do for symbolUseChunk in r.AllUsesOfSymbols do for symbolUse in symbolUseChunk do @@ -2304,28 +2113,29 @@ type FSharpCheckProjectResults let symbol = FSharpSymbol.Create(cenv, symbolUse.Item) yield FSharpSymbolUse(tcGlobals, symbolUse.DisplayEnv, symbol, symbolUse.ItemOccurence, symbolUse.Range) |] - member _.ProjectContext = - let (tcGlobals, tcImports, thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, ad, _tcAssemblyExpr, _dependencyFiles, projectOptions) = getDetails() - let assemblies = + member __.ProjectContext = + let (tcGlobals, tcImports, thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, ad, _tcAssemblyExpr, _dependencyFiles) = getDetails() + let assemblies = tcImports.GetImportedAssemblies() |> List.map (fun x -> FSharpAssembly(tcGlobals, tcImports, x.FSharpViewOfMetadata)) - FSharpProjectContext(thisCcu, assemblies, ad, projectOptions) + FSharpProjectContext(thisCcu, assemblies, ad) - member _.RawFSharpAssemblyData = - let (_tcGlobals, _tcImports, _thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles, _projectOptions) = getDetails() + member __.RawFSharpAssemblyData = + let (_tcGlobals, _tcImports, _thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles) = getDetails() tcAssemblyData - member _.DependencyFiles = - let (_tcGlobals, _tcImports, _thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, dependencyFiles, _projectOptions) = getDetails() + member __.DependencyFiles = + let (_tcGlobals, _tcImports, _thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, dependencyFiles) = getDetails() dependencyFiles - member _.AssemblyFullName = - let (_tcGlobals, _tcImports, _thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles, _projectOptions) = getDetails() + member __.AssemblyFullName = + let (_tcGlobals, _tcImports, _thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles) = getDetails() ilAssemRef.QualifiedName - override _.ToString() = "FSharpCheckProjectResults(" + projectFileName + ")" + override __.ToString() = "FSharpCheckProjectResults(" + projectFileName + ")" -type FsiInteractiveChecker(legacyReferenceResolver, +type FsiInteractiveChecker(legacyReferenceResolver, + ops: IReactorOperations, tcConfig: TcConfig, tcGlobals: TcGlobals, tcImports: TcImports, @@ -2333,74 +2143,57 @@ type FsiInteractiveChecker(legacyReferenceResolver, let keepAssemblyContents = false - member _.ParseAndCheckInteraction (sourceText: ISourceText, ?userOpName: string) = - cancellable { + member __.ParseAndCheckInteraction (ctok, sourceText: ISourceText, ?userOpName: string) = + async { let userOpName = defaultArg userOpName "Unknown" let filename = Path.Combine(tcConfig.implicitIncludeDir, "stdin.fsx") let suggestNamesForErrors = true // Will always be true, this is just for readability // Note: projectSourceFiles is only used to compute isLastCompiland, and is ignored if Build.IsScript(mainInputFileName) is true (which it is in this case). let parsingOptions = FSharpParsingOptions.FromTcConfig(tcConfig, [| filename |], true) - let parseErrors, parsedInput, anyErrors = ParseAndCheckFile.parseFile (sourceText, filename, parsingOptions, userOpName, suggestNamesForErrors) + let parseErrors, parseTreeOpt, anyErrors = ParseAndCheckFile.parseFile (sourceText, filename, parsingOptions, userOpName, suggestNamesForErrors) let dependencyFiles = [| |] // interactions have no dependencies - let parseResults = FSharpParseFileResults(parseErrors, parsedInput, parseHadErrors = anyErrors, dependencyFiles = dependencyFiles) - + let parseResults = FSharpParseFileResults(parseErrors, parseTreeOpt, parseHadErrors = anyErrors, dependencyFiles = dependencyFiles) + let backgroundDiagnostics = [| |] let reduceMemoryUsage = ReduceMemoryFlag.Yes - let assumeDotNetFramework = (tcConfig.primaryAssembly = PrimaryAssembly.Mscorlib) + let assumeDotNetFramework = tcConfig.primaryAssembly = PrimaryAssembly.Mscorlib - let applyCompilerOptions tcConfigB = - let fsiCompilerOptions = CompilerOptions.GetCoreFsiCompilerOptions tcConfigB + let applyCompilerOptions tcConfigB = + let fsiCompilerOptions = CompilerOptions.GetCoreFsiCompilerOptions tcConfigB CompilerOptions.ParseCompilerOptions (ignore, fsiCompilerOptions, [ ]) let loadClosure = - LoadClosure.ComputeClosureOfScriptText(legacyReferenceResolver, defaultFSharpBinariesDir, + LoadClosure.ComputeClosureOfScriptText(ctok, legacyReferenceResolver, defaultFSharpBinariesDir, filename, sourceText, CodeContext.Editing, tcConfig.useSimpleResolution, tcConfig.useFsiAuxLib, - tcConfig.useSdkRefs, tcConfig.sdkDirOverride, new Lexhelp.LexResourceManager(), + tcConfig.useSdkRefs, new Lexhelp.LexResourceManager(), applyCompilerOptions, assumeDotNetFramework, tryGetMetadataSnapshot=(fun _ -> None), reduceMemoryUsage=reduceMemoryUsage, dependencyProvider=tcImports.DependencyProvider) - let projectOptions = - { - ProjectFileName="script.fsproj" - ProjectId=None - SourceFiles=[||] - OtherOptions=[||] - ReferencedProjects=[||] - IsIncompleteTypeCheckEnvironment=false - UseScriptResolutionRules =false - LoadTime=System.DateTime.Now - UnresolvedReferences =None - OriginalLoadReferences = [] - Stamp = None - } - - let! tcErrors, tcFileInfo = + let! tcErrors, tcFileInfo = ParseAndCheckFile.CheckOneFile - (parseResults, sourceText, filename, projectOptions, projectOptions.ProjectFileName, - tcConfig, tcGlobals, tcImports, tcState, + (parseResults, sourceText, filename, "project", + tcConfig, tcGlobals, tcImports, tcState, Map.empty, Some loadClosure, backgroundDiagnostics, - suggestNamesForErrors) - - let errors = Array.append parseErrors tcErrors - let typeCheckResults = FSharpCheckFileResults (filename, errors, Some tcFileInfo, dependencyFiles, None, false) - let projectResults = - FSharpCheckProjectResults (filename, Some tcConfig, - keepAssemblyContents, errors, - Some(tcGlobals, tcImports, tcFileInfo.ThisCcu, tcFileInfo.CcuSigForFile, - (Choice2Of2 tcFileInfo.ScopeSymbolUses), None, None, mkSimpleAssemblyRef "stdin", - tcState.TcEnvFromImpls.AccessRights, None, dependencyFiles, - projectOptions)) - - return parseResults, typeCheckResults, projectResults + ops, userOpName, suggestNamesForErrors) + + return + match tcFileInfo with + | Result.Ok tcFileInfo -> + let errors = Array.append parseErrors tcErrors + let typeCheckResults = FSharpCheckFileResults (filename, errors, Some tcFileInfo, dependencyFiles, None, false) + let projectResults = + FSharpCheckProjectResults (filename, Some tcConfig, + keepAssemblyContents, errors, + Some(tcGlobals, tcImports, tcFileInfo.ThisCcu, tcFileInfo.CcuSigForFile, + [tcFileInfo.ScopeSymbolUses], None, None, mkSimpleAssemblyRef "stdin", + tcState.TcEnvFromImpls.AccessRights, None, dependencyFiles)) + + parseResults, typeCheckResults, projectResults + + | Result.Error () -> + failwith "unexpected aborted" } -/// The result of calling TypeCheckResult including the possibility of abort and background compiler not caught up. -type [] public FSharpCheckFileAnswer = - /// Aborted because cancellation caused an abandonment of the operation - | Aborted - - /// Success - | Succeeded of FSharpCheckFileResults diff --git a/src/fsharp/service/FSharpCheckerResults.fsi b/src/fsharp/service/FSharpCheckerResults.fsi index 1858e4b24db..95e8156b748 100644 --- a/src/fsharp/service/FSharpCheckerResults.fsi +++ b/src/fsharp/service/FSharpCheckerResults.fsi @@ -1,163 +1,55 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.CodeAnalysis +namespace FSharp.Compiler.SourceCodeServices + -open System -open System.IO open System.Threading -open Internal.Utilities.Library +open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.ILBinaryReader +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerImports -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.EditorServices open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Symbols open FSharp.Compiler.NameResolution open FSharp.Compiler.ParseAndCheckInputs +open FSharp.Compiler.Range open FSharp.Compiler.ScriptClosure -open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.TypedTree -open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TcGlobals open FSharp.Compiler.Text +open FSharp.Compiler.CheckDeclarations -/// Delays the creation of an ILModuleReader -[] -type internal DelayedILModuleReader = - - new : name: string * getStream: (CancellationToken -> Stream option) -> DelayedILModuleReader - - /// Will lazily create the ILModuleReader. - /// Is only evaluated once and can be called by multiple threads. - member TryGetILModuleReader : unit -> Cancellable - -/// Unused in this API -type public FSharpUnresolvedReferencesSet = - internal - | FSharpUnresolvedReferencesSet of UnresolvedAssemblyReference list - -/// A set of information describing a project or script build configuration. -type public FSharpProjectOptions = - { - // Note that this may not reduce to just the project directory, because there may be two projects in the same directory. - ProjectFileName: string - - /// This is the unique identifier for the project, it is case sensitive. If it's None, will key off of ProjectFileName in our caching. - ProjectId: string option - - /// The files in the project - SourceFiles: string[] - - /// Additional command line argument options for the project. These can include additional files and references. - OtherOptions: string[] - - /// The command line arguments for the other projects referenced by this project, indexed by the - /// exact text used in the "-r:" reference in FSharpProjectOptions. - ReferencedProjects: FSharpReferencedProject[] - - /// When true, the typechecking environment is known a priori to be incomplete, for - /// example when a .fs file is opened outside of a project. In this case, the number of error - /// messages reported is reduced. - IsIncompleteTypeCheckEnvironment: bool - - /// When true, use the reference resolution rules for scripts rather than the rules for compiler. - UseScriptResolutionRules: bool - - /// Timestamp of project/script load, used to differentiate between different instances of a project load. - /// This ensures that a complete reload of the project or script type checking - /// context occurs on project or script unload/reload. - LoadTime: DateTime - - /// Unused in this API and should be 'None' when used as user-specified input - UnresolvedReferences: FSharpUnresolvedReferencesSet option - - /// Unused in this API and should be '[]' when used as user-specified input - OriginalLoadReferences: (range * string * string) list - - /// An optional stamp to uniquely identify this set of options - /// If two sets of options both have stamps, then they are considered equal - /// if and only if the stamps are equal - Stamp: int64 option - } - - /// Whether the two parse options refer to the same project. - static member internal UseSameProject: options1: FSharpProjectOptions * options2: FSharpProjectOptions -> bool - - /// Compare two options sets with respect to the parts of the options that are important to building. - static member internal AreSameForChecking: options1: FSharpProjectOptions * options2: FSharpProjectOptions -> bool - - /// Compute the project directory. - member internal ProjectDirectory: string - -and [] public FSharpReferencedProject = - internal - | FSharpReference of projectFileName: string * options: FSharpProjectOptions - | PEReference of projectFileName: string * stamp: DateTime * delayedReader: DelayedILModuleReader - | ILModuleReference of projectFileName: string * getStamp: (unit -> DateTime) * getReader: (unit -> ILModuleReader) - - member FileName : string - - /// Creates a reference for an F# project. The physical data for it is stored/cached inside of the compiler service. - static member CreateFSharp : projectFileName: string * options: FSharpProjectOptions -> FSharpReferencedProject - - /// Creates a reference for any portable executable, including F#. The stream is owned by this reference. - /// The stream will be automatically disposed when there are no references to FSharpReferencedProject and is GC collected. - /// Once the stream is evaluated, the function that constructs the stream will no longer be referenced by anything. - /// If the stream evaluation throws an exception, it will be automatically handled. - static member CreatePortableExecutable : projectFileName: string * stamp: DateTime * getStream: (CancellationToken -> Stream option) -> FSharpReferencedProject - - /// Creates a reference from an ILModuleReader. - static member CreateFromILModuleReader : projectFileName: string * getStamp: (unit -> DateTime) * getReader: (unit -> ILModuleReader) -> FSharpReferencedProject - -/// Represents the use of an F# symbol from F# source code -[] -type public FSharpSymbolUse = - - /// The symbol referenced - member Symbol: FSharpSymbol - - /// The display context active at the point where the symbol is used. Can be passed to FSharpType.Format - /// and other methods to format items in a way that is suitable for a specific source code location. - member DisplayContext: FSharpDisplayContext - - /// Indicates if the reference is a definition for the symbol, either in a signature or implementation - member IsFromDefinition: bool - - /// Indicates if the reference is in a pattern - member IsFromPattern: bool - - /// Indicates if the reference is in a syntactic type - member IsFromType: bool - - /// Indicates if the reference is in an attribute - member IsFromAttribute: bool +/// Represents the reason why the GetDeclarationLocation operation failed. +[] +type public FSharpFindDeclFailureReason = - /// Indicates if the reference is via the member being implemented in a class or object expression - member IsFromDispatchSlotImplementation: bool + /// Generic reason: no particular information about error apart from a message + | Unknown of message: string - /// Indicates if the reference is either a builder or a custom operation in a computation expression - member IsFromComputationExpression: bool + /// Source code file is not available + | NoSourceCode - /// Indicates if the reference is in open statement - member IsFromOpenStatement: bool + /// Trying to find declaration of ProvidedType without TypeProviderDefinitionLocationAttribute + | ProvidedType of string - /// The file name the reference occurs in - member FileName: string + /// Trying to find declaration of ProvidedMember without TypeProviderDefinitionLocationAttribute + | ProvidedMember of string - /// The range of text representing the reference to the symbol - member Range: range +/// Represents the result of the GetDeclarationLocation operation. +[] +type public FSharpFindDeclResult = - /// Indicates if the FSharpSymbolUse is declared as private - member IsPrivateToFile: bool + /// Indicates a declaration location was not found, with an additional reason + | DeclNotFound of FSharpFindDeclFailureReason - // For internal use only - internal new: g:TcGlobals * denv: DisplayEnv * symbol:FSharpSymbol * itemOcc:ItemOccurence * range: range -> FSharpSymbolUse + /// Indicates a declaration location was found + | DeclFound of range + /// Indicates an external declaration was found + | ExternalDecl of assembly : string * externalSym : ExternalSymbol + /// Represents the checking context implied by the ProjectOptions [] type public FSharpProjectContext = @@ -168,15 +60,12 @@ type public FSharpProjectContext = /// Get the accessibility rights for this project context w.r.t. InternalsVisibleTo attributes granting access to other assemblies member AccessibilityRights : FSharpAccessibilityRights - /// Get the project options - member ProjectOptions: FSharpProjectOptions - /// Options used to determine active --define conditionals and other options relevant to parsing files in a project type public FSharpParsingOptions = { SourceFiles: string[] ConditionalCompilationDefines: string list - ErrorSeverityOptions: FSharpDiagnosticOptions + ErrorSeverityOptions: FSharpErrorSeverityOptions IsInteractive: bool LightSyntax: bool option CompilingFsLib: bool @@ -192,7 +81,7 @@ type public FSharpParsingOptions = [] type public FSharpCheckFileResults = /// The errors returned by parsing a source file. - member Diagnostics: FSharpDiagnostic[] + member Errors : FSharpErrorInfo[] /// Get a view of the contents of the assembly up to and including the file just checked member PartialAssemblySignature : FSharpAssemblySignature @@ -230,7 +119,7 @@ type public FSharpCheckFileResults = /// /// Function that returns all entities from current and referenced assemblies. /// - member GetDeclarationListInfo: parsedFileResults:FSharpParseFileResults option * line: int * lineText:string * partialName: PartialLongName * ?getAllEntities: (unit -> AssemblySymbol list) -> DeclarationListInfo + member GetDeclarationListInfo: parsedFileResults:FSharpParseFileResults option * line: int * lineText:string * partialName: PartialLongName * ?getAllEntities: (unit -> AssemblySymbol list) -> FSharpDeclarationListInfo /// Get the items for a declaration list in FSharpSymbol format /// @@ -259,7 +148,16 @@ type public FSharpCheckFileResults = /// The text of the line where the information is being requested. /// The identifiers at the location where the information is being requested. /// Used to discriminate between 'identifiers', 'strings' and others. For strings, an attempt is made to give a tooltip for a #r "..." location. Use a value from FSharpTokenInfo.Tag, or FSharpTokenTag.Identifier, unless you have other information available. - member GetToolTip: line:int * colAtEndOfNames:int * lineText:string * names:string list * tokenTag:int -> ToolTipText + member GetStructuredToolTipText : line:int * colAtEndOfNames:int * lineText:string * names:string list * tokenTag:int -> FSharpStructuredToolTipText + + /// Compute a formatted tooltip for the given location + /// + /// The line number where the information is being requested. + /// The column number at the end of the identifiers where the information is being requested. + /// The text of the line where the information is being requested. + /// The identifiers at the location where the information is being requested. + /// Used to discriminate between 'identifiers', 'strings' and others. For strings, an attempt is made to give a tooltip for a #r "..." location. Use a value from FSharpTokenInfo.Tag, or FSharpTokenTag.Identifier, unless you have other information available. + member GetToolTipText : line:int * colAtEndOfNames:int * lineText:string * names:string list * tokenTag:int -> FSharpToolTipText /// Compute the Visual Studio F1-help key identifier for the given location, based on name resolution results /// @@ -275,7 +173,7 @@ type public FSharpCheckFileResults = /// The column number at the end of the identifiers where the information is being requested. /// The text of the line where the information is being requested. /// The identifiers at the location where the information is being requested. - member GetMethods : line:int * colAtEndOfNames:int * lineText:string * names:string list option -> MethodGroup + member GetMethods : line:int * colAtEndOfNames:int * lineText:string * names:string list option -> FSharpMethodGroup /// Compute a set of method overloads to show in a dialog relevant to the given code location. The resulting method overloads are returned as symbols. /// The line number where the information is being requested. @@ -291,7 +189,7 @@ type public FSharpCheckFileResults = /// The text of the line where the information is being requested. /// The identifiers at the location where the information is being requested. /// If not given, then get the location of the symbol. If false, then prefer the location of the corresponding symbol in the implementation of the file (rather than the signature if present). If true, prefer the location of the corresponding symbol in the signature of the file (rather than the implementation). - member GetDeclarationLocation : line:int * colAtEndOfNames:int * lineText:string * names:string list * ?preferFlag:bool -> FindDeclResult + member GetDeclarationLocation : line:int * colAtEndOfNames:int * lineText:string * names:string list * ?preferFlag:bool -> FSharpFindDeclResult /// Resolve the names at the given location to a use of symbol. /// @@ -302,7 +200,7 @@ type public FSharpCheckFileResults = member GetSymbolUseAtLocation : line:int * colAtEndOfNames:int * lineText:string * names:string list -> FSharpSymbolUse option /// Get any extra colorization info that is available after the typecheck - member GetSemanticClassification : range option -> SemanticClassificationItem[] + member GetSemanticClassification : range option -> struct (range * SemanticClassificationType)[] /// Get the locations of format specifiers [] @@ -334,13 +232,10 @@ type public FSharpCheckFileResults = /// Open declarations in the file, including auto open modules. member OpenDeclarations: FSharpOpenDeclaration[] - /// Lays out and returns the formatted signature for the typechecked file as source text. - member GenerateSignature: unit -> ISourceText option - /// Internal constructor static member internal MakeEmpty : filename: string * - creationErrors: FSharpDiagnostic[] * + creationErrors: FSharpErrorInfo[] * keepAssemblyContents: bool -> FSharpCheckFileResults @@ -352,11 +247,10 @@ type public FSharpCheckFileResults = tcGlobals: TcGlobals * isIncompleteTypeCheckEnvironment: bool * builder: IncrementalBuilder * - projectOptions: FSharpProjectOptions * dependencyFiles: string[] * - creationErrors: FSharpDiagnostic[] * - parseErrors: FSharpDiagnostic[] * - tcErrors: FSharpDiagnostic[] * + creationErrors: FSharpErrorInfo[] * + parseErrors: FSharpErrorInfo[] * + tcErrors: FSharpErrorInfo[] * keepAssemblyContents: bool * ccuSigForFile: ModuleOrNamespaceType * thisCcu: CcuThunk * @@ -382,16 +276,17 @@ type public FSharpCheckFileResults = tcState: TcState * moduleNamesDict: ModuleNamesDict * loadClosure: LoadClosure option * - backgroundDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity)[] * + backgroundDiagnostics: (PhasedDiagnostic * FSharpErrorSeverity)[] * + reactorOps: IReactorOperations * + userOpName: string * isIncompleteTypeCheckEnvironment: bool * - projectOptions: FSharpProjectOptions * builder: IncrementalBuilder * dependencyFiles: string[] * - creationErrors:FSharpDiagnostic[] * - parseErrors:FSharpDiagnostic[] * + creationErrors:FSharpErrorInfo[] * + parseErrors:FSharpErrorInfo[] * keepAssemblyContents: bool * suggestNamesForErrors: bool - -> Cancellable + -> Async /// The result of calling TypeCheckResult including the possibility of abort and background compiler not caught up. and [] public FSharpCheckFileAnswer = @@ -406,7 +301,7 @@ and [] public FSharpCheckFileAnswer = type public FSharpCheckProjectResults = /// The errors returned by processing the project - member Diagnostics: FSharpDiagnostic[] + member Errors: FSharpErrorInfo[] /// Get a view of the overall signature of the assembly. Only valid to use if HasCriticalErrors is false. member AssemblySignature: FSharpAssemblySignature @@ -441,19 +336,8 @@ type public FSharpCheckProjectResults = projectFileName:string * tcConfigOption: TcConfig option * keepAssemblyContents: bool * - diagnostics: FSharpDiagnostic[] * - details:(TcGlobals * - TcImports * - CcuThunk * - ModuleOrNamespaceType * - Choice * - TopAttribs option * - IRawFSharpAssemblyData option * - ILAssemblyRef * - AccessorDomain * - TypedImplFile list option * - string[] * - FSharpProjectOptions) option + errors: FSharpErrorInfo[] * + details:(TcGlobals * TcImports * CcuThunk * ModuleOrNamespaceType * TcSymbolUses list * TopAttribs option * IRawFSharpAssemblyData option * ILAssemblyRef * AccessorDomain * TypedImplFile list option * string[]) option -> FSharpCheckProjectResults module internal ParseAndCheckFile = @@ -464,7 +348,7 @@ module internal ParseAndCheckFile = options: FSharpParsingOptions * userOpName: string * suggestNamesForErrors: bool - -> FSharpDiagnostic[] * ParsedInput * bool + -> FSharpErrorInfo[] * ParsedInput option * bool val matchBraces: sourceText: ISourceText * @@ -478,7 +362,8 @@ module internal ParseAndCheckFile = // Used internally to provide intellisense over F# Interactive. type internal FsiInteractiveChecker = internal new: - LegacyReferenceResolver * + ReferenceResolver.Resolver * + ops: IReactorOperations * tcConfig: TcConfig * tcGlobals: TcGlobals * tcImports: TcImports * @@ -486,10 +371,12 @@ type internal FsiInteractiveChecker = -> FsiInteractiveChecker member internal ParseAndCheckInteraction : + ctok: CompilationThreadToken * sourceText:ISourceText * ?userOpName: string - -> Cancellable + -> Async module internal FSharpCheckerResultsSettings = val defaultFSharpBinariesDir: string + val maxTimeShareMilliseconds : int64 diff --git a/src/fsharp/service/FSharpParseFileResults.fs b/src/fsharp/service/FSharpParseFileResults.fs deleted file mode 100644 index 7b2ecf82a3f..00000000000 --- a/src/fsharp/service/FSharpParseFileResults.fs +++ /dev/null @@ -1,757 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.CodeAnalysis - -open System -open System.IO -open System.Collections.Generic -open System.Diagnostics -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras -open FSharp.Compiler.CompilerConfig -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Syntax -open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range - -module SourceFileImpl = - let IsInterfaceFile file = - let ext = Path.GetExtension file - 0 = String.Compare(".fsi", ext, StringComparison.OrdinalIgnoreCase) - - /// Additional #defines that should be in place when editing a file in a file editor such as VS. - let AdditionalDefinesForUseInEditor(isInteractive: bool) = - if isInteractive then ["INTERACTIVE";"EDITING"] // This is still used by the foreground parse - else ["COMPILED";"EDITING"] - -type CompletionPath = string list * string option // plid * residue - -[] -type FSharpInheritanceOrigin = - | Class - | Interface - | Unknown - -[] -type InheritanceContext = - | Class - | Interface - | Unknown - -[] -type RecordContext = - | CopyOnUpdate of range: range * path: CompletionPath - | Constructor of typeName: string - | New of path: CompletionPath - -[] -type CompletionContext = - /// Completion context cannot be determined due to errors - | Invalid - - /// Completing something after the inherit keyword - | Inherit of context: InheritanceContext * path: CompletionPath - - /// Completing records field - | RecordField of context: RecordContext - - | RangeOperator - - /// Completing named parameters\setters in parameter list of constructor\method calls - /// end of name ast node * list of properties\parameters that were already set - | ParameterList of pos * HashSet - - | AttributeApplication - - | OpenDeclaration of isOpenType: bool - - /// Completing pattern type (e.g. foo (x: |)) - | PatternType - -//---------------------------------------------------------------------------- -// FSharpParseFileResults -//---------------------------------------------------------------------------- - -[] -type FSharpParseFileResults(diagnostics: FSharpDiagnostic[], input: ParsedInput, parseHadErrors: bool, dependencyFiles: string[]) = - - member _.Diagnostics = diagnostics - - member _.ParseHadErrors = parseHadErrors - - member _.ParseTree = input - - member _.TryRangeOfNameOfNearestOuterBindingContainingPos pos = - let tryGetIdentRangeFromBinding binding = - match binding with - | SynBinding(_, _, _, _, _, _, _, headPat, _, _, _, _) -> - match headPat with - | SynPat.LongIdent (longIdentWithDots, _, _, _, _, _) -> - Some longIdentWithDots.Range - | SynPat.As (_, SynPat.Named (ident, false, _, _), _) - | SynPat.Named (ident, false, _, _) -> - Some ident.idRange - | _ -> - None - - let rec walkBinding expr workingRange = - match expr with - - // This lets us dive into subexpressions that may contain the binding we're after - | SynExpr.Sequential (_, _, expr1, expr2, _) -> - if rangeContainsPos expr1.Range pos then - walkBinding expr1 workingRange - else - walkBinding expr2 workingRange - - - | SynExpr.LetOrUse(_, _, bindings, bodyExpr, _) -> - let potentialNestedRange = - bindings - |> List.tryFind (fun binding -> rangeContainsPos binding.RangeOfBindingWithRhs pos) - |> Option.bind tryGetIdentRangeFromBinding - match potentialNestedRange with - | Some range -> - walkBinding bodyExpr range - | None -> - walkBinding bodyExpr workingRange - - - | _ -> - Some workingRange - - SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with - override _.VisitExpr(_, _, defaultTraverse, expr) = - defaultTraverse expr - - override _.VisitBinding(_path, defaultTraverse, binding) = - match binding with - | SynBinding(_, _, _, _, _, _, SynValData (None, _, _), _, _, expr, _range, _) as b when rangeContainsPos b.RangeOfBindingWithRhs pos -> - match tryGetIdentRangeFromBinding b with - | Some range -> walkBinding expr range - | None -> None - | _ -> defaultTraverse binding }) - - member _.TryIdentOfPipelineContainingPosAndNumArgsApplied pos = - SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with - member _.VisitExpr(_, _, defaultTraverse, expr) = - match expr with - | SynExpr.App (_, _, SynExpr.App(_, true, SynExpr.Ident ident, _, _), argExpr, _) when rangeContainsPos argExpr.Range pos -> - match argExpr with - | SynExpr.App(_, _, _, SynExpr.Paren(expr, _, _, _), _) when rangeContainsPos expr.Range pos -> - None - | _ -> - if ident.idText = "op_PipeRight" then - Some (ident, 1) - elif ident.idText = "op_PipeRight2" then - Some (ident, 2) - elif ident.idText = "op_PipeRight3" then - Some (ident, 3) - else - None - | _ -> defaultTraverse expr - }) - - member _.IsPosContainedInApplication pos = - let result = - SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with - member _.VisitExpr(_, traverseSynExpr, defaultTraverse, expr) = - match expr with - | SynExpr.TypeApp (_, _, _, _, _, _, range) when rangeContainsPos range pos -> - Some range - | SynExpr.App(_, _, _, SynExpr.CompExpr (_, _, expr, _), range) when rangeContainsPos range pos -> - traverseSynExpr expr - | SynExpr.App (_, _, _, _, range) when rangeContainsPos range pos -> - Some range - | _ -> defaultTraverse expr - }) - result.IsSome - - member _.TryRangeOfFunctionOrMethodBeingApplied pos = - let rec getIdentRangeForFuncExprInApp traverseSynExpr expr pos = - match expr with - | SynExpr.Ident ident -> Some ident.idRange - - | SynExpr.LongIdent (_, _, _, range) -> Some range - - | SynExpr.Paren (expr, _, _, range) when rangeContainsPos range pos -> - getIdentRangeForFuncExprInApp traverseSynExpr expr pos - - | SynExpr.TypeApp (expr, _, _, _, _, _, _) -> - getIdentRangeForFuncExprInApp traverseSynExpr expr pos - - | SynExpr.App (_, _, funcExpr, argExpr, _) -> - match argExpr with - | SynExpr.App (_, _, _, _, range) when rangeContainsPos range pos -> - getIdentRangeForFuncExprInApp traverseSynExpr argExpr pos - - // Special case: `async { ... }` is actually a CompExpr inside of the argExpr of a SynExpr.App - | SynExpr.CompExpr (_, _, expr, range) when rangeContainsPos range pos -> - getIdentRangeForFuncExprInApp traverseSynExpr expr pos - - | SynExpr.Paren (expr, _, _, range) when rangeContainsPos range pos -> - getIdentRangeForFuncExprInApp traverseSynExpr expr pos - - | _ -> - match funcExpr with - | SynExpr.App (_, true, _, _, _) when rangeContainsPos argExpr.Range pos -> - // x |> List.map - // Don't dive into the funcExpr (the operator expr) - // because we dont want to offer sig help for that! - getIdentRangeForFuncExprInApp traverseSynExpr argExpr pos - | _ -> - // Generally, we want to dive into the func expr to get the range - // of the identifier of the function we're after - getIdentRangeForFuncExprInApp traverseSynExpr funcExpr pos - - | SynExpr.LetOrUse (_, _, bindings, body, range) when rangeContainsPos range pos -> - let binding = - bindings - |> List.tryFind (fun x -> rangeContainsPos x.RangeOfBindingWithRhs pos) - match binding with - | Some(SynBinding.SynBinding(_, _, _, _, _, _, _, _, _, expr, _, _)) -> - getIdentRangeForFuncExprInApp traverseSynExpr expr pos - | None -> - getIdentRangeForFuncExprInApp traverseSynExpr body pos - - | SynExpr.IfThenElse (ifExpr, thenExpr, elseExpr, _, _, _, range) when rangeContainsPos range pos -> - if rangeContainsPos ifExpr.Range pos then - getIdentRangeForFuncExprInApp traverseSynExpr ifExpr pos - elif rangeContainsPos thenExpr.Range pos then - getIdentRangeForFuncExprInApp traverseSynExpr thenExpr pos - else - match elseExpr with - | None -> None - | Some expr -> - getIdentRangeForFuncExprInApp traverseSynExpr expr pos - - | SynExpr.Match (_, expr, clauses, range) when rangeContainsPos range pos -> - if rangeContainsPos expr.Range pos then - getIdentRangeForFuncExprInApp traverseSynExpr expr pos - else - let clause = clauses |> List.tryFind (fun clause -> rangeContainsPos clause.Range pos) - match clause with - | None -> None - | Some clause -> - match clause with - | SynMatchClause.SynMatchClause (_, whenExpr, resultExpr, _, _) -> - match whenExpr with - | None -> - getIdentRangeForFuncExprInApp traverseSynExpr resultExpr pos - | Some whenExpr -> - if rangeContainsPos whenExpr.Range pos then - getIdentRangeForFuncExprInApp traverseSynExpr whenExpr pos - else - getIdentRangeForFuncExprInApp traverseSynExpr resultExpr pos - - - // Ex: C.M(x, y, ...) <--- We want to find where in the tupled application the call is being made - | SynExpr.Tuple(_, exprs, _, tupRange) when rangeContainsPos tupRange pos -> - let expr = exprs |> List.tryFind (fun expr -> rangeContainsPos expr.Range pos) - match expr with - | None -> None - | Some expr -> - getIdentRangeForFuncExprInApp traverseSynExpr expr pos - - // Capture the body of a lambda, often nested in a call to a collection function - | SynExpr.Lambda(_, _, _args, body, _, _) when rangeContainsPos body.Range pos -> - getIdentRangeForFuncExprInApp traverseSynExpr body pos - - | SynExpr.Do(expr, range) when rangeContainsPos range pos -> - getIdentRangeForFuncExprInApp traverseSynExpr expr pos - - | SynExpr.Assert(expr, range) when rangeContainsPos range pos -> - getIdentRangeForFuncExprInApp traverseSynExpr expr pos - - | SynExpr.ArbitraryAfterError (_debugStr, range) when rangeContainsPos range pos -> - Some range - - | expr -> - traverseSynExpr expr - |> Option.map (fun expr -> expr) - - SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with - member _.VisitExpr(_, traverseSynExpr, defaultTraverse, expr) = - match expr with - | SynExpr.TypeApp (expr, _, _, _, _, _, range) when rangeContainsPos range pos -> - getIdentRangeForFuncExprInApp traverseSynExpr expr pos - | SynExpr.App (_, _, _funcExpr, _, range) as app when rangeContainsPos range pos -> - getIdentRangeForFuncExprInApp traverseSynExpr app pos - | _ -> defaultTraverse expr - }) - - member _.GetAllArgumentsForFunctionApplicationAtPostion pos = - SynExprAppLocationsImpl.getAllCurriedArgsAtPosition pos input - - member _.TryRangeOfParenEnclosingOpEqualsGreaterUsage opGreaterEqualPos = - let (|Ident|_|) ofName = - function | SynExpr.Ident ident when ident.idText = ofName -> Some () - | _ -> None - let (|InfixAppOfOpEqualsGreater|_|) = - function | SynExpr.App(ExprAtomicFlag.NonAtomic, false, SynExpr.App(ExprAtomicFlag.NonAtomic, true, Ident "op_EqualsGreater", actualParamListExpr, _), actualLambdaBodyExpr, _) -> - Some (actualParamListExpr, actualLambdaBodyExpr) - | _ -> None - - SyntaxTraversal.Traverse(opGreaterEqualPos, input, { new SyntaxVisitorBase<_>() with - member _.VisitExpr(_, _, defaultTraverse, expr) = - match expr with - | SynExpr.Paren((InfixAppOfOpEqualsGreater(lambdaArgs, lambdaBody) as app), _, _, _) -> - Some (app.Range, lambdaArgs.Range, lambdaBody.Range) - | _ -> defaultTraverse expr - - member _.VisitBinding(_path, defaultTraverse, binding) = - match binding with - | SynBinding(_, SynBindingKind.Normal, _, _, _, _, _, _, _, (InfixAppOfOpEqualsGreater(lambdaArgs, lambdaBody) as app), _, _) -> - Some(app.Range, lambdaArgs.Range, lambdaBody.Range) - | _ -> defaultTraverse binding }) - - member _.TryRangeOfExprInYieldOrReturn pos = - SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with - member _.VisitExpr(_path, _, defaultTraverse, expr) = - match expr with - | SynExpr.YieldOrReturn(_, expr, range) - | SynExpr.YieldOrReturnFrom(_, expr, range) when rangeContainsPos range pos -> - Some expr.Range - | _ -> defaultTraverse expr }) - - member _.TryRangeOfRecordExpressionContainingPos pos = - SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with - member _.VisitExpr(_, _, defaultTraverse, expr) = - match expr with - | SynExpr.Record(_, _, _, range) when rangeContainsPos range pos -> - Some range - | _ -> defaultTraverse expr }) - - member _.TryRangeOfRefCellDereferenceContainingPos expressionPos = - SyntaxTraversal.Traverse(expressionPos, input, { new SyntaxVisitorBase<_>() with - member _.VisitExpr(_, _, defaultTraverse, expr) = - match expr with - | SynExpr.App(_, false, SynExpr.Ident funcIdent, expr, _) -> - if funcIdent.idText = "op_Dereference" && rangeContainsPos expr.Range expressionPos then - Some funcIdent.idRange - else - None - | _ -> defaultTraverse expr }) - - member _.TryRangeOfExpressionBeingDereferencedContainingPos expressionPos = - SyntaxTraversal.Traverse(expressionPos, input, { new SyntaxVisitorBase<_>() with - member _.VisitExpr(_, _, defaultTraverse, expr) = - match expr with - | SynExpr.App(_, false, SynExpr.Ident funcIdent, expr, _) -> - if funcIdent.idText = "op_Dereference" && rangeContainsPos expr.Range expressionPos then - Some expr.Range - else - None - | _ -> defaultTraverse expr }) - - member _.FindParameterLocations pos = - ParameterLocations.Find(pos, input) - - member _.IsPositionContainedInACurriedParameter pos = - let result = - SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with - member _.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) = - defaultTraverse(expr) - - override _.VisitBinding (_path, _, binding) = - match binding with - | SynBinding(_, _, _, _, _, _, valData, _, _, _, range, _) when rangeContainsPos range pos -> - let info = valData.SynValInfo.CurriedArgInfos - let mutable found = false - for group in info do - for arg in group do - match arg.Ident with - | Some ident when rangeContainsPos ident.idRange pos -> - found <- true - | _ -> () - if found then Some range else None - | _ -> - None - }) - result.IsSome - - member _.IsTypeAnnotationGivenAtPosition pos = - let result = - SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with - member _.VisitExpr(_path, _traverseSynExpr, defaultTraverse, expr) = - match expr with - | SynExpr.Typed (_expr, _typeExpr, range) when Position.posEq range.Start pos -> - Some range - | _ -> defaultTraverse expr - - override _.VisitSimplePats(_path, pats) = - match pats with - | [] -> None - | _ -> - let exprFunc pat = - match pat with - | SynSimplePat.Typed (_pat, _targetExpr, range) when Position.posEq range.Start pos -> - Some range - | _ -> - None - - pats |> List.tryPick exprFunc - - override _.VisitPat(_path, defaultTraverse, pat) = - match pat with - | SynPat.Typed (_pat, _targetType, range) when Position.posEq range.Start pos -> - Some range - | _ -> defaultTraverse pat }) - result.IsSome - - member _.IsBindingALambdaAtPosition pos = - let result = - SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with - member _.VisitExpr(_path, _traverseSynExpr, defaultTraverse, expr) = - defaultTraverse expr - - override _.VisitBinding(_path, defaultTraverse, binding) = - match binding with - | SynBinding.SynBinding(_, _, _, _, _, _, _, _, _, expr, range, _) when Position.posEq range.Start pos -> - match expr with - | SynExpr.Lambda _ -> Some range - | _ -> None - | _ -> defaultTraverse binding }) - result.IsSome - - /// Get declared items and the selected item at the specified location - member _.GetNavigationItemsImpl() = - ErrorScope.Protect range0 - (fun () -> - match input with - | ParsedInput.ImplFile _ as p -> - Navigation.getNavigation p - | ParsedInput.SigFile _ -> - Navigation.empty) - (fun err -> - Trace.TraceInformation(sprintf "FCS: recovering from error in GetNavigationItemsImpl: '%s'" err) - Navigation.empty) - - member _.ValidateBreakpointLocationImpl pos = - let isMatchRange m = rangeContainsPos m pos || m.StartLine = pos.Line - - // Process let-binding - let findBreakPoints () = - let checkRange m = [ if isMatchRange m then yield m ] - let walkBindSeqPt sp = [ match sp with DebugPointAtBinding.Yes m -> yield! checkRange m | _ -> () ] - let walkForSeqPt sp = [ match sp with DebugPointAtFor.Yes m -> yield! checkRange m | _ -> () ] - let walkWhileSeqPt sp = [ match sp with DebugPointAtWhile.Yes m -> yield! checkRange m | _ -> () ] - let walkTrySeqPt sp = [ match sp with DebugPointAtTry.Yes m -> yield! checkRange m | _ -> () ] - let walkWithSeqPt sp = [ match sp with DebugPointAtWith.Yes m -> yield! checkRange m | _ -> () ] - let walkFinallySeqPt sp = [ match sp with DebugPointAtFinally.Yes m -> yield! checkRange m | _ -> () ] - - let rec walkBind (SynBinding(_, _, _, _, _, _, SynValData(memFlagsOpt, _, _), synPat, _, synExpr, _, spInfo)) = - [ // Don't yield the binding sequence point if there are any arguments, i.e. we're defining a function or a method - let isFunction = - Option.isSome memFlagsOpt || - match synPat with - | SynPat.LongIdent (_, _, _, SynArgPats.Pats args, _, _) when not (List.isEmpty args) -> true - | _ -> false - if not isFunction then - yield! walkBindSeqPt spInfo - - yield! walkExpr (isFunction || (match spInfo with DebugPointAtBinding.Yes _ -> false | _-> true)) synExpr ] - - and walkExprs es = List.collect (walkExpr false) es - and walkBinds es = List.collect walkBind es - and walkMatchClauses cl = - [ for (SynMatchClause(_, whenExpr, e, _, _)) in cl do - match whenExpr with - | Some e -> yield! walkExpr false e - | _ -> () - yield! walkExpr true e ] - - and walkExprOpt (spAlways: bool) eOpt = [ match eOpt with Some e -> yield! walkExpr spAlways e | _ -> () ] - - and IsBreakableExpression e = - match e with - | SynExpr.Match _ - | SynExpr.IfThenElse _ - | SynExpr.For _ - | SynExpr.ForEach _ - | SynExpr.While _ -> true - | _ -> not (IsControlFlowExpression e) - - // Determine the breakpoint locations for an expression. spAlways indicates we always - // emit a breakpoint location for the expression unless it is a syntactic control flow construct - and walkExpr (spAlways: bool) e = - let m = e.Range - if not (isMatchRange m) then [] else - [ if spAlways && IsBreakableExpression e then - yield! checkRange m - - match e with - | SynExpr.ArbitraryAfterError _ - | SynExpr.LongIdent _ - | SynExpr.LibraryOnlyILAssembly _ - | SynExpr.LibraryOnlyStaticOptimization _ - | SynExpr.Null _ - | SynExpr.Ident _ - | SynExpr.ImplicitZero _ - | SynExpr.Const _ -> - () - - | SynExpr.Quote (_, _, e, _, _) - | SynExpr.TypeTest (e, _, _) - | SynExpr.Upcast (e, _, _) - | SynExpr.AddressOf (_, e, _, _) - | SynExpr.CompExpr (_, _, e, _) - | SynExpr.ArrayOrListOfSeqExpr (_, e, _) - | SynExpr.Typed (e, _, _) - | SynExpr.FromParseError (e, _) - | SynExpr.DiscardAfterMissingQualificationAfterDot (e, _) - | SynExpr.Do (e, _) - | SynExpr.Assert (e, _) - | SynExpr.Fixed (e, _) - | SynExpr.DotGet (e, _, _, _) - | SynExpr.LongIdentSet (_, e, _) - | SynExpr.New (_, _, e, _) - | SynExpr.TypeApp (e, _, _, _, _, _, _) - | SynExpr.LibraryOnlyUnionCaseFieldGet (e, _, _, _) - | SynExpr.Downcast (e, _, _) - | SynExpr.InferredUpcast (e, _) - | SynExpr.InferredDowncast (e, _) - | SynExpr.Lazy (e, _) - | SynExpr.TraitCall (_, _, e, _) - | SynExpr.Paren (e, _, _, _) -> - yield! walkExpr false e - - | SynExpr.InterpolatedString (parts, _, _) -> - yield! walkExprs [ for part in parts do - match part with - | SynInterpolatedStringPart.String _ -> () - | SynInterpolatedStringPart.FillExpr (fillExpr, _) -> yield fillExpr ] - - | SynExpr.YieldOrReturn (_, e, _) - | SynExpr.YieldOrReturnFrom (_, e, _) - | SynExpr.DoBang (e, _) -> - yield! checkRange e.Range - yield! walkExpr false e - - | SynExpr.NamedIndexedPropertySet (_, e1, e2, _) - | SynExpr.DotSet (e1, _, e2, _) - | SynExpr.Set (e1, e2, _) - | SynExpr.LibraryOnlyUnionCaseFieldSet (e1, _, _, e2, _) - | SynExpr.App (_, _, e1, e2, _) -> - yield! walkExpr false e1 - yield! walkExpr false e2 - - | SynExpr.ArrayOrList (_, es, _) - | SynExpr.Tuple (_, es, _, _) -> - yield! walkExprs es - - | SynExpr.Record (_, copyExprOpt, fs, _) -> - match copyExprOpt with - | Some (e, _) -> yield! walkExpr true e - | None -> () - yield! walkExprs (fs |> List.choose p23) - - | SynExpr.AnonRecd (_isStruct, copyExprOpt, fs, _) -> - match copyExprOpt with - | Some (e, _) -> yield! walkExpr true e - | None -> () - yield! walkExprs (fs |> List.map snd) - - | SynExpr.ObjExpr (_, args, bs, is, _, _) -> - match args with - | None -> () - | Some (arg, _) -> yield! walkExpr false arg - yield! walkBinds bs - for (SynInterfaceImpl(_, bs, _)) in is do yield! walkBinds bs - - | SynExpr.While (spWhile, e1, e2, _) -> - yield! walkWhileSeqPt spWhile - yield! walkExpr false e1 - yield! walkExpr true e2 - - | SynExpr.JoinIn (e1, _range, e2, _range2) -> - yield! walkExpr false e1 - yield! walkExpr false e2 - - | SynExpr.For (spFor, _, e1, _, e2, e3, _) -> - yield! walkForSeqPt spFor - yield! walkExpr false e1 - yield! walkExpr true e2 - yield! walkExpr true e3 - - | SynExpr.ForEach (spFor, _, _, _, e1, e2, _) -> - yield! walkForSeqPt spFor - yield! walkExpr false e1 - yield! walkExpr true e2 - - | SynExpr.MatchLambda (_isExnMatch, _argm, cl, spBind, _wholem) -> - yield! walkBindSeqPt spBind - for (SynMatchClause(_, whenExpr, e, _, _)) in cl do - yield! walkExprOpt false whenExpr - yield! walkExpr true e - - | SynExpr.Lambda (_, _, _, e, _, _) -> - yield! walkExpr true e - - | SynExpr.Match (spBind, e, cl, _) -> - yield! walkBindSeqPt spBind - yield! walkExpr false e - for (SynMatchClause(_, whenExpr, e, _, _)) in cl do - yield! walkExprOpt false whenExpr - yield! walkExpr true e - - | SynExpr.LetOrUse (_, _, bs, e, _) -> - yield! walkBinds bs - yield! walkExpr true e - - | SynExpr.TryWith (e, _, cl, _, _, spTry, spWith) -> - yield! walkTrySeqPt spTry - yield! walkWithSeqPt spWith - yield! walkExpr true e - yield! walkMatchClauses cl - - | SynExpr.TryFinally (e1, e2, _, spTry, spFinally) -> - yield! walkExpr true e1 - yield! walkExpr true e2 - yield! walkTrySeqPt spTry - yield! walkFinallySeqPt spFinally - - | SynExpr.SequentialOrImplicitYield (spSeq, e1, e2, _, _) - | SynExpr.Sequential (spSeq, _, e1, e2, _) -> - yield! walkExpr (match spSeq with DebugPointAtSequential.ExprOnly -> false | _ -> true) e1 - yield! walkExpr (match spSeq with DebugPointAtSequential.StmtOnly -> false | _ -> true) e2 - - | SynExpr.IfThenElse (e1, e2, e3opt, spBind, _, _, _) -> - yield! walkBindSeqPt spBind - yield! walkExpr false e1 - yield! walkExpr true e2 - yield! walkExprOpt true e3opt - - | SynExpr.DotIndexedGet (e1, es, _, _) -> - yield! walkExpr false e1 - yield! walkExprs [ for e in es do yield! e.Exprs ] - - | SynExpr.DotIndexedSet (e1, es, e2, _, _, _) -> - yield! walkExpr false e1 - yield! walkExprs [ for e in es do yield! e.Exprs ] - yield! walkExpr false e2 - - | SynExpr.DotNamedIndexedPropertySet (e1, _, e2, e3, _) -> - yield! walkExpr false e1 - yield! walkExpr false e2 - yield! walkExpr false e3 - - | SynExpr.LetOrUseBang (spBind, _, _, _, e1, es, e2, _) -> - yield! walkBindSeqPt spBind - yield! walkExpr true e1 - for (andBangSpBind,_,_,_,eAndBang,_) in es do - yield! walkBindSeqPt andBangSpBind - yield! walkExpr true eAndBang - yield! walkExpr true e2 - - | SynExpr.MatchBang (spBind, e, cl, _) -> - yield! walkBindSeqPt spBind - yield! walkExpr false e - for (SynMatchClause(_, whenExpr, e, _, _)) in cl do - yield! walkExprOpt false whenExpr - yield! walkExpr true e ] - - // Process a class declaration or F# type declaration - let rec walkTycon (SynTypeDefn(SynComponentInfo(_, _, _, _, _, _, _, _), repr, membDefns, implicitCtor, m)) = - if not (isMatchRange m) then [] else - [ for memb in membDefns do yield! walkMember memb - match repr with - | SynTypeDefnRepr.ObjectModel(_, membDefns, _) -> - for memb in membDefns do yield! walkMember memb - | _ -> () - for memb in membDefns do yield! walkMember memb - for memb in Option.toList implicitCtor do yield! walkMember memb] - - // Returns class-members for the right dropdown - and walkMember memb = - if not (rangeContainsPos memb.Range pos) then [] else - [ match memb with - | SynMemberDefn.LetBindings(binds, _, _, _) -> yield! walkBinds binds - | SynMemberDefn.AutoProperty(_attribs, _isStatic, _id, _tyOpt, _propKind, _, _xmlDoc, _access, synExpr, _, _) -> yield! walkExpr true synExpr - | SynMemberDefn.ImplicitCtor(_, _, _, _, _, m) -> yield! checkRange m - | SynMemberDefn.Member(bind, _) -> yield! walkBind bind - | SynMemberDefn.Interface(_, Some membs, _) -> for m in membs do yield! walkMember m - | SynMemberDefn.Inherit(_, _, m) -> - // can break on the "inherit" clause - yield! checkRange m - | SynMemberDefn.ImplicitInherit(_, arg, _, m) -> - // can break on the "inherit" clause - yield! checkRange m - yield! walkExpr true arg - | _ -> () ] - - // Process declarations nested in a module that should be displayed in the left dropdown - // (such as type declarations, nested modules etc.) - let rec walkDecl decl = - [ match decl with - | SynModuleDecl.Let(_, binds, m) when isMatchRange m -> - yield! walkBinds binds - | SynModuleDecl.DoExpr(spExpr, expr, m) when isMatchRange m -> - yield! walkBindSeqPt spExpr - yield! walkExpr false expr - | SynModuleDecl.ModuleAbbrev _ -> () - | SynModuleDecl.NestedModule(_, _isRec, decls, _, m) when isMatchRange m -> - for d in decls do yield! walkDecl d - | SynModuleDecl.Types(tydefs, m) when isMatchRange m -> - for d in tydefs do yield! walkTycon d - | SynModuleDecl.Exception(SynExceptionDefn(SynExceptionDefnRepr(_, _, _, _, _, _), membDefns, _), m) - when isMatchRange m -> - for m in membDefns do yield! walkMember m - | _ -> () ] - - // Collect all the items in a module - let walkModule (SynModuleOrNamespace(_, _, _, decls, _, _, _, m)) = - if isMatchRange m then - List.collect walkDecl decls - else - [] - - /// Get information for implementation file - let walkImplFile (modules: SynModuleOrNamespace list) = List.collect walkModule modules - - match input with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = modules)) -> walkImplFile modules - | _ -> [] - - ErrorScope.Protect range0 - (fun () -> - let locations = findBreakPoints() - - if pos.Column = 0 then - // we have a breakpoint that was set with mouse at line start - match locations |> List.filter (fun m -> m.StartLine = m.EndLine && pos.Line = m.StartLine) with - | [] -> - match locations |> List.filter (fun m -> rangeContainsPos m pos) with - | [] -> - match locations |> List.filter (fun m -> rangeBeforePos m pos |> not) with - | [] -> Seq.tryHead locations - | locationsAfterPos -> Seq.tryHead locationsAfterPos - | coveringLocations -> Seq.tryLast coveringLocations - | locationsOnSameLine -> Seq.tryHead locationsOnSameLine - else - match locations |> List.filter (fun m -> rangeContainsPos m pos) with - | [] -> - match locations |> List.filter (fun m -> rangeBeforePos m pos |> not) with - | [] -> Seq.tryHead locations - | locationsAfterPos -> Seq.tryHead locationsAfterPos - | coveringLocations -> Seq.tryLast coveringLocations) - (fun msg -> - Trace.TraceInformation(sprintf "FCS: recovering from error in ValidateBreakpointLocationImpl: '%s'" msg) - None) - - /// When these files appear or disappear the configuration for the current project is invalidated. - member _.DependencyFiles = dependencyFiles - - member _.FileName = input.FileName - - // Get items for the navigation drop down bar - member scope.GetNavigationItems() = - // This does not need to be run on the background thread - scope.GetNavigationItemsImpl() - - member scope.ValidateBreakpointLocation pos = - // This does not need to be run on the background thread - scope.ValidateBreakpointLocationImpl pos - diff --git a/src/fsharp/service/FSharpParseFileResults.fsi b/src/fsharp/service/FSharpParseFileResults.fsi deleted file mode 100644 index 9d3378a7b9a..00000000000 --- a/src/fsharp/service/FSharpParseFileResults.fsi +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.CodeAnalysis - -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text - -[] -/// Represents the results of parsing an F# file and a set of analysis operations based on the parse tree alone. -type public FSharpParseFileResults = - - /// The syntax tree resulting from the parse - member ParseTree: ParsedInput - - /// Attempts to find the range of the name of the nearest outer binding that contains a given position. - member TryRangeOfNameOfNearestOuterBindingContainingPos: pos: pos -> range option - - /// Attempts to find the range of an attempted lambda expression or pattern, the argument range, and the expr range when writing a C#-style "lambda" (which is actually an operator application) - member TryRangeOfParenEnclosingOpEqualsGreaterUsage: opGreaterEqualPos: pos -> (range * range * range) option - - /// Attempts to find the range of an expression `expr` contained in a `yield expr` or `return expr` expression (and bang-variants). - member TryRangeOfExprInYieldOrReturn: pos: pos -> range option - - /// Attempts to find the range of a record expression containing the given position. - member TryRangeOfRecordExpressionContainingPos: pos: pos -> range option - - /// Attempts to find an Ident of a pipeline containing the given position, and the number of args already applied in that pipeline. - /// For example, '[1..10] |> List.map ' would give back the ident of '|>' and 1, because it applied 1 arg (the list) to 'List.map'. - member TryIdentOfPipelineContainingPosAndNumArgsApplied: pos: pos -> (Ident * int) option - - /// Determines if the given position is inside a function or method application. - member IsPosContainedInApplication: pos: pos -> bool - - /// Attempts to find the range of a function or method that is being applied. Also accounts for functions in pipelines. - member TryRangeOfFunctionOrMethodBeingApplied: pos: pos -> range option - - /// Gets the ranges of all arguments, if they can be found, for a function application at the given position. - member GetAllArgumentsForFunctionApplicationAtPostion: pos: pos -> range list option - - /// - /// Given the position of an expression, attempts to find the range of the - /// '!' in a derefence operation of that expression, like: - /// '!expr', '!(expr)', etc. - /// - member TryRangeOfRefCellDereferenceContainingPos: expressionPos: pos -> range option - - /// Gets the range of an expression being dereferenced. For `!expr`, gives the range of `expr` - member TryRangeOfExpressionBeingDereferencedContainingPos: expressionPos: pos -> range option - - /// Notable parse info for ParameterInfo at a given location - member FindParameterLocations: pos:pos -> ParameterLocations option - - /// Determines if the given position is contained within a curried parameter in a binding. - member IsPositionContainedInACurriedParameter: pos: pos -> bool - - /// Determines if the expression or pattern at the given position has a type annotation - member IsTypeAnnotationGivenAtPosition: pos -> bool - - /// Determines if the binding at the given position is bound to a lambda expression - member IsBindingALambdaAtPosition: pos -> bool - - /// Name of the file for which this information were created - member FileName: string - - /// Get declared items and the selected item at the specified location - member GetNavigationItems: unit -> NavigationItems - - /// Return the inner-most range associated with a possible breakpoint location - member ValidateBreakpointLocation: pos:pos -> range option - - /// When these files change then the build is invalid - member DependencyFiles: string[] - - /// Get the errors and warnings for the parse - member Diagnostics: FSharpDiagnostic[] - - /// Indicates if any errors occurred during the parse - member ParseHadErrors: bool - - internal new: diagnostics: FSharpDiagnostic[] * input: ParsedInput * parseHadErrors: bool * dependencyFiles: string[] -> FSharpParseFileResults - diff --git a/src/fsharp/service/IncrementalBuild.fs b/src/fsharp/service/IncrementalBuild.fs old mode 100644 new mode 100755 index ddcfefd2a5a..2ece0502cf5 --- a/src/fsharp/service/IncrementalBuild.fs +++ b/src/fsharp/service/IncrementalBuild.fs @@ -1,18 +1,18 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.CodeAnalysis +namespace FSharp.Compiler + open System open System.Collections.Generic -open System.Collections.Immutable open System.IO open System.Threading -open Internal.Utilities.Library -open Internal.Utilities.Collections + open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILBinaryReader +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CheckExpressions open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerConfig @@ -21,36 +21,32 @@ open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.CompilerImports open FSharp.Compiler.CompilerOptions open FSharp.Compiler.CreateILModule -open FSharp.Compiler.DependencyManager -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.EditorServices open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.IO -open FSharp.Compiler.CodeAnalysis open FSharp.Compiler.NameResolution open FSharp.Compiler.ParseAndCheckInputs +open FSharp.Compiler.Range open FSharp.Compiler.ScriptClosure -open FSharp.Compiler.Syntax +open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Xml -open FSharp.Compiler.TypedTree +open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.BuildGraph +open Microsoft.DotNet.DependencyManager + +open Internal.Utilities +open Internal.Utilities.Collections [] module internal IncrementalBuild = let mutable injectCancellationFault = false - let LocallyInjectCancellationFault() = + let LocallyInjectCancellationFault() = injectCancellationFault <- true - { new IDisposable with member _.Dispose() = injectCancellationFault <- false } + { new IDisposable with member __.Dispose() = injectCancellationFault <- false } -// Record the most recent IncrementalBuilder events, so we can more easily unit test/debug the +// Record the most recent IncrementalBuilder events, so we can more easily unit test/debug the // 'incremental' behavior of the product. -module IncrementalBuilderEventTesting = +module IncrementalBuilderEventTesting = type internal FixedLengthMRU<'T>() = let MAX = 400 // Length of the MRU. For our current unit tests, 400 is enough. @@ -86,13 +82,13 @@ module IncrementalBuilderEventTesting = | IBECreated // ++GLOBAL MUTABLE STATE FOR TESTING++ - let MRU = new FixedLengthMRU() + let MRU = new FixedLengthMRU() let GetMostRecentIncrementalBuildEvents n = MRU.MostRecentList n - let GetCurrentIncrementalBuildEventNum() = MRU.CurrentEventNum + let GetCurrentIncrementalBuildEventNum() = MRU.CurrentEventNum module Tc = FSharp.Compiler.CheckExpressions -// This module is only here to contain the SyntaxTree type as to avoid amiguity with the module FSharp.Compiler.Syntax. +// This module is only here to contain the SyntaxTree type as to avoid amiguity with the module FSharp.Compiler.SyntaxTree. [] module IncrementalBuildSyntaxTree = @@ -102,39 +98,39 @@ module IncrementalBuildSyntaxTree = let mutable weakCache: WeakReference<_> option = None - let parse(sigNameOpt: QualifiedNameOfFile option) = + let parse(sigNameOpt: SyntaxTree.QualifiedNameOfFile option) = let errorLogger = CompilationErrorLogger("Parse", tcConfig.errorSeverityOptions) // Return the disposable object that cleans up use _holder = new CompilationGlobalsScope(errorLogger, BuildPhase.Parse) - try + try IncrementalBuilderEventTesting.MRU.Add(IncrementalBuilderEventTesting.IBEParsed filename) let lower = String.lowercase filename - let canSkip = sigNameOpt.IsSome && FSharpImplFileSuffixes |> List.exists (FileSystemUtils.checkSuffix lower) - let input = + let canSkip = sigNameOpt.IsSome && FSharpImplFileSuffixes |> List.exists (Filename.checkSuffix lower) + let input = if canSkip then - ParsedInput.ImplFile( - ParsedImplFileInput( - filename, - false, + SyntaxTree.ParsedInput.ImplFile( + SyntaxTree.ParsedImplFileInput( + filename, + false, sigNameOpt.Value, [], [], [], isLastCompiland ) - ) + ) |> Some else ParseOneInputFile(tcConfig, lexResourceManager, [], filename, isLastCompiland, errorLogger, (*retryLocked*)true) fileParsed.Trigger filename - let res = input, sourceRange, filename, errorLogger.GetDiagnostics() + let res = input, sourceRange, filename, errorLogger.GetErrors () // If we do not skip parsing the file, then we can cache the real result. if not canSkip then weakCache <- Some(WeakReference<_>(res)) res - with exn -> + with exn -> let msg = sprintf "unexpected failure in SyntaxTree.parse\nerror = %s" (exn.ToString()) System.Diagnostics.Debug.Assert(false, msg) failwith msg @@ -149,7 +145,7 @@ module IncrementalBuildSyntaxTree = | _ -> parse sigNameOpt member _.Invalidate() = - SyntaxTree(tcConfig, fileParsed, lexResourceManager, sourceRange, filename, isLastCompiland) + weakCache <- None member _.FileName = filename @@ -168,128 +164,76 @@ type TcInfo = latestCcuSigForFile: ModuleOrNamespaceType option /// Accumulated errors, last file first - tcErrorsRev:(PhasedDiagnostic * FSharpDiagnosticSeverity)[] list + tcErrorsRev:(PhasedDiagnostic * FSharpErrorSeverity)[] list tcDependencyFiles: string list - sigNameOpt: (string * QualifiedNameOfFile) option + sigNameOpt: (string * SyntaxTree.QualifiedNameOfFile) option } - member x.TcErrors = + member x.TcErrors = Array.concat (List.rev x.tcErrorsRev) /// Accumulated results of type checking. Optional data that isn't needed to type-check a file, but needed for more information for in tooling. [] -type TcInfoExtras = +type TcInfoOptional = { - tcResolutions: TcResolutions - tcSymbolUses: TcSymbolUses - tcOpenDeclarations: OpenDeclaration[] + /// Accumulated resolutions, last file first + tcResolutionsRev: TcResolutions list + + /// Accumulated symbol uses, last file first + tcSymbolUsesRev: TcSymbolUses list + + /// Accumulated 'open' declarations, last file first + tcOpenDeclarationsRev: OpenDeclaration[] list /// Result of checking most recent file, if any latestImplFile: TypedImplFile option - + /// If enabled, stores a linear list of ranges and strings that identify an Item(symbol) in a file. Used for background find all references. itemKeyStore: ItemKeyStore option - + /// If enabled, holds semantic classification information for Item(symbol)s in a file. - semanticClassificationKeyStore: SemanticClassificationKeyStore option + semanticClassification: struct (range * SemanticClassificationType) [] } - member x.TcSymbolUses = - x.tcSymbolUses - -[] -module TcInfoHelpers = - - let emptyTcInfoExtras = - { - tcResolutions = TcResolutions.Empty - tcSymbolUses = TcSymbolUses.Empty - tcOpenDeclarations = [||] - latestImplFile = None - itemKeyStore = None - semanticClassificationKeyStore = None - } + member x.TcSymbolUses = + List.rev x.tcSymbolUsesRev /// Accumulated results of type checking. [] type TcInfoState = | PartialState of TcInfo - | FullState of TcInfo * TcInfoExtras - - member x.TcInfo = - match x with - | PartialState tcInfo -> tcInfo - | FullState (tcInfo, _) -> tcInfo + | FullState of TcInfo * TcInfoOptional - member x.TcInfoExtras = - match x with - | PartialState _ -> None - | FullState (_, tcInfoExtras) -> Some tcInfoExtras - -[] -type TcInfoNode = - | TcInfoNode of partial: GraphNode * full: GraphNode - - member this.HasFull = + member this.Partial = match this with - | TcInfoNode(_, full) -> full.HasValue - - static member FromState(state: TcInfoState) = - let tcInfo = state.TcInfo - let tcInfoExtras = state.TcInfoExtras - TcInfoNode(GraphNode(node { return tcInfo }), GraphNode(node { return tcInfo, defaultArg tcInfoExtras emptyTcInfoExtras })) + | PartialState tcInfo -> tcInfo + | FullState(tcInfo, _) -> tcInfo -/// Bound model of an underlying syntax and typed tree. +/// Semantic model of an underlying syntax tree. [] -type BoundModel private (tcConfig: TcConfig, - tcGlobals: TcGlobals, - tcImports: TcImports, - keepAssemblyContents, keepAllBackgroundResolutions, - keepAllBackgroundSymbolUses, - enableBackgroundItemKeyStoreAndSemanticClassification, - enablePartialTypeChecking, - beforeFileChecked: Event, - fileChecked: Event, - prevTcInfo: TcInfo, - syntaxTreeOpt: SyntaxTree option, - tcInfoStateOpt: TcInfoState option) as this = - - let tcInfoNode = - match tcInfoStateOpt with - | Some tcInfoState -> TcInfoNode.FromState(tcInfoState) - | _ -> - let fullGraphNode = - GraphNode(node { - match! this.TypeCheck(false) with - | FullState(tcInfo, tcInfoExtras) -> return tcInfo, tcInfoExtras - | PartialState(tcInfo) -> return tcInfo, emptyTcInfoExtras - }) - - let partialGraphNode = - GraphNode(node { - if enablePartialTypeChecking then - // Optimization so we have less of a chance to duplicate work. - if fullGraphNode.IsComputing then - let! tcInfo, _ = fullGraphNode.GetOrComputeValue() - return tcInfo - else - match fullGraphNode.TryPeekValue() with - | ValueSome(tcInfo, _) -> return tcInfo - | _ -> - let! tcInfoState = this.TypeCheck(true) - return tcInfoState.TcInfo - else - let! tcInfo, _ = fullGraphNode.GetOrComputeValue() - return tcInfo - }) - - TcInfoNode(partialGraphNode, fullGraphNode) +type SemanticModel private (tcConfig: TcConfig, + tcGlobals: TcGlobals, + tcImports: TcImports, + keepAssemblyContents, keepAllBackgroundResolutions, + maxTimeShareMilliseconds, keepAllBackgroundSymbolUses, + enableBackgroundItemKeyStoreAndSemanticClassification, + enablePartialTypeChecking, + beforeFileChecked: Event, + fileChecked: Event, + prevTcInfo: TcInfo, + prevTcInfoOptional: Eventually, + syntaxTreeOpt: SyntaxTree option, + lazyTcInfoState: TcInfoState option ref) = let defaultTypeCheck () = - node { - return PartialState(prevTcInfo) + eventually { + match prevTcInfoOptional with + | Eventually.Done(Some prevTcInfoOptional) -> + return FullState(prevTcInfo, prevTcInfoOptional) + | _ -> + return PartialState prevTcInfo } member _.TcConfig = tcConfig @@ -310,140 +254,136 @@ type BoundModel private (tcConfig: TcConfig, | _ -> None - /// If partial type-checking is enabled, - /// this will create a new bound-model that will only have the partial state if the - /// the current bound-model has the full state. - member this.ClearTcInfoExtras() = + member this.Invalidate() = let hasSig = this.BackingSignature.IsSome - + match !lazyTcInfoState with + // If partial checking is enabled and we have a backing sig file, then do nothing. The partial state contains the sig state. + | Some(PartialState _) when enablePartialTypeChecking && hasSig -> () // If partial checking is enabled and we have a backing sig file, then use the partial state. The partial state contains the sig state. - if tcInfoNode.HasFull && enablePartialTypeChecking && hasSig then - // Always invalidate the syntax tree cache. - let newSyntaxTreeOpt = - syntaxTreeOpt - |> Option.map (fun x -> x.Invalidate()) - - let newTcInfoStateOpt = - match tcInfoNode with - | TcInfoNode(_, fullGraphNode) -> - let tcInfo, _ = fullGraphNode.TryPeekValue().Value - Some(PartialState tcInfo) - - BoundModel( - tcConfig, - tcGlobals, - tcImports, - keepAssemblyContents, keepAllBackgroundResolutions, - keepAllBackgroundSymbolUses, - enableBackgroundItemKeyStoreAndSemanticClassification, - enablePartialTypeChecking, - beforeFileChecked, - fileChecked, - prevTcInfo, - newSyntaxTreeOpt, - newTcInfoStateOpt) - else - this - - member this.Next(syntaxTree, tcInfo) = - BoundModel( - tcConfig, - tcGlobals, - tcImports, - keepAssemblyContents, - keepAllBackgroundResolutions, - keepAllBackgroundSymbolUses, - enableBackgroundItemKeyStoreAndSemanticClassification, - enablePartialTypeChecking, - beforeFileChecked, - fileChecked, - tcInfo, - Some syntaxTree, - None) + | Some(FullState(tcInfo, _)) when enablePartialTypeChecking && hasSig -> lazyTcInfoState := Some(PartialState tcInfo) + | _ -> + lazyTcInfoState := None + + // Always invalidate the syntax tree cache. + syntaxTreeOpt + |> Option.iter (fun x -> x.Invalidate()) + + member this.GetState(partialCheck: bool) = + let partialCheck = + // Only partial check if we have enabled it. + if enablePartialTypeChecking then partialCheck + else false + + let mustCheck = + match !lazyTcInfoState, partialCheck with + | None, _ -> true + | Some(PartialState _), false -> true + | _ -> false + + if mustCheck then + lazyTcInfoState := None + + match !lazyTcInfoState with + | Some tcInfoState -> tcInfoState |> Eventually.Done + | _ -> + eventually { + let! tcInfoState = this.TypeCheck(partialCheck) + lazyTcInfoState := Some tcInfoState + return tcInfoState + } - member this.Finish(finalTcErrorsRev, finalTopAttribs) = - node { - let createFinish tcInfo = - { tcInfo with tcErrorsRev = finalTcErrorsRev; topAttribs = finalTopAttribs } - - let! finishState = - node { - match tcInfoNode with - | TcInfoNode(partialGraphNode, fullGraphNode) -> - if fullGraphNode.HasValue then - let! tcInfo, tcInfoExtras = fullGraphNode.GetOrComputeValue() - let finishTcInfo = createFinish tcInfo - return FullState(finishTcInfo, tcInfoExtras) - else - let! tcInfo = partialGraphNode.GetOrComputeValue() - let finishTcInfo = createFinish tcInfo - return PartialState(finishTcInfo) + member this.Next(syntaxTree) = + eventually { + let! prevState = this.GetState(true) + let lazyPrevTcInfoOptional = + eventually { + let! prevState = this.GetState(false) + match prevState with + | FullState(_, prevTcInfoOptional) -> return Some prevTcInfoOptional + | _ -> return None } + return + SemanticModel( + tcConfig, + tcGlobals, + tcImports, + keepAssemblyContents, + keepAllBackgroundResolutions, + maxTimeShareMilliseconds, + keepAllBackgroundSymbolUses, + enableBackgroundItemKeyStoreAndSemanticClassification, + enablePartialTypeChecking, + beforeFileChecked, + fileChecked, + prevState.Partial, + lazyPrevTcInfoOptional, + Some syntaxTree, + ref None) + } + + member this.Finish(finalTcErrorsRev, finalTopAttribs) = + eventually { + let! state = this.GetState(true) + + let finishTcInfo = { state.Partial with tcErrorsRev = finalTcErrorsRev; topAttribs = finalTopAttribs } + let finishState = + match state with + | PartialState(_) -> PartialState(finishTcInfo) + | FullState(_, tcInfoOptional) -> FullState(finishTcInfo, tcInfoOptional) return - BoundModel( + SemanticModel( tcConfig, tcGlobals, tcImports, - keepAssemblyContents, - keepAllBackgroundResolutions, - keepAllBackgroundSymbolUses, + keepAssemblyContents, + keepAllBackgroundResolutions, + maxTimeShareMilliseconds, + keepAllBackgroundSymbolUses, enableBackgroundItemKeyStoreAndSemanticClassification, enablePartialTypeChecking, - beforeFileChecked, - fileChecked, - prevTcInfo, + beforeFileChecked, + fileChecked, + prevTcInfo, + prevTcInfoOptional, syntaxTreeOpt, - Some finishState) + ref (Some finishState)) } - member _.TryPeekTcInfo() = - match tcInfoNode with - | TcInfoNode(partialGraphNode, fullGraphNode) -> - match partialGraphNode.TryPeekValue() with - | ValueSome tcInfo -> Some tcInfo - | _ -> - match fullGraphNode.TryPeekValue() with - | ValueSome(tcInfo, _) -> Some tcInfo - | _ -> None - - member _.TryPeekTcInfoWithExtras() = - match tcInfoNode with - | TcInfoNode(_, fullGraphNode) -> - match fullGraphNode.TryPeekValue() with - | ValueSome(tcInfo, tcInfoExtras) -> Some(tcInfo, tcInfoExtras) - | _ -> None - - member _.GetOrComputeTcInfo() = - match tcInfoNode with - | TcInfoNode(partialGraphNode, _) -> - partialGraphNode.GetOrComputeValue() - - member _.GetOrComputeTcInfoExtras() : NodeCode = - match tcInfoNode with - | TcInfoNode(_, fullGraphNode) -> - node { - let! _, tcInfoExtras = fullGraphNode.GetOrComputeValue() - return tcInfoExtras - } + member this.TcInfo = + eventually { + let! state = this.GetState(true) + return state.Partial + } - member _.GetOrComputeTcInfoWithExtras() = - match tcInfoNode with - | TcInfoNode(_, fullGraphNode) -> - fullGraphNode.GetOrComputeValue() + member this.TcInfoWithOptional = + eventually { + let! state = this.GetState(false) + match state with + | FullState(tcInfo, tcInfoOptional) -> return tcInfo, tcInfoOptional + | PartialState tcInfo -> + return + tcInfo, + { + tcResolutionsRev = [] + tcSymbolUsesRev = [] + tcOpenDeclarationsRev = [] + latestImplFile = None + itemKeyStore = None + semanticClassification = [||] + } + } - member private this.TypeCheck (partialCheck: bool) : NodeCode = - match partialCheck, tcInfoStateOpt with + member private this.TypeCheck (partialCheck: bool) = + match partialCheck, !lazyTcInfoState with | true, Some (PartialState _ as state) - | true, Some (FullState _ as state) -> node { return state } - | false, Some (FullState _ as state) -> node { return state } + | true, Some (FullState _ as state) -> state |> Eventually.Done + | false, Some (FullState _ as state) -> state |> Eventually.Done | _ -> - node { - match syntaxTreeOpt with - | None -> - let! res = defaultTypeCheck () - return res + eventually { + match syntaxTreeOpt with + | None -> return! defaultTypeCheck () | Some syntaxTree -> let sigNameOpt = if partialCheck then @@ -451,219 +391,222 @@ type BoundModel private (tcConfig: TcConfig, else None match syntaxTree.Parse sigNameOpt with - | input, _sourceRange, filename, parseErrors -> - + | Some input, _sourceRange, filename, parseErrors -> IncrementalBuilderEventTesting.MRU.Add(IncrementalBuilderEventTesting.IBETypechecked filename) let capturingErrorLogger = CompilationErrorLogger("TypeCheck", tcConfig.errorSeverityOptions) let errorLogger = GetErrorLoggerFilteringByScopedPragmas(false, GetScopedPragmasForInput input, capturingErrorLogger) - use _ = new CompilationGlobalsScope(errorLogger, BuildPhase.TypeCheck) - - beforeFileChecked.Trigger filename - let prevModuleNamesDict = prevTcInfo.moduleNamesDict - let prevTcState = prevTcInfo.tcState - let prevTcErrorsRev = prevTcInfo.tcErrorsRev - let prevTcDependencyFiles = prevTcInfo.tcDependencyFiles - - ApplyMetaCommandsFromInputToTcConfig (tcConfig, input, Path.GetDirectoryName filename, tcImports.DependencyProvider) |> ignore - let sink = TcResultsSinkImpl(tcGlobals) - let hadParseErrors = not (Array.isEmpty parseErrors) - let input, moduleNamesDict = DeduplicateParsedInputModuleName prevModuleNamesDict input - - Logger.LogBlockMessageStart filename LogCompilerFunctionId.IncrementalBuild_TypeCheck - - let! (tcEnvAtEndOfFile, topAttribs, implFile, ccuSigForFile), tcState = - TypeCheckOneInput - ((fun () -> hadParseErrors || errorLogger.ErrorCount > 0), - tcConfig, tcImports, - tcGlobals, - None, - (if partialCheck then TcResultsSink.NoSink else TcResultsSink.WithSink sink), - prevTcState, input, - partialCheck) - |> NodeCode.FromCancellable - - Logger.LogBlockMessageStop filename LogCompilerFunctionId.IncrementalBuild_TypeCheck - - fileChecked.Trigger filename - let newErrors = Array.append parseErrors (capturingErrorLogger.GetDiagnostics()) - - let tcEnvAtEndOfFile = if keepAllBackgroundResolutions then tcEnvAtEndOfFile else tcState.TcEnvFromImpls - - let tcInfo = - { - tcState = tcState - tcEnvAtEndOfFile = tcEnvAtEndOfFile - moduleNamesDict = moduleNamesDict - latestCcuSigForFile = Some ccuSigForFile - tcErrorsRev = newErrors :: prevTcErrorsRev - topAttribs = Some topAttribs - tcDependencyFiles = filename :: prevTcDependencyFiles - sigNameOpt = - match input with - | ParsedInput.SigFile(ParsedSigFileInput(fileName=fileName;qualifiedNameOfFile=qualName)) -> - Some(fileName, qualName) - | _ -> - None - } - - if partialCheck then - return PartialState tcInfo - else - // Build symbol keys - let itemKeyStore, semanticClassification = - if enableBackgroundItemKeyStoreAndSemanticClassification then - Logger.LogBlockMessageStart filename LogCompilerFunctionId.IncrementalBuild_CreateItemKeyStoreAndSemanticClassification - let sResolutions = sink.GetResolutions() - let builder = ItemKeyStoreBuilder() - let preventDuplicates = HashSet({ new IEqualityComparer with - member _.Equals((s1, e1): struct(pos * pos), (s2, e2): struct(pos * pos)) = Position.posEq s1 s2 && Position.posEq e1 e2 - member _.GetHashCode o = o.GetHashCode() }) - sResolutions.CapturedNameResolutions - |> Seq.iter (fun cnr -> - let r = cnr.Range - if preventDuplicates.Add struct(r.Start, r.End) then - builder.Write(cnr.Range, cnr.Item)) - - let semanticClassification = sResolutions.GetSemanticClassification(tcGlobals, tcImports.GetImportMap(), sink.GetFormatSpecifierLocations(), None) - - let sckBuilder = SemanticClassificationKeyStoreBuilder() - sckBuilder.WriteAll semanticClassification - - let res = builder.TryBuildAndReset(), sckBuilder.TryBuildAndReset() - Logger.LogBlockMessageStop filename LogCompilerFunctionId.IncrementalBuild_CreateItemKeyStoreAndSemanticClassification - res + let fullComputation = + eventually { + beforeFileChecked.Trigger filename + let prevModuleNamesDict = prevTcInfo.moduleNamesDict + let prevTcState = prevTcInfo.tcState + let prevTcErrorsRev = prevTcInfo.tcErrorsRev + let prevTcDependencyFiles = prevTcInfo.tcDependencyFiles + + ApplyMetaCommandsFromInputToTcConfig (tcConfig, input, Path.GetDirectoryName filename, tcImports.DependencyProvider) |> ignore + let sink = TcResultsSinkImpl(tcGlobals) + let hadParseErrors = not (Array.isEmpty parseErrors) + let input, moduleNamesDict = DeduplicateParsedInputModuleName prevModuleNamesDict input + + Logger.LogBlockMessageStart filename LogCompilerFunctionId.IncrementalBuild_TypeCheck + let! (tcEnvAtEndOfFile, topAttribs, implFile, ccuSigForFile), tcState = + TypeCheckOneInputEventually + ((fun () -> hadParseErrors || errorLogger.ErrorCount > 0), + tcConfig, tcImports, + tcGlobals, + None, + (if partialCheck then TcResultsSink.NoSink else TcResultsSink.WithSink sink), + prevTcState, input, + partialCheck) + Logger.LogBlockMessageStop filename LogCompilerFunctionId.IncrementalBuild_TypeCheck + + fileChecked.Trigger filename + let newErrors = Array.append parseErrors (capturingErrorLogger.GetErrors()) + + let tcEnvAtEndOfFile = if keepAllBackgroundResolutions then tcEnvAtEndOfFile else tcState.TcEnvFromImpls + + let tcInfo = + { + tcState = tcState + tcEnvAtEndOfFile = tcEnvAtEndOfFile + moduleNamesDict = moduleNamesDict + latestCcuSigForFile = Some ccuSigForFile + tcErrorsRev = newErrors :: prevTcErrorsRev + topAttribs = Some topAttribs + tcDependencyFiles = filename :: prevTcDependencyFiles + sigNameOpt = + match input with + | SyntaxTree.ParsedInput.SigFile(SyntaxTree.ParsedSigFileInput(fileName=fileName;qualifiedNameOfFile=qualName)) -> + Some(fileName, qualName) + | _ -> + None + } + + if partialCheck then + return PartialState tcInfo else - None, None - - let tcInfoExtras = - { - /// Only keep the typed interface files when doing a "full" build for fsc.exe, otherwise just throw them away - latestImplFile = if keepAssemblyContents then implFile else None - tcResolutions = (if keepAllBackgroundResolutions then sink.GetResolutions() else TcResolutions.Empty) - tcSymbolUses = (if keepAllBackgroundSymbolUses then sink.GetSymbolUses() else TcSymbolUses.Empty) - tcOpenDeclarations = sink.GetOpenDeclarations() - itemKeyStore = itemKeyStore - semanticClassificationKeyStore = semanticClassification - } - - return FullState(tcInfo, tcInfoExtras) - } + match! prevTcInfoOptional with + | None -> return PartialState tcInfo + | Some prevTcInfoOptional -> + // Build symbol keys + let itemKeyStore, semanticClassification = + if enableBackgroundItemKeyStoreAndSemanticClassification then + Logger.LogBlockMessageStart filename LogCompilerFunctionId.IncrementalBuild_CreateItemKeyStoreAndSemanticClassification + let sResolutions = sink.GetResolutions() + let builder = ItemKeyStoreBuilder() + let preventDuplicates = HashSet({ new IEqualityComparer with + member _.Equals((s1, e1): struct(pos * pos), (s2, e2): struct(pos * pos)) = Range.posEq s1 s2 && Range.posEq e1 e2 + member _.GetHashCode o = o.GetHashCode() }) + sResolutions.CapturedNameResolutions + |> Seq.iter (fun cnr -> + let r = cnr.Range + if preventDuplicates.Add struct(r.Start, r.End) then + builder.Write(cnr.Range, cnr.Item)) + + let res = builder.TryBuildAndReset(), sResolutions.GetSemanticClassification(tcGlobals, tcImports.GetImportMap(), sink.GetFormatSpecifierLocations(), None) + Logger.LogBlockMessageStop filename LogCompilerFunctionId.IncrementalBuild_CreateItemKeyStoreAndSemanticClassification + res + else + None, [||] + + let tcInfoOptional = + { + /// Only keep the typed interface files when doing a "full" build for fsc.exe, otherwise just throw them away + latestImplFile = if keepAssemblyContents then implFile else None + tcResolutionsRev = (if keepAllBackgroundResolutions then sink.GetResolutions() else TcResolutions.Empty) :: prevTcInfoOptional.tcResolutionsRev + tcSymbolUsesRev = (if keepAllBackgroundSymbolUses then sink.GetSymbolUses() else TcSymbolUses.Empty) :: prevTcInfoOptional.tcSymbolUsesRev + tcOpenDeclarationsRev = sink.GetOpenDeclarations() :: prevTcInfoOptional.tcOpenDeclarationsRev + itemKeyStore = itemKeyStore + semanticClassification = semanticClassification + } + + return FullState(tcInfo, tcInfoOptional) + + } + + // Run part of the Eventually<_> computation until a timeout is reached. If not complete, + // return a new Eventually<_> computation which recursively runs more of the computation. + // - When the whole thing is finished commit the error results sent through the errorLogger. + // - Each time we do real work we reinstall the CompilationGlobalsScope + let timeSlicedComputation = + fullComputation |> + Eventually.repeatedlyProgressUntilDoneOrTimeShareOverOrCanceled + maxTimeShareMilliseconds + CancellationToken.None + (fun ctok f -> + // Reinstall the compilation globals each time we start or restart + use unwind = new CompilationGlobalsScope (errorLogger, BuildPhase.TypeCheck) + f ctok) + return! timeSlicedComputation + | _ -> + return! defaultTypeCheck () + } static member Create(tcConfig: TcConfig, tcGlobals: TcGlobals, tcImports: TcImports, keepAssemblyContents, keepAllBackgroundResolutions, - keepAllBackgroundSymbolUses, + maxTimeShareMilliseconds, keepAllBackgroundSymbolUses, enableBackgroundItemKeyStoreAndSemanticClassification, enablePartialTypeChecking, beforeFileChecked: Event, fileChecked: Event, prevTcInfo: TcInfo, + prevTcInfoOptional: Eventually, syntaxTreeOpt: SyntaxTree option) = - BoundModel(tcConfig, tcGlobals, tcImports, - keepAssemblyContents, keepAllBackgroundResolutions, - keepAllBackgroundSymbolUses, + SemanticModel(tcConfig, tcGlobals, tcImports, + keepAssemblyContents, keepAllBackgroundResolutions, + maxTimeShareMilliseconds, keepAllBackgroundSymbolUses, enableBackgroundItemKeyStoreAndSemanticClassification, enablePartialTypeChecking, beforeFileChecked, fileChecked, prevTcInfo, + prevTcInfoOptional, syntaxTreeOpt, - None) - + ref None) + /// Global service state type FrameworkImportsCacheKey = (*resolvedpath*)string list * string * (*TargetFrameworkDirectories*)string list * (*fsharpBinaries*)string * (*langVersion*)decimal /// Represents a cache of 'framework' references that can be shared between multiple incremental builds -type FrameworkImportsCache(size) = - - let gate = obj() +type FrameworkImportsCache(size) = - // Mutable collection protected via CompilationThreadToken - let frameworkTcImportsCache = AgedLookup>(size, areSimilar=(fun (x, y) -> x = y)) + // Mutable collection protected via CompilationThreadToken + let frameworkTcImportsCache = AgedLookup(size, areSimilar=(fun (x, y) -> x = y)) /// Reduce the size of the cache in low-memory scenarios - member _.Downsize() = frameworkTcImportsCache.Resize(AnyCallerThread, newKeepStrongly=0) + member __.Downsize ctok = frameworkTcImportsCache.Resize(ctok, newKeepStrongly=0) /// Clear the cache - member _.Clear() = frameworkTcImportsCache.Clear AnyCallerThread + member __.Clear ctok = frameworkTcImportsCache.Clear ctok /// This function strips the "System" assemblies from the tcConfig and returns a age-cached TcImports for them. - member _.GetNode(tcConfig: TcConfig, frameworkDLLs: AssemblyResolution list, nonFrameworkResolutions: AssemblyResolution list) = - let frameworkDLLsKey = - frameworkDLLs + member __.Get(ctok, tcConfig: TcConfig) = + cancellable { + // Split into installed and not installed. + let frameworkDLLs, nonFrameworkResolutions, unresolved = TcAssemblyResolutions.SplitNonFoundationalResolutions(ctok, tcConfig) + let frameworkDLLsKey = + frameworkDLLs |> List.map (fun ar->ar.resolvedPath) // The cache key. Just the minimal data. |> List.sort // Sort to promote cache hits. - // Prepare the frameworkTcImportsCache - // - // The data elements in this key are very important. There should be nothing else in the TcConfig that logically affects - // the import of a set of framework DLLs into F# CCUs. That is, the F# CCUs that result from a set of DLLs (including - // FSharp.Core.dll and mscorlib.dll) must be logically invariant of all the other compiler configuration parameters. - let key = (frameworkDLLsKey, - tcConfig.primaryAssembly.Name, - tcConfig.GetTargetFrameworkDirectories(), - tcConfig.fsharpBinariesDir, - tcConfig.langVersion.SpecifiedVersion) - - let node = - lock gate (fun () -> - match frameworkTcImportsCache.TryGet (AnyCallerThread, key) with - | Some lazyWork -> lazyWork - | None -> - let lazyWork = GraphNode(node { - let tcConfigP = TcConfigProvider.Constant tcConfig - return! TcImports.BuildFrameworkTcImports (tcConfigP, frameworkDLLs, nonFrameworkResolutions) - }) - frameworkTcImportsCache.Put(AnyCallerThread, key, lazyWork) - lazyWork - ) - node - - /// This function strips the "System" assemblies from the tcConfig and returns a age-cached TcImports for them. - member this.Get(tcConfig: TcConfig) = - node { - // Split into installed and not installed. - let frameworkDLLs, nonFrameworkResolutions, unresolved = TcAssemblyResolutions.SplitNonFoundationalResolutions(tcConfig) - let node = this.GetNode(tcConfig, frameworkDLLs, nonFrameworkResolutions) - let! tcGlobals, frameworkTcImports = node.GetOrComputeValue() + let! tcGlobals, frameworkTcImports = + cancellable { + // Prepare the frameworkTcImportsCache + // + // The data elements in this key are very important. There should be nothing else in the TcConfig that logically affects + // the import of a set of framework DLLs into F# CCUs. That is, the F# CCUs that result from a set of DLLs (including + // FSharp.Core.dll and mscorlib.dll) must be logically invariant of all the other compiler configuration parameters. + let key = (frameworkDLLsKey, + tcConfig.primaryAssembly.Name, + tcConfig.GetTargetFrameworkDirectories(), + tcConfig.fsharpBinariesDir, + tcConfig.langVersion.SpecifiedVersion) + + match frameworkTcImportsCache.TryGet (ctok, key) with + | Some res -> return res + | None -> + let tcConfigP = TcConfigProvider.Constant tcConfig + let! ((tcGlobals, tcImports) as res) = TcImports.BuildFrameworkTcImports (ctok, tcConfigP, frameworkDLLs, nonFrameworkResolutions) + frameworkTcImportsCache.Put(ctok, key, res) + return tcGlobals, tcImports + } return tcGlobals, frameworkTcImports, nonFrameworkResolutions, unresolved } /// Represents the interim state of checking an assembly [] -type PartialCheckResults (boundModel: BoundModel, timeStamp: DateTime) = - - member _.TcImports = boundModel.TcImports +type PartialCheckResults private (semanticModel: SemanticModel, timeStamp: DateTime) = - member _.TcGlobals = boundModel.TcGlobals + let eval ctok (work: Eventually<'T>) = + match work with + | Eventually.Done res -> res + | _ -> Eventually.force ctok work - member _.TcConfig = boundModel.TcConfig + member _.TcImports = semanticModel.TcImports + member _.TcGlobals = semanticModel.TcGlobals + member _.TcConfig = semanticModel.TcConfig member _.TimeStamp = timeStamp - member _.TryPeekTcInfo() = boundModel.TryPeekTcInfo() - - member _.TryPeekTcInfoWithExtras() = boundModel.TryPeekTcInfoWithExtras() + member _.TcInfo ctok = semanticModel.TcInfo |> eval ctok - member _.GetOrComputeTcInfo() = boundModel.GetOrComputeTcInfo() + member _.TcInfoWithOptional ctok = semanticModel.TcInfoWithOptional |> eval ctok - member _.GetOrComputeTcInfoWithExtras() = boundModel.GetOrComputeTcInfoWithExtras() + member _.TryGetItemKeyStore ctok = + let _, info = semanticModel.TcInfoWithOptional |> eval ctok + info.itemKeyStore - member _.GetOrComputeItemKeyStoreIfEnabled() = - node { - let! info = boundModel.GetOrComputeTcInfoExtras() - return info.itemKeyStore - } + member _.GetSemanticClassification ctok = + let _, info = semanticModel.TcInfoWithOptional |> eval ctok + info.semanticClassification - member _.GetOrComputeSemanticClassificationIfEnabled() = - node { - let! info = boundModel.GetOrComputeTcInfoExtras() - return info.semanticClassificationKeyStore - } + static member Create (semanticModel: SemanticModel, timestamp) = + PartialCheckResults(semanticModel, timestamp) [] -module Utilities = +module Utilities = let TryFindFSharpStringAttribute tcGlobals attribSpec attribs = match TryFindFSharpAttribute tcGlobals attribSpec attribs with | Some (Attrib(_, _, [ AttribStringArg s ], _, _, _, _)) -> Some s @@ -671,15 +614,16 @@ module Utilities = /// The implementation of the information needed by TcImports in CompileOps.fs for an F# assembly reference. // -/// Constructs the build data (IRawFSharpAssemblyData) representing the assembly when used +/// Constructs the build data (IRawFSharpAssemblyData) representing the assembly when used /// as a cross-assembly reference. Note the assembly has not been generated on disk, so this is /// a virtualized view of the assembly contents as computed by background checking. -type RawFSharpAssemblyDataBackedByLanguageService (tcConfig, tcGlobals, generatedCcu: CcuThunk, outfile, topAttrs, assemblyName, ilAssemRef) = +type RawFSharpAssemblyDataBackedByLanguageService (tcConfig, tcGlobals, tcState: TcState, outfile, topAttrs, assemblyName, ilAssemRef) = + let generatedCcu = tcState.Ccu let exportRemapping = MakeExportRemapping generatedCcu generatedCcu.Contents - - let sigData = - let _sigDataAttributes, sigDataResources = EncodeSignatureData(tcConfig, tcGlobals, exportRemapping, generatedCcu, outfile, true) + + let sigData = + let _sigDataAttributes, sigDataResources = Driver.EncodeSignatureData(tcConfig, tcGlobals, exportRemapping, generatedCcu, outfile, true) [ for r in sigDataResources do let ccuName = GetSignatureDataResourceName r yield (ccuName, (fun () -> r.GetBytes())) ] @@ -688,103 +632,103 @@ type RawFSharpAssemblyDataBackedByLanguageService (tcConfig, tcGlobals, generate let ivtAttrs = topAttrs.assemblyAttrs |> List.choose (List.singleton >> TryFindFSharpStringAttribute tcGlobals tcGlobals.attrib_InternalsVisibleToAttribute) - interface IRawFSharpAssemblyData with - member _.GetAutoOpenAttributes() = autoOpenAttrs - member _.GetInternalsVisibleToAttributes() = ivtAttrs - member _.TryGetILModuleDef() = None - member _.GetRawFSharpSignatureData(_m, _ilShortAssemName, _filename) = sigData - member _.GetRawFSharpOptimizationData(_m, _ilShortAssemName, _filename) = [ ] - member _.GetRawTypeForwarders() = mkILExportedTypes [] // TODO: cross-project references with type forwarders - member _.ShortAssemblyName = assemblyName - member _.ILScopeRef = IL.ILScopeRef.Assembly ilAssemRef - member _.ILAssemblyRefs = [] // These are not significant for service scenarios - member _.HasAnyFSharpSignatureDataAttribute = true - member _.HasMatchingFSharpSignatureDataAttribute = true - -type IncrementalBuilderState = - { - // stampedFileNames represent the real stamps of the files. - // logicalStampedFileNames represent the stamps of the files that are used to calculate the project's logical timestamp. - stampedFileNames: ImmutableArray - logicalStampedFileNames: ImmutableArray - stampedReferencedAssemblies: ImmutableArray - initialBoundModel: GraphNode - boundModels: ImmutableArray> - finalizedBoundModel: GraphNode<((ILAssemblyRef * IRawFSharpAssemblyData option * TypedImplFile list option * BoundModel) * DateTime)> - } + interface IRawFSharpAssemblyData with + member __.GetAutoOpenAttributes(_ilg) = autoOpenAttrs + member __.GetInternalsVisibleToAttributes(_ilg) = ivtAttrs + member __.TryGetILModuleDef() = None + member __.GetRawFSharpSignatureData(_m, _ilShortAssemName, _filename) = sigData + member __.GetRawFSharpOptimizationData(_m, _ilShortAssemName, _filename) = [ ] + member __.GetRawTypeForwarders() = mkILExportedTypes [] // TODO: cross-project references with type forwarders + member __.ShortAssemblyName = assemblyName + member __.ILScopeRef = IL.ILScopeRef.Assembly ilAssemRef + member __.ILAssemblyRefs = [] // These are not significant for service scenarios + member __.HasAnyFSharpSignatureDataAttribute = true + member __.HasMatchingFSharpSignatureDataAttribute _ilg = true /// Manages an incremental build graph for the build of a single F# project -type IncrementalBuilder( - initialBoundModel: BoundModel, - tcGlobals, - nonFrameworkAssemblyInputs, - tcConfig: TcConfig, - outfile, - assemblyName, - lexResourceManager, - sourceFiles, - enablePartialTypeChecking, - beforeFileChecked: Event, - fileChecked: Event, +type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInputs, nonFrameworkResolutions, unresolvedReferences, tcConfig: TcConfig, projectDirectory, outfile, + assemblyName, niceNameGen: NiceNameGenerator, lexResourceManager, + sourceFiles, loadClosureOpt: LoadClosure option, + keepAssemblyContents, keepAllBackgroundResolutions, + maxTimeShareMilliseconds, keepAllBackgroundSymbolUses, + enableBackgroundItemKeyStoreAndSemanticClassification, + enablePartialTypeChecking, + dependencyProviderOpt: DependencyProvider option) = + + let tcConfigP = TcConfigProvider.Constant tcConfig + let fileParsed = new Event() + let beforeFileChecked = new Event() + let fileChecked = new Event() + let projectChecked = new Event() #if !NO_EXTENSIONTYPING - importsInvalidatedByTypeProvider: Event, + let importsInvalidatedByTypeProvider = new Event() #endif - allDependencies) = + let mutable currentTcImportsOpt = None + let defaultPartialTypeChecking = enablePartialTypeChecking + let mutable enablePartialTypeChecking = enablePartialTypeChecking - let fileParsed = new Event() - let projectChecked = new Event() + // Check for the existence of loaded sources and prepend them to the sources list if present. + let sourceFiles = tcConfig.GetAvailableLoadedSources() @ (sourceFiles |>List.map (fun s -> rangeStartup, s)) + + // Mark up the source files with an indicator flag indicating if they are the last source file in the project + let sourceFiles = + let flags, isExe = tcConfig.ComputeCanContainEntryPoint(sourceFiles |> List.map snd) + ((sourceFiles, flags) ||> List.map2 (fun (m, nm) flag -> (m, nm, (flag, isExe)))) let defaultTimeStamp = DateTime.UtcNow - let mutable isImportsInvalidated = false + let basicDependencies = + [ for (UnresolvedAssemblyReference(referenceText, _)) in unresolvedReferences do + // Exclude things that are definitely not a file name + if not(FileSystem.IsInvalidPathShim referenceText) then + let file = if FileSystem.IsPathRootedShim referenceText then referenceText else Path.Combine(projectDirectory, referenceText) + yield file -#if !NO_EXTENSIONTYPING - do importsInvalidatedByTypeProvider.Publish.Add(fun () -> isImportsInvalidated <- true) -#endif + for r in nonFrameworkResolutions do + yield r.resolvedPath ] - //---------------------------------------------------- - // START OF BUILD TASK FUNCTIONS + let allDependencies = + [| yield! basicDependencies + for (_, f, _) in sourceFiles do + yield f |] + // For scripts, the dependency provider is already available. + // For projects create a fresh one for the project. + let dependencyProvider = + match dependencyProviderOpt with + | None -> new DependencyProvider() + | Some dependencyProvider -> dependencyProvider + + //---------------------------------------------------- + // START OF BUILD TASK FUNCTIONS + /// Get the timestamp of the given file name. - let StampFileNameTask (cache: TimeStampCache) (_m: range, filename: string, _isLastCompiland) = + let StampFileNameTask (cache: TimeStampCache) _ctok (_m: range, filename: string, _isLastCompiland) = cache.GetFileTimeStamp filename + /// Parse the given file and return the given input. + let ParseTask ctok (sourceRange: range, filename: string, isLastCompiland) = + DoesNotRequireCompilerThreadTokenAndCouldPossiblyBeMadeConcurrent ctok + SyntaxTree(tcConfig, fileParsed, lexResourceManager, sourceRange, filename, isLastCompiland) + /// Timestamps of referenced assemblies are taken from the file's timestamp. - let StampReferencedAssemblyTask (cache: TimeStampCache) (_ref, timeStamper) = - timeStamper cache - - // Link all the assemblies together and produce the input typecheck accumulator - static let CombineImportedAssembliesTask ( - assemblyName, - tcConfig: TcConfig, - tcConfigP, - tcGlobals, - frameworkTcImports, - nonFrameworkResolutions, - unresolvedReferences, - dependencyProvider, - loadClosureOpt: LoadClosure option, - niceNameGen, - basicDependencies, - keepAssemblyContents, - keepAllBackgroundResolutions, - keepAllBackgroundSymbolUses, - enableBackgroundItemKeyStoreAndSemanticClassification, - defaultPartialTypeChecking, - beforeFileChecked, - fileChecked, - importsInvalidatedByTypeProvider: Event) : NodeCode = - node { + let StampReferencedAssemblyTask (cache: TimeStampCache) ctok (_ref, timeStamper) = + timeStamper cache ctok + + // Link all the assemblies together and produce the input typecheck accumulator + let CombineImportedAssembliesTask ctok : Cancellable = + cancellable { let errorLogger = CompilationErrorLogger("CombineImportedAssembliesTask", tcConfig.errorSeverityOptions) - use _ = new CompilationGlobalsScope(errorLogger, BuildPhase.Parameter) + // Return the disposable object that cleans up + use _holder = new CompilationGlobalsScope(errorLogger, BuildPhase.Parameter) - let! tcImports = - node { + let! tcImports = + cancellable { try - let! tcImports = TcImports.BuildNonFrameworkTcImports(tcConfigP, frameworkTcImports, nonFrameworkResolutions, unresolvedReferences, dependencyProvider) + let! tcImports = TcImports.BuildNonFrameworkTcImports(ctok, tcConfigP, tcGlobals, frameworkTcImports, nonFrameworkResolutions, unresolvedReferences, dependencyProvider) #if !NO_EXTENSIONTYPING - tcImports.GetCcusExcludingBase() |> Seq.iter (fun ccu -> - // When a CCU reports an invalidation, merge them together and just report a + tcImports.GetCcusExcludingBase() |> Seq.iter (fun ccu -> + // When a CCU reports an invalidation, merge them together and just report a // general "imports invalidated". This triggers a rebuild. // // We are explicit about what the handler closure captures to help reason about the @@ -792,526 +736,540 @@ type IncrementalBuilder( // or keeps itself alive mistakenly, e.g. via some global state in the type provider instance. // // The handler only captures - // 1. a weak reference to the importsInvalidated event. + // 1. a weak reference to the importsInvalidated event. // // The IncrementalBuilder holds the strong reference the importsInvalidated event. // - // In the invalidation handler we use a weak reference to allow the IncrementalBuilder to + // In the invalidation handler we use a weak reference to allow the IncrementalBuilder to // be collected if, for some reason, a TP instance is not disposed or not GC'd. let capturedImportsInvalidated = WeakReference<_>(importsInvalidatedByTypeProvider) - ccu.Deref.InvalidateEvent.Add(fun _ -> - match capturedImportsInvalidated.TryGetTarget() with - | true, tg -> tg.Trigger() - | _ -> ())) + ccu.Deref.InvalidateEvent.Add(fun msg -> + match capturedImportsInvalidated.TryGetTarget() with + | true, tg -> tg.Trigger msg + | _ -> ())) #endif + currentTcImportsOpt <- Some tcImports return tcImports - with e -> + with e -> System.Diagnostics.Debug.Assert(false, sprintf "Could not BuildAllReferencedDllTcImports %A" e) errorLogger.Warning e - return frameworkTcImports + return frameworkTcImports } let tcInitial = GetInitialTcEnv (assemblyName, rangeStartup, tcConfig, tcImports, tcGlobals) let tcState = GetInitialTcState (rangeStartup, assemblyName, tcConfig, tcGlobals, tcImports, niceNameGen, tcInitial) - let loadClosureErrors = - [ match loadClosureOpt with + let loadClosureErrors = + [ match loadClosureOpt with | None -> () - | Some loadClosure -> + | Some loadClosure -> for inp in loadClosure.Inputs do - yield! inp.MetaCommandDiagnostics ] + for (err, isError) in inp.MetaCommandDiagnostics do + yield err, (if isError then FSharpErrorSeverity.Error else FSharpErrorSeverity.Warning) ] - let initialErrors = Array.append (Array.ofList loadClosureErrors) (errorLogger.GetDiagnostics()) - let tcInfo = + let initialErrors = Array.append (Array.ofList loadClosureErrors) (errorLogger.GetErrors()) + let tcInfo = { tcState=tcState tcEnvAtEndOfFile=tcInitial topAttribs=None latestCcuSigForFile=None - tcErrorsRev = [ initialErrors ] + tcErrorsRev = [ initialErrors ] moduleNamesDict = Map.empty tcDependencyFiles = basicDependencies sigNameOpt = None } - return - BoundModel.Create( + let tcInfoOptional = + { + tcResolutionsRev=[] + tcSymbolUsesRev=[] + tcOpenDeclarationsRev=[] + latestImplFile=None + itemKeyStore = None + semanticClassification = [||] + } + return + SemanticModel.Create( tcConfig, tcGlobals, tcImports, - keepAssemblyContents, - keepAllBackgroundResolutions, - keepAllBackgroundSymbolUses, + keepAssemblyContents, + keepAllBackgroundResolutions, + maxTimeShareMilliseconds, + keepAllBackgroundSymbolUses, enableBackgroundItemKeyStoreAndSemanticClassification, defaultPartialTypeChecking, - beforeFileChecked, - fileChecked, - tcInfo, - None) } - - /// Type check all files eagerly. - let TypeCheckTask partialCheck (prevBoundModel: BoundModel) syntaxTree: NodeCode = - node { - let! tcInfo = prevBoundModel.GetOrComputeTcInfo() - let boundModel = prevBoundModel.Next(syntaxTree, tcInfo) - + beforeFileChecked, fileChecked, tcInfo, Eventually.Done (Some tcInfoOptional), None) } + + /// Type check all files. + let TypeCheckTask ctok (prevSemanticModel: SemanticModel) syntaxTree: Eventually = + eventually { + RequireCompilationThread ctok + let! semanticModel = prevSemanticModel.Next(syntaxTree) // Eagerly type check // We need to do this to keep the expected behavior of events (namely fileChecked) when checking a file/project. - if partialCheck then - let! _ = boundModel.GetOrComputeTcInfo() - () - else - let! _ = boundModel.GetOrComputeTcInfoWithExtras() - () - - return boundModel + let! _ = semanticModel.GetState(enablePartialTypeChecking) + return semanticModel } /// Finish up the typechecking to produce outputs for the rest of the compilation process - let FinalizeTypeCheckTask (boundModels: ImmutableArray) = - node { - let errorLogger = CompilationErrorLogger("FinalizeTypeCheckTask", tcConfig.errorSeverityOptions) - use _ = new CompilationGlobalsScope(errorLogger, BuildPhase.TypeCheck) - - let! results = - boundModels - |> Seq.map (fun boundModel -> node { - if enablePartialTypeChecking then - let! tcInfo = boundModel.GetOrComputeTcInfo() - return tcInfo, None - else - let! tcInfo, tcInfoExtras = boundModel.GetOrComputeTcInfoWithExtras() - return tcInfo, tcInfoExtras.latestImplFile - }) - |> Seq.map (fun work -> - node { - let! tcInfo, latestImplFile = work - return (tcInfo.tcEnvAtEndOfFile, defaultArg tcInfo.topAttribs EmptyTopAttrs, latestImplFile, tcInfo.latestCcuSigForFile) - } - ) - |> NodeCode.Sequential + let FinalizeTypeCheckTask ctok (semanticModels: SemanticModel[]) = + cancellable { + DoesNotRequireCompilerThreadTokenAndCouldPossiblyBeMadeConcurrent ctok - let results = results |> List.ofSeq + let errorLogger = CompilationErrorLogger("CombineImportedAssembliesTask", tcConfig.errorSeverityOptions) + use _holder = new CompilationGlobalsScope(errorLogger, BuildPhase.TypeCheck) // Get the state at the end of the type-checking of the last file - let finalBoundModel = boundModels.[boundModels.Length-1] + let finalSemanticModel = semanticModels.[semanticModels.Length-1] - let! finalInfo = finalBoundModel.GetOrComputeTcInfo() + let finalInfo = finalSemanticModel.TcInfo |> Eventually.force ctok // Finish the checking - let (_tcEnvAtEndOfLastFile, topAttrs, mimpls, _), tcState = + let (_tcEnvAtEndOfLastFile, topAttrs, mimpls, _), tcState = + let results = + semanticModels + |> List.ofArray + |> List.map (fun semanticModel -> + let tcInfo, latestImplFile = + if enablePartialTypeChecking then + let tcInfo = semanticModel.TcInfo |> Eventually.force ctok + tcInfo, None + else + let tcInfo, tcInfoOptional = semanticModel.TcInfoWithOptional |> Eventually.force ctok + tcInfo, tcInfoOptional.latestImplFile + tcInfo.tcEnvAtEndOfFile, defaultArg tcInfo.topAttribs EmptyTopAttrs, latestImplFile, tcInfo.latestCcuSigForFile) TypeCheckMultipleInputsFinish (results, finalInfo.tcState) - - let ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt = + + let ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt = try - let tcState, tcAssemblyExpr, ccuContents = TypeCheckClosedInputSetFinish (mimpls, tcState) + // TypeCheckClosedInputSetFinish fills in tcState.Ccu but in incremental scenarios we don't want this, + // so we make this temporary here + let oldContents = tcState.Ccu.Deref.Contents + try + let tcState, tcAssemblyExpr = TypeCheckClosedInputSetFinish (mimpls, tcState) + + // Compute the identity of the generated assembly based on attributes, options etc. + // Some of this is duplicated from fsc.fs + let ilAssemRef = + let publicKey = + try + let signingInfo = ValidateKeySigningAttributes (tcConfig, tcGlobals, topAttrs) + match GetStrongNameSigner signingInfo with + | None -> None + | Some s -> Some (PublicKey.KeyAsToken(s.PublicKey)) + with e -> + errorRecoveryNoRange e + None + let locale = TryFindFSharpStringAttribute tcGlobals (tcGlobals.FindSysAttrib "System.Reflection.AssemblyCultureAttribute") topAttrs.assemblyAttrs + let assemVerFromAttrib = + TryFindFSharpStringAttribute tcGlobals (tcGlobals.FindSysAttrib "System.Reflection.AssemblyVersionAttribute") topAttrs.assemblyAttrs + |> Option.bind (fun v -> try Some (parseILVersion v) with _ -> None) + let ver = + match assemVerFromAttrib with + | None -> tcConfig.version.GetVersionInfo(tcConfig.implicitIncludeDir) + | Some v -> v + ILAssemblyRef.Create(assemblyName, None, publicKey, false, Some ver, locale) + + let tcAssemblyDataOpt = + try - let generatedCcu = tcState.Ccu.CloneWithFinalizedContents(ccuContents) + // Assemblies containing type provider components can not successfully be used via cross-assembly references. + // We return 'None' for the assembly portion of the cross-assembly reference + let hasTypeProviderAssemblyAttrib = + topAttrs.assemblyAttrs |> List.exists (fun (Attrib(tcref, _, _, _, _, _, _)) -> + let nm = tcref.CompiledRepresentationForNamedType.BasicQualifiedName + nm = typeof.FullName) - // Compute the identity of the generated assembly based on attributes, options etc. - // Some of this is duplicated from fsc.fs - let ilAssemRef = - let publicKey = - try - let signingInfo = ValidateKeySigningAttributes (tcConfig, tcGlobals, topAttrs) - match GetStrongNameSigner signingInfo with - | None -> None - | Some s -> Some (PublicKey.KeyAsToken(s.PublicKey)) - with e -> - errorRecoveryNoRange e + if tcState.CreatesGeneratedProvidedTypes || hasTypeProviderAssemblyAttrib then None - let locale = TryFindFSharpStringAttribute tcGlobals (tcGlobals.FindSysAttrib "System.Reflection.AssemblyCultureAttribute") topAttrs.assemblyAttrs - let assemVerFromAttrib = - TryFindFSharpStringAttribute tcGlobals (tcGlobals.FindSysAttrib "System.Reflection.AssemblyVersionAttribute") topAttrs.assemblyAttrs - |> Option.bind (fun v -> try Some (parseILVersion v) with _ -> None) - let ver = - match assemVerFromAttrib with - | None -> tcConfig.version.GetVersionInfo(tcConfig.implicitIncludeDir) - | Some v -> v - ILAssemblyRef.Create(assemblyName, None, publicKey, false, Some ver, locale) - - let tcAssemblyDataOpt = - try - // Assemblies containing type provider components can not successfully be used via cross-assembly references. - // We return 'None' for the assembly portion of the cross-assembly reference - let hasTypeProviderAssemblyAttrib = - topAttrs.assemblyAttrs |> List.exists (fun (Attrib(tcref, _, _, _, _, _, _)) -> - let nm = tcref.CompiledRepresentationForNamedType.BasicQualifiedName - nm = typeof.FullName) - - if tcState.CreatesGeneratedProvidedTypes || hasTypeProviderAssemblyAttrib then + else + Some (RawFSharpAssemblyDataBackedByLanguageService (tcConfig, tcGlobals, tcState, outfile, topAttrs, assemblyName, ilAssemRef) :> IRawFSharpAssemblyData) + + with e -> + errorRecoveryNoRange e None - else - Some (RawFSharpAssemblyDataBackedByLanguageService (tcConfig, tcGlobals, generatedCcu, outfile, topAttrs, assemblyName, ilAssemRef) :> IRawFSharpAssemblyData) - with e -> - errorRecoveryNoRange e - None - ilAssemRef, tcAssemblyDataOpt, Some tcAssemblyExpr - with e -> + ilAssemRef, tcAssemblyDataOpt, Some tcAssemblyExpr + finally + tcState.Ccu.Deref.Contents <- oldContents + with e -> errorRecoveryNoRange e mkSimpleAssemblyRef assemblyName, None, None - let diagnostics = errorLogger.GetDiagnostics() :: finalInfo.tcErrorsRev - let! finalBoundModelWithErrors = finalBoundModel.Finish(diagnostics, Some topAttrs) - return ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt, finalBoundModelWithErrors - } + let finalSemanticModelWithErrors = finalSemanticModel.Finish((errorLogger.GetErrors() :: finalInfo.tcErrorsRev), Some topAttrs) |> Eventually.force ctok + return ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt, finalSemanticModelWithErrors + } // END OF BUILD TASK FUNCTIONS - // --------------------------------------------------------------------------------------------- + // --------------------------------------------------------------------------------------------- - // --------------------------------------------------------------------------------------------- + // --------------------------------------------------------------------------------------------- // START OF BUILD DESCRIPTION - let GetSyntaxTree (sourceRange: range, filename: string, isLastCompiland) = - SyntaxTree(tcConfig, fileParsed, lexResourceManager, sourceRange, filename, isLastCompiland) - // Inputs let fileNames = sourceFiles |> Array.ofList // TODO: This should be an immutable array. let referencedAssemblies = nonFrameworkAssemblyInputs |> Array.ofList // TODO: This should be an immutable array. - let createBoundModelGraphNode initialBoundModel (boundModels: ImmutableArray>.Builder) i = - let fileInfo = fileNames.[i] - let prevBoundModelGraphNode = - match i with - | 0 (* first file *) -> initialBoundModel - | _ -> boundModels.[i - 1] - let syntaxTree = GetSyntaxTree fileInfo - GraphNode(node { - let! prevBoundModel = prevBoundModelGraphNode.GetOrComputeValue() - return! TypeCheckTask enablePartialTypeChecking prevBoundModel syntaxTree - }) - - let rec createFinalizeBoundModelGraphNode (boundModels: ImmutableArray>.Builder) = - GraphNode(node { - // Compute last bound model then get all the evaluated models. - let! _ = boundModels.[boundModels.Count - 1].GetOrComputeValue() - let boundModels = - boundModels - |> Seq.map (fun x -> x.TryPeekValue().Value) - |> ImmutableArray.CreateRange - - let! result = FinalizeTypeCheckTask boundModels - let result = (result, DateTime.UtcNow) - return result - }) - - and computeStampedFileName (state: IncrementalBuilderState) (cache: TimeStampCache) slot fileInfo = - let currentStamp = state.stampedFileNames.[slot] - let stamp = StampFileNameTask cache fileInfo + (* + The data below represents a dependency graph. + + ReferencedAssembliesStamps => FileStamps => SemanticModels => FinalizedSemanticModel + *) + + // stampedFileNames represent the real stamps of the files. + // logicalStampedFileNames represent the stamps of the files that are used to calculate the project's logical timestamp. + let stampedFileNames = Array.init fileNames.Length (fun _ -> DateTime.MinValue) + let logicalStampedFileNames = Array.init fileNames.Length (fun _ -> DateTime.MinValue) + let stampedReferencedAssemblies = Array.init referencedAssemblies.Length (fun _ -> DateTime.MinValue) + let mutable initialSemanticModel = None + let semanticModels = Array.zeroCreate fileNames.Length + let mutable finalizedSemanticModel = None + + let computeStampedFileName (cache: TimeStampCache) (ctok: CompilationThreadToken) slot fileInfo cont = + let currentStamp = stampedFileNames.[slot] + let stamp = StampFileNameTask cache ctok fileInfo if currentStamp <> stamp then - match state.boundModels.[slot].TryPeekValue() with + match semanticModels.[slot] with // This prevents an implementation file that has a backing signature file from invalidating the rest of the build. - | ValueSome(boundModel) when enablePartialTypeChecking && boundModel.BackingSignature.IsSome -> - let newBoundModel = boundModel.ClearTcInfoExtras() - { state with - boundModels = state.boundModels.RemoveAt(slot).Insert(slot, GraphNode(node { return newBoundModel })) - stampedFileNames = state.stampedFileNames.SetItem(slot, StampFileNameTask cache fileInfo) - } + | Some(semanticModel) when enablePartialTypeChecking && semanticModel.BackingSignature.IsSome -> + stampedFileNames.[slot] <- StampFileNameTask cache ctok fileInfo + semanticModel.Invalidate() | _ -> - - let stampedFileNames = state.stampedFileNames.ToBuilder() - let logicalStampedFileNames = state.logicalStampedFileNames.ToBuilder() - let boundModels = state.boundModels.ToBuilder() + // Something changed, the finalized view of the project must be invalidated. + finalizedSemanticModel <- None // Invalidate the file and all files below it. - for j = 0 to stampedFileNames.Count - slot - 1 do - let stamp = StampFileNameTask cache fileNames.[slot + j] + stampedFileNames.[slot..] + |> Array.iteri (fun j _ -> + let stamp = StampFileNameTask cache ctok fileNames.[slot + j] stampedFileNames.[slot + j] <- stamp logicalStampedFileNames.[slot + j] <- stamp - boundModels.[slot + j] <- createBoundModelGraphNode state.initialBoundModel boundModels (slot + j) + semanticModels.[slot + j] <- None + ) - { state with - // Something changed, the finalized view of the project must be invalidated. - finalizedBoundModel = createFinalizeBoundModelGraphNode boundModels + if semanticModels.[slot].IsNone then + cont slot fileInfo - stampedFileNames = stampedFileNames.ToImmutable() - logicalStampedFileNames = logicalStampedFileNames.ToImmutable() - boundModels = boundModels.ToImmutable() - } - else - state - - and computeStampedFileNames state (cache: TimeStampCache) = - let mutable i = 0 - (state, fileNames) - ||> Array.fold (fun state fileInfo -> - let newState = computeStampedFileName state cache i fileInfo - i <- i + 1 - newState + let computeStampedFileNames (cache: TimeStampCache) (ctok: CompilationThreadToken) = + fileNames + |> Array.iteri (fun i fileInfo -> + computeStampedFileName cache ctok i fileInfo (fun _ _ -> ()) ) - and computeStampedReferencedAssemblies state canTriggerInvalidation (cache: TimeStampCache) = - let stampedReferencedAssemblies = state.stampedReferencedAssemblies.ToBuilder() - + let computeStampedReferencedAssemblies (cache: TimeStampCache) (ctok: CompilationThreadToken) = let mutable referencesUpdated = false referencedAssemblies |> Array.iteri (fun i asmInfo -> - - let currentStamp = state.stampedReferencedAssemblies.[i] - let stamp = StampReferencedAssemblyTask cache asmInfo + let currentStamp = stampedReferencedAssemblies.[i] + let stamp = StampReferencedAssemblyTask cache ctok asmInfo if currentStamp <> stamp then referencesUpdated <- true stampedReferencedAssemblies.[i] <- stamp ) - + if referencesUpdated then - // Build is invalidated. The build must be rebuilt with the newly updated references. - if not isImportsInvalidated && canTriggerInvalidation then - isImportsInvalidated <- true - { state with - stampedReferencedAssemblies = stampedReferencedAssemblies.ToImmutable() - } + // Something changed, the finalized view of the project must be invalidated. + // This is the only place where the initial semantic model will be invalidated. + initialSemanticModel <- None + finalizedSemanticModel <- None + + for i = 0 to stampedFileNames.Length - 1 do + stampedFileNames.[i] <- DateTime.MinValue + logicalStampedFileNames.[i] <- DateTime.MinValue + semanticModels.[i] <- None + + let getStampedFileNames cache ctok = + computeStampedFileNames cache ctok + logicalStampedFileNames + + let getStampedReferencedAssemblies cache ctok = + computeStampedReferencedAssemblies cache ctok + stampedReferencedAssemblies + + let computeInitialSemanticModel (ctok: CompilationThreadToken) = + cancellable { + match initialSemanticModel with + | None -> + let! result = CombineImportedAssembliesTask ctok + initialSemanticModel <- Some result + return result + | Some result -> + return result + } + + let computeSemanticModel (cache: TimeStampCache) (ctok: CompilationThreadToken) (slot: int) = + if IncrementalBuild.injectCancellationFault then Cancellable.canceled () else - state - let tryGetSlot (state: IncrementalBuilderState) slot = - match state.boundModels.[slot].TryPeekValue() with - | ValueSome boundModel -> - (boundModel, state.stampedFileNames.[slot]) - |> Some - | _ -> - None + cancellable { + let! initial = computeInitialSemanticModel ctok + + let fileInfo = fileNames.[slot] + + computeStampedFileName cache ctok slot fileInfo (fun slot fileInfo -> + let prevSemanticModel = + match slot with + | 0 (* first file *) -> initial + | _ -> + match semanticModels.[slot - 1] with + | Some(prevSemanticModel) -> prevSemanticModel + | _ -> + // This shouldn't happen, but on the off-chance, just grab the initial semantic model. + initial + + let semanticModel = TypeCheckTask ctok prevSemanticModel (ParseTask ctok fileInfo) |> Eventually.force ctok + + semanticModels.[slot] <- Some semanticModel + ) + } - let tryGetBeforeSlot (state: IncrementalBuilderState) slot = - match slot with - | 0 (* first file *) -> - (initialBoundModel, DateTime.MinValue) - |> Some - | _ -> - tryGetSlot state (slot - 1) - - let evalUpToTargetSlot (state: IncrementalBuilderState) targetSlot = - node { - if targetSlot < 0 then - return Some(initialBoundModel, DateTime.MinValue) - else - let! boundModel = state.boundModels.[targetSlot].GetOrComputeValue() - return Some(boundModel, state.stampedFileNames.[targetSlot]) + let computeSemanticModels (cache: TimeStampCache) (ctok: CompilationThreadToken) = + cancellable { + for slot = 0 to fileNames.Length - 1 do + do! computeSemanticModel cache ctok slot } - let MaxTimeStampInDependencies stamps = - if Seq.isEmpty stamps then - DateTime.MinValue - else - stamps - |> Seq.max + let computeFinalizedSemanticModel (cache: TimeStampCache) (ctok: CompilationThreadToken) = + cancellable { + let! _ = computeSemanticModels cache ctok - // END OF BUILD DESCRIPTION - // --------------------------------------------------------------------------------------------- + match finalizedSemanticModel with + | Some result -> return result + | _ -> + let semanticModels = semanticModels |> Array.choose id + + let! result = FinalizeTypeCheckTask ctok semanticModels + let result = (result, DateTime.UtcNow) + finalizedSemanticModel <- Some result + return result + } - (* - The data below represents a dependency graph. + let step (cache: TimeStampCache) (ctok: CompilationThreadToken) = + cancellable { + computeStampedReferencedAssemblies cache ctok + computeStampedFileNames cache ctok - ReferencedAssembliesStamps => FileStamps => BoundModels => FinalizedBoundModel - *) + match semanticModels |> Array.tryFindIndex (fun x -> x.IsNone) with + | Some slot -> + do! computeSemanticModel cache ctok slot + return true + | _ -> + return false + } - let gate = obj () - let mutable currentState = - let cache = TimeStampCache(defaultTimeStamp) - let initialBoundModel = GraphNode(node { return initialBoundModel }) - let boundModels = ImmutableArray.CreateBuilder(fileNames.Length) + let tryGetBeforeSlot slot = + match slot with + | 0 (* first file *) -> + match initialSemanticModel with + | Some initial -> + (initial, DateTime.MinValue) + |> Some + | _ -> + None + | _ -> + match semanticModels.[slot - 1] with + | Some semanticModel -> + (semanticModel, stampedFileNames.[slot - 1]) + |> Some + | _ -> + None + + let eval cache ctok targetSlot = + if targetSlot < 0 then + cancellable { + computeStampedReferencedAssemblies cache ctok + + let! result = computeInitialSemanticModel ctok + return Some(result, DateTime.MinValue) + } + else + let evalUpTo = + cancellable { + for slot = 0 to targetSlot do + do! computeSemanticModel cache ctok slot + } + cancellable { + computeStampedReferencedAssemblies cache ctok - for slot = 0 to fileNames.Length - 1 do - boundModels.Add(createBoundModelGraphNode initialBoundModel boundModels slot) + let! _ = evalUpTo - let state = - { - stampedFileNames = Array.init fileNames.Length (fun _ -> DateTime.MinValue) |> ImmutableArray.CreateRange - logicalStampedFileNames = Array.init fileNames.Length (fun _ -> DateTime.MinValue) |> ImmutableArray.CreateRange - stampedReferencedAssemblies = Array.init referencedAssemblies.Length (fun _ -> DateTime.MinValue) |> ImmutableArray.CreateRange - initialBoundModel = initialBoundModel - boundModels = boundModels.ToImmutable() - finalizedBoundModel = createFinalizeBoundModelGraphNode boundModels + return + semanticModels.[targetSlot] + |> Option.map (fun semanticModel -> + (semanticModel, stampedFileNames.[targetSlot]) + ) } - let state = computeStampedReferencedAssemblies state false cache - let state = computeStampedFileNames state cache - state - let computeProjectTimeStamp (state: IncrementalBuilderState) = - let t1 = MaxTimeStampInDependencies state.stampedReferencedAssemblies - let t2 = MaxTimeStampInDependencies state.logicalStampedFileNames - max t1 t2 - - let setCurrentState state cache (ct: CancellationToken) = - lock gate (fun () -> - ct.ThrowIfCancellationRequested() - currentState <- computeStampedFileNames state cache - ) + let tryGetFinalized cache ctok = + cancellable { + computeStampedReferencedAssemblies cache ctok - let checkFileTimeStamps (cache: TimeStampCache) = - node { - let! ct = NodeCode.CancellationToken - setCurrentState currentState cache ct + let! res = computeFinalizedSemanticModel cache ctok + return Some res } + let MaxTimeStampInDependencies cache (ctok: CompilationThreadToken) getStamps = + let stamps = getStamps cache ctok + if Array.isEmpty stamps then + DateTime.MinValue + else + stamps + |> Array.max + + // END OF BUILD DESCRIPTION + // --------------------------------------------------------------------------------------------- + do IncrementalBuilderEventTesting.MRU.Add(IncrementalBuilderEventTesting.IBECreated) - member _.TcConfig = tcConfig + member __.TcConfig = tcConfig - member _.FileParsed = fileParsed.Publish + member __.FileParsed = fileParsed.Publish - member _.BeforeFileChecked = beforeFileChecked.Publish + member __.BeforeFileChecked = beforeFileChecked.Publish - member _.FileChecked = fileChecked.Publish + member __.FileChecked = fileChecked.Publish - member _.ProjectChecked = projectChecked.Publish + member __.ProjectChecked = projectChecked.Publish #if !NO_EXTENSIONTYPING - member _.ImportsInvalidatedByTypeProvider = importsInvalidatedByTypeProvider.Publish + member __.ImportsInvalidatedByTypeProvider = importsInvalidatedByTypeProvider.Publish #endif - member _.IsReferencesInvalidated = - // fast path - if isImportsInvalidated then true - else - computeStampedReferencedAssemblies currentState true (TimeStampCache(defaultTimeStamp)) |> ignore - isImportsInvalidated + member __.TryGetCurrentTcImports () = currentTcImportsOpt - member _.AllDependenciesDeprecated = allDependencies + member __.AllDependenciesDeprecated = allDependencies - member _.PopulatePartialCheckingResults () = - node { + member __.Step (ctok: CompilationThreadToken) = + cancellable { let cache = TimeStampCache defaultTimeStamp // One per step - do! checkFileTimeStamps cache - let! _ = currentState.finalizedBoundModel.GetOrComputeValue() - projectChecked.Trigger() + let! res = step cache ctok + if not res then + projectChecked.Trigger() + return false + else + return true } - - member builder.GetCheckResultsBeforeFileInProjectEvenIfStale filename: PartialCheckResults option = - let slotOfFile = builder.GetSlotOfFileName filename - let result = tryGetBeforeSlot currentState slotOfFile - - match result with - | Some (boundModel, timestamp) -> Some (PartialCheckResults (boundModel, timestamp)) - | _ -> None - - member builder.GetCheckResultsForFileInProjectEvenIfStale filename: PartialCheckResults option = + + member builder.GetCheckResultsBeforeFileInProjectEvenIfStale filename: PartialCheckResults option = let slotOfFile = builder.GetSlotOfFileName filename - let result = tryGetSlot currentState slotOfFile - + let result = tryGetBeforeSlot slotOfFile + match result with - | Some (boundModel, timestamp) -> Some (PartialCheckResults (boundModel, timestamp)) + | Some (semanticModel, timestamp) -> Some (PartialCheckResults.Create (semanticModel, timestamp)) | _ -> None - - member builder.TryGetCheckResultsBeforeFileInProject (filename) = - let cache = TimeStampCache defaultTimeStamp - let tmpState = computeStampedFileNames currentState cache - + + + member builder.AreCheckResultsBeforeFileInProjectReady filename = let slotOfFile = builder.GetSlotOfFileName filename - match tryGetBeforeSlot tmpState slotOfFile with - | Some(boundModel, timestamp) -> PartialCheckResults(boundModel, timestamp) |> Some - | _ -> None - - member builder.AreCheckResultsBeforeFileInProjectReady filename = - (builder.TryGetCheckResultsBeforeFileInProject filename).IsSome - - member _.GetCheckResultsBeforeSlotInProject (slotOfFile) = - node { + match tryGetBeforeSlot slotOfFile with + | Some _ -> true + | _ -> false + + member __.GetCheckResultsBeforeSlotInProject (ctok: CompilationThreadToken, slotOfFile) = + cancellable { let cache = TimeStampCache defaultTimeStamp - do! checkFileTimeStamps cache - let! result = evalUpToTargetSlot currentState (slotOfFile - 1) + let! result = eval cache ctok (slotOfFile - 1) + match result with - | Some (boundModel, timestamp) -> return PartialCheckResults(boundModel, timestamp) - | None -> return! failwith "Expected results to be ready. (GetCheckResultsBeforeSlotInProject)." + | Some (semanticModel, timestamp) -> return PartialCheckResults.Create (semanticModel, timestamp) + | None -> return! failwith "Build was not evaluated, expected the results to be ready after 'Eval' (GetCheckResultsBeforeSlotInProject)." } - member _.GetFullCheckResultsBeforeSlotInProject (slotOfFile) = - node { - let cache = TimeStampCache defaultTimeStamp - do! checkFileTimeStamps cache - let! result = evalUpToTargetSlot currentState (slotOfFile - 1) - match result with - | Some (boundModel, timestamp) -> - let! _ = boundModel.GetOrComputeTcInfoExtras() - return PartialCheckResults(boundModel, timestamp) - | None -> return! failwith "Expected results to be ready. (GetFullCheckResultsBeforeSlotInProject)." - } - - member builder.GetCheckResultsBeforeFileInProject (filename) = + member builder.GetCheckResultsBeforeFileInProject (ctok: CompilationThreadToken, filename) = let slotOfFile = builder.GetSlotOfFileName filename - builder.GetCheckResultsBeforeSlotInProject (slotOfFile) + builder.GetCheckResultsBeforeSlotInProject (ctok, slotOfFile) - member builder.GetCheckResultsAfterFileInProject (filename) = + member builder.GetCheckResultsAfterFileInProject (ctok: CompilationThreadToken, filename) = let slotOfFile = builder.GetSlotOfFileName filename + 1 - builder.GetCheckResultsBeforeSlotInProject (slotOfFile) + builder.GetCheckResultsBeforeSlotInProject (ctok, slotOfFile) - member builder.GetFullCheckResultsBeforeFileInProject (filename) = - let slotOfFile = builder.GetSlotOfFileName filename - builder.GetFullCheckResultsBeforeSlotInProject (slotOfFile) - - member builder.GetFullCheckResultsAfterFileInProject (filename) = - node { - let slotOfFile = builder.GetSlotOfFileName filename + 1 - let! result = builder.GetFullCheckResultsBeforeSlotInProject(slotOfFile) - return result + member builder.GetFullCheckResultsAfterFileInProject (ctok: CompilationThreadToken, filename) = + enablePartialTypeChecking <- false + cancellable { + try + let! result = builder.GetCheckResultsAfterFileInProject(ctok, filename) + result.TcInfoWithOptional ctok |> ignore // Make sure we forcefully evaluate the info + return result + finally + enablePartialTypeChecking <- defaultPartialTypeChecking } - member builder.GetCheckResultsAfterLastFileInProject () = - builder.GetCheckResultsBeforeSlotInProject(builder.GetSlotsCount()) + member builder.GetCheckResultsAfterLastFileInProject (ctok: CompilationThreadToken) = + builder.GetCheckResultsBeforeSlotInProject(ctok, builder.GetSlotsCount()) - member _.GetCheckResultsAndImplementationsForProject() = - node { - let cache = TimeStampCache(defaultTimeStamp) - do! checkFileTimeStamps cache - let! result = currentState.finalizedBoundModel.GetOrComputeValue() - match result with - | ((ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt, boundModel), timestamp) -> - return PartialCheckResults (boundModel, timestamp), ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt + member __.GetCheckResultsAndImplementationsForProject(ctok: CompilationThreadToken) = + cancellable { + let cache = TimeStampCache defaultTimeStamp + + match! tryGetFinalized cache ctok with + | Some ((ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt, semanticModel), timestamp) -> + return PartialCheckResults.Create (semanticModel, timestamp), ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt + | None -> + let msg = "Build was not evaluated, expected the results to be ready after 'tryGetFinalized')." + return! failwith msg } - member builder.GetFullCheckResultsAndImplementationsForProject() = - node { - let! result = builder.GetCheckResultsAndImplementationsForProject() - let results, _, _, _ = result - let! _ = results.GetOrComputeTcInfoWithExtras() // Make sure we forcefully evaluate the info - return result + member this.GetFullCheckResultsAndImplementationsForProject(ctok: CompilationThreadToken) = + enablePartialTypeChecking <- false + cancellable { + try + let! result = this.GetCheckResultsAndImplementationsForProject(ctok) + let results, _, _, _ = result + results.TcInfoWithOptional ctok |> ignore // Make sure we forcefully evaluate the info + return result + finally + enablePartialTypeChecking <- defaultPartialTypeChecking } - - member _.GetLogicalTimeStampForProject(cache) = - let tmpState = computeStampedFileNames currentState cache - computeProjectTimeStamp tmpState - - member _.TryGetSlotOfFileName(filename: string) = + + member __.GetLogicalTimeStampForProject(cache, ctok: CompilationThreadToken) = + let t1 = MaxTimeStampInDependencies cache ctok getStampedReferencedAssemblies + let t2 = MaxTimeStampInDependencies cache ctok getStampedFileNames + max t1 t2 + + member __.TryGetSlotOfFileName(filename: string) = // Get the slot of the given file and force it to build. - let CompareFileNames (_, f2, _) = - let result = + let CompareFileNames (_, f2, _) = + let result = String.Compare(filename, f2, StringComparison.CurrentCultureIgnoreCase)=0 || String.Compare(FileSystem.GetFullPathShim filename, FileSystem.GetFullPathShim f2, StringComparison.CurrentCultureIgnoreCase)=0 result match fileNames |> Array.tryFindIndex CompareFileNames with | Some slot -> Some slot | None -> None - + member this.GetSlotOfFileName(filename: string) = match this.TryGetSlotOfFileName(filename) with | Some slot -> slot | None -> failwith (sprintf "The file '%s' was not part of the project. Did you call InvalidateConfiguration when the list of files in the project changed?" filename) - - member _.GetSlotsCount () = fileNames.Length + + member __.GetSlotsCount () = fileNames.Length member this.ContainsFile(filename: string) = (this.TryGetSlotOfFileName filename).IsSome - - member builder.GetParseResultsForFile (filename) = + + member builder.GetParseResultsForFile (ctok: CompilationThreadToken, filename) = + cancellable { let slotOfFile = builder.GetSlotOfFileName filename - let fileInfo = fileNames.[slotOfFile] + let results = fileNames.[slotOfFile] // re-parse on demand instead of retaining - let syntaxTree = GetSyntaxTree fileInfo - syntaxTree.Parse None + let syntaxTree = ParseTask ctok results + return syntaxTree.Parse None + } - member _.SourceFiles = sourceFiles |> List.map (fun (_, f, _) -> f) + member __.SourceFiles = sourceFiles |> List.map (fun (_, f, _) -> f) /// CreateIncrementalBuilder (for background type checking). Note that fsc.fs also /// creates an incremental builder used by the command line compiler. static member TryCreateIncrementalBuilderForProjectOptions - (legacyReferenceResolver, defaultFSharpBinariesDir, + (ctok, legacyReferenceResolver, defaultFSharpBinariesDir, frameworkTcImportsCache: FrameworkImportsCache, loadClosureOpt: LoadClosure option, sourceFiles: string list, commandLineArgs: string list, projectReferences, projectDirectory, useScriptResolutionRules, keepAssemblyContents, - keepAllBackgroundResolutions, + keepAllBackgroundResolutions, maxTimeShareMilliseconds, tryGetMetadataSnapshot, suggestNamesForErrors, keepAllBackgroundSymbolUses, enableBackgroundItemKeyStoreAndSemanticClassification, @@ -1320,58 +1278,43 @@ type IncrementalBuilder( let useSimpleResolutionSwitch = "--simpleresolution" - node { + cancellable { // Trap and report warnings and errors from creation. let delayedLogger = CapturingErrorLogger("IncrementalBuilderCreation") - use _ = new CompilationGlobalsScope(delayedLogger, BuildPhase.Parameter) + use _unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> delayedLogger) + use _unwindBP = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter let! builderOpt = - node { + cancellable { try - // Create the builder. + // Create the builder. // Share intern'd strings across all lexing/parsing - let resourceManager = new Lexhelp.LexResourceManager() + let resourceManager = new Lexhelp.LexResourceManager() /// Create a type-check configuration - let tcConfigB, sourceFiles = + let tcConfigB, sourceFilesNew = let getSwitchValue switchString = match commandLineArgs |> Seq.tryFindIndex(fun s -> s.StartsWithOrdinal switchString) with | Some idx -> Some(commandLineArgs.[idx].Substring(switchString.Length)) | _ -> None - let sdkDirOverride = - match loadClosureOpt with - | None -> None - | Some loadClosure -> loadClosure.SdkDirOverride - // see also fsc.fs: runFromCommandLineToImportingAssemblies(), as there are many similarities to where the PS creates a tcConfigB - let tcConfigB = - TcConfigBuilder.CreateNew(legacyReferenceResolver, - defaultFSharpBinariesDir, - implicitIncludeDir=projectDirectory, - reduceMemoryUsage=ReduceMemoryFlag.Yes, - isInteractive=useScriptResolutionRules, - isInvalidationSupported=true, - defaultCopyFSharpCore=CopyFSharpCoreFlag.No, - tryGetMetadataSnapshot=tryGetMetadataSnapshot, - sdkDirOverride=sdkDirOverride, - rangeForErrors=range0) - - tcConfigB.primaryAssembly <- - match loadClosureOpt with - | None -> PrimaryAssembly.Mscorlib - | Some loadClosure -> - if loadClosure.UseDesktopFramework then - PrimaryAssembly.Mscorlib - else - PrimaryAssembly.System_Runtime - - tcConfigB.resolutionEnvironment <- (LegacyResolutionEnvironment.EditingOrCompilation true) - - tcConfigB.conditionalCompilationDefines <- + let tcConfigB = + TcConfigBuilder.CreateNew(legacyReferenceResolver, + defaultFSharpBinariesDir, + implicitIncludeDir=projectDirectory, + reduceMemoryUsage=ReduceMemoryFlag.Yes, + isInteractive=useScriptResolutionRules, + isInvalidationSupported=true, + defaultCopyFSharpCore=CopyFSharpCoreFlag.No, + tryGetMetadataSnapshot=tryGetMetadataSnapshot) + + tcConfigB.resolutionEnvironment <- (ReferenceResolver.ResolutionEnvironment.EditingOrCompilation true) + + tcConfigB.conditionalCompilationDefines <- let define = if useScriptResolutionRules then "INTERACTIVE" else "COMPILED" define :: tcConfigB.conditionalCompilationDefines @@ -1385,163 +1328,73 @@ type IncrementalBuilder( // Never open PDB files for the language service, even if --standalone is specified tcConfigB.openDebugInformationForLaterStaticLinking <- false - tcConfigB.xmlDocInfoLoader <- - { new IXmlDocumentationInfoLoader with - /// Try to load xml documentation associated with an assembly by the same file path with the extension ".xml". - member _.TryLoad(assemblyFileName, _ilModule) = - let xmlFileName = Path.ChangeExtension(assemblyFileName, ".xml") - - // REVIEW: File IO - Will eventually need to change this to use a file system interface of some sort. - XmlDocumentationInfo.TryCreateFromFile(xmlFileName) - } - |> Some - tcConfigB, sourceFilesNew - // If this is a builder for a script, re-apply the settings inferred from the - // script and its load closure to the configuration. - // - // NOTE: it would probably be cleaner and more accurate to re-run the load closure at this point. - let setupConfigFromLoadClosure () = - match loadClosureOpt with - | Some loadClosure -> - let dllReferences = - [for reference in tcConfigB.referencedDLLs do - // If there's (one or more) resolutions of closure references then yield them all - match loadClosure.References |> List.tryFind (fun (resolved, _)->resolved=reference.Text) with - | Some (resolved, closureReferences) -> - for closureReference in closureReferences do - yield AssemblyReference(closureReference.originalReference.Range, resolved, None) - | None -> yield reference] - tcConfigB.referencedDLLs <- [] - tcConfigB.primaryAssembly <- (if loadClosure.UseDesktopFramework then PrimaryAssembly.Mscorlib else PrimaryAssembly.System_Runtime) - // Add one by one to remove duplicates - dllReferences |> List.iter (fun dllReference -> - tcConfigB.AddReferencedAssemblyByPath(dllReference.Range, dllReference.Text)) - tcConfigB.knownUnresolvedReferences <- loadClosure.UnresolvedReferences - | None -> () - - setupConfigFromLoadClosure() + match loadClosureOpt with + | Some loadClosure -> + let dllReferences = + [for reference in tcConfigB.referencedDLLs do + // If there's (one or more) resolutions of closure references then yield them all + match loadClosure.References |> List.tryFind (fun (resolved, _)->resolved=reference.Text) with + | Some (resolved, closureReferences) -> + for closureReference in closureReferences do + yield AssemblyReference(closureReference.originalReference.Range, resolved, None) + | None -> yield reference] + tcConfigB.referencedDLLs <- [] + // Add one by one to remove duplicates + dllReferences |> List.iter (fun dllReference -> + tcConfigB.AddReferencedAssemblyByPath(dllReference.Range, dllReference.Text)) + tcConfigB.knownUnresolvedReferences <- loadClosure.UnresolvedReferences + | None -> () let tcConfig = TcConfig.Create(tcConfigB, validate=true) let niceNameGen = NiceNameGenerator() - let outfile, _, assemblyName = tcConfigB.DecideNames sourceFiles + let outfile, _, assemblyName = tcConfigB.DecideNames sourceFilesNew // Resolve assemblies and create the framework TcImports. This is done when constructing the - // builder itself, rather than as an incremental task. This caches a level of "system" references. No type providers are - // included in these references. - let! (tcGlobals, frameworkTcImports, nonFrameworkResolutions, unresolvedReferences) = frameworkTcImportsCache.Get(tcConfig) + // builder itself, rather than as an incremental task. This caches a level of "system" references. No type providers are + // included in these references. + let! (tcGlobals, frameworkTcImports, nonFrameworkResolutions, unresolvedReferences) = frameworkTcImportsCache.Get(ctok, tcConfig) - // Note we are not calling errorLogger.GetDiagnostics() anywhere for this task. + // Note we are not calling errorLogger.GetErrors() anywhere for this task. // This is ok because not much can actually go wrong here. let errorOptions = tcConfig.errorSeverityOptions let errorLogger = CompilationErrorLogger("nonFrameworkAssemblyInputs", errorOptions) - use _ = new CompilationGlobalsScope(errorLogger, BuildPhase.Parameter) + // Return the disposable object that cleans up + use _holder = new CompilationGlobalsScope(errorLogger, BuildPhase.Parameter) - // Get the names and time stamps of all the non-framework referenced assemblies, which will act - // as inputs to one of the nodes in the build. + // Get the names and time stamps of all the non-framework referenced assemblies, which will act + // as inputs to one of the nodes in the build. // - // This operation is done when constructing the builder itself, rather than as an incremental task. - let nonFrameworkAssemblyInputs = - // Note we are not calling errorLogger.GetDiagnostics() anywhere for this task. + // This operation is done when constructing the builder itself, rather than as an incremental task. + let nonFrameworkAssemblyInputs = + // Note we are not calling errorLogger.GetErrors() anywhere for this task. // This is ok because not much can actually go wrong here. let errorLogger = CompilationErrorLogger("nonFrameworkAssemblyInputs", errorOptions) // Return the disposable object that cleans up - use _holder = new CompilationGlobalsScope(errorLogger, BuildPhase.Parameter) + use _holder = new CompilationGlobalsScope(errorLogger, BuildPhase.Parameter) [ for r in nonFrameworkResolutions do let fileName = r.resolvedPath - yield (Choice1Of2 fileName, (fun (cache: TimeStampCache) -> cache.GetFileTimeStamp fileName)) + yield (Choice1Of2 fileName, (fun (cache: TimeStampCache) _ctok -> cache.GetFileTimeStamp fileName)) for pr in projectReferences do - yield Choice2Of2 pr, (fun (cache: TimeStampCache) -> cache.GetProjectReferenceTimeStamp (pr)) ] - - // - // - // - // - // Start importing - - let tcConfigP = TcConfigProvider.Constant tcConfig - let beforeFileChecked = new Event() - let fileChecked = new Event() - -#if !NO_EXTENSIONTYPING - let importsInvalidatedByTypeProvider = new Event() -#endif - - // Check for the existence of loaded sources and prepend them to the sources list if present. - let sourceFiles = tcConfig.GetAvailableLoadedSources() @ (sourceFiles |>List.map (fun s -> rangeStartup, s)) - - // Mark up the source files with an indicator flag indicating if they are the last source file in the project - let sourceFiles = - let flags, isExe = tcConfig.ComputeCanContainEntryPoint(sourceFiles |> List.map snd) - ((sourceFiles, flags) ||> List.map2 (fun (m, nm) flag -> (m, nm, (flag, isExe)))) - - let basicDependencies = - [ for (UnresolvedAssemblyReference(referenceText, _)) in unresolvedReferences do - // Exclude things that are definitely not a file name - if not(FileSystem.IsInvalidPathShim referenceText) then - let file = if FileSystem.IsPathRootedShim referenceText then referenceText else Path.Combine(projectDirectory, referenceText) - yield file - - for r in nonFrameworkResolutions do - yield r.resolvedPath ] - - let allDependencies = - [| yield! basicDependencies - for (_, f, _) in sourceFiles do - yield f |] - - // For scripts, the dependency provider is already available. - // For projects create a fresh one for the project. - let dependencyProvider = - match dependencyProvider with - | None -> new DependencyProvider() - | Some dependencyProvider -> dependencyProvider - - let! initialBoundModel = - CombineImportedAssembliesTask( - assemblyName, - tcConfig, - tcConfigP, - tcGlobals, - frameworkTcImports, - nonFrameworkResolutions, - unresolvedReferences, - dependencyProvider, - loadClosureOpt, - niceNameGen, - basicDependencies, - keepAssemblyContents, - keepAllBackgroundResolutions, + yield Choice2Of2 pr, (fun (cache: TimeStampCache) ctok -> cache.GetProjectReferenceTimeStamp (pr, ctok)) ] + + let builder = + new IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInputs, + nonFrameworkResolutions, unresolvedReferences, + tcConfig, projectDirectory, outfile, assemblyName, niceNameGen, + resourceManager, sourceFilesNew, loadClosureOpt, + keepAssemblyContents, + keepAllBackgroundResolutions, + maxTimeShareMilliseconds, keepAllBackgroundSymbolUses, enableBackgroundItemKeyStoreAndSemanticClassification, enablePartialTypeChecking, - beforeFileChecked, - fileChecked, - importsInvalidatedByTypeProvider - ) - - let builder = - new IncrementalBuilder( - initialBoundModel, - tcGlobals, - nonFrameworkAssemblyInputs, - tcConfig, - outfile, - assemblyName, - resourceManager, - sourceFiles, - enablePartialTypeChecking, - beforeFileChecked, - fileChecked, -#if !NO_EXTENSIONTYPING - importsInvalidatedByTypeProvider, -#endif - allDependencies) + dependencyProvider) return Some builder - with e -> + with e -> errorRecoveryNoRange e return None } @@ -1552,10 +1405,10 @@ type IncrementalBuilder( let errorSeverityOptions = builder.TcConfig.errorSeverityOptions let errorLogger = CompilationErrorLogger("IncrementalBuilderCreation", errorSeverityOptions) delayedLogger.CommitDelayedDiagnostics errorLogger - errorLogger.GetDiagnostics() + errorLogger.GetErrors() |> Array.map (fun (d, severity) -> d, severity = FSharpErrorSeverity.Error) | _ -> Array.ofList delayedLogger.Diagnostics - |> Array.map (fun (d, severity) -> FSharpDiagnostic.CreateFromException(d, severity, range.Zero, suggestNamesForErrors)) + |> Array.map (fun (d, isError) -> FSharpErrorInfo.CreateFromException(d, isError, range.Zero, suggestNamesForErrors)) return builderOpt, diagnostics } diff --git a/src/fsharp/service/IncrementalBuild.fsi b/src/fsharp/service/IncrementalBuild.fsi index c8c5c26da6a..b3607332b7b 100755 --- a/src/fsharp/service/IncrementalBuild.fsi +++ b/src/fsharp/service/IncrementalBuild.fsi @@ -1,38 +1,36 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.CodeAnalysis +namespace FSharp.Compiler open System -open System.Threading -open Internal.Utilities.Library + open FSharp.Compiler open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CheckDeclarations -open FSharp.Compiler.CodeAnalysis open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerImports -open FSharp.Compiler.DependencyManager -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.EditorServices open FSharp.Compiler.ErrorLogger open FSharp.Compiler.NameResolution open FSharp.Compiler.ParseAndCheckInputs +open FSharp.Compiler.Range open FSharp.Compiler.ScriptClosure -open FSharp.Compiler.Syntax +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text open FSharp.Compiler.TypedTree -open FSharp.Compiler.BuildGraph + +open Microsoft.DotNet.DependencyManager /// Lookup the global static cache for building the FrameworkTcImports type internal FrameworkImportsCache = new : size: int -> FrameworkImportsCache - member Get : TcConfig -> NodeCode + member Get : CompilationThreadToken * TcConfig -> Cancellable - member Clear: unit -> unit + member Clear: CompilationThreadToken -> unit - member Downsize: unit -> unit + member Downsize: CompilationThreadToken -> unit /// Used for unit testing module internal IncrementalBuilderEventTesting = @@ -60,22 +58,27 @@ type internal TcInfo = latestCcuSigForFile: ModuleOrNamespaceType option /// Accumulated errors, last file first - tcErrorsRev:(PhasedDiagnostic * FSharpDiagnosticSeverity)[] list + tcErrorsRev:(PhasedDiagnostic * FSharpErrorSeverity)[] list tcDependencyFiles: string list - sigNameOpt: (string * QualifiedNameOfFile) option + sigNameOpt: (string * SyntaxTree.QualifiedNameOfFile) option } - member TcErrors: (PhasedDiagnostic * FSharpDiagnosticSeverity)[] + member TcErrors: (PhasedDiagnostic * FSharpErrorSeverity)[] /// Accumulated results of type checking. Optional data that isn't needed to type-check a file, but needed for more information for in tooling. [] -type internal TcInfoExtras = +type internal TcInfoOptional = { - tcResolutions: TcResolutions - tcSymbolUses: TcSymbolUses - tcOpenDeclarations: OpenDeclaration[] + /// Accumulated resolutions, last file first + tcResolutionsRev: TcResolutions list + + /// Accumulated symbol uses, last file first + tcSymbolUsesRev: TcSymbolUses list + + /// Accumulated 'open' declarations, last file first + tcOpenDeclarationsRev: OpenDeclaration[] list /// Result of checking most recent file, if any latestImplFile: TypedImplFile option @@ -84,10 +87,10 @@ type internal TcInfoExtras = itemKeyStore: ItemKeyStore option /// If enabled, holds semantic classification information for Item(symbol)s in a file. - semanticClassificationKeyStore: SemanticClassificationKeyStore option + semanticClassification: struct (range * SemanticClassificationType) [] } - member TcSymbolUses: TcSymbolUses + member TcSymbolUses: TcSymbolUses list /// Represents the state in the incremental graph associated with checking a file [] @@ -101,31 +104,19 @@ type internal PartialCheckResults = member TimeStamp: DateTime - member TryPeekTcInfo: unit -> TcInfo option - - member TryPeekTcInfoWithExtras: unit -> (TcInfo * TcInfoExtras) option - - /// Compute the "TcInfo" part of the results. If `enablePartialTypeChecking` is false then - /// extras will also be available. - member GetOrComputeTcInfo: unit -> NodeCode + member TcInfo: CompilationThreadToken -> TcInfo - /// Compute both the "TcInfo" and "TcInfoExtras" parts of the results. /// Can cause a second type-check if `enablePartialTypeChecking` is true in the checker. /// Only use when it's absolutely necessary to get rich information on a file. - member GetOrComputeTcInfoWithExtras: unit -> NodeCode + member TcInfoWithOptional: CompilationThreadToken -> TcInfo * TcInfoOptional - /// Compute the "ItemKeyStore" parts of the results. /// Can cause a second type-check if `enablePartialTypeChecking` is true in the checker. /// Only use when it's absolutely necessary to get rich information on a file. - /// - /// Will return 'None' for enableBackgroundItemKeyStoreAndSemanticClassification=false. - member GetOrComputeItemKeyStoreIfEnabled: unit -> NodeCode + member TryGetItemKeyStore: CompilationThreadToken -> ItemKeyStore option /// Can cause a second type-check if `enablePartialTypeChecking` is true in the checker. /// Only use when it's absolutely necessary to get rich information on a file. - /// - /// Will return 'None' for enableBackgroundItemKeyStoreAndSemanticClassification=false. - member GetOrComputeSemanticClassificationIfEnabled: unit -> NodeCode + member GetSemanticClassification: CompilationThreadToken -> struct(range * SemanticClassificationType) [] member TimeStamp: DateTime @@ -155,18 +146,18 @@ type internal IncrementalBuilder = member ProjectChecked : IEvent #if !NO_EXTENSIONTYPING - /// Raised when the build is invalidated. - member ImportsInvalidatedByTypeProvider : IEvent + /// Raised when a type provider invalidates the build. + member ImportsInvalidatedByTypeProvider : IEvent #endif - /// Check if one of the build's references is invalidated. - member IsReferencesInvalidated : bool + /// Tries to get the current successful TcImports. This is only used in testing. Do not use it for other stuff. + member TryGetCurrentTcImports : unit -> TcImports option /// The list of files the build depends on member AllDependenciesDeprecated : string[] - /// The project build. Return true if the background work is finished. - member PopulatePartialCheckingResults: unit -> NodeCode + /// Perform one step in the F# build. Return true if the background work is finished. + member Step : CompilationThreadToken -> Cancellable /// Get the preceding typecheck state of a slot, without checking if it is up-to-date w.r.t. /// the timestamps on files and referenced DLLs prior to this one. Return None if the result is not available. @@ -175,13 +166,6 @@ type internal IncrementalBuilder = /// This is safe for use from non-compiler threads but the objects returned must in many cases be accessed only from the compiler thread. member GetCheckResultsBeforeFileInProjectEvenIfStale: filename:string -> PartialCheckResults option - /// Get the typecheck state of a slot, without checking if it is up-to-date w.r.t. - /// the timestamps on files and referenced DLLs prior to this one. Return None if the result is not available. - /// This is a very quick operation. - /// - /// This is safe for use from non-compiler threads but the objects returned must in many cases be accessed only from the compiler thread. - member GetCheckResultsForFileInProjectEvenIfStale: filename:string -> PartialCheckResults option - /// Get the preceding typecheck state of a slot, but only if it is up-to-date w.r.t. /// the timestamps on files and referenced DLLs prior to this one. Return None if the result is not available. /// This is a relatively quick operation. @@ -189,45 +173,46 @@ type internal IncrementalBuilder = /// This is safe for use from non-compiler threads member AreCheckResultsBeforeFileInProjectReady: filename:string -> bool - /// Get the preceding typecheck state of a slot, WITH checking if it is up-to-date w.r.t. However, files will not be parsed or checked. - /// the timestamps on files and referenced DLLs prior to this one. Return None if the result is not available or if it is not up-to-date. - /// - /// This is safe for use from non-compiler threads but the objects returned must in many cases be accessed only from the compiler thread. - member TryGetCheckResultsBeforeFileInProject: filename: string -> PartialCheckResults option - - /// Get the preceding typecheck state of a slot. Compute the entire type check of the project up - /// to the necessary point if the result is not available. This may be a long-running operation. - member GetCheckResultsBeforeFileInProject : filename:string -> NodeCode - /// Get the preceding typecheck state of a slot. Compute the entire type check of the project up /// to the necessary point if the result is not available. This may be a long-running operation. - /// This will get full type-check info for the file, meaning no partial type-checking. - member GetFullCheckResultsBeforeFileInProject : filename:string -> NodeCode + /// + // TODO: make this an Eventually (which can be scheduled) or an Async (which can be cancelled) + member GetCheckResultsBeforeFileInProject : CompilationThreadToken * filename:string -> Cancellable /// Get the typecheck state after checking a file. Compute the entire type check of the project up /// to the necessary point if the result is not available. This may be a long-running operation. - member GetCheckResultsAfterFileInProject : filename:string -> NodeCode + /// + // TODO: make this an Eventually (which can be scheduled) or an Async (which can be cancelled) + member GetCheckResultsAfterFileInProject : CompilationThreadToken * filename:string -> Cancellable /// Get the typecheck state after checking a file. Compute the entire type check of the project up /// to the necessary point if the result is not available. This may be a long-running operation. /// This will get full type-check info for the file, meaning no partial type-checking. - member GetFullCheckResultsAfterFileInProject : filename:string -> NodeCode + /// + // TODO: make this an Eventually (which can be scheduled) or an Async (which can be cancelled) + member GetFullCheckResultsAfterFileInProject : CompilationThreadToken * filename:string -> Cancellable /// Get the typecheck result after the end of the last file. The typecheck of the project is not 'completed'. /// This may be a long-running operation. - member GetCheckResultsAfterLastFileInProject : unit -> NodeCode + /// + // TODO: make this an Eventually (which can be scheduled) or an Async (which can be cancelled) + member GetCheckResultsAfterLastFileInProject : CompilationThreadToken -> Cancellable /// Get the final typecheck result. If 'generateTypedImplFiles' was set on Create then the TypedAssemblyAfterOptimization will contain implementations. /// This may be a long-running operation. - member GetCheckResultsAndImplementationsForProject : unit -> NodeCode + /// + // TODO: make this an Eventually (which can be scheduled) or an Async (which can be cancelled) + member GetCheckResultsAndImplementationsForProject : CompilationThreadToken -> Cancellable /// Get the final typecheck result. If 'generateTypedImplFiles' was set on Create then the TypedAssemblyAfterOptimization will contain implementations. /// This may be a long-running operation. /// This will get full type-check info for the project, meaning no partial type-checking. - member GetFullCheckResultsAndImplementationsForProject : unit -> NodeCode + /// + // TODO: make this an Eventually (which can be scheduled) or an Async (which can be cancelled) + member GetFullCheckResultsAndImplementationsForProject : CompilationThreadToken -> Cancellable /// Get the logical time stamp that is associated with the output of the project if it were gully built immediately - member GetLogicalTimeStampForProject: TimeStampCache -> DateTime + member GetLogicalTimeStampForProject: TimeStampCache * CompilationThreadToken -> DateTime /// Does the given file exist in the builder's pipeline? member ContainsFile: filename: string -> bool @@ -235,11 +220,12 @@ type internal IncrementalBuilder = /// Await the untyped parse results for a particular slot in the vector of parse results. /// /// This may be a marginally long-running operation (parses are relatively quick, only one file needs to be parsed) - member GetParseResultsForFile: filename:string -> ParsedInput * range * string * (PhasedDiagnostic * FSharpDiagnosticSeverity)[] + member GetParseResultsForFile: CompilationThreadToken * filename:string -> Cancellable /// Create the incremental builder static member TryCreateIncrementalBuilderForProjectOptions: - LegacyReferenceResolver * + CompilationThreadToken * + ReferenceResolver.Resolver * defaultFSharpBinariesDir: string * FrameworkImportsCache * loadClosureOpt:LoadClosure option * @@ -250,13 +236,14 @@ type internal IncrementalBuilder = useScriptResolutionRules:bool * keepAssemblyContents: bool * keepAllBackgroundResolutions: bool * + maxTimeShareMilliseconds: int64 * tryGetMetadataSnapshot: ILBinaryReader.ILReaderTryGetMetadataSnapshot * suggestNamesForErrors: bool * keepAllBackgroundSymbolUses: bool * enableBackgroundItemKeyStoreAndSemanticClassification: bool * enablePartialTypeChecking: bool * dependencyProvider: DependencyProvider option - -> NodeCode + -> Cancellable /// Generalized Incremental Builder. This is exposed only for unit testing purposes. module internal IncrementalBuild = diff --git a/src/fsharp/service/ItemKey.fs b/src/fsharp/service/ItemKey.fs index 636c2e324b0..f064d4f98c6 100644 --- a/src/fsharp/service/ItemKey.fs +++ b/src/fsharp/service/ItemKey.fs @@ -1,24 +1,25 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.CodeAnalysis +namespace FSharp.Compiler.SourceCodeServices open System open System.IO open System.IO.MemoryMappedFiles open System.Reflection.Metadata -open System.Runtime.InteropServices + open FSharp.NativeInterop + +open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.Infos open FSharp.Compiler.NameResolution -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Position -open FSharp.Compiler.Text.Range +open FSharp.Compiler.Range open FSharp.Compiler.TypedTree +open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TypedTreeBasics +open FSharp.Compiler.TcGlobals #nowarn "9" -#nowarn "51" /// These tags are used to create unique item key strings to decrease possible key string collisions when the Items are actually completely different. [] @@ -96,16 +97,21 @@ module ItemKeyTags = [] type ItemKeyStore(mmf: MemoryMappedFile, length) = - let rangeBuffer = Array.zeroCreate sizeof - let mutable isDisposed = false let checkDispose() = if isDisposed then raise (ObjectDisposedException("ItemKeyStore")) member _.ReadRange(reader: byref) = - reader.ReadBytes(sizeof, rangeBuffer, 0) - MemoryMarshal.Cast(Span(rangeBuffer)).[0] + let startLine = reader.ReadInt32() + let startColumn = reader.ReadInt32() + let endLine = reader.ReadInt32() + let endColumn = reader.ReadInt32() + let fileIndex = reader.ReadInt32() + + let posStart = mkPos startLine startColumn + let posEnd = mkPos endLine endColumn + mkFileIndexRange fileIndex posStart posEnd member _.ReadKeyString(reader: byref) = let size = reader.ReadInt32() @@ -165,15 +171,17 @@ and [] ItemKeyStoreBuilder() = b.WriteInt32 i let writeInt64 (i: int64) = - b.WriteInt64 i + b.WriteInt64 i let writeString (str: string) = b.WriteUTF16 str - let writeRange (m: range) = - let mutable m = m - let ptr = &&m |> NativePtr.toNativeInt |> NativePtr.ofNativeInt - b.WriteBytes(ptr, sizeof) + let writeRange (m: Range.range) = + b.WriteInt32(m.StartLine) + b.WriteInt32(m.StartColumn) + b.WriteInt32(m.EndLine) + b.WriteInt32(m.EndColumn) + b.WriteInt32(m.FileIndex) let writeEntityRef (eref: EntityRef) = writeString ItemKeyTags.entityRef @@ -185,22 +193,22 @@ and [] ItemKeyStoreBuilder() = match ilty with | ILType.TypeVar n -> writeString "!"; writeUInt16 n | ILType.Modified (_, _, ty2) -> writeILType ty2 - | ILType.Array (ILArrayShape s, ty) -> + | ILType.Array (ILArrayShape s, ty) -> writeILType ty - writeString "[" + writeString "[" writeInt32 (s.Length-1) writeString "]" - | ILType.Value tr - | ILType.Boxed tr -> + | ILType.Value tr + | ILType.Boxed tr -> tr.TypeRef.Enclosing |> List.iter (fun x -> writeString x writeChar '.') writeChar '.' writeString tr.TypeRef.Name - | ILType.Void -> + | ILType.Void -> writeString "void" - | ILType.Ptr ty -> + | ILType.Ptr ty -> writeString "ptr<" writeILType ty writeChar '>' @@ -231,7 +239,7 @@ and [] ItemKeyStoreBuilder() = writeString ItemKeyTags.typeFunction writeType false d writeType false r - | TType_measure ms -> + | TType_measure ms -> if isStandalone then writeString ItemKeyTags.typeMeasure writeMeasure isStandalone ms @@ -246,10 +254,10 @@ and [] ItemKeyStoreBuilder() = and writeMeasure isStandalone (ms: Measure) = match ms with - | Measure.Var typar -> + | Measure.Var typar -> writeString ItemKeyTags.typeMeasureVar writeTypar isStandalone typar - | Measure.Con tcref -> + | Measure.Con tcref -> writeString ItemKeyTags.typeMeasureCon writeEntityRef tcref | _ -> @@ -258,7 +266,7 @@ and [] ItemKeyStoreBuilder() = and writeTypar (isStandalone: bool) (typar: Typar) = match typar.Solution with | Some ty -> writeType isStandalone ty - | _ -> + | _ -> if isStandalone then writeInt64 typar.Stamp @@ -279,7 +287,7 @@ and [] ItemKeyStoreBuilder() = | ParentNone -> writeChar '%' | Parent eref -> writeEntityRef eref - member _.Write (m: range, item: Item) = + member _.Write (m: Range.range, item: Item) = writeRange m let fixup = b.ReserveBytes 4 |> BlobWriter @@ -288,22 +296,13 @@ and [] ItemKeyStoreBuilder() = match item with | Item.Value vref -> - if vref.IsPropertyGetterMethod || vref.IsPropertySetterMethod then - writeString ItemKeyTags.itemProperty - writeString vref.PropertyName - match vref.DeclaringEntity with - | ParentRef.Parent parent -> - writeEntityRef parent - | _ -> - () - else - writeValRef vref + writeValRef vref - | Item.UnionCase(info, _) -> + | Item.UnionCase(info, _) -> writeString ItemKeyTags.typeUnionCase writeEntityRef info.TyconRef writeString info.Name - + | Item.ActivePatternResult(info, _, _, _) -> writeString ItemKeyTags.itemActivePattern info.ActiveTagsWithRanges @@ -330,7 +329,7 @@ and [] ItemKeyStoreBuilder() = writeEntityRef info.TyconRef writeString info.Name writeInt32 fieldIndex - + | Item.AnonRecdField(info, tys, i, _) -> writeString ItemKeyTags.itemAnonymousRecordField writeString info.ILTypeRef.BasicQualifiedName @@ -354,11 +353,8 @@ and [] ItemKeyStoreBuilder() = | Item.Property(nm, infos) -> writeString ItemKeyTags.itemProperty writeString nm - match infos |> List.tryHead with - | Some info -> - writeEntityRef info.DeclaringTyconRef - | _ -> - () + infos + |> List.iter (fun info -> writeEntityRef info.DeclaringTyconRef) | Item.TypeVar(_, typar) -> writeTypar true typar @@ -369,7 +365,7 @@ and [] ItemKeyStoreBuilder() = | Item.UnqualifiedType [tcref] -> writeEntityRef tcref - | Item.MethodGroup(_, [info], _) + | Item.MethodGroup(_, [info], _) | Item.CtorGroup(_, [info]) -> match info with | FSMeth(_, _, vref, _) -> @@ -388,7 +384,7 @@ and [] ItemKeyStoreBuilder() = | Item.ModuleOrNamespaces [x] -> writeString ItemKeyTags.itemModuleOrNamespace x.CompilationPath.DemangledPath - |> List.iter (fun x -> + |> List.iter (fun x -> writeString x writeString ".") writeString x.LogicalName @@ -416,13 +412,13 @@ and [] ItemKeyStoreBuilder() = member _.TryBuildAndReset() = if b.Count > 0 then let length = int64 b.Count - let mmf = + let mmf = let mmf = MemoryMappedFile.CreateNew( - null, - length, - MemoryMappedFileAccess.ReadWrite, - MemoryMappedFileOptions.None, + null, + length, + MemoryMappedFileAccess.ReadWrite, + MemoryMappedFileOptions.None, HandleInheritability.None) use stream = mmf.CreateViewStream(0L, length, MemoryMappedFileAccess.ReadWrite) b.WriteContentTo stream @@ -430,7 +426,7 @@ and [] ItemKeyStoreBuilder() = b.Clear() - Some(new ItemKeyStore(mmf, length)) + Some(new ItemKeyStore(mmf, length)) else b.Clear() - None + None \ No newline at end of file diff --git a/src/fsharp/service/ItemKey.fsi b/src/fsharp/service/ItemKey.fsi index fa82eddf0a1..ce69297390a 100644 --- a/src/fsharp/service/ItemKey.fsi +++ b/src/fsharp/service/ItemKey.fsi @@ -1,17 +1,18 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.CodeAnalysis +namespace FSharp.Compiler.SourceCodeServices open System + open FSharp.Compiler.NameResolution -open FSharp.Compiler.Text +open FSharp.Compiler.Range /// Stores a list of item key strings and their ranges in a memory mapped file. [] type internal ItemKeyStore = interface IDisposable - member FindAll: Item -> seq + member FindAll: Item -> range seq /// A builder that will build an item key store based on the written Item and its associated range. [] diff --git a/src/fsharp/service/QuickParse.fs b/src/fsharp/service/QuickParse.fs index d01772621c0..302edc1f69f 100644 --- a/src/fsharp/service/QuickParse.fs +++ b/src/fsharp/service/QuickParse.fs @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler open System -open Internal.Utilities.Library -open FSharp.Compiler.Syntax -open FSharp.Compiler.Tokenization +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.SourceCodeServices /// Qualified long name. type PartialLongName = @@ -20,8 +19,7 @@ type PartialLongName = EndColumn: int /// Position of the last dot. - LastDotPos: int option - } + LastDotPos: int option } /// Empty partial long name. static member Empty(endColumn: int) = { QualifyingIdents = []; PartialIdent = ""; EndColumn = endColumn; LastDotPos = None } diff --git a/src/fsharp/service/QuickParse.fsi b/src/fsharp/service/QuickParse.fsi index 1d403e85f71..0201f846adb 100644 --- a/src/fsharp/service/QuickParse.fsi +++ b/src/fsharp/service/QuickParse.fsi @@ -1,8 +1,8 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler -open FSharp.Compiler.Tokenization +open FSharp.Compiler.SourceCodeServices /// Qualified long name. type public PartialLongName = diff --git a/src/fsharp/service/Reactor.fs b/src/fsharp/service/Reactor.fs new file mode 100755 index 00000000000..29cf0c9678b --- /dev/null +++ b/src/fsharp/service/Reactor.fs @@ -0,0 +1,204 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.SourceCodeServices + +open System +open System.Diagnostics +open System.Globalization +open System.Threading + +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.Lib + +/// Represents the capability to schedule work in the compiler service operations queue for the compilation thread +type internal IReactorOperations = + abstract EnqueueAndAwaitOpAsync : userOpName:string * opName:string * opArg:string * (CompilationThreadToken -> Cancellable<'T>) -> Async<'T> + abstract EnqueueOp: userOpName:string * opName:string * opArg:string * (CompilationThreadToken -> unit) -> unit + +[] +type internal ReactorCommands = + /// Kick off a build. + | SetBackgroundOp of ( (* userOpName: *) string * (* opName: *) string * (* opArg: *) string * (CompilationThreadToken -> CancellationToken -> bool)) option + + /// Do some work not synchronized in the mailbox. + | Op of userOpName: string * opName: string * opArg: string * CancellationToken * (CompilationThreadToken -> unit) * (unit -> unit) + + /// Finish the background building + | WaitForBackgroundOpCompletion of AsyncReplyChannel + + /// Finish all the queued ops + | CompleteAllQueuedOps of AsyncReplyChannel + +[] +/// There is one global Reactor for the entire language service, no matter how many projects or files +/// are open. +type Reactor() = + static let pauseBeforeBackgroundWorkDefault = GetEnvInteger "FCS_PauseBeforeBackgroundWorkMilliseconds" 10 + static let theReactor = Reactor() + let mutable pauseBeforeBackgroundWork = pauseBeforeBackgroundWorkDefault + + // We need to store the culture for the VS thread that is executing now, + // so that when the reactor picks up a thread from the thread pool we can set the culture + let mutable culture = CultureInfo(CultureInfo.CurrentUICulture.Name) + + let mutable bgOpCts = new CancellationTokenSource() + + /// Mailbox dispatch function. + let builder = + MailboxProcessor<_>.Start <| fun inbox -> + + // Async workflow which receives messages and dispatches to worker functions. + let rec loop (bgOpOpt, onComplete, bg) = + async { //Trace.TraceInformation("Reactor: receiving..., remaining {0}", inbox.CurrentQueueLength) + + // Explanation: The reactor thread acts as the compilation thread in hosted scenarios + let ctok = AssumeCompilationThreadWithoutEvidence() + + // Messages always have priority over the background op. + let! msg = + async { match bgOpOpt, onComplete with + | None, None -> + let! msg = inbox.Receive() + return Some msg + | _, Some _ -> + return! inbox.TryReceive(0) + | Some _, _ -> + let timeout = + if bg then 0 + else + Trace.TraceInformation("Reactor: {0:n3} pausing {1} milliseconds", DateTime.Now.TimeOfDay.TotalSeconds, pauseBeforeBackgroundWork) + pauseBeforeBackgroundWork + return! inbox.TryReceive(timeout) } + Thread.CurrentThread.CurrentUICulture <- culture + match msg with + | Some (SetBackgroundOp bgOpOpt) -> + //Trace.TraceInformation("Reactor: --> set background op, remaining {0}", inbox.CurrentQueueLength) + return! loop (bgOpOpt, onComplete, false) + + | Some (Op (userOpName, opName, opArg, ct, op, ccont)) -> + if ct.IsCancellationRequested then ccont() else + Trace.TraceInformation("Reactor: {0:n3} --> {1}.{2} ({3}), remaining {4}", DateTime.Now.TimeOfDay.TotalSeconds, userOpName, opName, opArg, inbox.CurrentQueueLength) + let time = Stopwatch() + time.Start() + op ctok + time.Stop() + let span = time.Elapsed + //if span.TotalMilliseconds > 100.0 then + let taken = span.TotalMilliseconds + let msg = (if taken > 10000.0 then "BAD-OP: >10s " elif taken > 3000.0 then "BAD-OP: >3s " elif taken > 1000.0 then "BAD-OP: > 1s " elif taken > 500.0 then "BAD-OP: >0.5s " else "") + Trace.TraceInformation("Reactor: {0:n3} {1}<-- {2}.{3}, took {4} ms", DateTime.Now.TimeOfDay.TotalSeconds, msg, userOpName, opName, span.TotalMilliseconds) + return! loop (bgOpOpt, onComplete, false) + | Some (WaitForBackgroundOpCompletion channel) -> + match bgOpOpt with + | None -> () + | Some (bgUserOpName, bgOpName, bgOpArg, bgOp) -> + Trace.TraceInformation("Reactor: {0:n3} --> wait for background {1}.{2} ({3}), remaining {4}", DateTime.Now.TimeOfDay.TotalSeconds, bgUserOpName, bgOpName, bgOpArg, inbox.CurrentQueueLength) + bgOpCts.Dispose() + bgOpCts <- new CancellationTokenSource() + while not bgOpCts.IsCancellationRequested && bgOp ctok bgOpCts.Token do + () + + if bgOpCts.IsCancellationRequested then + Trace.TraceInformation("FCS: <-- wait for background was cancelled {0}.{1}", bgUserOpName, bgOpName) + + channel.Reply(()) + return! loop (None, onComplete, false) + + | Some (CompleteAllQueuedOps channel) -> + Trace.TraceInformation("Reactor: {0:n3} --> stop background work and complete all queued ops, remaining {1}", DateTime.Now.TimeOfDay.TotalSeconds, inbox.CurrentQueueLength) + return! loop (None, Some channel, false) + + | None -> + match bgOpOpt, onComplete with + | _, Some onComplete -> onComplete.Reply() + | Some (bgUserOpName, bgOpName, bgOpArg, bgOp), None -> + Trace.TraceInformation("Reactor: {0:n3} --> background step {1}.{2} ({3})", DateTime.Now.TimeOfDay.TotalSeconds, bgUserOpName, bgOpName, bgOpArg) + let time = Stopwatch() + time.Start() + bgOpCts.Dispose() + bgOpCts <- new CancellationTokenSource() + let res = bgOp ctok bgOpCts.Token + if bgOpCts.IsCancellationRequested then + Trace.TraceInformation("FCS: <-- background step {0}.{1}, was cancelled", bgUserOpName, bgOpName) + time.Stop() + let taken = time.Elapsed.TotalMilliseconds + //if span.TotalMilliseconds > 100.0 then + let msg = (if taken > 10000.0 then "BAD-BG-SLICE: >10s " elif taken > 3000.0 then "BAD-BG-SLICE: >3s " elif taken > 1000.0 then "BAD-BG-SLICE: > 1s " else "") + Trace.TraceInformation("Reactor: {0:n3} {1}<-- background step, took {2}ms", DateTime.Now.TimeOfDay.TotalSeconds, msg, taken) + return! loop ((if res then bgOpOpt else None), onComplete, true) + | None, None -> failwith "unreachable, should have used inbox.Receive" + } + async { + while true do + try + do! loop (None, None, false) + with e -> + Debug.Assert(false, String.Format("unexpected failure in reactor loop {0}, restarting", e)) + } + + member __.SetPreferredUILang(preferredUiLang: string option) = + match preferredUiLang with + | Some s -> + culture <- CultureInfo s +#if FX_RESHAPED_GLOBALIZATION + CultureInfo.CurrentUICulture <- culture +#else + Thread.CurrentThread.CurrentUICulture <- culture +#endif + | None -> () + + // [Foreground Mailbox Accessors] ----------------------------------------------------------- + member r.SetBackgroundOp(bgOpOpt) = + Trace.TraceInformation("Reactor: {0:n3} enqueue start background, length {1}", DateTime.Now.TimeOfDay.TotalSeconds, builder.CurrentQueueLength) + bgOpCts.Cancel() + builder.Post(SetBackgroundOp bgOpOpt) + + member r.CancelBackgroundOp() = + Trace.TraceInformation("FCS: trying to cancel any active background work") + bgOpCts.Cancel() + + member r.EnqueueOp(userOpName, opName, opArg, op) = + Trace.TraceInformation("Reactor: {0:n3} enqueue {1}.{2} ({3}), length {4}", DateTime.Now.TimeOfDay.TotalSeconds, userOpName, opName, opArg, builder.CurrentQueueLength) + builder.Post(Op(userOpName, opName, opArg, CancellationToken.None, op, (fun () -> ()))) + + member r.EnqueueOpPrim(userOpName, opName, opArg, ct, op, ccont) = + Trace.TraceInformation("Reactor: {0:n3} enqueue {1}.{2} ({3}), length {4}", DateTime.Now.TimeOfDay.TotalSeconds, userOpName, opName, opArg, builder.CurrentQueueLength) + builder.Post(Op(userOpName, opName, opArg, ct, op, ccont)) + + member r.CurrentQueueLength = + builder.CurrentQueueLength + + // This is for testing only + member r.WaitForBackgroundOpCompletion() = + Trace.TraceInformation("Reactor: {0:n3} enqueue wait for background, length {0}", DateTime.Now.TimeOfDay.TotalSeconds, builder.CurrentQueueLength) + builder.PostAndReply WaitForBackgroundOpCompletion + + // This is for testing only + member r.CompleteAllQueuedOps() = + Trace.TraceInformation("Reactor: {0:n3} enqueue wait for all ops, length {0}", DateTime.Now.TimeOfDay.TotalSeconds, builder.CurrentQueueLength) + builder.PostAndReply CompleteAllQueuedOps + + member r.EnqueueAndAwaitOpAsync (userOpName, opName, opArg, f) = + async { + let! ct = Async.CancellationToken + let resultCell = AsyncUtil.AsyncResultCell<_>() + r.EnqueueOpPrim(userOpName, opName, opArg, ct, + op=(fun ctok -> + let result = + try + match Cancellable.run ct (f ctok) with + | ValueOrCancelled.Value r -> AsyncUtil.AsyncOk r + | ValueOrCancelled.Cancelled e -> AsyncUtil.AsyncCanceled e + with e -> e |> AsyncUtil.AsyncException + + resultCell.RegisterResult(result)), + ccont=(fun () -> resultCell.RegisterResult (AsyncUtil.AsyncCanceled(OperationCanceledException(ct))) ) + + ) + return! resultCell.AsyncResult + } + + member __.PauseBeforeBackgroundWork with get() = pauseBeforeBackgroundWork and set v = pauseBeforeBackgroundWork <- v + + static member Singleton = theReactor + diff --git a/src/fsharp/service/Reactor.fsi b/src/fsharp/service/Reactor.fsi new file mode 100755 index 00000000000..3040ca65eee --- /dev/null +++ b/src/fsharp/service/Reactor.fsi @@ -0,0 +1,56 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.SourceCodeServices + +open System.Threading +open FSharp.Compiler.AbstractIL.Internal.Library + +/// Represents the capability to schedule work in the compiler service operations queue for the compilation thread +type internal IReactorOperations = + + /// Put the operation in the queue, and return an async handle to its result. + abstract EnqueueAndAwaitOpAsync : userOpName:string * opName:string * opArg:string * action: (CompilationThreadToken -> Cancellable<'T>) -> Async<'T> + + /// Enqueue an operation and return immediately. + abstract EnqueueOp: userOpName:string * opName:string * opArg:string * action: (CompilationThreadToken -> unit) -> unit + +/// Reactor is intended for long-running but interruptible operations, interleaved +/// with one-off asynchronous operations. +/// +/// It is used to guard the global compiler state while maintaining responsiveness on +/// the UI thread. +/// Reactor operations +[] +type internal Reactor = + + /// Allows to specify the language for error messages + member SetPreferredUILang : string option -> unit + + /// Set the background building function, which is called repeatedly + /// until it returns 'false'. If None then no background operation is used. + member SetBackgroundOp : ( (* userOpName:*) string * (* opName: *) string * (* opArg: *) string * (CompilationThreadToken -> CancellationToken -> bool)) option -> unit + + /// Cancel any work being don by the background building function. + member CancelBackgroundOp : unit -> unit + + /// Block until the current implicit background build is complete. Unit test only. + member WaitForBackgroundOpCompletion : unit -> unit + + /// Block until all operations in the queue are complete + member CompleteAllQueuedOps : unit -> unit + + /// Enqueue an uncancellable operation and return immediately. + member EnqueueOp : userOpName:string * opName: string * opArg: string * op:(CompilationThreadToken -> unit) -> unit + + /// For debug purposes + member CurrentQueueLength : int + + /// Put the operation in the queue, and return an async handle to its result. + member EnqueueAndAwaitOpAsync : userOpName:string * opName:string * opArg:string * (CompilationThreadToken -> Cancellable<'T>) -> Async<'T> + + /// The timespan in milliseconds before background work begins after the operations queue is empty + member PauseBeforeBackgroundWork : int with get, set + + /// Get the reactor + static member Singleton : Reactor + diff --git a/src/fsharp/service/SemanticClassification.fs b/src/fsharp/service/SemanticClassification.fs index ec433a84b0c..89db4acada0 100644 --- a/src/fsharp/service/SemanticClassification.fs +++ b/src/fsharp/service/SemanticClassification.fs @@ -1,69 +1,61 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler.SourceCodeServices open System.Diagnostics open System.Collections.Generic open System.Collections.Immutable -open Internal.Utilities.Library -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.Import + +open FSharp.Compiler +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.Infos open FSharp.Compiler.ErrorLogger open FSharp.Compiler.NameResolution -open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Range open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps [] type SemanticClassificationType = - | ReferenceType = 0 - | ValueType = 1 - | UnionCase = 2 - | UnionCaseField = 3 - | Function = 4 - | Property = 5 - | MutableVar = 6 - | Module = 7 - | Namespace = 8 - | Printf = 9 - | ComputationExpression = 10 - | IntrinsicFunction = 11 - | Enumeration = 12 - | Interface = 13 - | TypeArgument = 14 - | Operator = 15 - | DisposableType = 16 - | DisposableTopLevelValue = 17 - | DisposableLocalValue = 18 - | Method = 19 - | ExtensionMethod = 20 - | ConstructorForReferenceType = 21 - | ConstructorForValueType = 22 - | Literal = 23 - | RecordField = 24 - | MutableRecordField = 25 - | RecordFieldAsFunction = 26 - | Exception = 27 - | Field = 28 - | Event = 29 - | Delegate = 30 - | NamedArgument = 31 - | Value = 32 - | LocalValue = 33 - | Type = 34 - | TypeDef = 35 - | Plaintext = 36 - -[] -[] -type SemanticClassificationItem = - val Range: range - val Type: SemanticClassificationType - new((range, ty)) = { Range = range; Type = ty } + | ReferenceType + | ValueType + | UnionCase + | UnionCaseField + | Function + | Property + | MutableVar + | Module + | Namespace + | Printf + | ComputationExpression + | IntrinsicFunction + | Enumeration + | Interface + | TypeArgument + | Operator + | DisposableType + | DisposableTopLevelValue + | DisposableLocalValue + | Method + | ExtensionMethod + | ConstructorForReferenceType + | ConstructorForValueType + | Literal + | RecordField + | MutableRecordField + | RecordFieldAsFunction + | Exception + | Field + | Event + | Delegate + | NamedArgument + | Value + | LocalValue + | Type + | TypeDef + | Plaintext [] module TcResolutionsExtensions = @@ -71,7 +63,7 @@ module TcResolutionsExtensions = (cnr.Item, cnr.ItemOccurence, cnr.DisplayEnv, cnr.NameResolutionEnv, cnr.AccessorDomain, cnr.Range) type TcResolutions with - member sResolutions.GetSemanticClassification(g: TcGlobals, amap: ImportMap, formatSpecifierLocations: (range * int) [], range: range option) : SemanticClassificationItem [] = + member sResolutions.GetSemanticClassification(g: TcGlobals, amap: Import.ImportMap, formatSpecifierLocations: (range * int) [], range: range option) : struct(range * SemanticClassificationType) [] = ErrorScope.Protect Range.range0 (fun () -> let (|LegitTypeOccurence|_|) = function | ItemOccurence.UseInType @@ -129,14 +121,14 @@ module TcResolutionsExtensions = let isDisposableTy (ty: TType) = not (typeEquiv g ty g.system_IDisposable_ty) && - protectAssemblyExplorationNoReraise false false (fun () -> ExistsHeadTypeInEntireHierarchy g amap range0 ty g.tcref_System_IDisposable) + protectAssemblyExplorationNoReraise false false (fun () -> Infos.ExistsHeadTypeInEntireHierarchy g amap range0 ty g.tcref_System_IDisposable) let isDiscard (str: string) = str.StartsWith("_") let isValRefDisposable (vref: ValRef) = not (isDiscard vref.DisplayName) && // For values, we actually do want to color things if they literally are IDisposables - protectAssemblyExplorationNoReraise false false (fun () -> ExistsHeadTypeInEntireHierarchy g amap range0 vref.Type g.tcref_System_IDisposable) + protectAssemblyExplorationNoReraise false false (fun () -> Infos.ExistsHeadTypeInEntireHierarchy g amap range0 vref.Type g.tcref_System_IDisposable) let isStructTyconRef (tyconRef: TyconRef) = let ty = generalizedTyconRef tyconRef @@ -156,9 +148,9 @@ module TcResolutionsExtensions = let duplicates = HashSet(Range.comparer) let results = ImmutableArray.CreateBuilder() - let inline add m (typ: SemanticClassificationType) = + let inline add m typ = if duplicates.Add m then - results.Add (new SemanticClassificationItem((m, typ))) + results.Add struct(m, typ) resolutions |> Array.iter (fun cnr -> @@ -375,7 +367,7 @@ module TcResolutionsExtensions = | _, _, _, _, _, m -> add m SemanticClassificationType.Plaintext) - results.AddRange(formatSpecifierLocations |> Array.map (fun (m, _) -> new SemanticClassificationItem((m, SemanticClassificationType.Printf)))) + results.AddRange(formatSpecifierLocations |> Array.map (fun (m, _) -> struct(m, SemanticClassificationType.Printf))) results.ToArray() ) (fun msg -> diff --git a/src/fsharp/service/SemanticClassification.fsi b/src/fsharp/service/SemanticClassification.fsi index c7db8119251..97193ff564a 100644 --- a/src/fsharp/service/SemanticClassification.fsi +++ b/src/fsharp/service/SemanticClassification.fsi @@ -1,61 +1,54 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler.SourceCodeServices open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.Import open FSharp.Compiler.NameResolution -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text +open FSharp.Compiler.Range open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.TcGlobals /// A kind that determines what range in a source's text is semantically classified as after type-checking. [] type SemanticClassificationType = - | ReferenceType = 0 - | ValueType = 1 - | UnionCase = 2 - | UnionCaseField = 3 - | Function = 4 - | Property = 5 - | MutableVar = 6 - | Module = 7 - | Namespace = 8 - | Printf = 9 - | ComputationExpression = 10 - | IntrinsicFunction = 11 - | Enumeration = 12 - | Interface = 13 - | TypeArgument = 14 - | Operator = 15 - | DisposableType = 16 - | DisposableTopLevelValue = 17 - | DisposableLocalValue = 18 - | Method = 19 - | ExtensionMethod = 20 - | ConstructorForReferenceType = 21 - | ConstructorForValueType = 22 - | Literal = 23 - | RecordField = 24 - | MutableRecordField = 25 - | RecordFieldAsFunction = 26 - | Exception = 27 - | Field = 28 - | Event = 29 - | Delegate = 30 - | NamedArgument = 31 - | Value = 32 - | LocalValue = 33 - | Type = 34 - | TypeDef = 35 - | Plaintext = 36 - -[] -[] -type SemanticClassificationItem = - val Range: range - val Type: SemanticClassificationType - new: (range * SemanticClassificationType) -> SemanticClassificationItem + | ReferenceType + | ValueType + | UnionCase + | UnionCaseField + | Function + | Property + | MutableVar + | Module + | Namespace + | Printf + | ComputationExpression + | IntrinsicFunction + | Enumeration + | Interface + | TypeArgument + | Operator + | DisposableType + | DisposableTopLevelValue + | DisposableLocalValue + | Method + | ExtensionMethod + | ConstructorForReferenceType + | ConstructorForValueType + | Literal + | RecordField + | MutableRecordField + | RecordFieldAsFunction + | Exception + | Field + | Event + | Delegate + | NamedArgument + | Value + | LocalValue + | Type + | TypeDef + | Plaintext /// Extension methods for the TcResolutions type. [] @@ -63,4 +56,4 @@ module internal TcResolutionsExtensions = val (|CNR|) : cnr: CapturedNameResolution -> (Item * ItemOccurence * DisplayEnv * NameResolutionEnv * AccessorDomain * range) type TcResolutions with - member GetSemanticClassification: g: TcGlobals * amap: ImportMap * formatSpecifierLocations: (range * int) [] * range: range option -> SemanticClassificationItem [] \ No newline at end of file + member GetSemanticClassification: g: TcGlobals * amap: ImportMap * formatSpecifierLocations: (range * int) [] * range: range option -> struct(range * SemanticClassificationType) [] \ No newline at end of file diff --git a/src/fsharp/service/SemanticClassificationKey.fs b/src/fsharp/service/SemanticClassificationKey.fs deleted file mode 100644 index 960d3fade56..00000000000 --- a/src/fsharp/service/SemanticClassificationKey.fs +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.EditorServices - -open System -open System.IO -open System.IO.MemoryMappedFiles -open System.Reflection.Metadata -open System.Runtime.InteropServices -open FSharp.NativeInterop -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Position -open FSharp.Compiler.Text.Range - -#nowarn "9" - -[] -type SemanticClassificationView(mmf: MemoryMappedFile, length) = - - let buffer = Array.zeroCreate sizeof - - member _.ReadItem(reader: byref) = - reader.ReadBytes(sizeof, buffer, 0) - MemoryMarshal.Cast(Span(buffer)).[0] - - member this.ForEach(f: SemanticClassificationItem -> unit) = - use view = mmf.CreateViewAccessor(0L, length) - let mutable reader = BlobReader(view.SafeMemoryMappedViewHandle.DangerousGetHandle() |> NativePtr.ofNativeInt, int length) - - reader.Offset <- 0 - while reader.Offset < reader.Length do - let item = this.ReadItem(&reader) - f item - -[] -type SemanticClassificationKeyStore(mmf: MemoryMappedFile, length) = - let mutable isDisposed = false - let checkDispose() = - if isDisposed then - raise (ObjectDisposedException("SemanticClassificationKeyStore")) - - member _.GetView() = - checkDispose() - SemanticClassificationView(mmf, length) - - interface IDisposable with - - member _.Dispose() = - isDisposed <- true - mmf.Dispose() - -[] -type SemanticClassificationKeyStoreBuilder() = - - let b = BlobBuilder() - - member _.WriteAll (semanticClassification: SemanticClassificationItem[]) = - use ptr = fixed semanticClassification - b.WriteBytes(NativePtr.ofNativeInt (NativePtr.toNativeInt ptr), semanticClassification.Length * sizeof) - - member _.TryBuildAndReset() = - if b.Count > 0 then - let length = int64 b.Count - let mmf = - let mmf = - MemoryMappedFile.CreateNew( - null, - length, - MemoryMappedFileAccess.ReadWrite, - MemoryMappedFileOptions.None, - HandleInheritability.None) - use stream = mmf.CreateViewStream(0L, length, MemoryMappedFileAccess.ReadWrite) - b.WriteContentTo stream - mmf - - b.Clear() - - Some(new SemanticClassificationKeyStore(mmf, length)) - else - b.Clear() - None diff --git a/src/fsharp/service/SemanticClassificationKey.fsi b/src/fsharp/service/SemanticClassificationKey.fsi deleted file mode 100644 index 8a30844f722..00000000000 --- a/src/fsharp/service/SemanticClassificationKey.fsi +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.EditorServices - -open System -open FSharp.Compiler.CodeAnalysis - -/// Provides a read only view to iterate over the semantic classification contents. -[] -type SemanticClassificationView = - - /// Iterate through the stored SemanticClassificationItem entries from the store and apply the passed function on each entry. - member ForEach: (SemanticClassificationItem -> unit) -> unit - -/// Stores a list of semantic classification key strings and their ranges in a memory mapped file. -/// Provides a view to iterate over the contents of the file. -[] -type internal SemanticClassificationKeyStore = - interface IDisposable - - /// Get a read only view on the semantic classification key store - member GetView: unit -> SemanticClassificationView - - -/// A builder that will build an semantic classification key store based on the written Item and its associated range. -[] -type internal SemanticClassificationKeyStoreBuilder = - - new: unit -> SemanticClassificationKeyStoreBuilder - - member WriteAll: SemanticClassificationItem[] -> unit - - member TryBuildAndReset: unit -> SemanticClassificationKeyStore option diff --git a/src/fsharp/service/ServiceAnalysis.fs b/src/fsharp/service/ServiceAnalysis.fs index d106a41142f..f392ff4efa8 100644 --- a/src/fsharp/service/ServiceAnalysis.fs +++ b/src/fsharp/service/ServiceAnalysis.fs @@ -1,16 +1,15 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler.SourceCodeServices +open System.Threading + +open FSharp.Compiler +open FSharp.Compiler.Range +open FSharp.Compiler.PrettyNaming open System.Collections.Generic open System.Runtime.CompilerServices -open Internal.Utilities.Library -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Symbols.FSharpSymbolPatterns -open FSharp.Compiler.Symbols -open FSharp.Compiler.Syntax.PrettyNaming -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range +open FSharp.Compiler.AbstractIL.Internal.Library module UnusedOpens = @@ -30,16 +29,16 @@ module UnusedOpens = for rf in ent.FSharpFields do yield rf :> FSharpSymbol - if ent.IsFSharpUnion && not (ent.HasAttribute()) then + if ent.IsFSharpUnion && not (Symbol.hasAttribute ent.Attributes) then for unionCase in ent.UnionCases do yield unionCase :> FSharpSymbol - if ent.HasAttribute() then + if Symbol.hasAttribute ent.Attributes then for fv in ent.MembersFunctionsAndValues do // fv.IsExtensionMember is always false for C# extension methods returning by `MembersFunctionsAndValues`, // so we have to check Extension attribute instead. // (note: fv.IsExtensionMember has proper value for symbols returning by GetAllUsesOfAllSymbolsInFile though) - if fv.HasAttribute() then + if Symbol.hasAttribute fv.Attributes then yield fv :> FSharpSymbol for apCase in entity.ActivePatternCases do @@ -52,9 +51,9 @@ module UnusedOpens = HashSet<_>(symbols, symbolHash) - member _.Entity = entity - member _.IsNestedAutoOpen = isNestedAutoOpen - member _.RevealedSymbolsContains(symbol) = revealedSymbols.Force().Contains symbol + member __.Entity = entity + member __.IsNestedAutoOpen = isNestedAutoOpen + member __.RevealedSymbolsContains(symbol) = revealedSymbols.Force().Contains symbol type OpenedModuleGroup = { OpenedModules: OpenedModule [] } @@ -64,7 +63,7 @@ module UnusedOpens = [| yield OpenedModule (modul, isNestedAutoOpen) for ent in modul.NestedEntities do - if ent.IsFSharpModule && ent.HasAttribute() then + if ent.IsFSharpModule && Symbol.hasAttribute ent.Attributes then yield! getModuleAndItsAutoOpens true ent |] { OpenedModules = getModuleAndItsAutoOpens false modul } @@ -133,7 +132,7 @@ module UnusedOpens = // For the rest of symbols we pick only those which are the first part of a long ident, because it's they which are // contained in opened namespaces / modules. For example, we pick `IO` from long ident `IO.File.OpenWrite` because // it's `open System` which really brings it into scope. - let partialName = QuickParse.GetPartialLongNameEx (getSourceLineStr su.Range.StartLine, su.Range.EndColumn - 1) + let partialName = QuickParse.GetPartialLongNameEx (getSourceLineStr su.RangeAlternate.StartLine, su.RangeAlternate.EndColumn - 1) List.isEmpty partialName.QualifyingIdents) |> Array.ofSeq @@ -174,11 +173,11 @@ module UnusedOpens = openedGroup.OpenedModules |> Array.exists (fun openedEntity -> symbolUsesRangesByDeclaringEntity.BagExistsValueForKey(openedEntity.Entity, fun symbolUseRange -> rangeContainsRange openStatement.AppliedScope symbolUseRange && - Position.posGt symbolUseRange.Start openStatement.Range.End) || + Range.posGt symbolUseRange.Start openStatement.Range.End) || symbolUses2 |> Array.exists (fun symbolUse -> - rangeContainsRange openStatement.AppliedScope symbolUse.Range && - Position.posGt symbolUse.Range.Start openStatement.Range.End && + rangeContainsRange openStatement.AppliedScope symbolUse.RangeAlternate && + Range.posGt symbolUse.RangeAlternate.Start openStatement.Range.End && openedEntity.RevealedSymbolsContains symbolUse.Symbol))) // Return them as interim used entities @@ -220,7 +219,7 @@ module UnusedOpens = | :? FSharpMemberOrFunctionOrValue as f -> match f.DeclaringEntity with | Some entity when entity.IsNamespace || entity.IsFSharpModule -> - symbolUsesRangesByDeclaringEntity.BagAdd(entity, symbolUse.Range) + symbolUsesRangesByDeclaringEntity.BagAdd(entity, symbolUse.RangeAlternate) | _ -> () | _ -> () @@ -259,23 +258,23 @@ module SimplifyNames = if symbolUse.IsFromOpenStatement || symbolUse.IsFromDefinition then None else - let lineStr = getSourceLineStr symbolUse.Range.StartLine + let lineStr = getSourceLineStr symbolUse.RangeAlternate.StartLine // for `System.DateTime.Now` it returns ([|"System"; "DateTime"|], "Now") - let partialName = QuickParse.GetPartialLongNameEx(lineStr, symbolUse.Range.EndColumn - 1) - // `symbolUse.Range.Start` does not point to the start of plid, it points to start of `name`, + let partialName = QuickParse.GetPartialLongNameEx(lineStr, symbolUse.RangeAlternate.EndColumn - 1) + // `symbolUse.RangeAlternate.Start` does not point to the start of plid, it points to start of `name`, // so we have to calculate plid's start ourselves. - let plidStartCol = symbolUse.Range.EndColumn - partialName.PartialIdent.Length - (getPlidLength partialName.QualifyingIdents) + let plidStartCol = symbolUse.RangeAlternate.EndColumn - partialName.PartialIdent.Length - (getPlidLength partialName.QualifyingIdents) if partialName.PartialIdent = "" || List.isEmpty partialName.QualifyingIdents then None else Some (symbolUse, partialName.QualifyingIdents, plidStartCol, partialName.PartialIdent)) - |> Seq.groupBy (fun (symbolUse, _, plidStartCol, _) -> symbolUse.Range.StartLine, plidStartCol) - |> Seq.map (fun (_, xs) -> xs |> Seq.maxBy (fun (symbolUse, _, _, _) -> symbolUse.Range.EndColumn)) + |> Seq.groupBy (fun (symbolUse, _, plidStartCol, _) -> symbolUse.RangeAlternate.StartLine, plidStartCol) + |> Seq.map (fun (_, xs) -> xs |> Seq.maxBy (fun (symbolUse, _, _, _) -> symbolUse.RangeAlternate.EndColumn)) for symbolUse, plid, plidStartCol, name in symbolUses do let posAtStartOfName = - let r = symbolUse.Range - if r.StartLine = r.EndLine then Position.mkPos r.StartLine (r.EndColumn - name.Length) + let r = symbolUse.RangeAlternate + if r.StartLine = r.EndLine then Range.mkPos r.StartLine (r.EndColumn - name.Length) else r.Start let getNecessaryPlid (plid: string list) : string list = @@ -293,11 +292,11 @@ module SimplifyNames = match necessaryPlid with | necessaryPlid when necessaryPlid = plid -> () | necessaryPlid -> - let r = symbolUse.Range + let r = symbolUse.RangeAlternate let necessaryPlidStartCol = r.EndColumn - name.Length - (getPlidLength necessaryPlid) let unnecessaryRange = - Range.mkRange r.FileName (Position.mkPos r.StartLine plidStartCol) (Position.mkPos r.EndLine necessaryPlidStartCol) + Range.mkRange r.FileName (Range.mkPos r.StartLine plidStartCol) (Range.mkPos r.EndLine necessaryPlidStartCol) let relativeName = (String.concat "." plid) + "." + name result.Add({Range = unnecessaryRange; RelativeName = relativeName}) @@ -331,7 +330,7 @@ module UnusedDeclarations = HashSet(usages) symbolsUses - |> Seq.distinctBy (fun su -> su.Range) // Account for "hidden" uses, like a val in a member val definition. These aren't relevant + |> Seq.distinctBy (fun su -> su.RangeAlternate) // Account for "hidden" uses, like a val in a member val definition. These aren't relevant |> Seq.choose(fun (su: FSharpSymbolUse) -> if su.IsFromDefinition && su.Symbol.DeclarationLocation.IsSome && @@ -342,7 +341,7 @@ module UnusedDeclarations = Some (su, usages.Contains su.Symbol.DeclarationLocation.Value) else None) - |> Seq.groupBy (fun (defSu, _) -> defSu.Range) + |> Seq.groupBy (fun (defSu, _) -> defSu.RangeAlternate) |> Seq.filter (fun (_, defSus) -> defSus |> Seq.forall (fun (_, isUsed) -> not isUsed)) |> Seq.map (fun (m, _) -> m) diff --git a/src/fsharp/service/ServiceAnalysis.fsi b/src/fsharp/service/ServiceAnalysis.fsi index e1e4488007c..3fa2be9ea89 100644 --- a/src/fsharp/service/ServiceAnalysis.fsi +++ b/src/fsharp/service/ServiceAnalysis.fsi @@ -1,9 +1,8 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Text +open FSharp.Compiler.Range module public UnusedOpens = diff --git a/src/fsharp/service/ServiceAssemblyContent.fs b/src/fsharp/service/ServiceAssemblyContent.fs index 30c9fadf5b8..53a313baeb6 100644 --- a/src/fsharp/service/ServiceAssemblyContent.fs +++ b/src/fsharp/service/ServiceAssemblyContent.fs @@ -5,18 +5,98 @@ // type checking and intellisense-like environment-reporting. //-------------------------------------------------------------------------- -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler.SourceCodeServices open System open System.Collections.Generic -open Internal.Utilities.Library -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.IO -open FSharp.Compiler.Symbols + +open FSharp.Compiler +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.SyntaxTreeOps + +type ShortIdent = string + +type Idents = ShortIdent[] + +type MaybeUnresolvedIdent = { Ident: ShortIdent; Resolved: bool } + +type MaybeUnresolvedIdents = MaybeUnresolvedIdent[] type IsAutoOpen = bool +[] +module Extensions = + + type FSharpEntity with + member x.TryGetFullName() = + try x.TryFullName + with _ -> + try Some(String.Join(".", x.AccessPath, x.DisplayName)) + with _ -> None + + member x.TryGetFullDisplayName() = + let fullName = x.TryGetFullName() |> Option.map (fun fullName -> fullName.Split '.') + let res = + match fullName with + | Some fullName -> + match Option.attempt (fun _ -> x.DisplayName) with + | Some shortDisplayName when not (shortDisplayName.Contains ".") -> + Some (fullName |> Array.replace (fullName.Length - 1) shortDisplayName) + | _ -> Some fullName + | None -> None + |> Option.map (fun fullDisplayName -> String.Join (".", fullDisplayName)) + //debug "GetFullDisplayName: FullName = %A, Result = %A" fullName res + res + + member x.TryGetFullCompiledName() = + let fullName = x.TryGetFullName() |> Option.map (fun fullName -> fullName.Split '.') + let res = + match fullName with + | Some fullName -> + match Option.attempt (fun _ -> x.CompiledName) with + | Some shortCompiledName when not (shortCompiledName.Contains ".") -> + Some (fullName |> Array.replace (fullName.Length - 1) shortCompiledName) + | _ -> Some fullName + | None -> None + |> Option.map (fun fullDisplayName -> String.Join (".", fullDisplayName)) + //debug "GetFullCompiledName: FullName = %A, Result = %A" fullName res + res + + member x.PublicNestedEntities = + x.NestedEntities |> Seq.filter (fun entity -> entity.Accessibility.IsPublic) + + member x.TryGetMembersFunctionsAndValues = + try x.MembersFunctionsAndValues with _ -> [||] :> _ + + type FSharpMemberOrFunctionOrValue with + // FullType may raise exceptions (see https://github.com/fsharp/fsharp/issues/307). + member x.FullTypeSafe = Option.attempt (fun _ -> x.FullType) + + member x.TryGetFullDisplayName() = + let fullName = Option.attempt (fun _ -> x.FullName.Split '.') + match fullName with + | Some fullName -> + match Option.attempt (fun _ -> x.DisplayName) with + | Some shortDisplayName when not (shortDisplayName.Contains ".") -> + Some (fullName |> Array.replace (fullName.Length - 1) shortDisplayName) + | _ -> Some fullName + | None -> None + |> Option.map (fun fullDisplayName -> String.Join (".", fullDisplayName)) + + member x.TryGetFullCompiledOperatorNameIdents() : Idents option = + // For operator ++ displayName is ( ++ ) compiledName is op_PlusPlus + if PrettyNaming.IsOperatorName x.DisplayName && x.DisplayName <> x.CompiledName then + x.DeclaringEntity + |> Option.bind (fun e -> e.TryGetFullName()) + |> Option.map (fun enclosingEntityFullName -> + Array.append (enclosingEntityFullName.Split '.') [| x.CompiledName |]) + else None + + type FSharpAssemblySignature with + member x.TryGetEntities() = try x.Entities :> _ seq with _ -> Seq.empty + [] type LookupType = | Fuzzy @@ -25,11 +105,11 @@ type LookupType = [] type AssemblySymbol = { FullName: string - CleanedIdents: ShortIdents - Namespace: ShortIdents option - NearestRequireQualifiedAccessParent: ShortIdents option - TopRequireQualifiedAccessParent: ShortIdents option - AutoOpenParent: ShortIdents option + CleanedIdents: Idents + Namespace: Idents option + NearestRequireQualifiedAccessParent: Idents option + TopRequireQualifiedAccessParent: Idents option + AutoOpenParent: Idents option Symbol: FSharpSymbol Kind: LookupType -> EntityKind UnresolvedSymbol: UnresolvedSymbol } @@ -40,11 +120,11 @@ type AssemblyPath = string type AssemblyContentType = Public | Full type Parent = - { Namespace: ShortIdents option - ThisRequiresQualifiedAccess: (* isForMemberOrValue *) bool -> ShortIdents option - TopRequiresQualifiedAccess: (* isForMemberOrValue *) bool -> ShortIdents option - AutoOpen: ShortIdents option - WithModuleSuffix: ShortIdents option + { Namespace: Idents option + ThisRequiresQualifiedAccess: (* isForMemberOrValue *) bool -> Idents option + TopRequiresQualifiedAccess: (* isForMemberOrValue *) bool -> Idents option + AutoOpen: Idents option + WithModuleSuffix: Idents option IsModule: bool } static member Empty = @@ -55,7 +135,7 @@ type Parent = WithModuleSuffix = None IsModule = true } - static member RewriteParentIdents (parentIdents: ShortIdents option) (idents: ShortIdents) = + static member RewriteParentIdents (parentIdents: Idents option) (idents: Idents) = match parentIdents with | Some p when p.Length <= idents.Length -> for i in 0..p.Length - 1 do @@ -63,14 +143,14 @@ type Parent = | _ -> () idents - member x.FixParentModuleSuffix (idents: ShortIdents) = + member x.FixParentModuleSuffix (idents: Idents) = Parent.RewriteParentIdents x.WithModuleSuffix idents - member _.FormatEntityFullName (entity: FSharpEntity) = + member __.FormatEntityFullName (entity: FSharpEntity) = // remove number of arguments from generic types // e.g. System.Collections.Generic.Dictionary`2 -> System.Collections.Generic.Dictionary // and System.Data.Listeners`1.Func -> System.Data.Listeners.Func - let removeGenericParamsCount (idents: ShortIdents) = + let removeGenericParamsCount (idents: Idents) = idents |> Array.map (fun ident -> if ident.Length > 0 && Char.IsDigit ident.[ident.Length - 1] then @@ -80,7 +160,7 @@ type Parent = else ident else ident) - let removeModuleSuffix (idents: ShortIdents) = + let removeModuleSuffix (idents: Idents) = if entity.IsFSharpModule && idents.Length > 0 then let lastIdent = idents.[idents.Length - 1] if lastIdent <> entity.DisplayName then @@ -107,11 +187,11 @@ type IAssemblyContentCache = abstract TryGet: AssemblyPath -> AssemblyContentCacheEntry option abstract Set: AssemblyPath -> AssemblyContentCacheEntry -> unit -module AssemblyContent = +module AssemblyContentProvider = open System.IO - let UnresolvedSymbol (topRequireQualifiedAccessParent: ShortIdents option) (cleanedIdents: ShortIdents) (fullName: string) = - let getNamespace (idents: ShortIdents) = + let unresolvedSymbol (topRequireQualifiedAccessParent: Idents option) (cleanedIdents: Idents) (fullName: string) = + let getNamespace (idents: Idents) = if idents.Length > 1 then Some idents.[..idents.Length - 2] else None let ns = @@ -141,17 +221,17 @@ module AssemblyContent = Symbol = entity Kind = fun lookupType -> match entity, lookupType with - | FSharpSymbolPatterns.FSharpModule, _ -> + | Symbol.FSharpModule, _ -> EntityKind.Module - { IsAutoOpen = entity.HasAttribute() - HasModuleSuffix = FSharpSymbolPatterns.hasModuleSuffixAttribute entity } + { IsAutoOpen = Symbol.hasAttribute entity.Attributes + HasModuleSuffix = Symbol.hasModuleSuffixAttribute entity } | _, LookupType.Fuzzy -> EntityKind.Type | _, LookupType.Precise -> match entity with - | FSharpSymbolPatterns.Attribute -> EntityKind.Attribute + | Symbol.Attribute -> EntityKind.Attribute | _ -> EntityKind.Type - UnresolvedSymbol = UnresolvedSymbol topRequireQualifiedAccessParent cleanIdents fullName + UnresolvedSymbol = unresolvedSymbol topRequireQualifiedAccessParent cleanIdents fullName }) let traverseMemberFunctionAndValues ns (parent: Parent) (membersFunctionsAndValues: seq) = @@ -170,7 +250,7 @@ module AssemblyContent = AutoOpenParent = autoOpenParent Symbol = func Kind = fun _ -> EntityKind.FunctionOrValue func.IsActivePattern - UnresolvedSymbol = UnresolvedSymbol topRequireQualifiedAccessParent cleanedIdents fullName } + UnresolvedSymbol = unresolvedSymbol topRequireQualifiedAccessParent cleanedIdents fullName } [ yield! func.TryGetFullDisplayName() |> Option.map (fun fullDisplayName -> processIdents func.FullName (fullDisplayName.Split '.')) @@ -205,7 +285,7 @@ module AssemblyContent = | None -> () let rqa = parent.FormatEntityFullName entity |> Option.map snd - let rqaForType = if entity.IsFSharp && entity.HasAttribute() then rqa else None + let rqaForType = if entity.IsFSharp && Symbol.hasAttribute entity.Attributes then rqa else None let thisRequiresQualifierAccess (isForMethodOrValue: bool) = if isForMethodOrValue then rqa else rqaForType let currentParent = @@ -213,7 +293,7 @@ module AssemblyContent = TopRequiresQualifiedAccess = fun forMV -> (parent.TopRequiresQualifiedAccess false) |> Option.orElse (thisRequiresQualifierAccess forMV) AutoOpen = - let isAutoOpen = entity.IsFSharpModule && entity.HasAttribute() + let isAutoOpen = entity.IsFSharpModule && Symbol.hasAttribute entity.Attributes match isAutoOpen, parent.AutoOpen with // if parent is also AutoOpen, then keep the parent | true, Some parent -> Some parent @@ -223,14 +303,14 @@ module AssemblyContent = | false, _ -> None WithModuleSuffix = - if entity.IsFSharpModule && (FSharpSymbolPatterns.hasModuleSuffixAttribute entity || entity.CompiledName <> entity.DisplayName) then + if entity.IsFSharpModule && (Symbol.hasModuleSuffixAttribute entity || entity.CompiledName <> entity.DisplayName) then currentEntity |> Option.map (fun e -> e.CleanedIdents) else parent.WithModuleSuffix Namespace = ns IsModule = entity.IsFSharpModule } - match entity.TryGetMembersFunctionsAndValues() with + match entity.TryGetMembersFunctionsAndValues with | xs when xs.Count > 0 -> yield! traverseMemberFunctionAndValues ns currentParent xs | _ -> () @@ -240,7 +320,7 @@ module AssemblyContent = | _ -> () } - let GetAssemblySignatureContent contentType (signature: FSharpAssemblySignature) = + let getAssemblySignatureContent contentType (signature: FSharpAssemblySignature) = // We ignore all diagnostics during this operation // @@ -257,9 +337,9 @@ module AssemblyContent = |> Seq.toList let getAssemblySignaturesContent contentType (assemblies: FSharpAssembly list) = - assemblies |> List.collect (fun asm -> GetAssemblySignatureContent contentType asm.Contents) + assemblies |> List.collect (fun asm -> getAssemblySignatureContent contentType asm.Contents) - let GetAssemblyContent (withCache: (IAssemblyContentCache -> _) -> _) contentType (fileName: string option) (assemblies: FSharpAssembly list) = + let getAssemblyContent (withCache: (IAssemblyContentCache -> _) -> _) contentType (fileName: string option) (assemblies: FSharpAssembly list) = // We ignore all diagnostics during this operation // @@ -288,19 +368,678 @@ module AssemblyContent = | assemblies, None -> getAssemblySignaturesContent contentType assemblies |> List.filter (fun entity -> - match contentType with - | Full -> true - | Public -> entity.Symbol.Accessibility.IsPublic) + match contentType, FSharpSymbol.GetAccessibility(entity.Symbol) with + | Full, _ -> true + | Public, access -> + match access with + | None -> true + | Some x when x.IsPublic -> true + | _ -> false) type EntityCache() = let dic = Dictionary() interface IAssemblyContentCache with - member _.TryGet assembly = + member __.TryGet assembly = match dic.TryGetValue assembly with | true, entry -> Some entry | _ -> None - member _.Set assembly entry = dic.[assembly] <- entry + member __.Set assembly entry = dic.[assembly] <- entry - member _.Clear() = dic.Clear() + member __.Clear() = dic.Clear() member x.Locking f = lock dic <| fun _ -> f (x :> IAssemblyContentCache) +type StringLongIdent = string + +type Entity = + { FullRelativeName: StringLongIdent + Qualifier: StringLongIdent + Namespace: StringLongIdent option + Name: StringLongIdent + LastIdent: string } + override x.ToString() = sprintf "%A" x + +[] +module Entity = + let getRelativeNamespace (targetNs: Idents) (sourceNs: Idents) = + let rec loop index = + if index > targetNs.Length - 1 then sourceNs.[index..] + // target namespace is not a full parent of source namespace, keep the source ns as is + elif index > sourceNs.Length - 1 then sourceNs + elif targetNs.[index] = sourceNs.[index] then loop (index + 1) + else sourceNs.[index..] + if sourceNs.Length = 0 || targetNs.Length = 0 then sourceNs + else loop 0 + + let cutAutoOpenModules (autoOpenParent: Idents option) (candidateNs: Idents) = + let nsCount = + match autoOpenParent with + | Some parent when parent.Length > 0 -> + min (parent.Length - 1) candidateNs.Length + | _ -> candidateNs.Length + candidateNs.[0..nsCount - 1] + + let tryCreate (targetNamespace: Idents option, targetScope: Idents, partiallyQualifiedName: MaybeUnresolvedIdents, + requiresQualifiedAccessParent: Idents option, autoOpenParent: Idents option, candidateNamespace: Idents option, candidate: Idents) = + match candidate with + | [||] -> [||] + | _ -> + partiallyQualifiedName + |> Array.heads + // long ident must contain an unresolved part, otherwise we show false positive suggestions like + // "open System" for `let _ = System.DateTime.Naaaw`. Here only "Naaw" is unresolved. + |> Array.filter (fun x -> x |> Array.exists (fun x -> not x.Resolved)) + |> Array.choose (fun parts -> + let parts = parts |> Array.map (fun x -> x.Ident) + if not (candidate |> Array.endsWith parts) then None + else + let identCount = parts.Length + let fullOpenableNs, restIdents = + let openableNsCount = + match requiresQualifiedAccessParent with + | Some parent -> min parent.Length candidate.Length + | None -> candidate.Length + candidate.[0..openableNsCount - 2], candidate.[openableNsCount - 1..] + + let openableNs = cutAutoOpenModules autoOpenParent fullOpenableNs + + let getRelativeNs ns = + match targetNamespace, candidateNamespace with + | Some targetNs, Some candidateNs when candidateNs = targetNs -> + getRelativeNamespace targetScope ns + | None, _ -> getRelativeNamespace targetScope ns + | _ -> ns + + let relativeNs = getRelativeNs openableNs + + match relativeNs, restIdents with + | [||], [||] -> None + | [||], [|_|] -> None + | _ -> + let fullRelativeName = Array.append (getRelativeNs fullOpenableNs) restIdents + let ns = + match relativeNs with + | [||] -> None + | _ when identCount > 1 && relativeNs.Length >= identCount -> + Some (relativeNs.[0..relativeNs.Length - identCount] |> String.concat ".") + | _ -> Some (relativeNs |> String.concat ".") + let qualifier = + if fullRelativeName.Length > 1 && fullRelativeName.Length >= identCount then + fullRelativeName.[0..fullRelativeName.Length - identCount] + else fullRelativeName + Some + { FullRelativeName = String.concat "." fullRelativeName //.[0..fullRelativeName.Length - identCount - 1] + Qualifier = String.concat "." qualifier + Namespace = ns + Name = match restIdents with [|_|] -> "" | _ -> String.concat "." restIdents + LastIdent = Array.tryLast restIdents |> Option.defaultValue "" }) + +type ScopeKind = + | Namespace + | TopModule + | NestedModule + | OpenDeclaration + | HashDirective + override x.ToString() = sprintf "%A" x + +type InsertContext = + { ScopeKind: ScopeKind + Pos: pos } + +type Module = + { Idents: Idents + Range: range } + +type OpenStatementInsertionPoint = + | TopLevel + | Nearest + +module ParsedInput = + + /// An recursive pattern that collect all sequential expressions to avoid StackOverflowException + let rec (|Sequentials|_|) = function + | SynExpr.Sequential (_, _, e, Sequentials es, _) -> + Some(e :: es) + | SynExpr.Sequential (_, _, e1, e2, _) -> + Some [e1; e2] + | _ -> None + + let (|ConstructorPats|) = function + | SynArgPats.Pats ps -> ps + | SynArgPats.NamePatPairs(xs, _) -> List.map snd xs + + /// Returns all `Ident`s and `LongIdent`s found in an untyped AST. + let getLongIdents (input: ParsedInput option) : IDictionary = + let identsByEndPos = Dictionary() + + let addLongIdent (longIdent: LongIdent) = + for ident in longIdent do + identsByEndPos.[ident.idRange.End] <- longIdent + + let addLongIdentWithDots (LongIdentWithDots (longIdent, lids) as value) = + match longIdent with + | [] -> () + | [_] as idents -> identsByEndPos.[value.Range.End] <- idents + | idents -> + for dotRange in lids do + identsByEndPos.[Range.mkPos dotRange.EndLine (dotRange.EndColumn - 1)] <- idents + identsByEndPos.[value.Range.End] <- idents + + let addIdent (ident: Ident) = + identsByEndPos.[ident.idRange.End] <- [ident] + + let rec walkImplFileInput (ParsedImplFileInput (modules = moduleOrNamespaceList)) = + List.iter walkSynModuleOrNamespace moduleOrNamespaceList + + and walkSynModuleOrNamespace (SynModuleOrNamespace(_, _, _, decls, _, Attributes attrs, _, _)) = + List.iter walkAttribute attrs + List.iter walkSynModuleDecl decls + + and walkAttribute (attr: SynAttribute) = + addLongIdentWithDots attr.TypeName + walkExpr attr.ArgExpr + + and walkTyparDecl (SynTyparDecl.TyparDecl (Attributes attrs, typar)) = + List.iter walkAttribute attrs + walkTypar typar + + and walkTypeConstraint = function + | SynTypeConstraint.WhereTyparIsValueType (t, _) + | SynTypeConstraint.WhereTyparIsReferenceType (t, _) + | SynTypeConstraint.WhereTyparIsUnmanaged (t, _) + | SynTypeConstraint.WhereTyparSupportsNull (t, _) + | SynTypeConstraint.WhereTyparIsComparable (t, _) + | SynTypeConstraint.WhereTyparIsEquatable (t, _) -> walkTypar t + | SynTypeConstraint.WhereTyparDefaultsToType (t, ty, _) + | SynTypeConstraint.WhereTyparSubtypeOfType (t, ty, _) -> walkTypar t; walkType ty + | SynTypeConstraint.WhereTyparIsEnum (t, ts, _) + | SynTypeConstraint.WhereTyparIsDelegate (t, ts, _) -> walkTypar t; List.iter walkType ts + | SynTypeConstraint.WhereTyparSupportsMember (ts, sign, _) -> List.iter walkType ts; walkMemberSig sign + + and walkPat = function + | SynPat.Tuple (_,pats, _) + | SynPat.ArrayOrList (_, pats, _) + | SynPat.Ands (pats, _) -> List.iter walkPat pats + | SynPat.Named (pat, ident, _, _, _) -> + walkPat pat + addIdent ident + | SynPat.Typed (pat, t, _) -> + walkPat pat + walkType t + | SynPat.Attrib (pat, Attributes attrs, _) -> + walkPat pat + List.iter walkAttribute attrs + | SynPat.Or (pat1, pat2, _) -> List.iter walkPat [pat1; pat2] + | SynPat.LongIdent (ident, _, typars, ConstructorPats pats, _, _) -> + addLongIdentWithDots ident + typars + |> Option.iter (fun (SynValTyparDecls (typars, _, constraints)) -> + List.iter walkTyparDecl typars + List.iter walkTypeConstraint constraints) + List.iter walkPat pats + | SynPat.Paren (pat, _) -> walkPat pat + | SynPat.IsInst (t, _) -> walkType t + | SynPat.QuoteExpr(e, _) -> walkExpr e + | _ -> () + + and walkTypar (Typar (_, _, _)) = () + + and walkBinding (SynBinding.Binding (_, _, _, _, Attributes attrs, _, _, pat, returnInfo, e, _, _)) = + List.iter walkAttribute attrs + walkPat pat + walkExpr e + returnInfo |> Option.iter (fun (SynBindingReturnInfo (t, _, _)) -> walkType t) + + and walkInterfaceImpl (InterfaceImpl(_, bindings, _)) = List.iter walkBinding bindings + + and walkIndexerArg = function + | SynIndexerArg.One (e, _, _) -> walkExpr e + | SynIndexerArg.Two (e1, _, e2, _, _, _) -> List.iter walkExpr [e1; e2] + + and walkType = function + | SynType.Array (_, t, _) + | SynType.HashConstraint (t, _) + | SynType.MeasurePower (t, _, _) + | SynType.Paren (t, _) -> walkType t + | SynType.Fun (t1, t2, _) + | SynType.MeasureDivide (t1, t2, _) -> walkType t1; walkType t2 + | SynType.LongIdent ident -> addLongIdentWithDots ident + | SynType.App (ty, _, types, _, _, _, _) -> walkType ty; List.iter walkType types + | SynType.LongIdentApp (_, _, _, types, _, _, _) -> List.iter walkType types + | SynType.Tuple (_, ts, _) -> ts |> List.iter (fun (_, t) -> walkType t) + | SynType.WithGlobalConstraints (t, typeConstraints, _) -> + walkType t; List.iter walkTypeConstraint typeConstraints + | _ -> () + + and walkClause (Clause (pat, e1, e2, _, _)) = + walkPat pat + walkExpr e2 + e1 |> Option.iter walkExpr + + and walkSimplePats = function + | SynSimplePats.SimplePats (pats, _) -> List.iter walkSimplePat pats + | SynSimplePats.Typed (pats, ty, _) -> + walkSimplePats pats + walkType ty + + and walkExpr = function + | SynExpr.Paren (e, _, _, _) + | SynExpr.Quote (_, _, e, _, _) + | SynExpr.Typed (e, _, _) + | SynExpr.InferredUpcast (e, _) + | SynExpr.InferredDowncast (e, _) + | SynExpr.AddressOf (_, e, _, _) + | SynExpr.DoBang (e, _) + | SynExpr.YieldOrReturn (_, e, _) + | SynExpr.ArrayOrListOfSeqExpr (_, e, _) + | SynExpr.CompExpr (_, _, e, _) + | SynExpr.Do (e, _) + | SynExpr.Assert (e, _) + | SynExpr.Lazy (e, _) + | SynExpr.YieldOrReturnFrom (_, e, _) -> walkExpr e + | SynExpr.Lambda (_, _, pats, e, _, _) -> + walkSimplePats pats + walkExpr e + | SynExpr.New (_, t, e, _) + | SynExpr.TypeTest (e, t, _) + | SynExpr.Upcast (e, t, _) + | SynExpr.Downcast (e, t, _) -> walkExpr e; walkType t + | SynExpr.Tuple (_, es, _, _) + | Sequentials es + | SynExpr.ArrayOrList (_, es, _) -> List.iter walkExpr es + | SynExpr.App (_, _, e1, e2, _) + | SynExpr.TryFinally (e1, e2, _, _, _) + | SynExpr.While (_, e1, e2, _) -> List.iter walkExpr [e1; e2] + | SynExpr.Record (_, _, fields, _) -> + fields |> List.iter (fun ((ident, _), e, _) -> + addLongIdentWithDots ident + e |> Option.iter walkExpr) + | SynExpr.Ident ident -> addIdent ident + | SynExpr.ObjExpr (ty, argOpt, bindings, ifaces, _, _) -> + argOpt |> Option.iter (fun (e, ident) -> + walkExpr e + ident |> Option.iter addIdent) + walkType ty + List.iter walkBinding bindings + List.iter walkInterfaceImpl ifaces + | SynExpr.LongIdent (_, ident, _, _) -> addLongIdentWithDots ident + | SynExpr.For (_, ident, e1, _, e2, e3, _) -> + addIdent ident + List.iter walkExpr [e1; e2; e3] + | SynExpr.ForEach (_, _, _, pat, e1, e2, _) -> + walkPat pat + List.iter walkExpr [e1; e2] + | SynExpr.MatchLambda (_, _, synMatchClauseList, _, _) -> + List.iter walkClause synMatchClauseList + | SynExpr.Match (_, e, synMatchClauseList, _) -> + walkExpr e + List.iter walkClause synMatchClauseList + | SynExpr.TypeApp (e, _, tys, _, _, _, _) -> + List.iter walkType tys; walkExpr e + | SynExpr.LetOrUse (_, _, bindings, e, _) -> + List.iter walkBinding bindings; walkExpr e + | SynExpr.TryWith (e, _, clauses, _, _, _, _) -> + List.iter walkClause clauses; walkExpr e + | SynExpr.IfThenElse (e1, e2, e3, _, _, _, _) -> + List.iter walkExpr [e1; e2] + e3 |> Option.iter walkExpr + | SynExpr.LongIdentSet (ident, e, _) + | SynExpr.DotGet (e, _, ident, _) -> + addLongIdentWithDots ident + walkExpr e + | SynExpr.DotSet (e1, idents, e2, _) -> + walkExpr e1 + addLongIdentWithDots idents + walkExpr e2 + | SynExpr.Set (e1, e2, _) -> + walkExpr e1 + walkExpr e2 + | SynExpr.DotIndexedGet (e, args, _, _) -> + walkExpr e + List.iter walkIndexerArg args + | SynExpr.DotIndexedSet (e1, args, e2, _, _, _) -> + walkExpr e1 + List.iter walkIndexerArg args + walkExpr e2 + | SynExpr.NamedIndexedPropertySet (ident, e1, e2, _) -> + addLongIdentWithDots ident + List.iter walkExpr [e1; e2] + | SynExpr.DotNamedIndexedPropertySet (e1, ident, e2, e3, _) -> + addLongIdentWithDots ident + List.iter walkExpr [e1; e2; e3] + | SynExpr.JoinIn (e1, _, e2, _) -> List.iter walkExpr [e1; e2] + | SynExpr.LetOrUseBang (_, _, _, pat, e1, es, e2, _) -> + walkPat pat + walkExpr e1 + for (_,_,_,patAndBang,eAndBang,_) in es do + walkPat patAndBang + walkExpr eAndBang + walkExpr e2 + | SynExpr.TraitCall (ts, sign, e, _) -> + List.iter walkTypar ts + walkMemberSig sign + walkExpr e + | SynExpr.Const (SynConst.Measure(_, m), _) -> walkMeasure m + | _ -> () + + and walkMeasure = function + | SynMeasure.Product (m1, m2, _) + | SynMeasure.Divide (m1, m2, _) -> walkMeasure m1; walkMeasure m2 + | SynMeasure.Named (longIdent, _) -> addLongIdent longIdent + | SynMeasure.Seq (ms, _) -> List.iter walkMeasure ms + | SynMeasure.Power (m, _, _) -> walkMeasure m + | SynMeasure.Var (ty, _) -> walkTypar ty + | SynMeasure.One + | SynMeasure.Anon _ -> () + + and walkSimplePat = function + | SynSimplePat.Attrib (pat, Attributes attrs, _) -> + walkSimplePat pat + List.iter walkAttribute attrs + | SynSimplePat.Typed(pat, t, _) -> + walkSimplePat pat + walkType t + | _ -> () + + and walkField (SynField.Field(Attributes attrs, _, _, t, _, _, _, _)) = + List.iter walkAttribute attrs + walkType t + + and walkValSig (SynValSig.ValSpfn(Attributes attrs, _, _, t, SynValInfo(argInfos, argInfo), _, _, _, _, _, _)) = + List.iter walkAttribute attrs + walkType t + argInfo :: (argInfos |> List.concat) + |> List.collect (fun (SynArgInfo(Attributes attrs, _, _)) -> attrs) + |> List.iter walkAttribute + + and walkMemberSig = function + | SynMemberSig.Inherit (t, _) + | SynMemberSig.Interface(t, _) -> walkType t + | SynMemberSig.Member(vs, _, _) -> walkValSig vs + | SynMemberSig.ValField(f, _) -> walkField f + | SynMemberSig.NestedType(SynTypeDefnSig.TypeDefnSig (info, repr, memberSigs, _), _) -> + let isTypeExtensionOrAlias = + match repr with + | SynTypeDefnSigRepr.Simple(SynTypeDefnSimpleRepr.TypeAbbrev _, _) + | SynTypeDefnSigRepr.ObjectModel(SynTypeDefnKind.TyconAbbrev, _, _) + | SynTypeDefnSigRepr.ObjectModel(SynTypeDefnKind.TyconAugmentation, _, _) -> true + | _ -> false + walkComponentInfo isTypeExtensionOrAlias info + walkTypeDefnSigRepr repr + List.iter walkMemberSig memberSigs + + and walkMember memb = + match memb with + | SynMemberDefn.AbstractSlot (valSig, _, _) -> walkValSig valSig + | SynMemberDefn.Member (binding, _) -> walkBinding binding + | SynMemberDefn.ImplicitCtor (_, Attributes attrs, SynSimplePats.SimplePats(simplePats, _), _, _, _) -> + List.iter walkAttribute attrs + List.iter walkSimplePat simplePats + | SynMemberDefn.ImplicitInherit (t, e, _, _) -> walkType t; walkExpr e + | SynMemberDefn.LetBindings (bindings, _, _, _) -> List.iter walkBinding bindings + | SynMemberDefn.Interface (t, members, _) -> + walkType t + members |> Option.iter (List.iter walkMember) + | SynMemberDefn.Inherit (t, _, _) -> walkType t + | SynMemberDefn.ValField (field, _) -> walkField field + | SynMemberDefn.NestedType (tdef, _, _) -> walkTypeDefn tdef + | SynMemberDefn.AutoProperty (Attributes attrs, _, _, t, _, _, _, _, e, _, _) -> + List.iter walkAttribute attrs + Option.iter walkType t + walkExpr e + | _ -> () + + and walkEnumCase (EnumCase(Attributes attrs, _, _, _, _)) = List.iter walkAttribute attrs + + and walkUnionCaseType = function + | SynUnionCaseType.UnionCaseFields fields -> List.iter walkField fields + | SynUnionCaseType.UnionCaseFullType (t, _) -> walkType t + + and walkUnionCase (SynUnionCase.UnionCase (Attributes attrs, _, t, _, _, _)) = + List.iter walkAttribute attrs + walkUnionCaseType t + + and walkTypeDefnSimple = function + | SynTypeDefnSimpleRepr.Enum (cases, _) -> List.iter walkEnumCase cases + | SynTypeDefnSimpleRepr.Union (_, cases, _) -> List.iter walkUnionCase cases + | SynTypeDefnSimpleRepr.Record (_, fields, _) -> List.iter walkField fields + | SynTypeDefnSimpleRepr.TypeAbbrev (_, t, _) -> walkType t + | _ -> () + + and walkComponentInfo isTypeExtensionOrAlias (ComponentInfo(Attributes attrs, typars, constraints, longIdent, _, _, _, _)) = + List.iter walkAttribute attrs + List.iter walkTyparDecl typars + List.iter walkTypeConstraint constraints + if isTypeExtensionOrAlias then + addLongIdent longIdent + + and walkTypeDefnRepr = function + | SynTypeDefnRepr.ObjectModel (_, defns, _) -> List.iter walkMember defns + | SynTypeDefnRepr.Simple(defn, _) -> walkTypeDefnSimple defn + | SynTypeDefnRepr.Exception _ -> () + + and walkTypeDefnSigRepr = function + | SynTypeDefnSigRepr.ObjectModel (_, defns, _) -> List.iter walkMemberSig defns + | SynTypeDefnSigRepr.Simple(defn, _) -> walkTypeDefnSimple defn + | SynTypeDefnSigRepr.Exception _ -> () + + and walkTypeDefn (TypeDefn (info, repr, members, _)) = + let isTypeExtensionOrAlias = + match repr with + | SynTypeDefnRepr.ObjectModel (SynTypeDefnKind.TyconAugmentation, _, _) + | SynTypeDefnRepr.ObjectModel (SynTypeDefnKind.TyconAbbrev, _, _) + | SynTypeDefnRepr.Simple (SynTypeDefnSimpleRepr.TypeAbbrev _, _) -> true + | _ -> false + walkComponentInfo isTypeExtensionOrAlias info + walkTypeDefnRepr repr + List.iter walkMember members + + and walkSynModuleDecl (decl: SynModuleDecl) = + match decl with + | SynModuleDecl.NamespaceFragment fragment -> walkSynModuleOrNamespace fragment + | SynModuleDecl.NestedModule (info, _, modules, _, _) -> + walkComponentInfo false info + List.iter walkSynModuleDecl modules + | SynModuleDecl.Let (_, bindings, _) -> List.iter walkBinding bindings + | SynModuleDecl.DoExpr (_, expr, _) -> walkExpr expr + | SynModuleDecl.Types (types, _) -> List.iter walkTypeDefn types + | SynModuleDecl.Attributes (Attributes attrs, _) -> List.iter walkAttribute attrs + | _ -> () + + match input with + | Some (ParsedInput.ImplFile input) -> + walkImplFileInput input + | _ -> () + //debug "%A" idents + upcast identsByEndPos + + let getLongIdentAt ast pos = + let idents = getLongIdents (Some ast) + match idents.TryGetValue pos with + | true, idents -> Some idents + | _ -> None + + type Scope = + { Idents: Idents + Kind: ScopeKind } + + let tryFindNearestPointAndModules (currentLine: int) (ast: ParsedInput) (insertionPoint: OpenStatementInsertionPoint) = + // We ignore all diagnostics during this operation + // + // Based on an initial review, no diagnostics should be generated. However the code should be checked more closely. + use _ignoreAllDiagnostics = new ErrorScope() + + let mutable result = None + let mutable ns = None + let modules = ResizeArray() + + let inline longIdentToIdents ident = ident |> Seq.map string |> Seq.toArray + + let addModule (longIdent: LongIdent, range: range) = + modules.Add + { Idents = longIdentToIdents longIdent + Range = range } + + let doRange kind (scope: LongIdent) line col = + if line <= currentLine then + match result, insertionPoint with + | None, _ -> + result <- Some ({ Idents = longIdentToIdents scope; Kind = kind }, mkPos line col, false) + | Some (_, _, true), _ -> () + | Some (oldScope, oldPos, false), OpenStatementInsertionPoint.TopLevel when kind <> OpenDeclaration -> + result <- Some (oldScope, oldPos, true) + | Some (oldScope, oldPos, _), _ -> + match kind, oldScope.Kind with + | (Namespace | NestedModule | TopModule), OpenDeclaration + | _ when oldPos.Line <= line -> + result <- + Some ({ Idents = + match scope with + | [] -> oldScope.Idents + | _ -> longIdentToIdents scope + Kind = kind }, + mkPos line col, + false) + | _ -> () + + let getMinColumn decls = + match decls with + | [] -> None + | firstDecl :: _ -> + match firstDecl with + | SynModuleDecl.NestedModule (_, _, _, _, r) + | SynModuleDecl.Let (_, _, r) + | SynModuleDecl.DoExpr (_, _, r) + | SynModuleDecl.Types (_, r) + | SynModuleDecl.Exception (_, r) + | SynModuleDecl.Open (_, r) + | SynModuleDecl.HashDirective (_, r) -> Some r + | _ -> None + |> Option.map (fun r -> r.StartColumn) + + + let rec walkImplFileInput (ParsedImplFileInput (modules = moduleOrNamespaceList)) = + List.iter (walkSynModuleOrNamespace []) moduleOrNamespaceList + + and walkSynModuleOrNamespace (parent: LongIdent) (SynModuleOrNamespace(ident, _, kind, decls, _, _, _, range)) = + if range.EndLine >= currentLine then + let isModule = kind.IsModule + match isModule, parent, ident with + | false, _, _ -> ns <- Some (longIdentToIdents ident) + // top level module with "inlined" namespace like Ns1.Ns2.TopModule + | true, [], _f :: _s :: _ -> + let ident = longIdentToIdents ident + ns <- Some (ident.[0..ident.Length - 2]) + | _ -> () + + let fullIdent = parent @ ident + + let startLine = + if isModule then range.StartLine + else range.StartLine - 1 + + let scopeKind = + match isModule, parent with + | true, [] -> TopModule + | true, _ -> NestedModule + | _ -> Namespace + + doRange scopeKind fullIdent startLine range.StartColumn + addModule (fullIdent, range) + List.iter (walkSynModuleDecl fullIdent) decls + + and walkSynModuleDecl (parent: LongIdent) (decl: SynModuleDecl) = + match decl with + | SynModuleDecl.NamespaceFragment fragment -> walkSynModuleOrNamespace parent fragment + | SynModuleDecl.NestedModule(ComponentInfo(_, _, _, ident, _, _, _, _), _, decls, _, range) -> + let fullIdent = parent @ ident + addModule (fullIdent, range) + if range.EndLine >= currentLine then + let moduleBodyIndentation = getMinColumn decls |> Option.defaultValue (range.StartColumn + 4) + doRange NestedModule fullIdent range.StartLine moduleBodyIndentation + List.iter (walkSynModuleDecl fullIdent) decls + | SynModuleDecl.Open (_, range) -> doRange OpenDeclaration [] range.EndLine (range.StartColumn - 5) + | SynModuleDecl.HashDirective (_, range) -> doRange HashDirective [] range.EndLine range.StartColumn + | _ -> () + + match ast with + | ParsedInput.SigFile _ -> () + | ParsedInput.ImplFile input -> walkImplFileInput input + + let res = + result + |> Option.map (fun (scope, pos, _) -> + let ns = ns |> Option.map longIdentToIdents + scope, ns, mkPos (pos.Line + 1) pos.Column) + + let modules = + modules + |> Seq.filter (fun x -> x.Range.EndLine < currentLine) + |> Seq.sortBy (fun x -> -x.Idents.Length) + |> Seq.toList + + res, modules + + let findBestPositionToInsertOpenDeclaration (modules: Module list) scope pos (entity: Idents) = + match modules |> List.filter (fun x -> entity |> Array.startsWith x.Idents) with + | [] -> { ScopeKind = scope.Kind; Pos = pos } + | m :: _ -> + //printfn "All modules: %A, Win module: %A" modules m + let scopeKind = + match scope.Kind with + | TopModule -> NestedModule + | x -> x + { ScopeKind = scopeKind + Pos = mkPos (Line.fromZ m.Range.EndLine) m.Range.StartColumn } + + let tryFindInsertionContext (currentLine: int) (ast: ParsedInput) (partiallyQualifiedName: MaybeUnresolvedIdents) (insertionPoint: OpenStatementInsertionPoint) = + let res, modules = tryFindNearestPointAndModules currentLine ast insertionPoint + // CLEANUP: does this really need to be a partial application with pre-computation? Can this be made more explicit? + fun (requiresQualifiedAccessParent: Idents option, autoOpenParent: Idents option, entityNamespace: Idents option, entity: Idents) -> + + // We ignore all diagnostics during this operation + // + // Based on an initial review, no diagnostics should be generated. However the code should be checked more closely. + use _ignoreAllDiagnostics = new ErrorScope() + match res with + | None -> [||] + | Some (scope, ns, pos) -> + Entity.tryCreate(ns, scope.Idents, partiallyQualifiedName, requiresQualifiedAccessParent, autoOpenParent, entityNamespace, entity) + |> Array.map (fun e -> e, findBestPositionToInsertOpenDeclaration modules scope pos entity) + + /// Corrects insertion line number based on kind of scope and text surrounding the insertion point. + let adjustInsertionPoint (getLineStr: int -> string) ctx = + let line = + match ctx.ScopeKind with + | ScopeKind.TopModule -> + if ctx.Pos.Line > 1 then + // it's an implicit module without any open declarations + let line = getLineStr (ctx.Pos.Line - 2) + let isImplicitTopLevelModule = + not (line.StartsWithOrdinal("module") && not (line.EndsWithOrdinal("="))) + if isImplicitTopLevelModule then 1 else ctx.Pos.Line + else 1 + | ScopeKind.Namespace -> + // for namespaces the start line is start line of the first nested entity + if ctx.Pos.Line > 1 then + [0..ctx.Pos.Line - 1] + |> List.mapi (fun i line -> i, getLineStr line) + |> List.tryPick (fun (i, lineStr) -> + if lineStr.StartsWithOrdinal("namespace") then Some i + else None) + |> function + // move to the next line below "namespace" and convert it to F# 1-based line number + | Some line -> line + 2 + | None -> ctx.Pos.Line + else 1 + | _ -> ctx.Pos.Line + + mkPos line ctx.Pos.Column + + let findNearestPointToInsertOpenDeclaration (currentLine: int) (ast: ParsedInput) (entity: Idents) (insertionPoint: OpenStatementInsertionPoint) = + match tryFindNearestPointAndModules currentLine ast insertionPoint with + | Some (scope, _, point), modules -> + findBestPositionToInsertOpenDeclaration modules scope point entity + | _ -> + // we failed to find insertion point because ast is empty for some reason, return top left point in this case + { ScopeKind = ScopeKind.TopModule + Pos = mkPos 1 0 } diff --git a/src/fsharp/service/ServiceAssemblyContent.fsi b/src/fsharp/service/ServiceAssemblyContent.fsi index fef61a669e6..b0cebf4c1ee 100644 --- a/src/fsharp/service/ServiceAssemblyContent.fsi +++ b/src/fsharp/service/ServiceAssemblyContent.fsi @@ -1,19 +1,34 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler.SourceCodeServices + open System -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Symbols +open System.Collections.Generic + +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree /// Assembly content type. -[] type public AssemblyContentType = /// Public assembly content only. | Public /// All assembly content. | Full +/// Short identifier, i.e. an identifier that contains no dots. +type public ShortIdent = string + +/// An array of `ShortIdent`. +type public Idents = ShortIdent[] + +/// `ShortIdent` with a flag indicating if it's resolved in some scope. +type public MaybeUnresolvedIdent = + { Ident: ShortIdent; Resolved: bool } + +/// Array of `MaybeUnresolvedIdent`. +type public MaybeUnresolvedIdents = MaybeUnresolvedIdent[] + /// Entity lookup type. [] type public LookupType = @@ -33,19 +48,19 @@ type public AssemblySymbol = /// Entity name parts with removed module suffixes (Ns.M1Module.M2Module.M3.entity -> Ns.M1.M2.M3.entity) /// and replaced compiled names with display names (FSharpEntity.DisplayName, FSharpValueOrFunction.DisplayName). /// Note: *all* parts are cleaned, not the last one. - CleanedIdents: ShortIdents + CleanedIdents: Idents /// `FSharpEntity.Namespace`. - Namespace: ShortIdents option + Namespace: Idents option /// The most narrative parent module that has `RequireQualifiedAccess` attribute. - NearestRequireQualifiedAccessParent: ShortIdents option + NearestRequireQualifiedAccessParent: Idents option /// Parent module that has the largest scope and has `RequireQualifiedAccess` attribute. - TopRequireQualifiedAccessParent: ShortIdents option + TopRequireQualifiedAccessParent: Idents option /// Parent module that has `AutoOpen` attribute. - AutoOpenParent: ShortIdents option + AutoOpenParent: Idents option Symbol: FSharpSymbol @@ -89,17 +104,112 @@ type public EntityCache = /// Performs an operation on the cache in thread safe manner. member Locking : (IAssemblyContentCache -> 'T) -> 'T +/// Long identifier (i.e. it may contain dots). +type public StringLongIdent = string + +/// Helper data structure representing a symbol, suitable for implementing unresolved identifiers resolution code fixes. +type public Entity = + { + /// Full name, relative to the current scope. + FullRelativeName: StringLongIdent + + /// Ident parts needed to append to the current ident to make it resolvable in current scope. + Qualifier: StringLongIdent + + /// Namespace that is needed to open to make the entity resolvable in the current scope. + Namespace: StringLongIdent option + + /// Full display name (i.e. last ident plus modules with `RequireQualifiedAccess` attribute prefixed). + Name: StringLongIdent + + /// Last part of the entity's full name. + LastIdent: string + } + /// Provides assembly content. -module public AssemblyContent = +module public AssemblyContentProvider = /// Given a `FSharpAssemblySignature`, returns assembly content. - val GetAssemblySignatureContent : AssemblyContentType -> FSharpAssemblySignature -> AssemblySymbol list + val getAssemblySignatureContent : AssemblyContentType -> FSharpAssemblySignature -> AssemblySymbol list /// Returns (possibly cached) assembly content. - val GetAssemblyContent : + val getAssemblyContent : withCache: ((IAssemblyContentCache -> AssemblySymbol list) -> AssemblySymbol list) -> contentType: AssemblyContentType -> fileName: string option -> assemblies: FSharpAssembly list -> AssemblySymbol list +/// Kind of lexical scope. +type public ScopeKind = + | Namespace + | TopModule + | NestedModule + | OpenDeclaration + | HashDirective + +/// Insert open namespace context. +type public InsertContext = + { + /// Current scope kind. + ScopeKind: ScopeKind + + /// Current position (F# compiler line number). + Pos: pos + } + +/// Where open statements should be added. +type public OpenStatementInsertionPoint = + | TopLevel + | Nearest + +/// Parse AST helpers. +module public ParsedInput = + + /// Returns `InsertContext` based on current position and symbol idents. + val tryFindInsertionContext : + currentLine: int -> + ast: ParsedInput -> MaybeUnresolvedIdents -> + insertionPoint: OpenStatementInsertionPoint -> + (( (* requiresQualifiedAccessParent: *) Idents option * (* autoOpenParent: *) Idents option * (* entityNamespace *) Idents option * (* entity: *) Idents) -> (Entity * InsertContext)[]) + + /// Returns `InsertContext` based on current position and symbol idents. + val findNearestPointToInsertOpenDeclaration : currentLine: int -> ast: ParsedInput -> entity: Idents -> insertionPoint: OpenStatementInsertionPoint -> InsertContext + + /// Returns long identifier at position. + val getLongIdentAt : ast: ParsedInput -> pos: pos -> LongIdent option + + /// Corrects insertion line number based on kind of scope and text surrounding the insertion point. + val adjustInsertionPoint : getLineStr: (int -> string) -> ctx: InsertContext -> pos + +[] +module public Extensions = + type FSharpEntity with + /// Safe version of `FullName`. + member TryGetFullName : unit -> string option + + /// Safe version of `DisplayName`. + member TryGetFullDisplayName : unit -> string option + + /// Safe version of `CompiledName`. + member TryGetFullCompiledName : unit -> string option + + /// Public nested entities (methods, functions, values, nested modules). + member PublicNestedEntities : seq + + /// Safe version of `GetMembersFunctionsAndValues`. + member TryGetMembersFunctionsAndValues : IList + + type FSharpMemberOrFunctionOrValue with + /// Safe version of `FullType`. + member FullTypeSafe : FSharpType option + + /// Full name with last part replaced with display name. + member TryGetFullDisplayName : unit -> string option + + /// Full operator compiled name. + member TryGetFullCompiledOperatorNameIdents : unit -> Idents option + + type FSharpAssemblySignature with + /// Safe version of `Entities`. + member TryGetEntities : unit -> seq \ No newline at end of file diff --git a/src/fsharp/service/ServiceCompilerDiagnostics.fs b/src/fsharp/service/ServiceCompilerDiagnostics.fs index abbedea37d2..008cb327bb0 100644 --- a/src/fsharp/service/ServiceCompilerDiagnostics.fs +++ b/src/fsharp/service/ServiceCompilerDiagnostics.fs @@ -1,26 +1,14 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.Diagnostics +namespace FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.ErrorResolutionHints - -[] -type FSharpDiagnosticKind = +type DiagnosticKind = | AddIndexerDot | ReplaceWithSuggestion of suggestion:string [] module CompilerDiagnostics = - - let GetErrorMessage diagnosticKind = + let getErrorMessage diagnosticKind = match diagnosticKind with - | FSharpDiagnosticKind.AddIndexerDot -> FSComp.SR.addIndexerDot() - | FSharpDiagnosticKind.ReplaceWithSuggestion s -> FSComp.SR.replaceWithSuggestion(s) - - let GetSuggestedNames (suggestionsF: FSharp.Compiler.ErrorLogger.Suggestions) (unresolvedIdentifier: string) = - let buffer = SuggestionBuffer(unresolvedIdentifier) - if buffer.Disabled then - Seq.empty - else - suggestionsF buffer.Add - buffer :> seq \ No newline at end of file + | AddIndexerDot -> FSComp.SR.addIndexerDot() + | ReplaceWithSuggestion s -> FSComp.SR.replaceWithSuggestion(s) \ No newline at end of file diff --git a/src/fsharp/service/ServiceCompilerDiagnostics.fsi b/src/fsharp/service/ServiceCompilerDiagnostics.fsi index fae4c0277b8..4916b2c2f6b 100644 --- a/src/fsharp/service/ServiceCompilerDiagnostics.fsi +++ b/src/fsharp/service/ServiceCompilerDiagnostics.fsi @@ -1,19 +1,13 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.Diagnostics +namespace FSharp.Compiler.SourceCodeServices /// Supported kinds of diagnostics by this service. -[] -type FSharpDiagnosticKind = +type DiagnosticKind = | AddIndexerDot | ReplaceWithSuggestion of suggestion:string /// Exposes compiler diagnostic error messages. module CompilerDiagnostics = - /// Given a DiagnosticKind, returns the string representing the error message for that diagnostic. - val GetErrorMessage: diagnosticKind: FSharpDiagnosticKind -> string - - /// Given a set of names, uses and a string representing an unresolved identifier, - /// returns a list of suggested names if there are any feasible candidates. - val GetSuggestedNames: suggestionsF: ((string -> unit) -> unit) -> unresolvedIdentifier: string -> seq + val getErrorMessage: diagnosticKind: DiagnosticKind -> string \ No newline at end of file diff --git a/src/fsharp/service/ServiceConstants.fs b/src/fsharp/service/ServiceConstants.fs index b93d0abdab6..1628a277a35 100644 --- a/src/fsharp/service/ServiceConstants.fs +++ b/src/fsharp/service/ServiceConstants.fs @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler.SourceCodeServices [] type FSharpGlyph = diff --git a/src/fsharp/service/ServiceDeclarationLists.fs b/src/fsharp/service/ServiceDeclarationLists.fs index 744c51c17cb..587b31f1e41 100644 --- a/src/fsharp/service/ServiceDeclarationLists.fs +++ b/src/fsharp/service/ServiceDeclarationLists.fs @@ -5,463 +5,27 @@ // type checking and intellisense-like environment-reporting. //-------------------------------------------------------------------------- -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler.SourceCodeServices -open System.Collections.Immutable -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras open FSharp.Compiler +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AccessibilityLogic -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.EditorServices open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Infos open FSharp.Compiler.InfoReader +open FSharp.Compiler.Layout +open FSharp.Compiler.Layout.TaggedTextOps +open FSharp.Compiler.Lib open FSharp.Compiler.NameResolution -open FSharp.Compiler.Symbols -open FSharp.Compiler.Symbols.SymbolHelpers -open FSharp.Compiler.Syntax.PrettyNaming -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Layout -open FSharp.Compiler.Text.LayoutRender -open FSharp.Compiler.Text.TaggedText +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Range open FSharp.Compiler.TypedTree -open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps -/// A single data tip display element -[] -type ToolTipElementData = - { MainDescription: TaggedText[] - XmlDoc: FSharpXmlDoc - TypeMapping: TaggedText[] list - Remarks: TaggedText[] option - ParamName : string option } - - static member Create(layout, xml, ?typeMapping, ?paramName, ?remarks) = - { MainDescription=layout; XmlDoc=xml; TypeMapping=defaultArg typeMapping []; ParamName=paramName; Remarks=remarks } - -/// A single data tip display element -[] -type ToolTipElement = - | None - - /// A single type, method, etc with comment. May represent a method overload group. - | Group of elements: ToolTipElementData list - - /// An error occurred formatting this element - | CompositionError of errorText: string - - static member Single(layout, xml, ?typeMapping, ?paramName, ?remarks) = - Group [ ToolTipElementData.Create(layout, xml, ?typeMapping=typeMapping, ?paramName=paramName, ?remarks=remarks) ] - -/// Information for building a data tip box. -type ToolTipText = - /// A list of data tip elements to display. - | ToolTipText of ToolTipElement list - -[] -type CompletionItemKind = - | Field - | Property - | Method of isExtension : bool - | Event - | Argument - | CustomOperation - | Other - -type UnresolvedSymbol = - { FullName: string - DisplayName: string - Namespace: string[] } - -type CompletionItem = - { ItemWithInst: ItemWithInst - Kind: CompletionItemKind - IsOwnMember: bool - MinorPriority: int - Type: TyconRef option - Unresolved: UnresolvedSymbol option } - member x.Item = x.ItemWithInst.Item - -[] -module DeclarationListHelpers = - let mutable ToolTipFault = None - - /// Generate the structured tooltip for a method info - let FormatOverloadsToList (infoReader: InfoReader) m denv (item: ItemWithInst) minfos : ToolTipElement = - ToolTipFault |> Option.iter (fun msg -> - let exn = Error((0, msg), range.Zero) - let ph = PhasedDiagnostic.Create(exn, BuildPhase.TypeCheck) - simulateError ph) - - let layouts = - [ for minfo in minfos -> - let prettyTyparInst, layout = NicePrint.prettyLayoutOfMethInfoFreeStyle infoReader m denv item.TyparInst minfo - let xml = GetXmlCommentForMethInfoItem infoReader m item.Item minfo - let tpsL = FormatTyparMapping denv prettyTyparInst - let layout = LayoutRender.toArray layout - let tpsL = List.map LayoutRender.toArray tpsL - ToolTipElementData.Create(layout, xml, tpsL) ] - - ToolTipElement.Group layouts - - let CompletionItemDisplayPartialEquality g = - let itemComparer = ItemDisplayPartialEquality g - - { new IPartialEqualityComparer with - member x.InEqualityRelation item = itemComparer.InEqualityRelation item.Item - member x.Equals(item1, item2) = itemComparer.Equals(item1.Item, item2.Item) - member x.GetHashCode item = itemComparer.GetHashCode(item.Item) } - - /// Remove all duplicate items - let RemoveDuplicateCompletionItems g items = - if isNil items then items else - items |> IPartialEqualityComparer.partialDistinctBy (CompletionItemDisplayPartialEquality g) - - /// Filter types that are explicitly suppressed from the IntelliSense (such as uppercase "FSharpList", "Option", etc.) - let RemoveExplicitlySuppressedCompletionItems (g: TcGlobals) (items: CompletionItem list) = - items |> List.filter (fun item -> not (IsExplicitlySuppressed g item.Item)) - - // Remove items containing the same module references - let RemoveDuplicateModuleRefs modrefs = - modrefs |> IPartialEqualityComparer.partialDistinctBy - { new IPartialEqualityComparer with - member x.InEqualityRelation _ = true - member x.Equals(item1, item2) = (fullDisplayTextOfModRef item1 = fullDisplayTextOfModRef item2) - member x.GetHashCode item = hash item.Stamp } - - let OutputFullName isListItem ppF fnF r = - // Only display full names in quick info, not declaration lists or method lists - if not isListItem then - match ppF r with - | None -> emptyL - | Some _ -> wordL (tagText (FSComp.SR.typeInfoFullName())) ^^ RightL.colon ^^ (fnF r) - else emptyL - - let pubpathOfValRef (v: ValRef) = v.PublicPath - - let pubpathOfTyconRef (x: TyconRef) = x.PublicPath - - /// Output the quick info information of a language item - let rec FormatItemDescriptionToToolTipElement isListItem (infoReader: InfoReader) m denv (item: ItemWithInst) = - let g = infoReader.g - let amap = infoReader.amap - let denv = SimplerDisplayEnv denv - let xml = GetXmlCommentForItem infoReader m item.Item - match item.Item with - | Item.ImplicitOp(_, { contents = Some(TraitConstraintSln.FSMethSln(_, vref, _)) }) -> - // operator with solution - FormatItemDescriptionToToolTipElement isListItem infoReader m denv { item with Item = Item.Value vref } - - | Item.Value vref | Item.CustomBuilder (_, vref) -> - let prettyTyparInst, resL = NicePrint.layoutQualifiedValOrMember denv infoReader item.TyparInst vref - let remarks = OutputFullName isListItem pubpathOfValRef fullDisplayTextOfValRefAsLayout vref - let tpsL = FormatTyparMapping denv prettyTyparInst - let tpsL = List.map LayoutRender.toArray tpsL - let resL = LayoutRender.toArray resL - let remarks = LayoutRender.toArray remarks - ToolTipElement.Single(resL, xml, tpsL, remarks=remarks) - - // Union tags (constructors) - | Item.UnionCase(ucinfo, _) -> - let uc = ucinfo.UnionCase - let rty = generalizedTyconRef ucinfo.TyconRef - let recd = uc.RecdFields - let layout = - wordL (tagText (FSComp.SR.typeInfoUnionCase())) ^^ - NicePrint.layoutTyconRef denv ucinfo.TyconRef ^^ - sepL (tagPunctuation ".") ^^ - wordL (tagUnionCase (DecompileOpName uc.Id.idText) |> mkNav uc.DefinitionRange) ^^ - RightL.colon ^^ - (if List.isEmpty recd then emptyL else NicePrint.layoutUnionCases denv infoReader ucinfo.TyconRef recd ^^ WordL.arrow) ^^ - NicePrint.layoutType denv rty - let layout = LayoutRender.toArray layout - ToolTipElement.Single (layout, xml) - - // Active pattern tag inside the declaration (result) - | Item.ActivePatternResult(apinfo, ty, idx, _) -> - let items = apinfo.ActiveTags - let layout = - wordL (tagText ((FSComp.SR.typeInfoActivePatternResult()))) ^^ - wordL (tagActivePatternResult (List.item idx items) |> mkNav apinfo.Range) ^^ - RightL.colon ^^ - NicePrint.layoutType denv ty - let layout = LayoutRender.toArray layout - ToolTipElement.Single (layout, xml) - - // Active pattern tags - | Item.ActivePatternCase apref -> - let v = apref.ActivePatternVal - // Format the type parameters to get e.g. ('a -> 'a) rather than ('?1234 -> '?1234) - let tau = v.TauType - // REVIEW: use _cxs here - let (prettyTyparInst, ptau), _cxs = PrettyTypes.PrettifyInstAndType denv.g (item.TyparInst, tau) - let remarks = OutputFullName isListItem pubpathOfValRef fullDisplayTextOfValRefAsLayout v - let layout = - wordL (tagText (FSComp.SR.typeInfoActiveRecognizer())) ^^ - wordL (tagActivePatternCase apref.Name |> mkNav v.DefinitionRange) ^^ - RightL.colon ^^ - NicePrint.layoutType denv ptau - - let tpsL = FormatTyparMapping denv prettyTyparInst - - let layout = LayoutRender.toArray layout - let tpsL = List.map LayoutRender.toArray tpsL - let remarks = LayoutRender.toArray remarks - ToolTipElement.Single (layout, xml, tpsL, remarks=remarks) - - // F# exception names - | Item.ExnCase ecref -> - let layout = NicePrint.layoutExnDef denv infoReader ecref - let remarks = OutputFullName isListItem pubpathOfTyconRef fullDisplayTextOfExnRefAsLayout ecref - let layout = LayoutRender.toArray layout - let remarks = LayoutRender.toArray remarks - ToolTipElement.Single (layout, xml, remarks=remarks) - - | Item.RecdField rfinfo when rfinfo.TyconRef.IsExceptionDecl -> - let ty, _ = PrettyTypes.PrettifyType g rfinfo.FieldType - let id = rfinfo.RecdField.Id - let layout = - wordL (tagText (FSComp.SR.typeInfoArgument())) ^^ - wordL (tagParameter id.idText) ^^ - RightL.colon ^^ - NicePrint.layoutType denv ty - let layout = LayoutRender.toArray layout - ToolTipElement.Single (layout, xml, paramName = id.idText) - - // F# record field names - | Item.RecdField rfinfo -> - let rfield = rfinfo.RecdField - let ty, _cxs = PrettyTypes.PrettifyType g rfinfo.FieldType - let layout = - NicePrint.layoutTyconRef denv rfinfo.TyconRef ^^ - SepL.dot ^^ - wordL (tagRecordField (DecompileOpName rfield.Name) |> mkNav rfield.DefinitionRange) ^^ - RightL.colon ^^ - NicePrint.layoutType denv ty ^^ - ( - match rfinfo.LiteralValue with - | None -> emptyL - | Some lit -> try WordL.equals ^^ NicePrint.layoutConst denv.g ty lit with _ -> emptyL - ) - let layout = LayoutRender.toArray layout - ToolTipElement.Single (layout, xml) - - | Item.UnionCaseField (ucinfo, fieldIndex) -> - let rfield = ucinfo.UnionCase.GetFieldByIndex(fieldIndex) - let fieldTy, _ = PrettyTypes.PrettifyType g rfield.rfield_type - let id = rfield.Id - let layout = - wordL (tagText (FSComp.SR.typeInfoArgument())) ^^ - wordL (tagParameter id.idText) ^^ - RightL.colon ^^ - NicePrint.layoutType denv fieldTy - let layout = LayoutRender.toArray layout - ToolTipElement.Single (layout, xml, paramName = id.idText) - - // Not used - | Item.NewDef id -> - let layout = - wordL (tagText (FSComp.SR.typeInfoPatternVariable())) ^^ - wordL (tagUnknownEntity id.idText) - let layout = LayoutRender.toArray layout - ToolTipElement.Single (layout, xml) - - // .NET fields - | Item.ILField finfo -> - let layout = - wordL (tagText (FSComp.SR.typeInfoField())) ^^ - NicePrint.layoutType denv finfo.ApparentEnclosingAppType ^^ - SepL.dot ^^ - wordL (tagField finfo.FieldName) ^^ - RightL.colon ^^ - NicePrint.layoutType denv (finfo.FieldType(amap, m)) ^^ - ( - match finfo.LiteralValue with - | None -> emptyL - | Some v -> - WordL.equals ^^ - try NicePrint.layoutConst denv.g (finfo.FieldType(infoReader.amap, m)) (CheckExpressions.TcFieldInit m v) with _ -> emptyL - ) - let layout = LayoutRender.toArray layout - ToolTipElement.Single (layout, xml) - - // .NET events - | Item.Event einfo -> - let rty = PropTypOfEventInfo infoReader m AccessibleFromSomewhere einfo - let rty, _cxs = PrettyTypes.PrettifyType g rty - let layout = - wordL (tagText (FSComp.SR.typeInfoEvent())) ^^ - NicePrint.layoutTyconRef denv einfo.ApparentEnclosingTyconRef ^^ - SepL.dot ^^ - wordL (tagEvent einfo.EventName) ^^ - RightL.colon ^^ - NicePrint.layoutType denv rty - let layout = LayoutRender.toArray layout - ToolTipElement.Single (layout, xml) - - // F# and .NET properties - | Item.Property(_, pinfo :: _) -> - let layout = NicePrint.prettyLayoutOfPropInfoFreeStyle g amap m denv pinfo - let layout = LayoutRender.toArray layout - ToolTipElement.Single (layout, xml) - - // Custom operations in queries - | Item.CustomOperation (customOpName, usageText, Some minfo) -> - - // Build 'custom operation: where (bool) - // - // Calls QueryBuilder.Where' - let layout = - wordL (tagText (FSComp.SR.typeInfoCustomOperation())) ^^ - RightL.colon ^^ - ( - match usageText() with - | Some t -> wordL (tagText t) - | None -> - let argTys = ParamNameAndTypesOfUnaryCustomOperation g minfo |> List.map (fun (ParamNameAndType(_, ty)) -> ty) - let argTys, _ = PrettyTypes.PrettifyTypes g argTys - wordL (tagMethod customOpName) ^^ sepListL SepL.space (List.map (fun ty -> LeftL.leftParen ^^ NicePrint.layoutType denv ty ^^ SepL.rightParen) argTys) - ) ^^ - SepL.lineBreak ^^ SepL.lineBreak ^^ - wordL (tagText (FSComp.SR.typeInfoCallsWord())) ^^ - NicePrint.layoutTyconRef denv minfo.ApparentEnclosingTyconRef ^^ - SepL.dot ^^ - wordL (tagMethod minfo.DisplayName) - - let layout = LayoutRender.toArray layout - ToolTipElement.Single (layout, xml) - - // F# constructors and methods - | Item.CtorGroup(_, minfos) - | Item.MethodGroup(_, minfos, _) -> - FormatOverloadsToList infoReader m denv item minfos - - // The 'fake' zero-argument constructors of .NET interfaces. - // This ideally should never appear in intellisense, but we do get here in repros like: - // type IFoo = abstract F : int - // type II = IFoo // remove 'type II = ' and quickly hover over IFoo before it gets squiggled for 'invalid use of interface type' - // and in that case we'll just show the interface type name. - | Item.FakeInterfaceCtor ty -> - let ty, _ = PrettyTypes.PrettifyType g ty - let layout = NicePrint.layoutTyconRef denv (tcrefOfAppTy g ty) - let layout = LayoutRender.toArray layout - ToolTipElement.Single(layout, xml) - - // The 'fake' representation of constructors of .NET delegate types - | Item.DelegateCtor delty -> - let delty, _cxs = PrettyTypes.PrettifyType g delty - let (SigOfFunctionForDelegate(_, _, _, fty)) = GetSigOfFunctionForDelegate infoReader delty m AccessibleFromSomewhere - let layout = - NicePrint.layoutTyconRef denv (tcrefOfAppTy g delty) ^^ - LeftL.leftParen ^^ - NicePrint.layoutType denv fty ^^ - RightL.rightParen - let layout = LayoutRender.toArray layout - ToolTipElement.Single(layout, xml) - - // Types. - | Item.Types(_, ((TType_app(tcref, _)) :: _)) - | Item.UnqualifiedType (tcref :: _) -> - let denv = { denv with - // tooltips are space-constrained, so use shorter names - shortTypeNames = true - // tooltips are space-constrained, so don't include xml doc comments - // on types/members. The doc comments for the actual member will still - // be shown in the tip. - showDocumentation = false } - let layout = NicePrint.layoutTycon denv infoReader AccessibleFromSomewhere m (* width *) tcref.Deref - let remarks = OutputFullName isListItem pubpathOfTyconRef fullDisplayTextOfTyconRefAsLayout tcref - let layout = LayoutRender.toArray layout - let remarks = LayoutRender.toArray remarks - ToolTipElement.Single (layout, xml, remarks=remarks) - - // F# Modules and namespaces - | Item.ModuleOrNamespaces((modref :: _) as modrefs) -> - //let os = StringBuilder() - let modrefs = modrefs |> RemoveDuplicateModuleRefs - let definiteNamespace = modrefs |> List.forall (fun modref -> modref.IsNamespace) - let kind = - if definiteNamespace then FSComp.SR.typeInfoNamespace() - elif modrefs |> List.forall (fun modref -> modref.IsModule) then FSComp.SR.typeInfoModule() - else FSComp.SR.typeInfoNamespaceOrModule() - - let layout = - wordL (tagKeyword kind) ^^ - (if definiteNamespace then tagNamespace (fullDisplayTextOfModRef modref) else (tagModule modref.DemangledModuleOrNamespaceName) - |> mkNav modref.DefinitionRange - |> wordL) - if not definiteNamespace then - let namesToAdd = - ([], modrefs) - ||> Seq.fold (fun st modref -> - match fullDisplayTextOfParentOfModRef modref with - | ValueSome txt -> txt :: st - | _ -> st) - |> Seq.mapi (fun i x -> i, x) - |> Seq.toList - let layout = - layout ^^ - ( - if not (List.isEmpty namesToAdd) then - SepL.lineBreak ^^ - List.fold ( fun s (i, txt) -> - s ^^ - SepL.lineBreak ^^ - wordL (tagText ((if i = 0 then FSComp.SR.typeInfoFromFirst else FSComp.SR.typeInfoFromNext) txt)) - ) emptyL namesToAdd - else - emptyL - ) - let layout = LayoutRender.toArray layout - ToolTipElement.Single (layout, xml) - else - let layout = LayoutRender.toArray layout - ToolTipElement.Single (layout, xml) - - | Item.AnonRecdField(anon, argTys, i, _) -> - let argTy = argTys.[i] - let nm = anon.SortedNames.[i] - let argTy, _ = PrettyTypes.PrettifyType g argTy - let layout = - wordL (tagText (FSComp.SR.typeInfoAnonRecdField())) ^^ - wordL (tagRecordField nm) ^^ - RightL.colon ^^ - NicePrint.layoutType denv argTy - let layout = LayoutRender.toArray layout - ToolTipElement.Single (layout, FSharpXmlDoc.None) - - // Named parameters - | Item.ArgName (id, argTy, _) -> - let argTy, _ = PrettyTypes.PrettifyType g argTy - let layout = - wordL (tagText (FSComp.SR.typeInfoArgument())) ^^ - wordL (tagParameter id.idText) ^^ - RightL.colon ^^ - NicePrint.layoutType denv argTy - let layout = LayoutRender.toArray layout - ToolTipElement.Single (layout, xml, paramName = id.idText) - - | Item.SetterArg (_, item) -> - FormatItemDescriptionToToolTipElement isListItem infoReader m denv (ItemWithNoInst item) - - | _ -> - ToolTipElement.None - - /// Format the structured version of a tooltip for an item - let FormatStructuredDescriptionOfItem isDecl infoReader m denv item = - ErrorScope.Protect m - (fun () -> FormatItemDescriptionToToolTipElement isDecl infoReader m denv item) - (fun err -> ToolTipElement.CompositionError err) - [] /// Represents one parameter for one method (or other item) in a group. -type MethodGroupItemParameter(name: string, canonicalTypeTextForSorting: string, display: TaggedText[], isOptional: bool) = +type FSharpMethodGroupItemParameter(name: string, canonicalTypeTextForSorting: string, display: layout, isOptional: bool) = /// The name of the parameter. member _.ParameterName = name @@ -469,9 +33,13 @@ type MethodGroupItemParameter(name: string, canonicalTypeTextForSorting: string, /// A key that can be used for sorting the parameters, used to help sort overloads. member _.CanonicalTypeTextForSorting = canonicalTypeTextForSorting + /// The structured representation for the parameter including its name, its type and visual indicators of other + /// information such as whether it is optional. + member _.StructuredDisplay = display + /// The text to display for the parameter including its name, its type and visual indicators of other /// information such as whether it is optional. - member _.Display = display + member _.Display = showL display /// Is the parameter optional member _.IsOptional = isOptional @@ -492,40 +60,34 @@ module internal DescriptionListsImpl = NicePrint.stringOfTy denv strippedType let PrettyParamOfRecdField g denv (f: RecdField) = - let display = NicePrint.prettyLayoutOfType denv f.FormalType - let display = LayoutRender.toArray display - MethodGroupItemParameter( + FSharpMethodGroupItemParameter( name = f.Name, canonicalTypeTextForSorting = printCanonicalizedTypeName g denv f.FormalType, // Note: the instantiation of any type parameters is currently incorporated directly into the type // rather than being returned separately. - display = display, + display = NicePrint.prettyLayoutOfType denv f.FormalType, isOptional=false) let PrettyParamOfUnionCaseField g denv isGenerated (i: int) (f: RecdField) = let initial = PrettyParamOfRecdField g denv f let display = if isGenerated i f then - initial.Display + initial.StructuredDisplay else // TODO: in this case ucinst is ignored - it gives the instantiation of the type parameters of // the union type containing this case. - let display = NicePrint.layoutOfParamData denv (ParamData(false, false, false, NotOptional, NoCallerInfo, Some f.Id, ReflectedArgInfo.None, f.FormalType)) - LayoutRender.toArray display - - MethodGroupItemParameter( + NicePrint.layoutOfParamData denv (ParamData(false, false, false, NotOptional, NoCallerInfo, Some f.Id, ReflectedArgInfo.None, f.FormalType)) + FSharpMethodGroupItemParameter( name=initial.ParameterName, canonicalTypeTextForSorting=initial.CanonicalTypeTextForSorting, display=display, isOptional=false) let ParamOfParamData g denv (ParamData(_isParamArrayArg, _isInArg, _isOutArg, optArgInfo, _callerInfo, nmOpt, _reflArgInfo, pty) as paramData) = - let display = NicePrint.layoutOfParamData denv paramData - let display = LayoutRender.toArray display - MethodGroupItemParameter( + FSharpMethodGroupItemParameter( name = (match nmOpt with None -> "" | Some pn -> pn.idText), canonicalTypeTextForSorting = printCanonicalizedTypeName g denv pty, - display = display, + display = NicePrint.layoutOfParamData denv paramData, isOptional=optArgInfo.IsOptional) // TODO this code is similar to NicePrint.fs:formatParamDataToBuffer, refactor or figure out why different? @@ -540,7 +102,7 @@ module internal DescriptionListsImpl = let nm = id.idText // detect parameter type, if ptyOpt is None - this is .NET style optional argument let pty = match ptyOpt with ValueSome x -> x | _ -> pty - (nm, isOptArg, SepL.questionMark ^^ (wordL (TaggedText.tagParameter nm))), pty + (nm, isOptArg, SepL.questionMark ^^ (wordL (TaggedTextOps.tagParameter nm))), pty // Layout an unnamed argument | None, _, _ -> ("", isOptArg, emptyL), pty @@ -550,11 +112,11 @@ module internal DescriptionListsImpl = let prefix = if isParamArrayArg then NicePrint.PrintUtilities.layoutBuiltinAttribute denv denv.g.attrib_ParamArrayAttribute ^^ - wordL (TaggedText.tagParameter nm) ^^ + wordL (TaggedTextOps.tagParameter nm) ^^ RightL.colon //sprintf "%s %s: " (NicePrint.PrintUtilities.layoutBuiltinAttribute denv denv.g.attrib_ParamArrayAttribute |> showL) nm else - wordL (TaggedText.tagParameter nm) ^^ + wordL (TaggedTextOps.tagParameter nm) ^^ RightL.colon //sprintf "%s: " nm (nm, isOptArg, prefix), pty) @@ -567,12 +129,10 @@ module internal DescriptionListsImpl = // Remake the params using the prettified versions let prettyParams = (paramInfo, prettyParamTys, prettyParamTysL) |||> List.map3 (fun (nm, isOptArg, paramPrefix) tau tyL -> - let display = paramPrefix ^^ tyL - let display = LayoutRender.toArray display - MethodGroupItemParameter( + FSharpMethodGroupItemParameter( name = nm, canonicalTypeTextForSorting = printCanonicalizedTypeName g denv tau, - display = display, + display = paramPrefix ^^ tyL, isOptional=isOptArg )) @@ -586,13 +146,13 @@ module internal DescriptionListsImpl = // Remake the params using the prettified versions let parameters = - (prettyParamTys, prettyParamTysL) - ||> List.map2 (fun tau tyL -> - let display = LayoutRender.toArray tyL - MethodGroupItemParameter( + (prettyParamTys, prettyParamTysL) + ||> List.zip + |> List.map (fun (tau, tyL) -> + FSharpMethodGroupItemParameter( name = "", canonicalTypeTextForSorting = printCanonicalizedTypeName g denv tau, - display = display, + display = tyL, isOptional=false )) @@ -614,12 +174,10 @@ module internal DescriptionListsImpl = let spKind = NicePrint.prettyLayoutOfType denv ty let spName = sp.PUntaint((fun sp -> sp.Name), m) let spOpt = sp.PUntaint((fun sp -> sp.IsOptional), m) - let display = (if spOpt then SepL.questionMark else emptyL) ^^ wordL (TaggedText.tagParameter spName) ^^ RightL.colon ^^ spKind - let display = LayoutRender.toArray display - MethodGroupItemParameter( + FSharpMethodGroupItemParameter( name = spName, canonicalTypeTextForSorting = showL spKind, - display = display, + display = (if spOpt then SepL.questionMark else emptyL) ^^ wordL (TaggedTextOps.tagParameter spName) ^^ RightL.colon ^^ spKind, //display = sprintf "%s%s: %s" (if spOpt then "?" else "") spName spKind, isOptional=spOpt)) | _ -> [| |] @@ -627,7 +185,7 @@ module internal DescriptionListsImpl = /// Get all the information about parameters and "prettify" the types by choosing nice type variable /// names. This is similar to the other variations on "show me an item" code. This version is - /// is used when presenting groups of methods (see MethodGroup). It is possible these different + /// is used when presenting groups of methods (see FSharpMethodGroup). It is possible these different /// versions could be better unified. let rec PrettyParamsAndReturnTypeOfItem (infoReader:InfoReader) m denv (item: ItemWithInst) = let amap = infoReader.amap @@ -915,51 +473,49 @@ module internal DescriptionListsImpl = /// An intellisense declaration [] -type DeclarationListItem(name: string, nameInCode: string, fullName: string, glyph: FSharpGlyph, info, accessibility: FSharpAccessibility, +type FSharpDeclarationListItem(name: string, nameInCode: string, fullName: string, glyph: FSharpGlyph, info, accessibility: FSharpAccessibility option, kind: CompletionItemKind, isOwnMember: bool, priority: int, isResolved: bool, namespaceToOpen: string option) = member _.Name = name - member _.NameInCode = nameInCode - member _.Description = + member decl.StructuredDescriptionTextAsync = decl.StructuredDescriptionText |> async.Return + + member _.StructuredDescriptionText = match info with | Choice1Of2 (items: CompletionItem list, infoReader, m, denv) -> - ToolTipText(items |> List.map (fun x -> FormatStructuredDescriptionOfItem true infoReader m denv x.ItemWithInst)) + FSharpToolTipText(items |> List.map (fun x -> SymbolHelpers.FormatStructuredDescriptionOfItem true infoReader m denv x.ItemWithInst)) | Choice2Of2 result -> result - member _.Glyph = glyph + member x.DescriptionTextAsync = x.DescriptionText |> async.Return - member _.Accessibility = accessibility + member decl.DescriptionText = + decl.StructuredDescriptionText + |> Tooltips.ToFSharpToolTipText + member _.Glyph = glyph + member _.Accessibility = accessibility member _.Kind = kind - member _.IsOwnMember = isOwnMember - member _.MinorPriority = priority - member _.FullName = fullName - member _.IsResolved = isResolved - member _.NamespaceToOpen = namespaceToOpen /// A table of declarations for Intellisense completion [] -type DeclarationListInfo(declarations: DeclarationListItem[], isForType: bool, isError: bool) = +type FSharpDeclarationListInfo(declarations: FSharpDeclarationListItem[], isForType: bool, isError: bool) = static let fsharpNamespace = [|"Microsoft"; "FSharp"|] member _.Items = declarations - member _.IsForType = isForType - member _.IsError = isError // Make a 'Declarations' object for a set of selected items - static member Create(infoReader:InfoReader, m: range, denv, getAccessibility: (Item -> FSharpAccessibility), items: CompletionItem list, currentNamespace: string[] option, isAttributeApplicationContext: bool) = + static member Create(infoReader:InfoReader, m: range, denv, getAccessibility, items: CompletionItem list, currentNamespace: string[] option, isAttributeApplicationContext: bool) = let g = infoReader.g let isForType = items |> List.exists (fun x -> x.Type.IsSome) - let items = items |> RemoveExplicitlySuppressedCompletionItems g + let items = items |> SymbolHelpers.RemoveExplicitlySuppressedCompletionItems g let tyconRefOptEq tref1 tref2 = match tref1, tref2 with @@ -1001,7 +557,7 @@ type DeclarationListInfo(declarations: DeclarationListItem[], isForType: bool, i // Prefer items from file check results to ones from referenced assemblies via GetAssemblyContent ("all entities") |> List.sortBy (fun x -> x.Unresolved.IsSome) // Remove all duplicates. We've put the types first, so this removes the DelegateCtor and DefaultStructCtor's. - |> RemoveDuplicateCompletionItems g + |> SymbolHelpers.RemoveDuplicateCompletionItems g |> List.groupBy (fun x -> match x.Unresolved with | Some u -> @@ -1099,18 +655,18 @@ type DeclarationListInfo(declarations: DeclarationListItem[], isForType: bool, i | [||] -> None | ns -> Some (System.String.Join(".", ns))) - DeclarationListItem( + FSharpDeclarationListItem( name, nameInCode, fullName, glyph, Choice1Of2 (items, infoReader, m, denv), getAccessibility item.Item, item.Kind, item.IsOwnMember, item.MinorPriority, item.Unresolved.IsNone, namespaceToOpen)) - new DeclarationListInfo(Array.ofList decls, isForType, false) + new FSharpDeclarationListInfo(Array.ofList decls, isForType, false) static member Error message = - new DeclarationListInfo( - [| DeclarationListItem("", "", "", FSharpGlyph.Error, Choice2Of2 (ToolTipText [ToolTipElement.CompositionError message]), - FSharpAccessibility(taccessPublic), CompletionItemKind.Other, false, 0, false, None) |], false, true) + new FSharpDeclarationListInfo( + [| FSharpDeclarationListItem("", "", "", FSharpGlyph.Error, Choice2Of2 (FSharpToolTipText [FSharpStructuredToolTipElement.CompositionError message]), + None, CompletionItemKind.Other, false, 0, false, None) |], false, true) - static member Empty = DeclarationListInfo([| |], false, false) + static member Empty = FSharpDeclarationListInfo([| |], false, false) @@ -1118,18 +674,24 @@ type DeclarationListInfo(declarations: DeclarationListItem[], isForType: bool, i /// a single, non-overloaded item such as union case or a named function value. // Note: instances of this type do not hold any references to any compiler resources. [] -type MethodGroupItem(description: ToolTipText, xmlDoc: FSharpXmlDoc, - returnType: TaggedText[], parameters: MethodGroupItemParameter[], - hasParameters: bool, hasParamArrayArg: bool, staticParameters: MethodGroupItemParameter[]) = +type FSharpMethodGroupItem(description: FSharpToolTipText, xmlDoc: FSharpXmlDoc, + returnType: layout, parameters: FSharpMethodGroupItemParameter[], + hasParameters: bool, hasParamArrayArg: bool, staticParameters: FSharpMethodGroupItemParameter[]) = - /// The description representation for the method (or other item) - member _.Description = description + /// The structured description representation for the method (or other item) + member _.StructuredDescription = description + + /// The formatted description text for the method (or other item) + member _.Description = Tooltips.ToFSharpToolTipText description /// The documentation for the item member _.XmlDoc = xmlDoc - /// The return type text for the method (or other item) - member _.ReturnTypeText = returnType + /// The The structured description representation for the method (or other item) + member _.StructuredReturnTypeText = returnType + + /// The formatted type text for the method (or other item) + member _.ReturnTypeText = showL returnType /// The parameters of the method in the overload set member _.Parameters = parameters @@ -1149,11 +711,11 @@ type MethodGroupItem(description: ToolTipText, xmlDoc: FSharpXmlDoc, // Note: this type does not hold any strong references to any compiler resources, nor does evaluating any of the properties execute any // code on the compiler thread. [] -type MethodGroup( name: string, unsortedMethods: MethodGroupItem[] ) = +type FSharpMethodGroup( name: string, unsortedMethods: FSharpMethodGroupItem[] ) = // BUG 413009 : [ParameterInfo] takes about 3 seconds to move from one overload parameter to another // cache allows to avoid recomputing parameterinfo for the same item #if !FX_NO_WEAKTABLE - static let methodOverloadsCache = System.Runtime.CompilerServices.ConditionalWeakTable() + static let methodOverloadsCache = System.Runtime.CompilerServices.ConditionalWeakTable() #endif let methods = @@ -1162,7 +724,7 @@ type MethodGroup( name: string, unsortedMethods: MethodGroupItem[] ) = |> Array.map (fun meth -> let parms = meth.Parameters if parms.Length = 1 && parms.[0].CanonicalTypeTextForSorting="Microsoft.FSharp.Core.Unit" then - MethodGroupItem(meth.Description, meth.XmlDoc, meth.ReturnTypeText, [||], true, meth.HasParamArrayArg, meth.StaticParameters) + FSharpMethodGroupItem(meth.StructuredDescription, meth.XmlDoc, meth.StructuredReturnTypeText, [||], true, meth.HasParamArrayArg, meth.StaticParameters) else meth) // Fix the order of methods, to be stable for unit testing. @@ -1176,7 +738,7 @@ type MethodGroup( name: string, unsortedMethods: MethodGroupItem[] ) = static member Create (infoReader: InfoReader, m, denv, items:ItemWithInst list) = let g = infoReader.g - if isNil items then new MethodGroup("", [| |]) else + if isNil items then new FSharpMethodGroup("", [| |]) else let name = items.Head.Item.DisplayName let methods = @@ -1195,7 +757,7 @@ type MethodGroup( name: string, unsortedMethods: MethodGroupItem[] ) = (fun () -> PrettyParamsAndReturnTypeOfItem infoReader m denv { item with Item = flatItem }) (fun err -> [], wordL (tagText err)) - let description = ToolTipText [FormatStructuredDescriptionOfItem true infoReader m denv { item with Item = flatItem }] + let description = FSharpToolTipText [SymbolHelpers.FormatStructuredDescriptionOfItem true infoReader m denv { item with Item = flatItem }] let hasParamArrayArg = match flatItem with @@ -1210,8 +772,7 @@ type MethodGroup( name: string, unsortedMethods: MethodGroupItem[] ) = #endif | _ -> true - let prettyRetTyL = LayoutRender.toArray prettyRetTyL - MethodGroupItem( + FSharpMethodGroupItem( description = description, returnType = prettyRetTyL, xmlDoc = SymbolHelpers.GetXmlCommentForItem infoReader m flatItem, @@ -1230,7 +791,7 @@ type MethodGroup( name: string, unsortedMethods: MethodGroupItem[] ) = yield! methods |] - new MethodGroup(name, methods) + new FSharpMethodGroup(name, methods) diff --git a/src/fsharp/service/ServiceDeclarationLists.fsi b/src/fsharp/service/ServiceDeclarationLists.fsi index 37c543c64e6..68a5093d6d3 100644 --- a/src/fsharp/service/ServiceDeclarationLists.fsi +++ b/src/fsharp/service/ServiceDeclarationLists.fsi @@ -1,123 +1,52 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// API for declaration lists and method overload lists -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler.SourceCodeServices +open System open FSharp.Compiler.NameResolution open FSharp.Compiler.InfoReader -open FSharp.Compiler.Symbols -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.Text -open FSharp.Compiler.TypedTree +open FSharp.Compiler.Range open FSharp.Compiler.TypedTreeOps -/// A single data tip display element -[] -type public ToolTipElementData = - { - MainDescription: TaggedText[] - - XmlDoc: FSharpXmlDoc - - /// typar instantiation text, to go after xml - TypeMapping: TaggedText[] list - - /// Extra text, goes at the end - Remarks: TaggedText[] option - - /// Parameter name - ParamName: string option - } - -/// A single tool tip display element -// -// Note: instances of this type do not hold any references to any compiler resources. -[] -type public ToolTipElement = - | None - - /// A single type, method, etc with comment. May represent a method overload group. - | Group of elements: ToolTipElementData list - - /// An error occurred formatting this element - | CompositionError of errorText: string - - static member Single: layout: TaggedText[] * xml: FSharpXmlDoc * ?typeMapping: TaggedText[] list * ?paramName: string * ?remarks: TaggedText[] -> ToolTipElement - -/// Information for building a tool tip box. -// -// Note: instances of this type do not hold any references to any compiler resources. -type public ToolTipText = - - /// A list of data tip elements to display. - | ToolTipText of ToolTipElement list - -[] -type public CompletionItemKind = - | Field - | Property - | Method of isExtension: bool - | Event - | Argument - | CustomOperation - | Other - -type public UnresolvedSymbol = - { - FullName: string - - DisplayName: string - - Namespace: string[] - } - -type internal CompletionItem = - { - ItemWithInst: ItemWithInst - - Kind: CompletionItemKind - - IsOwnMember: bool - - MinorPriority: int - - Type: TyconRef option - - Unresolved: UnresolvedSymbol option - } - member Item: Item - [] /// Represents a declaration in F# source code, with information attached ready for display by an editor. /// Returned by GetDeclarations. // // Note: this type holds a weak reference to compiler resources. -type public DeclarationListItem = +type public FSharpDeclarationListItem = /// Get the display name for the declaration. - member Name: string + member Name : string /// Get the name for the declaration as it's presented in source code. - member NameInCode: string + member NameInCode : string + + [] + member StructuredDescriptionTextAsync : Async + + /// Get the description text. + member StructuredDescriptionText : FSharpStructuredToolTipText + + [] + member DescriptionTextAsync : Async - /// Get the description - member Description: ToolTipText + member DescriptionText : FSharpToolTipText - member Glyph: FSharpGlyph + member Glyph : FSharpGlyph - member Accessibility: FSharpAccessibility + member Accessibility : FSharpAccessibility option - member Kind: CompletionItemKind + member Kind : CompletionItemKind - member IsOwnMember: bool + member IsOwnMember : bool - member MinorPriority: int + member MinorPriority : int - member FullName: string + member FullName : string - member IsResolved: bool + member IsResolved : bool - member NamespaceToOpen: string option + member NamespaceToOpen : string option [] @@ -125,32 +54,24 @@ type public DeclarationListItem = /// Returned by GetDeclarations. // // Note: this type holds a weak reference to compiler resources. -type public DeclarationListInfo = +type public FSharpDeclarationListInfo = - member Items: DeclarationListItem[] + member Items : FSharpDeclarationListItem[] - member IsForType: bool + member IsForType : bool - member IsError: bool + member IsError : bool // Implementation details used by other code in the compiler - static member internal Create: - infoReader:InfoReader * - m:range * - denv:DisplayEnv * - getAccessibility:(Item -> FSharpAccessibility) * - items:CompletionItem list * - currentNamespace:string[] option * - isAttributeApplicationContext:bool - -> DeclarationListInfo + static member internal Create : infoReader:InfoReader * m:range * denv:DisplayEnv * getAccessibility:(Item -> FSharpAccessibility option) * items:CompletionItem list * currentNamespace:string[] option * isAttributeApplicationContext:bool -> FSharpDeclarationListInfo - static member internal Error: message:string -> DeclarationListInfo + static member internal Error : message:string -> FSharpDeclarationListInfo - static member Empty: DeclarationListInfo + static member Empty : FSharpDeclarationListInfo /// Represents one parameter for one method (or other item) in a group. [] -type public MethodGroupItemParameter = +type public FSharpMethodGroupItemParameter = /// The name of the parameter. member ParameterName: string @@ -158,9 +79,13 @@ type public MethodGroupItemParameter = /// A key that can be used for sorting the parameters, used to help sort overloads. member CanonicalTypeTextForSorting: string - /// The representation for the parameter including its name, its type and visual indicators of other + /// The structured representation for the parameter including its name, its type and visual indicators of other /// information such as whether it is optional. - member Display: TaggedText[] + member StructuredDisplay: Layout + + /// The text to display for the parameter including its name, its type and visual indicators of other + /// information such as whether it is optional. + member Display: string /// Is the parameter optional member IsOptional: bool @@ -168,19 +93,25 @@ type public MethodGroupItemParameter = /// Represents one method (or other item) in a method group. The item may represent either a method or /// a single, non-overloaded item such as union case or a named function value. [] -type public MethodGroupItem = +type public FSharpMethodGroupItem = /// The documentation for the item - member XmlDoc: FSharpXmlDoc + member XmlDoc : FSharpXmlDoc + + /// The structured description representation for the method (or other item) + member StructuredDescription : FSharpStructuredToolTipText + + /// The formatted description text for the method (or other item) + member Description : FSharpToolTipText - /// The description representation for the method (or other item) - member Description: ToolTipText + /// The The structured description representation for the method (or other item) + member StructuredReturnTypeText: Layout - /// The tagged text for the return type for the method (or other item) - member ReturnTypeText: TaggedText[] + /// The formatted type text for the method (or other item) + member ReturnTypeText: string /// The parameters of the method in the overload set - member Parameters: MethodGroupItemParameter[] + member Parameters: FSharpMethodGroupItemParameter[] /// Does the method support an arguments list? This is always true except for static type instantiations like TP<42,"foo">. member HasParameters: bool @@ -189,28 +120,19 @@ type public MethodGroupItem = member HasParamArrayArg: bool /// Does the type name or method support a static arguments list, like TP<42,"foo"> or conn.CreateCommand<42, "foo">(arg1, arg2)? - member StaticParameters: MethodGroupItemParameter[] + member StaticParameters: FSharpMethodGroupItemParameter[] /// Represents a group of methods (or other items) returned by GetMethods. [] -type public MethodGroup = +type public FSharpMethodGroup = - internal new: string * MethodGroupItem[] -> MethodGroup + internal new : string * FSharpMethodGroupItem[] -> FSharpMethodGroup /// The shared name of the methods (or other items) in the group member MethodName: string /// The methods (or other items) in the group - member Methods: MethodGroupItem[] - - static member internal Create: InfoReader * range * DisplayEnv * ItemWithInst list -> MethodGroup - -module internal DeclarationListHelpers = - val FormatStructuredDescriptionOfItem: isDecl:bool -> InfoReader -> range -> DisplayEnv -> ItemWithInst -> ToolTipElement - - val RemoveDuplicateCompletionItems: TcGlobals -> CompletionItem list -> CompletionItem list - - val RemoveExplicitlySuppressedCompletionItems: TcGlobals -> CompletionItem list -> CompletionItem list + member Methods: FSharpMethodGroupItem[] - val mutable ToolTipFault: string option + static member internal Create : InfoReader * range * DisplayEnv * ItemWithInst list -> FSharpMethodGroup diff --git a/src/fsharp/service/ServiceErrorResolutionHints.fs b/src/fsharp/service/ServiceErrorResolutionHints.fs index 2998bdf4746..79b4ad79e34 100644 --- a/src/fsharp/service/ServiceErrorResolutionHints.fs +++ b/src/fsharp/service/ServiceErrorResolutionHints.fs @@ -1,8 +1,15 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.Diagnostics +namespace FSharp.Compiler.SourceCodeServices open FSharp.Compiler.ErrorResolutionHints module ErrorResolutionHints = + let getSuggestedNames (suggestionsF: FSharp.Compiler.ErrorLogger.Suggestions) (unresolvedIdentifier: string) = + let buffer = SuggestionBuffer(unresolvedIdentifier) + if buffer.Disabled then + Seq.empty + else + suggestionsF buffer.Add + buffer :> seq \ No newline at end of file diff --git a/src/fsharp/service/ServiceErrorResolutionHints.fsi b/src/fsharp/service/ServiceErrorResolutionHints.fsi index 4c9192bdf5e..0d6b45fdcb6 100644 --- a/src/fsharp/service/ServiceErrorResolutionHints.fsi +++ b/src/fsharp/service/ServiceErrorResolutionHints.fsi @@ -1,10 +1,10 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.Diagnostics +namespace FSharp.Compiler.SourceCodeServices /// Exposes the string distance algorithm used to suggest names for mistyped identifiers. module ErrorResolutionHints = /// Given a set of names, uses and a string representing an unresolved identifier, /// returns a list of suggested names if there are any feasible candidates. - val GetSuggestedNames: suggestionsF: ((string -> unit) -> unit) -> unresolvedIdentifier: string -> seq + val getSuggestedNames: suggestionsF: ((string -> unit) -> unit) -> unresolvedIdentifier: string -> seq diff --git a/src/fsharp/service/ServiceInterfaceStubGenerator.fs b/src/fsharp/service/ServiceInterfaceStubGenerator.fs index 9798191055d..e303bb39b75 100644 --- a/src/fsharp/service/ServiceInterfaceStubGenerator.fs +++ b/src/fsharp/service/ServiceInterfaceStubGenerator.fs @@ -1,19 +1,18 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler.SourceCodeServices open System open System.Diagnostics -open Internal.Utilities.Library -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Symbols -open FSharp.Compiler.Symbols.FSharpSymbolPatterns -open FSharp.Compiler.Syntax -open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Tokenization +open FSharp.Compiler +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.Range +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.SyntaxTreeOps + +#if !FX_NO_INDENTED_TEXT_WRITER [] module internal CodeGenerationUtils = open System.IO @@ -23,33 +22,33 @@ module internal CodeGenerationUtils = let stringWriter = new StringWriter() let indentWriter = new IndentedTextWriter(stringWriter, " ") - member _.Write(s: string) = + member __.Write(s: string) = indentWriter.Write("{0}", s) - member _.Write(s: string, [] objs: obj []) = + member __.Write(s: string, [] objs: obj []) = indentWriter.Write(s, objs) - member _.WriteLine(s: string) = + member __.WriteLine(s: string) = indentWriter.WriteLine("{0}", s) - member _.WriteLine(s: string, [] objs: obj []) = + member __.WriteLine(s: string, [] objs: obj []) = indentWriter.WriteLine(s, objs) member x.WriteBlankLines count = for _ in 0 .. count - 1 do x.WriteLine "" - member _.Indent i = + member __.Indent i = indentWriter.Indent <- indentWriter.Indent + i - member _.Unindent i = + member __.Unindent i = indentWriter.Indent <- max 0 (indentWriter.Indent - i) - member _.Dump() = + member __.Dump() = indentWriter.InnerWriter.ToString() interface IDisposable with - member _.Dispose() = + member __.Dispose() = stringWriter.Dispose() indentWriter.Dispose() @@ -71,7 +70,7 @@ module internal CodeGenerationUtils = /// Represent environment where a captured identifier should be renamed type NamesWithIndices = Map> - let keywordSet = set FSharpKeywords.KeywordNames + let keywordSet = set PrettyNaming.KeywordNames /// Rename a given argument if the identifier has been used let normalizeArgName (namesWithIndices: NamesWithIndices) nm = @@ -104,16 +103,14 @@ module internal CodeGenerationUtils = /// Capture information about an interface in ASTs [] type InterfaceData = - | Interface of interfaceType: SynType * memberDefns: SynMemberDefns option - | ObjExpr of objType: SynType * bindings: SynBinding list - + | Interface of SynType * SynMemberDefns option + | ObjExpr of SynType * SynBinding list member x.Range = match x with | InterfaceData.Interface(ty, _) -> ty.Range | InterfaceData.ObjExpr(ty, _) -> ty.Range - member x.TypeParameters = match x with | InterfaceData.Interface(StripParenTypes ty, _) @@ -127,11 +124,11 @@ type InterfaceData = sprintf "- %s" s let rec (|TypeIdent|_|) = function - | SynType.Var(SynTypar(s, req, _), _) -> + | SynType.Var(SynTypar.Typar(s, req, _), _) -> match req with - | TyparStaticReq.None -> + | NoStaticReq -> Some ("'" + s.idText) - | TyparStaticReq.HeadType -> + | HeadTypeStaticReq -> Some ("^" + s.idText) | SynType.LongIdent(LongIdentWithDots(xs, _)) -> xs |> Seq.map (fun x -> x.idText) |> String.concat "." |> Some @@ -178,25 +175,18 @@ module InterfaceStubGenerator = type internal Context = { Writer: ColumnIndentedTextWriter - /// Map generic types to specific instances for specialized interface implementation TypeInstantations: Map - /// Data for interface instantiation ArgInstantiations: (FSharpGenericParameter * FSharpType) seq - /// Indentation inside method bodies Indentation: int - /// Object identifier of the interface e.g. 'x', 'this', '__', etc. ObjectIdent: string - /// A list of lines represents skeleton of each member MethodBody: string [] - /// Context in order to display types in the short form DisplayContext: FSharpDisplayContext - } // Adapt from MetadataFormat module in FSharp.Formatting @@ -232,7 +222,7 @@ module InterfaceStubGenerator = let nm, namesWithIndices = normalizeArgName namesWithIndices nm // Detect an optional argument - let isOptionalArg = arg.HasAttribute() + let isOptionalArg = Symbol.hasAttribute arg.Attributes let argName = if isOptionalArg then "?" + nm else nm (if hasTypeAnnotation && argName <> "()" then argName + ": " + formatType ctx arg.Type @@ -309,7 +299,7 @@ module InterfaceStubGenerator = else displayName let internal isEventMember (m: FSharpMemberOrFunctionOrValue) = - m.IsEvent || m.HasAttribute() + m.IsEvent || Symbol.hasAttribute m.Attributes let internal formatMember (ctx: Context) m verboseMode = let getParamArgs (argInfos: FSharpParameter list list) (ctx: Context) (v: FSharpMemberOrFunctionOrValue) = @@ -341,7 +331,7 @@ module InterfaceStubGenerator = | _, true, _, name -> name + parArgs // Ordinary functions or values | false, _, _, name when - not (v.ApparentEnclosingEntity.HasAttribute()) -> + not (Symbol.hasAttribute v.ApparentEnclosingEntity.Attributes) -> name + " " + parArgs // Ordinary static members or things (?) that require fully qualified access | _, _, _, name -> name + parArgs @@ -495,10 +485,10 @@ module InterfaceStubGenerator = |> Seq.distinct /// Get members in the decreasing order of inheritance chain - let GetInterfaceMembers (entity: FSharpEntity) = + let getInterfaceMembers (e: FSharpEntity) = seq { - for (iface, instantiations) in getInterfaces entity do - yield! iface.TryGetMembersFunctionsAndValues() + for (iface, instantiations) in getInterfaces e do + yield! iface.TryGetMembersFunctionsAndValues |> Seq.choose (fun m -> // Use this hack when FCS doesn't return enough information on .NET properties and events if m.IsProperty || m.IsEventAddMethod || m.IsEventRemoveMethod then @@ -507,8 +497,8 @@ module InterfaceStubGenerator = } /// Check whether an interface is empty - let HasNoInterfaceMember entity = - GetInterfaceMembers entity |> Seq.isEmpty + let hasNoInterfaceMember e = + getInterfaceMembers e |> Seq.isEmpty let internal (|LongIdentPattern|_|) = function | SynPat.LongIdent(LongIdentWithDots(xs, _), _, _, _, _, _) -> @@ -522,14 +512,14 @@ module InterfaceStubGenerator = // On merged properties (consisting both getters and setters), they have the same range values, // so we use 'get_' and 'set_' prefix to ensure corresponding symbols are retrieved correctly. let internal (|MemberNameAndRange|_|) = function - | SynBinding(_access, _bindingKind, _isInline, _isMutable, _attrs, _xmldoc, SynValData(Some mf, _, _), LongIdentPattern(name, range), - _retTy, _expr, _bindingRange, _seqPoint) when mf.MemberKind = SynMemberKind.PropertyGet -> + | Binding(_access, _bindingKind, _isInline, _isMutable, _attrs, _xmldoc, SynValData(Some mf, _, _), LongIdentPattern(name, range), + _retTy, _expr, _bindingRange, _seqPoint) when mf.MemberKind = MemberKind.PropertyGet -> if name.StartsWithOrdinal("get_") then Some(name, range) else Some("get_" + name, range) - | SynBinding(_access, _bindingKind, _isInline, _isMutable, _attrs, _xmldoc, SynValData(Some mf, _, _), LongIdentPattern(name, range), - _retTy, _expr, _bindingRange, _seqPoint) when mf.MemberKind = SynMemberKind.PropertySet -> + | Binding(_access, _bindingKind, _isInline, _isMutable, _attrs, _xmldoc, SynValData(Some mf, _, _), LongIdentPattern(name, range), + _retTy, _expr, _bindingRange, _seqPoint) when mf.MemberKind = MemberKind.PropertySet -> if name.StartsWithOrdinal("set_") then Some(name, range) else Some("set_" + name, range) - | SynBinding(_access, _bindingKind, _isInline, _isMutable, _attrs, _xmldoc, _valData, LongIdentPattern(name, range), - _retTy, _expr, _bindingRange, _seqPoint) -> + | Binding(_access, _bindingKind, _isInline, _isMutable, _attrs, _xmldoc, _valData, LongIdentPattern(name, range), + _retTy, _expr, _bindingRange, _seqPoint) -> Some(name, range) | _ -> None @@ -537,8 +527,7 @@ module InterfaceStubGenerator = /// Get associated member names and ranges /// In case of properties, intrinsic ranges might not be correct for the purpose of getting /// positions of 'member', which indicate the indentation for generating new members - let GetMemberNameAndRanges interfaceData = - match interfaceData with + let getMemberNameAndRanges = function | InterfaceData.Interface(_, None) -> [] | InterfaceData.Interface(_, Some memberDefns) -> @@ -560,7 +549,7 @@ module InterfaceStubGenerator = /// (1) Crack ASTs to get member names and their associated ranges /// (2) Check symbols of those members based on ranges /// (3) If any symbol found, capture its member signature - let GetImplementedMemberSignatures (getMemberByLocation: string * range -> FSharpSymbolUse option) displayContext interfaceData = + let getImplementedMemberSignatures (getMemberByLocation: string * range -> FSharpSymbolUse option) displayContext interfaceData = let formatMemberSignature (symbolUse: FSharpSymbolUse) = match symbolUse.Symbol with | :? FSharpMemberOrFunctionOrValue as m -> @@ -579,7 +568,7 @@ module InterfaceStubGenerator = None async { let symbolUses = - GetMemberNameAndRanges interfaceData + getMemberNameAndRanges interfaceData |> List.toArray |> Array.map getMemberByLocation return symbolUses |> Array.choose (Option.bind formatMemberSignature >> Option.map String.Concat) @@ -587,14 +576,14 @@ module InterfaceStubGenerator = } /// Check whether an entity is an interface or type abbreviation of an interface - let rec IsInterface (entity: FSharpEntity) = - entity.IsInterface || (entity.IsFSharpAbbreviation && IsInterface entity.AbbreviatedType.TypeDefinition) + let rec isInterface (e: FSharpEntity) = + e.IsInterface || (e.IsFSharpAbbreviation && isInterface e.AbbreviatedType.TypeDefinition) /// Generate stub implementation of an interface at a start column - let FormatInterface startColumn indentation (typeInstances: string []) objectIdent + let formatInterface startColumn indentation (typeInstances: string []) objectIdent (methodBody: string) (displayContext: FSharpDisplayContext) excludedMemberSignatures (e: FSharpEntity) verboseMode = - Debug.Assert(IsInterface e, "The entity should be an interface.") + Debug.Assert(isInterface e, "The entity should be an interface.") let lines = String.getLines methodBody use writer = new ColumnIndentedTextWriter() let typeParams = Seq.map getTypeParameterName e.GenericParameters @@ -615,7 +604,7 @@ module InterfaceStubGenerator = let ctx = { Writer = writer; TypeInstantations = instantiations; ArgInstantiations = Seq.empty; Indentation = indentation; ObjectIdent = objectIdent; MethodBody = lines; DisplayContext = displayContext } let missingMembers = - GetInterfaceMembers e + getInterfaceMembers e |> Seq.groupBy (fun (m, insts) -> match m with | _ when isEventMember m -> @@ -679,7 +668,7 @@ module InterfaceStubGenerator = writer.Dump() /// Find corresponding interface declaration at a given position - let TryFindInterfaceDeclaration (pos: pos) (parsedInput: ParsedInput) = + let tryFindInterfaceDeclaration (pos: pos) (parsedInput: ParsedInput) = let rec walkImplFileInput (ParsedImplFileInput (modules = moduleOrNamespaceList)) = List.tryPick walkSynModuleOrNamespace moduleOrNamespaceList @@ -713,7 +702,7 @@ module InterfaceStubGenerator = | SynModuleDecl.Open _ -> None - and walkSynTypeDefn(SynTypeDefn(_componentInfo, representation, members, _, range)) = + and walkSynTypeDefn(TypeDefn(_componentInfo, representation, members, range)) = if not <| rangeContainsPos range pos then None else @@ -758,7 +747,7 @@ module InterfaceStubGenerator = | SynMemberDefn.Inherit _ -> None | SynMemberDefn.ImplicitInherit (_, expr, _, _) -> walkExpr expr - and walkBinding (SynBinding(_access, _bindingKind, _isInline, _isMutable, _attrs, _xmldoc, _valData, _headPat, _retTy, expr, _bindingRange, _seqPoint)) = + and walkBinding (Binding(_access, _bindingKind, _isInline, _isMutable, _attrs, _xmldoc, _valData, _headPat, _retTy, expr, _bindingRange, _seqPoint)) = walkExpr expr and walkExpr expr = @@ -793,7 +782,7 @@ module InterfaceStubGenerator = if rangeContainsPos ty.Range pos then Some (InterfaceData.ObjExpr(ty, binds)) else - ifaces |> List.tryPick (fun (SynInterfaceImpl(ty, binds, range)) -> + ifaces |> List.tryPick (fun (InterfaceImpl(ty, binds, range)) -> if rangeContainsPos range pos then Some (InterfaceData.ObjExpr(ty, binds)) else None) @@ -817,10 +806,10 @@ module InterfaceStubGenerator = walkExpr synExpr | SynExpr.MatchLambda (_isExnMatch, _argm, synMatchClauseList, _spBind, _wholem) -> - synMatchClauseList |> List.tryPick (fun (SynMatchClause(_, _, e, _, _)) -> walkExpr e) + synMatchClauseList |> List.tryPick (fun (Clause(_, _, e, _, _)) -> walkExpr e) | SynExpr.Match (_sequencePointInfoForBinding, synExpr, synMatchClauseList, _range) -> walkExpr synExpr - |> Option.orElse (synMatchClauseList |> List.tryPick (fun (SynMatchClause(_, _, e, _, _)) -> walkExpr e)) + |> Option.orElse (synMatchClauseList |> List.tryPick (fun (Clause(_, _, e, _, _)) -> walkExpr e)) | SynExpr.Lazy (synExpr, _range) -> walkExpr synExpr @@ -938,3 +927,4 @@ module InterfaceStubGenerator = None | ParsedInput.ImplFile input -> walkImplFileInput input +#endif diff --git a/src/fsharp/service/ServiceInterfaceStubGenerator.fsi b/src/fsharp/service/ServiceInterfaceStubGenerator.fsi index c75748f962a..8d22896fdd3 100644 --- a/src/fsharp/service/ServiceInterfaceStubGenerator.fsi +++ b/src/fsharp/service/ServiceInterfaceStubGenerator.fsi @@ -1,43 +1,41 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.EditorServices - -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Symbols -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text +namespace FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Range +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.SyntaxTree + +#if !FX_NO_INDENTED_TEXT_WRITER /// Capture information about an interface in ASTs [] type InterfaceData = - | Interface of interfaceType: SynType * memberDefns: SynMemberDefns option - | ObjExpr of objType: SynType * bindings: SynBinding list - - member Range: range - - member TypeParameters: string[] + | Interface of SynType * SynMemberDefns option + | ObjExpr of SynType * SynBinding list + member Range : range + member TypeParameters : string[] module InterfaceStubGenerator = /// Get members in the decreasing order of inheritance chain - val GetInterfaceMembers: entity: FSharpEntity -> seq> + val getInterfaceMembers : FSharpEntity -> seq> /// Check whether an interface is empty - val HasNoInterfaceMember: entity: FSharpEntity -> bool + val hasNoInterfaceMember : FSharpEntity -> bool - /// Get associated member names and ranges. + /// Get associated member names and ranges /// In case of properties, intrinsic ranges might not be correct for the purpose of getting /// positions of 'member', which indicate the indentation for generating new members - val GetMemberNameAndRanges: interfaceData: InterfaceData -> (string * range) list + val getMemberNameAndRanges : InterfaceData -> (string * range) list - /// Get interface member signatures - val GetImplementedMemberSignatures: getMemberByLocation: (string * range -> FSharpSymbolUse option) -> FSharpDisplayContext -> InterfaceData -> Async> + val getImplementedMemberSignatures : getMemberByLocation: (string * range -> FSharpSymbolUse option) -> FSharpDisplayContext -> InterfaceData -> Async> /// Check whether an entity is an interface or type abbreviation of an interface - val IsInterface: entity: FSharpEntity -> bool + val isInterface : FSharpEntity -> bool /// Generate stub implementation of an interface at a start column - val FormatInterface: startColumn: int -> indentation: int -> typeInstances: string [] -> objectIdent: string -> methodBody: string -> displayContext: FSharpDisplayContext -> excludedMemberSignatures: Set -> FSharpEntity -> verboseMode: bool -> string + val formatInterface : startColumn: int -> indentation: int -> typeInstances: string [] -> objectIdent: string -> methodBody: string -> displayContext: FSharpDisplayContext -> excludedMemberSignatures : Set -> FSharpEntity -> verboseMode : bool -> string /// Find corresponding interface declaration at a given position - val TryFindInterfaceDeclaration: pos: pos -> parsedInput: ParsedInput -> InterfaceData option + val tryFindInterfaceDeclaration: pos -> parsedInput: ParsedInput -> InterfaceData option +#endif diff --git a/src/fsharp/service/ServiceLexing.fs b/src/fsharp/service/ServiceLexing.fs old mode 100644 new mode 100755 index b0b66a6f35d..e868a953c94 --- a/src/fsharp/service/ServiceLexing.fs +++ b/src/fsharp/service/ServiceLexing.fs @@ -1,36 +1,41 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.Tokenization +//---------------------------------------------------------------------------- +// Open up the compiler as an incremental service for lexing. +//-------------------------------------------------------------------------- + +namespace FSharp.Compiler.SourceCodeServices open System open System.Collections.Generic -open System.Threading -open FSharp.Compiler.IO -open Internal.Utilities -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras + open FSharp.Compiler -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features open FSharp.Compiler.Lexhelp +open FSharp.Compiler.Lib +open FSharp.Compiler.ParseAndCheckInputs open FSharp.Compiler.Parser open FSharp.Compiler.ParseHelpers -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Position -open FSharp.Compiler.Text.Range +open FSharp.Compiler.Range + +open Internal.Utilities + +type Position = int * int + +type Range = Position * Position module FSharpTokenTag = let Identifier = tagOfToken (IDENT "a") - let String = tagOfToken (STRING ("a", SynStringKind.Regular, LexCont.Default)) + let String = tagOfToken (STRING ("a", LexCont.Default)) let IDENT = tagOfToken (IDENT "a") - let HASH_IDENT = tagOfToken (HASH_IDENT "a") let STRING = String - let INTERP_STRING_BEGIN_END = tagOfToken (INTERP_STRING_BEGIN_END ("a", SynStringKind.Regular, LexCont.Default)) - let INTERP_STRING_BEGIN_PART = tagOfToken (INTERP_STRING_BEGIN_PART ("a", SynStringKind.Regular, LexCont.Default)) + let INTERP_STRING_BEGIN_END = tagOfToken (INTERP_STRING_BEGIN_END ("a", LexCont.Default)) + let INTERP_STRING_BEGIN_PART = tagOfToken (INTERP_STRING_BEGIN_PART ("a", LexCont.Default)) let INTERP_STRING_PART = tagOfToken (INTERP_STRING_PART ("a", LexCont.Default)) let INTERP_STRING_END = tagOfToken (INTERP_STRING_END ("a", LexCont.Default)) let LPAREN = tagOfToken LPAREN @@ -168,7 +173,6 @@ module internal TokenClassifications = let tokenInfo token = match token with - | HASH_IDENT s | IDENT s -> if s.Length <= 0 then System.Diagnostics.Debug.Assert(false, "BUG: Received zero length IDENT token.") @@ -370,15 +374,15 @@ module internal LexerStateEncoding = | COMMENT cont | LINE_COMMENT cont | STRING_TEXT cont - | EOF cont - | INTERP_STRING_BEGIN_PART (_, _, cont) + | EOF cont + | INTERP_STRING_BEGIN_PART (_, cont) | INTERP_STRING_PART (_, cont) - | INTERP_STRING_BEGIN_END (_, _, cont) + | INTERP_STRING_BEGIN_END (_, cont) | INTERP_STRING_END (_, cont) | LBRACE cont | RBRACE cont - | BYTEARRAY (_, _, cont) - | STRING (_, _, cont) -> cont + | BYTEARRAY (_, cont) + | STRING (_, cont) -> cont | _ -> prevLexcont // Note that this will discard all lexcont state, including the ifdefStack. @@ -396,7 +400,7 @@ module internal LexerStateEncoding = + hardwhiteNumBits + ifdefstackCountNumBits + ifdefstackNumBits - + stringKindBits + + stringKindBits + nestingBits <= 64) let lexstateStart = 0 @@ -425,13 +429,13 @@ module internal LexerStateEncoding = (int64 state <<< lexstateStart) &&& lexstateMask let encodeStringStyle kind = - match kind with + match kind with | LexerStringStyle.SingleQuote -> 0 | LexerStringStyle.Verbatim -> 1 | LexerStringStyle.TripleQuote -> 2 let decodeStringStyle kind = - match kind with + match kind with | 0 -> LexerStringStyle.SingleQuote | 1 -> LexerStringStyle.Verbatim | 2 -> LexerStringStyle.TripleQuote @@ -453,12 +457,12 @@ module internal LexerStateEncoding = (if stringKind.IsInterpolatedFirst then 0b001 else 0) let nestingValue = - let tag1, i1, kind1, rest = - match stringNest with + let tag1, i1, kind1, rest = + match stringNest with | [] -> false, 0, 0, [] | (i1, kind1, _)::rest -> true, i1, encodeStringStyle kind1, rest - let tag2, i2, kind2 = - match rest with + let tag2, i2, kind2 = + match rest with | [] -> false, 0, 0 | (i2, kind2, _)::_ -> true, i2, encodeStringStyle kind2 (if tag1 then 0b100000000000 else 0) ||| @@ -514,9 +518,9 @@ module internal LexerStateEncoding = let i2 = ((nestingValue &&& 0b000001110000) >>> 4) let kind1 = ((nestingValue &&& 0b000000001100) >>> 2) let kind2 = ((nestingValue &&& 0b000000000011) >>> 0) - [ if tag1 then + [ if tag1 then i1, decodeStringStyle kind1, range0 - if tag2 then + if tag2 then i2, decodeStringStyle kind2, range0 ] @@ -529,14 +533,14 @@ module internal LexerStateEncoding = | LexCont.IfDefSkip (ifdefs, stringNest, n, m) -> encodeLexCont (FSharpTokenizerColorState.IfDefSkip, int64 n, m.Start, ifdefs, lightStatus, LexerStringKind.String, stringNest) | LexCont.EndLine(ifdefs, stringNest, econt) -> - match econt with - | LexerEndlineContinuation.Skip(n, m) -> + match econt with + | LexerEndlineContinuation.Skip(n, m) -> encodeLexCont (FSharpTokenizerColorState.EndLineThenSkip, int64 n, m.Start, ifdefs, lightStatus, LexerStringKind.String, stringNest) | LexerEndlineContinuation.Token -> encodeLexCont (FSharpTokenizerColorState.EndLineThenToken, 0L, pos0, ifdefs, lightStatus, LexerStringKind.String, stringNest) | LexCont.String (ifdefs, stringNest, style, kind, m) -> - let state = - match style with + let state = + match style with | LexerStringStyle.SingleQuote -> FSharpTokenizerColorState.String | LexerStringStyle.Verbatim -> FSharpTokenizerColorState.VerbatimString | LexerStringStyle.TripleQuote -> FSharpTokenizerColorState.TripleQuoteString @@ -546,15 +550,15 @@ module internal LexerStateEncoding = | LexCont.SingleLineComment (ifdefs, stringNest, n, m) -> encodeLexCont (FSharpTokenizerColorState.SingleLineComment, int64 n, m.Start, ifdefs, lightStatus, LexerStringKind.String, stringNest) | LexCont.StringInComment (ifdefs, stringNest, style, n, m) -> - let state = - match style with + let state = + match style with | LexerStringStyle.SingleQuote -> FSharpTokenizerColorState.StringInComment | LexerStringStyle.Verbatim -> FSharpTokenizerColorState.VerbatimStringInComment | LexerStringStyle.TripleQuote -> FSharpTokenizerColorState.TripleQuoteStringInComment encodeLexCont (state, int64 n, m.Start, ifdefs, lightStatus, LexerStringKind.String, stringNest) | LexCont.MLOnly (ifdefs, stringNest, m) -> encodeLexCont (FSharpTokenizerColorState.CamlOnly, 0L, m.Start, ifdefs, lightStatus, LexerStringKind.String, stringNest) - + let decodeLexInt (state: FSharpTokenizerLexState) = let tag, n1, p1, ifdefs, lightSyntaxStatusInitial, stringKind, stringNest = decodeLexCont state let lexcont = @@ -581,7 +585,7 @@ module internal LexerStateEncoding = LexCont.String (ifdefs, stringNest, LexerStringStyle.Verbatim, stringKind, mkRange "file" p1 p1) | FSharpTokenizerColorState.TripleQuoteString -> LexCont.String (ifdefs, stringNest, LexerStringStyle.TripleQuote, stringKind, mkRange "file" p1 p1) - | FSharpTokenizerColorState.EndLineThenSkip -> + | FSharpTokenizerColorState.EndLineThenSkip -> LexCont.EndLine(ifdefs, stringNest, LexerEndlineContinuation.Skip(n1, mkRange "file" p1 p1)) | FSharpTokenizerColorState.EndLineThenToken -> LexCont.EndLine(ifdefs, stringNest, LexerEndlineContinuation.Token) @@ -609,7 +613,7 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, let skip = false // don't skip whitespace in the lexer let mutable singleLineTokenState = SingleLineTokenState.BeforeHash - let fsx = + let fsx = match filename with | None -> false | Some value -> ParseAndCheckInputs.IsScript value @@ -693,12 +697,12 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, lexargs.stringNest <- stringNest Lexer.endline cont lexargs skip lexbuf - | LexCont.Token (ifdefs, stringNest) -> + | LexCont.Token (ifdefs, stringNest) -> lexargs.ifdefStack <- ifdefs lexargs.stringNest <- stringNest Lexer.token lexargs skip lexbuf - | LexCont.IfDefSkip (ifdefs, stringNest, n, m) -> + | LexCont.IfDefSkip (ifdefs, stringNest, n, m) -> lexargs.ifdefStack <- ifdefs lexargs.stringNest <- stringNest Lexer.ifdefSkip n m lexargs skip lexbuf @@ -706,9 +710,9 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, | LexCont.String (ifdefs, stringNest, style, kind, m) -> lexargs.ifdefStack <- ifdefs lexargs.stringNest <- stringNest - use buf = ByteBuffer.Create (Lexer.StringCapacity) + let buf = ByteBuffer.Create 100 let args = (buf, LexerStringFinisher.Default, m, kind, lexargs) - match style with + match style with | LexerStringStyle.SingleQuote -> Lexer.singleQuoteString args skip lexbuf | LexerStringStyle.Verbatim -> Lexer.verbatimString args skip lexbuf | LexerStringStyle.TripleQuote -> Lexer.tripleQuoteString args skip lexbuf @@ -727,7 +731,7 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, | LexCont.StringInComment (ifdefs, stringNest, style, n, m) -> lexargs.ifdefStack <- ifdefs lexargs.stringNest <- stringNest - match style with + match style with | LexerStringStyle.SingleQuote -> Lexer.stringInComment n m lexargs skip lexbuf | LexerStringStyle.Verbatim -> Lexer.verbatimStringInComment n m lexargs skip lexbuf | LexerStringStyle.TripleQuote -> Lexer.tripleQuoteStringInComment n m lexargs skip lexbuf @@ -770,9 +774,6 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, false, processHashEndElse m.StartColumn lineStr 4 cont | HASH_ENDIF (m, lineStr, cont) when lineStr <> "" -> false, processHashEndElse m.StartColumn lineStr 5 cont - | HASH_IDENT(ident) -> - delayToken(IDENT (ident), leftc + 1, rightc) - false, (HASH, leftc, leftc) | RQUOTE_DOT (s, raw) -> delayToken(DOT, rightc, rightc) false, (RQUOTE (s, raw), leftc, rightc - 1) @@ -844,7 +845,7 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, let lexcontFinal = // If we're using token from cache, we don't move forward with lexing - if isCached then lexcont + if isCached then lexcont else LexerStateEncoding.computeNextLexState token lexcont let tokenTag = tagOfToken token @@ -922,607 +923,604 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, type FSharpSourceTokenizer(conditionalDefines: string list, filename: string option) = // Public callers are unable to answer LanguageVersion feature support questions. - // External Tools including the VS IDE will enable the default LanguageVersion + // External Tools including the VS IDE will enable the default LanguageVersion let isFeatureSupported (_featureId:LanguageFeature) = true - let reportLibraryOnlyFeatures = true - + let lexResourceManager = new Lexhelp.LexResourceManager() let lexargs = mkLexargs(conditionalDefines, LightSyntaxStatus(true, false), lexResourceManager, [], DiscardErrorsLogger, PathMap.empty) member _.CreateLineTokenizer(lineText: string) = - let lexbuf = UnicodeLexing.StringAsLexbuf(reportLibraryOnlyFeatures, isFeatureSupported, lineText) + let lexbuf = UnicodeLexing.StringAsLexbuf(isFeatureSupported, lineText) FSharpLineTokenizer(lexbuf, Some lineText.Length, filename, lexargs) member _.CreateBufferTokenizer bufferFiller = - let lexbuf = UnicodeLexing.FunctionAsLexbuf(reportLibraryOnlyFeatures, isFeatureSupported, bufferFiller) + let lexbuf = UnicodeLexing.FunctionAsLexbuf(isFeatureSupported, bufferFiller) FSharpLineTokenizer(lexbuf, None, filename, lexargs) -module FSharpKeywords = +module Keywords = open FSharp.Compiler.Lexhelp.Keywords let DoesIdentifierNeedQuotation s = DoesIdentifierNeedQuotation s - let QuoteIdentifierIfNeeded s = QuoteIdentifierIfNeeded s - let NormalizeIdentifierBackticks s = NormalizeIdentifierBackticks s - let KeywordsWithDescription = keywordsWithDescription - let KeywordNames = Lexhelp.Keywords.keywordNames - -[] -type FSharpLexerFlags = - | Default = 0x11011 - | LightSyntaxOn = 0x00001 - | Compiling = 0x00010 - | CompilingFSharpCore = 0x00110 - | SkipTrivia = 0x01000 - | UseLexFilter = 0x10000 - -[] -type FSharpTokenKind = - | None - | HashIf - | HashElse - | HashEndIf - | CommentTrivia - | WhitespaceTrivia - | HashLine - | HashLight - | InactiveCode - | LineCommentTrivia - | StringText - | Fixed - | OffsideInterfaceMember - | OffsideBlockEnd - | OffsideRightBlockEnd - | OffsideDeclEnd - | OffsideEnd - | OffsideBlockSep - | OffsideBlockBegin - | OffsideReset - | OffsideFun - | OffsideFunction - | OffsideWith - | OffsideElse - | OffsideThen - | OffsideDoBang - | OffsideDo - | OffsideBinder - | OffsideLet - | HighPrecedenceTypeApp - | HighPrecedenceParenthesisApp - | HighPrecedenceBracketApp - | Extern - | Void - | Public - | Private - | Internal - | Global - | Static - | Member - | Class - | Abstract - | Override - | Default - | Constructor - | Inherit - | GreaterRightBracket - | Struct - | Sig - | Bar - | RightBracket - | RightBrace - | Minus - | Dollar - | BarRightBracket - | BarRightBrace - | Underscore - | Semicolon - | SemicolonSemicolon - | LeftArrow - | Equals - | LeftBracket - | LeftBracketBar - | LeftBraceBar - | LeftBracketLess - | LeftBrace - | QuestionMark - | QuestionMarkQuestionMark - | Dot - | Colon - | ColonColon - | ColonGreater - | ColonQuestionMark - | ColonQuestionMarkGreater - | ColonEquals - | When - | While - | With - | Hash - | Ampersand - | AmpersandAmpersand - | Quote - | LeftParenthesis - | RightParenthesis - | Star - | Comma - | RightArrow - | GreaterBarRightBracket - | LeftParenthesisStarRightParenthesis - | Open - | Or - | Rec - | Then - | To - | True - | Try - | Type - | Val - | Inline - | Interface - | Instance - | Const - | Lazy - | OffsideLazy - | Match - | MatchBang - | Mutable - | New - | Of - | Exception - | False - | For - | Fun - | Function - | If - | In - | JoinIn - | Finally - | DoBang - | And - | As - | Assert - | OffsideAssert - | Begin - | Do - | Done - | DownTo - | Else - | Elif - | End - | DotDot - | DotDotHat - | BarBar - | Upcast - | Downcast - | Null - | Reserved - | Module - | Namespace - | Delegate - | Constraint - | Base - | LeftQuote - | RightQuote - | RightQuoteDot - | PercentOperator - | Binder - | Less - | Greater - | Let - | Yield - | YieldBang - | BigNumber - | Decimal - | Char - | Ieee64 - | Ieee32 - | NativeInt - | UNativeInt - | UInt64 - | UInt32 - | UInt16 - | UInt8 - | Int64 - | Int32 - | Int32DotDot - | Int16 - | Int8 - | FunkyOperatorName - | AdjacentPrefixOperator - | PlusMinusOperator - | InfixAmpersandOperator - | InfixStarDivideModuloOperator - | PrefixOperator - | InfixBarOperator - | InfixAtHatOperator - | InfixCompareOperator - | InfixStarStarOperator - | Identifier - | KeywordString - | String - | ByteArray - | Asr - | InfixAsr - | InfixLand - | InfixLor - | InfixLsl - | InfixLsr - | InfixLxor - | InfixMod - -[] -type FSharpToken = - - val private tok: Parser.token - val private tokRange: range - - new (tok, tokRange) = { tok = tok; tokRange = tokRange } - - member this.Range = this.tokRange - - member this.Kind = - match this.tok with - | ASR -> FSharpTokenKind.Asr - | INFIX_STAR_STAR_OP "asr" -> FSharpTokenKind.Asr - | INFIX_STAR_DIV_MOD_OP "land" -> FSharpTokenKind.InfixLand - | INFIX_STAR_DIV_MOD_OP "lor" -> FSharpTokenKind.InfixLor - | INFIX_STAR_STAR_OP "lsl" -> FSharpTokenKind.InfixLsl - | INFIX_STAR_STAR_OP "lsr" -> FSharpTokenKind.InfixLsr - | INFIX_STAR_DIV_MOD_OP "lxor" -> FSharpTokenKind.InfixLxor - | INFIX_STAR_DIV_MOD_OP "mod" -> FSharpTokenKind.InfixMod - | HASH_IF _ -> FSharpTokenKind.HashIf - | HASH_ELSE _ -> FSharpTokenKind.HashElse - | HASH_ENDIF _ -> FSharpTokenKind.HashEndIf - | COMMENT _ -> FSharpTokenKind.CommentTrivia - | WHITESPACE _ -> FSharpTokenKind.WhitespaceTrivia - | HASH_LINE _ -> FSharpTokenKind.HashLine - | HASH_LIGHT _ -> FSharpTokenKind.HashLight - | INACTIVECODE _ -> FSharpTokenKind.InactiveCode - | LINE_COMMENT _ -> FSharpTokenKind.LineCommentTrivia - | STRING_TEXT _ -> FSharpTokenKind.StringText - | FIXED -> FSharpTokenKind.Fixed - | OINTERFACE_MEMBER -> FSharpTokenKind.OffsideInterfaceMember - | OBLOCKEND -> FSharpTokenKind.OffsideBlockEnd - | ORIGHT_BLOCK_END -> FSharpTokenKind.OffsideRightBlockEnd - | ODECLEND -> FSharpTokenKind.OffsideDeclEnd - | OEND -> FSharpTokenKind.OffsideEnd - | OBLOCKSEP -> FSharpTokenKind.OffsideBlockSep - | OBLOCKBEGIN -> FSharpTokenKind.OffsideBlockBegin - | ORESET -> FSharpTokenKind.OffsideReset - | OFUN -> FSharpTokenKind.OffsideFun - | OFUNCTION -> FSharpTokenKind.OffsideFunction - | OWITH -> FSharpTokenKind.OffsideWith - | OELSE -> FSharpTokenKind.OffsideElse - | OTHEN -> FSharpTokenKind.OffsideThen - | ODO_BANG -> FSharpTokenKind.OffsideDoBang - | ODO -> FSharpTokenKind.OffsideDo - | OBINDER _ -> FSharpTokenKind.OffsideBinder - | OLET _ -> FSharpTokenKind.OffsideLet - | HIGH_PRECEDENCE_TYAPP -> FSharpTokenKind.HighPrecedenceTypeApp - | HIGH_PRECEDENCE_PAREN_APP -> FSharpTokenKind.HighPrecedenceParenthesisApp - | HIGH_PRECEDENCE_BRACK_APP -> FSharpTokenKind.HighPrecedenceBracketApp - | EXTERN -> FSharpTokenKind.Extern - | VOID -> FSharpTokenKind.Void - | PUBLIC -> FSharpTokenKind.Public - | PRIVATE -> FSharpTokenKind.Private - | INTERNAL -> FSharpTokenKind.Internal - | GLOBAL -> FSharpTokenKind.Global - | STATIC -> FSharpTokenKind.Static - | MEMBER -> FSharpTokenKind.Member - | CLASS -> FSharpTokenKind.Class - | ABSTRACT -> FSharpTokenKind.Abstract - | OVERRIDE -> FSharpTokenKind.Override - | DEFAULT -> FSharpTokenKind.Default - | CONSTRUCTOR -> FSharpTokenKind.Constructor - | INHERIT -> FSharpTokenKind.Inherit - | GREATER_RBRACK -> FSharpTokenKind.GreaterRightBracket - | STRUCT -> FSharpTokenKind.Struct - | SIG -> FSharpTokenKind.Sig - | BAR -> FSharpTokenKind.Bar - | RBRACK -> FSharpTokenKind.RightBracket - | RBRACE _ -> FSharpTokenKind.RightBrace - | MINUS -> FSharpTokenKind.Minus - | DOLLAR -> FSharpTokenKind.Dollar - | BAR_RBRACK -> FSharpTokenKind.BarRightBracket - | BAR_RBRACE -> FSharpTokenKind.BarRightBrace - | UNDERSCORE -> FSharpTokenKind.Underscore - | SEMICOLON_SEMICOLON -> FSharpTokenKind.SemicolonSemicolon - | LARROW -> FSharpTokenKind.LeftArrow - | EQUALS -> FSharpTokenKind.Equals - | LBRACK -> FSharpTokenKind.LeftBracket - | LBRACK_BAR -> FSharpTokenKind.LeftBracketBar - | LBRACE_BAR -> FSharpTokenKind.LeftBraceBar - | LBRACK_LESS -> FSharpTokenKind.LeftBracketLess - | LBRACE _ -> FSharpTokenKind.LeftBrace - | QMARK -> FSharpTokenKind.QuestionMark - | QMARK_QMARK -> FSharpTokenKind.QuestionMarkQuestionMark - | DOT -> FSharpTokenKind.Dot - | COLON -> FSharpTokenKind.Colon - | COLON_COLON -> FSharpTokenKind.ColonColon - | COLON_GREATER -> FSharpTokenKind.ColonGreater - | COLON_QMARK_GREATER -> FSharpTokenKind.ColonQuestionMarkGreater - | COLON_QMARK -> FSharpTokenKind.ColonQuestionMark - | COLON_EQUALS -> FSharpTokenKind.ColonEquals - | SEMICOLON -> FSharpTokenKind.SemicolonSemicolon - | WHEN -> FSharpTokenKind.When - | WHILE -> FSharpTokenKind.While - | WITH -> FSharpTokenKind.With - | HASH -> FSharpTokenKind.Hash - | AMP -> FSharpTokenKind.Ampersand - | AMP_AMP -> FSharpTokenKind.AmpersandAmpersand - | QUOTE -> FSharpTokenKind.RightQuote - | LPAREN -> FSharpTokenKind.LeftParenthesis - | RPAREN -> FSharpTokenKind.RightParenthesis - | STAR -> FSharpTokenKind.Star - | COMMA -> FSharpTokenKind.Comma - | RARROW -> FSharpTokenKind.RightArrow - | GREATER_BAR_RBRACK -> FSharpTokenKind.GreaterBarRightBracket - | LPAREN_STAR_RPAREN -> FSharpTokenKind.LeftParenthesisStarRightParenthesis - | OPEN -> FSharpTokenKind.Open - | OR -> FSharpTokenKind.Or - | REC -> FSharpTokenKind.Rec - | THEN -> FSharpTokenKind.Then - | TO -> FSharpTokenKind.To - | TRUE -> FSharpTokenKind.True - | TRY -> FSharpTokenKind.Try - | TYPE -> FSharpTokenKind.Type - | VAL -> FSharpTokenKind.Val - | INLINE -> FSharpTokenKind.Inline - | INTERFACE -> FSharpTokenKind.Interface - | INSTANCE -> FSharpTokenKind.Instance - | CONST -> FSharpTokenKind.Const - | LAZY -> FSharpTokenKind.Lazy - | OLAZY -> FSharpTokenKind.OffsideLazy - | MATCH -> FSharpTokenKind.Match - | MATCH_BANG -> FSharpTokenKind.MatchBang - | MUTABLE -> FSharpTokenKind.Mutable - | NEW -> FSharpTokenKind.New - | OF -> FSharpTokenKind.Of - | EXCEPTION -> FSharpTokenKind.Exception - | FALSE -> FSharpTokenKind.False - | FOR -> FSharpTokenKind.For - | FUN -> FSharpTokenKind.Fun - | FUNCTION -> FSharpTokenKind.Function - | IF -> FSharpTokenKind.If - | IN -> FSharpTokenKind.In - | JOIN_IN -> FSharpTokenKind.JoinIn - | FINALLY -> FSharpTokenKind.Finally - | DO_BANG -> FSharpTokenKind.DoBang - | AND -> FSharpTokenKind.And - | AS -> FSharpTokenKind.As - | ASSERT -> FSharpTokenKind.Assert - | OASSERT -> FSharpTokenKind.OffsideAssert - | BEGIN -> FSharpTokenKind.Begin - | DO -> FSharpTokenKind.Do - | DONE -> FSharpTokenKind.Done - | DOWNTO -> FSharpTokenKind.DownTo - | ELSE -> FSharpTokenKind.Else - | ELIF -> FSharpTokenKind.Elif - | END -> FSharpTokenKind.End - | DOT_DOT -> FSharpTokenKind.DotDot - | DOT_DOT_HAT -> FSharpTokenKind.DotDotHat - | BAR_BAR -> FSharpTokenKind.BarBar - | UPCAST -> FSharpTokenKind.Upcast - | DOWNCAST -> FSharpTokenKind.Downcast - | NULL -> FSharpTokenKind.Null - | RESERVED -> FSharpTokenKind.Reserved - | MODULE -> FSharpTokenKind.Module - | NAMESPACE -> FSharpTokenKind.Namespace - | DELEGATE -> FSharpTokenKind.Delegate - | CONSTRAINT -> FSharpTokenKind.Constraint - | BASE -> FSharpTokenKind.Base - | LQUOTE _ -> FSharpTokenKind.LeftQuote - | RQUOTE _ -> FSharpTokenKind.RightQuote - | RQUOTE_DOT _ -> FSharpTokenKind.RightQuoteDot - | PERCENT_OP _ -> FSharpTokenKind.PercentOperator - | BINDER _ -> FSharpTokenKind.Binder - | LESS _ -> FSharpTokenKind.Less - | GREATER _ -> FSharpTokenKind.Greater - | LET _ -> FSharpTokenKind.Let - | YIELD _ -> FSharpTokenKind.Yield - | YIELD_BANG _ -> FSharpTokenKind.YieldBang - | BIGNUM _ -> FSharpTokenKind.BigNumber - | DECIMAL _ -> FSharpTokenKind.Decimal - | CHAR _ -> FSharpTokenKind.Char - | IEEE64 _ -> FSharpTokenKind.Ieee64 - | IEEE32 _ -> FSharpTokenKind.Ieee32 - | NATIVEINT _ -> FSharpTokenKind.NativeInt - | UNATIVEINT _ -> FSharpTokenKind.UNativeInt - | UINT64 _ -> FSharpTokenKind.UInt64 - | UINT32 _ -> FSharpTokenKind.UInt32 - | UINT16 _ -> FSharpTokenKind.UInt16 - | UINT8 _ -> FSharpTokenKind.UInt8 - | INT64 _ -> FSharpTokenKind.UInt64 - | INT32 _ -> FSharpTokenKind.Int32 - | INT32_DOT_DOT _ -> FSharpTokenKind.Int32DotDot - | INT16 _ -> FSharpTokenKind.Int16 - | INT8 _ -> FSharpTokenKind.Int8 - | FUNKY_OPERATOR_NAME _ -> FSharpTokenKind.FunkyOperatorName - | ADJACENT_PREFIX_OP _ -> FSharpTokenKind.AdjacentPrefixOperator - | PLUS_MINUS_OP _ -> FSharpTokenKind.PlusMinusOperator - | INFIX_AMP_OP _ -> FSharpTokenKind.InfixAmpersandOperator - | INFIX_STAR_DIV_MOD_OP _ -> FSharpTokenKind.InfixStarDivideModuloOperator - | PREFIX_OP _ -> FSharpTokenKind.PrefixOperator - | INFIX_BAR_OP _ -> FSharpTokenKind.InfixBarOperator - | INFIX_AT_HAT_OP _ -> FSharpTokenKind.InfixAtHatOperator - | INFIX_COMPARE_OP _ -> FSharpTokenKind.InfixCompareOperator - | INFIX_STAR_STAR_OP _ -> FSharpTokenKind.InfixStarStarOperator - | IDENT _ -> FSharpTokenKind.Identifier - | KEYWORD_STRING _ -> FSharpTokenKind.KeywordString - | INTERP_STRING_BEGIN_END _ - | INTERP_STRING_BEGIN_PART _ - | INTERP_STRING_PART _ - | INTERP_STRING_END _ - | STRING _ -> FSharpTokenKind.String - | BYTEARRAY _ -> FSharpTokenKind.ByteArray - | _ -> FSharpTokenKind.None - - member this.IsKeyword = - match this.Kind with - | FSharpTokenKind.Abstract - | FSharpTokenKind.And - | FSharpTokenKind.As - | FSharpTokenKind.Assert - | FSharpTokenKind.OffsideAssert - | FSharpTokenKind.Base - | FSharpTokenKind.Begin - | FSharpTokenKind.Class - | FSharpTokenKind.Default - | FSharpTokenKind.Delegate - | FSharpTokenKind.Do - | FSharpTokenKind.OffsideDo - | FSharpTokenKind.Done - | FSharpTokenKind.Downcast - | FSharpTokenKind.DownTo - | FSharpTokenKind.Elif - | FSharpTokenKind.Else - | FSharpTokenKind.OffsideElse - | FSharpTokenKind.End - | FSharpTokenKind.OffsideEnd - | FSharpTokenKind.Exception - | FSharpTokenKind.Extern - | FSharpTokenKind.False - | FSharpTokenKind.Finally - | FSharpTokenKind.Fixed - | FSharpTokenKind.For - | FSharpTokenKind.Fun - | FSharpTokenKind.OffsideFun - | FSharpTokenKind.Function - | FSharpTokenKind.OffsideFunction - | FSharpTokenKind.Global - | FSharpTokenKind.If - | FSharpTokenKind.In - | FSharpTokenKind.Inherit - | FSharpTokenKind.Inline - | FSharpTokenKind.Interface - | FSharpTokenKind.OffsideInterfaceMember - | FSharpTokenKind.Internal - | FSharpTokenKind.Lazy - | FSharpTokenKind.OffsideLazy - | FSharpTokenKind.Let // "let" and "use" - | FSharpTokenKind.OffsideLet - | FSharpTokenKind.DoBang // "let!", "use!" and "do!" - | FSharpTokenKind.OffsideDoBang - | FSharpTokenKind.Match - | FSharpTokenKind.MatchBang - | FSharpTokenKind.Member - | FSharpTokenKind.Module - | FSharpTokenKind.Mutable - | FSharpTokenKind.Namespace - | FSharpTokenKind.New - // | FSharpTokenKind.Not // Not actually a keyword. However, not struct in combination is used as a generic parameter constraint. - | FSharpTokenKind.Null - | FSharpTokenKind.Of - | FSharpTokenKind.Open - | FSharpTokenKind.Or - | FSharpTokenKind.Override - | FSharpTokenKind.Private - | FSharpTokenKind.Public - | FSharpTokenKind.Rec - | FSharpTokenKind.Yield // "yield" and "return" - | FSharpTokenKind.YieldBang // "yield!" and "return!" - | FSharpTokenKind.Static - | FSharpTokenKind.Struct - | FSharpTokenKind.Then - | FSharpTokenKind.To - | FSharpTokenKind.True - | FSharpTokenKind.Try - | FSharpTokenKind.Type - | FSharpTokenKind.Upcast - | FSharpTokenKind.Val - | FSharpTokenKind.Void - | FSharpTokenKind.When - | FSharpTokenKind.While - | FSharpTokenKind.With - | FSharpTokenKind.OffsideWith - - // * Reserved - from OCAML * - | FSharpTokenKind.Asr - | FSharpTokenKind.InfixAsr - | FSharpTokenKind.InfixLand - | FSharpTokenKind.InfixLor - | FSharpTokenKind.InfixLsl - | FSharpTokenKind.InfixLsr - | FSharpTokenKind.InfixLxor - | FSharpTokenKind.InfixMod - | FSharpTokenKind.Sig - - // * Reserved - for future * - // atomic - // break - // checked - // component - // const - // constraint - // constructor - // continue - // eager - // event - // external - // functor - // include - // method - // mixin - // object - // parallel - // process - // protected - // pure - // sealed - // tailcall - // trait - // virtual - // volatile - | FSharpTokenKind.Reserved - | FSharpTokenKind.KeywordString - | FSharpTokenKind.Binder - | FSharpTokenKind.OffsideBinder -> true - | _ -> false - - member this.IsIdentifier = - match this.Kind with - | FSharpTokenKind.Identifier -> true - | _ -> false - - member this.IsStringLiteral = - match this.Kind with - | FSharpTokenKind.String -> true - | _ -> false - - member this.IsNumericLiteral = - match this.Kind with - | FSharpTokenKind.UInt8 - | FSharpTokenKind.UInt16 - | FSharpTokenKind.UInt64 - | FSharpTokenKind.Int8 - | FSharpTokenKind.Int16 - | FSharpTokenKind.Int32 - | FSharpTokenKind.Int64 - | FSharpTokenKind.Ieee32 - | FSharpTokenKind.Ieee64 - | FSharpTokenKind.BigNumber -> true - | _ -> false - - member this.IsCommentTrivia = - match this.Kind with - | FSharpTokenKind.CommentTrivia - | FSharpTokenKind.LineCommentTrivia -> true - | _ -> false - -[] -module FSharpLexerImpl = - let lexWithErrorLogger (text: ISourceText) conditionalCompilationDefines (flags: FSharpLexerFlags) reportLibraryOnlyFeatures supportsFeature errorLogger onToken pathMap (ct: CancellationToken) = +module Lexer = + + open System.Threading + open FSharp.Compiler.Text + + [] + type FSharpLexerFlags = + | Default = 0x11011 + | LightSyntaxOn = 0x00001 + | Compiling = 0x00010 + | CompilingFSharpCore = 0x00110 + | SkipTrivia = 0x01000 + | UseLexFilter = 0x10000 + + [] + type FSharpSyntaxTokenKind = + | None + | HashIf + | HashElse + | HashEndIf + | CommentTrivia + | WhitespaceTrivia + | HashLine + | HashLight + | InactiveCode + | LineCommentTrivia + | StringText + | Fixed + | OffsideInterfaceMember + | OffsideBlockEnd + | OffsideRightBlockEnd + | OffsideDeclEnd + | OffsideEnd + | OffsideBlockSep + | OffsideBlockBegin + | OffsideReset + | OffsideFun + | OffsideFunction + | OffsideWith + | OffsideElse + | OffsideThen + | OffsideDoBang + | OffsideDo + | OffsideBinder + | OffsideLet + | HighPrecedenceTypeApp + | HighPrecedenceParenthesisApp + | HighPrecedenceBracketApp + | Extern + | Void + | Public + | Private + | Internal + | Global + | Static + | Member + | Class + | Abstract + | Override + | Default + | Constructor + | Inherit + | GreaterRightBracket + | Struct + | Sig + | Bar + | RightBracket + | RightBrace + | Minus + | Dollar + | BarRightBracket + | BarRightBrace + | Underscore + | Semicolon + | SemicolonSemicolon + | LeftArrow + | Equals + | LeftBracket + | LeftBracketBar + | LeftBraceBar + | LeftBracketLess + | LeftBrace + | QuestionMark + | QuestionMarkQuestionMark + | Dot + | Colon + | ColonColon + | ColonGreater + | ColonQuestionMark + | ColonQuestionMarkGreater + | ColonEquals + | When + | While + | With + | Hash + | Ampersand + | AmpersandAmpersand + | Quote + | LeftParenthesis + | RightParenthesis + | Star + | Comma + | RightArrow + | GreaterBarRightBracket + | LeftParenthesisStarRightParenthesis + | Open + | Or + | Rec + | Then + | To + | True + | Try + | Type + | Val + | Inline + | Interface + | Instance + | Const + | Lazy + | OffsideLazy + | Match + | MatchBang + | Mutable + | New + | Of + | Exception + | False + | For + | Fun + | Function + | If + | In + | JoinIn + | Finally + | DoBang + | And + | As + | Assert + | OffsideAssert + | Begin + | Do + | Done + | DownTo + | Else + | Elif + | End + | DotDot + | DotDotHat + | BarBar + | Upcast + | Downcast + | Null + | Reserved + | Module + | Namespace + | Delegate + | Constraint + | Base + | LeftQuote + | RightQuote + | RightQuoteDot + | PercentOperator + | Binder + | Less + | Greater + | Let + | Yield + | YieldBang + | BigNumber + | Decimal + | Char + | Ieee64 + | Ieee32 + | NativeInt + | UNativeInt + | UInt64 + | UInt32 + | UInt16 + | UInt8 + | Int64 + | Int32 + | Int32DotDot + | Int16 + | Int8 + | FunkyOperatorName + | AdjacentPrefixOperator + | PlusMinusOperator + | InfixAmpersandOperator + | InfixStarDivideModuloOperator + | PrefixOperator + | InfixBarOperator + | InfixAtHatOperator + | InfixCompareOperator + | InfixStarStarOperator + | Identifier + | KeywordString + | String + | ByteArray + | Asr + | InfixAsr + | InfixLand + | InfixLor + | InfixLsl + | InfixLsr + | InfixLxor + | InfixMod + + [] + type FSharpSyntaxToken = + + val private tok: Parser.token + val private tokRange: range + + new (tok, tokRange) = { tok = tok; tokRange = tokRange } + + member this.Range = this.tokRange + + member this.Kind = + match this.tok with + | ASR -> FSharpSyntaxTokenKind.Asr + | INFIX_STAR_STAR_OP "asr" -> FSharpSyntaxTokenKind.Asr + | INFIX_STAR_DIV_MOD_OP "land" -> FSharpSyntaxTokenKind.InfixLand + | INFIX_STAR_DIV_MOD_OP "lor" -> FSharpSyntaxTokenKind.InfixLor + | INFIX_STAR_STAR_OP "lsl" -> FSharpSyntaxTokenKind.InfixLsl + | INFIX_STAR_STAR_OP "lsr" -> FSharpSyntaxTokenKind.InfixLsr + | INFIX_STAR_DIV_MOD_OP "lxor" -> FSharpSyntaxTokenKind.InfixLxor + | INFIX_STAR_DIV_MOD_OP "mod" -> FSharpSyntaxTokenKind.InfixMod + | HASH_IF _ -> FSharpSyntaxTokenKind.HashIf + | HASH_ELSE _ -> FSharpSyntaxTokenKind.HashElse + | HASH_ENDIF _ -> FSharpSyntaxTokenKind.HashEndIf + | COMMENT _ -> FSharpSyntaxTokenKind.CommentTrivia + | WHITESPACE _ -> FSharpSyntaxTokenKind.WhitespaceTrivia + | HASH_LINE _ -> FSharpSyntaxTokenKind.HashLine + | HASH_LIGHT _ -> FSharpSyntaxTokenKind.HashLight + | INACTIVECODE _ -> FSharpSyntaxTokenKind.InactiveCode + | LINE_COMMENT _ -> FSharpSyntaxTokenKind.LineCommentTrivia + | STRING_TEXT _ -> FSharpSyntaxTokenKind.StringText + | FIXED -> FSharpSyntaxTokenKind.Fixed + | OINTERFACE_MEMBER -> FSharpSyntaxTokenKind.OffsideInterfaceMember + | OBLOCKEND -> FSharpSyntaxTokenKind.OffsideBlockEnd + | ORIGHT_BLOCK_END -> FSharpSyntaxTokenKind.OffsideRightBlockEnd + | ODECLEND -> FSharpSyntaxTokenKind.OffsideDeclEnd + | OEND -> FSharpSyntaxTokenKind.OffsideEnd + | OBLOCKSEP -> FSharpSyntaxTokenKind.OffsideBlockSep + | OBLOCKBEGIN -> FSharpSyntaxTokenKind.OffsideBlockBegin + | ORESET -> FSharpSyntaxTokenKind.OffsideReset + | OFUN -> FSharpSyntaxTokenKind.OffsideFun + | OFUNCTION -> FSharpSyntaxTokenKind.OffsideFunction + | OWITH -> FSharpSyntaxTokenKind.OffsideWith + | OELSE -> FSharpSyntaxTokenKind.OffsideElse + | OTHEN -> FSharpSyntaxTokenKind.OffsideThen + | ODO_BANG -> FSharpSyntaxTokenKind.OffsideDoBang + | ODO -> FSharpSyntaxTokenKind.OffsideDo + | OBINDER _ -> FSharpSyntaxTokenKind.OffsideBinder + | OLET _ -> FSharpSyntaxTokenKind.OffsideLet + | HIGH_PRECEDENCE_TYAPP -> FSharpSyntaxTokenKind.HighPrecedenceTypeApp + | HIGH_PRECEDENCE_PAREN_APP -> FSharpSyntaxTokenKind.HighPrecedenceParenthesisApp + | HIGH_PRECEDENCE_BRACK_APP -> FSharpSyntaxTokenKind.HighPrecedenceBracketApp + | EXTERN -> FSharpSyntaxTokenKind.Extern + | VOID -> FSharpSyntaxTokenKind.Void + | PUBLIC -> FSharpSyntaxTokenKind.Public + | PRIVATE -> FSharpSyntaxTokenKind.Private + | INTERNAL -> FSharpSyntaxTokenKind.Internal + | GLOBAL -> FSharpSyntaxTokenKind.Global + | STATIC -> FSharpSyntaxTokenKind.Static + | MEMBER -> FSharpSyntaxTokenKind.Member + | CLASS -> FSharpSyntaxTokenKind.Class + | ABSTRACT -> FSharpSyntaxTokenKind.Abstract + | OVERRIDE -> FSharpSyntaxTokenKind.Override + | DEFAULT -> FSharpSyntaxTokenKind.Default + | CONSTRUCTOR -> FSharpSyntaxTokenKind.Constructor + | INHERIT -> FSharpSyntaxTokenKind.Inherit + | GREATER_RBRACK -> FSharpSyntaxTokenKind.GreaterRightBracket + | STRUCT -> FSharpSyntaxTokenKind.Struct + | SIG -> FSharpSyntaxTokenKind.Sig + | BAR -> FSharpSyntaxTokenKind.Bar + | RBRACK -> FSharpSyntaxTokenKind.RightBracket + | RBRACE _ -> FSharpSyntaxTokenKind.RightBrace + | MINUS -> FSharpSyntaxTokenKind.Minus + | DOLLAR -> FSharpSyntaxTokenKind.Dollar + | BAR_RBRACK -> FSharpSyntaxTokenKind.BarRightBracket + | BAR_RBRACE -> FSharpSyntaxTokenKind.BarRightBrace + | UNDERSCORE -> FSharpSyntaxTokenKind.Underscore + | SEMICOLON_SEMICOLON -> FSharpSyntaxTokenKind.SemicolonSemicolon + | LARROW -> FSharpSyntaxTokenKind.LeftArrow + | EQUALS -> FSharpSyntaxTokenKind.Equals + | LBRACK -> FSharpSyntaxTokenKind.LeftBracket + | LBRACK_BAR -> FSharpSyntaxTokenKind.LeftBracketBar + | LBRACE_BAR -> FSharpSyntaxTokenKind.LeftBraceBar + | LBRACK_LESS -> FSharpSyntaxTokenKind.LeftBracketLess + | LBRACE _ -> FSharpSyntaxTokenKind.LeftBrace + | QMARK -> FSharpSyntaxTokenKind.QuestionMark + | QMARK_QMARK -> FSharpSyntaxTokenKind.QuestionMarkQuestionMark + | DOT -> FSharpSyntaxTokenKind.Dot + | COLON -> FSharpSyntaxTokenKind.Colon + | COLON_COLON -> FSharpSyntaxTokenKind.ColonColon + | COLON_GREATER -> FSharpSyntaxTokenKind.ColonGreater + | COLON_QMARK_GREATER -> FSharpSyntaxTokenKind.ColonQuestionMarkGreater + | COLON_QMARK -> FSharpSyntaxTokenKind.ColonQuestionMark + | COLON_EQUALS -> FSharpSyntaxTokenKind.ColonEquals + | SEMICOLON -> FSharpSyntaxTokenKind.SemicolonSemicolon + | WHEN -> FSharpSyntaxTokenKind.When + | WHILE -> FSharpSyntaxTokenKind.While + | WITH -> FSharpSyntaxTokenKind.With + | HASH -> FSharpSyntaxTokenKind.Hash + | AMP -> FSharpSyntaxTokenKind.Ampersand + | AMP_AMP -> FSharpSyntaxTokenKind.AmpersandAmpersand + | QUOTE -> FSharpSyntaxTokenKind.RightQuote + | LPAREN -> FSharpSyntaxTokenKind.LeftParenthesis + | RPAREN -> FSharpSyntaxTokenKind.RightParenthesis + | STAR -> FSharpSyntaxTokenKind.Star + | COMMA -> FSharpSyntaxTokenKind.Comma + | RARROW -> FSharpSyntaxTokenKind.RightArrow + | GREATER_BAR_RBRACK -> FSharpSyntaxTokenKind.GreaterBarRightBracket + | LPAREN_STAR_RPAREN -> FSharpSyntaxTokenKind.LeftParenthesisStarRightParenthesis + | OPEN -> FSharpSyntaxTokenKind.Open + | OR -> FSharpSyntaxTokenKind.Or + | REC -> FSharpSyntaxTokenKind.Rec + | THEN -> FSharpSyntaxTokenKind.Then + | TO -> FSharpSyntaxTokenKind.To + | TRUE -> FSharpSyntaxTokenKind.True + | TRY -> FSharpSyntaxTokenKind.Try + | TYPE -> FSharpSyntaxTokenKind.Type + | VAL -> FSharpSyntaxTokenKind.Val + | INLINE -> FSharpSyntaxTokenKind.Inline + | INTERFACE -> FSharpSyntaxTokenKind.Interface + | INSTANCE -> FSharpSyntaxTokenKind.Instance + | CONST -> FSharpSyntaxTokenKind.Const + | LAZY -> FSharpSyntaxTokenKind.Lazy + | OLAZY -> FSharpSyntaxTokenKind.OffsideLazy + | MATCH -> FSharpSyntaxTokenKind.Match + | MATCH_BANG -> FSharpSyntaxTokenKind.MatchBang + | MUTABLE -> FSharpSyntaxTokenKind.Mutable + | NEW -> FSharpSyntaxTokenKind.New + | OF -> FSharpSyntaxTokenKind.Of + | EXCEPTION -> FSharpSyntaxTokenKind.Exception + | FALSE -> FSharpSyntaxTokenKind.False + | FOR -> FSharpSyntaxTokenKind.For + | FUN -> FSharpSyntaxTokenKind.Fun + | FUNCTION -> FSharpSyntaxTokenKind.Function + | IF -> FSharpSyntaxTokenKind.If + | IN -> FSharpSyntaxTokenKind.In + | JOIN_IN -> FSharpSyntaxTokenKind.JoinIn + | FINALLY -> FSharpSyntaxTokenKind.Finally + | DO_BANG -> FSharpSyntaxTokenKind.DoBang + | AND -> FSharpSyntaxTokenKind.And + | AS -> FSharpSyntaxTokenKind.As + | ASSERT -> FSharpSyntaxTokenKind.Assert + | OASSERT -> FSharpSyntaxTokenKind.OffsideAssert + | BEGIN -> FSharpSyntaxTokenKind.Begin + | DO -> FSharpSyntaxTokenKind.Do + | DONE -> FSharpSyntaxTokenKind.Done + | DOWNTO -> FSharpSyntaxTokenKind.DownTo + | ELSE -> FSharpSyntaxTokenKind.Else + | ELIF -> FSharpSyntaxTokenKind.Elif + | END -> FSharpSyntaxTokenKind.End + | DOT_DOT -> FSharpSyntaxTokenKind.DotDot + | DOT_DOT_HAT -> FSharpSyntaxTokenKind.DotDotHat + | BAR_BAR -> FSharpSyntaxTokenKind.BarBar + | UPCAST -> FSharpSyntaxTokenKind.Upcast + | DOWNCAST -> FSharpSyntaxTokenKind.Downcast + | NULL -> FSharpSyntaxTokenKind.Null + | RESERVED -> FSharpSyntaxTokenKind.Reserved + | MODULE -> FSharpSyntaxTokenKind.Module + | NAMESPACE -> FSharpSyntaxTokenKind.Namespace + | DELEGATE -> FSharpSyntaxTokenKind.Delegate + | CONSTRAINT -> FSharpSyntaxTokenKind.Constraint + | BASE -> FSharpSyntaxTokenKind.Base + | LQUOTE _ -> FSharpSyntaxTokenKind.LeftQuote + | RQUOTE _ -> FSharpSyntaxTokenKind.RightQuote + | RQUOTE_DOT _ -> FSharpSyntaxTokenKind.RightQuoteDot + | PERCENT_OP _ -> FSharpSyntaxTokenKind.PercentOperator + | BINDER _ -> FSharpSyntaxTokenKind.Binder + | LESS _ -> FSharpSyntaxTokenKind.Less + | GREATER _ -> FSharpSyntaxTokenKind.Greater + | LET _ -> FSharpSyntaxTokenKind.Let + | YIELD _ -> FSharpSyntaxTokenKind.Yield + | YIELD_BANG _ -> FSharpSyntaxTokenKind.YieldBang + | BIGNUM _ -> FSharpSyntaxTokenKind.BigNumber + | DECIMAL _ -> FSharpSyntaxTokenKind.Decimal + | CHAR _ -> FSharpSyntaxTokenKind.Char + | IEEE64 _ -> FSharpSyntaxTokenKind.Ieee64 + | IEEE32 _ -> FSharpSyntaxTokenKind.Ieee32 + | NATIVEINT _ -> FSharpSyntaxTokenKind.NativeInt + | UNATIVEINT _ -> FSharpSyntaxTokenKind.UNativeInt + | UINT64 _ -> FSharpSyntaxTokenKind.UInt64 + | UINT32 _ -> FSharpSyntaxTokenKind.UInt32 + | UINT16 _ -> FSharpSyntaxTokenKind.UInt16 + | UINT8 _ -> FSharpSyntaxTokenKind.UInt8 + | INT64 _ -> FSharpSyntaxTokenKind.UInt64 + | INT32 _ -> FSharpSyntaxTokenKind.Int32 + | INT32_DOT_DOT _ -> FSharpSyntaxTokenKind.Int32DotDot + | INT16 _ -> FSharpSyntaxTokenKind.Int16 + | INT8 _ -> FSharpSyntaxTokenKind.Int8 + | FUNKY_OPERATOR_NAME _ -> FSharpSyntaxTokenKind.FunkyOperatorName + | ADJACENT_PREFIX_OP _ -> FSharpSyntaxTokenKind.AdjacentPrefixOperator + | PLUS_MINUS_OP _ -> FSharpSyntaxTokenKind.PlusMinusOperator + | INFIX_AMP_OP _ -> FSharpSyntaxTokenKind.InfixAmpersandOperator + | INFIX_STAR_DIV_MOD_OP _ -> FSharpSyntaxTokenKind.InfixStarDivideModuloOperator + | PREFIX_OP _ -> FSharpSyntaxTokenKind.PrefixOperator + | INFIX_BAR_OP _ -> FSharpSyntaxTokenKind.InfixBarOperator + | INFIX_AT_HAT_OP _ -> FSharpSyntaxTokenKind.InfixAtHatOperator + | INFIX_COMPARE_OP _ -> FSharpSyntaxTokenKind.InfixCompareOperator + | INFIX_STAR_STAR_OP _ -> FSharpSyntaxTokenKind.InfixStarStarOperator + | IDENT _ -> FSharpSyntaxTokenKind.Identifier + | KEYWORD_STRING _ -> FSharpSyntaxTokenKind.KeywordString + | INTERP_STRING_BEGIN_END _ + | INTERP_STRING_BEGIN_PART _ + | INTERP_STRING_PART _ + | INTERP_STRING_END _ + | STRING _ -> FSharpSyntaxTokenKind.String + | BYTEARRAY _ -> FSharpSyntaxTokenKind.ByteArray + | _ -> FSharpSyntaxTokenKind.None + + member this.IsKeyword = + match this.Kind with + | FSharpSyntaxTokenKind.Abstract + | FSharpSyntaxTokenKind.And + | FSharpSyntaxTokenKind.As + | FSharpSyntaxTokenKind.Assert + | FSharpSyntaxTokenKind.OffsideAssert + | FSharpSyntaxTokenKind.Base + | FSharpSyntaxTokenKind.Begin + | FSharpSyntaxTokenKind.Class + | FSharpSyntaxTokenKind.Default + | FSharpSyntaxTokenKind.Delegate + | FSharpSyntaxTokenKind.Do + | FSharpSyntaxTokenKind.OffsideDo + | FSharpSyntaxTokenKind.Done + | FSharpSyntaxTokenKind.Downcast + | FSharpSyntaxTokenKind.DownTo + | FSharpSyntaxTokenKind.Elif + | FSharpSyntaxTokenKind.Else + | FSharpSyntaxTokenKind.OffsideElse + | FSharpSyntaxTokenKind.End + | FSharpSyntaxTokenKind.OffsideEnd + | FSharpSyntaxTokenKind.Exception + | FSharpSyntaxTokenKind.Extern + | FSharpSyntaxTokenKind.False + | FSharpSyntaxTokenKind.Finally + | FSharpSyntaxTokenKind.Fixed + | FSharpSyntaxTokenKind.For + | FSharpSyntaxTokenKind.Fun + | FSharpSyntaxTokenKind.OffsideFun + | FSharpSyntaxTokenKind.Function + | FSharpSyntaxTokenKind.OffsideFunction + | FSharpSyntaxTokenKind.Global + | FSharpSyntaxTokenKind.If + | FSharpSyntaxTokenKind.In + | FSharpSyntaxTokenKind.Inherit + | FSharpSyntaxTokenKind.Inline + | FSharpSyntaxTokenKind.Interface + | FSharpSyntaxTokenKind.OffsideInterfaceMember + | FSharpSyntaxTokenKind.Internal + | FSharpSyntaxTokenKind.Lazy + | FSharpSyntaxTokenKind.OffsideLazy + | FSharpSyntaxTokenKind.Let // "let" and "use" + | FSharpSyntaxTokenKind.OffsideLet + | FSharpSyntaxTokenKind.DoBang // "let!", "use!" and "do!" + | FSharpSyntaxTokenKind.OffsideDoBang + | FSharpSyntaxTokenKind.Match + | FSharpSyntaxTokenKind.MatchBang + | FSharpSyntaxTokenKind.Member + | FSharpSyntaxTokenKind.Module + | FSharpSyntaxTokenKind.Mutable + | FSharpSyntaxTokenKind.Namespace + | FSharpSyntaxTokenKind.New + // | FSharpSyntaxTokenKind.Not // Not actually a keyword. However, not struct in combination is used as a generic parameter constraint. + | FSharpSyntaxTokenKind.Null + | FSharpSyntaxTokenKind.Of + | FSharpSyntaxTokenKind.Open + | FSharpSyntaxTokenKind.Or + | FSharpSyntaxTokenKind.Override + | FSharpSyntaxTokenKind.Private + | FSharpSyntaxTokenKind.Public + | FSharpSyntaxTokenKind.Rec + | FSharpSyntaxTokenKind.Yield // "yield" and "return" + | FSharpSyntaxTokenKind.YieldBang // "yield!" and "return!" + | FSharpSyntaxTokenKind.Static + | FSharpSyntaxTokenKind.Struct + | FSharpSyntaxTokenKind.Then + | FSharpSyntaxTokenKind.To + | FSharpSyntaxTokenKind.True + | FSharpSyntaxTokenKind.Try + | FSharpSyntaxTokenKind.Type + | FSharpSyntaxTokenKind.Upcast + | FSharpSyntaxTokenKind.Val + | FSharpSyntaxTokenKind.Void + | FSharpSyntaxTokenKind.When + | FSharpSyntaxTokenKind.While + | FSharpSyntaxTokenKind.With + | FSharpSyntaxTokenKind.OffsideWith + + // * Reserved - from OCAML * + | FSharpSyntaxTokenKind.Asr + | FSharpSyntaxTokenKind.InfixAsr + | FSharpSyntaxTokenKind.InfixLand + | FSharpSyntaxTokenKind.InfixLor + | FSharpSyntaxTokenKind.InfixLsl + | FSharpSyntaxTokenKind.InfixLsr + | FSharpSyntaxTokenKind.InfixLxor + | FSharpSyntaxTokenKind.InfixMod + | FSharpSyntaxTokenKind.Sig + + // * Reserved - for future * + // atomic + // break + // checked + // component + // const + // constraint + // constructor + // continue + // eager + // event + // external + // functor + // include + // method + // mixin + // object + // parallel + // process + // protected + // pure + // sealed + // tailcall + // trait + // virtual + // volatile + | FSharpSyntaxTokenKind.Reserved + | FSharpSyntaxTokenKind.KeywordString + | FSharpSyntaxTokenKind.Binder + | FSharpSyntaxTokenKind.OffsideBinder -> true + | _ -> false + + member this.IsIdentifier = + match this.Kind with + | FSharpSyntaxTokenKind.Identifier -> true + | _ -> false + + member this.IsStringLiteral = + match this.Kind with + | FSharpSyntaxTokenKind.String -> true + | _ -> false + + member this.IsNumericLiteral = + match this.Kind with + | FSharpSyntaxTokenKind.UInt8 + | FSharpSyntaxTokenKind.UInt16 + | FSharpSyntaxTokenKind.UInt64 + | FSharpSyntaxTokenKind.Int8 + | FSharpSyntaxTokenKind.Int16 + | FSharpSyntaxTokenKind.Int32 + | FSharpSyntaxTokenKind.Int64 + | FSharpSyntaxTokenKind.Ieee32 + | FSharpSyntaxTokenKind.Ieee64 + | FSharpSyntaxTokenKind.BigNumber -> true + | _ -> false + + member this.IsCommentTrivia = + match this.Kind with + | FSharpSyntaxTokenKind.CommentTrivia + | FSharpSyntaxTokenKind.LineCommentTrivia -> true + | _ -> false + + let lexWithErrorLogger (text: ISourceText) conditionalCompilationDefines (flags: FSharpLexerFlags) supportsFeature errorLogger onToken pathMap (ct: CancellationToken) = let canSkipTrivia = (flags &&& FSharpLexerFlags.SkipTrivia) = FSharpLexerFlags.SkipTrivia let isLightSyntaxOn = (flags &&& FSharpLexerFlags.LightSyntaxOn) = FSharpLexerFlags.LightSyntaxOn let isCompiling = (flags &&& FSharpLexerFlags.Compiling) = FSharpLexerFlags.Compiling let isCompilingFSharpCore = (flags &&& FSharpLexerFlags.CompilingFSharpCore) = FSharpLexerFlags.CompilingFSharpCore let canUseLexFilter = (flags &&& FSharpLexerFlags.UseLexFilter) = FSharpLexerFlags.UseLexFilter - let lexbuf = UnicodeLexing.SourceTextAsLexbuf(reportLibraryOnlyFeatures, supportsFeature, text) - let lightStatus = LightSyntaxStatus(isLightSyntaxOn, true) + let lexbuf = UnicodeLexing.SourceTextAsLexbuf(supportsFeature, text) + let lightStatus = LightSyntaxStatus(isLightSyntaxOn, true) let lexargs = mkLexargs (conditionalCompilationDefines, lightStatus, Lexhelp.LexResourceManager(0), [], errorLogger, pathMap) let lexargs = { lexargs with applyLineDirectives = isCompiling } @@ -1543,32 +1541,32 @@ module FSharpLexerImpl = ct.ThrowIfCancellationRequested () onToken (getNextToken lexbuf) lexbuf.LexemeRange - let lex text conditionalCompilationDefines flags reportLibraryOnlyFeatures supportsFeature lexCallback pathMap ct = - let errorLogger = CompilationErrorLogger("Lexer", FSharpDiagnosticOptions.Default) - lexWithErrorLogger text conditionalCompilationDefines flags reportLibraryOnlyFeatures supportsFeature errorLogger lexCallback pathMap ct + let lex text conditionalCompilationDefines flags supportsFeature lexCallback pathMap ct = + let errorLogger = CompilationErrorLogger("Lexer", ErrorLogger.FSharpErrorSeverityOptions.Default) + lexWithErrorLogger text conditionalCompilationDefines flags supportsFeature errorLogger lexCallback pathMap ct -[] -type FSharpLexer = + [] + type FSharpLexer = - static member Tokenize(text: ISourceText, tokenCallback, ?langVersion, ?filePath: string, ?conditionalCompilationDefines, ?flags, ?pathMap, ?ct) = - let langVersion = defaultArg langVersion "latestmajor" - let flags = defaultArg flags FSharpLexerFlags.Default - ignore filePath // can be removed at later point - let conditionalCompilationDefines = defaultArg conditionalCompilationDefines [] - let pathMap = defaultArg pathMap Map.Empty - let ct = defaultArg ct CancellationToken.None + static member Lex(text: ISourceText, tokenCallback, ?langVersion, ?filePath: string, ?conditionalCompilationDefines, ?flags, ?pathMap, ?ct) = + let langVersion = defaultArg langVersion "latestmajor" + let flags = defaultArg flags FSharpLexerFlags.Default + ignore filePath // can be removed at later point + let conditionalCompilationDefines = defaultArg conditionalCompilationDefines [] + let pathMap = defaultArg pathMap Map.Empty + let ct = defaultArg ct CancellationToken.None - let supportsFeature = (LanguageVersion langVersion).SupportsFeature + let supportsFeature = (LanguageVersion langVersion).SupportsFeature - let pathMap = - (PathMap.empty, pathMap) - ||> Seq.fold (fun state pair -> state |> PathMap.addMapping pair.Key pair.Value) + let pathMap = + (PathMap.empty, pathMap) + ||> Seq.fold (fun state pair -> state |> PathMap.addMapping pair.Key pair.Value) - let onToken tok m = - let fsTok = FSharpToken(tok, m) - match fsTok.Kind with - | FSharpTokenKind.None -> () - | _ -> tokenCallback fsTok + let onToken = + fun tok m -> + let fsTok = FSharpSyntaxToken(tok, m) + match fsTok.Kind with + | FSharpSyntaxTokenKind.None -> () + | _ -> tokenCallback fsTok - let reportLibraryOnlyFeatures = true - lex text conditionalCompilationDefines flags reportLibraryOnlyFeatures supportsFeature onToken pathMap ct + lex text conditionalCompilationDefines flags supportsFeature onToken pathMap ct \ No newline at end of file diff --git a/src/fsharp/service/ServiceLexing.fsi b/src/fsharp/service/ServiceLexing.fsi index 86848ea5990..653c7e9ce62 100755 --- a/src/fsharp/service/ServiceLexing.fsi +++ b/src/fsharp/service/ServiceLexing.fsi @@ -1,15 +1,16 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.Tokenization +namespace FSharp.Compiler.SourceCodeServices -open System -open System.Threading -open FSharp.Compiler -open FSharp.Compiler.Text +open FSharp.Compiler // Prevents warnings of experimental APIs within the signature file itself. #nowarn "57" +type Position = int * int + +type Range = Position * Position + /// Represents encoded information for the end-of-line continuation of lexing [] type FSharpTokenizerLexState = @@ -81,194 +82,130 @@ type FSharpTokenCharKind = module FSharpTokenTag = /// Indicates the token is an identifier val Identifier: int - /// Indicates the token is a string val String : int - /// Indicates the token is an identifier (synonym for FSharpTokenTag.Identifier) val IDENT : int - /// Indicates the token is a string (synonym for FSharpTokenTag.String) val STRING : int - /// Indicates the token is a part of an interpolated string val INTERP_STRING_BEGIN_END : int - /// Indicates the token is a part of an interpolated string val INTERP_STRING_BEGIN_PART : int - /// Indicates the token is a part of an interpolated string val INTERP_STRING_PART : int - /// Indicates the token is a part of an interpolated string val INTERP_STRING_END : int - /// Indicates the token is a `(` val LPAREN : int - /// Indicates the token is a `)` val RPAREN : int - /// Indicates the token is a `[` val LBRACK : int - /// Indicates the token is a `]` val RBRACK : int - /// Indicates the token is a `{` val LBRACE : int - /// Indicates the token is a `}` val RBRACE : int - /// Indicates the token is a `[<` val LBRACK_LESS : int - /// Indicates the token is a `>]` val GREATER_RBRACK : int - /// Indicates the token is a `<` val LESS : int - /// Indicates the token is a `>` val GREATER : int - /// Indicates the token is a `[|` val LBRACK_BAR : int - /// Indicates the token is a `|]` val BAR_RBRACK : int - /// Indicates the token is a `+` or `-` val PLUS_MINUS_OP : int - /// Indicates the token is a `-` val MINUS : int - /// Indicates the token is a `*` val STAR : int - /// Indicates the token is a `%` val INFIX_STAR_DIV_MOD_OP : int - /// Indicates the token is a `%` val PERCENT_OP : int - /// Indicates the token is a `^` val INFIX_AT_HAT_OP : int - /// Indicates the token is a `?` val QMARK : int - /// Indicates the token is a `:` val COLON : int - /// Indicates the token is a `=` val EQUALS : int - /// Indicates the token is a `;` val SEMICOLON : int - /// Indicates the token is a `,` val COMMA : int - /// Indicates the token is a `.` val DOT : int - /// Indicates the token is a `..` val DOT_DOT : int - /// Indicates the token is a `..` val DOT_DOT_HAT : int - /// Indicates the token is a `..^` val INT32_DOT_DOT : int - /// Indicates the token is a `..` val UNDERSCORE : int - /// Indicates the token is a `_` val BAR : int - /// Indicates the token is a `:>` val COLON_GREATER : int - /// Indicates the token is a `:?>` val COLON_QMARK_GREATER : int - /// Indicates the token is a `:?` val COLON_QMARK : int - /// Indicates the token is a `|` val INFIX_BAR_OP : int - /// Indicates the token is a `|` val INFIX_COMPARE_OP : int - /// Indicates the token is a `::` val COLON_COLON : int - /// Indicates the token is a `@@` val AMP_AMP : int - /// Indicates the token is a `~` val PREFIX_OP : int - /// Indicates the token is a `:=` val COLON_EQUALS : int - /// Indicates the token is a `||` val BAR_BAR : int - /// Indicates the token is a `->` val RARROW : int - /// Indicates the token is a `<-` val LARROW : int - /// Indicates the token is a `"` val QUOTE : int - /// Indicates the token is a whitespace val WHITESPACE : int - /// Indicates the token is a comment - val COMMENT : int /// Indicates the token is a line comment - val LINE_COMMENT : int - /// Indicates the token is keyword `begin` val BEGIN : int - /// Indicates the token is keyword `do` val DO : int - /// Indicates the token is keyword `function` val FUNCTION : int - /// Indicates the token is keyword `then` val THEN : int - /// Indicates the token is keyword `else` val ELSE : int - /// Indicates the token is keyword `struct` val STRUCT : int - /// Indicates the token is keyword `class` val CLASS : int - /// Indicates the token is keyword `try` val TRY : int - /// Indicates the token is keyword `with` val WITH : int - /// Indicates the token is keyword `with` in #light val OWITH : int - /// Indicates the token is keyword `new` val NEW : int @@ -335,7 +272,7 @@ type FSharpSourceTokenizer = module internal TestExpose = val TokenInfo : Parser.token -> (FSharpTokenColorKind * FSharpTokenCharKind * FSharpTokenTriggerClass) -module FSharpKeywords = +module Keywords = /// Checks if adding backticks to identifier is needed. val DoesIdentifierNeedQuotation : string -> bool @@ -348,237 +285,238 @@ module FSharpKeywords = /// Keywords paired with their descriptions. Used in completion and quick info. val KeywordsWithDescription : (string * string) list - /// A utility to help determine if an identifier needs to be quoted, this doesn't quote F# keywords. - val QuoteIdentifierIfNeeded: string -> string - - /// All the keywords in the F# language - val KeywordNames: string list - -[] -type public FSharpLexerFlags = - | Default = 0x11011 - | LightSyntaxOn = 0x00001 - | Compiling = 0x00010 - | CompilingFSharpCore = 0x00110 - | SkipTrivia = 0x01000 - | UseLexFilter = 0x10000 - -[] -type public FSharpTokenKind = - | None - | HashIf - | HashElse - | HashEndIf - | CommentTrivia - | WhitespaceTrivia - | HashLine - | HashLight - | InactiveCode - | LineCommentTrivia - | StringText - | Fixed - | OffsideInterfaceMember - | OffsideBlockEnd - | OffsideRightBlockEnd - | OffsideDeclEnd - | OffsideEnd - | OffsideBlockSep - | OffsideBlockBegin - | OffsideReset - | OffsideFun - | OffsideFunction - | OffsideWith - | OffsideElse - | OffsideThen - | OffsideDoBang - | OffsideDo - | OffsideBinder - | OffsideLet - | HighPrecedenceTypeApp - | HighPrecedenceParenthesisApp - | HighPrecedenceBracketApp - | Extern - | Void - | Public - | Private - | Internal - | Global - | Static - | Member - | Class - | Abstract - | Override - | Default - | Constructor - | Inherit - | GreaterRightBracket - | Struct - | Sig - | Bar - | RightBracket - | RightBrace - | Minus - | Dollar - | BarRightBracket - | BarRightBrace - | Underscore - | Semicolon - | SemicolonSemicolon - | LeftArrow - | Equals - | LeftBracket - | LeftBracketBar - | LeftBraceBar - | LeftBracketLess - | LeftBrace - | QuestionMark - | QuestionMarkQuestionMark - | Dot - | Colon - | ColonColon - | ColonGreater - | ColonQuestionMark - | ColonQuestionMarkGreater - | ColonEquals - | When - | While - | With - | Hash - | Ampersand - | AmpersandAmpersand - | Quote - | LeftParenthesis - | RightParenthesis - | Star - | Comma - | RightArrow - | GreaterBarRightBracket - | LeftParenthesisStarRightParenthesis - | Open - | Or - | Rec - | Then - | To - | True - | Try - | Type - | Val - | Inline - | Interface - | Instance - | Const - | Lazy - | OffsideLazy - | Match - | MatchBang - | Mutable - | New - | Of - | Exception - | False - | For - | Fun - | Function - | If - | In - | JoinIn - | Finally - | DoBang - | And - | As - | Assert - | OffsideAssert - | Begin - | Do - | Done - | DownTo - | Else - | Elif - | End - | DotDot - | DotDotHat - | BarBar - | Upcast - | Downcast - | Null - | Reserved - | Module - | Namespace - | Delegate - | Constraint - | Base - | LeftQuote - | RightQuote - | RightQuoteDot - | PercentOperator - | Binder - | Less - | Greater - | Let - | Yield - | YieldBang - | BigNumber - | Decimal - | Char - | Ieee64 - | Ieee32 - | NativeInt - | UNativeInt - | UInt64 - | UInt32 - | UInt16 - | UInt8 - | Int64 - | Int32 - | Int32DotDot - | Int16 - | Int8 - | FunkyOperatorName - | AdjacentPrefixOperator - | PlusMinusOperator - | InfixAmpersandOperator - | InfixStarDivideModuloOperator - | PrefixOperator - | InfixBarOperator - | InfixAtHatOperator - | InfixCompareOperator - | InfixStarStarOperator - | Identifier - | KeywordString - | String - | ByteArray - | Asr - | InfixAsr - | InfixLand - | InfixLor - | InfixLsl - | InfixLsr - | InfixLxor - | InfixMod - -[] -type public FSharpToken = - - val private tok: Parser.token - val private tokRange: range - - member Range: range - - member Kind: FSharpTokenKind - - member IsIdentifier: bool - - member IsKeyword: bool - - member IsStringLiteral: bool - - member IsNumericLiteral: bool - - member IsCommentTrivia: bool - -[] -type public FSharpLexer = +[] +module public Lexer = + + open System + open System.Threading + open FSharp.Compiler.Text + open FSharp.Compiler.Range + + [] + type public FSharpLexerFlags = + | Default = 0x11011 + | LightSyntaxOn = 0x00001 + | Compiling = 0x00010 + | CompilingFSharpCore = 0x00110 + | SkipTrivia = 0x01000 + | UseLexFilter = 0x10000 + + [] + type public FSharpSyntaxTokenKind = + | None + | HashIf + | HashElse + | HashEndIf + | CommentTrivia + | WhitespaceTrivia + | HashLine + | HashLight + | InactiveCode + | LineCommentTrivia + | StringText + | Fixed + | OffsideInterfaceMember + | OffsideBlockEnd + | OffsideRightBlockEnd + | OffsideDeclEnd + | OffsideEnd + | OffsideBlockSep + | OffsideBlockBegin + | OffsideReset + | OffsideFun + | OffsideFunction + | OffsideWith + | OffsideElse + | OffsideThen + | OffsideDoBang + | OffsideDo + | OffsideBinder + | OffsideLet + | HighPrecedenceTypeApp + | HighPrecedenceParenthesisApp + | HighPrecedenceBracketApp + | Extern + | Void + | Public + | Private + | Internal + | Global + | Static + | Member + | Class + | Abstract + | Override + | Default + | Constructor + | Inherit + | GreaterRightBracket + | Struct + | Sig + | Bar + | RightBracket + | RightBrace + | Minus + | Dollar + | BarRightBracket + | BarRightBrace + | Underscore + | Semicolon + | SemicolonSemicolon + | LeftArrow + | Equals + | LeftBracket + | LeftBracketBar + | LeftBraceBar + | LeftBracketLess + | LeftBrace + | QuestionMark + | QuestionMarkQuestionMark + | Dot + | Colon + | ColonColon + | ColonGreater + | ColonQuestionMark + | ColonQuestionMarkGreater + | ColonEquals + | When + | While + | With + | Hash + | Ampersand + | AmpersandAmpersand + | Quote + | LeftParenthesis + | RightParenthesis + | Star + | Comma + | RightArrow + | GreaterBarRightBracket + | LeftParenthesisStarRightParenthesis + | Open + | Or + | Rec + | Then + | To + | True + | Try + | Type + | Val + | Inline + | Interface + | Instance + | Const + | Lazy + | OffsideLazy + | Match + | MatchBang + | Mutable + | New + | Of + | Exception + | False + | For + | Fun + | Function + | If + | In + | JoinIn + | Finally + | DoBang + | And + | As + | Assert + | OffsideAssert + | Begin + | Do + | Done + | DownTo + | Else + | Elif + | End + | DotDot + | DotDotHat + | BarBar + | Upcast + | Downcast + | Null + | Reserved + | Module + | Namespace + | Delegate + | Constraint + | Base + | LeftQuote + | RightQuote + | RightQuoteDot + | PercentOperator + | Binder + | Less + | Greater + | Let + | Yield + | YieldBang + | BigNumber + | Decimal + | Char + | Ieee64 + | Ieee32 + | NativeInt + | UNativeInt + | UInt64 + | UInt32 + | UInt16 + | UInt8 + | Int64 + | Int32 + | Int32DotDot + | Int16 + | Int8 + | FunkyOperatorName + | AdjacentPrefixOperator + | PlusMinusOperator + | InfixAmpersandOperator + | InfixStarDivideModuloOperator + | PrefixOperator + | InfixBarOperator + | InfixAtHatOperator + | InfixCompareOperator + | InfixStarStarOperator + | Identifier + | KeywordString + | String + | ByteArray + | Asr + | InfixAsr + | InfixLand + | InfixLor + | InfixLsl + | InfixLsr + | InfixLxor + | InfixMod + + [] + type public FSharpSyntaxToken = + + val private tok: Parser.token + val private tokRange: range + + member Range: range + + member Kind: FSharpSyntaxTokenKind + + member IsIdentifier: bool + + member IsKeyword: bool + + member IsStringLiteral: bool + + member IsNumericLiteral: bool + + member IsCommentTrivia: bool + + [] + type public FSharpLexer = - [] - static member Tokenize: text: ISourceText * tokenCallback: (FSharpToken -> unit) * ?langVersion: string * ?filePath: string * ?conditionalCompilationDefines: string list * ?flags: FSharpLexerFlags * ?pathMap: Map * ?ct: CancellationToken -> unit - + [] + static member Lex: text: ISourceText * tokenCallback: (FSharpSyntaxToken -> unit) * ?langVersion: string * ?filePath: string * ?conditionalCompilationDefines: string list * ?flags: FSharpLexerFlags * ?pathMap: Map * ?ct: CancellationToken -> unit \ No newline at end of file diff --git a/src/fsharp/service/ServiceNavigation.fs b/src/fsharp/service/ServiceNavigation.fs index 694502757f8..eb9d70b0fd8 100755 --- a/src/fsharp/service/ServiceNavigation.fs +++ b/src/fsharp/service/ServiceNavigation.fs @@ -5,30 +5,27 @@ // type checking and intellisense-like environment-reporting. //-------------------------------------------------------------------------- -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler.SourceCodeServices -open System open System.Collections.Generic -open FSharp.Compiler.Syntax +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range /// Represents the different kinds of items that can appear in the navigation bar -[] -type NavigationItemKind = - | Namespace - | ModuleFile - | Exception - | Module - | Type - | Method - | Property - | Field - | Other +type FSharpNavigationDeclarationItemKind = + | NamespaceDecl + | ModuleFileDecl + | ExnDecl + | ModuleDecl + | TypeDecl + | MethodDecl + | PropertyDecl + | FieldDecl + | OtherDecl [] -type NavigationEntityKind = +type FSharpEnclosingEntityKind = | Namespace | Module | Class @@ -36,53 +33,53 @@ type NavigationEntityKind = | Interface | Record | Enum - | Union + | DU /// Represents an item to be displayed in the navigation bar [] -type NavigationItem(uniqueName: string, name: string, kind: NavigationItemKind, glyph: FSharpGlyph, range: range, - bodyRange: range, singleTopLevel: bool, enclosingEntityKind: NavigationEntityKind, isAbstract: bool, access: SynAccess option) = +type FSharpNavigationDeclarationItem(uniqueName: string, name: string, kind: FSharpNavigationDeclarationItemKind, glyph: FSharpGlyph, range: range, + bodyRange: range, singleTopLevel: bool, enclosingEntityKind: FSharpEnclosingEntityKind, isAbstract: bool, access: SynAccess option) = - member _.bodyRange = bodyRange - member _.UniqueName = uniqueName - member _.Name = name - member _.Glyph = glyph - member _.Kind = kind - member _.Range = range - member _.BodyRange = bodyRange - member _.IsSingleTopLevel = singleTopLevel - member _.EnclosingEntityKind = enclosingEntityKind - member _.IsAbstract = isAbstract + member x.bodyRange = bodyRange + member x.UniqueName = uniqueName + member x.Name = name + member x.Glyph = glyph + member x.Kind = kind + member x.Range = range + member x.BodyRange = bodyRange + member x.IsSingleTopLevel = singleTopLevel + member x.EnclosingEntityKind = enclosingEntityKind + member x.IsAbstract = isAbstract - member _.Access = access + member x.Access = access - member _.WithUniqueName(uniqueName: string) = - NavigationItem(uniqueName, name, kind, glyph, range, bodyRange, singleTopLevel, enclosingEntityKind, isAbstract, access) + member x.WithUniqueName(uniqueName: string) = + FSharpNavigationDeclarationItem(uniqueName, name, kind, glyph, range, bodyRange, singleTopLevel, enclosingEntityKind, isAbstract, access) static member Create(name: string, kind, glyph: FSharpGlyph, range: range, bodyRange: range, singleTopLevel: bool, enclosingEntityKind, isAbstract, access: SynAccess option) = - NavigationItem("", name, kind, glyph, range, bodyRange, singleTopLevel, enclosingEntityKind, isAbstract, access) + FSharpNavigationDeclarationItem("", name, kind, glyph, range, bodyRange, singleTopLevel, enclosingEntityKind, isAbstract, access) /// Represents top-level declarations (that should be in the type drop-down) /// with nested declarations (that can be shown in the member drop-down) [] -type NavigationTopLevelDeclaration = - { Declaration: NavigationItem - Nested: NavigationItem[] } +type FSharpNavigationTopLevelDeclaration = + { Declaration: FSharpNavigationDeclarationItem + Nested: FSharpNavigationDeclarationItem[] } /// Represents result of 'GetNavigationItems' operation - this contains /// all the members and currently selected indices. First level correspond to /// types & modules and second level are methods etc. [] -type NavigationItems(declarations:NavigationTopLevelDeclaration[]) = - member _.Declarations = declarations +type FSharpNavigationItems(declarations:FSharpNavigationTopLevelDeclaration[]) = + member x.Declarations = declarations module NavigationImpl = let unionRangesChecked r1 r2 = - if Range.equals r1 range.Zero then r2 - elif Range.equals r2 range.Zero then r1 + if FSharp.Compiler.Range.equals r1 range.Zero then r2 + elif FSharp.Compiler.Range.equals r2 range.Zero then r1 else unionRanges r1 r2 let rangeOfDecls2 f decls = - match decls |> List.map (f >> (fun (d:NavigationItem) -> d.bodyRange)) with + match decls |> List.map (f >> (fun (d:FSharpNavigationDeclarationItem) -> d.bodyRange)) with | hd :: tl -> tl |> List.fold unionRangesChecked hd | [] -> range.Zero @@ -93,8 +90,8 @@ module NavigationImpl = let fldspecRange fldspec = match fldspec with - | SynUnionCaseKind.Fields(flds) -> flds |> List.fold (fun st (SynField(_, _, _, _, _, _, _, m)) -> unionRangesChecked m st) range.Zero - | SynUnionCaseKind.FullType(ty, _) -> ty.Range + | UnionCaseFields(flds) -> flds |> List.fold (fun st (Field(_, _, _, _, _, _, _, m)) -> unionRangesChecked m st) range.Zero + | UnionCaseFullType(ty, _) -> ty.Range let bodyRange mb decls = unionRangesChecked (rangeOfDecls decls) mb @@ -119,23 +116,23 @@ module NavigationImpl = // Create declaration (for the left dropdown) let createDeclLid(baseName, lid, kind, baseGlyph, m, bodym, nested, enclosingEntityKind, isAbstract, access) = let name = (if baseName <> "" then baseName + "." else "") + (textOfLid lid) - NavigationItem.Create + FSharpNavigationDeclarationItem.Create (name, kind, baseGlyph, m, bodym, false, enclosingEntityKind, isAbstract, access), (addItemName name), nested let createDecl(baseName, id:Ident, kind, baseGlyph, m, bodym, nested, enclosingEntityKind, isAbstract, access) = let name = (if baseName <> "" then baseName + "." else "") + (id.idText) - NavigationItem.Create + FSharpNavigationDeclarationItem.Create (name, kind, baseGlyph, m, bodym, false, enclosingEntityKind, isAbstract, access), (addItemName name), nested // Create member-kind-of-thing for the right dropdown let createMemberLid(lid, kind, baseGlyph, m, enclosingEntityKind, isAbstract, access) = - NavigationItem.Create(textOfLid lid, kind, baseGlyph, m, m, false, enclosingEntityKind, isAbstract, access), (addItemName(textOfLid lid)) + FSharpNavigationDeclarationItem.Create(textOfLid lid, kind, baseGlyph, m, m, false, enclosingEntityKind, isAbstract, access), (addItemName(textOfLid lid)) let createMember(id:Ident, kind, baseGlyph, m, enclosingEntityKind, isAbstract, access) = - NavigationItem.Create(id.idText, kind, baseGlyph, m, m, false, enclosingEntityKind, isAbstract, access), (addItemName(id.idText)) + FSharpNavigationDeclarationItem.Create(id.idText, kind, baseGlyph, m, m, false, enclosingEntityKind, isAbstract, access), (addItemName(id.idText)) // Process let-binding - let processBinding isMember enclosingEntityKind isAbstract (SynBinding(_, _, _, _, _, _, SynValData(memberOpt, _, _), synPat, _, synExpr, _, _)) = + let processBinding isMember enclosingEntityKind isAbstract (Binding(_, _, _, _, _, _, SynValData(memberOpt, _, _), synPat, _, synExpr, _, _)) = let m = match synExpr with | SynExpr.Typed (e, _, _) -> e.Range // fix range for properties with type annotations @@ -145,13 +142,13 @@ module NavigationImpl = | SynPat.LongIdent(longDotId=LongIdentWithDots(lid,_); accessibility=access), Some(flags) when isMember -> let icon, kind = match flags.MemberKind with - | SynMemberKind.ClassConstructor - | SynMemberKind.Constructor - | SynMemberKind.Member -> - (if flags.IsOverrideOrExplicitImpl then FSharpGlyph.OverridenMethod else FSharpGlyph.Method), NavigationItemKind.Method - | SynMemberKind.PropertyGetSet - | SynMemberKind.PropertySet - | SynMemberKind.PropertyGet -> FSharpGlyph.Property, NavigationItemKind.Property + | MemberKind.ClassConstructor + | MemberKind.Constructor + | MemberKind.Member -> + (if flags.IsOverrideOrExplicitImpl then FSharpGlyph.OverridenMethod else FSharpGlyph.Method), MethodDecl + | MemberKind.PropertyGetSet + | MemberKind.PropertySet + | MemberKind.PropertyGet -> FSharpGlyph.Property, PropertyDecl let lidShow, rangeMerge = match lid with | _thisVar :: nm :: _ -> (List.tail lid, nm.idRange) @@ -159,66 +156,66 @@ module NavigationImpl = | _ -> (lid, m) [ createMemberLid(lidShow, kind, icon, unionRanges rangeMerge m, enclosingEntityKind, isAbstract, access) ] | SynPat.LongIdent(LongIdentWithDots(lid,_), _, _, _, access, _), _ -> - [ createMemberLid(lid, NavigationItemKind.Field, FSharpGlyph.Field, unionRanges (List.head lid).idRange m, enclosingEntityKind, isAbstract, access) ] - | SynPat.Named (id, _, access, _), _ | SynPat.As(_, SynPat.Named (id, _, access, _), _), _ -> + [ createMemberLid(lid, FieldDecl, FSharpGlyph.Field, unionRanges (List.head lid).idRange m, enclosingEntityKind, isAbstract, access) ] + | SynPat.Named(_, id, _, access, _), _ -> let glyph = if isMember then FSharpGlyph.Method else FSharpGlyph.Field - [ createMember(id, NavigationItemKind.Field, glyph, unionRanges id.idRange m, enclosingEntityKind, isAbstract, access) ] + [ createMember(id, FieldDecl, glyph, unionRanges id.idRange m, enclosingEntityKind, isAbstract, access) ] | _ -> [] // Process a class declaration or F# type declaration - let rec processExnDefnRepr baseName nested (SynExceptionDefnRepr(_, (SynUnionCase(_, id, fldspec, _, _, _)), _, _, access, m)) = + let rec processExnDefnRepr baseName nested (SynExceptionDefnRepr(_, (UnionCase(_, id, fldspec, _, _, _)), _, _, access, m)) = // Exception declaration - [ createDecl(baseName, id, NavigationItemKind.Exception, FSharpGlyph.Exception, m, fldspecRange fldspec, nested, NavigationEntityKind.Exception, false, access) ] + [ createDecl(baseName, id, ExnDecl, FSharpGlyph.Exception, m, fldspecRange fldspec, nested, FSharpEnclosingEntityKind.Exception, false, access) ] // Process a class declaration or F# type declaration and processExnDefn baseName (SynExceptionDefn(repr, membDefns, _)) = - let nested = processMembers membDefns NavigationEntityKind.Exception |> snd + let nested = processMembers membDefns FSharpEnclosingEntityKind.Exception |> snd processExnDefnRepr baseName nested repr - and processTycon baseName (SynTypeDefn(SynComponentInfo(_, _, _, lid, _, _, access, _), repr, membDefns, _, m)) = - let topMembers = processMembers membDefns NavigationEntityKind.Class |> snd + and processTycon baseName (TypeDefn(ComponentInfo(_, _, _, lid, _, _, access, _), repr, membDefns, m)) = + let topMembers = processMembers membDefns FSharpEnclosingEntityKind.Class |> snd match repr with | SynTypeDefnRepr.Exception repr -> processExnDefnRepr baseName [] repr | SynTypeDefnRepr.ObjectModel(_, membDefns, mb) -> // F# class declaration - let members = processMembers membDefns NavigationEntityKind.Class |> snd + let members = processMembers membDefns FSharpEnclosingEntityKind.Class |> snd let nested = members@topMembers - ([ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Class, m, bodyRange mb nested, nested, NavigationEntityKind.Class, false, access) ]: ((NavigationItem * int * _) list)) + ([ createDeclLid(baseName, lid, TypeDecl, FSharpGlyph.Class, m, bodyRange mb nested, nested, FSharpEnclosingEntityKind.Class, false, access) ]: ((FSharpNavigationDeclarationItem * int * _) list)) | SynTypeDefnRepr.Simple(simple, _) -> // F# type declaration match simple with | SynTypeDefnSimpleRepr.Union(_, cases, mb) -> let cases = - [ for (SynUnionCase(_, id, fldspec, _, _, _)) in cases -> - createMember(id, NavigationItemKind.Other, FSharpGlyph.Struct, unionRanges (fldspecRange fldspec) id.idRange, NavigationEntityKind.Union, false, access) ] + [ for (UnionCase(_, id, fldspec, _, _, _)) in cases -> + createMember(id, OtherDecl, FSharpGlyph.Struct, unionRanges (fldspecRange fldspec) id.idRange, FSharpEnclosingEntityKind.DU, false, access) ] let nested = cases@topMembers - [ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Union, m, bodyRange mb nested, nested, NavigationEntityKind.Union, false, access) ] + [ createDeclLid(baseName, lid, TypeDecl, FSharpGlyph.Union, m, bodyRange mb nested, nested, FSharpEnclosingEntityKind.DU, false, access) ] | SynTypeDefnSimpleRepr.Enum(cases, mb) -> let cases = - [ for (SynEnumCase(_, id, _, _, _, m)) in cases -> - createMember(id, NavigationItemKind.Field, FSharpGlyph.EnumMember, m, NavigationEntityKind.Enum, false, access) ] + [ for (EnumCase(_, id, _, _, m)) in cases -> + createMember(id, FieldDecl, FSharpGlyph.EnumMember, m, FSharpEnclosingEntityKind.Enum, false, access) ] let nested = cases@topMembers - [ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Enum, m, bodyRange mb nested, nested, NavigationEntityKind.Enum, false, access) ] + [ createDeclLid(baseName, lid, TypeDecl, FSharpGlyph.Enum, m, bodyRange mb nested, nested, FSharpEnclosingEntityKind.Enum, false, access) ] | SynTypeDefnSimpleRepr.Record(_, fields, mb) -> let fields = - [ for (SynField(_, _, id, _, _, _, _, m)) in fields do + [ for (Field(_, _, id, _, _, _, _, m)) in fields do match id with | Some ident -> - yield createMember(ident, NavigationItemKind.Field, FSharpGlyph.Field, m, NavigationEntityKind.Record, false, access) + yield createMember(ident, FieldDecl, FSharpGlyph.Field, m, FSharpEnclosingEntityKind.Record, false, access) | _ -> () ] let nested = fields@topMembers - [ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Type, m, bodyRange mb nested, nested, NavigationEntityKind.Record, false, access) ] + [ createDeclLid(baseName, lid, TypeDecl, FSharpGlyph.Type, m, bodyRange mb nested, nested, FSharpEnclosingEntityKind.Record, false, access) ] | SynTypeDefnSimpleRepr.TypeAbbrev(_, _, mb) -> - [ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Typedef, m, bodyRange mb topMembers, topMembers, NavigationEntityKind.Class, false, access) ] + [ createDeclLid(baseName, lid, TypeDecl, FSharpGlyph.Typedef, m, bodyRange mb topMembers, topMembers, FSharpEnclosingEntityKind.Class, false, access) ] - //| SynTypeDefnSimpleRepr.General of TyconKind * (SynType * Range * ident option) list * (valSpfn * MemberFlags) list * fieldDecls * bool * bool * Range - //| SynTypeDefnSimpleRepr.LibraryOnlyILAssembly of ILType * Range - //| TyconCore_repr_hidden of Range + //| SynTypeDefnSimpleRepr.General of TyconKind * (SynType * range * ident option) list * (valSpfn * MemberFlags) list * fieldDecls * bool * bool * range + //| SynTypeDefnSimpleRepr.LibraryOnlyILAssembly of ILType * range + //| TyconCore_repr_hidden of range | _ -> [] // Returns class-members for the right dropdown - and processMembers members enclosingEntityKind : (range * list) = + and processMembers members enclosingEntityKind : (range * list) = let members = members |> List.groupBy (fun x -> x.Range) @@ -229,19 +226,19 @@ module NavigationImpl = match memb with | SynMemberDefn.LetBindings(binds, _, _, _) -> List.collect (processBinding false enclosingEntityKind false) binds | SynMemberDefn.Member(bind, _) -> processBinding true enclosingEntityKind false bind - | SynMemberDefn.ValField(SynField(_, _, Some(rcid), _, _, _, access, range), _) -> - [ createMember(rcid, NavigationItemKind.Field, FSharpGlyph.Field, range, enclosingEntityKind, false, access) ] + | SynMemberDefn.ValField(Field(_, _, Some(rcid), _, _, _, access, range), _) -> + [ createMember(rcid, FieldDecl, FSharpGlyph.Field, range, enclosingEntityKind, false, access) ] | SynMemberDefn.AutoProperty(_attribs,_isStatic,id,_tyOpt,_propKind,_,_xmlDoc, access,_synExpr, _, _) -> - [ createMember(id, NavigationItemKind.Field, FSharpGlyph.Field, id.idRange, enclosingEntityKind, false, access) ] - | SynMemberDefn.AbstractSlot(SynValSig(_, id, _, ty, _, _, _, _, access, _, _), _, _) -> - [ createMember(id, NavigationItemKind.Method, FSharpGlyph.OverridenMethod, ty.Range, enclosingEntityKind, true, access) ] + [ createMember(id, FieldDecl, FSharpGlyph.Field, id.idRange, enclosingEntityKind, false, access) ] + | SynMemberDefn.AbstractSlot(ValSpfn(_, id, _, ty, _, _, _, _, access, _, _), _, _) -> + [ createMember(id, MethodDecl, FSharpGlyph.OverridenMethod, ty.Range, enclosingEntityKind, true, access) ] | SynMemberDefn.NestedType _ -> failwith "tycon as member????" //processTycon tycon | SynMemberDefn.Interface(_, Some(membs), _) -> processMembers membs enclosingEntityKind |> snd | _ -> [] // can happen if one is a getter and one is a setter - | [SynMemberDefn.Member(memberDefn=SynBinding(headPat=SynPat.LongIdent(lid1, Some(info1),_,_,_,_)) as binding1) - SynMemberDefn.Member(memberDefn=SynBinding(headPat=SynPat.LongIdent(lid2, Some(info2),_,_,_,_)) as binding2)] -> + | [SynMemberDefn.Member(memberDefn=Binding(headPat=SynPat.LongIdent(lid1, Some(info1),_,_,_,_)) as binding1) + SynMemberDefn.Member(memberDefn=Binding(headPat=SynPat.LongIdent(lid2, Some(info2),_,_,_,_)) as binding2)] -> // ensure same long id assert((lid1.Lid,lid2.Lid) ||> List.forall2 (fun x y -> x.idText = y.idText)) // ensure one is getter, other is setter @@ -258,23 +255,23 @@ module NavigationImpl = // Process declarations in a module that belong to the right drop-down (let bindings) let processNestedDeclarations decls = decls |> List.collect (function - | SynModuleDecl.Let(_, binds, _) -> List.collect (processBinding false NavigationEntityKind.Module false) binds + | SynModuleDecl.Let(_, binds, _) -> List.collect (processBinding false FSharpEnclosingEntityKind.Module false) binds | _ -> []) // Process declarations nested in a module that should be displayed in the left dropdown // (such as type declarations, nested modules etc.) - let rec processNavigationTopLevelDeclarations(baseName, decls) = decls |> List.collect (function + let rec processFSharpNavigationTopLevelDeclarations(baseName, decls) = decls |> List.collect (function | SynModuleDecl.ModuleAbbrev(id, lid, m) -> - [ createDecl(baseName, id, NavigationItemKind.Module, FSharpGlyph.Module, m, rangeOfLid lid, [], NavigationEntityKind.Namespace, false, None) ] + [ createDecl(baseName, id, ModuleDecl, FSharpGlyph.Module, m, rangeOfLid lid, [], FSharpEnclosingEntityKind.Namespace, false, None) ] - | SynModuleDecl.NestedModule(SynComponentInfo(_, _, _, lid, _, _, access, _), _isRec, decls, _, m) -> + | SynModuleDecl.NestedModule(ComponentInfo(_, _, _, lid, _, _, access, _), _isRec, decls, _, m) -> // Find let bindings (for the right dropdown) let nested = processNestedDeclarations(decls) let newBaseName = (if (baseName = "") then "" else baseName+".") + (textOfLid lid) // Get nested modules and types (for the left dropdown) - let other = processNavigationTopLevelDeclarations(newBaseName, decls) - createDeclLid(baseName, lid, NavigationItemKind.Module, FSharpGlyph.Module, m, unionRangesChecked (rangeOfDecls nested) (moduleRange (rangeOfLid lid) other), nested, NavigationEntityKind.Module, false, access) :: other + let other = processFSharpNavigationTopLevelDeclarations(newBaseName, decls) + createDeclLid(baseName, lid, ModuleDecl, FSharpGlyph.Module, m, unionRangesChecked (rangeOfDecls nested) (moduleRange (rangeOfLid lid) other), nested, FSharpEnclosingEntityKind.Module, false, access) :: other | SynModuleDecl.Types(tydefs, _) -> tydefs |> List.collect (processTycon baseName) | SynModuleDecl.Exception (defn,_) -> processExnDefn baseName defn @@ -289,18 +286,18 @@ module NavigationImpl = // Find let bindings (for the right dropdown) let nested = processNestedDeclarations(decls) // Get nested modules and types (for the left dropdown) - let other = processNavigationTopLevelDeclarations(baseName, decls) + let other = processFSharpNavigationTopLevelDeclarations(baseName, decls) // Create explicitly - it can be 'single top level' thing that is hidden match id with | [] -> other | _ -> let decl = - NavigationItem.Create - (textOfLid id, (if kind.IsModule then NavigationItemKind.ModuleFile else NavigationItemKind.Namespace), + FSharpNavigationDeclarationItem.Create + (textOfLid id, (if kind.IsModule then ModuleFileDecl else NamespaceDecl), FSharpGlyph.Module, m, unionRangesChecked (rangeOfDecls nested) (moduleRange (rangeOfLid id) other), - singleTopLevel, NavigationEntityKind.Module, false, access), (addItemName(textOfLid id)), nested + singleTopLevel, FSharpEnclosingEntityKind.Module, false, access), (addItemName(textOfLid id)), nested decl :: other) let items = @@ -311,7 +308,7 @@ module NavigationImpl = nest |> Array.sortInPlaceWith (fun a b -> compare a.Name b.Name) { Declaration = d.WithUniqueName(uniqueName d.Name idx); Nested = nest } ) items |> Array.sortInPlaceWith (fun a b -> compare a.Declaration.Name b.Declaration.Name) - new NavigationItems(items) + new FSharpNavigationItems(items) /// Get information for signature file let getNavigationFromSigFile (modules: SynModuleOrNamespaceSig list) = @@ -328,26 +325,26 @@ module NavigationImpl = // Create declaration (for the left dropdown) let createDeclLid(baseName, lid, kind, baseGlyph, m, bodym, nested, enclosingEntityKind, isAbstract, access) = let name = (if baseName <> "" then baseName + "." else "") + (textOfLid lid) - NavigationItem.Create + FSharpNavigationDeclarationItem.Create (name, kind, baseGlyph, m, bodym, false, enclosingEntityKind, isAbstract, access), (addItemName name), nested let createDecl(baseName, id:Ident, kind, baseGlyph, m, bodym, nested, enclosingEntityKind, isAbstract, access) = let name = (if baseName <> "" then baseName + "." else "") + (id.idText) - NavigationItem.Create + FSharpNavigationDeclarationItem.Create (name, kind, baseGlyph, m, bodym, false, enclosingEntityKind, isAbstract, access), (addItemName name), nested let createMember(id:Ident, kind, baseGlyph, m, enclosingEntityKind, isAbstract, access) = - NavigationItem.Create(id.idText, kind, baseGlyph, m, m, false, enclosingEntityKind, isAbstract, access), (addItemName(id.idText)) + FSharpNavigationDeclarationItem.Create(id.idText, kind, baseGlyph, m, m, false, enclosingEntityKind, isAbstract, access), (addItemName(id.idText)) - let rec processExnRepr baseName nested (SynExceptionDefnRepr(_, (SynUnionCase(_, id, fldspec, _, _, _)), _, _, access, m)) = + let rec processExnRepr baseName nested (SynExceptionDefnRepr(_, (UnionCase(_, id, fldspec, _, _, _)), _, _, access, m)) = // Exception declaration - [ createDecl(baseName, id, NavigationItemKind.Exception, FSharpGlyph.Exception, m, fldspecRange fldspec, nested, NavigationEntityKind.Exception, false, access) ] + [ createDecl(baseName, id, ExnDecl, FSharpGlyph.Exception, m, fldspecRange fldspec, nested, FSharpEnclosingEntityKind.Exception, false, access) ] and processExnSig baseName (SynExceptionSig(repr, memberSigs, _)) = let nested = processSigMembers memberSigs processExnRepr baseName nested repr - and processTycon baseName (SynTypeDefnSig(SynComponentInfo(_, _, _, lid, _, _, access, _), repr, membDefns, m)) = + and processTycon baseName (TypeDefnSig(ComponentInfo(_, _, _, lid, _, _, access, _), repr, membDefns, m)) = let topMembers = processSigMembers membDefns match repr with | SynTypeDefnSigRepr.Exception repr -> processExnRepr baseName [] repr @@ -355,71 +352,71 @@ module NavigationImpl = // F# class declaration let members = processSigMembers membDefns let nested = members @ topMembers - ([ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Class, m, bodyRange mb nested, nested, NavigationEntityKind.Class, false, access) ]: ((NavigationItem * int * _) list)) + ([ createDeclLid(baseName, lid, TypeDecl, FSharpGlyph.Class, m, bodyRange mb nested, nested, FSharpEnclosingEntityKind.Class, false, access) ]: ((FSharpNavigationDeclarationItem * int * _) list)) | SynTypeDefnSigRepr.Simple(simple, _) -> // F# type declaration match simple with | SynTypeDefnSimpleRepr.Union(_, cases, mb) -> let cases = - [ for (SynUnionCase(_, id, fldspec, _, _, _)) in cases -> - createMember(id, NavigationItemKind.Other, FSharpGlyph.Struct, unionRanges (fldspecRange fldspec) id.idRange, NavigationEntityKind.Union, false, access) ] + [ for (UnionCase(_, id, fldspec, _, _, _)) in cases -> + createMember(id, OtherDecl, FSharpGlyph.Struct, unionRanges (fldspecRange fldspec) id.idRange, FSharpEnclosingEntityKind.DU, false, access) ] let nested = cases@topMembers - [ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Union, m, bodyRange mb nested, nested, NavigationEntityKind.Union, false, access) ] + [ createDeclLid(baseName, lid, TypeDecl, FSharpGlyph.Union, m, bodyRange mb nested, nested, FSharpEnclosingEntityKind.DU, false, access) ] | SynTypeDefnSimpleRepr.Enum(cases, mb) -> let cases = - [ for (SynEnumCase(_, id, _, _, _, m)) in cases -> - createMember(id, NavigationItemKind.Field, FSharpGlyph.EnumMember, m, NavigationEntityKind.Enum, false, access) ] + [ for (EnumCase(_, id, _, _, m)) in cases -> + createMember(id, FieldDecl, FSharpGlyph.EnumMember, m, FSharpEnclosingEntityKind.Enum, false, access) ] let nested = cases@topMembers - [ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Enum, m, bodyRange mb nested, nested, NavigationEntityKind.Enum, false, access) ] + [ createDeclLid(baseName, lid, TypeDecl, FSharpGlyph.Enum, m, bodyRange mb nested, nested, FSharpEnclosingEntityKind.Enum, false, access) ] | SynTypeDefnSimpleRepr.Record(_, fields, mb) -> let fields = - [ for (SynField(_, _, id, _, _, _, _, m)) in fields do + [ for (Field(_, _, id, _, _, _, _, m)) in fields do match id with | Some ident -> - yield createMember(ident, NavigationItemKind.Field, FSharpGlyph.Field, m, NavigationEntityKind.Record, false, access) + yield createMember(ident, FieldDecl, FSharpGlyph.Field, m, FSharpEnclosingEntityKind.Record, false, access) | _ -> () ] let nested = fields@topMembers - [ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Type, m, bodyRange mb nested, nested, NavigationEntityKind.Record, false, access) ] + [ createDeclLid(baseName, lid, TypeDecl, FSharpGlyph.Type, m, bodyRange mb nested, nested, FSharpEnclosingEntityKind.Record, false, access) ] | SynTypeDefnSimpleRepr.TypeAbbrev(_, _, mb) -> - [ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Typedef, m, bodyRange mb topMembers, topMembers, NavigationEntityKind.Class, false, access) ] + [ createDeclLid(baseName, lid, TypeDecl, FSharpGlyph.Typedef, m, bodyRange mb topMembers, topMembers, FSharpEnclosingEntityKind.Class, false, access) ] //| SynTypeDefnSimpleRepr.General of TyconKind * (SynType * range * ident option) list * (valSpfn * MemberFlags) list * fieldDecls * bool * bool * range //| SynTypeDefnSimpleRepr.LibraryOnlyILAssembly of ILType * range //| TyconCore_repr_hidden of range | _ -> [] - and processSigMembers (members: SynMemberSig list): list = + and processSigMembers (members: SynMemberSig list): list = [ for memb in members do match memb with - | SynMemberSig.Member(SynValSig.SynValSig(_, id, _, _, _, _, _, _, access, _, m), _, _) -> - yield createMember(id, NavigationItemKind.Method, FSharpGlyph.Method, m, NavigationEntityKind.Class, false, access) - | SynMemberSig.ValField(SynField(_, _, Some(rcid), ty, _, _, access, _), _) -> - yield createMember(rcid, NavigationItemKind.Field, FSharpGlyph.Field, ty.Range, NavigationEntityKind.Class, false, access) + | SynMemberSig.Member(SynValSig.ValSpfn(_, id, _, _, _, _, _, _, access, _, m), _, _) -> + yield createMember(id, MethodDecl, FSharpGlyph.Method, m, FSharpEnclosingEntityKind.Class, false, access) + | SynMemberSig.ValField(Field(_, _, Some(rcid), ty, _, _, access, _), _) -> + yield createMember(rcid, FieldDecl, FSharpGlyph.Field, ty.Range, FSharpEnclosingEntityKind.Class, false, access) | _ -> () ] // Process declarations in a module that belong to the right drop-down (let bindings) let processNestedSigDeclarations decls = decls |> List.collect (function - | SynModuleSigDecl.Val(SynValSig.SynValSig(_, id, _, _, _, _, _, _, access, _, m), _) -> - [ createMember(id, NavigationItemKind.Method, FSharpGlyph.Method, m, NavigationEntityKind.Module, false, access) ] + | SynModuleSigDecl.Val(SynValSig.ValSpfn(_, id, _, _, _, _, _, _, access, _, m), _) -> + [ createMember(id, MethodDecl, FSharpGlyph.Method, m, FSharpEnclosingEntityKind.Module, false, access) ] | _ -> [] ) // Process declarations nested in a module that should be displayed in the left dropdown // (such as type declarations, nested modules etc.) - let rec processNavigationTopLevelSigDeclarations(baseName, decls) = + let rec processFSharpNavigationTopLevelSigDeclarations(baseName, decls) = decls |> List.collect (function | SynModuleSigDecl.ModuleAbbrev(id, lid, m) -> - [ createDecl(baseName, id, NavigationItemKind.Module, FSharpGlyph.Module, m, rangeOfLid lid, [], NavigationEntityKind.Module, false, None) ] + [ createDecl(baseName, id, ModuleDecl, FSharpGlyph.Module, m, rangeOfLid lid, [], FSharpEnclosingEntityKind.Module, false, None) ] - | SynModuleSigDecl.NestedModule(SynComponentInfo(_, _, _, lid, _, _, access, _), _, decls, m) -> + | SynModuleSigDecl.NestedModule(ComponentInfo(_, _, _, lid, _, _, access, _), _, decls, m) -> // Find let bindings (for the right dropdown) let nested = processNestedSigDeclarations(decls) let newBaseName = (if baseName = "" then "" else baseName + ".") + (textOfLid lid) // Get nested modules and types (for the left dropdown) - let other = processNavigationTopLevelSigDeclarations(newBaseName, decls) - createDeclLid(baseName, lid, NavigationItemKind.Module, FSharpGlyph.Module, m, unionRangesChecked (rangeOfDecls nested) (moduleRange (rangeOfLid lid) other), nested, NavigationEntityKind.Module, false, access) :: other + let other = processFSharpNavigationTopLevelSigDeclarations(newBaseName, decls) + createDeclLid(baseName, lid, ModuleDecl, FSharpGlyph.Module, m, unionRangesChecked (rangeOfDecls nested) (moduleRange (rangeOfLid lid) other), nested, FSharpEnclosingEntityKind.Module, false, access) :: other | SynModuleSigDecl.Types(tydefs, _) -> tydefs |> List.collect (processTycon baseName) | SynModuleSigDecl.Exception (defn,_) -> processExnSig baseName defn @@ -434,15 +431,15 @@ module NavigationImpl = // Find let bindings (for the right dropdown) let nested = processNestedSigDeclarations(decls) // Get nested modules and types (for the left dropdown) - let other = processNavigationTopLevelSigDeclarations(baseName, decls) + let other = processFSharpNavigationTopLevelSigDeclarations(baseName, decls) // Create explicitly - it can be 'single top level' thing that is hidden let decl = - NavigationItem.Create - (textOfLid id, (if kind.IsModule then NavigationItemKind.ModuleFile else NavigationItemKind.Namespace), + FSharpNavigationDeclarationItem.Create + (textOfLid id, (if kind.IsModule then ModuleFileDecl else NamespaceDecl), FSharpGlyph.Module, m, unionRangesChecked (rangeOfDecls nested) (moduleRange (rangeOfLid id) other), - singleTopLevel, NavigationEntityKind.Module, false, access), (addItemName(textOfLid id)), nested + singleTopLevel, FSharpEnclosingEntityKind.Module, false, access), (addItemName(textOfLid id)), nested decl :: other) let items = @@ -455,54 +452,56 @@ module NavigationImpl = { Declaration = d.WithUniqueName(uniqueName d.Name idx); Nested = nest } ) items |> Array.sortInPlaceWith (fun a b -> compare a.Declaration.Name b.Declaration.Name) - new NavigationItems(items) + new FSharpNavigationItems(items) [] -module Navigation = +module FSharpNavigation = let getNavigation (parsedInput: ParsedInput) = match parsedInput with | ParsedInput.SigFile (ParsedSigFileInput (modules = modules)) -> NavigationImpl.getNavigationFromSigFile modules | ParsedInput.ImplFile (ParsedImplFileInput (modules = modules)) -> NavigationImpl.getNavigationFromImplFile modules - let empty = NavigationItems([||]) + let empty = FSharpNavigationItems([||]) [] -type NavigableItemKind = - | Module - | ModuleAbbreviation - | Exception - | Type - | ModuleValue - | Field - | Property - | Constructor - | Member - | EnumCase - | UnionCase - override x.ToString() = sprintf "%+A" x +module NavigateTo = + open System + + [] + type NavigableItemKind = + | Module + | ModuleAbbreviation + | Exception + | Type + | ModuleValue + | Field + | Property + | Constructor + | Member + | EnumCase + | UnionCase + override x.ToString() = sprintf "%+A" x -[] -type NavigableContainerType = - | File - | Namespace - | Module - | Type - | Exception - -type NavigableContainer = - { Type: NavigableContainerType - Name: string } - -type NavigableItem = - { Name: string - Range: range - IsSignature: bool - Kind: NavigableItemKind - Container: NavigableContainer } + [] + type ContainerType = + | File + | Namespace + | Module + | Type + | Exception + + type Container = + { Type: ContainerType + Name: string } + + type NavigableItem = + { Name: string + Range: range + IsSignature: bool + Kind: NavigableItemKind + Container: Container } -[] -module NavigateTo = - let GetNavigableItems (parsedInput: ParsedInput) : NavigableItem [] = + let getNavigableItems (parsedInput: ParsedInput) : NavigableItem [] = let rec lastInLid (lid: LongIdent) = match lid with | [x] -> Some x @@ -512,7 +511,7 @@ module NavigateTo = let formatLongIdent (lid: LongIdent) = lid |> List.map (fun id -> id.idText) |> String.concat "." let result = ResizeArray() - let addIdent kind (id: Ident) (isSignature: bool) (container: NavigableContainer) = + let addIdent kind (id: Ident) (isSignature: bool) (container: Container) = if not (String.IsNullOrEmpty id.idText) then let item = { Name = id.idText @@ -530,40 +529,40 @@ module NavigateTo = let addModuleAbbreviation (id: Ident) isSig container = addIdent NavigableItemKind.ModuleAbbreviation id isSig container - let addExceptionRepr (SynExceptionDefnRepr(_, SynUnionCase(_, id, _, _, _, _), _, _, _, _)) isSig container = + let addExceptionRepr (SynExceptionDefnRepr(_, UnionCase(_, id, _, _, _, _), _, _, _, _)) isSig container = addIdent NavigableItemKind.Exception id isSig container - { Type = NavigableContainerType.Exception; Name = id.idText } + { Type = ContainerType.Exception; Name = id.idText } - let addComponentInfo containerType kind (SynComponentInfo(_, _, _, lid, _, _, _, _)) isSig container = + let addComponentInfo containerType kind (ComponentInfo(_, _, _, lid, _, _, _, _)) isSig container = match lastInLid lid with | Some id -> addIdent kind id isSig container | _ -> () { Type = containerType; Name = formatLongIdent lid } - let addValSig kind (SynValSig(_, id, _, _, _, _, _, _, _, _, _)) isSig container = + let addValSig kind (ValSpfn(_, id, _, _, _, _, _, _, _, _, _)) isSig container = addIdent kind id isSig container - let addField(SynField(_, _, id, _, _, _, _, _)) isSig container = + let addField(SynField.Field(_, _, id, _, _, _, _, _)) isSig container = match id with | Some id -> addIdent NavigableItemKind.Field id isSig container | _ -> () - let addEnumCase(SynEnumCase(_, id, _, _, _, _)) isSig = + let addEnumCase(EnumCase(_, id, _, _, _)) isSig = addIdent NavigableItemKind.EnumCase id isSig - let addUnionCase(SynUnionCase(_, id, _, _, _, _)) isSig container = + let addUnionCase(UnionCase(_, id, _, _, _, _)) isSig container = addIdent NavigableItemKind.UnionCase id isSig container let mapMemberKind mk = match mk with - | SynMemberKind.ClassConstructor // ? - | SynMemberKind.Constructor -> NavigableItemKind.Constructor - | SynMemberKind.PropertyGet - | SynMemberKind.PropertySet - | SynMemberKind.PropertyGetSet -> NavigableItemKind.Property - | SynMemberKind.Member -> NavigableItemKind.Member + | MemberKind.ClassConstructor // ? + | MemberKind.Constructor -> NavigableItemKind.Constructor + | MemberKind.PropertyGet + | MemberKind.PropertySet + | MemberKind.PropertyGetSet -> NavigableItemKind.Property + | MemberKind.Member -> NavigableItemKind.Member - let addBinding (SynBinding(_, _, _, _, _, _, valData, headPat, _, _, _, _)) itemKind container = + let addBinding (Binding(_, _, _, _, _, _, valData, headPat, _, _, _, _)) itemKind container = let (SynValData(memberFlagsOpt, _, _)) = valData let kind = match itemKind with @@ -580,25 +579,25 @@ module NavigateTo = | SynPat.LongIdent(LongIdentWithDots([id], _), _, _, _, _, _) -> // functions addIdent kind id false container - | SynPat.Named (id, _, _, _) | SynPat.As(_, SynPat.Named (id, _, _, _), _) -> + | SynPat.Named(_, id, _, _, _) -> // values addIdent kind id false container | _ -> () - let addMember valSig (memberFlags: SynMemberFlags) isSig container = + let addMember valSig (memberFlags: MemberFlags) isSig container = let ctor = mapMemberKind memberFlags.MemberKind addValSig ctor valSig isSig container let rec walkSigFileInput (ParsedSigFileInput (fileName, _, _, _, moduleOrNamespaceList)) = for item in moduleOrNamespaceList do - walkSynModuleOrNamespaceSig item { Type = NavigableContainerType.File; Name = fileName } + walkSynModuleOrNamespaceSig item { Type = ContainerType.File; Name = fileName } and walkSynModuleOrNamespaceSig (SynModuleOrNamespaceSig(lid, _, kind, decls, _, _, _, _)) container = let isModule = kind.IsModule if isModule then addModule lid true container let container = - { Type = if isModule then NavigableContainerType.Module else NavigableContainerType.Namespace + { Type = if isModule then ContainerType.Module else ContainerType.Namespace Name = formatLongIdent lid } for decl in decls do walkSynModuleSigDecl decl container @@ -612,7 +611,7 @@ module NavigateTo = | SynModuleSigDecl.NamespaceFragment fragment -> walkSynModuleOrNamespaceSig fragment container | SynModuleSigDecl.NestedModule(componentInfo, _, nestedDecls, _) -> - let container = addComponentInfo NavigableContainerType.Module NavigableItemKind.Module componentInfo true container + let container = addComponentInfo ContainerType.Module NavigableItemKind.Module componentInfo true container for decl in nestedDecls do walkSynModuleSigDecl decl container | SynModuleSigDecl.Types(types, _) -> @@ -623,8 +622,8 @@ module NavigateTo = | SynModuleSigDecl.HashDirective _ | SynModuleSigDecl.Open _ -> () - and walkSynTypeDefnSig (SynTypeDefnSig(componentInfo, repr, members, _)) container = - let container = addComponentInfo NavigableContainerType.Type NavigableItemKind.Type componentInfo true container + and walkSynTypeDefnSig (TypeDefnSig(componentInfo, repr, members, _)) container = + let container = addComponentInfo ContainerType.Type NavigableItemKind.Type componentInfo true container for m in members do walkSynMemberSig m container match repr with @@ -647,7 +646,7 @@ module NavigateTo = | SynMemberSig.Interface _ -> () and walkImplFileInput (ParsedImplFileInput (fileName = fileName; modules = moduleOrNamespaceList)) = - let container = { Type = NavigableContainerType.File; Name = fileName } + let container = { Type = ContainerType.File; Name = fileName } for item in moduleOrNamespaceList do walkSynModuleOrNamespace item container @@ -656,7 +655,7 @@ module NavigateTo = if isModule then addModule lid false container let container = - { Type = if isModule then NavigableContainerType.Module else NavigableContainerType.Namespace + { Type = if isModule then ContainerType.Module else ContainerType.Namespace Name = formatLongIdent lid } for decl in decls do walkSynModuleDecl decl container @@ -675,7 +674,7 @@ module NavigateTo = | SynModuleDecl.NamespaceFragment(fragment) -> walkSynModuleOrNamespace fragment container | SynModuleDecl.NestedModule(componentInfo, _, modules, _, _) -> - let container = addComponentInfo NavigableContainerType.Module NavigableItemKind.Module componentInfo false container + let container = addComponentInfo ContainerType.Module NavigableItemKind.Module componentInfo false container for m in modules do walkSynModuleDecl m container | SynModuleDecl.Types(typeDefs, _range) -> @@ -686,8 +685,8 @@ module NavigateTo = | SynModuleDecl.HashDirective _ | SynModuleDecl.Open _ -> () - and walkSynTypeDefn(SynTypeDefn(componentInfo, representation, members, _, _)) container = - let container = addComponentInfo NavigableContainerType.Type NavigableItemKind.Type componentInfo false container + and walkSynTypeDefn(TypeDefn(componentInfo, representation, members, _)) container = + let container = addComponentInfo ContainerType.Type NavigableItemKind.Type componentInfo false container walkSynTypeDefnRepr representation container for m in members do walkSynMemberDefn m container diff --git a/src/fsharp/service/ServiceNavigation.fsi b/src/fsharp/service/ServiceNavigation.fsi index da4912ba818..297880e77e4 100755 --- a/src/fsharp/service/ServiceNavigation.fsi +++ b/src/fsharp/service/ServiceNavigation.fsi @@ -5,27 +5,25 @@ // type checking and intellisense-like environment-reporting. //---------------------------------------------------------------------------- -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler.SourceCodeServices -open System -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree /// Indicates a kind of item to show in an F# navigation bar -[] -type public NavigationItemKind = - | Namespace - | ModuleFile - | Exception - | Module - | Type - | Method - | Property - | Field - | Other +type public FSharpNavigationDeclarationItemKind = + | NamespaceDecl + | ModuleFileDecl + | ExnDecl + | ModuleDecl + | TypeDecl + | MethodDecl + | PropertyDecl + | FieldDecl + | OtherDecl [] -type public NavigationEntityKind = +type public FSharpEnclosingEntityKind = | Namespace | Module | Class @@ -33,82 +31,73 @@ type public NavigationEntityKind = | Interface | Record | Enum - | Union + | DU /// Represents an item to be displayed in the navigation bar [] -type public NavigationItem = - member Name: string - - member UniqueName: string - - member Glyph: FSharpGlyph - - member Kind: NavigationItemKind - - member Range: range - - member BodyRange: range - - member IsSingleTopLevel: bool - - member EnclosingEntityKind: NavigationEntityKind - +type public FSharpNavigationDeclarationItem = + member Name : string + member UniqueName : string + member Glyph : FSharpGlyph + member Kind : FSharpNavigationDeclarationItemKind + member Range : range + member BodyRange : range + member IsSingleTopLevel : bool + member EnclosingEntityKind: FSharpEnclosingEntityKind member IsAbstract: bool - - member Access: SynAccess option + member Access : SynAccess option /// Represents top-level declarations (that should be in the type drop-down) /// with nested declarations (that can be shown in the member drop-down) [] -type public NavigationTopLevelDeclaration = - { Declaration: NavigationItem - Nested: NavigationItem[] } +type public FSharpNavigationTopLevelDeclaration = + { Declaration : FSharpNavigationDeclarationItem + Nested : FSharpNavigationDeclarationItem[] } /// Represents result of 'GetNavigationItems' operation - this contains /// all the members and currently selected indices. First level correspond to /// types & modules and second level are methods etc. [] -type public NavigationItems = - member Declarations: NavigationTopLevelDeclaration[] +type public FSharpNavigationItems = + member Declarations : FSharpNavigationTopLevelDeclaration[] // Functionality to access navigable F# items. -module public Navigation = - val internal empty: NavigationItems - val getNavigation: ParsedInput -> NavigationItems - -[] -type NavigableItemKind = - | Module - | ModuleAbbreviation - | Exception - | Type - | ModuleValue - | Field - | Property - | Constructor - | Member - | EnumCase - | UnionCase - -[] -type NavigableContainerType = - | File - | Namespace - | Module - | Type - | Exception - -type NavigableContainer = - { Type: NavigableContainerType - Name: string } - -type NavigableItem = - { Name: string - Range: range - IsSignature: bool - Kind: NavigableItemKind - Container: NavigableContainer } +module public FSharpNavigation = + val internal empty : FSharpNavigationItems + val getNavigation : ParsedInput -> FSharpNavigationItems module public NavigateTo = - val GetNavigableItems: ParsedInput -> NavigableItem [] + [] + type NavigableItemKind = + | Module + | ModuleAbbreviation + | Exception + | Type + | ModuleValue + | Field + | Property + | Constructor + | Member + | EnumCase + | UnionCase + + [] + type ContainerType = + | File + | Namespace + | Module + | Type + | Exception + + type Container = + { Type: ContainerType + Name: string } + + type NavigableItem = + { Name: string + Range: range + IsSignature: bool + Kind: NavigableItemKind + Container: Container } + + val getNavigableItems : ParsedInput -> NavigableItem [] diff --git a/src/fsharp/service/ServiceParamInfoLocations.fs b/src/fsharp/service/ServiceParamInfoLocations.fs index 5ee35ad6a62..19bd9c4b9bb 100755 --- a/src/fsharp/service/ServiceParamInfoLocations.fs +++ b/src/fsharp/service/ServiceParamInfoLocations.fs @@ -1,15 +1,13 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Position -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps +open FSharp.Compiler.Range [] -type ParameterLocations(longId: string list, longIdRange: range, openParenLocation: pos, tupleEndLocations: pos list, isThereACloseParen: bool, namedParamNames: string option list) = +type FSharpNoteworthyParamInfoLocations(longId: string list, longIdRange: range, openParenLocation: pos, tupleEndLocations: pos list, isThereACloseParen: bool, namedParamNames: string option list) = let tupleEndLocations = Array.ofList tupleEndLocations let namedParamNames = Array.ofList namedParamNames @@ -32,7 +30,7 @@ type ParameterLocations(longId: string list, longIdRange: range, openParenLocati member this.NamedParamNames = namedParamNames [] -module internal ParameterLocationsImpl = +module internal NoteworthyParamInfoLocationsImpl = let isStaticArg (StripParenTypes synType) = match synType with @@ -87,7 +85,7 @@ module internal ParameterLocationsImpl = let inner = traverseSynExpr synExpr match inner with | None -> - if SyntaxTraversal.rangeContainsPosLeftEdgeExclusiveAndRightEdgeInclusive parenRange pos then + if AstTraversal.rangeContainsPosLeftEdgeExclusiveAndRightEdgeInclusive parenRange pos then Found (parenRange.Start, [(parenRange.End, getNamedParamName synExpr)], rpRangeOpt.IsSome), None else NotFound, None @@ -104,7 +102,7 @@ module internal ParameterLocationsImpl = let inner = traverseSynExpr synExpr match inner with | None -> - if SyntaxTraversal.rangeContainsPosLeftEdgeExclusiveAndRightEdgeInclusive parenRange pos then + if AstTraversal.rangeContainsPosLeftEdgeExclusiveAndRightEdgeInclusive 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) r, None @@ -124,14 +122,14 @@ module internal ParameterLocationsImpl = handleSingleArg traverseSynExpr (pos, synExpr, parenRange, rpRangeOpt) | SynExpr.ArbitraryAfterError (_debugStr, range) -> // single argument when e.g. after open paren you hit EOF - if SyntaxTraversal.rangeContainsPosEdgesExclusive range pos then + if AstTraversal.rangeContainsPosEdgesExclusive range pos then let r = Found (range.Start, [(range.End, None)], false) r, None else NotFound, None | SynExpr.Const (SynConst.Unit, unitRange) -> - if SyntaxTraversal.rangeContainsPosEdgesExclusive unitRange pos then + if AstTraversal.rangeContainsPosEdgesExclusive unitRange pos then let r = Found (unitRange.Start, [(unitRange.End, None)], true) r, None else @@ -141,7 +139,7 @@ module internal ParameterLocationsImpl = let inner = traverseSynExpr e match inner with | None -> - if SyntaxTraversal.rangeContainsPosEdgesExclusive e.Range pos then + if AstTraversal.rangeContainsPosEdgesExclusive e.Range pos then // any other expression doesn't start with parens, so if it was the target of an App, then it must be a single argument e.g. "f x" Found (e.Range.Start, [ (e.Range.End, None) ], false), Some inner else @@ -153,16 +151,16 @@ module internal ParameterLocationsImpl = | SynType.App(StripParenTypes (SynType.LongIdent(LongIdentWithDots(lid, _) as lidwd)), Some(openm), args, commas, closemOpt, _pf, wholem) -> let lidm = lidwd.Range let betweenTheBrackets = mkRange wholem.FileName openm.Start wholem.End - if SyntaxTraversal.rangeContainsPosEdgesExclusive betweenTheBrackets pos && args |> List.forall isStaticArg then + if AstTraversal.rangeContainsPosEdgesExclusive betweenTheBrackets pos && args |> List.forall isStaticArg then let commasAndCloseParen = [ for c in commas -> c.End ] @ [ wholem.End ] - Some (ParameterLocations(pathOfLid lid, lidm, openm.Start, commasAndCloseParen, closemOpt.IsSome, args |> List.map digOutIdentFromStaticArg)) + Some (FSharpNoteworthyParamInfoLocations(pathOfLid lid, lidm, openm.Start, commasAndCloseParen, closemOpt.IsSome, args |> List.map digOutIdentFromStaticArg)) else None | _ -> None let traverseInput(pos, parseTree) = - SyntaxTraversal.Traverse(pos, parseTree, { new SyntaxVisitorBase<_>() with + AstTraversal.Traverse(pos, parseTree, { new AstTraversal.AstVisitorBase<_>() with member this.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) = let expr = expr // fix debug locals match expr with @@ -173,7 +171,7 @@ module internal ParameterLocationsImpl = match constrArgsResult, cacheOpt with | Found(parenLoc, args, isThereACloseParen), _ -> let typeName = getTypeName synType - Some (ParameterLocations(typeName, synType.Range, parenLoc, args |> List.map fst, isThereACloseParen, args |> List.map snd)) + Some (FSharpNoteworthyParamInfoLocations(typeName, synType.Range, parenLoc, args |> List.map fst, isThereACloseParen, args |> List.map snd)) | NotFound, Some cache -> cache | _ -> @@ -189,10 +187,10 @@ module internal ParameterLocationsImpl = | Some _ -> fResult | _ -> let typeArgsm = mkRange openm.FileName openm.Start wholem.End - if SyntaxTraversal.rangeContainsPosEdgesExclusive typeArgsm pos then + if AstTraversal.rangeContainsPosEdgesExclusive typeArgsm pos then // We found it, dig out ident match digOutIdentFromFuncExpr synExpr with - | Some(lid, lidRange) -> Some (ParameterLocations(lid, lidRange, op.idRange.Start, [ wholem.End ], false, [])) + | Some(lid, lidRange) -> Some (FSharpNoteworthyParamInfoLocations(lid, lidRange, op.idRange.Start, [ wholem.End ], false, [])) | None -> None else None @@ -217,7 +215,7 @@ module internal ParameterLocationsImpl = // For now, we don't support infix operators. None else - Some (ParameterLocations(lid, lidRange, parenLoc, args |> List.map fst, isThereACloseParen, args |> List.map snd)) + Some (FSharpNoteworthyParamInfoLocations(lid, lidRange, parenLoc, args |> List.map fst, isThereACloseParen, args |> List.map snd)) | None -> None | NotFound, Some cache -> cache | _ -> traverseSynExpr synExpr2 @@ -228,39 +226,39 @@ module internal ParameterLocationsImpl = | Some _ as r -> r | None -> let typeArgsm = mkRange openm.FileName openm.Start wholem.End - if SyntaxTraversal.rangeContainsPosEdgesExclusive typeArgsm pos && tyArgs |> List.forall isStaticArg then + if AstTraversal.rangeContainsPosEdgesExclusive typeArgsm pos && tyArgs |> List.forall isStaticArg then let commasAndCloseParen = [ for c in commas -> c.End ] @ [ wholem.End ] - let r = ParameterLocations(["dummy"], synExpr.Range, openm.Start, commasAndCloseParen, closemOpt.IsSome, tyArgs |> List.map digOutIdentFromStaticArg) + let r = FSharpNoteworthyParamInfoLocations(["dummy"], synExpr.Range, openm.Start, commasAndCloseParen, closemOpt.IsSome, tyArgs |> List.map digOutIdentFromStaticArg) Some r else None | _ -> defaultTraverse expr - member this.VisitTypeAbbrev(_path, tyAbbrevRhs, _m) = + member this.VisitTypeAbbrev(tyAbbrevRhs, _m) = match tyAbbrevRhs with | StaticParameters pos loc -> Some loc | _ -> None - member this.VisitImplicitInherit(_path, defaultTraverse, ty, expr, m) = + member this.VisitImplicitInherit(defaultTraverse, ty, expr, m) = match defaultTraverse expr with | Some _ as r -> r | None -> let inheritm = mkRange m.FileName m.Start m.End - if SyntaxTraversal.rangeContainsPosEdgesExclusive inheritm pos then + if AstTraversal.rangeContainsPosEdgesExclusive inheritm pos then // inherit ty(expr) --- treat it like an application (constructor call) let xResult, _cacheOpt = searchSynArgExpr defaultTraverse pos expr match xResult with | Found(parenLoc, args, isThereACloseParen) -> // we found it, dig out ident let typeName = getTypeName ty - let r = ParameterLocations(typeName, ty.Range, parenLoc, args |> List.map fst, isThereACloseParen, args |> List.map snd) + let r = FSharpNoteworthyParamInfoLocations(typeName, ty.Range, parenLoc, args |> List.map fst, isThereACloseParen, args |> List.map snd) Some r | NotFound -> None else None }) -type ParameterLocations with +type FSharpNoteworthyParamInfoLocations with static member Find(pos, parseTree) = match traverseInput(pos, parseTree) with | Some nwpl as r -> @@ -306,7 +304,7 @@ module internal SynExprAppLocationsImpl = | _ -> None, Some inner let getAllCurriedArgsAtPosition pos parseTree = - SyntaxTraversal.Traverse(pos, parseTree, { new SyntaxVisitorBase<_>() with + AstTraversal.Traverse(pos, parseTree, { new AstTraversal.AstVisitorBase<_>() with member _.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) = match expr with | SynExpr.App (_exprAtomicFlag, _isInfix, funcExpr, argExpr, range) when posEq pos range.Start -> diff --git a/src/fsharp/service/ServiceParamInfoLocations.fsi b/src/fsharp/service/ServiceParamInfoLocations.fsi index 77fa2b46326..21a630fa1e4 100755 --- a/src/fsharp/service/ServiceParamInfoLocations.fsi +++ b/src/fsharp/service/ServiceParamInfoLocations.fsi @@ -5,14 +5,14 @@ // type checking and intellisense-like environment-reporting. //---------------------------------------------------------------------------- -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree /// Represents the locations relevant to activating parameter info in an IDE [] -type public ParameterLocations = +type public FSharpNoteworthyParamInfoLocations = /// The text of the long identifier prior to the open-parentheses member LongId : string list @@ -36,7 +36,7 @@ type public ParameterLocations = member NamedParamNames : string option [] /// Find the information about parameter info locations at a particular source location - static member Find : pos * ParsedInput -> ParameterLocations option + static member Find : pos * ParsedInput -> FSharpNoteworthyParamInfoLocations option module internal SynExprAppLocationsImpl = val getAllCurriedArgsAtPosition: pos: pos -> parseTree: ParsedInput -> range list option diff --git a/src/fsharp/service/ServiceParseTreeWalk.fs b/src/fsharp/service/ServiceParseTreeWalk.fs index 18dfb6536f5..219b8cdeb9b 100755 --- a/src/fsharp/service/ServiceParseTreeWalk.fs +++ b/src/fsharp/service/ServiceParseTreeWalk.fs @@ -5,130 +5,14 @@ // type checking and intellisense-like environment-reporting. //-------------------------------------------------------------------------- -namespace FSharp.Compiler.Syntax +namespace FSharp.Compiler.SourceCodeServices -open FSharp.Compiler -open FSharp.Compiler.Syntax +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Position -open FSharp.Compiler.Text.Range - -/// used to track route during traversal AST -[] -type SyntaxNode = - | SynPat of SynPat - | SynType of SynType - | SynExpr of SynExpr - | SynModule of SynModuleDecl - | SynModuleOrNamespace of SynModuleOrNamespace - | SynTypeDefn of SynTypeDefn - | SynMemberDefn of SynMemberDefn - | SynMatchClause of SynMatchClause - | SynBinding of SynBinding - -type SyntaxVisitorPath = SyntaxNode list - -[] -type SyntaxVisitorBase<'T>() = - abstract VisitExpr: path: SyntaxVisitorPath * traverseSynExpr: (SynExpr -> 'T option) * defaultTraverse: (SynExpr -> 'T option) * synExpr: SynExpr -> 'T option - default _.VisitExpr(path: SyntaxVisitorPath, traverseSynExpr: (SynExpr -> 'T option), defaultTraverse: (SynExpr -> 'T option), synExpr: SynExpr) = - ignore (path, traverseSynExpr, defaultTraverse, synExpr) - None - - /// VisitTypeAbbrev(ty,m), defaults to ignoring this leaf of the AST - abstract VisitTypeAbbrev: path: SyntaxVisitorPath * synType: SynType * range: range -> 'T option - default _.VisitTypeAbbrev(path, synType, range) = - ignore (path, synType, range) - None - - /// VisitImplicitInherit(defaultTraverse,ty,expr,m), defaults to just visiting expr - abstract VisitImplicitInherit: path: SyntaxVisitorPath * defaultTraverse: (SynExpr -> 'T option) * inheritedType: SynType * synArgs: SynExpr * range: range -> 'T option - default _.VisitImplicitInherit(path, defaultTraverse, inheritedType, synArgs, range) = - ignore (path, inheritedType, range) - defaultTraverse synArgs - - /// VisitModuleDecl allows overriding module declaration behavior - abstract VisitModuleDecl: path: SyntaxVisitorPath * defaultTraverse: (SynModuleDecl -> 'T option) * synModuleDecl: SynModuleDecl -> 'T option - default _.VisitModuleDecl(path, defaultTraverse, synModuleDecl) = - ignore path - defaultTraverse synModuleDecl - - /// VisitBinding allows overriding binding behavior (note: by default it would defaultTraverse expression) - abstract VisitBinding: path: SyntaxVisitorPath * defaultTraverse: (SynBinding -> 'T option) * synBinding: SynBinding -> 'T option - default _.VisitBinding(path, defaultTraverse, synBinding) = - ignore path - defaultTraverse synBinding - - /// VisitMatchClause allows overriding clause behavior (note: by default it would defaultTraverse expression) - abstract VisitMatchClause: path: SyntaxVisitorPath * defaultTraverse: (SynMatchClause -> 'T option) * matchClause: SynMatchClause -> 'T option - default _.VisitMatchClause(path, defaultTraverse, matchClause) = - ignore path - defaultTraverse matchClause - - /// VisitInheritSynMemberDefn allows overriding inherit behavior (by default do nothing) - abstract VisitInheritSynMemberDefn: path: SyntaxVisitorPath * componentInfo: SynComponentInfo * typeDefnKind: SynTypeDefnKind * SynType * SynMemberDefns * range -> 'T option - default _.VisitInheritSynMemberDefn(path, componentInfo, typeDefnKind, synType, members, range) = - ignore (path, componentInfo, typeDefnKind, synType, members, range) - None - - /// VisitInterfaceSynMemberDefnType allows overriding behavior for visiting interface member in types (by default - do nothing) - abstract VisitInterfaceSynMemberDefnType: path: SyntaxVisitorPath * synType: SynType -> 'T option - default _.VisitInterfaceSynMemberDefnType(path, synType) = - ignore (path, synType) - None - - /// VisitRecordField allows overriding behavior when visiting l.h.s. of constructed record instances - abstract VisitRecordField: path: SyntaxVisitorPath * copyOpt: SynExpr option * recordField: LongIdentWithDots option -> 'T option - default _.VisitRecordField (path, copyOpt, recordField) = - ignore (path, copyOpt, recordField) - None - - /// VisitHashDirective allows overriding behavior when visiting hash directives in FSX scripts, like #r, #load and #I. - abstract VisitHashDirective: path: SyntaxVisitorPath * hashDirective: ParsedHashDirective * range: range -> 'T option - default _.VisitHashDirective (path, hashDirective, range) = - ignore (path, hashDirective, range) - None - - /// VisitModuleOrNamespace allows overriding behavior when visiting module or namespaces - abstract VisitModuleOrNamespace: path: SyntaxVisitorPath * synModuleOrNamespace: SynModuleOrNamespace -> 'T option - default _.VisitModuleOrNamespace (path, synModuleOrNamespace) = - ignore (path, synModuleOrNamespace) - None - - /// VisitComponentInfo allows overriding behavior when visiting type component infos - abstract VisitComponentInfo: path: SyntaxVisitorPath * synComponentInfo: SynComponentInfo -> 'T option - default _.VisitComponentInfo (path, synComponentInfo) = - ignore (path, synComponentInfo) - None - - /// VisitLetOrUse allows overriding behavior when visiting module or local let or use bindings - abstract VisitLetOrUse: path: SyntaxVisitorPath * isRecursive: bool * defaultTraverse: (SynBinding -> 'T option) * bindings: SynBinding list * range: range -> 'T option - default _.VisitLetOrUse (path, isRecursive, defaultTraverse, bindings, range) = - ignore (path, isRecursive, defaultTraverse, bindings, range) - None - - /// VisitType allows overriding behavior when visiting simple pats - abstract VisitSimplePats: path: SyntaxVisitorPath * synPats: SynSimplePat list -> 'T option - default _.VisitSimplePats (path, synPats) = - ignore (path, synPats) - None - - /// VisitPat allows overriding behavior when visiting patterns - abstract VisitPat: path: SyntaxVisitorPath * defaultTraverse: (SynPat -> 'T option) * synPat: SynPat -> 'T option - default _.VisitPat (path, defaultTraverse, synPat) = - ignore path - defaultTraverse synPat - - /// VisitType allows overriding behavior when visiting type hints (x: ..., etc.) - abstract VisitType: path: SyntaxVisitorPath * defaultTraverse: (SynType -> 'T option) * synType: SynType -> 'T option - default _.VisitType (path, defaultTraverse, synType) = - ignore path - defaultTraverse synType /// A range of utility functions to assist with traversing an AST -module SyntaxTraversal = - +module public AstTraversal = // treat ranges as though they are half-open: [,) let rangeContainsPosLeftEdgeInclusive (m1:range) p = if posEq m1.Start m1.End then @@ -145,10 +29,93 @@ module SyntaxTraversal = let rangeContainsPosLeftEdgeExclusiveAndRightEdgeInclusive (m1:range) p = posGt p m1.Start && posGeq m1.End p + /// used to track route during traversal AST + [] + type TraverseStep = + | Expr of SynExpr + | Module of SynModuleDecl + | ModuleOrNamespace of SynModuleOrNamespace + | TypeDefn of SynTypeDefn + | MemberDefn of SynMemberDefn + | MatchClause of SynMatchClause + | Binding of SynBinding + + type TraversePath = TraverseStep list + + [] + type AstVisitorBase<'T>() = + /// VisitExpr(path, traverseSynExpr, defaultTraverse, expr) + /// controls the behavior when a SynExpr is reached; it can just do + /// defaultTraverse(expr) if you have no special logic for this node, and want the default processing to pick which sub-node to dive deeper into + /// or can inject non-default behavior, which might incorporate: + /// traverseSynExpr(subExpr) to recurse deeper on some particular sub-expression based on your own logic + /// path helps to track AST nodes that were passed during traversal + abstract VisitExpr : TraversePath * (SynExpr -> 'T option) * (SynExpr -> 'T option) * SynExpr -> 'T option + + /// VisitTypeAbbrev(ty,m), defaults to ignoring this leaf of the AST + abstract VisitTypeAbbrev : SynType * range -> 'T option + default this.VisitTypeAbbrev(_ty,_m) = None + + /// VisitImplicitInherit(defaultTraverse,ty,expr,m), defaults to just visiting expr + abstract VisitImplicitInherit : (SynExpr -> 'T option) * SynType * SynExpr * range -> 'T option + default this.VisitImplicitInherit(defaultTraverse, _ty, expr, _m) = defaultTraverse expr + + /// VisitModuleDecl allows overriding module declaration behavior + abstract VisitModuleDecl : (SynModuleDecl -> 'T option) * SynModuleDecl -> 'T option + default this.VisitModuleDecl(defaultTraverse, decl) = defaultTraverse decl + + /// VisitBinding allows overriding binding behavior (note: by default it would defaultTraverse expression) + abstract VisitBinding : (SynBinding -> 'T option) * SynBinding -> 'T option + default this.VisitBinding(defaultTraverse, binding) = defaultTraverse binding + + /// VisitMatchClause allows overriding clause behavior (note: by default it would defaultTraverse expression) + abstract VisitMatchClause : (SynMatchClause -> 'T option) * SynMatchClause -> 'T option + default this.VisitMatchClause(defaultTraverse, mc) = defaultTraverse mc + + /// VisitInheritSynMemberDefn allows overriding inherit behavior (by default do nothing) + abstract VisitInheritSynMemberDefn : SynComponentInfo * SynTypeDefnKind * SynType * SynMemberDefns * range -> 'T option + default this.VisitInheritSynMemberDefn(_componentInfo, _typeDefnKind, _synType, _members, _range) = None + + /// VisitInterfaceSynMemberDefnType allows overriding behavior for visiting interface member in types (by default - do nothing) + abstract VisitInterfaceSynMemberDefnType : SynType -> 'T option + default this.VisitInterfaceSynMemberDefnType(_synType) = None + + /// VisitRecordField allows overriding behavior when visiting l.h.s. of constructed record instances + abstract VisitRecordField : TraversePath * SynExpr option * LongIdentWithDots option -> 'T option + default this.VisitRecordField (_path, _copyOpt, _recordField) = None + + /// VisitHashDirective allows overriding behavior when visiting hash directives in FSX scripts, like #r, #load and #I. + abstract VisitHashDirective : range -> 'T option + default this.VisitHashDirective (_) = None + + /// VisitModuleOrNamespace allows overriding behavior when visiting module or namespaces + abstract VisitModuleOrNamespace : SynModuleOrNamespace -> 'T option + default this.VisitModuleOrNamespace (_) = None + + /// VisitComponentInfo allows overriding behavior when visiting type component infos + abstract VisitComponentInfo : SynComponentInfo -> 'T option + default this.VisitComponentInfo (_) = None + + /// VisitLetOrUse allows overriding behavior when visiting module or local let or use bindings + abstract VisitLetOrUse : TraversePath * (SynBinding -> 'T option) * SynBinding list * range -> 'T option + default this.VisitLetOrUse (_, _, _, _) = None + + /// VisitType allows overriding behavior when visiting simple pats + abstract VisitSimplePats : SynSimplePat list -> 'T option + default this.VisitSimplePats (_) = None + + /// VisitPat allows overriding behavior when visiting patterns + abstract VisitPat : (SynPat -> 'T option) * SynPat -> 'T option + default this.VisitPat (defaultTraverse, pat) = defaultTraverse pat + + /// VisitType allows overriding behavior when visiting type hints (x: ..., etc.) + abstract VisitType : (SynType -> 'T option) * SynType -> 'T option + default this.VisitType (defaultTraverse, ty) = defaultTraverse ty + let dive node range project = range,(fun() -> project node) - let pick pos (outerRange:range) (debugObj:obj) (diveResults:list) = + let pick pos (outerRange:range) (_debugObj:obj) (diveResults:list) = match diveResults with | [] -> None | _ -> @@ -191,50 +158,48 @@ module SyntaxTraversal = | _ -> #if DEBUG assert(false) - failwithf "multiple disjoint AST node ranges claimed to contain (%A) from %+A" pos debugObj + failwithf "multiple disjoint AST node ranges claimed to contain (%A) from %+A" pos _debugObj #else - ignore debugObj None #endif /// traverse an implementation file walking all the way down to SynExpr or TypeAbbrev at a particular location /// - let Traverse(pos:pos, parseTree, visitor:SyntaxVisitorBase<'T>) = + let Traverse(pos:pos, parseTree, visitor:AstVisitorBase<'T>) = let pick x = pick pos x - let rec traverseSynModuleDecl origPath (decl:SynModuleDecl) = + let rec traverseSynModuleDecl path (decl:SynModuleDecl) = let pick = pick decl.Range let defaultTraverse m = - let path = SyntaxNode.SynModule m :: origPath + let path = TraverseStep.Module m :: path match m with | SynModuleDecl.ModuleAbbrev(_ident, _longIdent, _range) -> None | SynModuleDecl.NestedModule(_synComponentInfo, _isRec, synModuleDecls, _, _range) -> synModuleDecls |> List.map (fun x -> dive x x.Range (traverseSynModuleDecl path)) |> pick decl - | SynModuleDecl.Let(isRecursive, synBindingList, range) -> - match visitor.VisitLetOrUse(path, isRecursive, traverseSynBinding path, synBindingList, range) with + | SynModuleDecl.Let(_, synBindingList, range) -> + match visitor.VisitLetOrUse(path, traverseSynBinding path, synBindingList, range) with | Some x -> Some x - | None -> synBindingList |> List.map (fun x -> dive x x.RangeOfBindingWithRhs (traverseSynBinding path)) |> pick decl + | None -> synBindingList |> List.map (fun x -> dive x x.RangeOfBindingAndRhs (traverseSynBinding path)) |> pick decl | SynModuleDecl.DoExpr(_sequencePointInfoForBinding, synExpr, _range) -> traverseSynExpr path synExpr | SynModuleDecl.Types(synTypeDefnList, _range) -> synTypeDefnList |> List.map (fun x -> dive x x.Range (traverseSynTypeDefn path)) |> pick decl | SynModuleDecl.Exception(_synExceptionDefn, _range) -> None | SynModuleDecl.Open(_target, _range) -> None | SynModuleDecl.Attributes(_synAttributes, _range) -> None - | SynModuleDecl.HashDirective(parsedHashDirective, range) -> visitor.VisitHashDirective (path, parsedHashDirective, range) + | SynModuleDecl.HashDirective(_parsedHashDirective, range) -> visitor.VisitHashDirective range | SynModuleDecl.NamespaceFragment(synModuleOrNamespace) -> traverseSynModuleOrNamespace path synModuleOrNamespace - visitor.VisitModuleDecl(origPath, defaultTraverse, decl) + visitor.VisitModuleDecl(defaultTraverse, decl) - and traverseSynModuleOrNamespace origPath (SynModuleOrNamespace(_longIdent, _isRec, _isModule, synModuleDecls, _preXmlDoc, _synAttributes, _synAccessOpt, range) as mors) = - match visitor.VisitModuleOrNamespace(origPath, mors) with + and traverseSynModuleOrNamespace path (SynModuleOrNamespace(_longIdent, _isRec, _isModule, synModuleDecls, _preXmlDoc, _synAttributes, _synAccessOpt, range) as mors) = + match visitor.VisitModuleOrNamespace(mors) with | Some x -> Some x | None -> - let path = SyntaxNode.SynModuleOrNamespace mors :: origPath + let path = TraverseStep.ModuleOrNamespace mors :: path synModuleDecls |> List.map (fun x -> dive x x.Range (traverseSynModuleDecl path)) |> pick range mors - and traverseSynExpr origPath (expr:SynExpr) = + and traverseSynExpr path (expr:SynExpr) = let pick = pick expr.Range let defaultTraverse e = - let path = SyntaxNode.SynExpr e :: origPath + let origPath = path + let path = TraverseStep.Expr e :: path let traverseSynExpr = traverseSynExpr path - let traverseSynType = traverseSynType path - let traversePat = traversePat path match e with | SynExpr.Paren (synExpr, _, _, _parenRange) -> traverseSynExpr synExpr @@ -246,7 +211,7 @@ module SyntaxTraversal = | SynExpr.Const (_synConst, _range) -> None - | SynExpr.InterpolatedString (parts, _, _) -> + | SynExpr.InterpolatedString (parts, _) -> [ for part in parts do match part with | SynInterpolatedStringPart.String _ -> () @@ -369,8 +334,8 @@ module SyntaxTraversal = | SynExpr.ObjExpr (ty,baseCallOpt,binds,ifaces,_range1,_range2) -> let result = ifaces - |> Seq.map (fun (SynInterfaceImpl(ty, _, _)) -> ty) - |> Seq.tryPick (fun ty -> visitor.VisitInterfaceSynMemberDefnType(path, ty)) + |> Seq.map (fun (InterfaceImpl(ty, _, _)) -> ty) + |> Seq.tryPick visitor.VisitInterfaceSynMemberDefnType if result.IsSome then result @@ -383,10 +348,10 @@ module SyntaxTraversal = yield dive newCall newCall.Range traverseSynExpr | _ -> () for b in binds do - yield dive b b.RangeOfBindingWithRhs (traverseSynBinding path) - for SynInterfaceImpl(_ty, binds, _range) in ifaces do + yield dive b b.RangeOfBindingAndRhs (traverseSynBinding path) + for InterfaceImpl(_ty, binds, _range) in ifaces do for b in binds do - yield dive b b.RangeOfBindingWithRhs (traverseSynBinding path) + yield dive b b.RangeOfBindingAndRhs (traverseSynBinding path) ] |> pick expr | SynExpr.While (_sequencePointInfoForWhileLoop, synExpr, synExpr2, _range) -> @@ -415,7 +380,7 @@ module SyntaxTraversal = // note: sequence expressions use SynExpr.CompExpr too - they need to be filtered out let isPartOfArrayOrList = match origPath with - | SyntaxNode.SynExpr(SynExpr.ArrayOrListOfSeqExpr (_, _, _)) :: _ -> true + | TraverseStep.Expr(SynExpr.ArrayOrListOfSeqExpr (_, _, _)) :: _ -> true | _ -> false let ok = match isPartOfArrayOrList, synExpr with @@ -429,7 +394,7 @@ module SyntaxTraversal = | SynExpr.Lambda (_, _, synSimplePats, synExpr, _, _range) -> match synSimplePats with | SynSimplePats.SimplePats(pats,_) -> - match visitor.VisitSimplePats(path, pats) with + match visitor.VisitSimplePats(pats) with | Some x -> Some x | None -> traverseSynExpr synExpr | _ -> traverseSynExpr synExpr @@ -462,11 +427,11 @@ module SyntaxTraversal = | SynExpr.TypeApp (synExpr, _, _synTypeList, _commas, _, _, _range) -> traverseSynExpr synExpr - | SynExpr.LetOrUse (_, isRecursive, synBindingList, synExpr, range) -> - match visitor.VisitLetOrUse(path, isRecursive, traverseSynBinding path, synBindingList, range) with + | SynExpr.LetOrUse (_, _, synBindingList, synExpr, range) -> + match visitor.VisitLetOrUse(path, traverseSynBinding path, synBindingList, range) with | Some x -> Some x | None -> - [yield! synBindingList |> List.map (fun x -> dive x x.RangeOfBindingWithRhs (traverseSynBinding path)) + [yield! synBindingList |> List.map (fun x -> dive x x.RangeOfBindingAndRhs (traverseSynBinding path)) yield dive synExpr synExpr.Range traverseSynExpr] |> pick expr @@ -601,51 +566,49 @@ module SyntaxTraversal = | SynExpr.DiscardAfterMissingQualificationAfterDot (synExpr, _range) -> traverseSynExpr synExpr - visitor.VisitExpr(origPath, traverseSynExpr origPath, defaultTraverse, expr) + visitor.VisitExpr(path, traverseSynExpr path, defaultTraverse, expr) - and traversePat origPath (pat: SynPat) = + and traversePat (pat: SynPat) = let defaultTraverse p = - let path = SyntaxNode.SynPat p :: origPath match p with - | SynPat.Paren (p, _) -> traversePat path p - | SynPat.Or (p1, p2, _) -> [ p1; p2] |> List.tryPick (traversePat path) + | SynPat.Paren (p, _) -> traversePat p + | SynPat.Or (p1, p2, _) -> [ p1; p2] |> List.tryPick traversePat | SynPat.Ands (ps, _) | SynPat.Tuple (_, ps, _) - | SynPat.ArrayOrList (_, ps, _) -> ps |> List.tryPick (traversePat path) - | SynPat.Attrib (p, _, _) -> traversePat path p + | SynPat.ArrayOrList (_, ps, _) -> ps |> List.tryPick traversePat + | SynPat.Attrib (p, _, _) -> traversePat p | SynPat.LongIdent(_, _, _, args, _, _) -> match args with - | SynArgPats.Pats ps -> ps |> List.tryPick (traversePat path) + | SynArgPats.Pats ps -> ps |> List.tryPick traversePat | SynArgPats.NamePatPairs (ps, _) -> - ps |> List.map snd |> List.tryPick (traversePat path) + ps |> List.map snd |> List.tryPick traversePat | SynPat.Typed (p, ty, _) -> - [ traversePat path p; traverseSynType path ty ] |> List.tryPick id + [ traversePat p; traverseSynType ty ] |> List.tryPick id | _ -> None - visitor.VisitPat (origPath, defaultTraverse, pat) + visitor.VisitPat (defaultTraverse, pat) - and traverseSynType origPath (StripParenTypes ty) = + and traverseSynType (StripParenTypes ty) = let defaultTraverse ty = - let path = SyntaxNode.SynType ty :: origPath match ty with | SynType.App (typeName, _, typeArgs, _, _, _, _) | SynType.LongIdentApp (typeName, _, _, typeArgs, _, _, _) -> [ yield typeName yield! typeArgs ] - |> List.tryPick (traverseSynType path) - | SynType.Fun (ty1, ty2, _) -> [ty1; ty2] |> List.tryPick (traverseSynType path) + |> List.tryPick traverseSynType + | SynType.Fun (ty1, ty2, _) -> [ty1; ty2] |> List.tryPick traverseSynType | SynType.MeasurePower (ty, _, _) | SynType.HashConstraint (ty, _) | SynType.WithGlobalConstraints (ty, _, _) - | SynType.Array (_, ty, _) -> traverseSynType path ty + | SynType.Array (_, ty, _) -> traverseSynType ty | SynType.StaticConstantNamed (ty1, ty2, _) - | SynType.MeasureDivide (ty1, ty2, _) -> [ty1; ty2] |> List.tryPick (traverseSynType path) - | SynType.Tuple (_, tys, _) -> tys |> List.map snd |> List.tryPick (traverseSynType path) + | SynType.MeasureDivide (ty1, ty2, _) -> [ty1; ty2] |> List.tryPick traverseSynType + | SynType.Tuple (_, tys, _) -> tys |> List.map snd |> List.tryPick traverseSynType | SynType.StaticConstantExpr (expr, _) -> traverseSynExpr [] expr | SynType.Anon _ -> None | _ -> None - visitor.VisitType (origPath, defaultTraverse, ty) + visitor.VisitType (defaultTraverse, ty) and normalizeMembersToDealWithPeculiaritiesOfGettersAndSetters path traverseInherit (synMemberDefns:SynMemberDefns) = synMemberDefns @@ -655,8 +618,8 @@ module SyntaxTraversal = match mems |> Seq.toList with | [mem] -> // the typical case, a single member has this range 'r' Some (dive mem r (traverseSynMemberDefn path traverseInherit)) - | [SynMemberDefn.Member(SynBinding(_,_,_,_,_,_,_,SynPat.LongIdent(lid1,Some(info1),_,_,_,_),_,_,_,_),_) as mem1 - SynMemberDefn.Member(SynBinding(_,_,_,_,_,_,_,SynPat.LongIdent(lid2,Some(info2),_,_,_,_),_,_,_,_),_) as mem2] -> // can happen if one is a getter and one is a setter + | [SynMemberDefn.Member(Binding(_,_,_,_,_,_,_,SynPat.LongIdent(lid1,Some(info1),_,_,_,_),_,_,_,_),_) as mem1 + SynMemberDefn.Member(Binding(_,_,_,_,_,_,_,SynPat.LongIdent(lid2,Some(info2),_,_,_,_),_,_,_,_),_) as mem2] -> // can happen if one is a getter and one is a setter // ensure same long id assert( (lid1.Lid,lid2.Lid) ||> List.forall2 (fun x y -> x.idText = y.idText) ) // ensure one is getter, other is setter @@ -687,10 +650,10 @@ module SyntaxTraversal = #endif ) - and traverseSynTypeDefn origPath (SynTypeDefn(synComponentInfo, synTypeDefnRepr, synMemberDefns, _, tRange) as tydef) = - let path = SyntaxNode.SynTypeDefn tydef :: origPath + and traverseSynTypeDefn path (SynTypeDefn.TypeDefn(synComponentInfo, synTypeDefnRepr, synMemberDefns, tRange) as tydef) = + let path = TraverseStep.TypeDefn tydef :: path - match visitor.VisitComponentInfo (origPath, synComponentInfo) with + match visitor.VisitComponentInfo synComponentInfo with | Some x -> Some x | None -> [ @@ -701,13 +664,13 @@ module SyntaxTraversal = () | SynTypeDefnRepr.ObjectModel(synTypeDefnKind, synMemberDefns, _oRange) -> // traverse inherit function is used to capture type specific data required for processing Inherit part - let traverseInherit (synType: SynType, range: range) = - visitor.VisitInheritSynMemberDefn(path, synComponentInfo, synTypeDefnKind, synType, synMemberDefns, range) + let traverseInherit (synType : SynType, range : range) = + visitor.VisitInheritSynMemberDefn(synComponentInfo, synTypeDefnKind, synType, synMemberDefns, range) yield! synMemberDefns |> normalizeMembersToDealWithPeculiaritiesOfGettersAndSetters path traverseInherit | SynTypeDefnRepr.Simple(synTypeDefnSimpleRepr, _range) -> match synTypeDefnSimpleRepr with | SynTypeDefnSimpleRepr.TypeAbbrev(_,synType,m) -> - yield dive synTypeDefnRepr synTypeDefnRepr.Range (fun _ -> visitor.VisitTypeAbbrev(path, synType,m)) + yield dive synTypeDefnRepr synTypeDefnRepr.Range (fun _ -> visitor.VisitTypeAbbrev(synType,m)) | _ -> () // enums/DUs/record definitions don't have any SynExprs inside them yield! synMemberDefns |> normalizeMembersToDealWithPeculiaritiesOfGettersAndSetters path (fun _ -> None) @@ -715,32 +678,32 @@ module SyntaxTraversal = and traverseSynMemberDefn path traverseInherit (m:SynMemberDefn) = let pick (debugObj:obj) = pick m.Range debugObj - let path = SyntaxNode.SynMemberDefn m :: path + let path = TraverseStep.MemberDefn m :: path match m with | SynMemberDefn.Open(_longIdent, _range) -> None | SynMemberDefn.Member(synBinding, _range) -> traverseSynBinding path synBinding | SynMemberDefn.ImplicitCtor(_synAccessOption, _synAttributes, simplePats, _identOption, _doc, _range) -> match simplePats with - | SynSimplePats.SimplePats(simplePats, _) -> visitor.VisitSimplePats(path, simplePats) + | SynSimplePats.SimplePats(simplePats, _) -> visitor.VisitSimplePats(simplePats) | _ -> None | SynMemberDefn.ImplicitInherit(synType, synExpr, _identOption, range) -> [ dive () synType.Range (fun () -> match traverseInherit (synType, range) with - | None -> visitor.VisitImplicitInherit(path, traverseSynExpr path, synType, synExpr, range) + | None -> visitor.VisitImplicitInherit(traverseSynExpr path, synType, synExpr, range) | x -> x) dive () synExpr.Range (fun() -> - visitor.VisitImplicitInherit(path, traverseSynExpr path, synType, synExpr, range) + visitor.VisitImplicitInherit(traverseSynExpr path, synType, synExpr, range) ) ] |> pick m | SynMemberDefn.AutoProperty(_attribs, _isStatic, _id, _tyOpt, _propKind, _, _xmlDoc, _access, synExpr, _, _) -> traverseSynExpr path synExpr - | SynMemberDefn.LetBindings(synBindingList, isRecursive, _, range) -> - match visitor.VisitLetOrUse(path, isRecursive, traverseSynBinding path, synBindingList, range) with + | SynMemberDefn.LetBindings(synBindingList, _, _, range) -> + match visitor.VisitLetOrUse(path, traverseSynBinding path, synBindingList, range) with | Some x -> Some x - | None -> synBindingList |> List.map (fun x -> dive x x.RangeOfBindingWithRhs (traverseSynBinding path)) |> pick m + | None -> synBindingList |> List.map (fun x -> dive x x.RangeOfBindingAndRhs (traverseSynBinding path)) |> pick m | SynMemberDefn.AbstractSlot(_synValSig, _memberFlags, _range) -> None | SynMemberDefn.Interface(synType, synMemberDefnsOption, _range) -> - match visitor.VisitInterfaceSynMemberDefnType(path, synType) with + match visitor.VisitInterfaceSynMemberDefnType(synType) with | None -> match synMemberDefnsOption with | None -> None @@ -750,12 +713,12 @@ module SyntaxTraversal = | SynMemberDefn.ValField(_synField, _range) -> None | SynMemberDefn.NestedType(synTypeDefn, _synAccessOption, _range) -> traverseSynTypeDefn path synTypeDefn - and traverseSynMatchClause origPath mc = + and traverseSynMatchClause path mc = + let path = TraverseStep.MatchClause mc :: path let defaultTraverse mc = - let path = SyntaxNode.SynMatchClause mc :: origPath match mc with - | (SynMatchClause(synPat, synExprOption, synExpr, _range, _sequencePointInfoForTarget) as all) -> - [dive synPat synPat.Range (traversePat path) ] + | (SynMatchClause.Clause(synPat, synExprOption, synExpr, _range, _sequencePointInfoForTarget) as all) -> + [dive synPat synPat.Range traversePat] @ ([ match synExprOption with @@ -765,17 +728,17 @@ module SyntaxTraversal = ] |> List.map (fun x -> dive x x.Range (traverseSynExpr path)) )|> pick all.Range all - visitor.VisitMatchClause(origPath, defaultTraverse, mc) + visitor.VisitMatchClause(defaultTraverse,mc) - and traverseSynBinding origPath b = + and traverseSynBinding path b = let defaultTraverse b = - let path = SyntaxNode.SynBinding b :: origPath + let path = TraverseStep.Binding b :: path match b with - | (SynBinding(_synAccessOption, _synBindingKind, _, _, _synAttributes, _preXmlDoc, _synValData, synPat, _synBindingReturnInfoOption, synExpr, _range, _sequencePointInfoForBinding)) -> - [ traversePat path synPat + | (SynBinding.Binding(_synAccessOption, _synBindingKind, _, _, _synAttributes, _preXmlDoc, _synValData, synPat, _synBindingReturnInfoOption, synExpr, _range, _sequencePointInfoForBinding)) -> + [ traversePat synPat traverseSynExpr path synExpr ] |> List.tryPick id - visitor.VisitBinding(origPath, defaultTraverse,b) + visitor.VisitBinding(defaultTraverse,b) match parseTree with | ParsedInput.ImplFile (ParsedImplFileInput (_,_,_,_,_,l,_))-> diff --git a/src/fsharp/service/ServiceParseTreeWalk.fsi b/src/fsharp/service/ServiceParseTreeWalk.fsi deleted file mode 100644 index d042d7199c1..00000000000 --- a/src/fsharp/service/ServiceParseTreeWalk.fsi +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.Syntax - -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text - -/// Used to track route during traversal of syntax using SyntaxTraversal.Traverse -[] -type SyntaxNode = - | SynPat of SynPat - | SynType of SynType - | SynExpr of SynExpr - | SynModule of SynModuleDecl - | SynModuleOrNamespace of SynModuleOrNamespace - | SynTypeDefn of SynTypeDefn - | SynMemberDefn of SynMemberDefn - | SynMatchClause of SynMatchClause - | SynBinding of SynBinding - -type SyntaxVisitorPath = SyntaxNode list - -[] -type SyntaxVisitorBase<'T> = - new: unit -> SyntaxVisitorBase<'T> - - default VisitBinding: path: SyntaxVisitorPath * defaultTraverse: (SynBinding -> 'T option) * synBinding: SynBinding -> 'T option - abstract VisitBinding: path: SyntaxVisitorPath * defaultTraverse: (SynBinding -> 'T option) * synBinding: SynBinding -> 'T option - - default VisitComponentInfo: path: SyntaxVisitorPath * synComponentInfo: SynComponentInfo -> 'T option - abstract VisitComponentInfo: path: SyntaxVisitorPath * synComponentInfo: SynComponentInfo -> 'T option - - /// Controls the behavior when a SynExpr is reached; it can just do - /// defaultTraverse(expr) if you have no special logic for this node, and want the default processing to pick which sub-node to dive deeper into - /// or can inject non-default behavior, which might incorporate: - /// traverseSynExpr(subExpr) to recurse deeper on some particular sub-expression based on your own logic - /// path helps to track AST nodes that were passed during traversal - abstract VisitExpr: path: SyntaxVisitorPath * traverseSynExpr: (SynExpr -> 'T option) * defaultTraverse: (SynExpr -> 'T option) * synExpr: SynExpr -> 'T option - default VisitExpr: path: SyntaxVisitorPath * traverseSynExpr: (SynExpr -> 'T option) * defaultTraverse: (SynExpr -> 'T option) * synExpr: SynExpr -> 'T option - - abstract VisitHashDirective: path: SyntaxVisitorPath * hashDirective: ParsedHashDirective * range: range -> 'T option - default VisitHashDirective: path: SyntaxVisitorPath * hashDirective: ParsedHashDirective * range: range -> 'T option - - abstract VisitImplicitInherit: path: SyntaxVisitorPath * defaultTraverse: (SynExpr -> 'T option) * inheritedType: SynType * synArgs: SynExpr * range: range -> 'T option - default VisitImplicitInherit: path: SyntaxVisitorPath * defaultTraverse: (SynExpr -> 'T option) * inheritedType: SynType * synArgs: SynExpr * range: range -> 'T option - - abstract VisitInheritSynMemberDefn: path: SyntaxVisitorPath * componentInfo: SynComponentInfo * typeDefnKind: SynTypeDefnKind * synType: SynType * members: SynMemberDefns * range: range -> 'T option - default VisitInheritSynMemberDefn: path: SyntaxVisitorPath * componentInfo: SynComponentInfo * typeDefnKind: SynTypeDefnKind * synType: SynType * members: SynMemberDefns * range: range -> 'T option - - abstract VisitInterfaceSynMemberDefnType: path: SyntaxVisitorPath * synType: SynType -> 'T option - default VisitInterfaceSynMemberDefnType: path: SyntaxVisitorPath * synType: SynType -> 'T option - - abstract VisitLetOrUse: path: SyntaxVisitorPath * isRecursive: bool * defaultTraverse: (SynBinding -> 'T option) * bindings: SynBinding list * range: range -> 'T option - default VisitLetOrUse: path: SyntaxVisitorPath * isRecursive: bool * defaultTraverse: (SynBinding -> 'T option) * bindings: SynBinding list * range: range -> 'T option - - abstract VisitMatchClause: path: SyntaxVisitorPath * defaultTraverse: (SynMatchClause -> 'T option) * matchClause: SynMatchClause -> 'T option - default VisitMatchClause: path: SyntaxVisitorPath * defaultTraverse: (SynMatchClause -> 'T option) * matchClause: SynMatchClause -> 'T option - - abstract VisitModuleDecl: path: SyntaxVisitorPath * defaultTraverse: (SynModuleDecl -> 'T option) * synModuleDecl: SynModuleDecl -> 'T option - default VisitModuleDecl: path: SyntaxVisitorPath * defaultTraverse: (SynModuleDecl -> 'T option) * synModuleDecl: SynModuleDecl -> 'T option - - abstract VisitModuleOrNamespace: path: SyntaxVisitorPath * synModuleOrNamespace: SynModuleOrNamespace -> 'T option - default VisitModuleOrNamespace: path: SyntaxVisitorPath * synModuleOrNamespace: SynModuleOrNamespace -> 'T option - - abstract VisitPat: path: SyntaxVisitorPath * defaultTraverse: (SynPat -> 'T option) * synPat: SynPat -> 'T option - default VisitPat: path: SyntaxVisitorPath * defaultTraverse: (SynPat -> 'T option) * synPat: SynPat -> 'T option - - abstract VisitRecordField: path: SyntaxVisitorPath * copyOpt: SynExpr option * recordField: LongIdentWithDots option -> 'T option - default VisitRecordField: path: SyntaxVisitorPath * copyOpt: SynExpr option * recordField: LongIdentWithDots option -> 'T option - - abstract VisitSimplePats: path: SyntaxVisitorPath * synPats: SynSimplePat list -> 'T option - default VisitSimplePats: path: SyntaxVisitorPath * synPats: SynSimplePat list -> 'T option - - abstract VisitType: path: SyntaxVisitorPath * defaultTraverse: (SynType -> 'T option) * synType: SynType -> 'T option - default VisitType: path: SyntaxVisitorPath * defaultTraverse: (SynType -> 'T option) * synType: SynType -> 'T option - - abstract VisitTypeAbbrev: path: SyntaxVisitorPath * synType: SynType * range: range -> 'T option - default VisitTypeAbbrev: path: SyntaxVisitorPath * synType: SynType * range: range -> 'T option - -module public SyntaxTraversal = - - val internal rangeContainsPosLeftEdgeInclusive: m1: range -> p: pos -> bool - - val internal rangeContainsPosEdgesExclusive: m1: range -> p: pos -> bool - - val internal rangeContainsPosLeftEdgeExclusiveAndRightEdgeInclusive: m1: range -> p: pos -> bool - - val internal dive: node: 'a -> range: 'b -> project: ('a -> 'c) -> 'b * (unit -> 'c) - - val internal pick: pos: pos -> outerRange: range -> debugObj: obj -> diveResults: (range * (unit -> 'a option)) list -> 'a option - - val Traverse: pos: pos * parseTree: ParsedInput * visitor: SyntaxVisitorBase<'T> -> 'T option diff --git a/src/fsharp/service/ServiceParsedInputOps.fsi b/src/fsharp/service/ServiceParsedInputOps.fsi deleted file mode 100644 index d0c36e03cc9..00000000000 --- a/src/fsharp/service/ServiceParsedInputOps.fsi +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.EditorServices - -open System.Collections.Generic -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text - -type public CompletionPath = string list * string option // plid * residue - -[] -type public InheritanceContext = - | Class - | Interface - | Unknown - -[] -type public RecordContext = - | CopyOnUpdate of range: range * path: CompletionPath - | Constructor of typeName: string - | New of path: CompletionPath - -[] -type public CompletionContext = - /// Completion context cannot be determined due to errors - | Invalid - - /// Completing something after the inherit keyword - | Inherit of context: InheritanceContext * path: CompletionPath - - /// Completing records field - | RecordField of context: RecordContext - - | RangeOperator - - /// Completing named parameters\setters in parameter list of constructor\method calls - /// end of name ast node * list of properties\parameters that were already set - | ParameterList of pos * HashSet - - | AttributeApplication - - | OpenDeclaration of isOpenType: bool - - /// Completing pattern type (e.g. foo (x: |)) - | PatternType - -type public ModuleKind = - { IsAutoOpen: bool - HasModuleSuffix: bool } - -[] -type public EntityKind = - | Attribute - | Type - | FunctionOrValue of isActivePattern:bool - | Module of ModuleKind - -/// Kind of lexical scope. -[] -type public ScopeKind = - | Namespace - | TopModule - | NestedModule - | OpenDeclaration - | HashDirective - -/// Insert open namespace context. -[] -type public InsertionContext = - { - /// Current scope kind. - ScopeKind: ScopeKind - - /// Current position (F# compiler line number). - Pos: pos - } - -/// Where open statements should be added. -[] -type public OpenStatementInsertionPoint = - | TopLevel - | Nearest - -/// Short identifier, i.e. an identifier that contains no dots. -type public ShortIdent = string - -/// An array of `ShortIdent`. -type public ShortIdents = ShortIdent[] - -/// `ShortIdent` with a flag indicating if it's resolved in some scope. -type public MaybeUnresolvedIdent = - { Ident: ShortIdent; Resolved: bool } - -/// Helper data structure representing a symbol, suitable for implementing unresolved identifiers resolution code fixes. -type public InsertionContextEntity = - { - /// Full name, relative to the current scope. - FullRelativeName: string - - /// Ident parts needed to append to the current ident to make it resolvable in current scope. - Qualifier: string - - /// Namespace that is needed to open to make the entity resolvable in the current scope. - Namespace: string option - - /// Full display name (i.e. last ident plus modules with `RequireQualifiedAccess` attribute prefixed). - FullDisplayName: string - - /// Last part of the entity's full name. - LastIdent: ShortIdent - } - -/// Operations querying the entire syntax tree -module public ParsedInput = - val TryFindExpressionASTLeftOfDotLeftOfCursor: pos: pos * parsedInput: ParsedInput -> (pos * bool) option - - val GetRangeOfExprLeftOfDot: pos: pos * parsedInput: ParsedInput -> range option - - val TryFindExpressionIslandInPosition: pos: pos * parsedInput: ParsedInput -> string option - - val TryGetCompletionContext: pos: pos * parsedInput: ParsedInput * lineStr: string -> CompletionContext option - - val GetEntityKind: pos: pos * parsedInput: ParsedInput -> EntityKind option - - val GetFullNameOfSmallestModuleOrNamespaceAtPoint: pos: pos * parsedInput: ParsedInput -> string[] - - /// Returns `InsertContext` based on current position and symbol idents. - val TryFindInsertionContext: - currentLine: int -> - parsedInput: ParsedInput -> - partiallyQualifiedName: MaybeUnresolvedIdent[] -> - insertionPoint: OpenStatementInsertionPoint -> - (( (* requiresQualifiedAccessParent: *) ShortIdents option * (* autoOpenParent: *) ShortIdents option * (* entityNamespace *) ShortIdents option * (* entity: *) ShortIdents) -> (InsertionContextEntity * InsertionContext)[]) - - /// Returns `InsertContext` based on current position and symbol idents. - val FindNearestPointToInsertOpenDeclaration: currentLine: int -> parsedInput: ParsedInput -> entity: ShortIdents -> insertionPoint: OpenStatementInsertionPoint -> InsertionContext - - /// Returns long identifier at position. - val GetLongIdentAt: parsedInput: ParsedInput -> pos: pos -> LongIdent option - - /// Corrects insertion line number based on kind of scope and text surrounding the insertion point. - val AdjustInsertionPoint: getLineStr: (int -> string) -> ctx: InsertionContext -> pos - -// implementation details used by other code in the compiler -module internal SourceFileImpl = - - val IsInterfaceFile: string -> bool - - val AdditionalDefinesForUseInEditor: isInteractive: bool -> string list - diff --git a/src/fsharp/service/ServiceStructure.fs b/src/fsharp/service/ServiceStructure.fs index 2e5f9fd3c76..bd6cf90273a 100644 --- a/src/fsharp/service/ServiceStructure.fs +++ b/src/fsharp/service/ServiceStructure.fs @@ -1,13 +1,12 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler.SourceCodeServices -open Internal.Utilities.Library -open FSharp.Compiler.Syntax +open FSharp.Compiler +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Position -open FSharp.Compiler.Text.Range module Structure = @@ -57,7 +56,7 @@ module Structure = | [] -> other | ls -> ls - |> List.map (fun (SynTyparDecl (_, typarg)) -> typarg.Range) + |> List.map (fun (TyparDecl (_, typarg)) -> typarg.Range) |> List.reduce unionRanges let rangeOfSynPatsElse other (synPats:SynSimplePat list) = @@ -275,7 +274,7 @@ module Structure = | SynExpr.Match (seqPointAtBinding, _expr, clauses, r) | SynExpr.MatchBang (seqPointAtBinding, _expr, clauses, r) -> match seqPointAtBinding with - | DebugPointAtBinding.Yes sr -> + | DebugPointAtBinding sr -> let collapse = Range.endToEnd sr r rcheck Scope.Match Collapse.Same r collapse | _ -> () @@ -283,7 +282,7 @@ module Structure = | SynExpr.MatchLambda (_, caseRange, clauses, matchSeqPoint, r) -> let caseRange = match matchSeqPoint with - | DebugPointAtBinding.Yes r -> r + | DebugPointAtBinding r -> r | _ -> caseRange let collapse = Range.endToEnd caseRange r rcheck Scope.MatchLambda Collapse.Same r collapse @@ -350,7 +349,7 @@ module Structure = parseExpr finallyExpr | SynExpr.IfThenElse (ifExpr, thenExpr, elseExprOpt, spIfToThen, _, ifToThenRange, r) -> match spIfToThen with - | DebugPointAtBinding.Yes rt -> + | DebugPointAtBinding rt -> // Outline the entire IfThenElse let fullrange = Range.startToEnd rt r let collapse = Range.endToEnd ifExpr.Range r @@ -407,7 +406,7 @@ module Structure = rcheck Scope.Record Collapse.Same r <| Range.modBoth 1 1 r | _ -> () - and parseMatchClause (SynMatchClause(synPat, _, e, _r, _) as clause) = + and parseMatchClause (SynMatchClause.Clause(synPat, _, e, _r, _) as clause) = let rec getLastPat = function | SynPat.Or(_, pat, _) -> getLastPat pat | x -> x @@ -438,18 +437,19 @@ module Structure = for attr in attrs do parseExpr attr.ArgExpr - and parseBinding (SynBinding(_, kind, _, _, attrs, _, SynValData(memberFlags, _, _), _, _, expr, br, _) as binding) = + and parseBinding (SynBinding.Binding (_, kind, _, _, attrs, _, SynValData(memberFlags, _, _), _, _, expr, br, _) as binding) = match kind with - | SynBindingKind.Normal -> - let collapse = Range.endToEnd binding.RangeOfBindingWithoutRhs binding.RangeOfBindingWithRhs + | NormalBinding -> + let collapse = Range.endToEnd binding.RangeOfBindingSansRhs binding.RangeOfBindingAndRhs match memberFlags with - | Some {MemberKind=SynMemberKind.Constructor} -> - rcheck Scope.New Collapse.Below binding.RangeOfBindingWithRhs collapse + | Some ({MemberKind=MemberKind.Constructor}) -> + let collapse = Range.startToEnd expr.Range br + rcheck Scope.New Collapse.Below br collapse | Some _ -> - rcheck Scope.Member Collapse.Below binding.RangeOfBindingWithRhs collapse + rcheck Scope.Member Collapse.Below binding.RangeOfBindingAndRhs collapse | None -> - rcheck Scope.LetOrUse Collapse.Below binding.RangeOfBindingWithRhs collapse - | SynBindingKind.Do -> + rcheck Scope.LetOrUse Collapse.Below binding.RangeOfBindingAndRhs collapse + | DoBinding -> let r = Range.modStart 2 br rcheck Scope.Do Collapse.Below br r | _ -> () @@ -458,7 +458,7 @@ module Structure = and parseBindings sqs = for bind in sqs do parseBinding bind - and parseExprInterface (SynInterfaceImpl(synType, bindings, range)) = + and parseExprInterface (InterfaceImpl(synType, bindings, range)) = let collapse = Range.endToEnd synType.Range range |> Range.modEnd -1 rcheck Scope.Interface Collapse.Below range collapse parseBindings bindings @@ -467,12 +467,12 @@ module Structure = and parseSynMemberDefn (objectModelRange: range) d = match d with - | SynMemberDefn.Member(SynBinding.SynBinding (attributes=attrs; valData=valData; headPat=synPat; range=bindingRange) as binding, _) -> + | SynMemberDefn.Member(SynBinding.Binding (attributes=attrs; valData=valData; headPat=synPat; range=bindingRange) as binding, _) -> match valData with - | SynValData (Some { MemberKind=SynMemberKind.Constructor }, _, _) -> + | SynValData (Some { MemberKind=MemberKind.Constructor }, _, _) -> let collapse = Range.endToEnd synPat.Range d.Range rcheck Scope.New Collapse.Below d.Range collapse - | SynValData (Some { MemberKind=SynMemberKind.PropertyGet | SynMemberKind.PropertySet }, _, _) -> + | SynValData (Some { MemberKind=MemberKind.PropertyGet | MemberKind.PropertySet }, _, _) -> let range = mkRange d.Range.FileName @@ -500,7 +500,7 @@ module Structure = | None -> () | SynMemberDefn.NestedType (td, _, _) -> parseTypeDefn td - | SynMemberDefn.AbstractSlot (SynValSig(synType=synt), _, r) -> + | SynMemberDefn.AbstractSlot (ValSpfn(synType=synt), _, r) -> rcheck Scope.Member Collapse.Below d.Range (Range.startToEnd synt.Range r) | SynMemberDefn.AutoProperty (synExpr=e; range=r) -> rcheck Scope.Member Collapse.Below d.Range r @@ -520,28 +520,28 @@ module Structure = and parseSimpleRepr simple = match simple with | SynTypeDefnSimpleRepr.Enum (cases, _er) -> - for SynEnumCase (attrs, _, _, _, _, cr) in cases do + for EnumCase (attrs, _, _, _, cr) in cases do rcheck Scope.EnumCase Collapse.Below cr cr parseAttributes attrs | SynTypeDefnSimpleRepr.Record (_, fields, rr) -> rcheck Scope.RecordDefn Collapse.Same rr rr - for SynField (attrs, _, _, _, _, _, _, fr) in fields do + for Field (attrs, _, _, _, _, _, _, fr) in fields do rcheck Scope.RecordField Collapse.Below fr fr parseAttributes attrs | SynTypeDefnSimpleRepr.Union (_, cases, ur) -> rcheck Scope.UnionDefn Collapse.Same ur ur - for SynUnionCase (attrs, _, _, _, _, cr) in cases do + for UnionCase (attrs, _, _, _, _, cr) in cases do rcheck Scope.UnionCase Collapse.Below cr cr parseAttributes attrs | _ -> () - and parseTypeDefn (SynTypeDefn(SynComponentInfo(_, TyparDecls typeArgs, _, _, _, _, _, r), objectModel, members, _, fullrange)) = + and parseTypeDefn (TypeDefn(ComponentInfo(_, typeArgs, _, _, _, _, _, r), objectModel, members, fullrange)) = let typeArgsRange = rangeOfTypeArgsElse r typeArgs let collapse = Range.endToEnd (Range.modEnd 1 typeArgsRange) fullrange match objectModel with | SynTypeDefnRepr.ObjectModel (defnKind, objMembers, r) -> match defnKind with - | SynTypeDefnKind.Augmentation -> + | TyconAugmentation -> rcheck Scope.TypeExtension Collapse.Below fullrange collapse | _ -> rcheck Scope.Type Collapse.Below fullrange collapse @@ -600,14 +600,14 @@ module Structure = match decl with | SynModuleDecl.Let (_, bindings, r) -> for binding in bindings do - let collapse = Range.endToEnd binding.RangeOfBindingWithoutRhs r + let collapse = Range.endToEnd binding.RangeOfBindingSansRhs r rcheck Scope.LetOrUse Collapse.Below r collapse parseBindings bindings | SynModuleDecl.Types (types, _r) -> for t in types do parseTypeDefn t // Fold the attributes above a module - | SynModuleDecl.NestedModule (SynComponentInfo (attrs, _, _, _, _, _, _, cmpRange), _, decls, _, _) -> + | SynModuleDecl.NestedModule (ComponentInfo (attrs, _, _, _, _, _, _, cmpRange), _, decls, _, _) -> // Outline the full scope of the module let r = Range.endToEnd cmpRange decl.Range rcheck Scope.Module Collapse.Below decl.Range r @@ -628,7 +628,7 @@ module Structure = let collapse = Range.endToEnd idRange r // do not return range for top level implicit module in scripts - if kind = SynModuleOrNamespaceKind.NamedModule then + if kind = NamedModule then rcheck Scope.Module Collapse.Below fullrange collapse collectHashDirectives decls @@ -719,7 +719,7 @@ module Structure = match typeSigs with | [] -> range | ls -> - let (SynTypeDefnSig(_, _, memberSigs, r)) = List.last ls + let (TypeDefnSig(_, _, memberSigs, r)) = List.last ls lastMemberSigRangeElse r memberSigs let lastModuleSigDeclRangeElse range (sigDecls:SynModuleSigDecl list) = @@ -728,7 +728,7 @@ module Structure = | ls -> match List.last ls with | SynModuleSigDecl.Types (typeSigs, r) -> lastTypeDefnSigRangeElse r typeSigs - | SynModuleSigDecl.Val (SynValSig(range=r), _) -> r + | SynModuleSigDecl.Val (ValSpfn(range=r), _) -> r | SynModuleSigDecl.Exception(_, r) -> r | SynModuleSigDecl.Open(_, r) -> r | SynModuleSigDecl.ModuleAbbrev(_, _, r) -> r @@ -738,7 +738,7 @@ module Structure = | SynMemberSig.Member(valSigs, _, r) -> let collapse = Range.endToEnd valSigs.RangeOfId r rcheck Scope.Member Collapse.Below r collapse - | SynMemberSig.ValField(SynField(attrs, _, _, _, _, _, _, fr), fullrange) -> + | SynMemberSig.ValField(Field(attrs, _, _, _, _, _, _, fr), fullrange) -> let collapse = Range.endToEnd fr fullrange rcheck Scope.Val Collapse.Below fullrange collapse parseAttributes attrs @@ -748,7 +748,7 @@ module Structure = parseTypeDefnSig typeDefSig | _ -> () - and parseTypeDefnSig (SynTypeDefnSig (SynComponentInfo(attribs, TyparDecls typeArgs, _, longId, _, _, _, r) as __, objectModel, memberSigs, _)) = + and parseTypeDefnSig (TypeDefnSig (ComponentInfo(attribs, typeArgs, _, longId, _, _, _, r) as __, objectModel, memberSigs, _)) = parseAttributes attribs let makeRanges memberSigs = @@ -763,11 +763,11 @@ module Structure = match objectModel with // matches against a type declaration with <'T, ...> and (args, ...) | SynTypeDefnSigRepr.ObjectModel - (SynTypeDefnKind.Unspecified, objMembers, _) -> + (TyconUnspecified, objMembers, _) -> List.iter parseSynMemberDefnSig objMembers let fullrange, collapse = makeRanges objMembers rcheck Scope.Type Collapse.Below fullrange collapse - | SynTypeDefnSigRepr.ObjectModel (SynTypeDefnKind.Augmentation, objMembers, _) -> + | SynTypeDefnSigRepr.ObjectModel (TyconAugmentation, objMembers, _) -> let fullrange, collapse = makeRanges objMembers rcheck Scope.TypeExtension Collapse.Below fullrange collapse List.iter parseSynMemberDefnSig objMembers @@ -825,14 +825,14 @@ module Structure = let rec parseModuleSigDeclaration (decl: SynModuleSigDecl) = match decl with - | SynModuleSigDecl.Val ((SynValSig(attrs, ident, _, _, _, _, _, _, _, _, valrange)), r) -> + | SynModuleSigDecl.Val ((ValSpfn(attrs, ident, _, _, _, _, _, _, _, _, valrange)), r) -> let collapse = Range.endToEnd ident.idRange valrange rcheck Scope.Val Collapse.Below r collapse parseAttributes attrs | SynModuleSigDecl.Types (typeSigs, _) -> List.iter parseTypeDefnSig typeSigs // Fold the attributes above a module - | SynModuleSigDecl.NestedModule (SynComponentInfo (attrs, _, _, _, _, _, _, cmpRange), _, decls, moduleRange) -> + | SynModuleSigDecl.NestedModule (ComponentInfo (attrs, _, _, _, _, _, _, cmpRange), _, decls, moduleRange) -> let rangeEnd = lastModuleSigDeclRangeElse moduleRange decls // Outline the full scope of the module let collapse = Range.endToEnd cmpRange rangeEnd diff --git a/src/fsharp/service/ServiceStructure.fsi b/src/fsharp/service/ServiceStructure.fsi index 3ed1eb0dbab..6d26607e7aa 100644 --- a/src/fsharp/service/ServiceStructure.fsi +++ b/src/fsharp/service/ServiceStructure.fsi @@ -1,9 +1,9 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree module public Structure = @@ -75,7 +75,7 @@ module public Structure = /// HintSpan in BlockSpan Range: range /// TextSpan in BlockSpan - CollapseRange: range + CollapseRange:range } /// Returns outlining ranges for given parsed input. diff --git a/src/fsharp/service/ServiceParsedInputOps.fs b/src/fsharp/service/ServiceUntypedParse.fs old mode 100644 new mode 100755 similarity index 56% rename from src/fsharp/service/ServiceParsedInputOps.fs rename to src/fsharp/service/ServiceUntypedParse.fs index 73fac49f6ef..a37166c9ce2 --- a/src/fsharp/service/ServiceParsedInputOps.fs +++ b/src/fsharp/service/ServiceUntypedParse.fs @@ -1,20 +1,44 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.EditorServices +//---------------------------------------------------------------------------- +// Open up the compiler as an incremental service for parsing, +// type checking and intellisense-like environment-reporting. +//-------------------------------------------------------------------------- + +namespace FSharp.Compiler.SourceCodeServices open System open System.IO open System.Collections.Generic +open System.Diagnostics open System.Text.RegularExpressions -open Internal.Utilities.Library + +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CompilerConfig -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.Syntax -open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.Lib +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Position -open FSharp.Compiler.Text.Range + +/// Methods for dealing with F# sources files. +module SourceFile = + + /// Source file extensions + let private compilableExtensions = FSharpSigFileSuffixes @ FSharpImplFileSuffixes @ FSharpScriptFileSuffixes + + /// Single file projects extensions + let private singleFileProjectExtensions = FSharpScriptFileSuffixes + + /// Whether or not this file is compilable + let IsCompilable file = + let ext = Path.GetExtension file + compilableExtensions |> List.exists(fun e->0 = String.Compare(e, ext, StringComparison.OrdinalIgnoreCase)) + + /// Whether or not this file should be a single-file project + let MustBeSingleFileProject file = + let ext = Path.GetExtension file + singleFileProjectExtensions |> List.exists(fun e-> 0 = String.Compare(e, ext, StringComparison.OrdinalIgnoreCase)) module SourceFileImpl = let IsInterfaceFile file = @@ -29,7 +53,7 @@ module SourceFileImpl = type CompletionPath = string list * string option // plid * residue [] -type FSharpInheritanceOrigin = +type InheritanceOrigin = | Class | Interface | Unknown @@ -42,39 +66,606 @@ type InheritanceContext = [] type RecordContext = - | CopyOnUpdate of range: range * path: CompletionPath - | Constructor of typeName: string - | New of path: CompletionPath + | CopyOnUpdate of range * CompletionPath // range of copy-expr + current field + | Constructor of string // typename + | New of CompletionPath [] type CompletionContext = - /// Completion context cannot be determined due to errors + // completion context cannot be determined due to errors | Invalid + // completing something after the inherit keyword + | Inherit of InheritanceContext * CompletionPath + // completing records field + | RecordField of RecordContext + | RangeOperator + // completing named parameters\setters in parameter list of constructor\method calls + // end of name ast node * list of properties\parameters that were already set + | ParameterList of pos * HashSet + | AttributeApplication + | OpenDeclaration of isOpenType: bool + /// completing pattern type (e.g. foo (x: |)) + | PatternType - /// Completing something after the inherit keyword - | Inherit of context: InheritanceContext * path: CompletionPath +//---------------------------------------------------------------------------- +// FSharpParseFileResults +//---------------------------------------------------------------------------- - /// Completing records field - | RecordField of context: RecordContext +[] +type FSharpParseFileResults(errors: FSharpErrorInfo[], input: ParsedInput option, parseHadErrors: bool, dependencyFiles: string[]) = - | RangeOperator + member scope.Errors = errors - /// Completing named parameters\setters in parameter list of constructor\method calls - /// end of name ast node * list of properties\parameters that were already set - | ParameterList of pos * HashSet + member scope.ParseHadErrors = parseHadErrors - | AttributeApplication + member scope.ParseTree = input - | OpenDeclaration of isOpenType: bool + member scope.TryRangeOfNameOfNearestOuterBindingContainingPos pos = + let tryGetIdentRangeFromBinding binding = + match binding with + | SynBinding.Binding (_, _, _, _, _, _, _, headPat, _, _, _, _) -> + match headPat with + | SynPat.LongIdent (longIdentWithDots, _, _, _, _, _) -> + Some longIdentWithDots.Range + | SynPat.Named(_, ident, false, _, _) -> + Some ident.idRange + | _ -> + None - /// Completing pattern type (e.g. foo (x: |)) - | PatternType + let rec walkBinding expr workingRange = + match expr with + + // This lets us dive into subexpressions that may contain the binding we're after + | SynExpr.Sequential (_, _, expr1, expr2, _) -> + if rangeContainsPos expr1.Range pos then + walkBinding expr1 workingRange + else + walkBinding expr2 workingRange -type ShortIdent = string -type ShortIdents = ShortIdent[] + | SynExpr.LetOrUse(_, _, bindings, bodyExpr, _) -> + let potentialNestedRange = + bindings + |> List.tryFind (fun binding -> rangeContainsPos binding.RangeOfBindingAndRhs pos) + |> Option.bind tryGetIdentRangeFromBinding + match potentialNestedRange with + | Some range -> + walkBinding bodyExpr range + | None -> + walkBinding bodyExpr workingRange + + + | _ -> + Some workingRange + + match scope.ParseTree with + | Some input -> + AstTraversal.Traverse(pos, input, { new AstTraversal.AstVisitorBase<_>() with + member _.VisitExpr(_, _, defaultTraverse, expr) = + defaultTraverse expr + + override _.VisitBinding(defaultTraverse, binding) = + match binding with + | SynBinding.Binding (_, _, _, _, _, _, _, _, _, expr, _range, _) as b when rangeContainsPos b.RangeOfBindingAndRhs pos -> + match tryGetIdentRangeFromBinding b with + | Some range -> walkBinding expr range + | None -> None + | _ -> defaultTraverse binding }) + | None -> None + + member scope.TryIdentOfPipelineContainingPosAndNumArgsApplied pos = + match scope.ParseTree with + | Some input -> + AstTraversal.Traverse(pos, input, { new AstTraversal.AstVisitorBase<_>() with + member _.VisitExpr(_, _, defaultTraverse, expr) = + match expr with + | SynExpr.App (_, _, SynExpr.App(_, true, SynExpr.Ident ident, _, _), argExpr, _) when rangeContainsPos argExpr.Range pos -> + if ident.idText = "op_PipeRight" then + Some (ident, 1) + elif ident.idText = "op_PipeRight2" then + Some (ident, 2) + elif ident.idText = "op_PipeRight3" then + Some (ident, 3) + else + None + | _ -> defaultTraverse expr + }) + | None -> None + + member scope.IsPosContainedInApplication pos = + match scope.ParseTree with + | Some input -> + let result = + AstTraversal.Traverse(pos, input, { new AstTraversal.AstVisitorBase<_>() with + member _.VisitExpr(_, _, defaultTraverse, expr) = + match expr with + | SynExpr.App (_, _, _, _, range) when rangeContainsPos range pos -> + Some range + | _ -> defaultTraverse expr + }) + result.IsSome + | None -> false + + member scope.TryRangeOfFunctionOrMethodBeingApplied pos = + let rec getIdentRangeForFuncExprInApp expr pos = + match expr with + | SynExpr.Ident ident -> ident.idRange + + | SynExpr.LongIdent(_, _, _, range) -> range + + | SynExpr.Paren(expr, _, _, range) when rangeContainsPos range pos -> + getIdentRangeForFuncExprInApp expr pos + + | SynExpr.App(_, _, funcExpr, argExpr, _) -> + match argExpr with + | SynExpr.App (_, _, _, _, range) when rangeContainsPos range pos -> + getIdentRangeForFuncExprInApp argExpr pos + | _ -> + match funcExpr with + | SynExpr.App (_, true, _, _, _) when rangeContainsPos argExpr.Range pos -> + // x |> List.map + // Don't dive into the funcExpr (the operator expr) + // because we dont want to offer sig help for that! + getIdentRangeForFuncExprInApp argExpr pos + | _ -> + // Generally, we want to dive into the func expr to get the range + // of the identifier of the function we're after + getIdentRangeForFuncExprInApp funcExpr pos + | expr -> expr.Range // Exhaustiveness, this shouldn't actually be necessary...right? + + match scope.ParseTree with + | Some input -> + AstTraversal.Traverse(pos, input, { new AstTraversal.AstVisitorBase<_>() with + member _.VisitExpr(_, _, defaultTraverse, expr) = + match expr with + | SynExpr.App (_, _, _funcExpr, _, range) as app when rangeContainsPos range pos -> + getIdentRangeForFuncExprInApp app pos + |> Some + | _ -> defaultTraverse expr + }) + | None -> None + + member scope.GetAllArgumentsForFunctionApplicationAtPostion pos = + match input with + | Some input -> SynExprAppLocationsImpl.getAllCurriedArgsAtPosition pos input + | None -> None + + member scope.TryRangeOfParenEnclosingOpEqualsGreaterUsage opGreaterEqualPos = + let (|Ident|_|) ofName = + function | SynExpr.Ident ident when ident.idText = ofName -> Some () + | _ -> None + let (|InfixAppOfOpEqualsGreater|_|) = + function | SynExpr.App(ExprAtomicFlag.NonAtomic, false, SynExpr.App(ExprAtomicFlag.NonAtomic, true, Ident "op_EqualsGreater", actualParamListExpr, _), actualLambdaBodyExpr, _) -> + Some (actualParamListExpr, actualLambdaBodyExpr) + | _ -> None + + match scope.ParseTree with + | Some parseTree -> + AstTraversal.Traverse(opGreaterEqualPos, parseTree, { new AstTraversal.AstVisitorBase<_>() with + member _.VisitExpr(_, _, defaultTraverse, expr) = + match expr with + | SynExpr.Paren((InfixAppOfOpEqualsGreater(lambdaArgs, lambdaBody) as app), _, _, _) -> + Some (app.Range, lambdaArgs.Range, lambdaBody.Range) + | _ -> defaultTraverse expr + member _.VisitBinding(defaultTraverse, binding) = + match binding with + | SynBinding.Binding (_, SynBindingKind.NormalBinding, _, _, _, _, _, _, _, (InfixAppOfOpEqualsGreater(lambdaArgs, lambdaBody) as app), _, _) -> + Some(app.Range, lambdaArgs.Range, lambdaBody.Range) + | _ -> defaultTraverse binding }) + | None -> None + + member scope.TryRangeOfExprInYieldOrReturn pos = + match scope.ParseTree with + | Some parseTree -> + AstTraversal.Traverse(pos, parseTree, { new AstTraversal.AstVisitorBase<_>() with + member __.VisitExpr(_path, _, defaultTraverse, expr) = + match expr with + | SynExpr.YieldOrReturn(_, expr, range) + | SynExpr.YieldOrReturnFrom(_, expr, range) when rangeContainsPos range pos -> + Some expr.Range + | _ -> defaultTraverse expr }) + | None -> None + + member scope.TryRangeOfRecordExpressionContainingPos pos = + match input with + | Some input -> + AstTraversal.Traverse(pos, input, { new AstTraversal.AstVisitorBase<_>() with + member _.VisitExpr(_, _, defaultTraverse, expr) = + match expr with + | SynExpr.Record(_, _, _, range) when rangeContainsPos range pos -> + Some range + | _ -> defaultTraverse expr }) + | None -> + None + + member scope.TryRangeOfRefCellDereferenceContainingPos expressionPos = + match input with + | Some input -> + AstTraversal.Traverse(expressionPos, input, { new AstTraversal.AstVisitorBase<_>() with + member _.VisitExpr(_, _, defaultTraverse, expr) = + match expr with + | SynExpr.App(_, false, SynExpr.Ident funcIdent, expr, _) -> + if funcIdent.idText = "op_Dereference" && rangeContainsPos expr.Range expressionPos then + Some funcIdent.idRange + else + None + | _ -> defaultTraverse expr }) + | None -> + None -type MaybeUnresolvedIdent = { Ident: ShortIdent; Resolved: bool } + member scope.FindNoteworthyParamInfoLocations pos = + match input with + | Some input -> FSharpNoteworthyParamInfoLocations.Find(pos, input) + | _ -> None + + member scope.IsPositionContainedInACurriedParameter pos = + match input with + | Some input -> + let result = + AstTraversal.Traverse(pos, input, { new AstTraversal.AstVisitorBase<_>() with + member __.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) = + defaultTraverse(expr) + + override __.VisitBinding (_, binding) = + match binding with + | Binding(_, _, _, _, _, _, valData, _, _, _, range, _) when rangeContainsPos range pos -> + let info = valData.SynValInfo.CurriedArgInfos + let mutable found = false + for group in info do + for arg in group do + match arg.Ident with + | Some ident when rangeContainsPos ident.idRange pos -> + found <- true + | _ -> () + if found then Some range else None + | _ -> + None + }) + result.IsSome + | _ -> false + + /// Get declared items and the selected item at the specified location + member private scope.GetNavigationItemsImpl() = + ErrorScope.Protect range0 + (fun () -> + match input with + | Some (ParsedInput.ImplFile _ as p) -> + FSharpNavigation.getNavigation p + | Some (ParsedInput.SigFile _) -> + FSharpNavigation.empty + | _ -> + FSharpNavigation.empty) + (fun err -> + Trace.TraceInformation(sprintf "FCS: recovering from error in GetNavigationItemsImpl: '%s'" err) + FSharpNavigation.empty) + + member private scope.ValidateBreakpointLocationImpl pos = + let isMatchRange m = rangeContainsPos m pos || m.StartLine = pos.Line + + // Process let-binding + let findBreakPoints () = + let checkRange m = [ if isMatchRange m then yield m ] + let walkBindSeqPt sp = [ match sp with DebugPointAtBinding m -> yield! checkRange m | _ -> () ] + let walkForSeqPt sp = [ match sp with DebugPointAtFor.Yes m -> yield! checkRange m | _ -> () ] + let walkWhileSeqPt sp = [ match sp with DebugPointAtWhile.Yes m -> yield! checkRange m | _ -> () ] + let walkTrySeqPt sp = [ match sp with DebugPointAtTry.Yes m -> yield! checkRange m | _ -> () ] + let walkWithSeqPt sp = [ match sp with DebugPointAtWith.Yes m -> yield! checkRange m | _ -> () ] + let walkFinallySeqPt sp = [ match sp with DebugPointAtFinally.Yes m -> yield! checkRange m | _ -> () ] + + let rec walkBind (Binding(_, _, _, _, _, _, SynValData(memFlagsOpt, _, _), synPat, _, synExpr, _, spInfo)) = + [ // Don't yield the binding sequence point if there are any arguments, i.e. we're defining a function or a method + let isFunction = + Option.isSome memFlagsOpt || + match synPat with + | SynPat.LongIdent (_, _, _, SynArgPats.Pats args, _, _) when not (List.isEmpty args) -> true + | _ -> false + if not isFunction then + yield! walkBindSeqPt spInfo + + yield! walkExpr (isFunction || (match spInfo with DebugPointAtBinding _ -> false | _-> true)) synExpr ] + + and walkExprs es = List.collect (walkExpr false) es + and walkBinds es = List.collect walkBind es + and walkMatchClauses cl = + [ for (Clause(_, whenExpr, e, _, _)) in cl do + match whenExpr with + | Some e -> yield! walkExpr false e + | _ -> () + yield! walkExpr true e ] + + and walkExprOpt (spAlways: bool) eOpt = [ match eOpt with Some e -> yield! walkExpr spAlways e | _ -> () ] + + and IsBreakableExpression e = + match e with + | SynExpr.Match _ + | SynExpr.IfThenElse _ + | SynExpr.For _ + | SynExpr.ForEach _ + | SynExpr.While _ -> true + | _ -> not (IsControlFlowExpression e) + + // Determine the breakpoint locations for an expression. spAlways indicates we always + // emit a breakpoint location for the expression unless it is a syntactic control flow construct + and walkExpr (spAlways: bool) e = + let m = e.Range + if not (isMatchRange m) then [] else + [ if spAlways && IsBreakableExpression e then + yield! checkRange m + + match e with + | SynExpr.ArbitraryAfterError _ + | SynExpr.LongIdent _ + | SynExpr.LibraryOnlyILAssembly _ + | SynExpr.LibraryOnlyStaticOptimization _ + | SynExpr.Null _ + | SynExpr.Ident _ + | SynExpr.ImplicitZero _ + | SynExpr.Const _ -> + () + + | SynExpr.Quote (_, _, e, _, _) + | SynExpr.TypeTest (e, _, _) + | SynExpr.Upcast (e, _, _) + | SynExpr.AddressOf (_, e, _, _) + | SynExpr.CompExpr (_, _, e, _) + | SynExpr.ArrayOrListOfSeqExpr (_, e, _) + | SynExpr.Typed (e, _, _) + | SynExpr.FromParseError (e, _) + | SynExpr.DiscardAfterMissingQualificationAfterDot (e, _) + | SynExpr.Do (e, _) + | SynExpr.Assert (e, _) + | SynExpr.Fixed (e, _) + | SynExpr.DotGet (e, _, _, _) + | SynExpr.LongIdentSet (_, e, _) + | SynExpr.New (_, _, e, _) + | SynExpr.TypeApp (e, _, _, _, _, _, _) + | SynExpr.LibraryOnlyUnionCaseFieldGet (e, _, _, _) + | SynExpr.Downcast (e, _, _) + | SynExpr.InferredUpcast (e, _) + | SynExpr.InferredDowncast (e, _) + | SynExpr.Lazy (e, _) + | SynExpr.TraitCall (_, _, e, _) + | SynExpr.Paren (e, _, _, _) -> + yield! walkExpr false e + + | SynExpr.InterpolatedString (parts, _) -> + yield! walkExprs [ for part in parts do + match part with + | SynInterpolatedStringPart.String _ -> () + | SynInterpolatedStringPart.FillExpr (fillExpr, _) -> yield fillExpr ] + + | SynExpr.YieldOrReturn (_, e, _) + | SynExpr.YieldOrReturnFrom (_, e, _) + | SynExpr.DoBang (e, _) -> + yield! checkRange e.Range + yield! walkExpr false e + + | SynExpr.NamedIndexedPropertySet (_, e1, e2, _) + | SynExpr.DotSet (e1, _, e2, _) + | SynExpr.Set (e1, e2, _) + | SynExpr.LibraryOnlyUnionCaseFieldSet (e1, _, _, e2, _) + | SynExpr.App (_, _, e1, e2, _) -> + yield! walkExpr false e1 + yield! walkExpr false e2 + + | SynExpr.ArrayOrList (_, es, _) + | SynExpr.Tuple (_, es, _, _) -> + yield! walkExprs es + + | SynExpr.Record (_, copyExprOpt, fs, _) -> + match copyExprOpt with + | Some (e, _) -> yield! walkExpr true e + | None -> () + yield! walkExprs (fs |> List.choose p23) + + | SynExpr.AnonRecd (_isStruct, copyExprOpt, fs, _) -> + match copyExprOpt with + | Some (e, _) -> yield! walkExpr true e + | None -> () + yield! walkExprs (fs |> List.map snd) + + | SynExpr.ObjExpr (_, args, bs, is, _, _) -> + match args with + | None -> () + | Some (arg, _) -> yield! walkExpr false arg + yield! walkBinds bs + for (InterfaceImpl(_, bs, _)) in is do yield! walkBinds bs + + | SynExpr.While (spWhile, e1, e2, _) -> + yield! walkWhileSeqPt spWhile + yield! walkExpr false e1 + yield! walkExpr true e2 + + | SynExpr.JoinIn (e1, _range, e2, _range2) -> + yield! walkExpr false e1 + yield! walkExpr false e2 + + | SynExpr.For (spFor, _, e1, _, e2, e3, _) -> + yield! walkForSeqPt spFor + yield! walkExpr false e1 + yield! walkExpr true e2 + yield! walkExpr true e3 + + | SynExpr.ForEach (spFor, _, _, _, e1, e2, _) -> + yield! walkForSeqPt spFor + yield! walkExpr false e1 + yield! walkExpr true e2 + + | SynExpr.MatchLambda (_isExnMatch, _argm, cl, spBind, _wholem) -> + yield! walkBindSeqPt spBind + for (Clause(_, whenExpr, e, _, _)) in cl do + yield! walkExprOpt false whenExpr + yield! walkExpr true e + + | SynExpr.Lambda (_, _, _, e, _, _) -> + yield! walkExpr true e + + | SynExpr.Match (spBind, e, cl, _) -> + yield! walkBindSeqPt spBind + yield! walkExpr false e + for (Clause(_, whenExpr, e, _, _)) in cl do + yield! walkExprOpt false whenExpr + yield! walkExpr true e + + | SynExpr.LetOrUse (_, _, bs, e, _) -> + yield! walkBinds bs + yield! walkExpr true e + + | SynExpr.TryWith (e, _, cl, _, _, spTry, spWith) -> + yield! walkTrySeqPt spTry + yield! walkWithSeqPt spWith + yield! walkExpr true e + yield! walkMatchClauses cl + + | SynExpr.TryFinally (e1, e2, _, spTry, spFinally) -> + yield! walkExpr true e1 + yield! walkExpr true e2 + yield! walkTrySeqPt spTry + yield! walkFinallySeqPt spFinally + + | SynExpr.SequentialOrImplicitYield (spSeq, e1, e2, _, _) + | SynExpr.Sequential (spSeq, _, e1, e2, _) -> + yield! walkExpr (match spSeq with DebugPointAtSequential.ExprOnly -> false | _ -> true) e1 + yield! walkExpr (match spSeq with DebugPointAtSequential.StmtOnly -> false | _ -> true) e2 + + | SynExpr.IfThenElse (e1, e2, e3opt, spBind, _, _, _) -> + yield! walkBindSeqPt spBind + yield! walkExpr false e1 + yield! walkExpr true e2 + yield! walkExprOpt true e3opt + + | SynExpr.DotIndexedGet (e1, es, _, _) -> + yield! walkExpr false e1 + yield! walkExprs [ for e in es do yield! e.Exprs ] + + | SynExpr.DotIndexedSet (e1, es, e2, _, _, _) -> + yield! walkExpr false e1 + yield! walkExprs [ for e in es do yield! e.Exprs ] + yield! walkExpr false e2 + + | SynExpr.DotNamedIndexedPropertySet (e1, _, e2, e3, _) -> + yield! walkExpr false e1 + yield! walkExpr false e2 + yield! walkExpr false e3 + + | SynExpr.LetOrUseBang (spBind, _, _, _, e1, es, e2, _) -> + yield! walkBindSeqPt spBind + yield! walkExpr true e1 + for (andBangSpBind,_,_,_,eAndBang,_) in es do + yield! walkBindSeqPt andBangSpBind + yield! walkExpr true eAndBang + yield! walkExpr true e2 + + | SynExpr.MatchBang (spBind, e, cl, _) -> + yield! walkBindSeqPt spBind + yield! walkExpr false e + for (Clause(_, whenExpr, e, _, _)) in cl do + yield! walkExprOpt false whenExpr + yield! walkExpr true e ] + + // Process a class declaration or F# type declaration + let rec walkTycon (TypeDefn(ComponentInfo(_, _, _, _, _, _, _, _), repr, membDefns, m)) = + if not (isMatchRange m) then [] else + [ for memb in membDefns do yield! walkMember memb + match repr with + | SynTypeDefnRepr.ObjectModel(_, membDefns, _) -> + for memb in membDefns do yield! walkMember memb + | _ -> () ] + + // Returns class-members for the right dropdown + and walkMember memb = + if not (rangeContainsPos memb.Range pos) then [] else + [ match memb with + | SynMemberDefn.LetBindings(binds, _, _, _) -> yield! walkBinds binds + | SynMemberDefn.AutoProperty(_attribs, _isStatic, _id, _tyOpt, _propKind, _, _xmlDoc, _access, synExpr, _, _) -> yield! walkExpr true synExpr + | SynMemberDefn.ImplicitCtor(_, _, _, _, _, m) -> yield! checkRange m + | SynMemberDefn.Member(bind, _) -> yield! walkBind bind + | SynMemberDefn.Interface(_, Some membs, _) -> for m in membs do yield! walkMember m + | SynMemberDefn.Inherit(_, _, m) -> + // can break on the "inherit" clause + yield! checkRange m + | SynMemberDefn.ImplicitInherit(_, arg, _, m) -> + // can break on the "inherit" clause + yield! checkRange m + yield! walkExpr true arg + | _ -> () ] + + // Process declarations nested in a module that should be displayed in the left dropdown + // (such as type declarations, nested modules etc.) + let rec walkDecl decl = + [ match decl with + | SynModuleDecl.Let(_, binds, m) when isMatchRange m -> + yield! walkBinds binds + | SynModuleDecl.DoExpr(spExpr, expr, m) when isMatchRange m -> + yield! walkBindSeqPt spExpr + yield! walkExpr false expr + | SynModuleDecl.ModuleAbbrev _ -> () + | SynModuleDecl.NestedModule(_, _isRec, decls, _, m) when isMatchRange m -> + for d in decls do yield! walkDecl d + | SynModuleDecl.Types(tydefs, m) when isMatchRange m -> + for d in tydefs do yield! walkTycon d + | SynModuleDecl.Exception(SynExceptionDefn(SynExceptionDefnRepr(_, _, _, _, _, _), membDefns, _), m) + when isMatchRange m -> + for m in membDefns do yield! walkMember m + | _ -> () ] + + // Collect all the items in a module + let walkModule (SynModuleOrNamespace(_, _, _, decls, _, _, _, m)) = + if isMatchRange m then + List.collect walkDecl decls + else + [] + + /// Get information for implementation file + let walkImplFile (modules: SynModuleOrNamespace list) = List.collect walkModule modules + + match input with + | Some (ParsedInput.ImplFile (ParsedImplFileInput (modules = modules))) -> walkImplFile modules + | _ -> [] + + ErrorScope.Protect range0 + (fun () -> + let locations = findBreakPoints() + + if pos.Column = 0 then + // we have a breakpoint that was set with mouse at line start + match locations |> List.filter (fun m -> m.StartLine = m.EndLine && pos.Line = m.StartLine) with + | [] -> + match locations |> List.filter (fun m -> rangeContainsPos m pos) with + | [] -> + match locations |> List.filter (fun m -> rangeBeforePos m pos |> not) with + | [] -> Seq.tryHead locations + | locationsAfterPos -> Seq.tryHead locationsAfterPos + | coveringLocations -> Seq.tryLast coveringLocations + | locationsOnSameLine -> Seq.tryHead locationsOnSameLine + else + match locations |> List.filter (fun m -> rangeContainsPos m pos) with + | [] -> + match locations |> List.filter (fun m -> rangeBeforePos m pos |> not) with + | [] -> Seq.tryHead locations + | locationsAfterPos -> Seq.tryHead locationsAfterPos + | coveringLocations -> Seq.tryLast coveringLocations) + (fun msg -> + Trace.TraceInformation(sprintf "FCS: recovering from error in ValidateBreakpointLocationImpl: '%s'" msg) + None) + + /// When these files appear or disappear the configuration for the current project is invalidated. + member scope.DependencyFiles = dependencyFiles + + member scope.FileName = + match input with + | Some (ParsedInput.ImplFile (ParsedImplFileInput (fileName = modname))) + | Some (ParsedInput.SigFile (ParsedSigFileInput (fileName = modname))) -> modname + | _ -> "" + + // Get items for the navigation drop down bar + member scope.GetNavigationItems() = + // This does not need to be run on the background thread + scope.GetNavigationItemsImpl() + + member scope.ValidateBreakpointLocation pos = + // This does not need to be run on the background thread + scope.ValidateBreakpointLocationImpl pos type ModuleKind = { IsAutoOpen: bool; HasModuleSuffix: bool } @@ -86,114 +677,14 @@ type EntityKind = | Module of ModuleKind override x.ToString() = sprintf "%A" x -type InsertionContextEntity = - { FullRelativeName: string - Qualifier: string - Namespace: string option - FullDisplayName: string - LastIdent: ShortIdent } - override x.ToString() = sprintf "%A" x - -type ScopeKind = - | Namespace - | TopModule - | NestedModule - | OpenDeclaration - | HashDirective - override x.ToString() = sprintf "%A" x - -type InsertionContext = - { ScopeKind: ScopeKind - Pos: pos } - -type FSharpModule = - { Idents: ShortIdents - Range: range } - -type OpenStatementInsertionPoint = - | TopLevel - | Nearest - -[] -module Entity = - let getRelativeNamespace (targetNs: ShortIdents) (sourceNs: ShortIdents) = - let rec loop index = - if index > targetNs.Length - 1 then sourceNs.[index..] - // target namespace is not a full parent of source namespace, keep the source ns as is - elif index > sourceNs.Length - 1 then sourceNs - elif targetNs.[index] = sourceNs.[index] then loop (index + 1) - else sourceNs.[index..] - if sourceNs.Length = 0 || targetNs.Length = 0 then sourceNs - else loop 0 - - let cutAutoOpenModules (autoOpenParent: ShortIdents option) (candidateNs: ShortIdents) = - let nsCount = - match autoOpenParent with - | Some parent when parent.Length > 0 -> - min (parent.Length - 1) candidateNs.Length - | _ -> candidateNs.Length - candidateNs.[0..nsCount - 1] - - let tryCreate (targetNamespace: ShortIdents option, targetScope: ShortIdents, partiallyQualifiedName: MaybeUnresolvedIdent[], - requiresQualifiedAccessParent: ShortIdents option, autoOpenParent: ShortIdents option, candidateNamespace: ShortIdents option, candidate: ShortIdents) = - match candidate with - | [||] -> [||] - | _ -> - partiallyQualifiedName - |> Array.heads - // long ident must contain an unresolved part, otherwise we show false positive suggestions like - // "open System" for `let _ = System.DateTime.Naaaw`. Here only "Naaw" is unresolved. - |> Array.filter (fun x -> x |> Array.exists (fun x -> not x.Resolved)) - |> Array.choose (fun parts -> - let parts = parts |> Array.map (fun x -> x.Ident) - if not (candidate |> Array.endsWith parts) then None - else - let identCount = parts.Length - let fullOpenableNs, restIdents = - let openableNsCount = - match requiresQualifiedAccessParent with - | Some parent -> min parent.Length candidate.Length - | None -> candidate.Length - candidate.[0..openableNsCount - 2], candidate.[openableNsCount - 1..] - - let openableNs = cutAutoOpenModules autoOpenParent fullOpenableNs - - let getRelativeNs ns = - match targetNamespace, candidateNamespace with - | Some targetNs, Some candidateNs when candidateNs = targetNs -> - getRelativeNamespace targetScope ns - | None, _ -> getRelativeNamespace targetScope ns - | _ -> ns - - let relativeNs = getRelativeNs openableNs - - match relativeNs, restIdents with - | [||], [||] -> None - | [||], [|_|] -> None - | _ -> - let fullRelativeName = Array.append (getRelativeNs fullOpenableNs) restIdents - let ns = - match relativeNs with - | [||] -> None - | _ when identCount > 1 && relativeNs.Length >= identCount -> - Some (relativeNs.[0..relativeNs.Length - identCount] |> String.concat ".") - | _ -> Some (relativeNs |> String.concat ".") - let qualifier = - if fullRelativeName.Length > 1 && fullRelativeName.Length >= identCount then - fullRelativeName.[0..fullRelativeName.Length - identCount] - else fullRelativeName - Some - { FullRelativeName = String.concat "." fullRelativeName //.[0..fullRelativeName.Length - identCount - 1] - Qualifier = String.concat "." qualifier - Namespace = ns - FullDisplayName = match restIdents with [|_|] -> "" | _ -> String.concat "." restIdents - LastIdent = Array.tryLast restIdents |> Option.defaultValue "" }) - -module ParsedInput = +module UntypedParseImpl = let emptyStringSet = HashSet() - let GetRangeOfExprLeftOfDot(pos: pos, parsedInput) = + let GetRangeOfExprLeftOfDot(pos: pos, parseTreeOpt) = + match parseTreeOpt with + | None -> None + | Some parseTree -> let CheckLongIdent(longIdent: LongIdent) = // find the longest prefix before the "pos" dot let mutable r = (List.head longIdent).idRange @@ -204,21 +695,21 @@ module ParsedInput = couldBeBeforeFront <- false couldBeBeforeFront, r - SyntaxTraversal.Traverse(pos, parsedInput, { new SyntaxVisitorBase<_>() with - member _.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) = + AstTraversal.Traverse(pos, parseTree, { new AstTraversal.AstVisitorBase<_>() with + member this.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) = let expr = expr // fix debugger locals match expr with | SynExpr.LongIdent (_, LongIdentWithDots(longIdent, _), _altNameRefCell, _range) -> let _, r = CheckLongIdent longIdent Some r | SynExpr.LongIdentSet (LongIdentWithDots(longIdent, _), synExpr, _range) -> - if SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then + if AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then traverseSynExpr synExpr else let _, r = CheckLongIdent longIdent Some r | SynExpr.DotGet (synExpr, _dotm, LongIdentWithDots(longIdent, _), _range) -> - if SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then + if AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then traverseSynExpr synExpr else let inFront, r = CheckLongIdent longIdent @@ -228,16 +719,16 @@ module ParsedInput = // see comment below for SynExpr.DotSet Some ((unionRanges synExpr.Range r)) | SynExpr.Set (synExpr, synExpr2, range) -> - if SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then + if AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then traverseSynExpr synExpr - elif SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr2.Range pos then + elif AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr2.Range pos then traverseSynExpr synExpr2 else Some range | SynExpr.DotSet (synExpr, LongIdentWithDots(longIdent, _), synExpr2, _range) -> - if SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then + if AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then traverseSynExpr synExpr - elif SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr2.Range pos then + elif AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr2.Range pos then traverseSynExpr synExpr2 else let inFront, r = CheckLongIdent longIdent @@ -251,11 +742,11 @@ module ParsedInput = // ------ we want this value Some ((unionRanges synExpr.Range r)) | SynExpr.DotNamedIndexedPropertySet (synExpr, LongIdentWithDots(longIdent, _), synExpr2, synExpr3, _range) -> - if SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then + if AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then traverseSynExpr synExpr - elif SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr2.Range pos then + elif AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr2.Range pos then traverseSynExpr synExpr2 - elif SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr3.Range pos then + elif AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr3.Range pos then traverseSynExpr synExpr3 else let inFront, r = CheckLongIdent longIdent @@ -264,18 +755,18 @@ module ParsedInput = else Some ((unionRanges synExpr.Range r)) | SynExpr.DiscardAfterMissingQualificationAfterDot (synExpr, _range) -> // get this for e.g. "bar()." - if SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then + if AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then traverseSynExpr synExpr else Some (synExpr.Range) | SynExpr.FromParseError (synExpr, range) -> - if SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then + if AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then traverseSynExpr synExpr else Some range | SynExpr.App (ExprAtomicFlag.NonAtomic, true, (SynExpr.Ident ident), rhs, _) when ident.idText = "op_ArrayLookup" - && not(SyntaxTraversal.rangeContainsPosLeftEdgeInclusive rhs.Range pos) -> + && not(AstTraversal.rangeContainsPosLeftEdgeInclusive rhs.Range pos) -> match defaultTraverse expr with | None -> // (expr).(expr) is an ML-deprecated array lookup, but we want intellisense on the dot @@ -287,7 +778,10 @@ module ParsedInput = }) /// searches for the expression island suitable for the evaluation by the debugger - let TryFindExpressionIslandInPosition(pos: pos, parsedInput) = + let TryFindExpressionIslandInPosition(pos: pos, parseTreeOpt) = + match parseTreeOpt with + | None -> None + | Some parseTree -> let getLidParts (lid : LongIdent) = lid |> Seq.takeWhile (fun i -> posGeq pos i.idRange.Start) @@ -318,15 +812,15 @@ module ParsedInput = | _ -> None let rec walker = - { new SyntaxVisitorBase<_>() with - member _.VisitExpr(_path, _traverseSynExpr, defaultTraverse, expr) = + { new AstTraversal.AstVisitorBase<_>() with + member this.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) = if rangeContainsPos expr.Range pos then match TryGetExpression false expr with | (Some parts) -> parts |> String.concat "." |> Some | _ -> defaultTraverse expr else None } - SyntaxTraversal.Traverse(pos, parsedInput, walker) + AstTraversal.Traverse(pos, parseTree, walker) // Given a cursor position here: // f(x) . ident @@ -340,11 +834,14 @@ module ParsedInput = // ^ // would return None // TODO would be great to unify this with GetRangeOfExprLeftOfDot above, if possible, as they are similar - let TryFindExpressionASTLeftOfDotLeftOfCursor(pos, parsedInput) = - let dive x = SyntaxTraversal.dive x - let pick x = SyntaxTraversal.pick pos x + let TryFindExpressionASTLeftOfDotLeftOfCursor(pos, parseTreeOpt) = + match parseTreeOpt with + | None -> None + | Some parseTree -> + let dive x = AstTraversal.dive x + let pick x = AstTraversal.pick pos x let walker = - { new SyntaxVisitorBase<_>() with + { new AstTraversal.AstVisitorBase<_>() with member this.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) = let pick = pick expr.Range let traverseSynExpr, defaultTraverse, expr = traverseSynExpr, defaultTraverse, expr // for debugging: debugger does not get object expression params as local vars @@ -424,7 +921,7 @@ module ParsedInput = | r -> r | SynExpr.App (ExprAtomicFlag.NonAtomic, true, (SynExpr.Ident ident), lhs, _m) when ident.idText = "op_ArrayLookup" - && not(SyntaxTraversal.rangeContainsPosLeftEdgeInclusive lhs.Range pos) -> + && not(AstTraversal.rangeContainsPosLeftEdgeInclusive lhs.Range pos) -> match defaultTraverse expr with | None -> // (expr).(expr) is an ML-deprecated array lookup, but we want intellisense on the dot @@ -432,12 +929,12 @@ module ParsedInput = Some (lhs.Range.End, false) | x -> x // we found the answer deeper somewhere in the lhs | _ -> defaultTraverse expr } - SyntaxTraversal.Traverse(pos, parsedInput, walker) + AstTraversal.Traverse(pos, parseTree, walker) - let GetEntityKind (pos: pos, parsedInput: ParsedInput) : EntityKind option = + let GetEntityKind (pos: pos, input: ParsedInput) : EntityKind option = let (|ConstructorPats|) = function - | SynArgPats.Pats ps -> ps - | SynArgPats.NamePatPairs(xs, _) -> List.map snd xs + | Pats ps -> ps + | NamePatPairs(xs, _) -> List.map snd xs /// An recursive pattern that collect all sequential expressions to avoid StackOverflowException let rec (|Sequentials|_|) = function @@ -462,9 +959,9 @@ module ParsedInput = if isPosInRange attr.Range then Some EntityKind.Attribute else None |> Option.orElse (walkExprWithKind (Some EntityKind.Type) attr.ArgExpr) - and walkTypar (SynTypar (ident, _, _)) = ifPosInRange ident.idRange (fun _ -> Some EntityKind.Type) + and walkTypar (Typar (ident, _, _)) = ifPosInRange ident.idRange (fun _ -> Some EntityKind.Type) - and walkTyparDecl (SynTyparDecl.SynTyparDecl (Attributes attrs, typar)) = + and walkTyparDecl (SynTyparDecl.TyparDecl (Attributes attrs, typar)) = List.tryPick walkAttribute attrs |> Option.orElse (walkTypar typar) @@ -484,7 +981,9 @@ module ParsedInput = and walkPatWithKind (kind: EntityKind option) = function | SynPat.Ands (pats, _) -> List.tryPick walkPat pats - | SynPat.As (pat1, pat2, _) -> List.tryPick walkPat [pat1; pat2] + | SynPat.Named(SynPat.Wild nameRange as pat, _, _, _, _) -> + if isPosInRange nameRange then None + else walkPat pat | SynPat.Typed(pat, t, _) -> walkPat pat |> Option.orElse (walkType t) | SynPat.Attrib(pat, Attributes attrs, _) -> walkPat pat |> Option.orElse (List.tryPick walkAttribute attrs) | SynPat.Or(pat1, pat2, _) -> List.tryPick walkPat [pat1; pat2] @@ -492,7 +991,7 @@ module ParsedInput = ifPosInRange r (fun _ -> kind) |> Option.orElse ( typars - |> Option.bind (fun (ValTyparDecls (typars, constraints, _)) -> + |> Option.bind (fun (SynValTyparDecls (typars, _, constraints)) -> List.tryPick walkTyparDecl typars |> Option.orElse (List.tryPick walkTypeConstraint constraints))) |> Option.orElse (List.tryPick walkPat pats) @@ -505,7 +1004,7 @@ module ParsedInput = and walkPat = walkPatWithKind None - and walkBinding (SynBinding(_, _, _, _, Attributes attrs, _, _, pat, returnInfo, e, _, _)) = + and walkBinding (SynBinding.Binding(_, _, _, _, Attributes attrs, _, _, pat, returnInfo, e, _, _)) = List.tryPick walkAttribute attrs |> Option.orElse (walkPat pat) |> Option.orElse (walkExpr e) @@ -514,7 +1013,7 @@ module ParsedInput = | Some (SynBindingReturnInfo (t, _, _)) -> walkType t | None -> None) - and walkInterfaceImpl (SynInterfaceImpl(_, bindings, _)) = + and walkInterfaceImpl (InterfaceImpl(_, bindings, _)) = List.tryPick walkBinding bindings and walkIndexerArg = function @@ -524,7 +1023,7 @@ module ParsedInput = and walkType = function | SynType.LongIdent ident -> // we protect it with try..with because System.Exception : rangeOfLidwd may raise - // at FSharp.Compiler.Syntax.LongIdentWithDots.get_Range() in D:\j\workspace\release_ci_pa---3f142ccc\src\fsharp\ast.fs: line 156 + // at FSharp.Compiler.SyntaxTree.LongIdentWithDots.get_Range() in D:\j\workspace\release_ci_pa---3f142ccc\src\fsharp\ast.fs: line 156 try ifPosInRange ident.Range (fun _ -> Some EntityKind.Type) with _ -> None | SynType.App(ty, _, types, _, _, _, _) -> walkType ty |> Option.orElse (List.tryPick walkType types) @@ -539,7 +1038,7 @@ module ParsedInput = | SynType.Paren(t, _) -> walkType t | _ -> None - and walkClause (SynMatchClause(pat, e1, e2, _, _)) = + and walkClause (Clause(pat, e1, e2, _, _)) = walkPatWithKind (Some EntityKind.Type) pat |> Option.orElse (walkExpr e2) |> Option.orElse (Option.bind walkExpr e1) @@ -634,10 +1133,10 @@ module ParsedInput = | SynSimplePat.Typed(pat, t, _) -> walkSimplePat pat |> Option.orElse (walkType t) | _ -> None - and walkField (SynField(Attributes attrs, _, _, t, _, _, _, _)) = + and walkField (SynField.Field(Attributes attrs, _, _, t, _, _, _, _)) = List.tryPick walkAttribute attrs |> Option.orElse (walkType t) - and walkValSig (SynValSig(Attributes attrs, _, _, t, _, _, _, _, _, _, _)) = + and walkValSig (SynValSig.ValSpfn(Attributes attrs, _, _, t, _, _, _, _, _, _, _)) = List.tryPick walkAttribute attrs |> Option.orElse (walkType t) and walkMemberSig = function @@ -645,7 +1144,7 @@ module ParsedInput = | SynMemberSig.Member(vs, _, _) -> walkValSig vs | SynMemberSig.Interface(t, _) -> walkType t | SynMemberSig.ValField(f, _) -> walkField f - | SynMemberSig.NestedType(SynTypeDefnSig.SynTypeDefnSig (info, repr, memberSigs, _), _) -> + | SynMemberSig.NestedType(SynTypeDefnSig.TypeDefnSig (info, repr, memberSigs, _), _) -> walkComponentInfo false info |> Option.orElse (walkTypeDefnSigRepr repr) |> Option.orElse (List.tryPick walkMemberSig memberSigs) @@ -668,13 +1167,13 @@ module ParsedInput = |> Option.orElse (walkExpr e) | _ -> None - and walkEnumCase (SynEnumCase(Attributes attrs, _, _, _, _, _)) = List.tryPick walkAttribute attrs + and walkEnumCase (EnumCase(Attributes attrs, _, _, _, _)) = List.tryPick walkAttribute attrs and walkUnionCaseType = function - | SynUnionCaseKind.Fields fields -> List.tryPick walkField fields - | SynUnionCaseKind.FullType(t, _) -> walkType t + | SynUnionCaseType.UnionCaseFields fields -> List.tryPick walkField fields + | SynUnionCaseType.UnionCaseFullType(t, _) -> walkType t - and walkUnionCase (SynUnionCase(Attributes attrs, _, t, _, _, _)) = + and walkUnionCase (UnionCase(Attributes attrs, _, t, _, _, _)) = List.tryPick walkAttribute attrs |> Option.orElse (walkUnionCaseType t) and walkTypeDefnSimple = function @@ -684,8 +1183,7 @@ module ParsedInput = | SynTypeDefnSimpleRepr.TypeAbbrev(_, t, _) -> walkType t | _ -> None - and walkComponentInfo isModule (SynComponentInfo(Attributes attrs, TyparsAndConstraints (typars, cs1), cs2, _, _, _, _, r)) = - let constraints = cs1 @ cs2 + and walkComponentInfo isModule (ComponentInfo(Attributes attrs, typars, constraints, _, _, _, _, r)) = if isModule then None else ifPosInRange r (fun _ -> Some EntityKind.Type) |> Option.orElse ( List.tryPick walkAttribute attrs @@ -702,7 +1200,7 @@ module ParsedInput = | SynTypeDefnSigRepr.Simple(defn, _) -> walkTypeDefnSimple defn | SynTypeDefnSigRepr.Exception(_) -> None - and walkTypeDefn (SynTypeDefn (info, repr, members, _, _)) = + and walkTypeDefn (TypeDefn (info, repr, members, _)) = walkComponentInfo false info |> Option.orElse (walkTypeDefnRepr repr) |> Option.orElse (List.tryPick walkMember members) @@ -719,10 +1217,11 @@ module ParsedInput = | SynModuleDecl.Types (types, _) -> List.tryPick walkTypeDefn types | _ -> None - match parsedInput with + match input with | ParsedInput.SigFile _ -> None | ParsedInput.ImplFile input -> walkImplFileInput input + type internal TS = AstTraversal.TraverseStep /// Matches the most nested [< and >] pair. let insideAttributeApplicationRegex = Regex(@"(?<=\[\<)(?(.*?))(?=\>\])", RegexOptions.Compiled ||| RegexOptions.ExplicitCapture) @@ -788,7 +1287,7 @@ module ParsedInput = | false, false, true -> Struct | _ -> Invalid - let GetCompletionContextForInheritSynMember ((SynComponentInfo(Attributes synAttributes, _, _, _, _, _, _, _)), typeDefnKind : SynTypeDefnKind, completionPath) = + let GetCompletionContextForInheritSynMember ((ComponentInfo(Attributes synAttributes, _, _, _, _, _, _, _)), typeDefnKind : SynTypeDefnKind, completionPath) = let success k = Some (CompletionContext.Inherit (k, completionPath)) @@ -797,18 +1296,18 @@ module ParsedInput = // - try to obtain it from attribute // - if no attributes present - infer kind from members match typeDefnKind with - | SynTypeDefnKind.Class -> + | TyconClass -> match synAttributes with | Class | Unknown -> success InheritanceContext.Class | _ -> Some CompletionContext.Invalid // non-matching attributes - | SynTypeDefnKind.Interface -> + | TyconInterface -> match synAttributes with | Interface | Unknown -> success InheritanceContext.Interface | _ -> Some CompletionContext.Invalid // non-matching attributes - | SynTypeDefnKind.Struct -> + | TyconStruct -> // display nothing for structs Some CompletionContext.Invalid - | SynTypeDefnKind.Unspecified -> + | TyconUnspecified -> match synAttributes with | Class -> success InheritanceContext.Class | Interface -> success InheritanceContext.Interface @@ -827,9 +1326,9 @@ module ParsedInput = | _ -> None // checks if we are in rhs of the range operator - let isInRhsOfRangeOp (p : SyntaxVisitorPath) = + let isInRhsOfRangeOp (p : AstTraversal.TraversePath) = match p with - | SyntaxNode.SynExpr(Operator "op_Range" _) :: _ -> true + | TS.Expr(Operator "op_Range" _) :: _ -> true | _ -> false let (|Setter|_|) e = @@ -898,9 +1397,9 @@ module ParsedInput = let (|PartOfParameterList|_|) precedingArgument path = match path with - | SyntaxNode.SynExpr(SynExpr.Paren _) :: SyntaxNode.SynExpr(NewObjectOrMethodCall args) :: _ -> + | TS.Expr(SynExpr.Paren _) :: TS.Expr(NewObjectOrMethodCall args) :: _ -> if Option.isSome precedingArgument then None else Some args - | SyntaxNode.SynExpr(SynExpr.Tuple (false, elements, commas, _)) :: SyntaxNode.SynExpr(SynExpr.Paren _) :: SyntaxNode.SynExpr(NewObjectOrMethodCall args) :: _ -> + | TS.Expr(SynExpr.Tuple (false, elements, commas, _)) :: TS.Expr(SynExpr.Paren _) :: TS.Expr(NewObjectOrMethodCall args) :: _ -> match precedingArgument with | None -> Some args | Some e -> @@ -915,8 +1414,8 @@ module ParsedInput = let walker = { - new SyntaxVisitorBase<_>() with - member _.VisitExpr(path, _, defaultTraverse, expr) = + new AstTraversal.AstVisitorBase<_>() with + member __.VisitExpr(path, _, defaultTraverse, expr) = if isInRhsOfRangeOp path then match defaultTraverse expr with @@ -927,7 +1426,7 @@ module ParsedInput = // new A($) | SynExpr.Const (SynConst.Unit, m) when rangeContainsPos m pos -> match path with - | SyntaxNode.SynExpr(NewObjectOrMethodCall args) :: _ -> + | TS.Expr(NewObjectOrMethodCall args) :: _ -> Some (CompletionContext.ParameterList args) | _ -> defaultTraverse expr @@ -950,11 +1449,11 @@ module ParsedInput = | _ -> defaultTraverse expr - member _.VisitRecordField(path, copyOpt, field) = + member __.VisitRecordField(path, copyOpt, field) = let contextFromTreePath completionPath = // detect records usage in constructor match path with - | SyntaxNode.SynExpr(_) :: SyntaxNode.SynBinding(_) :: SyntaxNode.SynMemberDefn(_) :: SyntaxNode.SynTypeDefn(SynTypeDefn(SynComponentInfo(_, _, _, [id], _, _, _, _), _, _, _, _)) :: _ -> + | TS.Expr(_) :: TS.Binding(_) :: TS.MemberDefn(_) :: TS.TypeDefn(SynTypeDefn.TypeDefn(ComponentInfo(_, _, _, [id], _, _, _, _), _, _, _)) :: _ -> RecordContext.Constructor(id.idText) | _ -> RecordContext.New completionPath match field with @@ -974,7 +1473,7 @@ module ParsedInput = | None -> contextFromTreePath ([], None) Some (CompletionContext.RecordField recordContext) - member _.VisitInheritSynMemberDefn(_path, componentInfo, typeDefnKind, synType, _members, _range) = + member __.VisitInheritSynMemberDefn(componentInfo, typeDefnKind, synType, _members, _range) = match synType with | SynType.LongIdent lidwd -> match parseLid lidwd with @@ -983,14 +1482,13 @@ module ParsedInput = | _ -> None - member _.VisitBinding(_path, defaultTraverse, (SynBinding(headPat = headPat) as synBinding)) = + member __.VisitBinding(defaultTraverse, (Binding(headPat = headPat) as synBinding)) = let visitParam = function - | SynPat.Named (range = range) - | SynPat.As (_, SynPat.Named (range = range), _) when rangeContainsPos range pos -> + | SynPat.Named (range = range) when rangeContainsPos range pos -> // parameter without type hint, no completion Some CompletionContext.Invalid - | SynPat.Typed(SynPat.Named(_, _, _, range), _, _) when rangeContainsPos range pos -> + | SynPat.Typed(SynPat.Named(SynPat.Wild range, _, _, _, _), _, _) when rangeContainsPos range pos -> // parameter with type hint, but we are on its name, no completion Some CompletionContext.Invalid | _ -> defaultTraverse synBinding @@ -1015,17 +1513,16 @@ module ParsedInput = | _ -> visitParam pat ) | _ -> defaultTraverse synBinding - | SynPat.Named(range = range) - | SynPat.As (_, SynPat.Named (range = range), _) when rangeContainsPos range pos -> + | SynPat.Named(range = range) when rangeContainsPos range pos -> // let fo|o = 1 Some CompletionContext.Invalid | _ -> defaultTraverse synBinding - member _.VisitHashDirective (_path, _directive, range) = + member __.VisitHashDirective range = if rangeContainsPos range pos then Some CompletionContext.Invalid else None - member _.VisitModuleOrNamespace(_path, SynModuleOrNamespace(longId = idents)) = + member __.VisitModuleOrNamespace(SynModuleOrNamespace(longId = idents)) = match List.tryLast idents with | Some lastIdent when pos.Line = lastIdent.idRange.EndLine && lastIdent.idRange.EndColumn >= 0 && pos.Column <= lineStr.Length -> let stringBetweenModuleNameAndPos = lineStr.[lastIdent.idRange.EndColumn..pos.Column - 1] @@ -1034,16 +1531,16 @@ module ParsedInput = else None | _ -> None - member _.VisitComponentInfo(_path, SynComponentInfo(range = range)) = + member __.VisitComponentInfo(ComponentInfo(range = range)) = if rangeContainsPos range pos then Some CompletionContext.Invalid else None - member _.VisitLetOrUse(_path, _, _, bindings, range) = + member __.VisitLetOrUse(_, _, bindings, range) = match bindings with | [] when range.StartLine = pos.Line -> Some CompletionContext.Invalid | _ -> None - member _.VisitSimplePats (_path, pats) = + member __.VisitSimplePats pats = pats |> List.tryPick (fun pat -> match pat with | SynSimplePat.Id(range = range) @@ -1051,7 +1548,7 @@ module ParsedInput = Some CompletionContext.Invalid | _ -> None) - member _.VisitModuleDecl(_path, defaultTraverse, decl) = + member __.VisitModuleDecl(defaultTraverse, decl) = match decl with | SynModuleDecl.Open(target, m) -> // in theory, this means we're "in an open" @@ -1071,14 +1568,14 @@ module ParsedInput = None | _ -> defaultTraverse decl - member _.VisitType(_path, defaultTraverse, ty) = + member __.VisitType(defaultTraverse, ty) = match ty with | SynType.LongIdent _ when rangeContainsPos ty.Range pos -> Some CompletionContext.PatternType | _ -> defaultTraverse ty } - SyntaxTraversal.Traverse(pos, parsedInput, walker) + AstTraversal.Traverse(pos, parsedInput, walker) // Uncompleted attribute applications are not presented in the AST in any way. So, we have to parse source string. |> Option.orElseWith (fun _ -> let cutLeadingAttributes (str: string) = @@ -1122,566 +1619,17 @@ module ParsedInput = | _ -> None) /// Check if we are at an "open" declaration - let GetFullNameOfSmallestModuleOrNamespaceAtPoint (pos: pos, parsedInput: ParsedInput) = + let GetFullNameOfSmallestModuleOrNamespaceAtPoint (parsedInput: ParsedInput, pos: pos) = let mutable path = [] let visitor = - { new SyntaxVisitorBase() with + { new AstTraversal.AstVisitorBase() with override this.VisitExpr(_path, _traverseSynExpr, defaultTraverse, expr) = // don't need to keep going, namespaces and modules never appear inside Exprs None - override this.VisitModuleOrNamespace(_path, SynModuleOrNamespace(longId = longId; range = range)) = + override this.VisitModuleOrNamespace(SynModuleOrNamespace(longId = longId; range = range)) = if rangeContainsPos range pos then path <- path @ longId None // we should traverse the rest of the AST to find the smallest module } - SyntaxTraversal.Traverse(pos, parsedInput, visitor) |> ignore + AstTraversal.Traverse(pos, parsedInput, visitor) |> ignore path |> List.map (fun x -> x.idText) |> List.toArray - - /// An recursive pattern that collect all sequential expressions to avoid StackOverflowException - let rec (|Sequentials|_|) = function - | SynExpr.Sequential (_, _, e, Sequentials es, _) -> - Some(e :: es) - | SynExpr.Sequential (_, _, e1, e2, _) -> - Some [e1; e2] - | _ -> None - - let (|ConstructorPats|) = function - | SynArgPats.Pats ps -> ps - | SynArgPats.NamePatPairs(xs, _) -> List.map snd xs - - /// Returns all `Ident`s and `LongIdent`s found in an untyped AST. - let getLongIdents (parsedInput: ParsedInput) : IDictionary = - let identsByEndPos = Dictionary() - - let addLongIdent (longIdent: LongIdent) = - for ident in longIdent do - identsByEndPos.[ident.idRange.End] <- longIdent - - let addLongIdentWithDots (LongIdentWithDots (longIdent, lids) as value) = - match longIdent with - | [] -> () - | [_] as idents -> identsByEndPos.[value.Range.End] <- idents - | idents -> - for dotRange in lids do - identsByEndPos.[Position.mkPos dotRange.EndLine (dotRange.EndColumn - 1)] <- idents - identsByEndPos.[value.Range.End] <- idents - - let addIdent (ident: Ident) = - identsByEndPos.[ident.idRange.End] <- [ident] - - let rec walkImplFileInput (ParsedImplFileInput (modules = moduleOrNamespaceList)) = - List.iter walkSynModuleOrNamespace moduleOrNamespaceList - - and walkSynModuleOrNamespace (SynModuleOrNamespace(_, _, _, decls, _, Attributes attrs, _, _)) = - List.iter walkAttribute attrs - List.iter walkSynModuleDecl decls - - and walkAttribute (attr: SynAttribute) = - addLongIdentWithDots attr.TypeName - walkExpr attr.ArgExpr - - and walkTyparDecl (SynTyparDecl.SynTyparDecl (Attributes attrs, typar)) = - List.iter walkAttribute attrs - walkTypar typar - - and walkTypeConstraint = function - | SynTypeConstraint.WhereTyparIsValueType (t, _) - | SynTypeConstraint.WhereTyparIsReferenceType (t, _) - | SynTypeConstraint.WhereTyparIsUnmanaged (t, _) - | SynTypeConstraint.WhereTyparSupportsNull (t, _) - | SynTypeConstraint.WhereTyparIsComparable (t, _) - | SynTypeConstraint.WhereTyparIsEquatable (t, _) -> walkTypar t - | SynTypeConstraint.WhereTyparDefaultsToType (t, ty, _) - | SynTypeConstraint.WhereTyparSubtypeOfType (t, ty, _) -> walkTypar t; walkType ty - | SynTypeConstraint.WhereTyparIsEnum (t, ts, _) - | SynTypeConstraint.WhereTyparIsDelegate (t, ts, _) -> walkTypar t; List.iter walkType ts - | SynTypeConstraint.WhereTyparSupportsMember (ts, sign, _) -> List.iter walkType ts; walkMemberSig sign - - and walkPat = function - | SynPat.Tuple (_,pats, _) - | SynPat.ArrayOrList (_, pats, _) - | SynPat.Ands (pats, _) -> List.iter walkPat pats - | SynPat.Named (ident, _, _, _) -> addIdent ident - | SynPat.Typed (pat, t, _) -> - walkPat pat - walkType t - | SynPat.Attrib (pat, Attributes attrs, _) -> - walkPat pat - List.iter walkAttribute attrs - | SynPat.As (pat1, pat2, _) - | SynPat.Or (pat1, pat2, _) -> List.iter walkPat [pat1; pat2] - | SynPat.LongIdent (ident, _, typars, ConstructorPats pats, _, _) -> - addLongIdentWithDots ident - typars - |> Option.iter (fun (ValTyparDecls (typars, constraints, _)) -> - List.iter walkTyparDecl typars - List.iter walkTypeConstraint constraints) - List.iter walkPat pats - | SynPat.Paren (pat, _) -> walkPat pat - | SynPat.IsInst (t, _) -> walkType t - | SynPat.QuoteExpr(e, _) -> walkExpr e - | _ -> () - - and walkTypar (SynTypar _) = () - - and walkBinding (SynBinding(_, _, _, _, Attributes attrs, _, _, pat, returnInfo, e, _, _)) = - List.iter walkAttribute attrs - walkPat pat - walkExpr e - returnInfo |> Option.iter (fun (SynBindingReturnInfo (t, _, _)) -> walkType t) - - and walkInterfaceImpl (SynInterfaceImpl(_, bindings, _)) = List.iter walkBinding bindings - - and walkIndexerArg = function - | SynIndexerArg.One (e, _, _) -> walkExpr e - | SynIndexerArg.Two (e1, _, e2, _, _, _) -> List.iter walkExpr [e1; e2] - - and walkType = function - | SynType.Array (_, t, _) - | SynType.HashConstraint (t, _) - | SynType.MeasurePower (t, _, _) - | SynType.Paren (t, _) -> walkType t - | SynType.Fun (t1, t2, _) - | SynType.MeasureDivide (t1, t2, _) -> walkType t1; walkType t2 - | SynType.LongIdent ident -> addLongIdentWithDots ident - | SynType.App (ty, _, types, _, _, _, _) -> walkType ty; List.iter walkType types - | SynType.LongIdentApp (_, _, _, types, _, _, _) -> List.iter walkType types - | SynType.Tuple (_, ts, _) -> ts |> List.iter (fun (_, t) -> walkType t) - | SynType.WithGlobalConstraints (t, typeConstraints, _) -> - walkType t; List.iter walkTypeConstraint typeConstraints - | _ -> () - - and walkClause (SynMatchClause (pat, e1, e2, _, _)) = - walkPat pat - walkExpr e2 - e1 |> Option.iter walkExpr - - and walkSimplePats = function - | SynSimplePats.SimplePats (pats, _) -> List.iter walkSimplePat pats - | SynSimplePats.Typed (pats, ty, _) -> - walkSimplePats pats - walkType ty - - and walkExpr = function - | SynExpr.Paren (e, _, _, _) - | SynExpr.Quote (_, _, e, _, _) - | SynExpr.Typed (e, _, _) - | SynExpr.InferredUpcast (e, _) - | SynExpr.InferredDowncast (e, _) - | SynExpr.AddressOf (_, e, _, _) - | SynExpr.DoBang (e, _) - | SynExpr.YieldOrReturn (_, e, _) - | SynExpr.ArrayOrListOfSeqExpr (_, e, _) - | SynExpr.CompExpr (_, _, e, _) - | SynExpr.Do (e, _) - | SynExpr.Assert (e, _) - | SynExpr.Lazy (e, _) - | SynExpr.YieldOrReturnFrom (_, e, _) -> walkExpr e - | SynExpr.Lambda (_, _, pats, e, _, _) -> - walkSimplePats pats - walkExpr e - | SynExpr.New (_, t, e, _) - | SynExpr.TypeTest (e, t, _) - | SynExpr.Upcast (e, t, _) - | SynExpr.Downcast (e, t, _) -> walkExpr e; walkType t - | SynExpr.Tuple (_, es, _, _) - | Sequentials es - | SynExpr.ArrayOrList (_, es, _) -> List.iter walkExpr es - | SynExpr.App (_, _, e1, e2, _) - | SynExpr.TryFinally (e1, e2, _, _, _) - | SynExpr.While (_, e1, e2, _) -> List.iter walkExpr [e1; e2] - | SynExpr.Record (_, _, fields, _) -> - fields |> List.iter (fun ((ident, _), e, _) -> - addLongIdentWithDots ident - e |> Option.iter walkExpr) - | SynExpr.Ident ident -> addIdent ident - | SynExpr.ObjExpr (ty, argOpt, bindings, ifaces, _, _) -> - argOpt |> Option.iter (fun (e, ident) -> - walkExpr e - ident |> Option.iter addIdent) - walkType ty - List.iter walkBinding bindings - List.iter walkInterfaceImpl ifaces - | SynExpr.LongIdent (_, ident, _, _) -> addLongIdentWithDots ident - | SynExpr.For (_, ident, e1, _, e2, e3, _) -> - addIdent ident - List.iter walkExpr [e1; e2; e3] - | SynExpr.ForEach (_, _, _, pat, e1, e2, _) -> - walkPat pat - List.iter walkExpr [e1; e2] - | SynExpr.MatchLambda (_, _, synMatchClauseList, _, _) -> - List.iter walkClause synMatchClauseList - | SynExpr.Match (_, e, synMatchClauseList, _) -> - walkExpr e - List.iter walkClause synMatchClauseList - | SynExpr.TypeApp (e, _, tys, _, _, _, _) -> - List.iter walkType tys; walkExpr e - | SynExpr.LetOrUse (_, _, bindings, e, _) -> - List.iter walkBinding bindings; walkExpr e - | SynExpr.TryWith (e, _, clauses, _, _, _, _) -> - List.iter walkClause clauses; walkExpr e - | SynExpr.IfThenElse (e1, e2, e3, _, _, _, _) -> - List.iter walkExpr [e1; e2] - e3 |> Option.iter walkExpr - | SynExpr.LongIdentSet (ident, e, _) - | SynExpr.DotGet (e, _, ident, _) -> - addLongIdentWithDots ident - walkExpr e - | SynExpr.DotSet (e1, idents, e2, _) -> - walkExpr e1 - addLongIdentWithDots idents - walkExpr e2 - | SynExpr.Set (e1, e2, _) -> - walkExpr e1 - walkExpr e2 - | SynExpr.DotIndexedGet (e, args, _, _) -> - walkExpr e - List.iter walkIndexerArg args - | SynExpr.DotIndexedSet (e1, args, e2, _, _, _) -> - walkExpr e1 - List.iter walkIndexerArg args - walkExpr e2 - | SynExpr.NamedIndexedPropertySet (ident, e1, e2, _) -> - addLongIdentWithDots ident - List.iter walkExpr [e1; e2] - | SynExpr.DotNamedIndexedPropertySet (e1, ident, e2, e3, _) -> - addLongIdentWithDots ident - List.iter walkExpr [e1; e2; e3] - | SynExpr.JoinIn (e1, _, e2, _) -> List.iter walkExpr [e1; e2] - | SynExpr.LetOrUseBang (_, _, _, pat, e1, es, e2, _) -> - walkPat pat - walkExpr e1 - for (_,_,_,patAndBang,eAndBang,_) in es do - walkPat patAndBang - walkExpr eAndBang - walkExpr e2 - | SynExpr.TraitCall (ts, sign, e, _) -> - List.iter walkTypar ts - walkMemberSig sign - walkExpr e - | SynExpr.Const (SynConst.Measure(_, _, m), _) -> walkMeasure m - | _ -> () - - and walkMeasure = function - | SynMeasure.Product (m1, m2, _) - | SynMeasure.Divide (m1, m2, _) -> walkMeasure m1; walkMeasure m2 - | SynMeasure.Named (longIdent, _) -> addLongIdent longIdent - | SynMeasure.Seq (ms, _) -> List.iter walkMeasure ms - | SynMeasure.Power (m, _, _) -> walkMeasure m - | SynMeasure.Var (ty, _) -> walkTypar ty - | SynMeasure.One - | SynMeasure.Anon _ -> () - - and walkSimplePat = function - | SynSimplePat.Attrib (pat, Attributes attrs, _) -> - walkSimplePat pat - List.iter walkAttribute attrs - | SynSimplePat.Typed(pat, t, _) -> - walkSimplePat pat - walkType t - | _ -> () - - and walkField (SynField(Attributes attrs, _, _, t, _, _, _, _)) = - List.iter walkAttribute attrs - walkType t - - and walkValSig (SynValSig(Attributes attrs, _, _, t, SynValInfo(argInfos, argInfo), _, _, _, _, _, _)) = - List.iter walkAttribute attrs - walkType t - argInfo :: (argInfos |> List.concat) - |> List.collect (fun (SynArgInfo(Attributes attrs, _, _)) -> attrs) - |> List.iter walkAttribute - - and walkMemberSig = function - | SynMemberSig.Inherit (t, _) - | SynMemberSig.Interface(t, _) -> walkType t - | SynMemberSig.Member(vs, _, _) -> walkValSig vs - | SynMemberSig.ValField(f, _) -> walkField f - | SynMemberSig.NestedType(SynTypeDefnSig.SynTypeDefnSig (info, repr, memberSigs, _), _) -> - let isTypeExtensionOrAlias = - match repr with - | SynTypeDefnSigRepr.Simple(SynTypeDefnSimpleRepr.TypeAbbrev _, _) - | SynTypeDefnSigRepr.ObjectModel(SynTypeDefnKind.Abbrev, _, _) - | SynTypeDefnSigRepr.ObjectModel(SynTypeDefnKind.Augmentation, _, _) -> true - | _ -> false - walkComponentInfo isTypeExtensionOrAlias info - walkTypeDefnSigRepr repr - List.iter walkMemberSig memberSigs - - and walkMember memb = - match memb with - | SynMemberDefn.AbstractSlot (valSig, _, _) -> walkValSig valSig - | SynMemberDefn.Member (binding, _) -> walkBinding binding - | SynMemberDefn.ImplicitCtor (_, Attributes attrs, SynSimplePats.SimplePats(simplePats, _), _, _, _) -> - List.iter walkAttribute attrs - List.iter walkSimplePat simplePats - | SynMemberDefn.ImplicitInherit (t, e, _, _) -> walkType t; walkExpr e - | SynMemberDefn.LetBindings (bindings, _, _, _) -> List.iter walkBinding bindings - | SynMemberDefn.Interface (t, members, _) -> - walkType t - members |> Option.iter (List.iter walkMember) - | SynMemberDefn.Inherit (t, _, _) -> walkType t - | SynMemberDefn.ValField (field, _) -> walkField field - | SynMemberDefn.NestedType (tdef, _, _) -> walkTypeDefn tdef - | SynMemberDefn.AutoProperty (Attributes attrs, _, _, t, _, _, _, _, e, _, _) -> - List.iter walkAttribute attrs - Option.iter walkType t - walkExpr e - | _ -> () - - and walkEnumCase (SynEnumCase(Attributes attrs, _, _, _, _, _)) = List.iter walkAttribute attrs - - and walkUnionCaseType = function - | SynUnionCaseKind.Fields fields -> List.iter walkField fields - | SynUnionCaseKind.FullType (t, _) -> walkType t - - and walkUnionCase (SynUnionCase(Attributes attrs, _, t, _, _, _)) = - List.iter walkAttribute attrs - walkUnionCaseType t - - and walkTypeDefnSimple = function - | SynTypeDefnSimpleRepr.Enum (cases, _) -> List.iter walkEnumCase cases - | SynTypeDefnSimpleRepr.Union (_, cases, _) -> List.iter walkUnionCase cases - | SynTypeDefnSimpleRepr.Record (_, fields, _) -> List.iter walkField fields - | SynTypeDefnSimpleRepr.TypeAbbrev (_, t, _) -> walkType t - | _ -> () - - and walkComponentInfo isTypeExtensionOrAlias (SynComponentInfo(Attributes attrs, TyparsAndConstraints (typars, cs1), cs2, longIdent, _, _, _, _)) = - let constraints = cs1 @ cs2 - List.iter walkAttribute attrs - List.iter walkTyparDecl typars - List.iter walkTypeConstraint constraints - if isTypeExtensionOrAlias then - addLongIdent longIdent - - and walkTypeDefnRepr = function - | SynTypeDefnRepr.ObjectModel (_, defns, _) -> List.iter walkMember defns - | SynTypeDefnRepr.Simple(defn, _) -> walkTypeDefnSimple defn - | SynTypeDefnRepr.Exception _ -> () - - and walkTypeDefnSigRepr = function - | SynTypeDefnSigRepr.ObjectModel (_, defns, _) -> List.iter walkMemberSig defns - | SynTypeDefnSigRepr.Simple(defn, _) -> walkTypeDefnSimple defn - | SynTypeDefnSigRepr.Exception _ -> () - - and walkTypeDefn (SynTypeDefn (info, repr, members, implicitCtor, _)) = - let isTypeExtensionOrAlias = - match repr with - | SynTypeDefnRepr.ObjectModel (SynTypeDefnKind.Augmentation, _, _) - | SynTypeDefnRepr.ObjectModel (SynTypeDefnKind.Abbrev, _, _) - | SynTypeDefnRepr.Simple (SynTypeDefnSimpleRepr.TypeAbbrev _, _) -> true - | _ -> false - walkComponentInfo isTypeExtensionOrAlias info - walkTypeDefnRepr repr - List.iter walkMember members - Option.iter walkMember implicitCtor - - and walkSynModuleDecl (decl: SynModuleDecl) = - match decl with - | SynModuleDecl.NamespaceFragment fragment -> walkSynModuleOrNamespace fragment - | SynModuleDecl.NestedModule (info, _, modules, _, _) -> - walkComponentInfo false info - List.iter walkSynModuleDecl modules - | SynModuleDecl.Let (_, bindings, _) -> List.iter walkBinding bindings - | SynModuleDecl.DoExpr (_, expr, _) -> walkExpr expr - | SynModuleDecl.Types (types, _) -> List.iter walkTypeDefn types - | SynModuleDecl.Attributes (Attributes attrs, _) -> List.iter walkAttribute attrs - | _ -> () - - match parsedInput with - | ParsedInput.ImplFile input -> - walkImplFileInput input - | _ -> () - //debug "%A" idents - upcast identsByEndPos - - let GetLongIdentAt parsedInput pos = - let idents = getLongIdents parsedInput - match idents.TryGetValue pos with - | true, idents -> Some idents - | _ -> None - - type Scope = - { ShortIdents: ShortIdents - Kind: ScopeKind } - - let tryFindNearestPointAndModules (currentLine: int) (ast: ParsedInput) (insertionPoint: OpenStatementInsertionPoint) = - // We ignore all diagnostics during this operation - // - // Based on an initial review, no diagnostics should be generated. However the code should be checked more closely. - use _ignoreAllDiagnostics = new ErrorScope() - - let mutable result = None - let mutable ns = None - let modules = ResizeArray() - - let inline longIdentToIdents ident = ident |> Seq.map string |> Seq.toArray - - let addModule (longIdent: LongIdent, range: range) = - modules.Add - { Idents = longIdentToIdents longIdent - Range = range } - - let doRange kind (scope: LongIdent) line col = - if line <= currentLine then - match result, insertionPoint with - | None, _ -> - result <- Some ({ ShortIdents = longIdentToIdents scope; Kind = kind }, mkPos line col, false) - | Some (_, _, true), _ -> () - | Some (oldScope, oldPos, false), OpenStatementInsertionPoint.TopLevel when kind <> OpenDeclaration -> - result <- Some (oldScope, oldPos, true) - | Some (oldScope, oldPos, _), _ -> - match kind, oldScope.Kind with - | (Namespace | NestedModule | TopModule), OpenDeclaration - | _ when oldPos.Line <= line -> - result <- - Some ({ ShortIdents = - match scope with - | [] -> oldScope.ShortIdents - | _ -> longIdentToIdents scope - Kind = kind }, - mkPos line col, - false) - | _ -> () - - let getMinColumn decls = - match decls with - | [] -> None - | firstDecl :: _ -> - match firstDecl with - | SynModuleDecl.NestedModule (_, _, _, _, r) - | SynModuleDecl.Let (_, _, r) - | SynModuleDecl.DoExpr (_, _, r) - | SynModuleDecl.Types (_, r) - | SynModuleDecl.Exception (_, r) - | SynModuleDecl.Open (_, r) - | SynModuleDecl.HashDirective (_, r) -> Some r - | _ -> None - |> Option.map (fun r -> r.StartColumn) - - - let rec walkImplFileInput (ParsedImplFileInput (modules = moduleOrNamespaceList)) = - List.iter (walkSynModuleOrNamespace []) moduleOrNamespaceList - - and walkSynModuleOrNamespace (parent: LongIdent) (SynModuleOrNamespace(ident, _, kind, decls, _, _, _, range)) = - if range.EndLine >= currentLine then - let isModule = kind.IsModule - match isModule, parent, ident with - | false, _, _ -> ns <- Some (longIdentToIdents ident) - // top level module with "inlined" namespace like Ns1.Ns2.TopModule - | true, [], _f :: _s :: _ -> - let ident = longIdentToIdents ident - ns <- Some (ident.[0..ident.Length - 2]) - | _ -> () - - let fullIdent = parent @ ident - - let startLine = - if isModule then range.StartLine - else range.StartLine - 1 - - let scopeKind = - match isModule, parent with - | true, [] -> TopModule - | true, _ -> NestedModule - | _ -> Namespace - - doRange scopeKind fullIdent startLine range.StartColumn - addModule (fullIdent, range) - List.iter (walkSynModuleDecl fullIdent) decls - - and walkSynModuleDecl (parent: LongIdent) (decl: SynModuleDecl) = - match decl with - | SynModuleDecl.NamespaceFragment fragment -> walkSynModuleOrNamespace parent fragment - | SynModuleDecl.NestedModule(SynComponentInfo(_, _, _, ident, _, _, _, _), _, decls, _, range) -> - let fullIdent = parent @ ident - addModule (fullIdent, range) - if range.EndLine >= currentLine then - let moduleBodyIndentation = getMinColumn decls |> Option.defaultValue (range.StartColumn + 4) - doRange NestedModule fullIdent range.StartLine moduleBodyIndentation - List.iter (walkSynModuleDecl fullIdent) decls - | SynModuleDecl.Open (_, range) -> doRange OpenDeclaration [] range.EndLine (range.StartColumn - 5) - | SynModuleDecl.HashDirective (_, range) -> doRange HashDirective [] range.EndLine range.StartColumn - | _ -> () - - match ast with - | ParsedInput.SigFile _ -> () - | ParsedInput.ImplFile input -> walkImplFileInput input - - let res = - result - |> Option.map (fun (scope, pos, _) -> - let ns = ns |> Option.map longIdentToIdents - scope, ns, mkPos (pos.Line + 1) pos.Column) - - let modules = - modules - |> Seq.filter (fun x -> x.Range.EndLine < currentLine) - |> Seq.sortBy (fun x -> -x.Idents.Length) - |> Seq.toList - - res, modules - - let findBestPositionToInsertOpenDeclaration (modules: FSharpModule list) scope pos (entity: ShortIdents) = - match modules |> List.filter (fun x -> entity |> Array.startsWith x.Idents) with - | [] -> { ScopeKind = scope.Kind; Pos = pos } - | m :: _ -> - //printfn "All modules: %A, Win module: %A" modules m - let scopeKind = - match scope.Kind with - | TopModule -> NestedModule - | x -> x - { ScopeKind = scopeKind - Pos = mkPos (Line.fromZ m.Range.EndLine) m.Range.StartColumn } - - let TryFindInsertionContext (currentLine: int) (parsedInput: ParsedInput) (partiallyQualifiedName: MaybeUnresolvedIdent[]) (insertionPoint: OpenStatementInsertionPoint) = - let res, modules = tryFindNearestPointAndModules currentLine parsedInput insertionPoint - fun (requiresQualifiedAccessParent: ShortIdents option, autoOpenParent: ShortIdents option, entityNamespace: ShortIdents option, entity: ShortIdents) -> - - // We ignore all diagnostics during this operation - // - // Based on an initial review, no diagnostics should be generated. However the code should be checked more closely. - use _ignoreAllDiagnostics = new ErrorScope() - match res with - | None -> [||] - | Some (scope, ns, pos) -> - Entity.tryCreate(ns, scope.ShortIdents, partiallyQualifiedName, requiresQualifiedAccessParent, autoOpenParent, entityNamespace, entity) - |> Array.map (fun e -> e, findBestPositionToInsertOpenDeclaration modules scope pos entity) - - /// Corrects insertion line number based on kind of scope and text surrounding the insertion point. - let AdjustInsertionPoint (getLineStr: int -> string) ctx = - let line = - match ctx.ScopeKind with - | ScopeKind.TopModule -> - if ctx.Pos.Line > 1 then - // it's an implicit module without any open declarations - let line = getLineStr (ctx.Pos.Line - 2) - let isImplicitTopLevelModule = - not (line.StartsWithOrdinal("module") && not (line.EndsWithOrdinal("="))) - if isImplicitTopLevelModule then 1 else ctx.Pos.Line - else 1 - | ScopeKind.Namespace -> - // for namespaces the start line is start line of the first nested entity - if ctx.Pos.Line > 1 then - [0..ctx.Pos.Line - 1] - |> List.mapi (fun i line -> i, getLineStr line) - |> List.tryPick (fun (i, lineStr) -> - if lineStr.StartsWithOrdinal("namespace") then Some i - else None) - |> function - // move to the next line below "namespace" and convert it to F# 1-based line number - | Some line -> line + 2 - | None -> ctx.Pos.Line - else 1 - | _ -> ctx.Pos.Line - - mkPos line ctx.Pos.Column - - let FindNearestPointToInsertOpenDeclaration (currentLine: int) (parsedInput: ParsedInput) (entity: ShortIdents) (insertionPoint: OpenStatementInsertionPoint) = - match tryFindNearestPointAndModules currentLine parsedInput insertionPoint with - | Some (scope, _, point), modules -> - findBestPositionToInsertOpenDeclaration modules scope point entity - | _ -> - // we failed to find insertion point because ast is empty for some reason, return top left point in this case - { ScopeKind = ScopeKind.TopModule - Pos = mkPos 1 0 } diff --git a/src/fsharp/service/ServiceUntypedParse.fsi b/src/fsharp/service/ServiceUntypedParse.fsi new file mode 100755 index 00000000000..d3f6dc8cd68 --- /dev/null +++ b/src/fsharp/service/ServiceUntypedParse.fsi @@ -0,0 +1,157 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +//---------------------------------------------------------------------------- +// API to the compiler as an incremental service for parsing, +// type checking and intellisense-like environment-reporting. +//---------------------------------------------------------------------------- + +namespace FSharp.Compiler.SourceCodeServices + +open System.Collections.Generic + +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree + +[] +/// Represents the results of parsing an F# file +type public FSharpParseFileResults = + + /// The syntax tree resulting from the parse + member ParseTree : ParsedInput option + + /// Attempts to find the range of the name of the nearest outer binding that contains a given position. + member TryRangeOfNameOfNearestOuterBindingContainingPos: pos: pos -> Option + + /// Attempts to find the range of an attempted lambda expression or pattern, the argument range, and the expr range when writing a C#-style "lambda" (which is actually an operator application) + member TryRangeOfParenEnclosingOpEqualsGreaterUsage: opGreaterEqualPos: pos -> Option + + /// Attempts to find the range of an expression `expr` contained in a `yield expr` or `return expr` expression (and bang-variants). + member TryRangeOfExprInYieldOrReturn: pos: pos -> Option + + /// Attempts to find the range of a record expression containing the given position. + member TryRangeOfRecordExpressionContainingPos: pos: pos -> Option + + /// Attempts to find an Ident of a pipeline containing the given position, and the number of args already applied in that pipeline. + /// For example, '[1..10] |> List.map ' would give back the ident of '|>' and 1, because it applied 1 arg (the list) to 'List.map'. + member TryIdentOfPipelineContainingPosAndNumArgsApplied: pos: pos -> Option<(Ident * int)> + + /// Determines if the given position is inside a function or method application. + member IsPosContainedInApplication: pos: pos -> bool + + /// Attempts to find the range of a function or method that is being applied. Also accounts for functions in pipelines. + member TryRangeOfFunctionOrMethodBeingApplied: pos: pos -> Option + + /// Gets the ranges of all arguments, if they can be found, for a function application at the given position. + member GetAllArgumentsForFunctionApplicationAtPostion: pos: pos -> range list option + + /// + /// Given the position of an expression, attempts to find the range of the + /// '!' in a derefence operation of that expression, like: + /// '!expr', '!(expr)', etc. + /// + member TryRangeOfRefCellDereferenceContainingPos: expressionPos: pos -> Option + + /// Notable parse info for ParameterInfo at a given location + member FindNoteworthyParamInfoLocations : pos:pos -> FSharpNoteworthyParamInfoLocations option + + /// Determines if the given position is contained within a curried parameter in a binding. + member IsPositionContainedInACurriedParameter: pos: pos -> bool + + /// Name of the file for which this information were created + member FileName : string + + /// Get declared items and the selected item at the specified location + member GetNavigationItems : unit -> FSharpNavigationItems + + /// Return the inner-most range associated with a possible breakpoint location + member ValidateBreakpointLocation : pos:pos -> range option + + /// When these files change then the build is invalid + member DependencyFiles : string[] + + /// Get the errors and warnings for the parse + member Errors : FSharpErrorInfo[] + + /// Indicates if any errors occurred during the parse + member ParseHadErrors : bool + + internal new: errors: FSharpErrorInfo[] * input: ParsedInput option * parseHadErrors: bool * dependencyFiles: string[] -> FSharpParseFileResults + +/// Information about F# source file names +module public SourceFile = + + /// Whether or not this file is compilable + val IsCompilable : string -> bool + + /// Whether or not this file should be a single-file project + val MustBeSingleFileProject : string -> bool + +type public CompletionPath = string list * string option // plid * residue + +[] +type public InheritanceContext = + | Class + | Interface + | Unknown + +[] +type public RecordContext = + | CopyOnUpdate of range * CompletionPath // range + | Constructor of string // typename + | New of CompletionPath + +[] +type public CompletionContext = + + /// completion context cannot be determined due to errors + | Invalid + + /// completing something after the inherit keyword + | Inherit of InheritanceContext * CompletionPath + + /// completing records field + | RecordField of RecordContext + + | RangeOperator + + /// completing named parameters\setters in parameter list of constructor\method calls + /// end of name ast node * list of properties\parameters that were already set + | ParameterList of pos * HashSet + + | AttributeApplication + + | OpenDeclaration of isOpenType: bool + + /// completing pattern type (e.g. foo (x: |)) + | PatternType + +type public ModuleKind = { IsAutoOpen: bool; HasModuleSuffix: bool } + +[] +type public EntityKind = + | Attribute + | Type + | FunctionOrValue of isActivePattern:bool + | Module of ModuleKind + +// implementation details used by other code in the compiler +module public UntypedParseImpl = + val TryFindExpressionASTLeftOfDotLeftOfCursor : pos * ParsedInput option -> (pos * bool) option + + val GetRangeOfExprLeftOfDot : pos * ParsedInput option -> range option + + val TryFindExpressionIslandInPosition : pos * ParsedInput option -> string option + + val TryGetCompletionContext : pos * ParsedInput * lineStr: string -> CompletionContext option + + val GetEntityKind: pos * ParsedInput -> EntityKind option + + val GetFullNameOfSmallestModuleOrNamespaceAtPoint : ParsedInput * pos -> string[] + +// implementation details used by other code in the compiler +module internal SourceFileImpl = + + val IsInterfaceFile : string -> bool + + val AdditionalDefinesForUseInEditor: isInteractive: bool -> string list + diff --git a/src/fsharp/service/ServiceXmlDocParser.fs b/src/fsharp/service/ServiceXmlDocParser.fs index 62a12a88429..5cd1347a7df 100644 --- a/src/fsharp/service/ServiceXmlDocParser.fs +++ b/src/fsharp/service/ServiceXmlDocParser.fs @@ -1,12 +1,12 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler.SourceCodeServices -open Internal.Utilities.Library -open FSharp.Compiler.Syntax +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Xml +open FSharp.Compiler.XmlDoc /// Represent an Xml documentation block in source code type XmlDocable = @@ -15,13 +15,12 @@ type XmlDocable = module XmlDocParsing = let (|ConstructorPats|) = function - | SynArgPats.Pats ps -> ps - | SynArgPats.NamePatPairs(xs, _) -> List.map snd xs + | Pats ps -> ps + | NamePatPairs(xs, _) -> List.map snd xs let rec digNamesFrom pat = match pat with - | SynPat.As (_, SynPat.Named(id,_isTheThisVar,_access,_range), _) - | SynPat.Named (id,_isTheThisVar,_access,_range) -> [id.idText] + | SynPat.Named(_innerPat,id,_isTheThisVar,_access,_range) -> [id.idText] | SynPat.Typed(pat,_type,_range) -> digNamesFrom pat | SynPat.Attrib(pat,_attrs,_range) -> digNamesFrom pat | SynPat.LongIdent(_lid,_idOpt,_typDeclsOpt,ConstructorPats pats,_access,_range) -> @@ -29,7 +28,6 @@ module XmlDocParsing = | SynPat.Tuple(_,pats,_range) -> pats |> List.collect digNamesFrom | SynPat.Paren(pat,_range) -> digNamesFrom pat | SynPat.OptionalVal (id, _) -> [id.idText] - | SynPat.As _ // no one uses as in fun decls | SynPat.Or _ // no one uses ors in fun decls | SynPat.Ands _ // no one uses ands in fun decls | SynPat.ArrayOrList _ // no one uses this in fun decls @@ -43,7 +41,7 @@ module XmlDocParsing = | SynPat.InstanceMember _ | SynPat.FromParseError _ -> [] - let getXmlDocablesImpl(sourceText: ISourceText, input: ParsedInput) = + let getXmlDocablesImpl(sourceText: ISourceText, input: ParsedInput option) = let indentOf (lineNum: int) = let mutable i = 0 let line = sourceText.GetLineString(lineNum-1) // -1 because lineNum reported by xmldocs are 1-based, but array is 0-based @@ -60,15 +58,15 @@ module XmlDocParsing = (synModuleDecls |> List.collect getXmlDocablesSynModuleDecl) | SynModuleDecl.Let(_, synBindingList, range) -> let anyXmlDoc = - synBindingList |> List.exists (fun (SynBinding(_, _, _, _, _, preXmlDoc, _, _, _, _, _, _)) -> + synBindingList |> List.exists (fun (SynBinding.Binding(_, _, _, _, _, preXmlDoc, _, _, _, _, _, _)) -> not <| isEmptyXmlDoc preXmlDoc) if anyXmlDoc then [] else let synAttributes = - synBindingList |> List.collect (fun (SynBinding(_, _, _, _, a, _, _, _, _, _, _, _)) -> a) + synBindingList |> List.collect (fun (SynBinding.Binding(_, _, _, _, a, _, _, _, _, _, _, _)) -> a) let fullRange = synAttributes |> List.fold (fun r a -> unionRanges r a.Range) range let line = fullRange.StartLine let indent = indentOf line - [ for SynBinding(_, _, _, _, _, _, synValData, synPat, _, _, _, _) in synBindingList do + [ for SynBinding.Binding(_, _, _, _, _, _, synValData, synPat, _, _, _, _) in synBindingList do match synValData with | SynValData(_memberFlagsOpt, SynValInfo(args, _), _) when not (List.isEmpty args) -> let parameters = @@ -98,7 +96,7 @@ module XmlDocParsing = and getXmlDocablesSynModuleOrNamespace (SynModuleOrNamespace(_, _, _, synModuleDecls, _, _, _, _)) = (synModuleDecls |> List.collect getXmlDocablesSynModuleDecl) - and getXmlDocablesSynTypeDefn (SynTypeDefn(SynComponentInfo(synAttributes, _, _, _, preXmlDoc, _, _, compRange), synTypeDefnRepr, synMemberDefns, _, tRange)) = + and getXmlDocablesSynTypeDefn (SynTypeDefn.TypeDefn(ComponentInfo(synAttributes, _, _, _, preXmlDoc, _, _, compRange), synTypeDefnRepr, synMemberDefns, tRange)) = let stuff = match synTypeDefnRepr with | SynTypeDefnRepr.ObjectModel(_, synMemberDefns, _) -> (synMemberDefns |> List.collect getXmlDocablesSynMemberDefn) @@ -114,7 +112,7 @@ module XmlDocParsing = docForTypeDefn @ stuff @ (synMemberDefns |> List.collect getXmlDocablesSynMemberDefn) and getXmlDocablesSynMemberDefn = function - | SynMemberDefn.Member(SynBinding(_, _, _, _, synAttributes, preXmlDoc, _, synPat, _, _, _, _), memRange) -> + | SynMemberDefn.Member(SynBinding.Binding(_, _, _, _, synAttributes, preXmlDoc, _, synPat, _, _, _, _), memRange) -> if isEmptyXmlDoc preXmlDoc then let fullRange = synAttributes |> List.fold (fun r a -> unionRanges r a.Range) memRange let line = fullRange.StartLine @@ -122,7 +120,7 @@ module XmlDocParsing = let paramNames = digNamesFrom synPat [XmlDocable(line,indent,paramNames)] else [] - | SynMemberDefn.AbstractSlot(SynValSig(synAttributes, _, _, _, synValInfo, _, _, preXmlDoc, _, _, _), _, range) -> + | SynMemberDefn.AbstractSlot(ValSpfn(synAttributes, _, _, _, synValInfo, _, _, preXmlDoc, _, _, _), _, range) -> if isEmptyXmlDoc preXmlDoc then let fullRange = synAttributes |> List.fold (fun r a -> unionRanges r a.Range) range let line = fullRange.StartLine @@ -154,29 +152,34 @@ module XmlDocParsing = | ParsedInput.SigFile _ -> [] // Get compiler options for the 'project' implied by a single script file - getXmlDocablesInput input + match input with + | Some input -> + getXmlDocablesInput input + | None -> + // Should not fail here, just in case + [] module XmlDocComment = - let ws (s: string, pos) = + let private ws (s: string, pos) = let res = s.TrimStart() Some (res, pos + (s.Length - res.Length)) - let str (prefix: string) (s: string, pos) = + let private str (prefix: string) (s: string, pos) = match s.StartsWithOrdinal(prefix) with | true -> let res = s.Substring prefix.Length Some (res, pos + (s.Length - res.Length)) | _ -> None - let eol (s: string, pos) = + let private eol (s: string, pos) = match s with | "" -> Some ("", pos) | _ -> None - let (>=>) f g = f >> Option.bind g + let inline private (>=>) f g = f >> Option.bind g // if it's a blank XML comment with trailing "<", returns Some (index of the "<"), otherwise returns None - let IsBlank (s: string) = + let isBlank (s: string) = let parser = ws >=> str "///" >=> ws >=> str "<" >=> eol let res = parser (s.TrimEnd(), 0) |> Option.map snd |> Option.map (fun x -> x - 1) res @@ -184,5 +187,5 @@ module XmlDocComment = module XmlDocParser = /// Get the list of Xml documentation from current source code - let GetXmlDocables (sourceText: ISourceText, input) = + let getXmlDocables (sourceText: ISourceText, input) = XmlDocParsing.getXmlDocablesImpl (sourceText, input) \ No newline at end of file diff --git a/src/fsharp/service/ServiceXmlDocParser.fsi b/src/fsharp/service/ServiceXmlDocParser.fsi index bf3ef76e2e4..75c212fca5c 100644 --- a/src/fsharp/service/ServiceXmlDocParser.fsi +++ b/src/fsharp/service/ServiceXmlDocParser.fsi @@ -1,8 +1,8 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.EditorServices +namespace FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.Text /// Represent an Xml documentation block in source code @@ -12,10 +12,10 @@ type public XmlDocable = module public XmlDocComment = /// if it's a blank XML comment with trailing "<", returns Some (index of the "<"), otherwise returns None - val IsBlank: string -> int option + val isBlank : string -> int option module public XmlDocParser = /// Get the list of Xml documentation from current source code - val GetXmlDocables: ISourceText * input: ParsedInput -> XmlDocable list + val getXmlDocables : ISourceText * input: ParsedInput option -> XmlDocable list \ No newline at end of file diff --git a/src/fsharp/service/service.fs b/src/fsharp/service/service.fs index 1ed29a76651..508a85c4355 100644 --- a/src/fsharp/service/service.fs +++ b/src/fsharp/service/service.fs @@ -1,39 +1,39 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.CodeAnalysis +namespace FSharp.Compiler.SourceCodeServices open System open System.Collections.Concurrent open System.Diagnostics open System.IO open System.Reflection -open System.Threading -open Internal.Utilities.Collections -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras + open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILBinaryReader -open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Internal.Utils open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerDiagnostics open FSharp.Compiler.CompilerImports open FSharp.Compiler.CompilerOptions -open FSharp.Compiler.DependencyManager -open FSharp.Compiler.Diagnostics open FSharp.Compiler.Driver open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.IO +open FSharp.Compiler.Lib open FSharp.Compiler.ParseAndCheckInputs +open FSharp.Compiler.Range open FSharp.Compiler.ScriptClosure -open FSharp.Compiler.Symbols -open FSharp.Compiler.Syntax -open FSharp.Compiler.Tokenization -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.TcGlobals -open FSharp.Compiler.BuildGraph +open FSharp.Compiler.Text + +open Microsoft.DotNet.DependencyManager + +open Internal.Utilities +open Internal.Utilities.Collections + +type internal Layout = StructuredFormat.Layout [] module EnvMisc = @@ -46,6 +46,54 @@ module EnvMisc = let maxMBDefault = GetEnvInteger "FCS_MaxMB" 1000000 // a million MB = 1TB = disabled //let maxMBDefault = GetEnvInteger "FCS_maxMB" (if sizeof = 4 then 1700 else 3400) +type UnresolvedReferencesSet = UnresolvedReferencesSet of UnresolvedAssemblyReference list + +// NOTE: may be better just to move to optional arguments here +type FSharpProjectOptions = + { + ProjectFileName: string + ProjectId: string option + SourceFiles: string[] + OtherOptions: string[] + ReferencedProjects: (string * FSharpProjectOptions)[] + IsIncompleteTypeCheckEnvironment : bool + UseScriptResolutionRules : bool + LoadTime : System.DateTime + UnresolvedReferences : UnresolvedReferencesSet option + OriginalLoadReferences: (range * string * string) list + ExtraProjectInfo : obj option + Stamp : int64 option + } + member x.ProjectOptions = x.OtherOptions + /// Whether the two parse options refer to the same project. + static member UseSameProject(options1,options2) = + match options1.ProjectId, options2.ProjectId with + | Some(projectId1), Some(projectId2) when not (String.IsNullOrWhiteSpace(projectId1)) && not (String.IsNullOrWhiteSpace(projectId2)) -> + projectId1 = projectId2 + | Some(_), Some(_) + | None, None -> options1.ProjectFileName = options2.ProjectFileName + | _ -> false + + /// Compare two options sets with respect to the parts of the options that are important to building. + static member AreSameForChecking(options1,options2) = + match options1.Stamp, options2.Stamp with + | Some x, Some y -> (x = y) + | _ -> + FSharpProjectOptions.UseSameProject(options1, options2) && + options1.SourceFiles = options2.SourceFiles && + options1.OtherOptions = options2.OtherOptions && + options1.UnresolvedReferences = options2.UnresolvedReferences && + options1.OriginalLoadReferences = options2.OriginalLoadReferences && + options1.ReferencedProjects.Length = options2.ReferencedProjects.Length && + Array.forall2 (fun (n1,a) (n2,b) -> + n1 = n2 && + FSharpProjectOptions.AreSameForChecking(a,b)) options1.ReferencedProjects options2.ReferencedProjects && + options1.LoadTime = options2.LoadTime + + /// Compute the project directory. + member po.ProjectDirectory = System.IO.Path.GetDirectoryName(po.ProjectFileName) + override this.ToString() = "FSharpProjectOptions(" + this.ProjectFileName + ")" + //---------------------------------------------------------------------------- // BackgroundCompiler // @@ -70,14 +118,14 @@ module Helpers = && FSharpProjectOptions.UseSameProject(o1,o2) /// Determine whether two (fileName,sourceText,options) keys should be identical w.r.t. parsing - let AreSameForParsing((fileName1: string, source1Hash: int64, options1), (fileName2, source2Hash, options2)) = + let AreSameForParsing((fileName1: string, source1Hash: int, options1), (fileName2, source2Hash, options2)) = fileName1 = fileName2 && options1 = options2 && source1Hash = source2Hash let AreSimilarForParsing((fileName1, _, _), (fileName2, _, _)) = fileName1 = fileName2 /// Determine whether two (fileName,sourceText,options) keys should be identical w.r.t. checking - let AreSameForChecking3((fileName1: string, source1Hash: int64, options1: FSharpProjectOptions), (fileName2, source2Hash, options2)) = + let AreSameForChecking3((fileName1: string, source1Hash: int, options1: FSharpProjectOptions), (fileName2, source2Hash, options2)) = (fileName1 = fileName2) && FSharpProjectOptions.AreSameForChecking(options1,options2) && source1Hash = source2Hash @@ -93,14 +141,14 @@ module CompileHelpers = let errorSink isError exn = let mainError, relatedErrors = SplitRelatedDiagnostics exn - let oneError e = errors.Add(FSharpDiagnostic.CreateFromException (e, isError, Range.range0, true)) // Suggest names for errors + let oneError e = errors.Add(FSharpErrorInfo.CreateFromException (e, isError, Range.range0, true)) // Suggest names for errors oneError mainError List.iter oneError relatedErrors let errorLogger = { new ErrorLogger("CompileAPI") with member x.DiagnosticSink(exn, isError) = errorSink isError exn - member x.ErrorCount = errors |> Seq.filter (fun e -> e.Severity = FSharpDiagnosticSeverity.Error) |> Seq.length } + member x.ErrorCount = errors |> Seq.filter (fun e -> e.Severity = FSharpErrorSeverity.Error) |> Seq.length } let loggerProvider = { new ErrorLoggerProvider() with @@ -141,7 +189,7 @@ module CompileHelpers = errors.ToArray(), result - let createDynamicAssembly (debugInfo: bool, tcImportsRef: TcImports option ref, execute: bool, assemblyBuilderRef: _ option ref) (tcConfig: TcConfig, tcGlobals:TcGlobals, outfile, ilxMainModule) = + let createDynamicAssembly (ctok, debugInfo: bool, tcImportsRef: TcImports option ref, execute: bool, assemblyBuilderRef: _ option ref) (tcConfig: TcConfig, tcGlobals:TcGlobals, outfile, ilxMainModule) = // Create an assembly builder let assemblyName = System.Reflection.AssemblyName(System.IO.Path.GetFileNameWithoutExtension outfile) @@ -164,7 +212,7 @@ module CompileHelpers = // The function used to resolve types while emitting the code let assemblyResolver s = - match tcImportsRef.Value.Value.TryFindExistingFullyQualifiedPathByExactAssemblyRef (s) with + match tcImportsRef.Value.Value.TryFindExistingFullyQualifiedPathByExactAssemblyRef (ctok, s) with | Some res -> Some (Choice1Of2 res) | None -> None @@ -196,8 +244,7 @@ module CompileHelpers = System.Console.SetError error | None -> () -type SourceTextHash = int64 -type CacheStamp = int64 +type SourceTextHash = int type FileName = string type FilePath = string type ProjectPath = string @@ -206,25 +253,22 @@ type FileVersion = int type ParseCacheLockToken() = interface LockToken type ScriptClosureCacheToken() = interface LockToken -type CheckFileCacheKey = FileName * SourceTextHash * FSharpProjectOptions -type CheckFileCacheValue = FSharpParseFileResults * FSharpCheckFileResults * SourceTextHash * DateTime // There is only one instance of this type, held in FSharpChecker -type BackgroundCompiler( - legacyReferenceResolver, - projectCacheSize, - keepAssemblyContents, - keepAllBackgroundResolutions, - tryGetMetadataSnapshot, - suggestNamesForErrors, - keepAllBackgroundSymbolUses, - enableBackgroundItemKeyStoreAndSemanticClassification, - enablePartialTypeChecking) as self = - - let beforeFileChecked = Event() - let fileParsed = Event() - let fileChecked = Event() - let projectChecked = Event() +type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors, keepAllBackgroundSymbolUses, enableBackgroundItemKeyStoreAndSemanticClassification, enablePartialTypeChecking) as self = + // STATIC ROOT: FSharpLanguageServiceTestable.FSharpChecker.backgroundCompiler.reactor: The one and only Reactor + let reactor = Reactor.Singleton + let beforeFileChecked = Event() + let fileParsed = Event() + let fileChecked = Event() + let projectChecked = Event() + + + let mutable implicitlyStartBackgroundWork = true + let reactorOps = + { new IReactorOperations with + member __.EnqueueAndAwaitOpAsync (userOpName, opName, opArg, op) = reactor.EnqueueAndAwaitOpAsync (userOpName, opName, opArg, op) + member __.EnqueueOp (userOpName, opName, opArg, op) = reactor.EnqueueOp (userOpName, opName, opArg, op) } // STATIC ROOT: FSharpLanguageServiceTestable.FSharpChecker.backgroundCompiler.scriptClosureCache /// Information about the derived script closure. @@ -245,67 +289,36 @@ type BackgroundCompiler( /// CreateOneIncrementalBuilder (for background type checking). Note that fsc.fs also /// creates an incremental builder used by the command line compiler. - let CreateOneIncrementalBuilder (options:FSharpProjectOptions, userOpName) = - node { + let CreateOneIncrementalBuilder (ctok, options:FSharpProjectOptions, userOpName) = + cancellable { Trace.TraceInformation("FCS: {0}.{1} ({2})", userOpName, "CreateOneIncrementalBuilder", options.ProjectFileName) let projectReferences = - [ for r in options.ReferencedProjects do - - match r with - | FSharpReferencedProject.FSharpReference(nm,opts) -> - // Don't use cross-project references for FSharp.Core, since various bits of code require a concrete FSharp.Core to exist on-disk. - // The only solutions that have these cross-project references to FSharp.Core are VisualFSharp.sln and FSharp.sln. The only ramification - // of this is that you need to build FSharp.Core to get intellisense in those projects. - - if (try Path.GetFileNameWithoutExtension(nm) with _ -> "") <> GetFSharpCoreLibraryName() then - - yield - { new IProjectReference with - member x.EvaluateRawContents() = - node { - Trace.TraceInformation("FCS: {0}.{1} ({2})", userOpName, "GetAssemblyData", nm) - return! self.GetAssemblyData(opts, userOpName + ".CheckReferencedProject("+nm+")") - } - member x.TryGetLogicalTimeStamp(cache) = - self.TryGetLogicalTimeStampForProject(cache, opts) - member x.FileName = nm } - - | FSharpReferencedProject.PEReference(nm,stamp,delayedReader) -> - yield - { new IProjectReference with - member x.EvaluateRawContents() = - node { - let! ilReaderOpt = delayedReader.TryGetILModuleReader() |> NodeCode.FromCancellable - match ilReaderOpt with - | Some ilReader -> - let ilModuleDef, ilAsmRefs = ilReader.ILModuleDef, ilReader.ILAssemblyRefs - return RawFSharpAssemblyData(ilModuleDef, ilAsmRefs) :> IRawFSharpAssemblyData |> Some - | _ -> - return None - } - member x.TryGetLogicalTimeStamp(_) = stamp |> Some - member x.FileName = nm } - - | FSharpReferencedProject.ILModuleReference(nm,getStamp,getReader) -> - yield - { new IProjectReference with - member x.EvaluateRawContents() = - node { - let ilReader = getReader() - let ilModuleDef, ilAsmRefs = ilReader.ILModuleDef, ilReader.ILAssemblyRefs - return RawFSharpAssemblyData(ilModuleDef, ilAsmRefs) :> IRawFSharpAssemblyData |> Some - } - member x.TryGetLogicalTimeStamp(_) = getStamp() |> Some - member x.FileName = nm } - ] + [ for (nm,opts) in options.ReferencedProjects do + + // Don't use cross-project references for FSharp.Core, since various bits of code require a concrete FSharp.Core to exist on-disk. + // The only solutions that have these cross-project references to FSharp.Core are VisualFSharp.sln and FSharp.sln. The only ramification + // of this is that you need to build FSharp.Core to get intellisense in those projects. + + if (try Path.GetFileNameWithoutExtension(nm) with _ -> "") <> GetFSharpCoreLibraryName() then + + yield + { new IProjectReference with + member x.EvaluateRawContents(ctok) = + cancellable { + Trace.TraceInformation("FCS: {0}.{1} ({2})", userOpName, "GetAssemblyData", nm) + return! self.GetAssemblyData(opts, ctok, userOpName + ".CheckReferencedProject("+nm+")") + } + member x.TryGetLogicalTimeStamp(cache, ctok) = + self.TryGetLogicalTimeStampForProject(cache, ctok, opts, userOpName + ".TimeStampReferencedProject("+nm+")") + member x.FileName = nm } ] let loadClosure = scriptClosureCache.TryGet(AnyCallerThread, options) let! builderOpt, diagnostics = IncrementalBuilder.TryCreateIncrementalBuilderForProjectOptions - (legacyReferenceResolver, FSharpCheckerResultsSettings.defaultFSharpBinariesDir, frameworkTcImportsCache, loadClosure, Array.toList options.SourceFiles, + (ctok, legacyReferenceResolver, FSharpCheckerResultsSettings.defaultFSharpBinariesDir, frameworkTcImportsCache, loadClosure, Array.toList options.SourceFiles, Array.toList options.OtherOptions, projectReferences, options.ProjectDirectory, - options.UseScriptResolutionRules, keepAssemblyContents, keepAllBackgroundResolutions, + options.UseScriptResolutionRules, keepAssemblyContents, keepAllBackgroundResolutions, FSharpCheckerResultsSettings.maxTimeShareMilliseconds, tryGetMetadataSnapshot, suggestNamesForErrors, keepAllBackgroundSymbolUses, enableBackgroundItemKeyStoreAndSemanticClassification, enablePartialTypeChecking, @@ -318,7 +331,8 @@ type BackgroundCompiler( #if !NO_EXTENSIONTYPING // Register the behaviour that responds to CCUs being invalidated because of type // provider Invalidate events. This invalidates the configuration in the build. - builder.ImportsInvalidatedByTypeProvider.Add(fun () -> self.InvalidateConfiguration(options, userOpName)) + builder.ImportsInvalidatedByTypeProvider.Add (fun _ -> + self.InvalidateConfiguration(options, None, userOpName)) #endif // Register the callback called just before a file is typechecked by the background builder (without recording @@ -326,10 +340,10 @@ type BackgroundCompiler( // // This indicates to the UI that the file type check state is dirty. If the file is open and visible then // the UI will sooner or later request a typecheck of the file, recording errors and intellisense information. - builder.BeforeFileChecked.Add (fun file -> beforeFileChecked.Trigger(file, options)) - builder.FileParsed.Add (fun file -> fileParsed.Trigger(file, options)) - builder.FileChecked.Add (fun file -> fileChecked.Trigger(file, options)) - builder.ProjectChecked.Add (fun () -> projectChecked.Trigger (options)) + builder.BeforeFileChecked.Add (fun file -> beforeFileChecked.Trigger(file, options.ExtraProjectInfo)) + builder.FileParsed.Add (fun file -> fileParsed.Trigger(file, options.ExtraProjectInfo)) + builder.FileChecked.Add (fun file -> fileChecked.Trigger(file, options.ExtraProjectInfo)) + builder.ProjectChecked.Add (fun () -> projectChecked.Trigger (options.ProjectFileName, options.ExtraProjectInfo)) return (builderOpt, diagnostics) } @@ -338,237 +352,162 @@ type BackgroundCompiler( // live information than anything else in the F# Language Service, since it holds up to 3 (projectCacheStrongSize) background project builds // strongly. // - /// Cache of builds keyed by options. - let gate = obj() + /// Cache of builds keyed by options. let incrementalBuildersCache = - MruCache> + MruCache (keepStrongly=projectCacheSize, keepMax=projectCacheSize, areSame = FSharpProjectOptions.AreSameForChecking, areSimilar = FSharpProjectOptions.UseSameProject) - let tryGetBuilderNode options = + let tryGetBuilder options = incrementalBuildersCache.TryGet (AnyCallerThread, options) - let tryGetBuilder options : NodeCode<(IncrementalBuilder option * FSharpDiagnostic[])> option = - tryGetBuilderNode options - |> Option.map (fun x -> x.GetOrComputeValue()) - - let tryGetSimilarBuilder options : NodeCode<(IncrementalBuilder option * FSharpDiagnostic[])> option = + let tryGetSimilarBuilder options = incrementalBuildersCache.TryGetSimilar (AnyCallerThread, options) - |> Option.map (fun x -> x.GetOrComputeValue()) - let tryGetAnyBuilder options : NodeCode<(IncrementalBuilder option * FSharpDiagnostic[])> option = + let tryGetAnyBuilder options = incrementalBuildersCache.TryGetAny (AnyCallerThread, options) - |> Option.map (fun x -> x.GetOrComputeValue()) - - let createBuilderNode (options, userOpName, ct: CancellationToken) = - lock gate (fun () -> - if ct.IsCancellationRequested then - GraphNode(node { return None, [||] }) - else - let getBuilderNode = - GraphNode(CreateOneIncrementalBuilder(options, userOpName)) - incrementalBuildersCache.Set (AnyCallerThread, options, getBuilderNode) - getBuilderNode - ) - - let createAndGetBuilder (options, userOpName) = - node { - let! ct = NodeCode.CancellationToken - let getBuilderNode = createBuilderNode (options, userOpName, ct) - return! getBuilderNode.GetOrComputeValue() - } - let getOrCreateBuilder (options, userOpName) : NodeCode<(IncrementalBuilder option * FSharpDiagnostic[])> = - match tryGetBuilder options with - | Some getBuilder -> - node { - match! getBuilder with - | builderOpt, creationDiags when builderOpt.IsNone || not builderOpt.Value.IsReferencesInvalidated -> - Logger.Log LogCompilerFunctionId.Service_IncrementalBuildersCache_GettingCache - return builderOpt,creationDiags - | _ -> - return! createAndGetBuilder (options, userOpName) - } - | _ -> - createAndGetBuilder (options, userOpName) + let getOrCreateBuilder (ctok, options, userOpName) = + cancellable { + match tryGetBuilder options with + | Some (builderOpt,creationErrors) -> + Logger.Log LogCompilerFunctionId.Service_IncrementalBuildersCache_GettingCache + return builderOpt,creationErrors + | None -> + Logger.Log LogCompilerFunctionId.Service_IncrementalBuildersCache_BuildingNewCache + let! (builderOpt,creationErrors) as info = CreateOneIncrementalBuilder (ctok, options, userOpName) + incrementalBuildersCache.Set (AnyCallerThread, options, info) + return builderOpt, creationErrors + } - let getSimilarOrCreateBuilder (options, userOpName) = + let getSimilarOrCreateBuilder (ctok, options, userOpName) = + RequireCompilationThread ctok match tryGetSimilarBuilder options with - | Some res -> res + | Some res -> Cancellable.ret res // The builder does not exist at all. Create it. - | None -> getOrCreateBuilder (options, userOpName) + | None -> getOrCreateBuilder (ctok, options, userOpName) - let getOrCreateBuilderWithInvalidationFlag (options, canInvalidateProject, userOpName) = + let getOrCreateBuilderWithInvalidationFlag (ctok, options, canInvalidateProject, userOpName) = if canInvalidateProject then - getOrCreateBuilder (options, userOpName) + getOrCreateBuilder (ctok, options, userOpName) else - getSimilarOrCreateBuilder (options, userOpName) - - let getAnyBuilder (options, userOpName) = - match tryGetAnyBuilder options with - | Some getBuilder -> - Logger.Log LogCompilerFunctionId.Service_IncrementalBuildersCache_GettingCache - getBuilder - | _ -> - getOrCreateBuilder (options, userOpName) + getSimilarOrCreateBuilder (ctok, options, userOpName) let parseCacheLock = Lock() // STATIC ROOT: FSharpLanguageServiceTestable.FSharpChecker.parseFileInProjectCache. Most recently used cache for parsing files. - let parseFileCache = MruCache(parseFileCacheSize, areSimilar = AreSimilarForParsing, areSame = AreSameForParsing) + let parseFileCache = MruCache(parseFileCacheSize, areSimilar = AreSimilarForParsing, areSame = AreSameForParsing) + // STATIC ROOT: FSharpLanguageServiceTestable.FSharpChecker.checkFileInProjectCachePossiblyStale // STATIC ROOT: FSharpLanguageServiceTestable.FSharpChecker.checkFileInProjectCache // /// Cache which holds recently seen type-checks. /// This cache may hold out-of-date entries, in two senses /// - there may be a more recent antecedent state available because the background build has made it available /// - the source for the file may have changed + + let checkFileInProjectCachePossiblyStale = + MruCache + (keepStrongly=checkFileInProjectCacheSize, + areSame=AreSameForChecking2, + areSimilar=AreSubsumable2) // Also keyed on source. This can only be out of date if the antecedent is out of date - let checkFileInProjectCache = - MruCache> + let checkFileInProjectCache = + MruCache (keepStrongly=checkFileInProjectCacheSize, areSame=AreSameForChecking3, areSimilar=AreSubsumable3) - /// Should be a fast operation. Ensures that we have only one async lazy object per file and its hash. - let getCheckFileNode (parseResults, - sourceText, - fileName, - options, - _fileVersion, - builder, - tcPrior, - tcInfo, - creationDiags) (onComplete) = - - // Here we lock for the creation of the node, not its execution - parseCacheLock.AcquireLock (fun ltok -> - let key = (fileName, sourceText.GetHashCode() |> int64, options) - match checkFileInProjectCache.TryGet(ltok, key) with - | Some res -> res - | _ -> - let res = - GraphNode(node { - let! res = - self.CheckOneFileImplAux( - parseResults, - sourceText, - fileName, - options, - builder, - tcPrior, - tcInfo, - creationDiags) - onComplete() - return res - }) - checkFileInProjectCache.Set(ltok, key, res) - res - ) - - static let mutable actualParseFileCount = 0 - - static let mutable actualCheckFileCount = 0 - - member _.ParseFile(filename: string, sourceText: ISourceText, options: FSharpParsingOptions, cache: bool, userOpName: string) = + /// Holds keys for files being currently checked. It's used to prevent checking same file in parallel (interleaving chunk queued to Reactor). + let beingCheckedFileTable = + ConcurrentDictionary + (HashIdentity.FromFunctions + hash + (fun (f1, o1, v1) (f2, o2, v2) -> f1 = f2 && v1 = v2 && FSharpProjectOptions.AreSameForChecking(o1, o2))) + + static let mutable foregroundParseCount = 0 + + static let mutable foregroundTypeCheckCount = 0 + + member __.RecordTypeCheckFileInProjectResults(filename,options,parsingOptions,parseResults,fileVersion,priorTimeStamp,checkAnswer,sourceText) = + match checkAnswer with + | None + | Some FSharpCheckFileAnswer.Aborted -> () + | Some (FSharpCheckFileAnswer.Succeeded typedResults) -> + foregroundTypeCheckCount <- foregroundTypeCheckCount + 1 + parseCacheLock.AcquireLock (fun ltok -> + checkFileInProjectCachePossiblyStale.Set(ltok, (filename,options),(parseResults,typedResults,fileVersion)) + checkFileInProjectCache.Set(ltok, (filename, sourceText, options),(parseResults,typedResults,fileVersion,priorTimeStamp)) + parseFileCache.Set(ltok, (filename, sourceText, parsingOptions), parseResults)) + + member bc.ImplicitlyStartCheckProjectInBackground(options, userOpName) = + if implicitlyStartBackgroundWork then + bc.CheckProjectInBackground(options, userOpName + ".ImplicitlyStartCheckProjectInBackground") + + member __.ParseFile(filename: string, sourceText: ISourceText, options: FSharpParsingOptions, userOpName: string) = async { - if cache then - let hash = sourceText.GetHashCode() |> int64 + let hash = sourceText.GetHashCode() match parseCacheLock.AcquireLock(fun ltok -> parseFileCache.TryGet(ltok, (filename, hash, options))) with | Some res -> return res | None -> - Interlocked.Increment(&actualParseFileCount) |> ignore - let parseDiags, parseTree, anyErrors = ParseAndCheckFile.parseFile(sourceText, filename, options, userOpName, suggestNamesForErrors) - let res = FSharpParseFileResults(parseDiags, parseTree, anyErrors, options.SourceFiles) + foregroundParseCount <- foregroundParseCount + 1 + let parseErrors, parseTreeOpt, anyErrors = ParseAndCheckFile.parseFile(sourceText, filename, options, userOpName, suggestNamesForErrors) + let res = FSharpParseFileResults(parseErrors, parseTreeOpt, anyErrors, options.SourceFiles) parseCacheLock.AcquireLock(fun ltok -> parseFileCache.Set(ltok, (filename, hash, options), res)) return res - else - let parseDiags, parseTree, anyErrors = ParseAndCheckFile.parseFile(sourceText, filename, options, userOpName, false) - return FSharpParseFileResults(parseDiags, parseTree, anyErrors, options.SourceFiles) - } - - /// Fetch the parse information from the background compiler (which checks w.r.t. the FileSystem API) - member _.GetBackgroundParseResultsForFileInProject(filename, options, userOpName) = - node { - let! builderOpt, creationDiags = getOrCreateBuilder (options, userOpName) - match builderOpt with - | None -> - let parseTree = EmptyParsedInput(filename, (false, false)) - return FSharpParseFileResults(creationDiags, parseTree, true, [| |]) - | Some builder -> - let parseTree,_,_,parseDiags = builder.GetParseResultsForFile (filename) - let diagnostics = [| yield! creationDiags; yield! DiagnosticHelpers.CreateDiagnostics (builder.TcConfig.errorSeverityOptions, false, filename, parseDiags, suggestNamesForErrors) |] - return FSharpParseFileResults(diagnostics = diagnostics, input = parseTree, parseHadErrors = false, dependencyFiles = builder.AllDependenciesDeprecated) } - member _.GetCachedCheckFileResult(builder: IncrementalBuilder, filename, sourceText: ISourceText, options) = - node { - let hash = sourceText.GetHashCode() |> int64 - let key = (filename, hash, options) - let cachedResultsOpt = parseCacheLock.AcquireLock(fun ltok -> checkFileInProjectCache.TryGet(ltok, key)) - - match cachedResultsOpt with - | Some cachedResults -> - match! cachedResults.GetOrComputeValue() with - | (parseResults, checkResults,_,priorTimeStamp) - when - (match builder.GetCheckResultsBeforeFileInProjectEvenIfStale filename with - | None -> false - | Some(tcPrior) -> - tcPrior.TimeStamp = priorTimeStamp && - builder.AreCheckResultsBeforeFileInProjectReady(filename)) -> - return Some (parseResults,checkResults) - | _ -> - parseCacheLock.AcquireLock(fun ltok -> checkFileInProjectCache.RemoveAnySimilar(ltok, key)) - return None - | _ -> - return None + member bc.ParseFileNoCache(filename, sourceText, options, userOpName) = + async { + let parseErrors, parseTreeOpt, anyErrors = ParseAndCheckFile.parseFile(sourceText, filename, options, userOpName, false) + return FSharpParseFileResults(parseErrors, parseTreeOpt, anyErrors, options.SourceFiles) } - member private bc.CheckOneFileImplAux - (parseResults: FSharpParseFileResults, - sourceText: ISourceText, - fileName: string, - options: FSharpProjectOptions, - builder: IncrementalBuilder, - tcPrior: PartialCheckResults, - tcInfo: TcInfo, - creationDiags: FSharpDiagnostic[]) : NodeCode = - - node { - // Get additional script #load closure information if applicable. - // For scripts, this will have been recorded by GetProjectOptionsFromScript. - let tcConfig = tcPrior.TcConfig - let loadClosure = scriptClosureCache.TryGet(AnyCallerThread, options) - - let! checkAnswer = - FSharpCheckFileResults.CheckOneFile - (parseResults, - sourceText, - fileName, - options.ProjectFileName, - tcConfig, - tcPrior.TcGlobals, - tcPrior.TcImports, - tcInfo.tcState, - tcInfo.moduleNamesDict, - loadClosure, - tcInfo.TcErrors, - options.IsIncompleteTypeCheckEnvironment, - options, - builder, - Array.ofList tcInfo.tcDependencyFiles, - creationDiags, - parseResults.Diagnostics, - keepAssemblyContents, - suggestNamesForErrors) |> NodeCode.FromCancellable - GraphNode.SetPreferredUILang tcConfig.preferredUiLang - return (parseResults, checkAnswer, sourceText.GetHashCode() |> int64, tcPrior.TimeStamp) - } - + /// Fetch the parse information from the background compiler (which checks w.r.t. the FileSystem API) + member __.GetBackgroundParseResultsForFileInProject(filename, options, userOpName) = + reactor.EnqueueAndAwaitOpAsync(userOpName, "GetBackgroundParseResultsForFileInProject ", filename, fun ctok -> + cancellable { + let! builderOpt, creationErrors = getOrCreateBuilder (ctok, options, userOpName) + match builderOpt with + | None -> return FSharpParseFileResults(creationErrors, None, true, [| |]) + | Some builder -> + let! parseTreeOpt,_,_,parseErrors = builder.GetParseResultsForFile (ctok, filename) + let errors = [| yield! creationErrors; yield! ErrorHelpers.CreateErrorInfos (builder.TcConfig.errorSeverityOptions, false, filename, parseErrors, suggestNamesForErrors) |] + return FSharpParseFileResults(errors = errors, input = parseTreeOpt, parseHadErrors = false, dependencyFiles = builder.AllDependenciesDeprecated) + } + ) + member __.GetCachedCheckFileResult(builder: IncrementalBuilder, filename, sourceText: ISourceText, options) = + // Check the cache. We can only use cached results when there is no work to do to bring the background builder up-to-date + let cachedResults = parseCacheLock.AcquireLock (fun ltok -> checkFileInProjectCache.TryGet(ltok, (filename, sourceText.GetHashCode(), options))) + + match cachedResults with +// | Some (parseResults, checkResults, _, _) when builder.AreCheckResultsBeforeFileInProjectReady(filename) -> + | Some (parseResults, checkResults,_,priorTimeStamp) + when + (match builder.GetCheckResultsBeforeFileInProjectEvenIfStale filename with + | None -> false + | Some(tcPrior) -> + tcPrior.TimeStamp = priorTimeStamp && + builder.AreCheckResultsBeforeFileInProjectReady(filename)) -> + Some (parseResults,checkResults) + | _ -> None + + /// 1. Repeatedly try to get cached file check results or get file "lock". + /// + /// 2. If it've got cached results, returns them. + /// + /// 3. If it've not got the lock for 1 minute, returns `FSharpCheckFileAnswer.Aborted`. + /// + /// 4. Type checks the file. + /// + /// 5. Records results in `BackgroundCompiler` caches. + /// + /// 6. Starts whole project background compilation. + /// + /// 7. Releases the file "lock". member private bc.CheckOneFileImpl (parseResults: FSharpParseFileResults, sourceText: ISourceText, @@ -576,141 +515,230 @@ type BackgroundCompiler( options: FSharpProjectOptions, fileVersion: int, builder: IncrementalBuilder, - tcPrior: PartialCheckResults, - tcInfo: TcInfo, - creationDiags: FSharpDiagnostic[]) = - - node { - match! bc.GetCachedCheckFileResult(builder, fileName, sourceText, options) with - | Some (_, results) -> return FSharpCheckFileAnswer.Succeeded results - | _ -> - let lazyCheckFile = - getCheckFileNode - (parseResults, sourceText, fileName, options, fileVersion, builder, tcPrior, tcInfo, creationDiags) - (fun () -> - Interlocked.Increment(&actualCheckFileCount) |> ignore - ) - - let! (_, results, _, _) = lazyCheckFile.GetOrComputeValue() - return FSharpCheckFileAnswer.Succeeded results - } + tcConfig, + tcGlobals, + tcImports, + tcDependencyFiles, + timeStamp, + prevTcState, + prevModuleNamesDict, + prevTcErrors, + creationErrors: FSharpErrorInfo[], + userOpName: string) = + + async { + let beingCheckedFileKey = fileName, options, fileVersion + let stopwatch = Stopwatch.StartNew() + let rec loop() = + async { + // results may appear while we were waiting for the lock, let's recheck if it's the case + let cachedResults = bc.GetCachedCheckFileResult(builder, fileName, sourceText, options) + + match cachedResults with + | Some (_, checkResults) -> return FSharpCheckFileAnswer.Succeeded checkResults + | None -> + if beingCheckedFileTable.TryAdd(beingCheckedFileKey, ()) then + try + // Get additional script #load closure information if applicable. + // For scripts, this will have been recorded by GetProjectOptionsFromScript. + let loadClosure = scriptClosureCache.TryGet(AnyCallerThread, options) + let! checkAnswer = + FSharpCheckFileResults.CheckOneFile + (parseResults, + sourceText, + fileName, + options.ProjectFileName, + tcConfig, + tcGlobals, + tcImports, + prevTcState, + prevModuleNamesDict, + loadClosure, + prevTcErrors, + reactorOps, + userOpName, + options.IsIncompleteTypeCheckEnvironment, + builder, + Array.ofList tcDependencyFiles, + creationErrors, + parseResults.Errors, + keepAssemblyContents, + suggestNamesForErrors) + let parsingOptions = FSharpParsingOptions.FromTcConfig(tcConfig, Array.ofList builder.SourceFiles, options.UseScriptResolutionRules) + reactor.SetPreferredUILang tcConfig.preferredUiLang + bc.RecordTypeCheckFileInProjectResults(fileName, options, parsingOptions, parseResults, fileVersion, timeStamp, Some checkAnswer, sourceText.GetHashCode()) + return checkAnswer + finally + let dummy = ref () + beingCheckedFileTable.TryRemove(beingCheckedFileKey, dummy) |> ignore + else + do! Async.Sleep 100 + if stopwatch.Elapsed > TimeSpan.FromMinutes 1. then + return FSharpCheckFileAnswer.Aborted + else + return! loop() + } + return! loop() + } /// Type-check the result obtained by parsing, but only if the antecedent type checking context is available. member bc.CheckFileInProjectAllowingStaleCachedResults(parseResults: FSharpParseFileResults, filename, fileVersion, sourceText: ISourceText, options, userOpName) = - node { - let! cachedResults = - node { - let! builderOpt, creationDiags = getAnyBuilder (options, userOpName) - - match builderOpt with - | Some builder -> - match! bc.GetCachedCheckFileResult(builder, filename, sourceText, options) with - | Some (_, checkResults) -> return Some (builder, creationDiags, Some (FSharpCheckFileAnswer.Succeeded checkResults)) - | _ -> return Some (builder, creationDiags, None) + let execWithReactorAsync action = reactor.EnqueueAndAwaitOpAsync(userOpName, "CheckFileInProjectAllowingStaleCachedResults ", filename, action) + async { + try + if implicitlyStartBackgroundWork then + reactor.CancelBackgroundOp() // cancel the background work, since we will start new work after we're done + + let! cachedResults = + execWithReactorAsync <| fun ctok -> + cancellable { + let! _builderOpt,_creationErrors = getOrCreateBuilder (ctok, options, userOpName) + + match tryGetAnyBuilder options with + | Some (Some builder, creationErrors) -> + match bc.GetCachedCheckFileResult(builder, filename, sourceText, options) with + | Some (_, checkResults) -> return Some (builder, creationErrors, Some (FSharpCheckFileAnswer.Succeeded checkResults)) + | _ -> return Some (builder, creationErrors, None) | _ -> return None // the builder wasn't ready - } + } - match cachedResults with - | None -> return None - | Some (_, _, Some x) -> return Some x - | Some (builder, creationDiags, None) -> - Trace.TraceInformation("FCS: {0}.{1} ({2})", userOpName, "CheckFileInProjectAllowingStaleCachedResults.CacheMiss", filename) - match builder.GetCheckResultsBeforeFileInProjectEvenIfStale filename with - | Some tcPrior -> - match tcPrior.TryPeekTcInfo() with - | Some tcInfo -> - let! checkResults = bc.CheckOneFileImpl(parseResults, sourceText, filename, options, fileVersion, builder, tcPrior, tcInfo, creationDiags) + match cachedResults with + | None -> return None + | Some (_, _, Some x) -> return Some x + | Some (builder, creationErrors, None) -> + Trace.TraceInformation("FCS: {0}.{1} ({2})", userOpName, "CheckFileInProjectAllowingStaleCachedResults.CacheMiss", filename) + let! tcPrior = + execWithReactorAsync <| fun ctok -> + cancellable { + DoesNotRequireCompilerThreadTokenAndCouldPossiblyBeMadeConcurrent ctok + let tcPrior = builder.GetCheckResultsBeforeFileInProjectEvenIfStale filename + return + tcPrior + |> Option.map (fun tcPrior -> + (tcPrior, tcPrior.TcInfo ctok) + ) + } + + match tcPrior with + | Some(tcPrior, tcInfo) -> + let! checkResults = bc.CheckOneFileImpl(parseResults, sourceText, filename, options, fileVersion, builder, tcPrior.TcConfig, tcPrior.TcGlobals, tcPrior.TcImports, tcInfo.tcDependencyFiles, tcPrior.TimeStamp, tcInfo.tcState, tcInfo.moduleNamesDict, tcInfo.TcErrors, creationErrors, userOpName) return Some checkResults - | None -> - return None - | None -> return None // the incremental builder was not up to date + | None -> return None // the incremental builder was not up to date + finally + bc.ImplicitlyStartCheckProjectInBackground(options, userOpName) } /// Type-check the result obtained by parsing. Force the evaluation of the antecedent type checking context if needed. member bc.CheckFileInProject(parseResults: FSharpParseFileResults, filename, fileVersion, sourceText: ISourceText, options, userOpName) = - node { - let! builderOpt,creationDiags = getOrCreateBuilder (options, userOpName) - match builderOpt with - | None -> return FSharpCheckFileAnswer.Succeeded (FSharpCheckFileResults.MakeEmpty(filename, creationDiags, keepAssemblyContents)) - | Some builder -> - // Check the cache. We can only use cached results when there is no work to do to bring the background builder up-to-date - let! cachedResults = bc.GetCachedCheckFileResult(builder, filename, sourceText, options) - - match cachedResults with - | Some (_, checkResults) -> return FSharpCheckFileAnswer.Succeeded checkResults - | _ -> - let! tcPrior = builder.GetCheckResultsBeforeFileInProject (filename) - let! tcInfo = tcPrior.GetOrComputeTcInfo() - return! bc.CheckOneFileImpl(parseResults, sourceText, filename, options, fileVersion, builder, tcPrior, tcInfo, creationDiags) + let execWithReactorAsync action = reactor.EnqueueAndAwaitOpAsync(userOpName, "CheckFileInProject", filename, action) + async { + try + if implicitlyStartBackgroundWork then + reactor.CancelBackgroundOp() // cancel the background work, since we will start new work after we're done + let! builderOpt,creationErrors = execWithReactorAsync (fun ctok -> getOrCreateBuilder (ctok, options, userOpName)) + match builderOpt with + | None -> return FSharpCheckFileAnswer.Succeeded (FSharpCheckFileResults.MakeEmpty(filename, creationErrors, keepAssemblyContents)) + | Some builder -> + // Check the cache. We can only use cached results when there is no work to do to bring the background builder up-to-date + let cachedResults = bc.GetCachedCheckFileResult(builder, filename, sourceText, options) + + match cachedResults with + | Some (_, checkResults) -> return FSharpCheckFileAnswer.Succeeded checkResults + | _ -> + Trace.TraceInformation("FCS: {0}.{1} ({2})", userOpName, "CheckFileInProject.CacheMiss", filename) + let! tcPrior, tcInfo = + execWithReactorAsync <| fun ctok -> + cancellable { + let! tcPrior = builder.GetCheckResultsBeforeFileInProject (ctok, filename) + return (tcPrior, tcPrior.TcInfo ctok) + } + let! checkAnswer = bc.CheckOneFileImpl(parseResults, sourceText, filename, options, fileVersion, builder, tcPrior.TcConfig, tcPrior.TcGlobals, tcPrior.TcImports, tcInfo.tcDependencyFiles, tcPrior.TimeStamp, tcInfo.tcState, tcInfo.moduleNamesDict, tcInfo.TcErrors, creationErrors, userOpName) + return checkAnswer + finally + bc.ImplicitlyStartCheckProjectInBackground(options, userOpName) } /// Parses and checks the source file and returns untyped AST and check results. member bc.ParseAndCheckFileInProject (filename:string, fileVersion, sourceText: ISourceText, options:FSharpProjectOptions, userOpName) = - node { - let strGuid = "_ProjectId=" + (options.ProjectId |> Option.defaultValue "null") - Logger.LogBlockMessageStart (filename + strGuid) LogCompilerFunctionId.Service_ParseAndCheckFileInProject - - let! builderOpt,creationDiags = getOrCreateBuilder (options, userOpName) - match builderOpt with - | None -> - Logger.LogBlockMessageStop (filename + strGuid + "-Failed_Aborted") LogCompilerFunctionId.Service_ParseAndCheckFileInProject - - let parseTree = EmptyParsedInput(filename, (false, false)) - let parseResults = FSharpParseFileResults(creationDiags, parseTree, true, [| |]) - return (parseResults, FSharpCheckFileAnswer.Aborted) - - | Some builder -> - let! cachedResults = bc.GetCachedCheckFileResult(builder, filename, sourceText, options) - - match cachedResults with - | Some (parseResults, checkResults) -> - Logger.LogBlockMessageStop (filename + strGuid + "-Successful_Cached") LogCompilerFunctionId.Service_ParseAndCheckFileInProject - - return (parseResults, FSharpCheckFileAnswer.Succeeded checkResults) - | _ -> - let! tcPrior = builder.GetCheckResultsBeforeFileInProject (filename) - let! tcInfo = tcPrior.GetOrComputeTcInfo() - // Do the parsing. - let parsingOptions = FSharpParsingOptions.FromTcConfig(builder.TcConfig, Array.ofList (builder.SourceFiles), options.UseScriptResolutionRules) - GraphNode.SetPreferredUILang tcPrior.TcConfig.preferredUiLang - let parseDiags, parseTree, anyErrors = ParseAndCheckFile.parseFile (sourceText, filename, parsingOptions, userOpName, suggestNamesForErrors) - let parseResults = FSharpParseFileResults(parseDiags, parseTree, anyErrors, builder.AllDependenciesDeprecated) - let! checkResults = bc.CheckOneFileImpl(parseResults, sourceText, filename, options, fileVersion, builder, tcPrior, tcInfo, creationDiags) - - Logger.LogBlockMessageStop (filename + strGuid + "-Successful") LogCompilerFunctionId.Service_ParseAndCheckFileInProject - - return (parseResults, checkResults) + let execWithReactorAsync action = reactor.EnqueueAndAwaitOpAsync(userOpName, "ParseAndCheckFileInProject", filename, action) + async { + try + let strGuid = "_ProjectId=" + (options.ProjectId |> Option.defaultValue "null") + Logger.LogBlockMessageStart (filename + strGuid) LogCompilerFunctionId.Service_ParseAndCheckFileInProject + + if implicitlyStartBackgroundWork then + Logger.LogMessage (filename + strGuid + "-Cancelling background work") LogCompilerFunctionId.Service_ParseAndCheckFileInProject + reactor.CancelBackgroundOp() // cancel the background work, since we will start new work after we're done + + let! builderOpt,creationErrors = execWithReactorAsync (fun ctok -> getOrCreateBuilder (ctok, options, userOpName)) + match builderOpt with + | None -> + Logger.LogBlockMessageStop (filename + strGuid + "-Failed_Aborted") LogCompilerFunctionId.Service_ParseAndCheckFileInProject + + let parseResults = FSharpParseFileResults(creationErrors, None, true, [| |]) + return (parseResults, FSharpCheckFileAnswer.Aborted) + + | Some builder -> + let cachedResults = bc.GetCachedCheckFileResult(builder, filename, sourceText, options) + + match cachedResults with + | Some (parseResults, checkResults) -> + Logger.LogBlockMessageStop (filename + strGuid + "-Successful_Cached") LogCompilerFunctionId.Service_ParseAndCheckFileInProject + + return parseResults, FSharpCheckFileAnswer.Succeeded checkResults + | _ -> + // todo this blocks the Reactor queue until all files up to the current are type checked. It's OK while editing the file, + // but results with non cooperative blocking when a firts file from a project opened. + let! tcPrior, tcInfo = + execWithReactorAsync <| fun ctok -> + cancellable { + let! tcPrior = builder.GetCheckResultsBeforeFileInProject (ctok, filename) + return (tcPrior, tcPrior.TcInfo ctok) + } + + // Do the parsing. + let parsingOptions = FSharpParsingOptions.FromTcConfig(builder.TcConfig, Array.ofList (builder.SourceFiles), options.UseScriptResolutionRules) + reactor.SetPreferredUILang tcPrior.TcConfig.preferredUiLang + let parseErrors, parseTreeOpt, anyErrors = ParseAndCheckFile.parseFile (sourceText, filename, parsingOptions, userOpName, suggestNamesForErrors) + let parseResults = FSharpParseFileResults(parseErrors, parseTreeOpt, anyErrors, builder.AllDependenciesDeprecated) + let! checkResults = bc.CheckOneFileImpl(parseResults, sourceText, filename, options, fileVersion, builder, tcPrior.TcConfig, tcPrior.TcGlobals, tcPrior.TcImports, tcInfo.tcDependencyFiles, tcPrior.TimeStamp, tcInfo.tcState, tcInfo.moduleNamesDict, tcInfo.TcErrors, creationErrors, userOpName) + + Logger.LogBlockMessageStop (filename + strGuid + "-Successful") LogCompilerFunctionId.Service_ParseAndCheckFileInProject + + return parseResults, checkResults + finally + bc.ImplicitlyStartCheckProjectInBackground(options, userOpName) } /// Fetch the check information from the background compiler (which checks w.r.t. the FileSystem API) - member _.GetBackgroundCheckResultsForFileInProject(filename, options, userOpName) = - node { - let! builderOpt, creationDiags = getOrCreateBuilder (options, userOpName) + member __.GetBackgroundCheckResultsForFileInProject(filename, options, userOpName) = + reactor.EnqueueAndAwaitOpAsync(userOpName, "GetBackgroundCheckResultsForFileInProject", filename, fun ctok -> + cancellable { + let! builderOpt, creationErrors = getOrCreateBuilder (ctok, options, userOpName) match builderOpt with | None -> - let parseTree = EmptyParsedInput(filename, (false, false)) - let parseResults = FSharpParseFileResults(creationDiags, parseTree, true, [| |]) - let typedResults = FSharpCheckFileResults.MakeEmpty(filename, creationDiags, true) + let parseResults = FSharpParseFileResults(creationErrors, None, true, [| |]) + let typedResults = FSharpCheckFileResults.MakeEmpty(filename, creationErrors, keepAssemblyContents) return (parseResults, typedResults) | Some builder -> - let (parseTree, _, _, parseDiags) = builder.GetParseResultsForFile (filename) - let! tcProj = builder.GetFullCheckResultsAfterFileInProject (filename) + let! (parseTreeOpt, _, _, untypedErrors) = builder.GetParseResultsForFile (ctok, filename) + let! tcProj = builder.GetFullCheckResultsAfterFileInProject (ctok, filename) - let! tcInfo, tcInfoExtras = tcProj.GetOrComputeTcInfoWithExtras() + let tcInfo, tcInfoOptional = tcProj.TcInfoWithOptional ctok - let tcResolutions = tcInfoExtras.tcResolutions - let tcSymbolUses = tcInfoExtras.tcSymbolUses - let tcOpenDeclarations = tcInfoExtras.tcOpenDeclarations + let tcResolutionsRev = tcInfoOptional.tcResolutionsRev + let tcSymbolUsesRev = tcInfoOptional.tcSymbolUsesRev + let tcOpenDeclarationsRev = tcInfoOptional.tcOpenDeclarationsRev let latestCcuSigForFile = tcInfo.latestCcuSigForFile let tcState = tcInfo.tcState let tcEnvAtEnd = tcInfo.tcEnvAtEndOfFile - let latestImplementationFile = tcInfoExtras.latestImplFile + let latestImplementationFile = tcInfoOptional.latestImplFile let tcDependencyFiles = tcInfo.tcDependencyFiles let tcErrors = tcInfo.TcErrors let errorOptions = builder.TcConfig.errorSeverityOptions - let parseDiags = [| yield! creationDiags; yield! DiagnosticHelpers.CreateDiagnostics (errorOptions, false, filename, parseDiags, suggestNamesForErrors) |] - let tcErrors = [| yield! creationDiags; yield! DiagnosticHelpers.CreateDiagnostics (errorOptions, false, filename, tcErrors, suggestNamesForErrors) |] - let parseResults = FSharpParseFileResults(diagnostics=parseDiags, input=parseTree, parseHadErrors=false, dependencyFiles=builder.AllDependenciesDeprecated) + let untypedErrors = [| yield! creationErrors; yield! ErrorHelpers.CreateErrorInfos (errorOptions, false, filename, untypedErrors, suggestNamesForErrors) |] + let tcErrors = [| yield! creationErrors; yield! ErrorHelpers.CreateErrorInfos (errorOptions, false, filename, tcErrors, suggestNamesForErrors) |] + let parseResults = FSharpParseFileResults(errors = untypedErrors, input = parseTreeOpt, parseHadErrors = false, dependencyFiles = builder.AllDependenciesDeprecated) let loadClosure = scriptClosureCache.TryGet(AnyCallerThread, options) let typedResults = FSharpCheckFileResults.Make @@ -720,138 +748,116 @@ type BackgroundCompiler( tcProj.TcGlobals, options.IsIncompleteTypeCheckEnvironment, builder, - options, Array.ofList tcDependencyFiles, - creationDiags, - parseResults.Diagnostics, + creationErrors, + parseResults.Errors, tcErrors, keepAssemblyContents, Option.get latestCcuSigForFile, tcState.Ccu, tcProj.TcImports, tcEnvAtEnd.AccessRights, - tcResolutions, - tcSymbolUses, + List.head tcResolutionsRev, + List.head tcSymbolUsesRev, tcEnvAtEnd.NameEnv, loadClosure, latestImplementationFile, - tcOpenDeclarations) + List.head tcOpenDeclarationsRev) return (parseResults, typedResults) } + ) - member _.FindReferencesInFile(filename: string, options: FSharpProjectOptions, symbol: FSharpSymbol, canInvalidateProject: bool, userOpName: string) = - node { - let! builderOpt, _ = getOrCreateBuilderWithInvalidationFlag (options, canInvalidateProject, userOpName) + member __.FindReferencesInFile(filename: string, options: FSharpProjectOptions, symbol: FSharpSymbol, canInvalidateProject: bool, userOpName: string) = + reactor.EnqueueAndAwaitOpAsync(userOpName, "FindReferencesInFile", filename, fun ctok -> + cancellable { + let! builderOpt, _ = getOrCreateBuilderWithInvalidationFlag (ctok, options, canInvalidateProject, userOpName) match builderOpt with | None -> return Seq.empty | Some builder -> if builder.ContainsFile filename then - let! checkResults = builder.GetFullCheckResultsAfterFileInProject (filename) - let! keyStoreOpt = checkResults.GetOrComputeItemKeyStoreIfEnabled() - match keyStoreOpt with + let! checkResults = builder.GetFullCheckResultsAfterFileInProject (ctok, filename) + match checkResults.TryGetItemKeyStore ctok with | None -> return Seq.empty | Some reader -> return reader.FindAll symbol.Item else - return Seq.empty - } + return Seq.empty }) - member _.GetSemanticClassificationForFile(filename: string, options: FSharpProjectOptions, userOpName: string) = - node { - let! builderOpt, _ = getOrCreateBuilder (options, userOpName) - match builderOpt with - | None -> return None - | Some builder -> - let! checkResults = builder.GetFullCheckResultsAfterFileInProject (filename) - let! scopt = checkResults.GetOrComputeSemanticClassificationIfEnabled() - match scopt with - | None -> return None - | Some sc -> return Some (sc.GetView ()) - } + member __.GetSemanticClassificationForFile(filename: string, options: FSharpProjectOptions, userOpName: string) = + reactor.EnqueueAndAwaitOpAsync(userOpName, "GetSemanticClassificationForFile", filename, fun ctok -> + cancellable { + let! builderOpt, _ = getOrCreateBuilder (ctok, options, userOpName) + match builderOpt with + | None -> return [||] + | Some builder -> + let! checkResults = builder.GetFullCheckResultsAfterFileInProject (ctok, filename) + return checkResults.GetSemanticClassification ctok }) /// Try to get recent approximate type check results for a file. - member _.TryGetRecentCheckResultsForFile(filename: string, options:FSharpProjectOptions, sourceText: ISourceText option, _userOpName: string) = - match sourceText with - | Some sourceText -> - let hash = sourceText.GetHashCode() |> int64 - let resOpt = parseCacheLock.AcquireLock(fun ltok -> checkFileInProjectCache.TryGet(ltok,(filename,hash,options))) - match resOpt with - | Some res -> - match res.TryPeekValue() with - | ValueSome(a,b,c,_) -> - Some(a,b,c) - | ValueNone -> - None - | None -> - None - | None -> - None + member __.TryGetRecentCheckResultsForFile(filename: string, options:FSharpProjectOptions, sourceText: ISourceText option, _userOpName: string) = + parseCacheLock.AcquireLock (fun ltok -> + match sourceText with + | Some sourceText -> + match checkFileInProjectCache.TryGet(ltok,(filename,sourceText.GetHashCode(),options)) with + | Some (a,b,c,_) -> Some (a,b,c) + | None -> checkFileInProjectCachePossiblyStale.TryGet(ltok,(filename,options)) + | None -> checkFileInProjectCachePossiblyStale.TryGet(ltok,(filename,options))) /// Parse and typecheck the whole project (the implementation, called recursively as project graph is evaluated) - member private _.ParseAndCheckProjectImpl(options, userOpName) = - node { - let! builderOpt,creationDiags = getOrCreateBuilder (options, userOpName) - match builderOpt with - | None -> - return FSharpCheckProjectResults (options.ProjectFileName, None, keepAssemblyContents, creationDiags, None) - | Some builder -> - let! (tcProj, ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt) = builder.GetFullCheckResultsAndImplementationsForProject() - let errorOptions = tcProj.TcConfig.errorSeverityOptions - let fileName = TcGlobals.DummyFileNameForRangesWithoutASpecificLocation - - // Although we do not use 'tcInfoExtras', computing it will make sure we get an extra info. - let! tcInfo, _tcInfoExtras = tcProj.GetOrComputeTcInfoWithExtras() - - let topAttribs = tcInfo.topAttribs - let tcState = tcInfo.tcState - let tcEnvAtEnd = tcInfo.tcEnvAtEndOfFile - let tcErrors = tcInfo.TcErrors - let tcDependencyFiles = tcInfo.tcDependencyFiles - let diagnostics = - [| yield! creationDiags; - yield! DiagnosticHelpers.CreateDiagnostics (errorOptions, true, fileName, tcErrors, suggestNamesForErrors) |] - let results = - FSharpCheckProjectResults - (options.ProjectFileName, - Some tcProj.TcConfig, - keepAssemblyContents, - diagnostics, - Some(tcProj.TcGlobals, tcProj.TcImports, tcState.Ccu, tcState.CcuSig, - (Choice1Of2 builder), topAttribs, tcAssemblyDataOpt, ilAssemRef, - tcEnvAtEnd.AccessRights, tcAssemblyExprOpt, - Array.ofList tcDependencyFiles, - options)) - return results + member private __.ParseAndCheckProjectImpl(options, ctok, userOpName) = + cancellable { + let! builderOpt,creationErrors = getOrCreateBuilder (ctok, options, userOpName) + match builderOpt with + | None -> + return FSharpCheckProjectResults (options.ProjectFileName, None, keepAssemblyContents, creationErrors, None) + | Some builder -> + let! (tcProj, ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt) = builder.GetFullCheckResultsAndImplementationsForProject(ctok) + let errorOptions = tcProj.TcConfig.errorSeverityOptions + let fileName = TcGlobals.DummyFileNameForRangesWithoutASpecificLocation + + let tcInfo, tcInfoOptional = tcProj.TcInfoWithOptional ctok + + let tcSymbolUses = tcInfoOptional.TcSymbolUses + let topAttribs = tcInfo.topAttribs + let tcState = tcInfo.tcState + let tcEnvAtEnd = tcInfo.tcEnvAtEndOfFile + let tcErrors = tcInfo.TcErrors + let tcDependencyFiles = tcInfo.tcDependencyFiles + let errors = [| yield! creationErrors; yield! ErrorHelpers.CreateErrorInfos (errorOptions, true, fileName, tcErrors, suggestNamesForErrors) |] + return FSharpCheckProjectResults (options.ProjectFileName, Some tcProj.TcConfig, keepAssemblyContents, errors, + Some(tcProj.TcGlobals, tcProj.TcImports, tcState.Ccu, tcState.CcuSig, + tcSymbolUses, topAttribs, tcAssemblyDataOpt, ilAssemRef, + tcEnvAtEnd.AccessRights, tcAssemblyExprOpt, Array.ofList tcDependencyFiles)) } - member _.GetAssemblyData(options, userOpName) = - node { - let! builderOpt,_ = getOrCreateBuilder (options, userOpName) + member _.GetAssemblyData(options, ctok, userOpName) = + cancellable { + let! builderOpt,_ = getOrCreateBuilder (ctok, options, userOpName) match builderOpt with | None -> return None | Some builder -> - let! (_, _, tcAssemblyDataOpt, _) = builder.GetCheckResultsAndImplementationsForProject() + let! (_, _, tcAssemblyDataOpt, _) = builder.GetCheckResultsAndImplementationsForProject(ctok) return tcAssemblyDataOpt } /// Get the timestamp that would be on the output if fully built immediately - member private _.TryGetLogicalTimeStampForProject(cache, options) = - match tryGetBuilderNode options with - | Some lazyWork -> - match lazyWork.TryPeekValue() with - | ValueSome (Some builder, _) -> - Some(builder.GetLogicalTimeStampForProject(cache)) - | _ -> - None - | _ -> - None + member private __.TryGetLogicalTimeStampForProject(cache, ctok, options, userOpName: string) = + + // NOTE: This creation of the background builder is currently run as uncancellable. Creating background builders is generally + // cheap though the timestamp computations look suspicious for transitive project references. + let builderOpt,_creationErrors = getOrCreateBuilder (ctok, options, userOpName + ".TryGetLogicalTimeStampForProject") |> Cancellable.runWithoutCancellation + match builderOpt with + | None -> None + | Some builder -> Some (builder.GetLogicalTimeStampForProject(cache, ctok)) + /// Parse and typecheck the whole project. member bc.ParseAndCheckProject(options, userOpName) = - bc.ParseAndCheckProjectImpl(options, userOpName) + reactor.EnqueueAndAwaitOpAsync(userOpName, "ParseAndCheckProject", options.ProjectFileName, fun ctok -> bc.ParseAndCheckProjectImpl(options, ctok, userOpName)) - member _.GetProjectOptionsFromScript(filename, sourceText, previewEnabled, loadedTimeStamp, otherFlags, useFsiAuxLib: bool option, useSdkRefs: bool option, sdkDirOverride: string option, assumeDotNetFramework: bool option, optionsStamp: int64 option, _userOpName) = + member __.GetProjectOptionsFromScript(filename, sourceText, previewEnabled, loadedTimeStamp, otherFlags, useFsiAuxLib: bool option, useSdkRefs: bool option, assumeDotNetFramework: bool option, extraProjectInfo: obj option, optionsStamp: int64 option, userOpName) = + reactor.EnqueueAndAwaitOpAsync (userOpName, "GetProjectOptionsFromScript", filename, fun ctok -> cancellable { use errors = new ErrorScope() @@ -880,15 +886,15 @@ type BackgroundCompiler( let fsiCompilerOptions = CompilerOptions.GetCoreFsiCompilerOptions tcConfigB CompilerOptions.ParseCompilerOptions (ignore, fsiCompilerOptions, Array.toList otherFlags) - let loadClosure = - LoadClosure.ComputeClosureOfScriptText(legacyReferenceResolver, + let loadClosure = + LoadClosure.ComputeClosureOfScriptText(ctok, legacyReferenceResolver, FSharpCheckerResultsSettings.defaultFSharpBinariesDir, filename, sourceText, - CodeContext.Editing, useSimpleResolution, useFsiAuxLib, useSdkRefs, sdkDirOverride, new Lexhelp.LexResourceManager(), + CodeContext.Editing, useSimpleResolution, useFsiAuxLib, useSdkRefs, new Lexhelp.LexResourceManager(), applyCompilerOptions, assumeDotNetFramework, tryGetMetadataSnapshot, reduceMemoryUsage, dependencyProviderForScripts) let otherFlags = - [| yield "--noframework"; yield "--warn:3"; + [| yield "--noframework"; yield "--warn:3"; yield! otherFlags for r in loadClosure.References do yield "-r:" + fst r for (code,_) in loadClosure.NoWarns do yield "--nowarn:" + code @@ -904,77 +910,116 @@ type BackgroundCompiler( IsIncompleteTypeCheckEnvironment = false UseScriptResolutionRules = true LoadTime = loadedTimeStamp - UnresolvedReferences = Some (FSharpUnresolvedReferencesSet(loadClosure.UnresolvedReferences)) + UnresolvedReferences = Some (UnresolvedReferencesSet(loadClosure.UnresolvedReferences)) OriginalLoadReferences = loadClosure.OriginalLoadReferences + ExtraProjectInfo=extraProjectInfo Stamp = optionsStamp } scriptClosureCache.Set(AnyCallerThread, options, loadClosure) // Save the full load closure for later correlation. - let diags = loadClosure.LoadClosureRootFileDiagnostics |> List.map (fun (exn, isError) -> FSharpDiagnostic.CreateFromException(exn, isError, range.Zero, false)) - return options, (diags @ errors.Diagnostics) - } - |> Cancellable.toAsync + return options, errors.Diagnostics + }) - member bc.InvalidateConfiguration(options: FSharpProjectOptions, userOpName) = - if incrementalBuildersCache.ContainsSimilarKey (AnyCallerThread, options) then - let _ = createBuilderNode (options, userOpName, CancellationToken.None) - () + member bc.InvalidateConfiguration(options : FSharpProjectOptions, startBackgroundCompileIfAlreadySeen, userOpName) = + let startBackgroundCompileIfAlreadySeen = defaultArg startBackgroundCompileIfAlreadySeen implicitlyStartBackgroundWork - member bc.ClearCache(options: seq, _userOpName) = - lock gate (fun () -> - options - |> Seq.iter (fun options -> incrementalBuildersCache.RemoveAnySimilar(AnyCallerThread, options)) - ) - - member _.NotifyProjectCleaned (options: FSharpProjectOptions, userOpName) = - async { - let! ct = Async.CancellationToken - // If there was a similar entry (as there normally will have been) then re-establish an empty builder . This - // is a somewhat arbitrary choice - it will have the effect of releasing memory associated with the previous - // builder, but costs some time. + // This operation can't currently be cancelled nor awaited + reactor.EnqueueOp(userOpName, "InvalidateConfiguration: Stamp(" + (options.Stamp |> Option.defaultValue 0L).ToString() + ")", options.ProjectFileName, fun ctok -> + // If there was a similar entry then re-establish an empty builder . This is a somewhat arbitrary choice - it + // will have the effect of releasing memory associated with the previous builder, but costs some time. if incrementalBuildersCache.ContainsSimilarKey (AnyCallerThread, options) then - let _ = createBuilderNode (options, userOpName, ct) - () - } - member _.BeforeBackgroundFileCheck = beforeFileChecked.Publish + // We do not need to decrement here - it is done by disposal. + let newBuilderInfo = CreateOneIncrementalBuilder (ctok, options, userOpName) |> Cancellable.runWithoutCancellation + incrementalBuildersCache.Set(AnyCallerThread, options, newBuilderInfo) - member _.FileParsed = fileParsed.Publish + // Start working on the project. Also a somewhat arbitrary choice + if startBackgroundCompileIfAlreadySeen then + bc.CheckProjectInBackground(options, userOpName + ".StartBackgroundCompile")) - member _.FileChecked = fileChecked.Publish - - member _.ProjectChecked = projectChecked.Publish - - member _.ClearCachesAsync (_userOpName) = - async { - return - lock gate (fun () -> - parseCacheLock.AcquireLock (fun ltok -> - checkFileInProjectCache.Clear(ltok) - parseFileCache.Clear(ltok)) - incrementalBuildersCache.Clear(AnyCallerThread) - frameworkTcImportsCache.Clear() - scriptClosureCache.Clear (AnyCallerThread) - ) - } - - member _.DownsizeCaches(_userOpName) = - async { - return - lock gate (fun () -> - parseCacheLock.AcquireLock (fun ltok -> - checkFileInProjectCache.Resize(ltok, newKeepStrongly=1) - parseFileCache.Resize(ltok, newKeepStrongly=1)) - incrementalBuildersCache.Resize(AnyCallerThread, newKeepStrongly=1, newKeepMax=1) - frameworkTcImportsCache.Downsize() - scriptClosureCache.Resize(AnyCallerThread,newKeepStrongly=1, newKeepMax=1) - ) - } + member bc.ClearCache(options : FSharpProjectOptions seq, userOpName) = + // This operation can't currently be cancelled nor awaited + reactor.EnqueueOp(userOpName, "ClearCache", String.Empty, fun _ -> + options + |> Seq.iter (fun options -> incrementalBuildersCache.RemoveAnySimilar(AnyCallerThread, options))) + + member __.NotifyProjectCleaned (options : FSharpProjectOptions, userOpName) = + reactor.EnqueueAndAwaitOpAsync(userOpName, "NotifyProjectCleaned", options.ProjectFileName, fun ctok -> + cancellable { + // If there was a similar entry (as there normally will have been) then re-establish an empty builder . This + // is a somewhat arbitrary choice - it will have the effect of releasing memory associated with the previous + // builder, but costs some time. + if incrementalBuildersCache.ContainsSimilarKey (AnyCallerThread, options) then + // We do not need to decrement here - it is done by disposal. + let! newBuilderInfo = CreateOneIncrementalBuilder (ctok, options, userOpName) + incrementalBuildersCache.Set(AnyCallerThread, options, newBuilderInfo) + }) + + member __.CheckProjectInBackground (options, userOpName) = + reactor.SetBackgroundOp (Some (userOpName, "CheckProjectInBackground", options.ProjectFileName, (fun ctok ct -> + // The creation of the background builder can't currently be cancelled + match getOrCreateBuilder (ctok, options, userOpName) |> Cancellable.run ct with + | ValueOrCancelled.Cancelled _ -> false + | ValueOrCancelled.Value (builderOpt,_) -> + match builderOpt with + | None -> false + | Some builder -> + // The individual steps of the background build + match builder.Step(ctok) |> Cancellable.run ct with + | ValueOrCancelled.Value v -> v + | ValueOrCancelled.Cancelled _ -> false))) + + member __.StopBackgroundCompile () = + reactor.SetBackgroundOp(None) + + member __.WaitForBackgroundCompile() = + reactor.WaitForBackgroundOpCompletion() + + member __.CompleteAllQueuedOps() = + reactor.CompleteAllQueuedOps() + + member __.Reactor = reactor + + member __.ReactorOps = reactorOps + + member __.BeforeBackgroundFileCheck = beforeFileChecked.Publish + + member __.FileParsed = fileParsed.Publish + + member __.FileChecked = fileChecked.Publish + + member __.ProjectChecked = projectChecked.Publish + + member __.CurrentQueueLength = reactor.CurrentQueueLength + + member __.ClearCachesAsync (userOpName) = + reactor.EnqueueAndAwaitOpAsync (userOpName, "ClearCachesAsync", "", fun ctok -> + parseCacheLock.AcquireLock (fun ltok -> + checkFileInProjectCachePossiblyStale.Clear ltok + checkFileInProjectCache.Clear ltok + parseFileCache.Clear(ltok)) + incrementalBuildersCache.Clear(AnyCallerThread) + frameworkTcImportsCache.Clear ctok + scriptClosureCache.Clear (AnyCallerThread) + cancellable.Return ()) + + member __.DownsizeCaches(userOpName) = + reactor.EnqueueAndAwaitOpAsync (userOpName, "DownsizeCaches", "", fun ctok -> + parseCacheLock.AcquireLock (fun ltok -> + checkFileInProjectCachePossiblyStale.Resize(ltok, newKeepStrongly=1) + checkFileInProjectCache.Resize(ltok, newKeepStrongly=1) + parseFileCache.Resize(ltok, newKeepStrongly=1)) + incrementalBuildersCache.Resize(AnyCallerThread, newKeepStrongly=1, newKeepMax=1) + frameworkTcImportsCache.Downsize(ctok) + scriptClosureCache.Resize(AnyCallerThread,newKeepStrongly=1, newKeepMax=1) + cancellable.Return ()) - member _.FrameworkImportsCache = frameworkTcImportsCache + member __.FrameworkImportsCache = frameworkTcImportsCache - static member ActualParseFileCount = actualParseFileCount + member __.ImplicitlyStartBackgroundWork with get() = implicitlyStartBackgroundWork and set v = implicitlyStartBackgroundWork <- v - static member ActualCheckFileCount = actualCheckFileCount + static member GlobalForegroundParseCountStatistic = foregroundParseCount + + static member GlobalForegroundTypeCheckCountStatistic = foregroundTypeCheckCount [] @@ -989,17 +1034,7 @@ type FSharpChecker(legacyReferenceResolver, enableBackgroundItemKeyStoreAndSemanticClassification, enablePartialTypeChecking) = - let backgroundCompiler = - BackgroundCompiler( - legacyReferenceResolver, - projectCacheSize, - keepAssemblyContents, - keepAllBackgroundResolutions, - tryGetMetadataSnapshot, - suggestNamesForErrors, - keepAllBackgroundSymbolUses, - enableBackgroundItemKeyStoreAndSemanticClassification, - enablePartialTypeChecking) + let backgroundCompiler = BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors, keepAllBackgroundSymbolUses, enableBackgroundItemKeyStoreAndSemanticClassification, enablePartialTypeChecking) static let globalInstance = lazy FSharpChecker.Create() @@ -1016,16 +1051,7 @@ type FSharpChecker(legacyReferenceResolver, let maxMemEvent = new Event() /// Instantiate an interactive checker. - static member Create( - ?projectCacheSize, - ?keepAssemblyContents, - ?keepAllBackgroundResolutions, - ?legacyReferenceResolver, - ?tryGetMetadataSnapshot, - ?suggestNamesForErrors, - ?keepAllBackgroundSymbolUses, - ?enableBackgroundItemKeyStoreAndSemanticClassification, - ?enablePartialTypeChecking) = + static member Create(?projectCacheSize, ?keepAssemblyContents, ?keepAllBackgroundResolutions, ?legacyReferenceResolver, ?tryGetMetadataSnapshot, ?suggestNamesForErrors, ?keepAllBackgroundSymbolUses, ?enableBackgroundItemKeyStoreAndSemanticClassification, ?enablePartialTypeChecking) = let legacyReferenceResolver = match legacyReferenceResolver with @@ -1044,21 +1070,13 @@ type FSharpChecker(legacyReferenceResolver, if keepAssemblyContents && enablePartialTypeChecking then invalidArg "enablePartialTypeChecking" "'keepAssemblyContents' and 'enablePartialTypeChecking' cannot be both enabled." - FSharpChecker(legacyReferenceResolver, - projectCacheSizeReal, - keepAssemblyContents, - keepAllBackgroundResolutions, - tryGetMetadataSnapshot, - suggestNamesForErrors, - keepAllBackgroundSymbolUses, - enableBackgroundItemKeyStoreAndSemanticClassification, - enablePartialTypeChecking) + new FSharpChecker(legacyReferenceResolver, projectCacheSizeReal,keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors, keepAllBackgroundSymbolUses, enableBackgroundItemKeyStoreAndSemanticClassification, enablePartialTypeChecking) - member _.ReferenceResolver = legacyReferenceResolver + member __.ReferenceResolver = legacyReferenceResolver - member _.MatchBraces(filename, sourceText: ISourceText, options: FSharpParsingOptions, ?userOpName: string) = + member __.MatchBraces(filename, sourceText: ISourceText, options: FSharpParsingOptions, ?userOpName: string) = let userOpName = defaultArg userOpName "Unknown" - let hash = sourceText.GetHashCode() |> int64 + let hash = sourceText.GetHashCode() async { match braceMatchCache.TryGet(AnyCallerThread, (filename, hash, options)) with | Some res -> return res @@ -1078,50 +1096,54 @@ type FSharpChecker(legacyReferenceResolver, let argv = List.ofArray options.OtherOptions ic.GetParsingOptionsFromCommandLineArgs(sourceFiles, argv, options.UseScriptResolutionRules) - member ic.ParseFile(filename, sourceText, options, ?cache, ?userOpName: string) = - let cache = defaultArg cache true + member ic.ParseFile(filename, sourceText, options, ?userOpName: string) = + let userOpName = defaultArg userOpName "Unknown" + ic.CheckMaxMemoryReached() + backgroundCompiler.ParseFile(filename, sourceText, options, userOpName) + + member ic.ParseFileNoCache(filename, sourceText, options, ?userOpName) = let userOpName = defaultArg userOpName "Unknown" ic.CheckMaxMemoryReached() - backgroundCompiler.ParseFile(filename, sourceText, options, cache, userOpName) + backgroundCompiler.ParseFileNoCache(filename, sourceText, options, userOpName) - member ic.ParseFileInProject(filename, source: string, options, ?cache: bool, ?userOpName: string) = + member ic.ParseFileInProject(filename, source: string, options, ?userOpName: string) = + let userOpName = defaultArg userOpName "Unknown" let parsingOptions, _ = ic.GetParsingOptionsFromProjectOptions(options) - ic.ParseFile(filename, SourceText.ofString source, parsingOptions, ?cache=cache, ?userOpName=userOpName) + ic.ParseFile(filename, SourceText.ofString source, parsingOptions, userOpName) - member _.GetBackgroundParseResultsForFileInProject (filename,options, ?userOpName: string) = + member __.GetBackgroundParseResultsForFileInProject (filename,options, ?userOpName: string) = let userOpName = defaultArg userOpName "Unknown" backgroundCompiler.GetBackgroundParseResultsForFileInProject(filename, options, userOpName) - |> Async.AwaitNodeCode - member _.GetBackgroundCheckResultsForFileInProject (filename,options, ?userOpName: string) = + member __.GetBackgroundCheckResultsForFileInProject (filename,options, ?userOpName: string) = let userOpName = defaultArg userOpName "Unknown" backgroundCompiler.GetBackgroundCheckResultsForFileInProject(filename,options, userOpName) - |> Async.AwaitNodeCode /// Try to get recent approximate type check results for a file. - member _.TryGetRecentCheckResultsForFile(filename: string, options:FSharpProjectOptions, ?sourceText, ?userOpName: string) = + member __.TryGetRecentCheckResultsForFile(filename: string, options:FSharpProjectOptions, ?sourceText, ?userOpName: string) = let userOpName = defaultArg userOpName "Unknown" - backgroundCompiler.TryGetRecentCheckResultsForFile(filename,options,sourceText,userOpName) + backgroundCompiler.TryGetRecentCheckResultsForFile(filename,options,sourceText, userOpName) - member _.Compile(argv: string[], ?userOpName: string) = - let _userOpName = defaultArg userOpName "Unknown" - async { - let ctok = CompilationThreadToken() - return CompileHelpers.compileFromArgs (ctok, argv, legacyReferenceResolver, None, None) - } - - member _.Compile (ast:ParsedInput list, assemblyName:string, outFile:string, dependencies:string list, ?pdbFile:string, ?executable:bool, ?noframework:bool, ?userOpName: string) = - let _userOpName = defaultArg userOpName "Unknown" - async { - let ctok = CompilationThreadToken() - let noframework = defaultArg noframework false - return CompileHelpers.compileFromAsts (ctok, legacyReferenceResolver, ast, assemblyName, outFile, dependencies, noframework, pdbFile, executable, None, None) - } - - member _.CompileToDynamicAssembly (otherFlags: string[], execute: (TextWriter * TextWriter) option, ?userOpName: string) = - let _userOpName = defaultArg userOpName "Unknown" - async { - let ctok = CompilationThreadToken() + member __.Compile(argv: string[], ?userOpName: string) = + let userOpName = defaultArg userOpName "Unknown" + backgroundCompiler.Reactor.EnqueueAndAwaitOpAsync (userOpName, "Compile", "", fun ctok -> + cancellable { + return CompileHelpers.compileFromArgs (ctok, argv, legacyReferenceResolver, None, None) + }) + + member __.Compile (ast:ParsedInput list, assemblyName:string, outFile:string, dependencies:string list, ?pdbFile:string, ?executable:bool, ?noframework:bool, ?userOpName: string) = + let userOpName = defaultArg userOpName "Unknown" + backgroundCompiler.Reactor.EnqueueAndAwaitOpAsync (userOpName, "Compile", assemblyName, fun ctok -> + cancellable { + let noframework = defaultArg noframework false + return CompileHelpers.compileFromAsts (ctok, legacyReferenceResolver, ast, assemblyName, outFile, dependencies, noframework, pdbFile, executable, None, None) + } + ) + + member __.CompileToDynamicAssembly (otherFlags: string[], execute: (TextWriter * TextWriter) option, ?userOpName: string) = + let userOpName = defaultArg userOpName "Unknown" + backgroundCompiler.Reactor.EnqueueAndAwaitOpAsync (userOpName, "CompileToDynamicAssembly", "", fun ctok -> + cancellable { CompileHelpers.setOutputStreams execute // References used to capture the results of compilation @@ -1131,7 +1153,7 @@ type FSharpChecker(legacyReferenceResolver, // Function to generate and store the results of compilation let debugInfo = otherFlags |> Array.exists (fun arg -> arg = "-g" || arg = "--debug:+" || arg = "/debug:+") - let dynamicAssemblyCreator = Some (CompileHelpers.createDynamicAssembly (debugInfo, tcImportsRef, execute.IsSome, assemblyBuilderRef)) + let dynamicAssemblyCreator = Some (CompileHelpers.createDynamicAssembly (ctok, debugInfo, tcImportsRef, execute.IsSome, assemblyBuilderRef)) // Perform the compilation, given the above capturing function. let errorsAndWarnings, result = CompileHelpers.compileFromArgs (ctok, otherFlags, legacyReferenceResolver, tcImportsCapture, dynamicAssemblyCreator) @@ -1143,12 +1165,13 @@ type FSharpChecker(legacyReferenceResolver, | Some a -> Some (a :> System.Reflection.Assembly) return errorsAndWarnings, result, assemblyOpt - } + } + ) - member _.CompileToDynamicAssembly (ast:ParsedInput list, assemblyName:string, dependencies:string list, execute: (TextWriter * TextWriter) option, ?debug:bool, ?noframework:bool, ?userOpName: string) = - let _userOpName = defaultArg userOpName "Unknown" - async { - let ctok = CompilationThreadToken() + member __.CompileToDynamicAssembly (ast:ParsedInput list, assemblyName:string, dependencies:string list, execute: (TextWriter * TextWriter) option, ?debug:bool, ?noframework:bool, ?userOpName: string) = + let userOpName = defaultArg userOpName "Unknown" + backgroundCompiler.Reactor.EnqueueAndAwaitOpAsync (userOpName, "CompileToDynamicAssembly", assemblyName, fun ctok -> + cancellable { CompileHelpers.setOutputStreams execute // References used to capture the results of compilation @@ -1158,13 +1181,13 @@ type FSharpChecker(legacyReferenceResolver, let debugInfo = defaultArg debug false let noframework = defaultArg noframework false - let location = Path.Combine(FileSystem.GetTempPathShim(),"test"+string(hash assemblyName)) + let location = Path.Combine(Path.GetTempPath(),"test"+string(hash assemblyName)) try Directory.CreateDirectory(location) |> ignore with _ -> () let outFile = Path.Combine(location, assemblyName + ".dll") // Function to generate and store the results of compilation - let dynamicAssemblyCreator = Some (CompileHelpers.createDynamicAssembly (debugInfo, tcImportsRef, execute.IsSome, assemblyBuilderRef)) + let dynamicAssemblyCreator = Some (CompileHelpers.createDynamicAssembly (ctok, debugInfo, tcImportsRef, execute.IsSome, assemblyBuilderRef)) // Perform the compilation, given the above capturing function. let errorsAndWarnings, result = @@ -1177,14 +1200,15 @@ type FSharpChecker(legacyReferenceResolver, | Some a -> Some (a :> System.Reflection.Assembly) return errorsAndWarnings, result, assemblyOpt - } + } + ) /// This function is called when the entire environment is known to have changed for reasons not encoded in the ProjectOptions of any project/compilation. /// For example, the type provider approvals file may have changed. member ic.InvalidateAll() = ic.ClearCaches() - member _.ClearCachesAsync(?userOpName: string) = + member __.ClearCachesAsync(?userOpName: string) = let utok = AnyCallerThread let userOpName = defaultArg userOpName "Unknown" braceMatchCache.Clear(utok) @@ -1193,12 +1217,13 @@ type FSharpChecker(legacyReferenceResolver, member ic.ClearCaches(?userOpName) = ic.ClearCachesAsync(?userOpName=userOpName) |> Async.Start // this cache clearance is not synchronous, it will happen when the background op gets run - member _.CheckMaxMemoryReached() = + member __.CheckMaxMemoryReached() = if not maxMemoryReached && System.GC.GetTotalMemory(false) > int64 maxMB * 1024L * 1024L then Trace.TraceWarning("!!!!!!!! MAX MEMORY REACHED, DOWNSIZING F# COMPILER CACHES !!!!!!!!!!!!!!!") // If the maxMB limit is reached, drastic action is taken // - reduce strong cache sizes to a minimum let userOpName = "MaxMemoryReached" + backgroundCompiler.CompleteAllQueuedOps() maxMemoryReached <- true braceMatchCache.Resize(AnyCallerThread, newKeepStrongly=10) backgroundCompiler.DownsizeCaches(userOpName) |> Async.RunSynchronously @@ -1206,33 +1231,33 @@ type FSharpChecker(legacyReferenceResolver, // This is for unit testing only member ic.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() = + backgroundCompiler.CompleteAllQueuedOps() // flush AsyncOp ic.ClearCachesAsync() |> Async.RunSynchronously System.GC.Collect() System.GC.WaitForPendingFinalizers() - FxResolver.ClearStaticCaches() + backgroundCompiler.CompleteAllQueuedOps() // flush AsyncOp /// This function is called when the configuration is known to have changed for reasons not encoded in the ProjectOptions. /// For example, dependent references may have been deleted or created. - member _.InvalidateConfiguration(options: FSharpProjectOptions, ?userOpName: string) = + member __.InvalidateConfiguration(options: FSharpProjectOptions, ?startBackgroundCompile, ?userOpName: string) = let userOpName = defaultArg userOpName "Unknown" - backgroundCompiler.InvalidateConfiguration(options, userOpName) + backgroundCompiler.InvalidateConfiguration(options, startBackgroundCompile, userOpName) /// Clear the internal cache of the given projects. - member _.ClearCache(options: FSharpProjectOptions seq, ?userOpName: string) = + member __.ClearCache(options: FSharpProjectOptions seq, ?userOpName: string) = let userOpName = defaultArg userOpName "Unknown" backgroundCompiler.ClearCache(options, userOpName) /// This function is called when a project has been cleaned, and thus type providers should be refreshed. - member _.NotifyProjectCleaned(options: FSharpProjectOptions, ?userOpName: string) = + member __.NotifyProjectCleaned(options: FSharpProjectOptions, ?userOpName: string) = let userOpName = defaultArg userOpName "Unknown" backgroundCompiler.NotifyProjectCleaned (options, userOpName) /// Typecheck a source code file, returning a handle to the results of the /// parse including the reconstructed types in the file. - member _.CheckFileInProjectAllowingStaleCachedResults(parseResults:FSharpParseFileResults, filename:string, fileVersion:int, source:string, options:FSharpProjectOptions, ?userOpName: string) = + member __.CheckFileInProjectAllowingStaleCachedResults(parseResults:FSharpParseFileResults, filename:string, fileVersion:int, source:string, options:FSharpProjectOptions, ?userOpName: string) = let userOpName = defaultArg userOpName "Unknown" backgroundCompiler.CheckFileInProjectAllowingStaleCachedResults(parseResults,filename,fileVersion,SourceText.ofString source,options,userOpName) - |> Async.AwaitNodeCode /// Typecheck a source code file, returning a handle to the results of the /// parse including the reconstructed types in the file. @@ -1240,7 +1265,6 @@ type FSharpChecker(legacyReferenceResolver, let userOpName = defaultArg userOpName "Unknown" ic.CheckMaxMemoryReached() backgroundCompiler.CheckFileInProject(parseResults,filename,fileVersion,sourceText,options,userOpName) - |> Async.AwaitNodeCode /// Typecheck a source code file, returning a handle to the results of the /// parse including the reconstructed types in the file. @@ -1248,41 +1272,30 @@ type FSharpChecker(legacyReferenceResolver, let userOpName = defaultArg userOpName "Unknown" ic.CheckMaxMemoryReached() backgroundCompiler.ParseAndCheckFileInProject(filename, fileVersion, sourceText, options, userOpName) - |> Async.AwaitNodeCode member ic.ParseAndCheckProject(options, ?userOpName: string) = let userOpName = defaultArg userOpName "Unknown" ic.CheckMaxMemoryReached() backgroundCompiler.ParseAndCheckProject(options, userOpName) - |> Async.AwaitNodeCode member ic.FindBackgroundReferencesInFile(filename:string, options: FSharpProjectOptions, symbol: FSharpSymbol, ?canInvalidateProject: bool, ?userOpName: string) = let canInvalidateProject = defaultArg canInvalidateProject true let userOpName = defaultArg userOpName "Unknown" ic.CheckMaxMemoryReached() backgroundCompiler.FindReferencesInFile(filename, options, symbol, canInvalidateProject, userOpName) - |> Async.AwaitNodeCode member ic.GetBackgroundSemanticClassificationForFile(filename:string, options: FSharpProjectOptions, ?userOpName) = let userOpName = defaultArg userOpName "Unknown" ic.CheckMaxMemoryReached() backgroundCompiler.GetSemanticClassificationForFile(filename, options, userOpName) - |> Async.AwaitNodeCode /// For a given script file, get the ProjectOptions implied by the #load closure - member _.GetProjectOptionsFromScript(filename, source, ?previewEnabled, ?loadedTimeStamp, ?otherFlags, ?useFsiAuxLib, ?useSdkRefs, ?assumeDotNetFramework, ?sdkDirOverride, ?optionsStamp: int64, ?userOpName: string) = + member __.GetProjectOptionsFromScript(filename, source, ?previewEnabled, ?loadedTimeStamp, ?otherFlags, ?useFsiAuxLib, ?useSdkRefs, ?assumeDotNetFramework, ?extraProjectInfo: obj, ?optionsStamp: int64, ?userOpName: string) = let userOpName = defaultArg userOpName "Unknown" - backgroundCompiler.GetProjectOptionsFromScript(filename, source, previewEnabled, loadedTimeStamp, otherFlags, useFsiAuxLib, useSdkRefs, sdkDirOverride, assumeDotNetFramework, optionsStamp, userOpName) + backgroundCompiler.GetProjectOptionsFromScript(filename, source, previewEnabled, loadedTimeStamp, otherFlags, useFsiAuxLib, useSdkRefs, assumeDotNetFramework, extraProjectInfo, optionsStamp, userOpName) - member _.GetProjectOptionsFromCommandLineArgs(projectFileName, argv, ?loadedTimeStamp, ?isInteractive, ?isEditing) = - let isEditing = defaultArg isEditing false - let isInteractive = defaultArg isInteractive false + member __.GetProjectOptionsFromCommandLineArgs(projectFileName, argv, ?loadedTimeStamp, ?extraProjectInfo: obj) = let loadedTimeStamp = defaultArg loadedTimeStamp DateTime.MaxValue // Not 'now', we don't want to force reloading - let argv = - let define = if isInteractive then "--define:INTERACTIVE" else "--define:COMPILED" - Array.append argv [| define |] - let argv = - if isEditing then Array.append argv [| "--define:EDITING" |] else argv { ProjectFileName = projectFileName ProjectId = None SourceFiles = [| |] // the project file names will be inferred from the ProjectOptions @@ -1293,60 +1306,70 @@ type FSharpChecker(legacyReferenceResolver, LoadTime = loadedTimeStamp UnresolvedReferences = None OriginalLoadReferences=[] + ExtraProjectInfo=extraProjectInfo Stamp = None } - member _.GetParsingOptionsFromCommandLineArgs(sourceFiles, argv, ?isInteractive, ?isEditing) = - let isEditing = defaultArg isEditing false + member __.GetParsingOptionsFromCommandLineArgs(sourceFiles, argv, ?isInteractive) = let isInteractive = defaultArg isInteractive false use errorScope = new ErrorScope() - let tcConfigB = - TcConfigBuilder.CreateNew(legacyReferenceResolver, - defaultFSharpBinariesDir=FSharpCheckerResultsSettings.defaultFSharpBinariesDir, - reduceMemoryUsage=ReduceMemoryFlag.Yes, - implicitIncludeDir="", - isInteractive=isInteractive, - isInvalidationSupported=false, - defaultCopyFSharpCore=CopyFSharpCoreFlag.No, - tryGetMetadataSnapshot=tryGetMetadataSnapshot, - sdkDirOverride=None, - rangeForErrors=range0) - - // These defines are implied by the F# compiler - tcConfigB.conditionalCompilationDefines <- - let define = if isInteractive then "INTERACTIVE" else "COMPILED" - define :: tcConfigB.conditionalCompilationDefines - if isEditing then - tcConfigB.conditionalCompilationDefines <- "EDITING":: tcConfigB.conditionalCompilationDefines + let tcConfigBuilder = TcConfigBuilder.Initial // Apply command-line arguments and collect more source files if they are in the arguments - let sourceFilesNew = ApplyCommandLineArgs(tcConfigB, sourceFiles, argv) - FSharpParsingOptions.FromTcConfigBuilder(tcConfigB, Array.ofList sourceFilesNew, isInteractive), errorScope.Diagnostics + let sourceFilesNew = ApplyCommandLineArgs(tcConfigBuilder, sourceFiles, argv) + FSharpParsingOptions.FromTcConfigBuilder(tcConfigBuilder, Array.ofList sourceFilesNew, isInteractive), errorScope.Diagnostics + + member ic.GetParsingOptionsFromCommandLineArgs(argv, ?isInteractive: bool) = + ic.GetParsingOptionsFromCommandLineArgs([], argv, ?isInteractive=isInteractive) + + /// Begin background parsing the given project. + member __.StartBackgroundCompile(options, ?userOpName) = + let userOpName = defaultArg userOpName "Unknown" + backgroundCompiler.CheckProjectInBackground(options, userOpName) + + /// Begin background parsing the given project. + member ic.CheckProjectInBackground(options, ?userOpName) = + ic.StartBackgroundCompile(options, ?userOpName=userOpName) + + /// Stop the background compile. + member __.StopBackgroundCompile() = + backgroundCompiler.StopBackgroundCompile() + + /// Block until the background compile finishes. + // + // This is for unit testing only + member __.WaitForBackgroundCompile() = backgroundCompiler.WaitForBackgroundCompile() + + // Publish the ReactorOps from the background compiler for internal use + member ic.ReactorOps = backgroundCompiler.ReactorOps + + member __.CurrentQueueLength = backgroundCompiler.CurrentQueueLength + + member __.BeforeBackgroundFileCheck = backgroundCompiler.BeforeBackgroundFileCheck - member ic.GetParsingOptionsFromCommandLineArgs(argv, ?isInteractive: bool, ?isEditing) = - ic.GetParsingOptionsFromCommandLineArgs([], argv, ?isInteractive=isInteractive, ?isEditing=isEditing) + member __.FileParsed = backgroundCompiler.FileParsed - member _.BeforeBackgroundFileCheck = backgroundCompiler.BeforeBackgroundFileCheck + member __.FileChecked = backgroundCompiler.FileChecked - member _.FileParsed = backgroundCompiler.FileParsed + member __.ProjectChecked = backgroundCompiler.ProjectChecked - member _.FileChecked = backgroundCompiler.FileChecked + member __.ImplicitlyStartBackgroundWork with get() = backgroundCompiler.ImplicitlyStartBackgroundWork and set v = backgroundCompiler.ImplicitlyStartBackgroundWork <- v - member _.ProjectChecked = backgroundCompiler.ProjectChecked + member __.PauseBeforeBackgroundWork with get() = Reactor.Singleton.PauseBeforeBackgroundWork and set v = Reactor.Singleton.PauseBeforeBackgroundWork <- v - static member ActualParseFileCount = BackgroundCompiler.ActualParseFileCount + static member GlobalForegroundParseCountStatistic = BackgroundCompiler.GlobalForegroundParseCountStatistic - static member ActualCheckFileCount = BackgroundCompiler.ActualCheckFileCount + static member GlobalForegroundTypeCheckCountStatistic = BackgroundCompiler.GlobalForegroundTypeCheckCountStatistic - member _.MaxMemoryReached = maxMemEvent.Publish + member __.MaxMemoryReached = maxMemEvent.Publish - member _.MaxMemory with get() = maxMB and set v = maxMB <- v + member __.MaxMemory with get() = maxMB and set v = maxMB <- v static member Instance with get() = globalInstance.Force() - member internal _.FrameworkImportsCache = backgroundCompiler.FrameworkImportsCache + member internal __.FrameworkImportsCache = backgroundCompiler.FrameworkImportsCache /// Tokenize a single line, returning token information and a tokenization state represented by an integer - member _.TokenizeLine (line: string, state: FSharpTokenizerLexState) = + member __.TokenizeLine (line: string, state: FSharpTokenizerLexState) = let tokenizer = FSharpSourceTokenizer([], None) let lineTokenizer = tokenizer.CreateLineTokenizer line let mutable state = (None, state) @@ -1366,58 +1389,42 @@ type FSharpChecker(legacyReferenceResolver, yield tokens |] tokens -namespace FSharp.Compiler +type CompilerEnvironment = + static member BinFolderOfDefaultFSharpCompiler(?probePoint) = + FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(probePoint) -open System -open System.IO -open Internal.Utilities -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.CompilerConfig -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Text.Range -open FSharp.Compiler.ErrorLogger - -type CompilerEnvironment() = - /// Source file extensions - static let compilableExtensions = FSharpSigFileSuffixes @ FSharpImplFileSuffixes @ FSharpScriptFileSuffixes - - /// Single file projects extensions - static let singleFileProjectExtensions = FSharpScriptFileSuffixes - - static member BinFolderOfDefaultFSharpCompiler(?probePoint) = - FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(probePoint) - - // Legacy entry point, no longer used by FSharp.Editor - static member DefaultReferencesForOrphanSources assumeDotNetFramework = - let currentDirectory = Directory.GetCurrentDirectory() - let fxResolver = FxResolver(assumeDotNetFramework, currentDirectory, rangeForErrors=range0, useSdkRefs=true, isInteractive=false, sdkDirOverride=None) - let references, _ = fxResolver.GetDefaultReferences (useFsiAuxLib=false) - references +/// Information about the compilation environment +[] +module CompilerEnvironment = + /// These are the names of assemblies that should be referenced for .fs, .ml, .fsi, .mli files that + /// are not associated with a project + let DefaultReferencesForOrphanSources assumeDotNetFramework = DefaultReferencesForScriptsAndOutOfProjectSources assumeDotNetFramework /// Publish compiler-flags parsing logic. Must be fast because its used by the colorizer. - static member GetCompilationDefinesForEditing (parsingOptions: FSharpParsingOptions) = + let GetCompilationDefinesForEditing (parsingOptions: FSharpParsingOptions) = SourceFileImpl.AdditionalDefinesForUseInEditor(parsingOptions.IsInteractive) @ parsingOptions.ConditionalCompilationDefines /// Return true if this is a subcategory of error or warning message that the language service can emit - static member IsCheckerSupportedSubcategory(subcategory:string) = + let IsCheckerSupportedSubcategory(subcategory:string) = // Beware: This code logic is duplicated in DocumentTask.cs in the language service PhasedDiagnostic.IsSubcategoryOfCompile(subcategory) +/// Information about the debugging environment +module DebuggerEnvironment = /// Return the language ID, which is the expression evaluator id that the /// debugger will use. - static member GetDebuggerLanguageID() = + let GetLanguageID() = System.Guid(0xAB4F38C9u, 0xB6E6us, 0x43baus, 0xBEuy, 0x3Buy, 0x58uy, 0x08uy, 0x0Buy, 0x2Cuy, 0xCCuy, 0xE3uy) - static member IsScriptFile (fileName: string) = ParseAndCheckInputs.IsScript fileName - - /// Whether or not this file is compilable - static member IsCompilable file = - let ext = Path.GetExtension file - compilableExtensions |> List.exists(fun e->0 = String.Compare(e, ext, StringComparison.OrdinalIgnoreCase)) - - /// Whether or not this file should be a single-file project - static member MustBeSingleFileProject file = - let ext = Path.GetExtension file - singleFileProjectExtensions |> List.exists(fun e-> 0 = String.Compare(e, ext, StringComparison.OrdinalIgnoreCase)) - +module PrettyNaming = + let IsIdentifierPartCharacter x = FSharp.Compiler.PrettyNaming.IsIdentifierPartCharacter x + let IsLongIdentifierPartCharacter x = FSharp.Compiler.PrettyNaming.IsLongIdentifierPartCharacter x + let IsOperatorName x = FSharp.Compiler.PrettyNaming.IsOperatorName x + let GetLongNameFromString x = FSharp.Compiler.PrettyNaming.SplitNamesForILPath x + let FormatAndOtherOverloadsString remainingOverloads = FSComp.SR.typeInfoOtherOverloads(remainingOverloads) + let QuoteIdentifierIfNeeded id = Lexhelp.Keywords.QuoteIdentifierIfNeeded id + let KeywordNames = Lexhelp.Keywords.keywordNames + +module FSharpFileUtilities = + let isScriptFile (fileName: string) = ParseAndCheckInputs.IsScript fileName \ No newline at end of file diff --git a/src/fsharp/service/service.fsi b/src/fsharp/service/service.fsi old mode 100644 new mode 100755 index 97b6f9f7983..09d6469860f --- a/src/fsharp/service/service.fsi +++ b/src/fsharp/service/service.fsi @@ -2,18 +2,66 @@ /// SourceCodeServices API to the compiler as an incremental service for parsing, /// type checking and intellisense-like environment-reporting. -namespace FSharp.Compiler.CodeAnalysis +namespace FSharp.Compiler.SourceCodeServices open System open System.IO + +open FSharp.Compiler open FSharp.Compiler.AbstractIL.ILBinaryReader -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Symbols -open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Range open FSharp.Compiler.Text -open FSharp.Compiler.Tokenization + +/// Unused in this API +type public UnresolvedReferencesSet + +/// A set of information describing a project or script build configuration. +type public FSharpProjectOptions = + { + // Note that this may not reduce to just the project directory, because there may be two projects in the same directory. + ProjectFileName: string + + /// This is the unique identifier for the project, it is case sensitive. If it's None, will key off of ProjectFileName in our caching. + ProjectId: string option + + /// The files in the project + SourceFiles: string[] + + /// Additional command line argument options for the project. These can include additional files and references. + OtherOptions: string[] + + /// The command line arguments for the other projects referenced by this project, indexed by the + /// exact text used in the "-r:" reference in FSharpProjectOptions. + ReferencedProjects: (string * FSharpProjectOptions)[] + + /// When true, the typechecking environment is known a priori to be incomplete, for + /// example when a .fs file is opened outside of a project. In this case, the number of error + /// messages reported is reduced. + IsIncompleteTypeCheckEnvironment : bool + + /// When true, use the reference resolution rules for scripts rather than the rules for compiler. + UseScriptResolutionRules : bool + + /// Timestamp of project/script load, used to differentiate between different instances of a project load. + /// This ensures that a complete reload of the project or script type checking + /// context occurs on project or script unload/reload. + LoadTime : DateTime + + /// Unused in this API and should be 'None' when used as user-specified input + UnresolvedReferences : UnresolvedReferencesSet option + + /// Unused in this API and should be '[]' when used as user-specified input + OriginalLoadReferences: (range * string * string) list + + /// Extra information passed back on event trigger + ExtraProjectInfo : obj option + + /// An optional stamp to uniquely identify this set of options + /// If two sets of options both have stamps, then they are considered equal + /// if and only if the stamps are equal + Stamp: int64 option + } [] /// Used to parse and check F# source code. @@ -25,7 +73,7 @@ type public FSharpChecker = /// The optional size of the project checking cache. /// Keep the checked contents of projects. /// If false, do not keep full intermediate checking results from background checking suitable for returning from GetBackgroundCheckResultsForFileInProject. This reduces memory usage. - /// An optional resolver for legacy MSBuild references + /// An optional resolver for non-file references, for legacy purposes /// An optional resolver to access the contents of .NET binaries in a memory-efficient way /// Indicate whether name suggestion should be enabled /// Indicate whether all symbol uses should be kept in background checking @@ -33,7 +81,7 @@ type public FSharpChecker = /// Indicates whether to perform partial type checking. Cannot be set to true if keepAssmeblyContents is true. If set to true, can cause duplicate type-checks when richer information on a file is needed, but can skip background type-checking entirely on implementation files with signature files. static member Create: ?projectCacheSize: int * ?keepAssemblyContents: bool * ?keepAllBackgroundResolutions: bool * - ?legacyReferenceResolver: LegacyReferenceResolver * ?tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot * + ?legacyReferenceResolver: ReferenceResolver.Resolver * ?tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot * ?suggestNamesForErrors: bool * ?keepAllBackgroundSymbolUses: bool * ?enableBackgroundItemKeyStoreAndSemanticClassification: bool * ?enablePartialTypeChecking: bool -> FSharpChecker @@ -67,9 +115,18 @@ type public FSharpChecker = /// The path for the file. The file name is used as a module name for implicit top level modules (e.g. in scripts). /// The source to be parsed. /// Parsing options for the project or script. - /// Store the parse in a size-limited cache assocaited with the FSharpChecker. Default: true /// An optional string used for tracing compiler operations associated with this request. - member ParseFile: filename: string * sourceText: ISourceText * options: FSharpParsingOptions * ?cache: bool * ?userOpName: string -> Async + member ParseFile: filename: string * sourceText: ISourceText * options: FSharpParsingOptions * ?userOpName: string -> Async + + /// + /// Parses a source code for a file. Returns an AST that can be traversed for various features. + /// + /// + /// The path for the file. The file name is also as a module name for implicit top level modules (e.g. in scripts). + /// The source to be parsed. + /// Parsing options for the project or script. + /// An optional string used for tracing compiler operations associated with this request. + member ParseFileNoCache: filename: string * sourceText: ISourceText * options: FSharpParsingOptions * ?userOpName: string -> Async /// /// Parses a source code for a file. Returns an AST that can be traversed for various features. @@ -78,10 +135,9 @@ type public FSharpChecker = /// The path for the file. The file name is also as a module name for implicit top level modules (e.g. in scripts). /// The source to be parsed. /// Parsing options for the project or script. - /// Store the parse in a size-limited cache assocaited with the FSharpChecker. Default: true /// An optional string used for tracing compiler operations associated with this request. [] - member ParseFileInProject: filename: string * source: string * options: FSharpProjectOptions * ?cache: bool * ?userOpName: string -> Async + member ParseFileInProject: filename: string * source: string * options: FSharpProjectOptions * ?userOpName: string -> Async /// /// Check a source code file, returning a handle to the results of the parse including @@ -101,7 +157,7 @@ type public FSharpChecker = /// The options for the project or script. /// An optional string used for tracing compiler operations associated with this request. [] - member CheckFileInProjectAllowingStaleCachedResults: parseResults: FSharpParseFileResults * filename: string * fileVersion: int * source: string * options: FSharpProjectOptions * ?userOpName: string -> Async + member CheckFileInProjectAllowingStaleCachedResults : parseResults: FSharpParseFileResults * filename: string * fileVersion: int * source: string * options: FSharpProjectOptions * ?userOpName: string -> Async /// /// @@ -121,7 +177,7 @@ type public FSharpChecker = /// The full source for the file. /// The options for the project or script. /// An optional string used for tracing compiler operations associated with this request. - member CheckFileInProject: parseResults: FSharpParseFileResults * filename: string * fileVersion: int * sourceText: ISourceText * options: FSharpProjectOptions * ?userOpName: string -> Async + member CheckFileInProject : parseResults: FSharpParseFileResults * filename: string * fileVersion: int * sourceText: ISourceText * options: FSharpProjectOptions * ?userOpName: string -> Async /// /// @@ -140,7 +196,7 @@ type public FSharpChecker = /// The source for the file. /// The options for the project or script. /// An optional string used for tracing compiler operations associated with this request. - member ParseAndCheckFileInProject: filename: string * fileVersion: int * sourceText: ISourceText * options: FSharpProjectOptions * ?userOpName: string -> Async + member ParseAndCheckFileInProject : filename: string * fileVersion: int * sourceText: ISourceText * options: FSharpProjectOptions * ?userOpName: string -> Async /// /// Parse and typecheck all files in a project. @@ -150,7 +206,7 @@ type public FSharpChecker = /// /// The options for the project or script. /// An optional string used for tracing compiler operations associated with this request. - member ParseAndCheckProject: options: FSharpProjectOptions * ?userOpName: string -> Async + member ParseAndCheckProject : options: FSharpProjectOptions * ?userOpName: string -> Async /// /// For a given script file, get the FSharpProjectOptions implied by the #load closure. @@ -167,39 +223,26 @@ type public FSharpChecker = /// Add a default reference to the FSharp.Compiler.Interactive.Settings library. /// Use the implicit references from the .NET SDK. /// Set up compilation and analysis for .NET Framework scripts. - /// Override the .NET SDK used for default references. + /// An extra data item added to the returned FSharpProjectOptions. /// An optional unique stamp for the options. /// An optional string used for tracing compiler operations associated with this request. member GetProjectOptionsFromScript: - filename: string * - source: ISourceText * - ?previewEnabled:bool * - ?loadedTimeStamp: DateTime * - ?otherFlags: string[] * - ?useFsiAuxLib: bool * - ?useSdkRefs: bool * - ?assumeDotNetFramework: bool * - ?sdkDirOverride: string * - ?optionsStamp: int64 * - ?userOpName: string - -> Async - - /// Get the FSharpProjectOptions implied by a set of command line arguments. + filename: string * source: ISourceText * ?previewEnabled:bool * ?loadedTimeStamp: DateTime * + ?otherFlags: string[] * ?useFsiAuxLib: bool * ?useSdkRefs: bool * ?assumeDotNetFramework: bool * + ?extraProjectInfo: obj * ?optionsStamp: int64 * ?userOpName: string + -> Async + + /// + /// Get the FSharpProjectOptions implied by a set of command line arguments. + /// /// /// Used to differentiate between projects and for the base directory of the project. /// The command line arguments for the project build. /// Indicates when the script was loaded into the editing environment, - /// Indicates that compilation should assume the EDITING define and related settings - /// Indicates that compilation should assume the INTERACTIVE define and related settings /// so that an 'unload' and 'reload' action will cause the script to be considered as a new project, /// so that references are re-resolved. - member GetProjectOptionsFromCommandLineArgs: - projectFileName: string * - argv: string[] * - ?loadedTimeStamp: DateTime * - ?isInteractive: bool * - ?isEditing: bool - -> FSharpProjectOptions + /// An extra data item added to the returned FSharpProjectOptions. + member GetProjectOptionsFromCommandLineArgs : projectFileName: string * argv: string[] * ?loadedTimeStamp: DateTime * ?extraProjectInfo: obj -> FSharpProjectOptions /// /// Get the FSharpParsingOptions implied by a set of command line arguments and list of source files. @@ -208,13 +251,7 @@ type public FSharpChecker = /// Initial source files list. Additional files may be added during argv evaluation. /// The command line arguments for the project build. /// Indicates that parsing should assume the INTERACTIVE define and related settings - /// Indicates that compilation should assume the EDITING define and related settings - member GetParsingOptionsFromCommandLineArgs: - sourceFiles: string list * - argv: string list * - ?isInteractive: bool * - ?isEditing: bool - -> FSharpParsingOptions * FSharpDiagnostic list + member GetParsingOptionsFromCommandLineArgs: sourceFiles: string list * argv: string list * ?isInteractive: bool -> FSharpParsingOptions * FSharpErrorInfo list /// /// Get the FSharpParsingOptions implied by a set of command line arguments. @@ -222,21 +259,14 @@ type public FSharpChecker = /// /// The command line arguments for the project build. /// Indicates that parsing should assume the INTERACTIVE define and related settings - /// Indicates that compilation should assume the EDITING define and related settings - member GetParsingOptionsFromCommandLineArgs: - argv: string list * - ?isInteractive: bool * - ?isEditing: bool - -> FSharpParsingOptions * FSharpDiagnostic list + member GetParsingOptionsFromCommandLineArgs: argv: string list * ?isInteractive: bool -> FSharpParsingOptions * FSharpErrorInfo list /// /// Get the FSharpParsingOptions implied by a FSharpProjectOptions. /// /// /// The overall options. - member GetParsingOptionsFromProjectOptions: - options: FSharpProjectOptions - -> FSharpParsingOptions * FSharpDiagnostic list + member GetParsingOptionsFromProjectOptions: options: FSharpProjectOptions -> FSharpParsingOptions * FSharpErrorInfo list /// /// Like ParseFile, but uses results from the background builder. @@ -246,7 +276,7 @@ type public FSharpChecker = /// The filename for the file. /// The options for the project or script, used to determine active --define conditionals and other options relevant to parsing. /// An optional string used for tracing compiler operations associated with this request. - member GetBackgroundParseResultsForFileInProject: filename: string * options: FSharpProjectOptions * ?userOpName: string -> Async + member GetBackgroundParseResultsForFileInProject : filename : string * options : FSharpProjectOptions * ?userOpName: string -> Async /// /// Like CheckFileInProject, but uses the existing results from the background builder. @@ -257,7 +287,7 @@ type public FSharpChecker = /// The filename for the file. /// The options for the project or script, used to determine active --define conditionals and other options relevant to parsing. /// An optional string used for tracing compiler operations associated with this request. - member GetBackgroundCheckResultsForFileInProject: filename: string * options: FSharpProjectOptions * ?userOpName: string -> Async + member GetBackgroundCheckResultsForFileInProject : filename : string * options : FSharpProjectOptions * ?userOpName: string -> Async /// /// Optimized find references for a given symbol in a file of project. @@ -270,7 +300,7 @@ type public FSharpChecker = /// The symbol to find all uses in the file. /// Default: true. If true, this call can invalidate the current state of project if the options have changed. If false, the current state of the project will be used. /// An optional string used for tracing compiler operations associated with this request. - member FindBackgroundReferencesInFile: filename: string * options: FSharpProjectOptions * symbol: FSharpSymbol * ?canInvalidateProject: bool * ?userOpName: string -> Async + member FindBackgroundReferencesInFile : filename : string * options : FSharpProjectOptions * symbol: FSharpSymbol * ?canInvalidateProject: bool * ?userOpName: string -> Async /// /// Get semantic classification for a file. @@ -281,7 +311,7 @@ type public FSharpChecker = /// The filename for the file. /// The options for the project or script, used to determine active --define conditionals and other options relevant to parsing. /// An optional string used for tracing compiler operations associated with this request. - member GetBackgroundSemanticClassificationForFile : filename : string * options : FSharpProjectOptions * ?userOpName: string -> Async + member GetBackgroundSemanticClassificationForFile : filename : string * options : FSharpProjectOptions * ?userOpName: string -> Async /// /// Compile using the given flags. Source files names are resolved via the FileSystem API. @@ -291,7 +321,7 @@ type public FSharpChecker = /// /// The command line arguments for the project build. /// An optional string used for tracing compiler operations associated with this request. - member Compile: argv:string[] * ?userOpName: string -> Async + member Compile: argv:string[] * ?userOpName: string -> Async /// /// TypeCheck and compile provided AST @@ -305,7 +335,7 @@ type public FSharpChecker = /// Indicates if an executable is being produced. /// Enables the /noframework flag. /// An optional string used for tracing compiler operations associated with this request. - member Compile: ast:ParsedInput list * assemblyName:string * outFile:string * dependencies:string list * ?pdbFile:string * ?executable:bool * ?noframework:bool * ?userOpName: string -> Async + member Compile: ast:ParsedInput list * assemblyName:string * outFile:string * dependencies:string list * ?pdbFile:string * ?executable:bool * ?noframework:bool * ?userOpName: string -> Async /// /// Compiles to a dynamic assembly using the given flags. @@ -323,7 +353,7 @@ type public FSharpChecker = /// Other flags for compilation. /// An optional pair of output streams, enabling execution of the result. /// An optional string used for tracing compiler operations associated with this request. - member CompileToDynamicAssembly: otherFlags:string [] * execute:(TextWriter * TextWriter) option * ?userOpName: string -> Async + member CompileToDynamicAssembly: otherFlags:string [] * execute:(TextWriter * TextWriter) option * ?userOpName: string -> Async /// /// TypeCheck and compile provided AST @@ -336,7 +366,7 @@ type public FSharpChecker = /// Enabled debug symbols /// Enables the /noframework flag. /// An optional string used for tracing compiler operations associated with this request. - member CompileToDynamicAssembly: ast:ParsedInput list * assemblyName:string * dependencies:string list * execute:(TextWriter * TextWriter) option * ?debug:bool * ?noframework:bool * ?userOpName: string -> Async + member CompileToDynamicAssembly: ast:ParsedInput list * assemblyName:string * dependencies:string list * execute:(TextWriter * TextWriter) option * ?debug:bool * ?noframework:bool * ?userOpName: string -> Async /// /// Try to get type check results for a file. This looks up the results of recent type checks of the @@ -349,32 +379,46 @@ type public FSharpChecker = /// The options for the project or script, used to determine active --define conditionals and other options relevant to parsing. /// Optionally, specify source that must match the previous parse precisely. /// An optional string used for tracing compiler operations associated with this request. - member TryGetRecentCheckResultsForFile: filename: string * options:FSharpProjectOptions * ?sourceText: ISourceText * ?userOpName: string -> (FSharpParseFileResults * FSharpCheckFileResults * (* hash *)int64) option + member TryGetRecentCheckResultsForFile : filename: string * options:FSharpProjectOptions * ?sourceText: ISourceText * ?userOpName: string -> (FSharpParseFileResults * FSharpCheckFileResults * (*version*)int) option /// This function is called when the entire environment is known to have changed for reasons not encoded in the ProjectOptions of any project/compilation. - member InvalidateAll: unit -> unit + member InvalidateAll : unit -> unit - /// - /// This function is called when the configuration is known to have changed for reasons not encoded in the ProjectOptions. - /// For example, dependent references may have been deleted or created. - /// - /// The options for the project or script, used to determine active --define conditionals and other options relevant to parsing. + /// This function is called when the configuration is known to have changed for reasons not encoded in the ProjectOptions. + /// For example, dependent references may have been deleted or created. + /// Start a background compile of the project if a project with the same name has already been seen before. /// An optional string used for tracing compiler operations associated with this request. - member InvalidateConfiguration: options: FSharpProjectOptions * ?userOpName: string -> unit + member InvalidateConfiguration: options: FSharpProjectOptions * ?startBackgroundCompile: bool * ?userOpName: string -> unit - /// Clear the internal cache of the given projects. + /// Clear the internal cache of the given projects. /// The given project options. /// An optional string used for tracing compiler operations associated with this request. member ClearCache: options: FSharpProjectOptions seq * ?userOpName: string -> unit + /// Set the project to be checked in the background. Overrides any previous call to CheckProjectInBackground + member CheckProjectInBackground: options: FSharpProjectOptions * ?userOpName: string -> unit + + /// Stop the background compile. + //[] + member StopBackgroundCompile : unit -> unit + + /// Block until the background compile finishes. + //[] + member WaitForBackgroundCompile : unit -> unit + /// Report a statistic for testability - static member ActualParseFileCount: int + static member GlobalForegroundParseCountStatistic : int /// Report a statistic for testability - static member ActualCheckFileCount: int + static member GlobalForegroundTypeCheckCountStatistic : int /// Flush all caches and garbage collect - member ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients: unit -> unit + member ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients : unit -> unit + + /// Current queue length of the service, for debug purposes. + /// In addition, a single async operation or a step of a background build + /// may be in progress - such an operation is not counted in the queue length. + member CurrentQueueLength : int /// /// This function is called when a project has been cleaned/rebuilt, and thus any live type providers should be refreshed. @@ -382,43 +426,52 @@ type public FSharpChecker = /// /// The options describing the project that has been cleaned. /// An optional string used for tracing compiler operations associated with this request. - [] member NotifyProjectCleaned: options: FSharpProjectOptions * ?userOpName: string -> Async - /// /// Notify the host that the logical type checking context for a file has now been updated internally /// and that the file has become eligible to be re-typechecked for errors. + /// /// The event will be raised on a background thread. - /// - member BeforeBackgroundFileCheck: IEvent + member BeforeBackgroundFileCheck : IEvent /// Raised after a parse of a file in the background analysis. /// /// The event will be raised on a background thread. - member FileParsed: IEvent + member FileParsed : IEvent /// Raised after a check of a file in the background analysis. /// /// The event will be raised on a background thread. - member FileChecked: IEvent + member FileChecked : IEvent /// Raised after the maxMB memory threshold limit is reached - member MaxMemoryReached: IEvent + member MaxMemoryReached : IEvent - /// - /// A maximum number of megabytes of allocated memory. If the figure reported by System.GC.GetTotalMemory(false) goes over this limit, the FSharpChecker object will attempt to free memory and reduce cache sizes to a minimum. - /// - member MaxMemory: int with get, set + /// A maximum number of megabytes of allocated memory. If the figure reported by System.GC.GetTotalMemory(false) goes over this limit, the FSharpChecker object will attempt to free memory and reduce cache sizes to a minimum. + member MaxMemory : int with get, set + + /// Get or set a flag which controls if background work is started implicitly. + /// + /// If true, calls to CheckFileInProject implicitly start a background check of that project, replacing + /// any other background checks in progress. This is useful in IDE applications with spare CPU cycles as + /// it prepares the project analysis results for use. The default is 'true'. + member ImplicitlyStartBackgroundWork: bool with get, set + + /// Get or set the pause time in milliseconds before background work is started. + member PauseBeforeBackgroundWork: int with get, set /// Notify the host that a project has been fully checked in the background (using file contents provided by the file system API) /// /// The event may be raised on a background thread. - member ProjectChecked: IEvent + member ProjectChecked : IEvent + + // For internal use only + member internal ReactorOps : IReactorOperations [] - static member Instance: FSharpChecker - member internal FrameworkImportsCache: FrameworkImportsCache - member internal ReferenceResolver: LegacyReferenceResolver + static member Instance : FSharpChecker + member internal FrameworkImportsCache : FrameworkImportsCache + member internal ReferenceResolver : ReferenceResolver.Resolver /// Tokenize a single line, returning token information and a tokenization state represented by an integer member TokenizeLine: line:string * state:FSharpTokenizerLexState-> FSharpTokenInfo [] * FSharpTokenizerLexState @@ -426,36 +479,46 @@ type public FSharpChecker = /// Tokenize an entire file, line by line member TokenizeFile: source:string -> FSharpTokenInfo [] [] -namespace FSharp.Compiler - -open System -open FSharp.Compiler.CodeAnalysis - /// Information about the compilation environment [] type public CompilerEnvironment = /// The default location of FSharp.Core.dll and fsc.exe based on the version of fsc.exe that is running - static member BinFolderOfDefaultFSharpCompiler: ?probePoint: string -> string option + static member BinFolderOfDefaultFSharpCompiler : ?probePoint: string -> string option +/// Information about the compilation environment +[] +module public CompilerEnvironment = /// These are the names of assemblies that should be referenced for .fs or .fsi files that /// are not associated with a project. - static member DefaultReferencesForOrphanSources: assumeDotNetFramework: bool -> string list - + val DefaultReferencesForOrphanSources: assumeDotNetFramework: bool -> string list /// Return the compilation defines that should be used when editing the given file. - static member GetCompilationDefinesForEditing: parsingOptions: FSharpParsingOptions -> string list - + val GetCompilationDefinesForEditing: parsingOptions: FSharpParsingOptions -> string list /// Return true if this is a subcategory of error or warning message that the language service can emit - static member IsCheckerSupportedSubcategory: string -> bool + val IsCheckerSupportedSubcategory: string -> bool + +/// Information about the debugging environment +module public DebuggerEnvironment = + /// Return the language ID, which is the expression evaluator id that the + /// debugger will use. + val GetLanguageID : unit -> Guid + + +/// A set of helpers related to naming of identifiers +module public PrettyNaming = - /// Return the language ID, which is the expression evaluator id that the debugger will use. - static member GetDebuggerLanguageID: unit -> Guid + val IsIdentifierPartCharacter : char -> bool + val IsLongIdentifierPartCharacter : char -> bool + val IsOperatorName : string -> bool + val GetLongNameFromString : string -> string list - /// A helpers for dealing with F# files. - static member IsScriptFile: string -> bool + val FormatAndOtherOverloadsString : int -> string - /// Whether or not this file is compilable - static member IsCompilable: string -> bool + /// A utility to help determine if an identifier needs to be quoted + val QuoteIdentifierIfNeeded : string -> string - /// Whether or not this file should be a single-file project - static member MustBeSingleFileProject: string -> bool + /// All the keywords in the F# language + val KeywordNames : string list +/// A set of helpers for dealing with F# files. +module FSharpFileUtilities = + val isScriptFile : string -> bool \ No newline at end of file diff --git a/src/fsharp/symbols/Exprs.fs b/src/fsharp/symbols/Exprs.fs index c1b456e0948..8a44e51d379 100644 --- a/src/fsharp/symbols/Exprs.fs +++ b/src/fsharp/symbols/Exprs.fs @@ -1,15 +1,16 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.Symbols +namespace FSharp.Compiler.SourceCodeServices open FSharp.Compiler -open Internal.Utilities.Library +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.ErrorLogger +open FSharp.Compiler.Lib open FSharp.Compiler.Infos open FSharp.Compiler.QuotationTranslator -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps @@ -77,7 +78,7 @@ module ExprTranslationImpl = member env.BindCurriedVals vsl = (env, vsl) ||> List.fold (fun env vs -> env.BindVals vs) - exception IgnoringPartOfQuotedTermWarning of string * range + exception IgnoringPartOfQuotedTermWarning of string * Range.range let wfail (msg, m: range) = failwith (msg + sprintf " at %s" (m.ToString())) @@ -109,7 +110,7 @@ type E = | UnionCaseSet of FSharpExpr * FSharpType * FSharpUnionCase * FSharpField * FSharpExpr | UnionCaseTag of FSharpExpr * FSharpType | UnionCaseTest of FSharpExpr * FSharpType * FSharpUnionCase - | TraitCall of FSharpType list * string * SynMemberFlags * FSharpType list * FSharpType list * FSharpExpr list + | TraitCall of FSharpType list * string * MemberFlags * FSharpType list * FSharpType list * FSharpExpr list | NewTuple of FSharpType * FSharpExpr list | TupleGet of FSharpType * int * FSharpExpr | Coerce of FSharpType * FSharpExpr @@ -134,10 +135,10 @@ type E = /// Used to represent the information at an object expression member and [] FSharpObjectExprOverride(sgn: FSharpAbstractSignature, gps: FSharpGenericParameter list, args: FSharpMemberOrFunctionOrValue list list, body: FSharpExpr) = - member _.Signature = sgn - member _.GenericParameters = gps - member _.CurriedParameterGroups = args - member _.Body = body + member __.Signature = sgn + member __.GenericParameters = gps + member __.CurriedParameterGroups = args + member __.Body = body /// The type of expressions provided through the compiler API. and [] FSharpExpr (cenv, f: (unit -> FSharpExpr) option, e: E, m: range, ty) = @@ -725,14 +726,12 @@ module FSharpExprConvert = let elemTy = tyOfExpr cenv.g arg let nullVal = mkNull m elemTy let op = mkCallNotEqualsOperator cenv.g m elemTy arg nullVal - let env = { env with suppressWitnesses=true } ConvExprPrim cenv env op | TOp.ILAsm ([ I_ldlen; AI_conv DT_I4 ], _), _, [arr] -> let arrayTy = tyOfExpr cenv.g arr let elemTy = destArrayTy cenv.g arrayTy let op = mkCallArrayLength cenv.g m elemTy arr - let env = { env with suppressWitnesses=true } ConvExprPrim cenv env op | TOp.ILAsm ([ I_newarr (ILArrayShape [(Some 0, None)], _)], _), [elemTy], xa -> @@ -779,8 +778,8 @@ module FSharpExprConvert = | TOp.ILAsm ([ ILConvertOp convertOp ], [TType_app (tcref,_)]), _, [arg] -> let ty = tyOfExpr cenv.g arg let op = - if tyconRefEq cenv.g tcref cenv.g.char_tcr then - mkCallToCharOperator cenv.g m ty arg + if tyconRefEq cenv.g tcref cenv.g.char_tcr + then mkCallToCharOperator cenv.g m ty arg else convertOp cenv.g m ty arg ConvExprPrim cenv env op @@ -1277,10 +1276,8 @@ module FSharpExprConvert = E.IfThenElse (E.TypeTest (tyR, eR) |> Mk cenv m cenv.g.bool_ty, acc, ConvDecisionTree cenv env dtreeRetTy dtree m) | _ -> let ty = tyOfExpr cenv.g e1 - let eqR = - let eq = mkCallEqualsOperator cenv.g m ty e1 (Expr.Const (Const.Zero, m, ty)) - let env = { env with suppressWitnesses = true } - ConvExpr cenv env eq + let eq = mkCallEqualsOperator cenv.g m ty e1 (Expr.Const (Const.Zero, m, ty)) + let eqR = ConvExpr cenv env eq E.IfThenElse (eqR, ConvDecisionTree cenv env dtreeRetTy dtree m, acc) | DecisionTreeTest.IsInst (_srcty, tgty) -> let e1R = ConvExpr cenv env e1 @@ -1314,13 +1311,13 @@ type FSharpAssemblyContents(cenv: SymbolEnv, mimpls: TypedImplFile list) = new (tcGlobals, thisCcu, thisCcuType, tcImports, mimpls) = FSharpAssemblyContents(SymbolEnv(tcGlobals, thisCcu, thisCcuType, tcImports), mimpls) - member _.ImplementationFiles = + member __.ImplementationFiles = [ for mimpl in mimpls -> FSharpImplementationFileContents(cenv, mimpl)] and FSharpImplementationFileDeclaration = - | Entity of entity: FSharpEntity * declarations: FSharpImplementationFileDeclaration list - | MemberOrFunctionOrValue of value: FSharpMemberOrFunctionOrValue * curriedArgs: FSharpMemberOrFunctionOrValue list list * body: FSharpExpr - | InitAction of action: FSharpExpr + | Entity of FSharpEntity * FSharpImplementationFileDeclaration list + | MemberOrFunctionOrValue of FSharpMemberOrFunctionOrValue * FSharpMemberOrFunctionOrValue list list * FSharpExpr + | InitAction of FSharpExpr and FSharpImplementationFileContents(cenv, mimpl) = let (TImplFile (qname, _pragmas, ModuleOrNamespaceExprWithSig(_, mdef, _), hasExplicitEntryPoint, isScript, _anonRecdTypes)) = mimpl @@ -1360,105 +1357,59 @@ and FSharpImplementationFileContents(cenv, mimpl) = | TMDefs mdefs -> [ for mdef in mdefs do yield! getDecls mdef ] - member _.QualifiedName = qname.Text - member _.FileName = qname.Range.FileName - member _.Declarations = getDecls mdef - member _.HasExplicitEntryPoint = hasExplicitEntryPoint - member _.IsScript = isScript + member __.QualifiedName = qname.Text + member __.FileName = qname.Range.FileName + member __.Declarations = getDecls mdef + member __.HasExplicitEntryPoint = hasExplicitEntryPoint + member __.IsScript = isScript -module FSharpExprPatterns = +module BasicPatterns = let (|Value|_|) (e: FSharpExpr) = match e.E with E.Value v -> Some v | _ -> None - let (|Const|_|) (e: FSharpExpr) = match e.E with E.Const (v, ty) -> Some (v, ty) | _ -> None - let (|TypeLambda|_|) (e: FSharpExpr) = match e.E with E.TypeLambda (v, e) -> Some (v, e) | _ -> None - let (|Lambda|_|) (e: FSharpExpr) = match e.E with E.Lambda (v, e) -> Some (v, e) | _ -> None - let (|Application|_|) (e: FSharpExpr) = match e.E with E.Application (f, tys, e) -> Some (f, tys, e) | _ -> None - let (|IfThenElse|_|) (e: FSharpExpr) = match e.E with E.IfThenElse (e1, e2, e3) -> Some (e1, e2, e3) | _ -> None - let (|Let|_|) (e: FSharpExpr) = match e.E with E.Let ((v, e), b) -> Some ((v, e), b) | _ -> None - let (|LetRec|_|) (e: FSharpExpr) = match e.E with E.LetRec (ves, b) -> Some (ves, b) | _ -> None - let (|NewRecord|_|) (e: FSharpExpr) = match e.E with E.NewRecord (ty, es) -> Some (ty, es) | _ -> None - let (|NewAnonRecord|_|) (e: FSharpExpr) = match e.E with E.NewAnonRecord (ty, es) -> Some (ty, es) | _ -> None - let (|NewUnionCase|_|) (e: FSharpExpr) = match e.E with E.NewUnionCase (e, tys, es) -> Some (e, tys, es) | _ -> None - let (|NewTuple|_|) (e: FSharpExpr) = match e.E with E.NewTuple (ty, es) -> Some (ty, es) | _ -> None - let (|TupleGet|_|) (e: FSharpExpr) = match e.E with E.TupleGet (ty, n, es) -> Some (ty, n, es) | _ -> None - let (|Call|_|) (e: FSharpExpr) = match e.E with E.Call (a, b, c, d, _e, f) -> Some (a, b, c, d, f) | _ -> None - let (|CallWithWitnesses|_|) (e: FSharpExpr) = match e.E with E.Call (a, b, c, d, e, f) -> Some (a, b, c, d, e, f) | _ -> None - let (|NewObject|_|) (e: FSharpExpr) = match e.E with E.NewObject (a, b, c) -> Some (a, b, c) | _ -> None - let (|FSharpFieldGet|_|) (e: FSharpExpr) = match e.E with E.FSharpFieldGet (a, b, c) -> Some (a, b, c) | _ -> None - let (|AnonRecordGet|_|) (e: FSharpExpr) = match e.E with E.AnonRecordGet (a, b, c) -> Some (a, b, c) | _ -> None - let (|FSharpFieldSet|_|) (e: FSharpExpr) = match e.E with E.FSharpFieldSet (a, b, c, d) -> Some (a, b, c, d) | _ -> None - let (|UnionCaseGet|_|) (e: FSharpExpr) = match e.E with E.UnionCaseGet (a, b, c, d) -> Some (a, b, c, d) | _ -> None - let (|UnionCaseTag|_|) (e: FSharpExpr) = match e.E with E.UnionCaseTag (a, b) -> Some (a, b) | _ -> None - let (|UnionCaseTest|_|) (e: FSharpExpr) = match e.E with E.UnionCaseTest (a, b, c) -> Some (a, b, c) | _ -> None - let (|NewArray|_|) (e: FSharpExpr) = match e.E with E.NewArray (a, b) -> Some (a, b) | _ -> None - let (|Coerce|_|) (e: FSharpExpr) = match e.E with E.Coerce (a, b) -> Some (a, b) | _ -> None - let (|Quote|_|) (e: FSharpExpr) = match e.E with E.Quote a -> Some a | _ -> None - let (|TypeTest|_|) (e: FSharpExpr) = match e.E with E.TypeTest (a, b) -> Some (a, b) | _ -> None - let (|Sequential|_|) (e: FSharpExpr) = match e.E with E.Sequential (a, b) -> Some (a, b) | _ -> None - let (|FastIntegerForLoop|_|) (e: FSharpExpr) = match e.E with E.FastIntegerForLoop (a, b, c, d) -> Some (a, b, c, d) | _ -> None - let (|WhileLoop|_|) (e: FSharpExpr) = match e.E with E.WhileLoop (a, b) -> Some (a, b) | _ -> None - let (|TryFinally|_|) (e: FSharpExpr) = match e.E with E.TryFinally (a, b) -> Some (a, b) | _ -> None - let (|TryWith|_|) (e: FSharpExpr) = match e.E with E.TryWith (a, b, c, d, e) -> Some (a, b, c, d, e) | _ -> None - let (|NewDelegate|_|) (e: FSharpExpr) = match e.E with E.NewDelegate (ty, e) -> Some (ty, e) | _ -> None - let (|DefaultValue|_|) (e: FSharpExpr) = match e.E with E.DefaultValue ty -> Some ty | _ -> None - let (|AddressSet|_|) (e: FSharpExpr) = match e.E with E.AddressSet (a, b) -> Some (a, b) | _ -> None - let (|ValueSet|_|) (e: FSharpExpr) = match e.E with E.ValueSet (a, b) -> Some (a, b) | _ -> None - let (|AddressOf|_|) (e: FSharpExpr) = match e.E with E.AddressOf a -> Some a | _ -> None - let (|ThisValue|_|) (e: FSharpExpr) = match e.E with E.ThisValue a -> Some a | _ -> None - let (|BaseValue|_|) (e: FSharpExpr) = match e.E with E.BaseValue a -> Some a | _ -> None - let (|ILAsm|_|) (e: FSharpExpr) = match e.E with E.ILAsm (a, b, c) -> Some (a, b, c) | _ -> None - let (|ILFieldGet|_|) (e: FSharpExpr) = match e.E with E.ILFieldGet (a, b, c) -> Some (a, b, c) | _ -> None - let (|ILFieldSet|_|) (e: FSharpExpr) = match e.E with E.ILFieldSet (a, b, c, d) -> Some (a, b, c, d) | _ -> None - let (|ObjectExpr|_|) (e: FSharpExpr) = match e.E with E.ObjectExpr (a, b, c, d) -> Some (a, b, c, d) | _ -> None - let (|DecisionTree|_|) (e: FSharpExpr) = match e.E with E.DecisionTree (a, b) -> Some (a, b) | _ -> None - let (|DecisionTreeSuccess|_|) (e: FSharpExpr) = match e.E with E.DecisionTreeSuccess (a, b) -> Some (a, b) | _ -> None - let (|UnionCaseSet|_|) (e: FSharpExpr) = match e.E with E.UnionCaseSet (a, b, c, d, e) -> Some (a, b, c, d, e) | _ -> None - let (|TraitCall|_|) (e: FSharpExpr) = match e.E with E.TraitCall (a, b, c, d, e, f) -> Some (a, b, c, d, e, f) | _ -> None - let (|WitnessArg|_|) (e: FSharpExpr) = match e.E with E.WitnessArg n -> Some n | _ -> None diff --git a/src/fsharp/symbols/Exprs.fsi b/src/fsharp/symbols/Exprs.fsi index 30e1ecad8d9..c585ab77c4b 100644 --- a/src/fsharp/symbols/Exprs.fsi +++ b/src/fsharp/symbols/Exprs.fsi @@ -1,24 +1,24 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace rec FSharp.Compiler.Symbols +namespace rec FSharp.Compiler.SourceCodeServices open FSharp.Compiler.CompilerImports -open FSharp.Compiler.Syntax +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text open FSharp.Compiler.TypedTree /// Represents the definitional contents of an assembly, as seen by the F# language type public FSharpAssemblyContents = - internal new: tcGlobals: TcGlobals * thisCcu: CcuThunk * thisCcuType: ModuleOrNamespaceType option * tcImports: TcImports * mimpls: TypedImplFile list -> FSharpAssemblyContents + internal new : tcGlobals: TcGlobals * thisCcu: CcuThunk * thisCcuType: ModuleOrNamespaceType option * tcImports: TcImports * mimpls: TypedImplFile list -> FSharpAssemblyContents /// The contents of the implementation files in the assembly member ImplementationFiles: FSharpImplementationFileContents list /// Represents the definitional contents of a single file or fragment in an assembly, as seen by the F# language type public FSharpImplementationFileContents = - internal new: cenv: SymbolEnv * mimpl: TypedImplFile -> FSharpImplementationFileContents + internal new : cenv: SymbolEnv * mimpl: TypedImplFile -> FSharpImplementationFileContents /// The qualified name acts to fully-qualify module specifications and implementations member QualifiedName: string @@ -27,7 +27,7 @@ type public FSharpImplementationFileContents = member FileName: string /// Get the declarations that make up this implementation file - member Declarations: FSharpImplementationFileDeclaration list + member Declarations : FSharpImplementationFileDeclaration list /// Indicates if the implementation file is a script member IsScript: bool @@ -36,17 +36,16 @@ type public FSharpImplementationFileContents = member HasExplicitEntryPoint: bool /// Represents a declaration in an implementation file, as seen by the F# language -[] -type public FSharpImplementationFileDeclaration = +and public FSharpImplementationFileDeclaration = /// Represents the declaration of a type - | Entity of entity: FSharpEntity * declarations: FSharpImplementationFileDeclaration list + | Entity of FSharpEntity * FSharpImplementationFileDeclaration list /// Represents the declaration of a member, function or value, including the parameters and body of the member - | MemberOrFunctionOrValue of value: FSharpMemberOrFunctionOrValue * curriedArgs: FSharpMemberOrFunctionOrValue list list * body: FSharpExpr + | MemberOrFunctionOrValue of FSharpMemberOrFunctionOrValue * FSharpMemberOrFunctionOrValue list list * FSharpExpr /// Represents the declaration of a static initialization action - | InitAction of action: FSharpExpr + | InitAction of FSharpExpr /// Represents a checked and reduced expression, as seen by the F# language. The active patterns /// in 'FSharp.Compiler.SourceCodeServices' can be used to analyze information about the expression. @@ -56,173 +55,172 @@ type public FSharpImplementationFileDeclaration = [] type public FSharpExpr = /// The range of the expression - member Range: range + member Range : range /// The type of the expression - member Type: FSharpType + member Type : FSharpType /// The immediate sub-expressions of the expression. - member ImmediateSubExpressions: FSharpExpr list + member ImmediateSubExpressions : FSharpExpr list /// Represents a checked method in an object expression, as seen by the F# language. -[] -type public FSharpObjectExprOverride = +and [] public FSharpObjectExprOverride = /// The signature of the implemented abstract slot - member Signature: FSharpAbstractSignature + member Signature : FSharpAbstractSignature /// The generic parameters of the method - member GenericParameters: FSharpGenericParameter list + member GenericParameters : FSharpGenericParameter list /// The parameters of the method - member CurriedParameterGroups: FSharpMemberOrFunctionOrValue list list + member CurriedParameterGroups : FSharpMemberOrFunctionOrValue list list /// The expression that forms the body of the method - member Body: FSharpExpr + member Body : FSharpExpr /// A collection of active patterns to analyze expressions -module public FSharpExprPatterns = +module public BasicPatterns = /// Matches expressions which are uses of values - val (|Value|_|): FSharpExpr -> FSharpMemberOrFunctionOrValue option + val (|Value|_|) : FSharpExpr -> FSharpMemberOrFunctionOrValue option /// Matches expressions which are the application of function values - val (|Application|_|): FSharpExpr -> (FSharpExpr * FSharpType list * FSharpExpr list) option + val (|Application|_|) : FSharpExpr -> (FSharpExpr * FSharpType list * FSharpExpr list) option /// Matches expressions which are type abstractions - val (|TypeLambda|_|): FSharpExpr -> (FSharpGenericParameter list * FSharpExpr) option + val (|TypeLambda|_|) : FSharpExpr -> (FSharpGenericParameter list * FSharpExpr) option /// Matches expressions with a decision expression, each branch of which ends in DecisionTreeSuccess passing control and values to one of the targets. - val (|DecisionTree|_|): FSharpExpr -> (FSharpExpr * (FSharpMemberOrFunctionOrValue list * FSharpExpr) list) option + val (|DecisionTree|_|) : FSharpExpr -> (FSharpExpr * (FSharpMemberOrFunctionOrValue list * FSharpExpr) list) option /// Special expressions at the end of a conditional decision structure in the decision expression node of a DecisionTree . /// The given expressions are passed as values to the decision tree target. - val (|DecisionTreeSuccess|_|): FSharpExpr -> (int * FSharpExpr list) option + val (|DecisionTreeSuccess|_|) : FSharpExpr -> (int * FSharpExpr list) option /// Matches expressions which are lambda abstractions - val (|Lambda|_|): FSharpExpr -> (FSharpMemberOrFunctionOrValue * FSharpExpr) option + val (|Lambda|_|) : FSharpExpr -> (FSharpMemberOrFunctionOrValue * FSharpExpr) option /// Matches expressions which are conditionals - val (|IfThenElse|_|): FSharpExpr -> (FSharpExpr * FSharpExpr * FSharpExpr) option + val (|IfThenElse|_|) : FSharpExpr -> (FSharpExpr * FSharpExpr * FSharpExpr) option /// Matches expressions which are let definitions - val (|Let|_|): FSharpExpr -> ((FSharpMemberOrFunctionOrValue * FSharpExpr) * FSharpExpr) option + val (|Let|_|) : FSharpExpr -> ((FSharpMemberOrFunctionOrValue * FSharpExpr) * FSharpExpr) option /// Matches expressions which are calls to members or module-defined functions. When calling curried functions and members the /// arguments are collapsed to a single collection of arguments, as done in the compiled version of these. - val (|Call|_|): FSharpExpr -> (FSharpExpr option * FSharpMemberOrFunctionOrValue * FSharpType list * FSharpType list * FSharpExpr list) option + val (|Call|_|) : FSharpExpr -> (FSharpExpr option * FSharpMemberOrFunctionOrValue * FSharpType list * FSharpType list * FSharpExpr list) option /// Like Call but also indicates witness arguments - val (|CallWithWitnesses|_|): FSharpExpr -> (FSharpExpr option * FSharpMemberOrFunctionOrValue * FSharpType list * FSharpType list * FSharpExpr list * FSharpExpr list) option + val (|CallWithWitnesses|_|) : FSharpExpr -> (FSharpExpr option * FSharpMemberOrFunctionOrValue * FSharpType list * FSharpType list * FSharpExpr list * FSharpExpr list) option /// Matches expressions which are calls to object constructors - val (|NewObject|_|): FSharpExpr -> (FSharpMemberOrFunctionOrValue * FSharpType list * FSharpExpr list) option + val (|NewObject|_|) : FSharpExpr -> (FSharpMemberOrFunctionOrValue * FSharpType list * FSharpExpr list) option /// Matches expressions which are uses of the 'this' value - val (|ThisValue|_|): FSharpExpr -> FSharpType option + val (|ThisValue|_|) : FSharpExpr -> FSharpType option /// Matches expressions which are uses of the 'base' value - val (|BaseValue|_|): FSharpExpr -> FSharpType option + val (|BaseValue|_|) : FSharpExpr -> FSharpType option /// Matches expressions which are quotation literals - val (|Quote|_|): FSharpExpr -> FSharpExpr option + val (|Quote|_|) : FSharpExpr -> FSharpExpr option /// Matches expressions which are let-rec definitions - val (|LetRec|_|): FSharpExpr -> ((FSharpMemberOrFunctionOrValue * FSharpExpr) list * FSharpExpr) option + val (|LetRec|_|) : FSharpExpr -> ((FSharpMemberOrFunctionOrValue * FSharpExpr) list * FSharpExpr) option /// Matches record expressions - val (|NewRecord|_|): FSharpExpr -> (FSharpType * FSharpExpr list) option + val (|NewRecord|_|) : FSharpExpr -> (FSharpType * FSharpExpr list) option /// Matches anonymous record expressions - val (|NewAnonRecord|_|): FSharpExpr -> (FSharpType * FSharpExpr list) option + val (|NewAnonRecord|_|) : FSharpExpr -> (FSharpType * FSharpExpr list) option /// Matches expressions getting a field from an anonymous record. The integer represents the /// index into the sorted fields of the anonymous record. - val (|AnonRecordGet|_|): FSharpExpr -> (FSharpExpr * FSharpType * int) option + val (|AnonRecordGet|_|) : FSharpExpr -> (FSharpExpr * FSharpType * int) option /// Matches expressions which get a field from a record or class - val (|FSharpFieldGet|_|): FSharpExpr -> (FSharpExpr option * FSharpType * FSharpField) option + val (|FSharpFieldGet|_|) : FSharpExpr -> (FSharpExpr option * FSharpType * FSharpField) option /// Matches expressions which set a field in a record or class - val (|FSharpFieldSet|_|): FSharpExpr -> (FSharpExpr option * FSharpType * FSharpField * FSharpExpr) option + val (|FSharpFieldSet|_|) : FSharpExpr -> (FSharpExpr option * FSharpType * FSharpField * FSharpExpr) option /// Matches expressions which create an object corresponding to a union case - val (|NewUnionCase|_|): FSharpExpr -> (FSharpType * FSharpUnionCase * FSharpExpr list) option + val (|NewUnionCase|_|) : FSharpExpr -> (FSharpType * FSharpUnionCase * FSharpExpr list) option /// Matches expressions which get a field from a union case - val (|UnionCaseGet|_|): FSharpExpr -> (FSharpExpr * FSharpType * FSharpUnionCase * FSharpField) option + val (|UnionCaseGet|_|) : FSharpExpr -> (FSharpExpr * FSharpType * FSharpUnionCase * FSharpField) option /// Matches expressions which set a field from a union case (only used in FSharp.Core itself) - val (|UnionCaseSet|_|): FSharpExpr -> (FSharpExpr * FSharpType * FSharpUnionCase * FSharpField * FSharpExpr) option + val (|UnionCaseSet|_|) : FSharpExpr -> (FSharpExpr * FSharpType * FSharpUnionCase * FSharpField * FSharpExpr) option /// Matches expressions which gets the tag for a union case - val (|UnionCaseTag|_|): FSharpExpr -> (FSharpExpr * FSharpType) option + val (|UnionCaseTag|_|) : FSharpExpr -> (FSharpExpr * FSharpType) option /// Matches expressions which test if an expression corresponds to a particular union case - val (|UnionCaseTest|_|): FSharpExpr -> (FSharpExpr * FSharpType * FSharpUnionCase) option + val (|UnionCaseTest|_|) : FSharpExpr -> (FSharpExpr * FSharpType * FSharpUnionCase) option /// Matches tuple expressions - val (|NewTuple|_|): FSharpExpr -> (FSharpType * FSharpExpr list) option + val (|NewTuple|_|) : FSharpExpr -> (FSharpType * FSharpExpr list) option /// Matches expressions which get a value from a tuple - val (|TupleGet|_|): FSharpExpr -> (FSharpType * int * FSharpExpr) option + val (|TupleGet|_|) : FSharpExpr -> (FSharpType * int * FSharpExpr) option /// Matches expressions which coerce the type of a value - val (|Coerce|_|): FSharpExpr -> (FSharpType * FSharpExpr) option + val (|Coerce|_|) : FSharpExpr -> (FSharpType * FSharpExpr) option /// Matches array expressions - val (|NewArray|_|): FSharpExpr -> (FSharpType * FSharpExpr list) option + val (|NewArray|_|) : FSharpExpr -> (FSharpType * FSharpExpr list) option /// Matches expressions which test the runtime type of a value - val (|TypeTest|_|): FSharpExpr -> (FSharpType * FSharpExpr) option + val (|TypeTest|_|) : FSharpExpr -> (FSharpType * FSharpExpr) option /// Matches expressions which set the contents of an address - val (|AddressSet|_|): FSharpExpr -> (FSharpExpr * FSharpExpr) option + val (|AddressSet|_|) : FSharpExpr -> (FSharpExpr * FSharpExpr) option /// Matches expressions which set the contents of a mutable variable - val (|ValueSet|_|): FSharpExpr -> (FSharpMemberOrFunctionOrValue * FSharpExpr) option + val (|ValueSet|_|) : FSharpExpr -> (FSharpMemberOrFunctionOrValue * FSharpExpr) option /// Matches default-value expressions, including null expressions - val (|DefaultValue|_|): FSharpExpr -> FSharpType option + val (|DefaultValue|_|) : FSharpExpr -> FSharpType option /// Matches constant expressions, including signed and unsigned integers, strings, characters, booleans, arrays /// of bytes and arrays of unit16. - val (|Const|_|): FSharpExpr -> (obj * FSharpType) option + val (|Const|_|) : FSharpExpr -> (obj * FSharpType) option /// Matches expressions which take the address of a location - val (|AddressOf|_|): FSharpExpr -> FSharpExpr option + val (|AddressOf|_|) : FSharpExpr -> FSharpExpr option /// Matches sequential expressions - val (|Sequential|_|): FSharpExpr -> (FSharpExpr * FSharpExpr) option + val (|Sequential|_|) : FSharpExpr -> (FSharpExpr * FSharpExpr) option /// Matches fast-integer loops (up or down) - val (|FastIntegerForLoop|_|): FSharpExpr -> (FSharpExpr * FSharpExpr * FSharpExpr * bool) option + val (|FastIntegerForLoop|_|) : FSharpExpr -> (FSharpExpr * FSharpExpr * FSharpExpr * bool) option /// Matches while loops - val (|WhileLoop|_|): FSharpExpr -> (FSharpExpr * FSharpExpr) option + val (|WhileLoop|_|) : FSharpExpr -> (FSharpExpr * FSharpExpr) option /// Matches try/finally expressions - val (|TryFinally|_|): FSharpExpr -> (FSharpExpr * FSharpExpr) option + val (|TryFinally|_|) : FSharpExpr -> (FSharpExpr * FSharpExpr) option /// Matches try/with expressions - val (|TryWith|_|): FSharpExpr -> (FSharpExpr * FSharpMemberOrFunctionOrValue * FSharpExpr * FSharpMemberOrFunctionOrValue * FSharpExpr) option + val (|TryWith|_|) : FSharpExpr -> (FSharpExpr * FSharpMemberOrFunctionOrValue * FSharpExpr * FSharpMemberOrFunctionOrValue * FSharpExpr) option /// Matches expressions which create an instance of a delegate type - val (|NewDelegate|_|): FSharpExpr -> (FSharpType * FSharpExpr) option + val (|NewDelegate|_|) : FSharpExpr -> (FSharpType * FSharpExpr) option /// Matches expressions which are IL assembly code - val (|ILAsm|_|): FSharpExpr -> (string * FSharpType list * FSharpExpr list) option + val (|ILAsm|_|) : FSharpExpr -> (string * FSharpType list * FSharpExpr list) option /// Matches expressions which fetch a field from a .NET type - val (|ILFieldGet|_|): FSharpExpr -> (FSharpExpr option * FSharpType * string) option + val (|ILFieldGet|_|) : FSharpExpr -> (FSharpExpr option * FSharpType * string) option /// Matches expressions which set a field in a .NET type - val (|ILFieldSet|_|): FSharpExpr -> (FSharpExpr option * FSharpType * string * FSharpExpr) option + val (|ILFieldSet|_|) : FSharpExpr -> (FSharpExpr option * FSharpType * string * FSharpExpr) option /// Matches object expressions, returning the base type, the base call, the overrides and the interface implementations - val (|ObjectExpr|_|): FSharpExpr -> (FSharpType * FSharpExpr * FSharpObjectExprOverride list * (FSharpType * FSharpObjectExprOverride list) list) option + val (|ObjectExpr|_|) : FSharpExpr -> (FSharpType * FSharpExpr * FSharpObjectExprOverride list * (FSharpType * FSharpObjectExprOverride list) list) option /// Matches expressions for an unresolved call to a trait - val (|TraitCall|_|): FSharpExpr -> (FSharpType list * string * SynMemberFlags * FSharpType list * FSharpType list * FSharpExpr list) option + val (|TraitCall|_|) : FSharpExpr -> (FSharpType list * string * MemberFlags * FSharpType list * FSharpType list * FSharpExpr list) option /// Indicates a witness argument index from the witness arguments supplied to the enclosing method - val (|WitnessArg|_|): FSharpExpr -> int option + val (|WitnessArg|_|) : FSharpExpr -> int option diff --git a/src/fsharp/symbols/SymbolHelpers.fs b/src/fsharp/symbols/SymbolHelpers.fs index 82a6a84f0c6..0548770d56e 100644 --- a/src/fsharp/symbols/SymbolHelpers.fs +++ b/src/fsharp/symbols/SymbolHelpers.fs @@ -5,96 +5,102 @@ // type checking and intellisense-like environment-reporting. //-------------------------------------------------------------------------- -namespace FSharp.Compiler.Diagnostics +namespace FSharp.Compiler.SourceCodeServices open System - -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras +open System.IO open FSharp.Core.Printf open FSharp.Compiler +open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Diagnostics + +open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.CompilerDiagnostics -open FSharp.Compiler.Diagnostics open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Xml -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Position -open FSharp.Compiler.Text.Range +open FSharp.Compiler.InfoReader +open FSharp.Compiler.Infos +open FSharp.Compiler.Layout +open FSharp.Compiler.Layout.TaggedTextOps +open FSharp.Compiler.Lib +open FSharp.Compiler.NameResolution +open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Range +open FSharp.Compiler.TypedTree +open FSharp.Compiler.TypedTreeBasics +open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.XmlDoc -type FSharpDiagnostic(m: range, severity: FSharpDiagnosticSeverity, message: string, subcategory: string, errorNum: int, numberPrefix: string) = - member _.Range = m +module EnvMisc2 = + let maxMembers = GetEnvInteger "FCS_MaxMembersInQuickInfo" 10 - member _.Severity = severity +//---------------------------------------------------------------------------- +// Object model for diagnostics - member _.Message = message +[] +type FSharpErrorSeverity = + | Warning + | Error - member _.Subcategory = subcategory +module FSharpErrorInfo = + let [] ObsoleteMessage = "Use FSharpErrorInfo.Range. This API will be removed in a future update." +type FSharpErrorInfo(m: range, severity: FSharpErrorSeverity, message: string, subcategory: string, errorNum: int) = + member _.Range = m + member _.Severity = severity + member _.Message = message + member _.Subcategory = subcategory member _.ErrorNumber = errorNum - member _.ErrorNumberPrefix = numberPrefix + [] member _.Start = m.Start + [] member _.End = m.End - member _.ErrorNumberText = numberPrefix + errorNum.ToString("0000") - - member _.Start = m.Start - - member _.End = m.End - - member _.StartLine = m.Start.Line - - member _.EndLine = m.End.Line - - member _.StartColumn = m.Start.Column - - member _.EndColumn = m.End.Column - - member _.FileName = m.FileName + [] member _.StartLine = Line.toZ m.Start.Line + [] member _.StartLineAlternate = m.Start.Line + [] member _.EndLine = Line.toZ m.End.Line + [] member _.EndLineAlternate = m.End.Line + [] member _.StartColumn = m.Start.Column + [] member _.EndColumn = m.End.Column + [] member _.FileName = m.FileName member _.WithStart newStart = let m = mkFileIndexRange m.FileIndex newStart m.End - FSharpDiagnostic(m, severity, message, subcategory, errorNum, numberPrefix) + FSharpErrorInfo(m, severity, message, subcategory, errorNum) member _.WithEnd newEnd = let m = mkFileIndexRange m.FileIndex m.Start newEnd - FSharpDiagnostic(m, severity, message, subcategory, errorNum, numberPrefix) + FSharpErrorInfo(m, severity, message, subcategory, errorNum) override _.ToString() = let fileName = m.FileName let s = m.Start let e = m.End - let severity = if severity=FSharpDiagnosticSeverity.Warning then "warning" else "error" + let severity = if severity=FSharpErrorSeverity.Warning then "warning" else "error" sprintf "%s (%d,%d)-(%d,%d) %s %s %s" fileName s.Line (s.Column + 1) e.Line (e.Column + 1) subcategory severity message /// Decompose a warning or error into parts: position, severity, message, error number - static member CreateFromException(exn, severity, fallbackRange: range, suggestNames: bool) = + static member CreateFromException(exn, isError, fallbackRange: range, suggestNames: bool) = let m = match GetRangeOfDiagnostic exn with Some m -> m | None -> fallbackRange + let severity = if isError then FSharpErrorSeverity.Error else FSharpErrorSeverity.Warning let msg = bufs (fun buf -> OutputPhasedDiagnostic buf exn false suggestNames) let errorNum = GetDiagnosticNumber exn - FSharpDiagnostic(m, severity, msg, exn.Subcategory(), errorNum, "FS") + FSharpErrorInfo(m, severity, msg, exn.Subcategory(), errorNum) /// Decompose a warning or error into parts: position, severity, message, error number - static member CreateFromExceptionAndAdjustEof(exn, severity, fallbackRange: range, (linesCount: int, lastLength: int), suggestNames: bool) = - let r = FSharpDiagnostic.CreateFromException(exn, severity, fallbackRange, suggestNames) + static member CreateFromExceptionAndAdjustEof(exn, isError, fallbackRange: range, (linesCount: int, lastLength: int), suggestNames: bool) = + let r = FSharpErrorInfo.CreateFromException(exn, isError, fallbackRange, suggestNames) // Adjust to make sure that errors reported at Eof are shown at the linesCount - let startline, schange = min (Line.toZ r.Range.StartLine, false) (linesCount, true) - let endline, echange = min (Line.toZ r.Range.EndLine, false) (linesCount, true) + let startline, schange = min (r.Range.StartLine, false) (linesCount, true) + let endline, echange = min (r.Range.EndLine, false) (linesCount, true) if not (schange || echange) then r else let r = if schange then r.WithStart(mkPos startline lastLength) else r - if echange then r.WithEnd(mkPos endline (1 + lastLength)) else r - - static member NewlineifyErrorString(message) = ErrorLogger.NewlineifyErrorString(message) + if echange then r.WithEnd(mkPos endline (1 + lastLength)) else r - static member NormalizeErrorString(text) = ErrorLogger.NormalizeErrorString(text) - static member Create(severity: FSharpDiagnosticSeverity, message: string, number: int, range: range, ?numberPrefix: string, ?subcategory: string) = - let subcategory = defaultArg subcategory BuildPhaseSubcategory.TypeCheck - let numberPrefix = defaultArg numberPrefix "FS" - FSharpDiagnostic(range, severity, message, subcategory, number, numberPrefix) - /// Use to reset error and warning handlers [] type ErrorScope() = @@ -104,19 +110,16 @@ type ErrorScope() = let unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _oldLogger -> { new ErrorLogger("ErrorScope") with - member x.DiagnosticSink(exn, severity) = - let err = FSharpDiagnostic.CreateFromException(exn, severity, range.Zero, false) + member x.DiagnosticSink(exn, isError) = + let err = FSharpErrorInfo.CreateFromException(exn, isError, range.Zero, false) errors <- err :: errors - if severity = FSharpDiagnosticSeverity.Error && firstError.IsNone then + if isError && firstError.IsNone then firstError <- Some err.Message member x.ErrorCount = errors.Length }) - member x.Errors = errors |> List.filter (fun error -> error.Severity = FSharpDiagnosticSeverity.Error) - - member x.Warnings = errors |> List.filter (fun error -> error.Severity = FSharpDiagnosticSeverity.Warning) - + member x.Errors = errors |> List.filter (fun error -> error.Severity = FSharpErrorSeverity.Error) + member x.Warnings = errors |> List.filter (fun error -> error.Severity = FSharpErrorSeverity.Warning) member x.Diagnostics = errors - member x.TryGetFirstErrorText() = match x.Errors with | error :: _ -> Some error.Message @@ -160,36 +163,45 @@ type ErrorScope() = | None -> err "" /// An error logger that capture errors, filtering them according to warning levels etc. -type internal CompilationErrorLogger (debugName: string, options: FSharpDiagnosticOptions) = +type internal CompilationErrorLogger (debugName: string, options: FSharpErrorSeverityOptions) = inherit ErrorLogger("CompilationErrorLogger("+debugName+")") let mutable errorCount = 0 let diagnostics = new ResizeArray<_>() - override x.DiagnosticSink(exn, severity) = - if severity = FSharpDiagnosticSeverity.Error || ReportWarningAsError options exn then - diagnostics.Add(exn, FSharpDiagnosticSeverity.Error) + override x.DiagnosticSink(exn, isError) = + if isError || ReportWarningAsError options exn then + diagnostics.Add(exn, FSharpErrorSeverity.Error) errorCount <- errorCount + 1 - elif ReportWarning options exn then - diagnostics.Add(exn, FSharpDiagnosticSeverity.Warning) + else if ReportWarning options exn then + diagnostics.Add(exn, FSharpErrorSeverity.Warning) override x.ErrorCount = errorCount - member x.GetDiagnostics() = diagnostics.ToArray() + member x.GetErrors() = diagnostics.ToArray() -module DiagnosticHelpers = - let ReportDiagnostic (options: FSharpDiagnosticOptions, allErrors, mainInputFileName, fileInfo, (exn, severity), suggestNames) = - [ let severity = - if (severity = FSharpDiagnosticSeverity.Error) then severity - elif ReportWarningAsError options exn then FSharpDiagnosticSeverity.Error - else severity - if (severity = FSharpDiagnosticSeverity.Error || ReportWarning options exn) then +/// This represents the global state established as each task function runs as part of the build. +/// +/// Use to reset error and warning handlers. +type CompilationGlobalsScope(errorLogger: ErrorLogger, phase: BuildPhase) = + let unwindEL = PushErrorLoggerPhaseUntilUnwind(fun _ -> errorLogger) + let unwindBP = PushThreadBuildPhaseUntilUnwind phase + // Return the disposable object that cleans up + interface IDisposable with + member d.Dispose() = + unwindBP.Dispose() + unwindEL.Dispose() + +module ErrorHelpers = + let ReportError (options, allErrors, mainInputFileName, fileInfo, (exn, sev), suggestNames) = + [ let isError = (sev = FSharpErrorSeverity.Error) || ReportWarningAsError options exn + if (isError || ReportWarning options exn) then let oneError exn = [ // We use the first line of the file as a fallbackRange for reporting unexpected errors. // Not ideal, but it's hard to see what else to do. let fallbackRange = rangeN mainInputFileName 1 - let ei = FSharpDiagnostic.CreateFromExceptionAndAdjustEof (exn, severity, fallbackRange, fileInfo, suggestNames) + let ei = FSharpErrorInfo.CreateFromExceptionAndAdjustEof (exn, isError, fallbackRange, fileInfo, suggestNames) let fileName = ei.Range.FileName if allErrors || fileName = mainInputFileName || fileName = TcGlobals.DummyFileNameForRangesWithoutASpecificLocation then yield ei ] @@ -199,51 +211,119 @@ module DiagnosticHelpers = for e in relatedErrors do yield! oneError e ] - let CreateDiagnostics (options, allErrors, mainInputFileName, errors, suggestNames) = + let CreateErrorInfos (options, allErrors, mainInputFileName, errors, suggestNames) = let fileInfo = (Int32.MaxValue, Int32.MaxValue) - [| for (exn, severity) in errors do - yield! ReportDiagnostic (options, allErrors, mainInputFileName, fileInfo, (exn, severity), suggestNames) |] + [| for (exn, isError) in errors do + yield! ReportError (options, allErrors, mainInputFileName, fileInfo, (exn, isError), suggestNames) |] -namespace FSharp.Compiler.Symbols - -open System -open System.IO +//---------------------------------------------------------------------------- +// Object model for tooltips and helpers for their generation from items -open Internal.Utilities.Library -open Internal.Utilities.Library.Extras -open FSharp.Core.Printf -open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Diagnostics -open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.InfoReader -open FSharp.Compiler.Infos -open FSharp.Compiler.IO -open FSharp.Compiler.NameResolution -open FSharp.Compiler.Syntax.PrettyNaming -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Text.Layout -open FSharp.Compiler.Text.TaggedText -open FSharp.Compiler.Xml -open FSharp.Compiler.TypedTree -open FSharp.Compiler.TypedTreeBasics -open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.TcGlobals +type public Layout = Internal.Utilities.StructuredFormat.Layout /// Describe a comment as either a block of text or a file+signature reference into an intellidoc file. [] type FSharpXmlDoc = | None - | FromXmlText of XmlDoc - | FromXmlFile of dllName: string * xmlSig: string + | Text of unprocessedLines: string[] * elaboratedXmlLines: string[] + | XmlDocFileSignature of (*File and Signature*) string * string -module EnvMisc2 = - let maxMembers = GetEnvInteger "FCS_MaxMembersInQuickInfo" 10 +/// A single data tip display element +[] +type FSharpToolTipElementData<'T> = + { MainDescription: 'T + XmlDoc: FSharpXmlDoc + /// typar instantiation text, to go after xml + TypeMapping: 'T list + Remarks: 'T option + ParamName : string option } + static member Create(layout:'T, xml, ?typeMapping, ?paramName, ?remarks) = + { MainDescription=layout; XmlDoc=xml; TypeMapping=defaultArg typeMapping []; ParamName=paramName; Remarks=remarks } + +/// A single data tip display element +[] +type FSharpToolTipElement<'T> = + | None + + /// A single type, method, etc with comment. May represent a method overload group. + | Group of FSharpToolTipElementData<'T> list + + /// An error occurred formatting this element + | CompositionError of string + + static member Single(layout, xml, ?typeMapping, ?paramName, ?remarks) = + Group [ FSharpToolTipElementData<'T>.Create(layout, xml, ?typeMapping=typeMapping, ?paramName=paramName, ?remarks=remarks) ] + +/// A single data tip display element with where text is expressed as string +type public FSharpToolTipElement = FSharpToolTipElement + + +/// A single data tip display element with where text is expressed as +type public FSharpStructuredToolTipElement = FSharpToolTipElement + +/// Information for building a data tip box. +type FSharpToolTipText<'T> = + /// A list of data tip elements to display. + | FSharpToolTipText of FSharpToolTipElement<'T> list + +type public FSharpToolTipText = FSharpToolTipText +type public FSharpStructuredToolTipText = FSharpToolTipText + +module Tooltips = + let ToFSharpToolTipElement tooltip = + match tooltip with + | FSharpStructuredToolTipElement.None -> + FSharpToolTipElement.None + | FSharpStructuredToolTipElement.Group l -> + FSharpToolTipElement.Group(l |> List.map(fun x -> + { MainDescription=showL x.MainDescription + XmlDoc=x.XmlDoc + TypeMapping=List.map showL x.TypeMapping + ParamName=x.ParamName + Remarks= Option.map showL x.Remarks })) + | FSharpStructuredToolTipElement.CompositionError text -> + FSharpToolTipElement.CompositionError text + + let ToFSharpToolTipText (FSharpStructuredToolTipText.FSharpToolTipText text) = + FSharpToolTipText(List.map ToFSharpToolTipElement text) + + +[] +type CompletionItemKind = + | Field + | Property + | Method of isExtension : bool + | Event + | Argument + | CustomOperation + | Other + +type UnresolvedSymbol = + { FullName: string + DisplayName: string + Namespace: string[] } + +type CompletionItem = + { ItemWithInst: ItemWithInst + Kind: CompletionItemKind + IsOwnMember: bool + MinorPriority: int + Type: TyconRef option + Unresolved: UnresolvedSymbol option } + member x.Item = x.ItemWithInst.Item + [] module internal SymbolHelpers = - + let OutputFullName isListItem ppF fnF r = + // Only display full names in quick info, not declaration lists or method lists + if not isListItem then + match ppF r with + | None -> emptyL + | Some _ -> wordL (tagText (FSComp.SR.typeInfoFullName())) ^^ RightL.colon ^^ (fnF r) + else emptyL + let rangeOfValRef preferFlag (vref: ValRef) = match preferFlag with | None -> vref.Range @@ -255,6 +335,7 @@ module internal SymbolHelpers = | None -> eref.Range | Some false -> eref.DefinitionRange | Some true -> eref.SigRange + let rangeOfPropInfo preferFlag (pinfo: PropInfo) = match pinfo with @@ -337,6 +418,7 @@ module internal SymbolHelpers = |> Option.bind ccuOfValRef |> Option.orElseWith (fun () -> minfo.DeclaringTyconRef |> computeCcuOfTyconRef) + let rec ccuOfItem (g: TcGlobals) d = match d with | Item.Value vref | Item.CustomBuilder (_, vref) -> ccuOfValRef vref @@ -406,30 +488,150 @@ module internal SymbolHelpers = yield ParamNameAndType(argInfo.Name, ty) ] | _ -> [] + // Find the name of the metadata file for this external definition + let metaInfoOfEntityRef (infoReader: InfoReader) m tcref = + let g = infoReader.g + match tcref with + | ERefLocal _ -> None + | ERefNonLocal nlref -> + // Generalize to get a formal signature + let formalTypars = tcref.Typars m + let formalTypeInst = generalizeTypars formalTypars + let ty = TType_app(tcref, formalTypeInst) + if isILAppTy g ty then + let formalTypeInfo = ILTypeInfo.FromType g ty + Some(nlref.Ccu.FileName, formalTypars, formalTypeInfo) + else None + let mkXmlComment thing = match thing with - | Some (Some fileName, xmlDocSig) -> FSharpXmlDoc.FromXmlFile(fileName, xmlDocSig) + | Some (Some fileName, xmlDocSig) -> FSharpXmlDoc.XmlDocFileSignature(fileName, xmlDocSig) | _ -> FSharpXmlDoc.None - let GetXmlDocFromLoader (infoReader: InfoReader) xmlDoc = - match xmlDoc with - | FSharpXmlDoc.None - | FSharpXmlDoc.FromXmlText _ -> xmlDoc - | FSharpXmlDoc.FromXmlFile(dllName, xmlSig) -> - TryFindXmlDocByAssemblyNameAndSig infoReader (Path.GetFileNameWithoutExtension dllName) xmlSig - |> Option.map FSharpXmlDoc.FromXmlText - |> Option.defaultValue xmlDoc + let GetXmlDocSigOfEntityRef infoReader m (eref: EntityRef) = + if eref.IsILTycon then + match metaInfoOfEntityRef infoReader m eref with + | None -> None + | Some (ccuFileName, _, formalTypeInfo) -> Some(ccuFileName, "T:"+formalTypeInfo.ILTypeRef.FullName) + else + let ccuFileName = libFileOfEntityRef eref + let m = eref.Deref + if m.XmlDocSig = "" then + m.XmlDocSig <- XmlDocSigOfEntity eref + Some (ccuFileName, m.XmlDocSig) + + let GetXmlDocSigOfScopedValRef g (tcref: TyconRef) (vref: ValRef) = + let ccuFileName = libFileOfEntityRef tcref + let v = vref.Deref + if v.XmlDocSig = "" && v.HasDeclaringEntity then + let ap = buildAccessPath vref.TopValDeclaringEntity.CompilationPathOpt + let path = + if vref.TopValDeclaringEntity.IsModule then + let sep = if ap.Length > 0 then "." else "" + ap + sep + vref.TopValDeclaringEntity.CompiledName + else + ap + v.XmlDocSig <- XmlDocSigOfVal g false path v + Some (ccuFileName, v.XmlDocSig) + + let GetXmlDocSigOfRecdFieldInfo (rfinfo: RecdFieldInfo) = + let tcref = rfinfo.TyconRef + let ccuFileName = libFileOfEntityRef tcref + if rfinfo.RecdField.XmlDocSig = "" then + rfinfo.RecdField.XmlDocSig <- XmlDocSigOfProperty [tcref.CompiledRepresentationForNamedType.FullName; rfinfo.Name] + Some (ccuFileName, rfinfo.RecdField.XmlDocSig) + + let GetXmlDocSigOfUnionCaseInfo (ucinfo: UnionCaseInfo) = + let tcref = ucinfo.TyconRef + let ccuFileName = libFileOfEntityRef tcref + if ucinfo.UnionCase.XmlDocSig = "" then + ucinfo.UnionCase.XmlDocSig <- XmlDocSigOfUnionCase [tcref.CompiledRepresentationForNamedType.FullName; ucinfo.Name] + Some (ccuFileName, ucinfo.UnionCase.XmlDocSig) + + let GetXmlDocSigOfMethInfo (infoReader: InfoReader) m (minfo: MethInfo) = + let amap = infoReader.amap + match minfo with + | FSMeth (g, _, vref, _) -> + GetXmlDocSigOfScopedValRef g minfo.DeclaringTyconRef vref + | ILMeth (g, ilminfo, _) -> + let actualTypeName = ilminfo.DeclaringTyconRef.CompiledRepresentationForNamedType.FullName + let fmtps = ilminfo.FormalMethodTypars + let genArity = if fmtps.Length=0 then "" else sprintf "``%d" fmtps.Length + + match metaInfoOfEntityRef infoReader m ilminfo.DeclaringTyconRef with + | None -> None + | Some (ccuFileName, formalTypars, formalTypeInfo) -> + let filminfo = ILMethInfo(g, formalTypeInfo.ToType, None, ilminfo.RawMetadata, fmtps) + let args = + match ilminfo.IsILExtensionMethod with + | true -> filminfo.GetRawArgTypes(amap, m, minfo.FormalMethodInst) + | false -> filminfo.GetParamTypes(amap, m, minfo.FormalMethodInst) + + // http://msdn.microsoft.com/en-us/library/fsbx0t7x.aspx + // If the name of the item itself has periods, they are replaced by the hash-sign ('#'). + // It is assumed that no item has a hash-sign directly in its name. For example, the fully + // qualified name of the String constructor would be "System.String.#ctor". + let normalizedName = ilminfo.ILName.Replace(".", "#") + + Some (ccuFileName, "M:"+actualTypeName+"."+normalizedName+genArity+XmlDocArgsEnc g (formalTypars, fmtps) args) + | DefaultStructCtor _ -> None +#if !NO_EXTENSIONTYPING + | ProvidedMeth _ -> None +#endif + + let GetXmlDocSigOfValRef g (vref: ValRef) = + if not vref.IsLocalRef then + let ccuFileName = vref.nlr.Ccu.FileName + let v = vref.Deref + if v.XmlDocSig = "" && v.HasDeclaringEntity then + v.XmlDocSig <- XmlDocSigOfVal g false vref.TopValDeclaringEntity.CompiledRepresentationForNamedType.Name v + Some (ccuFileName, v.XmlDocSig) + else + None + + let GetXmlDocSigOfProp infoReader m (pinfo: PropInfo) = + let g = pinfo.TcGlobals + match pinfo with +#if !NO_EXTENSIONTYPING + | ProvidedProp _ -> None // No signature is possible. If an xml comment existed it would have been returned by PropInfo.XmlDoc in infos.fs +#endif + | FSProp _ as fspinfo -> + match fspinfo.ArbitraryValRef with + | None -> None + | Some vref -> GetXmlDocSigOfScopedValRef g pinfo.DeclaringTyconRef vref + | ILProp(ILPropInfo(_, pdef)) -> + match metaInfoOfEntityRef infoReader m pinfo.DeclaringTyconRef with + | Some (ccuFileName, formalTypars, formalTypeInfo) -> + let filpinfo = ILPropInfo(formalTypeInfo, pdef) + Some (ccuFileName, "P:"+formalTypeInfo.ILTypeRef.FullName+"."+pdef.Name+XmlDocArgsEnc g (formalTypars, []) (filpinfo.GetParamTypes(infoReader.amap, m))) + | _ -> None + + let GetXmlDocSigOfEvent infoReader m (einfo: EventInfo) = + match einfo with + | ILEvent _ -> + match metaInfoOfEntityRef infoReader m einfo.DeclaringTyconRef with + | Some (ccuFileName, _, formalTypeInfo) -> + Some(ccuFileName, "E:"+formalTypeInfo.ILTypeRef.FullName+"."+einfo.EventName) + | _ -> None + | _ -> None + + let GetXmlDocSigOfILFieldInfo infoReader m (finfo: ILFieldInfo) = + match metaInfoOfEntityRef infoReader m finfo.DeclaringTyconRef with + | Some (ccuFileName, _, formalTypeInfo) -> + Some(ccuFileName, "F:"+formalTypeInfo.ILTypeRef.FullName+"."+finfo.FieldName) + | _ -> None /// This function gets the signature to pass to Visual Studio to use its lookup functions for .NET stuff. let GetXmlDocHelpSigOfItemForLookup (infoReader: InfoReader) m d = let g = infoReader.g + match d with - | Item.ActivePatternCase (APElemRef(_, vref, _, _)) + | Item.ActivePatternCase (APElemRef(_, vref, _)) | Item.Value vref | Item.CustomBuilder (_, vref) -> mkXmlComment (GetXmlDocSigOfValRef g vref) - | Item.UnionCase (ucinfo, _) -> mkXmlComment (GetXmlDocSigOfUnionCaseRef ucinfo.UnionCaseRef) + | Item.UnionCase (ucinfo, _) -> mkXmlComment (GetXmlDocSigOfUnionCaseInfo ucinfo) | Item.ExnCase tcref -> mkXmlComment (GetXmlDocSigOfEntityRef infoReader m tcref) - | Item.RecdField rfinfo -> mkXmlComment (GetXmlDocSigOfRecdFieldRef rfinfo.RecdFieldRef) + | Item.RecdField rfinfo -> mkXmlComment (GetXmlDocSigOfRecdFieldInfo rfinfo) | Item.NewDef _ -> FSharpXmlDoc.None | Item.ILField finfo -> mkXmlComment (GetXmlDocSigOfILFieldInfo infoReader m finfo) | Item.Types(_, ((TType_app(tcref, _)) :: _)) -> mkXmlComment (GetXmlDocSigOfEntityRef infoReader m tcref) @@ -446,18 +648,18 @@ module internal SymbolHelpers = match argContainer with | ArgumentContainer.Method minfo -> mkXmlComment (GetXmlDocSigOfMethInfo infoReader m minfo) | ArgumentContainer.Type tcref -> mkXmlComment (GetXmlDocSigOfEntityRef infoReader m tcref) - | Item.UnionCaseField (ucinfo, _) -> mkXmlComment (GetXmlDocSigOfUnionCaseRef ucinfo.UnionCaseRef) + | Item.UnionCaseField (ucinfo, _) -> mkXmlComment (GetXmlDocSigOfUnionCaseInfo ucinfo) | _ -> FSharpXmlDoc.None - |> GetXmlDocFromLoader infoReader - /// Produce an XmlComment with a signature or raw text, given the F# comment and the item let GetXmlCommentForItemAux (xmlDoc: XmlDoc option) (infoReader: InfoReader) m d = match xmlDoc with | Some xmlDoc when not xmlDoc.IsEmpty -> - FSharpXmlDoc.FromXmlText xmlDoc + FSharpXmlDoc.Text (xmlDoc.UnprocessedLines, xmlDoc.GetElaboratedXmlLines()) | _ -> GetXmlDocHelpSigOfItemForLookup infoReader m d + let mutable ToolTipFault = None + let GetXmlCommentForMethInfoItem infoReader m d (minfo: MethInfo) = if minfo.HasDirectXmlComment || minfo.XmlDoc.NonEmpty then GetXmlCommentForItemAux (Some minfo.XmlDoc) infoReader m d @@ -468,6 +670,27 @@ module internal SymbolHelpers = [ for (tp, ty) in prettyTyparInst -> wordL (tagTypeParameter ("'" + tp.DisplayName)) ^^ wordL (tagText (FSComp.SR.descriptionWordIs())) ^^ NicePrint.layoutType denv ty ] + /// Generate the structured tooltip for a method info + let FormatOverloadsToList (infoReader: InfoReader) m denv (item: ItemWithInst) minfos : FSharpStructuredToolTipElement = + ToolTipFault |> Option.iter (fun msg -> + let exn = Error((0, msg), range.Zero) + let ph = PhasedDiagnostic.Create(exn, BuildPhase.TypeCheck) + simulateError ph) + + let layouts = + [ for minfo in minfos -> + let prettyTyparInst, layout = NicePrint.prettyLayoutOfMethInfoFreeStyle infoReader.amap m denv item.TyparInst minfo + let xml = GetXmlCommentForMethInfoItem infoReader m item.Item minfo + let tpsL = FormatTyparMapping denv prettyTyparInst + FSharpToolTipElementData<_>.Create(layout, xml, tpsL) ] + + FSharpStructuredToolTipElement.Group layouts + + + let pubpathOfValRef (v: ValRef) = v.PublicPath + let pubpathOfTyconRef (x: TyconRef) = x.PublicPath + + let (|ItemWhereTypIsPreferred|_|) item = match item with | Item.DelegateCtor ty @@ -541,24 +764,24 @@ module internal SymbolHelpers = MethInfo.MethInfosUseIdenticalDefinitions minfo1 minfo2) | (Item.Value vref1 | Item.CustomBuilder (_, vref1)), (Item.Value vref2 | Item.CustomBuilder (_, vref2)) -> valRefEq g vref1 vref2 - | Item.ActivePatternCase(APElemRef(_apinfo1, vref1, idx1, _)), Item.ActivePatternCase(APElemRef(_apinfo2, vref2, idx2, _)) -> + | Item.ActivePatternCase(APElemRef(_apinfo1, vref1, idx1)), Item.ActivePatternCase(APElemRef(_apinfo2, vref2, idx2)) -> idx1 = idx2 && valRefEq g vref1 vref2 | Item.UnionCase(UnionCaseInfo(_, ur1), _), Item.UnionCase(UnionCaseInfo(_, ur2), _) -> g.unionCaseRefEq ur1 ur2 | Item.RecdField(RecdFieldInfo(_, RecdFieldRef(tcref1, n1))), Item.RecdField(RecdFieldInfo(_, RecdFieldRef(tcref2, n2))) -> (tyconRefEq g tcref1 tcref2) && (n1 = n2) // there is no direct function as in the previous case | Item.Property(_, pi1s), Item.Property(_, pi2s) -> - (pi1s, pi2s) ||> List.forall2 (fun pi1 pi2 -> PropInfo.PropInfosUseIdenticalDefinitions pi1 pi2) + List.zip pi1s pi2s |> List.forall(fun (pi1, pi2) -> PropInfo.PropInfosUseIdenticalDefinitions pi1 pi2) | Item.Event evt1, Item.Event evt2 -> EventInfo.EventInfosUseIdenticalDefinitions evt1 evt2 | Item.AnonRecdField(anon1, _, i1, _), Item.AnonRecdField(anon2, _, i2, _) -> anonInfoEquiv anon1 anon2 && i1 = i2 | Item.CtorGroup(_, meths1), Item.CtorGroup(_, meths2) -> - (meths1, meths2) - ||> List.forall2 (fun minfo1 minfo2 -> MethInfo.MethInfosUseIdenticalDefinitions minfo1 minfo2) + List.zip meths1 meths2 + |> List.forall (fun (minfo1, minfo2) -> MethInfo.MethInfosUseIdenticalDefinitions minfo1 minfo2) | Item.UnqualifiedType tcRefs1, Item.UnqualifiedType tcRefs2 -> - (tcRefs1, tcRefs2) - ||> List.forall2 (fun tcRef1 tcRef2 -> tyconRefEq g tcRef1 tcRef2) + List.zip tcRefs1 tcRefs2 + |> List.forall (fun (tcRef1, tcRef2) -> tyconRefEq g tcRef1 tcRef2) | Item.Types(_, [TType.TType_app(tcRef1, _)]), Item.UnqualifiedType([tcRef2]) -> tyconRefEq g tcRef1 tcRef2 | Item.UnqualifiedType([tcRef1]), Item.Types(_, [TType.TType_app(tcRef2, _)]) -> tyconRefEq g tcRef1 tcRef2 | _ -> false) @@ -582,7 +805,7 @@ module internal SymbolHelpers = | Item.MethodGroup(_, meths, _) -> meths |> List.fold (fun st a -> st + a.ComputeHashCode()) 0 | Item.CtorGroup(name, meths) -> name.GetHashCode() + (meths |> List.fold (fun st a -> st + a.ComputeHashCode()) 0) | (Item.Value vref | Item.CustomBuilder (_, vref)) -> hash vref.LogicalName - | Item.ActivePatternCase(APElemRef(_apinfo, vref, idx, _)) -> hash (vref.LogicalName, idx) + | Item.ActivePatternCase(APElemRef(_apinfo, vref, idx)) -> hash (vref.LogicalName, idx) | Item.ExnCase tcref -> hash tcref.LogicalName | Item.UnionCase(UnionCaseInfo(_, UnionCaseRef(tcref, n)), _) -> hash(tcref.Stamp, n) | Item.RecdField(RecdFieldInfo(_, RecdFieldRef(tcref, n))) -> hash(tcref.Stamp, n) @@ -592,6 +815,14 @@ module internal SymbolHelpers = | Item.UnqualifiedType(tcref :: _) -> hash tcref.LogicalName | _ -> failwith "unreachable") } + let CompletionItemDisplayPartialEquality g = + let itemComparer = ItemDisplayPartialEquality g + + { new IPartialEqualityComparer with + member x.InEqualityRelation item = itemComparer.InEqualityRelation item.Item + member x.Equals(item1, item2) = itemComparer.Equals(item1.Item, item2.Item) + member x.GetHashCode item = itemComparer.GetHashCode(item.Item) } + let ItemWithTypeDisplayPartialEquality g = let itemComparer = ItemDisplayPartialEquality g @@ -600,11 +831,24 @@ module internal SymbolHelpers = member x.Equals((item1, _), (item2, _)) = itemComparer.Equals(item1, item2) member x.GetHashCode ((item, _)) = itemComparer.GetHashCode item } + // Remove items containing the same module references + let RemoveDuplicateModuleRefs modrefs = + modrefs |> IPartialEqualityComparer.partialDistinctBy + { new IPartialEqualityComparer with + member x.InEqualityRelation _ = true + member x.Equals(item1, item2) = (fullDisplayTextOfModRef item1 = fullDisplayTextOfModRef item2) + member x.GetHashCode item = hash item.Stamp } + /// Remove all duplicate items let RemoveDuplicateItems g (items: ItemWithInst list) = if isNil items then items else items |> IPartialEqualityComparer.partialDistinctBy (IPartialEqualityComparer.On (fun item -> item.Item) (ItemDisplayPartialEquality g)) + /// Remove all duplicate items + let RemoveDuplicateCompletionItems g items = + if isNil items then items else + items |> IPartialEqualityComparer.partialDistinctBy (CompletionItemDisplayPartialEquality g) + let IsExplicitlySuppressed (g: TcGlobals) (item: Item) = // This may explore assemblies that are not in the reference set. // In this case just assume the item is not suppressed. @@ -630,8 +874,13 @@ module internal SymbolHelpers = let RemoveExplicitlySuppressed (g: TcGlobals) (items: ItemWithInst list) = items |> List.filter (fun item -> not (IsExplicitlySuppressed g item.Item)) + /// Filter types that are explicitly suppressed from the IntelliSense (such as uppercase "FSharpList", "Option", etc.) + let RemoveExplicitlySuppressedCompletionItems (g: TcGlobals) (items: CompletionItem list) = + items |> List.filter (fun item -> not (IsExplicitlySuppressed g item.Item)) + let SimplerDisplayEnv denv = - { denv with shortConstraints=true + { denv with suppressInlineKeyword=true + shortConstraints=true showConstraintTyparAnnotations=false abbreviateAdditionalConstraints=false suppressNestedTypes=true @@ -759,8 +1008,6 @@ module internal SymbolHelpers = | _ -> GetXmlCommentForItemAux None infoReader m item - |> GetXmlDocFromLoader infoReader - let IsAttribute (infoReader: InfoReader) item = try let g = infoReader.g @@ -773,6 +1020,280 @@ module internal SymbolHelpers = | _ -> false with _ -> false + /// Output the quick info information of a language item + let rec FormatItemDescriptionToToolTipElement isListItem (infoReader: InfoReader) m denv (item: ItemWithInst) = + let g = infoReader.g + let amap = infoReader.amap + let denv = SimplerDisplayEnv denv + let xml = GetXmlCommentForItem infoReader m item.Item + match item.Item with + | Item.ImplicitOp(_, { contents = Some(TraitConstraintSln.FSMethSln(_, vref, _)) }) -> + // operator with solution + FormatItemDescriptionToToolTipElement isListItem infoReader m denv { item with Item = Item.Value vref } + + | Item.Value vref | Item.CustomBuilder (_, vref) -> + let prettyTyparInst, resL = NicePrint.layoutQualifiedValOrMember denv item.TyparInst vref.Deref + let remarks = OutputFullName isListItem pubpathOfValRef fullDisplayTextOfValRefAsLayout vref + let tpsL = FormatTyparMapping denv prettyTyparInst + FSharpStructuredToolTipElement.Single(resL, xml, tpsL, remarks=remarks) + + // Union tags (constructors) + | Item.UnionCase(ucinfo, _) -> + let uc = ucinfo.UnionCase + let rty = generalizedTyconRef ucinfo.TyconRef + let recd = uc.RecdFields + let layout = + wordL (tagText (FSComp.SR.typeInfoUnionCase())) ^^ + NicePrint.layoutTyconRef denv ucinfo.TyconRef ^^ + sepL (tagPunctuation ".") ^^ + wordL (tagUnionCase (DecompileOpName uc.Id.idText) |> mkNav uc.DefinitionRange) ^^ + RightL.colon ^^ + (if List.isEmpty recd then emptyL else NicePrint.layoutUnionCases denv recd ^^ WordL.arrow) ^^ + NicePrint.layoutType denv rty + FSharpStructuredToolTipElement.Single (layout, xml) + + // Active pattern tag inside the declaration (result) + | Item.ActivePatternResult(apinfo, ty, idx, _) -> + let items = apinfo.ActiveTags + let layout = + wordL (tagText ((FSComp.SR.typeInfoActivePatternResult()))) ^^ + wordL (tagActivePatternResult (List.item idx items) |> mkNav apinfo.Range) ^^ + RightL.colon ^^ + NicePrint.layoutType denv ty + FSharpStructuredToolTipElement.Single (layout, xml) + + // Active pattern tags + | Item.ActivePatternCase apref -> + let v = apref.ActivePatternVal + // Format the type parameters to get e.g. ('a -> 'a) rather than ('?1234 -> '?1234) + let tau = v.TauType + // REVIEW: use _cxs here + let (prettyTyparInst, ptau), _cxs = PrettyTypes.PrettifyInstAndType denv.g (item.TyparInst, tau) + let remarks = OutputFullName isListItem pubpathOfValRef fullDisplayTextOfValRefAsLayout v + let layout = + wordL (tagText (FSComp.SR.typeInfoActiveRecognizer())) ^^ + wordL (tagActivePatternCase apref.Name |> mkNav v.DefinitionRange) ^^ + RightL.colon ^^ + NicePrint.layoutType denv ptau + + let tpsL = FormatTyparMapping denv prettyTyparInst + + FSharpStructuredToolTipElement.Single (layout, xml, tpsL, remarks=remarks) + + // F# exception names + | Item.ExnCase ecref -> + let layout = NicePrint.layoutExnDef denv ecref.Deref + let remarks= OutputFullName isListItem pubpathOfTyconRef fullDisplayTextOfExnRefAsLayout ecref + FSharpStructuredToolTipElement.Single (layout, xml, remarks=remarks) + + | Item.RecdField rfinfo when rfinfo.TyconRef.IsExceptionDecl -> + let ty, _ = PrettyTypes.PrettifyType g rfinfo.FieldType + let id = rfinfo.RecdField.Id + let layout = + wordL (tagText (FSComp.SR.typeInfoArgument())) ^^ + wordL (tagParameter id.idText) ^^ + RightL.colon ^^ + NicePrint.layoutType denv ty + FSharpStructuredToolTipElement.Single (layout, xml, paramName = id.idText) + + // F# record field names + | Item.RecdField rfinfo -> + let rfield = rfinfo.RecdField + let ty, _cxs = PrettyTypes.PrettifyType g rfinfo.FieldType + let layout = + NicePrint.layoutTyconRef denv rfinfo.TyconRef ^^ + SepL.dot ^^ + wordL (tagRecordField (DecompileOpName rfield.Name) |> mkNav rfield.DefinitionRange) ^^ + RightL.colon ^^ + NicePrint.layoutType denv ty ^^ + ( + match rfinfo.LiteralValue with + | None -> emptyL + | Some lit -> try WordL.equals ^^ NicePrint.layoutConst denv.g ty lit with _ -> emptyL + ) + FSharpStructuredToolTipElement.Single (layout, xml) + + | Item.UnionCaseField (ucinfo, fieldIndex) -> + let rfield = ucinfo.UnionCase.GetFieldByIndex(fieldIndex) + let fieldTy, _ = PrettyTypes.PrettifyType g rfield.rfield_type + let id = rfield.Id + let layout = + wordL (tagText (FSComp.SR.typeInfoArgument())) ^^ + wordL (tagParameter id.idText) ^^ + RightL.colon ^^ + NicePrint.layoutType denv fieldTy + FSharpStructuredToolTipElement.Single (layout, xml, paramName = id.idText) + + // Not used + | Item.NewDef id -> + let layout = + wordL (tagText (FSComp.SR.typeInfoPatternVariable())) ^^ + wordL (tagUnknownEntity id.idText) + FSharpStructuredToolTipElement.Single (layout, xml) + + // .NET fields + | Item.ILField finfo -> + let layout = + wordL (tagText (FSComp.SR.typeInfoField())) ^^ + NicePrint.layoutType denv finfo.ApparentEnclosingAppType ^^ + SepL.dot ^^ + wordL (tagField finfo.FieldName) ^^ + RightL.colon ^^ + NicePrint.layoutType denv (finfo.FieldType(amap, m)) ^^ + ( + match finfo.LiteralValue with + | None -> emptyL + | Some v -> + WordL.equals ^^ + try NicePrint.layoutConst denv.g (finfo.FieldType(infoReader.amap, m)) (CheckExpressions.TcFieldInit m v) with _ -> emptyL + ) + FSharpStructuredToolTipElement.Single (layout, xml) + + // .NET events + | Item.Event einfo -> + let rty = PropTypOfEventInfo infoReader m AccessibleFromSomewhere einfo + let rty, _cxs = PrettyTypes.PrettifyType g rty + let layout = + wordL (tagText (FSComp.SR.typeInfoEvent())) ^^ + NicePrint.layoutTyconRef denv einfo.ApparentEnclosingTyconRef ^^ + SepL.dot ^^ + wordL (tagEvent einfo.EventName) ^^ + RightL.colon ^^ + NicePrint.layoutType denv rty + FSharpStructuredToolTipElement.Single (layout, xml) + + // F# and .NET properties + | Item.Property(_, pinfo :: _) -> + let layout = NicePrint.prettyLayoutOfPropInfoFreeStyle g amap m denv pinfo + FSharpStructuredToolTipElement.Single (layout, xml) + + // Custom operations in queries + | Item.CustomOperation (customOpName, usageText, Some minfo) -> + + // Build 'custom operation: where (bool) + // + // Calls QueryBuilder.Where' + let layout = + wordL (tagText (FSComp.SR.typeInfoCustomOperation())) ^^ + RightL.colon ^^ + ( + match usageText() with + | Some t -> wordL (tagText t) + | None -> + let argTys = ParamNameAndTypesOfUnaryCustomOperation g minfo |> List.map (fun (ParamNameAndType(_, ty)) -> ty) + let argTys, _ = PrettyTypes.PrettifyTypes g argTys + wordL (tagMethod customOpName) ^^ sepListL SepL.space (List.map (fun ty -> LeftL.leftParen ^^ NicePrint.layoutType denv ty ^^ SepL.rightParen) argTys) + ) ^^ + SepL.lineBreak ^^ SepL.lineBreak ^^ + wordL (tagText (FSComp.SR.typeInfoCallsWord())) ^^ + NicePrint.layoutTyconRef denv minfo.ApparentEnclosingTyconRef ^^ + SepL.dot ^^ + wordL (tagMethod minfo.DisplayName) + + FSharpStructuredToolTipElement.Single (layout, xml) + + // F# constructors and methods + | Item.CtorGroup(_, minfos) + | Item.MethodGroup(_, minfos, _) -> + FormatOverloadsToList infoReader m denv item minfos + + // The 'fake' zero-argument constructors of .NET interfaces. + // This ideally should never appear in intellisense, but we do get here in repros like: + // type IFoo = abstract F : int + // type II = IFoo // remove 'type II = ' and quickly hover over IFoo before it gets squiggled for 'invalid use of interface type' + // and in that case we'll just show the interface type name. + | Item.FakeInterfaceCtor ty -> + let ty, _ = PrettyTypes.PrettifyType g ty + let layout = NicePrint.layoutTyconRef denv (tcrefOfAppTy g ty) + FSharpStructuredToolTipElement.Single(layout, xml) + + // The 'fake' representation of constructors of .NET delegate types + | Item.DelegateCtor delty -> + let delty, _cxs = PrettyTypes.PrettifyType g delty + let (SigOfFunctionForDelegate(_, _, _, fty)) = GetSigOfFunctionForDelegate infoReader delty m AccessibleFromSomewhere + let layout = + NicePrint.layoutTyconRef denv (tcrefOfAppTy g delty) ^^ + LeftL.leftParen ^^ + NicePrint.layoutType denv fty ^^ + RightL.rightParen + FSharpStructuredToolTipElement.Single(layout, xml) + + // Types. + | Item.Types(_, ((TType_app(tcref, _)) :: _)) + | Item.UnqualifiedType (tcref :: _) -> + let denv = { denv with shortTypeNames = true } + let layout = NicePrint.layoutTycon denv infoReader AccessibleFromSomewhere m (* width *) tcref.Deref + let remarks = OutputFullName isListItem pubpathOfTyconRef fullDisplayTextOfTyconRefAsLayout tcref + FSharpStructuredToolTipElement.Single (layout, xml, remarks=remarks) + + // F# Modules and namespaces + | Item.ModuleOrNamespaces((modref :: _) as modrefs) -> + //let os = StringBuilder() + let modrefs = modrefs |> RemoveDuplicateModuleRefs + let definiteNamespace = modrefs |> List.forall (fun modref -> modref.IsNamespace) + let kind = + if definiteNamespace then FSComp.SR.typeInfoNamespace() + elif modrefs |> List.forall (fun modref -> modref.IsModule) then FSComp.SR.typeInfoModule() + else FSComp.SR.typeInfoNamespaceOrModule() + + let layout = + wordL (tagKeyword kind) ^^ + (if definiteNamespace then tagNamespace (fullDisplayTextOfModRef modref) else (tagModule modref.DemangledModuleOrNamespaceName) + |> mkNav modref.DefinitionRange + |> wordL) + if not definiteNamespace then + let namesToAdd = + ([], modrefs) + ||> Seq.fold (fun st modref -> + match fullDisplayTextOfParentOfModRef modref with + | ValueSome txt -> txt :: st + | _ -> st) + |> Seq.mapi (fun i x -> i, x) + |> Seq.toList + let layout = + layout ^^ + ( + if not (List.isEmpty namesToAdd) then + SepL.lineBreak ^^ + List.fold ( fun s (i, txt) -> + s ^^ + SepL.lineBreak ^^ + wordL (tagText ((if i = 0 then FSComp.SR.typeInfoFromFirst else FSComp.SR.typeInfoFromNext) txt)) + ) emptyL namesToAdd + else + emptyL + ) + FSharpStructuredToolTipElement.Single (layout, xml) + else + FSharpStructuredToolTipElement.Single (layout, xml) + + | Item.AnonRecdField(anon, argTys, i, _) -> + let argTy = argTys.[i] + let nm = anon.SortedNames.[i] + let argTy, _ = PrettyTypes.PrettifyType g argTy + let layout = + wordL (tagText (FSComp.SR.typeInfoAnonRecdField())) ^^ + wordL (tagRecordField nm) ^^ + RightL.colon ^^ + NicePrint.layoutType denv argTy + FSharpStructuredToolTipElement.Single (layout, FSharpXmlDoc.None) + + // Named parameters + | Item.ArgName (id, argTy, _) -> + let argTy, _ = PrettyTypes.PrettifyType g argTy + let layout = + wordL (tagText (FSComp.SR.typeInfoArgument())) ^^ + wordL (tagParameter id.idText) ^^ + RightL.colon ^^ + NicePrint.layoutType denv argTy + FSharpStructuredToolTipElement.Single (layout, xml, paramName = id.idText) + + | Item.SetterArg (_, item) -> + FormatItemDescriptionToToolTipElement isListItem infoReader m denv (ItemWithNoInst item) + + | _ -> + FSharpStructuredToolTipElement.None + #if !NO_EXTENSIONTYPING /// Determine if an item is a provided type @@ -807,6 +1328,7 @@ module internal SymbolHelpers = | _ -> None | _ -> None + let (|ItemIsProvidedMethodWithStaticArguments|_|) item = match item with // Prefer the static parameters from the uninstantiated method info @@ -983,6 +1505,13 @@ module internal SymbolHelpers = | Item.ActivePatternResult _ // "let (|Foo|Bar|) = .. Fo$o ..." - no keyword -> None + + /// Format the structured version of a tooltip for an item + let FormatStructuredDescriptionOfItem isDecl infoReader m denv item = + ErrorScope.Protect m + (fun () -> FormatItemDescriptionToToolTipElement isDecl infoReader m denv item) + (fun err -> FSharpStructuredToolTipElement.CompositionError err) + /// Get rid of groups of overloads an replace them with single items. let FlattenItems g (m: range) item = ignore m diff --git a/src/fsharp/symbols/SymbolHelpers.fsi b/src/fsharp/symbols/SymbolHelpers.fsi index 760798ba036..22537757271 100755 --- a/src/fsharp/symbols/SymbolHelpers.fsi +++ b/src/fsharp/symbols/SymbolHelpers.fsi @@ -4,167 +4,245 @@ // Helpers for quick info and information about items //---------------------------------------------------------------------------- -namespace FSharp.Compiler.Diagnostics +namespace FSharp.Compiler.SourceCodeServices + +open System +open FSharp.Compiler +open FSharp.Compiler.Range +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Infos +open FSharp.Compiler.NameResolution +open FSharp.Compiler.InfoReader +open FSharp.Compiler.TypedTree +open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.ErrorLogger + +[] +type public FSharpErrorSeverity = + | Warning + | Error + +/// Object model for diagnostics +[] +type public FSharpErrorInfo = + member FileName: string + member Start: pos + member End: pos + member StartLineAlternate: int + member EndLineAlternate: int + member StartColumn: int + member EndColumn: int + + member Range: range + member Severity: FSharpErrorSeverity + member Message: string + member Subcategory: string + member ErrorNumber: int + + static member internal CreateFromExceptionAndAdjustEof: PhasedDiagnostic * isError: bool * range * lastPosInFile: (int*int) * suggestNames: bool -> FSharpErrorInfo + static member internal CreateFromException: PhasedDiagnostic * isError: bool * range * suggestNames: bool -> FSharpErrorInfo + +/// Describe a comment as either a block of text or a file+signature reference into an intellidoc file. +// +// Note: instances of this type do not hold any references to any compiler resources. +[] +type public FSharpXmlDoc = + /// No documentation is available + | None + + /// The text for documentation for in-memory references. Here unprocessedText is the `\n` concatenated + /// text of the original source and processsedXmlLines is the + /// XML produced after all checking and processing by the F# compiler, including + /// insertion of summary tags, encoding and resolving of cross-references if + // supported. + | Text of unprocessedLines: string[] * elaboratedXmlLines: string[] - open System - open FSharp.Compiler.Text - open FSharp.Compiler.ErrorLogger + /// Indicates that the XML for the documentation can be found in a .xml documentation file, using the given signature key + | XmlDocFileSignature of (*File:*) string * (*Signature:*)string - /// Represents a diagnostic produced by the F# compiler - [] - type public FSharpDiagnostic = +type public Layout = Internal.Utilities.StructuredFormat.Layout - /// Gets the file name for the diagnostic - member FileName: string +/// A single data tip display element +[] +type public FSharpToolTipElementData<'T> = + { + MainDescription: 'T - /// Gets the start position for the diagnostic - member Start: Position + XmlDoc: FSharpXmlDoc - /// Gets the end position for the diagnostic - member End: Position + /// typar instantiation text, to go after xml + TypeMapping: 'T list - /// Gets the start column for the diagnostic - member StartColumn: int + /// Extra text, goes at the end + Remarks: 'T option - /// Gets the end column for the diagnostic - member EndColumn: int + /// Parameter name + ParamName : string option + } - /// Gets the start column for the diagnostic - member StartLine: int +/// A single tool tip display element +// +// Note: instances of this type do not hold any references to any compiler resources. +[] +type public FSharpToolTipElement<'T> = + | None - /// Gets the end column for the diagnostic - member EndLine: int + /// A single type, method, etc with comment. May represent a method overload group. + | Group of FSharpToolTipElementData<'T> list - /// Gets the range for the diagnostic - member Range: range + /// An error occurred formatting this element + | CompositionError of string + static member Single : 'T * FSharpXmlDoc * ?typeMapping: 'T list * ?paramName: string * ?remarks : 'T -> FSharpToolTipElement<'T> - /// Gets the severity for the diagnostic - member Severity: FSharpDiagnosticSeverity +/// A single data tip display element with where text is expressed as string +type public FSharpToolTipElement = FSharpToolTipElement - /// Gets the message for the diagnostic - member Message: string +/// A single data tip display element with where text is expressed as +type public FSharpStructuredToolTipElement = FSharpToolTipElement - /// Gets the sub-category for the diagnostic - member Subcategory: string +/// Information for building a tool tip box. +// +// Note: instances of this type do not hold any references to any compiler resources. +type public FSharpToolTipText<'T> = - /// Gets the number for the diagnostic - member ErrorNumber: int + /// A list of data tip elements to display. + | FSharpToolTipText of FSharpToolTipElement<'T> list - /// Gets the number prefix for the diagnostic, usually "FS" but may differ for analyzers - member ErrorNumberPrefix: string +type public FSharpToolTipText = FSharpToolTipText - /// Gets the full error number text e.g "FS0031" - member ErrorNumberText: string +type public FSharpStructuredToolTipText = FSharpToolTipText - /// Creates a diagnostic, e.g. for reporting from an analyzer - static member Create: severity: FSharpDiagnosticSeverity * message: string * number: int * range: range * ?numberPrefix: string * ?subcategory: string -> FSharpDiagnostic +[] +type public CompletionItemKind = + | Field + | Property + | Method of isExtension : bool + | Event + | Argument + | CustomOperation + | Other - static member internal CreateFromExceptionAndAdjustEof: PhasedDiagnostic * severity: FSharpDiagnosticSeverity * range * lastPosInFile: (int*int) * suggestNames: bool -> FSharpDiagnostic +type UnresolvedSymbol = + { + FullName: string - static member internal CreateFromException: PhasedDiagnostic * severity: FSharpDiagnosticSeverity * range * suggestNames: bool -> FSharpDiagnostic + DisplayName: string - /// Newlines are recognized and replaced with (ASCII 29, the 'group separator'), - /// which is decoded by the IDE with 'NewlineifyErrorString' back into newlines, so that multi-line errors can be displayed in QuickInfo - static member NewlineifyErrorString: message:string -> string + Namespace: string[] + } - /// Newlines are recognized and replaced with (ASCII 29, the 'group separator'), - /// which is decoded by the IDE with 'NewlineifyErrorString' back into newlines, so that multi-line errors can be displayed in QuickInfo - static member NormalizeErrorString: text:string -> string +type internal CompletionItem = + { + ItemWithInst: ItemWithInst - //---------------------------------------------------------------------------- - // Internal only + Kind: CompletionItemKind - // Implementation details used by other code in the compiler - [] - type internal ErrorScope = - interface IDisposable - new : unit -> ErrorScope - member Diagnostics : FSharpDiagnostic list - static member Protect<'a> : range -> (unit->'a) -> (string->'a) -> 'a + IsOwnMember: bool - /// An error logger that capture errors, filtering them according to warning levels etc. - type internal CompilationErrorLogger = - inherit ErrorLogger + MinorPriority: int - /// Create the diagnostics logger - new: debugName:string * options: FSharpDiagnosticOptions -> CompilationErrorLogger - - /// Get the captured diagnostics - member GetDiagnostics: unit -> (PhasedDiagnostic * FSharpDiagnosticSeverity)[] + Type: TyconRef option - module internal DiagnosticHelpers = - val ReportDiagnostic: FSharpDiagnosticOptions * allErrors: bool * mainInputFileName: string * fileInfo: (int * int) * (PhasedDiagnostic * FSharpDiagnosticSeverity) * suggestNames: bool -> FSharpDiagnostic list + Unresolved: UnresolvedSymbol option + } + member Item : Item - val CreateDiagnostics: FSharpDiagnosticOptions * allErrors: bool * mainInputFileName: string * seq<(PhasedDiagnostic * FSharpDiagnosticSeverity)> * suggestNames: bool -> FSharpDiagnostic[] +module public Tooltips = -namespace FSharp.Compiler.Symbols + val ToFSharpToolTipElement: FSharpStructuredToolTipElement -> FSharpToolTipElement - open Internal.Utilities.Library - open FSharp.Compiler - open FSharp.Compiler.TcGlobals - open FSharp.Compiler.Infos - open FSharp.Compiler.NameResolution - open FSharp.Compiler.InfoReader - open FSharp.Compiler.Syntax - open FSharp.Compiler.Text - open FSharp.Compiler.Xml - open FSharp.Compiler.TypedTree - open FSharp.Compiler.TypedTreeOps + val ToFSharpToolTipText: FSharpStructuredToolTipText -> FSharpToolTipText - /// Describe a comment as either a block of text or a file+signature reference into an intellidoc file. - // - // Note: instances of this type do not hold any references to any compiler resources. - [] - type public FSharpXmlDoc = - /// No documentation is available - | None +// Implementation details used by other code in the compiler +module internal SymbolHelpers = + val ParamNameAndTypesOfUnaryCustomOperation : TcGlobals -> MethInfo -> ParamNameAndType list - /// The text for documentation for in-memory references. - | FromXmlText of XmlDoc + val GetXmlDocSigOfEntityRef : InfoReader -> range -> EntityRef -> (string option * string) option - /// Indicates that the XML for the documentation can be found in a .xml documentation file for the given DLL, using the given signature key - | FromXmlFile of dllName: string * xmlSig: string + val GetXmlDocSigOfScopedValRef : TcGlobals -> TyconRef -> ValRef -> (string option * string) option + val GetXmlDocSigOfILFieldInfo : InfoReader -> range -> ILFieldInfo -> (string option * string) option - // Implementation details used by other code in the compiler - module internal SymbolHelpers = - val ParamNameAndTypesOfUnaryCustomOperation : TcGlobals -> MethInfo -> ParamNameAndType list + val GetXmlDocSigOfRecdFieldInfo : RecdFieldInfo -> (string option * string) option - val GetXmlCommentForItem : InfoReader -> range -> Item -> FSharpXmlDoc + val GetXmlDocSigOfUnionCaseInfo : UnionCaseInfo -> (string option * string) option - val RemoveDuplicateItems : TcGlobals -> ItemWithInst list -> ItemWithInst list + val GetXmlDocSigOfMethInfo : InfoReader -> range -> MethInfo -> (string option * string) option - val RemoveExplicitlySuppressed : TcGlobals -> ItemWithInst list -> ItemWithInst list + val GetXmlDocSigOfValRef : TcGlobals -> ValRef -> (string option * string) option - val GetF1Keyword : TcGlobals -> Item -> string option + val GetXmlDocSigOfProp : InfoReader -> range -> PropInfo -> (string option * string) option - val rangeOfItem : TcGlobals -> bool option -> Item -> range option + val GetXmlDocSigOfEvent : InfoReader -> range -> EventInfo -> (string option * string) option - val fileNameOfItem : TcGlobals -> string option -> range -> Item -> string + val GetXmlCommentForItem : InfoReader -> range -> Item -> FSharpXmlDoc - val FullNameOfItem : TcGlobals -> Item -> string + val FormatStructuredDescriptionOfItem : isDecl:bool -> InfoReader -> range -> DisplayEnv -> ItemWithInst -> FSharpStructuredToolTipElement - val ccuOfItem : TcGlobals -> Item -> CcuThunk option + val RemoveDuplicateItems : TcGlobals -> ItemWithInst list -> ItemWithInst list - val IsAttribute : InfoReader -> Item -> bool + val RemoveExplicitlySuppressed : TcGlobals -> ItemWithInst list -> ItemWithInst list - val IsExplicitlySuppressed : TcGlobals -> Item -> bool + val RemoveDuplicateCompletionItems : TcGlobals -> CompletionItem list -> CompletionItem list - val FlattenItems : TcGlobals -> range -> Item -> Item list + val RemoveExplicitlySuppressedCompletionItems : TcGlobals -> CompletionItem list -> CompletionItem list -#if !NO_EXTENSIONTYPING - val (|ItemIsProvidedType|_|) : TcGlobals -> Item -> TyconRef option + val GetF1Keyword : TcGlobals -> Item -> string option - val (|ItemIsWithStaticArguments|_|): range -> TcGlobals -> Item -> Tainted[] option + val rangeOfItem : TcGlobals -> bool option -> Item -> range option - val (|ItemIsProvidedTypeWithStaticArguments|_|): range -> TcGlobals -> Item -> Tainted[] option -#endif + val fileNameOfItem : TcGlobals -> string option -> range -> Item -> string + + val FullNameOfItem : TcGlobals -> Item -> string + + val ccuOfItem : TcGlobals -> Item -> CcuThunk option + + val mutable ToolTipFault : string option + + val IsAttribute : InfoReader -> Item -> bool - val SimplerDisplayEnv : DisplayEnv -> DisplayEnv + val IsExplicitlySuppressed : TcGlobals -> Item -> bool - val ItemDisplayPartialEquality: g:TcGlobals -> IPartialEqualityComparer + val FlattenItems : TcGlobals -> range -> Item -> Item list - val GetXmlCommentForMethInfoItem: infoReader:InfoReader -> m:range -> d:Item -> minfo:MethInfo -> FSharpXmlDoc - - val FormatTyparMapping: denv:DisplayEnv -> prettyTyparInst:TyparInst -> Layout list +#if !NO_EXTENSIONTYPING + val (|ItemIsProvidedType|_|) : TcGlobals -> Item -> TyconRef option + + val (|ItemIsWithStaticArguments|_|): range -> TcGlobals -> Item -> Tainted[] option + + val (|ItemIsProvidedTypeWithStaticArguments|_|): range -> TcGlobals -> Item -> Tainted[] option +#endif + val SimplerDisplayEnv : DisplayEnv -> DisplayEnv + +//---------------------------------------------------------------------------- +// Internal only + +// Implementation details used by other code in the compiler +[] +type internal ErrorScope = + interface IDisposable + new : unit -> ErrorScope + member Diagnostics : FSharpErrorInfo list + static member Protect<'a> : range -> (unit->'a) -> (string->'a) -> 'a + +/// An error logger that capture errors, filtering them according to warning levels etc. +type internal CompilationErrorLogger = + inherit ErrorLogger + + /// Create the error logger + new: debugName:string * options: FSharpErrorSeverityOptions -> CompilationErrorLogger + + /// Get the captured errors + member GetErrors: unit -> (PhasedDiagnostic * FSharpErrorSeverity)[] + +/// This represents the global state established as each task function runs as part of the build. +/// +/// Use to reset error and warning handlers. +type internal CompilationGlobalsScope = + new : ErrorLogger * BuildPhase -> CompilationGlobalsScope + interface IDisposable + +module internal ErrorHelpers = + val ReportError: FSharpErrorSeverityOptions * allErrors: bool * mainInputFileName: string * fileInfo: (int * int) * (PhasedDiagnostic * FSharpErrorSeverity) * suggestNames: bool -> FSharpErrorInfo list + val CreateErrorInfos: FSharpErrorSeverityOptions * allErrors: bool * mainInputFileName: string * seq<(PhasedDiagnostic * FSharpErrorSeverity)> * suggestNames: bool -> FSharpErrorInfo[] diff --git a/src/fsharp/symbols/SymbolPatterns.fs b/src/fsharp/symbols/SymbolPatterns.fs index fe4c8f32c57..fc6fce634ec 100644 --- a/src/fsharp/symbols/SymbolPatterns.fs +++ b/src/fsharp/symbols/SymbolPatterns.fs @@ -1,20 +1,28 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.Symbols +namespace FSharp.Compiler.SourceCodeServices open System.Text.RegularExpressions -open Internal.Utilities.Library -open FSharp.Compiler.Syntax +open FSharp.Compiler +open FSharp.Compiler.AbstractIL.Internal.Library /// Patterns over FSharpSymbol and derivatives. [] -module FSharpSymbolPatterns = +module Symbol = + + let isAttribute<'T> (attribute: FSharpAttribute) = + // CompiledName throws exception on DataContractAttribute generated by SQLProvider + try attribute.AttributeType.CompiledName = typeof<'T>.Name with _ -> false + + let tryGetAttribute<'T> (attributes: seq) = + attributes |> Seq.tryFind isAttribute<'T> module Option = let attempt f = try Some(f()) with _ -> None let hasModuleSuffixAttribute (entity: FSharpEntity) = - entity.TryGetAttribute() + entity.Attributes + |> tryGetAttribute |> Option.bind (fun a -> Option.attempt (fun _ -> a.ConstructorArguments) |> Option.bind (fun args -> args |> Seq.tryPick (fun (_, arg) -> @@ -50,6 +58,11 @@ module FSharpSymbolPatterns = | abbreviatedType -> entity, Some abbreviatedType else entity, None + let rec getAbbreviatedType (fsharpType: FSharpType) = + if fsharpType.IsAbbreviation then + getAbbreviatedType fsharpType.AbbreviatedType + else fsharpType + let (|Attribute|_|) (entity: FSharpEntity) = let isAttribute (entity: FSharpEntity) = let getBaseType (entity: FSharpEntity) = @@ -68,8 +81,11 @@ module FSharpSymbolPatterns = isAttributeType (Some entity) if isAttribute entity then Some() else None + let hasAttribute<'T> (attributes: seq) = + attributes |> Seq.exists isAttribute<'T> + let (|ValueType|_|) (e: FSharpEntity) = - if e.IsEnum || e.IsValueType || e.HasAttribute() then Some() + if e.IsEnum || e.IsValueType || hasAttribute e.Attributes then Some() else None #if !NO_EXTENSIONTYPING @@ -84,17 +100,12 @@ module FSharpSymbolPatterns = #endif let (|Record|_|) (e: FSharpEntity) = if e.IsFSharpRecord then Some() else None - let (|UnionType|_|) (e: FSharpEntity) = if e.IsFSharpUnion then Some() else None - let (|Delegate|_|) (e: FSharpEntity) = if e.IsDelegate then Some() else None - let (|FSharpException|_|) (e: FSharpEntity) = if e.IsFSharpExceptionDeclaration then Some() else None - let (|Interface|_|) (e: FSharpEntity) = if e.IsInterface then Some() else None - let (|AbstractClass|_|) (e: FSharpEntity) = - if e.HasAttribute() then Some() else None + if hasAttribute e.Attributes then Some() else None let (|FSharpType|_|) (e: FSharpEntity) = if e.IsDelegate || e.IsFSharpExceptionDeclaration || e.IsFSharpRecord || e.IsFSharpUnion @@ -110,24 +121,20 @@ module FSharpSymbolPatterns = #endif let (|ByRef|_|) (e: FSharpEntity) = if e.IsByRef then Some() else None - let (|Array|_|) (e: FSharpEntity) = if e.IsArrayType then Some() else None - let (|FSharpModule|_|) (entity: FSharpEntity) = if entity.IsFSharpModule then Some() else None let (|Namespace|_|) (entity: FSharpEntity) = if entity.IsNamespace then Some() else None - #if !NO_EXTENSIONTYPING let (|ProvidedAndErasedType|_|) (entity: FSharpEntity) = if entity.IsProvidedAndErased then Some() else None #endif - let (|Enum|_|) (entity: FSharpEntity) = if entity.IsEnum then Some() else None let (|Tuple|_|) (ty: FSharpType) = if ty.IsTupleType then Some() else None let (|RefCell|_|) (ty: FSharpType) = - match ty.StripAbbreviations() with + match getAbbreviatedType ty with | TypeWithDefinition def when def.IsFSharpRecord && def.FullName = "Microsoft.FSharp.Core.FSharpRef`1" -> Some() | _ -> None @@ -142,9 +149,10 @@ module FSharpSymbolPatterns = | :? FSharpActivePatternCase -> Some() | _ -> None + /// Field (field, fieldAbbreviatedType) let (|Field|_|) (symbol: FSharpSymbol) = match symbol with - | :? FSharpField as field -> Some (field, field.FieldType.StripAbbreviations()) + | :? FSharpField as field -> Some (field, getAbbreviatedType field.FieldType) | _ -> None let (|MutableVar|_|) (symbol: FSharpSymbol) = @@ -199,7 +207,7 @@ module FSharpSymbolPatterns = | _ -> None let (|Function|_|) excluded (func: FSharpMemberOrFunctionOrValue) = - try let ty = func.FullType.StripAbbreviations() + try let ty = func.FullType |> getAbbreviatedType if ty.IsFunctionType && not func.IsPropertyGetterMethod && not func.IsPropertySetterMethod diff --git a/src/fsharp/symbols/SymbolPatterns.fsi b/src/fsharp/symbols/SymbolPatterns.fsi index a99c977c5ef..a0209cae219 100644 --- a/src/fsharp/symbols/SymbolPatterns.fsi +++ b/src/fsharp/symbols/SymbolPatterns.fsi @@ -1,91 +1,97 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.Symbols +namespace FSharp.Compiler.SourceCodeServices /// Patterns over FSharpSymbol and derivatives. -[] -module public FSharpSymbolPatterns = +[] +module public Symbol = - val (|AbbreviatedType|_|): FSharpEntity -> FSharpType option + val isAttribute<'T> : FSharpAttribute -> bool - val (|TypeWithDefinition|_|): FSharpType -> FSharpEntity option + val tryGetAttribute<'T> : seq -> FSharpAttribute option - val (|Attribute|_|): FSharpEntity -> unit option + val hasModuleSuffixAttribute : FSharpEntity -> bool - val (|ValueType|_|): FSharpEntity -> unit option + val isOperator : name: string -> bool - val (|Class|_|): original: FSharpEntity * abbreviated: FSharpEntity * 'a -> unit option + val isUnnamedUnionCaseField : FSharpField -> bool - val (|Record|_|): FSharpEntity -> unit option + val (|AbbreviatedType|_|) : FSharpEntity -> FSharpType option - val (|UnionType|_|): FSharpEntity -> unit option + val (|TypeWithDefinition|_|) : FSharpType -> FSharpEntity option - val (|Delegate|_|): FSharpEntity -> unit option + val getEntityAbbreviatedType : FSharpEntity -> (FSharpEntity * FSharpType option) - val (|FSharpException|_|): FSharpEntity -> unit option + val getAbbreviatedType : FSharpType -> FSharpType - val (|Interface|_|): FSharpEntity -> unit option + val (|Attribute|_|) : FSharpEntity -> unit option - val (|AbstractClass|_|): FSharpEntity -> unit option + val hasAttribute<'T> : seq -> bool - val (|FSharpType|_|): FSharpEntity -> unit option + val (|ValueType|_|) : FSharpEntity -> unit option -#if !NO_EXTENSIONTYPING - val (|ProvidedType|_|): FSharpEntity -> unit option -#endif + val (|Class|_|) : original: FSharpEntity * abbreviated: FSharpEntity * 'a -> unit option + + val (|Record|_|) : FSharpEntity -> unit option + + val (|UnionType|_|) : FSharpEntity -> unit option + + val (|Delegate|_|) : FSharpEntity -> unit option - val (|ByRef|_|): FSharpEntity -> unit option + val (|FSharpException|_|) : FSharpEntity -> unit option - val (|Array|_|): FSharpEntity -> unit option + val (|Interface|_|) : FSharpEntity -> unit option - val (|FSharpModule|_|): FSharpEntity -> unit option + val (|AbstractClass|_|) : FSharpEntity -> unit option - val (|Namespace|_|): FSharpEntity -> unit option + val (|FSharpType|_|) : FSharpEntity -> unit option #if !NO_EXTENSIONTYPING - val (|ProvidedAndErasedType|_|): FSharpEntity -> unit option -#endif + val (|ProvidedType|_|) : FSharpEntity -> unit option +#endif - val (|Enum|_|): FSharpEntity -> unit option + val (|ByRef|_|) : FSharpEntity -> unit option - val (|Tuple|_|): FSharpType -> unit option + val (|Array|_|) : FSharpEntity -> unit option - val (|RefCell|_|): FSharpType -> unit option + val (|FSharpModule|_|) : FSharpEntity -> unit option - val (|FunctionType|_|): FSharpType -> unit option + val (|Namespace|_|) : FSharpEntity -> unit option - val (|Pattern|_|): FSharpSymbol -> unit option +#if !NO_EXTENSIONTYPING + val (|ProvidedAndErasedType|_|) : FSharpEntity -> unit option +#endif - val (|Field|_|): FSharpSymbol -> (FSharpField * FSharpType) option + val (|Enum|_|) : FSharpEntity -> unit option - val (|MutableVar|_|): FSharpSymbol -> unit option + val (|Tuple|_|) : FSharpType -> unit option - /// Returns (originalEntity, abbreviatedEntity, abbreviatedType) - val (|FSharpEntity|_|): FSharpSymbol -> (FSharpEntity * FSharpEntity * FSharpType option) option + val (|RefCell|_|) : FSharpType -> unit option - val (|Parameter|_|): FSharpSymbol -> unit option + val (|FunctionType|_|) : FSharpType -> unit option - val (|UnionCase|_|): FSharpSymbol -> FSharpUnionCase option + val (|Pattern|_|) : FSharpSymbol -> unit option - val (|RecordField|_|): FSharpSymbol -> FSharpField option + val (|Field|_|) : FSharpSymbol -> (FSharpField * FSharpType) option - val (|ActivePatternCase|_|): FSharpSymbol -> FSharpActivePatternCase option + val (|MutableVar|_|) : FSharpSymbol -> unit option - val (|MemberFunctionOrValue|_|): FSharpSymbol -> FSharpMemberOrFunctionOrValue option + val (|FSharpEntity|_|) : FSharpSymbol -> (FSharpEntity * FSharpEntity * FSharpType option) option - val (|Constructor|_|): FSharpMemberOrFunctionOrValue -> FSharpEntity option + val (|Parameter|_|) : FSharpSymbol -> unit option - val (|Function|_|): excluded: bool -> FSharpMemberOrFunctionOrValue -> unit option + val (|UnionCase|_|) : FSharpSymbol -> FSharpUnionCase option - val (|ExtensionMember|_|): FSharpMemberOrFunctionOrValue -> unit option + val (|RecordField|_|) : FSharpSymbol -> FSharpField option - val (|Event|_|): FSharpMemberOrFunctionOrValue -> unit option + val (|ActivePatternCase|_|) : FSharpSymbol -> FSharpActivePatternCase option - val internal hasModuleSuffixAttribute: FSharpEntity -> bool + val (|MemberFunctionOrValue|_|) : FSharpSymbol -> FSharpMemberOrFunctionOrValue option - val internal isOperator: name: string -> bool + val (|Constructor|_|) : FSharpMemberOrFunctionOrValue -> FSharpEntity option - val internal isUnnamedUnionCaseField: FSharpField -> bool + val (|Function|_|) : excluded: bool -> FSharpMemberOrFunctionOrValue -> unit option - val internal getEntityAbbreviatedType: FSharpEntity -> (FSharpEntity * FSharpType option) + val (|ExtensionMember|_|) : FSharpMemberOrFunctionOrValue -> unit option + val (|Event|_|) : FSharpMemberOrFunctionOrValue -> unit option \ No newline at end of file diff --git a/src/fsharp/symbols/Symbols.fs b/src/fsharp/symbols/Symbols.fs index 0cf4f677a4f..fd1ecb73e88 100644 --- a/src/fsharp/symbols/Symbols.fs +++ b/src/fsharp/symbols/Symbols.fs @@ -1,12 +1,11 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace rec FSharp.Compiler.Symbols +namespace rec FSharp.Compiler.SourceCodeServices -open System open System.Collections.Generic -open Internal.Utilities.Collections -open Internal.Utilities.Library + open FSharp.Compiler +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AttributeChecking open FSharp.Compiler.AccessibilityLogic @@ -14,18 +13,18 @@ open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerImports open FSharp.Compiler.Infos open FSharp.Compiler.InfoReader +open FSharp.Compiler.Lib open FSharp.Compiler.NameResolution -open FSharp.Compiler.Syntax +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.Syntax.PrettyNaming -open FSharp.Compiler.AbstractIL +open FSharp.Compiler.XmlDoc + +open Internal.Utilities type FSharpAccessibility(a:Accessibility, ?isProtected) = let isProtected = defaultArg isProtected false @@ -84,7 +83,7 @@ module Impl = System.Collections.ObjectModel.ReadOnlyCollection<_>(Seq.toArray arr) :> IList<_> let makeXmlDoc (doc: XmlDoc) = - FSharpXmlDoc.FromXmlText doc + makeReadOnlyCollection doc.UnprocessedLines let makeElaboratedXmlDoc (doc: XmlDoc) = makeReadOnlyCollection (doc.GetElaboratedXmlLines()) @@ -197,7 +196,7 @@ module Impl = let getXmlDocSigForEntity (cenv: SymbolEnv) (ent:EntityRef)= - match GetXmlDocSigOfEntityRef cenv.infoReader ent.Range ent with + match SymbolHelpers.GetXmlDocSigOfEntityRef cenv.infoReader ent.Range ent with | Some (_, docsig) -> docsig | _ -> "" @@ -239,9 +238,9 @@ type FSharpSymbol(cenv: SymbolEnv, item: (unit -> Item), access: (FSharpSymbol - member x.GetEffectivelySameAsHash() = ItemsAreEffectivelyEqualHash cenv.g x.Item - member internal _.Item = item() + member internal x.Item = item() - member _.DisplayName = item().DisplayName + member x.DisplayName = item().DisplayName // This is actually overridden in all cases below. However some symbols are still just of type FSharpSymbol, // see 'FSharpSymbol.Create' further below. @@ -334,18 +333,14 @@ type FSharpSymbol(cenv: SymbolEnv, item: (unit -> Item), access: (FSharpSymbol - | Item.Types _ | Item.DelegateCtor _ -> dflt() - abstract Accessibility: FSharpAccessibility - default _.Accessibility = FSharpAccessibility(taccessPublic) + static member GetAccessibility (symbol: FSharpSymbol) = + match symbol with + | :? FSharpEntity as x -> Some x.Accessibility + | :? FSharpField as x -> Some x.Accessibility + | :? FSharpUnionCase as x -> Some x.Accessibility + | :? FSharpMemberFunctionOrValue as x -> Some x.Accessibility + | _ -> None - abstract Attributes: IList - default _.Attributes = makeReadOnlyCollection[] - - member sym.HasAttribute<'T> () = - sym.Attributes |> Seq.exists (fun attr -> attr.IsAttribute<'T>()) - - member sym.TryGetAttribute<'T>() = - sym.Attributes |> Seq.tryFind (fun attr -> attr.IsAttribute<'T>()) - type FSharpEntity(cenv: SymbolEnv, entity:EntityRef) = inherit FSharpSymbol(cenv, (fun () -> @@ -567,7 +562,7 @@ type FSharpEntity(cenv: SymbolEnv, entity:EntityRef) = | _ -> invalidOp "not a delegate type" - override _.Accessibility = + member _.Accessibility = if isUnresolved() then FSharpAccessibility taccessPublic else FSharpAccessibility(getApproxFSharpAccessibilityOfEntity entity) @@ -612,6 +607,8 @@ type FSharpEntity(cenv: SymbolEnv, entity:EntityRef) = member x.IsNamespace = entity.IsNamespace + member x.MembersOrValues = x.MembersFunctionsAndValues + member x.MembersFunctionsAndValues = if isUnresolved() then makeReadOnlyCollection[] else protect <| fun () -> @@ -645,10 +642,10 @@ type FSharpEntity(cenv: SymbolEnv, entity:EntityRef) = let vref = mkNestedValRef entity v yield FSharpMemberOrFunctionOrValue(cenv, V vref, Item.Value vref) match v.MemberInfo.Value.MemberFlags.MemberKind, v.ApparentEnclosingEntity with - | SynMemberKind.PropertyGet, Parent p -> + | MemberKind.PropertyGet, Parent p -> let pinfo = FSProp(cenv.g, generalizedTyconRef p, Some vref, None) yield FSharpMemberOrFunctionOrValue(cenv, P pinfo, Item.Property (pinfo.PropertyName, [pinfo])) - | SynMemberKind.PropertySet, Parent p -> + | MemberKind.PropertySet, Parent p -> let pinfo = FSProp(cenv.g, generalizedTyconRef p, None, Some vref) yield FSharpMemberOrFunctionOrValue(cenv, P pinfo, Item.Property (pinfo.PropertyName, [pinfo])) | _ -> () @@ -696,6 +693,8 @@ type FSharpEntity(cenv: SymbolEnv, entity:EntityRef) = |> List.map (fun x -> FSharpUnionCase(cenv, x)) |> makeReadOnlyCollection + member x.RecordFields = x.FSharpFields + member x.FSharpFields = if isUnresolved() then makeReadOnlyCollection[] else @@ -722,7 +721,7 @@ type FSharpEntity(cenv: SymbolEnv, entity:EntityRef) = | None -> invalidOp "not a type abbreviation" | Some ty -> FSharpType(cenv, ty) - override _.Attributes = + member _.Attributes = if isUnresolved() then makeReadOnlyCollection[] else GetAttribInfosOfEntity cenv.g cenv.amap range0 entity |> List.map (fun a -> FSharpAttribute(cenv, a)) @@ -762,138 +761,12 @@ type FSharpEntity(cenv: SymbolEnv, entity:EntityRef) = member x.ActivePatternCases = protect <| fun () -> - ActivePatternElemsOfModuleOrNamespace cenv.g x.Entity + ActivePatternElemsOfModuleOrNamespace x.Entity |> Map.toList |> List.map (fun (_, apref) -> let item = Item.ActivePatternCase apref FSharpActivePatternCase(cenv, apref.ActivePatternInfo, apref.ActivePatternVal.Type, apref.CaseIndex, Some apref.ActivePatternVal, item)) - member x.TryGetFullName() = - try x.TryFullName - with _ -> - try Some(String.Join(".", x.AccessPath, x.DisplayName)) - with _ -> None - - member x.TryGetFullDisplayName() = - let fullName = x.TryGetFullName() |> Option.map (fun fullName -> fullName.Split '.') - let res = - match fullName with - | Some fullName -> - match Option.attempt (fun _ -> x.DisplayName) with - | Some shortDisplayName when not (shortDisplayName.Contains ".") -> - Some (fullName |> Array.replace (fullName.Length - 1) shortDisplayName) - | _ -> Some fullName - | None -> None - |> Option.map (fun fullDisplayName -> String.Join (".", fullDisplayName)) - //debug "GetFullDisplayName: FullName = %A, Result = %A" fullName res - res - - member x.TryGetFullCompiledName() = - let fullName = x.TryGetFullName() |> Option.map (fun fullName -> fullName.Split '.') - let res = - match fullName with - | Some fullName -> - match Option.attempt (fun _ -> x.CompiledName) with - | Some shortCompiledName when not (shortCompiledName.Contains ".") -> - Some (fullName |> Array.replace (fullName.Length - 1) shortCompiledName) - | _ -> Some fullName - | None -> None - |> Option.map (fun fullDisplayName -> String.Join (".", fullDisplayName)) - //debug "GetFullCompiledName: FullName = %A, Result = %A" fullName res - res - - member x.GetPublicNestedEntities() = - x.NestedEntities |> Seq.filter (fun entity -> entity.Accessibility.IsPublic) - - member x.TryGetMembersFunctionsAndValues() = - try x.MembersFunctionsAndValues with _ -> [||] :> _ - - member this.TryGetMetadataText() = - match entity.TryDeref with - | ValueSome _ -> - if entity.IsNamespace then None - else - - let denv = DisplayEnv.InitialForSigFileGeneration cenv.g - - let extraOpenPath = - match entity.CompilationPathOpt with - | Some cpath -> - let rec getOpenPath accessPath acc = - match accessPath with - | [] -> acc - | (name, ModuleOrNamespaceKind.ModuleOrType) :: accessPath -> - getOpenPath accessPath (name :: acc) - | (name, ModuleOrNamespaceKind.Namespace) :: accessPath -> - getOpenPath accessPath (name :: acc) - | (name, ModuleOrNamespaceKind.FSharpModuleWithSuffix) :: accessPath -> - getOpenPath accessPath (name :: acc) - - getOpenPath cpath.AccessPath [] - | _ -> - [] - |> List.rev - - let needOpenType = - match entity.CompilationPathOpt with - | Some cpath -> - match cpath.AccessPath with - | (_, ModuleOrNamespaceKind.ModuleOrType) :: _ -> - match this.DeclaringEntity with - | Some (declaringEntity: FSharpEntity) -> not declaringEntity.IsFSharpModule - | _ -> false - | _ -> false - | _ -> - false - - let denv = denv.AddOpenPath extraOpenPath - - let infoReader = cenv.infoReader - - let openPathL = - extraOpenPath - |> List.map (fun x -> Layout.wordL (TaggedText.tagUnknownEntity x)) - - let pathL = - if List.isEmpty extraOpenPath then - Layout.emptyL - else - Layout.sepListL (Layout.sepL TaggedText.dot) openPathL - - let headerL = - if List.isEmpty extraOpenPath then - Layout.emptyL - else - Layout.(^^) - (Layout.wordL (TaggedText.tagKeyword "namespace")) - pathL - - let openL = - if List.isEmpty openPathL then Layout.emptyL - else - let openKeywordL = - if needOpenType then - Layout.(^^) - (Layout.wordL (TaggedText.tagKeyword "open")) - (Layout.wordL TaggedText.keywordType) - else - Layout.wordL (TaggedText.tagKeyword "open") - Layout.(^^) - openKeywordL - pathL - - Layout.aboveListL - [ - (Layout.(^^) headerL (Layout.sepL TaggedText.lineBreak)) - (Layout.(^^) openL (Layout.sepL TaggedText.lineBreak)) - (NicePrint.layoutEntityRef denv infoReader AccessibleFromSomewhere range0 entity) - ] - |> LayoutRender.showL - |> SourceText.ofString - |> Some - | _ -> - None - override x.Equals(other: obj) = box x === other || match other with @@ -940,7 +813,7 @@ type FSharpUnionCase(cenv, v: UnionCaseRef) = if isUnresolved() then false else v.UnionCase.RecdFieldsArray.Length <> 0 - member _.Fields = + member _.UnionCaseFields = if isUnresolved() then makeReadOnlyCollection [] else v.UnionCase.RecdFieldsArray |> Array.mapi (fun i _ -> FSharpField(cenv, FSharpFieldData.Union (v, i))) |> makeReadOnlyCollection @@ -955,7 +828,7 @@ type FSharpUnionCase(cenv, v: UnionCaseRef) = member _.XmlDocSig = checkIsResolved() let unionCase = UnionCaseInfo(generalizeTypars v.TyconRef.TyparsNoRange, v) - match GetXmlDocSigOfUnionCaseRef unionCase.UnionCaseRef with + match SymbolHelpers.GetXmlDocSigOfUnionCaseInfo unionCase with | Some (_, docsig) -> docsig | _ -> "" @@ -967,11 +840,11 @@ type FSharpUnionCase(cenv, v: UnionCaseRef) = if isUnresolved() then XmlDoc.Empty |> makeElaboratedXmlDoc else v.UnionCase.XmlDoc |> makeElaboratedXmlDoc - override _.Attributes = + member _.Attributes = if isUnresolved() then makeReadOnlyCollection [] else v.Attribs |> List.map (fun a -> FSharpAttribute(cenv, AttribInfo.FSAttribInfo(cenv.g, a))) |> makeReadOnlyCollection - override _.Accessibility = + member _.Accessibility = if isUnresolved() then FSharpAccessibility taccessPublic else FSharpAccessibility(v.UnionCase.Accessibility) @@ -1130,12 +1003,12 @@ type FSharpField(cenv: SymbolEnv, d: FSharpFieldData) = match d with | RecdOrClass v -> let recd = RecdFieldInfo(generalizeTypars v.TyconRef.TyparsNoRange, v) - GetXmlDocSigOfRecdFieldRef recd.RecdFieldRef + SymbolHelpers.GetXmlDocSigOfRecdFieldInfo recd | Union (v, _) -> let unionCase = UnionCaseInfo(generalizeTypars v.TyconRef.TyparsNoRange, v) - GetXmlDocSigOfUnionCaseRef unionCase.UnionCaseRef + SymbolHelpers.GetXmlDocSigOfUnionCaseInfo unionCase | ILField f -> - GetXmlDocSigOfILFieldInfo cenv.infoReader range0 f + SymbolHelpers.GetXmlDocSigOfILFieldInfo cenv.infoReader range0 f | AnonField _ -> None match xmlsig with | Some (_, docsig) -> docsig @@ -1216,7 +1089,7 @@ type FSharpField(cenv: SymbolEnv, d: FSharpFieldData) = | Choice3Of3 _ -> [] |> makeReadOnlyCollection - override _.Accessibility: FSharpAccessibility = + member _.Accessibility: FSharpAccessibility = if isUnresolved() then FSharpAccessibility taccessPublic else let access = match d.TryRecdField with @@ -1242,6 +1115,8 @@ type FSharpField(cenv: SymbolEnv, d: FSharpFieldData) = override x.ToString() = "field " + x.Name +type [] FSharpRecordField = FSharpField + type [] FSharpAccessibilityRights(thisCcu: CcuThunk, ad:AccessorDomain) = member internal _.ThisCcu = thisCcu @@ -1272,7 +1147,7 @@ type FSharpActivePatternCase(cenv, apinfo: PrettyNaming.ActivePatternInfo, ty, n member _.XmlDocSig = let xmlsig = match valOpt with - | Some valref -> GetXmlDocSigOfValRef cenv.g valref + | Some valref -> SymbolHelpers.GetXmlDocSigOfValRef cenv.g valref | None -> None match xmlsig with | Some (_, docsig) -> docsig @@ -1315,9 +1190,9 @@ type FSharpGenericParameter(cenv, v:Typar) = member _.ElaboratedXmlDoc = v.XmlDoc |> makeElaboratedXmlDoc - member _.IsSolveAtCompileTime = (v.StaticReq = TyparStaticReq.HeadType) + member _.IsSolveAtCompileTime = (v.StaticReq = TyparStaticReq.HeadTypeStaticReq) - override _.Attributes = + member _.Attributes = // INCOMPLETENESS: If the type parameter comes from .NET then the .NET metadata for the type parameter // has been lost (it is not accessible via Typar). So we can't easily report the attributes in this // case. @@ -1600,7 +1475,7 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = | Some v -> Some v.Range | None -> base.DeclarationLocation - member x.GetOverloads matchParameterNumber = + member x.Overloads matchParameterNumber = checkIsResolved() match d with | M m | C m -> @@ -1803,11 +1678,8 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = member _.IsEventAddMethod = if isUnresolved() then false else match d with - | M m -> - let logicalName = m.LogicalName - logicalName.Length > 4 && logicalName.StartsWithOrdinal("add_") && - - let eventName = logicalName.[4..] + | M m when m.LogicalName.StartsWithOrdinal("add_") -> + let eventName = m.LogicalName.[4..] let entityTy = generalizedTyconRef m.DeclaringTyconRef not (isNil (cenv.infoReader.GetImmediateIntrinsicEventsOfType (Some eventName, AccessibleFromSomeFSharpCode, range0, entityTy))) || let declaringTy = generalizedTyconRef m.DeclaringTyconRef @@ -1820,11 +1692,8 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = member _.IsEventRemoveMethod = if isUnresolved() then false else match d with - | M m -> - let logicalName = m.LogicalName - logicalName.Length > 4 && logicalName.StartsWithOrdinal("remove_") && - - let eventName = logicalName.[7..] + | M m when m.LogicalName.StartsWithOrdinal("remove_") -> + let eventName = m.LogicalName.[7..] let entityTy = generalizedTyconRef m.DeclaringTyconRef not (isNil (cenv.infoReader.GetImmediateIntrinsicEventsOfType (Some eventName, AccessibleFromSomeFSharpCode, range0, entityTy))) || let declaringTy = generalizedTyconRef m.DeclaringTyconRef @@ -1833,14 +1702,25 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = | _ -> false | _ -> false + member x.IsGetterMethod = + if isUnresolved() then false else + x.IsPropertyGetterMethod || + match fsharpInfo() with + | None -> false + | Some v -> v.IsPropertyGetterMethod + + member x.IsSetterMethod = + if isUnresolved() then false else + x.IsPropertySetterMethod || + match fsharpInfo() with + | None -> false + | Some v -> v.IsPropertySetterMethod + member _.IsPropertyGetterMethod = if isUnresolved() then false else match d with - | M m -> - let logicalName = m.LogicalName - logicalName.Length > 4 && logicalName.StartsWithOrdinal("get_") && - - let propName = PrettyNaming.ChopPropertyName(logicalName) + | M m when m.LogicalName.StartsWithOrdinal("get_") -> + let propName = PrettyNaming.ChopPropertyName(m.LogicalName) let declaringTy = generalizedTyconRef m.DeclaringTyconRef not (isNil (GetImmediateIntrinsicPropInfosOfType (Some propName, AccessibleFromSomeFSharpCode) cenv.g cenv.amap range0 declaringTy)) | V v -> v.IsPropertyGetterMethod @@ -1849,11 +1729,9 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = member _.IsPropertySetterMethod = if isUnresolved() then false else match d with - | M m -> - let logicalName = m.LogicalName - logicalName.Length > 4 && logicalName.StartsWithOrdinal("set_") && - - let propName = PrettyNaming.ChopPropertyName(logicalName) + // Look for a matching property with the right name. + | M m when m.LogicalName.StartsWithOrdinal("set_") -> + let propName = PrettyNaming.ChopPropertyName(m.LogicalName) let declaringTy = generalizedTyconRef m.DeclaringTyconRef not (isNil (GetImmediateIntrinsicPropInfosOfType (Some propName, AccessibleFromSomeFSharpCode) cenv.g cenv.amap range0 declaringTy)) | V v -> v.IsPropertySetterMethod @@ -1885,6 +1763,8 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = | V v -> v.IsExtensionMember | C _ -> false + member x.IsOverrideOrExplicitMember = x.IsOverrideOrExplicitInterfaceImplementation + member _.IsOverrideOrExplicitInterfaceImplementation = if isUnresolved() then false else match d with @@ -1961,23 +1841,23 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = match d with | E e -> let range = defaultArg sym.DeclarationLocationOpt range0 - match GetXmlDocSigOfEvent cenv.infoReader range e with + match SymbolHelpers.GetXmlDocSigOfEvent cenv.infoReader range e with | Some (_, docsig) -> docsig | _ -> "" | P p -> let range = defaultArg sym.DeclarationLocationOpt range0 - match GetXmlDocSigOfProp cenv.infoReader range p with + match SymbolHelpers.GetXmlDocSigOfProp cenv.infoReader range p with | Some (_, docsig) -> docsig | _ -> "" | M m | C m -> let range = defaultArg sym.DeclarationLocationOpt range0 - match GetXmlDocSigOfMethInfo cenv.infoReader range m with + match SymbolHelpers.GetXmlDocSigOfMethInfo cenv.infoReader range m with | Some (_, docsig) -> docsig | _ -> "" | V v -> match v.DeclaringEntity with | Parent entityRef -> - match GetXmlDocSigOfScopedValRef cenv.g entityRef v with + match SymbolHelpers.GetXmlDocSigOfScopedValRef cenv.g entityRef v with | Some (_, docsig) -> docsig | _ -> "" | ParentNone -> "" @@ -2003,11 +1883,11 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = match d with | P p -> [ [ for (ParamData(isParamArrayArg, isInArg, isOutArg, optArgInfo, _callerInfo, nmOpt, _reflArgInfo, pty)) in p.GetParamDatas(cenv.amap, range0) do - // INCOMPLETENESS: Attribs is empty here, so we can't look at attributes for - // either .NET or F# parameters - let argInfo: ArgReprInfo = { Name=nmOpt; Attribs= [] } - yield FSharpParameter(cenv, pty, argInfo, None, x.DeclarationLocationOpt, isParamArrayArg, isInArg, isOutArg, optArgInfo.IsOptional, false) ] - |> makeReadOnlyCollection ] + // INCOMPLETENESS: Attribs is empty here, so we can't look at attributes for + // either .NET or F# parameters + let argInfo: ArgReprInfo = { Name=nmOpt; Attribs= [] } + yield FSharpParameter(cenv, pty, argInfo, None, x.DeclarationLocationOpt, isParamArrayArg, isInArg, isOutArg, optArgInfo.IsOptional, false) ] + |> makeReadOnlyCollection ] |> makeReadOnlyCollection | E _ -> [] |> makeReadOnlyCollection @@ -2086,7 +1966,7 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = FSharpParameter(cenv, rty, retInfo, x.DeclarationLocationOpt) - override _.Attributes = + member _.Attributes = if isUnresolved() then makeReadOnlyCollection [] else let m = range0 match d with @@ -2129,7 +2009,7 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = | V v -> getLiteralValue v.LiteralValue /// How visible is this? - override this.Accessibility: FSharpAccessibility = + member this.Accessibility: FSharpAccessibility = if isUnresolved() then FSharpAccessibility taccessPublic else match fsharpInfo() with | Some v -> FSharpAccessibility(v.Accessibility) @@ -2189,11 +2069,6 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = | V valRef -> not (isForallFunctionTy cenv.g valRef.Type) | _ -> false - member x.IsFunction = - match d with - | V valRef -> isForallFunctionTy cenv.g valRef.Type - | _ -> false - override x.Equals(other: obj) = box x === other || match other with @@ -2218,7 +2093,6 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = match x.IsMember, d with | true, V v -> NicePrint.prettyLayoutOfMemberNoInstShort { (context.Contents cenv.g) with showMemberContainers=true } v.Deref - |> LayoutRender.toArray | _,_ -> checkIsResolved() let ty = @@ -2231,7 +2105,6 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = mkIteratedFunTy (List.map (mkRefTupledTy cenv.g) argtysl) rty | V v -> v.TauType NicePrint.prettyLayoutOfTypeNoCx (context.Contents cenv.g) ty - |> LayoutRender.toArray member x.GetWitnessPassingInfo() = let witnessInfos = @@ -2261,29 +2134,6 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = let witnessMethName = PrettyNaming.ExtraWitnessMethodName x.CompiledName Some (witnessMethName, makeReadOnlyCollection witnessParams) - // FullType may raise exceptions (see https://github.com/fsharp/fsharp/issues/307). - member x.FullTypeSafe = Option.attempt (fun _ -> x.FullType) - - member x.TryGetFullDisplayName() = - let fullName = Option.attempt (fun _ -> x.FullName.Split '.') - match fullName with - | Some fullName -> - match Option.attempt (fun _ -> x.DisplayName) with - | Some shortDisplayName when not (shortDisplayName.Contains ".") -> - Some (fullName |> Array.replace (fullName.Length - 1) shortDisplayName) - | _ -> Some fullName - | None -> None - |> Option.map (fun fullDisplayName -> String.Join (".", fullDisplayName)) - - member x.TryGetFullCompiledOperatorNameIdents() : string[] option = - // For operator ++ displayName is ( ++ ) compiledName is op_PlusPlus - if PrettyNaming.IsOperatorName x.DisplayName && x.DisplayName <> x.CompiledName then - x.DeclaringEntity - |> Option.bind (fun e -> e.TryGetFullName()) - |> Option.map (fun enclosingEntityFullName -> - Array.append (enclosingEntityFullName.Split '.') [| x.CompiledName |]) - else None - type FSharpType(cenv, ty:TType) = let isUnresolved() = @@ -2323,6 +2173,9 @@ type FSharpType(cenv, ty:TType) = | TType_tuple (tupInfo, _) -> evalTupInfoIsStruct tupInfo | _ -> false + member x.IsNamedType = x.HasTypeDefinition + member x.NamedEntity = x.TypeDefinition + member _.TypeDefinition = protect <| fun () -> match stripTyparEqns ty with @@ -2396,17 +2249,17 @@ type FSharpType(cenv, ty:TType) = FSharpGenericParameter (cenv, tp) | _ -> invalidOp "not a generic parameter type" - member _.AllInterfaces = + member x.AllInterfaces = if isUnresolved() then makeReadOnlyCollection [] else [ for ty in AllInterfacesOfType cenv.g cenv.amap range0 AllowMultiIntfInstantiations.Yes ty do yield FSharpType(cenv, ty) ] |> makeReadOnlyCollection - member _.BaseType = + member x.BaseType = GetSuperTypeOfType cenv.g cenv.amap range0 ty |> Option.map (fun ty -> FSharpType(cenv, ty)) - member _.Instantiate(instantiation:(FSharpGenericParameter * FSharpType) list) = + member x.Instantiate(instantiation:(FSharpGenericParameter * FSharpType) list) = let typI = instType (instantiation |> List.map (fun (tyv, ty) -> tyv.V, ty.V)) ty FSharpType(cenv, typI) @@ -2424,7 +2277,7 @@ type FSharpType(cenv, ty:TType) = | _ -> false // Note: This equivalence relation is modulo type abbreviations. The hash is less than perfect. - override _.GetHashCode() = + override x.GetHashCode() = let rec hashType ty = let ty = stripTyEqnsWrtErasure EraseNone cenv.g ty match ty with @@ -2438,25 +2291,15 @@ type FSharpType(cenv, ty:TType) = | TType_anon (_,l1) -> 10800 + List.sumBy hashType l1 hashType ty - member _.Format(context: FSharpDisplayContext) = + member x.Format(context: FSharpDisplayContext) = protect <| fun () -> - NicePrint.prettyStringOfTyNoCx (context.Contents cenv.g) ty - - member _.FormatWithConstraints(context: FSharpDisplayContext) = - protect <| fun () -> - NicePrint.prettyStringOfTy (context.Contents cenv.g) ty + NicePrint.prettyStringOfTyNoCx (context.Contents cenv.g) ty - member _.FormatLayout(context: FSharpDisplayContext) = + member x.FormatLayout(context: FSharpDisplayContext) = protect <| fun () -> - NicePrint.prettyLayoutOfTypeNoCx (context.Contents cenv.g) ty - |> LayoutRender.toArray - - member _.FormatLayoutWithConstraints(context: FSharpDisplayContext) = - protect <| fun () -> - NicePrint.prettyLayoutOfType (context.Contents cenv.g) ty - |> LayoutRender.toArray + NicePrint.prettyLayoutOfTypeNoCx (context.Contents cenv.g) ty - override _.ToString() = + override x.ToString() = protect <| fun () -> "type " + NicePrint.prettyStringOfTyNoCx (DisplayEnv.Empty(cenv.g)) ty @@ -2506,11 +2349,6 @@ type FSharpType(cenv, ty:TType) = let ps = (xs, prettyTys) ||> List.map2 (List.map2 (fun p pty -> p.AdjustType pty)) |> List.map makeReadOnlyCollection |> makeReadOnlyCollection ps, returnParameter.AdjustType prettyRetTy - member x.StripAbbreviations() = - if x.IsAbbreviation then - x.AbbreviatedType.StripAbbreviations() - else x - type FSharpAttribute(cenv: SymbolEnv, attrib: AttribInfo) = let rec resolveArgObj (arg: obj) = @@ -2540,7 +2378,7 @@ type FSharpAttribute(cenv: SymbolEnv, attrib: AttribInfo) = | AttribInfo.FSAttribInfo(g, attrib) -> NicePrint.stringOfFSAttrib (context.Contents g) attrib | AttribInfo.ILAttribInfo (g, _, _scoref, cattr, _) -> - let parms, _args = decodeILAttribData cattr + let parms, _args = decodeILAttribData g.ilg cattr NicePrint.stringOfILAttrib (context.Contents g) (cattr.Method.DeclaringType, parms) member _.Range = attrib.Range @@ -2548,10 +2386,6 @@ type FSharpAttribute(cenv: SymbolEnv, attrib: AttribInfo) = override _.ToString() = if entityIsUnresolved attrib.TyconRef then "attribute ???" else "attribute " + attrib.TyconRef.CompiledName + "(...)" - member attr.IsAttribute<'T> () = - // CompiledName throws exception on DataContractAttribute generated by SQLProvider - try attr.AttributeType.CompiledName = typeof<'T>.Name with _ -> false - #if !NO_EXTENSIONTYPING type FSharpStaticParameter(cenv, sp: Tainted< ExtensionTyping.ProvidedParameterInfo >, m) = inherit FSharpSymbol(cenv, @@ -2634,7 +2468,7 @@ type FSharpParameter(cenv, paramTy: TType, topArgInfo: ArgReprInfo, ownerOpt, ow | Some (ArgumentContainer.Method minfo) -> Some (FSharpMemberOrFunctionOrValue (cenv, minfo) :> FSharpSymbol) | _ -> None - override _.Attributes = + member _.Attributes = topArgInfo.Attribs |> List.map (fun a -> FSharpAttribute(cenv, AttribInfo.FSAttribInfo(cenv.g, a))) |> makeReadOnlyCollection member _.IsParamArrayArg = isParamArrayArg @@ -2717,8 +2551,6 @@ type FSharpAssemblySignature (cenv, topAttribs: TopAttribs option, optViewedCcu: |> Option.map (fun e -> FSharpEntity(cenv, rescopeEntity optViewedCcu e)) | _ -> None - member x.TryGetEntities() = try x.Entities :> _ seq with _ -> Seq.empty - override x.ToString() = "" type FSharpAssembly internal (cenv, ccu: CcuThunk) = @@ -2730,6 +2562,8 @@ type FSharpAssembly internal (cenv, ccu: CcuThunk) = member _.QualifiedName = match ccu.QualifiedName with None -> "" | Some s -> s + member _.CodeLocation = ccu.SourceCodeDirectory + member _.FileName = ccu.FileName member _.SimpleName = ccu.AssemblyName @@ -2776,3 +2610,64 @@ type FSharpOpenDeclaration(target: SynOpenDeclTarget, range: range option, modul member _.IsOwnNamespace = isOwnNamespace +[] +type FSharpSymbolUse(g:TcGlobals, denv: DisplayEnv, symbol:FSharpSymbol, itemOcc, range: range) = + + member _.Symbol = symbol + + member _.DisplayContext = FSharpDisplayContext(fun _ -> denv) + + member x.IsDefinition = x.IsFromDefinition + + member _.IsFromDefinition = itemOcc = ItemOccurence.Binding + + member _.IsFromPattern = itemOcc = ItemOccurence.Pattern + + member _.IsFromType = itemOcc = ItemOccurence.UseInType + + member _.IsFromAttribute = itemOcc = ItemOccurence.UseInAttribute + + member _.IsFromDispatchSlotImplementation = itemOcc = ItemOccurence.Implemented + + member _.IsFromComputationExpression = + match symbol.Item, itemOcc with + // 'seq' in 'seq { ... }' gets colored as keywords + | (Item.Value vref), ItemOccurence.Use when valRefEq g g.seq_vref vref -> true + // custom builders, custom operations get colored as keywords + | (Item.CustomBuilder _ | Item.CustomOperation _), ItemOccurence.Use -> true + | _ -> false + + member _.IsFromOpenStatement = itemOcc = ItemOccurence.Open + + member _.FileName = range.FileName + + member _.Range = Range.toZ range + + member _.RangeAlternate = range + + member this.IsPrivateToFile = + let isPrivate = + match this.Symbol with + | :? FSharpMemberOrFunctionOrValue as m -> not m.IsModuleValueOrMember || m.Accessibility.IsPrivate + | :? FSharpEntity as m -> m.Accessibility.IsPrivate + | :? FSharpGenericParameter -> true + | :? FSharpUnionCase as m -> m.Accessibility.IsPrivate + | :? FSharpField as m -> m.Accessibility.IsPrivate + | _ -> false + + let declarationLocation = + match this.Symbol.SignatureLocation with + | Some x -> Some x + | _ -> + match this.Symbol.DeclarationLocation with + | Some x -> Some x + | _ -> this.Symbol.ImplementationLocation + + let declaredInTheFile = + match declarationLocation with + | Some declRange -> declRange.FileName = this.RangeAlternate.FileName + | _ -> false + + isPrivate && declaredInTheFile + + override _.ToString() = sprintf "%O, %O, %O" symbol itemOcc range diff --git a/src/fsharp/symbols/Symbols.fsi b/src/fsharp/symbols/Symbols.fsi index ba09617f18b..d180c9697b1 100644 --- a/src/fsharp/symbols/Symbols.fsi +++ b/src/fsharp/symbols/Symbols.fsi @@ -1,9 +1,8 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace rec FSharp.Compiler.Symbols +namespace rec FSharp.Compiler.SourceCodeServices open System.Collections.Generic -open System.Collections.Immutable open FSharp.Compiler open FSharp.Compiler.AccessibilityLogic @@ -12,9 +11,8 @@ open FSharp.Compiler.CompilerImports open FSharp.Compiler.Import open FSharp.Compiler.InfoReader open FSharp.Compiler.NameResolution -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Text +open FSharp.Compiler.Range +open FSharp.Compiler.SyntaxTree open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TcGlobals @@ -22,13 +20,9 @@ open FSharp.Compiler.TcGlobals // Implementation details used by other code in the compiler type internal SymbolEnv = new: TcGlobals * thisCcu: CcuThunk * thisCcuTyp: ModuleOrNamespaceType option * tcImports: TcImports -> SymbolEnv - new: TcGlobals * thisCcu: CcuThunk * thisCcuTyp: ModuleOrNamespaceType option * tcImports: TcImports * amap: ImportMap * infoReader: InfoReader -> SymbolEnv - member amap: ImportMap - member g: TcGlobals - member tcValF: ConstraintSolver.TcValF /// Indicates the accessibility of a symbol, as seen by the F# language @@ -50,6 +44,7 @@ type FSharpAccessibility = /// The underlying Accessibility member internal Contents: Accessibility + /// Represents the information needed to format types and other information in a style /// suitable for use in F# source text at a particular source location. /// @@ -74,7 +69,7 @@ type FSharpDisplayContext = /// The subtype of the symbol may reveal further information and can be one of FSharpEntity, FSharpUnionCase /// FSharpField, FSharpGenericParameter, FSharpStaticParameter, FSharpMemberOrFunctionOrValue, FSharpParameter, /// or FSharpActivePatternCase. -[] +[] type FSharpSymbol = static member internal Create: g: TcGlobals * thisCcu: CcuThunk * thisCcuTyp: ModuleOrNamespaceType * tcImports: TcImports * item: NameResolution.Item -> FSharpSymbol static member internal Create: cenv: SymbolEnv * item: NameResolution.Item -> FSharpSymbol @@ -117,17 +112,7 @@ type FSharpSymbol = member IsExplicitlySuppressed: bool - /// Get the declared accessibility of the symbol, if any - abstract Accessibility: FSharpAccessibility - - /// Get the attributes for the symbol, if any - abstract Attributes: IList - - /// Try to get an attribute matching the full name of the given type parameter - member TryGetAttribute<'T> : unit -> FSharpAttribute option - - /// Indicates if this symbol has an attribute matching the full name of the given type parameter - member HasAttribute<'T> : unit -> bool + static member GetAccessibility: FSharpSymbol -> FSharpAccessibility option /// Represents an assembly as seen by the F# language type FSharpAssembly = @@ -137,6 +122,9 @@ type FSharpAssembly = /// The qualified name of the assembly member QualifiedName: string + [] + member CodeLocation: string + /// The contents of the this assembly member Contents: FSharpAssemblySignature @@ -165,8 +153,6 @@ type FSharpAssemblySignature = /// Find entity using compiled names member FindEntityByPath: string list -> FSharpEntity option - /// Safe version of `Entities`. - member TryGetEntities : unit -> seq /// A subtype of FSharpSymbol that represents a type definition or module as seen by the F# language type FSharpEntity = @@ -284,8 +270,12 @@ type FSharpEntity = /// Indicates if the entity is a part of a namespace path member IsNamespace: bool - /// Get the XML documentation for the entity - member XmlDoc: FSharpXmlDoc + /// Get the in-memory XML documentation for the entity, used when code is checked in-memory + member XmlDoc: IList + + /// Get the elaborated XML documentation for the entity, used when code is checked in-memory, + /// after any checking and processing to XML performed by the F# compiler + member ElaboratedXmlDoc: IList /// Get the XML documentation signature for the entity, used for .xml file lookup for compiled code member XmlDocSig: string @@ -298,7 +288,7 @@ type FSharpEntity = member UsesPrefixDisplay: bool /// Get the declared attributes for the type - override Attributes: IList + member Attributes: IList /// Get the declared interface implementations member DeclaredInterfaces: IList @@ -315,6 +305,9 @@ type FSharpEntity = /// Get the properties, events and methods of a type definitions, or the functions and values of a module member MembersFunctionsAndValues: IList + [] + member MembersOrValues: IList + /// Get the modules and types defined in a module, or the nested types of a type member NestedEntities: IList @@ -323,6 +316,9 @@ type FSharpEntity = /// For classes, the list may include compiler generated fields implied by the use of primary constructors. member FSharpFields: IList + [] + member RecordFields: IList + /// Get the type abbreviated by an F# type abbreviation member AbbreviatedType: FSharpType @@ -333,7 +329,7 @@ type FSharpEntity = member FSharpDelegateSignature: FSharpDelegateSignature /// Get the declared accessibility of the type - override Accessibility: FSharpAccessibility + member Accessibility: FSharpAccessibility /// Get the declared accessibility of the representation, not taking signatures into account member RepresentationAccessibility: FSharpAccessibility @@ -344,24 +340,6 @@ type FSharpEntity = /// Get all active pattern cases defined in all active patterns in the module. member ActivePatternCases: FSharpActivePatternCase list - /// Safe version of `FullName`. - member TryGetFullName: unit -> string option - - /// Safe version of `DisplayName`. - member TryGetFullDisplayName: unit -> string option - - /// Safe version of `CompiledName`. - member TryGetFullCompiledName: unit -> string option - - /// Public nested entities (methods, functions, values, nested modules). - member GetPublicNestedEntities: unit -> seq - - /// Safe version of `GetMembersFunctionsAndValues`. - member TryGetMembersFunctionsAndValues: unit -> IList - - /// Get the source text of the entity's signature to be used as metadata. - member TryGetMetadataText: unit -> ISourceText option - /// Represents a delegate signature in an F# symbol [] type FSharpDelegateSignature = @@ -432,7 +410,7 @@ type FSharpUnionCase = member HasFields: bool /// Get the data carried by the case. - member Fields: IList + member UnionCaseFields: IList /// Get the type constructed by the case. Normally exactly the type of the enclosing type, sometimes an abbreviation of it member ReturnType: FSharpType @@ -440,17 +418,21 @@ type FSharpUnionCase = /// Get the name of the case in generated IL code member CompiledName: string - /// Get the XML documentation for the entity - member XmlDoc: FSharpXmlDoc + /// Get the in-memory XML documentation for the union case, used when code is checked in-memory + member XmlDoc: IList + + /// Get the elaborated XML documentation for the union case, used when code is checked in-memory, + /// after any checking and processing to XML performed by the F# compiler + member ElaboratedXmlDoc: IList /// Get the XML documentation signature for .xml file lookup for the union case, used for .xml file lookup for compiled code member XmlDocSig: string /// Indicates if the declared visibility of the union constructor, not taking signatures into account - override Accessibility: FSharpAccessibility + member Accessibility: FSharpAccessibility /// Get the attributes for the case, attached to the generated static method to make instances of the case - override Attributes: IList + member Attributes: IList /// Indicates if the union case is for a type in an unresolved assembly member IsUnresolved: bool @@ -516,8 +498,12 @@ type FSharpField = /// This API returns true for source defined symbols only. member IsNameGenerated: bool - /// Get the XML documentation for the entity - member XmlDoc: FSharpXmlDoc + /// Get the in-memory XML documentation for the field, used when code is checked in-memory + member XmlDoc: IList + + /// Get the elaborated XML documentation for the field, used when code is checked in-memory, + /// after any checking and processing to XML performed by the F# compiler + member ElaboratedXmlDoc: IList /// Get the XML documentation signature for .xml file lookup for the field, used for .xml file lookup for compiled code member XmlDocSig: string @@ -541,7 +527,7 @@ type FSharpField = member LiteralValue: obj option /// Indicates if the declared visibility of the field, not taking signatures into account - override Accessibility: FSharpAccessibility + member Accessibility: FSharpAccessibility /// Indicates if the record field is for a type in an unresolved assembly member IsUnresolved: bool @@ -568,8 +554,12 @@ type FSharpGenericParameter = /// Indicates if this is a measure variable member IsMeasure: bool - /// Get the XML documentation for the entity - member XmlDoc: FSharpXmlDoc + /// Get the in-memory XML documentation for the type parameter, used when code is checked in-memory + member XmlDoc: IList + + /// Get the elaborated XML documentation for the type parameter, used when code is checked in-memory, + /// after any checking and processing to XML performed by the F# compiler + member ElaboratedXmlDoc: IList /// Indicates if this is a statically resolved type variable member IsSolveAtCompileTime: bool @@ -578,7 +568,7 @@ type FSharpGenericParameter = member IsCompilerGenerated: bool /// Get the declared attributes of the type parameter. - override Attributes: IList + member Attributes: IList /// Get the declared or inferred constraints for the type parameter member Constraints: IList @@ -772,6 +762,9 @@ type FSharpMemberOrFunctionOrValue = /// Indicates if this is an extension member? member IsExtensionMember: bool + [] + member IsOverrideOrExplicitMember: bool + /// Indicates if this is an 'override', 'default' or an explicit implementation of an interface member member IsOverrideOrExplicitInterfaceImplementation: bool @@ -826,6 +819,14 @@ type FSharpMemberOrFunctionOrValue = /// Indicates if this is an abstract member? member IsDispatchSlot: bool + /// Indicates if this is a getter method for a property, or a use of a property in getter mode + [] + member IsGetterMethod: bool + + /// Indicates if this is a setter method for a property, or a use of a property in setter mode + [] + member IsSetterMethod: bool + /// Indicates if this is a getter method for a property, or a use of a property in getter mode member IsPropertyGetterMethod: bool @@ -867,21 +868,22 @@ type FSharpMemberOrFunctionOrValue = member CurriedParameterGroups: IList> - /// Gets the overloads for the current method. - /// - /// - /// Indicates whether to filter the overloads to match the number of parameters in the current symbol - /// - member GetOverloads: matchParameterNumber: bool -> IList option + /// Gets the overloads for the current method + /// matchParameterNumber indicates whether to filter the overloads to match the number of parameters in the current symbol + member Overloads: bool -> IList option member ReturnParameter: FSharpParameter /// Custom attributes attached to the value. These contain references to other values (i.e. constructors in types). Mutable to fixup /// these value references after copying a collection of values. - override Attributes: IList + member Attributes: IList - /// Get the XML documentation for the entity - member XmlDoc: FSharpXmlDoc + /// Get the in-memory XML documentation for the value, used when code is checked in-memory + member XmlDoc: IList + + /// Get the elaborated XML documentation for the value, used when code is checked in-memory, + /// after any checking and processing to XML performed by the F# compiler + member ElaboratedXmlDoc: IList /// XML documentation signature for the value, used for .xml file lookup for compiled code member XmlDocSig: string @@ -899,13 +901,10 @@ type FSharpMemberOrFunctionOrValue = member LiteralValue: obj option /// Get the accessibility information for the member, function or value - override Accessibility: FSharpAccessibility + member Accessibility: FSharpAccessibility /// Indicated if this is a value compiled to a method member IsValCompiledAsMethod: bool - - /// Indicates if this is a function - member IsFunction: bool /// Indicated if this is a value member IsValue: bool @@ -914,21 +913,12 @@ type FSharpMemberOrFunctionOrValue = member IsConstructor: bool /// Format the type using the rules of the given display context - member FormatLayout: context: FSharpDisplayContext -> TaggedText[] + member FormatLayout: context: FSharpDisplayContext -> Layout /// Check if this method has an entrpoint that accepts witness arguments and if so return /// the name of that entrypoint and information about the additional witness arguments member GetWitnessPassingInfo: unit -> (string * IList) option - /// Safe version of `FullType`. - member FullTypeSafe : FSharpType option - - /// Full name with last part replaced with display name. - member TryGetFullDisplayName : unit -> string option - - /// Full operator compiled name. - member TryGetFullCompiledOperatorNameIdents : unit -> string[] option - /// A subtype of FSharpSymbol that represents a parameter [] type FSharpParameter = @@ -945,7 +935,7 @@ type FSharpParameter = member Type: FSharpType /// The declared attributes of the parameter - override Attributes: IList + member Attributes: IList /// Indicate this is a param array argument member IsParamArrayArg: bool @@ -978,8 +968,12 @@ type FSharpActivePatternCase = /// The group of active pattern cases this belongs to member Group: FSharpActivePatternGroup - /// Get the XML documentation for the entity - member XmlDoc: FSharpXmlDoc + /// Get the in-memory XML documentation for the active pattern case, used when code is checked in-memory + member XmlDoc: IList + + /// Get the elaborated XML documentation for the active pattern case, used when code is checked in-memory, + /// after any checking and processing to XML performed by the F# compiler + member ElaboratedXmlDoc: IList /// XML documentation signature for the active pattern case, used for .xml file lookup for compiled code member XmlDocSig: string @@ -1049,17 +1043,11 @@ type FSharpType = /// Get the generic parameter data for a generic parameter type member GenericParameter: FSharpGenericParameter - /// Format the type using the rules of the given display context, skipping type constraints + /// Format the type using the rules of the given display context member Format: context: FSharpDisplayContext -> string - /// Format the type using the rules of the given display context - member FormatWithConstraints: context: FSharpDisplayContext -> string - /// Format the type using the rules of the given display context - member FormatLayout: context: FSharpDisplayContext -> TaggedText[] - - /// Format the type - with constraints - using the rules of the given display context - member FormatLayoutWithConstraints: context: FSharpDisplayContext -> TaggedText[] + member FormatLayout: context: FSharpDisplayContext -> Layout /// Instantiate generic type parameters in a type member Instantiate: (FSharpGenericParameter * FSharpType) list -> FSharpType @@ -1096,8 +1084,12 @@ type FSharpType = /// systematically with lower-case type inference variables such as 'a. static member Prettify: parameters: IList> * returnParameter: FSharpParameter -> IList> * FSharpParameter - /// Strip any outer abbreviations from the type - member StripAbbreviations: unit -> FSharpType + [] + member IsNamedType: bool + + [] + member NamedEntity: FSharpEntity + /// Represents a custom attribute attached to F# source code or a compiler .NET component [] @@ -1121,9 +1113,6 @@ type FSharpAttribute = /// Get the range of the name of the attribute member Range: range - /// Indicates if attribute matchies the full name of the given type parameter - member IsAttribute<'T> : unit -> bool - /// Represents open declaration in F# code. [] type FSharpOpenDeclaration = @@ -1150,3 +1139,47 @@ type FSharpOpenDeclaration = /// If it's `namespace Xxx.Yyy` declaration. member IsOwnNamespace: bool + +/// Represents the use of an F# symbol from F# source code +[] +type FSharpSymbolUse = + + // For internal use only + internal new: g:TcGlobals * denv: DisplayEnv * symbol:FSharpSymbol * itemOcc:ItemOccurence * range: range -> FSharpSymbolUse + + /// The symbol referenced + member Symbol: FSharpSymbol + + /// The display context active at the point where the symbol is used. Can be passed to FSharpType.Format + /// and other methods to format items in a way that is suitable for a specific source code location. + member DisplayContext: FSharpDisplayContext + + /// Indicates if the reference is a definition for the symbol, either in a signature or implementation + member IsFromDefinition: bool + + /// Indicates if the reference is in a pattern + member IsFromPattern: bool + + /// Indicates if the reference is in a syntactic type + member IsFromType: bool + + /// Indicates if the reference is in an attribute + member IsFromAttribute: bool + + /// Indicates if the reference is via the member being implemented in a class or object expression + member IsFromDispatchSlotImplementation: bool + + /// Indicates if the reference is either a builder or a custom operation in a computation expression + member IsFromComputationExpression: bool + + /// Indicates if the reference is in open statement + member IsFromOpenStatement: bool + + /// The file name the reference occurs in + member FileName: string + + /// The range of text representing the reference to the symbol + member RangeAlternate: range + + /// Indicates if the FSharpSymbolUse is declared as private + member IsPrivateToFile: bool diff --git a/src/fsharp/tainted.fs b/src/fsharp/tainted.fs index 32bf469600e..be352384b57 100644 --- a/src/fsharp/tainted.fs +++ b/src/fsharp/tainted.fs @@ -5,11 +5,10 @@ namespace FSharp.Compiler #if !NO_EXTENSIONTYPING open System -open Internal.Utilities.Library -open FSharp.Core.CompilerServices +open FSharp.Compiler.Range +open Microsoft.FSharp.Core.CompilerServices open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range +open FSharp.Compiler.AbstractIL.Internal.Library [] type internal TypeProviderToken() = interface LockToken @@ -20,26 +19,26 @@ type internal TypeProviderLock() = type internal TypeProviderError ( - errNum: int, - tpDesignation: string, - m: range, - errors: string list, - typeNameContext: string option, - methodNameContext: string option + errNum : int, + tpDesignation : string, + m:FSharp.Compiler.Range.range, + errors : string list, + typeNameContext : string option, + methodNameContext : string option ) = - inherit Exception() + inherit System.Exception() - new((errNum, msg: string), tpDesignation,m) = + new((errNum, msg : string), tpDesignation,m) = TypeProviderError(errNum, tpDesignation, m, [msg]) - new(errNum, tpDesignation, m, messages: seq) = + new(errNum, tpDesignation, m, messages : seq) = TypeProviderError(errNum, tpDesignation, m, List.ofSeq messages, None, None) - member _.Number = errNum - member _.Range = m + member this.Number = errNum + member this.Range = m - override _.Message = + override this.Message = match errors with | [text] -> text | inner -> @@ -48,11 +47,11 @@ type internal TypeProviderError inner |> String.concat Environment.NewLine - member _.MapText(f, tpDesignation, m) = - let (errNum: int), _ = f "" + member this.MapText(f, tpDesignation, m) = + let (errNum : int), _ = f "" new TypeProviderError(errNum, tpDesignation, m, (Seq.map (f >> snd) errors)) - member _.WithContext(typeNameContext:string, methodNameContext:string) = + member this.WithContext(typeNameContext:string, methodNameContext:string) = new TypeProviderError(errNum, tpDesignation, m, errors, Some typeNameContext, Some methodNameContext) // .Message is just the error, whereas .ContextualErrorMessage has contextual prefix information @@ -77,10 +76,10 @@ type internal TypeProviderError for msg in errors do f (new TypeProviderError(errNum, tpDesignation, m, [msg], typeNameContext, methodNameContext)) -type TaintedContext = { TypeProvider: ITypeProvider; TypeProviderAssemblyRef: ILScopeRef; Lock: TypeProviderLock } +type TaintedContext = { TypeProvider : ITypeProvider; TypeProviderAssemblyRef : ILScopeRef; Lock: TypeProviderLock } [][] -type internal Tainted<'T> (context: TaintedContext, value: 'T) = +type internal Tainted<'T> (context : TaintedContext, value : 'T) = do match box context.TypeProvider with | null -> @@ -88,10 +87,10 @@ type internal Tainted<'T> (context: TaintedContext, value: 'T) = failwith "null ITypeProvider in Tainted constructor" | _ -> () - member _.TypeProviderDesignation = + member this.TypeProviderDesignation = context.TypeProvider.GetType().FullName - member _.TypeProviderAssemblyRef = + member this.TypeProviderAssemblyRef = context.TypeProviderAssemblyRef member this.Protect f (range:range) = @@ -137,6 +136,7 @@ type internal Tainted<'T> (context: TaintedContext, value: 'T) = | null -> raise <| TypeProviderError(FSComp.SR.etProviderReturnedNull(methodName), this.TypeProviderDesignation, range) | _ -> a |> Array.map (fun u -> Tainted(context,u)) + member this.PApplyOption(f,range:range) = let a = this.Protect f range match a with @@ -148,7 +148,7 @@ type internal Tainted<'T> (context: TaintedContext, value: 'T) = /// Access the target object directly. Use with extreme caution. member this.AccessObjectDirectly = value - static member CreateAll(providerSpecs: (ITypeProvider * ILScopeRef) list) = + static member CreateAll(providerSpecs : (ITypeProvider * ILScopeRef) list) = [for (tp,nm) in providerSpecs do yield Tainted<_>({ TypeProvider=tp; TypeProviderAssemblyRef=nm; Lock=TypeProviderLock() },tp) ] diff --git a/src/fsharp/tainted.fsi b/src/fsharp/tainted.fsi index 06127f5a622..9b1e8cb2198 100644 --- a/src/fsharp/tainted.fsi +++ b/src/fsharp/tainted.fsi @@ -4,10 +4,13 @@ namespace FSharp.Compiler #if !NO_EXTENSIONTYPING -open Internal.Utilities.Library -open FSharp.Core.CompilerServices + +open System +open System.Reflection +open Microsoft.FSharp.Core.CompilerServices +open FSharp.Compiler.Range open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.Text +open FSharp.Compiler.AbstractIL.Internal.Library [] type internal TypeProviderToken = @@ -97,6 +100,7 @@ type internal Tainted<'T> = /// If coercion fails, the failure will be blamed on a type provider member Coerce<'U> : range:range -> Tainted<'U> + [] module internal Tainted = diff --git a/src/fsharp/utils/CompilerLocationUtils.fs b/src/fsharp/utils/CompilerLocationUtils.fs index ec674dfc681..5bff0b5930d 100644 --- a/src/fsharp/utils/CompilerLocationUtils.fs +++ b/src/fsharp/utils/CompilerLocationUtils.fs @@ -10,12 +10,10 @@ open System.Runtime.InteropServices open Microsoft.Win32 open Microsoft.FSharp.Core -#nowarn "44" // ConfigurationSettings is obsolete but the new stuff is horribly complicated. +#nowarn "44" // ConfigurationSettings is obsolete but the new stuff is horribly complicated. module internal FSharpEnvironment = - type private TypeInThisAssembly = class end - /// The F# version reported in the banner let FSharpBannerVersion = UtilsStrings.SR.fSharpBannerVersion(FSharp.BuildProperties.fsProductVersion, FSharp.BuildProperties.fsLanguageVersion) @@ -31,7 +29,7 @@ module internal FSharpEnvironment = | s -> Some(s) with _ -> None - // The F# binary format revision number. The first three digits of this form the significant part of the + // The F# binary format revision number. The first three digits of this form the significant part of the // format revision number for F# binary signature and optimization metadata. The last digit is not significant. // // WARNING: Do not change this revision number unless you absolutely know what you're doing. @@ -50,13 +48,13 @@ module internal FSharpEnvironment = [] extern uint32 RegCloseKey(UIntPtr _hKey) #endif - module Option = + module Option = /// Convert string into Option string where null and String.Empty result in None - let ofString s = + let ofString s = if String.IsNullOrEmpty(s) then None else Some(s) - // MaxPath accounts for the null-terminating character, for example, the maximum path on the D drive is "D:\<256 chars>\0". + // MaxPath accounts for the null-terminating character, for example, the maximum path on the D drive is "D:\<256 chars>\0". // See: ndp\clr\src\BCL\System\IO\Path.cs let maxPath = 260; let maxDataLength = (new System.Text.UTF32Encoding()).GetMaxByteCount(maxPath) @@ -78,11 +76,11 @@ module internal FSharpEnvironment = #endif null) - let Get32BitRegistryStringValueViaPInvoke(subKey:string) = + let Get32BitRegistryStringValueViaPInvoke(subKey:string) = Option.ofString - (try + (try // 64 bit flag is not available <= Win2k - let options = + let options = let hasWow6432Node = use x = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node") x <> null @@ -106,14 +104,14 @@ module internal FSharpEnvironment = if (res = 0u && cbData > 0 && cbData <= maxDataLength) then Marshal.PtrToStringUni(pathResult, (cbData - 2)/2); - else + else null else null finally if hkey <> UIntPtr.Zero then RegCloseKey(hkey) |> ignore - + if pathResult <> IntPtr.Zero then Marshal.FreeCoTaskMem(pathResult) with e-> @@ -126,10 +124,10 @@ module internal FSharpEnvironment = let runningOnMono = try System.Type.GetType("Mono.Runtime") <> null with e-> false - let tryRegKey(subKey:string) = + let tryRegKey(subKey:string) = //if we are running on mono simply return None - // GetDefaultRegistryStringValueViaDotNet will result in an access denied by default, + // GetDefaultRegistryStringValueViaDotNet will result in an access denied by default, // and Get32BitRegistryStringValueViaPInvoke will fail due to Advapi32.dll not existing if runningOnMono then None else if is32Bit then @@ -142,7 +140,7 @@ module internal FSharpEnvironment = #endif s else - Get32BitRegistryStringValueViaPInvoke(subKey) + Get32BitRegistryStringValueViaPInvoke(subKey) #endif let internal tryCurrentDomain() = @@ -156,12 +154,12 @@ module internal FSharpEnvironment = #if FX_NO_SYSTEM_CONFIGURATION let internal tryAppConfig (_appConfigKey:string) = None #else - let internal tryAppConfig (_appConfigKey:string) = + let internal tryAppConfig (_appConfigKey:string) = let locationFromAppConfig = System.Configuration.ConfigurationSettings.AppSettings.[_appConfigKey] #if DEBUG - Debug.Print(sprintf "Considering _appConfigKey %s which has value '%s'" _appConfigKey locationFromAppConfig) + Debug.Print(sprintf "Considering _appConfigKey %s which has value '%s'" _appConfigKey locationFromAppConfig) #endif - if String.IsNullOrEmpty(locationFromAppConfig) then + if String.IsNullOrEmpty(locationFromAppConfig) then None else let exeAssemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) @@ -196,8 +194,8 @@ module internal FSharpEnvironment = let safeExists f = (try File.Exists(f) with _ -> false) // Look in the probePoint if given, e.g. look for a compiler alongside of FSharp.Build.dll - match probePoint with - | Some p when safeExists (Path.Combine(p,"FSharp.Core.dll")) -> Some p + match probePoint with + | Some p when safeExists (Path.Combine(p,"FSharp.Core.dll")) -> Some p | _ -> // For the prototype compiler, we can just use the current domain tryCurrentDomain() @@ -208,13 +206,13 @@ module internal FSharpEnvironment = // The reg key is disposed at the end of the scope. let useKey subKey f = let key = Registry.LocalMachine.OpenSubKey subKey - try f key - finally - match key with - | null -> () + try f key + finally + match key with + | null -> () | _ -> key.Dispose() - // Check if the framework version 4.5 or above is installed at the given key entry + // Check if the framework version 4.5 or above is installed at the given key entry let IsNetFx45OrAboveInstalledAt subKey = try useKey subKey (fun regKey -> @@ -222,17 +220,17 @@ module internal FSharpEnvironment = | null -> false | _ -> regKey.GetValue("Release", 0) :?> int |> (fun s -> s >= 0x50000)) // 0x50000 implies 4.5.0 with _ -> false - + // Check if the framework version 4.5 or above is installed let IsNetFx45OrAboveInstalled = IsNetFx45OrAboveInstalledAt @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client" || IsNetFx45OrAboveInstalledAt @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" || runningOnMono - + // Check if the running framework version is 4.5 or above. // Use the presence of v4.5.x in the registry to distinguish between 4.0 and 4.5 let IsRunningOnNetFx45OrAbove = - let version = new Version(versionOf) + let version = new Version(versionOf) let major = version.Major major > 4 || (major = 4 && IsNetFx45OrAboveInstalled) @@ -253,7 +251,7 @@ module internal FSharpEnvironment = if typeof.Assembly.GetName().Name = "mscorlib" then [| "net48"; "net472"; "net471";"net47";"net462";"net461"; "net452"; "net451"; "net45"; "netstandard2.0" |] elif typeof.Assembly.GetName().Name = "System.Private.CoreLib" then - [| "net5.0"; "netcoreapp3.1"; "netcoreapp3.0"; "netstandard2.1"; "netcoreapp2.2"; "netcoreapp2.1"; "netcoreapp2.0"; "netstandard2.0" |] + [| "netcoreapp3.1"; "netcoreapp3.0"; "netstandard2.1"; "netcoreapp2.2"; "netcoreapp2.1"; "netcoreapp2.0"; "netstandard2.0" |] else System.Diagnostics.Debug.Assert(false, "Couldn't determine runtime tooling context, assuming it supports at least .NET Standard 2.0") [| "netstandard2.0" |] @@ -267,15 +265,15 @@ module internal FSharpEnvironment = yield Path.Combine(toolPath, protocol, netRuntime) ] - let searchToolPath compilerToolPath = - seq { - yield compilerToolPath - for toolPath in toolingCompatiblePaths() do - yield Path.Combine (compilerToolPath, toolPath) - } - let rec searchToolPaths path compilerToolPaths = seq { + let searchToolPath path = + seq { + yield path + for toolPath in toolingCompatiblePaths() do + yield Path.Combine (path, toolPath) + } + for toolPath in compilerToolPaths do yield! searchToolPath toolPath @@ -326,7 +324,7 @@ module internal FSharpEnvironment = // string specification. The Name=FullName comparison is particularly strange, and was there to support // design-time DLLs specified using "x.DesignTIme, Version= ..." long assembly names and GAC loads. // These kind of design-time assembly specifications are no longer used to our knowledge so that comparison is basically legacy - // and will always succeed. + // and will always succeed. let name = AssemblyName (Path.GetFileNameWithoutExtension designTimeAssemblyName) if name.Name.Equals(name.FullName, StringComparison.OrdinalIgnoreCase) then let designTimeFileName = designTimeAssemblyName + ".dll" @@ -340,110 +338,5 @@ module internal FSharpEnvironment = with e -> raiseError None e - let getCompilerToolsDesignTimeAssemblyPaths compilerToolPaths = + let getCompilerToolsDesignTimeAssemblyPaths compilerToolPaths = searchToolPaths None compilerToolPaths - - let getFSharpCoreLibraryName = "FSharp.Core" - let fsiLibraryName = "FSharp.Compiler.Interactive.Settings" - - let getFSharpCompilerLocation() = - let location = Path.GetDirectoryName(typeof.Assembly.Location) - match BinFolderOfDefaultFSharpCompiler (Some location) with - | Some path -> path - | None -> - #if DEBUG - Debug.Print(sprintf """FSharpEnvironment.BinFolderOfDefaultFSharpCompiler (Some '%s') returned None Location - customized incorrectly: algorithm here: https://github.com/dotnet/fsharp/blob/03f3f1c35f82af26593d025dabca57a6ef3ea9a1/src/utils/CompilerLocationUtils.fs#L171""" - location) - #endif - // Use the location of this dll - location - - let getDefaultFSharpCoreLocation() = Path.Combine(getFSharpCompilerLocation(), getFSharpCoreLibraryName + ".dll") - let getDefaultFsiLibraryLocation() = Path.Combine(getFSharpCompilerLocation(), fsiLibraryName + ".dll") - - // Path to the directory containing the fsharp compilers - let fsharpCompilerPath = Path.Combine(Path.GetDirectoryName(typeof.GetTypeInfo().Assembly.Location), "Tools") - - let isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) - - let dotnet = if isWindows then "dotnet.exe" else "dotnet" - - let fileExists pathToFile = - try - if File.Exists(pathToFile) then - true - else - false - with | _ -> false - - // Look for global install of dotnet sdk - let getDotnetGlobalHostPath() = - let pf = Environment.GetEnvironmentVariable("ProgramW6432") - let pf = if String.IsNullOrEmpty(pf) then Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) else pf - let candidate = Path.Combine(pf, "dotnet", dotnet) - if fileExists candidate then - Some candidate - else - // Can't find it --- give up - None - - let getDotnetHostPath() = - // How to find dotnet.exe --- woe is me; probing rules make me sad. - // Algorithm: - // 1. Look for DOTNET_HOST_PATH environment variable - // this is the main user programable override .. provided by user to find a specific dotnet.exe - // 2. Probe for are we part of an .NetSDK install - // In an sdk install we are always installed in: sdk\3.0.100-rc2-014234\FSharp - // dotnet or dotnet.exe will be found in the directory that contains the sdk directory - // 3. We are loaded in-process to some other application ... Eg. try .net - // See if the host is dotnet.exe ... from net5.0 on this is fairly unlikely - // 4. If it's none of the above we are going to have to rely on the path containing the way to find dotnet.exe - // Use the path to search for dotnet.exe - let probePathForDotnetHost() = - let paths = - let p = Environment.GetEnvironmentVariable("PATH") - if not(isNull p) then p.Split(Path.PathSeparator) - else [||] - paths |> Array.tryFind (fun f -> fileExists (Path.Combine(f, dotnet))) - - match (Environment.GetEnvironmentVariable("DOTNET_HOST_PATH")) with - // Value set externally - | value when not (String.IsNullOrEmpty(value)) && fileExists value -> Some value - | _ -> - // Probe for netsdk install, dotnet. and dotnet.exe is a constant offset from the location of System.Int32 - let candidate = - let assemblyLocation = Path.GetDirectoryName(typeof.GetTypeInfo().Assembly.Location) - Path.GetFullPath(Path.Combine(assemblyLocation, "..", "..", "..", dotnet)) - if fileExists candidate then - Some candidate - else - match probePathForDotnetHost () with - | Some f -> Some (Path.Combine(f, dotnet)) - | None -> getDotnetGlobalHostPath() - - let getDotnetHostDirectories() = - let isDotnetMultilevelLookup = (Int32.TryParse(Environment.GetEnvironmentVariable("DOTNET_MULTILEVEL_LOOKUP")) |> snd) <> 0 - [| - match getDotnetHostPath(), getDotnetGlobalHostPath() with - | Some hostPath, Some globalHostPath -> - yield Path.GetDirectoryName(hostPath) - if isDotnetMultilevelLookup && hostPath <> globalHostPath then - yield Path.GetDirectoryName(globalHostPath) - | Some hostPath, None -> - yield Path.GetDirectoryName(hostPath) - | None, Some globalHostPath -> - yield Path.GetDirectoryName(globalHostPath) - | None, None -> - () - |] - - let getDotnetHostDirectory() = getDotnetHostDirectories() |> Array.tryHead - - let getDotnetHostSubDirectories(path: string) = - [| - for directory in getDotnetHostDirectories() do - let subdirectory = Path.Combine(directory, path) - if Directory.Exists(subdirectory) then - yield! DirectoryInfo(subdirectory).GetDirectories() - |] diff --git a/src/fsharp/utils/CompilerLocationUtils.fsi b/src/fsharp/utils/CompilerLocationUtils.fsi index 539c2a6e225..3301f19f931 100644 --- a/src/fsharp/utils/CompilerLocationUtils.fsi +++ b/src/fsharp/utils/CompilerLocationUtils.fsi @@ -3,7 +3,6 @@ namespace Internal.Utilities open Microsoft.FSharp.Core -open System.IO module internal FSharpEnvironment = @@ -30,7 +29,8 @@ module internal FSharpEnvironment = val toolingCompatiblePaths: unit -> string list - val searchToolPaths: path:string option -> compilerToolPaths:seq -> seq + val searchToolPaths: + path:string option -> compilerToolPaths:seq -> seq val getTypeProviderAssembly: runTimeAssemblyFileName:string * @@ -39,26 +39,4 @@ module internal FSharpEnvironment = raiseError:(string option -> exn -> System.Reflection.Assembly option) -> System.Reflection.Assembly option - val getFSharpCompilerLocation: unit -> string - - val getDefaultFSharpCoreLocation: unit -> string - - val getDefaultFsiLibraryLocation: unit -> string - - val getCompilerToolsDesignTimeAssemblyPaths: compilerToolPaths:seq -> seq - - val fsiLibraryName: string - - val getFSharpCoreLibraryName: string - - val isWindows: bool - - val dotnet: string - - val getDotnetHostPath: unit -> string option - - val getDotnetHostDirectories: unit -> string [] - - val getDotnetHostDirectory: unit -> string option - - val getDotnetHostSubDirectories: string -> DirectoryInfo [] + val getCompilerToolsDesignTimeAssemblyPaths: compilerToolPaths:seq -> seq \ No newline at end of file diff --git a/src/fsharp/utils/FileSystem.fs b/src/fsharp/utils/FileSystem.fs deleted file mode 100644 index 9346e6ab1a8..00000000000 --- a/src/fsharp/utils/FileSystem.fs +++ /dev/null @@ -1,949 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.IO -open System -open System.IO -open System.IO.MemoryMappedFiles -open System.Buffers -open System.Reflection -open System.Threading -open System.Runtime.InteropServices -open FSharp.NativeInterop -open Internal.Utilities.Library - -open System.Text - -exception IllegalFileNameChar of string * char - -#nowarn "9" -module internal Bytes = - let b0 n = (n &&& 0xFF) - let b1 n = ((n >>> 8) &&& 0xFF) - let b2 n = ((n >>> 16) &&& 0xFF) - let b3 n = ((n >>> 24) &&& 0xFF) - - let dWw1 n = int32 ((n >>> 32) &&& 0xFFFFFFFFL) - let dWw0 n = int32 (n &&& 0xFFFFFFFFL) - - let get (b:byte[]) n = int32 (Array.get b n) - let zeroCreate n : byte[] = Array.zeroCreate n - - let sub ( b:byte[]) s l = Array.sub b s l - let blit (a:byte[]) b c d e = Array.blit a b c d e - - let ofInt32Array (arr:int[]) = Array.init arr.Length (fun i -> byte arr.[i]) - - let stringAsUtf8NullTerminated (s:string) = - Array.append (Encoding.UTF8.GetBytes s) (ofInt32Array [| 0x0 |]) - - let stringAsUnicodeNullTerminated (s:string) = - Array.append (Encoding.Unicode.GetBytes s) (ofInt32Array [| 0x0;0x0 |]) - -[] -[] -type ByteMemory() = - abstract Item: int -> byte with get, set - abstract Length: int - abstract ReadAllBytes: unit -> byte[] - abstract ReadBytes: pos: int * count: int -> byte[] - abstract ReadInt32: pos: int -> int - abstract ReadUInt16: pos: int -> uint16 - abstract ReadUtf8String: pos: int * count: int -> string - abstract Slice: pos: int * count: int -> ByteMemory - abstract CopyTo: Stream -> unit - abstract Copy: srcOffset: int * dest: byte[] * destOffset: int * count: int -> unit - abstract ToArray: unit -> byte[] - abstract AsStream: unit -> Stream - abstract AsReadOnlyStream: unit -> Stream - -[] -[] -type ByteArrayMemory(bytes: byte[], offset, length) = - inherit ByteMemory() - - let checkCount count = - if count < 0 then - raise (ArgumentOutOfRangeException("count", "Count is less than zero.")) - - do - if length < 0 || length > bytes.Length then - raise (ArgumentOutOfRangeException("length")) - - if offset < 0 || (offset + length) > bytes.Length then - raise (ArgumentOutOfRangeException("offset")) - - override _.Item - with get i = bytes.[offset + i] - and set i v = bytes.[offset + i] <- v - - override _.Length = length - - override _.ReadAllBytes () = bytes - - override _.ReadBytes(pos, count) = - checkCount count - if count > 0 then - Array.sub bytes (offset + pos) count - else - Array.empty - - override _.ReadInt32 pos = - let finalOffset = offset + pos - (uint32 bytes.[finalOffset]) ||| - ((uint32 bytes.[finalOffset + 1]) <<< 8) ||| - ((uint32 bytes.[finalOffset + 2]) <<< 16) ||| - ((uint32 bytes.[finalOffset + 3]) <<< 24) - |> int - - override _.ReadUInt16 pos = - let finalOffset = offset + pos - (uint16 bytes.[finalOffset]) ||| - ((uint16 bytes.[finalOffset + 1]) <<< 8) - - override _.ReadUtf8String(pos, count) = - checkCount count - if count > 0 then - Encoding.UTF8.GetString(bytes, offset + pos, count) - else - String.Empty - - override _.Slice(pos, count) = - checkCount count - if count > 0 then - ByteArrayMemory(bytes, offset + pos, count) :> ByteMemory - else - ByteArrayMemory(Array.empty, 0, 0) :> ByteMemory - - override _.CopyTo stream = - if length > 0 then - stream.Write(bytes, offset, length) - - override _.Copy(srcOffset, dest, destOffset, count) = - checkCount count - if count > 0 then - Array.blit bytes (offset + srcOffset) dest destOffset count - - override _.ToArray() = - if length > 0 then - Array.sub bytes offset length - else - Array.empty - - override _.AsStream() = - if length > 0 then - new MemoryStream(bytes, offset, length) :> Stream - else - new MemoryStream([||], 0, 0, false) :> Stream - - override _.AsReadOnlyStream() = - if length > 0 then - new MemoryStream(bytes, offset, length, false) :> Stream - else - new MemoryStream([||], 0, 0, false) :> Stream - -[] -[] -type SafeUnmanagedMemoryStream = - inherit UnmanagedMemoryStream - - val mutable private holder: obj - val mutable private isDisposed: bool - - new (addr, length, holder) = - { - inherit UnmanagedMemoryStream(addr, length) - holder = holder - isDisposed = false - } - - new (addr: nativeptr, length: int64, capacity: int64, access: FileAccess, holder) = - { - inherit UnmanagedMemoryStream(addr, length, capacity, access) - holder = holder - isDisposed = false - } - - override x.Dispose disposing = - base.Dispose disposing - x.holder <- null // Null out so it can be collected. - -type internal MemoryMappedStream(mmf: MemoryMappedFile, length: int64) = - inherit Stream() - - let viewStream = mmf.CreateViewStream(0L, length, MemoryMappedFileAccess.Read) - - member _.ViewStream = viewStream - - override x.CanRead = viewStream.CanRead - override x.CanWrite = viewStream.CanWrite - override x.CanSeek = viewStream.CanSeek - override x.Position with get() = viewStream.Position and set v = (viewStream.Position <- v) - override x.Length = viewStream.Length - override x.Flush() = viewStream.Flush() - override x.Seek(offset, origin) = viewStream.Seek(offset, origin) - override x.SetLength(value) = viewStream.SetLength(value) - override x.Write(buffer, offset, count) = viewStream.Write(buffer, offset, count) - override x.Read(buffer, offset, count) = viewStream.Read(buffer, offset, count) - - override x.Finalize() = - x.Dispose() - - interface IDisposable with - override x.Dispose() = - GC.SuppressFinalize x - mmf.Dispose() - viewStream.Dispose() - - -[] -type RawByteMemory(addr: nativeptr, length: int, holder: obj) = - inherit ByteMemory () - - let check i = - if i < 0 || i >= length then - raise (ArgumentOutOfRangeException(nameof i)) - - let checkCount count = - if count < 0 then - raise (ArgumentOutOfRangeException(nameof count, "Count is less than zero.")) - - do - if length < 0 then - raise (ArgumentOutOfRangeException(nameof length)) - - override _.Item - with get i = - check i - NativePtr.add addr i - |> NativePtr.read - and set i v = - check i - NativePtr.set addr i v - - override _.Length = length - - override this.ReadAllBytes() = - this.ReadBytes(0, length) - - override _.ReadBytes(pos, count) = - checkCount count - if count > 0 then - check pos - check (pos + count - 1) - let res = Bytes.zeroCreate count - Marshal.Copy(NativePtr.toNativeInt addr + nativeint pos, res, 0, count) - res - else - Array.empty - - override _.ReadInt32 pos = - check pos - check (pos + 3) - let finalAddr = NativePtr.toNativeInt addr + nativeint pos - uint32(Marshal.ReadByte(finalAddr, 0)) ||| - (uint32(Marshal.ReadByte(finalAddr, 1)) <<< 8) ||| - (uint32(Marshal.ReadByte(finalAddr, 2)) <<< 16) ||| - (uint32(Marshal.ReadByte(finalAddr, 3)) <<< 24) - |> int - - override _.ReadUInt16 pos = - check pos - check (pos + 1) - let finalAddr = NativePtr.toNativeInt addr + nativeint pos - uint16(Marshal.ReadByte(finalAddr, 0)) ||| - (uint16(Marshal.ReadByte(finalAddr, 1)) <<< 8) - - override _.ReadUtf8String(pos, count) = - checkCount count - if count > 0 then - check pos - check (pos + count - 1) - Encoding.UTF8.GetString(NativePtr.add addr pos, count) - else - String.Empty - - override _.Slice(pos, count) = - checkCount count - if count > 0 then - check pos - check (pos + count - 1) - RawByteMemory(NativePtr.add addr pos, count, holder) :> ByteMemory - else - ByteArrayMemory(Array.empty, 0, 0) :> ByteMemory - - override x.CopyTo stream = - if length > 0 then - use stream2 = x.AsStream() - stream2.CopyTo stream - - override _.Copy(srcOffset, dest, destOffset, count) = - checkCount count - if count > 0 then - check srcOffset - Marshal.Copy(NativePtr.toNativeInt addr + nativeint srcOffset, dest, destOffset, count) - - override _.ToArray() = - if length > 0 then - let res = Array.zeroCreate length - Marshal.Copy(NativePtr.toNativeInt addr, res, 0, res.Length) - res - else - Array.empty - - override _.AsStream() = - if length > 0 then - new SafeUnmanagedMemoryStream(addr, int64 length, holder) :> Stream - else - new MemoryStream([||], 0, 0, false) :> Stream - - override _.AsReadOnlyStream() = - if length > 0 then - new SafeUnmanagedMemoryStream(addr, int64 length, int64 length, FileAccess.Read, holder) :> Stream - else - new MemoryStream([||], 0, 0, false) :> Stream - -[] -type ReadOnlyByteMemory(bytes: ByteMemory) = - member _.Item with get i = bytes.[i] - member _.Length with get () = bytes.Length - member _.ReadAllBytes() = bytes.ReadAllBytes() - member _.ReadBytes(pos, count) = bytes.ReadBytes(pos, count) - member _.ReadInt32 pos = bytes.ReadInt32 pos - member _.ReadUInt16 pos = bytes.ReadUInt16 pos - member _.ReadUtf8String(pos, count) = bytes.ReadUtf8String(pos, count) - member _.Slice(pos, count) = bytes.Slice(pos, count) |> ReadOnlyByteMemory - member _.CopyTo stream = bytes.CopyTo stream - member _.Copy(srcOffset, dest, destOffset, count) = bytes.Copy(srcOffset, dest, destOffset, count) - member _.ToArray() = bytes.ToArray() - member _.AsStream() = bytes.AsReadOnlyStream() - member _.Underlying = bytes - -[] -module MemoryMappedFileExtensions = - - let private trymmf length copyTo = - let length = int64 length - if length = 0L then - None - else - if runningOnMono then - // mono's MemoryMappedFile implementation throws with null `mapName`, so we use byte arrays instead: https://github.com/mono/mono/issues/1024 - None - else - // Try to create a memory mapped file and copy the contents of the given bytes to it. - // If this fails, then we clean up and return None. - try - let mmf = MemoryMappedFile.CreateNew(null, length, MemoryMappedFileAccess.ReadWrite, MemoryMappedFileOptions.None, HandleInheritability.None) - try - use stream = mmf.CreateViewStream(0L, length, MemoryMappedFileAccess.ReadWrite) - copyTo stream - Some mmf - with - | _ -> - mmf.Dispose() - None - with - | _ -> - None - - type MemoryMappedFile with - static member TryFromByteMemory(bytes: ReadOnlyByteMemory) = - trymmf (int64 bytes.Length) bytes.CopyTo - - static member TryFromMemory(bytes: ReadOnlyMemory) = - let length = int64 bytes.Length - trymmf length - (fun stream -> - stream.SetLength(stream.Length + length) - let span = Span(stream.PositionPointer |> NativePtr.toVoidPtr, int length) - bytes.Span.CopyTo(span) - stream.Position <- stream.Position + length - ) - -[] -module internal FileSystemUtils = - let checkPathForIllegalChars = - let chars = new System.Collections.Generic.HashSet<_>(Path.GetInvalidPathChars()) - (fun (path:string) -> - for c in path do - if chars.Contains c then raise(IllegalFileNameChar(path, c))) - - let checkSuffix (x:string) (y:string) = x.EndsWithOrdinal(y) - - let hasExtensionWithValidate (validate:bool) (s:string) = - if validate then (checkPathForIllegalChars s) |> ignore - let sLen = s.Length - (sLen >= 1 && s.[sLen - 1] = '.' && s <> ".." && s <> ".") - || Path.HasExtension(s) - - let hasExtension (s:string) = hasExtensionWithValidate true s - - let chopExtension (s:string) = - checkPathForIllegalChars s - if s = "." then "" else // for OCaml compatibility - if not (hasExtensionWithValidate false s) then - raise (System.ArgumentException("chopExtension")) // message has to be precisely this, for OCaml compatibility, and no argument name can be set - Path.Combine (Path.GetDirectoryName s, Path.GetFileNameWithoutExtension(s)) - - let fileNameOfPath s = - checkPathForIllegalChars s - Path.GetFileName(s) - - let fileNameWithoutExtensionWithValidate (validate:bool) s = - if validate then checkPathForIllegalChars s |> ignore - Path.GetFileNameWithoutExtension(s) - - let fileNameWithoutExtension s = fileNameWithoutExtensionWithValidate true s - - let trimQuotes (s:string) = - s.Trim( [|' '; '\"'|] ) - - let hasSuffixCaseInsensitive suffix filename = (* case-insensitive *) - checkSuffix (String.lowercase filename) (String.lowercase suffix) - - let isDll file = hasSuffixCaseInsensitive ".dll" file - -[] -type IAssemblyLoader = - abstract AssemblyLoadFrom: fileName: string -> Assembly - abstract AssemblyLoad: assemblyName: AssemblyName -> Assembly - -[] -type DefaultAssemblyLoader() = - interface IAssemblyLoader with - member _.AssemblyLoadFrom(fileName: string) = Assembly.UnsafeLoadFrom fileName - member _.AssemblyLoad(assemblyName: AssemblyName) = Assembly.Load assemblyName - -[] -type IFileSystem = - abstract AssemblyLoader: IAssemblyLoader - abstract OpenFileForReadShim: filePath: string * ?useMemoryMappedFile: bool * ?shouldShadowCopy: bool -> Stream - abstract OpenFileForWriteShim: filePath: string * ?fileMode: FileMode * ?fileAccess: FileAccess * ?fileShare: FileShare -> Stream - abstract GetFullPathShim: fileName: string -> string - abstract GetFullFilePathInDirectoryShim: dir: string -> fileName: string -> string - abstract IsPathRootedShim: path: string -> bool - abstract NormalizePathShim: path: string -> string - abstract IsInvalidPathShim: path: string -> bool - abstract GetTempPathShim: unit -> string - abstract GetDirectoryNameShim: path: string -> string - abstract GetLastWriteTimeShim: fileName: string -> DateTime - abstract GetCreationTimeShim: path: string -> DateTime - abstract CopyShim: src: string * dest: string * overwrite: bool -> unit - abstract FileExistsShim: fileName: string -> bool - abstract FileDeleteShim: fileName: string -> unit - abstract DirectoryCreateShim: path: string -> DirectoryInfo - abstract DirectoryExistsShim: path: string -> bool - abstract DirectoryDeleteShim: path: string -> unit - abstract EnumerateFilesShim: path: string * pattern: string -> string seq - abstract EnumerateDirectoriesShim: path: string -> string seq - abstract IsStableFileHeuristic: fileName: string -> bool - -[] -type DefaultFileSystem() as this = - abstract AssemblyLoader : IAssemblyLoader - default _.AssemblyLoader = DefaultAssemblyLoader() :> IAssemblyLoader - - abstract OpenFileForReadShim: filePath: string * ?useMemoryMappedFile: bool * ?shouldShadowCopy: bool -> Stream - default _.OpenFileForReadShim(filePath: string, ?useMemoryMappedFile: bool, ?shouldShadowCopy: bool) : Stream = - let fileMode = FileMode.Open - let fileAccess = FileAccess.Read - let fileShare = FileShare.Delete ||| FileShare.ReadWrite - let shouldShadowCopy = defaultArg shouldShadowCopy false - let useMemoryMappedFile = defaultArg useMemoryMappedFile false - let fileStream = new FileStream(filePath, fileMode, fileAccess, fileShare) - let length = fileStream.Length - - // We want to use mmaped files only when: - // - Opening large binary files (no need to use for source or resource files really) - // - Running on mono, since its MemoryMappedFile implementation throws when "mapName" is not provided (is null). - // (See: https://github.com/mono/mono/issues/10245) - - if runningOnMono || (not useMemoryMappedFile) then - fileStream :> Stream - else - let mmf = - if shouldShadowCopy then - let mmf = - MemoryMappedFile.CreateNew( - null, - length, - MemoryMappedFileAccess.Read, - MemoryMappedFileOptions.None, - HandleInheritability.None) - use stream = mmf.CreateViewStream(0L, length, MemoryMappedFileAccess.Read) - fileStream.CopyTo(stream) - fileStream.Dispose() - mmf - else - MemoryMappedFile.CreateFromFile( - fileStream, - null, - length, - MemoryMappedFileAccess.Read, - HandleInheritability.None, - leaveOpen=false) - - let stream = new MemoryMappedStream(mmf, length) - - if not stream.CanRead then - invalidOp "Cannot read file" - stream :> Stream - - - abstract OpenFileForWriteShim: filePath: string * ?fileMode: FileMode * ?fileAccess: FileAccess * ?fileShare: FileShare -> Stream - default _.OpenFileForWriteShim(filePath: string, ?fileMode: FileMode, ?fileAccess: FileAccess, ?fileShare: FileShare) : Stream = - let fileMode = defaultArg fileMode FileMode.OpenOrCreate - let fileAccess = defaultArg fileAccess FileAccess.ReadWrite - let fileShare = defaultArg fileShare FileShare.Delete ||| FileShare.ReadWrite - - new FileStream(filePath, fileMode, fileAccess, fileShare) :> Stream - - abstract GetFullPathShim: fileName: string -> string - default _.GetFullPathShim (fileName: string) = Path.GetFullPath fileName - - abstract GetFullFilePathInDirectoryShim: dir: string -> fileName: string -> string - default this.GetFullFilePathInDirectoryShim (dir: string) (fileName: string) = - let p = if (this :> IFileSystem).IsPathRootedShim(fileName) then fileName else Path.Combine(dir, fileName) - try (this :> IFileSystem).GetFullPathShim(p) with - | :? ArgumentException - | :? ArgumentNullException - | :? NotSupportedException - | :? PathTooLongException - | :? System.Security.SecurityException -> p - - abstract IsPathRootedShim: path: string -> bool - default _.IsPathRootedShim (path: string) = Path.IsPathRooted path - - abstract NormalizePathShim: path: string -> string - default _.NormalizePathShim (path: string) = - try - let ifs = this :> IFileSystem - if ifs.IsPathRootedShim path then - ifs.GetFullPathShim path - else - path - with _ -> path - - abstract IsInvalidPathShim: path: string -> bool - default _.IsInvalidPathShim(path: string) = - let isInvalidPath(p: string) = - String.IsNullOrEmpty p || p.IndexOfAny(Path.GetInvalidPathChars()) <> -1 - - let isInvalidFilename(p: string) = - String.IsNullOrEmpty p || p.IndexOfAny(Path.GetInvalidFileNameChars()) <> -1 - - let isInvalidDirectory(d: string) = - d=null || d.IndexOfAny(Path.GetInvalidPathChars()) <> -1 - - isInvalidPath path || - let directory = Path.GetDirectoryName path - let filename = Path.GetFileName path - isInvalidDirectory directory || isInvalidFilename filename - - abstract GetTempPathShim: unit -> string - default _.GetTempPathShim() = Path.GetTempPath() - - abstract GetDirectoryNameShim: path: string -> string - default _.GetDirectoryNameShim(path:string) = - FileSystemUtils.checkPathForIllegalChars path - if path = "" then "." - else - match Path.GetDirectoryName(path) with - | null -> if (this :> IFileSystem).IsPathRootedShim(path) then path else "." - | res -> if res = "" then "." else res - - abstract GetLastWriteTimeShim: fileName: string -> DateTime - default _.GetLastWriteTimeShim (fileName: string) = File.GetLastWriteTimeUtc fileName - - abstract GetCreationTimeShim: path: string -> DateTime - default _.GetCreationTimeShim (path: string) = File.GetCreationTimeUtc path - - abstract CopyShim: src: string * dest: string * overwrite: bool -> unit - default _.CopyShim (src: string, dest: string, overwrite: bool) = File.Copy(src, dest, overwrite) - - abstract FileExistsShim: fileName: string -> bool - default _.FileExistsShim (fileName: string) = File.Exists fileName - - abstract FileDeleteShim: fileName: string -> unit - default _.FileDeleteShim (fileName: string) = File.Delete fileName - - abstract DirectoryCreateShim: path: string -> DirectoryInfo - default _.DirectoryCreateShim (path: string) = Directory.CreateDirectory path - - abstract DirectoryExistsShim: path: string -> bool - default _.DirectoryExistsShim (path: string) = Directory.Exists path - - abstract DirectoryDeleteShim: path: string -> unit - default _.DirectoryDeleteShim (path: string) = Directory.Delete path - - abstract EnumerateFilesShim: path: string * pattern: string -> string seq - default _.EnumerateFilesShim(path: string, pattern: string) = Directory.EnumerateFiles(path, pattern) - - abstract EnumerateDirectoriesShim: path: string -> string seq - default _.EnumerateDirectoriesShim(path: string) = Directory.EnumerateDirectories(path) - - abstract IsStableFileHeuristic: fileName: string -> bool - default _.IsStableFileHeuristic (fileName: string) = - let directory = Path.GetDirectoryName fileName - directory.Contains("Reference Assemblies/") || - directory.Contains("Reference Assemblies\\") || - directory.Contains("packages/") || - directory.Contains("packages\\") || - directory.Contains("lib/mono/") - - interface IFileSystem with - member _.AssemblyLoader = this.AssemblyLoader - - member _.OpenFileForReadShim(filePath: string, ?useMemoryMappedFile: bool, ?shouldShadowCopy: bool) : Stream = - let shouldShadowCopy = defaultArg shouldShadowCopy false - let useMemoryMappedFile = defaultArg useMemoryMappedFile false - this.OpenFileForReadShim(filePath, useMemoryMappedFile, shouldShadowCopy) - - member _.OpenFileForWriteShim(filePath: string, ?fileMode: FileMode, ?fileAccess: FileAccess, ?fileShare: FileShare) : Stream = - let fileMode = defaultArg fileMode FileMode.OpenOrCreate - let fileAccess = defaultArg fileAccess FileAccess.ReadWrite - let fileShare = defaultArg fileShare FileShare.Delete ||| FileShare.ReadWrite - this.OpenFileForWriteShim(filePath, fileMode, fileAccess, fileShare) - - member _.GetFullPathShim (fileName: string) = this.GetFullPathShim fileName - member _.GetFullFilePathInDirectoryShim (dir: string) (fileName: string) = this.GetFullFilePathInDirectoryShim dir fileName - member _.IsPathRootedShim (path: string) = this.IsPathRootedShim path - member _.NormalizePathShim (path: string) = this.NormalizePathShim path - member _.IsInvalidPathShim(path: string) = this.IsInvalidPathShim path - member _.GetTempPathShim() = this.GetTempPathShim() - member _.GetDirectoryNameShim(s:string) = this.GetDirectoryNameShim s - member _.GetLastWriteTimeShim (fileName: string) = this.GetLastWriteTimeShim fileName - member _.GetCreationTimeShim (path: string) = this.GetCreationTimeShim path - member _.CopyShim (src: string, dest: string, overwrite: bool) = this.CopyShim(src, dest, overwrite) - member _.FileExistsShim (fileName: string) = this.FileExistsShim fileName - member _.FileDeleteShim (fileName: string) = this.FileDeleteShim fileName - member _.DirectoryCreateShim (path: string) = this.DirectoryCreateShim path - member _.DirectoryExistsShim (path: string) = this.DirectoryExistsShim path - member _.DirectoryDeleteShim (path: string) = this.DirectoryDeleteShim path - member _.EnumerateFilesShim(path: string, pattern: string) = this.EnumerateFilesShim(path, pattern) - member _.EnumerateDirectoriesShim(path: string) = this.EnumerateDirectoriesShim path - member _.IsStableFileHeuristic (fileName: string) = this.IsStableFileHeuristic fileName - -[] -module public StreamExtensions = - let utf8noBOM = new UTF8Encoding(false, true) :> Encoding - type System.IO.Stream with - member s.GetWriter(?encoding: Encoding) : TextWriter = - let encoding = defaultArg encoding utf8noBOM - new StreamWriter(s, encoding) :> TextWriter - - member s.WriteAllLines(contents: string seq, ?encoding: Encoding) = - let encoding = defaultArg encoding utf8noBOM - use writer = s.GetWriter(encoding) - for l in contents do - writer.WriteLine(l) - - member s.Write (data: 'a) : unit = - use sw = s.GetWriter() - sw.Write(data) - - member s.GetReader(codePage: int option, ?retryLocked: bool) = - let retryLocked = defaultArg retryLocked false - let retryDelayMilliseconds = 50 - let numRetries = 60 - let rec getSource retryNumber = - try - // Use the .NET functionality to auto-detect the unicode encoding - match codePage with - | None -> new StreamReader(s, true) - | Some n -> new StreamReader(s, Encoding.GetEncoding(n)) - with - // We can get here if the file is locked--like when VS is saving a file--we don't have direct - // access to the HRESULT to see that this is EONOACCESS. - | :? IOException as err when retryLocked && err.GetType() = typeof -> - // This second check is to make sure the exception is exactly IOException and none of these for example: - // DirectoryNotFoundException - // EndOfStreamException - // FileNotFoundException - // FileLoadException - // PathTooLongException - if retryNumber < numRetries then - System.Threading.Thread.Sleep (retryDelayMilliseconds) - getSource (retryNumber + 1) - else - reraise() - getSource 0 - - member s.ReadBytes (start, len) = - s.Seek(int64 start, SeekOrigin.Begin) |> ignore - let buffer = Array.zeroCreate len - let mutable n = 0 - while n < len do - n <- n + s.Read(buffer, n, len-n) - buffer - - member s.ReadAllBytes() = - use reader = new BinaryReader(s) - let count = (int s.Length) - reader.ReadBytes(count) - - member s.ReadAllText(?encoding: Encoding) = - let encoding = defaultArg encoding Encoding.UTF8 - use sr = new StreamReader(s, encoding, true) - sr.ReadToEnd() - - member s.ReadLines(?encoding: Encoding) : string seq = - let encoding = defaultArg encoding Encoding.UTF8 - seq { - use sr = new StreamReader(s, encoding, true) - while not <| sr.EndOfStream do - yield sr.ReadLine() - } - member s.ReadAllLines(?encoding: Encoding) : string array = - let encoding = defaultArg encoding Encoding.UTF8 - s.ReadLines(encoding) |> Seq.toArray - - /// If we are working with the view stream from mmf, we wrap it in RawByteMemory (which does zero copy, bu just using handle from the views stream). - /// However, when we use any other stream (FileStream, MemoryStream, etc) - we just read everything from it and expose via ByteArrayMemory. - member s.AsByteMemory() : ByteMemory = - match s with - | :? MemoryMappedStream as mmfs -> - let length = mmfs.Length - RawByteMemory( - NativePtr.ofNativeInt (mmfs.ViewStream.SafeMemoryMappedViewHandle.DangerousGetHandle()), - int length, - mmfs) :> ByteMemory - - | _ -> - let bytes = s.ReadAllBytes() - let byteArrayMemory = if bytes.Length = 0 then ByteArrayMemory([||], 0, 0) else ByteArrayMemory(bytes, 0, bytes.Length) - byteArrayMemory :> ByteMemory - -[] -module public FileSystemAutoOpens = - /// The global hook into the file system - let mutable FileSystem: IFileSystem = DefaultFileSystem() :> IFileSystem - -type ByteMemory with - - member x.AsReadOnly() = ReadOnlyByteMemory x - - static member Empty = ByteArrayMemory([||], 0, 0) :> ByteMemory - - static member FromMemoryMappedFile(mmf: MemoryMappedFile) = - let accessor = mmf.CreateViewAccessor() - RawByteMemory.FromUnsafePointer(accessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), int accessor.Capacity, (mmf, accessor)) - - static member FromUnsafePointer(addr, length, holder: obj) = - RawByteMemory(NativePtr.ofNativeInt addr, length, holder) :> ByteMemory - - static member FromArray(bytes, offset, length) = - ByteArrayMemory(bytes, offset, length) :> ByteMemory - - static member FromArray (bytes: byte array) = - if bytes.Length = 0 then - ByteMemory.Empty - else - ByteArrayMemory.FromArray(bytes, 0, bytes.Length) - -type internal ByteStream = - { bytes: ReadOnlyByteMemory - mutable pos: int - max: int } - member b.ReadByte() = - if b.pos >= b.max then failwith "end of stream" - let res = b.bytes.[b.pos] - b.pos <- b.pos + 1 - res - member b.ReadUtf8String n = - let res = b.bytes.ReadUtf8String(b.pos,n) - b.pos <- b.pos + n; res - - static member FromBytes (b: ReadOnlyByteMemory,start,length) = - if start < 0 || (start+length) > b.Length then failwith "FromBytes" - { bytes = b; pos = start; max = start+length } - - member b.ReadBytes n = - if b.pos + n > b.max then failwith "ReadBytes: end of stream" - let res = b.bytes.Slice(b.pos, n) - b.pos <- b.pos + n - res - - member b.Position = b.pos -#if LAZY_UNPICKLE - member b.CloneAndSeek = { bytes=b.bytes; pos=pos; max=b.max } - member b.Skip = b.pos <- b.pos + n -#endif - - -type internal ByteBuffer = - { useArrayPool: bool - mutable isDisposed: bool - mutable bbArray: byte[] - mutable bbCurrent: int } - - member inline private buf.CheckDisposed() = - if buf.isDisposed then - raise(ObjectDisposedException(nameof(ByteBuffer))) - - member private buf.Ensure newSize = - let oldBufSize = buf.bbArray.Length - if newSize > oldBufSize then - let old = buf.bbArray - buf.bbArray <- - if buf.useArrayPool then - ArrayPool.Shared.Rent (max newSize (oldBufSize * 2)) - else - Bytes.zeroCreate (max newSize (oldBufSize * 2)) - Bytes.blit old 0 buf.bbArray 0 buf.bbCurrent - if buf.useArrayPool then - ArrayPool.Shared.Return old - - member buf.AsMemory() = - buf.CheckDisposed() - ReadOnlyMemory(buf.bbArray, 0, buf.bbCurrent) - - member buf.EmitIntAsByte (i:int) = - buf.CheckDisposed() - let newSize = buf.bbCurrent + 1 - buf.Ensure newSize - buf.bbArray.[buf.bbCurrent] <- byte i - buf.bbCurrent <- newSize - - member buf.EmitByte (b:byte) = - buf.CheckDisposed() - buf.EmitIntAsByte (int b) - - member buf.EmitIntsAsBytes (arr:int[]) = - buf.CheckDisposed() - let n = arr.Length - let newSize = buf.bbCurrent + n - buf.Ensure newSize - let bbArr = buf.bbArray - let bbBase = buf.bbCurrent - for i = 0 to n - 1 do - bbArr.[bbBase + i] <- byte arr.[i] - buf.bbCurrent <- newSize - - member bb.FixupInt32 pos value = - bb.CheckDisposed() - bb.bbArray.[pos] <- (Bytes.b0 value |> byte) - bb.bbArray.[pos + 1] <- (Bytes.b1 value |> byte) - bb.bbArray.[pos + 2] <- (Bytes.b2 value |> byte) - bb.bbArray.[pos + 3] <- (Bytes.b3 value |> byte) - - member buf.EmitInt32 n = - buf.CheckDisposed() - let newSize = buf.bbCurrent + 4 - buf.Ensure newSize - buf.FixupInt32 buf.bbCurrent n - buf.bbCurrent <- newSize - - member buf.EmitBytes (i:byte[]) = - buf.CheckDisposed() - let n = i.Length - let newSize = buf.bbCurrent + n - buf.Ensure newSize - Bytes.blit i 0 buf.bbArray buf.bbCurrent n - buf.bbCurrent <- newSize - - member buf.EmitMemory (i:ReadOnlyMemory) = - buf.CheckDisposed() - let n = i.Length - let newSize = buf.bbCurrent + n - buf.Ensure newSize - i.CopyTo(Memory(buf.bbArray, buf.bbCurrent, n)) - buf.bbCurrent <- newSize - - member buf.EmitByteMemory (i:ReadOnlyByteMemory) = - buf.CheckDisposed() - let n = i.Length - let newSize = buf.bbCurrent + n - buf.Ensure newSize - i.Copy(0, buf.bbArray, buf.bbCurrent, n) - buf.bbCurrent <- newSize - - member buf.EmitInt32AsUInt16 n = - buf.CheckDisposed() - let newSize = buf.bbCurrent + 2 - buf.Ensure newSize - buf.bbArray.[buf.bbCurrent] <- (Bytes.b0 n |> byte) - buf.bbArray.[buf.bbCurrent + 1] <- (Bytes.b1 n |> byte) - buf.bbCurrent <- newSize - - member buf.EmitBoolAsByte (b:bool) = - buf.CheckDisposed() - buf.EmitIntAsByte (if b then 1 else 0) - - member buf.EmitUInt16 (x:uint16) = - buf.CheckDisposed() - buf.EmitInt32AsUInt16 (int32 x) - - member buf.EmitInt64 x = - buf.CheckDisposed() - buf.EmitInt32 (Bytes.dWw0 x) - buf.EmitInt32 (Bytes.dWw1 x) - - member buf.Position = - buf.CheckDisposed() - buf.bbCurrent - - static member Create(capacity, useArrayPool) = - let useArrayPool = defaultArg useArrayPool false - { useArrayPool = useArrayPool - isDisposed = false - bbArray = if useArrayPool then ArrayPool.Shared.Rent capacity else Bytes.zeroCreate capacity - bbCurrent = 0 } - - interface IDisposable with - - member this.Dispose() = - if not this.isDisposed then - this.isDisposed <- true - if this.useArrayPool then - ArrayPool.Shared.Return this.bbArray - -[] -type ByteStorage(getByteMemory: unit -> ReadOnlyByteMemory) = - - let mutable cached = Unchecked.defaultof> - - let getAndCache () = - let byteMemory = getByteMemory () - cached <- WeakReference(byteMemory.Underlying) - byteMemory - - member _.GetByteMemory() = - match cached with - | null -> getAndCache () - | _ -> - match cached.TryGetTarget() with - | true, byteMemory -> byteMemory.AsReadOnly() - | _ -> getAndCache () - - static member FromByteArray(bytes: byte []) = - ByteStorage.FromByteMemory(ByteMemory.FromArray(bytes).AsReadOnly()) - - static member FromByteMemory(bytes: ReadOnlyByteMemory) = - ByteStorage(fun () -> bytes) - - static member FromByteMemoryAndCopy(bytes: ReadOnlyByteMemory, useBackingMemoryMappedFile: bool) = - if useBackingMemoryMappedFile then - match MemoryMappedFile.TryFromByteMemory(bytes) with - | Some mmf -> - ByteStorage(fun () -> ByteMemory.FromMemoryMappedFile(mmf).AsReadOnly()) - | _ -> - let copiedBytes = ByteMemory.FromArray(bytes.ToArray()).AsReadOnly() - ByteStorage.FromByteMemory(copiedBytes) - else - let copiedBytes = ByteMemory.FromArray(bytes.ToArray()).AsReadOnly() - ByteStorage.FromByteMemory(copiedBytes) - - static member FromMemoryAndCopy(bytes: ReadOnlyMemory, useBackingMemoryMappedFile: bool) = - if useBackingMemoryMappedFile then - match MemoryMappedFile.TryFromMemory(bytes) with - | Some mmf -> - ByteStorage(fun () -> ByteMemory.FromMemoryMappedFile(mmf).AsReadOnly()) - | _ -> - let copiedBytes = ByteMemory.FromArray(bytes.ToArray()).AsReadOnly() - ByteStorage.FromByteMemory(copiedBytes) - else - let copiedBytes = ByteMemory.FromArray(bytes.ToArray()).AsReadOnly() - ByteStorage.FromByteMemory(copiedBytes) - - static member FromByteArrayAndCopy(bytes: byte [], useBackingMemoryMappedFile: bool) = - ByteStorage.FromByteMemoryAndCopy(ByteMemory.FromArray(bytes).AsReadOnly(), useBackingMemoryMappedFile) diff --git a/src/fsharp/utils/FileSystem.fsi b/src/fsharp/utils/FileSystem.fsi deleted file mode 100644 index 14bc45a9850..00000000000 --- a/src/fsharp/utils/FileSystem.fsi +++ /dev/null @@ -1,405 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -// This file contains public types related to the "file system hook" of the FCS API which are used throughout the F# compiler. -namespace FSharp.Compiler.IO - -open System -open System.IO -open System.IO.MemoryMappedFiles -open System.Reflection -open System.Runtime.InteropServices -open System.Text -open System.Runtime.CompilerServices - -open FSharp.NativeInterop - -open Internal.Utilities.Library - -exception IllegalFileNameChar of string * char - -module internal Bytes = - /// returned int will be 0 <= x <= 255 - val get: byte[] -> int -> int - val zeroCreate: int -> byte[] - /// each int must be 0 <= x <= 255 - val ofInt32Array: int[] -> byte[] - /// each int will be 0 <= x <= 255 - val blit: byte[] -> int -> byte[] -> int -> int -> unit - - val stringAsUnicodeNullTerminated: string -> byte[] - val stringAsUtf8NullTerminated: string -> byte[] - -/// A view over bytes. -/// May be backed by managed or unmanaged memory, or memory mapped file. -[] -type public ByteMemory = - - abstract Item: int -> byte with get - - abstract Length: int - - abstract ReadAllBytes: unit -> byte[] - - abstract ReadBytes: pos: int * count: int -> byte[] - - abstract ReadInt32: pos: int -> int - - abstract ReadUInt16: pos: int -> uint16 - - abstract ReadUtf8String: pos: int * count: int -> string - - abstract Slice: pos: int * count: int -> ByteMemory - - abstract CopyTo: Stream -> unit - - abstract Copy: srcOffset: int * dest: byte[] * destOffset: int * count: int -> unit - - abstract ToArray: unit -> byte[] - - /// Get a stream representation of the backing memory. - /// Disposing this will not free up any of the backing memory. - abstract AsStream: unit -> Stream - - /// Get a stream representation of the backing memory. - /// Disposing this will not free up any of the backing memory. - /// Stream cannot be written to. - abstract AsReadOnlyStream: unit -> Stream - -[] -type internal ReadOnlyByteMemory = - - new: ByteMemory -> ReadOnlyByteMemory - - member Item: int -> byte with get - - member Length: int - - member ReadAllBytes: unit -> byte[] - - member ReadBytes: pos: int * count: int -> byte[] - - member ReadInt32: pos: int -> int - - member ReadUInt16: pos: int -> uint16 - - member ReadUtf8String: pos: int * count: int -> string - - member Slice: pos: int * count: int -> ReadOnlyByteMemory - - member CopyTo: Stream -> unit - - member Copy: srcOffset: int * dest: byte[] * destOffset: int * count: int -> unit - - member ToArray: unit -> byte[] - - member AsStream: unit -> Stream - -/// MemoryMapped extensions -module internal MemoryMappedFileExtensions = - type MemoryMappedFile with - static member TryFromByteMemory : bytes: ReadOnlyByteMemory -> MemoryMappedFile option - static member TryFromMemory : bytes: ReadOnlyMemory -> MemoryMappedFile option - -/// Filesystem helpers -module internal FileSystemUtils = - val checkPathForIllegalChars: (string -> unit) - - /// checkSuffix f s returns True if filename "f" ends in suffix "s", - /// e.g. checkSuffix "abc.fs" ".fs" returns true. - val checkSuffix: string -> string -> bool - - /// chopExtension f removes the extension from the given - /// filename. Raises ArgumentException if no extension is present. - val chopExtension: string -> string - - /// Return True if the filename has a "." extension. - val hasExtension: string -> bool - - /// Get the filename of the given path. - val fileNameOfPath: string -> string - - /// Get the filename without extension of the given path. - val fileNameWithoutExtensionWithValidate: bool -> string -> string - val fileNameWithoutExtension: string -> string - - /// Trim the quotes and spaces from either end of a string - val trimQuotes: string -> string - - /// Checks whether filename ends in suffix, ignoring case. - val hasSuffixCaseInsensitive: string -> string -> bool - - /// Checks whether file is dll (ends in .dll) - val isDll: string -> bool - -/// Type which we use to load assemblies. -type public IAssemblyLoader = - /// Used to load a dependency for F# Interactive and in an unused corner-case of type provider loading - abstract member AssemblyLoad: assemblyName:System.Reflection.AssemblyName -> System.Reflection.Assembly - - /// Used to load type providers and located assemblies in F# Interactive - abstract member AssemblyLoadFrom: fileName:string -> System.Reflection.Assembly - -/// Default implementation for IAssemblyLoader -type DefaultAssemblyLoader = - new: unit -> DefaultAssemblyLoader - interface IAssemblyLoader - -/// Represents a shim for the file system -type public IFileSystem = - - // Assembly loader. - abstract member AssemblyLoader : IAssemblyLoader - - /// Open the file for read, returns ByteMemory, uses either FileStream (for smaller files) or MemoryMappedFile (for potentially big files, such as dlls). - abstract member OpenFileForReadShim: filePath: string * ?useMemoryMappedFile: bool * ?shouldShadowCopy: bool -> Stream - - /// Open the file for writing. Returns a Stream. - abstract member OpenFileForWriteShim: filePath: string * ?fileMode: FileMode * ?fileAccess: FileAccess * ?fileShare: FileShare -> Stream - - /// Take in a filename with an absolute path, and return the same filename - /// but canonicalized with respect to extra path separators (e.g. C:\\\\foo.txt) - /// and '..' portions - abstract member GetFullPathShim: fileName:string -> string - - /// Take in a directory, filename, and return canonicalized path to the filename in directory. - /// If filename path is rooted, ignores directory and returns filename path. - /// Otherwise, combines directory with filename and gets full path via GetFullPathShim(string). - abstract member GetFullFilePathInDirectoryShim: dir: string -> fileName: string -> string - - /// A shim over Path.IsPathRooted - abstract member IsPathRootedShim: path:string -> bool - - /// Removes relative parts from any full paths - abstract member NormalizePathShim: path: string -> string - - /// A shim over Path.IsInvalidPath - abstract member IsInvalidPathShim: path:string -> bool - - /// A shim over Path.GetTempPath - abstract member GetTempPathShim: unit -> string - - /// A shim for getting directory name from path - abstract member GetDirectoryNameShim: path: string -> string - - /// Utc time of the last modification - abstract member GetLastWriteTimeShim: fileName:string -> DateTime - - // Utc time of creation - abstract member GetCreationTimeShim: path: string -> DateTime - - // A shim over file copying. - abstract member CopyShim: src: string * dest: string * overwrite: bool -> unit - - /// A shim over File.Exists - abstract member FileExistsShim: fileName: string -> bool - - /// A shim over File.Delete - abstract member FileDeleteShim: fileName: string -> unit - - /// A shim over Directory.Exists - abstract member DirectoryCreateShim: path: string -> DirectoryInfo - - /// A shim over Directory.Exists - abstract member DirectoryExistsShim: path: string -> bool - - /// A shim over Directory.Delete - abstract member DirectoryDeleteShim: path: string -> unit - - /// A shim over Directory.EnumerateFiles - abstract member EnumerateFilesShim: path: string * pattern: string -> string seq - - /// A shim over Directory.EnumerateDirectories - abstract member EnumerateDirectoriesShim: path: string -> string seq - - /// Used to determine if a file will not be subject to deletion during the lifetime of a typical client process. - abstract member IsStableFileHeuristic: fileName:string -> bool - - -/// Represents a default (memory-mapped) implementation of the file system -type DefaultFileSystem = - /// Create a default implementation of the file system - new: unit -> DefaultFileSystem - abstract member AssemblyLoader: IAssemblyLoader - override AssemblyLoader: IAssemblyLoader - - abstract member OpenFileForReadShim: filePath: string * ?useMemoryMappedFile: bool * ?shouldShadowCopy: bool -> Stream - override OpenFileForReadShim: filePath: string * ?useMemoryMappedFile: bool * ?shouldShadowCopy: bool -> Stream - - abstract member OpenFileForWriteShim: filePath: string * ?fileMode: FileMode * ?fileAccess: FileAccess * ?fileShare: FileShare -> Stream - override OpenFileForWriteShim: filePath: string * ?fileMode: FileMode * ?fileAccess: FileAccess * ?fileShare: FileShare -> Stream - - abstract member GetFullPathShim: fileName: string -> string - override GetFullPathShim: fileName: string -> string - - abstract member GetFullFilePathInDirectoryShim: dir: string -> fileName: string -> string - override GetFullFilePathInDirectoryShim: dir: string -> fileName: string -> string - - abstract member IsPathRootedShim: path: string -> bool - override IsPathRootedShim: path: string -> bool - - abstract member NormalizePathShim: path: string -> string - override NormalizePathShim: path: string -> string - - abstract member IsInvalidPathShim: path: string -> bool - override IsInvalidPathShim: path: string -> bool - - abstract member GetTempPathShim: unit -> string - override GetTempPathShim: unit -> string - - abstract member GetDirectoryNameShim: path: string -> string - override GetDirectoryNameShim: path: string -> string - - abstract member GetLastWriteTimeShim: fileName: string -> DateTime - override GetLastWriteTimeShim: fileName: string -> DateTime - - abstract member GetCreationTimeShim: path: string -> DateTime - override GetCreationTimeShim: path: string -> DateTime - - abstract member CopyShim: src: string * dest: string * overwrite: bool -> unit - override CopyShim: src: string * dest: string * overwrite: bool -> unit - - abstract member FileExistsShim: fileName: string -> bool - override FileExistsShim: fileName: string -> bool - - abstract member FileDeleteShim: fileName: string -> unit - override FileDeleteShim: fileName: string -> unit - - abstract member DirectoryCreateShim: path: string -> DirectoryInfo - override DirectoryCreateShim: path: string -> DirectoryInfo - - abstract member DirectoryExistsShim: path: string -> bool - override DirectoryExistsShim: path: string -> bool - - abstract member DirectoryDeleteShim: path: string -> unit - override DirectoryDeleteShim: path: string -> unit - - abstract member EnumerateFilesShim: path: string * pattern: string -> string seq - override EnumerateFilesShim: path: string * pattern: string -> string seq - - abstract member EnumerateDirectoriesShim: path: string -> string seq - override EnumerateDirectoriesShim: path: string -> string seq - - abstract member IsStableFileHeuristic: fileName: string -> bool - override IsStableFileHeuristic: fileName: string -> bool - - interface IFileSystem - -[] -module public StreamExtensions = - - type System.IO.Stream with - member GetWriter : ?encoding: Encoding -> TextWriter - member WriteAllLines : contents: string seq * ?encoding: Encoding -> unit - member Write<'a> : data:'a -> unit - member GetReader : codePage: int option * ?retryLocked: bool -> StreamReader - member ReadBytes : start: int * len: int -> byte[] - member ReadAllBytes : unit -> byte[] - member ReadAllText : ?encoding: Encoding -> string - member ReadLines : ?encoding: Encoding -> string seq - member ReadAllLines : ?encoding: Encoding -> string array - member AsByteMemory : unit -> ByteMemory - -[] -module public FileSystemAutoOpens = - /// The global hook into the file system - val mutable FileSystem: IFileSystem - -type internal ByteMemory with - - member AsReadOnly: unit -> ReadOnlyByteMemory - - /// Empty byte memory. - static member Empty: ByteMemory - - /// Create a ByteMemory object that has a backing memory mapped file. - static member FromMemoryMappedFile: MemoryMappedFile -> ByteMemory - - /// Creates a ByteMemory object that is backed by a raw pointer. - /// Use with care. - static member FromUnsafePointer: addr: nativeint * length: int * holder: obj -> ByteMemory - - /// Creates a ByteMemory object that is backed by a byte array with the specified offset and length. - static member FromArray: bytes: byte[] * offset: int * length: int -> ByteMemory - - /// Creates a ByteMemory object that is backed by a byte array. - static member FromArray: bytes: byte[] -> ByteMemory - -[] -type internal ByteStream = - member ReadByte : unit -> byte - member ReadBytes : int -> ReadOnlyByteMemory - member ReadUtf8String : int -> string - member Position : int - static member FromBytes : ReadOnlyByteMemory * start:int * length:int -> ByteStream - -#if LAZY_UNPICKLE - member CloneAndSeek : int -> ByteStream - member Skip : int -> unit -#endif - -/// Imperative buffers and streams of byte[] -/// Not thread safe. -[] -type internal ByteBuffer = - interface IDisposable - - [] - member AsMemory : unit -> ReadOnlyMemory - - [] - member EmitIntAsByte : int -> unit - - [] - member EmitIntsAsBytes : int[] -> unit - - [] - member EmitByte : byte -> unit - - [] - member EmitBytes : byte[] -> unit - - [] - member EmitMemory : ReadOnlyMemory -> unit - - [] - member EmitByteMemory : ReadOnlyByteMemory -> unit - - [] - member EmitInt32 : int32 -> unit - - [] - member EmitInt64 : int64 -> unit - - [] - member FixupInt32 : pos: int -> value: int32 -> unit - - [] - member EmitInt32AsUInt16 : int32 -> unit - - [] - member EmitBoolAsByte : bool -> unit - - [] - member EmitUInt16 : uint16 -> unit - - member Position : int - static member Create : capacity: int * ?useArrayPool: bool -> ByteBuffer - -[] -type internal ByteStorage = - - member GetByteMemory : unit -> ReadOnlyByteMemory - - /// Creates a ByteStorage whose backing bytes are the given ByteMemory. Does not make a copy. - static member FromByteMemory : ReadOnlyByteMemory -> ByteStorage - - /// Creates a ByteStorage whose backing bytes are the given byte array. Does not make a copy. - static member FromByteArray : byte [] -> ByteStorage - - /// Creates a ByteStorage that has a copy of the given ByteMemory. - static member FromByteMemoryAndCopy : ReadOnlyByteMemory * useBackingMemoryMappedFile: bool -> ByteStorage - - /// Creates a ByteStorage that has a copy of the given Memory. - static member FromMemoryAndCopy : ReadOnlyMemory * useBackingMemoryMappedFile: bool -> ByteStorage - - /// Creates a ByteStorage that has a copy of the given byte array. - static member FromByteArrayAndCopy : byte [] * useBackingMemoryMappedFile: bool -> ByteStorage diff --git a/src/fsharp/utils/HashMultiMap.fs b/src/fsharp/utils/HashMultiMap.fs index ed95a9b40b3..673a31a2a59 100644 --- a/src/fsharp/utils/HashMultiMap.fs +++ b/src/fsharp/utils/HashMultiMap.fs @@ -3,6 +3,7 @@ namespace Internal.Utilities.Collections open System.Collections.Generic +open Microsoft.FSharp.Collections // Each entry in the HashMultiMap dictionary has at least one entry. Under normal usage each entry has _only_ // one entry. So use two hash tables: one for the main entries and one for the overflow. diff --git a/src/fsharp/utils/HashMultiMap.fsi b/src/fsharp/utils/HashMultiMap.fsi index 0d2738f955f..bd05cfc1d7a 100644 --- a/src/fsharp/utils/HashMultiMap.fsi +++ b/src/fsharp/utils/HashMultiMap.fsi @@ -2,8 +2,10 @@ namespace Internal.Utilities.Collections +open System open System.Collections.Generic + /// Hash tables, by default based on F# structural "hash" and (=) functions. /// The table may map a single key to multiple bindings. [] diff --git a/src/fsharp/utils/PathMap.fs b/src/fsharp/utils/PathMap.fs index 906c3831e6d..3e4f6fad96c 100644 --- a/src/fsharp/utils/PathMap.fs +++ b/src/fsharp/utils/PathMap.fs @@ -6,8 +6,6 @@ namespace Internal.Utilities open System open System.IO -open FSharp.Compiler.IO - type PathMap = PathMap of Map [] @@ -19,7 +17,7 @@ module internal PathMap = let addMapping (src : string) (dst : string) (PathMap map) : PathMap = // Normalise the path - let normalSrc = FileSystem.GetFullPathShim src + let normalSrc = Path.GetFullPath src let oldPrefix = if normalSrc.EndsWith dirSepStr then normalSrc diff --git a/src/fsharp/utils/PathMap.fsi b/src/fsharp/utils/PathMap.fsi index 061b623c53d..8cf4e2f2485 100644 --- a/src/fsharp/utils/PathMap.fsi +++ b/src/fsharp/utils/PathMap.fsi @@ -3,7 +3,7 @@ /// Functions to map real paths to paths to be written to PDB/IL namespace Internal.Utilities -type internal PathMap +type PathMap [] module internal PathMap = diff --git a/src/fsharp/utils/ResizeArray.fs b/src/fsharp/utils/ResizeArray.fs index d7a2338670d..597f37d16b1 100644 --- a/src/fsharp/utils/ResizeArray.fs +++ b/src/fsharp/utils/ResizeArray.fs @@ -2,7 +2,9 @@ namespace Internal.Utilities -open FSharp.Core.OptimizedClosures +open Microsoft.FSharp.Core +open Microsoft.FSharp.Core.OptimizedClosures + [] module internal ResizeArray = diff --git a/src/fsharp/utils/ResizeArray.fsi b/src/fsharp/utils/ResizeArray.fsi index cdc216aaab9..55eb7afddc5 100644 --- a/src/fsharp/utils/ResizeArray.fsi +++ b/src/fsharp/utils/ResizeArray.fsi @@ -2,6 +2,12 @@ namespace Internal.Utilities + +open System +open System.Collections.Generic +open Microsoft.FSharp.Core +open Microsoft.FSharp.Collections + [] /// Generic operations on the type System.Collections.Generic.List, which is called ResizeArray in the F# libraries. module internal ResizeArray = diff --git a/src/fsharp/utils/TaggedCollections.fs b/src/fsharp/utils/TaggedCollections.fs index b7c764a0f6f..cc52374fab4 100644 --- a/src/fsharp/utils/TaggedCollections.fs +++ b/src/fsharp/utils/TaggedCollections.fs @@ -48,6 +48,19 @@ namespace Internal.Utilities.Collections.Tagged | :? SetTreeNode<'T> as tn -> tn.Height | _ -> 1 +#if CHECKED + let rec checkInvariant (t:SetTree<'T>) = + // A good sanity check, loss of balance can hit perf + if isEmpty t then true + else + match t with + | :? SetTreeNode<'T> as tn -> + let h1 = height tn.Left + let h2 = height tn.Right + (-2 <= (h1 - h2) && (h1 - h2) <= 2) && checkInvariant tn.Left && checkInvariant tn.Right + | _ -> true +#endif + [] let tolerance = 2 @@ -507,6 +520,10 @@ namespace Internal.Utilities.Collections.Tagged member s.Contains(x) = SetTree.contains comparer x tree member s.Iterate(x) = SetTree.iter x tree member s.Fold f x = SetTree.fold f tree x + +#if CHECKED + member s.CheckBalanceInvariant = checkInvariant tree // diagnostics... +#endif member s.IsEmpty = SetTree.isEmpty tree member s.Partition predicate : Set<'T,'ComparerTag> * Set<'T,'ComparerTag> = diff --git a/src/fsharp/utils/filename.fs b/src/fsharp/utils/filename.fs new file mode 100644 index 00000000000..9dd20134da1 --- /dev/null +++ b/src/fsharp/utils/filename.fs @@ -0,0 +1,53 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +module internal Internal.Utilities.Filename + +open System.IO +open FSharp.Compiler.AbstractIL.Internal.Library + +exception IllegalFileNameChar of string * char + +let checkPathForIllegalChars = + let chars = new System.Collections.Generic.HashSet<_>(Path.GetInvalidPathChars()) + (fun (path:string) -> + for c in path do + if chars.Contains c then raise(IllegalFileNameChar(path, c))) + +// Case sensitive (original behaviour preserved). +let checkSuffix (x:string) (y:string) = x.EndsWithOrdinal(y) + +let hasExtensionWithValidate (validate:bool) (s:string) = + if validate then (checkPathForIllegalChars s) |> ignore + let sLen = s.Length + (sLen >= 1 && s.[sLen - 1] = '.' && s <> ".." && s <> ".") + || Path.HasExtension(s) + +let hasExtension (s:string) = hasExtensionWithValidate true s + +let chopExtension (s:string) = + checkPathForIllegalChars s + if s = "." then "" else // for OCaml compatibility + if not (hasExtensionWithValidate false s) then + raise (System.ArgumentException("chopExtension")) // message has to be precisely this, for OCaml compatibility, and no argument name can be set + Path.Combine (Path.GetDirectoryName s,Path.GetFileNameWithoutExtension(s)) + +let directoryName (s:string) = + checkPathForIllegalChars s + if s = "" then "." + else + match Path.GetDirectoryName(s) with + | null -> if FileSystem.IsPathRootedShim(s) then s else "." + | res -> if res = "" then "." else res + +let fileNameOfPath s = + checkPathForIllegalChars s + Path.GetFileName(s) + +let fileNameWithoutExtensionWithValidate (validate:bool) s = + if validate then checkPathForIllegalChars s |> ignore + Path.GetFileNameWithoutExtension(s) + +let fileNameWithoutExtension s = fileNameWithoutExtensionWithValidate true s + +let trimQuotes (s:string) = + s.Trim( [|' '; '\"'|] ) diff --git a/src/fsharp/utils/filename.fsi b/src/fsharp/utils/filename.fsi new file mode 100644 index 00000000000..6edc831b4f9 --- /dev/null +++ b/src/fsharp/utils/filename.fsi @@ -0,0 +1,30 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +/// Some filename operations. +module internal Internal.Utilities.Filename + +exception IllegalFileNameChar of string * char + +/// checkSuffix f s returns True if filename "f" ends in suffix "s", +/// e.g. checkSuffix "abc.fs" ".fs" returns true. +val checkSuffix: string -> string -> bool + +/// chopExtension f removes the extension from the given +/// filename. Raises ArgumentException if no extension is present. +val chopExtension: string -> string + +/// "directoryName" " decomposes a filename into a directory name. +val directoryName: string -> string + +/// Return True if the filename has a "." extension. +val hasExtension: string -> bool + +/// Get the filename of the given path. +val fileNameOfPath: string -> string + +/// Get the filename without extension of the given path. +val fileNameWithoutExtensionWithValidate: bool -> string -> string +val fileNameWithoutExtension: string -> string + +/// Trim the quotes and spaces from either end of a string +val trimQuotes: string -> string diff --git a/src/fsharp/utils/prim-lexing.fs b/src/fsharp/utils/prim-lexing.fs index f5d4edee585..401c9852fe0 100644 --- a/src/fsharp/utils/prim-lexing.fs +++ b/src/fsharp/utils/prim-lexing.fs @@ -9,23 +9,23 @@ open System.IO type ISourceText = - abstract Item: index: int -> char with get + abstract Item : int -> char with get - abstract GetLineString: lineIndex: int -> string + abstract GetLineString : lineIndex: int -> string - abstract GetLineCount: unit -> int + abstract GetLineCount : unit -> int - abstract GetLastCharacterPosition: unit -> int * int + abstract GetLastCharacterPosition : unit -> int * int - abstract GetSubTextString: start: int * length: int -> string + abstract GetSubTextString : start: int * length: int -> string - abstract SubTextEquals: target: string * startIndex: int -> bool + abstract SubTextEquals : target: string * startIndex: int -> bool - abstract Length: int + abstract Length : int - abstract ContentEquals: sourceText: ISourceText -> bool + abstract ContentEquals : sourceText: ISourceText -> bool - abstract CopyTo: sourceIndex: int * destination: char [] * destinationIndex: int * count: int -> unit + abstract CopyTo : sourceIndex: int * destination: char [] * destinationIndex: int * count: int -> unit [] type StringText(str: string) = @@ -49,36 +49,36 @@ type StringText(str: string) = // So, it's ok that we do this for now. lazy getLines str - member _.String = str + member __.String = str - override _.GetHashCode() = str.GetHashCode() - override _.Equals(obj: obj) = + override __.GetHashCode() = str.GetHashCode() + override __.Equals(obj: obj) = match obj with | :? StringText as other -> other.String.Equals(str) | :? string as other -> other.Equals(str) | _ -> false - override _.ToString() = str + override __.ToString() = str interface ISourceText with - member _.Item with get index = str.[index] + member __.Item with get index = str.[index] - member _.GetLastCharacterPosition() = + member __.GetLastCharacterPosition() = let lines = getLines.Value if lines.Length > 0 then (lines.Length, lines.[lines.Length - 1].Length) else (0, 0) - member _.GetLineString(lineIndex) = + member __.GetLineString(lineIndex) = getLines.Value.[lineIndex] - member _.GetLineCount() = getLines.Value.Length + member __.GetLineCount() = getLines.Value.Length - member _.GetSubTextString(start, length) = + member __.GetSubTextString(start, length) = str.Substring(start, length) - member _.SubTextEquals(target, startIndex) = + member __.SubTextEquals(target, startIndex) = if startIndex < 0 || startIndex >= str.Length then invalidArg "startIndex" "Out of range." @@ -91,14 +91,14 @@ type StringText(str: string) = str.IndexOf(target, startIndex, target.Length) <> -1 - member _.Length = str.Length + member __.Length = str.Length member this.ContentEquals(sourceText) = match sourceText with | :? StringText as sourceText when sourceText = this || sourceText.String = str -> true | _ -> false - member _.CopyTo(sourceIndex, destination, destinationIndex, count) = + member __.CopyTo(sourceIndex, destination, destinationIndex, count) = str.CopyTo(sourceIndex, destination, destinationIndex, count) module SourceText = @@ -177,7 +177,7 @@ namespace Internal.Utilities.Text.Lexing type internal LexBufferFiller<'Char> = (LexBuffer<'Char> -> unit) and [] - internal LexBuffer<'Char>(filler: LexBufferFiller<'Char>, reportLibraryOnlyFeatures: bool, supportsFeature:LanguageFeature -> bool) = + internal LexBuffer<'Char>(filler: LexBufferFiller<'Char>, supportsFeature:LanguageFeature -> bool) = let context = new Dictionary(1) let mutable buffer = [||] /// number of valid characters beyond bufferScanStart. @@ -247,36 +247,35 @@ namespace Internal.Utilities.Text.Lexing Array.blit buffer bufferScanStart repl bufferScanStart bufferScanLength buffer <- repl - member _.ReportLibraryOnlyFeatures = reportLibraryOnlyFeatures - member _.SupportsFeature featureId = supportsFeature featureId + member __.SupportsFeature featureId = supportsFeature featureId - static member FromFunction (reportLibraryOnlyFeatures, supportsFeature:LanguageFeature -> bool, f : 'Char[] * int * int -> int) : LexBuffer<'Char> = + static member FromFunction (supportsFeature:LanguageFeature -> bool, f : 'Char[] * int * int -> int) : LexBuffer<'Char> = 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.BufferMaxScanLength <- lexBuffer.BufferScanLength + n - new LexBuffer<'Char>(filler, reportLibraryOnlyFeatures, supportsFeature) + new LexBuffer<'Char>(filler, supportsFeature) // Important: This method takes ownership of the array - static member FromArrayNoCopy (reportLibraryOnlyFeatures, supportsFeature:LanguageFeature -> bool, buffer: 'Char[]) : LexBuffer<'Char> = - let lexBuffer = new LexBuffer<'Char>((fun _ -> ()), reportLibraryOnlyFeatures, supportsFeature) + static member FromArrayNoCopy (supportsFeature:LanguageFeature -> bool, buffer: 'Char[]) : LexBuffer<'Char> = + let lexBuffer = new LexBuffer<'Char>((fun _ -> ()), supportsFeature) lexBuffer.Buffer <- buffer lexBuffer.BufferMaxScanLength <- buffer.Length lexBuffer // Important: this method does copy the array - static member FromArray (reportLibraryOnlyFeatures, supportsFeature: LanguageFeature -> bool, s: 'Char[]) : LexBuffer<'Char> = + static member FromArray (supportsFeature: LanguageFeature -> bool, s: 'Char[]) : LexBuffer<'Char> = let buffer = Array.copy s - LexBuffer<'Char>.FromArrayNoCopy(reportLibraryOnlyFeatures, supportsFeature, buffer) + LexBuffer<'Char>.FromArrayNoCopy(supportsFeature, buffer) // Important: This method takes ownership of the array - static member FromChars (reportLibraryOnlyFeatures, supportsFeature:LanguageFeature -> bool, arr:char[]) = LexBuffer.FromArrayNoCopy (reportLibraryOnlyFeatures, supportsFeature, arr) + static member FromChars (supportsFeature:LanguageFeature -> bool, arr:char[]) = LexBuffer.FromArrayNoCopy (supportsFeature, arr) - static member FromSourceText (reportLibraryOnlyFeatures, supportsFeature: LanguageFeature -> bool, sourceText: ISourceText) = + static member FromSourceText (supportsFeature: LanguageFeature -> bool, sourceText: ISourceText) = let mutable currentSourceIndex = 0 - LexBuffer.FromFunction(reportLibraryOnlyFeatures, supportsFeature, fun (chars, start, length) -> + LexBuffer.FromFunction(supportsFeature, fun (chars, start, length) -> let lengthToCopy = if currentSourceIndex + length <= sourceText.Length then length diff --git a/src/fsharp/utils/prim-lexing.fsi b/src/fsharp/utils/prim-lexing.fsi index d8023a76f6d..957fb698cb3 100644 --- a/src/fsharp/utils/prim-lexing.fsi +++ b/src/fsharp/utils/prim-lexing.fsi @@ -5,41 +5,29 @@ namespace FSharp.Compiler.Text -/// Represents an input to the F# compiler type ISourceText = - /// Gets a character in an input based on an index of characters from the start of the file - abstract Item: index: int -> char with get + abstract Item : int -> char with get - /// Gets a line of an input by index - abstract GetLineString: lineIndex: int -> string + abstract GetLineString : lineIndex: int -> string - /// Gets the count of lines in the input - abstract GetLineCount: unit -> int + abstract GetLineCount : unit -> int - /// Gets the last character position in the input, returning line and column - abstract GetLastCharacterPosition: unit -> int * int + abstract GetLastCharacterPosition : unit -> int * int - /// Gets a section of the input - abstract GetSubTextString: start: int * length: int -> string + abstract GetSubTextString : start: int * length: int -> string - /// Checks if a section of the input is equal to the given string - abstract SubTextEquals: target: string * startIndex: int -> bool + abstract SubTextEquals : target: string * startIndex: int -> bool - /// Gets the total length of the input in characters - abstract Length: int + abstract Length : int - /// Checks if one input is equal to another - abstract ContentEquals: sourceText: ISourceText -> bool + abstract ContentEquals : sourceText: ISourceText -> bool - /// Copies a section of the input to the given destination ad the given index - abstract CopyTo: sourceIndex: int * destination: char [] * destinationIndex: int * count: int -> unit + abstract CopyTo : sourceIndex: int * destination: char [] * destinationIndex: int * count: int -> unit -/// Functions related to ISourceText objects module SourceText = - /// Creates an ISourceText object from the given string - val ofString: string -> ISourceText + val ofString : string -> ISourceText // // NOTE: the code in this file is a drop-in replacement runtime for Lexing.fsi from the FsLexYacc repository @@ -49,34 +37,36 @@ namespace Internal.Utilities.Text.Lexing open System.Collections.Generic open FSharp.Compiler.Text +open Microsoft.FSharp.Core +open Microsoft.FSharp.Control open FSharp.Compiler.Features /// Position information stored for lexing tokens [] type internal Position = - /// The file index for the file associated with the input stream, use fileOfFileIndex to decode - val FileIndex: int + /// The file index for the file associated with the input stream, use fileOfFileIndex in range.fs to decode + val FileIndex : int /// The line number in the input stream, assuming fresh positions have been updated /// for the new line by modifying the EndPos property of the LexBuffer. - val Line: int + val Line : int /// The line number for the position in the input stream, assuming fresh positions have been updated /// using for the new line. - val OriginalLine: int + val OriginalLine : int /// The character number in the input stream. - val AbsoluteOffset: int + val AbsoluteOffset : int /// Return absolute offset of the start of the line marked by the position. - val StartOfLineAbsoluteOffset: int + val StartOfLineAbsoluteOffset : int /// Return the column number marked by the position, /// i.e. the difference between the AbsoluteOffset and the StartOfLineAbsoluteOffset - member Column: int + member Column : int /// Given a position just beyond the end of a line, return a position at the start of the next line. - member NextLine: Position + member NextLine : Position /// Given a position at the start of a token of length n, return a position just beyond the end of the token. member EndOfToken: n:int -> Position @@ -85,15 +75,15 @@ type internal Position = member ShiftColumnBy: by:int -> Position /// Same line, column -1. - member ColumnMinusOne: Position + member ColumnMinusOne : Position /// Apply a #line directive. - member ApplyLineDirective: fileIdx:int * line:int -> Position + member ApplyLineDirective : fileIdx:int * line:int -> Position /// Get an arbitrary position, with the empty string as filename. - static member Empty: Position + static member Empty : Position - static member FirstLine: fileIdx:int -> Position + static member FirstLine : fileIdx:int -> Position [] /// Input buffers consumed by lexers generated by fslex.exe. @@ -116,36 +106,33 @@ type internal LexBuffer<'Char> = member LexemeContains: 'Char -> bool /// Fast helper to turn the matched characters into a string, avoiding an intermediate array. - static member LexemeString: LexBuffer -> string + static member LexemeString : LexBuffer -> string /// Dynamically typed, non-lexically scoped parameter table. - member BufferLocalStore: IDictionary + member BufferLocalStore : IDictionary /// True if the refill of the buffer ever failed , or if explicitly set to True. member IsPastEndOfStream: bool with get,set - /// Determines if the parser can report FSharpCore library-only features. - member ReportLibraryOnlyFeatures: bool - /// True if the refill of the buffer ever failed , or if explicitly set to True. member SupportsFeature:LanguageFeature -> bool /// Create a lex buffer suitable for Unicode lexing that reads characters from the given array. /// Important: does take ownership of the array. - static member FromChars: reportLibraryOnlyFeatures: bool * (LanguageFeature -> bool) * char[] -> LexBuffer + static member FromChars: (LanguageFeature -> bool) * char[] -> LexBuffer /// Create a lex buffer that reads character or byte inputs by using the given function. - static member FromFunction: reportLibraryOnlyFeatures: bool * (LanguageFeature -> bool) * ('Char[] * int * int -> int) -> LexBuffer<'Char> + static member FromFunction: (LanguageFeature -> bool) * ('Char[] * int * int -> int) -> LexBuffer<'Char> /// Create a lex buffer backed by source text. - static member FromSourceText: reportLibraryOnlyFeatures: bool * (LanguageFeature -> bool) * ISourceText -> LexBuffer + static member FromSourceText : (LanguageFeature -> bool) * ISourceText -> LexBuffer /// The type of tables for an unicode lexer generated by fslex.exe. [] type internal UnicodeTables = /// Create the tables from raw data - static member Create: uint16[][] * uint16[] -> UnicodeTables + static member Create : uint16[][] * uint16[] -> UnicodeTables /// Interpret tables for a unicode lexer generated by fslex.exe. member Interpret: initialState:int * LexBuffer -> int diff --git a/src/fsharp/utils/sformat.fs b/src/fsharp/utils/sformat.fs index 2b28a8085c4..5798154b5e0 100644 --- a/src/fsharp/utils/sformat.fs +++ b/src/fsharp/utils/sformat.fs @@ -11,7 +11,7 @@ #nowarn "52" // The value has been copied to ensure the original is not mutated by this operation #if COMPILER -namespace FSharp.Compiler.Text +namespace Internal.Utilities.StructuredFormat #else // FSharp.Core.dll: namespace Microsoft.FSharp.Text.StructuredPrintfImpl @@ -31,7 +31,7 @@ open Microsoft.FSharp.Reflection open Microsoft.FSharp.Collections [] -type TextTag = +type LayoutTag = | ActivePatternCase | ActivePatternResult | Alias @@ -67,10 +67,9 @@ type TextTag = | UnknownType | UnknownEntity -type TaggedText(tag: TextTag, text: string) = - member x.Tag = tag - member x.Text = text - override x.ToString() = text + "(tag: " + tag.ToString() + ")" +type TaggedText = + abstract Tag: LayoutTag + abstract Text: string type TaggedTextWriter = abstract Write: t: TaggedText -> unit @@ -116,41 +115,16 @@ type IEnvironment = abstract MaxColumns: int abstract MaxRows: int -[] -module TaggedText = - let mkTag tag text = TaggedText(tag, text) +module TaggedTextOps = + let mkTag tag text = + { new TaggedText with + member _.Tag = tag + member _.Text = text } let length (tt: TaggedText) = tt.Text.Length let toText (tt: TaggedText) = tt.Text - let tagClass name = mkTag TextTag.Class name - let tagUnionCase t = mkTag TextTag.UnionCase t - let tagField t = mkTag TextTag.Field t - let tagNumericLiteral t = mkTag TextTag.NumericLiteral t - let tagKeyword t = mkTag TextTag.Keyword t - let tagStringLiteral t = mkTag TextTag.StringLiteral t - let tagLocal t = mkTag TextTag.Local t - let tagText t = mkTag TextTag.Text t - let tagRecordField t = mkTag TextTag.RecordField t - let tagProperty t = mkTag TextTag.Property t - let tagMethod t = mkTag TextTag.Method t - let tagPunctuation t = mkTag TextTag.Punctuation t - let tagOperator t = mkTag TextTag.Operator t - let tagSpace t = mkTag TextTag.Space t - - let leftParen = tagPunctuation "(" - let rightParen = tagPunctuation ")" - let comma = tagPunctuation "," - let semicolon = tagPunctuation ";" - let questionMark = tagPunctuation "?" - let leftBracket = tagPunctuation "[" - let rightBracket = tagPunctuation "]" - let leftBrace= tagPunctuation "{" - let rightBrace = tagPunctuation "}" - let space = tagSpace " " - let equals = tagOperator "=" -#if COMPILER - let tagAlias t = mkTag TextTag.Alias t + let tagAlias t = mkTag LayoutTag.Alias t let keywordFunctions = [ "raise" @@ -182,98 +156,81 @@ module TaggedText = "unativeint" ] |> Set.ofList - let tagDelegate t = mkTag TextTag.Delegate t - let tagEnum t = mkTag TextTag.Enum t - let tagEvent t = mkTag TextTag.Event t - let tagInterface t = mkTag TextTag.Interface t - let tagLineBreak t = mkTag TextTag.LineBreak t - let tagRecord t = mkTag TextTag.Record t - let tagModule t = mkTag TextTag.Module t - let tagModuleBinding name = if keywordFunctions.Contains name then mkTag TextTag.Keyword name else mkTag TextTag.ModuleBinding name - let tagFunction t = mkTag TextTag.Function t - let tagNamespace t = mkTag TextTag.Namespace t - let tagParameter t = mkTag TextTag.Parameter t - let tagStruct t = mkTag TextTag.Struct t - let tagTypeParameter t = mkTag TextTag.TypeParameter t - let tagActivePatternCase t = mkTag TextTag.ActivePatternCase t - let tagActivePatternResult t = mkTag TextTag.ActivePatternResult t - let tagUnion t = mkTag TextTag.Union t - let tagMember t = mkTag TextTag.Member t - let tagUnknownEntity t = mkTag TextTag.UnknownEntity t - let tagUnknownType t = mkTag TextTag.UnknownType t - - // common tagged literals - let lineBreak = tagLineBreak "\n" - let leftBraceBar = tagPunctuation "{|" - let rightBraceBar = tagPunctuation "|}" - let arrow = tagPunctuation "->" - let dot = tagPunctuation "." - let leftAngle = tagPunctuation "<" - let rightAngle = tagPunctuation ">" - let colon = tagPunctuation ":" - let minus = tagPunctuation "-" - let keywordTrue = tagKeyword "true" - let keywordFalse = tagKeyword "false" - let structUnit = tagStruct "unit" - let keywordStatic = tagKeyword "static" - let keywordMember = tagKeyword "member" - let keywordVal = tagKeyword "val" - let keywordEvent = tagKeyword "event" - let keywordWith = tagKeyword "with" - let keywordSet = tagKeyword "set" - let keywordGet = tagKeyword "get" - let bar = tagPunctuation "|" - let keywordStruct = tagKeyword "struct" - let keywordInherit = tagKeyword "inherit" - let keywordEnd = tagKeyword "end" - let keywordNested = tagKeyword "nested" - let keywordType = tagKeyword "type" - let keywordDelegate = tagKeyword "delegate" - let keywordOf = tagKeyword "of" - let keywordInternal = tagKeyword "internal" - let keywordPrivate = tagKeyword "private" - let keywordAbstract = tagKeyword "abstract" - let keywordOverride = tagKeyword "override" - let keywordEnum = tagKeyword "enum" - let leftBracketBar = tagPunctuation "[|" - let rightBracketBar = tagPunctuation "|]" - let keywordTypeof = tagKeyword "typeof" - let keywordTypedefof = tagKeyword "typedefof" - let leftBracketAngle = tagPunctuation "[<" - let rightBracketAngle = tagPunctuation ">]" - let star = tagOperator "*" - let keywordNew = tagKeyword "new" -#endif - -[] -module Layout = + let tagClass name = mkTag LayoutTag.Class name + let tagUnionCase t = mkTag LayoutTag.UnionCase t + let tagDelegate t = mkTag LayoutTag.Delegate t + let tagEnum t = mkTag LayoutTag.Enum t + let tagEvent t = mkTag LayoutTag.Event t + let tagField t = mkTag LayoutTag.Field t + let tagInterface t = mkTag LayoutTag.Interface t + let tagKeyword t = mkTag LayoutTag.Keyword t + let tagLineBreak t = mkTag LayoutTag.LineBreak t + let tagLocal t = mkTag LayoutTag.Local t + let tagRecord t = mkTag LayoutTag.Record t + let tagRecordField t = mkTag LayoutTag.RecordField t + let tagMethod t = mkTag LayoutTag.Method t + let tagModule t = mkTag LayoutTag.Module t + let tagModuleBinding name = if keywordFunctions.Contains name then mkTag LayoutTag.Keyword name else mkTag LayoutTag.ModuleBinding name + let tagFunction t = mkTag LayoutTag.Function t + let tagNamespace t = mkTag LayoutTag.Namespace t + let tagNumericLiteral t = mkTag LayoutTag.NumericLiteral t + let tagOperator t = mkTag LayoutTag.Operator t + let tagParameter t = mkTag LayoutTag.Parameter t + let tagProperty t = mkTag LayoutTag.Property t + let tagSpace t = mkTag LayoutTag.Space t + let tagStringLiteral t = mkTag LayoutTag.StringLiteral t + let tagStruct t = mkTag LayoutTag.Struct t + let tagTypeParameter t = mkTag LayoutTag.TypeParameter t + let tagText t = mkTag LayoutTag.Text t + let tagPunctuation t = mkTag LayoutTag.Punctuation t + + module Literals = + // common tagged literals + let lineBreak = tagLineBreak "\n" + let space = tagSpace " " + let comma = tagPunctuation "," + let semicolon = tagPunctuation ";" + let leftParen = tagPunctuation "(" + let rightParen = tagPunctuation ")" + let leftBracket = tagPunctuation "[" + let rightBracket = tagPunctuation "]" + let leftBrace= tagPunctuation "{" + let rightBrace = tagPunctuation "}" + let leftBraceBar = tagPunctuation "{|" + let rightBraceBar = tagPunctuation "|}" + let equals = tagOperator "=" + let arrow = tagPunctuation "->" + let questionMark = tagPunctuation "?" + +module LayoutOps = + open TaggedTextOps + + let mkNode l r joint = + Node(l, r, joint) // constructors let objL (value:obj) = match value with - | :? string as s -> Leaf (false, mkTag TextTag.Text s, false) + | :? string as s -> Leaf (false, mkTag LayoutTag.Text s, false) | o -> ObjLeaf (false, o, false) - let wordL text = Leaf (false, text, false) + let sLeaf (l, t, r) = Leaf (l, t, r) + + let wordL text = sLeaf (false, text, false) - let sepL text = Leaf (true , text, true) + let sepL text = sLeaf (true , text, true) - let rightL text = Leaf (true , text, false) + let rightL text = sLeaf (true , text, false) - let leftL text = Leaf (false, text, true) + let leftL text = sLeaf (false, text, true) - let emptyL = Leaf (true, mkTag TextTag.Text "", true) + let emptyL = sLeaf (true, mkTag LayoutTag.Text "", true) let isEmptyL layout = match layout with | Leaf(true, s, true) -> s.Text = "" | _ -> false - let mkNode l r joint = - if isEmptyL l then r else - if isEmptyL r then l else - Node(l, r, joint) - let aboveL layout1 layout2 = mkNode layout1 layout2 (Broken 0) let tagAttrL text maps layout = Attr(text, maps, layout) @@ -291,19 +248,11 @@ module Layout = let (---) layout1 layout2 = mkNode layout1 layout2 (Breakable 2) - let (----) layout1 layout2 = mkNode layout1 layout2 (Breakable 3) - - let (-----) layout1 layout2 = mkNode layout1 layout2 (Breakable 4) - let (@@) layout1 layout2 = apply2 (fun l r -> mkNode l r (Broken 0)) layout1 layout2 let (@@-) layout1 layout2 = apply2 (fun l r -> mkNode l r (Broken 1)) layout1 layout2 let (@@--) layout1 layout2 = apply2 (fun l r -> mkNode l r (Broken 2)) layout1 layout2 - - let (@@---) layout1 layout2 = apply2 (fun l r -> mkNode l r (Broken 3)) layout1 layout2 - - let (@@----) layout1 layout2 = apply2 (fun l r -> mkNode l r (Broken 4)) layout1 layout2 let tagListL tagger els = match els with @@ -316,17 +265,17 @@ module Layout = | y :: ys -> process' (tagger prefixL ++ y) ys process' x xs - let commaListL layouts = tagListL (fun prefixL -> prefixL ^^ rightL comma) layouts + let commaListL layouts = tagListL (fun prefixL -> prefixL ^^ rightL Literals.comma) layouts - let semiListL layouts = tagListL (fun prefixL -> prefixL ^^ rightL semicolon) layouts + let semiListL layouts = tagListL (fun prefixL -> prefixL ^^ rightL Literals.semicolon) layouts let spaceListL layouts = tagListL (fun prefixL -> prefixL) layouts let sepListL layout1 layouts = tagListL (fun prefixL -> prefixL ^^ layout1) layouts - let bracketL layout = leftL leftParen ^^ layout ^^ rightL rightParen + let bracketL layout = leftL Literals.leftParen ^^ layout ^^ rightL Literals.rightParen - let tupleL layouts = bracketL (sepListL (sepL comma) layouts) + let tupleL layouts = bracketL (sepListL (sepL Literals.comma) layouts) let aboveListL layouts = match layouts with @@ -340,13 +289,13 @@ module Layout = | Some x -> wordL (tagUnionCase "Some") -- (selector x) let listL selector value = - leftL leftBracket ^^ sepListL (sepL semicolon) (List.map selector value) ^^ rightL rightBracket + leftL Literals.leftBracket ^^ sepListL (sepL Literals.semicolon) (List.map selector value) ^^ rightL Literals.rightBracket let squareBracketL layout = - leftL leftBracket ^^ layout ^^ rightL rightBracket + leftL Literals.leftBracket ^^ layout ^^ rightL Literals.rightBracket let braceL layout = - leftL leftBrace ^^ layout ^^ rightL rightBrace + leftL Literals.leftBrace ^^ layout ^^ rightL Literals.rightBrace let boundedUnfoldL (itemL: 'a -> Layout) @@ -522,7 +471,9 @@ module ReflectUtils = module Display = open ReflectUtils - + open LayoutOps + open TaggedTextOps + let string_of_int (i:int) = i.ToString() let typeUsesSystemObjectToString (ty:System.Type) = @@ -739,7 +690,7 @@ module Display = | Node (l, r, _) -> let jm = Layout.JuxtapositionMiddle (l, r) let z = addL z pos l - let z = if jm then z else addText z space + let z = if jm then z else addText z Literals.space let pos = index z let z = addL z pos r z @@ -773,8 +724,8 @@ module Display = let unitL = wordL (tagPunctuation "()") let makeRecordL nameXs = - let itemL (name, xL) = (wordL name ^^ wordL equals) -- xL - let braceL xs = (wordL leftBrace) ^^ xs ^^ (wordL rightBrace) + let itemL (name, xL) = (wordL name ^^ wordL Literals.equals) -- xL + let braceL xs = (wordL Literals.leftBrace) ^^ xs ^^ (wordL Literals.rightBrace) nameXs |> List.map itemL @@ -784,25 +735,25 @@ module Display = let makePropertiesL nameXs = let itemL (name, v) = let labelL = wordL name - (labelL ^^ wordL equals) + (labelL ^^ wordL Literals.equals) ^^ (match v with - | None -> wordL questionMark + | None -> wordL Literals.questionMark | Some xL -> xL) - ^^ (rightL semicolon) - let braceL xs = (leftL leftBrace) ^^ xs ^^ (rightL rightBrace) + ^^ (rightL Literals.semicolon) + let braceL xs = (leftL Literals.leftBrace) ^^ xs ^^ (rightL Literals.rightBrace) braceL (aboveListL (List.map itemL nameXs)) let makeListL itemLs = - (leftL leftBracket) - ^^ sepListL (rightL semicolon) itemLs - ^^ (rightL rightBracket) + (leftL Literals.leftBracket) + ^^ sepListL (rightL Literals.semicolon) itemLs + ^^ (rightL Literals.rightBracket) let makeArrayL xs = (leftL (tagPunctuation "[|")) - ^^ sepListL (rightL semicolon) xs + ^^ sepListL (rightL Literals.semicolon) xs ^^ (rightL (tagPunctuation "|]")) - let makeArray2L xs = leftL leftBracket ^^ aboveListL xs ^^ rightL rightBracket + let makeArray2L xs = leftL Literals.leftBracket ^^ aboveListL xs ^^ rightL Literals.rightBracket let getProperty (ty: Type) (obj: obj) name = ty.InvokeMember(name, (BindingFlags.GetProperty ||| BindingFlags.Instance ||| BindingFlags.Public ||| BindingFlags.NonPublic), null, obj, [| |],CultureInfo.InvariantCulture) @@ -1026,13 +977,13 @@ module Display = // tuples up args to UnionConstruction or ExceptionConstructor. no node count. match recd with | [(_,x)] -> nestedObjL depthLim Precedence.BracketIfTupleOrNotAtomic x - | txs -> leftL leftParen ^^ commaListL (List.map (snd >> nestedObjL depthLim Precedence.BracketIfTuple) txs) ^^ rightL rightParen + | txs -> leftL Literals.leftParen ^^ commaListL (List.map (snd >> nestedObjL depthLim Precedence.BracketIfTuple) txs) ^^ rightL Literals.rightParen and bracketIfL flag basicL = - if flag then (leftL leftParen) ^^ basicL ^^ (rightL rightParen) else basicL + if flag then (leftL Literals.leftParen) ^^ basicL ^^ (rightL Literals.rightParen) else basicL and tupleValueL depthLim prec vals tupleType = - let basicL = sepListL (rightL comma) (List.map (nestedObjL depthLim Precedence.BracketIfTuple ) (Array.toList vals)) + let basicL = sepListL (rightL Literals.comma) (List.map (nestedObjL depthLim Precedence.BracketIfTuple ) (Array.toList vals)) let fields = bracketIfL (prec <= Precedence.BracketIfTuple) basicL match tupleType with | TupleType.Value -> structL ^^ fields @@ -1167,7 +1118,7 @@ module Display = and objectValueWithPropertiesL depthLim (ty: Type) (obj: obj) = // This buries an obj in the layout, rendered at squash time via a leafFormatter. - let basicL = Layout.objL obj + let basicL = LayoutOps.objL obj let props = ty.GetProperties(BindingFlags.GetField ||| BindingFlags.Instance ||| BindingFlags.Public) let fields = ty.GetFields(BindingFlags.Instance ||| BindingFlags.Public) |> Array.map (fun i -> i :> MemberInfo) let propsAndFields = @@ -1259,7 +1210,7 @@ module Display = | _ -> countNodes 1 // This buries an obj in the layout, rendered at squash time via a leafFormatter. - Layout.objL obj + LayoutOps.objL obj member _.Format(showMode, x:'a, xty:Type) = objL showMode opts.PrintDepth Precedence.BracketIfTuple (x, xty) @@ -1334,8 +1285,8 @@ module Display = let asTaggedTextWriter (writer: TextWriter) = { new TaggedTextWriter with - member _.Write(t) = writer.Write t.Text - member _.WriteLine() = writer.WriteLine() } + member __.Write(t) = writer.Write t.Text + member __.WriteLine() = writer.WriteLine() } let output_layout_tagged options writer layout = layout |> squash_layout options diff --git a/src/fsharp/utils/sformat.fsi b/src/fsharp/utils/sformat.fsi index dd0799c6b66..6ef3ff8fcd6 100644 --- a/src/fsharp/utils/sformat.fsi +++ b/src/fsharp/utils/sformat.fsi @@ -1,20 +1,25 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -// This file is compiled twice in the codebase +// This file is compiled 2(!) times in the codebase // - as the internal implementation of printf '%A' formatting -// - as the internal implementation of structured formatting in FSharp.Compiler.Service/Private.dll +// defines: FSHARP_CORE +// - as the internal implementation of structured formatting in FSharp.Compiler.Service.dll // defines: COMPILER -// NOTE: this implementation is used by fsi.exe. +// NOTE: this implementation is used by fsi.exe. This is very important. // -// The one implementation file is used to keep the implementations of +// The one implementation file is used because we very much want to keep the implementations of // structured formatting the same for fsi.exe and '%A' printing. However fsi.exe may have // a richer feature set. // -// Note no layout objects are ever transferred between the above implementations. +// Note no layout objects are ever transferred between the above implementations, and in +// all 4 cases the layout types are really different types. #if COMPILER -namespace FSharp.Compiler.Text +// fsc.exe: +// FSharp.Compiler.Service.dll: +namespace Internal.Utilities.StructuredFormat #else +// FSharp.Core.dll: namespace Microsoft.FSharp.Text.StructuredPrintfImpl #endif @@ -24,19 +29,28 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl open Microsoft.FSharp.Collections open Microsoft.FSharp.Primitives.Basics -#if COMPILER +#if FSHARP_CORE + /// Data representing structured layouts of terms. + // FSharp.Core.dll makes things internal and hides representations + type internal Layout + + type internal LayoutTag + + type internal TaggedText = + abstract Tag: LayoutTag + abstract Text: string +#else // FSharp.Compiler.Service.dll, fsc.exe /// Data representing joints in structured layouts of terms. The representation /// of this data type is only for the consumption of formatting engines. [] - type internal Joint = + type public Joint = | Unbreakable | Breakable of indentation: int | Broken of indentation: int - /// Represents the tag of some tagged text - [] - type TextTag = + [] + type public LayoutTag = | ActivePatternCase | ActivePatternResult | Alias @@ -72,145 +86,83 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl | UnknownType | UnknownEntity - /// Represents text with a tag type public TaggedText = - /// Creates text with a tag - new: tag: TextTag * text: string -> TaggedText + abstract Tag: LayoutTag + abstract Text: string - /// Gets the tag - member Tag: TextTag - - /// Gets the text - member Text: string - type internal TaggedTextWriter = + type public TaggedTextWriter = abstract Write: t: TaggedText -> unit abstract WriteLine: unit -> unit - /// Data representing structured layouts of terms. + /// Data representing structured layouts of terms. The representation + /// of this data type is only for the consumption of formatting engines. [] - type internal Layout = + type public Layout = | ObjLeaf of juxtLeft: bool * object: obj * juxtRight: bool | Leaf of juxtLeft: bool * text: TaggedText * justRight: bool | Node of leftLayout: Layout * rightLayout: Layout * joint: Joint | Attr of text: string * attributes: (string * string) list * layout: Layout - static member internal JuxtapositionMiddle: left: Layout * right: Layout -> bool - -#else // FSharp.Compiler.Service.dll, fsc.exe - /// Data representing structured layouts of terms. - // FSharp.Core.dll makes things internal and hides representations - type internal Layout - - type internal TextTag - - [] - type internal TaggedText = - member Tag: TextTag - member Text: string + static member JuxtapositionMiddle: left: Layout * right: Layout -> bool #endif #if COMPILER - module public TaggedText = + module public TaggedTextOps = #else - module internal TaggedText = + module internal TaggedTextOps = #endif - val tagText: string -> TaggedText + val mkTag: LayoutTag -> string -> TaggedText + val keywordFunctions: Set + val tagAlias: string -> TaggedText val tagClass: string -> TaggedText - val internal tagField: string -> TaggedText - val internal tagKeyword: string -> TaggedText - val internal tagLocal: string -> TaggedText - val internal tagProperty: string -> TaggedText - val internal tagMethod: string -> TaggedText - val internal tagUnionCase: string -> TaggedText - - val comma: TaggedText - -#if COMPILER + val tagUnionCase: string -> TaggedText + val tagDelegate: string -> TaggedText + val tagEnum: string -> TaggedText + val tagEvent: string -> TaggedText + val tagField: string -> TaggedText + val tagInterface: string -> TaggedText + val tagKeyword: string -> TaggedText + val tagLineBreak: string -> TaggedText + val tagMethod: string -> TaggedText + val tagModuleBinding: string -> TaggedText + val tagFunction : string -> TaggedText + val tagLocal: string -> TaggedText + val tagRecord: string -> TaggedText + val tagRecordField: string -> TaggedText + val tagModule: string -> TaggedText val tagNamespace: string -> TaggedText + val tagNumericLiteral: string -> TaggedText + val tagOperator: string -> TaggedText val tagParameter: string -> TaggedText + val tagProperty: string -> TaggedText val tagSpace: string -> TaggedText + val tagStringLiteral: string -> TaggedText + val tagStruct: string -> TaggedText + val tagTypeParameter: string -> TaggedText + val tagText: string -> TaggedText + val tagPunctuation: string -> TaggedText + + module Literals = + // common tagged literals + val lineBreak: TaggedText + val space: TaggedText + val comma: TaggedText + val semicolon: TaggedText + val leftParen: TaggedText + val rightParen: TaggedText + val leftBracket: TaggedText + val rightBracket: TaggedText + val leftBrace: TaggedText + val rightBrace: TaggedText + val leftBraceBar: TaggedText + val rightBraceBar: TaggedText + val equals: TaggedText + val arrow: TaggedText + val questionMark: TaggedText - // common tagged literals - val dot: TaggedText - val colon: TaggedText - val minus: TaggedText - val lineBreak: TaggedText - val space: TaggedText - - val internal mkTag: TextTag -> string -> TaggedText - val internal keywordFunctions: Set - val internal tagAlias: string -> TaggedText - val internal tagDelegate: string -> TaggedText - val internal tagEnum: string -> TaggedText - val internal tagEvent: string -> TaggedText - val internal tagInterface: string -> TaggedText - val internal tagLineBreak: string -> TaggedText - val internal tagModuleBinding: string -> TaggedText - val internal tagFunction: string -> TaggedText - val internal tagRecord: string -> TaggedText - val internal tagRecordField: string -> TaggedText - val internal tagModule: string -> TaggedText - val internal tagNumericLiteral: string -> TaggedText - val internal tagOperator: string -> TaggedText - val internal tagStringLiteral: string -> TaggedText - val internal tagStruct: string -> TaggedText - val internal tagTypeParameter: string -> TaggedText - val internal tagPunctuation: string -> TaggedText - val internal tagActivePatternCase: string -> TaggedText - val internal tagActivePatternResult: string -> TaggedText - val internal tagUnion: string -> TaggedText - val internal tagMember: string -> TaggedText - val internal tagUnknownEntity: string -> TaggedText - val internal tagUnknownType: string -> TaggedText - - val internal leftAngle: TaggedText - val internal rightAngle: TaggedText - val internal keywordTrue: TaggedText - val internal keywordFalse: TaggedText - val internal semicolon: TaggedText - val internal leftParen: TaggedText - val internal rightParen: TaggedText - val internal leftBracket: TaggedText - val internal rightBracket: TaggedText - val internal leftBrace: TaggedText - val internal rightBrace: TaggedText - val internal leftBraceBar: TaggedText - val internal rightBraceBar: TaggedText - val internal equals: TaggedText - val internal arrow: TaggedText - val internal questionMark: TaggedText - val internal structUnit: TaggedText - val internal keywordStatic: TaggedText - val internal keywordMember: TaggedText - val internal keywordVal: TaggedText - val internal keywordEvent: TaggedText - val internal keywordWith: TaggedText - val internal keywordSet: TaggedText - val internal keywordGet: TaggedText - val internal bar: TaggedText - val internal keywordStruct: TaggedText - val internal keywordInherit: TaggedText - val internal keywordEnd: TaggedText - val internal keywordNested: TaggedText - val internal keywordType: TaggedText - val internal keywordDelegate: TaggedText - val internal keywordOf: TaggedText - val internal keywordInternal: TaggedText - val internal keywordPrivate: TaggedText - val internal keywordAbstract: TaggedText - val internal keywordOverride: TaggedText - val internal keywordEnum: TaggedText - val internal leftBracketBar: TaggedText - val internal rightBracketBar: TaggedText - val internal keywordTypeof: TaggedText - val internal keywordTypedefof: TaggedText - val internal leftBracketAngle: TaggedText - val internal rightBracketAngle: TaggedText - val internal star: TaggedText - val internal keywordNew: TaggedText - - type internal IEnvironment = +#if COMPILER + type public IEnvironment = /// Return to the layout-generation /// environment to layout any otherwise uninterpreted object abstract GetLayout: obj -> Layout @@ -231,9 +183,14 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl /// A joint is either unbreakable, breakable or broken. /// If a joint is broken the RHS layout occurs on the next line with optional indentation. /// A layout can be squashed to for given width which forces breaks as required. - module internal Layout = +#if COMPILER + module public LayoutOps = +#else + module internal LayoutOps = +#endif + /// The empty layout - val emptyL: Layout + val emptyL : Layout /// Is it the empty layout? val isEmptyL: layout:Layout -> bool @@ -241,52 +198,40 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl /// An uninterpreted leaf, to be interpreted into a string /// by the layout engine. This allows leaf layouts for numbers, strings and /// other atoms to be customized according to culture. - val objL : value:obj -> Layout + val objL : value:obj -> Layout /// An string leaf - val wordL : text:TaggedText -> Layout + val wordL : text:TaggedText -> Layout /// An string which requires no spaces either side. - val sepL : text:TaggedText -> Layout + val sepL : text:TaggedText -> Layout /// An string which is right parenthesis (no space on the left). - val rightL: text:TaggedText -> Layout + val rightL : text:TaggedText -> Layout /// An string which is left parenthesis (no space on the right). - val leftL : text:TaggedText -> Layout + val leftL : text:TaggedText -> Layout /// Join, unbreakable. - val ( ^^ ): layout1:Layout -> layout2:Layout -> Layout + val ( ^^ ) : layout1:Layout -> layout2:Layout -> Layout /// Join, possible break with indent=0 - val ( ++ ): layout1:Layout -> layout2:Layout -> Layout + val ( ++ ) : layout1:Layout -> layout2:Layout -> Layout /// Join, possible break with indent=1 - val ( -- ): layout1:Layout -> layout2:Layout -> Layout + val ( -- ) : layout1:Layout -> layout2:Layout -> Layout /// Join, possible break with indent=2 val ( --- ): layout1:Layout -> layout2:Layout -> Layout - /// optional break, indent=3 - val internal ( ---- ) : Layout -> Layout -> Layout - - /// optional break, indent=4 - val internal ( ----- ) : Layout -> Layout -> Layout - /// Join broken with ident=0 - val ( @@ ): layout1:Layout -> layout2:Layout -> Layout + val ( @@ ) : layout1:Layout -> layout2:Layout -> Layout /// Join broken with ident=1 val ( @@- ): layout1:Layout -> layout2:Layout -> Layout /// Join broken with ident=2 val ( @@-- ): layout1:Layout -> layout2:Layout -> Layout - - /// Join broken with ident=3 - val (@@---): layout1:Layout -> layout2:Layout -> Layout - - /// Join broken with ident=4 - val (@@----): layout1:Layout -> layout2:Layout -> Layout /// Join layouts into a comma separated list. val commaListL: layouts:Layout list -> Layout @@ -307,13 +252,13 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl val squareBracketL: layout:Layout -> Layout /// Wrap braces around layout. - val braceL: layout:Layout -> Layout + val braceL : layout:Layout -> Layout /// Form tuple of layouts. - val tupleL: layouts:Layout list -> Layout + val tupleL : layouts:Layout list -> Layout /// Layout two vertically. - val aboveL: layout1:Layout -> layout2:Layout -> Layout + val aboveL : layout1:Layout -> layout2:Layout -> Layout /// Layout list vertically. val aboveListL: layouts:Layout list -> Layout @@ -322,7 +267,7 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl val optionL: selector:('T -> Layout) -> value:'T option -> Layout /// Layout like an F# list. - val listL : selector:('T -> Layout) -> value:'T list -> Layout + val listL : selector:('T -> Layout) -> value:'T list -> Layout /// See tagL val tagAttrL: text:string -> maps:(string * string) list -> layout:Layout -> Layout @@ -354,7 +299,11 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl /// /// [] +#if COMPILER + type public FormatOptions = +#else type internal FormatOptions = +#endif { FloatingPointFormat: string AttributeProcessor: (string -> (string * string) list -> bool -> unit) #if COMPILER // FSharp.Core.dll: PrintIntercepts aren't used there @@ -372,9 +321,17 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl static member Default: FormatOptions +#if COMPILER + module public Display = +#else module internal Display = +#endif -#if COMPILER +#if FSHARP_CORE + + // Most functions aren't needed in FSharp.Core.dll, but we add one inernal entry for printf + val anyToStringForPrintf: options:FormatOptions -> bindingFlags:System.Reflection.BindingFlags -> value:'T * Type -> string +#else val asTaggedTextWriter: writer: TextWriter -> TaggedTextWriter @@ -389,15 +346,11 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl val output_layout: options:FormatOptions -> writer:TextWriter -> layout:Layout -> unit val layout_as_string: options:FormatOptions -> value:'T * typValue:Type -> string -#else - - // Most functions aren't needed in FSharp.Core.dll, but we add one inernal entry for printf - val anyToStringForPrintf: options:FormatOptions -> bindingFlags:System.Reflection.BindingFlags -> value:'T * Type -> string #endif /// Convert any value to a layout using the given formatting options. The /// layout can then be processed using formatting display engines such as - /// those in the Layout module. any_to_string and output_any are + /// those in the LayoutOps module. any_to_string and output_any are /// built using any_to_layout with default format options. val layout_to_string: options:FormatOptions -> layout:Layout -> string diff --git a/src/fsharp/xlf/FSComp.txt.cs.xlf b/src/fsharp/xlf/FSComp.txt.cs.xlf index 6273fe0e00c..979f2af287f 100644 --- a/src/fsharp/xlf/FSComp.txt.cs.xlf +++ b/src/fsharp/xlf/FSComp.txt.cs.xlf @@ -17,16 +17,6 @@ Funkce {0} vyžaduje knihovnu F# pro verzi jazyka {1} nebo novější. - - The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. - Atribut AssemblyKeyNameAttribute je zastaralý. Použijte místo něj AssemblyKeyFileAttribute. - - - - Key container signing is not supported on this platform. - Podepisování kontejneru klíčů se na této platformě nepodporuje. - - Available overloads:\n{0} Dostupná přetížení:\n{0} @@ -97,11 +87,6 @@ využití člena výchozího rozhraní - - discard pattern in use binding - vzor discard ve vazbě použití - - dotless float32 literal literál float32 bez tečky @@ -137,11 +122,6 @@ nameof - - non-variable patterns to the right of 'as' patterns - neproměnné vzory napravo od vzorů typu „jako“ - - nullable optional interop nepovinný zprostředkovatel komunikace s možnou hodnotou null @@ -162,11 +142,6 @@ správa balíčků - - binary formatting for integers - formátování typu binary pro integery - - whitespace relexation uvolnění prázdných znaků @@ -182,11 +157,6 @@ interpolace řetězce - - struct representation for active patterns - reprezentace struktury aktivních vzorů - - wild card in for loop zástupný znak ve smyčce for @@ -267,11 +237,6 @@ Hlavička zdroje začínající na posunu {0} má chybný formát. - - Print the inferred interfaces of all compilation files to associated signature files - Vytiskněte odvozená rozhraní všech kompilovaných souborů do přidružených souborů podpisu. - - Display the allowed values for language version, specify language version such as 'latest' or 'preview' Zobrazte si povolené hodnoty verze jazyka a pak zadejte požadovanou verzi, například latest nebo preview. @@ -292,11 +257,6 @@ Zobrazit banner verze kompilátoru a ukončit - - Specify a Win32 icon file (.ico) - Zadejte soubor ikony Win32 (.ico). - - The package management feature requires language version 5.0 use /langversion:preview Funkce správy balíčků vyžaduje jazykovou verzi 5.0, použijte /langversion:preview. @@ -352,21 +312,6 @@ Registrovaní správci PackageManagers nepodporují #i. - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. - Sadu .NET SDK pro tento skript nešlo určit. Pokud se skript nachází v adresáři používajícím global.json, zkontrolujte, jestli je nainstalovaná odpovídající sada .NET SDK. Výstup ze zadání {0} --version v adresáři {1} byl {2} a ukončovací kód byl {3}. - - - - The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. - The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. - - - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. - Sadu .NET SDK pro tento skript nešlo určit. Pokud se skript nachází v adresáři používajícím global.json, zkontrolujte, jestli je nainstalovaná odpovídající sada .NET SDK. Neočekávaná chyba {0}. - - This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. Tato funkce se v této verzi jazyka F# nepodporuje. Abyste mohli tuto funkci používat, možná bude nutné přidat /langversion:preview. @@ -412,21 +357,11 @@ Neplatné zarovnání v interpolovaném řetězci - - The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions - Použití [<Struct>] u hodnot, funkcí a metod je povolené jenom u částečných aktivních definic vzorů. - - use! may not be combined with and! use! se nedá kombinovat s and!. - - A [<Literal>] declaration cannot use an active pattern for its identifier - Deklarace [<Literal>] nemůže používat aktivní vzor jako svůj identifikátor. - - Cannot assign a value to another value marked literal Hodnota se nedá přiřadit k jiné hodnotě, která je označená jako literál. @@ -2813,8 +2748,8 @@ - SynMemberKind.PropertyGetSet only expected in parse trees - SynMemberKind.PropertyGetSet se očekává jen ve stromech analýzy. + MemberKind.PropertyGetSet only expected in parse trees + MemberKind.PropertyGetSet se očekává jenom ve stromech pro analýzu. diff --git a/src/fsharp/xlf/FSComp.txt.de.xlf b/src/fsharp/xlf/FSComp.txt.de.xlf index deb01a0ac2e..56bb041273f 100644 --- a/src/fsharp/xlf/FSComp.txt.de.xlf +++ b/src/fsharp/xlf/FSComp.txt.de.xlf @@ -17,16 +17,6 @@ Für das Feature "{0}" ist die F#-Bibliothek für die Sprachversion {1} oder höher erforderlich. - - The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. - "AssemblyKeyNameAttribute" gilt als veraltet. Verwenden Sie stattdessen "AssemblyKeyFileAttribute". - - - - Key container signing is not supported on this platform. - Das Signieren von Schlüsselcontainern wird auf dieser Plattform nicht unterstützt. - - Available overloads:\n{0} Verfügbare Überladungen:\n{0} @@ -97,11 +87,6 @@ standardmäßige Schnittstellenmembernutzung - - discard pattern in use binding - Das Verwerfen des verwendeten Musters ist verbindlich. - - dotless float32 literal punktloses float32-Literal @@ -137,11 +122,6 @@ nameof - - non-variable patterns to the right of 'as' patterns - Nicht-Variablenmuster rechts neben as-Mustern - - nullable optional interop Interop, NULL-Werte zulassend, optional @@ -162,11 +142,6 @@ Paketverwaltung - - binary formatting for integers - binäre Formatierung für ganze Zahlen - - whitespace relexation Lockerung für Leerraum @@ -182,11 +157,6 @@ Zeichenfolgeninterpolation - - struct representation for active patterns - Strukturdarstellung für aktive Muster - - wild card in for loop Platzhalter in for-Schleife @@ -267,11 +237,6 @@ Der Ressourcenheader, der am Offset {0} beginnt, ist fehlerhaft formatiert. - - Print the inferred interfaces of all compilation files to associated signature files - Drucken der abgeleiteten Schnittstellen aller Dateien an zugehörige Signaturdateien - - Display the allowed values for language version, specify language version such as 'latest' or 'preview' Zeigen Sie die zulässigen Werte für die Sprachversion an. Geben Sie die Sprachversion als "latest" oder "preview" an. @@ -292,11 +257,6 @@ Banner zur Compilerversion anzeigen und beenden - - Specify a Win32 icon file (.ico) - Win32-Symboldatei (ICO) angeben - - The package management feature requires language version 5.0 use /langversion:preview Für das Paketverwaltungsfeature ist Sprachversion 5.0 erforderlich. Verwenden Sie /langversion:preview. @@ -352,21 +312,6 @@ #i wird von den registrierten PackageManagers nicht unterstützt. - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. - Das .NET SDK für dieses Skript konnte nicht ermittelt werden. Wenn sich das Skript in einem Verzeichnis mit "global.json" befindet, stellen Sie sicher, dass das entsprechende .NET SDK installiert ist. Ausgabe von "{0} --version" im Verzeichnis "{1}": {2}. Exitcode: {3}. - - - - The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. - The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. - - - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. - Das .NET SDK für dieses Skript konnte nicht ermittelt werden. Wenn sich das Skript in einem Verzeichnis mit "global.json" befindet, stellen Sie sicher, dass das entsprechende .NET SDK installiert ist. Unerwarteter Fehler: {0}. - - This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. Dieses Feature wird in dieser Version von F# nicht unterstützt. Möglicherweise müssen Sie "/langversion:preview" hinzufügen, um dieses Feature zu verwenden. @@ -412,21 +357,11 @@ Ungültige Ausrichtung in interpolierter Zeichenfolge. - - The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions - Die Verwendung von "[<Struct>]" für Werte, Funktionen und Methoden ist nur für partielle aktive Musterdefinitionen zulässig. - - use! may not be combined with and! "use!" darf nicht mit "and!" kombiniert werden. - - A [<Literal>] declaration cannot use an active pattern for its identifier - Eine [<Literal>]-Deklaration kann kein aktives Muster für ihren Bezeichner verwenden. - - Cannot assign a value to another value marked literal Ein Wert kann keinem anderen als Literal markierten Wert zugewiesen werden. @@ -2813,8 +2748,8 @@ - SynMemberKind.PropertyGetSet only expected in parse trees - "SynMemberKind.PropertyGetSet" wird nur in Analysestrukturen erwartet. + MemberKind.PropertyGetSet only expected in parse trees + MemberKind.PropertyGetSet wird nur in Analysestrukturen erwartet. @@ -7474,7 +7409,7 @@ A byref pointer returned by a function or method is implicitly dereferenced as of F# 4.5. To acquire the return value as a pointer, use the address-of operator, e.g. '&f(x)' or '&obj.Method(arg1, arg2)'. - Ein byref-Zeiger, der von einer Funktion oder Methode zurückgegeben wird, wird explizit als von F# 4.5 stammend dereferenziert. Verwenden Sie den Operator (z.B. "&f(x)" oder "&obj.Method(arg1, arg2)"), um den Rückgabewert als Zeiger abzurufen. + Ein byref-Zeiger, der von einer Funktion oder Methode zurückgegeben wird, wird explizit als von F# 4.5 stammend dereferenziert. Verwenden Sie den &-Operator (z.B. "&f(x)" oder "&obj.Method(arg1, arg2)"), um den Rückgabewert als Zeiger abzurufen. diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index ea47b7e40a3..96391a29ad7 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -17,16 +17,6 @@ La característica "{0}" requiere la biblioteca de F# para la versión de lenguaje {1} o superior. - - The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. - El elemento "AssemblyKeyNameAttribute" está en desuso. Use "AssemblyKeyFileAttribute" en su lugar. - - - - Key container signing is not supported on this platform. - La firma del contenedor de claves no se admite en esta plataforma. - - Available overloads:\n{0} Sobrecargas disponibles:\n{0} @@ -97,11 +87,6 @@ consumo de miembros de interfaz predeterminados - - discard pattern in use binding - descartar enlace de patrón en uso - - dotless float32 literal literal float32 sin punto @@ -137,11 +122,6 @@ nameof - - non-variable patterns to the right of 'as' patterns - patrones no variables a la derecha de los patrones "as" - - nullable optional interop interoperabilidad opcional que admite valores NULL @@ -162,11 +142,6 @@ administración de paquetes - - binary formatting for integers - formato binario para enteros - - whitespace relexation relajación de espacio en blanco @@ -182,11 +157,6 @@ interpolación de cadena - - struct representation for active patterns - representación de struct para modelos activos - - wild card in for loop carácter comodín en bucle for @@ -267,11 +237,6 @@ El encabezado de los recursos que comienza en el desplazamiento {0} está mal formado. - - Print the inferred interfaces of all compilation files to associated signature files - Imprimir las interfaces deducidas de todos los archivos de compilación en los archivos de signatura asociados - - Display the allowed values for language version, specify language version such as 'latest' or 'preview' Mostrar los valores permitidos para la versión de idioma, especificar la versión de idioma como "latest" "preview" @@ -292,11 +257,6 @@ Mostrar el banner de versión del compilador y salir - - Specify a Win32 icon file (.ico) - Especificar un archivo de icono Win32 (.ico) - - The package management feature requires language version 5.0 use /langversion:preview La característica de administración de paquetes requiere la versión de lenguaje 5.0; use /langversion:preview @@ -352,21 +312,6 @@ Los elementos PackageManager registrados no admiten #i - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. - No se pudo determinar el SDK de .NET para este script. Si el script está en un directorio que usa una instancia de "global.json", asegúrese de que el SDK de .NET pertinente esté instalado. La salida de "{0} --version" en el directorio "{1}" era "{2}", con el código de salida "{3}". - - - - The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. - No se pudo determinar el SDK de .NET para este script. No se encontró dotnet.exe. Asegúrese de tener instalado un SDK de .NET. - - - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. - No se pudo determinar el SDK de .NET para este script. Si el script está en un directorio que usa una instancia de "global.json", asegúrese de que el SDK de .NET pertinente esté instalado. Error inesperado: "{0}". - - This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. Esta versión de F# no admite esta característica. Es posible que tenga que agregar /langversion:preview para usarla. @@ -412,21 +357,11 @@ Alineación no válida en la cadena interpolada - - The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions - El uso de «[<Struct>]» en valores, funciones y métodos solo se permite en definiciones de modelos activos parciales. - - use! may not be combined with and! No se puede combinar use! con and! - - A [<Literal>] declaration cannot use an active pattern for its identifier - Una declaración [<Literal>] no puede usar un modelo activo para su identificador - - Cannot assign a value to another value marked literal No se puede asignar un valor a otro marcado como literal @@ -2813,8 +2748,8 @@ - SynMemberKind.PropertyGetSet only expected in parse trees - SynMemberKind.PropertyGetSet se espera solo en árboles de análisis. + MemberKind.PropertyGetSet only expected in parse trees + MemberKind.PropertyGetSet se espera solo en árboles de análisis. diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf index 0526f8c7fa3..8668557aa35 100644 --- a/src/fsharp/xlf/FSComp.txt.fr.xlf +++ b/src/fsharp/xlf/FSComp.txt.fr.xlf @@ -17,16 +17,6 @@ La fonctionnalité '{0}' nécessite la bibliothèque F# pour le langage version {1} ou ultérieure. - - The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. - 'AssemblyKeyNameAttribute' a été déprécié. Utilisez 'AssemblyKeyFileAttribute' à la place. - - - - Key container signing is not supported on this platform. - La signature de conteneurs de clés n'est pas prise en charge sur cette plateforme. - - Available overloads:\n{0} Surcharges disponibles :\n{0} @@ -97,11 +87,6 @@ consommation par défaut des membres d'interface - - discard pattern in use binding - annuler le modèle dans la liaison d’utilisation - - dotless float32 literal littéral float32 sans point @@ -137,11 +122,6 @@ nameof - - non-variable patterns to the right of 'as' patterns - modèles non variables à droite de modèles « as » - - nullable optional interop interopérabilité facultative pouvant accepter une valeur null @@ -162,11 +142,6 @@ Package Management - - binary formatting for integers - mise en forme binaire pour les entiers - - whitespace relexation assouplissement de la mise en retrait avec des espaces blancs @@ -182,11 +157,6 @@ interpolation de chaîne - - struct representation for active patterns - représentation de structure pour les modèles actifs - - wild card in for loop caractère générique dans une boucle for @@ -267,11 +237,6 @@ L'en-tête de ressource commençant au décalage {0} est mal formé. - - Print the inferred interfaces of all compilation files to associated signature files - Imprimer les interfaces inférées de tous les fichiers de compilation sur les fichiers de signature associés - - Display the allowed values for language version, specify language version such as 'latest' or 'preview' Afficher les valeurs autorisées pour la version du langage, spécifier la version du langage comme 'dernière' ou 'préversion' @@ -292,11 +257,6 @@ Afficher la bannière de la version du compilateur et quitter - - Specify a Win32 icon file (.ico) - Spécifier un fichier icône (.ico) Win32 - - The package management feature requires language version 5.0 use /langversion:preview La fonctionnalité de gestion des packages nécessite la version 5.0 du langage. Utilisez /langversion:preview @@ -352,21 +312,6 @@ #i n'est pas pris en charge par les PackageManagers inscrits - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. - Le kit SDK .NET de ce script n'a pas pu être déterminé. Si le script se trouve dans un répertoire utilisant un fichier 'global.json', vérifiez que le kit SDK .NET approprié est installé. La sortie de '{0} --version' dans le répertoire '{1}' était '{2}', et le code de sortie était '{3}'. - - - - The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. - Impossible de déterminer le Kit de développement logiciel (SDK) .NET pour ce script. dotnet.exe est introuvable pour garantir l’installation d’un kit SDK .NET. - - - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. - Le kit SDK .NET de ce script n'a pas pu être déterminé. Si le script se trouve dans un répertoire utilisant un fichier 'global.json', vérifiez que le kit SDK .NET approprié est installé. Erreur inattendue '{0}'. - - This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. Cette fonctionnalité n'est pas prise en charge dans cette version de F#. Vous devrez peut-être ajouter /langversion:preview pour pouvoir utiliser cette fonctionnalité. @@ -412,21 +357,11 @@ Alignement non valide dans la chaîne interpolée - - The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions - L’utilisation de' [<Struct>] 'sur les valeurs, les fonctions et les méthodes n’est autorisée que sur les définitions de modèle actif partiel - - use! may not be combined with and! use! ne peut pas être combiné avec and! - - A [<Literal>] declaration cannot use an active pattern for its identifier - Une déclaration [<Literal>] ne peut pas utiliser un modèle actif en tant qu'identificateur - - Cannot assign a value to another value marked literal Impossible d'affecter une valeur à une autre valeur marquée comme littérale @@ -2813,8 +2748,8 @@ - SynMemberKind.PropertyGetSet only expected in parse trees - SynMemberKind.PropertyGetSet attendu uniquement dans les arborescences d'analyse + MemberKind.PropertyGetSet only expected in parse trees + MemberKind.PropertyGetSet attendu uniquement dans les arborescences d'analyse diff --git a/src/fsharp/xlf/FSComp.txt.it.xlf b/src/fsharp/xlf/FSComp.txt.it.xlf index 3d2019925fd..9f703a7cb8c 100644 --- a/src/fsharp/xlf/FSComp.txt.it.xlf +++ b/src/fsharp/xlf/FSComp.txt.it.xlf @@ -17,16 +17,6 @@ Con la funzionalità '{0}' è richiesta la libreria F# per la versione {1} o successiva del linguaggio. - - The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. - L'attributo 'AssemblyKeyNameAttribute' è deprecato. In alternativa, usare 'AssemblyKeyFileAttribute'. - - - - Key container signing is not supported on this platform. - La firma del contenitore di chiavi non è supportata in questa piattaforma. - - Available overloads:\n{0} Overload disponibili:\n{0} @@ -97,11 +87,6 @@ utilizzo predefinito dei membri di interfaccia - - discard pattern in use binding - rimuovi criterio nell'utilizzo dell'associazione - - dotless float32 literal valore letterale float32 senza punti @@ -137,11 +122,6 @@ nameof - - non-variable patterns to the right of 'as' patterns - modelli non variabili a destra dei modelli 'as' - - nullable optional interop Interop facoltativo nullable @@ -162,11 +142,6 @@ gestione pacchetti - - binary formatting for integers - formattazione binaria per interi - - whitespace relexation uso meno restrittivo degli spazi vuoti @@ -182,11 +157,6 @@ interpolazione di stringhe - - struct representation for active patterns - rappresentazione struct per criteri attivi - - wild card in for loop carattere jolly nel ciclo for @@ -267,11 +237,6 @@ L'intestazione di risorsa che inizia a partire dall'offset {0} non è valida. - - Print the inferred interfaces of all compilation files to associated signature files - Stampare le interfacce derivate di tutti i file di compilazione nei file di firma associati - - Display the allowed values for language version, specify language version such as 'latest' or 'preview' Visualizza i valori consentiti per la versione del linguaggio. Specificare la versione del linguaggio, ad esempio 'latest' o 'preview' @@ -292,11 +257,6 @@ Visualizza il banner della versione del compilatore ed esce - - Specify a Win32 icon file (.ico) - Specifica un file icona Win32 (.ico) - - The package management feature requires language version 5.0 use /langversion:preview Con la funzionalità di gestione pacchetti è richiesta la versione 5.0 del linguaggio. Usare /langversion:preview @@ -352,21 +312,6 @@ #i non è supportato dagli elementi PackageManager registrati - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. - Non è stato possibile determinare la versione di .NET SDK per questo script. Se lo script si trova in una directory che usa un file 'global.json', assicurarsi che sia installata la versione pertinente di .NET SDK. L'output di '{0} --version' nella directory '{1}' è '{2}' e il codice di uscita è '{3}'. - - - - The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. - Non e stato possibile determinare il Software Development Kit .NET per questo script. Non è stato possibile trovare dotnet.exe; assicurarsi che sia installato un Software Development Kit .NET. - - - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. - Non è stato possibile determinare la versione di .NET SDK per questo script. Se lo script si trova in una directory che usa un file 'global.json', assicurarsi che sia installata la versione pertinente di .NET SDK. Errore imprevisto: '{0}'. - - This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. Questa funzionalità non è supportata in questa versione di F#. Per usare questa funzionalità, potrebbe essere necessario aggiungere /langversion:preview. @@ -412,21 +357,11 @@ Allineamento non valido nella stringa interpolata - - The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions - L'utilizzo di '[<Struct>]' su valori, funzioni e metodi è consentito solo per definizioni di criteri attivi parziali - - use! may not be combined with and! Non è possibile combinare use! con and! - - A [<Literal>] declaration cannot use an active pattern for its identifier - Una dichiarazione [<Literal>] non può usare un criterio attivo per il relativo identificatore - - Cannot assign a value to another value marked literal Non è possibile assegnare un valore a un altro valore contrassegnato come letterale @@ -2813,8 +2748,8 @@ - SynMemberKind.PropertyGetSet only expected in parse trees - SynMemberKind.PropertyGetSet previsto solo in strutture ad albero di analisi + MemberKind.PropertyGetSet only expected in parse trees + MemberKind.PropertyGetSet previsto solo in strutture ad albero di analisi diff --git a/src/fsharp/xlf/FSComp.txt.ja.xlf b/src/fsharp/xlf/FSComp.txt.ja.xlf index 753e38d1b3a..ba1d0417d02 100644 --- a/src/fsharp/xlf/FSComp.txt.ja.xlf +++ b/src/fsharp/xlf/FSComp.txt.ja.xlf @@ -17,16 +17,6 @@ 機能 '{0}' を使用するには、言語バージョン {1} 以上の F# ライブラリが必要です。 - - The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. - 'AssemblyKeyNameAttribute' は非推奨になりました。代わりに 'AssemblyKeyFileAttribute' を使用してください。 - - - - Key container signing is not supported on this platform. - キー コンテナーの署名は、このプラットフォームではサポートされていません。 - - Available overloads:\n{0} 使用可能なオーバーロード:\n{0} @@ -97,11 +87,6 @@ 既定のインターフェイス メンバーの消費 - - discard pattern in use binding - 使用バインドでパターンを破棄する - - dotless float32 literal ドットなしの float32 リテラル @@ -137,11 +122,6 @@ nameof - - non-variable patterns to the right of 'as' patterns - 'as' パターンの右側の非変数パターン - - nullable optional interop Null 許容のオプションの相互運用 @@ -162,11 +142,6 @@ パッケージの管理 - - binary formatting for integers - 整数のバイナリ形式 - - whitespace relexation 空白の緩和 @@ -182,11 +157,6 @@ 文字列の補間 - - struct representation for active patterns - アクティブなパターンの構造体表現 - - wild card in for loop for ループのワイルド カード @@ -267,11 +237,6 @@ オフセット {0} で始まるリソース ヘッダーの形式に誤りがあります。 - - Print the inferred interfaces of all compilation files to associated signature files - すべてのコンパイル ファイルの推定されたインターフェイスを関連する署名ファイルに印刷します - - Display the allowed values for language version, specify language version such as 'latest' or 'preview' 言語バージョンで許可された値を表示し、'最新' や 'プレビュー' などの言語バージョンを指定する @@ -292,11 +257,6 @@ コンパイラ バージョンのバナーを表示して終了する - - Specify a Win32 icon file (.ico) - Win32 アイコン ファイル (.ico) を指定する - - The package management feature requires language version 5.0 use /langversion:preview パッケージ管理機能では、言語バージョン 5.0 で /langversion:preview を使用する必要があります @@ -352,21 +312,6 @@ 登録された PackageManager によって、#i はサポートされていません - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. - このスクリプトの .NET SDK を特定できませんでした。このスクリプトが、'global.json' が使用されているディレクトリにある場合は、関連する .NET SDK がインストールされていることを確認してください。ディレクトリ '{1}' の '{0} --version' からの出力は '{2}' で、終了コードは '{3}' でした。 - - - - The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. - このスクリプトの .NET SDK を特定できませんでした。dotnet.exe が見つかりませんでした。 .NET SDK がインストールされていることをご確認ください。 - - - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. - このスクリプトの .NET SDK を特定できませんでした。このスクリプトが、'global.json' が使用されているディレクトリにある場合は、関連する .NET SDK がインストールされていることを確認してください。予期しないエラー '{0}'。 - - This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. この機能は、このバージョンの F# ではサポートされていません。この機能を使用するには、/langversion:preview の追加が必要な場合があります。 @@ -412,21 +357,11 @@ 補間された文字列内の配置が無効です - - The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions - 値、関数、およびメソッドでの '[<Struct>]' は、部分的なアクティブ パターンの定義でのみ使うことができます - - use! may not be combined with and! use! を and! と組み合わせて使用することはできません - - A [<Literal>] declaration cannot use an active pattern for its identifier - [<Literal>] 宣言では、その識別子に対してアクティブ パターンを使用することはできません - - Cannot assign a value to another value marked literal リテラルとしてマークされた別の値に値を割り当てることはできません @@ -2813,8 +2748,8 @@ - SynMemberKind.PropertyGetSet only expected in parse trees - 解析ツリーに使用できるのは SynMemberKind.PropertyGetSet のみです + MemberKind.PropertyGetSet only expected in parse trees + 解析ツリーに使用できるのは MemberKind.PropertyGetSet のみです diff --git a/src/fsharp/xlf/FSComp.txt.ko.xlf b/src/fsharp/xlf/FSComp.txt.ko.xlf index 52f54536e9b..bf8d6b3cbdc 100644 --- a/src/fsharp/xlf/FSComp.txt.ko.xlf +++ b/src/fsharp/xlf/FSComp.txt.ko.xlf @@ -17,16 +17,6 @@ 언어 버전 {1} 이상에서 '{0}' 기능을 사용하려면 F# 라이브러리가 필요합니다. - - The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. - 'AssemblyKeyNameAttribute'는 사용되지 않습니다. 대신 'AssemblyKeyFileAttribute'를 사용하세요. - - - - Key container signing is not supported on this platform. - 키 컨테이너 서명은 이 플랫폼에서 지원되지 않습니다. - - Available overloads:\n{0} 사용 가능한 오버로드:\n{0} @@ -97,11 +87,6 @@ 기본 인터페이스 멤버 사용 - - discard pattern in use binding - 사용 중인 패턴 바인딩 무시 - - dotless float32 literal 점이 없는 float32 리터럴 @@ -137,11 +122,6 @@ nameof - - non-variable patterns to the right of 'as' patterns - 'as' 패턴의 오른쪽에 있는 변수가 아닌 패턴 - - nullable optional interop nullable 선택적 interop @@ -162,11 +142,6 @@ 패키지 관리 - - binary formatting for integers - 정수에 대한 이진 서식 지정 - - whitespace relexation 공백 완화 @@ -182,11 +157,6 @@ 문자열 보간 - - struct representation for active patterns - 활성 패턴에 대한 구조체 표현 - - wild card in for loop for 루프의 와일드카드 @@ -267,11 +237,6 @@ 오프셋 {0}에서 시작하는 리소스 헤더의 형식이 잘못되었습니다. - - Print the inferred interfaces of all compilation files to associated signature files - 모든 컴파일 파일의 유추된 인터페이스를 관련 서명 파일로 인쇄합니다. - - Display the allowed values for language version, specify language version such as 'latest' or 'preview' 언어 버전의 허용된 값을 표시하고 '최신' 또는 '미리 보기'와 같은 언어 버전을 지정합니다. @@ -292,11 +257,6 @@ 컴파일러 버전 배너를 표시하고 종료 - - Specify a Win32 icon file (.ico) - Win32 아이콘 파일(.ico) 지정 - - The package management feature requires language version 5.0 use /langversion:preview 패키지 관리 기능을 사용하려면 언어 버전 5.0이 필요합니다. /langversion:preview를 사용하세요. @@ -352,21 +312,6 @@ #i는 등록된 PackageManagers에서 지원하지 않습니다. - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. - 이 스크립트에 대한 .NET SDK를 확인할 수 없습니다. 스크립트가 'global.json'을 사용하는 디렉터리에 있는 경우 관련 .NET SDK가 설치되어 있는지 확인하세요. '{1}' 디렉터리에 있는 '{0} --version'의 출력은 '{2}'이고 종료 코드는 '{3}'입니다. - - - - The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. - 이 스크립트의 .NET SDK를 확인할 수 없습니다. dotnet.exe를 찾을 수 없습니다. .NET SDK가 설치되어 있는지 확인하세요. - - - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. - 이 스크립트에 대한 .NET SDK를 확인할 수 없습니다. 스크립트가 'global.json'을 사용하는 디렉터리에 있는 경우 관련 .NET SDK가 설치되어 있는지 확인하세요. 예기치 않은 오류 '{0}'. - - This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. 이 기능은 이 F# 버전에서 지원되지 않습니다. 이 기능을 사용하기 위해 /langversion:preview를 추가해야 할 수도 있습니다. @@ -412,21 +357,11 @@ 보간 문자열의 잘못된 정렬 - - The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions - 값, 함수 및 메서드에 '[<Struct>]'을(를) 사용하는 것은 부분 활성 패턴 정의에서만 허용됩니다. - - use! may not be combined with and! use!는 and!와 함께 사용할 수 없습니다. - - A [<Literal>] declaration cannot use an active pattern for its identifier - [<Literal>] 선언은 해당 식별자에 대한 활성 패턴을 사용할 수 없습니다. - - Cannot assign a value to another value marked literal 리터럴로 표시된 다른 값에 값을 할당할 수 없습니다. @@ -2813,8 +2748,8 @@ - SynMemberKind.PropertyGetSet only expected in parse trees - SynMemberKind.PropertyGetSet은 구문 분석 트리에만 필요합니다. + MemberKind.PropertyGetSet only expected in parse trees + MemberKind.PropertyGetSet은 구문 분석 트리에만 필요합니다. diff --git a/src/fsharp/xlf/FSComp.txt.pl.xlf b/src/fsharp/xlf/FSComp.txt.pl.xlf index 1df89f793e6..3027e6cc40e 100644 --- a/src/fsharp/xlf/FSComp.txt.pl.xlf +++ b/src/fsharp/xlf/FSComp.txt.pl.xlf @@ -17,16 +17,6 @@ Funkcja „{0}” wymaga biblioteki języka F# dla wersji językowej {1} lub nowszej. - - The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. - Element „AssemblyKeyNameAttribute” jest przestarzały. Zamiast niego użyj elementu „AssemblyKeyFileAttribute”. - - - - Key container signing is not supported on this platform. - Podpisywanie kontenerów kluczy nie jest obsługiwane na tej platformie. - - Available overloads:\n{0} Dostępne przeciążenia:\n{0} @@ -97,11 +87,6 @@ domyślne użycie składowej interfejsu - - discard pattern in use binding - odrzuć wzorzec w powiązaniu użycia - - dotless float32 literal bezkropkowy literał float32 @@ -137,11 +122,6 @@ nameof - - non-variable patterns to the right of 'as' patterns - stałe wzorce po prawej stronie wzorców typu „as” - - nullable optional interop opcjonalna międzyoperacyjność dopuszczająca wartość null @@ -162,11 +142,6 @@ zarządzanie pakietami - - binary formatting for integers - formatowanie danych binarnych dla liczb całkowitych - - whitespace relexation rozluźnianie reguł dotyczących odstępów @@ -182,11 +157,6 @@ interpolacja ciągu - - struct representation for active patterns - reprezentacja struktury aktywnych wzorców - - wild card in for loop symbol wieloznaczny w pętli for @@ -267,11 +237,6 @@ Nagłówek zasobu rozpoczynający się od przesunięcia {0} jest nieprawidłowo sformułowany. - - Print the inferred interfaces of all compilation files to associated signature files - Drukowanie wywnioskowanych interfejsów wszystkich plików kompilacji do skojarzonych plików sygnatur - - Display the allowed values for language version, specify language version such as 'latest' or 'preview' Wyświetl dozwolone wartości dla wersji językowej; określ wersję językową, np. „latest” lub „preview” @@ -292,11 +257,6 @@ Wyświetl baner wersji kompilatora i zakończ - - Specify a Win32 icon file (.ico) - Określ plik ikony systemu Win32 (ico) - - The package management feature requires language version 5.0 use /langversion:preview Funkcja zarządzania pakietami wymaga języka w wersji 5.0, użyj parametru /langversion:preview @@ -352,21 +312,6 @@ Element #i nie jest obsługiwany przez zarejestrowanych menedżerów pakietów - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. - Nie można określić zestawu .NET SDK dla tego skryptu. Jeśli skrypt znajduje się w katalogu korzystającym z pliku „global.json”, upewnij się, że zainstalowano odpowiedni zestaw .NET SDK. Dane wyjściowe polecenia „{0} --version” w katalogu „{1}” to „{2}”, a kod zakończenia to „{3}”. - - - - The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. - The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. - - - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. - Nie można określić zestawu .NET SDK dla tego skryptu. Jeśli skrypt znajduje się w katalogu korzystającym z pliku „global.json”, upewnij się, że zainstalowano odpowiedni zestaw .NET SDK. Nieoczekiwany błąd: „{0}”. - - This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. Ta funkcja nie jest obsługiwana w tej wersji języka F#. Aby korzystać z tej funkcji, może być konieczne dodanie parametru /langversion:preview. @@ -412,21 +357,11 @@ Nieprawidłowe wyrównanie w ciągu interpolowanym - - The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions - Używanie elementu "[<Struct>]" na wartościach, funkcjach i metodach jest dozwolone tylko w definicjach częściowo aktywnego wzorca - - use! may not be combined with and! Elementu use! nie można łączyć z elementem and! - - A [<Literal>] declaration cannot use an active pattern for its identifier - Deklaracja [<Literal>] nie może używać aktywnego wzorca dla swojego identyfikatora - - Cannot assign a value to another value marked literal Nie można przypisać wartości do innej wartości oznaczonej jako literał @@ -2813,7 +2748,7 @@ - SynMemberKind.PropertyGetSet only expected in parse trees + MemberKind.PropertyGetSet only expected in parse trees Element MemberKind.PropertyGetSet jest oczekiwany tylko w drzewach analizy diff --git a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf index a216008109b..48e18e83cc9 100644 --- a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf +++ b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf @@ -17,16 +17,6 @@ O recurso '{0}' exige a biblioteca F# para a versão da linguagem {1} ou posterior. - - The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. - O 'AssemblyKeyNameAttribute' foi preterido. Use o 'AssemblyKeyFileAttribute'. - - - - Key container signing is not supported on this platform. - Não há suporte para a assinatura do contêiner de chave nesta plataforma. - - Available overloads:\n{0} Sobrecargas disponíveis:\n{0} @@ -97,11 +87,6 @@ consumo de membro da interface padrão - - discard pattern in use binding - descartar o padrão em uso de associação - - dotless float32 literal literal float32 sem ponto @@ -137,11 +122,6 @@ nameof - - non-variable patterns to the right of 'as' patterns - padrões não-variáveis à direita dos padrões 'as'. - - nullable optional interop interoperabilidade opcional anulável @@ -162,11 +142,6 @@ gerenciamento de pacotes - - binary formatting for integers - formatação binária para números inteiros - - whitespace relexation atenuação de espaço em branco @@ -182,11 +157,6 @@ interpolação da cadeia de caracteres - - struct representation for active patterns - representação estrutural para padrões ativos - - wild card in for loop curinga para loop @@ -267,11 +237,6 @@ O cabeçalho do recurso que começa no deslocamento {0} está malformado. - - Print the inferred interfaces of all compilation files to associated signature files - Imprimir as interfaces inferidas de todos os arquivos de compilação para os arquivos de assinatura associados - - Display the allowed values for language version, specify language version such as 'latest' or 'preview' Exibe os valores permitidos para a versão do idioma, especifica a versão do idioma, como 'mais recente ' ou 'prévia' @@ -292,11 +257,6 @@ Exibir a faixa de versão do compilador e sair - - Specify a Win32 icon file (.ico) - Especificar um arquivo de ícone do Win32 (.ico) - - The package management feature requires language version 5.0 use /langversion:preview O recurso de gerenciamento de pacotes requer a versão de idioma 5.0. Use /langversion:preview @@ -352,21 +312,6 @@ O PackageManagers registrado não dá suporte a #i - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. - Não foi possível determinar o SDK do .NET para esse script. Se o script estiver em um diretório usando um 'global.json', verifique se o SDK relevante do .NET está instalado. A saída de '{0} --version' no diretório '{1}' foi: '{2}' e o código de saída foi '{3}'. - - - - The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. - The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. - - - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. - Não foi possível determinar o SDK do .NET deste script. Se o script estiver em um diretório que usa um 'global.json', verifique se o SDK do .NET relevante está instalado. Erro inesperado '{0}'. - - This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. Este recurso não tem suporte nesta versão do F#. Talvez seja necessário adicionar /langversion:preview para usar este recurso. @@ -412,21 +357,11 @@ Alinhamento inválido na cadeia de caracteres interpolada - - The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions - O uso de '[<Struct>]' em valores, funções e métodos somente é permitido em definições de padrões ativos parciais - - use! may not be combined with and! use! não pode ser combinado com and! - - A [<Literal>] declaration cannot use an active pattern for its identifier - Uma declaração [<Literal>] não pode usar um padrão ativo para seu identificador - - Cannot assign a value to another value marked literal Não é possível atribuir um valor a outro valor marcado como literal @@ -2813,8 +2748,8 @@ - SynMemberKind.PropertyGetSet only expected in parse trees - SynMemberKind.PropertyGetSet só é esperado em árvores de análise + MemberKind.PropertyGetSet only expected in parse trees + MemberKind.PropertyGetSet só é esperado em árvores de análise diff --git a/src/fsharp/xlf/FSComp.txt.ru.xlf b/src/fsharp/xlf/FSComp.txt.ru.xlf index 0e6e8ad79af..63ec608688b 100644 --- a/src/fsharp/xlf/FSComp.txt.ru.xlf +++ b/src/fsharp/xlf/FSComp.txt.ru.xlf @@ -17,16 +17,6 @@ Компоненту "{0}" требуется библиотека F# для языка версии {1} или более поздней. - - The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. - Атрибут "AssemblyKeyNameAttribute" является устаревшим. Используйте вместо него атрибут "AssemblyKeyFileAttribute". - - - - Key container signing is not supported on this platform. - Подписывание контейнера ключей не поддерживается на этой платформе. - - Available overloads:\n{0} Доступные перегрузки:\n{0} @@ -97,11 +87,6 @@ использование элемента интерфейса по умолчанию - - discard pattern in use binding - шаблон отмены в привязке использования - - dotless float32 literal литерал float32 без точки @@ -137,11 +122,6 @@ nameof - - non-variable patterns to the right of 'as' patterns - шаблоны без переменных справа от шаблонов "as" - - nullable optional interop необязательное взаимодействие, допускающее значение NULL @@ -162,11 +142,6 @@ управление пакетами - - binary formatting for integers - двоичное форматирование для целых чисел - - whitespace relexation уменьшение строгости для пробелов @@ -182,11 +157,6 @@ интерполяция строк - - struct representation for active patterns - представление структуры для активных шаблонов - - wild card in for loop подстановочный знак в цикле for @@ -267,11 +237,6 @@ Заголовок ресурса некорректен начиная со смещения {0}. - - Print the inferred interfaces of all compilation files to associated signature files - Печать определяемых интерфейсов всех файлов компиляции в связанные файлы подписей - - Display the allowed values for language version, specify language version such as 'latest' or 'preview' Отображение допустимых значений для версии языка. Укажите версию языка, например, "latest" или "preview". @@ -292,11 +257,6 @@ Отобразить окно с версией компилятора и выйти - - Specify a Win32 icon file (.ico) - Укажите файл значка Win32 (ICO) - - The package management feature requires language version 5.0 use /langversion:preview Для функции управления пакетами требуется версия языка 5.0, используйте параметр /langversion:preview @@ -352,21 +312,6 @@ #i не поддерживается зарегистрированными диспетчерами пакетов - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. - Не удалось определить пакет SDK .NET для этого сценария. Если сценарий находится в каталоге с использованием "global.json", убедитесь, что установлен соответствующий пакет SDK .NET. Выходные данные команды "{0} --version" в каталоге "{1}" — "{2}", а код выхода — "{3}". - - - - The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. - Не удалось определить пакет SDK .NET для этого сценария. Не удалось найти dotnet.exe. Убедитесь, что пакет SDK .NET установлен. - - - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. - Не удалось определить пакет SDK .NET для этого скрипта. Если сценарий находится в каталоге с использованием файла "global.json", убедитесь, что установлен соответствующий пакет SDK .NET. Непредвиденная ошибка "{0}". - - This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. Эта функция не поддерживается в данной версии F#. Возможно, потребуется добавить/langversion:preview, чтобы использовать эту функцию. @@ -412,21 +357,11 @@ Недопустимое выравнивание в интерполированной строке - - The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions - Использование "[<Struct>]" для значений, функций и методов разрешено только для определений частичных активных шаблонов - - use! may not be combined with and! use! запрещено сочетать с and! - - A [<Literal>] declaration cannot use an active pattern for its identifier - Объявление [<Literal>] не может использовать активный шаблон для своего идентификатора. - - Cannot assign a value to another value marked literal Невозможно присвоить значение другому значению, помеченному как литерал @@ -2813,8 +2748,8 @@ - SynMemberKind.PropertyGetSet only expected in parse trees - SynMemberKind.PropertyGetSet используется только в деревьях синтаксического анализа + MemberKind.PropertyGetSet only expected in parse trees + MemberKind.PropertyGetSet требуется только в деревьях синтаксического анализа diff --git a/src/fsharp/xlf/FSComp.txt.tr.xlf b/src/fsharp/xlf/FSComp.txt.tr.xlf index 07a561ce588..70484967db7 100644 --- a/src/fsharp/xlf/FSComp.txt.tr.xlf +++ b/src/fsharp/xlf/FSComp.txt.tr.xlf @@ -17,16 +17,6 @@ '{0}' özelliği için F# kitaplığının {1} veya üstü dil sürümü gerekir. - - The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. - 'AssemblyKeyNameAttribute' kullanım dışı bırakıldı. Bunun yerine 'AssemblyKeyFileAttribute' kullanın. - - - - Key container signing is not supported on this platform. - Anahtar kapsayıcısı imzalama bu platformda desteklenmiyor. - - Available overloads:\n{0} Kullanılabilir aşırı yüklemeler:\n{0} @@ -97,11 +87,6 @@ varsayılan arabirim üyesi tüketimi - - discard pattern in use binding - kullanım bağlamasında deseni at - - dotless float32 literal noktasız float32 sabit değeri @@ -137,11 +122,6 @@ nameof - - non-variable patterns to the right of 'as' patterns - 'as' desenlerinin sağındaki değişken olmayan desenler - - nullable optional interop null atanabilir isteğe bağlı birlikte çalışma @@ -162,11 +142,6 @@ paket yönetimi - - binary formatting for integers - tamsayılar için ikili biçim - - whitespace relexation boşluk genişlemesi @@ -182,11 +157,6 @@ dizede düz metin arasına kod ekleme - - struct representation for active patterns - etkin desenler için yapı gösterimi - - wild card in for loop for döngüsünde joker karakter @@ -267,11 +237,6 @@ {0} uzaklığında başlayan kaynak üst bilgisi hatalı biçimlendirilmiş. - - Print the inferred interfaces of all compilation files to associated signature files - Tüm derleme dosyalarının çıkarsanan arabirimlerini ilişkili imza dosyalarına yazdır - - Display the allowed values for language version, specify language version such as 'latest' or 'preview' Dil sürümü için izin verilen değerleri görüntüleyin, dil sürümünü 'en son' veya 'önizleme' örneklerindeki gibi belirtin @@ -292,11 +257,6 @@ Derleyici sürümü başlığını görüntüle ve çık - - Specify a Win32 icon file (.ico) - Win32 simge dosyası (.ico) belirtin - - The package management feature requires language version 5.0 use /langversion:preview Paket yönetimi özelliği dil sürümü 5.0 gerektiriyor, /langversion:preview kullanın @@ -352,21 +312,6 @@ #i, kayıtlı PackageManagers tarafından desteklenmiyor - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. - Bu betik için .NET SDK belirlenemedi. Betik 'global.json' kullanan bir dizindeyse, ilgili .NET SDK'nın yüklü olduğundan emin olun. '{1}' dizinindeki '{0} --version' çıkışı: '{2}' ve çıkış kodu: '{3}'. - - - - The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. - The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. - - - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. - Bu betik için .NET SDK belirlenemedi. Betik 'global.json' kullanan bir dizindeyse, ilgili .NET SDK'nın yüklü olduğundan emin olun. Beklenmeyen hata '{0}'. - - This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. Bu özellik, bu F# sürümünde desteklenmiyor. Bu özelliği kullanabilmeniz için /langversion:preview eklemeniz gerekebilir. @@ -412,21 +357,11 @@ Düz metin arasına kod eklenmiş dizede geçersiz hizalama - - The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions - Değerlerde, işlevlerde ve yöntemlerde '[<Struct>]' kullanımına yalnızca kısmi etkin desen tanımlarında izin veriliyor - - use! may not be combined with and! use!, and! ile birleştirilemez - - A [<Literal>] declaration cannot use an active pattern for its identifier - [<Literal>] bildirimi, tanımlayıcısı için etkin desen kullanamaz - - Cannot assign a value to another value marked literal Sabit değer olarak işaretlenen bir değere başka bir değer atanamaz @@ -2813,8 +2748,8 @@ - SynMemberKind.PropertyGetSet only expected in parse trees - SynMemberKind.PropertyGetSet yalnızca ayrıştırma ağaçlarında beklenir + MemberKind.PropertyGetSet only expected in parse trees + MemberKind.PropertyGetSet yalnızca ayrıştırma ağaçlarında beklenir diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf index f6f3250b78e..e5b0a72a97c 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf @@ -17,16 +17,6 @@ 功能“{0}”需要 {1} 或更高语言版本的 F# 库。 - - The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. - "AssemblyKeyNameAttribute" 已被弃用。请改为使用 "AssemblyKeyFileAttribute"。 - - - - Key container signing is not supported on this platform. - 此平台上不支持密钥容器签名。 - - Available overloads:\n{0} 可用重载:\n{0} @@ -97,11 +87,6 @@ 默认接口成员消耗 - - discard pattern in use binding - 放弃使用绑定模式 - - dotless float32 literal 无点 float32 文本 @@ -137,11 +122,6 @@ nameof - - non-variable patterns to the right of 'as' patterns - "as" 模式右侧的非变量模式 - - nullable optional interop 可以为 null 的可选互操作 @@ -162,11 +142,6 @@ 包管理 - - binary formatting for integers - 整数的二进制格式设置 - - whitespace relexation 空格松弛法 @@ -182,11 +157,6 @@ 字符串内插 - - struct representation for active patterns - 活动模式的结构表示形式 - - wild card in for loop for 循环中的通配符 @@ -267,11 +237,6 @@ 以偏移量 {0} 开始的资源标头格式不正确。 - - Print the inferred interfaces of all compilation files to associated signature files - 将所有编译文件的推断接口打印到关联的签名文件 - - Display the allowed values for language version, specify language version such as 'latest' or 'preview' 显示语言版本的允许值,指定语言版本,如“最新”或“预览” @@ -292,11 +257,6 @@ 显示编译器版本横幅并退出 - - Specify a Win32 icon file (.ico) - 指定 Win32 图标文件(.ico) - - The package management feature requires language version 5.0 use /langversion:preview 包管理功能需要语言版本 5.0,请使用 /langversion:preview @@ -352,21 +312,6 @@ 注册的 PackageManager 不支持 #i - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. - 无法确定此脚本的 .NET SDK。如果脚本在使用 "global.json" 的目录中,请确保已安装相关的 .NET SDK。目录“{1}”中 "{0} --version" 的输出为“{2}”,退出代码为“{3}”。 - - - - The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. - The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. - - - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. - 无法确定此脚本的 .NET SDK。如果脚本在使用 "global.json" 的目录中,请确保已安装相关的 .NET SDK。出现意外错误“{0}”。 - - This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. 此版本的 F# 不支持此功能。你可能需要添加 /langversion:preview 才可使用此功能。 @@ -412,21 +357,11 @@ 内插字符串中的对齐无效 - - The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions - 只允许在部分活动模式定义中对值、函数和方法使用 "[<Struct>]" - - use! may not be combined with and! use! 不得与 and! 结合使用 - - A [<Literal>] declaration cannot use an active pattern for its identifier - [<Literal>] 声明不能对其标识符使用活动模式 - - Cannot assign a value to another value marked literal 无法将值分配给标记为文本的其他值 @@ -2813,8 +2748,8 @@ - SynMemberKind.PropertyGetSet only expected in parse trees - 分析树中只应有 SynMemberKind.PropertyGetSet + MemberKind.PropertyGetSet only expected in parse trees + 仅分析树中需要 MemberKind.PropertyGetSet diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf index 6bf3879256a..95ddbdce3fa 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf @@ -17,16 +17,6 @@ 功能 '{0}' 需要語言版本 {1} 或更高的 F# 程式庫。 - - The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. - 'AssemblyKeyNameAttribute' 已淘汰。請改用 'AssemblyKeyFileAttribute'。 - - - - Key container signing is not supported on this platform. - 此平台不支援金鑰容器簽署。 - - Available overloads:\n{0} 可用的多載:\n{0} @@ -97,11 +87,6 @@ 預設介面成員使用 - - discard pattern in use binding - 捨棄使用繫結中的模式 - - dotless float32 literal 無點號的 float32 常值 @@ -137,11 +122,6 @@ nameof - - non-variable patterns to the right of 'as' patterns - 'as' 模式右邊的非變數模式 - - nullable optional interop 可為 Null 的選擇性 Interop @@ -162,11 +142,6 @@ 套件管理 - - binary formatting for integers - 整數的二進位格式化 - - whitespace relexation 空白字元放寬 @@ -182,11 +157,6 @@ 字串內插補點 - - struct representation for active patterns - 現用模式的結構表示法 - - wild card in for loop for 迴圈中的萬用字元 @@ -267,11 +237,6 @@ 從位移 {0} 開始的資源標頭格式錯誤。 - - Print the inferred interfaces of all compilation files to associated signature files - 將所有編譯檔案的推斷介面列印至相關聯的簽章檔案 - - Display the allowed values for language version, specify language version such as 'latest' or 'preview' 顯示語言版本允許的值,指定 'latest' 或 'preview' 等語言版本 @@ -292,11 +257,6 @@ 顯示編譯器版本橫幅並結束 - - Specify a Win32 icon file (.ico) - 指定 Win32 圖示檔 (.ico) - - The package management feature requires language version 5.0 use /langversion:preview 套件管理功能需要語言版本 5.0,請使用 /langversion:preview @@ -352,21 +312,6 @@ 註冊的 PackageManagers 不支援 #i - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. - 無法判斷這個指令碼的 .NET SDK。如果指令碼位於使用 'global.json' 的目錄中,請確認已安裝相關的 .NET SDK。目錄 '{1}' 中 '{0} --version' 的輸出為: '{2}',結束代碼為 '{3}'。 - - - - The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. - 無法判斷此指令碼的 .NET SDK。找不到 dotnet.exe,請確保已安裝 .NET SDK。 - - - - The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. - 無法判斷這個指令碼的 .NET SDK。如果指令碼位於使用 'global.json' 的目錄中,請確認已安裝相關的 .NET SDK。未預期的錯誤 '{0}'。 - - This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. 此版本的 F# 不支援此功能。您可能需要新增 /langversion:preview 才能使用此功能。 @@ -412,21 +357,11 @@ 插補字串中的對齊無效 - - The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions - 只允許在部分現用模式定義上對值、函式和方法使用 '[<Struct>]' - - use! may not be combined with and! use! 不可與 and! 合併 - - A [<Literal>] declaration cannot use an active pattern for its identifier - [<Literal>] 宣告不能對其識別碼使用現用模式 - - Cannot assign a value to another value marked literal 無法將值指派給標記為常值的其他值 @@ -2813,8 +2748,8 @@ - SynMemberKind.PropertyGetSet only expected in parse trees - 只有剖析樹狀目錄中需要 SynMemberKind.PropertyGetSet + MemberKind.PropertyGetSet only expected in parse trees + 只有剖析樹狀目錄中需要 MemberKind.PropertyGetSet diff --git a/src/scripts/scriptlib.fsx b/src/scripts/scriptlib.fsx index 0cf23b4b295..71c57aee036 100644 --- a/src/scripts/scriptlib.fsx +++ b/src/scripts/scriptlib.fsx @@ -166,7 +166,7 @@ module Scripting = type OutPipe (writer: TextWriter) = member x.Post (msg:string) = lock writer (fun () -> writer.WriteLine(msg)) interface System.IDisposable with - member _.Dispose() = writer.Flush() + member __.Dispose() = writer.Flush() let redirectTo (writer: TextWriter) = new OutPipe (writer) diff --git a/tests/EndToEndBuildTests/BasicProvider/BasicProvider.DesignTime/BasicProvider.DesignTime.fsproj b/tests/EndToEndBuildTests/BasicProvider/BasicProvider.DesignTime/BasicProvider.DesignTime.fsproj index e027c0f02eb..84caced58f2 100644 --- a/tests/EndToEndBuildTests/BasicProvider/BasicProvider.DesignTime/BasicProvider.DesignTime.fsproj +++ b/tests/EndToEndBuildTests/BasicProvider/BasicProvider.DesignTime/BasicProvider.DesignTime.fsproj @@ -2,7 +2,7 @@ Library - net5.0;net472 + netcoreapp3.1;net472 typeproviders NO_GENERATIVE IS_DESIGNTIME diff --git a/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/BasicProvider.Tests.fsproj b/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/BasicProvider.Tests.fsproj index 358a6059411..f6d202a0d55 100644 --- a/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/BasicProvider.Tests.fsproj +++ b/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/BasicProvider.Tests.fsproj @@ -2,7 +2,7 @@ Library - net5.0 + netcoreapp3.1 $(TestTargetFramework) false NO_GENERATIVE diff --git a/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/NuGet.config b/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/NuGet.config index 261d597dfa2..82abc6e8d3e 100644 --- a/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/NuGet.config +++ b/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/NuGet.config @@ -3,6 +3,6 @@ - + diff --git a/tests/EndToEndBuildTests/BasicProvider/BasicProvider/BasicProvider.fsproj b/tests/EndToEndBuildTests/BasicProvider/BasicProvider/BasicProvider.fsproj index b2125ad9b94..9e6714f99d8 100644 --- a/tests/EndToEndBuildTests/BasicProvider/BasicProvider/BasicProvider.fsproj +++ b/tests/EndToEndBuildTests/BasicProvider/BasicProvider/BasicProvider.fsproj @@ -2,7 +2,7 @@ Library - net5.0;net472 + netcoreapp3.1;net472 typeproviders $(FSharpCoreShippedPackageVersion) typeproviders diff --git a/tests/EndToEndBuildTests/BasicProvider/TestBasicProvider.cmd b/tests/EndToEndBuildTests/BasicProvider/TestBasicProvider.cmd index 2abd059cc48..bce9551e2c9 100644 --- a/tests/EndToEndBuildTests/BasicProvider/TestBasicProvider.cmd +++ b/tests/EndToEndBuildTests/BasicProvider/TestBasicProvider.cmd @@ -42,8 +42,8 @@ echo dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuratio dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net472 -p:FSharpTestCompilerVersion=net40 if ERRORLEVEL 1 echo Error: TestBasicProvider failed && goto :failure -echo dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net5.0 -p:FSharpTestCompilerVersion=coreclr - dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net5.0 -p:FSharpTestCompilerVersion=coreclr +echo dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=netcoreapp3.1 -p:FSharpTestCompilerVersion=coreclr + dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=netcoreapp3.1 -p:FSharpTestCompilerVersion=coreclr if ERRORLEVEL 1 echo Error: TestBasicProvider failed && goto :failure rem @@ -60,8 +60,8 @@ echo dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuratio dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net472 -p:FSharpTestCompilerVersion=net40 if ERRORLEVEL 1 echo Error: TestBasicProvider failed && goto :failure -echo dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net5.0 -p:FSharpTestCompilerVersion=coreclr - dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net5.0 -p:FSharpTestCompilerVersion=coreclr +echo dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=netcoreapp3.1 -p:FSharpTestCompilerVersion=coreclr + dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=netcoreapp3.1 -p:FSharpTestCompilerVersion=coreclr if ERRORLEVEL 1 echo Error: TestBasicProvider failed && goto :failure :success diff --git a/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/ComboProvider.Tests.fsproj b/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/ComboProvider.Tests.fsproj index 36c83c024b4..21a2234258d 100644 --- a/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/ComboProvider.Tests.fsproj +++ b/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/ComboProvider.Tests.fsproj @@ -2,7 +2,7 @@ Library - net5.0 + netcoreapp3.1 $(TestTargetFramework) false $(FSharpCoreShippedPackageVersion) diff --git a/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/NuGet.config b/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/NuGet.config index 261d597dfa2..82abc6e8d3e 100644 --- a/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/NuGet.config +++ b/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/NuGet.config @@ -3,6 +3,6 @@ - + diff --git a/tests/EndToEndBuildTests/ComboProvider/ComboProvider/ComboProvider.fsproj b/tests/EndToEndBuildTests/ComboProvider/ComboProvider/ComboProvider.fsproj index 640b505aaf9..0b35bb4aac3 100644 --- a/tests/EndToEndBuildTests/ComboProvider/ComboProvider/ComboProvider.fsproj +++ b/tests/EndToEndBuildTests/ComboProvider/ComboProvider/ComboProvider.fsproj @@ -2,9 +2,9 @@ Library - net5.0;net472 + netcoreapp3.1;net472 $(FSharpCoreShippedPackageVersion) - net5.0;net472 + netcoreapp3.1;net472 diff --git a/tests/EndToEndBuildTests/ComboProvider/TestComboProvider.cmd b/tests/EndToEndBuildTests/ComboProvider/TestComboProvider.cmd index f14f2685652..b8e68e24134 100644 --- a/tests/EndToEndBuildTests/ComboProvider/TestComboProvider.cmd +++ b/tests/EndToEndBuildTests/ComboProvider/TestComboProvider.cmd @@ -42,8 +42,8 @@ echo dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuratio dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net472 -p:FSharpTestCompilerVersion=net40 if ERRORLEVEL 1 echo Error: TestComboProvider failed && goto :failure -echo dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net5.0 -p:FSharpTestCompilerVersion=coreclr - dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net5.0 -p:FSharpTestCompilerVersion=coreclr +echo dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=netcoreapp3.1 -p:FSharpTestCompilerVersion=coreclr + dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=netcoreapp3.1 -p:FSharpTestCompilerVersion=coreclr if ERRORLEVEL 1 echo Error: TestComboProvider failed && goto :failure rem @@ -60,8 +60,8 @@ echo dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuratio dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net472 -p:FSharpTestCompilerVersion=net40 if ERRORLEVEL 1 echo Error: TestComboProvider failed && goto :failure -echo dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -v %configuration% -p:TestTargetFramework=net5.0 -p:FSharpTestCompilerVersion=coreclr - dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net5.0 -p:FSharpTestCompilerVersion=coreclr +echo dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -v %configuration% -p:TestTargetFramework=netcoreapp3.1 -p:FSharpTestCompilerVersion=coreclr + dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=netcoreapp3.1 -p:FSharpTestCompilerVersion=coreclr if ERRORLEVEL 1 echo Error: TestComboProvider failed && goto :failure :success diff --git a/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj b/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj index 2572d28cc62..ffc6aa91e4b 100644 --- a/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj +++ b/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj @@ -3,8 +3,8 @@ - net472;net5.0 - net5.0 + net472;netcoreapp3.1 + netcoreapp3.1 Library true nunit diff --git a/tests/FSharp.Compiler.ComponentTests/Conformance/DeclarationElements/LetBindings/UseBindings.fs b/tests/FSharp.Compiler.ComponentTests/Conformance/DeclarationElements/LetBindings/UseBindings.fs deleted file mode 100644 index 7cabf8b5e20..00000000000 --- a/tests/FSharp.Compiler.ComponentTests/Conformance/DeclarationElements/LetBindings/UseBindings.fs +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.ComponentTests.Conformance.DeclarationElements.LetBindings - -open Xunit -open FSharp.Test.Utilities.Compiler -open FSharp.Test.Utilities.Xunit.Attributes - -module UseBindings = - - [] - let ``UseBindings - UseBindingDiscard01.fs - Compiles`` compilation = - compilation - |> asFsx - |> withOptions ["--langversion:preview"] - |> compile - |> shouldSucceed - |> ignore - - [] - let ``UseBindings - UseBindingDiscard01.fs - Bad LangVersion`` compilation = - compilation - |> asFsx - |> withOptions ["--langversion:5.0"] - |> compile - |> shouldFail - |> withErrorCode 3350 - |> withDiagnosticMessageMatches "Feature 'discard pattern in use binding' is not available.*" - - [] - let ``Dispose called for discarded value of use binding`` () = - Fsx """ -type private Disposable() = - [] static val mutable private disposedTimes: int - [] static val mutable private constructedTimes: int - - do Disposable.constructedTimes <- Disposable.constructedTimes + 1 - - static member DisposeCallCount() = Disposable.disposedTimes - static member ConsturctorCallCount() = Disposable.constructedTimes - - interface System.IDisposable with - member _.Dispose() = - Disposable.disposedTimes <- Disposable.disposedTimes + 1 - -let _scope = - use _ = new Disposable() - () - -let disposeCalls = Disposable.DisposeCallCount() -if disposeCalls <> 1 then - failwith "was not disposed or disposed too many times" - -let ctorCalls = Disposable.ConsturctorCallCount() -if ctorCalls <> 1 then - failwithf "unexpected constructor call count: %i" ctorCalls - - """ - |> asExe - |> withLangVersionPreview - |> compileAndRun - |> shouldSucceed \ No newline at end of file diff --git a/tests/FSharp.Compiler.ComponentTests/Conformance/PatternMatching/Simple.fs b/tests/FSharp.Compiler.ComponentTests/Conformance/PatternMatching/Simple.fs index 62eeaf555f7..2d2123f581c 100644 --- a/tests/FSharp.Compiler.ComponentTests/Conformance/PatternMatching/Simple.fs +++ b/tests/FSharp.Compiler.ComponentTests/Conformance/PatternMatching/Simple.fs @@ -47,16 +47,3 @@ module Simple = |> withDiagnosticMessageMatches "Uppercase variable identifiers should not generally be used in patterns, and may indicate a missing open declaration or a misspelt pattern name" |> ignore - [] - let ``As patterns``() = - Fsx """ - let (|Id|) = id - let a = [1..4] - match a with - | 1 | 1 as b::(Id 2 as c as c2)::[d as 3; Id e & Id _ as Id 4] as Id f when b = 1 && c = 2 && c2 = 2 && d = 3 && e = 4 && a = f -> () - | _ -> failwith "Match failed" - """ - |> asExe - |> withLangVersionPreview - |> compileExeAndRun - |> shouldSucceed \ No newline at end of file diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Misc.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Misc.fs deleted file mode 100644 index 88410a24e11..00000000000 --- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Misc.fs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.ComponentTests.EmittedIL - -open Xunit -open FSharp.Test.Utilities.Compiler - -module ``Misc`` = - [] - let ``Empty array construct compiles to System.Array.Empty<_>()``() = - FSharp """ -module Misc - -let zInt (): int[] = [||] - -let zString (): string[] = [||] - -let zGeneric<'a> (): 'a[] = [||] - """ - |> compile - |> shouldSucceed - |> verifyIL [""" -IL_0000: call !!0[] [runtime]System.Array::Empty() -IL_0005: ret""" - """ - -IL_0000: call !!0[] [runtime]System.Array::Empty() -IL_0005: ret""" - - """ -IL_0000: call !!0[] [runtime]System.Array::Empty() -IL_0005: ret""" ] diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/SkipLocalsInit.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/SkipLocalsInit.fs deleted file mode 100644 index cd484f2cfe7..00000000000 --- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/SkipLocalsInit.fs +++ /dev/null @@ -1,133 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.ComponentTests.EmittedIL - -open Xunit -open FSharp.Test.Utilities.Compiler - -#if NETCOREAPP -module ``SkipLocalsInit`` = - [] - let ``Init in function and closure not emitted when applied on function``() = - FSharp """ -module SkipLocalsInit - -[] -let x () = - [||] |> Array.filter (fun x -> let y = "".Length in y + y = x) |> ignore -""" - |> compile - |> shouldSucceed - |> verifyIL [""" -.method public static void x() cil managed -{ - .custom instance void [runtime]System.Runtime.CompilerServices.SkipLocalsInitAttribute::.ctor() = ( 01 00 00 00 ) - - .maxstack 4 - .locals (int32[] V_0) -""" - - """ -.method public strict virtual instance bool - Invoke(int32 x) cil managed -{ - - .maxstack 6 - .locals (int32 V_0)"""] - - [] - let ``Init in static method not emitted when applied on class``() = - FSharp """ -module SkipLocalsInit - -[] -type X () = - static member Y () = - let x = "ssa".Length - x + x - """ - |> compile - |> shouldSucceed - |> verifyIL [""" -.custom instance void [runtime]System.Runtime.CompilerServices.SkipLocalsInitAttribute::.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 ) -""" - - """ -.method public static int32 Y() cil managed -{ - - .maxstack 4 - .locals (int32 V_0)"""] - - [] - let ``Init in static method and function not emitted when applied on module``() = - FSharp """ -[] -module SkipLocalsInit - -let x () = - let x = "ssa".Length - x + x - -type X () = - static member Y () = - let x = "ssa".Length - x + x - """ - |> compile - |> shouldSucceed - |> verifyIL [""" -.custom instance void [runtime]System.Runtime.CompilerServices.SkipLocalsInitAttribute::.ctor() = ( 01 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 int32 x() cil managed -{ - - .maxstack 4 - .locals (int32 V_0) -""" - - """ -.method public static int32 Y() cil managed -{ - - .maxstack 4 - .locals (int32 V_0)"""] - - [] - let ``Init in method and closure not emitted when applied on method``() = - FSharp """ -module SkipLocalsInit - -type X () = - [] - member _.Y () = - [||] |> Array.filter (fun x -> let y = "".Length in y + y = x) |> ignore - let x = "ssa".Length - x + x - """ - |> compile - |> shouldSucceed - |> verifyIL [""" -.method public hidebysig instance int32 - Y() cil managed -{ - .custom instance void [runtime]System.Runtime.CompilerServices.SkipLocalsInitAttribute::.ctor() = ( 01 00 00 00 ) - - .maxstack 4 - .locals (int32[] V_0, - int32 V_1) -""" - - """ -.method public strict virtual instance bool - Invoke(int32 x) cil managed -{ - - .maxstack 6 - .locals (int32 V_0) -"""] -#endif \ No newline at end of file diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/TupleElimination.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/TupleElimination.fs deleted file mode 100644 index a83e71a1960..00000000000 --- a/tests/FSharp.Compiler.ComponentTests/EmittedIL/TupleElimination.fs +++ /dev/null @@ -1,799 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.ComponentTests.EmittedIL - -open Xunit -open FSharp.Test.Utilities.Compiler - -module ``TupleElimination`` = - - [] - let ``Sequence expressions with potential side effects do not prevent tuple elimination``() = - FSharp """ -module TupleElimination -open System.Runtime.CompilerServices - -[] -let f () = 3 - -[] -let sideEffect () = () - -type Test = - [] - static member test(x: int32 * int32) = x - -let v () = - let a, b = - "".ToString () |> ignore - System.DateTime.Now |> ignore - "3".ToString () |> ignore - 2L, f () - System.DateTime.Now |> ignore - a, b - -let w () = - let (a, b) as t = - "".ToString () |> ignore - System.DateTime.Now |> ignore - "3".ToString () |> ignore - 2, f () - System.DateTime.Now |> ignore - let _ = Test.test(t) - a + b - -let x () = - let a, b = - "".ToString () |> ignore - System.DateTime.Now |> ignore - "3".ToString () |> ignore - 2, f () - System.DateTime.Now |> ignore - a + b - -let y () = - let a, b, c = - let a = f () - sideEffect () - a, f (), f () - a + b + c - -let z () = - let a, b, c = - let u, v = 3, 4 - sideEffect () - f (), f () + u, f () + v - a + b + c - """ - |> compile - |> shouldSucceed - |> verifyIL [ - -(* -public static Tuple v() -{ - string text = "".ToString(); - DateTime now = DateTime.Now; - text = "3".ToString(); - int item = TupleElimination.f(); - now = DateTime.Now; - return new Tuple(2L, item); -} -*) - """ -.method public static class [runtime]System.Tuple`2 - v() cil managed -{ - - .maxstack 4 - .locals init (string V_0, - valuetype [runtime]System.DateTime V_1, - int32 V_2) - IL_0000: ldstr "" - IL_0005: callvirt instance string [runtime]System.Object::ToString() - IL_000a: stloc.0 - IL_000b: call valuetype [runtime]System.DateTime [runtime]System.DateTime::get_Now() - IL_0010: stloc.1 - IL_0011: ldstr "3" - IL_0016: callvirt instance string [runtime]System.Object::ToString() - IL_001b: stloc.0 - IL_001c: call int32 TupleElimination::f() - IL_0021: stloc.2 - IL_0022: call valuetype [runtime]System.DateTime [runtime]System.DateTime::get_Now() - IL_0027: stloc.1 - IL_0028: ldc.i4.2 - IL_0029: conv.i8 - IL_002a: ldloc.2 - IL_002b: newobj instance void class [runtime]System.Tuple`2::.ctor(!0, - !1) - IL_0030: ret -} -""" - -(* -public static int w() -{ - string text = "".ToString(); - DateTime now = DateTime.Now; - text = "3".ToString(); - int num = TupleElimination.f(); - Tuple x = new Tuple(2, num); - now = DateTime.Now; - TupleElimination.Test.test(x); - return 2 + num; -} -*) - """ -.method public static int32 w() cil managed -{ - - .maxstack 4 - .locals init (string V_0, - valuetype [runtime]System.DateTime V_1, - int32 V_2, - class [runtime]System.Tuple`2 V_3) - IL_0000: ldstr "" - IL_0005: callvirt instance string [runtime]System.Object::ToString() - IL_000a: stloc.0 - IL_000b: call valuetype [runtime]System.DateTime [runtime]System.DateTime::get_Now() - IL_0010: stloc.1 - IL_0011: ldstr "3" - IL_0016: callvirt instance string [runtime]System.Object::ToString() - IL_001b: stloc.0 - IL_001c: call int32 TupleElimination::f() - IL_0021: stloc.2 - IL_0022: ldc.i4.2 - IL_0023: ldloc.2 - IL_0024: newobj instance void class [runtime]System.Tuple`2::.ctor(!0, - !1) - IL_0029: stloc.3 - IL_002a: call valuetype [runtime]System.DateTime [runtime]System.DateTime::get_Now() - IL_002f: stloc.1 - IL_0030: ldloc.3 - IL_0031: call class [runtime]System.Tuple`2 TupleElimination/Test::test(class [runtime]System.Tuple`2) - IL_0036: pop - IL_0037: ldc.i4.2 - IL_0038: ldloc.2 - IL_0039: add - IL_003a: ret -} -""" - -(* -public static int x() -{ - string text = "".ToString(); - DateTime now = DateTime.Now; - text = "3".ToString(); - int num = TupleElimination.f(); - now = DateTime.Now; - return 2 + num; -} -*) - """ -.method public static int32 x() cil managed -{ - - .maxstack 4 - .locals init (string V_0, - valuetype [runtime]System.DateTime V_1, - int32 V_2) - IL_0000: ldstr "" - IL_0005: callvirt instance string [runtime]System.Object::ToString() - IL_000a: stloc.0 - IL_000b: call valuetype [runtime]System.DateTime [runtime]System.DateTime::get_Now() - IL_0010: stloc.1 - IL_0011: ldstr "3" - IL_0016: callvirt instance string [runtime]System.Object::ToString() - IL_001b: stloc.0 - IL_001c: call int32 TupleElimination::f() - IL_0021: stloc.2 - IL_0022: call valuetype [runtime]System.DateTime [runtime]System.DateTime::get_Now() - IL_0027: stloc.1 - IL_0028: ldc.i4.2 - IL_0029: ldloc.2 - IL_002a: add - IL_002b: ret -} -""" - -(* -public static int y() -{ - int num = TupleElimination.f(); - TupleElimination.sideEffect(); - return num + TupleElimination.f() + TupleElimination.f(); -} -*) - """ -.method public static int32 y() cil managed -{ - - .maxstack 4 - .locals init (int32 V_0) - IL_0000: call int32 TupleElimination::f() - IL_0005: stloc.0 - IL_0006: call void TupleElimination::sideEffect() - IL_000b: ldloc.0 - IL_000c: call int32 TupleElimination::f() - IL_0011: add - IL_0012: call int32 TupleElimination::f() - IL_0017: add - IL_0018: ret -} -""" - -(* -public static int z() -{ - TupleElimination.sideEffect(); - return TupleElimination.f() + (TupleElimination.f() + 3) + (TupleElimination.f() + 4); -} -*) - """ -.method public static int32 z() cil managed -{ - - .maxstack 8 - IL_0000: call void TupleElimination::sideEffect() - IL_0005: call int32 TupleElimination::f() - IL_000a: call int32 TupleElimination::f() - IL_000f: ldc.i4.3 - IL_0010: add - IL_0011: add - IL_0012: call int32 TupleElimination::f() - IL_0017: ldc.i4.4 - IL_0018: add - IL_0019: add - IL_001a: ret -} -""" ] - - [] - let ``First class use of tuple prevents elimination``() = - FSharp """ -module TupleElimination -open System.Runtime.CompilerServices - -[] -let f () = 3 - -[] -let cond () = true - -type Test = - [] - static member test(x: int32 * int32) = x - -let y () = - let a, b = - if cond () then - 1, 2 - else - Test.test(3, 4) - a + b - -let z () = - let a, b = - "".ToString () |> ignore - System.DateTime.Now |> ignore - "3".ToString () |> ignore - Test.test(2, f ()) - System.DateTime.Now |> ignore - a + b - """ - |> compile - |> shouldSucceed - |> verifyIL [ - -(* -public static int y() -{ - Tuple tuple = (!TupleElimination.cond()) ? TupleElimination.Test.test(new Tuple(3, 4)) : new Tuple(1, 2); - return tuple.Item1 + tuple.Item2; -} -*) - """ -.method public static int32 y() cil managed -{ - - .maxstack 4 - .locals init (class [runtime]System.Tuple`2 V_0) - IL_0000: call bool TupleElimination::cond() - IL_0005: brfalse.s IL_0010 - - IL_0007: ldc.i4.1 - IL_0008: ldc.i4.2 - IL_0009: newobj instance void class [runtime]System.Tuple`2::.ctor(!0, - !1) - IL_000e: br.s IL_001c - - IL_0010: ldc.i4.3 - IL_0011: ldc.i4.4 - IL_0012: newobj instance void class [runtime]System.Tuple`2::.ctor(!0, - !1) - IL_0017: call class [runtime]System.Tuple`2 TupleElimination/Test::test(class [runtime]System.Tuple`2) - IL_001c: stloc.0 - IL_001d: ldloc.0 - IL_001e: call instance !0 class [runtime]System.Tuple`2::get_Item1() - IL_0023: ldloc.0 - IL_0024: call instance !1 class [runtime]System.Tuple`2::get_Item2() - IL_0029: add - IL_002a: ret -} -""" - -(* -public static int z() -{ - string text = "".ToString(); - DateTime now = DateTime.Now; - text = "3".ToString(); - Tuple tuple = TupleElimination.Test.test(new Tuple(2, TupleElimination.f())); - int item = tuple.Item2; - int item2 = tuple.Item1; - now = DateTime.Now; - return item2 + item; -} -*) - """ -.method public static int32 z() cil managed -{ - - .maxstack 4 - .locals init (class [runtime]System.Tuple`2 V_0, - string V_1, - valuetype [runtime]System.DateTime V_2, - int32 V_3, - int32 V_4) - IL_0000: ldstr "" - IL_0005: callvirt instance string [runtime]System.Object::ToString() - IL_000a: stloc.1 - IL_000b: call valuetype [runtime]System.DateTime [runtime]System.DateTime::get_Now() - IL_0010: stloc.2 - IL_0011: ldstr "3" - IL_0016: callvirt instance string [runtime]System.Object::ToString() - IL_001b: stloc.1 - IL_001c: ldc.i4.2 - IL_001d: call int32 TupleElimination::f() - IL_0022: newobj instance void class [runtime]System.Tuple`2::.ctor(!0, - !1) - IL_0027: call class [runtime]System.Tuple`2 TupleElimination/Test::test(class [runtime]System.Tuple`2) - IL_002c: stloc.0 - IL_002d: ldloc.0 - IL_002e: call instance !1 class [runtime]System.Tuple`2::get_Item2() - IL_0033: stloc.3 - IL_0034: ldloc.0 - IL_0035: call instance !0 class [runtime]System.Tuple`2::get_Item1() - IL_003a: stloc.s V_4 - IL_003c: call valuetype [runtime]System.DateTime [runtime]System.DateTime::get_Now() - IL_0041: stloc.2 - IL_0042: ldloc.s V_4 - IL_0044: ldloc.3 - IL_0045: add - IL_0046: ret -}""" ] - - [] - let ``Branching let binding rhs does not prevent tuple elimination``() = - FSharp """ -module TupleElimination -open System.Runtime.CompilerServices - -[] -let f () = 3 - -[] -let sideEffect () = () - -[] -let cond () = true - -type Test = - [] - static member test(x: int32 * int32) = x - -let x () = - let a, b = - sideEffect () - if cond () then - let v = "yep" - let v2 = if cond () then 1 else 3 - v, v2 - else - "", f () - a, b - -let rec y () = - let a, b, c = - if cond () then - "".ToString () |> ignore - 1, f (), 3 - else - if cond () then - 2, 2, 3 - else - match 1 / 0 with - | 1 -> - if 2 / 3 = 1 then - 5, 6, 7 - else - "".ToString () |> ignore - 6, 5, 4 - | 2 -> 6, 6, 6 - | 3 -> f (), 7, f () - | _ -> 8, y (), y () - - a + b + (2 * c) - -let z () = - let a, b = - if cond () then - 1, 3 - else - 3, 4 - a + b - """ - |> compile - |> shouldSucceed - |> verifyIL [ - -(* -public static Tuple x() -{ - TupleElimination.sideEffect(); - string item; - int item2; - if (TupleElimination.cond()) - { - int num = (!TupleElimination.cond()) ? 3 : 1; - item = "yep"; - item2 = num; - } - else - { - item = ""; - item2 = TupleElimination.f(); - } - return new Tuple(item, item2); -} -*) - """ -.method public static class [runtime]System.Tuple`2 - x() cil managed -{ - - .maxstack 4 - .locals init (string V_0, - int32 V_1, - int32 V_2) - IL_0000: call void TupleElimination::sideEffect() - IL_0005: call bool TupleElimination::cond() - IL_000a: brfalse.s IL_0022 - - IL_000c: call bool TupleElimination::cond() - IL_0011: brfalse.s IL_0016 - - IL_0013: ldc.i4.1 - IL_0014: br.s IL_0017 - - IL_0016: ldc.i4.3 - IL_0017: stloc.2 - IL_0018: ldstr "yep" - IL_001d: stloc.0 - IL_001e: ldloc.2 - IL_001f: stloc.1 - IL_0020: br.s IL_002e - - IL_0022: ldstr "" - IL_0027: stloc.0 - IL_0028: call int32 TupleElimination::f() - IL_002d: stloc.1 - IL_002e: ldloc.0 - IL_002f: ldloc.1 - IL_0030: newobj instance void class [runtime]System.Tuple`2::.ctor(!0, - !1) - IL_0035: ret -} -""" - -(* -public static int y() -{ - int num; - int num2; - int num3; - if (TupleElimination.cond()) - { - string text = "".ToString(); - num = 1; - num2 = TupleElimination.f(); - num3 = 3; - } - else if (TupleElimination.cond()) - { - num = 2; - num2 = 2; - num3 = 3; - } - else - { - switch (1 / 0) - { - case 1: - if (2 / 3 == 1) - { - num = 5; - num2 = 6; - num3 = 7; - } - else - { - string text = "".ToString(); - num = 6; - num2 = 5; - num3 = 4; - } - break; - case 2: - num = 6; - num2 = 6; - num3 = 6; - break; - case 3: - num = TupleElimination.f(); - num2 = 7; - num3 = TupleElimination.f(); - break; - default: - num = 8; - num2 = TupleElimination.y(); - num3 = TupleElimination.y(); - break; - } - } - return num + num2 + 2 * num3; -} -*) - """ -.method public static int32 y() cil managed -{ - - .maxstack 5 - .locals init (int32 V_0, - int32 V_1, - int32 V_2, - string V_3) - IL_0000: ldc.i4.0 - IL_0001: stloc.0 - IL_0002: ldc.i4.0 - IL_0003: stloc.1 - IL_0004: ldc.i4.0 - IL_0005: stloc.2 - IL_0006: call bool TupleElimination::cond() - IL_000b: brfalse.s IL_0027 - - IL_000d: ldstr "" - IL_0012: callvirt instance string [runtime]System.Object::ToString() - IL_0017: stloc.3 - IL_0018: ldc.i4.1 - IL_0019: stloc.0 - IL_001a: call int32 TupleElimination::f() - IL_001f: stloc.1 - IL_0020: ldc.i4.3 - IL_0021: stloc.2 - IL_0022: br IL_0095 - - IL_0027: call bool TupleElimination::cond() - IL_002c: brfalse.s IL_0036 - - IL_002e: ldc.i4.2 - IL_002f: stloc.0 - IL_0030: ldc.i4.2 - IL_0031: stloc.1 - IL_0032: ldc.i4.3 - IL_0033: stloc.2 - IL_0034: br.s IL_0095 - - IL_0036: ldc.i4.1 - IL_0037: ldc.i4.0 - IL_0038: div - IL_0039: ldc.i4.1 - IL_003a: sub - IL_003b: switch ( - IL_004e, - IL_006f, - IL_0077) - IL_004c: br.s IL_0087 - - IL_004e: ldc.i4.2 - IL_004f: ldc.i4.3 - IL_0050: div - IL_0051: ldc.i4.1 - IL_0052: bne.un.s IL_005c - - IL_0054: ldc.i4.5 - IL_0055: stloc.0 - IL_0056: ldc.i4.6 - IL_0057: stloc.1 - IL_0058: ldc.i4.7 - IL_0059: stloc.2 - IL_005a: br.s IL_0095 - - IL_005c: ldstr "" - IL_0061: callvirt instance string [runtime]System.Object::ToString() - IL_0066: stloc.3 - IL_0067: ldc.i4.6 - IL_0068: stloc.0 - IL_0069: ldc.i4.5 - IL_006a: stloc.1 - IL_006b: ldc.i4.4 - IL_006c: stloc.2 - IL_006d: br.s IL_0095 - - IL_006f: ldc.i4.6 - IL_0070: stloc.0 - IL_0071: ldc.i4.6 - IL_0072: stloc.1 - IL_0073: ldc.i4.6 - IL_0074: stloc.2 - IL_0075: br.s IL_0095 - - IL_0077: call int32 TupleElimination::f() - IL_007c: stloc.0 - IL_007d: ldc.i4.7 - IL_007e: stloc.1 - IL_007f: call int32 TupleElimination::f() - IL_0084: stloc.2 - IL_0085: br.s IL_0095 - - IL_0087: ldc.i4.8 - IL_0088: stloc.0 - IL_0089: call int32 TupleElimination::y() - IL_008e: stloc.1 - IL_008f: call int32 TupleElimination::y() - IL_0094: stloc.2 - IL_0095: ldloc.0 - IL_0096: ldloc.1 - IL_0097: add - IL_0098: ldc.i4.2 - IL_0099: ldloc.2 - IL_009a: mul - IL_009b: add - IL_009c: ret -} -""" - -(* -public static int z() -{ - int num; - int num2; - if (TupleElimination.cond()) - { - num = 1; - num2 = 3; - } - else - { - num = 3; - num2 = 4; - } - return num + num2; -} -*) - """ -.method public static int32 z() cil managed -{ - - .maxstack 4 - .locals init (int32 V_0, - int32 V_1) - IL_0000: call bool TupleElimination::cond() - IL_0005: brfalse.s IL_000d - - IL_0007: ldc.i4.1 - IL_0008: stloc.0 - IL_0009: ldc.i4.3 - IL_000a: stloc.1 - IL_000b: br.s IL_0011 - - IL_000d: ldc.i4.3 - IL_000e: stloc.0 - IL_000f: ldc.i4.4 - IL_0010: stloc.1 - IL_0011: ldloc.0 - IL_0012: ldloc.1 - IL_0013: add - IL_0014: ret -}""" ] - - - - - [] - let ``Branching let binding of tuple with capture doesn't promote``() = - FSharp """ -module TupleElimination -open System.Runtime.CompilerServices - -let testFunction(a,b) = - let x,y = printfn "hello"; b*a,a*b - (fun () -> x + y) - """ - |> compile - |> shouldSucceed - |> verifyIL [ - // Checks the captured 'x' and 'y' are not promoted onto the heap - """ -.method public static class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 - testFunction(int32 a, - int32 b) cil managed -{ - - .maxstack 4 - .locals init (class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4 V_0, - int32 V_1, - int32 V_2) - IL_0000: ldstr "hello" - IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_000a: stloc.0 - IL_000b: call class [netstandard]System.IO.TextWriter [netstandard]System.Console::get_Out() - IL_0010: ldloc.0 - IL_0011: call !!0 [FSharp.Core]Microsoft.FSharp.Core.PrintfModule::PrintFormatLineToTextWriter(class [runtime]System.IO.TextWriter, - class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0016: pop - IL_0017: ldarg.1 - IL_0018: ldarg.0 - IL_0019: mul - IL_001a: stloc.1 - IL_001b: ldarg.0 - IL_001c: ldarg.1 - IL_001d: mul - IL_001e: stloc.2 - IL_001f: ldloc.1 - IL_0020: ldloc.2 - IL_0021: newobj instance void TupleElimination/testFunction@7::.ctor(int32, - int32) - IL_0026: ret -} - -""" ] - - - - - [] - let ``Branching let binding of tuple gives good names in closure``() = - FSharp """ -module TupleElimination -open System.Runtime.CompilerServices - -let testFunction(a,b) = - let x,y = printfn "hello"; b*a,a*b - (fun () -> x + y) - """ - |> compile - |> shouldSucceed - |> verifyIL [ - - // Checks the names of captured 'x' and 'y'. - """ - - .method public strict virtual instance int32 - Invoke(class [FSharp.Core]Microsoft.FSharp.Core.Unit unitVar0) cil managed - { - - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldfld int32 TupleElimination/testFunction@7::x - IL_0006: ldarg.0 - IL_0007: ldfld int32 TupleElimination/testFunction@7::y - IL_000c: add - IL_000d: ret - } -""" ] - - - - diff --git a/tests/FSharp.Compiler.ComponentTests/ErrorMessages/AccessOfTypeAbbreviationTests.fs b/tests/FSharp.Compiler.ComponentTests/ErrorMessages/AccessOfTypeAbbreviationTests.fs index 623244da2f5..df9acf7efca 100644 --- a/tests/FSharp.Compiler.ComponentTests/ErrorMessages/AccessOfTypeAbbreviationTests.fs +++ b/tests/FSharp.Compiler.ComponentTests/ErrorMessages/AccessOfTypeAbbreviationTests.fs @@ -4,7 +4,7 @@ namespace FSharp.Compiler.ComponentTests.ErrorMessages open Xunit open FSharp.Test.Utilities.Compiler -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices module ``Access Of Type Abbreviation`` = diff --git a/tests/FSharp.Compiler.ComponentTests/ErrorMessages/InvalidLiteralTests.fs b/tests/FSharp.Compiler.ComponentTests/ErrorMessages/InvalidLiteralTests.fs deleted file mode 100644 index fb44f2b717b..00000000000 --- a/tests/FSharp.Compiler.ComponentTests/ErrorMessages/InvalidLiteralTests.fs +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.ComponentTests.ErrorMessages - -open Xunit -open FSharp.Test.Utilities.Compiler - -module ``Invalid literals`` = - - [] - let ``Using Active Pattern``() = - FSharp """ -let (|A|) x = x + 1 -let [] (A x) = 1 - """ - |> typecheck - |> shouldFail - |> withSingleDiagnostic (Error 3391, Line 3, Col 5, Line 3, Col 22, "A [] declaration cannot use an active pattern for its identifier") diff --git a/tests/FSharp.Compiler.ComponentTests/ErrorMessages/InvalidNumericLiteralTests.fs b/tests/FSharp.Compiler.ComponentTests/ErrorMessages/InvalidNumericLiteralTests.fs index caf05fb29e6..e88cc641b3c 100644 --- a/tests/FSharp.Compiler.ComponentTests/ErrorMessages/InvalidNumericLiteralTests.fs +++ b/tests/FSharp.Compiler.ComponentTests/ErrorMessages/InvalidNumericLiteralTests.fs @@ -5,8 +5,8 @@ namespace FSharp.Compiler.ComponentTests.ErrorMessages open Xunit open FSharp.Test.Utilities open FSharp.Test.Utilities.Compiler -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.AbstractIL +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.AbstractIL.Internal module ``Numeric Literals`` = @@ -59,6 +59,8 @@ module ``Numeric Literals`` = [] let ``1N is invalid numeric literal in FSI``() = + if Utils.runningOnMono then () + else CompilerAssert.RunScriptWithOptions [| "--langversion:5.0"; "--test:ErrorRanges" |] """ let x = 1N diff --git a/tests/FSharp.Compiler.ComponentTests/ErrorMessages/TypeEqualsMissingTests.fs b/tests/FSharp.Compiler.ComponentTests/ErrorMessages/TypeEqualsMissingTests.fs index 63a16ff2a71..70d7beebc92 100644 --- a/tests/FSharp.Compiler.ComponentTests/ErrorMessages/TypeEqualsMissingTests.fs +++ b/tests/FSharp.Compiler.ComponentTests/ErrorMessages/TypeEqualsMissingTests.fs @@ -4,7 +4,7 @@ namespace FSharp.Compiler.ComponentTests.ErrorMessages open Xunit open FSharp.Test.Utilities -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices module ``Type definition missing equals`` = @@ -15,7 +15,7 @@ module ``Type definition missing equals`` = """ type X | A | B """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 3360 (2, 8, 2, 9) "Unexpected token in type definition. Expected '=' after the type 'X'." diff --git a/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj b/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj index b4b0d58df6a..fb960abd3ad 100644 --- a/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj +++ b/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj @@ -2,8 +2,8 @@ - net472;net5.0 - net5.0 + net472;netcoreapp3.1 + netcoreapp3.1 Library true false @@ -21,10 +21,7 @@ - - - @@ -32,8 +29,7 @@ - - + @@ -46,12 +42,10 @@ - - @@ -66,7 +60,6 @@ - @@ -97,7 +90,7 @@ - + diff --git a/tests/FSharp.Compiler.ComponentTests/Language/AttributeCheckingTests.fs b/tests/FSharp.Compiler.ComponentTests/Language/AttributeCheckingTests.fs deleted file mode 100644 index 20b75ea9a36..00000000000 --- a/tests/FSharp.Compiler.ComponentTests/Language/AttributeCheckingTests.fs +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.ComponentTests.AttributeChecking - -open Xunit -open FSharp.Test.Utilities.Compiler - -module AttributeCheckingTests = - - [] - let ``attributes check inherited AllowMultiple`` () = - Fsx """ -open System - -[] -type HttpMethodAttribute() = inherit Attribute() -type HttpGetAttribute() = inherit HttpMethodAttribute() - -[] // this shouldn't error like -[] // this doesn't -type C() = - member _.M() = () - """ - |> ignoreWarnings - |> compile - |> shouldSucceed - - [] - let ``AllowMultiple=false allows adding attribute to both property and getter/setter`` () = - Fsx """ -open System - -[] -type FooAttribute() = inherit Attribute() - -type C() = - [] - member _.Foo - with [] get () = "bar" - and [] set (v: string) = () - """ - |> ignoreWarnings - |> compile - |> shouldSucceed \ No newline at end of file diff --git a/tests/FSharp.Compiler.ComponentTests/Language/CastingTests.fs b/tests/FSharp.Compiler.ComponentTests/Language/CastingTests.fs deleted file mode 100644 index eea1385a6ae..00000000000 --- a/tests/FSharp.Compiler.ComponentTests/Language/CastingTests.fs +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.ComponentTests - -open Xunit -open FSharp.Test.Utilities.Compiler - -module CastingTests = - - [] - let ``Compile: ValueTuple.Create(1,1) :> IComparable>`` () = - FSharp """ -module One -open System - -let y = ValueTuple.Create(1,1) :> IComparable> -printfn "%A" y - """ - |> ignoreWarnings - |> compile - |> shouldSucceed - - [] - let ``Compile: struct (1,2) :> IComparable>`` () = - FSharp """ -module One -open System - -let y = struct (1,2) :> IComparable> -printfn "%A" y - """ - |> ignoreWarnings - |> compile - |> shouldSucceed - - [] - let ``Compile: let x = struct (1,3); x :> IComparable>`` () = - FSharp """ -module One -open System - -let y = struct (1,3) :> IComparable> -printfn "%A" y - """ - |> ignoreWarnings - |> compile - |> shouldSucceed - - [] - let ``Script: ValueTuple.Create(0,0) :> IComparable>`` () = - Fsx """ -module One -open System - -let y = ValueTuple.Create(1,1) :> IComparable> -printfn "%A" y - """ - |> ignoreWarnings - |> compile - |> shouldSucceed - - [] - let ``Script: struct (1,2) :> IComparable>`` () = - Fsx """ -module One -open System - -let y = struct (0,0) :> IComparable> -printfn "%A" y - """ - |> ignoreWarnings - |> compile - |> shouldSucceed - - [] - let ``Script: let x = struct (1,3); x :> IComparable>`` () = - Fsx """ -module One -open System - -let x = struct (1,3) -let y = x :> IComparable> -printfn "%A" y - """ - |> ignoreWarnings - |> compile - |> shouldSucceed - - [] - let ``Compile: (box (System.ValueTuple.Create(1,2)) :?> System.IComparable>)`` () = - FSharp """ -module One -open System - -let y = (box (System.ValueTuple.Create(1,2)) :?> System.IComparable>) -printfn "%A" y - """ - |> ignoreWarnings - |> compile - |> shouldSucceed - - [] - let ``Script: (box (System.ValueTuple.Create(1,2)) :?> System.IComparable>)`` () = - FSharp """ -module One -open System - -let y = (box (System.ValueTuple.Create(1,2)) :?> System.IComparable>) -printfn "%A" y - """ - |> ignoreWarnings - |> compile - |> shouldSucceed diff --git a/tests/FSharp.Compiler.ComponentTests/Language/ComputationExpressionTests.fs b/tests/FSharp.Compiler.ComponentTests/Language/ComputationExpressionTests.fs index 95f036d4ca2..0b567ee9a9c 100644 --- a/tests/FSharp.Compiler.ComponentTests/Language/ComputationExpressionTests.fs +++ b/tests/FSharp.Compiler.ComponentTests/Language/ComputationExpressionTests.fs @@ -11,9 +11,9 @@ module ComputationExpressionTests = FSharp """ module ComputationExpressionTests type ListBuilder () = - member _.Combine (a: List<'T>, b) = a @ b - member _.Yield x = List.singleton x - member _.Delay expr = expr () : List<'T> + member __.Combine (a: List<'T>, b) = a @ b + member __.Yield x = List.singleton x + member __.Delay expr = expr () : List<'T> let lb = ListBuilder () @@ -28,9 +28,9 @@ let x = lb {1; 2;} FSharp """ module ComputationExpressionTests type ListBuilder () = - member _.Combine (a: List<'T>, b) = a @ b - member _.Yield x = List.singleton x - member _.Delay expr = expr () : List<'T> + member __.Combine (a: List<'T>, b) = a @ b + member __.Yield x = List.singleton x + member __.Delay expr = expr () : List<'T> let lb = ListBuilder () @@ -46,10 +46,10 @@ let x = lb {1; 2;()} FSharp """ module ComputationExpressionTests type ListBuilder () = - member _.Zero () = [] - member _.Combine (a: List<'T>, b) = a @ b - member _.Yield x = List.singleton x - member _.Delay expr = expr () : List<'T> + member __.Zero () = [] + member __.Combine (a: List<'T>, b) = a @ b + member __.Yield x = List.singleton x + member __.Delay expr = expr () : List<'T> let lb = ListBuilder () @@ -64,9 +64,9 @@ let x = lb {1; 2;()} FSharp """ module ComputationExpressionTests type ListBuilder () = - member _.Combine (a: List<'T>, b) = a @ b - member _.Yield x = List.singleton x - member _.Delay expr = expr () : List<'T> + member __.Combine (a: List<'T>, b) = a @ b + member __.Yield x = List.singleton x + member __.Delay expr = expr () : List<'T> let lb = ListBuilder () @@ -81,9 +81,9 @@ let x = lb {1; 2; if true then 3 else 4;} FSharp """ module ComputationExpressionTests type ListBuilder () = - member _.Combine (a: List<'T>, b) = a @ b - member _.Yield x = List.singleton x - member _.Delay expr = expr () : List<'T> + member __.Combine (a: List<'T>, b) = a @ b + member __.Yield x = List.singleton x + member __.Delay expr = expr () : List<'T> let lb = ListBuilder () diff --git a/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs b/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs index c1caf715618..a2336eaa053 100644 --- a/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs +++ b/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs @@ -13,14 +13,14 @@ module XmlCommentChecking = /// let x = 1 -/// +/// /// Yo /// Yo module M = /// < let y = 1 - """ + """ |> withXmlCommentChecking |> ignoreWarnings |> compile @@ -39,7 +39,7 @@ module M = /// Return /// the parameter let f a = a - """ + """ |> withXmlCommentChecking |> ignoreWarnings |> compile @@ -55,7 +55,7 @@ module M = /// Return /// the parameter let f a = a - """ + """ |> withXmlCommentChecking |> ignoreWarnings |> compile @@ -74,7 +74,7 @@ module M = /// the parameter /// the parameter let f a = a - """ + """ |> withXmlCommentChecking |> ignoreWarnings |> compile @@ -90,7 +90,7 @@ module M = /// Return /// the parameter let f a = a - """ + """ |> withXmlCommentChecking |> ignoreWarnings |> compile @@ -118,7 +118,7 @@ module M = /// The instance method /// the other parameter member x.OtherM((a,b): (string * string), p2: string) = ((a,b), p2) - """ + """ |> withXmlCommentChecking |> ignoreWarnings |> compile @@ -137,7 +137,7 @@ module M = let _unused = (x1, x2) member x.M(p1: string, p2: string) = (p1, p2) - """ + """ |> withXmlCommentChecking |> ignoreWarnings |> compile @@ -156,24 +156,7 @@ module M = let _unused = (x1, x2) member x.M(p1: string, p2: string) = (p1, p2) - """ - |> withXmlCommentChecking - |> ignoreWarnings - |> compile - |> shouldSucceed - |> withDiagnostics [ ] - - [] - let ``valid parameter names are reported for documented implicit constructor`` () = - Fsx""" - /// The type with an implicit constructor with visibility - /// the first parameter - /// the second parameter - type C (x1: string, x2: string) = - let _unused = (x1, x2) - - member x.M(p1: string, p2: string) = (p1, p2) - """ + """ |> withXmlCommentChecking |> ignoreWarnings |> compile @@ -187,23 +170,9 @@ module M = /// The sender /// The args type C = delegate of sender: obj * args: int -> C - """ + """ |> withXmlCommentChecking |> ignoreWarnings |> compile |> shouldSucceed |> withDiagnostics [ ] - - [] - let ``function parameters use names from as patterns`` () = - Fsx""" - type Thing = Inner of s: string - /// A function with an extracted inner value - /// The innver value to unwrap - let doer ((Inner s) as inner) = ignore s; ignore inner - """ - |> withXmlCommentChecking - |> ignoreWarnings - |> compile - |> shouldSucceed - |> withDiagnostics [ ] \ No newline at end of file diff --git a/tests/FSharp.Compiler.ComponentTests/resources/tests/Conformance/DeclarationElements/LetBindings/UseBindingDiscard01.fs b/tests/FSharp.Compiler.ComponentTests/resources/tests/Conformance/DeclarationElements/LetBindings/UseBindingDiscard01.fs deleted file mode 100644 index 28a6d38806f..00000000000 --- a/tests/FSharp.Compiler.ComponentTests/resources/tests/Conformance/DeclarationElements/LetBindings/UseBindingDiscard01.fs +++ /dev/null @@ -1,6 +0,0 @@ -// #DeclarationElements #LetBindings -// - -let answer = - use _ = new System.IO.MemoryStream() - 42 diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/CompletionTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/CompletionTests.fs index 8355739c4a7..89c4cc20116 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/CompletionTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/CompletionTests.fs @@ -4,7 +4,7 @@ namespace FSharp.Compiler.Scripting.UnitTests open System open System.Threading.Tasks -open FSharp.Test.ScriptHelpers +open FSharp.Compiler.Scripting open Xunit type CompletionTests() = diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/ConsoleHelpers.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/ConsoleHelpers.fs new file mode 100644 index 00000000000..6df77c83b38 --- /dev/null +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/ConsoleHelpers.fs @@ -0,0 +1,64 @@ +namespace FSharp.Compiler.Scripting.UnitTests + +open System +open System.Collections.Generic +open System.IO +open System.Text + +type internal CapturedTextReader() = + inherit TextReader() + let queue = Queue() + member _.ProvideInput(text: string) = + for c in text.ToCharArray() do + queue.Enqueue(c) + override _.Peek() = + if queue.Count > 0 then queue.Peek() |> int else -1 + override _.Read() = + if queue.Count > 0 then queue.Dequeue() |> int else -1 + +type internal RedirectConsoleInput() = + let oldStdIn = Console.In + let newStdIn = new CapturedTextReader() + do Console.SetIn(newStdIn) + member _.ProvideInput(text: string) = + newStdIn.ProvideInput(text) + interface IDisposable with + member __.Dispose() = + Console.SetIn(oldStdIn) + newStdIn.Dispose() + +type internal EventedTextWriter() = + inherit TextWriter() + let sb = StringBuilder() + let lineWritten = Event() + member _.LineWritten = lineWritten.Publish + override _.Encoding = Encoding.UTF8 + override _.Write(c: char) = + if c = '\n' then + let line = + let v = sb.ToString() + if v.EndsWith("\r") then v.Substring(0, v.Length - 1) + else v + sb.Clear() |> ignore + lineWritten.Trigger(line) + else sb.Append(c) |> ignore + +type internal RedirectConsoleOutput() = + let outputProduced = Event() + let errorProduced = Event() + let oldStdOut = Console.Out + let oldStdErr = Console.Error + let newStdOut = new EventedTextWriter() + let newStdErr = new EventedTextWriter() + do newStdOut.LineWritten.Add outputProduced.Trigger + do newStdErr.LineWritten.Add errorProduced.Trigger + do Console.SetOut(newStdOut) + do Console.SetError(newStdErr) + member _.OutputProduced = outputProduced.Publish + member _.ErrorProduced = errorProduced.Publish + interface IDisposable with + member __.Dispose() = + Console.SetOut(oldStdOut) + Console.SetError(oldStdErr) + newStdOut.Dispose() + newStdErr.Dispose() diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerInteractiveTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerInteractiveTests.fs index ade8a343b41..fcfa3b3b0a3 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerInteractiveTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerInteractiveTests.fs @@ -9,10 +9,11 @@ open System.Runtime.InteropServices open System.Threading open FSharp.Compiler.Interactive.Shell -open FSharp.Compiler.DependencyManager -open FSharp.Compiler.Diagnostics -open FSharp.Test.ScriptHelpers +open FSharp.Compiler.Scripting +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Scripting.UnitTests open FSharp.DependencyManager.Nuget +open Microsoft.DotNet.DependencyManager open Internal.Utilities @@ -26,20 +27,20 @@ type scriptHost (?langVersion: LangVersion) = inherit FSharpScript(langVersion=d type DependencyManagerInteractiveTests() = - let getValue ((value: Result), (errors: FSharpDiagnostic[])) = + let getValue ((value: Result), (errors: FSharpErrorInfo[])) = if errors.Length > 0 then failwith <| sprintf "Evaluation returned %d errors:\r\n\t%s" errors.Length (String.Join("\r\n\t", errors)) match value with | Ok(value) -> value | Error ex -> raise ex - let getErrors ((_value: Result), (errors: FSharpDiagnostic[])) = + let getErrors ((_value: Result), (errors: FSharpErrorInfo[])) = errors let ignoreValue = getValue >> ignore [] - member _.``SmokeTest - #r nuget``() = + member __.``SmokeTest - #r nuget``() = let text = """ #r @"nuget:Newtonsoft.Json, Version=9.0.1" 0""" @@ -50,7 +51,7 @@ type DependencyManagerInteractiveTests() = Assert.Equal(0, value.ReflectionValue :?> int) [] - member _.``SmokeTest - #r nuget package not found``() = + member __.``SmokeTest - #r nuget package not found``() = let text = """ #r @"nuget:System.Collections.Immutable.DoesNotExist, version=1.5.0" 0""" @@ -61,13 +62,13 @@ type DependencyManagerInteractiveTests() = (* [] [] - member _.``syntax produces error messages in FSharp 4.7``(code:string, message: string) = + member __.``syntax produces error messages in FSharp 4.7``(code:string, message: string) = use script = new scriptHost() let errors = script.Eval(code) |> getErrors Assert.Contains(message, errors |> Array.map(fun e -> e.Message)) *) [] - member _.``Use Dependency Manager to resolve dependency FSharp.Data``() = + member __.``Use Dependency Manager to resolve dependency FSharp.Data``() = let nativeProbingRoots () = Seq.empty @@ -82,13 +83,13 @@ type DependencyManagerInteractiveTests() = let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") if RuntimeInformation.IsOSPlatform(OSPlatform.Windows) then - let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, "net472") + let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data"|], reportError, "net472") Assert.Equal(true, result.Success) Assert.Equal(1, result.Resolutions |> Seq.length) Assert.Equal(1, result.SourceFiles |> Seq.length) Assert.Equal(2, result.Roots |> Seq.length) - let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, "net5.0") + let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data"|], reportError, "netcoreapp3.1") Assert.Equal(true, result.Success) Assert.Equal(1, result.Resolutions |> Seq.length) Assert.Equal(1, result.SourceFiles |> Seq.length) @@ -96,7 +97,7 @@ type DependencyManagerInteractiveTests() = () [] - member _.``Dependency Manager Reports package root for nuget package with no build artifacts``() = + member __.``Dependency Manager Reports package root for nuget package with no build artifacts``() = let nativeProbingRoots () = Seq.empty @@ -110,7 +111,7 @@ type DependencyManagerInteractiveTests() = let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") - let result = dp.Resolve(idm, ".fsx", [|"r", "Microsoft.Data.Sqlite, 3.1.8"|], reportError, "net5.0") + let result = dp.Resolve(idm, ".fsx", [|"r", "Microsoft.Data.Sqlite, 3.1.8"|], reportError, "netcoreapp3.1") Assert.Equal(true, result.Success) Assert.True((result.Resolutions |> Seq.length) > 1) Assert.Equal(1, result.SourceFiles |> Seq.length) @@ -119,7 +120,7 @@ type DependencyManagerInteractiveTests() = [] - member _.``Dependency add with nonexistent package should fail``() = + member __.``Dependency add with nonexistent package should fail``() = let nativeProbingRoots () = Seq.empty @@ -140,7 +141,7 @@ type DependencyManagerInteractiveTests() = Assert.Equal(0, result.SourceFiles |> Seq.length) Assert.Equal(0, result.Roots |> Seq.length) - let result = dp.Resolve(idm, ".fsx", [|"r", "System.Collections.Immutable.DoesNotExist"|], reportError, "net5.0") + let result = dp.Resolve(idm, ".fsx", [|"r", "System.Collections.Immutable.DoesNotExist"|], reportError, "netcoreapp3.1") Assert.Equal(false, result.Success) Assert.Equal(0, result.Resolutions |> Seq.length) Assert.Equal(0, result.SourceFiles |> Seq.length) @@ -148,8 +149,8 @@ type DependencyManagerInteractiveTests() = () - [] - member _.``Multiple Instances of DependencyProvider should be isolated``() = + [] + member __.``Multiple Instances of DependencyProvider should be isolated``() = let assemblyProbingPaths () = Seq.empty let nativeProbingRoots () = Seq.empty @@ -164,7 +165,7 @@ type DependencyManagerInteractiveTests() = let idm1 = dp1.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") if RuntimeInformation.IsOSPlatform(OSPlatform.Windows) then - let result1 = dp1.Resolve(idm1, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, "net472") + let result1 = dp1.Resolve(idm1, ".fsx", [|"r", "FSharp.Data"|], reportError, "net472") Assert.Equal(true, result1.Success) Assert.Equal(1, result1.Resolutions |> Seq.length) Assert.True((result1.Resolutions |> Seq.head).Contains("/net45/")) @@ -173,7 +174,7 @@ type DependencyManagerInteractiveTests() = Assert.True((result1.Roots |> Seq.head).EndsWith("/fsharp.data/3.3.3/")) Assert.True((result1.Roots |> Seq.last).EndsWith("/microsoft.netframework.referenceassemblies/1.0.0/")) - let result2 = dp1.Resolve(idm1, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, "net5.0") + let result2 = dp1.Resolve(idm1, ".fsx", [|"r", "FSharp.Data, 3.3.3"|], reportError, "netcoreapp3.1") Assert.Equal(true, result2.Success) Assert.Equal(1, result2.Resolutions |> Seq.length) let expected2 = "/netstandard2.0/" @@ -194,7 +195,7 @@ type DependencyManagerInteractiveTests() = Assert.Equal(1, result3.SourceFiles |> Seq.length) Assert.True((result3.Roots |> Seq.head).EndsWith("/system.json/4.6.0/")) - let result4 = dp2.Resolve(idm2, ".fsx", [|"r", "System.Json, Version=4.6.0"|], reportError, "net5.0") + let result4 = dp2.Resolve(idm2, ".fsx", [|"r", "System.Json, Version=4.6.0"|], reportError, "netcoreapp3.1") Assert.Equal(true, result4.Success) Assert.Equal(1, result4.Resolutions |> Seq.length) let expected4 = "/netstandard2.0/" @@ -205,7 +206,7 @@ type DependencyManagerInteractiveTests() = () [] - member _.``Nuget Reference package with dependencies we should get package roots and dependent references``() = + member __.``Nuget Reference package with dependencies we should get package roots and dependent references``() = let nativeProbingRoots () = Seq.empty @@ -230,7 +231,7 @@ type DependencyManagerInteractiveTests() = // Netstandard gets fewer dependencies than desktop, because desktop framework doesn't contain assemblies like System.Memory // Those assemblies must be delivered by nuget for desktop apps - let result2 = dp1.Resolve(idm1, ".fsx", [|"r", "Microsoft.Extensions.Configuration.Abstractions, 3.1.1"|], reportError, "net5.0") + let result2 = dp1.Resolve(idm1, ".fsx", [|"r", "Microsoft.Extensions.Configuration.Abstractions, 3.1.1"|], reportError, "netcoreapp3.1") Assert.Equal(true, result2.Success) Assert.Equal(2, result2.Resolutions |> Seq.length) let expected = "/netcoreapp3.1/" @@ -243,7 +244,7 @@ type DependencyManagerInteractiveTests() = /// Native dll resolution is not implemented on desktop #if NETCOREAPP [] - member _.``Script using TorchSharp``() = + member __.``Script using TorchSharp``() = let text = """ #r "nuget:RestoreSources=https://donsyme.pkgs.visualstudio.com/TorchSharp/_packaging/packages2/nuget/v3/index.json" #r "nuget:libtorch-cpu,0.3.52118" @@ -262,7 +263,7 @@ TorchSharp.Tensor.LongTensor.From([| 0L .. 100L |]).Device [] - member _.``Use Dependency Manager to restore packages with native dependencies, build and run script that depends on the results``() = + member __.``Use Dependency Manager to restore packages with native dependencies, build and run script that depends on the results``() = let packagemanagerlines = [| "r", "Microsoft.ML,version=1.4.0-preview" "r", "Microsoft.ML.AutoML,version=0.16.0-preview" @@ -287,7 +288,7 @@ TorchSharp.Tensor.LongTensor.From([| 0L .. 100L |]).Device let result = use dp = new DependencyProvider(AssemblyResolutionProbe(assemblyProbingPaths), NativeResolutionProbe(nativeProbingRoots)) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") - dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, "net5.0") + dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, "netcoreapp3.1") Assert.True(result.Success, "resolve failed") @@ -358,7 +359,7 @@ printfn ""%A"" result Assert.Equal(123, value.ReflectionValue :?> int32) [] - member _.``Use NativeResolver to resolve native dlls.``() = + member __.``Use NativeResolver to resolve native dlls.``() = let packagemanagerlines = [| "r", "Microsoft.ML,version=1.4.0-preview" "r", "Microsoft.ML.AutoML,version=0.16.0-preview" @@ -383,7 +384,7 @@ printfn ""%A"" result let result = use dp = new DependencyProvider(NativeResolutionProbe(nativeProbingRoots)) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") - dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, "net5.0") + dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, "netcoreapp3.1") Assert.True(result.Success, "resolve failed") @@ -440,7 +441,7 @@ printfn ""%A"" result Assert.Equal(123, value.ReflectionValue :?> int32) [] - member _.``Use AssemblyResolver to resolve assemblies``() = + member __.``Use AssemblyResolver to resolve assemblies``() = let packagemanagerlines = [| "r", "Microsoft.ML,version=1.4.0-preview" "r", "Microsoft.ML.AutoML,version=0.16.0-preview" @@ -464,7 +465,7 @@ printfn ""%A"" result let result = use dp = new DependencyProvider(NativeResolutionProbe(nativeProbingRoots)) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") - dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, "net5.0") + dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, "netcoreapp3.1") Assert.True(result.Success, "resolve failed") @@ -501,7 +502,7 @@ x |> Seq.iter(fun r -> Assert.Equal(123, value.ReflectionValue :?> int32) [] - member _.``Verify that referencing FSharp.Core fails with FSharp Scripts``() = + member __.``Verify that referencing FSharp.Core fails with FSharp Scripts``() = let packagemanagerlines = [| "r", "FSharp.Core,version=4.7.1" |] let reportError = @@ -521,13 +522,13 @@ x |> Seq.iter(fun r -> let result = use dp = new DependencyProvider(NativeResolutionProbe(nativeProbingRoots)) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") - dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, "net5.0") + dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, "netcoreapp3.1") // Expected: error FS3217: PackageManager can not reference the System Package 'FSharp.Core' Assert.False(result.Success, "resolve succeeded but should have failed") [] - member _.``Verify that referencing FSharp.Core succeeds with CSharp Scripts``() = + member __.``Verify that referencing FSharp.Core succeeds with CSharp Scripts``() = let packagemanagerlines = [| "r", "FSharp.Core,version=4.7.1" |] let reportError = @@ -547,13 +548,13 @@ x |> Seq.iter(fun r -> let result = use dp = new DependencyProvider(NativeResolutionProbe(nativeProbingRoots)) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") - dp.Resolve(idm, ".csx", packagemanagerlines, reportError, "net5.0") + dp.Resolve(idm, ".csx", packagemanagerlines, reportError, "netcoreapp3.1") Assert.True(result.Success, "resolve failed but should have succeeded") [] - member _.``Verify that Dispose on DependencyProvider unhooks ResolvingUnmanagedDll event handler``() = + member __.``Verify that Dispose on DependencyProvider unhooks ResolvingUnmanagedDll event handler``() = let mutable found = false let nativeProbingRoots () = @@ -584,13 +585,13 @@ x |> Seq.iter(fun r -> let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") if RuntimeInformation.IsOSPlatform(OSPlatform.Windows) then - let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, "net472") + let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data"|], reportError, "net472") Assert.Equal(true, result.Success) Assert.Equal(1, result.Resolutions |> Seq.length) Assert.Equal(1, result.SourceFiles |> Seq.length) Assert.Equal(2, result.Roots |> Seq.length) - let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, "net5.0") + let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data"|], reportError, "netcoreapp3.1") Assert.Equal(true, result.Success) Assert.Equal(1, result.Resolutions |> Seq.length) Assert.Equal(1, result.SourceFiles |> Seq.length) @@ -599,7 +600,7 @@ x |> Seq.iter(fun r -> [] - member _.``Verify that Dispose on DependencyProvider unhooks ResolvingUnmanagedDll and AssemblyResolver event handler``() = + member __.``Verify that Dispose on DependencyProvider unhooks ResolvingUnmanagedDll and AssemblyResolver event handler``() = let mutable assemblyFound = false let assemblyProbingPaths () = @@ -635,7 +636,7 @@ x |> Seq.iter(fun r -> #endif [] - member _.``Verify that Dispose on AssemblyResolveHandler unhooks AssemblyResolve event handler``() = + member __.``Verify that Dispose on AssemblyResolveHandler unhooks AssemblyResolve event handler``() = let mutable assemblyFound = false let assemblyProbingPaths () = @@ -657,7 +658,7 @@ x |> Seq.iter(fun r -> Assert.False (assemblyFound, "Invoke the assemblyProbingRoots callback -- Error the AssemblyResolve still fired ") [] - member _.``Verify that Dispose cleans up the native paths added``() = + member __.``Verify that Dispose cleans up the native paths added``() = let nativeProbingRoots () = Seq.empty let appendSemiColon (p:string) = @@ -697,7 +698,7 @@ x |> Seq.iter(fun r -> let mutable currentPath:string = null use dp = new DependencyProvider(NativeResolutionProbe(nativeProbingRoots)) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") - let result = dp.Resolve(idm, ".fsx", [|"r", "Microsoft.Data.Sqlite,3.1.7"|], reportError, "net5.0") + let result = dp.Resolve(idm, ".fsx", [|"r", "Microsoft.Data.Sqlite,3.1.7"|], reportError, "netcoreapp3.1") Assert.Equal(true, result.Success) currentPath <- appendSemiColon (Environment.GetEnvironmentVariable("PATH")) finalPath <- appendSemiColon (Environment.GetEnvironmentVariable("PATH")) @@ -707,7 +708,7 @@ x |> Seq.iter(fun r -> () [] - member _.``Verify that #help produces help text for fsi + dependency manager``() = + member __.``Verify that #help produces help text for fsi + dependency manager``() = let expected = [| """ F# Interactive directives:""" """""" @@ -754,7 +755,7 @@ x |> Seq.iter(fun r -> [] - member _.``Verify that #help produces help text for fsi + dependency manager language version preview``() = + member __.``Verify that #help produces help text for fsi + dependency manager language version preview``() = let expected = [| """ F# Interactive directives:""" """""" @@ -803,7 +804,7 @@ x |> Seq.iter(fun r -> [] - member _.``Verify that timeout --- times out and fails``() = + member __.``Verify that timeout --- times out and fails``() = let nativeProbingRoots () = Seq.empty let mutable foundCorrectError = false let mutable foundWrongError = false @@ -813,20 +814,20 @@ x |> Seq.iter(fun r -> let report errorType code message = match errorType with | ErrorReportType.Error -> - if code = 3217 then foundCorrectError <- true + if code = 3401 then foundCorrectError <- true else foundWrongError <- true | ErrorReportType.Warning -> printfn "PackageManagementWarning %d : %s" code message ResolvingErrorReport (report) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") - let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, "net5.0", timeout=0) // Fail in 0 milliseconds + let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data"|], reportError, "netcoreapp3.1", timeout=0) // Fail in 0 milliseconds Assert.Equal(false, result.Success) Assert.Equal(foundCorrectError, true) Assert.Equal(foundWrongError, false) () [] - member _.``Verify that script based timeout overrides api based - timeout on script``() = + member __.``Verify that script based timeout overrides api based - timeout on script``() = let nativeProbingRoots () = Seq.empty let mutable foundCorrectError = false let mutable foundWrongError = false @@ -836,20 +837,20 @@ x |> Seq.iter(fun r -> let report errorType code message = match errorType with | ErrorReportType.Error -> - if code = 3217 then foundCorrectError <- true + if code = 3401 then foundCorrectError <- true else foundWrongError <- true | ErrorReportType.Warning -> printfn "PackageManagementWarning %d : %s" code message ResolvingErrorReport (report) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") - let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"; "r", "timeout=0"|], reportError, "net5.0", null, "", "", "", -1) // Wait forever + let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data"; "r", "timeout=0"|], reportError, "netcoreapp3.1", null, "", "", "", -1) // Wait forever Assert.Equal(false, result.Success) Assert.Equal(foundCorrectError, true) Assert.Equal(foundWrongError, false) () [] - member _.``Verify that script based timeout overrides api based - timeout on api , forever on script``() = + member __.``Verify that script based timeout overrides api based - timeout on api , forever on script``() = let nativeProbingRoots () = Seq.empty let mutable foundCorrectError = false let mutable foundWrongError = false @@ -865,7 +866,7 @@ x |> Seq.iter(fun r -> ResolvingErrorReport (report) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") - let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"; "r", "timeout=none"|], reportError, "net5.0", null, "", "", "", -1) // Wait forever + let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data"; "r", "timeout=none"|], reportError, "netcoreapp3.1", null, "", "", "", 0) // Wait forever Assert.Equal(true, result.Success) Assert.Equal(foundCorrectError, false) Assert.Equal(foundWrongError, false) diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerLineParserTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerLineParserTests.fs index 780fc0d5e44..4ebc8568884 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerLineParserTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerLineParserTests.fs @@ -20,94 +20,94 @@ type DependencyManagerLineParserTests() = packageReferences.Single() [] - member _.``Binary logging defaults to disabled``() = + member __.``Binary logging defaults to disabled``() = let _, binLogPath, _ = FSharpDependencyManager.parsePackageReference ".fsx" [] Assert.Equal(None, binLogPath) [] - member _.``Binary logging can be set to default path``() = + member __.``Binary logging can be set to default path``() = let binLogPath = parseBinLogPath "bl=true" Assert.Equal(Some (None: string option), binLogPath) [] - member _.``Binary logging can be disabled``() = + member __.``Binary logging can be disabled``() = let binLogPath = parseBinLogPath "bl=false" Assert.Equal(None, binLogPath) [] - member _.``Binary logging can be set to specific location``() = + member __.``Binary logging can be set to specific location``() = let binLogPath = parseBinLogPath "bl=path/to/file.binlog" Assert.Equal(Some(Some "path/to/file.binlog"), binLogPath) [] - member _.``Bare binary log argument isn't parsed as a package name: before``() = + member __.``Bare binary log argument isn't parsed as a package name: before``() = let packageReferences, binLogPath, _ = FSharpDependencyManager.parsePackageReference ".fsx" ["bl, MyPackage"] Assert.Equal("MyPackage", packageReferences.Single().Include) Assert.Equal(Some (None: string option), binLogPath) [] - member _.``Bare binary log argument isn't parsed as a package name: middle``() = + member __.``Bare binary log argument isn't parsed as a package name: middle``() = let packageReferences, binLogPath, _ = FSharpDependencyManager.parsePackageReference ".fsx" ["MyPackage, bl, 1.2.3.4"] Assert.Equal("MyPackage", packageReferences.Single().Include) Assert.Equal("1.2.3.4", packageReferences.Single().Version) Assert.Equal(Some (None: string option), binLogPath) [] - member _.``Bare binary log argument isn't parsed as a package name: after``() = + member __.``Bare binary log argument isn't parsed as a package name: after``() = let packageReferences, binLogPath, _ = FSharpDependencyManager.parsePackageReference ".fsx" ["MyPackage, bl"] Assert.Equal("MyPackage", packageReferences.Single().Include) Assert.Equal(Some (None: string option), binLogPath) [] - member _.``Package named 'bl' can be explicitly referenced``() = + member __.``Package named 'bl' can be explicitly referenced``() = let packageReferences, binLogPath, _ = FSharpDependencyManager.parsePackageReference ".fsx" ["Include=bl"] Assert.Equal("bl", packageReferences.Single().Include) Assert.Equal(None, binLogPath) [] - member _.``Package named 'bl' can be explicitly referenced with binary logging``() = + member __.``Package named 'bl' can be explicitly referenced with binary logging``() = let packageReferences, binLogPath, _ = FSharpDependencyManager.parsePackageReference ".fsx" ["Include=bl,bl"] Assert.Equal("bl", packageReferences.Single().Include) Assert.Equal(Some (None: string option), binLogPath) [] - member _.``Parse explicitly specified package name``() = + member __.``Parse explicitly specified package name``() = let pr = parseSingleReference "Include=MyPackage" Assert.Equal("MyPackage", pr.Include) [] - member _.``Parse implicitly specified package name``() = + member __.``Parse implicitly specified package name``() = let pr = parseSingleReference "MyPackage" Assert.Equal("MyPackage", pr.Include) [] - member _.``Parse version number``() = + member __.``Parse version number``() = let pr = parseSingleReference "MyPackage, Version=1.2.3.4" Assert.Equal("1.2.3.4", pr.Version) [] - member _.``Parse implicitly specified package name and implicitly specified version number``() = + member __.``Parse implicitly specified package name and implicitly specified version number``() = let pr = parseSingleReference "MyPackage, 1.2.3.4" Assert.Equal("MyPackage", pr.Include) Assert.Equal("1.2.3.4", pr.Version) [] - member _.``Parse single restore source``() = + member __.``Parse single restore source``() = let pr = parseSingleReference "MyPackage, RestoreSources=MyRestoreSource" Assert.Equal("MyRestoreSource", pr.RestoreSources) [] - member _.``Parse multiple restore sources``() = + member __.``Parse multiple restore sources``() = let pr = parseSingleReference "MyPackage, RestoreSources=MyRestoreSource1, RestoreSources=MyRestoreSource2" Assert.Equal("MyRestoreSource1;MyRestoreSource2", pr.RestoreSources) [] - member _.``Parse script``() = + member __.``Parse script``() = let pr = parseSingleReference "MyPackage, Script=SomeScript" Assert.Equal("SomeScript", pr.Script) [] - member _.``Include strings that look different but parse the same are reduced to a single item``() = + member __.``Include strings that look different but parse the same are reduced to a single item``() = let prs, _, _ = [ "MyPackage, Version=1.2.3.4" "Include=MyPackage, Version=1.2.3.4" ] @@ -116,28 +116,28 @@ type DependencyManagerLineParserTests() = Assert.Equal("MyPackage", pr.Include) [] - member _.``Timeout none is -1``() = + member __.``Timeout none is -1``() = let _, _, timeout = [ "timeout=none" ] |> FSharpDependencyManager.parsePackageReference ".fsx" Assert.Equal(timeout, Some -1) [] - member _.``Timeout 1000 is 1000``() = + member __.``Timeout 1000 is 1000``() = let _, _, timeout = [ "timeout=1000" ] |> FSharpDependencyManager.parsePackageReference ".fsx" Assert.Equal(timeout, Some 1000) [] - member _.``Timeout 0 is 0``() = + member __.``Timeout 0 is 0``() = let _, _, timeout = [ "timeout=0" ] |> FSharpDependencyManager.parsePackageReference ".fsx" Assert.Equal(timeout, Some 0) [] - member _.``Timeout for many values is the last specified ascending``() = + member __.``Timeout for many values is the last specified ascending``() = let _, _, timeout = [ "timeout=none" "timeout=1" @@ -148,7 +148,7 @@ type DependencyManagerLineParserTests() = Assert.Equal(timeout, Some 100) [] - member _.``Timeout for many values is the last specified descending``() = + member __.``Timeout for many values is the last specified descending``() = let _, _, timeout = [ "timeout=10000" "timeout=1000" @@ -159,7 +159,7 @@ type DependencyManagerLineParserTests() = Assert.Equal(timeout, Some 10) [] - member _.``Timeout invalid : timeout``() = + member __.``Timeout invalid : timeout``() = try [ "timeout" ] |> FSharpDependencyManager.parsePackageReference ".fsx" |> ignore @@ -169,7 +169,7 @@ type DependencyManagerLineParserTests() = | _ -> Assert.True(false, "ArgumentException expected") //Assert.Fail [] - member _.``Timeout invalid timeout=``() = + member __.``Timeout invalid timeout=``() = try [ "timeout=" ] |> FSharpDependencyManager.parsePackageReference ".fsx" |> ignore @@ -179,7 +179,7 @@ type DependencyManagerLineParserTests() = | _ -> Assert.True(false, "ArgumentException expected") //Assert.Fail [] - member _.``Timeout invalid timeout=nonesuch``() = + member __.``Timeout invalid timeout=nonesuch``() = try [ "timeout=nonesuch" ] |> FSharpDependencyManager.parsePackageReference ".fsx" |> ignore @@ -190,7 +190,7 @@ type DependencyManagerLineParserTests() = [] - member _.``Timeout invalid timeout=-20``() = + member __.``Timeout invalid timeout=-20``() = try [ "timeout=-20" ] |> FSharpDependencyManager.parsePackageReference ".fsx" |> ignore diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj index d30dd32729c..a45c66c348f 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj @@ -2,8 +2,8 @@ - net472;net5.0 - net5.0 + net472;netcoreapp3.1 + netcoreapp3.1 Library true xunit @@ -11,7 +11,9 @@ + + @@ -24,9 +26,10 @@ - - + + + diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs index 431ac983ec4..8deed2f994d 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs @@ -10,14 +10,14 @@ open System.Runtime.InteropServices open System.Threading open System.Threading.Tasks open FSharp.Compiler.Interactive.Shell -open FSharp.Test.ScriptHelpers +open FSharp.Compiler.Scripting open Xunit type InteractiveTests() = [] - member _.``Eval object value``() = + member __.``Eval object value``() = use script = new FSharpScript() let opt = script.Eval("1+1") |> getValue let value = opt.Value @@ -25,7 +25,7 @@ type InteractiveTests() = Assert.Equal(2, value.ReflectionValue :?> int) [] - member _.``Declare and eval object value``() = + member __.``Declare and eval object value``() = use script = new FSharpScript() let opt = script.Eval("let x = 1 + 2\r\nx") |> getValue let value = opt.Value @@ -33,7 +33,7 @@ type InteractiveTests() = Assert.Equal(3, value.ReflectionValue :?> int) [] - member _.``Capture console input``() = + member __.``Capture console input``() = use input = new RedirectConsoleInput() use script = new FSharpScript() input.ProvideInput "stdin:1234\r\n" @@ -43,7 +43,7 @@ type InteractiveTests() = Assert.Equal("stdin:1234", downcast value.ReflectionValue) [] - member _.``Capture console output/error``() = + member __.``Capture console output/error``() = use output = new RedirectConsoleOutput() use script = new FSharpScript() use sawOutputSentinel = new ManualResetEvent(false) @@ -55,7 +55,7 @@ type InteractiveTests() = Assert.True(sawErrorSentinel.WaitOne(TimeSpan.FromSeconds(5.0)), "Expected to see error sentinel value written") [] - member _.``Maintain state between submissions``() = + member __.``Maintain state between submissions``() = use script = new FSharpScript() script.Eval("let add x y = x + y") |> ignoreValue let opt = script.Eval("add 2 3") |> getValue @@ -64,7 +64,7 @@ type InteractiveTests() = Assert.Equal(5, downcast value.ReflectionValue) [] - member _.``Assembly reference event successful``() = + member __.``Assembly reference event successful``() = use script = new FSharpScript() let testCode = """ #r "System.dll" @@ -76,7 +76,7 @@ stacktype.Name = "Stack" Assert.Equal(true, downcast value.ReflectionValue) [] - member _.``Assembly reference unsuccessful``() = + member __.``Assembly reference unsuccessful``() = use script = new FSharpScript() let testAssembly = "not-an-assembly-that-can-be-found.dll" let _result, errors = script.Eval(sprintf "#r \"%s\"" testAssembly) @@ -143,7 +143,7 @@ System.Configuration.ConfigurationManager.AppSettings.Item "Environment" <- "LOC [] [] + "input.fsx (1,1)-(1,6) interactive warning Invalid directive '#i '")>] member _.``Script with more #i syntax errors fail``(code, error0, error1) = use script = new FSharpScript() let result, errors = script.Eval(code) @@ -197,7 +197,7 @@ System.Configuration.ConfigurationManager.AppSettings.Item "Environment" <- "LOC /// Native dll resolution is not implemented on desktop #if NETSTANDARD [] - member _.``ML - use assembly with native dependencies``() = + member __.``ML - use assembly with native dependencies``() = let code = @" #r ""nuget:Microsoft.ML,version=1.4.0-preview"" #r ""nuget:Microsoft.ML.AutoML,version=0.16.0-preview"" @@ -243,7 +243,7 @@ printfn ""%A"" result #endif [] - member _.``Eval script with package manager invalid key``() = + member __.``Eval script with package manager invalid key``() = use script = new FSharpScript(additionalArgs=[|"/langversion:preview"|]) let result, _errors = script.Eval(@"#r ""nugt:FSharp.Data""") match result with @@ -251,7 +251,7 @@ printfn ""%A"" result | Error(ex) -> Assert.IsAssignableFrom(typeof, ex) [] - member _.``Eval script with invalid PackageName should fail immediately``() = + member __.``Eval script with invalid PackageName should fail immediately``() = use output = new RedirectConsoleOutput() use script = new FSharpScript(additionalArgs=[|"/langversion:preview"|]) let mutable found = 0 @@ -267,7 +267,7 @@ printfn ""%A"" result Assert.True( errors |> Seq.exists (fun error -> error.Message.Contains("FSharp.Really.Not.A.Package")), "Expect to error containing 'FSharp.Really.Not.A.Package'") [] - member _.``Eval script with invalid PackageName should fail immediately and resolve one time only``() = + member __.``Eval script with invalid PackageName should fail immediately and resolve one time only``() = use output = new RedirectConsoleOutput() use script = new FSharpScript(additionalArgs=[|"/langversion:preview"|]) let mutable foundResolve = 0 @@ -283,7 +283,7 @@ printfn ""%A"" result Assert.Equal(1, (errors |> Seq.filter (fun error -> error.Message.Contains("FSharp.Really.Not.Another.Package")) |> Seq.length)) [] - member _.``ML - use assembly with ref dependencies``() = + member __.``ML - use assembly with ref dependencies``() = let code = """ #r "nuget:Microsoft.ML.OnnxTransformer,1.4.0" #r "nuget:System.Memory,4.5.4" @@ -300,7 +300,7 @@ tInput.Length Assert.Equal(4L, downcast value.ReflectionValue) [] - member _.``System.Device.Gpio - Ensure we reference the runtime version of the assembly``() = + member __.``System.Device.Gpio - Ensure we reference the runtime version of the assembly``() = let code = """ #r "nuget:System.Device.Gpio, 1.0.0" typeof.Assembly.Location @@ -318,20 +318,7 @@ typeof.Assembly.Location () [] - member _.``Reference -- Azure.ResourceManager.Resources``() = - let code = """ -#r "nuget: Azure.Identity, 1.3.0" -#r "nuget: Azure.ResourceManager.Resources, 1.0.0-preview.2" -let creds = Azure.Identity.DefaultAzureCredential() -let client = Azure.ResourceManager.Resources.ResourcesManagementClient("mySubscriptionId", creds) -true""" - use script = new FSharpScript(additionalArgs=[|"/langversion:preview"|]) - let opt = script.Eval(code) |> getValue - let value = opt.Value - Assert.True(true = downcast value.ReflectionValue) - - [] - member _.``Simple pinvoke should not be impacted by native resolver``() = + member __.``Simple pinvoke should not be impacted by native resolver``() = let code = @" open System open System.Runtime.InteropServices diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/TestHelpers.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/TestHelpers.fs new file mode 100644 index 00000000000..b0ab7a0eaf1 --- /dev/null +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/TestHelpers.fs @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.Scripting.UnitTests + +open System +open System.IO +open FSharp.Compiler.Interactive.Shell +open FSharp.Compiler.SourceCodeServices + +[] +module TestHelpers = + + let getValue ((value: Result), (errors: FSharpErrorInfo[])) = + if errors.Length > 0 then + failwith <| sprintf "Evaluation returned %d errors:\r\n\t%s" errors.Length (String.Join("\r\n\t", errors)) + match value with + | Ok(value) -> value + | Error ex -> raise ex + + let ignoreValue = getValue >> ignore + + let getTempDir () = + let sysTempDir = Path.GetTempPath() + let customTempDirName = Guid.NewGuid().ToString("D") + let fullDirName = Path.Combine(sysTempDir, customTempDirName) + let dirInfo = Directory.CreateDirectory(fullDirName) + { new Object() with + member __.ToString() = dirInfo.FullName + interface IDisposable with + member __.Dispose() = + dirInfo.Delete(true) + } diff --git a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj index ec7f2fa2f84..e7d9d79f34d 100644 --- a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj +++ b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj @@ -2,7 +2,7 @@ Exe - net472;net5.0 + netcoreapp3.1 $(NoWarn);44;75; true false @@ -70,7 +70,7 @@ ParserTests.fs - + Program.fs diff --git a/tests/FSharp.Compiler.Service.Tests/LibraryTestFx.fs b/tests/FSharp.Compiler.Service.Tests/LibraryTestFx.fs index cf3db4c5f89..cedeac7da92 100644 --- a/tests/FSharp.Compiler.Service.Tests/LibraryTestFx.fs +++ b/tests/FSharp.Compiler.Service.Tests/LibraryTestFx.fs @@ -1,14 +1,11 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module Tests.Service.SurfaceArea.LibraryTestFx +module FSharp.Core.UnitTests.LibraryTestFx open System open System.Collections.Generic open System.IO open System.Reflection -open System.Text.RegularExpressions - -open FSharp.Compiler.IO open NUnit.Framework @@ -20,6 +17,9 @@ let sleep(n : int32) = System.Threading.Thread.Sleep(n) module SurfaceArea = + open System.Reflection + open System + open System.Text.RegularExpressions // gets string form of public surface area for FSharp.CompilerService let private getActual () = @@ -28,6 +28,7 @@ module SurfaceArea = let path = Path.Combine(Path.GetDirectoryName(typeof.Assembly.Location), "FSharp.Compiler.Service.dll") let name = AssemblyName.GetAssemblyName (path) let asm = Assembly.Load(name) + let fsCompilerServiceFullName = asm.FullName // public types only let types = asm.ExportedTypes |> Seq.filter (fun ty -> let ti = ty.GetTypeInfo() in ti.IsPublic || ti.IsNestedPublic) |> Array.ofSeq @@ -38,20 +39,18 @@ module SurfaceArea = let getMembers (t : Type) = let ti = t.GetTypeInfo() let cast (info: #MemberInfo) = (t, info :> MemberInfo) + let isDeclaredInFSharpCompilerService (m:MemberInfo) = m.DeclaringType.Assembly.FullName = fsCompilerServiceFullName seq { - yield! ti.DeclaredEvents |> Seq.filter (fun m -> m.AddMethod.IsPublic) |> Seq.map cast - yield! ti.DeclaredProperties |> Seq.filter (fun m -> m.GetMethod.IsPublic) |> Seq.map cast - yield! ti.DeclaredMethods |> Seq.filter (fun m -> m.IsPublic) |> Seq.map cast - yield! ti.DeclaredFields |> Seq.filter (fun m -> m.IsPublic) |> Seq.map cast + yield! t.GetRuntimeEvents() |> Seq.filter (fun m -> m.AddMethod.IsPublic && m |> isDeclaredInFSharpCompilerService) |> Seq.map cast + yield! t.GetRuntimeProperties() |> Seq.filter (fun m -> m.GetMethod.IsPublic && m |> isDeclaredInFSharpCompilerService) |> Seq.map cast + yield! t.GetRuntimeMethods() |> Seq.filter (fun m -> m.IsPublic && m |> isDeclaredInFSharpCompilerService) |> Seq.map cast + yield! t.GetRuntimeFields() |> Seq.filter (fun m -> m.IsPublic && m |> isDeclaredInFSharpCompilerService) |> Seq.map cast yield! ti.DeclaredConstructors |> Seq.filter (fun m -> m.IsPublic) |> Seq.map cast yield! ti.DeclaredNestedTypes |> Seq.filter (fun ty -> ty.IsNestedPublic) |> Seq.map cast } |> Array.ofSeq - [| for (ty,m) in getMembers t do - yield sprintf "%s: %s" (ty.ToString()) (m.ToString()) - if not t.IsNested then - yield t.ToString() - |] + getMembers t + |> Array.map (fun (ty, m) -> sprintf "%s: %s" (ty.ToString()) (m.ToString())) let actual = types |> Array.collect getTypeMemberStrings @@ -66,7 +65,7 @@ module SurfaceArea = let asm, actualNotNormalized = getActual () let actual = actualNotNormalized |> Seq.map normalize |> Seq.filter (String.IsNullOrWhiteSpace >> not) |> set - + let expected = // Split the "expected" string into individual lines, then normalize it. (normalize expected).Split([|"\r\n"; "\n"; "\r"|], StringSplitOptions.RemoveEmptyEntries) @@ -93,7 +92,7 @@ module SurfaceArea = let workDir = TestContext.CurrentContext.WorkDirectory sprintf "%s\\FSharp.CompilerService.SurfaceArea.%s.txt" workDir platform - FileSystem.OpenFileForWriteShim(logFile).Write(String.Join("\r\n", actual)) + System.IO.File.WriteAllText(logFile, String.Join("\r\n", actual)) // The surface areas don't match; prepare an easily-readable output message. let msg = @@ -105,11 +104,8 @@ module SurfaceArea = Printf.bprintf sb " windiff %s %s" baseline logFile newLine sb newLine sb - sb.AppendLine "To update the baseline copy the contents of this:" |> ignore - Printf.bprintf sb " %s" logFile - newLine sb - sb.AppendLine "into this:" |> ignore - Printf.bprintf sb " %s" baseline + sb.AppendLine "To update the baseline run:" |> ignore + Printf.bprintf sb " copy /y %s %s" logFile baseline newLine sb newLine sb sb.Append "Unexpectedly missing (expected, not actual):" |> ignore diff --git a/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs b/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs index b8b5c504c06..c488d917361 100644 --- a/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs +++ b/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs @@ -1,15 +1,46 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace Tests.Service.SurfaceArea +namespace FSharp.Core.UnitTests.Portable.SurfaceArea -open Tests.Service.SurfaceArea.LibraryTestFx +open FSharp.Core.UnitTests.LibraryTestFx open NUnit.Framework type SurfaceAreaTest() = [] - member _.VerifyArea() = + member this.VerifyArea() = let expected = @" -FSharp.Compiler.AbstractIL.IL +FSharp.Compiler.AbstractIL.IL+ILAlignment+Tags: Int32 Aligned +FSharp.Compiler.AbstractIL.IL+ILAlignment+Tags: Int32 Unaligned1 +FSharp.Compiler.AbstractIL.IL+ILAlignment+Tags: Int32 Unaligned2 +FSharp.Compiler.AbstractIL.IL+ILAlignment+Tags: Int32 Unaligned4 +FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean Equals(ILAlignment) +FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean IsAligned +FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean IsUnaligned1 +FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean IsUnaligned2 +FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean IsUnaligned4 +FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean get_IsAligned() +FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean get_IsUnaligned1() +FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean get_IsUnaligned2() +FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean get_IsUnaligned4() +FSharp.Compiler.AbstractIL.IL+ILAlignment: FSharp.Compiler.AbstractIL.IL+ILAlignment+Tags +FSharp.Compiler.AbstractIL.IL+ILAlignment: ILAlignment Aligned +FSharp.Compiler.AbstractIL.IL+ILAlignment: ILAlignment Unaligned1 +FSharp.Compiler.AbstractIL.IL+ILAlignment: ILAlignment Unaligned2 +FSharp.Compiler.AbstractIL.IL+ILAlignment: ILAlignment Unaligned4 +FSharp.Compiler.AbstractIL.IL+ILAlignment: ILAlignment get_Aligned() +FSharp.Compiler.AbstractIL.IL+ILAlignment: ILAlignment get_Unaligned1() +FSharp.Compiler.AbstractIL.IL+ILAlignment: ILAlignment get_Unaligned2() +FSharp.Compiler.AbstractIL.IL+ILAlignment: ILAlignment get_Unaligned4() +FSharp.Compiler.AbstractIL.IL+ILAlignment: Int32 CompareTo(ILAlignment) +FSharp.Compiler.AbstractIL.IL+ILAlignment: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAlignment: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILAlignment: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILAlignment: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAlignment: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILAlignment: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILAlignment: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILArgConvention+Tags: Int32 CDecl FSharp.Compiler.AbstractIL.IL+ILArgConvention+Tags: Int32 Default FSharp.Compiler.AbstractIL.IL+ILArgConvention+Tags: Int32 FastCall @@ -56,6 +87,7 @@ FSharp.Compiler.AbstractIL.IL+ILArrayShape: Boolean Equals(ILArrayShape) FSharp.Compiler.AbstractIL.IL+ILArrayShape: Boolean Equals(System.Object) FSharp.Compiler.AbstractIL.IL+ILArrayShape: Boolean Equals(System.Object, System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILArrayShape: ILArrayShape FromRank(Int32) +FSharp.Compiler.AbstractIL.IL+ILArrayShape: ILArrayShape NewILArrayShape(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[System.Int32],Microsoft.FSharp.Core.FSharpOption`1[System.Int32]]]) FSharp.Compiler.AbstractIL.IL+ILArrayShape: ILArrayShape SingleDimensional FSharp.Compiler.AbstractIL.IL+ILArrayShape: ILArrayShape get_SingleDimensional() FSharp.Compiler.AbstractIL.IL+ILArrayShape: Int32 CompareTo(ILArrayShape) @@ -64,18 +96,48 @@ FSharp.Compiler.AbstractIL.IL+ILArrayShape: Int32 CompareTo(System.Object, Syste FSharp.Compiler.AbstractIL.IL+ILArrayShape: Int32 GetHashCode() FSharp.Compiler.AbstractIL.IL+ILArrayShape: Int32 GetHashCode(System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILArrayShape: Int32 Rank +FSharp.Compiler.AbstractIL.IL+ILArrayShape: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILArrayShape: Int32 get_Rank() +FSharp.Compiler.AbstractIL.IL+ILArrayShape: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILArrayShape: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[System.Int32],Microsoft.FSharp.Core.FSharpOption`1[System.Int32]]] Item +FSharp.Compiler.AbstractIL.IL+ILArrayShape: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[System.Int32],Microsoft.FSharp.Core.FSharpOption`1[System.Int32]]] get_Item() FSharp.Compiler.AbstractIL.IL+ILArrayShape: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity+Tags: Int32 Library +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity+Tags: Int32 PlatformAppDomain +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity+Tags: Int32 PlatformProcess +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity+Tags: Int32 PlatformSystem +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity+Tags: Int32 Unspecified FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean Equals(ILAssemblyLongevity) FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean Equals(System.Object) FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity Default -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity get_Default() +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean IsLibrary +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean IsPlatformAppDomain +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean IsPlatformProcess +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean IsPlatformSystem +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean IsUnspecified +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean get_IsLibrary() +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean get_IsPlatformAppDomain() +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean get_IsPlatformProcess() +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean get_IsPlatformSystem() +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean get_IsUnspecified() +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity+Tags +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity Library +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity PlatformAppDomain +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity PlatformProcess +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity PlatformSystem +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity Unspecified +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity get_Library() +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity get_PlatformAppDomain() +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity get_PlatformProcess() +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity get_PlatformSystem() +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity get_Unspecified() FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Int32 CompareTo(ILAssemblyLongevity) FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Int32 CompareTo(System.Object) FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Int32 CompareTo(System.Object, System.Collections.IComparer) FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Int32 GetHashCode() FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILAssemblyManifest: Boolean DisableJitOptimizations FSharp.Compiler.AbstractIL.IL+ILAssemblyManifest: Boolean IgnoreSymbolStoreSequencePoints @@ -132,30 +194,525 @@ FSharp.Compiler.AbstractIL.IL+ILAssemblyRef: System.String Name FSharp.Compiler.AbstractIL.IL+ILAssemblyRef: System.String QualifiedName FSharp.Compiler.AbstractIL.IL+ILAssemblyRef: System.String get_Name() FSharp.Compiler.AbstractIL.IL+ILAssemblyRef: System.String get_QualifiedName() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean Equals(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsSByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsType +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsTypeRef +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsSByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsType() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsTypeRef() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsUInt64() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: ILType Item1 FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: ILType get_Item1() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Int32 CompareTo(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] Item2 FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] get_Item2() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean Equals(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsSByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsType +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsTypeRef +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsUInt64 FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean Item +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsSByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsType() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsTypeRef() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsUInt64() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_Item() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Int32 CompareTo(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean Equals(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsSByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsType +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsTypeRef +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsSByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsType() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsTypeRef() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsUInt64() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Byte Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Byte get_Item() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Int32 CompareTo(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean Equals(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsSByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsType +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsTypeRef +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsSByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsType() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsTypeRef() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsUInt64() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Char Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Char get_Item() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Int32 CompareTo(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean Equals(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsSByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsType +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsTypeRef +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsSByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsType() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsTypeRef() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsUInt64() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Double Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Double get_Item() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Int32 CompareTo(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean Equals(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsSByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsType +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsTypeRef +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsSByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsType() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsTypeRef() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsUInt64() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Int16 Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Int16 get_Item() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Int32 CompareTo(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean Equals(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsSByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsType +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsTypeRef +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsSByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsType() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsTypeRef() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Int32 CompareTo(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Int32 GetHashCode(System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Int32 Item +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Int32 get_Item() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean Equals(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsSByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsType +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsTypeRef +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsSByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsType() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsTypeRef() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Int32 CompareTo(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Int64 Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Int64 get_Item() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean Equals(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsSByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsType +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsTypeRef +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsSByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsType() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsTypeRef() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Int32 CompareTo(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: SByte Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: SByte get_Item() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean Equals(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsSByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsType +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsTypeRef +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsSByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsType() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsTypeRef() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Int32 CompareTo(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Single Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Single get_Item() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean Equals(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsSByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsType +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsTypeRef +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsSByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsType() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsTypeRef() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Int32 CompareTo(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Microsoft.FSharp.Core.FSharpOption`1[System.String] Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Item() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Tags: Int32 Array FSharp.Compiler.AbstractIL.IL+ILAttribElem+Tags: Int32 Bool FSharp.Compiler.AbstractIL.IL+ILAttribElem+Tags: Int32 Byte @@ -173,14 +730,239 @@ FSharp.Compiler.AbstractIL.IL+ILAttribElem+Tags: Int32 TypeRef FSharp.Compiler.AbstractIL.IL+ILAttribElem+Tags: Int32 UInt16 FSharp.Compiler.AbstractIL.IL+ILAttribElem+Tags: Int32 UInt32 FSharp.Compiler.AbstractIL.IL+ILAttribElem+Tags: Int32 UInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean Equals(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsSByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsType +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsTypeRef +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsSByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsType() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsTypeRef() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Int32 CompareTo(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILType] Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILType] get_Item() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean Equals(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsSByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsType +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsTypeRef +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsSByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsType() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsTypeRef() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Int32 CompareTo(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILTypeRef] Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILTypeRef] get_Item() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean Equals(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsSByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsType +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsTypeRef +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsSByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsType() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsTypeRef() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Int32 CompareTo(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: UInt16 Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: UInt16 get_Item() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean Equals(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsSByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsType +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsTypeRef +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsSByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsType() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsTypeRef() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Int32 CompareTo(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: UInt32 Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: UInt32 get_Item() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean Equals(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsSByte +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsType +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsTypeRef +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsSByte() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsType() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsTypeRef() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Int32 CompareTo(ILAttribElem) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: UInt64 Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: UInt64 get_Item() FSharp.Compiler.AbstractIL.IL+ILAttribElem: Boolean Equals(ILAttribElem) @@ -263,18 +1045,58 @@ FSharp.Compiler.AbstractIL.IL+ILAttribElem: Int32 GetHashCode(System.Collections FSharp.Compiler.AbstractIL.IL+ILAttribElem: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILAttribElem: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILAttribElem: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Boolean Equals(ILAttribute) +FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Boolean IsDecoded +FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Boolean IsEncoded +FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Boolean get_IsDecoded() +FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Boolean get_IsEncoded() +FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: ILAttribute WithMethod(ILMethodSpec) +FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: ILMethodSpec Method +FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: ILMethodSpec get_Method() FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: ILMethodSpec get_method() FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: ILMethodSpec method +FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Int32 CompareTo(ILAttribute) +FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] Elements FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] fixedArgs +FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] get_Elements() FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] get_fixedArgs() FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`4[System.String,FSharp.Compiler.AbstractIL.IL+ILType,System.Boolean,FSharp.Compiler.AbstractIL.IL+ILAttribElem]] get_namedArgs() FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`4[System.String,FSharp.Compiler.AbstractIL.IL+ILType,System.Boolean,FSharp.Compiler.AbstractIL.IL+ILAttribElem]] namedArgs +FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Boolean Equals(ILAttribute) +FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Boolean IsDecoded +FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Boolean IsEncoded +FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Boolean get_IsDecoded() +FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Boolean get_IsEncoded() FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Byte[] data FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Byte[] get_data() +FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: ILAttribute WithMethod(ILMethodSpec) +FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: ILMethodSpec Method +FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: ILMethodSpec get_Method() FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: ILMethodSpec get_method() FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: ILMethodSpec method +FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Int32 CompareTo(ILAttribute) +FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] Elements FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] elements +FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] get_Elements() FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] get_elements() +FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILAttribute+Tags: Int32 Decoded FSharp.Compiler.AbstractIL.IL+ILAttribute+Tags: Int32 Encoded FSharp.Compiler.AbstractIL.IL+ILAttribute: Boolean Equals(ILAttribute) @@ -289,6 +1111,9 @@ FSharp.Compiler.AbstractIL.IL+ILAttribute: FSharp.Compiler.AbstractIL.IL+ILAttri FSharp.Compiler.AbstractIL.IL+ILAttribute: FSharp.Compiler.AbstractIL.IL+ILAttribute+Tags FSharp.Compiler.AbstractIL.IL+ILAttribute: ILAttribute NewDecoded(ILMethodSpec, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`4[System.String,FSharp.Compiler.AbstractIL.IL+ILType,System.Boolean,FSharp.Compiler.AbstractIL.IL+ILAttribElem]]) FSharp.Compiler.AbstractIL.IL+ILAttribute: ILAttribute NewEncoded(ILMethodSpec, Byte[], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem]) +FSharp.Compiler.AbstractIL.IL+ILAttribute: ILAttribute WithMethod(ILMethodSpec) +FSharp.Compiler.AbstractIL.IL+ILAttribute: ILMethodSpec Method +FSharp.Compiler.AbstractIL.IL+ILAttribute: ILMethodSpec get_Method() FSharp.Compiler.AbstractIL.IL+ILAttribute: Int32 CompareTo(ILAttribute) FSharp.Compiler.AbstractIL.IL+ILAttribute: Int32 CompareTo(System.Object) FSharp.Compiler.AbstractIL.IL+ILAttribute: Int32 CompareTo(System.Object, System.Collections.IComparer) @@ -296,16 +1121,130 @@ FSharp.Compiler.AbstractIL.IL+ILAttribute: Int32 GetHashCode() FSharp.Compiler.AbstractIL.IL+ILAttribute: Int32 GetHashCode(System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILAttribute: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILAttribute: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILAttribute: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] Elements +FSharp.Compiler.AbstractIL.IL+ILAttribute: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] get_Elements() FSharp.Compiler.AbstractIL.IL+ILAttribute: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILAttributes: ILAttribute[] AsArray FSharp.Compiler.AbstractIL.IL+ILAttributes: ILAttribute[] get_AsArray() FSharp.Compiler.AbstractIL.IL+ILAttributes: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribute] AsList FSharp.Compiler.AbstractIL.IL+ILAttributes: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribute] get_AsList() FSharp.Compiler.AbstractIL.IL+ILAttributesStored: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_I +FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_I1 +FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_I2 +FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_I4 +FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_I8 +FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_R +FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_R4 +FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_R8 +FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_REF +FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_U +FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_U1 +FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_U2 +FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_U4 +FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_U8 +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean Equals(ILBasicType) +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_I +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_I1 +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_I2 +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_I4 +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_I8 +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_R +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_R4 +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_R8 +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_REF +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_U +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_U1 +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_U2 +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_U4 +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_U8 +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_I() +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_I1() +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_I2() +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_I4() +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_I8() +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_R() +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_R4() +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_R8() +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_REF() +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_U() +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_U1() +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_U2() +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_U4() +FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_U8() +FSharp.Compiler.AbstractIL.IL+ILBasicType: FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_I +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_I1 +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_I2 +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_I4 +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_I8 +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_R +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_R4 +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_R8 +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_REF +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_U +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_U1 +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_U2 +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_U4 +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_U8 +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_I() +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_I1() +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_I2() +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_I4() +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_I8() +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_R() +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_R4() +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_R8() +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_REF() +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_U() +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_U1() +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_U2() +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_U4() +FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_U8() +FSharp.Compiler.AbstractIL.IL+ILBasicType: Int32 CompareTo(ILBasicType) +FSharp.Compiler.AbstractIL.IL+ILBasicType: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILBasicType: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILBasicType: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILBasicType: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILBasicType: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILBasicType: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILBasicType: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILBoxity+Tags: Int32 AsObject +FSharp.Compiler.AbstractIL.IL+ILBoxity+Tags: Int32 AsValue +FSharp.Compiler.AbstractIL.IL+ILBoxity: Boolean Equals(ILBoxity) +FSharp.Compiler.AbstractIL.IL+ILBoxity: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILBoxity: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILBoxity: Boolean IsAsObject +FSharp.Compiler.AbstractIL.IL+ILBoxity: Boolean IsAsValue +FSharp.Compiler.AbstractIL.IL+ILBoxity: Boolean get_IsAsObject() +FSharp.Compiler.AbstractIL.IL+ILBoxity: Boolean get_IsAsValue() +FSharp.Compiler.AbstractIL.IL+ILBoxity: FSharp.Compiler.AbstractIL.IL+ILBoxity+Tags +FSharp.Compiler.AbstractIL.IL+ILBoxity: ILBoxity AsObject +FSharp.Compiler.AbstractIL.IL+ILBoxity: ILBoxity AsValue +FSharp.Compiler.AbstractIL.IL+ILBoxity: ILBoxity get_AsObject() +FSharp.Compiler.AbstractIL.IL+ILBoxity: ILBoxity get_AsValue() +FSharp.Compiler.AbstractIL.IL+ILBoxity: Int32 CompareTo(ILBoxity) +FSharp.Compiler.AbstractIL.IL+ILBoxity: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILBoxity: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILBoxity: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILBoxity: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILBoxity: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILBoxity: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILBoxity: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILCallingConv: Boolean Equals(ILCallingConv) FSharp.Compiler.AbstractIL.IL+ILCallingConv: Boolean Equals(System.Object) FSharp.Compiler.AbstractIL.IL+ILCallingConv: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILCallingConv: Boolean IsInstance +FSharp.Compiler.AbstractIL.IL+ILCallingConv: Boolean IsInstanceExplicit +FSharp.Compiler.AbstractIL.IL+ILCallingConv: Boolean IsStatic +FSharp.Compiler.AbstractIL.IL+ILCallingConv: Boolean get_IsInstance() +FSharp.Compiler.AbstractIL.IL+ILCallingConv: Boolean get_IsInstanceExplicit() +FSharp.Compiler.AbstractIL.IL+ILCallingConv: Boolean get_IsStatic() +FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILArgConvention BasicConv FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILArgConvention Item2 +FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILArgConvention get_BasicConv() FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILArgConvention get_Item2() FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILCallingConv Instance FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILCallingConv NewCallconv(ILThisConvention, ILArgConvention) @@ -313,7 +1252,9 @@ FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILCallingConv Static FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILCallingConv get_Instance() FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILCallingConv get_Static() FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILThisConvention Item1 +FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILThisConvention ThisConv FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILThisConvention get_Item1() +FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILThisConvention get_ThisConv() FSharp.Compiler.AbstractIL.IL+ILCallingConv: Int32 CompareTo(ILCallingConv) FSharp.Compiler.AbstractIL.IL+ILCallingConv: Int32 CompareTo(System.Object) FSharp.Compiler.AbstractIL.IL+ILCallingConv: Int32 CompareTo(System.Object, System.Collections.IComparer) @@ -338,6 +1279,204 @@ FSharp.Compiler.AbstractIL.IL+ILCallingSignature: Microsoft.FSharp.Collections.F FSharp.Compiler.AbstractIL.IL+ILCallingSignature: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] get_ArgTypes() FSharp.Compiler.AbstractIL.IL+ILCallingSignature: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILCallingSignature: Void .ctor(ILCallingConv, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType) +FSharp.Compiler.AbstractIL.IL+ILCode: ILInstr[] Instrs +FSharp.Compiler.AbstractIL.IL+ILCode: ILInstr[] get_Instrs() +FSharp.Compiler.AbstractIL.IL+ILCode: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILExceptionSpec] Exceptions +FSharp.Compiler.AbstractIL.IL+ILCode: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILExceptionSpec] get_Exceptions() +FSharp.Compiler.AbstractIL.IL+ILCode: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo] Locals +FSharp.Compiler.AbstractIL.IL+ILCode: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo] get_Locals() +FSharp.Compiler.AbstractIL.IL+ILCode: System.Collections.Generic.Dictionary`2[System.Int32,System.Int32] Labels +FSharp.Compiler.AbstractIL.IL+ILCode: System.Collections.Generic.Dictionary`2[System.Int32,System.Int32] get_Labels() +FSharp.Compiler.AbstractIL.IL+ILCode: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILCode: Void .ctor(System.Collections.Generic.Dictionary`2[System.Int32,System.Int32], ILInstr[], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILExceptionSpec], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo]) +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_beq +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_bge +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_bge_un +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_bgt +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_bgt_un +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_ble +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_ble_un +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_blt +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_blt_un +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_bne_un +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_brfalse +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_brtrue +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean Equals(ILComparisonInstr) +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_beq +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_bge +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_bge_un +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_bgt +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_bgt_un +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_ble +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_ble_un +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_blt +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_blt_un +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_bne_un +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_brfalse +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_brtrue +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_beq() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_bge() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_bge_un() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_bgt() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_bgt_un() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_ble() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_ble_un() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_blt() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_blt_un() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_bne_un() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_brfalse() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_brtrue() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_beq +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_bge +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_bge_un +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_bgt +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_bgt_un +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_ble +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_ble_un +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_blt +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_blt_un +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_bne_un +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_brfalse +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_brtrue +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_beq() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_bge() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_bge_un() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_bgt() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_bgt_un() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_ble() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_ble_un() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_blt() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_blt_un() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_bne_un() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_brfalse() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_brtrue() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Int32 CompareTo(ILComparisonInstr) +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean Equals(ILConst) +FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean IsI4 +FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean IsI8 +FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean IsR4 +FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean IsR8 +FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean get_IsI4() +FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean get_IsI8() +FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean get_IsR4() +FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean get_IsR8() +FSharp.Compiler.AbstractIL.IL+ILConst+I4: Int32 CompareTo(ILConst) +FSharp.Compiler.AbstractIL.IL+ILConst+I4: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILConst+I4: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILConst+I4: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILConst+I4: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILConst+I4: Int32 Item +FSharp.Compiler.AbstractIL.IL+ILConst+I4: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILConst+I4: Int32 get_Item() +FSharp.Compiler.AbstractIL.IL+ILConst+I4: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILConst+I4: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean Equals(ILConst) +FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean IsI4 +FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean IsI8 +FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean IsR4 +FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean IsR8 +FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean get_IsI4() +FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean get_IsI8() +FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean get_IsR4() +FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean get_IsR8() +FSharp.Compiler.AbstractIL.IL+ILConst+I8: Int32 CompareTo(ILConst) +FSharp.Compiler.AbstractIL.IL+ILConst+I8: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILConst+I8: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILConst+I8: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILConst+I8: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILConst+I8: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILConst+I8: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILConst+I8: Int64 Item +FSharp.Compiler.AbstractIL.IL+ILConst+I8: Int64 get_Item() +FSharp.Compiler.AbstractIL.IL+ILConst+I8: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean Equals(ILConst) +FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean IsI4 +FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean IsI8 +FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean IsR4 +FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean IsR8 +FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean get_IsI4() +FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean get_IsI8() +FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean get_IsR4() +FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean get_IsR8() +FSharp.Compiler.AbstractIL.IL+ILConst+R4: Int32 CompareTo(ILConst) +FSharp.Compiler.AbstractIL.IL+ILConst+R4: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILConst+R4: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILConst+R4: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILConst+R4: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILConst+R4: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILConst+R4: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILConst+R4: Single Item +FSharp.Compiler.AbstractIL.IL+ILConst+R4: Single get_Item() +FSharp.Compiler.AbstractIL.IL+ILConst+R4: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean Equals(ILConst) +FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean IsI4 +FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean IsI8 +FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean IsR4 +FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean IsR8 +FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean get_IsI4() +FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean get_IsI8() +FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean get_IsR4() +FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean get_IsR8() +FSharp.Compiler.AbstractIL.IL+ILConst+R8: Double Item +FSharp.Compiler.AbstractIL.IL+ILConst+R8: Double get_Item() +FSharp.Compiler.AbstractIL.IL+ILConst+R8: Int32 CompareTo(ILConst) +FSharp.Compiler.AbstractIL.IL+ILConst+R8: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILConst+R8: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILConst+R8: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILConst+R8: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILConst+R8: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILConst+R8: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILConst+R8: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILConst+Tags: Int32 I4 +FSharp.Compiler.AbstractIL.IL+ILConst+Tags: Int32 I8 +FSharp.Compiler.AbstractIL.IL+ILConst+Tags: Int32 R4 +FSharp.Compiler.AbstractIL.IL+ILConst+Tags: Int32 R8 +FSharp.Compiler.AbstractIL.IL+ILConst: Boolean Equals(ILConst) +FSharp.Compiler.AbstractIL.IL+ILConst: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILConst: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILConst: Boolean IsI4 +FSharp.Compiler.AbstractIL.IL+ILConst: Boolean IsI8 +FSharp.Compiler.AbstractIL.IL+ILConst: Boolean IsR4 +FSharp.Compiler.AbstractIL.IL+ILConst: Boolean IsR8 +FSharp.Compiler.AbstractIL.IL+ILConst: Boolean get_IsI4() +FSharp.Compiler.AbstractIL.IL+ILConst: Boolean get_IsI8() +FSharp.Compiler.AbstractIL.IL+ILConst: Boolean get_IsR4() +FSharp.Compiler.AbstractIL.IL+ILConst: Boolean get_IsR8() +FSharp.Compiler.AbstractIL.IL+ILConst: FSharp.Compiler.AbstractIL.IL+ILConst+I4 +FSharp.Compiler.AbstractIL.IL+ILConst: FSharp.Compiler.AbstractIL.IL+ILConst+I8 +FSharp.Compiler.AbstractIL.IL+ILConst: FSharp.Compiler.AbstractIL.IL+ILConst+R4 +FSharp.Compiler.AbstractIL.IL+ILConst: FSharp.Compiler.AbstractIL.IL+ILConst+R8 +FSharp.Compiler.AbstractIL.IL+ILConst: FSharp.Compiler.AbstractIL.IL+ILConst+Tags +FSharp.Compiler.AbstractIL.IL+ILConst: ILConst NewI4(Int32) +FSharp.Compiler.AbstractIL.IL+ILConst: ILConst NewI8(Int64) +FSharp.Compiler.AbstractIL.IL+ILConst: ILConst NewR4(Single) +FSharp.Compiler.AbstractIL.IL+ILConst: ILConst NewR8(Double) +FSharp.Compiler.AbstractIL.IL+ILConst: Int32 CompareTo(ILConst) +FSharp.Compiler.AbstractIL.IL+ILConst: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILConst: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILConst: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILConst: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILConst: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILConst: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILConst: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILDefaultPInvokeEncoding+Tags: Int32 Ansi FSharp.Compiler.AbstractIL.IL+ILDefaultPInvokeEncoding+Tags: Int32 Auto FSharp.Compiler.AbstractIL.IL+ILDefaultPInvokeEncoding+Tags: Int32 Unicode @@ -365,12 +1504,27 @@ FSharp.Compiler.AbstractIL.IL+ILDefaultPInvokeEncoding: Int32 GetHashCode(System FSharp.Compiler.AbstractIL.IL+ILDefaultPInvokeEncoding: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILDefaultPInvokeEncoding: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILDefaultPInvokeEncoding: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Boolean Equals(ILEnumInfo) +FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILEnumInfo: ILType enumType +FSharp.Compiler.AbstractIL.IL+ILEnumInfo: ILType get_enumType() +FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Int32 CompareTo(ILEnumInfo) +FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.AbstractIL.IL+ILFieldInit]] enumValues +FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.AbstractIL.IL+ILFieldInit]] get_enumValues() +FSharp.Compiler.AbstractIL.IL+ILEnumInfo: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Void .ctor(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.AbstractIL.IL+ILFieldInit]], ILType) FSharp.Compiler.AbstractIL.IL+ILEventDef: Boolean IsRTSpecialName FSharp.Compiler.AbstractIL.IL+ILEventDef: Boolean IsSpecialName FSharp.Compiler.AbstractIL.IL+ILEventDef: Boolean get_IsRTSpecialName() FSharp.Compiler.AbstractIL.IL+ILEventDef: Boolean get_IsSpecialName() FSharp.Compiler.AbstractIL.IL+ILEventDef: ILAttributes CustomAttrs FSharp.Compiler.AbstractIL.IL+ILEventDef: ILAttributes get_CustomAttrs() +FSharp.Compiler.AbstractIL.IL+ILEventDef: ILEventDef With(Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILType]], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.EventAttributes], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef]], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILAttributes]) FSharp.Compiler.AbstractIL.IL+ILEventDef: ILMethodRef AddMethod FSharp.Compiler.AbstractIL.IL+ILEventDef: ILMethodRef RemoveMethod FSharp.Compiler.AbstractIL.IL+ILEventDef: ILMethodRef get_AddMethod() @@ -387,7 +1541,151 @@ FSharp.Compiler.AbstractIL.IL+ILEventDef: System.String Name FSharp.Compiler.AbstractIL.IL+ILEventDef: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILEventDef: System.String get_Name() FSharp.Compiler.AbstractIL.IL+ILEventDef: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILType], System.String, System.Reflection.EventAttributes, ILMethodRef, ILMethodRef, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef], ILAttributes) +FSharp.Compiler.AbstractIL.IL+ILEventDef: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILType], System.String, System.Reflection.EventAttributes, ILMethodRef, ILMethodRef, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef], ILAttributesStored, Int32) +FSharp.Compiler.AbstractIL.IL+ILEventDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILEventDef] AsList +FSharp.Compiler.AbstractIL.IL+ILEventDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILEventDef] LookupByName(System.String) +FSharp.Compiler.AbstractIL.IL+ILEventDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILEventDef] get_AsList() FSharp.Compiler.AbstractIL.IL+ILEventDefs: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILEventRef: Boolean Equals(ILEventRef) +FSharp.Compiler.AbstractIL.IL+ILEventRef: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILEventRef: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILEventRef: ILEventRef Create(ILTypeRef, System.String) +FSharp.Compiler.AbstractIL.IL+ILEventRef: ILTypeRef DeclaringTypeRef +FSharp.Compiler.AbstractIL.IL+ILEventRef: ILTypeRef get_DeclaringTypeRef() +FSharp.Compiler.AbstractIL.IL+ILEventRef: Int32 CompareTo(ILEventRef) +FSharp.Compiler.AbstractIL.IL+ILEventRef: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILEventRef: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILEventRef: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILEventRef: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILEventRef: System.String Name +FSharp.Compiler.AbstractIL.IL+ILEventRef: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILEventRef: System.String get_Name() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean Equals(ILExceptionClause) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean IsFault +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean IsFilterCatch +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean IsFinally +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean IsTypeCatch +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean get_IsFault() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean get_IsFilterCatch() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean get_IsFinally() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean get_IsTypeCatch() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Int32 CompareTo(ILExceptionClause) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: System.Tuple`2[System.Int32,System.Int32] Item +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: System.Tuple`2[System.Int32,System.Int32] get_Item() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean Equals(ILExceptionClause) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean IsFault +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean IsFilterCatch +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean IsFinally +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean IsTypeCatch +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean get_IsFault() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean get_IsFilterCatch() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean get_IsFinally() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean get_IsTypeCatch() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Int32 CompareTo(ILExceptionClause) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: System.Tuple`2[System.Int32,System.Int32] filterRange +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: System.Tuple`2[System.Int32,System.Int32] handlerRange +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: System.Tuple`2[System.Int32,System.Int32] get_filterRange() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: System.Tuple`2[System.Int32,System.Int32] get_handlerRange() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean Equals(ILExceptionClause) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean IsFault +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean IsFilterCatch +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean IsFinally +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean IsTypeCatch +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean get_IsFault() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean get_IsFilterCatch() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean get_IsFinally() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean get_IsTypeCatch() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Int32 CompareTo(ILExceptionClause) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: System.Tuple`2[System.Int32,System.Int32] Item +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: System.Tuple`2[System.Int32,System.Int32] get_Item() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Tags: Int32 Fault +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Tags: Int32 FilterCatch +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Tags: Int32 Finally +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Tags: Int32 TypeCatch +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean Equals(ILExceptionClause) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean IsFault +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean IsFilterCatch +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean IsFinally +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean IsTypeCatch +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean get_IsFault() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean get_IsFilterCatch() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean get_IsFinally() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean get_IsTypeCatch() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: ILType Item1 +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: ILType get_Item1() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Int32 CompareTo(ILExceptionClause) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: System.Tuple`2[System.Int32,System.Int32] Item2 +FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: System.Tuple`2[System.Int32,System.Int32] get_Item2() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean Equals(ILExceptionClause) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean IsFault +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean IsFilterCatch +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean IsFinally +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean IsTypeCatch +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean get_IsFault() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean get_IsFilterCatch() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean get_IsFinally() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean get_IsTypeCatch() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Tags +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: ILExceptionClause NewFault(System.Tuple`2[System.Int32,System.Int32]) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: ILExceptionClause NewFilterCatch(System.Tuple`2[System.Int32,System.Int32], System.Tuple`2[System.Int32,System.Int32]) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: ILExceptionClause NewFinally(System.Tuple`2[System.Int32,System.Int32]) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: ILExceptionClause NewTypeCatch(ILType, System.Tuple`2[System.Int32,System.Int32]) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Int32 CompareTo(ILExceptionClause) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILExceptionClause: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILExceptionSpec: ILExceptionClause Clause +FSharp.Compiler.AbstractIL.IL+ILExceptionSpec: ILExceptionClause get_Clause() +FSharp.Compiler.AbstractIL.IL+ILExceptionSpec: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILExceptionSpec: System.Tuple`2[System.Int32,System.Int32] Range +FSharp.Compiler.AbstractIL.IL+ILExceptionSpec: System.Tuple`2[System.Int32,System.Int32] get_Range() +FSharp.Compiler.AbstractIL.IL+ILExceptionSpec: Void .ctor(System.Tuple`2[System.Int32,System.Int32], ILExceptionClause) FSharp.Compiler.AbstractIL.IL+ILExportedTypeOrForwarder: Boolean IsForwarder FSharp.Compiler.AbstractIL.IL+ILExportedTypeOrForwarder: Boolean get_IsForwarder() FSharp.Compiler.AbstractIL.IL+ILExportedTypeOrForwarder: ILAttributes CustomAttrs @@ -413,6 +1711,9 @@ FSharp.Compiler.AbstractIL.IL+ILExportedTypesAndForwarders: Boolean Equals(Syste FSharp.Compiler.AbstractIL.IL+ILExportedTypesAndForwarders: Boolean Equals(System.Object, System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILExportedTypesAndForwarders: Int32 GetHashCode() FSharp.Compiler.AbstractIL.IL+ILExportedTypesAndForwarders: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILExportedTypesAndForwarders: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILExportedTypeOrForwarder] AsList +FSharp.Compiler.AbstractIL.IL+ILExportedTypesAndForwarders: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILExportedTypeOrForwarder] get_AsList() +FSharp.Compiler.AbstractIL.IL+ILExportedTypesAndForwarders: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILExportedTypeOrForwarder] TryFindByName(System.String) FSharp.Compiler.AbstractIL.IL+ILExportedTypesAndForwarders: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILFieldDef: Boolean IsInitOnly FSharp.Compiler.AbstractIL.IL+ILFieldDef: Boolean IsLiteral @@ -426,6 +1727,14 @@ FSharp.Compiler.AbstractIL.IL+ILFieldDef: Boolean get_IsStatic() FSharp.Compiler.AbstractIL.IL+ILFieldDef: Boolean get_NotSerialized() FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILAttributes CustomAttrs FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILAttributes get_CustomAttrs() +FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILFieldDef With(Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILType], Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.FieldAttributes], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpOption`1[System.Byte[]]], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldInit]], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpOption`1[System.Int32]], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILNativeType]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILAttributes]) +FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILFieldDef WithAccess(ILMemberAccess) +FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILFieldDef WithFieldMarshal(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILNativeType]) +FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILFieldDef WithInitOnly(Boolean) +FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILFieldDef WithLiteralDefaultValue(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldInit]) +FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILFieldDef WithNotSerialized(Boolean) +FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILFieldDef WithSpecialName(Boolean) +FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILFieldDef WithStatic(Boolean) FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILMemberAccess Access FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILMemberAccess get_Access() FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILType FieldType @@ -443,29 +1752,384 @@ FSharp.Compiler.AbstractIL.IL+ILFieldDef: System.Reflection.FieldAttributes get_ FSharp.Compiler.AbstractIL.IL+ILFieldDef: System.String Name FSharp.Compiler.AbstractIL.IL+ILFieldDef: System.String get_Name() FSharp.Compiler.AbstractIL.IL+ILFieldDef: Void .ctor(System.String, ILType, System.Reflection.FieldAttributes, Microsoft.FSharp.Core.FSharpOption`1[System.Byte[]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldInit], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILNativeType], ILAttributes) +FSharp.Compiler.AbstractIL.IL+ILFieldDef: Void .ctor(System.String, ILType, System.Reflection.FieldAttributes, Microsoft.FSharp.Core.FSharpOption`1[System.Byte[]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldInit], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILNativeType], ILAttributesStored, Int32) FSharp.Compiler.AbstractIL.IL+ILFieldDefs: Boolean Equals(ILFieldDefs) FSharp.Compiler.AbstractIL.IL+ILFieldDefs: Boolean Equals(System.Object) FSharp.Compiler.AbstractIL.IL+ILFieldDefs: Boolean Equals(System.Object, System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILFieldDefs: Int32 GetHashCode() FSharp.Compiler.AbstractIL.IL+ILFieldDefs: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILFieldDef] AsList +FSharp.Compiler.AbstractIL.IL+ILFieldDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILFieldDef] LookupByName(System.String) +FSharp.Compiler.AbstractIL.IL+ILFieldDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILFieldDef] get_AsList() FSharp.Compiler.AbstractIL.IL+ILFieldDefs: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean Equals(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsUInt8 FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean Item +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsUInt8() FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_Item() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Int32 CompareTo(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean Equals(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsUInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsUInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Int32 CompareTo(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: UInt16 Item FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: UInt16 get_Item() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean Equals(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsUInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsUInt8() FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Double Item FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Double get_Item() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Int32 CompareTo(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean Equals(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsUInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsUInt8() FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Int16 Item FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Int16 get_Item() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Int32 CompareTo(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean Equals(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsUInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsUInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Int32 CompareTo(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Int32 GetHashCode(System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Int32 Item +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Int32 get_Item() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean Equals(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsUInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsUInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Int32 CompareTo(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Int64 Item FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Int64 get_Item() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean Equals(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsUInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsUInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Int32 CompareTo(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: SByte Item FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: SByte get_Item() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean Equals(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsUInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsUInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Int32 CompareTo(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Single Item FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Single get_Item() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean Equals(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsUInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsUInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Int32 CompareTo(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: System.String Item +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: System.String get_Item() FSharp.Compiler.AbstractIL.IL+ILFieldInit+Tags: Int32 Bool FSharp.Compiler.AbstractIL.IL+ILFieldInit+Tags: Int32 Char @@ -481,14 +2145,170 @@ FSharp.Compiler.AbstractIL.IL+ILFieldInit+Tags: Int32 UInt16 FSharp.Compiler.AbstractIL.IL+ILFieldInit+Tags: Int32 UInt32 FSharp.Compiler.AbstractIL.IL+ILFieldInit+Tags: Int32 UInt64 FSharp.Compiler.AbstractIL.IL+ILFieldInit+Tags: Int32 UInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean Equals(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsUInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsUInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Int32 CompareTo(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: UInt16 Item FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: UInt16 get_Item() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean Equals(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsUInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsUInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Int32 CompareTo(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: UInt32 Item FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: UInt32 get_Item() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean Equals(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsUInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsUInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Int32 CompareTo(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: UInt64 Item FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: UInt64 get_Item() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean Equals(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsChar +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsString +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsUInt8 +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsChar() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsUInt8() FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Byte Item FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Byte get_Item() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Int32 CompareTo(ILFieldInit) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILFieldInit: Boolean Equals(ILFieldInit) FSharp.Compiler.AbstractIL.IL+ILFieldInit: Boolean Equals(System.Object) FSharp.Compiler.AbstractIL.IL+ILFieldInit: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -556,8 +2376,21 @@ FSharp.Compiler.AbstractIL.IL+ILFieldInit: Int32 GetHashCode() FSharp.Compiler.AbstractIL.IL+ILFieldInit: Int32 GetHashCode(System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILFieldInit: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILFieldInit: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILFieldInit: System.Object AsObject() FSharp.Compiler.AbstractIL.IL+ILFieldInit: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: System.Object AsObject() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: System.Object AsObject() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: System.Object AsObject() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: System.Object AsObject() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: System.Object AsObject() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: System.Object AsObject() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: System.Object AsObject() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: System.Object AsObject() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: System.Object AsObject() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: System.Object AsObject() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: System.Object AsObject() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: System.Object AsObject() +FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: System.Object AsObject() +FSharp.Compiler.AbstractIL.IL+ILFieldInit: System.Object AsObject() FSharp.Compiler.AbstractIL.IL+ILFieldRef: Boolean Equals(ILFieldRef) FSharp.Compiler.AbstractIL.IL+ILFieldRef: Boolean Equals(System.Object) FSharp.Compiler.AbstractIL.IL+ILFieldRef: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -643,6 +2476,11752 @@ FSharp.Compiler.AbstractIL.IL+ILGenericVariance: Int32 GetHashCode(System.Collec FSharp.Compiler.AbstractIL.IL+ILGenericVariance: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILGenericVariance: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILGenericVariance: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILGlobals: Boolean IsPossiblePrimaryAssemblyRef(ILAssemblyRef) +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILAssemblyRef get_primaryAssemblyRef() +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILAssemblyRef primaryAssemblyRef +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILScopeRef get_primaryAssemblyScopeRef() +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILScopeRef primaryAssemblyScopeRef +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Array() +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Bool() +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Byte() +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Char() +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Double() +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Int16() +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Int32() +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Int64() +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_IntPtr() +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Object() +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_SByte() +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Single() +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_String() +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Type() +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_TypedReference() +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_UInt16() +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_UInt32() +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_UInt64() +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_UIntPtr() +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Array +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Bool +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Byte +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Char +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Double +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Int16 +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Int32 +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Int64 +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_IntPtr +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Object +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_SByte +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Single +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_String +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Type +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_TypedReference +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_UInt16 +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_UInt32 +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_UInt64 +FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_UIntPtr +FSharp.Compiler.AbstractIL.IL+ILGlobals: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILGlobals: System.String get_primaryAssemblyName() +FSharp.Compiler.AbstractIL.IL+ILGlobals: System.String primaryAssemblyName +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: ILBasicType Item +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: ILBasicType get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: ILBasicType Item +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: ILBasicType get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: ILBasicType Item +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: ILBasicType get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: ILBasicType Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: ILBasicType get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: ILConst Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: ILConst get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: ILType Item +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: ILType get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Int32 Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Int32 Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Int32 get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Int32 get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: ILType Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: ILType get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Int32 Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Int32 get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: ILComparisonInstr Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: ILComparisonInstr get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Int32 Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Int32 get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: ILMethodSpec Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: ILMethodSpec get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: ILTailcall Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: ILTailcall get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]] Item3 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]] get_Item3() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: ILMethodSpec Item3 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: ILMethodSpec get_Item3() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: ILTailcall Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: ILTailcall get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: ILType Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: ILType get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]] Item4 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]] get_Item4() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: ILCallingSignature Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: ILCallingSignature get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: ILTailcall Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: ILTailcall get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]] Item3 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]] get_Item3() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: ILMethodSpec Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: ILMethodSpec get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: ILTailcall Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: ILTailcall get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]] Item3 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]] get_Item3() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: ILType Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: ILType get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: ILAlignment Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: ILAlignment get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: ILVolatility Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: ILVolatility get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: ILType Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: ILType get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: ILAlignment Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: ILAlignment get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: ILVolatility Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: ILVolatility get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: ILType Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: ILType get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: ILType Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: ILType get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: ILMethodSpec Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: ILMethodSpec get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: UInt16 Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: UInt16 get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: UInt16 Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: UInt16 get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: ILBasicType Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: ILBasicType get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: ILArrayShape Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: ILArrayShape get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: ILType Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: ILType get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: ILArrayShape Item3 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: ILArrayShape get_Item3() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: ILReadonly Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: ILReadonly get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: ILType Item4 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: ILType get_Item4() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: ILAlignment Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: ILAlignment get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: ILFieldSpec Item3 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: ILFieldSpec get_Item3() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: ILVolatility Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: ILVolatility get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: ILFieldSpec Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: ILFieldSpec get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: ILMethodSpec Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: ILMethodSpec get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: ILAlignment Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: ILAlignment get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: ILBasicType Item3 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: ILBasicType get_Item3() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: ILVolatility Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: ILVolatility get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: UInt16 Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: UInt16 get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: UInt16 Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: UInt16 get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: ILAlignment Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: ILAlignment get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: ILType Item3 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: ILType get_Item3() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: ILVolatility Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: ILVolatility get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: ILFieldSpec Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: ILFieldSpec get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: ILVolatility Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: ILVolatility get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: ILFieldSpec Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: ILFieldSpec get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: System.String Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: System.String get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: ILToken Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: ILToken get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: ILMethodSpec Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: ILMethodSpec get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Int32 Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Int32 get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: ILType Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: ILType get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: ILArrayShape Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: ILArrayShape get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: ILType Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: ILType get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: ILMethodSpec Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: ILMethodSpec get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]] Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]] get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: ILType Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: ILType get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: ILSourceMarker Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: ILSourceMarker get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: ILType Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: ILType get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: UInt16 Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: UInt16 get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: ILBasicType Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: ILBasicType get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: ILArrayShape Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: ILArrayShape get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: ILType Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: ILType get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: ILAlignment Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: ILAlignment get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: ILFieldSpec Item3 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: ILFieldSpec get_Item3() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: ILVolatility Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: ILVolatility get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: ILAlignment Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: ILAlignment get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: ILBasicType Item3 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: ILBasicType get_Item3() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: ILVolatility Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: ILVolatility get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: UInt16 Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: UInt16 get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: ILAlignment Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: ILAlignment get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: ILType Item3 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: ILType get_Item3() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: ILVolatility Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: ILVolatility get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: ILFieldSpec Item2 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: ILFieldSpec get_Item2() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: ILVolatility Item1 +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: ILVolatility get_Item1() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: ILType Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: ILType get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: ILType Item +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: ILType get_Item() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_add +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_and +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_div +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_not +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_or +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 EI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 EI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_box +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_br +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_break +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_call +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_calli +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_leave +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ret +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_starg +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_stind +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_switch +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_throw +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean Equals(ILInstr) +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_add +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_and +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_div +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_not +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_or +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsEI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsEI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_box +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_br +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_break +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_call +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_calli +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_leave +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ret +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_starg +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_stind +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_switch +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_throw +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_conv() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_conv_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_conv_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_ldc() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsEI_ilzero() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsEI_ldlen_multi() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_box() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_br() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_brcmp() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_break() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_call() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_callconstraint() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_calli() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_callvirt() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_castclass() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_cpblk() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_cpobj() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_initblk() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_initobj() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_isinst() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_jmp() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldarg() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldarga() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldelem() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldelema() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldfld() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldflda() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldftn() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldind() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldloc() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldloca() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldobj() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldsflda() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldstr() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldtoken() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldvirtftn() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_leave() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_mkrefany() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_newarr() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_newobj() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_refanyval() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_seqpoint() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_sizeof() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_starg() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_stelem() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_stelem_any() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_stfld() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_stind() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_stloc() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_stobj() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_stsfld() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_switch() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_unbox() +FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_unbox_any() +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_box +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_br +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_call +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any +FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+Tags +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_add +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_add_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_add_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_and +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_ceq +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_cgt +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_cgt_un +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_ckfinite +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_clt +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_clt_un +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_div +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_div_un +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_dup +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_ldnull +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_mul +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_mul_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_mul_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_neg +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_nop +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_not +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_or +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_pop +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_rem +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_rem_un +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_shl +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_shr +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_shr_un +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_sub +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_sub_ovf +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_sub_ovf_un +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_xor +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr I_arglist +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr I_break +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr I_endfilter +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr I_endfinally +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr I_ldlen +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr I_localloc +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr I_refanytype +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr I_ret +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr I_rethrow +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr I_throw +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewAI_conv(ILBasicType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewAI_conv_ovf(ILBasicType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewAI_conv_ovf_un(ILBasicType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewAI_ldc(ILBasicType, ILConst) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewEI_ilzero(ILType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewEI_ldlen_multi(Int32, Int32) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_box(ILType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_br(Int32) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_brcmp(ILComparisonInstr, Int32) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_call(ILTailcall, ILMethodSpec, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]]) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_callconstraint(ILTailcall, ILType, ILMethodSpec, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]]) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_calli(ILTailcall, ILCallingSignature, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]]) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_callvirt(ILTailcall, ILMethodSpec, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]]) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_castclass(ILType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_cpblk(ILAlignment, ILVolatility) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_cpobj(ILType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_initblk(ILAlignment, ILVolatility) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_initobj(ILType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_isinst(ILType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_jmp(ILMethodSpec) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldarg(UInt16) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldarga(UInt16) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldelem(ILBasicType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldelem_any(ILArrayShape, ILType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldelema(ILReadonly, Boolean, ILArrayShape, ILType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldfld(ILAlignment, ILVolatility, ILFieldSpec) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldflda(ILFieldSpec) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldftn(ILMethodSpec) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldind(ILAlignment, ILVolatility, ILBasicType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldloc(UInt16) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldloca(UInt16) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldobj(ILAlignment, ILVolatility, ILType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldsfld(ILVolatility, ILFieldSpec) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldsflda(ILFieldSpec) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldstr(System.String) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldtoken(ILToken) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldvirtftn(ILMethodSpec) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_leave(Int32) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_mkrefany(ILType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_newarr(ILArrayShape, ILType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_newobj(ILMethodSpec, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]]) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_refanyval(ILType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_seqpoint(ILSourceMarker) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_sizeof(ILType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_starg(UInt16) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_stelem(ILBasicType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_stelem_any(ILArrayShape, ILType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_stfld(ILAlignment, ILVolatility, ILFieldSpec) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_stind(ILAlignment, ILVolatility, ILBasicType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_stloc(UInt16) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_stobj(ILAlignment, ILVolatility, ILType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_stsfld(ILVolatility, ILFieldSpec) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_switch(Microsoft.FSharp.Collections.FSharpList`1[System.Int32]) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_unbox(ILType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_unbox_any(ILType) +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_add() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_add_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_add_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_and() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_ceq() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_cgt() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_cgt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_ckfinite() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_clt() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_clt_un() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_div() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_div_un() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_dup() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_ldnull() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_mul() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_mul_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_mul_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_neg() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_nop() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_not() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_or() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_pop() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_rem() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_rem_un() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_shl() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_shr() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_shr_un() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_sub() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_sub_ovf() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_sub_ovf_un() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_xor() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_I_arglist() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_I_break() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_I_endfilter() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_I_endfinally() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_I_ldlen() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_I_localloc() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_I_refanytype() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_I_ret() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_I_rethrow() +FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_I_throw() +FSharp.Compiler.AbstractIL.IL+ILInstr: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILInstr: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILInstr: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILInstr: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILInstr: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILLazyMethodBody: Boolean Equals(ILLazyMethodBody) +FSharp.Compiler.AbstractIL.IL+ILLazyMethodBody: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILLazyMethodBody: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILLazyMethodBody: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILLazyMethodBody: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILLazyMethodBody: MethodBody Contents +FSharp.Compiler.AbstractIL.IL+ILLazyMethodBody: MethodBody get_Contents() +FSharp.Compiler.AbstractIL.IL+ILLazyMethodBody: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILLocal: Boolean IsPinned +FSharp.Compiler.AbstractIL.IL+ILLocal: Boolean get_IsPinned() +FSharp.Compiler.AbstractIL.IL+ILLocal: ILType Type +FSharp.Compiler.AbstractIL.IL+ILLocal: ILType get_Type() +FSharp.Compiler.AbstractIL.IL+ILLocal: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.String,System.Int32,System.Int32]] DebugInfo +FSharp.Compiler.AbstractIL.IL+ILLocal: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.String,System.Int32,System.Int32]] get_DebugInfo() +FSharp.Compiler.AbstractIL.IL+ILLocal: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILLocal: Void .ctor(ILType, Boolean, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.String,System.Int32,System.Int32]]) +FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocalDebugMapping] DebugMappings +FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocalDebugMapping] get_DebugMappings() +FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo: System.Tuple`2[System.Int32,System.Int32] Range +FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo: System.Tuple`2[System.Int32,System.Int32] get_Range() +FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo: Void .ctor(System.Tuple`2[System.Int32,System.Int32], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocalDebugMapping]) +FSharp.Compiler.AbstractIL.IL+ILLocalDebugMapping: Int32 LocalIndex +FSharp.Compiler.AbstractIL.IL+ILLocalDebugMapping: Int32 get_LocalIndex() +FSharp.Compiler.AbstractIL.IL+ILLocalDebugMapping: System.String LocalName +FSharp.Compiler.AbstractIL.IL+ILLocalDebugMapping: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILLocalDebugMapping: System.String get_LocalName() +FSharp.Compiler.AbstractIL.IL+ILLocalDebugMapping: Void .ctor(Int32, System.String) +FSharp.Compiler.AbstractIL.IL+ILLocalsAllocator: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocal] Close() +FSharp.Compiler.AbstractIL.IL+ILLocalsAllocator: UInt16 AllocLocal(ILLocal) +FSharp.Compiler.AbstractIL.IL+ILLocalsAllocator: Void .ctor(Int32) FSharp.Compiler.AbstractIL.IL+ILMemberAccess+Tags: Int32 Assembly FSharp.Compiler.AbstractIL.IL+ILMemberAccess+Tags: Int32 CompilerControlled FSharp.Compiler.AbstractIL.IL+ILMemberAccess+Tags: Int32 Family @@ -690,6 +14269,22 @@ FSharp.Compiler.AbstractIL.IL+ILMemberAccess: Int32 GetHashCode(System.Collectio FSharp.Compiler.AbstractIL.IL+ILMemberAccess: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILMemberAccess: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILMemberAccess: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILMethodBody: Boolean AggressiveInlining +FSharp.Compiler.AbstractIL.IL+ILMethodBody: Boolean IsZeroInit +FSharp.Compiler.AbstractIL.IL+ILMethodBody: Boolean NoInlining +FSharp.Compiler.AbstractIL.IL+ILMethodBody: Boolean get_AggressiveInlining() +FSharp.Compiler.AbstractIL.IL+ILMethodBody: Boolean get_IsZeroInit() +FSharp.Compiler.AbstractIL.IL+ILMethodBody: Boolean get_NoInlining() +FSharp.Compiler.AbstractIL.IL+ILMethodBody: ILCode Code +FSharp.Compiler.AbstractIL.IL+ILMethodBody: ILCode get_Code() +FSharp.Compiler.AbstractIL.IL+ILMethodBody: Int32 MaxStack +FSharp.Compiler.AbstractIL.IL+ILMethodBody: Int32 get_MaxStack() +FSharp.Compiler.AbstractIL.IL+ILMethodBody: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocal] Locals +FSharp.Compiler.AbstractIL.IL+ILMethodBody: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocal] get_Locals() +FSharp.Compiler.AbstractIL.IL+ILMethodBody: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSourceMarker] SourceMarker +FSharp.Compiler.AbstractIL.IL+ILMethodBody: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSourceMarker] get_SourceMarker() +FSharp.Compiler.AbstractIL.IL+ILMethodBody: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILMethodBody: Void .ctor(Boolean, Int32, Boolean, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocal], ILCode, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSourceMarker]) FSharp.Compiler.AbstractIL.IL+ILMethodDef: Boolean HasSecurity FSharp.Compiler.AbstractIL.IL+ILMethodDef: Boolean IsAbstract FSharp.Compiler.AbstractIL.IL+ILMethodDef: Boolean IsAggressiveInline @@ -746,18 +14341,35 @@ FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILCallingConv CallingConv FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILCallingConv get_CallingConv() FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILCallingSignature CallingSignature FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILCallingSignature get_CallingSignature() +FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILLazyMethodBody Body +FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILLazyMethodBody get_Body() FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMemberAccess Access FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMemberAccess get_Access() FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodBody MethodBody FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodBody get_MethodBody() +FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef With(Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.MethodAttributes], Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.MethodImplAttributes], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILCallingConv], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILReturn], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILLazyMethodBody], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSecurityDecls], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILAttributes]) +FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithAbstract(Boolean) +FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithAccess(ILMemberAccess) +FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithAggressiveInlining(Boolean) +FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithFinal(Boolean) +FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithHideBySig() +FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithHideBySig(Boolean) +FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithNewSlot +FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithNoInlining(Boolean) +FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithPInvoke(Boolean) +FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithPreserveSig(Boolean) +FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithRuntime(Boolean) +FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithSecurity(Boolean) +FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithSpecialName +FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithSynchronized(Boolean) +FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef get_WithNewSlot() +FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef get_WithSpecialName() FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILReturn Return FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILReturn get_Return() FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILSecurityDecls SecurityDecls FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILSecurityDecls get_SecurityDecls() FSharp.Compiler.AbstractIL.IL+ILMethodDef: Int32 MaxStack FSharp.Compiler.AbstractIL.IL+ILMethodDef: Int32 get_MaxStack() -FSharp.Compiler.AbstractIL.IL+ILMethodDef: MethodBody Body -FSharp.Compiler.AbstractIL.IL+ILMethodDef: MethodBody get_Body() FSharp.Compiler.AbstractIL.IL+ILMethodDef: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef] GenericParams FSharp.Compiler.AbstractIL.IL+ILMethodDef: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef] get_GenericParams() FSharp.Compiler.AbstractIL.IL+ILMethodDef: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocal] Locals @@ -774,7 +14386,8 @@ FSharp.Compiler.AbstractIL.IL+ILMethodDef: System.Reflection.MethodImplAttribute FSharp.Compiler.AbstractIL.IL+ILMethodDef: System.Reflection.MethodImplAttributes get_ImplAttributes() FSharp.Compiler.AbstractIL.IL+ILMethodDef: System.String Name FSharp.Compiler.AbstractIL.IL+ILMethodDef: System.String get_Name() -FSharp.Compiler.AbstractIL.IL+ILMethodDef: Void .ctor(System.String, System.Reflection.MethodAttributes, System.Reflection.MethodImplAttributes, ILCallingConv, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], ILReturn, System.Lazy`1[FSharp.Compiler.AbstractIL.IL+MethodBody], Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef], ILSecurityDecls, ILAttributes) +FSharp.Compiler.AbstractIL.IL+ILMethodDef: Void .ctor(System.String, System.Reflection.MethodAttributes, System.Reflection.MethodImplAttributes, ILCallingConv, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], ILReturn, ILLazyMethodBody, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef], ILSecurityDecls, ILAttributes) +FSharp.Compiler.AbstractIL.IL+ILMethodDef: Void .ctor(System.String, System.Reflection.MethodAttributes, System.Reflection.MethodImplAttributes, ILCallingConv, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], ILReturn, ILLazyMethodBody, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef], ILSecurityDeclsStored, ILAttributesStored, Int32) FSharp.Compiler.AbstractIL.IL+ILMethodDefs: ILMethodDef[] AsArray FSharp.Compiler.AbstractIL.IL+ILMethodDefs: ILMethodDef[] get_AsArray() FSharp.Compiler.AbstractIL.IL+ILMethodDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILMethodDef] AsList @@ -800,6 +14413,8 @@ FSharp.Compiler.AbstractIL.IL+ILMethodImplDefs: Boolean Equals(System.Object) FSharp.Compiler.AbstractIL.IL+ILMethodImplDefs: Boolean Equals(System.Object, System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILMethodImplDefs: Int32 GetHashCode() FSharp.Compiler.AbstractIL.IL+ILMethodImplDefs: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILMethodImplDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILMethodImplDef] AsList +FSharp.Compiler.AbstractIL.IL+ILMethodImplDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILMethodImplDef] get_AsList() FSharp.Compiler.AbstractIL.IL+ILMethodImplDefs: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILMethodRef: Boolean Equals(ILMethodRef) FSharp.Compiler.AbstractIL.IL+ILMethodRef: Boolean Equals(System.Object) @@ -853,6 +14468,24 @@ FSharp.Compiler.AbstractIL.IL+ILMethodSpec: Microsoft.FSharp.Collections.FSharpL FSharp.Compiler.AbstractIL.IL+ILMethodSpec: System.String Name FSharp.Compiler.AbstractIL.IL+ILMethodSpec: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILMethodSpec: System.String get_Name() +FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean Equals(ILMethodVirtualInfo) +FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean IsAbstract +FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean IsCheckAccessOnOverride +FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean IsFinal +FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean IsNewSlot +FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean get_IsAbstract() +FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean get_IsCheckAccessOnOverride() +FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean get_IsFinal() +FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean get_IsNewSlot() +FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Int32 CompareTo(ILMethodVirtualInfo) +FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Void .ctor(Boolean, Boolean, Boolean, Boolean) FSharp.Compiler.AbstractIL.IL+ILModuleDef: Boolean HasManifest FSharp.Compiler.AbstractIL.IL+ILModuleDef: Boolean Is32Bit FSharp.Compiler.AbstractIL.IL+ILModuleDef: Boolean Is32BitPreferred @@ -919,35 +14552,523 @@ FSharp.Compiler.AbstractIL.IL+ILModuleRef: Microsoft.FSharp.Core.FSharpOption`1[ FSharp.Compiler.AbstractIL.IL+ILModuleRef: System.String Name FSharp.Compiler.AbstractIL.IL+ILModuleRef: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILModuleRef: System.String get_Name() +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Boolean Equals(ILNativeResource) +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Boolean IsIn +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Boolean IsOut +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Boolean get_IsIn() +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Boolean get_IsOut() +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 CompareTo(ILNativeResource) +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 get_linkedResourceBase() +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 get_linkedResourceLength() +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 get_linkedResourceStart() +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 linkedResourceBase +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 linkedResourceLength +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 linkedResourceStart +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: System.String fileName +FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: System.String get_fileName() +FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Boolean Equals(ILNativeResource) +FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Boolean IsIn +FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Boolean IsOut +FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Boolean get_IsIn() +FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Boolean get_IsOut() +FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Byte[] get_unlinkedResource() +FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Byte[] unlinkedResource +FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Int32 CompareTo(ILNativeResource) +FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILNativeResource+Tags: Int32 In +FSharp.Compiler.AbstractIL.IL+ILNativeResource+Tags: Int32 Out FSharp.Compiler.AbstractIL.IL+ILNativeResource: Boolean Equals(ILNativeResource) FSharp.Compiler.AbstractIL.IL+ILNativeResource: Boolean Equals(System.Object) FSharp.Compiler.AbstractIL.IL+ILNativeResource: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeResource: Boolean IsIn +FSharp.Compiler.AbstractIL.IL+ILNativeResource: Boolean IsOut +FSharp.Compiler.AbstractIL.IL+ILNativeResource: Boolean get_IsIn() +FSharp.Compiler.AbstractIL.IL+ILNativeResource: Boolean get_IsOut() +FSharp.Compiler.AbstractIL.IL+ILNativeResource: FSharp.Compiler.AbstractIL.IL+ILNativeResource+In +FSharp.Compiler.AbstractIL.IL+ILNativeResource: FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out +FSharp.Compiler.AbstractIL.IL+ILNativeResource: FSharp.Compiler.AbstractIL.IL+ILNativeResource+Tags +FSharp.Compiler.AbstractIL.IL+ILNativeResource: ILNativeResource NewIn(System.String, Int32, Int32, Int32) +FSharp.Compiler.AbstractIL.IL+ILNativeResource: ILNativeResource NewOut(Byte[]) FSharp.Compiler.AbstractIL.IL+ILNativeResource: Int32 CompareTo(ILNativeResource) FSharp.Compiler.AbstractIL.IL+ILNativeResource: Int32 CompareTo(System.Object) FSharp.Compiler.AbstractIL.IL+ILNativeResource: Int32 CompareTo(System.Object, System.Collections.IComparer) FSharp.Compiler.AbstractIL.IL+ILNativeResource: Int32 GetHashCode() FSharp.Compiler.AbstractIL.IL+ILNativeResource: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeResource: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILNativeResource: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILNativeResource: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean Equals(ILNativeType) +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsANSIBSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsAsAny +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsBSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsByValStr +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsByte +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsCurrency +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsCustom +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsEmpty +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsError +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsFixedArray +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsFixedSysString +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsIDispatch +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsIUnknown +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsInt +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsInterface +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsLPSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsLPSTRUCT +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsLPTSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsLPUTF8STR +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsLPWSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsMethod +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsSafeArray +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsStruct +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsTBSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsUInt +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsVariantBool +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsVoid +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsANSIBSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsAsAny() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsBSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsByValStr() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsByte() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsCurrency() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsCustom() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsEmpty() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsError() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsFixedArray() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsFixedSysString() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsIDispatch() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsIUnknown() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsInt() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsInterface() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsLPSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsLPSTRUCT() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsLPTSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsLPUTF8STR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsLPWSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsMethod() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsSafeArray() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsStruct() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsTBSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsUInt() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsVariantBool() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsVoid() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Int32 CompareTo(ILNativeType) +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILNativeType] Item1 FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILNativeType] get_Item1() FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Int32,Microsoft.FSharp.Core.FSharpOption`1[System.Int32]]] Item2 FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Int32,Microsoft.FSharp.Core.FSharpOption`1[System.Int32]]] get_Item2() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean Equals(ILNativeType) +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsANSIBSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsAsAny +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsBSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsByValStr +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsByte +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsCurrency +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsCustom +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsEmpty +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsError +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsFixedArray +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsFixedSysString +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsIDispatch +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsIUnknown +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsInt +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsInterface +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsLPSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsLPSTRUCT +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsLPTSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsLPUTF8STR +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsLPWSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsMethod +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsSafeArray +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsStruct +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsTBSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsUInt +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsVariantBool +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsVoid +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsANSIBSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsAsAny() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsBSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsByValStr() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsByte() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsCurrency() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsCustom() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsEmpty() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsError() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsFixedArray() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsFixedSysString() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsIDispatch() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsIUnknown() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsInt() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsInterface() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsLPSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsLPSTRUCT() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsLPTSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsLPUTF8STR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsLPWSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsMethod() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsSafeArray() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsStruct() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsTBSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsUInt() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsVariantBool() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsVoid() FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Byte[] Item1 FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Byte[] cookieString FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Byte[] get_Item1() FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Byte[] get_cookieString() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Int32 CompareTo(ILNativeType) +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: System.String nativeTypeName FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: System.String custMarshallerName -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: System.String get_custMarshallerName() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: System.String get_nativeTypeName() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: System.String nativeTypeName +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: System.String get_custMarshallerName() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean Equals(ILNativeType) +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsANSIBSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsAsAny +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsBSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsByValStr +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsByte +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsCurrency +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsCustom +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsEmpty +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsError +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsFixedArray +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsFixedSysString +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsIDispatch +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsIUnknown +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsInt +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsInterface +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsLPSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsLPSTRUCT +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsLPTSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsLPUTF8STR +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsLPWSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsMethod +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsSafeArray +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsStruct +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsTBSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsUInt +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsVariantBool +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsVoid +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsANSIBSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsAsAny() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsBSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsByValStr() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsByte() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsCurrency() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsCustom() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsEmpty() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsError() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsFixedArray() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsFixedSysString() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsIDispatch() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsIUnknown() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsInt() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsInterface() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsLPSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsLPSTRUCT() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsLPTSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsLPUTF8STR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsLPWSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsMethod() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsSafeArray() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsStruct() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsTBSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsUInt() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsVariantBool() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsVoid() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Int32 CompareTo(ILNativeType) +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Int32 GetHashCode(System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Int32 Item +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Int32 get_Item() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean Equals(ILNativeType) +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsANSIBSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsAsAny +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsBSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsByValStr +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsByte +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsCurrency +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsCustom +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsEmpty +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsError +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsFixedArray +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsFixedSysString +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsIDispatch +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsIUnknown +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsInt +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsInterface +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsLPSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsLPSTRUCT +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsLPTSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsLPUTF8STR +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsLPWSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsMethod +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsSafeArray +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsStruct +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsTBSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsUInt +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsVariantBool +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsVoid +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsANSIBSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsAsAny() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsBSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsByValStr() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsByte() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsCurrency() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsCustom() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsEmpty() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsError() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsFixedArray() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsFixedSysString() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsIDispatch() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsIUnknown() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsInt() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsInterface() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsLPSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsLPSTRUCT() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsLPTSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsLPUTF8STR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsLPWSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsMethod() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsSafeArray() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsStruct() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsTBSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsUInt() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsVariantBool() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsVoid() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Int32 CompareTo(ILNativeType) +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Int32 GetHashCode(System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Int32 Item +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Int32 get_Item() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean Equals(ILNativeType) +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsANSIBSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsAsAny +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsBSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsByValStr +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsByte +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsCurrency +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsCustom +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsEmpty +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsError +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsFixedArray +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsFixedSysString +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsIDispatch +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsIUnknown +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsInt +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsInterface +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsLPSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsLPSTRUCT +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsLPTSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsLPUTF8STR +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsLPWSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsMethod +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsSafeArray +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsStruct +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsTBSTR +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsUInt +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsVariantBool +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsVoid +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsANSIBSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsAsAny() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsBSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsByValStr() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsByte() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsCurrency() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsCustom() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsEmpty() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsError() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsFixedArray() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsFixedSysString() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsIDispatch() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsIUnknown() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsInt() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsInterface() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsLPSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsLPSTRUCT() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsLPTSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsLPUTF8STR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsLPWSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsMethod() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsSafeArray() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsStruct() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsTBSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsUInt() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsVariantBool() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsVoid() FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: ILNativeVariant Item1 FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: ILNativeVariant get_Item1() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Int32 CompareTo(ILNativeType) +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Microsoft.FSharp.Core.FSharpOption`1[System.String] Item2 FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Item2() +FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILNativeType+Tags: Int32 ANSIBSTR FSharp.Compiler.AbstractIL.IL+ILNativeType+Tags: Int32 Array FSharp.Compiler.AbstractIL.IL+ILNativeType+Tags: Int32 AsAny @@ -1150,6 +15271,541 @@ FSharp.Compiler.AbstractIL.IL+ILNativeType: Int32 GetHashCode(System.Collections FSharp.Compiler.AbstractIL.IL+ILNativeType: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILNativeType: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILNativeType: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean Equals(ILNativeVariant) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsBSTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsBlob +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsBlobObject +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsByref +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsCArray +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsCF +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsCLSID +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsCurrency +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsDate +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsDecimal +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsEmpty +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsError +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsFileTime +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsHRESULT +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsIDispatch +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsIUnknown +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsInt +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsLPSTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsLPWSTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsPTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsRecord +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsSafeArray +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsStorage +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsStoredObject +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsStream +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsStreamedObject +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsUInt +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsUInt8 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsUserDefined +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsVariant +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsVector +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsVoid +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsBSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsBlob() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsBlobObject() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsByref() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsCArray() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsCF() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsCLSID() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsCurrency() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsDate() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsDecimal() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsEmpty() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsError() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsFileTime() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsHRESULT() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsIDispatch() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsIUnknown() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsInt() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsLPSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsLPWSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsPTR() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsRecord() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsSafeArray() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsStorage() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsStoredObject() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsStream() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsStreamedObject() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsUInt() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsUInt8() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsUserDefined() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsVariant() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsVector() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsVoid() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: ILNativeVariant Item +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: ILNativeVariant get_Item() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Int32 CompareTo(ILNativeVariant) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean Equals(ILNativeVariant) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsBSTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsBlob +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsBlobObject +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsByref +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsCArray +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsCF +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsCLSID +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsCurrency +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsDate +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsDecimal +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsEmpty +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsError +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsFileTime +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsHRESULT +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsIDispatch +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsIUnknown +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsInt +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsLPSTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsLPWSTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsPTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsRecord +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsSafeArray +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsStorage +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsStoredObject +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsStream +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsStreamedObject +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsUInt +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsUInt8 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsUserDefined +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsVariant +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsVector +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsVoid +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsBSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsBlob() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsBlobObject() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsByref() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsCArray() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsCF() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsCLSID() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsCurrency() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsDate() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsDecimal() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsEmpty() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsError() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsFileTime() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsHRESULT() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsIDispatch() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsIUnknown() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsInt() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsLPSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsLPWSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsPTR() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsRecord() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsSafeArray() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsStorage() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsStoredObject() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsStream() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsStreamedObject() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsUInt() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsUInt8() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsUserDefined() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsVariant() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsVector() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsVoid() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: ILNativeVariant Item +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: ILNativeVariant get_Item() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Int32 CompareTo(ILNativeVariant) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Array +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 BSTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Blob +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 BlobObject +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Bool +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Byref +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 CArray +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 CF +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 CLSID +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Currency +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Date +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Decimal +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Double +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Empty +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Error +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 FileTime +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 HRESULT +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 IDispatch +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 IUnknown +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Int +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Int16 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Int32 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Int64 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Int8 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 LPSTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 LPWSTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Null +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 PTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Record +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 SafeArray +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Single +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Storage +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 StoredObject +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Stream +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 StreamedObject +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 UInt +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 UInt16 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 UInt32 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 UInt64 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 UInt8 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 UserDefined +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Variant +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Vector +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Void +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean Equals(ILNativeVariant) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsBSTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsBlob +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsBlobObject +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsByref +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsCArray +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsCF +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsCLSID +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsCurrency +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsDate +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsDecimal +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsEmpty +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsError +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsFileTime +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsHRESULT +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsIDispatch +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsIUnknown +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsInt +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsLPSTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsLPWSTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsPTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsRecord +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsSafeArray +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsStorage +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsStoredObject +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsStream +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsStreamedObject +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsUInt +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsUInt8 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsUserDefined +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsVariant +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsVector +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsVoid +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsBSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsBlob() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsBlobObject() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsByref() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsCArray() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsCF() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsCLSID() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsCurrency() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsDate() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsDecimal() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsEmpty() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsError() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsFileTime() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsHRESULT() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsIDispatch() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsIUnknown() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsInt() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsLPSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsLPWSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsPTR() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsRecord() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsSafeArray() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsStorage() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsStoredObject() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsStream() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsStreamedObject() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsUInt() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsUInt8() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsUserDefined() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsVariant() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsVector() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsVoid() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: ILNativeVariant Item +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: ILNativeVariant get_Item() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Int32 CompareTo(ILNativeVariant) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean Equals(ILNativeVariant) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsBSTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsBlob +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsBlobObject +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsBool +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsByref +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsCArray +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsCF +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsCLSID +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsCurrency +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsDate +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsDecimal +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsDouble +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsEmpty +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsError +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsFileTime +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsHRESULT +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsIDispatch +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsIUnknown +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsInt +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsInt16 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsInt32 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsInt64 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsInt8 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsLPSTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsLPWSTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsNull +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsPTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsRecord +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsSafeArray +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsSingle +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsStorage +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsStoredObject +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsStream +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsStreamedObject +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsUInt +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsUInt16 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsUInt32 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsUInt64 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsUInt8 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsUserDefined +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsVariant +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsVector +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsVoid +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsBSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsBlob() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsBlobObject() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsBool() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsByref() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsCArray() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsCF() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsCLSID() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsCurrency() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsDate() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsDecimal() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsDouble() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsEmpty() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsError() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsFileTime() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsHRESULT() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsIDispatch() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsIUnknown() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsInt() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsInt16() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsInt32() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsInt64() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsInt8() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsLPSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsLPWSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsNull() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsPTR() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsRecord() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsSafeArray() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsSingle() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsStorage() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsStoredObject() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsStream() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsStreamedObject() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsUInt() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsUInt16() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsUInt32() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsUInt64() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsUInt8() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsUserDefined() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsVariant() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsVector() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsVoid() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant BSTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Blob +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant BlobObject +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Bool +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant CArray +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant CF +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant CLSID +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Currency +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Date +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Decimal +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Double +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Empty +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Error +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant FileTime +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant HRESULT +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant IDispatch +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant IUnknown +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Int +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Int16 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Int32 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Int64 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Int8 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant LPSTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant LPWSTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant NewArray(ILNativeVariant) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant NewByref(ILNativeVariant) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant NewVector(ILNativeVariant) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Null +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant PTR +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Record +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant SafeArray +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Single +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Storage +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant StoredObject +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Stream +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant StreamedObject +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant UInt +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant UInt16 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant UInt32 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant UInt64 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant UInt8 +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant UserDefined +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Variant +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Void +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_BSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Blob() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_BlobObject() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Bool() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_CArray() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_CF() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_CLSID() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Currency() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Date() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Decimal() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Double() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Empty() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Error() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_FileTime() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_HRESULT() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_IDispatch() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_IUnknown() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Int() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Int16() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Int32() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Int64() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Int8() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_LPSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_LPWSTR() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Null() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_PTR() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Record() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_SafeArray() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Single() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Storage() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_StoredObject() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Stream() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_StreamedObject() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_UInt() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_UInt16() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_UInt32() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_UInt64() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_UInt8() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_UserDefined() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Variant() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Void() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Int32 CompareTo(ILNativeVariant) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILNativeVariant: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILNestedExportedType: ILAttributes CustomAttrs FSharp.Compiler.AbstractIL.IL+ILNestedExportedType: ILAttributes get_CustomAttrs() FSharp.Compiler.AbstractIL.IL+ILNestedExportedType: ILAttributesStored CustomAttrsStored @@ -1169,7 +15825,29 @@ FSharp.Compiler.AbstractIL.IL+ILNestedExportedTypes: Boolean Equals(System.Objec FSharp.Compiler.AbstractIL.IL+ILNestedExportedTypes: Boolean Equals(System.Object, System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILNestedExportedTypes: Int32 GetHashCode() FSharp.Compiler.AbstractIL.IL+ILNestedExportedTypes: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNestedExportedTypes: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILNestedExportedType] AsList +FSharp.Compiler.AbstractIL.IL+ILNestedExportedTypes: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILNestedExportedType] get_AsList() FSharp.Compiler.AbstractIL.IL+ILNestedExportedTypes: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: Boolean Equals(ILOverridesSpec) +FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: ILMethodRef Item1 +FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: ILMethodRef MethodRef +FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: ILMethodRef get_Item1() +FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: ILMethodRef get_MethodRef() +FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: ILOverridesSpec NewOverridesSpec(ILMethodRef, ILType) +FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: ILType DeclaringType +FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: ILType Item2 +FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: ILType get_DeclaringType() +FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: ILType get_Item2() +FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: Int32 CompareTo(ILOverridesSpec) +FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILParameter: Boolean IsIn FSharp.Compiler.AbstractIL.IL+ILParameter: Boolean IsOptional FSharp.Compiler.AbstractIL.IL+ILParameter: Boolean IsOut @@ -1192,14 +15870,32 @@ FSharp.Compiler.AbstractIL.IL+ILParameter: Microsoft.FSharp.Core.FSharpOption`1[ FSharp.Compiler.AbstractIL.IL+ILParameter: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Name() FSharp.Compiler.AbstractIL.IL+ILParameter: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILParameter: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[System.String], ILType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldInit], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILNativeType], Boolean, Boolean, Boolean, ILAttributesStored, Int32) +FSharp.Compiler.AbstractIL.IL+ILPlatform+Tags: Int32 AMD64 +FSharp.Compiler.AbstractIL.IL+ILPlatform+Tags: Int32 IA64 +FSharp.Compiler.AbstractIL.IL+ILPlatform+Tags: Int32 X86 FSharp.Compiler.AbstractIL.IL+ILPlatform: Boolean Equals(ILPlatform) FSharp.Compiler.AbstractIL.IL+ILPlatform: Boolean Equals(System.Object) FSharp.Compiler.AbstractIL.IL+ILPlatform: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILPlatform: Boolean IsAMD64 +FSharp.Compiler.AbstractIL.IL+ILPlatform: Boolean IsIA64 +FSharp.Compiler.AbstractIL.IL+ILPlatform: Boolean IsX86 +FSharp.Compiler.AbstractIL.IL+ILPlatform: Boolean get_IsAMD64() +FSharp.Compiler.AbstractIL.IL+ILPlatform: Boolean get_IsIA64() +FSharp.Compiler.AbstractIL.IL+ILPlatform: Boolean get_IsX86() +FSharp.Compiler.AbstractIL.IL+ILPlatform: FSharp.Compiler.AbstractIL.IL+ILPlatform+Tags +FSharp.Compiler.AbstractIL.IL+ILPlatform: ILPlatform AMD64 +FSharp.Compiler.AbstractIL.IL+ILPlatform: ILPlatform IA64 +FSharp.Compiler.AbstractIL.IL+ILPlatform: ILPlatform X86 +FSharp.Compiler.AbstractIL.IL+ILPlatform: ILPlatform get_AMD64() +FSharp.Compiler.AbstractIL.IL+ILPlatform: ILPlatform get_IA64() +FSharp.Compiler.AbstractIL.IL+ILPlatform: ILPlatform get_X86() FSharp.Compiler.AbstractIL.IL+ILPlatform: Int32 CompareTo(ILPlatform) FSharp.Compiler.AbstractIL.IL+ILPlatform: Int32 CompareTo(System.Object) FSharp.Compiler.AbstractIL.IL+ILPlatform: Int32 CompareTo(System.Object, System.Collections.IComparer) FSharp.Compiler.AbstractIL.IL+ILPlatform: Int32 GetHashCode() FSharp.Compiler.AbstractIL.IL+ILPlatform: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILPlatform: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILPlatform: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILPlatform: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILPreTypeDef: ILTypeDef GetTypeDef() FSharp.Compiler.AbstractIL.IL+ILPreTypeDef: Microsoft.FSharp.Collections.FSharpList`1[System.String] Namespace @@ -1212,6 +15908,7 @@ FSharp.Compiler.AbstractIL.IL+ILPropertyDef: Boolean get_IsRTSpecialName() FSharp.Compiler.AbstractIL.IL+ILPropertyDef: Boolean get_IsSpecialName() FSharp.Compiler.AbstractIL.IL+ILPropertyDef: ILAttributes CustomAttrs FSharp.Compiler.AbstractIL.IL+ILPropertyDef: ILAttributes get_CustomAttrs() +FSharp.Compiler.AbstractIL.IL+ILPropertyDef: ILPropertyDef With(Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.PropertyAttributes], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef]], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILThisConvention], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILType], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldInit]], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILAttributes]) FSharp.Compiler.AbstractIL.IL+ILPropertyDef: ILThisConvention CallingConv FSharp.Compiler.AbstractIL.IL+ILPropertyDef: ILThisConvention get_CallingConv() FSharp.Compiler.AbstractIL.IL+ILPropertyDef: ILType PropertyType @@ -1230,7 +15927,100 @@ FSharp.Compiler.AbstractIL.IL+ILPropertyDef: System.String Name FSharp.Compiler.AbstractIL.IL+ILPropertyDef: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILPropertyDef: System.String get_Name() FSharp.Compiler.AbstractIL.IL+ILPropertyDef: Void .ctor(System.String, System.Reflection.PropertyAttributes, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef], ILThisConvention, ILType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldInit], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILAttributes) +FSharp.Compiler.AbstractIL.IL+ILPropertyDef: Void .ctor(System.String, System.Reflection.PropertyAttributes, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef], ILThisConvention, ILType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldInit], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILAttributesStored, Int32) +FSharp.Compiler.AbstractIL.IL+ILPropertyDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILPropertyDef] AsList +FSharp.Compiler.AbstractIL.IL+ILPropertyDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILPropertyDef] LookupByName(System.String) +FSharp.Compiler.AbstractIL.IL+ILPropertyDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILPropertyDef] get_AsList() FSharp.Compiler.AbstractIL.IL+ILPropertyDefs: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILPropertyRef: Boolean Equals(ILPropertyRef) +FSharp.Compiler.AbstractIL.IL+ILPropertyRef: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILPropertyRef: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILPropertyRef: ILPropertyRef Create(ILTypeRef, System.String) +FSharp.Compiler.AbstractIL.IL+ILPropertyRef: ILTypeRef DeclaringTypeRef +FSharp.Compiler.AbstractIL.IL+ILPropertyRef: ILTypeRef get_DeclaringTypeRef() +FSharp.Compiler.AbstractIL.IL+ILPropertyRef: Int32 CompareTo(ILPropertyRef) +FSharp.Compiler.AbstractIL.IL+ILPropertyRef: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILPropertyRef: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILPropertyRef: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILPropertyRef: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILPropertyRef: System.String Name +FSharp.Compiler.AbstractIL.IL+ILPropertyRef: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILPropertyRef: System.String get_Name() +FSharp.Compiler.AbstractIL.IL+ILReadonly+Tags: Int32 NormalAddress +FSharp.Compiler.AbstractIL.IL+ILReadonly+Tags: Int32 ReadonlyAddress +FSharp.Compiler.AbstractIL.IL+ILReadonly: Boolean Equals(ILReadonly) +FSharp.Compiler.AbstractIL.IL+ILReadonly: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILReadonly: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILReadonly: Boolean IsNormalAddress +FSharp.Compiler.AbstractIL.IL+ILReadonly: Boolean IsReadonlyAddress +FSharp.Compiler.AbstractIL.IL+ILReadonly: Boolean get_IsNormalAddress() +FSharp.Compiler.AbstractIL.IL+ILReadonly: Boolean get_IsReadonlyAddress() +FSharp.Compiler.AbstractIL.IL+ILReadonly: FSharp.Compiler.AbstractIL.IL+ILReadonly+Tags +FSharp.Compiler.AbstractIL.IL+ILReadonly: ILReadonly NormalAddress +FSharp.Compiler.AbstractIL.IL+ILReadonly: ILReadonly ReadonlyAddress +FSharp.Compiler.AbstractIL.IL+ILReadonly: ILReadonly get_NormalAddress() +FSharp.Compiler.AbstractIL.IL+ILReadonly: ILReadonly get_ReadonlyAddress() +FSharp.Compiler.AbstractIL.IL+ILReadonly: Int32 CompareTo(ILReadonly) +FSharp.Compiler.AbstractIL.IL+ILReadonly: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILReadonly: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILReadonly: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILReadonly: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILReadonly: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILReadonly: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILReadonly: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILReferences: Boolean Equals(ILReferences) +FSharp.Compiler.AbstractIL.IL+ILReferences: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILReferences: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILReferences: Int32 CompareTo(ILReferences) +FSharp.Compiler.AbstractIL.IL+ILReferences: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILReferences: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILReferences: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILReferences: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILReferences: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAssemblyRef] AssemblyReferences +FSharp.Compiler.AbstractIL.IL+ILReferences: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAssemblyRef] get_AssemblyReferences() +FSharp.Compiler.AbstractIL.IL+ILReferences: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILModuleRef] ModuleReferences +FSharp.Compiler.AbstractIL.IL+ILReferences: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILModuleRef] get_ModuleReferences() +FSharp.Compiler.AbstractIL.IL+ILReferences: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILReferences: Void .ctor(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAssemblyRef], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILModuleRef]) +FSharp.Compiler.AbstractIL.IL+ILResource: ILAttributes CustomAttrs +FSharp.Compiler.AbstractIL.IL+ILResource: ILAttributes get_CustomAttrs() +FSharp.Compiler.AbstractIL.IL+ILResource: ILAttributesStored CustomAttrsStored +FSharp.Compiler.AbstractIL.IL+ILResource: ILAttributesStored get_CustomAttrsStored() +FSharp.Compiler.AbstractIL.IL+ILResource: ILResourceAccess Access +FSharp.Compiler.AbstractIL.IL+ILResource: ILResourceAccess get_Access() +FSharp.Compiler.AbstractIL.IL+ILResource: ILResourceLocation Location +FSharp.Compiler.AbstractIL.IL+ILResource: ILResourceLocation get_Location() +FSharp.Compiler.AbstractIL.IL+ILResource: Int32 MetadataIndex +FSharp.Compiler.AbstractIL.IL+ILResource: Int32 get_MetadataIndex() +FSharp.Compiler.AbstractIL.IL+ILResource: System.String Name +FSharp.Compiler.AbstractIL.IL+ILResource: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILResource: System.String get_Name() +FSharp.Compiler.AbstractIL.IL+ILResource: Void .ctor(System.String, ILResourceLocation, ILResourceAccess, ILAttributesStored, Int32) +FSharp.Compiler.AbstractIL.IL+ILResourceAccess+Tags: Int32 Private +FSharp.Compiler.AbstractIL.IL+ILResourceAccess+Tags: Int32 Public +FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Boolean Equals(ILResourceAccess) +FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Boolean IsPrivate +FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Boolean IsPublic +FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Boolean get_IsPrivate() +FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Boolean get_IsPublic() +FSharp.Compiler.AbstractIL.IL+ILResourceAccess: FSharp.Compiler.AbstractIL.IL+ILResourceAccess+Tags +FSharp.Compiler.AbstractIL.IL+ILResourceAccess: ILResourceAccess Private +FSharp.Compiler.AbstractIL.IL+ILResourceAccess: ILResourceAccess Public +FSharp.Compiler.AbstractIL.IL+ILResourceAccess: ILResourceAccess get_Private() +FSharp.Compiler.AbstractIL.IL+ILResourceAccess: ILResourceAccess get_Public() +FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Int32 CompareTo(ILResourceAccess) +FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILResourceAccess: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILResourceLocation: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILResources: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILResource] AsList +FSharp.Compiler.AbstractIL.IL+ILResources: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILResource] get_AsList() FSharp.Compiler.AbstractIL.IL+ILResources: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILReturn: ILAttributes CustomAttrs FSharp.Compiler.AbstractIL.IL+ILReturn: ILAttributes get_CustomAttrs() @@ -1245,10 +16035,56 @@ FSharp.Compiler.AbstractIL.IL+ILReturn: Microsoft.FSharp.Core.FSharpOption`1[FSh FSharp.Compiler.AbstractIL.IL+ILReturn: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILNativeType] get_Marshal() FSharp.Compiler.AbstractIL.IL+ILReturn: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILReturn: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILNativeType], ILType, ILAttributesStored, Int32) +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean Equals(ILScopeRef) +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean IsAssembly +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean IsLocal +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean IsLocalRef +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean IsModule +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean IsPrimaryAssembly +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean get_IsAssembly() +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean get_IsLocal() +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean get_IsLocalRef() +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean get_IsModule() +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean get_IsPrimaryAssembly() FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: ILAssemblyRef Item FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: ILAssemblyRef get_Item() +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Int32 CompareTo(ILScopeRef) +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: System.String QualifiedName +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: System.String get_QualifiedName() +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean Equals(ILScopeRef) +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean IsAssembly +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean IsLocal +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean IsLocalRef +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean IsModule +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean IsPrimaryAssembly +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean get_IsAssembly() +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean get_IsLocal() +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean get_IsLocalRef() +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean get_IsModule() +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean get_IsPrimaryAssembly() FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: ILModuleRef Item FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: ILModuleRef get_Item() +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Int32 CompareTo(ILScopeRef) +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: System.String QualifiedName +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: System.String get_QualifiedName() FSharp.Compiler.AbstractIL.IL+ILScopeRef+Tags: Int32 Assembly FSharp.Compiler.AbstractIL.IL+ILScopeRef+Tags: Int32 Local FSharp.Compiler.AbstractIL.IL+ILScopeRef+Tags: Int32 Module @@ -1285,6 +16121,126 @@ FSharp.Compiler.AbstractIL.IL+ILScopeRef: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILScopeRef: System.String QualifiedName FSharp.Compiler.AbstractIL.IL+ILScopeRef: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILScopeRef: System.String get_QualifiedName() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 Assert +FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 Demand +FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 DemandChoice +FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 Deny +FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 InheritCheck +FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 InheritanceDemandChoice +FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 LinkCheck +FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 LinkDemandChoice +FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 NonCasDemand +FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 NonCasInheritance +FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 NonCasLinkDemand +FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 PermitOnly +FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 PreJitDeny +FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 PreJitGrant +FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 ReqMin +FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 ReqOpt +FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 ReqRefuse +FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 Request +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean Equals(ILSecurityAction) +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsAssert +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsDemand +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsDemandChoice +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsDeny +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsInheritCheck +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsInheritanceDemandChoice +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsLinkCheck +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsLinkDemandChoice +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsNonCasDemand +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsNonCasInheritance +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsNonCasLinkDemand +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsPermitOnly +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsPreJitDeny +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsPreJitGrant +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsReqMin +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsReqOpt +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsReqRefuse +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsRequest +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsAssert() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsDemand() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsDemandChoice() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsDeny() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsInheritCheck() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsInheritanceDemandChoice() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsLinkCheck() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsLinkDemandChoice() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsNonCasDemand() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsNonCasInheritance() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsNonCasLinkDemand() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsPermitOnly() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsPreJitDeny() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsPreJitGrant() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsReqMin() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsReqOpt() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsReqRefuse() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsRequest() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction Assert +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction Demand +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction DemandChoice +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction Deny +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction InheritCheck +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction InheritanceDemandChoice +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction LinkCheck +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction LinkDemandChoice +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction NonCasDemand +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction NonCasInheritance +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction NonCasLinkDemand +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction PermitOnly +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction PreJitDeny +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction PreJitGrant +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction ReqMin +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction ReqOpt +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction ReqRefuse +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction Request +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_Assert() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_Demand() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_DemandChoice() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_Deny() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_InheritCheck() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_InheritanceDemandChoice() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_LinkCheck() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_LinkDemandChoice() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_NonCasDemand() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_NonCasInheritance() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_NonCasLinkDemand() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_PermitOnly() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_PreJitDeny() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_PreJitGrant() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_ReqMin() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_ReqOpt() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_ReqRefuse() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_Request() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Int32 CompareTo(ILSecurityAction) +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILSecurityAction: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Boolean Equals(ILSecurityDecl) +FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Byte[] Item2 +FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Byte[] get_Item2() +FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: ILSecurityAction Item1 +FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: ILSecurityAction get_Item1() +FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: ILSecurityDecl NewILSecurityDecl(ILSecurityAction, Byte[]) +FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Int32 CompareTo(ILSecurityDecl) +FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILSecurityDecls: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILSecurityDecl] AsList +FSharp.Compiler.AbstractIL.IL+ILSecurityDecls: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILSecurityDecl] get_AsList() FSharp.Compiler.AbstractIL.IL+ILSecurityDeclsStored: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILSourceDocument: Boolean Equals(ILSourceDocument) FSharp.Compiler.AbstractIL.IL+ILSourceDocument: Boolean Equals(System.Object) @@ -1304,6 +16260,48 @@ FSharp.Compiler.AbstractIL.IL+ILSourceDocument: Microsoft.FSharp.Core.FSharpOpti FSharp.Compiler.AbstractIL.IL+ILSourceDocument: System.String File FSharp.Compiler.AbstractIL.IL+ILSourceDocument: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILSourceDocument: System.String get_File() +FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Boolean Equals(ILSourceMarker) +FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILSourceMarker: ILSourceDocument Document +FSharp.Compiler.AbstractIL.IL+ILSourceMarker: ILSourceDocument get_Document() +FSharp.Compiler.AbstractIL.IL+ILSourceMarker: ILSourceMarker Create(ILSourceDocument, Int32, Int32, Int32, Int32) +FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 Column +FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 CompareTo(ILSourceMarker) +FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 EndColumn +FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 EndLine +FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 Line +FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 get_Column() +FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 get_EndColumn() +FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 get_EndLine() +FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 get_Line() +FSharp.Compiler.AbstractIL.IL+ILSourceMarker: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILTailcall+Tags: Int32 Normalcall +FSharp.Compiler.AbstractIL.IL+ILTailcall+Tags: Int32 Tailcall +FSharp.Compiler.AbstractIL.IL+ILTailcall: Boolean Equals(ILTailcall) +FSharp.Compiler.AbstractIL.IL+ILTailcall: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILTailcall: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILTailcall: Boolean IsNormalcall +FSharp.Compiler.AbstractIL.IL+ILTailcall: Boolean IsTailcall +FSharp.Compiler.AbstractIL.IL+ILTailcall: Boolean get_IsNormalcall() +FSharp.Compiler.AbstractIL.IL+ILTailcall: Boolean get_IsTailcall() +FSharp.Compiler.AbstractIL.IL+ILTailcall: FSharp.Compiler.AbstractIL.IL+ILTailcall+Tags +FSharp.Compiler.AbstractIL.IL+ILTailcall: ILTailcall Normalcall +FSharp.Compiler.AbstractIL.IL+ILTailcall: ILTailcall Tailcall +FSharp.Compiler.AbstractIL.IL+ILTailcall: ILTailcall get_Normalcall() +FSharp.Compiler.AbstractIL.IL+ILTailcall: ILTailcall get_Tailcall() +FSharp.Compiler.AbstractIL.IL+ILTailcall: Int32 CompareTo(ILTailcall) +FSharp.Compiler.AbstractIL.IL+ILTailcall: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILTailcall: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILTailcall: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILTailcall: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILTailcall: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILTailcall: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILTailcall: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILThisConvention+Tags: Int32 Instance FSharp.Compiler.AbstractIL.IL+ILThisConvention+Tags: Int32 InstanceExplicit FSharp.Compiler.AbstractIL.IL+ILThisConvention+Tags: Int32 Static @@ -1331,24 +16329,378 @@ FSharp.Compiler.AbstractIL.IL+ILThisConvention: Int32 GetHashCode(System.Collect FSharp.Compiler.AbstractIL.IL+ILThisConvention: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILThisConvention: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILThisConvention: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Boolean Equals(ILToken) +FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Boolean IsILField +FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Boolean IsILMethod +FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Boolean IsILType +FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Boolean get_IsILField() +FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Boolean get_IsILMethod() +FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Boolean get_IsILType() +FSharp.Compiler.AbstractIL.IL+ILToken+ILField: ILFieldSpec Item +FSharp.Compiler.AbstractIL.IL+ILToken+ILField: ILFieldSpec get_Item() +FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Int32 CompareTo(ILToken) +FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILToken+ILField: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Boolean Equals(ILToken) +FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Boolean IsILField +FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Boolean IsILMethod +FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Boolean IsILType +FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Boolean get_IsILField() +FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Boolean get_IsILMethod() +FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Boolean get_IsILType() +FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: ILMethodSpec Item +FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: ILMethodSpec get_Item() +FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Int32 CompareTo(ILToken) +FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Boolean Equals(ILToken) +FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Boolean IsILField +FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Boolean IsILMethod +FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Boolean IsILType +FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Boolean get_IsILField() +FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Boolean get_IsILMethod() +FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Boolean get_IsILType() +FSharp.Compiler.AbstractIL.IL+ILToken+ILType: ILType Item +FSharp.Compiler.AbstractIL.IL+ILToken+ILType: ILType get_Item() +FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Int32 CompareTo(ILToken) +FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILToken+ILType: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILToken+Tags: Int32 ILField +FSharp.Compiler.AbstractIL.IL+ILToken+Tags: Int32 ILMethod +FSharp.Compiler.AbstractIL.IL+ILToken+Tags: Int32 ILType +FSharp.Compiler.AbstractIL.IL+ILToken: Boolean Equals(ILToken) +FSharp.Compiler.AbstractIL.IL+ILToken: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILToken: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILToken: Boolean IsILField +FSharp.Compiler.AbstractIL.IL+ILToken: Boolean IsILMethod +FSharp.Compiler.AbstractIL.IL+ILToken: Boolean IsILType +FSharp.Compiler.AbstractIL.IL+ILToken: Boolean get_IsILField() +FSharp.Compiler.AbstractIL.IL+ILToken: Boolean get_IsILMethod() +FSharp.Compiler.AbstractIL.IL+ILToken: Boolean get_IsILType() +FSharp.Compiler.AbstractIL.IL+ILToken: FSharp.Compiler.AbstractIL.IL+ILToken+ILField +FSharp.Compiler.AbstractIL.IL+ILToken: FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod +FSharp.Compiler.AbstractIL.IL+ILToken: FSharp.Compiler.AbstractIL.IL+ILToken+ILType +FSharp.Compiler.AbstractIL.IL+ILToken: FSharp.Compiler.AbstractIL.IL+ILToken+Tags +FSharp.Compiler.AbstractIL.IL+ILToken: ILToken NewILField(ILFieldSpec) +FSharp.Compiler.AbstractIL.IL+ILToken: ILToken NewILMethod(ILMethodSpec) +FSharp.Compiler.AbstractIL.IL+ILToken: ILToken NewILType(ILType) +FSharp.Compiler.AbstractIL.IL+ILToken: Int32 CompareTo(ILToken) +FSharp.Compiler.AbstractIL.IL+ILToken: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILToken: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILToken: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILToken: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILToken: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILToken: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILToken: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean Equals(ILType) +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsBoxed +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsByref +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsFunctionPointer +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsModified +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsNominal +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsPtr +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsTypeVar +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsTyvar +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsValue +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsVoid +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsBoxed() +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsByref() +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsFunctionPointer() +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsModified() +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsNominal() +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsPtr() +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsTypeVar() +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsTyvar() +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsValue() +FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsVoid() FSharp.Compiler.AbstractIL.IL+ILType+Array: ILArrayShape Item1 FSharp.Compiler.AbstractIL.IL+ILType+Array: ILArrayShape get_Item1() +FSharp.Compiler.AbstractIL.IL+ILType+Array: ILBoxity Boxity +FSharp.Compiler.AbstractIL.IL+ILType+Array: ILBoxity get_Boxity() FSharp.Compiler.AbstractIL.IL+ILType+Array: ILType Item2 FSharp.Compiler.AbstractIL.IL+ILType+Array: ILType get_Item2() +FSharp.Compiler.AbstractIL.IL+ILType+Array: ILTypeRef TypeRef +FSharp.Compiler.AbstractIL.IL+ILType+Array: ILTypeRef get_TypeRef() +FSharp.Compiler.AbstractIL.IL+ILType+Array: ILTypeSpec TypeSpec +FSharp.Compiler.AbstractIL.IL+ILType+Array: ILTypeSpec get_TypeSpec() +FSharp.Compiler.AbstractIL.IL+ILType+Array: Int32 CompareTo(ILType) +FSharp.Compiler.AbstractIL.IL+ILType+Array: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILType+Array: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILType+Array: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILType+Array: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILType+Array: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILType+Array: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILType+Array: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] GenericArgs +FSharp.Compiler.AbstractIL.IL+ILType+Array: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] get_GenericArgs() +FSharp.Compiler.AbstractIL.IL+ILType+Array: System.String BasicQualifiedName +FSharp.Compiler.AbstractIL.IL+ILType+Array: System.String QualifiedName +FSharp.Compiler.AbstractIL.IL+ILType+Array: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILType+Array: System.String get_BasicQualifiedName() +FSharp.Compiler.AbstractIL.IL+ILType+Array: System.String get_QualifiedName() +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean Equals(ILType) +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsBoxed +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsByref +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsFunctionPointer +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsModified +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsNominal +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsPtr +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsTypeVar +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsTyvar +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsValue +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsVoid +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsBoxed() +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsByref() +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsFunctionPointer() +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsModified() +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsNominal() +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsPtr() +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsTypeVar() +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsTyvar() +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsValue() +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsVoid() +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: ILBoxity Boxity +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: ILBoxity get_Boxity() +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: ILTypeRef TypeRef +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: ILTypeRef get_TypeRef() FSharp.Compiler.AbstractIL.IL+ILType+Boxed: ILTypeSpec Item +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: ILTypeSpec TypeSpec FSharp.Compiler.AbstractIL.IL+ILType+Boxed: ILTypeSpec get_Item() +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: ILTypeSpec get_TypeSpec() +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Int32 CompareTo(ILType) +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] GenericArgs +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] get_GenericArgs() +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: System.String BasicQualifiedName +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: System.String QualifiedName +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: System.String get_BasicQualifiedName() +FSharp.Compiler.AbstractIL.IL+ILType+Boxed: System.String get_QualifiedName() +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean Equals(ILType) +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsBoxed +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsByref +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsFunctionPointer +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsModified +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsNominal +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsPtr +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsTypeVar +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsTyvar +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsValue +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsVoid +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsBoxed() +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsByref() +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsFunctionPointer() +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsModified() +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsNominal() +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsPtr() +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsTypeVar() +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsTyvar() +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsValue() +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsVoid() +FSharp.Compiler.AbstractIL.IL+ILType+Byref: ILBoxity Boxity +FSharp.Compiler.AbstractIL.IL+ILType+Byref: ILBoxity get_Boxity() FSharp.Compiler.AbstractIL.IL+ILType+Byref: ILType Item FSharp.Compiler.AbstractIL.IL+ILType+Byref: ILType get_Item() +FSharp.Compiler.AbstractIL.IL+ILType+Byref: ILTypeRef TypeRef +FSharp.Compiler.AbstractIL.IL+ILType+Byref: ILTypeRef get_TypeRef() +FSharp.Compiler.AbstractIL.IL+ILType+Byref: ILTypeSpec TypeSpec +FSharp.Compiler.AbstractIL.IL+ILType+Byref: ILTypeSpec get_TypeSpec() +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Int32 CompareTo(ILType) +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] GenericArgs +FSharp.Compiler.AbstractIL.IL+ILType+Byref: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] get_GenericArgs() +FSharp.Compiler.AbstractIL.IL+ILType+Byref: System.String BasicQualifiedName +FSharp.Compiler.AbstractIL.IL+ILType+Byref: System.String QualifiedName +FSharp.Compiler.AbstractIL.IL+ILType+Byref: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILType+Byref: System.String get_BasicQualifiedName() +FSharp.Compiler.AbstractIL.IL+ILType+Byref: System.String get_QualifiedName() +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean Equals(ILType) +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsBoxed +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsByref +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsFunctionPointer +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsModified +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsNominal +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsPtr +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsTypeVar +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsTyvar +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsValue +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsVoid +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsBoxed() +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsByref() +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsFunctionPointer() +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsModified() +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsNominal() +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsPtr() +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsTypeVar() +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsTyvar() +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsValue() +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsVoid() +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: ILBoxity Boxity +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: ILBoxity get_Boxity() FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: ILCallingSignature Item FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: ILCallingSignature get_Item() +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: ILTypeRef TypeRef +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: ILTypeRef get_TypeRef() +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: ILTypeSpec TypeSpec +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: ILTypeSpec get_TypeSpec() +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Int32 CompareTo(ILType) +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] GenericArgs +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] get_GenericArgs() +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: System.String BasicQualifiedName +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: System.String QualifiedName +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: System.String get_BasicQualifiedName() +FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: System.String get_QualifiedName() +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean Equals(ILType) +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsBoxed +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsByref +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsFunctionPointer +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsModified +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsNominal +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsPtr +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsTypeVar +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsTyvar +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsValue +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsVoid FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean Item1 +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsBoxed() +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsByref() +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsFunctionPointer() +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsModified() +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsNominal() +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsPtr() +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsTypeVar() +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsTyvar() +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsValue() +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsVoid() FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_Item1() +FSharp.Compiler.AbstractIL.IL+ILType+Modified: ILBoxity Boxity +FSharp.Compiler.AbstractIL.IL+ILType+Modified: ILBoxity get_Boxity() FSharp.Compiler.AbstractIL.IL+ILType+Modified: ILType Item3 FSharp.Compiler.AbstractIL.IL+ILType+Modified: ILType get_Item3() FSharp.Compiler.AbstractIL.IL+ILType+Modified: ILTypeRef Item2 +FSharp.Compiler.AbstractIL.IL+ILType+Modified: ILTypeRef TypeRef FSharp.Compiler.AbstractIL.IL+ILType+Modified: ILTypeRef get_Item2() +FSharp.Compiler.AbstractIL.IL+ILType+Modified: ILTypeRef get_TypeRef() +FSharp.Compiler.AbstractIL.IL+ILType+Modified: ILTypeSpec TypeSpec +FSharp.Compiler.AbstractIL.IL+ILType+Modified: ILTypeSpec get_TypeSpec() +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Int32 CompareTo(ILType) +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] GenericArgs +FSharp.Compiler.AbstractIL.IL+ILType+Modified: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] get_GenericArgs() +FSharp.Compiler.AbstractIL.IL+ILType+Modified: System.String BasicQualifiedName +FSharp.Compiler.AbstractIL.IL+ILType+Modified: System.String QualifiedName +FSharp.Compiler.AbstractIL.IL+ILType+Modified: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILType+Modified: System.String get_BasicQualifiedName() +FSharp.Compiler.AbstractIL.IL+ILType+Modified: System.String get_QualifiedName() +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean Equals(ILType) +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsBoxed +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsByref +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsFunctionPointer +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsModified +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsNominal +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsPtr +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsTypeVar +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsTyvar +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsValue +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsVoid +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsBoxed() +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsByref() +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsFunctionPointer() +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsModified() +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsNominal() +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsPtr() +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsTypeVar() +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsTyvar() +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsValue() +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsVoid() +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: ILBoxity Boxity +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: ILBoxity get_Boxity() FSharp.Compiler.AbstractIL.IL+ILType+Ptr: ILType Item FSharp.Compiler.AbstractIL.IL+ILType+Ptr: ILType get_Item() +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: ILTypeRef TypeRef +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: ILTypeRef get_TypeRef() +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: ILTypeSpec TypeSpec +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: ILTypeSpec get_TypeSpec() +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Int32 CompareTo(ILType) +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] GenericArgs +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] get_GenericArgs() +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: System.String BasicQualifiedName +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: System.String QualifiedName +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: System.String get_BasicQualifiedName() +FSharp.Compiler.AbstractIL.IL+ILType+Ptr: System.String get_QualifiedName() FSharp.Compiler.AbstractIL.IL+ILType+Tags: Int32 Array FSharp.Compiler.AbstractIL.IL+ILType+Tags: Int32 Boxed FSharp.Compiler.AbstractIL.IL+ILType+Tags: Int32 Byref @@ -1358,10 +16710,100 @@ FSharp.Compiler.AbstractIL.IL+ILType+Tags: Int32 Ptr FSharp.Compiler.AbstractIL.IL+ILType+Tags: Int32 TypeVar FSharp.Compiler.AbstractIL.IL+ILType+Tags: Int32 Value FSharp.Compiler.AbstractIL.IL+ILType+Tags: Int32 Void +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean Equals(ILType) +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsBoxed +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsByref +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsFunctionPointer +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsModified +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsNominal +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsPtr +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsTypeVar +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsTyvar +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsValue +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsVoid +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsBoxed() +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsByref() +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsFunctionPointer() +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsModified() +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsNominal() +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsPtr() +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsTypeVar() +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsTyvar() +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsValue() +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsVoid() +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: ILBoxity Boxity +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: ILBoxity get_Boxity() +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: ILTypeRef TypeRef +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: ILTypeRef get_TypeRef() +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: ILTypeSpec TypeSpec +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: ILTypeSpec get_TypeSpec() +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Int32 CompareTo(ILType) +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] GenericArgs +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] get_GenericArgs() +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: System.String BasicQualifiedName +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: System.String QualifiedName +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: System.String get_BasicQualifiedName() +FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: System.String get_QualifiedName() FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: UInt16 Item FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: UInt16 get_Item() +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean Equals(ILType) +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsArray +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsBoxed +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsByref +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsFunctionPointer +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsModified +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsNominal +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsPtr +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsTypeVar +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsTyvar +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsValue +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsVoid +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsArray() +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsBoxed() +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsByref() +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsFunctionPointer() +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsModified() +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsNominal() +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsPtr() +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsTypeVar() +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsTyvar() +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsValue() +FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsVoid() +FSharp.Compiler.AbstractIL.IL+ILType+Value: ILBoxity Boxity +FSharp.Compiler.AbstractIL.IL+ILType+Value: ILBoxity get_Boxity() +FSharp.Compiler.AbstractIL.IL+ILType+Value: ILTypeRef TypeRef +FSharp.Compiler.AbstractIL.IL+ILType+Value: ILTypeRef get_TypeRef() FSharp.Compiler.AbstractIL.IL+ILType+Value: ILTypeSpec Item +FSharp.Compiler.AbstractIL.IL+ILType+Value: ILTypeSpec TypeSpec FSharp.Compiler.AbstractIL.IL+ILType+Value: ILTypeSpec get_Item() +FSharp.Compiler.AbstractIL.IL+ILType+Value: ILTypeSpec get_TypeSpec() +FSharp.Compiler.AbstractIL.IL+ILType+Value: Int32 CompareTo(ILType) +FSharp.Compiler.AbstractIL.IL+ILType+Value: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILType+Value: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILType+Value: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILType+Value: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILType+Value: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILType+Value: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILType+Value: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] GenericArgs +FSharp.Compiler.AbstractIL.IL+ILType+Value: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] get_GenericArgs() +FSharp.Compiler.AbstractIL.IL+ILType+Value: System.String BasicQualifiedName +FSharp.Compiler.AbstractIL.IL+ILType+Value: System.String QualifiedName +FSharp.Compiler.AbstractIL.IL+ILType+Value: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILType+Value: System.String get_BasicQualifiedName() +FSharp.Compiler.AbstractIL.IL+ILType+Value: System.String get_QualifiedName() FSharp.Compiler.AbstractIL.IL+ILType: Boolean Equals(ILType) FSharp.Compiler.AbstractIL.IL+ILType: Boolean Equals(System.Object) FSharp.Compiler.AbstractIL.IL+ILType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1396,6 +16838,8 @@ FSharp.Compiler.AbstractIL.IL+ILType: FSharp.Compiler.AbstractIL.IL+ILType+Ptr FSharp.Compiler.AbstractIL.IL+ILType: FSharp.Compiler.AbstractIL.IL+ILType+Tags FSharp.Compiler.AbstractIL.IL+ILType: FSharp.Compiler.AbstractIL.IL+ILType+TypeVar FSharp.Compiler.AbstractIL.IL+ILType: FSharp.Compiler.AbstractIL.IL+ILType+Value +FSharp.Compiler.AbstractIL.IL+ILType: ILBoxity Boxity +FSharp.Compiler.AbstractIL.IL+ILType: ILBoxity get_Boxity() FSharp.Compiler.AbstractIL.IL+ILType: ILType NewArray(ILArrayShape, ILType) FSharp.Compiler.AbstractIL.IL+ILType: ILType NewBoxed(ILTypeSpec) FSharp.Compiler.AbstractIL.IL+ILType: ILType NewByref(ILType) @@ -1465,6 +16909,18 @@ FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILPropertyDefs get_Properties() FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILSecurityDecls SecurityDecls FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILSecurityDecls get_SecurityDecls() FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef With(Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.TypeAttributes], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef]], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILType]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodDefs], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILTypeDefs], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldDefs], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodImplDefs], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILEventDefs], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILPropertyDefs], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILAttributes], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSecurityDecls]) +FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithAbstract(Boolean) +FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithAccess(ILTypeDefAccess) +FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithEncoding(ILDefaultPInvokeEncoding) +FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithHasSecurity(Boolean) +FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithImport(Boolean) +FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithInitSemantics(ILTypeInit) +FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithKind(ILTypeDefKind) +FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithLayout(ILTypeDefLayout) +FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithNestedAccess(ILMemberAccess) +FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithSealed(Boolean) +FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithSerializable(Boolean) +FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithSpecialName(Boolean) FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDefAccess Access FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDefAccess get_Access() FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDefLayout Layout @@ -1482,8 +16938,26 @@ FSharp.Compiler.AbstractIL.IL+ILTypeDef: System.Reflection.TypeAttributes get_At FSharp.Compiler.AbstractIL.IL+ILTypeDef: System.String Name FSharp.Compiler.AbstractIL.IL+ILTypeDef: System.String get_Name() FSharp.Compiler.AbstractIL.IL+ILTypeDef: Void .ctor(System.String, System.Reflection.TypeAttributes, ILTypeDefLayout, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILType], ILMethodDefs, ILTypeDefs, ILFieldDefs, ILMethodImplDefs, ILEventDefs, ILPropertyDefs, ILSecurityDecls, ILAttributes) +FSharp.Compiler.AbstractIL.IL+ILTypeDef: Void .ctor(System.String, System.Reflection.TypeAttributes, ILTypeDefLayout, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILType], ILMethodDefs, ILTypeDefs, ILFieldDefs, ILMethodImplDefs, ILEventDefs, ILPropertyDefs, ILSecurityDeclsStored, ILAttributesStored, Int32) +FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Boolean Equals(ILTypeDefAccess) +FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Boolean IsNested +FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Boolean IsPrivate +FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Boolean IsPublic +FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Boolean get_IsNested() +FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Boolean get_IsPrivate() +FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Boolean get_IsPublic() FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: ILMemberAccess Item FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: ILMemberAccess get_Item() +FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Int32 CompareTo(ILTypeDefAccess) +FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Tags: Int32 Nested FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Tags: Int32 Private FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Tags: Int32 Public @@ -1548,10 +17022,44 @@ FSharp.Compiler.AbstractIL.IL+ILTypeDefKind: Int32 GetHashCode(System.Collection FSharp.Compiler.AbstractIL.IL+ILTypeDefKind: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILTypeDefKind: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILTypeDefKind: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Boolean Equals(ILTypeDefLayout) +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Boolean IsAuto +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Boolean IsExplicit +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Boolean IsSequential +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Boolean get_IsAuto() +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Boolean get_IsExplicit() +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Boolean get_IsSequential() FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: ILTypeDefLayoutInfo Item FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: ILTypeDefLayoutInfo get_Item() +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Int32 CompareTo(ILTypeDefLayout) +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Boolean Equals(ILTypeDefLayout) +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Boolean IsAuto +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Boolean IsExplicit +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Boolean IsSequential +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Boolean get_IsAuto() +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Boolean get_IsExplicit() +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Boolean get_IsSequential() FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: ILTypeDefLayoutInfo Item FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: ILTypeDefLayoutInfo get_Item() +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Int32 CompareTo(ILTypeDefLayout) +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Tags: Int32 Auto FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Tags: Int32 Explicit FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Tags: Int32 Sequential @@ -1579,6 +17087,28 @@ FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout: Int32 GetHashCode(System.Collecti FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Boolean Equals(ILTypeDefLayoutInfo) +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Int32 CompareTo(ILTypeDefLayoutInfo) +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] Size +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] get_Size() +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Microsoft.FSharp.Core.FSharpOption`1[System.UInt16] Pack +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Microsoft.FSharp.Core.FSharpOption`1[System.UInt16] get_Pack() +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.UInt16]) +FSharp.Compiler.AbstractIL.IL+ILTypeDefStored: System.String ToString() +FSharp.Compiler.AbstractIL.IL+ILTypeDefs: ILPreTypeDef[] AsArrayOfPreTypeDefs +FSharp.Compiler.AbstractIL.IL+ILTypeDefs: ILPreTypeDef[] get_AsArrayOfPreTypeDefs() +FSharp.Compiler.AbstractIL.IL+ILTypeDefs: ILTypeDef FindByName(System.String) +FSharp.Compiler.AbstractIL.IL+ILTypeDefs: ILTypeDef[] AsArray +FSharp.Compiler.AbstractIL.IL+ILTypeDefs: ILTypeDef[] get_AsArray() +FSharp.Compiler.AbstractIL.IL+ILTypeDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILTypeDef] AsList +FSharp.Compiler.AbstractIL.IL+ILTypeDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILTypeDef] get_AsList() FSharp.Compiler.AbstractIL.IL+ILTypeInit+Tags: Int32 BeforeField FSharp.Compiler.AbstractIL.IL+ILTypeInit+Tags: Int32 OnAny FSharp.Compiler.AbstractIL.IL+ILTypeInit: Boolean Equals(ILTypeInit) @@ -1657,18 +17187,63 @@ FSharp.Compiler.AbstractIL.IL+ILVersionInfo: UInt16 get_Major() FSharp.Compiler.AbstractIL.IL+ILVersionInfo: UInt16 get_Minor() FSharp.Compiler.AbstractIL.IL+ILVersionInfo: UInt16 get_Revision() FSharp.Compiler.AbstractIL.IL+ILVersionInfo: Void .ctor(UInt16, UInt16, UInt16, UInt16) -FSharp.Compiler.AbstractIL.IL+MethodBody+IL: System.Lazy`1[FSharp.Compiler.AbstractIL.IL+ILMethodBody] Item -FSharp.Compiler.AbstractIL.IL+MethodBody+IL: System.Lazy`1[FSharp.Compiler.AbstractIL.IL+ILMethodBody] get_Item() -FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: System.Lazy`1[FSharp.Compiler.AbstractIL.IL+PInvokeMethod] Item -FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: System.Lazy`1[FSharp.Compiler.AbstractIL.IL+PInvokeMethod] get_Item() +FSharp.Compiler.AbstractIL.IL+ILVolatility+Tags: Int32 Nonvolatile +FSharp.Compiler.AbstractIL.IL+ILVolatility+Tags: Int32 Volatile +FSharp.Compiler.AbstractIL.IL+ILVolatility: Boolean Equals(ILVolatility) +FSharp.Compiler.AbstractIL.IL+ILVolatility: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+ILVolatility: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILVolatility: Boolean IsNonvolatile +FSharp.Compiler.AbstractIL.IL+ILVolatility: Boolean IsVolatile +FSharp.Compiler.AbstractIL.IL+ILVolatility: Boolean get_IsNonvolatile() +FSharp.Compiler.AbstractIL.IL+ILVolatility: Boolean get_IsVolatile() +FSharp.Compiler.AbstractIL.IL+ILVolatility: FSharp.Compiler.AbstractIL.IL+ILVolatility+Tags +FSharp.Compiler.AbstractIL.IL+ILVolatility: ILVolatility Nonvolatile +FSharp.Compiler.AbstractIL.IL+ILVolatility: ILVolatility Volatile +FSharp.Compiler.AbstractIL.IL+ILVolatility: ILVolatility get_Nonvolatile() +FSharp.Compiler.AbstractIL.IL+ILVolatility: ILVolatility get_Volatile() +FSharp.Compiler.AbstractIL.IL+ILVolatility: Int32 CompareTo(ILVolatility) +FSharp.Compiler.AbstractIL.IL+ILVolatility: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+ILVolatility: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+ILVolatility: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+ILVolatility: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILVolatility: Int32 Tag +FSharp.Compiler.AbstractIL.IL+ILVolatility: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+ILVolatility: System.String ToString() +FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Boolean IsAbstract +FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Boolean IsIL +FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Boolean IsNative +FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Boolean IsNotAvailable +FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Boolean IsPInvoke +FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Boolean get_IsAbstract() +FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Boolean get_IsIL() +FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Boolean get_IsNative() +FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Boolean get_IsNotAvailable() +FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Boolean get_IsPInvoke() +FSharp.Compiler.AbstractIL.IL+MethodBody+IL: ILMethodBody Item +FSharp.Compiler.AbstractIL.IL+MethodBody+IL: ILMethodBody get_Item() +FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Int32 Tag +FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+MethodBody+IL: System.String ToString() +FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Boolean IsAbstract +FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Boolean IsIL +FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Boolean IsNative +FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Boolean IsNotAvailable +FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Boolean IsPInvoke +FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Boolean get_IsAbstract() +FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Boolean get_IsIL() +FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Boolean get_IsNative() +FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Boolean get_IsNotAvailable() +FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Boolean get_IsPInvoke() +FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Int32 Tag +FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: PInvokeMethod Item +FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: PInvokeMethod get_Item() +FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: System.String ToString() FSharp.Compiler.AbstractIL.IL+MethodBody+Tags: Int32 Abstract FSharp.Compiler.AbstractIL.IL+MethodBody+Tags: Int32 IL FSharp.Compiler.AbstractIL.IL+MethodBody+Tags: Int32 Native FSharp.Compiler.AbstractIL.IL+MethodBody+Tags: Int32 NotAvailable FSharp.Compiler.AbstractIL.IL+MethodBody+Tags: Int32 PInvoke -FSharp.Compiler.AbstractIL.IL+MethodBody: Boolean Equals(MethodBody) -FSharp.Compiler.AbstractIL.IL+MethodBody: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+MethodBody: Boolean Equals(System.Object, System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+MethodBody: Boolean IsAbstract FSharp.Compiler.AbstractIL.IL+MethodBody: Boolean IsIL FSharp.Compiler.AbstractIL.IL+MethodBody: Boolean IsNative @@ -1682,23 +17257,329 @@ FSharp.Compiler.AbstractIL.IL+MethodBody: Boolean get_IsPInvoke() FSharp.Compiler.AbstractIL.IL+MethodBody: FSharp.Compiler.AbstractIL.IL+MethodBody+IL FSharp.Compiler.AbstractIL.IL+MethodBody: FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke FSharp.Compiler.AbstractIL.IL+MethodBody: FSharp.Compiler.AbstractIL.IL+MethodBody+Tags -FSharp.Compiler.AbstractIL.IL+MethodBody: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+MethodBody: Int32 GetHashCode(System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+MethodBody: Int32 Tag FSharp.Compiler.AbstractIL.IL+MethodBody: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+MethodBody: MethodBody Abstract FSharp.Compiler.AbstractIL.IL+MethodBody: MethodBody Native -FSharp.Compiler.AbstractIL.IL+MethodBody: MethodBody NewIL(System.Lazy`1[FSharp.Compiler.AbstractIL.IL+ILMethodBody]) -FSharp.Compiler.AbstractIL.IL+MethodBody: MethodBody NewPInvoke(System.Lazy`1[FSharp.Compiler.AbstractIL.IL+PInvokeMethod]) +FSharp.Compiler.AbstractIL.IL+MethodBody: MethodBody NewIL(ILMethodBody) +FSharp.Compiler.AbstractIL.IL+MethodBody: MethodBody NewPInvoke(PInvokeMethod) FSharp.Compiler.AbstractIL.IL+MethodBody: MethodBody NotAvailable FSharp.Compiler.AbstractIL.IL+MethodBody: MethodBody get_Abstract() FSharp.Compiler.AbstractIL.IL+MethodBody: MethodBody get_Native() FSharp.Compiler.AbstractIL.IL+MethodBody: MethodBody get_NotAvailable() FSharp.Compiler.AbstractIL.IL+MethodBody: System.String ToString() +FSharp.Compiler.AbstractIL.IL+MethodCodeKind+Tags: Int32 IL +FSharp.Compiler.AbstractIL.IL+MethodCodeKind+Tags: Int32 Native +FSharp.Compiler.AbstractIL.IL+MethodCodeKind+Tags: Int32 Runtime +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Boolean Equals(MethodCodeKind) +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Boolean IsIL +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Boolean IsNative +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Boolean IsRuntime +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Boolean get_IsIL() +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Boolean get_IsNative() +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Boolean get_IsRuntime() +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: FSharp.Compiler.AbstractIL.IL+MethodCodeKind+Tags +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Int32 CompareTo(MethodCodeKind) +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Int32 Tag +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: MethodCodeKind IL +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: MethodCodeKind Native +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: MethodCodeKind Runtime +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: MethodCodeKind get_IL() +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: MethodCodeKind get_Native() +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: MethodCodeKind get_Runtime() +FSharp.Compiler.AbstractIL.IL+MethodCodeKind: System.String ToString() +FSharp.Compiler.AbstractIL.IL+MethodKind+Tags: Int32 Cctor +FSharp.Compiler.AbstractIL.IL+MethodKind+Tags: Int32 Ctor +FSharp.Compiler.AbstractIL.IL+MethodKind+Tags: Int32 NonVirtual +FSharp.Compiler.AbstractIL.IL+MethodKind+Tags: Int32 Static +FSharp.Compiler.AbstractIL.IL+MethodKind+Tags: Int32 Virtual +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean Equals(MethodKind) +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean IsCctor +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean IsCtor +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean IsNonVirtual +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean IsStatic +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean IsVirtual +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean get_IsCctor() +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean get_IsCtor() +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean get_IsNonVirtual() +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean get_IsStatic() +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean get_IsVirtual() +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: ILMethodVirtualInfo Item +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: ILMethodVirtualInfo get_Item() +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Int32 CompareTo(MethodKind) +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Int32 Tag +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: System.String ToString() +FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean Equals(MethodKind) +FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean IsCctor +FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean IsCtor +FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean IsNonVirtual +FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean IsStatic +FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean IsVirtual +FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean get_IsCctor() +FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean get_IsCtor() +FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean get_IsNonVirtual() +FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean get_IsStatic() +FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean get_IsVirtual() +FSharp.Compiler.AbstractIL.IL+MethodKind: FSharp.Compiler.AbstractIL.IL+MethodKind+Tags +FSharp.Compiler.AbstractIL.IL+MethodKind: FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual +FSharp.Compiler.AbstractIL.IL+MethodKind: Int32 CompareTo(MethodKind) +FSharp.Compiler.AbstractIL.IL+MethodKind: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+MethodKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+MethodKind: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+MethodKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+MethodKind: Int32 Tag +FSharp.Compiler.AbstractIL.IL+MethodKind: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+MethodKind: MethodKind Cctor +FSharp.Compiler.AbstractIL.IL+MethodKind: MethodKind Ctor +FSharp.Compiler.AbstractIL.IL+MethodKind: MethodKind NewVirtual(ILMethodVirtualInfo) +FSharp.Compiler.AbstractIL.IL+MethodKind: MethodKind NonVirtual +FSharp.Compiler.AbstractIL.IL+MethodKind: MethodKind Static +FSharp.Compiler.AbstractIL.IL+MethodKind: MethodKind get_Cctor() +FSharp.Compiler.AbstractIL.IL+MethodKind: MethodKind get_Ctor() +FSharp.Compiler.AbstractIL.IL+MethodKind: MethodKind get_NonVirtual() +FSharp.Compiler.AbstractIL.IL+MethodKind: MethodKind get_Static() +FSharp.Compiler.AbstractIL.IL+MethodKind: System.String ToString() +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention+Tags: Int32 Cdecl +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention+Tags: Int32 Fastcall +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention+Tags: Int32 None +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention+Tags: Int32 Stdcall +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention+Tags: Int32 Thiscall +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention+Tags: Int32 WinApi +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean Equals(PInvokeCallingConvention) +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean IsCdecl +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean IsFastcall +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean IsNone +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean IsStdcall +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean IsThiscall +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean IsWinApi +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean get_IsCdecl() +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean get_IsFastcall() +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean get_IsNone() +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean get_IsStdcall() +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean get_IsThiscall() +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean get_IsWinApi() +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention+Tags +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Int32 CompareTo(PInvokeCallingConvention) +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Int32 Tag +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention Cdecl +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention Fastcall +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention None +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention Stdcall +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention Thiscall +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention WinApi +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention get_Cdecl() +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention get_Fastcall() +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention get_None() +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention get_Stdcall() +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention get_Thiscall() +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention get_WinApi() +FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: System.String ToString() +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit+Tags: Int32 Disabled +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit+Tags: Int32 Enabled +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit+Tags: Int32 UseAssembly +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Boolean Equals(PInvokeCharBestFit) +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Boolean IsDisabled +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Boolean IsEnabled +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Boolean IsUseAssembly +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Boolean get_IsDisabled() +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Boolean get_IsEnabled() +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Boolean get_IsUseAssembly() +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit+Tags +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Int32 CompareTo(PInvokeCharBestFit) +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Int32 Tag +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: PInvokeCharBestFit Disabled +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: PInvokeCharBestFit Enabled +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: PInvokeCharBestFit UseAssembly +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: PInvokeCharBestFit get_Disabled() +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: PInvokeCharBestFit get_Enabled() +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: PInvokeCharBestFit get_UseAssembly() +FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: System.String ToString() +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding+Tags: Int32 Ansi +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding+Tags: Int32 Auto +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding+Tags: Int32 None +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding+Tags: Int32 Unicode +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean Equals(PInvokeCharEncoding) +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean IsAnsi +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean IsAuto +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean IsNone +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean IsUnicode +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean get_IsAnsi() +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean get_IsAuto() +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean get_IsNone() +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean get_IsUnicode() +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding+Tags +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Int32 CompareTo(PInvokeCharEncoding) +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Int32 Tag +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: PInvokeCharEncoding Ansi +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: PInvokeCharEncoding Auto +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: PInvokeCharEncoding None +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: PInvokeCharEncoding Unicode +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: PInvokeCharEncoding get_Ansi() +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: PInvokeCharEncoding get_Auto() +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: PInvokeCharEncoding get_None() +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: PInvokeCharEncoding get_Unicode() +FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: System.String ToString() +FSharp.Compiler.AbstractIL.IL+PInvokeMethod: Boolean LastError +FSharp.Compiler.AbstractIL.IL+PInvokeMethod: Boolean NoMangle +FSharp.Compiler.AbstractIL.IL+PInvokeMethod: Boolean get_LastError() +FSharp.Compiler.AbstractIL.IL+PInvokeMethod: Boolean get_NoMangle() +FSharp.Compiler.AbstractIL.IL+PInvokeMethod: ILModuleRef Where +FSharp.Compiler.AbstractIL.IL+PInvokeMethod: ILModuleRef get_Where() +FSharp.Compiler.AbstractIL.IL+PInvokeMethod: PInvokeCallingConvention CallingConv +FSharp.Compiler.AbstractIL.IL+PInvokeMethod: PInvokeCallingConvention get_CallingConv() +FSharp.Compiler.AbstractIL.IL+PInvokeMethod: PInvokeCharBestFit CharBestFit +FSharp.Compiler.AbstractIL.IL+PInvokeMethod: PInvokeCharBestFit get_CharBestFit() +FSharp.Compiler.AbstractIL.IL+PInvokeMethod: PInvokeCharEncoding CharEncoding +FSharp.Compiler.AbstractIL.IL+PInvokeMethod: PInvokeCharEncoding get_CharEncoding() +FSharp.Compiler.AbstractIL.IL+PInvokeMethod: PInvokeThrowOnUnmappableChar ThrowOnUnmappableChar +FSharp.Compiler.AbstractIL.IL+PInvokeMethod: PInvokeThrowOnUnmappableChar get_ThrowOnUnmappableChar() +FSharp.Compiler.AbstractIL.IL+PInvokeMethod: System.String Name +FSharp.Compiler.AbstractIL.IL+PInvokeMethod: System.String ToString() +FSharp.Compiler.AbstractIL.IL+PInvokeMethod: System.String get_Name() +FSharp.Compiler.AbstractIL.IL+PInvokeMethod: Void .ctor(ILModuleRef, System.String, PInvokeCallingConvention, PInvokeCharEncoding, Boolean, Boolean, PInvokeThrowOnUnmappableChar, PInvokeCharBestFit) +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar+Tags: Int32 Disabled +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar+Tags: Int32 Enabled +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar+Tags: Int32 UseAssembly +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Boolean Equals(PInvokeThrowOnUnmappableChar) +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Boolean IsDisabled +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Boolean IsEnabled +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Boolean IsUseAssembly +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Boolean get_IsDisabled() +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Boolean get_IsEnabled() +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Boolean get_IsUseAssembly() +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar+Tags +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Int32 CompareTo(PInvokeThrowOnUnmappableChar) +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Int32 Tag +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: PInvokeThrowOnUnmappableChar Disabled +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: PInvokeThrowOnUnmappableChar Enabled +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: PInvokeThrowOnUnmappableChar UseAssembly +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: PInvokeThrowOnUnmappableChar get_Disabled() +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: PInvokeThrowOnUnmappableChar get_Enabled() +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: PInvokeThrowOnUnmappableChar get_UseAssembly() +FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: System.String ToString() +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly+Tags: Int32 Mscorlib +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly+Tags: Int32 NetStandard +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly+Tags: Int32 System_Runtime +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Boolean Equals(PrimaryAssembly) +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Boolean IsMscorlib +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Boolean IsNetStandard +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Boolean IsSystem_Runtime +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Boolean get_IsMscorlib() +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Boolean get_IsNetStandard() +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Boolean get_IsSystem_Runtime() +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: FSharp.Compiler.AbstractIL.IL+PrimaryAssembly+Tags +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Int32 CompareTo(PrimaryAssembly) +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Int32 Tag +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: PrimaryAssembly Mscorlib +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: PrimaryAssembly NetStandard +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: PrimaryAssembly System_Runtime +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: PrimaryAssembly get_Mscorlib() +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: PrimaryAssembly get_NetStandard() +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: PrimaryAssembly get_System_Runtime() +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: System.String Name +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: System.String ToString() +FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: System.String get_Name() +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean Equals(PublicKey) +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean IsKey +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean IsKeyToken +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean IsPublicKey +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean IsPublicKeyToken +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean get_IsKey() +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean get_IsKeyToken() +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean get_IsPublicKey() +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean get_IsPublicKeyToken() FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Byte[] Item +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Byte[] Key +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Byte[] KeyToken FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Byte[] get_Item() +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Byte[] get_Key() +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Byte[] get_KeyToken() +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Int32 CompareTo(PublicKey) +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Int32 Tag +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: System.String ToString() +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean Equals(PublicKey) +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean IsKey +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean IsKeyToken +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean IsPublicKey +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean IsPublicKeyToken +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean get_IsKey() +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean get_IsKeyToken() +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean get_IsPublicKey() +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean get_IsPublicKeyToken() FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Byte[] Item +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Byte[] Key +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Byte[] KeyToken FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Byte[] get_Item() +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Byte[] get_Key() +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Byte[] get_KeyToken() +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Int32 CompareTo(PublicKey) +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Int32 Tag +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Int32 get_Tag() +FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: System.String ToString() FSharp.Compiler.AbstractIL.IL+PublicKey+Tags: Int32 PublicKey FSharp.Compiler.AbstractIL.IL+PublicKey+Tags: Int32 PublicKeyToken FSharp.Compiler.AbstractIL.IL+PublicKey: Boolean Equals(PublicKey) @@ -1730,6 +17611,28 @@ FSharp.Compiler.AbstractIL.IL+PublicKey: PublicKey KeyAsToken(Byte[]) FSharp.Compiler.AbstractIL.IL+PublicKey: PublicKey NewPublicKey(Byte[]) FSharp.Compiler.AbstractIL.IL+PublicKey: PublicKey NewPublicKeyToken(Byte[]) FSharp.Compiler.AbstractIL.IL+PublicKey: System.String ToString() +FSharp.Compiler.AbstractIL.IL: Boolean isILArrTy(ILType) +FSharp.Compiler.AbstractIL.IL: Boolean isILBoolTy(ILGlobals, ILType) +FSharp.Compiler.AbstractIL.IL: Boolean isILByteTy(ILGlobals, ILType) +FSharp.Compiler.AbstractIL.IL: Boolean isILCharTy(ILGlobals, ILType) +FSharp.Compiler.AbstractIL.IL: Boolean isILDoubleTy(ILGlobals, ILType) +FSharp.Compiler.AbstractIL.IL: Boolean isILInt16Ty(ILGlobals, ILType) +FSharp.Compiler.AbstractIL.IL: Boolean isILInt32Ty(ILGlobals, ILType) +FSharp.Compiler.AbstractIL.IL: Boolean isILInt64Ty(ILGlobals, ILType) +FSharp.Compiler.AbstractIL.IL: Boolean isILIntPtrTy(ILGlobals, ILType) +FSharp.Compiler.AbstractIL.IL: Boolean isILObjectTy(ILGlobals, ILType) +FSharp.Compiler.AbstractIL.IL: Boolean isILSByteTy(ILGlobals, ILType) +FSharp.Compiler.AbstractIL.IL: Boolean isILSingleTy(ILGlobals, ILType) +FSharp.Compiler.AbstractIL.IL: Boolean isILStringTy(ILGlobals, ILType) +FSharp.Compiler.AbstractIL.IL: Boolean isILTypedReferenceTy(ILGlobals, ILType) +FSharp.Compiler.AbstractIL.IL: Boolean isILUInt16Ty(ILGlobals, ILType) +FSharp.Compiler.AbstractIL.IL: Boolean isILUInt32Ty(ILGlobals, ILType) +FSharp.Compiler.AbstractIL.IL: Boolean isILUInt64Ty(ILGlobals, ILType) +FSharp.Compiler.AbstractIL.IL: Boolean isILUIntPtrTy(ILGlobals, ILType) +FSharp.Compiler.AbstractIL.IL: Boolean isTypeNameForGlobalFunctions(System.String) +FSharp.Compiler.AbstractIL.IL: Byte[] getCustomAttrData(ILGlobals, ILAttribute) +FSharp.Compiler.AbstractIL.IL: Byte[] sha1HashBytes(Byte[]) +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILAlignment FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILArgConvention FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILArrayShape FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity @@ -1739,11 +17642,20 @@ FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILAttribElem FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILAttribute FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILAttributes FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILAttributesStored +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILBasicType +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILBoxity FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILCallingConv FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILCallingSignature +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILCode +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILComparisonInstr +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILConst FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILDefaultPInvokeEncoding +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILEnumInfo FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILEventDef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILEventDefs +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILEventRef +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILExceptionClause +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILExceptionSpec FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILExportedTypeOrForwarder FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILExportedTypesAndForwarders FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILFieldDef @@ -1753,56 +17665,160 @@ FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILFieldRef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILFieldSpec FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILGenericVariance +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILGlobals +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILInstr +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILLazyMethodBody +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILLocal +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILLocalDebugMapping +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILLocalsAllocator FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILMemberAccess +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILMethodBody FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILMethodDef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILMethodDefs FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILMethodImplDef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILMethodImplDefs FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILMethodRef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILMethodSpec +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILModuleDef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILModuleRef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILNativeResource FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILNativeType +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILNativeVariant FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILNestedExportedType FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILNestedExportedTypes +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILOverridesSpec FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILParameter FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILPlatform FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILPreTypeDef +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILPreTypeDefImpl FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILPropertyDef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILPropertyDefs +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILPropertyRef +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILReadonly +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILReferences +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILResource +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILResourceAccess +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILResourceLocation FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILResources FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILReturn FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILScopeRef +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILSecurityAction +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILSecurityDecl +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILSecurityDecls FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILSecurityDeclsStored FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILSourceDocument +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILSourceMarker +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTailcall FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILThisConvention +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILToken FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILType FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTypeDef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTypeDefKind FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTypeDefStored FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTypeDefs FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTypeInit FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTypeRef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTypeSpec FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILVersionInfo +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILVolatility FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+MethodBody +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+MethodCodeKind +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+MethodKind +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+PInvokeMethod +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar +FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+PrimaryAssembly FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+PublicKey +FSharp.Compiler.AbstractIL.IL: ILAssemblyRef mkRefToILAssembly(ILAssemblyManifest) +FSharp.Compiler.AbstractIL.IL: ILAssemblyRef mkSimpleAssemblyRef(System.String) +FSharp.Compiler.AbstractIL.IL: ILAttribute mkILCustomAttribMethRef(ILGlobals, ILMethodSpec, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`4[System.String,FSharp.Compiler.AbstractIL.IL+ILType,System.Boolean,FSharp.Compiler.AbstractIL.IL+ILAttribElem]]) +FSharp.Compiler.AbstractIL.IL: ILAttribute mkILCustomAttribute(ILGlobals, ILTypeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`4[System.String,FSharp.Compiler.AbstractIL.IL+ILType,System.Boolean,FSharp.Compiler.AbstractIL.IL+ILAttribElem]]) FSharp.Compiler.AbstractIL.IL: ILAttributes emptyILCustomAttrs FSharp.Compiler.AbstractIL.IL: ILAttributes get_emptyILCustomAttrs() FSharp.Compiler.AbstractIL.IL: ILAttributes mkILCustomAttrs(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribute]) FSharp.Compiler.AbstractIL.IL: ILAttributes mkILCustomAttrsFromArray(ILAttribute[]) +FSharp.Compiler.AbstractIL.IL: ILAttributesStored mkILCustomAttrsReader(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,FSharp.Compiler.AbstractIL.IL+ILAttribute[]]) FSharp.Compiler.AbstractIL.IL: ILAttributesStored storeILCustomAttrs(ILAttributes) +FSharp.Compiler.AbstractIL.IL: ILCallingSignature mkILCallSig(ILCallingConv, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType) +FSharp.Compiler.AbstractIL.IL: ILCode buildILCode(System.String, System.Collections.Generic.Dictionary`2[System.Int32,System.Int32], ILInstr[], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILExceptionSpec], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo]) +FSharp.Compiler.AbstractIL.IL: ILCode nonBranchingInstrsToCode(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILInstr]) +FSharp.Compiler.AbstractIL.IL: ILCode prependInstrsToCode(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILInstr], ILCode) +FSharp.Compiler.AbstractIL.IL: ILEnumInfo computeILEnumInfo(System.String, ILFieldDefs) FSharp.Compiler.AbstractIL.IL: ILEventDefs emptyILEvents FSharp.Compiler.AbstractIL.IL: ILEventDefs get_emptyILEvents() FSharp.Compiler.AbstractIL.IL: ILEventDefs mkILEvents(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILEventDef]) FSharp.Compiler.AbstractIL.IL: ILEventDefs mkILEventsLazy(System.Lazy`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILEventDef]]) +FSharp.Compiler.AbstractIL.IL: ILExportedTypeOrForwarder mkTypeForwarder(ILScopeRef, System.String, ILNestedExportedTypes, ILAttributes, ILTypeDefAccess) FSharp.Compiler.AbstractIL.IL: ILExportedTypesAndForwarders mkILExportedTypes(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILExportedTypeOrForwarder]) +FSharp.Compiler.AbstractIL.IL: ILExportedTypesAndForwarders mkILExportedTypesLazy(System.Lazy`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILExportedTypeOrForwarder]]) +FSharp.Compiler.AbstractIL.IL: ILFieldDef mkILInstanceField(System.String, ILType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldInit], ILMemberAccess) +FSharp.Compiler.AbstractIL.IL: ILFieldDef mkILLiteralField(System.String, ILType, ILFieldInit, Microsoft.FSharp.Core.FSharpOption`1[System.Byte[]], ILMemberAccess) +FSharp.Compiler.AbstractIL.IL: ILFieldDef mkILStaticField(System.String, ILType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldInit], Microsoft.FSharp.Core.FSharpOption`1[System.Byte[]], ILMemberAccess) FSharp.Compiler.AbstractIL.IL: ILFieldDefs emptyILFields FSharp.Compiler.AbstractIL.IL: ILFieldDefs get_emptyILFields() FSharp.Compiler.AbstractIL.IL: ILFieldDefs mkILFields(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILFieldDef]) FSharp.Compiler.AbstractIL.IL: ILFieldDefs mkILFieldsLazy(System.Lazy`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILFieldDef]]) +FSharp.Compiler.AbstractIL.IL: ILFieldRef mkILFieldRef(ILTypeRef, System.String, ILType) +FSharp.Compiler.AbstractIL.IL: ILFieldRef mkRefForILField(ILScopeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILTypeDef], ILTypeDef, ILFieldDef) +FSharp.Compiler.AbstractIL.IL: ILFieldRef mkRefToILField(ILTypeRef, ILFieldDef) +FSharp.Compiler.AbstractIL.IL: ILFieldRef rescopeILFieldRef(ILScopeRef, ILFieldRef) +FSharp.Compiler.AbstractIL.IL: ILFieldSpec mkILFieldSpec(ILFieldRef, ILType) +FSharp.Compiler.AbstractIL.IL: ILFieldSpec mkILFieldSpecInTy(ILType, System.String, ILType) +FSharp.Compiler.AbstractIL.IL: ILGenericParameterDef mkILSimpleTypar(System.String) +FSharp.Compiler.AbstractIL.IL: ILGlobals EcmaMscorlibILGlobals +FSharp.Compiler.AbstractIL.IL: ILGlobals PrimaryAssemblyILGlobals +FSharp.Compiler.AbstractIL.IL: ILGlobals get_EcmaMscorlibILGlobals() +FSharp.Compiler.AbstractIL.IL: ILGlobals get_PrimaryAssemblyILGlobals() +FSharp.Compiler.AbstractIL.IL: ILGlobals mkILGlobals(ILScopeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAssemblyRef]) +FSharp.Compiler.AbstractIL.IL: ILInstr get_mkLdarg0() +FSharp.Compiler.AbstractIL.IL: ILInstr mkLdarg(UInt16) +FSharp.Compiler.AbstractIL.IL: ILInstr mkLdarg0 +FSharp.Compiler.AbstractIL.IL: ILInstr mkLdcInt32(Int32) +FSharp.Compiler.AbstractIL.IL: ILInstr mkLdloc(UInt16) +FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalCall(ILMethodSpec) +FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalCallconstraint(ILType, ILMethodSpec) +FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalCallvirt(ILMethodSpec) +FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalLdfld(ILFieldSpec) +FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalLdflda(ILFieldSpec) +FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalLdobj(ILType) +FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalLdsfld(ILFieldSpec) +FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalNewobj(ILMethodSpec) +FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalStfld(ILFieldSpec) +FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalStobj(ILType) +FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalStsfld(ILFieldSpec) +FSharp.Compiler.AbstractIL.IL: ILInstr mkStloc(UInt16) +FSharp.Compiler.AbstractIL.IL: ILLazyMethodBody get_methBodyAbstract() +FSharp.Compiler.AbstractIL.IL: ILLazyMethodBody get_methBodyNative() +FSharp.Compiler.AbstractIL.IL: ILLazyMethodBody get_methBodyNotAvailable() +FSharp.Compiler.AbstractIL.IL: ILLazyMethodBody methBodyAbstract +FSharp.Compiler.AbstractIL.IL: ILLazyMethodBody methBodyNative +FSharp.Compiler.AbstractIL.IL: ILLazyMethodBody methBodyNotAvailable +FSharp.Compiler.AbstractIL.IL: ILLazyMethodBody mkMethBodyAux(MethodBody) +FSharp.Compiler.AbstractIL.IL: ILLazyMethodBody mkMethBodyLazyAux(System.Lazy`1[FSharp.Compiler.AbstractIL.IL+MethodBody]) +FSharp.Compiler.AbstractIL.IL: ILLocal mkILLocal(ILType, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.String,System.Int32,System.Int32]]) +FSharp.Compiler.AbstractIL.IL: ILMethodBody mkILMethodBody(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocal], Int32, ILCode, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSourceMarker]) +FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILClassCtor(MethodBody) +FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILCtor(ILMemberAccess, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], MethodBody) +FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILGenericNonVirtualMethod(System.String, ILMemberAccess, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], ILReturn, MethodBody) +FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILGenericVirtualMethod(System.String, ILMemberAccess, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], ILReturn, MethodBody) +FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILNonGenericEmptyCtor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSourceMarker], ILType) +FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILNonGenericInstanceMethod(System.String, ILMemberAccess, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], ILReturn, MethodBody) +FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILNonGenericStaticMethod(System.String, ILMemberAccess, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], ILReturn, MethodBody) +FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILNonGenericVirtualMethod(System.String, ILMemberAccess, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], ILReturn, MethodBody) +FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILSimpleStorageCtor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSourceMarker], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILTypeSpec], ILType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.AbstractIL.IL+ILType]], ILMemberAccess) +FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILSimpleStorageCtorWithParamNames(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSourceMarker], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILTypeSpec], ILType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.String,System.String,FSharp.Compiler.AbstractIL.IL+ILType]], ILMemberAccess) +FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILStaticMethod(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef], System.String, ILMemberAccess, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], ILReturn, MethodBody) +FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILStorageCtor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSourceMarker], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILInstr], ILType, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.AbstractIL.IL+ILType]], ILMemberAccess) +FSharp.Compiler.AbstractIL.IL: ILMethodDef prependInstrsToMethod(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILInstr], ILMethodDef) +FSharp.Compiler.AbstractIL.IL: ILMethodDef resolveILMethodRef(ILTypeDef, ILMethodRef) +FSharp.Compiler.AbstractIL.IL: ILMethodDef resolveILMethodRefWithRescope(Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.AbstractIL.IL+ILType,FSharp.Compiler.AbstractIL.IL+ILType], ILTypeDef, ILMethodRef) FSharp.Compiler.AbstractIL.IL: ILMethodDefs emptyILMethods FSharp.Compiler.AbstractIL.IL: ILMethodDefs get_emptyILMethods() FSharp.Compiler.AbstractIL.IL: ILMethodDefs mkILMethods(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILMethodDef]) @@ -1812,27 +17828,113 @@ FSharp.Compiler.AbstractIL.IL: ILMethodImplDefs emptyILMethodImpls FSharp.Compiler.AbstractIL.IL: ILMethodImplDefs get_emptyILMethodImpls() FSharp.Compiler.AbstractIL.IL: ILMethodImplDefs mkILMethodImpls(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILMethodImplDef]) FSharp.Compiler.AbstractIL.IL: ILMethodImplDefs mkILMethodImplsLazy(System.Lazy`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILMethodImplDef]]) +FSharp.Compiler.AbstractIL.IL: ILMethodRef mkILMethRef(ILTypeRef, ILCallingConv, System.String, Int32, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType) +FSharp.Compiler.AbstractIL.IL: ILMethodRef mkRefForILMethod(ILScopeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILTypeDef], ILTypeDef, ILMethodDef) +FSharp.Compiler.AbstractIL.IL: ILMethodRef mkRefToILMethod(ILTypeRef, ILMethodDef) +FSharp.Compiler.AbstractIL.IL: ILMethodRef rescopeILMethodRef(ILScopeRef, ILMethodRef) +FSharp.Compiler.AbstractIL.IL: ILMethodSpec mkCtorMethSpecForDelegate(ILGlobals, ILType, Boolean) +FSharp.Compiler.AbstractIL.IL: ILMethodSpec mkILCtorMethSpecForTy(ILType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) +FSharp.Compiler.AbstractIL.IL: ILMethodSpec mkILInstanceMethSpecInTy(ILType, System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) +FSharp.Compiler.AbstractIL.IL: ILMethodSpec mkILMethSpec(ILMethodRef, ILBoxity, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) +FSharp.Compiler.AbstractIL.IL: ILMethodSpec mkILMethSpecForMethRefInTy(ILMethodRef, ILType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) +FSharp.Compiler.AbstractIL.IL: ILMethodSpec mkILMethSpecInTy(ILType, ILCallingConv, System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) +FSharp.Compiler.AbstractIL.IL: ILMethodSpec mkILNonGenericInstanceMethSpecInTy(ILType, System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType) +FSharp.Compiler.AbstractIL.IL: ILMethodSpec mkILNonGenericMethSpecInTy(ILType, ILCallingConv, System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType) +FSharp.Compiler.AbstractIL.IL: ILMethodSpec mkILNonGenericStaticMethSpecInTy(ILType, System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType) +FSharp.Compiler.AbstractIL.IL: ILMethodSpec mkILStaticMethSpecInTy(ILType, System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) FSharp.Compiler.AbstractIL.IL: ILModuleDef mkILSimpleModule(System.String, System.String, Boolean, System.Tuple`2[System.Int32,System.Int32], Boolean, ILTypeDefs, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.String], Int32, ILExportedTypesAndForwarders, System.String) +FSharp.Compiler.AbstractIL.IL: ILModuleRef mkRefToILModule(ILModuleDef) +FSharp.Compiler.AbstractIL.IL: ILModuleRef mkSimpleModRef(System.String) FSharp.Compiler.AbstractIL.IL: ILNestedExportedTypes mkILNestedExportedTypes(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILNestedExportedType]) +FSharp.Compiler.AbstractIL.IL: ILNestedExportedTypes mkILNestedExportedTypesLazy(System.Lazy`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILNestedExportedType]]) +FSharp.Compiler.AbstractIL.IL: ILParameter mkILParam(Microsoft.FSharp.Core.FSharpOption`1[System.String], ILType) +FSharp.Compiler.AbstractIL.IL: ILParameter mkILParamAnon(ILType) +FSharp.Compiler.AbstractIL.IL: ILParameter mkILParamNamed(System.String, ILType) +FSharp.Compiler.AbstractIL.IL: ILPreTypeDef mkILPreTypeDef(ILTypeDef) +FSharp.Compiler.AbstractIL.IL: ILPreTypeDef mkILPreTypeDefComputed(Microsoft.FSharp.Collections.FSharpList`1[System.String], System.String, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.AbstractIL.IL+ILTypeDef]) +FSharp.Compiler.AbstractIL.IL: ILPreTypeDef mkILPreTypeDefRead(Microsoft.FSharp.Collections.FSharpList`1[System.String], System.String, Int32, ILTypeDefStored) FSharp.Compiler.AbstractIL.IL: ILPropertyDefs emptyILProperties FSharp.Compiler.AbstractIL.IL: ILPropertyDefs get_emptyILProperties() FSharp.Compiler.AbstractIL.IL: ILPropertyDefs mkILProperties(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILPropertyDef]) FSharp.Compiler.AbstractIL.IL: ILPropertyDefs mkILPropertiesLazy(System.Lazy`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILPropertyDef]]) -FSharp.Compiler.AbstractIL.IL: ILResources emptyILResources -FSharp.Compiler.AbstractIL.IL: ILResources get_emptyILResources() +FSharp.Compiler.AbstractIL.IL: ILReferences computeILRefs(ILGlobals, ILModuleDef) +FSharp.Compiler.AbstractIL.IL: ILReferences emptyILRefs +FSharp.Compiler.AbstractIL.IL: ILReferences get_emptyILRefs() +FSharp.Compiler.AbstractIL.IL: ILResources mkILResources(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILResource]) FSharp.Compiler.AbstractIL.IL: ILReturn mkILReturn(ILType) +FSharp.Compiler.AbstractIL.IL: ILScopeRef rescopeILScopeRef(ILScopeRef, ILScopeRef) +FSharp.Compiler.AbstractIL.IL: ILSecurityDecl mkPermissionSet(ILGlobals, ILSecurityAction, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.AbstractIL.IL+ILTypeRef,Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.String,FSharp.Compiler.AbstractIL.IL+ILType,FSharp.Compiler.AbstractIL.IL+ILAttribElem]]]]) FSharp.Compiler.AbstractIL.IL: ILSecurityDecls emptyILSecurityDecls FSharp.Compiler.AbstractIL.IL: ILSecurityDecls get_emptyILSecurityDecls() FSharp.Compiler.AbstractIL.IL: ILSecurityDecls mkILSecurityDecls(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILSecurityDecl]) +FSharp.Compiler.AbstractIL.IL: ILSecurityDeclsStored mkILSecurityDeclsReader(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,FSharp.Compiler.AbstractIL.IL+ILSecurityDecl[]]) FSharp.Compiler.AbstractIL.IL: ILSecurityDeclsStored storeILSecurityDecls(ILSecurityDecls) +FSharp.Compiler.AbstractIL.IL: ILTailcall andTailness(ILTailcall, Boolean) +FSharp.Compiler.AbstractIL.IL: ILType getTyOfILEnumInfo(ILEnumInfo) +FSharp.Compiler.AbstractIL.IL: ILType instILType(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType) +FSharp.Compiler.AbstractIL.IL: ILType instILTypeAux(Int32, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType) +FSharp.Compiler.AbstractIL.IL: ILType mkILArr1DTy(ILType) +FSharp.Compiler.AbstractIL.IL: ILType mkILArrTy(ILType, ILArrayShape) +FSharp.Compiler.AbstractIL.IL: ILType mkILBoxedTy(ILTypeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) +FSharp.Compiler.AbstractIL.IL: ILType mkILBoxedType(ILTypeSpec) +FSharp.Compiler.AbstractIL.IL: ILType mkILFormalBoxedTy(ILTypeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef]) +FSharp.Compiler.AbstractIL.IL: ILType mkILFormalNamedTy(ILBoxity, ILTypeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef]) +FSharp.Compiler.AbstractIL.IL: ILType mkILNamedTy(ILBoxity, ILTypeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) +FSharp.Compiler.AbstractIL.IL: ILType mkILNonGenericBoxedTy(ILTypeRef) +FSharp.Compiler.AbstractIL.IL: ILType mkILNonGenericValueTy(ILTypeRef) +FSharp.Compiler.AbstractIL.IL: ILType mkILTy(ILBoxity, ILTypeSpec) +FSharp.Compiler.AbstractIL.IL: ILType mkILTypeForGlobalFunctions(ILScopeRef) +FSharp.Compiler.AbstractIL.IL: ILType mkILTyvarTy(UInt16) +FSharp.Compiler.AbstractIL.IL: ILType mkILValueTy(ILTypeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) +FSharp.Compiler.AbstractIL.IL: ILType rescopeILType(ILScopeRef, ILType) +FSharp.Compiler.AbstractIL.IL: ILType unscopeILType(ILType) +FSharp.Compiler.AbstractIL.IL: ILTypeDef mkILGenericClass(System.String, ILTypeDefAccess, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef], ILType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILMethodDefs, ILFieldDefs, ILTypeDefs, ILPropertyDefs, ILEventDefs, ILAttributes, ILTypeInit) +FSharp.Compiler.AbstractIL.IL: ILTypeDef mkILSimpleClass(ILGlobals, System.String, ILTypeDefAccess, ILMethodDefs, ILFieldDefs, ILTypeDefs, ILPropertyDefs, ILEventDefs, ILAttributes, ILTypeInit) +FSharp.Compiler.AbstractIL.IL: ILTypeDef mkILTypeDefForGlobalFunctions(ILGlobals, ILMethodDefs, ILFieldDefs) +FSharp.Compiler.AbstractIL.IL: ILTypeDef mkRawDataValueTypeDef(ILType, System.String, Int32, UInt16) +FSharp.Compiler.AbstractIL.IL: ILTypeDef prependInstrsToClassCtor(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILInstr], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSourceMarker], ILTypeDef) +FSharp.Compiler.AbstractIL.IL: ILTypeDefStored mkILTypeDefReader(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,FSharp.Compiler.AbstractIL.IL+ILTypeDef]) +FSharp.Compiler.AbstractIL.IL: ILTypeDefs addILTypeDef(ILTypeDef, ILTypeDefs) FSharp.Compiler.AbstractIL.IL: ILTypeDefs emptyILTypeDefs FSharp.Compiler.AbstractIL.IL: ILTypeDefs get_emptyILTypeDefs() FSharp.Compiler.AbstractIL.IL: ILTypeDefs mkILTypeDefs(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILTypeDef]) FSharp.Compiler.AbstractIL.IL: ILTypeDefs mkILTypeDefsComputed(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.AbstractIL.IL+ILPreTypeDef[]]) FSharp.Compiler.AbstractIL.IL: ILTypeDefs mkILTypeDefsFromArray(ILTypeDef[]) +FSharp.Compiler.AbstractIL.IL: ILTypeRef mkILNestedTyRef(ILScopeRef, Microsoft.FSharp.Collections.FSharpList`1[System.String], System.String) +FSharp.Compiler.AbstractIL.IL: ILTypeRef mkILTyRef(ILScopeRef, System.String) +FSharp.Compiler.AbstractIL.IL: ILTypeRef mkILTyRefInTyRef(ILTypeRef, System.String) +FSharp.Compiler.AbstractIL.IL: ILTypeRef mkRefForNestedILTypeDef(ILScopeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILTypeDef], ILTypeDef) +FSharp.Compiler.AbstractIL.IL: ILTypeSpec mkILNonGenericTySpec(ILTypeRef) +FSharp.Compiler.AbstractIL.IL: ILTypeSpec mkILTySpec(ILTypeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) +FSharp.Compiler.AbstractIL.IL: ILTypeSpec rescopeILTypeSpec(ILScopeRef, ILTypeSpec) +FSharp.Compiler.AbstractIL.IL: ILVersionInfo parseILVersion(System.String) FSharp.Compiler.AbstractIL.IL: Int32 NoMetadataIdx +FSharp.Compiler.AbstractIL.IL: Int32 compareILVersions(ILVersionInfo, ILVersionInfo) +FSharp.Compiler.AbstractIL.IL: Int32 generateCodeLabel() FSharp.Compiler.AbstractIL.IL: Int32 get_NoMetadataIdx() -FSharp.Compiler.AbstractIL.ILBinaryReader +FSharp.Compiler.AbstractIL.IL: Int64 sha1HashInt64(Byte[]) +FSharp.Compiler.AbstractIL.IL: MethodBody mkMethodBody(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocal], Int32, ILCode, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSourceMarker]) +FSharp.Compiler.AbstractIL.IL: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef] get_mkILEmptyGenericParams() +FSharp.Compiler.AbstractIL.IL: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef] mkILEmptyGenericParams +FSharp.Compiler.AbstractIL.IL: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef] mkILFormalTypars(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) +FSharp.Compiler.AbstractIL.IL: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILInstr] mkCallBaseConstructor(ILType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) +FSharp.Compiler.AbstractIL.IL: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILMethodDef] mkILDelegateMethods(ILMemberAccess, ILGlobals, ILType, ILType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], ILReturn) +FSharp.Compiler.AbstractIL.IL: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILTypeDef] destTypeDefsWithGlobalFunctionsFirst(ILGlobals, ILTypeDefs) +FSharp.Compiler.AbstractIL.IL: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] mkILFormalGenericArgs(Int32, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef]) +FSharp.Compiler.AbstractIL.IL: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] typesOfILParams(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter]) +FSharp.Compiler.AbstractIL.IL: Microsoft.FSharp.Collections.FSharpList`1[System.String] splitNamespace(System.String) +FSharp.Compiler.AbstractIL.IL: PublicKey ecmaPublicKey +FSharp.Compiler.AbstractIL.IL: PublicKey get_ecmaPublicKey() +FSharp.Compiler.AbstractIL.IL: System.String formatCodeLabel(Int32) +FSharp.Compiler.AbstractIL.IL: System.String formatILVersion(ILVersionInfo) +FSharp.Compiler.AbstractIL.IL: System.String get_typeNameForGlobalFunctions() +FSharp.Compiler.AbstractIL.IL: System.String typeNameForGlobalFunctions +FSharp.Compiler.AbstractIL.IL: System.String[] splitNamespaceToArray(System.String) +FSharp.Compiler.AbstractIL.IL: System.Tuple`2[FSharp.Compiler.AbstractIL.IL+ILArrayShape,FSharp.Compiler.AbstractIL.IL+ILType] destILArrTy(ILType) +FSharp.Compiler.AbstractIL.IL: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem],Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`4[System.String,FSharp.Compiler.AbstractIL.IL+ILType,System.Boolean,FSharp.Compiler.AbstractIL.IL+ILAttribElem]]] decodeILAttribData(ILGlobals, ILAttribute) +FSharp.Compiler.AbstractIL.IL: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],System.String] splitILTypeName(System.String) +FSharp.Compiler.AbstractIL.IL: System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[System.String],System.String] splitTypeNameRight(System.String) +FSharp.Compiler.AbstractIL.IL: System.Tuple`2[System.String[],System.String] splitILTypeNameWithPossibleStaticArguments(System.String) FSharp.Compiler.AbstractIL.ILBinaryReader+ILModuleReader: ILModuleDef ILModuleDef FSharp.Compiler.AbstractIL.ILBinaryReader+ILModuleReader: ILModuleDef get_ILModuleDef() FSharp.Compiler.AbstractIL.ILBinaryReader+ILModuleReader: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAssemblyRef] ILAssemblyRefs @@ -1892,2197 +17994,1007 @@ FSharp.Compiler.AbstractIL.ILBinaryReader+ReduceMemoryFlag: ReduceMemoryFlag get FSharp.Compiler.AbstractIL.ILBinaryReader+ReduceMemoryFlag: ReduceMemoryFlag get_Yes() FSharp.Compiler.AbstractIL.ILBinaryReader+ReduceMemoryFlag: System.String ToString() FSharp.Compiler.AbstractIL.ILBinaryReader+Shim+IAssemblyReader: ILModuleReader GetILModuleReader(System.String, ILReaderOptions) +FSharp.Compiler.AbstractIL.ILBinaryReader+Shim: FSharp.Compiler.AbstractIL.ILBinaryReader+Shim+DefaultAssemblyReader FSharp.Compiler.AbstractIL.ILBinaryReader+Shim: FSharp.Compiler.AbstractIL.ILBinaryReader+Shim+IAssemblyReader FSharp.Compiler.AbstractIL.ILBinaryReader+Shim: IAssemblyReader AssemblyReader FSharp.Compiler.AbstractIL.ILBinaryReader+Shim: IAssemblyReader get_AssemblyReader() FSharp.Compiler.AbstractIL.ILBinaryReader+Shim: Void set_AssemblyReader(IAssemblyReader) +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Boolean Equals(Statistics) +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 CompareTo(Statistics) +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 CompareTo(System.Object) +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 byteFileCount +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 byteFileCount@ +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 get_byteFileCount() +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 get_memoryMapFileClosedCount() +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 get_memoryMapFileOpenedCount() +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 get_rawMemoryFileCount() +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 get_weakByteFileCount() +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 memoryMapFileClosedCount +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 memoryMapFileClosedCount@ +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 memoryMapFileOpenedCount +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 memoryMapFileOpenedCount@ +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 rawMemoryFileCount +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 rawMemoryFileCount@ +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 weakByteFileCount +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 weakByteFileCount@ +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: System.String ToString() +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Void .ctor(Int32, Int32, Int32, Int32, Int32) +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Void set_byteFileCount(Int32) +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Void set_memoryMapFileClosedCount(Int32) +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Void set_memoryMapFileOpenedCount(Int32) +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Void set_rawMemoryFileCount(Int32) +FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Void set_weakByteFileCount(Int32) FSharp.Compiler.AbstractIL.ILBinaryReader: FSharp.Compiler.AbstractIL.ILBinaryReader+ILModuleReader FSharp.Compiler.AbstractIL.ILBinaryReader: FSharp.Compiler.AbstractIL.ILBinaryReader+ILReaderOptions FSharp.Compiler.AbstractIL.ILBinaryReader: FSharp.Compiler.AbstractIL.ILBinaryReader+MetadataOnlyFlag FSharp.Compiler.AbstractIL.ILBinaryReader: FSharp.Compiler.AbstractIL.ILBinaryReader+ReduceMemoryFlag FSharp.Compiler.AbstractIL.ILBinaryReader: FSharp.Compiler.AbstractIL.ILBinaryReader+Shim -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer+Succeeded: FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults Item -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer+Succeeded: FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults get_Item() -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer+Tags: Int32 Aborted -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer+Tags: Int32 Succeeded -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Boolean Equals(FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer) -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Boolean Equals(System.Object) -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Boolean IsAborted -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Boolean IsSucceeded -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Boolean get_IsAborted() -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Boolean get_IsSucceeded() -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer Aborted -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer NewSucceeded(FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults) -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer get_Aborted() -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer+Succeeded -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer+Tags -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Int32 GetHashCode() -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Int32 Tag -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Int32 get_Tag() -FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: System.String ToString() -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Boolean HasFullTypeCheckInfo -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Boolean IsRelativeNameResolvableFromSymbol(FSharp.Compiler.Text.Position, Microsoft.FSharp.Collections.FSharpList`1[System.String], FSharp.Compiler.Symbols.FSharpSymbol) -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Boolean get_HasFullTypeCheckInfo() -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.CodeAnalysis.FSharpProjectContext ProjectContext -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.CodeAnalysis.FSharpProjectContext get_ProjectContext() -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.CodeAnalysis.FSharpSymbolUse[] GetUsesOfSymbolInFile(FSharp.Compiler.Symbols.FSharpSymbol, Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.Diagnostics.FSharpDiagnostic[] Diagnostics -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.Diagnostics.FSharpDiagnostic[] get_Diagnostics() -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.EditorServices.DeclarationListInfo GetDeclarationListInfo(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.FSharpParseFileResults], Int32, System.String, FSharp.Compiler.EditorServices.PartialLongName, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.AssemblySymbol]]]) -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.EditorServices.FindDeclResult GetDeclarationLocation(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.EditorServices.MethodGroup GetMethods(Int32, Int32, System.String, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.EditorServices.SemanticClassificationItem[] GetSemanticClassification(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range]) -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.EditorServices.ToolTipText GetToolTip(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], Int32) -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.Symbols.FSharpAssemblySignature PartialAssemblySignature -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.Symbols.FSharpAssemblySignature get_PartialAssemblySignature() -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.Symbols.FSharpOpenDeclaration[] OpenDeclarations -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.Symbols.FSharpOpenDeclaration[] get_OpenDeclarations() -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.Text.Range[] GetFormatSpecifierLocations() -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.CodeAnalysis.FSharpSymbolUse]] GetDeclarationListSymbols(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.FSharpParseFileResults], Int32, System.String, FSharp.Compiler.EditorServices.PartialLongName, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.AssemblySymbol]]]) -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.FSharpSymbolUse] GetSymbolUseAtLocation(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpDisplayContext] GetDisplayContextForPos(FSharp.Compiler.Text.Position) -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpImplementationFileContents] ImplementationFile -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpImplementationFileContents] get_ImplementationFile() -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.ISourceText] GenerateSignature() -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.CodeAnalysis.FSharpSymbolUse]] GetMethodsAsSymbols(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[System.String] GetF1Keyword(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: System.Collections.Generic.IEnumerable`1[FSharp.Compiler.CodeAnalysis.FSharpSymbolUse] GetAllUsesOfAllSymbolsInFile(Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: System.String ToString() -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: System.String[] DependencyFiles -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: System.String[] get_DependencyFiles() -FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: System.Tuple`2[FSharp.Compiler.Text.Range,System.Int32][] GetFormatSpecifierLocationsAndArity() -FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults -FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: Boolean HasCriticalErrors -FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: Boolean get_HasCriticalErrors() -FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.CodeAnalysis.FSharpProjectContext ProjectContext -FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.CodeAnalysis.FSharpProjectContext get_ProjectContext() -FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.CodeAnalysis.FSharpSymbolUse[] GetAllUsesOfAllSymbols(Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.CodeAnalysis.FSharpSymbolUse[] GetUsesOfSymbol(FSharp.Compiler.Symbols.FSharpSymbol, Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.Diagnostics.FSharpDiagnostic[] Diagnostics -FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.Diagnostics.FSharpDiagnostic[] get_Diagnostics() -FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.Symbols.FSharpAssemblyContents AssemblyContents -FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.Symbols.FSharpAssemblyContents GetOptimizedAssemblyContents() -FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.Symbols.FSharpAssemblyContents get_AssemblyContents() -FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.Symbols.FSharpAssemblySignature AssemblySignature -FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.Symbols.FSharpAssemblySignature get_AssemblySignature() -FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: System.String ToString() -FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: System.String[] DependencyFiles -FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: System.String[] get_DependencyFiles() -FSharp.Compiler.CodeAnalysis.FSharpChecker -FSharp.Compiler.CodeAnalysis.FSharpChecker: FSharp.Compiler.CodeAnalysis.FSharpChecker Create(Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.LegacyReferenceResolver], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.String,System.DateTime],Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Object,System.IntPtr,System.Int32]]]], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: FSharp.Compiler.CodeAnalysis.FSharpChecker Instance -FSharp.Compiler.CodeAnalysis.FSharpChecker: FSharp.Compiler.CodeAnalysis.FSharpChecker get_Instance() -FSharp.Compiler.CodeAnalysis.FSharpChecker: FSharp.Compiler.CodeAnalysis.FSharpProjectOptions GetProjectOptionsFromCommandLineArgs(System.String, System.String[], Microsoft.FSharp.Core.FSharpOption`1[System.DateTime], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: FSharp.Compiler.Tokenization.FSharpTokenInfo[][] TokenizeFile(System.String) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Int32 ActualCheckFileCount -FSharp.Compiler.CodeAnalysis.FSharpChecker: Int32 ActualParseFileCount -FSharp.Compiler.CodeAnalysis.FSharpChecker: Int32 MaxMemory -FSharp.Compiler.CodeAnalysis.FSharpChecker: Int32 get_ActualCheckFileCount() -FSharp.Compiler.CodeAnalysis.FSharpChecker: Int32 get_ActualParseFileCount() -FSharp.Compiler.CodeAnalysis.FSharpChecker: Int32 get_MaxMemory() -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer] CheckFileInProject(FSharp.Compiler.CodeAnalysis.FSharpParseFileResults, System.String, Int32, FSharp.Compiler.Text.ISourceText, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults] ParseAndCheckProject(FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.CodeAnalysis.FSharpParseFileResults] GetBackgroundParseResultsForFileInProject(System.String, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.CodeAnalysis.FSharpParseFileResults] ParseFile(System.String, FSharp.Compiler.Text.ISourceText, FSharp.Compiler.CodeAnalysis.FSharpParsingOptions, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.CodeAnalysis.FSharpParseFileResults] ParseFileInProject(System.String, System.String, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer]] CheckFileInProjectAllowingStaleCachedResults(FSharp.Compiler.CodeAnalysis.FSharpParseFileResults, System.String, Int32, System.String, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.EditorServices.SemanticClassificationView]] GetBackgroundSemanticClassificationForFile(System.String, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] NotifyProjectCleaned(FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Collections.Generic.IEnumerable`1[FSharp.Compiler.Text.Range]] FindBackgroundReferencesInFile(System.String, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, FSharp.Compiler.Symbols.FSharpSymbol, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.CodeAnalysis.FSharpParseFileResults,FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer]] ParseAndCheckFileInProject(System.String, Int32, FSharp.Compiler.Text.ISourceText, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.CodeAnalysis.FSharpParseFileResults,FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults]] GetBackgroundCheckResultsForFileInProject(System.String, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.CodeAnalysis.FSharpProjectOptions,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Diagnostics.FSharpDiagnostic]]] GetProjectOptionsFromScript(System.String, FSharp.Compiler.Text.ISourceText, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.DateTime], Microsoft.FSharp.Core.FSharpOption`1[System.String[]], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Int64], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.Diagnostics.FSharpDiagnostic[],System.Int32]] Compile(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedInput], System.String, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.Diagnostics.FSharpDiagnostic[],System.Int32]] Compile(System.String[], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.Text.Range,FSharp.Compiler.Text.Range][]] MatchBraces(System.String, FSharp.Compiler.Text.ISourceText, FSharp.Compiler.CodeAnalysis.FSharpParsingOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.Text.Range,FSharp.Compiler.Text.Range][]] MatchBraces(System.String, System.String, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`3[FSharp.Compiler.Diagnostics.FSharpDiagnostic[],System.Int32,Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.Assembly]]] CompileToDynamicAssembly(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedInput], System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.IO.TextWriter,System.IO.TextWriter]], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`3[FSharp.Compiler.Diagnostics.FSharpDiagnostic[],System.Int32,Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.Assembly]]] CompileToDynamicAssembly(System.String[], Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.IO.TextWriter,System.IO.TextWriter]], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[FSharp.Compiler.CodeAnalysis.FSharpProjectOptions],FSharp.Compiler.CodeAnalysis.FSharpProjectOptions] ProjectChecked -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[FSharp.Compiler.CodeAnalysis.FSharpProjectOptions],FSharp.Compiler.CodeAnalysis.FSharpProjectOptions] get_ProjectChecked() -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit] MaxMemoryReached -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit] get_MaxMemoryReached() -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]],System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]] BeforeBackgroundFileCheck -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]],System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]] FileChecked -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]],System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]] FileParsed -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]],System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]] get_BeforeBackgroundFileCheck() -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]],System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]] get_FileChecked() -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]],System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]] get_FileParsed() -FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.CodeAnalysis.FSharpParseFileResults,FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults,System.Int64]] TryGetRecentCheckResultsForFile(System.String, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.ISourceText], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: System.Tuple`2[FSharp.Compiler.CodeAnalysis.FSharpParsingOptions,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Diagnostics.FSharpDiagnostic]] GetParsingOptionsFromCommandLineArgs(Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: System.Tuple`2[FSharp.Compiler.CodeAnalysis.FSharpParsingOptions,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Diagnostics.FSharpDiagnostic]] GetParsingOptionsFromCommandLineArgs(Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: System.Tuple`2[FSharp.Compiler.CodeAnalysis.FSharpParsingOptions,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Diagnostics.FSharpDiagnostic]] GetParsingOptionsFromProjectOptions(FSharp.Compiler.CodeAnalysis.FSharpProjectOptions) -FSharp.Compiler.CodeAnalysis.FSharpChecker: System.Tuple`2[FSharp.Compiler.Tokenization.FSharpTokenInfo[],FSharp.Compiler.Tokenization.FSharpTokenizerLexState] TokenizeLine(System.String, FSharp.Compiler.Tokenization.FSharpTokenizerLexState) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Void ClearCache(System.Collections.Generic.IEnumerable`1[FSharp.Compiler.CodeAnalysis.FSharpProjectOptions], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Void ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() -FSharp.Compiler.CodeAnalysis.FSharpChecker: Void InvalidateAll() -FSharp.Compiler.CodeAnalysis.FSharpChecker: Void InvalidateConfiguration(FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CodeAnalysis.FSharpChecker: Void set_MaxMemory(Int32) -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Boolean IsBindingALambdaAtPosition(FSharp.Compiler.Text.Position) -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Boolean IsPosContainedInApplication(FSharp.Compiler.Text.Position) -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Boolean IsPositionContainedInACurriedParameter(FSharp.Compiler.Text.Position) -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Boolean IsTypeAnnotationGivenAtPosition(FSharp.Compiler.Text.Position) -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Boolean ParseHadErrors -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Boolean get_ParseHadErrors() -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: FSharp.Compiler.Diagnostics.FSharpDiagnostic[] Diagnostics -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: FSharp.Compiler.Diagnostics.FSharpDiagnostic[] get_Diagnostics() -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: FSharp.Compiler.EditorServices.NavigationItems GetNavigationItems() -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: FSharp.Compiler.Syntax.ParsedInput ParseTree -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: FSharp.Compiler.Syntax.ParsedInput get_ParseTree() -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.EditorServices.ParameterLocations] FindParameterLocations(FSharp.Compiler.Text.Position) -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] TryRangeOfExprInYieldOrReturn(FSharp.Compiler.Text.Position) -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] TryRangeOfExpressionBeingDereferencedContainingPos(FSharp.Compiler.Text.Position) -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] TryRangeOfFunctionOrMethodBeingApplied(FSharp.Compiler.Text.Position) -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] TryRangeOfNameOfNearestOuterBindingContainingPos(FSharp.Compiler.Text.Position) -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] TryRangeOfRecordExpressionContainingPos(FSharp.Compiler.Text.Position) -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] TryRangeOfRefCellDereferenceContainingPos(FSharp.Compiler.Text.Position) -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] ValidateBreakpointLocation(FSharp.Compiler.Text.Position) -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range]] GetAllArgumentsForFunctionApplicationAtPostion(FSharp.Compiler.Text.Position) -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,System.Int32]] TryIdentOfPipelineContainingPosAndNumArgsApplied(FSharp.Compiler.Text.Position) -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.Text.Range,FSharp.Compiler.Text.Range,FSharp.Compiler.Text.Range]] TryRangeOfParenEnclosingOpEqualsGreaterUsage(FSharp.Compiler.Text.Position) -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: System.String FileName -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: System.String get_FileName() -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: System.String[] DependencyFiles -FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: System.String[] get_DependencyFiles() -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Boolean CompilingFsLib -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Boolean Equals(FSharp.Compiler.CodeAnalysis.FSharpParsingOptions) -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Boolean Equals(System.Object) -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Boolean IsExe -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Boolean IsInteractive -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Boolean get_CompilingFsLib() -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Boolean get_IsExe() -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Boolean get_IsInteractive() -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: FSharp.Compiler.CodeAnalysis.FSharpParsingOptions Default -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: FSharp.Compiler.CodeAnalysis.FSharpParsingOptions get_Default() -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions ErrorSeverityOptions -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions get_ErrorSeverityOptions() -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Int32 CompareTo(FSharp.Compiler.CodeAnalysis.FSharpParsingOptions) -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Int32 CompareTo(System.Object) -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Int32 GetHashCode() -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Microsoft.FSharp.Collections.FSharpList`1[System.String] ConditionalCompilationDefines -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_ConditionalCompilationDefines() -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Microsoft.FSharp.Core.FSharpOption`1[System.Boolean] LightSyntax -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Microsoft.FSharp.Core.FSharpOption`1[System.Boolean] get_LightSyntax() -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: System.String ToString() -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: System.String[] SourceFiles -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: System.String[] get_SourceFiles() -FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Void .ctor(System.String[], Microsoft.FSharp.Collections.FSharpList`1[System.String], FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions, Boolean, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Boolean, Boolean) -FSharp.Compiler.CodeAnalysis.FSharpProjectContext -FSharp.Compiler.CodeAnalysis.FSharpProjectContext: FSharp.Compiler.CodeAnalysis.FSharpProjectOptions ProjectOptions -FSharp.Compiler.CodeAnalysis.FSharpProjectContext: FSharp.Compiler.CodeAnalysis.FSharpProjectOptions get_ProjectOptions() -FSharp.Compiler.CodeAnalysis.FSharpProjectContext: FSharp.Compiler.Symbols.FSharpAccessibilityRights AccessibilityRights -FSharp.Compiler.CodeAnalysis.FSharpProjectContext: FSharp.Compiler.Symbols.FSharpAccessibilityRights get_AccessibilityRights() -FSharp.Compiler.CodeAnalysis.FSharpProjectContext: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpAssembly] GetReferencedAssemblies() -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Boolean Equals(FSharp.Compiler.CodeAnalysis.FSharpProjectOptions) -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Boolean Equals(System.Object) -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Boolean IsIncompleteTypeCheckEnvironment -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Boolean UseScriptResolutionRules -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Boolean get_IsIncompleteTypeCheckEnvironment() -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Boolean get_UseScriptResolutionRules() -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: FSharp.Compiler.CodeAnalysis.FSharpReferencedProject[] ReferencedProjects -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: FSharp.Compiler.CodeAnalysis.FSharpReferencedProject[] get_ReferencedProjects() -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Int32 GetHashCode() -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Text.Range,System.String,System.String]] OriginalLoadReferences -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Text.Range,System.String,System.String]] get_OriginalLoadReferences() -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet] UnresolvedReferences -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet] get_UnresolvedReferences() -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[System.Int64] Stamp -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[System.Int64] get_Stamp() -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[System.String] ProjectId -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_ProjectId() -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: System.DateTime LoadTime -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: System.DateTime get_LoadTime() -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: System.String ProjectFileName -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: System.String ToString() -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: System.String get_ProjectFileName() -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: System.String[] OtherOptions -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: System.String[] SourceFiles -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: System.String[] get_OtherOptions() -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: System.String[] get_SourceFiles() -FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Void .ctor(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.String], System.String[], System.String[], FSharp.Compiler.CodeAnalysis.FSharpReferencedProject[], Boolean, Boolean, System.DateTime, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Text.Range,System.String,System.String]], Microsoft.FSharp.Core.FSharpOption`1[System.Int64]) -FSharp.Compiler.CodeAnalysis.FSharpReferencedProject -FSharp.Compiler.CodeAnalysis.FSharpReferencedProject: Boolean Equals(System.Object) -FSharp.Compiler.CodeAnalysis.FSharpReferencedProject: FSharp.Compiler.CodeAnalysis.FSharpReferencedProject CreateFSharp(System.String, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions) -FSharp.Compiler.CodeAnalysis.FSharpReferencedProject: FSharp.Compiler.CodeAnalysis.FSharpReferencedProject CreateFromILModuleReader(System.String, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.DateTime], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.AbstractIL.ILBinaryReader+ILModuleReader]) -FSharp.Compiler.CodeAnalysis.FSharpReferencedProject: FSharp.Compiler.CodeAnalysis.FSharpReferencedProject CreatePortableExecutable(System.String, System.DateTime, Microsoft.FSharp.Core.FSharpFunc`2[System.Threading.CancellationToken,Microsoft.FSharp.Core.FSharpOption`1[System.IO.Stream]]) -FSharp.Compiler.CodeAnalysis.FSharpReferencedProject: Int32 GetHashCode() -FSharp.Compiler.CodeAnalysis.FSharpReferencedProject: System.String FileName -FSharp.Compiler.CodeAnalysis.FSharpReferencedProject: System.String ToString() -FSharp.Compiler.CodeAnalysis.FSharpReferencedProject: System.String get_FileName() -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean IsFromAttribute -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean IsFromComputationExpression -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean IsFromDefinition -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean IsFromDispatchSlotImplementation -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean IsFromOpenStatement -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean IsFromPattern -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean IsFromType -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean IsPrivateToFile -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean get_IsFromAttribute() -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean get_IsFromComputationExpression() -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean get_IsFromDefinition() -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean get_IsFromDispatchSlotImplementation() -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean get_IsFromOpenStatement() -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean get_IsFromPattern() -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean get_IsFromType() -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean get_IsPrivateToFile() -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: FSharp.Compiler.Symbols.FSharpDisplayContext DisplayContext -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: FSharp.Compiler.Symbols.FSharpDisplayContext get_DisplayContext() -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: FSharp.Compiler.Symbols.FSharpSymbol Symbol -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: FSharp.Compiler.Symbols.FSharpSymbol get_Symbol() -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: FSharp.Compiler.Text.Range Range -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: System.String FileName -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: System.String ToString() -FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: System.String get_FileName() -FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet -FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet: Boolean Equals(FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet) -FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet: Boolean Equals(System.Object) -FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet: Int32 GetHashCode() -FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet: System.String ToString() -FSharp.Compiler.CodeAnalysis.LegacyMSBuildReferenceResolver -FSharp.Compiler.CodeAnalysis.LegacyMSBuildReferenceResolver: FSharp.Compiler.CodeAnalysis.LegacyReferenceResolver getResolver() -FSharp.Compiler.CodeAnalysis.LegacyReferenceResolver -FSharp.Compiler.CompilerEnvironment -FSharp.Compiler.CompilerEnvironment: Boolean IsCheckerSupportedSubcategory(System.String) -FSharp.Compiler.CompilerEnvironment: Boolean IsCompilable(System.String) -FSharp.Compiler.CompilerEnvironment: Boolean IsScriptFile(System.String) -FSharp.Compiler.CompilerEnvironment: Boolean MustBeSingleFileProject(System.String) -FSharp.Compiler.CompilerEnvironment: Microsoft.FSharp.Collections.FSharpList`1[System.String] DefaultReferencesForOrphanSources(Boolean) -FSharp.Compiler.CompilerEnvironment: Microsoft.FSharp.Collections.FSharpList`1[System.String] GetCompilationDefinesForEditing(FSharp.Compiler.CodeAnalysis.FSharpParsingOptions) -FSharp.Compiler.CompilerEnvironment: Microsoft.FSharp.Core.FSharpOption`1[System.String] BinFolderOfDefaultFSharpCompiler(Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.CompilerEnvironment: System.Guid GetDebuggerLanguageID() -FSharp.Compiler.DependencyManager.AssemblyResolutionProbe -FSharp.Compiler.DependencyManager.AssemblyResolutionProbe: System.Collections.Generic.IEnumerable`1[System.String] EndInvoke(System.IAsyncResult) -FSharp.Compiler.DependencyManager.AssemblyResolutionProbe: System.Collections.Generic.IEnumerable`1[System.String] Invoke() -FSharp.Compiler.DependencyManager.AssemblyResolutionProbe: System.IAsyncResult BeginInvoke(System.AsyncCallback, System.Object) -FSharp.Compiler.DependencyManager.AssemblyResolutionProbe: Void .ctor(System.Object, IntPtr) -FSharp.Compiler.DependencyManager.AssemblyResolveHandler -FSharp.Compiler.DependencyManager.AssemblyResolveHandler: Void .ctor(FSharp.Compiler.DependencyManager.AssemblyResolutionProbe) -FSharp.Compiler.DependencyManager.DependencyProvider -FSharp.Compiler.DependencyManager.DependencyProvider: FSharp.Compiler.DependencyManager.IDependencyManagerProvider TryFindDependencyManagerByKey(System.Collections.Generic.IEnumerable`1[System.String], System.String, FSharp.Compiler.DependencyManager.ResolvingErrorReport, System.String) -FSharp.Compiler.DependencyManager.DependencyProvider: FSharp.Compiler.DependencyManager.IResolveDependenciesResult Resolve(FSharp.Compiler.DependencyManager.IDependencyManagerProvider, System.String, System.Collections.Generic.IEnumerable`1[System.Tuple`2[System.String,System.String]], FSharp.Compiler.DependencyManager.ResolvingErrorReport, System.String, System.String, System.String, System.String, System.String, Int32) -FSharp.Compiler.DependencyManager.DependencyProvider: System.String[] GetRegisteredDependencyManagerHelpText(System.Collections.Generic.IEnumerable`1[System.String], System.String, FSharp.Compiler.DependencyManager.ResolvingErrorReport) -FSharp.Compiler.DependencyManager.DependencyProvider: System.Tuple`2[System.Int32,System.String] CreatePackageManagerUnknownError(System.Collections.Generic.IEnumerable`1[System.String], System.String, System.String, FSharp.Compiler.DependencyManager.ResolvingErrorReport) -FSharp.Compiler.DependencyManager.DependencyProvider: System.Tuple`2[System.String,FSharp.Compiler.DependencyManager.IDependencyManagerProvider] TryFindDependencyManagerInPath(System.Collections.Generic.IEnumerable`1[System.String], System.String, FSharp.Compiler.DependencyManager.ResolvingErrorReport, System.String) -FSharp.Compiler.DependencyManager.DependencyProvider: Void .ctor() -FSharp.Compiler.DependencyManager.DependencyProvider: Void .ctor(FSharp.Compiler.DependencyManager.AssemblyResolutionProbe, FSharp.Compiler.DependencyManager.NativeResolutionProbe) -FSharp.Compiler.DependencyManager.DependencyProvider: Void .ctor(FSharp.Compiler.DependencyManager.NativeResolutionProbe) -FSharp.Compiler.DependencyManager.ErrorReportType -FSharp.Compiler.DependencyManager.ErrorReportType+Tags: Int32 Error -FSharp.Compiler.DependencyManager.ErrorReportType+Tags: Int32 Warning -FSharp.Compiler.DependencyManager.ErrorReportType: Boolean Equals(FSharp.Compiler.DependencyManager.ErrorReportType) -FSharp.Compiler.DependencyManager.ErrorReportType: Boolean Equals(System.Object) -FSharp.Compiler.DependencyManager.ErrorReportType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.DependencyManager.ErrorReportType: Boolean IsError -FSharp.Compiler.DependencyManager.ErrorReportType: Boolean IsWarning -FSharp.Compiler.DependencyManager.ErrorReportType: Boolean get_IsError() -FSharp.Compiler.DependencyManager.ErrorReportType: Boolean get_IsWarning() -FSharp.Compiler.DependencyManager.ErrorReportType: FSharp.Compiler.DependencyManager.ErrorReportType Error -FSharp.Compiler.DependencyManager.ErrorReportType: FSharp.Compiler.DependencyManager.ErrorReportType Warning -FSharp.Compiler.DependencyManager.ErrorReportType: FSharp.Compiler.DependencyManager.ErrorReportType get_Error() -FSharp.Compiler.DependencyManager.ErrorReportType: FSharp.Compiler.DependencyManager.ErrorReportType get_Warning() -FSharp.Compiler.DependencyManager.ErrorReportType: FSharp.Compiler.DependencyManager.ErrorReportType+Tags -FSharp.Compiler.DependencyManager.ErrorReportType: Int32 CompareTo(FSharp.Compiler.DependencyManager.ErrorReportType) -FSharp.Compiler.DependencyManager.ErrorReportType: Int32 CompareTo(System.Object) -FSharp.Compiler.DependencyManager.ErrorReportType: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.DependencyManager.ErrorReportType: Int32 GetHashCode() -FSharp.Compiler.DependencyManager.ErrorReportType: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.DependencyManager.ErrorReportType: Int32 Tag -FSharp.Compiler.DependencyManager.ErrorReportType: Int32 get_Tag() -FSharp.Compiler.DependencyManager.ErrorReportType: System.String ToString() -FSharp.Compiler.DependencyManager.IDependencyManagerProvider -FSharp.Compiler.DependencyManager.IDependencyManagerProvider: FSharp.Compiler.DependencyManager.IResolveDependenciesResult ResolveDependencies(System.String, System.String, System.String, System.String, System.Collections.Generic.IEnumerable`1[System.Tuple`2[System.String,System.String]], System.String, System.String, Int32) -FSharp.Compiler.DependencyManager.IDependencyManagerProvider: System.String Key -FSharp.Compiler.DependencyManager.IDependencyManagerProvider: System.String Name -FSharp.Compiler.DependencyManager.IDependencyManagerProvider: System.String get_Key() -FSharp.Compiler.DependencyManager.IDependencyManagerProvider: System.String get_Name() -FSharp.Compiler.DependencyManager.IDependencyManagerProvider: System.String[] HelpMessages -FSharp.Compiler.DependencyManager.IDependencyManagerProvider: System.String[] get_HelpMessages() -FSharp.Compiler.DependencyManager.IResolveDependenciesResult -FSharp.Compiler.DependencyManager.IResolveDependenciesResult: Boolean Success -FSharp.Compiler.DependencyManager.IResolveDependenciesResult: Boolean get_Success() -FSharp.Compiler.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] Resolutions -FSharp.Compiler.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] Roots -FSharp.Compiler.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] SourceFiles -FSharp.Compiler.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] get_Resolutions() -FSharp.Compiler.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] get_Roots() -FSharp.Compiler.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] get_SourceFiles() -FSharp.Compiler.DependencyManager.IResolveDependenciesResult: System.String[] StdError -FSharp.Compiler.DependencyManager.IResolveDependenciesResult: System.String[] StdOut -FSharp.Compiler.DependencyManager.IResolveDependenciesResult: System.String[] get_StdError() -FSharp.Compiler.DependencyManager.IResolveDependenciesResult: System.String[] get_StdOut() -FSharp.Compiler.DependencyManager.NativeDllResolveHandler -FSharp.Compiler.DependencyManager.NativeDllResolveHandler: Void .ctor(FSharp.Compiler.DependencyManager.NativeResolutionProbe) -FSharp.Compiler.DependencyManager.NativeResolutionProbe -FSharp.Compiler.DependencyManager.NativeResolutionProbe: System.Collections.Generic.IEnumerable`1[System.String] EndInvoke(System.IAsyncResult) -FSharp.Compiler.DependencyManager.NativeResolutionProbe: System.Collections.Generic.IEnumerable`1[System.String] Invoke() -FSharp.Compiler.DependencyManager.NativeResolutionProbe: System.IAsyncResult BeginInvoke(System.AsyncCallback, System.Object) -FSharp.Compiler.DependencyManager.NativeResolutionProbe: Void .ctor(System.Object, IntPtr) -FSharp.Compiler.DependencyManager.ResolvingErrorReport -FSharp.Compiler.DependencyManager.ResolvingErrorReport: System.IAsyncResult BeginInvoke(FSharp.Compiler.DependencyManager.ErrorReportType, Int32, System.String, System.AsyncCallback, System.Object) -FSharp.Compiler.DependencyManager.ResolvingErrorReport: Void .ctor(System.Object, IntPtr) -FSharp.Compiler.DependencyManager.ResolvingErrorReport: Void EndInvoke(System.IAsyncResult) -FSharp.Compiler.DependencyManager.ResolvingErrorReport: Void Invoke(FSharp.Compiler.DependencyManager.ErrorReportType, Int32, System.String) -FSharp.Compiler.Diagnostics.CompilerDiagnostics -FSharp.Compiler.Diagnostics.CompilerDiagnostics: System.Collections.Generic.IEnumerable`1[System.String] GetSuggestedNames(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit], System.String) -FSharp.Compiler.Diagnostics.CompilerDiagnostics: System.String GetErrorMessage(FSharp.Compiler.Diagnostics.FSharpDiagnosticKind) -FSharp.Compiler.Diagnostics.FSharpDiagnostic -FSharp.Compiler.Diagnostics.FSharpDiagnostic: FSharp.Compiler.Diagnostics.FSharpDiagnostic Create(FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity, System.String, Int32, FSharp.Compiler.Text.Range, Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.Diagnostics.FSharpDiagnostic: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity Severity -FSharp.Compiler.Diagnostics.FSharpDiagnostic: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity get_Severity() -FSharp.Compiler.Diagnostics.FSharpDiagnostic: FSharp.Compiler.Text.Position End -FSharp.Compiler.Diagnostics.FSharpDiagnostic: FSharp.Compiler.Text.Position Start -FSharp.Compiler.Diagnostics.FSharpDiagnostic: FSharp.Compiler.Text.Position get_End() -FSharp.Compiler.Diagnostics.FSharpDiagnostic: FSharp.Compiler.Text.Position get_Start() -FSharp.Compiler.Diagnostics.FSharpDiagnostic: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Diagnostics.FSharpDiagnostic: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Diagnostics.FSharpDiagnostic: Int32 EndColumn -FSharp.Compiler.Diagnostics.FSharpDiagnostic: Int32 EndLine -FSharp.Compiler.Diagnostics.FSharpDiagnostic: Int32 ErrorNumber -FSharp.Compiler.Diagnostics.FSharpDiagnostic: Int32 StartColumn -FSharp.Compiler.Diagnostics.FSharpDiagnostic: Int32 StartLine -FSharp.Compiler.Diagnostics.FSharpDiagnostic: Int32 get_EndColumn() -FSharp.Compiler.Diagnostics.FSharpDiagnostic: Int32 get_EndLine() -FSharp.Compiler.Diagnostics.FSharpDiagnostic: Int32 get_ErrorNumber() -FSharp.Compiler.Diagnostics.FSharpDiagnostic: Int32 get_StartColumn() -FSharp.Compiler.Diagnostics.FSharpDiagnostic: Int32 get_StartLine() -FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String ErrorNumberPrefix -FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String ErrorNumberText -FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String FileName -FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String Message -FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String NewlineifyErrorString(System.String) -FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String NormalizeErrorString(System.String) -FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String Subcategory -FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String ToString() -FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String get_ErrorNumberPrefix() -FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String get_ErrorNumberText() -FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String get_FileName() -FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String get_Message() -FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String get_Subcategory() -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind+ReplaceWithSuggestion: System.String get_suggestion() -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind+ReplaceWithSuggestion: System.String suggestion -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind+Tags: Int32 AddIndexerDot -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind+Tags: Int32 ReplaceWithSuggestion -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Boolean Equals(FSharp.Compiler.Diagnostics.FSharpDiagnosticKind) -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Boolean Equals(System.Object) -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Boolean IsAddIndexerDot -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Boolean IsReplaceWithSuggestion -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Boolean get_IsAddIndexerDot() -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Boolean get_IsReplaceWithSuggestion() -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: FSharp.Compiler.Diagnostics.FSharpDiagnosticKind AddIndexerDot -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: FSharp.Compiler.Diagnostics.FSharpDiagnosticKind NewReplaceWithSuggestion(System.String) -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: FSharp.Compiler.Diagnostics.FSharpDiagnosticKind get_AddIndexerDot() -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: FSharp.Compiler.Diagnostics.FSharpDiagnosticKind+ReplaceWithSuggestion -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: FSharp.Compiler.Diagnostics.FSharpDiagnosticKind+Tags -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Int32 CompareTo(FSharp.Compiler.Diagnostics.FSharpDiagnosticKind) -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Int32 CompareTo(System.Object) -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Int32 GetHashCode() -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Int32 Tag -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Int32 get_Tag() -FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: System.String ToString() -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Boolean Equals(FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions) -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Boolean Equals(System.Object) -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Boolean GlobalWarnAsError -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Boolean get_GlobalWarnAsError() -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions Default -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions get_Default() -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Int32 CompareTo(FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions) -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Int32 CompareTo(System.Object) -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Int32 GetHashCode() -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Int32 WarnLevel -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Int32 get_WarnLevel() -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] WarnAsError -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] WarnAsWarn -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] WarnOff -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] WarnOn -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] get_WarnAsError() -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] get_WarnAsWarn() -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] get_WarnOff() -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] get_WarnOn() -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: System.String ToString() -FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Void .ctor(Int32, Boolean, Microsoft.FSharp.Collections.FSharpList`1[System.Int32], Microsoft.FSharp.Collections.FSharpList`1[System.Int32], Microsoft.FSharp.Collections.FSharpList`1[System.Int32], Microsoft.FSharp.Collections.FSharpList`1[System.Int32]) -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity+Tags: Int32 Error -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity+Tags: Int32 Hidden -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity+Tags: Int32 Info -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity+Tags: Int32 Warning -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean Equals(FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity) -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean Equals(System.Object) -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean IsError -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean IsHidden -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean IsInfo -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean IsWarning -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean get_IsError() -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean get_IsHidden() -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean get_IsInfo() -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean get_IsWarning() -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity Error -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity Hidden -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity Info -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity Warning -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity get_Error() -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity get_Hidden() -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity get_Info() -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity get_Warning() -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity+Tags -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Int32 CompareTo(FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity) -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Int32 CompareTo(System.Object) -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Int32 GetHashCode() -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Int32 Tag -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Int32 get_Tag() -FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: System.String ToString() -FSharp.Compiler.EditorServices.AssemblyContent -FSharp.Compiler.EditorServices.AssemblyContent: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.AssemblySymbol] GetAssemblyContent(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.EditorServices.IAssemblyContentCache,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.AssemblySymbol]],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.AssemblySymbol]], FSharp.Compiler.EditorServices.AssemblyContentType, Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpAssembly]) -FSharp.Compiler.EditorServices.AssemblyContent: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.AssemblySymbol] GetAssemblySignatureContent(FSharp.Compiler.EditorServices.AssemblyContentType, FSharp.Compiler.Symbols.FSharpAssemblySignature) -FSharp.Compiler.EditorServices.AssemblyContentType -FSharp.Compiler.EditorServices.AssemblyContentType+Tags: Int32 Full -FSharp.Compiler.EditorServices.AssemblyContentType+Tags: Int32 Public -FSharp.Compiler.EditorServices.AssemblyContentType: Boolean Equals(FSharp.Compiler.EditorServices.AssemblyContentType) -FSharp.Compiler.EditorServices.AssemblyContentType: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.AssemblyContentType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.AssemblyContentType: Boolean IsFull -FSharp.Compiler.EditorServices.AssemblyContentType: Boolean IsPublic -FSharp.Compiler.EditorServices.AssemblyContentType: Boolean get_IsFull() -FSharp.Compiler.EditorServices.AssemblyContentType: Boolean get_IsPublic() -FSharp.Compiler.EditorServices.AssemblyContentType: FSharp.Compiler.EditorServices.AssemblyContentType Full -FSharp.Compiler.EditorServices.AssemblyContentType: FSharp.Compiler.EditorServices.AssemblyContentType Public -FSharp.Compiler.EditorServices.AssemblyContentType: FSharp.Compiler.EditorServices.AssemblyContentType get_Full() -FSharp.Compiler.EditorServices.AssemblyContentType: FSharp.Compiler.EditorServices.AssemblyContentType get_Public() -FSharp.Compiler.EditorServices.AssemblyContentType: FSharp.Compiler.EditorServices.AssemblyContentType+Tags -FSharp.Compiler.EditorServices.AssemblyContentType: Int32 CompareTo(FSharp.Compiler.EditorServices.AssemblyContentType) -FSharp.Compiler.EditorServices.AssemblyContentType: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.AssemblyContentType: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.AssemblyContentType: Int32 GetHashCode() -FSharp.Compiler.EditorServices.AssemblyContentType: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.AssemblyContentType: Int32 Tag -FSharp.Compiler.EditorServices.AssemblyContentType: Int32 get_Tag() -FSharp.Compiler.EditorServices.AssemblyContentType: System.String ToString() -FSharp.Compiler.EditorServices.AssemblySymbol -FSharp.Compiler.EditorServices.AssemblySymbol: FSharp.Compiler.EditorServices.UnresolvedSymbol UnresolvedSymbol -FSharp.Compiler.EditorServices.AssemblySymbol: FSharp.Compiler.EditorServices.UnresolvedSymbol get_UnresolvedSymbol() -FSharp.Compiler.EditorServices.AssemblySymbol: FSharp.Compiler.Symbols.FSharpSymbol Symbol -FSharp.Compiler.EditorServices.AssemblySymbol: FSharp.Compiler.Symbols.FSharpSymbol get_Symbol() -FSharp.Compiler.EditorServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.EditorServices.LookupType,FSharp.Compiler.EditorServices.EntityKind] Kind -FSharp.Compiler.EditorServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.EditorServices.LookupType,FSharp.Compiler.EditorServices.EntityKind] get_Kind() -FSharp.Compiler.EditorServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] AutoOpenParent -FSharp.Compiler.EditorServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] Namespace -FSharp.Compiler.EditorServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] NearestRequireQualifiedAccessParent -FSharp.Compiler.EditorServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] TopRequireQualifiedAccessParent -FSharp.Compiler.EditorServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] get_AutoOpenParent() -FSharp.Compiler.EditorServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] get_Namespace() -FSharp.Compiler.EditorServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] get_NearestRequireQualifiedAccessParent() -FSharp.Compiler.EditorServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] get_TopRequireQualifiedAccessParent() -FSharp.Compiler.EditorServices.AssemblySymbol: System.String FullName -FSharp.Compiler.EditorServices.AssemblySymbol: System.String ToString() -FSharp.Compiler.EditorServices.AssemblySymbol: System.String get_FullName() -FSharp.Compiler.EditorServices.AssemblySymbol: System.String[] CleanedIdents -FSharp.Compiler.EditorServices.AssemblySymbol: System.String[] get_CleanedIdents() -FSharp.Compiler.EditorServices.AssemblySymbol: Void .ctor(System.String, System.String[], Microsoft.FSharp.Core.FSharpOption`1[System.String[]], Microsoft.FSharp.Core.FSharpOption`1[System.String[]], Microsoft.FSharp.Core.FSharpOption`1[System.String[]], Microsoft.FSharp.Core.FSharpOption`1[System.String[]], FSharp.Compiler.Symbols.FSharpSymbol, Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.EditorServices.LookupType,FSharp.Compiler.EditorServices.EntityKind], FSharp.Compiler.EditorServices.UnresolvedSymbol) -FSharp.Compiler.EditorServices.CompletionContext -FSharp.Compiler.EditorServices.CompletionContext+Inherit: FSharp.Compiler.EditorServices.InheritanceContext context -FSharp.Compiler.EditorServices.CompletionContext+Inherit: FSharp.Compiler.EditorServices.InheritanceContext get_context() -FSharp.Compiler.EditorServices.CompletionContext+Inherit: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] get_path() -FSharp.Compiler.EditorServices.CompletionContext+Inherit: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] path -FSharp.Compiler.EditorServices.CompletionContext+OpenDeclaration: Boolean get_isOpenType() -FSharp.Compiler.EditorServices.CompletionContext+OpenDeclaration: Boolean isOpenType -FSharp.Compiler.EditorServices.CompletionContext+ParameterList: FSharp.Compiler.Text.Position Item1 -FSharp.Compiler.EditorServices.CompletionContext+ParameterList: FSharp.Compiler.Text.Position get_Item1() -FSharp.Compiler.EditorServices.CompletionContext+ParameterList: System.Collections.Generic.HashSet`1[System.String] Item2 -FSharp.Compiler.EditorServices.CompletionContext+ParameterList: System.Collections.Generic.HashSet`1[System.String] get_Item2() -FSharp.Compiler.EditorServices.CompletionContext+RecordField: FSharp.Compiler.EditorServices.RecordContext context -FSharp.Compiler.EditorServices.CompletionContext+RecordField: FSharp.Compiler.EditorServices.RecordContext get_context() -FSharp.Compiler.EditorServices.CompletionContext+Tags: Int32 AttributeApplication -FSharp.Compiler.EditorServices.CompletionContext+Tags: Int32 Inherit -FSharp.Compiler.EditorServices.CompletionContext+Tags: Int32 Invalid -FSharp.Compiler.EditorServices.CompletionContext+Tags: Int32 OpenDeclaration -FSharp.Compiler.EditorServices.CompletionContext+Tags: Int32 ParameterList -FSharp.Compiler.EditorServices.CompletionContext+Tags: Int32 PatternType -FSharp.Compiler.EditorServices.CompletionContext+Tags: Int32 RangeOperator -FSharp.Compiler.EditorServices.CompletionContext+Tags: Int32 RecordField -FSharp.Compiler.EditorServices.CompletionContext: Boolean Equals(FSharp.Compiler.EditorServices.CompletionContext) -FSharp.Compiler.EditorServices.CompletionContext: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.CompletionContext: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.CompletionContext: Boolean IsAttributeApplication -FSharp.Compiler.EditorServices.CompletionContext: Boolean IsInherit -FSharp.Compiler.EditorServices.CompletionContext: Boolean IsInvalid -FSharp.Compiler.EditorServices.CompletionContext: Boolean IsOpenDeclaration -FSharp.Compiler.EditorServices.CompletionContext: Boolean IsParameterList -FSharp.Compiler.EditorServices.CompletionContext: Boolean IsPatternType -FSharp.Compiler.EditorServices.CompletionContext: Boolean IsRangeOperator -FSharp.Compiler.EditorServices.CompletionContext: Boolean IsRecordField -FSharp.Compiler.EditorServices.CompletionContext: Boolean get_IsAttributeApplication() -FSharp.Compiler.EditorServices.CompletionContext: Boolean get_IsInherit() -FSharp.Compiler.EditorServices.CompletionContext: Boolean get_IsInvalid() -FSharp.Compiler.EditorServices.CompletionContext: Boolean get_IsOpenDeclaration() -FSharp.Compiler.EditorServices.CompletionContext: Boolean get_IsParameterList() -FSharp.Compiler.EditorServices.CompletionContext: Boolean get_IsPatternType() -FSharp.Compiler.EditorServices.CompletionContext: Boolean get_IsRangeOperator() -FSharp.Compiler.EditorServices.CompletionContext: Boolean get_IsRecordField() -FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext AttributeApplication -FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext Invalid -FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext NewInherit(FSharp.Compiler.EditorServices.InheritanceContext, System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]]) -FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext NewOpenDeclaration(Boolean) -FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext NewParameterList(FSharp.Compiler.Text.Position, System.Collections.Generic.HashSet`1[System.String]) -FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext NewRecordField(FSharp.Compiler.EditorServices.RecordContext) -FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext PatternType -FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext RangeOperator -FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext get_AttributeApplication() -FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext get_Invalid() -FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext get_PatternType() -FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext get_RangeOperator() -FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext+Inherit -FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext+OpenDeclaration -FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext+ParameterList -FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext+RecordField -FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext+Tags -FSharp.Compiler.EditorServices.CompletionContext: Int32 GetHashCode() -FSharp.Compiler.EditorServices.CompletionContext: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.CompletionContext: Int32 Tag -FSharp.Compiler.EditorServices.CompletionContext: Int32 get_Tag() -FSharp.Compiler.EditorServices.CompletionContext: System.String ToString() -FSharp.Compiler.EditorServices.CompletionItemKind -FSharp.Compiler.EditorServices.CompletionItemKind+Method: Boolean get_isExtension() -FSharp.Compiler.EditorServices.CompletionItemKind+Method: Boolean isExtension -FSharp.Compiler.EditorServices.CompletionItemKind+Tags: Int32 Argument -FSharp.Compiler.EditorServices.CompletionItemKind+Tags: Int32 CustomOperation -FSharp.Compiler.EditorServices.CompletionItemKind+Tags: Int32 Event -FSharp.Compiler.EditorServices.CompletionItemKind+Tags: Int32 Field -FSharp.Compiler.EditorServices.CompletionItemKind+Tags: Int32 Method -FSharp.Compiler.EditorServices.CompletionItemKind+Tags: Int32 Other -FSharp.Compiler.EditorServices.CompletionItemKind+Tags: Int32 Property -FSharp.Compiler.EditorServices.CompletionItemKind: Boolean Equals(FSharp.Compiler.EditorServices.CompletionItemKind) -FSharp.Compiler.EditorServices.CompletionItemKind: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.CompletionItemKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.CompletionItemKind: Boolean IsArgument -FSharp.Compiler.EditorServices.CompletionItemKind: Boolean IsCustomOperation -FSharp.Compiler.EditorServices.CompletionItemKind: Boolean IsEvent -FSharp.Compiler.EditorServices.CompletionItemKind: Boolean IsField -FSharp.Compiler.EditorServices.CompletionItemKind: Boolean IsMethod -FSharp.Compiler.EditorServices.CompletionItemKind: Boolean IsOther -FSharp.Compiler.EditorServices.CompletionItemKind: Boolean IsProperty -FSharp.Compiler.EditorServices.CompletionItemKind: Boolean get_IsArgument() -FSharp.Compiler.EditorServices.CompletionItemKind: Boolean get_IsCustomOperation() -FSharp.Compiler.EditorServices.CompletionItemKind: Boolean get_IsEvent() -FSharp.Compiler.EditorServices.CompletionItemKind: Boolean get_IsField() -FSharp.Compiler.EditorServices.CompletionItemKind: Boolean get_IsMethod() -FSharp.Compiler.EditorServices.CompletionItemKind: Boolean get_IsOther() -FSharp.Compiler.EditorServices.CompletionItemKind: Boolean get_IsProperty() -FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind Argument -FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind CustomOperation -FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind Event -FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind Field -FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind NewMethod(Boolean) -FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind Other -FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind Property -FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind get_Argument() -FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind get_CustomOperation() -FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind get_Event() -FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind get_Field() -FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind get_Other() -FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind get_Property() -FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind+Method -FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind+Tags -FSharp.Compiler.EditorServices.CompletionItemKind: Int32 CompareTo(FSharp.Compiler.EditorServices.CompletionItemKind) -FSharp.Compiler.EditorServices.CompletionItemKind: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.CompletionItemKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.CompletionItemKind: Int32 GetHashCode() -FSharp.Compiler.EditorServices.CompletionItemKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.CompletionItemKind: Int32 Tag -FSharp.Compiler.EditorServices.CompletionItemKind: Int32 get_Tag() -FSharp.Compiler.EditorServices.CompletionItemKind: System.String ToString() -FSharp.Compiler.EditorServices.DeclarationListInfo -FSharp.Compiler.EditorServices.DeclarationListInfo: Boolean IsError -FSharp.Compiler.EditorServices.DeclarationListInfo: Boolean IsForType -FSharp.Compiler.EditorServices.DeclarationListInfo: Boolean get_IsError() -FSharp.Compiler.EditorServices.DeclarationListInfo: Boolean get_IsForType() -FSharp.Compiler.EditorServices.DeclarationListInfo: FSharp.Compiler.EditorServices.DeclarationListInfo Empty -FSharp.Compiler.EditorServices.DeclarationListInfo: FSharp.Compiler.EditorServices.DeclarationListInfo get_Empty() -FSharp.Compiler.EditorServices.DeclarationListInfo: FSharp.Compiler.EditorServices.DeclarationListItem[] Items -FSharp.Compiler.EditorServices.DeclarationListInfo: FSharp.Compiler.EditorServices.DeclarationListItem[] get_Items() -FSharp.Compiler.EditorServices.DeclarationListItem -FSharp.Compiler.EditorServices.DeclarationListItem: Boolean IsOwnMember -FSharp.Compiler.EditorServices.DeclarationListItem: Boolean IsResolved -FSharp.Compiler.EditorServices.DeclarationListItem: Boolean get_IsOwnMember() -FSharp.Compiler.EditorServices.DeclarationListItem: Boolean get_IsResolved() -FSharp.Compiler.EditorServices.DeclarationListItem: FSharp.Compiler.EditorServices.CompletionItemKind Kind -FSharp.Compiler.EditorServices.DeclarationListItem: FSharp.Compiler.EditorServices.CompletionItemKind get_Kind() -FSharp.Compiler.EditorServices.DeclarationListItem: FSharp.Compiler.EditorServices.FSharpGlyph Glyph -FSharp.Compiler.EditorServices.DeclarationListItem: FSharp.Compiler.EditorServices.FSharpGlyph get_Glyph() -FSharp.Compiler.EditorServices.DeclarationListItem: FSharp.Compiler.EditorServices.ToolTipText Description -FSharp.Compiler.EditorServices.DeclarationListItem: FSharp.Compiler.EditorServices.ToolTipText get_Description() -FSharp.Compiler.EditorServices.DeclarationListItem: FSharp.Compiler.Symbols.FSharpAccessibility Accessibility -FSharp.Compiler.EditorServices.DeclarationListItem: FSharp.Compiler.Symbols.FSharpAccessibility get_Accessibility() -FSharp.Compiler.EditorServices.DeclarationListItem: Int32 MinorPriority -FSharp.Compiler.EditorServices.DeclarationListItem: Int32 get_MinorPriority() -FSharp.Compiler.EditorServices.DeclarationListItem: Microsoft.FSharp.Core.FSharpOption`1[System.String] NamespaceToOpen -FSharp.Compiler.EditorServices.DeclarationListItem: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_NamespaceToOpen() -FSharp.Compiler.EditorServices.DeclarationListItem: System.String FullName -FSharp.Compiler.EditorServices.DeclarationListItem: System.String Name -FSharp.Compiler.EditorServices.DeclarationListItem: System.String NameInCode -FSharp.Compiler.EditorServices.DeclarationListItem: System.String get_FullName() -FSharp.Compiler.EditorServices.DeclarationListItem: System.String get_Name() -FSharp.Compiler.EditorServices.DeclarationListItem: System.String get_NameInCode() -FSharp.Compiler.EditorServices.EntityCache -FSharp.Compiler.EditorServices.EntityCache: T Locking[T](Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.EditorServices.IAssemblyContentCache,T]) -FSharp.Compiler.EditorServices.EntityCache: Void .ctor() -FSharp.Compiler.EditorServices.EntityCache: Void Clear() -FSharp.Compiler.EditorServices.EntityKind -FSharp.Compiler.EditorServices.EntityKind+FunctionOrValue: Boolean get_isActivePattern() -FSharp.Compiler.EditorServices.EntityKind+FunctionOrValue: Boolean isActivePattern -FSharp.Compiler.EditorServices.EntityKind+Module: FSharp.Compiler.EditorServices.ModuleKind Item -FSharp.Compiler.EditorServices.EntityKind+Module: FSharp.Compiler.EditorServices.ModuleKind get_Item() -FSharp.Compiler.EditorServices.EntityKind+Tags: Int32 Attribute -FSharp.Compiler.EditorServices.EntityKind+Tags: Int32 FunctionOrValue -FSharp.Compiler.EditorServices.EntityKind+Tags: Int32 Module -FSharp.Compiler.EditorServices.EntityKind+Tags: Int32 Type -FSharp.Compiler.EditorServices.EntityKind: Boolean Equals(FSharp.Compiler.EditorServices.EntityKind) -FSharp.Compiler.EditorServices.EntityKind: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.EntityKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.EntityKind: Boolean IsAttribute -FSharp.Compiler.EditorServices.EntityKind: Boolean IsFunctionOrValue -FSharp.Compiler.EditorServices.EntityKind: Boolean IsModule -FSharp.Compiler.EditorServices.EntityKind: Boolean IsType -FSharp.Compiler.EditorServices.EntityKind: Boolean get_IsAttribute() -FSharp.Compiler.EditorServices.EntityKind: Boolean get_IsFunctionOrValue() -FSharp.Compiler.EditorServices.EntityKind: Boolean get_IsModule() -FSharp.Compiler.EditorServices.EntityKind: Boolean get_IsType() -FSharp.Compiler.EditorServices.EntityKind: FSharp.Compiler.EditorServices.EntityKind Attribute -FSharp.Compiler.EditorServices.EntityKind: FSharp.Compiler.EditorServices.EntityKind NewFunctionOrValue(Boolean) -FSharp.Compiler.EditorServices.EntityKind: FSharp.Compiler.EditorServices.EntityKind NewModule(FSharp.Compiler.EditorServices.ModuleKind) -FSharp.Compiler.EditorServices.EntityKind: FSharp.Compiler.EditorServices.EntityKind Type -FSharp.Compiler.EditorServices.EntityKind: FSharp.Compiler.EditorServices.EntityKind get_Attribute() -FSharp.Compiler.EditorServices.EntityKind: FSharp.Compiler.EditorServices.EntityKind get_Type() -FSharp.Compiler.EditorServices.EntityKind: FSharp.Compiler.EditorServices.EntityKind+FunctionOrValue -FSharp.Compiler.EditorServices.EntityKind: FSharp.Compiler.EditorServices.EntityKind+Module -FSharp.Compiler.EditorServices.EntityKind: FSharp.Compiler.EditorServices.EntityKind+Tags -FSharp.Compiler.EditorServices.EntityKind: Int32 CompareTo(FSharp.Compiler.EditorServices.EntityKind) -FSharp.Compiler.EditorServices.EntityKind: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.EntityKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.EntityKind: Int32 GetHashCode() -FSharp.Compiler.EditorServices.EntityKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.EntityKind: Int32 Tag -FSharp.Compiler.EditorServices.EntityKind: Int32 get_Tag() -FSharp.Compiler.EditorServices.EntityKind: System.String ToString() -FSharp.Compiler.EditorServices.FSharpGlyph -FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Class -FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Constant -FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Delegate -FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Enum -FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 EnumMember -FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Error -FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Event -FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Exception -FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 ExtensionMethod -FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Field -FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Interface -FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Method -FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Module -FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 NameSpace -FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 OverridenMethod -FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Property -FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Struct -FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Type -FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Typedef -FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Union -FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Variable -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean Equals(FSharp.Compiler.EditorServices.FSharpGlyph) -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsClass -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsConstant -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsDelegate -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsEnum -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsEnumMember -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsError -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsEvent -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsException -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsExtensionMethod -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsField -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsInterface -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsMethod -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsModule -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsNameSpace -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsOverridenMethod -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsProperty -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsStruct -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsType -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsTypedef -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsUnion -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsVariable -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsClass() -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsConstant() -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsDelegate() -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsEnum() -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsEnumMember() -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsError() -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsEvent() -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsException() -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsExtensionMethod() -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsField() -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsInterface() -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsMethod() -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsModule() -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsNameSpace() -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsOverridenMethod() -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsProperty() -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsStruct() -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsType() -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsTypedef() -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsUnion() -FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsVariable() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Class -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Constant -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Delegate -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Enum -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph EnumMember -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Error -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Event -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Exception -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph ExtensionMethod -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Field -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Interface -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Method -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Module -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph NameSpace -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph OverridenMethod -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Property -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Struct -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Type -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Typedef -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Union -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Variable -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Class() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Constant() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Delegate() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Enum() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_EnumMember() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Error() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Event() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Exception() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_ExtensionMethod() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Field() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Interface() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Method() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Module() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_NameSpace() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_OverridenMethod() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Property() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Struct() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Type() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Typedef() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Union() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Variable() -FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph+Tags -FSharp.Compiler.EditorServices.FSharpGlyph: Int32 CompareTo(FSharp.Compiler.EditorServices.FSharpGlyph) -FSharp.Compiler.EditorServices.FSharpGlyph: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.FSharpGlyph: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.FSharpGlyph: Int32 GetHashCode() -FSharp.Compiler.EditorServices.FSharpGlyph: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.FSharpGlyph: Int32 Tag -FSharp.Compiler.EditorServices.FSharpGlyph: Int32 get_Tag() -FSharp.Compiler.EditorServices.FSharpGlyph: System.String ToString() -FSharp.Compiler.EditorServices.FindDeclExternalParam -FSharp.Compiler.EditorServices.FindDeclExternalParam: Boolean Equals(FSharp.Compiler.EditorServices.FindDeclExternalParam) -FSharp.Compiler.EditorServices.FindDeclExternalParam: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.FindDeclExternalParam: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.FindDeclExternalParam: Boolean IsByRef -FSharp.Compiler.EditorServices.FindDeclExternalParam: Boolean get_IsByRef() -FSharp.Compiler.EditorServices.FindDeclExternalParam: FSharp.Compiler.EditorServices.FindDeclExternalParam Create(FSharp.Compiler.EditorServices.FindDeclExternalType, Boolean) -FSharp.Compiler.EditorServices.FindDeclExternalParam: FSharp.Compiler.EditorServices.FindDeclExternalType ParameterType -FSharp.Compiler.EditorServices.FindDeclExternalParam: FSharp.Compiler.EditorServices.FindDeclExternalType get_ParameterType() -FSharp.Compiler.EditorServices.FindDeclExternalParam: Int32 CompareTo(FSharp.Compiler.EditorServices.FindDeclExternalParam) -FSharp.Compiler.EditorServices.FindDeclExternalParam: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.FindDeclExternalParam: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.FindDeclExternalParam: Int32 GetHashCode() -FSharp.Compiler.EditorServices.FindDeclExternalParam: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.FindDeclExternalParam: System.String ToString() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Constructor: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.FindDeclExternalParam] args -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Constructor: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.FindDeclExternalParam] get_args() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Constructor: System.String get_typeName() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Constructor: System.String typeName -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Event: System.String get_name() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Event: System.String get_typeName() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Event: System.String name -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Event: System.String typeName -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Field: System.String get_name() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Field: System.String get_typeName() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Field: System.String name -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Field: System.String typeName -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Method: Int32 genericArity -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Method: Int32 get_genericArity() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Method: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.FindDeclExternalParam] get_paramSyms() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Method: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.FindDeclExternalParam] paramSyms -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Method: System.String get_name() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Method: System.String get_typeName() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Method: System.String name -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Method: System.String typeName -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Property: System.String get_name() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Property: System.String get_typeName() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Property: System.String name -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Property: System.String typeName -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Tags: Int32 Constructor -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Tags: Int32 Event -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Tags: Int32 Field -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Tags: Int32 Method -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Tags: Int32 Property -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Tags: Int32 Type -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Type: System.String fullName -FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Type: System.String get_fullName() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean Equals(FSharp.Compiler.EditorServices.FindDeclExternalSymbol) -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean IsConstructor -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean IsEvent -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean IsField -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean IsMethod -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean IsProperty -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean IsType -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean get_IsConstructor() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean get_IsEvent() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean get_IsField() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean get_IsMethod() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean get_IsProperty() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean get_IsType() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol NewConstructor(System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.FindDeclExternalParam]) -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol NewEvent(System.String, System.String) -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol NewField(System.String, System.String) -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol NewMethod(System.String, System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.FindDeclExternalParam], Int32) -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol NewProperty(System.String, System.String) -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol NewType(System.String) -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Constructor -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Event -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Field -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Method -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Property -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Tags -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Type -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Int32 CompareTo(FSharp.Compiler.EditorServices.FindDeclExternalSymbol) -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Int32 GetHashCode() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Int32 Tag -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Int32 get_Tag() -FSharp.Compiler.EditorServices.FindDeclExternalSymbol: System.String ToString() -FSharp.Compiler.EditorServices.FindDeclExternalType -FSharp.Compiler.EditorServices.FindDeclExternalType+Array: FSharp.Compiler.EditorServices.FindDeclExternalType get_inner() -FSharp.Compiler.EditorServices.FindDeclExternalType+Array: FSharp.Compiler.EditorServices.FindDeclExternalType inner -FSharp.Compiler.EditorServices.FindDeclExternalType+Pointer: FSharp.Compiler.EditorServices.FindDeclExternalType get_inner() -FSharp.Compiler.EditorServices.FindDeclExternalType+Pointer: FSharp.Compiler.EditorServices.FindDeclExternalType inner -FSharp.Compiler.EditorServices.FindDeclExternalType+Tags: Int32 Array -FSharp.Compiler.EditorServices.FindDeclExternalType+Tags: Int32 Pointer -FSharp.Compiler.EditorServices.FindDeclExternalType+Tags: Int32 Type -FSharp.Compiler.EditorServices.FindDeclExternalType+Tags: Int32 TypeVar -FSharp.Compiler.EditorServices.FindDeclExternalType+Type: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.FindDeclExternalType] genericArgs -FSharp.Compiler.EditorServices.FindDeclExternalType+Type: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.FindDeclExternalType] get_genericArgs() -FSharp.Compiler.EditorServices.FindDeclExternalType+Type: System.String fullName -FSharp.Compiler.EditorServices.FindDeclExternalType+Type: System.String get_fullName() -FSharp.Compiler.EditorServices.FindDeclExternalType+TypeVar: System.String get_typeName() -FSharp.Compiler.EditorServices.FindDeclExternalType+TypeVar: System.String typeName -FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean Equals(FSharp.Compiler.EditorServices.FindDeclExternalType) -FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean IsArray -FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean IsPointer -FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean IsType -FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean IsTypeVar -FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean get_IsArray() -FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean get_IsPointer() -FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean get_IsType() -FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean get_IsTypeVar() -FSharp.Compiler.EditorServices.FindDeclExternalType: FSharp.Compiler.EditorServices.FindDeclExternalType NewArray(FSharp.Compiler.EditorServices.FindDeclExternalType) -FSharp.Compiler.EditorServices.FindDeclExternalType: FSharp.Compiler.EditorServices.FindDeclExternalType NewPointer(FSharp.Compiler.EditorServices.FindDeclExternalType) -FSharp.Compiler.EditorServices.FindDeclExternalType: FSharp.Compiler.EditorServices.FindDeclExternalType NewType(System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.FindDeclExternalType]) -FSharp.Compiler.EditorServices.FindDeclExternalType: FSharp.Compiler.EditorServices.FindDeclExternalType NewTypeVar(System.String) -FSharp.Compiler.EditorServices.FindDeclExternalType: FSharp.Compiler.EditorServices.FindDeclExternalType+Array -FSharp.Compiler.EditorServices.FindDeclExternalType: FSharp.Compiler.EditorServices.FindDeclExternalType+Pointer -FSharp.Compiler.EditorServices.FindDeclExternalType: FSharp.Compiler.EditorServices.FindDeclExternalType+Tags -FSharp.Compiler.EditorServices.FindDeclExternalType: FSharp.Compiler.EditorServices.FindDeclExternalType+Type -FSharp.Compiler.EditorServices.FindDeclExternalType: FSharp.Compiler.EditorServices.FindDeclExternalType+TypeVar -FSharp.Compiler.EditorServices.FindDeclExternalType: Int32 CompareTo(FSharp.Compiler.EditorServices.FindDeclExternalType) -FSharp.Compiler.EditorServices.FindDeclExternalType: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.FindDeclExternalType: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.FindDeclExternalType: Int32 GetHashCode() -FSharp.Compiler.EditorServices.FindDeclExternalType: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.FindDeclExternalType: Int32 Tag -FSharp.Compiler.EditorServices.FindDeclExternalType: Int32 get_Tag() -FSharp.Compiler.EditorServices.FindDeclExternalType: System.String ToString() -FSharp.Compiler.EditorServices.FindDeclFailureReason -FSharp.Compiler.EditorServices.FindDeclFailureReason+ProvidedMember: System.String get_memberName() -FSharp.Compiler.EditorServices.FindDeclFailureReason+ProvidedMember: System.String memberName -FSharp.Compiler.EditorServices.FindDeclFailureReason+ProvidedType: System.String get_typeName() -FSharp.Compiler.EditorServices.FindDeclFailureReason+ProvidedType: System.String typeName -FSharp.Compiler.EditorServices.FindDeclFailureReason+Tags: Int32 NoSourceCode -FSharp.Compiler.EditorServices.FindDeclFailureReason+Tags: Int32 ProvidedMember -FSharp.Compiler.EditorServices.FindDeclFailureReason+Tags: Int32 ProvidedType -FSharp.Compiler.EditorServices.FindDeclFailureReason+Tags: Int32 Unknown -FSharp.Compiler.EditorServices.FindDeclFailureReason+Unknown: System.String get_message() -FSharp.Compiler.EditorServices.FindDeclFailureReason+Unknown: System.String message -FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean Equals(FSharp.Compiler.EditorServices.FindDeclFailureReason) -FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean IsNoSourceCode -FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean IsProvidedMember -FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean IsProvidedType -FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean IsUnknown -FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean get_IsNoSourceCode() -FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean get_IsProvidedMember() -FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean get_IsProvidedType() -FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean get_IsUnknown() -FSharp.Compiler.EditorServices.FindDeclFailureReason: FSharp.Compiler.EditorServices.FindDeclFailureReason NewProvidedMember(System.String) -FSharp.Compiler.EditorServices.FindDeclFailureReason: FSharp.Compiler.EditorServices.FindDeclFailureReason NewProvidedType(System.String) -FSharp.Compiler.EditorServices.FindDeclFailureReason: FSharp.Compiler.EditorServices.FindDeclFailureReason NewUnknown(System.String) -FSharp.Compiler.EditorServices.FindDeclFailureReason: FSharp.Compiler.EditorServices.FindDeclFailureReason NoSourceCode -FSharp.Compiler.EditorServices.FindDeclFailureReason: FSharp.Compiler.EditorServices.FindDeclFailureReason get_NoSourceCode() -FSharp.Compiler.EditorServices.FindDeclFailureReason: FSharp.Compiler.EditorServices.FindDeclFailureReason+ProvidedMember -FSharp.Compiler.EditorServices.FindDeclFailureReason: FSharp.Compiler.EditorServices.FindDeclFailureReason+ProvidedType -FSharp.Compiler.EditorServices.FindDeclFailureReason: FSharp.Compiler.EditorServices.FindDeclFailureReason+Tags -FSharp.Compiler.EditorServices.FindDeclFailureReason: FSharp.Compiler.EditorServices.FindDeclFailureReason+Unknown -FSharp.Compiler.EditorServices.FindDeclFailureReason: Int32 CompareTo(FSharp.Compiler.EditorServices.FindDeclFailureReason) -FSharp.Compiler.EditorServices.FindDeclFailureReason: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.FindDeclFailureReason: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.FindDeclFailureReason: Int32 GetHashCode() -FSharp.Compiler.EditorServices.FindDeclFailureReason: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.FindDeclFailureReason: Int32 Tag -FSharp.Compiler.EditorServices.FindDeclFailureReason: Int32 get_Tag() -FSharp.Compiler.EditorServices.FindDeclFailureReason: System.String ToString() -FSharp.Compiler.EditorServices.FindDeclResult -FSharp.Compiler.EditorServices.FindDeclResult+DeclFound: FSharp.Compiler.Text.Range get_location() -FSharp.Compiler.EditorServices.FindDeclResult+DeclFound: FSharp.Compiler.Text.Range location -FSharp.Compiler.EditorServices.FindDeclResult+DeclNotFound: FSharp.Compiler.EditorServices.FindDeclFailureReason Item -FSharp.Compiler.EditorServices.FindDeclResult+DeclNotFound: FSharp.Compiler.EditorServices.FindDeclFailureReason get_Item() -FSharp.Compiler.EditorServices.FindDeclResult+ExternalDecl: FSharp.Compiler.EditorServices.FindDeclExternalSymbol externalSym -FSharp.Compiler.EditorServices.FindDeclResult+ExternalDecl: FSharp.Compiler.EditorServices.FindDeclExternalSymbol get_externalSym() -FSharp.Compiler.EditorServices.FindDeclResult+ExternalDecl: System.String assembly -FSharp.Compiler.EditorServices.FindDeclResult+ExternalDecl: System.String get_assembly() -FSharp.Compiler.EditorServices.FindDeclResult+Tags: Int32 DeclFound -FSharp.Compiler.EditorServices.FindDeclResult+Tags: Int32 DeclNotFound -FSharp.Compiler.EditorServices.FindDeclResult+Tags: Int32 ExternalDecl -FSharp.Compiler.EditorServices.FindDeclResult: Boolean Equals(FSharp.Compiler.EditorServices.FindDeclResult) -FSharp.Compiler.EditorServices.FindDeclResult: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.FindDeclResult: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.FindDeclResult: Boolean IsDeclFound -FSharp.Compiler.EditorServices.FindDeclResult: Boolean IsDeclNotFound -FSharp.Compiler.EditorServices.FindDeclResult: Boolean IsExternalDecl -FSharp.Compiler.EditorServices.FindDeclResult: Boolean get_IsDeclFound() -FSharp.Compiler.EditorServices.FindDeclResult: Boolean get_IsDeclNotFound() -FSharp.Compiler.EditorServices.FindDeclResult: Boolean get_IsExternalDecl() -FSharp.Compiler.EditorServices.FindDeclResult: FSharp.Compiler.EditorServices.FindDeclResult NewDeclFound(FSharp.Compiler.Text.Range) -FSharp.Compiler.EditorServices.FindDeclResult: FSharp.Compiler.EditorServices.FindDeclResult NewDeclNotFound(FSharp.Compiler.EditorServices.FindDeclFailureReason) -FSharp.Compiler.EditorServices.FindDeclResult: FSharp.Compiler.EditorServices.FindDeclResult NewExternalDecl(System.String, FSharp.Compiler.EditorServices.FindDeclExternalSymbol) -FSharp.Compiler.EditorServices.FindDeclResult: FSharp.Compiler.EditorServices.FindDeclResult+DeclFound -FSharp.Compiler.EditorServices.FindDeclResult: FSharp.Compiler.EditorServices.FindDeclResult+DeclNotFound -FSharp.Compiler.EditorServices.FindDeclResult: FSharp.Compiler.EditorServices.FindDeclResult+ExternalDecl -FSharp.Compiler.EditorServices.FindDeclResult: FSharp.Compiler.EditorServices.FindDeclResult+Tags -FSharp.Compiler.EditorServices.FindDeclResult: Int32 GetHashCode() -FSharp.Compiler.EditorServices.FindDeclResult: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.FindDeclResult: Int32 Tag -FSharp.Compiler.EditorServices.FindDeclResult: Int32 get_Tag() -FSharp.Compiler.EditorServices.FindDeclResult: System.String ToString() -FSharp.Compiler.EditorServices.IAssemblyContentCache -FSharp.Compiler.EditorServices.IAssemblyContentCache: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.EditorServices.AssemblyContentCacheEntry] TryGet(System.String) -FSharp.Compiler.EditorServices.IAssemblyContentCache: Void Set(System.String, FSharp.Compiler.EditorServices.AssemblyContentCacheEntry) -FSharp.Compiler.EditorServices.InheritanceContext -FSharp.Compiler.EditorServices.InheritanceContext+Tags: Int32 Class -FSharp.Compiler.EditorServices.InheritanceContext+Tags: Int32 Interface -FSharp.Compiler.EditorServices.InheritanceContext+Tags: Int32 Unknown -FSharp.Compiler.EditorServices.InheritanceContext: Boolean Equals(FSharp.Compiler.EditorServices.InheritanceContext) -FSharp.Compiler.EditorServices.InheritanceContext: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.InheritanceContext: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.InheritanceContext: Boolean IsClass -FSharp.Compiler.EditorServices.InheritanceContext: Boolean IsInterface -FSharp.Compiler.EditorServices.InheritanceContext: Boolean IsUnknown -FSharp.Compiler.EditorServices.InheritanceContext: Boolean get_IsClass() -FSharp.Compiler.EditorServices.InheritanceContext: Boolean get_IsInterface() -FSharp.Compiler.EditorServices.InheritanceContext: Boolean get_IsUnknown() -FSharp.Compiler.EditorServices.InheritanceContext: FSharp.Compiler.EditorServices.InheritanceContext Class -FSharp.Compiler.EditorServices.InheritanceContext: FSharp.Compiler.EditorServices.InheritanceContext Interface -FSharp.Compiler.EditorServices.InheritanceContext: FSharp.Compiler.EditorServices.InheritanceContext Unknown -FSharp.Compiler.EditorServices.InheritanceContext: FSharp.Compiler.EditorServices.InheritanceContext get_Class() -FSharp.Compiler.EditorServices.InheritanceContext: FSharp.Compiler.EditorServices.InheritanceContext get_Interface() -FSharp.Compiler.EditorServices.InheritanceContext: FSharp.Compiler.EditorServices.InheritanceContext get_Unknown() -FSharp.Compiler.EditorServices.InheritanceContext: FSharp.Compiler.EditorServices.InheritanceContext+Tags -FSharp.Compiler.EditorServices.InheritanceContext: Int32 CompareTo(FSharp.Compiler.EditorServices.InheritanceContext) -FSharp.Compiler.EditorServices.InheritanceContext: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.InheritanceContext: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.InheritanceContext: Int32 GetHashCode() -FSharp.Compiler.EditorServices.InheritanceContext: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.InheritanceContext: Int32 Tag -FSharp.Compiler.EditorServices.InheritanceContext: Int32 get_Tag() -FSharp.Compiler.EditorServices.InheritanceContext: System.String ToString() -FSharp.Compiler.EditorServices.InsertionContext -FSharp.Compiler.EditorServices.InsertionContext: Boolean Equals(FSharp.Compiler.EditorServices.InsertionContext) -FSharp.Compiler.EditorServices.InsertionContext: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.InsertionContext: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.InsertionContext: FSharp.Compiler.EditorServices.ScopeKind ScopeKind -FSharp.Compiler.EditorServices.InsertionContext: FSharp.Compiler.EditorServices.ScopeKind get_ScopeKind() -FSharp.Compiler.EditorServices.InsertionContext: FSharp.Compiler.Text.Position Pos -FSharp.Compiler.EditorServices.InsertionContext: FSharp.Compiler.Text.Position get_Pos() -FSharp.Compiler.EditorServices.InsertionContext: Int32 GetHashCode() -FSharp.Compiler.EditorServices.InsertionContext: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.InsertionContext: System.String ToString() -FSharp.Compiler.EditorServices.InsertionContext: Void .ctor(FSharp.Compiler.EditorServices.ScopeKind, FSharp.Compiler.Text.Position) -FSharp.Compiler.EditorServices.InsertionContextEntity -FSharp.Compiler.EditorServices.InsertionContextEntity: Boolean Equals(FSharp.Compiler.EditorServices.InsertionContextEntity) -FSharp.Compiler.EditorServices.InsertionContextEntity: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.InsertionContextEntity: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.InsertionContextEntity: Int32 CompareTo(FSharp.Compiler.EditorServices.InsertionContextEntity) -FSharp.Compiler.EditorServices.InsertionContextEntity: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.InsertionContextEntity: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.InsertionContextEntity: Int32 GetHashCode() -FSharp.Compiler.EditorServices.InsertionContextEntity: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.InsertionContextEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] Namespace -FSharp.Compiler.EditorServices.InsertionContextEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Namespace() -FSharp.Compiler.EditorServices.InsertionContextEntity: System.String FullDisplayName -FSharp.Compiler.EditorServices.InsertionContextEntity: System.String FullRelativeName -FSharp.Compiler.EditorServices.InsertionContextEntity: System.String LastIdent -FSharp.Compiler.EditorServices.InsertionContextEntity: System.String Qualifier -FSharp.Compiler.EditorServices.InsertionContextEntity: System.String ToString() -FSharp.Compiler.EditorServices.InsertionContextEntity: System.String get_FullDisplayName() -FSharp.Compiler.EditorServices.InsertionContextEntity: System.String get_FullRelativeName() -FSharp.Compiler.EditorServices.InsertionContextEntity: System.String get_LastIdent() -FSharp.Compiler.EditorServices.InsertionContextEntity: System.String get_Qualifier() -FSharp.Compiler.EditorServices.InsertionContextEntity: Void .ctor(System.String, System.String, Microsoft.FSharp.Core.FSharpOption`1[System.String], System.String, System.String) -FSharp.Compiler.EditorServices.InterfaceData -FSharp.Compiler.EditorServices.InterfaceData+Interface: FSharp.Compiler.Syntax.SynType get_interfaceType() -FSharp.Compiler.EditorServices.InterfaceData+Interface: FSharp.Compiler.Syntax.SynType interfaceType -FSharp.Compiler.EditorServices.InterfaceData+Interface: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]] get_memberDefns() -FSharp.Compiler.EditorServices.InterfaceData+Interface: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]] memberDefns -FSharp.Compiler.EditorServices.InterfaceData+ObjExpr: FSharp.Compiler.Syntax.SynType get_objType() -FSharp.Compiler.EditorServices.InterfaceData+ObjExpr: FSharp.Compiler.Syntax.SynType objType -FSharp.Compiler.EditorServices.InterfaceData+ObjExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] bindings -FSharp.Compiler.EditorServices.InterfaceData+ObjExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] get_bindings() -FSharp.Compiler.EditorServices.InterfaceData+Tags: Int32 Interface -FSharp.Compiler.EditorServices.InterfaceData+Tags: Int32 ObjExpr -FSharp.Compiler.EditorServices.InterfaceData: Boolean IsInterface -FSharp.Compiler.EditorServices.InterfaceData: Boolean IsObjExpr -FSharp.Compiler.EditorServices.InterfaceData: Boolean get_IsInterface() -FSharp.Compiler.EditorServices.InterfaceData: Boolean get_IsObjExpr() -FSharp.Compiler.EditorServices.InterfaceData: FSharp.Compiler.EditorServices.InterfaceData NewInterface(FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]]) -FSharp.Compiler.EditorServices.InterfaceData: FSharp.Compiler.EditorServices.InterfaceData NewObjExpr(FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]) -FSharp.Compiler.EditorServices.InterfaceData: FSharp.Compiler.EditorServices.InterfaceData+Interface -FSharp.Compiler.EditorServices.InterfaceData: FSharp.Compiler.EditorServices.InterfaceData+ObjExpr -FSharp.Compiler.EditorServices.InterfaceData: FSharp.Compiler.EditorServices.InterfaceData+Tags -FSharp.Compiler.EditorServices.InterfaceData: FSharp.Compiler.Text.Range Range -FSharp.Compiler.EditorServices.InterfaceData: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.EditorServices.InterfaceData: Int32 Tag -FSharp.Compiler.EditorServices.InterfaceData: Int32 get_Tag() -FSharp.Compiler.EditorServices.InterfaceData: System.String ToString() -FSharp.Compiler.EditorServices.InterfaceData: System.String[] TypeParameters -FSharp.Compiler.EditorServices.InterfaceData: System.String[] get_TypeParameters() -FSharp.Compiler.EditorServices.InterfaceStubGenerator -FSharp.Compiler.EditorServices.InterfaceStubGenerator: Boolean HasNoInterfaceMember(FSharp.Compiler.Symbols.FSharpEntity) -FSharp.Compiler.EditorServices.InterfaceStubGenerator: Boolean IsInterface(FSharp.Compiler.Symbols.FSharpEntity) -FSharp.Compiler.EditorServices.InterfaceStubGenerator: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.Text.Range]] GetMemberNameAndRanges(FSharp.Compiler.EditorServices.InterfaceData) -FSharp.Compiler.EditorServices.InterfaceStubGenerator: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Collections.FSharpSet`1[System.String]] GetImplementedMemberSignatures(Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.String,FSharp.Compiler.Text.Range],Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.FSharpSymbolUse]], FSharp.Compiler.Symbols.FSharpDisplayContext, FSharp.Compiler.EditorServices.InterfaceData) -FSharp.Compiler.EditorServices.InterfaceStubGenerator: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.EditorServices.InterfaceData] TryFindInterfaceDeclaration(FSharp.Compiler.Text.Position, FSharp.Compiler.Syntax.ParsedInput) -FSharp.Compiler.EditorServices.InterfaceStubGenerator: System.Collections.Generic.IEnumerable`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue,System.Collections.Generic.IEnumerable`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpGenericParameter,FSharp.Compiler.Symbols.FSharpType]]]] GetInterfaceMembers(FSharp.Compiler.Symbols.FSharpEntity) -FSharp.Compiler.EditorServices.InterfaceStubGenerator: System.String FormatInterface(Int32, Int32, System.String[], System.String, System.String, FSharp.Compiler.Symbols.FSharpDisplayContext, Microsoft.FSharp.Collections.FSharpSet`1[System.String], FSharp.Compiler.Symbols.FSharpEntity, Boolean) -FSharp.Compiler.EditorServices.LookupType -FSharp.Compiler.EditorServices.LookupType+Tags: Int32 Fuzzy -FSharp.Compiler.EditorServices.LookupType+Tags: Int32 Precise -FSharp.Compiler.EditorServices.LookupType: Boolean Equals(FSharp.Compiler.EditorServices.LookupType) -FSharp.Compiler.EditorServices.LookupType: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.LookupType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.LookupType: Boolean IsFuzzy -FSharp.Compiler.EditorServices.LookupType: Boolean IsPrecise -FSharp.Compiler.EditorServices.LookupType: Boolean get_IsFuzzy() -FSharp.Compiler.EditorServices.LookupType: Boolean get_IsPrecise() -FSharp.Compiler.EditorServices.LookupType: FSharp.Compiler.EditorServices.LookupType Fuzzy -FSharp.Compiler.EditorServices.LookupType: FSharp.Compiler.EditorServices.LookupType Precise -FSharp.Compiler.EditorServices.LookupType: FSharp.Compiler.EditorServices.LookupType get_Fuzzy() -FSharp.Compiler.EditorServices.LookupType: FSharp.Compiler.EditorServices.LookupType get_Precise() -FSharp.Compiler.EditorServices.LookupType: FSharp.Compiler.EditorServices.LookupType+Tags -FSharp.Compiler.EditorServices.LookupType: Int32 CompareTo(FSharp.Compiler.EditorServices.LookupType) -FSharp.Compiler.EditorServices.LookupType: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.LookupType: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.LookupType: Int32 GetHashCode() -FSharp.Compiler.EditorServices.LookupType: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.LookupType: Int32 Tag -FSharp.Compiler.EditorServices.LookupType: Int32 get_Tag() -FSharp.Compiler.EditorServices.LookupType: System.String ToString() -FSharp.Compiler.EditorServices.MaybeUnresolvedIdent -FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Boolean Equals(FSharp.Compiler.EditorServices.MaybeUnresolvedIdent) -FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Boolean Resolved -FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Boolean get_Resolved() -FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Int32 CompareTo(FSharp.Compiler.EditorServices.MaybeUnresolvedIdent) -FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Int32 GetHashCode() -FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: System.String Ident -FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: System.String ToString() -FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: System.String get_Ident() -FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Void .ctor(System.String, Boolean) -FSharp.Compiler.EditorServices.MethodGroup -FSharp.Compiler.EditorServices.MethodGroup: FSharp.Compiler.EditorServices.MethodGroupItem[] Methods -FSharp.Compiler.EditorServices.MethodGroup: FSharp.Compiler.EditorServices.MethodGroupItem[] get_Methods() -FSharp.Compiler.EditorServices.MethodGroup: System.String MethodName -FSharp.Compiler.EditorServices.MethodGroup: System.String get_MethodName() -FSharp.Compiler.EditorServices.MethodGroupItem -FSharp.Compiler.EditorServices.MethodGroupItem: Boolean HasParamArrayArg -FSharp.Compiler.EditorServices.MethodGroupItem: Boolean HasParameters -FSharp.Compiler.EditorServices.MethodGroupItem: Boolean get_HasParamArrayArg() -FSharp.Compiler.EditorServices.MethodGroupItem: Boolean get_HasParameters() -FSharp.Compiler.EditorServices.MethodGroupItem: FSharp.Compiler.EditorServices.MethodGroupItemParameter[] Parameters -FSharp.Compiler.EditorServices.MethodGroupItem: FSharp.Compiler.EditorServices.MethodGroupItemParameter[] StaticParameters -FSharp.Compiler.EditorServices.MethodGroupItem: FSharp.Compiler.EditorServices.MethodGroupItemParameter[] get_Parameters() -FSharp.Compiler.EditorServices.MethodGroupItem: FSharp.Compiler.EditorServices.MethodGroupItemParameter[] get_StaticParameters() -FSharp.Compiler.EditorServices.MethodGroupItem: FSharp.Compiler.EditorServices.ToolTipText Description -FSharp.Compiler.EditorServices.MethodGroupItem: FSharp.Compiler.EditorServices.ToolTipText get_Description() -FSharp.Compiler.EditorServices.MethodGroupItem: FSharp.Compiler.Symbols.FSharpXmlDoc XmlDoc -FSharp.Compiler.EditorServices.MethodGroupItem: FSharp.Compiler.Symbols.FSharpXmlDoc get_XmlDoc() -FSharp.Compiler.EditorServices.MethodGroupItem: FSharp.Compiler.Text.TaggedText[] ReturnTypeText -FSharp.Compiler.EditorServices.MethodGroupItem: FSharp.Compiler.Text.TaggedText[] get_ReturnTypeText() -FSharp.Compiler.EditorServices.MethodGroupItemParameter -FSharp.Compiler.EditorServices.MethodGroupItemParameter: Boolean IsOptional -FSharp.Compiler.EditorServices.MethodGroupItemParameter: Boolean get_IsOptional() -FSharp.Compiler.EditorServices.MethodGroupItemParameter: FSharp.Compiler.Text.TaggedText[] Display -FSharp.Compiler.EditorServices.MethodGroupItemParameter: FSharp.Compiler.Text.TaggedText[] get_Display() -FSharp.Compiler.EditorServices.MethodGroupItemParameter: System.String CanonicalTypeTextForSorting -FSharp.Compiler.EditorServices.MethodGroupItemParameter: System.String ParameterName -FSharp.Compiler.EditorServices.MethodGroupItemParameter: System.String get_CanonicalTypeTextForSorting() -FSharp.Compiler.EditorServices.MethodGroupItemParameter: System.String get_ParameterName() -FSharp.Compiler.EditorServices.ModuleKind -FSharp.Compiler.EditorServices.ModuleKind: Boolean Equals(FSharp.Compiler.EditorServices.ModuleKind) -FSharp.Compiler.EditorServices.ModuleKind: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.ModuleKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.ModuleKind: Boolean HasModuleSuffix -FSharp.Compiler.EditorServices.ModuleKind: Boolean IsAutoOpen -FSharp.Compiler.EditorServices.ModuleKind: Boolean get_HasModuleSuffix() -FSharp.Compiler.EditorServices.ModuleKind: Boolean get_IsAutoOpen() -FSharp.Compiler.EditorServices.ModuleKind: Int32 CompareTo(FSharp.Compiler.EditorServices.ModuleKind) -FSharp.Compiler.EditorServices.ModuleKind: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.ModuleKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.ModuleKind: Int32 GetHashCode() -FSharp.Compiler.EditorServices.ModuleKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.ModuleKind: System.String ToString() -FSharp.Compiler.EditorServices.ModuleKind: Void .ctor(Boolean, Boolean) -FSharp.Compiler.EditorServices.NavigableContainer -FSharp.Compiler.EditorServices.NavigableContainer: Boolean Equals(FSharp.Compiler.EditorServices.NavigableContainer) -FSharp.Compiler.EditorServices.NavigableContainer: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.NavigableContainer: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.NavigableContainer: FSharp.Compiler.EditorServices.NavigableContainerType Type -FSharp.Compiler.EditorServices.NavigableContainer: FSharp.Compiler.EditorServices.NavigableContainerType get_Type() -FSharp.Compiler.EditorServices.NavigableContainer: Int32 CompareTo(FSharp.Compiler.EditorServices.NavigableContainer) -FSharp.Compiler.EditorServices.NavigableContainer: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.NavigableContainer: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.NavigableContainer: Int32 GetHashCode() -FSharp.Compiler.EditorServices.NavigableContainer: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.NavigableContainer: System.String Name -FSharp.Compiler.EditorServices.NavigableContainer: System.String ToString() -FSharp.Compiler.EditorServices.NavigableContainer: System.String get_Name() -FSharp.Compiler.EditorServices.NavigableContainer: Void .ctor(FSharp.Compiler.EditorServices.NavigableContainerType, System.String) -FSharp.Compiler.EditorServices.NavigableContainerType -FSharp.Compiler.EditorServices.NavigableContainerType+Tags: Int32 Exception -FSharp.Compiler.EditorServices.NavigableContainerType+Tags: Int32 File -FSharp.Compiler.EditorServices.NavigableContainerType+Tags: Int32 Module -FSharp.Compiler.EditorServices.NavigableContainerType+Tags: Int32 Namespace -FSharp.Compiler.EditorServices.NavigableContainerType+Tags: Int32 Type -FSharp.Compiler.EditorServices.NavigableContainerType: Boolean Equals(FSharp.Compiler.EditorServices.NavigableContainerType) -FSharp.Compiler.EditorServices.NavigableContainerType: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.NavigableContainerType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.NavigableContainerType: Boolean IsException -FSharp.Compiler.EditorServices.NavigableContainerType: Boolean IsFile -FSharp.Compiler.EditorServices.NavigableContainerType: Boolean IsModule -FSharp.Compiler.EditorServices.NavigableContainerType: Boolean IsNamespace -FSharp.Compiler.EditorServices.NavigableContainerType: Boolean IsType -FSharp.Compiler.EditorServices.NavigableContainerType: Boolean get_IsException() -FSharp.Compiler.EditorServices.NavigableContainerType: Boolean get_IsFile() -FSharp.Compiler.EditorServices.NavigableContainerType: Boolean get_IsModule() -FSharp.Compiler.EditorServices.NavigableContainerType: Boolean get_IsNamespace() -FSharp.Compiler.EditorServices.NavigableContainerType: Boolean get_IsType() -FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType Exception -FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType File -FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType Module -FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType Namespace -FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType Type -FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType get_Exception() -FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType get_File() -FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType get_Module() -FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType get_Namespace() -FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType get_Type() -FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType+Tags -FSharp.Compiler.EditorServices.NavigableContainerType: Int32 CompareTo(FSharp.Compiler.EditorServices.NavigableContainerType) -FSharp.Compiler.EditorServices.NavigableContainerType: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.NavigableContainerType: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.NavigableContainerType: Int32 GetHashCode() -FSharp.Compiler.EditorServices.NavigableContainerType: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.NavigableContainerType: Int32 Tag -FSharp.Compiler.EditorServices.NavigableContainerType: Int32 get_Tag() -FSharp.Compiler.EditorServices.NavigableContainerType: System.String ToString() -FSharp.Compiler.EditorServices.NavigableItem -FSharp.Compiler.EditorServices.NavigableItem: Boolean Equals(FSharp.Compiler.EditorServices.NavigableItem) -FSharp.Compiler.EditorServices.NavigableItem: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.NavigableItem: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.NavigableItem: Boolean IsSignature -FSharp.Compiler.EditorServices.NavigableItem: Boolean get_IsSignature() -FSharp.Compiler.EditorServices.NavigableItem: FSharp.Compiler.EditorServices.NavigableContainer Container -FSharp.Compiler.EditorServices.NavigableItem: FSharp.Compiler.EditorServices.NavigableContainer get_Container() -FSharp.Compiler.EditorServices.NavigableItem: FSharp.Compiler.EditorServices.NavigableItemKind Kind -FSharp.Compiler.EditorServices.NavigableItem: FSharp.Compiler.EditorServices.NavigableItemKind get_Kind() -FSharp.Compiler.EditorServices.NavigableItem: FSharp.Compiler.Text.Range Range -FSharp.Compiler.EditorServices.NavigableItem: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.EditorServices.NavigableItem: Int32 GetHashCode() -FSharp.Compiler.EditorServices.NavigableItem: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.NavigableItem: System.String Name -FSharp.Compiler.EditorServices.NavigableItem: System.String ToString() -FSharp.Compiler.EditorServices.NavigableItem: System.String get_Name() -FSharp.Compiler.EditorServices.NavigableItem: Void .ctor(System.String, FSharp.Compiler.Text.Range, Boolean, FSharp.Compiler.EditorServices.NavigableItemKind, FSharp.Compiler.EditorServices.NavigableContainer) -FSharp.Compiler.EditorServices.NavigableItemKind -FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 Constructor -FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 EnumCase -FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 Exception -FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 Field -FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 Member -FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 Module -FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 ModuleAbbreviation -FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 ModuleValue -FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 Property -FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 Type -FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 UnionCase -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean Equals(FSharp.Compiler.EditorServices.NavigableItemKind) -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsConstructor -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsEnumCase -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsException -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsField -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsMember -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsModule -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsModuleAbbreviation -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsModuleValue -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsProperty -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsType -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsUnionCase -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsConstructor() -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsEnumCase() -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsException() -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsField() -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsMember() -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsModule() -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsModuleAbbreviation() -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsModuleValue() -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsProperty() -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsType() -FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsUnionCase() -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind Constructor -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind EnumCase -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind Exception -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind Field -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind Member -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind Module -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind ModuleAbbreviation -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind ModuleValue -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind Property -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind Type -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind UnionCase -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_Constructor() -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_EnumCase() -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_Exception() -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_Field() -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_Member() -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_Module() -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_ModuleAbbreviation() -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_ModuleValue() -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_Property() -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_Type() -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_UnionCase() -FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind+Tags -FSharp.Compiler.EditorServices.NavigableItemKind: Int32 CompareTo(FSharp.Compiler.EditorServices.NavigableItemKind) -FSharp.Compiler.EditorServices.NavigableItemKind: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.NavigableItemKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.NavigableItemKind: Int32 GetHashCode() -FSharp.Compiler.EditorServices.NavigableItemKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.NavigableItemKind: Int32 Tag -FSharp.Compiler.EditorServices.NavigableItemKind: Int32 get_Tag() -FSharp.Compiler.EditorServices.NavigableItemKind: System.String ToString() -FSharp.Compiler.EditorServices.NavigateTo -FSharp.Compiler.EditorServices.NavigateTo: FSharp.Compiler.EditorServices.NavigableItem[] GetNavigableItems(FSharp.Compiler.Syntax.ParsedInput) -FSharp.Compiler.EditorServices.Navigation -FSharp.Compiler.EditorServices.Navigation: FSharp.Compiler.EditorServices.NavigationItems getNavigation(FSharp.Compiler.Syntax.ParsedInput) -FSharp.Compiler.EditorServices.NavigationEntityKind -FSharp.Compiler.EditorServices.NavigationEntityKind+Tags: Int32 Class -FSharp.Compiler.EditorServices.NavigationEntityKind+Tags: Int32 Enum -FSharp.Compiler.EditorServices.NavigationEntityKind+Tags: Int32 Exception -FSharp.Compiler.EditorServices.NavigationEntityKind+Tags: Int32 Interface -FSharp.Compiler.EditorServices.NavigationEntityKind+Tags: Int32 Module -FSharp.Compiler.EditorServices.NavigationEntityKind+Tags: Int32 Namespace -FSharp.Compiler.EditorServices.NavigationEntityKind+Tags: Int32 Record -FSharp.Compiler.EditorServices.NavigationEntityKind+Tags: Int32 Union -FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean Equals(FSharp.Compiler.EditorServices.NavigationEntityKind) -FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean IsClass -FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean IsEnum -FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean IsException -FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean IsInterface -FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean IsModule -FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean IsNamespace -FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean IsRecord -FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean IsUnion -FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean get_IsClass() -FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean get_IsEnum() -FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean get_IsException() -FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean get_IsInterface() -FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean get_IsModule() -FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean get_IsNamespace() -FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean get_IsRecord() -FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean get_IsUnion() -FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind Class -FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind Enum -FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind Exception -FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind Interface -FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind Module -FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind Namespace -FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind Record -FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind Union -FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind get_Class() -FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind get_Enum() -FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind get_Exception() -FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind get_Interface() -FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind get_Module() -FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind get_Namespace() -FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind get_Record() -FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind get_Union() -FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind+Tags -FSharp.Compiler.EditorServices.NavigationEntityKind: Int32 CompareTo(FSharp.Compiler.EditorServices.NavigationEntityKind) -FSharp.Compiler.EditorServices.NavigationEntityKind: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.NavigationEntityKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.NavigationEntityKind: Int32 GetHashCode() -FSharp.Compiler.EditorServices.NavigationEntityKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.NavigationEntityKind: Int32 Tag -FSharp.Compiler.EditorServices.NavigationEntityKind: Int32 get_Tag() -FSharp.Compiler.EditorServices.NavigationEntityKind: System.String ToString() -FSharp.Compiler.EditorServices.NavigationItem -FSharp.Compiler.EditorServices.NavigationItem: Boolean IsAbstract -FSharp.Compiler.EditorServices.NavigationItem: Boolean IsSingleTopLevel -FSharp.Compiler.EditorServices.NavigationItem: Boolean get_IsAbstract() -FSharp.Compiler.EditorServices.NavigationItem: Boolean get_IsSingleTopLevel() -FSharp.Compiler.EditorServices.NavigationItem: FSharp.Compiler.EditorServices.FSharpGlyph Glyph -FSharp.Compiler.EditorServices.NavigationItem: FSharp.Compiler.EditorServices.FSharpGlyph get_Glyph() -FSharp.Compiler.EditorServices.NavigationItem: FSharp.Compiler.EditorServices.NavigationEntityKind EnclosingEntityKind -FSharp.Compiler.EditorServices.NavigationItem: FSharp.Compiler.EditorServices.NavigationEntityKind get_EnclosingEntityKind() -FSharp.Compiler.EditorServices.NavigationItem: FSharp.Compiler.EditorServices.NavigationItemKind Kind -FSharp.Compiler.EditorServices.NavigationItem: FSharp.Compiler.EditorServices.NavigationItemKind get_Kind() -FSharp.Compiler.EditorServices.NavigationItem: FSharp.Compiler.Text.Range BodyRange -FSharp.Compiler.EditorServices.NavigationItem: FSharp.Compiler.Text.Range Range -FSharp.Compiler.EditorServices.NavigationItem: FSharp.Compiler.Text.Range get_BodyRange() -FSharp.Compiler.EditorServices.NavigationItem: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.EditorServices.NavigationItem: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] Access -FSharp.Compiler.EditorServices.NavigationItem: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_Access() -FSharp.Compiler.EditorServices.NavigationItem: System.String Name -FSharp.Compiler.EditorServices.NavigationItem: System.String UniqueName -FSharp.Compiler.EditorServices.NavigationItem: System.String get_Name() -FSharp.Compiler.EditorServices.NavigationItem: System.String get_UniqueName() -FSharp.Compiler.EditorServices.NavigationItemKind -FSharp.Compiler.EditorServices.NavigationItemKind+Tags: Int32 Exception -FSharp.Compiler.EditorServices.NavigationItemKind+Tags: Int32 Field -FSharp.Compiler.EditorServices.NavigationItemKind+Tags: Int32 Method -FSharp.Compiler.EditorServices.NavigationItemKind+Tags: Int32 Module -FSharp.Compiler.EditorServices.NavigationItemKind+Tags: Int32 ModuleFile -FSharp.Compiler.EditorServices.NavigationItemKind+Tags: Int32 Namespace -FSharp.Compiler.EditorServices.NavigationItemKind+Tags: Int32 Other -FSharp.Compiler.EditorServices.NavigationItemKind+Tags: Int32 Property -FSharp.Compiler.EditorServices.NavigationItemKind+Tags: Int32 Type -FSharp.Compiler.EditorServices.NavigationItemKind: Boolean Equals(FSharp.Compiler.EditorServices.NavigationItemKind) -FSharp.Compiler.EditorServices.NavigationItemKind: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.NavigationItemKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.NavigationItemKind: Boolean IsException -FSharp.Compiler.EditorServices.NavigationItemKind: Boolean IsField -FSharp.Compiler.EditorServices.NavigationItemKind: Boolean IsMethod -FSharp.Compiler.EditorServices.NavigationItemKind: Boolean IsModule -FSharp.Compiler.EditorServices.NavigationItemKind: Boolean IsModuleFile -FSharp.Compiler.EditorServices.NavigationItemKind: Boolean IsNamespace -FSharp.Compiler.EditorServices.NavigationItemKind: Boolean IsOther -FSharp.Compiler.EditorServices.NavigationItemKind: Boolean IsProperty -FSharp.Compiler.EditorServices.NavigationItemKind: Boolean IsType -FSharp.Compiler.EditorServices.NavigationItemKind: Boolean get_IsException() -FSharp.Compiler.EditorServices.NavigationItemKind: Boolean get_IsField() -FSharp.Compiler.EditorServices.NavigationItemKind: Boolean get_IsMethod() -FSharp.Compiler.EditorServices.NavigationItemKind: Boolean get_IsModule() -FSharp.Compiler.EditorServices.NavigationItemKind: Boolean get_IsModuleFile() -FSharp.Compiler.EditorServices.NavigationItemKind: Boolean get_IsNamespace() -FSharp.Compiler.EditorServices.NavigationItemKind: Boolean get_IsOther() -FSharp.Compiler.EditorServices.NavigationItemKind: Boolean get_IsProperty() -FSharp.Compiler.EditorServices.NavigationItemKind: Boolean get_IsType() -FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind Exception -FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind Field -FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind Method -FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind Module -FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind ModuleFile -FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind Namespace -FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind Other -FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind Property -FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind Type -FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind get_Exception() -FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind get_Field() -FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind get_Method() -FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind get_Module() -FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind get_ModuleFile() -FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind get_Namespace() -FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind get_Other() -FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind get_Property() -FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind get_Type() -FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind+Tags -FSharp.Compiler.EditorServices.NavigationItemKind: Int32 CompareTo(FSharp.Compiler.EditorServices.NavigationItemKind) -FSharp.Compiler.EditorServices.NavigationItemKind: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.NavigationItemKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.NavigationItemKind: Int32 GetHashCode() -FSharp.Compiler.EditorServices.NavigationItemKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.NavigationItemKind: Int32 Tag -FSharp.Compiler.EditorServices.NavigationItemKind: Int32 get_Tag() -FSharp.Compiler.EditorServices.NavigationItemKind: System.String ToString() -FSharp.Compiler.EditorServices.NavigationItems -FSharp.Compiler.EditorServices.NavigationItems: FSharp.Compiler.EditorServices.NavigationTopLevelDeclaration[] Declarations -FSharp.Compiler.EditorServices.NavigationItems: FSharp.Compiler.EditorServices.NavigationTopLevelDeclaration[] get_Declarations() -FSharp.Compiler.EditorServices.NavigationTopLevelDeclaration -FSharp.Compiler.EditorServices.NavigationTopLevelDeclaration: FSharp.Compiler.EditorServices.NavigationItem Declaration -FSharp.Compiler.EditorServices.NavigationTopLevelDeclaration: FSharp.Compiler.EditorServices.NavigationItem get_Declaration() -FSharp.Compiler.EditorServices.NavigationTopLevelDeclaration: FSharp.Compiler.EditorServices.NavigationItem[] Nested -FSharp.Compiler.EditorServices.NavigationTopLevelDeclaration: FSharp.Compiler.EditorServices.NavigationItem[] get_Nested() -FSharp.Compiler.EditorServices.NavigationTopLevelDeclaration: System.String ToString() -FSharp.Compiler.EditorServices.NavigationTopLevelDeclaration: Void .ctor(FSharp.Compiler.EditorServices.NavigationItem, FSharp.Compiler.EditorServices.NavigationItem[]) -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint+Tags: Int32 Nearest -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint+Tags: Int32 TopLevel -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Boolean Equals(FSharp.Compiler.EditorServices.OpenStatementInsertionPoint) -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Boolean IsNearest -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Boolean IsTopLevel -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Boolean get_IsNearest() -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Boolean get_IsTopLevel() -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: FSharp.Compiler.EditorServices.OpenStatementInsertionPoint Nearest -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: FSharp.Compiler.EditorServices.OpenStatementInsertionPoint TopLevel -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: FSharp.Compiler.EditorServices.OpenStatementInsertionPoint get_Nearest() -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: FSharp.Compiler.EditorServices.OpenStatementInsertionPoint get_TopLevel() -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: FSharp.Compiler.EditorServices.OpenStatementInsertionPoint+Tags -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Int32 CompareTo(FSharp.Compiler.EditorServices.OpenStatementInsertionPoint) -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Int32 GetHashCode() -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Int32 Tag -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Int32 get_Tag() -FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: System.String ToString() -FSharp.Compiler.EditorServices.ParameterLocations -FSharp.Compiler.EditorServices.ParameterLocations: Boolean IsThereACloseParen -FSharp.Compiler.EditorServices.ParameterLocations: Boolean get_IsThereACloseParen() -FSharp.Compiler.EditorServices.ParameterLocations: FSharp.Compiler.Text.Position LongIdEndLocation -FSharp.Compiler.EditorServices.ParameterLocations: FSharp.Compiler.Text.Position LongIdStartLocation -FSharp.Compiler.EditorServices.ParameterLocations: FSharp.Compiler.Text.Position OpenParenLocation -FSharp.Compiler.EditorServices.ParameterLocations: FSharp.Compiler.Text.Position get_LongIdEndLocation() -FSharp.Compiler.EditorServices.ParameterLocations: FSharp.Compiler.Text.Position get_LongIdStartLocation() -FSharp.Compiler.EditorServices.ParameterLocations: FSharp.Compiler.Text.Position get_OpenParenLocation() -FSharp.Compiler.EditorServices.ParameterLocations: FSharp.Compiler.Text.Position[] TupleEndLocations -FSharp.Compiler.EditorServices.ParameterLocations: FSharp.Compiler.Text.Position[] get_TupleEndLocations() -FSharp.Compiler.EditorServices.ParameterLocations: Microsoft.FSharp.Collections.FSharpList`1[System.String] LongId -FSharp.Compiler.EditorServices.ParameterLocations: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_LongId() -FSharp.Compiler.EditorServices.ParameterLocations: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.EditorServices.ParameterLocations] Find(FSharp.Compiler.Text.Position, FSharp.Compiler.Syntax.ParsedInput) -FSharp.Compiler.EditorServices.ParameterLocations: Microsoft.FSharp.Core.FSharpOption`1[System.String][] NamedParamNames -FSharp.Compiler.EditorServices.ParameterLocations: Microsoft.FSharp.Core.FSharpOption`1[System.String][] get_NamedParamNames() -FSharp.Compiler.EditorServices.ParsedInput -FSharp.Compiler.EditorServices.ParsedInput: FSharp.Compiler.EditorServices.InsertionContext FindNearestPointToInsertOpenDeclaration(Int32, FSharp.Compiler.Syntax.ParsedInput, System.String[], FSharp.Compiler.EditorServices.OpenStatementInsertionPoint) -FSharp.Compiler.EditorServices.ParsedInput: FSharp.Compiler.Text.Position AdjustInsertionPoint(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String], FSharp.Compiler.EditorServices.InsertionContext) -FSharp.Compiler.EditorServices.ParsedInput: Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`4[Microsoft.FSharp.Core.FSharpOption`1[System.String[]],Microsoft.FSharp.Core.FSharpOption`1[System.String[]],Microsoft.FSharp.Core.FSharpOption`1[System.String[]],System.String[]],System.Tuple`2[FSharp.Compiler.EditorServices.InsertionContextEntity,FSharp.Compiler.EditorServices.InsertionContext][]] TryFindInsertionContext(Int32, FSharp.Compiler.Syntax.ParsedInput, FSharp.Compiler.EditorServices.MaybeUnresolvedIdent[], FSharp.Compiler.EditorServices.OpenStatementInsertionPoint) -FSharp.Compiler.EditorServices.ParsedInput: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.EditorServices.CompletionContext] TryGetCompletionContext(FSharp.Compiler.Text.Position, FSharp.Compiler.Syntax.ParsedInput, System.String) -FSharp.Compiler.EditorServices.ParsedInput: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.EditorServices.EntityKind] GetEntityKind(FSharp.Compiler.Text.Position, FSharp.Compiler.Syntax.ParsedInput) -FSharp.Compiler.EditorServices.ParsedInput: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] GetRangeOfExprLeftOfDot(FSharp.Compiler.Text.Position, FSharp.Compiler.Syntax.ParsedInput) -FSharp.Compiler.EditorServices.ParsedInput: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident]] GetLongIdentAt(FSharp.Compiler.Syntax.ParsedInput, FSharp.Compiler.Text.Position) -FSharp.Compiler.EditorServices.ParsedInput: Microsoft.FSharp.Core.FSharpOption`1[System.String] TryFindExpressionIslandInPosition(FSharp.Compiler.Text.Position, FSharp.Compiler.Syntax.ParsedInput) -FSharp.Compiler.EditorServices.ParsedInput: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Position,System.Boolean]] TryFindExpressionASTLeftOfDotLeftOfCursor(FSharp.Compiler.Text.Position, FSharp.Compiler.Syntax.ParsedInput) -FSharp.Compiler.EditorServices.ParsedInput: System.String[] GetFullNameOfSmallestModuleOrNamespaceAtPoint(FSharp.Compiler.Text.Position, FSharp.Compiler.Syntax.ParsedInput) -FSharp.Compiler.EditorServices.PartialLongName -FSharp.Compiler.EditorServices.PartialLongName: Boolean Equals(FSharp.Compiler.EditorServices.PartialLongName) -FSharp.Compiler.EditorServices.PartialLongName: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.PartialLongName: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.PartialLongName: FSharp.Compiler.EditorServices.PartialLongName Empty(Int32) -FSharp.Compiler.EditorServices.PartialLongName: Int32 CompareTo(FSharp.Compiler.EditorServices.PartialLongName) -FSharp.Compiler.EditorServices.PartialLongName: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.PartialLongName: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.PartialLongName: Int32 EndColumn -FSharp.Compiler.EditorServices.PartialLongName: Int32 GetHashCode() -FSharp.Compiler.EditorServices.PartialLongName: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.PartialLongName: Int32 get_EndColumn() -FSharp.Compiler.EditorServices.PartialLongName: Microsoft.FSharp.Collections.FSharpList`1[System.String] QualifyingIdents -FSharp.Compiler.EditorServices.PartialLongName: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_QualifyingIdents() -FSharp.Compiler.EditorServices.PartialLongName: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] LastDotPos -FSharp.Compiler.EditorServices.PartialLongName: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] get_LastDotPos() -FSharp.Compiler.EditorServices.PartialLongName: System.String PartialIdent -FSharp.Compiler.EditorServices.PartialLongName: System.String ToString() -FSharp.Compiler.EditorServices.PartialLongName: System.String get_PartialIdent() -FSharp.Compiler.EditorServices.PartialLongName: Void .ctor(Microsoft.FSharp.Collections.FSharpList`1[System.String], System.String, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -FSharp.Compiler.EditorServices.QuickParse -FSharp.Compiler.EditorServices.QuickParse: Boolean TestMemberOrOverrideDeclaration(FSharp.Compiler.Tokenization.FSharpTokenInfo[]) -FSharp.Compiler.EditorServices.QuickParse: FSharp.Compiler.EditorServices.PartialLongName GetPartialLongNameEx(System.String, Int32) -FSharp.Compiler.EditorServices.QuickParse: Int32 CorrectIdentifierToken(System.String, Int32) -FSharp.Compiler.EditorServices.QuickParse: Int32 MagicalAdjustmentConstant -FSharp.Compiler.EditorServices.QuickParse: Int32 get_MagicalAdjustmentConstant() -FSharp.Compiler.EditorServices.QuickParse: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.String,System.Int32,System.Boolean]] GetCompleteIdentifierIsland(Boolean, System.String, Int32) -FSharp.Compiler.EditorServices.QuickParse: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],System.String] GetPartialLongName(System.String, Int32) -FSharp.Compiler.EditorServices.RecordContext -FSharp.Compiler.EditorServices.RecordContext+Constructor: System.String get_typeName() -FSharp.Compiler.EditorServices.RecordContext+Constructor: System.String typeName -FSharp.Compiler.EditorServices.RecordContext+CopyOnUpdate: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.EditorServices.RecordContext+CopyOnUpdate: FSharp.Compiler.Text.Range range -FSharp.Compiler.EditorServices.RecordContext+CopyOnUpdate: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] get_path() -FSharp.Compiler.EditorServices.RecordContext+CopyOnUpdate: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] path -FSharp.Compiler.EditorServices.RecordContext+New: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] get_path() -FSharp.Compiler.EditorServices.RecordContext+New: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] path -FSharp.Compiler.EditorServices.RecordContext+Tags: Int32 Constructor -FSharp.Compiler.EditorServices.RecordContext+Tags: Int32 CopyOnUpdate -FSharp.Compiler.EditorServices.RecordContext+Tags: Int32 New -FSharp.Compiler.EditorServices.RecordContext: Boolean Equals(FSharp.Compiler.EditorServices.RecordContext) -FSharp.Compiler.EditorServices.RecordContext: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.RecordContext: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.RecordContext: Boolean IsConstructor -FSharp.Compiler.EditorServices.RecordContext: Boolean IsCopyOnUpdate -FSharp.Compiler.EditorServices.RecordContext: Boolean IsNew -FSharp.Compiler.EditorServices.RecordContext: Boolean get_IsConstructor() -FSharp.Compiler.EditorServices.RecordContext: Boolean get_IsCopyOnUpdate() -FSharp.Compiler.EditorServices.RecordContext: Boolean get_IsNew() -FSharp.Compiler.EditorServices.RecordContext: FSharp.Compiler.EditorServices.RecordContext NewConstructor(System.String) -FSharp.Compiler.EditorServices.RecordContext: FSharp.Compiler.EditorServices.RecordContext NewCopyOnUpdate(FSharp.Compiler.Text.Range, System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]]) -FSharp.Compiler.EditorServices.RecordContext: FSharp.Compiler.EditorServices.RecordContext NewNew(System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]]) -FSharp.Compiler.EditorServices.RecordContext: FSharp.Compiler.EditorServices.RecordContext+Constructor -FSharp.Compiler.EditorServices.RecordContext: FSharp.Compiler.EditorServices.RecordContext+CopyOnUpdate -FSharp.Compiler.EditorServices.RecordContext: FSharp.Compiler.EditorServices.RecordContext+New -FSharp.Compiler.EditorServices.RecordContext: FSharp.Compiler.EditorServices.RecordContext+Tags -FSharp.Compiler.EditorServices.RecordContext: Int32 GetHashCode() -FSharp.Compiler.EditorServices.RecordContext: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.RecordContext: Int32 Tag -FSharp.Compiler.EditorServices.RecordContext: Int32 get_Tag() -FSharp.Compiler.EditorServices.RecordContext: System.String ToString() -FSharp.Compiler.EditorServices.ScopeKind -FSharp.Compiler.EditorServices.ScopeKind+Tags: Int32 HashDirective -FSharp.Compiler.EditorServices.ScopeKind+Tags: Int32 Namespace -FSharp.Compiler.EditorServices.ScopeKind+Tags: Int32 NestedModule -FSharp.Compiler.EditorServices.ScopeKind+Tags: Int32 OpenDeclaration -FSharp.Compiler.EditorServices.ScopeKind+Tags: Int32 TopModule -FSharp.Compiler.EditorServices.ScopeKind: Boolean Equals(FSharp.Compiler.EditorServices.ScopeKind) -FSharp.Compiler.EditorServices.ScopeKind: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.ScopeKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.ScopeKind: Boolean IsHashDirective -FSharp.Compiler.EditorServices.ScopeKind: Boolean IsNamespace -FSharp.Compiler.EditorServices.ScopeKind: Boolean IsNestedModule -FSharp.Compiler.EditorServices.ScopeKind: Boolean IsOpenDeclaration -FSharp.Compiler.EditorServices.ScopeKind: Boolean IsTopModule -FSharp.Compiler.EditorServices.ScopeKind: Boolean get_IsHashDirective() -FSharp.Compiler.EditorServices.ScopeKind: Boolean get_IsNamespace() -FSharp.Compiler.EditorServices.ScopeKind: Boolean get_IsNestedModule() -FSharp.Compiler.EditorServices.ScopeKind: Boolean get_IsOpenDeclaration() -FSharp.Compiler.EditorServices.ScopeKind: Boolean get_IsTopModule() -FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind HashDirective -FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind Namespace -FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind NestedModule -FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind OpenDeclaration -FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind TopModule -FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind get_HashDirective() -FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind get_Namespace() -FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind get_NestedModule() -FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind get_OpenDeclaration() -FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind get_TopModule() -FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind+Tags -FSharp.Compiler.EditorServices.ScopeKind: Int32 CompareTo(FSharp.Compiler.EditorServices.ScopeKind) -FSharp.Compiler.EditorServices.ScopeKind: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.ScopeKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.ScopeKind: Int32 GetHashCode() -FSharp.Compiler.EditorServices.ScopeKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.ScopeKind: Int32 Tag -FSharp.Compiler.EditorServices.ScopeKind: Int32 get_Tag() -FSharp.Compiler.EditorServices.ScopeKind: System.String ToString() -FSharp.Compiler.EditorServices.SemanticClassificationItem -FSharp.Compiler.EditorServices.SemanticClassificationItem: Boolean Equals(FSharp.Compiler.EditorServices.SemanticClassificationItem) -FSharp.Compiler.EditorServices.SemanticClassificationItem: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.SemanticClassificationItem: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.SemanticClassificationItem: FSharp.Compiler.EditorServices.SemanticClassificationType Type -FSharp.Compiler.EditorServices.SemanticClassificationItem: FSharp.Compiler.EditorServices.SemanticClassificationType get_Type() -FSharp.Compiler.EditorServices.SemanticClassificationItem: FSharp.Compiler.Text.Range Range -FSharp.Compiler.EditorServices.SemanticClassificationItem: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.EditorServices.SemanticClassificationItem: Int32 GetHashCode() -FSharp.Compiler.EditorServices.SemanticClassificationItem: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.SemanticClassificationItem: Void .ctor(System.Tuple`2[FSharp.Compiler.Text.Range,FSharp.Compiler.EditorServices.SemanticClassificationType]) -FSharp.Compiler.EditorServices.SemanticClassificationType -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType ComputationExpression -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType ConstructorForReferenceType -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType ConstructorForValueType -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Delegate -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType DisposableLocalValue -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType DisposableTopLevelValue -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType DisposableType -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Enumeration -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Event -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Exception -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType ExtensionMethod -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Field -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Function -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Interface -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType IntrinsicFunction -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Literal -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType LocalValue -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Method -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Module -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType MutableRecordField -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType MutableVar -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType NamedArgument -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Namespace -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Operator -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Plaintext -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Printf -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Property -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType RecordField -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType RecordFieldAsFunction -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType ReferenceType -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Type -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType TypeArgument -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType TypeDef -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType UnionCase -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType UnionCaseField -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Value -FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType ValueType -FSharp.Compiler.EditorServices.SemanticClassificationType: Int32 value__ -FSharp.Compiler.EditorServices.SemanticClassificationView -FSharp.Compiler.EditorServices.SemanticClassificationView: Void ForEach(Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.EditorServices.SemanticClassificationItem,Microsoft.FSharp.Core.Unit]) -FSharp.Compiler.EditorServices.SimplifyNames -FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: Boolean Equals(SimplifiableRange) -FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: FSharp.Compiler.Text.Range Range -FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: Int32 GetHashCode() -FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: System.String RelativeName -FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: System.String ToString() -FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: System.String get_RelativeName() -FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: Void .ctor(FSharp.Compiler.Text.Range, System.String) -FSharp.Compiler.EditorServices.SimplifyNames: FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange -FSharp.Compiler.EditorServices.SimplifyNames: Microsoft.FSharp.Control.FSharpAsync`1[System.Collections.Generic.IEnumerable`1[FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange]] getSimplifiableNames(FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String]) -FSharp.Compiler.EditorServices.Structure -FSharp.Compiler.EditorServices.Structure+Collapse+Tags: Int32 Below -FSharp.Compiler.EditorServices.Structure+Collapse+Tags: Int32 Same -FSharp.Compiler.EditorServices.Structure+Collapse: Boolean Equals(Collapse) -FSharp.Compiler.EditorServices.Structure+Collapse: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.Structure+Collapse: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.Structure+Collapse: Boolean IsBelow -FSharp.Compiler.EditorServices.Structure+Collapse: Boolean IsSame -FSharp.Compiler.EditorServices.Structure+Collapse: Boolean get_IsBelow() -FSharp.Compiler.EditorServices.Structure+Collapse: Boolean get_IsSame() -FSharp.Compiler.EditorServices.Structure+Collapse: Collapse Below -FSharp.Compiler.EditorServices.Structure+Collapse: Collapse Same -FSharp.Compiler.EditorServices.Structure+Collapse: Collapse get_Below() -FSharp.Compiler.EditorServices.Structure+Collapse: Collapse get_Same() -FSharp.Compiler.EditorServices.Structure+Collapse: FSharp.Compiler.EditorServices.Structure+Collapse+Tags -FSharp.Compiler.EditorServices.Structure+Collapse: Int32 CompareTo(Collapse) -FSharp.Compiler.EditorServices.Structure+Collapse: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.Structure+Collapse: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.Structure+Collapse: Int32 GetHashCode() -FSharp.Compiler.EditorServices.Structure+Collapse: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.Structure+Collapse: Int32 Tag -FSharp.Compiler.EditorServices.Structure+Collapse: Int32 get_Tag() -FSharp.Compiler.EditorServices.Structure+Collapse: System.String ToString() -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 ArrayOrList -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Attribute -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Comment -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 CompExpr -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 CompExprInternal -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Do -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 ElseInIfThenElse -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 EnumCase -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 FinallyInTryFinally -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 For -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 HashDirective -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 IfThenElse -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Interface -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Lambda -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 LetOrUse -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 LetOrUseBang -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Match -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 MatchBang -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 MatchClause -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 MatchLambda -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Member -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Module -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Namespace -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 New -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 ObjExpr -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Open -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Quote -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Record -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 RecordDefn -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 RecordField -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 SpecialFunc -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 ThenInIfThenElse -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 TryFinally -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 TryInTryFinally -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 TryInTryWith -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 TryWith -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Tuple -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Type -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 TypeExtension -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 UnionCase -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 UnionDefn -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Val -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 While -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 WithInTryWith -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 XmlDocComment -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 YieldOrReturn -FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 YieldOrReturnBang -FSharp.Compiler.EditorServices.Structure+Scope: Boolean Equals(Scope) -FSharp.Compiler.EditorServices.Structure+Scope: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.Structure+Scope: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsArrayOrList -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsAttribute -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsComment -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsCompExpr -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsCompExprInternal -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsDo -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsElseInIfThenElse -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsEnumCase -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsFinallyInTryFinally -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsFor -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsHashDirective -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsIfThenElse -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsInterface -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsLambda -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsLetOrUse -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsLetOrUseBang -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsMatch -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsMatchBang -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsMatchClause -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsMatchLambda -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsMember -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsModule -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsNamespace -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsNew -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsObjExpr -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsOpen -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsQuote -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsRecord -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsRecordDefn -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsRecordField -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsSpecialFunc -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsThenInIfThenElse -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsTryFinally -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsTryInTryFinally -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsTryInTryWith -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsTryWith -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsTuple -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsType -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsTypeExtension -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsUnionCase -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsUnionDefn -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsVal -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsWhile -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsWithInTryWith -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsXmlDocComment -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsYieldOrReturn -FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsYieldOrReturnBang -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsArrayOrList() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsAttribute() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsComment() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsCompExpr() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsCompExprInternal() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsDo() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsElseInIfThenElse() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsEnumCase() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsFinallyInTryFinally() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsFor() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsHashDirective() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsIfThenElse() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsInterface() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsLambda() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsLetOrUse() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsLetOrUseBang() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsMatch() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsMatchBang() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsMatchClause() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsMatchLambda() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsMember() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsModule() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsNamespace() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsNew() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsObjExpr() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsOpen() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsQuote() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsRecord() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsRecordDefn() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsRecordField() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsSpecialFunc() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsThenInIfThenElse() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsTryFinally() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsTryInTryFinally() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsTryInTryWith() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsTryWith() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsTuple() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsType() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsTypeExtension() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsUnionCase() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsUnionDefn() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsVal() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsWhile() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsWithInTryWith() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsXmlDocComment() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsYieldOrReturn() -FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsYieldOrReturnBang() -FSharp.Compiler.EditorServices.Structure+Scope: FSharp.Compiler.EditorServices.Structure+Scope+Tags -FSharp.Compiler.EditorServices.Structure+Scope: Int32 CompareTo(Scope) -FSharp.Compiler.EditorServices.Structure+Scope: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.Structure+Scope: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.Structure+Scope: Int32 GetHashCode() -FSharp.Compiler.EditorServices.Structure+Scope: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.Structure+Scope: Int32 Tag -FSharp.Compiler.EditorServices.Structure+Scope: Int32 get_Tag() -FSharp.Compiler.EditorServices.Structure+Scope: Scope ArrayOrList -FSharp.Compiler.EditorServices.Structure+Scope: Scope Attribute -FSharp.Compiler.EditorServices.Structure+Scope: Scope Comment -FSharp.Compiler.EditorServices.Structure+Scope: Scope CompExpr -FSharp.Compiler.EditorServices.Structure+Scope: Scope CompExprInternal -FSharp.Compiler.EditorServices.Structure+Scope: Scope Do -FSharp.Compiler.EditorServices.Structure+Scope: Scope ElseInIfThenElse -FSharp.Compiler.EditorServices.Structure+Scope: Scope EnumCase -FSharp.Compiler.EditorServices.Structure+Scope: Scope FinallyInTryFinally -FSharp.Compiler.EditorServices.Structure+Scope: Scope For -FSharp.Compiler.EditorServices.Structure+Scope: Scope HashDirective -FSharp.Compiler.EditorServices.Structure+Scope: Scope IfThenElse -FSharp.Compiler.EditorServices.Structure+Scope: Scope Interface -FSharp.Compiler.EditorServices.Structure+Scope: Scope Lambda -FSharp.Compiler.EditorServices.Structure+Scope: Scope LetOrUse -FSharp.Compiler.EditorServices.Structure+Scope: Scope LetOrUseBang -FSharp.Compiler.EditorServices.Structure+Scope: Scope Match -FSharp.Compiler.EditorServices.Structure+Scope: Scope MatchBang -FSharp.Compiler.EditorServices.Structure+Scope: Scope MatchClause -FSharp.Compiler.EditorServices.Structure+Scope: Scope MatchLambda -FSharp.Compiler.EditorServices.Structure+Scope: Scope Member -FSharp.Compiler.EditorServices.Structure+Scope: Scope Module -FSharp.Compiler.EditorServices.Structure+Scope: Scope Namespace -FSharp.Compiler.EditorServices.Structure+Scope: Scope New -FSharp.Compiler.EditorServices.Structure+Scope: Scope ObjExpr -FSharp.Compiler.EditorServices.Structure+Scope: Scope Open -FSharp.Compiler.EditorServices.Structure+Scope: Scope Quote -FSharp.Compiler.EditorServices.Structure+Scope: Scope Record -FSharp.Compiler.EditorServices.Structure+Scope: Scope RecordDefn -FSharp.Compiler.EditorServices.Structure+Scope: Scope RecordField -FSharp.Compiler.EditorServices.Structure+Scope: Scope SpecialFunc -FSharp.Compiler.EditorServices.Structure+Scope: Scope ThenInIfThenElse -FSharp.Compiler.EditorServices.Structure+Scope: Scope TryFinally -FSharp.Compiler.EditorServices.Structure+Scope: Scope TryInTryFinally -FSharp.Compiler.EditorServices.Structure+Scope: Scope TryInTryWith -FSharp.Compiler.EditorServices.Structure+Scope: Scope TryWith -FSharp.Compiler.EditorServices.Structure+Scope: Scope Tuple -FSharp.Compiler.EditorServices.Structure+Scope: Scope Type -FSharp.Compiler.EditorServices.Structure+Scope: Scope TypeExtension -FSharp.Compiler.EditorServices.Structure+Scope: Scope UnionCase -FSharp.Compiler.EditorServices.Structure+Scope: Scope UnionDefn -FSharp.Compiler.EditorServices.Structure+Scope: Scope Val -FSharp.Compiler.EditorServices.Structure+Scope: Scope While -FSharp.Compiler.EditorServices.Structure+Scope: Scope WithInTryWith -FSharp.Compiler.EditorServices.Structure+Scope: Scope XmlDocComment -FSharp.Compiler.EditorServices.Structure+Scope: Scope YieldOrReturn -FSharp.Compiler.EditorServices.Structure+Scope: Scope YieldOrReturnBang -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_ArrayOrList() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Attribute() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Comment() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_CompExpr() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_CompExprInternal() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Do() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_ElseInIfThenElse() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_EnumCase() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_FinallyInTryFinally() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_For() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_HashDirective() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_IfThenElse() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Interface() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Lambda() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_LetOrUse() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_LetOrUseBang() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Match() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_MatchBang() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_MatchClause() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_MatchLambda() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Member() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Module() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Namespace() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_New() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_ObjExpr() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Open() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Quote() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Record() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_RecordDefn() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_RecordField() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_SpecialFunc() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_ThenInIfThenElse() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_TryFinally() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_TryInTryFinally() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_TryInTryWith() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_TryWith() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Tuple() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Type() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_TypeExtension() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_UnionCase() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_UnionDefn() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Val() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_While() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_WithInTryWith() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_XmlDocComment() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_YieldOrReturn() -FSharp.Compiler.EditorServices.Structure+Scope: Scope get_YieldOrReturnBang() -FSharp.Compiler.EditorServices.Structure+Scope: System.String ToString() -FSharp.Compiler.EditorServices.Structure+ScopeRange: Boolean Equals(ScopeRange) -FSharp.Compiler.EditorServices.Structure+ScopeRange: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.Structure+ScopeRange: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.Structure+ScopeRange: Collapse Collapse -FSharp.Compiler.EditorServices.Structure+ScopeRange: Collapse get_Collapse() -FSharp.Compiler.EditorServices.Structure+ScopeRange: FSharp.Compiler.Text.Range CollapseRange -FSharp.Compiler.EditorServices.Structure+ScopeRange: FSharp.Compiler.Text.Range Range -FSharp.Compiler.EditorServices.Structure+ScopeRange: FSharp.Compiler.Text.Range get_CollapseRange() -FSharp.Compiler.EditorServices.Structure+ScopeRange: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.EditorServices.Structure+ScopeRange: Int32 GetHashCode() -FSharp.Compiler.EditorServices.Structure+ScopeRange: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.Structure+ScopeRange: Scope Scope -FSharp.Compiler.EditorServices.Structure+ScopeRange: Scope get_Scope() -FSharp.Compiler.EditorServices.Structure+ScopeRange: System.String ToString() -FSharp.Compiler.EditorServices.Structure+ScopeRange: Void .ctor(Scope, Collapse, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) -FSharp.Compiler.EditorServices.Structure: FSharp.Compiler.EditorServices.Structure+Collapse -FSharp.Compiler.EditorServices.Structure: FSharp.Compiler.EditorServices.Structure+Scope -FSharp.Compiler.EditorServices.Structure: FSharp.Compiler.EditorServices.Structure+ScopeRange -FSharp.Compiler.EditorServices.Structure: System.Collections.Generic.IEnumerable`1[FSharp.Compiler.EditorServices.Structure+ScopeRange] getOutliningRanges(System.String[], FSharp.Compiler.Syntax.ParsedInput) -FSharp.Compiler.EditorServices.ToolTipElement -FSharp.Compiler.EditorServices.ToolTipElement+CompositionError: System.String errorText -FSharp.Compiler.EditorServices.ToolTipElement+CompositionError: System.String get_errorText() -FSharp.Compiler.EditorServices.ToolTipElement+Group: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.ToolTipElementData] elements -FSharp.Compiler.EditorServices.ToolTipElement+Group: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.ToolTipElementData] get_elements() -FSharp.Compiler.EditorServices.ToolTipElement+Tags: Int32 CompositionError -FSharp.Compiler.EditorServices.ToolTipElement+Tags: Int32 Group -FSharp.Compiler.EditorServices.ToolTipElement+Tags: Int32 None -FSharp.Compiler.EditorServices.ToolTipElement: Boolean Equals(FSharp.Compiler.EditorServices.ToolTipElement) -FSharp.Compiler.EditorServices.ToolTipElement: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.ToolTipElement: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.ToolTipElement: Boolean IsCompositionError -FSharp.Compiler.EditorServices.ToolTipElement: Boolean IsGroup -FSharp.Compiler.EditorServices.ToolTipElement: Boolean IsNone -FSharp.Compiler.EditorServices.ToolTipElement: Boolean get_IsCompositionError() -FSharp.Compiler.EditorServices.ToolTipElement: Boolean get_IsGroup() -FSharp.Compiler.EditorServices.ToolTipElement: Boolean get_IsNone() -FSharp.Compiler.EditorServices.ToolTipElement: FSharp.Compiler.EditorServices.ToolTipElement NewCompositionError(System.String) -FSharp.Compiler.EditorServices.ToolTipElement: FSharp.Compiler.EditorServices.ToolTipElement NewGroup(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.ToolTipElementData]) -FSharp.Compiler.EditorServices.ToolTipElement: FSharp.Compiler.EditorServices.ToolTipElement None -FSharp.Compiler.EditorServices.ToolTipElement: FSharp.Compiler.EditorServices.ToolTipElement Single(FSharp.Compiler.Text.TaggedText[], FSharp.Compiler.Symbols.FSharpXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.TaggedText[]]], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.TaggedText[]]) -FSharp.Compiler.EditorServices.ToolTipElement: FSharp.Compiler.EditorServices.ToolTipElement get_None() -FSharp.Compiler.EditorServices.ToolTipElement: FSharp.Compiler.EditorServices.ToolTipElement+CompositionError -FSharp.Compiler.EditorServices.ToolTipElement: FSharp.Compiler.EditorServices.ToolTipElement+Group -FSharp.Compiler.EditorServices.ToolTipElement: FSharp.Compiler.EditorServices.ToolTipElement+Tags -FSharp.Compiler.EditorServices.ToolTipElement: Int32 GetHashCode() -FSharp.Compiler.EditorServices.ToolTipElement: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.ToolTipElement: Int32 Tag -FSharp.Compiler.EditorServices.ToolTipElement: Int32 get_Tag() -FSharp.Compiler.EditorServices.ToolTipElement: System.String ToString() -FSharp.Compiler.EditorServices.ToolTipElementData -FSharp.Compiler.EditorServices.ToolTipElementData: Boolean Equals(FSharp.Compiler.EditorServices.ToolTipElementData) -FSharp.Compiler.EditorServices.ToolTipElementData: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.ToolTipElementData: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.ToolTipElementData: FSharp.Compiler.Symbols.FSharpXmlDoc XmlDoc -FSharp.Compiler.EditorServices.ToolTipElementData: FSharp.Compiler.Symbols.FSharpXmlDoc get_XmlDoc() -FSharp.Compiler.EditorServices.ToolTipElementData: FSharp.Compiler.Text.TaggedText[] MainDescription -FSharp.Compiler.EditorServices.ToolTipElementData: FSharp.Compiler.Text.TaggedText[] get_MainDescription() -FSharp.Compiler.EditorServices.ToolTipElementData: Int32 GetHashCode() -FSharp.Compiler.EditorServices.ToolTipElementData: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.ToolTipElementData: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.TaggedText[]] TypeMapping -FSharp.Compiler.EditorServices.ToolTipElementData: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.TaggedText[]] get_TypeMapping() -FSharp.Compiler.EditorServices.ToolTipElementData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.TaggedText[]] Remarks -FSharp.Compiler.EditorServices.ToolTipElementData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.TaggedText[]] get_Remarks() -FSharp.Compiler.EditorServices.ToolTipElementData: Microsoft.FSharp.Core.FSharpOption`1[System.String] ParamName -FSharp.Compiler.EditorServices.ToolTipElementData: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_ParamName() -FSharp.Compiler.EditorServices.ToolTipElementData: System.String ToString() -FSharp.Compiler.EditorServices.ToolTipElementData: Void .ctor(FSharp.Compiler.Text.TaggedText[], FSharp.Compiler.Symbols.FSharpXmlDoc, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.TaggedText[]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.TaggedText[]], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.EditorServices.ToolTipText -FSharp.Compiler.EditorServices.ToolTipText: Boolean Equals(FSharp.Compiler.EditorServices.ToolTipText) -FSharp.Compiler.EditorServices.ToolTipText: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.ToolTipText: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.ToolTipText: FSharp.Compiler.EditorServices.ToolTipText NewToolTipText(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.ToolTipElement]) -FSharp.Compiler.EditorServices.ToolTipText: Int32 GetHashCode() -FSharp.Compiler.EditorServices.ToolTipText: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.ToolTipText: Int32 Tag -FSharp.Compiler.EditorServices.ToolTipText: Int32 get_Tag() -FSharp.Compiler.EditorServices.ToolTipText: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.ToolTipElement] Item -FSharp.Compiler.EditorServices.ToolTipText: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.ToolTipElement] get_Item() -FSharp.Compiler.EditorServices.ToolTipText: System.String ToString() -FSharp.Compiler.EditorServices.UnresolvedSymbol -FSharp.Compiler.EditorServices.UnresolvedSymbol: Boolean Equals(FSharp.Compiler.EditorServices.UnresolvedSymbol) -FSharp.Compiler.EditorServices.UnresolvedSymbol: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.UnresolvedSymbol: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.UnresolvedSymbol: Int32 CompareTo(FSharp.Compiler.EditorServices.UnresolvedSymbol) -FSharp.Compiler.EditorServices.UnresolvedSymbol: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.UnresolvedSymbol: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.UnresolvedSymbol: Int32 GetHashCode() -FSharp.Compiler.EditorServices.UnresolvedSymbol: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.UnresolvedSymbol: System.String DisplayName -FSharp.Compiler.EditorServices.UnresolvedSymbol: System.String FullName -FSharp.Compiler.EditorServices.UnresolvedSymbol: System.String ToString() -FSharp.Compiler.EditorServices.UnresolvedSymbol: System.String get_DisplayName() -FSharp.Compiler.EditorServices.UnresolvedSymbol: System.String get_FullName() -FSharp.Compiler.EditorServices.UnresolvedSymbol: System.String[] Namespace -FSharp.Compiler.EditorServices.UnresolvedSymbol: System.String[] get_Namespace() -FSharp.Compiler.EditorServices.UnresolvedSymbol: Void .ctor(System.String, System.String, System.String[]) -FSharp.Compiler.EditorServices.UnusedDeclarations -FSharp.Compiler.EditorServices.UnusedDeclarations: Microsoft.FSharp.Control.FSharpAsync`1[System.Collections.Generic.IEnumerable`1[FSharp.Compiler.Text.Range]] getUnusedDeclarations(FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults, Boolean) -FSharp.Compiler.EditorServices.UnusedOpens -FSharp.Compiler.EditorServices.UnusedOpens: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range]] getUnusedOpens(FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String]) -FSharp.Compiler.EditorServices.XmlDocComment -FSharp.Compiler.EditorServices.XmlDocComment: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] IsBlank(System.String) -FSharp.Compiler.EditorServices.XmlDocParser -FSharp.Compiler.EditorServices.XmlDocParser: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.XmlDocable] GetXmlDocables(FSharp.Compiler.Text.ISourceText, FSharp.Compiler.Syntax.ParsedInput) -FSharp.Compiler.EditorServices.XmlDocable -FSharp.Compiler.EditorServices.XmlDocable: Boolean Equals(FSharp.Compiler.EditorServices.XmlDocable) -FSharp.Compiler.EditorServices.XmlDocable: Boolean Equals(System.Object) -FSharp.Compiler.EditorServices.XmlDocable: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.XmlDocable: FSharp.Compiler.EditorServices.XmlDocable NewXmlDocable(Int32, Int32, Microsoft.FSharp.Collections.FSharpList`1[System.String]) -FSharp.Compiler.EditorServices.XmlDocable: Int32 CompareTo(FSharp.Compiler.EditorServices.XmlDocable) -FSharp.Compiler.EditorServices.XmlDocable: Int32 CompareTo(System.Object) -FSharp.Compiler.EditorServices.XmlDocable: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.EditorServices.XmlDocable: Int32 GetHashCode() -FSharp.Compiler.EditorServices.XmlDocable: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.EditorServices.XmlDocable: Int32 Tag -FSharp.Compiler.EditorServices.XmlDocable: Int32 get_Tag() -FSharp.Compiler.EditorServices.XmlDocable: Int32 get_indent() -FSharp.Compiler.EditorServices.XmlDocable: Int32 get_line() -FSharp.Compiler.EditorServices.XmlDocable: Int32 indent -FSharp.Compiler.EditorServices.XmlDocable: Int32 line -FSharp.Compiler.EditorServices.XmlDocable: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_paramNames() -FSharp.Compiler.EditorServices.XmlDocable: Microsoft.FSharp.Collections.FSharpList`1[System.String] paramNames -FSharp.Compiler.EditorServices.XmlDocable: System.String ToString() -FSharp.Compiler.IO.ByteMemory -FSharp.Compiler.IO.ByteMemory: Byte Item [Int32] -FSharp.Compiler.IO.ByteMemory: Byte get_Item(Int32) -FSharp.Compiler.IO.ByteMemory: Byte[] ReadAllBytes() -FSharp.Compiler.IO.ByteMemory: Byte[] ReadBytes(Int32, Int32) -FSharp.Compiler.IO.ByteMemory: Byte[] ToArray() -FSharp.Compiler.IO.ByteMemory: FSharp.Compiler.IO.ByteMemory Empty -FSharp.Compiler.IO.ByteMemory: FSharp.Compiler.IO.ByteMemory FromArray(Byte[]) -FSharp.Compiler.IO.ByteMemory: FSharp.Compiler.IO.ByteMemory FromArray(Byte[], Int32, Int32) -FSharp.Compiler.IO.ByteMemory: FSharp.Compiler.IO.ByteMemory FromMemoryMappedFile(System.IO.MemoryMappedFiles.MemoryMappedFile) -FSharp.Compiler.IO.ByteMemory: FSharp.Compiler.IO.ByteMemory FromUnsafePointer(IntPtr, Int32, System.Object) -FSharp.Compiler.IO.ByteMemory: FSharp.Compiler.IO.ByteMemory Slice(Int32, Int32) -FSharp.Compiler.IO.ByteMemory: FSharp.Compiler.IO.ByteMemory get_Empty() -FSharp.Compiler.IO.ByteMemory: FSharp.Compiler.IO.ReadOnlyByteMemory AsReadOnly() -FSharp.Compiler.IO.ByteMemory: Int32 Length -FSharp.Compiler.IO.ByteMemory: Int32 ReadInt32(Int32) -FSharp.Compiler.IO.ByteMemory: Int32 get_Length() -FSharp.Compiler.IO.ByteMemory: System.IO.Stream AsReadOnlyStream() -FSharp.Compiler.IO.ByteMemory: System.IO.Stream AsStream() -FSharp.Compiler.IO.ByteMemory: System.String ReadUtf8String(Int32, Int32) -FSharp.Compiler.IO.ByteMemory: UInt16 ReadUInt16(Int32) -FSharp.Compiler.IO.ByteMemory: Void Copy(Int32, Byte[], Int32, Int32) -FSharp.Compiler.IO.ByteMemory: Void CopyTo(System.IO.Stream) -FSharp.Compiler.IO.ByteMemory: Void set_Item(Int32, Byte) -FSharp.Compiler.IO.DefaultAssemblyLoader -FSharp.Compiler.IO.DefaultAssemblyLoader: Void .ctor() -FSharp.Compiler.IO.DefaultFileSystem -FSharp.Compiler.IO.DefaultFileSystem: Boolean DirectoryExistsShim(System.String) -FSharp.Compiler.IO.DefaultFileSystem: Boolean FileExistsShim(System.String) -FSharp.Compiler.IO.DefaultFileSystem: Boolean IsInvalidPathShim(System.String) -FSharp.Compiler.IO.DefaultFileSystem: Boolean IsPathRootedShim(System.String) -FSharp.Compiler.IO.DefaultFileSystem: Boolean IsStableFileHeuristic(System.String) -FSharp.Compiler.IO.DefaultFileSystem: FSharp.Compiler.IO.IAssemblyLoader AssemblyLoader -FSharp.Compiler.IO.DefaultFileSystem: FSharp.Compiler.IO.IAssemblyLoader get_AssemblyLoader() -FSharp.Compiler.IO.DefaultFileSystem: System.Collections.Generic.IEnumerable`1[System.String] EnumerateDirectoriesShim(System.String) -FSharp.Compiler.IO.DefaultFileSystem: System.Collections.Generic.IEnumerable`1[System.String] EnumerateFilesShim(System.String, System.String) -FSharp.Compiler.IO.DefaultFileSystem: System.DateTime GetCreationTimeShim(System.String) -FSharp.Compiler.IO.DefaultFileSystem: System.DateTime GetLastWriteTimeShim(System.String) -FSharp.Compiler.IO.DefaultFileSystem: System.IO.DirectoryInfo DirectoryCreateShim(System.String) -FSharp.Compiler.IO.DefaultFileSystem: System.IO.Stream OpenFileForReadShim(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -FSharp.Compiler.IO.DefaultFileSystem: System.IO.Stream OpenFileForWriteShim(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.IO.FileMode], Microsoft.FSharp.Core.FSharpOption`1[System.IO.FileAccess], Microsoft.FSharp.Core.FSharpOption`1[System.IO.FileShare]) -FSharp.Compiler.IO.DefaultFileSystem: System.String GetDirectoryNameShim(System.String) -FSharp.Compiler.IO.DefaultFileSystem: System.String GetFullFilePathInDirectoryShim(System.String, System.String) -FSharp.Compiler.IO.DefaultFileSystem: System.String GetFullPathShim(System.String) -FSharp.Compiler.IO.DefaultFileSystem: System.String GetTempPathShim() -FSharp.Compiler.IO.DefaultFileSystem: System.String NormalizePathShim(System.String) -FSharp.Compiler.IO.DefaultFileSystem: Void .ctor() -FSharp.Compiler.IO.DefaultFileSystem: Void CopyShim(System.String, System.String, Boolean) -FSharp.Compiler.IO.DefaultFileSystem: Void DirectoryDeleteShim(System.String) -FSharp.Compiler.IO.DefaultFileSystem: Void FileDeleteShim(System.String) -FSharp.Compiler.IO.FileSystemAutoOpens -FSharp.Compiler.IO.FileSystemAutoOpens: FSharp.Compiler.IO.IFileSystem FileSystem -FSharp.Compiler.IO.FileSystemAutoOpens: FSharp.Compiler.IO.IFileSystem get_FileSystem() -FSharp.Compiler.IO.FileSystemAutoOpens: Void set_FileSystem(FSharp.Compiler.IO.IFileSystem) -FSharp.Compiler.IO.IAssemblyLoader -FSharp.Compiler.IO.IAssemblyLoader: System.Reflection.Assembly AssemblyLoad(System.Reflection.AssemblyName) -FSharp.Compiler.IO.IAssemblyLoader: System.Reflection.Assembly AssemblyLoadFrom(System.String) -FSharp.Compiler.IO.IFileSystem -FSharp.Compiler.IO.IFileSystem: Boolean DirectoryExistsShim(System.String) -FSharp.Compiler.IO.IFileSystem: Boolean FileExistsShim(System.String) -FSharp.Compiler.IO.IFileSystem: Boolean IsInvalidPathShim(System.String) -FSharp.Compiler.IO.IFileSystem: Boolean IsPathRootedShim(System.String) -FSharp.Compiler.IO.IFileSystem: Boolean IsStableFileHeuristic(System.String) -FSharp.Compiler.IO.IFileSystem: FSharp.Compiler.IO.IAssemblyLoader AssemblyLoader -FSharp.Compiler.IO.IFileSystem: FSharp.Compiler.IO.IAssemblyLoader get_AssemblyLoader() -FSharp.Compiler.IO.IFileSystem: System.Collections.Generic.IEnumerable`1[System.String] EnumerateDirectoriesShim(System.String) -FSharp.Compiler.IO.IFileSystem: System.Collections.Generic.IEnumerable`1[System.String] EnumerateFilesShim(System.String, System.String) -FSharp.Compiler.IO.IFileSystem: System.DateTime GetCreationTimeShim(System.String) -FSharp.Compiler.IO.IFileSystem: System.DateTime GetLastWriteTimeShim(System.String) -FSharp.Compiler.IO.IFileSystem: System.IO.DirectoryInfo DirectoryCreateShim(System.String) -FSharp.Compiler.IO.IFileSystem: System.IO.Stream OpenFileForReadShim(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -FSharp.Compiler.IO.IFileSystem: System.IO.Stream OpenFileForWriteShim(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.IO.FileMode], Microsoft.FSharp.Core.FSharpOption`1[System.IO.FileAccess], Microsoft.FSharp.Core.FSharpOption`1[System.IO.FileShare]) -FSharp.Compiler.IO.IFileSystem: System.String GetDirectoryNameShim(System.String) -FSharp.Compiler.IO.IFileSystem: System.String GetFullFilePathInDirectoryShim(System.String, System.String) -FSharp.Compiler.IO.IFileSystem: System.String GetFullPathShim(System.String) -FSharp.Compiler.IO.IFileSystem: System.String GetTempPathShim() -FSharp.Compiler.IO.IFileSystem: System.String NormalizePathShim(System.String) -FSharp.Compiler.IO.IFileSystem: Void CopyShim(System.String, System.String, Boolean) -FSharp.Compiler.IO.IFileSystem: Void DirectoryDeleteShim(System.String) -FSharp.Compiler.IO.IFileSystem: Void FileDeleteShim(System.String) -FSharp.Compiler.IO.IllegalFileNameChar -FSharp.Compiler.IO.IllegalFileNameChar: Boolean Equals(System.Object) -FSharp.Compiler.IO.IllegalFileNameChar: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.IO.IllegalFileNameChar: Char Data1 -FSharp.Compiler.IO.IllegalFileNameChar: Char get_Data1() -FSharp.Compiler.IO.IllegalFileNameChar: Int32 GetHashCode() -FSharp.Compiler.IO.IllegalFileNameChar: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.IO.IllegalFileNameChar: System.String Data0 -FSharp.Compiler.IO.IllegalFileNameChar: System.String get_Data0() -FSharp.Compiler.IO.IllegalFileNameChar: Void .ctor() -FSharp.Compiler.IO.IllegalFileNameChar: Void .ctor(System.String, Char) -FSharp.Compiler.IO.StreamExtensions -FSharp.Compiler.IO.StreamExtensions: Byte[] Stream.ReadAllBytes(System.IO.Stream) -FSharp.Compiler.IO.StreamExtensions: Byte[] Stream.ReadBytes(System.IO.Stream, Int32, Int32) -FSharp.Compiler.IO.StreamExtensions: FSharp.Compiler.IO.ByteMemory Stream.AsByteMemory(System.IO.Stream) -FSharp.Compiler.IO.StreamExtensions: System.Collections.Generic.IEnumerable`1[System.String] Stream.ReadLines(System.IO.Stream, Microsoft.FSharp.Core.FSharpOption`1[System.Text.Encoding]) -FSharp.Compiler.IO.StreamExtensions: System.IO.StreamReader Stream.GetReader(System.IO.Stream, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -FSharp.Compiler.IO.StreamExtensions: System.IO.TextWriter Stream.GetWriter(System.IO.Stream, Microsoft.FSharp.Core.FSharpOption`1[System.Text.Encoding]) -FSharp.Compiler.IO.StreamExtensions: System.String Stream.ReadAllText(System.IO.Stream, Microsoft.FSharp.Core.FSharpOption`1[System.Text.Encoding]) -FSharp.Compiler.IO.StreamExtensions: System.String[] Stream.ReadAllLines(System.IO.Stream, Microsoft.FSharp.Core.FSharpOption`1[System.Text.Encoding]) -FSharp.Compiler.IO.StreamExtensions: Void Stream.WriteAllLines(System.IO.Stream, System.Collections.Generic.IEnumerable`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Text.Encoding]) -FSharp.Compiler.IO.StreamExtensions: Void Stream.Write[a](System.IO.Stream, a) -FSharp.Compiler.Interactive.Shell +FSharp.Compiler.AbstractIL.ILBinaryReader: FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics +FSharp.Compiler.AbstractIL.ILBinaryReader: Statistics GetStatistics() +FSharp.Compiler.AbstractIL.Internal.Library+AnyCallerThreadToken: Void .ctor() +FSharp.Compiler.AbstractIL.Internal.Library+Array: Boolean areEqual[T](T[], T[]) +FSharp.Compiler.AbstractIL.Internal.Library+Array: Boolean endsWith[a](a[], a[]) +FSharp.Compiler.AbstractIL.Internal.Library+Array: Boolean existsOne[a](Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean], a[]) +FSharp.Compiler.AbstractIL.Internal.Library+Array: Boolean existsTrue(Boolean[]) +FSharp.Compiler.AbstractIL.Internal.Library+Array: Boolean isSubArray[T](T[], T[], Int32) +FSharp.Compiler.AbstractIL.Internal.Library+Array: Boolean lengthsEqAndForall2[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,System.Boolean]], a[], b[]) +FSharp.Compiler.AbstractIL.Internal.Library+Array: Boolean startsWith[a](a[], a[]) +FSharp.Compiler.AbstractIL.Internal.Library+Array: Int32 findFirstIndexWhereTrue[a](a[], Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean]) +FSharp.Compiler.AbstractIL.Internal.Library+Array: Microsoft.FSharp.Control.FSharpAsync`1[U[]] mapAsync[T,U](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[U]], T[]) +FSharp.Compiler.AbstractIL.Internal.Library+Array: System.Collections.Generic.IComparer`1[T[]] order[T](System.Collections.Generic.IComparer`1[T]) +FSharp.Compiler.AbstractIL.Internal.Library+Array: T[][] heads[T](T[]) +FSharp.Compiler.AbstractIL.Internal.Library+Array: Void revInPlace[T](T[]) +FSharp.Compiler.AbstractIL.Internal.Library+Array: a[] mapq[a](Microsoft.FSharp.Core.FSharpFunc`2[a,a], a[]) +FSharp.Compiler.AbstractIL.Internal.Library+Array: a[] replace[a](Int32, a, a[]) +FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: Cancellable`1 Bind[k,l](Cancellable`1, Microsoft.FSharp.Core.FSharpFunc`2[k,FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[l]]) +FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: Cancellable`1 Combine[h](Cancellable`1, Cancellable`1) +FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: Cancellable`1 Delay[a](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[a]]) +FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: Cancellable`1 For[f,g](System.Collections.Generic.IEnumerable`1[f], Microsoft.FSharp.Core.FSharpFunc`2[f,FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[g]]) +FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: Cancellable`1 Return[j](j) +FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: Cancellable`1 TryFinally[b](Cancellable`1, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: Cancellable`1 TryWith[e](Cancellable`1, Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[e]]) +FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: Cancellable`1 Using[c,d](c, Microsoft.FSharp.Core.FSharpFunc`2[c,FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[d]]) +FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: Cancellable`1 Zero() +FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: Void .ctor() +FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: i ReturnFrom[i](i) +FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: Cancellable`1 bind[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[b]], Cancellable`1) +FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: Cancellable`1 canceled[a]() +FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: Cancellable`1 delay[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[T]]) +FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: Cancellable`1 each[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[b]], System.Collections.Generic.IEnumerable`1[a]) +FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: Cancellable`1 fold[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[a]]], a, System.Collections.Generic.IEnumerable`1[b]) +FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: Cancellable`1 map[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,b], Cancellable`1) +FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: Cancellable`1 ret[a](a) +FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: Cancellable`1 token() +FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: Cancellable`1 tryFinally[a](Cancellable`1, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: Cancellable`1 tryWith[a](Cancellable`1, Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[a]]) +FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: ValueOrCancelled`1 run[a](System.Threading.CancellationToken, Cancellable`1) +FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: a runWithoutCancellation[a](Cancellable`1) +FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[TResult]: Cancellable`1 NewCancellable(Microsoft.FSharp.Core.FSharpFunc`2[System.Threading.CancellationToken,FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]]) +FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[TResult]: Int32 Tag +FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[TResult]: Int32 get_Tag() +FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[TResult]: Microsoft.FSharp.Core.FSharpFunc`2[System.Threading.CancellationToken,FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]] Item +FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[TResult]: Microsoft.FSharp.Core.FSharpFunc`2[System.Threading.CancellationToken,FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]] get_Item() +FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[TResult]: System.String ToString() +FSharp.Compiler.AbstractIL.Internal.Library+CompilationThreadToken: Void .ctor() +FSharp.Compiler.AbstractIL.Internal.Library+Dictionary: System.Collections.Generic.Dictionary`2[a,b] newWithSize[a,b](Int32) +FSharp.Compiler.AbstractIL.Internal.Library+DictionaryExtensions: Boolean BagExistsValueForKey[key,value](System.Collections.Generic.Dictionary`2[key,Microsoft.FSharp.Collections.FSharpList`1[value]], key, Microsoft.FSharp.Core.FSharpFunc`2[value,System.Boolean]) +FSharp.Compiler.AbstractIL.Internal.Library+DictionaryExtensions: Void BagAdd[key,value](System.Collections.Generic.Dictionary`2[key,Microsoft.FSharp.Collections.FSharpList`1[value]], key, value) +FSharp.Compiler.AbstractIL.Internal.Library+EventuallyBuilder: Eventually`1 Bind[g,h](Eventually`1, Microsoft.FSharp.Core.FSharpFunc`2[g,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[h]]) +FSharp.Compiler.AbstractIL.Internal.Library+EventuallyBuilder: Eventually`1 Combine[d](Eventually`1, Eventually`1) +FSharp.Compiler.AbstractIL.Internal.Library+EventuallyBuilder: Eventually`1 Delay[a](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[a]]) +FSharp.Compiler.AbstractIL.Internal.Library+EventuallyBuilder: Eventually`1 Return[f](f) +FSharp.Compiler.AbstractIL.Internal.Library+EventuallyBuilder: Eventually`1 TryFinally[b](Eventually`1, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +FSharp.Compiler.AbstractIL.Internal.Library+EventuallyBuilder: Eventually`1 TryWith[c](Eventually`1, Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[c]]) +FSharp.Compiler.AbstractIL.Internal.Library+EventuallyBuilder: Eventually`1 Zero() +FSharp.Compiler.AbstractIL.Internal.Library+EventuallyBuilder: e ReturnFrom[e](e) +FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Eventually`1 bind[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[b]], Eventually`1) +FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Eventually`1 box[a](Eventually`1) +FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Eventually`1 catch[a](Eventually`1) +FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Eventually`1 delay[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]]) +FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Eventually`1 fold[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[a]]], a, System.Collections.Generic.IEnumerable`1[b]) +FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Eventually`1 get_token() +FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Eventually`1 repeatedlyProgressUntilDoneOrTimeShareOverOrCanceled[?,b](Int64, System.Threading.CancellationToken, Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.AbstractIL.Internal.Library+CompilationThreadToken,Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[?,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[b]],FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[b]]], Eventually`1) +FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Eventually`1 token +FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Eventually`1 tryFinally[a](Eventually`1, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Eventually`1 tryWith[a](Eventually`1, Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[a]]) +FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] forceAsync[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.AbstractIL.Internal.Library+CompilationThreadToken,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]],Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]]], Eventually`1) +FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Microsoft.FSharp.Core.FSharpOption`1[a] forceWhile[a](CompilationThreadToken, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], Eventually`1) +FSharp.Compiler.AbstractIL.Internal.Library+Eventually: a force[a](CompilationThreadToken, Eventually`1) +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Done[T]: Boolean IsDone +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Done[T]: Boolean IsNotYetDone +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Done[T]: Boolean get_IsDone() +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Done[T]: Boolean get_IsNotYetDone() +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Done[T]: Int32 Tag +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Done[T]: Int32 get_Tag() +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Done[T]: System.String ToString() +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Done[T]: T Item +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Done[T]: T get_Item() +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+NotYetDone[T]: Boolean IsDone +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+NotYetDone[T]: Boolean IsNotYetDone +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+NotYetDone[T]: Boolean get_IsDone() +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+NotYetDone[T]: Boolean get_IsNotYetDone() +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+NotYetDone[T]: Int32 Tag +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+NotYetDone[T]: Int32 get_Tag() +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+NotYetDone[T]: Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.AbstractIL.Internal.Library+CompilationThreadToken,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]] Item +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+NotYetDone[T]: Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.AbstractIL.Internal.Library+CompilationThreadToken,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]] get_Item() +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+NotYetDone[T]: System.String ToString() +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Tags[T]: Int32 Done +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Tags[T]: Int32 NotYetDone +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: Boolean IsDone +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: Boolean IsNotYetDone +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: Boolean get_IsDone() +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: Boolean get_IsNotYetDone() +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: Eventually`1 NewDone(T) +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: Eventually`1 NewNotYetDone(Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.AbstractIL.Internal.Library+CompilationThreadToken,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]]) +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Done[T] +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+NotYetDone[T] +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Tags[T] +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: Int32 Tag +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: Int32 get_Tag() +FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: System.String ToString() +FSharp.Compiler.AbstractIL.Internal.Library+IPartialEqualityComparer: IPartialEqualityComparer`1 On[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,b], IPartialEqualityComparer`1) +FSharp.Compiler.AbstractIL.Internal.Library+IPartialEqualityComparer: Microsoft.FSharp.Collections.FSharpList`1[T] partialDistinctBy[T](IPartialEqualityComparer`1, Microsoft.FSharp.Collections.FSharpList`1[T]) +FSharp.Compiler.AbstractIL.Internal.Library+IPartialEqualityComparer`1[T]: Boolean InEqualityRelation(T) +FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T]: Boolean Equals(InlineDelayInit`1) +FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T]: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T]: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T]: System.Func`1[T] func +FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T]: T Value +FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T]: T get_Value() +FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T]: T store +FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T]: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) +FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: LayeredMultiMap`2 Add(Key, Value) +FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: LayeredMultiMap`2 AddAndMarkAsCollapsible(System.Collections.Generic.KeyValuePair`2[Key,Value][]) +FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: LayeredMultiMap`2 Empty +FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: LayeredMultiMap`2 MarkAsCollapsible() +FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: LayeredMultiMap`2 get_Empty() +FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: Microsoft.FSharp.Collections.FSharpList`1[Value] Item [Key] +FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: Microsoft.FSharp.Collections.FSharpList`1[Value] Values +FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: Microsoft.FSharp.Collections.FSharpList`1[Value] get_Item(Key) +FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: Microsoft.FSharp.Collections.FSharpList`1[Value] get_Values() +FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Value]] TryFind(Key) +FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: System.Tuple`2[System.Boolean,Microsoft.FSharp.Collections.FSharpList`1[Value]] TryGetValue(Key) +FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: Void .ctor(Microsoft.FSharp.Collections.FSharpMap`2[Key,Microsoft.FSharp.Collections.FSharpList`1[Value]]) +FSharp.Compiler.AbstractIL.Internal.Library+Lazy: T force[T](System.Lazy`1[T]) +FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContextFailure: LazyWithContextFailure Undefined +FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContextFailure: LazyWithContextFailure get_Undefined() +FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContextFailure: System.Exception Exception +FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContextFailure: System.Exception get_Exception() +FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContextFailure: Void .ctor(System.Exception) +FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContext`2[T,ctxt]: Boolean IsDelayed +FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContext`2[T,ctxt]: Boolean IsForced +FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContext`2[T,ctxt]: Boolean get_IsDelayed() +FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContext`2[T,ctxt]: Boolean get_IsForced() +FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContext`2[T,ctxt]: LazyWithContext`2 Create(Microsoft.FSharp.Core.FSharpFunc`2[ctxt,T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,System.Exception]) +FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContext`2[T,ctxt]: LazyWithContext`2 NotLazy(T) +FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContext`2[T,ctxt]: System.String ToString() +FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContext`2[T,ctxt]: T Force(ctxt) +FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContext`2[T,ctxt]: T UnsynchronizedForce(ctxt) +FSharp.Compiler.AbstractIL.Internal.Library+List: Boolean checkq[a](Microsoft.FSharp.Collections.FSharpList`1[a], Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.AbstractIL.Internal.Library+List: Boolean existsSquared[a](Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[a]]) +FSharp.Compiler.AbstractIL.Internal.Library+List: Boolean existsi[a](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.AbstractIL.Internal.Library+List: Boolean forallSquared[a](Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[a]]) +FSharp.Compiler.AbstractIL.Internal.Library+List: Boolean lengthsEqAndForall2[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[a], Microsoft.FSharp.Collections.FSharpList`1[b]) +FSharp.Compiler.AbstractIL.Internal.Library+List: Boolean memAssoc[a,b](a, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[a,b]]) +FSharp.Compiler.AbstractIL.Internal.Library+List: Boolean memq[a](a, Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.AbstractIL.Internal.Library+List: Int32 count[a](Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[b]] mapSquared[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,b], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[a]]) +FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[b]] mapiSquared[a,b](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[a,b]]], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[a]]) +FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`4[a,b,c,d]] zip4[a,b,c,d](Microsoft.FSharp.Collections.FSharpList`1[a], Microsoft.FSharp.Collections.FSharpList`1[b], Microsoft.FSharp.Collections.FSharpList`1[c], Microsoft.FSharp.Collections.FSharpList`1[d]) +FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Collections.FSharpList`1[T] mapq[T](Microsoft.FSharp.Core.FSharpFunc`2[T,T], Microsoft.FSharp.Collections.FSharpList`1[T]) +FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Collections.FSharpList`1[T] sortWithOrder[T](System.Collections.Generic.IComparer`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) +FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Collections.FSharpList`1[a] mapNth[a](Int32, Microsoft.FSharp.Core.FSharpFunc`2[a,a], Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Collections.FSharpList`1[b] collectSquared[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Collections.FSharpList`1[b]], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[a]]) +FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Collections.FSharpList`1[b] mapHeadTail[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,b], Microsoft.FSharp.Core.FSharpFunc`2[a,b], Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Collections.FSharpList`1[c] collect2[a,b,c](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,Microsoft.FSharp.Collections.FSharpList`1[c]]], Microsoft.FSharp.Collections.FSharpList`1[a], Microsoft.FSharp.Collections.FSharpList`1[b]) +FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[a,Microsoft.FSharp.Collections.FSharpList`1[a]]] tryRemove[a](Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[a,System.Int32]] findi[a](Int32, Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.AbstractIL.Internal.Library+List: System.Collections.Generic.IComparer`1[Microsoft.FSharp.Collections.FSharpList`1[T]] order[T](System.Collections.Generic.IComparer`1[T]) +FSharp.Compiler.AbstractIL.Internal.Library+List: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[c]],a] mapFoldSquared[a,b,c](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,System.Tuple`2[c,a]]], a, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[b]]) +FSharp.Compiler.AbstractIL.Internal.Library+List: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[c]],a] mapiFoldSquared[a,b,c](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[System.Int32,System.Int32,b],System.Tuple`2[c,a]]], a, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[b]]) +FSharp.Compiler.AbstractIL.Internal.Library+List: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[a],Microsoft.FSharp.Collections.FSharpList`1[a]] splitAfter[a](Int32, Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.AbstractIL.Internal.Library+List: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[a],Microsoft.FSharp.Collections.FSharpList`1[a]] takeUntil[a](Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.AbstractIL.Internal.Library+List: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[a],a] frontAndBack[a](Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.AbstractIL.Internal.Library+List: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[b],Microsoft.FSharp.Collections.FSharpList`1[c]] splitChoose[a,b,c](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpChoice`2[b,c]], Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.AbstractIL.Internal.Library+List: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[c],a] collectFold[a,b,c](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[c],a]]], a, Microsoft.FSharp.Collections.FSharpList`1[b]) +FSharp.Compiler.AbstractIL.Internal.Library+List: System.Tuple`2[a,Microsoft.FSharp.Collections.FSharpList`1[a]] headAndTail[a](Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.AbstractIL.Internal.Library+List: System.Tuple`4[Microsoft.FSharp.Collections.FSharpList`1[a],Microsoft.FSharp.Collections.FSharpList`1[b],Microsoft.FSharp.Collections.FSharpList`1[c],Microsoft.FSharp.Collections.FSharpList`1[d]] unzip4[a,b,c,d](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`4[a,b,c,d]]) +FSharp.Compiler.AbstractIL.Internal.Library+List: Void iter3[a,b,c](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,Microsoft.FSharp.Core.FSharpFunc`2[c,Microsoft.FSharp.Core.Unit]]], Microsoft.FSharp.Collections.FSharpList`1[a], Microsoft.FSharp.Collections.FSharpList`1[b], Microsoft.FSharp.Collections.FSharpList`1[c]) +FSharp.Compiler.AbstractIL.Internal.Library+List: Void iterSquared[a](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[a]]) +FSharp.Compiler.AbstractIL.Internal.Library+List: a indexNotFound[a]() +FSharp.Compiler.AbstractIL.Internal.Library+List: a[][] toArraySquared[a](Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[a]]) +FSharp.Compiler.AbstractIL.Internal.Library+List: b assoc[a,b](a, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[a,b]]) +FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Collections.FSharpList`1[T] duplicates[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +FSharp.Compiler.AbstractIL.Internal.Library+Lock`1[LockTokenType]: Void .ctor() +FSharp.Compiler.AbstractIL.Internal.Library+Lock`1[LockTokenType]: a AcquireLock[a](Microsoft.FSharp.Core.FSharpFunc`2[LockTokenType,a]) +FSharp.Compiler.AbstractIL.Internal.Library+Map: Microsoft.FSharp.Collections.FSharpList`1[b] tryFindMulti[a,b](a, Microsoft.FSharp.Collections.FSharpMap`2[a,Microsoft.FSharp.Collections.FSharpList`1[b]]) +FSharp.Compiler.AbstractIL.Internal.Library+MemoizationTable`2[T,U]: U Apply(T) +FSharp.Compiler.AbstractIL.Internal.Library+MemoizationTable`2[T,U]: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[T,U], System.Collections.Generic.IEqualityComparer`1[T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]]) +FSharp.Compiler.AbstractIL.Internal.Library+MultiMap: Boolean existsInRange[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean], Microsoft.FSharp.Collections.FSharpMap`2[b,Microsoft.FSharp.Collections.FSharpList`1[a]]) +FSharp.Compiler.AbstractIL.Internal.Library+MultiMap: Microsoft.FSharp.Collections.FSharpList`1[b] find[a,b](a, Microsoft.FSharp.Collections.FSharpMap`2[a,Microsoft.FSharp.Collections.FSharpList`1[b]]) +FSharp.Compiler.AbstractIL.Internal.Library+MultiMap: Microsoft.FSharp.Collections.FSharpList`1[b] range[a,b](Microsoft.FSharp.Collections.FSharpMap`2[a,Microsoft.FSharp.Collections.FSharpList`1[b]]) +FSharp.Compiler.AbstractIL.Internal.Library+MultiMap: Microsoft.FSharp.Collections.FSharpMap`2[a,Microsoft.FSharp.Collections.FSharpList`1[b]] add[a,b](a, b, Microsoft.FSharp.Collections.FSharpMap`2[a,Microsoft.FSharp.Collections.FSharpList`1[b]]) +FSharp.Compiler.AbstractIL.Internal.Library+MultiMap: Microsoft.FSharp.Collections.FSharpMap`2[a,Microsoft.FSharp.Collections.FSharpList`1[b]] empty[a,b]() +FSharp.Compiler.AbstractIL.Internal.Library+MultiMap: Microsoft.FSharp.Collections.FSharpMap`2[b,Microsoft.FSharp.Collections.FSharpList`1[a]] initBy[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,b], System.Collections.Generic.IEnumerable`1[a]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Boolean existsInRange[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean], Microsoft.FSharp.Collections.FSharpMap`2[b,a]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Boolean exists[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[a,b]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Boolean forall[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[a,b]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Boolean isEmpty[T](Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Boolean mem[T](System.String, Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Boolean suball2[a,b,c](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,System.Boolean]], Microsoft.FSharp.Core.FSharpFunc`2[c,Microsoft.FSharp.Core.FSharpFunc`2[b,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[a,c], Microsoft.FSharp.Collections.FSharpMap`2[a,b]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,T]] toList[T](Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpList`1[b] range[a,b](Microsoft.FSharp.Collections.FSharpMap`2[a,b]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,T] add[T](System.String, T, Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,T] filterRange[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,T] layer[T](Microsoft.FSharp.Collections.FSharpMap`2[System.String,T], Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,T] ofList[T](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,T]]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,T] ofSeq[T](System.Collections.Generic.IEnumerable`1[System.Tuple`2[System.String,T]]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,a] mapFilter[T,a](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[a]], Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,a] map[T,a](Microsoft.FSharp.Core.FSharpFunc`2[T,a], Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,b] union[a,b](Microsoft.FSharp.Core.FSharpFunc`2[System.Collections.Generic.IEnumerable`1[a],b], System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpMap`2[System.String,a]]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[a,b] empty[a,b]() +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[b,a] ofKeyedList[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,b], Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[c,Microsoft.FSharp.Collections.FSharpList`1[a]] layerAdditive[a,b,c](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Collections.FSharpList`1[a],Microsoft.FSharp.Core.FSharpFunc`2[b,Microsoft.FSharp.Collections.FSharpList`1[a]]], Microsoft.FSharp.Collections.FSharpMap`2[c,b], Microsoft.FSharp.Collections.FSharpMap`2[c,Microsoft.FSharp.Collections.FSharpList`1[a]]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Core.FSharpOption`1[T] tryFind[T](System.String, Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Core.FSharpOption`1[a] tryFindInRange[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean], Microsoft.FSharp.Collections.FSharpMap`2[b,a]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: System.Tuple`2[Microsoft.FSharp.Collections.FSharpMap`2[System.String,T],Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]] partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: System.Tuple`2[Microsoft.FSharp.Collections.FSharpMap`2[System.String,b],a] mapFold[a,T,b](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[b,a]]]], a, Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: T find[T](System.String, Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Void iter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: a foldBackRange[T,a](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[a,a]], Microsoft.FSharp.Collections.FSharpMap`2[System.String,T], a) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: a foldBack[T,a](Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[a,a]]], Microsoft.FSharp.Collections.FSharpMap`2[System.String,T], a) +FSharp.Compiler.AbstractIL.Internal.Library+NameMap: c subfold2[a,b,c,d](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,c]], Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[d,Microsoft.FSharp.Core.FSharpFunc`2[b,Microsoft.FSharp.Core.FSharpFunc`2[c,c]]]], Microsoft.FSharp.Collections.FSharpMap`2[a,d], Microsoft.FSharp.Collections.FSharpMap`2[a,b], c) +FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap: Boolean existsInRange[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap: Microsoft.FSharp.Collections.FSharpList`1[T] find[T](System.String, Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap: Microsoft.FSharp.Collections.FSharpList`1[T] rangeReversingEachBucket[T](Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap: Microsoft.FSharp.Collections.FSharpList`1[T] range[T](Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap: Microsoft.FSharp.Collections.FSharpList`1[a] chooseRange[T,a](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[a]], Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]] add[T](System.String, T, Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]] empty[T]() +FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]] initBy[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.String], System.Collections.Generic.IEnumerable`1[T]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]] ofList[T](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,T]]) +FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[a]] map[T,a](Microsoft.FSharp.Core.FSharpFunc`2[T,a], Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]]) +FSharp.Compiler.AbstractIL.Internal.Library+Option: Microsoft.FSharp.Core.FSharpOption`1[T] attempt[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) +FSharp.Compiler.AbstractIL.Internal.Library+Option: System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[c],a] mapFold[a,b,c](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,System.Tuple`2[c,a]]], a, Microsoft.FSharp.Core.FSharpOption`1[b]) +FSharp.Compiler.AbstractIL.Internal.Library+Order: Int32 toFunction[U](System.Collections.Generic.IComparer`1[U], U, U) +FSharp.Compiler.AbstractIL.Internal.Library+Order: System.Collections.Generic.IComparer`1[T] orderBy[T,U](Microsoft.FSharp.Core.FSharpFunc`2[T,U]) +FSharp.Compiler.AbstractIL.Internal.Library+Order: System.Collections.Generic.IComparer`1[T] orderOn[T,U](Microsoft.FSharp.Core.FSharpFunc`2[T,U], System.Collections.Generic.IComparer`1[U]) +FSharp.Compiler.AbstractIL.Internal.Library+ResizeArray: a[][] chunkBySize[t,a](Int32, Microsoft.FSharp.Core.FSharpFunc`2[t,a], System.Collections.Generic.List`1[t]) +FSharp.Compiler.AbstractIL.Internal.Library+ResizeArray: a[][] mapToSmallArrayChunks[t,a](Microsoft.FSharp.Core.FSharpFunc`2[t,a], System.Collections.Generic.List`1[t]) +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException: ResultOrException`1 op_BarQmarkGreater[a,b](ResultOrException`1, Microsoft.FSharp.Core.FSharpFunc`2[a,b]) +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException: ResultOrException`1 otherwise[a](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[a]], ResultOrException`1) +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException: ResultOrException`1 raze[a](System.Exception) +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException: ResultOrException`1 success[a](a) +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException: a ForceRaise[a](ResultOrException`1) +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Boolean Equals(ResultOrException`1) +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Boolean IsException +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Boolean IsResult +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Boolean get_IsException() +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Boolean get_IsResult() +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Int32 Tag +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Int32 get_Tag() +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: System.Exception Item +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: System.Exception get_Item() +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: System.String ToString() +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Boolean Equals(ResultOrException`1) +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Boolean IsException +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Boolean IsResult +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Boolean get_IsException() +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Boolean get_IsResult() +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Int32 Tag +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Int32 get_Tag() +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: System.String ToString() +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: TResult Item +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: TResult get_Item() +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Tags[TResult]: Int32 Exception +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Tags[TResult]: Int32 Result +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Boolean Equals(ResultOrException`1) +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Boolean IsException +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Boolean IsResult +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Boolean get_IsException() +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Boolean get_IsResult() +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult] +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult] +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Tags[TResult] +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Int32 Tag +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Int32 get_Tag() +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: ResultOrException`1 NewException(System.Exception) +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: ResultOrException`1 NewResult(TResult) +FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: System.String ToString() +FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: Boolean IsInvalidPathShim(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: Boolean IsPathRootedShim(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: Boolean IsStableFileHeuristic(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: Boolean SafeExists(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: Byte[] ReadAllBytesShim(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: System.DateTime GetLastWriteTimeShim(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: System.IO.Stream FileStreamCreateShim(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: System.IO.Stream FileStreamReadShim(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: System.IO.Stream FileStreamWriteExistingShim(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: System.Reflection.Assembly AssemblyLoad(System.Reflection.AssemblyName) +FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: System.Reflection.Assembly AssemblyLoadFrom(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: System.String GetFullPathShim(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: System.String GetTempPathShim() +FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: Void FileDelete(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+Shim: Byte[] File.ReadBinaryChunk.Static(System.String, Int32, Int32) +FSharp.Compiler.AbstractIL.Internal.Library+Shim: FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem +FSharp.Compiler.AbstractIL.Internal.Library+Shim: IFileSystem FileSystem +FSharp.Compiler.AbstractIL.Internal.Library+Shim: IFileSystem get_FileSystem() +FSharp.Compiler.AbstractIL.Internal.Library+Shim: System.IO.StreamReader File.OpenReaderAndRetry.Static(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Boolean) +FSharp.Compiler.AbstractIL.Internal.Library+Shim: Void set_FileSystem(IFileSystem) +FSharp.Compiler.AbstractIL.Internal.Library+String: Boolean contains(System.String, Char) +FSharp.Compiler.AbstractIL.Internal.Library+String: Boolean isLeadingIdentifierCharacterUpperCase(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+String: Char get(System.String, Int32) +FSharp.Compiler.AbstractIL.Internal.Library+String: Char[] toCharArray(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+String: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Contains|_|(System.String, System.String) +FSharp.Compiler.AbstractIL.Internal.Library+String: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |StartsWith|_|(System.String, System.String) +FSharp.Compiler.AbstractIL.Internal.Library+String: System.Collections.Generic.IComparer`1[System.String] get_order() +FSharp.Compiler.AbstractIL.Internal.Library+String: System.Collections.Generic.IComparer`1[System.String] order +FSharp.Compiler.AbstractIL.Internal.Library+String: System.String capitalize(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+String: System.String dropPrefix(System.String, System.String) +FSharp.Compiler.AbstractIL.Internal.Library+String: System.String dropSuffix(System.String, System.String) +FSharp.Compiler.AbstractIL.Internal.Library+String: System.String lowerCaseFirstChar(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+String: System.String lowercase(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+String: System.String make(Int32, Char) +FSharp.Compiler.AbstractIL.Internal.Library+String: System.String sub(System.String, Int32, Int32) +FSharp.Compiler.AbstractIL.Internal.Library+String: System.String trim(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+String: System.String uncapitalize(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+String: System.String uppercase(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+String: System.String[] getLines(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+String: System.String[] split(System.StringSplitOptions, System.String[], System.String) +FSharp.Compiler.AbstractIL.Internal.Library+String: System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Int32]] extractTrailingIndex(System.String) +FSharp.Compiler.AbstractIL.Internal.Library+Tables: Microsoft.FSharp.Core.FSharpFunc`2[a,b] memoize[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,b]) +FSharp.Compiler.AbstractIL.Internal.Library+UndefinedException: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.Internal.Library+UndefinedException: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.Internal.Library+UndefinedException: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.Internal.Library+UndefinedException: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.Internal.Library+UndefinedException: Void .ctor() +FSharp.Compiler.AbstractIL.Internal.Library+UniqueStampGenerator`1[T]: Int32 Encode(T) +FSharp.Compiler.AbstractIL.Internal.Library+UniqueStampGenerator`1[T]: System.Collections.Generic.ICollection`1[T] Table +FSharp.Compiler.AbstractIL.Internal.Library+UniqueStampGenerator`1[T]: System.Collections.Generic.ICollection`1[T] get_Table() +FSharp.Compiler.AbstractIL.Internal.Library+UniqueStampGenerator`1[T]: Void .ctor() +FSharp.Compiler.AbstractIL.Internal.Library+ValueOptionInternal: Microsoft.FSharp.Core.FSharpValueOption`1[a] ofOption[a](Microsoft.FSharp.Core.FSharpOption`1[a]) +FSharp.Compiler.AbstractIL.Internal.Library+ValueOptionInternal: Microsoft.FSharp.Core.FSharpValueOption`1[b] bind[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpValueOption`1[b]], Microsoft.FSharp.Core.FSharpValueOption`1[a]) +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Boolean Equals(ValueOrCancelled`1) +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Boolean IsCancelled +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Boolean IsValue +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Boolean get_IsCancelled() +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Boolean get_IsValue() +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Int32 Tag +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Int32 get_Tag() +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: System.OperationCanceledException Item +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: System.OperationCanceledException get_Item() +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: System.String ToString() +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Tags[TResult]: Int32 Cancelled +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Tags[TResult]: Int32 Value +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Boolean Equals(ValueOrCancelled`1) +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Boolean IsCancelled +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Boolean IsValue +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Boolean get_IsCancelled() +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Boolean get_IsValue() +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Int32 Tag +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Int32 get_Tag() +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: System.String ToString() +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: TResult Item +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: TResult get_Item() +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Boolean Equals(ValueOrCancelled`1) +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Boolean IsCancelled +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Boolean IsValue +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Boolean get_IsCancelled() +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Boolean get_IsValue() +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult] +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Tags[TResult] +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult] +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Int32 Tag +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Int32 get_Tag() +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: System.String ToString() +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: ValueOrCancelled`1 NewCancelled(System.OperationCanceledException) +FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: ValueOrCancelled`1 NewValue(TResult) +FSharp.Compiler.AbstractIL.Internal.Library: AnyCallerThreadToken AnyCallerThread +FSharp.Compiler.AbstractIL.Internal.Library: AnyCallerThreadToken get_AnyCallerThread() +FSharp.Compiler.AbstractIL.Internal.Library: Boolean String.EndsWithOrdinal(System.String, System.String) +FSharp.Compiler.AbstractIL.Internal.Library: Boolean String.StartsWithOrdinal(System.String, System.String) +FSharp.Compiler.AbstractIL.Internal.Library: Boolean isNilOrSingleton[a](Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.AbstractIL.Internal.Library: Boolean isNil[a](Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.AbstractIL.Internal.Library: Boolean isNonNull[a](a) +FSharp.Compiler.AbstractIL.Internal.Library: Boolean isSingleton[a](Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.AbstractIL.Internal.Library: Boolean op_EqualsEqualsEquals[a](a, a) +FSharp.Compiler.AbstractIL.Internal.Library: CancellableBuilder cancellable +FSharp.Compiler.AbstractIL.Internal.Library: CancellableBuilder get_cancellable() +FSharp.Compiler.AbstractIL.Internal.Library: CompilationThreadToken AssumeCompilationThreadWithoutEvidence() +FSharp.Compiler.AbstractIL.Internal.Library: ? AssumeLockWithoutEvidence[?]() +FSharp.Compiler.AbstractIL.Internal.Library: EventuallyBuilder eventually +FSharp.Compiler.AbstractIL.Internal.Library: EventuallyBuilder get_eventually() +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+AnyCallerThreadToken +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Array +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Cancellable +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Eventually +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[TResult] +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+CompilationThreadToken +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Dictionary +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+DictionaryExtensions +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+EventuallyBuilder +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T] +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+ExecutionToken +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+IPartialEqualityComparer +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+IPartialEqualityComparer`1[T] +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T] +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value] +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Lazy +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContextFailure +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContext`2[T,ctxt] +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+List +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+LockToken +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Lock`1[LockTokenType] +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Map +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+MemoizationTable`2[T,U] +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+MultiMap +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+NameMap +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Option +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Order +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+ResizeArray +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult] +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Shim +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+String +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Tables +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+UndefinedException +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+UniqueStampGenerator`1[T] +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+ValueOptionInternal +FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult] +FSharp.Compiler.AbstractIL.Internal.Library: Int32 LOH_SIZE_THRESHOLD_BYTES +FSharp.Compiler.AbstractIL.Internal.Library: Int32 get_LOH_SIZE_THRESHOLD_BYTES() +FSharp.Compiler.AbstractIL.Internal.Library: Int32 op_GreaterGreaterGreaterAmp(Int32, Int32) +FSharp.Compiler.AbstractIL.Internal.Library: Microsoft.FSharp.Collections.FSharpList`1[Value] Map`2.get_Values[Key,Value](Microsoft.FSharp.Collections.FSharpMap`2[Key,Value]) +FSharp.Compiler.AbstractIL.Internal.Library: Microsoft.FSharp.Collections.FSharpMap`2[Key,Value] Map`2.AddAndMarkAsCollapsible[Key,Value](Microsoft.FSharp.Collections.FSharpMap`2[Key,Value], System.Collections.Generic.KeyValuePair`2[Key,Value][]) +FSharp.Compiler.AbstractIL.Internal.Library: Microsoft.FSharp.Collections.FSharpMap`2[Key,Value] Map`2.LinearTryModifyThenLaterFlatten[Key,Value](Microsoft.FSharp.Collections.FSharpMap`2[Key,Value], Key, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpOption`1[Value],Value]) +FSharp.Compiler.AbstractIL.Internal.Library: Microsoft.FSharp.Collections.FSharpMap`2[Key,Value] Map`2.MarkAsCollapsible[Key,Value](Microsoft.FSharp.Collections.FSharpMap`2[Key,Value]) +FSharp.Compiler.AbstractIL.Internal.Library: Microsoft.FSharp.Collections.FSharpMap`2[Key,Value] Map`2.get_Empty.Static[Key,Value]() +FSharp.Compiler.AbstractIL.Internal.Library: Microsoft.FSharp.Core.FSharpFunc`2[System.Boolean,Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit]] get_reportTime() +FSharp.Compiler.AbstractIL.Internal.Library: Microsoft.FSharp.Core.FSharpFunc`2[System.Boolean,Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit]] reportTime +FSharp.Compiler.AbstractIL.Internal.Library: System.Lazy`1[a] notlazy[a](a) +FSharp.Compiler.AbstractIL.Internal.Library: Void DoesNotRequireCompilerThreadTokenAndCouldPossiblyBeMadeConcurrent(CompilationThreadToken) +FSharp.Compiler.AbstractIL.Internal.Library: Void RequireCompilationThread(CompilationThreadToken) +FSharp.Compiler.AbstractIL.Internal.Library: a getHole[a](Microsoft.FSharp.Core.FSharpRef`1[Microsoft.FSharp.Core.FSharpOption`1[a]]) +FSharp.Compiler.AbstractIL.Internal.Library: a nonNull[a](System.String, a) +FSharp.Compiler.AbstractIL.Internal.Library: a notFound[a]() +FSharp.Compiler.AbstractIL.Internal.Library: d foldOn[a,b,c,d](Microsoft.FSharp.Core.FSharpFunc`2[a,b], Microsoft.FSharp.Core.FSharpFunc`2[c,Microsoft.FSharp.Core.FSharpFunc`2[b,d]], c, a) +FSharp.Compiler.AbstractIL.Internal.Utils: Boolean get_runningOnMono() +FSharp.Compiler.AbstractIL.Internal.Utils: Boolean runningOnMono +FSharp.Compiler.CompilerGlobalState+NiceNameGenerator: System.String FreshCompilerGeneratedName(System.String, range) +FSharp.Compiler.CompilerGlobalState+NiceNameGenerator: Void .ctor() +FSharp.Compiler.CompilerGlobalState+NiceNameGenerator: Void Reset() +FSharp.Compiler.CompilerGlobalState+StableNiceNameGenerator: System.String GetUniqueCompilerGeneratedName(System.String, range, Int64) +FSharp.Compiler.CompilerGlobalState+StableNiceNameGenerator: Void .ctor() +FSharp.Compiler.CompilerGlobalState+StableNiceNameGenerator: Void Reset() +FSharp.Compiler.CompilerGlobalState: FSharp.Compiler.CompilerGlobalState+NiceNameGenerator +FSharp.Compiler.CompilerGlobalState: FSharp.Compiler.CompilerGlobalState+StableNiceNameGenerator +FSharp.Compiler.CompilerGlobalState: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Int64] get_newStamp() +FSharp.Compiler.CompilerGlobalState: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Int64] get_newUnique() +FSharp.Compiler.CompilerGlobalState: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Int64] newStamp +FSharp.Compiler.CompilerGlobalState: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Int64] newUnique +FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 CodeGen +FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 Compile +FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 DefaultPhase +FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 IlGen +FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 IlxGen +FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 Interactive +FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 Optimize +FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 Output +FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 Parameter +FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 Parse +FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 TypeCheck +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean Equals(BuildPhase) +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean Equals(System.Object) +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsCodeGen +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsCompile +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsDefaultPhase +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsIlGen +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsIlxGen +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsInteractive +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsOptimize +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsOutput +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsParameter +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsParse +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsTypeCheck +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsCodeGen() +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsCompile() +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsDefaultPhase() +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsIlGen() +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsIlxGen() +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsInteractive() +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsOptimize() +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsOutput() +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsParameter() +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsParse() +FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsTypeCheck() +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase CodeGen +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase Compile +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase DefaultPhase +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase IlGen +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase IlxGen +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase Interactive +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase Optimize +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase Output +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase Parameter +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase Parse +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase TypeCheck +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_CodeGen() +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_Compile() +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_DefaultPhase() +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_IlGen() +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_IlxGen() +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_Interactive() +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_Optimize() +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_Output() +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_Parameter() +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_Parse() +FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_TypeCheck() +FSharp.Compiler.ErrorLogger+BuildPhase: FSharp.Compiler.ErrorLogger+BuildPhase+Tags +FSharp.Compiler.ErrorLogger+BuildPhase: Int32 CompareTo(BuildPhase) +FSharp.Compiler.ErrorLogger+BuildPhase: Int32 CompareTo(System.Object) +FSharp.Compiler.ErrorLogger+BuildPhase: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.ErrorLogger+BuildPhase: Int32 GetHashCode() +FSharp.Compiler.ErrorLogger+BuildPhase: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+BuildPhase: Int32 Tag +FSharp.Compiler.ErrorLogger+BuildPhase: Int32 get_Tag() +FSharp.Compiler.ErrorLogger+BuildPhase: System.String ToString() +FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String CodeGen +FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String Compile +FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String DefaultPhase +FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String IlGen +FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String IlxGen +FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String Interactive +FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String Internal +FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String Optimize +FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String Output +FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String Parameter +FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String Parse +FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String TypeCheck +FSharp.Compiler.ErrorLogger+CapturingErrorLogger: Int32 ErrorCount +FSharp.Compiler.ErrorLogger+CapturingErrorLogger: Int32 get_ErrorCount() +FSharp.Compiler.ErrorLogger+CapturingErrorLogger: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ErrorLogger+PhasedDiagnostic,System.Boolean]] Diagnostics +FSharp.Compiler.ErrorLogger+CapturingErrorLogger: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ErrorLogger+PhasedDiagnostic,System.Boolean]] get_Diagnostics() +FSharp.Compiler.ErrorLogger+CapturingErrorLogger: System.String DebugDisplay() +FSharp.Compiler.ErrorLogger+CapturingErrorLogger: Void .ctor(System.String) +FSharp.Compiler.ErrorLogger+CapturingErrorLogger: Void CommitDelayedDiagnostics(ErrorLogger) +FSharp.Compiler.ErrorLogger+CapturingErrorLogger: Void DiagnosticSink(PhasedDiagnostic, Boolean) +FSharp.Compiler.ErrorLogger+Deprecated: Boolean Equals(System.Object) +FSharp.Compiler.ErrorLogger+Deprecated: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+Deprecated: Int32 GetHashCode() +FSharp.Compiler.ErrorLogger+Deprecated: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+Deprecated: System.String Data0 +FSharp.Compiler.ErrorLogger+Deprecated: System.String get_Data0() +FSharp.Compiler.ErrorLogger+Deprecated: Void .ctor() +FSharp.Compiler.ErrorLogger+Deprecated: Void .ctor(System.String, range) +FSharp.Compiler.ErrorLogger+Deprecated: range Data1 +FSharp.Compiler.ErrorLogger+Deprecated: range get_Data1() +FSharp.Compiler.ErrorLogger+Error: Boolean Equals(System.Object) +FSharp.Compiler.ErrorLogger+Error: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+Error: Int32 GetHashCode() +FSharp.Compiler.ErrorLogger+Error: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+Error: System.String Message +FSharp.Compiler.ErrorLogger+Error: System.String get_Message() +FSharp.Compiler.ErrorLogger+Error: System.Tuple`2[System.Int32,System.String] Data0 +FSharp.Compiler.ErrorLogger+Error: System.Tuple`2[System.Int32,System.String] get_Data0() +FSharp.Compiler.ErrorLogger+Error: Void .ctor() +FSharp.Compiler.ErrorLogger+Error: Void .ctor(System.Tuple`2[System.Int32,System.String], range) +FSharp.Compiler.ErrorLogger+Error: range Data1 +FSharp.Compiler.ErrorLogger+Error: range get_Data1() +FSharp.Compiler.ErrorLogger+ErrorLogger: Int32 ErrorCount +FSharp.Compiler.ErrorLogger+ErrorLogger: Int32 get_ErrorCount() +FSharp.Compiler.ErrorLogger+ErrorLogger: System.String DebugDisplay() +FSharp.Compiler.ErrorLogger+ErrorLogger: Void .ctor(System.String) +FSharp.Compiler.ErrorLogger+ErrorLogger: Void DiagnosticSink(PhasedDiagnostic, Boolean) +FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: Boolean get_tryAndDetectDev15() +FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: Boolean tryAndDetectDev15 +FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: Void ErrorLogger.ErrorR(ErrorLogger, System.Exception) +FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: Void ErrorLogger.ErrorRecovery(ErrorLogger, System.Exception, range) +FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: Void ErrorLogger.ErrorRecoveryNoRange(ErrorLogger, System.Exception) +FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: Void ErrorLogger.StopProcessingRecovery(ErrorLogger, System.Exception, range) +FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: Void ErrorLogger.Warning(ErrorLogger, System.Exception) +FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: Void PreserveStackTrace[a](a) +FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: Void ReraiseIfWatsonable(System.Exception) +FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: a ErrorLogger.SimulateError[a](ErrorLogger, PhasedDiagnostic) +FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: b ErrorLogger.Error[b](ErrorLogger, System.Exception) +FSharp.Compiler.ErrorLogger+ErrorStyle+Tags: Int32 DefaultErrors +FSharp.Compiler.ErrorLogger+ErrorStyle+Tags: Int32 EmacsErrors +FSharp.Compiler.ErrorLogger+ErrorStyle+Tags: Int32 GccErrors +FSharp.Compiler.ErrorLogger+ErrorStyle+Tags: Int32 TestErrors +FSharp.Compiler.ErrorLogger+ErrorStyle+Tags: Int32 VSErrors +FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean Equals(ErrorStyle) +FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean Equals(System.Object) +FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean IsDefaultErrors +FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean IsEmacsErrors +FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean IsGccErrors +FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean IsTestErrors +FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean IsVSErrors +FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean get_IsDefaultErrors() +FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean get_IsEmacsErrors() +FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean get_IsGccErrors() +FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean get_IsTestErrors() +FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean get_IsVSErrors() +FSharp.Compiler.ErrorLogger+ErrorStyle: ErrorStyle DefaultErrors +FSharp.Compiler.ErrorLogger+ErrorStyle: ErrorStyle EmacsErrors +FSharp.Compiler.ErrorLogger+ErrorStyle: ErrorStyle GccErrors +FSharp.Compiler.ErrorLogger+ErrorStyle: ErrorStyle TestErrors +FSharp.Compiler.ErrorLogger+ErrorStyle: ErrorStyle VSErrors +FSharp.Compiler.ErrorLogger+ErrorStyle: ErrorStyle get_DefaultErrors() +FSharp.Compiler.ErrorLogger+ErrorStyle: ErrorStyle get_EmacsErrors() +FSharp.Compiler.ErrorLogger+ErrorStyle: ErrorStyle get_GccErrors() +FSharp.Compiler.ErrorLogger+ErrorStyle: ErrorStyle get_TestErrors() +FSharp.Compiler.ErrorLogger+ErrorStyle: ErrorStyle get_VSErrors() +FSharp.Compiler.ErrorLogger+ErrorStyle: FSharp.Compiler.ErrorLogger+ErrorStyle+Tags +FSharp.Compiler.ErrorLogger+ErrorStyle: Int32 CompareTo(ErrorStyle) +FSharp.Compiler.ErrorLogger+ErrorStyle: Int32 CompareTo(System.Object) +FSharp.Compiler.ErrorLogger+ErrorStyle: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.ErrorLogger+ErrorStyle: Int32 GetHashCode() +FSharp.Compiler.ErrorLogger+ErrorStyle: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+ErrorStyle: Int32 Tag +FSharp.Compiler.ErrorLogger+ErrorStyle: Int32 get_Tag() +FSharp.Compiler.ErrorLogger+ErrorStyle: System.String ToString() +FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit] Data3 +FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit] get_Data3() +FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: System.String Data2 +FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: System.String Message +FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: System.String get_Data2() +FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: System.String get_Message() +FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: System.Tuple`2[System.Int32,System.String] Data0 +FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: System.Tuple`2[System.Int32,System.String] get_Data0() +FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: Void .ctor() +FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: Void .ctor(System.Tuple`2[System.Int32,System.String], range, System.String, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit]) +FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: range Data1 +FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: range get_Data1() +FSharp.Compiler.ErrorLogger+Exiter: T Exit[T](Int32) +FSharp.Compiler.ErrorLogger+Experimental: Boolean Equals(System.Object) +FSharp.Compiler.ErrorLogger+Experimental: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+Experimental: Int32 GetHashCode() +FSharp.Compiler.ErrorLogger+Experimental: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+Experimental: System.String Data0 +FSharp.Compiler.ErrorLogger+Experimental: System.String get_Data0() +FSharp.Compiler.ErrorLogger+Experimental: Void .ctor() +FSharp.Compiler.ErrorLogger+Experimental: Void .ctor(System.String, range) +FSharp.Compiler.ErrorLogger+Experimental: range Data1 +FSharp.Compiler.ErrorLogger+Experimental: range get_Data1() +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Boolean Equals(FSharpErrorSeverityOptions) +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Boolean Equals(System.Object) +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Boolean GlobalWarnAsError +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Boolean get_GlobalWarnAsError() +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: FSharpErrorSeverityOptions Default +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: FSharpErrorSeverityOptions get_Default() +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Int32 CompareTo(FSharpErrorSeverityOptions) +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Int32 CompareTo(System.Object) +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Int32 GetHashCode() +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Int32 WarnLevel +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Int32 get_WarnLevel() +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] WarnAsError +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] WarnAsWarn +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] WarnOff +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] WarnOn +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] get_WarnAsError() +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] get_WarnAsWarn() +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] get_WarnOff() +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] get_WarnOn() +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: System.String ToString() +FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Void .ctor(Int32, Boolean, Microsoft.FSharp.Collections.FSharpList`1[System.Int32], Microsoft.FSharp.Collections.FSharpList`1[System.Int32], Microsoft.FSharp.Collections.FSharpList`1[System.Int32], Microsoft.FSharp.Collections.FSharpList`1[System.Int32]) +FSharp.Compiler.ErrorLogger+InternalError: Boolean Equals(System.Object) +FSharp.Compiler.ErrorLogger+InternalError: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+InternalError: Int32 GetHashCode() +FSharp.Compiler.ErrorLogger+InternalError: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+InternalError: System.String Message +FSharp.Compiler.ErrorLogger+InternalError: System.String get_Message() +FSharp.Compiler.ErrorLogger+InternalError: System.String get_msg() +FSharp.Compiler.ErrorLogger+InternalError: System.String msg +FSharp.Compiler.ErrorLogger+InternalError: Void .ctor() +FSharp.Compiler.ErrorLogger+InternalError: Void .ctor(System.String, range) +FSharp.Compiler.ErrorLogger+InternalError: range Data1 +FSharp.Compiler.ErrorLogger+InternalError: range get_Data1() +FSharp.Compiler.ErrorLogger+LibraryUseOnly: Boolean Equals(System.Object) +FSharp.Compiler.ErrorLogger+LibraryUseOnly: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+LibraryUseOnly: Int32 GetHashCode() +FSharp.Compiler.ErrorLogger+LibraryUseOnly: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+LibraryUseOnly: Void .ctor() +FSharp.Compiler.ErrorLogger+LibraryUseOnly: Void .ctor(range) +FSharp.Compiler.ErrorLogger+LibraryUseOnly: range Data0 +FSharp.Compiler.ErrorLogger+LibraryUseOnly: range get_Data0() +FSharp.Compiler.ErrorLogger+NumberedError: Boolean Equals(System.Object) +FSharp.Compiler.ErrorLogger+NumberedError: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+NumberedError: Int32 GetHashCode() +FSharp.Compiler.ErrorLogger+NumberedError: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+NumberedError: System.String Message +FSharp.Compiler.ErrorLogger+NumberedError: System.String get_Message() +FSharp.Compiler.ErrorLogger+NumberedError: System.Tuple`2[System.Int32,System.String] Data0 +FSharp.Compiler.ErrorLogger+NumberedError: System.Tuple`2[System.Int32,System.String] get_Data0() +FSharp.Compiler.ErrorLogger+NumberedError: Void .ctor() +FSharp.Compiler.ErrorLogger+NumberedError: Void .ctor(System.Tuple`2[System.Int32,System.String], range) +FSharp.Compiler.ErrorLogger+NumberedError: range Data1 +FSharp.Compiler.ErrorLogger+NumberedError: range get_Data1() +FSharp.Compiler.ErrorLogger+OperationResult: OperationResult`1 ignore[a](OperationResult`1) +FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: Boolean IsErrorResult +FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: Boolean IsOkResult +FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: Boolean get_IsErrorResult() +FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: Boolean get_IsOkResult() +FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: Microsoft.FSharp.Collections.FSharpList`1[System.Exception] get_warnings() +FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: Microsoft.FSharp.Collections.FSharpList`1[System.Exception] warnings +FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: Int32 Tag +FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: Int32 get_Tag() +FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: System.Exception Item2 +FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: System.Exception get_Item2() +FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: System.String ToString() +FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: Boolean IsErrorResult +FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: Boolean IsOkResult +FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: Boolean get_IsErrorResult() +FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: Boolean get_IsOkResult() +FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: Int32 Tag +FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: Int32 get_Tag() +FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: System.String ToString() +FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: T Item2 +FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: T get_Item2() +FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: Microsoft.FSharp.Collections.FSharpList`1[System.Exception] get_warnings() +FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: Microsoft.FSharp.Collections.FSharpList`1[System.Exception] warnings +FSharp.Compiler.ErrorLogger+OperationResult`1+Tags[T]: Int32 ErrorResult +FSharp.Compiler.ErrorLogger+OperationResult`1+Tags[T]: Int32 OkResult +FSharp.Compiler.ErrorLogger+OperationResult`1[T]: Boolean IsErrorResult +FSharp.Compiler.ErrorLogger+OperationResult`1[T]: Boolean IsOkResult +FSharp.Compiler.ErrorLogger+OperationResult`1[T]: Boolean get_IsErrorResult() +FSharp.Compiler.ErrorLogger+OperationResult`1[T]: Boolean get_IsOkResult() +FSharp.Compiler.ErrorLogger+OperationResult`1[T]: FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T] +FSharp.Compiler.ErrorLogger+OperationResult`1[T]: FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T] +FSharp.Compiler.ErrorLogger+OperationResult`1[T]: FSharp.Compiler.ErrorLogger+OperationResult`1+Tags[T] +FSharp.Compiler.ErrorLogger+OperationResult`1[T]: Int32 Tag +FSharp.Compiler.ErrorLogger+OperationResult`1[T]: Int32 get_Tag() +FSharp.Compiler.ErrorLogger+OperationResult`1[T]: OperationResult`1 NewErrorResult(Microsoft.FSharp.Collections.FSharpList`1[System.Exception], System.Exception) +FSharp.Compiler.ErrorLogger+OperationResult`1[T]: OperationResult`1 NewOkResult(Microsoft.FSharp.Collections.FSharpList`1[System.Exception], T) +FSharp.Compiler.ErrorLogger+OperationResult`1[T]: System.String ToString() +FSharp.Compiler.ErrorLogger+PhasedDiagnostic: Boolean Equals(PhasedDiagnostic) +FSharp.Compiler.ErrorLogger+PhasedDiagnostic: Boolean Equals(System.Object) +FSharp.Compiler.ErrorLogger+PhasedDiagnostic: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+PhasedDiagnostic: Boolean IsPhaseInCompile() +FSharp.Compiler.ErrorLogger+PhasedDiagnostic: Boolean IsSubcategoryOfCompile(System.String) +FSharp.Compiler.ErrorLogger+PhasedDiagnostic: BuildPhase Phase +FSharp.Compiler.ErrorLogger+PhasedDiagnostic: BuildPhase get_Phase() +FSharp.Compiler.ErrorLogger+PhasedDiagnostic: Int32 GetHashCode() +FSharp.Compiler.ErrorLogger+PhasedDiagnostic: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+PhasedDiagnostic: PhasedDiagnostic Create(System.Exception, BuildPhase) +FSharp.Compiler.ErrorLogger+PhasedDiagnostic: System.Exception Exception +FSharp.Compiler.ErrorLogger+PhasedDiagnostic: System.Exception get_Exception() +FSharp.Compiler.ErrorLogger+PhasedDiagnostic: System.String DebugDisplay() +FSharp.Compiler.ErrorLogger+PhasedDiagnostic: System.String Subcategory() +FSharp.Compiler.ErrorLogger+PhasedDiagnostic: System.String ToString() +FSharp.Compiler.ErrorLogger+PhasedDiagnostic: Void .ctor(System.Exception, BuildPhase) +FSharp.Compiler.ErrorLogger+PossibleUnverifiableCode: Boolean Equals(System.Object) +FSharp.Compiler.ErrorLogger+PossibleUnverifiableCode: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+PossibleUnverifiableCode: Int32 GetHashCode() +FSharp.Compiler.ErrorLogger+PossibleUnverifiableCode: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+PossibleUnverifiableCode: Void .ctor() +FSharp.Compiler.ErrorLogger+PossibleUnverifiableCode: Void .ctor(range) +FSharp.Compiler.ErrorLogger+PossibleUnverifiableCode: range Data0 +FSharp.Compiler.ErrorLogger+PossibleUnverifiableCode: range get_Data0() +FSharp.Compiler.ErrorLogger+ReportedError: Boolean Equals(System.Object) +FSharp.Compiler.ErrorLogger+ReportedError: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+ReportedError: Int32 GetHashCode() +FSharp.Compiler.ErrorLogger+ReportedError: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+ReportedError: Microsoft.FSharp.Core.FSharpOption`1[System.Exception] Data0 +FSharp.Compiler.ErrorLogger+ReportedError: Microsoft.FSharp.Core.FSharpOption`1[System.Exception] get_Data0() +FSharp.Compiler.ErrorLogger+ReportedError: System.String Message +FSharp.Compiler.ErrorLogger+ReportedError: System.String get_Message() +FSharp.Compiler.ErrorLogger+ReportedError: Void .ctor() +FSharp.Compiler.ErrorLogger+ReportedError: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[System.Exception]) +FSharp.Compiler.ErrorLogger+StopProcessingExn: Boolean Equals(System.Object) +FSharp.Compiler.ErrorLogger+StopProcessingExn: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+StopProcessingExn: Int32 GetHashCode() +FSharp.Compiler.ErrorLogger+StopProcessingExn: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+StopProcessingExn: Microsoft.FSharp.Core.FSharpOption`1[System.Exception] Data0 +FSharp.Compiler.ErrorLogger+StopProcessingExn: Microsoft.FSharp.Core.FSharpOption`1[System.Exception] get_Data0() +FSharp.Compiler.ErrorLogger+StopProcessingExn: System.String Message +FSharp.Compiler.ErrorLogger+StopProcessingExn: System.String ToString() +FSharp.Compiler.ErrorLogger+StopProcessingExn: System.String get_Message() +FSharp.Compiler.ErrorLogger+StopProcessingExn: Void .ctor() +FSharp.Compiler.ErrorLogger+StopProcessingExn: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[System.Exception]) +FSharp.Compiler.ErrorLogger+TrackErrorsBuilder: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,b] Delay[b](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,b]) +FSharp.Compiler.ErrorLogger+TrackErrorsBuilder: OperationResult`1 Bind[h,i](OperationResult`1, Microsoft.FSharp.Core.FSharpFunc`2[h,FSharp.Compiler.ErrorLogger+OperationResult`1[i]]) +FSharp.Compiler.ErrorLogger+TrackErrorsBuilder: OperationResult`1 Combine[c,d](OperationResult`1, Microsoft.FSharp.Core.FSharpFunc`2[c,FSharp.Compiler.ErrorLogger+OperationResult`1[d]]) +FSharp.Compiler.ErrorLogger+TrackErrorsBuilder: OperationResult`1 For[e](Microsoft.FSharp.Collections.FSharpList`1[e], Microsoft.FSharp.Core.FSharpFunc`2[e,FSharp.Compiler.ErrorLogger+OperationResult`1[Microsoft.FSharp.Core.Unit]]) +FSharp.Compiler.ErrorLogger+TrackErrorsBuilder: OperationResult`1 Return[g](g) +FSharp.Compiler.ErrorLogger+TrackErrorsBuilder: OperationResult`1 While(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.ErrorLogger+OperationResult`1[Microsoft.FSharp.Core.Unit]]) +FSharp.Compiler.ErrorLogger+TrackErrorsBuilder: OperationResult`1 Zero() +FSharp.Compiler.ErrorLogger+TrackErrorsBuilder: Void .ctor() +FSharp.Compiler.ErrorLogger+TrackErrorsBuilder: a Run[a](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,a]) +FSharp.Compiler.ErrorLogger+TrackErrorsBuilder: f ReturnFrom[f](f) +FSharp.Compiler.ErrorLogger+UnresolvedPathReference: Boolean Equals(System.Object) +FSharp.Compiler.ErrorLogger+UnresolvedPathReference: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+UnresolvedPathReference: Int32 GetHashCode() +FSharp.Compiler.ErrorLogger+UnresolvedPathReference: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+UnresolvedPathReference: System.String Data0 +FSharp.Compiler.ErrorLogger+UnresolvedPathReference: System.String Data1 +FSharp.Compiler.ErrorLogger+UnresolvedPathReference: System.String get_Data0() +FSharp.Compiler.ErrorLogger+UnresolvedPathReference: System.String get_Data1() +FSharp.Compiler.ErrorLogger+UnresolvedPathReference: Void .ctor() +FSharp.Compiler.ErrorLogger+UnresolvedPathReference: Void .ctor(System.String, System.String, range) +FSharp.Compiler.ErrorLogger+UnresolvedPathReference: range Data2 +FSharp.Compiler.ErrorLogger+UnresolvedPathReference: range get_Data2() +FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: Boolean Equals(System.Object) +FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: Int32 GetHashCode() +FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: System.String Data0 +FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: System.String Data1 +FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: System.String Message +FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: System.String get_Data0() +FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: System.String get_Data1() +FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: System.String get_Message() +FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: Void .ctor() +FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: Void .ctor(System.String, System.String) +FSharp.Compiler.ErrorLogger+UnresolvedReferenceError: Boolean Equals(System.Object) +FSharp.Compiler.ErrorLogger+UnresolvedReferenceError: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+UnresolvedReferenceError: Int32 GetHashCode() +FSharp.Compiler.ErrorLogger+UnresolvedReferenceError: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+UnresolvedReferenceError: System.String Data0 +FSharp.Compiler.ErrorLogger+UnresolvedReferenceError: System.String get_Data0() +FSharp.Compiler.ErrorLogger+UnresolvedReferenceError: Void .ctor() +FSharp.Compiler.ErrorLogger+UnresolvedReferenceError: Void .ctor(System.String, range) +FSharp.Compiler.ErrorLogger+UnresolvedReferenceError: range Data1 +FSharp.Compiler.ErrorLogger+UnresolvedReferenceError: range get_Data1() +FSharp.Compiler.ErrorLogger+UnresolvedReferenceNoRange: Boolean Equals(System.Object) +FSharp.Compiler.ErrorLogger+UnresolvedReferenceNoRange: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+UnresolvedReferenceNoRange: Int32 GetHashCode() +FSharp.Compiler.ErrorLogger+UnresolvedReferenceNoRange: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+UnresolvedReferenceNoRange: System.String Data0 +FSharp.Compiler.ErrorLogger+UnresolvedReferenceNoRange: System.String get_Data0() +FSharp.Compiler.ErrorLogger+UnresolvedReferenceNoRange: Void .ctor() +FSharp.Compiler.ErrorLogger+UnresolvedReferenceNoRange: Void .ctor(System.String) +FSharp.Compiler.ErrorLogger+UserCompilerMessage: Boolean Equals(System.Object) +FSharp.Compiler.ErrorLogger+UserCompilerMessage: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+UserCompilerMessage: Int32 Data1 +FSharp.Compiler.ErrorLogger+UserCompilerMessage: Int32 GetHashCode() +FSharp.Compiler.ErrorLogger+UserCompilerMessage: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+UserCompilerMessage: Int32 get_Data1() +FSharp.Compiler.ErrorLogger+UserCompilerMessage: System.String Data0 +FSharp.Compiler.ErrorLogger+UserCompilerMessage: System.String get_Data0() +FSharp.Compiler.ErrorLogger+UserCompilerMessage: Void .ctor() +FSharp.Compiler.ErrorLogger+UserCompilerMessage: Void .ctor(System.String, Int32, range) +FSharp.Compiler.ErrorLogger+UserCompilerMessage: range Data2 +FSharp.Compiler.ErrorLogger+UserCompilerMessage: range get_Data2() +FSharp.Compiler.ErrorLogger+WrappedError: Boolean Equals(System.Object) +FSharp.Compiler.ErrorLogger+WrappedError: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+WrappedError: Int32 GetHashCode() +FSharp.Compiler.ErrorLogger+WrappedError: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ErrorLogger+WrappedError: System.Exception Data0 +FSharp.Compiler.ErrorLogger+WrappedError: System.Exception get_Data0() +FSharp.Compiler.ErrorLogger+WrappedError: System.String Message +FSharp.Compiler.ErrorLogger+WrappedError: System.String get_Message() +FSharp.Compiler.ErrorLogger+WrappedError: Void .ctor() +FSharp.Compiler.ErrorLogger+WrappedError: Void .ctor(System.Exception, range) +FSharp.Compiler.ErrorLogger+WrappedError: range Data1 +FSharp.Compiler.ErrorLogger+WrappedError: range get_Data1() +FSharp.Compiler.ErrorLogger: Boolean get_reportLibraryOnlyFeatures() +FSharp.Compiler.ErrorLogger: Boolean reportLibraryOnlyFeatures +FSharp.Compiler.ErrorLogger: ErrorLogger AssertFalseErrorLogger +FSharp.Compiler.ErrorLogger: ErrorLogger DiscardErrorsLogger +FSharp.Compiler.ErrorLogger: ErrorLogger get_AssertFalseErrorLogger() +FSharp.Compiler.ErrorLogger: ErrorLogger get_DiscardErrorsLogger() +FSharp.Compiler.ErrorLogger: Exiter QuitProcessExiter +FSharp.Compiler.ErrorLogger: Exiter get_QuitProcessExiter() +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+BuildPhase +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+CapturingErrorLogger +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+Deprecated +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+Error +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+ErrorLogger +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+ErrorStyle +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+ErrorWithSuggestions +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+Exiter +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+Experimental +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+InternalError +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+LibraryUseOnly +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+NumberedError +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+OperationResult +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+OperationResult`1[T] +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+PhasedDiagnostic +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+PossibleUnverifiableCode +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+ReportedError +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+StopProcessingExn +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+TrackErrorsBuilder +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+UnresolvedPathReference +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+UnresolvedReferenceError +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+UnresolvedReferenceNoRange +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+UserCompilerMessage +FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+WrappedError +FSharp.Compiler.ErrorLogger: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit] NoSuggestions +FSharp.Compiler.ErrorLogger: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit] get_NoSuggestions() +FSharp.Compiler.ErrorLogger: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.Exception]] CheckNoErrorsAndGetWarnings[a](OperationResult`1) +FSharp.Compiler.ErrorLogger: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |StopProcessing|_|(System.Exception) +FSharp.Compiler.ErrorLogger: OperationResult`1 AtLeastOneD[a](Microsoft.FSharp.Core.FSharpFunc`2[a,FSharp.Compiler.ErrorLogger+OperationResult`1[System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.ErrorLogger: OperationResult`1 CompleteD +FSharp.Compiler.ErrorLogger: OperationResult`1 ErrorD[a](System.Exception) +FSharp.Compiler.ErrorLogger: OperationResult`1 Iterate2D[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,FSharp.Compiler.ErrorLogger+OperationResult`1[Microsoft.FSharp.Core.Unit]]], Microsoft.FSharp.Collections.FSharpList`1[a], Microsoft.FSharp.Collections.FSharpList`1[b]) +FSharp.Compiler.ErrorLogger: OperationResult`1 IterateD[a](Microsoft.FSharp.Core.FSharpFunc`2[a,FSharp.Compiler.ErrorLogger+OperationResult`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.ErrorLogger: OperationResult`1 IterateIdxD[a](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[a,FSharp.Compiler.ErrorLogger+OperationResult`1[Microsoft.FSharp.Core.Unit]]], Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.ErrorLogger: OperationResult`1 MapD[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,FSharp.Compiler.ErrorLogger+OperationResult`1[b]], Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.ErrorLogger: OperationResult`1 OptionD[a](Microsoft.FSharp.Core.FSharpFunc`2[a,FSharp.Compiler.ErrorLogger+OperationResult`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[a]) +FSharp.Compiler.ErrorLogger: OperationResult`1 RepeatWhileD(Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,FSharp.Compiler.ErrorLogger+OperationResult`1[System.Boolean]]) +FSharp.Compiler.ErrorLogger: OperationResult`1 ResultD[a](a) +FSharp.Compiler.ErrorLogger: OperationResult`1 TryD[a](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.ErrorLogger+OperationResult`1[a]], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,FSharp.Compiler.ErrorLogger+OperationResult`1[a]]) +FSharp.Compiler.ErrorLogger: OperationResult`1 WarnD(System.Exception) +FSharp.Compiler.ErrorLogger: OperationResult`1 WhileD(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.ErrorLogger+OperationResult`1[Microsoft.FSharp.Core.Unit]]) +FSharp.Compiler.ErrorLogger: OperationResult`1 get_CompleteD() +FSharp.Compiler.ErrorLogger: OperationResult`1 op_PlusPlus[a,b](OperationResult`1, Microsoft.FSharp.Core.FSharpFunc`2[a,FSharp.Compiler.ErrorLogger+OperationResult`1[b]]) +FSharp.Compiler.ErrorLogger: System.Exception AttachRange(range, System.Exception) +FSharp.Compiler.ErrorLogger: System.Exception StopProcessing[T]() +FSharp.Compiler.ErrorLogger: System.Exception findOriginalException(System.Exception) +FSharp.Compiler.ErrorLogger: System.IDisposable PushThreadBuildPhaseUntilUnwind(BuildPhase) +FSharp.Compiler.ErrorLogger: System.String NewlineifyErrorString(System.String) +FSharp.Compiler.ErrorLogger: System.String NormalizeErrorString(System.String) +FSharp.Compiler.ErrorLogger: System.String get_stringThatIsAProxyForANewlineInFlatErrors() +FSharp.Compiler.ErrorLogger: System.String stringThatIsAProxyForANewlineInFlatErrors +FSharp.Compiler.ErrorLogger: TrackErrorsBuilder get_trackErrors() +FSharp.Compiler.ErrorLogger: TrackErrorsBuilder trackErrors +FSharp.Compiler.ErrorLogger: Void RaiseOperationResult(OperationResult`1) +FSharp.Compiler.ErrorLogger: Void SetThreadBuildPhaseNoUnwind(BuildPhase) +FSharp.Compiler.ErrorLogger: Void SetThreadErrorLoggerNoUnwind(ErrorLogger) +FSharp.Compiler.ErrorLogger: Void deprecatedOperator(range) +FSharp.Compiler.ErrorLogger: Void deprecatedWithError(System.String, range) +FSharp.Compiler.ErrorLogger: Void diagnosticSink(PhasedDiagnostic, Boolean) +FSharp.Compiler.ErrorLogger: Void errorR(System.Exception) +FSharp.Compiler.ErrorLogger: Void errorRecovery(System.Exception, range) +FSharp.Compiler.ErrorLogger: Void errorRecoveryNoRange(System.Exception) +FSharp.Compiler.ErrorLogger: Void errorSink(PhasedDiagnostic) +FSharp.Compiler.ErrorLogger: Void libraryOnlyError(range) +FSharp.Compiler.ErrorLogger: Void libraryOnlyWarning(range) +FSharp.Compiler.ErrorLogger: Void mlCompatWarning(System.String, range) +FSharp.Compiler.ErrorLogger: Void set_reportLibraryOnlyFeatures(Boolean) +FSharp.Compiler.ErrorLogger: Void stopProcessingRecovery(System.Exception, range) +FSharp.Compiler.ErrorLogger: Void warnSink(PhasedDiagnostic) +FSharp.Compiler.ErrorLogger: Void warning(System.Exception) +FSharp.Compiler.ErrorLogger: a CommitOperationResult[a](OperationResult`1) +FSharp.Compiler.ErrorLogger: a conditionallySuppressErrorReporting[a](Boolean, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,a]) +FSharp.Compiler.ErrorLogger: a error[a](System.Exception) +FSharp.Compiler.ErrorLogger: a protectAssemblyExplorationF[a](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.String,System.String],a], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,a]) +FSharp.Compiler.ErrorLogger: a protectAssemblyExplorationNoReraise[a](a, a, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,a]) +FSharp.Compiler.ErrorLogger: a protectAssemblyExploration[a](a, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,a]) +FSharp.Compiler.ErrorLogger: a report[a](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,a]) +FSharp.Compiler.ErrorLogger: a simulateError[a](PhasedDiagnostic) +FSharp.Compiler.ErrorLogger: a suppressErrorReporting[a](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,a]) FSharp.Compiler.Interactive.Shell+CompilerInputStream: Boolean CanRead FSharp.Compiler.Interactive.Shell+CompilerInputStream: Boolean CanSeek FSharp.Compiler.Interactive.Shell+CompilerInputStream: Boolean CanWrite @@ -4119,12 +19031,12 @@ FSharp.Compiler.Interactive.Shell+CompilerOutputStream: Void Flush() FSharp.Compiler.Interactive.Shell+CompilerOutputStream: Void SetLength(Int64) FSharp.Compiler.Interactive.Shell+CompilerOutputStream: Void Write(Byte[], Int32, Int32) FSharp.Compiler.Interactive.Shell+CompilerOutputStream: Void set_Position(Int64) -FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.CodeAnalysis.FSharpSymbolUse SymbolUse -FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.CodeAnalysis.FSharpSymbolUse get_SymbolUse() -FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration ImplementationDeclaration -FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration get_ImplementationDeclaration() -FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.Symbols.FSharpSymbol Symbol -FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.Symbols.FSharpSymbol get_Symbol() +FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration ImplementationDeclaration +FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration get_ImplementationDeclaration() +FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.SourceCodeServices.FSharpSymbol Symbol +FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.SourceCodeServices.FSharpSymbol get_Symbol() +FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.SourceCodeServices.FSharpSymbolUse SymbolUse +FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.SourceCodeServices.FSharpSymbolUse get_SymbolUse() FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Interactive.Shell+FsiValue] FsiValue FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Interactive.Shell+FsiValue] get_FsiValue() FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: System.String Name @@ -4133,20 +19045,21 @@ FSharp.Compiler.Interactive.Shell+FsiBoundValue: FsiValue Value FSharp.Compiler.Interactive.Shell+FsiBoundValue: FsiValue get_Value() FSharp.Compiler.Interactive.Shell+FsiBoundValue: System.String Name FSharp.Compiler.Interactive.Shell+FsiBoundValue: System.String get_Name() -FSharp.Compiler.Interactive.Shell+FsiCompilationException: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Diagnostics.FSharpDiagnostic[]] ErrorInfos -FSharp.Compiler.Interactive.Shell+FsiCompilationException: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Diagnostics.FSharpDiagnostic[]] get_ErrorInfos() -FSharp.Compiler.Interactive.Shell+FsiCompilationException: Void .ctor(System.String, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Diagnostics.FSharpDiagnostic[]]) +FSharp.Compiler.Interactive.Shell+FsiCompilationException: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[]] ErrorInfos +FSharp.Compiler.Interactive.Shell+FsiCompilationException: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[]] get_ErrorInfos() +FSharp.Compiler.Interactive.Shell+FsiCompilationException: Void .ctor(System.String, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[]]) FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: Boolean IsGui FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: Boolean get_IsGui() -FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FSharp.Compiler.CodeAnalysis.FSharpChecker InteractiveChecker -FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FSharp.Compiler.CodeAnalysis.FSharpChecker get_InteractiveChecker() -FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FSharp.Compiler.Symbols.FSharpAssemblySignature CurrentPartialAssemblySignature -FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FSharp.Compiler.Symbols.FSharpAssemblySignature get_CurrentPartialAssemblySignature() -FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FsiEvaluationSession Create(FsiEvaluationSessionHostConfig, System.String[], System.IO.TextReader, System.IO.TextWriter, System.IO.TextWriter, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.LegacyReferenceResolver]) +FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature CurrentPartialAssemblySignature +FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature get_CurrentPartialAssemblySignature() +FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FSharp.Compiler.SourceCodeServices.FSharpChecker InteractiveChecker +FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FSharp.Compiler.SourceCodeServices.FSharpChecker get_InteractiveChecker() +FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FsiEvaluationSession Create(FsiEvaluationSessionHostConfig, System.String[], System.IO.TextReader, System.IO.TextWriter, System.IO.TextWriter, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.ReferenceResolver+Resolver]) FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FsiEvaluationSessionHostConfig GetDefaultConfiguration() FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FsiEvaluationSessionHostConfig GetDefaultConfiguration(System.Object) FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FsiEvaluationSessionHostConfig GetDefaultConfiguration(System.Object, Boolean) FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Interactive.Shell+FsiBoundValue] GetBoundValues() +FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpParseFileResults,FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults,FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults]] ParseAndCheckInteraction(System.String) FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit] PartialAssemblySignatureUpdated FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit] get_PartialAssemblySignatureUpdated() FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`3[System.Object,System.Type,System.String]],System.Tuple`3[System.Object,System.Type,System.String]] ValueBound @@ -4159,10 +19072,9 @@ FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.Collections.Gener FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.Reflection.Assembly DynamicAssembly FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.Reflection.Assembly get_DynamicAssembly() FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.String FormatValue(System.Object, System.Type) -FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.Tuple`2[Microsoft.FSharp.Core.FSharpChoice`2[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Interactive.Shell+FsiValue],System.Exception],FSharp.Compiler.Diagnostics.FSharpDiagnostic[]] EvalExpressionNonThrowing(System.String) -FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.Tuple`2[Microsoft.FSharp.Core.FSharpChoice`2[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Interactive.Shell+FsiValue],System.Exception],FSharp.Compiler.Diagnostics.FSharpDiagnostic[]] EvalInteractionNonThrowing(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.Tuple`2[Microsoft.FSharp.Core.FSharpChoice`2[Microsoft.FSharp.Core.Unit,System.Exception],FSharp.Compiler.Diagnostics.FSharpDiagnostic[]] EvalScriptNonThrowing(System.String) -FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.Tuple`3[FSharp.Compiler.CodeAnalysis.FSharpParseFileResults,FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults,FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults] ParseAndCheckInteraction(System.String) +FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.Tuple`2[Microsoft.FSharp.Core.FSharpChoice`2[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Interactive.Shell+FsiValue],System.Exception],FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[]] EvalExpressionNonThrowing(System.String) +FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.Tuple`2[Microsoft.FSharp.Core.FSharpChoice`2[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Interactive.Shell+FsiValue],System.Exception],FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[]] EvalInteractionNonThrowing(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.Tuple`2[Microsoft.FSharp.Core.FSharpChoice`2[Microsoft.FSharp.Core.Unit,System.Exception],FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[]] EvalScriptNonThrowing(System.String) FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: Void AddBoundValue(System.String, System.Object) FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: Void EvalInteraction(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: Void EvalScript(System.String) @@ -4200,8 +19112,6 @@ FSharp.Compiler.Interactive.Shell+FsiEvaluationSessionHostConfig: Void .ctor() FSharp.Compiler.Interactive.Shell+FsiEvaluationSessionHostConfig: Void EventLoopScheduleRestart() FSharp.Compiler.Interactive.Shell+FsiEvaluationSessionHostConfig: Void ReportUserCommandLineArgs(System.String[]) FSharp.Compiler.Interactive.Shell+FsiEvaluationSessionHostConfig: Void StartServer(System.String) -FSharp.Compiler.Interactive.Shell+FsiValue: FSharp.Compiler.Symbols.FSharpType FSharpType -FSharp.Compiler.Interactive.Shell+FsiValue: FSharp.Compiler.Symbols.FSharpType get_FSharpType() FSharp.Compiler.Interactive.Shell+FsiValue: System.Object ReflectionValue FSharp.Compiler.Interactive.Shell+FsiValue: System.Object get_ReflectionValue() FSharp.Compiler.Interactive.Shell+FsiValue: System.Type ReflectionType @@ -4257,4653 +19167,22674 @@ FSharp.Compiler.Interactive.Shell: FSharp.Compiler.Interactive.Shell+FsiEvaluati FSharp.Compiler.Interactive.Shell: FSharp.Compiler.Interactive.Shell+FsiEvaluationSessionHostConfig FSharp.Compiler.Interactive.Shell: FSharp.Compiler.Interactive.Shell+FsiValue FSharp.Compiler.Interactive.Shell: FSharp.Compiler.Interactive.Shell+Settings -FSharp.Compiler.Symbols.FSharpAbstractParameter -FSharp.Compiler.Symbols.FSharpAbstractParameter: Boolean IsInArg -FSharp.Compiler.Symbols.FSharpAbstractParameter: Boolean IsOptionalArg -FSharp.Compiler.Symbols.FSharpAbstractParameter: Boolean IsOutArg -FSharp.Compiler.Symbols.FSharpAbstractParameter: Boolean get_IsInArg() -FSharp.Compiler.Symbols.FSharpAbstractParameter: Boolean get_IsOptionalArg() -FSharp.Compiler.Symbols.FSharpAbstractParameter: Boolean get_IsOutArg() -FSharp.Compiler.Symbols.FSharpAbstractParameter: FSharp.Compiler.Symbols.FSharpType Type -FSharp.Compiler.Symbols.FSharpAbstractParameter: FSharp.Compiler.Symbols.FSharpType get_Type() -FSharp.Compiler.Symbols.FSharpAbstractParameter: Microsoft.FSharp.Core.FSharpOption`1[System.String] Name -FSharp.Compiler.Symbols.FSharpAbstractParameter: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Name() -FSharp.Compiler.Symbols.FSharpAbstractParameter: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] Attributes -FSharp.Compiler.Symbols.FSharpAbstractParameter: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] get_Attributes() -FSharp.Compiler.Symbols.FSharpAbstractSignature -FSharp.Compiler.Symbols.FSharpAbstractSignature: FSharp.Compiler.Symbols.FSharpType AbstractReturnType -FSharp.Compiler.Symbols.FSharpAbstractSignature: FSharp.Compiler.Symbols.FSharpType DeclaringType -FSharp.Compiler.Symbols.FSharpAbstractSignature: FSharp.Compiler.Symbols.FSharpType get_AbstractReturnType() -FSharp.Compiler.Symbols.FSharpAbstractSignature: FSharp.Compiler.Symbols.FSharpType get_DeclaringType() -FSharp.Compiler.Symbols.FSharpAbstractSignature: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpGenericParameter] DeclaringTypeGenericParameters -FSharp.Compiler.Symbols.FSharpAbstractSignature: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpGenericParameter] MethodGenericParameters -FSharp.Compiler.Symbols.FSharpAbstractSignature: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpGenericParameter] get_DeclaringTypeGenericParameters() -FSharp.Compiler.Symbols.FSharpAbstractSignature: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpGenericParameter] get_MethodGenericParameters() -FSharp.Compiler.Symbols.FSharpAbstractSignature: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAbstractParameter]] AbstractArguments -FSharp.Compiler.Symbols.FSharpAbstractSignature: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAbstractParameter]] get_AbstractArguments() -FSharp.Compiler.Symbols.FSharpAbstractSignature: System.String Name -FSharp.Compiler.Symbols.FSharpAbstractSignature: System.String get_Name() -FSharp.Compiler.Symbols.FSharpAccessibility -FSharp.Compiler.Symbols.FSharpAccessibility: Boolean IsInternal -FSharp.Compiler.Symbols.FSharpAccessibility: Boolean IsPrivate -FSharp.Compiler.Symbols.FSharpAccessibility: Boolean IsProtected -FSharp.Compiler.Symbols.FSharpAccessibility: Boolean IsPublic -FSharp.Compiler.Symbols.FSharpAccessibility: Boolean get_IsInternal() -FSharp.Compiler.Symbols.FSharpAccessibility: Boolean get_IsPrivate() -FSharp.Compiler.Symbols.FSharpAccessibility: Boolean get_IsProtected() -FSharp.Compiler.Symbols.FSharpAccessibility: Boolean get_IsPublic() -FSharp.Compiler.Symbols.FSharpAccessibility: System.String ToString() -FSharp.Compiler.Symbols.FSharpAccessibilityRights -FSharp.Compiler.Symbols.FSharpActivePatternCase -FSharp.Compiler.Symbols.FSharpActivePatternCase: FSharp.Compiler.Symbols.FSharpActivePatternGroup Group -FSharp.Compiler.Symbols.FSharpActivePatternCase: FSharp.Compiler.Symbols.FSharpActivePatternGroup get_Group() -FSharp.Compiler.Symbols.FSharpActivePatternCase: FSharp.Compiler.Symbols.FSharpXmlDoc XmlDoc -FSharp.Compiler.Symbols.FSharpActivePatternCase: FSharp.Compiler.Symbols.FSharpXmlDoc get_XmlDoc() -FSharp.Compiler.Symbols.FSharpActivePatternCase: FSharp.Compiler.Text.Range DeclarationLocation -FSharp.Compiler.Symbols.FSharpActivePatternCase: FSharp.Compiler.Text.Range get_DeclarationLocation() -FSharp.Compiler.Symbols.FSharpActivePatternCase: Int32 Index -FSharp.Compiler.Symbols.FSharpActivePatternCase: Int32 get_Index() -FSharp.Compiler.Symbols.FSharpActivePatternCase: System.String Name -FSharp.Compiler.Symbols.FSharpActivePatternCase: System.String XmlDocSig -FSharp.Compiler.Symbols.FSharpActivePatternCase: System.String get_Name() -FSharp.Compiler.Symbols.FSharpActivePatternCase: System.String get_XmlDocSig() -FSharp.Compiler.Symbols.FSharpActivePatternGroup -FSharp.Compiler.Symbols.FSharpActivePatternGroup: Boolean IsTotal -FSharp.Compiler.Symbols.FSharpActivePatternGroup: Boolean get_IsTotal() -FSharp.Compiler.Symbols.FSharpActivePatternGroup: FSharp.Compiler.Symbols.FSharpType OverallType -FSharp.Compiler.Symbols.FSharpActivePatternGroup: FSharp.Compiler.Symbols.FSharpType get_OverallType() -FSharp.Compiler.Symbols.FSharpActivePatternGroup: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] DeclaringEntity -FSharp.Compiler.Symbols.FSharpActivePatternGroup: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] get_DeclaringEntity() -FSharp.Compiler.Symbols.FSharpActivePatternGroup: Microsoft.FSharp.Core.FSharpOption`1[System.String] Name -FSharp.Compiler.Symbols.FSharpActivePatternGroup: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Name() -FSharp.Compiler.Symbols.FSharpActivePatternGroup: System.Collections.Generic.IList`1[System.String] Names -FSharp.Compiler.Symbols.FSharpActivePatternGroup: System.Collections.Generic.IList`1[System.String] get_Names() -FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails -FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails: FSharp.Compiler.Symbols.FSharpAssembly Assembly -FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails: FSharp.Compiler.Symbols.FSharpAssembly get_Assembly() -FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails: Microsoft.FSharp.Collections.FSharpList`1[System.String] EnclosingCompiledTypeNames -FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_EnclosingCompiledTypeNames() -FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails: System.String CompiledName -FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails: System.String get_CompiledName() -FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails: System.String[] SortedFieldNames -FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails: System.String[] get_SortedFieldNames() -FSharp.Compiler.Symbols.FSharpAssembly -FSharp.Compiler.Symbols.FSharpAssembly: Boolean IsProviderGenerated -FSharp.Compiler.Symbols.FSharpAssembly: Boolean get_IsProviderGenerated() -FSharp.Compiler.Symbols.FSharpAssembly: FSharp.Compiler.Symbols.FSharpAssemblySignature Contents -FSharp.Compiler.Symbols.FSharpAssembly: FSharp.Compiler.Symbols.FSharpAssemblySignature get_Contents() -FSharp.Compiler.Symbols.FSharpAssembly: Microsoft.FSharp.Core.FSharpOption`1[System.String] FileName -FSharp.Compiler.Symbols.FSharpAssembly: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_FileName() -FSharp.Compiler.Symbols.FSharpAssembly: System.String QualifiedName -FSharp.Compiler.Symbols.FSharpAssembly: System.String SimpleName -FSharp.Compiler.Symbols.FSharpAssembly: System.String ToString() -FSharp.Compiler.Symbols.FSharpAssembly: System.String get_QualifiedName() -FSharp.Compiler.Symbols.FSharpAssembly: System.String get_SimpleName() -FSharp.Compiler.Symbols.FSharpAssemblyContents -FSharp.Compiler.Symbols.FSharpAssemblyContents: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpImplementationFileContents] ImplementationFiles -FSharp.Compiler.Symbols.FSharpAssemblyContents: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpImplementationFileContents] get_ImplementationFiles() -FSharp.Compiler.Symbols.FSharpAssemblySignature -FSharp.Compiler.Symbols.FSharpAssemblySignature: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] FindEntityByPath(Microsoft.FSharp.Collections.FSharpList`1[System.String]) -FSharp.Compiler.Symbols.FSharpAssemblySignature: System.Collections.Generic.IEnumerable`1[FSharp.Compiler.Symbols.FSharpEntity] TryGetEntities() -FSharp.Compiler.Symbols.FSharpAssemblySignature: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] Attributes -FSharp.Compiler.Symbols.FSharpAssemblySignature: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] get_Attributes() -FSharp.Compiler.Symbols.FSharpAssemblySignature: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpEntity] Entities -FSharp.Compiler.Symbols.FSharpAssemblySignature: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpEntity] get_Entities() -FSharp.Compiler.Symbols.FSharpAssemblySignature: System.String ToString() -FSharp.Compiler.Symbols.FSharpAttribute -FSharp.Compiler.Symbols.FSharpAttribute: Boolean IsAttribute[T]() -FSharp.Compiler.Symbols.FSharpAttribute: Boolean IsUnresolved -FSharp.Compiler.Symbols.FSharpAttribute: Boolean get_IsUnresolved() -FSharp.Compiler.Symbols.FSharpAttribute: FSharp.Compiler.Symbols.FSharpEntity AttributeType -FSharp.Compiler.Symbols.FSharpAttribute: FSharp.Compiler.Symbols.FSharpEntity get_AttributeType() -FSharp.Compiler.Symbols.FSharpAttribute: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Symbols.FSharpAttribute: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Symbols.FSharpAttribute: System.Collections.Generic.IList`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpType,System.Object]] ConstructorArguments -FSharp.Compiler.Symbols.FSharpAttribute: System.Collections.Generic.IList`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpType,System.Object]] get_ConstructorArguments() -FSharp.Compiler.Symbols.FSharpAttribute: System.Collections.Generic.IList`1[System.Tuple`4[FSharp.Compiler.Symbols.FSharpType,System.String,System.Boolean,System.Object]] NamedArguments -FSharp.Compiler.Symbols.FSharpAttribute: System.Collections.Generic.IList`1[System.Tuple`4[FSharp.Compiler.Symbols.FSharpType,System.String,System.Boolean,System.Object]] get_NamedArguments() -FSharp.Compiler.Symbols.FSharpAttribute: System.String Format(FSharp.Compiler.Symbols.FSharpDisplayContext) -FSharp.Compiler.Symbols.FSharpAttribute: System.String ToString() -FSharp.Compiler.Symbols.FSharpDelegateSignature -FSharp.Compiler.Symbols.FSharpDelegateSignature: FSharp.Compiler.Symbols.FSharpType DelegateReturnType -FSharp.Compiler.Symbols.FSharpDelegateSignature: FSharp.Compiler.Symbols.FSharpType get_DelegateReturnType() -FSharp.Compiler.Symbols.FSharpDelegateSignature: System.Collections.Generic.IList`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[System.String],FSharp.Compiler.Symbols.FSharpType]] DelegateArguments -FSharp.Compiler.Symbols.FSharpDelegateSignature: System.Collections.Generic.IList`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[System.String],FSharp.Compiler.Symbols.FSharpType]] get_DelegateArguments() -FSharp.Compiler.Symbols.FSharpDelegateSignature: System.String ToString() -FSharp.Compiler.Symbols.FSharpDisplayContext -FSharp.Compiler.Symbols.FSharpDisplayContext: FSharp.Compiler.Symbols.FSharpDisplayContext Empty -FSharp.Compiler.Symbols.FSharpDisplayContext: FSharp.Compiler.Symbols.FSharpDisplayContext WithPrefixGenericParameters() -FSharp.Compiler.Symbols.FSharpDisplayContext: FSharp.Compiler.Symbols.FSharpDisplayContext WithShortTypeNames(Boolean) -FSharp.Compiler.Symbols.FSharpDisplayContext: FSharp.Compiler.Symbols.FSharpDisplayContext WithSuffixGenericParameters() -FSharp.Compiler.Symbols.FSharpDisplayContext: FSharp.Compiler.Symbols.FSharpDisplayContext get_Empty() -FSharp.Compiler.Symbols.FSharpEntity -FSharp.Compiler.Symbols.FSharpEntity: Boolean Equals(System.Object) -FSharp.Compiler.Symbols.FSharpEntity: Boolean HasAssemblyCodeRepresentation -FSharp.Compiler.Symbols.FSharpEntity: Boolean HasFSharpModuleSuffix -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsAbstractClass -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsArrayType -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsAttributeType -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsByRef -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsClass -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsDelegate -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsEnum -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsFSharp -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsFSharpAbbreviation -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsFSharpExceptionDeclaration -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsFSharpModule -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsFSharpRecord -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsFSharpUnion -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsInterface -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsMeasure -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsNamespace -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsOpaque -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsProvided -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsProvidedAndErased -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsProvidedAndGenerated -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsStaticInstantiation -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsUnresolved -FSharp.Compiler.Symbols.FSharpEntity: Boolean IsValueType -FSharp.Compiler.Symbols.FSharpEntity: Boolean UsesPrefixDisplay -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_HasAssemblyCodeRepresentation() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_HasFSharpModuleSuffix() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsAbstractClass() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsArrayType() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsAttributeType() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsByRef() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsClass() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsDelegate() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsEnum() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsFSharp() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsFSharpAbbreviation() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsFSharpExceptionDeclaration() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsFSharpModule() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsFSharpRecord() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsFSharpUnion() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsInterface() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsMeasure() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsNamespace() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsOpaque() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsProvided() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsProvidedAndErased() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsProvidedAndGenerated() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsStaticInstantiation() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsUnresolved() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsValueType() -FSharp.Compiler.Symbols.FSharpEntity: Boolean get_UsesPrefixDisplay() -FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Symbols.FSharpAccessibility Accessibility -FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Symbols.FSharpAccessibility RepresentationAccessibility -FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Symbols.FSharpAccessibility get_Accessibility() -FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Symbols.FSharpAccessibility get_RepresentationAccessibility() -FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Symbols.FSharpDelegateSignature FSharpDelegateSignature -FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Symbols.FSharpDelegateSignature get_FSharpDelegateSignature() -FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Symbols.FSharpType AbbreviatedType -FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Symbols.FSharpType get_AbbreviatedType() -FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Symbols.FSharpXmlDoc XmlDoc -FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Symbols.FSharpXmlDoc get_XmlDoc() -FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Text.Range DeclarationLocation -FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Text.Range get_DeclarationLocation() -FSharp.Compiler.Symbols.FSharpEntity: Int32 ArrayRank -FSharp.Compiler.Symbols.FSharpEntity: Int32 GetHashCode() -FSharp.Compiler.Symbols.FSharpEntity: Int32 get_ArrayRank() -FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpActivePatternCase] ActivePatternCases -FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpActivePatternCase] get_ActivePatternCases() -FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Collections.FSharpList`1[System.String] AllCompilationPaths -FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_AllCompilationPaths() -FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] DeclaringEntity -FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] get_DeclaringEntity() -FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType] BaseType -FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType] get_BaseType() -FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.ISourceText] TryGetMetadataText() -FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] Namespace -FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] TryFullName -FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] TryGetFullCompiledName() -FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] TryGetFullDisplayName() -FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] TryGetFullName() -FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Namespace() -FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_TryFullName() -FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IEnumerable`1[FSharp.Compiler.Symbols.FSharpEntity] GetPublicNestedEntities() -FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] Attributes -FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] get_Attributes() -FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpEntity] NestedEntities -FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpEntity] get_NestedEntities() -FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpField] FSharpFields -FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpField] get_FSharpFields() -FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpGenericParameter] GenericParameters -FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpGenericParameter] get_GenericParameters() -FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue] MembersFunctionsAndValues -FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue] TryGetMembersFunctionsAndValues() -FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue] get_MembersFunctionsAndValues() -FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpStaticParameter] StaticParameters -FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpStaticParameter] get_StaticParameters() -FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] AllInterfaces -FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] DeclaredInterfaces -FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] get_AllInterfaces() -FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] get_DeclaredInterfaces() -FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpUnionCase] UnionCases -FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpUnionCase] get_UnionCases() -FSharp.Compiler.Symbols.FSharpEntity: System.String AccessPath -FSharp.Compiler.Symbols.FSharpEntity: System.String CompiledName -FSharp.Compiler.Symbols.FSharpEntity: System.String DisplayName -FSharp.Compiler.Symbols.FSharpEntity: System.String FullName -FSharp.Compiler.Symbols.FSharpEntity: System.String LogicalName -FSharp.Compiler.Symbols.FSharpEntity: System.String QualifiedName -FSharp.Compiler.Symbols.FSharpEntity: System.String ToString() -FSharp.Compiler.Symbols.FSharpEntity: System.String XmlDocSig -FSharp.Compiler.Symbols.FSharpEntity: System.String get_AccessPath() -FSharp.Compiler.Symbols.FSharpEntity: System.String get_CompiledName() -FSharp.Compiler.Symbols.FSharpEntity: System.String get_DisplayName() -FSharp.Compiler.Symbols.FSharpEntity: System.String get_FullName() -FSharp.Compiler.Symbols.FSharpEntity: System.String get_LogicalName() -FSharp.Compiler.Symbols.FSharpEntity: System.String get_QualifiedName() -FSharp.Compiler.Symbols.FSharpEntity: System.String get_XmlDocSig() -FSharp.Compiler.Symbols.FSharpExpr -FSharp.Compiler.Symbols.FSharpExpr: FSharp.Compiler.Symbols.FSharpType Type -FSharp.Compiler.Symbols.FSharpExpr: FSharp.Compiler.Symbols.FSharpType get_Type() -FSharp.Compiler.Symbols.FSharpExpr: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Symbols.FSharpExpr: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Symbols.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr] ImmediateSubExpressions -FSharp.Compiler.Symbols.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr] get_ImmediateSubExpressions() -FSharp.Compiler.Symbols.FSharpExpr: System.String ToString() -FSharp.Compiler.Symbols.FSharpExprPatterns -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpExpr] |AddressOf|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpExpr] |Quote|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue] |Value|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType] |BaseValue|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType] |DefaultValue|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType] |ThisValue|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] |WitnessArg|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpExpr]] |AddressSet|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpExpr]] |Sequential|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpExpr]] |TryFinally|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpExpr]] |WhileLoop|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpType]] |UnionCaseTag|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpExpr,Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue],FSharp.Compiler.Symbols.FSharpExpr]]]] |DecisionTree|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue,FSharp.Compiler.Symbols.FSharpExpr]] |Lambda|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue,FSharp.Compiler.Symbols.FSharpExpr]] |ValueSet|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpType,FSharp.Compiler.Symbols.FSharpExpr]] |Coerce|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpType,FSharp.Compiler.Symbols.FSharpExpr]] |NewDelegate|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpType,FSharp.Compiler.Symbols.FSharpExpr]] |TypeTest|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpType,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |NewAnonRecord|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpType,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |NewArray|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpType,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |NewRecord|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpType,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |NewTuple|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpGenericParameter],FSharp.Compiler.Symbols.FSharpExpr]] |TypeLambda|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue,FSharp.Compiler.Symbols.FSharpExpr]],FSharp.Compiler.Symbols.FSharpExpr]] |LetRec|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Int32,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |DecisionTreeSuccess|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Object,FSharp.Compiler.Symbols.FSharpType]] |Const|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Tuple`2[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue,FSharp.Compiler.Symbols.FSharpExpr],FSharp.Compiler.Symbols.FSharpExpr]] |Let|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpExpr]] |IfThenElse|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpType,FSharp.Compiler.Symbols.FSharpUnionCase]] |UnionCaseTest|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpType,System.Int32]] |AnonRecordGet|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.Symbols.FSharpExpr,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |Application|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |NewObject|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.Symbols.FSharpType,FSharp.Compiler.Symbols.FSharpUnionCase,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |NewUnionCase|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.Symbols.FSharpType,System.Int32,FSharp.Compiler.Symbols.FSharpExpr]] |TupleGet|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpExpr],FSharp.Compiler.Symbols.FSharpType,FSharp.Compiler.Symbols.FSharpField]] |FSharpFieldGet|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpExpr],FSharp.Compiler.Symbols.FSharpType,System.String]] |ILFieldGet|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.String,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |ILAsm|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpExpr,System.Boolean]] |FastIntegerForLoop|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpType,FSharp.Compiler.Symbols.FSharpUnionCase,FSharp.Compiler.Symbols.FSharpField]] |UnionCaseGet|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[FSharp.Compiler.Symbols.FSharpType,FSharp.Compiler.Symbols.FSharpExpr,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpObjectExprOverride],Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpType,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpObjectExprOverride]]]]] |ObjectExpr|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpExpr],FSharp.Compiler.Symbols.FSharpType,FSharp.Compiler.Symbols.FSharpField,FSharp.Compiler.Symbols.FSharpExpr]] |FSharpFieldSet|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpExpr],FSharp.Compiler.Symbols.FSharpType,System.String,FSharp.Compiler.Symbols.FSharpExpr]] |ILFieldSet|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue,FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue,FSharp.Compiler.Symbols.FSharpExpr]] |TryWith|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpType,FSharp.Compiler.Symbols.FSharpUnionCase,FSharp.Compiler.Symbols.FSharpField,FSharp.Compiler.Symbols.FSharpExpr]] |UnionCaseSet|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpExpr],FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |Call|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`6[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType],System.String,FSharp.Compiler.Syntax.SynMemberFlags,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |TraitCall|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`6[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpExpr],FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |CallWithWitnesses|_|(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpField -FSharp.Compiler.Symbols.FSharpField: Boolean Equals(System.Object) -FSharp.Compiler.Symbols.FSharpField: Boolean IsAnonRecordField -FSharp.Compiler.Symbols.FSharpField: Boolean IsCompilerGenerated -FSharp.Compiler.Symbols.FSharpField: Boolean IsDefaultValue -FSharp.Compiler.Symbols.FSharpField: Boolean IsLiteral -FSharp.Compiler.Symbols.FSharpField: Boolean IsMutable -FSharp.Compiler.Symbols.FSharpField: Boolean IsNameGenerated -FSharp.Compiler.Symbols.FSharpField: Boolean IsStatic -FSharp.Compiler.Symbols.FSharpField: Boolean IsUnionCaseField -FSharp.Compiler.Symbols.FSharpField: Boolean IsUnresolved -FSharp.Compiler.Symbols.FSharpField: Boolean IsVolatile -FSharp.Compiler.Symbols.FSharpField: Boolean get_IsAnonRecordField() -FSharp.Compiler.Symbols.FSharpField: Boolean get_IsCompilerGenerated() -FSharp.Compiler.Symbols.FSharpField: Boolean get_IsDefaultValue() -FSharp.Compiler.Symbols.FSharpField: Boolean get_IsLiteral() -FSharp.Compiler.Symbols.FSharpField: Boolean get_IsMutable() -FSharp.Compiler.Symbols.FSharpField: Boolean get_IsNameGenerated() -FSharp.Compiler.Symbols.FSharpField: Boolean get_IsStatic() -FSharp.Compiler.Symbols.FSharpField: Boolean get_IsUnionCaseField() -FSharp.Compiler.Symbols.FSharpField: Boolean get_IsUnresolved() -FSharp.Compiler.Symbols.FSharpField: Boolean get_IsVolatile() -FSharp.Compiler.Symbols.FSharpField: FSharp.Compiler.Symbols.FSharpAccessibility Accessibility -FSharp.Compiler.Symbols.FSharpField: FSharp.Compiler.Symbols.FSharpAccessibility get_Accessibility() -FSharp.Compiler.Symbols.FSharpField: FSharp.Compiler.Symbols.FSharpType FieldType -FSharp.Compiler.Symbols.FSharpField: FSharp.Compiler.Symbols.FSharpType get_FieldType() -FSharp.Compiler.Symbols.FSharpField: FSharp.Compiler.Symbols.FSharpXmlDoc XmlDoc -FSharp.Compiler.Symbols.FSharpField: FSharp.Compiler.Symbols.FSharpXmlDoc get_XmlDoc() -FSharp.Compiler.Symbols.FSharpField: FSharp.Compiler.Text.Range DeclarationLocation -FSharp.Compiler.Symbols.FSharpField: FSharp.Compiler.Text.Range get_DeclarationLocation() -FSharp.Compiler.Symbols.FSharpField: Int32 GetHashCode() -FSharp.Compiler.Symbols.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] DeclaringEntity -FSharp.Compiler.Symbols.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] get_DeclaringEntity() -FSharp.Compiler.Symbols.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpUnionCase] DeclaringUnionCase -FSharp.Compiler.Symbols.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpUnionCase] get_DeclaringUnionCase() -FSharp.Compiler.Symbols.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[System.Object] LiteralValue -FSharp.Compiler.Symbols.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[System.Object] get_LiteralValue() -FSharp.Compiler.Symbols.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] FieldAttributes -FSharp.Compiler.Symbols.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] PropertyAttributes -FSharp.Compiler.Symbols.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] get_FieldAttributes() -FSharp.Compiler.Symbols.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] get_PropertyAttributes() -FSharp.Compiler.Symbols.FSharpField: System.String Name -FSharp.Compiler.Symbols.FSharpField: System.String ToString() -FSharp.Compiler.Symbols.FSharpField: System.String XmlDocSig -FSharp.Compiler.Symbols.FSharpField: System.String get_Name() -FSharp.Compiler.Symbols.FSharpField: System.String get_XmlDocSig() -FSharp.Compiler.Symbols.FSharpField: System.Tuple`3[FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails,FSharp.Compiler.Symbols.FSharpType[],System.Int32] AnonRecordFieldDetails -FSharp.Compiler.Symbols.FSharpField: System.Tuple`3[FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails,FSharp.Compiler.Symbols.FSharpType[],System.Int32] get_AnonRecordFieldDetails() -FSharp.Compiler.Symbols.FSharpGenericParameter -FSharp.Compiler.Symbols.FSharpGenericParameter: Boolean Equals(System.Object) -FSharp.Compiler.Symbols.FSharpGenericParameter: Boolean IsCompilerGenerated -FSharp.Compiler.Symbols.FSharpGenericParameter: Boolean IsMeasure -FSharp.Compiler.Symbols.FSharpGenericParameter: Boolean IsSolveAtCompileTime -FSharp.Compiler.Symbols.FSharpGenericParameter: Boolean get_IsCompilerGenerated() -FSharp.Compiler.Symbols.FSharpGenericParameter: Boolean get_IsMeasure() -FSharp.Compiler.Symbols.FSharpGenericParameter: Boolean get_IsSolveAtCompileTime() -FSharp.Compiler.Symbols.FSharpGenericParameter: FSharp.Compiler.Symbols.FSharpXmlDoc XmlDoc -FSharp.Compiler.Symbols.FSharpGenericParameter: FSharp.Compiler.Symbols.FSharpXmlDoc get_XmlDoc() -FSharp.Compiler.Symbols.FSharpGenericParameter: FSharp.Compiler.Text.Range DeclarationLocation -FSharp.Compiler.Symbols.FSharpGenericParameter: FSharp.Compiler.Text.Range get_DeclarationLocation() -FSharp.Compiler.Symbols.FSharpGenericParameter: Int32 GetHashCode() -FSharp.Compiler.Symbols.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] Attributes -FSharp.Compiler.Symbols.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] get_Attributes() -FSharp.Compiler.Symbols.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpGenericParameterConstraint] Constraints -FSharp.Compiler.Symbols.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpGenericParameterConstraint] get_Constraints() -FSharp.Compiler.Symbols.FSharpGenericParameter: System.String Name -FSharp.Compiler.Symbols.FSharpGenericParameter: System.String ToString() -FSharp.Compiler.Symbols.FSharpGenericParameter: System.String get_Name() -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsCoercesToConstraint -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsComparisonConstraint -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsDefaultsToConstraint -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsDelegateConstraint -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsEnumConstraint -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsEqualityConstraint -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsMemberConstraint -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsNonNullableValueTypeConstraint -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsReferenceTypeConstraint -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsRequiresDefaultConstructorConstraint -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsSimpleChoiceConstraint -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsSupportsNullConstraint -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsUnmanagedConstraint -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsCoercesToConstraint() -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsComparisonConstraint() -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsDefaultsToConstraint() -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsDelegateConstraint() -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsEnumConstraint() -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsEqualityConstraint() -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsMemberConstraint() -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsNonNullableValueTypeConstraint() -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsReferenceTypeConstraint() -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsRequiresDefaultConstructorConstraint() -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsSimpleChoiceConstraint() -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsSupportsNullConstraint() -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsUnmanagedConstraint() -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: FSharp.Compiler.Symbols.FSharpGenericParameterDefaultsToConstraint DefaultsToConstraintData -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: FSharp.Compiler.Symbols.FSharpGenericParameterDefaultsToConstraint get_DefaultsToConstraintData() -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: FSharp.Compiler.Symbols.FSharpGenericParameterDelegateConstraint DelegateConstraintData -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: FSharp.Compiler.Symbols.FSharpGenericParameterDelegateConstraint get_DelegateConstraintData() -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint MemberConstraintData -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint get_MemberConstraintData() -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: FSharp.Compiler.Symbols.FSharpType CoercesToTarget -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: FSharp.Compiler.Symbols.FSharpType EnumConstraintTarget -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: FSharp.Compiler.Symbols.FSharpType get_CoercesToTarget() -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: FSharp.Compiler.Symbols.FSharpType get_EnumConstraintTarget() -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] SimpleChoices -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] get_SimpleChoices() -FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: System.String ToString() -FSharp.Compiler.Symbols.FSharpGenericParameterDefaultsToConstraint -FSharp.Compiler.Symbols.FSharpGenericParameterDefaultsToConstraint: FSharp.Compiler.Symbols.FSharpType DefaultsToTarget -FSharp.Compiler.Symbols.FSharpGenericParameterDefaultsToConstraint: FSharp.Compiler.Symbols.FSharpType get_DefaultsToTarget() -FSharp.Compiler.Symbols.FSharpGenericParameterDefaultsToConstraint: Int32 DefaultsToPriority -FSharp.Compiler.Symbols.FSharpGenericParameterDefaultsToConstraint: Int32 get_DefaultsToPriority() -FSharp.Compiler.Symbols.FSharpGenericParameterDefaultsToConstraint: System.String ToString() -FSharp.Compiler.Symbols.FSharpGenericParameterDelegateConstraint -FSharp.Compiler.Symbols.FSharpGenericParameterDelegateConstraint: FSharp.Compiler.Symbols.FSharpType DelegateReturnType -FSharp.Compiler.Symbols.FSharpGenericParameterDelegateConstraint: FSharp.Compiler.Symbols.FSharpType DelegateTupledArgumentType -FSharp.Compiler.Symbols.FSharpGenericParameterDelegateConstraint: FSharp.Compiler.Symbols.FSharpType get_DelegateReturnType() -FSharp.Compiler.Symbols.FSharpGenericParameterDelegateConstraint: FSharp.Compiler.Symbols.FSharpType get_DelegateTupledArgumentType() -FSharp.Compiler.Symbols.FSharpGenericParameterDelegateConstraint: System.String ToString() -FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint -FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: Boolean MemberIsStatic -FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: Boolean get_MemberIsStatic() -FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: FSharp.Compiler.Symbols.FSharpType MemberReturnType -FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: FSharp.Compiler.Symbols.FSharpType get_MemberReturnType() -FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] MemberArgumentTypes -FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] MemberSources -FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] get_MemberArgumentTypes() -FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] get_MemberSources() -FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: System.String MemberName -FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: System.String ToString() -FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: System.String get_MemberName() -FSharp.Compiler.Symbols.FSharpImplementationFileContents -FSharp.Compiler.Symbols.FSharpImplementationFileContents: Boolean HasExplicitEntryPoint -FSharp.Compiler.Symbols.FSharpImplementationFileContents: Boolean IsScript -FSharp.Compiler.Symbols.FSharpImplementationFileContents: Boolean get_HasExplicitEntryPoint() -FSharp.Compiler.Symbols.FSharpImplementationFileContents: Boolean get_IsScript() -FSharp.Compiler.Symbols.FSharpImplementationFileContents: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration] Declarations -FSharp.Compiler.Symbols.FSharpImplementationFileContents: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration] get_Declarations() -FSharp.Compiler.Symbols.FSharpImplementationFileContents: System.String FileName -FSharp.Compiler.Symbols.FSharpImplementationFileContents: System.String QualifiedName -FSharp.Compiler.Symbols.FSharpImplementationFileContents: System.String get_FileName() -FSharp.Compiler.Symbols.FSharpImplementationFileContents: System.String get_QualifiedName() -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+Entity: FSharp.Compiler.Symbols.FSharpEntity entity -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+Entity: FSharp.Compiler.Symbols.FSharpEntity get_entity() -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+Entity: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration] declarations -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+Entity: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration] get_declarations() -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+InitAction: FSharp.Compiler.Symbols.FSharpExpr action -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+InitAction: FSharp.Compiler.Symbols.FSharpExpr get_action() -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpExpr body -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpExpr get_body() -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue get_value() -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue value -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue]] curriedArgs -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue]] get_curriedArgs() -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+Tags: Int32 Entity -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+Tags: Int32 InitAction -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+Tags: Int32 MemberOrFunctionOrValue -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Boolean Equals(FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration) -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Boolean Equals(System.Object) -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Boolean IsEntity -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Boolean IsInitAction -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Boolean IsMemberOrFunctionOrValue -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Boolean get_IsEntity() -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Boolean get_IsInitAction() -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Boolean get_IsMemberOrFunctionOrValue() -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration NewEntity(FSharp.Compiler.Symbols.FSharpEntity, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration]) -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration NewInitAction(FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration NewMemberOrFunctionOrValue(FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue]], FSharp.Compiler.Symbols.FSharpExpr) -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+Entity -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+InitAction -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+Tags -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Int32 GetHashCode() -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Int32 Tag -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Int32 get_Tag() -FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: System.String ToString() -FSharp.Compiler.Symbols.FSharpInlineAnnotation -FSharp.Compiler.Symbols.FSharpInlineAnnotation+Tags: Int32 AggressiveInline -FSharp.Compiler.Symbols.FSharpInlineAnnotation+Tags: Int32 AlwaysInline -FSharp.Compiler.Symbols.FSharpInlineAnnotation+Tags: Int32 NeverInline -FSharp.Compiler.Symbols.FSharpInlineAnnotation+Tags: Int32 OptionalInline -FSharp.Compiler.Symbols.FSharpInlineAnnotation+Tags: Int32 PseudoValue -FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean Equals(FSharp.Compiler.Symbols.FSharpInlineAnnotation) -FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean Equals(System.Object) -FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean IsAggressiveInline -FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean IsAlwaysInline -FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean IsNeverInline -FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean IsOptionalInline -FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean IsPseudoValue -FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean get_IsAggressiveInline() -FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean get_IsAlwaysInline() -FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean get_IsNeverInline() -FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean get_IsOptionalInline() -FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean get_IsPseudoValue() -FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation AggressiveInline -FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation AlwaysInline -FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation NeverInline -FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation OptionalInline -FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation PseudoValue -FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation get_AggressiveInline() -FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation get_AlwaysInline() -FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation get_NeverInline() -FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation get_OptionalInline() -FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation get_PseudoValue() -FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation+Tags -FSharp.Compiler.Symbols.FSharpInlineAnnotation: Int32 CompareTo(FSharp.Compiler.Symbols.FSharpInlineAnnotation) -FSharp.Compiler.Symbols.FSharpInlineAnnotation: Int32 CompareTo(System.Object) -FSharp.Compiler.Symbols.FSharpInlineAnnotation: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.Symbols.FSharpInlineAnnotation: Int32 GetHashCode() -FSharp.Compiler.Symbols.FSharpInlineAnnotation: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Symbols.FSharpInlineAnnotation: Int32 Tag -FSharp.Compiler.Symbols.FSharpInlineAnnotation: Int32 get_Tag() -FSharp.Compiler.Symbols.FSharpInlineAnnotation: System.String ToString() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean Equals(System.Object) -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean EventIsStandard -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean HasGetterMethod -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean HasSetterMethod -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsActivePattern -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsBaseValue -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsCompilerGenerated -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsConstructor -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsConstructorThisValue -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsDispatchSlot -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsEvent -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsEventAddMethod -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsEventRemoveMethod -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsExplicitInterfaceImplementation -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsExtensionMember -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsFunction -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsImplicitConstructor -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsInstanceMember -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsInstanceMemberInCompiledCode -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsMember -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsMemberThisValue -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsModuleValueOrMember -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsMutable -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsOverrideOrExplicitInterfaceImplementation -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsProperty -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsPropertyGetterMethod -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsPropertySetterMethod -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsTypeFunction -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsUnresolved -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsValCompiledAsMethod -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsValue -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_EventIsStandard() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_HasGetterMethod() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_HasSetterMethod() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsActivePattern() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsBaseValue() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsCompilerGenerated() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsConstructor() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsConstructorThisValue() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsDispatchSlot() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsEvent() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsEventAddMethod() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsEventRemoveMethod() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsExplicitInterfaceImplementation() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsExtensionMember() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsFunction() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsImplicitConstructor() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsInstanceMember() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsInstanceMemberInCompiledCode() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsMember() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsMemberThisValue() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsModuleValueOrMember() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsMutable() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsOverrideOrExplicitInterfaceImplementation() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsProperty() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsPropertyGetterMethod() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsPropertySetterMethod() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsTypeFunction() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsUnresolved() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsValCompiledAsMethod() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsValue() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpAccessibility Accessibility -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpAccessibility get_Accessibility() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpEntity ApparentEnclosingEntity -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpEntity get_ApparentEnclosingEntity() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpInlineAnnotation InlineAnnotation -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpInlineAnnotation get_InlineAnnotation() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue EventAddMethod -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue EventRemoveMethod -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue GetterMethod -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue SetterMethod -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue get_EventAddMethod() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue get_EventRemoveMethod() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue get_GetterMethod() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue get_SetterMethod() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpParameter ReturnParameter -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpParameter get_ReturnParameter() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpType EventDelegateType -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpType FullType -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpType get_EventDelegateType() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpType get_FullType() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpXmlDoc XmlDoc -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpXmlDoc get_XmlDoc() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Text.Range DeclarationLocation -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Text.Range get_DeclarationLocation() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Text.TaggedText[] FormatLayout(FSharp.Compiler.Symbols.FSharpDisplayContext) -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Int32 GetHashCode() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] DeclaringEntity -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] get_DeclaringEntity() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue] EventForFSharpProperty -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue] get_EventForFSharpProperty() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType] FullTypeSafe -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType] get_FullTypeSafe() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue]] GetOverloads(Boolean) -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[System.Object] LiteralValue -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[System.Object] get_LiteralValue() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] TryGetFullCompiledOperatorNameIdents() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[System.String] TryGetFullDisplayName() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.String,System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpParameter]]] GetWitnessPassingInfo() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAbstractSignature] ImplementedAbstractSignatures -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAbstractSignature] get_ImplementedAbstractSignatures() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] Attributes -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] get_Attributes() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpGenericParameter] GenericParameters -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpGenericParameter] get_GenericParameters() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpParameter]] CurriedParameterGroups -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpParameter]] get_CurriedParameterGroups() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.String CompiledName -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.String DisplayName -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.String LogicalName -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.String ToString() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.String XmlDocSig -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.String get_CompiledName() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.String get_DisplayName() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.String get_LogicalName() -FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.String get_XmlDocSig() -FSharp.Compiler.Symbols.FSharpObjectExprOverride -FSharp.Compiler.Symbols.FSharpObjectExprOverride: FSharp.Compiler.Symbols.FSharpAbstractSignature Signature -FSharp.Compiler.Symbols.FSharpObjectExprOverride: FSharp.Compiler.Symbols.FSharpAbstractSignature get_Signature() -FSharp.Compiler.Symbols.FSharpObjectExprOverride: FSharp.Compiler.Symbols.FSharpExpr Body -FSharp.Compiler.Symbols.FSharpObjectExprOverride: FSharp.Compiler.Symbols.FSharpExpr get_Body() -FSharp.Compiler.Symbols.FSharpObjectExprOverride: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpGenericParameter] GenericParameters -FSharp.Compiler.Symbols.FSharpObjectExprOverride: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpGenericParameter] get_GenericParameters() -FSharp.Compiler.Symbols.FSharpObjectExprOverride: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue]] CurriedParameterGroups -FSharp.Compiler.Symbols.FSharpObjectExprOverride: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue]] get_CurriedParameterGroups() -FSharp.Compiler.Symbols.FSharpOpenDeclaration -FSharp.Compiler.Symbols.FSharpOpenDeclaration: Boolean IsOwnNamespace -FSharp.Compiler.Symbols.FSharpOpenDeclaration: Boolean get_IsOwnNamespace() -FSharp.Compiler.Symbols.FSharpOpenDeclaration: FSharp.Compiler.Syntax.SynOpenDeclTarget Target -FSharp.Compiler.Symbols.FSharpOpenDeclaration: FSharp.Compiler.Syntax.SynOpenDeclTarget get_Target() -FSharp.Compiler.Symbols.FSharpOpenDeclaration: FSharp.Compiler.Text.Range AppliedScope -FSharp.Compiler.Symbols.FSharpOpenDeclaration: FSharp.Compiler.Text.Range get_AppliedScope() -FSharp.Compiler.Symbols.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpEntity] Modules -FSharp.Compiler.Symbols.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpEntity] get_Modules() -FSharp.Compiler.Symbols.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType] Types -FSharp.Compiler.Symbols.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType] get_Types() -FSharp.Compiler.Symbols.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] LongId -FSharp.Compiler.Symbols.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_LongId() -FSharp.Compiler.Symbols.FSharpOpenDeclaration: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] Range -FSharp.Compiler.Symbols.FSharpOpenDeclaration: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_Range() -FSharp.Compiler.Symbols.FSharpParameter -FSharp.Compiler.Symbols.FSharpParameter: Boolean Equals(System.Object) -FSharp.Compiler.Symbols.FSharpParameter: Boolean IsInArg -FSharp.Compiler.Symbols.FSharpParameter: Boolean IsOptionalArg -FSharp.Compiler.Symbols.FSharpParameter: Boolean IsOutArg -FSharp.Compiler.Symbols.FSharpParameter: Boolean IsParamArrayArg -FSharp.Compiler.Symbols.FSharpParameter: Boolean get_IsInArg() -FSharp.Compiler.Symbols.FSharpParameter: Boolean get_IsOptionalArg() -FSharp.Compiler.Symbols.FSharpParameter: Boolean get_IsOutArg() -FSharp.Compiler.Symbols.FSharpParameter: Boolean get_IsParamArrayArg() -FSharp.Compiler.Symbols.FSharpParameter: FSharp.Compiler.Symbols.FSharpType Type -FSharp.Compiler.Symbols.FSharpParameter: FSharp.Compiler.Symbols.FSharpType get_Type() -FSharp.Compiler.Symbols.FSharpParameter: FSharp.Compiler.Text.Range DeclarationLocation -FSharp.Compiler.Symbols.FSharpParameter: FSharp.Compiler.Text.Range get_DeclarationLocation() -FSharp.Compiler.Symbols.FSharpParameter: Int32 GetHashCode() -FSharp.Compiler.Symbols.FSharpParameter: Microsoft.FSharp.Core.FSharpOption`1[System.String] Name -FSharp.Compiler.Symbols.FSharpParameter: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Name() -FSharp.Compiler.Symbols.FSharpParameter: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] Attributes -FSharp.Compiler.Symbols.FSharpParameter: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] get_Attributes() -FSharp.Compiler.Symbols.FSharpParameter: System.String ToString() -FSharp.Compiler.Symbols.FSharpStaticParameter -FSharp.Compiler.Symbols.FSharpStaticParameter: Boolean Equals(System.Object) -FSharp.Compiler.Symbols.FSharpStaticParameter: Boolean HasDefaultValue -FSharp.Compiler.Symbols.FSharpStaticParameter: Boolean IsOptional -FSharp.Compiler.Symbols.FSharpStaticParameter: Boolean get_HasDefaultValue() -FSharp.Compiler.Symbols.FSharpStaticParameter: Boolean get_IsOptional() -FSharp.Compiler.Symbols.FSharpStaticParameter: FSharp.Compiler.Symbols.FSharpType Kind -FSharp.Compiler.Symbols.FSharpStaticParameter: FSharp.Compiler.Symbols.FSharpType get_Kind() -FSharp.Compiler.Symbols.FSharpStaticParameter: FSharp.Compiler.Text.Range DeclarationLocation -FSharp.Compiler.Symbols.FSharpStaticParameter: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Symbols.FSharpStaticParameter: FSharp.Compiler.Text.Range get_DeclarationLocation() -FSharp.Compiler.Symbols.FSharpStaticParameter: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Symbols.FSharpStaticParameter: Int32 GetHashCode() -FSharp.Compiler.Symbols.FSharpStaticParameter: System.Object DefaultValue -FSharp.Compiler.Symbols.FSharpStaticParameter: System.Object get_DefaultValue() -FSharp.Compiler.Symbols.FSharpStaticParameter: System.String Name -FSharp.Compiler.Symbols.FSharpStaticParameter: System.String ToString() -FSharp.Compiler.Symbols.FSharpStaticParameter: System.String get_Name() -FSharp.Compiler.Symbols.FSharpSymbol -FSharp.Compiler.Symbols.FSharpSymbol: Boolean Equals(System.Object) -FSharp.Compiler.Symbols.FSharpSymbol: Boolean HasAttribute[T]() -FSharp.Compiler.Symbols.FSharpSymbol: Boolean IsAccessible(FSharp.Compiler.Symbols.FSharpAccessibilityRights) -FSharp.Compiler.Symbols.FSharpSymbol: Boolean IsEffectivelySameAs(FSharp.Compiler.Symbols.FSharpSymbol) -FSharp.Compiler.Symbols.FSharpSymbol: Boolean IsExplicitlySuppressed -FSharp.Compiler.Symbols.FSharpSymbol: Boolean get_IsExplicitlySuppressed() -FSharp.Compiler.Symbols.FSharpSymbol: FSharp.Compiler.Symbols.FSharpAccessibility Accessibility -FSharp.Compiler.Symbols.FSharpSymbol: FSharp.Compiler.Symbols.FSharpAccessibility get_Accessibility() -FSharp.Compiler.Symbols.FSharpSymbol: FSharp.Compiler.Symbols.FSharpAssembly Assembly -FSharp.Compiler.Symbols.FSharpSymbol: FSharp.Compiler.Symbols.FSharpAssembly get_Assembly() -FSharp.Compiler.Symbols.FSharpSymbol: Int32 GetEffectivelySameAsHash() -FSharp.Compiler.Symbols.FSharpSymbol: Int32 GetHashCode() -FSharp.Compiler.Symbols.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpAttribute] TryGetAttribute[T]() -FSharp.Compiler.Symbols.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] DeclarationLocation -FSharp.Compiler.Symbols.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] ImplementationLocation -FSharp.Compiler.Symbols.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] SignatureLocation -FSharp.Compiler.Symbols.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_DeclarationLocation() -FSharp.Compiler.Symbols.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_ImplementationLocation() -FSharp.Compiler.Symbols.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_SignatureLocation() -FSharp.Compiler.Symbols.FSharpSymbol: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] Attributes -FSharp.Compiler.Symbols.FSharpSymbol: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] get_Attributes() -FSharp.Compiler.Symbols.FSharpSymbol: System.String DisplayName -FSharp.Compiler.Symbols.FSharpSymbol: System.String FullName -FSharp.Compiler.Symbols.FSharpSymbol: System.String ToString() -FSharp.Compiler.Symbols.FSharpSymbol: System.String get_DisplayName() -FSharp.Compiler.Symbols.FSharpSymbol: System.String get_FullName() -FSharp.Compiler.Symbols.FSharpSymbolPatterns -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpActivePatternCase] |ActivePatternCase|_|(FSharp.Compiler.Symbols.FSharpSymbol) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] |Constructor|_|(FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] |TypeWithDefinition|_|(FSharp.Compiler.Symbols.FSharpType) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpField] |RecordField|_|(FSharp.Compiler.Symbols.FSharpSymbol) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue] |MemberFunctionOrValue|_|(FSharp.Compiler.Symbols.FSharpSymbol) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType] |AbbreviatedType|_|(FSharp.Compiler.Symbols.FSharpEntity) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpUnionCase] |UnionCase|_|(FSharp.Compiler.Symbols.FSharpSymbol) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |AbstractClass|_|(FSharp.Compiler.Symbols.FSharpEntity) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Array|_|(FSharp.Compiler.Symbols.FSharpEntity) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Attribute|_|(FSharp.Compiler.Symbols.FSharpEntity) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |ByRef|_|(FSharp.Compiler.Symbols.FSharpEntity) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Class|_|[a](FSharp.Compiler.Symbols.FSharpEntity, FSharp.Compiler.Symbols.FSharpEntity, a) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Delegate|_|(FSharp.Compiler.Symbols.FSharpEntity) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Enum|_|(FSharp.Compiler.Symbols.FSharpEntity) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Event|_|(FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |ExtensionMember|_|(FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |FSharpException|_|(FSharp.Compiler.Symbols.FSharpEntity) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |FSharpModule|_|(FSharp.Compiler.Symbols.FSharpEntity) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |FSharpType|_|(FSharp.Compiler.Symbols.FSharpEntity) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |FunctionType|_|(FSharp.Compiler.Symbols.FSharpType) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Function|_|(Boolean, FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Interface|_|(FSharp.Compiler.Symbols.FSharpEntity) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |MutableVar|_|(FSharp.Compiler.Symbols.FSharpSymbol) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Namespace|_|(FSharp.Compiler.Symbols.FSharpEntity) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Parameter|_|(FSharp.Compiler.Symbols.FSharpSymbol) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Pattern|_|(FSharp.Compiler.Symbols.FSharpSymbol) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |ProvidedAndErasedType|_|(FSharp.Compiler.Symbols.FSharpEntity) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |ProvidedType|_|(FSharp.Compiler.Symbols.FSharpEntity) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Record|_|(FSharp.Compiler.Symbols.FSharpEntity) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |RefCell|_|(FSharp.Compiler.Symbols.FSharpType) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Tuple|_|(FSharp.Compiler.Symbols.FSharpType) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |UnionType|_|(FSharp.Compiler.Symbols.FSharpEntity) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |ValueType|_|(FSharp.Compiler.Symbols.FSharpEntity) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpField,FSharp.Compiler.Symbols.FSharpType]] |Field|_|(FSharp.Compiler.Symbols.FSharpSymbol) -FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.Symbols.FSharpEntity,FSharp.Compiler.Symbols.FSharpEntity,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType]]] |FSharpEntity|_|(FSharp.Compiler.Symbols.FSharpSymbol) -FSharp.Compiler.Symbols.FSharpType -FSharp.Compiler.Symbols.FSharpType: Boolean Equals(System.Object) -FSharp.Compiler.Symbols.FSharpType: Boolean HasTypeDefinition -FSharp.Compiler.Symbols.FSharpType: Boolean IsAbbreviation -FSharp.Compiler.Symbols.FSharpType: Boolean IsAnonRecordType -FSharp.Compiler.Symbols.FSharpType: Boolean IsFunctionType -FSharp.Compiler.Symbols.FSharpType: Boolean IsGenericParameter -FSharp.Compiler.Symbols.FSharpType: Boolean IsStructTupleType -FSharp.Compiler.Symbols.FSharpType: Boolean IsTupleType -FSharp.Compiler.Symbols.FSharpType: Boolean IsUnresolved -FSharp.Compiler.Symbols.FSharpType: Boolean get_HasTypeDefinition() -FSharp.Compiler.Symbols.FSharpType: Boolean get_IsAbbreviation() -FSharp.Compiler.Symbols.FSharpType: Boolean get_IsAnonRecordType() -FSharp.Compiler.Symbols.FSharpType: Boolean get_IsFunctionType() -FSharp.Compiler.Symbols.FSharpType: Boolean get_IsGenericParameter() -FSharp.Compiler.Symbols.FSharpType: Boolean get_IsStructTupleType() -FSharp.Compiler.Symbols.FSharpType: Boolean get_IsTupleType() -FSharp.Compiler.Symbols.FSharpType: Boolean get_IsUnresolved() -FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails AnonRecordTypeDetails -FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails get_AnonRecordTypeDetails() -FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpEntity TypeDefinition -FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpEntity get_TypeDefinition() -FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpGenericParameter GenericParameter -FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpGenericParameter get_GenericParameter() -FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpParameter Prettify(FSharp.Compiler.Symbols.FSharpParameter) -FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpType AbbreviatedType -FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpType Instantiate(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpGenericParameter,FSharp.Compiler.Symbols.FSharpType]]) -FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpType Prettify(FSharp.Compiler.Symbols.FSharpType) -FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpType StripAbbreviations() -FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpType get_AbbreviatedType() -FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Text.TaggedText[] FormatLayout(FSharp.Compiler.Symbols.FSharpDisplayContext) -FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Text.TaggedText[] FormatLayoutWithConstraints(FSharp.Compiler.Symbols.FSharpDisplayContext) -FSharp.Compiler.Symbols.FSharpType: Int32 GetHashCode() -FSharp.Compiler.Symbols.FSharpType: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType] BaseType -FSharp.Compiler.Symbols.FSharpType: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType] get_BaseType() -FSharp.Compiler.Symbols.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpParameter] Prettify(System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpParameter]) -FSharp.Compiler.Symbols.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] AllInterfaces -FSharp.Compiler.Symbols.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] GenericArguments -FSharp.Compiler.Symbols.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] Prettify(System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType]) -FSharp.Compiler.Symbols.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] get_AllInterfaces() -FSharp.Compiler.Symbols.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] get_GenericArguments() -FSharp.Compiler.Symbols.FSharpType: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpParameter]] Prettify(System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpParameter]]) -FSharp.Compiler.Symbols.FSharpType: System.String Format(FSharp.Compiler.Symbols.FSharpDisplayContext) -FSharp.Compiler.Symbols.FSharpType: System.String FormatWithConstraints(FSharp.Compiler.Symbols.FSharpDisplayContext) -FSharp.Compiler.Symbols.FSharpType: System.String ToString() -FSharp.Compiler.Symbols.FSharpType: System.Tuple`2[System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpParameter]],FSharp.Compiler.Symbols.FSharpParameter] Prettify(System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpParameter]], FSharp.Compiler.Symbols.FSharpParameter) -FSharp.Compiler.Symbols.FSharpUnionCase -FSharp.Compiler.Symbols.FSharpUnionCase: Boolean Equals(System.Object) -FSharp.Compiler.Symbols.FSharpUnionCase: Boolean HasFields -FSharp.Compiler.Symbols.FSharpUnionCase: Boolean IsUnresolved -FSharp.Compiler.Symbols.FSharpUnionCase: Boolean get_HasFields() -FSharp.Compiler.Symbols.FSharpUnionCase: Boolean get_IsUnresolved() -FSharp.Compiler.Symbols.FSharpUnionCase: FSharp.Compiler.Symbols.FSharpAccessibility Accessibility -FSharp.Compiler.Symbols.FSharpUnionCase: FSharp.Compiler.Symbols.FSharpAccessibility get_Accessibility() -FSharp.Compiler.Symbols.FSharpUnionCase: FSharp.Compiler.Symbols.FSharpType ReturnType -FSharp.Compiler.Symbols.FSharpUnionCase: FSharp.Compiler.Symbols.FSharpType get_ReturnType() -FSharp.Compiler.Symbols.FSharpUnionCase: FSharp.Compiler.Symbols.FSharpXmlDoc XmlDoc -FSharp.Compiler.Symbols.FSharpUnionCase: FSharp.Compiler.Symbols.FSharpXmlDoc get_XmlDoc() -FSharp.Compiler.Symbols.FSharpUnionCase: FSharp.Compiler.Text.Range DeclarationLocation -FSharp.Compiler.Symbols.FSharpUnionCase: FSharp.Compiler.Text.Range get_DeclarationLocation() -FSharp.Compiler.Symbols.FSharpUnionCase: Int32 GetHashCode() -FSharp.Compiler.Symbols.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] Attributes -FSharp.Compiler.Symbols.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] get_Attributes() -FSharp.Compiler.Symbols.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpField] Fields -FSharp.Compiler.Symbols.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpField] get_Fields() -FSharp.Compiler.Symbols.FSharpUnionCase: System.String CompiledName -FSharp.Compiler.Symbols.FSharpUnionCase: System.String Name -FSharp.Compiler.Symbols.FSharpUnionCase: System.String ToString() -FSharp.Compiler.Symbols.FSharpUnionCase: System.String XmlDocSig -FSharp.Compiler.Symbols.FSharpUnionCase: System.String get_CompiledName() -FSharp.Compiler.Symbols.FSharpUnionCase: System.String get_Name() -FSharp.Compiler.Symbols.FSharpUnionCase: System.String get_XmlDocSig() -FSharp.Compiler.Symbols.FSharpXmlDoc -FSharp.Compiler.Symbols.FSharpXmlDoc+FromXmlFile: System.String dllName -FSharp.Compiler.Symbols.FSharpXmlDoc+FromXmlFile: System.String get_dllName() -FSharp.Compiler.Symbols.FSharpXmlDoc+FromXmlFile: System.String get_xmlSig() -FSharp.Compiler.Symbols.FSharpXmlDoc+FromXmlFile: System.String xmlSig -FSharp.Compiler.Symbols.FSharpXmlDoc+FromXmlText: FSharp.Compiler.Xml.XmlDoc Item -FSharp.Compiler.Symbols.FSharpXmlDoc+FromXmlText: FSharp.Compiler.Xml.XmlDoc get_Item() -FSharp.Compiler.Symbols.FSharpXmlDoc+Tags: Int32 FromXmlFile -FSharp.Compiler.Symbols.FSharpXmlDoc+Tags: Int32 FromXmlText -FSharp.Compiler.Symbols.FSharpXmlDoc+Tags: Int32 None -FSharp.Compiler.Symbols.FSharpXmlDoc: Boolean Equals(FSharp.Compiler.Symbols.FSharpXmlDoc) -FSharp.Compiler.Symbols.FSharpXmlDoc: Boolean Equals(System.Object) -FSharp.Compiler.Symbols.FSharpXmlDoc: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Symbols.FSharpXmlDoc: Boolean IsFromXmlFile -FSharp.Compiler.Symbols.FSharpXmlDoc: Boolean IsFromXmlText -FSharp.Compiler.Symbols.FSharpXmlDoc: Boolean IsNone -FSharp.Compiler.Symbols.FSharpXmlDoc: Boolean get_IsFromXmlFile() -FSharp.Compiler.Symbols.FSharpXmlDoc: Boolean get_IsFromXmlText() -FSharp.Compiler.Symbols.FSharpXmlDoc: Boolean get_IsNone() -FSharp.Compiler.Symbols.FSharpXmlDoc: FSharp.Compiler.Symbols.FSharpXmlDoc NewFromXmlFile(System.String, System.String) -FSharp.Compiler.Symbols.FSharpXmlDoc: FSharp.Compiler.Symbols.FSharpXmlDoc NewFromXmlText(FSharp.Compiler.Xml.XmlDoc) -FSharp.Compiler.Symbols.FSharpXmlDoc: FSharp.Compiler.Symbols.FSharpXmlDoc None -FSharp.Compiler.Symbols.FSharpXmlDoc: FSharp.Compiler.Symbols.FSharpXmlDoc get_None() -FSharp.Compiler.Symbols.FSharpXmlDoc: FSharp.Compiler.Symbols.FSharpXmlDoc+FromXmlFile -FSharp.Compiler.Symbols.FSharpXmlDoc: FSharp.Compiler.Symbols.FSharpXmlDoc+FromXmlText -FSharp.Compiler.Symbols.FSharpXmlDoc: FSharp.Compiler.Symbols.FSharpXmlDoc+Tags -FSharp.Compiler.Symbols.FSharpXmlDoc: Int32 GetHashCode() -FSharp.Compiler.Symbols.FSharpXmlDoc: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Symbols.FSharpXmlDoc: Int32 Tag -FSharp.Compiler.Symbols.FSharpXmlDoc: Int32 get_Tag() -FSharp.Compiler.Symbols.FSharpXmlDoc: System.String ToString() -FSharp.Compiler.Syntax.DebugPointAtBinding -FSharp.Compiler.Syntax.DebugPointAtBinding+Tags: Int32 NoneAtDo -FSharp.Compiler.Syntax.DebugPointAtBinding+Tags: Int32 NoneAtInvisible -FSharp.Compiler.Syntax.DebugPointAtBinding+Tags: Int32 NoneAtLet -FSharp.Compiler.Syntax.DebugPointAtBinding+Tags: Int32 NoneAtSticky -FSharp.Compiler.Syntax.DebugPointAtBinding+Tags: Int32 Yes -FSharp.Compiler.Syntax.DebugPointAtBinding+Yes: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.DebugPointAtBinding+Yes: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean Equals(FSharp.Compiler.Syntax.DebugPointAtBinding) -FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean Equals(System.Object) -FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean IsNoneAtDo -FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean IsNoneAtInvisible -FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean IsNoneAtLet -FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean IsNoneAtSticky -FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean IsYes -FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean get_IsNoneAtDo() -FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean get_IsNoneAtInvisible() -FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean get_IsNoneAtLet() -FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean get_IsNoneAtSticky() -FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean get_IsYes() -FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding Combine(FSharp.Compiler.Syntax.DebugPointAtBinding) -FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding NewYes(FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding NoneAtDo -FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding NoneAtInvisible -FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding NoneAtLet -FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding NoneAtSticky -FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding get_NoneAtDo() -FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding get_NoneAtInvisible() -FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding get_NoneAtLet() -FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding get_NoneAtSticky() -FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding+Tags -FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding+Yes -FSharp.Compiler.Syntax.DebugPointAtBinding: Int32 GetHashCode() -FSharp.Compiler.Syntax.DebugPointAtBinding: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.DebugPointAtBinding: Int32 Tag -FSharp.Compiler.Syntax.DebugPointAtBinding: Int32 get_Tag() -FSharp.Compiler.Syntax.DebugPointAtBinding: System.String ToString() -FSharp.Compiler.Syntax.DebugPointAtFinally -FSharp.Compiler.Syntax.DebugPointAtFinally+Tags: Int32 Body -FSharp.Compiler.Syntax.DebugPointAtFinally+Tags: Int32 No -FSharp.Compiler.Syntax.DebugPointAtFinally+Tags: Int32 Yes -FSharp.Compiler.Syntax.DebugPointAtFinally+Yes: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.DebugPointAtFinally+Yes: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.DebugPointAtFinally: Boolean Equals(FSharp.Compiler.Syntax.DebugPointAtFinally) -FSharp.Compiler.Syntax.DebugPointAtFinally: Boolean Equals(System.Object) -FSharp.Compiler.Syntax.DebugPointAtFinally: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.DebugPointAtFinally: Boolean IsBody -FSharp.Compiler.Syntax.DebugPointAtFinally: Boolean IsNo -FSharp.Compiler.Syntax.DebugPointAtFinally: Boolean IsYes -FSharp.Compiler.Syntax.DebugPointAtFinally: Boolean get_IsBody() -FSharp.Compiler.Syntax.DebugPointAtFinally: Boolean get_IsNo() -FSharp.Compiler.Syntax.DebugPointAtFinally: Boolean get_IsYes() -FSharp.Compiler.Syntax.DebugPointAtFinally: FSharp.Compiler.Syntax.DebugPointAtFinally Body -FSharp.Compiler.Syntax.DebugPointAtFinally: FSharp.Compiler.Syntax.DebugPointAtFinally NewYes(FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.DebugPointAtFinally: FSharp.Compiler.Syntax.DebugPointAtFinally No -FSharp.Compiler.Syntax.DebugPointAtFinally: FSharp.Compiler.Syntax.DebugPointAtFinally get_Body() -FSharp.Compiler.Syntax.DebugPointAtFinally: FSharp.Compiler.Syntax.DebugPointAtFinally get_No() -FSharp.Compiler.Syntax.DebugPointAtFinally: FSharp.Compiler.Syntax.DebugPointAtFinally+Tags -FSharp.Compiler.Syntax.DebugPointAtFinally: FSharp.Compiler.Syntax.DebugPointAtFinally+Yes -FSharp.Compiler.Syntax.DebugPointAtFinally: Int32 GetHashCode() -FSharp.Compiler.Syntax.DebugPointAtFinally: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.DebugPointAtFinally: Int32 Tag -FSharp.Compiler.Syntax.DebugPointAtFinally: Int32 get_Tag() -FSharp.Compiler.Syntax.DebugPointAtFinally: System.String ToString() -FSharp.Compiler.Syntax.DebugPointAtFor -FSharp.Compiler.Syntax.DebugPointAtFor+Tags: Int32 No -FSharp.Compiler.Syntax.DebugPointAtFor+Tags: Int32 Yes -FSharp.Compiler.Syntax.DebugPointAtFor+Yes: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.DebugPointAtFor+Yes: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.DebugPointAtFor: Boolean Equals(FSharp.Compiler.Syntax.DebugPointAtFor) -FSharp.Compiler.Syntax.DebugPointAtFor: Boolean Equals(System.Object) -FSharp.Compiler.Syntax.DebugPointAtFor: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.DebugPointAtFor: Boolean IsNo -FSharp.Compiler.Syntax.DebugPointAtFor: Boolean IsYes -FSharp.Compiler.Syntax.DebugPointAtFor: Boolean get_IsNo() -FSharp.Compiler.Syntax.DebugPointAtFor: Boolean get_IsYes() -FSharp.Compiler.Syntax.DebugPointAtFor: FSharp.Compiler.Syntax.DebugPointAtFor NewYes(FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.DebugPointAtFor: FSharp.Compiler.Syntax.DebugPointAtFor No -FSharp.Compiler.Syntax.DebugPointAtFor: FSharp.Compiler.Syntax.DebugPointAtFor get_No() -FSharp.Compiler.Syntax.DebugPointAtFor: FSharp.Compiler.Syntax.DebugPointAtFor+Tags -FSharp.Compiler.Syntax.DebugPointAtFor: FSharp.Compiler.Syntax.DebugPointAtFor+Yes -FSharp.Compiler.Syntax.DebugPointAtFor: Int32 GetHashCode() -FSharp.Compiler.Syntax.DebugPointAtFor: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.DebugPointAtFor: Int32 Tag -FSharp.Compiler.Syntax.DebugPointAtFor: Int32 get_Tag() -FSharp.Compiler.Syntax.DebugPointAtFor: System.String ToString() -FSharp.Compiler.Syntax.DebugPointAtSequential -FSharp.Compiler.Syntax.DebugPointAtSequential+Tags: Int32 Both -FSharp.Compiler.Syntax.DebugPointAtSequential+Tags: Int32 ExprOnly -FSharp.Compiler.Syntax.DebugPointAtSequential+Tags: Int32 StmtOnly -FSharp.Compiler.Syntax.DebugPointAtSequential: Boolean Equals(FSharp.Compiler.Syntax.DebugPointAtSequential) -FSharp.Compiler.Syntax.DebugPointAtSequential: Boolean Equals(System.Object) -FSharp.Compiler.Syntax.DebugPointAtSequential: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.DebugPointAtSequential: Boolean IsBoth -FSharp.Compiler.Syntax.DebugPointAtSequential: Boolean IsExprOnly -FSharp.Compiler.Syntax.DebugPointAtSequential: Boolean IsStmtOnly -FSharp.Compiler.Syntax.DebugPointAtSequential: Boolean get_IsBoth() -FSharp.Compiler.Syntax.DebugPointAtSequential: Boolean get_IsExprOnly() -FSharp.Compiler.Syntax.DebugPointAtSequential: Boolean get_IsStmtOnly() -FSharp.Compiler.Syntax.DebugPointAtSequential: FSharp.Compiler.Syntax.DebugPointAtSequential Both -FSharp.Compiler.Syntax.DebugPointAtSequential: FSharp.Compiler.Syntax.DebugPointAtSequential ExprOnly -FSharp.Compiler.Syntax.DebugPointAtSequential: FSharp.Compiler.Syntax.DebugPointAtSequential StmtOnly -FSharp.Compiler.Syntax.DebugPointAtSequential: FSharp.Compiler.Syntax.DebugPointAtSequential get_Both() -FSharp.Compiler.Syntax.DebugPointAtSequential: FSharp.Compiler.Syntax.DebugPointAtSequential get_ExprOnly() -FSharp.Compiler.Syntax.DebugPointAtSequential: FSharp.Compiler.Syntax.DebugPointAtSequential get_StmtOnly() -FSharp.Compiler.Syntax.DebugPointAtSequential: FSharp.Compiler.Syntax.DebugPointAtSequential+Tags -FSharp.Compiler.Syntax.DebugPointAtSequential: Int32 CompareTo(FSharp.Compiler.Syntax.DebugPointAtSequential) -FSharp.Compiler.Syntax.DebugPointAtSequential: Int32 CompareTo(System.Object) -FSharp.Compiler.Syntax.DebugPointAtSequential: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.Syntax.DebugPointAtSequential: Int32 GetHashCode() -FSharp.Compiler.Syntax.DebugPointAtSequential: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.DebugPointAtSequential: Int32 Tag -FSharp.Compiler.Syntax.DebugPointAtSequential: Int32 get_Tag() -FSharp.Compiler.Syntax.DebugPointAtSequential: System.String ToString() -FSharp.Compiler.Syntax.DebugPointAtTry -FSharp.Compiler.Syntax.DebugPointAtTry+Tags: Int32 Body -FSharp.Compiler.Syntax.DebugPointAtTry+Tags: Int32 No -FSharp.Compiler.Syntax.DebugPointAtTry+Tags: Int32 Yes -FSharp.Compiler.Syntax.DebugPointAtTry+Yes: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.DebugPointAtTry+Yes: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.DebugPointAtTry: Boolean Equals(FSharp.Compiler.Syntax.DebugPointAtTry) -FSharp.Compiler.Syntax.DebugPointAtTry: Boolean Equals(System.Object) -FSharp.Compiler.Syntax.DebugPointAtTry: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.DebugPointAtTry: Boolean IsBody -FSharp.Compiler.Syntax.DebugPointAtTry: Boolean IsNo -FSharp.Compiler.Syntax.DebugPointAtTry: Boolean IsYes -FSharp.Compiler.Syntax.DebugPointAtTry: Boolean get_IsBody() -FSharp.Compiler.Syntax.DebugPointAtTry: Boolean get_IsNo() -FSharp.Compiler.Syntax.DebugPointAtTry: Boolean get_IsYes() -FSharp.Compiler.Syntax.DebugPointAtTry: FSharp.Compiler.Syntax.DebugPointAtTry Body -FSharp.Compiler.Syntax.DebugPointAtTry: FSharp.Compiler.Syntax.DebugPointAtTry NewYes(FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.DebugPointAtTry: FSharp.Compiler.Syntax.DebugPointAtTry No -FSharp.Compiler.Syntax.DebugPointAtTry: FSharp.Compiler.Syntax.DebugPointAtTry get_Body() -FSharp.Compiler.Syntax.DebugPointAtTry: FSharp.Compiler.Syntax.DebugPointAtTry get_No() -FSharp.Compiler.Syntax.DebugPointAtTry: FSharp.Compiler.Syntax.DebugPointAtTry+Tags -FSharp.Compiler.Syntax.DebugPointAtTry: FSharp.Compiler.Syntax.DebugPointAtTry+Yes -FSharp.Compiler.Syntax.DebugPointAtTry: Int32 GetHashCode() -FSharp.Compiler.Syntax.DebugPointAtTry: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.DebugPointAtTry: Int32 Tag -FSharp.Compiler.Syntax.DebugPointAtTry: Int32 get_Tag() -FSharp.Compiler.Syntax.DebugPointAtTry: System.String ToString() -FSharp.Compiler.Syntax.DebugPointAtWhile -FSharp.Compiler.Syntax.DebugPointAtWhile+Tags: Int32 No -FSharp.Compiler.Syntax.DebugPointAtWhile+Tags: Int32 Yes -FSharp.Compiler.Syntax.DebugPointAtWhile+Yes: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.DebugPointAtWhile+Yes: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.DebugPointAtWhile: Boolean Equals(FSharp.Compiler.Syntax.DebugPointAtWhile) -FSharp.Compiler.Syntax.DebugPointAtWhile: Boolean Equals(System.Object) -FSharp.Compiler.Syntax.DebugPointAtWhile: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.DebugPointAtWhile: Boolean IsNo -FSharp.Compiler.Syntax.DebugPointAtWhile: Boolean IsYes -FSharp.Compiler.Syntax.DebugPointAtWhile: Boolean get_IsNo() -FSharp.Compiler.Syntax.DebugPointAtWhile: Boolean get_IsYes() -FSharp.Compiler.Syntax.DebugPointAtWhile: FSharp.Compiler.Syntax.DebugPointAtWhile NewYes(FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.DebugPointAtWhile: FSharp.Compiler.Syntax.DebugPointAtWhile No -FSharp.Compiler.Syntax.DebugPointAtWhile: FSharp.Compiler.Syntax.DebugPointAtWhile get_No() -FSharp.Compiler.Syntax.DebugPointAtWhile: FSharp.Compiler.Syntax.DebugPointAtWhile+Tags -FSharp.Compiler.Syntax.DebugPointAtWhile: FSharp.Compiler.Syntax.DebugPointAtWhile+Yes -FSharp.Compiler.Syntax.DebugPointAtWhile: Int32 GetHashCode() -FSharp.Compiler.Syntax.DebugPointAtWhile: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.DebugPointAtWhile: Int32 Tag -FSharp.Compiler.Syntax.DebugPointAtWhile: Int32 get_Tag() -FSharp.Compiler.Syntax.DebugPointAtWhile: System.String ToString() -FSharp.Compiler.Syntax.DebugPointAtWith -FSharp.Compiler.Syntax.DebugPointAtWith+Tags: Int32 No -FSharp.Compiler.Syntax.DebugPointAtWith+Tags: Int32 Yes -FSharp.Compiler.Syntax.DebugPointAtWith+Yes: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.DebugPointAtWith+Yes: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.DebugPointAtWith: Boolean Equals(FSharp.Compiler.Syntax.DebugPointAtWith) -FSharp.Compiler.Syntax.DebugPointAtWith: Boolean Equals(System.Object) -FSharp.Compiler.Syntax.DebugPointAtWith: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.DebugPointAtWith: Boolean IsNo -FSharp.Compiler.Syntax.DebugPointAtWith: Boolean IsYes -FSharp.Compiler.Syntax.DebugPointAtWith: Boolean get_IsNo() -FSharp.Compiler.Syntax.DebugPointAtWith: Boolean get_IsYes() -FSharp.Compiler.Syntax.DebugPointAtWith: FSharp.Compiler.Syntax.DebugPointAtWith NewYes(FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.DebugPointAtWith: FSharp.Compiler.Syntax.DebugPointAtWith No -FSharp.Compiler.Syntax.DebugPointAtWith: FSharp.Compiler.Syntax.DebugPointAtWith get_No() -FSharp.Compiler.Syntax.DebugPointAtWith: FSharp.Compiler.Syntax.DebugPointAtWith+Tags -FSharp.Compiler.Syntax.DebugPointAtWith: FSharp.Compiler.Syntax.DebugPointAtWith+Yes -FSharp.Compiler.Syntax.DebugPointAtWith: Int32 GetHashCode() -FSharp.Compiler.Syntax.DebugPointAtWith: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.DebugPointAtWith: Int32 Tag -FSharp.Compiler.Syntax.DebugPointAtWith: Int32 get_Tag() -FSharp.Compiler.Syntax.DebugPointAtWith: System.String ToString() -FSharp.Compiler.Syntax.DebugPointForTarget -FSharp.Compiler.Syntax.DebugPointForTarget+Tags: Int32 No -FSharp.Compiler.Syntax.DebugPointForTarget+Tags: Int32 Yes -FSharp.Compiler.Syntax.DebugPointForTarget: Boolean Equals(FSharp.Compiler.Syntax.DebugPointForTarget) -FSharp.Compiler.Syntax.DebugPointForTarget: Boolean Equals(System.Object) -FSharp.Compiler.Syntax.DebugPointForTarget: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.DebugPointForTarget: Boolean IsNo -FSharp.Compiler.Syntax.DebugPointForTarget: Boolean IsYes -FSharp.Compiler.Syntax.DebugPointForTarget: Boolean get_IsNo() -FSharp.Compiler.Syntax.DebugPointForTarget: Boolean get_IsYes() -FSharp.Compiler.Syntax.DebugPointForTarget: FSharp.Compiler.Syntax.DebugPointForTarget No -FSharp.Compiler.Syntax.DebugPointForTarget: FSharp.Compiler.Syntax.DebugPointForTarget Yes -FSharp.Compiler.Syntax.DebugPointForTarget: FSharp.Compiler.Syntax.DebugPointForTarget get_No() -FSharp.Compiler.Syntax.DebugPointForTarget: FSharp.Compiler.Syntax.DebugPointForTarget get_Yes() -FSharp.Compiler.Syntax.DebugPointForTarget: FSharp.Compiler.Syntax.DebugPointForTarget+Tags -FSharp.Compiler.Syntax.DebugPointForTarget: Int32 CompareTo(FSharp.Compiler.Syntax.DebugPointForTarget) -FSharp.Compiler.Syntax.DebugPointForTarget: Int32 CompareTo(System.Object) -FSharp.Compiler.Syntax.DebugPointForTarget: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.Syntax.DebugPointForTarget: Int32 GetHashCode() -FSharp.Compiler.Syntax.DebugPointForTarget: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.DebugPointForTarget: Int32 Tag -FSharp.Compiler.Syntax.DebugPointForTarget: Int32 get_Tag() -FSharp.Compiler.Syntax.DebugPointForTarget: System.String ToString() -FSharp.Compiler.Syntax.ExprAtomicFlag -FSharp.Compiler.Syntax.ExprAtomicFlag: FSharp.Compiler.Syntax.ExprAtomicFlag Atomic -FSharp.Compiler.Syntax.ExprAtomicFlag: FSharp.Compiler.Syntax.ExprAtomicFlag NonAtomic -FSharp.Compiler.Syntax.ExprAtomicFlag: Int32 value__ -FSharp.Compiler.Syntax.Ident -FSharp.Compiler.Syntax.Ident: FSharp.Compiler.Text.Range get_idRange() -FSharp.Compiler.Syntax.Ident: FSharp.Compiler.Text.Range idRange -FSharp.Compiler.Syntax.Ident: System.String ToString() -FSharp.Compiler.Syntax.Ident: System.String get_idText() -FSharp.Compiler.Syntax.Ident: System.String idText -FSharp.Compiler.Syntax.Ident: Void .ctor(System.String, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.LongIdentWithDots -FSharp.Compiler.Syntax.LongIdentWithDots: Boolean ThereIsAnExtraDotAtTheEnd -FSharp.Compiler.Syntax.LongIdentWithDots: Boolean get_ThereIsAnExtraDotAtTheEnd() -FSharp.Compiler.Syntax.LongIdentWithDots: FSharp.Compiler.Syntax.LongIdentWithDots NewLongIdentWithDots(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range]) -FSharp.Compiler.Syntax.LongIdentWithDots: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.LongIdentWithDots: FSharp.Compiler.Text.Range RangeWithoutAnyExtraDot -FSharp.Compiler.Syntax.LongIdentWithDots: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.LongIdentWithDots: FSharp.Compiler.Text.Range get_RangeWithoutAnyExtraDot() -FSharp.Compiler.Syntax.LongIdentWithDots: Int32 Tag -FSharp.Compiler.Syntax.LongIdentWithDots: Int32 get_Tag() -FSharp.Compiler.Syntax.LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] Lid -FSharp.Compiler.Syntax.LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_Lid() -FSharp.Compiler.Syntax.LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_id() -FSharp.Compiler.Syntax.LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] id -FSharp.Compiler.Syntax.LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range] dotRanges -FSharp.Compiler.Syntax.LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range] get_dotRanges() -FSharp.Compiler.Syntax.LongIdentWithDots: System.String ToString() -FSharp.Compiler.Syntax.ParsedHashDirective -FSharp.Compiler.Syntax.ParsedHashDirective: FSharp.Compiler.Syntax.ParsedHashDirective NewParsedHashDirective(System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirectiveArgument], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.ParsedHashDirective: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.ParsedHashDirective: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.ParsedHashDirective: Int32 Tag -FSharp.Compiler.Syntax.ParsedHashDirective: Int32 get_Tag() -FSharp.Compiler.Syntax.ParsedHashDirective: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirectiveArgument] args -FSharp.Compiler.Syntax.ParsedHashDirective: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirectiveArgument] get_args() -FSharp.Compiler.Syntax.ParsedHashDirective: System.String ToString() -FSharp.Compiler.Syntax.ParsedHashDirective: System.String get_ident() -FSharp.Compiler.Syntax.ParsedHashDirective: System.String ident -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+SourceIdentifier: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+SourceIdentifier: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+SourceIdentifier: System.String constant -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+SourceIdentifier: System.String get_constant() -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+SourceIdentifier: System.String get_value() -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+SourceIdentifier: System.String value -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+String: FSharp.Compiler.Syntax.SynStringKind get_stringKind() -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+String: FSharp.Compiler.Syntax.SynStringKind stringKind -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+String: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+String: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+String: System.String get_value() -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+String: System.String value -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+Tags: Int32 SourceIdentifier -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+Tags: Int32 String -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: Boolean IsSourceIdentifier -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: Boolean IsString -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: Boolean get_IsSourceIdentifier() -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: Boolean get_IsString() -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: FSharp.Compiler.Syntax.ParsedHashDirectiveArgument NewSourceIdentifier(System.String, System.String, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: FSharp.Compiler.Syntax.ParsedHashDirectiveArgument NewString(System.String, FSharp.Compiler.Syntax.SynStringKind, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+SourceIdentifier -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+String -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+Tags -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: Int32 Tag -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: Int32 get_Tag() -FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: System.String ToString() -FSharp.Compiler.Syntax.ParsedImplFile -FSharp.Compiler.Syntax.ParsedImplFile: FSharp.Compiler.Syntax.ParsedImplFile NewParsedImplFile(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedImplFileFragment]) -FSharp.Compiler.Syntax.ParsedImplFile: Int32 Tag -FSharp.Compiler.Syntax.ParsedImplFile: Int32 get_Tag() -FSharp.Compiler.Syntax.ParsedImplFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective] get_hashDirectives() -FSharp.Compiler.Syntax.ParsedImplFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective] hashDirectives -FSharp.Compiler.Syntax.ParsedImplFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedImplFileFragment] fragments -FSharp.Compiler.Syntax.ParsedImplFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedImplFileFragment] get_fragments() -FSharp.Compiler.Syntax.ParsedImplFile: System.String ToString() -FSharp.Compiler.Syntax.ParsedImplFileFragment -FSharp.Compiler.Syntax.ParsedImplFileFragment+AnonModule: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.ParsedImplFileFragment+AnonModule: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.ParsedImplFileFragment+AnonModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] decls -FSharp.Compiler.Syntax.ParsedImplFileFragment+AnonModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] get_decls() -FSharp.Compiler.Syntax.ParsedImplFileFragment+NamedModule: FSharp.Compiler.Syntax.SynModuleOrNamespace get_namedModule() -FSharp.Compiler.Syntax.ParsedImplFileFragment+NamedModule: FSharp.Compiler.Syntax.SynModuleOrNamespace namedModule -FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: Boolean get_isRecursive() -FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: Boolean isRecursive -FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind get_kind() -FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind kind -FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() -FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: FSharp.Compiler.Xml.PreXmlDoc xmlDoc -FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() -FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId -FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes -FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() -FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] decls -FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] get_decls() -FSharp.Compiler.Syntax.ParsedImplFileFragment+Tags: Int32 AnonModule -FSharp.Compiler.Syntax.ParsedImplFileFragment+Tags: Int32 NamedModule -FSharp.Compiler.Syntax.ParsedImplFileFragment+Tags: Int32 NamespaceFragment -FSharp.Compiler.Syntax.ParsedImplFileFragment: Boolean IsAnonModule -FSharp.Compiler.Syntax.ParsedImplFileFragment: Boolean IsNamedModule -FSharp.Compiler.Syntax.ParsedImplFileFragment: Boolean IsNamespaceFragment -FSharp.Compiler.Syntax.ParsedImplFileFragment: Boolean get_IsAnonModule() -FSharp.Compiler.Syntax.ParsedImplFileFragment: Boolean get_IsNamedModule() -FSharp.Compiler.Syntax.ParsedImplFileFragment: Boolean get_IsNamespaceFragment() -FSharp.Compiler.Syntax.ParsedImplFileFragment: FSharp.Compiler.Syntax.ParsedImplFileFragment NewAnonModule(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.ParsedImplFileFragment: FSharp.Compiler.Syntax.ParsedImplFileFragment NewNamedModule(FSharp.Compiler.Syntax.SynModuleOrNamespace) -FSharp.Compiler.Syntax.ParsedImplFileFragment: FSharp.Compiler.Syntax.ParsedImplFileFragment NewNamespaceFragment(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], Boolean, FSharp.Compiler.Syntax.SynModuleOrNamespaceKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl], FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.ParsedImplFileFragment: FSharp.Compiler.Syntax.ParsedImplFileFragment+AnonModule -FSharp.Compiler.Syntax.ParsedImplFileFragment: FSharp.Compiler.Syntax.ParsedImplFileFragment+NamedModule -FSharp.Compiler.Syntax.ParsedImplFileFragment: FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment -FSharp.Compiler.Syntax.ParsedImplFileFragment: FSharp.Compiler.Syntax.ParsedImplFileFragment+Tags -FSharp.Compiler.Syntax.ParsedImplFileFragment: Int32 Tag -FSharp.Compiler.Syntax.ParsedImplFileFragment: Int32 get_Tag() -FSharp.Compiler.Syntax.ParsedImplFileFragment: System.String ToString() -FSharp.Compiler.Syntax.ParsedImplFileInput -FSharp.Compiler.Syntax.ParsedImplFileInput: Boolean get_isScript() -FSharp.Compiler.Syntax.ParsedImplFileInput: Boolean isScript -FSharp.Compiler.Syntax.ParsedImplFileInput: FSharp.Compiler.Syntax.ParsedImplFileInput NewParsedImplFileInput(System.String, Boolean, FSharp.Compiler.Syntax.QualifiedNameOfFile, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ScopedPragma], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleOrNamespace], System.Tuple`2[System.Boolean,System.Boolean]) -FSharp.Compiler.Syntax.ParsedImplFileInput: FSharp.Compiler.Syntax.QualifiedNameOfFile get_qualifiedNameOfFile() -FSharp.Compiler.Syntax.ParsedImplFileInput: FSharp.Compiler.Syntax.QualifiedNameOfFile qualifiedNameOfFile -FSharp.Compiler.Syntax.ParsedImplFileInput: Int32 Tag -FSharp.Compiler.Syntax.ParsedImplFileInput: Int32 get_Tag() -FSharp.Compiler.Syntax.ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective] get_hashDirectives() -FSharp.Compiler.Syntax.ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective] hashDirectives -FSharp.Compiler.Syntax.ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ScopedPragma] get_scopedPragmas() -FSharp.Compiler.Syntax.ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ScopedPragma] scopedPragmas -FSharp.Compiler.Syntax.ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleOrNamespace] get_modules() -FSharp.Compiler.Syntax.ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleOrNamespace] modules -FSharp.Compiler.Syntax.ParsedImplFileInput: System.String ToString() -FSharp.Compiler.Syntax.ParsedImplFileInput: System.String fileName -FSharp.Compiler.Syntax.ParsedImplFileInput: System.String get_fileName() -FSharp.Compiler.Syntax.ParsedImplFileInput: System.Tuple`2[System.Boolean,System.Boolean] get_isLastCompiland() -FSharp.Compiler.Syntax.ParsedImplFileInput: System.Tuple`2[System.Boolean,System.Boolean] isLastCompiland -FSharp.Compiler.Syntax.ParsedInput -FSharp.Compiler.Syntax.ParsedInput+ImplFile: FSharp.Compiler.Syntax.ParsedImplFileInput Item -FSharp.Compiler.Syntax.ParsedInput+ImplFile: FSharp.Compiler.Syntax.ParsedImplFileInput get_Item() -FSharp.Compiler.Syntax.ParsedInput+SigFile: FSharp.Compiler.Syntax.ParsedSigFileInput Item -FSharp.Compiler.Syntax.ParsedInput+SigFile: FSharp.Compiler.Syntax.ParsedSigFileInput get_Item() -FSharp.Compiler.Syntax.ParsedInput+Tags: Int32 ImplFile -FSharp.Compiler.Syntax.ParsedInput+Tags: Int32 SigFile -FSharp.Compiler.Syntax.ParsedInput: Boolean IsImplFile -FSharp.Compiler.Syntax.ParsedInput: Boolean IsSigFile -FSharp.Compiler.Syntax.ParsedInput: Boolean get_IsImplFile() -FSharp.Compiler.Syntax.ParsedInput: Boolean get_IsSigFile() -FSharp.Compiler.Syntax.ParsedInput: FSharp.Compiler.Syntax.ParsedInput NewImplFile(FSharp.Compiler.Syntax.ParsedImplFileInput) -FSharp.Compiler.Syntax.ParsedInput: FSharp.Compiler.Syntax.ParsedInput NewSigFile(FSharp.Compiler.Syntax.ParsedSigFileInput) -FSharp.Compiler.Syntax.ParsedInput: FSharp.Compiler.Syntax.ParsedInput+ImplFile -FSharp.Compiler.Syntax.ParsedInput: FSharp.Compiler.Syntax.ParsedInput+SigFile -FSharp.Compiler.Syntax.ParsedInput: FSharp.Compiler.Syntax.ParsedInput+Tags -FSharp.Compiler.Syntax.ParsedInput: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.ParsedInput: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.ParsedInput: Int32 Tag -FSharp.Compiler.Syntax.ParsedInput: Int32 get_Tag() -FSharp.Compiler.Syntax.ParsedInput: System.String FileName -FSharp.Compiler.Syntax.ParsedInput: System.String ToString() -FSharp.Compiler.Syntax.ParsedInput: System.String get_FileName() -FSharp.Compiler.Syntax.ParsedScriptInteraction -FSharp.Compiler.Syntax.ParsedScriptInteraction+Definitions: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.ParsedScriptInteraction+Definitions: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.ParsedScriptInteraction+Definitions: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] defns -FSharp.Compiler.Syntax.ParsedScriptInteraction+Definitions: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] get_defns() -FSharp.Compiler.Syntax.ParsedScriptInteraction+HashDirective: FSharp.Compiler.Syntax.ParsedHashDirective get_hashDirective() -FSharp.Compiler.Syntax.ParsedScriptInteraction+HashDirective: FSharp.Compiler.Syntax.ParsedHashDirective hashDirective -FSharp.Compiler.Syntax.ParsedScriptInteraction+HashDirective: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.ParsedScriptInteraction+HashDirective: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.ParsedScriptInteraction+Tags: Int32 Definitions -FSharp.Compiler.Syntax.ParsedScriptInteraction+Tags: Int32 HashDirective -FSharp.Compiler.Syntax.ParsedScriptInteraction: Boolean IsDefinitions -FSharp.Compiler.Syntax.ParsedScriptInteraction: Boolean IsHashDirective -FSharp.Compiler.Syntax.ParsedScriptInteraction: Boolean get_IsDefinitions() -FSharp.Compiler.Syntax.ParsedScriptInteraction: Boolean get_IsHashDirective() -FSharp.Compiler.Syntax.ParsedScriptInteraction: FSharp.Compiler.Syntax.ParsedScriptInteraction NewDefinitions(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.ParsedScriptInteraction: FSharp.Compiler.Syntax.ParsedScriptInteraction NewHashDirective(FSharp.Compiler.Syntax.ParsedHashDirective, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.ParsedScriptInteraction: FSharp.Compiler.Syntax.ParsedScriptInteraction+Definitions -FSharp.Compiler.Syntax.ParsedScriptInteraction: FSharp.Compiler.Syntax.ParsedScriptInteraction+HashDirective -FSharp.Compiler.Syntax.ParsedScriptInteraction: FSharp.Compiler.Syntax.ParsedScriptInteraction+Tags -FSharp.Compiler.Syntax.ParsedScriptInteraction: Int32 Tag -FSharp.Compiler.Syntax.ParsedScriptInteraction: Int32 get_Tag() -FSharp.Compiler.Syntax.ParsedScriptInteraction: System.String ToString() -FSharp.Compiler.Syntax.ParsedSigFile -FSharp.Compiler.Syntax.ParsedSigFile: FSharp.Compiler.Syntax.ParsedSigFile NewParsedSigFile(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedSigFileFragment]) -FSharp.Compiler.Syntax.ParsedSigFile: Int32 Tag -FSharp.Compiler.Syntax.ParsedSigFile: Int32 get_Tag() -FSharp.Compiler.Syntax.ParsedSigFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective] get_hashDirectives() -FSharp.Compiler.Syntax.ParsedSigFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective] hashDirectives -FSharp.Compiler.Syntax.ParsedSigFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedSigFileFragment] fragments -FSharp.Compiler.Syntax.ParsedSigFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedSigFileFragment] get_fragments() -FSharp.Compiler.Syntax.ParsedSigFile: System.String ToString() -FSharp.Compiler.Syntax.ParsedSigFileFragment -FSharp.Compiler.Syntax.ParsedSigFileFragment+AnonModule: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.ParsedSigFileFragment+AnonModule: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.ParsedSigFileFragment+AnonModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl] decls -FSharp.Compiler.Syntax.ParsedSigFileFragment+AnonModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl] get_decls() -FSharp.Compiler.Syntax.ParsedSigFileFragment+NamedModule: FSharp.Compiler.Syntax.SynModuleOrNamespaceSig get_namedModule() -FSharp.Compiler.Syntax.ParsedSigFileFragment+NamedModule: FSharp.Compiler.Syntax.SynModuleOrNamespaceSig namedModule -FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: Boolean get_isRecursive() -FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: Boolean isRecursive -FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind get_kind() -FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind kind -FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() -FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: FSharp.Compiler.Xml.PreXmlDoc xmlDoc -FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() -FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId -FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes -FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() -FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl] decls -FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl] get_decls() -FSharp.Compiler.Syntax.ParsedSigFileFragment+Tags: Int32 AnonModule -FSharp.Compiler.Syntax.ParsedSigFileFragment+Tags: Int32 NamedModule -FSharp.Compiler.Syntax.ParsedSigFileFragment+Tags: Int32 NamespaceFragment -FSharp.Compiler.Syntax.ParsedSigFileFragment: Boolean IsAnonModule -FSharp.Compiler.Syntax.ParsedSigFileFragment: Boolean IsNamedModule -FSharp.Compiler.Syntax.ParsedSigFileFragment: Boolean IsNamespaceFragment -FSharp.Compiler.Syntax.ParsedSigFileFragment: Boolean get_IsAnonModule() -FSharp.Compiler.Syntax.ParsedSigFileFragment: Boolean get_IsNamedModule() -FSharp.Compiler.Syntax.ParsedSigFileFragment: Boolean get_IsNamespaceFragment() -FSharp.Compiler.Syntax.ParsedSigFileFragment: FSharp.Compiler.Syntax.ParsedSigFileFragment NewAnonModule(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.ParsedSigFileFragment: FSharp.Compiler.Syntax.ParsedSigFileFragment NewNamedModule(FSharp.Compiler.Syntax.SynModuleOrNamespaceSig) -FSharp.Compiler.Syntax.ParsedSigFileFragment: FSharp.Compiler.Syntax.ParsedSigFileFragment NewNamespaceFragment(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], Boolean, FSharp.Compiler.Syntax.SynModuleOrNamespaceKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl], FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.ParsedSigFileFragment: FSharp.Compiler.Syntax.ParsedSigFileFragment+AnonModule -FSharp.Compiler.Syntax.ParsedSigFileFragment: FSharp.Compiler.Syntax.ParsedSigFileFragment+NamedModule -FSharp.Compiler.Syntax.ParsedSigFileFragment: FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment -FSharp.Compiler.Syntax.ParsedSigFileFragment: FSharp.Compiler.Syntax.ParsedSigFileFragment+Tags -FSharp.Compiler.Syntax.ParsedSigFileFragment: Int32 Tag -FSharp.Compiler.Syntax.ParsedSigFileFragment: Int32 get_Tag() -FSharp.Compiler.Syntax.ParsedSigFileFragment: System.String ToString() -FSharp.Compiler.Syntax.ParsedSigFileInput -FSharp.Compiler.Syntax.ParsedSigFileInput: FSharp.Compiler.Syntax.ParsedSigFileInput NewParsedSigFileInput(System.String, FSharp.Compiler.Syntax.QualifiedNameOfFile, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ScopedPragma], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleOrNamespaceSig]) -FSharp.Compiler.Syntax.ParsedSigFileInput: FSharp.Compiler.Syntax.QualifiedNameOfFile get_qualifiedNameOfFile() -FSharp.Compiler.Syntax.ParsedSigFileInput: FSharp.Compiler.Syntax.QualifiedNameOfFile qualifiedNameOfFile -FSharp.Compiler.Syntax.ParsedSigFileInput: Int32 Tag -FSharp.Compiler.Syntax.ParsedSigFileInput: Int32 get_Tag() -FSharp.Compiler.Syntax.ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective] get_hashDirectives() -FSharp.Compiler.Syntax.ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective] hashDirectives -FSharp.Compiler.Syntax.ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ScopedPragma] get_scopedPragmas() -FSharp.Compiler.Syntax.ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ScopedPragma] scopedPragmas -FSharp.Compiler.Syntax.ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleOrNamespaceSig] get_modules() -FSharp.Compiler.Syntax.ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleOrNamespaceSig] modules -FSharp.Compiler.Syntax.ParsedSigFileInput: System.String ToString() -FSharp.Compiler.Syntax.ParsedSigFileInput: System.String fileName -FSharp.Compiler.Syntax.ParsedSigFileInput: System.String get_fileName() -FSharp.Compiler.Syntax.ParserDetail -FSharp.Compiler.Syntax.ParserDetail+Tags: Int32 ErrorRecovery -FSharp.Compiler.Syntax.ParserDetail+Tags: Int32 Ok -FSharp.Compiler.Syntax.ParserDetail: Boolean Equals(FSharp.Compiler.Syntax.ParserDetail) -FSharp.Compiler.Syntax.ParserDetail: Boolean Equals(System.Object) -FSharp.Compiler.Syntax.ParserDetail: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.ParserDetail: Boolean IsErrorRecovery -FSharp.Compiler.Syntax.ParserDetail: Boolean IsOk -FSharp.Compiler.Syntax.ParserDetail: Boolean get_IsErrorRecovery() -FSharp.Compiler.Syntax.ParserDetail: Boolean get_IsOk() -FSharp.Compiler.Syntax.ParserDetail: FSharp.Compiler.Syntax.ParserDetail ErrorRecovery -FSharp.Compiler.Syntax.ParserDetail: FSharp.Compiler.Syntax.ParserDetail Ok -FSharp.Compiler.Syntax.ParserDetail: FSharp.Compiler.Syntax.ParserDetail get_ErrorRecovery() -FSharp.Compiler.Syntax.ParserDetail: FSharp.Compiler.Syntax.ParserDetail get_Ok() -FSharp.Compiler.Syntax.ParserDetail: FSharp.Compiler.Syntax.ParserDetail+Tags -FSharp.Compiler.Syntax.ParserDetail: Int32 CompareTo(FSharp.Compiler.Syntax.ParserDetail) -FSharp.Compiler.Syntax.ParserDetail: Int32 CompareTo(System.Object) -FSharp.Compiler.Syntax.ParserDetail: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.Syntax.ParserDetail: Int32 GetHashCode() -FSharp.Compiler.Syntax.ParserDetail: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.ParserDetail: Int32 Tag -FSharp.Compiler.Syntax.ParserDetail: Int32 get_Tag() -FSharp.Compiler.Syntax.ParserDetail: System.String ToString() -FSharp.Compiler.Syntax.PrettyNaming -FSharp.Compiler.Syntax.PrettyNaming: Boolean IsActivePatternName(System.String) -FSharp.Compiler.Syntax.PrettyNaming: Boolean IsCompilerGeneratedName(System.String) -FSharp.Compiler.Syntax.PrettyNaming: Boolean IsIdentifierFirstCharacter(Char) -FSharp.Compiler.Syntax.PrettyNaming: Boolean IsIdentifierPartCharacter(Char) -FSharp.Compiler.Syntax.PrettyNaming: Boolean IsInfixOperator(System.String) -FSharp.Compiler.Syntax.PrettyNaming: Boolean IsLongIdentifierPartCharacter(Char) -FSharp.Compiler.Syntax.PrettyNaming: Boolean IsMangledOpName(System.String) -FSharp.Compiler.Syntax.PrettyNaming: Boolean IsOperatorName(System.String) -FSharp.Compiler.Syntax.PrettyNaming: Boolean IsOperatorOrBacktickedName(System.String) -FSharp.Compiler.Syntax.PrettyNaming: Boolean IsPrefixOperator(System.String) -FSharp.Compiler.Syntax.PrettyNaming: Boolean IsPunctuation(System.String) -FSharp.Compiler.Syntax.PrettyNaming: Boolean IsTernaryOperator(System.String) -FSharp.Compiler.Syntax.PrettyNaming: Microsoft.FSharp.Collections.FSharpList`1[System.String] GetLongNameFromString(System.String) -FSharp.Compiler.Syntax.PrettyNaming: Microsoft.FSharp.Core.FSharpOption`1[System.String] TryChopPropertyName(System.String) -FSharp.Compiler.Syntax.PrettyNaming: System.String CompileOpName(System.String) -FSharp.Compiler.Syntax.PrettyNaming: System.String DecompileOpName(System.String) -FSharp.Compiler.Syntax.PrettyNaming: System.String DemangleOperatorName(System.String) -FSharp.Compiler.Syntax.PrettyNaming: System.String FormatAndOtherOverloadsString(Int32) -FSharp.Compiler.Syntax.PrettyNaming: System.String FsiDynamicModulePrefix -FSharp.Compiler.Syntax.PrettyNaming: System.String get_FsiDynamicModulePrefix() -FSharp.Compiler.Syntax.QualifiedNameOfFile -FSharp.Compiler.Syntax.QualifiedNameOfFile: FSharp.Compiler.Syntax.Ident Id -FSharp.Compiler.Syntax.QualifiedNameOfFile: FSharp.Compiler.Syntax.Ident Item -FSharp.Compiler.Syntax.QualifiedNameOfFile: FSharp.Compiler.Syntax.Ident get_Id() -FSharp.Compiler.Syntax.QualifiedNameOfFile: FSharp.Compiler.Syntax.Ident get_Item() -FSharp.Compiler.Syntax.QualifiedNameOfFile: FSharp.Compiler.Syntax.QualifiedNameOfFile NewQualifiedNameOfFile(FSharp.Compiler.Syntax.Ident) -FSharp.Compiler.Syntax.QualifiedNameOfFile: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.QualifiedNameOfFile: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.QualifiedNameOfFile: Int32 Tag -FSharp.Compiler.Syntax.QualifiedNameOfFile: Int32 get_Tag() -FSharp.Compiler.Syntax.QualifiedNameOfFile: System.String Text -FSharp.Compiler.Syntax.QualifiedNameOfFile: System.String ToString() -FSharp.Compiler.Syntax.QualifiedNameOfFile: System.String get_Text() -FSharp.Compiler.Syntax.ScopedPragma -FSharp.Compiler.Syntax.ScopedPragma: Boolean Equals(FSharp.Compiler.Syntax.ScopedPragma) -FSharp.Compiler.Syntax.ScopedPragma: Boolean Equals(System.Object) -FSharp.Compiler.Syntax.ScopedPragma: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.ScopedPragma: FSharp.Compiler.Syntax.ScopedPragma NewWarningOff(FSharp.Compiler.Text.Range, Int32) -FSharp.Compiler.Syntax.ScopedPragma: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.ScopedPragma: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.ScopedPragma: Int32 GetHashCode() -FSharp.Compiler.Syntax.ScopedPragma: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.ScopedPragma: Int32 Tag -FSharp.Compiler.Syntax.ScopedPragma: Int32 get_Tag() -FSharp.Compiler.Syntax.ScopedPragma: Int32 get_warningNumber() -FSharp.Compiler.Syntax.ScopedPragma: Int32 warningNumber -FSharp.Compiler.Syntax.ScopedPragma: System.String ToString() -FSharp.Compiler.Syntax.SeqExprOnly -FSharp.Compiler.Syntax.SeqExprOnly: Boolean Equals(FSharp.Compiler.Syntax.SeqExprOnly) -FSharp.Compiler.Syntax.SeqExprOnly: Boolean Equals(System.Object) -FSharp.Compiler.Syntax.SeqExprOnly: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.SeqExprOnly: Boolean Item -FSharp.Compiler.Syntax.SeqExprOnly: Boolean get_Item() -FSharp.Compiler.Syntax.SeqExprOnly: FSharp.Compiler.Syntax.SeqExprOnly NewSeqExprOnly(Boolean) -FSharp.Compiler.Syntax.SeqExprOnly: Int32 CompareTo(FSharp.Compiler.Syntax.SeqExprOnly) -FSharp.Compiler.Syntax.SeqExprOnly: Int32 CompareTo(System.Object) -FSharp.Compiler.Syntax.SeqExprOnly: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.Syntax.SeqExprOnly: Int32 GetHashCode() -FSharp.Compiler.Syntax.SeqExprOnly: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.SeqExprOnly: Int32 Tag -FSharp.Compiler.Syntax.SeqExprOnly: Int32 get_Tag() -FSharp.Compiler.Syntax.SeqExprOnly: System.String ToString() -FSharp.Compiler.Syntax.SynAccess -FSharp.Compiler.Syntax.SynAccess+Tags: Int32 Internal -FSharp.Compiler.Syntax.SynAccess+Tags: Int32 Private -FSharp.Compiler.Syntax.SynAccess+Tags: Int32 Public -FSharp.Compiler.Syntax.SynAccess: Boolean Equals(FSharp.Compiler.Syntax.SynAccess) -FSharp.Compiler.Syntax.SynAccess: Boolean Equals(System.Object) -FSharp.Compiler.Syntax.SynAccess: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.SynAccess: Boolean IsInternal -FSharp.Compiler.Syntax.SynAccess: Boolean IsPrivate -FSharp.Compiler.Syntax.SynAccess: Boolean IsPublic -FSharp.Compiler.Syntax.SynAccess: Boolean get_IsInternal() -FSharp.Compiler.Syntax.SynAccess: Boolean get_IsPrivate() -FSharp.Compiler.Syntax.SynAccess: Boolean get_IsPublic() -FSharp.Compiler.Syntax.SynAccess: FSharp.Compiler.Syntax.SynAccess Internal -FSharp.Compiler.Syntax.SynAccess: FSharp.Compiler.Syntax.SynAccess Private -FSharp.Compiler.Syntax.SynAccess: FSharp.Compiler.Syntax.SynAccess Public -FSharp.Compiler.Syntax.SynAccess: FSharp.Compiler.Syntax.SynAccess get_Internal() -FSharp.Compiler.Syntax.SynAccess: FSharp.Compiler.Syntax.SynAccess get_Private() -FSharp.Compiler.Syntax.SynAccess: FSharp.Compiler.Syntax.SynAccess get_Public() -FSharp.Compiler.Syntax.SynAccess: FSharp.Compiler.Syntax.SynAccess+Tags -FSharp.Compiler.Syntax.SynAccess: Int32 CompareTo(FSharp.Compiler.Syntax.SynAccess) -FSharp.Compiler.Syntax.SynAccess: Int32 CompareTo(System.Object) -FSharp.Compiler.Syntax.SynAccess: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.Syntax.SynAccess: Int32 GetHashCode() -FSharp.Compiler.Syntax.SynAccess: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.SynAccess: Int32 Tag -FSharp.Compiler.Syntax.SynAccess: Int32 get_Tag() -FSharp.Compiler.Syntax.SynAccess: System.String ToString() -FSharp.Compiler.Syntax.SynArgInfo -FSharp.Compiler.Syntax.SynArgInfo: Boolean get_optional() -FSharp.Compiler.Syntax.SynArgInfo: Boolean optional -FSharp.Compiler.Syntax.SynArgInfo: FSharp.Compiler.Syntax.SynArgInfo NewSynArgInfo(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident]) -FSharp.Compiler.Syntax.SynArgInfo: Int32 Tag -FSharp.Compiler.Syntax.SynArgInfo: Int32 get_Tag() -FSharp.Compiler.Syntax.SynArgInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes -FSharp.Compiler.Syntax.SynArgInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() -FSharp.Compiler.Syntax.SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] Ident -FSharp.Compiler.Syntax.SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_Ident() -FSharp.Compiler.Syntax.SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_ident() -FSharp.Compiler.Syntax.SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] ident -FSharp.Compiler.Syntax.SynArgInfo: System.String ToString() -FSharp.Compiler.Syntax.SynArgPats -FSharp.Compiler.Syntax.SynArgPats+NamePatPairs: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynArgPats+NamePatPairs: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynArgPats+NamePatPairs: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynPat]] get_pats() -FSharp.Compiler.Syntax.SynArgPats+NamePatPairs: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynPat]] pats -FSharp.Compiler.Syntax.SynArgPats+Pats: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat] get_pats() -FSharp.Compiler.Syntax.SynArgPats+Pats: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat] pats -FSharp.Compiler.Syntax.SynArgPats+Tags: Int32 NamePatPairs -FSharp.Compiler.Syntax.SynArgPats+Tags: Int32 Pats -FSharp.Compiler.Syntax.SynArgPats: Boolean IsNamePatPairs -FSharp.Compiler.Syntax.SynArgPats: Boolean IsPats -FSharp.Compiler.Syntax.SynArgPats: Boolean get_IsNamePatPairs() -FSharp.Compiler.Syntax.SynArgPats: Boolean get_IsPats() -FSharp.Compiler.Syntax.SynArgPats: FSharp.Compiler.Syntax.SynArgPats NewNamePatPairs(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynPat]], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynArgPats: FSharp.Compiler.Syntax.SynArgPats NewPats(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat]) -FSharp.Compiler.Syntax.SynArgPats: FSharp.Compiler.Syntax.SynArgPats+NamePatPairs -FSharp.Compiler.Syntax.SynArgPats: FSharp.Compiler.Syntax.SynArgPats+Pats -FSharp.Compiler.Syntax.SynArgPats: FSharp.Compiler.Syntax.SynArgPats+Tags -FSharp.Compiler.Syntax.SynArgPats: Int32 Tag -FSharp.Compiler.Syntax.SynArgPats: Int32 get_Tag() -FSharp.Compiler.Syntax.SynArgPats: System.String ToString() -FSharp.Compiler.Syntax.SynAttribute -FSharp.Compiler.Syntax.SynAttribute: Boolean AppliesToGetterAndSetter -FSharp.Compiler.Syntax.SynAttribute: Boolean get_AppliesToGetterAndSetter() -FSharp.Compiler.Syntax.SynAttribute: FSharp.Compiler.Syntax.LongIdentWithDots TypeName -FSharp.Compiler.Syntax.SynAttribute: FSharp.Compiler.Syntax.LongIdentWithDots get_TypeName() -FSharp.Compiler.Syntax.SynAttribute: FSharp.Compiler.Syntax.SynExpr ArgExpr -FSharp.Compiler.Syntax.SynAttribute: FSharp.Compiler.Syntax.SynExpr get_ArgExpr() -FSharp.Compiler.Syntax.SynAttribute: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynAttribute: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynAttribute: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] Target -FSharp.Compiler.Syntax.SynAttribute: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_Target() -FSharp.Compiler.Syntax.SynAttribute: System.String ToString() -FSharp.Compiler.Syntax.SynAttribute: Void .ctor(FSharp.Compiler.Syntax.LongIdentWithDots, FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], Boolean, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynAttributeList -FSharp.Compiler.Syntax.SynAttributeList: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynAttributeList: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynAttributeList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttribute] Attributes -FSharp.Compiler.Syntax.SynAttributeList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttribute] get_Attributes() -FSharp.Compiler.Syntax.SynAttributeList: System.String ToString() -FSharp.Compiler.Syntax.SynAttributeList: Void .ctor(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttribute], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynBinding -FSharp.Compiler.Syntax.SynBinding: Boolean get_isMutable() -FSharp.Compiler.Syntax.SynBinding: Boolean get_mustInline() -FSharp.Compiler.Syntax.SynBinding: Boolean isMutable -FSharp.Compiler.Syntax.SynBinding: Boolean mustInline -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.DebugPointAtBinding get_seqPoint() -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.DebugPointAtBinding seqPoint -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynBinding NewSynBinding(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Syntax.SynBindingKind, Boolean, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Xml.PreXmlDoc, FSharp.Compiler.Syntax.SynValData, FSharp.Compiler.Syntax.SynPat, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynBindingReturnInfo], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.DebugPointAtBinding) -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynBindingKind get_kind() -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynBindingKind kind -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynPat get_headPat() -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynPat headPat -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynValData get_valData() -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynValData valData -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Text.Range RangeOfBindingWithRhs -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Text.Range RangeOfBindingWithoutRhs -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Text.Range RangeOfHeadPattern -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Text.Range get_RangeOfBindingWithRhs() -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Text.Range get_RangeOfBindingWithoutRhs() -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Text.Range get_RangeOfHeadPattern() -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() -FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Xml.PreXmlDoc xmlDoc -FSharp.Compiler.Syntax.SynBinding: Int32 Tag -FSharp.Compiler.Syntax.SynBinding: Int32 get_Tag() -FSharp.Compiler.Syntax.SynBinding: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes -FSharp.Compiler.Syntax.SynBinding: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() -FSharp.Compiler.Syntax.SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility -FSharp.Compiler.Syntax.SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() -FSharp.Compiler.Syntax.SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynBindingReturnInfo] get_returnInfo() -FSharp.Compiler.Syntax.SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynBindingReturnInfo] returnInfo -FSharp.Compiler.Syntax.SynBinding: System.String ToString() -FSharp.Compiler.Syntax.SynBindingKind -FSharp.Compiler.Syntax.SynBindingKind+Tags: Int32 Do -FSharp.Compiler.Syntax.SynBindingKind+Tags: Int32 Normal -FSharp.Compiler.Syntax.SynBindingKind+Tags: Int32 StandaloneExpression -FSharp.Compiler.Syntax.SynBindingKind: Boolean Equals(FSharp.Compiler.Syntax.SynBindingKind) -FSharp.Compiler.Syntax.SynBindingKind: Boolean Equals(System.Object) -FSharp.Compiler.Syntax.SynBindingKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.SynBindingKind: Boolean IsDo -FSharp.Compiler.Syntax.SynBindingKind: Boolean IsNormal -FSharp.Compiler.Syntax.SynBindingKind: Boolean IsStandaloneExpression -FSharp.Compiler.Syntax.SynBindingKind: Boolean get_IsDo() -FSharp.Compiler.Syntax.SynBindingKind: Boolean get_IsNormal() -FSharp.Compiler.Syntax.SynBindingKind: Boolean get_IsStandaloneExpression() -FSharp.Compiler.Syntax.SynBindingKind: FSharp.Compiler.Syntax.SynBindingKind Do -FSharp.Compiler.Syntax.SynBindingKind: FSharp.Compiler.Syntax.SynBindingKind Normal -FSharp.Compiler.Syntax.SynBindingKind: FSharp.Compiler.Syntax.SynBindingKind StandaloneExpression -FSharp.Compiler.Syntax.SynBindingKind: FSharp.Compiler.Syntax.SynBindingKind get_Do() -FSharp.Compiler.Syntax.SynBindingKind: FSharp.Compiler.Syntax.SynBindingKind get_Normal() -FSharp.Compiler.Syntax.SynBindingKind: FSharp.Compiler.Syntax.SynBindingKind get_StandaloneExpression() -FSharp.Compiler.Syntax.SynBindingKind: FSharp.Compiler.Syntax.SynBindingKind+Tags -FSharp.Compiler.Syntax.SynBindingKind: Int32 CompareTo(FSharp.Compiler.Syntax.SynBindingKind) -FSharp.Compiler.Syntax.SynBindingKind: Int32 CompareTo(System.Object) -FSharp.Compiler.Syntax.SynBindingKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.Syntax.SynBindingKind: Int32 GetHashCode() -FSharp.Compiler.Syntax.SynBindingKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.SynBindingKind: Int32 Tag -FSharp.Compiler.Syntax.SynBindingKind: Int32 get_Tag() -FSharp.Compiler.Syntax.SynBindingKind: System.String ToString() -FSharp.Compiler.Syntax.SynBindingReturnInfo -FSharp.Compiler.Syntax.SynBindingReturnInfo: FSharp.Compiler.Syntax.SynBindingReturnInfo NewSynBindingReturnInfo(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList]) -FSharp.Compiler.Syntax.SynBindingReturnInfo: FSharp.Compiler.Syntax.SynType get_typeName() -FSharp.Compiler.Syntax.SynBindingReturnInfo: FSharp.Compiler.Syntax.SynType typeName -FSharp.Compiler.Syntax.SynBindingReturnInfo: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynBindingReturnInfo: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynBindingReturnInfo: Int32 Tag -FSharp.Compiler.Syntax.SynBindingReturnInfo: Int32 get_Tag() -FSharp.Compiler.Syntax.SynBindingReturnInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes -FSharp.Compiler.Syntax.SynBindingReturnInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() -FSharp.Compiler.Syntax.SynBindingReturnInfo: System.String ToString() -FSharp.Compiler.Syntax.SynByteStringKind -FSharp.Compiler.Syntax.SynByteStringKind+Tags: Int32 Regular -FSharp.Compiler.Syntax.SynByteStringKind+Tags: Int32 Verbatim -FSharp.Compiler.Syntax.SynByteStringKind: Boolean Equals(FSharp.Compiler.Syntax.SynByteStringKind) -FSharp.Compiler.Syntax.SynByteStringKind: Boolean Equals(System.Object) -FSharp.Compiler.Syntax.SynByteStringKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.SynByteStringKind: Boolean IsRegular -FSharp.Compiler.Syntax.SynByteStringKind: Boolean IsVerbatim -FSharp.Compiler.Syntax.SynByteStringKind: Boolean get_IsRegular() -FSharp.Compiler.Syntax.SynByteStringKind: Boolean get_IsVerbatim() -FSharp.Compiler.Syntax.SynByteStringKind: FSharp.Compiler.Syntax.SynByteStringKind Regular -FSharp.Compiler.Syntax.SynByteStringKind: FSharp.Compiler.Syntax.SynByteStringKind Verbatim -FSharp.Compiler.Syntax.SynByteStringKind: FSharp.Compiler.Syntax.SynByteStringKind get_Regular() -FSharp.Compiler.Syntax.SynByteStringKind: FSharp.Compiler.Syntax.SynByteStringKind get_Verbatim() -FSharp.Compiler.Syntax.SynByteStringKind: FSharp.Compiler.Syntax.SynByteStringKind+Tags -FSharp.Compiler.Syntax.SynByteStringKind: Int32 CompareTo(FSharp.Compiler.Syntax.SynByteStringKind) -FSharp.Compiler.Syntax.SynByteStringKind: Int32 CompareTo(System.Object) -FSharp.Compiler.Syntax.SynByteStringKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.Syntax.SynByteStringKind: Int32 GetHashCode() -FSharp.Compiler.Syntax.SynByteStringKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.SynByteStringKind: Int32 Tag -FSharp.Compiler.Syntax.SynByteStringKind: Int32 get_Tag() -FSharp.Compiler.Syntax.SynByteStringKind: System.String ToString() -FSharp.Compiler.Syntax.SynComponentInfo -FSharp.Compiler.Syntax.SynComponentInfo: Boolean get_preferPostfix() -FSharp.Compiler.Syntax.SynComponentInfo: Boolean preferPostfix -FSharp.Compiler.Syntax.SynComponentInfo: FSharp.Compiler.Syntax.SynComponentInfo NewSynComponentInfo(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynTyparDecls], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Xml.PreXmlDoc, Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynComponentInfo: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynComponentInfo: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynComponentInfo: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynComponentInfo: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynComponentInfo: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() -FSharp.Compiler.Syntax.SynComponentInfo: FSharp.Compiler.Xml.PreXmlDoc xmlDoc -FSharp.Compiler.Syntax.SynComponentInfo: Int32 Tag -FSharp.Compiler.Syntax.SynComponentInfo: Int32 get_Tag() -FSharp.Compiler.Syntax.SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() -FSharp.Compiler.Syntax.SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId -FSharp.Compiler.Syntax.SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes -FSharp.Compiler.Syntax.SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() -FSharp.Compiler.Syntax.SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint] constraints -FSharp.Compiler.Syntax.SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint] get_constraints() -FSharp.Compiler.Syntax.SynComponentInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility -FSharp.Compiler.Syntax.SynComponentInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() -FSharp.Compiler.Syntax.SynComponentInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynTyparDecls] get_typeParams() -FSharp.Compiler.Syntax.SynComponentInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynTyparDecls] typeParams -FSharp.Compiler.Syntax.SynComponentInfo: System.String ToString() -FSharp.Compiler.Syntax.SynConst -FSharp.Compiler.Syntax.SynConst+Bool: Boolean Item -FSharp.Compiler.Syntax.SynConst+Bool: Boolean get_Item() -FSharp.Compiler.Syntax.SynConst+Byte: Byte Item -FSharp.Compiler.Syntax.SynConst+Byte: Byte get_Item() -FSharp.Compiler.Syntax.SynConst+Bytes: Byte[] bytes -FSharp.Compiler.Syntax.SynConst+Bytes: Byte[] get_bytes() -FSharp.Compiler.Syntax.SynConst+Bytes: FSharp.Compiler.Syntax.SynByteStringKind get_synByteStringKind() -FSharp.Compiler.Syntax.SynConst+Bytes: FSharp.Compiler.Syntax.SynByteStringKind synByteStringKind -FSharp.Compiler.Syntax.SynConst+Bytes: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynConst+Bytes: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynConst+Char: Char Item -FSharp.Compiler.Syntax.SynConst+Char: Char get_Item() -FSharp.Compiler.Syntax.SynConst+Decimal: System.Decimal Item -FSharp.Compiler.Syntax.SynConst+Decimal: System.Decimal get_Item() -FSharp.Compiler.Syntax.SynConst+Double: Double Item -FSharp.Compiler.Syntax.SynConst+Double: Double get_Item() -FSharp.Compiler.Syntax.SynConst+Int16: Int16 Item -FSharp.Compiler.Syntax.SynConst+Int16: Int16 get_Item() -FSharp.Compiler.Syntax.SynConst+Int32: Int32 Item -FSharp.Compiler.Syntax.SynConst+Int32: Int32 get_Item() -FSharp.Compiler.Syntax.SynConst+Int64: Int64 Item -FSharp.Compiler.Syntax.SynConst+Int64: Int64 get_Item() -FSharp.Compiler.Syntax.SynConst+IntPtr: Int64 Item -FSharp.Compiler.Syntax.SynConst+IntPtr: Int64 get_Item() -FSharp.Compiler.Syntax.SynConst+Measure: FSharp.Compiler.Syntax.SynConst constant -FSharp.Compiler.Syntax.SynConst+Measure: FSharp.Compiler.Syntax.SynConst get_constant() -FSharp.Compiler.Syntax.SynConst+Measure: FSharp.Compiler.Syntax.SynMeasure Item3 -FSharp.Compiler.Syntax.SynConst+Measure: FSharp.Compiler.Syntax.SynMeasure get_Item3() -FSharp.Compiler.Syntax.SynConst+Measure: FSharp.Compiler.Text.Range constantRange -FSharp.Compiler.Syntax.SynConst+Measure: FSharp.Compiler.Text.Range get_constantRange() -FSharp.Compiler.Syntax.SynConst+SByte: SByte Item -FSharp.Compiler.Syntax.SynConst+SByte: SByte get_Item() -FSharp.Compiler.Syntax.SynConst+Single: Single Item -FSharp.Compiler.Syntax.SynConst+Single: Single get_Item() -FSharp.Compiler.Syntax.SynConst+SourceIdentifier: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynConst+SourceIdentifier: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynConst+SourceIdentifier: System.String constant -FSharp.Compiler.Syntax.SynConst+SourceIdentifier: System.String get_constant() -FSharp.Compiler.Syntax.SynConst+SourceIdentifier: System.String get_value() -FSharp.Compiler.Syntax.SynConst+SourceIdentifier: System.String value -FSharp.Compiler.Syntax.SynConst+String: FSharp.Compiler.Syntax.SynStringKind get_synStringKind() -FSharp.Compiler.Syntax.SynConst+String: FSharp.Compiler.Syntax.SynStringKind synStringKind -FSharp.Compiler.Syntax.SynConst+String: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynConst+String: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynConst+String: System.String get_text() -FSharp.Compiler.Syntax.SynConst+String: System.String text -FSharp.Compiler.Syntax.SynConst+Tags: Int32 Bool -FSharp.Compiler.Syntax.SynConst+Tags: Int32 Byte -FSharp.Compiler.Syntax.SynConst+Tags: Int32 Bytes -FSharp.Compiler.Syntax.SynConst+Tags: Int32 Char -FSharp.Compiler.Syntax.SynConst+Tags: Int32 Decimal -FSharp.Compiler.Syntax.SynConst+Tags: Int32 Double -FSharp.Compiler.Syntax.SynConst+Tags: Int32 Int16 -FSharp.Compiler.Syntax.SynConst+Tags: Int32 Int32 -FSharp.Compiler.Syntax.SynConst+Tags: Int32 Int64 -FSharp.Compiler.Syntax.SynConst+Tags: Int32 IntPtr -FSharp.Compiler.Syntax.SynConst+Tags: Int32 Measure -FSharp.Compiler.Syntax.SynConst+Tags: Int32 SByte -FSharp.Compiler.Syntax.SynConst+Tags: Int32 Single -FSharp.Compiler.Syntax.SynConst+Tags: Int32 SourceIdentifier -FSharp.Compiler.Syntax.SynConst+Tags: Int32 String -FSharp.Compiler.Syntax.SynConst+Tags: Int32 UInt16 -FSharp.Compiler.Syntax.SynConst+Tags: Int32 UInt16s -FSharp.Compiler.Syntax.SynConst+Tags: Int32 UInt32 -FSharp.Compiler.Syntax.SynConst+Tags: Int32 UInt64 -FSharp.Compiler.Syntax.SynConst+Tags: Int32 UIntPtr -FSharp.Compiler.Syntax.SynConst+Tags: Int32 Unit -FSharp.Compiler.Syntax.SynConst+Tags: Int32 UserNum -FSharp.Compiler.Syntax.SynConst+UInt16: UInt16 Item -FSharp.Compiler.Syntax.SynConst+UInt16: UInt16 get_Item() -FSharp.Compiler.Syntax.SynConst+UInt16s: UInt16[] Item -FSharp.Compiler.Syntax.SynConst+UInt16s: UInt16[] get_Item() -FSharp.Compiler.Syntax.SynConst+UInt32: UInt32 Item -FSharp.Compiler.Syntax.SynConst+UInt32: UInt32 get_Item() -FSharp.Compiler.Syntax.SynConst+UInt64: UInt64 Item -FSharp.Compiler.Syntax.SynConst+UInt64: UInt64 get_Item() -FSharp.Compiler.Syntax.SynConst+UIntPtr: UInt64 Item -FSharp.Compiler.Syntax.SynConst+UIntPtr: UInt64 get_Item() -FSharp.Compiler.Syntax.SynConst+UserNum: System.String get_suffix() -FSharp.Compiler.Syntax.SynConst+UserNum: System.String get_value() -FSharp.Compiler.Syntax.SynConst+UserNum: System.String suffix -FSharp.Compiler.Syntax.SynConst+UserNum: System.String value -FSharp.Compiler.Syntax.SynConst: Boolean IsBool -FSharp.Compiler.Syntax.SynConst: Boolean IsByte -FSharp.Compiler.Syntax.SynConst: Boolean IsBytes -FSharp.Compiler.Syntax.SynConst: Boolean IsChar -FSharp.Compiler.Syntax.SynConst: Boolean IsDecimal -FSharp.Compiler.Syntax.SynConst: Boolean IsDouble -FSharp.Compiler.Syntax.SynConst: Boolean IsInt16 -FSharp.Compiler.Syntax.SynConst: Boolean IsInt32 -FSharp.Compiler.Syntax.SynConst: Boolean IsInt64 -FSharp.Compiler.Syntax.SynConst: Boolean IsIntPtr -FSharp.Compiler.Syntax.SynConst: Boolean IsMeasure -FSharp.Compiler.Syntax.SynConst: Boolean IsSByte -FSharp.Compiler.Syntax.SynConst: Boolean IsSingle -FSharp.Compiler.Syntax.SynConst: Boolean IsSourceIdentifier -FSharp.Compiler.Syntax.SynConst: Boolean IsString -FSharp.Compiler.Syntax.SynConst: Boolean IsUInt16 -FSharp.Compiler.Syntax.SynConst: Boolean IsUInt16s -FSharp.Compiler.Syntax.SynConst: Boolean IsUInt32 -FSharp.Compiler.Syntax.SynConst: Boolean IsUInt64 -FSharp.Compiler.Syntax.SynConst: Boolean IsUIntPtr -FSharp.Compiler.Syntax.SynConst: Boolean IsUnit -FSharp.Compiler.Syntax.SynConst: Boolean IsUserNum -FSharp.Compiler.Syntax.SynConst: Boolean get_IsBool() -FSharp.Compiler.Syntax.SynConst: Boolean get_IsByte() -FSharp.Compiler.Syntax.SynConst: Boolean get_IsBytes() -FSharp.Compiler.Syntax.SynConst: Boolean get_IsChar() -FSharp.Compiler.Syntax.SynConst: Boolean get_IsDecimal() -FSharp.Compiler.Syntax.SynConst: Boolean get_IsDouble() -FSharp.Compiler.Syntax.SynConst: Boolean get_IsInt16() -FSharp.Compiler.Syntax.SynConst: Boolean get_IsInt32() -FSharp.Compiler.Syntax.SynConst: Boolean get_IsInt64() -FSharp.Compiler.Syntax.SynConst: Boolean get_IsIntPtr() -FSharp.Compiler.Syntax.SynConst: Boolean get_IsMeasure() -FSharp.Compiler.Syntax.SynConst: Boolean get_IsSByte() -FSharp.Compiler.Syntax.SynConst: Boolean get_IsSingle() -FSharp.Compiler.Syntax.SynConst: Boolean get_IsSourceIdentifier() -FSharp.Compiler.Syntax.SynConst: Boolean get_IsString() -FSharp.Compiler.Syntax.SynConst: Boolean get_IsUInt16() -FSharp.Compiler.Syntax.SynConst: Boolean get_IsUInt16s() -FSharp.Compiler.Syntax.SynConst: Boolean get_IsUInt32() -FSharp.Compiler.Syntax.SynConst: Boolean get_IsUInt64() -FSharp.Compiler.Syntax.SynConst: Boolean get_IsUIntPtr() -FSharp.Compiler.Syntax.SynConst: Boolean get_IsUnit() -FSharp.Compiler.Syntax.SynConst: Boolean get_IsUserNum() -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewBool(Boolean) -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewByte(Byte) -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewBytes(Byte[], FSharp.Compiler.Syntax.SynByteStringKind, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewChar(Char) -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewDecimal(System.Decimal) -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewDouble(Double) -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewInt16(Int16) -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewInt32(Int32) -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewInt64(Int64) -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewIntPtr(Int64) -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewMeasure(FSharp.Compiler.Syntax.SynConst, FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.SynMeasure) -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewSByte(SByte) -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewSingle(Single) -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewSourceIdentifier(System.String, System.String, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewString(System.String, FSharp.Compiler.Syntax.SynStringKind, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewUInt16(UInt16) -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewUInt16s(UInt16[]) -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewUInt32(UInt32) -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewUInt64(UInt64) -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewUIntPtr(UInt64) -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewUserNum(System.String, System.String) -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst Unit -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst get_Unit() -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Bool -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Byte -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Bytes -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Char -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Decimal -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Double -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Int16 -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Int32 -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Int64 -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+IntPtr -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Measure -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+SByte -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Single -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+SourceIdentifier -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+String -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Tags -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+UInt16 -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+UInt16s -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+UInt32 -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+UInt64 -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+UIntPtr -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+UserNum -FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Text.Range Range(FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynConst: Int32 Tag -FSharp.Compiler.Syntax.SynConst: Int32 get_Tag() -FSharp.Compiler.Syntax.SynConst: System.String ToString() -FSharp.Compiler.Syntax.SynEnumCase -FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Syntax.Ident get_ident() -FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Syntax.Ident ident -FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Syntax.SynConst get_value() -FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Syntax.SynConst value -FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Syntax.SynEnumCase NewSynEnumCase(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Syntax.Ident, FSharp.Compiler.Syntax.SynConst, FSharp.Compiler.Text.Range, FSharp.Compiler.Xml.PreXmlDoc, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Text.Range get_valueRange() -FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Text.Range valueRange -FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() -FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Xml.PreXmlDoc xmlDoc -FSharp.Compiler.Syntax.SynEnumCase: Int32 Tag -FSharp.Compiler.Syntax.SynEnumCase: Int32 get_Tag() -FSharp.Compiler.Syntax.SynEnumCase: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes -FSharp.Compiler.Syntax.SynEnumCase: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() -FSharp.Compiler.Syntax.SynEnumCase: System.String ToString() -FSharp.Compiler.Syntax.SynExceptionDefn -FSharp.Compiler.Syntax.SynExceptionDefn: FSharp.Compiler.Syntax.SynExceptionDefn NewSynExceptionDefn(FSharp.Compiler.Syntax.SynExceptionDefnRepr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExceptionDefn: FSharp.Compiler.Syntax.SynExceptionDefnRepr exnRepr -FSharp.Compiler.Syntax.SynExceptionDefn: FSharp.Compiler.Syntax.SynExceptionDefnRepr get_exnRepr() -FSharp.Compiler.Syntax.SynExceptionDefn: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynExceptionDefn: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynExceptionDefn: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExceptionDefn: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExceptionDefn: Int32 Tag -FSharp.Compiler.Syntax.SynExceptionDefn: Int32 get_Tag() -FSharp.Compiler.Syntax.SynExceptionDefn: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn] get_members() -FSharp.Compiler.Syntax.SynExceptionDefn: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn] members -FSharp.Compiler.Syntax.SynExceptionDefn: System.String ToString() -FSharp.Compiler.Syntax.SynExceptionDefnRepr -FSharp.Compiler.Syntax.SynExceptionDefnRepr: FSharp.Compiler.Syntax.SynExceptionDefnRepr NewSynExceptionDefnRepr(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Syntax.SynUnionCase, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident]], FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExceptionDefnRepr: FSharp.Compiler.Syntax.SynUnionCase caseName -FSharp.Compiler.Syntax.SynExceptionDefnRepr: FSharp.Compiler.Syntax.SynUnionCase get_caseName() -FSharp.Compiler.Syntax.SynExceptionDefnRepr: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynExceptionDefnRepr: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynExceptionDefnRepr: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExceptionDefnRepr: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExceptionDefnRepr: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() -FSharp.Compiler.Syntax.SynExceptionDefnRepr: FSharp.Compiler.Xml.PreXmlDoc xmlDoc -FSharp.Compiler.Syntax.SynExceptionDefnRepr: Int32 Tag -FSharp.Compiler.Syntax.SynExceptionDefnRepr: Int32 get_Tag() -FSharp.Compiler.Syntax.SynExceptionDefnRepr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes -FSharp.Compiler.Syntax.SynExceptionDefnRepr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() -FSharp.Compiler.Syntax.SynExceptionDefnRepr: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility -FSharp.Compiler.Syntax.SynExceptionDefnRepr: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() -FSharp.Compiler.Syntax.SynExceptionDefnRepr: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident]] get_longId() -FSharp.Compiler.Syntax.SynExceptionDefnRepr: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident]] longId -FSharp.Compiler.Syntax.SynExceptionDefnRepr: System.String ToString() -FSharp.Compiler.Syntax.SynExceptionSig -FSharp.Compiler.Syntax.SynExceptionSig: FSharp.Compiler.Syntax.SynExceptionDefnRepr exnRepr -FSharp.Compiler.Syntax.SynExceptionSig: FSharp.Compiler.Syntax.SynExceptionDefnRepr get_exnRepr() -FSharp.Compiler.Syntax.SynExceptionSig: FSharp.Compiler.Syntax.SynExceptionSig NewSynExceptionSig(FSharp.Compiler.Syntax.SynExceptionDefnRepr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExceptionSig: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExceptionSig: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExceptionSig: Int32 Tag -FSharp.Compiler.Syntax.SynExceptionSig: Int32 get_Tag() -FSharp.Compiler.Syntax.SynExceptionSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig] get_members() -FSharp.Compiler.Syntax.SynExceptionSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig] members -FSharp.Compiler.Syntax.SynExceptionSig: System.String ToString() -FSharp.Compiler.Syntax.SynExpr -FSharp.Compiler.Syntax.SynExpr+AddressOf: Boolean get_isByref() -FSharp.Compiler.Syntax.SynExpr+AddressOf: Boolean isByref -FSharp.Compiler.Syntax.SynExpr+AddressOf: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+AddressOf: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+AddressOf: FSharp.Compiler.Text.Range get_opRange() -FSharp.Compiler.Syntax.SynExpr+AddressOf: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+AddressOf: FSharp.Compiler.Text.Range opRange -FSharp.Compiler.Syntax.SynExpr+AddressOf: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+AnonRecd: Boolean get_isStruct() -FSharp.Compiler.Syntax.SynExpr+AnonRecd: Boolean isStruct -FSharp.Compiler.Syntax.SynExpr+AnonRecd: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+AnonRecd: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynExpr]] get_recordFields() -FSharp.Compiler.Syntax.SynExpr+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynExpr]] recordFields -FSharp.Compiler.Syntax.SynExpr+AnonRecd: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]] copyInfo -FSharp.Compiler.Syntax.SynExpr+AnonRecd: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]] get_copyInfo() -FSharp.Compiler.Syntax.SynExpr+App: Boolean get_isInfix() -FSharp.Compiler.Syntax.SynExpr+App: Boolean isInfix -FSharp.Compiler.Syntax.SynExpr+App: FSharp.Compiler.Syntax.ExprAtomicFlag flag -FSharp.Compiler.Syntax.SynExpr+App: FSharp.Compiler.Syntax.ExprAtomicFlag get_flag() -FSharp.Compiler.Syntax.SynExpr+App: FSharp.Compiler.Syntax.SynExpr argExpr -FSharp.Compiler.Syntax.SynExpr+App: FSharp.Compiler.Syntax.SynExpr funcExpr -FSharp.Compiler.Syntax.SynExpr+App: FSharp.Compiler.Syntax.SynExpr get_argExpr() -FSharp.Compiler.Syntax.SynExpr+App: FSharp.Compiler.Syntax.SynExpr get_funcExpr() -FSharp.Compiler.Syntax.SynExpr+App: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+App: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+ArbitraryAfterError: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+ArbitraryAfterError: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+ArbitraryAfterError: System.String debugStr -FSharp.Compiler.Syntax.SynExpr+ArbitraryAfterError: System.String get_debugStr() -FSharp.Compiler.Syntax.SynExpr+ArrayOrList: Boolean get_isArray() -FSharp.Compiler.Syntax.SynExpr+ArrayOrList: Boolean isArray -FSharp.Compiler.Syntax.SynExpr+ArrayOrList: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+ArrayOrList: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+ArrayOrList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr] exprs -FSharp.Compiler.Syntax.SynExpr+ArrayOrList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr] get_exprs() -FSharp.Compiler.Syntax.SynExpr+ArrayOrListOfSeqExpr: Boolean get_isArray() -FSharp.Compiler.Syntax.SynExpr+ArrayOrListOfSeqExpr: Boolean isArray -FSharp.Compiler.Syntax.SynExpr+ArrayOrListOfSeqExpr: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+ArrayOrListOfSeqExpr: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+ArrayOrListOfSeqExpr: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+ArrayOrListOfSeqExpr: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+Assert: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+Assert: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+Assert: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+Assert: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+CompExpr: Boolean get_isArrayOrList() -FSharp.Compiler.Syntax.SynExpr+CompExpr: Boolean isArrayOrList -FSharp.Compiler.Syntax.SynExpr+CompExpr: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+CompExpr: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+CompExpr: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+CompExpr: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+CompExpr: Microsoft.FSharp.Core.FSharpRef`1[System.Boolean] get_isNotNakedRefCell() -FSharp.Compiler.Syntax.SynExpr+CompExpr: Microsoft.FSharp.Core.FSharpRef`1[System.Boolean] isNotNakedRefCell -FSharp.Compiler.Syntax.SynExpr+Const: FSharp.Compiler.Syntax.SynConst constant -FSharp.Compiler.Syntax.SynExpr+Const: FSharp.Compiler.Syntax.SynConst get_constant() -FSharp.Compiler.Syntax.SynExpr+Const: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+Const: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+Do: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+Do: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+Do: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+Do: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+DoBang: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+DoBang: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+DoBang: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+DoBang: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+DotGet: FSharp.Compiler.Syntax.LongIdentWithDots get_longDotId() -FSharp.Compiler.Syntax.SynExpr+DotGet: FSharp.Compiler.Syntax.LongIdentWithDots longDotId -FSharp.Compiler.Syntax.SynExpr+DotGet: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+DotGet: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+DotGet: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+DotGet: FSharp.Compiler.Text.Range get_rangeOfDot() -FSharp.Compiler.Syntax.SynExpr+DotGet: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+DotGet: FSharp.Compiler.Text.Range rangeOfDot -FSharp.Compiler.Syntax.SynExpr+DotIndexedGet: FSharp.Compiler.Syntax.SynExpr get_objectExpr() -FSharp.Compiler.Syntax.SynExpr+DotIndexedGet: FSharp.Compiler.Syntax.SynExpr objectExpr -FSharp.Compiler.Syntax.SynExpr+DotIndexedGet: FSharp.Compiler.Text.Range dotRange -FSharp.Compiler.Syntax.SynExpr+DotIndexedGet: FSharp.Compiler.Text.Range get_dotRange() -FSharp.Compiler.Syntax.SynExpr+DotIndexedGet: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+DotIndexedGet: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+DotIndexedGet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynIndexerArg] get_indexExprs() -FSharp.Compiler.Syntax.SynExpr+DotIndexedGet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynIndexerArg] indexExprs -FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: FSharp.Compiler.Syntax.SynExpr get_objectExpr() -FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: FSharp.Compiler.Syntax.SynExpr get_valueExpr() -FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: FSharp.Compiler.Syntax.SynExpr objectExpr -FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: FSharp.Compiler.Syntax.SynExpr valueExpr -FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: FSharp.Compiler.Text.Range dotRange -FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: FSharp.Compiler.Text.Range get_dotRange() -FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: FSharp.Compiler.Text.Range get_leftOfSetRange() -FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: FSharp.Compiler.Text.Range leftOfSetRange -FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynIndexerArg] get_indexExprs() -FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynIndexerArg] indexExprs -FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet: FSharp.Compiler.Syntax.LongIdentWithDots get_longDotId() -FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet: FSharp.Compiler.Syntax.LongIdentWithDots longDotId -FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet: FSharp.Compiler.Syntax.SynExpr argExpr -FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet: FSharp.Compiler.Syntax.SynExpr get_argExpr() -FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet: FSharp.Compiler.Syntax.SynExpr get_rhsExpr() -FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet: FSharp.Compiler.Syntax.SynExpr get_targetExpr() -FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet: FSharp.Compiler.Syntax.SynExpr rhsExpr -FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet: FSharp.Compiler.Syntax.SynExpr targetExpr -FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+DotSet: FSharp.Compiler.Syntax.LongIdentWithDots get_longDotId() -FSharp.Compiler.Syntax.SynExpr+DotSet: FSharp.Compiler.Syntax.LongIdentWithDots longDotId -FSharp.Compiler.Syntax.SynExpr+DotSet: FSharp.Compiler.Syntax.SynExpr get_rhsExpr() -FSharp.Compiler.Syntax.SynExpr+DotSet: FSharp.Compiler.Syntax.SynExpr get_targetExpr() -FSharp.Compiler.Syntax.SynExpr+DotSet: FSharp.Compiler.Syntax.SynExpr rhsExpr -FSharp.Compiler.Syntax.SynExpr+DotSet: FSharp.Compiler.Syntax.SynExpr targetExpr -FSharp.Compiler.Syntax.SynExpr+DotSet: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+DotSet: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+Downcast: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+Downcast: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+Downcast: FSharp.Compiler.Syntax.SynType get_targetType() -FSharp.Compiler.Syntax.SynExpr+Downcast: FSharp.Compiler.Syntax.SynType targetType -FSharp.Compiler.Syntax.SynExpr+Downcast: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+Downcast: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+Fixed: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+Fixed: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+Fixed: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+Fixed: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+For: Boolean direction -FSharp.Compiler.Syntax.SynExpr+For: Boolean get_direction() -FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.DebugPointAtFor forSeqPoint -FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.DebugPointAtFor get_forSeqPoint() -FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.Ident get_ident() -FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.Ident ident -FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.SynExpr doBody -FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.SynExpr get_doBody() -FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.SynExpr get_identBody() -FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.SynExpr get_toBody() -FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.SynExpr identBody -FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.SynExpr toBody -FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+ForEach: Boolean get_isFromSource() -FSharp.Compiler.Syntax.SynExpr+ForEach: Boolean isFromSource -FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Syntax.DebugPointAtFor forSeqPoint -FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Syntax.DebugPointAtFor get_forSeqPoint() -FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Syntax.SeqExprOnly get_seqExprOnly() -FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Syntax.SeqExprOnly seqExprOnly -FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Syntax.SynExpr bodyExpr -FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Syntax.SynExpr enumExpr -FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Syntax.SynExpr get_bodyExpr() -FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Syntax.SynExpr get_enumExpr() -FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Syntax.SynPat get_pat() -FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Syntax.SynPat pat -FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+FromParseError: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+FromParseError: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+FromParseError: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+FromParseError: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+Ident: FSharp.Compiler.Syntax.Ident get_ident() -FSharp.Compiler.Syntax.SynExpr+Ident: FSharp.Compiler.Syntax.Ident ident -FSharp.Compiler.Syntax.SynExpr+IfThenElse: Boolean get_isFromErrorRecovery() -FSharp.Compiler.Syntax.SynExpr+IfThenElse: Boolean isFromErrorRecovery -FSharp.Compiler.Syntax.SynExpr+IfThenElse: FSharp.Compiler.Syntax.DebugPointAtBinding get_spIfToThen() -FSharp.Compiler.Syntax.SynExpr+IfThenElse: FSharp.Compiler.Syntax.DebugPointAtBinding spIfToThen -FSharp.Compiler.Syntax.SynExpr+IfThenElse: FSharp.Compiler.Syntax.SynExpr get_ifExpr() -FSharp.Compiler.Syntax.SynExpr+IfThenElse: FSharp.Compiler.Syntax.SynExpr get_thenExpr() -FSharp.Compiler.Syntax.SynExpr+IfThenElse: FSharp.Compiler.Syntax.SynExpr ifExpr -FSharp.Compiler.Syntax.SynExpr+IfThenElse: FSharp.Compiler.Syntax.SynExpr thenExpr -FSharp.Compiler.Syntax.SynExpr+IfThenElse: FSharp.Compiler.Text.Range get_ifToThenRange() -FSharp.Compiler.Syntax.SynExpr+IfThenElse: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+IfThenElse: FSharp.Compiler.Text.Range ifToThenRange -FSharp.Compiler.Syntax.SynExpr+IfThenElse: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+IfThenElse: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr] elseExpr -FSharp.Compiler.Syntax.SynExpr+IfThenElse: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr] get_elseExpr() -FSharp.Compiler.Syntax.SynExpr+ImplicitZero: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+ImplicitZero: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+InferredDowncast: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+InferredDowncast: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+InferredDowncast: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+InferredDowncast: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+InferredUpcast: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+InferredUpcast: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+InferredUpcast: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+InferredUpcast: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+InterpolatedString: FSharp.Compiler.Syntax.SynStringKind get_synStringKind() -FSharp.Compiler.Syntax.SynExpr+InterpolatedString: FSharp.Compiler.Syntax.SynStringKind synStringKind -FSharp.Compiler.Syntax.SynExpr+InterpolatedString: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+InterpolatedString: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+InterpolatedString: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynInterpolatedStringPart] contents -FSharp.Compiler.Syntax.SynExpr+InterpolatedString: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynInterpolatedStringPart] get_contents() -FSharp.Compiler.Syntax.SynExpr+JoinIn: FSharp.Compiler.Syntax.SynExpr get_lhsExpr() -FSharp.Compiler.Syntax.SynExpr+JoinIn: FSharp.Compiler.Syntax.SynExpr get_rhsExpr() -FSharp.Compiler.Syntax.SynExpr+JoinIn: FSharp.Compiler.Syntax.SynExpr lhsExpr -FSharp.Compiler.Syntax.SynExpr+JoinIn: FSharp.Compiler.Syntax.SynExpr rhsExpr -FSharp.Compiler.Syntax.SynExpr+JoinIn: FSharp.Compiler.Text.Range get_lhsRange() -FSharp.Compiler.Syntax.SynExpr+JoinIn: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+JoinIn: FSharp.Compiler.Text.Range lhsRange -FSharp.Compiler.Syntax.SynExpr+JoinIn: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+Lambda: Boolean fromMethod -FSharp.Compiler.Syntax.SynExpr+Lambda: Boolean get_fromMethod() -FSharp.Compiler.Syntax.SynExpr+Lambda: Boolean get_inLambdaSeq() -FSharp.Compiler.Syntax.SynExpr+Lambda: Boolean inLambdaSeq -FSharp.Compiler.Syntax.SynExpr+Lambda: FSharp.Compiler.Syntax.SynExpr body -FSharp.Compiler.Syntax.SynExpr+Lambda: FSharp.Compiler.Syntax.SynExpr get_body() -FSharp.Compiler.Syntax.SynExpr+Lambda: FSharp.Compiler.Syntax.SynSimplePats args -FSharp.Compiler.Syntax.SynExpr+Lambda: FSharp.Compiler.Syntax.SynSimplePats get_args() -FSharp.Compiler.Syntax.SynExpr+Lambda: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+Lambda: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+Lambda: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat],FSharp.Compiler.Syntax.SynExpr]] get_parsedData() -FSharp.Compiler.Syntax.SynExpr+Lambda: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat],FSharp.Compiler.Syntax.SynExpr]] parsedData -FSharp.Compiler.Syntax.SynExpr+Lazy: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+Lazy: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+Lazy: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+Lazy: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+LetOrUse: Boolean get_isRecursive() -FSharp.Compiler.Syntax.SynExpr+LetOrUse: Boolean get_isUse() -FSharp.Compiler.Syntax.SynExpr+LetOrUse: Boolean isRecursive -FSharp.Compiler.Syntax.SynExpr+LetOrUse: Boolean isUse -FSharp.Compiler.Syntax.SynExpr+LetOrUse: FSharp.Compiler.Syntax.SynExpr body -FSharp.Compiler.Syntax.SynExpr+LetOrUse: FSharp.Compiler.Syntax.SynExpr get_body() -FSharp.Compiler.Syntax.SynExpr+LetOrUse: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+LetOrUse: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+LetOrUse: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] bindings -FSharp.Compiler.Syntax.SynExpr+LetOrUse: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] get_bindings() -FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: Boolean get_isFromSource() -FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: Boolean get_isUse() -FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: Boolean isFromSource -FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: Boolean isUse -FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Syntax.DebugPointAtBinding bindSeqPoint -FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Syntax.DebugPointAtBinding get_bindSeqPoint() -FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Syntax.SynExpr body -FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Syntax.SynExpr get_body() -FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Syntax.SynExpr get_rhs() -FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Syntax.SynExpr rhs -FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Syntax.SynPat get_pat() -FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Syntax.SynPat pat -FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`6[FSharp.Compiler.Syntax.DebugPointAtBinding,System.Boolean,System.Boolean,FSharp.Compiler.Syntax.SynPat,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Text.Range]] andBangs -FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`6[FSharp.Compiler.Syntax.DebugPointAtBinding,System.Boolean,System.Boolean,FSharp.Compiler.Syntax.SynPat,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Text.Range]] get_andBangs() -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr] args -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr] get_args() -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] get_retTy() -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] get_typeArgs() -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] retTy -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] typeArgs -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: System.Object get_ilCode() -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: System.Object ilCode -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyStaticOptimization: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyStaticOptimization: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyStaticOptimization: FSharp.Compiler.Syntax.SynExpr get_optimizedExpr() -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyStaticOptimization: FSharp.Compiler.Syntax.SynExpr optimizedExpr -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyStaticOptimization: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyStaticOptimization: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyStaticOptimization: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynStaticOptimizationConstraint] constraints -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyStaticOptimization: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynStaticOptimizationConstraint] get_constraints() -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldGet: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldGet: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldGet: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldGet: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldGet: Int32 fieldNum -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldGet: Int32 get_fieldNum() -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldGet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldGet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet: FSharp.Compiler.Syntax.SynExpr get_rhsExpr() -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet: FSharp.Compiler.Syntax.SynExpr rhsExpr -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet: Int32 fieldNum -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet: Int32 get_fieldNum() -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() -FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId -FSharp.Compiler.Syntax.SynExpr+LongIdent: Boolean get_isOptional() -FSharp.Compiler.Syntax.SynExpr+LongIdent: Boolean isOptional -FSharp.Compiler.Syntax.SynExpr+LongIdent: FSharp.Compiler.Syntax.LongIdentWithDots get_longDotId() -FSharp.Compiler.Syntax.SynExpr+LongIdent: FSharp.Compiler.Syntax.LongIdentWithDots longDotId -FSharp.Compiler.Syntax.SynExpr+LongIdent: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+LongIdent: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo]] altNameRefCell -FSharp.Compiler.Syntax.SynExpr+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo]] get_altNameRefCell() -FSharp.Compiler.Syntax.SynExpr+LongIdentSet: FSharp.Compiler.Syntax.LongIdentWithDots get_longDotId() -FSharp.Compiler.Syntax.SynExpr+LongIdentSet: FSharp.Compiler.Syntax.LongIdentWithDots longDotId -FSharp.Compiler.Syntax.SynExpr+LongIdentSet: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+LongIdentSet: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+LongIdentSet: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+LongIdentSet: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+Match: FSharp.Compiler.Syntax.DebugPointAtBinding get_matchSeqPoint() -FSharp.Compiler.Syntax.SynExpr+Match: FSharp.Compiler.Syntax.DebugPointAtBinding matchSeqPoint -FSharp.Compiler.Syntax.SynExpr+Match: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+Match: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+Match: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+Match: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+Match: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause] clauses -FSharp.Compiler.Syntax.SynExpr+Match: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause] get_clauses() -FSharp.Compiler.Syntax.SynExpr+MatchBang: FSharp.Compiler.Syntax.DebugPointAtBinding get_matchSeqPoint() -FSharp.Compiler.Syntax.SynExpr+MatchBang: FSharp.Compiler.Syntax.DebugPointAtBinding matchSeqPoint -FSharp.Compiler.Syntax.SynExpr+MatchBang: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+MatchBang: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+MatchBang: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+MatchBang: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+MatchBang: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause] clauses -FSharp.Compiler.Syntax.SynExpr+MatchBang: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause] get_clauses() -FSharp.Compiler.Syntax.SynExpr+MatchLambda: Boolean get_isExnMatch() -FSharp.Compiler.Syntax.SynExpr+MatchLambda: Boolean isExnMatch -FSharp.Compiler.Syntax.SynExpr+MatchLambda: FSharp.Compiler.Syntax.DebugPointAtBinding get_matchSeqPoint() -FSharp.Compiler.Syntax.SynExpr+MatchLambda: FSharp.Compiler.Syntax.DebugPointAtBinding matchSeqPoint -FSharp.Compiler.Syntax.SynExpr+MatchLambda: FSharp.Compiler.Text.Range get_keywordRange() -FSharp.Compiler.Syntax.SynExpr+MatchLambda: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+MatchLambda: FSharp.Compiler.Text.Range keywordRange -FSharp.Compiler.Syntax.SynExpr+MatchLambda: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+MatchLambda: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause] get_matchClauses() -FSharp.Compiler.Syntax.SynExpr+MatchLambda: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause] matchClauses -FSharp.Compiler.Syntax.SynExpr+NamedIndexedPropertySet: FSharp.Compiler.Syntax.LongIdentWithDots get_longDotId() -FSharp.Compiler.Syntax.SynExpr+NamedIndexedPropertySet: FSharp.Compiler.Syntax.LongIdentWithDots longDotId -FSharp.Compiler.Syntax.SynExpr+NamedIndexedPropertySet: FSharp.Compiler.Syntax.SynExpr expr1 -FSharp.Compiler.Syntax.SynExpr+NamedIndexedPropertySet: FSharp.Compiler.Syntax.SynExpr expr2 -FSharp.Compiler.Syntax.SynExpr+NamedIndexedPropertySet: FSharp.Compiler.Syntax.SynExpr get_expr1() -FSharp.Compiler.Syntax.SynExpr+NamedIndexedPropertySet: FSharp.Compiler.Syntax.SynExpr get_expr2() -FSharp.Compiler.Syntax.SynExpr+NamedIndexedPropertySet: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+NamedIndexedPropertySet: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+New: Boolean get_isProtected() -FSharp.Compiler.Syntax.SynExpr+New: Boolean isProtected -FSharp.Compiler.Syntax.SynExpr+New: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+New: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+New: FSharp.Compiler.Syntax.SynType get_targetType() -FSharp.Compiler.Syntax.SynExpr+New: FSharp.Compiler.Syntax.SynType targetType -FSharp.Compiler.Syntax.SynExpr+New: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+New: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+Null: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+Null: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+ObjExpr: FSharp.Compiler.Syntax.SynType get_objType() -FSharp.Compiler.Syntax.SynExpr+ObjExpr: FSharp.Compiler.Syntax.SynType objType -FSharp.Compiler.Syntax.SynExpr+ObjExpr: FSharp.Compiler.Text.Range get_newExprRange() -FSharp.Compiler.Syntax.SynExpr+ObjExpr: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+ObjExpr: FSharp.Compiler.Text.Range newExprRange -FSharp.Compiler.Syntax.SynExpr+ObjExpr: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+ObjExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] bindings -FSharp.Compiler.Syntax.SynExpr+ObjExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] get_bindings() -FSharp.Compiler.Syntax.SynExpr+ObjExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynInterfaceImpl] extraImpls -FSharp.Compiler.Syntax.SynExpr+ObjExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynInterfaceImpl] get_extraImpls() -FSharp.Compiler.Syntax.SynExpr+ObjExpr: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident]]] argOptions -FSharp.Compiler.Syntax.SynExpr+ObjExpr: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident]]] get_argOptions() -FSharp.Compiler.Syntax.SynExpr+Paren: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+Paren: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+Paren: FSharp.Compiler.Text.Range get_leftParenRange() -FSharp.Compiler.Syntax.SynExpr+Paren: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+Paren: FSharp.Compiler.Text.Range leftParenRange -FSharp.Compiler.Syntax.SynExpr+Paren: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+Paren: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_rightParenRange() -FSharp.Compiler.Syntax.SynExpr+Paren: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] rightParenRange -FSharp.Compiler.Syntax.SynExpr+Quote: Boolean get_isFromQueryExpression() -FSharp.Compiler.Syntax.SynExpr+Quote: Boolean get_isRaw() -FSharp.Compiler.Syntax.SynExpr+Quote: Boolean isFromQueryExpression -FSharp.Compiler.Syntax.SynExpr+Quote: Boolean isRaw -FSharp.Compiler.Syntax.SynExpr+Quote: FSharp.Compiler.Syntax.SynExpr get_operator() -FSharp.Compiler.Syntax.SynExpr+Quote: FSharp.Compiler.Syntax.SynExpr get_quotedExpr() -FSharp.Compiler.Syntax.SynExpr+Quote: FSharp.Compiler.Syntax.SynExpr operator -FSharp.Compiler.Syntax.SynExpr+Quote: FSharp.Compiler.Syntax.SynExpr quotedExpr -FSharp.Compiler.Syntax.SynExpr+Quote: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+Quote: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+Record: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+Record: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Tuple`2[FSharp.Compiler.Syntax.LongIdentWithDots,System.Boolean],Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr],Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]]] get_recordFields() -FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Tuple`2[FSharp.Compiler.Syntax.LongIdentWithDots,System.Boolean],Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr],Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]]] recordFields -FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]] copyInfo -FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]] get_copyInfo() -FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]],FSharp.Compiler.Text.Range]] baseInfo -FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]],FSharp.Compiler.Text.Range]] get_baseInfo() -FSharp.Compiler.Syntax.SynExpr+Sequential: Boolean get_isTrueSeq() -FSharp.Compiler.Syntax.SynExpr+Sequential: Boolean isTrueSeq -FSharp.Compiler.Syntax.SynExpr+Sequential: FSharp.Compiler.Syntax.DebugPointAtSequential get_seqPoint() -FSharp.Compiler.Syntax.SynExpr+Sequential: FSharp.Compiler.Syntax.DebugPointAtSequential seqPoint -FSharp.Compiler.Syntax.SynExpr+Sequential: FSharp.Compiler.Syntax.SynExpr expr1 -FSharp.Compiler.Syntax.SynExpr+Sequential: FSharp.Compiler.Syntax.SynExpr expr2 -FSharp.Compiler.Syntax.SynExpr+Sequential: FSharp.Compiler.Syntax.SynExpr get_expr1() -FSharp.Compiler.Syntax.SynExpr+Sequential: FSharp.Compiler.Syntax.SynExpr get_expr2() -FSharp.Compiler.Syntax.SynExpr+Sequential: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+Sequential: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield: FSharp.Compiler.Syntax.DebugPointAtSequential get_seqPoint() -FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield: FSharp.Compiler.Syntax.DebugPointAtSequential seqPoint -FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield: FSharp.Compiler.Syntax.SynExpr expr1 -FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield: FSharp.Compiler.Syntax.SynExpr expr2 -FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield: FSharp.Compiler.Syntax.SynExpr get_expr1() -FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield: FSharp.Compiler.Syntax.SynExpr get_expr2() -FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield: FSharp.Compiler.Syntax.SynExpr get_ifNotStmt() -FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield: FSharp.Compiler.Syntax.SynExpr ifNotStmt -FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+Set: FSharp.Compiler.Syntax.SynExpr get_rhsExpr() -FSharp.Compiler.Syntax.SynExpr+Set: FSharp.Compiler.Syntax.SynExpr get_targetExpr() -FSharp.Compiler.Syntax.SynExpr+Set: FSharp.Compiler.Syntax.SynExpr rhsExpr -FSharp.Compiler.Syntax.SynExpr+Set: FSharp.Compiler.Syntax.SynExpr targetExpr -FSharp.Compiler.Syntax.SynExpr+Set: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+Set: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 AddressOf -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 AnonRecd -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 App -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 ArbitraryAfterError -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 ArrayOrList -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 ArrayOrListOfSeqExpr -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Assert -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 CompExpr -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Const -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 DiscardAfterMissingQualificationAfterDot -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Do -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 DoBang -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 DotGet -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 DotIndexedGet -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 DotIndexedSet -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 DotNamedIndexedPropertySet -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 DotSet -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Downcast -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Fixed -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 For -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 ForEach -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 FromParseError -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Ident -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 IfThenElse -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 ImplicitZero -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 InferredDowncast -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 InferredUpcast -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 InterpolatedString -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 JoinIn -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Lambda -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Lazy -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 LetOrUse -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 LetOrUseBang -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 LibraryOnlyILAssembly -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 LibraryOnlyStaticOptimization -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 LibraryOnlyUnionCaseFieldGet -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 LibraryOnlyUnionCaseFieldSet -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 LongIdent -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 LongIdentSet -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Match -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 MatchBang -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 MatchLambda -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 NamedIndexedPropertySet -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 New -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Null -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 ObjExpr -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Paren -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Quote -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Record -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Sequential -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 SequentialOrImplicitYield -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Set -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 TraitCall -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 TryFinally -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 TryWith -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Tuple -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 TypeApp -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 TypeTest -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Typed -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Upcast -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 While -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 YieldOrReturn -FSharp.Compiler.Syntax.SynExpr+Tags: Int32 YieldOrReturnFrom -FSharp.Compiler.Syntax.SynExpr+TraitCall: FSharp.Compiler.Syntax.SynExpr argExpr -FSharp.Compiler.Syntax.SynExpr+TraitCall: FSharp.Compiler.Syntax.SynExpr get_argExpr() -FSharp.Compiler.Syntax.SynExpr+TraitCall: FSharp.Compiler.Syntax.SynMemberSig get_traitSig() -FSharp.Compiler.Syntax.SynExpr+TraitCall: FSharp.Compiler.Syntax.SynMemberSig traitSig -FSharp.Compiler.Syntax.SynExpr+TraitCall: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+TraitCall: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+TraitCall: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypar] get_supportTys() -FSharp.Compiler.Syntax.SynExpr+TraitCall: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypar] supportTys -FSharp.Compiler.Syntax.SynExpr+TryFinally: FSharp.Compiler.Syntax.DebugPointAtFinally finallySeqPoint -FSharp.Compiler.Syntax.SynExpr+TryFinally: FSharp.Compiler.Syntax.DebugPointAtFinally get_finallySeqPoint() -FSharp.Compiler.Syntax.SynExpr+TryFinally: FSharp.Compiler.Syntax.DebugPointAtTry get_trySeqPoint() -FSharp.Compiler.Syntax.SynExpr+TryFinally: FSharp.Compiler.Syntax.DebugPointAtTry trySeqPoint -FSharp.Compiler.Syntax.SynExpr+TryFinally: FSharp.Compiler.Syntax.SynExpr finallyExpr -FSharp.Compiler.Syntax.SynExpr+TryFinally: FSharp.Compiler.Syntax.SynExpr get_finallyExpr() -FSharp.Compiler.Syntax.SynExpr+TryFinally: FSharp.Compiler.Syntax.SynExpr get_tryExpr() -FSharp.Compiler.Syntax.SynExpr+TryFinally: FSharp.Compiler.Syntax.SynExpr tryExpr -FSharp.Compiler.Syntax.SynExpr+TryFinally: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+TryFinally: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Syntax.DebugPointAtTry get_trySeqPoint() -FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Syntax.DebugPointAtTry trySeqPoint -FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Syntax.DebugPointAtWith get_withSeqPoint() -FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Syntax.DebugPointAtWith withSeqPoint -FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Syntax.SynExpr get_tryExpr() -FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Syntax.SynExpr tryExpr -FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Text.Range get_tryRange() -FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Text.Range get_withRange() -FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Text.Range tryRange -FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Text.Range withRange -FSharp.Compiler.Syntax.SynExpr+TryWith: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause] get_withCases() -FSharp.Compiler.Syntax.SynExpr+TryWith: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause] withCases -FSharp.Compiler.Syntax.SynExpr+Tuple: Boolean get_isStruct() -FSharp.Compiler.Syntax.SynExpr+Tuple: Boolean isStruct -FSharp.Compiler.Syntax.SynExpr+Tuple: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+Tuple: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr] exprs -FSharp.Compiler.Syntax.SynExpr+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr] get_exprs() -FSharp.Compiler.Syntax.SynExpr+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range] commaRanges -FSharp.Compiler.Syntax.SynExpr+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range] get_commaRanges() -FSharp.Compiler.Syntax.SynExpr+TypeApp: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+TypeApp: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+TypeApp: FSharp.Compiler.Text.Range get_lessRange() -FSharp.Compiler.Syntax.SynExpr+TypeApp: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+TypeApp: FSharp.Compiler.Text.Range get_typeArgsRange() -FSharp.Compiler.Syntax.SynExpr+TypeApp: FSharp.Compiler.Text.Range lessRange -FSharp.Compiler.Syntax.SynExpr+TypeApp: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+TypeApp: FSharp.Compiler.Text.Range typeArgsRange -FSharp.Compiler.Syntax.SynExpr+TypeApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] get_typeArgs() -FSharp.Compiler.Syntax.SynExpr+TypeApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] typeArgs -FSharp.Compiler.Syntax.SynExpr+TypeApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range] commaRanges -FSharp.Compiler.Syntax.SynExpr+TypeApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range] get_commaRanges() -FSharp.Compiler.Syntax.SynExpr+TypeApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_greaterRange() -FSharp.Compiler.Syntax.SynExpr+TypeApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] greaterRange -FSharp.Compiler.Syntax.SynExpr+TypeTest: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+TypeTest: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+TypeTest: FSharp.Compiler.Syntax.SynType get_targetType() -FSharp.Compiler.Syntax.SynExpr+TypeTest: FSharp.Compiler.Syntax.SynType targetType -FSharp.Compiler.Syntax.SynExpr+TypeTest: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+TypeTest: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+Typed: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+Typed: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+Typed: FSharp.Compiler.Syntax.SynType get_targetType() -FSharp.Compiler.Syntax.SynExpr+Typed: FSharp.Compiler.Syntax.SynType targetType -FSharp.Compiler.Syntax.SynExpr+Typed: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+Typed: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+Upcast: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+Upcast: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+Upcast: FSharp.Compiler.Syntax.SynType get_targetType() -FSharp.Compiler.Syntax.SynExpr+Upcast: FSharp.Compiler.Syntax.SynType targetType -FSharp.Compiler.Syntax.SynExpr+Upcast: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+Upcast: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+While: FSharp.Compiler.Syntax.DebugPointAtWhile get_whileSeqPoint() -FSharp.Compiler.Syntax.SynExpr+While: FSharp.Compiler.Syntax.DebugPointAtWhile whileSeqPoint -FSharp.Compiler.Syntax.SynExpr+While: FSharp.Compiler.Syntax.SynExpr doExpr -FSharp.Compiler.Syntax.SynExpr+While: FSharp.Compiler.Syntax.SynExpr get_doExpr() -FSharp.Compiler.Syntax.SynExpr+While: FSharp.Compiler.Syntax.SynExpr get_whileExpr() -FSharp.Compiler.Syntax.SynExpr+While: FSharp.Compiler.Syntax.SynExpr whileExpr -FSharp.Compiler.Syntax.SynExpr+While: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+While: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+YieldOrReturn: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+YieldOrReturn: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+YieldOrReturn: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+YieldOrReturn: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+YieldOrReturn: System.Tuple`2[System.Boolean,System.Boolean] flags -FSharp.Compiler.Syntax.SynExpr+YieldOrReturn: System.Tuple`2[System.Boolean,System.Boolean] get_flags() -FSharp.Compiler.Syntax.SynExpr+YieldOrReturnFrom: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynExpr+YieldOrReturnFrom: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynExpr+YieldOrReturnFrom: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynExpr+YieldOrReturnFrom: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+YieldOrReturnFrom: System.Tuple`2[System.Boolean,System.Boolean] flags -FSharp.Compiler.Syntax.SynExpr+YieldOrReturnFrom: System.Tuple`2[System.Boolean,System.Boolean] get_flags() -FSharp.Compiler.Syntax.SynExpr: Boolean IsAddressOf -FSharp.Compiler.Syntax.SynExpr: Boolean IsAnonRecd -FSharp.Compiler.Syntax.SynExpr: Boolean IsApp -FSharp.Compiler.Syntax.SynExpr: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.Syntax.SynExpr: Boolean IsArbitraryAfterError -FSharp.Compiler.Syntax.SynExpr: Boolean IsArrayOrList -FSharp.Compiler.Syntax.SynExpr: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.Syntax.SynExpr: Boolean IsAssert -FSharp.Compiler.Syntax.SynExpr: Boolean IsCompExpr -FSharp.Compiler.Syntax.SynExpr: Boolean IsConst -FSharp.Compiler.Syntax.SynExpr: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.Syntax.SynExpr: Boolean IsDo -FSharp.Compiler.Syntax.SynExpr: Boolean IsDoBang -FSharp.Compiler.Syntax.SynExpr: Boolean IsDotGet -FSharp.Compiler.Syntax.SynExpr: Boolean IsDotIndexedGet -FSharp.Compiler.Syntax.SynExpr: Boolean IsDotIndexedSet -FSharp.Compiler.Syntax.SynExpr: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.Syntax.SynExpr: Boolean IsDotSet -FSharp.Compiler.Syntax.SynExpr: Boolean IsDowncast -FSharp.Compiler.Syntax.SynExpr: Boolean IsFixed -FSharp.Compiler.Syntax.SynExpr: Boolean IsFor -FSharp.Compiler.Syntax.SynExpr: Boolean IsForEach -FSharp.Compiler.Syntax.SynExpr: Boolean IsFromParseError -FSharp.Compiler.Syntax.SynExpr: Boolean IsIdent -FSharp.Compiler.Syntax.SynExpr: Boolean IsIfThenElse -FSharp.Compiler.Syntax.SynExpr: Boolean IsImplicitZero -FSharp.Compiler.Syntax.SynExpr: Boolean IsInferredDowncast -FSharp.Compiler.Syntax.SynExpr: Boolean IsInferredUpcast -FSharp.Compiler.Syntax.SynExpr: Boolean IsInterpolatedString -FSharp.Compiler.Syntax.SynExpr: Boolean IsJoinIn -FSharp.Compiler.Syntax.SynExpr: Boolean IsLambda -FSharp.Compiler.Syntax.SynExpr: Boolean IsLazy -FSharp.Compiler.Syntax.SynExpr: Boolean IsLetOrUse -FSharp.Compiler.Syntax.SynExpr: Boolean IsLetOrUseBang -FSharp.Compiler.Syntax.SynExpr: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.Syntax.SynExpr: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.Syntax.SynExpr: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.Syntax.SynExpr: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.Syntax.SynExpr: Boolean IsLongIdent -FSharp.Compiler.Syntax.SynExpr: Boolean IsLongIdentSet -FSharp.Compiler.Syntax.SynExpr: Boolean IsMatch -FSharp.Compiler.Syntax.SynExpr: Boolean IsMatchBang -FSharp.Compiler.Syntax.SynExpr: Boolean IsMatchLambda -FSharp.Compiler.Syntax.SynExpr: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.Syntax.SynExpr: Boolean IsNew -FSharp.Compiler.Syntax.SynExpr: Boolean IsNull -FSharp.Compiler.Syntax.SynExpr: Boolean IsObjExpr -FSharp.Compiler.Syntax.SynExpr: Boolean IsParen -FSharp.Compiler.Syntax.SynExpr: Boolean IsQuote -FSharp.Compiler.Syntax.SynExpr: Boolean IsRecord -FSharp.Compiler.Syntax.SynExpr: Boolean IsSequential -FSharp.Compiler.Syntax.SynExpr: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.Syntax.SynExpr: Boolean IsSet -FSharp.Compiler.Syntax.SynExpr: Boolean IsTraitCall -FSharp.Compiler.Syntax.SynExpr: Boolean IsTryFinally -FSharp.Compiler.Syntax.SynExpr: Boolean IsTryWith -FSharp.Compiler.Syntax.SynExpr: Boolean IsTuple -FSharp.Compiler.Syntax.SynExpr: Boolean IsTypeApp -FSharp.Compiler.Syntax.SynExpr: Boolean IsTypeTest -FSharp.Compiler.Syntax.SynExpr: Boolean IsTyped -FSharp.Compiler.Syntax.SynExpr: Boolean IsUpcast -FSharp.Compiler.Syntax.SynExpr: Boolean IsWhile -FSharp.Compiler.Syntax.SynExpr: Boolean IsYieldOrReturn -FSharp.Compiler.Syntax.SynExpr: Boolean IsYieldOrReturnFrom -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsAddressOf() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsAnonRecd() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsApp() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsArrayOrList() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsAssert() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsCompExpr() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsConst() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsDo() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsDoBang() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsDotGet() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsDotIndexedGet() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsDotIndexedSet() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsDotSet() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsDowncast() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsFixed() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsFor() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsForEach() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsFromParseError() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsIdent() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsIfThenElse() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsImplicitZero() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsInferredDowncast() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsInferredUpcast() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsInterpolatedString() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsJoinIn() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsLambda() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsLazy() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsLetOrUse() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsLetOrUseBang() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsLongIdent() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsLongIdentSet() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsMatch() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsMatchBang() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsMatchLambda() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsNew() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsNull() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsObjExpr() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsParen() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsQuote() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsRecord() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsSequential() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsSet() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsTraitCall() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsTryFinally() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsTryWith() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsTuple() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsTypeApp() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsTypeTest() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsTyped() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsUpcast() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsWhile() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsYieldOrReturn() -FSharp.Compiler.Syntax.SynExpr: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewAddressOf(Boolean, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewAnonRecd(Boolean, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynExpr]], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewApp(FSharp.Compiler.Syntax.ExprAtomicFlag, Boolean, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewArbitraryAfterError(System.String, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewArrayOrList(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewArrayOrListOfSeqExpr(Boolean, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewAssert(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewCompExpr(Boolean, Microsoft.FSharp.Core.FSharpRef`1[System.Boolean], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewConst(FSharp.Compiler.Syntax.SynConst, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDiscardAfterMissingQualificationAfterDot(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDo(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDoBang(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDotGet(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.LongIdentWithDots, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDotIndexedGet(FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynIndexerArg], FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDotIndexedSet(FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynIndexerArg], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDotNamedIndexedPropertySet(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.LongIdentWithDots, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDotSet(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.LongIdentWithDots, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDowncast(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewFixed(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewFor(FSharp.Compiler.Syntax.DebugPointAtFor, FSharp.Compiler.Syntax.Ident, FSharp.Compiler.Syntax.SynExpr, Boolean, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewForEach(FSharp.Compiler.Syntax.DebugPointAtFor, FSharp.Compiler.Syntax.SeqExprOnly, Boolean, FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewFromParseError(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewIdent(FSharp.Compiler.Syntax.Ident) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewIfThenElse(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr], FSharp.Compiler.Syntax.DebugPointAtBinding, Boolean, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewImplicitZero(FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewInferredDowncast(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewInferredUpcast(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewInterpolatedString(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynInterpolatedStringPart], FSharp.Compiler.Syntax.SynStringKind, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewJoinIn(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLambda(Boolean, Boolean, FSharp.Compiler.Syntax.SynSimplePats, FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat],FSharp.Compiler.Syntax.SynExpr]], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLazy(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLetOrUse(Boolean, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLetOrUseBang(FSharp.Compiler.Syntax.DebugPointAtBinding, Boolean, Boolean, FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`6[FSharp.Compiler.Syntax.DebugPointAtBinding,System.Boolean,System.Boolean,FSharp.Compiler.Syntax.SynPat,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Text.Range]], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLibraryOnlyILAssembly(System.Object, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLibraryOnlyStaticOptimization(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynStaticOptimizationConstraint], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLibraryOnlyUnionCaseFieldGet(FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], Int32, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLibraryOnlyUnionCaseFieldSet(FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], Int32, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLongIdent(Boolean, FSharp.Compiler.Syntax.LongIdentWithDots, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo]], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLongIdentSet(FSharp.Compiler.Syntax.LongIdentWithDots, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewMatch(FSharp.Compiler.Syntax.DebugPointAtBinding, FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewMatchBang(FSharp.Compiler.Syntax.DebugPointAtBinding, FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewMatchLambda(Boolean, FSharp.Compiler.Text.Range, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause], FSharp.Compiler.Syntax.DebugPointAtBinding, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewNamedIndexedPropertySet(FSharp.Compiler.Syntax.LongIdentWithDots, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewNew(Boolean, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewNull(FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewObjExpr(FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident]]], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynInterfaceImpl], FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewParen(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewQuote(FSharp.Compiler.Syntax.SynExpr, Boolean, FSharp.Compiler.Syntax.SynExpr, Boolean, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewRecord(Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]],FSharp.Compiler.Text.Range]], Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Tuple`2[FSharp.Compiler.Syntax.LongIdentWithDots,System.Boolean],Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr],Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]]], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewSequential(FSharp.Compiler.Syntax.DebugPointAtSequential, Boolean, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewSequentialOrImplicitYield(FSharp.Compiler.Syntax.DebugPointAtSequential, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewSet(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewTraitCall(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypar], FSharp.Compiler.Syntax.SynMemberSig, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewTryFinally(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.DebugPointAtTry, FSharp.Compiler.Syntax.DebugPointAtFinally) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewTryWith(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause], FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.DebugPointAtTry, FSharp.Compiler.Syntax.DebugPointAtWith) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewTuple(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewTypeApp(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewTypeTest(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewTyped(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewUpcast(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewWhile(FSharp.Compiler.Syntax.DebugPointAtWhile, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewYieldOrReturn(System.Tuple`2[System.Boolean,System.Boolean], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewYieldOrReturnFrom(System.Tuple`2[System.Boolean,System.Boolean], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+AddressOf -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+AnonRecd -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+App -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+ArbitraryAfterError -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+ArrayOrList -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+ArrayOrListOfSeqExpr -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Assert -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+CompExpr -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Const -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Do -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+DoBang -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+DotGet -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+DotIndexedGet -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+DotIndexedSet -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+DotSet -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Downcast -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Fixed -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+For -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+ForEach -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+FromParseError -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Ident -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+IfThenElse -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+ImplicitZero -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+InferredDowncast -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+InferredUpcast -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+InterpolatedString -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+JoinIn -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Lambda -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Lazy -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+LetOrUse -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+LetOrUseBang -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+LibraryOnlyStaticOptimization -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldGet -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+LongIdent -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+LongIdentSet -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Match -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+MatchBang -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+MatchLambda -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+NamedIndexedPropertySet -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+New -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Null -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+ObjExpr -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Paren -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Quote -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Record -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Sequential -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Set -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Tags -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+TraitCall -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+TryFinally -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+TryWith -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Tuple -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+TypeApp -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+TypeTest -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Typed -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Upcast -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+While -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+YieldOrReturn -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+YieldOrReturnFrom -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Text.Range RangeOfFirstPortion -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Text.Range RangeWithoutAnyExtraDot -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Text.Range get_RangeOfFirstPortion() -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Text.Range get_RangeWithoutAnyExtraDot() -FSharp.Compiler.Syntax.SynExpr: Int32 Tag -FSharp.Compiler.Syntax.SynExpr: Int32 get_Tag() -FSharp.Compiler.Syntax.SynExpr: System.String ToString() -FSharp.Compiler.Syntax.SynField -FSharp.Compiler.Syntax.SynField: Boolean get_isMutable() -FSharp.Compiler.Syntax.SynField: Boolean get_isStatic() -FSharp.Compiler.Syntax.SynField: Boolean isMutable -FSharp.Compiler.Syntax.SynField: Boolean isStatic -FSharp.Compiler.Syntax.SynField: FSharp.Compiler.Syntax.SynField NewSynField(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Syntax.SynType, Boolean, FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynField: FSharp.Compiler.Syntax.SynType fieldType -FSharp.Compiler.Syntax.SynField: FSharp.Compiler.Syntax.SynType get_fieldType() -FSharp.Compiler.Syntax.SynField: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynField: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynField: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() -FSharp.Compiler.Syntax.SynField: FSharp.Compiler.Xml.PreXmlDoc xmlDoc -FSharp.Compiler.Syntax.SynField: Int32 Tag -FSharp.Compiler.Syntax.SynField: Int32 get_Tag() -FSharp.Compiler.Syntax.SynField: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes -FSharp.Compiler.Syntax.SynField: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() -FSharp.Compiler.Syntax.SynField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_idOpt() -FSharp.Compiler.Syntax.SynField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] idOpt -FSharp.Compiler.Syntax.SynField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility -FSharp.Compiler.Syntax.SynField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() -FSharp.Compiler.Syntax.SynField: System.String ToString() -FSharp.Compiler.Syntax.SynIndexerArg -FSharp.Compiler.Syntax.SynIndexerArg+One: Boolean fromEnd -FSharp.Compiler.Syntax.SynIndexerArg+One: Boolean get_fromEnd() -FSharp.Compiler.Syntax.SynIndexerArg+One: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynIndexerArg+One: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynIndexerArg+One: FSharp.Compiler.Text.Range Item3 -FSharp.Compiler.Syntax.SynIndexerArg+One: FSharp.Compiler.Text.Range get_Item3() -FSharp.Compiler.Syntax.SynIndexerArg+Tags: Int32 One -FSharp.Compiler.Syntax.SynIndexerArg+Tags: Int32 Two -FSharp.Compiler.Syntax.SynIndexerArg+Two: Boolean fromEnd1 -FSharp.Compiler.Syntax.SynIndexerArg+Two: Boolean fromEnd2 -FSharp.Compiler.Syntax.SynIndexerArg+Two: Boolean get_fromEnd1() -FSharp.Compiler.Syntax.SynIndexerArg+Two: Boolean get_fromEnd2() -FSharp.Compiler.Syntax.SynIndexerArg+Two: FSharp.Compiler.Syntax.SynExpr expr1 -FSharp.Compiler.Syntax.SynIndexerArg+Two: FSharp.Compiler.Syntax.SynExpr expr2 -FSharp.Compiler.Syntax.SynIndexerArg+Two: FSharp.Compiler.Syntax.SynExpr get_expr1() -FSharp.Compiler.Syntax.SynIndexerArg+Two: FSharp.Compiler.Syntax.SynExpr get_expr2() -FSharp.Compiler.Syntax.SynIndexerArg+Two: FSharp.Compiler.Text.Range get_range1() -FSharp.Compiler.Syntax.SynIndexerArg+Two: FSharp.Compiler.Text.Range get_range2() -FSharp.Compiler.Syntax.SynIndexerArg+Two: FSharp.Compiler.Text.Range range1 -FSharp.Compiler.Syntax.SynIndexerArg+Two: FSharp.Compiler.Text.Range range2 -FSharp.Compiler.Syntax.SynIndexerArg: Boolean IsOne -FSharp.Compiler.Syntax.SynIndexerArg: Boolean IsTwo -FSharp.Compiler.Syntax.SynIndexerArg: Boolean get_IsOne() -FSharp.Compiler.Syntax.SynIndexerArg: Boolean get_IsTwo() -FSharp.Compiler.Syntax.SynIndexerArg: FSharp.Compiler.Syntax.SynIndexerArg NewOne(FSharp.Compiler.Syntax.SynExpr, Boolean, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynIndexerArg: FSharp.Compiler.Syntax.SynIndexerArg NewTwo(FSharp.Compiler.Syntax.SynExpr, Boolean, FSharp.Compiler.Syntax.SynExpr, Boolean, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynIndexerArg: FSharp.Compiler.Syntax.SynIndexerArg+One -FSharp.Compiler.Syntax.SynIndexerArg: FSharp.Compiler.Syntax.SynIndexerArg+Tags -FSharp.Compiler.Syntax.SynIndexerArg: FSharp.Compiler.Syntax.SynIndexerArg+Two -FSharp.Compiler.Syntax.SynIndexerArg: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynIndexerArg: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynIndexerArg: Int32 Tag -FSharp.Compiler.Syntax.SynIndexerArg: Int32 get_Tag() -FSharp.Compiler.Syntax.SynIndexerArg: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr] Exprs -FSharp.Compiler.Syntax.SynIndexerArg: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr] get_Exprs() -FSharp.Compiler.Syntax.SynIndexerArg: System.String ToString() -FSharp.Compiler.Syntax.SynInterfaceImpl -FSharp.Compiler.Syntax.SynInterfaceImpl: FSharp.Compiler.Syntax.SynInterfaceImpl NewSynInterfaceImpl(FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynInterfaceImpl: FSharp.Compiler.Syntax.SynType get_interfaceTy() -FSharp.Compiler.Syntax.SynInterfaceImpl: FSharp.Compiler.Syntax.SynType interfaceTy -FSharp.Compiler.Syntax.SynInterfaceImpl: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynInterfaceImpl: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynInterfaceImpl: Int32 Tag -FSharp.Compiler.Syntax.SynInterfaceImpl: Int32 get_Tag() -FSharp.Compiler.Syntax.SynInterfaceImpl: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] bindings -FSharp.Compiler.Syntax.SynInterfaceImpl: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] get_bindings() -FSharp.Compiler.Syntax.SynInterfaceImpl: System.String ToString() -FSharp.Compiler.Syntax.SynInterpolatedStringPart -FSharp.Compiler.Syntax.SynInterpolatedStringPart+FillExpr: FSharp.Compiler.Syntax.SynExpr fillExpr -FSharp.Compiler.Syntax.SynInterpolatedStringPart+FillExpr: FSharp.Compiler.Syntax.SynExpr get_fillExpr() -FSharp.Compiler.Syntax.SynInterpolatedStringPart+FillExpr: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_qualifiers() -FSharp.Compiler.Syntax.SynInterpolatedStringPart+FillExpr: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] qualifiers -FSharp.Compiler.Syntax.SynInterpolatedStringPart+String: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynInterpolatedStringPart+String: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynInterpolatedStringPart+String: System.String get_value() -FSharp.Compiler.Syntax.SynInterpolatedStringPart+String: System.String value -FSharp.Compiler.Syntax.SynInterpolatedStringPart+Tags: Int32 FillExpr -FSharp.Compiler.Syntax.SynInterpolatedStringPart+Tags: Int32 String -FSharp.Compiler.Syntax.SynInterpolatedStringPart: Boolean IsFillExpr -FSharp.Compiler.Syntax.SynInterpolatedStringPart: Boolean IsString -FSharp.Compiler.Syntax.SynInterpolatedStringPart: Boolean get_IsFillExpr() -FSharp.Compiler.Syntax.SynInterpolatedStringPart: Boolean get_IsString() -FSharp.Compiler.Syntax.SynInterpolatedStringPart: FSharp.Compiler.Syntax.SynInterpolatedStringPart NewFillExpr(FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident]) -FSharp.Compiler.Syntax.SynInterpolatedStringPart: FSharp.Compiler.Syntax.SynInterpolatedStringPart NewString(System.String, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynInterpolatedStringPart: FSharp.Compiler.Syntax.SynInterpolatedStringPart+FillExpr -FSharp.Compiler.Syntax.SynInterpolatedStringPart: FSharp.Compiler.Syntax.SynInterpolatedStringPart+String -FSharp.Compiler.Syntax.SynInterpolatedStringPart: FSharp.Compiler.Syntax.SynInterpolatedStringPart+Tags -FSharp.Compiler.Syntax.SynInterpolatedStringPart: Int32 Tag -FSharp.Compiler.Syntax.SynInterpolatedStringPart: Int32 get_Tag() -FSharp.Compiler.Syntax.SynInterpolatedStringPart: System.String ToString() -FSharp.Compiler.Syntax.SynMatchClause -FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Syntax.DebugPointForTarget get_spInfo() -FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Syntax.DebugPointForTarget spInfo -FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Syntax.SynExpr get_resultExpr() -FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Syntax.SynExpr resultExpr -FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Syntax.SynMatchClause NewSynMatchClause(FSharp.Compiler.Syntax.SynPat, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.DebugPointForTarget) -FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Syntax.SynPat get_pat() -FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Syntax.SynPat pat -FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Text.Range RangeOfGuardAndRhs -FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Text.Range get_RangeOfGuardAndRhs() -FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMatchClause: Int32 Tag -FSharp.Compiler.Syntax.SynMatchClause: Int32 get_Tag() -FSharp.Compiler.Syntax.SynMatchClause: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr] get_whenExpr() -FSharp.Compiler.Syntax.SynMatchClause: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr] whenExpr -FSharp.Compiler.Syntax.SynMatchClause: System.String ToString() -FSharp.Compiler.Syntax.SynMeasure -FSharp.Compiler.Syntax.SynMeasure+Anon: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMeasure+Anon: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMeasure+Divide: FSharp.Compiler.Syntax.SynMeasure get_measure1() -FSharp.Compiler.Syntax.SynMeasure+Divide: FSharp.Compiler.Syntax.SynMeasure get_measure2() -FSharp.Compiler.Syntax.SynMeasure+Divide: FSharp.Compiler.Syntax.SynMeasure measure1 -FSharp.Compiler.Syntax.SynMeasure+Divide: FSharp.Compiler.Syntax.SynMeasure measure2 -FSharp.Compiler.Syntax.SynMeasure+Divide: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMeasure+Divide: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMeasure+Named: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMeasure+Named: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMeasure+Named: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() -FSharp.Compiler.Syntax.SynMeasure+Named: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId -FSharp.Compiler.Syntax.SynMeasure+Power: FSharp.Compiler.Syntax.SynMeasure get_measure() -FSharp.Compiler.Syntax.SynMeasure+Power: FSharp.Compiler.Syntax.SynMeasure measure -FSharp.Compiler.Syntax.SynMeasure+Power: FSharp.Compiler.Syntax.SynRationalConst get_power() -FSharp.Compiler.Syntax.SynMeasure+Power: FSharp.Compiler.Syntax.SynRationalConst power -FSharp.Compiler.Syntax.SynMeasure+Power: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMeasure+Power: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMeasure+Product: FSharp.Compiler.Syntax.SynMeasure get_measure1() -FSharp.Compiler.Syntax.SynMeasure+Product: FSharp.Compiler.Syntax.SynMeasure get_measure2() -FSharp.Compiler.Syntax.SynMeasure+Product: FSharp.Compiler.Syntax.SynMeasure measure1 -FSharp.Compiler.Syntax.SynMeasure+Product: FSharp.Compiler.Syntax.SynMeasure measure2 -FSharp.Compiler.Syntax.SynMeasure+Product: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMeasure+Product: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMeasure+Seq: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMeasure+Seq: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMeasure+Seq: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMeasure] get_measures() -FSharp.Compiler.Syntax.SynMeasure+Seq: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMeasure] measures -FSharp.Compiler.Syntax.SynMeasure+Tags: Int32 Anon -FSharp.Compiler.Syntax.SynMeasure+Tags: Int32 Divide -FSharp.Compiler.Syntax.SynMeasure+Tags: Int32 Named -FSharp.Compiler.Syntax.SynMeasure+Tags: Int32 One -FSharp.Compiler.Syntax.SynMeasure+Tags: Int32 Power -FSharp.Compiler.Syntax.SynMeasure+Tags: Int32 Product -FSharp.Compiler.Syntax.SynMeasure+Tags: Int32 Seq -FSharp.Compiler.Syntax.SynMeasure+Tags: Int32 Var -FSharp.Compiler.Syntax.SynMeasure+Var: FSharp.Compiler.Syntax.SynTypar get_typar() -FSharp.Compiler.Syntax.SynMeasure+Var: FSharp.Compiler.Syntax.SynTypar typar -FSharp.Compiler.Syntax.SynMeasure+Var: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMeasure+Var: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMeasure: Boolean IsAnon -FSharp.Compiler.Syntax.SynMeasure: Boolean IsDivide -FSharp.Compiler.Syntax.SynMeasure: Boolean IsNamed -FSharp.Compiler.Syntax.SynMeasure: Boolean IsOne -FSharp.Compiler.Syntax.SynMeasure: Boolean IsPower -FSharp.Compiler.Syntax.SynMeasure: Boolean IsProduct -FSharp.Compiler.Syntax.SynMeasure: Boolean IsSeq -FSharp.Compiler.Syntax.SynMeasure: Boolean IsVar -FSharp.Compiler.Syntax.SynMeasure: Boolean get_IsAnon() -FSharp.Compiler.Syntax.SynMeasure: Boolean get_IsDivide() -FSharp.Compiler.Syntax.SynMeasure: Boolean get_IsNamed() -FSharp.Compiler.Syntax.SynMeasure: Boolean get_IsOne() -FSharp.Compiler.Syntax.SynMeasure: Boolean get_IsPower() -FSharp.Compiler.Syntax.SynMeasure: Boolean get_IsProduct() -FSharp.Compiler.Syntax.SynMeasure: Boolean get_IsSeq() -FSharp.Compiler.Syntax.SynMeasure: Boolean get_IsVar() -FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure NewAnon(FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure NewDivide(FSharp.Compiler.Syntax.SynMeasure, FSharp.Compiler.Syntax.SynMeasure, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure NewNamed(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure NewPower(FSharp.Compiler.Syntax.SynMeasure, FSharp.Compiler.Syntax.SynRationalConst, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure NewProduct(FSharp.Compiler.Syntax.SynMeasure, FSharp.Compiler.Syntax.SynMeasure, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure NewSeq(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMeasure], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure NewVar(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure One -FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure get_One() -FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure+Anon -FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure+Divide -FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure+Named -FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure+Power -FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure+Product -FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure+Seq -FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure+Tags -FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure+Var -FSharp.Compiler.Syntax.SynMeasure: Int32 Tag -FSharp.Compiler.Syntax.SynMeasure: Int32 get_Tag() -FSharp.Compiler.Syntax.SynMeasure: System.String ToString() -FSharp.Compiler.Syntax.SynMemberDefn -FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot: FSharp.Compiler.Syntax.SynMemberFlags flags -FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot: FSharp.Compiler.Syntax.SynMemberFlags get_flags() -FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot: FSharp.Compiler.Syntax.SynValSig get_slotSig() -FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot: FSharp.Compiler.Syntax.SynValSig slotSig -FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Boolean get_isStatic() -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Boolean isStatic -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Syntax.Ident get_ident() -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Syntax.Ident ident -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Syntax.SynExpr get_synExpr() -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Syntax.SynExpr synExpr -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Syntax.SynMemberKind get_propKind() -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Syntax.SynMemberKind propKind -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Xml.PreXmlDoc xmlDoc -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynMemberKind,FSharp.Compiler.Syntax.SynMemberFlags] get_memberFlags() -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynMemberKind,FSharp.Compiler.Syntax.SynMemberFlags] memberFlags -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynType] get_typeOpt() -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynType] typeOpt -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] getSetRange -FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_getSetRange() -FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: FSharp.Compiler.Syntax.SynSimplePats ctorArgs -FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: FSharp.Compiler.Syntax.SynSimplePats get_ctorArgs() -FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() -FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: FSharp.Compiler.Xml.PreXmlDoc xmlDoc -FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes -FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() -FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_selfIdentifier() -FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] selfIdentifier -FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility -FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() -FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: FSharp.Compiler.Syntax.SynExpr get_inheritArgs() -FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: FSharp.Compiler.Syntax.SynExpr inheritArgs -FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: FSharp.Compiler.Syntax.SynType get_inheritType() -FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: FSharp.Compiler.Syntax.SynType inheritType -FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_inheritAlias() -FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] inheritAlias -FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Syntax.SynType baseType -FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Syntax.SynType get_baseType() -FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMemberDefn+Inherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] asIdent -FSharp.Compiler.Syntax.SynMemberDefn+Inherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_asIdent() -FSharp.Compiler.Syntax.SynMemberDefn+Interface: FSharp.Compiler.Syntax.SynType get_interfaceType() -FSharp.Compiler.Syntax.SynMemberDefn+Interface: FSharp.Compiler.Syntax.SynType interfaceType -FSharp.Compiler.Syntax.SynMemberDefn+Interface: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMemberDefn+Interface: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMemberDefn+Interface: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]] get_members() -FSharp.Compiler.Syntax.SynMemberDefn+Interface: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]] members -FSharp.Compiler.Syntax.SynMemberDefn+LetBindings: Boolean get_isRecursive() -FSharp.Compiler.Syntax.SynMemberDefn+LetBindings: Boolean get_isStatic() -FSharp.Compiler.Syntax.SynMemberDefn+LetBindings: Boolean isRecursive -FSharp.Compiler.Syntax.SynMemberDefn+LetBindings: Boolean isStatic -FSharp.Compiler.Syntax.SynMemberDefn+LetBindings: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMemberDefn+LetBindings: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMemberDefn+LetBindings: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] bindings -FSharp.Compiler.Syntax.SynMemberDefn+LetBindings: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] get_bindings() -FSharp.Compiler.Syntax.SynMemberDefn+Member: FSharp.Compiler.Syntax.SynBinding get_memberDefn() -FSharp.Compiler.Syntax.SynMemberDefn+Member: FSharp.Compiler.Syntax.SynBinding memberDefn -FSharp.Compiler.Syntax.SynMemberDefn+Member: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMemberDefn+Member: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMemberDefn+NestedType: FSharp.Compiler.Syntax.SynTypeDefn get_typeDefn() -FSharp.Compiler.Syntax.SynMemberDefn+NestedType: FSharp.Compiler.Syntax.SynTypeDefn typeDefn -FSharp.Compiler.Syntax.SynMemberDefn+NestedType: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMemberDefn+NestedType: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMemberDefn+NestedType: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility -FSharp.Compiler.Syntax.SynMemberDefn+NestedType: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() -FSharp.Compiler.Syntax.SynMemberDefn+Open: FSharp.Compiler.Syntax.SynOpenDeclTarget get_target() -FSharp.Compiler.Syntax.SynMemberDefn+Open: FSharp.Compiler.Syntax.SynOpenDeclTarget target -FSharp.Compiler.Syntax.SynMemberDefn+Open: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMemberDefn+Open: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 AbstractSlot -FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 AutoProperty -FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 ImplicitCtor -FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 ImplicitInherit -FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 Inherit -FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 Interface -FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 LetBindings -FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 Member -FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 NestedType -FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 Open -FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 ValField -FSharp.Compiler.Syntax.SynMemberDefn+ValField: FSharp.Compiler.Syntax.SynField fieldInfo -FSharp.Compiler.Syntax.SynMemberDefn+ValField: FSharp.Compiler.Syntax.SynField get_fieldInfo() -FSharp.Compiler.Syntax.SynMemberDefn+ValField: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMemberDefn+ValField: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsAbstractSlot -FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsAutoProperty -FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsImplicitCtor -FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsImplicitInherit -FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsInherit -FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsInterface -FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsLetBindings -FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsMember -FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsNestedType -FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsOpen -FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsValField -FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsAbstractSlot() -FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsAutoProperty() -FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsImplicitCtor() -FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsImplicitInherit() -FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsInherit() -FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsInterface() -FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsLetBindings() -FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsMember() -FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsNestedType() -FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsOpen() -FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsValField() -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewAbstractSlot(FSharp.Compiler.Syntax.SynValSig, FSharp.Compiler.Syntax.SynMemberFlags, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewAutoProperty(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], Boolean, FSharp.Compiler.Syntax.Ident, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynType], FSharp.Compiler.Syntax.SynMemberKind, Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynMemberKind,FSharp.Compiler.Syntax.SynMemberFlags], FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewImplicitCtor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Syntax.SynSimplePats, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Xml.PreXmlDoc, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewImplicitInherit(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewInherit(FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewInterface(FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewLetBindings(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding], Boolean, Boolean, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewMember(FSharp.Compiler.Syntax.SynBinding, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewNestedType(FSharp.Compiler.Syntax.SynTypeDefn, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewOpen(FSharp.Compiler.Syntax.SynOpenDeclTarget, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewValField(FSharp.Compiler.Syntax.SynField, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+Inherit -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+Interface -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+LetBindings -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+Member -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+NestedType -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+Open -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+Tags -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+ValField -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynMemberDefn: Int32 Tag -FSharp.Compiler.Syntax.SynMemberDefn: Int32 get_Tag() -FSharp.Compiler.Syntax.SynMemberDefn: System.String ToString() -FSharp.Compiler.Syntax.SynMemberFlags -FSharp.Compiler.Syntax.SynMemberFlags: Boolean Equals(FSharp.Compiler.Syntax.SynMemberFlags) -FSharp.Compiler.Syntax.SynMemberFlags: Boolean Equals(System.Object) -FSharp.Compiler.Syntax.SynMemberFlags: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.SynMemberFlags: Boolean IsDispatchSlot -FSharp.Compiler.Syntax.SynMemberFlags: Boolean IsFinal -FSharp.Compiler.Syntax.SynMemberFlags: Boolean IsInstance -FSharp.Compiler.Syntax.SynMemberFlags: Boolean IsOverrideOrExplicitImpl -FSharp.Compiler.Syntax.SynMemberFlags: Boolean get_IsDispatchSlot() -FSharp.Compiler.Syntax.SynMemberFlags: Boolean get_IsFinal() -FSharp.Compiler.Syntax.SynMemberFlags: Boolean get_IsInstance() -FSharp.Compiler.Syntax.SynMemberFlags: Boolean get_IsOverrideOrExplicitImpl() -FSharp.Compiler.Syntax.SynMemberFlags: FSharp.Compiler.Syntax.SynMemberKind MemberKind -FSharp.Compiler.Syntax.SynMemberFlags: FSharp.Compiler.Syntax.SynMemberKind get_MemberKind() -FSharp.Compiler.Syntax.SynMemberFlags: Int32 GetHashCode() -FSharp.Compiler.Syntax.SynMemberFlags: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.SynMemberFlags: System.String ToString() -FSharp.Compiler.Syntax.SynMemberFlags: Void .ctor(Boolean, Boolean, Boolean, Boolean, FSharp.Compiler.Syntax.SynMemberKind) -FSharp.Compiler.Syntax.SynMemberKind -FSharp.Compiler.Syntax.SynMemberKind+Tags: Int32 ClassConstructor -FSharp.Compiler.Syntax.SynMemberKind+Tags: Int32 Constructor -FSharp.Compiler.Syntax.SynMemberKind+Tags: Int32 Member -FSharp.Compiler.Syntax.SynMemberKind+Tags: Int32 PropertyGet -FSharp.Compiler.Syntax.SynMemberKind+Tags: Int32 PropertyGetSet -FSharp.Compiler.Syntax.SynMemberKind+Tags: Int32 PropertySet -FSharp.Compiler.Syntax.SynMemberKind: Boolean Equals(FSharp.Compiler.Syntax.SynMemberKind) -FSharp.Compiler.Syntax.SynMemberKind: Boolean Equals(System.Object) -FSharp.Compiler.Syntax.SynMemberKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.SynMemberKind: Boolean IsClassConstructor -FSharp.Compiler.Syntax.SynMemberKind: Boolean IsConstructor -FSharp.Compiler.Syntax.SynMemberKind: Boolean IsMember -FSharp.Compiler.Syntax.SynMemberKind: Boolean IsPropertyGet -FSharp.Compiler.Syntax.SynMemberKind: Boolean IsPropertyGetSet -FSharp.Compiler.Syntax.SynMemberKind: Boolean IsPropertySet -FSharp.Compiler.Syntax.SynMemberKind: Boolean get_IsClassConstructor() -FSharp.Compiler.Syntax.SynMemberKind: Boolean get_IsConstructor() -FSharp.Compiler.Syntax.SynMemberKind: Boolean get_IsMember() -FSharp.Compiler.Syntax.SynMemberKind: Boolean get_IsPropertyGet() -FSharp.Compiler.Syntax.SynMemberKind: Boolean get_IsPropertyGetSet() -FSharp.Compiler.Syntax.SynMemberKind: Boolean get_IsPropertySet() -FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind ClassConstructor -FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind Constructor -FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind Member -FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind PropertyGet -FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind PropertyGetSet -FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind PropertySet -FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind get_ClassConstructor() -FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind get_Constructor() -FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind get_Member() -FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind get_PropertyGet() -FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind get_PropertyGetSet() -FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind get_PropertySet() -FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind+Tags -FSharp.Compiler.Syntax.SynMemberKind: Int32 GetHashCode() -FSharp.Compiler.Syntax.SynMemberKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.SynMemberKind: Int32 Tag -FSharp.Compiler.Syntax.SynMemberKind: Int32 get_Tag() -FSharp.Compiler.Syntax.SynMemberKind: System.String ToString() -FSharp.Compiler.Syntax.SynMemberSig -FSharp.Compiler.Syntax.SynMemberSig+Inherit: FSharp.Compiler.Syntax.SynType get_inheritedType() -FSharp.Compiler.Syntax.SynMemberSig+Inherit: FSharp.Compiler.Syntax.SynType inheritedType -FSharp.Compiler.Syntax.SynMemberSig+Inherit: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMemberSig+Inherit: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMemberSig+Interface: FSharp.Compiler.Syntax.SynType get_interfaceType() -FSharp.Compiler.Syntax.SynMemberSig+Interface: FSharp.Compiler.Syntax.SynType interfaceType -FSharp.Compiler.Syntax.SynMemberSig+Interface: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMemberSig+Interface: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMemberSig+Member: FSharp.Compiler.Syntax.SynMemberFlags flags -FSharp.Compiler.Syntax.SynMemberSig+Member: FSharp.Compiler.Syntax.SynMemberFlags get_flags() -FSharp.Compiler.Syntax.SynMemberSig+Member: FSharp.Compiler.Syntax.SynValSig get_memberSig() -FSharp.Compiler.Syntax.SynMemberSig+Member: FSharp.Compiler.Syntax.SynValSig memberSig -FSharp.Compiler.Syntax.SynMemberSig+Member: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMemberSig+Member: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMemberSig+NestedType: FSharp.Compiler.Syntax.SynTypeDefnSig get_nestedType() -FSharp.Compiler.Syntax.SynMemberSig+NestedType: FSharp.Compiler.Syntax.SynTypeDefnSig nestedType -FSharp.Compiler.Syntax.SynMemberSig+NestedType: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMemberSig+NestedType: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMemberSig+Tags: Int32 Inherit -FSharp.Compiler.Syntax.SynMemberSig+Tags: Int32 Interface -FSharp.Compiler.Syntax.SynMemberSig+Tags: Int32 Member -FSharp.Compiler.Syntax.SynMemberSig+Tags: Int32 NestedType -FSharp.Compiler.Syntax.SynMemberSig+Tags: Int32 ValField -FSharp.Compiler.Syntax.SynMemberSig+ValField: FSharp.Compiler.Syntax.SynField field -FSharp.Compiler.Syntax.SynMemberSig+ValField: FSharp.Compiler.Syntax.SynField get_field() -FSharp.Compiler.Syntax.SynMemberSig+ValField: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynMemberSig+ValField: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynMemberSig: Boolean IsInherit -FSharp.Compiler.Syntax.SynMemberSig: Boolean IsInterface -FSharp.Compiler.Syntax.SynMemberSig: Boolean IsMember -FSharp.Compiler.Syntax.SynMemberSig: Boolean IsNestedType -FSharp.Compiler.Syntax.SynMemberSig: Boolean IsValField -FSharp.Compiler.Syntax.SynMemberSig: Boolean get_IsInherit() -FSharp.Compiler.Syntax.SynMemberSig: Boolean get_IsInterface() -FSharp.Compiler.Syntax.SynMemberSig: Boolean get_IsMember() -FSharp.Compiler.Syntax.SynMemberSig: Boolean get_IsNestedType() -FSharp.Compiler.Syntax.SynMemberSig: Boolean get_IsValField() -FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig NewInherit(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig NewInterface(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig NewMember(FSharp.Compiler.Syntax.SynValSig, FSharp.Compiler.Syntax.SynMemberFlags, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig NewNestedType(FSharp.Compiler.Syntax.SynTypeDefnSig, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig NewValField(FSharp.Compiler.Syntax.SynField, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig+Inherit -FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig+Interface -FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig+Member -FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig+NestedType -FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig+Tags -FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig+ValField -FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynMemberSig: Int32 Tag -FSharp.Compiler.Syntax.SynMemberSig: Int32 get_Tag() -FSharp.Compiler.Syntax.SynMemberSig: System.String ToString() -FSharp.Compiler.Syntax.SynModuleDecl -FSharp.Compiler.Syntax.SynModuleDecl+Attributes: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynModuleDecl+Attributes: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynModuleDecl+Attributes: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes -FSharp.Compiler.Syntax.SynModuleDecl+Attributes: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() -FSharp.Compiler.Syntax.SynModuleDecl+DoExpr: FSharp.Compiler.Syntax.DebugPointAtBinding get_spInfo() -FSharp.Compiler.Syntax.SynModuleDecl+DoExpr: FSharp.Compiler.Syntax.DebugPointAtBinding spInfo -FSharp.Compiler.Syntax.SynModuleDecl+DoExpr: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynModuleDecl+DoExpr: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynModuleDecl+DoExpr: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynModuleDecl+DoExpr: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynModuleDecl+Exception: FSharp.Compiler.Syntax.SynExceptionDefn exnDefn -FSharp.Compiler.Syntax.SynModuleDecl+Exception: FSharp.Compiler.Syntax.SynExceptionDefn get_exnDefn() -FSharp.Compiler.Syntax.SynModuleDecl+Exception: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynModuleDecl+Exception: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynModuleDecl+HashDirective: FSharp.Compiler.Syntax.ParsedHashDirective get_hashDirective() -FSharp.Compiler.Syntax.SynModuleDecl+HashDirective: FSharp.Compiler.Syntax.ParsedHashDirective hashDirective -FSharp.Compiler.Syntax.SynModuleDecl+HashDirective: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynModuleDecl+HashDirective: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynModuleDecl+Let: Boolean get_isRecursive() -FSharp.Compiler.Syntax.SynModuleDecl+Let: Boolean isRecursive -FSharp.Compiler.Syntax.SynModuleDecl+Let: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynModuleDecl+Let: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynModuleDecl+Let: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] bindings -FSharp.Compiler.Syntax.SynModuleDecl+Let: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] get_bindings() -FSharp.Compiler.Syntax.SynModuleDecl+ModuleAbbrev: FSharp.Compiler.Syntax.Ident get_ident() -FSharp.Compiler.Syntax.SynModuleDecl+ModuleAbbrev: FSharp.Compiler.Syntax.Ident ident -FSharp.Compiler.Syntax.SynModuleDecl+ModuleAbbrev: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynModuleDecl+ModuleAbbrev: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynModuleDecl+ModuleAbbrev: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() -FSharp.Compiler.Syntax.SynModuleDecl+ModuleAbbrev: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId -FSharp.Compiler.Syntax.SynModuleDecl+NamespaceFragment: FSharp.Compiler.Syntax.SynModuleOrNamespace fragment -FSharp.Compiler.Syntax.SynModuleDecl+NamespaceFragment: FSharp.Compiler.Syntax.SynModuleOrNamespace get_fragment() -FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: Boolean get_isContinuing() -FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: Boolean get_isRecursive() -FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: Boolean isContinuing -FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: Boolean isRecursive -FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: FSharp.Compiler.Syntax.SynComponentInfo get_moduleInfo() -FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: FSharp.Compiler.Syntax.SynComponentInfo moduleInfo -FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] decls -FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] get_decls() -FSharp.Compiler.Syntax.SynModuleDecl+Open: FSharp.Compiler.Syntax.SynOpenDeclTarget get_target() -FSharp.Compiler.Syntax.SynModuleDecl+Open: FSharp.Compiler.Syntax.SynOpenDeclTarget target -FSharp.Compiler.Syntax.SynModuleDecl+Open: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynModuleDecl+Open: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynModuleDecl+Tags: Int32 Attributes -FSharp.Compiler.Syntax.SynModuleDecl+Tags: Int32 DoExpr -FSharp.Compiler.Syntax.SynModuleDecl+Tags: Int32 Exception -FSharp.Compiler.Syntax.SynModuleDecl+Tags: Int32 HashDirective -FSharp.Compiler.Syntax.SynModuleDecl+Tags: Int32 Let -FSharp.Compiler.Syntax.SynModuleDecl+Tags: Int32 ModuleAbbrev -FSharp.Compiler.Syntax.SynModuleDecl+Tags: Int32 NamespaceFragment -FSharp.Compiler.Syntax.SynModuleDecl+Tags: Int32 NestedModule -FSharp.Compiler.Syntax.SynModuleDecl+Tags: Int32 Open -FSharp.Compiler.Syntax.SynModuleDecl+Tags: Int32 Types -FSharp.Compiler.Syntax.SynModuleDecl+Types: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynModuleDecl+Types: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynModuleDecl+Types: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeDefn] get_typeDefns() -FSharp.Compiler.Syntax.SynModuleDecl+Types: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeDefn] typeDefns -FSharp.Compiler.Syntax.SynModuleDecl: Boolean IsAttributes -FSharp.Compiler.Syntax.SynModuleDecl: Boolean IsDoExpr -FSharp.Compiler.Syntax.SynModuleDecl: Boolean IsException -FSharp.Compiler.Syntax.SynModuleDecl: Boolean IsHashDirective -FSharp.Compiler.Syntax.SynModuleDecl: Boolean IsLet -FSharp.Compiler.Syntax.SynModuleDecl: Boolean IsModuleAbbrev -FSharp.Compiler.Syntax.SynModuleDecl: Boolean IsNamespaceFragment -FSharp.Compiler.Syntax.SynModuleDecl: Boolean IsNestedModule -FSharp.Compiler.Syntax.SynModuleDecl: Boolean IsOpen -FSharp.Compiler.Syntax.SynModuleDecl: Boolean IsTypes -FSharp.Compiler.Syntax.SynModuleDecl: Boolean get_IsAttributes() -FSharp.Compiler.Syntax.SynModuleDecl: Boolean get_IsDoExpr() -FSharp.Compiler.Syntax.SynModuleDecl: Boolean get_IsException() -FSharp.Compiler.Syntax.SynModuleDecl: Boolean get_IsHashDirective() -FSharp.Compiler.Syntax.SynModuleDecl: Boolean get_IsLet() -FSharp.Compiler.Syntax.SynModuleDecl: Boolean get_IsModuleAbbrev() -FSharp.Compiler.Syntax.SynModuleDecl: Boolean get_IsNamespaceFragment() -FSharp.Compiler.Syntax.SynModuleDecl: Boolean get_IsNestedModule() -FSharp.Compiler.Syntax.SynModuleDecl: Boolean get_IsOpen() -FSharp.Compiler.Syntax.SynModuleDecl: Boolean get_IsTypes() -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewAttributes(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewDoExpr(FSharp.Compiler.Syntax.DebugPointAtBinding, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewException(FSharp.Compiler.Syntax.SynExceptionDefn, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewHashDirective(FSharp.Compiler.Syntax.ParsedHashDirective, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewLet(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewModuleAbbrev(FSharp.Compiler.Syntax.Ident, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewNamespaceFragment(FSharp.Compiler.Syntax.SynModuleOrNamespace) -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewNestedModule(FSharp.Compiler.Syntax.SynComponentInfo, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl], Boolean, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewOpen(FSharp.Compiler.Syntax.SynOpenDeclTarget, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewTypes(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeDefn], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+Attributes -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+DoExpr -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+Exception -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+HashDirective -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+Let -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+ModuleAbbrev -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+NamespaceFragment -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+NestedModule -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+Open -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+Tags -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+Types -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynModuleDecl: Int32 Tag -FSharp.Compiler.Syntax.SynModuleDecl: Int32 get_Tag() -FSharp.Compiler.Syntax.SynModuleDecl: System.String ToString() -FSharp.Compiler.Syntax.SynModuleOrNamespace -FSharp.Compiler.Syntax.SynModuleOrNamespace: Boolean get_isRecursive() -FSharp.Compiler.Syntax.SynModuleOrNamespace: Boolean isRecursive -FSharp.Compiler.Syntax.SynModuleOrNamespace: FSharp.Compiler.Syntax.SynModuleOrNamespace NewSynModuleOrNamespace(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], Boolean, FSharp.Compiler.Syntax.SynModuleOrNamespaceKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl], FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynModuleOrNamespace: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind get_kind() -FSharp.Compiler.Syntax.SynModuleOrNamespace: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind kind -FSharp.Compiler.Syntax.SynModuleOrNamespace: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynModuleOrNamespace: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynModuleOrNamespace: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynModuleOrNamespace: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynModuleOrNamespace: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() -FSharp.Compiler.Syntax.SynModuleOrNamespace: FSharp.Compiler.Xml.PreXmlDoc xmlDoc -FSharp.Compiler.Syntax.SynModuleOrNamespace: Int32 Tag -FSharp.Compiler.Syntax.SynModuleOrNamespace: Int32 get_Tag() -FSharp.Compiler.Syntax.SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() -FSharp.Compiler.Syntax.SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId -FSharp.Compiler.Syntax.SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attribs -FSharp.Compiler.Syntax.SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attribs() -FSharp.Compiler.Syntax.SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] decls -FSharp.Compiler.Syntax.SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] get_decls() -FSharp.Compiler.Syntax.SynModuleOrNamespace: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility -FSharp.Compiler.Syntax.SynModuleOrNamespace: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() -FSharp.Compiler.Syntax.SynModuleOrNamespace: System.String ToString() -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind+Tags: Int32 AnonModule -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind+Tags: Int32 DeclaredNamespace -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind+Tags: Int32 GlobalNamespace -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind+Tags: Int32 NamedModule -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean Equals(FSharp.Compiler.Syntax.SynModuleOrNamespaceKind) -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean Equals(System.Object) -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean IsAnonModule -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean IsDeclaredNamespace -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean IsGlobalNamespace -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean IsModule -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean IsNamedModule -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean get_IsAnonModule() -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean get_IsDeclaredNamespace() -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean get_IsGlobalNamespace() -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean get_IsModule() -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean get_IsNamedModule() -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind AnonModule -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind DeclaredNamespace -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind GlobalNamespace -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind NamedModule -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind get_AnonModule() -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind get_DeclaredNamespace() -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind get_GlobalNamespace() -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind get_NamedModule() -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind+Tags -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Int32 CompareTo(FSharp.Compiler.Syntax.SynModuleOrNamespaceKind) -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Int32 CompareTo(System.Object) -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Int32 GetHashCode() -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Int32 Tag -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Int32 get_Tag() -FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: System.String ToString() -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Boolean get_isRecursive() -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Boolean isRecursive -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind get_kind() -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind kind -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: FSharp.Compiler.Syntax.SynModuleOrNamespaceSig NewSynModuleOrNamespaceSig(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], Boolean, FSharp.Compiler.Syntax.SynModuleOrNamespaceKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl], FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: FSharp.Compiler.Xml.PreXmlDoc xmlDoc -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Int32 Tag -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Int32 get_Tag() -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attribs -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attribs() -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl] decls -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl] get_decls() -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() -FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: System.String ToString() -FSharp.Compiler.Syntax.SynModuleSigDecl -FSharp.Compiler.Syntax.SynModuleSigDecl+Exception: FSharp.Compiler.Syntax.SynExceptionSig exnSig -FSharp.Compiler.Syntax.SynModuleSigDecl+Exception: FSharp.Compiler.Syntax.SynExceptionSig get_exnSig() -FSharp.Compiler.Syntax.SynModuleSigDecl+Exception: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynModuleSigDecl+Exception: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynModuleSigDecl+HashDirective: FSharp.Compiler.Syntax.ParsedHashDirective get_hashDirective() -FSharp.Compiler.Syntax.SynModuleSigDecl+HashDirective: FSharp.Compiler.Syntax.ParsedHashDirective hashDirective -FSharp.Compiler.Syntax.SynModuleSigDecl+HashDirective: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynModuleSigDecl+HashDirective: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynModuleSigDecl+ModuleAbbrev: FSharp.Compiler.Syntax.Ident get_ident() -FSharp.Compiler.Syntax.SynModuleSigDecl+ModuleAbbrev: FSharp.Compiler.Syntax.Ident ident -FSharp.Compiler.Syntax.SynModuleSigDecl+ModuleAbbrev: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynModuleSigDecl+ModuleAbbrev: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynModuleSigDecl+ModuleAbbrev: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() -FSharp.Compiler.Syntax.SynModuleSigDecl+ModuleAbbrev: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId -FSharp.Compiler.Syntax.SynModuleSigDecl+NamespaceFragment: FSharp.Compiler.Syntax.SynModuleOrNamespaceSig Item -FSharp.Compiler.Syntax.SynModuleSigDecl+NamespaceFragment: FSharp.Compiler.Syntax.SynModuleOrNamespaceSig get_Item() -FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: Boolean get_isRecursive() -FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: Boolean isRecursive -FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: FSharp.Compiler.Syntax.SynComponentInfo get_moduleInfo() -FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: FSharp.Compiler.Syntax.SynComponentInfo moduleInfo -FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl] get_moduleDecls() -FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl] moduleDecls -FSharp.Compiler.Syntax.SynModuleSigDecl+Open: FSharp.Compiler.Syntax.SynOpenDeclTarget get_target() -FSharp.Compiler.Syntax.SynModuleSigDecl+Open: FSharp.Compiler.Syntax.SynOpenDeclTarget target -FSharp.Compiler.Syntax.SynModuleSigDecl+Open: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynModuleSigDecl+Open: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynModuleSigDecl+Tags: Int32 Exception -FSharp.Compiler.Syntax.SynModuleSigDecl+Tags: Int32 HashDirective -FSharp.Compiler.Syntax.SynModuleSigDecl+Tags: Int32 ModuleAbbrev -FSharp.Compiler.Syntax.SynModuleSigDecl+Tags: Int32 NamespaceFragment -FSharp.Compiler.Syntax.SynModuleSigDecl+Tags: Int32 NestedModule -FSharp.Compiler.Syntax.SynModuleSigDecl+Tags: Int32 Open -FSharp.Compiler.Syntax.SynModuleSigDecl+Tags: Int32 Types -FSharp.Compiler.Syntax.SynModuleSigDecl+Tags: Int32 Val -FSharp.Compiler.Syntax.SynModuleSigDecl+Types: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynModuleSigDecl+Types: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynModuleSigDecl+Types: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeDefnSig] get_types() -FSharp.Compiler.Syntax.SynModuleSigDecl+Types: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeDefnSig] types -FSharp.Compiler.Syntax.SynModuleSigDecl+Val: FSharp.Compiler.Syntax.SynValSig get_valSig() -FSharp.Compiler.Syntax.SynModuleSigDecl+Val: FSharp.Compiler.Syntax.SynValSig valSig -FSharp.Compiler.Syntax.SynModuleSigDecl+Val: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynModuleSigDecl+Val: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean IsException -FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean IsHashDirective -FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean IsModuleAbbrev -FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean IsNamespaceFragment -FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean IsNestedModule -FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean IsOpen -FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean IsTypes -FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean IsVal -FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean get_IsException() -FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean get_IsHashDirective() -FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean get_IsModuleAbbrev() -FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean get_IsNamespaceFragment() -FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean get_IsNestedModule() -FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean get_IsOpen() -FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean get_IsTypes() -FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean get_IsVal() -FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewException(FSharp.Compiler.Syntax.SynExceptionSig, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewHashDirective(FSharp.Compiler.Syntax.ParsedHashDirective, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewModuleAbbrev(FSharp.Compiler.Syntax.Ident, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewNamespaceFragment(FSharp.Compiler.Syntax.SynModuleOrNamespaceSig) -FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewNestedModule(FSharp.Compiler.Syntax.SynComponentInfo, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewOpen(FSharp.Compiler.Syntax.SynOpenDeclTarget, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewTypes(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeDefnSig], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewVal(FSharp.Compiler.Syntax.SynValSig, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl+Exception -FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl+HashDirective -FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl+ModuleAbbrev -FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl+NamespaceFragment -FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule -FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl+Open -FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl+Tags -FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl+Types -FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl+Val -FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynModuleSigDecl: Int32 Tag -FSharp.Compiler.Syntax.SynModuleSigDecl: Int32 get_Tag() -FSharp.Compiler.Syntax.SynModuleSigDecl: System.String ToString() -FSharp.Compiler.Syntax.SynOpenDeclTarget -FSharp.Compiler.Syntax.SynOpenDeclTarget+ModuleOrNamespace: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynOpenDeclTarget+ModuleOrNamespace: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynOpenDeclTarget+ModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() -FSharp.Compiler.Syntax.SynOpenDeclTarget+ModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId -FSharp.Compiler.Syntax.SynOpenDeclTarget+Tags: Int32 ModuleOrNamespace -FSharp.Compiler.Syntax.SynOpenDeclTarget+Tags: Int32 Type -FSharp.Compiler.Syntax.SynOpenDeclTarget+Type: FSharp.Compiler.Syntax.SynType get_typeName() -FSharp.Compiler.Syntax.SynOpenDeclTarget+Type: FSharp.Compiler.Syntax.SynType typeName -FSharp.Compiler.Syntax.SynOpenDeclTarget+Type: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynOpenDeclTarget+Type: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynOpenDeclTarget: Boolean IsModuleOrNamespace -FSharp.Compiler.Syntax.SynOpenDeclTarget: Boolean IsType -FSharp.Compiler.Syntax.SynOpenDeclTarget: Boolean get_IsModuleOrNamespace() -FSharp.Compiler.Syntax.SynOpenDeclTarget: Boolean get_IsType() -FSharp.Compiler.Syntax.SynOpenDeclTarget: FSharp.Compiler.Syntax.SynOpenDeclTarget NewModuleOrNamespace(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynOpenDeclTarget: FSharp.Compiler.Syntax.SynOpenDeclTarget NewType(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynOpenDeclTarget: FSharp.Compiler.Syntax.SynOpenDeclTarget+ModuleOrNamespace -FSharp.Compiler.Syntax.SynOpenDeclTarget: FSharp.Compiler.Syntax.SynOpenDeclTarget+Tags -FSharp.Compiler.Syntax.SynOpenDeclTarget: FSharp.Compiler.Syntax.SynOpenDeclTarget+Type -FSharp.Compiler.Syntax.SynOpenDeclTarget: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynOpenDeclTarget: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynOpenDeclTarget: Int32 Tag -FSharp.Compiler.Syntax.SynOpenDeclTarget: Int32 get_Tag() -FSharp.Compiler.Syntax.SynOpenDeclTarget: System.String ToString() -FSharp.Compiler.Syntax.SynPat -FSharp.Compiler.Syntax.SynPat+Ands: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynPat+Ands: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynPat+Ands: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat] get_pats() -FSharp.Compiler.Syntax.SynPat+Ands: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat] pats -FSharp.Compiler.Syntax.SynPat+ArrayOrList: Boolean get_isArray() -FSharp.Compiler.Syntax.SynPat+ArrayOrList: Boolean isArray -FSharp.Compiler.Syntax.SynPat+ArrayOrList: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynPat+ArrayOrList: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynPat+ArrayOrList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat] elementPats -FSharp.Compiler.Syntax.SynPat+ArrayOrList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat] get_elementPats() -FSharp.Compiler.Syntax.SynPat+As: FSharp.Compiler.Syntax.SynPat get_lhsPat() -FSharp.Compiler.Syntax.SynPat+As: FSharp.Compiler.Syntax.SynPat get_rhsPat() -FSharp.Compiler.Syntax.SynPat+As: FSharp.Compiler.Syntax.SynPat lhsPat -FSharp.Compiler.Syntax.SynPat+As: FSharp.Compiler.Syntax.SynPat rhsPat -FSharp.Compiler.Syntax.SynPat+As: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynPat+As: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynPat+Attrib: FSharp.Compiler.Syntax.SynPat get_pat() -FSharp.Compiler.Syntax.SynPat+Attrib: FSharp.Compiler.Syntax.SynPat pat -FSharp.Compiler.Syntax.SynPat+Attrib: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynPat+Attrib: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynPat+Attrib: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes -FSharp.Compiler.Syntax.SynPat+Attrib: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() -FSharp.Compiler.Syntax.SynPat+Const: FSharp.Compiler.Syntax.SynConst constant -FSharp.Compiler.Syntax.SynPat+Const: FSharp.Compiler.Syntax.SynConst get_constant() -FSharp.Compiler.Syntax.SynPat+Const: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynPat+Const: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynPat+DeprecatedCharRange: Char endChar -FSharp.Compiler.Syntax.SynPat+DeprecatedCharRange: Char get_endChar() -FSharp.Compiler.Syntax.SynPat+DeprecatedCharRange: Char get_startChar() -FSharp.Compiler.Syntax.SynPat+DeprecatedCharRange: Char startChar -FSharp.Compiler.Syntax.SynPat+DeprecatedCharRange: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynPat+DeprecatedCharRange: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynPat+FromParseError: FSharp.Compiler.Syntax.SynPat get_pat() -FSharp.Compiler.Syntax.SynPat+FromParseError: FSharp.Compiler.Syntax.SynPat pat -FSharp.Compiler.Syntax.SynPat+FromParseError: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynPat+FromParseError: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynPat+InstanceMember: FSharp.Compiler.Syntax.Ident get_memberId() -FSharp.Compiler.Syntax.SynPat+InstanceMember: FSharp.Compiler.Syntax.Ident get_thisId() -FSharp.Compiler.Syntax.SynPat+InstanceMember: FSharp.Compiler.Syntax.Ident memberId -FSharp.Compiler.Syntax.SynPat+InstanceMember: FSharp.Compiler.Syntax.Ident thisId -FSharp.Compiler.Syntax.SynPat+InstanceMember: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynPat+InstanceMember: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynPat+InstanceMember: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_toolingId() -FSharp.Compiler.Syntax.SynPat+InstanceMember: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] toolingId -FSharp.Compiler.Syntax.SynPat+InstanceMember: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility -FSharp.Compiler.Syntax.SynPat+InstanceMember: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() -FSharp.Compiler.Syntax.SynPat+IsInst: FSharp.Compiler.Syntax.SynType get_pat() -FSharp.Compiler.Syntax.SynPat+IsInst: FSharp.Compiler.Syntax.SynType pat -FSharp.Compiler.Syntax.SynPat+IsInst: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynPat+IsInst: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynPat+LongIdent: FSharp.Compiler.Syntax.LongIdentWithDots get_longDotId() -FSharp.Compiler.Syntax.SynPat+LongIdent: FSharp.Compiler.Syntax.LongIdentWithDots longDotId -FSharp.Compiler.Syntax.SynPat+LongIdent: FSharp.Compiler.Syntax.SynArgPats argPats -FSharp.Compiler.Syntax.SynPat+LongIdent: FSharp.Compiler.Syntax.SynArgPats get_argPats() -FSharp.Compiler.Syntax.SynPat+LongIdent: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynPat+LongIdent: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] extraId -FSharp.Compiler.Syntax.SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_extraId() -FSharp.Compiler.Syntax.SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility -FSharp.Compiler.Syntax.SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() -FSharp.Compiler.Syntax.SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynValTyparDecls] get_typarDecls() -FSharp.Compiler.Syntax.SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynValTyparDecls] typarDecls -FSharp.Compiler.Syntax.SynPat+Named: Boolean get_isSelfIdentifier() -FSharp.Compiler.Syntax.SynPat+Named: Boolean isSelfIdentifier -FSharp.Compiler.Syntax.SynPat+Named: FSharp.Compiler.Syntax.Ident get_ident() -FSharp.Compiler.Syntax.SynPat+Named: FSharp.Compiler.Syntax.Ident ident -FSharp.Compiler.Syntax.SynPat+Named: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynPat+Named: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynPat+Named: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility -FSharp.Compiler.Syntax.SynPat+Named: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() -FSharp.Compiler.Syntax.SynPat+Null: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynPat+Null: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynPat+OptionalVal: FSharp.Compiler.Syntax.Ident get_ident() -FSharp.Compiler.Syntax.SynPat+OptionalVal: FSharp.Compiler.Syntax.Ident ident -FSharp.Compiler.Syntax.SynPat+OptionalVal: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynPat+OptionalVal: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynPat+Or: FSharp.Compiler.Syntax.SynPat get_lhsPat() -FSharp.Compiler.Syntax.SynPat+Or: FSharp.Compiler.Syntax.SynPat get_rhsPat() -FSharp.Compiler.Syntax.SynPat+Or: FSharp.Compiler.Syntax.SynPat lhsPat -FSharp.Compiler.Syntax.SynPat+Or: FSharp.Compiler.Syntax.SynPat rhsPat -FSharp.Compiler.Syntax.SynPat+Or: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynPat+Or: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynPat+Paren: FSharp.Compiler.Syntax.SynPat get_pat() -FSharp.Compiler.Syntax.SynPat+Paren: FSharp.Compiler.Syntax.SynPat pat -FSharp.Compiler.Syntax.SynPat+Paren: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynPat+Paren: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynPat+QuoteExpr: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynPat+QuoteExpr: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynPat+QuoteExpr: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynPat+QuoteExpr: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynPat+Record: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynPat+Record: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynPat+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Syntax.SynPat]] fieldPats -FSharp.Compiler.Syntax.SynPat+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Syntax.SynPat]] get_fieldPats() -FSharp.Compiler.Syntax.SynPat+Tags: Int32 Ands -FSharp.Compiler.Syntax.SynPat+Tags: Int32 ArrayOrList -FSharp.Compiler.Syntax.SynPat+Tags: Int32 As -FSharp.Compiler.Syntax.SynPat+Tags: Int32 Attrib -FSharp.Compiler.Syntax.SynPat+Tags: Int32 Const -FSharp.Compiler.Syntax.SynPat+Tags: Int32 DeprecatedCharRange -FSharp.Compiler.Syntax.SynPat+Tags: Int32 FromParseError -FSharp.Compiler.Syntax.SynPat+Tags: Int32 InstanceMember -FSharp.Compiler.Syntax.SynPat+Tags: Int32 IsInst -FSharp.Compiler.Syntax.SynPat+Tags: Int32 LongIdent -FSharp.Compiler.Syntax.SynPat+Tags: Int32 Named -FSharp.Compiler.Syntax.SynPat+Tags: Int32 Null -FSharp.Compiler.Syntax.SynPat+Tags: Int32 OptionalVal -FSharp.Compiler.Syntax.SynPat+Tags: Int32 Or -FSharp.Compiler.Syntax.SynPat+Tags: Int32 Paren -FSharp.Compiler.Syntax.SynPat+Tags: Int32 QuoteExpr -FSharp.Compiler.Syntax.SynPat+Tags: Int32 Record -FSharp.Compiler.Syntax.SynPat+Tags: Int32 Tuple -FSharp.Compiler.Syntax.SynPat+Tags: Int32 Typed -FSharp.Compiler.Syntax.SynPat+Tags: Int32 Wild -FSharp.Compiler.Syntax.SynPat+Tuple: Boolean get_isStruct() -FSharp.Compiler.Syntax.SynPat+Tuple: Boolean isStruct -FSharp.Compiler.Syntax.SynPat+Tuple: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynPat+Tuple: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynPat+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat] elementPats -FSharp.Compiler.Syntax.SynPat+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat] get_elementPats() -FSharp.Compiler.Syntax.SynPat+Typed: FSharp.Compiler.Syntax.SynPat get_pat() -FSharp.Compiler.Syntax.SynPat+Typed: FSharp.Compiler.Syntax.SynPat pat -FSharp.Compiler.Syntax.SynPat+Typed: FSharp.Compiler.Syntax.SynType get_targetType() -FSharp.Compiler.Syntax.SynPat+Typed: FSharp.Compiler.Syntax.SynType targetType -FSharp.Compiler.Syntax.SynPat+Typed: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynPat+Typed: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynPat+Wild: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynPat+Wild: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynPat: Boolean IsAnds -FSharp.Compiler.Syntax.SynPat: Boolean IsArrayOrList -FSharp.Compiler.Syntax.SynPat: Boolean IsAs -FSharp.Compiler.Syntax.SynPat: Boolean IsAttrib -FSharp.Compiler.Syntax.SynPat: Boolean IsConst -FSharp.Compiler.Syntax.SynPat: Boolean IsDeprecatedCharRange -FSharp.Compiler.Syntax.SynPat: Boolean IsFromParseError -FSharp.Compiler.Syntax.SynPat: Boolean IsInstanceMember -FSharp.Compiler.Syntax.SynPat: Boolean IsIsInst -FSharp.Compiler.Syntax.SynPat: Boolean IsLongIdent -FSharp.Compiler.Syntax.SynPat: Boolean IsNamed -FSharp.Compiler.Syntax.SynPat: Boolean IsNull -FSharp.Compiler.Syntax.SynPat: Boolean IsOptionalVal -FSharp.Compiler.Syntax.SynPat: Boolean IsOr -FSharp.Compiler.Syntax.SynPat: Boolean IsParen -FSharp.Compiler.Syntax.SynPat: Boolean IsQuoteExpr -FSharp.Compiler.Syntax.SynPat: Boolean IsRecord -FSharp.Compiler.Syntax.SynPat: Boolean IsTuple -FSharp.Compiler.Syntax.SynPat: Boolean IsTyped -FSharp.Compiler.Syntax.SynPat: Boolean IsWild -FSharp.Compiler.Syntax.SynPat: Boolean get_IsAnds() -FSharp.Compiler.Syntax.SynPat: Boolean get_IsArrayOrList() -FSharp.Compiler.Syntax.SynPat: Boolean get_IsAs() -FSharp.Compiler.Syntax.SynPat: Boolean get_IsAttrib() -FSharp.Compiler.Syntax.SynPat: Boolean get_IsConst() -FSharp.Compiler.Syntax.SynPat: Boolean get_IsDeprecatedCharRange() -FSharp.Compiler.Syntax.SynPat: Boolean get_IsFromParseError() -FSharp.Compiler.Syntax.SynPat: Boolean get_IsInstanceMember() -FSharp.Compiler.Syntax.SynPat: Boolean get_IsIsInst() -FSharp.Compiler.Syntax.SynPat: Boolean get_IsLongIdent() -FSharp.Compiler.Syntax.SynPat: Boolean get_IsNamed() -FSharp.Compiler.Syntax.SynPat: Boolean get_IsNull() -FSharp.Compiler.Syntax.SynPat: Boolean get_IsOptionalVal() -FSharp.Compiler.Syntax.SynPat: Boolean get_IsOr() -FSharp.Compiler.Syntax.SynPat: Boolean get_IsParen() -FSharp.Compiler.Syntax.SynPat: Boolean get_IsQuoteExpr() -FSharp.Compiler.Syntax.SynPat: Boolean get_IsRecord() -FSharp.Compiler.Syntax.SynPat: Boolean get_IsTuple() -FSharp.Compiler.Syntax.SynPat: Boolean get_IsTyped() -FSharp.Compiler.Syntax.SynPat: Boolean get_IsWild() -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewAnds(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewArrayOrList(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewAs(FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewAttrib(FSharp.Compiler.Syntax.SynPat, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewConst(FSharp.Compiler.Syntax.SynConst, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewDeprecatedCharRange(Char, Char, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewFromParseError(FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewInstanceMember(FSharp.Compiler.Syntax.Ident, FSharp.Compiler.Syntax.Ident, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewIsInst(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewLongIdent(FSharp.Compiler.Syntax.LongIdentWithDots, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynValTyparDecls], FSharp.Compiler.Syntax.SynArgPats, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewNamed(FSharp.Compiler.Syntax.Ident, Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewNull(FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewOptionalVal(FSharp.Compiler.Syntax.Ident, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewOr(FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewParen(FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewQuoteExpr(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewRecord(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Syntax.SynPat]], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewTuple(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewTyped(FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewWild(FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Ands -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+ArrayOrList -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+As -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Attrib -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Const -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+DeprecatedCharRange -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+FromParseError -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+InstanceMember -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+IsInst -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+LongIdent -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Named -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Null -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+OptionalVal -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Or -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Paren -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+QuoteExpr -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Record -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Tags -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Tuple -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Typed -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Wild -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynPat: Int32 Tag -FSharp.Compiler.Syntax.SynPat: Int32 get_Tag() -FSharp.Compiler.Syntax.SynPat: System.String ToString() -FSharp.Compiler.Syntax.SynRationalConst -FSharp.Compiler.Syntax.SynRationalConst+Integer: Int32 get_value() -FSharp.Compiler.Syntax.SynRationalConst+Integer: Int32 value -FSharp.Compiler.Syntax.SynRationalConst+Negate: FSharp.Compiler.Syntax.SynRationalConst Item -FSharp.Compiler.Syntax.SynRationalConst+Negate: FSharp.Compiler.Syntax.SynRationalConst get_Item() -FSharp.Compiler.Syntax.SynRationalConst+Rational: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynRationalConst+Rational: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynRationalConst+Rational: Int32 denominator -FSharp.Compiler.Syntax.SynRationalConst+Rational: Int32 get_denominator() -FSharp.Compiler.Syntax.SynRationalConst+Rational: Int32 get_numerator() -FSharp.Compiler.Syntax.SynRationalConst+Rational: Int32 numerator -FSharp.Compiler.Syntax.SynRationalConst+Tags: Int32 Integer -FSharp.Compiler.Syntax.SynRationalConst+Tags: Int32 Negate -FSharp.Compiler.Syntax.SynRationalConst+Tags: Int32 Rational -FSharp.Compiler.Syntax.SynRationalConst: Boolean IsInteger -FSharp.Compiler.Syntax.SynRationalConst: Boolean IsNegate -FSharp.Compiler.Syntax.SynRationalConst: Boolean IsRational -FSharp.Compiler.Syntax.SynRationalConst: Boolean get_IsInteger() -FSharp.Compiler.Syntax.SynRationalConst: Boolean get_IsNegate() -FSharp.Compiler.Syntax.SynRationalConst: Boolean get_IsRational() -FSharp.Compiler.Syntax.SynRationalConst: FSharp.Compiler.Syntax.SynRationalConst NewInteger(Int32) -FSharp.Compiler.Syntax.SynRationalConst: FSharp.Compiler.Syntax.SynRationalConst NewNegate(FSharp.Compiler.Syntax.SynRationalConst) -FSharp.Compiler.Syntax.SynRationalConst: FSharp.Compiler.Syntax.SynRationalConst NewRational(Int32, Int32, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynRationalConst: FSharp.Compiler.Syntax.SynRationalConst+Integer -FSharp.Compiler.Syntax.SynRationalConst: FSharp.Compiler.Syntax.SynRationalConst+Negate -FSharp.Compiler.Syntax.SynRationalConst: FSharp.Compiler.Syntax.SynRationalConst+Rational -FSharp.Compiler.Syntax.SynRationalConst: FSharp.Compiler.Syntax.SynRationalConst+Tags -FSharp.Compiler.Syntax.SynRationalConst: Int32 Tag -FSharp.Compiler.Syntax.SynRationalConst: Int32 get_Tag() -FSharp.Compiler.Syntax.SynRationalConst: System.String ToString() -FSharp.Compiler.Syntax.SynReturnInfo -FSharp.Compiler.Syntax.SynReturnInfo: FSharp.Compiler.Syntax.SynReturnInfo NewSynReturnInfo(System.Tuple`2[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Syntax.SynArgInfo], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynReturnInfo: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynReturnInfo: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynReturnInfo: Int32 Tag -FSharp.Compiler.Syntax.SynReturnInfo: Int32 get_Tag() -FSharp.Compiler.Syntax.SynReturnInfo: System.String ToString() -FSharp.Compiler.Syntax.SynReturnInfo: System.Tuple`2[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Syntax.SynArgInfo] get_returnType() -FSharp.Compiler.Syntax.SynReturnInfo: System.Tuple`2[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Syntax.SynArgInfo] returnType -FSharp.Compiler.Syntax.SynSimplePat -FSharp.Compiler.Syntax.SynSimplePat+Attrib: FSharp.Compiler.Syntax.SynSimplePat get_pat() -FSharp.Compiler.Syntax.SynSimplePat+Attrib: FSharp.Compiler.Syntax.SynSimplePat pat -FSharp.Compiler.Syntax.SynSimplePat+Attrib: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynSimplePat+Attrib: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynSimplePat+Attrib: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes -FSharp.Compiler.Syntax.SynSimplePat+Attrib: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() -FSharp.Compiler.Syntax.SynSimplePat+Id: Boolean get_isCompilerGenerated() -FSharp.Compiler.Syntax.SynSimplePat+Id: Boolean get_isOptArg() -FSharp.Compiler.Syntax.SynSimplePat+Id: Boolean get_isThisVar() -FSharp.Compiler.Syntax.SynSimplePat+Id: Boolean isCompilerGenerated -FSharp.Compiler.Syntax.SynSimplePat+Id: Boolean isOptArg -FSharp.Compiler.Syntax.SynSimplePat+Id: Boolean isThisVar -FSharp.Compiler.Syntax.SynSimplePat+Id: FSharp.Compiler.Syntax.Ident get_ident() -FSharp.Compiler.Syntax.SynSimplePat+Id: FSharp.Compiler.Syntax.Ident ident -FSharp.Compiler.Syntax.SynSimplePat+Id: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynSimplePat+Id: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynSimplePat+Id: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo]] altNameRefCell -FSharp.Compiler.Syntax.SynSimplePat+Id: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo]] get_altNameRefCell() -FSharp.Compiler.Syntax.SynSimplePat+Tags: Int32 Attrib -FSharp.Compiler.Syntax.SynSimplePat+Tags: Int32 Id -FSharp.Compiler.Syntax.SynSimplePat+Tags: Int32 Typed -FSharp.Compiler.Syntax.SynSimplePat+Typed: FSharp.Compiler.Syntax.SynSimplePat get_pat() -FSharp.Compiler.Syntax.SynSimplePat+Typed: FSharp.Compiler.Syntax.SynSimplePat pat -FSharp.Compiler.Syntax.SynSimplePat+Typed: FSharp.Compiler.Syntax.SynType get_targetType() -FSharp.Compiler.Syntax.SynSimplePat+Typed: FSharp.Compiler.Syntax.SynType targetType -FSharp.Compiler.Syntax.SynSimplePat+Typed: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynSimplePat+Typed: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynSimplePat: Boolean IsAttrib -FSharp.Compiler.Syntax.SynSimplePat: Boolean IsId -FSharp.Compiler.Syntax.SynSimplePat: Boolean IsTyped -FSharp.Compiler.Syntax.SynSimplePat: Boolean get_IsAttrib() -FSharp.Compiler.Syntax.SynSimplePat: Boolean get_IsId() -FSharp.Compiler.Syntax.SynSimplePat: Boolean get_IsTyped() -FSharp.Compiler.Syntax.SynSimplePat: FSharp.Compiler.Syntax.SynSimplePat NewAttrib(FSharp.Compiler.Syntax.SynSimplePat, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynSimplePat: FSharp.Compiler.Syntax.SynSimplePat NewId(FSharp.Compiler.Syntax.Ident, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo]], Boolean, Boolean, Boolean, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynSimplePat: FSharp.Compiler.Syntax.SynSimplePat NewTyped(FSharp.Compiler.Syntax.SynSimplePat, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynSimplePat: FSharp.Compiler.Syntax.SynSimplePat+Attrib -FSharp.Compiler.Syntax.SynSimplePat: FSharp.Compiler.Syntax.SynSimplePat+Id -FSharp.Compiler.Syntax.SynSimplePat: FSharp.Compiler.Syntax.SynSimplePat+Tags -FSharp.Compiler.Syntax.SynSimplePat: FSharp.Compiler.Syntax.SynSimplePat+Typed -FSharp.Compiler.Syntax.SynSimplePat: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynSimplePat: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynSimplePat: Int32 Tag -FSharp.Compiler.Syntax.SynSimplePat: Int32 get_Tag() -FSharp.Compiler.Syntax.SynSimplePat: System.String ToString() -FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo -FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo+Decided: FSharp.Compiler.Syntax.Ident Item -FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo+Decided: FSharp.Compiler.Syntax.Ident get_Item() -FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo+Tags: Int32 Decided -FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo+Tags: Int32 Undecided -FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo+Undecided: FSharp.Compiler.Syntax.Ident Item -FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo+Undecided: FSharp.Compiler.Syntax.Ident get_Item() -FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: Boolean IsDecided -FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: Boolean IsUndecided -FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: Boolean get_IsDecided() -FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: Boolean get_IsUndecided() -FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo NewDecided(FSharp.Compiler.Syntax.Ident) -FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo NewUndecided(FSharp.Compiler.Syntax.Ident) -FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo+Decided -FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo+Tags -FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo+Undecided -FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: Int32 Tag -FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: Int32 get_Tag() -FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: System.String ToString() -FSharp.Compiler.Syntax.SynSimplePats -FSharp.Compiler.Syntax.SynSimplePats+SimplePats: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynSimplePats+SimplePats: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynSimplePats+SimplePats: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynSimplePat] get_pats() -FSharp.Compiler.Syntax.SynSimplePats+SimplePats: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynSimplePat] pats -FSharp.Compiler.Syntax.SynSimplePats+Tags: Int32 SimplePats -FSharp.Compiler.Syntax.SynSimplePats+Tags: Int32 Typed -FSharp.Compiler.Syntax.SynSimplePats+Typed: FSharp.Compiler.Syntax.SynSimplePats get_pats() -FSharp.Compiler.Syntax.SynSimplePats+Typed: FSharp.Compiler.Syntax.SynSimplePats pats -FSharp.Compiler.Syntax.SynSimplePats+Typed: FSharp.Compiler.Syntax.SynType get_targetType() -FSharp.Compiler.Syntax.SynSimplePats+Typed: FSharp.Compiler.Syntax.SynType targetType -FSharp.Compiler.Syntax.SynSimplePats+Typed: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynSimplePats+Typed: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynSimplePats: Boolean IsSimplePats -FSharp.Compiler.Syntax.SynSimplePats: Boolean IsTyped -FSharp.Compiler.Syntax.SynSimplePats: Boolean get_IsSimplePats() -FSharp.Compiler.Syntax.SynSimplePats: Boolean get_IsTyped() -FSharp.Compiler.Syntax.SynSimplePats: FSharp.Compiler.Syntax.SynSimplePats NewSimplePats(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynSimplePat], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynSimplePats: FSharp.Compiler.Syntax.SynSimplePats NewTyped(FSharp.Compiler.Syntax.SynSimplePats, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynSimplePats: FSharp.Compiler.Syntax.SynSimplePats+SimplePats -FSharp.Compiler.Syntax.SynSimplePats: FSharp.Compiler.Syntax.SynSimplePats+Tags -FSharp.Compiler.Syntax.SynSimplePats: FSharp.Compiler.Syntax.SynSimplePats+Typed -FSharp.Compiler.Syntax.SynSimplePats: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynSimplePats: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynSimplePats: Int32 Tag -FSharp.Compiler.Syntax.SynSimplePats: Int32 get_Tag() -FSharp.Compiler.Syntax.SynSimplePats: System.String ToString() -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+Tags: Int32 WhenTyparIsStruct -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+Tags: Int32 WhenTyparTyconEqualsTycon -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparIsStruct: FSharp.Compiler.Syntax.SynTypar get_typar() -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparIsStruct: FSharp.Compiler.Syntax.SynTypar typar -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparIsStruct: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparIsStruct: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: FSharp.Compiler.Syntax.SynTypar get_typar() -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: FSharp.Compiler.Syntax.SynTypar typar -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: FSharp.Compiler.Syntax.SynType get_rhsType() -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: FSharp.Compiler.Syntax.SynType rhsType -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: Boolean IsWhenTyparIsStruct -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: Boolean IsWhenTyparTyconEqualsTycon -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: Boolean get_IsWhenTyparIsStruct() -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: Boolean get_IsWhenTyparTyconEqualsTycon() -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: FSharp.Compiler.Syntax.SynStaticOptimizationConstraint NewWhenTyparIsStruct(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: FSharp.Compiler.Syntax.SynStaticOptimizationConstraint NewWhenTyparTyconEqualsTycon(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+Tags -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparIsStruct -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: Int32 Tag -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: Int32 get_Tag() -FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: System.String ToString() -FSharp.Compiler.Syntax.SynStringKind -FSharp.Compiler.Syntax.SynStringKind+Tags: Int32 Regular -FSharp.Compiler.Syntax.SynStringKind+Tags: Int32 TripleQuote -FSharp.Compiler.Syntax.SynStringKind+Tags: Int32 Verbatim -FSharp.Compiler.Syntax.SynStringKind: Boolean Equals(FSharp.Compiler.Syntax.SynStringKind) -FSharp.Compiler.Syntax.SynStringKind: Boolean Equals(System.Object) -FSharp.Compiler.Syntax.SynStringKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.SynStringKind: Boolean IsRegular -FSharp.Compiler.Syntax.SynStringKind: Boolean IsTripleQuote -FSharp.Compiler.Syntax.SynStringKind: Boolean IsVerbatim -FSharp.Compiler.Syntax.SynStringKind: Boolean get_IsRegular() -FSharp.Compiler.Syntax.SynStringKind: Boolean get_IsTripleQuote() -FSharp.Compiler.Syntax.SynStringKind: Boolean get_IsVerbatim() -FSharp.Compiler.Syntax.SynStringKind: FSharp.Compiler.Syntax.SynStringKind Regular -FSharp.Compiler.Syntax.SynStringKind: FSharp.Compiler.Syntax.SynStringKind TripleQuote -FSharp.Compiler.Syntax.SynStringKind: FSharp.Compiler.Syntax.SynStringKind Verbatim -FSharp.Compiler.Syntax.SynStringKind: FSharp.Compiler.Syntax.SynStringKind get_Regular() -FSharp.Compiler.Syntax.SynStringKind: FSharp.Compiler.Syntax.SynStringKind get_TripleQuote() -FSharp.Compiler.Syntax.SynStringKind: FSharp.Compiler.Syntax.SynStringKind get_Verbatim() -FSharp.Compiler.Syntax.SynStringKind: FSharp.Compiler.Syntax.SynStringKind+Tags -FSharp.Compiler.Syntax.SynStringKind: Int32 CompareTo(FSharp.Compiler.Syntax.SynStringKind) -FSharp.Compiler.Syntax.SynStringKind: Int32 CompareTo(System.Object) -FSharp.Compiler.Syntax.SynStringKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.Syntax.SynStringKind: Int32 GetHashCode() -FSharp.Compiler.Syntax.SynStringKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.SynStringKind: Int32 Tag -FSharp.Compiler.Syntax.SynStringKind: Int32 get_Tag() -FSharp.Compiler.Syntax.SynStringKind: System.String ToString() -FSharp.Compiler.Syntax.SynTypar -FSharp.Compiler.Syntax.SynTypar: Boolean get_isCompGen() -FSharp.Compiler.Syntax.SynTypar: Boolean isCompGen -FSharp.Compiler.Syntax.SynTypar: FSharp.Compiler.Syntax.Ident get_ident() -FSharp.Compiler.Syntax.SynTypar: FSharp.Compiler.Syntax.Ident ident -FSharp.Compiler.Syntax.SynTypar: FSharp.Compiler.Syntax.SynTypar NewSynTypar(FSharp.Compiler.Syntax.Ident, FSharp.Compiler.Syntax.TyparStaticReq, Boolean) -FSharp.Compiler.Syntax.SynTypar: FSharp.Compiler.Syntax.TyparStaticReq get_staticReq() -FSharp.Compiler.Syntax.SynTypar: FSharp.Compiler.Syntax.TyparStaticReq staticReq -FSharp.Compiler.Syntax.SynTypar: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynTypar: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynTypar: Int32 Tag -FSharp.Compiler.Syntax.SynTypar: Int32 get_Tag() -FSharp.Compiler.Syntax.SynTypar: System.String ToString() -FSharp.Compiler.Syntax.SynTyparDecl -FSharp.Compiler.Syntax.SynTyparDecl: FSharp.Compiler.Syntax.SynTypar Item2 -FSharp.Compiler.Syntax.SynTyparDecl: FSharp.Compiler.Syntax.SynTypar get_Item2() -FSharp.Compiler.Syntax.SynTyparDecl: FSharp.Compiler.Syntax.SynTyparDecl NewSynTyparDecl(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Syntax.SynTypar) -FSharp.Compiler.Syntax.SynTyparDecl: Int32 Tag -FSharp.Compiler.Syntax.SynTyparDecl: Int32 get_Tag() -FSharp.Compiler.Syntax.SynTyparDecl: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes -FSharp.Compiler.Syntax.SynTyparDecl: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() -FSharp.Compiler.Syntax.SynTyparDecl: System.String ToString() -FSharp.Compiler.Syntax.SynTyparDecls -FSharp.Compiler.Syntax.SynTyparDecls+PostfixList: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTyparDecls+PostfixList: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTyparDecls+PostfixList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTyparDecl] decls -FSharp.Compiler.Syntax.SynTyparDecls+PostfixList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTyparDecl] get_decls() -FSharp.Compiler.Syntax.SynTyparDecls+PostfixList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint] constraints -FSharp.Compiler.Syntax.SynTyparDecls+PostfixList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint] get_constraints() -FSharp.Compiler.Syntax.SynTyparDecls+PrefixList: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTyparDecls+PrefixList: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTyparDecls+PrefixList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTyparDecl] decls -FSharp.Compiler.Syntax.SynTyparDecls+PrefixList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTyparDecl] get_decls() -FSharp.Compiler.Syntax.SynTyparDecls+SinglePrefix: FSharp.Compiler.Syntax.SynTyparDecl decl -FSharp.Compiler.Syntax.SynTyparDecls+SinglePrefix: FSharp.Compiler.Syntax.SynTyparDecl get_decl() -FSharp.Compiler.Syntax.SynTyparDecls+SinglePrefix: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTyparDecls+SinglePrefix: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTyparDecls+Tags: Int32 PostfixList -FSharp.Compiler.Syntax.SynTyparDecls+Tags: Int32 PrefixList -FSharp.Compiler.Syntax.SynTyparDecls+Tags: Int32 SinglePrefix -FSharp.Compiler.Syntax.SynTyparDecls: Boolean IsPostfixList -FSharp.Compiler.Syntax.SynTyparDecls: Boolean IsPrefixList -FSharp.Compiler.Syntax.SynTyparDecls: Boolean IsSinglePrefix -FSharp.Compiler.Syntax.SynTyparDecls: Boolean get_IsPostfixList() -FSharp.Compiler.Syntax.SynTyparDecls: Boolean get_IsPrefixList() -FSharp.Compiler.Syntax.SynTyparDecls: Boolean get_IsSinglePrefix() -FSharp.Compiler.Syntax.SynTyparDecls: FSharp.Compiler.Syntax.SynTyparDecls NewPostfixList(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTyparDecl], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTyparDecls: FSharp.Compiler.Syntax.SynTyparDecls NewPrefixList(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTyparDecl], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTyparDecls: FSharp.Compiler.Syntax.SynTyparDecls NewSinglePrefix(FSharp.Compiler.Syntax.SynTyparDecl, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTyparDecls: FSharp.Compiler.Syntax.SynTyparDecls+PostfixList -FSharp.Compiler.Syntax.SynTyparDecls: FSharp.Compiler.Syntax.SynTyparDecls+PrefixList -FSharp.Compiler.Syntax.SynTyparDecls: FSharp.Compiler.Syntax.SynTyparDecls+SinglePrefix -FSharp.Compiler.Syntax.SynTyparDecls: FSharp.Compiler.Syntax.SynTyparDecls+Tags -FSharp.Compiler.Syntax.SynTyparDecls: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynTyparDecls: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynTyparDecls: Int32 Tag -FSharp.Compiler.Syntax.SynTyparDecls: Int32 get_Tag() -FSharp.Compiler.Syntax.SynTyparDecls: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTyparDecl] TyparDecls -FSharp.Compiler.Syntax.SynTyparDecls: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTyparDecl] get_TyparDecls() -FSharp.Compiler.Syntax.SynTyparDecls: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint] Constraints -FSharp.Compiler.Syntax.SynTyparDecls: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint] get_Constraints() -FSharp.Compiler.Syntax.SynTyparDecls: System.String ToString() -FSharp.Compiler.Syntax.SynType -FSharp.Compiler.Syntax.SynType+Anon: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynType+Anon: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynType+AnonRecd: Boolean get_isStruct() -FSharp.Compiler.Syntax.SynType+AnonRecd: Boolean isStruct -FSharp.Compiler.Syntax.SynType+AnonRecd: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynType+AnonRecd: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynType+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynType]] fields -FSharp.Compiler.Syntax.SynType+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynType]] get_fields() -FSharp.Compiler.Syntax.SynType+App: Boolean get_isPostfix() -FSharp.Compiler.Syntax.SynType+App: Boolean isPostfix -FSharp.Compiler.Syntax.SynType+App: FSharp.Compiler.Syntax.SynType get_typeName() -FSharp.Compiler.Syntax.SynType+App: FSharp.Compiler.Syntax.SynType typeName -FSharp.Compiler.Syntax.SynType+App: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynType+App: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynType+App: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] get_typeArgs() -FSharp.Compiler.Syntax.SynType+App: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] typeArgs -FSharp.Compiler.Syntax.SynType+App: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range] commaRanges -FSharp.Compiler.Syntax.SynType+App: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range] get_commaRanges() -FSharp.Compiler.Syntax.SynType+App: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_greaterRange() -FSharp.Compiler.Syntax.SynType+App: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_lessRange() -FSharp.Compiler.Syntax.SynType+App: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] greaterRange -FSharp.Compiler.Syntax.SynType+App: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] lessRange -FSharp.Compiler.Syntax.SynType+Array: FSharp.Compiler.Syntax.SynType elementType -FSharp.Compiler.Syntax.SynType+Array: FSharp.Compiler.Syntax.SynType get_elementType() -FSharp.Compiler.Syntax.SynType+Array: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynType+Array: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynType+Array: Int32 get_rank() -FSharp.Compiler.Syntax.SynType+Array: Int32 rank -FSharp.Compiler.Syntax.SynType+Fun: FSharp.Compiler.Syntax.SynType argType -FSharp.Compiler.Syntax.SynType+Fun: FSharp.Compiler.Syntax.SynType get_argType() -FSharp.Compiler.Syntax.SynType+Fun: FSharp.Compiler.Syntax.SynType get_returnType() -FSharp.Compiler.Syntax.SynType+Fun: FSharp.Compiler.Syntax.SynType returnType -FSharp.Compiler.Syntax.SynType+Fun: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynType+Fun: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynType+HashConstraint: FSharp.Compiler.Syntax.SynType get_innerType() -FSharp.Compiler.Syntax.SynType+HashConstraint: FSharp.Compiler.Syntax.SynType innerType -FSharp.Compiler.Syntax.SynType+HashConstraint: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynType+HashConstraint: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynType+LongIdent: FSharp.Compiler.Syntax.LongIdentWithDots get_longDotId() -FSharp.Compiler.Syntax.SynType+LongIdent: FSharp.Compiler.Syntax.LongIdentWithDots longDotId -FSharp.Compiler.Syntax.SynType+LongIdentApp: FSharp.Compiler.Syntax.LongIdentWithDots get_longDotId() -FSharp.Compiler.Syntax.SynType+LongIdentApp: FSharp.Compiler.Syntax.LongIdentWithDots longDotId -FSharp.Compiler.Syntax.SynType+LongIdentApp: FSharp.Compiler.Syntax.SynType get_typeName() -FSharp.Compiler.Syntax.SynType+LongIdentApp: FSharp.Compiler.Syntax.SynType typeName -FSharp.Compiler.Syntax.SynType+LongIdentApp: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynType+LongIdentApp: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynType+LongIdentApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] get_typeArgs() -FSharp.Compiler.Syntax.SynType+LongIdentApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] typeArgs -FSharp.Compiler.Syntax.SynType+LongIdentApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range] commaRanges -FSharp.Compiler.Syntax.SynType+LongIdentApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range] get_commaRanges() -FSharp.Compiler.Syntax.SynType+LongIdentApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_greaterRange() -FSharp.Compiler.Syntax.SynType+LongIdentApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_lessRange() -FSharp.Compiler.Syntax.SynType+LongIdentApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] greaterRange -FSharp.Compiler.Syntax.SynType+LongIdentApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] lessRange -FSharp.Compiler.Syntax.SynType+MeasureDivide: FSharp.Compiler.Syntax.SynType dividend -FSharp.Compiler.Syntax.SynType+MeasureDivide: FSharp.Compiler.Syntax.SynType divisor -FSharp.Compiler.Syntax.SynType+MeasureDivide: FSharp.Compiler.Syntax.SynType get_dividend() -FSharp.Compiler.Syntax.SynType+MeasureDivide: FSharp.Compiler.Syntax.SynType get_divisor() -FSharp.Compiler.Syntax.SynType+MeasureDivide: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynType+MeasureDivide: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynType+MeasurePower: FSharp.Compiler.Syntax.SynRationalConst exponent -FSharp.Compiler.Syntax.SynType+MeasurePower: FSharp.Compiler.Syntax.SynRationalConst get_exponent() -FSharp.Compiler.Syntax.SynType+MeasurePower: FSharp.Compiler.Syntax.SynType baseMeasure -FSharp.Compiler.Syntax.SynType+MeasurePower: FSharp.Compiler.Syntax.SynType get_baseMeasure() -FSharp.Compiler.Syntax.SynType+MeasurePower: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynType+MeasurePower: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynType+Paren: FSharp.Compiler.Syntax.SynType get_innerType() -FSharp.Compiler.Syntax.SynType+Paren: FSharp.Compiler.Syntax.SynType innerType -FSharp.Compiler.Syntax.SynType+Paren: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynType+Paren: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynType+StaticConstant: FSharp.Compiler.Syntax.SynConst constant -FSharp.Compiler.Syntax.SynType+StaticConstant: FSharp.Compiler.Syntax.SynConst get_constant() -FSharp.Compiler.Syntax.SynType+StaticConstant: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynType+StaticConstant: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynType+StaticConstantExpr: FSharp.Compiler.Syntax.SynExpr expr -FSharp.Compiler.Syntax.SynType+StaticConstantExpr: FSharp.Compiler.Syntax.SynExpr get_expr() -FSharp.Compiler.Syntax.SynType+StaticConstantExpr: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynType+StaticConstantExpr: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynType+StaticConstantNamed: FSharp.Compiler.Syntax.SynType get_ident() -FSharp.Compiler.Syntax.SynType+StaticConstantNamed: FSharp.Compiler.Syntax.SynType get_value() -FSharp.Compiler.Syntax.SynType+StaticConstantNamed: FSharp.Compiler.Syntax.SynType ident -FSharp.Compiler.Syntax.SynType+StaticConstantNamed: FSharp.Compiler.Syntax.SynType value -FSharp.Compiler.Syntax.SynType+StaticConstantNamed: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynType+StaticConstantNamed: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynType+Tags: Int32 Anon -FSharp.Compiler.Syntax.SynType+Tags: Int32 AnonRecd -FSharp.Compiler.Syntax.SynType+Tags: Int32 App -FSharp.Compiler.Syntax.SynType+Tags: Int32 Array -FSharp.Compiler.Syntax.SynType+Tags: Int32 Fun -FSharp.Compiler.Syntax.SynType+Tags: Int32 HashConstraint -FSharp.Compiler.Syntax.SynType+Tags: Int32 LongIdent -FSharp.Compiler.Syntax.SynType+Tags: Int32 LongIdentApp -FSharp.Compiler.Syntax.SynType+Tags: Int32 MeasureDivide -FSharp.Compiler.Syntax.SynType+Tags: Int32 MeasurePower -FSharp.Compiler.Syntax.SynType+Tags: Int32 Paren -FSharp.Compiler.Syntax.SynType+Tags: Int32 StaticConstant -FSharp.Compiler.Syntax.SynType+Tags: Int32 StaticConstantExpr -FSharp.Compiler.Syntax.SynType+Tags: Int32 StaticConstantNamed -FSharp.Compiler.Syntax.SynType+Tags: Int32 Tuple -FSharp.Compiler.Syntax.SynType+Tags: Int32 Var -FSharp.Compiler.Syntax.SynType+Tags: Int32 WithGlobalConstraints -FSharp.Compiler.Syntax.SynType+Tuple: Boolean get_isStruct() -FSharp.Compiler.Syntax.SynType+Tuple: Boolean isStruct -FSharp.Compiler.Syntax.SynType+Tuple: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynType+Tuple: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynType+Tuple: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Boolean,FSharp.Compiler.Syntax.SynType]] elementTypes -FSharp.Compiler.Syntax.SynType+Tuple: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Boolean,FSharp.Compiler.Syntax.SynType]] get_elementTypes() -FSharp.Compiler.Syntax.SynType+Var: FSharp.Compiler.Syntax.SynTypar get_typar() -FSharp.Compiler.Syntax.SynType+Var: FSharp.Compiler.Syntax.SynTypar typar -FSharp.Compiler.Syntax.SynType+Var: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynType+Var: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynType+WithGlobalConstraints: FSharp.Compiler.Syntax.SynType get_typeName() -FSharp.Compiler.Syntax.SynType+WithGlobalConstraints: FSharp.Compiler.Syntax.SynType typeName -FSharp.Compiler.Syntax.SynType+WithGlobalConstraints: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynType+WithGlobalConstraints: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynType+WithGlobalConstraints: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint] constraints -FSharp.Compiler.Syntax.SynType+WithGlobalConstraints: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint] get_constraints() -FSharp.Compiler.Syntax.SynType: Boolean IsAnon -FSharp.Compiler.Syntax.SynType: Boolean IsAnonRecd -FSharp.Compiler.Syntax.SynType: Boolean IsApp -FSharp.Compiler.Syntax.SynType: Boolean IsArray -FSharp.Compiler.Syntax.SynType: Boolean IsFun -FSharp.Compiler.Syntax.SynType: Boolean IsHashConstraint -FSharp.Compiler.Syntax.SynType: Boolean IsLongIdent -FSharp.Compiler.Syntax.SynType: Boolean IsLongIdentApp -FSharp.Compiler.Syntax.SynType: Boolean IsMeasureDivide -FSharp.Compiler.Syntax.SynType: Boolean IsMeasurePower -FSharp.Compiler.Syntax.SynType: Boolean IsParen -FSharp.Compiler.Syntax.SynType: Boolean IsStaticConstant -FSharp.Compiler.Syntax.SynType: Boolean IsStaticConstantExpr -FSharp.Compiler.Syntax.SynType: Boolean IsStaticConstantNamed -FSharp.Compiler.Syntax.SynType: Boolean IsTuple -FSharp.Compiler.Syntax.SynType: Boolean IsVar -FSharp.Compiler.Syntax.SynType: Boolean IsWithGlobalConstraints -FSharp.Compiler.Syntax.SynType: Boolean get_IsAnon() -FSharp.Compiler.Syntax.SynType: Boolean get_IsAnonRecd() -FSharp.Compiler.Syntax.SynType: Boolean get_IsApp() -FSharp.Compiler.Syntax.SynType: Boolean get_IsArray() -FSharp.Compiler.Syntax.SynType: Boolean get_IsFun() -FSharp.Compiler.Syntax.SynType: Boolean get_IsHashConstraint() -FSharp.Compiler.Syntax.SynType: Boolean get_IsLongIdent() -FSharp.Compiler.Syntax.SynType: Boolean get_IsLongIdentApp() -FSharp.Compiler.Syntax.SynType: Boolean get_IsMeasureDivide() -FSharp.Compiler.Syntax.SynType: Boolean get_IsMeasurePower() -FSharp.Compiler.Syntax.SynType: Boolean get_IsParen() -FSharp.Compiler.Syntax.SynType: Boolean get_IsStaticConstant() -FSharp.Compiler.Syntax.SynType: Boolean get_IsStaticConstantExpr() -FSharp.Compiler.Syntax.SynType: Boolean get_IsStaticConstantNamed() -FSharp.Compiler.Syntax.SynType: Boolean get_IsTuple() -FSharp.Compiler.Syntax.SynType: Boolean get_IsVar() -FSharp.Compiler.Syntax.SynType: Boolean get_IsWithGlobalConstraints() -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewAnon(FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewAnonRecd(Boolean, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynType]], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewApp(FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Boolean, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewArray(Int32, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewFun(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewHashConstraint(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewLongIdent(FSharp.Compiler.Syntax.LongIdentWithDots) -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewLongIdentApp(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.LongIdentWithDots, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewMeasureDivide(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewMeasurePower(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynRationalConst, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewParen(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewStaticConstant(FSharp.Compiler.Syntax.SynConst, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewStaticConstantExpr(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewStaticConstantNamed(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewTuple(Boolean, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Boolean,FSharp.Compiler.Syntax.SynType]], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewVar(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewWithGlobalConstraints(FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+Anon -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+AnonRecd -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+App -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+Array -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+Fun -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+HashConstraint -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+LongIdent -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+LongIdentApp -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+MeasureDivide -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+MeasurePower -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+Paren -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+StaticConstant -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+StaticConstantExpr -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+StaticConstantNamed -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+Tags -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+Tuple -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+Var -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+WithGlobalConstraints -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynType: Int32 Tag -FSharp.Compiler.Syntax.SynType: Int32 get_Tag() -FSharp.Compiler.Syntax.SynType: System.String ToString() -FSharp.Compiler.Syntax.SynTypeConstraint -FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparDefaultsToType -FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparIsComparable -FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparIsDelegate -FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparIsEnum -FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparIsEquatable -FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparIsReferenceType -FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparIsUnmanaged -FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparIsValueType -FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparSubtypeOfType -FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparSupportsMember -FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparSupportsNull -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparDefaultsToType: FSharp.Compiler.Syntax.SynTypar get_typar() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparDefaultsToType: FSharp.Compiler.Syntax.SynTypar typar -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparDefaultsToType: FSharp.Compiler.Syntax.SynType get_typeName() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparDefaultsToType: FSharp.Compiler.Syntax.SynType typeName -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparDefaultsToType: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparDefaultsToType: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsComparable: FSharp.Compiler.Syntax.SynTypar get_typar() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsComparable: FSharp.Compiler.Syntax.SynTypar typar -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsComparable: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsComparable: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsDelegate: FSharp.Compiler.Syntax.SynTypar get_typar() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsDelegate: FSharp.Compiler.Syntax.SynTypar typar -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsDelegate: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsDelegate: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsDelegate: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] get_typeArgs() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsDelegate: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] typeArgs -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEnum: FSharp.Compiler.Syntax.SynTypar get_typar() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEnum: FSharp.Compiler.Syntax.SynTypar typar -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEnum: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEnum: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEnum: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] get_typeArgs() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEnum: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] typeArgs -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEquatable: FSharp.Compiler.Syntax.SynTypar get_typar() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEquatable: FSharp.Compiler.Syntax.SynTypar typar -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEquatable: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEquatable: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsReferenceType: FSharp.Compiler.Syntax.SynTypar get_typar() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsReferenceType: FSharp.Compiler.Syntax.SynTypar typar -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsReferenceType: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsReferenceType: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsUnmanaged: FSharp.Compiler.Syntax.SynTypar get_typar() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsUnmanaged: FSharp.Compiler.Syntax.SynTypar typar -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsUnmanaged: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsUnmanaged: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsValueType: FSharp.Compiler.Syntax.SynTypar get_typar() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsValueType: FSharp.Compiler.Syntax.SynTypar typar -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsValueType: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsValueType: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSubtypeOfType: FSharp.Compiler.Syntax.SynTypar get_typar() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSubtypeOfType: FSharp.Compiler.Syntax.SynTypar typar -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSubtypeOfType: FSharp.Compiler.Syntax.SynType get_typeName() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSubtypeOfType: FSharp.Compiler.Syntax.SynType typeName -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSubtypeOfType: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSubtypeOfType: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsMember: FSharp.Compiler.Syntax.SynMemberSig get_memberSig() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsMember: FSharp.Compiler.Syntax.SynMemberSig memberSig -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsMember: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsMember: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsMember: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] get_typars() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsMember: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] typars -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsNull: FSharp.Compiler.Syntax.SynTypar get_typar() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsNull: FSharp.Compiler.Syntax.SynTypar typar -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsNull: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsNull: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparDefaultsToType -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparIsComparable -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparIsDelegate -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparIsEnum -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparIsEquatable -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparIsReferenceType -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparIsUnmanaged -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparIsValueType -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparSubtypeOfType -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparSupportsMember -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparSupportsNull -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparDefaultsToType() -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparIsComparable() -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparIsDelegate() -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparIsEnum() -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparIsEquatable() -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparIsReferenceType() -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparIsUnmanaged() -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparIsValueType() -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparSubtypeOfType() -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparSupportsMember() -FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparSupportsNull() -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparDefaultsToType(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparIsComparable(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparIsDelegate(FSharp.Compiler.Syntax.SynTypar, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparIsEnum(FSharp.Compiler.Syntax.SynTypar, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparIsEquatable(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparIsReferenceType(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparIsUnmanaged(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparIsValueType(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparSubtypeOfType(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparSupportsMember(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType], FSharp.Compiler.Syntax.SynMemberSig, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparSupportsNull(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+Tags -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparDefaultsToType -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsComparable -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsDelegate -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEnum -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEquatable -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsReferenceType -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsUnmanaged -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsValueType -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSubtypeOfType -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsMember -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsNull -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynTypeConstraint: Int32 Tag -FSharp.Compiler.Syntax.SynTypeConstraint: Int32 get_Tag() -FSharp.Compiler.Syntax.SynTypeConstraint: System.String ToString() -FSharp.Compiler.Syntax.SynTypeDefn -FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Syntax.SynComponentInfo get_typeInfo() -FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Syntax.SynComponentInfo typeInfo -FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Syntax.SynTypeDefn NewSynTypeDefn(FSharp.Compiler.Syntax.SynComponentInfo, FSharp.Compiler.Syntax.SynTypeDefnRepr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynMemberDefn], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Syntax.SynTypeDefnRepr get_typeRepr() -FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Syntax.SynTypeDefnRepr typeRepr -FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeDefn: Int32 Tag -FSharp.Compiler.Syntax.SynTypeDefn: Int32 get_Tag() -FSharp.Compiler.Syntax.SynTypeDefn: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn] get_members() -FSharp.Compiler.Syntax.SynTypeDefn: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn] members -FSharp.Compiler.Syntax.SynTypeDefn: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynMemberDefn] get_implicitConstructor() -FSharp.Compiler.Syntax.SynTypeDefn: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynMemberDefn] implicitConstructor -FSharp.Compiler.Syntax.SynTypeDefn: System.String ToString() -FSharp.Compiler.Syntax.SynTypeDefnKind -FSharp.Compiler.Syntax.SynTypeDefnKind+Delegate: FSharp.Compiler.Syntax.SynType get_signature() -FSharp.Compiler.Syntax.SynTypeDefnKind+Delegate: FSharp.Compiler.Syntax.SynType signature -FSharp.Compiler.Syntax.SynTypeDefnKind+Delegate: FSharp.Compiler.Syntax.SynValInfo get_signatureInfo() -FSharp.Compiler.Syntax.SynTypeDefnKind+Delegate: FSharp.Compiler.Syntax.SynValInfo signatureInfo -FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 Abbrev -FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 Augmentation -FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 Class -FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 Delegate -FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 IL -FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 Interface -FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 Opaque -FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 Record -FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 Struct -FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 Union -FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 Unspecified -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsAbbrev -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsAugmentation -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsClass -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsDelegate -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsIL -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsInterface -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsOpaque -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsRecord -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsStruct -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsUnion -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsUnspecified -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsAbbrev() -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsAugmentation() -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsClass() -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsDelegate() -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsIL() -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsInterface() -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsOpaque() -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsRecord() -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsStruct() -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsUnion() -FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsUnspecified() -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind Abbrev -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind Augmentation -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind Class -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind IL -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind Interface -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind NewDelegate(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynValInfo) -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind Opaque -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind Record -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind Struct -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind Union -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind Unspecified -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind get_Abbrev() -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind get_Augmentation() -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind get_Class() -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind get_IL() -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind get_Interface() -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind get_Opaque() -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind get_Record() -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind get_Struct() -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind get_Union() -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind get_Unspecified() -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind+Delegate -FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind+Tags -FSharp.Compiler.Syntax.SynTypeDefnKind: Int32 Tag -FSharp.Compiler.Syntax.SynTypeDefnKind: Int32 get_Tag() -FSharp.Compiler.Syntax.SynTypeDefnKind: System.String ToString() -FSharp.Compiler.Syntax.SynTypeDefnRepr -FSharp.Compiler.Syntax.SynTypeDefnRepr+Exception: FSharp.Compiler.Syntax.SynExceptionDefnRepr exnRepr -FSharp.Compiler.Syntax.SynTypeDefnRepr+Exception: FSharp.Compiler.Syntax.SynExceptionDefnRepr get_exnRepr() -FSharp.Compiler.Syntax.SynTypeDefnRepr+ObjectModel: FSharp.Compiler.Syntax.SynTypeDefnKind get_kind() -FSharp.Compiler.Syntax.SynTypeDefnRepr+ObjectModel: FSharp.Compiler.Syntax.SynTypeDefnKind kind -FSharp.Compiler.Syntax.SynTypeDefnRepr+ObjectModel: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeDefnRepr+ObjectModel: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeDefnRepr+ObjectModel: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn] get_members() -FSharp.Compiler.Syntax.SynTypeDefnRepr+ObjectModel: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn] members -FSharp.Compiler.Syntax.SynTypeDefnRepr+Simple: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr get_simpleRepr() -FSharp.Compiler.Syntax.SynTypeDefnRepr+Simple: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr simpleRepr -FSharp.Compiler.Syntax.SynTypeDefnRepr+Simple: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeDefnRepr+Simple: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeDefnRepr+Tags: Int32 Exception -FSharp.Compiler.Syntax.SynTypeDefnRepr+Tags: Int32 ObjectModel -FSharp.Compiler.Syntax.SynTypeDefnRepr+Tags: Int32 Simple -FSharp.Compiler.Syntax.SynTypeDefnRepr: Boolean IsException -FSharp.Compiler.Syntax.SynTypeDefnRepr: Boolean IsObjectModel -FSharp.Compiler.Syntax.SynTypeDefnRepr: Boolean IsSimple -FSharp.Compiler.Syntax.SynTypeDefnRepr: Boolean get_IsException() -FSharp.Compiler.Syntax.SynTypeDefnRepr: Boolean get_IsObjectModel() -FSharp.Compiler.Syntax.SynTypeDefnRepr: Boolean get_IsSimple() -FSharp.Compiler.Syntax.SynTypeDefnRepr: FSharp.Compiler.Syntax.SynTypeDefnRepr NewException(FSharp.Compiler.Syntax.SynExceptionDefnRepr) -FSharp.Compiler.Syntax.SynTypeDefnRepr: FSharp.Compiler.Syntax.SynTypeDefnRepr NewObjectModel(FSharp.Compiler.Syntax.SynTypeDefnKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeDefnRepr: FSharp.Compiler.Syntax.SynTypeDefnRepr NewSimple(FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeDefnRepr: FSharp.Compiler.Syntax.SynTypeDefnRepr+Exception -FSharp.Compiler.Syntax.SynTypeDefnRepr: FSharp.Compiler.Syntax.SynTypeDefnRepr+ObjectModel -FSharp.Compiler.Syntax.SynTypeDefnRepr: FSharp.Compiler.Syntax.SynTypeDefnRepr+Simple -FSharp.Compiler.Syntax.SynTypeDefnRepr: FSharp.Compiler.Syntax.SynTypeDefnRepr+Tags -FSharp.Compiler.Syntax.SynTypeDefnRepr: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynTypeDefnRepr: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynTypeDefnRepr: Int32 Tag -FSharp.Compiler.Syntax.SynTypeDefnRepr: Int32 get_Tag() -FSharp.Compiler.Syntax.SynTypeDefnRepr: System.String ToString() -FSharp.Compiler.Syntax.SynTypeDefnSig -FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynComponentInfo get_typeInfo() -FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynComponentInfo typeInfo -FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynTypeDefnSig NewSynTypeDefnSig(FSharp.Compiler.Syntax.SynComponentInfo, FSharp.Compiler.Syntax.SynTypeDefnSigRepr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynTypeDefnSigRepr get_typeRepr() -FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynTypeDefnSigRepr typeRepr -FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeDefnSig: Int32 Tag -FSharp.Compiler.Syntax.SynTypeDefnSig: Int32 get_Tag() -FSharp.Compiler.Syntax.SynTypeDefnSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig] get_members() -FSharp.Compiler.Syntax.SynTypeDefnSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig] members -FSharp.Compiler.Syntax.SynTypeDefnSig: System.String ToString() -FSharp.Compiler.Syntax.SynTypeDefnSigRepr -FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Exception: FSharp.Compiler.Syntax.SynExceptionDefnRepr get_repr() -FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Exception: FSharp.Compiler.Syntax.SynExceptionDefnRepr repr -FSharp.Compiler.Syntax.SynTypeDefnSigRepr+ObjectModel: FSharp.Compiler.Syntax.SynTypeDefnKind get_kind() -FSharp.Compiler.Syntax.SynTypeDefnSigRepr+ObjectModel: FSharp.Compiler.Syntax.SynTypeDefnKind kind -FSharp.Compiler.Syntax.SynTypeDefnSigRepr+ObjectModel: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeDefnSigRepr+ObjectModel: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeDefnSigRepr+ObjectModel: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig] get_memberSigs() -FSharp.Compiler.Syntax.SynTypeDefnSigRepr+ObjectModel: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig] memberSigs -FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Simple: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr get_repr() -FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Simple: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr repr -FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Simple: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Simple: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Tags: Int32 Exception -FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Tags: Int32 ObjectModel -FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Tags: Int32 Simple -FSharp.Compiler.Syntax.SynTypeDefnSigRepr: Boolean IsException -FSharp.Compiler.Syntax.SynTypeDefnSigRepr: Boolean IsObjectModel -FSharp.Compiler.Syntax.SynTypeDefnSigRepr: Boolean IsSimple -FSharp.Compiler.Syntax.SynTypeDefnSigRepr: Boolean get_IsException() -FSharp.Compiler.Syntax.SynTypeDefnSigRepr: Boolean get_IsObjectModel() -FSharp.Compiler.Syntax.SynTypeDefnSigRepr: Boolean get_IsSimple() -FSharp.Compiler.Syntax.SynTypeDefnSigRepr: FSharp.Compiler.Syntax.SynTypeDefnSigRepr NewException(FSharp.Compiler.Syntax.SynExceptionDefnRepr) -FSharp.Compiler.Syntax.SynTypeDefnSigRepr: FSharp.Compiler.Syntax.SynTypeDefnSigRepr NewObjectModel(FSharp.Compiler.Syntax.SynTypeDefnKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeDefnSigRepr: FSharp.Compiler.Syntax.SynTypeDefnSigRepr NewSimple(FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeDefnSigRepr: FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Exception -FSharp.Compiler.Syntax.SynTypeDefnSigRepr: FSharp.Compiler.Syntax.SynTypeDefnSigRepr+ObjectModel -FSharp.Compiler.Syntax.SynTypeDefnSigRepr: FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Simple -FSharp.Compiler.Syntax.SynTypeDefnSigRepr: FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Tags -FSharp.Compiler.Syntax.SynTypeDefnSigRepr: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynTypeDefnSigRepr: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynTypeDefnSigRepr: Int32 Tag -FSharp.Compiler.Syntax.SynTypeDefnSigRepr: Int32 get_Tag() -FSharp.Compiler.Syntax.SynTypeDefnSigRepr: System.String ToString() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Enum: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Enum: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Enum: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynEnumCase] cases -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Enum: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynEnumCase] get_cases() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Exception: FSharp.Compiler.Syntax.SynExceptionDefnRepr exnRepr -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Exception: FSharp.Compiler.Syntax.SynExceptionDefnRepr get_exnRepr() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Boolean get_isConcrete() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Boolean get_isIncrClass() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Boolean isConcrete -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Boolean isIncrClass -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: FSharp.Compiler.Syntax.SynTypeDefnKind get_kind() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: FSharp.Compiler.Syntax.SynTypeDefnKind kind -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField] fields -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField] get_fields() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.SynValSig,FSharp.Compiler.Syntax.SynMemberFlags]] get_slotsigs() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.SynValSig,FSharp.Compiler.Syntax.SynMemberFlags]] slotsigs -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident]]] get_inherits() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident]]] inherits -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynSimplePats] get_implicitCtorSynPats() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynSimplePats] implicitCtorSynPats -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: System.Object get_ilType() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: System.Object ilType -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+None: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+None: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField] get_recordFields() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField] recordFields -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Tags: Int32 Enum -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Tags: Int32 Exception -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Tags: Int32 General -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Tags: Int32 LibraryOnlyILAssembly -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Tags: Int32 None -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Tags: Int32 Record -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Tags: Int32 TypeAbbrev -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Tags: Int32 Union -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+TypeAbbrev: FSharp.Compiler.Syntax.ParserDetail detail -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+TypeAbbrev: FSharp.Compiler.Syntax.ParserDetail get_detail() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+TypeAbbrev: FSharp.Compiler.Syntax.SynType get_rhsType() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+TypeAbbrev: FSharp.Compiler.Syntax.SynType rhsType -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+TypeAbbrev: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+TypeAbbrev: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Union: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Union: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Union: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynUnionCase] get_unionCases() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Union: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynUnionCase] unionCases -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Union: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Union: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean IsEnum -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean IsException -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean IsGeneral -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean IsNone -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean IsRecord -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean IsTypeAbbrev -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean IsUnion -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean get_IsEnum() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean get_IsException() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean get_IsGeneral() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean get_IsNone() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean get_IsRecord() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean get_IsTypeAbbrev() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean get_IsUnion() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewEnum(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynEnumCase], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewException(FSharp.Compiler.Syntax.SynExceptionDefnRepr) -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewGeneral(FSharp.Compiler.Syntax.SynTypeDefnKind, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident]]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.SynValSig,FSharp.Compiler.Syntax.SynMemberFlags]], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField], Boolean, Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynSimplePats], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewLibraryOnlyILAssembly(System.Object, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewNone(FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewRecord(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewTypeAbbrev(FSharp.Compiler.Syntax.ParserDetail, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewUnion(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynUnionCase], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Enum -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Exception -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+LibraryOnlyILAssembly -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+None -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Tags -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+TypeAbbrev -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Union -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Int32 Tag -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Int32 get_Tag() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: System.String ToString() -FSharp.Compiler.Syntax.SynUnionCase -FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Syntax.Ident get_ident() -FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Syntax.Ident ident -FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Syntax.SynUnionCase NewSynUnionCase(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Syntax.Ident, FSharp.Compiler.Syntax.SynUnionCaseKind, FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Syntax.SynUnionCaseKind caseType -FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Syntax.SynUnionCaseKind get_caseType() -FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() -FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Xml.PreXmlDoc xmlDoc -FSharp.Compiler.Syntax.SynUnionCase: Int32 Tag -FSharp.Compiler.Syntax.SynUnionCase: Int32 get_Tag() -FSharp.Compiler.Syntax.SynUnionCase: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes -FSharp.Compiler.Syntax.SynUnionCase: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() -FSharp.Compiler.Syntax.SynUnionCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility -FSharp.Compiler.Syntax.SynUnionCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() -FSharp.Compiler.Syntax.SynUnionCase: System.String ToString() -FSharp.Compiler.Syntax.SynUnionCaseKind -FSharp.Compiler.Syntax.SynUnionCaseKind+Fields: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField] cases -FSharp.Compiler.Syntax.SynUnionCaseKind+Fields: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField] get_cases() -FSharp.Compiler.Syntax.SynUnionCaseKind+FullType: FSharp.Compiler.Syntax.SynType fullType -FSharp.Compiler.Syntax.SynUnionCaseKind+FullType: FSharp.Compiler.Syntax.SynType get_fullType() -FSharp.Compiler.Syntax.SynUnionCaseKind+FullType: FSharp.Compiler.Syntax.SynValInfo fullTypeInfo -FSharp.Compiler.Syntax.SynUnionCaseKind+FullType: FSharp.Compiler.Syntax.SynValInfo get_fullTypeInfo() -FSharp.Compiler.Syntax.SynUnionCaseKind+Tags: Int32 Fields -FSharp.Compiler.Syntax.SynUnionCaseKind+Tags: Int32 FullType -FSharp.Compiler.Syntax.SynUnionCaseKind: Boolean IsFields -FSharp.Compiler.Syntax.SynUnionCaseKind: Boolean IsFullType -FSharp.Compiler.Syntax.SynUnionCaseKind: Boolean get_IsFields() -FSharp.Compiler.Syntax.SynUnionCaseKind: Boolean get_IsFullType() -FSharp.Compiler.Syntax.SynUnionCaseKind: FSharp.Compiler.Syntax.SynUnionCaseKind NewFields(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField]) -FSharp.Compiler.Syntax.SynUnionCaseKind: FSharp.Compiler.Syntax.SynUnionCaseKind NewFullType(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynValInfo) -FSharp.Compiler.Syntax.SynUnionCaseKind: FSharp.Compiler.Syntax.SynUnionCaseKind+Fields -FSharp.Compiler.Syntax.SynUnionCaseKind: FSharp.Compiler.Syntax.SynUnionCaseKind+FullType -FSharp.Compiler.Syntax.SynUnionCaseKind: FSharp.Compiler.Syntax.SynUnionCaseKind+Tags -FSharp.Compiler.Syntax.SynUnionCaseKind: Int32 Tag -FSharp.Compiler.Syntax.SynUnionCaseKind: Int32 get_Tag() -FSharp.Compiler.Syntax.SynUnionCaseKind: System.String ToString() -FSharp.Compiler.Syntax.SynValData -FSharp.Compiler.Syntax.SynValData: FSharp.Compiler.Syntax.SynValData NewSynValData(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynMemberFlags], FSharp.Compiler.Syntax.SynValInfo, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident]) -FSharp.Compiler.Syntax.SynValData: FSharp.Compiler.Syntax.SynValInfo SynValInfo -FSharp.Compiler.Syntax.SynValData: FSharp.Compiler.Syntax.SynValInfo get_SynValInfo() -FSharp.Compiler.Syntax.SynValData: FSharp.Compiler.Syntax.SynValInfo get_valInfo() -FSharp.Compiler.Syntax.SynValData: FSharp.Compiler.Syntax.SynValInfo valInfo -FSharp.Compiler.Syntax.SynValData: Int32 Tag -FSharp.Compiler.Syntax.SynValData: Int32 get_Tag() -FSharp.Compiler.Syntax.SynValData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_thisIdOpt() -FSharp.Compiler.Syntax.SynValData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] thisIdOpt -FSharp.Compiler.Syntax.SynValData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynMemberFlags] get_memberFlags() -FSharp.Compiler.Syntax.SynValData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynMemberFlags] memberFlags -FSharp.Compiler.Syntax.SynValData: System.String ToString() -FSharp.Compiler.Syntax.SynValInfo -FSharp.Compiler.Syntax.SynValInfo: FSharp.Compiler.Syntax.SynArgInfo get_returnInfo() -FSharp.Compiler.Syntax.SynValInfo: FSharp.Compiler.Syntax.SynArgInfo returnInfo -FSharp.Compiler.Syntax.SynValInfo: FSharp.Compiler.Syntax.SynValInfo NewSynValInfo(Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynArgInfo]], FSharp.Compiler.Syntax.SynArgInfo) -FSharp.Compiler.Syntax.SynValInfo: Int32 Tag -FSharp.Compiler.Syntax.SynValInfo: Int32 get_Tag() -FSharp.Compiler.Syntax.SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynArgInfo]] CurriedArgInfos -FSharp.Compiler.Syntax.SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynArgInfo]] curriedArgInfos -FSharp.Compiler.Syntax.SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynArgInfo]] get_CurriedArgInfos() -FSharp.Compiler.Syntax.SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynArgInfo]] get_curriedArgInfos() -FSharp.Compiler.Syntax.SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[System.String] ArgNames -FSharp.Compiler.Syntax.SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_ArgNames() -FSharp.Compiler.Syntax.SynValInfo: System.String ToString() -FSharp.Compiler.Syntax.SynValSig -FSharp.Compiler.Syntax.SynValSig: Boolean get_isInline() -FSharp.Compiler.Syntax.SynValSig: Boolean get_isMutable() -FSharp.Compiler.Syntax.SynValSig: Boolean isInline -FSharp.Compiler.Syntax.SynValSig: Boolean isMutable -FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.Ident get_ident() -FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.Ident ident -FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynType SynType -FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynType get_SynType() -FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynType get_synType() -FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynType synType -FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynValInfo SynInfo -FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynValInfo arity -FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynValInfo get_SynInfo() -FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynValInfo get_arity() -FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynValSig NewSynValSig(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Syntax.Ident, FSharp.Compiler.Syntax.SynValTyparDecls, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynValInfo, Boolean, Boolean, FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynValTyparDecls explicitValDecls -FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynValTyparDecls get_explicitValDecls() -FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Text.Range RangeOfId -FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Text.Range get_RangeOfId() -FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Text.Range get_range() -FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() -FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Xml.PreXmlDoc xmlDoc -FSharp.Compiler.Syntax.SynValSig: Int32 Tag -FSharp.Compiler.Syntax.SynValSig: Int32 get_Tag() -FSharp.Compiler.Syntax.SynValSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes -FSharp.Compiler.Syntax.SynValSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() -FSharp.Compiler.Syntax.SynValSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility -FSharp.Compiler.Syntax.SynValSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() -FSharp.Compiler.Syntax.SynValSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr] get_synExpr() -FSharp.Compiler.Syntax.SynValSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr] synExpr -FSharp.Compiler.Syntax.SynValSig: System.String ToString() -FSharp.Compiler.Syntax.SynValTyparDecls -FSharp.Compiler.Syntax.SynValTyparDecls: Boolean canInfer -FSharp.Compiler.Syntax.SynValTyparDecls: Boolean get_canInfer() -FSharp.Compiler.Syntax.SynValTyparDecls: FSharp.Compiler.Syntax.SynValTyparDecls NewSynValTyparDecls(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynTyparDecls], Boolean) -FSharp.Compiler.Syntax.SynValTyparDecls: Int32 Tag -FSharp.Compiler.Syntax.SynValTyparDecls: Int32 get_Tag() -FSharp.Compiler.Syntax.SynValTyparDecls: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynTyparDecls] get_typars() -FSharp.Compiler.Syntax.SynValTyparDecls: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynTyparDecls] typars -FSharp.Compiler.Syntax.SynValTyparDecls: System.String ToString() -FSharp.Compiler.Syntax.SyntaxNode -FSharp.Compiler.Syntax.SyntaxNode+SynBinding: FSharp.Compiler.Syntax.SynBinding Item -FSharp.Compiler.Syntax.SyntaxNode+SynBinding: FSharp.Compiler.Syntax.SynBinding get_Item() -FSharp.Compiler.Syntax.SyntaxNode+SynExpr: FSharp.Compiler.Syntax.SynExpr Item -FSharp.Compiler.Syntax.SyntaxNode+SynExpr: FSharp.Compiler.Syntax.SynExpr get_Item() -FSharp.Compiler.Syntax.SyntaxNode+SynMatchClause: FSharp.Compiler.Syntax.SynMatchClause Item -FSharp.Compiler.Syntax.SyntaxNode+SynMatchClause: FSharp.Compiler.Syntax.SynMatchClause get_Item() -FSharp.Compiler.Syntax.SyntaxNode+SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn Item -FSharp.Compiler.Syntax.SyntaxNode+SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn get_Item() -FSharp.Compiler.Syntax.SyntaxNode+SynModule: FSharp.Compiler.Syntax.SynModuleDecl Item -FSharp.Compiler.Syntax.SyntaxNode+SynModule: FSharp.Compiler.Syntax.SynModuleDecl get_Item() -FSharp.Compiler.Syntax.SyntaxNode+SynModuleOrNamespace: FSharp.Compiler.Syntax.SynModuleOrNamespace Item -FSharp.Compiler.Syntax.SyntaxNode+SynModuleOrNamespace: FSharp.Compiler.Syntax.SynModuleOrNamespace get_Item() -FSharp.Compiler.Syntax.SyntaxNode+SynPat: FSharp.Compiler.Syntax.SynPat Item -FSharp.Compiler.Syntax.SyntaxNode+SynPat: FSharp.Compiler.Syntax.SynPat get_Item() -FSharp.Compiler.Syntax.SyntaxNode+SynType: FSharp.Compiler.Syntax.SynType Item -FSharp.Compiler.Syntax.SyntaxNode+SynType: FSharp.Compiler.Syntax.SynType get_Item() -FSharp.Compiler.Syntax.SyntaxNode+SynTypeDefn: FSharp.Compiler.Syntax.SynTypeDefn Item -FSharp.Compiler.Syntax.SyntaxNode+SynTypeDefn: FSharp.Compiler.Syntax.SynTypeDefn get_Item() -FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynBinding -FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynExpr -FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynMatchClause -FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynMemberDefn -FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynModule -FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynModuleOrNamespace -FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynPat -FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynType -FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynTypeDefn -FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynBinding -FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynExpr -FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynMatchClause -FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynMemberDefn -FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynModule -FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynModuleOrNamespace -FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynPat -FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynType -FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynTypeDefn -FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynBinding() -FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynExpr() -FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynMatchClause() -FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynMemberDefn() -FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynModule() -FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynModuleOrNamespace() -FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynPat() -FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynType() -FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynTypeDefn() -FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynBinding(FSharp.Compiler.Syntax.SynBinding) -FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynExpr(FSharp.Compiler.Syntax.SynExpr) -FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynMatchClause(FSharp.Compiler.Syntax.SynMatchClause) -FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynMemberDefn(FSharp.Compiler.Syntax.SynMemberDefn) -FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynModule(FSharp.Compiler.Syntax.SynModuleDecl) -FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynModuleOrNamespace(FSharp.Compiler.Syntax.SynModuleOrNamespace) -FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynPat(FSharp.Compiler.Syntax.SynPat) -FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynType(FSharp.Compiler.Syntax.SynType) -FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynTypeDefn(FSharp.Compiler.Syntax.SynTypeDefn) -FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynBinding -FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynExpr -FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynMatchClause -FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynMemberDefn -FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynModule -FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynModuleOrNamespace -FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynPat -FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynType -FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynTypeDefn -FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+Tags -FSharp.Compiler.Syntax.SyntaxNode: Int32 Tag -FSharp.Compiler.Syntax.SyntaxNode: Int32 get_Tag() -FSharp.Compiler.Syntax.SyntaxNode: System.String ToString() -FSharp.Compiler.Syntax.SyntaxTraversal -FSharp.Compiler.Syntax.SyntaxTraversal: Microsoft.FSharp.Core.FSharpOption`1[T] Traverse[T](FSharp.Compiler.Text.Position, FSharp.Compiler.Syntax.ParsedInput, FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]) -FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T] -FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitBinding(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynBinding,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynBinding) -FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitComponentInfo(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], FSharp.Compiler.Syntax.SynComponentInfo) -FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitExpr(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynExpr,Microsoft.FSharp.Core.FSharpOption`1[T]], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynExpr,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynExpr) -FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitHashDirective(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], FSharp.Compiler.Syntax.ParsedHashDirective, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitImplicitInherit(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynExpr,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitInheritSynMemberDefn(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], FSharp.Compiler.Syntax.SynComponentInfo, FSharp.Compiler.Syntax.SynTypeDefnKind, FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitInterfaceSynMemberDefnType(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], FSharp.Compiler.Syntax.SynType) -FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitLetOrUse(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Boolean, Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynBinding,Microsoft.FSharp.Core.FSharpOption`1[T]], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding], FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitMatchClause(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynMatchClause,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynMatchClause) -FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitModuleDecl(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynModuleDecl,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynModuleDecl) -FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitModuleOrNamespace(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], FSharp.Compiler.Syntax.SynModuleOrNamespace) -FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitPat(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynPat,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynPat) -FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitRecordField(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.LongIdentWithDots]) -FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitSimplePats(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynSimplePat]) -FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitType(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynType,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynType) -FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitTypeAbbrev(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Void .ctor() -FSharp.Compiler.Syntax.TyparStaticReq -FSharp.Compiler.Syntax.TyparStaticReq+Tags: Int32 HeadType -FSharp.Compiler.Syntax.TyparStaticReq+Tags: Int32 None -FSharp.Compiler.Syntax.TyparStaticReq: Boolean Equals(FSharp.Compiler.Syntax.TyparStaticReq) -FSharp.Compiler.Syntax.TyparStaticReq: Boolean Equals(System.Object) -FSharp.Compiler.Syntax.TyparStaticReq: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.TyparStaticReq: Boolean IsHeadType -FSharp.Compiler.Syntax.TyparStaticReq: Boolean IsNone -FSharp.Compiler.Syntax.TyparStaticReq: Boolean get_IsHeadType() -FSharp.Compiler.Syntax.TyparStaticReq: Boolean get_IsNone() -FSharp.Compiler.Syntax.TyparStaticReq: FSharp.Compiler.Syntax.TyparStaticReq HeadType -FSharp.Compiler.Syntax.TyparStaticReq: FSharp.Compiler.Syntax.TyparStaticReq None -FSharp.Compiler.Syntax.TyparStaticReq: FSharp.Compiler.Syntax.TyparStaticReq get_HeadType() -FSharp.Compiler.Syntax.TyparStaticReq: FSharp.Compiler.Syntax.TyparStaticReq get_None() -FSharp.Compiler.Syntax.TyparStaticReq: FSharp.Compiler.Syntax.TyparStaticReq+Tags -FSharp.Compiler.Syntax.TyparStaticReq: Int32 CompareTo(FSharp.Compiler.Syntax.TyparStaticReq) -FSharp.Compiler.Syntax.TyparStaticReq: Int32 CompareTo(System.Object) -FSharp.Compiler.Syntax.TyparStaticReq: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.Syntax.TyparStaticReq: Int32 GetHashCode() -FSharp.Compiler.Syntax.TyparStaticReq: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Syntax.TyparStaticReq: Int32 Tag -FSharp.Compiler.Syntax.TyparStaticReq: Int32 get_Tag() -FSharp.Compiler.Syntax.TyparStaticReq: System.String ToString() -FSharp.Compiler.Text.ISourceText +FSharp.Compiler.Layout+LayoutRenderer`2[a,b]: a Finish(b) +FSharp.Compiler.Layout+LayoutRenderer`2[a,b]: b AddBreak(b, Int32) +FSharp.Compiler.Layout+LayoutRenderer`2[a,b]: b AddTag(b, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]], Boolean) +FSharp.Compiler.Layout+LayoutRenderer`2[a,b]: b AddText(b, Internal.Utilities.StructuredFormat.TaggedText) +FSharp.Compiler.Layout+LayoutRenderer`2[a,b]: b Start() +FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout colon +FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout get_colon() +FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout get_keywordTypedefof() +FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout get_keywordTypeof() +FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout get_leftBracketAngle() +FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout get_leftBracketBar() +FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout get_leftParen() +FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout get_questionMark() +FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout keywordTypedefof +FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout keywordTypeof +FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout leftBracketAngle +FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout leftBracketBar +FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout leftParen +FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout questionMark +FSharp.Compiler.Layout+NavigableTaggedText: Void .ctor(Internal.Utilities.StructuredFormat.TaggedText, range) +FSharp.Compiler.Layout+NavigableTaggedText: range Range +FSharp.Compiler.Layout+NavigableTaggedText: range get_Range() +FSharp.Compiler.Layout+NoResult: Boolean Equals(NoResult) +FSharp.Compiler.Layout+NoResult: Boolean Equals(System.Object) +FSharp.Compiler.Layout+NoResult: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Layout+NoResult: Int32 CompareTo(NoResult) +FSharp.Compiler.Layout+NoResult: Int32 CompareTo(System.Object) +FSharp.Compiler.Layout+NoResult: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.Layout+NoResult: Int32 GetHashCode() +FSharp.Compiler.Layout+NoResult: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Layout+NoResult: Int32 Tag +FSharp.Compiler.Layout+NoResult: Int32 get_Tag() +FSharp.Compiler.Layout+NoResult: NoResult NoResult +FSharp.Compiler.Layout+NoResult: NoResult get_NoResult() +FSharp.Compiler.Layout+NoResult: System.String ToString() +FSharp.Compiler.Layout+NoState: Boolean Equals(NoState) +FSharp.Compiler.Layout+NoState: Boolean Equals(System.Object) +FSharp.Compiler.Layout+NoState: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Layout+NoState: Int32 CompareTo(NoState) +FSharp.Compiler.Layout+NoState: Int32 CompareTo(System.Object) +FSharp.Compiler.Layout+NoState: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.Layout+NoState: Int32 GetHashCode() +FSharp.Compiler.Layout+NoState: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Layout+NoState: Int32 Tag +FSharp.Compiler.Layout+NoState: Int32 get_Tag() +FSharp.Compiler.Layout+NoState: NoState NoState +FSharp.Compiler.Layout+NoState: NoState get_NoState() +FSharp.Compiler.Layout+NoState: System.String ToString() +FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout colon +FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout comma +FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout get_colon() +FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout get_comma() +FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout get_rightAngle() +FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout get_rightBracket() +FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout get_rightBracketAngle() +FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout get_rightBracketBar() +FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout get_rightParen() +FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout rightAngle +FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout rightBracket +FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout rightBracketAngle +FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout rightBracketBar +FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout rightParen +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout colon +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout comma +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout dot +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_colon() +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_comma() +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_dot() +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_leftAngle() +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_leftBracket() +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_leftParen() +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_lineBreak() +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_questionMark() +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_rightParen() +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_space() +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_star() +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout leftAngle +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout leftBracket +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout leftParen +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout lineBreak +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout questionMark +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout rightParen +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout space +FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout star +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText arrow +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText colon +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText comma +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText dot +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText equals +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_arrow() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_colon() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_comma() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_dot() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_equals() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_keywordFalse() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_keywordTrue() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_leftAngle() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_leftBrace() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_leftBraceBar() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_leftBracket() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_leftParen() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_lineBreak() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_minus() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_questionMark() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_rightAngle() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_rightBrace() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_rightBraceBar() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_rightBracket() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_rightParen() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_semicolon() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_space() +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText keywordFalse +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText keywordTrue +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText leftAngle +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText leftBrace +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText leftBraceBar +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText leftBracket +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText leftParen +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText lineBreak +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText minus +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText questionMark +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText rightAngle +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText rightBrace +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText rightBraceBar +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText rightBracket +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText rightParen +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText semicolon +FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText space +FSharp.Compiler.Layout+TaggedTextOps: FSharp.Compiler.Layout+TaggedTextOps+Literals +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagActivePatternCase() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagActivePatternResult() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagAlias() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagClass() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagDelegate() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagEnum() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagEvent() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagField() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagInterface() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagKeyword() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagLineBreak() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagLocal() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagMember() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagMethod() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagModule() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagModuleBinding() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagFunction() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagNamespace() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagNumericLiteral() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagOperator() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagParameter() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagProperty() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagPunctuation() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagRecord() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagRecordField() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagSpace() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagStringLiteral() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagStruct() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagText() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagTypeParameter() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagUnion() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagUnionCase() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagUnknownEntity() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagUnknownType() +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagActivePatternCase +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagActivePatternResult +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagAlias +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagClass +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagDelegate +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagEnum +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagEvent +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagField +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagInterface +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagKeyword +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagLineBreak +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagLocal +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagMember +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagMethod +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagModule +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagModuleBinding +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagFunction +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagNamespace +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagNumericLiteral +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagOperator +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagParameter +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagProperty +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagPunctuation +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagRecord +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagRecordField +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagSpace +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagStringLiteral +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagStruct +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagText +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagTypeParameter +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagUnion +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagUnionCase +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagUnknownEntity +FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagUnknownType +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout arrow +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout bar +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout colon +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout equals +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_arrow() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_bar() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_colon() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_equals() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordAbstract() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordDelegate() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordEnd() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordEnum() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordEvent() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordFalse() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordGet() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordInherit() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordInternal() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordMember() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordNested() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordNew() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordOf() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordOverride() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordPrivate() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordSet() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordStatic() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordStruct() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordTrue() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordType() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordVal() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordWith() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_star() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_structUnit() +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordAbstract +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordDelegate +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordEnd +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordEnum +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordEvent +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordFalse +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordGet +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordInherit +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordInternal +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordMember +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordNested +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordNew +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordOf +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordOverride +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordPrivate +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordSet +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordStatic +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordStruct +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordTrue +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordType +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordVal +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordWith +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout star +FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout structUnit +FSharp.Compiler.Layout: Boolean isEmptyL(Internal.Utilities.StructuredFormat.Layout) +FSharp.Compiler.Layout: FSharp.Compiler.Layout+LayoutRenderer`2[a,b] +FSharp.Compiler.Layout: FSharp.Compiler.Layout+LeftL +FSharp.Compiler.Layout: FSharp.Compiler.Layout+NavigableTaggedText +FSharp.Compiler.Layout: FSharp.Compiler.Layout+NoResult +FSharp.Compiler.Layout: FSharp.Compiler.Layout+NoState +FSharp.Compiler.Layout: FSharp.Compiler.Layout+RightL +FSharp.Compiler.Layout: FSharp.Compiler.Layout+SepL +FSharp.Compiler.Layout: FSharp.Compiler.Layout+TaggedTextOps +FSharp.Compiler.Layout: FSharp.Compiler.Layout+WordL +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout aboveL(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout aboveListL(Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout bracketL(Internal.Utilities.StructuredFormat.Layout) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout commaListL(Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout emptyL +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout get_emptyL() +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout leftL(Internal.Utilities.StructuredFormat.TaggedText) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout listL[a](Microsoft.FSharp.Core.FSharpFunc`2[a,Internal.Utilities.StructuredFormat.Layout], Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout op_AtAt(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout op_AtAtMinus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout op_AtAtMinusMinus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout op_HatHat(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout op_MinusMinus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout op_MinusMinusMinus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout op_MinusMinusMinusMinus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout op_MinusMinusMinusMinusMinus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout op_PlusPlus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout optionL[a](Microsoft.FSharp.Core.FSharpFunc`2[a,Internal.Utilities.StructuredFormat.Layout], Microsoft.FSharp.Core.FSharpOption`1[a]) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout rightL(Internal.Utilities.StructuredFormat.TaggedText) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout semiListL(Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout sepL(Internal.Utilities.StructuredFormat.TaggedText) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout sepListL(Internal.Utilities.StructuredFormat.Layout, Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout spaceListL(Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout tupleL(Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout wordL(Internal.Utilities.StructuredFormat.TaggedText) +FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.TaggedText mkNav(range, Internal.Utilities.StructuredFormat.TaggedText) +FSharp.Compiler.Layout: LayoutRenderer`2 bufferR(System.Text.StringBuilder) +FSharp.Compiler.Layout: LayoutRenderer`2 channelR(System.IO.TextWriter) +FSharp.Compiler.Layout: LayoutRenderer`2 get_stringR() +FSharp.Compiler.Layout: LayoutRenderer`2 stringR +FSharp.Compiler.Layout: LayoutRenderer`2 taggedTextListR(Microsoft.FSharp.Core.FSharpFunc`2[Internal.Utilities.StructuredFormat.TaggedText,Microsoft.FSharp.Core.Unit]) +FSharp.Compiler.Layout: System.String showL(Internal.Utilities.StructuredFormat.Layout) +FSharp.Compiler.Layout: Void bufferL(System.Text.StringBuilder, Internal.Utilities.StructuredFormat.Layout) +FSharp.Compiler.Layout: Void outL(System.IO.TextWriter, Internal.Utilities.StructuredFormat.Layout) +FSharp.Compiler.Layout: b renderL[b,a](LayoutRenderer`2, Internal.Utilities.StructuredFormat.Layout) +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean IsComment +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean IsEndLine +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean IsIfDefSkip +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean IsMLOnly +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean IsSingleLineComment +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean IsString +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean IsStringInComment +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean IsToken +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean get_IsComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean get_IsEndLine() +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean get_IsIfDefSkip() +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean get_IsMLOnly() +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean get_IsSingleLineComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean get_IsString() +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean get_IsStringInComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean get_IsToken() +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Int32 Item3 +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Int32 Tag +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Int32 get_Item3() +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Int32 get_Tag() +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] LexerIfdefStack +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_LexerIfdefStack() +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_ifdef() +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] ifdef +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] LexerInterpStringNesting +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_LexerInterpStringNesting() +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_nesting() +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] nesting +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: System.String ToString() +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: range get_range() +FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: range range +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean IsComment +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean IsEndLine +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean IsIfDefSkip +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean IsMLOnly +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean IsSingleLineComment +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean IsString +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean IsStringInComment +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean IsToken +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean get_IsComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean get_IsEndLine() +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean get_IsIfDefSkip() +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean get_IsMLOnly() +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean get_IsSingleLineComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean get_IsString() +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean get_IsStringInComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean get_IsToken() +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Int32 Tag +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Int32 get_Tag() +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: LexerEndlineContinuation Item3 +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: LexerEndlineContinuation get_Item3() +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] LexerIfdefStack +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_LexerIfdefStack() +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_ifdef() +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] ifdef +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] LexerInterpStringNesting +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_LexerInterpStringNesting() +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_nesting() +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] nesting +FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: System.String ToString() +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean IsComment +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean IsEndLine +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean IsIfDefSkip +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean IsMLOnly +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean IsSingleLineComment +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean IsString +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean IsStringInComment +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean IsToken +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean get_IsComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean get_IsEndLine() +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean get_IsIfDefSkip() +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean get_IsMLOnly() +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean get_IsSingleLineComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean get_IsString() +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean get_IsStringInComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean get_IsToken() +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Int32 Item3 +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Int32 Tag +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Int32 get_Item3() +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Int32 get_Tag() +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] LexerIfdefStack +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_LexerIfdefStack() +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_ifdef() +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] ifdef +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] LexerInterpStringNesting +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_LexerInterpStringNesting() +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_nesting() +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] nesting +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: System.String ToString() +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: range get_range() +FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: range range +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean IsComment +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean IsEndLine +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean IsIfDefSkip +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean IsMLOnly +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean IsSingleLineComment +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean IsString +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean IsStringInComment +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean IsToken +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean get_IsComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean get_IsEndLine() +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean get_IsIfDefSkip() +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean get_IsMLOnly() +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean get_IsSingleLineComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean get_IsString() +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean get_IsStringInComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean get_IsToken() +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Int32 Tag +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Int32 get_Tag() +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] LexerIfdefStack +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_LexerIfdefStack() +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_ifdef() +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] ifdef +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] LexerInterpStringNesting +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_LexerInterpStringNesting() +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_nesting() +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] nesting +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: System.String ToString() +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: range get_range() +FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: range range +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean IsComment +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean IsEndLine +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean IsIfDefSkip +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean IsMLOnly +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean IsSingleLineComment +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean IsString +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean IsStringInComment +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean IsToken +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean get_IsComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean get_IsEndLine() +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean get_IsIfDefSkip() +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean get_IsMLOnly() +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean get_IsSingleLineComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean get_IsString() +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean get_IsStringInComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean get_IsToken() +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Int32 Item3 +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Int32 Tag +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Int32 get_Item3() +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Int32 get_Tag() +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] LexerIfdefStack +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_LexerIfdefStack() +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_ifdef() +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] ifdef +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] LexerInterpStringNesting +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_LexerInterpStringNesting() +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_nesting() +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] nesting +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: System.String ToString() +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: range get_range() +FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: range range +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean IsComment +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean IsEndLine +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean IsIfDefSkip +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean IsMLOnly +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean IsSingleLineComment +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean IsString +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean IsStringInComment +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean IsToken +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean get_IsComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean get_IsEndLine() +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean get_IsIfDefSkip() +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean get_IsMLOnly() +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean get_IsSingleLineComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean get_IsString() +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean get_IsStringInComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean get_IsToken() +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Int32 Tag +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Int32 get_Tag() +FSharp.Compiler.ParseHelpers+LexerContinuation+String: LexerStringKind get_kind() +FSharp.Compiler.ParseHelpers+LexerContinuation+String: LexerStringKind kind +FSharp.Compiler.ParseHelpers+LexerContinuation+String: LexerStringStyle get_style() +FSharp.Compiler.ParseHelpers+LexerContinuation+String: LexerStringStyle style +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] LexerIfdefStack +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_LexerIfdefStack() +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_ifdef() +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] ifdef +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] LexerInterpStringNesting +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_LexerInterpStringNesting() +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_nesting() +FSharp.Compiler.ParseHelpers+LexerContinuation+String: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] nesting +FSharp.Compiler.ParseHelpers+LexerContinuation+String: System.String ToString() +FSharp.Compiler.ParseHelpers+LexerContinuation+String: range get_range() +FSharp.Compiler.ParseHelpers+LexerContinuation+String: range range +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean IsComment +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean IsEndLine +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean IsIfDefSkip +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean IsMLOnly +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean IsSingleLineComment +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean IsString +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean IsStringInComment +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean IsToken +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean get_IsComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean get_IsEndLine() +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean get_IsIfDefSkip() +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean get_IsMLOnly() +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean get_IsSingleLineComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean get_IsString() +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean get_IsStringInComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean get_IsToken() +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Int32 Item4 +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Int32 Tag +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Int32 get_Item4() +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Int32 get_Tag() +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: LexerStringStyle get_style() +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: LexerStringStyle style +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] LexerIfdefStack +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_LexerIfdefStack() +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_ifdef() +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] ifdef +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] LexerInterpStringNesting +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_LexerInterpStringNesting() +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_nesting() +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] nesting +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: System.String ToString() +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: range get_range() +FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: range range +FSharp.Compiler.ParseHelpers+LexerContinuation+Tags: Int32 Comment +FSharp.Compiler.ParseHelpers+LexerContinuation+Tags: Int32 EndLine +FSharp.Compiler.ParseHelpers+LexerContinuation+Tags: Int32 IfDefSkip +FSharp.Compiler.ParseHelpers+LexerContinuation+Tags: Int32 MLOnly +FSharp.Compiler.ParseHelpers+LexerContinuation+Tags: Int32 SingleLineComment +FSharp.Compiler.ParseHelpers+LexerContinuation+Tags: Int32 String +FSharp.Compiler.ParseHelpers+LexerContinuation+Tags: Int32 StringInComment +FSharp.Compiler.ParseHelpers+LexerContinuation+Tags: Int32 Token +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean IsComment +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean IsEndLine +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean IsIfDefSkip +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean IsMLOnly +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean IsSingleLineComment +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean IsString +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean IsStringInComment +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean IsToken +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean get_IsComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean get_IsEndLine() +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean get_IsIfDefSkip() +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean get_IsMLOnly() +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean get_IsSingleLineComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean get_IsString() +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean get_IsStringInComment() +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean get_IsToken() +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Int32 Tag +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Int32 get_Tag() +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] LexerIfdefStack +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_LexerIfdefStack() +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_ifdef() +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] ifdef +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] LexerInterpStringNesting +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_LexerInterpStringNesting() +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_nesting() +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] nesting +FSharp.Compiler.ParseHelpers+LexerContinuation+Token: System.String ToString() +FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean IsComment +FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean IsEndLine +FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean IsIfDefSkip +FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean IsMLOnly +FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean IsSingleLineComment +FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean IsString +FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean IsStringInComment +FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean IsToken +FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean get_IsComment() +FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean get_IsEndLine() +FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean get_IsIfDefSkip() +FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean get_IsMLOnly() +FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean get_IsSingleLineComment() +FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean get_IsString() +FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean get_IsStringInComment() +FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean get_IsToken() +FSharp.Compiler.ParseHelpers+LexerContinuation: FSharp.Compiler.ParseHelpers+LexerContinuation+Comment +FSharp.Compiler.ParseHelpers+LexerContinuation: FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine +FSharp.Compiler.ParseHelpers+LexerContinuation: FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip +FSharp.Compiler.ParseHelpers+LexerContinuation: FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly +FSharp.Compiler.ParseHelpers+LexerContinuation: FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment +FSharp.Compiler.ParseHelpers+LexerContinuation: FSharp.Compiler.ParseHelpers+LexerContinuation+String +FSharp.Compiler.ParseHelpers+LexerContinuation: FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment +FSharp.Compiler.ParseHelpers+LexerContinuation: FSharp.Compiler.ParseHelpers+LexerContinuation+Tags +FSharp.Compiler.ParseHelpers+LexerContinuation: FSharp.Compiler.ParseHelpers+LexerContinuation+Token +FSharp.Compiler.ParseHelpers+LexerContinuation: Int32 Tag +FSharp.Compiler.ParseHelpers+LexerContinuation: Int32 get_Tag() +FSharp.Compiler.ParseHelpers+LexerContinuation: LexerContinuation Default +FSharp.Compiler.ParseHelpers+LexerContinuation: LexerContinuation NewComment(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]], Int32, range) +FSharp.Compiler.ParseHelpers+LexerContinuation: LexerContinuation NewEndLine(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]], LexerEndlineContinuation) +FSharp.Compiler.ParseHelpers+LexerContinuation: LexerContinuation NewIfDefSkip(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]], Int32, range) +FSharp.Compiler.ParseHelpers+LexerContinuation: LexerContinuation NewMLOnly(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]], range) +FSharp.Compiler.ParseHelpers+LexerContinuation: LexerContinuation NewSingleLineComment(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]], Int32, range) +FSharp.Compiler.ParseHelpers+LexerContinuation: LexerContinuation NewString(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]], LexerStringStyle, LexerStringKind, range) +FSharp.Compiler.ParseHelpers+LexerContinuation: LexerContinuation NewStringInComment(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]], LexerStringStyle, Int32, range) +FSharp.Compiler.ParseHelpers+LexerContinuation: LexerContinuation NewToken(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]]) +FSharp.Compiler.ParseHelpers+LexerContinuation: LexerContinuation get_Default() +FSharp.Compiler.ParseHelpers+LexerContinuation: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] LexerIfdefStack +FSharp.Compiler.ParseHelpers+LexerContinuation: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_LexerIfdefStack() +FSharp.Compiler.ParseHelpers+LexerContinuation: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] LexerInterpStringNesting +FSharp.Compiler.ParseHelpers+LexerContinuation: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_LexerInterpStringNesting() +FSharp.Compiler.ParseHelpers+LexerContinuation: System.String ToString() +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Boolean Equals(LexerEndlineContinuation) +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Boolean Equals(System.Object) +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Boolean IsSkip +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Boolean IsToken +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Boolean get_IsSkip() +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Boolean get_IsToken() +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Int32 GetHashCode() +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Int32 Item1 +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Int32 Tag +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Int32 get_Item1() +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Int32 get_Tag() +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: System.String ToString() +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: range get_range() +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: range range +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Tags: Int32 Skip +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Tags: Int32 Token +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Boolean Equals(LexerEndlineContinuation) +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Boolean Equals(System.Object) +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Boolean IsSkip +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Boolean IsToken +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Boolean get_IsSkip() +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Boolean get_IsToken() +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Tags +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Int32 GetHashCode() +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Int32 Tag +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Int32 get_Tag() +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: LexerEndlineContinuation NewSkip(Int32, range) +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: LexerEndlineContinuation Token +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: LexerEndlineContinuation get_Token() +FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: System.String ToString() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean Equals(LexerIfdefExpression) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean Equals(System.Object) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean IsIfdefAnd +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean IsIfdefId +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean IsIfdefNot +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean IsIfdefOr +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean get_IsIfdefAnd() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean get_IsIfdefId() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean get_IsIfdefNot() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean get_IsIfdefOr() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Int32 CompareTo(LexerIfdefExpression) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Int32 CompareTo(System.Object) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Int32 GetHashCode() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Int32 Tag +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Int32 get_Tag() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: LexerIfdefExpression Item1 +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: LexerIfdefExpression Item2 +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: LexerIfdefExpression get_Item1() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: LexerIfdefExpression get_Item2() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: System.String ToString() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean Equals(LexerIfdefExpression) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean Equals(System.Object) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean IsIfdefAnd +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean IsIfdefId +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean IsIfdefNot +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean IsIfdefOr +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean get_IsIfdefAnd() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean get_IsIfdefId() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean get_IsIfdefNot() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean get_IsIfdefOr() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Int32 CompareTo(LexerIfdefExpression) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Int32 CompareTo(System.Object) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Int32 GetHashCode() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Int32 Tag +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Int32 get_Tag() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: System.String Item +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: System.String ToString() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: System.String get_Item() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean Equals(LexerIfdefExpression) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean Equals(System.Object) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean IsIfdefAnd +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean IsIfdefId +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean IsIfdefNot +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean IsIfdefOr +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean get_IsIfdefAnd() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean get_IsIfdefId() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean get_IsIfdefNot() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean get_IsIfdefOr() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Int32 CompareTo(LexerIfdefExpression) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Int32 CompareTo(System.Object) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Int32 GetHashCode() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Int32 Tag +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Int32 get_Tag() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: LexerIfdefExpression Item +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: LexerIfdefExpression get_Item() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: System.String ToString() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean Equals(LexerIfdefExpression) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean Equals(System.Object) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean IsIfdefAnd +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean IsIfdefId +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean IsIfdefNot +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean IsIfdefOr +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean get_IsIfdefAnd() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean get_IsIfdefId() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean get_IsIfdefNot() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean get_IsIfdefOr() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Int32 CompareTo(LexerIfdefExpression) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Int32 CompareTo(System.Object) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Int32 GetHashCode() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Int32 Tag +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Int32 get_Tag() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: LexerIfdefExpression Item1 +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: LexerIfdefExpression Item2 +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: LexerIfdefExpression get_Item1() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: LexerIfdefExpression get_Item2() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: System.String ToString() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+Tags: Int32 IfdefAnd +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+Tags: Int32 IfdefId +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+Tags: Int32 IfdefNot +FSharp.Compiler.ParseHelpers+LexerIfdefExpression+Tags: Int32 IfdefOr +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean Equals(LexerIfdefExpression) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean Equals(System.Object) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean IsIfdefAnd +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean IsIfdefId +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean IsIfdefNot +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean IsIfdefOr +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean get_IsIfdefAnd() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean get_IsIfdefId() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean get_IsIfdefNot() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean get_IsIfdefOr() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: FSharp.Compiler.ParseHelpers+LexerIfdefExpression+Tags +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Int32 CompareTo(LexerIfdefExpression) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Int32 CompareTo(System.Object) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Int32 GetHashCode() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Int32 Tag +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Int32 get_Tag() +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: LexerIfdefExpression NewIfdefAnd(LexerIfdefExpression, LexerIfdefExpression) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: LexerIfdefExpression NewIfdefId(System.String) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: LexerIfdefExpression NewIfdefNot(LexerIfdefExpression) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: LexerIfdefExpression NewIfdefOr(LexerIfdefExpression, LexerIfdefExpression) +FSharp.Compiler.ParseHelpers+LexerIfdefExpression: System.String ToString() +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry+Tags: Int32 IfDefElse +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry+Tags: Int32 IfDefIf +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Boolean Equals(LexerIfdefStackEntry) +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Boolean Equals(System.Object) +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Boolean IsIfDefElse +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Boolean IsIfDefIf +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Boolean get_IsIfDefElse() +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Boolean get_IsIfDefIf() +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry+Tags +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Int32 CompareTo(LexerIfdefStackEntry) +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Int32 CompareTo(System.Object) +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Int32 GetHashCode() +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Int32 Tag +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Int32 get_Tag() +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: LexerIfdefStackEntry IfDefElse +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: LexerIfdefStackEntry IfDefIf +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: LexerIfdefStackEntry get_IfDefElse() +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: LexerIfdefStackEntry get_IfDefIf() +FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: System.String ToString() +FSharp.Compiler.ParseHelpers+LexerStringKind: Boolean Equals(LexerStringKind) +FSharp.Compiler.ParseHelpers+LexerStringKind: Boolean Equals(System.Object) +FSharp.Compiler.ParseHelpers+LexerStringKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+LexerStringKind: Boolean IsByteString +FSharp.Compiler.ParseHelpers+LexerStringKind: Boolean IsInterpolated +FSharp.Compiler.ParseHelpers+LexerStringKind: Boolean IsInterpolatedFirst +FSharp.Compiler.ParseHelpers+LexerStringKind: Boolean get_IsByteString() +FSharp.Compiler.ParseHelpers+LexerStringKind: Boolean get_IsInterpolated() +FSharp.Compiler.ParseHelpers+LexerStringKind: Boolean get_IsInterpolatedFirst() +FSharp.Compiler.ParseHelpers+LexerStringKind: Int32 CompareTo(LexerStringKind) +FSharp.Compiler.ParseHelpers+LexerStringKind: Int32 CompareTo(System.Object) +FSharp.Compiler.ParseHelpers+LexerStringKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.ParseHelpers+LexerStringKind: Int32 GetHashCode() +FSharp.Compiler.ParseHelpers+LexerStringKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+LexerStringKind: LexerStringKind ByteString +FSharp.Compiler.ParseHelpers+LexerStringKind: LexerStringKind InterpolatedStringFirst +FSharp.Compiler.ParseHelpers+LexerStringKind: LexerStringKind InterpolatedStringPart +FSharp.Compiler.ParseHelpers+LexerStringKind: LexerStringKind String +FSharp.Compiler.ParseHelpers+LexerStringKind: LexerStringKind get_ByteString() +FSharp.Compiler.ParseHelpers+LexerStringKind: LexerStringKind get_InterpolatedStringFirst() +FSharp.Compiler.ParseHelpers+LexerStringKind: LexerStringKind get_InterpolatedStringPart() +FSharp.Compiler.ParseHelpers+LexerStringKind: LexerStringKind get_String() +FSharp.Compiler.ParseHelpers+LexerStringKind: System.String ToString() +FSharp.Compiler.ParseHelpers+LexerStringKind: Void .ctor(Boolean, Boolean, Boolean) +FSharp.Compiler.ParseHelpers+LexerStringStyle+Tags: Int32 SingleQuote +FSharp.Compiler.ParseHelpers+LexerStringStyle+Tags: Int32 TripleQuote +FSharp.Compiler.ParseHelpers+LexerStringStyle+Tags: Int32 Verbatim +FSharp.Compiler.ParseHelpers+LexerStringStyle: Boolean Equals(LexerStringStyle) +FSharp.Compiler.ParseHelpers+LexerStringStyle: Boolean Equals(System.Object) +FSharp.Compiler.ParseHelpers+LexerStringStyle: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+LexerStringStyle: Boolean IsSingleQuote +FSharp.Compiler.ParseHelpers+LexerStringStyle: Boolean IsTripleQuote +FSharp.Compiler.ParseHelpers+LexerStringStyle: Boolean IsVerbatim +FSharp.Compiler.ParseHelpers+LexerStringStyle: Boolean get_IsSingleQuote() +FSharp.Compiler.ParseHelpers+LexerStringStyle: Boolean get_IsTripleQuote() +FSharp.Compiler.ParseHelpers+LexerStringStyle: Boolean get_IsVerbatim() +FSharp.Compiler.ParseHelpers+LexerStringStyle: FSharp.Compiler.ParseHelpers+LexerStringStyle+Tags +FSharp.Compiler.ParseHelpers+LexerStringStyle: Int32 CompareTo(LexerStringStyle) +FSharp.Compiler.ParseHelpers+LexerStringStyle: Int32 CompareTo(System.Object) +FSharp.Compiler.ParseHelpers+LexerStringStyle: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.ParseHelpers+LexerStringStyle: Int32 GetHashCode() +FSharp.Compiler.ParseHelpers+LexerStringStyle: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+LexerStringStyle: Int32 Tag +FSharp.Compiler.ParseHelpers+LexerStringStyle: Int32 get_Tag() +FSharp.Compiler.ParseHelpers+LexerStringStyle: LexerStringStyle SingleQuote +FSharp.Compiler.ParseHelpers+LexerStringStyle: LexerStringStyle TripleQuote +FSharp.Compiler.ParseHelpers+LexerStringStyle: LexerStringStyle Verbatim +FSharp.Compiler.ParseHelpers+LexerStringStyle: LexerStringStyle get_SingleQuote() +FSharp.Compiler.ParseHelpers+LexerStringStyle: LexerStringStyle get_TripleQuote() +FSharp.Compiler.ParseHelpers+LexerStringStyle: LexerStringStyle get_Verbatim() +FSharp.Compiler.ParseHelpers+LexerStringStyle: System.String ToString() +FSharp.Compiler.ParseHelpers+SyntaxError: System.Object Data0 +FSharp.Compiler.ParseHelpers+SyntaxError: System.Object get_Data0() +FSharp.Compiler.ParseHelpers+SyntaxError: Void .ctor() +FSharp.Compiler.ParseHelpers+SyntaxError: Void .ctor(System.Object, range) +FSharp.Compiler.ParseHelpers+SyntaxError: range get_range() +FSharp.Compiler.ParseHelpers+SyntaxError: range range +FSharp.Compiler.ParseHelpers: Boolean LexerIfdefEval(Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.Boolean], LexerIfdefExpression) +FSharp.Compiler.ParseHelpers: FSharp.Compiler.ParseHelpers+LexbufLocalXmlDocStore +FSharp.Compiler.ParseHelpers: FSharp.Compiler.ParseHelpers+LexerContinuation +FSharp.Compiler.ParseHelpers: FSharp.Compiler.ParseHelpers+LexerEndlineContinuation +FSharp.Compiler.ParseHelpers: FSharp.Compiler.ParseHelpers+LexerIfdefExpression +FSharp.Compiler.ParseHelpers: FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry +FSharp.Compiler.ParseHelpers: FSharp.Compiler.ParseHelpers+LexerStringKind +FSharp.Compiler.ParseHelpers: FSharp.Compiler.ParseHelpers+LexerStringStyle +FSharp.Compiler.ParseHelpers: FSharp.Compiler.ParseHelpers+SyntaxError +FSharp.Compiler.ParseHelpers: ILType ParseAssemblyCodeType(System.String, range) +FSharp.Compiler.ParseHelpers+IndentationProblem: Boolean Equals(System.Object) +FSharp.Compiler.ParseHelpers+IndentationProblem: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+IndentationProblem: Int32 GetHashCode() +FSharp.Compiler.ParseHelpers+IndentationProblem: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ParseHelpers+IndentationProblem: System.String Data0 +FSharp.Compiler.ParseHelpers+IndentationProblem: System.String get_Data0() +FSharp.Compiler.ParseHelpers+IndentationProblem: Void .ctor() +FSharp.Compiler.ParseHelpers+IndentationProblem: Void .ctor(System.String, range) +FSharp.Compiler.ParseHelpers+IndentationProblem: range Data1 +FSharp.Compiler.ParseHelpers+IndentationProblem: range get_Data1() +FSharp.Compiler.ParseHelpers: FSharp.Compiler.ParseHelpers+IndentationProblem +FSharp.Compiler.ParseHelpers: System.String warningStringOfCoords(Int32, Int32) +FSharp.Compiler.ParseHelpers: System.String warningStringOfPos(pos) +FSharp.Compiler.PartialLongName: Boolean Equals(FSharp.Compiler.PartialLongName) +FSharp.Compiler.PartialLongName: Boolean Equals(System.Object) +FSharp.Compiler.PartialLongName: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.PartialLongName: FSharp.Compiler.PartialLongName Empty(Int32) +FSharp.Compiler.PartialLongName: Int32 CompareTo(FSharp.Compiler.PartialLongName) +FSharp.Compiler.PartialLongName: Int32 CompareTo(System.Object) +FSharp.Compiler.PartialLongName: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.PartialLongName: Int32 EndColumn +FSharp.Compiler.PartialLongName: Int32 GetHashCode() +FSharp.Compiler.PartialLongName: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.PartialLongName: Int32 get_EndColumn() +FSharp.Compiler.PartialLongName: Microsoft.FSharp.Collections.FSharpList`1[System.String] QualifyingIdents +FSharp.Compiler.PartialLongName: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_QualifyingIdents() +FSharp.Compiler.PartialLongName: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] LastDotPos +FSharp.Compiler.PartialLongName: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] get_LastDotPos() +FSharp.Compiler.PartialLongName: System.String PartialIdent +FSharp.Compiler.PartialLongName: System.String ToString() +FSharp.Compiler.PartialLongName: System.String get_PartialIdent() +FSharp.Compiler.PartialLongName: Void .ctor(Microsoft.FSharp.Collections.FSharpList`1[System.String], System.String, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +FSharp.Compiler.PrettyNaming+ActivePatternInfo: ActivePatternInfo NewAPInfo(Boolean, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.Range+range]], range) +FSharp.Compiler.PrettyNaming+ActivePatternInfo: Boolean Equals(ActivePatternInfo) +FSharp.Compiler.PrettyNaming+ActivePatternInfo: Boolean Equals(System.Object) +FSharp.Compiler.PrettyNaming+ActivePatternInfo: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.PrettyNaming+ActivePatternInfo: Boolean IsTotal +FSharp.Compiler.PrettyNaming+ActivePatternInfo: Boolean Item1 +FSharp.Compiler.PrettyNaming+ActivePatternInfo: Boolean get_IsTotal() +FSharp.Compiler.PrettyNaming+ActivePatternInfo: Boolean get_Item1() +FSharp.Compiler.PrettyNaming+ActivePatternInfo: Int32 GetHashCode() +FSharp.Compiler.PrettyNaming+ActivePatternInfo: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.PrettyNaming+ActivePatternInfo: Int32 Tag +FSharp.Compiler.PrettyNaming+ActivePatternInfo: Int32 get_Tag() +FSharp.Compiler.PrettyNaming+ActivePatternInfo: Microsoft.FSharp.Collections.FSharpList`1[System.String] ActiveTags +FSharp.Compiler.PrettyNaming+ActivePatternInfo: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_ActiveTags() +FSharp.Compiler.PrettyNaming+ActivePatternInfo: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.Range+range]] ActiveTagsWithRanges +FSharp.Compiler.PrettyNaming+ActivePatternInfo: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.Range+range]] Item2 +FSharp.Compiler.PrettyNaming+ActivePatternInfo: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.Range+range]] get_ActiveTagsWithRanges() +FSharp.Compiler.PrettyNaming+ActivePatternInfo: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.Range+range]] get_Item2() +FSharp.Compiler.PrettyNaming+ActivePatternInfo: System.String ToString() +FSharp.Compiler.PrettyNaming+ActivePatternInfo: range Item3 +FSharp.Compiler.PrettyNaming+ActivePatternInfo: range Range +FSharp.Compiler.PrettyNaming+ActivePatternInfo: range get_Item3() +FSharp.Compiler.PrettyNaming+ActivePatternInfo: range get_Range() +FSharp.Compiler.PrettyNaming+CustomOperations: System.String Into +FSharp.Compiler.PrettyNaming+FSharpLib: Microsoft.FSharp.Collections.FSharpList`1[System.String] CorePath +FSharp.Compiler.PrettyNaming+FSharpLib: Microsoft.FSharp.Collections.FSharpList`1[System.String] RootPath +FSharp.Compiler.PrettyNaming+FSharpLib: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_CorePath() +FSharp.Compiler.PrettyNaming+FSharpLib: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_RootPath() +FSharp.Compiler.PrettyNaming+FSharpLib: System.String Core +FSharp.Compiler.PrettyNaming+FSharpLib: System.String Root +FSharp.Compiler.PrettyNaming+FSharpLib: System.String get_Core() +FSharp.Compiler.PrettyNaming+FSharpLib: System.String get_Root() +FSharp.Compiler.PrettyNaming+InvalidMangledStaticArg: Boolean Equals(System.Object) +FSharp.Compiler.PrettyNaming+InvalidMangledStaticArg: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.PrettyNaming+InvalidMangledStaticArg: Int32 GetHashCode() +FSharp.Compiler.PrettyNaming+InvalidMangledStaticArg: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.PrettyNaming+InvalidMangledStaticArg: System.String Data0 +FSharp.Compiler.PrettyNaming+InvalidMangledStaticArg: System.String get_Data0() +FSharp.Compiler.PrettyNaming+InvalidMangledStaticArg: Void .ctor() +FSharp.Compiler.PrettyNaming+InvalidMangledStaticArg: Void .ctor(System.String) +FSharp.Compiler.PrettyNaming+NameArityPair: Boolean Equals(NameArityPair) +FSharp.Compiler.PrettyNaming+NameArityPair: Boolean Equals(System.Object) +FSharp.Compiler.PrettyNaming+NameArityPair: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.PrettyNaming+NameArityPair: Int32 CompareTo(NameArityPair) +FSharp.Compiler.PrettyNaming+NameArityPair: Int32 CompareTo(System.Object) +FSharp.Compiler.PrettyNaming+NameArityPair: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.PrettyNaming+NameArityPair: Int32 GetHashCode() +FSharp.Compiler.PrettyNaming+NameArityPair: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.PrettyNaming+NameArityPair: Int32 Item2 +FSharp.Compiler.PrettyNaming+NameArityPair: Int32 Tag +FSharp.Compiler.PrettyNaming+NameArityPair: Int32 get_Item2() +FSharp.Compiler.PrettyNaming+NameArityPair: Int32 get_Tag() +FSharp.Compiler.PrettyNaming+NameArityPair: NameArityPair NewNameArityPair(System.String, Int32) +FSharp.Compiler.PrettyNaming+NameArityPair: System.String Item1 +FSharp.Compiler.PrettyNaming+NameArityPair: System.String ToString() +FSharp.Compiler.PrettyNaming+NameArityPair: System.String get_Item1() +FSharp.Compiler.PrettyNaming: Boolean IsActivePatternName(System.String) +FSharp.Compiler.PrettyNaming: Boolean IsCompilerGeneratedName(System.String) +FSharp.Compiler.PrettyNaming: Boolean IsIdentifierFirstCharacter(Char) +FSharp.Compiler.PrettyNaming: Boolean IsIdentifierPartCharacter(Char) +FSharp.Compiler.PrettyNaming: Boolean IsLongIdentifierPartCharacter(Char) +FSharp.Compiler.PrettyNaming: Boolean IsMangledOpName(System.String) +FSharp.Compiler.PrettyNaming: Boolean IsOperatorName(System.String) +FSharp.Compiler.PrettyNaming: Boolean IsOperatorOrBacktickedName(System.String) +FSharp.Compiler.PrettyNaming: Boolean IsPrefixOperator(System.String) +FSharp.Compiler.PrettyNaming: Boolean IsPunctuation(System.String) +FSharp.Compiler.PrettyNaming: Boolean IsTernaryOperator(System.String) +FSharp.Compiler.PrettyNaming: Boolean IsValidPrefixOperatorDefinitionName(System.String) +FSharp.Compiler.PrettyNaming: Boolean IsValidPrefixOperatorUse(System.String) +FSharp.Compiler.PrettyNaming: Boolean isTildeOnlyString(System.String) +FSharp.Compiler.PrettyNaming: Char[] IllegalCharactersInTypeAndNamespaceNames +FSharp.Compiler.PrettyNaming: Char[] get_IllegalCharactersInTypeAndNamespaceNames() +FSharp.Compiler.PrettyNaming: FSharp.Compiler.PrettyNaming+ActivePatternInfo +FSharp.Compiler.PrettyNaming: FSharp.Compiler.PrettyNaming+CustomOperations +FSharp.Compiler.PrettyNaming: FSharp.Compiler.PrettyNaming+FSharpLib +FSharp.Compiler.PrettyNaming: FSharp.Compiler.PrettyNaming+InvalidMangledStaticArg +FSharp.Compiler.PrettyNaming: FSharp.Compiler.PrettyNaming+NameArityPair +FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Collections.FSharpList`1[System.String] SplitNamesForILPath(System.String) +FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpChoice`6[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit] |Control|Equality|Relational|Indexer|FixedTypes|Other|(System.String) +FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String]] get_mkUnionCaseFieldName() +FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String]] mkUnionCaseFieldName +FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String] get_mkExceptionFieldName() +FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String] mkExceptionFieldName +FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.Boolean] IsInfixOperator +FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.Boolean] get_IsInfixOperator() +FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.String] CompileOpName +FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.String] DecompileOpName +FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.String] get_CompileOpName() +FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.String] get_DecompileOpName() +FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.PrettyNaming+ActivePatternInfo] ActivePatternInfoOfValName(System.String, range) +FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpOption`1[System.String] TryChopPropertyName(System.String) +FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpValueOption`1[System.Int32] TryDemangleGenericNameAndPos(System.String) +FSharp.Compiler.PrettyNaming: NameArityPair DecodeGenericTypeName(System.String) +FSharp.Compiler.PrettyNaming: NameArityPair DecodeGenericTypeNameWithPos(Int32, System.String) +FSharp.Compiler.PrettyNaming: System.String ChopPropertyName(System.String) +FSharp.Compiler.PrettyNaming: System.String CompilerGeneratedName(System.String) +FSharp.Compiler.PrettyNaming: System.String CompilerGeneratedNameSuffix(System.String, System.String) +FSharp.Compiler.PrettyNaming: System.String DemangleGenericTypeName(System.String) +FSharp.Compiler.PrettyNaming: System.String DemangleGenericTypeNameWithPos(Int32, System.String) +FSharp.Compiler.PrettyNaming: System.String DemangleOperatorName(System.String) +FSharp.Compiler.PrettyNaming: System.String ExtraWitnessMethodName(System.String) +FSharp.Compiler.PrettyNaming: System.String FSharpModuleSuffix +FSharp.Compiler.PrettyNaming: System.String FSharpOptimizationDataResourceName +FSharp.Compiler.PrettyNaming: System.String FSharpOptimizationDataResourceName2 +FSharp.Compiler.PrettyNaming: System.String FSharpSignatureDataResourceName +FSharp.Compiler.PrettyNaming: System.String FSharpSignatureDataResourceName2 +FSharp.Compiler.PrettyNaming: System.String FsiDynamicModulePrefix +FSharp.Compiler.PrettyNaming: System.String GetBasicNameOfPossibleCompilerGeneratedName(System.String) +FSharp.Compiler.PrettyNaming: System.String MangledGlobalName +FSharp.Compiler.PrettyNaming: System.String computeMangledNameWithoutDefaultArgValues[a](System.String, a[], System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.String]][]) +FSharp.Compiler.PrettyNaming: System.String get_FSharpOptimizationDataResourceName() +FSharp.Compiler.PrettyNaming: System.String get_FSharpOptimizationDataResourceName2() +FSharp.Compiler.PrettyNaming: System.String get_FSharpSignatureDataResourceName() +FSharp.Compiler.PrettyNaming: System.String get_FSharpSignatureDataResourceName2() +FSharp.Compiler.PrettyNaming: System.String get_FsiDynamicModulePrefix() +FSharp.Compiler.PrettyNaming: System.String get_opNameCons() +FSharp.Compiler.PrettyNaming: System.String get_opNameEquals() +FSharp.Compiler.PrettyNaming: System.String get_opNameEqualsNullable() +FSharp.Compiler.PrettyNaming: System.String get_opNameNil() +FSharp.Compiler.PrettyNaming: System.String get_opNameNullableEquals() +FSharp.Compiler.PrettyNaming: System.String get_opNameNullableEqualsNullable() +FSharp.Compiler.PrettyNaming: System.String get_outArgCompilerGeneratedName() +FSharp.Compiler.PrettyNaming: System.String get_unassignedTyparName() +FSharp.Compiler.PrettyNaming: System.String mangleProvidedTypeName(System.String, System.Tuple`2[System.String,System.String][]) +FSharp.Compiler.PrettyNaming: System.String opNameCons +FSharp.Compiler.PrettyNaming: System.String opNameEquals +FSharp.Compiler.PrettyNaming: System.String opNameEqualsNullable +FSharp.Compiler.PrettyNaming: System.String opNameNil +FSharp.Compiler.PrettyNaming: System.String opNameNullableEquals +FSharp.Compiler.PrettyNaming: System.String opNameNullableEqualsNullable +FSharp.Compiler.PrettyNaming: System.String opNamePrefix +FSharp.Compiler.PrettyNaming: System.String outArgCompilerGeneratedName +FSharp.Compiler.PrettyNaming: System.String parenGet +FSharp.Compiler.PrettyNaming: System.String parenSet +FSharp.Compiler.PrettyNaming: System.String qmark +FSharp.Compiler.PrettyNaming: System.String qmarkSet +FSharp.Compiler.PrettyNaming: System.String unassignedTyparName +FSharp.Compiler.PrettyNaming: System.Tuple`2[System.String,System.Tuple`2[System.String,System.String][]] demangleProvidedTypeName(System.String) +FSharp.Compiler.QuickParse: Boolean TestMemberOrOverrideDeclaration(FSharp.Compiler.SourceCodeServices.FSharpTokenInfo[]) +FSharp.Compiler.QuickParse: FSharp.Compiler.PartialLongName GetPartialLongNameEx(System.String, Int32) +FSharp.Compiler.QuickParse: Int32 CorrectIdentifierToken(System.String, Int32) +FSharp.Compiler.QuickParse: Int32 MagicalAdjustmentConstant +FSharp.Compiler.QuickParse: Int32 get_MagicalAdjustmentConstant() +FSharp.Compiler.QuickParse: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.String,System.Int32,System.Boolean]] GetCompleteIdentifierIsland(Boolean, System.String, Int32) +FSharp.Compiler.QuickParse: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],System.String] GetPartialLongName(System.String, Int32) +FSharp.Compiler.Range+Line: Int32 fromZ(Int32) +FSharp.Compiler.Range+Line: Int32 toZ(Int32) +FSharp.Compiler.Range+Pos: System.Tuple`2[System.Int32,System.Int32] toZ(pos) +FSharp.Compiler.Range+Pos: pos fromZ(Int32, Int32) +FSharp.Compiler.Range+Range: System.Collections.Generic.IEqualityComparer`1[FSharp.Compiler.Range+range] comparer +FSharp.Compiler.Range+Range: System.Collections.Generic.IEqualityComparer`1[FSharp.Compiler.Range+range] get_comparer() +FSharp.Compiler.Range+Range: System.Tuple`2[System.String,System.Tuple`2[System.Tuple`2[System.Int32,System.Int32],System.Tuple`2[System.Int32,System.Int32]]] toFileZ(range) +FSharp.Compiler.Range+Range: System.Tuple`2[System.Tuple`2[System.Int32,System.Int32],System.Tuple`2[System.Int32,System.Int32]] toZ(range) +FSharp.Compiler.Range+pos: Boolean Equals(System.Object) +FSharp.Compiler.Range+pos: Int32 Column +FSharp.Compiler.Range+pos: Int32 EncodingSize +FSharp.Compiler.Range+pos: Int32 GetHashCode() +FSharp.Compiler.Range+pos: Int32 Line +FSharp.Compiler.Range+pos: Int32 get_Column() +FSharp.Compiler.Range+pos: Int32 get_EncodingSize() +FSharp.Compiler.Range+pos: Int32 get_Line() +FSharp.Compiler.Range+pos: Int64 Encoding +FSharp.Compiler.Range+pos: Int64 get_Encoding() +FSharp.Compiler.Range+pos: System.String ToString() +FSharp.Compiler.Range+pos: pos Decode(Int64) +FSharp.Compiler.Range+range: Boolean Equals(System.Object) +FSharp.Compiler.Range+range: Boolean IsSynthetic +FSharp.Compiler.Range+range: Boolean get_IsSynthetic() +FSharp.Compiler.Range+range: Int32 EndColumn +FSharp.Compiler.Range+range: Int32 EndLine +FSharp.Compiler.Range+range: Int32 FileIndex +FSharp.Compiler.Range+range: Int32 GetHashCode() +FSharp.Compiler.Range+range: Int32 StartColumn +FSharp.Compiler.Range+range: Int32 StartLine +FSharp.Compiler.Range+range: Int32 get_EndColumn() +FSharp.Compiler.Range+range: Int32 get_EndLine() +FSharp.Compiler.Range+range: Int32 get_FileIndex() +FSharp.Compiler.Range+range: Int32 get_StartColumn() +FSharp.Compiler.Range+range: Int32 get_StartLine() +FSharp.Compiler.Range+range: System.String FileName +FSharp.Compiler.Range+range: System.String ToShortString() +FSharp.Compiler.Range+range: System.String ToString() +FSharp.Compiler.Range+range: System.String get_FileName() +FSharp.Compiler.Range+range: pos End +FSharp.Compiler.Range+range: pos Start +FSharp.Compiler.Range+range: pos get_End() +FSharp.Compiler.Range+range: pos get_Start() +FSharp.Compiler.Range+range: range EndRange +FSharp.Compiler.Range+range: range MakeSynthetic() +FSharp.Compiler.Range+range: range StartRange +FSharp.Compiler.Range+range: range Zero +FSharp.Compiler.Range+range: range get_EndRange() +FSharp.Compiler.Range+range: range get_StartRange() +FSharp.Compiler.Range+range: range get_Zero() +FSharp.Compiler.Range: Boolean equals(range, range) +FSharp.Compiler.Range: Boolean posEq(pos, pos) +FSharp.Compiler.Range: Boolean posGeq(pos, pos) +FSharp.Compiler.Range: Boolean posGt(pos, pos) +FSharp.Compiler.Range: Boolean posLt(pos, pos) +FSharp.Compiler.Range: Boolean rangeBeforePos(range, pos) +FSharp.Compiler.Range: Boolean rangeContainsPos(range, pos) +FSharp.Compiler.Range: Boolean rangeContainsRange(range, range) +FSharp.Compiler.Range: FSharp.Compiler.Range+Line +FSharp.Compiler.Range: FSharp.Compiler.Range+Pos +FSharp.Compiler.Range: FSharp.Compiler.Range+Range +FSharp.Compiler.Range: FSharp.Compiler.Range+pos +FSharp.Compiler.Range: FSharp.Compiler.Range+range +FSharp.Compiler.Range: Int32 fileIndexOfFile(System.String) +FSharp.Compiler.Range: System.Collections.Generic.IComparer`1[FSharp.Compiler.Range+pos] get_posOrder() +FSharp.Compiler.Range: System.Collections.Generic.IComparer`1[FSharp.Compiler.Range+pos] posOrder +FSharp.Compiler.Range: System.Collections.Generic.IComparer`1[FSharp.Compiler.Range+range] get_rangeOrder() +FSharp.Compiler.Range: System.Collections.Generic.IComparer`1[FSharp.Compiler.Range+range] rangeOrder +FSharp.Compiler.Range: System.String commandLineArgsFileName +FSharp.Compiler.Range: System.String fileOfFileIndex(Int32) +FSharp.Compiler.Range: System.String get_commandLineArgsFileName() +FSharp.Compiler.Range: System.String get_startupFileName() +FSharp.Compiler.Range: System.String get_unknownFileName() +FSharp.Compiler.Range: System.String startupFileName +FSharp.Compiler.Range: System.String stringOfPos(pos) +FSharp.Compiler.Range: System.String stringOfRange(range) +FSharp.Compiler.Range: System.String unknownFileName +FSharp.Compiler.Range: Void outputPos(System.IO.TextWriter, pos) +FSharp.Compiler.Range: Void outputRange(System.IO.TextWriter, range) +FSharp.Compiler.Range: pos get_pos0() +FSharp.Compiler.Range: pos mkPos(Int32, Int32) +FSharp.Compiler.Range: pos pos0 +FSharp.Compiler.Range: range get_range0() +FSharp.Compiler.Range: range get_rangeCmdArgs() +FSharp.Compiler.Range: range get_rangeStartup() +FSharp.Compiler.Range: range mkFileIndexRange(Int32, pos, pos) +FSharp.Compiler.Range: range mkRange(System.String, pos, pos) +FSharp.Compiler.Range: range range0 +FSharp.Compiler.Range: range rangeCmdArgs +FSharp.Compiler.Range: range rangeN(System.String, Int32) +FSharp.Compiler.Range: range rangeStartup +FSharp.Compiler.Range: range trimRangeToLine(range) +FSharp.Compiler.Range: range unionRanges(range, range) +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Boolean Equals(ResolutionEnvironment) +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Boolean Equals(System.Object) +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Boolean IsCompilationAndEvaluation +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Boolean IsEditingOrCompilation +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Boolean get_IsCompilationAndEvaluation() +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Boolean get_IsEditingOrCompilation() +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Boolean get_isEditing() +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Boolean isEditing +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Int32 CompareTo(ResolutionEnvironment) +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Int32 CompareTo(System.Object) +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Int32 GetHashCode() +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Int32 Tag +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Int32 get_Tag() +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: System.String ToString() +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+Tags: Int32 CompilationAndEvaluation +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+Tags: Int32 EditingOrCompilation +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Boolean Equals(ResolutionEnvironment) +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Boolean Equals(System.Object) +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Boolean IsCompilationAndEvaluation +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Boolean IsEditingOrCompilation +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Boolean get_IsCompilationAndEvaluation() +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Boolean get_IsEditingOrCompilation() +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+Tags +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Int32 CompareTo(ResolutionEnvironment) +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Int32 CompareTo(System.Object) +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Int32 GetHashCode() +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Int32 Tag +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Int32 get_Tag() +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: ResolutionEnvironment CompilationAndEvaluation +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: ResolutionEnvironment NewEditingOrCompilation(Boolean) +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: ResolutionEnvironment get_CompilationAndEvaluation() +FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: System.String ToString() +FSharp.Compiler.ReferenceResolver+ResolvedFile: Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.String,System.String],System.String] get_prepareToolTip() +FSharp.Compiler.ReferenceResolver+ResolvedFile: Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.String,System.String],System.String] prepareToolTip +FSharp.Compiler.ReferenceResolver+ResolvedFile: System.String ToString() +FSharp.Compiler.ReferenceResolver+ResolvedFile: System.String baggage +FSharp.Compiler.ReferenceResolver+ResolvedFile: System.String get_baggage() +FSharp.Compiler.ReferenceResolver+ResolvedFile: System.String get_itemSpec() +FSharp.Compiler.ReferenceResolver+ResolvedFile: System.String itemSpec +FSharp.Compiler.ReferenceResolver+ResolvedFile: Void .ctor(System.String, Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.String,System.String],System.String], System.String) +FSharp.Compiler.ReferenceResolver+Resolver: ResolvedFile[] Resolve(ResolutionEnvironment, System.Tuple`2[System.String,System.String][], System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], System.String, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], System.String, Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.Boolean,Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit]]]) +FSharp.Compiler.ReferenceResolver+Resolver: System.String DotNetFrameworkReferenceAssembliesRootDirectory +FSharp.Compiler.ReferenceResolver+Resolver: System.String HighestInstalledNetFrameworkVersion() +FSharp.Compiler.ReferenceResolver+Resolver: System.String get_DotNetFrameworkReferenceAssembliesRootDirectory() +FSharp.Compiler.ReferenceResolver: FSharp.Compiler.ReferenceResolver+ResolutionEnvironment +FSharp.Compiler.ReferenceResolver: FSharp.Compiler.ReferenceResolver+ResolvedFile +FSharp.Compiler.ReferenceResolver: FSharp.Compiler.ReferenceResolver+Resolver +FSharp.Compiler.SourceCodeServices.AssemblyContentProvider: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.AssemblySymbol] getAssemblyContent(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SourceCodeServices.IAssemblyContentCache,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.AssemblySymbol]],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.AssemblySymbol]], FSharp.Compiler.SourceCodeServices.AssemblyContentType, Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpAssembly]) +FSharp.Compiler.SourceCodeServices.AssemblyContentProvider: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.AssemblySymbol] getAssemblySignatureContent(FSharp.Compiler.SourceCodeServices.AssemblyContentType, FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature) +FSharp.Compiler.SourceCodeServices.AssemblyContentType+Tags: Int32 Full +FSharp.Compiler.SourceCodeServices.AssemblyContentType+Tags: Int32 Public +FSharp.Compiler.SourceCodeServices.AssemblyContentType: Boolean Equals(FSharp.Compiler.SourceCodeServices.AssemblyContentType) +FSharp.Compiler.SourceCodeServices.AssemblyContentType: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.AssemblyContentType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.AssemblyContentType: Boolean IsFull +FSharp.Compiler.SourceCodeServices.AssemblyContentType: Boolean IsPublic +FSharp.Compiler.SourceCodeServices.AssemblyContentType: Boolean get_IsFull() +FSharp.Compiler.SourceCodeServices.AssemblyContentType: Boolean get_IsPublic() +FSharp.Compiler.SourceCodeServices.AssemblyContentType: FSharp.Compiler.SourceCodeServices.AssemblyContentType Full +FSharp.Compiler.SourceCodeServices.AssemblyContentType: FSharp.Compiler.SourceCodeServices.AssemblyContentType Public +FSharp.Compiler.SourceCodeServices.AssemblyContentType: FSharp.Compiler.SourceCodeServices.AssemblyContentType get_Full() +FSharp.Compiler.SourceCodeServices.AssemblyContentType: FSharp.Compiler.SourceCodeServices.AssemblyContentType get_Public() +FSharp.Compiler.SourceCodeServices.AssemblyContentType: FSharp.Compiler.SourceCodeServices.AssemblyContentType+Tags +FSharp.Compiler.SourceCodeServices.AssemblyContentType: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.AssemblyContentType) +FSharp.Compiler.SourceCodeServices.AssemblyContentType: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.AssemblyContentType: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.AssemblyContentType: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.AssemblyContentType: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.AssemblyContentType: Int32 Tag +FSharp.Compiler.SourceCodeServices.AssemblyContentType: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.AssemblyContentType: System.String ToString() +FSharp.Compiler.SourceCodeServices.AssemblySymbol: FSharp.Compiler.SourceCodeServices.FSharpSymbol Symbol +FSharp.Compiler.SourceCodeServices.AssemblySymbol: FSharp.Compiler.SourceCodeServices.FSharpSymbol get_Symbol() +FSharp.Compiler.SourceCodeServices.AssemblySymbol: FSharp.Compiler.SourceCodeServices.UnresolvedSymbol UnresolvedSymbol +FSharp.Compiler.SourceCodeServices.AssemblySymbol: FSharp.Compiler.SourceCodeServices.UnresolvedSymbol get_UnresolvedSymbol() +FSharp.Compiler.SourceCodeServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SourceCodeServices.LookupType,FSharp.Compiler.SourceCodeServices.EntityKind] Kind +FSharp.Compiler.SourceCodeServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SourceCodeServices.LookupType,FSharp.Compiler.SourceCodeServices.EntityKind] get_Kind() +FSharp.Compiler.SourceCodeServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] AutoOpenParent +FSharp.Compiler.SourceCodeServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] Namespace +FSharp.Compiler.SourceCodeServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] NearestRequireQualifiedAccessParent +FSharp.Compiler.SourceCodeServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] TopRequireQualifiedAccessParent +FSharp.Compiler.SourceCodeServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] get_AutoOpenParent() +FSharp.Compiler.SourceCodeServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] get_Namespace() +FSharp.Compiler.SourceCodeServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] get_NearestRequireQualifiedAccessParent() +FSharp.Compiler.SourceCodeServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] get_TopRequireQualifiedAccessParent() +FSharp.Compiler.SourceCodeServices.AssemblySymbol: System.String FullName +FSharp.Compiler.SourceCodeServices.AssemblySymbol: System.String ToString() +FSharp.Compiler.SourceCodeServices.AssemblySymbol: System.String get_FullName() +FSharp.Compiler.SourceCodeServices.AssemblySymbol: System.String[] CleanedIdents +FSharp.Compiler.SourceCodeServices.AssemblySymbol: System.String[] get_CleanedIdents() +FSharp.Compiler.SourceCodeServices.AssemblySymbol: Void .ctor(System.String, System.String[], Microsoft.FSharp.Core.FSharpOption`1[System.String[]], Microsoft.FSharp.Core.FSharpOption`1[System.String[]], Microsoft.FSharp.Core.FSharpOption`1[System.String[]], Microsoft.FSharp.Core.FSharpOption`1[System.String[]], FSharp.Compiler.SourceCodeServices.FSharpSymbol, Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SourceCodeServices.LookupType,FSharp.Compiler.SourceCodeServices.EntityKind], FSharp.Compiler.SourceCodeServices.UnresolvedSymbol) +FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitBinding(Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynBinding,Microsoft.FSharp.Core.FSharpOption`1[T]], SynBinding) +FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitComponentInfo(SynComponentInfo) +FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitExpr(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynExpr,Microsoft.FSharp.Core.FSharpOption`1[T]], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynExpr,Microsoft.FSharp.Core.FSharpOption`1[T]], SynExpr) +FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitHashDirective(range) +FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitImplicitInherit(Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynExpr,Microsoft.FSharp.Core.FSharpOption`1[T]], SynType, SynExpr, range) +FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitInheritSynMemberDefn(SynComponentInfo, SynTypeDefnKind, SynType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn], range) +FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitInterfaceSynMemberDefnType(SynType) +FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitLetOrUse(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynBinding,Microsoft.FSharp.Core.FSharpOption`1[T]], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding], range) +FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitMatchClause(Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynMatchClause,Microsoft.FSharp.Core.FSharpOption`1[T]], SynMatchClause) +FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitModuleDecl(Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynModuleDecl,Microsoft.FSharp.Core.FSharpOption`1[T]], SynModuleDecl) +FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitModuleOrNamespace(SynModuleOrNamespace) +FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitPat(Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynPat,Microsoft.FSharp.Core.FSharpOption`1[T]], SynPat) +FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitRecordField(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+LongIdentWithDots]) +FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitSimplePats(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynSimplePat]) +FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitType(Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynType,Microsoft.FSharp.Core.FSharpOption`1[T]], SynType) +FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitTypeAbbrev(SynType, range) +FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Void .ctor() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean IsBinding +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean IsExpr +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean IsMatchClause +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean IsMemberDefn +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean IsModule +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean IsModuleOrNamespace +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean IsTypeDefn +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean get_IsBinding() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean get_IsExpr() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean get_IsMatchClause() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean get_IsMemberDefn() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean get_IsModule() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean get_IsModuleOrNamespace() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean get_IsTypeDefn() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Int32 Tag +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: SynBinding Item +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: SynBinding get_Item() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: System.String ToString() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean IsBinding +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean IsExpr +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean IsMatchClause +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean IsMemberDefn +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean IsModule +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean IsModuleOrNamespace +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean IsTypeDefn +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean get_IsBinding() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean get_IsExpr() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean get_IsMatchClause() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean get_IsMemberDefn() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean get_IsModule() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean get_IsModuleOrNamespace() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean get_IsTypeDefn() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Int32 Tag +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: SynExpr Item +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: SynExpr get_Item() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: System.String ToString() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean IsBinding +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean IsExpr +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean IsMatchClause +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean IsMemberDefn +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean IsModule +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean IsModuleOrNamespace +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean IsTypeDefn +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean get_IsBinding() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean get_IsExpr() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean get_IsMatchClause() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean get_IsMemberDefn() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean get_IsModule() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean get_IsModuleOrNamespace() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean get_IsTypeDefn() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Int32 Tag +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: SynMatchClause Item +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: SynMatchClause get_Item() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: System.String ToString() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean IsBinding +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean IsExpr +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean IsMatchClause +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean IsMemberDefn +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean IsModule +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean IsModuleOrNamespace +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean IsTypeDefn +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean get_IsBinding() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean get_IsExpr() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean get_IsMatchClause() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean get_IsMemberDefn() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean get_IsModule() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean get_IsModuleOrNamespace() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean get_IsTypeDefn() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Int32 Tag +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: SynMemberDefn Item +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: SynMemberDefn get_Item() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: System.String ToString() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean IsBinding +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean IsExpr +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean IsMatchClause +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean IsMemberDefn +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean IsModule +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean IsModuleOrNamespace +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean IsTypeDefn +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean get_IsBinding() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean get_IsExpr() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean get_IsMatchClause() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean get_IsMemberDefn() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean get_IsModule() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean get_IsModuleOrNamespace() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean get_IsTypeDefn() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Int32 Tag +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: SynModuleDecl Item +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: SynModuleDecl get_Item() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: System.String ToString() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean IsBinding +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean IsExpr +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean IsMatchClause +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean IsMemberDefn +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean IsModule +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean IsModuleOrNamespace +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean IsTypeDefn +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean get_IsBinding() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean get_IsExpr() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean get_IsMatchClause() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean get_IsMemberDefn() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean get_IsModule() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean get_IsModuleOrNamespace() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean get_IsTypeDefn() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Int32 Tag +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: SynModuleOrNamespace Item +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: SynModuleOrNamespace get_Item() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: System.String ToString() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Tags: Int32 Binding +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Tags: Int32 Expr +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Tags: Int32 MatchClause +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Tags: Int32 MemberDefn +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Tags: Int32 Module +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Tags: Int32 ModuleOrNamespace +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Tags: Int32 TypeDefn +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean IsBinding +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean IsExpr +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean IsMatchClause +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean IsMemberDefn +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean IsModule +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean IsModuleOrNamespace +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean IsTypeDefn +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean get_IsBinding() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean get_IsExpr() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean get_IsMatchClause() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean get_IsMemberDefn() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean get_IsModule() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean get_IsModuleOrNamespace() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean get_IsTypeDefn() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Int32 Tag +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: SynTypeDefn Item +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: SynTypeDefn get_Item() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: System.String ToString() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean IsBinding +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean IsExpr +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean IsMatchClause +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean IsMemberDefn +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean IsModule +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean IsModuleOrNamespace +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean IsTypeDefn +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean get_IsBinding() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean get_IsExpr() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean get_IsMatchClause() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean get_IsMemberDefn() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean get_IsModule() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean get_IsModuleOrNamespace() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean get_IsTypeDefn() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Tags +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Int32 Tag +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: System.String ToString() +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: TraverseStep NewBinding(SynBinding) +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: TraverseStep NewExpr(SynExpr) +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: TraverseStep NewMatchClause(SynMatchClause) +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: TraverseStep NewMemberDefn(SynMemberDefn) +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: TraverseStep NewModule(SynModuleDecl) +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: TraverseStep NewModuleOrNamespace(SynModuleOrNamespace) +FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: TraverseStep NewTypeDefn(SynTypeDefn) +FSharp.Compiler.SourceCodeServices.AstTraversal: Boolean rangeContainsPosEdgesExclusive(range, pos) +FSharp.Compiler.SourceCodeServices.AstTraversal: Boolean rangeContainsPosLeftEdgeExclusiveAndRightEdgeInclusive(range, pos) +FSharp.Compiler.SourceCodeServices.AstTraversal: Boolean rangeContainsPosLeftEdgeInclusive(range, pos) +FSharp.Compiler.SourceCodeServices.AstTraversal: FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T] +FSharp.Compiler.SourceCodeServices.AstTraversal: FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep +FSharp.Compiler.SourceCodeServices.AstTraversal: Microsoft.FSharp.Core.FSharpOption`1[T] Traverse[T](pos, ParsedInput, AstVisitorBase`1) +FSharp.Compiler.SourceCodeServices.AstTraversal: Microsoft.FSharp.Core.FSharpOption`1[a] pick[a](pos, range, System.Object, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.FSharpOption`1[a]]]]) +FSharp.Compiler.SourceCodeServices.AstTraversal: System.Tuple`2[b,Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,c]] dive[a,b,c](a, b, Microsoft.FSharp.Core.FSharpFunc`2[a,c]) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpExpr] |AddressOf|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpExpr] |Quote|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue] |Value|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType] |BaseValue|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType] |DefaultValue|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType] |ThisValue|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |AddressSet|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |Sequential|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |TryFinally|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |WhileLoop|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpType]] |UnionCaseTag|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpExpr,Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue],FSharp.Compiler.SourceCodeServices.FSharpExpr]]]] |DecisionTree|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |Lambda|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |ValueSet|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpType,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |Coerce|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpType,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |NewDelegate|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpType,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |TypeTest|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpType,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |NewAnonRecord|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpType,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |NewArray|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpType,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |NewRecord|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpType,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |NewTuple|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter],FSharp.Compiler.SourceCodeServices.FSharpExpr]] |TypeLambda|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue,FSharp.Compiler.SourceCodeServices.FSharpExpr]],FSharp.Compiler.SourceCodeServices.FSharpExpr]] |LetRec|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Int32,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |DecisionTreeSuccess|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Object,FSharp.Compiler.SourceCodeServices.FSharpType]] |Const|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue,FSharp.Compiler.SourceCodeServices.FSharpExpr],FSharp.Compiler.SourceCodeServices.FSharpExpr]] |Let|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |IfThenElse|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpType,FSharp.Compiler.SourceCodeServices.FSharpUnionCase]] |UnionCaseTest|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpType,System.Int32]] |AnonRecordGet|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpExpr,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |Application|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |NewObject|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpType,FSharp.Compiler.SourceCodeServices.FSharpUnionCase,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |NewUnionCase|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpType,System.Int32,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |TupleGet|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpExpr],FSharp.Compiler.SourceCodeServices.FSharpType,FSharp.Compiler.SourceCodeServices.FSharpField]] |FSharpFieldGet|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpExpr],FSharp.Compiler.SourceCodeServices.FSharpType,System.String]] |ILFieldGet|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.String,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |ILAsm|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpExpr,System.Boolean]] |FastIntegerForLoop|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpType,FSharp.Compiler.SourceCodeServices.FSharpUnionCase,FSharp.Compiler.SourceCodeServices.FSharpField]] |UnionCaseGet|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[FSharp.Compiler.SourceCodeServices.FSharpType,FSharp.Compiler.SourceCodeServices.FSharpExpr,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpObjectExprOverride],Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpType,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpObjectExprOverride]]]]] |ObjectExpr|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpExpr],FSharp.Compiler.SourceCodeServices.FSharpType,FSharp.Compiler.SourceCodeServices.FSharpField,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |FSharpFieldSet|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpExpr],FSharp.Compiler.SourceCodeServices.FSharpType,System.String,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |ILFieldSet|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue,FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |TryWith|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpType,FSharp.Compiler.SourceCodeServices.FSharpUnionCase,FSharp.Compiler.SourceCodeServices.FSharpField,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |UnionCaseSet|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpExpr],FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |Call|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`6[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType],System.String,FSharp.Compiler.SyntaxTree+MemberFlags,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |TraitCall|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] |WitnessArg|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`6[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpExpr],FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |CallWithWitnesses|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.CompilerEnvironment: Microsoft.FSharp.Core.FSharpOption`1[System.String] BinFolderOfDefaultFSharpCompiler(Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.CompilerEnvironmentModule: Boolean IsCheckerSupportedSubcategory(System.String) +FSharp.Compiler.SourceCodeServices.CompilerEnvironmentModule: Microsoft.FSharp.Collections.FSharpList`1[System.String] DefaultReferencesForOrphanSources(Boolean) +FSharp.Compiler.SourceCodeServices.CompilerEnvironmentModule: Microsoft.FSharp.Collections.FSharpList`1[System.String] GetCompilationDefinesForEditing(FSharp.Compiler.SourceCodeServices.FSharpParsingOptions) +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean Equals(FSharp.Compiler.SourceCodeServices.CompletionContext) +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean IsAttributeApplication +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean IsInherit +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean IsInvalid +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean IsOpenDeclaration +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean IsParameterList +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean IsPatternType +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean IsRangeOperator +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean IsRecordField +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean get_IsAttributeApplication() +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean get_IsInherit() +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean get_IsInvalid() +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean get_IsOpenDeclaration() +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean get_IsParameterList() +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean get_IsPatternType() +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean get_IsRangeOperator() +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean get_IsRecordField() +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: FSharp.Compiler.SourceCodeServices.InheritanceContext Item1 +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: FSharp.Compiler.SourceCodeServices.InheritanceContext get_Item1() +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Int32 Tag +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: System.String ToString() +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] Item2 +FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] get_Item2() +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean Equals(FSharp.Compiler.SourceCodeServices.CompletionContext) +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean IsAttributeApplication +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean IsInherit +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean IsInvalid +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean IsOpenDeclaration +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean IsParameterList +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean IsPatternType +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean IsRangeOperator +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean IsRecordField +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean get_IsAttributeApplication() +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean get_IsInherit() +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean get_IsInvalid() +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean get_IsOpenDeclaration() +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean get_IsParameterList() +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean get_IsPatternType() +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean get_IsRangeOperator() +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean get_IsRecordField() +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean get_isOpenType() +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean isOpenType +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Int32 Tag +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: System.String ToString() +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean Equals(FSharp.Compiler.SourceCodeServices.CompletionContext) +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean IsAttributeApplication +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean IsInherit +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean IsInvalid +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean IsOpenDeclaration +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean IsParameterList +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean IsPatternType +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean IsRangeOperator +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean IsRecordField +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean get_IsAttributeApplication() +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean get_IsInherit() +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean get_IsInvalid() +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean get_IsOpenDeclaration() +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean get_IsParameterList() +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean get_IsPatternType() +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean get_IsRangeOperator() +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean get_IsRecordField() +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Int32 Tag +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: System.Collections.Generic.HashSet`1[System.String] Item2 +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: System.Collections.Generic.HashSet`1[System.String] get_Item2() +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: System.String ToString() +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: pos Item1 +FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: pos get_Item1() +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean Equals(FSharp.Compiler.SourceCodeServices.CompletionContext) +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean IsAttributeApplication +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean IsInherit +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean IsInvalid +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean IsOpenDeclaration +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean IsParameterList +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean IsPatternType +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean IsRangeOperator +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean IsRecordField +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean get_IsAttributeApplication() +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean get_IsInherit() +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean get_IsInvalid() +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean get_IsOpenDeclaration() +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean get_IsParameterList() +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean get_IsPatternType() +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean get_IsRangeOperator() +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean get_IsRecordField() +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: FSharp.Compiler.SourceCodeServices.RecordContext Item +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: FSharp.Compiler.SourceCodeServices.RecordContext get_Item() +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Int32 Tag +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: System.String ToString() +FSharp.Compiler.SourceCodeServices.CompletionContext+Tags: Int32 AttributeApplication +FSharp.Compiler.SourceCodeServices.CompletionContext+Tags: Int32 Inherit +FSharp.Compiler.SourceCodeServices.CompletionContext+Tags: Int32 Invalid +FSharp.Compiler.SourceCodeServices.CompletionContext+Tags: Int32 OpenDeclaration +FSharp.Compiler.SourceCodeServices.CompletionContext+Tags: Int32 ParameterList +FSharp.Compiler.SourceCodeServices.CompletionContext+Tags: Int32 PatternType +FSharp.Compiler.SourceCodeServices.CompletionContext+Tags: Int32 RangeOperator +FSharp.Compiler.SourceCodeServices.CompletionContext+Tags: Int32 RecordField +FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean Equals(FSharp.Compiler.SourceCodeServices.CompletionContext) +FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean IsAttributeApplication +FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean IsInherit +FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean IsInvalid +FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean IsOpenDeclaration +FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean IsParameterList +FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean IsPatternType +FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean IsRangeOperator +FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean IsRecordField +FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean get_IsAttributeApplication() +FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean get_IsInherit() +FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean get_IsInvalid() +FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean get_IsOpenDeclaration() +FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean get_IsParameterList() +FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean get_IsPatternType() +FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean get_IsRangeOperator() +FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean get_IsRecordField() +FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext AttributeApplication +FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext Invalid +FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext NewInherit(FSharp.Compiler.SourceCodeServices.InheritanceContext, System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]]) +FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext NewOpenDeclaration(Boolean) +FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext NewParameterList(pos, System.Collections.Generic.HashSet`1[System.String]) +FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext NewRecordField(FSharp.Compiler.SourceCodeServices.RecordContext) +FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext PatternType +FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext RangeOperator +FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext get_AttributeApplication() +FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext get_Invalid() +FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext get_PatternType() +FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext get_RangeOperator() +FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit +FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration +FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList +FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField +FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext+Tags +FSharp.Compiler.SourceCodeServices.CompletionContext: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.CompletionContext: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.CompletionContext: Int32 Tag +FSharp.Compiler.SourceCodeServices.CompletionContext: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.CompletionContext: System.String ToString() +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean Equals(FSharp.Compiler.SourceCodeServices.CompletionItemKind) +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean IsArgument +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean IsCustomOperation +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean IsEvent +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean IsField +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean IsMethod +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean IsOther +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean IsProperty +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean get_IsArgument() +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean get_IsCustomOperation() +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean get_IsEvent() +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean get_IsField() +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean get_IsMethod() +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean get_IsOther() +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean get_IsProperty() +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean get_isExtension() +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean isExtension +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.CompletionItemKind) +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Int32 Tag +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: System.String ToString() +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Tags: Int32 Argument +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Tags: Int32 CustomOperation +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Tags: Int32 Event +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Tags: Int32 Field +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Tags: Int32 Method +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Tags: Int32 Other +FSharp.Compiler.SourceCodeServices.CompletionItemKind+Tags: Int32 Property +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean Equals(FSharp.Compiler.SourceCodeServices.CompletionItemKind) +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean IsArgument +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean IsCustomOperation +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean IsEvent +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean IsField +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean IsMethod +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean IsOther +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean IsProperty +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean get_IsArgument() +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean get_IsCustomOperation() +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean get_IsEvent() +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean get_IsField() +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean get_IsMethod() +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean get_IsOther() +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean get_IsProperty() +FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind Argument +FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind CustomOperation +FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind Event +FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind Field +FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind NewMethod(Boolean) +FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind Other +FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind Property +FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind get_Argument() +FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind get_CustomOperation() +FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind get_Event() +FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind get_Field() +FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind get_Other() +FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind get_Property() +FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method +FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind+Tags +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.CompletionItemKind) +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Int32 Tag +FSharp.Compiler.SourceCodeServices.CompletionItemKind: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.CompletionItemKind: System.String ToString() +FSharp.Compiler.SourceCodeServices.DebuggerEnvironment: System.Guid GetLanguageID() +FSharp.Compiler.SourceCodeServices.Entity: Boolean Equals(FSharp.Compiler.SourceCodeServices.Entity) +FSharp.Compiler.SourceCodeServices.Entity: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.Entity: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.Entity: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.Entity) +FSharp.Compiler.SourceCodeServices.Entity: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.Entity: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.Entity: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.Entity: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.Entity: Microsoft.FSharp.Core.FSharpOption`1[System.String] Namespace +FSharp.Compiler.SourceCodeServices.Entity: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Namespace() +FSharp.Compiler.SourceCodeServices.Entity: System.String FullRelativeName +FSharp.Compiler.SourceCodeServices.Entity: System.String LastIdent +FSharp.Compiler.SourceCodeServices.Entity: System.String Name +FSharp.Compiler.SourceCodeServices.Entity: System.String Qualifier +FSharp.Compiler.SourceCodeServices.Entity: System.String ToString() +FSharp.Compiler.SourceCodeServices.Entity: System.String get_FullRelativeName() +FSharp.Compiler.SourceCodeServices.Entity: System.String get_LastIdent() +FSharp.Compiler.SourceCodeServices.Entity: System.String get_Name() +FSharp.Compiler.SourceCodeServices.Entity: System.String get_Qualifier() +FSharp.Compiler.SourceCodeServices.Entity: Void .ctor(System.String, System.String, Microsoft.FSharp.Core.FSharpOption`1[System.String], System.String, System.String) +FSharp.Compiler.SourceCodeServices.EntityCache: T Locking[T](Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SourceCodeServices.IAssemblyContentCache,T]) +FSharp.Compiler.SourceCodeServices.EntityCache: Void .ctor() +FSharp.Compiler.SourceCodeServices.EntityCache: Void Clear() +FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean Equals(FSharp.Compiler.SourceCodeServices.EntityKind) +FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean IsAttribute +FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean IsFunctionOrValue +FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean IsModule +FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean IsType +FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean get_IsAttribute() +FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean get_IsFunctionOrValue() +FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean get_IsModule() +FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean get_IsType() +FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean get_isActivePattern() +FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean isActivePattern +FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.EntityKind) +FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Int32 Tag +FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: System.String ToString() +FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean Equals(FSharp.Compiler.SourceCodeServices.EntityKind) +FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean IsAttribute +FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean IsFunctionOrValue +FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean IsModule +FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean IsType +FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean get_IsAttribute() +FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean get_IsFunctionOrValue() +FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean get_IsModule() +FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean get_IsType() +FSharp.Compiler.SourceCodeServices.EntityKind+Module: FSharp.Compiler.SourceCodeServices.ModuleKind Item +FSharp.Compiler.SourceCodeServices.EntityKind+Module: FSharp.Compiler.SourceCodeServices.ModuleKind get_Item() +FSharp.Compiler.SourceCodeServices.EntityKind+Module: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.EntityKind) +FSharp.Compiler.SourceCodeServices.EntityKind+Module: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.EntityKind+Module: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.EntityKind+Module: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.EntityKind+Module: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.EntityKind+Module: Int32 Tag +FSharp.Compiler.SourceCodeServices.EntityKind+Module: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.EntityKind+Module: System.String ToString() +FSharp.Compiler.SourceCodeServices.EntityKind+Tags: Int32 Attribute +FSharp.Compiler.SourceCodeServices.EntityKind+Tags: Int32 FunctionOrValue +FSharp.Compiler.SourceCodeServices.EntityKind+Tags: Int32 Module +FSharp.Compiler.SourceCodeServices.EntityKind+Tags: Int32 Type +FSharp.Compiler.SourceCodeServices.EntityKind: Boolean Equals(FSharp.Compiler.SourceCodeServices.EntityKind) +FSharp.Compiler.SourceCodeServices.EntityKind: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.EntityKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.EntityKind: Boolean IsAttribute +FSharp.Compiler.SourceCodeServices.EntityKind: Boolean IsFunctionOrValue +FSharp.Compiler.SourceCodeServices.EntityKind: Boolean IsModule +FSharp.Compiler.SourceCodeServices.EntityKind: Boolean IsType +FSharp.Compiler.SourceCodeServices.EntityKind: Boolean get_IsAttribute() +FSharp.Compiler.SourceCodeServices.EntityKind: Boolean get_IsFunctionOrValue() +FSharp.Compiler.SourceCodeServices.EntityKind: Boolean get_IsModule() +FSharp.Compiler.SourceCodeServices.EntityKind: Boolean get_IsType() +FSharp.Compiler.SourceCodeServices.EntityKind: FSharp.Compiler.SourceCodeServices.EntityKind Attribute +FSharp.Compiler.SourceCodeServices.EntityKind: FSharp.Compiler.SourceCodeServices.EntityKind NewFunctionOrValue(Boolean) +FSharp.Compiler.SourceCodeServices.EntityKind: FSharp.Compiler.SourceCodeServices.EntityKind NewModule(FSharp.Compiler.SourceCodeServices.ModuleKind) +FSharp.Compiler.SourceCodeServices.EntityKind: FSharp.Compiler.SourceCodeServices.EntityKind Type +FSharp.Compiler.SourceCodeServices.EntityKind: FSharp.Compiler.SourceCodeServices.EntityKind get_Attribute() +FSharp.Compiler.SourceCodeServices.EntityKind: FSharp.Compiler.SourceCodeServices.EntityKind get_Type() +FSharp.Compiler.SourceCodeServices.EntityKind: FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue +FSharp.Compiler.SourceCodeServices.EntityKind: FSharp.Compiler.SourceCodeServices.EntityKind+Module +FSharp.Compiler.SourceCodeServices.EntityKind: FSharp.Compiler.SourceCodeServices.EntityKind+Tags +FSharp.Compiler.SourceCodeServices.EntityKind: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.EntityKind) +FSharp.Compiler.SourceCodeServices.EntityKind: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.EntityKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.EntityKind: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.EntityKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.EntityKind: Int32 Tag +FSharp.Compiler.SourceCodeServices.EntityKind: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.EntityKind: System.String ToString() +FSharp.Compiler.SourceCodeServices.Extensions: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType] FSharpMemberOrFunctionOrValue.get_FullTypeSafe(FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue) +FSharp.Compiler.SourceCodeServices.Extensions: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] FSharpMemberOrFunctionOrValue.TryGetFullCompiledOperatorNameIdents(FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue) +FSharp.Compiler.SourceCodeServices.Extensions: Microsoft.FSharp.Core.FSharpOption`1[System.String] FSharpEntity.TryGetFullCompiledName(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Extensions: Microsoft.FSharp.Core.FSharpOption`1[System.String] FSharpEntity.TryGetFullDisplayName(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Extensions: Microsoft.FSharp.Core.FSharpOption`1[System.String] FSharpEntity.TryGetFullName(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Extensions: Microsoft.FSharp.Core.FSharpOption`1[System.String] FSharpMemberOrFunctionOrValue.TryGetFullDisplayName(FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue) +FSharp.Compiler.SourceCodeServices.Extensions: System.Collections.Generic.IEnumerable`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] FSharpAssemblySignature.TryGetEntities(FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature) +FSharp.Compiler.SourceCodeServices.Extensions: System.Collections.Generic.IEnumerable`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] FSharpEntity.get_PublicNestedEntities(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Extensions: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue] FSharpEntity.get_TryGetMembersFunctionsAndValues(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalSymbol) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean IsConstructor +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean IsEvent +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean IsField +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean IsMethod +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean IsProperty +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean IsType +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean get_IsConstructor() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean get_IsEvent() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean get_IsField() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean get_IsMethod() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean get_IsProperty() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean get_IsType() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalSymbol) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Int32 Tag +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.ParamTypeSymbol] args +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.ParamTypeSymbol] get_args() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: System.String ToString() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: System.String get_typeName() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: System.String typeName +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalSymbol) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean IsConstructor +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean IsEvent +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean IsField +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean IsMethod +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean IsProperty +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean IsType +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean get_IsConstructor() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean get_IsEvent() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean get_IsField() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean get_IsMethod() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean get_IsProperty() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean get_IsType() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalSymbol) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Int32 Tag +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: System.String ToString() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: System.String get_name() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: System.String get_typeName() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: System.String name +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: System.String typeName +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalSymbol) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean IsConstructor +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean IsEvent +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean IsField +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean IsMethod +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean IsProperty +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean IsType +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean get_IsConstructor() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean get_IsEvent() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean get_IsField() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean get_IsMethod() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean get_IsProperty() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean get_IsType() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalSymbol) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Int32 Tag +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: System.String ToString() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: System.String get_name() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: System.String get_typeName() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: System.String name +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: System.String typeName +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalSymbol) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean IsConstructor +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean IsEvent +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean IsField +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean IsMethod +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean IsProperty +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean IsType +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean get_IsConstructor() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean get_IsEvent() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean get_IsField() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean get_IsMethod() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean get_IsProperty() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean get_IsType() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalSymbol) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Int32 Tag +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Int32 genericArity +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Int32 get_genericArity() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.ParamTypeSymbol] get_paramSyms() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.ParamTypeSymbol] paramSyms +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: System.String ToString() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: System.String get_name() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: System.String get_typeName() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: System.String name +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: System.String typeName +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalSymbol) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean IsConstructor +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean IsEvent +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean IsField +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean IsMethod +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean IsProperty +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean IsType +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean get_IsConstructor() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean get_IsEvent() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean get_IsField() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean get_IsMethod() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean get_IsProperty() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean get_IsType() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalSymbol) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Int32 Tag +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: System.String ToString() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: System.String get_name() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: System.String get_typeName() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: System.String name +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: System.String typeName +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Tags: Int32 Constructor +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Tags: Int32 Event +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Tags: Int32 Field +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Tags: Int32 Method +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Tags: Int32 Property +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Tags: Int32 Type +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalSymbol) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean IsConstructor +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean IsEvent +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean IsField +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean IsMethod +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean IsProperty +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean IsType +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean get_IsConstructor() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean get_IsEvent() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean get_IsField() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean get_IsMethod() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean get_IsProperty() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean get_IsType() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalSymbol) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Int32 Tag +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: System.String ToString() +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: System.String fullName +FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: System.String get_fullName() +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalSymbol) +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean IsConstructor +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean IsEvent +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean IsField +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean IsMethod +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean IsProperty +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean IsType +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean get_IsConstructor() +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean get_IsEvent() +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean get_IsField() +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean get_IsMethod() +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean get_IsProperty() +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean get_IsType() +FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol NewConstructor(System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.ParamTypeSymbol]) +FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol NewEvent(System.String, System.String) +FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol NewField(System.String, System.String) +FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol NewMethod(System.String, System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.ParamTypeSymbol], Int32) +FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol NewProperty(System.String, System.String) +FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol NewType(System.String) +FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor +FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event +FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field +FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method +FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property +FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol+Tags +FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalSymbol) +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Int32 Tag +FSharp.Compiler.SourceCodeServices.ExternalSymbol: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.ExternalSymbol: System.String ToString() +FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalType) +FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean IsArray +FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean IsPointer +FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean IsType +FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean IsTypeVar +FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean get_IsArray() +FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean get_IsPointer() +FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean get_IsType() +FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean get_IsTypeVar() +FSharp.Compiler.SourceCodeServices.ExternalType+Array: FSharp.Compiler.SourceCodeServices.ExternalType get_inner() +FSharp.Compiler.SourceCodeServices.ExternalType+Array: FSharp.Compiler.SourceCodeServices.ExternalType inner +FSharp.Compiler.SourceCodeServices.ExternalType+Array: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalType) +FSharp.Compiler.SourceCodeServices.ExternalType+Array: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalType+Array: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.ExternalType+Array: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.ExternalType+Array: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalType+Array: Int32 Tag +FSharp.Compiler.SourceCodeServices.ExternalType+Array: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.ExternalType+Array: System.String ToString() +FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalType) +FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean IsArray +FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean IsPointer +FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean IsType +FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean IsTypeVar +FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean get_IsArray() +FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean get_IsPointer() +FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean get_IsType() +FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean get_IsTypeVar() +FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: FSharp.Compiler.SourceCodeServices.ExternalType get_inner() +FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: FSharp.Compiler.SourceCodeServices.ExternalType inner +FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalType) +FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Int32 Tag +FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: System.String ToString() +FSharp.Compiler.SourceCodeServices.ExternalType+Tags: Int32 Array +FSharp.Compiler.SourceCodeServices.ExternalType+Tags: Int32 Pointer +FSharp.Compiler.SourceCodeServices.ExternalType+Tags: Int32 Type +FSharp.Compiler.SourceCodeServices.ExternalType+Tags: Int32 TypeVar +FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalType) +FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean IsArray +FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean IsPointer +FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean IsType +FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean IsTypeVar +FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean get_IsArray() +FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean get_IsPointer() +FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean get_IsType() +FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean get_IsTypeVar() +FSharp.Compiler.SourceCodeServices.ExternalType+Type: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalType) +FSharp.Compiler.SourceCodeServices.ExternalType+Type: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalType+Type: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.ExternalType+Type: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.ExternalType+Type: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalType+Type: Int32 Tag +FSharp.Compiler.SourceCodeServices.ExternalType+Type: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.ExternalType+Type: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.ExternalType] genericArgs +FSharp.Compiler.SourceCodeServices.ExternalType+Type: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.ExternalType] get_genericArgs() +FSharp.Compiler.SourceCodeServices.ExternalType+Type: System.String ToString() +FSharp.Compiler.SourceCodeServices.ExternalType+Type: System.String fullName +FSharp.Compiler.SourceCodeServices.ExternalType+Type: System.String get_fullName() +FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalType) +FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean IsArray +FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean IsPointer +FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean IsType +FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean IsTypeVar +FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean get_IsArray() +FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean get_IsPointer() +FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean get_IsType() +FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean get_IsTypeVar() +FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalType) +FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Int32 Tag +FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: System.String ToString() +FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: System.String get_typeName() +FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: System.String typeName +FSharp.Compiler.SourceCodeServices.ExternalType: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalType) +FSharp.Compiler.SourceCodeServices.ExternalType: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalType: Boolean IsArray +FSharp.Compiler.SourceCodeServices.ExternalType: Boolean IsPointer +FSharp.Compiler.SourceCodeServices.ExternalType: Boolean IsType +FSharp.Compiler.SourceCodeServices.ExternalType: Boolean IsTypeVar +FSharp.Compiler.SourceCodeServices.ExternalType: Boolean get_IsArray() +FSharp.Compiler.SourceCodeServices.ExternalType: Boolean get_IsPointer() +FSharp.Compiler.SourceCodeServices.ExternalType: Boolean get_IsType() +FSharp.Compiler.SourceCodeServices.ExternalType: Boolean get_IsTypeVar() +FSharp.Compiler.SourceCodeServices.ExternalType: FSharp.Compiler.SourceCodeServices.ExternalType NewArray(FSharp.Compiler.SourceCodeServices.ExternalType) +FSharp.Compiler.SourceCodeServices.ExternalType: FSharp.Compiler.SourceCodeServices.ExternalType NewPointer(FSharp.Compiler.SourceCodeServices.ExternalType) +FSharp.Compiler.SourceCodeServices.ExternalType: FSharp.Compiler.SourceCodeServices.ExternalType NewType(System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.ExternalType]) +FSharp.Compiler.SourceCodeServices.ExternalType: FSharp.Compiler.SourceCodeServices.ExternalType NewTypeVar(System.String) +FSharp.Compiler.SourceCodeServices.ExternalType: FSharp.Compiler.SourceCodeServices.ExternalType+Array +FSharp.Compiler.SourceCodeServices.ExternalType: FSharp.Compiler.SourceCodeServices.ExternalType+Pointer +FSharp.Compiler.SourceCodeServices.ExternalType: FSharp.Compiler.SourceCodeServices.ExternalType+Tags +FSharp.Compiler.SourceCodeServices.ExternalType: FSharp.Compiler.SourceCodeServices.ExternalType+Type +FSharp.Compiler.SourceCodeServices.ExternalType: FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar +FSharp.Compiler.SourceCodeServices.ExternalType: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalType) +FSharp.Compiler.SourceCodeServices.ExternalType: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.ExternalType: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.ExternalType: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.ExternalType: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ExternalType: Int32 Tag +FSharp.Compiler.SourceCodeServices.ExternalType: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.ExternalType: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: Boolean IsInArg +FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: Boolean IsOptionalArg +FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: Boolean IsOutArg +FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: Boolean get_IsInArg() +FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: Boolean get_IsOptionalArg() +FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: Boolean get_IsOutArg() +FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: FSharp.Compiler.SourceCodeServices.FSharpType Type +FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: FSharp.Compiler.SourceCodeServices.FSharpType get_Type() +FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: Microsoft.FSharp.Core.FSharpOption`1[System.String] Name +FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Name() +FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] Attributes +FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_Attributes() +FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: FSharp.Compiler.SourceCodeServices.FSharpType AbstractReturnType +FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: FSharp.Compiler.SourceCodeServices.FSharpType DeclaringType +FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: FSharp.Compiler.SourceCodeServices.FSharpType get_AbstractReturnType() +FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: FSharp.Compiler.SourceCodeServices.FSharpType get_DeclaringType() +FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] DeclaringTypeGenericParameters +FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] MethodGenericParameters +FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] get_DeclaringTypeGenericParameters() +FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] get_MethodGenericParameters() +FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter]] AbstractArguments +FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter]] get_AbstractArguments() +FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: System.String Name +FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: System.String get_Name() +FSharp.Compiler.SourceCodeServices.FSharpAccessibility: Boolean IsInternal +FSharp.Compiler.SourceCodeServices.FSharpAccessibility: Boolean IsPrivate +FSharp.Compiler.SourceCodeServices.FSharpAccessibility: Boolean IsProtected +FSharp.Compiler.SourceCodeServices.FSharpAccessibility: Boolean IsPublic +FSharp.Compiler.SourceCodeServices.FSharpAccessibility: Boolean get_IsInternal() +FSharp.Compiler.SourceCodeServices.FSharpAccessibility: Boolean get_IsPrivate() +FSharp.Compiler.SourceCodeServices.FSharpAccessibility: Boolean get_IsProtected() +FSharp.Compiler.SourceCodeServices.FSharpAccessibility: Boolean get_IsPublic() +FSharp.Compiler.SourceCodeServices.FSharpAccessibility: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Boolean IsAccessible(FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights) +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Boolean IsEffectivelySameAs(FSharp.Compiler.SourceCodeServices.FSharpSymbol) +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Boolean IsExplicitlySuppressed +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Boolean get_IsExplicitlySuppressed() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup Group +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup get_Group() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: FSharp.Compiler.SourceCodeServices.FSharpAssembly Assembly +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: FSharp.Compiler.SourceCodeServices.FSharpAssembly get_Assembly() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Int32 GetEffectivelySameAsHash() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Int32 Index +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Int32 get_Index() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] DeclarationLocation +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] ImplementationLocation +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] SignatureLocation +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_DeclarationLocation() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] XmlDoc +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String DisplayName +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String FullName +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String Name +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String XmlDocSig +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String get_DisplayName() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String get_FullName() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String get_Name() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String get_XmlDocSig() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: range DeclarationLocation +FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: range get_DeclarationLocation() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup: Boolean IsTotal +FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup: Boolean get_IsTotal() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup: FSharp.Compiler.SourceCodeServices.FSharpType OverallType +FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup: FSharp.Compiler.SourceCodeServices.FSharpType get_OverallType() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] DeclaringEntity +FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] get_DeclaringEntity() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup: Microsoft.FSharp.Core.FSharpOption`1[System.String] Name +FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Name() +FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup: System.Collections.Generic.IList`1[System.String] Names +FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup: System.Collections.Generic.IList`1[System.String] get_Names() +FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails: FSharp.Compiler.SourceCodeServices.FSharpAssembly Assembly +FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails: FSharp.Compiler.SourceCodeServices.FSharpAssembly get_Assembly() +FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails: Microsoft.FSharp.Collections.FSharpList`1[System.String] EnclosingCompiledTypeNames +FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_EnclosingCompiledTypeNames() +FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails: System.String CompiledName +FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails: System.String get_CompiledName() +FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails: System.String[] SortedFieldNames +FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails: System.String[] get_SortedFieldNames() +FSharp.Compiler.SourceCodeServices.FSharpAssembly: Boolean IsProviderGenerated +FSharp.Compiler.SourceCodeServices.FSharpAssembly: Boolean get_IsProviderGenerated() +FSharp.Compiler.SourceCodeServices.FSharpAssembly: FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature Contents +FSharp.Compiler.SourceCodeServices.FSharpAssembly: FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature get_Contents() +FSharp.Compiler.SourceCodeServices.FSharpAssembly: Microsoft.FSharp.Core.FSharpOption`1[System.String] FileName +FSharp.Compiler.SourceCodeServices.FSharpAssembly: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_FileName() +FSharp.Compiler.SourceCodeServices.FSharpAssembly: System.String CodeLocation +FSharp.Compiler.SourceCodeServices.FSharpAssembly: System.String QualifiedName +FSharp.Compiler.SourceCodeServices.FSharpAssembly: System.String SimpleName +FSharp.Compiler.SourceCodeServices.FSharpAssembly: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpAssembly: System.String get_CodeLocation() +FSharp.Compiler.SourceCodeServices.FSharpAssembly: System.String get_QualifiedName() +FSharp.Compiler.SourceCodeServices.FSharpAssembly: System.String get_SimpleName() +FSharp.Compiler.SourceCodeServices.FSharpAssemblyContents: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents] ImplementationFiles +FSharp.Compiler.SourceCodeServices.FSharpAssemblyContents: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents] get_ImplementationFiles() +FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] FindEntityByPath(Microsoft.FSharp.Collections.FSharpList`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] Attributes +FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_Attributes() +FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] Entities +FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] get_Entities() +FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpAttribute: Boolean IsUnresolved +FSharp.Compiler.SourceCodeServices.FSharpAttribute: Boolean get_IsUnresolved() +FSharp.Compiler.SourceCodeServices.FSharpAttribute: FSharp.Compiler.SourceCodeServices.FSharpEntity AttributeType +FSharp.Compiler.SourceCodeServices.FSharpAttribute: FSharp.Compiler.SourceCodeServices.FSharpEntity get_AttributeType() +FSharp.Compiler.SourceCodeServices.FSharpAttribute: System.Collections.Generic.IList`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpType,System.Object]] ConstructorArguments +FSharp.Compiler.SourceCodeServices.FSharpAttribute: System.Collections.Generic.IList`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpType,System.Object]] get_ConstructorArguments() +FSharp.Compiler.SourceCodeServices.FSharpAttribute: System.Collections.Generic.IList`1[System.Tuple`4[FSharp.Compiler.SourceCodeServices.FSharpType,System.String,System.Boolean,System.Object]] NamedArguments +FSharp.Compiler.SourceCodeServices.FSharpAttribute: System.Collections.Generic.IList`1[System.Tuple`4[FSharp.Compiler.SourceCodeServices.FSharpType,System.String,System.Boolean,System.Object]] get_NamedArguments() +FSharp.Compiler.SourceCodeServices.FSharpAttribute: System.String Format(FSharp.Compiler.SourceCodeServices.FSharpDisplayContext) +FSharp.Compiler.SourceCodeServices.FSharpAttribute: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpAttribute: range Range +FSharp.Compiler.SourceCodeServices.FSharpAttribute: range get_Range() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Boolean IsAborted +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Boolean IsSucceeded +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Boolean get_IsAborted() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Boolean get_IsSucceeded() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults Item +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults get_Item() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Tags: Int32 Aborted +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Tags: Int32 Succeeded +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Boolean IsAborted +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Boolean IsSucceeded +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Boolean get_IsAborted() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Boolean get_IsSucceeded() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer Aborted +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer NewSucceeded(FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer get_Aborted() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Tags +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: Boolean HasFullTypeCheckInfo +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: Boolean get_HasFullTypeCheckInfo() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature PartialAssemblySignature +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature get_PartialAssemblySignature() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[] Errors +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[] get_Errors() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration[] OpenDeclarations +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration[] get_OpenDeclarations() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpProjectContext ProjectContext +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpProjectContext get_ProjectContext() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo GetDeclarationListInfo(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpParseFileResults], Int32, System.String, FSharp.Compiler.PartialLongName, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.AssemblySymbol]]]) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult GetDeclarationLocation(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpMethodGroup GetMethods(Int32, Int32, System.String, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: System.Collections.Generic.IEnumerable`1[FSharp.Compiler.SourceCodeServices.FSharpSymbolUse] GetAllUsesOfAllSymbolsInFile(Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpSymbolUse[] GetUsesOfSymbolInFile(FSharp.Compiler.SourceCodeServices.FSharpSymbol, Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[Internal.Utilities.StructuredFormat.Layout] GetStructuredToolTipText(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], Int32) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[System.String] GetToolTipText(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], Int32) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpSymbolUse]] GetDeclarationListSymbols(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpParseFileResults], Int32, System.String, FSharp.Compiler.PartialLongName, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.AssemblySymbol]]]) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpDisplayContext] GetDisplayContextForPos(pos) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpSymbolUse] GetSymbolUseAtLocation(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpSymbolUse]] GetMethodsAsSymbols(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[System.String] GetF1Keyword(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: Boolean IsRelativeNameResolvableFromSymbol(pos, Microsoft.FSharp.Collections.FSharpList`1[System.String], FSharp.Compiler.SourceCodeServices.FSharpSymbol) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents] ImplementationFile +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents] get_ImplementationFile() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: System.String[] DependencyFiles +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: System.String[] get_DependencyFiles() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: System.Tuple`2[FSharp.Compiler.Range+range,System.Int32][] GetFormatSpecifierLocationsAndArity() +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: System.ValueTuple`2[FSharp.Compiler.Range+range,FSharp.Compiler.SourceCodeServices.SemanticClassificationType][] GetSemanticClassification(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range]) +FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: range[] GetFormatSpecifierLocations() +FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: Boolean HasCriticalErrors +FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: Boolean get_HasCriticalErrors() +FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpAssemblyContents AssemblyContents +FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpAssemblyContents GetOptimizedAssemblyContents() +FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpAssemblyContents get_AssemblyContents() +FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature AssemblySignature +FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature get_AssemblySignature() +FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[] Errors +FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[] get_Errors() +FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpProjectContext ProjectContext +FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpProjectContext get_ProjectContext() +FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpSymbolUse[] GetAllUsesOfAllSymbols(Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpSymbolUse[] GetUsesOfSymbol(FSharp.Compiler.SourceCodeServices.FSharpSymbol, Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: System.String[] DependencyFiles +FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: System.String[] get_DependencyFiles() +FSharp.Compiler.SourceCodeServices.FSharpChecker: Boolean ImplicitlyStartBackgroundWork +FSharp.Compiler.SourceCodeServices.FSharpChecker: Boolean get_ImplicitlyStartBackgroundWork() +FSharp.Compiler.SourceCodeServices.FSharpChecker: FSharp.Compiler.SourceCodeServices.FSharpChecker Create(Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.ReferenceResolver+Resolver], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.String,System.DateTime],Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Object,System.IntPtr,System.Int32]]]], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: FSharp.Compiler.SourceCodeServices.FSharpChecker Instance +FSharp.Compiler.SourceCodeServices.FSharpChecker: FSharp.Compiler.SourceCodeServices.FSharpChecker get_Instance() +FSharp.Compiler.SourceCodeServices.FSharpChecker: FSharp.Compiler.SourceCodeServices.FSharpProjectOptions GetProjectOptionsFromCommandLineArgs(System.String, System.String[], Microsoft.FSharp.Core.FSharpOption`1[System.DateTime], Microsoft.FSharp.Core.FSharpOption`1[System.Object]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: FSharp.Compiler.SourceCodeServices.FSharpTokenInfo[][] TokenizeFile(System.String) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Int32 CurrentQueueLength +FSharp.Compiler.SourceCodeServices.FSharpChecker: Int32 GlobalForegroundParseCountStatistic +FSharp.Compiler.SourceCodeServices.FSharpChecker: Int32 GlobalForegroundTypeCheckCountStatistic +FSharp.Compiler.SourceCodeServices.FSharpChecker: Int32 MaxMemory +FSharp.Compiler.SourceCodeServices.FSharpChecker: Int32 PauseBeforeBackgroundWork +FSharp.Compiler.SourceCodeServices.FSharpChecker: Int32 get_CurrentQueueLength() +FSharp.Compiler.SourceCodeServices.FSharpChecker: Int32 get_GlobalForegroundParseCountStatistic() +FSharp.Compiler.SourceCodeServices.FSharpChecker: Int32 get_GlobalForegroundTypeCheckCountStatistic() +FSharp.Compiler.SourceCodeServices.FSharpChecker: Int32 get_MaxMemory() +FSharp.Compiler.SourceCodeServices.FSharpChecker: Int32 get_PauseBeforeBackgroundWork() +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer] CheckFileInProject(FSharp.Compiler.SourceCodeServices.FSharpParseFileResults, System.String, Int32, FSharp.Compiler.Text.ISourceText, FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults] ParseAndCheckProject(FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.SourceCodeServices.FSharpParseFileResults] GetBackgroundParseResultsForFileInProject(System.String, FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.SourceCodeServices.FSharpParseFileResults] ParseFile(System.String, FSharp.Compiler.Text.ISourceText, FSharp.Compiler.SourceCodeServices.FSharpParsingOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.SourceCodeServices.FSharpParseFileResults] ParseFileInProject(System.String, System.String, FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.SourceCodeServices.FSharpParseFileResults] ParseFileNoCache(System.String, FSharp.Compiler.Text.ISourceText, FSharp.Compiler.SourceCodeServices.FSharpParsingOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer]] CheckFileInProjectAllowingStaleCachedResults(FSharp.Compiler.SourceCodeServices.FSharpParseFileResults, System.String, Int32, System.String, FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] NotifyProjectCleaned(FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Collections.Generic.IEnumerable`1[FSharp.Compiler.Range+range]] FindBackgroundReferencesInFile(System.String, FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, FSharp.Compiler.SourceCodeServices.FSharpSymbol, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.Range+range,FSharp.Compiler.Range+range][]] MatchBraces(System.String, FSharp.Compiler.Text.ISourceText, FSharp.Compiler.SourceCodeServices.FSharpParsingOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.Range+range,FSharp.Compiler.Range+range][]] MatchBraces(System.String, System.String, FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[],System.Int32]] Compile(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedInput], System.String, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[],System.Int32]] Compile(System.String[], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpParseFileResults,FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer]] ParseAndCheckFileInProject(System.String, Int32, FSharp.Compiler.Text.ISourceText, FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpParseFileResults,FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults]] GetBackgroundCheckResultsForFileInProject(System.String, FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpProjectOptions,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo]]] GetProjectOptionsFromScript(System.String, FSharp.Compiler.Text.ISourceText, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.DateTime], Microsoft.FSharp.Core.FSharpOption`1[System.String[]], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Object], Microsoft.FSharp.Core.FSharpOption`1[System.Int64], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[],System.Int32,Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.Assembly]]] CompileToDynamicAssembly(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedInput], System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.IO.TextWriter,System.IO.TextWriter]], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[],System.Int32,Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.Assembly]]] CompileToDynamicAssembly(System.String[], Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.IO.TextWriter,System.IO.TextWriter]], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.ValueTuple`2[FSharp.Compiler.Range+range,FSharp.Compiler.SourceCodeServices.SemanticClassificationType][]] GetBackgroundSemanticClassificationForFile(System.String, FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit] MaxMemoryReached +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit] get_MaxMemoryReached() +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]],System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]] BeforeBackgroundFileCheck +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]],System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]] FileChecked +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]],System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]] FileParsed +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]],System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]] ProjectChecked +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]],System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]] get_BeforeBackgroundFileCheck() +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]],System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]] get_FileChecked() +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]],System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]] get_FileParsed() +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]],System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]] get_ProjectChecked() +FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpParseFileResults,FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults,System.Int32]] TryGetRecentCheckResultsForFile(System.String, FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.ISourceText], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpParsingOptions,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo]] GetParsingOptionsFromCommandLineArgs(Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpParsingOptions,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo]] GetParsingOptionsFromCommandLineArgs(Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpParsingOptions,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo]] GetParsingOptionsFromProjectOptions(FSharp.Compiler.SourceCodeServices.FSharpProjectOptions) +FSharp.Compiler.SourceCodeServices.FSharpChecker: System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpTokenInfo[],FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState] TokenizeLine(System.String, FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Void CheckProjectInBackground(FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Void ClearCache(System.Collections.Generic.IEnumerable`1[FSharp.Compiler.SourceCodeServices.FSharpProjectOptions], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Void ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() +FSharp.Compiler.SourceCodeServices.FSharpChecker: Void InvalidateAll() +FSharp.Compiler.SourceCodeServices.FSharpChecker: Void InvalidateConfiguration(FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Void StopBackgroundCompile() +FSharp.Compiler.SourceCodeServices.FSharpChecker: Void WaitForBackgroundCompile() +FSharp.Compiler.SourceCodeServices.FSharpChecker: Void set_ImplicitlyStartBackgroundWork(Boolean) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Void set_MaxMemory(Int32) +FSharp.Compiler.SourceCodeServices.FSharpChecker: Void set_PauseBeforeBackgroundWork(Int32) +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo: Boolean IsError +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo: Boolean IsForType +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo: Boolean get_IsError() +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo: Boolean get_IsForType() +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo: FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo Empty +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo: FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo get_Empty() +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo: FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem[] Items +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo: FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem[] get_Items() +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Boolean IsOwnMember +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Boolean IsResolved +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Boolean get_IsOwnMember() +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Boolean get_IsResolved() +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: FSharp.Compiler.SourceCodeServices.CompletionItemKind Kind +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: FSharp.Compiler.SourceCodeServices.CompletionItemKind get_Kind() +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: FSharp.Compiler.SourceCodeServices.FSharpGlyph Glyph +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Glyph() +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Int32 MinorPriority +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Int32 get_MinorPriority() +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[Internal.Utilities.StructuredFormat.Layout]] StructuredDescriptionTextAsync +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[Internal.Utilities.StructuredFormat.Layout]] get_StructuredDescriptionTextAsync() +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[System.String]] DescriptionTextAsync +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[System.String]] get_DescriptionTextAsync() +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[Internal.Utilities.StructuredFormat.Layout] StructuredDescriptionText +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[Internal.Utilities.StructuredFormat.Layout] get_StructuredDescriptionText() +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[System.String] DescriptionText +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[System.String] get_DescriptionText() +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpAccessibility] Accessibility +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpAccessibility] get_Accessibility() +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Microsoft.FSharp.Core.FSharpOption`1[System.String] NamespaceToOpen +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_NamespaceToOpen() +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: System.String FullName +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: System.String Name +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: System.String NameInCode +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: System.String get_FullName() +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: System.String get_Name() +FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: System.String get_NameInCode() +FSharp.Compiler.SourceCodeServices.FSharpDelegateSignature: FSharp.Compiler.SourceCodeServices.FSharpType DelegateReturnType +FSharp.Compiler.SourceCodeServices.FSharpDelegateSignature: FSharp.Compiler.SourceCodeServices.FSharpType get_DelegateReturnType() +FSharp.Compiler.SourceCodeServices.FSharpDelegateSignature: System.Collections.Generic.IList`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[System.String],FSharp.Compiler.SourceCodeServices.FSharpType]] DelegateArguments +FSharp.Compiler.SourceCodeServices.FSharpDelegateSignature: System.Collections.Generic.IList`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[System.String],FSharp.Compiler.SourceCodeServices.FSharpType]] get_DelegateArguments() +FSharp.Compiler.SourceCodeServices.FSharpDelegateSignature: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpDisplayContext: FSharp.Compiler.SourceCodeServices.FSharpDisplayContext Empty +FSharp.Compiler.SourceCodeServices.FSharpDisplayContext: FSharp.Compiler.SourceCodeServices.FSharpDisplayContext WithShortTypeNames(Boolean) +FSharp.Compiler.SourceCodeServices.FSharpDisplayContext: FSharp.Compiler.SourceCodeServices.FSharpDisplayContext get_Empty() +FSharp.Compiler.SourceCodeServices.FSharpDisplayContext: FSharp.Compiler.SourceCodeServices.FSharpDisplayContext WithPrefixGenericParameters() +FSharp.Compiler.SourceCodeServices.FSharpDisplayContext: FSharp.Compiler.SourceCodeServices.FSharpDisplayContext WithSuffixGenericParameters() +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind+Tags: Int32 Class +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind+Tags: Int32 DU +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind+Tags: Int32 Enum +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind+Tags: Int32 Exception +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind+Tags: Int32 Interface +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind+Tags: Int32 Module +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind+Tags: Int32 Namespace +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind+Tags: Int32 Record +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind) +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean IsClass +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean IsDU +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean IsEnum +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean IsException +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean IsInterface +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean IsModule +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean IsNamespace +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean IsRecord +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean get_IsClass() +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean get_IsDU() +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean get_IsEnum() +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean get_IsException() +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean get_IsInterface() +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean get_IsModule() +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean get_IsNamespace() +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean get_IsRecord() +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind Class +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind DU +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind Enum +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind Exception +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind Interface +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind Module +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind Namespace +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind Record +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind get_Class() +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind get_DU() +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind get_Enum() +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind get_Exception() +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind get_Interface() +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind get_Module() +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind get_Namespace() +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind get_Record() +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind+Tags +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind) +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean HasAssemblyCodeRepresentation +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean HasFSharpModuleSuffix +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsAccessible(FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights) +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsArrayType +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsAttributeType +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsByRef +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsClass +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsDelegate +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsEffectivelySameAs(FSharp.Compiler.SourceCodeServices.FSharpSymbol) +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsEnum +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsExplicitlySuppressed +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsFSharp +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsFSharpAbbreviation +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsFSharpExceptionDeclaration +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsFSharpModule +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsFSharpRecord +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsFSharpUnion +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsInterface +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsMeasure +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsNamespace +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsOpaque +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsProvided +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsProvidedAndErased +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsProvidedAndGenerated +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsStaticInstantiation +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsUnresolved +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsValueType +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean UsesPrefixDisplay +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_HasAssemblyCodeRepresentation() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_HasFSharpModuleSuffix() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsArrayType() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsAttributeType() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsByRef() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsClass() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsDelegate() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsEnum() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsExplicitlySuppressed() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsFSharp() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsFSharpAbbreviation() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsFSharpExceptionDeclaration() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsFSharpModule() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsFSharpRecord() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsFSharpUnion() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsInterface() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsMeasure() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsNamespace() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsOpaque() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsProvided() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsProvidedAndErased() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsProvidedAndGenerated() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsStaticInstantiation() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsUnresolved() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsValueType() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_UsesPrefixDisplay() +FSharp.Compiler.SourceCodeServices.FSharpEntity: FSharp.Compiler.SourceCodeServices.FSharpAccessibility Accessibility +FSharp.Compiler.SourceCodeServices.FSharpEntity: FSharp.Compiler.SourceCodeServices.FSharpAccessibility RepresentationAccessibility +FSharp.Compiler.SourceCodeServices.FSharpEntity: FSharp.Compiler.SourceCodeServices.FSharpAccessibility get_Accessibility() +FSharp.Compiler.SourceCodeServices.FSharpEntity: FSharp.Compiler.SourceCodeServices.FSharpAccessibility get_RepresentationAccessibility() +FSharp.Compiler.SourceCodeServices.FSharpEntity: FSharp.Compiler.SourceCodeServices.FSharpAssembly Assembly +FSharp.Compiler.SourceCodeServices.FSharpEntity: FSharp.Compiler.SourceCodeServices.FSharpAssembly get_Assembly() +FSharp.Compiler.SourceCodeServices.FSharpEntity: FSharp.Compiler.SourceCodeServices.FSharpDelegateSignature FSharpDelegateSignature +FSharp.Compiler.SourceCodeServices.FSharpEntity: FSharp.Compiler.SourceCodeServices.FSharpDelegateSignature get_FSharpDelegateSignature() +FSharp.Compiler.SourceCodeServices.FSharpEntity: FSharp.Compiler.SourceCodeServices.FSharpType AbbreviatedType +FSharp.Compiler.SourceCodeServices.FSharpEntity: FSharp.Compiler.SourceCodeServices.FSharpType get_AbbreviatedType() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Int32 ArrayRank +FSharp.Compiler.SourceCodeServices.FSharpEntity: Int32 GetEffectivelySameAsHash() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Int32 get_ArrayRank() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase] ActivePatternCases +FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase] get_ActivePatternCases() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Collections.FSharpList`1[System.String] AllCompilationPaths +FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_AllCompilationPaths() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] DeclarationLocation +FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] ImplementationLocation +FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] SignatureLocation +FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_DeclarationLocation() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] DeclaringEntity +FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] get_DeclaringEntity() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType] BaseType +FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_BaseType() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] Namespace +FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] TryFullName +FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Namespace() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_TryFullName() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] Attributes +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_Attributes() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] NestedEntities +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] get_NestedEntities() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpField] FSharpFields +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpField] RecordFields +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpField] get_FSharpFields() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpField] get_RecordFields() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] GenericParameters +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] get_GenericParameters() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue] MembersFunctionsAndValues +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue] MembersOrValues +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue] get_MembersFunctionsAndValues() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue] get_MembersOrValues() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpStaticParameter] StaticParameters +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpStaticParameter] get_StaticParameters() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] AllInterfaces +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] DeclaredInterfaces +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_AllInterfaces() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_DeclaredInterfaces() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpUnionCase] UnionCases +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpUnionCase] get_UnionCases() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] XmlDoc +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String AccessPath +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String CompiledName +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String DisplayName +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String FullName +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String LogicalName +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String QualifiedName +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String XmlDocSig +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String get_AccessPath() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String get_CompiledName() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String get_DisplayName() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String get_FullName() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String get_LogicalName() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String get_QualifiedName() +FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String get_XmlDocSig() +FSharp.Compiler.SourceCodeServices.FSharpEntity: range DeclarationLocation +FSharp.Compiler.SourceCodeServices.FSharpEntity: range get_DeclarationLocation() +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsAbstractClass +FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsAbstractClass() +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity Severity +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity get_Severity() +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: Int32 EndColumn +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: Int32 EndLineAlternate +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: Int32 ErrorNumber +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: Int32 StartColumn +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: Int32 StartLineAlternate +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: Int32 get_EndColumn() +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: Int32 get_EndLineAlternate() +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: Int32 get_ErrorNumber() +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: Int32 get_StartColumn() +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: Int32 get_StartLineAlternate() +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: System.String FileName +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: System.String Message +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: System.String Subcategory +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: System.String get_FileName() +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: System.String get_Message() +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: System.String get_Subcategory() +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: pos End +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: pos Start +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: pos get_End() +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: pos get_Start() +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: range Range +FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: range get_Range() +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity+Tags: Int32 Error +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity+Tags: Int32 Warning +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity) +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Boolean IsError +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Boolean IsWarning +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Boolean get_IsError() +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Boolean get_IsWarning() +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity Error +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity Warning +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity get_Error() +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity get_Warning() +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity+Tags +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity) +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpExpr: FSharp.Compiler.SourceCodeServices.FSharpType Type +FSharp.Compiler.SourceCodeServices.FSharpExpr: FSharp.Compiler.SourceCodeServices.FSharpType get_Type() +FSharp.Compiler.SourceCodeServices.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr] ImmediateSubExpressions +FSharp.Compiler.SourceCodeServices.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr] get_ImmediateSubExpressions() +FSharp.Compiler.SourceCodeServices.FSharpExpr: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpExpr: range Range +FSharp.Compiler.SourceCodeServices.FSharpExpr: range get_Range() +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsAccessible(FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights) +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsAnonRecordField +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsCompilerGenerated +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsDefaultValue +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsEffectivelySameAs(FSharp.Compiler.SourceCodeServices.FSharpSymbol) +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsExplicitlySuppressed +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsLiteral +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsMutable +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsNameGenerated +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsStatic +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsUnionCaseField +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsUnresolved +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsVolatile +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsAnonRecordField() +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsCompilerGenerated() +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsDefaultValue() +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsExplicitlySuppressed() +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsLiteral() +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsMutable() +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsNameGenerated() +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsStatic() +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsUnionCaseField() +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsUnresolved() +FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsVolatile() +FSharp.Compiler.SourceCodeServices.FSharpField: FSharp.Compiler.SourceCodeServices.FSharpAccessibility Accessibility +FSharp.Compiler.SourceCodeServices.FSharpField: FSharp.Compiler.SourceCodeServices.FSharpAccessibility get_Accessibility() +FSharp.Compiler.SourceCodeServices.FSharpField: FSharp.Compiler.SourceCodeServices.FSharpAssembly Assembly +FSharp.Compiler.SourceCodeServices.FSharpField: FSharp.Compiler.SourceCodeServices.FSharpAssembly get_Assembly() +FSharp.Compiler.SourceCodeServices.FSharpField: FSharp.Compiler.SourceCodeServices.FSharpType FieldType +FSharp.Compiler.SourceCodeServices.FSharpField: FSharp.Compiler.SourceCodeServices.FSharpType get_FieldType() +FSharp.Compiler.SourceCodeServices.FSharpField: Int32 GetEffectivelySameAsHash() +FSharp.Compiler.SourceCodeServices.FSharpField: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] DeclarationLocation +FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] ImplementationLocation +FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] SignatureLocation +FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_DeclarationLocation() +FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() +FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() +FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] DeclaringEntity +FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] get_DeclaringEntity() +FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpUnionCase] DeclaringUnionCase +FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpUnionCase] get_DeclaringUnionCase() +FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[System.Object] LiteralValue +FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[System.Object] get_LiteralValue() +FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] FieldAttributes +FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] PropertyAttributes +FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_FieldAttributes() +FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_PropertyAttributes() +FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc +FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] XmlDoc +FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpField: System.String DisplayName +FSharp.Compiler.SourceCodeServices.FSharpField: System.String FullName +FSharp.Compiler.SourceCodeServices.FSharpField: System.String Name +FSharp.Compiler.SourceCodeServices.FSharpField: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpField: System.String XmlDocSig +FSharp.Compiler.SourceCodeServices.FSharpField: System.String get_DisplayName() +FSharp.Compiler.SourceCodeServices.FSharpField: System.String get_FullName() +FSharp.Compiler.SourceCodeServices.FSharpField: System.String get_Name() +FSharp.Compiler.SourceCodeServices.FSharpField: System.String get_XmlDocSig() +FSharp.Compiler.SourceCodeServices.FSharpField: System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails,FSharp.Compiler.SourceCodeServices.FSharpType[],System.Int32] AnonRecordFieldDetails +FSharp.Compiler.SourceCodeServices.FSharpField: System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails,FSharp.Compiler.SourceCodeServices.FSharpType[],System.Int32] get_AnonRecordFieldDetails() +FSharp.Compiler.SourceCodeServices.FSharpField: range DeclarationLocation +FSharp.Compiler.SourceCodeServices.FSharpField: range get_DeclarationLocation() +FSharp.Compiler.SourceCodeServices.FSharpFileUtilities: Boolean isScriptFile(System.String) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean IsNoSourceCode +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean IsProvidedMember +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean IsProvidedType +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean IsUnknown +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean get_IsNoSourceCode() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean get_IsProvidedMember() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean get_IsProvidedType() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean get_IsUnknown() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: System.String Item +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: System.String get_Item() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean IsNoSourceCode +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean IsProvidedMember +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean IsProvidedType +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean IsUnknown +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean get_IsNoSourceCode() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean get_IsProvidedMember() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean get_IsProvidedType() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean get_IsUnknown() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: System.String Item +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: System.String get_Item() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Tags: Int32 NoSourceCode +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Tags: Int32 ProvidedMember +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Tags: Int32 ProvidedType +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Tags: Int32 Unknown +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean IsNoSourceCode +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean IsProvidedMember +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean IsProvidedType +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean IsUnknown +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean get_IsNoSourceCode() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean get_IsProvidedMember() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean get_IsProvidedType() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean get_IsUnknown() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: System.String get_message() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: System.String message +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean IsNoSourceCode +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean IsProvidedMember +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean IsProvidedType +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean IsUnknown +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean get_IsNoSourceCode() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean get_IsProvidedMember() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean get_IsProvidedType() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean get_IsUnknown() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason NewProvidedMember(System.String) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason NewProvidedType(System.String) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason NewUnknown(System.String) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason NoSourceCode +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason get_NoSourceCode() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Tags +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Boolean IsDeclFound +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Boolean IsDeclNotFound +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Boolean IsExternalDecl +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Boolean get_IsDeclFound() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Boolean get_IsDeclNotFound() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Boolean get_IsExternalDecl() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: range Item +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: range get_Item() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Boolean IsDeclFound +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Boolean IsDeclNotFound +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Boolean IsExternalDecl +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Boolean get_IsDeclFound() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Boolean get_IsDeclNotFound() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Boolean get_IsExternalDecl() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason Item +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason get_Item() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Boolean IsDeclFound +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Boolean IsDeclNotFound +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Boolean IsExternalDecl +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Boolean get_IsDeclFound() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Boolean get_IsDeclNotFound() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Boolean get_IsExternalDecl() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: FSharp.Compiler.SourceCodeServices.ExternalSymbol externalSym +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: FSharp.Compiler.SourceCodeServices.ExternalSymbol get_externalSym() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: System.String assembly +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: System.String get_assembly() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+Tags: Int32 DeclFound +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+Tags: Int32 DeclNotFound +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+Tags: Int32 ExternalDecl +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Boolean IsDeclFound +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Boolean IsDeclNotFound +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Boolean IsExternalDecl +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Boolean get_IsDeclFound() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Boolean get_IsDeclNotFound() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Boolean get_IsExternalDecl() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult NewDeclFound(range) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult NewDeclNotFound(FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult NewExternalDecl(System.String, FSharp.Compiler.SourceCodeServices.ExternalSymbol) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+Tags +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean IsAccessible(FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights) +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean IsCompilerGenerated +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean IsEffectivelySameAs(FSharp.Compiler.SourceCodeServices.FSharpSymbol) +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean IsExplicitlySuppressed +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean IsMeasure +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean IsSolveAtCompileTime +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean get_IsCompilerGenerated() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean get_IsExplicitlySuppressed() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean get_IsMeasure() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean get_IsSolveAtCompileTime() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: FSharp.Compiler.SourceCodeServices.FSharpAssembly Assembly +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: FSharp.Compiler.SourceCodeServices.FSharpAssembly get_Assembly() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Int32 GetEffectivelySameAsHash() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] DeclarationLocation +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] ImplementationLocation +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] SignatureLocation +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_DeclarationLocation() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] Attributes +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_Attributes() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint] Constraints +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint] get_Constraints() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] XmlDoc +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String DisplayName +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String FullName +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String Name +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String get_DisplayName() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String get_FullName() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String get_Name() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: range DeclarationLocation +FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: range get_DeclarationLocation() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsCoercesToConstraint +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsComparisonConstraint +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsDefaultsToConstraint +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsDelegateConstraint +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsEnumConstraint +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsEqualityConstraint +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsMemberConstraint +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsNonNullableValueTypeConstraint +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsReferenceTypeConstraint +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsRequiresDefaultConstructorConstraint +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsSimpleChoiceConstraint +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsSupportsNullConstraint +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsUnmanagedConstraint +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsCoercesToConstraint() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsComparisonConstraint() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsDefaultsToConstraint() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsDelegateConstraint() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsEnumConstraint() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsEqualityConstraint() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsMemberConstraint() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsNonNullableValueTypeConstraint() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsReferenceTypeConstraint() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsRequiresDefaultConstructorConstraint() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsSimpleChoiceConstraint() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsSupportsNullConstraint() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsUnmanagedConstraint() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDefaultsToConstraint DefaultsToConstraintData +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDefaultsToConstraint get_DefaultsToConstraintData() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDelegateConstraint DelegateConstraintData +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDelegateConstraint get_DelegateConstraintData() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint MemberConstraintData +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint get_MemberConstraintData() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: FSharp.Compiler.SourceCodeServices.FSharpType CoercesToTarget +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: FSharp.Compiler.SourceCodeServices.FSharpType EnumConstraintTarget +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: FSharp.Compiler.SourceCodeServices.FSharpType get_CoercesToTarget() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: FSharp.Compiler.SourceCodeServices.FSharpType get_EnumConstraintTarget() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] SimpleChoices +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_SimpleChoices() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDefaultsToConstraint: FSharp.Compiler.SourceCodeServices.FSharpType DefaultsToTarget +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDefaultsToConstraint: FSharp.Compiler.SourceCodeServices.FSharpType get_DefaultsToTarget() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDefaultsToConstraint: Int32 DefaultsToPriority +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDefaultsToConstraint: Int32 get_DefaultsToPriority() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDefaultsToConstraint: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDelegateConstraint: FSharp.Compiler.SourceCodeServices.FSharpType DelegateReturnType +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDelegateConstraint: FSharp.Compiler.SourceCodeServices.FSharpType DelegateTupledArgumentType +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDelegateConstraint: FSharp.Compiler.SourceCodeServices.FSharpType get_DelegateReturnType() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDelegateConstraint: FSharp.Compiler.SourceCodeServices.FSharpType get_DelegateTupledArgumentType() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDelegateConstraint: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: Boolean MemberIsStatic +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: Boolean get_MemberIsStatic() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: FSharp.Compiler.SourceCodeServices.FSharpType MemberReturnType +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: FSharp.Compiler.SourceCodeServices.FSharpType get_MemberReturnType() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] MemberArgumentTypes +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] MemberSources +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_MemberArgumentTypes() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_MemberSources() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: System.String MemberName +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: System.String get_MemberName() +FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Class +FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Constant +FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Delegate +FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Enum +FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 EnumMember +FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Error +FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Event +FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Exception +FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 ExtensionMethod +FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Field +FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Interface +FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Method +FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Module +FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 NameSpace +FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 OverridenMethod +FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Property +FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Struct +FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Type +FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Typedef +FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Union +FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Variable +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpGlyph) +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsClass +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsConstant +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsDelegate +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsEnum +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsEnumMember +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsError +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsEvent +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsException +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsExtensionMethod +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsField +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsInterface +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsMethod +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsModule +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsNameSpace +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsOverridenMethod +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsProperty +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsStruct +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsType +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsTypedef +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsUnion +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsVariable +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsClass() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsConstant() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsDelegate() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsEnum() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsEnumMember() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsError() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsEvent() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsException() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsExtensionMethod() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsField() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsInterface() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsMethod() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsModule() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsNameSpace() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsOverridenMethod() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsProperty() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsStruct() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsType() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsTypedef() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsUnion() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsVariable() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Class +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Constant +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Delegate +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Enum +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph EnumMember +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Error +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Event +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Exception +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph ExtensionMethod +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Field +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Interface +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Method +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Module +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph NameSpace +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph OverridenMethod +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Property +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Struct +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Type +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Typedef +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Union +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Variable +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Class() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Constant() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Delegate() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Enum() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_EnumMember() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Error() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Event() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Exception() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_ExtensionMethod() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Field() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Interface() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Method() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Module() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_NameSpace() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_OverridenMethod() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Property() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Struct() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Type() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Typedef() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Union() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Variable() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpGlyph) +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpGlyph: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpGlyph: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents: Boolean HasExplicitEntryPoint +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents: Boolean IsScript +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents: Boolean get_HasExplicitEntryPoint() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents: Boolean get_IsScript() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration] Declarations +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration] get_Declarations() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents: System.String FileName +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents: System.String QualifiedName +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents: System.String get_FileName() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents: System.String get_QualifiedName() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration) +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Boolean IsEntity +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Boolean IsInitAction +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Boolean IsMemberOrFunctionOrValue +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Boolean get_IsEntity() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Boolean get_IsInitAction() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Boolean get_IsMemberOrFunctionOrValue() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: FSharp.Compiler.SourceCodeServices.FSharpEntity Item1 +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: FSharp.Compiler.SourceCodeServices.FSharpEntity get_Item1() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration] Item2 +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration] get_Item2() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration) +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Boolean IsEntity +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Boolean IsInitAction +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Boolean IsMemberOrFunctionOrValue +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Boolean get_IsEntity() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Boolean get_IsInitAction() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Boolean get_IsMemberOrFunctionOrValue() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: FSharp.Compiler.SourceCodeServices.FSharpExpr Item +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: FSharp.Compiler.SourceCodeServices.FSharpExpr get_Item() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration) +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Boolean IsEntity +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Boolean IsInitAction +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Boolean IsMemberOrFunctionOrValue +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Boolean get_IsEntity() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Boolean get_IsInitAction() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Boolean get_IsMemberOrFunctionOrValue() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpExpr Item3 +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpExpr get_Item3() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue Item1 +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue get_Item1() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue]] Item2 +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue]] get_Item2() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Tags: Int32 Entity +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Tags: Int32 InitAction +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Tags: Int32 MemberOrFunctionOrValue +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration) +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Boolean IsEntity +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Boolean IsInitAction +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Boolean IsMemberOrFunctionOrValue +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Boolean get_IsEntity() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Boolean get_IsInitAction() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Boolean get_IsMemberOrFunctionOrValue() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration NewEntity(FSharp.Compiler.SourceCodeServices.FSharpEntity, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration]) +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration NewInitAction(FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration NewMemberOrFunctionOrValue(FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue]], FSharp.Compiler.SourceCodeServices.FSharpExpr) +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Tags +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation+Tags: Int32 AggressiveInline +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation+Tags: Int32 AlwaysInline +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation+Tags: Int32 NeverInline +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation+Tags: Int32 OptionalInline +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation+Tags: Int32 PseudoValue +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation) +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean IsAggressiveInline +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean IsAlwaysInline +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean IsNeverInline +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean IsOptionalInline +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean IsPseudoValue +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean get_IsAggressiveInline() +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean get_IsAlwaysInline() +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean get_IsNeverInline() +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean get_IsOptionalInline() +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean get_IsPseudoValue() +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation AggressiveInline +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation AlwaysInline +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation NeverInline +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation OptionalInline +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation PseudoValue +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation get_AggressiveInline() +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation get_AlwaysInline() +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation get_NeverInline() +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation get_OptionalInline() +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation get_PseudoValue() +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation+Tags +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation) +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpLineTokenizer: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState ColorStateOfLexState(FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState) +FSharp.Compiler.SourceCodeServices.FSharpLineTokenizer: FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState LexStateOfColorState(FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState) +FSharp.Compiler.SourceCodeServices.FSharpLineTokenizer: System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpTokenInfo],FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState] ScanToken(FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState) +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean EventIsStandard +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean HasGetterMethod +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean HasSetterMethod +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsAccessible(FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights) +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsActivePattern +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsBaseValue +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsCompilerGenerated +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsConstructor +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsConstructorThisValue +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsDispatchSlot +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsEffectivelySameAs(FSharp.Compiler.SourceCodeServices.FSharpSymbol) +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsEvent +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsEventAddMethod +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsEventRemoveMethod +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsExplicitInterfaceImplementation +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsExplicitlySuppressed +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsExtensionMember +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsGetterMethod +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsImplicitConstructor +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsInstanceMember +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsInstanceMemberInCompiledCode +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsMember +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsMemberThisValue +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsModuleValueOrMember +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsMutable +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsOverrideOrExplicitInterfaceImplementation +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsOverrideOrExplicitMember +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsProperty +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsPropertyGetterMethod +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsPropertySetterMethod +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsSetterMethod +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsTypeFunction +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsUnresolved +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsValCompiledAsMethod +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsValue +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_EventIsStandard() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_HasGetterMethod() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_HasSetterMethod() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsActivePattern() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsBaseValue() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsCompilerGenerated() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsConstructor() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsConstructorThisValue() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsDispatchSlot() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsEvent() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsEventAddMethod() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsEventRemoveMethod() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsExplicitInterfaceImplementation() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsExplicitlySuppressed() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsExtensionMember() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsGetterMethod() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsImplicitConstructor() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsInstanceMember() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsInstanceMemberInCompiledCode() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsMember() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsMemberThisValue() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsModuleValueOrMember() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsMutable() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsOverrideOrExplicitInterfaceImplementation() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsOverrideOrExplicitMember() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsProperty() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsPropertyGetterMethod() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsPropertySetterMethod() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsSetterMethod() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsTypeFunction() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsUnresolved() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsValCompiledAsMethod() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsValue() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpAccessibility Accessibility +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpAccessibility get_Accessibility() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpAssembly Assembly +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpAssembly get_Assembly() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpEntity ApparentEnclosingEntity +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpEntity get_ApparentEnclosingEntity() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation InlineAnnotation +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation get_InlineAnnotation() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue EventAddMethod +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue EventRemoveMethod +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue GetterMethod +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue SetterMethod +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue get_EventAddMethod() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue get_EventRemoveMethod() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue get_GetterMethod() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue get_SetterMethod() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpParameter ReturnParameter +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpParameter get_ReturnParameter() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpType EventDelegateType +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpType FullType +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpType get_EventDelegateType() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpType get_FullType() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Int32 GetEffectivelySameAsHash() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Internal.Utilities.StructuredFormat.Layout FormatLayout(FSharp.Compiler.SourceCodeServices.FSharpDisplayContext) +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] DeclarationLocation +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] ImplementationLocation +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] SignatureLocation +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_DeclarationLocation() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] DeclaringEntity +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] get_DeclaringEntity() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue] EventForFSharpProperty +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue] get_EventForFSharpProperty() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue]] Overloads(Boolean) +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[System.Object] LiteralValue +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[System.Object] get_LiteralValue() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature] ImplementedAbstractSignatures +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature] get_ImplementedAbstractSignatures() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] Attributes +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_Attributes() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] GenericParameters +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] get_GenericParameters() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]] CurriedParameterGroups +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]] get_CurriedParameterGroups() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] XmlDoc +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String CompiledName +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String DisplayName +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String FullName +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String LogicalName +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String XmlDocSig +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String get_CompiledName() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String get_DisplayName() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String get_FullName() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String get_LogicalName() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String get_XmlDocSig() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: range DeclarationLocation +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: range get_DeclarationLocation() +FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.String,System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]]] GetWitnessPassingInfo() +FSharp.Compiler.SourceCodeServices.FSharpMethodGroup: FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem[] Methods +FSharp.Compiler.SourceCodeServices.FSharpMethodGroup: FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem[] get_Methods() +FSharp.Compiler.SourceCodeServices.FSharpMethodGroup: System.String MethodName +FSharp.Compiler.SourceCodeServices.FSharpMethodGroup: System.String get_MethodName() +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: Boolean HasParamArrayArg +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: Boolean HasParameters +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: Boolean get_HasParamArrayArg() +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: Boolean get_HasParameters() +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter[] Parameters +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter[] StaticParameters +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter[] get_Parameters() +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter[] get_StaticParameters() +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[Internal.Utilities.StructuredFormat.Layout] StructuredDescription +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[Internal.Utilities.StructuredFormat.Layout] get_StructuredDescription() +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[System.String] Description +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[System.String] get_Description() +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc XmlDoc +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: Internal.Utilities.StructuredFormat.Layout StructuredReturnTypeText +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: Internal.Utilities.StructuredFormat.Layout get_StructuredReturnTypeText() +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: System.String ReturnTypeText +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: System.String get_ReturnTypeText() +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter: Boolean IsOptional +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter: Boolean get_IsOptional() +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter: Internal.Utilities.StructuredFormat.Layout StructuredDisplay +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter: Internal.Utilities.StructuredFormat.Layout get_StructuredDisplay() +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter: System.String CanonicalTypeTextForSorting +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter: System.String Display +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter: System.String ParameterName +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter: System.String get_CanonicalTypeTextForSorting() +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter: System.String get_Display() +FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter: System.String get_ParameterName() +FSharp.Compiler.SourceCodeServices.FSharpNavigation: FSharp.Compiler.SourceCodeServices.FSharpNavigationItems getNavigation(ParsedInput) +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: Boolean IsAbstract +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: Boolean IsSingleTopLevel +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: Boolean get_IsAbstract() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: Boolean get_IsSingleTopLevel() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind EnclosingEntityKind +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind get_EnclosingEntityKind() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: FSharp.Compiler.SourceCodeServices.FSharpGlyph Glyph +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Glyph() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind Kind +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind get_Kind() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] Access +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_Access() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: System.String Name +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: System.String UniqueName +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: System.String get_Name() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: System.String get_UniqueName() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: range BodyRange +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: range Range +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: range get_BodyRange() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: range get_Range() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind+Tags: Int32 ExnDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind+Tags: Int32 FieldDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind+Tags: Int32 MethodDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind+Tags: Int32 ModuleDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind+Tags: Int32 ModuleFileDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind+Tags: Int32 NamespaceDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind+Tags: Int32 OtherDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind+Tags: Int32 PropertyDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind+Tags: Int32 TypeDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind) +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean IsExnDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean IsFieldDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean IsMethodDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean IsModuleDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean IsModuleFileDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean IsNamespaceDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean IsOtherDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean IsPropertyDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean IsTypeDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean get_IsExnDecl() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean get_IsFieldDecl() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean get_IsMethodDecl() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean get_IsModuleDecl() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean get_IsModuleFileDecl() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean get_IsNamespaceDecl() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean get_IsOtherDecl() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean get_IsPropertyDecl() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean get_IsTypeDecl() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind ExnDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind FieldDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind MethodDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind ModuleDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind ModuleFileDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind NamespaceDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind OtherDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind PropertyDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind TypeDecl +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind get_ExnDecl() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind get_FieldDecl() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind get_MethodDecl() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind get_ModuleDecl() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind get_ModuleFileDecl() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind get_NamespaceDecl() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind get_OtherDecl() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind get_PropertyDecl() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind get_TypeDecl() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind+Tags +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind) +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpNavigationItems: FSharp.Compiler.SourceCodeServices.FSharpNavigationTopLevelDeclaration[] Declarations +FSharp.Compiler.SourceCodeServices.FSharpNavigationItems: FSharp.Compiler.SourceCodeServices.FSharpNavigationTopLevelDeclaration[] get_Declarations() +FSharp.Compiler.SourceCodeServices.FSharpNavigationTopLevelDeclaration: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem Declaration +FSharp.Compiler.SourceCodeServices.FSharpNavigationTopLevelDeclaration: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem get_Declaration() +FSharp.Compiler.SourceCodeServices.FSharpNavigationTopLevelDeclaration: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem[] Nested +FSharp.Compiler.SourceCodeServices.FSharpNavigationTopLevelDeclaration: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem[] get_Nested() +FSharp.Compiler.SourceCodeServices.FSharpNavigationTopLevelDeclaration: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpNavigationTopLevelDeclaration: Void .ctor(FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem, FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem[]) +FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: Boolean IsThereACloseParen +FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: Boolean get_IsThereACloseParen() +FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: Microsoft.FSharp.Collections.FSharpList`1[System.String] LongId +FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_LongId() +FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations] Find(pos, ParsedInput) +FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: Microsoft.FSharp.Core.FSharpOption`1[System.String][] NamedParamNames +FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: Microsoft.FSharp.Core.FSharpOption`1[System.String][] get_NamedParamNames() +FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: pos LongIdEndLocation +FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: pos LongIdStartLocation +FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: pos OpenParenLocation +FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: pos get_LongIdEndLocation() +FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: pos get_LongIdStartLocation() +FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: pos get_OpenParenLocation() +FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: pos[] TupleEndLocations +FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: pos[] get_TupleEndLocations() +FSharp.Compiler.SourceCodeServices.FSharpObjectExprOverride: FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature Signature +FSharp.Compiler.SourceCodeServices.FSharpObjectExprOverride: FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature get_Signature() +FSharp.Compiler.SourceCodeServices.FSharpObjectExprOverride: FSharp.Compiler.SourceCodeServices.FSharpExpr Body +FSharp.Compiler.SourceCodeServices.FSharpObjectExprOverride: FSharp.Compiler.SourceCodeServices.FSharpExpr get_Body() +FSharp.Compiler.SourceCodeServices.FSharpObjectExprOverride: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] GenericParameters +FSharp.Compiler.SourceCodeServices.FSharpObjectExprOverride: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] get_GenericParameters() +FSharp.Compiler.SourceCodeServices.FSharpObjectExprOverride: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue]] CurriedParameterGroups +FSharp.Compiler.SourceCodeServices.FSharpObjectExprOverride: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue]] get_CurriedParameterGroups() +FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: Boolean IsOwnNamespace +FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: Boolean get_IsOwnNamespace() +FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] Modules +FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] get_Modules() +FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType] Types +FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_Types() +FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] LongId +FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_LongId() +FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] Range +FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_Range() +FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: SynOpenDeclTarget Target +FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: SynOpenDeclTarget get_Target() +FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: range AppliedScope +FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: range get_AppliedScope() +FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean IsAccessible(FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights) +FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean IsEffectivelySameAs(FSharp.Compiler.SourceCodeServices.FSharpSymbol) +FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean IsExplicitlySuppressed +FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean IsInArg +FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean IsOptionalArg +FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean IsOutArg +FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean IsParamArrayArg +FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean get_IsExplicitlySuppressed() +FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean get_IsInArg() +FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean get_IsOptionalArg() +FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean get_IsOutArg() +FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean get_IsParamArrayArg() +FSharp.Compiler.SourceCodeServices.FSharpParameter: FSharp.Compiler.SourceCodeServices.FSharpAssembly Assembly +FSharp.Compiler.SourceCodeServices.FSharpParameter: FSharp.Compiler.SourceCodeServices.FSharpAssembly get_Assembly() +FSharp.Compiler.SourceCodeServices.FSharpParameter: FSharp.Compiler.SourceCodeServices.FSharpType Type +FSharp.Compiler.SourceCodeServices.FSharpParameter: FSharp.Compiler.SourceCodeServices.FSharpType get_Type() +FSharp.Compiler.SourceCodeServices.FSharpParameter: Int32 GetEffectivelySameAsHash() +FSharp.Compiler.SourceCodeServices.FSharpParameter: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] DeclarationLocation +FSharp.Compiler.SourceCodeServices.FSharpParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] ImplementationLocation +FSharp.Compiler.SourceCodeServices.FSharpParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] SignatureLocation +FSharp.Compiler.SourceCodeServices.FSharpParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_DeclarationLocation() +FSharp.Compiler.SourceCodeServices.FSharpParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() +FSharp.Compiler.SourceCodeServices.FSharpParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() +FSharp.Compiler.SourceCodeServices.FSharpParameter: Microsoft.FSharp.Core.FSharpOption`1[System.String] Name +FSharp.Compiler.SourceCodeServices.FSharpParameter: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Name() +FSharp.Compiler.SourceCodeServices.FSharpParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] Attributes +FSharp.Compiler.SourceCodeServices.FSharpParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_Attributes() +FSharp.Compiler.SourceCodeServices.FSharpParameter: System.String DisplayName +FSharp.Compiler.SourceCodeServices.FSharpParameter: System.String FullName +FSharp.Compiler.SourceCodeServices.FSharpParameter: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpParameter: System.String get_DisplayName() +FSharp.Compiler.SourceCodeServices.FSharpParameter: System.String get_FullName() +FSharp.Compiler.SourceCodeServices.FSharpParameter: range DeclarationLocation +FSharp.Compiler.SourceCodeServices.FSharpParameter: range get_DeclarationLocation() +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Boolean ParseHadErrors +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Boolean get_ParseHadErrors() +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[] Errors +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[] get_Errors() +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: FSharp.Compiler.SourceCodeServices.FSharpNavigationItems GetNavigationItems() +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] TryRangeOfNameOfNearestOuterBindingContainingPos(pos) +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] TryRangeOfRefCellDereferenceContainingPos(pos) +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] TryRangeOfRecordExpressionContainingPos(pos) +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] TryRangeOfExprInYieldOrReturn(pos) +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.Range+range,FSharp.Compiler.Range+range,FSharp.Compiler.Range+range]] TryRangeOfParenEnclosingOpEqualsGreaterUsage(pos) +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] ValidateBreakpointLocation(pos) +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations] FindNoteworthyParamInfoLocations(pos) +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Boolean IsPositionContainedInACurriedParameter(pos) +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Boolean IsPosContainedInApplication(pos) +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] TryRangeOfFunctionOrMethodBeingApplied(pos) +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range]] GetAllArgumentsForFunctionApplicationAtPostion(pos) +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+Ident,System.Int32]] TryIdentOfPipelineContainingPosAndNumArgsApplied(pos) +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+ParsedInput] ParseTree +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+ParsedInput] get_ParseTree() +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: System.String FileName +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: System.String get_FileName() +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: System.String[] DependencyFiles +FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: System.String[] get_DependencyFiles() +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Boolean CompilingFsLib +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpParsingOptions) +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Boolean IsExe +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Boolean IsInteractive +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Boolean get_CompilingFsLib() +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Boolean get_IsExe() +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Boolean get_IsInteractive() +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: FSharp.Compiler.SourceCodeServices.FSharpParsingOptions Default +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: FSharp.Compiler.SourceCodeServices.FSharpParsingOptions get_Default() +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: FSharpErrorSeverityOptions ErrorSeverityOptions +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: FSharpErrorSeverityOptions get_ErrorSeverityOptions() +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpParsingOptions) +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Microsoft.FSharp.Collections.FSharpList`1[System.String] ConditionalCompilationDefines +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_ConditionalCompilationDefines() +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Microsoft.FSharp.Core.FSharpOption`1[System.Boolean] LightSyntax +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Microsoft.FSharp.Core.FSharpOption`1[System.Boolean] get_LightSyntax() +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: System.String[] SourceFiles +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: System.String[] get_SourceFiles() +FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Void .ctor(System.String[], Microsoft.FSharp.Collections.FSharpList`1[System.String], FSharpErrorSeverityOptions, Boolean, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Boolean, Boolean) +FSharp.Compiler.SourceCodeServices.FSharpProjectContext: FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights AccessibilityRights +FSharp.Compiler.SourceCodeServices.FSharpProjectContext: FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights get_AccessibilityRights() +FSharp.Compiler.SourceCodeServices.FSharpProjectContext: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpAssembly] GetReferencedAssemblies() +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpProjectOptions) +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Boolean IsIncompleteTypeCheckEnvironment +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Boolean UseScriptResolutionRules +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Boolean get_IsIncompleteTypeCheckEnvironment() +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Boolean get_UseScriptResolutionRules() +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Range+range,System.String,System.String]] OriginalLoadReferences +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Range+range,System.String,System.String]] get_OriginalLoadReferences() +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.UnresolvedReferencesSet] UnresolvedReferences +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.UnresolvedReferencesSet] get_UnresolvedReferences() +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[System.Int64] Stamp +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[System.Int64] get_Stamp() +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[System.Object] ExtraProjectInfo +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[System.Object] get_ExtraProjectInfo() +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[System.String] ProjectId +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_ProjectId() +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.DateTime LoadTime +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.DateTime get_LoadTime() +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.String ProjectFileName +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.String get_ProjectFileName() +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.String[] OtherOptions +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.String[] SourceFiles +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.String[] get_OtherOptions() +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.String[] get_SourceFiles() +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.Tuple`2[System.String,FSharp.Compiler.SourceCodeServices.FSharpProjectOptions][] ReferencedProjects +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.Tuple`2[System.String,FSharp.Compiler.SourceCodeServices.FSharpProjectOptions][] get_ReferencedProjects() +FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Void .ctor(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.String], System.String[], System.String[], System.Tuple`2[System.String,FSharp.Compiler.SourceCodeServices.FSharpProjectOptions][], Boolean, Boolean, System.DateTime, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.UnresolvedReferencesSet], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Range+range,System.String,System.String]], Microsoft.FSharp.Core.FSharpOption`1[System.Object], Microsoft.FSharp.Core.FSharpOption`1[System.Int64]) +FSharp.Compiler.SourceCodeServices.FSharpSourceTokenizer: FSharp.Compiler.SourceCodeServices.FSharpLineTokenizer CreateBufferTokenizer(Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[System.Char[],System.Int32,System.Int32],System.Int32]) +FSharp.Compiler.SourceCodeServices.FSharpSourceTokenizer: FSharp.Compiler.SourceCodeServices.FSharpLineTokenizer CreateLineTokenizer(System.String) +FSharp.Compiler.SourceCodeServices.FSharpSourceTokenizer: Void .ctor(Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Boolean HasDefaultValue +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Boolean IsAccessible(FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights) +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Boolean IsEffectivelySameAs(FSharp.Compiler.SourceCodeServices.FSharpSymbol) +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Boolean IsExplicitlySuppressed +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Boolean IsOptional +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Boolean get_HasDefaultValue() +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Boolean get_IsExplicitlySuppressed() +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Boolean get_IsOptional() +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: FSharp.Compiler.SourceCodeServices.FSharpAssembly Assembly +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: FSharp.Compiler.SourceCodeServices.FSharpAssembly get_Assembly() +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: FSharp.Compiler.SourceCodeServices.FSharpType Kind +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: FSharp.Compiler.SourceCodeServices.FSharpType get_Kind() +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Int32 GetEffectivelySameAsHash() +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] DeclarationLocation +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] ImplementationLocation +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] SignatureLocation +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_DeclarationLocation() +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: System.Object DefaultValue +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: System.Object get_DefaultValue() +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: System.String DisplayName +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: System.String FullName +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: System.String Name +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: System.String get_DisplayName() +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: System.String get_FullName() +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: System.String get_Name() +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: range DeclarationLocation +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: range get_DeclarationLocation() +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: range Range +FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: range get_Range() +FSharp.Compiler.SourceCodeServices.FSharpSymbol: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpSymbol: Boolean IsAccessible(FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights) +FSharp.Compiler.SourceCodeServices.FSharpSymbol: Boolean IsEffectivelySameAs(FSharp.Compiler.SourceCodeServices.FSharpSymbol) +FSharp.Compiler.SourceCodeServices.FSharpSymbol: Boolean IsExplicitlySuppressed +FSharp.Compiler.SourceCodeServices.FSharpSymbol: Boolean get_IsExplicitlySuppressed() +FSharp.Compiler.SourceCodeServices.FSharpSymbol: FSharp.Compiler.SourceCodeServices.FSharpAssembly Assembly +FSharp.Compiler.SourceCodeServices.FSharpSymbol: FSharp.Compiler.SourceCodeServices.FSharpAssembly get_Assembly() +FSharp.Compiler.SourceCodeServices.FSharpSymbol: Int32 GetEffectivelySameAsHash() +FSharp.Compiler.SourceCodeServices.FSharpSymbol: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] DeclarationLocation +FSharp.Compiler.SourceCodeServices.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] ImplementationLocation +FSharp.Compiler.SourceCodeServices.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] SignatureLocation +FSharp.Compiler.SourceCodeServices.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_DeclarationLocation() +FSharp.Compiler.SourceCodeServices.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() +FSharp.Compiler.SourceCodeServices.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() +FSharp.Compiler.SourceCodeServices.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpAccessibility] GetAccessibility(FSharp.Compiler.SourceCodeServices.FSharpSymbol) +FSharp.Compiler.SourceCodeServices.FSharpSymbol: System.String DisplayName +FSharp.Compiler.SourceCodeServices.FSharpSymbol: System.String FullName +FSharp.Compiler.SourceCodeServices.FSharpSymbol: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpSymbol: System.String get_DisplayName() +FSharp.Compiler.SourceCodeServices.FSharpSymbol: System.String get_FullName() +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean IsFromAttribute +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean IsFromComputationExpression +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean IsFromDefinition +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean IsFromDispatchSlotImplementation +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean IsFromOpenStatement +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean IsFromPattern +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean IsFromType +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean IsPrivateToFile +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean get_IsFromAttribute() +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean get_IsFromComputationExpression() +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean get_IsFromDefinition() +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean get_IsFromDispatchSlotImplementation() +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean get_IsFromOpenStatement() +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean get_IsFromPattern() +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean get_IsFromType() +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean get_IsPrivateToFile() +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: FSharp.Compiler.SourceCodeServices.FSharpDisplayContext DisplayContext +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: FSharp.Compiler.SourceCodeServices.FSharpDisplayContext get_DisplayContext() +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: FSharp.Compiler.SourceCodeServices.FSharpSymbol Symbol +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: FSharp.Compiler.SourceCodeServices.FSharpSymbol get_Symbol() +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: System.String FileName +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: System.String get_FileName() +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: range RangeAlternate +FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: range get_RangeAlternate() +FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind Comment +FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind Default +FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind Delimiter +FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind Identifier +FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind Keyword +FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind LineComment +FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind Literal +FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind Operator +FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind String +FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind Text +FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind WhiteSpace +FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: Int32 value__ +FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind Comment +FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind Default +FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind Identifier +FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind InactiveCode +FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind Keyword +FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind Number +FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind Operator +FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind PreprocessorKeyword +FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind Punctuation +FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind String +FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind Text +FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind UpperIdentifier +FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: Int32 value__ +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpTokenInfo) +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind CharClass +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind get_CharClass() +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind ColorClass +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind get_ColorClass() +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass FSharpTokenTriggerClass +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass get_FSharpTokenTriggerClass() +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpTokenInfo) +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 FullMatchedLength +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 LeftColumn +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 RightColumn +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 get_FullMatchedLength() +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 get_LeftColumn() +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 get_RightColumn() +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: System.String TokenName +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: System.String get_TokenName() +FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Void .ctor(Int32, Int32, FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind, FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind, FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass, Int32, System.String, Int32) +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 AMP_AMP +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 BAR +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 BAR_BAR +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 BAR_RBRACK +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 BEGIN +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 CLASS +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 COLON +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 COLON_COLON +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 COLON_EQUALS +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 COLON_GREATER +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 COLON_QMARK +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 COLON_QMARK_GREATER +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 COMMA +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 COMMENT +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 DO +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 DOT +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 DOT_DOT +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 DOT_DOT_HAT +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 ELSE +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 EQUALS +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 FUNCTION +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 GREATER +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 GREATER_RBRACK +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 IDENT +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 INFIX_AT_HAT_OP +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 INFIX_BAR_OP +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 INFIX_COMPARE_OP +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 INFIX_STAR_DIV_MOD_OP +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 INT32_DOT_DOT +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 INTERP_STRING_BEGIN_END +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 INTERP_STRING_BEGIN_PART +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 INTERP_STRING_END +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 INTERP_STRING_PART +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 Identifier +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 LARROW +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 LBRACE +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 LBRACK +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 LBRACK_BAR +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 LBRACK_LESS +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 LESS +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 LINE_COMMENT +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 LPAREN +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 MINUS +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 NEW +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 OWITH +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 PERCENT_OP +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 PLUS_MINUS_OP +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 PREFIX_OP +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 QMARK +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 QUOTE +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 RARROW +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 RBRACE +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 RBRACK +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 RPAREN +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 SEMICOLON +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 STAR +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 STRING +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 STRUCT +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 String +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 THEN +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 TRY +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 UNDERSCORE +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 WHITESPACE +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 WITH +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_AMP_AMP() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_BAR() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_BAR_BAR() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_BAR_RBRACK() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_BEGIN() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_CLASS() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_COLON() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_COLON_COLON() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_COLON_EQUALS() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_COLON_GREATER() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_COLON_QMARK() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_COLON_QMARK_GREATER() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_COMMA() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_COMMENT() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_DO() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_DOT() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_DOT_DOT() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_DOT_DOT_HAT() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_ELSE() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_EQUALS() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_FUNCTION() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_GREATER() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_GREATER_RBRACK() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_IDENT() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_INFIX_AT_HAT_OP() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_INFIX_BAR_OP() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_INFIX_COMPARE_OP() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_INFIX_STAR_DIV_MOD_OP() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_INT32_DOT_DOT() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_INTERP_STRING_BEGIN_END() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_INTERP_STRING_BEGIN_PART() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_INTERP_STRING_END() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_INTERP_STRING_PART() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_Identifier() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_LARROW() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_LBRACE() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_LBRACK() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_LBRACK_BAR() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_LBRACK_LESS() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_LESS() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_LINE_COMMENT() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_LPAREN() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_MINUS() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_NEW() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_OWITH() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_PERCENT_OP() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_PLUS_MINUS_OP() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_PREFIX_OP() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_QMARK() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_QUOTE() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_RARROW() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_RBRACE() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_RBRACK() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_RPAREN() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_SEMICOLON() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_STAR() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_STRING() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_STRUCT() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_String() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_THEN() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_TRY() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_UNDERSCORE() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_WHITESPACE() +FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_WITH() +FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass: FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass ChoiceSelect +FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass: FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass MatchBraces +FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass: FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass MemberSelect +FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass: FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass MethodTip +FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass: FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass None +FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass: FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass ParamEnd +FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass: FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass ParamNext +FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass: FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass ParamStart +FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass: Int32 value__ +FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState CamlOnly +FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState Comment +FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState EndLineThenSkip +FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState EndLineThenToken +FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState IfDefSkip +FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState InitialState +FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState SingleLineComment +FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState String +FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState StringInComment +FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState Token +FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState TripleQuoteString +FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState TripleQuoteStringInComment +FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState VerbatimString +FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState VerbatimStringInComment +FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: Int32 value__ +FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState) +FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState Initial +FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState get_Initial() +FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: Int64 OtherBits +FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: Int64 PosBits +FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: Int64 get_OtherBits() +FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: Int64 get_PosBits() +FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: Void .ctor(Int64, Int64) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc XmlDoc +FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] TypeMapping +FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_TypeMapping() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Microsoft.FSharp.Core.FSharpOption`1[System.String] ParamName +FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_ParamName() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] Remarks +FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] get_Remarks() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: T MainDescription +FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: T get_MainDescription() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Void .ctor(T, FSharp.Compiler.SourceCodeServices.FSharpXmlDoc, Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Core.FSharpOption`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Boolean IsCompositionError +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Boolean IsGroup +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Boolean IsNone +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Boolean get_IsCompositionError() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Boolean get_IsGroup() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Boolean get_IsNone() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: System.String Item +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: System.String get_Item() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Boolean IsCompositionError +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Boolean IsGroup +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Boolean IsNone +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Boolean get_IsCompositionError() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Boolean get_IsGroup() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Boolean get_IsNone() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]] Item +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]] get_Item() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Tags[T]: Int32 CompositionError +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Tags[T]: Int32 Group +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Tags[T]: Int32 None +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Boolean IsCompositionError +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Boolean IsGroup +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Boolean IsNone +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Boolean get_IsCompositionError() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Boolean get_IsGroup() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Boolean get_IsNone() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T] +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T] +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Tags[T] +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T] NewCompositionError(System.String) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T] NewGroup(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]]) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T] None +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T] Single(T, FSharp.Compiler.SourceCodeServices.FSharpXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[T]], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[T]) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T] get_None() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]) +FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T] NewFSharpToolTipText(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]]) +FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]) +FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]] Item +FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]] get_Item() +FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpType: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpType: Boolean HasTypeDefinition +FSharp.Compiler.SourceCodeServices.FSharpType: Boolean IsAbbreviation +FSharp.Compiler.SourceCodeServices.FSharpType: Boolean IsAnonRecordType +FSharp.Compiler.SourceCodeServices.FSharpType: Boolean IsFunctionType +FSharp.Compiler.SourceCodeServices.FSharpType: Boolean IsGenericParameter +FSharp.Compiler.SourceCodeServices.FSharpType: Boolean IsNamedType +FSharp.Compiler.SourceCodeServices.FSharpType: Boolean IsStructTupleType +FSharp.Compiler.SourceCodeServices.FSharpType: Boolean IsTupleType +FSharp.Compiler.SourceCodeServices.FSharpType: Boolean IsUnresolved +FSharp.Compiler.SourceCodeServices.FSharpType: Boolean get_HasTypeDefinition() +FSharp.Compiler.SourceCodeServices.FSharpType: Boolean get_IsAbbreviation() +FSharp.Compiler.SourceCodeServices.FSharpType: Boolean get_IsAnonRecordType() +FSharp.Compiler.SourceCodeServices.FSharpType: Boolean get_IsFunctionType() +FSharp.Compiler.SourceCodeServices.FSharpType: Boolean get_IsGenericParameter() +FSharp.Compiler.SourceCodeServices.FSharpType: Boolean get_IsNamedType() +FSharp.Compiler.SourceCodeServices.FSharpType: Boolean get_IsStructTupleType() +FSharp.Compiler.SourceCodeServices.FSharpType: Boolean get_IsTupleType() +FSharp.Compiler.SourceCodeServices.FSharpType: Boolean get_IsUnresolved() +FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails AnonRecordTypeDetails +FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails get_AnonRecordTypeDetails() +FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpEntity NamedEntity +FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpEntity TypeDefinition +FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpEntity get_NamedEntity() +FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpEntity get_TypeDefinition() +FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpGenericParameter GenericParameter +FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpGenericParameter get_GenericParameter() +FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpParameter Prettify(FSharp.Compiler.SourceCodeServices.FSharpParameter) +FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpType AbbreviatedType +FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpType Instantiate(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter,FSharp.Compiler.SourceCodeServices.FSharpType]]) +FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpType Prettify(FSharp.Compiler.SourceCodeServices.FSharpType) +FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpType get_AbbreviatedType() +FSharp.Compiler.SourceCodeServices.FSharpType: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpType: Internal.Utilities.StructuredFormat.Layout FormatLayout(FSharp.Compiler.SourceCodeServices.FSharpDisplayContext) +FSharp.Compiler.SourceCodeServices.FSharpType: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType] BaseType +FSharp.Compiler.SourceCodeServices.FSharpType: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_BaseType() +FSharp.Compiler.SourceCodeServices.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter] Prettify(System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]) +FSharp.Compiler.SourceCodeServices.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] AllInterfaces +FSharp.Compiler.SourceCodeServices.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] GenericArguments +FSharp.Compiler.SourceCodeServices.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] Prettify(System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType]) +FSharp.Compiler.SourceCodeServices.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_AllInterfaces() +FSharp.Compiler.SourceCodeServices.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_GenericArguments() +FSharp.Compiler.SourceCodeServices.FSharpType: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]] Prettify(System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]]) +FSharp.Compiler.SourceCodeServices.FSharpType: System.String Format(FSharp.Compiler.SourceCodeServices.FSharpDisplayContext) +FSharp.Compiler.SourceCodeServices.FSharpType: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpType: System.Tuple`2[System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]],FSharp.Compiler.SourceCodeServices.FSharpParameter] Prettify(System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]], FSharp.Compiler.SourceCodeServices.FSharpParameter) +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Boolean HasFields +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Boolean IsAccessible(FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights) +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Boolean IsEffectivelySameAs(FSharp.Compiler.SourceCodeServices.FSharpSymbol) +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Boolean IsExplicitlySuppressed +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Boolean IsUnresolved +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Boolean get_HasFields() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Boolean get_IsExplicitlySuppressed() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Boolean get_IsUnresolved() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: FSharp.Compiler.SourceCodeServices.FSharpAccessibility Accessibility +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: FSharp.Compiler.SourceCodeServices.FSharpAccessibility get_Accessibility() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: FSharp.Compiler.SourceCodeServices.FSharpAssembly Assembly +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: FSharp.Compiler.SourceCodeServices.FSharpAssembly get_Assembly() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: FSharp.Compiler.SourceCodeServices.FSharpType ReturnType +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: FSharp.Compiler.SourceCodeServices.FSharpType get_ReturnType() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Int32 GetEffectivelySameAsHash() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] DeclarationLocation +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] ImplementationLocation +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] SignatureLocation +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_DeclarationLocation() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] Attributes +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_Attributes() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpField] UnionCaseFields +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpField] get_UnionCaseFields() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] XmlDoc +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] get_XmlDoc() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String CompiledName +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String DisplayName +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String FullName +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String Name +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String XmlDocSig +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String get_CompiledName() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String get_DisplayName() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String get_FullName() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String get_Name() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String get_XmlDocSig() +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: range DeclarationLocation +FSharp.Compiler.SourceCodeServices.FSharpUnionCase: range get_DeclarationLocation() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Tags: Int32 None +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Tags: Int32 Text +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Tags: Int32 XmlDocFileSignature +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpXmlDoc) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Boolean IsNone +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Boolean IsText +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Boolean IsXmlDocFileSignature +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Boolean get_IsNone() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Boolean get_IsText() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Boolean get_IsXmlDocFileSignature() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpXmlDoc) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String[] elaboratedXmlLines +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String[] get_elaboratedXmlLines() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String[] get_unprocessedLines() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String[] unprocessedLines +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpXmlDoc) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean IsNone +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean IsText +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean IsXmlDocFileSignature +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean get_IsNone() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean get_IsText() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean get_IsXmlDocFileSignature() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpXmlDoc) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: System.String Item1 +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: System.String Item2 +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: System.String ToString() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: System.String get_Item1() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: System.String get_Item2() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpXmlDoc) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean IsNone +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean IsText +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean IsXmlDocFileSignature +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean get_IsNone() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean get_IsText() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean get_IsXmlDocFileSignature() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc NewText(System.String[], System.String[]) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc NewXmlDocFileSignature(System.String, System.String) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc None +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc get_None() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Tags +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpXmlDoc) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Int32 Tag +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: System.String ToString() +FSharp.Compiler.SourceCodeServices.IAssemblyContentCache: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.AssemblyContentCacheEntry] TryGet(System.String) +FSharp.Compiler.SourceCodeServices.IAssemblyContentCache: Void Set(System.String, FSharp.Compiler.SourceCodeServices.AssemblyContentCacheEntry) +FSharp.Compiler.SourceCodeServices.InheritanceContext+Tags: Int32 Class +FSharp.Compiler.SourceCodeServices.InheritanceContext+Tags: Int32 Interface +FSharp.Compiler.SourceCodeServices.InheritanceContext+Tags: Int32 Unknown +FSharp.Compiler.SourceCodeServices.InheritanceContext: Boolean Equals(FSharp.Compiler.SourceCodeServices.InheritanceContext) +FSharp.Compiler.SourceCodeServices.InheritanceContext: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.InheritanceContext: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.InheritanceContext: Boolean IsClass +FSharp.Compiler.SourceCodeServices.InheritanceContext: Boolean IsInterface +FSharp.Compiler.SourceCodeServices.InheritanceContext: Boolean IsUnknown +FSharp.Compiler.SourceCodeServices.InheritanceContext: Boolean get_IsClass() +FSharp.Compiler.SourceCodeServices.InheritanceContext: Boolean get_IsInterface() +FSharp.Compiler.SourceCodeServices.InheritanceContext: Boolean get_IsUnknown() +FSharp.Compiler.SourceCodeServices.InheritanceContext: FSharp.Compiler.SourceCodeServices.InheritanceContext Class +FSharp.Compiler.SourceCodeServices.InheritanceContext: FSharp.Compiler.SourceCodeServices.InheritanceContext Interface +FSharp.Compiler.SourceCodeServices.InheritanceContext: FSharp.Compiler.SourceCodeServices.InheritanceContext Unknown +FSharp.Compiler.SourceCodeServices.InheritanceContext: FSharp.Compiler.SourceCodeServices.InheritanceContext get_Class() +FSharp.Compiler.SourceCodeServices.InheritanceContext: FSharp.Compiler.SourceCodeServices.InheritanceContext get_Interface() +FSharp.Compiler.SourceCodeServices.InheritanceContext: FSharp.Compiler.SourceCodeServices.InheritanceContext get_Unknown() +FSharp.Compiler.SourceCodeServices.InheritanceContext: FSharp.Compiler.SourceCodeServices.InheritanceContext+Tags +FSharp.Compiler.SourceCodeServices.InheritanceContext: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.InheritanceContext) +FSharp.Compiler.SourceCodeServices.InheritanceContext: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.InheritanceContext: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.InheritanceContext: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.InheritanceContext: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.InheritanceContext: Int32 Tag +FSharp.Compiler.SourceCodeServices.InheritanceContext: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.InheritanceContext: System.String ToString() +FSharp.Compiler.SourceCodeServices.InsertContext: Boolean Equals(FSharp.Compiler.SourceCodeServices.InsertContext) +FSharp.Compiler.SourceCodeServices.InsertContext: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.InsertContext: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.InsertContext: FSharp.Compiler.SourceCodeServices.ScopeKind ScopeKind +FSharp.Compiler.SourceCodeServices.InsertContext: FSharp.Compiler.SourceCodeServices.ScopeKind get_ScopeKind() +FSharp.Compiler.SourceCodeServices.InsertContext: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.InsertContext: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.InsertContext: System.String ToString() +FSharp.Compiler.SourceCodeServices.InsertContext: Void .ctor(FSharp.Compiler.SourceCodeServices.ScopeKind, pos) +FSharp.Compiler.SourceCodeServices.InsertContext: pos Pos +FSharp.Compiler.SourceCodeServices.InsertContext: pos get_Pos() +FSharp.Compiler.SourceCodeServices.Keywords: Boolean DoesIdentifierNeedQuotation(System.String) +FSharp.Compiler.SourceCodeServices.Keywords: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] KeywordsWithDescription +FSharp.Compiler.SourceCodeServices.Keywords: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] get_KeywordsWithDescription() +FSharp.Compiler.SourceCodeServices.Keywords: System.String NormalizeIdentifierBackticks(System.String) +FSharp.Compiler.SourceCodeServices.Keywords: System.String QuoteIdentifierIfNeeded(System.String) +FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexer: Void Lex(FSharp.Compiler.Text.ISourceText, Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexerFlags], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpMap`2[System.String,System.String]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexerFlags: FSharpLexerFlags Compiling +FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexerFlags: FSharpLexerFlags CompilingFSharpCore +FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexerFlags: FSharpLexerFlags Default +FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexerFlags: FSharpLexerFlags LightSyntaxOn +FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexerFlags: FSharpLexerFlags SkipTrivia +FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexerFlags: FSharpLexerFlags UseLexFilter +FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexerFlags: Int32 value__ +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: Boolean IsCommentTrivia +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: Boolean IsIdentifier +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: Boolean IsKeyword +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: Boolean IsNumericLiteral +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: Boolean IsStringLiteral +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: Boolean get_IsCommentTrivia() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: Boolean get_IsIdentifier() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: Boolean get_IsKeyword() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: Boolean get_IsNumericLiteral() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: Boolean get_IsStringLiteral() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: FSharpSyntaxTokenKind Kind +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: FSharpSyntaxTokenKind get_Kind() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: range Range +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: range get_Range() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Abstract +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 AdjacentPrefixOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Ampersand +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 AmpersandAmpersand +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 And +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 As +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Asr +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Assert +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Bar +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 BarBar +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 BarRightBrace +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 BarRightBracket +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Base +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Begin +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 BigNumber +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Binder +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 ByteArray +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Char +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Class +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Colon +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 ColonColon +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 ColonEquals +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 ColonGreater +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 ColonQuestionMark +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 ColonQuestionMarkGreater +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Comma +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 CommentTrivia +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Const +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Constraint +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Constructor +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Decimal +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Default +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Delegate +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Do +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 DoBang +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Dollar +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Done +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Dot +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 DotDot +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 DotDotHat +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 DownTo +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Downcast +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Elif +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Else +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 End +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Equals +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Exception +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Extern +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 False +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Finally +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Fixed +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 For +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Fun +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Function +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 FunkyOperatorName +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Global +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Greater +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 GreaterBarRightBracket +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 GreaterRightBracket +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Hash +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 HashElse +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 HashEndIf +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 HashIf +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 HashLight +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 HashLine +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 HighPrecedenceBracketApp +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 HighPrecedenceParenthesisApp +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 HighPrecedenceTypeApp +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Identifier +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Ieee32 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Ieee64 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 If +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 In +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InactiveCode +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixAmpersandOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixAsr +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixAtHatOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixBarOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixCompareOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixLand +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixLor +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixLsl +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixLsr +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixLxor +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixMod +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixStarDivideModuloOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixStarStarOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Inherit +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Inline +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Instance +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Int16 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Int32 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Int32DotDot +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Int64 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Int8 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Interface +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Internal +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 JoinIn +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 KeywordString +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Lazy +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 LeftArrow +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 LeftBrace +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 LeftBraceBar +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 LeftBracket +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 LeftBracketBar +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 LeftBracketLess +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 LeftParenthesis +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 LeftParenthesisStarRightParenthesis +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 LeftQuote +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Less +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Let +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 LineCommentTrivia +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Match +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 MatchBang +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Member +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Minus +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Module +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Mutable +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Namespace +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 NativeInt +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 New +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 None +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Null +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Of +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideAssert +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideBinder +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideBlockBegin +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideBlockEnd +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideBlockSep +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideDeclEnd +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideDo +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideDoBang +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideElse +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideEnd +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideFun +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideFunction +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideInterfaceMember +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideLazy +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideLet +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideReset +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideRightBlockEnd +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideThen +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideWith +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Open +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Or +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Override +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 PercentOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 PlusMinusOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 PrefixOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Private +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Public +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 QuestionMark +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 QuestionMarkQuestionMark +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Quote +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Rec +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Reserved +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 RightArrow +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 RightBrace +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 RightBracket +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 RightParenthesis +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 RightQuote +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 RightQuoteDot +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Semicolon +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 SemicolonSemicolon +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Sig +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Star +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Static +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 String +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 StringText +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Struct +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Then +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 To +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 True +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Try +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Type +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 UInt16 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 UInt32 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 UInt64 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 UInt8 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 UNativeInt +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Underscore +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Upcast +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Val +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Void +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 When +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 While +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 WhitespaceTrivia +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 With +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Yield +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 YieldBang +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean Equals(FSharpSyntaxTokenKind) +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsAbstract +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsAdjacentPrefixOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsAmpersand +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsAmpersandAmpersand +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsAnd +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsAs +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsAsr +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsAssert +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsBar +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsBarBar +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsBarRightBrace +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsBarRightBracket +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsBase +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsBegin +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsBigNumber +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsBinder +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsByteArray +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsChar +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsClass +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsColon +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsColonColon +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsColonEquals +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsColonGreater +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsColonQuestionMark +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsColonQuestionMarkGreater +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsComma +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsCommentTrivia +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsConst +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsConstraint +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsConstructor +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDecimal +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDefault +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDelegate +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDo +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDoBang +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDollar +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDone +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDot +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDotDot +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDotDotHat +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDownTo +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDowncast +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsElif +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsElse +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsEnd +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsEquals +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsException +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsExtern +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsFalse +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsFinally +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsFixed +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsFor +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsFun +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsFunction +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsFunkyOperatorName +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsGlobal +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsGreater +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsGreaterBarRightBracket +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsGreaterRightBracket +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsHash +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsHashElse +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsHashEndIf +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsHashIf +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsHashLight +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsHashLine +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsHighPrecedenceBracketApp +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsHighPrecedenceParenthesisApp +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsHighPrecedenceTypeApp +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsIdentifier +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsIeee32 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsIeee64 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsIf +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsIn +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInactiveCode +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixAmpersandOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixAsr +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixAtHatOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixBarOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixCompareOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixLand +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixLor +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixLsl +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixLsr +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixLxor +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixMod +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixStarDivideModuloOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixStarStarOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInherit +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInline +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInstance +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInt16 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInt32 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInt32DotDot +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInt64 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInt8 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInterface +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInternal +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsJoinIn +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsKeywordString +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLazy +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLeftArrow +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLeftBrace +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLeftBraceBar +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLeftBracket +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLeftBracketBar +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLeftBracketLess +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLeftParenthesis +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLeftParenthesisStarRightParenthesis +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLeftQuote +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLess +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLet +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLineCommentTrivia +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsMatch +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsMatchBang +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsMember +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsMinus +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsModule +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsMutable +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsNamespace +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsNativeInt +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsNew +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsNone +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsNull +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOf +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideAssert +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideBinder +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideBlockBegin +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideBlockEnd +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideBlockSep +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideDeclEnd +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideDo +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideDoBang +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideElse +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideEnd +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideFun +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideFunction +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideInterfaceMember +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideLazy +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideLet +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideReset +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideRightBlockEnd +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideThen +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideWith +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOpen +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOr +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOverride +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsPercentOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsPlusMinusOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsPrefixOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsPrivate +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsPublic +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsQuestionMark +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsQuestionMarkQuestionMark +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsQuote +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsRec +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsReserved +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsRightArrow +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsRightBrace +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsRightBracket +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsRightParenthesis +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsRightQuote +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsRightQuoteDot +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsSemicolon +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsSemicolonSemicolon +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsSig +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsStar +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsStatic +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsString +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsStringText +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsStruct +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsThen +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsTo +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsTrue +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsTry +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsType +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsUInt16 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsUInt32 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsUInt64 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsUInt8 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsUNativeInt +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsUnderscore +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsUpcast +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsVal +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsVoid +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsWhen +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsWhile +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsWhitespaceTrivia +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsWith +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsYield +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsYieldBang +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsAbstract() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsAdjacentPrefixOperator() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsAmpersand() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsAmpersandAmpersand() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsAnd() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsAs() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsAsr() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsAssert() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsBar() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsBarBar() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsBarRightBrace() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsBarRightBracket() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsBase() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsBegin() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsBigNumber() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsBinder() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsByteArray() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsChar() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsClass() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsColon() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsColonColon() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsColonEquals() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsColonGreater() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsColonQuestionMark() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsColonQuestionMarkGreater() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsComma() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsCommentTrivia() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsConst() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsConstraint() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsConstructor() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDecimal() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDefault() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDelegate() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDo() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDoBang() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDollar() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDone() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDot() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDotDot() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDotDotHat() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDownTo() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDowncast() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsElif() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsElse() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsEnd() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsEquals() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsException() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsExtern() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsFalse() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsFinally() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsFixed() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsFor() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsFun() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsFunction() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsFunkyOperatorName() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsGlobal() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsGreater() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsGreaterBarRightBracket() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsGreaterRightBracket() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsHash() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsHashElse() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsHashEndIf() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsHashIf() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsHashLight() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsHashLine() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsHighPrecedenceBracketApp() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsHighPrecedenceParenthesisApp() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsHighPrecedenceTypeApp() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsIdentifier() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsIeee32() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsIeee64() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsIf() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsIn() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInactiveCode() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixAmpersandOperator() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixAsr() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixAtHatOperator() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixBarOperator() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixCompareOperator() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixLand() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixLor() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixLsl() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixLsr() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixLxor() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixMod() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixStarDivideModuloOperator() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixStarStarOperator() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInherit() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInline() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInstance() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInt16() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInt32() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInt32DotDot() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInt64() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInt8() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInterface() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInternal() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsJoinIn() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsKeywordString() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLazy() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLeftArrow() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLeftBrace() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLeftBraceBar() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLeftBracket() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLeftBracketBar() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLeftBracketLess() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLeftParenthesis() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLeftParenthesisStarRightParenthesis() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLeftQuote() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLess() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLet() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLineCommentTrivia() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsMatch() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsMatchBang() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsMember() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsMinus() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsModule() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsMutable() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsNamespace() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsNativeInt() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsNew() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsNone() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsNull() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOf() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideAssert() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideBinder() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideBlockBegin() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideBlockEnd() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideBlockSep() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideDeclEnd() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideDo() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideDoBang() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideElse() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideEnd() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideFun() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideFunction() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideInterfaceMember() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideLazy() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideLet() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideReset() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideRightBlockEnd() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideThen() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideWith() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOpen() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOr() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOverride() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsPercentOperator() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsPlusMinusOperator() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsPrefixOperator() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsPrivate() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsPublic() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsQuestionMark() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsQuestionMarkQuestionMark() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsQuote() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsRec() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsReserved() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsRightArrow() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsRightBrace() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsRightBracket() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsRightParenthesis() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsRightQuote() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsRightQuoteDot() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsSemicolon() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsSemicolonSemicolon() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsSig() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsStar() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsStatic() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsString() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsStringText() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsStruct() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsThen() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsTo() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsTrue() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsTry() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsType() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsUInt16() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsUInt32() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsUInt64() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsUInt8() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsUNativeInt() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsUnderscore() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsUpcast() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsVal() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsVoid() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsWhen() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsWhile() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsWhitespaceTrivia() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsWith() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsYield() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsYieldBang() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Abstract +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind AdjacentPrefixOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Ampersand +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind AmpersandAmpersand +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind And +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind As +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Asr +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Assert +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Bar +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind BarBar +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind BarRightBrace +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind BarRightBracket +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Base +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Begin +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind BigNumber +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Binder +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind ByteArray +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Char +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Class +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Colon +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind ColonColon +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind ColonEquals +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind ColonGreater +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind ColonQuestionMark +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind ColonQuestionMarkGreater +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Comma +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind CommentTrivia +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Const +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Constraint +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Constructor +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Decimal +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Default +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Delegate +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Do +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind DoBang +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Dollar +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Done +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Dot +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind DotDot +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind DotDotHat +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind DownTo +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Downcast +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Elif +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Else +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind End +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Equals +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Exception +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Extern +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind False +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Finally +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Fixed +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind For +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Fun +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Function +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind FunkyOperatorName +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Global +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Greater +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind GreaterBarRightBracket +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind GreaterRightBracket +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Hash +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind HashElse +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind HashEndIf +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind HashIf +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind HashLight +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind HashLine +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind HighPrecedenceBracketApp +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind HighPrecedenceParenthesisApp +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind HighPrecedenceTypeApp +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Identifier +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Ieee32 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Ieee64 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind If +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind In +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InactiveCode +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixAmpersandOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixAsr +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixAtHatOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixBarOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixCompareOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixLand +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixLor +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixLsl +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixLsr +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixLxor +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixMod +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixStarDivideModuloOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixStarStarOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Inherit +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Inline +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Instance +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Int16 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Int32 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Int32DotDot +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Int64 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Int8 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Interface +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Internal +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind JoinIn +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind KeywordString +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Lazy +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind LeftArrow +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind LeftBrace +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind LeftBraceBar +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind LeftBracket +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind LeftBracketBar +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind LeftBracketLess +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind LeftParenthesis +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind LeftParenthesisStarRightParenthesis +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind LeftQuote +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Less +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Let +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind LineCommentTrivia +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Match +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind MatchBang +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Member +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Minus +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Module +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Mutable +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Namespace +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind NativeInt +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind New +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind None +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Null +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Of +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideAssert +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideBinder +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideBlockBegin +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideBlockEnd +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideBlockSep +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideDeclEnd +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideDo +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideDoBang +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideElse +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideEnd +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideFun +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideFunction +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideInterfaceMember +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideLazy +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideLet +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideReset +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideRightBlockEnd +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideThen +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideWith +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Open +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Or +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Override +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind PercentOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind PlusMinusOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind PrefixOperator +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Private +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Public +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind QuestionMark +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind QuestionMarkQuestionMark +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Quote +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Rec +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Reserved +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind RightArrow +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind RightBrace +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind RightBracket +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind RightParenthesis +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind RightQuote +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind RightQuoteDot +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Semicolon +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind SemicolonSemicolon +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Sig +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Star +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Static +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind String +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind StringText +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Struct +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Then +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind To +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind True +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Try +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Type +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind UInt16 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind UInt32 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind UInt64 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind UInt8 +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind UNativeInt +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Underscore +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Upcast +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Val +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Void +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind When +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind While +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind WhitespaceTrivia +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind With +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Yield +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind YieldBang +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Abstract() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_AdjacentPrefixOperator() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Ampersand() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_AmpersandAmpersand() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_And() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_As() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Asr() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Assert() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Bar() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_BarBar() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_BarRightBrace() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_BarRightBracket() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Base() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Begin() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_BigNumber() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Binder() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_ByteArray() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Char() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Class() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Colon() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_ColonColon() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_ColonEquals() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_ColonGreater() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_ColonQuestionMark() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_ColonQuestionMarkGreater() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Comma() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_CommentTrivia() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Const() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Constraint() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Constructor() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Decimal() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Default() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Delegate() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Do() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_DoBang() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Dollar() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Done() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Dot() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_DotDot() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_DotDotHat() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_DownTo() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Downcast() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Elif() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Else() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_End() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Equals() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Exception() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Extern() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_False() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Finally() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Fixed() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_For() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Fun() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Function() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_FunkyOperatorName() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Global() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Greater() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_GreaterBarRightBracket() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_GreaterRightBracket() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Hash() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_HashElse() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_HashEndIf() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_HashIf() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_HashLight() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_HashLine() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_HighPrecedenceBracketApp() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_HighPrecedenceParenthesisApp() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_HighPrecedenceTypeApp() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Identifier() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Ieee32() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Ieee64() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_If() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_In() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InactiveCode() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixAmpersandOperator() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixAsr() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixAtHatOperator() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixBarOperator() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixCompareOperator() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixLand() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixLor() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixLsl() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixLsr() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixLxor() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixMod() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixStarDivideModuloOperator() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixStarStarOperator() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Inherit() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Inline() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Instance() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Int16() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Int32() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Int32DotDot() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Int64() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Int8() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Interface() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Internal() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_JoinIn() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_KeywordString() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Lazy() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_LeftArrow() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_LeftBrace() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_LeftBraceBar() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_LeftBracket() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_LeftBracketBar() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_LeftBracketLess() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_LeftParenthesis() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_LeftParenthesisStarRightParenthesis() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_LeftQuote() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Less() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Let() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_LineCommentTrivia() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Match() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_MatchBang() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Member() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Minus() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Module() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Mutable() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Namespace() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_NativeInt() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_New() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_None() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Null() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Of() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideAssert() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideBinder() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideBlockBegin() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideBlockEnd() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideBlockSep() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideDeclEnd() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideDo() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideDoBang() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideElse() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideEnd() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideFun() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideFunction() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideInterfaceMember() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideLazy() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideLet() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideReset() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideRightBlockEnd() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideThen() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideWith() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Open() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Or() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Override() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_PercentOperator() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_PlusMinusOperator() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_PrefixOperator() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Private() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Public() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_QuestionMark() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_QuestionMarkQuestionMark() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Quote() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Rec() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Reserved() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_RightArrow() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_RightBrace() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_RightBracket() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_RightParenthesis() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_RightQuote() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_RightQuoteDot() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Semicolon() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_SemicolonSemicolon() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Sig() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Star() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Static() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_String() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_StringText() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Struct() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Then() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_To() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_True() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Try() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Type() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_UInt16() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_UInt32() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_UInt64() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_UInt8() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_UNativeInt() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Underscore() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Upcast() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Val() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Void() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_When() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_While() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_WhitespaceTrivia() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_With() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Yield() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_YieldBang() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Int32 CompareTo(FSharpSyntaxTokenKind) +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Int32 Tag +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: System.String ToString() +FSharp.Compiler.SourceCodeServices.Lexer: FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexer +FSharp.Compiler.SourceCodeServices.Lexer: FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexerFlags +FSharp.Compiler.SourceCodeServices.Lexer: FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken +FSharp.Compiler.SourceCodeServices.Lexer: FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind +FSharp.Compiler.SourceCodeServices.LookupType+Tags: Int32 Fuzzy +FSharp.Compiler.SourceCodeServices.LookupType+Tags: Int32 Precise +FSharp.Compiler.SourceCodeServices.LookupType: Boolean Equals(FSharp.Compiler.SourceCodeServices.LookupType) +FSharp.Compiler.SourceCodeServices.LookupType: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.LookupType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.LookupType: Boolean IsFuzzy +FSharp.Compiler.SourceCodeServices.LookupType: Boolean IsPrecise +FSharp.Compiler.SourceCodeServices.LookupType: Boolean get_IsFuzzy() +FSharp.Compiler.SourceCodeServices.LookupType: Boolean get_IsPrecise() +FSharp.Compiler.SourceCodeServices.LookupType: FSharp.Compiler.SourceCodeServices.LookupType Fuzzy +FSharp.Compiler.SourceCodeServices.LookupType: FSharp.Compiler.SourceCodeServices.LookupType Precise +FSharp.Compiler.SourceCodeServices.LookupType: FSharp.Compiler.SourceCodeServices.LookupType get_Fuzzy() +FSharp.Compiler.SourceCodeServices.LookupType: FSharp.Compiler.SourceCodeServices.LookupType get_Precise() +FSharp.Compiler.SourceCodeServices.LookupType: FSharp.Compiler.SourceCodeServices.LookupType+Tags +FSharp.Compiler.SourceCodeServices.LookupType: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.LookupType) +FSharp.Compiler.SourceCodeServices.LookupType: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.LookupType: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.LookupType: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.LookupType: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.LookupType: Int32 Tag +FSharp.Compiler.SourceCodeServices.LookupType: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.LookupType: System.String ToString() +FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Boolean Equals(FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent) +FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Boolean Resolved +FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Boolean get_Resolved() +FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent) +FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: System.String Ident +FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: System.String ToString() +FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: System.String get_Ident() +FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Void .ctor(System.String, Boolean) +FSharp.Compiler.SourceCodeServices.ModuleKind: Boolean Equals(FSharp.Compiler.SourceCodeServices.ModuleKind) +FSharp.Compiler.SourceCodeServices.ModuleKind: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.ModuleKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ModuleKind: Boolean HasModuleSuffix +FSharp.Compiler.SourceCodeServices.ModuleKind: Boolean IsAutoOpen +FSharp.Compiler.SourceCodeServices.ModuleKind: Boolean get_HasModuleSuffix() +FSharp.Compiler.SourceCodeServices.ModuleKind: Boolean get_IsAutoOpen() +FSharp.Compiler.SourceCodeServices.ModuleKind: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ModuleKind) +FSharp.Compiler.SourceCodeServices.ModuleKind: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.ModuleKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.ModuleKind: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.ModuleKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ModuleKind: System.String ToString() +FSharp.Compiler.SourceCodeServices.ModuleKind: Void .ctor(Boolean, Boolean) +FSharp.Compiler.SourceCodeServices.NavigateTo+Container: Boolean Equals(Container) +FSharp.Compiler.SourceCodeServices.NavigateTo+Container: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.NavigateTo+Container: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.NavigateTo+Container: ContainerType Type +FSharp.Compiler.SourceCodeServices.NavigateTo+Container: ContainerType get_Type() +FSharp.Compiler.SourceCodeServices.NavigateTo+Container: Int32 CompareTo(Container) +FSharp.Compiler.SourceCodeServices.NavigateTo+Container: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.NavigateTo+Container: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.NavigateTo+Container: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.NavigateTo+Container: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.NavigateTo+Container: System.String Name +FSharp.Compiler.SourceCodeServices.NavigateTo+Container: System.String ToString() +FSharp.Compiler.SourceCodeServices.NavigateTo+Container: System.String get_Name() +FSharp.Compiler.SourceCodeServices.NavigateTo+Container: Void .ctor(ContainerType, System.String) +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType+Tags: Int32 Exception +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType+Tags: Int32 File +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType+Tags: Int32 Module +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType+Tags: Int32 Namespace +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType+Tags: Int32 Type +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean Equals(ContainerType) +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean IsException +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean IsFile +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean IsModule +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean IsNamespace +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean IsType +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean get_IsException() +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean get_IsFile() +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean get_IsModule() +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean get_IsNamespace() +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean get_IsType() +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: ContainerType Exception +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: ContainerType File +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: ContainerType Module +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: ContainerType Namespace +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: ContainerType Type +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: ContainerType get_Exception() +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: ContainerType get_File() +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: ContainerType get_Module() +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: ContainerType get_Namespace() +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: ContainerType get_Type() +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType+Tags +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Int32 CompareTo(ContainerType) +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Int32 Tag +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: System.String ToString() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: Boolean Equals(NavigableItem) +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: Boolean IsSignature +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: Boolean get_IsSignature() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: Container Container +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: Container get_Container() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: NavigableItemKind Kind +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: NavigableItemKind get_Kind() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: System.String Name +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: System.String ToString() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: System.String get_Name() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: Void .ctor(System.String, range, Boolean, NavigableItemKind, Container) +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: range Range +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: range get_Range() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 Constructor +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 EnumCase +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 Exception +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 Field +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 Member +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 Module +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 ModuleAbbreviation +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 ModuleValue +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 Property +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 Type +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 UnionCase +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean Equals(NavigableItemKind) +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsConstructor +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsEnumCase +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsException +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsField +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsMember +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsModule +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsModuleAbbreviation +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsModuleValue +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsProperty +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsType +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsUnionCase +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsConstructor() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsEnumCase() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsException() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsField() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsMember() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsModule() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsModuleAbbreviation() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsModuleValue() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsProperty() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsType() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsUnionCase() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Int32 CompareTo(NavigableItemKind) +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Int32 Tag +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind Constructor +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind EnumCase +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind Exception +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind Field +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind Member +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind Module +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind ModuleAbbreviation +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind ModuleValue +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind Property +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind Type +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind UnionCase +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_Constructor() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_EnumCase() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_Exception() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_Field() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_Member() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_Module() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_ModuleAbbreviation() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_ModuleValue() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_Property() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_Type() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_UnionCase() +FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: System.String ToString() +FSharp.Compiler.SourceCodeServices.NavigateTo: FSharp.Compiler.SourceCodeServices.NavigateTo+Container +FSharp.Compiler.SourceCodeServices.NavigateTo: FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType +FSharp.Compiler.SourceCodeServices.NavigateTo: FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem +FSharp.Compiler.SourceCodeServices.NavigateTo: FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind +FSharp.Compiler.SourceCodeServices.NavigateTo: NavigableItem[] getNavigableItems(ParsedInput) +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint+Tags: Int32 Nearest +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint+Tags: Int32 TopLevel +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Boolean Equals(FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint) +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Boolean IsNearest +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Boolean IsTopLevel +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Boolean get_IsNearest() +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Boolean get_IsTopLevel() +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint Nearest +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint TopLevel +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint get_Nearest() +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint get_TopLevel() +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint+Tags +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint) +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Int32 Tag +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: System.String ToString() +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Boolean Equals(FSharp.Compiler.SourceCodeServices.ParamTypeSymbol) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Boolean IsByref +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Boolean IsParam +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Boolean get_IsByref() +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Boolean get_IsParam() +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: FSharp.Compiler.SourceCodeServices.ExternalType Item +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: FSharp.Compiler.SourceCodeServices.ExternalType get_Item() +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ParamTypeSymbol) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Int32 Tag +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: System.String ToString() +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Boolean Equals(FSharp.Compiler.SourceCodeServices.ParamTypeSymbol) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Boolean IsByref +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Boolean IsParam +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Boolean get_IsByref() +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Boolean get_IsParam() +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: FSharp.Compiler.SourceCodeServices.ExternalType Item +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: FSharp.Compiler.SourceCodeServices.ExternalType get_Item() +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ParamTypeSymbol) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Int32 Tag +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: System.String ToString() +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Tags: Int32 Byref +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Tags: Int32 Param +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Boolean Equals(FSharp.Compiler.SourceCodeServices.ParamTypeSymbol) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Boolean IsByref +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Boolean IsParam +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Boolean get_IsByref() +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Boolean get_IsParam() +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: FSharp.Compiler.SourceCodeServices.ParamTypeSymbol NewByref(FSharp.Compiler.SourceCodeServices.ExternalType) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: FSharp.Compiler.SourceCodeServices.ParamTypeSymbol NewParam(FSharp.Compiler.SourceCodeServices.ExternalType) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Tags +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ParamTypeSymbol) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Int32 Tag +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: System.String ToString() +FSharp.Compiler.SourceCodeServices.ParsedInput: FSharp.Compiler.SourceCodeServices.InsertContext findNearestPointToInsertOpenDeclaration(Int32, ParsedInput, System.String[], FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint) +FSharp.Compiler.SourceCodeServices.ParsedInput: Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`4[Microsoft.FSharp.Core.FSharpOption`1[System.String[]],Microsoft.FSharp.Core.FSharpOption`1[System.String[]],Microsoft.FSharp.Core.FSharpOption`1[System.String[]],System.String[]],System.Tuple`2[FSharp.Compiler.SourceCodeServices.Entity,FSharp.Compiler.SourceCodeServices.InsertContext][]] tryFindInsertionContext(Int32, ParsedInput, FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent[], FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint) +FSharp.Compiler.SourceCodeServices.ParsedInput: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident]] getLongIdentAt(ParsedInput, pos) +FSharp.Compiler.SourceCodeServices.ParsedInput: pos adjustInsertionPoint(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String], FSharp.Compiler.SourceCodeServices.InsertContext) +FSharp.Compiler.SourceCodeServices.PrettyNaming: Boolean IsIdentifierPartCharacter(Char) +FSharp.Compiler.SourceCodeServices.PrettyNaming: Boolean IsLongIdentifierPartCharacter(Char) +FSharp.Compiler.SourceCodeServices.PrettyNaming: Boolean IsOperatorName(System.String) +FSharp.Compiler.SourceCodeServices.PrettyNaming: Microsoft.FSharp.Collections.FSharpList`1[System.String] GetLongNameFromString(System.String) +FSharp.Compiler.SourceCodeServices.PrettyNaming: Microsoft.FSharp.Collections.FSharpList`1[System.String] KeywordNames +FSharp.Compiler.SourceCodeServices.PrettyNaming: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_KeywordNames() +FSharp.Compiler.SourceCodeServices.PrettyNaming: System.String FormatAndOtherOverloadsString(Int32) +FSharp.Compiler.SourceCodeServices.PrettyNaming: System.String QuoteIdentifierIfNeeded(System.String) +FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Boolean Equals(FSharp.Compiler.SourceCodeServices.RecordContext) +FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Boolean IsConstructor +FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Boolean IsCopyOnUpdate +FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Boolean IsNew +FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Boolean get_IsConstructor() +FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Boolean get_IsCopyOnUpdate() +FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Boolean get_IsNew() +FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Int32 Tag +FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: System.String Item +FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: System.String ToString() +FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: System.String get_Item() +FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Boolean Equals(FSharp.Compiler.SourceCodeServices.RecordContext) +FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Boolean IsConstructor +FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Boolean IsCopyOnUpdate +FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Boolean IsNew +FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Boolean get_IsConstructor() +FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Boolean get_IsCopyOnUpdate() +FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Boolean get_IsNew() +FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Int32 Tag +FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: System.String ToString() +FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] Item2 +FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] get_Item2() +FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: range Item1 +FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: range get_Item1() +FSharp.Compiler.SourceCodeServices.RecordContext+New: Boolean Equals(FSharp.Compiler.SourceCodeServices.RecordContext) +FSharp.Compiler.SourceCodeServices.RecordContext+New: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.RecordContext+New: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.RecordContext+New: Boolean IsConstructor +FSharp.Compiler.SourceCodeServices.RecordContext+New: Boolean IsCopyOnUpdate +FSharp.Compiler.SourceCodeServices.RecordContext+New: Boolean IsNew +FSharp.Compiler.SourceCodeServices.RecordContext+New: Boolean get_IsConstructor() +FSharp.Compiler.SourceCodeServices.RecordContext+New: Boolean get_IsCopyOnUpdate() +FSharp.Compiler.SourceCodeServices.RecordContext+New: Boolean get_IsNew() +FSharp.Compiler.SourceCodeServices.RecordContext+New: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.RecordContext+New: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.RecordContext+New: Int32 Tag +FSharp.Compiler.SourceCodeServices.RecordContext+New: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.RecordContext+New: System.String ToString() +FSharp.Compiler.SourceCodeServices.RecordContext+New: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] Item +FSharp.Compiler.SourceCodeServices.RecordContext+New: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] get_Item() +FSharp.Compiler.SourceCodeServices.RecordContext+Tags: Int32 Constructor +FSharp.Compiler.SourceCodeServices.RecordContext+Tags: Int32 CopyOnUpdate +FSharp.Compiler.SourceCodeServices.RecordContext+Tags: Int32 New +FSharp.Compiler.SourceCodeServices.RecordContext: Boolean Equals(FSharp.Compiler.SourceCodeServices.RecordContext) +FSharp.Compiler.SourceCodeServices.RecordContext: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.RecordContext: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.RecordContext: Boolean IsConstructor +FSharp.Compiler.SourceCodeServices.RecordContext: Boolean IsCopyOnUpdate +FSharp.Compiler.SourceCodeServices.RecordContext: Boolean IsNew +FSharp.Compiler.SourceCodeServices.RecordContext: Boolean get_IsConstructor() +FSharp.Compiler.SourceCodeServices.RecordContext: Boolean get_IsCopyOnUpdate() +FSharp.Compiler.SourceCodeServices.RecordContext: Boolean get_IsNew() +FSharp.Compiler.SourceCodeServices.RecordContext: FSharp.Compiler.SourceCodeServices.RecordContext NewConstructor(System.String) +FSharp.Compiler.SourceCodeServices.RecordContext: FSharp.Compiler.SourceCodeServices.RecordContext NewCopyOnUpdate(range, System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]]) +FSharp.Compiler.SourceCodeServices.RecordContext: FSharp.Compiler.SourceCodeServices.RecordContext NewNew(System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]]) +FSharp.Compiler.SourceCodeServices.RecordContext: FSharp.Compiler.SourceCodeServices.RecordContext+Constructor +FSharp.Compiler.SourceCodeServices.RecordContext: FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate +FSharp.Compiler.SourceCodeServices.RecordContext: FSharp.Compiler.SourceCodeServices.RecordContext+New +FSharp.Compiler.SourceCodeServices.RecordContext: FSharp.Compiler.SourceCodeServices.RecordContext+Tags +FSharp.Compiler.SourceCodeServices.RecordContext: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.RecordContext: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.RecordContext: Int32 Tag +FSharp.Compiler.SourceCodeServices.RecordContext: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.RecordContext: System.String ToString() +FSharp.Compiler.SourceCodeServices.ScopeKind+Tags: Int32 HashDirective +FSharp.Compiler.SourceCodeServices.ScopeKind+Tags: Int32 Namespace +FSharp.Compiler.SourceCodeServices.ScopeKind+Tags: Int32 NestedModule +FSharp.Compiler.SourceCodeServices.ScopeKind+Tags: Int32 OpenDeclaration +FSharp.Compiler.SourceCodeServices.ScopeKind+Tags: Int32 TopModule +FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean Equals(FSharp.Compiler.SourceCodeServices.ScopeKind) +FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean IsHashDirective +FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean IsNamespace +FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean IsNestedModule +FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean IsOpenDeclaration +FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean IsTopModule +FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean get_IsHashDirective() +FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean get_IsNamespace() +FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean get_IsNestedModule() +FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean get_IsOpenDeclaration() +FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean get_IsTopModule() +FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind HashDirective +FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind Namespace +FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind NestedModule +FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind OpenDeclaration +FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind TopModule +FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind get_HashDirective() +FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind get_Namespace() +FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind get_NestedModule() +FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind get_OpenDeclaration() +FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind get_TopModule() +FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind+Tags +FSharp.Compiler.SourceCodeServices.ScopeKind: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ScopeKind) +FSharp.Compiler.SourceCodeServices.ScopeKind: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.ScopeKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.ScopeKind: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.ScopeKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.ScopeKind: Int32 Tag +FSharp.Compiler.SourceCodeServices.ScopeKind: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.ScopeKind: System.String ToString() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 ComputationExpression +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 ConstructorForReferenceType +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 ConstructorForValueType +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Delegate +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 DisposableLocalValue +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 DisposableTopLevelValue +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 DisposableType +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Enumeration +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Event +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Exception +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 ExtensionMethod +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Field +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Function +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Interface +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 IntrinsicFunction +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Literal +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 LocalValue +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Method +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Module +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 MutableRecordField +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 MutableVar +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 NamedArgument +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Namespace +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Operator +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Plaintext +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Printf +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Property +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 RecordField +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 RecordFieldAsFunction +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 ReferenceType +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Type +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 TypeArgument +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 TypeDef +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 UnionCase +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 UnionCaseField +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Value +FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 ValueType +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean Equals(FSharp.Compiler.SourceCodeServices.SemanticClassificationType) +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsComputationExpression +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsConstructorForReferenceType +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsConstructorForValueType +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsDelegate +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsDisposableLocalValue +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsDisposableTopLevelValue +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsDisposableType +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsEnumeration +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsEvent +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsException +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsExtensionMethod +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsField +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsFunction +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsInterface +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsIntrinsicFunction +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsLiteral +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsLocalValue +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsMethod +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsModule +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsMutableRecordField +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsMutableVar +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsNamedArgument +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsNamespace +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsOperator +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsPlaintext +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsPrintf +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsProperty +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsRecordField +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsRecordFieldAsFunction +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsReferenceType +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsType +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsTypeArgument +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsTypeDef +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsUnionCase +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsUnionCaseField +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsValue +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsValueType +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsComputationExpression() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsConstructorForReferenceType() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsConstructorForValueType() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsDelegate() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsDisposableLocalValue() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsDisposableTopLevelValue() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsDisposableType() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsEnumeration() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsEvent() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsException() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsExtensionMethod() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsField() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsFunction() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsInterface() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsIntrinsicFunction() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsLiteral() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsLocalValue() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsMethod() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsModule() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsMutableRecordField() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsMutableVar() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsNamedArgument() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsNamespace() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsOperator() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsPlaintext() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsPrintf() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsProperty() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsRecordField() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsRecordFieldAsFunction() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsReferenceType() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsType() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsTypeArgument() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsTypeDef() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsUnionCase() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsUnionCaseField() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsValue() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsValueType() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType ComputationExpression +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType ConstructorForReferenceType +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType ConstructorForValueType +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Delegate +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType DisposableLocalValue +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType DisposableTopLevelValue +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType DisposableType +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Enumeration +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Event +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Exception +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType ExtensionMethod +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Field +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Function +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Interface +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType IntrinsicFunction +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Literal +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType LocalValue +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Method +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Module +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType MutableRecordField +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType MutableVar +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType NamedArgument +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Namespace +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Operator +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Plaintext +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Printf +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Property +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType RecordField +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType RecordFieldAsFunction +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType ReferenceType +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Type +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType TypeArgument +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType TypeDef +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType UnionCase +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType UnionCaseField +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Value +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType ValueType +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_ComputationExpression() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_ConstructorForReferenceType() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_ConstructorForValueType() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Delegate() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_DisposableLocalValue() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_DisposableTopLevelValue() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_DisposableType() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Enumeration() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Event() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Exception() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_ExtensionMethod() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Field() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Function() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Interface() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_IntrinsicFunction() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Literal() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_LocalValue() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Method() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Module() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_MutableRecordField() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_MutableVar() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_NamedArgument() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Namespace() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Operator() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Plaintext() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Printf() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Property() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_RecordField() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_RecordFieldAsFunction() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_ReferenceType() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Type() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_TypeArgument() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_TypeDef() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_UnionCase() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_UnionCaseField() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Value() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_ValueType() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.SemanticClassificationType) +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Int32 Tag +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.SemanticClassificationType: System.String ToString() +FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: Boolean Equals(SimplifiableRange) +FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: System.String RelativeName +FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: System.String ToString() +FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: System.String get_RelativeName() +FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: Void .ctor(range, System.String) +FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: range Range +FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: range get_Range() +FSharp.Compiler.SourceCodeServices.SimplifyNames: FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange +FSharp.Compiler.SourceCodeServices.SimplifyNames: Microsoft.FSharp.Control.FSharpAsync`1[System.Collections.Generic.IEnumerable`1[FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange]] getSimplifiableNames(FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String]) +FSharp.Compiler.SourceCodeServices.SourceFile: Boolean IsCompilable(System.String) +FSharp.Compiler.SourceCodeServices.SourceFile: Boolean MustBeSingleFileProject(System.String) +FSharp.Compiler.SourceCodeServices.Structure+Collapse+Tags: Int32 Below +FSharp.Compiler.SourceCodeServices.Structure+Collapse+Tags: Int32 Same +FSharp.Compiler.SourceCodeServices.Structure+Collapse: Boolean Equals(Collapse) +FSharp.Compiler.SourceCodeServices.Structure+Collapse: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.Structure+Collapse: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.Structure+Collapse: Boolean IsBelow +FSharp.Compiler.SourceCodeServices.Structure+Collapse: Boolean IsSame +FSharp.Compiler.SourceCodeServices.Structure+Collapse: Boolean get_IsBelow() +FSharp.Compiler.SourceCodeServices.Structure+Collapse: Boolean get_IsSame() +FSharp.Compiler.SourceCodeServices.Structure+Collapse: Collapse Below +FSharp.Compiler.SourceCodeServices.Structure+Collapse: Collapse Same +FSharp.Compiler.SourceCodeServices.Structure+Collapse: Collapse get_Below() +FSharp.Compiler.SourceCodeServices.Structure+Collapse: Collapse get_Same() +FSharp.Compiler.SourceCodeServices.Structure+Collapse: FSharp.Compiler.SourceCodeServices.Structure+Collapse+Tags +FSharp.Compiler.SourceCodeServices.Structure+Collapse: Int32 CompareTo(Collapse) +FSharp.Compiler.SourceCodeServices.Structure+Collapse: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.Structure+Collapse: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.Structure+Collapse: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.Structure+Collapse: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.Structure+Collapse: Int32 Tag +FSharp.Compiler.SourceCodeServices.Structure+Collapse: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.Structure+Collapse: System.String ToString() +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 ArrayOrList +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Attribute +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Comment +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 CompExpr +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 CompExprInternal +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Do +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 ElseInIfThenElse +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 EnumCase +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 FinallyInTryFinally +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 For +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 HashDirective +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 IfThenElse +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Interface +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Lambda +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 LetOrUse +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 LetOrUseBang +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Match +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 MatchBang +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 MatchClause +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 MatchLambda +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Member +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Module +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Namespace +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 New +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 ObjExpr +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Open +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Quote +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Record +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 RecordDefn +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 RecordField +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 SpecialFunc +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 ThenInIfThenElse +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 TryFinally +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 TryInTryFinally +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 TryInTryWith +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 TryWith +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Tuple +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Type +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 TypeExtension +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 UnionCase +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 UnionDefn +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Val +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 While +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 WithInTryWith +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 XmlDocComment +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 YieldOrReturn +FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 YieldOrReturnBang +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean Equals(Scope) +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsArrayOrList +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsAttribute +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsComment +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsCompExpr +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsCompExprInternal +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsDo +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsElseInIfThenElse +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsEnumCase +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsFinallyInTryFinally +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsFor +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsHashDirective +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsIfThenElse +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsInterface +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsLambda +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsLetOrUse +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsLetOrUseBang +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsMatch +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsMatchBang +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsMatchClause +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsMatchLambda +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsMember +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsModule +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsNamespace +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsNew +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsObjExpr +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsOpen +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsQuote +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsRecord +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsRecordDefn +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsRecordField +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsSpecialFunc +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsThenInIfThenElse +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsTryFinally +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsTryInTryFinally +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsTryInTryWith +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsTryWith +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsTuple +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsType +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsTypeExtension +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsUnionCase +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsUnionDefn +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsVal +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsWhile +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsWithInTryWith +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsXmlDocComment +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsYieldOrReturn +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsYieldOrReturnBang +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsArrayOrList() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsAttribute() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsComment() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsCompExpr() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsCompExprInternal() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsDo() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsElseInIfThenElse() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsEnumCase() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsFinallyInTryFinally() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsFor() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsHashDirective() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsIfThenElse() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsInterface() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsLambda() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsLetOrUse() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsMatch() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsMatchBang() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsMatchClause() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsMatchLambda() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsMember() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsModule() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsNamespace() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsNew() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsObjExpr() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsOpen() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsQuote() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsRecord() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsRecordDefn() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsRecordField() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsSpecialFunc() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsThenInIfThenElse() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsTryFinally() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsTryInTryFinally() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsTryInTryWith() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsTryWith() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsTuple() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsType() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsTypeExtension() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsUnionCase() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsUnionDefn() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsVal() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsWhile() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsWithInTryWith() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsXmlDocComment() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsYieldOrReturnBang() +FSharp.Compiler.SourceCodeServices.Structure+Scope: FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags +FSharp.Compiler.SourceCodeServices.Structure+Scope: Int32 CompareTo(Scope) +FSharp.Compiler.SourceCodeServices.Structure+Scope: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.Structure+Scope: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.Structure+Scope: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.Structure+Scope: Int32 Tag +FSharp.Compiler.SourceCodeServices.Structure+Scope: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope ArrayOrList +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Attribute +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Comment +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope CompExpr +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope CompExprInternal +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Do +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope ElseInIfThenElse +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope EnumCase +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope FinallyInTryFinally +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope For +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope HashDirective +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope IfThenElse +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Interface +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Lambda +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope LetOrUse +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope LetOrUseBang +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Match +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope MatchBang +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope MatchClause +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope MatchLambda +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Member +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Module +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Namespace +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope New +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope ObjExpr +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Open +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Quote +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Record +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope RecordDefn +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope RecordField +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope SpecialFunc +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope ThenInIfThenElse +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope TryFinally +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope TryInTryFinally +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope TryInTryWith +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope TryWith +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Tuple +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Type +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope TypeExtension +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope UnionCase +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope UnionDefn +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Val +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope While +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope WithInTryWith +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope XmlDocComment +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope YieldOrReturn +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope YieldOrReturnBang +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_ArrayOrList() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Attribute() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Comment() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_CompExpr() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_CompExprInternal() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Do() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_ElseInIfThenElse() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_EnumCase() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_FinallyInTryFinally() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_For() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_HashDirective() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_IfThenElse() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Interface() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Lambda() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_LetOrUse() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_LetOrUseBang() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Match() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_MatchBang() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_MatchClause() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_MatchLambda() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Member() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Module() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Namespace() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_New() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_ObjExpr() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Open() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Quote() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Record() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_RecordDefn() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_RecordField() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_SpecialFunc() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_ThenInIfThenElse() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_TryFinally() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_TryInTryFinally() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_TryInTryWith() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_TryWith() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Tuple() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Type() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_TypeExtension() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_UnionCase() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_UnionDefn() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Val() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_While() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_WithInTryWith() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_XmlDocComment() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_YieldOrReturn() +FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_YieldOrReturnBang() +FSharp.Compiler.SourceCodeServices.Structure+Scope: System.String ToString() +FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: Boolean Equals(ScopeRange) +FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: Collapse Collapse +FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: Collapse get_Collapse() +FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: Scope Scope +FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: Scope get_Scope() +FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: System.String ToString() +FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: Void .ctor(Scope, Collapse, range, range) +FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: range CollapseRange +FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: range Range +FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: range get_CollapseRange() +FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: range get_Range() +FSharp.Compiler.SourceCodeServices.Structure: FSharp.Compiler.SourceCodeServices.Structure+Collapse +FSharp.Compiler.SourceCodeServices.Structure: FSharp.Compiler.SourceCodeServices.Structure+Scope +FSharp.Compiler.SourceCodeServices.Structure: FSharp.Compiler.SourceCodeServices.Structure+ScopeRange +FSharp.Compiler.SourceCodeServices.Structure: System.Collections.Generic.IEnumerable`1[FSharp.Compiler.SourceCodeServices.Structure+ScopeRange] getOutliningRanges(System.String[], ParsedInput) +FSharp.Compiler.SourceCodeServices.Symbol: Boolean hasAttribute[T](System.Collections.Generic.IEnumerable`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute]) +FSharp.Compiler.SourceCodeServices.Symbol: Boolean hasModuleSuffixAttribute(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Symbol: Boolean isAttribute[T](FSharp.Compiler.SourceCodeServices.FSharpAttribute) +FSharp.Compiler.SourceCodeServices.Symbol: Boolean isOperator(System.String) +FSharp.Compiler.SourceCodeServices.Symbol: Boolean isUnnamedUnionCaseField(FSharp.Compiler.SourceCodeServices.FSharpField) +FSharp.Compiler.SourceCodeServices.Symbol: FSharp.Compiler.SourceCodeServices.FSharpType getAbbreviatedType(FSharp.Compiler.SourceCodeServices.FSharpType) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase] |ActivePatternCase|_|(FSharp.Compiler.SourceCodeServices.FSharpSymbol) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] tryGetAttribute[T](System.Collections.Generic.IEnumerable`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute]) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] |Constructor|_|(FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] |TypeWithDefinition|_|(FSharp.Compiler.SourceCodeServices.FSharpType) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpField] |RecordField|_|(FSharp.Compiler.SourceCodeServices.FSharpSymbol) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue] |MemberFunctionOrValue|_|(FSharp.Compiler.SourceCodeServices.FSharpSymbol) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType] |AbbreviatedType|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpUnionCase] |UnionCase|_|(FSharp.Compiler.SourceCodeServices.FSharpSymbol) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |AbstractClass|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Array|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Attribute|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |ByRef|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Class|_|[a](FSharp.Compiler.SourceCodeServices.FSharpEntity, FSharp.Compiler.SourceCodeServices.FSharpEntity, a) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Delegate|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Enum|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Event|_|(FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |ExtensionMember|_|(FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |FSharpException|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |FSharpModule|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |FSharpType|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |FunctionType|_|(FSharp.Compiler.SourceCodeServices.FSharpType) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Function|_|(Boolean, FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Interface|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |MutableVar|_|(FSharp.Compiler.SourceCodeServices.FSharpSymbol) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Namespace|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Parameter|_|(FSharp.Compiler.SourceCodeServices.FSharpSymbol) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Pattern|_|(FSharp.Compiler.SourceCodeServices.FSharpSymbol) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |ProvidedAndErasedType|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |ProvidedType|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Record|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |RefCell|_|(FSharp.Compiler.SourceCodeServices.FSharpType) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Tuple|_|(FSharp.Compiler.SourceCodeServices.FSharpType) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |UnionType|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |ValueType|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpField,FSharp.Compiler.SourceCodeServices.FSharpType]] |Field|_|(FSharp.Compiler.SourceCodeServices.FSharpSymbol) +FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpEntity,FSharp.Compiler.SourceCodeServices.FSharpEntity,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType]]] |FSharpEntity|_|(FSharp.Compiler.SourceCodeServices.FSharpSymbol) +FSharp.Compiler.SourceCodeServices.Symbol: System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpEntity,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType]] getEntityAbbreviatedType(FSharp.Compiler.SourceCodeServices.FSharpEntity) +FSharp.Compiler.SourceCodeServices.Tooltips: FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[System.String] ToFSharpToolTipElement(FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[Internal.Utilities.StructuredFormat.Layout]) +FSharp.Compiler.SourceCodeServices.Tooltips: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[System.String] ToFSharpToolTipText(FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[Internal.Utilities.StructuredFormat.Layout]) +FSharp.Compiler.SourceCodeServices.UnresolvedReferencesSet: Boolean Equals(FSharp.Compiler.SourceCodeServices.UnresolvedReferencesSet) +FSharp.Compiler.SourceCodeServices.UnresolvedReferencesSet: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.UnresolvedReferencesSet: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.UnresolvedReferencesSet: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.UnresolvedReferencesSet: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.UnresolvedReferencesSet: System.String ToString() +FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: Boolean Equals(FSharp.Compiler.SourceCodeServices.UnresolvedSymbol) +FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.UnresolvedSymbol) +FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: System.String DisplayName +FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: System.String FullName +FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: System.String ToString() +FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: System.String get_DisplayName() +FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: System.String get_FullName() +FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: System.String[] Namespace +FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: System.String[] get_Namespace() +FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: Void .ctor(System.String, System.String, System.String[]) +FSharp.Compiler.SourceCodeServices.UntypedParseImpl: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] GetRangeOfExprLeftOfDot(pos, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+ParsedInput]) +FSharp.Compiler.SourceCodeServices.UntypedParseImpl: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.CompletionContext] TryGetCompletionContext(pos, ParsedInput, System.String) +FSharp.Compiler.SourceCodeServices.UntypedParseImpl: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.EntityKind] GetEntityKind(pos, ParsedInput) +FSharp.Compiler.SourceCodeServices.UntypedParseImpl: Microsoft.FSharp.Core.FSharpOption`1[System.String] TryFindExpressionIslandInPosition(pos, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+ParsedInput]) +FSharp.Compiler.SourceCodeServices.UntypedParseImpl: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Range+pos,System.Boolean]] TryFindExpressionASTLeftOfDotLeftOfCursor(pos, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+ParsedInput]) +FSharp.Compiler.SourceCodeServices.UntypedParseImpl: System.String[] GetFullNameOfSmallestModuleOrNamespaceAtPoint(ParsedInput, pos) +FSharp.Compiler.SourceCodeServices.UnusedDeclarations: Microsoft.FSharp.Control.FSharpAsync`1[System.Collections.Generic.IEnumerable`1[FSharp.Compiler.Range+range]] getUnusedDeclarations(FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults, Boolean) +FSharp.Compiler.SourceCodeServices.UnusedOpens: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range]] getUnusedOpens(FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String]) +FSharp.Compiler.SourceCodeServices.XmlDocComment: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] isBlank(System.String) +FSharp.Compiler.SourceCodeServices.XmlDocParser: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.XmlDocable] getXmlDocables(FSharp.Compiler.Text.ISourceText, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+ParsedInput]) +FSharp.Compiler.SourceCodeServices.XmlDocable: Boolean Equals(FSharp.Compiler.SourceCodeServices.XmlDocable) +FSharp.Compiler.SourceCodeServices.XmlDocable: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.XmlDocable: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.XmlDocable: FSharp.Compiler.SourceCodeServices.XmlDocable NewXmlDocable(Int32, Int32, Microsoft.FSharp.Collections.FSharpList`1[System.String]) +FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.XmlDocable) +FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 Tag +FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 get_indent() +FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 get_line() +FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 indent +FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 line +FSharp.Compiler.SourceCodeServices.XmlDocable: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_paramNames() +FSharp.Compiler.SourceCodeServices.XmlDocable: Microsoft.FSharp.Collections.FSharpList`1[System.String] paramNames +FSharp.Compiler.SourceCodeServices.XmlDocable: System.String ToString() +FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Tags: Int32 No +FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Tags: Int32 Yes +FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Boolean Equals(DebugPointAtFinally) +FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Boolean IsNo +FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Boolean IsYes +FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Boolean get_IsNo() +FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Boolean get_IsYes() +FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Int32 Tag +FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: System.String ToString() +FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: range get_range() +FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: range range +FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Boolean Equals(DebugPointAtFinally) +FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Boolean IsNo +FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Boolean IsYes +FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Boolean get_IsNo() +FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Boolean get_IsYes() +FSharp.Compiler.SyntaxTree+DebugPointAtFinally: DebugPointAtFinally NewYes(range) +FSharp.Compiler.SyntaxTree+DebugPointAtFinally: DebugPointAtFinally No +FSharp.Compiler.SyntaxTree+DebugPointAtFinally: DebugPointAtFinally get_No() +FSharp.Compiler.SyntaxTree+DebugPointAtFinally: FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Tags +FSharp.Compiler.SyntaxTree+DebugPointAtFinally: FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes +FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Int32 Tag +FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+DebugPointAtFinally: System.String ToString() +FSharp.Compiler.SyntaxTree+DebugPointAtFor+Tags: Int32 No +FSharp.Compiler.SyntaxTree+DebugPointAtFor+Tags: Int32 Yes +FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Boolean Equals(DebugPointAtFor) +FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Boolean IsNo +FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Boolean IsYes +FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Boolean get_IsNo() +FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Boolean get_IsYes() +FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Int32 Tag +FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: System.String ToString() +FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: range get_range() +FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: range range +FSharp.Compiler.SyntaxTree+DebugPointAtFor: Boolean Equals(DebugPointAtFor) +FSharp.Compiler.SyntaxTree+DebugPointAtFor: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+DebugPointAtFor: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtFor: Boolean IsNo +FSharp.Compiler.SyntaxTree+DebugPointAtFor: Boolean IsYes +FSharp.Compiler.SyntaxTree+DebugPointAtFor: Boolean get_IsNo() +FSharp.Compiler.SyntaxTree+DebugPointAtFor: Boolean get_IsYes() +FSharp.Compiler.SyntaxTree+DebugPointAtFor: DebugPointAtFor NewYes(range) +FSharp.Compiler.SyntaxTree+DebugPointAtFor: DebugPointAtFor No +FSharp.Compiler.SyntaxTree+DebugPointAtFor: DebugPointAtFor get_No() +FSharp.Compiler.SyntaxTree+DebugPointAtFor: FSharp.Compiler.SyntaxTree+DebugPointAtFor+Tags +FSharp.Compiler.SyntaxTree+DebugPointAtFor: FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes +FSharp.Compiler.SyntaxTree+DebugPointAtFor: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+DebugPointAtFor: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtFor: Int32 Tag +FSharp.Compiler.SyntaxTree+DebugPointAtFor: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+DebugPointAtFor: System.String ToString() +FSharp.Compiler.SyntaxTree+DebugPointAtSequential+Tags: Int32 Both +FSharp.Compiler.SyntaxTree+DebugPointAtSequential+Tags: Int32 ExprOnly +FSharp.Compiler.SyntaxTree+DebugPointAtSequential+Tags: Int32 StmtOnly +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Boolean Equals(DebugPointAtSequential) +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Boolean IsBoth +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Boolean IsExprOnly +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Boolean IsStmtOnly +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Boolean get_IsBoth() +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Boolean get_IsExprOnly() +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Boolean get_IsStmtOnly() +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: DebugPointAtSequential Both +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: DebugPointAtSequential ExprOnly +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: DebugPointAtSequential StmtOnly +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: DebugPointAtSequential get_Both() +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: DebugPointAtSequential get_ExprOnly() +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: DebugPointAtSequential get_StmtOnly() +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: FSharp.Compiler.SyntaxTree+DebugPointAtSequential+Tags +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Int32 CompareTo(DebugPointAtSequential) +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Int32 CompareTo(System.Object) +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Int32 Tag +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+DebugPointAtSequential: System.String ToString() +FSharp.Compiler.SyntaxTree+DebugPointAtTry+Tags: Int32 Body +FSharp.Compiler.SyntaxTree+DebugPointAtTry+Tags: Int32 No +FSharp.Compiler.SyntaxTree+DebugPointAtTry+Tags: Int32 Yes +FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Boolean Equals(DebugPointAtTry) +FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Boolean IsBody +FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Boolean IsNo +FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Boolean IsYes +FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Boolean get_IsBody() +FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Boolean get_IsNo() +FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Boolean get_IsYes() +FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Int32 Tag +FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: System.String ToString() +FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: range get_range() +FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: range range +FSharp.Compiler.SyntaxTree+DebugPointAtTry: Boolean Equals(DebugPointAtTry) +FSharp.Compiler.SyntaxTree+DebugPointAtTry: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+DebugPointAtTry: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtTry: Boolean IsBody +FSharp.Compiler.SyntaxTree+DebugPointAtTry: Boolean IsNo +FSharp.Compiler.SyntaxTree+DebugPointAtTry: Boolean IsYes +FSharp.Compiler.SyntaxTree+DebugPointAtTry: Boolean get_IsBody() +FSharp.Compiler.SyntaxTree+DebugPointAtTry: Boolean get_IsNo() +FSharp.Compiler.SyntaxTree+DebugPointAtTry: Boolean get_IsYes() +FSharp.Compiler.SyntaxTree+DebugPointAtTry: DebugPointAtTry Body +FSharp.Compiler.SyntaxTree+DebugPointAtTry: DebugPointAtTry NewYes(range) +FSharp.Compiler.SyntaxTree+DebugPointAtTry: DebugPointAtTry No +FSharp.Compiler.SyntaxTree+DebugPointAtTry: DebugPointAtTry get_Body() +FSharp.Compiler.SyntaxTree+DebugPointAtTry: DebugPointAtTry get_No() +FSharp.Compiler.SyntaxTree+DebugPointAtTry: FSharp.Compiler.SyntaxTree+DebugPointAtTry+Tags +FSharp.Compiler.SyntaxTree+DebugPointAtTry: FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes +FSharp.Compiler.SyntaxTree+DebugPointAtTry: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+DebugPointAtTry: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtTry: Int32 Tag +FSharp.Compiler.SyntaxTree+DebugPointAtTry: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+DebugPointAtTry: System.String ToString() +FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Tags: Int32 No +FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Tags: Int32 Yes +FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Boolean Equals(DebugPointAtWhile) +FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Boolean IsNo +FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Boolean IsYes +FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Boolean get_IsNo() +FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Boolean get_IsYes() +FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Int32 Tag +FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: System.String ToString() +FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: range get_range() +FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: range range +FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Boolean Equals(DebugPointAtWhile) +FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Boolean IsNo +FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Boolean IsYes +FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Boolean get_IsNo() +FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Boolean get_IsYes() +FSharp.Compiler.SyntaxTree+DebugPointAtWhile: DebugPointAtWhile NewYes(range) +FSharp.Compiler.SyntaxTree+DebugPointAtWhile: DebugPointAtWhile No +FSharp.Compiler.SyntaxTree+DebugPointAtWhile: DebugPointAtWhile get_No() +FSharp.Compiler.SyntaxTree+DebugPointAtWhile: FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Tags +FSharp.Compiler.SyntaxTree+DebugPointAtWhile: FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes +FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Int32 Tag +FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+DebugPointAtWhile: System.String ToString() +FSharp.Compiler.SyntaxTree+DebugPointAtWith+Tags: Int32 No +FSharp.Compiler.SyntaxTree+DebugPointAtWith+Tags: Int32 Yes +FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Boolean Equals(DebugPointAtWith) +FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Boolean IsNo +FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Boolean IsYes +FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Boolean get_IsNo() +FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Boolean get_IsYes() +FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Int32 Tag +FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: System.String ToString() +FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: range get_range() +FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: range range +FSharp.Compiler.SyntaxTree+DebugPointAtWith: Boolean Equals(DebugPointAtWith) +FSharp.Compiler.SyntaxTree+DebugPointAtWith: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+DebugPointAtWith: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtWith: Boolean IsNo +FSharp.Compiler.SyntaxTree+DebugPointAtWith: Boolean IsYes +FSharp.Compiler.SyntaxTree+DebugPointAtWith: Boolean get_IsNo() +FSharp.Compiler.SyntaxTree+DebugPointAtWith: Boolean get_IsYes() +FSharp.Compiler.SyntaxTree+DebugPointAtWith: DebugPointAtWith NewYes(range) +FSharp.Compiler.SyntaxTree+DebugPointAtWith: DebugPointAtWith No +FSharp.Compiler.SyntaxTree+DebugPointAtWith: DebugPointAtWith get_No() +FSharp.Compiler.SyntaxTree+DebugPointAtWith: FSharp.Compiler.SyntaxTree+DebugPointAtWith+Tags +FSharp.Compiler.SyntaxTree+DebugPointAtWith: FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes +FSharp.Compiler.SyntaxTree+DebugPointAtWith: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+DebugPointAtWith: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointAtWith: Int32 Tag +FSharp.Compiler.SyntaxTree+DebugPointAtWith: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+DebugPointAtWith: System.String ToString() +FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean Equals(DebugPointForBinding) +FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean IsDebugPointAtBinding +FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean IsNoDebugPointAtDoBinding +FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean IsNoDebugPointAtInvisibleBinding +FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean IsNoDebugPointAtLetBinding +FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean IsNoDebugPointAtStickyBinding +FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean get_IsDebugPointAtBinding() +FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean get_IsNoDebugPointAtDoBinding() +FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean get_IsNoDebugPointAtInvisibleBinding() +FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean get_IsNoDebugPointAtLetBinding() +FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean get_IsNoDebugPointAtStickyBinding() +FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: DebugPointForBinding Combine(DebugPointForBinding) +FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Int32 Tag +FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: System.String ToString() +FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: range get_range() +FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: range range +FSharp.Compiler.SyntaxTree+DebugPointForBinding+Tags: Int32 DebugPointAtBinding +FSharp.Compiler.SyntaxTree+DebugPointForBinding+Tags: Int32 NoDebugPointAtDoBinding +FSharp.Compiler.SyntaxTree+DebugPointForBinding+Tags: Int32 NoDebugPointAtInvisibleBinding +FSharp.Compiler.SyntaxTree+DebugPointForBinding+Tags: Int32 NoDebugPointAtLetBinding +FSharp.Compiler.SyntaxTree+DebugPointForBinding+Tags: Int32 NoDebugPointAtStickyBinding +FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean Equals(DebugPointForBinding) +FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean IsDebugPointAtBinding +FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean IsNoDebugPointAtDoBinding +FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean IsNoDebugPointAtInvisibleBinding +FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean IsNoDebugPointAtLetBinding +FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean IsNoDebugPointAtStickyBinding +FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean get_IsDebugPointAtBinding() +FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean get_IsNoDebugPointAtDoBinding() +FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean get_IsNoDebugPointAtInvisibleBinding() +FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean get_IsNoDebugPointAtLetBinding() +FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean get_IsNoDebugPointAtStickyBinding() +FSharp.Compiler.SyntaxTree+DebugPointForBinding: DebugPointForBinding Combine(DebugPointForBinding) +FSharp.Compiler.SyntaxTree+DebugPointForBinding: DebugPointForBinding NewDebugPointAtBinding(range) +FSharp.Compiler.SyntaxTree+DebugPointForBinding: DebugPointForBinding NoDebugPointAtDoBinding +FSharp.Compiler.SyntaxTree+DebugPointForBinding: DebugPointForBinding NoDebugPointAtInvisibleBinding +FSharp.Compiler.SyntaxTree+DebugPointForBinding: DebugPointForBinding NoDebugPointAtLetBinding +FSharp.Compiler.SyntaxTree+DebugPointForBinding: DebugPointForBinding NoDebugPointAtStickyBinding +FSharp.Compiler.SyntaxTree+DebugPointForBinding: DebugPointForBinding get_NoDebugPointAtDoBinding() +FSharp.Compiler.SyntaxTree+DebugPointForBinding: DebugPointForBinding get_NoDebugPointAtInvisibleBinding() +FSharp.Compiler.SyntaxTree+DebugPointForBinding: DebugPointForBinding get_NoDebugPointAtLetBinding() +FSharp.Compiler.SyntaxTree+DebugPointForBinding: DebugPointForBinding get_NoDebugPointAtStickyBinding() +FSharp.Compiler.SyntaxTree+DebugPointForBinding: FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding +FSharp.Compiler.SyntaxTree+DebugPointForBinding: FSharp.Compiler.SyntaxTree+DebugPointForBinding+Tags +FSharp.Compiler.SyntaxTree+DebugPointForBinding: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+DebugPointForBinding: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointForBinding: Int32 Tag +FSharp.Compiler.SyntaxTree+DebugPointForBinding: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+DebugPointForBinding: System.String ToString() +FSharp.Compiler.SyntaxTree+DebugPointForTarget+Tags: Int32 No +FSharp.Compiler.SyntaxTree+DebugPointForTarget+Tags: Int32 Yes +FSharp.Compiler.SyntaxTree+DebugPointForTarget: Boolean Equals(DebugPointForTarget) +FSharp.Compiler.SyntaxTree+DebugPointForTarget: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+DebugPointForTarget: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointForTarget: Boolean IsNo +FSharp.Compiler.SyntaxTree+DebugPointForTarget: Boolean IsYes +FSharp.Compiler.SyntaxTree+DebugPointForTarget: Boolean get_IsNo() +FSharp.Compiler.SyntaxTree+DebugPointForTarget: Boolean get_IsYes() +FSharp.Compiler.SyntaxTree+DebugPointForTarget: DebugPointForTarget No +FSharp.Compiler.SyntaxTree+DebugPointForTarget: DebugPointForTarget Yes +FSharp.Compiler.SyntaxTree+DebugPointForTarget: DebugPointForTarget get_No() +FSharp.Compiler.SyntaxTree+DebugPointForTarget: DebugPointForTarget get_Yes() +FSharp.Compiler.SyntaxTree+DebugPointForTarget: FSharp.Compiler.SyntaxTree+DebugPointForTarget+Tags +FSharp.Compiler.SyntaxTree+DebugPointForTarget: Int32 CompareTo(DebugPointForTarget) +FSharp.Compiler.SyntaxTree+DebugPointForTarget: Int32 CompareTo(System.Object) +FSharp.Compiler.SyntaxTree+DebugPointForTarget: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SyntaxTree+DebugPointForTarget: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+DebugPointForTarget: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+DebugPointForTarget: Int32 Tag +FSharp.Compiler.SyntaxTree+DebugPointForTarget: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+DebugPointForTarget: System.String ToString() +FSharp.Compiler.SyntaxTree+ExprAtomicFlag: ExprAtomicFlag Atomic +FSharp.Compiler.SyntaxTree+ExprAtomicFlag: ExprAtomicFlag NonAtomic +FSharp.Compiler.SyntaxTree+ExprAtomicFlag: Int32 value__ +FSharp.Compiler.SyntaxTree+Ident: System.String ToString() +FSharp.Compiler.SyntaxTree+Ident: System.String get_idText() +FSharp.Compiler.SyntaxTree+Ident: System.String idText +FSharp.Compiler.SyntaxTree+Ident: Void .ctor(System.String, range) +FSharp.Compiler.SyntaxTree+Ident: range get_idRange() +FSharp.Compiler.SyntaxTree+Ident: range idRange +FSharp.Compiler.SyntaxTree+LongIdentWithDots: Boolean ThereIsAnExtraDotAtTheEnd +FSharp.Compiler.SyntaxTree+LongIdentWithDots: Boolean get_ThereIsAnExtraDotAtTheEnd() +FSharp.Compiler.SyntaxTree+LongIdentWithDots: Int32 Tag +FSharp.Compiler.SyntaxTree+LongIdentWithDots: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+LongIdentWithDots: LongIdentWithDots NewLongIdentWithDots(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range]) +FSharp.Compiler.SyntaxTree+LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range] dotms +FSharp.Compiler.SyntaxTree+LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range] get_dotms() +FSharp.Compiler.SyntaxTree+LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] Lid +FSharp.Compiler.SyntaxTree+LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_Lid() +FSharp.Compiler.SyntaxTree+LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_id() +FSharp.Compiler.SyntaxTree+LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] id +FSharp.Compiler.SyntaxTree+LongIdentWithDots: System.String ToString() +FSharp.Compiler.SyntaxTree+LongIdentWithDots: range Range +FSharp.Compiler.SyntaxTree+LongIdentWithDots: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+LongIdentWithDots: range get_Range() +FSharp.Compiler.SyntaxTree+LongIdentWithDots: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+MemberFlags: Boolean Equals(MemberFlags) +FSharp.Compiler.SyntaxTree+MemberFlags: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+MemberFlags: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+MemberFlags: Boolean IsDispatchSlot +FSharp.Compiler.SyntaxTree+MemberFlags: Boolean IsFinal +FSharp.Compiler.SyntaxTree+MemberFlags: Boolean IsInstance +FSharp.Compiler.SyntaxTree+MemberFlags: Boolean IsOverrideOrExplicitImpl +FSharp.Compiler.SyntaxTree+MemberFlags: Boolean get_IsDispatchSlot() +FSharp.Compiler.SyntaxTree+MemberFlags: Boolean get_IsFinal() +FSharp.Compiler.SyntaxTree+MemberFlags: Boolean get_IsInstance() +FSharp.Compiler.SyntaxTree+MemberFlags: Boolean get_IsOverrideOrExplicitImpl() +FSharp.Compiler.SyntaxTree+MemberFlags: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+MemberFlags: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+MemberFlags: MemberKind MemberKind +FSharp.Compiler.SyntaxTree+MemberFlags: MemberKind get_MemberKind() +FSharp.Compiler.SyntaxTree+MemberFlags: System.String ToString() +FSharp.Compiler.SyntaxTree+MemberFlags: Void .ctor(Boolean, Boolean, Boolean, Boolean, MemberKind) +FSharp.Compiler.SyntaxTree+MemberKind+Tags: Int32 ClassConstructor +FSharp.Compiler.SyntaxTree+MemberKind+Tags: Int32 Constructor +FSharp.Compiler.SyntaxTree+MemberKind+Tags: Int32 Member +FSharp.Compiler.SyntaxTree+MemberKind+Tags: Int32 PropertyGet +FSharp.Compiler.SyntaxTree+MemberKind+Tags: Int32 PropertyGetSet +FSharp.Compiler.SyntaxTree+MemberKind+Tags: Int32 PropertySet +FSharp.Compiler.SyntaxTree+MemberKind: Boolean Equals(MemberKind) +FSharp.Compiler.SyntaxTree+MemberKind: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+MemberKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+MemberKind: Boolean IsClassConstructor +FSharp.Compiler.SyntaxTree+MemberKind: Boolean IsConstructor +FSharp.Compiler.SyntaxTree+MemberKind: Boolean IsMember +FSharp.Compiler.SyntaxTree+MemberKind: Boolean IsPropertyGet +FSharp.Compiler.SyntaxTree+MemberKind: Boolean IsPropertyGetSet +FSharp.Compiler.SyntaxTree+MemberKind: Boolean IsPropertySet +FSharp.Compiler.SyntaxTree+MemberKind: Boolean get_IsClassConstructor() +FSharp.Compiler.SyntaxTree+MemberKind: Boolean get_IsConstructor() +FSharp.Compiler.SyntaxTree+MemberKind: Boolean get_IsMember() +FSharp.Compiler.SyntaxTree+MemberKind: Boolean get_IsPropertyGet() +FSharp.Compiler.SyntaxTree+MemberKind: Boolean get_IsPropertyGetSet() +FSharp.Compiler.SyntaxTree+MemberKind: Boolean get_IsPropertySet() +FSharp.Compiler.SyntaxTree+MemberKind: FSharp.Compiler.SyntaxTree+MemberKind+Tags +FSharp.Compiler.SyntaxTree+MemberKind: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+MemberKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+MemberKind: Int32 Tag +FSharp.Compiler.SyntaxTree+MemberKind: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+MemberKind: MemberKind ClassConstructor +FSharp.Compiler.SyntaxTree+MemberKind: MemberKind Constructor +FSharp.Compiler.SyntaxTree+MemberKind: MemberKind Member +FSharp.Compiler.SyntaxTree+MemberKind: MemberKind PropertyGet +FSharp.Compiler.SyntaxTree+MemberKind: MemberKind PropertyGetSet +FSharp.Compiler.SyntaxTree+MemberKind: MemberKind PropertySet +FSharp.Compiler.SyntaxTree+MemberKind: MemberKind get_ClassConstructor() +FSharp.Compiler.SyntaxTree+MemberKind: MemberKind get_Constructor() +FSharp.Compiler.SyntaxTree+MemberKind: MemberKind get_Member() +FSharp.Compiler.SyntaxTree+MemberKind: MemberKind get_PropertyGet() +FSharp.Compiler.SyntaxTree+MemberKind: MemberKind get_PropertyGetSet() +FSharp.Compiler.SyntaxTree+MemberKind: MemberKind get_PropertySet() +FSharp.Compiler.SyntaxTree+MemberKind: System.String ToString() +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: Boolean IsIDefns +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: Boolean IsIHash +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: Boolean get_IsIDefns() +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: Boolean get_IsIHash() +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: Int32 Tag +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl] defns +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl] get_defns() +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: System.String ToString() +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: range get_range() +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: range range +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: Boolean IsIDefns +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: Boolean IsIHash +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: Boolean get_IsIDefns() +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: Boolean get_IsIHash() +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: Int32 Tag +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: ParsedHashDirective get_hashDirective() +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: ParsedHashDirective hashDirective +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: System.String ToString() +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: range get_range() +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: range range +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+Tags: Int32 IDefns +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+Tags: Int32 IHash +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: Boolean IsIDefns +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: Boolean IsIHash +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: Boolean get_IsIDefns() +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: Boolean get_IsIHash() +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+Tags +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: Int32 Tag +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: ParsedFsiInteraction NewIDefns(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl], range) +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: ParsedFsiInteraction NewIHash(ParsedHashDirective, range) +FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: System.String ToString() +FSharp.Compiler.SyntaxTree+ParsedHashDirective: Int32 Tag +FSharp.Compiler.SyntaxTree+ParsedHashDirective: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+ParsedHashDirective: Microsoft.FSharp.Collections.FSharpList`1[System.String] args +FSharp.Compiler.SyntaxTree+ParsedHashDirective: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_args() +FSharp.Compiler.SyntaxTree+ParsedHashDirective: ParsedHashDirective NewParsedHashDirective(System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], range) +FSharp.Compiler.SyntaxTree+ParsedHashDirective: System.String ToString() +FSharp.Compiler.SyntaxTree+ParsedHashDirective: System.String get_ident() +FSharp.Compiler.SyntaxTree+ParsedHashDirective: System.String ident +FSharp.Compiler.SyntaxTree+ParsedHashDirective: range get_range() +FSharp.Compiler.SyntaxTree+ParsedHashDirective: range range +FSharp.Compiler.SyntaxTree+ParsedImplFile: Int32 Tag +FSharp.Compiler.SyntaxTree+ParsedImplFile: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+ParsedImplFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective] get_hashDirectives() +FSharp.Compiler.SyntaxTree+ParsedImplFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective] hashDirectives +FSharp.Compiler.SyntaxTree+ParsedImplFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedImplFileFragment] fragments +FSharp.Compiler.SyntaxTree+ParsedImplFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedImplFileFragment] get_fragments() +FSharp.Compiler.SyntaxTree+ParsedImplFile: ParsedImplFile NewParsedImplFile(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedImplFileFragment]) +FSharp.Compiler.SyntaxTree+ParsedImplFile: System.String ToString() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: Boolean IsAnonModule +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: Boolean IsNamedModule +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: Boolean get_IsAnonModule() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: Boolean get_IsNamedModule() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: Int32 Tag +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl] decls +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl] get_decls() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: System.String ToString() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: range get_range() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: range range +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: Boolean IsAnonModule +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: Boolean IsNamedModule +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: Boolean get_IsAnonModule() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: Boolean get_IsNamedModule() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: Int32 Tag +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: SynModuleOrNamespace get_namedModule() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: SynModuleOrNamespace namedModule +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: System.String ToString() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Boolean IsAnonModule +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Boolean IsNamedModule +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Boolean get_IsAnonModule() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Boolean get_IsNamedModule() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Boolean get_isRecursive() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Boolean isRecursive +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Int32 Tag +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl] decls +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl] get_decls() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: PreXmlDoc get_xmlDoc() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: PreXmlDoc xmlDoc +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: SynModuleOrNamespaceKind get_kind() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: SynModuleOrNamespaceKind kind +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: System.String ToString() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: range get_range() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: range range +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+Tags: Int32 AnonModule +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+Tags: Int32 NamedModule +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+Tags: Int32 NamespaceFragment +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: Boolean IsAnonModule +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: Boolean IsNamedModule +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: Boolean get_IsAnonModule() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: Boolean get_IsNamedModule() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+Tags +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: Int32 Tag +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: ParsedImplFileFragment NewAnonModule(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl], range) +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: ParsedImplFileFragment NewNamedModule(SynModuleOrNamespace) +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: ParsedImplFileFragment NewNamespaceFragment(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], Boolean, SynModuleOrNamespaceKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl], PreXmlDoc, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], range) +FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: System.String ToString() +FSharp.Compiler.SyntaxTree+ParsedImplFileInput: Boolean get_isScript() +FSharp.Compiler.SyntaxTree+ParsedImplFileInput: Boolean isScript +FSharp.Compiler.SyntaxTree+ParsedImplFileInput: Int32 Tag +FSharp.Compiler.SyntaxTree+ParsedImplFileInput: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective] get_hashDirectives() +FSharp.Compiler.SyntaxTree+ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective] hashDirectives +FSharp.Compiler.SyntaxTree+ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ScopedPragma] get_scopedPragmas() +FSharp.Compiler.SyntaxTree+ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ScopedPragma] scopedPragmas +FSharp.Compiler.SyntaxTree+ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleOrNamespace] get_modules() +FSharp.Compiler.SyntaxTree+ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleOrNamespace] modules +FSharp.Compiler.SyntaxTree+ParsedImplFileInput: ParsedImplFileInput NewParsedImplFileInput(System.String, Boolean, QualifiedNameOfFile, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ScopedPragma], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleOrNamespace], System.Tuple`2[System.Boolean,System.Boolean]) +FSharp.Compiler.SyntaxTree+ParsedImplFileInput: QualifiedNameOfFile get_qualifiedNameOfFile() +FSharp.Compiler.SyntaxTree+ParsedImplFileInput: QualifiedNameOfFile qualifiedNameOfFile +FSharp.Compiler.SyntaxTree+ParsedImplFileInput: System.String ToString() +FSharp.Compiler.SyntaxTree+ParsedImplFileInput: System.String fileName +FSharp.Compiler.SyntaxTree+ParsedImplFileInput: System.String get_fileName() +FSharp.Compiler.SyntaxTree+ParsedImplFileInput: System.Tuple`2[System.Boolean,System.Boolean] get_isLastCompiland() +FSharp.Compiler.SyntaxTree+ParsedImplFileInput: System.Tuple`2[System.Boolean,System.Boolean] isLastCompiland +FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: Boolean IsImplFile +FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: Boolean IsSigFile +FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: Boolean get_IsImplFile() +FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: Boolean get_IsSigFile() +FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: Int32 Tag +FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: ParsedImplFileInput Item +FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: ParsedImplFileInput get_Item() +FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: System.String ToString() +FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: range Range +FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: range get_Range() +FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: Boolean IsImplFile +FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: Boolean IsSigFile +FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: Boolean get_IsImplFile() +FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: Boolean get_IsSigFile() +FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: Int32 Tag +FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: ParsedSigFileInput Item +FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: ParsedSigFileInput get_Item() +FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: System.String ToString() +FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: range Range +FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: range get_Range() +FSharp.Compiler.SyntaxTree+ParsedInput+Tags: Int32 ImplFile +FSharp.Compiler.SyntaxTree+ParsedInput+Tags: Int32 SigFile +FSharp.Compiler.SyntaxTree+ParsedInput: Boolean IsImplFile +FSharp.Compiler.SyntaxTree+ParsedInput: Boolean IsSigFile +FSharp.Compiler.SyntaxTree+ParsedInput: Boolean get_IsImplFile() +FSharp.Compiler.SyntaxTree+ParsedInput: Boolean get_IsSigFile() +FSharp.Compiler.SyntaxTree+ParsedInput: FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile +FSharp.Compiler.SyntaxTree+ParsedInput: FSharp.Compiler.SyntaxTree+ParsedInput+SigFile +FSharp.Compiler.SyntaxTree+ParsedInput: FSharp.Compiler.SyntaxTree+ParsedInput+Tags +FSharp.Compiler.SyntaxTree+ParsedInput: Int32 Tag +FSharp.Compiler.SyntaxTree+ParsedInput: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+ParsedInput: ParsedInput NewImplFile(ParsedImplFileInput) +FSharp.Compiler.SyntaxTree+ParsedInput: ParsedInput NewSigFile(ParsedSigFileInput) +FSharp.Compiler.SyntaxTree+ParsedInput: System.String ToString() +FSharp.Compiler.SyntaxTree+ParsedInput: range Range +FSharp.Compiler.SyntaxTree+ParsedInput: range get_Range() +FSharp.Compiler.SyntaxTree+ParsedSigFile: Int32 Tag +FSharp.Compiler.SyntaxTree+ParsedSigFile: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+ParsedSigFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective] get_hashDirectives() +FSharp.Compiler.SyntaxTree+ParsedSigFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective] hashDirectives +FSharp.Compiler.SyntaxTree+ParsedSigFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedSigFileFragment] fragments +FSharp.Compiler.SyntaxTree+ParsedSigFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedSigFileFragment] get_fragments() +FSharp.Compiler.SyntaxTree+ParsedSigFile: ParsedSigFile NewParsedSigFile(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedSigFileFragment]) +FSharp.Compiler.SyntaxTree+ParsedSigFile: System.String ToString() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: Boolean IsAnonModule +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: Boolean IsNamedModule +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: Boolean get_IsAnonModule() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: Boolean get_IsNamedModule() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: Int32 Tag +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl] decls +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl] get_decls() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: System.String ToString() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: range get_range() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: range range +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: Boolean IsAnonModule +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: Boolean IsNamedModule +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: Boolean get_IsAnonModule() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: Boolean get_IsNamedModule() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: Int32 Tag +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: SynModuleOrNamespaceSig get_namedModule() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: SynModuleOrNamespaceSig namedModule +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: System.String ToString() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Boolean IsAnonModule +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Boolean IsNamedModule +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Boolean get_IsAnonModule() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Boolean get_IsNamedModule() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Boolean get_isRecursive() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Boolean isRecursive +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Int32 Tag +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl] decls +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl] get_decls() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: PreXmlDoc get_xmlDoc() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: PreXmlDoc xmlDoc +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: SynModuleOrNamespaceKind get_kind() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: SynModuleOrNamespaceKind kind +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: System.String ToString() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: range get_range() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: range range +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+Tags: Int32 AnonModule +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+Tags: Int32 NamedModule +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+Tags: Int32 NamespaceFragment +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: Boolean IsAnonModule +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: Boolean IsNamedModule +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: Boolean get_IsAnonModule() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: Boolean get_IsNamedModule() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+Tags +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: Int32 Tag +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: ParsedSigFileFragment NewAnonModule(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl], range) +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: ParsedSigFileFragment NewNamedModule(SynModuleOrNamespaceSig) +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: ParsedSigFileFragment NewNamespaceFragment(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], Boolean, SynModuleOrNamespaceKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl], PreXmlDoc, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], range) +FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: System.String ToString() +FSharp.Compiler.SyntaxTree+ParsedSigFileInput: Int32 Tag +FSharp.Compiler.SyntaxTree+ParsedSigFileInput: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective] get_hashDirectives() +FSharp.Compiler.SyntaxTree+ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective] hashDirectives +FSharp.Compiler.SyntaxTree+ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ScopedPragma] get_scopedPragmas() +FSharp.Compiler.SyntaxTree+ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ScopedPragma] scopedPragmas +FSharp.Compiler.SyntaxTree+ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig] get_modules() +FSharp.Compiler.SyntaxTree+ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig] modules +FSharp.Compiler.SyntaxTree+ParsedSigFileInput: ParsedSigFileInput NewParsedSigFileInput(System.String, QualifiedNameOfFile, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ScopedPragma], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig]) +FSharp.Compiler.SyntaxTree+ParsedSigFileInput: QualifiedNameOfFile get_qualifiedNameOfFile() +FSharp.Compiler.SyntaxTree+ParsedSigFileInput: QualifiedNameOfFile qualifiedNameOfFile +FSharp.Compiler.SyntaxTree+ParsedSigFileInput: System.String ToString() +FSharp.Compiler.SyntaxTree+ParsedSigFileInput: System.String fileName +FSharp.Compiler.SyntaxTree+ParsedSigFileInput: System.String get_fileName() +FSharp.Compiler.SyntaxTree+ParserDetail+Tags: Int32 ErrorRecovery +FSharp.Compiler.SyntaxTree+ParserDetail+Tags: Int32 Ok +FSharp.Compiler.SyntaxTree+ParserDetail: Boolean Equals(ParserDetail) +FSharp.Compiler.SyntaxTree+ParserDetail: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+ParserDetail: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+ParserDetail: Boolean IsErrorRecovery +FSharp.Compiler.SyntaxTree+ParserDetail: Boolean IsOk +FSharp.Compiler.SyntaxTree+ParserDetail: Boolean get_IsErrorRecovery() +FSharp.Compiler.SyntaxTree+ParserDetail: Boolean get_IsOk() +FSharp.Compiler.SyntaxTree+ParserDetail: FSharp.Compiler.SyntaxTree+ParserDetail+Tags +FSharp.Compiler.SyntaxTree+ParserDetail: Int32 CompareTo(ParserDetail) +FSharp.Compiler.SyntaxTree+ParserDetail: Int32 CompareTo(System.Object) +FSharp.Compiler.SyntaxTree+ParserDetail: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SyntaxTree+ParserDetail: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+ParserDetail: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+ParserDetail: Int32 Tag +FSharp.Compiler.SyntaxTree+ParserDetail: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+ParserDetail: ParserDetail ErrorRecovery +FSharp.Compiler.SyntaxTree+ParserDetail: ParserDetail Ok +FSharp.Compiler.SyntaxTree+ParserDetail: ParserDetail get_ErrorRecovery() +FSharp.Compiler.SyntaxTree+ParserDetail: ParserDetail get_Ok() +FSharp.Compiler.SyntaxTree+ParserDetail: System.String ToString() +FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: Ident Id +FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: Ident Item +FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: Ident get_Id() +FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: Ident get_Item() +FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: Int32 Tag +FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: QualifiedNameOfFile NewQualifiedNameOfFile(Ident) +FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: System.String Text +FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: System.String ToString() +FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: System.String get_Text() +FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: range Range +FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: range get_Range() +FSharp.Compiler.SyntaxTree+ScopedPragma: Boolean Equals(ScopedPragma) +FSharp.Compiler.SyntaxTree+ScopedPragma: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+ScopedPragma: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+ScopedPragma: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+ScopedPragma: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+ScopedPragma: Int32 Tag +FSharp.Compiler.SyntaxTree+ScopedPragma: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+ScopedPragma: Int32 get_warningNumber() +FSharp.Compiler.SyntaxTree+ScopedPragma: Int32 warningNumber +FSharp.Compiler.SyntaxTree+ScopedPragma: ScopedPragma NewWarningOff(range, Int32) +FSharp.Compiler.SyntaxTree+ScopedPragma: System.String ToString() +FSharp.Compiler.SyntaxTree+ScopedPragma: range get_range() +FSharp.Compiler.SyntaxTree+ScopedPragma: range range +FSharp.Compiler.SyntaxTree+SeqExprOnly: Boolean Equals(SeqExprOnly) +FSharp.Compiler.SyntaxTree+SeqExprOnly: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+SeqExprOnly: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+SeqExprOnly: Boolean Item +FSharp.Compiler.SyntaxTree+SeqExprOnly: Boolean get_Item() +FSharp.Compiler.SyntaxTree+SeqExprOnly: Int32 CompareTo(SeqExprOnly) +FSharp.Compiler.SyntaxTree+SeqExprOnly: Int32 CompareTo(System.Object) +FSharp.Compiler.SyntaxTree+SeqExprOnly: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SyntaxTree+SeqExprOnly: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+SeqExprOnly: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+SeqExprOnly: Int32 Tag +FSharp.Compiler.SyntaxTree+SeqExprOnly: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SeqExprOnly: SeqExprOnly NewSeqExprOnly(Boolean) +FSharp.Compiler.SyntaxTree+SeqExprOnly: System.String ToString() +FSharp.Compiler.SyntaxTree+SynAccess+Tags: Int32 Internal +FSharp.Compiler.SyntaxTree+SynAccess+Tags: Int32 Private +FSharp.Compiler.SyntaxTree+SynAccess+Tags: Int32 Public +FSharp.Compiler.SyntaxTree+SynAccess: Boolean Equals(SynAccess) +FSharp.Compiler.SyntaxTree+SynAccess: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+SynAccess: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+SynAccess: Boolean IsInternal +FSharp.Compiler.SyntaxTree+SynAccess: Boolean IsPrivate +FSharp.Compiler.SyntaxTree+SynAccess: Boolean IsPublic +FSharp.Compiler.SyntaxTree+SynAccess: Boolean get_IsInternal() +FSharp.Compiler.SyntaxTree+SynAccess: Boolean get_IsPrivate() +FSharp.Compiler.SyntaxTree+SynAccess: Boolean get_IsPublic() +FSharp.Compiler.SyntaxTree+SynAccess: FSharp.Compiler.SyntaxTree+SynAccess+Tags +FSharp.Compiler.SyntaxTree+SynAccess: Int32 CompareTo(SynAccess) +FSharp.Compiler.SyntaxTree+SynAccess: Int32 CompareTo(System.Object) +FSharp.Compiler.SyntaxTree+SynAccess: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SyntaxTree+SynAccess: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+SynAccess: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+SynAccess: Int32 Tag +FSharp.Compiler.SyntaxTree+SynAccess: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynAccess: SynAccess Internal +FSharp.Compiler.SyntaxTree+SynAccess: SynAccess Private +FSharp.Compiler.SyntaxTree+SynAccess: SynAccess Public +FSharp.Compiler.SyntaxTree+SynAccess: SynAccess get_Internal() +FSharp.Compiler.SyntaxTree+SynAccess: SynAccess get_Private() +FSharp.Compiler.SyntaxTree+SynAccess: SynAccess get_Public() +FSharp.Compiler.SyntaxTree+SynAccess: System.String ToString() +FSharp.Compiler.SyntaxTree+SynArgInfo: Boolean get_optional() +FSharp.Compiler.SyntaxTree+SynArgInfo: Boolean optional +FSharp.Compiler.SyntaxTree+SynArgInfo: Int32 Tag +FSharp.Compiler.SyntaxTree+SynArgInfo: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes +FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() +FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] Ident +FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_Ident() +FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_ident() +FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] ident +FSharp.Compiler.SyntaxTree+SynArgInfo: SynArgInfo NewSynArgInfo(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]) +FSharp.Compiler.SyntaxTree+SynArgInfo: System.String ToString() +FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: Boolean IsNamePatPairs +FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: Boolean IsPats +FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: Boolean get_IsNamePatPairs() +FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: Boolean get_IsPats() +FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: Int32 Tag +FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+Ident,FSharp.Compiler.SyntaxTree+SynPat]] get_pats() +FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+Ident,FSharp.Compiler.SyntaxTree+SynPat]] pats +FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: System.String ToString() +FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: range get_range() +FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: range range +FSharp.Compiler.SyntaxTree+SynArgPats+Pats: Boolean IsNamePatPairs +FSharp.Compiler.SyntaxTree+SynArgPats+Pats: Boolean IsPats +FSharp.Compiler.SyntaxTree+SynArgPats+Pats: Boolean get_IsNamePatPairs() +FSharp.Compiler.SyntaxTree+SynArgPats+Pats: Boolean get_IsPats() +FSharp.Compiler.SyntaxTree+SynArgPats+Pats: Int32 Tag +FSharp.Compiler.SyntaxTree+SynArgPats+Pats: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynArgPats+Pats: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat] get_pats() +FSharp.Compiler.SyntaxTree+SynArgPats+Pats: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat] pats +FSharp.Compiler.SyntaxTree+SynArgPats+Pats: System.String ToString() +FSharp.Compiler.SyntaxTree+SynArgPats+Tags: Int32 NamePatPairs +FSharp.Compiler.SyntaxTree+SynArgPats+Tags: Int32 Pats +FSharp.Compiler.SyntaxTree+SynArgPats: Boolean IsNamePatPairs +FSharp.Compiler.SyntaxTree+SynArgPats: Boolean IsPats +FSharp.Compiler.SyntaxTree+SynArgPats: Boolean get_IsNamePatPairs() +FSharp.Compiler.SyntaxTree+SynArgPats: Boolean get_IsPats() +FSharp.Compiler.SyntaxTree+SynArgPats: FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs +FSharp.Compiler.SyntaxTree+SynArgPats: FSharp.Compiler.SyntaxTree+SynArgPats+Pats +FSharp.Compiler.SyntaxTree+SynArgPats: FSharp.Compiler.SyntaxTree+SynArgPats+Tags +FSharp.Compiler.SyntaxTree+SynArgPats: Int32 Tag +FSharp.Compiler.SyntaxTree+SynArgPats: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynArgPats: SynArgPats NewNamePatPairs(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+Ident,FSharp.Compiler.SyntaxTree+SynPat]], range) +FSharp.Compiler.SyntaxTree+SynArgPats: SynArgPats NewPats(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat]) +FSharp.Compiler.SyntaxTree+SynArgPats: System.String ToString() +FSharp.Compiler.SyntaxTree+SynAttribute: Boolean AppliesToGetterAndSetter +FSharp.Compiler.SyntaxTree+SynAttribute: Boolean get_AppliesToGetterAndSetter() +FSharp.Compiler.SyntaxTree+SynAttribute: LongIdentWithDots TypeName +FSharp.Compiler.SyntaxTree+SynAttribute: LongIdentWithDots get_TypeName() +FSharp.Compiler.SyntaxTree+SynAttribute: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] Target +FSharp.Compiler.SyntaxTree+SynAttribute: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_Target() +FSharp.Compiler.SyntaxTree+SynAttribute: SynExpr ArgExpr +FSharp.Compiler.SyntaxTree+SynAttribute: SynExpr get_ArgExpr() +FSharp.Compiler.SyntaxTree+SynAttribute: System.String ToString() +FSharp.Compiler.SyntaxTree+SynAttribute: Void .ctor(LongIdentWithDots, SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], Boolean, range) +FSharp.Compiler.SyntaxTree+SynAttribute: range Range +FSharp.Compiler.SyntaxTree+SynAttribute: range get_Range() +FSharp.Compiler.SyntaxTree+SynAttributeList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttribute] Attributes +FSharp.Compiler.SyntaxTree+SynAttributeList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttribute] get_Attributes() +FSharp.Compiler.SyntaxTree+SynAttributeList: System.String ToString() +FSharp.Compiler.SyntaxTree+SynAttributeList: Void .ctor(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttribute], range) +FSharp.Compiler.SyntaxTree+SynAttributeList: range Range +FSharp.Compiler.SyntaxTree+SynAttributeList: range get_Range() +FSharp.Compiler.SyntaxTree+SynBinding: Boolean get_isMutable() +FSharp.Compiler.SyntaxTree+SynBinding: Boolean get_mustInline() +FSharp.Compiler.SyntaxTree+SynBinding: Boolean isMutable +FSharp.Compiler.SyntaxTree+SynBinding: Boolean mustInline +FSharp.Compiler.SyntaxTree+SynBinding: DebugPointForBinding get_seqPoint() +FSharp.Compiler.SyntaxTree+SynBinding: DebugPointForBinding seqPoint +FSharp.Compiler.SyntaxTree+SynBinding: Int32 Tag +FSharp.Compiler.SyntaxTree+SynBinding: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynBinding: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes +FSharp.Compiler.SyntaxTree+SynBinding: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() +FSharp.Compiler.SyntaxTree+SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility +FSharp.Compiler.SyntaxTree+SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() +FSharp.Compiler.SyntaxTree+SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynBindingReturnInfo] get_returnInfo() +FSharp.Compiler.SyntaxTree+SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynBindingReturnInfo] returnInfo +FSharp.Compiler.SyntaxTree+SynBinding: PreXmlDoc get_xmlDoc() +FSharp.Compiler.SyntaxTree+SynBinding: PreXmlDoc xmlDoc +FSharp.Compiler.SyntaxTree+SynBinding: SynBinding NewBinding(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], SynBindingKind, Boolean, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], PreXmlDoc, SynValData, SynPat, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynBindingReturnInfo], SynExpr, range, DebugPointForBinding) +FSharp.Compiler.SyntaxTree+SynBinding: SynBindingKind get_kind() +FSharp.Compiler.SyntaxTree+SynBinding: SynBindingKind kind +FSharp.Compiler.SyntaxTree+SynBinding: SynExpr expr +FSharp.Compiler.SyntaxTree+SynBinding: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynBinding: SynPat get_headPat() +FSharp.Compiler.SyntaxTree+SynBinding: SynPat headPat +FSharp.Compiler.SyntaxTree+SynBinding: SynValData get_valData() +FSharp.Compiler.SyntaxTree+SynBinding: SynValData valData +FSharp.Compiler.SyntaxTree+SynBinding: System.String ToString() +FSharp.Compiler.SyntaxTree+SynBinding: range RangeOfBindingAndRhs +FSharp.Compiler.SyntaxTree+SynBinding: range RangeOfBindingSansRhs +FSharp.Compiler.SyntaxTree+SynBinding: range RangeOfHeadPat +FSharp.Compiler.SyntaxTree+SynBinding: range get_RangeOfBindingAndRhs() +FSharp.Compiler.SyntaxTree+SynBinding: range get_RangeOfBindingSansRhs() +FSharp.Compiler.SyntaxTree+SynBinding: range get_RangeOfHeadPat() +FSharp.Compiler.SyntaxTree+SynBinding: range get_range() +FSharp.Compiler.SyntaxTree+SynBinding: range range +FSharp.Compiler.SyntaxTree+SynBindingKind+Tags: Int32 DoBinding +FSharp.Compiler.SyntaxTree+SynBindingKind+Tags: Int32 NormalBinding +FSharp.Compiler.SyntaxTree+SynBindingKind+Tags: Int32 StandaloneExpression +FSharp.Compiler.SyntaxTree+SynBindingKind: Boolean Equals(SynBindingKind) +FSharp.Compiler.SyntaxTree+SynBindingKind: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+SynBindingKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+SynBindingKind: Boolean IsDoBinding +FSharp.Compiler.SyntaxTree+SynBindingKind: Boolean IsNormalBinding +FSharp.Compiler.SyntaxTree+SynBindingKind: Boolean IsStandaloneExpression +FSharp.Compiler.SyntaxTree+SynBindingKind: Boolean get_IsDoBinding() +FSharp.Compiler.SyntaxTree+SynBindingKind: Boolean get_IsNormalBinding() +FSharp.Compiler.SyntaxTree+SynBindingKind: Boolean get_IsStandaloneExpression() +FSharp.Compiler.SyntaxTree+SynBindingKind: FSharp.Compiler.SyntaxTree+SynBindingKind+Tags +FSharp.Compiler.SyntaxTree+SynBindingKind: Int32 CompareTo(SynBindingKind) +FSharp.Compiler.SyntaxTree+SynBindingKind: Int32 CompareTo(System.Object) +FSharp.Compiler.SyntaxTree+SynBindingKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SyntaxTree+SynBindingKind: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+SynBindingKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+SynBindingKind: Int32 Tag +FSharp.Compiler.SyntaxTree+SynBindingKind: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynBindingKind: SynBindingKind DoBinding +FSharp.Compiler.SyntaxTree+SynBindingKind: SynBindingKind NormalBinding +FSharp.Compiler.SyntaxTree+SynBindingKind: SynBindingKind StandaloneExpression +FSharp.Compiler.SyntaxTree+SynBindingKind: SynBindingKind get_DoBinding() +FSharp.Compiler.SyntaxTree+SynBindingKind: SynBindingKind get_NormalBinding() +FSharp.Compiler.SyntaxTree+SynBindingKind: SynBindingKind get_StandaloneExpression() +FSharp.Compiler.SyntaxTree+SynBindingKind: System.String ToString() +FSharp.Compiler.SyntaxTree+SynBindingReturnInfo: Int32 Tag +FSharp.Compiler.SyntaxTree+SynBindingReturnInfo: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynBindingReturnInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes +FSharp.Compiler.SyntaxTree+SynBindingReturnInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() +FSharp.Compiler.SyntaxTree+SynBindingReturnInfo: SynBindingReturnInfo NewSynBindingReturnInfo(SynType, range, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList]) +FSharp.Compiler.SyntaxTree+SynBindingReturnInfo: SynType get_typeName() +FSharp.Compiler.SyntaxTree+SynBindingReturnInfo: SynType typeName +FSharp.Compiler.SyntaxTree+SynBindingReturnInfo: System.String ToString() +FSharp.Compiler.SyntaxTree+SynBindingReturnInfo: range get_range() +FSharp.Compiler.SyntaxTree+SynBindingReturnInfo: range range +FSharp.Compiler.SyntaxTree+SynComponentInfo: Boolean get_preferPostfix() +FSharp.Compiler.SyntaxTree+SynComponentInfo: Boolean preferPostfix +FSharp.Compiler.SyntaxTree+SynComponentInfo: Int32 Tag +FSharp.Compiler.SyntaxTree+SynComponentInfo: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() +FSharp.Compiler.SyntaxTree+SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId +FSharp.Compiler.SyntaxTree+SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes +FSharp.Compiler.SyntaxTree+SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() +FSharp.Compiler.SyntaxTree+SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTyparDecl] get_typeParams() +FSharp.Compiler.SyntaxTree+SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTyparDecl] typeParams +FSharp.Compiler.SyntaxTree+SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeConstraint] constraints +FSharp.Compiler.SyntaxTree+SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeConstraint] get_constraints() +FSharp.Compiler.SyntaxTree+SynComponentInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility +FSharp.Compiler.SyntaxTree+SynComponentInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() +FSharp.Compiler.SyntaxTree+SynComponentInfo: PreXmlDoc get_xmlDoc() +FSharp.Compiler.SyntaxTree+SynComponentInfo: PreXmlDoc xmlDoc +FSharp.Compiler.SyntaxTree+SynComponentInfo: SynComponentInfo NewComponentInfo(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTyparDecl], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeConstraint], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], PreXmlDoc, Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) +FSharp.Compiler.SyntaxTree+SynComponentInfo: System.String ToString() +FSharp.Compiler.SyntaxTree+SynComponentInfo: range Range +FSharp.Compiler.SyntaxTree+SynComponentInfo: range get_Range() +FSharp.Compiler.SyntaxTree+SynComponentInfo: range get_range() +FSharp.Compiler.SyntaxTree+SynComponentInfo: range range +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsBool +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsByte +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsBytes +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsChar +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsDecimal +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsDouble +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsInt16 +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsInt32 +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsInt64 +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsMeasure +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsSByte +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsSingle +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsString +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsUInt16 +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsUInt16s +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsUInt32 +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsUInt64 +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsUIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsUnit +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsUserNum +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean Item +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsBool() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsByte() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsBytes() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsChar() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsDecimal() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsDouble() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsInt16() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsInt32() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsInt64() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsMeasure() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsSByte() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsSingle() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsUInt16() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsUInt16s() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsUInt32() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsUInt64() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsUIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsUnit() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsUserNum() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_Item() +FSharp.Compiler.SyntaxTree+SynConst+Bool: Int32 Tag +FSharp.Compiler.SyntaxTree+SynConst+Bool: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynConst+Bool: System.String ToString() +FSharp.Compiler.SyntaxTree+SynConst+Bool: range Range(range) +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsBool +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsByte +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsBytes +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsChar +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsDecimal +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsDouble +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsInt16 +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsInt32 +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsInt64 +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsMeasure +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsSByte +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsSingle +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsString +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsUInt16 +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsUInt16s +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsUInt32 +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsUInt64 +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsUIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsUnit +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsUserNum +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsBool() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsByte() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsBytes() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsChar() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsDecimal() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsDouble() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsInt16() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsInt32() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsInt64() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsMeasure() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsSByte() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsSingle() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsUInt16() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsUInt16s() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsUInt32() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsUInt64() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsUIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsUnit() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsUserNum() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Byte Item +FSharp.Compiler.SyntaxTree+SynConst+Byte: Byte get_Item() +FSharp.Compiler.SyntaxTree+SynConst+Byte: Int32 Tag +FSharp.Compiler.SyntaxTree+SynConst+Byte: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynConst+Byte: System.String ToString() +FSharp.Compiler.SyntaxTree+SynConst+Byte: range Range(range) +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsBool +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsByte +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsBytes +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsChar +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsDecimal +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsDouble +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsInt16 +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsInt32 +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsInt64 +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsMeasure +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsSByte +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsSingle +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsString +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsUInt16 +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsUInt16s +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsUInt32 +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsUInt64 +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsUIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsUnit +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsUserNum +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsBool() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsByte() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsBytes() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsChar() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsDecimal() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsDouble() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsInt16() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsInt32() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsInt64() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsMeasure() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsSByte() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsSingle() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsUInt16() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsUInt16s() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsUInt32() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsUInt64() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsUIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsUnit() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsUserNum() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Byte[] bytes +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Byte[] get_bytes() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Int32 Tag +FSharp.Compiler.SyntaxTree+SynConst+Bytes: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: System.String ToString() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: range Range(range) +FSharp.Compiler.SyntaxTree+SynConst+Bytes: range get_range() +FSharp.Compiler.SyntaxTree+SynConst+Bytes: range range +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsBool +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsByte +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsBytes +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsChar +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsDecimal +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsDouble +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsInt16 +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsInt32 +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsInt64 +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsMeasure +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsSByte +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsSingle +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsString +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsUInt16 +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsUInt16s +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsUInt32 +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsUInt64 +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsUIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsUnit +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsUserNum +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsBool() +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsByte() +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsBytes() +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsChar() +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsDecimal() +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsDouble() +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsInt16() +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsInt32() +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsInt64() +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsMeasure() +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsSByte() +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsSingle() +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsUInt16() +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsUInt16s() +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsUInt32() +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsUInt64() +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsUIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsUnit() +FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsUserNum() +FSharp.Compiler.SyntaxTree+SynConst+Char: Char Item +FSharp.Compiler.SyntaxTree+SynConst+Char: Char get_Item() +FSharp.Compiler.SyntaxTree+SynConst+Char: Int32 Tag +FSharp.Compiler.SyntaxTree+SynConst+Char: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynConst+Char: System.String ToString() +FSharp.Compiler.SyntaxTree+SynConst+Char: range Range(range) +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsBool +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsByte +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsBytes +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsChar +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsDecimal +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsDouble +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsInt16 +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsInt32 +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsInt64 +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsMeasure +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsSByte +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsSingle +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsString +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsUInt16 +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsUInt16s +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsUInt32 +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsUInt64 +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsUIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsUnit +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsUserNum +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsBool() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsByte() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsBytes() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsChar() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsDecimal() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsDouble() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsInt16() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsInt32() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsInt64() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsMeasure() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsSByte() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsSingle() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsUInt16() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsUInt16s() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsUInt32() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsUInt64() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsUIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsUnit() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsUserNum() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Int32 Tag +FSharp.Compiler.SyntaxTree+SynConst+Decimal: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: System.Decimal Item +FSharp.Compiler.SyntaxTree+SynConst+Decimal: System.Decimal get_Item() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: System.String ToString() +FSharp.Compiler.SyntaxTree+SynConst+Decimal: range Range(range) +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsBool +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsByte +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsBytes +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsChar +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsDecimal +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsDouble +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsInt16 +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsInt32 +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsInt64 +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsMeasure +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsSByte +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsSingle +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsString +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsUInt16 +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsUInt16s +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsUInt32 +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsUInt64 +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsUIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsUnit +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsUserNum +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsBool() +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsByte() +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsBytes() +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsChar() +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsDecimal() +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsDouble() +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsInt16() +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsInt32() +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsInt64() +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsMeasure() +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsSByte() +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsSingle() +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsUInt16() +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsUInt16s() +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsUInt32() +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsUInt64() +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsUIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsUnit() +FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsUserNum() +FSharp.Compiler.SyntaxTree+SynConst+Double: Double Item +FSharp.Compiler.SyntaxTree+SynConst+Double: Double get_Item() +FSharp.Compiler.SyntaxTree+SynConst+Double: Int32 Tag +FSharp.Compiler.SyntaxTree+SynConst+Double: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynConst+Double: System.String ToString() +FSharp.Compiler.SyntaxTree+SynConst+Double: range Range(range) +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsBool +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsByte +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsBytes +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsChar +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsDecimal +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsDouble +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsInt16 +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsInt32 +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsInt64 +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsMeasure +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsSByte +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsSingle +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsString +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsUInt16 +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsUInt16s +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsUInt32 +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsUInt64 +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsUIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsUnit +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsUserNum +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsBool() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsByte() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsBytes() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsChar() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsDecimal() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsDouble() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsInt16() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsInt32() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsInt64() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsMeasure() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsSByte() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsSingle() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsUInt16() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsUInt16s() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsUInt32() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsUInt64() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsUIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsUnit() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsUserNum() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Int16 Item +FSharp.Compiler.SyntaxTree+SynConst+Int16: Int16 get_Item() +FSharp.Compiler.SyntaxTree+SynConst+Int16: Int32 Tag +FSharp.Compiler.SyntaxTree+SynConst+Int16: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynConst+Int16: System.String ToString() +FSharp.Compiler.SyntaxTree+SynConst+Int16: range Range(range) +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsBool +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsByte +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsBytes +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsChar +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsDecimal +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsDouble +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsInt16 +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsInt32 +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsInt64 +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsMeasure +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsSByte +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsSingle +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsString +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsUInt16 +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsUInt16s +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsUInt32 +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsUInt64 +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsUIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsUnit +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsUserNum +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsBool() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsByte() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsBytes() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsChar() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsDecimal() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsDouble() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsInt16() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsInt32() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsInt64() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsMeasure() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsSByte() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsSingle() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsUInt16() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsUInt16s() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsUInt32() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsUInt64() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsUIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsUnit() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsUserNum() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Int32 Item +FSharp.Compiler.SyntaxTree+SynConst+Int32: Int32 Tag +FSharp.Compiler.SyntaxTree+SynConst+Int32: Int32 get_Item() +FSharp.Compiler.SyntaxTree+SynConst+Int32: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynConst+Int32: System.String ToString() +FSharp.Compiler.SyntaxTree+SynConst+Int32: range Range(range) +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsBool +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsByte +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsBytes +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsChar +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsDecimal +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsDouble +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsInt16 +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsInt32 +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsInt64 +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsMeasure +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsSByte +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsSingle +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsString +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsUInt16 +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsUInt16s +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsUInt32 +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsUInt64 +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsUIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsUnit +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsUserNum +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsBool() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsByte() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsBytes() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsChar() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsDecimal() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsDouble() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsInt16() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsInt32() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsInt64() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsMeasure() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsSByte() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsSingle() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsUInt16() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsUInt16s() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsUInt32() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsUInt64() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsUIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsUnit() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsUserNum() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Int32 Tag +FSharp.Compiler.SyntaxTree+SynConst+Int64: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynConst+Int64: Int64 Item +FSharp.Compiler.SyntaxTree+SynConst+Int64: Int64 get_Item() +FSharp.Compiler.SyntaxTree+SynConst+Int64: System.String ToString() +FSharp.Compiler.SyntaxTree+SynConst+Int64: range Range(range) +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsBool +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsByte +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsBytes +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsChar +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsDecimal +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsDouble +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsInt16 +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsInt32 +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsInt64 +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsIntPtr +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsMeasure +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsSByte +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsSingle +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsString +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsUInt16 +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsUInt16s +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsUInt32 +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsUInt64 +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsUIntPtr +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsUnit +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsUserNum +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsBool() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsByte() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsBytes() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsChar() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsDecimal() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsDouble() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsInt16() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsInt32() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsInt64() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsMeasure() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsSByte() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsSingle() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsUInt16() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsUInt16s() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsUInt32() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsUInt64() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsUIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsUnit() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsUserNum() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Int32 Tag +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Int64 Item +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Int64 get_Item() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: System.String ToString() +FSharp.Compiler.SyntaxTree+SynConst+IntPtr: range Range(range) +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsBool +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsByte +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsBytes +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsChar +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsDecimal +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsDouble +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsInt16 +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsInt32 +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsInt64 +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsMeasure +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsSByte +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsSingle +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsString +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsUInt16 +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsUInt16s +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsUInt32 +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsUInt64 +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsUIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsUnit +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsUserNum +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsBool() +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsByte() +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsBytes() +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsChar() +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsDecimal() +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsDouble() +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsInt16() +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsInt32() +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsInt64() +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsMeasure() +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsSByte() +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsSingle() +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsUInt16() +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsUInt16s() +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsUInt32() +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsUInt64() +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsUIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsUnit() +FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsUserNum() +FSharp.Compiler.SyntaxTree+SynConst+Measure: Int32 Tag +FSharp.Compiler.SyntaxTree+SynConst+Measure: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynConst+Measure: SynConst constant +FSharp.Compiler.SyntaxTree+SynConst+Measure: SynConst get_constant() +FSharp.Compiler.SyntaxTree+SynConst+Measure: SynMeasure Item2 +FSharp.Compiler.SyntaxTree+SynConst+Measure: SynMeasure get_Item2() +FSharp.Compiler.SyntaxTree+SynConst+Measure: System.String ToString() +FSharp.Compiler.SyntaxTree+SynConst+Measure: range Range(range) +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsBool +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsByte +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsBytes +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsChar +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsDecimal +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsDouble +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsInt16 +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsInt32 +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsInt64 +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsIntPtr +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsMeasure +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsSByte +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsSingle +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsString +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsUInt16 +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsUInt16s +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsUInt32 +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsUInt64 +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsUIntPtr +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsUnit +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsUserNum +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsBool() +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsByte() +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsBytes() +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsChar() +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsDecimal() +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsDouble() +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsInt16() +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsInt32() +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsInt64() +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsMeasure() +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsSByte() +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsSingle() +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsUInt16() +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsUInt16s() +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsUInt32() +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsUInt64() +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsUIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsUnit() +FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsUserNum() +FSharp.Compiler.SyntaxTree+SynConst+SByte: Int32 Tag +FSharp.Compiler.SyntaxTree+SynConst+SByte: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynConst+SByte: SByte Item +FSharp.Compiler.SyntaxTree+SynConst+SByte: SByte get_Item() +FSharp.Compiler.SyntaxTree+SynConst+SByte: System.String ToString() +FSharp.Compiler.SyntaxTree+SynConst+SByte: range Range(range) +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsBool +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsByte +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsBytes +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsChar +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsDecimal +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsDouble +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsInt16 +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsInt32 +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsInt64 +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsMeasure +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsSByte +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsSingle +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsString +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsUInt16 +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsUInt16s +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsUInt32 +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsUInt64 +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsUIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsUnit +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsUserNum +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsBool() +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsByte() +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsBytes() +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsChar() +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsDecimal() +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsDouble() +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsInt16() +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsInt32() +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsInt64() +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsMeasure() +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsSByte() +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsSingle() +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsUInt16() +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsUInt16s() +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsUInt32() +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsUInt64() +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsUIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsUnit() +FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsUserNum() +FSharp.Compiler.SyntaxTree+SynConst+Single: Int32 Tag +FSharp.Compiler.SyntaxTree+SynConst+Single: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynConst+Single: Single Item +FSharp.Compiler.SyntaxTree+SynConst+Single: Single get_Item() +FSharp.Compiler.SyntaxTree+SynConst+Single: System.String ToString() +FSharp.Compiler.SyntaxTree+SynConst+Single: range Range(range) +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsBool +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsByte +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsBytes +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsChar +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsDecimal +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsDouble +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsInt16 +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsInt32 +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsInt64 +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsIntPtr +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsMeasure +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsSByte +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsSingle +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsString +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsUInt16 +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsUInt16s +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsUInt32 +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsUInt64 +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsUIntPtr +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsUnit +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsUserNum +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsBool() +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsByte() +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsBytes() +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsChar() +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsDecimal() +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsDouble() +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsInt16() +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsInt32() +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsInt64() +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsMeasure() +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsSByte() +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsSingle() +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsUInt16() +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsUInt16s() +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsUInt32() +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsUInt64() +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsUIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsUnit() +FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsUserNum() +FSharp.Compiler.SyntaxTree+SynConst+String: Int32 Tag +FSharp.Compiler.SyntaxTree+SynConst+String: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynConst+String: System.String ToString() +FSharp.Compiler.SyntaxTree+SynConst+String: System.String get_text() +FSharp.Compiler.SyntaxTree+SynConst+String: System.String text +FSharp.Compiler.SyntaxTree+SynConst+String: range Range(range) +FSharp.Compiler.SyntaxTree+SynConst+String: range get_range() +FSharp.Compiler.SyntaxTree+SynConst+String: range range +FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Bool +FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Byte +FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Bytes +FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Char +FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Decimal +FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Double +FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Int16 +FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Int32 +FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Int64 +FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 IntPtr +FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Measure +FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 SByte +FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Single +FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 String +FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 UInt16 +FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 UInt16s +FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 UInt32 +FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 UInt64 +FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 UIntPtr +FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Unit +FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 UserNum +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsBool +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsByte +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsBytes +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsChar +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsDecimal +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsDouble +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsInt16 +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsInt32 +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsInt64 +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsIntPtr +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsMeasure +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsSByte +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsSingle +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsString +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsUInt16 +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsUInt16s +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsUInt32 +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsUInt64 +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsUIntPtr +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsUnit +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsUserNum +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsBool() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsByte() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsBytes() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsChar() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsDecimal() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsDouble() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsInt16() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsInt32() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsInt64() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsMeasure() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsSByte() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsSingle() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsUInt16() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsUInt16s() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsUInt32() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsUInt64() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsUIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsUnit() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsUserNum() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Int32 Tag +FSharp.Compiler.SyntaxTree+SynConst+UInt16: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: System.String ToString() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: UInt16 Item +FSharp.Compiler.SyntaxTree+SynConst+UInt16: UInt16 get_Item() +FSharp.Compiler.SyntaxTree+SynConst+UInt16: range Range(range) +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsBool +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsByte +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsBytes +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsChar +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsDecimal +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsDouble +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsInt16 +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsInt32 +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsInt64 +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsIntPtr +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsMeasure +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsSByte +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsSingle +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsString +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsUInt16 +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsUInt16s +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsUInt32 +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsUInt64 +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsUIntPtr +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsUnit +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsUserNum +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsBool() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsByte() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsBytes() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsChar() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsDecimal() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsDouble() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsInt16() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsInt32() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsInt64() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsMeasure() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsSByte() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsSingle() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsUInt16() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsUInt16s() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsUInt32() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsUInt64() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsUIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsUnit() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsUserNum() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Int32 Tag +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: System.String ToString() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: UInt16[] Item +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: UInt16[] get_Item() +FSharp.Compiler.SyntaxTree+SynConst+UInt16s: range Range(range) +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsBool +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsByte +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsBytes +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsChar +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsDecimal +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsDouble +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsInt16 +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsInt32 +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsInt64 +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsIntPtr +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsMeasure +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsSByte +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsSingle +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsString +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsUInt16 +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsUInt16s +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsUInt32 +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsUInt64 +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsUIntPtr +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsUnit +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsUserNum +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsBool() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsByte() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsBytes() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsChar() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsDecimal() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsDouble() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsInt16() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsInt32() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsInt64() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsMeasure() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsSByte() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsSingle() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsUInt16() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsUInt16s() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsUInt32() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsUInt64() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsUIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsUnit() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsUserNum() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Int32 Tag +FSharp.Compiler.SyntaxTree+SynConst+UInt32: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: System.String ToString() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: UInt32 Item +FSharp.Compiler.SyntaxTree+SynConst+UInt32: UInt32 get_Item() +FSharp.Compiler.SyntaxTree+SynConst+UInt32: range Range(range) +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsBool +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsByte +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsBytes +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsChar +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsDecimal +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsDouble +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsInt16 +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsInt32 +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsInt64 +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsIntPtr +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsMeasure +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsSByte +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsSingle +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsString +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsUInt16 +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsUInt16s +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsUInt32 +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsUInt64 +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsUIntPtr +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsUnit +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsUserNum +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsBool() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsByte() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsBytes() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsChar() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsDecimal() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsDouble() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsInt16() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsInt32() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsInt64() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsMeasure() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsSByte() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsSingle() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsUInt16() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsUInt16s() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsUInt32() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsUInt64() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsUIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsUnit() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsUserNum() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Int32 Tag +FSharp.Compiler.SyntaxTree+SynConst+UInt64: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: System.String ToString() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: UInt64 Item +FSharp.Compiler.SyntaxTree+SynConst+UInt64: UInt64 get_Item() +FSharp.Compiler.SyntaxTree+SynConst+UInt64: range Range(range) +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsBool +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsByte +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsBytes +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsChar +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsDecimal +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsDouble +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsInt16 +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsInt32 +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsInt64 +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsIntPtr +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsMeasure +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsSByte +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsSingle +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsString +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsUInt16 +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsUInt16s +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsUInt32 +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsUInt64 +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsUIntPtr +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsUnit +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsUserNum +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsBool() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsByte() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsBytes() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsChar() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsDecimal() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsDouble() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsInt16() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsInt32() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsInt64() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsMeasure() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsSByte() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsSingle() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsUInt16() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsUInt16s() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsUInt32() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsUInt64() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsUIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsUnit() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsUserNum() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Int32 Tag +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: System.String ToString() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: UInt64 Item +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: UInt64 get_Item() +FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: range Range(range) +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsBool +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsByte +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsBytes +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsChar +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsDecimal +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsDouble +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsInt16 +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsInt32 +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsInt64 +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsIntPtr +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsMeasure +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsSByte +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsSingle +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsString +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsUInt16 +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsUInt16s +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsUInt32 +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsUInt64 +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsUIntPtr +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsUnit +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsUserNum +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsBool() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsByte() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsBytes() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsChar() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsDecimal() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsDouble() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsInt16() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsInt32() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsInt64() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsMeasure() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsSByte() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsSingle() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsUInt16() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsUInt16s() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsUInt32() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsUInt64() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsUIntPtr() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsUnit() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsUserNum() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Int32 Tag +FSharp.Compiler.SyntaxTree+SynConst+UserNum: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: System.String ToString() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: System.String get_suffix() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: System.String get_value() +FSharp.Compiler.SyntaxTree+SynConst+UserNum: System.String suffix +FSharp.Compiler.SyntaxTree+SynConst+UserNum: System.String value +FSharp.Compiler.SyntaxTree+SynConst+UserNum: range Range(range) +FSharp.Compiler.SyntaxTree+SynConst: Boolean IsBool +FSharp.Compiler.SyntaxTree+SynConst: Boolean IsByte +FSharp.Compiler.SyntaxTree+SynConst: Boolean IsBytes +FSharp.Compiler.SyntaxTree+SynConst: Boolean IsChar +FSharp.Compiler.SyntaxTree+SynConst: Boolean IsDecimal +FSharp.Compiler.SyntaxTree+SynConst: Boolean IsDouble +FSharp.Compiler.SyntaxTree+SynConst: Boolean IsInt16 +FSharp.Compiler.SyntaxTree+SynConst: Boolean IsInt32 +FSharp.Compiler.SyntaxTree+SynConst: Boolean IsInt64 +FSharp.Compiler.SyntaxTree+SynConst: Boolean IsIntPtr +FSharp.Compiler.SyntaxTree+SynConst: Boolean IsMeasure +FSharp.Compiler.SyntaxTree+SynConst: Boolean IsSByte +FSharp.Compiler.SyntaxTree+SynConst: Boolean IsSingle +FSharp.Compiler.SyntaxTree+SynConst: Boolean IsString +FSharp.Compiler.SyntaxTree+SynConst: Boolean IsUInt16 +FSharp.Compiler.SyntaxTree+SynConst: Boolean IsUInt16s +FSharp.Compiler.SyntaxTree+SynConst: Boolean IsUInt32 +FSharp.Compiler.SyntaxTree+SynConst: Boolean IsUInt64 +FSharp.Compiler.SyntaxTree+SynConst: Boolean IsUIntPtr +FSharp.Compiler.SyntaxTree+SynConst: Boolean IsUnit +FSharp.Compiler.SyntaxTree+SynConst: Boolean IsUserNum +FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsBool() +FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsByte() +FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsBytes() +FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsChar() +FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsDecimal() +FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsDouble() +FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsInt16() +FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsInt32() +FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsInt64() +FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsIntPtr() +FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsMeasure() +FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsSByte() +FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsSingle() +FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsUInt16() +FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsUInt16s() +FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsUInt32() +FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsUInt64() +FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsUIntPtr() +FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsUnit() +FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsUserNum() +FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Bool +FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Byte +FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Bytes +FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Char +FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Decimal +FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Double +FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Int16 +FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Int32 +FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Int64 +FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+IntPtr +FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Measure +FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+SByte +FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Single +FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+String +FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Tags +FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+UInt16 +FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+UInt16s +FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+UInt32 +FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+UInt64 +FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+UIntPtr +FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+UserNum +FSharp.Compiler.SyntaxTree+SynConst: Int32 Tag +FSharp.Compiler.SyntaxTree+SynConst: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynConst: SynConst NewBool(Boolean) +FSharp.Compiler.SyntaxTree+SynConst: SynConst NewByte(Byte) +FSharp.Compiler.SyntaxTree+SynConst: SynConst NewBytes(Byte[], range) +FSharp.Compiler.SyntaxTree+SynConst: SynConst NewChar(Char) +FSharp.Compiler.SyntaxTree+SynConst: SynConst NewDecimal(System.Decimal) +FSharp.Compiler.SyntaxTree+SynConst: SynConst NewDouble(Double) +FSharp.Compiler.SyntaxTree+SynConst: SynConst NewInt16(Int16) +FSharp.Compiler.SyntaxTree+SynConst: SynConst NewInt32(Int32) +FSharp.Compiler.SyntaxTree+SynConst: SynConst NewInt64(Int64) +FSharp.Compiler.SyntaxTree+SynConst: SynConst NewIntPtr(Int64) +FSharp.Compiler.SyntaxTree+SynConst: SynConst NewMeasure(SynConst, SynMeasure) +FSharp.Compiler.SyntaxTree+SynConst: SynConst NewSByte(SByte) +FSharp.Compiler.SyntaxTree+SynConst: SynConst NewSingle(Single) +FSharp.Compiler.SyntaxTree+SynConst: SynConst NewString(System.String, range) +FSharp.Compiler.SyntaxTree+SynConst: SynConst NewUInt16(UInt16) +FSharp.Compiler.SyntaxTree+SynConst: SynConst NewUInt16s(UInt16[]) +FSharp.Compiler.SyntaxTree+SynConst: SynConst NewUInt32(UInt32) +FSharp.Compiler.SyntaxTree+SynConst: SynConst NewUInt64(UInt64) +FSharp.Compiler.SyntaxTree+SynConst: SynConst NewUIntPtr(UInt64) +FSharp.Compiler.SyntaxTree+SynConst: SynConst NewUserNum(System.String, System.String) +FSharp.Compiler.SyntaxTree+SynConst: SynConst Unit +FSharp.Compiler.SyntaxTree+SynConst: SynConst get_Unit() +FSharp.Compiler.SyntaxTree+SynConst: System.String ToString() +FSharp.Compiler.SyntaxTree+SynConst: range Range(range) +FSharp.Compiler.SyntaxTree+SynEnumCase: Ident get_ident() +FSharp.Compiler.SyntaxTree+SynEnumCase: Ident ident +FSharp.Compiler.SyntaxTree+SynEnumCase: Int32 Tag +FSharp.Compiler.SyntaxTree+SynEnumCase: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynEnumCase: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes +FSharp.Compiler.SyntaxTree+SynEnumCase: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() +FSharp.Compiler.SyntaxTree+SynEnumCase: PreXmlDoc get_xmldoc() +FSharp.Compiler.SyntaxTree+SynEnumCase: PreXmlDoc xmldoc +FSharp.Compiler.SyntaxTree+SynEnumCase: SynConst Item3 +FSharp.Compiler.SyntaxTree+SynEnumCase: SynConst get_Item3() +FSharp.Compiler.SyntaxTree+SynEnumCase: SynEnumCase NewEnumCase(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Ident, SynConst, PreXmlDoc, range) +FSharp.Compiler.SyntaxTree+SynEnumCase: System.String ToString() +FSharp.Compiler.SyntaxTree+SynEnumCase: range Range +FSharp.Compiler.SyntaxTree+SynEnumCase: range get_Range() +FSharp.Compiler.SyntaxTree+SynEnumCase: range get_range() +FSharp.Compiler.SyntaxTree+SynEnumCase: range range +FSharp.Compiler.SyntaxTree+SynExceptionDefn: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExceptionDefn: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExceptionDefn: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn] get_members() +FSharp.Compiler.SyntaxTree+SynExceptionDefn: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn] members +FSharp.Compiler.SyntaxTree+SynExceptionDefn: SynExceptionDefn NewSynExceptionDefn(SynExceptionDefnRepr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn], range) +FSharp.Compiler.SyntaxTree+SynExceptionDefn: SynExceptionDefnRepr exnRepr +FSharp.Compiler.SyntaxTree+SynExceptionDefn: SynExceptionDefnRepr get_exnRepr() +FSharp.Compiler.SyntaxTree+SynExceptionDefn: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExceptionDefn: range Range +FSharp.Compiler.SyntaxTree+SynExceptionDefn: range get_Range() +FSharp.Compiler.SyntaxTree+SynExceptionDefn: range get_range() +FSharp.Compiler.SyntaxTree+SynExceptionDefn: range range +FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes +FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() +FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility +FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() +FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident]] get_longId() +FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident]] longId +FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: PreXmlDoc get_xmlDoc() +FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: PreXmlDoc xmlDoc +FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: SynExceptionDefnRepr NewSynExceptionDefnRepr(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], SynUnionCase, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident]], PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) +FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: SynUnionCase caseName +FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: SynUnionCase get_caseName() +FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: range Range +FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: range get_Range() +FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: range get_range() +FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: range range +FSharp.Compiler.SyntaxTree+SynExceptionSig: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExceptionSig: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExceptionSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberSig] get_members() +FSharp.Compiler.SyntaxTree+SynExceptionSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberSig] members +FSharp.Compiler.SyntaxTree+SynExceptionSig: SynExceptionDefnRepr exnRepr +FSharp.Compiler.SyntaxTree+SynExceptionSig: SynExceptionDefnRepr get_exnRepr() +FSharp.Compiler.SyntaxTree+SynExceptionSig: SynExceptionSig NewSynExceptionSig(SynExceptionDefnRepr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberSig], range) +FSharp.Compiler.SyntaxTree+SynExceptionSig: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExceptionSig: range get_range() +FSharp.Compiler.SyntaxTree+SynExceptionSig: range range +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_isByref() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean isByref +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: range Range +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: range get_opRange() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: range opRange +FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: range range +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_isStruct() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean isStruct +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+Ident,FSharp.Compiler.SyntaxTree+SynExpr]] get_recordFields() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+Ident,FSharp.Compiler.SyntaxTree+SynExpr]] recordFields +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynExpr,System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]]] copyInfo +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynExpr,System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]]] get_copyInfo() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: range Range +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: range range +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_isInfix() +FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean isInfix +FSharp.Compiler.SyntaxTree+SynExpr+App: ExprAtomicFlag flag +FSharp.Compiler.SyntaxTree+SynExpr+App: ExprAtomicFlag get_flag() +FSharp.Compiler.SyntaxTree+SynExpr+App: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+App: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+App: SynExpr argExpr +FSharp.Compiler.SyntaxTree+SynExpr+App: SynExpr funcExpr +FSharp.Compiler.SyntaxTree+SynExpr+App: SynExpr get_argExpr() +FSharp.Compiler.SyntaxTree+SynExpr+App: SynExpr get_funcExpr() +FSharp.Compiler.SyntaxTree+SynExpr+App: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+App: range Range +FSharp.Compiler.SyntaxTree+SynExpr+App: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+App: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+App: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+App: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+App: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+App: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+App: range range +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: System.String debugStr +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: System.String get_debugStr() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: range Range +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: range range +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_isList() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean isList +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] exprs +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] get_exprs() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: range Range +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: range range +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_isArray() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean isArray +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: range Range +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: range range +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+Assert: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+Assert: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: range Range +FSharp.Compiler.SyntaxTree+SynExpr+Assert: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+Assert: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+Assert: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+Assert: range range +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_isArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean isArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Microsoft.FSharp.Core.FSharpRef`1[System.Boolean] get_isNotNakedRefCell() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Microsoft.FSharp.Core.FSharpRef`1[System.Boolean] isNotNakedRefCell +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: range Range +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: range range +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+Const: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+Const: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+Const: SynConst constant +FSharp.Compiler.SyntaxTree+SynExpr+Const: SynConst get_constant() +FSharp.Compiler.SyntaxTree+SynExpr+Const: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+Const: range Range +FSharp.Compiler.SyntaxTree+SynExpr+Const: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+Const: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+Const: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+Const: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+Const: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+Const: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+Const: range range +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: range Range +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: range range +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+Do: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+Do: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+Do: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+Do: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+Do: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+Do: range Range +FSharp.Compiler.SyntaxTree+SynExpr+Do: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+Do: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+Do: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+Do: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+Do: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+Do: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+Do: range range +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: range Range +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+DoBang: range range +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: LongIdentWithDots get_longDotId() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: LongIdentWithDots longDotId +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: range Range +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: range get_rangeOfDot() +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: range range +FSharp.Compiler.SyntaxTree+SynExpr+DotGet: range rangeOfDot +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynIndexerArg] get_indexExprs() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynIndexerArg] indexExprs +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: SynExpr get_objectExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: SynExpr objectExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: range Range +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: range dotRange +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: range get_dotRange() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: range range +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynIndexerArg] get_indexExprs() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynIndexerArg] indexExprs +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: SynExpr get_objectExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: SynExpr get_valueExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: SynExpr objectExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: SynExpr valueExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range Range +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range dotRange +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range get_dotRange() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range get_leftOfSetRange() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range leftOfSetRange +FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range range +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: LongIdentWithDots get_longDotId() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: LongIdentWithDots longDotId +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: SynExpr argExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: SynExpr get_argExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: SynExpr get_rhsExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: SynExpr get_targetExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: SynExpr rhsExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: SynExpr targetExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: range Range +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: range range +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: LongIdentWithDots get_longDotId() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: LongIdentWithDots longDotId +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: SynExpr get_rhsExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: SynExpr get_targetExpr() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: SynExpr rhsExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: SynExpr targetExpr +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: range Range +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+DotSet: range range +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: SynType get_targetType() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: SynType targetType +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: range Range +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+Downcast: range range +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: range Range +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+Fixed: range range +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean direction +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_direction() +FSharp.Compiler.SyntaxTree+SynExpr+For: DebugPointAtFor forSeqPoint +FSharp.Compiler.SyntaxTree+SynExpr+For: DebugPointAtFor get_forSeqPoint() +FSharp.Compiler.SyntaxTree+SynExpr+For: Ident get_ident() +FSharp.Compiler.SyntaxTree+SynExpr+For: Ident ident +FSharp.Compiler.SyntaxTree+SynExpr+For: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+For: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+For: SynExpr doBody +FSharp.Compiler.SyntaxTree+SynExpr+For: SynExpr get_doBody() +FSharp.Compiler.SyntaxTree+SynExpr+For: SynExpr get_identBody() +FSharp.Compiler.SyntaxTree+SynExpr+For: SynExpr get_toBody() +FSharp.Compiler.SyntaxTree+SynExpr+For: SynExpr identBody +FSharp.Compiler.SyntaxTree+SynExpr+For: SynExpr toBody +FSharp.Compiler.SyntaxTree+SynExpr+For: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+For: range Range +FSharp.Compiler.SyntaxTree+SynExpr+For: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+For: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+For: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+For: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+For: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+For: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+For: range range +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_isFromSource() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean isFromSource +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: DebugPointAtFor forSeqPoint +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: DebugPointAtFor get_forSeqPoint() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: SeqExprOnly get_seqExprOnly() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: SeqExprOnly seqExprOnly +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: SynExpr bodyExpr +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: SynExpr enumExpr +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: SynExpr get_bodyExpr() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: SynExpr get_enumExpr() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: SynPat get_pat() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: SynPat pat +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: range Range +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+ForEach: range range +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: range Range +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: range range +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Ident get_ident() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Ident ident +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+Ident: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: range Range +FSharp.Compiler.SyntaxTree+SynExpr+Ident: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+Ident: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+Ident: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+Ident: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_isFromErrorRecovery() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean isFromErrorRecovery +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: DebugPointForBinding get_spIfToThen() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: DebugPointForBinding spIfToThen +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr] elseExpr +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr] get_elseExpr() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: SynExpr get_ifExpr() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: SynExpr get_thenExpr() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: SynExpr ifExpr +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: SynExpr thenExpr +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: range Range +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: range get_ifToThenRange() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: range ifToThenRange +FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: range range +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: range Range +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: range range +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: range Range +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: range range +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: range Range +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: range range +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart] contents +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart] get_contents() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: range Range +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: range range +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: SynExpr get_lhsExpr() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: SynExpr get_rhsExpr() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: SynExpr lhsExpr +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: SynExpr rhsExpr +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: range Range +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: range get_lhsRange() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: range lhsRange +FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: range range +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean fromMethod +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_fromMethod() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_inLambdaSeq() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean inLambdaSeq +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: SynExpr body +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: SynExpr get_body() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: SynSimplePats args +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: SynSimplePats get_args() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat],FSharp.Compiler.SyntaxTree+SynExpr]] parsedData +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat],FSharp.Compiler.SyntaxTree+SynExpr]] get_parsedData() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: range Range +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+Lambda: range range +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: range Range +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+Lazy: range range +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_isRecursive() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_isUse() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean isRecursive +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean isUse +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding] bindings +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding] get_bindings() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: SynExpr body +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: SynExpr get_body() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: range Range +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: range range +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_isFromSource() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_isUse() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean isFromSource +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean isUse +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: DebugPointForBinding bindSeqPoint +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: DebugPointForBinding get_bindSeqPoint() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`6[FSharp.Compiler.SyntaxTree+DebugPointForBinding,System.Boolean,System.Boolean,FSharp.Compiler.SyntaxTree+SynPat,FSharp.Compiler.SyntaxTree+SynExpr,FSharp.Compiler.Range+range]] andBangs +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`6[FSharp.Compiler.SyntaxTree+DebugPointForBinding,System.Boolean,System.Boolean,FSharp.Compiler.SyntaxTree+SynPat,FSharp.Compiler.SyntaxTree+SynExpr,FSharp.Compiler.Range+range]] get_andBangs() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: SynExpr body +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: SynExpr get_body() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: SynExpr get_rhs() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: SynExpr rhs +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: SynPat get_pat() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: SynPat pat +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: range Range +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: range range +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: ILInstr[] get_ilCode() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: ILInstr[] ilCode +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] args +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] get_args() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] get_retTy() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] get_typeArgs() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] retTy +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] typeArgs +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: range Range +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: range range +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint] constraints +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint] get_constraints() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: SynExpr get_optimizedExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: SynExpr optimizedExpr +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: range Range +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: range range +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Int32 fieldNum +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Int32 get_fieldNum() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: range Range +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: range range +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Int32 fieldNum +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Int32 get_fieldNum() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: SynExpr get_rhsExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: SynExpr rhsExpr +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: range Range +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: range range +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_isOptional() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean isOptional +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: LongIdentWithDots get_longDotId() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: LongIdentWithDots longDotId +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo]] altNameRefCell +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo]] get_altNameRefCell() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: range Range +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: range range +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: LongIdentWithDots get_longDotId() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: LongIdentWithDots longDotId +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: range Range +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: range range +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+Match: DebugPointForBinding get_matchSeqPoint() +FSharp.Compiler.SyntaxTree+SynExpr+Match: DebugPointForBinding matchSeqPoint +FSharp.Compiler.SyntaxTree+SynExpr+Match: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+Match: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+Match: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause] clauses +FSharp.Compiler.SyntaxTree+SynExpr+Match: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause] get_clauses() +FSharp.Compiler.SyntaxTree+SynExpr+Match: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+Match: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+Match: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+Match: range Range +FSharp.Compiler.SyntaxTree+SynExpr+Match: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+Match: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+Match: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+Match: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+Match: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+Match: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+Match: range range +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: DebugPointForBinding get_matchSeqPoint() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: DebugPointForBinding matchSeqPoint +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause] clauses +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause] get_clauses() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: range Range +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: range range +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_isExnMatch() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean isExnMatch +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: DebugPointForBinding get_matchSeqPoint() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: DebugPointForBinding matchSeqPoint +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause] get_matchClauses() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause] matchClauses +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: range Range +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: range get_keywordRange() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: range keywordRange +FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: range range +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: LongIdentWithDots get_longDotId() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: LongIdentWithDots longDotId +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: SynExpr expr1 +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: SynExpr expr2 +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: SynExpr get_expr1() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: SynExpr get_expr2() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: range Range +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: range range +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_isProtected() +FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean isProtected +FSharp.Compiler.SyntaxTree+SynExpr+New: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+New: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+New: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+New: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+New: SynType get_targetType() +FSharp.Compiler.SyntaxTree+SynExpr+New: SynType targetType +FSharp.Compiler.SyntaxTree+SynExpr+New: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+New: range Range +FSharp.Compiler.SyntaxTree+SynExpr+New: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+New: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+New: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+New: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+New: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+New: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+New: range range +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+Null: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+Null: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+Null: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+Null: range Range +FSharp.Compiler.SyntaxTree+SynExpr+Null: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+Null: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+Null: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+Null: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+Null: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+Null: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+Null: range range +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding] bindings +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding] get_bindings() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynInterfaceImpl] extraImpls +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynInterfaceImpl] get_extraImpls() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynExpr,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]]] argOptions +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynExpr,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]]] get_argOptions() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: SynType get_objType() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: SynType objType +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: range Range +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: range get_newExprRange() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: range newExprRange +FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: range range +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_rightParenRange() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] rightParenRange +FSharp.Compiler.SyntaxTree+SynExpr+Paren: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+Paren: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: range Range +FSharp.Compiler.SyntaxTree+SynExpr+Paren: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+Paren: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+Paren: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: range get_leftParenRange() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+Paren: range leftParenRange +FSharp.Compiler.SyntaxTree+SynExpr+Paren: range range +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_isFromQueryExpression() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_isRaw() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean isFromQueryExpression +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean isRaw +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+Quote: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: SynExpr get_operator() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: SynExpr get_quotedExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: SynExpr operator +FSharp.Compiler.SyntaxTree+SynExpr+Quote: SynExpr quotedExpr +FSharp.Compiler.SyntaxTree+SynExpr+Quote: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: range Range +FSharp.Compiler.SyntaxTree+SynExpr+Quote: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+Quote: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+Quote: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+Quote: range range +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+Record: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Tuple`2[FSharp.Compiler.SyntaxTree+LongIdentWithDots,System.Boolean],Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr],Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]]]] get_recordFields() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Tuple`2[FSharp.Compiler.SyntaxTree+LongIdentWithDots,System.Boolean],Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr],Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]]]] recordFields +FSharp.Compiler.SyntaxTree+SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynExpr,System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]]] copyInfo +FSharp.Compiler.SyntaxTree+SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynExpr,System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]]] get_copyInfo() +FSharp.Compiler.SyntaxTree+SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.SyntaxTree+SynType,FSharp.Compiler.SyntaxTree+SynExpr,FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]],FSharp.Compiler.Range+range]] baseInfo +FSharp.Compiler.SyntaxTree+SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.SyntaxTree+SynType,FSharp.Compiler.SyntaxTree+SynExpr,FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]],FSharp.Compiler.Range+range]] get_baseInfo() +FSharp.Compiler.SyntaxTree+SynExpr+Record: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+Record: range Range +FSharp.Compiler.SyntaxTree+SynExpr+Record: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+Record: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+Record: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+Record: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+Record: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+Record: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+Record: range range +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_isTrueSeq() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean isTrueSeq +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: DebugPointAtSequential get_seqPoint() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: DebugPointAtSequential seqPoint +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: SynExpr expr1 +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: SynExpr expr2 +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: SynExpr get_expr1() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: SynExpr get_expr2() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: range Range +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+Sequential: range range +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: DebugPointAtSequential get_seqPoint() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: DebugPointAtSequential seqPoint +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: SynExpr expr1 +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: SynExpr expr2 +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: SynExpr get_expr1() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: SynExpr get_expr2() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: SynExpr get_ifNotStmt() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: SynExpr ifNotStmt +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: range Range +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: range range +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+Set: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+Set: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+Set: SynExpr get_rhsExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Set: SynExpr get_targetExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Set: SynExpr rhsExpr +FSharp.Compiler.SyntaxTree+SynExpr+Set: SynExpr targetExpr +FSharp.Compiler.SyntaxTree+SynExpr+Set: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+Set: range Range +FSharp.Compiler.SyntaxTree+SynExpr+Set: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+Set: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+Set: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+Set: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+Set: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+Set: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+Set: range range +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 AddressOf +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 AnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 App +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 ArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 ArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 ArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Assert +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 CompExpr +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Const +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 DiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Do +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 DoBang +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 DotGet +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 DotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 DotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 DotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 DotSet +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Downcast +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Fixed +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 For +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 ForEach +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 FromParseError +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Ident +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 IfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 ImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 InferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 InferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 InterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 JoinIn +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Lambda +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Lazy +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 LetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 LetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 LibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 LibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 LibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 LibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 LongIdent +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 LongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Match +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 MatchBang +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 MatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 NamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 New +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Null +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 ObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Paren +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Quote +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Record +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Sequential +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 SequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Set +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 TraitCall +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 TryFinally +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 TryWith +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Tuple +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 TypeApp +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 TypeTest +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Typed +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Upcast +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 While +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 YieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 YieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypar] get_supportTys() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypar] supportTys +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: SynExpr argExpr +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: SynExpr get_argExpr() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: SynMemberSig get_traitSig() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: SynMemberSig traitSig +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: range Range +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: range range +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: DebugPointAtFinally finallySeqPoint +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: DebugPointAtFinally get_finallySeqPoint() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: DebugPointAtTry get_trySeqPoint() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: DebugPointAtTry trySeqPoint +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: SynExpr finallyExpr +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: SynExpr get_finallyExpr() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: SynExpr get_tryExpr() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: SynExpr tryExpr +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: range Range +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: range range +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: DebugPointAtTry get_trySeqPoint() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: DebugPointAtTry trySeqPoint +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: DebugPointAtWith get_withSeqPoint() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: DebugPointAtWith withSeqPoint +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause] get_withCases() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause] withCases +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: SynExpr get_tryExpr() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: SynExpr tryExpr +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range Range +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range get_tryRange() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range get_withRange() +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range range +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range tryRange +FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range withRange +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_isStruct() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean isStruct +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range] commaRanges +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range] get_commaRanges() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] exprs +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] get_exprs() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: range Range +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+Tuple: range range +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range] commaRanges +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range] get_commaRanges() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] get_typeArgs() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] typeArgs +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_greaterRange() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] greaterRange +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range Range +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range get_lessRange() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range get_typeArgsRange() +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range lessRange +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range range +FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range typeArgsRange +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: SynType get_targetType() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: SynType targetType +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: range Range +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: range range +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+Typed: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+Typed: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: SynType get_targetType() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: SynType targetType +FSharp.Compiler.SyntaxTree+SynExpr+Typed: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: range Range +FSharp.Compiler.SyntaxTree+SynExpr+Typed: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+Typed: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+Typed: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+Typed: range range +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: SynType get_targetType() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: SynType targetType +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: range Range +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+Upcast: range range +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+While: DebugPointAtWhile get_whileSeqPoint() +FSharp.Compiler.SyntaxTree+SynExpr+While: DebugPointAtWhile whileSeqPoint +FSharp.Compiler.SyntaxTree+SynExpr+While: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+While: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+While: SynExpr doExpr +FSharp.Compiler.SyntaxTree+SynExpr+While: SynExpr get_doExpr() +FSharp.Compiler.SyntaxTree+SynExpr+While: SynExpr get_whileExpr() +FSharp.Compiler.SyntaxTree+SynExpr+While: SynExpr whileExpr +FSharp.Compiler.SyntaxTree+SynExpr+While: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+While: range Range +FSharp.Compiler.SyntaxTree+SynExpr+While: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+While: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+While: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+While: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+While: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+While: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+While: range range +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: System.Tuple`2[System.Boolean,System.Boolean] flags +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: System.Tuple`2[System.Boolean,System.Boolean] get_flags() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: range Range +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: range range +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: SynExpr expr +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: System.Tuple`2[System.Boolean,System.Boolean] flags +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: System.Tuple`2[System.Boolean,System.Boolean] get_flags() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: range Range +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: range get_range() +FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: range range +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsAddressOf +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsAssert +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsCompExpr +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsDo +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsDoBang +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsDotGet +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsDotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsDotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsDotSet +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsDowncast +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsFixed +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsFor +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsForEach +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsIdent +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsIfThenElse +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsInferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsInferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsInterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsJoinIn +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsLambda +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsLazy +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsLetOrUse +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsLetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsLongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsMatch +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsMatchBang +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsMatchLambda +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsNew +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsObjExpr +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsQuote +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsSequential +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsSet +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsTraitCall +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsTryFinally +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsTryWith +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsTypeApp +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsTypeTest +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsUpcast +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsWhile +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsYieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsYieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsAddressOf() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsAssert() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsCompExpr() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsDo() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsDoBang() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsDotGet() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsDotIndexedGet() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsDotIndexedSet() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsDotSet() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsDowncast() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsFixed() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsFor() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsForEach() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsIdent() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsIfThenElse() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsImplicitZero() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsInferredDowncast() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsInferredUpcast() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsInterpolatedString() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsJoinIn() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsLambda() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsLazy() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsLetOrUse() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsLetOrUseBang() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsLongIdentSet() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsMatch() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsMatchBang() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsMatchLambda() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsNew() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsObjExpr() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsQuote() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsSequential() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsSet() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsTraitCall() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsTryFinally() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsTryWith() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsTypeApp() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsTypeTest() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsUpcast() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsWhile() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsYieldOrReturn() +FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+AddressOf +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+App +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Assert +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+CompExpr +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Const +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Do +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+DoBang +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+DotGet +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+DotSet +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Downcast +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Fixed +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+For +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+ForEach +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+FromParseError +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Ident +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+JoinIn +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Lambda +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Lazy +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+LongIdent +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Match +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+MatchBang +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+New +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Null +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Paren +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Quote +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Record +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Sequential +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Set +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Tags +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+TraitCall +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+TryFinally +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+TryWith +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Tuple +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+TypeApp +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+TypeTest +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Typed +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Upcast +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+While +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn +FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom +FSharp.Compiler.SyntaxTree+SynExpr: Int32 Tag +FSharp.Compiler.SyntaxTree+SynExpr: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewAddressOf(Boolean, SynExpr, range, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewAnonRecd(Boolean, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynExpr,System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+Ident,FSharp.Compiler.SyntaxTree+SynExpr]], range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewApp(ExprAtomicFlag, Boolean, SynExpr, SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewArbitraryAfterError(System.String, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewArrayOrList(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr], range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewArrayOrListOfSeqExpr(Boolean, SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewAssert(SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewCompExpr(Boolean, Microsoft.FSharp.Core.FSharpRef`1[System.Boolean], SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewConst(SynConst, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewDiscardAfterMissingQualificationAfterDot(SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewDo(SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewDoBang(SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewDotGet(SynExpr, range, LongIdentWithDots, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewDotIndexedGet(SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynIndexerArg], range, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewDotIndexedSet(SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynIndexerArg], SynExpr, range, range, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewDotNamedIndexedPropertySet(SynExpr, LongIdentWithDots, SynExpr, SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewDotSet(SynExpr, LongIdentWithDots, SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewDowncast(SynExpr, SynType, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewFixed(SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewFor(DebugPointAtFor, Ident, SynExpr, Boolean, SynExpr, SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewForEach(DebugPointAtFor, SeqExprOnly, Boolean, SynPat, SynExpr, SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewFromParseError(SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewIdent(Ident) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewIfThenElse(SynExpr, SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr], DebugPointForBinding, Boolean, range, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewImplicitZero(range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewInferredDowncast(SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewInferredUpcast(SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewInterpolatedString(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart], range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewJoinIn(SynExpr, range, SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewLambda(Boolean, Boolean, SynSimplePats, SynExpr, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat],FSharp.Compiler.SyntaxTree+SynExpr]], range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewLazy(SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewLetOrUse(Boolean, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding], SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewLetOrUseBang(DebugPointForBinding, Boolean, Boolean, SynPat, SynExpr, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`6[FSharp.Compiler.SyntaxTree+DebugPointForBinding,System.Boolean,System.Boolean,FSharp.Compiler.SyntaxTree+SynPat,FSharp.Compiler.SyntaxTree+SynExpr,FSharp.Compiler.Range+range]], SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewLibraryOnlyILAssembly(ILInstr[], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType], range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewLibraryOnlyStaticOptimization(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint], SynExpr, SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewLibraryOnlyUnionCaseFieldGet(SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], Int32, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewLibraryOnlyUnionCaseFieldSet(SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], Int32, SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewLongIdent(Boolean, LongIdentWithDots, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo]], range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewLongIdentSet(LongIdentWithDots, SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewMatch(DebugPointForBinding, SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause], range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewMatchBang(DebugPointForBinding, SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause], range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewMatchLambda(Boolean, range, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause], DebugPointForBinding, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewNamedIndexedPropertySet(LongIdentWithDots, SynExpr, SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewNew(Boolean, SynType, SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewNull(range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewObjExpr(SynType, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynExpr,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]]], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynInterfaceImpl], range, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewParen(SynExpr, range, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range], range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewQuote(SynExpr, Boolean, SynExpr, Boolean, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewRecord(Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.SyntaxTree+SynType,FSharp.Compiler.SyntaxTree+SynExpr,FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]],FSharp.Compiler.Range+range]], Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynExpr,System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Tuple`2[FSharp.Compiler.SyntaxTree+LongIdentWithDots,System.Boolean],Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr],Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]]]], range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewSequential(DebugPointAtSequential, Boolean, SynExpr, SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewSequentialOrImplicitYield(DebugPointAtSequential, SynExpr, SynExpr, SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewSet(SynExpr, SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewTraitCall(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypar], SynMemberSig, SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewTryFinally(SynExpr, SynExpr, range, DebugPointAtTry, DebugPointAtFinally) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewTryWith(SynExpr, range, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause], range, range, DebugPointAtTry, DebugPointAtWith) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewTuple(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range], range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewTypeApp(SynExpr, range, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range], range, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewTypeTest(SynExpr, SynType, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewTyped(SynExpr, SynType, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewUpcast(SynExpr, SynType, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewWhile(DebugPointAtWhile, SynExpr, SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewYieldOrReturn(System.Tuple`2[System.Boolean,System.Boolean], SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewYieldOrReturnFrom(System.Tuple`2[System.Boolean,System.Boolean], SynExpr, range) +FSharp.Compiler.SyntaxTree+SynExpr: System.String ToString() +FSharp.Compiler.SyntaxTree+SynExpr: range Range +FSharp.Compiler.SyntaxTree+SynExpr: range RangeOfFirstPortion +FSharp.Compiler.SyntaxTree+SynExpr: range RangeSansAnyExtraDot +FSharp.Compiler.SyntaxTree+SynExpr: range get_Range() +FSharp.Compiler.SyntaxTree+SynExpr: range get_RangeOfFirstPortion() +FSharp.Compiler.SyntaxTree+SynExpr: range get_RangeSansAnyExtraDot() +FSharp.Compiler.SyntaxTree+SynField: Boolean get_isMutable() +FSharp.Compiler.SyntaxTree+SynField: Boolean get_isStatic() +FSharp.Compiler.SyntaxTree+SynField: Boolean isMutable +FSharp.Compiler.SyntaxTree+SynField: Boolean isStatic +FSharp.Compiler.SyntaxTree+SynField: Int32 Tag +FSharp.Compiler.SyntaxTree+SynField: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynField: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes +FSharp.Compiler.SyntaxTree+SynField: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() +FSharp.Compiler.SyntaxTree+SynField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_idOpt() +FSharp.Compiler.SyntaxTree+SynField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] idOpt +FSharp.Compiler.SyntaxTree+SynField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility +FSharp.Compiler.SyntaxTree+SynField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() +FSharp.Compiler.SyntaxTree+SynField: PreXmlDoc get_xmlDoc() +FSharp.Compiler.SyntaxTree+SynField: PreXmlDoc xmlDoc +FSharp.Compiler.SyntaxTree+SynField: SynField NewField(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], SynType, Boolean, PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) +FSharp.Compiler.SyntaxTree+SynField: SynType fieldType +FSharp.Compiler.SyntaxTree+SynField: SynType get_fieldType() +FSharp.Compiler.SyntaxTree+SynField: System.String ToString() +FSharp.Compiler.SyntaxTree+SynField: range get_range() +FSharp.Compiler.SyntaxTree+SynField: range range +FSharp.Compiler.SyntaxTree+SynIndexerArg+One: Boolean IsOne +FSharp.Compiler.SyntaxTree+SynIndexerArg+One: Boolean IsTwo +FSharp.Compiler.SyntaxTree+SynIndexerArg+One: Boolean fromEnd +FSharp.Compiler.SyntaxTree+SynIndexerArg+One: Boolean get_IsOne() +FSharp.Compiler.SyntaxTree+SynIndexerArg+One: Boolean get_IsTwo() +FSharp.Compiler.SyntaxTree+SynIndexerArg+One: Boolean get_fromEnd() +FSharp.Compiler.SyntaxTree+SynIndexerArg+One: Int32 Tag +FSharp.Compiler.SyntaxTree+SynIndexerArg+One: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynIndexerArg+One: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] Exprs +FSharp.Compiler.SyntaxTree+SynIndexerArg+One: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] get_Exprs() +FSharp.Compiler.SyntaxTree+SynIndexerArg+One: SynExpr expr +FSharp.Compiler.SyntaxTree+SynIndexerArg+One: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynIndexerArg+One: System.String ToString() +FSharp.Compiler.SyntaxTree+SynIndexerArg+One: range Item3 +FSharp.Compiler.SyntaxTree+SynIndexerArg+One: range Range +FSharp.Compiler.SyntaxTree+SynIndexerArg+One: range get_Item3() +FSharp.Compiler.SyntaxTree+SynIndexerArg+One: range get_Range() +FSharp.Compiler.SyntaxTree+SynIndexerArg+Tags: Int32 One +FSharp.Compiler.SyntaxTree+SynIndexerArg+Tags: Int32 Two +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Boolean IsOne +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Boolean IsTwo +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Boolean fromEnd1 +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Boolean fromEnd2 +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Boolean get_IsOne() +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Boolean get_IsTwo() +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Boolean get_fromEnd1() +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Boolean get_fromEnd2() +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Int32 Tag +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] Exprs +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] get_Exprs() +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: SynExpr expr1 +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: SynExpr expr2 +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: SynExpr get_expr1() +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: SynExpr get_expr2() +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: System.String ToString() +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: range Range +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: range get_Range() +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: range get_range1() +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: range get_range2() +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: range range1 +FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: range range2 +FSharp.Compiler.SyntaxTree+SynIndexerArg: Boolean IsOne +FSharp.Compiler.SyntaxTree+SynIndexerArg: Boolean IsTwo +FSharp.Compiler.SyntaxTree+SynIndexerArg: Boolean get_IsOne() +FSharp.Compiler.SyntaxTree+SynIndexerArg: Boolean get_IsTwo() +FSharp.Compiler.SyntaxTree+SynIndexerArg: FSharp.Compiler.SyntaxTree+SynIndexerArg+One +FSharp.Compiler.SyntaxTree+SynIndexerArg: FSharp.Compiler.SyntaxTree+SynIndexerArg+Tags +FSharp.Compiler.SyntaxTree+SynIndexerArg: FSharp.Compiler.SyntaxTree+SynIndexerArg+Two +FSharp.Compiler.SyntaxTree+SynIndexerArg: Int32 Tag +FSharp.Compiler.SyntaxTree+SynIndexerArg: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynIndexerArg: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] Exprs +FSharp.Compiler.SyntaxTree+SynIndexerArg: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] get_Exprs() +FSharp.Compiler.SyntaxTree+SynIndexerArg: SynIndexerArg NewOne(SynExpr, Boolean, range) +FSharp.Compiler.SyntaxTree+SynIndexerArg: SynIndexerArg NewTwo(SynExpr, Boolean, SynExpr, Boolean, range, range) +FSharp.Compiler.SyntaxTree+SynIndexerArg: System.String ToString() +FSharp.Compiler.SyntaxTree+SynIndexerArg: range Range +FSharp.Compiler.SyntaxTree+SynIndexerArg: range get_Range() +FSharp.Compiler.SyntaxTree+SynInterfaceImpl: Int32 Tag +FSharp.Compiler.SyntaxTree+SynInterfaceImpl: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynInterfaceImpl: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding] Item2 +FSharp.Compiler.SyntaxTree+SynInterfaceImpl: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding] get_Item2() +FSharp.Compiler.SyntaxTree+SynInterfaceImpl: SynInterfaceImpl NewInterfaceImpl(SynType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding], range) +FSharp.Compiler.SyntaxTree+SynInterfaceImpl: SynType Item1 +FSharp.Compiler.SyntaxTree+SynInterfaceImpl: SynType get_Item1() +FSharp.Compiler.SyntaxTree+SynInterfaceImpl: System.String ToString() +FSharp.Compiler.SyntaxTree+SynInterfaceImpl: range get_range() +FSharp.Compiler.SyntaxTree+SynInterfaceImpl: range range +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: Boolean IsFillExpr +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: Boolean IsString +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: Boolean get_IsFillExpr() +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: Int32 Tag +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] Item2 +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_Item2() +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: SynExpr Item1 +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: SynExpr get_Item1() +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: System.String ToString() +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: Boolean IsFillExpr +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: Boolean IsString +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: Boolean get_IsFillExpr() +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: Int32 Tag +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: System.String Item1 +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: System.String ToString() +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: System.String get_Item1() +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: range Item2 +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: range get_Item2() +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+Tags: Int32 FillExpr +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+Tags: Int32 String +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: Boolean IsFillExpr +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: Boolean IsString +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: Boolean get_IsFillExpr() +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: Boolean get_IsString() +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+Tags +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: Int32 Tag +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: SynInterpolatedStringPart NewFillExpr(SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]) +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: SynInterpolatedStringPart NewString(System.String, range) +FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMatchClause: DebugPointForTarget get_spInfo() +FSharp.Compiler.SyntaxTree+SynMatchClause: DebugPointForTarget spInfo +FSharp.Compiler.SyntaxTree+SynMatchClause: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMatchClause: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMatchClause: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr] get_whenExpr() +FSharp.Compiler.SyntaxTree+SynMatchClause: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr] whenExpr +FSharp.Compiler.SyntaxTree+SynMatchClause: SynExpr get_resultExpr() +FSharp.Compiler.SyntaxTree+SynMatchClause: SynExpr resultExpr +FSharp.Compiler.SyntaxTree+SynMatchClause: SynMatchClause NewClause(SynPat, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr], SynExpr, range, DebugPointForTarget) +FSharp.Compiler.SyntaxTree+SynMatchClause: SynPat get_pat() +FSharp.Compiler.SyntaxTree+SynMatchClause: SynPat pat +FSharp.Compiler.SyntaxTree+SynMatchClause: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMatchClause: range Range +FSharp.Compiler.SyntaxTree+SynMatchClause: range RangeOfGuardAndRhs +FSharp.Compiler.SyntaxTree+SynMatchClause: range get_Range() +FSharp.Compiler.SyntaxTree+SynMatchClause: range get_RangeOfGuardAndRhs() +FSharp.Compiler.SyntaxTree+SynMatchClause: range get_range() +FSharp.Compiler.SyntaxTree+SynMatchClause: range range +FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean IsDivide +FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean IsOne +FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean IsPower +FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean IsProduct +FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean IsSeq +FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean get_IsDivide() +FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean get_IsOne() +FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean get_IsPower() +FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean get_IsProduct() +FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean get_IsSeq() +FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMeasure+Anon: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMeasure+Anon: range get_range() +FSharp.Compiler.SyntaxTree+SynMeasure+Anon: range range +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean IsDivide +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean IsOne +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean IsPower +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean IsProduct +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean IsSeq +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean get_IsDivide() +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean get_IsOne() +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean get_IsPower() +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean get_IsProduct() +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean get_IsSeq() +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: SynMeasure Item1 +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: SynMeasure Item2 +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: SynMeasure get_Item1() +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: SynMeasure get_Item2() +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: range get_range() +FSharp.Compiler.SyntaxTree+SynMeasure+Divide: range range +FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean IsDivide +FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean IsOne +FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean IsPower +FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean IsProduct +FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean IsSeq +FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean get_IsDivide() +FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean get_IsOne() +FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean get_IsPower() +FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean get_IsProduct() +FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean get_IsSeq() +FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynMeasure+Named: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMeasure+Named: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMeasure+Named: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() +FSharp.Compiler.SyntaxTree+SynMeasure+Named: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId +FSharp.Compiler.SyntaxTree+SynMeasure+Named: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMeasure+Named: range get_range() +FSharp.Compiler.SyntaxTree+SynMeasure+Named: range range +FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean IsDivide +FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean IsOne +FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean IsPower +FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean IsProduct +FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean IsSeq +FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean get_IsDivide() +FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean get_IsOne() +FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean get_IsPower() +FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean get_IsProduct() +FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean get_IsSeq() +FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynMeasure+Power: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMeasure+Power: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMeasure+Power: SynMeasure Item1 +FSharp.Compiler.SyntaxTree+SynMeasure+Power: SynMeasure get_Item1() +FSharp.Compiler.SyntaxTree+SynMeasure+Power: SynRationalConst Item2 +FSharp.Compiler.SyntaxTree+SynMeasure+Power: SynRationalConst get_Item2() +FSharp.Compiler.SyntaxTree+SynMeasure+Power: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMeasure+Power: range get_range() +FSharp.Compiler.SyntaxTree+SynMeasure+Power: range range +FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean IsDivide +FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean IsOne +FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean IsPower +FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean IsProduct +FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean IsSeq +FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean get_IsDivide() +FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean get_IsOne() +FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean get_IsPower() +FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean get_IsProduct() +FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean get_IsSeq() +FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynMeasure+Product: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMeasure+Product: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMeasure+Product: SynMeasure Item1 +FSharp.Compiler.SyntaxTree+SynMeasure+Product: SynMeasure Item2 +FSharp.Compiler.SyntaxTree+SynMeasure+Product: SynMeasure get_Item1() +FSharp.Compiler.SyntaxTree+SynMeasure+Product: SynMeasure get_Item2() +FSharp.Compiler.SyntaxTree+SynMeasure+Product: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMeasure+Product: range get_range() +FSharp.Compiler.SyntaxTree+SynMeasure+Product: range range +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean IsDivide +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean IsOne +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean IsPower +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean IsProduct +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean IsSeq +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean get_IsDivide() +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean get_IsOne() +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean get_IsPower() +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean get_IsProduct() +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean get_IsSeq() +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMeasure] Item1 +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMeasure] get_Item1() +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: range get_range() +FSharp.Compiler.SyntaxTree+SynMeasure+Seq: range range +FSharp.Compiler.SyntaxTree+SynMeasure+Tags: Int32 Anon +FSharp.Compiler.SyntaxTree+SynMeasure+Tags: Int32 Divide +FSharp.Compiler.SyntaxTree+SynMeasure+Tags: Int32 Named +FSharp.Compiler.SyntaxTree+SynMeasure+Tags: Int32 One +FSharp.Compiler.SyntaxTree+SynMeasure+Tags: Int32 Power +FSharp.Compiler.SyntaxTree+SynMeasure+Tags: Int32 Product +FSharp.Compiler.SyntaxTree+SynMeasure+Tags: Int32 Seq +FSharp.Compiler.SyntaxTree+SynMeasure+Tags: Int32 Var +FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean IsDivide +FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean IsOne +FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean IsPower +FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean IsProduct +FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean IsSeq +FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean get_IsDivide() +FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean get_IsOne() +FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean get_IsPower() +FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean get_IsProduct() +FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean get_IsSeq() +FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynMeasure+Var: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMeasure+Var: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMeasure+Var: SynTypar Item1 +FSharp.Compiler.SyntaxTree+SynMeasure+Var: SynTypar get_Item1() +FSharp.Compiler.SyntaxTree+SynMeasure+Var: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMeasure+Var: range get_range() +FSharp.Compiler.SyntaxTree+SynMeasure+Var: range range +FSharp.Compiler.SyntaxTree+SynMeasure: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynMeasure: Boolean IsDivide +FSharp.Compiler.SyntaxTree+SynMeasure: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynMeasure: Boolean IsOne +FSharp.Compiler.SyntaxTree+SynMeasure: Boolean IsPower +FSharp.Compiler.SyntaxTree+SynMeasure: Boolean IsProduct +FSharp.Compiler.SyntaxTree+SynMeasure: Boolean IsSeq +FSharp.Compiler.SyntaxTree+SynMeasure: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynMeasure: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynMeasure: Boolean get_IsDivide() +FSharp.Compiler.SyntaxTree+SynMeasure: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynMeasure: Boolean get_IsOne() +FSharp.Compiler.SyntaxTree+SynMeasure: Boolean get_IsPower() +FSharp.Compiler.SyntaxTree+SynMeasure: Boolean get_IsProduct() +FSharp.Compiler.SyntaxTree+SynMeasure: Boolean get_IsSeq() +FSharp.Compiler.SyntaxTree+SynMeasure: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynMeasure: FSharp.Compiler.SyntaxTree+SynMeasure+Anon +FSharp.Compiler.SyntaxTree+SynMeasure: FSharp.Compiler.SyntaxTree+SynMeasure+Divide +FSharp.Compiler.SyntaxTree+SynMeasure: FSharp.Compiler.SyntaxTree+SynMeasure+Named +FSharp.Compiler.SyntaxTree+SynMeasure: FSharp.Compiler.SyntaxTree+SynMeasure+Power +FSharp.Compiler.SyntaxTree+SynMeasure: FSharp.Compiler.SyntaxTree+SynMeasure+Product +FSharp.Compiler.SyntaxTree+SynMeasure: FSharp.Compiler.SyntaxTree+SynMeasure+Seq +FSharp.Compiler.SyntaxTree+SynMeasure: FSharp.Compiler.SyntaxTree+SynMeasure+Tags +FSharp.Compiler.SyntaxTree+SynMeasure: FSharp.Compiler.SyntaxTree+SynMeasure+Var +FSharp.Compiler.SyntaxTree+SynMeasure: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMeasure: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMeasure: SynMeasure NewAnon(range) +FSharp.Compiler.SyntaxTree+SynMeasure: SynMeasure NewDivide(SynMeasure, SynMeasure, range) +FSharp.Compiler.SyntaxTree+SynMeasure: SynMeasure NewNamed(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], range) +FSharp.Compiler.SyntaxTree+SynMeasure: SynMeasure NewPower(SynMeasure, SynRationalConst, range) +FSharp.Compiler.SyntaxTree+SynMeasure: SynMeasure NewProduct(SynMeasure, SynMeasure, range) +FSharp.Compiler.SyntaxTree+SynMeasure: SynMeasure NewSeq(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMeasure], range) +FSharp.Compiler.SyntaxTree+SynMeasure: SynMeasure NewVar(SynTypar, range) +FSharp.Compiler.SyntaxTree+SynMeasure: SynMeasure One +FSharp.Compiler.SyntaxTree+SynMeasure: SynMeasure get_One() +FSharp.Compiler.SyntaxTree+SynMeasure: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsAbstractSlot +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsAutoProperty +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsImplicitCtor +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsImplicitInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsInterface +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsLetBindings +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsMember +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsNestedType +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsValField +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsAbstractSlot() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsAutoProperty() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsImplicitCtor() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsImplicitInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsInterface() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsLetBindings() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsMember() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsNestedType() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsValField() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: MemberFlags flags +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: MemberFlags get_flags() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: SynValSig get_slotSig() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: SynValSig slotSig +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: range Range +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: range get_Range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: range get_range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: range range +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsAbstractSlot +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsAutoProperty +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsImplicitCtor +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsImplicitInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsInterface +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsLetBindings +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsMember +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsNestedType +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsValField +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsAbstractSlot() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsAutoProperty() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsImplicitCtor() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsImplicitInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsInterface() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsLetBindings() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsMember() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsNestedType() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsValField() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_isStatic() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean isStatic +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Ident get_ident() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Ident ident +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: MemberKind get_propKind() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: MemberKind propKind +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+MemberKind,FSharp.Compiler.SyntaxTree+MemberFlags] get_memberFlags() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+MemberKind,FSharp.Compiler.SyntaxTree+MemberFlags] memberFlags +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] getSetRange +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_getSetRange() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynType] get_typeOpt() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynType] typeOpt +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: PreXmlDoc get_xmlDoc() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: PreXmlDoc xmlDoc +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: SynExpr get_synExpr() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: SynExpr synExpr +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: range Range +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: range get_Range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: range get_range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: range range +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsAbstractSlot +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsAutoProperty +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsImplicitCtor +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsImplicitInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsInterface +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsLetBindings +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsMember +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsNestedType +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsValField +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsAbstractSlot() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsAutoProperty() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsImplicitCtor() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsImplicitInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsInterface() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsLetBindings() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsMember() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsNestedType() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsValField() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_selfIdentifier() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] selfIdentifier +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: PreXmlDoc doc +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: PreXmlDoc get_doc() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: SynSimplePats ctorArgs +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: SynSimplePats get_ctorArgs() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: range Range +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: range get_Range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: range get_range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: range range +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsAbstractSlot +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsAutoProperty +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsImplicitCtor +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsImplicitInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsInterface +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsLetBindings +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsMember +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsNestedType +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsValField +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsAbstractSlot() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsAutoProperty() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsImplicitCtor() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsImplicitInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsInterface() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsLetBindings() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsMember() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsNestedType() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsValField() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_inheritAlias() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] inheritAlias +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: SynExpr get_inheritArgs() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: SynExpr inheritArgs +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: SynType get_inheritType() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: SynType inheritType +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: range Range +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: range get_Range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: range get_range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: range range +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsAbstractSlot +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsAutoProperty +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsImplicitCtor +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsImplicitInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsInterface +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsLetBindings +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsMember +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsNestedType +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsValField +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsAbstractSlot() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsAutoProperty() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsImplicitCtor() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsImplicitInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsInterface() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsLetBindings() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsMember() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsNestedType() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsValField() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] asIdent +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_asIdent() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: SynType baseType +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: SynType get_baseType() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: range Range +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: range get_Range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: range get_range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: range range +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsAbstractSlot +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsAutoProperty +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsImplicitCtor +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsImplicitInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsInterface +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsLetBindings +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsMember +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsNestedType +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsValField +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsAbstractSlot() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsAutoProperty() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsImplicitCtor() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsImplicitInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsInterface() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsLetBindings() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsMember() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsNestedType() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsValField() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn]] get_members() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn]] members +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: SynType get_interfaceType() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: SynType interfaceType +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: range Range +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: range get_Range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: range get_range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: range range +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsAbstractSlot +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsAutoProperty +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsImplicitCtor +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsImplicitInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsInterface +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsLetBindings +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsMember +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsNestedType +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsValField +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsAbstractSlot() +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsAutoProperty() +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsImplicitCtor() +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsImplicitInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsInterface() +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsLetBindings() +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsMember() +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsNestedType() +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsValField() +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_isRecursive() +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_isStatic() +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean isRecursive +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean isStatic +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding] bindings +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding] get_bindings() +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: range Range +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: range get_Range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: range get_range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: range range +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsAbstractSlot +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsAutoProperty +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsImplicitCtor +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsImplicitInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsInterface +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsLetBindings +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsMember +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsNestedType +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsValField +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsAbstractSlot() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsAutoProperty() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsImplicitCtor() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsImplicitInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsInterface() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsLetBindings() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsMember() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsNestedType() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsValField() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: SynBinding get_memberDefn() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: SynBinding memberDefn +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: range Range +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: range get_Range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: range get_range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: range range +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsAbstractSlot +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsAutoProperty +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsImplicitCtor +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsImplicitInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsInterface +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsLetBindings +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsMember +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsNestedType +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsValField +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsAbstractSlot() +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsAutoProperty() +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsImplicitCtor() +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsImplicitInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsInterface() +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsLetBindings() +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsMember() +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsNestedType() +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsValField() +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: SynTypeDefn get_typeDefn() +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: SynTypeDefn typeDefn +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: range Range +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: range get_Range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: range get_range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: range range +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsAbstractSlot +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsAutoProperty +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsImplicitCtor +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsImplicitInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsInterface +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsLetBindings +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsMember +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsNestedType +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsValField +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsAbstractSlot() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsAutoProperty() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsImplicitCtor() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsImplicitInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsInterface() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsLetBindings() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsMember() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsNestedType() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsValField() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: SynOpenDeclTarget get_target() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: SynOpenDeclTarget target +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: range Range +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: range get_Range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: range get_range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: range range +FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 AbstractSlot +FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 AutoProperty +FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 ImplicitCtor +FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 ImplicitInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 Inherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 Interface +FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 LetBindings +FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 Member +FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 NestedType +FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 Open +FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 ValField +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsAbstractSlot +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsAutoProperty +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsImplicitCtor +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsImplicitInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsInterface +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsLetBindings +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsMember +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsNestedType +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsValField +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsAbstractSlot() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsAutoProperty() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsImplicitCtor() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsImplicitInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsInterface() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsLetBindings() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsMember() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsNestedType() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsValField() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: SynField fieldInfo +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: SynField get_fieldInfo() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: range Range +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: range get_Range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: range get_range() +FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: range range +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsAbstractSlot +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsAutoProperty +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsImplicitCtor +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsImplicitInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsInterface +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsLetBindings +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsMember +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsNestedType +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsValField +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsAbstractSlot() +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsAutoProperty() +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsImplicitCtor() +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsImplicitInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsInherit() +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsInterface() +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsLetBindings() +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsMember() +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsNestedType() +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsValField() +FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot +FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty +FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor +FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit +FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit +FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface +FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings +FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+Member +FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType +FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+Open +FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags +FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField +FSharp.Compiler.SyntaxTree+SynMemberDefn: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMemberDefn: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewAbstractSlot(SynValSig, MemberFlags, range) +FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewAutoProperty(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Boolean, Ident, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynType], MemberKind, Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+MemberKind,FSharp.Compiler.SyntaxTree+MemberFlags], PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range], range) +FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewImplicitCtor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], SynSimplePats, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], PreXmlDoc, range) +FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewImplicitInherit(SynType, SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], range) +FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewInherit(SynType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], range) +FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewInterface(SynType, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn]], range) +FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewLetBindings(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding], Boolean, Boolean, range) +FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewMember(SynBinding, range) +FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewNestedType(SynTypeDefn, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) +FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewOpen(SynOpenDeclTarget, range) +FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewValField(SynField, range) +FSharp.Compiler.SyntaxTree+SynMemberDefn: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMemberDefn: range Range +FSharp.Compiler.SyntaxTree+SynMemberDefn: range get_Range() +FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Boolean IsInherit +FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Boolean IsInterface +FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Boolean IsMember +FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Boolean IsNestedType +FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Boolean IsValField +FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Boolean get_IsInherit() +FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Boolean get_IsInterface() +FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Boolean get_IsMember() +FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Boolean get_IsNestedType() +FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Boolean get_IsValField() +FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: SynType get_inheritedType() +FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: SynType inheritedType +FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: range get_range() +FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: range range +FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Boolean IsInherit +FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Boolean IsInterface +FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Boolean IsMember +FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Boolean IsNestedType +FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Boolean IsValField +FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Boolean get_IsInherit() +FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Boolean get_IsInterface() +FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Boolean get_IsMember() +FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Boolean get_IsNestedType() +FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Boolean get_IsValField() +FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: SynType get_interfaceType() +FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: SynType interfaceType +FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: range get_range() +FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: range range +FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Boolean IsInherit +FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Boolean IsInterface +FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Boolean IsMember +FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Boolean IsNestedType +FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Boolean IsValField +FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Boolean get_IsInherit() +FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Boolean get_IsInterface() +FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Boolean get_IsMember() +FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Boolean get_IsNestedType() +FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Boolean get_IsValField() +FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMemberSig+Member: MemberFlags flags +FSharp.Compiler.SyntaxTree+SynMemberSig+Member: MemberFlags get_flags() +FSharp.Compiler.SyntaxTree+SynMemberSig+Member: SynValSig get_memberSig() +FSharp.Compiler.SyntaxTree+SynMemberSig+Member: SynValSig memberSig +FSharp.Compiler.SyntaxTree+SynMemberSig+Member: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMemberSig+Member: range get_range() +FSharp.Compiler.SyntaxTree+SynMemberSig+Member: range range +FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Boolean IsInherit +FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Boolean IsInterface +FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Boolean IsMember +FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Boolean IsNestedType +FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Boolean IsValField +FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Boolean get_IsInherit() +FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Boolean get_IsInterface() +FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Boolean get_IsMember() +FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Boolean get_IsNestedType() +FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Boolean get_IsValField() +FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: SynTypeDefnSig get_nestedType() +FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: SynTypeDefnSig nestedType +FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: range get_range() +FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: range range +FSharp.Compiler.SyntaxTree+SynMemberSig+Tags: Int32 Inherit +FSharp.Compiler.SyntaxTree+SynMemberSig+Tags: Int32 Interface +FSharp.Compiler.SyntaxTree+SynMemberSig+Tags: Int32 Member +FSharp.Compiler.SyntaxTree+SynMemberSig+Tags: Int32 NestedType +FSharp.Compiler.SyntaxTree+SynMemberSig+Tags: Int32 ValField +FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Boolean IsInherit +FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Boolean IsInterface +FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Boolean IsMember +FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Boolean IsNestedType +FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Boolean IsValField +FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Boolean get_IsInherit() +FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Boolean get_IsInterface() +FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Boolean get_IsMember() +FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Boolean get_IsNestedType() +FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Boolean get_IsValField() +FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: SynField field +FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: SynField get_field() +FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: System.String ToString() +FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: range get_range() +FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: range range +FSharp.Compiler.SyntaxTree+SynMemberSig: Boolean IsInherit +FSharp.Compiler.SyntaxTree+SynMemberSig: Boolean IsInterface +FSharp.Compiler.SyntaxTree+SynMemberSig: Boolean IsMember +FSharp.Compiler.SyntaxTree+SynMemberSig: Boolean IsNestedType +FSharp.Compiler.SyntaxTree+SynMemberSig: Boolean IsValField +FSharp.Compiler.SyntaxTree+SynMemberSig: Boolean get_IsInherit() +FSharp.Compiler.SyntaxTree+SynMemberSig: Boolean get_IsInterface() +FSharp.Compiler.SyntaxTree+SynMemberSig: Boolean get_IsMember() +FSharp.Compiler.SyntaxTree+SynMemberSig: Boolean get_IsNestedType() +FSharp.Compiler.SyntaxTree+SynMemberSig: Boolean get_IsValField() +FSharp.Compiler.SyntaxTree+SynMemberSig: FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit +FSharp.Compiler.SyntaxTree+SynMemberSig: FSharp.Compiler.SyntaxTree+SynMemberSig+Interface +FSharp.Compiler.SyntaxTree+SynMemberSig: FSharp.Compiler.SyntaxTree+SynMemberSig+Member +FSharp.Compiler.SyntaxTree+SynMemberSig: FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType +FSharp.Compiler.SyntaxTree+SynMemberSig: FSharp.Compiler.SyntaxTree+SynMemberSig+Tags +FSharp.Compiler.SyntaxTree+SynMemberSig: FSharp.Compiler.SyntaxTree+SynMemberSig+ValField +FSharp.Compiler.SyntaxTree+SynMemberSig: Int32 Tag +FSharp.Compiler.SyntaxTree+SynMemberSig: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynMemberSig: SynMemberSig NewInherit(SynType, range) +FSharp.Compiler.SyntaxTree+SynMemberSig: SynMemberSig NewInterface(SynType, range) +FSharp.Compiler.SyntaxTree+SynMemberSig: SynMemberSig NewMember(SynValSig, MemberFlags, range) +FSharp.Compiler.SyntaxTree+SynMemberSig: SynMemberSig NewNestedType(SynTypeDefnSig, range) +FSharp.Compiler.SyntaxTree+SynMemberSig: SynMemberSig NewValField(SynField, range) +FSharp.Compiler.SyntaxTree+SynMemberSig: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean IsAttributes +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean IsDoExpr +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean IsException +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean IsHashDirective +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean IsLet +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean IsModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean IsNestedModule +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean IsTypes +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean get_IsAttributes() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean get_IsDoExpr() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean get_IsHashDirective() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean get_IsLet() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean get_IsModuleAbbrev() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean get_IsNestedModule() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean get_IsTypes() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: range Range +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: range get_Range() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: range get_range() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: range range +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean IsAttributes +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean IsDoExpr +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean IsException +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean IsHashDirective +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean IsLet +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean IsModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean IsNestedModule +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean IsTypes +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean get_IsAttributes() +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean get_IsDoExpr() +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean get_IsHashDirective() +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean get_IsLet() +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean get_IsModuleAbbrev() +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean get_IsNestedModule() +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean get_IsTypes() +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: DebugPointForBinding get_spInfo() +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: DebugPointForBinding spInfo +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: SynExpr expr +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: range Range +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: range get_Range() +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: range get_range() +FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: range range +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean IsAttributes +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean IsDoExpr +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean IsException +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean IsHashDirective +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean IsLet +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean IsModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean IsNestedModule +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean IsTypes +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean get_IsAttributes() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean get_IsDoExpr() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean get_IsHashDirective() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean get_IsLet() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean get_IsModuleAbbrev() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean get_IsNestedModule() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean get_IsTypes() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: SynExceptionDefn exnDefn +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: SynExceptionDefn get_exnDefn() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: range Range +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: range get_Range() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: range get_range() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: range range +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean IsAttributes +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean IsDoExpr +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean IsException +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean IsHashDirective +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean IsLet +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean IsModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean IsNestedModule +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean IsTypes +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean get_IsAttributes() +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean get_IsDoExpr() +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean get_IsHashDirective() +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean get_IsLet() +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean get_IsModuleAbbrev() +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean get_IsNestedModule() +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean get_IsTypes() +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: ParsedHashDirective get_hashDirective() +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: ParsedHashDirective hashDirective +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: range Range +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: range get_Range() +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: range get_range() +FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: range range +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean IsAttributes +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean IsDoExpr +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean IsException +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean IsHashDirective +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean IsLet +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean IsModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean IsNestedModule +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean IsTypes +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_IsAttributes() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_IsDoExpr() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_IsHashDirective() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_IsLet() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_IsModuleAbbrev() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_IsNestedModule() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_IsTypes() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_isRecursive() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean isRecursive +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding] bindings +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding] get_bindings() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: range Range +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: range get_Range() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: range get_range() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: range range +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean IsAttributes +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean IsDoExpr +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean IsException +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean IsHashDirective +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean IsLet +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean IsModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean IsNestedModule +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean IsTypes +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean get_IsAttributes() +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean get_IsDoExpr() +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean get_IsHashDirective() +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean get_IsLet() +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean get_IsModuleAbbrev() +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean get_IsNestedModule() +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean get_IsTypes() +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Ident get_ident() +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Ident ident +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: range Range +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: range get_Range() +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: range get_range() +FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: range range +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean IsAttributes +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean IsDoExpr +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean IsException +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean IsHashDirective +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean IsLet +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean IsModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean IsNestedModule +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean IsTypes +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean get_IsAttributes() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean get_IsDoExpr() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean get_IsHashDirective() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean get_IsLet() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean get_IsModuleAbbrev() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean get_IsNestedModule() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean get_IsTypes() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: SynModuleOrNamespace fragment +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: SynModuleOrNamespace get_fragment() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: range Range +FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: range get_Range() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean IsAttributes +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean IsDoExpr +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean IsException +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean IsHashDirective +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean IsLet +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean IsModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean IsNestedModule +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean IsTypes +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_IsAttributes() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_IsDoExpr() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_IsHashDirective() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_IsLet() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_IsModuleAbbrev() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_IsNestedModule() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_IsTypes() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_isContinuing() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_isRecursive() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean isContinuing +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean isRecursive +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl] decls +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl] get_decls() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: SynComponentInfo get_moduleInfo() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: SynComponentInfo moduleInfo +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: range Range +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: range get_Range() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: range get_range() +FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: range range +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean IsAttributes +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean IsDoExpr +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean IsException +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean IsHashDirective +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean IsLet +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean IsModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean IsNestedModule +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean IsTypes +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean get_IsAttributes() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean get_IsDoExpr() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean get_IsHashDirective() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean get_IsLet() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean get_IsModuleAbbrev() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean get_IsNestedModule() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean get_IsTypes() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: SynOpenDeclTarget get_target() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: SynOpenDeclTarget target +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: range Range +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: range get_Range() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: range get_range() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: range range +FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags: Int32 Attributes +FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags: Int32 DoExpr +FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags: Int32 Exception +FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags: Int32 HashDirective +FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags: Int32 Let +FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags: Int32 ModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags: Int32 NamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags: Int32 NestedModule +FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags: Int32 Open +FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags: Int32 Types +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean IsAttributes +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean IsDoExpr +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean IsException +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean IsHashDirective +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean IsLet +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean IsModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean IsNestedModule +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean IsTypes +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean get_IsAttributes() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean get_IsDoExpr() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean get_IsHashDirective() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean get_IsLet() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean get_IsModuleAbbrev() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean get_IsNestedModule() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean get_IsTypes() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeDefn] get_typeDefns() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeDefn] typeDefns +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: range Range +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: range get_Range() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: range get_range() +FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: range range +FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean IsAttributes +FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean IsDoExpr +FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean IsException +FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean IsHashDirective +FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean IsLet +FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean IsModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean IsNestedModule +FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean IsTypes +FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean get_IsAttributes() +FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean get_IsDoExpr() +FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean get_IsHashDirective() +FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean get_IsLet() +FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean get_IsModuleAbbrev() +FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean get_IsNestedModule() +FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean get_IsTypes() +FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes +FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr +FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception +FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective +FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+Let +FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule +FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+Open +FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags +FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+Types +FSharp.Compiler.SyntaxTree+SynModuleDecl: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleDecl: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleDecl: SynModuleDecl NewAttributes(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], range) +FSharp.Compiler.SyntaxTree+SynModuleDecl: SynModuleDecl NewDoExpr(DebugPointForBinding, SynExpr, range) +FSharp.Compiler.SyntaxTree+SynModuleDecl: SynModuleDecl NewException(SynExceptionDefn, range) +FSharp.Compiler.SyntaxTree+SynModuleDecl: SynModuleDecl NewHashDirective(ParsedHashDirective, range) +FSharp.Compiler.SyntaxTree+SynModuleDecl: SynModuleDecl NewLet(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding], range) +FSharp.Compiler.SyntaxTree+SynModuleDecl: SynModuleDecl NewModuleAbbrev(Ident, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], range) +FSharp.Compiler.SyntaxTree+SynModuleDecl: SynModuleDecl NewNamespaceFragment(SynModuleOrNamespace) +FSharp.Compiler.SyntaxTree+SynModuleDecl: SynModuleDecl NewNestedModule(SynComponentInfo, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl], Boolean, range) +FSharp.Compiler.SyntaxTree+SynModuleDecl: SynModuleDecl NewOpen(SynOpenDeclTarget, range) +FSharp.Compiler.SyntaxTree+SynModuleDecl: SynModuleDecl NewTypes(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeDefn], range) +FSharp.Compiler.SyntaxTree+SynModuleDecl: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleDecl: range Range +FSharp.Compiler.SyntaxTree+SynModuleDecl: range get_Range() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Boolean get_isRecursive() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Boolean isRecursive +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attribs +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attribs() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl] decls +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl] get_decls() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: PreXmlDoc get_xmlDoc() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: PreXmlDoc xmlDoc +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: SynModuleOrNamespace NewSynModuleOrNamespace(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], Boolean, SynModuleOrNamespaceKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl], PreXmlDoc, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: SynModuleOrNamespaceKind get_kind() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: SynModuleOrNamespaceKind kind +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: range Range +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: range get_Range() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: range get_range() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: range range +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind+Tags: Int32 AnonModule +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind+Tags: Int32 DeclaredNamespace +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind+Tags: Int32 GlobalNamespace +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind+Tags: Int32 NamedModule +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean Equals(SynModuleOrNamespaceKind) +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean IsAnonModule +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean IsDeclaredNamespace +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean IsGlobalNamespace +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean IsModule +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean IsNamedModule +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean get_IsAnonModule() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean get_IsDeclaredNamespace() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean get_IsGlobalNamespace() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean get_IsModule() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean get_IsNamedModule() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind+Tags +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Int32 CompareTo(SynModuleOrNamespaceKind) +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Int32 CompareTo(System.Object) +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: SynModuleOrNamespaceKind AnonModule +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: SynModuleOrNamespaceKind DeclaredNamespace +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: SynModuleOrNamespaceKind GlobalNamespace +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: SynModuleOrNamespaceKind NamedModule +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: SynModuleOrNamespaceKind get_AnonModule() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: SynModuleOrNamespaceKind get_DeclaredNamespace() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: SynModuleOrNamespaceKind get_GlobalNamespace() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: SynModuleOrNamespaceKind get_NamedModule() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Boolean get_isRecursive() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Boolean isRecursive +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attribs +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attribs() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl] decls +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl] get_decls() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: PreXmlDoc get_xmlDoc() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: PreXmlDoc xmlDoc +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: SynModuleOrNamespaceKind get_kind() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: SynModuleOrNamespaceKind kind +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: SynModuleOrNamespaceSig NewSynModuleOrNamespaceSig(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], Boolean, SynModuleOrNamespaceKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl], PreXmlDoc, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: range get_range() +FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: range range +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean IsException +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean IsHashDirective +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean IsModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean IsNestedModule +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean IsTypes +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean IsVal +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean get_IsHashDirective() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean get_IsModuleAbbrev() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean get_IsNestedModule() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean get_IsTypes() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean get_IsVal() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: SynExceptionSig exnSig +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: SynExceptionSig get_exnSig() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: range Range +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: range get_Range() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: range get_range() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: range range +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean IsException +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean IsHashDirective +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean IsModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean IsNestedModule +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean IsTypes +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean IsVal +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean get_IsHashDirective() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean get_IsModuleAbbrev() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean get_IsNestedModule() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean get_IsTypes() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean get_IsVal() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: ParsedHashDirective get_hashDirective() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: ParsedHashDirective hashDirective +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: range Range +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: range get_Range() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: range get_range() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: range range +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean IsException +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean IsHashDirective +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean IsModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean IsNestedModule +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean IsTypes +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean IsVal +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean get_IsHashDirective() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean get_IsModuleAbbrev() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean get_IsNestedModule() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean get_IsTypes() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean get_IsVal() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Ident get_ident() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Ident ident +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: range Range +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: range get_Range() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: range get_range() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: range range +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean IsException +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean IsHashDirective +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean IsModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean IsNestedModule +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean IsTypes +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean IsVal +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean get_IsHashDirective() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean get_IsModuleAbbrev() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean get_IsNestedModule() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean get_IsTypes() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean get_IsVal() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: SynModuleOrNamespaceSig Item +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: SynModuleOrNamespaceSig get_Item() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: range Range +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: range get_Range() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean IsException +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean IsHashDirective +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean IsModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean IsNestedModule +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean IsTypes +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean IsVal +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean get_IsHashDirective() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean get_IsModuleAbbrev() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean get_IsNestedModule() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean get_IsTypes() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean get_IsVal() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean get_isRecursive() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean isRecursive +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl] get_moduleDecls() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl] moduleDecls +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: SynComponentInfo get_moduleInfo() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: SynComponentInfo moduleInfo +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: range Range +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: range get_Range() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: range get_range() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: range range +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean IsException +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean IsHashDirective +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean IsModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean IsNestedModule +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean IsTypes +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean IsVal +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean get_IsHashDirective() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean get_IsModuleAbbrev() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean get_IsNestedModule() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean get_IsTypes() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean get_IsVal() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: SynOpenDeclTarget get_target() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: SynOpenDeclTarget target +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: range Range +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: range get_Range() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: range get_range() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: range range +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Tags: Int32 Exception +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Tags: Int32 HashDirective +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Tags: Int32 ModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Tags: Int32 NamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Tags: Int32 NestedModule +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Tags: Int32 Open +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Tags: Int32 Types +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Tags: Int32 Val +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean IsException +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean IsHashDirective +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean IsModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean IsNestedModule +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean IsTypes +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean IsVal +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean get_IsHashDirective() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean get_IsModuleAbbrev() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean get_IsNestedModule() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean get_IsTypes() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean get_IsVal() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeDefnSig] get_types() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeDefnSig] types +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: range Range +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: range get_Range() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: range get_range() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: range range +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean IsException +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean IsHashDirective +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean IsModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean IsNestedModule +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean IsTypes +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean IsVal +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean get_IsHashDirective() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean get_IsModuleAbbrev() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean get_IsNestedModule() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean get_IsTypes() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean get_IsVal() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: SynValSig get_valSig() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: SynValSig valSig +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: range Range +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: range get_Range() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: range get_range() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: range range +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean IsException +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean IsHashDirective +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean IsModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean IsNamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean IsNestedModule +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean IsOpen +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean IsTypes +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean IsVal +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean get_IsHashDirective() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean get_IsModuleAbbrev() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean get_IsNamespaceFragment() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean get_IsNestedModule() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean get_IsOpen() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean get_IsTypes() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean get_IsVal() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Tags +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Int32 Tag +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: SynModuleSigDecl NewException(SynExceptionSig, range) +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: SynModuleSigDecl NewHashDirective(ParsedHashDirective, range) +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: SynModuleSigDecl NewModuleAbbrev(Ident, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], range) +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: SynModuleSigDecl NewNamespaceFragment(SynModuleOrNamespaceSig) +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: SynModuleSigDecl NewNestedModule(SynComponentInfo, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl], range) +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: SynModuleSigDecl NewOpen(SynOpenDeclTarget, range) +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: SynModuleSigDecl NewTypes(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeDefnSig], range) +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: SynModuleSigDecl NewVal(SynValSig, range) +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: System.String ToString() +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: range Range +FSharp.Compiler.SyntaxTree+SynModuleSigDecl: range get_Range() +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: Boolean IsModuleOrNamespace +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: Boolean IsType +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: Boolean get_IsModuleOrNamespace() +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: Boolean get_IsType() +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: Int32 Tag +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: System.String ToString() +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: range Range +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: range get_Range() +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: range get_range() +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: range range +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Tags: Int32 ModuleOrNamespace +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Tags: Int32 Type +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: Boolean IsModuleOrNamespace +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: Boolean IsType +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: Boolean get_IsModuleOrNamespace() +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: Boolean get_IsType() +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: Int32 Tag +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: SynType get_typeName() +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: SynType typeName +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: System.String ToString() +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: range Range +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: range get_Range() +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: range get_range() +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: range range +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: Boolean IsModuleOrNamespace +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: Boolean IsType +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: Boolean get_IsModuleOrNamespace() +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: Boolean get_IsType() +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Tags +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: Int32 Tag +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: SynOpenDeclTarget NewModuleOrNamespace(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], range) +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: SynOpenDeclTarget NewType(SynType, range) +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: System.String ToString() +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: range Range +FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: range get_Range() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsAnds +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsDeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsInstanceMember +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsIsInst +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsOptionalVal +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsOr +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsQuoteExpr +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsWild +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsAnds() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsDeprecatedCharRange() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsInstanceMember() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsIsInst() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsOptionalVal() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsOr() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsQuoteExpr() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsWild() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Int32 Tag +FSharp.Compiler.SyntaxTree+SynPat+Ands: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat] get_pats() +FSharp.Compiler.SyntaxTree+SynPat+Ands: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat] pats +FSharp.Compiler.SyntaxTree+SynPat+Ands: System.String ToString() +FSharp.Compiler.SyntaxTree+SynPat+Ands: range Range +FSharp.Compiler.SyntaxTree+SynPat+Ands: range get_Range() +FSharp.Compiler.SyntaxTree+SynPat+Ands: range get_range() +FSharp.Compiler.SyntaxTree+SynPat+Ands: range range +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsAnds +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsDeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsInstanceMember +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsIsInst +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsOptionalVal +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsOr +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsQuoteExpr +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsWild +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsAnds() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsDeprecatedCharRange() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsInstanceMember() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsIsInst() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsOptionalVal() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsOr() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsQuoteExpr() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsWild() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_isArray() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean isArray +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Int32 Tag +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat] elementPats +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat] get_elementPats() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: System.String ToString() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: range Range +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: range get_Range() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: range get_range() +FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: range range +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsAnds +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsDeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsInstanceMember +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsIsInst +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsOptionalVal +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsOr +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsQuoteExpr +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsWild +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsAnds() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsDeprecatedCharRange() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsInstanceMember() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsIsInst() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsOptionalVal() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsOr() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsQuoteExpr() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsWild() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Int32 Tag +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes +FSharp.Compiler.SyntaxTree+SynPat+Attrib: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: SynPat get_pat() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: SynPat pat +FSharp.Compiler.SyntaxTree+SynPat+Attrib: System.String ToString() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: range Range +FSharp.Compiler.SyntaxTree+SynPat+Attrib: range get_Range() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: range get_range() +FSharp.Compiler.SyntaxTree+SynPat+Attrib: range range +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsAnds +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsDeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsInstanceMember +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsIsInst +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsOptionalVal +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsOr +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsQuoteExpr +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsWild +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsAnds() +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsDeprecatedCharRange() +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsInstanceMember() +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsIsInst() +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsOptionalVal() +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsOr() +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsQuoteExpr() +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsWild() +FSharp.Compiler.SyntaxTree+SynPat+Const: Int32 Tag +FSharp.Compiler.SyntaxTree+SynPat+Const: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynPat+Const: SynConst constant +FSharp.Compiler.SyntaxTree+SynPat+Const: SynConst get_constant() +FSharp.Compiler.SyntaxTree+SynPat+Const: System.String ToString() +FSharp.Compiler.SyntaxTree+SynPat+Const: range Range +FSharp.Compiler.SyntaxTree+SynPat+Const: range get_Range() +FSharp.Compiler.SyntaxTree+SynPat+Const: range get_range() +FSharp.Compiler.SyntaxTree+SynPat+Const: range range +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsAnds +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsDeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsInstanceMember +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsIsInst +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsOptionalVal +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsOr +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsQuoteExpr +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsWild +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsAnds() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsDeprecatedCharRange() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsInstanceMember() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsIsInst() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsOptionalVal() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsOr() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsQuoteExpr() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsWild() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Char endChar +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Char get_endChar() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Char get_startChar() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Char startChar +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Int32 Tag +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: System.String ToString() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: range Range +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: range get_Range() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: range get_range() +FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: range range +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsAnds +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsDeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsInstanceMember +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsIsInst +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsOptionalVal +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsOr +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsQuoteExpr +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsWild +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsAnds() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsDeprecatedCharRange() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsInstanceMember() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsIsInst() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsOptionalVal() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsOr() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsQuoteExpr() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsWild() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Int32 Tag +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: SynPat get_pat() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: SynPat pat +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: System.String ToString() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: range Range +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: range get_Range() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: range get_range() +FSharp.Compiler.SyntaxTree+SynPat+FromParseError: range range +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsAnds +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsDeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsInstanceMember +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsIsInst +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsOptionalVal +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsOr +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsQuoteExpr +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsWild +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsAnds() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsDeprecatedCharRange() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsInstanceMember() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsIsInst() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsOptionalVal() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsOr() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsQuoteExpr() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsWild() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Ident get_memberId() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Ident get_thisId() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Ident memberId +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Ident thisId +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Int32 Tag +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_toolingId() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] toolingId +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: System.String ToString() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: range Range +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: range get_Range() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: range get_range() +FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: range range +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsAnds +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsDeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsInstanceMember +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsIsInst +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsOptionalVal +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsOr +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsQuoteExpr +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsWild +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsAnds() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsDeprecatedCharRange() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsInstanceMember() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsIsInst() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsOptionalVal() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsOr() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsQuoteExpr() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsWild() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Int32 Tag +FSharp.Compiler.SyntaxTree+SynPat+IsInst: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: SynType get_pat() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: SynType pat +FSharp.Compiler.SyntaxTree+SynPat+IsInst: System.String ToString() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: range Range +FSharp.Compiler.SyntaxTree+SynPat+IsInst: range get_Range() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: range get_range() +FSharp.Compiler.SyntaxTree+SynPat+IsInst: range range +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsAnds +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsDeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsInstanceMember +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsIsInst +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsOptionalVal +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsOr +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsQuoteExpr +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsWild +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsAnds() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsDeprecatedCharRange() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsInstanceMember() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsIsInst() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsOptionalVal() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsOr() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsQuoteExpr() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsWild() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Int32 Tag +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: LongIdentWithDots get_longDotId() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: LongIdentWithDots longDotId +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] extraId +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_extraId() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynValTyparDecls] get_typarDecls() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynValTyparDecls] typarDecls +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: SynArgPats argPats +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: SynArgPats get_argPats() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: System.String ToString() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: range Range +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: range get_Range() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: range get_range() +FSharp.Compiler.SyntaxTree+SynPat+LongIdent: range range +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsAnds +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsDeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsInstanceMember +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsIsInst +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsOptionalVal +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsOr +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsQuoteExpr +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsWild +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsAnds() +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsDeprecatedCharRange() +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsInstanceMember() +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsIsInst() +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsOptionalVal() +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsOr() +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsQuoteExpr() +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsWild() +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_isSelfIdentifier() +FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean isSelfIdentifier +FSharp.Compiler.SyntaxTree+SynPat+Named: Ident get_ident() +FSharp.Compiler.SyntaxTree+SynPat+Named: Ident ident +FSharp.Compiler.SyntaxTree+SynPat+Named: Int32 Tag +FSharp.Compiler.SyntaxTree+SynPat+Named: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynPat+Named: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility +FSharp.Compiler.SyntaxTree+SynPat+Named: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() +FSharp.Compiler.SyntaxTree+SynPat+Named: SynPat get_pat() +FSharp.Compiler.SyntaxTree+SynPat+Named: SynPat pat +FSharp.Compiler.SyntaxTree+SynPat+Named: System.String ToString() +FSharp.Compiler.SyntaxTree+SynPat+Named: range Range +FSharp.Compiler.SyntaxTree+SynPat+Named: range get_Range() +FSharp.Compiler.SyntaxTree+SynPat+Named: range get_range() +FSharp.Compiler.SyntaxTree+SynPat+Named: range range +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsAnds +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsDeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsInstanceMember +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsIsInst +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsOptionalVal +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsOr +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsQuoteExpr +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsWild +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsAnds() +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsDeprecatedCharRange() +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsInstanceMember() +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsIsInst() +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsOptionalVal() +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsOr() +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsQuoteExpr() +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsWild() +FSharp.Compiler.SyntaxTree+SynPat+Null: Int32 Tag +FSharp.Compiler.SyntaxTree+SynPat+Null: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynPat+Null: System.String ToString() +FSharp.Compiler.SyntaxTree+SynPat+Null: range Range +FSharp.Compiler.SyntaxTree+SynPat+Null: range get_Range() +FSharp.Compiler.SyntaxTree+SynPat+Null: range get_range() +FSharp.Compiler.SyntaxTree+SynPat+Null: range range +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsAnds +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsDeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsInstanceMember +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsIsInst +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsOptionalVal +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsOr +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsQuoteExpr +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsWild +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsAnds() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsDeprecatedCharRange() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsInstanceMember() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsIsInst() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsOptionalVal() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsOr() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsQuoteExpr() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsWild() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Ident get_ident() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Ident ident +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Int32 Tag +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: System.String ToString() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: range Range +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: range get_Range() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: range get_range() +FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: range range +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsAnds +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsDeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsInstanceMember +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsIsInst +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsOptionalVal +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsOr +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsQuoteExpr +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsWild +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsAnds() +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsDeprecatedCharRange() +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsInstanceMember() +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsIsInst() +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsOptionalVal() +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsOr() +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsQuoteExpr() +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsWild() +FSharp.Compiler.SyntaxTree+SynPat+Or: Int32 Tag +FSharp.Compiler.SyntaxTree+SynPat+Or: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynPat+Or: SynPat get_lhsPat() +FSharp.Compiler.SyntaxTree+SynPat+Or: SynPat get_rhsPat() +FSharp.Compiler.SyntaxTree+SynPat+Or: SynPat lhsPat +FSharp.Compiler.SyntaxTree+SynPat+Or: SynPat rhsPat +FSharp.Compiler.SyntaxTree+SynPat+Or: System.String ToString() +FSharp.Compiler.SyntaxTree+SynPat+Or: range Range +FSharp.Compiler.SyntaxTree+SynPat+Or: range get_Range() +FSharp.Compiler.SyntaxTree+SynPat+Or: range get_range() +FSharp.Compiler.SyntaxTree+SynPat+Or: range range +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsAnds +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsDeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsInstanceMember +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsIsInst +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsOptionalVal +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsOr +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsQuoteExpr +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsWild +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsAnds() +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsDeprecatedCharRange() +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsInstanceMember() +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsIsInst() +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsOptionalVal() +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsOr() +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsQuoteExpr() +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsWild() +FSharp.Compiler.SyntaxTree+SynPat+Paren: Int32 Tag +FSharp.Compiler.SyntaxTree+SynPat+Paren: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynPat+Paren: SynPat get_pat() +FSharp.Compiler.SyntaxTree+SynPat+Paren: SynPat pat +FSharp.Compiler.SyntaxTree+SynPat+Paren: System.String ToString() +FSharp.Compiler.SyntaxTree+SynPat+Paren: range Range +FSharp.Compiler.SyntaxTree+SynPat+Paren: range get_Range() +FSharp.Compiler.SyntaxTree+SynPat+Paren: range get_range() +FSharp.Compiler.SyntaxTree+SynPat+Paren: range range +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsAnds +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsDeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsInstanceMember +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsIsInst +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsOptionalVal +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsOr +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsQuoteExpr +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsWild +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsAnds() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsDeprecatedCharRange() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsInstanceMember() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsIsInst() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsOptionalVal() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsOr() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsQuoteExpr() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsWild() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Int32 Tag +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: SynExpr expr +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: System.String ToString() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: range Range +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: range get_Range() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: range get_range() +FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: range range +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsAnds +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsDeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsInstanceMember +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsIsInst +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsOptionalVal +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsOr +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsQuoteExpr +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsWild +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsAnds() +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsDeprecatedCharRange() +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsInstanceMember() +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsIsInst() +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsOptionalVal() +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsOr() +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsQuoteExpr() +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsWild() +FSharp.Compiler.SyntaxTree+SynPat+Record: Int32 Tag +FSharp.Compiler.SyntaxTree+SynPat+Record: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynPat+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident],FSharp.Compiler.SyntaxTree+Ident],FSharp.Compiler.SyntaxTree+SynPat]] fieldPats +FSharp.Compiler.SyntaxTree+SynPat+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident],FSharp.Compiler.SyntaxTree+Ident],FSharp.Compiler.SyntaxTree+SynPat]] get_fieldPats() +FSharp.Compiler.SyntaxTree+SynPat+Record: System.String ToString() +FSharp.Compiler.SyntaxTree+SynPat+Record: range Range +FSharp.Compiler.SyntaxTree+SynPat+Record: range get_Range() +FSharp.Compiler.SyntaxTree+SynPat+Record: range get_range() +FSharp.Compiler.SyntaxTree+SynPat+Record: range range +FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Ands +FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 ArrayOrList +FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Attrib +FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Const +FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 DeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 FromParseError +FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 InstanceMember +FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 IsInst +FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 LongIdent +FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Named +FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Null +FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 OptionalVal +FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Or +FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Paren +FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 QuoteExpr +FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Record +FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Tuple +FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Typed +FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Wild +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsAnds +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsDeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsInstanceMember +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsIsInst +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsOptionalVal +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsOr +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsQuoteExpr +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsWild +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsAnds() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsDeprecatedCharRange() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsInstanceMember() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsIsInst() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsOptionalVal() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsOr() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsQuoteExpr() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsWild() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_isStruct() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean isStruct +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Int32 Tag +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat] elementPats +FSharp.Compiler.SyntaxTree+SynPat+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat] get_elementPats() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: System.String ToString() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: range Range +FSharp.Compiler.SyntaxTree+SynPat+Tuple: range get_Range() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: range get_range() +FSharp.Compiler.SyntaxTree+SynPat+Tuple: range range +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsAnds +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsDeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsInstanceMember +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsIsInst +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsOptionalVal +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsOr +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsQuoteExpr +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsWild +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsAnds() +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsDeprecatedCharRange() +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsInstanceMember() +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsIsInst() +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsOptionalVal() +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsOr() +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsQuoteExpr() +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsWild() +FSharp.Compiler.SyntaxTree+SynPat+Typed: Int32 Tag +FSharp.Compiler.SyntaxTree+SynPat+Typed: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynPat+Typed: SynPat get_pat() +FSharp.Compiler.SyntaxTree+SynPat+Typed: SynPat pat +FSharp.Compiler.SyntaxTree+SynPat+Typed: SynType get_targetType() +FSharp.Compiler.SyntaxTree+SynPat+Typed: SynType targetType +FSharp.Compiler.SyntaxTree+SynPat+Typed: System.String ToString() +FSharp.Compiler.SyntaxTree+SynPat+Typed: range Range +FSharp.Compiler.SyntaxTree+SynPat+Typed: range get_Range() +FSharp.Compiler.SyntaxTree+SynPat+Typed: range get_range() +FSharp.Compiler.SyntaxTree+SynPat+Typed: range range +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsAnds +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsDeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsInstanceMember +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsIsInst +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsOptionalVal +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsOr +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsQuoteExpr +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsWild +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsAnds() +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsDeprecatedCharRange() +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsInstanceMember() +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsIsInst() +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsOptionalVal() +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsOr() +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsQuoteExpr() +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsWild() +FSharp.Compiler.SyntaxTree+SynPat+Wild: Int32 Tag +FSharp.Compiler.SyntaxTree+SynPat+Wild: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynPat+Wild: System.String ToString() +FSharp.Compiler.SyntaxTree+SynPat+Wild: range Range +FSharp.Compiler.SyntaxTree+SynPat+Wild: range get_Range() +FSharp.Compiler.SyntaxTree+SynPat+Wild: range get_range() +FSharp.Compiler.SyntaxTree+SynPat+Wild: range range +FSharp.Compiler.SyntaxTree+SynPat: Boolean IsAnds +FSharp.Compiler.SyntaxTree+SynPat: Boolean IsArrayOrList +FSharp.Compiler.SyntaxTree+SynPat: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynPat: Boolean IsConst +FSharp.Compiler.SyntaxTree+SynPat: Boolean IsDeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat: Boolean IsFromParseError +FSharp.Compiler.SyntaxTree+SynPat: Boolean IsInstanceMember +FSharp.Compiler.SyntaxTree+SynPat: Boolean IsIsInst +FSharp.Compiler.SyntaxTree+SynPat: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynPat: Boolean IsNamed +FSharp.Compiler.SyntaxTree+SynPat: Boolean IsNull +FSharp.Compiler.SyntaxTree+SynPat: Boolean IsOptionalVal +FSharp.Compiler.SyntaxTree+SynPat: Boolean IsOr +FSharp.Compiler.SyntaxTree+SynPat: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynPat: Boolean IsQuoteExpr +FSharp.Compiler.SyntaxTree+SynPat: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynPat: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynPat: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynPat: Boolean IsWild +FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsAnds() +FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsArrayOrList() +FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsConst() +FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsDeprecatedCharRange() +FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsFromParseError() +FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsInstanceMember() +FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsIsInst() +FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsNamed() +FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsNull() +FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsOptionalVal() +FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsOr() +FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsQuoteExpr() +FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsWild() +FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Ands +FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList +FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Attrib +FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Const +FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange +FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+FromParseError +FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+InstanceMember +FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+IsInst +FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+LongIdent +FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Named +FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Null +FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+OptionalVal +FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Or +FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Paren +FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr +FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Record +FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Tags +FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Tuple +FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Typed +FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Wild +FSharp.Compiler.SyntaxTree+SynPat: Int32 Tag +FSharp.Compiler.SyntaxTree+SynPat: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynPat: SynPat NewAnds(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat], range) +FSharp.Compiler.SyntaxTree+SynPat: SynPat NewArrayOrList(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat], range) +FSharp.Compiler.SyntaxTree+SynPat: SynPat NewAttrib(SynPat, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], range) +FSharp.Compiler.SyntaxTree+SynPat: SynPat NewConst(SynConst, range) +FSharp.Compiler.SyntaxTree+SynPat: SynPat NewDeprecatedCharRange(Char, Char, range) +FSharp.Compiler.SyntaxTree+SynPat: SynPat NewFromParseError(SynPat, range) +FSharp.Compiler.SyntaxTree+SynPat: SynPat NewInstanceMember(Ident, Ident, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) +FSharp.Compiler.SyntaxTree+SynPat: SynPat NewIsInst(SynType, range) +FSharp.Compiler.SyntaxTree+SynPat: SynPat NewLongIdent(LongIdentWithDots, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynValTyparDecls], SynArgPats, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) +FSharp.Compiler.SyntaxTree+SynPat: SynPat NewNamed(SynPat, Ident, Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) +FSharp.Compiler.SyntaxTree+SynPat: SynPat NewNull(range) +FSharp.Compiler.SyntaxTree+SynPat: SynPat NewOptionalVal(Ident, range) +FSharp.Compiler.SyntaxTree+SynPat: SynPat NewOr(SynPat, SynPat, range) +FSharp.Compiler.SyntaxTree+SynPat: SynPat NewParen(SynPat, range) +FSharp.Compiler.SyntaxTree+SynPat: SynPat NewQuoteExpr(SynExpr, range) +FSharp.Compiler.SyntaxTree+SynPat: SynPat NewRecord(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident],FSharp.Compiler.SyntaxTree+Ident],FSharp.Compiler.SyntaxTree+SynPat]], range) +FSharp.Compiler.SyntaxTree+SynPat: SynPat NewTuple(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat], range) +FSharp.Compiler.SyntaxTree+SynPat: SynPat NewTyped(SynPat, SynType, range) +FSharp.Compiler.SyntaxTree+SynPat: SynPat NewWild(range) +FSharp.Compiler.SyntaxTree+SynPat: System.String ToString() +FSharp.Compiler.SyntaxTree+SynPat: range Range +FSharp.Compiler.SyntaxTree+SynPat: range get_Range() +FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: Boolean IsInteger +FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: Boolean IsNegate +FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: Boolean IsRational +FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: Boolean get_IsInteger() +FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: Boolean get_IsNegate() +FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: Boolean get_IsRational() +FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: Int32 Item +FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: Int32 Tag +FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: Int32 get_Item() +FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: System.String ToString() +FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: Boolean IsInteger +FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: Boolean IsNegate +FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: Boolean IsRational +FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: Boolean get_IsInteger() +FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: Boolean get_IsNegate() +FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: Boolean get_IsRational() +FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: Int32 Tag +FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: SynRationalConst Item +FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: SynRationalConst get_Item() +FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: System.String ToString() +FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Boolean IsInteger +FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Boolean IsNegate +FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Boolean IsRational +FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Boolean get_IsInteger() +FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Boolean get_IsNegate() +FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Boolean get_IsRational() +FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Int32 Item1 +FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Int32 Item2 +FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Int32 Tag +FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Int32 get_Item1() +FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Int32 get_Item2() +FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: System.String ToString() +FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: range get_range() +FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: range range +FSharp.Compiler.SyntaxTree+SynRationalConst+Tags: Int32 Integer +FSharp.Compiler.SyntaxTree+SynRationalConst+Tags: Int32 Negate +FSharp.Compiler.SyntaxTree+SynRationalConst+Tags: Int32 Rational +FSharp.Compiler.SyntaxTree+SynRationalConst: Boolean IsInteger +FSharp.Compiler.SyntaxTree+SynRationalConst: Boolean IsNegate +FSharp.Compiler.SyntaxTree+SynRationalConst: Boolean IsRational +FSharp.Compiler.SyntaxTree+SynRationalConst: Boolean get_IsInteger() +FSharp.Compiler.SyntaxTree+SynRationalConst: Boolean get_IsNegate() +FSharp.Compiler.SyntaxTree+SynRationalConst: Boolean get_IsRational() +FSharp.Compiler.SyntaxTree+SynRationalConst: FSharp.Compiler.SyntaxTree+SynRationalConst+Integer +FSharp.Compiler.SyntaxTree+SynRationalConst: FSharp.Compiler.SyntaxTree+SynRationalConst+Negate +FSharp.Compiler.SyntaxTree+SynRationalConst: FSharp.Compiler.SyntaxTree+SynRationalConst+Rational +FSharp.Compiler.SyntaxTree+SynRationalConst: FSharp.Compiler.SyntaxTree+SynRationalConst+Tags +FSharp.Compiler.SyntaxTree+SynRationalConst: Int32 Tag +FSharp.Compiler.SyntaxTree+SynRationalConst: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynRationalConst: SynRationalConst NewInteger(Int32) +FSharp.Compiler.SyntaxTree+SynRationalConst: SynRationalConst NewNegate(SynRationalConst) +FSharp.Compiler.SyntaxTree+SynRationalConst: SynRationalConst NewRational(Int32, Int32, range) +FSharp.Compiler.SyntaxTree+SynRationalConst: System.String ToString() +FSharp.Compiler.SyntaxTree+SynReturnInfo: Int32 Tag +FSharp.Compiler.SyntaxTree+SynReturnInfo: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynReturnInfo: SynReturnInfo NewSynReturnInfo(System.Tuple`2[FSharp.Compiler.SyntaxTree+SynType,FSharp.Compiler.SyntaxTree+SynArgInfo], range) +FSharp.Compiler.SyntaxTree+SynReturnInfo: System.String ToString() +FSharp.Compiler.SyntaxTree+SynReturnInfo: System.Tuple`2[FSharp.Compiler.SyntaxTree+SynType,FSharp.Compiler.SyntaxTree+SynArgInfo] get_returnType() +FSharp.Compiler.SyntaxTree+SynReturnInfo: System.Tuple`2[FSharp.Compiler.SyntaxTree+SynType,FSharp.Compiler.SyntaxTree+SynArgInfo] returnType +FSharp.Compiler.SyntaxTree+SynReturnInfo: range get_range() +FSharp.Compiler.SyntaxTree+SynReturnInfo: range range +FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: Boolean IsId +FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: Boolean get_IsId() +FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: Int32 Tag +FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes +FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() +FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: SynSimplePat get_pat() +FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: SynSimplePat pat +FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: System.String ToString() +FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: range get_range() +FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: range range +FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean IsId +FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean get_IsId() +FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean get_isCompilerGenerated() +FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean get_isOptArg() +FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean get_isThisVar() +FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean isCompilerGenerated +FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean isOptArg +FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean isThisVar +FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Ident get_ident() +FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Ident ident +FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Int32 Tag +FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo]] altNameRefCell +FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo]] get_altNameRefCell() +FSharp.Compiler.SyntaxTree+SynSimplePat+Id: System.String ToString() +FSharp.Compiler.SyntaxTree+SynSimplePat+Id: range get_range() +FSharp.Compiler.SyntaxTree+SynSimplePat+Id: range range +FSharp.Compiler.SyntaxTree+SynSimplePat+Tags: Int32 Attrib +FSharp.Compiler.SyntaxTree+SynSimplePat+Tags: Int32 Id +FSharp.Compiler.SyntaxTree+SynSimplePat+Tags: Int32 Typed +FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: Boolean IsId +FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: Boolean get_IsId() +FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: Int32 Tag +FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: SynSimplePat get_pat() +FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: SynSimplePat pat +FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: SynType get_targetType() +FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: SynType targetType +FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: System.String ToString() +FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: range get_range() +FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: range range +FSharp.Compiler.SyntaxTree+SynSimplePat: Boolean IsAttrib +FSharp.Compiler.SyntaxTree+SynSimplePat: Boolean IsId +FSharp.Compiler.SyntaxTree+SynSimplePat: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynSimplePat: Boolean get_IsAttrib() +FSharp.Compiler.SyntaxTree+SynSimplePat: Boolean get_IsId() +FSharp.Compiler.SyntaxTree+SynSimplePat: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynSimplePat: FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib +FSharp.Compiler.SyntaxTree+SynSimplePat: FSharp.Compiler.SyntaxTree+SynSimplePat+Id +FSharp.Compiler.SyntaxTree+SynSimplePat: FSharp.Compiler.SyntaxTree+SynSimplePat+Tags +FSharp.Compiler.SyntaxTree+SynSimplePat: FSharp.Compiler.SyntaxTree+SynSimplePat+Typed +FSharp.Compiler.SyntaxTree+SynSimplePat: Int32 Tag +FSharp.Compiler.SyntaxTree+SynSimplePat: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynSimplePat: SynSimplePat NewAttrib(SynSimplePat, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], range) +FSharp.Compiler.SyntaxTree+SynSimplePat: SynSimplePat NewId(Ident, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo]], Boolean, Boolean, Boolean, range) +FSharp.Compiler.SyntaxTree+SynSimplePat: SynSimplePat NewTyped(SynSimplePat, SynType, range) +FSharp.Compiler.SyntaxTree+SynSimplePat: System.String ToString() +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Decided: Boolean IsDecided +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Decided: Boolean IsUndecided +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Decided: Boolean get_IsDecided() +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Decided: Boolean get_IsUndecided() +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Decided: Ident Item +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Decided: Ident get_Item() +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Decided: Int32 Tag +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Decided: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Decided: System.String ToString() +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Tags: Int32 Decided +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Tags: Int32 Undecided +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Undecided: Boolean IsDecided +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Undecided: Boolean IsUndecided +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Undecided: Boolean get_IsDecided() +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Undecided: Boolean get_IsUndecided() +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Undecided: Ident Item +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Undecided: Ident get_Item() +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Undecided: Int32 Tag +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Undecided: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Undecided: System.String ToString() +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: Boolean IsDecided +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: Boolean IsUndecided +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: Boolean get_IsDecided() +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: Boolean get_IsUndecided() +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Decided +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Tags +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Undecided +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: Int32 Tag +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: SynSimplePatAlternativeIdInfo NewDecided(Ident) +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: SynSimplePatAlternativeIdInfo NewUndecided(Ident) +FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: System.String ToString() +FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: Boolean IsSimplePats +FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: Boolean get_IsSimplePats() +FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: Int32 Tag +FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynSimplePat] get_pats() +FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynSimplePat] pats +FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: System.String ToString() +FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: range get_range() +FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: range range +FSharp.Compiler.SyntaxTree+SynSimplePats+Tags: Int32 SimplePats +FSharp.Compiler.SyntaxTree+SynSimplePats+Tags: Int32 Typed +FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: Boolean IsSimplePats +FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: Boolean get_IsSimplePats() +FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: Int32 Tag +FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: SynSimplePats get_pats() +FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: SynSimplePats pats +FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: SynType get_targetType() +FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: SynType targetType +FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: System.String ToString() +FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: range get_range() +FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: range range +FSharp.Compiler.SyntaxTree+SynSimplePats: Boolean IsSimplePats +FSharp.Compiler.SyntaxTree+SynSimplePats: Boolean IsTyped +FSharp.Compiler.SyntaxTree+SynSimplePats: Boolean get_IsSimplePats() +FSharp.Compiler.SyntaxTree+SynSimplePats: Boolean get_IsTyped() +FSharp.Compiler.SyntaxTree+SynSimplePats: FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats +FSharp.Compiler.SyntaxTree+SynSimplePats: FSharp.Compiler.SyntaxTree+SynSimplePats+Tags +FSharp.Compiler.SyntaxTree+SynSimplePats: FSharp.Compiler.SyntaxTree+SynSimplePats+Typed +FSharp.Compiler.SyntaxTree+SynSimplePats: Int32 Tag +FSharp.Compiler.SyntaxTree+SynSimplePats: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynSimplePats: SynSimplePats NewSimplePats(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynSimplePat], range) +FSharp.Compiler.SyntaxTree+SynSimplePats: SynSimplePats NewTyped(SynSimplePats, SynType, range) +FSharp.Compiler.SyntaxTree+SynSimplePats: System.String ToString() +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+Tags: Int32 WhenTyparIsStruct +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+Tags: Int32 WhenTyparTyconEqualsTycon +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: Boolean IsWhenTyparIsStruct +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: Boolean IsWhenTyparTyconEqualsTycon +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: Boolean get_IsWhenTyparIsStruct() +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: Boolean get_IsWhenTyparTyconEqualsTycon() +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: Int32 Tag +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: SynTypar get_typar() +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: SynTypar typar +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: System.String ToString() +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: range get_range() +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: range range +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: Boolean IsWhenTyparIsStruct +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: Boolean IsWhenTyparTyconEqualsTycon +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: Boolean get_IsWhenTyparIsStruct() +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: Boolean get_IsWhenTyparTyconEqualsTycon() +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: Int32 Tag +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: SynTypar get_typar() +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: SynTypar typar +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: SynType get_rhsType() +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: SynType rhsType +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: System.String ToString() +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: range get_range() +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: range range +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: Boolean IsWhenTyparIsStruct +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: Boolean IsWhenTyparTyconEqualsTycon +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: Boolean get_IsWhenTyparIsStruct() +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: Boolean get_IsWhenTyparTyconEqualsTycon() +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+Tags +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: Int32 Tag +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: SynStaticOptimizationConstraint NewWhenTyparIsStruct(SynTypar, range) +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: SynStaticOptimizationConstraint NewWhenTyparTyconEqualsTycon(SynTypar, SynType, range) +FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypar: Boolean get_isCompGen() +FSharp.Compiler.SyntaxTree+SynTypar: Boolean isCompGen +FSharp.Compiler.SyntaxTree+SynTypar: Ident get_ident() +FSharp.Compiler.SyntaxTree+SynTypar: Ident ident +FSharp.Compiler.SyntaxTree+SynTypar: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypar: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypar: SynTypar NewTypar(Ident, TyparStaticReq, Boolean) +FSharp.Compiler.SyntaxTree+SynTypar: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypar: TyparStaticReq get_staticReq() +FSharp.Compiler.SyntaxTree+SynTypar: TyparStaticReq staticReq +FSharp.Compiler.SyntaxTree+SynTypar: range Range +FSharp.Compiler.SyntaxTree+SynTypar: range get_Range() +FSharp.Compiler.SyntaxTree+SynTyparDecl: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTyparDecl: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTyparDecl: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes +FSharp.Compiler.SyntaxTree+SynTyparDecl: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() +FSharp.Compiler.SyntaxTree+SynTyparDecl: SynTypar Item2 +FSharp.Compiler.SyntaxTree+SynTyparDecl: SynTypar get_Item2() +FSharp.Compiler.SyntaxTree+SynTyparDecl: SynTyparDecl NewTyparDecl(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], SynTypar) +FSharp.Compiler.SyntaxTree+SynTyparDecl: System.String ToString() +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsArray +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsFun +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsHashConstraint +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsLongIdentApp +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsMeasureDivide +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsMeasurePower +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsStaticConstant +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsStaticConstantExpr +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsStaticConstantNamed +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsWithGlobalConstraints +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsArray() +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsFun() +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsHashConstraint() +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsLongIdentApp() +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsMeasureDivide() +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsMeasurePower() +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsStaticConstant() +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsStaticConstantExpr() +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsStaticConstantNamed() +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsWithGlobalConstraints() +FSharp.Compiler.SyntaxTree+SynType+Anon: Int32 Tag +FSharp.Compiler.SyntaxTree+SynType+Anon: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynType+Anon: System.String ToString() +FSharp.Compiler.SyntaxTree+SynType+Anon: range Range +FSharp.Compiler.SyntaxTree+SynType+Anon: range get_Range() +FSharp.Compiler.SyntaxTree+SynType+Anon: range get_range() +FSharp.Compiler.SyntaxTree+SynType+Anon: range range +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsArray +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsFun +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsHashConstraint +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsLongIdentApp +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsMeasureDivide +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsMeasurePower +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsStaticConstant +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsStaticConstantExpr +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsStaticConstantNamed +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsWithGlobalConstraints +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsArray() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsFun() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsHashConstraint() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsLongIdentApp() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsMeasureDivide() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsMeasurePower() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsStaticConstant() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsStaticConstantExpr() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsStaticConstantNamed() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsWithGlobalConstraints() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_isStruct() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean isStruct +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Int32 Tag +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+Ident,FSharp.Compiler.SyntaxTree+SynType]] fields +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+Ident,FSharp.Compiler.SyntaxTree+SynType]] get_fields() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: System.String ToString() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: range Range +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: range get_Range() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: range get_range() +FSharp.Compiler.SyntaxTree+SynType+AnonRecd: range range +FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsArray +FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsFun +FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsHashConstraint +FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsLongIdentApp +FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsMeasureDivide +FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsMeasurePower +FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsStaticConstant +FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsStaticConstantExpr +FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsStaticConstantNamed +FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsWithGlobalConstraints +FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsArray() +FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsFun() +FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsHashConstraint() +FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsLongIdentApp() +FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsMeasureDivide() +FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsMeasurePower() +FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsStaticConstant() +FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsStaticConstantExpr() +FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsStaticConstantNamed() +FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsWithGlobalConstraints() +FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_isPostfix() +FSharp.Compiler.SyntaxTree+SynType+App: Boolean isPostfix +FSharp.Compiler.SyntaxTree+SynType+App: Int32 Tag +FSharp.Compiler.SyntaxTree+SynType+App: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynType+App: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range] commaRanges +FSharp.Compiler.SyntaxTree+SynType+App: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range] get_commaRanges() +FSharp.Compiler.SyntaxTree+SynType+App: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] get_typeArgs() +FSharp.Compiler.SyntaxTree+SynType+App: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] typeArgs +FSharp.Compiler.SyntaxTree+SynType+App: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_greaterRange() +FSharp.Compiler.SyntaxTree+SynType+App: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_lessRange() +FSharp.Compiler.SyntaxTree+SynType+App: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] greaterRange +FSharp.Compiler.SyntaxTree+SynType+App: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] lessRange +FSharp.Compiler.SyntaxTree+SynType+App: SynType get_typeName() +FSharp.Compiler.SyntaxTree+SynType+App: SynType typeName +FSharp.Compiler.SyntaxTree+SynType+App: System.String ToString() +FSharp.Compiler.SyntaxTree+SynType+App: range Range +FSharp.Compiler.SyntaxTree+SynType+App: range get_Range() +FSharp.Compiler.SyntaxTree+SynType+App: range get_range() +FSharp.Compiler.SyntaxTree+SynType+App: range range +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsArray +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsFun +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsHashConstraint +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsLongIdentApp +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsMeasureDivide +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsMeasurePower +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsStaticConstant +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsStaticConstantExpr +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsStaticConstantNamed +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsWithGlobalConstraints +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsArray() +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsFun() +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsHashConstraint() +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsLongIdentApp() +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsMeasureDivide() +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsMeasurePower() +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsStaticConstant() +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsStaticConstantExpr() +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsStaticConstantNamed() +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsWithGlobalConstraints() +FSharp.Compiler.SyntaxTree+SynType+Array: Int32 Tag +FSharp.Compiler.SyntaxTree+SynType+Array: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynType+Array: Int32 get_rank() +FSharp.Compiler.SyntaxTree+SynType+Array: Int32 rank +FSharp.Compiler.SyntaxTree+SynType+Array: SynType elementType +FSharp.Compiler.SyntaxTree+SynType+Array: SynType get_elementType() +FSharp.Compiler.SyntaxTree+SynType+Array: System.String ToString() +FSharp.Compiler.SyntaxTree+SynType+Array: range Range +FSharp.Compiler.SyntaxTree+SynType+Array: range get_Range() +FSharp.Compiler.SyntaxTree+SynType+Array: range get_range() +FSharp.Compiler.SyntaxTree+SynType+Array: range range +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsArray +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsFun +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsHashConstraint +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsLongIdentApp +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsMeasureDivide +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsMeasurePower +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsStaticConstant +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsStaticConstantExpr +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsStaticConstantNamed +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsWithGlobalConstraints +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsArray() +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsFun() +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsHashConstraint() +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsLongIdentApp() +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsMeasureDivide() +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsMeasurePower() +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsStaticConstant() +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsStaticConstantExpr() +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsStaticConstantNamed() +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsWithGlobalConstraints() +FSharp.Compiler.SyntaxTree+SynType+Fun: Int32 Tag +FSharp.Compiler.SyntaxTree+SynType+Fun: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynType+Fun: SynType argType +FSharp.Compiler.SyntaxTree+SynType+Fun: SynType get_argType() +FSharp.Compiler.SyntaxTree+SynType+Fun: SynType get_returnType() +FSharp.Compiler.SyntaxTree+SynType+Fun: SynType returnType +FSharp.Compiler.SyntaxTree+SynType+Fun: System.String ToString() +FSharp.Compiler.SyntaxTree+SynType+Fun: range Range +FSharp.Compiler.SyntaxTree+SynType+Fun: range get_Range() +FSharp.Compiler.SyntaxTree+SynType+Fun: range get_range() +FSharp.Compiler.SyntaxTree+SynType+Fun: range range +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsArray +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsFun +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsHashConstraint +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsLongIdentApp +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsMeasureDivide +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsMeasurePower +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsStaticConstant +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsStaticConstantExpr +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsStaticConstantNamed +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsWithGlobalConstraints +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsArray() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsFun() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsHashConstraint() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsLongIdentApp() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsMeasureDivide() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsMeasurePower() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsStaticConstant() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsStaticConstantExpr() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsStaticConstantNamed() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsWithGlobalConstraints() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Int32 Tag +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: SynType get_innerType() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: SynType innerType +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: System.String ToString() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: range Range +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: range get_Range() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: range get_range() +FSharp.Compiler.SyntaxTree+SynType+HashConstraint: range range +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsArray +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsFun +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsHashConstraint +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsLongIdentApp +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsMeasureDivide +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsMeasurePower +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsStaticConstant +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsStaticConstantExpr +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsStaticConstantNamed +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsWithGlobalConstraints +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsArray() +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsFun() +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsHashConstraint() +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsLongIdentApp() +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsMeasureDivide() +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsMeasurePower() +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsStaticConstant() +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsStaticConstantExpr() +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsStaticConstantNamed() +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsWithGlobalConstraints() +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Int32 Tag +FSharp.Compiler.SyntaxTree+SynType+LongIdent: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynType+LongIdent: LongIdentWithDots get_longDotId() +FSharp.Compiler.SyntaxTree+SynType+LongIdent: LongIdentWithDots longDotId +FSharp.Compiler.SyntaxTree+SynType+LongIdent: System.String ToString() +FSharp.Compiler.SyntaxTree+SynType+LongIdent: range Range +FSharp.Compiler.SyntaxTree+SynType+LongIdent: range get_Range() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsArray +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsFun +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsHashConstraint +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsLongIdentApp +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsMeasureDivide +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsMeasurePower +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsStaticConstant +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsStaticConstantExpr +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsStaticConstantNamed +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsWithGlobalConstraints +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsArray() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsFun() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsHashConstraint() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsLongIdentApp() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsMeasureDivide() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsMeasurePower() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsStaticConstant() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsStaticConstantExpr() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsStaticConstantNamed() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsWithGlobalConstraints() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Int32 Tag +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: LongIdentWithDots get_longDotId() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: LongIdentWithDots longDotId +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range] commaRanges +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range] get_commaRanges() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] get_typeArgs() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] typeArgs +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_greaterRange() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_lessRange() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] greaterRange +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] lessRange +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: SynType get_typeName() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: SynType typeName +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: System.String ToString() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: range Range +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: range get_Range() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: range get_range() +FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: range range +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsArray +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsFun +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsHashConstraint +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsLongIdentApp +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsMeasureDivide +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsMeasurePower +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsStaticConstant +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsStaticConstantExpr +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsStaticConstantNamed +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsWithGlobalConstraints +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsArray() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsFun() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsHashConstraint() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsLongIdentApp() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsMeasureDivide() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsMeasurePower() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsStaticConstant() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsStaticConstantExpr() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsStaticConstantNamed() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsWithGlobalConstraints() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Int32 Tag +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: SynType dividend +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: SynType divisor +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: SynType get_dividend() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: SynType get_divisor() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: System.String ToString() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: range Range +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: range get_Range() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: range get_range() +FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: range range +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsArray +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsFun +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsHashConstraint +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsLongIdentApp +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsMeasureDivide +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsMeasurePower +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsStaticConstant +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsStaticConstantExpr +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsStaticConstantNamed +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsWithGlobalConstraints +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsArray() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsFun() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsHashConstraint() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsLongIdentApp() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsMeasureDivide() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsMeasurePower() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsStaticConstant() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsStaticConstantExpr() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsStaticConstantNamed() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsWithGlobalConstraints() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Int32 Tag +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: SynRationalConst exponent +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: SynRationalConst get_exponent() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: SynType baseMeasure +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: SynType get_baseMeasure() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: System.String ToString() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: range Range +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: range get_Range() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: range get_range() +FSharp.Compiler.SyntaxTree+SynType+MeasurePower: range range +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsArray +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsFun +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsHashConstraint +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsLongIdentApp +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsMeasureDivide +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsMeasurePower +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsStaticConstant +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsStaticConstantExpr +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsStaticConstantNamed +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsWithGlobalConstraints +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsArray() +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsFun() +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsHashConstraint() +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsLongIdentApp() +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsMeasureDivide() +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsMeasurePower() +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsStaticConstant() +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsStaticConstantExpr() +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsStaticConstantNamed() +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsWithGlobalConstraints() +FSharp.Compiler.SyntaxTree+SynType+Paren: Int32 Tag +FSharp.Compiler.SyntaxTree+SynType+Paren: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynType+Paren: SynType get_innerType() +FSharp.Compiler.SyntaxTree+SynType+Paren: SynType innerType +FSharp.Compiler.SyntaxTree+SynType+Paren: System.String ToString() +FSharp.Compiler.SyntaxTree+SynType+Paren: range Range +FSharp.Compiler.SyntaxTree+SynType+Paren: range get_Range() +FSharp.Compiler.SyntaxTree+SynType+Paren: range get_range() +FSharp.Compiler.SyntaxTree+SynType+Paren: range range +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsArray +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsFun +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsHashConstraint +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsLongIdentApp +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsMeasureDivide +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsMeasurePower +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsStaticConstant +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsStaticConstantExpr +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsStaticConstantNamed +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsWithGlobalConstraints +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsArray() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsFun() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsHashConstraint() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsLongIdentApp() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsMeasureDivide() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsMeasurePower() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsStaticConstant() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsStaticConstantExpr() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsStaticConstantNamed() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsWithGlobalConstraints() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Int32 Tag +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: SynConst constant +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: SynConst get_constant() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: System.String ToString() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: range Range +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: range get_Range() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: range get_range() +FSharp.Compiler.SyntaxTree+SynType+StaticConstant: range range +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsArray +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsFun +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsHashConstraint +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsLongIdentApp +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsMeasureDivide +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsMeasurePower +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsStaticConstant +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsStaticConstantExpr +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsStaticConstantNamed +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsWithGlobalConstraints +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsArray() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsFun() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsHashConstraint() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsLongIdentApp() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsMeasureDivide() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsMeasurePower() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsStaticConstant() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsStaticConstantExpr() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsStaticConstantNamed() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsWithGlobalConstraints() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Int32 Tag +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: SynExpr expr +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: SynExpr get_expr() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: System.String ToString() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: range Range +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: range get_Range() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: range get_range() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: range range +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsArray +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsFun +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsHashConstraint +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsLongIdentApp +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsMeasureDivide +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsMeasurePower +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsStaticConstant +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsStaticConstantExpr +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsStaticConstantNamed +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsWithGlobalConstraints +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsArray() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsFun() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsHashConstraint() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsLongIdentApp() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsMeasureDivide() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsMeasurePower() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsStaticConstant() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsStaticConstantExpr() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsStaticConstantNamed() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsWithGlobalConstraints() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Int32 Tag +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: SynType get_ident() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: SynType get_value() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: SynType ident +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: SynType value +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: System.String ToString() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: range Range +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: range get_Range() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: range get_range() +FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: range range +FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 Anon +FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 AnonRecd +FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 App +FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 Array +FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 Fun +FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 HashConstraint +FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 LongIdent +FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 LongIdentApp +FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 MeasureDivide +FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 MeasurePower +FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 Paren +FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 StaticConstant +FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 StaticConstantExpr +FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 StaticConstantNamed +FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 Tuple +FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 Var +FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 WithGlobalConstraints +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsArray +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsFun +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsHashConstraint +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsLongIdentApp +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsMeasureDivide +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsMeasurePower +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsStaticConstant +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsStaticConstantExpr +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsStaticConstantNamed +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsWithGlobalConstraints +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsArray() +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsFun() +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsHashConstraint() +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsLongIdentApp() +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsMeasureDivide() +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsMeasurePower() +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsStaticConstant() +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsStaticConstantExpr() +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsStaticConstantNamed() +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsWithGlobalConstraints() +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_isStruct() +FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean isStruct +FSharp.Compiler.SyntaxTree+SynType+Tuple: Int32 Tag +FSharp.Compiler.SyntaxTree+SynType+Tuple: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynType+Tuple: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Boolean,FSharp.Compiler.SyntaxTree+SynType]] elementTypes +FSharp.Compiler.SyntaxTree+SynType+Tuple: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Boolean,FSharp.Compiler.SyntaxTree+SynType]] get_elementTypes() +FSharp.Compiler.SyntaxTree+SynType+Tuple: System.String ToString() +FSharp.Compiler.SyntaxTree+SynType+Tuple: range Range +FSharp.Compiler.SyntaxTree+SynType+Tuple: range get_Range() +FSharp.Compiler.SyntaxTree+SynType+Tuple: range get_range() +FSharp.Compiler.SyntaxTree+SynType+Tuple: range range +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsArray +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsFun +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsHashConstraint +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsLongIdentApp +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsMeasureDivide +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsMeasurePower +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsStaticConstant +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsStaticConstantExpr +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsStaticConstantNamed +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsWithGlobalConstraints +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsArray() +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsFun() +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsHashConstraint() +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsLongIdentApp() +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsMeasureDivide() +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsMeasurePower() +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsStaticConstant() +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsStaticConstantExpr() +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsStaticConstantNamed() +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsWithGlobalConstraints() +FSharp.Compiler.SyntaxTree+SynType+Var: Int32 Tag +FSharp.Compiler.SyntaxTree+SynType+Var: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynType+Var: SynTypar get_typar() +FSharp.Compiler.SyntaxTree+SynType+Var: SynTypar typar +FSharp.Compiler.SyntaxTree+SynType+Var: System.String ToString() +FSharp.Compiler.SyntaxTree+SynType+Var: range Range +FSharp.Compiler.SyntaxTree+SynType+Var: range get_Range() +FSharp.Compiler.SyntaxTree+SynType+Var: range get_range() +FSharp.Compiler.SyntaxTree+SynType+Var: range range +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsArray +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsFun +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsHashConstraint +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsLongIdentApp +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsMeasureDivide +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsMeasurePower +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsStaticConstant +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsStaticConstantExpr +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsStaticConstantNamed +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsWithGlobalConstraints +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsArray() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsFun() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsHashConstraint() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsLongIdentApp() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsMeasureDivide() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsMeasurePower() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsStaticConstant() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsStaticConstantExpr() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsStaticConstantNamed() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsWithGlobalConstraints() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Int32 Tag +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeConstraint] constraints +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeConstraint] get_constraints() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: SynType get_typeName() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: SynType typeName +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: System.String ToString() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: range Range +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: range get_Range() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: range get_range() +FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: range range +FSharp.Compiler.SyntaxTree+SynType: Boolean IsAnon +FSharp.Compiler.SyntaxTree+SynType: Boolean IsAnonRecd +FSharp.Compiler.SyntaxTree+SynType: Boolean IsApp +FSharp.Compiler.SyntaxTree+SynType: Boolean IsArray +FSharp.Compiler.SyntaxTree+SynType: Boolean IsFun +FSharp.Compiler.SyntaxTree+SynType: Boolean IsHashConstraint +FSharp.Compiler.SyntaxTree+SynType: Boolean IsLongIdent +FSharp.Compiler.SyntaxTree+SynType: Boolean IsLongIdentApp +FSharp.Compiler.SyntaxTree+SynType: Boolean IsMeasureDivide +FSharp.Compiler.SyntaxTree+SynType: Boolean IsMeasurePower +FSharp.Compiler.SyntaxTree+SynType: Boolean IsParen +FSharp.Compiler.SyntaxTree+SynType: Boolean IsStaticConstant +FSharp.Compiler.SyntaxTree+SynType: Boolean IsStaticConstantExpr +FSharp.Compiler.SyntaxTree+SynType: Boolean IsStaticConstantNamed +FSharp.Compiler.SyntaxTree+SynType: Boolean IsTuple +FSharp.Compiler.SyntaxTree+SynType: Boolean IsVar +FSharp.Compiler.SyntaxTree+SynType: Boolean IsWithGlobalConstraints +FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsAnon() +FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsAnonRecd() +FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsApp() +FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsArray() +FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsFun() +FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsHashConstraint() +FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsLongIdent() +FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsLongIdentApp() +FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsMeasureDivide() +FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsMeasurePower() +FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsParen() +FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsStaticConstant() +FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsStaticConstantExpr() +FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsStaticConstantNamed() +FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsTuple() +FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsVar() +FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsWithGlobalConstraints() +FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+Anon +FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+AnonRecd +FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+App +FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+Array +FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+Fun +FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+HashConstraint +FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+LongIdent +FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+LongIdentApp +FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+MeasureDivide +FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+MeasurePower +FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+Paren +FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+StaticConstant +FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr +FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed +FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+Tags +FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+Tuple +FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+Var +FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints +FSharp.Compiler.SyntaxTree+SynType: Int32 Tag +FSharp.Compiler.SyntaxTree+SynType: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynType: SynType NewAnon(range) +FSharp.Compiler.SyntaxTree+SynType: SynType NewAnonRecd(Boolean, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+Ident,FSharp.Compiler.SyntaxTree+SynType]], range) +FSharp.Compiler.SyntaxTree+SynType: SynType NewApp(SynType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range], Boolean, range) +FSharp.Compiler.SyntaxTree+SynType: SynType NewArray(Int32, SynType, range) +FSharp.Compiler.SyntaxTree+SynType: SynType NewFun(SynType, SynType, range) +FSharp.Compiler.SyntaxTree+SynType: SynType NewHashConstraint(SynType, range) +FSharp.Compiler.SyntaxTree+SynType: SynType NewLongIdent(LongIdentWithDots) +FSharp.Compiler.SyntaxTree+SynType: SynType NewLongIdentApp(SynType, LongIdentWithDots, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range], range) +FSharp.Compiler.SyntaxTree+SynType: SynType NewMeasureDivide(SynType, SynType, range) +FSharp.Compiler.SyntaxTree+SynType: SynType NewMeasurePower(SynType, SynRationalConst, range) +FSharp.Compiler.SyntaxTree+SynType: SynType NewParen(SynType, range) +FSharp.Compiler.SyntaxTree+SynType: SynType NewStaticConstant(SynConst, range) +FSharp.Compiler.SyntaxTree+SynType: SynType NewStaticConstantExpr(SynExpr, range) +FSharp.Compiler.SyntaxTree+SynType: SynType NewStaticConstantNamed(SynType, SynType, range) +FSharp.Compiler.SyntaxTree+SynType: SynType NewTuple(Boolean, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Boolean,FSharp.Compiler.SyntaxTree+SynType]], range) +FSharp.Compiler.SyntaxTree+SynType: SynType NewVar(SynTypar, range) +FSharp.Compiler.SyntaxTree+SynType: SynType NewWithGlobalConstraints(SynType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeConstraint], range) +FSharp.Compiler.SyntaxTree+SynType: System.String ToString() +FSharp.Compiler.SyntaxTree+SynType: range Range +FSharp.Compiler.SyntaxTree+SynType: range get_Range() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparDefaultsToType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparIsComparable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparIsDelegate +FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparIsEnum +FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparIsEquatable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparIsReferenceType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparIsUnmanaged +FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparIsValueType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparSubtypeOfType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparSupportsMember +FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparSupportsNull +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparDefaultsToType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparIsComparable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparIsDelegate +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparIsEnum +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparIsEquatable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparIsReferenceType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparIsUnmanaged +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparIsValueType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparSubtypeOfType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparSupportsMember +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparSupportsNull +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparDefaultsToType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparIsComparable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparIsDelegate() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparIsEnum() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparIsEquatable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparIsReferenceType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparIsUnmanaged() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparIsValueType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparSubtypeOfType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparSupportsMember() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparSupportsNull() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: SynTypar get_typar() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: SynTypar typar +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: SynType get_typeName() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: SynType typeName +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: range range +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparDefaultsToType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparIsComparable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparIsDelegate +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparIsEnum +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparIsEquatable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparIsReferenceType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparIsUnmanaged +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparIsValueType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparSubtypeOfType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparSupportsMember +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparSupportsNull +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparDefaultsToType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparIsComparable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparIsDelegate() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparIsEnum() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparIsEquatable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparIsReferenceType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparIsUnmanaged() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparIsValueType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparSubtypeOfType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparSupportsMember() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparSupportsNull() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: SynTypar get_typar() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: SynTypar typar +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: range range +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparDefaultsToType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparIsComparable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparIsDelegate +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparIsEnum +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparIsEquatable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparIsReferenceType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparIsUnmanaged +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparIsValueType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparSubtypeOfType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparSupportsMember +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparSupportsNull +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparDefaultsToType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparIsComparable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparIsDelegate() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparIsEnum() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparIsEquatable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparIsReferenceType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparIsUnmanaged() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparIsValueType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparSubtypeOfType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparSupportsMember() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparSupportsNull() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] get_typeArgs() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] typeArgs +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: SynTypar get_typar() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: SynTypar typar +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: range range +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparDefaultsToType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparIsComparable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparIsDelegate +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparIsEnum +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparIsEquatable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparIsReferenceType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparIsUnmanaged +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparIsValueType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparSubtypeOfType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparSupportsMember +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparSupportsNull +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparDefaultsToType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparIsComparable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparIsDelegate() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparIsEnum() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparIsEquatable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparIsReferenceType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparIsUnmanaged() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparIsValueType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparSubtypeOfType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparSupportsMember() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparSupportsNull() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] get_typeArgs() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] typeArgs +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: SynTypar get_typar() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: SynTypar typar +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: range range +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparDefaultsToType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparIsComparable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparIsDelegate +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparIsEnum +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparIsEquatable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparIsReferenceType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparIsUnmanaged +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparIsValueType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparSubtypeOfType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparSupportsMember +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparSupportsNull +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparDefaultsToType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparIsComparable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparIsDelegate() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparIsEnum() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparIsEquatable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparIsReferenceType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparIsUnmanaged() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparIsValueType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparSubtypeOfType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparSupportsMember() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparSupportsNull() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: SynTypar get_typar() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: SynTypar typar +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: range range +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparDefaultsToType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparIsComparable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparIsDelegate +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparIsEnum +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparIsEquatable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparIsReferenceType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparIsUnmanaged +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparIsValueType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparSubtypeOfType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparSupportsMember +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparSupportsNull +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparDefaultsToType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparIsComparable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparIsDelegate() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparIsEnum() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparIsEquatable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparIsReferenceType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparIsUnmanaged() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparIsValueType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparSubtypeOfType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparSupportsMember() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparSupportsNull() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: SynTypar get_typar() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: SynTypar typar +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: range range +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparDefaultsToType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparIsComparable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparIsDelegate +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparIsEnum +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparIsEquatable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparIsReferenceType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparIsUnmanaged +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparIsValueType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparSubtypeOfType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparSupportsMember +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparSupportsNull +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparDefaultsToType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparIsComparable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparIsDelegate() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparIsEnum() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparIsEquatable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparIsReferenceType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparIsUnmanaged() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparIsValueType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparSubtypeOfType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparSupportsMember() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparSupportsNull() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: SynTypar get_typar() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: SynTypar typar +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: range range +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparDefaultsToType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparIsComparable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparIsDelegate +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparIsEnum +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparIsEquatable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparIsReferenceType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparIsUnmanaged +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparIsValueType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparSubtypeOfType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparSupportsMember +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparSupportsNull +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparDefaultsToType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparIsComparable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparIsDelegate() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparIsEnum() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparIsEquatable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparIsReferenceType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparIsUnmanaged() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparIsValueType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparSubtypeOfType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparSupportsMember() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparSupportsNull() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: SynTypar get_typar() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: SynTypar typar +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: range range +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparDefaultsToType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparIsComparable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparIsDelegate +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparIsEnum +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparIsEquatable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparIsReferenceType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparIsUnmanaged +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparIsValueType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparSubtypeOfType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparSupportsMember +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparSupportsNull +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparDefaultsToType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparIsComparable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparIsDelegate() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparIsEnum() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparIsEquatable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparIsReferenceType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparIsUnmanaged() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparIsValueType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparSubtypeOfType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparSupportsMember() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparSupportsNull() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: SynTypar get_typar() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: SynTypar typar +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: SynType get_typeName() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: SynType typeName +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: range range +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparDefaultsToType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparIsComparable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparIsDelegate +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparIsEnum +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparIsEquatable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparIsReferenceType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparIsUnmanaged +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparIsValueType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparSubtypeOfType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparSupportsMember +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparSupportsNull +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparDefaultsToType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparIsComparable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparIsDelegate() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparIsEnum() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparIsEquatable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparIsReferenceType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparIsUnmanaged() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparIsValueType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparSubtypeOfType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparSupportsMember() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparSupportsNull() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] get_typars() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] typars +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: SynMemberSig get_memberSig() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: SynMemberSig memberSig +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: range range +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparDefaultsToType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparIsComparable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparIsDelegate +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparIsEnum +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparIsEquatable +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparIsReferenceType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparIsUnmanaged +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparIsValueType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparSubtypeOfType +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparSupportsMember +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparSupportsNull +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparDefaultsToType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparIsComparable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparIsDelegate() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparIsEnum() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparIsEquatable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparIsReferenceType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparIsUnmanaged() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparIsValueType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparSubtypeOfType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparSupportsMember() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparSupportsNull() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: SynTypar get_typar() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: SynTypar typar +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: range range +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparDefaultsToType +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparIsComparable +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparIsDelegate +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparIsEnum +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparIsEquatable +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparIsReferenceType +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparIsUnmanaged +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparIsValueType +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparSubtypeOfType +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparSupportsMember +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparSupportsNull +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparDefaultsToType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparIsComparable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparIsDelegate() +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparIsEnum() +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparIsEquatable() +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparIsReferenceType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparIsUnmanaged() +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparIsValueType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparSubtypeOfType() +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparSupportsMember() +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparSupportsNull() +FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags +FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType +FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable +FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate +FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum +FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable +FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType +FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged +FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType +FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType +FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember +FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeConstraint: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparDefaultsToType(SynTypar, SynType, range) +FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparIsComparable(SynTypar, range) +FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparIsDelegate(SynTypar, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType], range) +FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparIsEnum(SynTypar, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType], range) +FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparIsEquatable(SynTypar, range) +FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparIsReferenceType(SynTypar, range) +FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparIsUnmanaged(SynTypar, range) +FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparIsValueType(SynTypar, range) +FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparSubtypeOfType(SynTypar, SynType, range) +FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparSupportsMember(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType], SynMemberSig, range) +FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparSupportsNull(SynTypar, range) +FSharp.Compiler.SyntaxTree+SynTypeConstraint: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefn: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeDefn: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeDefn: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn] get_members() +FSharp.Compiler.SyntaxTree+SynTypeDefn: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn] members +FSharp.Compiler.SyntaxTree+SynTypeDefn: SynComponentInfo get_typeInfo() +FSharp.Compiler.SyntaxTree+SynTypeDefn: SynComponentInfo typeInfo +FSharp.Compiler.SyntaxTree+SynTypeDefn: SynTypeDefn NewTypeDefn(SynComponentInfo, SynTypeDefnRepr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn], range) +FSharp.Compiler.SyntaxTree+SynTypeDefn: SynTypeDefnRepr get_typeRepr() +FSharp.Compiler.SyntaxTree+SynTypeDefn: SynTypeDefnRepr typeRepr +FSharp.Compiler.SyntaxTree+SynTypeDefn: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefn: range Range +FSharp.Compiler.SyntaxTree+SynTypeDefn: range get_Range() +FSharp.Compiler.SyntaxTree+SynTypeDefn: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeDefn: range range +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconAbbrev +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconAugmentation +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconClass +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconDelegate +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconHiddenRepr +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconILAssemblyCode +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconInterface +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconRecord +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconStruct +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconUnion +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconUnspecified +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconAbbrev +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconAugmentation +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconClass +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconDelegate +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconHiddenRepr +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconILAssemblyCode +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconInterface +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconRecord +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconStruct +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconUnion +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconUnspecified +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconAbbrev() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconAugmentation() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconClass() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconDelegate() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconHiddenRepr() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconILAssemblyCode() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconInterface() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconRecord() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconStruct() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconUnion() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconUnspecified() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: SynType Item1 +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: SynType get_Item1() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: SynValInfo Item2 +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: SynValInfo get_Item2() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconAbbrev +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconAugmentation +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconClass +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconDelegate +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconHiddenRepr +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconILAssemblyCode +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconInterface +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconRecord +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconStruct +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconUnion +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconUnspecified +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconAbbrev() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconAugmentation() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconClass() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconDelegate() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconHiddenRepr() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconILAssemblyCode() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconInterface() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconRecord() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconStruct() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconUnion() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconUnspecified() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind NewTyconDelegate(SynType, SynValInfo) +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind TyconAbbrev +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind TyconAugmentation +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind TyconClass +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind TyconHiddenRepr +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind TyconILAssemblyCode +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind TyconInterface +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind TyconRecord +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind TyconStruct +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind TyconUnion +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind TyconUnspecified +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind get_TyconAbbrev() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind get_TyconAugmentation() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind get_TyconClass() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind get_TyconHiddenRepr() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind get_TyconILAssemblyCode() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind get_TyconInterface() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind get_TyconRecord() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind get_TyconStruct() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind get_TyconUnion() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind get_TyconUnspecified() +FSharp.Compiler.SyntaxTree+SynTypeDefnKind: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: Boolean IsException +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: Boolean IsObjectModel +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: Boolean IsSimple +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: Boolean get_IsObjectModel() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: Boolean get_IsSimple() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: SynExceptionDefnRepr exnRepr +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: SynExceptionDefnRepr get_exnRepr() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: range Range +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: range get_Range() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: Boolean IsException +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: Boolean IsObjectModel +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: Boolean IsSimple +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: Boolean get_IsObjectModel() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: Boolean get_IsSimple() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn] get_members() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn] members +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: SynTypeDefnKind get_kind() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: SynTypeDefnKind kind +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: range Range +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: range get_Range() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: range range +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: Boolean IsException +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: Boolean IsObjectModel +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: Boolean IsSimple +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: Boolean get_IsObjectModel() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: Boolean get_IsSimple() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: SynTypeDefnSimpleRepr get_simpleRepr() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: SynTypeDefnSimpleRepr simpleRepr +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: range Range +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: range get_Range() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: range range +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Tags: Int32 Exception +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Tags: Int32 ObjectModel +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Tags: Int32 Simple +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: Boolean IsException +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: Boolean IsObjectModel +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: Boolean IsSimple +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: Boolean get_IsObjectModel() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: Boolean get_IsSimple() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Tags +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: SynTypeDefnRepr NewException(SynExceptionDefnRepr) +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: SynTypeDefnRepr NewObjectModel(SynTypeDefnKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn], range) +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: SynTypeDefnRepr NewSimple(SynTypeDefnSimpleRepr, range) +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: range Range +FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: range get_Range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSig: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeDefnSig: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeDefnSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberSig] Item3 +FSharp.Compiler.SyntaxTree+SynTypeDefnSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberSig] get_Item3() +FSharp.Compiler.SyntaxTree+SynTypeDefnSig: SynComponentInfo Item1 +FSharp.Compiler.SyntaxTree+SynTypeDefnSig: SynComponentInfo get_Item1() +FSharp.Compiler.SyntaxTree+SynTypeDefnSig: SynTypeDefnSig NewTypeDefnSig(SynComponentInfo, SynTypeDefnSigRepr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberSig], range) +FSharp.Compiler.SyntaxTree+SynTypeDefnSig: SynTypeDefnSigRepr Item2 +FSharp.Compiler.SyntaxTree+SynTypeDefnSig: SynTypeDefnSigRepr get_Item2() +FSharp.Compiler.SyntaxTree+SynTypeDefnSig: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefnSig: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSig: range range +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: Boolean IsException +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: Boolean IsObjectModel +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: Boolean IsSimple +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: Boolean get_IsObjectModel() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: Boolean get_IsSimple() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: SynExceptionDefnRepr Item +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: SynExceptionDefnRepr get_Item() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: range Range +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: range get_Range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: Boolean IsException +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: Boolean IsObjectModel +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: Boolean IsSimple +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: Boolean get_IsObjectModel() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: Boolean get_IsSimple() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberSig] get_memberSigs() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberSig] memberSigs +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: SynTypeDefnKind get_kind() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: SynTypeDefnKind kind +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: range Range +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: range get_Range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: range range +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: Boolean IsException +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: Boolean IsObjectModel +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: Boolean IsSimple +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: Boolean get_IsObjectModel() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: Boolean get_IsSimple() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: SynTypeDefnSimpleRepr get_repr() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: SynTypeDefnSimpleRepr repr +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: range Range +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: range get_Range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: range range +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Tags: Int32 Exception +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Tags: Int32 ObjectModel +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Tags: Int32 Simple +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: Boolean IsException +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: Boolean IsObjectModel +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: Boolean IsSimple +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: Boolean get_IsObjectModel() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: Boolean get_IsSimple() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Tags +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: SynTypeDefnSigRepr NewException(SynExceptionDefnRepr) +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: SynTypeDefnSigRepr NewObjectModel(SynTypeDefnKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberSig], range) +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: SynTypeDefnSigRepr NewSimple(SynTypeDefnSimpleRepr, range) +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: range Range +FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: range get_Range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean IsEnum +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean IsException +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean IsGeneral +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean IsNone +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean IsTypeAbbrev +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean IsUnion +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean get_IsEnum() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean get_IsGeneral() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean get_IsNone() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean get_IsTypeAbbrev() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean get_IsUnion() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynEnumCase] cases +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynEnumCase] get_cases() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: range Range +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: range get_Range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: range range +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean IsEnum +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean IsException +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean IsGeneral +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean IsNone +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean IsTypeAbbrev +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean IsUnion +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean get_IsEnum() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean get_IsGeneral() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean get_IsNone() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean get_IsTypeAbbrev() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean get_IsUnion() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: SynExceptionDefnRepr exnRepr +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: SynExceptionDefnRepr get_exnRepr() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: range Range +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: range get_Range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean IsEnum +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean IsException +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean IsGeneral +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean IsNone +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean IsTypeAbbrev +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean IsUnion +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean get_IsEnum() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean get_IsGeneral() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean get_IsNone() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean get_IsTypeAbbrev() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean get_IsUnion() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean get_isConcrete() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean get_isIncrClass() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean isConcrete +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean isIncrClass +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynField] fields +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynField] get_fields() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynValSig,FSharp.Compiler.SyntaxTree+MemberFlags]] get_slotsigs() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynValSig,FSharp.Compiler.SyntaxTree+MemberFlags]] slotsigs +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.SyntaxTree+SynType,FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]]] get_inherits() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.SyntaxTree+SynType,FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]]] inherits +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynSimplePats] get_implicitCtorSynPats() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynSimplePats] implicitCtorSynPats +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: SynTypeDefnKind get_kind() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: SynTypeDefnKind kind +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: range Range +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: range get_Range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: range range +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean IsEnum +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean IsException +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean IsGeneral +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean IsNone +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean IsTypeAbbrev +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean IsUnion +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean get_IsEnum() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean get_IsGeneral() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean get_IsNone() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean get_IsTypeAbbrev() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean get_IsUnion() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: ILType get_ilType() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: ILType ilType +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: range Range +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: range get_Range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: range range +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean IsEnum +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean IsException +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean IsGeneral +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean IsNone +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean IsTypeAbbrev +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean IsUnion +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean get_IsEnum() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean get_IsGeneral() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean get_IsNone() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean get_IsTypeAbbrev() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean get_IsUnion() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: range Range +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: range get_Range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: range range +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean IsEnum +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean IsException +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean IsGeneral +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean IsNone +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean IsTypeAbbrev +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean IsUnion +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean get_IsEnum() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean get_IsGeneral() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean get_IsNone() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean get_IsTypeAbbrev() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean get_IsUnion() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynField] get_recordFields() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynField] recordFields +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: range Range +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: range get_Range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: range range +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Tags: Int32 Enum +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Tags: Int32 Exception +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Tags: Int32 General +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Tags: Int32 LibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Tags: Int32 None +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Tags: Int32 Record +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Tags: Int32 TypeAbbrev +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Tags: Int32 Union +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean IsEnum +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean IsException +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean IsGeneral +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean IsNone +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean IsTypeAbbrev +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean IsUnion +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean get_IsEnum() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean get_IsGeneral() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean get_IsNone() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean get_IsTypeAbbrev() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean get_IsUnion() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: ParserDetail detail +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: ParserDetail get_detail() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: SynType get_rhsType() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: SynType rhsType +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: range Range +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: range get_Range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: range range +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean IsEnum +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean IsException +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean IsGeneral +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean IsNone +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean IsTypeAbbrev +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean IsUnion +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean get_IsEnum() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean get_IsGeneral() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean get_IsNone() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean get_IsTypeAbbrev() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean get_IsUnion() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynUnionCase] get_unionCases() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynUnionCase] unionCases +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: range Range +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: range get_Range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: range get_range() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: range range +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean IsEnum +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean IsException +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean IsGeneral +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean IsNone +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean IsRecord +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean IsTypeAbbrev +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean IsUnion +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean get_IsEnum() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean get_IsException() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean get_IsGeneral() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean get_IsNone() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean get_IsRecord() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean get_IsTypeAbbrev() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean get_IsUnion() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Tags +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Int32 Tag +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: SynTypeDefnSimpleRepr NewEnum(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynEnumCase], range) +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: SynTypeDefnSimpleRepr NewException(SynExceptionDefnRepr) +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: SynTypeDefnSimpleRepr NewGeneral(SynTypeDefnKind, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.SyntaxTree+SynType,FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynValSig,FSharp.Compiler.SyntaxTree+MemberFlags]], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynField], Boolean, Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynSimplePats], range) +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: SynTypeDefnSimpleRepr NewLibraryOnlyILAssembly(ILType, range) +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: SynTypeDefnSimpleRepr NewNone(range) +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: SynTypeDefnSimpleRepr NewRecord(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynField], range) +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: SynTypeDefnSimpleRepr NewTypeAbbrev(ParserDetail, SynType, range) +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: SynTypeDefnSimpleRepr NewUnion(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynUnionCase], range) +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: System.String ToString() +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: range Range +FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: range get_Range() +FSharp.Compiler.SyntaxTree+SynUnionCase: Ident get_ident() +FSharp.Compiler.SyntaxTree+SynUnionCase: Ident ident +FSharp.Compiler.SyntaxTree+SynUnionCase: Int32 Tag +FSharp.Compiler.SyntaxTree+SynUnionCase: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynUnionCase: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes +FSharp.Compiler.SyntaxTree+SynUnionCase: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() +FSharp.Compiler.SyntaxTree+SynUnionCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility +FSharp.Compiler.SyntaxTree+SynUnionCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() +FSharp.Compiler.SyntaxTree+SynUnionCase: PreXmlDoc get_xmlDoc() +FSharp.Compiler.SyntaxTree+SynUnionCase: PreXmlDoc xmlDoc +FSharp.Compiler.SyntaxTree+SynUnionCase: SynUnionCase NewUnionCase(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Ident, SynUnionCaseType, PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) +FSharp.Compiler.SyntaxTree+SynUnionCase: SynUnionCaseType caseType +FSharp.Compiler.SyntaxTree+SynUnionCase: SynUnionCaseType get_caseType() +FSharp.Compiler.SyntaxTree+SynUnionCase: System.String ToString() +FSharp.Compiler.SyntaxTree+SynUnionCase: range Range +FSharp.Compiler.SyntaxTree+SynUnionCase: range get_Range() +FSharp.Compiler.SyntaxTree+SynUnionCase: range get_range() +FSharp.Compiler.SyntaxTree+SynUnionCase: range range +FSharp.Compiler.SyntaxTree+SynUnionCaseType+Tags: Int32 UnionCaseFields +FSharp.Compiler.SyntaxTree+SynUnionCaseType+Tags: Int32 UnionCaseFullType +FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFields: Boolean IsUnionCaseFields +FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFields: Boolean IsUnionCaseFullType +FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFields: Boolean get_IsUnionCaseFields() +FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFields: Boolean get_IsUnionCaseFullType() +FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFields: Int32 Tag +FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFields: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFields: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynField] cases +FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFields: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynField] get_cases() +FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFields: System.String ToString() +FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: Boolean IsUnionCaseFields +FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: Boolean IsUnionCaseFullType +FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: Boolean get_IsUnionCaseFields() +FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: Boolean get_IsUnionCaseFullType() +FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: Int32 Tag +FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: SynType Item1 +FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: SynType get_Item1() +FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: SynValInfo Item2 +FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: SynValInfo get_Item2() +FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: System.String ToString() +FSharp.Compiler.SyntaxTree+SynUnionCaseType: Boolean IsUnionCaseFields +FSharp.Compiler.SyntaxTree+SynUnionCaseType: Boolean IsUnionCaseFullType +FSharp.Compiler.SyntaxTree+SynUnionCaseType: Boolean get_IsUnionCaseFields() +FSharp.Compiler.SyntaxTree+SynUnionCaseType: Boolean get_IsUnionCaseFullType() +FSharp.Compiler.SyntaxTree+SynUnionCaseType: FSharp.Compiler.SyntaxTree+SynUnionCaseType+Tags +FSharp.Compiler.SyntaxTree+SynUnionCaseType: FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFields +FSharp.Compiler.SyntaxTree+SynUnionCaseType: FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType +FSharp.Compiler.SyntaxTree+SynUnionCaseType: Int32 Tag +FSharp.Compiler.SyntaxTree+SynUnionCaseType: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynUnionCaseType: SynUnionCaseType NewUnionCaseFields(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynField]) +FSharp.Compiler.SyntaxTree+SynUnionCaseType: SynUnionCaseType NewUnionCaseFullType(SynType, SynValInfo) +FSharp.Compiler.SyntaxTree+SynUnionCaseType: System.String ToString() +FSharp.Compiler.SyntaxTree+SynValData: Int32 Tag +FSharp.Compiler.SyntaxTree+SynValData: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynValData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] Item3 +FSharp.Compiler.SyntaxTree+SynValData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_Item3() +FSharp.Compiler.SyntaxTree+SynValData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+MemberFlags] Item1 +FSharp.Compiler.SyntaxTree+SynValData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+MemberFlags] get_Item1() +FSharp.Compiler.SyntaxTree+SynValData: SynValData NewSynValData(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+MemberFlags], SynValInfo, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]) +FSharp.Compiler.SyntaxTree+SynValData: SynValInfo Item2 +FSharp.Compiler.SyntaxTree+SynValData: SynValInfo SynValInfo +FSharp.Compiler.SyntaxTree+SynValData: SynValInfo get_Item2() +FSharp.Compiler.SyntaxTree+SynValData: SynValInfo get_SynValInfo() +FSharp.Compiler.SyntaxTree+SynValData: System.String ToString() +FSharp.Compiler.SyntaxTree+SynValInfo: Int32 Tag +FSharp.Compiler.SyntaxTree+SynValInfo: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] CurriedArgInfos +FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] curriedArgInfos +FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] get_CurriedArgInfos() +FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] get_curriedArgInfos() +FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[System.String] ArgNames +FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_ArgNames() +FSharp.Compiler.SyntaxTree+SynValInfo: SynArgInfo get_returnInfo() +FSharp.Compiler.SyntaxTree+SynValInfo: SynArgInfo returnInfo +FSharp.Compiler.SyntaxTree+SynValInfo: SynValInfo NewSynValInfo(Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]], SynArgInfo) +FSharp.Compiler.SyntaxTree+SynValInfo: System.String ToString() +FSharp.Compiler.SyntaxTree+SynValSig: Boolean get_isInline() +FSharp.Compiler.SyntaxTree+SynValSig: Boolean get_isMutable() +FSharp.Compiler.SyntaxTree+SynValSig: Boolean isInline +FSharp.Compiler.SyntaxTree+SynValSig: Boolean isMutable +FSharp.Compiler.SyntaxTree+SynValSig: Ident get_ident() +FSharp.Compiler.SyntaxTree+SynValSig: Ident ident +FSharp.Compiler.SyntaxTree+SynValSig: Int32 Tag +FSharp.Compiler.SyntaxTree+SynValSig: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynValSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes +FSharp.Compiler.SyntaxTree+SynValSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() +FSharp.Compiler.SyntaxTree+SynValSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility +FSharp.Compiler.SyntaxTree+SynValSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() +FSharp.Compiler.SyntaxTree+SynValSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr] get_synExpr() +FSharp.Compiler.SyntaxTree+SynValSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr] synExpr +FSharp.Compiler.SyntaxTree+SynValSig: PreXmlDoc get_xmlDoc() +FSharp.Compiler.SyntaxTree+SynValSig: PreXmlDoc xmlDoc +FSharp.Compiler.SyntaxTree+SynValSig: SynType SynType +FSharp.Compiler.SyntaxTree+SynValSig: SynType get_SynType() +FSharp.Compiler.SyntaxTree+SynValSig: SynType get_synType() +FSharp.Compiler.SyntaxTree+SynValSig: SynType synType +FSharp.Compiler.SyntaxTree+SynValSig: SynValInfo SynInfo +FSharp.Compiler.SyntaxTree+SynValSig: SynValInfo arity +FSharp.Compiler.SyntaxTree+SynValSig: SynValInfo get_SynInfo() +FSharp.Compiler.SyntaxTree+SynValSig: SynValInfo get_arity() +FSharp.Compiler.SyntaxTree+SynValSig: SynValSig NewValSpfn(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Ident, SynValTyparDecls, SynType, SynValInfo, Boolean, Boolean, PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr], range) +FSharp.Compiler.SyntaxTree+SynValSig: SynValTyparDecls explicitValDecls +FSharp.Compiler.SyntaxTree+SynValSig: SynValTyparDecls get_explicitValDecls() +FSharp.Compiler.SyntaxTree+SynValSig: System.String ToString() +FSharp.Compiler.SyntaxTree+SynValSig: range RangeOfId +FSharp.Compiler.SyntaxTree+SynValSig: range get_RangeOfId() +FSharp.Compiler.SyntaxTree+SynValSig: range get_range() +FSharp.Compiler.SyntaxTree+SynValSig: range range +FSharp.Compiler.SyntaxTree+SynValTyparDecls: Boolean canInfer +FSharp.Compiler.SyntaxTree+SynValTyparDecls: Boolean get_canInfer() +FSharp.Compiler.SyntaxTree+SynValTyparDecls: Int32 Tag +FSharp.Compiler.SyntaxTree+SynValTyparDecls: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+SynValTyparDecls: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTyparDecl] get_typars() +FSharp.Compiler.SyntaxTree+SynValTyparDecls: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTyparDecl] typars +FSharp.Compiler.SyntaxTree+SynValTyparDecls: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeConstraint] constraints +FSharp.Compiler.SyntaxTree+SynValTyparDecls: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeConstraint] get_constraints() +FSharp.Compiler.SyntaxTree+SynValTyparDecls: SynValTyparDecls NewSynValTyparDecls(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTyparDecl], Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeConstraint]) +FSharp.Compiler.SyntaxTree+SynValTyparDecls: System.String ToString() +FSharp.Compiler.SyntaxTree+TyparStaticReq+Tags: Int32 HeadTypeStaticReq +FSharp.Compiler.SyntaxTree+TyparStaticReq+Tags: Int32 NoStaticReq +FSharp.Compiler.SyntaxTree+TyparStaticReq: Boolean Equals(System.Object) +FSharp.Compiler.SyntaxTree+TyparStaticReq: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+TyparStaticReq: Boolean Equals(TyparStaticReq) +FSharp.Compiler.SyntaxTree+TyparStaticReq: Boolean IsHeadTypeStaticReq +FSharp.Compiler.SyntaxTree+TyparStaticReq: Boolean IsNoStaticReq +FSharp.Compiler.SyntaxTree+TyparStaticReq: Boolean get_IsHeadTypeStaticReq() +FSharp.Compiler.SyntaxTree+TyparStaticReq: Boolean get_IsNoStaticReq() +FSharp.Compiler.SyntaxTree+TyparStaticReq: FSharp.Compiler.SyntaxTree+TyparStaticReq+Tags +FSharp.Compiler.SyntaxTree+TyparStaticReq: Int32 CompareTo(System.Object) +FSharp.Compiler.SyntaxTree+TyparStaticReq: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SyntaxTree+TyparStaticReq: Int32 CompareTo(TyparStaticReq) +FSharp.Compiler.SyntaxTree+TyparStaticReq: Int32 GetHashCode() +FSharp.Compiler.SyntaxTree+TyparStaticReq: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SyntaxTree+TyparStaticReq: Int32 Tag +FSharp.Compiler.SyntaxTree+TyparStaticReq: Int32 get_Tag() +FSharp.Compiler.SyntaxTree+TyparStaticReq: System.String ToString() +FSharp.Compiler.SyntaxTree+TyparStaticReq: TyparStaticReq HeadTypeStaticReq +FSharp.Compiler.SyntaxTree+TyparStaticReq: TyparStaticReq NoStaticReq +FSharp.Compiler.SyntaxTree+TyparStaticReq: TyparStaticReq get_HeadTypeStaticReq() +FSharp.Compiler.SyntaxTree+TyparStaticReq: TyparStaticReq get_NoStaticReq() +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+DebugPointAtFinally +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+DebugPointAtFor +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+DebugPointAtSequential +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+DebugPointAtTry +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+DebugPointAtWhile +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+DebugPointAtWith +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+DebugPointForBinding +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+DebugPointForTarget +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ExprAtomicFlag +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+Ident +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+LongIdentWithDots +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+MemberFlags +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+MemberKind +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ParsedFsiInteraction +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ParsedHashDirective +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ParsedImplFile +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ParsedImplFileFragment +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ParsedImplFileInput +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ParsedInput +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ParsedSigFile +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ParsedSigFileFragment +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ParsedSigFileInput +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ParserDetail +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+QualifiedNameOfFile +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ScopedPragma +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SeqExprOnly +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynAccess +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynArgInfo +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynArgPats +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynAttribute +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynAttributeList +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynBinding +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynBindingKind +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynBindingReturnInfo +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynComponentInfo +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynConst +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynEnumCase +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynExceptionDefn +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynExceptionSig +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynExpr +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynField +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynIndexerArg +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynInterfaceImpl +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynMatchClause +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynMeasure +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynMemberDefn +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynMemberSig +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynModuleDecl +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynModuleOrNamespace +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynModuleSigDecl +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynOpenDeclTarget +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynPat +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynRationalConst +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynReturnInfo +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynSimplePat +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynSimplePats +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynTypar +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynTyparDecl +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynType +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynTypeConstraint +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynTypeDefn +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynTypeDefnKind +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynTypeDefnRepr +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynTypeDefnSig +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynUnionCase +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynUnionCaseType +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynValData +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynValInfo +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynValSig +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynValTyparDecls +FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+TyparStaticReq +FSharp.Compiler.SyntaxTreeOps+SynArgNameGenerator: System.String New() +FSharp.Compiler.SyntaxTreeOps+SynArgNameGenerator: Void .ctor() +FSharp.Compiler.SyntaxTreeOps+SynArgNameGenerator: Void Reset() +FSharp.Compiler.SyntaxTreeOps+SynInfo: Boolean HasNoArgs(SynValInfo) +FSharp.Compiler.SyntaxTreeOps+SynInfo: Boolean HasOptionalArgs(SynValInfo) +FSharp.Compiler.SyntaxTreeOps+SynInfo: Boolean IsOptionalArg(SynArgInfo) +FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo] InferSynArgInfoFromPat(SynPat) +FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo] InferSynArgInfoFromSimplePats(SynSimplePats) +FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo] get_selfMetadata() +FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo] get_unitArgData() +FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo] get_unnamedTopArg() +FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo] selfMetadata +FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo] unitArgData +FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo] unnamedTopArg +FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttribute] AttribsOfArgData(SynArgInfo) +FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] AdjustArgsForUnitElimination(Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]]) +FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] InferLambdaArgs(SynExpr) +FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[a]] AdjustMemberArgs[a](MemberKind, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[a]]) +FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] AritiesOfArgs(SynValInfo) +FSharp.Compiler.SyntaxTreeOps+SynInfo: SynArgInfo InferSynArgInfoFromSimplePat(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], SynSimplePat) +FSharp.Compiler.SyntaxTreeOps+SynInfo: SynArgInfo InferSynReturnData(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynReturnInfo]) +FSharp.Compiler.SyntaxTreeOps+SynInfo: SynArgInfo get_unnamedRetVal() +FSharp.Compiler.SyntaxTreeOps+SynInfo: SynArgInfo get_unnamedTopArg1() +FSharp.Compiler.SyntaxTreeOps+SynInfo: SynArgInfo unnamedRetVal +FSharp.Compiler.SyntaxTreeOps+SynInfo: SynArgInfo unnamedTopArg1 +FSharp.Compiler.SyntaxTreeOps+SynInfo: SynValData InferSynValData(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+MemberFlags], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynPat], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynReturnInfo], SynExpr) +FSharp.Compiler.SyntaxTreeOps+SynInfo: SynValData emptySynValData +FSharp.Compiler.SyntaxTreeOps+SynInfo: SynValData get_emptySynValData() +FSharp.Compiler.SyntaxTreeOps+SynInfo: SynValInfo IncorporateEmptyTupledArgForPropertyGetter(SynValInfo) +FSharp.Compiler.SyntaxTreeOps+SynInfo: SynValInfo IncorporateSelfArg(SynValInfo) +FSharp.Compiler.SyntaxTreeOps+SynInfo: SynValInfo IncorporateSetterArg(SynValInfo) +FSharp.Compiler.SyntaxTreeOps: Boolean IsControlFlowExpression(SynExpr) +FSharp.Compiler.SyntaxTreeOps: Boolean synExprContainsError(SynExpr) +FSharp.Compiler.SyntaxTreeOps: FSharp.Compiler.SyntaxTreeOps+SynArgNameGenerator +FSharp.Compiler.SyntaxTreeOps: FSharp.Compiler.SyntaxTreeOps+SynInfo +FSharp.Compiler.SyntaxTreeOps: Ident ident(System.String, range) +FSharp.Compiler.SyntaxTreeOps: Ident mkSynId(range, System.String) +FSharp.Compiler.SyntaxTreeOps: MemberFlags AbstractMemberFlags(MemberKind) +FSharp.Compiler.SyntaxTreeOps: MemberFlags ClassCtorMemberFlags +FSharp.Compiler.SyntaxTreeOps: MemberFlags CtorMemberFlags +FSharp.Compiler.SyntaxTreeOps: MemberFlags NonVirtualMemberFlags(MemberKind) +FSharp.Compiler.SyntaxTreeOps: MemberFlags OverrideMemberFlags(MemberKind) +FSharp.Compiler.SyntaxTreeOps: MemberFlags StaticMemberFlags(MemberKind) +FSharp.Compiler.SyntaxTreeOps: MemberFlags get_ClassCtorMemberFlags() +FSharp.Compiler.SyntaxTreeOps: MemberFlags get_CtorMemberFlags() +FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] mkSynCaseName(range, System.String) +FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] pathToSynLid(range, Microsoft.FSharp.Collections.FSharpList`1[System.String]) +FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] mkAttributeList(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttribute], range) +FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttribute] ConcatAttributesLists(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList]) +FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttribute] |Attributes|(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList]) +FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Collections.FSharpList`1[System.String] pathOfLid(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident]) +FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] |SingleIdent|_|(SynExpr) +FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynPat] |SynPatForConstructorDecl|_|(SynPat) +FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[a,a]] composeFunOpt[a](Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[a,a]], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[a,a]]) +FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |SynPatForNullaryArgs|_|(SynPat) +FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[FSharp.Compiler.SyntaxTree+SynExpr,FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range],FSharp.Compiler.Range+range]] |SynExprParen|_|(SynExpr) +FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[System.Boolean,FSharp.Compiler.SyntaxTree+LongIdentWithDots,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo]],FSharp.Compiler.Range+range]] |LongOrSingleIdent|_|(SynExpr) +FSharp.Compiler.SyntaxTreeOps: SynBinding mkSynBinding(PreXmlDoc, SynPat, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], Boolean, Boolean, range, DebugPointForBinding, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynReturnInfo], SynExpr, range, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint],FSharp.Compiler.SyntaxTree+SynExpr]], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+MemberFlags]) +FSharp.Compiler.SyntaxTreeOps: SynExpr arbExpr(System.String, range) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynApp1(SynExpr, SynExpr, range) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynApp2(SynExpr, SynExpr, SynExpr, range) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynApp3(SynExpr, SynExpr, SynExpr, SynExpr, range) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynApp4(SynExpr, SynExpr, SynExpr, SynExpr, SynExpr, range) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynApp5(SynExpr, SynExpr, SynExpr, SynExpr, SynExpr, SynExpr, range) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynAssign(SynExpr, SynExpr) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynBifix(range, System.String, SynExpr, SynExpr) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynDelay(range, SynExpr) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynDot(range, range, SynExpr, Ident) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynDotBrackGet(range, range, SynExpr, SynExpr, Boolean) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynDotBrackSeqSliceGet(range, range, SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynIndexerArg]) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynDotBrackSliceGet(range, range, SynExpr, SynIndexerArg) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynDotMissing(range, range, SynExpr) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynDotParenGet(range, range, SynExpr, SynExpr) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynDotParenSet(range, SynExpr, SynExpr, SynExpr) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynFunMatchLambdas(SynArgNameGenerator, Boolean, range, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat], SynExpr) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynIdGet(range, System.String) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynIdGetWithAlt(range, Ident, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo]]) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynInfix(range, SynExpr, System.String, SynExpr) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynLidGet(range, Microsoft.FSharp.Collections.FSharpList`1[System.String], System.String) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynOperator(range, System.String) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynPrefix(range, range, System.String, SynExpr) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynPrefixPrim(range, range, System.String, SynExpr) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynQMarkSet(range, SynExpr, SynExpr, SynExpr) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynTrifix(range, System.String, SynExpr, SynExpr, SynExpr) +FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynUnit(range) +FSharp.Compiler.SyntaxTreeOps: SynExpr |SynExprErrorSkip|(SynExpr) +FSharp.Compiler.SyntaxTreeOps: SynField mkAnonField(SynType) +FSharp.Compiler.SyntaxTreeOps: SynField mkNamedField(Ident, SynType, range) +FSharp.Compiler.SyntaxTreeOps: SynPat mkSynPatMaybeVar(LongIdentWithDots, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) +FSharp.Compiler.SyntaxTreeOps: SynPat mkSynPatVar(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], Ident) +FSharp.Compiler.SyntaxTreeOps: SynPat mkSynThisPatVar(Ident) +FSharp.Compiler.SyntaxTreeOps: SynPat mkSynUnitPat(range) +FSharp.Compiler.SyntaxTreeOps: SynPat |SynPatErrorSkip|(SynPat) +FSharp.Compiler.SyntaxTreeOps: SynSimplePat mkSynCompGenSimplePatVar(Ident) +FSharp.Compiler.SyntaxTreeOps: SynSimplePat mkSynSimplePatVar(Boolean, Ident) +FSharp.Compiler.SyntaxTreeOps: SynType stripParenTypes(SynType) +FSharp.Compiler.SyntaxTreeOps: SynType |StripParenTypes|(SynType) +FSharp.Compiler.SyntaxTreeOps: SynValTyparDecls get_inferredTyparDecls() +FSharp.Compiler.SyntaxTreeOps: SynValTyparDecls get_noInferredTypars() +FSharp.Compiler.SyntaxTreeOps: SynValTyparDecls inferredTyparDecls +FSharp.Compiler.SyntaxTreeOps: SynValTyparDecls noInferredTypars +FSharp.Compiler.SyntaxTreeOps: System.String get_opNameParenGet() +FSharp.Compiler.SyntaxTreeOps: System.String get_opNameQMark() +FSharp.Compiler.SyntaxTreeOps: System.String opNameParenGet +FSharp.Compiler.SyntaxTreeOps: System.String opNameQMark +FSharp.Compiler.SyntaxTreeOps: System.String textOfId(Ident) +FSharp.Compiler.SyntaxTreeOps: System.String textOfLid(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident]) +FSharp.Compiler.SyntaxTreeOps: System.String textOfPath(System.Collections.Generic.IEnumerable`1[System.String]) +FSharp.Compiler.SyntaxTreeOps: System.String[] arrPathOfLid(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident]) +FSharp.Compiler.SyntaxTreeOps: System.Tuple`2[FSharp.Compiler.SyntaxTree+SynExpr,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynBindingReturnInfo]] mkSynBindingRhs(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint],FSharp.Compiler.SyntaxTree+SynExpr]], SynExpr, range, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynReturnInfo]) +FSharp.Compiler.SyntaxTreeOps: System.Tuple`2[FSharp.Compiler.SyntaxTree+SynSimplePat,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynExpr,FSharp.Compiler.SyntaxTree+SynExpr]]] SimplePatOfPat(SynArgNameGenerator, SynPat) +FSharp.Compiler.SyntaxTreeOps: System.Tuple`2[FSharp.Compiler.SyntaxTree+SynSimplePats,FSharp.Compiler.SyntaxTree+SynExpr] PushPatternToExpr(SynArgNameGenerator, Boolean, SynPat, SynExpr) +FSharp.Compiler.SyntaxTreeOps: System.Tuple`2[FSharp.Compiler.SyntaxTree+SynSimplePats,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynExpr,FSharp.Compiler.SyntaxTree+SynExpr]]] SimplePatsOfPat(SynArgNameGenerator, SynPat) +FSharp.Compiler.SyntaxTreeOps: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynSimplePats],FSharp.Compiler.SyntaxTree+SynExpr] PushCurriedPatternsToExpr(SynArgNameGenerator, range, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat], SynExpr) +FSharp.Compiler.SyntaxTreeOps: a appFunOpt[a](Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[a,a]], a) +FSharp.Compiler.SyntaxTreeOps: range rangeOfLid(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident]) +FSharp.Compiler.SyntaxTreeOps: range rangeOfNonNilAttrs(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList]) +FSharp.Compiler.SyntaxTreeOps: range unionRangeWithListBy[a](Microsoft.FSharp.Core.FSharpFunc`2[a,FSharp.Compiler.Range+range], range, Microsoft.FSharp.Collections.FSharpList`1[a]) FSharp.Compiler.Text.ISourceText: Boolean ContentEquals(FSharp.Compiler.Text.ISourceText) FSharp.Compiler.Text.ISourceText: Boolean SubTextEquals(System.String, Int32) FSharp.Compiler.Text.ISourceText: Char Item [Int32] @@ -8915,1542 +41846,678 @@ FSharp.Compiler.Text.ISourceText: System.String GetLineString(Int32) FSharp.Compiler.Text.ISourceText: System.String GetSubTextString(Int32, Int32) FSharp.Compiler.Text.ISourceText: System.Tuple`2[System.Int32,System.Int32] GetLastCharacterPosition() FSharp.Compiler.Text.ISourceText: Void CopyTo(Int32, Char[], Int32, Int32) -FSharp.Compiler.Text.Line -FSharp.Compiler.Text.Line: Int32 fromZ(Int32) -FSharp.Compiler.Text.Line: Int32 toZ(Int32) -FSharp.Compiler.Text.NavigableTaggedText -FSharp.Compiler.Text.NavigableTaggedText: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Text.NavigableTaggedText: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Text.Position -FSharp.Compiler.Text.Position: Boolean Equals(System.Object) -FSharp.Compiler.Text.Position: Int32 Column -FSharp.Compiler.Text.Position: Int32 GetHashCode() -FSharp.Compiler.Text.Position: Int32 Line -FSharp.Compiler.Text.Position: Int32 get_Column() -FSharp.Compiler.Text.Position: Int32 get_Line() -FSharp.Compiler.Text.Position: System.String ToString() -FSharp.Compiler.Text.PositionModule -FSharp.Compiler.Text.PositionModule: Boolean posEq(FSharp.Compiler.Text.Position, FSharp.Compiler.Text.Position) -FSharp.Compiler.Text.PositionModule: Boolean posGeq(FSharp.Compiler.Text.Position, FSharp.Compiler.Text.Position) -FSharp.Compiler.Text.PositionModule: Boolean posGt(FSharp.Compiler.Text.Position, FSharp.Compiler.Text.Position) -FSharp.Compiler.Text.PositionModule: Boolean posLt(FSharp.Compiler.Text.Position, FSharp.Compiler.Text.Position) -FSharp.Compiler.Text.PositionModule: FSharp.Compiler.Text.Position fromZ(Int32, Int32) -FSharp.Compiler.Text.PositionModule: FSharp.Compiler.Text.Position get_pos0() -FSharp.Compiler.Text.PositionModule: FSharp.Compiler.Text.Position mkPos(Int32, Int32) -FSharp.Compiler.Text.PositionModule: FSharp.Compiler.Text.Position pos0 -FSharp.Compiler.Text.PositionModule: System.String stringOfPos(FSharp.Compiler.Text.Position) -FSharp.Compiler.Text.PositionModule: System.Tuple`2[System.Int32,System.Int32] toZ(FSharp.Compiler.Text.Position) -FSharp.Compiler.Text.PositionModule: Void outputPos(System.IO.TextWriter, FSharp.Compiler.Text.Position) -FSharp.Compiler.Text.Range -FSharp.Compiler.Text.Range: Boolean Equals(System.Object) -FSharp.Compiler.Text.Range: Boolean IsSynthetic -FSharp.Compiler.Text.Range: Boolean get_IsSynthetic() -FSharp.Compiler.Text.Range: FSharp.Compiler.Text.Position End -FSharp.Compiler.Text.Range: FSharp.Compiler.Text.Position Start -FSharp.Compiler.Text.Range: FSharp.Compiler.Text.Position get_End() -FSharp.Compiler.Text.Range: FSharp.Compiler.Text.Position get_Start() -FSharp.Compiler.Text.Range: FSharp.Compiler.Text.Range EndRange -FSharp.Compiler.Text.Range: FSharp.Compiler.Text.Range StartRange -FSharp.Compiler.Text.Range: FSharp.Compiler.Text.Range Zero -FSharp.Compiler.Text.Range: FSharp.Compiler.Text.Range get_EndRange() -FSharp.Compiler.Text.Range: FSharp.Compiler.Text.Range get_StartRange() -FSharp.Compiler.Text.Range: FSharp.Compiler.Text.Range get_Zero() -FSharp.Compiler.Text.Range: Int32 EndColumn -FSharp.Compiler.Text.Range: Int32 EndLine -FSharp.Compiler.Text.Range: Int32 GetHashCode() -FSharp.Compiler.Text.Range: Int32 StartColumn -FSharp.Compiler.Text.Range: Int32 StartLine -FSharp.Compiler.Text.Range: Int32 get_EndColumn() -FSharp.Compiler.Text.Range: Int32 get_EndLine() -FSharp.Compiler.Text.Range: Int32 get_StartColumn() -FSharp.Compiler.Text.Range: Int32 get_StartLine() -FSharp.Compiler.Text.Range: System.String FileName -FSharp.Compiler.Text.Range: System.String ToString() -FSharp.Compiler.Text.Range: System.String get_FileName() -FSharp.Compiler.Text.RangeModule -FSharp.Compiler.Text.RangeModule: Boolean equals(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) -FSharp.Compiler.Text.RangeModule: Boolean rangeBeforePos(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Position) -FSharp.Compiler.Text.RangeModule: Boolean rangeContainsPos(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Position) -FSharp.Compiler.Text.RangeModule: Boolean rangeContainsRange(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) -FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range get_range0() -FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range get_rangeCmdArgs() -FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range get_rangeStartup() -FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range mkFileIndexRange(Int32, FSharp.Compiler.Text.Position, FSharp.Compiler.Text.Position) -FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range mkFirstLineOfFile(System.String) -FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range mkRange(System.String, FSharp.Compiler.Text.Position, FSharp.Compiler.Text.Position) -FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range range0 -FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range rangeCmdArgs -FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range rangeN(System.String, Int32) -FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range rangeStartup -FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range trimRangeToLine(FSharp.Compiler.Text.Range) -FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range unionRanges(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) -FSharp.Compiler.Text.RangeModule: System.Collections.Generic.IComparer`1[FSharp.Compiler.Text.Position] get_posOrder() -FSharp.Compiler.Text.RangeModule: System.Collections.Generic.IComparer`1[FSharp.Compiler.Text.Position] posOrder -FSharp.Compiler.Text.RangeModule: System.Collections.Generic.IComparer`1[FSharp.Compiler.Text.Range] get_rangeOrder() -FSharp.Compiler.Text.RangeModule: System.Collections.Generic.IComparer`1[FSharp.Compiler.Text.Range] rangeOrder -FSharp.Compiler.Text.RangeModule: System.Collections.Generic.IEqualityComparer`1[FSharp.Compiler.Text.Range] comparer -FSharp.Compiler.Text.RangeModule: System.Collections.Generic.IEqualityComparer`1[FSharp.Compiler.Text.Range] get_comparer() -FSharp.Compiler.Text.RangeModule: System.String stringOfRange(FSharp.Compiler.Text.Range) -FSharp.Compiler.Text.RangeModule: System.Tuple`2[System.String,System.Tuple`2[System.Tuple`2[System.Int32,System.Int32],System.Tuple`2[System.Int32,System.Int32]]] toFileZ(FSharp.Compiler.Text.Range) -FSharp.Compiler.Text.RangeModule: System.Tuple`2[System.Tuple`2[System.Int32,System.Int32],System.Tuple`2[System.Int32,System.Int32]] toZ(FSharp.Compiler.Text.Range) -FSharp.Compiler.Text.RangeModule: Void outputRange(System.IO.TextWriter, FSharp.Compiler.Text.Range) -FSharp.Compiler.Text.SourceText FSharp.Compiler.Text.SourceText: FSharp.Compiler.Text.ISourceText ofString(System.String) -FSharp.Compiler.Text.TaggedText -FSharp.Compiler.Text.TaggedText: FSharp.Compiler.Text.TextTag Tag -FSharp.Compiler.Text.TaggedText: FSharp.Compiler.Text.TextTag get_Tag() -FSharp.Compiler.Text.TaggedText: System.String Text -FSharp.Compiler.Text.TaggedText: System.String ToString() -FSharp.Compiler.Text.TaggedText: System.String get_Text() -FSharp.Compiler.Text.TaggedText: Void .ctor(FSharp.Compiler.Text.TextTag, System.String) -FSharp.Compiler.Text.TaggedTextModule -FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText colon -FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText comma -FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText dot -FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText get_colon() -FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText get_comma() -FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText get_dot() -FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText get_lineBreak() -FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText get_minus() -FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText get_space() -FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText lineBreak -FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText minus -FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText space -FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText tagClass(System.String) -FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText tagNamespace(System.String) -FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText tagParameter(System.String) -FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText tagSpace(System.String) -FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText tagText(System.String) -FSharp.Compiler.Text.TextTag -FSharp.Compiler.Text.TextTag+Tags: Int32 ActivePatternCase -FSharp.Compiler.Text.TextTag+Tags: Int32 ActivePatternResult -FSharp.Compiler.Text.TextTag+Tags: Int32 Alias -FSharp.Compiler.Text.TextTag+Tags: Int32 Class -FSharp.Compiler.Text.TextTag+Tags: Int32 Delegate -FSharp.Compiler.Text.TextTag+Tags: Int32 Enum -FSharp.Compiler.Text.TextTag+Tags: Int32 Event -FSharp.Compiler.Text.TextTag+Tags: Int32 Field -FSharp.Compiler.Text.TextTag+Tags: Int32 Function -FSharp.Compiler.Text.TextTag+Tags: Int32 Interface -FSharp.Compiler.Text.TextTag+Tags: Int32 Keyword -FSharp.Compiler.Text.TextTag+Tags: Int32 LineBreak -FSharp.Compiler.Text.TextTag+Tags: Int32 Local -FSharp.Compiler.Text.TextTag+Tags: Int32 Member -FSharp.Compiler.Text.TextTag+Tags: Int32 Method -FSharp.Compiler.Text.TextTag+Tags: Int32 Module -FSharp.Compiler.Text.TextTag+Tags: Int32 ModuleBinding -FSharp.Compiler.Text.TextTag+Tags: Int32 Namespace -FSharp.Compiler.Text.TextTag+Tags: Int32 NumericLiteral -FSharp.Compiler.Text.TextTag+Tags: Int32 Operator -FSharp.Compiler.Text.TextTag+Tags: Int32 Parameter -FSharp.Compiler.Text.TextTag+Tags: Int32 Property -FSharp.Compiler.Text.TextTag+Tags: Int32 Punctuation -FSharp.Compiler.Text.TextTag+Tags: Int32 Record -FSharp.Compiler.Text.TextTag+Tags: Int32 RecordField -FSharp.Compiler.Text.TextTag+Tags: Int32 Space -FSharp.Compiler.Text.TextTag+Tags: Int32 StringLiteral -FSharp.Compiler.Text.TextTag+Tags: Int32 Struct -FSharp.Compiler.Text.TextTag+Tags: Int32 Text -FSharp.Compiler.Text.TextTag+Tags: Int32 TypeParameter -FSharp.Compiler.Text.TextTag+Tags: Int32 Union -FSharp.Compiler.Text.TextTag+Tags: Int32 UnionCase -FSharp.Compiler.Text.TextTag+Tags: Int32 UnknownEntity -FSharp.Compiler.Text.TextTag+Tags: Int32 UnknownType -FSharp.Compiler.Text.TextTag: Boolean Equals(FSharp.Compiler.Text.TextTag) -FSharp.Compiler.Text.TextTag: Boolean Equals(System.Object) -FSharp.Compiler.Text.TextTag: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Text.TextTag: Boolean IsActivePatternCase -FSharp.Compiler.Text.TextTag: Boolean IsActivePatternResult -FSharp.Compiler.Text.TextTag: Boolean IsAlias -FSharp.Compiler.Text.TextTag: Boolean IsClass -FSharp.Compiler.Text.TextTag: Boolean IsDelegate -FSharp.Compiler.Text.TextTag: Boolean IsEnum -FSharp.Compiler.Text.TextTag: Boolean IsEvent -FSharp.Compiler.Text.TextTag: Boolean IsField -FSharp.Compiler.Text.TextTag: Boolean IsFunction -FSharp.Compiler.Text.TextTag: Boolean IsInterface -FSharp.Compiler.Text.TextTag: Boolean IsKeyword -FSharp.Compiler.Text.TextTag: Boolean IsLineBreak -FSharp.Compiler.Text.TextTag: Boolean IsLocal -FSharp.Compiler.Text.TextTag: Boolean IsMember -FSharp.Compiler.Text.TextTag: Boolean IsMethod -FSharp.Compiler.Text.TextTag: Boolean IsModule -FSharp.Compiler.Text.TextTag: Boolean IsModuleBinding -FSharp.Compiler.Text.TextTag: Boolean IsNamespace -FSharp.Compiler.Text.TextTag: Boolean IsNumericLiteral -FSharp.Compiler.Text.TextTag: Boolean IsOperator -FSharp.Compiler.Text.TextTag: Boolean IsParameter -FSharp.Compiler.Text.TextTag: Boolean IsProperty -FSharp.Compiler.Text.TextTag: Boolean IsPunctuation -FSharp.Compiler.Text.TextTag: Boolean IsRecord -FSharp.Compiler.Text.TextTag: Boolean IsRecordField -FSharp.Compiler.Text.TextTag: Boolean IsSpace -FSharp.Compiler.Text.TextTag: Boolean IsStringLiteral -FSharp.Compiler.Text.TextTag: Boolean IsStruct -FSharp.Compiler.Text.TextTag: Boolean IsText -FSharp.Compiler.Text.TextTag: Boolean IsTypeParameter -FSharp.Compiler.Text.TextTag: Boolean IsUnion -FSharp.Compiler.Text.TextTag: Boolean IsUnionCase -FSharp.Compiler.Text.TextTag: Boolean IsUnknownEntity -FSharp.Compiler.Text.TextTag: Boolean IsUnknownType -FSharp.Compiler.Text.TextTag: Boolean get_IsActivePatternCase() -FSharp.Compiler.Text.TextTag: Boolean get_IsActivePatternResult() -FSharp.Compiler.Text.TextTag: Boolean get_IsAlias() -FSharp.Compiler.Text.TextTag: Boolean get_IsClass() -FSharp.Compiler.Text.TextTag: Boolean get_IsDelegate() -FSharp.Compiler.Text.TextTag: Boolean get_IsEnum() -FSharp.Compiler.Text.TextTag: Boolean get_IsEvent() -FSharp.Compiler.Text.TextTag: Boolean get_IsField() -FSharp.Compiler.Text.TextTag: Boolean get_IsFunction() -FSharp.Compiler.Text.TextTag: Boolean get_IsInterface() -FSharp.Compiler.Text.TextTag: Boolean get_IsKeyword() -FSharp.Compiler.Text.TextTag: Boolean get_IsLineBreak() -FSharp.Compiler.Text.TextTag: Boolean get_IsLocal() -FSharp.Compiler.Text.TextTag: Boolean get_IsMember() -FSharp.Compiler.Text.TextTag: Boolean get_IsMethod() -FSharp.Compiler.Text.TextTag: Boolean get_IsModule() -FSharp.Compiler.Text.TextTag: Boolean get_IsModuleBinding() -FSharp.Compiler.Text.TextTag: Boolean get_IsNamespace() -FSharp.Compiler.Text.TextTag: Boolean get_IsNumericLiteral() -FSharp.Compiler.Text.TextTag: Boolean get_IsOperator() -FSharp.Compiler.Text.TextTag: Boolean get_IsParameter() -FSharp.Compiler.Text.TextTag: Boolean get_IsProperty() -FSharp.Compiler.Text.TextTag: Boolean get_IsPunctuation() -FSharp.Compiler.Text.TextTag: Boolean get_IsRecord() -FSharp.Compiler.Text.TextTag: Boolean get_IsRecordField() -FSharp.Compiler.Text.TextTag: Boolean get_IsSpace() -FSharp.Compiler.Text.TextTag: Boolean get_IsStringLiteral() -FSharp.Compiler.Text.TextTag: Boolean get_IsStruct() -FSharp.Compiler.Text.TextTag: Boolean get_IsText() -FSharp.Compiler.Text.TextTag: Boolean get_IsTypeParameter() -FSharp.Compiler.Text.TextTag: Boolean get_IsUnion() -FSharp.Compiler.Text.TextTag: Boolean get_IsUnionCase() -FSharp.Compiler.Text.TextTag: Boolean get_IsUnknownEntity() -FSharp.Compiler.Text.TextTag: Boolean get_IsUnknownType() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag ActivePatternCase -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag ActivePatternResult -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Alias -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Class -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Delegate -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Enum -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Event -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Field -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Function -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Interface -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Keyword -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag LineBreak -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Local -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Member -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Method -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Module -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag ModuleBinding -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Namespace -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag NumericLiteral -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Operator -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Parameter -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Property -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Punctuation -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Record -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag RecordField -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Space -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag StringLiteral -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Struct -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Text -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag TypeParameter -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Union -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag UnionCase -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag UnknownEntity -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag UnknownType -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_ActivePatternCase() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_ActivePatternResult() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Alias() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Class() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Delegate() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Enum() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Event() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Field() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Function() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Interface() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Keyword() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_LineBreak() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Local() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Member() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Method() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Module() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_ModuleBinding() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Namespace() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_NumericLiteral() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Operator() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Parameter() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Property() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Punctuation() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Record() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_RecordField() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Space() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_StringLiteral() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Struct() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Text() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_TypeParameter() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Union() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_UnionCase() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_UnknownEntity() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_UnknownType() -FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag+Tags -FSharp.Compiler.Text.TextTag: Int32 GetHashCode() -FSharp.Compiler.Text.TextTag: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Text.TextTag: Int32 Tag -FSharp.Compiler.Text.TextTag: Int32 get_Tag() -FSharp.Compiler.Text.TextTag: System.String ToString() -FSharp.Compiler.Tokenization.FSharpKeywords -FSharp.Compiler.Tokenization.FSharpKeywords: Boolean DoesIdentifierNeedQuotation(System.String) -FSharp.Compiler.Tokenization.FSharpKeywords: Microsoft.FSharp.Collections.FSharpList`1[System.String] KeywordNames -FSharp.Compiler.Tokenization.FSharpKeywords: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_KeywordNames() -FSharp.Compiler.Tokenization.FSharpKeywords: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] KeywordsWithDescription -FSharp.Compiler.Tokenization.FSharpKeywords: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] get_KeywordsWithDescription() -FSharp.Compiler.Tokenization.FSharpKeywords: System.String NormalizeIdentifierBackticks(System.String) -FSharp.Compiler.Tokenization.FSharpKeywords: System.String QuoteIdentifierIfNeeded(System.String) -FSharp.Compiler.Tokenization.FSharpLexer -FSharp.Compiler.Tokenization.FSharpLexer: Void Tokenize(FSharp.Compiler.Text.ISourceText, Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Tokenization.FSharpToken,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Tokenization.FSharpLexerFlags], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpMap`2[System.String,System.String]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -FSharp.Compiler.Tokenization.FSharpLexerFlags -FSharp.Compiler.Tokenization.FSharpLexerFlags: FSharp.Compiler.Tokenization.FSharpLexerFlags Compiling -FSharp.Compiler.Tokenization.FSharpLexerFlags: FSharp.Compiler.Tokenization.FSharpLexerFlags CompilingFSharpCore -FSharp.Compiler.Tokenization.FSharpLexerFlags: FSharp.Compiler.Tokenization.FSharpLexerFlags Default -FSharp.Compiler.Tokenization.FSharpLexerFlags: FSharp.Compiler.Tokenization.FSharpLexerFlags LightSyntaxOn -FSharp.Compiler.Tokenization.FSharpLexerFlags: FSharp.Compiler.Tokenization.FSharpLexerFlags SkipTrivia -FSharp.Compiler.Tokenization.FSharpLexerFlags: FSharp.Compiler.Tokenization.FSharpLexerFlags UseLexFilter -FSharp.Compiler.Tokenization.FSharpLexerFlags: Int32 value__ -FSharp.Compiler.Tokenization.FSharpLineTokenizer -FSharp.Compiler.Tokenization.FSharpLineTokenizer: FSharp.Compiler.Tokenization.FSharpTokenizerColorState ColorStateOfLexState(FSharp.Compiler.Tokenization.FSharpTokenizerLexState) -FSharp.Compiler.Tokenization.FSharpLineTokenizer: FSharp.Compiler.Tokenization.FSharpTokenizerLexState LexStateOfColorState(FSharp.Compiler.Tokenization.FSharpTokenizerColorState) -FSharp.Compiler.Tokenization.FSharpLineTokenizer: System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Tokenization.FSharpTokenInfo],FSharp.Compiler.Tokenization.FSharpTokenizerLexState] ScanToken(FSharp.Compiler.Tokenization.FSharpTokenizerLexState) -FSharp.Compiler.Tokenization.FSharpSourceTokenizer -FSharp.Compiler.Tokenization.FSharpSourceTokenizer: FSharp.Compiler.Tokenization.FSharpLineTokenizer CreateBufferTokenizer(Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[System.Char[],System.Int32,System.Int32],System.Int32]) -FSharp.Compiler.Tokenization.FSharpSourceTokenizer: FSharp.Compiler.Tokenization.FSharpLineTokenizer CreateLineTokenizer(System.String) -FSharp.Compiler.Tokenization.FSharpSourceTokenizer: Void .ctor(Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.Tokenization.FSharpToken -FSharp.Compiler.Tokenization.FSharpToken: Boolean IsCommentTrivia -FSharp.Compiler.Tokenization.FSharpToken: Boolean IsIdentifier -FSharp.Compiler.Tokenization.FSharpToken: Boolean IsKeyword -FSharp.Compiler.Tokenization.FSharpToken: Boolean IsNumericLiteral -FSharp.Compiler.Tokenization.FSharpToken: Boolean IsStringLiteral -FSharp.Compiler.Tokenization.FSharpToken: Boolean get_IsCommentTrivia() -FSharp.Compiler.Tokenization.FSharpToken: Boolean get_IsIdentifier() -FSharp.Compiler.Tokenization.FSharpToken: Boolean get_IsKeyword() -FSharp.Compiler.Tokenization.FSharpToken: Boolean get_IsNumericLiteral() -FSharp.Compiler.Tokenization.FSharpToken: Boolean get_IsStringLiteral() -FSharp.Compiler.Tokenization.FSharpToken: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Tokenization.FSharpToken: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Tokenization.FSharpToken: FSharp.Compiler.Tokenization.FSharpTokenKind Kind -FSharp.Compiler.Tokenization.FSharpToken: FSharp.Compiler.Tokenization.FSharpTokenKind get_Kind() -FSharp.Compiler.Tokenization.FSharpTokenCharKind -FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind Comment -FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind Default -FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind Delimiter -FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind Identifier -FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind Keyword -FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind LineComment -FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind Literal -FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind Operator -FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind String -FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind Text -FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind WhiteSpace -FSharp.Compiler.Tokenization.FSharpTokenCharKind: Int32 value__ -FSharp.Compiler.Tokenization.FSharpTokenColorKind -FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind Comment -FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind Default -FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind Identifier -FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind InactiveCode -FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind Keyword -FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind Number -FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind Operator -FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind PreprocessorKeyword -FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind Punctuation -FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind String -FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind Text -FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind UpperIdentifier -FSharp.Compiler.Tokenization.FSharpTokenColorKind: Int32 value__ -FSharp.Compiler.Tokenization.FSharpTokenInfo -FSharp.Compiler.Tokenization.FSharpTokenInfo: Boolean Equals(FSharp.Compiler.Tokenization.FSharpTokenInfo) -FSharp.Compiler.Tokenization.FSharpTokenInfo: Boolean Equals(System.Object) -FSharp.Compiler.Tokenization.FSharpTokenInfo: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Tokenization.FSharpTokenInfo: FSharp.Compiler.Tokenization.FSharpTokenCharKind CharClass -FSharp.Compiler.Tokenization.FSharpTokenInfo: FSharp.Compiler.Tokenization.FSharpTokenCharKind get_CharClass() -FSharp.Compiler.Tokenization.FSharpTokenInfo: FSharp.Compiler.Tokenization.FSharpTokenColorKind ColorClass -FSharp.Compiler.Tokenization.FSharpTokenInfo: FSharp.Compiler.Tokenization.FSharpTokenColorKind get_ColorClass() -FSharp.Compiler.Tokenization.FSharpTokenInfo: FSharp.Compiler.Tokenization.FSharpTokenTriggerClass FSharpTokenTriggerClass -FSharp.Compiler.Tokenization.FSharpTokenInfo: FSharp.Compiler.Tokenization.FSharpTokenTriggerClass get_FSharpTokenTriggerClass() -FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 CompareTo(FSharp.Compiler.Tokenization.FSharpTokenInfo) -FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 CompareTo(System.Object) -FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 FullMatchedLength -FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 GetHashCode() -FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 LeftColumn -FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 RightColumn -FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 Tag -FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 get_FullMatchedLength() -FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 get_LeftColumn() -FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 get_RightColumn() -FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 get_Tag() -FSharp.Compiler.Tokenization.FSharpTokenInfo: System.String ToString() -FSharp.Compiler.Tokenization.FSharpTokenInfo: System.String TokenName -FSharp.Compiler.Tokenization.FSharpTokenInfo: System.String get_TokenName() -FSharp.Compiler.Tokenization.FSharpTokenInfo: Void .ctor(Int32, Int32, FSharp.Compiler.Tokenization.FSharpTokenColorKind, FSharp.Compiler.Tokenization.FSharpTokenCharKind, FSharp.Compiler.Tokenization.FSharpTokenTriggerClass, Int32, System.String, Int32) -FSharp.Compiler.Tokenization.FSharpTokenKind -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Abstract -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 AdjacentPrefixOperator -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Ampersand -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 AmpersandAmpersand -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 And -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 As -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Asr -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Assert -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Bar -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 BarBar -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 BarRightBrace -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 BarRightBracket -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Base -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Begin -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 BigNumber -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Binder -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 ByteArray -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Char -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Class -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Colon -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 ColonColon -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 ColonEquals -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 ColonGreater -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 ColonQuestionMark -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 ColonQuestionMarkGreater -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Comma -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 CommentTrivia -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Const -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Constraint -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Constructor -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Decimal -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Default -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Delegate -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Do -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 DoBang -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Dollar -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Done -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Dot -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 DotDot -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 DotDotHat -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 DownTo -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Downcast -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Elif -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Else -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 End -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Equals -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Exception -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Extern -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 False -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Finally -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Fixed -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 For -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Fun -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Function -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 FunkyOperatorName -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Global -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Greater -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 GreaterBarRightBracket -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 GreaterRightBracket -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Hash -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 HashElse -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 HashEndIf -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 HashIf -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 HashLight -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 HashLine -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 HighPrecedenceBracketApp -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 HighPrecedenceParenthesisApp -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 HighPrecedenceTypeApp -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Identifier -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Ieee32 -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Ieee64 -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 If -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 In -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InactiveCode -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixAmpersandOperator -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixAsr -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixAtHatOperator -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixBarOperator -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixCompareOperator -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixLand -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixLor -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixLsl -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixLsr -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixLxor -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixMod -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixStarDivideModuloOperator -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixStarStarOperator -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Inherit -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Inline -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Instance -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Int16 -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Int32 -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Int32DotDot -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Int64 -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Int8 -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Interface -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Internal -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 JoinIn -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 KeywordString -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Lazy -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 LeftArrow -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 LeftBrace -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 LeftBraceBar -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 LeftBracket -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 LeftBracketBar -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 LeftBracketLess -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 LeftParenthesis -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 LeftParenthesisStarRightParenthesis -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 LeftQuote -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Less -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Let -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 LineCommentTrivia -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Match -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 MatchBang -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Member -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Minus -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Module -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Mutable -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Namespace -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 NativeInt -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 New -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 None -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Null -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Of -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideAssert -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideBinder -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideBlockBegin -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideBlockEnd -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideBlockSep -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideDeclEnd -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideDo -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideDoBang -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideElse -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideEnd -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideFun -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideFunction -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideInterfaceMember -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideLazy -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideLet -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideReset -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideRightBlockEnd -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideThen -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideWith -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Open -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Or -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Override -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 PercentOperator -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 PlusMinusOperator -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 PrefixOperator -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Private -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Public -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 QuestionMark -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 QuestionMarkQuestionMark -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Quote -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Rec -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Reserved -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 RightArrow -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 RightBrace -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 RightBracket -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 RightParenthesis -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 RightQuote -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 RightQuoteDot -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Semicolon -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 SemicolonSemicolon -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Sig -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Star -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Static -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 String -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 StringText -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Struct -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Then -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 To -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 True -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Try -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Type -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 UInt16 -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 UInt32 -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 UInt64 -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 UInt8 -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 UNativeInt -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Underscore -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Upcast -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Val -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Void -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 When -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 While -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 WhitespaceTrivia -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 With -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Yield -FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 YieldBang -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean Equals(FSharp.Compiler.Tokenization.FSharpTokenKind) -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean Equals(System.Object) -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsAbstract -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsAdjacentPrefixOperator -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsAmpersand -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsAmpersandAmpersand -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsAnd -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsAs -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsAsr -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsAssert -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsBar -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsBarBar -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsBarRightBrace -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsBarRightBracket -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsBase -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsBegin -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsBigNumber -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsBinder -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsByteArray -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsChar -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsClass -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsColon -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsColonColon -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsColonEquals -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsColonGreater -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsColonQuestionMark -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsColonQuestionMarkGreater -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsComma -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsCommentTrivia -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsConst -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsConstraint -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsConstructor -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDecimal -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDefault -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDelegate -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDo -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDoBang -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDollar -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDone -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDot -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDotDot -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDotDotHat -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDownTo -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDowncast -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsElif -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsElse -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsEnd -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsEquals -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsException -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsExtern -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsFalse -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsFinally -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsFixed -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsFor -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsFun -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsFunction -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsFunkyOperatorName -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsGlobal -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsGreater -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsGreaterBarRightBracket -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsGreaterRightBracket -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsHash -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsHashElse -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsHashEndIf -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsHashIf -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsHashLight -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsHashLine -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsHighPrecedenceBracketApp -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsHighPrecedenceParenthesisApp -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsHighPrecedenceTypeApp -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsIdentifier -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsIeee32 -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsIeee64 -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsIf -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsIn -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInactiveCode -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixAmpersandOperator -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixAsr -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixAtHatOperator -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixBarOperator -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixCompareOperator -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixLand -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixLor -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixLsl -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixLsr -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixLxor -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixMod -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixStarDivideModuloOperator -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixStarStarOperator -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInherit -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInline -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInstance -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInt16 -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInt32 -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInt32DotDot -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInt64 -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInt8 -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInterface -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInternal -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsJoinIn -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsKeywordString -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLazy -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLeftArrow -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLeftBrace -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLeftBraceBar -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLeftBracket -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLeftBracketBar -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLeftBracketLess -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLeftParenthesis -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLeftParenthesisStarRightParenthesis -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLeftQuote -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLess -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLet -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLineCommentTrivia -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsMatch -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsMatchBang -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsMember -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsMinus -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsModule -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsMutable -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsNamespace -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsNativeInt -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsNew -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsNone -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsNull -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOf -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideAssert -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideBinder -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideBlockBegin -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideBlockEnd -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideBlockSep -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideDeclEnd -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideDo -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideDoBang -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideElse -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideEnd -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideFun -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideFunction -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideInterfaceMember -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideLazy -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideLet -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideReset -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideRightBlockEnd -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideThen -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideWith -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOpen -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOr -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOverride -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsPercentOperator -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsPlusMinusOperator -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsPrefixOperator -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsPrivate -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsPublic -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsQuestionMark -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsQuestionMarkQuestionMark -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsQuote -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsRec -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsReserved -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsRightArrow -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsRightBrace -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsRightBracket -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsRightParenthesis -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsRightQuote -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsRightQuoteDot -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsSemicolon -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsSemicolonSemicolon -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsSig -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsStar -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsStatic -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsString -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsStringText -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsStruct -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsThen -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsTo -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsTrue -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsTry -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsType -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsUInt16 -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsUInt32 -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsUInt64 -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsUInt8 -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsUNativeInt -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsUnderscore -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsUpcast -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsVal -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsVoid -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsWhen -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsWhile -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsWhitespaceTrivia -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsWith -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsYield -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsYieldBang -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsAbstract() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsAdjacentPrefixOperator() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsAmpersand() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsAmpersandAmpersand() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsAnd() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsAs() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsAsr() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsAssert() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsBar() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsBarBar() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsBarRightBrace() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsBarRightBracket() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsBase() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsBegin() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsBigNumber() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsBinder() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsByteArray() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsChar() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsClass() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsColon() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsColonColon() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsColonEquals() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsColonGreater() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsColonQuestionMark() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsColonQuestionMarkGreater() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsComma() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsCommentTrivia() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsConst() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsConstraint() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsConstructor() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDecimal() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDefault() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDelegate() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDo() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDoBang() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDollar() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDone() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDot() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDotDot() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDotDotHat() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDownTo() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDowncast() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsElif() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsElse() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsEnd() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsEquals() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsException() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsExtern() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsFalse() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsFinally() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsFixed() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsFor() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsFun() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsFunction() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsFunkyOperatorName() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsGlobal() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsGreater() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsGreaterBarRightBracket() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsGreaterRightBracket() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsHash() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsHashElse() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsHashEndIf() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsHashIf() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsHashLight() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsHashLine() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsHighPrecedenceBracketApp() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsHighPrecedenceParenthesisApp() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsHighPrecedenceTypeApp() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsIdentifier() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsIeee32() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsIeee64() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsIf() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsIn() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInactiveCode() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixAmpersandOperator() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixAsr() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixAtHatOperator() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixBarOperator() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixCompareOperator() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixLand() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixLor() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixLsl() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixLsr() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixLxor() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixMod() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixStarDivideModuloOperator() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixStarStarOperator() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInherit() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInline() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInstance() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInt16() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInt32() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInt32DotDot() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInt64() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInt8() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInterface() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInternal() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsJoinIn() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsKeywordString() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLazy() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLeftArrow() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLeftBrace() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLeftBraceBar() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLeftBracket() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLeftBracketBar() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLeftBracketLess() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLeftParenthesis() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLeftParenthesisStarRightParenthesis() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLeftQuote() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLess() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLet() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLineCommentTrivia() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsMatch() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsMatchBang() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsMember() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsMinus() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsModule() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsMutable() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsNamespace() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsNativeInt() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsNew() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsNone() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsNull() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOf() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideAssert() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideBinder() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideBlockBegin() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideBlockEnd() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideBlockSep() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideDeclEnd() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideDo() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideDoBang() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideElse() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideEnd() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideFun() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideFunction() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideInterfaceMember() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideLazy() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideLet() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideReset() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideRightBlockEnd() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideThen() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideWith() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOpen() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOr() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOverride() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsPercentOperator() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsPlusMinusOperator() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsPrefixOperator() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsPrivate() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsPublic() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsQuestionMark() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsQuestionMarkQuestionMark() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsQuote() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsRec() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsReserved() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsRightArrow() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsRightBrace() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsRightBracket() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsRightParenthesis() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsRightQuote() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsRightQuoteDot() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsSemicolon() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsSemicolonSemicolon() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsSig() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsStar() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsStatic() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsString() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsStringText() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsStruct() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsThen() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsTo() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsTrue() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsTry() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsType() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsUInt16() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsUInt32() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsUInt64() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsUInt8() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsUNativeInt() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsUnderscore() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsUpcast() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsVal() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsVoid() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsWhen() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsWhile() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsWhitespaceTrivia() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsWith() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsYield() -FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsYieldBang() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Abstract -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind AdjacentPrefixOperator -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Ampersand -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind AmpersandAmpersand -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind And -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind As -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Asr -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Assert -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Bar -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind BarBar -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind BarRightBrace -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind BarRightBracket -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Base -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Begin -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind BigNumber -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Binder -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind ByteArray -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Char -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Class -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Colon -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind ColonColon -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind ColonEquals -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind ColonGreater -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind ColonQuestionMark -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind ColonQuestionMarkGreater -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Comma -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind CommentTrivia -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Const -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Constraint -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Constructor -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Decimal -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Default -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Delegate -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Do -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind DoBang -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Dollar -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Done -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Dot -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind DotDot -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind DotDotHat -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind DownTo -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Downcast -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Elif -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Else -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind End -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Equals -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Exception -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Extern -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind False -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Finally -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Fixed -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind For -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Fun -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Function -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind FunkyOperatorName -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Global -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Greater -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind GreaterBarRightBracket -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind GreaterRightBracket -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Hash -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind HashElse -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind HashEndIf -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind HashIf -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind HashLight -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind HashLine -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind HighPrecedenceBracketApp -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind HighPrecedenceParenthesisApp -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind HighPrecedenceTypeApp -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Identifier -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Ieee32 -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Ieee64 -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind If -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind In -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InactiveCode -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixAmpersandOperator -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixAsr -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixAtHatOperator -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixBarOperator -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixCompareOperator -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixLand -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixLor -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixLsl -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixLsr -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixLxor -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixMod -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixStarDivideModuloOperator -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixStarStarOperator -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Inherit -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Inline -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Instance -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Int16 -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Int32 -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Int32DotDot -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Int64 -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Int8 -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Interface -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Internal -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind JoinIn -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind KeywordString -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Lazy -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind LeftArrow -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind LeftBrace -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind LeftBraceBar -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind LeftBracket -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind LeftBracketBar -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind LeftBracketLess -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind LeftParenthesis -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind LeftParenthesisStarRightParenthesis -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind LeftQuote -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Less -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Let -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind LineCommentTrivia -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Match -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind MatchBang -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Member -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Minus -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Module -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Mutable -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Namespace -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind NativeInt -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind New -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind None -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Null -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Of -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideAssert -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideBinder -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideBlockBegin -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideBlockEnd -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideBlockSep -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideDeclEnd -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideDo -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideDoBang -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideElse -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideEnd -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideFun -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideFunction -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideInterfaceMember -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideLazy -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideLet -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideReset -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideRightBlockEnd -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideThen -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideWith -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Open -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Or -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Override -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind PercentOperator -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind PlusMinusOperator -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind PrefixOperator -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Private -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Public -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind QuestionMark -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind QuestionMarkQuestionMark -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Quote -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Rec -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Reserved -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind RightArrow -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind RightBrace -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind RightBracket -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind RightParenthesis -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind RightQuote -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind RightQuoteDot -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Semicolon -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind SemicolonSemicolon -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Sig -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Star -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Static -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind String -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind StringText -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Struct -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Then -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind To -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind True -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Try -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Type -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind UInt16 -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind UInt32 -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind UInt64 -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind UInt8 -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind UNativeInt -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Underscore -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Upcast -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Val -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Void -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind When -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind While -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind WhitespaceTrivia -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind With -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Yield -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind YieldBang -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Abstract() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_AdjacentPrefixOperator() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Ampersand() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_AmpersandAmpersand() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_And() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_As() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Asr() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Assert() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Bar() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_BarBar() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_BarRightBrace() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_BarRightBracket() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Base() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Begin() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_BigNumber() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Binder() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_ByteArray() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Char() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Class() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Colon() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_ColonColon() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_ColonEquals() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_ColonGreater() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_ColonQuestionMark() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_ColonQuestionMarkGreater() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Comma() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_CommentTrivia() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Const() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Constraint() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Constructor() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Decimal() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Default() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Delegate() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Do() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_DoBang() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Dollar() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Done() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Dot() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_DotDot() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_DotDotHat() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_DownTo() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Downcast() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Elif() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Else() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_End() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Equals() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Exception() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Extern() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_False() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Finally() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Fixed() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_For() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Fun() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Function() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_FunkyOperatorName() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Global() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Greater() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_GreaterBarRightBracket() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_GreaterRightBracket() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Hash() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_HashElse() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_HashEndIf() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_HashIf() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_HashLight() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_HashLine() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_HighPrecedenceBracketApp() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_HighPrecedenceParenthesisApp() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_HighPrecedenceTypeApp() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Identifier() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Ieee32() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Ieee64() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_If() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_In() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InactiveCode() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixAmpersandOperator() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixAsr() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixAtHatOperator() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixBarOperator() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixCompareOperator() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixLand() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixLor() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixLsl() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixLsr() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixLxor() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixMod() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixStarDivideModuloOperator() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixStarStarOperator() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Inherit() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Inline() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Instance() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Int16() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Int32() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Int32DotDot() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Int64() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Int8() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Interface() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Internal() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_JoinIn() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_KeywordString() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Lazy() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_LeftArrow() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_LeftBrace() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_LeftBraceBar() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_LeftBracket() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_LeftBracketBar() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_LeftBracketLess() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_LeftParenthesis() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_LeftParenthesisStarRightParenthesis() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_LeftQuote() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Less() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Let() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_LineCommentTrivia() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Match() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_MatchBang() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Member() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Minus() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Module() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Mutable() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Namespace() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_NativeInt() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_New() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_None() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Null() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Of() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideAssert() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideBinder() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideBlockBegin() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideBlockEnd() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideBlockSep() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideDeclEnd() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideDo() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideDoBang() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideElse() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideEnd() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideFun() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideFunction() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideInterfaceMember() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideLazy() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideLet() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideReset() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideRightBlockEnd() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideThen() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideWith() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Open() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Or() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Override() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_PercentOperator() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_PlusMinusOperator() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_PrefixOperator() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Private() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Public() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_QuestionMark() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_QuestionMarkQuestionMark() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Quote() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Rec() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Reserved() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_RightArrow() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_RightBrace() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_RightBracket() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_RightParenthesis() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_RightQuote() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_RightQuoteDot() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Semicolon() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_SemicolonSemicolon() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Sig() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Star() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Static() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_String() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_StringText() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Struct() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Then() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_To() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_True() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Try() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Type() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_UInt16() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_UInt32() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_UInt64() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_UInt8() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_UNativeInt() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Underscore() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Upcast() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Val() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Void() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_When() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_While() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_WhitespaceTrivia() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_With() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Yield() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_YieldBang() -FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind+Tags -FSharp.Compiler.Tokenization.FSharpTokenKind: Int32 CompareTo(FSharp.Compiler.Tokenization.FSharpTokenKind) -FSharp.Compiler.Tokenization.FSharpTokenKind: Int32 CompareTo(System.Object) -FSharp.Compiler.Tokenization.FSharpTokenKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.Tokenization.FSharpTokenKind: Int32 GetHashCode() -FSharp.Compiler.Tokenization.FSharpTokenKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Tokenization.FSharpTokenKind: Int32 Tag -FSharp.Compiler.Tokenization.FSharpTokenKind: Int32 get_Tag() -FSharp.Compiler.Tokenization.FSharpTokenKind: System.String ToString() -FSharp.Compiler.Tokenization.FSharpTokenTag -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 AMP_AMP -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 BAR -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 BAR_BAR -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 BAR_RBRACK -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 BEGIN -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 CLASS -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 COLON -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 COLON_COLON -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 COLON_EQUALS -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 COLON_GREATER -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 COLON_QMARK -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 COLON_QMARK_GREATER -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 COMMA -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 COMMENT -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 DO -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 DOT -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 DOT_DOT -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 DOT_DOT_HAT -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 ELSE -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 EQUALS -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 FUNCTION -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 GREATER -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 GREATER_RBRACK -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 IDENT -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 INFIX_AT_HAT_OP -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 INFIX_BAR_OP -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 INFIX_COMPARE_OP -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 INFIX_STAR_DIV_MOD_OP -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 INT32_DOT_DOT -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 INTERP_STRING_BEGIN_END -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 INTERP_STRING_BEGIN_PART -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 INTERP_STRING_END -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 INTERP_STRING_PART -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 Identifier -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 LARROW -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 LBRACE -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 LBRACK -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 LBRACK_BAR -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 LBRACK_LESS -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 LESS -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 LINE_COMMENT -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 LPAREN -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 MINUS -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 NEW -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 OWITH -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 PERCENT_OP -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 PLUS_MINUS_OP -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 PREFIX_OP -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 QMARK -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 QUOTE -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 RARROW -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 RBRACE -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 RBRACK -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 RPAREN -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 SEMICOLON -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 STAR -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 STRING -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 STRUCT -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 String -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 THEN -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 TRY -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 UNDERSCORE -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 WHITESPACE -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 WITH -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_AMP_AMP() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_BAR() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_BAR_BAR() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_BAR_RBRACK() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_BEGIN() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_CLASS() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_COLON() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_COLON_COLON() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_COLON_EQUALS() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_COLON_GREATER() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_COLON_QMARK() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_COLON_QMARK_GREATER() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_COMMA() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_COMMENT() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_DO() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_DOT() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_DOT_DOT() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_DOT_DOT_HAT() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_ELSE() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_EQUALS() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_FUNCTION() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_GREATER() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_GREATER_RBRACK() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_IDENT() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_INFIX_AT_HAT_OP() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_INFIX_BAR_OP() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_INFIX_COMPARE_OP() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_INFIX_STAR_DIV_MOD_OP() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_INT32_DOT_DOT() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_INTERP_STRING_BEGIN_END() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_INTERP_STRING_BEGIN_PART() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_INTERP_STRING_END() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_INTERP_STRING_PART() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_Identifier() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_LARROW() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_LBRACE() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_LBRACK() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_LBRACK_BAR() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_LBRACK_LESS() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_LESS() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_LINE_COMMENT() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_LPAREN() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_MINUS() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_NEW() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_OWITH() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_PERCENT_OP() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_PLUS_MINUS_OP() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_PREFIX_OP() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_QMARK() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_QUOTE() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_RARROW() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_RBRACE() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_RBRACK() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_RPAREN() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_SEMICOLON() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_STAR() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_STRING() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_STRUCT() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_String() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_THEN() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_TRY() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_UNDERSCORE() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_WHITESPACE() -FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_WITH() -FSharp.Compiler.Tokenization.FSharpTokenTriggerClass -FSharp.Compiler.Tokenization.FSharpTokenTriggerClass: FSharp.Compiler.Tokenization.FSharpTokenTriggerClass ChoiceSelect -FSharp.Compiler.Tokenization.FSharpTokenTriggerClass: FSharp.Compiler.Tokenization.FSharpTokenTriggerClass MatchBraces -FSharp.Compiler.Tokenization.FSharpTokenTriggerClass: FSharp.Compiler.Tokenization.FSharpTokenTriggerClass MemberSelect -FSharp.Compiler.Tokenization.FSharpTokenTriggerClass: FSharp.Compiler.Tokenization.FSharpTokenTriggerClass MethodTip -FSharp.Compiler.Tokenization.FSharpTokenTriggerClass: FSharp.Compiler.Tokenization.FSharpTokenTriggerClass None -FSharp.Compiler.Tokenization.FSharpTokenTriggerClass: FSharp.Compiler.Tokenization.FSharpTokenTriggerClass ParamEnd -FSharp.Compiler.Tokenization.FSharpTokenTriggerClass: FSharp.Compiler.Tokenization.FSharpTokenTriggerClass ParamNext -FSharp.Compiler.Tokenization.FSharpTokenTriggerClass: FSharp.Compiler.Tokenization.FSharpTokenTriggerClass ParamStart -FSharp.Compiler.Tokenization.FSharpTokenTriggerClass: Int32 value__ -FSharp.Compiler.Tokenization.FSharpTokenizerColorState -FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState CamlOnly -FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState Comment -FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState EndLineThenSkip -FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState EndLineThenToken -FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState IfDefSkip -FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState InitialState -FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState SingleLineComment -FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState String -FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState StringInComment -FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState Token -FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState TripleQuoteString -FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState TripleQuoteStringInComment -FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState VerbatimString -FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState VerbatimStringInComment -FSharp.Compiler.Tokenization.FSharpTokenizerColorState: Int32 value__ -FSharp.Compiler.Tokenization.FSharpTokenizerLexState -FSharp.Compiler.Tokenization.FSharpTokenizerLexState: Boolean Equals(FSharp.Compiler.Tokenization.FSharpTokenizerLexState) -FSharp.Compiler.Tokenization.FSharpTokenizerLexState: Boolean Equals(System.Object) -FSharp.Compiler.Tokenization.FSharpTokenizerLexState: FSharp.Compiler.Tokenization.FSharpTokenizerLexState Initial -FSharp.Compiler.Tokenization.FSharpTokenizerLexState: FSharp.Compiler.Tokenization.FSharpTokenizerLexState get_Initial() -FSharp.Compiler.Tokenization.FSharpTokenizerLexState: Int32 GetHashCode() -FSharp.Compiler.Tokenization.FSharpTokenizerLexState: Int64 OtherBits -FSharp.Compiler.Tokenization.FSharpTokenizerLexState: Int64 PosBits -FSharp.Compiler.Tokenization.FSharpTokenizerLexState: Int64 get_OtherBits() -FSharp.Compiler.Tokenization.FSharpTokenizerLexState: Int64 get_PosBits() -FSharp.Compiler.Tokenization.FSharpTokenizerLexState: System.String ToString() -FSharp.Compiler.Tokenization.FSharpTokenizerLexState: Void .ctor(Int64, Int64) -FSharp.Compiler.Xml.PreXmlDoc -FSharp.Compiler.Xml.PreXmlDoc: Boolean Equals(FSharp.Compiler.Xml.PreXmlDoc) -FSharp.Compiler.Xml.PreXmlDoc: Boolean Equals(System.Object) -FSharp.Compiler.Xml.PreXmlDoc: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Xml.PreXmlDoc: FSharp.Compiler.Xml.PreXmlDoc Create(System.String[], FSharp.Compiler.Text.Range) -FSharp.Compiler.Xml.PreXmlDoc: FSharp.Compiler.Xml.PreXmlDoc Empty -FSharp.Compiler.Xml.PreXmlDoc: FSharp.Compiler.Xml.PreXmlDoc Merge(FSharp.Compiler.Xml.PreXmlDoc, FSharp.Compiler.Xml.PreXmlDoc) -FSharp.Compiler.Xml.PreXmlDoc: FSharp.Compiler.Xml.PreXmlDoc get_Empty() -FSharp.Compiler.Xml.PreXmlDoc: FSharp.Compiler.Xml.XmlDoc ToXmlDoc(Boolean, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) -FSharp.Compiler.Xml.PreXmlDoc: Int32 GetHashCode() -FSharp.Compiler.Xml.PreXmlDoc: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Xml.PreXmlDoc: System.String ToString() -FSharp.Compiler.Xml.XmlDoc -FSharp.Compiler.Xml.XmlDoc: Boolean IsEmpty -FSharp.Compiler.Xml.XmlDoc: Boolean NonEmpty -FSharp.Compiler.Xml.XmlDoc: Boolean get_IsEmpty() -FSharp.Compiler.Xml.XmlDoc: Boolean get_NonEmpty() -FSharp.Compiler.Xml.XmlDoc: FSharp.Compiler.Text.Range Range -FSharp.Compiler.Xml.XmlDoc: FSharp.Compiler.Text.Range get_Range() -FSharp.Compiler.Xml.XmlDoc: FSharp.Compiler.Xml.XmlDoc Empty -FSharp.Compiler.Xml.XmlDoc: FSharp.Compiler.Xml.XmlDoc Merge(FSharp.Compiler.Xml.XmlDoc, FSharp.Compiler.Xml.XmlDoc) -FSharp.Compiler.Xml.XmlDoc: FSharp.Compiler.Xml.XmlDoc get_Empty() -FSharp.Compiler.Xml.XmlDoc: System.String GetXmlText() -FSharp.Compiler.Xml.XmlDoc: System.String[] GetElaboratedXmlLines() -FSharp.Compiler.Xml.XmlDoc: System.String[] UnprocessedLines -FSharp.Compiler.Xml.XmlDoc: System.String[] get_UnprocessedLines() -FSharp.Compiler.Xml.XmlDoc: Void .ctor(System.String[], FSharp.Compiler.Text.Range)" +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Boolean Equals(PreXmlDoc) +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Boolean Equals(System.Object) +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Boolean IsPreXmlDoc +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Boolean IsPreXmlDocEmpty +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Boolean IsPreXmlMerge +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Boolean get_IsPreXmlDoc() +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Boolean get_IsPreXmlDocEmpty() +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Boolean get_IsPreXmlMerge() +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Int32 GetHashCode() +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Int32 Tag +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Int32 get_Tag() +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: System.String ToString() +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: XmlDoc ToXmlDoc(Boolean, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: XmlDocCollector Item2 +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: XmlDocCollector get_Item2() +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: pos Item1 +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: pos get_Item1() +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Boolean Equals(PreXmlDoc) +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Boolean Equals(System.Object) +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Boolean IsPreXmlDoc +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Boolean IsPreXmlDocEmpty +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Boolean IsPreXmlMerge +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Boolean get_IsPreXmlDoc() +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Boolean get_IsPreXmlDocEmpty() +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Boolean get_IsPreXmlMerge() +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Int32 GetHashCode() +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Int32 Tag +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Int32 get_Tag() +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: PreXmlDoc Item1 +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: PreXmlDoc Item2 +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: PreXmlDoc get_Item1() +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: PreXmlDoc get_Item2() +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: System.String ToString() +FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: XmlDoc ToXmlDoc(Boolean, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) +FSharp.Compiler.XmlDoc+PreXmlDoc+Tags: Int32 PreXmlDoc +FSharp.Compiler.XmlDoc+PreXmlDoc+Tags: Int32 PreXmlDocEmpty +FSharp.Compiler.XmlDoc+PreXmlDoc+Tags: Int32 PreXmlMerge +FSharp.Compiler.XmlDoc+PreXmlDoc: Boolean Equals(PreXmlDoc) +FSharp.Compiler.XmlDoc+PreXmlDoc: Boolean Equals(System.Object) +FSharp.Compiler.XmlDoc+PreXmlDoc: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.XmlDoc+PreXmlDoc: Boolean IsPreXmlDoc +FSharp.Compiler.XmlDoc+PreXmlDoc: Boolean IsPreXmlDocEmpty +FSharp.Compiler.XmlDoc+PreXmlDoc: Boolean IsPreXmlMerge +FSharp.Compiler.XmlDoc+PreXmlDoc: Boolean get_IsPreXmlDoc() +FSharp.Compiler.XmlDoc+PreXmlDoc: Boolean get_IsPreXmlDocEmpty() +FSharp.Compiler.XmlDoc+PreXmlDoc: Boolean get_IsPreXmlMerge() +FSharp.Compiler.XmlDoc+PreXmlDoc: FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc +FSharp.Compiler.XmlDoc+PreXmlDoc: FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge +FSharp.Compiler.XmlDoc+PreXmlDoc: FSharp.Compiler.XmlDoc+PreXmlDoc+Tags +FSharp.Compiler.XmlDoc+PreXmlDoc: Int32 GetHashCode() +FSharp.Compiler.XmlDoc+PreXmlDoc: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.XmlDoc+PreXmlDoc: Int32 Tag +FSharp.Compiler.XmlDoc+PreXmlDoc: Int32 get_Tag() +FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc CreateFromGrabPoint(XmlDocCollector, pos) +FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc Empty +FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc Merge(PreXmlDoc, PreXmlDoc) +FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc NewPreXmlDoc(pos, XmlDocCollector) +FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc NewPreXmlMerge(PreXmlDoc, PreXmlDoc) +FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc PreXmlDocEmpty +FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc get_Empty() +FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc get_PreXmlDocEmpty() +FSharp.Compiler.XmlDoc+PreXmlDoc: System.String ToString() +FSharp.Compiler.XmlDoc+PreXmlDoc: XmlDoc ToXmlDoc(Boolean, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) +FSharp.Compiler.XmlDoc+XmlDoc: Boolean IsEmpty +FSharp.Compiler.XmlDoc+XmlDoc: Boolean NonEmpty +FSharp.Compiler.XmlDoc+XmlDoc: Boolean get_IsEmpty() +FSharp.Compiler.XmlDoc+XmlDoc: Boolean get_NonEmpty() +FSharp.Compiler.XmlDoc+XmlDoc: System.String GetXmlText() +FSharp.Compiler.XmlDoc+XmlDoc: System.String[] GetElaboratedXmlLines() +FSharp.Compiler.XmlDoc+XmlDoc: System.String[] UnprocessedLines +FSharp.Compiler.XmlDoc+XmlDoc: System.String[] get_UnprocessedLines() +FSharp.Compiler.XmlDoc+XmlDoc: Void .ctor(System.String[], range) +FSharp.Compiler.XmlDoc+XmlDoc: Void Check(Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) +FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc Empty +FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc Merge(XmlDoc, XmlDoc) +FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc get_Empty() +FSharp.Compiler.XmlDoc+XmlDoc: range Range +FSharp.Compiler.XmlDoc+XmlDoc: range get_Range() +FSharp.Compiler.XmlDoc+XmlDocCollector: System.Tuple`2[System.String,FSharp.Compiler.Range+range][] LinesBefore(pos) +FSharp.Compiler.XmlDoc+XmlDocCollector: Void .ctor() +FSharp.Compiler.XmlDoc+XmlDocCollector: Void AddGrabPoint(pos) +FSharp.Compiler.XmlDoc+XmlDocCollector: Void AddXmlDocLine(System.String, range) +FSharp.Compiler.XmlDoc: FSharp.Compiler.XmlDoc+PreXmlDoc +FSharp.Compiler.XmlDoc: FSharp.Compiler.XmlDoc+XmlDoc +FSharp.Compiler.XmlDoc: FSharp.Compiler.XmlDoc+XmlDocCollector +Internal.Utilities.PathMap: Boolean Equals(Internal.Utilities.PathMap) +Internal.Utilities.PathMap: Boolean Equals(System.Object) +Internal.Utilities.PathMap: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Internal.Utilities.PathMap: Int32 CompareTo(Internal.Utilities.PathMap) +Internal.Utilities.PathMap: Int32 CompareTo(System.Object) +Internal.Utilities.PathMap: Int32 CompareTo(System.Object, System.Collections.IComparer) +Internal.Utilities.PathMap: Int32 GetHashCode() +Internal.Utilities.PathMap: Int32 GetHashCode(System.Collections.IEqualityComparer) +Internal.Utilities.PathMap: System.String ToString() +Internal.Utilities.StructuredFormat.Display: Internal.Utilities.StructuredFormat.Layout any_to_layout[T](Internal.Utilities.StructuredFormat.FormatOptions, T, System.Type) +Internal.Utilities.StructuredFormat.Display: Internal.Utilities.StructuredFormat.Layout fsi_any_to_layout[T](Internal.Utilities.StructuredFormat.FormatOptions, T, System.Type) +Internal.Utilities.StructuredFormat.Display: Internal.Utilities.StructuredFormat.Layout squashTo(Int32, Internal.Utilities.StructuredFormat.Layout) +Internal.Utilities.StructuredFormat.Display: Internal.Utilities.StructuredFormat.Layout squash_layout(Internal.Utilities.StructuredFormat.FormatOptions, Internal.Utilities.StructuredFormat.Layout) +Internal.Utilities.StructuredFormat.Display: Internal.Utilities.StructuredFormat.TaggedTextWriter asTaggedTextWriter(System.IO.TextWriter) +Internal.Utilities.StructuredFormat.Display: System.String layout_as_string[T](Internal.Utilities.StructuredFormat.FormatOptions, T, System.Type) +Internal.Utilities.StructuredFormat.Display: System.String layout_to_string(Internal.Utilities.StructuredFormat.FormatOptions, Internal.Utilities.StructuredFormat.Layout) +Internal.Utilities.StructuredFormat.Display: Void output_layout(Internal.Utilities.StructuredFormat.FormatOptions, System.IO.TextWriter, Internal.Utilities.StructuredFormat.Layout) +Internal.Utilities.StructuredFormat.Display: Void output_layout_tagged(Internal.Utilities.StructuredFormat.FormatOptions, Internal.Utilities.StructuredFormat.TaggedTextWriter, Internal.Utilities.StructuredFormat.Layout) +Internal.Utilities.StructuredFormat.FormatOptions: Boolean ShowIEnumerable +Internal.Utilities.StructuredFormat.FormatOptions: Boolean ShowProperties +Internal.Utilities.StructuredFormat.FormatOptions: Boolean get_ShowIEnumerable() +Internal.Utilities.StructuredFormat.FormatOptions: Boolean get_ShowProperties() +Internal.Utilities.StructuredFormat.FormatOptions: Int32 PrintDepth +Internal.Utilities.StructuredFormat.FormatOptions: Int32 PrintLength +Internal.Utilities.StructuredFormat.FormatOptions: Int32 PrintSize +Internal.Utilities.StructuredFormat.FormatOptions: Int32 PrintWidth +Internal.Utilities.StructuredFormat.FormatOptions: Int32 StringLimit +Internal.Utilities.StructuredFormat.FormatOptions: Int32 get_PrintDepth() +Internal.Utilities.StructuredFormat.FormatOptions: Int32 get_PrintLength() +Internal.Utilities.StructuredFormat.FormatOptions: Int32 get_PrintSize() +Internal.Utilities.StructuredFormat.FormatOptions: Int32 get_PrintWidth() +Internal.Utilities.StructuredFormat.FormatOptions: Int32 get_StringLimit() +Internal.Utilities.StructuredFormat.FormatOptions: Internal.Utilities.StructuredFormat.FormatOptions Default +Internal.Utilities.StructuredFormat.FormatOptions: Internal.Utilities.StructuredFormat.FormatOptions get_Default() +Internal.Utilities.StructuredFormat.FormatOptions: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Core.FSharpFunc`2[Internal.Utilities.StructuredFormat.IEnvironment,Microsoft.FSharp.Core.FSharpFunc`2[System.Object,Microsoft.FSharp.Core.FSharpOption`1[Internal.Utilities.StructuredFormat.Layout]]]] PrintIntercepts +Internal.Utilities.StructuredFormat.FormatOptions: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Core.FSharpFunc`2[Internal.Utilities.StructuredFormat.IEnvironment,Microsoft.FSharp.Core.FSharpFunc`2[System.Object,Microsoft.FSharp.Core.FSharpOption`1[Internal.Utilities.StructuredFormat.Layout]]]] get_PrintIntercepts() +Internal.Utilities.StructuredFormat.FormatOptions: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]],Microsoft.FSharp.Core.FSharpFunc`2[System.Boolean,Microsoft.FSharp.Core.Unit]]] AttributeProcessor +Internal.Utilities.StructuredFormat.FormatOptions: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]],Microsoft.FSharp.Core.FSharpFunc`2[System.Boolean,Microsoft.FSharp.Core.Unit]]] get_AttributeProcessor() +Internal.Utilities.StructuredFormat.FormatOptions: System.IFormatProvider FormatProvider +Internal.Utilities.StructuredFormat.FormatOptions: System.IFormatProvider get_FormatProvider() +Internal.Utilities.StructuredFormat.FormatOptions: System.Reflection.BindingFlags BindingFlags +Internal.Utilities.StructuredFormat.FormatOptions: System.Reflection.BindingFlags get_BindingFlags() +Internal.Utilities.StructuredFormat.FormatOptions: System.String FloatingPointFormat +Internal.Utilities.StructuredFormat.FormatOptions: System.String ToString() +Internal.Utilities.StructuredFormat.FormatOptions: System.String get_FloatingPointFormat() +Internal.Utilities.StructuredFormat.FormatOptions: Void .ctor(System.String, Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]],Microsoft.FSharp.Core.FSharpFunc`2[System.Boolean,Microsoft.FSharp.Core.Unit]]], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Core.FSharpFunc`2[Internal.Utilities.StructuredFormat.IEnvironment,Microsoft.FSharp.Core.FSharpFunc`2[System.Object,Microsoft.FSharp.Core.FSharpOption`1[Internal.Utilities.StructuredFormat.Layout]]]], Int32, System.IFormatProvider, System.Reflection.BindingFlags, Int32, Int32, Int32, Int32, Boolean, Boolean) +Internal.Utilities.StructuredFormat.IEnvironment: Int32 MaxColumns +Internal.Utilities.StructuredFormat.IEnvironment: Int32 MaxRows +Internal.Utilities.StructuredFormat.IEnvironment: Int32 get_MaxColumns() +Internal.Utilities.StructuredFormat.IEnvironment: Int32 get_MaxRows() +Internal.Utilities.StructuredFormat.IEnvironment: Internal.Utilities.StructuredFormat.Layout GetLayout(System.Object) +Internal.Utilities.StructuredFormat.Joint+Breakable: Boolean Equals(Internal.Utilities.StructuredFormat.Joint) +Internal.Utilities.StructuredFormat.Joint+Breakable: Boolean Equals(System.Object) +Internal.Utilities.StructuredFormat.Joint+Breakable: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Internal.Utilities.StructuredFormat.Joint+Breakable: Boolean IsBreakable +Internal.Utilities.StructuredFormat.Joint+Breakable: Boolean IsBroken +Internal.Utilities.StructuredFormat.Joint+Breakable: Boolean IsUnbreakable +Internal.Utilities.StructuredFormat.Joint+Breakable: Boolean get_IsBreakable() +Internal.Utilities.StructuredFormat.Joint+Breakable: Boolean get_IsBroken() +Internal.Utilities.StructuredFormat.Joint+Breakable: Boolean get_IsUnbreakable() +Internal.Utilities.StructuredFormat.Joint+Breakable: Int32 GetHashCode() +Internal.Utilities.StructuredFormat.Joint+Breakable: Int32 GetHashCode(System.Collections.IEqualityComparer) +Internal.Utilities.StructuredFormat.Joint+Breakable: Int32 Tag +Internal.Utilities.StructuredFormat.Joint+Breakable: Int32 get_Tag() +Internal.Utilities.StructuredFormat.Joint+Breakable: Int32 get_indentation() +Internal.Utilities.StructuredFormat.Joint+Breakable: Int32 indentation +Internal.Utilities.StructuredFormat.Joint+Breakable: System.String ToString() +Internal.Utilities.StructuredFormat.Joint+Broken: Boolean Equals(Internal.Utilities.StructuredFormat.Joint) +Internal.Utilities.StructuredFormat.Joint+Broken: Boolean Equals(System.Object) +Internal.Utilities.StructuredFormat.Joint+Broken: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Internal.Utilities.StructuredFormat.Joint+Broken: Boolean IsBreakable +Internal.Utilities.StructuredFormat.Joint+Broken: Boolean IsBroken +Internal.Utilities.StructuredFormat.Joint+Broken: Boolean IsUnbreakable +Internal.Utilities.StructuredFormat.Joint+Broken: Boolean get_IsBreakable() +Internal.Utilities.StructuredFormat.Joint+Broken: Boolean get_IsBroken() +Internal.Utilities.StructuredFormat.Joint+Broken: Boolean get_IsUnbreakable() +Internal.Utilities.StructuredFormat.Joint+Broken: Int32 GetHashCode() +Internal.Utilities.StructuredFormat.Joint+Broken: Int32 GetHashCode(System.Collections.IEqualityComparer) +Internal.Utilities.StructuredFormat.Joint+Broken: Int32 Tag +Internal.Utilities.StructuredFormat.Joint+Broken: Int32 get_Tag() +Internal.Utilities.StructuredFormat.Joint+Broken: Int32 get_indentation() +Internal.Utilities.StructuredFormat.Joint+Broken: Int32 indentation +Internal.Utilities.StructuredFormat.Joint+Broken: System.String ToString() +Internal.Utilities.StructuredFormat.Joint+Tags: Int32 Breakable +Internal.Utilities.StructuredFormat.Joint+Tags: Int32 Broken +Internal.Utilities.StructuredFormat.Joint+Tags: Int32 Unbreakable +Internal.Utilities.StructuredFormat.Joint: Boolean Equals(Internal.Utilities.StructuredFormat.Joint) +Internal.Utilities.StructuredFormat.Joint: Boolean Equals(System.Object) +Internal.Utilities.StructuredFormat.Joint: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Internal.Utilities.StructuredFormat.Joint: Boolean IsBreakable +Internal.Utilities.StructuredFormat.Joint: Boolean IsBroken +Internal.Utilities.StructuredFormat.Joint: Boolean IsUnbreakable +Internal.Utilities.StructuredFormat.Joint: Boolean get_IsBreakable() +Internal.Utilities.StructuredFormat.Joint: Boolean get_IsBroken() +Internal.Utilities.StructuredFormat.Joint: Boolean get_IsUnbreakable() +Internal.Utilities.StructuredFormat.Joint: Int32 GetHashCode() +Internal.Utilities.StructuredFormat.Joint: Int32 GetHashCode(System.Collections.IEqualityComparer) +Internal.Utilities.StructuredFormat.Joint: Int32 Tag +Internal.Utilities.StructuredFormat.Joint: Int32 get_Tag() +Internal.Utilities.StructuredFormat.Joint: Internal.Utilities.StructuredFormat.Joint NewBreakable(Int32) +Internal.Utilities.StructuredFormat.Joint: Internal.Utilities.StructuredFormat.Joint NewBroken(Int32) +Internal.Utilities.StructuredFormat.Joint: Internal.Utilities.StructuredFormat.Joint Unbreakable +Internal.Utilities.StructuredFormat.Joint: Internal.Utilities.StructuredFormat.Joint get_Unbreakable() +Internal.Utilities.StructuredFormat.Joint: Internal.Utilities.StructuredFormat.Joint+Breakable +Internal.Utilities.StructuredFormat.Joint: Internal.Utilities.StructuredFormat.Joint+Broken +Internal.Utilities.StructuredFormat.Joint: Internal.Utilities.StructuredFormat.Joint+Tags +Internal.Utilities.StructuredFormat.Joint: System.String ToString() +Internal.Utilities.StructuredFormat.Layout+Attr: Boolean IsAttr +Internal.Utilities.StructuredFormat.Layout+Attr: Boolean IsLeaf +Internal.Utilities.StructuredFormat.Layout+Attr: Boolean IsNode +Internal.Utilities.StructuredFormat.Layout+Attr: Boolean IsObjLeaf +Internal.Utilities.StructuredFormat.Layout+Attr: Boolean get_IsAttr() +Internal.Utilities.StructuredFormat.Layout+Attr: Boolean get_IsLeaf() +Internal.Utilities.StructuredFormat.Layout+Attr: Boolean get_IsNode() +Internal.Utilities.StructuredFormat.Layout+Attr: Boolean get_IsObjLeaf() +Internal.Utilities.StructuredFormat.Layout+Attr: Int32 Tag +Internal.Utilities.StructuredFormat.Layout+Attr: Int32 get_Tag() +Internal.Utilities.StructuredFormat.Layout+Attr: Internal.Utilities.StructuredFormat.Layout get_layout() +Internal.Utilities.StructuredFormat.Layout+Attr: Internal.Utilities.StructuredFormat.Layout layout +Internal.Utilities.StructuredFormat.Layout+Attr: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] attributes +Internal.Utilities.StructuredFormat.Layout+Attr: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] get_attributes() +Internal.Utilities.StructuredFormat.Layout+Attr: System.String ToString() +Internal.Utilities.StructuredFormat.Layout+Attr: System.String get_text() +Internal.Utilities.StructuredFormat.Layout+Attr: System.String text +Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean IsAttr +Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean IsLeaf +Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean IsNode +Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean IsObjLeaf +Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean get_IsAttr() +Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean get_IsLeaf() +Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean get_IsNode() +Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean get_IsObjLeaf() +Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean get_justRight() +Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean get_juxtLeft() +Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean justRight +Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean juxtLeft +Internal.Utilities.StructuredFormat.Layout+Leaf: Int32 Tag +Internal.Utilities.StructuredFormat.Layout+Leaf: Int32 get_Tag() +Internal.Utilities.StructuredFormat.Layout+Leaf: Internal.Utilities.StructuredFormat.TaggedText get_text() +Internal.Utilities.StructuredFormat.Layout+Leaf: Internal.Utilities.StructuredFormat.TaggedText text +Internal.Utilities.StructuredFormat.Layout+Leaf: System.String ToString() +Internal.Utilities.StructuredFormat.Layout+Node: Boolean IsAttr +Internal.Utilities.StructuredFormat.Layout+Node: Boolean IsLeaf +Internal.Utilities.StructuredFormat.Layout+Node: Boolean IsNode +Internal.Utilities.StructuredFormat.Layout+Node: Boolean IsObjLeaf +Internal.Utilities.StructuredFormat.Layout+Node: Boolean get_IsAttr() +Internal.Utilities.StructuredFormat.Layout+Node: Boolean get_IsLeaf() +Internal.Utilities.StructuredFormat.Layout+Node: Boolean get_IsNode() +Internal.Utilities.StructuredFormat.Layout+Node: Boolean get_IsObjLeaf() +Internal.Utilities.StructuredFormat.Layout+Node: Int32 Tag +Internal.Utilities.StructuredFormat.Layout+Node: Int32 get_Tag() +Internal.Utilities.StructuredFormat.Layout+Node: Internal.Utilities.StructuredFormat.Joint get_joint() +Internal.Utilities.StructuredFormat.Layout+Node: Internal.Utilities.StructuredFormat.Joint joint +Internal.Utilities.StructuredFormat.Layout+Node: Internal.Utilities.StructuredFormat.Layout get_leftLayout() +Internal.Utilities.StructuredFormat.Layout+Node: Internal.Utilities.StructuredFormat.Layout get_rightLayout() +Internal.Utilities.StructuredFormat.Layout+Node: Internal.Utilities.StructuredFormat.Layout leftLayout +Internal.Utilities.StructuredFormat.Layout+Node: Internal.Utilities.StructuredFormat.Layout rightLayout +Internal.Utilities.StructuredFormat.Layout+Node: System.String ToString() +Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean IsAttr +Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean IsLeaf +Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean IsNode +Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean IsObjLeaf +Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean get_IsAttr() +Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean get_IsLeaf() +Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean get_IsNode() +Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean get_IsObjLeaf() +Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean get_juxtLeft() +Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean get_juxtRight() +Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean juxtLeft +Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean juxtRight +Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Int32 Tag +Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Int32 get_Tag() +Internal.Utilities.StructuredFormat.Layout+ObjLeaf: System.Object get_object() +Internal.Utilities.StructuredFormat.Layout+ObjLeaf: System.Object object +Internal.Utilities.StructuredFormat.Layout+ObjLeaf: System.String ToString() +Internal.Utilities.StructuredFormat.Layout+Tags: Int32 Attr +Internal.Utilities.StructuredFormat.Layout+Tags: Int32 Leaf +Internal.Utilities.StructuredFormat.Layout+Tags: Int32 Node +Internal.Utilities.StructuredFormat.Layout+Tags: Int32 ObjLeaf +Internal.Utilities.StructuredFormat.Layout: Boolean IsAttr +Internal.Utilities.StructuredFormat.Layout: Boolean IsLeaf +Internal.Utilities.StructuredFormat.Layout: Boolean IsNode +Internal.Utilities.StructuredFormat.Layout: Boolean IsObjLeaf +Internal.Utilities.StructuredFormat.Layout: Boolean JuxtapositionMiddle(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) +Internal.Utilities.StructuredFormat.Layout: Boolean get_IsAttr() +Internal.Utilities.StructuredFormat.Layout: Boolean get_IsLeaf() +Internal.Utilities.StructuredFormat.Layout: Boolean get_IsNode() +Internal.Utilities.StructuredFormat.Layout: Boolean get_IsObjLeaf() +Internal.Utilities.StructuredFormat.Layout: Int32 Tag +Internal.Utilities.StructuredFormat.Layout: Int32 get_Tag() +Internal.Utilities.StructuredFormat.Layout: Internal.Utilities.StructuredFormat.Layout NewAttr(System.String, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]], Internal.Utilities.StructuredFormat.Layout) +Internal.Utilities.StructuredFormat.Layout: Internal.Utilities.StructuredFormat.Layout NewLeaf(Boolean, Internal.Utilities.StructuredFormat.TaggedText, Boolean) +Internal.Utilities.StructuredFormat.Layout: Internal.Utilities.StructuredFormat.Layout NewNode(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Joint) +Internal.Utilities.StructuredFormat.Layout: Internal.Utilities.StructuredFormat.Layout NewObjLeaf(Boolean, System.Object, Boolean) +Internal.Utilities.StructuredFormat.Layout: Internal.Utilities.StructuredFormat.Layout+Attr +Internal.Utilities.StructuredFormat.Layout: Internal.Utilities.StructuredFormat.Layout+Leaf +Internal.Utilities.StructuredFormat.Layout: Internal.Utilities.StructuredFormat.Layout+Node +Internal.Utilities.StructuredFormat.Layout: Internal.Utilities.StructuredFormat.Layout+ObjLeaf +Internal.Utilities.StructuredFormat.Layout: Internal.Utilities.StructuredFormat.Layout+Tags +Internal.Utilities.StructuredFormat.Layout: System.String ToString() +Internal.Utilities.StructuredFormat.LayoutOps: Boolean isEmptyL(Internal.Utilities.StructuredFormat.Layout) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout aboveL(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout aboveListL(Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout braceL(Internal.Utilities.StructuredFormat.Layout) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout bracketL(Internal.Utilities.StructuredFormat.Layout) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout commaListL(Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout emptyL +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout get_emptyL() +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout leftL(Internal.Utilities.StructuredFormat.TaggedText) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout listL[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Internal.Utilities.StructuredFormat.Layout], Microsoft.FSharp.Collections.FSharpList`1[T]) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout objL(System.Object) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout op_AtAt(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout op_AtAtMinus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout op_AtAtMinusMinus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout op_HatHat(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout op_MinusMinus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout op_MinusMinusMinus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout op_PlusPlus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout optionL[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Internal.Utilities.StructuredFormat.Layout], Microsoft.FSharp.Core.FSharpOption`1[T]) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout rightL(Internal.Utilities.StructuredFormat.TaggedText) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout semiListL(Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout sepL(Internal.Utilities.StructuredFormat.TaggedText) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout sepListL(Internal.Utilities.StructuredFormat.Layout, Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout spaceListL(Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout squareBracketL(Internal.Utilities.StructuredFormat.Layout) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout tagAttrL(System.String, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]], Internal.Utilities.StructuredFormat.Layout) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout tupleL(Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) +Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout wordL(Internal.Utilities.StructuredFormat.TaggedText) +Internal.Utilities.StructuredFormat.LayoutOps: Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout] unfoldL[T,State](Microsoft.FSharp.Core.FSharpFunc`2[T,Internal.Utilities.StructuredFormat.Layout], Microsoft.FSharp.Core.FSharpFunc`2[State,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,State]]], State, Int32) +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 ActivePatternCase +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 ActivePatternResult +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Alias +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Class +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Delegate +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Enum +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Event +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Field +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Interface +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Keyword +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 LineBreak +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Local +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Member +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Method +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Module +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 ModuleBinding +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Function +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Namespace +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 NumericLiteral +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Operator +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Parameter +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Property +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Punctuation +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Record +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 RecordField +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Space +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 StringLiteral +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Struct +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Text +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 TypeParameter +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Union +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 UnionCase +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 UnknownEntity +Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 UnknownType +Internal.Utilities.StructuredFormat.LayoutTag: Boolean Equals(Internal.Utilities.StructuredFormat.LayoutTag) +Internal.Utilities.StructuredFormat.LayoutTag: Boolean Equals(System.Object) +Internal.Utilities.StructuredFormat.LayoutTag: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsActivePatternCase +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsActivePatternResult +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsAlias +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsClass +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsDelegate +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsEnum +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsEvent +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsField +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsInterface +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsKeyword +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsLineBreak +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsLocal +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsMember +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsMethod +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsModule +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsModuleBinding +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsFunction +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsNamespace +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsNumericLiteral +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsOperator +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsParameter +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsProperty +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsPunctuation +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsRecord +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsRecordField +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsSpace +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsStringLiteral +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsStruct +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsText +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsTypeParameter +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsUnion +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsUnionCase +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsUnknownEntity +Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsUnknownType +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsActivePatternCase() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsActivePatternResult() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsAlias() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsClass() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsDelegate() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsEnum() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsEvent() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsField() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsInterface() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsKeyword() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsLineBreak() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsLocal() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsMember() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsMethod() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsModule() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsModuleBinding() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsFunction() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsNamespace() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsNumericLiteral() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsOperator() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsParameter() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsProperty() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsPunctuation() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsRecord() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsRecordField() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsSpace() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsStringLiteral() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsStruct() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsText() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsTypeParameter() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsUnion() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsUnionCase() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsUnknownEntity() +Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsUnknownType() +Internal.Utilities.StructuredFormat.LayoutTag: Int32 GetHashCode() +Internal.Utilities.StructuredFormat.LayoutTag: Int32 GetHashCode(System.Collections.IEqualityComparer) +Internal.Utilities.StructuredFormat.LayoutTag: Int32 Tag +Internal.Utilities.StructuredFormat.LayoutTag: Int32 get_Tag() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag ActivePatternCase +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag ActivePatternResult +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Alias +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Class +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Delegate +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Enum +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Event +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Field +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Interface +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Keyword +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag LineBreak +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Local +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Member +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Method +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Module +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag ModuleBinding +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Function +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Namespace +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag NumericLiteral +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Operator +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Parameter +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Property +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Punctuation +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Record +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag RecordField +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Space +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag StringLiteral +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Struct +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Text +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag TypeParameter +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Union +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag UnionCase +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag UnknownEntity +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag UnknownType +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_ActivePatternCase() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_ActivePatternResult() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Alias() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Class() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Delegate() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Enum() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Event() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Field() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Interface() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Keyword() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_LineBreak() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Local() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Member() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Method() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Module() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_ModuleBinding() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Function() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Namespace() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_NumericLiteral() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Operator() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Parameter() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Property() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Punctuation() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Record() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_RecordField() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Space() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_StringLiteral() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Struct() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Text() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_TypeParameter() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Union() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_UnionCase() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_UnknownEntity() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_UnknownType() +Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag+Tags +Internal.Utilities.StructuredFormat.LayoutTag: System.String ToString() +Internal.Utilities.StructuredFormat.TaggedText: Internal.Utilities.StructuredFormat.LayoutTag Tag +Internal.Utilities.StructuredFormat.TaggedText: Internal.Utilities.StructuredFormat.LayoutTag get_Tag() +Internal.Utilities.StructuredFormat.TaggedText: System.String Text +Internal.Utilities.StructuredFormat.TaggedText: System.String get_Text() +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText arrow +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText comma +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText equals +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_arrow() +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_comma() +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_equals() +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_leftBrace() +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_leftBraceBar() +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_leftBracket() +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_leftParen() +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_lineBreak() +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_questionMark() +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_rightBrace() +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_rightBraceBar() +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_rightBracket() +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_rightParen() +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_semicolon() +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_space() +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText leftBrace +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText leftBraceBar +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText leftBracket +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText leftParen +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText lineBreak +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText questionMark +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText rightBrace +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText rightBraceBar +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText rightBracket +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText rightParen +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText semicolon +Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText space +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText mkTag(Internal.Utilities.StructuredFormat.LayoutTag, System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagAlias(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagClass(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagDelegate(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagEnum(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagEvent(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagField(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagInterface(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagKeyword(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagLineBreak(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagLocal(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagMethod(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagModule(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagModuleBinding(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagFunction(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagNamespace(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagNumericLiteral(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagOperator(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagParameter(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagProperty(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagPunctuation(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagRecord(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagRecordField(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagSpace(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagStringLiteral(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagStruct(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagText(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagTypeParameter(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagUnionCase(System.String) +Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedTextOps+Literals +Internal.Utilities.StructuredFormat.TaggedTextOps: Microsoft.FSharp.Collections.FSharpSet`1[System.String] get_keywordFunctions() +Internal.Utilities.StructuredFormat.TaggedTextOps: Microsoft.FSharp.Collections.FSharpSet`1[System.String] keywordFunctions +Internal.Utilities.StructuredFormat.TaggedTextWriter: Void Write(Internal.Utilities.StructuredFormat.TaggedText) +Internal.Utilities.StructuredFormat.TaggedTextWriter: Void WriteLine() +Microsoft.DotNet.DependencyManager.AssemblyResolutionProbe: System.Collections.Generic.IEnumerable`1[System.String] EndInvoke(System.IAsyncResult) +Microsoft.DotNet.DependencyManager.AssemblyResolutionProbe: System.Collections.Generic.IEnumerable`1[System.String] Invoke() +Microsoft.DotNet.DependencyManager.AssemblyResolutionProbe: System.IAsyncResult BeginInvoke(System.AsyncCallback, System.Object) +Microsoft.DotNet.DependencyManager.AssemblyResolutionProbe: Void .ctor(System.Object, IntPtr) +Microsoft.DotNet.DependencyManager.AssemblyResolveHandler: Void .ctor(Microsoft.DotNet.DependencyManager.AssemblyResolutionProbe) +Microsoft.DotNet.DependencyManager.DependencyProvider: Microsoft.DotNet.DependencyManager.IDependencyManagerProvider TryFindDependencyManagerByKey(System.Collections.Generic.IEnumerable`1[System.String], System.String, Microsoft.DotNet.DependencyManager.ResolvingErrorReport, System.String) +Microsoft.DotNet.DependencyManager.DependencyProvider: Microsoft.DotNet.DependencyManager.IResolveDependenciesResult Resolve(Microsoft.DotNet.DependencyManager.IDependencyManagerProvider, System.String, System.Collections.Generic.IEnumerable`1[System.Tuple`2[System.String,System.String]], Microsoft.DotNet.DependencyManager.ResolvingErrorReport, System.String, System.String, System.String, System.String, System.String, Int32) +Microsoft.DotNet.DependencyManager.DependencyProvider: System.String[] GetRegisteredDependencyManagerHelpText(System.Collections.Generic.IEnumerable`1[System.String], System.String, Microsoft.DotNet.DependencyManager.ResolvingErrorReport) +Microsoft.DotNet.DependencyManager.DependencyProvider: System.Tuple`2[System.Int32,System.String] CreatePackageManagerUnknownError(System.Collections.Generic.IEnumerable`1[System.String], System.String, System.String, Microsoft.DotNet.DependencyManager.ResolvingErrorReport) +Microsoft.DotNet.DependencyManager.DependencyProvider: System.Tuple`2[System.String,Microsoft.DotNet.DependencyManager.IDependencyManagerProvider] TryFindDependencyManagerInPath(System.Collections.Generic.IEnumerable`1[System.String], System.String, Microsoft.DotNet.DependencyManager.ResolvingErrorReport, System.String) +Microsoft.DotNet.DependencyManager.DependencyProvider: Void .ctor(Microsoft.DotNet.DependencyManager.AssemblyResolutionProbe, Microsoft.DotNet.DependencyManager.NativeResolutionProbe) +Microsoft.DotNet.DependencyManager.DependencyProvider: Void .ctor(Microsoft.DotNet.DependencyManager.NativeResolutionProbe) +Microsoft.DotNet.DependencyManager.DependencyProvider: Void .ctor() +Microsoft.DotNet.DependencyManager.ErrorReportType+Tags: Int32 Error +Microsoft.DotNet.DependencyManager.ErrorReportType+Tags: Int32 Warning +Microsoft.DotNet.DependencyManager.ErrorReportType: Boolean Equals(Microsoft.DotNet.DependencyManager.ErrorReportType) +Microsoft.DotNet.DependencyManager.ErrorReportType: Boolean Equals(System.Object) +Microsoft.DotNet.DependencyManager.ErrorReportType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.DotNet.DependencyManager.ErrorReportType: Boolean IsError +Microsoft.DotNet.DependencyManager.ErrorReportType: Boolean IsWarning +Microsoft.DotNet.DependencyManager.ErrorReportType: Boolean get_IsError() +Microsoft.DotNet.DependencyManager.ErrorReportType: Boolean get_IsWarning() +Microsoft.DotNet.DependencyManager.ErrorReportType: Int32 CompareTo(Microsoft.DotNet.DependencyManager.ErrorReportType) +Microsoft.DotNet.DependencyManager.ErrorReportType: Int32 CompareTo(System.Object) +Microsoft.DotNet.DependencyManager.ErrorReportType: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.DotNet.DependencyManager.ErrorReportType: Int32 GetHashCode() +Microsoft.DotNet.DependencyManager.ErrorReportType: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.DotNet.DependencyManager.ErrorReportType: Int32 Tag +Microsoft.DotNet.DependencyManager.ErrorReportType: Int32 get_Tag() +Microsoft.DotNet.DependencyManager.ErrorReportType: Microsoft.DotNet.DependencyManager.ErrorReportType Error +Microsoft.DotNet.DependencyManager.ErrorReportType: Microsoft.DotNet.DependencyManager.ErrorReportType Warning +Microsoft.DotNet.DependencyManager.ErrorReportType: Microsoft.DotNet.DependencyManager.ErrorReportType get_Error() +Microsoft.DotNet.DependencyManager.ErrorReportType: Microsoft.DotNet.DependencyManager.ErrorReportType get_Warning() +Microsoft.DotNet.DependencyManager.ErrorReportType: Microsoft.DotNet.DependencyManager.ErrorReportType+Tags +Microsoft.DotNet.DependencyManager.ErrorReportType: System.String ToString() +Microsoft.DotNet.DependencyManager.IDependencyManagerProvider: Microsoft.DotNet.DependencyManager.IResolveDependenciesResult ResolveDependencies(System.String, System.String, System.String, System.String, System.Collections.Generic.IEnumerable`1[System.Tuple`2[System.String,System.String]], System.String, System.String, Int32) +Microsoft.DotNet.DependencyManager.IDependencyManagerProvider: System.String Key +Microsoft.DotNet.DependencyManager.IDependencyManagerProvider: System.String Name +Microsoft.DotNet.DependencyManager.IDependencyManagerProvider: System.String get_Key() +Microsoft.DotNet.DependencyManager.IDependencyManagerProvider: System.String get_Name() +Microsoft.DotNet.DependencyManager.IDependencyManagerProvider: System.String[] HelpMessages +Microsoft.DotNet.DependencyManager.IDependencyManagerProvider: System.String[] get_HelpMessages() +Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: Boolean Success +Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: Boolean get_Success() +Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] Resolutions +Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] Roots +Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] SourceFiles +Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] get_Resolutions() +Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] get_Roots() +Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] get_SourceFiles() +Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: System.String[] StdError +Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: System.String[] StdOut +Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: System.String[] get_StdError() +Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: System.String[] get_StdOut() +Microsoft.DotNet.DependencyManager.NativeDllResolveHandler: Void .ctor(Microsoft.DotNet.DependencyManager.NativeResolutionProbe) +Microsoft.DotNet.DependencyManager.NativeResolutionProbe: System.Collections.Generic.IEnumerable`1[System.String] EndInvoke(System.IAsyncResult) +Microsoft.DotNet.DependencyManager.NativeResolutionProbe: System.Collections.Generic.IEnumerable`1[System.String] Invoke() +Microsoft.DotNet.DependencyManager.NativeResolutionProbe: System.IAsyncResult BeginInvoke(System.AsyncCallback, System.Object) +Microsoft.DotNet.DependencyManager.NativeResolutionProbe: Void .ctor(System.Object, IntPtr) +Microsoft.DotNet.DependencyManager.ResolvingErrorReport: System.IAsyncResult BeginInvoke(Microsoft.DotNet.DependencyManager.ErrorReportType, Int32, System.String, System.AsyncCallback, System.Object) +Microsoft.DotNet.DependencyManager.ResolvingErrorReport: Void .ctor(System.Object, IntPtr) +Microsoft.DotNet.DependencyManager.ResolvingErrorReport: Void EndInvoke(System.IAsyncResult) +Microsoft.DotNet.DependencyManager.ResolvingErrorReport: Void Invoke(Microsoft.DotNet.DependencyManager.ErrorReportType, Int32, System.String) +FSharp.Compiler.ErrorLogger: System.IDisposable PushErrorLoggerPhaseUntilUnwind[?](Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.ErrorLogger+ErrorLogger,?]) +FSharp.Compiler.ErrorLogger: Void ReportWarnings[?](Microsoft.FSharp.Collections.FSharpList`1[?]) +FSharp.Compiler.ParseHelpers: ILInstr[] ParseAssemblyCodeInstructions(System.String, range) +FSharp.Compiler.PrettyNaming: Internal.Utilities.StructuredFormat.Layout DemangleOperatorNameAsLayout[?](Microsoft.FSharp.Core.FSharpFunc`2[System.String,?], System.String) +FSharp.Compiler.SourceCodeServices.CompilerDiagnostics: System.String getErrorMessage(FSharp.Compiler.SourceCodeServices.DiagnosticKind) +FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Boolean Equals(FSharp.Compiler.SourceCodeServices.DiagnosticKind) +FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Boolean IsAddIndexerDot +FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Boolean IsReplaceWithSuggestion +FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Boolean get_IsAddIndexerDot() +FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Boolean get_IsReplaceWithSuggestion() +FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.DiagnosticKind) +FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Int32 Tag +FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: System.String ToString() +FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: System.String get_suggestion() +FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: System.String suggestion +FSharp.Compiler.SourceCodeServices.DiagnosticKind+Tags: Int32 AddIndexerDot +FSharp.Compiler.SourceCodeServices.DiagnosticKind+Tags: Int32 ReplaceWithSuggestion +FSharp.Compiler.SourceCodeServices.DiagnosticKind: Boolean Equals(FSharp.Compiler.SourceCodeServices.DiagnosticKind) +FSharp.Compiler.SourceCodeServices.DiagnosticKind: Boolean Equals(System.Object) +FSharp.Compiler.SourceCodeServices.DiagnosticKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.DiagnosticKind: Boolean IsAddIndexerDot +FSharp.Compiler.SourceCodeServices.DiagnosticKind: Boolean IsReplaceWithSuggestion +FSharp.Compiler.SourceCodeServices.DiagnosticKind: Boolean get_IsAddIndexerDot() +FSharp.Compiler.SourceCodeServices.DiagnosticKind: Boolean get_IsReplaceWithSuggestion() +FSharp.Compiler.SourceCodeServices.DiagnosticKind: FSharp.Compiler.SourceCodeServices.DiagnosticKind AddIndexerDot +FSharp.Compiler.SourceCodeServices.DiagnosticKind: FSharp.Compiler.SourceCodeServices.DiagnosticKind NewReplaceWithSuggestion(System.String) +FSharp.Compiler.SourceCodeServices.DiagnosticKind: FSharp.Compiler.SourceCodeServices.DiagnosticKind get_AddIndexerDot() +FSharp.Compiler.SourceCodeServices.DiagnosticKind: FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion +FSharp.Compiler.SourceCodeServices.DiagnosticKind: FSharp.Compiler.SourceCodeServices.DiagnosticKind+Tags +FSharp.Compiler.SourceCodeServices.DiagnosticKind: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.DiagnosticKind) +FSharp.Compiler.SourceCodeServices.DiagnosticKind: Int32 CompareTo(System.Object) +FSharp.Compiler.SourceCodeServices.DiagnosticKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.SourceCodeServices.DiagnosticKind: Int32 GetHashCode() +FSharp.Compiler.SourceCodeServices.DiagnosticKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.SourceCodeServices.DiagnosticKind: Int32 Tag +FSharp.Compiler.SourceCodeServices.DiagnosticKind: Int32 get_Tag() +FSharp.Compiler.SourceCodeServices.DiagnosticKind: System.String ToString() +FSharp.Compiler.SourceCodeServices.ErrorResolutionHints: System.Collections.Generic.IEnumerable`1[System.String] getSuggestedNames(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit], System.String)" SurfaceArea.verify expected "netstandard" (System.IO.Path.Combine(__SOURCE_DIRECTORY__,__SOURCE_FILE__)) diff --git a/tests/FSharp.Compiler.UnitTests/AssemblySigningAttributes.fs b/tests/FSharp.Compiler.UnitTests/AssemblySigningAttributes.fs deleted file mode 100644 index 450c3b771de..00000000000 --- a/tests/FSharp.Compiler.UnitTests/AssemblySigningAttributes.fs +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.UnitTests - -open Xunit -open FSharp.Test.Utilities.Compiler -open FSharp.Test.Utilities.Xunit.Attributes -open FSharp.Test.Utilities - -module AssemblySigning = - -#if !NETCOREAPP - [] -#endif - let ``--keycontainer:name DESKTOP`` () = - FSharp """ -module SignMe - -open System -open System.Reflection - - """ - |> withOptions ["--keycontainer:myContainer"] - |> compile - |> shouldFail - |> withWarningCode 0075 - |> withDiagnosticMessageMatches "The command-line option '--keycontainer' has been deprecated. Use '--keyfile' instead." - |> ignore - -#if NETCOREAPP - [] -#endif - let ``--keycontainer:name NETCOREAPP`` () = - FSharp """ -module SignMe - -open System -open System.Reflection - - """ - |> withOptions ["--keycontainer:myContainer"] - |> compile - |> shouldFail - |> withErrorCode 3393 - |> withDiagnosticMessageMatches "Key container signing is not supported on this platform." - |> ignore - - //Expects: warning FS3392: The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. -#if !NETCOREAPP - [] -#endif - let ``AssemblyKeyNameAttribute DESKTOP`` () = - FSharp """ -module SignMe - -open System -open System.Reflection - -[] -do () - """ - |> asFs - |> compile - |> shouldFail - |> withWarningCode 3392 - |> withDiagnosticMessageMatches "The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead." - |> ignore - - //Expects: warning FS3392: The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. -#if NETCOREAPP - [] -#endif - let ``AssemblyKeyNameAttribute NETCOREAPP`` () = - FSharp """ -module SignMe - -open System -open System.Reflection - -[] -do () - """ - |> asFs - |> compile - |> shouldFail - |> withErrorCode 2014 - |> withDiagnosticMessageMatches "A call to StrongNameGetPublicKey failed" - |> ignore diff --git a/tests/FSharp.Compiler.UnitTests/BuildGraphTests.fs b/tests/FSharp.Compiler.UnitTests/BuildGraphTests.fs deleted file mode 100644 index e46d4e88f4f..00000000000 --- a/tests/FSharp.Compiler.UnitTests/BuildGraphTests.fs +++ /dev/null @@ -1,273 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.UnitTests - -open System -open System.Threading -open System.Runtime.CompilerServices -open Xunit -open FSharp.Test.Utilities -open FSharp.Compiler.BuildGraph -open Internal.Utilities.Library - -module BuildGraphTests = - - [] - let private createNode () = - let o = obj () - GraphNode(node { - Assert.shouldBeTrue (o <> null) - return 1 - }), WeakReference(o) - - [] - let ``Intialization of graph node should not have a computed value``() = - let node = GraphNode(node { return 1 }) - Assert.shouldBeTrue(node.TryPeekValue().IsNone) - Assert.shouldBeFalse(node.HasValue) - - [] - let ``Two requests to get a value asynchronously should be successful``() = - let resetEvent = new ManualResetEvent(false) - let resetEventInAsync = new ManualResetEvent(false) - - let graphNode = - GraphNode(node { - resetEventInAsync.Set() |> ignore - let! _ = NodeCode.AwaitWaitHandle_ForTesting(resetEvent) - return 1 - }) - - let task1 = - node { - let! _ = graphNode.GetOrComputeValue() - () - } |> NodeCode.StartAsTask_ForTesting - - let task2 = - node { - let! _ = graphNode.GetOrComputeValue() - () - } |> NodeCode.StartAsTask_ForTesting - - resetEventInAsync.WaitOne() |> ignore - resetEvent.Set() |> ignore - try - task1.Wait(1000) |> ignore - task2.Wait() |> ignore - with - | :? TimeoutException -> reraise() - | _ -> () - - [] - let ``Many requests to get a value asynchronously should only evaluate the computation once``() = - let requests = 10000 - let mutable computationCount = 0 - - let graphNode = - GraphNode(node { - computationCount <- computationCount + 1 - return 1 - }) - - let work = Async.Parallel(Array.init requests (fun _ -> graphNode.GetOrComputeValue() |> Async.AwaitNodeCode)) - - Async.RunSynchronously(work) - |> ignore - - Assert.shouldBe 1 computationCount - - [] - let ``Many requests to get a value asynchronously should get the correct value``() = - let requests = 10000 - - let graphNode = GraphNode(node { return 1 }) - - let work = Async.Parallel(Array.init requests (fun _ -> graphNode.GetOrComputeValue() |> Async.AwaitNodeCode)) - - let result = Async.RunSynchronously(work) - - Assert.shouldNotBeEmpty result - Assert.shouldBe requests result.Length - result - |> Seq.iter (Assert.shouldBe 1) - - [] - let ``A request to get a value asynchronously should have its computation cleaned up by the GC``() = - let graphNode, weak = createNode () - - GC.Collect(2, GCCollectionMode.Forced, true) - - Assert.shouldBeTrue weak.IsAlive - - NodeCode.RunImmediateWithoutCancellation(graphNode.GetOrComputeValue()) - |> ignore - - GC.Collect(2, GCCollectionMode.Forced, true) - - Assert.shouldBeFalse weak.IsAlive - - [] - let ``Many requests to get a value asynchronously should have its computation cleaned up by the GC``() = - let requests = 10000 - - let graphNode, weak = createNode () - - GC.Collect(2, GCCollectionMode.Forced, true) - - Assert.shouldBeTrue weak.IsAlive - - Async.RunSynchronously(Async.Parallel(Array.init requests (fun _ -> graphNode.GetOrComputeValue() |> Async.AwaitNodeCode))) - |> ignore - - GC.Collect(2, GCCollectionMode.Forced, true) - - Assert.shouldBeFalse weak.IsAlive - - [] - let ``A request can cancel``() = - let graphNode = - GraphNode(node { - return 1 - }) - - use cts = new CancellationTokenSource() - - let work = - node { - cts.Cancel() - return! graphNode.GetOrComputeValue() - } - - let ex = - try - NodeCode.RunImmediate(work, ct = cts.Token) - |> ignore - failwith "Should have canceled" - with - | :? OperationCanceledException as ex -> - ex - - Assert.shouldBeTrue(ex <> null) - - [] - let ``A request can cancel 2``() = - let resetEvent = new ManualResetEvent(false) - - let graphNode = - GraphNode(node { - let! _ = NodeCode.AwaitWaitHandle_ForTesting(resetEvent) - return 1 - }) - - use cts = new CancellationTokenSource() - - let task = - node { - cts.Cancel() - resetEvent.Set() |> ignore - } - |> NodeCode.StartAsTask_ForTesting - - let ex = - try - NodeCode.RunImmediate(graphNode.GetOrComputeValue(), ct = cts.Token) - |> ignore - failwith "Should have canceled" - with - | :? OperationCanceledException as ex -> - ex - - Assert.shouldBeTrue(ex <> null) - try task.Wait(1000) |> ignore with | :? TimeoutException -> reraise() | _ -> () - - [] - let ``Many requests to get a value asynchronously might evaluate the computation more than once even when some requests get canceled``() = - let requests = 10000 - let resetEvent = new ManualResetEvent(false) - let mutable computationCountBeforeSleep = 0 - let mutable computationCount = 0 - - let graphNode = - GraphNode(node { - computationCountBeforeSleep <- computationCountBeforeSleep + 1 - let! _ = NodeCode.AwaitWaitHandle_ForTesting(resetEvent) - computationCount <- computationCount + 1 - return 1 - }) - - use cts = new CancellationTokenSource() - - let work = - node { - let! _ = graphNode.GetOrComputeValue() - () - } - - let tasks = ResizeArray() - - for i = 0 to requests - 1 do - if i % 10 = 0 then - NodeCode.StartAsTask_ForTesting(work, ct = cts.Token) - |> tasks.Add - else - NodeCode.StartAsTask_ForTesting(work) - |> tasks.Add - - cts.Cancel() - resetEvent.Set() |> ignore - NodeCode.RunImmediateWithoutCancellation(work) - |> ignore - - Assert.shouldBeTrue cts.IsCancellationRequested - Assert.shouldBeTrue(computationCountBeforeSleep > 0) - Assert.shouldBeTrue(computationCount >= 0) - - tasks - |> Seq.iter (fun x -> - try x.Wait(1000) |> ignore with | :? TimeoutException -> reraise() | _ -> ()) - - [] - let ``No-RetryCompute - Many requests to get a value asynchronously should only evaluate the computation once even when some requests get canceled``() = - let requests = 10000 - let resetEvent = new ManualResetEvent(false) - let mutable computationCountBeforeSleep = 0 - let mutable computationCount = 0 - - let graphNode = - GraphNode(false, node { - computationCountBeforeSleep <- computationCountBeforeSleep + 1 - let! _ = NodeCode.AwaitWaitHandle_ForTesting(resetEvent) - computationCount <- computationCount + 1 - return 1 - }) - - use cts = new CancellationTokenSource() - - let work = - node { - let! _ = graphNode.GetOrComputeValue() - () - } - - let tasks = ResizeArray() - - for i = 0 to requests - 1 do - if i % 10 = 0 then - NodeCode.StartAsTask_ForTesting(work, ct = cts.Token) - |> tasks.Add - else - NodeCode.StartAsTask_ForTesting(work) - |> tasks.Add - - cts.Cancel() - resetEvent.Set() |> ignore - NodeCode.RunImmediateWithoutCancellation(work) - |> ignore - - Assert.shouldBeTrue cts.IsCancellationRequested - Assert.shouldBe 1 computationCountBeforeSleep - Assert.shouldBe 1 computationCount - - tasks - |> Seq.iter (fun x -> - try x.Wait(1000) |> ignore with | :? TimeoutException -> reraise() | _ -> ()) diff --git a/tests/FSharp.Compiler.UnitTests/ByteMemoryTests.fs b/tests/FSharp.Compiler.UnitTests/ByteMemoryTests.fs index 70653ed68fb..d9e8ac0617f 100644 --- a/tests/FSharp.Compiler.UnitTests/ByteMemoryTests.fs +++ b/tests/FSharp.Compiler.UnitTests/ByteMemoryTests.fs @@ -6,11 +6,12 @@ open System.Globalization open Xunit open FSharp.Test.Utilities + module ByteMemoryTests = - open FSharp.Compiler.IO + open FSharp.Compiler.AbstractIL.Internal [] let ``ByteMemory.CreateMemoryMappedFile succeeds with byte length of zero``() = let memory = ByteMemory.Empty.AsReadOnly() let newMemory = ByteStorage.FromByteMemoryAndCopy(memory, useBackingMemoryMappedFile = true).GetByteMemory() - Assert.shouldBe(0, newMemory.Length) + Assert.shouldBe(0, newMemory.Length) \ No newline at end of file diff --git a/tests/FSharp.Compiler.UnitTests/CompilerTestHelpers.fs b/tests/FSharp.Compiler.UnitTests/CompilerTestHelpers.fs index bc4b3f9f0bc..1ac573a84e2 100644 --- a/tests/FSharp.Compiler.UnitTests/CompilerTestHelpers.fs +++ b/tests/FSharp.Compiler.UnitTests/CompilerTestHelpers.fs @@ -6,4 +6,5 @@ module CompilerTestHelpers = let (|Warning|_|) (exn: System.Exception) = match exn with | :? FSharp.Compiler.ErrorLogger.Error as e -> let n,d = e.Data0 in Some (n,d) + | :? FSharp.Compiler.ErrorLogger.NumberedError as e -> let n,d = e.Data0 in Some (n,d) | _ -> None diff --git a/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj b/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj index c3d3ca35aec..996ee46b4a3 100644 --- a/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj +++ b/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj @@ -3,13 +3,13 @@ - net472;net5.0 - net5.0 + net472;netcoreapp3.1 + netcoreapp3.1 Library true $(DefineConstants);ASSUME_PREVIEW_FSHARP_CORE xunit - $(NoWarn);57;3186;1104 + $(NoWarn);3186;1104 @@ -24,9 +24,8 @@ - - + CompilerService\FsUnit.fs @@ -80,7 +79,7 @@ - + diff --git a/tests/FSharp.Compiler.UnitTests/HashIfExpression.fs b/tests/FSharp.Compiler.UnitTests/HashIfExpression.fs index 201c3291902..705ce465b1d 100644 --- a/tests/FSharp.Compiler.UnitTests/HashIfExpression.fs +++ b/tests/FSharp.Compiler.UnitTests/HashIfExpression.fs @@ -12,13 +12,12 @@ open Internal.Utilities open Internal.Utilities.Text.Lexing open FSharp.Compiler -open FSharp.Compiler.Diagnostics open FSharp.Compiler.Lexer open FSharp.Compiler.Lexhelp open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features open FSharp.Compiler.ParseHelpers -open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTree type public HashIfExpression() = let preludes = [|"#if "; "#elif "|] @@ -56,7 +55,7 @@ type public HashIfExpression() = let errorLogger = { new ErrorLogger("TestErrorLogger") with - member x.DiagnosticSink(e, sev) = if sev = FSharpDiagnosticSeverity.Error then errors.Add e else warnings.Add e + member x.DiagnosticSink(e, isError) = if isError then errors.Add e else warnings.Add e member x.ErrorCount = errors.Count } @@ -70,7 +69,7 @@ type public HashIfExpression() = let parser (s : string) = let isFeatureSupported (_featureId:LanguageFeature) = true - let lexbuf = LexBuffer.FromChars (true, isFeatureSupported, s.ToCharArray ()) + let lexbuf = LexBuffer.FromChars (isFeatureSupported, s.ToCharArray ()) lexbuf.StartPos <- startPos lexbuf.EndPos <- startPos let tokenStream = PPLexer.tokenstream args diff --git a/tests/FSharp.Compiler.UnitTests/ManglingNameOfProvidedTypes.fs b/tests/FSharp.Compiler.UnitTests/ManglingNameOfProvidedTypes.fs index 3060590986a..675a8cda713 100644 --- a/tests/FSharp.Compiler.UnitTests/ManglingNameOfProvidedTypes.fs +++ b/tests/FSharp.Compiler.UnitTests/ManglingNameOfProvidedTypes.fs @@ -5,7 +5,8 @@ open System open System.Text open Xunit open FSharp.Test.Utilities -open FSharp.Compiler.Syntax +open FSharp.Compiler + type ManglingNamesOfProvidedTypesWithSingleParameter() = diff --git a/tests/FSharp.Compiler.UnitTests/ProductVersion.fs b/tests/FSharp.Compiler.UnitTests/ProductVersion.fs index bc91de7a3f4..9e2f934ef1f 100644 --- a/tests/FSharp.Compiler.UnitTests/ProductVersion.fs +++ b/tests/FSharp.Compiler.UnitTests/ProductVersion.fs @@ -57,7 +57,7 @@ module ProductVersionTest = productVersion (fun _ -> None) (ILVersionInfo(3us,2us,1us,0us)) |> Assert.shouldBe "3.2.1.0" productVersion (fun _ -> Some "") (ILVersionInfo(3us,2us,1us,0us)) |> Assert.shouldBe "3.2.1.0" - let internal validValues () = + let validValues () = let max = System.UInt16.MaxValue [ "1.2.3.4", ILVersionInfo(1us,2us,3us,4us) "1.0.3.4", ILVersionInfo(1us,0us,3us,4us) @@ -71,7 +71,7 @@ module ProductVersionTest = for (v, expected) in validValues() do v |> productVersionToILVersionInfo |> Assert.shouldBe expected - let internal invalidValues () = + let invalidValues () = [ "1.2.3.4", ILVersionInfo(1us,2us,3us,4us) "1.2.3.4a", ILVersionInfo(1us,2us,3us,4us) "1.2.c3.4", ILVersionInfo(1us,2us,0us,4us) diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj b/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj index 75d013df43e..91c24d90293 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj +++ b/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj @@ -3,8 +3,8 @@ - net472;net5.0 - net5.0 + net472;netcoreapp3.1 + netcoreapp3.1 Library FSharp.Core.UnitTests @@ -35,7 +35,7 @@ - + @@ -74,7 +74,6 @@ - diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/ComparersRegression.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/ComparersRegression.fs index cb74c489da0..730458035fb 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/ComparersRegression.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/ComparersRegression.fs @@ -1573,19 +1573,19 @@ module ComparersRegression = let toint b = if b then 1 else 0 type EqualityOperations<'a when 'a : equality>() = - member inline _.equals = { new IOperation<'a> with member _.Exec lhs rhs = toint (HashIdentity.Structural.Equals(lhs,rhs)) } - member inline _.equal = { new IOperation<'a> with member _.Exec lhs rhs = toint (lhs = rhs) } - member inline _.not_equal = { new IOperation<'a> with member _.Exec lhs rhs = toint (lhs <> rhs) } + member inline __.equals = { new IOperation<'a> with member __.Exec lhs rhs = toint (HashIdentity.Structural.Equals(lhs,rhs)) } + member inline __.equal = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs = rhs) } + member inline __.not_equal = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs <> rhs) } type ComparisonOperations<'a when 'a : comparison>() = - member inline _.equals = { new IOperation<'a> with member _.Exec lhs rhs = toint (HashIdentity.Structural.Equals(lhs,rhs)) } - member inline _.equal = { new IOperation<'a> with member _.Exec lhs rhs = toint (lhs = rhs) } - member inline _.not_equal = { new IOperation<'a> with member _.Exec lhs rhs = toint (lhs <> rhs) } - member inline _.compare = { new IOperation<'a> with member _.Exec lhs rhs = ComparisonIdentity.Structural.Compare(lhs,rhs) } - member inline _.less_than = { new IOperation<'a> with member _.Exec lhs rhs = toint (lhs < rhs) } - member inline _.less_or_equal = { new IOperation<'a> with member _.Exec lhs rhs = toint (lhs <= rhs) } - member inline _.greater_than = { new IOperation<'a> with member _.Exec lhs rhs = toint (lhs > rhs) } - member inline _.greater_or_equal = { new IOperation<'a> with member _.Exec lhs rhs = toint (lhs >= rhs) } + member inline __.equals = { new IOperation<'a> with member __.Exec lhs rhs = toint (HashIdentity.Structural.Equals(lhs,rhs)) } + member inline __.equal = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs = rhs) } + member inline __.not_equal = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs <> rhs) } + member inline __.compare = { new IOperation<'a> with member __.Exec lhs rhs = ComparisonIdentity.Structural.Compare(lhs,rhs) } + member inline __.less_than = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs < rhs) } + member inline __.less_or_equal = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs <= rhs) } + member inline __.greater_than = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs > rhs) } + member inline __.greater_or_equal = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs >= rhs) } type NoninlinableEqualityOperations<'a when 'a : equality>() = let operations = @@ -1594,9 +1594,9 @@ module ComparersRegression = | :? EqualityOperations<'a> as operations -> operations | _ -> failwith "" - member _.equals = operations.equals - member _.equal = operations.equal - member _.not_equal = operations.not_equal + member __.equals = operations.equals + member __.equal = operations.equal + member __.not_equal = operations.not_equal type NoninlinableComparisonOperations<'a when 'a : comparison>() = let operations = @@ -1605,14 +1605,14 @@ module ComparersRegression = | :? ComparisonOperations<'a> as operations -> operations | _ -> failwith "" - member _.equals = operations.equals - member _.equal = operations.equal - member _.not_equal = operations.not_equal - member _.compare = operations.compare - member _.less_than = operations.less_than - member _.less_or_equal = operations.less_or_equal - member _.greater_than = operations.greater_than - member _.greater_or_equal = operations.greater_or_equal + member __.equals = operations.equals + member __.equal = operations.equal + member __.not_equal = operations.not_equal + member __.compare = operations.compare + member __.less_than = operations.less_than + member __.less_or_equal = operations.less_or_equal + member __.greater_than = operations.greater_than + member __.greater_or_equal = operations.greater_or_equal type E<'a when 'a : equality>() = static let inlinable = EqualityOperations<'a> () @@ -1631,7 +1631,7 @@ module ComparersRegression = #if !NETSTANDARD1_6 && !NETCOREAPP let create<'a,'b when 'b : equality> name operation (f:IOperation<'a>) (items:array<'a>) = printf """ [] - member _.``%s %s``() = + member __.``%s %s``() = validate (%s) %s """ name operation name operation make_result_set f items None @@ -1753,391 +1753,391 @@ type GeneratedTests () = // -- The following should be generated by running CreateComparersRegression.fsx // ------------------------------------------------------------------------------ [] - member _.``Bools.Collection.Array C.I.equals``() = + member __.``Bools.Collection.Array C.I.equals``() = validate (Bools.Collection.Array) C.I.equals [| 1;0;0;1 |] [] - member _.``Bools.Collection.Array C.I.equal``() = + member __.``Bools.Collection.Array C.I.equal``() = validate (Bools.Collection.Array) C.I.equal [| 1;0;0;1 |] [] - member _.``Bools.Collection.Array C.I.not_equal``() = + member __.``Bools.Collection.Array C.I.not_equal``() = validate (Bools.Collection.Array) C.I.not_equal [| 0;1;1;0 |] [] - member _.``Bools.Collection.Array C.I.compare``() = + member __.``Bools.Collection.Array C.I.compare``() = validate (Bools.Collection.Array) C.I.compare [| 0;1;-1;0 |] [] - member _.``Bools.Collection.Array C.I.less_than``() = + member __.``Bools.Collection.Array C.I.less_than``() = validate (Bools.Collection.Array) C.I.less_than [| 0;0;1;0 |] [] - member _.``Bools.Collection.Array C.I.less_or_equal``() = + member __.``Bools.Collection.Array C.I.less_or_equal``() = validate (Bools.Collection.Array) C.I.less_or_equal [| 1;0;1;1 |] [] - member _.``Bools.Collection.Array C.I.greater_than``() = + member __.``Bools.Collection.Array C.I.greater_than``() = validate (Bools.Collection.Array) C.I.greater_than [| 0;1;0;0 |] [] - member _.``Bools.Collection.Array C.I.greater_or_equal``() = + member __.``Bools.Collection.Array C.I.greater_or_equal``() = validate (Bools.Collection.Array) C.I.greater_or_equal [| 1;1;0;1 |] [] - member _.``Bools.Collection.Array C.N.equals``() = + member __.``Bools.Collection.Array C.N.equals``() = validate (Bools.Collection.Array) C.N.equals [| 1;0;0;1 |] [] - member _.``Bools.Collection.Array C.N.equal``() = + member __.``Bools.Collection.Array C.N.equal``() = validate (Bools.Collection.Array) C.N.equal [| 1;0;0;1 |] [] - member _.``Bools.Collection.Array C.N.not_equal``() = + member __.``Bools.Collection.Array C.N.not_equal``() = validate (Bools.Collection.Array) C.N.not_equal [| 0;1;1;0 |] [] - member _.``Bools.Collection.Array C.N.compare``() = + member __.``Bools.Collection.Array C.N.compare``() = validate (Bools.Collection.Array) C.N.compare [| 0;1;-1;0 |] [] - member _.``Bools.Collection.Array C.N.less_than``() = + member __.``Bools.Collection.Array C.N.less_than``() = validate (Bools.Collection.Array) C.N.less_than [| 0;0;1;0 |] [] - member _.``Bools.Collection.Array C.N.less_or_equal``() = + member __.``Bools.Collection.Array C.N.less_or_equal``() = validate (Bools.Collection.Array) C.N.less_or_equal [| 1;0;1;1 |] [] - member _.``Bools.Collection.Array C.N.greater_than``() = + member __.``Bools.Collection.Array C.N.greater_than``() = validate (Bools.Collection.Array) C.N.greater_than [| 0;1;0;0 |] [] - member _.``Bools.Collection.Array C.N.greater_or_equal``() = + member __.``Bools.Collection.Array C.N.greater_or_equal``() = validate (Bools.Collection.Array) C.N.greater_or_equal [| 1;1;0;1 |] [] - member _.``Bools.Collection.OptionArray C.I.equals``() = + member __.``Bools.Collection.OptionArray C.I.equals``() = validate (Bools.Collection.OptionArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``Bools.Collection.OptionArray C.I.equal``() = + member __.``Bools.Collection.OptionArray C.I.equal``() = validate (Bools.Collection.OptionArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``Bools.Collection.OptionArray C.I.not_equal``() = + member __.``Bools.Collection.OptionArray C.I.not_equal``() = validate (Bools.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``Bools.Collection.OptionArray C.I.compare``() = + member __.``Bools.Collection.OptionArray C.I.compare``() = validate (Bools.Collection.OptionArray) C.I.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member _.``Bools.Collection.OptionArray C.I.less_than``() = + member __.``Bools.Collection.OptionArray C.I.less_than``() = validate (Bools.Collection.OptionArray) C.I.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member _.``Bools.Collection.OptionArray C.I.less_or_equal``() = + member __.``Bools.Collection.OptionArray C.I.less_or_equal``() = validate (Bools.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member _.``Bools.Collection.OptionArray C.I.greater_than``() = + member __.``Bools.Collection.OptionArray C.I.greater_than``() = validate (Bools.Collection.OptionArray) C.I.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member _.``Bools.Collection.OptionArray C.I.greater_or_equal``() = + member __.``Bools.Collection.OptionArray C.I.greater_or_equal``() = validate (Bools.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member _.``Bools.Collection.OptionArray C.N.equals``() = + member __.``Bools.Collection.OptionArray C.N.equals``() = validate (Bools.Collection.OptionArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``Bools.Collection.OptionArray C.N.equal``() = + member __.``Bools.Collection.OptionArray C.N.equal``() = validate (Bools.Collection.OptionArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``Bools.Collection.OptionArray C.N.not_equal``() = + member __.``Bools.Collection.OptionArray C.N.not_equal``() = validate (Bools.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``Bools.Collection.OptionArray C.N.compare``() = + member __.``Bools.Collection.OptionArray C.N.compare``() = validate (Bools.Collection.OptionArray) C.N.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member _.``Bools.Collection.OptionArray C.N.less_than``() = + member __.``Bools.Collection.OptionArray C.N.less_than``() = validate (Bools.Collection.OptionArray) C.N.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member _.``Bools.Collection.OptionArray C.N.less_or_equal``() = + member __.``Bools.Collection.OptionArray C.N.less_or_equal``() = validate (Bools.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member _.``Bools.Collection.OptionArray C.N.greater_than``() = + member __.``Bools.Collection.OptionArray C.N.greater_than``() = validate (Bools.Collection.OptionArray) C.N.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member _.``Bools.Collection.OptionArray C.N.greater_or_equal``() = + member __.``Bools.Collection.OptionArray C.N.greater_or_equal``() = validate (Bools.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member _.``Bools.Collection.RefArray C.I.equals``() = + member __.``Bools.Collection.RefArray C.I.equals``() = validate (Bools.Collection.RefArray) C.I.equals [| 1;0;0;1 |] [] - member _.``Bools.Collection.RefArray C.I.equal``() = + member __.``Bools.Collection.RefArray C.I.equal``() = validate (Bools.Collection.RefArray) C.I.equal [| 1;0;0;1 |] [] - member _.``Bools.Collection.RefArray C.I.not_equal``() = + member __.``Bools.Collection.RefArray C.I.not_equal``() = validate (Bools.Collection.RefArray) C.I.not_equal [| 0;1;1;0 |] [] - member _.``Bools.Collection.RefArray C.I.compare``() = + member __.``Bools.Collection.RefArray C.I.compare``() = validate (Bools.Collection.RefArray) C.I.compare [| 0;1;-1;0 |] [] - member _.``Bools.Collection.RefArray C.I.less_than``() = + member __.``Bools.Collection.RefArray C.I.less_than``() = validate (Bools.Collection.RefArray) C.I.less_than [| 0;0;1;0 |] [] - member _.``Bools.Collection.RefArray C.I.less_or_equal``() = + member __.``Bools.Collection.RefArray C.I.less_or_equal``() = validate (Bools.Collection.RefArray) C.I.less_or_equal [| 1;0;1;1 |] [] - member _.``Bools.Collection.RefArray C.I.greater_than``() = + member __.``Bools.Collection.RefArray C.I.greater_than``() = validate (Bools.Collection.RefArray) C.I.greater_than [| 0;1;0;0 |] [] - member _.``Bools.Collection.RefArray C.I.greater_or_equal``() = + member __.``Bools.Collection.RefArray C.I.greater_or_equal``() = validate (Bools.Collection.RefArray) C.I.greater_or_equal [| 1;1;0;1 |] [] - member _.``Bools.Collection.RefArray C.N.equals``() = + member __.``Bools.Collection.RefArray C.N.equals``() = validate (Bools.Collection.RefArray) C.N.equals [| 1;0;0;1 |] [] - member _.``Bools.Collection.RefArray C.N.equal``() = + member __.``Bools.Collection.RefArray C.N.equal``() = validate (Bools.Collection.RefArray) C.N.equal [| 1;0;0;1 |] [] - member _.``Bools.Collection.RefArray C.N.not_equal``() = + member __.``Bools.Collection.RefArray C.N.not_equal``() = validate (Bools.Collection.RefArray) C.N.not_equal [| 0;1;1;0 |] [] - member _.``Bools.Collection.RefArray C.N.compare``() = + member __.``Bools.Collection.RefArray C.N.compare``() = validate (Bools.Collection.RefArray) C.N.compare [| 0;1;-1;0 |] [] - member _.``Bools.Collection.RefArray C.N.less_than``() = + member __.``Bools.Collection.RefArray C.N.less_than``() = validate (Bools.Collection.RefArray) C.N.less_than [| 0;0;1;0 |] [] - member _.``Bools.Collection.RefArray C.N.less_or_equal``() = + member __.``Bools.Collection.RefArray C.N.less_or_equal``() = validate (Bools.Collection.RefArray) C.N.less_or_equal [| 1;0;1;1 |] [] - member _.``Bools.Collection.RefArray C.N.greater_than``() = + member __.``Bools.Collection.RefArray C.N.greater_than``() = validate (Bools.Collection.RefArray) C.N.greater_than [| 0;1;0;0 |] [] - member _.``Bools.Collection.RefArray C.N.greater_or_equal``() = + member __.``Bools.Collection.RefArray C.N.greater_or_equal``() = validate (Bools.Collection.RefArray) C.N.greater_or_equal [| 1;1;0;1 |] [] - member _.``Bools.Collection.RefWrapArray C.I.equals``() = + member __.``Bools.Collection.RefWrapArray C.I.equals``() = validate (Bools.Collection.RefWrapArray) C.I.equals [| 1;0;0;1 |] [] - member _.``Bools.Collection.RefWrapArray C.I.equal``() = + member __.``Bools.Collection.RefWrapArray C.I.equal``() = validate (Bools.Collection.RefWrapArray) C.I.equal [| 1;0;0;1 |] [] - member _.``Bools.Collection.RefWrapArray C.I.not_equal``() = + member __.``Bools.Collection.RefWrapArray C.I.not_equal``() = validate (Bools.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;0 |] [] - member _.``Bools.Collection.RefWrapArray C.I.compare``() = + member __.``Bools.Collection.RefWrapArray C.I.compare``() = validate (Bools.Collection.RefWrapArray) C.I.compare [| 0;1;-1;0 |] [] - member _.``Bools.Collection.RefWrapArray C.I.less_than``() = + member __.``Bools.Collection.RefWrapArray C.I.less_than``() = validate (Bools.Collection.RefWrapArray) C.I.less_than [| 0;0;1;0 |] [] - member _.``Bools.Collection.RefWrapArray C.I.less_or_equal``() = + member __.``Bools.Collection.RefWrapArray C.I.less_or_equal``() = validate (Bools.Collection.RefWrapArray) C.I.less_or_equal [| 1;0;1;1 |] [] - member _.``Bools.Collection.RefWrapArray C.I.greater_than``() = + member __.``Bools.Collection.RefWrapArray C.I.greater_than``() = validate (Bools.Collection.RefWrapArray) C.I.greater_than [| 0;1;0;0 |] [] - member _.``Bools.Collection.RefWrapArray C.I.greater_or_equal``() = + member __.``Bools.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Bools.Collection.RefWrapArray) C.I.greater_or_equal [| 1;1;0;1 |] [] - member _.``Bools.Collection.RefWrapArray C.N.equals``() = + member __.``Bools.Collection.RefWrapArray C.N.equals``() = validate (Bools.Collection.RefWrapArray) C.N.equals [| 1;0;0;1 |] [] - member _.``Bools.Collection.RefWrapArray C.N.equal``() = + member __.``Bools.Collection.RefWrapArray C.N.equal``() = validate (Bools.Collection.RefWrapArray) C.N.equal [| 1;0;0;1 |] [] - member _.``Bools.Collection.RefWrapArray C.N.not_equal``() = + member __.``Bools.Collection.RefWrapArray C.N.not_equal``() = validate (Bools.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;0 |] [] - member _.``Bools.Collection.RefWrapArray C.N.compare``() = + member __.``Bools.Collection.RefWrapArray C.N.compare``() = validate (Bools.Collection.RefWrapArray) C.N.compare [| 0;1;-1;0 |] [] - member _.``Bools.Collection.RefWrapArray C.N.less_than``() = + member __.``Bools.Collection.RefWrapArray C.N.less_than``() = validate (Bools.Collection.RefWrapArray) C.N.less_than [| 0;0;1;0 |] [] - member _.``Bools.Collection.RefWrapArray C.N.less_or_equal``() = + member __.``Bools.Collection.RefWrapArray C.N.less_or_equal``() = validate (Bools.Collection.RefWrapArray) C.N.less_or_equal [| 1;0;1;1 |] [] - member _.``Bools.Collection.RefWrapArray C.N.greater_than``() = + member __.``Bools.Collection.RefWrapArray C.N.greater_than``() = validate (Bools.Collection.RefWrapArray) C.N.greater_than [| 0;1;0;0 |] [] - member _.``Bools.Collection.RefWrapArray C.N.greater_or_equal``() = + member __.``Bools.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Bools.Collection.RefWrapArray) C.N.greater_or_equal [| 1;1;0;1 |] [] - member _.``Bools.Collection.UnionArray C.I.equals``() = + member __.``Bools.Collection.UnionArray C.I.equals``() = validate (Bools.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -2147,7 +2147,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionArray C.I.equal``() = + member __.``Bools.Collection.UnionArray C.I.equal``() = validate (Bools.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -2157,7 +2157,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionArray C.I.not_equal``() = + member __.``Bools.Collection.UnionArray C.I.not_equal``() = validate (Bools.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -2167,7 +2167,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionArray C.I.compare``() = + member __.``Bools.Collection.UnionArray C.I.compare``() = validate (Bools.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1; -1;-1;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;0;-1;3;2;1; @@ -2177,7 +2177,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionArray C.I.less_than``() = + member __.``Bools.Collection.UnionArray C.I.less_than``() = validate (Bools.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0; @@ -2187,7 +2187,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionArray C.I.less_or_equal``() = + member __.``Bools.Collection.UnionArray C.I.less_or_equal``() = validate (Bools.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; @@ -2197,7 +2197,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionArray C.I.greater_than``() = + member __.``Bools.Collection.UnionArray C.I.greater_than``() = validate (Bools.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; @@ -2207,7 +2207,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionArray C.I.greater_or_equal``() = + member __.``Bools.Collection.UnionArray C.I.greater_or_equal``() = validate (Bools.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; @@ -2217,7 +2217,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionArray C.N.equals``() = + member __.``Bools.Collection.UnionArray C.N.equals``() = validate (Bools.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -2227,7 +2227,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionArray C.N.equal``() = + member __.``Bools.Collection.UnionArray C.N.equal``() = validate (Bools.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -2237,7 +2237,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionArray C.N.not_equal``() = + member __.``Bools.Collection.UnionArray C.N.not_equal``() = validate (Bools.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -2247,7 +2247,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionArray C.N.compare``() = + member __.``Bools.Collection.UnionArray C.N.compare``() = validate (Bools.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1; -1;-1;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;0;-1;3;2;1; @@ -2257,7 +2257,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionArray C.N.less_than``() = + member __.``Bools.Collection.UnionArray C.N.less_than``() = validate (Bools.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0; @@ -2267,7 +2267,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionArray C.N.less_or_equal``() = + member __.``Bools.Collection.UnionArray C.N.less_or_equal``() = validate (Bools.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; @@ -2277,7 +2277,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionArray C.N.greater_than``() = + member __.``Bools.Collection.UnionArray C.N.greater_than``() = validate (Bools.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; @@ -2287,7 +2287,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionArray C.N.greater_or_equal``() = + member __.``Bools.Collection.UnionArray C.N.greater_or_equal``() = validate (Bools.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; @@ -2297,7 +2297,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionWrapArray C.I.equals``() = + member __.``Bools.Collection.UnionWrapArray C.I.equals``() = validate (Bools.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -2307,7 +2307,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionWrapArray C.I.equal``() = + member __.``Bools.Collection.UnionWrapArray C.I.equal``() = validate (Bools.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -2317,7 +2317,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionWrapArray C.I.not_equal``() = + member __.``Bools.Collection.UnionWrapArray C.I.not_equal``() = validate (Bools.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -2327,7 +2327,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionWrapArray C.I.compare``() = + member __.``Bools.Collection.UnionWrapArray C.I.compare``() = validate (Bools.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1; -1;-1;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;0;-1;3;2;1; @@ -2337,7 +2337,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionWrapArray C.I.less_than``() = + member __.``Bools.Collection.UnionWrapArray C.I.less_than``() = validate (Bools.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0; @@ -2347,7 +2347,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionWrapArray C.I.less_or_equal``() = + member __.``Bools.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Bools.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; @@ -2357,7 +2357,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionWrapArray C.I.greater_than``() = + member __.``Bools.Collection.UnionWrapArray C.I.greater_than``() = validate (Bools.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; @@ -2367,7 +2367,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionWrapArray C.I.greater_or_equal``() = + member __.``Bools.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Bools.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; @@ -2377,7 +2377,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionWrapArray C.N.equals``() = + member __.``Bools.Collection.UnionWrapArray C.N.equals``() = validate (Bools.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -2387,7 +2387,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionWrapArray C.N.equal``() = + member __.``Bools.Collection.UnionWrapArray C.N.equal``() = validate (Bools.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -2397,7 +2397,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionWrapArray C.N.not_equal``() = + member __.``Bools.Collection.UnionWrapArray C.N.not_equal``() = validate (Bools.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -2407,7 +2407,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionWrapArray C.N.compare``() = + member __.``Bools.Collection.UnionWrapArray C.N.compare``() = validate (Bools.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1; -1;-1;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;0;-1;3;2;1; @@ -2417,7 +2417,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionWrapArray C.N.less_than``() = + member __.``Bools.Collection.UnionWrapArray C.N.less_than``() = validate (Bools.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0; @@ -2427,7 +2427,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionWrapArray C.N.less_or_equal``() = + member __.``Bools.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Bools.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; @@ -2437,7 +2437,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionWrapArray C.N.greater_than``() = + member __.``Bools.Collection.UnionWrapArray C.N.greater_than``() = validate (Bools.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; @@ -2447,7 +2447,7 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.UnionWrapArray C.N.greater_or_equal``() = + member __.``Bools.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Bools.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; @@ -2457,631 +2457,631 @@ type GeneratedTests () = |] [] - member _.``Bools.Collection.ValueArray C.I.equals``() = + member __.``Bools.Collection.ValueArray C.I.equals``() = validate (Bools.Collection.ValueArray) C.I.equals [| 1;0;0;1 |] [] - member _.``Bools.Collection.ValueArray C.I.equal``() = + member __.``Bools.Collection.ValueArray C.I.equal``() = validate (Bools.Collection.ValueArray) C.I.equal [| 1;0;0;1 |] [] - member _.``Bools.Collection.ValueArray C.I.not_equal``() = + member __.``Bools.Collection.ValueArray C.I.not_equal``() = validate (Bools.Collection.ValueArray) C.I.not_equal [| 0;1;1;0 |] [] - member _.``Bools.Collection.ValueArray C.I.compare``() = + member __.``Bools.Collection.ValueArray C.I.compare``() = validate (Bools.Collection.ValueArray) C.I.compare [| 0;1;-1;0 |] [] - member _.``Bools.Collection.ValueArray C.I.less_than``() = + member __.``Bools.Collection.ValueArray C.I.less_than``() = validate (Bools.Collection.ValueArray) C.I.less_than [| 0;0;1;0 |] [] - member _.``Bools.Collection.ValueArray C.I.less_or_equal``() = + member __.``Bools.Collection.ValueArray C.I.less_or_equal``() = validate (Bools.Collection.ValueArray) C.I.less_or_equal [| 1;0;1;1 |] [] - member _.``Bools.Collection.ValueArray C.I.greater_than``() = + member __.``Bools.Collection.ValueArray C.I.greater_than``() = validate (Bools.Collection.ValueArray) C.I.greater_than [| 0;1;0;0 |] [] - member _.``Bools.Collection.ValueArray C.I.greater_or_equal``() = + member __.``Bools.Collection.ValueArray C.I.greater_or_equal``() = validate (Bools.Collection.ValueArray) C.I.greater_or_equal [| 1;1;0;1 |] [] - member _.``Bools.Collection.ValueArray C.N.equals``() = + member __.``Bools.Collection.ValueArray C.N.equals``() = validate (Bools.Collection.ValueArray) C.N.equals [| 1;0;0;1 |] [] - member _.``Bools.Collection.ValueArray C.N.equal``() = + member __.``Bools.Collection.ValueArray C.N.equal``() = validate (Bools.Collection.ValueArray) C.N.equal [| 1;0;0;1 |] [] - member _.``Bools.Collection.ValueArray C.N.not_equal``() = + member __.``Bools.Collection.ValueArray C.N.not_equal``() = validate (Bools.Collection.ValueArray) C.N.not_equal [| 0;1;1;0 |] [] - member _.``Bools.Collection.ValueArray C.N.compare``() = + member __.``Bools.Collection.ValueArray C.N.compare``() = validate (Bools.Collection.ValueArray) C.N.compare [| 0;1;-1;0 |] [] - member _.``Bools.Collection.ValueArray C.N.less_than``() = + member __.``Bools.Collection.ValueArray C.N.less_than``() = validate (Bools.Collection.ValueArray) C.N.less_than [| 0;0;1;0 |] [] - member _.``Bools.Collection.ValueArray C.N.less_or_equal``() = + member __.``Bools.Collection.ValueArray C.N.less_or_equal``() = validate (Bools.Collection.ValueArray) C.N.less_or_equal [| 1;0;1;1 |] [] - member _.``Bools.Collection.ValueArray C.N.greater_than``() = + member __.``Bools.Collection.ValueArray C.N.greater_than``() = validate (Bools.Collection.ValueArray) C.N.greater_than [| 0;1;0;0 |] [] - member _.``Bools.Collection.ValueArray C.N.greater_or_equal``() = + member __.``Bools.Collection.ValueArray C.N.greater_or_equal``() = validate (Bools.Collection.ValueArray) C.N.greater_or_equal [| 1;1;0;1 |] [] - member _.``Bools.Collection.ValueWrapArray C.I.equals``() = + member __.``Bools.Collection.ValueWrapArray C.I.equals``() = validate (Bools.Collection.ValueWrapArray) C.I.equals [| 1;0;0;1 |] [] - member _.``Bools.Collection.ValueWrapArray C.I.equal``() = + member __.``Bools.Collection.ValueWrapArray C.I.equal``() = validate (Bools.Collection.ValueWrapArray) C.I.equal [| 1;0;0;1 |] [] - member _.``Bools.Collection.ValueWrapArray C.I.not_equal``() = + member __.``Bools.Collection.ValueWrapArray C.I.not_equal``() = validate (Bools.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;0 |] [] - member _.``Bools.Collection.ValueWrapArray C.I.compare``() = + member __.``Bools.Collection.ValueWrapArray C.I.compare``() = validate (Bools.Collection.ValueWrapArray) C.I.compare [| 0;1;-1;0 |] [] - member _.``Bools.Collection.ValueWrapArray C.I.less_than``() = + member __.``Bools.Collection.ValueWrapArray C.I.less_than``() = validate (Bools.Collection.ValueWrapArray) C.I.less_than [| 0;0;1;0 |] [] - member _.``Bools.Collection.ValueWrapArray C.I.less_or_equal``() = + member __.``Bools.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Bools.Collection.ValueWrapArray) C.I.less_or_equal [| 1;0;1;1 |] [] - member _.``Bools.Collection.ValueWrapArray C.I.greater_than``() = + member __.``Bools.Collection.ValueWrapArray C.I.greater_than``() = validate (Bools.Collection.ValueWrapArray) C.I.greater_than [| 0;1;0;0 |] [] - member _.``Bools.Collection.ValueWrapArray C.I.greater_or_equal``() = + member __.``Bools.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Bools.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;1;0;1 |] [] - member _.``Bools.Collection.ValueWrapArray C.N.equals``() = + member __.``Bools.Collection.ValueWrapArray C.N.equals``() = validate (Bools.Collection.ValueWrapArray) C.N.equals [| 1;0;0;1 |] [] - member _.``Bools.Collection.ValueWrapArray C.N.equal``() = + member __.``Bools.Collection.ValueWrapArray C.N.equal``() = validate (Bools.Collection.ValueWrapArray) C.N.equal [| 1;0;0;1 |] [] - member _.``Bools.Collection.ValueWrapArray C.N.not_equal``() = + member __.``Bools.Collection.ValueWrapArray C.N.not_equal``() = validate (Bools.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;0 |] [] - member _.``Bools.Collection.ValueWrapArray C.N.compare``() = + member __.``Bools.Collection.ValueWrapArray C.N.compare``() = validate (Bools.Collection.ValueWrapArray) C.N.compare [| 0;1;-1;0 |] [] - member _.``Bools.Collection.ValueWrapArray C.N.less_than``() = + member __.``Bools.Collection.ValueWrapArray C.N.less_than``() = validate (Bools.Collection.ValueWrapArray) C.N.less_than [| 0;0;1;0 |] [] - member _.``Bools.Collection.ValueWrapArray C.N.less_or_equal``() = + member __.``Bools.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Bools.Collection.ValueWrapArray) C.N.less_or_equal [| 1;0;1;1 |] [] - member _.``Bools.Collection.ValueWrapArray C.N.greater_than``() = + member __.``Bools.Collection.ValueWrapArray C.N.greater_than``() = validate (Bools.Collection.ValueWrapArray) C.N.greater_than [| 0;1;0;0 |] [] - member _.``Bools.Collection.ValueWrapArray C.N.greater_or_equal``() = + member __.``Bools.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Bools.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;1;0;1 |] [] - member _.``Bools.Collection.ArrayArray C.I.equals``() = + member __.``Bools.Collection.ArrayArray C.I.equals``() = validate (Bools.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``Bools.Collection.ArrayArray C.I.equal``() = + member __.``Bools.Collection.ArrayArray C.I.equal``() = validate (Bools.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``Bools.Collection.ArrayArray C.I.not_equal``() = + member __.``Bools.Collection.ArrayArray C.I.not_equal``() = validate (Bools.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``Bools.Collection.ArrayArray C.I.compare``() = + member __.``Bools.Collection.ArrayArray C.I.compare``() = validate (Bools.Collection.ArrayArray) C.I.compare [| 0;1;-1;-1;-1;0;-1;-1;1;1;0;1;1;1;-1;0 |] [] - member _.``Bools.Collection.ArrayArray C.I.less_than``() = + member __.``Bools.Collection.ArrayArray C.I.less_than``() = validate (Bools.Collection.ArrayArray) C.I.less_than [| 0;0;1;1;1;0;1;1;0;0;0;0;0;0;1;0 |] [] - member _.``Bools.Collection.ArrayArray C.I.less_or_equal``() = + member __.``Bools.Collection.ArrayArray C.I.less_or_equal``() = validate (Bools.Collection.ArrayArray) C.I.less_or_equal [| 1;0;1;1;1;1;1;1;0;0;1;0;0;0;1;1 |] [] - member _.``Bools.Collection.ArrayArray C.I.greater_than``() = + member __.``Bools.Collection.ArrayArray C.I.greater_than``() = validate (Bools.Collection.ArrayArray) C.I.greater_than [| 0;1;0;0;0;0;0;0;1;1;0;1;1;1;0;0 |] [] - member _.``Bools.Collection.ArrayArray C.I.greater_or_equal``() = + member __.``Bools.Collection.ArrayArray C.I.greater_or_equal``() = validate (Bools.Collection.ArrayArray) C.I.greater_or_equal [| 1;1;0;0;0;1;0;0;1;1;1;1;1;1;0;1 |] [] - member _.``Bools.Collection.ArrayArray C.N.equals``() = + member __.``Bools.Collection.ArrayArray C.N.equals``() = validate (Bools.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``Bools.Collection.ArrayArray C.N.equal``() = + member __.``Bools.Collection.ArrayArray C.N.equal``() = validate (Bools.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``Bools.Collection.ArrayArray C.N.not_equal``() = + member __.``Bools.Collection.ArrayArray C.N.not_equal``() = validate (Bools.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``Bools.Collection.ArrayArray C.N.compare``() = + member __.``Bools.Collection.ArrayArray C.N.compare``() = validate (Bools.Collection.ArrayArray) C.N.compare [| 0;1;-1;-1;-1;0;-1;-1;1;1;0;1;1;1;-1;0 |] [] - member _.``Bools.Collection.ArrayArray C.N.less_than``() = + member __.``Bools.Collection.ArrayArray C.N.less_than``() = validate (Bools.Collection.ArrayArray) C.N.less_than [| 0;0;1;1;1;0;1;1;0;0;0;0;0;0;1;0 |] [] - member _.``Bools.Collection.ArrayArray C.N.less_or_equal``() = + member __.``Bools.Collection.ArrayArray C.N.less_or_equal``() = validate (Bools.Collection.ArrayArray) C.N.less_or_equal [| 1;0;1;1;1;1;1;1;0;0;1;0;0;0;1;1 |] [] - member _.``Bools.Collection.ArrayArray C.N.greater_than``() = + member __.``Bools.Collection.ArrayArray C.N.greater_than``() = validate (Bools.Collection.ArrayArray) C.N.greater_than [| 0;1;0;0;0;0;0;0;1;1;0;1;1;1;0;0 |] [] - member _.``Bools.Collection.ArrayArray C.N.greater_or_equal``() = + member __.``Bools.Collection.ArrayArray C.N.greater_or_equal``() = validate (Bools.Collection.ArrayArray) C.N.greater_or_equal [| 1;1;0;0;0;1;0;0;1;1;1;1;1;1;0;1 |] [] - member _.``Bools.Collection.ListArray C.I.equals``() = + member __.``Bools.Collection.ListArray C.I.equals``() = validate (Bools.Collection.ListArray) C.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``Bools.Collection.ListArray C.I.equal``() = + member __.``Bools.Collection.ListArray C.I.equal``() = validate (Bools.Collection.ListArray) C.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``Bools.Collection.ListArray C.I.not_equal``() = + member __.``Bools.Collection.ListArray C.I.not_equal``() = validate (Bools.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``Bools.Collection.ListArray C.I.compare``() = + member __.``Bools.Collection.ListArray C.I.compare``() = validate (Bools.Collection.ListArray) C.I.compare [| 0;1;-1;1;-1;0;-1;-1;1;1;0;1;-1;1;-1;0 |] [] - member _.``Bools.Collection.ListArray C.I.less_than``() = + member __.``Bools.Collection.ListArray C.I.less_than``() = validate (Bools.Collection.ListArray) C.I.less_than [| 0;0;1;0;1;0;1;1;0;0;0;0;1;0;1;0 |] [] - member _.``Bools.Collection.ListArray C.I.less_or_equal``() = + member __.``Bools.Collection.ListArray C.I.less_or_equal``() = validate (Bools.Collection.ListArray) C.I.less_or_equal [| 1;0;1;0;1;1;1;1;0;0;1;0;1;0;1;1 |] [] - member _.``Bools.Collection.ListArray C.I.greater_than``() = + member __.``Bools.Collection.ListArray C.I.greater_than``() = validate (Bools.Collection.ListArray) C.I.greater_than [| 0;1;0;1;0;0;0;0;1;1;0;1;0;1;0;0 |] [] - member _.``Bools.Collection.ListArray C.I.greater_or_equal``() = + member __.``Bools.Collection.ListArray C.I.greater_or_equal``() = validate (Bools.Collection.ListArray) C.I.greater_or_equal [| 1;1;0;1;0;1;0;0;1;1;1;1;0;1;0;1 |] [] - member _.``Bools.Collection.ListArray C.N.equals``() = + member __.``Bools.Collection.ListArray C.N.equals``() = validate (Bools.Collection.ListArray) C.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``Bools.Collection.ListArray C.N.equal``() = + member __.``Bools.Collection.ListArray C.N.equal``() = validate (Bools.Collection.ListArray) C.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``Bools.Collection.ListArray C.N.not_equal``() = + member __.``Bools.Collection.ListArray C.N.not_equal``() = validate (Bools.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``Bools.Collection.ListArray C.N.compare``() = + member __.``Bools.Collection.ListArray C.N.compare``() = validate (Bools.Collection.ListArray) C.N.compare [| 0;1;-1;1;-1;0;-1;-1;1;1;0;1;-1;1;-1;0 |] [] - member _.``Bools.Collection.ListArray C.N.less_than``() = + member __.``Bools.Collection.ListArray C.N.less_than``() = validate (Bools.Collection.ListArray) C.N.less_than [| 0;0;1;0;1;0;1;1;0;0;0;0;1;0;1;0 |] [] - member _.``Bools.Collection.ListArray C.N.less_or_equal``() = + member __.``Bools.Collection.ListArray C.N.less_or_equal``() = validate (Bools.Collection.ListArray) C.N.less_or_equal [| 1;0;1;0;1;1;1;1;0;0;1;0;1;0;1;1 |] [] - member _.``Bools.Collection.ListArray C.N.greater_than``() = + member __.``Bools.Collection.ListArray C.N.greater_than``() = validate (Bools.Collection.ListArray) C.N.greater_than [| 0;1;0;1;0;0;0;0;1;1;0;1;0;1;0;0 |] [] - member _.``Bools.Collection.ListArray C.N.greater_or_equal``() = + member __.``Bools.Collection.ListArray C.N.greater_or_equal``() = validate (Bools.Collection.ListArray) C.N.greater_or_equal [| 1;1;0;1;0;1;0;0;1;1;1;1;0;1;0;1 |] [] - member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1 |] [] - member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1 |] [] - member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;0;1;1;0;0 |] [] - member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;1;1;1;-1;0;-1;-1;-1;1;0;0;-1;1;0;0 |] [] - member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;0;0;0;1;0;1;1;1;0;0;0;1;0;0;0 |] [] - member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;0;0;0;1;1;1;1;1;0;1;1;1;0;1;1 |] [] - member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;1;1;1;0;0;0;0;0;1;0;0;0;1;0;0 |] [] - member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;1;1;1;0;1;0;0;0;1;1;1;0;1;1;1 |] [] - member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1 |] [] - member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1 |] [] - member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;0;1;1;0;0 |] [] - member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;1;1;1;-1;0;-1;-1;-1;1;0;0;-1;1;0;0 |] [] - member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;0;0;0;1;0;1;1;1;0;0;0;1;0;0;0 |] [] - member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;0;0;0;1;1;1;1;1;0;1;1;1;0;1;1 |] [] - member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;1;1;1;0;0;0;0;0;1;0;0;0;1;0;0 |] [] - member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;1;1;1;0;1;0;0;0;1;1;1;0;1;1;1 |] [] - member _.``NullableBools.Collection.Array E.I.equals``() = + member __.``NullableBools.Collection.Array E.I.equals``() = validate (NullableBools.Collection.Array) E.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NullableBools.Collection.Array E.I.equal``() = + member __.``NullableBools.Collection.Array E.I.equal``() = validate (NullableBools.Collection.Array) E.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NullableBools.Collection.Array E.I.not_equal``() = + member __.``NullableBools.Collection.Array E.I.not_equal``() = validate (NullableBools.Collection.Array) E.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``NullableBools.Collection.Array E.N.equals``() = + member __.``NullableBools.Collection.Array E.N.equals``() = validate (NullableBools.Collection.Array) E.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NullableBools.Collection.Array E.N.equal``() = + member __.``NullableBools.Collection.Array E.N.equal``() = validate (NullableBools.Collection.Array) E.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NullableBools.Collection.Array E.N.not_equal``() = + member __.``NullableBools.Collection.Array E.N.not_equal``() = validate (NullableBools.Collection.Array) E.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``NullableBools.Collection.OptionArray E.I.equals``() = + member __.``NullableBools.Collection.OptionArray E.I.equals``() = validate (NullableBools.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableBools.Collection.OptionArray E.I.equal``() = + member __.``NullableBools.Collection.OptionArray E.I.equal``() = validate (NullableBools.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableBools.Collection.OptionArray E.I.not_equal``() = + member __.``NullableBools.Collection.OptionArray E.I.not_equal``() = validate (NullableBools.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableBools.Collection.OptionArray E.N.equals``() = + member __.``NullableBools.Collection.OptionArray E.N.equals``() = validate (NullableBools.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableBools.Collection.OptionArray E.N.equal``() = + member __.``NullableBools.Collection.OptionArray E.N.equal``() = validate (NullableBools.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableBools.Collection.OptionArray E.N.not_equal``() = + member __.``NullableBools.Collection.OptionArray E.N.not_equal``() = validate (NullableBools.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableBools.Collection.RefArray E.I.equals``() = + member __.``NullableBools.Collection.RefArray E.I.equals``() = validate (NullableBools.Collection.RefArray) E.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NullableBools.Collection.RefArray E.I.equal``() = + member __.``NullableBools.Collection.RefArray E.I.equal``() = validate (NullableBools.Collection.RefArray) E.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NullableBools.Collection.RefArray E.I.not_equal``() = + member __.``NullableBools.Collection.RefArray E.I.not_equal``() = validate (NullableBools.Collection.RefArray) E.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``NullableBools.Collection.RefArray E.N.equals``() = + member __.``NullableBools.Collection.RefArray E.N.equals``() = validate (NullableBools.Collection.RefArray) E.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NullableBools.Collection.RefArray E.N.equal``() = + member __.``NullableBools.Collection.RefArray E.N.equal``() = validate (NullableBools.Collection.RefArray) E.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NullableBools.Collection.RefArray E.N.not_equal``() = + member __.``NullableBools.Collection.RefArray E.N.not_equal``() = validate (NullableBools.Collection.RefArray) E.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``NullableBools.Collection.RefWrapArray E.I.equals``() = + member __.``NullableBools.Collection.RefWrapArray E.I.equals``() = validate (NullableBools.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NullableBools.Collection.RefWrapArray E.I.equal``() = + member __.``NullableBools.Collection.RefWrapArray E.I.equal``() = validate (NullableBools.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NullableBools.Collection.RefWrapArray E.I.not_equal``() = + member __.``NullableBools.Collection.RefWrapArray E.I.not_equal``() = validate (NullableBools.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``NullableBools.Collection.RefWrapArray E.N.equals``() = + member __.``NullableBools.Collection.RefWrapArray E.N.equals``() = validate (NullableBools.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NullableBools.Collection.RefWrapArray E.N.equal``() = + member __.``NullableBools.Collection.RefWrapArray E.N.equal``() = validate (NullableBools.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NullableBools.Collection.RefWrapArray E.N.not_equal``() = + member __.``NullableBools.Collection.RefWrapArray E.N.not_equal``() = validate (NullableBools.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``NullableBools.Collection.UnionArray E.I.equals``() = + member __.``NullableBools.Collection.UnionArray E.I.equals``() = validate (NullableBools.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -3098,7 +3098,7 @@ type GeneratedTests () = |] [] - member _.``NullableBools.Collection.UnionArray E.I.equal``() = + member __.``NullableBools.Collection.UnionArray E.I.equal``() = validate (NullableBools.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -3115,7 +3115,7 @@ type GeneratedTests () = |] [] - member _.``NullableBools.Collection.UnionArray E.I.not_equal``() = + member __.``NullableBools.Collection.UnionArray E.I.not_equal``() = validate (NullableBools.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -3132,7 +3132,7 @@ type GeneratedTests () = |] [] - member _.``NullableBools.Collection.UnionArray E.N.equals``() = + member __.``NullableBools.Collection.UnionArray E.N.equals``() = validate (NullableBools.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -3149,7 +3149,7 @@ type GeneratedTests () = |] [] - member _.``NullableBools.Collection.UnionArray E.N.equal``() = + member __.``NullableBools.Collection.UnionArray E.N.equal``() = validate (NullableBools.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -3166,7 +3166,7 @@ type GeneratedTests () = |] [] - member _.``NullableBools.Collection.UnionArray E.N.not_equal``() = + member __.``NullableBools.Collection.UnionArray E.N.not_equal``() = validate (NullableBools.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -3183,7 +3183,7 @@ type GeneratedTests () = |] [] - member _.``NullableBools.Collection.UnionWrapArray E.I.equals``() = + member __.``NullableBools.Collection.UnionWrapArray E.I.equals``() = validate (NullableBools.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -3200,7 +3200,7 @@ type GeneratedTests () = |] [] - member _.``NullableBools.Collection.UnionWrapArray E.I.equal``() = + member __.``NullableBools.Collection.UnionWrapArray E.I.equal``() = validate (NullableBools.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -3217,7 +3217,7 @@ type GeneratedTests () = |] [] - member _.``NullableBools.Collection.UnionWrapArray E.I.not_equal``() = + member __.``NullableBools.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableBools.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -3234,7 +3234,7 @@ type GeneratedTests () = |] [] - member _.``NullableBools.Collection.UnionWrapArray E.N.equals``() = + member __.``NullableBools.Collection.UnionWrapArray E.N.equals``() = validate (NullableBools.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -3251,7 +3251,7 @@ type GeneratedTests () = |] [] - member _.``NullableBools.Collection.UnionWrapArray E.N.equal``() = + member __.``NullableBools.Collection.UnionWrapArray E.N.equal``() = validate (NullableBools.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -3268,7 +3268,7 @@ type GeneratedTests () = |] [] - member _.``NullableBools.Collection.UnionWrapArray E.N.not_equal``() = + member __.``NullableBools.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableBools.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -3285,535 +3285,535 @@ type GeneratedTests () = |] [] - member _.``NullableBools.Collection.ValueArray E.I.equals``() = + member __.``NullableBools.Collection.ValueArray E.I.equals``() = validate (NullableBools.Collection.ValueArray) E.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NullableBools.Collection.ValueArray E.I.equal``() = + member __.``NullableBools.Collection.ValueArray E.I.equal``() = validate (NullableBools.Collection.ValueArray) E.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NullableBools.Collection.ValueArray E.I.not_equal``() = + member __.``NullableBools.Collection.ValueArray E.I.not_equal``() = validate (NullableBools.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``NullableBools.Collection.ValueArray E.N.equals``() = + member __.``NullableBools.Collection.ValueArray E.N.equals``() = validate (NullableBools.Collection.ValueArray) E.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NullableBools.Collection.ValueArray E.N.equal``() = + member __.``NullableBools.Collection.ValueArray E.N.equal``() = validate (NullableBools.Collection.ValueArray) E.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NullableBools.Collection.ValueArray E.N.not_equal``() = + member __.``NullableBools.Collection.ValueArray E.N.not_equal``() = validate (NullableBools.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``NullableBools.Collection.ValueWrapArray E.I.equals``() = + member __.``NullableBools.Collection.ValueWrapArray E.I.equals``() = validate (NullableBools.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NullableBools.Collection.ValueWrapArray E.I.equal``() = + member __.``NullableBools.Collection.ValueWrapArray E.I.equal``() = validate (NullableBools.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NullableBools.Collection.ValueWrapArray E.I.not_equal``() = + member __.``NullableBools.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableBools.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``NullableBools.Collection.ValueWrapArray E.N.equals``() = + member __.``NullableBools.Collection.ValueWrapArray E.N.equals``() = validate (NullableBools.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NullableBools.Collection.ValueWrapArray E.N.equal``() = + member __.``NullableBools.Collection.ValueWrapArray E.N.equal``() = validate (NullableBools.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NullableBools.Collection.ValueWrapArray E.N.not_equal``() = + member __.``NullableBools.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableBools.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``NullableBools.Collection.ArrayArray E.I.equals``() = + member __.``NullableBools.Collection.ArrayArray E.I.equals``() = validate (NullableBools.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBools.Collection.ArrayArray E.I.equal``() = + member __.``NullableBools.Collection.ArrayArray E.I.equal``() = validate (NullableBools.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBools.Collection.ArrayArray E.I.not_equal``() = + member __.``NullableBools.Collection.ArrayArray E.I.not_equal``() = validate (NullableBools.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableBools.Collection.ArrayArray E.N.equals``() = + member __.``NullableBools.Collection.ArrayArray E.N.equals``() = validate (NullableBools.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBools.Collection.ArrayArray E.N.equal``() = + member __.``NullableBools.Collection.ArrayArray E.N.equal``() = validate (NullableBools.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBools.Collection.ArrayArray E.N.not_equal``() = + member __.``NullableBools.Collection.ArrayArray E.N.not_equal``() = validate (NullableBools.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableBools.Collection.ListArray E.I.equals``() = + member __.``NullableBools.Collection.ListArray E.I.equals``() = validate (NullableBools.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBools.Collection.ListArray E.I.equal``() = + member __.``NullableBools.Collection.ListArray E.I.equal``() = validate (NullableBools.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBools.Collection.ListArray E.I.not_equal``() = + member __.``NullableBools.Collection.ListArray E.I.not_equal``() = validate (NullableBools.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableBools.Collection.ListArray E.N.equals``() = + member __.``NullableBools.Collection.ListArray E.N.equals``() = validate (NullableBools.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBools.Collection.ListArray E.N.equal``() = + member __.``NullableBools.Collection.ListArray E.N.equal``() = validate (NullableBools.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBools.Collection.ListArray E.N.not_equal``() = + member __.``NullableBools.Collection.ListArray E.N.not_equal``() = validate (NullableBools.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``SBytes.Collection.Array C.I.equals``() = + member __.``SBytes.Collection.Array C.I.equals``() = validate (SBytes.Collection.Array) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.Array C.I.equal``() = + member __.``SBytes.Collection.Array C.I.equal``() = validate (SBytes.Collection.Array) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.Array C.I.not_equal``() = + member __.``SBytes.Collection.Array C.I.not_equal``() = validate (SBytes.Collection.Array) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``SBytes.Collection.Array C.I.compare``() = + member __.``SBytes.Collection.Array C.I.compare``() = validate (SBytes.Collection.Array) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``SBytes.Collection.Array C.I.less_than``() = + member __.``SBytes.Collection.Array C.I.less_than``() = validate (SBytes.Collection.Array) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``SBytes.Collection.Array C.I.less_or_equal``() = + member __.``SBytes.Collection.Array C.I.less_or_equal``() = validate (SBytes.Collection.Array) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``SBytes.Collection.Array C.I.greater_than``() = + member __.``SBytes.Collection.Array C.I.greater_than``() = validate (SBytes.Collection.Array) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``SBytes.Collection.Array C.I.greater_or_equal``() = + member __.``SBytes.Collection.Array C.I.greater_or_equal``() = validate (SBytes.Collection.Array) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``SBytes.Collection.Array C.N.equals``() = + member __.``SBytes.Collection.Array C.N.equals``() = validate (SBytes.Collection.Array) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.Array C.N.equal``() = + member __.``SBytes.Collection.Array C.N.equal``() = validate (SBytes.Collection.Array) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.Array C.N.not_equal``() = + member __.``SBytes.Collection.Array C.N.not_equal``() = validate (SBytes.Collection.Array) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``SBytes.Collection.Array C.N.compare``() = + member __.``SBytes.Collection.Array C.N.compare``() = validate (SBytes.Collection.Array) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``SBytes.Collection.Array C.N.less_than``() = + member __.``SBytes.Collection.Array C.N.less_than``() = validate (SBytes.Collection.Array) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``SBytes.Collection.Array C.N.less_or_equal``() = + member __.``SBytes.Collection.Array C.N.less_or_equal``() = validate (SBytes.Collection.Array) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``SBytes.Collection.Array C.N.greater_than``() = + member __.``SBytes.Collection.Array C.N.greater_than``() = validate (SBytes.Collection.Array) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``SBytes.Collection.Array C.N.greater_or_equal``() = + member __.``SBytes.Collection.Array C.N.greater_or_equal``() = validate (SBytes.Collection.Array) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``SBytes.Collection.OptionArray C.I.equals``() = + member __.``SBytes.Collection.OptionArray C.I.equals``() = validate (SBytes.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.OptionArray C.I.equal``() = + member __.``SBytes.Collection.OptionArray C.I.equal``() = validate (SBytes.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.OptionArray C.I.not_equal``() = + member __.``SBytes.Collection.OptionArray C.I.not_equal``() = validate (SBytes.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``SBytes.Collection.OptionArray C.I.compare``() = + member __.``SBytes.Collection.OptionArray C.I.compare``() = validate (SBytes.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-255;-127;-128;-129;1;255;0;128;127;126;1;127;-128;0;-1;-2;1;128;-127;1;0;-1;1;129;-126;2;1;0 |] [] - member _.``SBytes.Collection.OptionArray C.I.less_than``() = + member __.``SBytes.Collection.OptionArray C.I.less_than``() = validate (SBytes.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member _.``SBytes.Collection.OptionArray C.I.less_or_equal``() = + member __.``SBytes.Collection.OptionArray C.I.less_or_equal``() = validate (SBytes.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member _.``SBytes.Collection.OptionArray C.I.greater_than``() = + member __.``SBytes.Collection.OptionArray C.I.greater_than``() = validate (SBytes.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member _.``SBytes.Collection.OptionArray C.I.greater_or_equal``() = + member __.``SBytes.Collection.OptionArray C.I.greater_or_equal``() = validate (SBytes.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member _.``SBytes.Collection.OptionArray C.N.equals``() = + member __.``SBytes.Collection.OptionArray C.N.equals``() = validate (SBytes.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.OptionArray C.N.equal``() = + member __.``SBytes.Collection.OptionArray C.N.equal``() = validate (SBytes.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.OptionArray C.N.not_equal``() = + member __.``SBytes.Collection.OptionArray C.N.not_equal``() = validate (SBytes.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``SBytes.Collection.OptionArray C.N.compare``() = + member __.``SBytes.Collection.OptionArray C.N.compare``() = validate (SBytes.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-255;-127;-128;-129;1;255;0;128;127;126;1;127;-128;0;-1;-2;1;128;-127;1;0;-1;1;129;-126;2;1;0 |] [] - member _.``SBytes.Collection.OptionArray C.N.less_than``() = + member __.``SBytes.Collection.OptionArray C.N.less_than``() = validate (SBytes.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member _.``SBytes.Collection.OptionArray C.N.less_or_equal``() = + member __.``SBytes.Collection.OptionArray C.N.less_or_equal``() = validate (SBytes.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member _.``SBytes.Collection.OptionArray C.N.greater_than``() = + member __.``SBytes.Collection.OptionArray C.N.greater_than``() = validate (SBytes.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member _.``SBytes.Collection.OptionArray C.N.greater_or_equal``() = + member __.``SBytes.Collection.OptionArray C.N.greater_or_equal``() = validate (SBytes.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member _.``SBytes.Collection.RefArray C.I.equals``() = + member __.``SBytes.Collection.RefArray C.I.equals``() = validate (SBytes.Collection.RefArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.RefArray C.I.equal``() = + member __.``SBytes.Collection.RefArray C.I.equal``() = validate (SBytes.Collection.RefArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.RefArray C.I.not_equal``() = + member __.``SBytes.Collection.RefArray C.I.not_equal``() = validate (SBytes.Collection.RefArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``SBytes.Collection.RefArray C.I.compare``() = + member __.``SBytes.Collection.RefArray C.I.compare``() = validate (SBytes.Collection.RefArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``SBytes.Collection.RefArray C.I.less_than``() = + member __.``SBytes.Collection.RefArray C.I.less_than``() = validate (SBytes.Collection.RefArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``SBytes.Collection.RefArray C.I.less_or_equal``() = + member __.``SBytes.Collection.RefArray C.I.less_or_equal``() = validate (SBytes.Collection.RefArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``SBytes.Collection.RefArray C.I.greater_than``() = + member __.``SBytes.Collection.RefArray C.I.greater_than``() = validate (SBytes.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``SBytes.Collection.RefArray C.I.greater_or_equal``() = + member __.``SBytes.Collection.RefArray C.I.greater_or_equal``() = validate (SBytes.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``SBytes.Collection.RefArray C.N.equals``() = + member __.``SBytes.Collection.RefArray C.N.equals``() = validate (SBytes.Collection.RefArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.RefArray C.N.equal``() = + member __.``SBytes.Collection.RefArray C.N.equal``() = validate (SBytes.Collection.RefArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.RefArray C.N.not_equal``() = + member __.``SBytes.Collection.RefArray C.N.not_equal``() = validate (SBytes.Collection.RefArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``SBytes.Collection.RefArray C.N.compare``() = + member __.``SBytes.Collection.RefArray C.N.compare``() = validate (SBytes.Collection.RefArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``SBytes.Collection.RefArray C.N.less_than``() = + member __.``SBytes.Collection.RefArray C.N.less_than``() = validate (SBytes.Collection.RefArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``SBytes.Collection.RefArray C.N.less_or_equal``() = + member __.``SBytes.Collection.RefArray C.N.less_or_equal``() = validate (SBytes.Collection.RefArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``SBytes.Collection.RefArray C.N.greater_than``() = + member __.``SBytes.Collection.RefArray C.N.greater_than``() = validate (SBytes.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``SBytes.Collection.RefArray C.N.greater_or_equal``() = + member __.``SBytes.Collection.RefArray C.N.greater_or_equal``() = validate (SBytes.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``SBytes.Collection.RefWrapArray C.I.equals``() = + member __.``SBytes.Collection.RefWrapArray C.I.equals``() = validate (SBytes.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.RefWrapArray C.I.equal``() = + member __.``SBytes.Collection.RefWrapArray C.I.equal``() = validate (SBytes.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.RefWrapArray C.I.not_equal``() = + member __.``SBytes.Collection.RefWrapArray C.I.not_equal``() = validate (SBytes.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``SBytes.Collection.RefWrapArray C.I.compare``() = + member __.``SBytes.Collection.RefWrapArray C.I.compare``() = validate (SBytes.Collection.RefWrapArray) C.I.compare [| 0;-255;-127;-128;-129;255;0;128;127;126;127;-128;0;-1;-2;128;-127;1;0;-1;129;-126;2;1;0 |] [] - member _.``SBytes.Collection.RefWrapArray C.I.less_than``() = + member __.``SBytes.Collection.RefWrapArray C.I.less_than``() = validate (SBytes.Collection.RefWrapArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``SBytes.Collection.RefWrapArray C.I.less_or_equal``() = + member __.``SBytes.Collection.RefWrapArray C.I.less_or_equal``() = validate (SBytes.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``SBytes.Collection.RefWrapArray C.I.greater_than``() = + member __.``SBytes.Collection.RefWrapArray C.I.greater_than``() = validate (SBytes.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``SBytes.Collection.RefWrapArray C.I.greater_or_equal``() = + member __.``SBytes.Collection.RefWrapArray C.I.greater_or_equal``() = validate (SBytes.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``SBytes.Collection.RefWrapArray C.N.equals``() = + member __.``SBytes.Collection.RefWrapArray C.N.equals``() = validate (SBytes.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.RefWrapArray C.N.equal``() = + member __.``SBytes.Collection.RefWrapArray C.N.equal``() = validate (SBytes.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.RefWrapArray C.N.not_equal``() = + member __.``SBytes.Collection.RefWrapArray C.N.not_equal``() = validate (SBytes.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``SBytes.Collection.RefWrapArray C.N.compare``() = + member __.``SBytes.Collection.RefWrapArray C.N.compare``() = validate (SBytes.Collection.RefWrapArray) C.N.compare [| 0;-255;-127;-128;-129;255;0;128;127;126;127;-128;0;-1;-2;128;-127;1;0;-1;129;-126;2;1;0 |] [] - member _.``SBytes.Collection.RefWrapArray C.N.less_than``() = + member __.``SBytes.Collection.RefWrapArray C.N.less_than``() = validate (SBytes.Collection.RefWrapArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``SBytes.Collection.RefWrapArray C.N.less_or_equal``() = + member __.``SBytes.Collection.RefWrapArray C.N.less_or_equal``() = validate (SBytes.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``SBytes.Collection.RefWrapArray C.N.greater_than``() = + member __.``SBytes.Collection.RefWrapArray C.N.greater_than``() = validate (SBytes.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``SBytes.Collection.RefWrapArray C.N.greater_or_equal``() = + member __.``SBytes.Collection.RefWrapArray C.N.greater_or_equal``() = validate (SBytes.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``SBytes.Collection.UnionArray C.I.equals``() = + member __.``SBytes.Collection.UnionArray C.I.equals``() = validate (SBytes.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -3849,7 +3849,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionArray C.I.equal``() = + member __.``SBytes.Collection.UnionArray C.I.equal``() = validate (SBytes.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -3885,7 +3885,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionArray C.I.not_equal``() = + member __.``SBytes.Collection.UnionArray C.I.not_equal``() = validate (SBytes.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -3921,7 +3921,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionArray C.I.compare``() = + member __.``SBytes.Collection.UnionArray C.I.compare``() = validate (SBytes.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -3957,7 +3957,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionArray C.I.less_than``() = + member __.``SBytes.Collection.UnionArray C.I.less_than``() = validate (SBytes.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -3993,7 +3993,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionArray C.I.less_or_equal``() = + member __.``SBytes.Collection.UnionArray C.I.less_or_equal``() = validate (SBytes.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -4029,7 +4029,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionArray C.I.greater_than``() = + member __.``SBytes.Collection.UnionArray C.I.greater_than``() = validate (SBytes.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -4065,7 +4065,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionArray C.I.greater_or_equal``() = + member __.``SBytes.Collection.UnionArray C.I.greater_or_equal``() = validate (SBytes.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -4101,7 +4101,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionArray C.N.equals``() = + member __.``SBytes.Collection.UnionArray C.N.equals``() = validate (SBytes.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -4137,7 +4137,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionArray C.N.equal``() = + member __.``SBytes.Collection.UnionArray C.N.equal``() = validate (SBytes.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -4173,7 +4173,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionArray C.N.not_equal``() = + member __.``SBytes.Collection.UnionArray C.N.not_equal``() = validate (SBytes.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -4209,7 +4209,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionArray C.N.compare``() = + member __.``SBytes.Collection.UnionArray C.N.compare``() = validate (SBytes.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -4245,7 +4245,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionArray C.N.less_than``() = + member __.``SBytes.Collection.UnionArray C.N.less_than``() = validate (SBytes.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -4281,7 +4281,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionArray C.N.less_or_equal``() = + member __.``SBytes.Collection.UnionArray C.N.less_or_equal``() = validate (SBytes.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -4317,7 +4317,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionArray C.N.greater_than``() = + member __.``SBytes.Collection.UnionArray C.N.greater_than``() = validate (SBytes.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -4353,7 +4353,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionArray C.N.greater_or_equal``() = + member __.``SBytes.Collection.UnionArray C.N.greater_or_equal``() = validate (SBytes.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -4389,7 +4389,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionWrapArray C.I.equals``() = + member __.``SBytes.Collection.UnionWrapArray C.I.equals``() = validate (SBytes.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -4425,7 +4425,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionWrapArray C.I.equal``() = + member __.``SBytes.Collection.UnionWrapArray C.I.equal``() = validate (SBytes.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -4461,7 +4461,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionWrapArray C.I.not_equal``() = + member __.``SBytes.Collection.UnionWrapArray C.I.not_equal``() = validate (SBytes.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -4497,7 +4497,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionWrapArray C.I.compare``() = + member __.``SBytes.Collection.UnionWrapArray C.I.compare``() = validate (SBytes.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-255;-1;-2;-3;-3;-3;-3;-127;-1;-2;-3;-3;-3;-3;-128;-1;-2;-3;-3;-3;-3;-129;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-255;-1;-2;-2;-2;-2;1;-127;-1;-2;-2;-2;-2;1;-128;-1;-2;-2;-2;-2;1;-129;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-255; @@ -4533,7 +4533,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionWrapArray C.I.less_than``() = + member __.``SBytes.Collection.UnionWrapArray C.I.less_than``() = validate (SBytes.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -4569,7 +4569,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionWrapArray C.I.less_or_equal``() = + member __.``SBytes.Collection.UnionWrapArray C.I.less_or_equal``() = validate (SBytes.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -4605,7 +4605,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionWrapArray C.I.greater_than``() = + member __.``SBytes.Collection.UnionWrapArray C.I.greater_than``() = validate (SBytes.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -4641,7 +4641,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionWrapArray C.I.greater_or_equal``() = + member __.``SBytes.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (SBytes.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -4677,7 +4677,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionWrapArray C.N.equals``() = + member __.``SBytes.Collection.UnionWrapArray C.N.equals``() = validate (SBytes.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -4713,7 +4713,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionWrapArray C.N.equal``() = + member __.``SBytes.Collection.UnionWrapArray C.N.equal``() = validate (SBytes.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -4749,7 +4749,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionWrapArray C.N.not_equal``() = + member __.``SBytes.Collection.UnionWrapArray C.N.not_equal``() = validate (SBytes.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -4785,7 +4785,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionWrapArray C.N.compare``() = + member __.``SBytes.Collection.UnionWrapArray C.N.compare``() = validate (SBytes.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-255;-1;-2;-3;-3;-3;-3;-127;-1;-2;-3;-3;-3;-3;-128;-1;-2;-3;-3;-3;-3;-129;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-255;-1;-2;-2;-2;-2;1;-127;-1;-2;-2;-2;-2;1;-128;-1;-2;-2;-2;-2;1;-129;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-255; @@ -4821,7 +4821,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionWrapArray C.N.less_than``() = + member __.``SBytes.Collection.UnionWrapArray C.N.less_than``() = validate (SBytes.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -4857,7 +4857,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionWrapArray C.N.less_or_equal``() = + member __.``SBytes.Collection.UnionWrapArray C.N.less_or_equal``() = validate (SBytes.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -4893,7 +4893,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionWrapArray C.N.greater_than``() = + member __.``SBytes.Collection.UnionWrapArray C.N.greater_than``() = validate (SBytes.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -4929,7 +4929,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.UnionWrapArray C.N.greater_or_equal``() = + member __.``SBytes.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (SBytes.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -4965,199 +4965,199 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ValueArray C.I.equals``() = + member __.``SBytes.Collection.ValueArray C.I.equals``() = validate (SBytes.Collection.ValueArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.ValueArray C.I.equal``() = + member __.``SBytes.Collection.ValueArray C.I.equal``() = validate (SBytes.Collection.ValueArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.ValueArray C.I.not_equal``() = + member __.``SBytes.Collection.ValueArray C.I.not_equal``() = validate (SBytes.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``SBytes.Collection.ValueArray C.I.compare``() = + member __.``SBytes.Collection.ValueArray C.I.compare``() = validate (SBytes.Collection.ValueArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``SBytes.Collection.ValueArray C.I.less_than``() = + member __.``SBytes.Collection.ValueArray C.I.less_than``() = validate (SBytes.Collection.ValueArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``SBytes.Collection.ValueArray C.I.less_or_equal``() = + member __.``SBytes.Collection.ValueArray C.I.less_or_equal``() = validate (SBytes.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``SBytes.Collection.ValueArray C.I.greater_than``() = + member __.``SBytes.Collection.ValueArray C.I.greater_than``() = validate (SBytes.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``SBytes.Collection.ValueArray C.I.greater_or_equal``() = + member __.``SBytes.Collection.ValueArray C.I.greater_or_equal``() = validate (SBytes.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``SBytes.Collection.ValueArray C.N.equals``() = + member __.``SBytes.Collection.ValueArray C.N.equals``() = validate (SBytes.Collection.ValueArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.ValueArray C.N.equal``() = + member __.``SBytes.Collection.ValueArray C.N.equal``() = validate (SBytes.Collection.ValueArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.ValueArray C.N.not_equal``() = + member __.``SBytes.Collection.ValueArray C.N.not_equal``() = validate (SBytes.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``SBytes.Collection.ValueArray C.N.compare``() = + member __.``SBytes.Collection.ValueArray C.N.compare``() = validate (SBytes.Collection.ValueArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``SBytes.Collection.ValueArray C.N.less_than``() = + member __.``SBytes.Collection.ValueArray C.N.less_than``() = validate (SBytes.Collection.ValueArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``SBytes.Collection.ValueArray C.N.less_or_equal``() = + member __.``SBytes.Collection.ValueArray C.N.less_or_equal``() = validate (SBytes.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``SBytes.Collection.ValueArray C.N.greater_than``() = + member __.``SBytes.Collection.ValueArray C.N.greater_than``() = validate (SBytes.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``SBytes.Collection.ValueArray C.N.greater_or_equal``() = + member __.``SBytes.Collection.ValueArray C.N.greater_or_equal``() = validate (SBytes.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``SBytes.Collection.ValueWrapArray C.I.equals``() = + member __.``SBytes.Collection.ValueWrapArray C.I.equals``() = validate (SBytes.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.ValueWrapArray C.I.equal``() = + member __.``SBytes.Collection.ValueWrapArray C.I.equal``() = validate (SBytes.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.ValueWrapArray C.I.not_equal``() = + member __.``SBytes.Collection.ValueWrapArray C.I.not_equal``() = validate (SBytes.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``SBytes.Collection.ValueWrapArray C.I.compare``() = + member __.``SBytes.Collection.ValueWrapArray C.I.compare``() = validate (SBytes.Collection.ValueWrapArray) C.I.compare [| 0;-255;-127;-128;-129;255;0;128;127;126;127;-128;0;-1;-2;128;-127;1;0;-1;129;-126;2;1;0 |] [] - member _.``SBytes.Collection.ValueWrapArray C.I.less_than``() = + member __.``SBytes.Collection.ValueWrapArray C.I.less_than``() = validate (SBytes.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``SBytes.Collection.ValueWrapArray C.I.less_or_equal``() = + member __.``SBytes.Collection.ValueWrapArray C.I.less_or_equal``() = validate (SBytes.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``SBytes.Collection.ValueWrapArray C.I.greater_than``() = + member __.``SBytes.Collection.ValueWrapArray C.I.greater_than``() = validate (SBytes.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``SBytes.Collection.ValueWrapArray C.I.greater_or_equal``() = + member __.``SBytes.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (SBytes.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``SBytes.Collection.ValueWrapArray C.N.equals``() = + member __.``SBytes.Collection.ValueWrapArray C.N.equals``() = validate (SBytes.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.ValueWrapArray C.N.equal``() = + member __.``SBytes.Collection.ValueWrapArray C.N.equal``() = validate (SBytes.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``SBytes.Collection.ValueWrapArray C.N.not_equal``() = + member __.``SBytes.Collection.ValueWrapArray C.N.not_equal``() = validate (SBytes.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``SBytes.Collection.ValueWrapArray C.N.compare``() = + member __.``SBytes.Collection.ValueWrapArray C.N.compare``() = validate (SBytes.Collection.ValueWrapArray) C.N.compare [| 0;-255;-127;-128;-129;255;0;128;127;126;127;-128;0;-1;-2;128;-127;1;0;-1;129;-126;2;1;0 |] [] - member _.``SBytes.Collection.ValueWrapArray C.N.less_than``() = + member __.``SBytes.Collection.ValueWrapArray C.N.less_than``() = validate (SBytes.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``SBytes.Collection.ValueWrapArray C.N.less_or_equal``() = + member __.``SBytes.Collection.ValueWrapArray C.N.less_or_equal``() = validate (SBytes.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``SBytes.Collection.ValueWrapArray C.N.greater_than``() = + member __.``SBytes.Collection.ValueWrapArray C.N.greater_than``() = validate (SBytes.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``SBytes.Collection.ValueWrapArray C.N.greater_or_equal``() = + member __.``SBytes.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (SBytes.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``SBytes.Collection.ArrayArray C.I.equals``() = + member __.``SBytes.Collection.ArrayArray C.I.equals``() = validate (SBytes.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5165,7 +5165,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray C.I.equal``() = + member __.``SBytes.Collection.ArrayArray C.I.equal``() = validate (SBytes.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5173,7 +5173,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray C.I.not_equal``() = + member __.``SBytes.Collection.ArrayArray C.I.not_equal``() = validate (SBytes.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -5181,7 +5181,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray C.I.compare``() = + member __.``SBytes.Collection.ArrayArray C.I.compare``() = validate (SBytes.Collection.ArrayArray) C.I.compare [| 0;1;-1;1;1;-1;-1;-1;-1;-1;-1;0;-1;1;1;-1;-1;-1;-1;-1;1;1;0;1;1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1; -1;-1;-1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;1;-1;1;1;1;1;1;1;1;-1;0;-1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -5189,7 +5189,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray C.I.less_than``() = + member __.``SBytes.Collection.ArrayArray C.I.less_than``() = validate (SBytes.Collection.ArrayArray) C.I.less_than [| 0;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0; @@ -5197,7 +5197,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray C.I.less_or_equal``() = + member __.``SBytes.Collection.ArrayArray C.I.less_or_equal``() = validate (SBytes.Collection.ArrayArray) C.I.less_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5205,7 +5205,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray C.I.greater_than``() = + member __.``SBytes.Collection.ArrayArray C.I.greater_than``() = validate (SBytes.Collection.ArrayArray) C.I.greater_than [| 0;1;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1; @@ -5213,7 +5213,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray C.I.greater_or_equal``() = + member __.``SBytes.Collection.ArrayArray C.I.greater_or_equal``() = validate (SBytes.Collection.ArrayArray) C.I.greater_or_equal [| 1;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1; @@ -5221,7 +5221,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray C.N.equals``() = + member __.``SBytes.Collection.ArrayArray C.N.equals``() = validate (SBytes.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5229,7 +5229,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray C.N.equal``() = + member __.``SBytes.Collection.ArrayArray C.N.equal``() = validate (SBytes.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5237,7 +5237,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray C.N.not_equal``() = + member __.``SBytes.Collection.ArrayArray C.N.not_equal``() = validate (SBytes.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -5245,7 +5245,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray C.N.compare``() = + member __.``SBytes.Collection.ArrayArray C.N.compare``() = validate (SBytes.Collection.ArrayArray) C.N.compare [| 0;1;-1;1;1;-1;-1;-1;-1;-1;-1;0;-1;1;1;-1;-1;-1;-1;-1;1;1;0;1;1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1; -1;-1;-1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;1;-1;1;1;1;1;1;1;1;-1;0;-1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -5253,7 +5253,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray C.N.less_than``() = + member __.``SBytes.Collection.ArrayArray C.N.less_than``() = validate (SBytes.Collection.ArrayArray) C.N.less_than [| 0;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0; @@ -5261,7 +5261,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray C.N.less_or_equal``() = + member __.``SBytes.Collection.ArrayArray C.N.less_or_equal``() = validate (SBytes.Collection.ArrayArray) C.N.less_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5269,7 +5269,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray C.N.greater_than``() = + member __.``SBytes.Collection.ArrayArray C.N.greater_than``() = validate (SBytes.Collection.ArrayArray) C.N.greater_than [| 0;1;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1; @@ -5277,7 +5277,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray C.N.greater_or_equal``() = + member __.``SBytes.Collection.ArrayArray C.N.greater_or_equal``() = validate (SBytes.Collection.ArrayArray) C.N.greater_or_equal [| 1;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1; @@ -5285,7 +5285,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ListArray C.I.equals``() = + member __.``SBytes.Collection.ListArray C.I.equals``() = validate (SBytes.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5293,7 +5293,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ListArray C.I.equal``() = + member __.``SBytes.Collection.ListArray C.I.equal``() = validate (SBytes.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5301,7 +5301,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ListArray C.I.not_equal``() = + member __.``SBytes.Collection.ListArray C.I.not_equal``() = validate (SBytes.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -5309,7 +5309,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ListArray C.I.compare``() = + member __.``SBytes.Collection.ListArray C.I.compare``() = validate (SBytes.Collection.ListArray) C.I.compare [| 0;-255;-127;-128;-129;-1;-255;-127;-128;-129;255;0;128;127;126;255;-1;128;127;126;127;-128;0;-1;-2;127;-128;-1;-1;-2;128;-127;1;0;-1;128;-127;1;-1;-1; 129;-126;2;1;0;129;-126;2;1;-1;1;-255;-127;-128;-129;0;-255;-127;-128;-129;255;1;128;127;126;255;0;128;127;126;127;-128;1;-1;-2;127;-128;0;-1;-2; @@ -5317,7 +5317,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ListArray C.I.less_than``() = + member __.``SBytes.Collection.ListArray C.I.less_than``() = validate (SBytes.Collection.ListArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; @@ -5325,7 +5325,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ListArray C.I.less_or_equal``() = + member __.``SBytes.Collection.ListArray C.I.less_or_equal``() = validate (SBytes.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; @@ -5333,7 +5333,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ListArray C.I.greater_than``() = + member __.``SBytes.Collection.ListArray C.I.greater_than``() = validate (SBytes.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; @@ -5341,7 +5341,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ListArray C.I.greater_or_equal``() = + member __.``SBytes.Collection.ListArray C.I.greater_or_equal``() = validate (SBytes.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; @@ -5349,7 +5349,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ListArray C.N.equals``() = + member __.``SBytes.Collection.ListArray C.N.equals``() = validate (SBytes.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5357,7 +5357,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ListArray C.N.equal``() = + member __.``SBytes.Collection.ListArray C.N.equal``() = validate (SBytes.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5365,7 +5365,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ListArray C.N.not_equal``() = + member __.``SBytes.Collection.ListArray C.N.not_equal``() = validate (SBytes.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -5373,7 +5373,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ListArray C.N.compare``() = + member __.``SBytes.Collection.ListArray C.N.compare``() = validate (SBytes.Collection.ListArray) C.N.compare [| 0;-255;-127;-128;-129;-1;-255;-127;-128;-129;255;0;128;127;126;255;-1;128;127;126;127;-128;0;-1;-2;127;-128;-1;-1;-2;128;-127;1;0;-1;128;-127;1;-1;-1; 129;-126;2;1;0;129;-126;2;1;-1;1;-255;-127;-128;-129;0;-255;-127;-128;-129;255;1;128;127;126;255;0;128;127;126;127;-128;1;-1;-2;127;-128;0;-1;-2; @@ -5381,7 +5381,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ListArray C.N.less_than``() = + member __.``SBytes.Collection.ListArray C.N.less_than``() = validate (SBytes.Collection.ListArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; @@ -5389,7 +5389,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ListArray C.N.less_or_equal``() = + member __.``SBytes.Collection.ListArray C.N.less_or_equal``() = validate (SBytes.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; @@ -5397,7 +5397,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ListArray C.N.greater_than``() = + member __.``SBytes.Collection.ListArray C.N.greater_than``() = validate (SBytes.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; @@ -5405,7 +5405,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ListArray C.N.greater_or_equal``() = + member __.``SBytes.Collection.ListArray C.N.greater_or_equal``() = validate (SBytes.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; @@ -5413,7 +5413,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5421,7 +5421,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5429,7 +5429,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -5437,7 +5437,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; @@ -5445,7 +5445,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; @@ -5453,7 +5453,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; @@ -5461,7 +5461,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; @@ -5469,7 +5469,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; @@ -5477,7 +5477,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5485,7 +5485,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5493,7 +5493,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -5501,7 +5501,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; @@ -5509,7 +5509,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; @@ -5517,7 +5517,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; @@ -5525,7 +5525,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; @@ -5533,7 +5533,7 @@ type GeneratedTests () = |] [] - member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; @@ -5541,157 +5541,157 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.Array E.I.equals``() = + member __.``NullableSbytes.Collection.Array E.I.equals``() = validate (NullableSbytes.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.Array E.I.equal``() = + member __.``NullableSbytes.Collection.Array E.I.equal``() = validate (NullableSbytes.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.Array E.I.not_equal``() = + member __.``NullableSbytes.Collection.Array E.I.not_equal``() = validate (NullableSbytes.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableSbytes.Collection.Array E.N.equals``() = + member __.``NullableSbytes.Collection.Array E.N.equals``() = validate (NullableSbytes.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.Array E.N.equal``() = + member __.``NullableSbytes.Collection.Array E.N.equal``() = validate (NullableSbytes.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.Array E.N.not_equal``() = + member __.``NullableSbytes.Collection.Array E.N.not_equal``() = validate (NullableSbytes.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableSbytes.Collection.OptionArray E.I.equals``() = + member __.``NullableSbytes.Collection.OptionArray E.I.equals``() = validate (NullableSbytes.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.OptionArray E.I.equal``() = + member __.``NullableSbytes.Collection.OptionArray E.I.equal``() = validate (NullableSbytes.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.OptionArray E.I.not_equal``() = + member __.``NullableSbytes.Collection.OptionArray E.I.not_equal``() = validate (NullableSbytes.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``NullableSbytes.Collection.OptionArray E.N.equals``() = + member __.``NullableSbytes.Collection.OptionArray E.N.equals``() = validate (NullableSbytes.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.OptionArray E.N.equal``() = + member __.``NullableSbytes.Collection.OptionArray E.N.equal``() = validate (NullableSbytes.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.OptionArray E.N.not_equal``() = + member __.``NullableSbytes.Collection.OptionArray E.N.not_equal``() = validate (NullableSbytes.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``NullableSbytes.Collection.RefArray E.I.equals``() = + member __.``NullableSbytes.Collection.RefArray E.I.equals``() = validate (NullableSbytes.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.RefArray E.I.equal``() = + member __.``NullableSbytes.Collection.RefArray E.I.equal``() = validate (NullableSbytes.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.RefArray E.I.not_equal``() = + member __.``NullableSbytes.Collection.RefArray E.I.not_equal``() = validate (NullableSbytes.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableSbytes.Collection.RefArray E.N.equals``() = + member __.``NullableSbytes.Collection.RefArray E.N.equals``() = validate (NullableSbytes.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.RefArray E.N.equal``() = + member __.``NullableSbytes.Collection.RefArray E.N.equal``() = validate (NullableSbytes.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.RefArray E.N.not_equal``() = + member __.``NullableSbytes.Collection.RefArray E.N.not_equal``() = validate (NullableSbytes.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableSbytes.Collection.RefWrapArray E.I.equals``() = + member __.``NullableSbytes.Collection.RefWrapArray E.I.equals``() = validate (NullableSbytes.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.RefWrapArray E.I.equal``() = + member __.``NullableSbytes.Collection.RefWrapArray E.I.equal``() = validate (NullableSbytes.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.RefWrapArray E.I.not_equal``() = + member __.``NullableSbytes.Collection.RefWrapArray E.I.not_equal``() = validate (NullableSbytes.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableSbytes.Collection.RefWrapArray E.N.equals``() = + member __.``NullableSbytes.Collection.RefWrapArray E.N.equals``() = validate (NullableSbytes.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.RefWrapArray E.N.equal``() = + member __.``NullableSbytes.Collection.RefWrapArray E.N.equal``() = validate (NullableSbytes.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.RefWrapArray E.N.not_equal``() = + member __.``NullableSbytes.Collection.RefWrapArray E.N.not_equal``() = validate (NullableSbytes.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableSbytes.Collection.UnionArray E.I.equals``() = + member __.``NullableSbytes.Collection.UnionArray E.I.equals``() = validate (NullableSbytes.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -5741,7 +5741,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.UnionArray E.I.equal``() = + member __.``NullableSbytes.Collection.UnionArray E.I.equal``() = validate (NullableSbytes.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -5791,7 +5791,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.UnionArray E.I.not_equal``() = + member __.``NullableSbytes.Collection.UnionArray E.I.not_equal``() = validate (NullableSbytes.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -5841,7 +5841,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.UnionArray E.N.equals``() = + member __.``NullableSbytes.Collection.UnionArray E.N.equals``() = validate (NullableSbytes.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -5891,7 +5891,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.UnionArray E.N.equal``() = + member __.``NullableSbytes.Collection.UnionArray E.N.equal``() = validate (NullableSbytes.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -5941,7 +5941,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.UnionArray E.N.not_equal``() = + member __.``NullableSbytes.Collection.UnionArray E.N.not_equal``() = validate (NullableSbytes.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -5991,7 +5991,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.UnionWrapArray E.I.equals``() = + member __.``NullableSbytes.Collection.UnionWrapArray E.I.equals``() = validate (NullableSbytes.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -6041,7 +6041,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.UnionWrapArray E.I.equal``() = + member __.``NullableSbytes.Collection.UnionWrapArray E.I.equal``() = validate (NullableSbytes.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -6091,7 +6091,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.UnionWrapArray E.I.not_equal``() = + member __.``NullableSbytes.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableSbytes.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -6141,7 +6141,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.UnionWrapArray E.N.equals``() = + member __.``NullableSbytes.Collection.UnionWrapArray E.N.equals``() = validate (NullableSbytes.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -6191,7 +6191,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.UnionWrapArray E.N.equal``() = + member __.``NullableSbytes.Collection.UnionWrapArray E.N.equal``() = validate (NullableSbytes.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -6241,7 +6241,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.UnionWrapArray E.N.not_equal``() = + member __.``NullableSbytes.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableSbytes.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -6291,79 +6291,79 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.ValueArray E.I.equals``() = + member __.``NullableSbytes.Collection.ValueArray E.I.equals``() = validate (NullableSbytes.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.ValueArray E.I.equal``() = + member __.``NullableSbytes.Collection.ValueArray E.I.equal``() = validate (NullableSbytes.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.ValueArray E.I.not_equal``() = + member __.``NullableSbytes.Collection.ValueArray E.I.not_equal``() = validate (NullableSbytes.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableSbytes.Collection.ValueArray E.N.equals``() = + member __.``NullableSbytes.Collection.ValueArray E.N.equals``() = validate (NullableSbytes.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.ValueArray E.N.equal``() = + member __.``NullableSbytes.Collection.ValueArray E.N.equal``() = validate (NullableSbytes.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.ValueArray E.N.not_equal``() = + member __.``NullableSbytes.Collection.ValueArray E.N.not_equal``() = validate (NullableSbytes.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableSbytes.Collection.ValueWrapArray E.I.equals``() = + member __.``NullableSbytes.Collection.ValueWrapArray E.I.equals``() = validate (NullableSbytes.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.ValueWrapArray E.I.equal``() = + member __.``NullableSbytes.Collection.ValueWrapArray E.I.equal``() = validate (NullableSbytes.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.ValueWrapArray E.I.not_equal``() = + member __.``NullableSbytes.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableSbytes.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableSbytes.Collection.ValueWrapArray E.N.equals``() = + member __.``NullableSbytes.Collection.ValueWrapArray E.N.equals``() = validate (NullableSbytes.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.ValueWrapArray E.N.equal``() = + member __.``NullableSbytes.Collection.ValueWrapArray E.N.equal``() = validate (NullableSbytes.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableSbytes.Collection.ValueWrapArray E.N.not_equal``() = + member __.``NullableSbytes.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableSbytes.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableSbytes.Collection.ArrayArray E.I.equals``() = + member __.``NullableSbytes.Collection.ArrayArray E.I.equals``() = validate (NullableSbytes.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -6372,7 +6372,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.ArrayArray E.I.equal``() = + member __.``NullableSbytes.Collection.ArrayArray E.I.equal``() = validate (NullableSbytes.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -6381,7 +6381,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.ArrayArray E.I.not_equal``() = + member __.``NullableSbytes.Collection.ArrayArray E.I.not_equal``() = validate (NullableSbytes.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -6390,7 +6390,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.ArrayArray E.N.equals``() = + member __.``NullableSbytes.Collection.ArrayArray E.N.equals``() = validate (NullableSbytes.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -6399,7 +6399,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.ArrayArray E.N.equal``() = + member __.``NullableSbytes.Collection.ArrayArray E.N.equal``() = validate (NullableSbytes.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -6408,7 +6408,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.ArrayArray E.N.not_equal``() = + member __.``NullableSbytes.Collection.ArrayArray E.N.not_equal``() = validate (NullableSbytes.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -6417,7 +6417,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.ListArray E.I.equals``() = + member __.``NullableSbytes.Collection.ListArray E.I.equals``() = validate (NullableSbytes.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -6426,7 +6426,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.ListArray E.I.equal``() = + member __.``NullableSbytes.Collection.ListArray E.I.equal``() = validate (NullableSbytes.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -6435,7 +6435,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.ListArray E.I.not_equal``() = + member __.``NullableSbytes.Collection.ListArray E.I.not_equal``() = validate (NullableSbytes.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -6444,7 +6444,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.ListArray E.N.equals``() = + member __.``NullableSbytes.Collection.ListArray E.N.equals``() = validate (NullableSbytes.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -6453,7 +6453,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.ListArray E.N.equal``() = + member __.``NullableSbytes.Collection.ListArray E.N.equal``() = validate (NullableSbytes.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -6462,7 +6462,7 @@ type GeneratedTests () = |] [] - member _.``NullableSbytes.Collection.ListArray E.N.not_equal``() = + member __.``NullableSbytes.Collection.ListArray E.N.not_equal``() = validate (NullableSbytes.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -6471,391 +6471,391 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.Array C.I.equals``() = + member __.``Int16s.Collection.Array C.I.equals``() = validate (Int16s.Collection.Array) C.I.equals [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.Array C.I.equal``() = + member __.``Int16s.Collection.Array C.I.equal``() = validate (Int16s.Collection.Array) C.I.equal [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.Array C.I.not_equal``() = + member __.``Int16s.Collection.Array C.I.not_equal``() = validate (Int16s.Collection.Array) C.I.not_equal [| 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int16s.Collection.Array C.I.compare``() = + member __.``Int16s.Collection.Array C.I.compare``() = validate (Int16s.Collection.Array) C.I.compare [| 0;0;1;1;1;0;0;1;1;1;-1;-1;0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0 |] [] - member _.``Int16s.Collection.Array C.I.less_than``() = + member __.``Int16s.Collection.Array C.I.less_than``() = validate (Int16s.Collection.Array) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 |] [] - member _.``Int16s.Collection.Array C.I.less_or_equal``() = + member __.``Int16s.Collection.Array C.I.less_or_equal``() = validate (Int16s.Collection.Array) C.I.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 |] [] - member _.``Int16s.Collection.Array C.I.greater_than``() = + member __.``Int16s.Collection.Array C.I.greater_than``() = validate (Int16s.Collection.Array) C.I.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 |] [] - member _.``Int16s.Collection.Array C.I.greater_or_equal``() = + member __.``Int16s.Collection.Array C.I.greater_or_equal``() = validate (Int16s.Collection.Array) C.I.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 |] [] - member _.``Int16s.Collection.Array C.N.equals``() = + member __.``Int16s.Collection.Array C.N.equals``() = validate (Int16s.Collection.Array) C.N.equals [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.Array C.N.equal``() = + member __.``Int16s.Collection.Array C.N.equal``() = validate (Int16s.Collection.Array) C.N.equal [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.Array C.N.not_equal``() = + member __.``Int16s.Collection.Array C.N.not_equal``() = validate (Int16s.Collection.Array) C.N.not_equal [| 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int16s.Collection.Array C.N.compare``() = + member __.``Int16s.Collection.Array C.N.compare``() = validate (Int16s.Collection.Array) C.N.compare [| 0;0;1;1;1;0;0;1;1;1;-1;-1;0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0 |] [] - member _.``Int16s.Collection.Array C.N.less_than``() = + member __.``Int16s.Collection.Array C.N.less_than``() = validate (Int16s.Collection.Array) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 |] [] - member _.``Int16s.Collection.Array C.N.less_or_equal``() = + member __.``Int16s.Collection.Array C.N.less_or_equal``() = validate (Int16s.Collection.Array) C.N.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 |] [] - member _.``Int16s.Collection.Array C.N.greater_than``() = + member __.``Int16s.Collection.Array C.N.greater_than``() = validate (Int16s.Collection.Array) C.N.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 |] [] - member _.``Int16s.Collection.Array C.N.greater_or_equal``() = + member __.``Int16s.Collection.Array C.N.greater_or_equal``() = validate (Int16s.Collection.Array) C.N.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 |] [] - member _.``Int16s.Collection.OptionArray C.I.equals``() = + member __.``Int16s.Collection.OptionArray C.I.equals``() = validate (Int16s.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.OptionArray C.I.equal``() = + member __.``Int16s.Collection.OptionArray C.I.equal``() = validate (Int16s.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.OptionArray C.I.not_equal``() = + member __.``Int16s.Collection.OptionArray C.I.not_equal``() = validate (Int16s.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Int16s.Collection.OptionArray C.I.compare``() = + member __.``Int16s.Collection.OptionArray C.I.compare``() = validate (Int16s.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;0;32768;32767;32766;1;0;0;32768;32767;32766;1;-32768;-32768;0;-1;-2;1;-32767;-32767;1;0;-1;1;-32766;-32766;2;1;0 |] [] - member _.``Int16s.Collection.OptionArray C.I.less_than``() = + member __.``Int16s.Collection.OptionArray C.I.less_than``() = validate (Int16s.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;0;1;1;0;0;1;0;1;1;0;0;0 |] [] - member _.``Int16s.Collection.OptionArray C.I.less_or_equal``() = + member __.``Int16s.Collection.OptionArray C.I.less_or_equal``() = validate (Int16s.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;0;1;1;0;1;1;0;1;1;0;0;1 |] [] - member _.``Int16s.Collection.OptionArray C.I.greater_than``() = + member __.``Int16s.Collection.OptionArray C.I.greater_than``() = validate (Int16s.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;1;0;0;1;0;0;1;1;0 |] [] - member _.``Int16s.Collection.OptionArray C.I.greater_or_equal``() = + member __.``Int16s.Collection.OptionArray C.I.greater_or_equal``() = validate (Int16s.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;1;0;0;1;1;0;1;0;0;1;1;1 |] [] - member _.``Int16s.Collection.OptionArray C.N.equals``() = + member __.``Int16s.Collection.OptionArray C.N.equals``() = validate (Int16s.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.OptionArray C.N.equal``() = + member __.``Int16s.Collection.OptionArray C.N.equal``() = validate (Int16s.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.OptionArray C.N.not_equal``() = + member __.``Int16s.Collection.OptionArray C.N.not_equal``() = validate (Int16s.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Int16s.Collection.OptionArray C.N.compare``() = + member __.``Int16s.Collection.OptionArray C.N.compare``() = validate (Int16s.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;0;32768;32767;32766;1;0;0;32768;32767;32766;1;-32768;-32768;0;-1;-2;1;-32767;-32767;1;0;-1;1;-32766;-32766;2;1;0 |] [] - member _.``Int16s.Collection.OptionArray C.N.less_than``() = + member __.``Int16s.Collection.OptionArray C.N.less_than``() = validate (Int16s.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;0;1;1;0;0;1;0;1;1;0;0;0 |] [] - member _.``Int16s.Collection.OptionArray C.N.less_or_equal``() = + member __.``Int16s.Collection.OptionArray C.N.less_or_equal``() = validate (Int16s.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;0;1;1;0;1;1;0;1;1;0;0;1 |] [] - member _.``Int16s.Collection.OptionArray C.N.greater_than``() = + member __.``Int16s.Collection.OptionArray C.N.greater_than``() = validate (Int16s.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;1;0;0;1;0;0;1;1;0 |] [] - member _.``Int16s.Collection.OptionArray C.N.greater_or_equal``() = + member __.``Int16s.Collection.OptionArray C.N.greater_or_equal``() = validate (Int16s.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;1;0;0;1;1;0;1;0;0;1;1;1 |] [] - member _.``Int16s.Collection.RefArray C.I.equals``() = + member __.``Int16s.Collection.RefArray C.I.equals``() = validate (Int16s.Collection.RefArray) C.I.equals [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.RefArray C.I.equal``() = + member __.``Int16s.Collection.RefArray C.I.equal``() = validate (Int16s.Collection.RefArray) C.I.equal [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.RefArray C.I.not_equal``() = + member __.``Int16s.Collection.RefArray C.I.not_equal``() = validate (Int16s.Collection.RefArray) C.I.not_equal [| 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int16s.Collection.RefArray C.I.compare``() = + member __.``Int16s.Collection.RefArray C.I.compare``() = validate (Int16s.Collection.RefArray) C.I.compare [| 0;0;1;1;1;0;0;1;1;1;-1;-1;0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0 |] [] - member _.``Int16s.Collection.RefArray C.I.less_than``() = + member __.``Int16s.Collection.RefArray C.I.less_than``() = validate (Int16s.Collection.RefArray) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 |] [] - member _.``Int16s.Collection.RefArray C.I.less_or_equal``() = + member __.``Int16s.Collection.RefArray C.I.less_or_equal``() = validate (Int16s.Collection.RefArray) C.I.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 |] [] - member _.``Int16s.Collection.RefArray C.I.greater_than``() = + member __.``Int16s.Collection.RefArray C.I.greater_than``() = validate (Int16s.Collection.RefArray) C.I.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 |] [] - member _.``Int16s.Collection.RefArray C.I.greater_or_equal``() = + member __.``Int16s.Collection.RefArray C.I.greater_or_equal``() = validate (Int16s.Collection.RefArray) C.I.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 |] [] - member _.``Int16s.Collection.RefArray C.N.equals``() = + member __.``Int16s.Collection.RefArray C.N.equals``() = validate (Int16s.Collection.RefArray) C.N.equals [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.RefArray C.N.equal``() = + member __.``Int16s.Collection.RefArray C.N.equal``() = validate (Int16s.Collection.RefArray) C.N.equal [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.RefArray C.N.not_equal``() = + member __.``Int16s.Collection.RefArray C.N.not_equal``() = validate (Int16s.Collection.RefArray) C.N.not_equal [| 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int16s.Collection.RefArray C.N.compare``() = + member __.``Int16s.Collection.RefArray C.N.compare``() = validate (Int16s.Collection.RefArray) C.N.compare [| 0;0;1;1;1;0;0;1;1;1;-1;-1;0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0 |] [] - member _.``Int16s.Collection.RefArray C.N.less_than``() = + member __.``Int16s.Collection.RefArray C.N.less_than``() = validate (Int16s.Collection.RefArray) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 |] [] - member _.``Int16s.Collection.RefArray C.N.less_or_equal``() = + member __.``Int16s.Collection.RefArray C.N.less_or_equal``() = validate (Int16s.Collection.RefArray) C.N.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 |] [] - member _.``Int16s.Collection.RefArray C.N.greater_than``() = + member __.``Int16s.Collection.RefArray C.N.greater_than``() = validate (Int16s.Collection.RefArray) C.N.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 |] [] - member _.``Int16s.Collection.RefArray C.N.greater_or_equal``() = + member __.``Int16s.Collection.RefArray C.N.greater_or_equal``() = validate (Int16s.Collection.RefArray) C.N.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 |] [] - member _.``Int16s.Collection.RefWrapArray C.I.equals``() = + member __.``Int16s.Collection.RefWrapArray C.I.equals``() = validate (Int16s.Collection.RefWrapArray) C.I.equals [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.RefWrapArray C.I.equal``() = + member __.``Int16s.Collection.RefWrapArray C.I.equal``() = validate (Int16s.Collection.RefWrapArray) C.I.equal [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.RefWrapArray C.I.not_equal``() = + member __.``Int16s.Collection.RefWrapArray C.I.not_equal``() = validate (Int16s.Collection.RefWrapArray) C.I.not_equal [| 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int16s.Collection.RefWrapArray C.I.compare``() = + member __.``Int16s.Collection.RefWrapArray C.I.compare``() = validate (Int16s.Collection.RefWrapArray) C.I.compare [| 0;0;32768;32767;32766;0;0;32768;32767;32766;-32768;-32768;0;-1;-2;-32767;-32767;1;0;-1;-32766;-32766;2;1;0 |] [] - member _.``Int16s.Collection.RefWrapArray C.I.less_than``() = + member __.``Int16s.Collection.RefWrapArray C.I.less_than``() = validate (Int16s.Collection.RefWrapArray) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 |] [] - member _.``Int16s.Collection.RefWrapArray C.I.less_or_equal``() = + member __.``Int16s.Collection.RefWrapArray C.I.less_or_equal``() = validate (Int16s.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 |] [] - member _.``Int16s.Collection.RefWrapArray C.I.greater_than``() = + member __.``Int16s.Collection.RefWrapArray C.I.greater_than``() = validate (Int16s.Collection.RefWrapArray) C.I.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 |] [] - member _.``Int16s.Collection.RefWrapArray C.I.greater_or_equal``() = + member __.``Int16s.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Int16s.Collection.RefWrapArray) C.I.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 |] [] - member _.``Int16s.Collection.RefWrapArray C.N.equals``() = + member __.``Int16s.Collection.RefWrapArray C.N.equals``() = validate (Int16s.Collection.RefWrapArray) C.N.equals [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.RefWrapArray C.N.equal``() = + member __.``Int16s.Collection.RefWrapArray C.N.equal``() = validate (Int16s.Collection.RefWrapArray) C.N.equal [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.RefWrapArray C.N.not_equal``() = + member __.``Int16s.Collection.RefWrapArray C.N.not_equal``() = validate (Int16s.Collection.RefWrapArray) C.N.not_equal [| 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int16s.Collection.RefWrapArray C.N.compare``() = + member __.``Int16s.Collection.RefWrapArray C.N.compare``() = validate (Int16s.Collection.RefWrapArray) C.N.compare [| 0;0;32768;32767;32766;0;0;32768;32767;32766;-32768;-32768;0;-1;-2;-32767;-32767;1;0;-1;-32766;-32766;2;1;0 |] [] - member _.``Int16s.Collection.RefWrapArray C.N.less_than``() = + member __.``Int16s.Collection.RefWrapArray C.N.less_than``() = validate (Int16s.Collection.RefWrapArray) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 |] [] - member _.``Int16s.Collection.RefWrapArray C.N.less_or_equal``() = + member __.``Int16s.Collection.RefWrapArray C.N.less_or_equal``() = validate (Int16s.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 |] [] - member _.``Int16s.Collection.RefWrapArray C.N.greater_than``() = + member __.``Int16s.Collection.RefWrapArray C.N.greater_than``() = validate (Int16s.Collection.RefWrapArray) C.N.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 |] [] - member _.``Int16s.Collection.RefWrapArray C.N.greater_or_equal``() = + member __.``Int16s.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Int16s.Collection.RefWrapArray) C.N.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 |] [] - member _.``Int16s.Collection.UnionArray C.I.equals``() = + member __.``Int16s.Collection.UnionArray C.I.equals``() = validate (Int16s.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1; @@ -6891,7 +6891,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionArray C.I.equal``() = + member __.``Int16s.Collection.UnionArray C.I.equal``() = validate (Int16s.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1; @@ -6927,7 +6927,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionArray C.I.not_equal``() = + member __.``Int16s.Collection.UnionArray C.I.not_equal``() = validate (Int16s.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0; @@ -6963,7 +6963,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionArray C.I.compare``() = + member __.``Int16s.Collection.UnionArray C.I.compare``() = validate (Int16s.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;0; @@ -6999,7 +6999,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionArray C.I.less_than``() = + member __.``Int16s.Collection.UnionArray C.I.less_than``() = validate (Int16s.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -7035,7 +7035,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionArray C.I.less_or_equal``() = + member __.``Int16s.Collection.UnionArray C.I.less_or_equal``() = validate (Int16s.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -7071,7 +7071,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionArray C.I.greater_than``() = + member __.``Int16s.Collection.UnionArray C.I.greater_than``() = validate (Int16s.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -7107,7 +7107,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionArray C.I.greater_or_equal``() = + member __.``Int16s.Collection.UnionArray C.I.greater_or_equal``() = validate (Int16s.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -7143,7 +7143,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionArray C.N.equals``() = + member __.``Int16s.Collection.UnionArray C.N.equals``() = validate (Int16s.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1; @@ -7179,7 +7179,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionArray C.N.equal``() = + member __.``Int16s.Collection.UnionArray C.N.equal``() = validate (Int16s.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1; @@ -7215,7 +7215,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionArray C.N.not_equal``() = + member __.``Int16s.Collection.UnionArray C.N.not_equal``() = validate (Int16s.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0; @@ -7251,7 +7251,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionArray C.N.compare``() = + member __.``Int16s.Collection.UnionArray C.N.compare``() = validate (Int16s.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;0; @@ -7287,7 +7287,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionArray C.N.less_than``() = + member __.``Int16s.Collection.UnionArray C.N.less_than``() = validate (Int16s.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -7323,7 +7323,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionArray C.N.less_or_equal``() = + member __.``Int16s.Collection.UnionArray C.N.less_or_equal``() = validate (Int16s.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -7359,7 +7359,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionArray C.N.greater_than``() = + member __.``Int16s.Collection.UnionArray C.N.greater_than``() = validate (Int16s.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -7395,7 +7395,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionArray C.N.greater_or_equal``() = + member __.``Int16s.Collection.UnionArray C.N.greater_or_equal``() = validate (Int16s.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -7431,7 +7431,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionWrapArray C.I.equals``() = + member __.``Int16s.Collection.UnionWrapArray C.I.equals``() = validate (Int16s.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1; @@ -7467,7 +7467,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionWrapArray C.I.equal``() = + member __.``Int16s.Collection.UnionWrapArray C.I.equal``() = validate (Int16s.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1; @@ -7503,7 +7503,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionWrapArray C.I.not_equal``() = + member __.``Int16s.Collection.UnionWrapArray C.I.not_equal``() = validate (Int16s.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0; @@ -7539,7 +7539,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionWrapArray C.I.compare``() = + member __.``Int16s.Collection.UnionWrapArray C.I.compare``() = validate (Int16s.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;32768;-1;-2;-3;-3;-3;-3;32767;-1;-2;-3;-3;-3;-3;32766;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;0;-1;-2;-2;-2;-2;1;32768;-1;-2;-2;-2;-2;1;32767;-1;-2;-2;-2;-2;1;32766;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;0; @@ -7575,7 +7575,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionWrapArray C.I.less_than``() = + member __.``Int16s.Collection.UnionWrapArray C.I.less_than``() = validate (Int16s.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -7611,7 +7611,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionWrapArray C.I.less_or_equal``() = + member __.``Int16s.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Int16s.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -7647,7 +7647,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionWrapArray C.I.greater_than``() = + member __.``Int16s.Collection.UnionWrapArray C.I.greater_than``() = validate (Int16s.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -7683,7 +7683,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionWrapArray C.I.greater_or_equal``() = + member __.``Int16s.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Int16s.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -7719,7 +7719,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionWrapArray C.N.equals``() = + member __.``Int16s.Collection.UnionWrapArray C.N.equals``() = validate (Int16s.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1; @@ -7755,7 +7755,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionWrapArray C.N.equal``() = + member __.``Int16s.Collection.UnionWrapArray C.N.equal``() = validate (Int16s.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1; @@ -7791,7 +7791,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionWrapArray C.N.not_equal``() = + member __.``Int16s.Collection.UnionWrapArray C.N.not_equal``() = validate (Int16s.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0; @@ -7827,7 +7827,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionWrapArray C.N.compare``() = + member __.``Int16s.Collection.UnionWrapArray C.N.compare``() = validate (Int16s.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;32768;-1;-2;-3;-3;-3;-3;32767;-1;-2;-3;-3;-3;-3;32766;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;0;-1;-2;-2;-2;-2;1;32768;-1;-2;-2;-2;-2;1;32767;-1;-2;-2;-2;-2;1;32766;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;0; @@ -7863,7 +7863,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionWrapArray C.N.less_than``() = + member __.``Int16s.Collection.UnionWrapArray C.N.less_than``() = validate (Int16s.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -7899,7 +7899,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionWrapArray C.N.less_or_equal``() = + member __.``Int16s.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Int16s.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -7935,7 +7935,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionWrapArray C.N.greater_than``() = + member __.``Int16s.Collection.UnionWrapArray C.N.greater_than``() = validate (Int16s.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -7971,7 +7971,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.UnionWrapArray C.N.greater_or_equal``() = + member __.``Int16s.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Int16s.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -8007,199 +8007,199 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ValueArray C.I.equals``() = + member __.``Int16s.Collection.ValueArray C.I.equals``() = validate (Int16s.Collection.ValueArray) C.I.equals [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.ValueArray C.I.equal``() = + member __.``Int16s.Collection.ValueArray C.I.equal``() = validate (Int16s.Collection.ValueArray) C.I.equal [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.ValueArray C.I.not_equal``() = + member __.``Int16s.Collection.ValueArray C.I.not_equal``() = validate (Int16s.Collection.ValueArray) C.I.not_equal [| 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int16s.Collection.ValueArray C.I.compare``() = + member __.``Int16s.Collection.ValueArray C.I.compare``() = validate (Int16s.Collection.ValueArray) C.I.compare [| 0;0;1;1;1;0;0;1;1;1;-1;-1;0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0 |] [] - member _.``Int16s.Collection.ValueArray C.I.less_than``() = + member __.``Int16s.Collection.ValueArray C.I.less_than``() = validate (Int16s.Collection.ValueArray) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 |] [] - member _.``Int16s.Collection.ValueArray C.I.less_or_equal``() = + member __.``Int16s.Collection.ValueArray C.I.less_or_equal``() = validate (Int16s.Collection.ValueArray) C.I.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 |] [] - member _.``Int16s.Collection.ValueArray C.I.greater_than``() = + member __.``Int16s.Collection.ValueArray C.I.greater_than``() = validate (Int16s.Collection.ValueArray) C.I.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 |] [] - member _.``Int16s.Collection.ValueArray C.I.greater_or_equal``() = + member __.``Int16s.Collection.ValueArray C.I.greater_or_equal``() = validate (Int16s.Collection.ValueArray) C.I.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 |] [] - member _.``Int16s.Collection.ValueArray C.N.equals``() = + member __.``Int16s.Collection.ValueArray C.N.equals``() = validate (Int16s.Collection.ValueArray) C.N.equals [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.ValueArray C.N.equal``() = + member __.``Int16s.Collection.ValueArray C.N.equal``() = validate (Int16s.Collection.ValueArray) C.N.equal [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.ValueArray C.N.not_equal``() = + member __.``Int16s.Collection.ValueArray C.N.not_equal``() = validate (Int16s.Collection.ValueArray) C.N.not_equal [| 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int16s.Collection.ValueArray C.N.compare``() = + member __.``Int16s.Collection.ValueArray C.N.compare``() = validate (Int16s.Collection.ValueArray) C.N.compare [| 0;0;1;1;1;0;0;1;1;1;-1;-1;0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0 |] [] - member _.``Int16s.Collection.ValueArray C.N.less_than``() = + member __.``Int16s.Collection.ValueArray C.N.less_than``() = validate (Int16s.Collection.ValueArray) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 |] [] - member _.``Int16s.Collection.ValueArray C.N.less_or_equal``() = + member __.``Int16s.Collection.ValueArray C.N.less_or_equal``() = validate (Int16s.Collection.ValueArray) C.N.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 |] [] - member _.``Int16s.Collection.ValueArray C.N.greater_than``() = + member __.``Int16s.Collection.ValueArray C.N.greater_than``() = validate (Int16s.Collection.ValueArray) C.N.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 |] [] - member _.``Int16s.Collection.ValueArray C.N.greater_or_equal``() = + member __.``Int16s.Collection.ValueArray C.N.greater_or_equal``() = validate (Int16s.Collection.ValueArray) C.N.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 |] [] - member _.``Int16s.Collection.ValueWrapArray C.I.equals``() = + member __.``Int16s.Collection.ValueWrapArray C.I.equals``() = validate (Int16s.Collection.ValueWrapArray) C.I.equals [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.ValueWrapArray C.I.equal``() = + member __.``Int16s.Collection.ValueWrapArray C.I.equal``() = validate (Int16s.Collection.ValueWrapArray) C.I.equal [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.ValueWrapArray C.I.not_equal``() = + member __.``Int16s.Collection.ValueWrapArray C.I.not_equal``() = validate (Int16s.Collection.ValueWrapArray) C.I.not_equal [| 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int16s.Collection.ValueWrapArray C.I.compare``() = + member __.``Int16s.Collection.ValueWrapArray C.I.compare``() = validate (Int16s.Collection.ValueWrapArray) C.I.compare [| 0;0;32768;32767;32766;0;0;32768;32767;32766;-32768;-32768;0;-1;-2;-32767;-32767;1;0;-1;-32766;-32766;2;1;0 |] [] - member _.``Int16s.Collection.ValueWrapArray C.I.less_than``() = + member __.``Int16s.Collection.ValueWrapArray C.I.less_than``() = validate (Int16s.Collection.ValueWrapArray) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 |] [] - member _.``Int16s.Collection.ValueWrapArray C.I.less_or_equal``() = + member __.``Int16s.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Int16s.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 |] [] - member _.``Int16s.Collection.ValueWrapArray C.I.greater_than``() = + member __.``Int16s.Collection.ValueWrapArray C.I.greater_than``() = validate (Int16s.Collection.ValueWrapArray) C.I.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 |] [] - member _.``Int16s.Collection.ValueWrapArray C.I.greater_or_equal``() = + member __.``Int16s.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Int16s.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 |] [] - member _.``Int16s.Collection.ValueWrapArray C.N.equals``() = + member __.``Int16s.Collection.ValueWrapArray C.N.equals``() = validate (Int16s.Collection.ValueWrapArray) C.N.equals [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.ValueWrapArray C.N.equal``() = + member __.``Int16s.Collection.ValueWrapArray C.N.equal``() = validate (Int16s.Collection.ValueWrapArray) C.N.equal [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int16s.Collection.ValueWrapArray C.N.not_equal``() = + member __.``Int16s.Collection.ValueWrapArray C.N.not_equal``() = validate (Int16s.Collection.ValueWrapArray) C.N.not_equal [| 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int16s.Collection.ValueWrapArray C.N.compare``() = + member __.``Int16s.Collection.ValueWrapArray C.N.compare``() = validate (Int16s.Collection.ValueWrapArray) C.N.compare [| 0;0;32768;32767;32766;0;0;32768;32767;32766;-32768;-32768;0;-1;-2;-32767;-32767;1;0;-1;-32766;-32766;2;1;0 |] [] - member _.``Int16s.Collection.ValueWrapArray C.N.less_than``() = + member __.``Int16s.Collection.ValueWrapArray C.N.less_than``() = validate (Int16s.Collection.ValueWrapArray) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 |] [] - member _.``Int16s.Collection.ValueWrapArray C.N.less_or_equal``() = + member __.``Int16s.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Int16s.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 |] [] - member _.``Int16s.Collection.ValueWrapArray C.N.greater_than``() = + member __.``Int16s.Collection.ValueWrapArray C.N.greater_than``() = validate (Int16s.Collection.ValueWrapArray) C.N.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 |] [] - member _.``Int16s.Collection.ValueWrapArray C.N.greater_or_equal``() = + member __.``Int16s.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Int16s.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 |] [] - member _.``Int16s.Collection.ArrayArray C.I.equals``() = + member __.``Int16s.Collection.ArrayArray C.I.equals``() = validate (Int16s.Collection.ArrayArray) C.I.equals [| 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8207,7 +8207,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray C.I.equal``() = + member __.``Int16s.Collection.ArrayArray C.I.equal``() = validate (Int16s.Collection.ArrayArray) C.I.equal [| 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8215,7 +8215,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray C.I.not_equal``() = + member __.``Int16s.Collection.ArrayArray C.I.not_equal``() = validate (Int16s.Collection.ArrayArray) C.I.not_equal [| 0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -8223,7 +8223,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray C.I.compare``() = + member __.``Int16s.Collection.ArrayArray C.I.compare``() = validate (Int16s.Collection.ArrayArray) C.I.compare [| 0;0;32768;32767;32766;-1;-1;-1;-1;-1;0;0;32768;32767;32766;-1;-1;-1;-1;-1;-32768;-32768;0;-1;-2;-1;-1;-1;-1;-1;-32767;-32767;1;0;-1;-1;-1;-1;-1;-1; -32766;-32766;2;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;32768;32768;32767;32766;1;1;1;1;1;-32768;0;32768;32767;32766;1;1;1;1;1;-32768;-32768;0;-1;-2; @@ -8231,7 +8231,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray C.I.less_than``() = + member __.``Int16s.Collection.ArrayArray C.I.less_than``() = validate (Int16s.Collection.ArrayArray) C.I.less_than [| 0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1; 1;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;1;1; @@ -8239,7 +8239,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray C.I.less_or_equal``() = + member __.``Int16s.Collection.ArrayArray C.I.less_or_equal``() = validate (Int16s.Collection.ArrayArray) C.I.less_or_equal [| 1;1;0;0;0;1;1;1;1;1;1;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 1;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;1;1;1; @@ -8247,7 +8247,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray C.I.greater_than``() = + member __.``Int16s.Collection.ArrayArray C.I.greater_than``() = validate (Int16s.Collection.ArrayArray) C.I.greater_than [| 0;0;1;1;1;0;0;0;0;0;0;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 0;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;0;0;0; @@ -8255,7 +8255,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray C.I.greater_or_equal``() = + member __.``Int16s.Collection.ArrayArray C.I.greater_or_equal``() = validate (Int16s.Collection.ArrayArray) C.I.greater_or_equal [| 1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0; 0;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;0;0; @@ -8263,7 +8263,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray C.N.equals``() = + member __.``Int16s.Collection.ArrayArray C.N.equals``() = validate (Int16s.Collection.ArrayArray) C.N.equals [| 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8271,7 +8271,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray C.N.equal``() = + member __.``Int16s.Collection.ArrayArray C.N.equal``() = validate (Int16s.Collection.ArrayArray) C.N.equal [| 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8279,7 +8279,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray C.N.not_equal``() = + member __.``Int16s.Collection.ArrayArray C.N.not_equal``() = validate (Int16s.Collection.ArrayArray) C.N.not_equal [| 0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -8287,7 +8287,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray C.N.compare``() = + member __.``Int16s.Collection.ArrayArray C.N.compare``() = validate (Int16s.Collection.ArrayArray) C.N.compare [| 0;0;32768;32767;32766;-1;-1;-1;-1;-1;0;0;32768;32767;32766;-1;-1;-1;-1;-1;-32768;-32768;0;-1;-2;-1;-1;-1;-1;-1;-32767;-32767;1;0;-1;-1;-1;-1;-1;-1; -32766;-32766;2;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;32768;32768;32767;32766;1;1;1;1;1;-32768;0;32768;32767;32766;1;1;1;1;1;-32768;-32768;0;-1;-2; @@ -8295,7 +8295,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray C.N.less_than``() = + member __.``Int16s.Collection.ArrayArray C.N.less_than``() = validate (Int16s.Collection.ArrayArray) C.N.less_than [| 0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1; 1;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;1;1; @@ -8303,7 +8303,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray C.N.less_or_equal``() = + member __.``Int16s.Collection.ArrayArray C.N.less_or_equal``() = validate (Int16s.Collection.ArrayArray) C.N.less_or_equal [| 1;1;0;0;0;1;1;1;1;1;1;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 1;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;1;1;1; @@ -8311,7 +8311,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray C.N.greater_than``() = + member __.``Int16s.Collection.ArrayArray C.N.greater_than``() = validate (Int16s.Collection.ArrayArray) C.N.greater_than [| 0;0;1;1;1;0;0;0;0;0;0;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 0;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;0;0;0; @@ -8319,7 +8319,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray C.N.greater_or_equal``() = + member __.``Int16s.Collection.ArrayArray C.N.greater_or_equal``() = validate (Int16s.Collection.ArrayArray) C.N.greater_or_equal [| 1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0; 0;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;0;0; @@ -8327,7 +8327,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ListArray C.I.equals``() = + member __.``Int16s.Collection.ListArray C.I.equals``() = validate (Int16s.Collection.ListArray) C.I.equals [| 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8335,7 +8335,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ListArray C.I.equal``() = + member __.``Int16s.Collection.ListArray C.I.equal``() = validate (Int16s.Collection.ListArray) C.I.equal [| 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8343,7 +8343,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ListArray C.I.not_equal``() = + member __.``Int16s.Collection.ListArray C.I.not_equal``() = validate (Int16s.Collection.ListArray) C.I.not_equal [| 0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -8351,7 +8351,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ListArray C.I.compare``() = + member __.``Int16s.Collection.ListArray C.I.compare``() = validate (Int16s.Collection.ListArray) C.I.compare [| 0;0;32768;32767;32766;-1;-1;32768;32767;32766;0;0;32768;32767;32766;-1;-1;32768;32767;32766;-32768;-32768;0;-1;-2;-32768;-32768;-1;-1;-2;-32767;-32767;1;0;-1;-32767;-32767;1;-1;-1; -32766;-32766;2;1;0;-32766;-32766;2;1;-1;1;1;32768;32767;32766;0;32768;32768;32767;32766;1;1;32768;32767;32766;-32768;0;32768;32767;32766;-32768;-32768;1;-1;-2;-32768;-32768;0;-1;-2; @@ -8359,7 +8359,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ListArray C.I.less_than``() = + member __.``Int16s.Collection.ListArray C.I.less_than``() = validate (Int16s.Collection.ListArray) C.I.less_than [| 0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;0;1;1; 1;1;0;0;0;1;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0;1;1;1;1;0;1;1; @@ -8367,7 +8367,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ListArray C.I.less_or_equal``() = + member __.``Int16s.Collection.ListArray C.I.less_or_equal``() = validate (Int16s.Collection.ListArray) C.I.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;0;1;1; 1;1;0;0;1;1;1;0;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;1;0;1;1;1;1;1;1;1; @@ -8375,7 +8375,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ListArray C.I.greater_than``() = + member __.``Int16s.Collection.ListArray C.I.greater_than``() = validate (Int16s.Collection.ListArray) C.I.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0; 0;0;1;1;0;0;0;1;1;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;0;0;1;0;0;0;0;0;0;0; @@ -8383,7 +8383,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ListArray C.I.greater_or_equal``() = + member __.``Int16s.Collection.ListArray C.I.greater_or_equal``() = validate (Int16s.Collection.ListArray) C.I.greater_or_equal [| 1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;0;0; 0;0;1;1;1;0;0;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1;0;0;0;0;1;0;0; @@ -8391,7 +8391,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ListArray C.N.equals``() = + member __.``Int16s.Collection.ListArray C.N.equals``() = validate (Int16s.Collection.ListArray) C.N.equals [| 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8399,7 +8399,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ListArray C.N.equal``() = + member __.``Int16s.Collection.ListArray C.N.equal``() = validate (Int16s.Collection.ListArray) C.N.equal [| 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8407,7 +8407,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ListArray C.N.not_equal``() = + member __.``Int16s.Collection.ListArray C.N.not_equal``() = validate (Int16s.Collection.ListArray) C.N.not_equal [| 0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -8415,7 +8415,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ListArray C.N.compare``() = + member __.``Int16s.Collection.ListArray C.N.compare``() = validate (Int16s.Collection.ListArray) C.N.compare [| 0;0;32768;32767;32766;-1;-1;32768;32767;32766;0;0;32768;32767;32766;-1;-1;32768;32767;32766;-32768;-32768;0;-1;-2;-32768;-32768;-1;-1;-2;-32767;-32767;1;0;-1;-32767;-32767;1;-1;-1; -32766;-32766;2;1;0;-32766;-32766;2;1;-1;1;1;32768;32767;32766;0;32768;32768;32767;32766;1;1;32768;32767;32766;-32768;0;32768;32767;32766;-32768;-32768;1;-1;-2;-32768;-32768;0;-1;-2; @@ -8423,7 +8423,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ListArray C.N.less_than``() = + member __.``Int16s.Collection.ListArray C.N.less_than``() = validate (Int16s.Collection.ListArray) C.N.less_than [| 0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;0;1;1; 1;1;0;0;0;1;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0;1;1;1;1;0;1;1; @@ -8431,7 +8431,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ListArray C.N.less_or_equal``() = + member __.``Int16s.Collection.ListArray C.N.less_or_equal``() = validate (Int16s.Collection.ListArray) C.N.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;0;1;1; 1;1;0;0;1;1;1;0;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;1;0;1;1;1;1;1;1;1; @@ -8439,7 +8439,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ListArray C.N.greater_than``() = + member __.``Int16s.Collection.ListArray C.N.greater_than``() = validate (Int16s.Collection.ListArray) C.N.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0; 0;0;1;1;0;0;0;1;1;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;0;0;1;0;0;0;0;0;0;0; @@ -8447,7 +8447,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ListArray C.N.greater_or_equal``() = + member __.``Int16s.Collection.ListArray C.N.greater_or_equal``() = validate (Int16s.Collection.ListArray) C.N.greater_or_equal [| 1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;0;0; 0;0;1;1;1;0;0;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1;0;0;0;0;1;0;0; @@ -8455,7 +8455,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;1;0;0;0;1;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8463,7 +8463,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;1;0;0;0;1;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8471,7 +8471,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;0;1;1;1;0;1;1;1;1;0;0;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -8479,7 +8479,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;0;1;1;1;0;1;1;1;1;0;0;1;1;1;0;1;1;1;1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;1;-1;-1; -1;-1;1;1;0;-1;1;1;1;-1;0;0;1;1;1;0;1;1;1;1;-1;-1;1;-1;-1;-1;0;1;-1;-1;-1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -8487,7 +8487,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;1;1; 1;1;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;0;0;1;1;1;1;0;1;1;1;1;0;1;1; @@ -8495,7 +8495,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;0;0;0;1;0;0;0;0;1;1;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;0;0;1;1; 1;1;0;0;1;1;0;0;0;1;1;1;0;0;0;1;0;0;0;0;1;1;0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;1;1;1; @@ -8503,7 +8503,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;1;1;1;0;1;1;1;1;0;0;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;1;0;0; 0;0;1;1;0;0;1;1;1;0;0;0;1;1;1;0;1;1;1;1;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0; @@ -8511,7 +8511,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;1;1;0;0; 0;0;1;1;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;1;1;0;0;0;0;1;0;0;0;0;1;0;0; @@ -8519,7 +8519,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;1;0;0;0;1;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8527,7 +8527,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;1;0;0;0;1;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8535,7 +8535,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;0;1;1;1;0;1;1;1;1;0;0;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -8543,7 +8543,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;0;1;1;1;0;1;1;1;1;0;0;1;1;1;0;1;1;1;1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;1;-1;-1; -1;-1;1;1;0;-1;1;1;1;-1;0;0;1;1;1;0;1;1;1;1;-1;-1;1;-1;-1;-1;0;1;-1;-1;-1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -8551,7 +8551,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;1;1; 1;1;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;0;0;1;1;1;1;0;1;1;1;1;0;1;1; @@ -8559,7 +8559,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;0;0;0;1;0;0;0;0;1;1;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;0;0;1;1; 1;1;0;0;1;1;0;0;0;1;1;1;0;0;0;1;0;0;0;0;1;1;0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;1;1;1; @@ -8567,7 +8567,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;1;1;1;0;1;1;1;1;0;0;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;1;0;0; 0;0;1;1;0;0;1;1;1;0;0;0;1;1;1;0;1;1;1;1;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0; @@ -8575,7 +8575,7 @@ type GeneratedTests () = |] [] - member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;1;1;0;0; 0;0;1;1;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;1;1;0;0;0;0;1;0;0;0;0;1;0;0; @@ -8583,157 +8583,157 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.Array E.I.equals``() = + member __.``NullableInt16s.Collection.Array E.I.equals``() = validate (NullableInt16s.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.Array E.I.equal``() = + member __.``NullableInt16s.Collection.Array E.I.equal``() = validate (NullableInt16s.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.Array E.I.not_equal``() = + member __.``NullableInt16s.Collection.Array E.I.not_equal``() = validate (NullableInt16s.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt16s.Collection.Array E.N.equals``() = + member __.``NullableInt16s.Collection.Array E.N.equals``() = validate (NullableInt16s.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.Array E.N.equal``() = + member __.``NullableInt16s.Collection.Array E.N.equal``() = validate (NullableInt16s.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.Array E.N.not_equal``() = + member __.``NullableInt16s.Collection.Array E.N.not_equal``() = validate (NullableInt16s.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt16s.Collection.OptionArray E.I.equals``() = + member __.``NullableInt16s.Collection.OptionArray E.I.equals``() = validate (NullableInt16s.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.OptionArray E.I.equal``() = + member __.``NullableInt16s.Collection.OptionArray E.I.equal``() = validate (NullableInt16s.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.OptionArray E.I.not_equal``() = + member __.``NullableInt16s.Collection.OptionArray E.I.not_equal``() = validate (NullableInt16s.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``NullableInt16s.Collection.OptionArray E.N.equals``() = + member __.``NullableInt16s.Collection.OptionArray E.N.equals``() = validate (NullableInt16s.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.OptionArray E.N.equal``() = + member __.``NullableInt16s.Collection.OptionArray E.N.equal``() = validate (NullableInt16s.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.OptionArray E.N.not_equal``() = + member __.``NullableInt16s.Collection.OptionArray E.N.not_equal``() = validate (NullableInt16s.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``NullableInt16s.Collection.RefArray E.I.equals``() = + member __.``NullableInt16s.Collection.RefArray E.I.equals``() = validate (NullableInt16s.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.RefArray E.I.equal``() = + member __.``NullableInt16s.Collection.RefArray E.I.equal``() = validate (NullableInt16s.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.RefArray E.I.not_equal``() = + member __.``NullableInt16s.Collection.RefArray E.I.not_equal``() = validate (NullableInt16s.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt16s.Collection.RefArray E.N.equals``() = + member __.``NullableInt16s.Collection.RefArray E.N.equals``() = validate (NullableInt16s.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.RefArray E.N.equal``() = + member __.``NullableInt16s.Collection.RefArray E.N.equal``() = validate (NullableInt16s.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.RefArray E.N.not_equal``() = + member __.``NullableInt16s.Collection.RefArray E.N.not_equal``() = validate (NullableInt16s.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt16s.Collection.RefWrapArray E.I.equals``() = + member __.``NullableInt16s.Collection.RefWrapArray E.I.equals``() = validate (NullableInt16s.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.RefWrapArray E.I.equal``() = + member __.``NullableInt16s.Collection.RefWrapArray E.I.equal``() = validate (NullableInt16s.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.RefWrapArray E.I.not_equal``() = + member __.``NullableInt16s.Collection.RefWrapArray E.I.not_equal``() = validate (NullableInt16s.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt16s.Collection.RefWrapArray E.N.equals``() = + member __.``NullableInt16s.Collection.RefWrapArray E.N.equals``() = validate (NullableInt16s.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.RefWrapArray E.N.equal``() = + member __.``NullableInt16s.Collection.RefWrapArray E.N.equal``() = validate (NullableInt16s.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.RefWrapArray E.N.not_equal``() = + member __.``NullableInt16s.Collection.RefWrapArray E.N.not_equal``() = validate (NullableInt16s.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt16s.Collection.UnionArray E.I.equals``() = + member __.``NullableInt16s.Collection.UnionArray E.I.equals``() = validate (NullableInt16s.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -8783,7 +8783,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.UnionArray E.I.equal``() = + member __.``NullableInt16s.Collection.UnionArray E.I.equal``() = validate (NullableInt16s.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -8833,7 +8833,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.UnionArray E.I.not_equal``() = + member __.``NullableInt16s.Collection.UnionArray E.I.not_equal``() = validate (NullableInt16s.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -8883,7 +8883,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.UnionArray E.N.equals``() = + member __.``NullableInt16s.Collection.UnionArray E.N.equals``() = validate (NullableInt16s.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -8933,7 +8933,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.UnionArray E.N.equal``() = + member __.``NullableInt16s.Collection.UnionArray E.N.equal``() = validate (NullableInt16s.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -8983,7 +8983,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.UnionArray E.N.not_equal``() = + member __.``NullableInt16s.Collection.UnionArray E.N.not_equal``() = validate (NullableInt16s.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -9033,7 +9033,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.UnionWrapArray E.I.equals``() = + member __.``NullableInt16s.Collection.UnionWrapArray E.I.equals``() = validate (NullableInt16s.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -9083,7 +9083,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.UnionWrapArray E.I.equal``() = + member __.``NullableInt16s.Collection.UnionWrapArray E.I.equal``() = validate (NullableInt16s.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -9133,7 +9133,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.UnionWrapArray E.I.not_equal``() = + member __.``NullableInt16s.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableInt16s.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -9183,7 +9183,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.UnionWrapArray E.N.equals``() = + member __.``NullableInt16s.Collection.UnionWrapArray E.N.equals``() = validate (NullableInt16s.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -9233,7 +9233,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.UnionWrapArray E.N.equal``() = + member __.``NullableInt16s.Collection.UnionWrapArray E.N.equal``() = validate (NullableInt16s.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -9283,7 +9283,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.UnionWrapArray E.N.not_equal``() = + member __.``NullableInt16s.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableInt16s.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -9333,79 +9333,79 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.ValueArray E.I.equals``() = + member __.``NullableInt16s.Collection.ValueArray E.I.equals``() = validate (NullableInt16s.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.ValueArray E.I.equal``() = + member __.``NullableInt16s.Collection.ValueArray E.I.equal``() = validate (NullableInt16s.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.ValueArray E.I.not_equal``() = + member __.``NullableInt16s.Collection.ValueArray E.I.not_equal``() = validate (NullableInt16s.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt16s.Collection.ValueArray E.N.equals``() = + member __.``NullableInt16s.Collection.ValueArray E.N.equals``() = validate (NullableInt16s.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.ValueArray E.N.equal``() = + member __.``NullableInt16s.Collection.ValueArray E.N.equal``() = validate (NullableInt16s.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.ValueArray E.N.not_equal``() = + member __.``NullableInt16s.Collection.ValueArray E.N.not_equal``() = validate (NullableInt16s.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt16s.Collection.ValueWrapArray E.I.equals``() = + member __.``NullableInt16s.Collection.ValueWrapArray E.I.equals``() = validate (NullableInt16s.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.ValueWrapArray E.I.equal``() = + member __.``NullableInt16s.Collection.ValueWrapArray E.I.equal``() = validate (NullableInt16s.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.ValueWrapArray E.I.not_equal``() = + member __.``NullableInt16s.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableInt16s.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt16s.Collection.ValueWrapArray E.N.equals``() = + member __.``NullableInt16s.Collection.ValueWrapArray E.N.equals``() = validate (NullableInt16s.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.ValueWrapArray E.N.equal``() = + member __.``NullableInt16s.Collection.ValueWrapArray E.N.equal``() = validate (NullableInt16s.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt16s.Collection.ValueWrapArray E.N.not_equal``() = + member __.``NullableInt16s.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableInt16s.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt16s.Collection.ArrayArray E.I.equals``() = + member __.``NullableInt16s.Collection.ArrayArray E.I.equals``() = validate (NullableInt16s.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -9414,7 +9414,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.ArrayArray E.I.equal``() = + member __.``NullableInt16s.Collection.ArrayArray E.I.equal``() = validate (NullableInt16s.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -9423,7 +9423,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.ArrayArray E.I.not_equal``() = + member __.``NullableInt16s.Collection.ArrayArray E.I.not_equal``() = validate (NullableInt16s.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -9432,7 +9432,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.ArrayArray E.N.equals``() = + member __.``NullableInt16s.Collection.ArrayArray E.N.equals``() = validate (NullableInt16s.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -9441,7 +9441,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.ArrayArray E.N.equal``() = + member __.``NullableInt16s.Collection.ArrayArray E.N.equal``() = validate (NullableInt16s.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -9450,7 +9450,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.ArrayArray E.N.not_equal``() = + member __.``NullableInt16s.Collection.ArrayArray E.N.not_equal``() = validate (NullableInt16s.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -9459,7 +9459,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.ListArray E.I.equals``() = + member __.``NullableInt16s.Collection.ListArray E.I.equals``() = validate (NullableInt16s.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -9468,7 +9468,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.ListArray E.I.equal``() = + member __.``NullableInt16s.Collection.ListArray E.I.equal``() = validate (NullableInt16s.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -9477,7 +9477,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.ListArray E.I.not_equal``() = + member __.``NullableInt16s.Collection.ListArray E.I.not_equal``() = validate (NullableInt16s.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -9486,7 +9486,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.ListArray E.N.equals``() = + member __.``NullableInt16s.Collection.ListArray E.N.equals``() = validate (NullableInt16s.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -9495,7 +9495,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.ListArray E.N.equal``() = + member __.``NullableInt16s.Collection.ListArray E.N.equal``() = validate (NullableInt16s.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -9504,7 +9504,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt16s.Collection.ListArray E.N.not_equal``() = + member __.``NullableInt16s.Collection.ListArray E.N.not_equal``() = validate (NullableInt16s.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -9513,391 +9513,391 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.Array C.I.equals``() = + member __.``Int32s.Collection.Array C.I.equals``() = validate (Int32s.Collection.Array) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.Array C.I.equal``() = + member __.``Int32s.Collection.Array C.I.equal``() = validate (Int32s.Collection.Array) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.Array C.I.not_equal``() = + member __.``Int32s.Collection.Array C.I.not_equal``() = validate (Int32s.Collection.Array) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int32s.Collection.Array C.I.compare``() = + member __.``Int32s.Collection.Array C.I.compare``() = validate (Int32s.Collection.Array) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Int32s.Collection.Array C.I.less_than``() = + member __.``Int32s.Collection.Array C.I.less_than``() = validate (Int32s.Collection.Array) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Int32s.Collection.Array C.I.less_or_equal``() = + member __.``Int32s.Collection.Array C.I.less_or_equal``() = validate (Int32s.Collection.Array) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Int32s.Collection.Array C.I.greater_than``() = + member __.``Int32s.Collection.Array C.I.greater_than``() = validate (Int32s.Collection.Array) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Int32s.Collection.Array C.I.greater_or_equal``() = + member __.``Int32s.Collection.Array C.I.greater_or_equal``() = validate (Int32s.Collection.Array) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Int32s.Collection.Array C.N.equals``() = + member __.``Int32s.Collection.Array C.N.equals``() = validate (Int32s.Collection.Array) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.Array C.N.equal``() = + member __.``Int32s.Collection.Array C.N.equal``() = validate (Int32s.Collection.Array) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.Array C.N.not_equal``() = + member __.``Int32s.Collection.Array C.N.not_equal``() = validate (Int32s.Collection.Array) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int32s.Collection.Array C.N.compare``() = + member __.``Int32s.Collection.Array C.N.compare``() = validate (Int32s.Collection.Array) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Int32s.Collection.Array C.N.less_than``() = + member __.``Int32s.Collection.Array C.N.less_than``() = validate (Int32s.Collection.Array) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Int32s.Collection.Array C.N.less_or_equal``() = + member __.``Int32s.Collection.Array C.N.less_or_equal``() = validate (Int32s.Collection.Array) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Int32s.Collection.Array C.N.greater_than``() = + member __.``Int32s.Collection.Array C.N.greater_than``() = validate (Int32s.Collection.Array) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Int32s.Collection.Array C.N.greater_or_equal``() = + member __.``Int32s.Collection.Array C.N.greater_or_equal``() = validate (Int32s.Collection.Array) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Int32s.Collection.OptionArray C.I.equals``() = + member __.``Int32s.Collection.OptionArray C.I.equals``() = validate (Int32s.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.OptionArray C.I.equal``() = + member __.``Int32s.Collection.OptionArray C.I.equal``() = validate (Int32s.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.OptionArray C.I.not_equal``() = + member __.``Int32s.Collection.OptionArray C.I.not_equal``() = validate (Int32s.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Int32s.Collection.OptionArray C.I.compare``() = + member __.``Int32s.Collection.OptionArray C.I.compare``() = validate (Int32s.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;1;1;1;1;1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 |] [] - member _.``Int32s.Collection.OptionArray C.I.less_than``() = + member __.``Int32s.Collection.OptionArray C.I.less_than``() = validate (Int32s.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member _.``Int32s.Collection.OptionArray C.I.less_or_equal``() = + member __.``Int32s.Collection.OptionArray C.I.less_or_equal``() = validate (Int32s.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member _.``Int32s.Collection.OptionArray C.I.greater_than``() = + member __.``Int32s.Collection.OptionArray C.I.greater_than``() = validate (Int32s.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member _.``Int32s.Collection.OptionArray C.I.greater_or_equal``() = + member __.``Int32s.Collection.OptionArray C.I.greater_or_equal``() = validate (Int32s.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member _.``Int32s.Collection.OptionArray C.N.equals``() = + member __.``Int32s.Collection.OptionArray C.N.equals``() = validate (Int32s.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.OptionArray C.N.equal``() = + member __.``Int32s.Collection.OptionArray C.N.equal``() = validate (Int32s.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.OptionArray C.N.not_equal``() = + member __.``Int32s.Collection.OptionArray C.N.not_equal``() = validate (Int32s.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Int32s.Collection.OptionArray C.N.compare``() = + member __.``Int32s.Collection.OptionArray C.N.compare``() = validate (Int32s.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;1;1;1;1;1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 |] [] - member _.``Int32s.Collection.OptionArray C.N.less_than``() = + member __.``Int32s.Collection.OptionArray C.N.less_than``() = validate (Int32s.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member _.``Int32s.Collection.OptionArray C.N.less_or_equal``() = + member __.``Int32s.Collection.OptionArray C.N.less_or_equal``() = validate (Int32s.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member _.``Int32s.Collection.OptionArray C.N.greater_than``() = + member __.``Int32s.Collection.OptionArray C.N.greater_than``() = validate (Int32s.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member _.``Int32s.Collection.OptionArray C.N.greater_or_equal``() = + member __.``Int32s.Collection.OptionArray C.N.greater_or_equal``() = validate (Int32s.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member _.``Int32s.Collection.RefArray C.I.equals``() = + member __.``Int32s.Collection.RefArray C.I.equals``() = validate (Int32s.Collection.RefArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.RefArray C.I.equal``() = + member __.``Int32s.Collection.RefArray C.I.equal``() = validate (Int32s.Collection.RefArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.RefArray C.I.not_equal``() = + member __.``Int32s.Collection.RefArray C.I.not_equal``() = validate (Int32s.Collection.RefArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int32s.Collection.RefArray C.I.compare``() = + member __.``Int32s.Collection.RefArray C.I.compare``() = validate (Int32s.Collection.RefArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Int32s.Collection.RefArray C.I.less_than``() = + member __.``Int32s.Collection.RefArray C.I.less_than``() = validate (Int32s.Collection.RefArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Int32s.Collection.RefArray C.I.less_or_equal``() = + member __.``Int32s.Collection.RefArray C.I.less_or_equal``() = validate (Int32s.Collection.RefArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Int32s.Collection.RefArray C.I.greater_than``() = + member __.``Int32s.Collection.RefArray C.I.greater_than``() = validate (Int32s.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Int32s.Collection.RefArray C.I.greater_or_equal``() = + member __.``Int32s.Collection.RefArray C.I.greater_or_equal``() = validate (Int32s.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Int32s.Collection.RefArray C.N.equals``() = + member __.``Int32s.Collection.RefArray C.N.equals``() = validate (Int32s.Collection.RefArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.RefArray C.N.equal``() = + member __.``Int32s.Collection.RefArray C.N.equal``() = validate (Int32s.Collection.RefArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.RefArray C.N.not_equal``() = + member __.``Int32s.Collection.RefArray C.N.not_equal``() = validate (Int32s.Collection.RefArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int32s.Collection.RefArray C.N.compare``() = + member __.``Int32s.Collection.RefArray C.N.compare``() = validate (Int32s.Collection.RefArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Int32s.Collection.RefArray C.N.less_than``() = + member __.``Int32s.Collection.RefArray C.N.less_than``() = validate (Int32s.Collection.RefArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Int32s.Collection.RefArray C.N.less_or_equal``() = + member __.``Int32s.Collection.RefArray C.N.less_or_equal``() = validate (Int32s.Collection.RefArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Int32s.Collection.RefArray C.N.greater_than``() = + member __.``Int32s.Collection.RefArray C.N.greater_than``() = validate (Int32s.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Int32s.Collection.RefArray C.N.greater_or_equal``() = + member __.``Int32s.Collection.RefArray C.N.greater_or_equal``() = validate (Int32s.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Int32s.Collection.RefWrapArray C.I.equals``() = + member __.``Int32s.Collection.RefWrapArray C.I.equals``() = validate (Int32s.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.RefWrapArray C.I.equal``() = + member __.``Int32s.Collection.RefWrapArray C.I.equal``() = validate (Int32s.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.RefWrapArray C.I.not_equal``() = + member __.``Int32s.Collection.RefWrapArray C.I.not_equal``() = validate (Int32s.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int32s.Collection.RefWrapArray C.I.compare``() = + member __.``Int32s.Collection.RefWrapArray C.I.compare``() = validate (Int32s.Collection.RefWrapArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Int32s.Collection.RefWrapArray C.I.less_than``() = + member __.``Int32s.Collection.RefWrapArray C.I.less_than``() = validate (Int32s.Collection.RefWrapArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Int32s.Collection.RefWrapArray C.I.less_or_equal``() = + member __.``Int32s.Collection.RefWrapArray C.I.less_or_equal``() = validate (Int32s.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Int32s.Collection.RefWrapArray C.I.greater_than``() = + member __.``Int32s.Collection.RefWrapArray C.I.greater_than``() = validate (Int32s.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Int32s.Collection.RefWrapArray C.I.greater_or_equal``() = + member __.``Int32s.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Int32s.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Int32s.Collection.RefWrapArray C.N.equals``() = + member __.``Int32s.Collection.RefWrapArray C.N.equals``() = validate (Int32s.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.RefWrapArray C.N.equal``() = + member __.``Int32s.Collection.RefWrapArray C.N.equal``() = validate (Int32s.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.RefWrapArray C.N.not_equal``() = + member __.``Int32s.Collection.RefWrapArray C.N.not_equal``() = validate (Int32s.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int32s.Collection.RefWrapArray C.N.compare``() = + member __.``Int32s.Collection.RefWrapArray C.N.compare``() = validate (Int32s.Collection.RefWrapArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Int32s.Collection.RefWrapArray C.N.less_than``() = + member __.``Int32s.Collection.RefWrapArray C.N.less_than``() = validate (Int32s.Collection.RefWrapArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Int32s.Collection.RefWrapArray C.N.less_or_equal``() = + member __.``Int32s.Collection.RefWrapArray C.N.less_or_equal``() = validate (Int32s.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Int32s.Collection.RefWrapArray C.N.greater_than``() = + member __.``Int32s.Collection.RefWrapArray C.N.greater_than``() = validate (Int32s.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Int32s.Collection.RefWrapArray C.N.greater_or_equal``() = + member __.``Int32s.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Int32s.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Int32s.Collection.UnionArray C.I.equals``() = + member __.``Int32s.Collection.UnionArray C.I.equals``() = validate (Int32s.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -9933,7 +9933,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionArray C.I.equal``() = + member __.``Int32s.Collection.UnionArray C.I.equal``() = validate (Int32s.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -9969,7 +9969,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionArray C.I.not_equal``() = + member __.``Int32s.Collection.UnionArray C.I.not_equal``() = validate (Int32s.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -10005,7 +10005,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionArray C.I.compare``() = + member __.``Int32s.Collection.UnionArray C.I.compare``() = validate (Int32s.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -10041,7 +10041,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionArray C.I.less_than``() = + member __.``Int32s.Collection.UnionArray C.I.less_than``() = validate (Int32s.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -10077,7 +10077,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionArray C.I.less_or_equal``() = + member __.``Int32s.Collection.UnionArray C.I.less_or_equal``() = validate (Int32s.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -10113,7 +10113,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionArray C.I.greater_than``() = + member __.``Int32s.Collection.UnionArray C.I.greater_than``() = validate (Int32s.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -10149,7 +10149,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionArray C.I.greater_or_equal``() = + member __.``Int32s.Collection.UnionArray C.I.greater_or_equal``() = validate (Int32s.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -10185,7 +10185,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionArray C.N.equals``() = + member __.``Int32s.Collection.UnionArray C.N.equals``() = validate (Int32s.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -10221,7 +10221,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionArray C.N.equal``() = + member __.``Int32s.Collection.UnionArray C.N.equal``() = validate (Int32s.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -10257,7 +10257,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionArray C.N.not_equal``() = + member __.``Int32s.Collection.UnionArray C.N.not_equal``() = validate (Int32s.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -10293,7 +10293,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionArray C.N.compare``() = + member __.``Int32s.Collection.UnionArray C.N.compare``() = validate (Int32s.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -10329,7 +10329,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionArray C.N.less_than``() = + member __.``Int32s.Collection.UnionArray C.N.less_than``() = validate (Int32s.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -10365,7 +10365,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionArray C.N.less_or_equal``() = + member __.``Int32s.Collection.UnionArray C.N.less_or_equal``() = validate (Int32s.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -10401,7 +10401,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionArray C.N.greater_than``() = + member __.``Int32s.Collection.UnionArray C.N.greater_than``() = validate (Int32s.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -10437,7 +10437,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionArray C.N.greater_or_equal``() = + member __.``Int32s.Collection.UnionArray C.N.greater_or_equal``() = validate (Int32s.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -10473,7 +10473,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionWrapArray C.I.equals``() = + member __.``Int32s.Collection.UnionWrapArray C.I.equals``() = validate (Int32s.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -10509,7 +10509,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionWrapArray C.I.equal``() = + member __.``Int32s.Collection.UnionWrapArray C.I.equal``() = validate (Int32s.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -10545,7 +10545,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionWrapArray C.I.not_equal``() = + member __.``Int32s.Collection.UnionWrapArray C.I.not_equal``() = validate (Int32s.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -10581,7 +10581,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionWrapArray C.I.compare``() = + member __.``Int32s.Collection.UnionWrapArray C.I.compare``() = validate (Int32s.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -10617,7 +10617,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionWrapArray C.I.less_than``() = + member __.``Int32s.Collection.UnionWrapArray C.I.less_than``() = validate (Int32s.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -10653,7 +10653,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionWrapArray C.I.less_or_equal``() = + member __.``Int32s.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Int32s.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -10689,7 +10689,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionWrapArray C.I.greater_than``() = + member __.``Int32s.Collection.UnionWrapArray C.I.greater_than``() = validate (Int32s.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -10725,7 +10725,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionWrapArray C.I.greater_or_equal``() = + member __.``Int32s.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Int32s.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -10761,7 +10761,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionWrapArray C.N.equals``() = + member __.``Int32s.Collection.UnionWrapArray C.N.equals``() = validate (Int32s.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -10797,7 +10797,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionWrapArray C.N.equal``() = + member __.``Int32s.Collection.UnionWrapArray C.N.equal``() = validate (Int32s.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -10833,7 +10833,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionWrapArray C.N.not_equal``() = + member __.``Int32s.Collection.UnionWrapArray C.N.not_equal``() = validate (Int32s.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -10869,7 +10869,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionWrapArray C.N.compare``() = + member __.``Int32s.Collection.UnionWrapArray C.N.compare``() = validate (Int32s.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -10905,7 +10905,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionWrapArray C.N.less_than``() = + member __.``Int32s.Collection.UnionWrapArray C.N.less_than``() = validate (Int32s.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -10941,7 +10941,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionWrapArray C.N.less_or_equal``() = + member __.``Int32s.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Int32s.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -10977,7 +10977,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionWrapArray C.N.greater_than``() = + member __.``Int32s.Collection.UnionWrapArray C.N.greater_than``() = validate (Int32s.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -11013,7 +11013,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.UnionWrapArray C.N.greater_or_equal``() = + member __.``Int32s.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Int32s.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -11049,199 +11049,199 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ValueArray C.I.equals``() = + member __.``Int32s.Collection.ValueArray C.I.equals``() = validate (Int32s.Collection.ValueArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.ValueArray C.I.equal``() = + member __.``Int32s.Collection.ValueArray C.I.equal``() = validate (Int32s.Collection.ValueArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.ValueArray C.I.not_equal``() = + member __.``Int32s.Collection.ValueArray C.I.not_equal``() = validate (Int32s.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int32s.Collection.ValueArray C.I.compare``() = + member __.``Int32s.Collection.ValueArray C.I.compare``() = validate (Int32s.Collection.ValueArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Int32s.Collection.ValueArray C.I.less_than``() = + member __.``Int32s.Collection.ValueArray C.I.less_than``() = validate (Int32s.Collection.ValueArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Int32s.Collection.ValueArray C.I.less_or_equal``() = + member __.``Int32s.Collection.ValueArray C.I.less_or_equal``() = validate (Int32s.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Int32s.Collection.ValueArray C.I.greater_than``() = + member __.``Int32s.Collection.ValueArray C.I.greater_than``() = validate (Int32s.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Int32s.Collection.ValueArray C.I.greater_or_equal``() = + member __.``Int32s.Collection.ValueArray C.I.greater_or_equal``() = validate (Int32s.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Int32s.Collection.ValueArray C.N.equals``() = + member __.``Int32s.Collection.ValueArray C.N.equals``() = validate (Int32s.Collection.ValueArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.ValueArray C.N.equal``() = + member __.``Int32s.Collection.ValueArray C.N.equal``() = validate (Int32s.Collection.ValueArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.ValueArray C.N.not_equal``() = + member __.``Int32s.Collection.ValueArray C.N.not_equal``() = validate (Int32s.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int32s.Collection.ValueArray C.N.compare``() = + member __.``Int32s.Collection.ValueArray C.N.compare``() = validate (Int32s.Collection.ValueArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Int32s.Collection.ValueArray C.N.less_than``() = + member __.``Int32s.Collection.ValueArray C.N.less_than``() = validate (Int32s.Collection.ValueArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Int32s.Collection.ValueArray C.N.less_or_equal``() = + member __.``Int32s.Collection.ValueArray C.N.less_or_equal``() = validate (Int32s.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Int32s.Collection.ValueArray C.N.greater_than``() = + member __.``Int32s.Collection.ValueArray C.N.greater_than``() = validate (Int32s.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Int32s.Collection.ValueArray C.N.greater_or_equal``() = + member __.``Int32s.Collection.ValueArray C.N.greater_or_equal``() = validate (Int32s.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Int32s.Collection.ValueWrapArray C.I.equals``() = + member __.``Int32s.Collection.ValueWrapArray C.I.equals``() = validate (Int32s.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.ValueWrapArray C.I.equal``() = + member __.``Int32s.Collection.ValueWrapArray C.I.equal``() = validate (Int32s.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.ValueWrapArray C.I.not_equal``() = + member __.``Int32s.Collection.ValueWrapArray C.I.not_equal``() = validate (Int32s.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int32s.Collection.ValueWrapArray C.I.compare``() = + member __.``Int32s.Collection.ValueWrapArray C.I.compare``() = validate (Int32s.Collection.ValueWrapArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Int32s.Collection.ValueWrapArray C.I.less_than``() = + member __.``Int32s.Collection.ValueWrapArray C.I.less_than``() = validate (Int32s.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Int32s.Collection.ValueWrapArray C.I.less_or_equal``() = + member __.``Int32s.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Int32s.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Int32s.Collection.ValueWrapArray C.I.greater_than``() = + member __.``Int32s.Collection.ValueWrapArray C.I.greater_than``() = validate (Int32s.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Int32s.Collection.ValueWrapArray C.I.greater_or_equal``() = + member __.``Int32s.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Int32s.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Int32s.Collection.ValueWrapArray C.N.equals``() = + member __.``Int32s.Collection.ValueWrapArray C.N.equals``() = validate (Int32s.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.ValueWrapArray C.N.equal``() = + member __.``Int32s.Collection.ValueWrapArray C.N.equal``() = validate (Int32s.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int32s.Collection.ValueWrapArray C.N.not_equal``() = + member __.``Int32s.Collection.ValueWrapArray C.N.not_equal``() = validate (Int32s.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int32s.Collection.ValueWrapArray C.N.compare``() = + member __.``Int32s.Collection.ValueWrapArray C.N.compare``() = validate (Int32s.Collection.ValueWrapArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Int32s.Collection.ValueWrapArray C.N.less_than``() = + member __.``Int32s.Collection.ValueWrapArray C.N.less_than``() = validate (Int32s.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Int32s.Collection.ValueWrapArray C.N.less_or_equal``() = + member __.``Int32s.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Int32s.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Int32s.Collection.ValueWrapArray C.N.greater_than``() = + member __.``Int32s.Collection.ValueWrapArray C.N.greater_than``() = validate (Int32s.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Int32s.Collection.ValueWrapArray C.N.greater_or_equal``() = + member __.``Int32s.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Int32s.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Int32s.Collection.ArrayArray C.I.equals``() = + member __.``Int32s.Collection.ArrayArray C.I.equals``() = validate (Int32s.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11249,7 +11249,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray C.I.equal``() = + member __.``Int32s.Collection.ArrayArray C.I.equal``() = validate (Int32s.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11257,7 +11257,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray C.I.not_equal``() = + member __.``Int32s.Collection.ArrayArray C.I.not_equal``() = validate (Int32s.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -11265,7 +11265,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray C.I.compare``() = + member __.``Int32s.Collection.ArrayArray C.I.compare``() = validate (Int32s.Collection.ArrayArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;1;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1; @@ -11273,7 +11273,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray C.I.less_than``() = + member __.``Int32s.Collection.ArrayArray C.I.less_than``() = validate (Int32s.Collection.ArrayArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; @@ -11281,7 +11281,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray C.I.less_or_equal``() = + member __.``Int32s.Collection.ArrayArray C.I.less_or_equal``() = validate (Int32s.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; @@ -11289,7 +11289,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray C.I.greater_than``() = + member __.``Int32s.Collection.ArrayArray C.I.greater_than``() = validate (Int32s.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; @@ -11297,7 +11297,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray C.I.greater_or_equal``() = + member __.``Int32s.Collection.ArrayArray C.I.greater_or_equal``() = validate (Int32s.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; @@ -11305,7 +11305,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray C.N.equals``() = + member __.``Int32s.Collection.ArrayArray C.N.equals``() = validate (Int32s.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11313,7 +11313,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray C.N.equal``() = + member __.``Int32s.Collection.ArrayArray C.N.equal``() = validate (Int32s.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11321,7 +11321,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray C.N.not_equal``() = + member __.``Int32s.Collection.ArrayArray C.N.not_equal``() = validate (Int32s.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -11329,7 +11329,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray C.N.compare``() = + member __.``Int32s.Collection.ArrayArray C.N.compare``() = validate (Int32s.Collection.ArrayArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;1;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1; @@ -11337,7 +11337,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray C.N.less_than``() = + member __.``Int32s.Collection.ArrayArray C.N.less_than``() = validate (Int32s.Collection.ArrayArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; @@ -11345,7 +11345,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray C.N.less_or_equal``() = + member __.``Int32s.Collection.ArrayArray C.N.less_or_equal``() = validate (Int32s.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; @@ -11353,7 +11353,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray C.N.greater_than``() = + member __.``Int32s.Collection.ArrayArray C.N.greater_than``() = validate (Int32s.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; @@ -11361,7 +11361,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray C.N.greater_or_equal``() = + member __.``Int32s.Collection.ArrayArray C.N.greater_or_equal``() = validate (Int32s.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; @@ -11369,7 +11369,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ListArray C.I.equals``() = + member __.``Int32s.Collection.ListArray C.I.equals``() = validate (Int32s.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11377,7 +11377,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ListArray C.I.equal``() = + member __.``Int32s.Collection.ListArray C.I.equal``() = validate (Int32s.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11385,7 +11385,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ListArray C.I.not_equal``() = + member __.``Int32s.Collection.ListArray C.I.not_equal``() = validate (Int32s.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -11393,7 +11393,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ListArray C.I.compare``() = + member __.``Int32s.Collection.ListArray C.I.compare``() = validate (Int32s.Collection.ListArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; 1;-1;1;1;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;1;-1;0;-1;-1; @@ -11401,7 +11401,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ListArray C.I.less_than``() = + member __.``Int32s.Collection.ListArray C.I.less_than``() = validate (Int32s.Collection.ListArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; @@ -11409,7 +11409,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ListArray C.I.less_or_equal``() = + member __.``Int32s.Collection.ListArray C.I.less_or_equal``() = validate (Int32s.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; @@ -11417,7 +11417,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ListArray C.I.greater_than``() = + member __.``Int32s.Collection.ListArray C.I.greater_than``() = validate (Int32s.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; @@ -11425,7 +11425,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ListArray C.I.greater_or_equal``() = + member __.``Int32s.Collection.ListArray C.I.greater_or_equal``() = validate (Int32s.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; @@ -11433,7 +11433,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ListArray C.N.equals``() = + member __.``Int32s.Collection.ListArray C.N.equals``() = validate (Int32s.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11441,7 +11441,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ListArray C.N.equal``() = + member __.``Int32s.Collection.ListArray C.N.equal``() = validate (Int32s.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11449,7 +11449,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ListArray C.N.not_equal``() = + member __.``Int32s.Collection.ListArray C.N.not_equal``() = validate (Int32s.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -11457,7 +11457,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ListArray C.N.compare``() = + member __.``Int32s.Collection.ListArray C.N.compare``() = validate (Int32s.Collection.ListArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; 1;-1;1;1;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;1;-1;0;-1;-1; @@ -11465,7 +11465,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ListArray C.N.less_than``() = + member __.``Int32s.Collection.ListArray C.N.less_than``() = validate (Int32s.Collection.ListArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; @@ -11473,7 +11473,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ListArray C.N.less_or_equal``() = + member __.``Int32s.Collection.ListArray C.N.less_or_equal``() = validate (Int32s.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; @@ -11481,7 +11481,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ListArray C.N.greater_than``() = + member __.``Int32s.Collection.ListArray C.N.greater_than``() = validate (Int32s.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; @@ -11489,7 +11489,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ListArray C.N.greater_or_equal``() = + member __.``Int32s.Collection.ListArray C.N.greater_or_equal``() = validate (Int32s.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; @@ -11497,7 +11497,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11505,7 +11505,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11513,7 +11513,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -11521,7 +11521,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; @@ -11529,7 +11529,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; @@ -11537,7 +11537,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; @@ -11545,7 +11545,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; @@ -11553,7 +11553,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; @@ -11561,7 +11561,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11569,7 +11569,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11577,7 +11577,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -11585,7 +11585,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; @@ -11593,7 +11593,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; @@ -11601,7 +11601,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; @@ -11609,7 +11609,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; @@ -11617,7 +11617,7 @@ type GeneratedTests () = |] [] - member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; @@ -11625,157 +11625,157 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.Array E.I.equals``() = + member __.``NullableInt32s.Collection.Array E.I.equals``() = validate (NullableInt32s.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.Array E.I.equal``() = + member __.``NullableInt32s.Collection.Array E.I.equal``() = validate (NullableInt32s.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.Array E.I.not_equal``() = + member __.``NullableInt32s.Collection.Array E.I.not_equal``() = validate (NullableInt32s.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt32s.Collection.Array E.N.equals``() = + member __.``NullableInt32s.Collection.Array E.N.equals``() = validate (NullableInt32s.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.Array E.N.equal``() = + member __.``NullableInt32s.Collection.Array E.N.equal``() = validate (NullableInt32s.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.Array E.N.not_equal``() = + member __.``NullableInt32s.Collection.Array E.N.not_equal``() = validate (NullableInt32s.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt32s.Collection.OptionArray E.I.equals``() = + member __.``NullableInt32s.Collection.OptionArray E.I.equals``() = validate (NullableInt32s.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.OptionArray E.I.equal``() = + member __.``NullableInt32s.Collection.OptionArray E.I.equal``() = validate (NullableInt32s.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.OptionArray E.I.not_equal``() = + member __.``NullableInt32s.Collection.OptionArray E.I.not_equal``() = validate (NullableInt32s.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``NullableInt32s.Collection.OptionArray E.N.equals``() = + member __.``NullableInt32s.Collection.OptionArray E.N.equals``() = validate (NullableInt32s.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.OptionArray E.N.equal``() = + member __.``NullableInt32s.Collection.OptionArray E.N.equal``() = validate (NullableInt32s.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.OptionArray E.N.not_equal``() = + member __.``NullableInt32s.Collection.OptionArray E.N.not_equal``() = validate (NullableInt32s.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``NullableInt32s.Collection.RefArray E.I.equals``() = + member __.``NullableInt32s.Collection.RefArray E.I.equals``() = validate (NullableInt32s.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.RefArray E.I.equal``() = + member __.``NullableInt32s.Collection.RefArray E.I.equal``() = validate (NullableInt32s.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.RefArray E.I.not_equal``() = + member __.``NullableInt32s.Collection.RefArray E.I.not_equal``() = validate (NullableInt32s.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt32s.Collection.RefArray E.N.equals``() = + member __.``NullableInt32s.Collection.RefArray E.N.equals``() = validate (NullableInt32s.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.RefArray E.N.equal``() = + member __.``NullableInt32s.Collection.RefArray E.N.equal``() = validate (NullableInt32s.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.RefArray E.N.not_equal``() = + member __.``NullableInt32s.Collection.RefArray E.N.not_equal``() = validate (NullableInt32s.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt32s.Collection.RefWrapArray E.I.equals``() = + member __.``NullableInt32s.Collection.RefWrapArray E.I.equals``() = validate (NullableInt32s.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.RefWrapArray E.I.equal``() = + member __.``NullableInt32s.Collection.RefWrapArray E.I.equal``() = validate (NullableInt32s.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.RefWrapArray E.I.not_equal``() = + member __.``NullableInt32s.Collection.RefWrapArray E.I.not_equal``() = validate (NullableInt32s.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt32s.Collection.RefWrapArray E.N.equals``() = + member __.``NullableInt32s.Collection.RefWrapArray E.N.equals``() = validate (NullableInt32s.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.RefWrapArray E.N.equal``() = + member __.``NullableInt32s.Collection.RefWrapArray E.N.equal``() = validate (NullableInt32s.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.RefWrapArray E.N.not_equal``() = + member __.``NullableInt32s.Collection.RefWrapArray E.N.not_equal``() = validate (NullableInt32s.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt32s.Collection.UnionArray E.I.equals``() = + member __.``NullableInt32s.Collection.UnionArray E.I.equals``() = validate (NullableInt32s.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -11825,7 +11825,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.UnionArray E.I.equal``() = + member __.``NullableInt32s.Collection.UnionArray E.I.equal``() = validate (NullableInt32s.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -11875,7 +11875,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.UnionArray E.I.not_equal``() = + member __.``NullableInt32s.Collection.UnionArray E.I.not_equal``() = validate (NullableInt32s.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -11925,7 +11925,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.UnionArray E.N.equals``() = + member __.``NullableInt32s.Collection.UnionArray E.N.equals``() = validate (NullableInt32s.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -11975,7 +11975,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.UnionArray E.N.equal``() = + member __.``NullableInt32s.Collection.UnionArray E.N.equal``() = validate (NullableInt32s.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -12025,7 +12025,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.UnionArray E.N.not_equal``() = + member __.``NullableInt32s.Collection.UnionArray E.N.not_equal``() = validate (NullableInt32s.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -12075,7 +12075,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.UnionWrapArray E.I.equals``() = + member __.``NullableInt32s.Collection.UnionWrapArray E.I.equals``() = validate (NullableInt32s.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -12125,7 +12125,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.UnionWrapArray E.I.equal``() = + member __.``NullableInt32s.Collection.UnionWrapArray E.I.equal``() = validate (NullableInt32s.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -12175,7 +12175,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.UnionWrapArray E.I.not_equal``() = + member __.``NullableInt32s.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableInt32s.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -12225,7 +12225,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.UnionWrapArray E.N.equals``() = + member __.``NullableInt32s.Collection.UnionWrapArray E.N.equals``() = validate (NullableInt32s.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -12275,7 +12275,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.UnionWrapArray E.N.equal``() = + member __.``NullableInt32s.Collection.UnionWrapArray E.N.equal``() = validate (NullableInt32s.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -12325,7 +12325,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.UnionWrapArray E.N.not_equal``() = + member __.``NullableInt32s.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableInt32s.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -12375,79 +12375,79 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.ValueArray E.I.equals``() = + member __.``NullableInt32s.Collection.ValueArray E.I.equals``() = validate (NullableInt32s.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.ValueArray E.I.equal``() = + member __.``NullableInt32s.Collection.ValueArray E.I.equal``() = validate (NullableInt32s.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.ValueArray E.I.not_equal``() = + member __.``NullableInt32s.Collection.ValueArray E.I.not_equal``() = validate (NullableInt32s.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt32s.Collection.ValueArray E.N.equals``() = + member __.``NullableInt32s.Collection.ValueArray E.N.equals``() = validate (NullableInt32s.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.ValueArray E.N.equal``() = + member __.``NullableInt32s.Collection.ValueArray E.N.equal``() = validate (NullableInt32s.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.ValueArray E.N.not_equal``() = + member __.``NullableInt32s.Collection.ValueArray E.N.not_equal``() = validate (NullableInt32s.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt32s.Collection.ValueWrapArray E.I.equals``() = + member __.``NullableInt32s.Collection.ValueWrapArray E.I.equals``() = validate (NullableInt32s.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.ValueWrapArray E.I.equal``() = + member __.``NullableInt32s.Collection.ValueWrapArray E.I.equal``() = validate (NullableInt32s.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.ValueWrapArray E.I.not_equal``() = + member __.``NullableInt32s.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableInt32s.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt32s.Collection.ValueWrapArray E.N.equals``() = + member __.``NullableInt32s.Collection.ValueWrapArray E.N.equals``() = validate (NullableInt32s.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.ValueWrapArray E.N.equal``() = + member __.``NullableInt32s.Collection.ValueWrapArray E.N.equal``() = validate (NullableInt32s.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt32s.Collection.ValueWrapArray E.N.not_equal``() = + member __.``NullableInt32s.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableInt32s.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt32s.Collection.ArrayArray E.I.equals``() = + member __.``NullableInt32s.Collection.ArrayArray E.I.equals``() = validate (NullableInt32s.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -12456,7 +12456,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.ArrayArray E.I.equal``() = + member __.``NullableInt32s.Collection.ArrayArray E.I.equal``() = validate (NullableInt32s.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -12465,7 +12465,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.ArrayArray E.I.not_equal``() = + member __.``NullableInt32s.Collection.ArrayArray E.I.not_equal``() = validate (NullableInt32s.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -12474,7 +12474,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.ArrayArray E.N.equals``() = + member __.``NullableInt32s.Collection.ArrayArray E.N.equals``() = validate (NullableInt32s.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -12483,7 +12483,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.ArrayArray E.N.equal``() = + member __.``NullableInt32s.Collection.ArrayArray E.N.equal``() = validate (NullableInt32s.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -12492,7 +12492,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.ArrayArray E.N.not_equal``() = + member __.``NullableInt32s.Collection.ArrayArray E.N.not_equal``() = validate (NullableInt32s.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -12501,7 +12501,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.ListArray E.I.equals``() = + member __.``NullableInt32s.Collection.ListArray E.I.equals``() = validate (NullableInt32s.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -12510,7 +12510,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.ListArray E.I.equal``() = + member __.``NullableInt32s.Collection.ListArray E.I.equal``() = validate (NullableInt32s.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -12519,7 +12519,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.ListArray E.I.not_equal``() = + member __.``NullableInt32s.Collection.ListArray E.I.not_equal``() = validate (NullableInt32s.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -12528,7 +12528,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.ListArray E.N.equals``() = + member __.``NullableInt32s.Collection.ListArray E.N.equals``() = validate (NullableInt32s.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -12537,7 +12537,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.ListArray E.N.equal``() = + member __.``NullableInt32s.Collection.ListArray E.N.equal``() = validate (NullableInt32s.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -12546,7 +12546,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt32s.Collection.ListArray E.N.not_equal``() = + member __.``NullableInt32s.Collection.ListArray E.N.not_equal``() = validate (NullableInt32s.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -12555,391 +12555,391 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.Array C.I.equals``() = + member __.``Int64s.Collection.Array C.I.equals``() = validate (Int64s.Collection.Array) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.Array C.I.equal``() = + member __.``Int64s.Collection.Array C.I.equal``() = validate (Int64s.Collection.Array) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.Array C.I.not_equal``() = + member __.``Int64s.Collection.Array C.I.not_equal``() = validate (Int64s.Collection.Array) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int64s.Collection.Array C.I.compare``() = + member __.``Int64s.Collection.Array C.I.compare``() = validate (Int64s.Collection.Array) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Int64s.Collection.Array C.I.less_than``() = + member __.``Int64s.Collection.Array C.I.less_than``() = validate (Int64s.Collection.Array) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Int64s.Collection.Array C.I.less_or_equal``() = + member __.``Int64s.Collection.Array C.I.less_or_equal``() = validate (Int64s.Collection.Array) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Int64s.Collection.Array C.I.greater_than``() = + member __.``Int64s.Collection.Array C.I.greater_than``() = validate (Int64s.Collection.Array) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Int64s.Collection.Array C.I.greater_or_equal``() = + member __.``Int64s.Collection.Array C.I.greater_or_equal``() = validate (Int64s.Collection.Array) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Int64s.Collection.Array C.N.equals``() = + member __.``Int64s.Collection.Array C.N.equals``() = validate (Int64s.Collection.Array) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.Array C.N.equal``() = + member __.``Int64s.Collection.Array C.N.equal``() = validate (Int64s.Collection.Array) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.Array C.N.not_equal``() = + member __.``Int64s.Collection.Array C.N.not_equal``() = validate (Int64s.Collection.Array) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int64s.Collection.Array C.N.compare``() = + member __.``Int64s.Collection.Array C.N.compare``() = validate (Int64s.Collection.Array) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Int64s.Collection.Array C.N.less_than``() = + member __.``Int64s.Collection.Array C.N.less_than``() = validate (Int64s.Collection.Array) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Int64s.Collection.Array C.N.less_or_equal``() = + member __.``Int64s.Collection.Array C.N.less_or_equal``() = validate (Int64s.Collection.Array) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Int64s.Collection.Array C.N.greater_than``() = + member __.``Int64s.Collection.Array C.N.greater_than``() = validate (Int64s.Collection.Array) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Int64s.Collection.Array C.N.greater_or_equal``() = + member __.``Int64s.Collection.Array C.N.greater_or_equal``() = validate (Int64s.Collection.Array) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Int64s.Collection.OptionArray C.I.equals``() = + member __.``Int64s.Collection.OptionArray C.I.equals``() = validate (Int64s.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.OptionArray C.I.equal``() = + member __.``Int64s.Collection.OptionArray C.I.equal``() = validate (Int64s.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.OptionArray C.I.not_equal``() = + member __.``Int64s.Collection.OptionArray C.I.not_equal``() = validate (Int64s.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Int64s.Collection.OptionArray C.I.compare``() = + member __.``Int64s.Collection.OptionArray C.I.compare``() = validate (Int64s.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;1;1;1;1;1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 |] [] - member _.``Int64s.Collection.OptionArray C.I.less_than``() = + member __.``Int64s.Collection.OptionArray C.I.less_than``() = validate (Int64s.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member _.``Int64s.Collection.OptionArray C.I.less_or_equal``() = + member __.``Int64s.Collection.OptionArray C.I.less_or_equal``() = validate (Int64s.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member _.``Int64s.Collection.OptionArray C.I.greater_than``() = + member __.``Int64s.Collection.OptionArray C.I.greater_than``() = validate (Int64s.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member _.``Int64s.Collection.OptionArray C.I.greater_or_equal``() = + member __.``Int64s.Collection.OptionArray C.I.greater_or_equal``() = validate (Int64s.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member _.``Int64s.Collection.OptionArray C.N.equals``() = + member __.``Int64s.Collection.OptionArray C.N.equals``() = validate (Int64s.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.OptionArray C.N.equal``() = + member __.``Int64s.Collection.OptionArray C.N.equal``() = validate (Int64s.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.OptionArray C.N.not_equal``() = + member __.``Int64s.Collection.OptionArray C.N.not_equal``() = validate (Int64s.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Int64s.Collection.OptionArray C.N.compare``() = + member __.``Int64s.Collection.OptionArray C.N.compare``() = validate (Int64s.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;1;1;1;1;1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 |] [] - member _.``Int64s.Collection.OptionArray C.N.less_than``() = + member __.``Int64s.Collection.OptionArray C.N.less_than``() = validate (Int64s.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member _.``Int64s.Collection.OptionArray C.N.less_or_equal``() = + member __.``Int64s.Collection.OptionArray C.N.less_or_equal``() = validate (Int64s.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member _.``Int64s.Collection.OptionArray C.N.greater_than``() = + member __.``Int64s.Collection.OptionArray C.N.greater_than``() = validate (Int64s.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member _.``Int64s.Collection.OptionArray C.N.greater_or_equal``() = + member __.``Int64s.Collection.OptionArray C.N.greater_or_equal``() = validate (Int64s.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member _.``Int64s.Collection.RefArray C.I.equals``() = + member __.``Int64s.Collection.RefArray C.I.equals``() = validate (Int64s.Collection.RefArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.RefArray C.I.equal``() = + member __.``Int64s.Collection.RefArray C.I.equal``() = validate (Int64s.Collection.RefArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.RefArray C.I.not_equal``() = + member __.``Int64s.Collection.RefArray C.I.not_equal``() = validate (Int64s.Collection.RefArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int64s.Collection.RefArray C.I.compare``() = + member __.``Int64s.Collection.RefArray C.I.compare``() = validate (Int64s.Collection.RefArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Int64s.Collection.RefArray C.I.less_than``() = + member __.``Int64s.Collection.RefArray C.I.less_than``() = validate (Int64s.Collection.RefArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Int64s.Collection.RefArray C.I.less_or_equal``() = + member __.``Int64s.Collection.RefArray C.I.less_or_equal``() = validate (Int64s.Collection.RefArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Int64s.Collection.RefArray C.I.greater_than``() = + member __.``Int64s.Collection.RefArray C.I.greater_than``() = validate (Int64s.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Int64s.Collection.RefArray C.I.greater_or_equal``() = + member __.``Int64s.Collection.RefArray C.I.greater_or_equal``() = validate (Int64s.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Int64s.Collection.RefArray C.N.equals``() = + member __.``Int64s.Collection.RefArray C.N.equals``() = validate (Int64s.Collection.RefArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.RefArray C.N.equal``() = + member __.``Int64s.Collection.RefArray C.N.equal``() = validate (Int64s.Collection.RefArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.RefArray C.N.not_equal``() = + member __.``Int64s.Collection.RefArray C.N.not_equal``() = validate (Int64s.Collection.RefArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int64s.Collection.RefArray C.N.compare``() = + member __.``Int64s.Collection.RefArray C.N.compare``() = validate (Int64s.Collection.RefArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Int64s.Collection.RefArray C.N.less_than``() = + member __.``Int64s.Collection.RefArray C.N.less_than``() = validate (Int64s.Collection.RefArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Int64s.Collection.RefArray C.N.less_or_equal``() = + member __.``Int64s.Collection.RefArray C.N.less_or_equal``() = validate (Int64s.Collection.RefArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Int64s.Collection.RefArray C.N.greater_than``() = + member __.``Int64s.Collection.RefArray C.N.greater_than``() = validate (Int64s.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Int64s.Collection.RefArray C.N.greater_or_equal``() = + member __.``Int64s.Collection.RefArray C.N.greater_or_equal``() = validate (Int64s.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Int64s.Collection.RefWrapArray C.I.equals``() = + member __.``Int64s.Collection.RefWrapArray C.I.equals``() = validate (Int64s.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.RefWrapArray C.I.equal``() = + member __.``Int64s.Collection.RefWrapArray C.I.equal``() = validate (Int64s.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.RefWrapArray C.I.not_equal``() = + member __.``Int64s.Collection.RefWrapArray C.I.not_equal``() = validate (Int64s.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int64s.Collection.RefWrapArray C.I.compare``() = + member __.``Int64s.Collection.RefWrapArray C.I.compare``() = validate (Int64s.Collection.RefWrapArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Int64s.Collection.RefWrapArray C.I.less_than``() = + member __.``Int64s.Collection.RefWrapArray C.I.less_than``() = validate (Int64s.Collection.RefWrapArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Int64s.Collection.RefWrapArray C.I.less_or_equal``() = + member __.``Int64s.Collection.RefWrapArray C.I.less_or_equal``() = validate (Int64s.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Int64s.Collection.RefWrapArray C.I.greater_than``() = + member __.``Int64s.Collection.RefWrapArray C.I.greater_than``() = validate (Int64s.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Int64s.Collection.RefWrapArray C.I.greater_or_equal``() = + member __.``Int64s.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Int64s.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Int64s.Collection.RefWrapArray C.N.equals``() = + member __.``Int64s.Collection.RefWrapArray C.N.equals``() = validate (Int64s.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.RefWrapArray C.N.equal``() = + member __.``Int64s.Collection.RefWrapArray C.N.equal``() = validate (Int64s.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.RefWrapArray C.N.not_equal``() = + member __.``Int64s.Collection.RefWrapArray C.N.not_equal``() = validate (Int64s.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int64s.Collection.RefWrapArray C.N.compare``() = + member __.``Int64s.Collection.RefWrapArray C.N.compare``() = validate (Int64s.Collection.RefWrapArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Int64s.Collection.RefWrapArray C.N.less_than``() = + member __.``Int64s.Collection.RefWrapArray C.N.less_than``() = validate (Int64s.Collection.RefWrapArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Int64s.Collection.RefWrapArray C.N.less_or_equal``() = + member __.``Int64s.Collection.RefWrapArray C.N.less_or_equal``() = validate (Int64s.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Int64s.Collection.RefWrapArray C.N.greater_than``() = + member __.``Int64s.Collection.RefWrapArray C.N.greater_than``() = validate (Int64s.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Int64s.Collection.RefWrapArray C.N.greater_or_equal``() = + member __.``Int64s.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Int64s.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Int64s.Collection.UnionArray C.I.equals``() = + member __.``Int64s.Collection.UnionArray C.I.equals``() = validate (Int64s.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -12975,7 +12975,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionArray C.I.equal``() = + member __.``Int64s.Collection.UnionArray C.I.equal``() = validate (Int64s.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -13011,7 +13011,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionArray C.I.not_equal``() = + member __.``Int64s.Collection.UnionArray C.I.not_equal``() = validate (Int64s.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -13047,7 +13047,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionArray C.I.compare``() = + member __.``Int64s.Collection.UnionArray C.I.compare``() = validate (Int64s.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -13083,7 +13083,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionArray C.I.less_than``() = + member __.``Int64s.Collection.UnionArray C.I.less_than``() = validate (Int64s.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -13119,7 +13119,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionArray C.I.less_or_equal``() = + member __.``Int64s.Collection.UnionArray C.I.less_or_equal``() = validate (Int64s.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -13155,7 +13155,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionArray C.I.greater_than``() = + member __.``Int64s.Collection.UnionArray C.I.greater_than``() = validate (Int64s.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -13191,7 +13191,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionArray C.I.greater_or_equal``() = + member __.``Int64s.Collection.UnionArray C.I.greater_or_equal``() = validate (Int64s.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -13227,7 +13227,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionArray C.N.equals``() = + member __.``Int64s.Collection.UnionArray C.N.equals``() = validate (Int64s.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -13263,7 +13263,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionArray C.N.equal``() = + member __.``Int64s.Collection.UnionArray C.N.equal``() = validate (Int64s.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -13299,7 +13299,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionArray C.N.not_equal``() = + member __.``Int64s.Collection.UnionArray C.N.not_equal``() = validate (Int64s.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -13335,7 +13335,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionArray C.N.compare``() = + member __.``Int64s.Collection.UnionArray C.N.compare``() = validate (Int64s.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -13371,7 +13371,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionArray C.N.less_than``() = + member __.``Int64s.Collection.UnionArray C.N.less_than``() = validate (Int64s.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -13407,7 +13407,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionArray C.N.less_or_equal``() = + member __.``Int64s.Collection.UnionArray C.N.less_or_equal``() = validate (Int64s.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -13443,7 +13443,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionArray C.N.greater_than``() = + member __.``Int64s.Collection.UnionArray C.N.greater_than``() = validate (Int64s.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -13479,7 +13479,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionArray C.N.greater_or_equal``() = + member __.``Int64s.Collection.UnionArray C.N.greater_or_equal``() = validate (Int64s.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -13515,7 +13515,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionWrapArray C.I.equals``() = + member __.``Int64s.Collection.UnionWrapArray C.I.equals``() = validate (Int64s.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -13551,7 +13551,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionWrapArray C.I.equal``() = + member __.``Int64s.Collection.UnionWrapArray C.I.equal``() = validate (Int64s.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -13587,7 +13587,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionWrapArray C.I.not_equal``() = + member __.``Int64s.Collection.UnionWrapArray C.I.not_equal``() = validate (Int64s.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -13623,7 +13623,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionWrapArray C.I.compare``() = + member __.``Int64s.Collection.UnionWrapArray C.I.compare``() = validate (Int64s.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -13659,7 +13659,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionWrapArray C.I.less_than``() = + member __.``Int64s.Collection.UnionWrapArray C.I.less_than``() = validate (Int64s.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -13695,7 +13695,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionWrapArray C.I.less_or_equal``() = + member __.``Int64s.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Int64s.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -13731,7 +13731,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionWrapArray C.I.greater_than``() = + member __.``Int64s.Collection.UnionWrapArray C.I.greater_than``() = validate (Int64s.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -13767,7 +13767,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionWrapArray C.I.greater_or_equal``() = + member __.``Int64s.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Int64s.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -13803,7 +13803,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionWrapArray C.N.equals``() = + member __.``Int64s.Collection.UnionWrapArray C.N.equals``() = validate (Int64s.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -13839,7 +13839,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionWrapArray C.N.equal``() = + member __.``Int64s.Collection.UnionWrapArray C.N.equal``() = validate (Int64s.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -13875,7 +13875,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionWrapArray C.N.not_equal``() = + member __.``Int64s.Collection.UnionWrapArray C.N.not_equal``() = validate (Int64s.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -13911,7 +13911,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionWrapArray C.N.compare``() = + member __.``Int64s.Collection.UnionWrapArray C.N.compare``() = validate (Int64s.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -13947,7 +13947,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionWrapArray C.N.less_than``() = + member __.``Int64s.Collection.UnionWrapArray C.N.less_than``() = validate (Int64s.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -13983,7 +13983,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionWrapArray C.N.less_or_equal``() = + member __.``Int64s.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Int64s.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -14019,7 +14019,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionWrapArray C.N.greater_than``() = + member __.``Int64s.Collection.UnionWrapArray C.N.greater_than``() = validate (Int64s.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -14055,7 +14055,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.UnionWrapArray C.N.greater_or_equal``() = + member __.``Int64s.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Int64s.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -14091,199 +14091,199 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ValueArray C.I.equals``() = + member __.``Int64s.Collection.ValueArray C.I.equals``() = validate (Int64s.Collection.ValueArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.ValueArray C.I.equal``() = + member __.``Int64s.Collection.ValueArray C.I.equal``() = validate (Int64s.Collection.ValueArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.ValueArray C.I.not_equal``() = + member __.``Int64s.Collection.ValueArray C.I.not_equal``() = validate (Int64s.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int64s.Collection.ValueArray C.I.compare``() = + member __.``Int64s.Collection.ValueArray C.I.compare``() = validate (Int64s.Collection.ValueArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Int64s.Collection.ValueArray C.I.less_than``() = + member __.``Int64s.Collection.ValueArray C.I.less_than``() = validate (Int64s.Collection.ValueArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Int64s.Collection.ValueArray C.I.less_or_equal``() = + member __.``Int64s.Collection.ValueArray C.I.less_or_equal``() = validate (Int64s.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Int64s.Collection.ValueArray C.I.greater_than``() = + member __.``Int64s.Collection.ValueArray C.I.greater_than``() = validate (Int64s.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Int64s.Collection.ValueArray C.I.greater_or_equal``() = + member __.``Int64s.Collection.ValueArray C.I.greater_or_equal``() = validate (Int64s.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Int64s.Collection.ValueArray C.N.equals``() = + member __.``Int64s.Collection.ValueArray C.N.equals``() = validate (Int64s.Collection.ValueArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.ValueArray C.N.equal``() = + member __.``Int64s.Collection.ValueArray C.N.equal``() = validate (Int64s.Collection.ValueArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.ValueArray C.N.not_equal``() = + member __.``Int64s.Collection.ValueArray C.N.not_equal``() = validate (Int64s.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int64s.Collection.ValueArray C.N.compare``() = + member __.``Int64s.Collection.ValueArray C.N.compare``() = validate (Int64s.Collection.ValueArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Int64s.Collection.ValueArray C.N.less_than``() = + member __.``Int64s.Collection.ValueArray C.N.less_than``() = validate (Int64s.Collection.ValueArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Int64s.Collection.ValueArray C.N.less_or_equal``() = + member __.``Int64s.Collection.ValueArray C.N.less_or_equal``() = validate (Int64s.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Int64s.Collection.ValueArray C.N.greater_than``() = + member __.``Int64s.Collection.ValueArray C.N.greater_than``() = validate (Int64s.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Int64s.Collection.ValueArray C.N.greater_or_equal``() = + member __.``Int64s.Collection.ValueArray C.N.greater_or_equal``() = validate (Int64s.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Int64s.Collection.ValueWrapArray C.I.equals``() = + member __.``Int64s.Collection.ValueWrapArray C.I.equals``() = validate (Int64s.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.ValueWrapArray C.I.equal``() = + member __.``Int64s.Collection.ValueWrapArray C.I.equal``() = validate (Int64s.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.ValueWrapArray C.I.not_equal``() = + member __.``Int64s.Collection.ValueWrapArray C.I.not_equal``() = validate (Int64s.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int64s.Collection.ValueWrapArray C.I.compare``() = + member __.``Int64s.Collection.ValueWrapArray C.I.compare``() = validate (Int64s.Collection.ValueWrapArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Int64s.Collection.ValueWrapArray C.I.less_than``() = + member __.``Int64s.Collection.ValueWrapArray C.I.less_than``() = validate (Int64s.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Int64s.Collection.ValueWrapArray C.I.less_or_equal``() = + member __.``Int64s.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Int64s.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Int64s.Collection.ValueWrapArray C.I.greater_than``() = + member __.``Int64s.Collection.ValueWrapArray C.I.greater_than``() = validate (Int64s.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Int64s.Collection.ValueWrapArray C.I.greater_or_equal``() = + member __.``Int64s.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Int64s.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Int64s.Collection.ValueWrapArray C.N.equals``() = + member __.``Int64s.Collection.ValueWrapArray C.N.equals``() = validate (Int64s.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.ValueWrapArray C.N.equal``() = + member __.``Int64s.Collection.ValueWrapArray C.N.equal``() = validate (Int64s.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Int64s.Collection.ValueWrapArray C.N.not_equal``() = + member __.``Int64s.Collection.ValueWrapArray C.N.not_equal``() = validate (Int64s.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Int64s.Collection.ValueWrapArray C.N.compare``() = + member __.``Int64s.Collection.ValueWrapArray C.N.compare``() = validate (Int64s.Collection.ValueWrapArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Int64s.Collection.ValueWrapArray C.N.less_than``() = + member __.``Int64s.Collection.ValueWrapArray C.N.less_than``() = validate (Int64s.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Int64s.Collection.ValueWrapArray C.N.less_or_equal``() = + member __.``Int64s.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Int64s.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Int64s.Collection.ValueWrapArray C.N.greater_than``() = + member __.``Int64s.Collection.ValueWrapArray C.N.greater_than``() = validate (Int64s.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Int64s.Collection.ValueWrapArray C.N.greater_or_equal``() = + member __.``Int64s.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Int64s.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Int64s.Collection.ArrayArray C.I.equals``() = + member __.``Int64s.Collection.ArrayArray C.I.equals``() = validate (Int64s.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14291,7 +14291,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray C.I.equal``() = + member __.``Int64s.Collection.ArrayArray C.I.equal``() = validate (Int64s.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14299,7 +14299,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray C.I.not_equal``() = + member __.``Int64s.Collection.ArrayArray C.I.not_equal``() = validate (Int64s.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -14307,7 +14307,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray C.I.compare``() = + member __.``Int64s.Collection.ArrayArray C.I.compare``() = validate (Int64s.Collection.ArrayArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;1;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1; @@ -14315,7 +14315,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray C.I.less_than``() = + member __.``Int64s.Collection.ArrayArray C.I.less_than``() = validate (Int64s.Collection.ArrayArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; @@ -14323,7 +14323,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray C.I.less_or_equal``() = + member __.``Int64s.Collection.ArrayArray C.I.less_or_equal``() = validate (Int64s.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; @@ -14331,7 +14331,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray C.I.greater_than``() = + member __.``Int64s.Collection.ArrayArray C.I.greater_than``() = validate (Int64s.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; @@ -14339,7 +14339,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray C.I.greater_or_equal``() = + member __.``Int64s.Collection.ArrayArray C.I.greater_or_equal``() = validate (Int64s.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; @@ -14347,7 +14347,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray C.N.equals``() = + member __.``Int64s.Collection.ArrayArray C.N.equals``() = validate (Int64s.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14355,7 +14355,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray C.N.equal``() = + member __.``Int64s.Collection.ArrayArray C.N.equal``() = validate (Int64s.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14363,7 +14363,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray C.N.not_equal``() = + member __.``Int64s.Collection.ArrayArray C.N.not_equal``() = validate (Int64s.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -14371,7 +14371,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray C.N.compare``() = + member __.``Int64s.Collection.ArrayArray C.N.compare``() = validate (Int64s.Collection.ArrayArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;1;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1; @@ -14379,7 +14379,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray C.N.less_than``() = + member __.``Int64s.Collection.ArrayArray C.N.less_than``() = validate (Int64s.Collection.ArrayArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; @@ -14387,7 +14387,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray C.N.less_or_equal``() = + member __.``Int64s.Collection.ArrayArray C.N.less_or_equal``() = validate (Int64s.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; @@ -14395,7 +14395,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray C.N.greater_than``() = + member __.``Int64s.Collection.ArrayArray C.N.greater_than``() = validate (Int64s.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; @@ -14403,7 +14403,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray C.N.greater_or_equal``() = + member __.``Int64s.Collection.ArrayArray C.N.greater_or_equal``() = validate (Int64s.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; @@ -14411,7 +14411,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ListArray C.I.equals``() = + member __.``Int64s.Collection.ListArray C.I.equals``() = validate (Int64s.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14419,7 +14419,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ListArray C.I.equal``() = + member __.``Int64s.Collection.ListArray C.I.equal``() = validate (Int64s.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14427,7 +14427,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ListArray C.I.not_equal``() = + member __.``Int64s.Collection.ListArray C.I.not_equal``() = validate (Int64s.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -14435,7 +14435,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ListArray C.I.compare``() = + member __.``Int64s.Collection.ListArray C.I.compare``() = validate (Int64s.Collection.ListArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; 1;-1;1;1;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;1;-1;0;-1;-1; @@ -14443,7 +14443,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ListArray C.I.less_than``() = + member __.``Int64s.Collection.ListArray C.I.less_than``() = validate (Int64s.Collection.ListArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; @@ -14451,7 +14451,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ListArray C.I.less_or_equal``() = + member __.``Int64s.Collection.ListArray C.I.less_or_equal``() = validate (Int64s.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; @@ -14459,7 +14459,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ListArray C.I.greater_than``() = + member __.``Int64s.Collection.ListArray C.I.greater_than``() = validate (Int64s.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; @@ -14467,7 +14467,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ListArray C.I.greater_or_equal``() = + member __.``Int64s.Collection.ListArray C.I.greater_or_equal``() = validate (Int64s.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; @@ -14475,7 +14475,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ListArray C.N.equals``() = + member __.``Int64s.Collection.ListArray C.N.equals``() = validate (Int64s.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14483,7 +14483,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ListArray C.N.equal``() = + member __.``Int64s.Collection.ListArray C.N.equal``() = validate (Int64s.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14491,7 +14491,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ListArray C.N.not_equal``() = + member __.``Int64s.Collection.ListArray C.N.not_equal``() = validate (Int64s.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -14499,7 +14499,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ListArray C.N.compare``() = + member __.``Int64s.Collection.ListArray C.N.compare``() = validate (Int64s.Collection.ListArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; 1;-1;1;1;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;1;-1;0;-1;-1; @@ -14507,7 +14507,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ListArray C.N.less_than``() = + member __.``Int64s.Collection.ListArray C.N.less_than``() = validate (Int64s.Collection.ListArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; @@ -14515,7 +14515,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ListArray C.N.less_or_equal``() = + member __.``Int64s.Collection.ListArray C.N.less_or_equal``() = validate (Int64s.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; @@ -14523,7 +14523,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ListArray C.N.greater_than``() = + member __.``Int64s.Collection.ListArray C.N.greater_than``() = validate (Int64s.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; @@ -14531,7 +14531,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ListArray C.N.greater_or_equal``() = + member __.``Int64s.Collection.ListArray C.N.greater_or_equal``() = validate (Int64s.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; @@ -14539,7 +14539,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14547,7 +14547,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14555,7 +14555,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -14563,7 +14563,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; @@ -14571,7 +14571,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; @@ -14579,7 +14579,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; @@ -14587,7 +14587,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; @@ -14595,7 +14595,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; @@ -14603,7 +14603,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14611,7 +14611,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14619,7 +14619,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -14627,7 +14627,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; @@ -14635,7 +14635,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; @@ -14643,7 +14643,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; @@ -14651,7 +14651,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; @@ -14659,7 +14659,7 @@ type GeneratedTests () = |] [] - member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; @@ -14667,157 +14667,157 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.Array E.I.equals``() = + member __.``NullableInt64s.Collection.Array E.I.equals``() = validate (NullableInt64s.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.Array E.I.equal``() = + member __.``NullableInt64s.Collection.Array E.I.equal``() = validate (NullableInt64s.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.Array E.I.not_equal``() = + member __.``NullableInt64s.Collection.Array E.I.not_equal``() = validate (NullableInt64s.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt64s.Collection.Array E.N.equals``() = + member __.``NullableInt64s.Collection.Array E.N.equals``() = validate (NullableInt64s.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.Array E.N.equal``() = + member __.``NullableInt64s.Collection.Array E.N.equal``() = validate (NullableInt64s.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.Array E.N.not_equal``() = + member __.``NullableInt64s.Collection.Array E.N.not_equal``() = validate (NullableInt64s.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt64s.Collection.OptionArray E.I.equals``() = + member __.``NullableInt64s.Collection.OptionArray E.I.equals``() = validate (NullableInt64s.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.OptionArray E.I.equal``() = + member __.``NullableInt64s.Collection.OptionArray E.I.equal``() = validate (NullableInt64s.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.OptionArray E.I.not_equal``() = + member __.``NullableInt64s.Collection.OptionArray E.I.not_equal``() = validate (NullableInt64s.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``NullableInt64s.Collection.OptionArray E.N.equals``() = + member __.``NullableInt64s.Collection.OptionArray E.N.equals``() = validate (NullableInt64s.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.OptionArray E.N.equal``() = + member __.``NullableInt64s.Collection.OptionArray E.N.equal``() = validate (NullableInt64s.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.OptionArray E.N.not_equal``() = + member __.``NullableInt64s.Collection.OptionArray E.N.not_equal``() = validate (NullableInt64s.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``NullableInt64s.Collection.RefArray E.I.equals``() = + member __.``NullableInt64s.Collection.RefArray E.I.equals``() = validate (NullableInt64s.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.RefArray E.I.equal``() = + member __.``NullableInt64s.Collection.RefArray E.I.equal``() = validate (NullableInt64s.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.RefArray E.I.not_equal``() = + member __.``NullableInt64s.Collection.RefArray E.I.not_equal``() = validate (NullableInt64s.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt64s.Collection.RefArray E.N.equals``() = + member __.``NullableInt64s.Collection.RefArray E.N.equals``() = validate (NullableInt64s.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.RefArray E.N.equal``() = + member __.``NullableInt64s.Collection.RefArray E.N.equal``() = validate (NullableInt64s.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.RefArray E.N.not_equal``() = + member __.``NullableInt64s.Collection.RefArray E.N.not_equal``() = validate (NullableInt64s.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt64s.Collection.RefWrapArray E.I.equals``() = + member __.``NullableInt64s.Collection.RefWrapArray E.I.equals``() = validate (NullableInt64s.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.RefWrapArray E.I.equal``() = + member __.``NullableInt64s.Collection.RefWrapArray E.I.equal``() = validate (NullableInt64s.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.RefWrapArray E.I.not_equal``() = + member __.``NullableInt64s.Collection.RefWrapArray E.I.not_equal``() = validate (NullableInt64s.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt64s.Collection.RefWrapArray E.N.equals``() = + member __.``NullableInt64s.Collection.RefWrapArray E.N.equals``() = validate (NullableInt64s.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.RefWrapArray E.N.equal``() = + member __.``NullableInt64s.Collection.RefWrapArray E.N.equal``() = validate (NullableInt64s.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.RefWrapArray E.N.not_equal``() = + member __.``NullableInt64s.Collection.RefWrapArray E.N.not_equal``() = validate (NullableInt64s.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt64s.Collection.UnionArray E.I.equals``() = + member __.``NullableInt64s.Collection.UnionArray E.I.equals``() = validate (NullableInt64s.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -14867,7 +14867,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.UnionArray E.I.equal``() = + member __.``NullableInt64s.Collection.UnionArray E.I.equal``() = validate (NullableInt64s.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -14917,7 +14917,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.UnionArray E.I.not_equal``() = + member __.``NullableInt64s.Collection.UnionArray E.I.not_equal``() = validate (NullableInt64s.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -14967,7 +14967,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.UnionArray E.N.equals``() = + member __.``NullableInt64s.Collection.UnionArray E.N.equals``() = validate (NullableInt64s.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -15017,7 +15017,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.UnionArray E.N.equal``() = + member __.``NullableInt64s.Collection.UnionArray E.N.equal``() = validate (NullableInt64s.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -15067,7 +15067,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.UnionArray E.N.not_equal``() = + member __.``NullableInt64s.Collection.UnionArray E.N.not_equal``() = validate (NullableInt64s.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -15117,7 +15117,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.UnionWrapArray E.I.equals``() = + member __.``NullableInt64s.Collection.UnionWrapArray E.I.equals``() = validate (NullableInt64s.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -15167,7 +15167,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.UnionWrapArray E.I.equal``() = + member __.``NullableInt64s.Collection.UnionWrapArray E.I.equal``() = validate (NullableInt64s.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -15217,7 +15217,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.UnionWrapArray E.I.not_equal``() = + member __.``NullableInt64s.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableInt64s.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -15267,7 +15267,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.UnionWrapArray E.N.equals``() = + member __.``NullableInt64s.Collection.UnionWrapArray E.N.equals``() = validate (NullableInt64s.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -15317,7 +15317,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.UnionWrapArray E.N.equal``() = + member __.``NullableInt64s.Collection.UnionWrapArray E.N.equal``() = validate (NullableInt64s.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -15367,7 +15367,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.UnionWrapArray E.N.not_equal``() = + member __.``NullableInt64s.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableInt64s.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -15417,79 +15417,79 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.ValueArray E.I.equals``() = + member __.``NullableInt64s.Collection.ValueArray E.I.equals``() = validate (NullableInt64s.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.ValueArray E.I.equal``() = + member __.``NullableInt64s.Collection.ValueArray E.I.equal``() = validate (NullableInt64s.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.ValueArray E.I.not_equal``() = + member __.``NullableInt64s.Collection.ValueArray E.I.not_equal``() = validate (NullableInt64s.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt64s.Collection.ValueArray E.N.equals``() = + member __.``NullableInt64s.Collection.ValueArray E.N.equals``() = validate (NullableInt64s.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.ValueArray E.N.equal``() = + member __.``NullableInt64s.Collection.ValueArray E.N.equal``() = validate (NullableInt64s.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.ValueArray E.N.not_equal``() = + member __.``NullableInt64s.Collection.ValueArray E.N.not_equal``() = validate (NullableInt64s.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt64s.Collection.ValueWrapArray E.I.equals``() = + member __.``NullableInt64s.Collection.ValueWrapArray E.I.equals``() = validate (NullableInt64s.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.ValueWrapArray E.I.equal``() = + member __.``NullableInt64s.Collection.ValueWrapArray E.I.equal``() = validate (NullableInt64s.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.ValueWrapArray E.I.not_equal``() = + member __.``NullableInt64s.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableInt64s.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt64s.Collection.ValueWrapArray E.N.equals``() = + member __.``NullableInt64s.Collection.ValueWrapArray E.N.equals``() = validate (NullableInt64s.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.ValueWrapArray E.N.equal``() = + member __.``NullableInt64s.Collection.ValueWrapArray E.N.equal``() = validate (NullableInt64s.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableInt64s.Collection.ValueWrapArray E.N.not_equal``() = + member __.``NullableInt64s.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableInt64s.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableInt64s.Collection.ArrayArray E.I.equals``() = + member __.``NullableInt64s.Collection.ArrayArray E.I.equals``() = validate (NullableInt64s.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -15498,7 +15498,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.ArrayArray E.I.equal``() = + member __.``NullableInt64s.Collection.ArrayArray E.I.equal``() = validate (NullableInt64s.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -15507,7 +15507,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.ArrayArray E.I.not_equal``() = + member __.``NullableInt64s.Collection.ArrayArray E.I.not_equal``() = validate (NullableInt64s.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -15516,7 +15516,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.ArrayArray E.N.equals``() = + member __.``NullableInt64s.Collection.ArrayArray E.N.equals``() = validate (NullableInt64s.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -15525,7 +15525,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.ArrayArray E.N.equal``() = + member __.``NullableInt64s.Collection.ArrayArray E.N.equal``() = validate (NullableInt64s.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -15534,7 +15534,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.ArrayArray E.N.not_equal``() = + member __.``NullableInt64s.Collection.ArrayArray E.N.not_equal``() = validate (NullableInt64s.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -15543,7 +15543,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.ListArray E.I.equals``() = + member __.``NullableInt64s.Collection.ListArray E.I.equals``() = validate (NullableInt64s.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -15552,7 +15552,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.ListArray E.I.equal``() = + member __.``NullableInt64s.Collection.ListArray E.I.equal``() = validate (NullableInt64s.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -15561,7 +15561,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.ListArray E.I.not_equal``() = + member __.``NullableInt64s.Collection.ListArray E.I.not_equal``() = validate (NullableInt64s.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -15570,7 +15570,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.ListArray E.N.equals``() = + member __.``NullableInt64s.Collection.ListArray E.N.equals``() = validate (NullableInt64s.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -15579,7 +15579,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.ListArray E.N.equal``() = + member __.``NullableInt64s.Collection.ListArray E.N.equal``() = validate (NullableInt64s.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -15588,7 +15588,7 @@ type GeneratedTests () = |] [] - member _.``NullableInt64s.Collection.ListArray E.N.not_equal``() = + member __.``NullableInt64s.Collection.ListArray E.N.not_equal``() = validate (NullableInt64s.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -15597,391 +15597,391 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.Array C.I.equals``() = + member __.``NativeInts.Collection.Array C.I.equals``() = validate (NativeInts.Collection.Array) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.Array C.I.equal``() = + member __.``NativeInts.Collection.Array C.I.equal``() = validate (NativeInts.Collection.Array) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.Array C.I.not_equal``() = + member __.``NativeInts.Collection.Array C.I.not_equal``() = validate (NativeInts.Collection.Array) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``NativeInts.Collection.Array C.I.compare``() = + member __.``NativeInts.Collection.Array C.I.compare``() = validate (NativeInts.Collection.Array) C.I.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member _.``NativeInts.Collection.Array C.I.less_than``() = + member __.``NativeInts.Collection.Array C.I.less_than``() = validate (NativeInts.Collection.Array) C.I.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member _.``NativeInts.Collection.Array C.I.less_or_equal``() = + member __.``NativeInts.Collection.Array C.I.less_or_equal``() = validate (NativeInts.Collection.Array) C.I.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member _.``NativeInts.Collection.Array C.I.greater_than``() = + member __.``NativeInts.Collection.Array C.I.greater_than``() = validate (NativeInts.Collection.Array) C.I.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member _.``NativeInts.Collection.Array C.I.greater_or_equal``() = + member __.``NativeInts.Collection.Array C.I.greater_or_equal``() = validate (NativeInts.Collection.Array) C.I.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member _.``NativeInts.Collection.Array C.N.equals``() = + member __.``NativeInts.Collection.Array C.N.equals``() = validate (NativeInts.Collection.Array) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.Array C.N.equal``() = + member __.``NativeInts.Collection.Array C.N.equal``() = validate (NativeInts.Collection.Array) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.Array C.N.not_equal``() = + member __.``NativeInts.Collection.Array C.N.not_equal``() = validate (NativeInts.Collection.Array) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``NativeInts.Collection.Array C.N.compare``() = + member __.``NativeInts.Collection.Array C.N.compare``() = validate (NativeInts.Collection.Array) C.N.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member _.``NativeInts.Collection.Array C.N.less_than``() = + member __.``NativeInts.Collection.Array C.N.less_than``() = validate (NativeInts.Collection.Array) C.N.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member _.``NativeInts.Collection.Array C.N.less_or_equal``() = + member __.``NativeInts.Collection.Array C.N.less_or_equal``() = validate (NativeInts.Collection.Array) C.N.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member _.``NativeInts.Collection.Array C.N.greater_than``() = + member __.``NativeInts.Collection.Array C.N.greater_than``() = validate (NativeInts.Collection.Array) C.N.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member _.``NativeInts.Collection.Array C.N.greater_or_equal``() = + member __.``NativeInts.Collection.Array C.N.greater_or_equal``() = validate (NativeInts.Collection.Array) C.N.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member _.``NativeInts.Collection.OptionArray C.I.equals``() = + member __.``NativeInts.Collection.OptionArray C.I.equals``() = validate (NativeInts.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NativeInts.Collection.OptionArray C.I.equal``() = + member __.``NativeInts.Collection.OptionArray C.I.equal``() = validate (NativeInts.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NativeInts.Collection.OptionArray C.I.not_equal``() = + member __.``NativeInts.Collection.OptionArray C.I.not_equal``() = validate (NativeInts.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NativeInts.Collection.OptionArray C.I.compare``() = + member __.``NativeInts.Collection.OptionArray C.I.compare``() = validate (NativeInts.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member _.``NativeInts.Collection.OptionArray C.I.less_than``() = + member __.``NativeInts.Collection.OptionArray C.I.less_than``() = validate (NativeInts.Collection.OptionArray) C.I.less_than [| 0;1;1;1;0;0;1;1;0;0;0;1;0;0;0;0 |] [] - member _.``NativeInts.Collection.OptionArray C.I.less_or_equal``() = + member __.``NativeInts.Collection.OptionArray C.I.less_or_equal``() = validate (NativeInts.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;0;1;1;1;0;0;1;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.OptionArray C.I.greater_than``() = + member __.``NativeInts.Collection.OptionArray C.I.greater_than``() = validate (NativeInts.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;1;1;0;0;1;1;1;0 |] [] - member _.``NativeInts.Collection.OptionArray C.I.greater_or_equal``() = + member __.``NativeInts.Collection.OptionArray C.I.greater_or_equal``() = validate (NativeInts.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;1;1;0;0;1;1;1;0;1;1;1;1 |] [] - member _.``NativeInts.Collection.OptionArray C.N.equals``() = + member __.``NativeInts.Collection.OptionArray C.N.equals``() = validate (NativeInts.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NativeInts.Collection.OptionArray C.N.equal``() = + member __.``NativeInts.Collection.OptionArray C.N.equal``() = validate (NativeInts.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NativeInts.Collection.OptionArray C.N.not_equal``() = + member __.``NativeInts.Collection.OptionArray C.N.not_equal``() = validate (NativeInts.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NativeInts.Collection.OptionArray C.N.compare``() = + member __.``NativeInts.Collection.OptionArray C.N.compare``() = validate (NativeInts.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member _.``NativeInts.Collection.OptionArray C.N.less_than``() = + member __.``NativeInts.Collection.OptionArray C.N.less_than``() = validate (NativeInts.Collection.OptionArray) C.N.less_than [| 0;1;1;1;0;0;1;1;0;0;0;1;0;0;0;0 |] [] - member _.``NativeInts.Collection.OptionArray C.N.less_or_equal``() = + member __.``NativeInts.Collection.OptionArray C.N.less_or_equal``() = validate (NativeInts.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;0;1;1;1;0;0;1;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.OptionArray C.N.greater_than``() = + member __.``NativeInts.Collection.OptionArray C.N.greater_than``() = validate (NativeInts.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;1;1;0;0;1;1;1;0 |] [] - member _.``NativeInts.Collection.OptionArray C.N.greater_or_equal``() = + member __.``NativeInts.Collection.OptionArray C.N.greater_or_equal``() = validate (NativeInts.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;1;1;0;0;1;1;1;0;1;1;1;1 |] [] - member _.``NativeInts.Collection.RefArray C.I.equals``() = + member __.``NativeInts.Collection.RefArray C.I.equals``() = validate (NativeInts.Collection.RefArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.RefArray C.I.equal``() = + member __.``NativeInts.Collection.RefArray C.I.equal``() = validate (NativeInts.Collection.RefArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.RefArray C.I.not_equal``() = + member __.``NativeInts.Collection.RefArray C.I.not_equal``() = validate (NativeInts.Collection.RefArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``NativeInts.Collection.RefArray C.I.compare``() = + member __.``NativeInts.Collection.RefArray C.I.compare``() = validate (NativeInts.Collection.RefArray) C.I.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member _.``NativeInts.Collection.RefArray C.I.less_than``() = + member __.``NativeInts.Collection.RefArray C.I.less_than``() = validate (NativeInts.Collection.RefArray) C.I.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member _.``NativeInts.Collection.RefArray C.I.less_or_equal``() = + member __.``NativeInts.Collection.RefArray C.I.less_or_equal``() = validate (NativeInts.Collection.RefArray) C.I.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member _.``NativeInts.Collection.RefArray C.I.greater_than``() = + member __.``NativeInts.Collection.RefArray C.I.greater_than``() = validate (NativeInts.Collection.RefArray) C.I.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member _.``NativeInts.Collection.RefArray C.I.greater_or_equal``() = + member __.``NativeInts.Collection.RefArray C.I.greater_or_equal``() = validate (NativeInts.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member _.``NativeInts.Collection.RefArray C.N.equals``() = + member __.``NativeInts.Collection.RefArray C.N.equals``() = validate (NativeInts.Collection.RefArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.RefArray C.N.equal``() = + member __.``NativeInts.Collection.RefArray C.N.equal``() = validate (NativeInts.Collection.RefArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.RefArray C.N.not_equal``() = + member __.``NativeInts.Collection.RefArray C.N.not_equal``() = validate (NativeInts.Collection.RefArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``NativeInts.Collection.RefArray C.N.compare``() = + member __.``NativeInts.Collection.RefArray C.N.compare``() = validate (NativeInts.Collection.RefArray) C.N.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member _.``NativeInts.Collection.RefArray C.N.less_than``() = + member __.``NativeInts.Collection.RefArray C.N.less_than``() = validate (NativeInts.Collection.RefArray) C.N.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member _.``NativeInts.Collection.RefArray C.N.less_or_equal``() = + member __.``NativeInts.Collection.RefArray C.N.less_or_equal``() = validate (NativeInts.Collection.RefArray) C.N.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member _.``NativeInts.Collection.RefArray C.N.greater_than``() = + member __.``NativeInts.Collection.RefArray C.N.greater_than``() = validate (NativeInts.Collection.RefArray) C.N.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member _.``NativeInts.Collection.RefArray C.N.greater_or_equal``() = + member __.``NativeInts.Collection.RefArray C.N.greater_or_equal``() = validate (NativeInts.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member _.``NativeInts.Collection.RefWrapArray C.I.equals``() = + member __.``NativeInts.Collection.RefWrapArray C.I.equals``() = validate (NativeInts.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.RefWrapArray C.I.equal``() = + member __.``NativeInts.Collection.RefWrapArray C.I.equal``() = validate (NativeInts.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.RefWrapArray C.I.not_equal``() = + member __.``NativeInts.Collection.RefWrapArray C.I.not_equal``() = validate (NativeInts.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``NativeInts.Collection.RefWrapArray C.I.compare``() = + member __.``NativeInts.Collection.RefWrapArray C.I.compare``() = validate (NativeInts.Collection.RefWrapArray) C.I.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member _.``NativeInts.Collection.RefWrapArray C.I.less_than``() = + member __.``NativeInts.Collection.RefWrapArray C.I.less_than``() = validate (NativeInts.Collection.RefWrapArray) C.I.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member _.``NativeInts.Collection.RefWrapArray C.I.less_or_equal``() = + member __.``NativeInts.Collection.RefWrapArray C.I.less_or_equal``() = validate (NativeInts.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member _.``NativeInts.Collection.RefWrapArray C.I.greater_than``() = + member __.``NativeInts.Collection.RefWrapArray C.I.greater_than``() = validate (NativeInts.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member _.``NativeInts.Collection.RefWrapArray C.I.greater_or_equal``() = + member __.``NativeInts.Collection.RefWrapArray C.I.greater_or_equal``() = validate (NativeInts.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member _.``NativeInts.Collection.RefWrapArray C.N.equals``() = + member __.``NativeInts.Collection.RefWrapArray C.N.equals``() = validate (NativeInts.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.RefWrapArray C.N.equal``() = + member __.``NativeInts.Collection.RefWrapArray C.N.equal``() = validate (NativeInts.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.RefWrapArray C.N.not_equal``() = + member __.``NativeInts.Collection.RefWrapArray C.N.not_equal``() = validate (NativeInts.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``NativeInts.Collection.RefWrapArray C.N.compare``() = + member __.``NativeInts.Collection.RefWrapArray C.N.compare``() = validate (NativeInts.Collection.RefWrapArray) C.N.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member _.``NativeInts.Collection.RefWrapArray C.N.less_than``() = + member __.``NativeInts.Collection.RefWrapArray C.N.less_than``() = validate (NativeInts.Collection.RefWrapArray) C.N.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member _.``NativeInts.Collection.RefWrapArray C.N.less_or_equal``() = + member __.``NativeInts.Collection.RefWrapArray C.N.less_or_equal``() = validate (NativeInts.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member _.``NativeInts.Collection.RefWrapArray C.N.greater_than``() = + member __.``NativeInts.Collection.RefWrapArray C.N.greater_than``() = validate (NativeInts.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member _.``NativeInts.Collection.RefWrapArray C.N.greater_or_equal``() = + member __.``NativeInts.Collection.RefWrapArray C.N.greater_or_equal``() = validate (NativeInts.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member _.``NativeInts.Collection.UnionArray C.I.equals``() = + member __.``NativeInts.Collection.UnionArray C.I.equals``() = validate (NativeInts.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -15998,7 +15998,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionArray C.I.equal``() = + member __.``NativeInts.Collection.UnionArray C.I.equal``() = validate (NativeInts.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -16015,7 +16015,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionArray C.I.not_equal``() = + member __.``NativeInts.Collection.UnionArray C.I.not_equal``() = validate (NativeInts.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -16032,7 +16032,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionArray C.I.compare``() = + member __.``NativeInts.Collection.UnionArray C.I.compare``() = validate (NativeInts.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -16049,7 +16049,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionArray C.I.less_than``() = + member __.``NativeInts.Collection.UnionArray C.I.less_than``() = validate (NativeInts.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -16066,7 +16066,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionArray C.I.less_or_equal``() = + member __.``NativeInts.Collection.UnionArray C.I.less_or_equal``() = validate (NativeInts.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -16083,7 +16083,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionArray C.I.greater_than``() = + member __.``NativeInts.Collection.UnionArray C.I.greater_than``() = validate (NativeInts.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -16100,7 +16100,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionArray C.I.greater_or_equal``() = + member __.``NativeInts.Collection.UnionArray C.I.greater_or_equal``() = validate (NativeInts.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -16117,7 +16117,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionArray C.N.equals``() = + member __.``NativeInts.Collection.UnionArray C.N.equals``() = validate (NativeInts.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -16134,7 +16134,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionArray C.N.equal``() = + member __.``NativeInts.Collection.UnionArray C.N.equal``() = validate (NativeInts.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -16151,7 +16151,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionArray C.N.not_equal``() = + member __.``NativeInts.Collection.UnionArray C.N.not_equal``() = validate (NativeInts.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -16168,7 +16168,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionArray C.N.compare``() = + member __.``NativeInts.Collection.UnionArray C.N.compare``() = validate (NativeInts.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -16185,7 +16185,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionArray C.N.less_than``() = + member __.``NativeInts.Collection.UnionArray C.N.less_than``() = validate (NativeInts.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -16202,7 +16202,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionArray C.N.less_or_equal``() = + member __.``NativeInts.Collection.UnionArray C.N.less_or_equal``() = validate (NativeInts.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -16219,7 +16219,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionArray C.N.greater_than``() = + member __.``NativeInts.Collection.UnionArray C.N.greater_than``() = validate (NativeInts.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -16236,7 +16236,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionArray C.N.greater_or_equal``() = + member __.``NativeInts.Collection.UnionArray C.N.greater_or_equal``() = validate (NativeInts.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -16253,7 +16253,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionWrapArray C.I.equals``() = + member __.``NativeInts.Collection.UnionWrapArray C.I.equals``() = validate (NativeInts.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -16270,7 +16270,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionWrapArray C.I.equal``() = + member __.``NativeInts.Collection.UnionWrapArray C.I.equal``() = validate (NativeInts.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -16287,7 +16287,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionWrapArray C.I.not_equal``() = + member __.``NativeInts.Collection.UnionWrapArray C.I.not_equal``() = validate (NativeInts.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -16304,7 +16304,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionWrapArray C.I.compare``() = + member __.``NativeInts.Collection.UnionWrapArray C.I.compare``() = validate (NativeInts.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -16321,7 +16321,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionWrapArray C.I.less_than``() = + member __.``NativeInts.Collection.UnionWrapArray C.I.less_than``() = validate (NativeInts.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -16338,7 +16338,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionWrapArray C.I.less_or_equal``() = + member __.``NativeInts.Collection.UnionWrapArray C.I.less_or_equal``() = validate (NativeInts.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -16355,7 +16355,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionWrapArray C.I.greater_than``() = + member __.``NativeInts.Collection.UnionWrapArray C.I.greater_than``() = validate (NativeInts.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -16372,7 +16372,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionWrapArray C.I.greater_or_equal``() = + member __.``NativeInts.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (NativeInts.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -16389,7 +16389,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionWrapArray C.N.equals``() = + member __.``NativeInts.Collection.UnionWrapArray C.N.equals``() = validate (NativeInts.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -16406,7 +16406,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionWrapArray C.N.equal``() = + member __.``NativeInts.Collection.UnionWrapArray C.N.equal``() = validate (NativeInts.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -16423,7 +16423,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionWrapArray C.N.not_equal``() = + member __.``NativeInts.Collection.UnionWrapArray C.N.not_equal``() = validate (NativeInts.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -16440,7 +16440,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionWrapArray C.N.compare``() = + member __.``NativeInts.Collection.UnionWrapArray C.N.compare``() = validate (NativeInts.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -16457,7 +16457,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionWrapArray C.N.less_than``() = + member __.``NativeInts.Collection.UnionWrapArray C.N.less_than``() = validate (NativeInts.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -16474,7 +16474,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionWrapArray C.N.less_or_equal``() = + member __.``NativeInts.Collection.UnionWrapArray C.N.less_or_equal``() = validate (NativeInts.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -16491,7 +16491,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionWrapArray C.N.greater_than``() = + member __.``NativeInts.Collection.UnionWrapArray C.N.greater_than``() = validate (NativeInts.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -16508,7 +16508,7 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.UnionWrapArray C.N.greater_or_equal``() = + member __.``NativeInts.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (NativeInts.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -16525,631 +16525,631 @@ type GeneratedTests () = |] [] - member _.``NativeInts.Collection.ValueArray C.I.equals``() = + member __.``NativeInts.Collection.ValueArray C.I.equals``() = validate (NativeInts.Collection.ValueArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.ValueArray C.I.equal``() = + member __.``NativeInts.Collection.ValueArray C.I.equal``() = validate (NativeInts.Collection.ValueArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.ValueArray C.I.not_equal``() = + member __.``NativeInts.Collection.ValueArray C.I.not_equal``() = validate (NativeInts.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``NativeInts.Collection.ValueArray C.I.compare``() = + member __.``NativeInts.Collection.ValueArray C.I.compare``() = validate (NativeInts.Collection.ValueArray) C.I.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member _.``NativeInts.Collection.ValueArray C.I.less_than``() = + member __.``NativeInts.Collection.ValueArray C.I.less_than``() = validate (NativeInts.Collection.ValueArray) C.I.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member _.``NativeInts.Collection.ValueArray C.I.less_or_equal``() = + member __.``NativeInts.Collection.ValueArray C.I.less_or_equal``() = validate (NativeInts.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member _.``NativeInts.Collection.ValueArray C.I.greater_than``() = + member __.``NativeInts.Collection.ValueArray C.I.greater_than``() = validate (NativeInts.Collection.ValueArray) C.I.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member _.``NativeInts.Collection.ValueArray C.I.greater_or_equal``() = + member __.``NativeInts.Collection.ValueArray C.I.greater_or_equal``() = validate (NativeInts.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member _.``NativeInts.Collection.ValueArray C.N.equals``() = + member __.``NativeInts.Collection.ValueArray C.N.equals``() = validate (NativeInts.Collection.ValueArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.ValueArray C.N.equal``() = + member __.``NativeInts.Collection.ValueArray C.N.equal``() = validate (NativeInts.Collection.ValueArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.ValueArray C.N.not_equal``() = + member __.``NativeInts.Collection.ValueArray C.N.not_equal``() = validate (NativeInts.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``NativeInts.Collection.ValueArray C.N.compare``() = + member __.``NativeInts.Collection.ValueArray C.N.compare``() = validate (NativeInts.Collection.ValueArray) C.N.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member _.``NativeInts.Collection.ValueArray C.N.less_than``() = + member __.``NativeInts.Collection.ValueArray C.N.less_than``() = validate (NativeInts.Collection.ValueArray) C.N.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member _.``NativeInts.Collection.ValueArray C.N.less_or_equal``() = + member __.``NativeInts.Collection.ValueArray C.N.less_or_equal``() = validate (NativeInts.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member _.``NativeInts.Collection.ValueArray C.N.greater_than``() = + member __.``NativeInts.Collection.ValueArray C.N.greater_than``() = validate (NativeInts.Collection.ValueArray) C.N.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member _.``NativeInts.Collection.ValueArray C.N.greater_or_equal``() = + member __.``NativeInts.Collection.ValueArray C.N.greater_or_equal``() = validate (NativeInts.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member _.``NativeInts.Collection.ValueWrapArray C.I.equals``() = + member __.``NativeInts.Collection.ValueWrapArray C.I.equals``() = validate (NativeInts.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.ValueWrapArray C.I.equal``() = + member __.``NativeInts.Collection.ValueWrapArray C.I.equal``() = validate (NativeInts.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.ValueWrapArray C.I.not_equal``() = + member __.``NativeInts.Collection.ValueWrapArray C.I.not_equal``() = validate (NativeInts.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``NativeInts.Collection.ValueWrapArray C.I.compare``() = + member __.``NativeInts.Collection.ValueWrapArray C.I.compare``() = validate (NativeInts.Collection.ValueWrapArray) C.I.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member _.``NativeInts.Collection.ValueWrapArray C.I.less_than``() = + member __.``NativeInts.Collection.ValueWrapArray C.I.less_than``() = validate (NativeInts.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member _.``NativeInts.Collection.ValueWrapArray C.I.less_or_equal``() = + member __.``NativeInts.Collection.ValueWrapArray C.I.less_or_equal``() = validate (NativeInts.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member _.``NativeInts.Collection.ValueWrapArray C.I.greater_than``() = + member __.``NativeInts.Collection.ValueWrapArray C.I.greater_than``() = validate (NativeInts.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member _.``NativeInts.Collection.ValueWrapArray C.I.greater_or_equal``() = + member __.``NativeInts.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (NativeInts.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member _.``NativeInts.Collection.ValueWrapArray C.N.equals``() = + member __.``NativeInts.Collection.ValueWrapArray C.N.equals``() = validate (NativeInts.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.ValueWrapArray C.N.equal``() = + member __.``NativeInts.Collection.ValueWrapArray C.N.equal``() = validate (NativeInts.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``NativeInts.Collection.ValueWrapArray C.N.not_equal``() = + member __.``NativeInts.Collection.ValueWrapArray C.N.not_equal``() = validate (NativeInts.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``NativeInts.Collection.ValueWrapArray C.N.compare``() = + member __.``NativeInts.Collection.ValueWrapArray C.N.compare``() = validate (NativeInts.Collection.ValueWrapArray) C.N.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member _.``NativeInts.Collection.ValueWrapArray C.N.less_than``() = + member __.``NativeInts.Collection.ValueWrapArray C.N.less_than``() = validate (NativeInts.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member _.``NativeInts.Collection.ValueWrapArray C.N.less_or_equal``() = + member __.``NativeInts.Collection.ValueWrapArray C.N.less_or_equal``() = validate (NativeInts.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member _.``NativeInts.Collection.ValueWrapArray C.N.greater_than``() = + member __.``NativeInts.Collection.ValueWrapArray C.N.greater_than``() = validate (NativeInts.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member _.``NativeInts.Collection.ValueWrapArray C.N.greater_or_equal``() = + member __.``NativeInts.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (NativeInts.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member _.``NativeInts.Collection.ArrayArray C.I.equals``() = + member __.``NativeInts.Collection.ArrayArray C.I.equals``() = validate (NativeInts.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NativeInts.Collection.ArrayArray C.I.equal``() = + member __.``NativeInts.Collection.ArrayArray C.I.equal``() = validate (NativeInts.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NativeInts.Collection.ArrayArray C.I.not_equal``() = + member __.``NativeInts.Collection.ArrayArray C.I.not_equal``() = validate (NativeInts.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NativeInts.Collection.ArrayArray C.I.compare``() = + member __.``NativeInts.Collection.ArrayArray C.I.compare``() = validate (NativeInts.Collection.ArrayArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;-1;-1;-1;1;1;1;0;-1;-1;1;1;1;1;0;-1;1;1;1;1;1;0 |] [] - member _.``NativeInts.Collection.ArrayArray C.I.less_than``() = + member __.``NativeInts.Collection.ArrayArray C.I.less_than``() = validate (NativeInts.Collection.ArrayArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member _.``NativeInts.Collection.ArrayArray C.I.less_or_equal``() = + member __.``NativeInts.Collection.ArrayArray C.I.less_or_equal``() = validate (NativeInts.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member _.``NativeInts.Collection.ArrayArray C.I.greater_than``() = + member __.``NativeInts.Collection.ArrayArray C.I.greater_than``() = validate (NativeInts.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member _.``NativeInts.Collection.ArrayArray C.I.greater_or_equal``() = + member __.``NativeInts.Collection.ArrayArray C.I.greater_or_equal``() = validate (NativeInts.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member _.``NativeInts.Collection.ArrayArray C.N.equals``() = + member __.``NativeInts.Collection.ArrayArray C.N.equals``() = validate (NativeInts.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NativeInts.Collection.ArrayArray C.N.equal``() = + member __.``NativeInts.Collection.ArrayArray C.N.equal``() = validate (NativeInts.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NativeInts.Collection.ArrayArray C.N.not_equal``() = + member __.``NativeInts.Collection.ArrayArray C.N.not_equal``() = validate (NativeInts.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NativeInts.Collection.ArrayArray C.N.compare``() = + member __.``NativeInts.Collection.ArrayArray C.N.compare``() = validate (NativeInts.Collection.ArrayArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;-1;-1;-1;1;1;1;0;-1;-1;1;1;1;1;0;-1;1;1;1;1;1;0 |] [] - member _.``NativeInts.Collection.ArrayArray C.N.less_than``() = + member __.``NativeInts.Collection.ArrayArray C.N.less_than``() = validate (NativeInts.Collection.ArrayArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member _.``NativeInts.Collection.ArrayArray C.N.less_or_equal``() = + member __.``NativeInts.Collection.ArrayArray C.N.less_or_equal``() = validate (NativeInts.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member _.``NativeInts.Collection.ArrayArray C.N.greater_than``() = + member __.``NativeInts.Collection.ArrayArray C.N.greater_than``() = validate (NativeInts.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member _.``NativeInts.Collection.ArrayArray C.N.greater_or_equal``() = + member __.``NativeInts.Collection.ArrayArray C.N.greater_or_equal``() = validate (NativeInts.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member _.``NativeInts.Collection.ListArray C.I.equals``() = + member __.``NativeInts.Collection.ListArray C.I.equals``() = validate (NativeInts.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NativeInts.Collection.ListArray C.I.equal``() = + member __.``NativeInts.Collection.ListArray C.I.equal``() = validate (NativeInts.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NativeInts.Collection.ListArray C.I.not_equal``() = + member __.``NativeInts.Collection.ListArray C.I.not_equal``() = validate (NativeInts.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NativeInts.Collection.ListArray C.I.compare``() = + member __.``NativeInts.Collection.ListArray C.I.compare``() = validate (NativeInts.Collection.ListArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;-1;1;1;0;1;1;-1;1;-1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;1;1;1;0 |] [] - member _.``NativeInts.Collection.ListArray C.I.less_than``() = + member __.``NativeInts.Collection.ListArray C.I.less_than``() = validate (NativeInts.Collection.ListArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0 |] [] - member _.``NativeInts.Collection.ListArray C.I.less_or_equal``() = + member __.``NativeInts.Collection.ListArray C.I.less_or_equal``() = validate (NativeInts.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1 |] [] - member _.``NativeInts.Collection.ListArray C.I.greater_than``() = + member __.``NativeInts.Collection.ListArray C.I.greater_than``() = validate (NativeInts.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;1;0;0;1;1;0;1;1;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0 |] [] - member _.``NativeInts.Collection.ListArray C.I.greater_or_equal``() = + member __.``NativeInts.Collection.ListArray C.I.greater_or_equal``() = validate (NativeInts.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;1;1;1;1 |] [] - member _.``NativeInts.Collection.ListArray C.N.equals``() = + member __.``NativeInts.Collection.ListArray C.N.equals``() = validate (NativeInts.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NativeInts.Collection.ListArray C.N.equal``() = + member __.``NativeInts.Collection.ListArray C.N.equal``() = validate (NativeInts.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NativeInts.Collection.ListArray C.N.not_equal``() = + member __.``NativeInts.Collection.ListArray C.N.not_equal``() = validate (NativeInts.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NativeInts.Collection.ListArray C.N.compare``() = + member __.``NativeInts.Collection.ListArray C.N.compare``() = validate (NativeInts.Collection.ListArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;-1;1;1;0;1;1;-1;1;-1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;1;1;1;0 |] [] - member _.``NativeInts.Collection.ListArray C.N.less_than``() = + member __.``NativeInts.Collection.ListArray C.N.less_than``() = validate (NativeInts.Collection.ListArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0 |] [] - member _.``NativeInts.Collection.ListArray C.N.less_or_equal``() = + member __.``NativeInts.Collection.ListArray C.N.less_or_equal``() = validate (NativeInts.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1 |] [] - member _.``NativeInts.Collection.ListArray C.N.greater_than``() = + member __.``NativeInts.Collection.ListArray C.N.greater_than``() = validate (NativeInts.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;1;0;0;1;1;0;1;1;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0 |] [] - member _.``NativeInts.Collection.ListArray C.N.greater_or_equal``() = + member __.``NativeInts.Collection.ListArray C.N.greater_or_equal``() = validate (NativeInts.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;1;1;1;1 |] [] - member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;1;1;1;0;1;1;1;1;-1;-1;0;-1;-1;1;1;-1;1;0;1;1;-1;-1;1;-1;0 |] [] - member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;0;1;0;0;0;0;0;0;0;0;1;1;0;1;1;0;0;1;0;0;0;0;1;1;0;1;0 |] [] - member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;0;1;0;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;0;0;1;1;0;1;1 |] [] - member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;1;0;1;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;1;1;0;0;1;0;0 |] [] - member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;1;1;1;1;1;1;1;1;0;0;1;0;0;1;1;0;1;1;1;1;0;0;1;0;1 |] [] - member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;1;1;1;0;1;1;1;1;-1;-1;0;-1;-1;1;1;-1;1;0;1;1;-1;-1;1;-1;0 |] [] - member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;0;1;0;0;0;0;0;0;0;0;1;1;0;1;1;0;0;1;0;0;0;0;1;1;0;1;0 |] [] - member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;0;1;0;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;0;0;1;1;0;1;1 |] [] - member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;1;0;1;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;1;1;0;0;1;0;0 |] [] - member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;1;1;1;1;1;1;1;1;0;0;1;0;0;1;1;0;1;1;1;1;0;0;1;0;1 |] [] - member _.``NullableNativeInts.Collection.Array E.I.equals``() = + member __.``NullableNativeInts.Collection.Array E.I.equals``() = validate (NullableNativeInts.Collection.Array) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.Array E.I.equal``() = + member __.``NullableNativeInts.Collection.Array E.I.equal``() = validate (NullableNativeInts.Collection.Array) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.Array E.I.not_equal``() = + member __.``NullableNativeInts.Collection.Array E.I.not_equal``() = validate (NullableNativeInts.Collection.Array) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableNativeInts.Collection.Array E.N.equals``() = + member __.``NullableNativeInts.Collection.Array E.N.equals``() = validate (NullableNativeInts.Collection.Array) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.Array E.N.equal``() = + member __.``NullableNativeInts.Collection.Array E.N.equal``() = validate (NullableNativeInts.Collection.Array) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.Array E.N.not_equal``() = + member __.``NullableNativeInts.Collection.Array E.N.not_equal``() = validate (NullableNativeInts.Collection.Array) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableNativeInts.Collection.OptionArray E.I.equals``() = + member __.``NullableNativeInts.Collection.OptionArray E.I.equals``() = validate (NullableNativeInts.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.OptionArray E.I.equal``() = + member __.``NullableNativeInts.Collection.OptionArray E.I.equal``() = validate (NullableNativeInts.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.OptionArray E.I.not_equal``() = + member __.``NullableNativeInts.Collection.OptionArray E.I.not_equal``() = validate (NullableNativeInts.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``NullableNativeInts.Collection.OptionArray E.N.equals``() = + member __.``NullableNativeInts.Collection.OptionArray E.N.equals``() = validate (NullableNativeInts.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.OptionArray E.N.equal``() = + member __.``NullableNativeInts.Collection.OptionArray E.N.equal``() = validate (NullableNativeInts.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.OptionArray E.N.not_equal``() = + member __.``NullableNativeInts.Collection.OptionArray E.N.not_equal``() = validate (NullableNativeInts.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``NullableNativeInts.Collection.RefArray E.I.equals``() = + member __.``NullableNativeInts.Collection.RefArray E.I.equals``() = validate (NullableNativeInts.Collection.RefArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.RefArray E.I.equal``() = + member __.``NullableNativeInts.Collection.RefArray E.I.equal``() = validate (NullableNativeInts.Collection.RefArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.RefArray E.I.not_equal``() = + member __.``NullableNativeInts.Collection.RefArray E.I.not_equal``() = validate (NullableNativeInts.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableNativeInts.Collection.RefArray E.N.equals``() = + member __.``NullableNativeInts.Collection.RefArray E.N.equals``() = validate (NullableNativeInts.Collection.RefArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.RefArray E.N.equal``() = + member __.``NullableNativeInts.Collection.RefArray E.N.equal``() = validate (NullableNativeInts.Collection.RefArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.RefArray E.N.not_equal``() = + member __.``NullableNativeInts.Collection.RefArray E.N.not_equal``() = validate (NullableNativeInts.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableNativeInts.Collection.RefWrapArray E.I.equals``() = + member __.``NullableNativeInts.Collection.RefWrapArray E.I.equals``() = validate (NullableNativeInts.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.RefWrapArray E.I.equal``() = + member __.``NullableNativeInts.Collection.RefWrapArray E.I.equal``() = validate (NullableNativeInts.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.RefWrapArray E.I.not_equal``() = + member __.``NullableNativeInts.Collection.RefWrapArray E.I.not_equal``() = validate (NullableNativeInts.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableNativeInts.Collection.RefWrapArray E.N.equals``() = + member __.``NullableNativeInts.Collection.RefWrapArray E.N.equals``() = validate (NullableNativeInts.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.RefWrapArray E.N.equal``() = + member __.``NullableNativeInts.Collection.RefWrapArray E.N.equal``() = validate (NullableNativeInts.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.RefWrapArray E.N.not_equal``() = + member __.``NullableNativeInts.Collection.RefWrapArray E.N.not_equal``() = validate (NullableNativeInts.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableNativeInts.Collection.UnionArray E.I.equals``() = + member __.``NullableNativeInts.Collection.UnionArray E.I.equals``() = validate (NullableNativeInts.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -17174,7 +17174,7 @@ type GeneratedTests () = |] [] - member _.``NullableNativeInts.Collection.UnionArray E.I.equal``() = + member __.``NullableNativeInts.Collection.UnionArray E.I.equal``() = validate (NullableNativeInts.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -17199,7 +17199,7 @@ type GeneratedTests () = |] [] - member _.``NullableNativeInts.Collection.UnionArray E.I.not_equal``() = + member __.``NullableNativeInts.Collection.UnionArray E.I.not_equal``() = validate (NullableNativeInts.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -17224,7 +17224,7 @@ type GeneratedTests () = |] [] - member _.``NullableNativeInts.Collection.UnionArray E.N.equals``() = + member __.``NullableNativeInts.Collection.UnionArray E.N.equals``() = validate (NullableNativeInts.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -17249,7 +17249,7 @@ type GeneratedTests () = |] [] - member _.``NullableNativeInts.Collection.UnionArray E.N.equal``() = + member __.``NullableNativeInts.Collection.UnionArray E.N.equal``() = validate (NullableNativeInts.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -17274,7 +17274,7 @@ type GeneratedTests () = |] [] - member _.``NullableNativeInts.Collection.UnionArray E.N.not_equal``() = + member __.``NullableNativeInts.Collection.UnionArray E.N.not_equal``() = validate (NullableNativeInts.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -17299,7 +17299,7 @@ type GeneratedTests () = |] [] - member _.``NullableNativeInts.Collection.UnionWrapArray E.I.equals``() = + member __.``NullableNativeInts.Collection.UnionWrapArray E.I.equals``() = validate (NullableNativeInts.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -17324,7 +17324,7 @@ type GeneratedTests () = |] [] - member _.``NullableNativeInts.Collection.UnionWrapArray E.I.equal``() = + member __.``NullableNativeInts.Collection.UnionWrapArray E.I.equal``() = validate (NullableNativeInts.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -17349,7 +17349,7 @@ type GeneratedTests () = |] [] - member _.``NullableNativeInts.Collection.UnionWrapArray E.I.not_equal``() = + member __.``NullableNativeInts.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableNativeInts.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -17374,7 +17374,7 @@ type GeneratedTests () = |] [] - member _.``NullableNativeInts.Collection.UnionWrapArray E.N.equals``() = + member __.``NullableNativeInts.Collection.UnionWrapArray E.N.equals``() = validate (NullableNativeInts.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -17399,7 +17399,7 @@ type GeneratedTests () = |] [] - member _.``NullableNativeInts.Collection.UnionWrapArray E.N.equal``() = + member __.``NullableNativeInts.Collection.UnionWrapArray E.N.equal``() = validate (NullableNativeInts.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -17424,7 +17424,7 @@ type GeneratedTests () = |] [] - member _.``NullableNativeInts.Collection.UnionWrapArray E.N.not_equal``() = + member __.``NullableNativeInts.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableNativeInts.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -17449,547 +17449,547 @@ type GeneratedTests () = |] [] - member _.``NullableNativeInts.Collection.ValueArray E.I.equals``() = + member __.``NullableNativeInts.Collection.ValueArray E.I.equals``() = validate (NullableNativeInts.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.ValueArray E.I.equal``() = + member __.``NullableNativeInts.Collection.ValueArray E.I.equal``() = validate (NullableNativeInts.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.ValueArray E.I.not_equal``() = + member __.``NullableNativeInts.Collection.ValueArray E.I.not_equal``() = validate (NullableNativeInts.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableNativeInts.Collection.ValueArray E.N.equals``() = + member __.``NullableNativeInts.Collection.ValueArray E.N.equals``() = validate (NullableNativeInts.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.ValueArray E.N.equal``() = + member __.``NullableNativeInts.Collection.ValueArray E.N.equal``() = validate (NullableNativeInts.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.ValueArray E.N.not_equal``() = + member __.``NullableNativeInts.Collection.ValueArray E.N.not_equal``() = validate (NullableNativeInts.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableNativeInts.Collection.ValueWrapArray E.I.equals``() = + member __.``NullableNativeInts.Collection.ValueWrapArray E.I.equals``() = validate (NullableNativeInts.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.ValueWrapArray E.I.equal``() = + member __.``NullableNativeInts.Collection.ValueWrapArray E.I.equal``() = validate (NullableNativeInts.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.ValueWrapArray E.I.not_equal``() = + member __.``NullableNativeInts.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableNativeInts.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableNativeInts.Collection.ValueWrapArray E.N.equals``() = + member __.``NullableNativeInts.Collection.ValueWrapArray E.N.equals``() = validate (NullableNativeInts.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.ValueWrapArray E.N.equal``() = + member __.``NullableNativeInts.Collection.ValueWrapArray E.N.equal``() = validate (NullableNativeInts.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.ValueWrapArray E.N.not_equal``() = + member __.``NullableNativeInts.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableNativeInts.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableNativeInts.Collection.ArrayArray E.I.equals``() = + member __.``NullableNativeInts.Collection.ArrayArray E.I.equals``() = validate (NullableNativeInts.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.ArrayArray E.I.equal``() = + member __.``NullableNativeInts.Collection.ArrayArray E.I.equal``() = validate (NullableNativeInts.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.ArrayArray E.I.not_equal``() = + member __.``NullableNativeInts.Collection.ArrayArray E.I.not_equal``() = validate (NullableNativeInts.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member _.``NullableNativeInts.Collection.ArrayArray E.N.equals``() = + member __.``NullableNativeInts.Collection.ArrayArray E.N.equals``() = validate (NullableNativeInts.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.ArrayArray E.N.equal``() = + member __.``NullableNativeInts.Collection.ArrayArray E.N.equal``() = validate (NullableNativeInts.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.ArrayArray E.N.not_equal``() = + member __.``NullableNativeInts.Collection.ArrayArray E.N.not_equal``() = validate (NullableNativeInts.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member _.``NullableNativeInts.Collection.ListArray E.I.equals``() = + member __.``NullableNativeInts.Collection.ListArray E.I.equals``() = validate (NullableNativeInts.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.ListArray E.I.equal``() = + member __.``NullableNativeInts.Collection.ListArray E.I.equal``() = validate (NullableNativeInts.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.ListArray E.I.not_equal``() = + member __.``NullableNativeInts.Collection.ListArray E.I.not_equal``() = validate (NullableNativeInts.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member _.``NullableNativeInts.Collection.ListArray E.N.equals``() = + member __.``NullableNativeInts.Collection.ListArray E.N.equals``() = validate (NullableNativeInts.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.ListArray E.N.equal``() = + member __.``NullableNativeInts.Collection.ListArray E.N.equal``() = validate (NullableNativeInts.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableNativeInts.Collection.ListArray E.N.not_equal``() = + member __.``NullableNativeInts.Collection.ListArray E.N.not_equal``() = validate (NullableNativeInts.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member _.``Bytes.Collection.Array C.I.equals``() = + member __.``Bytes.Collection.Array C.I.equals``() = validate (Bytes.Collection.Array) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.Array C.I.equal``() = + member __.``Bytes.Collection.Array C.I.equal``() = validate (Bytes.Collection.Array) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.Array C.I.not_equal``() = + member __.``Bytes.Collection.Array C.I.not_equal``() = validate (Bytes.Collection.Array) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Bytes.Collection.Array C.I.compare``() = + member __.``Bytes.Collection.Array C.I.compare``() = validate (Bytes.Collection.Array) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Bytes.Collection.Array C.I.less_than``() = + member __.``Bytes.Collection.Array C.I.less_than``() = validate (Bytes.Collection.Array) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Bytes.Collection.Array C.I.less_or_equal``() = + member __.``Bytes.Collection.Array C.I.less_or_equal``() = validate (Bytes.Collection.Array) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Bytes.Collection.Array C.I.greater_than``() = + member __.``Bytes.Collection.Array C.I.greater_than``() = validate (Bytes.Collection.Array) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Bytes.Collection.Array C.I.greater_or_equal``() = + member __.``Bytes.Collection.Array C.I.greater_or_equal``() = validate (Bytes.Collection.Array) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Bytes.Collection.Array C.N.equals``() = + member __.``Bytes.Collection.Array C.N.equals``() = validate (Bytes.Collection.Array) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.Array C.N.equal``() = + member __.``Bytes.Collection.Array C.N.equal``() = validate (Bytes.Collection.Array) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.Array C.N.not_equal``() = + member __.``Bytes.Collection.Array C.N.not_equal``() = validate (Bytes.Collection.Array) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Bytes.Collection.Array C.N.compare``() = + member __.``Bytes.Collection.Array C.N.compare``() = validate (Bytes.Collection.Array) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Bytes.Collection.Array C.N.less_than``() = + member __.``Bytes.Collection.Array C.N.less_than``() = validate (Bytes.Collection.Array) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Bytes.Collection.Array C.N.less_or_equal``() = + member __.``Bytes.Collection.Array C.N.less_or_equal``() = validate (Bytes.Collection.Array) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Bytes.Collection.Array C.N.greater_than``() = + member __.``Bytes.Collection.Array C.N.greater_than``() = validate (Bytes.Collection.Array) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Bytes.Collection.Array C.N.greater_or_equal``() = + member __.``Bytes.Collection.Array C.N.greater_or_equal``() = validate (Bytes.Collection.Array) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Bytes.Collection.OptionArray C.I.equals``() = + member __.``Bytes.Collection.OptionArray C.I.equals``() = validate (Bytes.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.OptionArray C.I.equal``() = + member __.``Bytes.Collection.OptionArray C.I.equal``() = validate (Bytes.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.OptionArray C.I.not_equal``() = + member __.``Bytes.Collection.OptionArray C.I.not_equal``() = validate (Bytes.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Bytes.Collection.OptionArray C.I.compare``() = + member __.``Bytes.Collection.OptionArray C.I.compare``() = validate (Bytes.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-255;0;-1;-2;1;255;0;255;254;253;1;0;-255;0;-1;-2;1;1;-254;1;0;-1;1;2;-253;2;1;0 |] [] - member _.``Bytes.Collection.OptionArray C.I.less_than``() = + member __.``Bytes.Collection.OptionArray C.I.less_than``() = validate (Bytes.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member _.``Bytes.Collection.OptionArray C.I.less_or_equal``() = + member __.``Bytes.Collection.OptionArray C.I.less_or_equal``() = validate (Bytes.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member _.``Bytes.Collection.OptionArray C.I.greater_than``() = + member __.``Bytes.Collection.OptionArray C.I.greater_than``() = validate (Bytes.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member _.``Bytes.Collection.OptionArray C.I.greater_or_equal``() = + member __.``Bytes.Collection.OptionArray C.I.greater_or_equal``() = validate (Bytes.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member _.``Bytes.Collection.OptionArray C.N.equals``() = + member __.``Bytes.Collection.OptionArray C.N.equals``() = validate (Bytes.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.OptionArray C.N.equal``() = + member __.``Bytes.Collection.OptionArray C.N.equal``() = validate (Bytes.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.OptionArray C.N.not_equal``() = + member __.``Bytes.Collection.OptionArray C.N.not_equal``() = validate (Bytes.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Bytes.Collection.OptionArray C.N.compare``() = + member __.``Bytes.Collection.OptionArray C.N.compare``() = validate (Bytes.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-255;0;-1;-2;1;255;0;255;254;253;1;0;-255;0;-1;-2;1;1;-254;1;0;-1;1;2;-253;2;1;0 |] [] - member _.``Bytes.Collection.OptionArray C.N.less_than``() = + member __.``Bytes.Collection.OptionArray C.N.less_than``() = validate (Bytes.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member _.``Bytes.Collection.OptionArray C.N.less_or_equal``() = + member __.``Bytes.Collection.OptionArray C.N.less_or_equal``() = validate (Bytes.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member _.``Bytes.Collection.OptionArray C.N.greater_than``() = + member __.``Bytes.Collection.OptionArray C.N.greater_than``() = validate (Bytes.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member _.``Bytes.Collection.OptionArray C.N.greater_or_equal``() = + member __.``Bytes.Collection.OptionArray C.N.greater_or_equal``() = validate (Bytes.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member _.``Bytes.Collection.RefArray C.I.equals``() = + member __.``Bytes.Collection.RefArray C.I.equals``() = validate (Bytes.Collection.RefArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.RefArray C.I.equal``() = + member __.``Bytes.Collection.RefArray C.I.equal``() = validate (Bytes.Collection.RefArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.RefArray C.I.not_equal``() = + member __.``Bytes.Collection.RefArray C.I.not_equal``() = validate (Bytes.Collection.RefArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Bytes.Collection.RefArray C.I.compare``() = + member __.``Bytes.Collection.RefArray C.I.compare``() = validate (Bytes.Collection.RefArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Bytes.Collection.RefArray C.I.less_than``() = + member __.``Bytes.Collection.RefArray C.I.less_than``() = validate (Bytes.Collection.RefArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Bytes.Collection.RefArray C.I.less_or_equal``() = + member __.``Bytes.Collection.RefArray C.I.less_or_equal``() = validate (Bytes.Collection.RefArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Bytes.Collection.RefArray C.I.greater_than``() = + member __.``Bytes.Collection.RefArray C.I.greater_than``() = validate (Bytes.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Bytes.Collection.RefArray C.I.greater_or_equal``() = + member __.``Bytes.Collection.RefArray C.I.greater_or_equal``() = validate (Bytes.Collection.RefArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Bytes.Collection.RefArray C.N.equals``() = + member __.``Bytes.Collection.RefArray C.N.equals``() = validate (Bytes.Collection.RefArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.RefArray C.N.equal``() = + member __.``Bytes.Collection.RefArray C.N.equal``() = validate (Bytes.Collection.RefArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.RefArray C.N.not_equal``() = + member __.``Bytes.Collection.RefArray C.N.not_equal``() = validate (Bytes.Collection.RefArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Bytes.Collection.RefArray C.N.compare``() = + member __.``Bytes.Collection.RefArray C.N.compare``() = validate (Bytes.Collection.RefArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Bytes.Collection.RefArray C.N.less_than``() = + member __.``Bytes.Collection.RefArray C.N.less_than``() = validate (Bytes.Collection.RefArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Bytes.Collection.RefArray C.N.less_or_equal``() = + member __.``Bytes.Collection.RefArray C.N.less_or_equal``() = validate (Bytes.Collection.RefArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Bytes.Collection.RefArray C.N.greater_than``() = + member __.``Bytes.Collection.RefArray C.N.greater_than``() = validate (Bytes.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Bytes.Collection.RefArray C.N.greater_or_equal``() = + member __.``Bytes.Collection.RefArray C.N.greater_or_equal``() = validate (Bytes.Collection.RefArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Bytes.Collection.RefWrapArray C.I.equals``() = + member __.``Bytes.Collection.RefWrapArray C.I.equals``() = validate (Bytes.Collection.RefWrapArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.RefWrapArray C.I.equal``() = + member __.``Bytes.Collection.RefWrapArray C.I.equal``() = validate (Bytes.Collection.RefWrapArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.RefWrapArray C.I.not_equal``() = + member __.``Bytes.Collection.RefWrapArray C.I.not_equal``() = validate (Bytes.Collection.RefWrapArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Bytes.Collection.RefWrapArray C.I.compare``() = + member __.``Bytes.Collection.RefWrapArray C.I.compare``() = validate (Bytes.Collection.RefWrapArray) C.I.compare [| 0;-255;0;-1;-2;255;0;255;254;253;0;-255;0;-1;-2;1;-254;1;0;-1;2;-253;2;1;0 |] [] - member _.``Bytes.Collection.RefWrapArray C.I.less_than``() = + member __.``Bytes.Collection.RefWrapArray C.I.less_than``() = validate (Bytes.Collection.RefWrapArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Bytes.Collection.RefWrapArray C.I.less_or_equal``() = + member __.``Bytes.Collection.RefWrapArray C.I.less_or_equal``() = validate (Bytes.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Bytes.Collection.RefWrapArray C.I.greater_than``() = + member __.``Bytes.Collection.RefWrapArray C.I.greater_than``() = validate (Bytes.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Bytes.Collection.RefWrapArray C.I.greater_or_equal``() = + member __.``Bytes.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Bytes.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Bytes.Collection.RefWrapArray C.N.equals``() = + member __.``Bytes.Collection.RefWrapArray C.N.equals``() = validate (Bytes.Collection.RefWrapArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.RefWrapArray C.N.equal``() = + member __.``Bytes.Collection.RefWrapArray C.N.equal``() = validate (Bytes.Collection.RefWrapArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.RefWrapArray C.N.not_equal``() = + member __.``Bytes.Collection.RefWrapArray C.N.not_equal``() = validate (Bytes.Collection.RefWrapArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Bytes.Collection.RefWrapArray C.N.compare``() = + member __.``Bytes.Collection.RefWrapArray C.N.compare``() = validate (Bytes.Collection.RefWrapArray) C.N.compare [| 0;-255;0;-1;-2;255;0;255;254;253;0;-255;0;-1;-2;1;-254;1;0;-1;2;-253;2;1;0 |] [] - member _.``Bytes.Collection.RefWrapArray C.N.less_than``() = + member __.``Bytes.Collection.RefWrapArray C.N.less_than``() = validate (Bytes.Collection.RefWrapArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Bytes.Collection.RefWrapArray C.N.less_or_equal``() = + member __.``Bytes.Collection.RefWrapArray C.N.less_or_equal``() = validate (Bytes.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Bytes.Collection.RefWrapArray C.N.greater_than``() = + member __.``Bytes.Collection.RefWrapArray C.N.greater_than``() = validate (Bytes.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Bytes.Collection.RefWrapArray C.N.greater_or_equal``() = + member __.``Bytes.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Bytes.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Bytes.Collection.UnionArray C.I.equals``() = + member __.``Bytes.Collection.UnionArray C.I.equals``() = validate (Bytes.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -18025,7 +18025,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionArray C.I.equal``() = + member __.``Bytes.Collection.UnionArray C.I.equal``() = validate (Bytes.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -18061,7 +18061,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionArray C.I.not_equal``() = + member __.``Bytes.Collection.UnionArray C.I.not_equal``() = validate (Bytes.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -18097,7 +18097,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionArray C.I.compare``() = + member __.``Bytes.Collection.UnionArray C.I.compare``() = validate (Bytes.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -18133,7 +18133,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionArray C.I.less_than``() = + member __.``Bytes.Collection.UnionArray C.I.less_than``() = validate (Bytes.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -18169,7 +18169,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionArray C.I.less_or_equal``() = + member __.``Bytes.Collection.UnionArray C.I.less_or_equal``() = validate (Bytes.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -18205,7 +18205,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionArray C.I.greater_than``() = + member __.``Bytes.Collection.UnionArray C.I.greater_than``() = validate (Bytes.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -18241,7 +18241,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionArray C.I.greater_or_equal``() = + member __.``Bytes.Collection.UnionArray C.I.greater_or_equal``() = validate (Bytes.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -18277,7 +18277,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionArray C.N.equals``() = + member __.``Bytes.Collection.UnionArray C.N.equals``() = validate (Bytes.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -18313,7 +18313,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionArray C.N.equal``() = + member __.``Bytes.Collection.UnionArray C.N.equal``() = validate (Bytes.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -18349,7 +18349,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionArray C.N.not_equal``() = + member __.``Bytes.Collection.UnionArray C.N.not_equal``() = validate (Bytes.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -18385,7 +18385,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionArray C.N.compare``() = + member __.``Bytes.Collection.UnionArray C.N.compare``() = validate (Bytes.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -18421,7 +18421,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionArray C.N.less_than``() = + member __.``Bytes.Collection.UnionArray C.N.less_than``() = validate (Bytes.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -18457,7 +18457,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionArray C.N.less_or_equal``() = + member __.``Bytes.Collection.UnionArray C.N.less_or_equal``() = validate (Bytes.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -18493,7 +18493,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionArray C.N.greater_than``() = + member __.``Bytes.Collection.UnionArray C.N.greater_than``() = validate (Bytes.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -18529,7 +18529,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionArray C.N.greater_or_equal``() = + member __.``Bytes.Collection.UnionArray C.N.greater_or_equal``() = validate (Bytes.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -18565,7 +18565,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionWrapArray C.I.equals``() = + member __.``Bytes.Collection.UnionWrapArray C.I.equals``() = validate (Bytes.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -18601,7 +18601,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionWrapArray C.I.equal``() = + member __.``Bytes.Collection.UnionWrapArray C.I.equal``() = validate (Bytes.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -18637,7 +18637,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionWrapArray C.I.not_equal``() = + member __.``Bytes.Collection.UnionWrapArray C.I.not_equal``() = validate (Bytes.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -18673,7 +18673,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionWrapArray C.I.compare``() = + member __.``Bytes.Collection.UnionWrapArray C.I.compare``() = validate (Bytes.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-255;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-255;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-255; @@ -18709,7 +18709,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionWrapArray C.I.less_than``() = + member __.``Bytes.Collection.UnionWrapArray C.I.less_than``() = validate (Bytes.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -18745,7 +18745,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionWrapArray C.I.less_or_equal``() = + member __.``Bytes.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Bytes.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -18781,7 +18781,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionWrapArray C.I.greater_than``() = + member __.``Bytes.Collection.UnionWrapArray C.I.greater_than``() = validate (Bytes.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -18817,7 +18817,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionWrapArray C.I.greater_or_equal``() = + member __.``Bytes.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Bytes.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -18853,7 +18853,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionWrapArray C.N.equals``() = + member __.``Bytes.Collection.UnionWrapArray C.N.equals``() = validate (Bytes.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -18889,7 +18889,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionWrapArray C.N.equal``() = + member __.``Bytes.Collection.UnionWrapArray C.N.equal``() = validate (Bytes.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -18925,7 +18925,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionWrapArray C.N.not_equal``() = + member __.``Bytes.Collection.UnionWrapArray C.N.not_equal``() = validate (Bytes.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -18961,7 +18961,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionWrapArray C.N.compare``() = + member __.``Bytes.Collection.UnionWrapArray C.N.compare``() = validate (Bytes.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-255;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-255;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-255; @@ -18997,7 +18997,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionWrapArray C.N.less_than``() = + member __.``Bytes.Collection.UnionWrapArray C.N.less_than``() = validate (Bytes.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -19033,7 +19033,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionWrapArray C.N.less_or_equal``() = + member __.``Bytes.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Bytes.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -19069,7 +19069,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionWrapArray C.N.greater_than``() = + member __.``Bytes.Collection.UnionWrapArray C.N.greater_than``() = validate (Bytes.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -19105,7 +19105,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.UnionWrapArray C.N.greater_or_equal``() = + member __.``Bytes.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Bytes.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -19141,199 +19141,199 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ValueArray C.I.equals``() = + member __.``Bytes.Collection.ValueArray C.I.equals``() = validate (Bytes.Collection.ValueArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.ValueArray C.I.equal``() = + member __.``Bytes.Collection.ValueArray C.I.equal``() = validate (Bytes.Collection.ValueArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.ValueArray C.I.not_equal``() = + member __.``Bytes.Collection.ValueArray C.I.not_equal``() = validate (Bytes.Collection.ValueArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Bytes.Collection.ValueArray C.I.compare``() = + member __.``Bytes.Collection.ValueArray C.I.compare``() = validate (Bytes.Collection.ValueArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Bytes.Collection.ValueArray C.I.less_than``() = + member __.``Bytes.Collection.ValueArray C.I.less_than``() = validate (Bytes.Collection.ValueArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Bytes.Collection.ValueArray C.I.less_or_equal``() = + member __.``Bytes.Collection.ValueArray C.I.less_or_equal``() = validate (Bytes.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Bytes.Collection.ValueArray C.I.greater_than``() = + member __.``Bytes.Collection.ValueArray C.I.greater_than``() = validate (Bytes.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Bytes.Collection.ValueArray C.I.greater_or_equal``() = + member __.``Bytes.Collection.ValueArray C.I.greater_or_equal``() = validate (Bytes.Collection.ValueArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Bytes.Collection.ValueArray C.N.equals``() = + member __.``Bytes.Collection.ValueArray C.N.equals``() = validate (Bytes.Collection.ValueArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.ValueArray C.N.equal``() = + member __.``Bytes.Collection.ValueArray C.N.equal``() = validate (Bytes.Collection.ValueArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.ValueArray C.N.not_equal``() = + member __.``Bytes.Collection.ValueArray C.N.not_equal``() = validate (Bytes.Collection.ValueArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Bytes.Collection.ValueArray C.N.compare``() = + member __.``Bytes.Collection.ValueArray C.N.compare``() = validate (Bytes.Collection.ValueArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Bytes.Collection.ValueArray C.N.less_than``() = + member __.``Bytes.Collection.ValueArray C.N.less_than``() = validate (Bytes.Collection.ValueArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Bytes.Collection.ValueArray C.N.less_or_equal``() = + member __.``Bytes.Collection.ValueArray C.N.less_or_equal``() = validate (Bytes.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Bytes.Collection.ValueArray C.N.greater_than``() = + member __.``Bytes.Collection.ValueArray C.N.greater_than``() = validate (Bytes.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Bytes.Collection.ValueArray C.N.greater_or_equal``() = + member __.``Bytes.Collection.ValueArray C.N.greater_or_equal``() = validate (Bytes.Collection.ValueArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Bytes.Collection.ValueWrapArray C.I.equals``() = + member __.``Bytes.Collection.ValueWrapArray C.I.equals``() = validate (Bytes.Collection.ValueWrapArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.ValueWrapArray C.I.equal``() = + member __.``Bytes.Collection.ValueWrapArray C.I.equal``() = validate (Bytes.Collection.ValueWrapArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.ValueWrapArray C.I.not_equal``() = + member __.``Bytes.Collection.ValueWrapArray C.I.not_equal``() = validate (Bytes.Collection.ValueWrapArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Bytes.Collection.ValueWrapArray C.I.compare``() = + member __.``Bytes.Collection.ValueWrapArray C.I.compare``() = validate (Bytes.Collection.ValueWrapArray) C.I.compare [| 0;-255;0;-1;-2;255;0;255;254;253;0;-255;0;-1;-2;1;-254;1;0;-1;2;-253;2;1;0 |] [] - member _.``Bytes.Collection.ValueWrapArray C.I.less_than``() = + member __.``Bytes.Collection.ValueWrapArray C.I.less_than``() = validate (Bytes.Collection.ValueWrapArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Bytes.Collection.ValueWrapArray C.I.less_or_equal``() = + member __.``Bytes.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Bytes.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Bytes.Collection.ValueWrapArray C.I.greater_than``() = + member __.``Bytes.Collection.ValueWrapArray C.I.greater_than``() = validate (Bytes.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Bytes.Collection.ValueWrapArray C.I.greater_or_equal``() = + member __.``Bytes.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Bytes.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Bytes.Collection.ValueWrapArray C.N.equals``() = + member __.``Bytes.Collection.ValueWrapArray C.N.equals``() = validate (Bytes.Collection.ValueWrapArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.ValueWrapArray C.N.equal``() = + member __.``Bytes.Collection.ValueWrapArray C.N.equal``() = validate (Bytes.Collection.ValueWrapArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Bytes.Collection.ValueWrapArray C.N.not_equal``() = + member __.``Bytes.Collection.ValueWrapArray C.N.not_equal``() = validate (Bytes.Collection.ValueWrapArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Bytes.Collection.ValueWrapArray C.N.compare``() = + member __.``Bytes.Collection.ValueWrapArray C.N.compare``() = validate (Bytes.Collection.ValueWrapArray) C.N.compare [| 0;-255;0;-1;-2;255;0;255;254;253;0;-255;0;-1;-2;1;-254;1;0;-1;2;-253;2;1;0 |] [] - member _.``Bytes.Collection.ValueWrapArray C.N.less_than``() = + member __.``Bytes.Collection.ValueWrapArray C.N.less_than``() = validate (Bytes.Collection.ValueWrapArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Bytes.Collection.ValueWrapArray C.N.less_or_equal``() = + member __.``Bytes.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Bytes.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Bytes.Collection.ValueWrapArray C.N.greater_than``() = + member __.``Bytes.Collection.ValueWrapArray C.N.greater_than``() = validate (Bytes.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Bytes.Collection.ValueWrapArray C.N.greater_or_equal``() = + member __.``Bytes.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Bytes.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Bytes.Collection.ArrayArray C.I.equals``() = + member __.``Bytes.Collection.ArrayArray C.I.equals``() = validate (Bytes.Collection.ArrayArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19341,7 +19341,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray C.I.equal``() = + member __.``Bytes.Collection.ArrayArray C.I.equal``() = validate (Bytes.Collection.ArrayArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19349,7 +19349,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray C.I.not_equal``() = + member __.``Bytes.Collection.ArrayArray C.I.not_equal``() = validate (Bytes.Collection.ArrayArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -19357,7 +19357,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray C.I.compare``() = + member __.``Bytes.Collection.ArrayArray C.I.compare``() = validate (Bytes.Collection.ArrayArray) C.I.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;-1;0;-1;-1; @@ -19365,7 +19365,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray C.I.less_than``() = + member __.``Bytes.Collection.ArrayArray C.I.less_than``() = validate (Bytes.Collection.ArrayArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; @@ -19373,7 +19373,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray C.I.less_or_equal``() = + member __.``Bytes.Collection.ArrayArray C.I.less_or_equal``() = validate (Bytes.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; @@ -19381,7 +19381,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray C.I.greater_than``() = + member __.``Bytes.Collection.ArrayArray C.I.greater_than``() = validate (Bytes.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; @@ -19389,7 +19389,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray C.I.greater_or_equal``() = + member __.``Bytes.Collection.ArrayArray C.I.greater_or_equal``() = validate (Bytes.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; @@ -19397,7 +19397,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray C.N.equals``() = + member __.``Bytes.Collection.ArrayArray C.N.equals``() = validate (Bytes.Collection.ArrayArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19405,7 +19405,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray C.N.equal``() = + member __.``Bytes.Collection.ArrayArray C.N.equal``() = validate (Bytes.Collection.ArrayArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19413,7 +19413,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray C.N.not_equal``() = + member __.``Bytes.Collection.ArrayArray C.N.not_equal``() = validate (Bytes.Collection.ArrayArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -19421,7 +19421,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray C.N.compare``() = + member __.``Bytes.Collection.ArrayArray C.N.compare``() = validate (Bytes.Collection.ArrayArray) C.N.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;-1;0;-1;-1; @@ -19429,7 +19429,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray C.N.less_than``() = + member __.``Bytes.Collection.ArrayArray C.N.less_than``() = validate (Bytes.Collection.ArrayArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; @@ -19437,7 +19437,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray C.N.less_or_equal``() = + member __.``Bytes.Collection.ArrayArray C.N.less_or_equal``() = validate (Bytes.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; @@ -19445,7 +19445,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray C.N.greater_than``() = + member __.``Bytes.Collection.ArrayArray C.N.greater_than``() = validate (Bytes.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; @@ -19453,7 +19453,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray C.N.greater_or_equal``() = + member __.``Bytes.Collection.ArrayArray C.N.greater_or_equal``() = validate (Bytes.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; @@ -19461,7 +19461,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ListArray C.I.equals``() = + member __.``Bytes.Collection.ListArray C.I.equals``() = validate (Bytes.Collection.ListArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19469,7 +19469,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ListArray C.I.equal``() = + member __.``Bytes.Collection.ListArray C.I.equal``() = validate (Bytes.Collection.ListArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19477,7 +19477,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ListArray C.I.not_equal``() = + member __.``Bytes.Collection.ListArray C.I.not_equal``() = validate (Bytes.Collection.ListArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -19485,7 +19485,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ListArray C.I.compare``() = + member __.``Bytes.Collection.ListArray C.I.compare``() = validate (Bytes.Collection.ListArray) C.I.compare [| 0;-255;0;-1;-2;-1;-255;-1;-1;-2;255;0;255;254;253;255;-1;255;254;253;0;-255;0;-1;-2;-1;-255;-1;-1;-2;1;-254;1;0;-1;1;-254;1;-1;-1; 2;-253;2;1;0;2;-253;2;1;-1;1;-255;1;-1;-2;0;-255;254;-1;-2;255;1;255;254;253;255;0;255;254;253;1;-255;1;-1;-2;-254;-255;0;-1;-2; @@ -19493,7 +19493,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ListArray C.I.less_than``() = + member __.``Bytes.Collection.ListArray C.I.less_than``() = validate (Bytes.Collection.ListArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; @@ -19501,7 +19501,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ListArray C.I.less_or_equal``() = + member __.``Bytes.Collection.ListArray C.I.less_or_equal``() = validate (Bytes.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; @@ -19509,7 +19509,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ListArray C.I.greater_than``() = + member __.``Bytes.Collection.ListArray C.I.greater_than``() = validate (Bytes.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; @@ -19517,7 +19517,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ListArray C.I.greater_or_equal``() = + member __.``Bytes.Collection.ListArray C.I.greater_or_equal``() = validate (Bytes.Collection.ListArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; @@ -19525,7 +19525,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ListArray C.N.equals``() = + member __.``Bytes.Collection.ListArray C.N.equals``() = validate (Bytes.Collection.ListArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19533,7 +19533,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ListArray C.N.equal``() = + member __.``Bytes.Collection.ListArray C.N.equal``() = validate (Bytes.Collection.ListArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19541,7 +19541,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ListArray C.N.not_equal``() = + member __.``Bytes.Collection.ListArray C.N.not_equal``() = validate (Bytes.Collection.ListArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -19549,7 +19549,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ListArray C.N.compare``() = + member __.``Bytes.Collection.ListArray C.N.compare``() = validate (Bytes.Collection.ListArray) C.N.compare [| 0;-255;0;-1;-2;-1;-255;-1;-1;-2;255;0;255;254;253;255;-1;255;254;253;0;-255;0;-1;-2;-1;-255;-1;-1;-2;1;-254;1;0;-1;1;-254;1;-1;-1; 2;-253;2;1;0;2;-253;2;1;-1;1;-255;1;-1;-2;0;-255;254;-1;-2;255;1;255;254;253;255;0;255;254;253;1;-255;1;-1;-2;-254;-255;0;-1;-2; @@ -19557,7 +19557,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ListArray C.N.less_than``() = + member __.``Bytes.Collection.ListArray C.N.less_than``() = validate (Bytes.Collection.ListArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; @@ -19565,7 +19565,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ListArray C.N.less_or_equal``() = + member __.``Bytes.Collection.ListArray C.N.less_or_equal``() = validate (Bytes.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; @@ -19573,7 +19573,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ListArray C.N.greater_than``() = + member __.``Bytes.Collection.ListArray C.N.greater_than``() = validate (Bytes.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; @@ -19581,7 +19581,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ListArray C.N.greater_or_equal``() = + member __.``Bytes.Collection.ListArray C.N.greater_or_equal``() = validate (Bytes.Collection.ListArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; @@ -19589,7 +19589,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19597,7 +19597,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19605,7 +19605,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -19613,7 +19613,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -19621,7 +19621,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; @@ -19629,7 +19629,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; @@ -19637,7 +19637,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; @@ -19645,7 +19645,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; @@ -19653,7 +19653,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19661,7 +19661,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19669,7 +19669,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -19677,7 +19677,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -19685,7 +19685,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; @@ -19693,7 +19693,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; @@ -19701,7 +19701,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; @@ -19709,7 +19709,7 @@ type GeneratedTests () = |] [] - member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; @@ -19717,157 +19717,157 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.Array E.I.equals``() = + member __.``NullableBytes.Collection.Array E.I.equals``() = validate (NullableBytes.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.Array E.I.equal``() = + member __.``NullableBytes.Collection.Array E.I.equal``() = validate (NullableBytes.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.Array E.I.not_equal``() = + member __.``NullableBytes.Collection.Array E.I.not_equal``() = validate (NullableBytes.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableBytes.Collection.Array E.N.equals``() = + member __.``NullableBytes.Collection.Array E.N.equals``() = validate (NullableBytes.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.Array E.N.equal``() = + member __.``NullableBytes.Collection.Array E.N.equal``() = validate (NullableBytes.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.Array E.N.not_equal``() = + member __.``NullableBytes.Collection.Array E.N.not_equal``() = validate (NullableBytes.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableBytes.Collection.OptionArray E.I.equals``() = + member __.``NullableBytes.Collection.OptionArray E.I.equals``() = validate (NullableBytes.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.OptionArray E.I.equal``() = + member __.``NullableBytes.Collection.OptionArray E.I.equal``() = validate (NullableBytes.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.OptionArray E.I.not_equal``() = + member __.``NullableBytes.Collection.OptionArray E.I.not_equal``() = validate (NullableBytes.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``NullableBytes.Collection.OptionArray E.N.equals``() = + member __.``NullableBytes.Collection.OptionArray E.N.equals``() = validate (NullableBytes.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.OptionArray E.N.equal``() = + member __.``NullableBytes.Collection.OptionArray E.N.equal``() = validate (NullableBytes.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.OptionArray E.N.not_equal``() = + member __.``NullableBytes.Collection.OptionArray E.N.not_equal``() = validate (NullableBytes.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``NullableBytes.Collection.RefArray E.I.equals``() = + member __.``NullableBytes.Collection.RefArray E.I.equals``() = validate (NullableBytes.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.RefArray E.I.equal``() = + member __.``NullableBytes.Collection.RefArray E.I.equal``() = validate (NullableBytes.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.RefArray E.I.not_equal``() = + member __.``NullableBytes.Collection.RefArray E.I.not_equal``() = validate (NullableBytes.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableBytes.Collection.RefArray E.N.equals``() = + member __.``NullableBytes.Collection.RefArray E.N.equals``() = validate (NullableBytes.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.RefArray E.N.equal``() = + member __.``NullableBytes.Collection.RefArray E.N.equal``() = validate (NullableBytes.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.RefArray E.N.not_equal``() = + member __.``NullableBytes.Collection.RefArray E.N.not_equal``() = validate (NullableBytes.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableBytes.Collection.RefWrapArray E.I.equals``() = + member __.``NullableBytes.Collection.RefWrapArray E.I.equals``() = validate (NullableBytes.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.RefWrapArray E.I.equal``() = + member __.``NullableBytes.Collection.RefWrapArray E.I.equal``() = validate (NullableBytes.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.RefWrapArray E.I.not_equal``() = + member __.``NullableBytes.Collection.RefWrapArray E.I.not_equal``() = validate (NullableBytes.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableBytes.Collection.RefWrapArray E.N.equals``() = + member __.``NullableBytes.Collection.RefWrapArray E.N.equals``() = validate (NullableBytes.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.RefWrapArray E.N.equal``() = + member __.``NullableBytes.Collection.RefWrapArray E.N.equal``() = validate (NullableBytes.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.RefWrapArray E.N.not_equal``() = + member __.``NullableBytes.Collection.RefWrapArray E.N.not_equal``() = validate (NullableBytes.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableBytes.Collection.UnionArray E.I.equals``() = + member __.``NullableBytes.Collection.UnionArray E.I.equals``() = validate (NullableBytes.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -19917,7 +19917,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.UnionArray E.I.equal``() = + member __.``NullableBytes.Collection.UnionArray E.I.equal``() = validate (NullableBytes.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -19967,7 +19967,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.UnionArray E.I.not_equal``() = + member __.``NullableBytes.Collection.UnionArray E.I.not_equal``() = validate (NullableBytes.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -20017,7 +20017,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.UnionArray E.N.equals``() = + member __.``NullableBytes.Collection.UnionArray E.N.equals``() = validate (NullableBytes.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -20067,7 +20067,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.UnionArray E.N.equal``() = + member __.``NullableBytes.Collection.UnionArray E.N.equal``() = validate (NullableBytes.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -20117,7 +20117,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.UnionArray E.N.not_equal``() = + member __.``NullableBytes.Collection.UnionArray E.N.not_equal``() = validate (NullableBytes.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -20167,7 +20167,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.UnionWrapArray E.I.equals``() = + member __.``NullableBytes.Collection.UnionWrapArray E.I.equals``() = validate (NullableBytes.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -20217,7 +20217,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.UnionWrapArray E.I.equal``() = + member __.``NullableBytes.Collection.UnionWrapArray E.I.equal``() = validate (NullableBytes.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -20267,7 +20267,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.UnionWrapArray E.I.not_equal``() = + member __.``NullableBytes.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableBytes.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -20317,7 +20317,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.UnionWrapArray E.N.equals``() = + member __.``NullableBytes.Collection.UnionWrapArray E.N.equals``() = validate (NullableBytes.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -20367,7 +20367,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.UnionWrapArray E.N.equal``() = + member __.``NullableBytes.Collection.UnionWrapArray E.N.equal``() = validate (NullableBytes.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -20417,7 +20417,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.UnionWrapArray E.N.not_equal``() = + member __.``NullableBytes.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableBytes.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -20467,79 +20467,79 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.ValueArray E.I.equals``() = + member __.``NullableBytes.Collection.ValueArray E.I.equals``() = validate (NullableBytes.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.ValueArray E.I.equal``() = + member __.``NullableBytes.Collection.ValueArray E.I.equal``() = validate (NullableBytes.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.ValueArray E.I.not_equal``() = + member __.``NullableBytes.Collection.ValueArray E.I.not_equal``() = validate (NullableBytes.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableBytes.Collection.ValueArray E.N.equals``() = + member __.``NullableBytes.Collection.ValueArray E.N.equals``() = validate (NullableBytes.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.ValueArray E.N.equal``() = + member __.``NullableBytes.Collection.ValueArray E.N.equal``() = validate (NullableBytes.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.ValueArray E.N.not_equal``() = + member __.``NullableBytes.Collection.ValueArray E.N.not_equal``() = validate (NullableBytes.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableBytes.Collection.ValueWrapArray E.I.equals``() = + member __.``NullableBytes.Collection.ValueWrapArray E.I.equals``() = validate (NullableBytes.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.ValueWrapArray E.I.equal``() = + member __.``NullableBytes.Collection.ValueWrapArray E.I.equal``() = validate (NullableBytes.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.ValueWrapArray E.I.not_equal``() = + member __.``NullableBytes.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableBytes.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableBytes.Collection.ValueWrapArray E.N.equals``() = + member __.``NullableBytes.Collection.ValueWrapArray E.N.equals``() = validate (NullableBytes.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.ValueWrapArray E.N.equal``() = + member __.``NullableBytes.Collection.ValueWrapArray E.N.equal``() = validate (NullableBytes.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableBytes.Collection.ValueWrapArray E.N.not_equal``() = + member __.``NullableBytes.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableBytes.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableBytes.Collection.ArrayArray E.I.equals``() = + member __.``NullableBytes.Collection.ArrayArray E.I.equals``() = validate (NullableBytes.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -20548,7 +20548,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.ArrayArray E.I.equal``() = + member __.``NullableBytes.Collection.ArrayArray E.I.equal``() = validate (NullableBytes.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -20557,7 +20557,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.ArrayArray E.I.not_equal``() = + member __.``NullableBytes.Collection.ArrayArray E.I.not_equal``() = validate (NullableBytes.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -20566,7 +20566,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.ArrayArray E.N.equals``() = + member __.``NullableBytes.Collection.ArrayArray E.N.equals``() = validate (NullableBytes.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -20575,7 +20575,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.ArrayArray E.N.equal``() = + member __.``NullableBytes.Collection.ArrayArray E.N.equal``() = validate (NullableBytes.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -20584,7 +20584,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.ArrayArray E.N.not_equal``() = + member __.``NullableBytes.Collection.ArrayArray E.N.not_equal``() = validate (NullableBytes.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -20593,7 +20593,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.ListArray E.I.equals``() = + member __.``NullableBytes.Collection.ListArray E.I.equals``() = validate (NullableBytes.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -20602,7 +20602,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.ListArray E.I.equal``() = + member __.``NullableBytes.Collection.ListArray E.I.equal``() = validate (NullableBytes.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -20611,7 +20611,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.ListArray E.I.not_equal``() = + member __.``NullableBytes.Collection.ListArray E.I.not_equal``() = validate (NullableBytes.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -20620,7 +20620,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.ListArray E.N.equals``() = + member __.``NullableBytes.Collection.ListArray E.N.equals``() = validate (NullableBytes.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -20629,7 +20629,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.ListArray E.N.equal``() = + member __.``NullableBytes.Collection.ListArray E.N.equal``() = validate (NullableBytes.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -20638,7 +20638,7 @@ type GeneratedTests () = |] [] - member _.``NullableBytes.Collection.ListArray E.N.not_equal``() = + member __.``NullableBytes.Collection.ListArray E.N.not_equal``() = validate (NullableBytes.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -20647,391 +20647,391 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.Array C.I.equals``() = + member __.``Uint16s.Collection.Array C.I.equals``() = validate (Uint16s.Collection.Array) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.Array C.I.equal``() = + member __.``Uint16s.Collection.Array C.I.equal``() = validate (Uint16s.Collection.Array) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.Array C.I.not_equal``() = + member __.``Uint16s.Collection.Array C.I.not_equal``() = validate (Uint16s.Collection.Array) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Uint16s.Collection.Array C.I.compare``() = + member __.``Uint16s.Collection.Array C.I.compare``() = validate (Uint16s.Collection.Array) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Uint16s.Collection.Array C.I.less_than``() = + member __.``Uint16s.Collection.Array C.I.less_than``() = validate (Uint16s.Collection.Array) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Uint16s.Collection.Array C.I.less_or_equal``() = + member __.``Uint16s.Collection.Array C.I.less_or_equal``() = validate (Uint16s.Collection.Array) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Uint16s.Collection.Array C.I.greater_than``() = + member __.``Uint16s.Collection.Array C.I.greater_than``() = validate (Uint16s.Collection.Array) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Uint16s.Collection.Array C.I.greater_or_equal``() = + member __.``Uint16s.Collection.Array C.I.greater_or_equal``() = validate (Uint16s.Collection.Array) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Uint16s.Collection.Array C.N.equals``() = + member __.``Uint16s.Collection.Array C.N.equals``() = validate (Uint16s.Collection.Array) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.Array C.N.equal``() = + member __.``Uint16s.Collection.Array C.N.equal``() = validate (Uint16s.Collection.Array) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.Array C.N.not_equal``() = + member __.``Uint16s.Collection.Array C.N.not_equal``() = validate (Uint16s.Collection.Array) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Uint16s.Collection.Array C.N.compare``() = + member __.``Uint16s.Collection.Array C.N.compare``() = validate (Uint16s.Collection.Array) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Uint16s.Collection.Array C.N.less_than``() = + member __.``Uint16s.Collection.Array C.N.less_than``() = validate (Uint16s.Collection.Array) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Uint16s.Collection.Array C.N.less_or_equal``() = + member __.``Uint16s.Collection.Array C.N.less_or_equal``() = validate (Uint16s.Collection.Array) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Uint16s.Collection.Array C.N.greater_than``() = + member __.``Uint16s.Collection.Array C.N.greater_than``() = validate (Uint16s.Collection.Array) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Uint16s.Collection.Array C.N.greater_or_equal``() = + member __.``Uint16s.Collection.Array C.N.greater_or_equal``() = validate (Uint16s.Collection.Array) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Uint16s.Collection.OptionArray C.I.equals``() = + member __.``Uint16s.Collection.OptionArray C.I.equals``() = validate (Uint16s.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.OptionArray C.I.equal``() = + member __.``Uint16s.Collection.OptionArray C.I.equal``() = validate (Uint16s.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.OptionArray C.I.not_equal``() = + member __.``Uint16s.Collection.OptionArray C.I.not_equal``() = validate (Uint16s.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Uint16s.Collection.OptionArray C.I.compare``() = + member __.``Uint16s.Collection.OptionArray C.I.compare``() = validate (Uint16s.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-65535;0;-1;-2;1;65535;0;65535;65534;65533;1;0;-65535;0;-1;-2;1;1;-65534;1;0;-1;1;2;-65533;2;1;0 |] [] - member _.``Uint16s.Collection.OptionArray C.I.less_than``() = + member __.``Uint16s.Collection.OptionArray C.I.less_than``() = validate (Uint16s.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member _.``Uint16s.Collection.OptionArray C.I.less_or_equal``() = + member __.``Uint16s.Collection.OptionArray C.I.less_or_equal``() = validate (Uint16s.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member _.``Uint16s.Collection.OptionArray C.I.greater_than``() = + member __.``Uint16s.Collection.OptionArray C.I.greater_than``() = validate (Uint16s.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member _.``Uint16s.Collection.OptionArray C.I.greater_or_equal``() = + member __.``Uint16s.Collection.OptionArray C.I.greater_or_equal``() = validate (Uint16s.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member _.``Uint16s.Collection.OptionArray C.N.equals``() = + member __.``Uint16s.Collection.OptionArray C.N.equals``() = validate (Uint16s.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.OptionArray C.N.equal``() = + member __.``Uint16s.Collection.OptionArray C.N.equal``() = validate (Uint16s.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.OptionArray C.N.not_equal``() = + member __.``Uint16s.Collection.OptionArray C.N.not_equal``() = validate (Uint16s.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Uint16s.Collection.OptionArray C.N.compare``() = + member __.``Uint16s.Collection.OptionArray C.N.compare``() = validate (Uint16s.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-65535;0;-1;-2;1;65535;0;65535;65534;65533;1;0;-65535;0;-1;-2;1;1;-65534;1;0;-1;1;2;-65533;2;1;0 |] [] - member _.``Uint16s.Collection.OptionArray C.N.less_than``() = + member __.``Uint16s.Collection.OptionArray C.N.less_than``() = validate (Uint16s.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member _.``Uint16s.Collection.OptionArray C.N.less_or_equal``() = + member __.``Uint16s.Collection.OptionArray C.N.less_or_equal``() = validate (Uint16s.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member _.``Uint16s.Collection.OptionArray C.N.greater_than``() = + member __.``Uint16s.Collection.OptionArray C.N.greater_than``() = validate (Uint16s.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member _.``Uint16s.Collection.OptionArray C.N.greater_or_equal``() = + member __.``Uint16s.Collection.OptionArray C.N.greater_or_equal``() = validate (Uint16s.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member _.``Uint16s.Collection.RefArray C.I.equals``() = + member __.``Uint16s.Collection.RefArray C.I.equals``() = validate (Uint16s.Collection.RefArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.RefArray C.I.equal``() = + member __.``Uint16s.Collection.RefArray C.I.equal``() = validate (Uint16s.Collection.RefArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.RefArray C.I.not_equal``() = + member __.``Uint16s.Collection.RefArray C.I.not_equal``() = validate (Uint16s.Collection.RefArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Uint16s.Collection.RefArray C.I.compare``() = + member __.``Uint16s.Collection.RefArray C.I.compare``() = validate (Uint16s.Collection.RefArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Uint16s.Collection.RefArray C.I.less_than``() = + member __.``Uint16s.Collection.RefArray C.I.less_than``() = validate (Uint16s.Collection.RefArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Uint16s.Collection.RefArray C.I.less_or_equal``() = + member __.``Uint16s.Collection.RefArray C.I.less_or_equal``() = validate (Uint16s.Collection.RefArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Uint16s.Collection.RefArray C.I.greater_than``() = + member __.``Uint16s.Collection.RefArray C.I.greater_than``() = validate (Uint16s.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Uint16s.Collection.RefArray C.I.greater_or_equal``() = + member __.``Uint16s.Collection.RefArray C.I.greater_or_equal``() = validate (Uint16s.Collection.RefArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Uint16s.Collection.RefArray C.N.equals``() = + member __.``Uint16s.Collection.RefArray C.N.equals``() = validate (Uint16s.Collection.RefArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.RefArray C.N.equal``() = + member __.``Uint16s.Collection.RefArray C.N.equal``() = validate (Uint16s.Collection.RefArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.RefArray C.N.not_equal``() = + member __.``Uint16s.Collection.RefArray C.N.not_equal``() = validate (Uint16s.Collection.RefArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Uint16s.Collection.RefArray C.N.compare``() = + member __.``Uint16s.Collection.RefArray C.N.compare``() = validate (Uint16s.Collection.RefArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Uint16s.Collection.RefArray C.N.less_than``() = + member __.``Uint16s.Collection.RefArray C.N.less_than``() = validate (Uint16s.Collection.RefArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Uint16s.Collection.RefArray C.N.less_or_equal``() = + member __.``Uint16s.Collection.RefArray C.N.less_or_equal``() = validate (Uint16s.Collection.RefArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Uint16s.Collection.RefArray C.N.greater_than``() = + member __.``Uint16s.Collection.RefArray C.N.greater_than``() = validate (Uint16s.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Uint16s.Collection.RefArray C.N.greater_or_equal``() = + member __.``Uint16s.Collection.RefArray C.N.greater_or_equal``() = validate (Uint16s.Collection.RefArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Uint16s.Collection.RefWrapArray C.I.equals``() = + member __.``Uint16s.Collection.RefWrapArray C.I.equals``() = validate (Uint16s.Collection.RefWrapArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.RefWrapArray C.I.equal``() = + member __.``Uint16s.Collection.RefWrapArray C.I.equal``() = validate (Uint16s.Collection.RefWrapArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.RefWrapArray C.I.not_equal``() = + member __.``Uint16s.Collection.RefWrapArray C.I.not_equal``() = validate (Uint16s.Collection.RefWrapArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Uint16s.Collection.RefWrapArray C.I.compare``() = + member __.``Uint16s.Collection.RefWrapArray C.I.compare``() = validate (Uint16s.Collection.RefWrapArray) C.I.compare [| 0;-65535;0;-1;-2;65535;0;65535;65534;65533;0;-65535;0;-1;-2;1;-65534;1;0;-1;2;-65533;2;1;0 |] [] - member _.``Uint16s.Collection.RefWrapArray C.I.less_than``() = + member __.``Uint16s.Collection.RefWrapArray C.I.less_than``() = validate (Uint16s.Collection.RefWrapArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Uint16s.Collection.RefWrapArray C.I.less_or_equal``() = + member __.``Uint16s.Collection.RefWrapArray C.I.less_or_equal``() = validate (Uint16s.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Uint16s.Collection.RefWrapArray C.I.greater_than``() = + member __.``Uint16s.Collection.RefWrapArray C.I.greater_than``() = validate (Uint16s.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Uint16s.Collection.RefWrapArray C.I.greater_or_equal``() = + member __.``Uint16s.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Uint16s.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Uint16s.Collection.RefWrapArray C.N.equals``() = + member __.``Uint16s.Collection.RefWrapArray C.N.equals``() = validate (Uint16s.Collection.RefWrapArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.RefWrapArray C.N.equal``() = + member __.``Uint16s.Collection.RefWrapArray C.N.equal``() = validate (Uint16s.Collection.RefWrapArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.RefWrapArray C.N.not_equal``() = + member __.``Uint16s.Collection.RefWrapArray C.N.not_equal``() = validate (Uint16s.Collection.RefWrapArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Uint16s.Collection.RefWrapArray C.N.compare``() = + member __.``Uint16s.Collection.RefWrapArray C.N.compare``() = validate (Uint16s.Collection.RefWrapArray) C.N.compare [| 0;-65535;0;-1;-2;65535;0;65535;65534;65533;0;-65535;0;-1;-2;1;-65534;1;0;-1;2;-65533;2;1;0 |] [] - member _.``Uint16s.Collection.RefWrapArray C.N.less_than``() = + member __.``Uint16s.Collection.RefWrapArray C.N.less_than``() = validate (Uint16s.Collection.RefWrapArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Uint16s.Collection.RefWrapArray C.N.less_or_equal``() = + member __.``Uint16s.Collection.RefWrapArray C.N.less_or_equal``() = validate (Uint16s.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Uint16s.Collection.RefWrapArray C.N.greater_than``() = + member __.``Uint16s.Collection.RefWrapArray C.N.greater_than``() = validate (Uint16s.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Uint16s.Collection.RefWrapArray C.N.greater_or_equal``() = + member __.``Uint16s.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Uint16s.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Uint16s.Collection.UnionArray C.I.equals``() = + member __.``Uint16s.Collection.UnionArray C.I.equals``() = validate (Uint16s.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -21067,7 +21067,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionArray C.I.equal``() = + member __.``Uint16s.Collection.UnionArray C.I.equal``() = validate (Uint16s.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -21103,7 +21103,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionArray C.I.not_equal``() = + member __.``Uint16s.Collection.UnionArray C.I.not_equal``() = validate (Uint16s.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -21139,7 +21139,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionArray C.I.compare``() = + member __.``Uint16s.Collection.UnionArray C.I.compare``() = validate (Uint16s.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -21175,7 +21175,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionArray C.I.less_than``() = + member __.``Uint16s.Collection.UnionArray C.I.less_than``() = validate (Uint16s.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -21211,7 +21211,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionArray C.I.less_or_equal``() = + member __.``Uint16s.Collection.UnionArray C.I.less_or_equal``() = validate (Uint16s.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -21247,7 +21247,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionArray C.I.greater_than``() = + member __.``Uint16s.Collection.UnionArray C.I.greater_than``() = validate (Uint16s.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -21283,7 +21283,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionArray C.I.greater_or_equal``() = + member __.``Uint16s.Collection.UnionArray C.I.greater_or_equal``() = validate (Uint16s.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -21319,7 +21319,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionArray C.N.equals``() = + member __.``Uint16s.Collection.UnionArray C.N.equals``() = validate (Uint16s.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -21355,7 +21355,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionArray C.N.equal``() = + member __.``Uint16s.Collection.UnionArray C.N.equal``() = validate (Uint16s.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -21391,7 +21391,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionArray C.N.not_equal``() = + member __.``Uint16s.Collection.UnionArray C.N.not_equal``() = validate (Uint16s.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -21427,7 +21427,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionArray C.N.compare``() = + member __.``Uint16s.Collection.UnionArray C.N.compare``() = validate (Uint16s.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -21463,7 +21463,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionArray C.N.less_than``() = + member __.``Uint16s.Collection.UnionArray C.N.less_than``() = validate (Uint16s.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -21499,7 +21499,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionArray C.N.less_or_equal``() = + member __.``Uint16s.Collection.UnionArray C.N.less_or_equal``() = validate (Uint16s.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -21535,7 +21535,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionArray C.N.greater_than``() = + member __.``Uint16s.Collection.UnionArray C.N.greater_than``() = validate (Uint16s.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -21571,7 +21571,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionArray C.N.greater_or_equal``() = + member __.``Uint16s.Collection.UnionArray C.N.greater_or_equal``() = validate (Uint16s.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -21607,7 +21607,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionWrapArray C.I.equals``() = + member __.``Uint16s.Collection.UnionWrapArray C.I.equals``() = validate (Uint16s.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -21643,7 +21643,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionWrapArray C.I.equal``() = + member __.``Uint16s.Collection.UnionWrapArray C.I.equal``() = validate (Uint16s.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -21679,7 +21679,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionWrapArray C.I.not_equal``() = + member __.``Uint16s.Collection.UnionWrapArray C.I.not_equal``() = validate (Uint16s.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -21715,7 +21715,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionWrapArray C.I.compare``() = + member __.``Uint16s.Collection.UnionWrapArray C.I.compare``() = validate (Uint16s.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-65535;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-65535;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-65535; @@ -21751,7 +21751,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionWrapArray C.I.less_than``() = + member __.``Uint16s.Collection.UnionWrapArray C.I.less_than``() = validate (Uint16s.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -21787,7 +21787,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionWrapArray C.I.less_or_equal``() = + member __.``Uint16s.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Uint16s.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -21823,7 +21823,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionWrapArray C.I.greater_than``() = + member __.``Uint16s.Collection.UnionWrapArray C.I.greater_than``() = validate (Uint16s.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -21859,7 +21859,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionWrapArray C.I.greater_or_equal``() = + member __.``Uint16s.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Uint16s.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -21895,7 +21895,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionWrapArray C.N.equals``() = + member __.``Uint16s.Collection.UnionWrapArray C.N.equals``() = validate (Uint16s.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -21931,7 +21931,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionWrapArray C.N.equal``() = + member __.``Uint16s.Collection.UnionWrapArray C.N.equal``() = validate (Uint16s.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -21967,7 +21967,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionWrapArray C.N.not_equal``() = + member __.``Uint16s.Collection.UnionWrapArray C.N.not_equal``() = validate (Uint16s.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -22003,7 +22003,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionWrapArray C.N.compare``() = + member __.``Uint16s.Collection.UnionWrapArray C.N.compare``() = validate (Uint16s.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-65535;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-65535;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-65535; @@ -22039,7 +22039,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionWrapArray C.N.less_than``() = + member __.``Uint16s.Collection.UnionWrapArray C.N.less_than``() = validate (Uint16s.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -22075,7 +22075,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionWrapArray C.N.less_or_equal``() = + member __.``Uint16s.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Uint16s.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -22111,7 +22111,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionWrapArray C.N.greater_than``() = + member __.``Uint16s.Collection.UnionWrapArray C.N.greater_than``() = validate (Uint16s.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -22147,7 +22147,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.UnionWrapArray C.N.greater_or_equal``() = + member __.``Uint16s.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Uint16s.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -22183,199 +22183,199 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ValueArray C.I.equals``() = + member __.``Uint16s.Collection.ValueArray C.I.equals``() = validate (Uint16s.Collection.ValueArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.ValueArray C.I.equal``() = + member __.``Uint16s.Collection.ValueArray C.I.equal``() = validate (Uint16s.Collection.ValueArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.ValueArray C.I.not_equal``() = + member __.``Uint16s.Collection.ValueArray C.I.not_equal``() = validate (Uint16s.Collection.ValueArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Uint16s.Collection.ValueArray C.I.compare``() = + member __.``Uint16s.Collection.ValueArray C.I.compare``() = validate (Uint16s.Collection.ValueArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Uint16s.Collection.ValueArray C.I.less_than``() = + member __.``Uint16s.Collection.ValueArray C.I.less_than``() = validate (Uint16s.Collection.ValueArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Uint16s.Collection.ValueArray C.I.less_or_equal``() = + member __.``Uint16s.Collection.ValueArray C.I.less_or_equal``() = validate (Uint16s.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Uint16s.Collection.ValueArray C.I.greater_than``() = + member __.``Uint16s.Collection.ValueArray C.I.greater_than``() = validate (Uint16s.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Uint16s.Collection.ValueArray C.I.greater_or_equal``() = + member __.``Uint16s.Collection.ValueArray C.I.greater_or_equal``() = validate (Uint16s.Collection.ValueArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Uint16s.Collection.ValueArray C.N.equals``() = + member __.``Uint16s.Collection.ValueArray C.N.equals``() = validate (Uint16s.Collection.ValueArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.ValueArray C.N.equal``() = + member __.``Uint16s.Collection.ValueArray C.N.equal``() = validate (Uint16s.Collection.ValueArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.ValueArray C.N.not_equal``() = + member __.``Uint16s.Collection.ValueArray C.N.not_equal``() = validate (Uint16s.Collection.ValueArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Uint16s.Collection.ValueArray C.N.compare``() = + member __.``Uint16s.Collection.ValueArray C.N.compare``() = validate (Uint16s.Collection.ValueArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Uint16s.Collection.ValueArray C.N.less_than``() = + member __.``Uint16s.Collection.ValueArray C.N.less_than``() = validate (Uint16s.Collection.ValueArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Uint16s.Collection.ValueArray C.N.less_or_equal``() = + member __.``Uint16s.Collection.ValueArray C.N.less_or_equal``() = validate (Uint16s.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Uint16s.Collection.ValueArray C.N.greater_than``() = + member __.``Uint16s.Collection.ValueArray C.N.greater_than``() = validate (Uint16s.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Uint16s.Collection.ValueArray C.N.greater_or_equal``() = + member __.``Uint16s.Collection.ValueArray C.N.greater_or_equal``() = validate (Uint16s.Collection.ValueArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Uint16s.Collection.ValueWrapArray C.I.equals``() = + member __.``Uint16s.Collection.ValueWrapArray C.I.equals``() = validate (Uint16s.Collection.ValueWrapArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.ValueWrapArray C.I.equal``() = + member __.``Uint16s.Collection.ValueWrapArray C.I.equal``() = validate (Uint16s.Collection.ValueWrapArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.ValueWrapArray C.I.not_equal``() = + member __.``Uint16s.Collection.ValueWrapArray C.I.not_equal``() = validate (Uint16s.Collection.ValueWrapArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Uint16s.Collection.ValueWrapArray C.I.compare``() = + member __.``Uint16s.Collection.ValueWrapArray C.I.compare``() = validate (Uint16s.Collection.ValueWrapArray) C.I.compare [| 0;-65535;0;-1;-2;65535;0;65535;65534;65533;0;-65535;0;-1;-2;1;-65534;1;0;-1;2;-65533;2;1;0 |] [] - member _.``Uint16s.Collection.ValueWrapArray C.I.less_than``() = + member __.``Uint16s.Collection.ValueWrapArray C.I.less_than``() = validate (Uint16s.Collection.ValueWrapArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Uint16s.Collection.ValueWrapArray C.I.less_or_equal``() = + member __.``Uint16s.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Uint16s.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Uint16s.Collection.ValueWrapArray C.I.greater_than``() = + member __.``Uint16s.Collection.ValueWrapArray C.I.greater_than``() = validate (Uint16s.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Uint16s.Collection.ValueWrapArray C.I.greater_or_equal``() = + member __.``Uint16s.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Uint16s.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Uint16s.Collection.ValueWrapArray C.N.equals``() = + member __.``Uint16s.Collection.ValueWrapArray C.N.equals``() = validate (Uint16s.Collection.ValueWrapArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.ValueWrapArray C.N.equal``() = + member __.``Uint16s.Collection.ValueWrapArray C.N.equal``() = validate (Uint16s.Collection.ValueWrapArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Uint16s.Collection.ValueWrapArray C.N.not_equal``() = + member __.``Uint16s.Collection.ValueWrapArray C.N.not_equal``() = validate (Uint16s.Collection.ValueWrapArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Uint16s.Collection.ValueWrapArray C.N.compare``() = + member __.``Uint16s.Collection.ValueWrapArray C.N.compare``() = validate (Uint16s.Collection.ValueWrapArray) C.N.compare [| 0;-65535;0;-1;-2;65535;0;65535;65534;65533;0;-65535;0;-1;-2;1;-65534;1;0;-1;2;-65533;2;1;0 |] [] - member _.``Uint16s.Collection.ValueWrapArray C.N.less_than``() = + member __.``Uint16s.Collection.ValueWrapArray C.N.less_than``() = validate (Uint16s.Collection.ValueWrapArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Uint16s.Collection.ValueWrapArray C.N.less_or_equal``() = + member __.``Uint16s.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Uint16s.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Uint16s.Collection.ValueWrapArray C.N.greater_than``() = + member __.``Uint16s.Collection.ValueWrapArray C.N.greater_than``() = validate (Uint16s.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Uint16s.Collection.ValueWrapArray C.N.greater_or_equal``() = + member __.``Uint16s.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Uint16s.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Uint16s.Collection.ArrayArray C.I.equals``() = + member __.``Uint16s.Collection.ArrayArray C.I.equals``() = validate (Uint16s.Collection.ArrayArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22383,7 +22383,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray C.I.equal``() = + member __.``Uint16s.Collection.ArrayArray C.I.equal``() = validate (Uint16s.Collection.ArrayArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22391,7 +22391,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray C.I.not_equal``() = + member __.``Uint16s.Collection.ArrayArray C.I.not_equal``() = validate (Uint16s.Collection.ArrayArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -22399,7 +22399,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray C.I.compare``() = + member __.``Uint16s.Collection.ArrayArray C.I.compare``() = validate (Uint16s.Collection.ArrayArray) C.I.compare [| 0;-65535;0;-1;-2;-1;-1;-1;-1;-1;65535;0;65535;65534;65533;-1;-1;-1;-1;-1;0;-65535;0;-1;-2;-1;-1;-1;-1;-1;1;-65534;1;0;-1;-1;-1;-1;-1;-1; 2;-65533;2;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-65535;65534;-1;-2;1;1;1;1;1;65535;0;65535;65534;65533;1;1;1;1;1;-65534;-65535;0;-1;-2; @@ -22407,7 +22407,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray C.I.less_than``() = + member __.``Uint16s.Collection.ArrayArray C.I.less_than``() = validate (Uint16s.Collection.ArrayArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; @@ -22415,7 +22415,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray C.I.less_or_equal``() = + member __.``Uint16s.Collection.ArrayArray C.I.less_or_equal``() = validate (Uint16s.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; @@ -22423,7 +22423,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray C.I.greater_than``() = + member __.``Uint16s.Collection.ArrayArray C.I.greater_than``() = validate (Uint16s.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; @@ -22431,7 +22431,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray C.I.greater_or_equal``() = + member __.``Uint16s.Collection.ArrayArray C.I.greater_or_equal``() = validate (Uint16s.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; @@ -22439,7 +22439,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray C.N.equals``() = + member __.``Uint16s.Collection.ArrayArray C.N.equals``() = validate (Uint16s.Collection.ArrayArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22447,7 +22447,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray C.N.equal``() = + member __.``Uint16s.Collection.ArrayArray C.N.equal``() = validate (Uint16s.Collection.ArrayArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22455,7 +22455,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray C.N.not_equal``() = + member __.``Uint16s.Collection.ArrayArray C.N.not_equal``() = validate (Uint16s.Collection.ArrayArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -22463,7 +22463,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray C.N.compare``() = + member __.``Uint16s.Collection.ArrayArray C.N.compare``() = validate (Uint16s.Collection.ArrayArray) C.N.compare [| 0;-65535;0;-1;-2;-1;-1;-1;-1;-1;65535;0;65535;65534;65533;-1;-1;-1;-1;-1;0;-65535;0;-1;-2;-1;-1;-1;-1;-1;1;-65534;1;0;-1;-1;-1;-1;-1;-1; 2;-65533;2;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-65535;65534;-1;-2;1;1;1;1;1;65535;0;65535;65534;65533;1;1;1;1;1;-65534;-65535;0;-1;-2; @@ -22471,7 +22471,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray C.N.less_than``() = + member __.``Uint16s.Collection.ArrayArray C.N.less_than``() = validate (Uint16s.Collection.ArrayArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; @@ -22479,7 +22479,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray C.N.less_or_equal``() = + member __.``Uint16s.Collection.ArrayArray C.N.less_or_equal``() = validate (Uint16s.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; @@ -22487,7 +22487,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray C.N.greater_than``() = + member __.``Uint16s.Collection.ArrayArray C.N.greater_than``() = validate (Uint16s.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; @@ -22495,7 +22495,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray C.N.greater_or_equal``() = + member __.``Uint16s.Collection.ArrayArray C.N.greater_or_equal``() = validate (Uint16s.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; @@ -22503,7 +22503,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ListArray C.I.equals``() = + member __.``Uint16s.Collection.ListArray C.I.equals``() = validate (Uint16s.Collection.ListArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22511,7 +22511,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ListArray C.I.equal``() = + member __.``Uint16s.Collection.ListArray C.I.equal``() = validate (Uint16s.Collection.ListArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22519,7 +22519,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ListArray C.I.not_equal``() = + member __.``Uint16s.Collection.ListArray C.I.not_equal``() = validate (Uint16s.Collection.ListArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -22527,7 +22527,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ListArray C.I.compare``() = + member __.``Uint16s.Collection.ListArray C.I.compare``() = validate (Uint16s.Collection.ListArray) C.I.compare [| 0;-65535;0;-1;-2;-1;-65535;-1;-1;-2;65535;0;65535;65534;65533;65535;-1;65535;65534;65533;0;-65535;0;-1;-2;-1;-65535;-1;-1;-2;1;-65534;1;0;-1;1;-65534;1;-1;-1; 2;-65533;2;1;0;2;-65533;2;1;-1;1;-65535;1;-1;-2;0;-65535;65534;-1;-2;65535;1;65535;65534;65533;65535;0;65535;65534;65533;1;-65535;1;-1;-2;-65534;-65535;0;-1;-2; @@ -22535,7 +22535,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ListArray C.I.less_than``() = + member __.``Uint16s.Collection.ListArray C.I.less_than``() = validate (Uint16s.Collection.ListArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; @@ -22543,7 +22543,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ListArray C.I.less_or_equal``() = + member __.``Uint16s.Collection.ListArray C.I.less_or_equal``() = validate (Uint16s.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; @@ -22551,7 +22551,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ListArray C.I.greater_than``() = + member __.``Uint16s.Collection.ListArray C.I.greater_than``() = validate (Uint16s.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; @@ -22559,7 +22559,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ListArray C.I.greater_or_equal``() = + member __.``Uint16s.Collection.ListArray C.I.greater_or_equal``() = validate (Uint16s.Collection.ListArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; @@ -22567,7 +22567,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ListArray C.N.equals``() = + member __.``Uint16s.Collection.ListArray C.N.equals``() = validate (Uint16s.Collection.ListArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22575,7 +22575,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ListArray C.N.equal``() = + member __.``Uint16s.Collection.ListArray C.N.equal``() = validate (Uint16s.Collection.ListArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22583,7 +22583,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ListArray C.N.not_equal``() = + member __.``Uint16s.Collection.ListArray C.N.not_equal``() = validate (Uint16s.Collection.ListArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -22591,7 +22591,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ListArray C.N.compare``() = + member __.``Uint16s.Collection.ListArray C.N.compare``() = validate (Uint16s.Collection.ListArray) C.N.compare [| 0;-65535;0;-1;-2;-1;-65535;-1;-1;-2;65535;0;65535;65534;65533;65535;-1;65535;65534;65533;0;-65535;0;-1;-2;-1;-65535;-1;-1;-2;1;-65534;1;0;-1;1;-65534;1;-1;-1; 2;-65533;2;1;0;2;-65533;2;1;-1;1;-65535;1;-1;-2;0;-65535;65534;-1;-2;65535;1;65535;65534;65533;65535;0;65535;65534;65533;1;-65535;1;-1;-2;-65534;-65535;0;-1;-2; @@ -22599,7 +22599,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ListArray C.N.less_than``() = + member __.``Uint16s.Collection.ListArray C.N.less_than``() = validate (Uint16s.Collection.ListArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; @@ -22607,7 +22607,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ListArray C.N.less_or_equal``() = + member __.``Uint16s.Collection.ListArray C.N.less_or_equal``() = validate (Uint16s.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; @@ -22615,7 +22615,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ListArray C.N.greater_than``() = + member __.``Uint16s.Collection.ListArray C.N.greater_than``() = validate (Uint16s.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; @@ -22623,7 +22623,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ListArray C.N.greater_or_equal``() = + member __.``Uint16s.Collection.ListArray C.N.greater_or_equal``() = validate (Uint16s.Collection.ListArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; @@ -22631,7 +22631,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22639,7 +22639,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22647,7 +22647,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -22655,7 +22655,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -22663,7 +22663,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; @@ -22671,7 +22671,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; @@ -22679,7 +22679,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; @@ -22687,7 +22687,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; @@ -22695,7 +22695,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22703,7 +22703,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22711,7 +22711,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -22719,7 +22719,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -22727,7 +22727,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; @@ -22735,7 +22735,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; @@ -22743,7 +22743,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; @@ -22751,7 +22751,7 @@ type GeneratedTests () = |] [] - member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; @@ -22759,157 +22759,157 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.Array E.I.equals``() = + member __.``NullableUInt16s.Collection.Array E.I.equals``() = validate (NullableUInt16s.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.Array E.I.equal``() = + member __.``NullableUInt16s.Collection.Array E.I.equal``() = validate (NullableUInt16s.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.Array E.I.not_equal``() = + member __.``NullableUInt16s.Collection.Array E.I.not_equal``() = validate (NullableUInt16s.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt16s.Collection.Array E.N.equals``() = + member __.``NullableUInt16s.Collection.Array E.N.equals``() = validate (NullableUInt16s.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.Array E.N.equal``() = + member __.``NullableUInt16s.Collection.Array E.N.equal``() = validate (NullableUInt16s.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.Array E.N.not_equal``() = + member __.``NullableUInt16s.Collection.Array E.N.not_equal``() = validate (NullableUInt16s.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt16s.Collection.OptionArray E.I.equals``() = + member __.``NullableUInt16s.Collection.OptionArray E.I.equals``() = validate (NullableUInt16s.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.OptionArray E.I.equal``() = + member __.``NullableUInt16s.Collection.OptionArray E.I.equal``() = validate (NullableUInt16s.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.OptionArray E.I.not_equal``() = + member __.``NullableUInt16s.Collection.OptionArray E.I.not_equal``() = validate (NullableUInt16s.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt16s.Collection.OptionArray E.N.equals``() = + member __.``NullableUInt16s.Collection.OptionArray E.N.equals``() = validate (NullableUInt16s.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.OptionArray E.N.equal``() = + member __.``NullableUInt16s.Collection.OptionArray E.N.equal``() = validate (NullableUInt16s.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.OptionArray E.N.not_equal``() = + member __.``NullableUInt16s.Collection.OptionArray E.N.not_equal``() = validate (NullableUInt16s.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt16s.Collection.RefArray E.I.equals``() = + member __.``NullableUInt16s.Collection.RefArray E.I.equals``() = validate (NullableUInt16s.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.RefArray E.I.equal``() = + member __.``NullableUInt16s.Collection.RefArray E.I.equal``() = validate (NullableUInt16s.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.RefArray E.I.not_equal``() = + member __.``NullableUInt16s.Collection.RefArray E.I.not_equal``() = validate (NullableUInt16s.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt16s.Collection.RefArray E.N.equals``() = + member __.``NullableUInt16s.Collection.RefArray E.N.equals``() = validate (NullableUInt16s.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.RefArray E.N.equal``() = + member __.``NullableUInt16s.Collection.RefArray E.N.equal``() = validate (NullableUInt16s.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.RefArray E.N.not_equal``() = + member __.``NullableUInt16s.Collection.RefArray E.N.not_equal``() = validate (NullableUInt16s.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt16s.Collection.RefWrapArray E.I.equals``() = + member __.``NullableUInt16s.Collection.RefWrapArray E.I.equals``() = validate (NullableUInt16s.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.RefWrapArray E.I.equal``() = + member __.``NullableUInt16s.Collection.RefWrapArray E.I.equal``() = validate (NullableUInt16s.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.RefWrapArray E.I.not_equal``() = + member __.``NullableUInt16s.Collection.RefWrapArray E.I.not_equal``() = validate (NullableUInt16s.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt16s.Collection.RefWrapArray E.N.equals``() = + member __.``NullableUInt16s.Collection.RefWrapArray E.N.equals``() = validate (NullableUInt16s.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.RefWrapArray E.N.equal``() = + member __.``NullableUInt16s.Collection.RefWrapArray E.N.equal``() = validate (NullableUInt16s.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.RefWrapArray E.N.not_equal``() = + member __.``NullableUInt16s.Collection.RefWrapArray E.N.not_equal``() = validate (NullableUInt16s.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt16s.Collection.UnionArray E.I.equals``() = + member __.``NullableUInt16s.Collection.UnionArray E.I.equals``() = validate (NullableUInt16s.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -22959,7 +22959,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.UnionArray E.I.equal``() = + member __.``NullableUInt16s.Collection.UnionArray E.I.equal``() = validate (NullableUInt16s.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -23009,7 +23009,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.UnionArray E.I.not_equal``() = + member __.``NullableUInt16s.Collection.UnionArray E.I.not_equal``() = validate (NullableUInt16s.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -23059,7 +23059,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.UnionArray E.N.equals``() = + member __.``NullableUInt16s.Collection.UnionArray E.N.equals``() = validate (NullableUInt16s.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -23109,7 +23109,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.UnionArray E.N.equal``() = + member __.``NullableUInt16s.Collection.UnionArray E.N.equal``() = validate (NullableUInt16s.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -23159,7 +23159,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.UnionArray E.N.not_equal``() = + member __.``NullableUInt16s.Collection.UnionArray E.N.not_equal``() = validate (NullableUInt16s.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -23209,7 +23209,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.UnionWrapArray E.I.equals``() = + member __.``NullableUInt16s.Collection.UnionWrapArray E.I.equals``() = validate (NullableUInt16s.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -23259,7 +23259,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.UnionWrapArray E.I.equal``() = + member __.``NullableUInt16s.Collection.UnionWrapArray E.I.equal``() = validate (NullableUInt16s.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -23309,7 +23309,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.UnionWrapArray E.I.not_equal``() = + member __.``NullableUInt16s.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableUInt16s.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -23359,7 +23359,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.UnionWrapArray E.N.equals``() = + member __.``NullableUInt16s.Collection.UnionWrapArray E.N.equals``() = validate (NullableUInt16s.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -23409,7 +23409,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.UnionWrapArray E.N.equal``() = + member __.``NullableUInt16s.Collection.UnionWrapArray E.N.equal``() = validate (NullableUInt16s.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -23459,7 +23459,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.UnionWrapArray E.N.not_equal``() = + member __.``NullableUInt16s.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableUInt16s.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -23509,79 +23509,79 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.ValueArray E.I.equals``() = + member __.``NullableUInt16s.Collection.ValueArray E.I.equals``() = validate (NullableUInt16s.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.ValueArray E.I.equal``() = + member __.``NullableUInt16s.Collection.ValueArray E.I.equal``() = validate (NullableUInt16s.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.ValueArray E.I.not_equal``() = + member __.``NullableUInt16s.Collection.ValueArray E.I.not_equal``() = validate (NullableUInt16s.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt16s.Collection.ValueArray E.N.equals``() = + member __.``NullableUInt16s.Collection.ValueArray E.N.equals``() = validate (NullableUInt16s.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.ValueArray E.N.equal``() = + member __.``NullableUInt16s.Collection.ValueArray E.N.equal``() = validate (NullableUInt16s.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.ValueArray E.N.not_equal``() = + member __.``NullableUInt16s.Collection.ValueArray E.N.not_equal``() = validate (NullableUInt16s.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt16s.Collection.ValueWrapArray E.I.equals``() = + member __.``NullableUInt16s.Collection.ValueWrapArray E.I.equals``() = validate (NullableUInt16s.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.ValueWrapArray E.I.equal``() = + member __.``NullableUInt16s.Collection.ValueWrapArray E.I.equal``() = validate (NullableUInt16s.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.ValueWrapArray E.I.not_equal``() = + member __.``NullableUInt16s.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableUInt16s.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt16s.Collection.ValueWrapArray E.N.equals``() = + member __.``NullableUInt16s.Collection.ValueWrapArray E.N.equals``() = validate (NullableUInt16s.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.ValueWrapArray E.N.equal``() = + member __.``NullableUInt16s.Collection.ValueWrapArray E.N.equal``() = validate (NullableUInt16s.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt16s.Collection.ValueWrapArray E.N.not_equal``() = + member __.``NullableUInt16s.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableUInt16s.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt16s.Collection.ArrayArray E.I.equals``() = + member __.``NullableUInt16s.Collection.ArrayArray E.I.equals``() = validate (NullableUInt16s.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -23590,7 +23590,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.ArrayArray E.I.equal``() = + member __.``NullableUInt16s.Collection.ArrayArray E.I.equal``() = validate (NullableUInt16s.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -23599,7 +23599,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.ArrayArray E.I.not_equal``() = + member __.``NullableUInt16s.Collection.ArrayArray E.I.not_equal``() = validate (NullableUInt16s.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -23608,7 +23608,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.ArrayArray E.N.equals``() = + member __.``NullableUInt16s.Collection.ArrayArray E.N.equals``() = validate (NullableUInt16s.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -23617,7 +23617,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.ArrayArray E.N.equal``() = + member __.``NullableUInt16s.Collection.ArrayArray E.N.equal``() = validate (NullableUInt16s.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -23626,7 +23626,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.ArrayArray E.N.not_equal``() = + member __.``NullableUInt16s.Collection.ArrayArray E.N.not_equal``() = validate (NullableUInt16s.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -23635,7 +23635,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.ListArray E.I.equals``() = + member __.``NullableUInt16s.Collection.ListArray E.I.equals``() = validate (NullableUInt16s.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -23644,7 +23644,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.ListArray E.I.equal``() = + member __.``NullableUInt16s.Collection.ListArray E.I.equal``() = validate (NullableUInt16s.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -23653,7 +23653,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.ListArray E.I.not_equal``() = + member __.``NullableUInt16s.Collection.ListArray E.I.not_equal``() = validate (NullableUInt16s.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -23662,7 +23662,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.ListArray E.N.equals``() = + member __.``NullableUInt16s.Collection.ListArray E.N.equals``() = validate (NullableUInt16s.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -23671,7 +23671,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.ListArray E.N.equal``() = + member __.``NullableUInt16s.Collection.ListArray E.N.equal``() = validate (NullableUInt16s.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -23680,7 +23680,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt16s.Collection.ListArray E.N.not_equal``() = + member __.``NullableUInt16s.Collection.ListArray E.N.not_equal``() = validate (NullableUInt16s.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -23689,391 +23689,391 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.Array C.I.equals``() = + member __.``UInt32s.Collection.Array C.I.equals``() = validate (UInt32s.Collection.Array) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.Array C.I.equal``() = + member __.``UInt32s.Collection.Array C.I.equal``() = validate (UInt32s.Collection.Array) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.Array C.I.not_equal``() = + member __.``UInt32s.Collection.Array C.I.not_equal``() = validate (UInt32s.Collection.Array) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``UInt32s.Collection.Array C.I.compare``() = + member __.``UInt32s.Collection.Array C.I.compare``() = validate (UInt32s.Collection.Array) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``UInt32s.Collection.Array C.I.less_than``() = + member __.``UInt32s.Collection.Array C.I.less_than``() = validate (UInt32s.Collection.Array) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``UInt32s.Collection.Array C.I.less_or_equal``() = + member __.``UInt32s.Collection.Array C.I.less_or_equal``() = validate (UInt32s.Collection.Array) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``UInt32s.Collection.Array C.I.greater_than``() = + member __.``UInt32s.Collection.Array C.I.greater_than``() = validate (UInt32s.Collection.Array) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``UInt32s.Collection.Array C.I.greater_or_equal``() = + member __.``UInt32s.Collection.Array C.I.greater_or_equal``() = validate (UInt32s.Collection.Array) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``UInt32s.Collection.Array C.N.equals``() = + member __.``UInt32s.Collection.Array C.N.equals``() = validate (UInt32s.Collection.Array) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.Array C.N.equal``() = + member __.``UInt32s.Collection.Array C.N.equal``() = validate (UInt32s.Collection.Array) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.Array C.N.not_equal``() = + member __.``UInt32s.Collection.Array C.N.not_equal``() = validate (UInt32s.Collection.Array) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``UInt32s.Collection.Array C.N.compare``() = + member __.``UInt32s.Collection.Array C.N.compare``() = validate (UInt32s.Collection.Array) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``UInt32s.Collection.Array C.N.less_than``() = + member __.``UInt32s.Collection.Array C.N.less_than``() = validate (UInt32s.Collection.Array) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``UInt32s.Collection.Array C.N.less_or_equal``() = + member __.``UInt32s.Collection.Array C.N.less_or_equal``() = validate (UInt32s.Collection.Array) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``UInt32s.Collection.Array C.N.greater_than``() = + member __.``UInt32s.Collection.Array C.N.greater_than``() = validate (UInt32s.Collection.Array) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``UInt32s.Collection.Array C.N.greater_or_equal``() = + member __.``UInt32s.Collection.Array C.N.greater_or_equal``() = validate (UInt32s.Collection.Array) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``UInt32s.Collection.OptionArray C.I.equals``() = + member __.``UInt32s.Collection.OptionArray C.I.equals``() = validate (UInt32s.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.OptionArray C.I.equal``() = + member __.``UInt32s.Collection.OptionArray C.I.equal``() = validate (UInt32s.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.OptionArray C.I.not_equal``() = + member __.``UInt32s.Collection.OptionArray C.I.not_equal``() = validate (UInt32s.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``UInt32s.Collection.OptionArray C.I.compare``() = + member __.``UInt32s.Collection.OptionArray C.I.compare``() = validate (UInt32s.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;0;-1;-1;1;1;0;1;1;1;1;0;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 |] [] - member _.``UInt32s.Collection.OptionArray C.I.less_than``() = + member __.``UInt32s.Collection.OptionArray C.I.less_than``() = validate (UInt32s.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member _.``UInt32s.Collection.OptionArray C.I.less_or_equal``() = + member __.``UInt32s.Collection.OptionArray C.I.less_or_equal``() = validate (UInt32s.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member _.``UInt32s.Collection.OptionArray C.I.greater_than``() = + member __.``UInt32s.Collection.OptionArray C.I.greater_than``() = validate (UInt32s.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member _.``UInt32s.Collection.OptionArray C.I.greater_or_equal``() = + member __.``UInt32s.Collection.OptionArray C.I.greater_or_equal``() = validate (UInt32s.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member _.``UInt32s.Collection.OptionArray C.N.equals``() = + member __.``UInt32s.Collection.OptionArray C.N.equals``() = validate (UInt32s.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.OptionArray C.N.equal``() = + member __.``UInt32s.Collection.OptionArray C.N.equal``() = validate (UInt32s.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.OptionArray C.N.not_equal``() = + member __.``UInt32s.Collection.OptionArray C.N.not_equal``() = validate (UInt32s.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``UInt32s.Collection.OptionArray C.N.compare``() = + member __.``UInt32s.Collection.OptionArray C.N.compare``() = validate (UInt32s.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;0;-1;-1;1;1;0;1;1;1;1;0;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 |] [] - member _.``UInt32s.Collection.OptionArray C.N.less_than``() = + member __.``UInt32s.Collection.OptionArray C.N.less_than``() = validate (UInt32s.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member _.``UInt32s.Collection.OptionArray C.N.less_or_equal``() = + member __.``UInt32s.Collection.OptionArray C.N.less_or_equal``() = validate (UInt32s.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member _.``UInt32s.Collection.OptionArray C.N.greater_than``() = + member __.``UInt32s.Collection.OptionArray C.N.greater_than``() = validate (UInt32s.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member _.``UInt32s.Collection.OptionArray C.N.greater_or_equal``() = + member __.``UInt32s.Collection.OptionArray C.N.greater_or_equal``() = validate (UInt32s.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member _.``UInt32s.Collection.RefArray C.I.equals``() = + member __.``UInt32s.Collection.RefArray C.I.equals``() = validate (UInt32s.Collection.RefArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.RefArray C.I.equal``() = + member __.``UInt32s.Collection.RefArray C.I.equal``() = validate (UInt32s.Collection.RefArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.RefArray C.I.not_equal``() = + member __.``UInt32s.Collection.RefArray C.I.not_equal``() = validate (UInt32s.Collection.RefArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``UInt32s.Collection.RefArray C.I.compare``() = + member __.``UInt32s.Collection.RefArray C.I.compare``() = validate (UInt32s.Collection.RefArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``UInt32s.Collection.RefArray C.I.less_than``() = + member __.``UInt32s.Collection.RefArray C.I.less_than``() = validate (UInt32s.Collection.RefArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``UInt32s.Collection.RefArray C.I.less_or_equal``() = + member __.``UInt32s.Collection.RefArray C.I.less_or_equal``() = validate (UInt32s.Collection.RefArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``UInt32s.Collection.RefArray C.I.greater_than``() = + member __.``UInt32s.Collection.RefArray C.I.greater_than``() = validate (UInt32s.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``UInt32s.Collection.RefArray C.I.greater_or_equal``() = + member __.``UInt32s.Collection.RefArray C.I.greater_or_equal``() = validate (UInt32s.Collection.RefArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``UInt32s.Collection.RefArray C.N.equals``() = + member __.``UInt32s.Collection.RefArray C.N.equals``() = validate (UInt32s.Collection.RefArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.RefArray C.N.equal``() = + member __.``UInt32s.Collection.RefArray C.N.equal``() = validate (UInt32s.Collection.RefArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.RefArray C.N.not_equal``() = + member __.``UInt32s.Collection.RefArray C.N.not_equal``() = validate (UInt32s.Collection.RefArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``UInt32s.Collection.RefArray C.N.compare``() = + member __.``UInt32s.Collection.RefArray C.N.compare``() = validate (UInt32s.Collection.RefArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``UInt32s.Collection.RefArray C.N.less_than``() = + member __.``UInt32s.Collection.RefArray C.N.less_than``() = validate (UInt32s.Collection.RefArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``UInt32s.Collection.RefArray C.N.less_or_equal``() = + member __.``UInt32s.Collection.RefArray C.N.less_or_equal``() = validate (UInt32s.Collection.RefArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``UInt32s.Collection.RefArray C.N.greater_than``() = + member __.``UInt32s.Collection.RefArray C.N.greater_than``() = validate (UInt32s.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``UInt32s.Collection.RefArray C.N.greater_or_equal``() = + member __.``UInt32s.Collection.RefArray C.N.greater_or_equal``() = validate (UInt32s.Collection.RefArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``UInt32s.Collection.RefWrapArray C.I.equals``() = + member __.``UInt32s.Collection.RefWrapArray C.I.equals``() = validate (UInt32s.Collection.RefWrapArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.RefWrapArray C.I.equal``() = + member __.``UInt32s.Collection.RefWrapArray C.I.equal``() = validate (UInt32s.Collection.RefWrapArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.RefWrapArray C.I.not_equal``() = + member __.``UInt32s.Collection.RefWrapArray C.I.not_equal``() = validate (UInt32s.Collection.RefWrapArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``UInt32s.Collection.RefWrapArray C.I.compare``() = + member __.``UInt32s.Collection.RefWrapArray C.I.compare``() = validate (UInt32s.Collection.RefWrapArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``UInt32s.Collection.RefWrapArray C.I.less_than``() = + member __.``UInt32s.Collection.RefWrapArray C.I.less_than``() = validate (UInt32s.Collection.RefWrapArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``UInt32s.Collection.RefWrapArray C.I.less_or_equal``() = + member __.``UInt32s.Collection.RefWrapArray C.I.less_or_equal``() = validate (UInt32s.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``UInt32s.Collection.RefWrapArray C.I.greater_than``() = + member __.``UInt32s.Collection.RefWrapArray C.I.greater_than``() = validate (UInt32s.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``UInt32s.Collection.RefWrapArray C.I.greater_or_equal``() = + member __.``UInt32s.Collection.RefWrapArray C.I.greater_or_equal``() = validate (UInt32s.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``UInt32s.Collection.RefWrapArray C.N.equals``() = + member __.``UInt32s.Collection.RefWrapArray C.N.equals``() = validate (UInt32s.Collection.RefWrapArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.RefWrapArray C.N.equal``() = + member __.``UInt32s.Collection.RefWrapArray C.N.equal``() = validate (UInt32s.Collection.RefWrapArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.RefWrapArray C.N.not_equal``() = + member __.``UInt32s.Collection.RefWrapArray C.N.not_equal``() = validate (UInt32s.Collection.RefWrapArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``UInt32s.Collection.RefWrapArray C.N.compare``() = + member __.``UInt32s.Collection.RefWrapArray C.N.compare``() = validate (UInt32s.Collection.RefWrapArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``UInt32s.Collection.RefWrapArray C.N.less_than``() = + member __.``UInt32s.Collection.RefWrapArray C.N.less_than``() = validate (UInt32s.Collection.RefWrapArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``UInt32s.Collection.RefWrapArray C.N.less_or_equal``() = + member __.``UInt32s.Collection.RefWrapArray C.N.less_or_equal``() = validate (UInt32s.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``UInt32s.Collection.RefWrapArray C.N.greater_than``() = + member __.``UInt32s.Collection.RefWrapArray C.N.greater_than``() = validate (UInt32s.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``UInt32s.Collection.RefWrapArray C.N.greater_or_equal``() = + member __.``UInt32s.Collection.RefWrapArray C.N.greater_or_equal``() = validate (UInt32s.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``UInt32s.Collection.UnionArray C.I.equals``() = + member __.``UInt32s.Collection.UnionArray C.I.equals``() = validate (UInt32s.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -24109,7 +24109,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionArray C.I.equal``() = + member __.``UInt32s.Collection.UnionArray C.I.equal``() = validate (UInt32s.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -24145,7 +24145,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionArray C.I.not_equal``() = + member __.``UInt32s.Collection.UnionArray C.I.not_equal``() = validate (UInt32s.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -24181,7 +24181,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionArray C.I.compare``() = + member __.``UInt32s.Collection.UnionArray C.I.compare``() = validate (UInt32s.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -24217,7 +24217,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionArray C.I.less_than``() = + member __.``UInt32s.Collection.UnionArray C.I.less_than``() = validate (UInt32s.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -24253,7 +24253,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionArray C.I.less_or_equal``() = + member __.``UInt32s.Collection.UnionArray C.I.less_or_equal``() = validate (UInt32s.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -24289,7 +24289,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionArray C.I.greater_than``() = + member __.``UInt32s.Collection.UnionArray C.I.greater_than``() = validate (UInt32s.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -24325,7 +24325,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionArray C.I.greater_or_equal``() = + member __.``UInt32s.Collection.UnionArray C.I.greater_or_equal``() = validate (UInt32s.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -24361,7 +24361,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionArray C.N.equals``() = + member __.``UInt32s.Collection.UnionArray C.N.equals``() = validate (UInt32s.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -24397,7 +24397,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionArray C.N.equal``() = + member __.``UInt32s.Collection.UnionArray C.N.equal``() = validate (UInt32s.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -24433,7 +24433,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionArray C.N.not_equal``() = + member __.``UInt32s.Collection.UnionArray C.N.not_equal``() = validate (UInt32s.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -24469,7 +24469,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionArray C.N.compare``() = + member __.``UInt32s.Collection.UnionArray C.N.compare``() = validate (UInt32s.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -24505,7 +24505,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionArray C.N.less_than``() = + member __.``UInt32s.Collection.UnionArray C.N.less_than``() = validate (UInt32s.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -24541,7 +24541,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionArray C.N.less_or_equal``() = + member __.``UInt32s.Collection.UnionArray C.N.less_or_equal``() = validate (UInt32s.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -24577,7 +24577,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionArray C.N.greater_than``() = + member __.``UInt32s.Collection.UnionArray C.N.greater_than``() = validate (UInt32s.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -24613,7 +24613,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionArray C.N.greater_or_equal``() = + member __.``UInt32s.Collection.UnionArray C.N.greater_or_equal``() = validate (UInt32s.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -24649,7 +24649,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionWrapArray C.I.equals``() = + member __.``UInt32s.Collection.UnionWrapArray C.I.equals``() = validate (UInt32s.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -24685,7 +24685,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionWrapArray C.I.equal``() = + member __.``UInt32s.Collection.UnionWrapArray C.I.equal``() = validate (UInt32s.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -24721,7 +24721,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionWrapArray C.I.not_equal``() = + member __.``UInt32s.Collection.UnionWrapArray C.I.not_equal``() = validate (UInt32s.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -24757,7 +24757,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionWrapArray C.I.compare``() = + member __.``UInt32s.Collection.UnionWrapArray C.I.compare``() = validate (UInt32s.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -24793,7 +24793,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionWrapArray C.I.less_than``() = + member __.``UInt32s.Collection.UnionWrapArray C.I.less_than``() = validate (UInt32s.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -24829,7 +24829,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionWrapArray C.I.less_or_equal``() = + member __.``UInt32s.Collection.UnionWrapArray C.I.less_or_equal``() = validate (UInt32s.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -24865,7 +24865,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionWrapArray C.I.greater_than``() = + member __.``UInt32s.Collection.UnionWrapArray C.I.greater_than``() = validate (UInt32s.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -24901,7 +24901,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionWrapArray C.I.greater_or_equal``() = + member __.``UInt32s.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (UInt32s.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -24937,7 +24937,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionWrapArray C.N.equals``() = + member __.``UInt32s.Collection.UnionWrapArray C.N.equals``() = validate (UInt32s.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -24973,7 +24973,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionWrapArray C.N.equal``() = + member __.``UInt32s.Collection.UnionWrapArray C.N.equal``() = validate (UInt32s.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -25009,7 +25009,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionWrapArray C.N.not_equal``() = + member __.``UInt32s.Collection.UnionWrapArray C.N.not_equal``() = validate (UInt32s.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -25045,7 +25045,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionWrapArray C.N.compare``() = + member __.``UInt32s.Collection.UnionWrapArray C.N.compare``() = validate (UInt32s.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -25081,7 +25081,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionWrapArray C.N.less_than``() = + member __.``UInt32s.Collection.UnionWrapArray C.N.less_than``() = validate (UInt32s.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -25117,7 +25117,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionWrapArray C.N.less_or_equal``() = + member __.``UInt32s.Collection.UnionWrapArray C.N.less_or_equal``() = validate (UInt32s.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -25153,7 +25153,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionWrapArray C.N.greater_than``() = + member __.``UInt32s.Collection.UnionWrapArray C.N.greater_than``() = validate (UInt32s.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -25189,7 +25189,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.UnionWrapArray C.N.greater_or_equal``() = + member __.``UInt32s.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (UInt32s.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -25225,199 +25225,199 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ValueArray C.I.equals``() = + member __.``UInt32s.Collection.ValueArray C.I.equals``() = validate (UInt32s.Collection.ValueArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.ValueArray C.I.equal``() = + member __.``UInt32s.Collection.ValueArray C.I.equal``() = validate (UInt32s.Collection.ValueArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.ValueArray C.I.not_equal``() = + member __.``UInt32s.Collection.ValueArray C.I.not_equal``() = validate (UInt32s.Collection.ValueArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``UInt32s.Collection.ValueArray C.I.compare``() = + member __.``UInt32s.Collection.ValueArray C.I.compare``() = validate (UInt32s.Collection.ValueArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``UInt32s.Collection.ValueArray C.I.less_than``() = + member __.``UInt32s.Collection.ValueArray C.I.less_than``() = validate (UInt32s.Collection.ValueArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``UInt32s.Collection.ValueArray C.I.less_or_equal``() = + member __.``UInt32s.Collection.ValueArray C.I.less_or_equal``() = validate (UInt32s.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``UInt32s.Collection.ValueArray C.I.greater_than``() = + member __.``UInt32s.Collection.ValueArray C.I.greater_than``() = validate (UInt32s.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``UInt32s.Collection.ValueArray C.I.greater_or_equal``() = + member __.``UInt32s.Collection.ValueArray C.I.greater_or_equal``() = validate (UInt32s.Collection.ValueArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``UInt32s.Collection.ValueArray C.N.equals``() = + member __.``UInt32s.Collection.ValueArray C.N.equals``() = validate (UInt32s.Collection.ValueArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.ValueArray C.N.equal``() = + member __.``UInt32s.Collection.ValueArray C.N.equal``() = validate (UInt32s.Collection.ValueArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.ValueArray C.N.not_equal``() = + member __.``UInt32s.Collection.ValueArray C.N.not_equal``() = validate (UInt32s.Collection.ValueArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``UInt32s.Collection.ValueArray C.N.compare``() = + member __.``UInt32s.Collection.ValueArray C.N.compare``() = validate (UInt32s.Collection.ValueArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``UInt32s.Collection.ValueArray C.N.less_than``() = + member __.``UInt32s.Collection.ValueArray C.N.less_than``() = validate (UInt32s.Collection.ValueArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``UInt32s.Collection.ValueArray C.N.less_or_equal``() = + member __.``UInt32s.Collection.ValueArray C.N.less_or_equal``() = validate (UInt32s.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``UInt32s.Collection.ValueArray C.N.greater_than``() = + member __.``UInt32s.Collection.ValueArray C.N.greater_than``() = validate (UInt32s.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``UInt32s.Collection.ValueArray C.N.greater_or_equal``() = + member __.``UInt32s.Collection.ValueArray C.N.greater_or_equal``() = validate (UInt32s.Collection.ValueArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``UInt32s.Collection.ValueWrapArray C.I.equals``() = + member __.``UInt32s.Collection.ValueWrapArray C.I.equals``() = validate (UInt32s.Collection.ValueWrapArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.ValueWrapArray C.I.equal``() = + member __.``UInt32s.Collection.ValueWrapArray C.I.equal``() = validate (UInt32s.Collection.ValueWrapArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.ValueWrapArray C.I.not_equal``() = + member __.``UInt32s.Collection.ValueWrapArray C.I.not_equal``() = validate (UInt32s.Collection.ValueWrapArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``UInt32s.Collection.ValueWrapArray C.I.compare``() = + member __.``UInt32s.Collection.ValueWrapArray C.I.compare``() = validate (UInt32s.Collection.ValueWrapArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``UInt32s.Collection.ValueWrapArray C.I.less_than``() = + member __.``UInt32s.Collection.ValueWrapArray C.I.less_than``() = validate (UInt32s.Collection.ValueWrapArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``UInt32s.Collection.ValueWrapArray C.I.less_or_equal``() = + member __.``UInt32s.Collection.ValueWrapArray C.I.less_or_equal``() = validate (UInt32s.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``UInt32s.Collection.ValueWrapArray C.I.greater_than``() = + member __.``UInt32s.Collection.ValueWrapArray C.I.greater_than``() = validate (UInt32s.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``UInt32s.Collection.ValueWrapArray C.I.greater_or_equal``() = + member __.``UInt32s.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (UInt32s.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``UInt32s.Collection.ValueWrapArray C.N.equals``() = + member __.``UInt32s.Collection.ValueWrapArray C.N.equals``() = validate (UInt32s.Collection.ValueWrapArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.ValueWrapArray C.N.equal``() = + member __.``UInt32s.Collection.ValueWrapArray C.N.equal``() = validate (UInt32s.Collection.ValueWrapArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt32s.Collection.ValueWrapArray C.N.not_equal``() = + member __.``UInt32s.Collection.ValueWrapArray C.N.not_equal``() = validate (UInt32s.Collection.ValueWrapArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``UInt32s.Collection.ValueWrapArray C.N.compare``() = + member __.``UInt32s.Collection.ValueWrapArray C.N.compare``() = validate (UInt32s.Collection.ValueWrapArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``UInt32s.Collection.ValueWrapArray C.N.less_than``() = + member __.``UInt32s.Collection.ValueWrapArray C.N.less_than``() = validate (UInt32s.Collection.ValueWrapArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``UInt32s.Collection.ValueWrapArray C.N.less_or_equal``() = + member __.``UInt32s.Collection.ValueWrapArray C.N.less_or_equal``() = validate (UInt32s.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``UInt32s.Collection.ValueWrapArray C.N.greater_than``() = + member __.``UInt32s.Collection.ValueWrapArray C.N.greater_than``() = validate (UInt32s.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``UInt32s.Collection.ValueWrapArray C.N.greater_or_equal``() = + member __.``UInt32s.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (UInt32s.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``UInt32s.Collection.ArrayArray C.I.equals``() = + member __.``UInt32s.Collection.ArrayArray C.I.equals``() = validate (UInt32s.Collection.ArrayArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25425,7 +25425,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray C.I.equal``() = + member __.``UInt32s.Collection.ArrayArray C.I.equal``() = validate (UInt32s.Collection.ArrayArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25433,7 +25433,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray C.I.not_equal``() = + member __.``UInt32s.Collection.ArrayArray C.I.not_equal``() = validate (UInt32s.Collection.ArrayArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -25441,7 +25441,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray C.I.compare``() = + member __.``UInt32s.Collection.ArrayArray C.I.compare``() = validate (UInt32s.Collection.ArrayArray) C.I.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;-1;0;-1;-1; @@ -25449,7 +25449,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray C.I.less_than``() = + member __.``UInt32s.Collection.ArrayArray C.I.less_than``() = validate (UInt32s.Collection.ArrayArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; @@ -25457,7 +25457,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray C.I.less_or_equal``() = + member __.``UInt32s.Collection.ArrayArray C.I.less_or_equal``() = validate (UInt32s.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; @@ -25465,7 +25465,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray C.I.greater_than``() = + member __.``UInt32s.Collection.ArrayArray C.I.greater_than``() = validate (UInt32s.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; @@ -25473,7 +25473,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray C.I.greater_or_equal``() = + member __.``UInt32s.Collection.ArrayArray C.I.greater_or_equal``() = validate (UInt32s.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; @@ -25481,7 +25481,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray C.N.equals``() = + member __.``UInt32s.Collection.ArrayArray C.N.equals``() = validate (UInt32s.Collection.ArrayArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25489,7 +25489,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray C.N.equal``() = + member __.``UInt32s.Collection.ArrayArray C.N.equal``() = validate (UInt32s.Collection.ArrayArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25497,7 +25497,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray C.N.not_equal``() = + member __.``UInt32s.Collection.ArrayArray C.N.not_equal``() = validate (UInt32s.Collection.ArrayArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -25505,7 +25505,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray C.N.compare``() = + member __.``UInt32s.Collection.ArrayArray C.N.compare``() = validate (UInt32s.Collection.ArrayArray) C.N.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;-1;0;-1;-1; @@ -25513,7 +25513,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray C.N.less_than``() = + member __.``UInt32s.Collection.ArrayArray C.N.less_than``() = validate (UInt32s.Collection.ArrayArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; @@ -25521,7 +25521,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray C.N.less_or_equal``() = + member __.``UInt32s.Collection.ArrayArray C.N.less_or_equal``() = validate (UInt32s.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; @@ -25529,7 +25529,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray C.N.greater_than``() = + member __.``UInt32s.Collection.ArrayArray C.N.greater_than``() = validate (UInt32s.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; @@ -25537,7 +25537,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray C.N.greater_or_equal``() = + member __.``UInt32s.Collection.ArrayArray C.N.greater_or_equal``() = validate (UInt32s.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; @@ -25545,7 +25545,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ListArray C.I.equals``() = + member __.``UInt32s.Collection.ListArray C.I.equals``() = validate (UInt32s.Collection.ListArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25553,7 +25553,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ListArray C.I.equal``() = + member __.``UInt32s.Collection.ListArray C.I.equal``() = validate (UInt32s.Collection.ListArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25561,7 +25561,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ListArray C.I.not_equal``() = + member __.``UInt32s.Collection.ListArray C.I.not_equal``() = validate (UInt32s.Collection.ListArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -25569,7 +25569,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ListArray C.I.compare``() = + member __.``UInt32s.Collection.ListArray C.I.compare``() = validate (UInt32s.Collection.ListArray) C.I.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; 1;-1;1;1;0;1;-1;1;1;-1;1;-1;1;-1;-1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -25577,7 +25577,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ListArray C.I.less_than``() = + member __.``UInt32s.Collection.ListArray C.I.less_than``() = validate (UInt32s.Collection.ListArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; @@ -25585,7 +25585,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ListArray C.I.less_or_equal``() = + member __.``UInt32s.Collection.ListArray C.I.less_or_equal``() = validate (UInt32s.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; @@ -25593,7 +25593,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ListArray C.I.greater_than``() = + member __.``UInt32s.Collection.ListArray C.I.greater_than``() = validate (UInt32s.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; @@ -25601,7 +25601,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ListArray C.I.greater_or_equal``() = + member __.``UInt32s.Collection.ListArray C.I.greater_or_equal``() = validate (UInt32s.Collection.ListArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; @@ -25609,7 +25609,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ListArray C.N.equals``() = + member __.``UInt32s.Collection.ListArray C.N.equals``() = validate (UInt32s.Collection.ListArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25617,7 +25617,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ListArray C.N.equal``() = + member __.``UInt32s.Collection.ListArray C.N.equal``() = validate (UInt32s.Collection.ListArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25625,7 +25625,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ListArray C.N.not_equal``() = + member __.``UInt32s.Collection.ListArray C.N.not_equal``() = validate (UInt32s.Collection.ListArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -25633,7 +25633,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ListArray C.N.compare``() = + member __.``UInt32s.Collection.ListArray C.N.compare``() = validate (UInt32s.Collection.ListArray) C.N.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; 1;-1;1;1;0;1;-1;1;1;-1;1;-1;1;-1;-1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -25641,7 +25641,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ListArray C.N.less_than``() = + member __.``UInt32s.Collection.ListArray C.N.less_than``() = validate (UInt32s.Collection.ListArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; @@ -25649,7 +25649,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ListArray C.N.less_or_equal``() = + member __.``UInt32s.Collection.ListArray C.N.less_or_equal``() = validate (UInt32s.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; @@ -25657,7 +25657,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ListArray C.N.greater_than``() = + member __.``UInt32s.Collection.ListArray C.N.greater_than``() = validate (UInt32s.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; @@ -25665,7 +25665,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ListArray C.N.greater_or_equal``() = + member __.``UInt32s.Collection.ListArray C.N.greater_or_equal``() = validate (UInt32s.Collection.ListArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; @@ -25673,7 +25673,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25681,7 +25681,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25689,7 +25689,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -25697,7 +25697,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -25705,7 +25705,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; @@ -25713,7 +25713,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; @@ -25721,7 +25721,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; @@ -25729,7 +25729,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; @@ -25737,7 +25737,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25745,7 +25745,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25753,7 +25753,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -25761,7 +25761,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -25769,7 +25769,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; @@ -25777,7 +25777,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; @@ -25785,7 +25785,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; @@ -25793,7 +25793,7 @@ type GeneratedTests () = |] [] - member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; @@ -25801,157 +25801,157 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.Array E.I.equals``() = + member __.``NullableUInt32s.Collection.Array E.I.equals``() = validate (NullableUInt32s.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.Array E.I.equal``() = + member __.``NullableUInt32s.Collection.Array E.I.equal``() = validate (NullableUInt32s.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.Array E.I.not_equal``() = + member __.``NullableUInt32s.Collection.Array E.I.not_equal``() = validate (NullableUInt32s.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt32s.Collection.Array E.N.equals``() = + member __.``NullableUInt32s.Collection.Array E.N.equals``() = validate (NullableUInt32s.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.Array E.N.equal``() = + member __.``NullableUInt32s.Collection.Array E.N.equal``() = validate (NullableUInt32s.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.Array E.N.not_equal``() = + member __.``NullableUInt32s.Collection.Array E.N.not_equal``() = validate (NullableUInt32s.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt32s.Collection.OptionArray E.I.equals``() = + member __.``NullableUInt32s.Collection.OptionArray E.I.equals``() = validate (NullableUInt32s.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.OptionArray E.I.equal``() = + member __.``NullableUInt32s.Collection.OptionArray E.I.equal``() = validate (NullableUInt32s.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.OptionArray E.I.not_equal``() = + member __.``NullableUInt32s.Collection.OptionArray E.I.not_equal``() = validate (NullableUInt32s.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt32s.Collection.OptionArray E.N.equals``() = + member __.``NullableUInt32s.Collection.OptionArray E.N.equals``() = validate (NullableUInt32s.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.OptionArray E.N.equal``() = + member __.``NullableUInt32s.Collection.OptionArray E.N.equal``() = validate (NullableUInt32s.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.OptionArray E.N.not_equal``() = + member __.``NullableUInt32s.Collection.OptionArray E.N.not_equal``() = validate (NullableUInt32s.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt32s.Collection.RefArray E.I.equals``() = + member __.``NullableUInt32s.Collection.RefArray E.I.equals``() = validate (NullableUInt32s.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.RefArray E.I.equal``() = + member __.``NullableUInt32s.Collection.RefArray E.I.equal``() = validate (NullableUInt32s.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.RefArray E.I.not_equal``() = + member __.``NullableUInt32s.Collection.RefArray E.I.not_equal``() = validate (NullableUInt32s.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt32s.Collection.RefArray E.N.equals``() = + member __.``NullableUInt32s.Collection.RefArray E.N.equals``() = validate (NullableUInt32s.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.RefArray E.N.equal``() = + member __.``NullableUInt32s.Collection.RefArray E.N.equal``() = validate (NullableUInt32s.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.RefArray E.N.not_equal``() = + member __.``NullableUInt32s.Collection.RefArray E.N.not_equal``() = validate (NullableUInt32s.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt32s.Collection.RefWrapArray E.I.equals``() = + member __.``NullableUInt32s.Collection.RefWrapArray E.I.equals``() = validate (NullableUInt32s.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.RefWrapArray E.I.equal``() = + member __.``NullableUInt32s.Collection.RefWrapArray E.I.equal``() = validate (NullableUInt32s.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.RefWrapArray E.I.not_equal``() = + member __.``NullableUInt32s.Collection.RefWrapArray E.I.not_equal``() = validate (NullableUInt32s.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt32s.Collection.RefWrapArray E.N.equals``() = + member __.``NullableUInt32s.Collection.RefWrapArray E.N.equals``() = validate (NullableUInt32s.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.RefWrapArray E.N.equal``() = + member __.``NullableUInt32s.Collection.RefWrapArray E.N.equal``() = validate (NullableUInt32s.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.RefWrapArray E.N.not_equal``() = + member __.``NullableUInt32s.Collection.RefWrapArray E.N.not_equal``() = validate (NullableUInt32s.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt32s.Collection.UnionArray E.I.equals``() = + member __.``NullableUInt32s.Collection.UnionArray E.I.equals``() = validate (NullableUInt32s.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -26001,7 +26001,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.UnionArray E.I.equal``() = + member __.``NullableUInt32s.Collection.UnionArray E.I.equal``() = validate (NullableUInt32s.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -26051,7 +26051,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.UnionArray E.I.not_equal``() = + member __.``NullableUInt32s.Collection.UnionArray E.I.not_equal``() = validate (NullableUInt32s.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -26101,7 +26101,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.UnionArray E.N.equals``() = + member __.``NullableUInt32s.Collection.UnionArray E.N.equals``() = validate (NullableUInt32s.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -26151,7 +26151,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.UnionArray E.N.equal``() = + member __.``NullableUInt32s.Collection.UnionArray E.N.equal``() = validate (NullableUInt32s.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -26201,7 +26201,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.UnionArray E.N.not_equal``() = + member __.``NullableUInt32s.Collection.UnionArray E.N.not_equal``() = validate (NullableUInt32s.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -26251,7 +26251,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.UnionWrapArray E.I.equals``() = + member __.``NullableUInt32s.Collection.UnionWrapArray E.I.equals``() = validate (NullableUInt32s.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -26301,7 +26301,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.UnionWrapArray E.I.equal``() = + member __.``NullableUInt32s.Collection.UnionWrapArray E.I.equal``() = validate (NullableUInt32s.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -26351,7 +26351,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.UnionWrapArray E.I.not_equal``() = + member __.``NullableUInt32s.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableUInt32s.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -26401,7 +26401,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.UnionWrapArray E.N.equals``() = + member __.``NullableUInt32s.Collection.UnionWrapArray E.N.equals``() = validate (NullableUInt32s.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -26451,7 +26451,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.UnionWrapArray E.N.equal``() = + member __.``NullableUInt32s.Collection.UnionWrapArray E.N.equal``() = validate (NullableUInt32s.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -26501,7 +26501,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.UnionWrapArray E.N.not_equal``() = + member __.``NullableUInt32s.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableUInt32s.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -26551,79 +26551,79 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.ValueArray E.I.equals``() = + member __.``NullableUInt32s.Collection.ValueArray E.I.equals``() = validate (NullableUInt32s.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.ValueArray E.I.equal``() = + member __.``NullableUInt32s.Collection.ValueArray E.I.equal``() = validate (NullableUInt32s.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.ValueArray E.I.not_equal``() = + member __.``NullableUInt32s.Collection.ValueArray E.I.not_equal``() = validate (NullableUInt32s.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt32s.Collection.ValueArray E.N.equals``() = + member __.``NullableUInt32s.Collection.ValueArray E.N.equals``() = validate (NullableUInt32s.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.ValueArray E.N.equal``() = + member __.``NullableUInt32s.Collection.ValueArray E.N.equal``() = validate (NullableUInt32s.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.ValueArray E.N.not_equal``() = + member __.``NullableUInt32s.Collection.ValueArray E.N.not_equal``() = validate (NullableUInt32s.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt32s.Collection.ValueWrapArray E.I.equals``() = + member __.``NullableUInt32s.Collection.ValueWrapArray E.I.equals``() = validate (NullableUInt32s.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.ValueWrapArray E.I.equal``() = + member __.``NullableUInt32s.Collection.ValueWrapArray E.I.equal``() = validate (NullableUInt32s.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.ValueWrapArray E.I.not_equal``() = + member __.``NullableUInt32s.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableUInt32s.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt32s.Collection.ValueWrapArray E.N.equals``() = + member __.``NullableUInt32s.Collection.ValueWrapArray E.N.equals``() = validate (NullableUInt32s.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.ValueWrapArray E.N.equal``() = + member __.``NullableUInt32s.Collection.ValueWrapArray E.N.equal``() = validate (NullableUInt32s.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt32s.Collection.ValueWrapArray E.N.not_equal``() = + member __.``NullableUInt32s.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableUInt32s.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt32s.Collection.ArrayArray E.I.equals``() = + member __.``NullableUInt32s.Collection.ArrayArray E.I.equals``() = validate (NullableUInt32s.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -26632,7 +26632,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.ArrayArray E.I.equal``() = + member __.``NullableUInt32s.Collection.ArrayArray E.I.equal``() = validate (NullableUInt32s.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -26641,7 +26641,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.ArrayArray E.I.not_equal``() = + member __.``NullableUInt32s.Collection.ArrayArray E.I.not_equal``() = validate (NullableUInt32s.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -26650,7 +26650,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.ArrayArray E.N.equals``() = + member __.``NullableUInt32s.Collection.ArrayArray E.N.equals``() = validate (NullableUInt32s.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -26659,7 +26659,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.ArrayArray E.N.equal``() = + member __.``NullableUInt32s.Collection.ArrayArray E.N.equal``() = validate (NullableUInt32s.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -26668,7 +26668,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.ArrayArray E.N.not_equal``() = + member __.``NullableUInt32s.Collection.ArrayArray E.N.not_equal``() = validate (NullableUInt32s.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -26677,7 +26677,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.ListArray E.I.equals``() = + member __.``NullableUInt32s.Collection.ListArray E.I.equals``() = validate (NullableUInt32s.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -26686,7 +26686,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.ListArray E.I.equal``() = + member __.``NullableUInt32s.Collection.ListArray E.I.equal``() = validate (NullableUInt32s.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -26695,7 +26695,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.ListArray E.I.not_equal``() = + member __.``NullableUInt32s.Collection.ListArray E.I.not_equal``() = validate (NullableUInt32s.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -26704,7 +26704,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.ListArray E.N.equals``() = + member __.``NullableUInt32s.Collection.ListArray E.N.equals``() = validate (NullableUInt32s.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -26713,7 +26713,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.ListArray E.N.equal``() = + member __.``NullableUInt32s.Collection.ListArray E.N.equal``() = validate (NullableUInt32s.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -26722,7 +26722,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt32s.Collection.ListArray E.N.not_equal``() = + member __.``NullableUInt32s.Collection.ListArray E.N.not_equal``() = validate (NullableUInt32s.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -26731,391 +26731,391 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.Array C.I.equals``() = + member __.``UInt64s.Collection.Array C.I.equals``() = validate (UInt64s.Collection.Array) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.Array C.I.equal``() = + member __.``UInt64s.Collection.Array C.I.equal``() = validate (UInt64s.Collection.Array) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.Array C.I.not_equal``() = + member __.``UInt64s.Collection.Array C.I.not_equal``() = validate (UInt64s.Collection.Array) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``UInt64s.Collection.Array C.I.compare``() = + member __.``UInt64s.Collection.Array C.I.compare``() = validate (UInt64s.Collection.Array) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``UInt64s.Collection.Array C.I.less_than``() = + member __.``UInt64s.Collection.Array C.I.less_than``() = validate (UInt64s.Collection.Array) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``UInt64s.Collection.Array C.I.less_or_equal``() = + member __.``UInt64s.Collection.Array C.I.less_or_equal``() = validate (UInt64s.Collection.Array) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``UInt64s.Collection.Array C.I.greater_than``() = + member __.``UInt64s.Collection.Array C.I.greater_than``() = validate (UInt64s.Collection.Array) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``UInt64s.Collection.Array C.I.greater_or_equal``() = + member __.``UInt64s.Collection.Array C.I.greater_or_equal``() = validate (UInt64s.Collection.Array) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``UInt64s.Collection.Array C.N.equals``() = + member __.``UInt64s.Collection.Array C.N.equals``() = validate (UInt64s.Collection.Array) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.Array C.N.equal``() = + member __.``UInt64s.Collection.Array C.N.equal``() = validate (UInt64s.Collection.Array) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.Array C.N.not_equal``() = + member __.``UInt64s.Collection.Array C.N.not_equal``() = validate (UInt64s.Collection.Array) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``UInt64s.Collection.Array C.N.compare``() = + member __.``UInt64s.Collection.Array C.N.compare``() = validate (UInt64s.Collection.Array) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``UInt64s.Collection.Array C.N.less_than``() = + member __.``UInt64s.Collection.Array C.N.less_than``() = validate (UInt64s.Collection.Array) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``UInt64s.Collection.Array C.N.less_or_equal``() = + member __.``UInt64s.Collection.Array C.N.less_or_equal``() = validate (UInt64s.Collection.Array) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``UInt64s.Collection.Array C.N.greater_than``() = + member __.``UInt64s.Collection.Array C.N.greater_than``() = validate (UInt64s.Collection.Array) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``UInt64s.Collection.Array C.N.greater_or_equal``() = + member __.``UInt64s.Collection.Array C.N.greater_or_equal``() = validate (UInt64s.Collection.Array) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``UInt64s.Collection.OptionArray C.I.equals``() = + member __.``UInt64s.Collection.OptionArray C.I.equals``() = validate (UInt64s.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.OptionArray C.I.equal``() = + member __.``UInt64s.Collection.OptionArray C.I.equal``() = validate (UInt64s.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.OptionArray C.I.not_equal``() = + member __.``UInt64s.Collection.OptionArray C.I.not_equal``() = validate (UInt64s.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``UInt64s.Collection.OptionArray C.I.compare``() = + member __.``UInt64s.Collection.OptionArray C.I.compare``() = validate (UInt64s.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;0;-1;-1;1;1;0;1;1;1;1;0;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 |] [] - member _.``UInt64s.Collection.OptionArray C.I.less_than``() = + member __.``UInt64s.Collection.OptionArray C.I.less_than``() = validate (UInt64s.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member _.``UInt64s.Collection.OptionArray C.I.less_or_equal``() = + member __.``UInt64s.Collection.OptionArray C.I.less_or_equal``() = validate (UInt64s.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member _.``UInt64s.Collection.OptionArray C.I.greater_than``() = + member __.``UInt64s.Collection.OptionArray C.I.greater_than``() = validate (UInt64s.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member _.``UInt64s.Collection.OptionArray C.I.greater_or_equal``() = + member __.``UInt64s.Collection.OptionArray C.I.greater_or_equal``() = validate (UInt64s.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member _.``UInt64s.Collection.OptionArray C.N.equals``() = + member __.``UInt64s.Collection.OptionArray C.N.equals``() = validate (UInt64s.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.OptionArray C.N.equal``() = + member __.``UInt64s.Collection.OptionArray C.N.equal``() = validate (UInt64s.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.OptionArray C.N.not_equal``() = + member __.``UInt64s.Collection.OptionArray C.N.not_equal``() = validate (UInt64s.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``UInt64s.Collection.OptionArray C.N.compare``() = + member __.``UInt64s.Collection.OptionArray C.N.compare``() = validate (UInt64s.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;0;-1;-1;1;1;0;1;1;1;1;0;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 |] [] - member _.``UInt64s.Collection.OptionArray C.N.less_than``() = + member __.``UInt64s.Collection.OptionArray C.N.less_than``() = validate (UInt64s.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member _.``UInt64s.Collection.OptionArray C.N.less_or_equal``() = + member __.``UInt64s.Collection.OptionArray C.N.less_or_equal``() = validate (UInt64s.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member _.``UInt64s.Collection.OptionArray C.N.greater_than``() = + member __.``UInt64s.Collection.OptionArray C.N.greater_than``() = validate (UInt64s.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member _.``UInt64s.Collection.OptionArray C.N.greater_or_equal``() = + member __.``UInt64s.Collection.OptionArray C.N.greater_or_equal``() = validate (UInt64s.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member _.``UInt64s.Collection.RefArray C.I.equals``() = + member __.``UInt64s.Collection.RefArray C.I.equals``() = validate (UInt64s.Collection.RefArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.RefArray C.I.equal``() = + member __.``UInt64s.Collection.RefArray C.I.equal``() = validate (UInt64s.Collection.RefArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.RefArray C.I.not_equal``() = + member __.``UInt64s.Collection.RefArray C.I.not_equal``() = validate (UInt64s.Collection.RefArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``UInt64s.Collection.RefArray C.I.compare``() = + member __.``UInt64s.Collection.RefArray C.I.compare``() = validate (UInt64s.Collection.RefArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``UInt64s.Collection.RefArray C.I.less_than``() = + member __.``UInt64s.Collection.RefArray C.I.less_than``() = validate (UInt64s.Collection.RefArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``UInt64s.Collection.RefArray C.I.less_or_equal``() = + member __.``UInt64s.Collection.RefArray C.I.less_or_equal``() = validate (UInt64s.Collection.RefArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``UInt64s.Collection.RefArray C.I.greater_than``() = + member __.``UInt64s.Collection.RefArray C.I.greater_than``() = validate (UInt64s.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``UInt64s.Collection.RefArray C.I.greater_or_equal``() = + member __.``UInt64s.Collection.RefArray C.I.greater_or_equal``() = validate (UInt64s.Collection.RefArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``UInt64s.Collection.RefArray C.N.equals``() = + member __.``UInt64s.Collection.RefArray C.N.equals``() = validate (UInt64s.Collection.RefArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.RefArray C.N.equal``() = + member __.``UInt64s.Collection.RefArray C.N.equal``() = validate (UInt64s.Collection.RefArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.RefArray C.N.not_equal``() = + member __.``UInt64s.Collection.RefArray C.N.not_equal``() = validate (UInt64s.Collection.RefArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``UInt64s.Collection.RefArray C.N.compare``() = + member __.``UInt64s.Collection.RefArray C.N.compare``() = validate (UInt64s.Collection.RefArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``UInt64s.Collection.RefArray C.N.less_than``() = + member __.``UInt64s.Collection.RefArray C.N.less_than``() = validate (UInt64s.Collection.RefArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``UInt64s.Collection.RefArray C.N.less_or_equal``() = + member __.``UInt64s.Collection.RefArray C.N.less_or_equal``() = validate (UInt64s.Collection.RefArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``UInt64s.Collection.RefArray C.N.greater_than``() = + member __.``UInt64s.Collection.RefArray C.N.greater_than``() = validate (UInt64s.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``UInt64s.Collection.RefArray C.N.greater_or_equal``() = + member __.``UInt64s.Collection.RefArray C.N.greater_or_equal``() = validate (UInt64s.Collection.RefArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``UInt64s.Collection.RefWrapArray C.I.equals``() = + member __.``UInt64s.Collection.RefWrapArray C.I.equals``() = validate (UInt64s.Collection.RefWrapArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.RefWrapArray C.I.equal``() = + member __.``UInt64s.Collection.RefWrapArray C.I.equal``() = validate (UInt64s.Collection.RefWrapArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.RefWrapArray C.I.not_equal``() = + member __.``UInt64s.Collection.RefWrapArray C.I.not_equal``() = validate (UInt64s.Collection.RefWrapArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``UInt64s.Collection.RefWrapArray C.I.compare``() = + member __.``UInt64s.Collection.RefWrapArray C.I.compare``() = validate (UInt64s.Collection.RefWrapArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``UInt64s.Collection.RefWrapArray C.I.less_than``() = + member __.``UInt64s.Collection.RefWrapArray C.I.less_than``() = validate (UInt64s.Collection.RefWrapArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``UInt64s.Collection.RefWrapArray C.I.less_or_equal``() = + member __.``UInt64s.Collection.RefWrapArray C.I.less_or_equal``() = validate (UInt64s.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``UInt64s.Collection.RefWrapArray C.I.greater_than``() = + member __.``UInt64s.Collection.RefWrapArray C.I.greater_than``() = validate (UInt64s.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``UInt64s.Collection.RefWrapArray C.I.greater_or_equal``() = + member __.``UInt64s.Collection.RefWrapArray C.I.greater_or_equal``() = validate (UInt64s.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``UInt64s.Collection.RefWrapArray C.N.equals``() = + member __.``UInt64s.Collection.RefWrapArray C.N.equals``() = validate (UInt64s.Collection.RefWrapArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.RefWrapArray C.N.equal``() = + member __.``UInt64s.Collection.RefWrapArray C.N.equal``() = validate (UInt64s.Collection.RefWrapArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.RefWrapArray C.N.not_equal``() = + member __.``UInt64s.Collection.RefWrapArray C.N.not_equal``() = validate (UInt64s.Collection.RefWrapArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``UInt64s.Collection.RefWrapArray C.N.compare``() = + member __.``UInt64s.Collection.RefWrapArray C.N.compare``() = validate (UInt64s.Collection.RefWrapArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``UInt64s.Collection.RefWrapArray C.N.less_than``() = + member __.``UInt64s.Collection.RefWrapArray C.N.less_than``() = validate (UInt64s.Collection.RefWrapArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``UInt64s.Collection.RefWrapArray C.N.less_or_equal``() = + member __.``UInt64s.Collection.RefWrapArray C.N.less_or_equal``() = validate (UInt64s.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``UInt64s.Collection.RefWrapArray C.N.greater_than``() = + member __.``UInt64s.Collection.RefWrapArray C.N.greater_than``() = validate (UInt64s.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``UInt64s.Collection.RefWrapArray C.N.greater_or_equal``() = + member __.``UInt64s.Collection.RefWrapArray C.N.greater_or_equal``() = validate (UInt64s.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``UInt64s.Collection.UnionArray C.I.equals``() = + member __.``UInt64s.Collection.UnionArray C.I.equals``() = validate (UInt64s.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -27151,7 +27151,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionArray C.I.equal``() = + member __.``UInt64s.Collection.UnionArray C.I.equal``() = validate (UInt64s.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -27187,7 +27187,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionArray C.I.not_equal``() = + member __.``UInt64s.Collection.UnionArray C.I.not_equal``() = validate (UInt64s.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -27223,7 +27223,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionArray C.I.compare``() = + member __.``UInt64s.Collection.UnionArray C.I.compare``() = validate (UInt64s.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -27259,7 +27259,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionArray C.I.less_than``() = + member __.``UInt64s.Collection.UnionArray C.I.less_than``() = validate (UInt64s.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -27295,7 +27295,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionArray C.I.less_or_equal``() = + member __.``UInt64s.Collection.UnionArray C.I.less_or_equal``() = validate (UInt64s.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -27331,7 +27331,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionArray C.I.greater_than``() = + member __.``UInt64s.Collection.UnionArray C.I.greater_than``() = validate (UInt64s.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -27367,7 +27367,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionArray C.I.greater_or_equal``() = + member __.``UInt64s.Collection.UnionArray C.I.greater_or_equal``() = validate (UInt64s.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -27403,7 +27403,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionArray C.N.equals``() = + member __.``UInt64s.Collection.UnionArray C.N.equals``() = validate (UInt64s.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -27439,7 +27439,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionArray C.N.equal``() = + member __.``UInt64s.Collection.UnionArray C.N.equal``() = validate (UInt64s.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -27475,7 +27475,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionArray C.N.not_equal``() = + member __.``UInt64s.Collection.UnionArray C.N.not_equal``() = validate (UInt64s.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -27511,7 +27511,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionArray C.N.compare``() = + member __.``UInt64s.Collection.UnionArray C.N.compare``() = validate (UInt64s.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -27547,7 +27547,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionArray C.N.less_than``() = + member __.``UInt64s.Collection.UnionArray C.N.less_than``() = validate (UInt64s.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -27583,7 +27583,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionArray C.N.less_or_equal``() = + member __.``UInt64s.Collection.UnionArray C.N.less_or_equal``() = validate (UInt64s.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -27619,7 +27619,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionArray C.N.greater_than``() = + member __.``UInt64s.Collection.UnionArray C.N.greater_than``() = validate (UInt64s.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -27655,7 +27655,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionArray C.N.greater_or_equal``() = + member __.``UInt64s.Collection.UnionArray C.N.greater_or_equal``() = validate (UInt64s.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -27691,7 +27691,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionWrapArray C.I.equals``() = + member __.``UInt64s.Collection.UnionWrapArray C.I.equals``() = validate (UInt64s.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -27727,7 +27727,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionWrapArray C.I.equal``() = + member __.``UInt64s.Collection.UnionWrapArray C.I.equal``() = validate (UInt64s.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -27763,7 +27763,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionWrapArray C.I.not_equal``() = + member __.``UInt64s.Collection.UnionWrapArray C.I.not_equal``() = validate (UInt64s.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -27799,7 +27799,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionWrapArray C.I.compare``() = + member __.``UInt64s.Collection.UnionWrapArray C.I.compare``() = validate (UInt64s.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -27835,7 +27835,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionWrapArray C.I.less_than``() = + member __.``UInt64s.Collection.UnionWrapArray C.I.less_than``() = validate (UInt64s.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -27871,7 +27871,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionWrapArray C.I.less_or_equal``() = + member __.``UInt64s.Collection.UnionWrapArray C.I.less_or_equal``() = validate (UInt64s.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -27907,7 +27907,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionWrapArray C.I.greater_than``() = + member __.``UInt64s.Collection.UnionWrapArray C.I.greater_than``() = validate (UInt64s.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -27943,7 +27943,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionWrapArray C.I.greater_or_equal``() = + member __.``UInt64s.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (UInt64s.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -27979,7 +27979,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionWrapArray C.N.equals``() = + member __.``UInt64s.Collection.UnionWrapArray C.N.equals``() = validate (UInt64s.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -28015,7 +28015,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionWrapArray C.N.equal``() = + member __.``UInt64s.Collection.UnionWrapArray C.N.equal``() = validate (UInt64s.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -28051,7 +28051,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionWrapArray C.N.not_equal``() = + member __.``UInt64s.Collection.UnionWrapArray C.N.not_equal``() = validate (UInt64s.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -28087,7 +28087,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionWrapArray C.N.compare``() = + member __.``UInt64s.Collection.UnionWrapArray C.N.compare``() = validate (UInt64s.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -28123,7 +28123,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionWrapArray C.N.less_than``() = + member __.``UInt64s.Collection.UnionWrapArray C.N.less_than``() = validate (UInt64s.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -28159,7 +28159,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionWrapArray C.N.less_or_equal``() = + member __.``UInt64s.Collection.UnionWrapArray C.N.less_or_equal``() = validate (UInt64s.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -28195,7 +28195,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionWrapArray C.N.greater_than``() = + member __.``UInt64s.Collection.UnionWrapArray C.N.greater_than``() = validate (UInt64s.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -28231,7 +28231,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.UnionWrapArray C.N.greater_or_equal``() = + member __.``UInt64s.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (UInt64s.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -28267,199 +28267,199 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ValueArray C.I.equals``() = + member __.``UInt64s.Collection.ValueArray C.I.equals``() = validate (UInt64s.Collection.ValueArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.ValueArray C.I.equal``() = + member __.``UInt64s.Collection.ValueArray C.I.equal``() = validate (UInt64s.Collection.ValueArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.ValueArray C.I.not_equal``() = + member __.``UInt64s.Collection.ValueArray C.I.not_equal``() = validate (UInt64s.Collection.ValueArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``UInt64s.Collection.ValueArray C.I.compare``() = + member __.``UInt64s.Collection.ValueArray C.I.compare``() = validate (UInt64s.Collection.ValueArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``UInt64s.Collection.ValueArray C.I.less_than``() = + member __.``UInt64s.Collection.ValueArray C.I.less_than``() = validate (UInt64s.Collection.ValueArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``UInt64s.Collection.ValueArray C.I.less_or_equal``() = + member __.``UInt64s.Collection.ValueArray C.I.less_or_equal``() = validate (UInt64s.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``UInt64s.Collection.ValueArray C.I.greater_than``() = + member __.``UInt64s.Collection.ValueArray C.I.greater_than``() = validate (UInt64s.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``UInt64s.Collection.ValueArray C.I.greater_or_equal``() = + member __.``UInt64s.Collection.ValueArray C.I.greater_or_equal``() = validate (UInt64s.Collection.ValueArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``UInt64s.Collection.ValueArray C.N.equals``() = + member __.``UInt64s.Collection.ValueArray C.N.equals``() = validate (UInt64s.Collection.ValueArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.ValueArray C.N.equal``() = + member __.``UInt64s.Collection.ValueArray C.N.equal``() = validate (UInt64s.Collection.ValueArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.ValueArray C.N.not_equal``() = + member __.``UInt64s.Collection.ValueArray C.N.not_equal``() = validate (UInt64s.Collection.ValueArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``UInt64s.Collection.ValueArray C.N.compare``() = + member __.``UInt64s.Collection.ValueArray C.N.compare``() = validate (UInt64s.Collection.ValueArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``UInt64s.Collection.ValueArray C.N.less_than``() = + member __.``UInt64s.Collection.ValueArray C.N.less_than``() = validate (UInt64s.Collection.ValueArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``UInt64s.Collection.ValueArray C.N.less_or_equal``() = + member __.``UInt64s.Collection.ValueArray C.N.less_or_equal``() = validate (UInt64s.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``UInt64s.Collection.ValueArray C.N.greater_than``() = + member __.``UInt64s.Collection.ValueArray C.N.greater_than``() = validate (UInt64s.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``UInt64s.Collection.ValueArray C.N.greater_or_equal``() = + member __.``UInt64s.Collection.ValueArray C.N.greater_or_equal``() = validate (UInt64s.Collection.ValueArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``UInt64s.Collection.ValueWrapArray C.I.equals``() = + member __.``UInt64s.Collection.ValueWrapArray C.I.equals``() = validate (UInt64s.Collection.ValueWrapArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.ValueWrapArray C.I.equal``() = + member __.``UInt64s.Collection.ValueWrapArray C.I.equal``() = validate (UInt64s.Collection.ValueWrapArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.ValueWrapArray C.I.not_equal``() = + member __.``UInt64s.Collection.ValueWrapArray C.I.not_equal``() = validate (UInt64s.Collection.ValueWrapArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``UInt64s.Collection.ValueWrapArray C.I.compare``() = + member __.``UInt64s.Collection.ValueWrapArray C.I.compare``() = validate (UInt64s.Collection.ValueWrapArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``UInt64s.Collection.ValueWrapArray C.I.less_than``() = + member __.``UInt64s.Collection.ValueWrapArray C.I.less_than``() = validate (UInt64s.Collection.ValueWrapArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``UInt64s.Collection.ValueWrapArray C.I.less_or_equal``() = + member __.``UInt64s.Collection.ValueWrapArray C.I.less_or_equal``() = validate (UInt64s.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``UInt64s.Collection.ValueWrapArray C.I.greater_than``() = + member __.``UInt64s.Collection.ValueWrapArray C.I.greater_than``() = validate (UInt64s.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``UInt64s.Collection.ValueWrapArray C.I.greater_or_equal``() = + member __.``UInt64s.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (UInt64s.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``UInt64s.Collection.ValueWrapArray C.N.equals``() = + member __.``UInt64s.Collection.ValueWrapArray C.N.equals``() = validate (UInt64s.Collection.ValueWrapArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.ValueWrapArray C.N.equal``() = + member __.``UInt64s.Collection.ValueWrapArray C.N.equal``() = validate (UInt64s.Collection.ValueWrapArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``UInt64s.Collection.ValueWrapArray C.N.not_equal``() = + member __.``UInt64s.Collection.ValueWrapArray C.N.not_equal``() = validate (UInt64s.Collection.ValueWrapArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``UInt64s.Collection.ValueWrapArray C.N.compare``() = + member __.``UInt64s.Collection.ValueWrapArray C.N.compare``() = validate (UInt64s.Collection.ValueWrapArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``UInt64s.Collection.ValueWrapArray C.N.less_than``() = + member __.``UInt64s.Collection.ValueWrapArray C.N.less_than``() = validate (UInt64s.Collection.ValueWrapArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``UInt64s.Collection.ValueWrapArray C.N.less_or_equal``() = + member __.``UInt64s.Collection.ValueWrapArray C.N.less_or_equal``() = validate (UInt64s.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``UInt64s.Collection.ValueWrapArray C.N.greater_than``() = + member __.``UInt64s.Collection.ValueWrapArray C.N.greater_than``() = validate (UInt64s.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``UInt64s.Collection.ValueWrapArray C.N.greater_or_equal``() = + member __.``UInt64s.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (UInt64s.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``UInt64s.Collection.ArrayArray C.I.equals``() = + member __.``UInt64s.Collection.ArrayArray C.I.equals``() = validate (UInt64s.Collection.ArrayArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28467,7 +28467,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray C.I.equal``() = + member __.``UInt64s.Collection.ArrayArray C.I.equal``() = validate (UInt64s.Collection.ArrayArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28475,7 +28475,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray C.I.not_equal``() = + member __.``UInt64s.Collection.ArrayArray C.I.not_equal``() = validate (UInt64s.Collection.ArrayArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -28483,7 +28483,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray C.I.compare``() = + member __.``UInt64s.Collection.ArrayArray C.I.compare``() = validate (UInt64s.Collection.ArrayArray) C.I.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;-1;0;-1;-1; @@ -28491,7 +28491,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray C.I.less_than``() = + member __.``UInt64s.Collection.ArrayArray C.I.less_than``() = validate (UInt64s.Collection.ArrayArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; @@ -28499,7 +28499,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray C.I.less_or_equal``() = + member __.``UInt64s.Collection.ArrayArray C.I.less_or_equal``() = validate (UInt64s.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; @@ -28507,7 +28507,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray C.I.greater_than``() = + member __.``UInt64s.Collection.ArrayArray C.I.greater_than``() = validate (UInt64s.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; @@ -28515,7 +28515,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray C.I.greater_or_equal``() = + member __.``UInt64s.Collection.ArrayArray C.I.greater_or_equal``() = validate (UInt64s.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; @@ -28523,7 +28523,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray C.N.equals``() = + member __.``UInt64s.Collection.ArrayArray C.N.equals``() = validate (UInt64s.Collection.ArrayArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28531,7 +28531,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray C.N.equal``() = + member __.``UInt64s.Collection.ArrayArray C.N.equal``() = validate (UInt64s.Collection.ArrayArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28539,7 +28539,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray C.N.not_equal``() = + member __.``UInt64s.Collection.ArrayArray C.N.not_equal``() = validate (UInt64s.Collection.ArrayArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -28547,7 +28547,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray C.N.compare``() = + member __.``UInt64s.Collection.ArrayArray C.N.compare``() = validate (UInt64s.Collection.ArrayArray) C.N.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;-1;0;-1;-1; @@ -28555,7 +28555,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray C.N.less_than``() = + member __.``UInt64s.Collection.ArrayArray C.N.less_than``() = validate (UInt64s.Collection.ArrayArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; @@ -28563,7 +28563,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray C.N.less_or_equal``() = + member __.``UInt64s.Collection.ArrayArray C.N.less_or_equal``() = validate (UInt64s.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; @@ -28571,7 +28571,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray C.N.greater_than``() = + member __.``UInt64s.Collection.ArrayArray C.N.greater_than``() = validate (UInt64s.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; @@ -28579,7 +28579,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray C.N.greater_or_equal``() = + member __.``UInt64s.Collection.ArrayArray C.N.greater_or_equal``() = validate (UInt64s.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; @@ -28587,7 +28587,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ListArray C.I.equals``() = + member __.``UInt64s.Collection.ListArray C.I.equals``() = validate (UInt64s.Collection.ListArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28595,7 +28595,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ListArray C.I.equal``() = + member __.``UInt64s.Collection.ListArray C.I.equal``() = validate (UInt64s.Collection.ListArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28603,7 +28603,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ListArray C.I.not_equal``() = + member __.``UInt64s.Collection.ListArray C.I.not_equal``() = validate (UInt64s.Collection.ListArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -28611,7 +28611,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ListArray C.I.compare``() = + member __.``UInt64s.Collection.ListArray C.I.compare``() = validate (UInt64s.Collection.ListArray) C.I.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; 1;-1;1;1;0;1;-1;1;1;-1;1;-1;1;-1;-1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -28619,7 +28619,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ListArray C.I.less_than``() = + member __.``UInt64s.Collection.ListArray C.I.less_than``() = validate (UInt64s.Collection.ListArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; @@ -28627,7 +28627,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ListArray C.I.less_or_equal``() = + member __.``UInt64s.Collection.ListArray C.I.less_or_equal``() = validate (UInt64s.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; @@ -28635,7 +28635,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ListArray C.I.greater_than``() = + member __.``UInt64s.Collection.ListArray C.I.greater_than``() = validate (UInt64s.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; @@ -28643,7 +28643,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ListArray C.I.greater_or_equal``() = + member __.``UInt64s.Collection.ListArray C.I.greater_or_equal``() = validate (UInt64s.Collection.ListArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; @@ -28651,7 +28651,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ListArray C.N.equals``() = + member __.``UInt64s.Collection.ListArray C.N.equals``() = validate (UInt64s.Collection.ListArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28659,7 +28659,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ListArray C.N.equal``() = + member __.``UInt64s.Collection.ListArray C.N.equal``() = validate (UInt64s.Collection.ListArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28667,7 +28667,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ListArray C.N.not_equal``() = + member __.``UInt64s.Collection.ListArray C.N.not_equal``() = validate (UInt64s.Collection.ListArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -28675,7 +28675,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ListArray C.N.compare``() = + member __.``UInt64s.Collection.ListArray C.N.compare``() = validate (UInt64s.Collection.ListArray) C.N.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; 1;-1;1;1;0;1;-1;1;1;-1;1;-1;1;-1;-1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -28683,7 +28683,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ListArray C.N.less_than``() = + member __.``UInt64s.Collection.ListArray C.N.less_than``() = validate (UInt64s.Collection.ListArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; @@ -28691,7 +28691,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ListArray C.N.less_or_equal``() = + member __.``UInt64s.Collection.ListArray C.N.less_or_equal``() = validate (UInt64s.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; @@ -28699,7 +28699,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ListArray C.N.greater_than``() = + member __.``UInt64s.Collection.ListArray C.N.greater_than``() = validate (UInt64s.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; @@ -28707,7 +28707,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ListArray C.N.greater_or_equal``() = + member __.``UInt64s.Collection.ListArray C.N.greater_or_equal``() = validate (UInt64s.Collection.ListArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; @@ -28715,7 +28715,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28723,7 +28723,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28731,7 +28731,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -28739,7 +28739,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -28747,7 +28747,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; @@ -28755,7 +28755,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; @@ -28763,7 +28763,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; @@ -28771,7 +28771,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; @@ -28779,7 +28779,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28787,7 +28787,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28795,7 +28795,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -28803,7 +28803,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -28811,7 +28811,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; @@ -28819,7 +28819,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; @@ -28827,7 +28827,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; @@ -28835,7 +28835,7 @@ type GeneratedTests () = |] [] - member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; @@ -28843,157 +28843,157 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.Array E.I.equals``() = + member __.``NullableUInt64s.Collection.Array E.I.equals``() = validate (NullableUInt64s.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.Array E.I.equal``() = + member __.``NullableUInt64s.Collection.Array E.I.equal``() = validate (NullableUInt64s.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.Array E.I.not_equal``() = + member __.``NullableUInt64s.Collection.Array E.I.not_equal``() = validate (NullableUInt64s.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt64s.Collection.Array E.N.equals``() = + member __.``NullableUInt64s.Collection.Array E.N.equals``() = validate (NullableUInt64s.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.Array E.N.equal``() = + member __.``NullableUInt64s.Collection.Array E.N.equal``() = validate (NullableUInt64s.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.Array E.N.not_equal``() = + member __.``NullableUInt64s.Collection.Array E.N.not_equal``() = validate (NullableUInt64s.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt64s.Collection.OptionArray E.I.equals``() = + member __.``NullableUInt64s.Collection.OptionArray E.I.equals``() = validate (NullableUInt64s.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.OptionArray E.I.equal``() = + member __.``NullableUInt64s.Collection.OptionArray E.I.equal``() = validate (NullableUInt64s.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.OptionArray E.I.not_equal``() = + member __.``NullableUInt64s.Collection.OptionArray E.I.not_equal``() = validate (NullableUInt64s.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt64s.Collection.OptionArray E.N.equals``() = + member __.``NullableUInt64s.Collection.OptionArray E.N.equals``() = validate (NullableUInt64s.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.OptionArray E.N.equal``() = + member __.``NullableUInt64s.Collection.OptionArray E.N.equal``() = validate (NullableUInt64s.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.OptionArray E.N.not_equal``() = + member __.``NullableUInt64s.Collection.OptionArray E.N.not_equal``() = validate (NullableUInt64s.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt64s.Collection.RefArray E.I.equals``() = + member __.``NullableUInt64s.Collection.RefArray E.I.equals``() = validate (NullableUInt64s.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.RefArray E.I.equal``() = + member __.``NullableUInt64s.Collection.RefArray E.I.equal``() = validate (NullableUInt64s.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.RefArray E.I.not_equal``() = + member __.``NullableUInt64s.Collection.RefArray E.I.not_equal``() = validate (NullableUInt64s.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt64s.Collection.RefArray E.N.equals``() = + member __.``NullableUInt64s.Collection.RefArray E.N.equals``() = validate (NullableUInt64s.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.RefArray E.N.equal``() = + member __.``NullableUInt64s.Collection.RefArray E.N.equal``() = validate (NullableUInt64s.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.RefArray E.N.not_equal``() = + member __.``NullableUInt64s.Collection.RefArray E.N.not_equal``() = validate (NullableUInt64s.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt64s.Collection.RefWrapArray E.I.equals``() = + member __.``NullableUInt64s.Collection.RefWrapArray E.I.equals``() = validate (NullableUInt64s.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.RefWrapArray E.I.equal``() = + member __.``NullableUInt64s.Collection.RefWrapArray E.I.equal``() = validate (NullableUInt64s.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.RefWrapArray E.I.not_equal``() = + member __.``NullableUInt64s.Collection.RefWrapArray E.I.not_equal``() = validate (NullableUInt64s.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt64s.Collection.RefWrapArray E.N.equals``() = + member __.``NullableUInt64s.Collection.RefWrapArray E.N.equals``() = validate (NullableUInt64s.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.RefWrapArray E.N.equal``() = + member __.``NullableUInt64s.Collection.RefWrapArray E.N.equal``() = validate (NullableUInt64s.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.RefWrapArray E.N.not_equal``() = + member __.``NullableUInt64s.Collection.RefWrapArray E.N.not_equal``() = validate (NullableUInt64s.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt64s.Collection.UnionArray E.I.equals``() = + member __.``NullableUInt64s.Collection.UnionArray E.I.equals``() = validate (NullableUInt64s.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -29043,7 +29043,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.UnionArray E.I.equal``() = + member __.``NullableUInt64s.Collection.UnionArray E.I.equal``() = validate (NullableUInt64s.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -29093,7 +29093,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.UnionArray E.I.not_equal``() = + member __.``NullableUInt64s.Collection.UnionArray E.I.not_equal``() = validate (NullableUInt64s.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -29143,7 +29143,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.UnionArray E.N.equals``() = + member __.``NullableUInt64s.Collection.UnionArray E.N.equals``() = validate (NullableUInt64s.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -29193,7 +29193,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.UnionArray E.N.equal``() = + member __.``NullableUInt64s.Collection.UnionArray E.N.equal``() = validate (NullableUInt64s.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -29243,7 +29243,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.UnionArray E.N.not_equal``() = + member __.``NullableUInt64s.Collection.UnionArray E.N.not_equal``() = validate (NullableUInt64s.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -29293,7 +29293,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.UnionWrapArray E.I.equals``() = + member __.``NullableUInt64s.Collection.UnionWrapArray E.I.equals``() = validate (NullableUInt64s.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -29343,7 +29343,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.UnionWrapArray E.I.equal``() = + member __.``NullableUInt64s.Collection.UnionWrapArray E.I.equal``() = validate (NullableUInt64s.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -29393,7 +29393,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.UnionWrapArray E.I.not_equal``() = + member __.``NullableUInt64s.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableUInt64s.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -29443,7 +29443,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.UnionWrapArray E.N.equals``() = + member __.``NullableUInt64s.Collection.UnionWrapArray E.N.equals``() = validate (NullableUInt64s.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -29493,7 +29493,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.UnionWrapArray E.N.equal``() = + member __.``NullableUInt64s.Collection.UnionWrapArray E.N.equal``() = validate (NullableUInt64s.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -29543,7 +29543,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.UnionWrapArray E.N.not_equal``() = + member __.``NullableUInt64s.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableUInt64s.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -29593,79 +29593,79 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.ValueArray E.I.equals``() = + member __.``NullableUInt64s.Collection.ValueArray E.I.equals``() = validate (NullableUInt64s.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.ValueArray E.I.equal``() = + member __.``NullableUInt64s.Collection.ValueArray E.I.equal``() = validate (NullableUInt64s.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.ValueArray E.I.not_equal``() = + member __.``NullableUInt64s.Collection.ValueArray E.I.not_equal``() = validate (NullableUInt64s.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt64s.Collection.ValueArray E.N.equals``() = + member __.``NullableUInt64s.Collection.ValueArray E.N.equals``() = validate (NullableUInt64s.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.ValueArray E.N.equal``() = + member __.``NullableUInt64s.Collection.ValueArray E.N.equal``() = validate (NullableUInt64s.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.ValueArray E.N.not_equal``() = + member __.``NullableUInt64s.Collection.ValueArray E.N.not_equal``() = validate (NullableUInt64s.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt64s.Collection.ValueWrapArray E.I.equals``() = + member __.``NullableUInt64s.Collection.ValueWrapArray E.I.equals``() = validate (NullableUInt64s.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.ValueWrapArray E.I.equal``() = + member __.``NullableUInt64s.Collection.ValueWrapArray E.I.equal``() = validate (NullableUInt64s.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.ValueWrapArray E.I.not_equal``() = + member __.``NullableUInt64s.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableUInt64s.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt64s.Collection.ValueWrapArray E.N.equals``() = + member __.``NullableUInt64s.Collection.ValueWrapArray E.N.equals``() = validate (NullableUInt64s.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.ValueWrapArray E.N.equal``() = + member __.``NullableUInt64s.Collection.ValueWrapArray E.N.equal``() = validate (NullableUInt64s.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableUInt64s.Collection.ValueWrapArray E.N.not_equal``() = + member __.``NullableUInt64s.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableUInt64s.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableUInt64s.Collection.ArrayArray E.I.equals``() = + member __.``NullableUInt64s.Collection.ArrayArray E.I.equals``() = validate (NullableUInt64s.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -29674,7 +29674,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.ArrayArray E.I.equal``() = + member __.``NullableUInt64s.Collection.ArrayArray E.I.equal``() = validate (NullableUInt64s.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -29683,7 +29683,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.ArrayArray E.I.not_equal``() = + member __.``NullableUInt64s.Collection.ArrayArray E.I.not_equal``() = validate (NullableUInt64s.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -29692,7 +29692,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.ArrayArray E.N.equals``() = + member __.``NullableUInt64s.Collection.ArrayArray E.N.equals``() = validate (NullableUInt64s.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -29701,7 +29701,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.ArrayArray E.N.equal``() = + member __.``NullableUInt64s.Collection.ArrayArray E.N.equal``() = validate (NullableUInt64s.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -29710,7 +29710,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.ArrayArray E.N.not_equal``() = + member __.``NullableUInt64s.Collection.ArrayArray E.N.not_equal``() = validate (NullableUInt64s.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -29719,7 +29719,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.ListArray E.I.equals``() = + member __.``NullableUInt64s.Collection.ListArray E.I.equals``() = validate (NullableUInt64s.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -29728,7 +29728,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.ListArray E.I.equal``() = + member __.``NullableUInt64s.Collection.ListArray E.I.equal``() = validate (NullableUInt64s.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -29737,7 +29737,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.ListArray E.I.not_equal``() = + member __.``NullableUInt64s.Collection.ListArray E.I.not_equal``() = validate (NullableUInt64s.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -29746,7 +29746,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.ListArray E.N.equals``() = + member __.``NullableUInt64s.Collection.ListArray E.N.equals``() = validate (NullableUInt64s.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -29755,7 +29755,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.ListArray E.N.equal``() = + member __.``NullableUInt64s.Collection.ListArray E.N.equal``() = validate (NullableUInt64s.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -29764,7 +29764,7 @@ type GeneratedTests () = |] [] - member _.``NullableUInt64s.Collection.ListArray E.N.not_equal``() = + member __.``NullableUInt64s.Collection.ListArray E.N.not_equal``() = validate (NullableUInt64s.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -29773,391 +29773,391 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.Array C.I.equals``() = + member __.``UNativeInts.Collection.Array C.I.equals``() = validate (UNativeInts.Collection.Array) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.Array C.I.equal``() = + member __.``UNativeInts.Collection.Array C.I.equal``() = validate (UNativeInts.Collection.Array) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.Array C.I.not_equal``() = + member __.``UNativeInts.Collection.Array C.I.not_equal``() = validate (UNativeInts.Collection.Array) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``UNativeInts.Collection.Array C.I.compare``() = + member __.``UNativeInts.Collection.Array C.I.compare``() = validate (UNativeInts.Collection.Array) C.I.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member _.``UNativeInts.Collection.Array C.I.less_than``() = + member __.``UNativeInts.Collection.Array C.I.less_than``() = validate (UNativeInts.Collection.Array) C.I.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member _.``UNativeInts.Collection.Array C.I.less_or_equal``() = + member __.``UNativeInts.Collection.Array C.I.less_or_equal``() = validate (UNativeInts.Collection.Array) C.I.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member _.``UNativeInts.Collection.Array C.I.greater_than``() = + member __.``UNativeInts.Collection.Array C.I.greater_than``() = validate (UNativeInts.Collection.Array) C.I.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member _.``UNativeInts.Collection.Array C.I.greater_or_equal``() = + member __.``UNativeInts.Collection.Array C.I.greater_or_equal``() = validate (UNativeInts.Collection.Array) C.I.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member _.``UNativeInts.Collection.Array C.N.equals``() = + member __.``UNativeInts.Collection.Array C.N.equals``() = validate (UNativeInts.Collection.Array) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.Array C.N.equal``() = + member __.``UNativeInts.Collection.Array C.N.equal``() = validate (UNativeInts.Collection.Array) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.Array C.N.not_equal``() = + member __.``UNativeInts.Collection.Array C.N.not_equal``() = validate (UNativeInts.Collection.Array) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``UNativeInts.Collection.Array C.N.compare``() = + member __.``UNativeInts.Collection.Array C.N.compare``() = validate (UNativeInts.Collection.Array) C.N.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member _.``UNativeInts.Collection.Array C.N.less_than``() = + member __.``UNativeInts.Collection.Array C.N.less_than``() = validate (UNativeInts.Collection.Array) C.N.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member _.``UNativeInts.Collection.Array C.N.less_or_equal``() = + member __.``UNativeInts.Collection.Array C.N.less_or_equal``() = validate (UNativeInts.Collection.Array) C.N.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member _.``UNativeInts.Collection.Array C.N.greater_than``() = + member __.``UNativeInts.Collection.Array C.N.greater_than``() = validate (UNativeInts.Collection.Array) C.N.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member _.``UNativeInts.Collection.Array C.N.greater_or_equal``() = + member __.``UNativeInts.Collection.Array C.N.greater_or_equal``() = validate (UNativeInts.Collection.Array) C.N.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member _.``UNativeInts.Collection.OptionArray C.I.equals``() = + member __.``UNativeInts.Collection.OptionArray C.I.equals``() = validate (UNativeInts.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``UNativeInts.Collection.OptionArray C.I.equal``() = + member __.``UNativeInts.Collection.OptionArray C.I.equal``() = validate (UNativeInts.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``UNativeInts.Collection.OptionArray C.I.not_equal``() = + member __.``UNativeInts.Collection.OptionArray C.I.not_equal``() = validate (UNativeInts.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``UNativeInts.Collection.OptionArray C.I.compare``() = + member __.``UNativeInts.Collection.OptionArray C.I.compare``() = validate (UNativeInts.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member _.``UNativeInts.Collection.OptionArray C.I.less_than``() = + member __.``UNativeInts.Collection.OptionArray C.I.less_than``() = validate (UNativeInts.Collection.OptionArray) C.I.less_than [| 0;1;1;1;0;0;1;1;0;0;0;1;0;0;0;0 |] [] - member _.``UNativeInts.Collection.OptionArray C.I.less_or_equal``() = + member __.``UNativeInts.Collection.OptionArray C.I.less_or_equal``() = validate (UNativeInts.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;0;1;1;1;0;0;1;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.OptionArray C.I.greater_than``() = + member __.``UNativeInts.Collection.OptionArray C.I.greater_than``() = validate (UNativeInts.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;1;1;0;0;1;1;1;0 |] [] - member _.``UNativeInts.Collection.OptionArray C.I.greater_or_equal``() = + member __.``UNativeInts.Collection.OptionArray C.I.greater_or_equal``() = validate (UNativeInts.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;1;1;0;0;1;1;1;0;1;1;1;1 |] [] - member _.``UNativeInts.Collection.OptionArray C.N.equals``() = + member __.``UNativeInts.Collection.OptionArray C.N.equals``() = validate (UNativeInts.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``UNativeInts.Collection.OptionArray C.N.equal``() = + member __.``UNativeInts.Collection.OptionArray C.N.equal``() = validate (UNativeInts.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``UNativeInts.Collection.OptionArray C.N.not_equal``() = + member __.``UNativeInts.Collection.OptionArray C.N.not_equal``() = validate (UNativeInts.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``UNativeInts.Collection.OptionArray C.N.compare``() = + member __.``UNativeInts.Collection.OptionArray C.N.compare``() = validate (UNativeInts.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member _.``UNativeInts.Collection.OptionArray C.N.less_than``() = + member __.``UNativeInts.Collection.OptionArray C.N.less_than``() = validate (UNativeInts.Collection.OptionArray) C.N.less_than [| 0;1;1;1;0;0;1;1;0;0;0;1;0;0;0;0 |] [] - member _.``UNativeInts.Collection.OptionArray C.N.less_or_equal``() = + member __.``UNativeInts.Collection.OptionArray C.N.less_or_equal``() = validate (UNativeInts.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;0;1;1;1;0;0;1;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.OptionArray C.N.greater_than``() = + member __.``UNativeInts.Collection.OptionArray C.N.greater_than``() = validate (UNativeInts.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;1;1;0;0;1;1;1;0 |] [] - member _.``UNativeInts.Collection.OptionArray C.N.greater_or_equal``() = + member __.``UNativeInts.Collection.OptionArray C.N.greater_or_equal``() = validate (UNativeInts.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;1;1;0;0;1;1;1;0;1;1;1;1 |] [] - member _.``UNativeInts.Collection.RefArray C.I.equals``() = + member __.``UNativeInts.Collection.RefArray C.I.equals``() = validate (UNativeInts.Collection.RefArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.RefArray C.I.equal``() = + member __.``UNativeInts.Collection.RefArray C.I.equal``() = validate (UNativeInts.Collection.RefArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.RefArray C.I.not_equal``() = + member __.``UNativeInts.Collection.RefArray C.I.not_equal``() = validate (UNativeInts.Collection.RefArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``UNativeInts.Collection.RefArray C.I.compare``() = + member __.``UNativeInts.Collection.RefArray C.I.compare``() = validate (UNativeInts.Collection.RefArray) C.I.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member _.``UNativeInts.Collection.RefArray C.I.less_than``() = + member __.``UNativeInts.Collection.RefArray C.I.less_than``() = validate (UNativeInts.Collection.RefArray) C.I.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member _.``UNativeInts.Collection.RefArray C.I.less_or_equal``() = + member __.``UNativeInts.Collection.RefArray C.I.less_or_equal``() = validate (UNativeInts.Collection.RefArray) C.I.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member _.``UNativeInts.Collection.RefArray C.I.greater_than``() = + member __.``UNativeInts.Collection.RefArray C.I.greater_than``() = validate (UNativeInts.Collection.RefArray) C.I.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member _.``UNativeInts.Collection.RefArray C.I.greater_or_equal``() = + member __.``UNativeInts.Collection.RefArray C.I.greater_or_equal``() = validate (UNativeInts.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member _.``UNativeInts.Collection.RefArray C.N.equals``() = + member __.``UNativeInts.Collection.RefArray C.N.equals``() = validate (UNativeInts.Collection.RefArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.RefArray C.N.equal``() = + member __.``UNativeInts.Collection.RefArray C.N.equal``() = validate (UNativeInts.Collection.RefArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.RefArray C.N.not_equal``() = + member __.``UNativeInts.Collection.RefArray C.N.not_equal``() = validate (UNativeInts.Collection.RefArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``UNativeInts.Collection.RefArray C.N.compare``() = + member __.``UNativeInts.Collection.RefArray C.N.compare``() = validate (UNativeInts.Collection.RefArray) C.N.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member _.``UNativeInts.Collection.RefArray C.N.less_than``() = + member __.``UNativeInts.Collection.RefArray C.N.less_than``() = validate (UNativeInts.Collection.RefArray) C.N.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member _.``UNativeInts.Collection.RefArray C.N.less_or_equal``() = + member __.``UNativeInts.Collection.RefArray C.N.less_or_equal``() = validate (UNativeInts.Collection.RefArray) C.N.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member _.``UNativeInts.Collection.RefArray C.N.greater_than``() = + member __.``UNativeInts.Collection.RefArray C.N.greater_than``() = validate (UNativeInts.Collection.RefArray) C.N.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member _.``UNativeInts.Collection.RefArray C.N.greater_or_equal``() = + member __.``UNativeInts.Collection.RefArray C.N.greater_or_equal``() = validate (UNativeInts.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member _.``UNativeInts.Collection.RefWrapArray C.I.equals``() = + member __.``UNativeInts.Collection.RefWrapArray C.I.equals``() = validate (UNativeInts.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.RefWrapArray C.I.equal``() = + member __.``UNativeInts.Collection.RefWrapArray C.I.equal``() = validate (UNativeInts.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.RefWrapArray C.I.not_equal``() = + member __.``UNativeInts.Collection.RefWrapArray C.I.not_equal``() = validate (UNativeInts.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``UNativeInts.Collection.RefWrapArray C.I.compare``() = + member __.``UNativeInts.Collection.RefWrapArray C.I.compare``() = validate (UNativeInts.Collection.RefWrapArray) C.I.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member _.``UNativeInts.Collection.RefWrapArray C.I.less_than``() = + member __.``UNativeInts.Collection.RefWrapArray C.I.less_than``() = validate (UNativeInts.Collection.RefWrapArray) C.I.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member _.``UNativeInts.Collection.RefWrapArray C.I.less_or_equal``() = + member __.``UNativeInts.Collection.RefWrapArray C.I.less_or_equal``() = validate (UNativeInts.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member _.``UNativeInts.Collection.RefWrapArray C.I.greater_than``() = + member __.``UNativeInts.Collection.RefWrapArray C.I.greater_than``() = validate (UNativeInts.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member _.``UNativeInts.Collection.RefWrapArray C.I.greater_or_equal``() = + member __.``UNativeInts.Collection.RefWrapArray C.I.greater_or_equal``() = validate (UNativeInts.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member _.``UNativeInts.Collection.RefWrapArray C.N.equals``() = + member __.``UNativeInts.Collection.RefWrapArray C.N.equals``() = validate (UNativeInts.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.RefWrapArray C.N.equal``() = + member __.``UNativeInts.Collection.RefWrapArray C.N.equal``() = validate (UNativeInts.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.RefWrapArray C.N.not_equal``() = + member __.``UNativeInts.Collection.RefWrapArray C.N.not_equal``() = validate (UNativeInts.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``UNativeInts.Collection.RefWrapArray C.N.compare``() = + member __.``UNativeInts.Collection.RefWrapArray C.N.compare``() = validate (UNativeInts.Collection.RefWrapArray) C.N.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member _.``UNativeInts.Collection.RefWrapArray C.N.less_than``() = + member __.``UNativeInts.Collection.RefWrapArray C.N.less_than``() = validate (UNativeInts.Collection.RefWrapArray) C.N.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member _.``UNativeInts.Collection.RefWrapArray C.N.less_or_equal``() = + member __.``UNativeInts.Collection.RefWrapArray C.N.less_or_equal``() = validate (UNativeInts.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member _.``UNativeInts.Collection.RefWrapArray C.N.greater_than``() = + member __.``UNativeInts.Collection.RefWrapArray C.N.greater_than``() = validate (UNativeInts.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member _.``UNativeInts.Collection.RefWrapArray C.N.greater_or_equal``() = + member __.``UNativeInts.Collection.RefWrapArray C.N.greater_or_equal``() = validate (UNativeInts.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member _.``UNativeInts.Collection.UnionArray C.I.equals``() = + member __.``UNativeInts.Collection.UnionArray C.I.equals``() = validate (UNativeInts.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -30174,7 +30174,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionArray C.I.equal``() = + member __.``UNativeInts.Collection.UnionArray C.I.equal``() = validate (UNativeInts.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -30191,7 +30191,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionArray C.I.not_equal``() = + member __.``UNativeInts.Collection.UnionArray C.I.not_equal``() = validate (UNativeInts.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -30208,7 +30208,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionArray C.I.compare``() = + member __.``UNativeInts.Collection.UnionArray C.I.compare``() = validate (UNativeInts.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -30225,7 +30225,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionArray C.I.less_than``() = + member __.``UNativeInts.Collection.UnionArray C.I.less_than``() = validate (UNativeInts.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -30242,7 +30242,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionArray C.I.less_or_equal``() = + member __.``UNativeInts.Collection.UnionArray C.I.less_or_equal``() = validate (UNativeInts.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -30259,7 +30259,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionArray C.I.greater_than``() = + member __.``UNativeInts.Collection.UnionArray C.I.greater_than``() = validate (UNativeInts.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -30276,7 +30276,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionArray C.I.greater_or_equal``() = + member __.``UNativeInts.Collection.UnionArray C.I.greater_or_equal``() = validate (UNativeInts.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -30293,7 +30293,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionArray C.N.equals``() = + member __.``UNativeInts.Collection.UnionArray C.N.equals``() = validate (UNativeInts.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -30310,7 +30310,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionArray C.N.equal``() = + member __.``UNativeInts.Collection.UnionArray C.N.equal``() = validate (UNativeInts.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -30327,7 +30327,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionArray C.N.not_equal``() = + member __.``UNativeInts.Collection.UnionArray C.N.not_equal``() = validate (UNativeInts.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -30344,7 +30344,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionArray C.N.compare``() = + member __.``UNativeInts.Collection.UnionArray C.N.compare``() = validate (UNativeInts.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -30361,7 +30361,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionArray C.N.less_than``() = + member __.``UNativeInts.Collection.UnionArray C.N.less_than``() = validate (UNativeInts.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -30378,7 +30378,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionArray C.N.less_or_equal``() = + member __.``UNativeInts.Collection.UnionArray C.N.less_or_equal``() = validate (UNativeInts.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -30395,7 +30395,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionArray C.N.greater_than``() = + member __.``UNativeInts.Collection.UnionArray C.N.greater_than``() = validate (UNativeInts.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -30412,7 +30412,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionArray C.N.greater_or_equal``() = + member __.``UNativeInts.Collection.UnionArray C.N.greater_or_equal``() = validate (UNativeInts.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -30429,7 +30429,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionWrapArray C.I.equals``() = + member __.``UNativeInts.Collection.UnionWrapArray C.I.equals``() = validate (UNativeInts.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -30446,7 +30446,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionWrapArray C.I.equal``() = + member __.``UNativeInts.Collection.UnionWrapArray C.I.equal``() = validate (UNativeInts.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -30463,7 +30463,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionWrapArray C.I.not_equal``() = + member __.``UNativeInts.Collection.UnionWrapArray C.I.not_equal``() = validate (UNativeInts.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -30480,7 +30480,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionWrapArray C.I.compare``() = + member __.``UNativeInts.Collection.UnionWrapArray C.I.compare``() = validate (UNativeInts.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -30497,7 +30497,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionWrapArray C.I.less_than``() = + member __.``UNativeInts.Collection.UnionWrapArray C.I.less_than``() = validate (UNativeInts.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -30514,7 +30514,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionWrapArray C.I.less_or_equal``() = + member __.``UNativeInts.Collection.UnionWrapArray C.I.less_or_equal``() = validate (UNativeInts.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -30531,7 +30531,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionWrapArray C.I.greater_than``() = + member __.``UNativeInts.Collection.UnionWrapArray C.I.greater_than``() = validate (UNativeInts.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -30548,7 +30548,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionWrapArray C.I.greater_or_equal``() = + member __.``UNativeInts.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (UNativeInts.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -30565,7 +30565,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionWrapArray C.N.equals``() = + member __.``UNativeInts.Collection.UnionWrapArray C.N.equals``() = validate (UNativeInts.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -30582,7 +30582,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionWrapArray C.N.equal``() = + member __.``UNativeInts.Collection.UnionWrapArray C.N.equal``() = validate (UNativeInts.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -30599,7 +30599,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionWrapArray C.N.not_equal``() = + member __.``UNativeInts.Collection.UnionWrapArray C.N.not_equal``() = validate (UNativeInts.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -30616,7 +30616,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionWrapArray C.N.compare``() = + member __.``UNativeInts.Collection.UnionWrapArray C.N.compare``() = validate (UNativeInts.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -30633,7 +30633,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionWrapArray C.N.less_than``() = + member __.``UNativeInts.Collection.UnionWrapArray C.N.less_than``() = validate (UNativeInts.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -30650,7 +30650,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionWrapArray C.N.less_or_equal``() = + member __.``UNativeInts.Collection.UnionWrapArray C.N.less_or_equal``() = validate (UNativeInts.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -30667,7 +30667,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionWrapArray C.N.greater_than``() = + member __.``UNativeInts.Collection.UnionWrapArray C.N.greater_than``() = validate (UNativeInts.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -30684,7 +30684,7 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.UnionWrapArray C.N.greater_or_equal``() = + member __.``UNativeInts.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (UNativeInts.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -30701,631 +30701,631 @@ type GeneratedTests () = |] [] - member _.``UNativeInts.Collection.ValueArray C.I.equals``() = + member __.``UNativeInts.Collection.ValueArray C.I.equals``() = validate (UNativeInts.Collection.ValueArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ValueArray C.I.equal``() = + member __.``UNativeInts.Collection.ValueArray C.I.equal``() = validate (UNativeInts.Collection.ValueArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ValueArray C.I.not_equal``() = + member __.``UNativeInts.Collection.ValueArray C.I.not_equal``() = validate (UNativeInts.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``UNativeInts.Collection.ValueArray C.I.compare``() = + member __.``UNativeInts.Collection.ValueArray C.I.compare``() = validate (UNativeInts.Collection.ValueArray) C.I.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member _.``UNativeInts.Collection.ValueArray C.I.less_than``() = + member __.``UNativeInts.Collection.ValueArray C.I.less_than``() = validate (UNativeInts.Collection.ValueArray) C.I.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member _.``UNativeInts.Collection.ValueArray C.I.less_or_equal``() = + member __.``UNativeInts.Collection.ValueArray C.I.less_or_equal``() = validate (UNativeInts.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member _.``UNativeInts.Collection.ValueArray C.I.greater_than``() = + member __.``UNativeInts.Collection.ValueArray C.I.greater_than``() = validate (UNativeInts.Collection.ValueArray) C.I.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member _.``UNativeInts.Collection.ValueArray C.I.greater_or_equal``() = + member __.``UNativeInts.Collection.ValueArray C.I.greater_or_equal``() = validate (UNativeInts.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member _.``UNativeInts.Collection.ValueArray C.N.equals``() = + member __.``UNativeInts.Collection.ValueArray C.N.equals``() = validate (UNativeInts.Collection.ValueArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ValueArray C.N.equal``() = + member __.``UNativeInts.Collection.ValueArray C.N.equal``() = validate (UNativeInts.Collection.ValueArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ValueArray C.N.not_equal``() = + member __.``UNativeInts.Collection.ValueArray C.N.not_equal``() = validate (UNativeInts.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``UNativeInts.Collection.ValueArray C.N.compare``() = + member __.``UNativeInts.Collection.ValueArray C.N.compare``() = validate (UNativeInts.Collection.ValueArray) C.N.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member _.``UNativeInts.Collection.ValueArray C.N.less_than``() = + member __.``UNativeInts.Collection.ValueArray C.N.less_than``() = validate (UNativeInts.Collection.ValueArray) C.N.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member _.``UNativeInts.Collection.ValueArray C.N.less_or_equal``() = + member __.``UNativeInts.Collection.ValueArray C.N.less_or_equal``() = validate (UNativeInts.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member _.``UNativeInts.Collection.ValueArray C.N.greater_than``() = + member __.``UNativeInts.Collection.ValueArray C.N.greater_than``() = validate (UNativeInts.Collection.ValueArray) C.N.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member _.``UNativeInts.Collection.ValueArray C.N.greater_or_equal``() = + member __.``UNativeInts.Collection.ValueArray C.N.greater_or_equal``() = validate (UNativeInts.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member _.``UNativeInts.Collection.ValueWrapArray C.I.equals``() = + member __.``UNativeInts.Collection.ValueWrapArray C.I.equals``() = validate (UNativeInts.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ValueWrapArray C.I.equal``() = + member __.``UNativeInts.Collection.ValueWrapArray C.I.equal``() = validate (UNativeInts.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ValueWrapArray C.I.not_equal``() = + member __.``UNativeInts.Collection.ValueWrapArray C.I.not_equal``() = validate (UNativeInts.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``UNativeInts.Collection.ValueWrapArray C.I.compare``() = + member __.``UNativeInts.Collection.ValueWrapArray C.I.compare``() = validate (UNativeInts.Collection.ValueWrapArray) C.I.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member _.``UNativeInts.Collection.ValueWrapArray C.I.less_than``() = + member __.``UNativeInts.Collection.ValueWrapArray C.I.less_than``() = validate (UNativeInts.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member _.``UNativeInts.Collection.ValueWrapArray C.I.less_or_equal``() = + member __.``UNativeInts.Collection.ValueWrapArray C.I.less_or_equal``() = validate (UNativeInts.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member _.``UNativeInts.Collection.ValueWrapArray C.I.greater_than``() = + member __.``UNativeInts.Collection.ValueWrapArray C.I.greater_than``() = validate (UNativeInts.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member _.``UNativeInts.Collection.ValueWrapArray C.I.greater_or_equal``() = + member __.``UNativeInts.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (UNativeInts.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member _.``UNativeInts.Collection.ValueWrapArray C.N.equals``() = + member __.``UNativeInts.Collection.ValueWrapArray C.N.equals``() = validate (UNativeInts.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ValueWrapArray C.N.equal``() = + member __.``UNativeInts.Collection.ValueWrapArray C.N.equal``() = validate (UNativeInts.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ValueWrapArray C.N.not_equal``() = + member __.``UNativeInts.Collection.ValueWrapArray C.N.not_equal``() = validate (UNativeInts.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``UNativeInts.Collection.ValueWrapArray C.N.compare``() = + member __.``UNativeInts.Collection.ValueWrapArray C.N.compare``() = validate (UNativeInts.Collection.ValueWrapArray) C.N.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member _.``UNativeInts.Collection.ValueWrapArray C.N.less_than``() = + member __.``UNativeInts.Collection.ValueWrapArray C.N.less_than``() = validate (UNativeInts.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member _.``UNativeInts.Collection.ValueWrapArray C.N.less_or_equal``() = + member __.``UNativeInts.Collection.ValueWrapArray C.N.less_or_equal``() = validate (UNativeInts.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member _.``UNativeInts.Collection.ValueWrapArray C.N.greater_than``() = + member __.``UNativeInts.Collection.ValueWrapArray C.N.greater_than``() = validate (UNativeInts.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member _.``UNativeInts.Collection.ValueWrapArray C.N.greater_or_equal``() = + member __.``UNativeInts.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (UNativeInts.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member _.``UNativeInts.Collection.ArrayArray C.I.equals``() = + member __.``UNativeInts.Collection.ArrayArray C.I.equals``() = validate (UNativeInts.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ArrayArray C.I.equal``() = + member __.``UNativeInts.Collection.ArrayArray C.I.equal``() = validate (UNativeInts.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ArrayArray C.I.not_equal``() = + member __.``UNativeInts.Collection.ArrayArray C.I.not_equal``() = validate (UNativeInts.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``UNativeInts.Collection.ArrayArray C.I.compare``() = + member __.``UNativeInts.Collection.ArrayArray C.I.compare``() = validate (UNativeInts.Collection.ArrayArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;-1;-1;-1;1;1;1;0;-1;-1;1;1;1;1;0;-1;1;1;1;1;1;0 |] [] - member _.``UNativeInts.Collection.ArrayArray C.I.less_than``() = + member __.``UNativeInts.Collection.ArrayArray C.I.less_than``() = validate (UNativeInts.Collection.ArrayArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member _.``UNativeInts.Collection.ArrayArray C.I.less_or_equal``() = + member __.``UNativeInts.Collection.ArrayArray C.I.less_or_equal``() = validate (UNativeInts.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ArrayArray C.I.greater_than``() = + member __.``UNativeInts.Collection.ArrayArray C.I.greater_than``() = validate (UNativeInts.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member _.``UNativeInts.Collection.ArrayArray C.I.greater_or_equal``() = + member __.``UNativeInts.Collection.ArrayArray C.I.greater_or_equal``() = validate (UNativeInts.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member _.``UNativeInts.Collection.ArrayArray C.N.equals``() = + member __.``UNativeInts.Collection.ArrayArray C.N.equals``() = validate (UNativeInts.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ArrayArray C.N.equal``() = + member __.``UNativeInts.Collection.ArrayArray C.N.equal``() = validate (UNativeInts.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ArrayArray C.N.not_equal``() = + member __.``UNativeInts.Collection.ArrayArray C.N.not_equal``() = validate (UNativeInts.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``UNativeInts.Collection.ArrayArray C.N.compare``() = + member __.``UNativeInts.Collection.ArrayArray C.N.compare``() = validate (UNativeInts.Collection.ArrayArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;-1;-1;-1;1;1;1;0;-1;-1;1;1;1;1;0;-1;1;1;1;1;1;0 |] [] - member _.``UNativeInts.Collection.ArrayArray C.N.less_than``() = + member __.``UNativeInts.Collection.ArrayArray C.N.less_than``() = validate (UNativeInts.Collection.ArrayArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member _.``UNativeInts.Collection.ArrayArray C.N.less_or_equal``() = + member __.``UNativeInts.Collection.ArrayArray C.N.less_or_equal``() = validate (UNativeInts.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ArrayArray C.N.greater_than``() = + member __.``UNativeInts.Collection.ArrayArray C.N.greater_than``() = validate (UNativeInts.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member _.``UNativeInts.Collection.ArrayArray C.N.greater_or_equal``() = + member __.``UNativeInts.Collection.ArrayArray C.N.greater_or_equal``() = validate (UNativeInts.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member _.``UNativeInts.Collection.ListArray C.I.equals``() = + member __.``UNativeInts.Collection.ListArray C.I.equals``() = validate (UNativeInts.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ListArray C.I.equal``() = + member __.``UNativeInts.Collection.ListArray C.I.equal``() = validate (UNativeInts.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ListArray C.I.not_equal``() = + member __.``UNativeInts.Collection.ListArray C.I.not_equal``() = validate (UNativeInts.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``UNativeInts.Collection.ListArray C.I.compare``() = + member __.``UNativeInts.Collection.ListArray C.I.compare``() = validate (UNativeInts.Collection.ListArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;-1;1;1;0;1;1;-1;1;-1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;1;1;1;0 |] [] - member _.``UNativeInts.Collection.ListArray C.I.less_than``() = + member __.``UNativeInts.Collection.ListArray C.I.less_than``() = validate (UNativeInts.Collection.ListArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0 |] [] - member _.``UNativeInts.Collection.ListArray C.I.less_or_equal``() = + member __.``UNativeInts.Collection.ListArray C.I.less_or_equal``() = validate (UNativeInts.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ListArray C.I.greater_than``() = + member __.``UNativeInts.Collection.ListArray C.I.greater_than``() = validate (UNativeInts.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;1;0;0;1;1;0;1;1;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0 |] [] - member _.``UNativeInts.Collection.ListArray C.I.greater_or_equal``() = + member __.``UNativeInts.Collection.ListArray C.I.greater_or_equal``() = validate (UNativeInts.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;1;1;1;1 |] [] - member _.``UNativeInts.Collection.ListArray C.N.equals``() = + member __.``UNativeInts.Collection.ListArray C.N.equals``() = validate (UNativeInts.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ListArray C.N.equal``() = + member __.``UNativeInts.Collection.ListArray C.N.equal``() = validate (UNativeInts.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ListArray C.N.not_equal``() = + member __.``UNativeInts.Collection.ListArray C.N.not_equal``() = validate (UNativeInts.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``UNativeInts.Collection.ListArray C.N.compare``() = + member __.``UNativeInts.Collection.ListArray C.N.compare``() = validate (UNativeInts.Collection.ListArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;-1;1;1;0;1;1;-1;1;-1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;1;1;1;0 |] [] - member _.``UNativeInts.Collection.ListArray C.N.less_than``() = + member __.``UNativeInts.Collection.ListArray C.N.less_than``() = validate (UNativeInts.Collection.ListArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0 |] [] - member _.``UNativeInts.Collection.ListArray C.N.less_or_equal``() = + member __.``UNativeInts.Collection.ListArray C.N.less_or_equal``() = validate (UNativeInts.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ListArray C.N.greater_than``() = + member __.``UNativeInts.Collection.ListArray C.N.greater_than``() = validate (UNativeInts.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;1;0;0;1;1;0;1;1;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0 |] [] - member _.``UNativeInts.Collection.ListArray C.N.greater_or_equal``() = + member __.``UNativeInts.Collection.ListArray C.N.greater_or_equal``() = validate (UNativeInts.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;1;1;1;1 |] [] - member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;1;1;1;0;1;1;1;1;-1;-1;0;-1;-1;1;1;-1;1;0;1;1;-1;-1;1;-1;0 |] [] - member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;0;1;0;0;0;0;0;0;0;0;1;1;0;1;1;0;0;1;0;0;0;0;1;1;0;1;0 |] [] - member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;0;1;0;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;0;0;1;1;0;1;1 |] [] - member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;1;0;1;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;1;1;0;0;1;0;0 |] [] - member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;1;1;1;1;1;1;1;1;0;0;1;0;0;1;1;0;1;1;1;1;0;0;1;0;1 |] [] - member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;1;1;1;0;1;1;1;1;-1;-1;0;-1;-1;1;1;-1;1;0;1;1;-1;-1;1;-1;0 |] [] - member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;0;1;0;0;0;0;0;0;0;0;1;1;0;1;1;0;0;1;0;0;0;0;1;1;0;1;0 |] [] - member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;0;1;0;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;0;0;1;1;0;1;1 |] [] - member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;1;0;1;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;1;1;0;0;1;0;0 |] [] - member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;1;1;1;1;1;1;1;1;0;0;1;0;0;1;1;0;1;1;1;1;0;0;1;0;1 |] [] - member _.``NullableUNativeInts.Collection.Array E.I.equals``() = + member __.``NullableUNativeInts.Collection.Array E.I.equals``() = validate (NullableUNativeInts.Collection.Array) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.Array E.I.equal``() = + member __.``NullableUNativeInts.Collection.Array E.I.equal``() = validate (NullableUNativeInts.Collection.Array) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.Array E.I.not_equal``() = + member __.``NullableUNativeInts.Collection.Array E.I.not_equal``() = validate (NullableUNativeInts.Collection.Array) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableUNativeInts.Collection.Array E.N.equals``() = + member __.``NullableUNativeInts.Collection.Array E.N.equals``() = validate (NullableUNativeInts.Collection.Array) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.Array E.N.equal``() = + member __.``NullableUNativeInts.Collection.Array E.N.equal``() = validate (NullableUNativeInts.Collection.Array) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.Array E.N.not_equal``() = + member __.``NullableUNativeInts.Collection.Array E.N.not_equal``() = validate (NullableUNativeInts.Collection.Array) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableUNativeInts.Collection.OptionArray E.I.equals``() = + member __.``NullableUNativeInts.Collection.OptionArray E.I.equals``() = validate (NullableUNativeInts.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.OptionArray E.I.equal``() = + member __.``NullableUNativeInts.Collection.OptionArray E.I.equal``() = validate (NullableUNativeInts.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.OptionArray E.I.not_equal``() = + member __.``NullableUNativeInts.Collection.OptionArray E.I.not_equal``() = validate (NullableUNativeInts.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``NullableUNativeInts.Collection.OptionArray E.N.equals``() = + member __.``NullableUNativeInts.Collection.OptionArray E.N.equals``() = validate (NullableUNativeInts.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.OptionArray E.N.equal``() = + member __.``NullableUNativeInts.Collection.OptionArray E.N.equal``() = validate (NullableUNativeInts.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.OptionArray E.N.not_equal``() = + member __.``NullableUNativeInts.Collection.OptionArray E.N.not_equal``() = validate (NullableUNativeInts.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``NullableUNativeInts.Collection.RefArray E.I.equals``() = + member __.``NullableUNativeInts.Collection.RefArray E.I.equals``() = validate (NullableUNativeInts.Collection.RefArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.RefArray E.I.equal``() = + member __.``NullableUNativeInts.Collection.RefArray E.I.equal``() = validate (NullableUNativeInts.Collection.RefArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.RefArray E.I.not_equal``() = + member __.``NullableUNativeInts.Collection.RefArray E.I.not_equal``() = validate (NullableUNativeInts.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableUNativeInts.Collection.RefArray E.N.equals``() = + member __.``NullableUNativeInts.Collection.RefArray E.N.equals``() = validate (NullableUNativeInts.Collection.RefArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.RefArray E.N.equal``() = + member __.``NullableUNativeInts.Collection.RefArray E.N.equal``() = validate (NullableUNativeInts.Collection.RefArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.RefArray E.N.not_equal``() = + member __.``NullableUNativeInts.Collection.RefArray E.N.not_equal``() = validate (NullableUNativeInts.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableUNativeInts.Collection.RefWrapArray E.I.equals``() = + member __.``NullableUNativeInts.Collection.RefWrapArray E.I.equals``() = validate (NullableUNativeInts.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.RefWrapArray E.I.equal``() = + member __.``NullableUNativeInts.Collection.RefWrapArray E.I.equal``() = validate (NullableUNativeInts.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.RefWrapArray E.I.not_equal``() = + member __.``NullableUNativeInts.Collection.RefWrapArray E.I.not_equal``() = validate (NullableUNativeInts.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableUNativeInts.Collection.RefWrapArray E.N.equals``() = + member __.``NullableUNativeInts.Collection.RefWrapArray E.N.equals``() = validate (NullableUNativeInts.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.RefWrapArray E.N.equal``() = + member __.``NullableUNativeInts.Collection.RefWrapArray E.N.equal``() = validate (NullableUNativeInts.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.RefWrapArray E.N.not_equal``() = + member __.``NullableUNativeInts.Collection.RefWrapArray E.N.not_equal``() = validate (NullableUNativeInts.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableUNativeInts.Collection.UnionArray E.I.equals``() = + member __.``NullableUNativeInts.Collection.UnionArray E.I.equals``() = validate (NullableUNativeInts.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -31350,7 +31350,7 @@ type GeneratedTests () = |] [] - member _.``NullableUNativeInts.Collection.UnionArray E.I.equal``() = + member __.``NullableUNativeInts.Collection.UnionArray E.I.equal``() = validate (NullableUNativeInts.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -31375,7 +31375,7 @@ type GeneratedTests () = |] [] - member _.``NullableUNativeInts.Collection.UnionArray E.I.not_equal``() = + member __.``NullableUNativeInts.Collection.UnionArray E.I.not_equal``() = validate (NullableUNativeInts.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -31400,7 +31400,7 @@ type GeneratedTests () = |] [] - member _.``NullableUNativeInts.Collection.UnionArray E.N.equals``() = + member __.``NullableUNativeInts.Collection.UnionArray E.N.equals``() = validate (NullableUNativeInts.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -31425,7 +31425,7 @@ type GeneratedTests () = |] [] - member _.``NullableUNativeInts.Collection.UnionArray E.N.equal``() = + member __.``NullableUNativeInts.Collection.UnionArray E.N.equal``() = validate (NullableUNativeInts.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -31450,7 +31450,7 @@ type GeneratedTests () = |] [] - member _.``NullableUNativeInts.Collection.UnionArray E.N.not_equal``() = + member __.``NullableUNativeInts.Collection.UnionArray E.N.not_equal``() = validate (NullableUNativeInts.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -31475,7 +31475,7 @@ type GeneratedTests () = |] [] - member _.``NullableUNativeInts.Collection.UnionWrapArray E.I.equals``() = + member __.``NullableUNativeInts.Collection.UnionWrapArray E.I.equals``() = validate (NullableUNativeInts.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -31500,7 +31500,7 @@ type GeneratedTests () = |] [] - member _.``NullableUNativeInts.Collection.UnionWrapArray E.I.equal``() = + member __.``NullableUNativeInts.Collection.UnionWrapArray E.I.equal``() = validate (NullableUNativeInts.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -31525,7 +31525,7 @@ type GeneratedTests () = |] [] - member _.``NullableUNativeInts.Collection.UnionWrapArray E.I.not_equal``() = + member __.``NullableUNativeInts.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableUNativeInts.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -31550,7 +31550,7 @@ type GeneratedTests () = |] [] - member _.``NullableUNativeInts.Collection.UnionWrapArray E.N.equals``() = + member __.``NullableUNativeInts.Collection.UnionWrapArray E.N.equals``() = validate (NullableUNativeInts.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -31575,7 +31575,7 @@ type GeneratedTests () = |] [] - member _.``NullableUNativeInts.Collection.UnionWrapArray E.N.equal``() = + member __.``NullableUNativeInts.Collection.UnionWrapArray E.N.equal``() = validate (NullableUNativeInts.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -31600,7 +31600,7 @@ type GeneratedTests () = |] [] - member _.``NullableUNativeInts.Collection.UnionWrapArray E.N.not_equal``() = + member __.``NullableUNativeInts.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableUNativeInts.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -31625,547 +31625,547 @@ type GeneratedTests () = |] [] - member _.``NullableUNativeInts.Collection.ValueArray E.I.equals``() = + member __.``NullableUNativeInts.Collection.ValueArray E.I.equals``() = validate (NullableUNativeInts.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.ValueArray E.I.equal``() = + member __.``NullableUNativeInts.Collection.ValueArray E.I.equal``() = validate (NullableUNativeInts.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.ValueArray E.I.not_equal``() = + member __.``NullableUNativeInts.Collection.ValueArray E.I.not_equal``() = validate (NullableUNativeInts.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableUNativeInts.Collection.ValueArray E.N.equals``() = + member __.``NullableUNativeInts.Collection.ValueArray E.N.equals``() = validate (NullableUNativeInts.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.ValueArray E.N.equal``() = + member __.``NullableUNativeInts.Collection.ValueArray E.N.equal``() = validate (NullableUNativeInts.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.ValueArray E.N.not_equal``() = + member __.``NullableUNativeInts.Collection.ValueArray E.N.not_equal``() = validate (NullableUNativeInts.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableUNativeInts.Collection.ValueWrapArray E.I.equals``() = + member __.``NullableUNativeInts.Collection.ValueWrapArray E.I.equals``() = validate (NullableUNativeInts.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.ValueWrapArray E.I.equal``() = + member __.``NullableUNativeInts.Collection.ValueWrapArray E.I.equal``() = validate (NullableUNativeInts.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.ValueWrapArray E.I.not_equal``() = + member __.``NullableUNativeInts.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableUNativeInts.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableUNativeInts.Collection.ValueWrapArray E.N.equals``() = + member __.``NullableUNativeInts.Collection.ValueWrapArray E.N.equals``() = validate (NullableUNativeInts.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.ValueWrapArray E.N.equal``() = + member __.``NullableUNativeInts.Collection.ValueWrapArray E.N.equal``() = validate (NullableUNativeInts.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.ValueWrapArray E.N.not_equal``() = + member __.``NullableUNativeInts.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableUNativeInts.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableUNativeInts.Collection.ArrayArray E.I.equals``() = + member __.``NullableUNativeInts.Collection.ArrayArray E.I.equals``() = validate (NullableUNativeInts.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.ArrayArray E.I.equal``() = + member __.``NullableUNativeInts.Collection.ArrayArray E.I.equal``() = validate (NullableUNativeInts.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.ArrayArray E.I.not_equal``() = + member __.``NullableUNativeInts.Collection.ArrayArray E.I.not_equal``() = validate (NullableUNativeInts.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member _.``NullableUNativeInts.Collection.ArrayArray E.N.equals``() = + member __.``NullableUNativeInts.Collection.ArrayArray E.N.equals``() = validate (NullableUNativeInts.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.ArrayArray E.N.equal``() = + member __.``NullableUNativeInts.Collection.ArrayArray E.N.equal``() = validate (NullableUNativeInts.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.ArrayArray E.N.not_equal``() = + member __.``NullableUNativeInts.Collection.ArrayArray E.N.not_equal``() = validate (NullableUNativeInts.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member _.``NullableUNativeInts.Collection.ListArray E.I.equals``() = + member __.``NullableUNativeInts.Collection.ListArray E.I.equals``() = validate (NullableUNativeInts.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.ListArray E.I.equal``() = + member __.``NullableUNativeInts.Collection.ListArray E.I.equal``() = validate (NullableUNativeInts.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.ListArray E.I.not_equal``() = + member __.``NullableUNativeInts.Collection.ListArray E.I.not_equal``() = validate (NullableUNativeInts.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member _.``NullableUNativeInts.Collection.ListArray E.N.equals``() = + member __.``NullableUNativeInts.Collection.ListArray E.N.equals``() = validate (NullableUNativeInts.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.ListArray E.N.equal``() = + member __.``NullableUNativeInts.Collection.ListArray E.N.equal``() = validate (NullableUNativeInts.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableUNativeInts.Collection.ListArray E.N.not_equal``() = + member __.``NullableUNativeInts.Collection.ListArray E.N.not_equal``() = validate (NullableUNativeInts.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member _.``Chars.Collection.Array C.I.equals``() = + member __.``Chars.Collection.Array C.I.equals``() = validate (Chars.Collection.Array) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.Array C.I.equal``() = + member __.``Chars.Collection.Array C.I.equal``() = validate (Chars.Collection.Array) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.Array C.I.not_equal``() = + member __.``Chars.Collection.Array C.I.not_equal``() = validate (Chars.Collection.Array) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Chars.Collection.Array C.I.compare``() = + member __.``Chars.Collection.Array C.I.compare``() = validate (Chars.Collection.Array) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Chars.Collection.Array C.I.less_than``() = + member __.``Chars.Collection.Array C.I.less_than``() = validate (Chars.Collection.Array) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Chars.Collection.Array C.I.less_or_equal``() = + member __.``Chars.Collection.Array C.I.less_or_equal``() = validate (Chars.Collection.Array) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Chars.Collection.Array C.I.greater_than``() = + member __.``Chars.Collection.Array C.I.greater_than``() = validate (Chars.Collection.Array) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Chars.Collection.Array C.I.greater_or_equal``() = + member __.``Chars.Collection.Array C.I.greater_or_equal``() = validate (Chars.Collection.Array) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Chars.Collection.Array C.N.equals``() = + member __.``Chars.Collection.Array C.N.equals``() = validate (Chars.Collection.Array) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.Array C.N.equal``() = + member __.``Chars.Collection.Array C.N.equal``() = validate (Chars.Collection.Array) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.Array C.N.not_equal``() = + member __.``Chars.Collection.Array C.N.not_equal``() = validate (Chars.Collection.Array) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Chars.Collection.Array C.N.compare``() = + member __.``Chars.Collection.Array C.N.compare``() = validate (Chars.Collection.Array) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Chars.Collection.Array C.N.less_than``() = + member __.``Chars.Collection.Array C.N.less_than``() = validate (Chars.Collection.Array) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Chars.Collection.Array C.N.less_or_equal``() = + member __.``Chars.Collection.Array C.N.less_or_equal``() = validate (Chars.Collection.Array) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Chars.Collection.Array C.N.greater_than``() = + member __.``Chars.Collection.Array C.N.greater_than``() = validate (Chars.Collection.Array) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Chars.Collection.Array C.N.greater_or_equal``() = + member __.``Chars.Collection.Array C.N.greater_or_equal``() = validate (Chars.Collection.Array) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Chars.Collection.OptionArray C.I.equals``() = + member __.``Chars.Collection.OptionArray C.I.equals``() = validate (Chars.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.OptionArray C.I.equal``() = + member __.``Chars.Collection.OptionArray C.I.equal``() = validate (Chars.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.OptionArray C.I.not_equal``() = + member __.``Chars.Collection.OptionArray C.I.not_equal``() = validate (Chars.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Chars.Collection.OptionArray C.I.compare``() = + member __.``Chars.Collection.OptionArray C.I.compare``() = validate (Chars.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-65535;-48;-49;-50;1;65535;0;65487;65486;65485;1;48;-65487;0;-1;-2;1;49;-65486;1;0;-1;1;50;-65485;2;1;0 |] [] - member _.``Chars.Collection.OptionArray C.I.less_than``() = + member __.``Chars.Collection.OptionArray C.I.less_than``() = validate (Chars.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member _.``Chars.Collection.OptionArray C.I.less_or_equal``() = + member __.``Chars.Collection.OptionArray C.I.less_or_equal``() = validate (Chars.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member _.``Chars.Collection.OptionArray C.I.greater_than``() = + member __.``Chars.Collection.OptionArray C.I.greater_than``() = validate (Chars.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member _.``Chars.Collection.OptionArray C.I.greater_or_equal``() = + member __.``Chars.Collection.OptionArray C.I.greater_or_equal``() = validate (Chars.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member _.``Chars.Collection.OptionArray C.N.equals``() = + member __.``Chars.Collection.OptionArray C.N.equals``() = validate (Chars.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.OptionArray C.N.equal``() = + member __.``Chars.Collection.OptionArray C.N.equal``() = validate (Chars.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.OptionArray C.N.not_equal``() = + member __.``Chars.Collection.OptionArray C.N.not_equal``() = validate (Chars.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Chars.Collection.OptionArray C.N.compare``() = + member __.``Chars.Collection.OptionArray C.N.compare``() = validate (Chars.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-65535;-48;-49;-50;1;65535;0;65487;65486;65485;1;48;-65487;0;-1;-2;1;49;-65486;1;0;-1;1;50;-65485;2;1;0 |] [] - member _.``Chars.Collection.OptionArray C.N.less_than``() = + member __.``Chars.Collection.OptionArray C.N.less_than``() = validate (Chars.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member _.``Chars.Collection.OptionArray C.N.less_or_equal``() = + member __.``Chars.Collection.OptionArray C.N.less_or_equal``() = validate (Chars.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member _.``Chars.Collection.OptionArray C.N.greater_than``() = + member __.``Chars.Collection.OptionArray C.N.greater_than``() = validate (Chars.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member _.``Chars.Collection.OptionArray C.N.greater_or_equal``() = + member __.``Chars.Collection.OptionArray C.N.greater_or_equal``() = validate (Chars.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member _.``Chars.Collection.RefArray C.I.equals``() = + member __.``Chars.Collection.RefArray C.I.equals``() = validate (Chars.Collection.RefArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.RefArray C.I.equal``() = + member __.``Chars.Collection.RefArray C.I.equal``() = validate (Chars.Collection.RefArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.RefArray C.I.not_equal``() = + member __.``Chars.Collection.RefArray C.I.not_equal``() = validate (Chars.Collection.RefArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Chars.Collection.RefArray C.I.compare``() = + member __.``Chars.Collection.RefArray C.I.compare``() = validate (Chars.Collection.RefArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Chars.Collection.RefArray C.I.less_than``() = + member __.``Chars.Collection.RefArray C.I.less_than``() = validate (Chars.Collection.RefArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Chars.Collection.RefArray C.I.less_or_equal``() = + member __.``Chars.Collection.RefArray C.I.less_or_equal``() = validate (Chars.Collection.RefArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Chars.Collection.RefArray C.I.greater_than``() = + member __.``Chars.Collection.RefArray C.I.greater_than``() = validate (Chars.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Chars.Collection.RefArray C.I.greater_or_equal``() = + member __.``Chars.Collection.RefArray C.I.greater_or_equal``() = validate (Chars.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Chars.Collection.RefArray C.N.equals``() = + member __.``Chars.Collection.RefArray C.N.equals``() = validate (Chars.Collection.RefArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.RefArray C.N.equal``() = + member __.``Chars.Collection.RefArray C.N.equal``() = validate (Chars.Collection.RefArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.RefArray C.N.not_equal``() = + member __.``Chars.Collection.RefArray C.N.not_equal``() = validate (Chars.Collection.RefArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Chars.Collection.RefArray C.N.compare``() = + member __.``Chars.Collection.RefArray C.N.compare``() = validate (Chars.Collection.RefArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Chars.Collection.RefArray C.N.less_than``() = + member __.``Chars.Collection.RefArray C.N.less_than``() = validate (Chars.Collection.RefArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Chars.Collection.RefArray C.N.less_or_equal``() = + member __.``Chars.Collection.RefArray C.N.less_or_equal``() = validate (Chars.Collection.RefArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Chars.Collection.RefArray C.N.greater_than``() = + member __.``Chars.Collection.RefArray C.N.greater_than``() = validate (Chars.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Chars.Collection.RefArray C.N.greater_or_equal``() = + member __.``Chars.Collection.RefArray C.N.greater_or_equal``() = validate (Chars.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Chars.Collection.RefWrapArray C.I.equals``() = + member __.``Chars.Collection.RefWrapArray C.I.equals``() = validate (Chars.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.RefWrapArray C.I.equal``() = + member __.``Chars.Collection.RefWrapArray C.I.equal``() = validate (Chars.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.RefWrapArray C.I.not_equal``() = + member __.``Chars.Collection.RefWrapArray C.I.not_equal``() = validate (Chars.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Chars.Collection.RefWrapArray C.I.compare``() = + member __.``Chars.Collection.RefWrapArray C.I.compare``() = validate (Chars.Collection.RefWrapArray) C.I.compare [| 0;-65535;-48;-49;-50;65535;0;65487;65486;65485;48;-65487;0;-1;-2;49;-65486;1;0;-1;50;-65485;2;1;0 |] [] - member _.``Chars.Collection.RefWrapArray C.I.less_than``() = + member __.``Chars.Collection.RefWrapArray C.I.less_than``() = validate (Chars.Collection.RefWrapArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Chars.Collection.RefWrapArray C.I.less_or_equal``() = + member __.``Chars.Collection.RefWrapArray C.I.less_or_equal``() = validate (Chars.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Chars.Collection.RefWrapArray C.I.greater_than``() = + member __.``Chars.Collection.RefWrapArray C.I.greater_than``() = validate (Chars.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Chars.Collection.RefWrapArray C.I.greater_or_equal``() = + member __.``Chars.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Chars.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Chars.Collection.RefWrapArray C.N.equals``() = + member __.``Chars.Collection.RefWrapArray C.N.equals``() = validate (Chars.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.RefWrapArray C.N.equal``() = + member __.``Chars.Collection.RefWrapArray C.N.equal``() = validate (Chars.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.RefWrapArray C.N.not_equal``() = + member __.``Chars.Collection.RefWrapArray C.N.not_equal``() = validate (Chars.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Chars.Collection.RefWrapArray C.N.compare``() = + member __.``Chars.Collection.RefWrapArray C.N.compare``() = validate (Chars.Collection.RefWrapArray) C.N.compare [| 0;-65535;-48;-49;-50;65535;0;65487;65486;65485;48;-65487;0;-1;-2;49;-65486;1;0;-1;50;-65485;2;1;0 |] [] - member _.``Chars.Collection.RefWrapArray C.N.less_than``() = + member __.``Chars.Collection.RefWrapArray C.N.less_than``() = validate (Chars.Collection.RefWrapArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Chars.Collection.RefWrapArray C.N.less_or_equal``() = + member __.``Chars.Collection.RefWrapArray C.N.less_or_equal``() = validate (Chars.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Chars.Collection.RefWrapArray C.N.greater_than``() = + member __.``Chars.Collection.RefWrapArray C.N.greater_than``() = validate (Chars.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Chars.Collection.RefWrapArray C.N.greater_or_equal``() = + member __.``Chars.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Chars.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Chars.Collection.UnionArray C.I.equals``() = + member __.``Chars.Collection.UnionArray C.I.equals``() = validate (Chars.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -32201,7 +32201,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionArray C.I.equal``() = + member __.``Chars.Collection.UnionArray C.I.equal``() = validate (Chars.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -32237,7 +32237,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionArray C.I.not_equal``() = + member __.``Chars.Collection.UnionArray C.I.not_equal``() = validate (Chars.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -32273,7 +32273,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionArray C.I.compare``() = + member __.``Chars.Collection.UnionArray C.I.compare``() = validate (Chars.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -32309,7 +32309,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionArray C.I.less_than``() = + member __.``Chars.Collection.UnionArray C.I.less_than``() = validate (Chars.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -32345,7 +32345,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionArray C.I.less_or_equal``() = + member __.``Chars.Collection.UnionArray C.I.less_or_equal``() = validate (Chars.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -32381,7 +32381,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionArray C.I.greater_than``() = + member __.``Chars.Collection.UnionArray C.I.greater_than``() = validate (Chars.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -32417,7 +32417,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionArray C.I.greater_or_equal``() = + member __.``Chars.Collection.UnionArray C.I.greater_or_equal``() = validate (Chars.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -32453,7 +32453,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionArray C.N.equals``() = + member __.``Chars.Collection.UnionArray C.N.equals``() = validate (Chars.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -32489,7 +32489,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionArray C.N.equal``() = + member __.``Chars.Collection.UnionArray C.N.equal``() = validate (Chars.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -32525,7 +32525,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionArray C.N.not_equal``() = + member __.``Chars.Collection.UnionArray C.N.not_equal``() = validate (Chars.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -32561,7 +32561,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionArray C.N.compare``() = + member __.``Chars.Collection.UnionArray C.N.compare``() = validate (Chars.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -32597,7 +32597,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionArray C.N.less_than``() = + member __.``Chars.Collection.UnionArray C.N.less_than``() = validate (Chars.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -32633,7 +32633,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionArray C.N.less_or_equal``() = + member __.``Chars.Collection.UnionArray C.N.less_or_equal``() = validate (Chars.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -32669,7 +32669,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionArray C.N.greater_than``() = + member __.``Chars.Collection.UnionArray C.N.greater_than``() = validate (Chars.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -32705,7 +32705,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionArray C.N.greater_or_equal``() = + member __.``Chars.Collection.UnionArray C.N.greater_or_equal``() = validate (Chars.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -32741,7 +32741,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionWrapArray C.I.equals``() = + member __.``Chars.Collection.UnionWrapArray C.I.equals``() = validate (Chars.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -32777,7 +32777,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionWrapArray C.I.equal``() = + member __.``Chars.Collection.UnionWrapArray C.I.equal``() = validate (Chars.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -32813,7 +32813,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionWrapArray C.I.not_equal``() = + member __.``Chars.Collection.UnionWrapArray C.I.not_equal``() = validate (Chars.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -32849,7 +32849,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionWrapArray C.I.compare``() = + member __.``Chars.Collection.UnionWrapArray C.I.compare``() = validate (Chars.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-65535;-1;-2;-3;-3;-3;-3;-48;-1;-2;-3;-3;-3;-3;-49;-1;-2;-3;-3;-3;-3;-50;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-65535;-1;-2;-2;-2;-2;1;-48;-1;-2;-2;-2;-2;1;-49;-1;-2;-2;-2;-2;1;-50;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-65535; @@ -32885,7 +32885,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionWrapArray C.I.less_than``() = + member __.``Chars.Collection.UnionWrapArray C.I.less_than``() = validate (Chars.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -32921,7 +32921,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionWrapArray C.I.less_or_equal``() = + member __.``Chars.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Chars.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -32957,7 +32957,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionWrapArray C.I.greater_than``() = + member __.``Chars.Collection.UnionWrapArray C.I.greater_than``() = validate (Chars.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -32993,7 +32993,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionWrapArray C.I.greater_or_equal``() = + member __.``Chars.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Chars.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -33029,7 +33029,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionWrapArray C.N.equals``() = + member __.``Chars.Collection.UnionWrapArray C.N.equals``() = validate (Chars.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -33065,7 +33065,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionWrapArray C.N.equal``() = + member __.``Chars.Collection.UnionWrapArray C.N.equal``() = validate (Chars.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -33101,7 +33101,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionWrapArray C.N.not_equal``() = + member __.``Chars.Collection.UnionWrapArray C.N.not_equal``() = validate (Chars.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -33137,7 +33137,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionWrapArray C.N.compare``() = + member __.``Chars.Collection.UnionWrapArray C.N.compare``() = validate (Chars.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-65535;-1;-2;-3;-3;-3;-3;-48;-1;-2;-3;-3;-3;-3;-49;-1;-2;-3;-3;-3;-3;-50;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-65535;-1;-2;-2;-2;-2;1;-48;-1;-2;-2;-2;-2;1;-49;-1;-2;-2;-2;-2;1;-50;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-65535; @@ -33173,7 +33173,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionWrapArray C.N.less_than``() = + member __.``Chars.Collection.UnionWrapArray C.N.less_than``() = validate (Chars.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -33209,7 +33209,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionWrapArray C.N.less_or_equal``() = + member __.``Chars.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Chars.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -33245,7 +33245,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionWrapArray C.N.greater_than``() = + member __.``Chars.Collection.UnionWrapArray C.N.greater_than``() = validate (Chars.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -33281,7 +33281,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.UnionWrapArray C.N.greater_or_equal``() = + member __.``Chars.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Chars.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -33317,199 +33317,199 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ValueArray C.I.equals``() = + member __.``Chars.Collection.ValueArray C.I.equals``() = validate (Chars.Collection.ValueArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.ValueArray C.I.equal``() = + member __.``Chars.Collection.ValueArray C.I.equal``() = validate (Chars.Collection.ValueArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.ValueArray C.I.not_equal``() = + member __.``Chars.Collection.ValueArray C.I.not_equal``() = validate (Chars.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Chars.Collection.ValueArray C.I.compare``() = + member __.``Chars.Collection.ValueArray C.I.compare``() = validate (Chars.Collection.ValueArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Chars.Collection.ValueArray C.I.less_than``() = + member __.``Chars.Collection.ValueArray C.I.less_than``() = validate (Chars.Collection.ValueArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Chars.Collection.ValueArray C.I.less_or_equal``() = + member __.``Chars.Collection.ValueArray C.I.less_or_equal``() = validate (Chars.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Chars.Collection.ValueArray C.I.greater_than``() = + member __.``Chars.Collection.ValueArray C.I.greater_than``() = validate (Chars.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Chars.Collection.ValueArray C.I.greater_or_equal``() = + member __.``Chars.Collection.ValueArray C.I.greater_or_equal``() = validate (Chars.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Chars.Collection.ValueArray C.N.equals``() = + member __.``Chars.Collection.ValueArray C.N.equals``() = validate (Chars.Collection.ValueArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.ValueArray C.N.equal``() = + member __.``Chars.Collection.ValueArray C.N.equal``() = validate (Chars.Collection.ValueArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.ValueArray C.N.not_equal``() = + member __.``Chars.Collection.ValueArray C.N.not_equal``() = validate (Chars.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Chars.Collection.ValueArray C.N.compare``() = + member __.``Chars.Collection.ValueArray C.N.compare``() = validate (Chars.Collection.ValueArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Chars.Collection.ValueArray C.N.less_than``() = + member __.``Chars.Collection.ValueArray C.N.less_than``() = validate (Chars.Collection.ValueArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Chars.Collection.ValueArray C.N.less_or_equal``() = + member __.``Chars.Collection.ValueArray C.N.less_or_equal``() = validate (Chars.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Chars.Collection.ValueArray C.N.greater_than``() = + member __.``Chars.Collection.ValueArray C.N.greater_than``() = validate (Chars.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Chars.Collection.ValueArray C.N.greater_or_equal``() = + member __.``Chars.Collection.ValueArray C.N.greater_or_equal``() = validate (Chars.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Chars.Collection.ValueWrapArray C.I.equals``() = + member __.``Chars.Collection.ValueWrapArray C.I.equals``() = validate (Chars.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.ValueWrapArray C.I.equal``() = + member __.``Chars.Collection.ValueWrapArray C.I.equal``() = validate (Chars.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.ValueWrapArray C.I.not_equal``() = + member __.``Chars.Collection.ValueWrapArray C.I.not_equal``() = validate (Chars.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Chars.Collection.ValueWrapArray C.I.compare``() = + member __.``Chars.Collection.ValueWrapArray C.I.compare``() = validate (Chars.Collection.ValueWrapArray) C.I.compare [| 0;-65535;-48;-49;-50;65535;0;65487;65486;65485;48;-65487;0;-1;-2;49;-65486;1;0;-1;50;-65485;2;1;0 |] [] - member _.``Chars.Collection.ValueWrapArray C.I.less_than``() = + member __.``Chars.Collection.ValueWrapArray C.I.less_than``() = validate (Chars.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Chars.Collection.ValueWrapArray C.I.less_or_equal``() = + member __.``Chars.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Chars.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Chars.Collection.ValueWrapArray C.I.greater_than``() = + member __.``Chars.Collection.ValueWrapArray C.I.greater_than``() = validate (Chars.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Chars.Collection.ValueWrapArray C.I.greater_or_equal``() = + member __.``Chars.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Chars.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Chars.Collection.ValueWrapArray C.N.equals``() = + member __.``Chars.Collection.ValueWrapArray C.N.equals``() = validate (Chars.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.ValueWrapArray C.N.equal``() = + member __.``Chars.Collection.ValueWrapArray C.N.equal``() = validate (Chars.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Chars.Collection.ValueWrapArray C.N.not_equal``() = + member __.``Chars.Collection.ValueWrapArray C.N.not_equal``() = validate (Chars.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Chars.Collection.ValueWrapArray C.N.compare``() = + member __.``Chars.Collection.ValueWrapArray C.N.compare``() = validate (Chars.Collection.ValueWrapArray) C.N.compare [| 0;-65535;-48;-49;-50;65535;0;65487;65486;65485;48;-65487;0;-1;-2;49;-65486;1;0;-1;50;-65485;2;1;0 |] [] - member _.``Chars.Collection.ValueWrapArray C.N.less_than``() = + member __.``Chars.Collection.ValueWrapArray C.N.less_than``() = validate (Chars.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Chars.Collection.ValueWrapArray C.N.less_or_equal``() = + member __.``Chars.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Chars.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Chars.Collection.ValueWrapArray C.N.greater_than``() = + member __.``Chars.Collection.ValueWrapArray C.N.greater_than``() = validate (Chars.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Chars.Collection.ValueWrapArray C.N.greater_or_equal``() = + member __.``Chars.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Chars.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Chars.Collection.ArrayArray C.I.equals``() = + member __.``Chars.Collection.ArrayArray C.I.equals``() = validate (Chars.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33517,7 +33517,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray C.I.equal``() = + member __.``Chars.Collection.ArrayArray C.I.equal``() = validate (Chars.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33525,7 +33525,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray C.I.not_equal``() = + member __.``Chars.Collection.ArrayArray C.I.not_equal``() = validate (Chars.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -33533,7 +33533,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray C.I.compare``() = + member __.``Chars.Collection.ArrayArray C.I.compare``() = validate (Chars.Collection.ArrayArray) C.I.compare [| 0;-65535;-48;-49;-50;-1;-1;-1;-1;-1;65535;0;65487;65486;65485;-1;-1;-1;-1;-1;48;-65487;0;-1;-2;-1;-1;-1;-1;-1;49;-65486;1;0;-1;-1;-1;-1;-1;-1; 50;-65485;2;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-65535;-48;-49;-50;1;1;1;1;1;65535;0;65487;65486;65485;1;1;1;1;1;48;-65487;0;-1;-2; @@ -33541,7 +33541,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray C.I.less_than``() = + member __.``Chars.Collection.ArrayArray C.I.less_than``() = validate (Chars.Collection.ArrayArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; @@ -33549,7 +33549,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray C.I.less_or_equal``() = + member __.``Chars.Collection.ArrayArray C.I.less_or_equal``() = validate (Chars.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; @@ -33557,7 +33557,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray C.I.greater_than``() = + member __.``Chars.Collection.ArrayArray C.I.greater_than``() = validate (Chars.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; @@ -33565,7 +33565,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray C.I.greater_or_equal``() = + member __.``Chars.Collection.ArrayArray C.I.greater_or_equal``() = validate (Chars.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; @@ -33573,7 +33573,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray C.N.equals``() = + member __.``Chars.Collection.ArrayArray C.N.equals``() = validate (Chars.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33581,7 +33581,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray C.N.equal``() = + member __.``Chars.Collection.ArrayArray C.N.equal``() = validate (Chars.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33589,7 +33589,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray C.N.not_equal``() = + member __.``Chars.Collection.ArrayArray C.N.not_equal``() = validate (Chars.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -33597,7 +33597,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray C.N.compare``() = + member __.``Chars.Collection.ArrayArray C.N.compare``() = validate (Chars.Collection.ArrayArray) C.N.compare [| 0;-65535;-48;-49;-50;-1;-1;-1;-1;-1;65535;0;65487;65486;65485;-1;-1;-1;-1;-1;48;-65487;0;-1;-2;-1;-1;-1;-1;-1;49;-65486;1;0;-1;-1;-1;-1;-1;-1; 50;-65485;2;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-65535;-48;-49;-50;1;1;1;1;1;65535;0;65487;65486;65485;1;1;1;1;1;48;-65487;0;-1;-2; @@ -33605,7 +33605,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray C.N.less_than``() = + member __.``Chars.Collection.ArrayArray C.N.less_than``() = validate (Chars.Collection.ArrayArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; @@ -33613,7 +33613,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray C.N.less_or_equal``() = + member __.``Chars.Collection.ArrayArray C.N.less_or_equal``() = validate (Chars.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; @@ -33621,7 +33621,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray C.N.greater_than``() = + member __.``Chars.Collection.ArrayArray C.N.greater_than``() = validate (Chars.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; @@ -33629,7 +33629,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray C.N.greater_or_equal``() = + member __.``Chars.Collection.ArrayArray C.N.greater_or_equal``() = validate (Chars.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; @@ -33637,7 +33637,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ListArray C.I.equals``() = + member __.``Chars.Collection.ListArray C.I.equals``() = validate (Chars.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33645,7 +33645,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ListArray C.I.equal``() = + member __.``Chars.Collection.ListArray C.I.equal``() = validate (Chars.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33653,7 +33653,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ListArray C.I.not_equal``() = + member __.``Chars.Collection.ListArray C.I.not_equal``() = validate (Chars.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -33661,7 +33661,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ListArray C.I.compare``() = + member __.``Chars.Collection.ListArray C.I.compare``() = validate (Chars.Collection.ListArray) C.I.compare [| 0;-65535;-48;-49;-50;-1;-65535;-48;-49;-50;65535;0;65487;65486;65485;65535;-1;65487;65486;65485;48;-65487;0;-1;-2;48;-65487;-1;-1;-2;49;-65486;1;0;-1;49;-65486;1;-1;-1; 50;-65485;2;1;0;50;-65485;2;1;-1;1;-65535;-48;-49;-50;0;-65535;-48;-49;-50;65535;1;65487;65486;65485;65535;0;65487;65486;65485;48;-65487;1;-1;-2;48;-65487;0;-1;-2; @@ -33669,7 +33669,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ListArray C.I.less_than``() = + member __.``Chars.Collection.ListArray C.I.less_than``() = validate (Chars.Collection.ListArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; @@ -33677,7 +33677,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ListArray C.I.less_or_equal``() = + member __.``Chars.Collection.ListArray C.I.less_or_equal``() = validate (Chars.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; @@ -33685,7 +33685,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ListArray C.I.greater_than``() = + member __.``Chars.Collection.ListArray C.I.greater_than``() = validate (Chars.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; @@ -33693,7 +33693,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ListArray C.I.greater_or_equal``() = + member __.``Chars.Collection.ListArray C.I.greater_or_equal``() = validate (Chars.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; @@ -33701,7 +33701,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ListArray C.N.equals``() = + member __.``Chars.Collection.ListArray C.N.equals``() = validate (Chars.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33709,7 +33709,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ListArray C.N.equal``() = + member __.``Chars.Collection.ListArray C.N.equal``() = validate (Chars.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33717,7 +33717,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ListArray C.N.not_equal``() = + member __.``Chars.Collection.ListArray C.N.not_equal``() = validate (Chars.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -33725,7 +33725,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ListArray C.N.compare``() = + member __.``Chars.Collection.ListArray C.N.compare``() = validate (Chars.Collection.ListArray) C.N.compare [| 0;-65535;-48;-49;-50;-1;-65535;-48;-49;-50;65535;0;65487;65486;65485;65535;-1;65487;65486;65485;48;-65487;0;-1;-2;48;-65487;-1;-1;-2;49;-65486;1;0;-1;49;-65486;1;-1;-1; 50;-65485;2;1;0;50;-65485;2;1;-1;1;-65535;-48;-49;-50;0;-65535;-48;-49;-50;65535;1;65487;65486;65485;65535;0;65487;65486;65485;48;-65487;1;-1;-2;48;-65487;0;-1;-2; @@ -33733,7 +33733,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ListArray C.N.less_than``() = + member __.``Chars.Collection.ListArray C.N.less_than``() = validate (Chars.Collection.ListArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; @@ -33741,7 +33741,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ListArray C.N.less_or_equal``() = + member __.``Chars.Collection.ListArray C.N.less_or_equal``() = validate (Chars.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; @@ -33749,7 +33749,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ListArray C.N.greater_than``() = + member __.``Chars.Collection.ListArray C.N.greater_than``() = validate (Chars.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; @@ -33757,7 +33757,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ListArray C.N.greater_or_equal``() = + member __.``Chars.Collection.ListArray C.N.greater_or_equal``() = validate (Chars.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; @@ -33765,7 +33765,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33773,7 +33773,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33781,7 +33781,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -33789,7 +33789,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; @@ -33797,7 +33797,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; @@ -33805,7 +33805,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; @@ -33813,7 +33813,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; @@ -33821,7 +33821,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; @@ -33829,7 +33829,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33837,7 +33837,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33845,7 +33845,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -33853,7 +33853,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; @@ -33861,7 +33861,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; @@ -33869,7 +33869,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; @@ -33877,7 +33877,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; @@ -33885,7 +33885,7 @@ type GeneratedTests () = |] [] - member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; @@ -33893,157 +33893,157 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.Array E.I.equals``() = + member __.``NullableChars.Collection.Array E.I.equals``() = validate (NullableChars.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.Array E.I.equal``() = + member __.``NullableChars.Collection.Array E.I.equal``() = validate (NullableChars.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.Array E.I.not_equal``() = + member __.``NullableChars.Collection.Array E.I.not_equal``() = validate (NullableChars.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableChars.Collection.Array E.N.equals``() = + member __.``NullableChars.Collection.Array E.N.equals``() = validate (NullableChars.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.Array E.N.equal``() = + member __.``NullableChars.Collection.Array E.N.equal``() = validate (NullableChars.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.Array E.N.not_equal``() = + member __.``NullableChars.Collection.Array E.N.not_equal``() = validate (NullableChars.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableChars.Collection.OptionArray E.I.equals``() = + member __.``NullableChars.Collection.OptionArray E.I.equals``() = validate (NullableChars.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.OptionArray E.I.equal``() = + member __.``NullableChars.Collection.OptionArray E.I.equal``() = validate (NullableChars.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.OptionArray E.I.not_equal``() = + member __.``NullableChars.Collection.OptionArray E.I.not_equal``() = validate (NullableChars.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``NullableChars.Collection.OptionArray E.N.equals``() = + member __.``NullableChars.Collection.OptionArray E.N.equals``() = validate (NullableChars.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.OptionArray E.N.equal``() = + member __.``NullableChars.Collection.OptionArray E.N.equal``() = validate (NullableChars.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.OptionArray E.N.not_equal``() = + member __.``NullableChars.Collection.OptionArray E.N.not_equal``() = validate (NullableChars.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``NullableChars.Collection.RefArray E.I.equals``() = + member __.``NullableChars.Collection.RefArray E.I.equals``() = validate (NullableChars.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.RefArray E.I.equal``() = + member __.``NullableChars.Collection.RefArray E.I.equal``() = validate (NullableChars.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.RefArray E.I.not_equal``() = + member __.``NullableChars.Collection.RefArray E.I.not_equal``() = validate (NullableChars.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableChars.Collection.RefArray E.N.equals``() = + member __.``NullableChars.Collection.RefArray E.N.equals``() = validate (NullableChars.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.RefArray E.N.equal``() = + member __.``NullableChars.Collection.RefArray E.N.equal``() = validate (NullableChars.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.RefArray E.N.not_equal``() = + member __.``NullableChars.Collection.RefArray E.N.not_equal``() = validate (NullableChars.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableChars.Collection.RefWrapArray E.I.equals``() = + member __.``NullableChars.Collection.RefWrapArray E.I.equals``() = validate (NullableChars.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.RefWrapArray E.I.equal``() = + member __.``NullableChars.Collection.RefWrapArray E.I.equal``() = validate (NullableChars.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.RefWrapArray E.I.not_equal``() = + member __.``NullableChars.Collection.RefWrapArray E.I.not_equal``() = validate (NullableChars.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableChars.Collection.RefWrapArray E.N.equals``() = + member __.``NullableChars.Collection.RefWrapArray E.N.equals``() = validate (NullableChars.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.RefWrapArray E.N.equal``() = + member __.``NullableChars.Collection.RefWrapArray E.N.equal``() = validate (NullableChars.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.RefWrapArray E.N.not_equal``() = + member __.``NullableChars.Collection.RefWrapArray E.N.not_equal``() = validate (NullableChars.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableChars.Collection.UnionArray E.I.equals``() = + member __.``NullableChars.Collection.UnionArray E.I.equals``() = validate (NullableChars.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -34093,7 +34093,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.UnionArray E.I.equal``() = + member __.``NullableChars.Collection.UnionArray E.I.equal``() = validate (NullableChars.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -34143,7 +34143,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.UnionArray E.I.not_equal``() = + member __.``NullableChars.Collection.UnionArray E.I.not_equal``() = validate (NullableChars.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -34193,7 +34193,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.UnionArray E.N.equals``() = + member __.``NullableChars.Collection.UnionArray E.N.equals``() = validate (NullableChars.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -34243,7 +34243,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.UnionArray E.N.equal``() = + member __.``NullableChars.Collection.UnionArray E.N.equal``() = validate (NullableChars.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -34293,7 +34293,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.UnionArray E.N.not_equal``() = + member __.``NullableChars.Collection.UnionArray E.N.not_equal``() = validate (NullableChars.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -34343,7 +34343,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.UnionWrapArray E.I.equals``() = + member __.``NullableChars.Collection.UnionWrapArray E.I.equals``() = validate (NullableChars.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -34393,7 +34393,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.UnionWrapArray E.I.equal``() = + member __.``NullableChars.Collection.UnionWrapArray E.I.equal``() = validate (NullableChars.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -34443,7 +34443,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.UnionWrapArray E.I.not_equal``() = + member __.``NullableChars.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableChars.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -34493,7 +34493,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.UnionWrapArray E.N.equals``() = + member __.``NullableChars.Collection.UnionWrapArray E.N.equals``() = validate (NullableChars.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -34543,7 +34543,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.UnionWrapArray E.N.equal``() = + member __.``NullableChars.Collection.UnionWrapArray E.N.equal``() = validate (NullableChars.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -34593,7 +34593,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.UnionWrapArray E.N.not_equal``() = + member __.``NullableChars.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableChars.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -34643,79 +34643,79 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.ValueArray E.I.equals``() = + member __.``NullableChars.Collection.ValueArray E.I.equals``() = validate (NullableChars.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.ValueArray E.I.equal``() = + member __.``NullableChars.Collection.ValueArray E.I.equal``() = validate (NullableChars.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.ValueArray E.I.not_equal``() = + member __.``NullableChars.Collection.ValueArray E.I.not_equal``() = validate (NullableChars.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableChars.Collection.ValueArray E.N.equals``() = + member __.``NullableChars.Collection.ValueArray E.N.equals``() = validate (NullableChars.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.ValueArray E.N.equal``() = + member __.``NullableChars.Collection.ValueArray E.N.equal``() = validate (NullableChars.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.ValueArray E.N.not_equal``() = + member __.``NullableChars.Collection.ValueArray E.N.not_equal``() = validate (NullableChars.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableChars.Collection.ValueWrapArray E.I.equals``() = + member __.``NullableChars.Collection.ValueWrapArray E.I.equals``() = validate (NullableChars.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.ValueWrapArray E.I.equal``() = + member __.``NullableChars.Collection.ValueWrapArray E.I.equal``() = validate (NullableChars.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.ValueWrapArray E.I.not_equal``() = + member __.``NullableChars.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableChars.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableChars.Collection.ValueWrapArray E.N.equals``() = + member __.``NullableChars.Collection.ValueWrapArray E.N.equals``() = validate (NullableChars.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.ValueWrapArray E.N.equal``() = + member __.``NullableChars.Collection.ValueWrapArray E.N.equal``() = validate (NullableChars.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableChars.Collection.ValueWrapArray E.N.not_equal``() = + member __.``NullableChars.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableChars.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableChars.Collection.ArrayArray E.I.equals``() = + member __.``NullableChars.Collection.ArrayArray E.I.equals``() = validate (NullableChars.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -34724,7 +34724,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.ArrayArray E.I.equal``() = + member __.``NullableChars.Collection.ArrayArray E.I.equal``() = validate (NullableChars.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -34733,7 +34733,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.ArrayArray E.I.not_equal``() = + member __.``NullableChars.Collection.ArrayArray E.I.not_equal``() = validate (NullableChars.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -34742,7 +34742,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.ArrayArray E.N.equals``() = + member __.``NullableChars.Collection.ArrayArray E.N.equals``() = validate (NullableChars.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -34751,7 +34751,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.ArrayArray E.N.equal``() = + member __.``NullableChars.Collection.ArrayArray E.N.equal``() = validate (NullableChars.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -34760,7 +34760,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.ArrayArray E.N.not_equal``() = + member __.``NullableChars.Collection.ArrayArray E.N.not_equal``() = validate (NullableChars.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -34769,7 +34769,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.ListArray E.I.equals``() = + member __.``NullableChars.Collection.ListArray E.I.equals``() = validate (NullableChars.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -34778,7 +34778,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.ListArray E.I.equal``() = + member __.``NullableChars.Collection.ListArray E.I.equal``() = validate (NullableChars.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -34787,7 +34787,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.ListArray E.I.not_equal``() = + member __.``NullableChars.Collection.ListArray E.I.not_equal``() = validate (NullableChars.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -34796,7 +34796,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.ListArray E.N.equals``() = + member __.``NullableChars.Collection.ListArray E.N.equals``() = validate (NullableChars.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -34805,7 +34805,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.ListArray E.N.equal``() = + member __.``NullableChars.Collection.ListArray E.N.equal``() = validate (NullableChars.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -34814,7 +34814,7 @@ type GeneratedTests () = |] [] - member _.``NullableChars.Collection.ListArray E.N.not_equal``() = + member __.``NullableChars.Collection.ListArray E.N.not_equal``() = validate (NullableChars.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -34823,407 +34823,407 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.Array C.I.equals``() = + member __.``Strings.Collection.Array C.I.equals``() = validate (Strings.Collection.Array) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.Array C.I.equal``() = + member __.``Strings.Collection.Array C.I.equal``() = validate (Strings.Collection.Array) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.Array C.I.not_equal``() = + member __.``Strings.Collection.Array C.I.not_equal``() = validate (Strings.Collection.Array) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.Array C.I.compare``() = + member __.``Strings.Collection.Array C.I.compare``() = validate (Strings.Collection.Array) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 |] [] - member _.``Strings.Collection.Array C.I.less_than``() = + member __.``Strings.Collection.Array C.I.less_than``() = validate (Strings.Collection.Array) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member _.``Strings.Collection.Array C.I.less_or_equal``() = + member __.``Strings.Collection.Array C.I.less_or_equal``() = validate (Strings.Collection.Array) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.Array C.I.greater_than``() = + member __.``Strings.Collection.Array C.I.greater_than``() = validate (Strings.Collection.Array) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.Array C.I.greater_or_equal``() = + member __.``Strings.Collection.Array C.I.greater_or_equal``() = validate (Strings.Collection.Array) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member _.``Strings.Collection.Array C.N.equals``() = + member __.``Strings.Collection.Array C.N.equals``() = validate (Strings.Collection.Array) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.Array C.N.equal``() = + member __.``Strings.Collection.Array C.N.equal``() = validate (Strings.Collection.Array) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.Array C.N.not_equal``() = + member __.``Strings.Collection.Array C.N.not_equal``() = validate (Strings.Collection.Array) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.Array C.N.compare``() = + member __.``Strings.Collection.Array C.N.compare``() = validate (Strings.Collection.Array) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 |] [] - member _.``Strings.Collection.Array C.N.less_than``() = + member __.``Strings.Collection.Array C.N.less_than``() = validate (Strings.Collection.Array) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member _.``Strings.Collection.Array C.N.less_or_equal``() = + member __.``Strings.Collection.Array C.N.less_or_equal``() = validate (Strings.Collection.Array) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.Array C.N.greater_than``() = + member __.``Strings.Collection.Array C.N.greater_than``() = validate (Strings.Collection.Array) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.Array C.N.greater_or_equal``() = + member __.``Strings.Collection.Array C.N.greater_or_equal``() = validate (Strings.Collection.Array) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member _.``Strings.Collection.OptionArray C.I.equals``() = + member __.``Strings.Collection.OptionArray C.I.equals``() = validate (Strings.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.OptionArray C.I.equal``() = + member __.``Strings.Collection.OptionArray C.I.equal``() = validate (Strings.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.OptionArray C.I.not_equal``() = + member __.``Strings.Collection.OptionArray C.I.not_equal``() = validate (Strings.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.OptionArray C.I.compare``() = + member __.``Strings.Collection.OptionArray C.I.compare``() = validate (Strings.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;1;1;0;-72;-3;-97;-229;1;1;72;0;72;-25;-157;1;1;3;-72;0;-97;-229;1;1;97;25;97; 0;-132;1;1;229;157;229;132;0 |] [] - member _.``Strings.Collection.OptionArray C.I.less_than``() = + member __.``Strings.Collection.OptionArray C.I.less_than``() = validate (Strings.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;1;0;1;1;0;0;0;0;0; 0;1;0;0;0;0;0;0;0 |] [] - member _.``Strings.Collection.OptionArray C.I.less_or_equal``() = + member __.``Strings.Collection.OptionArray C.I.less_or_equal``() = validate (Strings.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;0;1;1;0;0;0;1;1;1;1;0;0;0;0;0; 1;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.OptionArray C.I.greater_than``() = + member __.``Strings.Collection.OptionArray C.I.greater_than``() = validate (Strings.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;1;0;0;1;1;1;0;0;0;0;1;1;1;1;1; 0;0;1;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.OptionArray C.I.greater_or_equal``() = + member __.``Strings.Collection.OptionArray C.I.greater_or_equal``() = validate (Strings.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;0;1;0;0;1;1;1;1;1; 1;0;1;1;1;1;1;1;1 |] [] - member _.``Strings.Collection.OptionArray C.N.equals``() = + member __.``Strings.Collection.OptionArray C.N.equals``() = validate (Strings.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.OptionArray C.N.equal``() = + member __.``Strings.Collection.OptionArray C.N.equal``() = validate (Strings.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.OptionArray C.N.not_equal``() = + member __.``Strings.Collection.OptionArray C.N.not_equal``() = validate (Strings.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.OptionArray C.N.compare``() = + member __.``Strings.Collection.OptionArray C.N.compare``() = validate (Strings.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;1;1;0;-72;-3;-97;-229;1;1;72;0;72;-25;-157;1;1;3;-72;0;-97;-229;1;1;97;25;97; 0;-132;1;1;229;157;229;132;0 |] [] - member _.``Strings.Collection.OptionArray C.N.less_than``() = + member __.``Strings.Collection.OptionArray C.N.less_than``() = validate (Strings.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;1;0;1;1;0;0;0;0;0; 0;1;0;0;0;0;0;0;0 |] [] - member _.``Strings.Collection.OptionArray C.N.less_or_equal``() = + member __.``Strings.Collection.OptionArray C.N.less_or_equal``() = validate (Strings.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;0;1;1;0;0;0;1;1;1;1;0;0;0;0;0; 1;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.OptionArray C.N.greater_than``() = + member __.``Strings.Collection.OptionArray C.N.greater_than``() = validate (Strings.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;1;0;0;1;1;1;0;0;0;0;1;1;1;1;1; 0;0;1;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.OptionArray C.N.greater_or_equal``() = + member __.``Strings.Collection.OptionArray C.N.greater_or_equal``() = validate (Strings.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;0;1;0;0;1;1;1;1;1; 1;0;1;1;1;1;1;1;1 |] [] - member _.``Strings.Collection.RefArray C.I.equals``() = + member __.``Strings.Collection.RefArray C.I.equals``() = validate (Strings.Collection.RefArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.RefArray C.I.equal``() = + member __.``Strings.Collection.RefArray C.I.equal``() = validate (Strings.Collection.RefArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.RefArray C.I.not_equal``() = + member __.``Strings.Collection.RefArray C.I.not_equal``() = validate (Strings.Collection.RefArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.RefArray C.I.compare``() = + member __.``Strings.Collection.RefArray C.I.compare``() = validate (Strings.Collection.RefArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 |] [] - member _.``Strings.Collection.RefArray C.I.less_than``() = + member __.``Strings.Collection.RefArray C.I.less_than``() = validate (Strings.Collection.RefArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member _.``Strings.Collection.RefArray C.I.less_or_equal``() = + member __.``Strings.Collection.RefArray C.I.less_or_equal``() = validate (Strings.Collection.RefArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.RefArray C.I.greater_than``() = + member __.``Strings.Collection.RefArray C.I.greater_than``() = validate (Strings.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.RefArray C.I.greater_or_equal``() = + member __.``Strings.Collection.RefArray C.I.greater_or_equal``() = validate (Strings.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member _.``Strings.Collection.RefArray C.N.equals``() = + member __.``Strings.Collection.RefArray C.N.equals``() = validate (Strings.Collection.RefArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.RefArray C.N.equal``() = + member __.``Strings.Collection.RefArray C.N.equal``() = validate (Strings.Collection.RefArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.RefArray C.N.not_equal``() = + member __.``Strings.Collection.RefArray C.N.not_equal``() = validate (Strings.Collection.RefArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.RefArray C.N.compare``() = + member __.``Strings.Collection.RefArray C.N.compare``() = validate (Strings.Collection.RefArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 |] [] - member _.``Strings.Collection.RefArray C.N.less_than``() = + member __.``Strings.Collection.RefArray C.N.less_than``() = validate (Strings.Collection.RefArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member _.``Strings.Collection.RefArray C.N.less_or_equal``() = + member __.``Strings.Collection.RefArray C.N.less_or_equal``() = validate (Strings.Collection.RefArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.RefArray C.N.greater_than``() = + member __.``Strings.Collection.RefArray C.N.greater_than``() = validate (Strings.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.RefArray C.N.greater_or_equal``() = + member __.``Strings.Collection.RefArray C.N.greater_or_equal``() = validate (Strings.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member _.``Strings.Collection.RefWrapArray C.I.equals``() = + member __.``Strings.Collection.RefWrapArray C.I.equals``() = validate (Strings.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.RefWrapArray C.I.equal``() = + member __.``Strings.Collection.RefWrapArray C.I.equal``() = validate (Strings.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.RefWrapArray C.I.not_equal``() = + member __.``Strings.Collection.RefWrapArray C.I.not_equal``() = validate (Strings.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.RefWrapArray C.I.compare``() = + member __.``Strings.Collection.RefWrapArray C.I.compare``() = validate (Strings.Collection.RefWrapArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 |] [] - member _.``Strings.Collection.RefWrapArray C.I.less_than``() = + member __.``Strings.Collection.RefWrapArray C.I.less_than``() = validate (Strings.Collection.RefWrapArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member _.``Strings.Collection.RefWrapArray C.I.less_or_equal``() = + member __.``Strings.Collection.RefWrapArray C.I.less_or_equal``() = validate (Strings.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.RefWrapArray C.I.greater_than``() = + member __.``Strings.Collection.RefWrapArray C.I.greater_than``() = validate (Strings.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.RefWrapArray C.I.greater_or_equal``() = + member __.``Strings.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Strings.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member _.``Strings.Collection.RefWrapArray C.N.equals``() = + member __.``Strings.Collection.RefWrapArray C.N.equals``() = validate (Strings.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.RefWrapArray C.N.equal``() = + member __.``Strings.Collection.RefWrapArray C.N.equal``() = validate (Strings.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.RefWrapArray C.N.not_equal``() = + member __.``Strings.Collection.RefWrapArray C.N.not_equal``() = validate (Strings.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.RefWrapArray C.N.compare``() = + member __.``Strings.Collection.RefWrapArray C.N.compare``() = validate (Strings.Collection.RefWrapArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 |] [] - member _.``Strings.Collection.RefWrapArray C.N.less_than``() = + member __.``Strings.Collection.RefWrapArray C.N.less_than``() = validate (Strings.Collection.RefWrapArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member _.``Strings.Collection.RefWrapArray C.N.less_or_equal``() = + member __.``Strings.Collection.RefWrapArray C.N.less_or_equal``() = validate (Strings.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.RefWrapArray C.N.greater_than``() = + member __.``Strings.Collection.RefWrapArray C.N.greater_than``() = validate (Strings.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.RefWrapArray C.N.greater_or_equal``() = + member __.``Strings.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Strings.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member _.``Strings.Collection.UnionArray C.I.equals``() = + member __.``Strings.Collection.UnionArray C.I.equals``() = validate (Strings.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -35273,7 +35273,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionArray C.I.equal``() = + member __.``Strings.Collection.UnionArray C.I.equal``() = validate (Strings.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -35323,7 +35323,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionArray C.I.not_equal``() = + member __.``Strings.Collection.UnionArray C.I.not_equal``() = validate (Strings.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -35373,7 +35373,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionArray C.I.compare``() = + member __.``Strings.Collection.UnionArray C.I.compare``() = validate (Strings.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -35423,7 +35423,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionArray C.I.less_than``() = + member __.``Strings.Collection.UnionArray C.I.less_than``() = validate (Strings.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -35473,7 +35473,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionArray C.I.less_or_equal``() = + member __.``Strings.Collection.UnionArray C.I.less_or_equal``() = validate (Strings.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -35523,7 +35523,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionArray C.I.greater_than``() = + member __.``Strings.Collection.UnionArray C.I.greater_than``() = validate (Strings.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -35573,7 +35573,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionArray C.I.greater_or_equal``() = + member __.``Strings.Collection.UnionArray C.I.greater_or_equal``() = validate (Strings.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -35623,7 +35623,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionArray C.N.equals``() = + member __.``Strings.Collection.UnionArray C.N.equals``() = validate (Strings.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -35673,7 +35673,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionArray C.N.equal``() = + member __.``Strings.Collection.UnionArray C.N.equal``() = validate (Strings.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -35723,7 +35723,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionArray C.N.not_equal``() = + member __.``Strings.Collection.UnionArray C.N.not_equal``() = validate (Strings.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -35773,7 +35773,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionArray C.N.compare``() = + member __.``Strings.Collection.UnionArray C.N.compare``() = validate (Strings.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -35823,7 +35823,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionArray C.N.less_than``() = + member __.``Strings.Collection.UnionArray C.N.less_than``() = validate (Strings.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -35873,7 +35873,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionArray C.N.less_or_equal``() = + member __.``Strings.Collection.UnionArray C.N.less_or_equal``() = validate (Strings.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -35923,7 +35923,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionArray C.N.greater_than``() = + member __.``Strings.Collection.UnionArray C.N.greater_than``() = validate (Strings.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -35973,7 +35973,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionArray C.N.greater_or_equal``() = + member __.``Strings.Collection.UnionArray C.N.greater_or_equal``() = validate (Strings.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -36023,7 +36023,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionWrapArray C.I.equals``() = + member __.``Strings.Collection.UnionWrapArray C.I.equals``() = validate (Strings.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -36073,7 +36073,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionWrapArray C.I.equal``() = + member __.``Strings.Collection.UnionWrapArray C.I.equal``() = validate (Strings.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -36123,7 +36123,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionWrapArray C.I.not_equal``() = + member __.``Strings.Collection.UnionWrapArray C.I.not_equal``() = validate (Strings.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -36173,7 +36173,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionWrapArray C.I.compare``() = + member __.``Strings.Collection.UnionWrapArray C.I.compare``() = validate (Strings.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -36223,7 +36223,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionWrapArray C.I.less_than``() = + member __.``Strings.Collection.UnionWrapArray C.I.less_than``() = validate (Strings.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -36273,7 +36273,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionWrapArray C.I.less_or_equal``() = + member __.``Strings.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Strings.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -36323,7 +36323,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionWrapArray C.I.greater_than``() = + member __.``Strings.Collection.UnionWrapArray C.I.greater_than``() = validate (Strings.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -36373,7 +36373,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionWrapArray C.I.greater_or_equal``() = + member __.``Strings.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Strings.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -36423,7 +36423,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionWrapArray C.N.equals``() = + member __.``Strings.Collection.UnionWrapArray C.N.equals``() = validate (Strings.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -36473,7 +36473,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionWrapArray C.N.equal``() = + member __.``Strings.Collection.UnionWrapArray C.N.equal``() = validate (Strings.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -36523,7 +36523,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionWrapArray C.N.not_equal``() = + member __.``Strings.Collection.UnionWrapArray C.N.not_equal``() = validate (Strings.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -36573,7 +36573,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionWrapArray C.N.compare``() = + member __.``Strings.Collection.UnionWrapArray C.N.compare``() = validate (Strings.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -36623,7 +36623,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionWrapArray C.N.less_than``() = + member __.``Strings.Collection.UnionWrapArray C.N.less_than``() = validate (Strings.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -36673,7 +36673,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionWrapArray C.N.less_or_equal``() = + member __.``Strings.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Strings.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -36723,7 +36723,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionWrapArray C.N.greater_than``() = + member __.``Strings.Collection.UnionWrapArray C.N.greater_than``() = validate (Strings.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -36773,7 +36773,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.UnionWrapArray C.N.greater_or_equal``() = + member __.``Strings.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Strings.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -36823,199 +36823,199 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ValueArray C.I.equals``() = + member __.``Strings.Collection.ValueArray C.I.equals``() = validate (Strings.Collection.ValueArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.ValueArray C.I.equal``() = + member __.``Strings.Collection.ValueArray C.I.equal``() = validate (Strings.Collection.ValueArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.ValueArray C.I.not_equal``() = + member __.``Strings.Collection.ValueArray C.I.not_equal``() = validate (Strings.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.ValueArray C.I.compare``() = + member __.``Strings.Collection.ValueArray C.I.compare``() = validate (Strings.Collection.ValueArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 |] [] - member _.``Strings.Collection.ValueArray C.I.less_than``() = + member __.``Strings.Collection.ValueArray C.I.less_than``() = validate (Strings.Collection.ValueArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member _.``Strings.Collection.ValueArray C.I.less_or_equal``() = + member __.``Strings.Collection.ValueArray C.I.less_or_equal``() = validate (Strings.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.ValueArray C.I.greater_than``() = + member __.``Strings.Collection.ValueArray C.I.greater_than``() = validate (Strings.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.ValueArray C.I.greater_or_equal``() = + member __.``Strings.Collection.ValueArray C.I.greater_or_equal``() = validate (Strings.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member _.``Strings.Collection.ValueArray C.N.equals``() = + member __.``Strings.Collection.ValueArray C.N.equals``() = validate (Strings.Collection.ValueArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.ValueArray C.N.equal``() = + member __.``Strings.Collection.ValueArray C.N.equal``() = validate (Strings.Collection.ValueArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.ValueArray C.N.not_equal``() = + member __.``Strings.Collection.ValueArray C.N.not_equal``() = validate (Strings.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.ValueArray C.N.compare``() = + member __.``Strings.Collection.ValueArray C.N.compare``() = validate (Strings.Collection.ValueArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 |] [] - member _.``Strings.Collection.ValueArray C.N.less_than``() = + member __.``Strings.Collection.ValueArray C.N.less_than``() = validate (Strings.Collection.ValueArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member _.``Strings.Collection.ValueArray C.N.less_or_equal``() = + member __.``Strings.Collection.ValueArray C.N.less_or_equal``() = validate (Strings.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.ValueArray C.N.greater_than``() = + member __.``Strings.Collection.ValueArray C.N.greater_than``() = validate (Strings.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.ValueArray C.N.greater_or_equal``() = + member __.``Strings.Collection.ValueArray C.N.greater_or_equal``() = validate (Strings.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member _.``Strings.Collection.ValueWrapArray C.I.equals``() = + member __.``Strings.Collection.ValueWrapArray C.I.equals``() = validate (Strings.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.ValueWrapArray C.I.equal``() = + member __.``Strings.Collection.ValueWrapArray C.I.equal``() = validate (Strings.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.ValueWrapArray C.I.not_equal``() = + member __.``Strings.Collection.ValueWrapArray C.I.not_equal``() = validate (Strings.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.ValueWrapArray C.I.compare``() = + member __.``Strings.Collection.ValueWrapArray C.I.compare``() = validate (Strings.Collection.ValueWrapArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 |] [] - member _.``Strings.Collection.ValueWrapArray C.I.less_than``() = + member __.``Strings.Collection.ValueWrapArray C.I.less_than``() = validate (Strings.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member _.``Strings.Collection.ValueWrapArray C.I.less_or_equal``() = + member __.``Strings.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Strings.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.ValueWrapArray C.I.greater_than``() = + member __.``Strings.Collection.ValueWrapArray C.I.greater_than``() = validate (Strings.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.ValueWrapArray C.I.greater_or_equal``() = + member __.``Strings.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Strings.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member _.``Strings.Collection.ValueWrapArray C.N.equals``() = + member __.``Strings.Collection.ValueWrapArray C.N.equals``() = validate (Strings.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.ValueWrapArray C.N.equal``() = + member __.``Strings.Collection.ValueWrapArray C.N.equal``() = validate (Strings.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.ValueWrapArray C.N.not_equal``() = + member __.``Strings.Collection.ValueWrapArray C.N.not_equal``() = validate (Strings.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.ValueWrapArray C.N.compare``() = + member __.``Strings.Collection.ValueWrapArray C.N.compare``() = validate (Strings.Collection.ValueWrapArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 |] [] - member _.``Strings.Collection.ValueWrapArray C.N.less_than``() = + member __.``Strings.Collection.ValueWrapArray C.N.less_than``() = validate (Strings.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member _.``Strings.Collection.ValueWrapArray C.N.less_or_equal``() = + member __.``Strings.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Strings.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member _.``Strings.Collection.ValueWrapArray C.N.greater_than``() = + member __.``Strings.Collection.ValueWrapArray C.N.greater_than``() = validate (Strings.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member _.``Strings.Collection.ValueWrapArray C.N.greater_or_equal``() = + member __.``Strings.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Strings.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member _.``Strings.Collection.ArrayArray C.I.equals``() = + member __.``Strings.Collection.ArrayArray C.I.equals``() = validate (Strings.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37024,7 +37024,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray C.I.equal``() = + member __.``Strings.Collection.ArrayArray C.I.equal``() = validate (Strings.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37033,7 +37033,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray C.I.not_equal``() = + member __.``Strings.Collection.ArrayArray C.I.not_equal``() = validate (Strings.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -37042,7 +37042,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray C.I.compare``() = + member __.``Strings.Collection.ArrayArray C.I.compare``() = validate (Strings.Collection.ArrayArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;-1;-1;-1;-1;-1;-1;1;72;0;72;-25;-157;-1;-1;-1;-1;-1;-1;1;3;-72;0; -97;-229;-1;-1;-1;-1;-1;-1;1;97;25;97;0;-132;-1;-1;-1;-1;-1;-1;1;229;157;229;132;0;-1;-1;-1;-1;-1;-1;1;1;1;1;1;1;0;-1; @@ -37051,7 +37051,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray C.I.less_than``() = + member __.``Strings.Collection.ArrayArray C.I.less_than``() = validate (Strings.Collection.ArrayArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0; 1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;0;0;0;1; @@ -37060,7 +37060,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray C.I.less_or_equal``() = + member __.``Strings.Collection.ArrayArray C.I.less_or_equal``() = validate (Strings.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;1;1;1;1;1;1;1;1;0;0;1;1; 1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;1; @@ -37069,7 +37069,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray C.I.greater_than``() = + member __.``Strings.Collection.ArrayArray C.I.greater_than``() = validate (Strings.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;0;0;0;0;0;0;0;0;1;1;0;0; 0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;0; @@ -37078,7 +37078,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray C.I.greater_or_equal``() = + member __.``Strings.Collection.ArrayArray C.I.greater_or_equal``() = validate (Strings.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1; 0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;1;1;1;0; @@ -37087,7 +37087,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray C.N.equals``() = + member __.``Strings.Collection.ArrayArray C.N.equals``() = validate (Strings.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37096,7 +37096,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray C.N.equal``() = + member __.``Strings.Collection.ArrayArray C.N.equal``() = validate (Strings.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37105,7 +37105,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray C.N.not_equal``() = + member __.``Strings.Collection.ArrayArray C.N.not_equal``() = validate (Strings.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -37114,7 +37114,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray C.N.compare``() = + member __.``Strings.Collection.ArrayArray C.N.compare``() = validate (Strings.Collection.ArrayArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;-1;-1;-1;-1;-1;-1;1;72;0;72;-25;-157;-1;-1;-1;-1;-1;-1;1;3;-72;0; -97;-229;-1;-1;-1;-1;-1;-1;1;97;25;97;0;-132;-1;-1;-1;-1;-1;-1;1;229;157;229;132;0;-1;-1;-1;-1;-1;-1;1;1;1;1;1;1;0;-1; @@ -37123,7 +37123,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray C.N.less_than``() = + member __.``Strings.Collection.ArrayArray C.N.less_than``() = validate (Strings.Collection.ArrayArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0; 1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;0;0;0;1; @@ -37132,7 +37132,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray C.N.less_or_equal``() = + member __.``Strings.Collection.ArrayArray C.N.less_or_equal``() = validate (Strings.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;1;1;1;1;1;1;1;1;0;0;1;1; 1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;1; @@ -37141,7 +37141,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray C.N.greater_than``() = + member __.``Strings.Collection.ArrayArray C.N.greater_than``() = validate (Strings.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;0;0;0;0;0;0;0;0;1;1;0;0; 0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;0; @@ -37150,7 +37150,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray C.N.greater_or_equal``() = + member __.``Strings.Collection.ArrayArray C.N.greater_or_equal``() = validate (Strings.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1; 0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;1;1;1;0; @@ -37159,7 +37159,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ListArray C.I.equals``() = + member __.``Strings.Collection.ListArray C.I.equals``() = validate (Strings.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37168,7 +37168,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ListArray C.I.equal``() = + member __.``Strings.Collection.ListArray C.I.equal``() = validate (Strings.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37177,7 +37177,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ListArray C.I.not_equal``() = + member __.``Strings.Collection.ListArray C.I.not_equal``() = validate (Strings.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -37186,7 +37186,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ListArray C.I.compare``() = + member __.``Strings.Collection.ListArray C.I.compare``() = validate (Strings.Collection.ListArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;-1;-72;-3;-97;-229;1;72;0;72;-25;-157;1;72;-1;72;-25;-157;1;3;-72;0; -97;-229;1;3;-72;-1;-97;-229;1;97;25;97;0;-132;1;97;25;97;-1;-132;1;229;157;229;132;0;1;229;157;229;132;-1;1;-1;-1;-1;-1;-1;0;-1; @@ -37195,7 +37195,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ListArray C.I.less_than``() = + member __.``Strings.Collection.ListArray C.I.less_than``() = validate (Strings.Collection.ListArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;1;0; 1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;0;1; @@ -37204,7 +37204,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ListArray C.I.less_or_equal``() = + member __.``Strings.Collection.ListArray C.I.less_or_equal``() = validate (Strings.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;1;1;0;0;1;1; 1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;1;1;1;1;1;1; @@ -37213,7 +37213,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ListArray C.I.greater_than``() = + member __.``Strings.Collection.ListArray C.I.greater_than``() = validate (Strings.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;0;0;1;1;0;0; 0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;0;0;0;0;0;0; @@ -37222,7 +37222,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ListArray C.I.greater_or_equal``() = + member __.``Strings.Collection.ListArray C.I.greater_or_equal``() = validate (Strings.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;0;1; 0;0;1;1;0;0;0;0;1;1;1;1;1;0;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;1;0; @@ -37231,7 +37231,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ListArray C.N.equals``() = + member __.``Strings.Collection.ListArray C.N.equals``() = validate (Strings.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37240,7 +37240,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ListArray C.N.equal``() = + member __.``Strings.Collection.ListArray C.N.equal``() = validate (Strings.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37249,7 +37249,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ListArray C.N.not_equal``() = + member __.``Strings.Collection.ListArray C.N.not_equal``() = validate (Strings.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -37258,7 +37258,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ListArray C.N.compare``() = + member __.``Strings.Collection.ListArray C.N.compare``() = validate (Strings.Collection.ListArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;-1;-72;-3;-97;-229;1;72;0;72;-25;-157;1;72;-1;72;-25;-157;1;3;-72;0; -97;-229;1;3;-72;-1;-97;-229;1;97;25;97;0;-132;1;97;25;97;-1;-132;1;229;157;229;132;0;1;229;157;229;132;-1;1;-1;-1;-1;-1;-1;0;-1; @@ -37267,7 +37267,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ListArray C.N.less_than``() = + member __.``Strings.Collection.ListArray C.N.less_than``() = validate (Strings.Collection.ListArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;1;0; 1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;0;1; @@ -37276,7 +37276,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ListArray C.N.less_or_equal``() = + member __.``Strings.Collection.ListArray C.N.less_or_equal``() = validate (Strings.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;1;1;0;0;1;1; 1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;1;1;1;1;1;1; @@ -37285,7 +37285,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ListArray C.N.greater_than``() = + member __.``Strings.Collection.ListArray C.N.greater_than``() = validate (Strings.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;0;0;1;1;0;0; 0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;0;0;0;0;0;0; @@ -37294,7 +37294,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ListArray C.N.greater_or_equal``() = + member __.``Strings.Collection.ListArray C.N.greater_or_equal``() = validate (Strings.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;0;1; 0;0;1;1;0;0;0;0;1;1;1;1;1;0;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;1;0; @@ -37303,7 +37303,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37312,7 +37312,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37321,7 +37321,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -37330,7 +37330,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;-1;-3;-3;-97;1;1;72;0;72;-25;-157;1;72;72;72;-25;1;1;3;-72;0; -97;-229;1;3;-1;-1;-97;1;1;97;25;97;0;-132;1;97;97;97;-1;1;1;229;157;229;132;0;1;229;229;229;132;1;1;-1;-1;-1;-1;-1;0;-1; @@ -37339,7 +37339,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;1;0; 1;1;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;1; @@ -37348,7 +37348,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;1;0;0;0;1;1; 1;1;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1; @@ -37357,7 +37357,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;0;1;1;1;1;0;1;1;1;0;0; 0;0;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0; @@ -37366,7 +37366,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;0;1; 0;0;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0; @@ -37375,7 +37375,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37384,7 +37384,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37393,7 +37393,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -37402,7 +37402,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;-1;-3;-3;-97;1;1;72;0;72;-25;-157;1;72;72;72;-25;1;1;3;-72;0; -97;-229;1;3;-1;-1;-97;1;1;97;25;97;0;-132;1;97;97;97;-1;1;1;229;157;229;132;0;1;229;229;229;132;1;1;-1;-1;-1;-1;-1;0;-1; @@ -37411,7 +37411,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;1;0; 1;1;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;1; @@ -37420,7 +37420,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;1;0;0;0;1;1; 1;1;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1; @@ -37429,7 +37429,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;0;1;1;1;1;0;1;1;1;0;0; 0;0;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0; @@ -37438,7 +37438,7 @@ type GeneratedTests () = |] [] - member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;0;1; 0;0;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0; @@ -37447,391 +37447,391 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.Array C.I.equals``() = + member __.``Decimals.Collection.Array C.I.equals``() = validate (Decimals.Collection.Array) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.Array C.I.equal``() = + member __.``Decimals.Collection.Array C.I.equal``() = validate (Decimals.Collection.Array) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.Array C.I.not_equal``() = + member __.``Decimals.Collection.Array C.I.not_equal``() = validate (Decimals.Collection.Array) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Decimals.Collection.Array C.I.compare``() = + member __.``Decimals.Collection.Array C.I.compare``() = validate (Decimals.Collection.Array) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Decimals.Collection.Array C.I.less_than``() = + member __.``Decimals.Collection.Array C.I.less_than``() = validate (Decimals.Collection.Array) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Decimals.Collection.Array C.I.less_or_equal``() = + member __.``Decimals.Collection.Array C.I.less_or_equal``() = validate (Decimals.Collection.Array) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Decimals.Collection.Array C.I.greater_than``() = + member __.``Decimals.Collection.Array C.I.greater_than``() = validate (Decimals.Collection.Array) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Decimals.Collection.Array C.I.greater_or_equal``() = + member __.``Decimals.Collection.Array C.I.greater_or_equal``() = validate (Decimals.Collection.Array) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Decimals.Collection.Array C.N.equals``() = + member __.``Decimals.Collection.Array C.N.equals``() = validate (Decimals.Collection.Array) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.Array C.N.equal``() = + member __.``Decimals.Collection.Array C.N.equal``() = validate (Decimals.Collection.Array) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.Array C.N.not_equal``() = + member __.``Decimals.Collection.Array C.N.not_equal``() = validate (Decimals.Collection.Array) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Decimals.Collection.Array C.N.compare``() = + member __.``Decimals.Collection.Array C.N.compare``() = validate (Decimals.Collection.Array) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Decimals.Collection.Array C.N.less_than``() = + member __.``Decimals.Collection.Array C.N.less_than``() = validate (Decimals.Collection.Array) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Decimals.Collection.Array C.N.less_or_equal``() = + member __.``Decimals.Collection.Array C.N.less_or_equal``() = validate (Decimals.Collection.Array) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Decimals.Collection.Array C.N.greater_than``() = + member __.``Decimals.Collection.Array C.N.greater_than``() = validate (Decimals.Collection.Array) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Decimals.Collection.Array C.N.greater_or_equal``() = + member __.``Decimals.Collection.Array C.N.greater_or_equal``() = validate (Decimals.Collection.Array) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Decimals.Collection.OptionArray C.I.equals``() = + member __.``Decimals.Collection.OptionArray C.I.equals``() = validate (Decimals.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.OptionArray C.I.equal``() = + member __.``Decimals.Collection.OptionArray C.I.equal``() = validate (Decimals.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.OptionArray C.I.not_equal``() = + member __.``Decimals.Collection.OptionArray C.I.not_equal``() = validate (Decimals.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Decimals.Collection.OptionArray C.I.compare``() = + member __.``Decimals.Collection.OptionArray C.I.compare``() = validate (Decimals.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;1;1;1;1;1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 |] [] - member _.``Decimals.Collection.OptionArray C.I.less_than``() = + member __.``Decimals.Collection.OptionArray C.I.less_than``() = validate (Decimals.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member _.``Decimals.Collection.OptionArray C.I.less_or_equal``() = + member __.``Decimals.Collection.OptionArray C.I.less_or_equal``() = validate (Decimals.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member _.``Decimals.Collection.OptionArray C.I.greater_than``() = + member __.``Decimals.Collection.OptionArray C.I.greater_than``() = validate (Decimals.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member _.``Decimals.Collection.OptionArray C.I.greater_or_equal``() = + member __.``Decimals.Collection.OptionArray C.I.greater_or_equal``() = validate (Decimals.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member _.``Decimals.Collection.OptionArray C.N.equals``() = + member __.``Decimals.Collection.OptionArray C.N.equals``() = validate (Decimals.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.OptionArray C.N.equal``() = + member __.``Decimals.Collection.OptionArray C.N.equal``() = validate (Decimals.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.OptionArray C.N.not_equal``() = + member __.``Decimals.Collection.OptionArray C.N.not_equal``() = validate (Decimals.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``Decimals.Collection.OptionArray C.N.compare``() = + member __.``Decimals.Collection.OptionArray C.N.compare``() = validate (Decimals.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;1;1;1;1;1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 |] [] - member _.``Decimals.Collection.OptionArray C.N.less_than``() = + member __.``Decimals.Collection.OptionArray C.N.less_than``() = validate (Decimals.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member _.``Decimals.Collection.OptionArray C.N.less_or_equal``() = + member __.``Decimals.Collection.OptionArray C.N.less_or_equal``() = validate (Decimals.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member _.``Decimals.Collection.OptionArray C.N.greater_than``() = + member __.``Decimals.Collection.OptionArray C.N.greater_than``() = validate (Decimals.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member _.``Decimals.Collection.OptionArray C.N.greater_or_equal``() = + member __.``Decimals.Collection.OptionArray C.N.greater_or_equal``() = validate (Decimals.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member _.``Decimals.Collection.RefArray C.I.equals``() = + member __.``Decimals.Collection.RefArray C.I.equals``() = validate (Decimals.Collection.RefArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.RefArray C.I.equal``() = + member __.``Decimals.Collection.RefArray C.I.equal``() = validate (Decimals.Collection.RefArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.RefArray C.I.not_equal``() = + member __.``Decimals.Collection.RefArray C.I.not_equal``() = validate (Decimals.Collection.RefArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Decimals.Collection.RefArray C.I.compare``() = + member __.``Decimals.Collection.RefArray C.I.compare``() = validate (Decimals.Collection.RefArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Decimals.Collection.RefArray C.I.less_than``() = + member __.``Decimals.Collection.RefArray C.I.less_than``() = validate (Decimals.Collection.RefArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Decimals.Collection.RefArray C.I.less_or_equal``() = + member __.``Decimals.Collection.RefArray C.I.less_or_equal``() = validate (Decimals.Collection.RefArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Decimals.Collection.RefArray C.I.greater_than``() = + member __.``Decimals.Collection.RefArray C.I.greater_than``() = validate (Decimals.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Decimals.Collection.RefArray C.I.greater_or_equal``() = + member __.``Decimals.Collection.RefArray C.I.greater_or_equal``() = validate (Decimals.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Decimals.Collection.RefArray C.N.equals``() = + member __.``Decimals.Collection.RefArray C.N.equals``() = validate (Decimals.Collection.RefArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.RefArray C.N.equal``() = + member __.``Decimals.Collection.RefArray C.N.equal``() = validate (Decimals.Collection.RefArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.RefArray C.N.not_equal``() = + member __.``Decimals.Collection.RefArray C.N.not_equal``() = validate (Decimals.Collection.RefArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Decimals.Collection.RefArray C.N.compare``() = + member __.``Decimals.Collection.RefArray C.N.compare``() = validate (Decimals.Collection.RefArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Decimals.Collection.RefArray C.N.less_than``() = + member __.``Decimals.Collection.RefArray C.N.less_than``() = validate (Decimals.Collection.RefArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Decimals.Collection.RefArray C.N.less_or_equal``() = + member __.``Decimals.Collection.RefArray C.N.less_or_equal``() = validate (Decimals.Collection.RefArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Decimals.Collection.RefArray C.N.greater_than``() = + member __.``Decimals.Collection.RefArray C.N.greater_than``() = validate (Decimals.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Decimals.Collection.RefArray C.N.greater_or_equal``() = + member __.``Decimals.Collection.RefArray C.N.greater_or_equal``() = validate (Decimals.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Decimals.Collection.RefWrapArray C.I.equals``() = + member __.``Decimals.Collection.RefWrapArray C.I.equals``() = validate (Decimals.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.RefWrapArray C.I.equal``() = + member __.``Decimals.Collection.RefWrapArray C.I.equal``() = validate (Decimals.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.RefWrapArray C.I.not_equal``() = + member __.``Decimals.Collection.RefWrapArray C.I.not_equal``() = validate (Decimals.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Decimals.Collection.RefWrapArray C.I.compare``() = + member __.``Decimals.Collection.RefWrapArray C.I.compare``() = validate (Decimals.Collection.RefWrapArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Decimals.Collection.RefWrapArray C.I.less_than``() = + member __.``Decimals.Collection.RefWrapArray C.I.less_than``() = validate (Decimals.Collection.RefWrapArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Decimals.Collection.RefWrapArray C.I.less_or_equal``() = + member __.``Decimals.Collection.RefWrapArray C.I.less_or_equal``() = validate (Decimals.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Decimals.Collection.RefWrapArray C.I.greater_than``() = + member __.``Decimals.Collection.RefWrapArray C.I.greater_than``() = validate (Decimals.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Decimals.Collection.RefWrapArray C.I.greater_or_equal``() = + member __.``Decimals.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Decimals.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Decimals.Collection.RefWrapArray C.N.equals``() = + member __.``Decimals.Collection.RefWrapArray C.N.equals``() = validate (Decimals.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.RefWrapArray C.N.equal``() = + member __.``Decimals.Collection.RefWrapArray C.N.equal``() = validate (Decimals.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.RefWrapArray C.N.not_equal``() = + member __.``Decimals.Collection.RefWrapArray C.N.not_equal``() = validate (Decimals.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Decimals.Collection.RefWrapArray C.N.compare``() = + member __.``Decimals.Collection.RefWrapArray C.N.compare``() = validate (Decimals.Collection.RefWrapArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Decimals.Collection.RefWrapArray C.N.less_than``() = + member __.``Decimals.Collection.RefWrapArray C.N.less_than``() = validate (Decimals.Collection.RefWrapArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Decimals.Collection.RefWrapArray C.N.less_or_equal``() = + member __.``Decimals.Collection.RefWrapArray C.N.less_or_equal``() = validate (Decimals.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Decimals.Collection.RefWrapArray C.N.greater_than``() = + member __.``Decimals.Collection.RefWrapArray C.N.greater_than``() = validate (Decimals.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Decimals.Collection.RefWrapArray C.N.greater_or_equal``() = + member __.``Decimals.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Decimals.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Decimals.Collection.UnionArray C.I.equals``() = + member __.``Decimals.Collection.UnionArray C.I.equals``() = validate (Decimals.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -37867,7 +37867,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionArray C.I.equal``() = + member __.``Decimals.Collection.UnionArray C.I.equal``() = validate (Decimals.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -37903,7 +37903,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionArray C.I.not_equal``() = + member __.``Decimals.Collection.UnionArray C.I.not_equal``() = validate (Decimals.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -37939,7 +37939,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionArray C.I.compare``() = + member __.``Decimals.Collection.UnionArray C.I.compare``() = validate (Decimals.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -37975,7 +37975,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionArray C.I.less_than``() = + member __.``Decimals.Collection.UnionArray C.I.less_than``() = validate (Decimals.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -38011,7 +38011,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionArray C.I.less_or_equal``() = + member __.``Decimals.Collection.UnionArray C.I.less_or_equal``() = validate (Decimals.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -38047,7 +38047,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionArray C.I.greater_than``() = + member __.``Decimals.Collection.UnionArray C.I.greater_than``() = validate (Decimals.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -38083,7 +38083,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionArray C.I.greater_or_equal``() = + member __.``Decimals.Collection.UnionArray C.I.greater_or_equal``() = validate (Decimals.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -38119,7 +38119,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionArray C.N.equals``() = + member __.``Decimals.Collection.UnionArray C.N.equals``() = validate (Decimals.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -38155,7 +38155,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionArray C.N.equal``() = + member __.``Decimals.Collection.UnionArray C.N.equal``() = validate (Decimals.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -38191,7 +38191,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionArray C.N.not_equal``() = + member __.``Decimals.Collection.UnionArray C.N.not_equal``() = validate (Decimals.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -38227,7 +38227,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionArray C.N.compare``() = + member __.``Decimals.Collection.UnionArray C.N.compare``() = validate (Decimals.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -38263,7 +38263,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionArray C.N.less_than``() = + member __.``Decimals.Collection.UnionArray C.N.less_than``() = validate (Decimals.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -38299,7 +38299,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionArray C.N.less_or_equal``() = + member __.``Decimals.Collection.UnionArray C.N.less_or_equal``() = validate (Decimals.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -38335,7 +38335,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionArray C.N.greater_than``() = + member __.``Decimals.Collection.UnionArray C.N.greater_than``() = validate (Decimals.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -38371,7 +38371,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionArray C.N.greater_or_equal``() = + member __.``Decimals.Collection.UnionArray C.N.greater_or_equal``() = validate (Decimals.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -38407,7 +38407,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionWrapArray C.I.equals``() = + member __.``Decimals.Collection.UnionWrapArray C.I.equals``() = validate (Decimals.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -38443,7 +38443,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionWrapArray C.I.equal``() = + member __.``Decimals.Collection.UnionWrapArray C.I.equal``() = validate (Decimals.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -38479,7 +38479,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionWrapArray C.I.not_equal``() = + member __.``Decimals.Collection.UnionWrapArray C.I.not_equal``() = validate (Decimals.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -38515,7 +38515,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionWrapArray C.I.compare``() = + member __.``Decimals.Collection.UnionWrapArray C.I.compare``() = validate (Decimals.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -38551,7 +38551,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionWrapArray C.I.less_than``() = + member __.``Decimals.Collection.UnionWrapArray C.I.less_than``() = validate (Decimals.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -38587,7 +38587,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionWrapArray C.I.less_or_equal``() = + member __.``Decimals.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Decimals.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -38623,7 +38623,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionWrapArray C.I.greater_than``() = + member __.``Decimals.Collection.UnionWrapArray C.I.greater_than``() = validate (Decimals.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -38659,7 +38659,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionWrapArray C.I.greater_or_equal``() = + member __.``Decimals.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Decimals.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -38695,7 +38695,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionWrapArray C.N.equals``() = + member __.``Decimals.Collection.UnionWrapArray C.N.equals``() = validate (Decimals.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -38731,7 +38731,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionWrapArray C.N.equal``() = + member __.``Decimals.Collection.UnionWrapArray C.N.equal``() = validate (Decimals.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -38767,7 +38767,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionWrapArray C.N.not_equal``() = + member __.``Decimals.Collection.UnionWrapArray C.N.not_equal``() = validate (Decimals.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -38803,7 +38803,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionWrapArray C.N.compare``() = + member __.``Decimals.Collection.UnionWrapArray C.N.compare``() = validate (Decimals.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -38839,7 +38839,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionWrapArray C.N.less_than``() = + member __.``Decimals.Collection.UnionWrapArray C.N.less_than``() = validate (Decimals.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -38875,7 +38875,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionWrapArray C.N.less_or_equal``() = + member __.``Decimals.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Decimals.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -38911,7 +38911,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionWrapArray C.N.greater_than``() = + member __.``Decimals.Collection.UnionWrapArray C.N.greater_than``() = validate (Decimals.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -38947,7 +38947,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.UnionWrapArray C.N.greater_or_equal``() = + member __.``Decimals.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Decimals.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -38983,199 +38983,199 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ValueArray C.I.equals``() = + member __.``Decimals.Collection.ValueArray C.I.equals``() = validate (Decimals.Collection.ValueArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.ValueArray C.I.equal``() = + member __.``Decimals.Collection.ValueArray C.I.equal``() = validate (Decimals.Collection.ValueArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.ValueArray C.I.not_equal``() = + member __.``Decimals.Collection.ValueArray C.I.not_equal``() = validate (Decimals.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Decimals.Collection.ValueArray C.I.compare``() = + member __.``Decimals.Collection.ValueArray C.I.compare``() = validate (Decimals.Collection.ValueArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Decimals.Collection.ValueArray C.I.less_than``() = + member __.``Decimals.Collection.ValueArray C.I.less_than``() = validate (Decimals.Collection.ValueArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Decimals.Collection.ValueArray C.I.less_or_equal``() = + member __.``Decimals.Collection.ValueArray C.I.less_or_equal``() = validate (Decimals.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Decimals.Collection.ValueArray C.I.greater_than``() = + member __.``Decimals.Collection.ValueArray C.I.greater_than``() = validate (Decimals.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Decimals.Collection.ValueArray C.I.greater_or_equal``() = + member __.``Decimals.Collection.ValueArray C.I.greater_or_equal``() = validate (Decimals.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Decimals.Collection.ValueArray C.N.equals``() = + member __.``Decimals.Collection.ValueArray C.N.equals``() = validate (Decimals.Collection.ValueArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.ValueArray C.N.equal``() = + member __.``Decimals.Collection.ValueArray C.N.equal``() = validate (Decimals.Collection.ValueArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.ValueArray C.N.not_equal``() = + member __.``Decimals.Collection.ValueArray C.N.not_equal``() = validate (Decimals.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Decimals.Collection.ValueArray C.N.compare``() = + member __.``Decimals.Collection.ValueArray C.N.compare``() = validate (Decimals.Collection.ValueArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Decimals.Collection.ValueArray C.N.less_than``() = + member __.``Decimals.Collection.ValueArray C.N.less_than``() = validate (Decimals.Collection.ValueArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Decimals.Collection.ValueArray C.N.less_or_equal``() = + member __.``Decimals.Collection.ValueArray C.N.less_or_equal``() = validate (Decimals.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Decimals.Collection.ValueArray C.N.greater_than``() = + member __.``Decimals.Collection.ValueArray C.N.greater_than``() = validate (Decimals.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Decimals.Collection.ValueArray C.N.greater_or_equal``() = + member __.``Decimals.Collection.ValueArray C.N.greater_or_equal``() = validate (Decimals.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Decimals.Collection.ValueWrapArray C.I.equals``() = + member __.``Decimals.Collection.ValueWrapArray C.I.equals``() = validate (Decimals.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.ValueWrapArray C.I.equal``() = + member __.``Decimals.Collection.ValueWrapArray C.I.equal``() = validate (Decimals.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.ValueWrapArray C.I.not_equal``() = + member __.``Decimals.Collection.ValueWrapArray C.I.not_equal``() = validate (Decimals.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Decimals.Collection.ValueWrapArray C.I.compare``() = + member __.``Decimals.Collection.ValueWrapArray C.I.compare``() = validate (Decimals.Collection.ValueWrapArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Decimals.Collection.ValueWrapArray C.I.less_than``() = + member __.``Decimals.Collection.ValueWrapArray C.I.less_than``() = validate (Decimals.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Decimals.Collection.ValueWrapArray C.I.less_or_equal``() = + member __.``Decimals.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Decimals.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Decimals.Collection.ValueWrapArray C.I.greater_than``() = + member __.``Decimals.Collection.ValueWrapArray C.I.greater_than``() = validate (Decimals.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Decimals.Collection.ValueWrapArray C.I.greater_or_equal``() = + member __.``Decimals.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Decimals.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Decimals.Collection.ValueWrapArray C.N.equals``() = + member __.``Decimals.Collection.ValueWrapArray C.N.equals``() = validate (Decimals.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.ValueWrapArray C.N.equal``() = + member __.``Decimals.Collection.ValueWrapArray C.N.equal``() = validate (Decimals.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``Decimals.Collection.ValueWrapArray C.N.not_equal``() = + member __.``Decimals.Collection.ValueWrapArray C.N.not_equal``() = validate (Decimals.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``Decimals.Collection.ValueWrapArray C.N.compare``() = + member __.``Decimals.Collection.ValueWrapArray C.N.compare``() = validate (Decimals.Collection.ValueWrapArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member _.``Decimals.Collection.ValueWrapArray C.N.less_than``() = + member __.``Decimals.Collection.ValueWrapArray C.N.less_than``() = validate (Decimals.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member _.``Decimals.Collection.ValueWrapArray C.N.less_or_equal``() = + member __.``Decimals.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Decimals.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member _.``Decimals.Collection.ValueWrapArray C.N.greater_than``() = + member __.``Decimals.Collection.ValueWrapArray C.N.greater_than``() = validate (Decimals.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member _.``Decimals.Collection.ValueWrapArray C.N.greater_or_equal``() = + member __.``Decimals.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Decimals.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member _.``Decimals.Collection.ArrayArray C.I.equals``() = + member __.``Decimals.Collection.ArrayArray C.I.equals``() = validate (Decimals.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39183,7 +39183,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray C.I.equal``() = + member __.``Decimals.Collection.ArrayArray C.I.equal``() = validate (Decimals.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39191,7 +39191,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray C.I.not_equal``() = + member __.``Decimals.Collection.ArrayArray C.I.not_equal``() = validate (Decimals.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -39199,7 +39199,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray C.I.compare``() = + member __.``Decimals.Collection.ArrayArray C.I.compare``() = validate (Decimals.Collection.ArrayArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;1;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1; @@ -39207,7 +39207,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray C.I.less_than``() = + member __.``Decimals.Collection.ArrayArray C.I.less_than``() = validate (Decimals.Collection.ArrayArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; @@ -39215,7 +39215,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray C.I.less_or_equal``() = + member __.``Decimals.Collection.ArrayArray C.I.less_or_equal``() = validate (Decimals.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; @@ -39223,7 +39223,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray C.I.greater_than``() = + member __.``Decimals.Collection.ArrayArray C.I.greater_than``() = validate (Decimals.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; @@ -39231,7 +39231,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray C.I.greater_or_equal``() = + member __.``Decimals.Collection.ArrayArray C.I.greater_or_equal``() = validate (Decimals.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; @@ -39239,7 +39239,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray C.N.equals``() = + member __.``Decimals.Collection.ArrayArray C.N.equals``() = validate (Decimals.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39247,7 +39247,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray C.N.equal``() = + member __.``Decimals.Collection.ArrayArray C.N.equal``() = validate (Decimals.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39255,7 +39255,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray C.N.not_equal``() = + member __.``Decimals.Collection.ArrayArray C.N.not_equal``() = validate (Decimals.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -39263,7 +39263,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray C.N.compare``() = + member __.``Decimals.Collection.ArrayArray C.N.compare``() = validate (Decimals.Collection.ArrayArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;1;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1; @@ -39271,7 +39271,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray C.N.less_than``() = + member __.``Decimals.Collection.ArrayArray C.N.less_than``() = validate (Decimals.Collection.ArrayArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; @@ -39279,7 +39279,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray C.N.less_or_equal``() = + member __.``Decimals.Collection.ArrayArray C.N.less_or_equal``() = validate (Decimals.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; @@ -39287,7 +39287,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray C.N.greater_than``() = + member __.``Decimals.Collection.ArrayArray C.N.greater_than``() = validate (Decimals.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; @@ -39295,7 +39295,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray C.N.greater_or_equal``() = + member __.``Decimals.Collection.ArrayArray C.N.greater_or_equal``() = validate (Decimals.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; @@ -39303,7 +39303,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ListArray C.I.equals``() = + member __.``Decimals.Collection.ListArray C.I.equals``() = validate (Decimals.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39311,7 +39311,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ListArray C.I.equal``() = + member __.``Decimals.Collection.ListArray C.I.equal``() = validate (Decimals.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39319,7 +39319,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ListArray C.I.not_equal``() = + member __.``Decimals.Collection.ListArray C.I.not_equal``() = validate (Decimals.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -39327,7 +39327,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ListArray C.I.compare``() = + member __.``Decimals.Collection.ListArray C.I.compare``() = validate (Decimals.Collection.ListArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; 1;-1;1;1;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;1;-1;0;-1;-1; @@ -39335,7 +39335,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ListArray C.I.less_than``() = + member __.``Decimals.Collection.ListArray C.I.less_than``() = validate (Decimals.Collection.ListArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; @@ -39343,7 +39343,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ListArray C.I.less_or_equal``() = + member __.``Decimals.Collection.ListArray C.I.less_or_equal``() = validate (Decimals.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; @@ -39351,7 +39351,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ListArray C.I.greater_than``() = + member __.``Decimals.Collection.ListArray C.I.greater_than``() = validate (Decimals.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; @@ -39359,7 +39359,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ListArray C.I.greater_or_equal``() = + member __.``Decimals.Collection.ListArray C.I.greater_or_equal``() = validate (Decimals.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; @@ -39367,7 +39367,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ListArray C.N.equals``() = + member __.``Decimals.Collection.ListArray C.N.equals``() = validate (Decimals.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39375,7 +39375,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ListArray C.N.equal``() = + member __.``Decimals.Collection.ListArray C.N.equal``() = validate (Decimals.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39383,7 +39383,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ListArray C.N.not_equal``() = + member __.``Decimals.Collection.ListArray C.N.not_equal``() = validate (Decimals.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -39391,7 +39391,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ListArray C.N.compare``() = + member __.``Decimals.Collection.ListArray C.N.compare``() = validate (Decimals.Collection.ListArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; 1;-1;1;1;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;1;-1;0;-1;-1; @@ -39399,7 +39399,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ListArray C.N.less_than``() = + member __.``Decimals.Collection.ListArray C.N.less_than``() = validate (Decimals.Collection.ListArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; @@ -39407,7 +39407,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ListArray C.N.less_or_equal``() = + member __.``Decimals.Collection.ListArray C.N.less_or_equal``() = validate (Decimals.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; @@ -39415,7 +39415,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ListArray C.N.greater_than``() = + member __.``Decimals.Collection.ListArray C.N.greater_than``() = validate (Decimals.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; @@ -39423,7 +39423,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ListArray C.N.greater_or_equal``() = + member __.``Decimals.Collection.ListArray C.N.greater_or_equal``() = validate (Decimals.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; @@ -39431,7 +39431,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39439,7 +39439,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39447,7 +39447,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -39455,7 +39455,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; @@ -39463,7 +39463,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; @@ -39471,7 +39471,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; @@ -39479,7 +39479,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; @@ -39487,7 +39487,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; @@ -39495,7 +39495,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39503,7 +39503,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39511,7 +39511,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -39519,7 +39519,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; @@ -39527,7 +39527,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; @@ -39535,7 +39535,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; @@ -39543,7 +39543,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; @@ -39551,7 +39551,7 @@ type GeneratedTests () = |] [] - member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; @@ -39559,157 +39559,157 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.Array E.I.equals``() = + member __.``NullableDecimals.Collection.Array E.I.equals``() = validate (NullableDecimals.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.Array E.I.equal``() = + member __.``NullableDecimals.Collection.Array E.I.equal``() = validate (NullableDecimals.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.Array E.I.not_equal``() = + member __.``NullableDecimals.Collection.Array E.I.not_equal``() = validate (NullableDecimals.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableDecimals.Collection.Array E.N.equals``() = + member __.``NullableDecimals.Collection.Array E.N.equals``() = validate (NullableDecimals.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.Array E.N.equal``() = + member __.``NullableDecimals.Collection.Array E.N.equal``() = validate (NullableDecimals.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.Array E.N.not_equal``() = + member __.``NullableDecimals.Collection.Array E.N.not_equal``() = validate (NullableDecimals.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableDecimals.Collection.OptionArray E.I.equals``() = + member __.``NullableDecimals.Collection.OptionArray E.I.equals``() = validate (NullableDecimals.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.OptionArray E.I.equal``() = + member __.``NullableDecimals.Collection.OptionArray E.I.equal``() = validate (NullableDecimals.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.OptionArray E.I.not_equal``() = + member __.``NullableDecimals.Collection.OptionArray E.I.not_equal``() = validate (NullableDecimals.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``NullableDecimals.Collection.OptionArray E.N.equals``() = + member __.``NullableDecimals.Collection.OptionArray E.N.equals``() = validate (NullableDecimals.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.OptionArray E.N.equal``() = + member __.``NullableDecimals.Collection.OptionArray E.N.equal``() = validate (NullableDecimals.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.OptionArray E.N.not_equal``() = + member __.``NullableDecimals.Collection.OptionArray E.N.not_equal``() = validate (NullableDecimals.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member _.``NullableDecimals.Collection.RefArray E.I.equals``() = + member __.``NullableDecimals.Collection.RefArray E.I.equals``() = validate (NullableDecimals.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.RefArray E.I.equal``() = + member __.``NullableDecimals.Collection.RefArray E.I.equal``() = validate (NullableDecimals.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.RefArray E.I.not_equal``() = + member __.``NullableDecimals.Collection.RefArray E.I.not_equal``() = validate (NullableDecimals.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableDecimals.Collection.RefArray E.N.equals``() = + member __.``NullableDecimals.Collection.RefArray E.N.equals``() = validate (NullableDecimals.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.RefArray E.N.equal``() = + member __.``NullableDecimals.Collection.RefArray E.N.equal``() = validate (NullableDecimals.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.RefArray E.N.not_equal``() = + member __.``NullableDecimals.Collection.RefArray E.N.not_equal``() = validate (NullableDecimals.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableDecimals.Collection.RefWrapArray E.I.equals``() = + member __.``NullableDecimals.Collection.RefWrapArray E.I.equals``() = validate (NullableDecimals.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.RefWrapArray E.I.equal``() = + member __.``NullableDecimals.Collection.RefWrapArray E.I.equal``() = validate (NullableDecimals.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.RefWrapArray E.I.not_equal``() = + member __.``NullableDecimals.Collection.RefWrapArray E.I.not_equal``() = validate (NullableDecimals.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableDecimals.Collection.RefWrapArray E.N.equals``() = + member __.``NullableDecimals.Collection.RefWrapArray E.N.equals``() = validate (NullableDecimals.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.RefWrapArray E.N.equal``() = + member __.``NullableDecimals.Collection.RefWrapArray E.N.equal``() = validate (NullableDecimals.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.RefWrapArray E.N.not_equal``() = + member __.``NullableDecimals.Collection.RefWrapArray E.N.not_equal``() = validate (NullableDecimals.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableDecimals.Collection.UnionArray E.I.equals``() = + member __.``NullableDecimals.Collection.UnionArray E.I.equals``() = validate (NullableDecimals.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -39759,7 +39759,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.UnionArray E.I.equal``() = + member __.``NullableDecimals.Collection.UnionArray E.I.equal``() = validate (NullableDecimals.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -39809,7 +39809,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.UnionArray E.I.not_equal``() = + member __.``NullableDecimals.Collection.UnionArray E.I.not_equal``() = validate (NullableDecimals.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -39859,7 +39859,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.UnionArray E.N.equals``() = + member __.``NullableDecimals.Collection.UnionArray E.N.equals``() = validate (NullableDecimals.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -39909,7 +39909,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.UnionArray E.N.equal``() = + member __.``NullableDecimals.Collection.UnionArray E.N.equal``() = validate (NullableDecimals.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -39959,7 +39959,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.UnionArray E.N.not_equal``() = + member __.``NullableDecimals.Collection.UnionArray E.N.not_equal``() = validate (NullableDecimals.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -40009,7 +40009,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.UnionWrapArray E.I.equals``() = + member __.``NullableDecimals.Collection.UnionWrapArray E.I.equals``() = validate (NullableDecimals.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -40059,7 +40059,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.UnionWrapArray E.I.equal``() = + member __.``NullableDecimals.Collection.UnionWrapArray E.I.equal``() = validate (NullableDecimals.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -40109,7 +40109,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.UnionWrapArray E.I.not_equal``() = + member __.``NullableDecimals.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableDecimals.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -40159,7 +40159,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.UnionWrapArray E.N.equals``() = + member __.``NullableDecimals.Collection.UnionWrapArray E.N.equals``() = validate (NullableDecimals.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -40209,7 +40209,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.UnionWrapArray E.N.equal``() = + member __.``NullableDecimals.Collection.UnionWrapArray E.N.equal``() = validate (NullableDecimals.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -40259,7 +40259,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.UnionWrapArray E.N.not_equal``() = + member __.``NullableDecimals.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableDecimals.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -40309,79 +40309,79 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.ValueArray E.I.equals``() = + member __.``NullableDecimals.Collection.ValueArray E.I.equals``() = validate (NullableDecimals.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.ValueArray E.I.equal``() = + member __.``NullableDecimals.Collection.ValueArray E.I.equal``() = validate (NullableDecimals.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.ValueArray E.I.not_equal``() = + member __.``NullableDecimals.Collection.ValueArray E.I.not_equal``() = validate (NullableDecimals.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableDecimals.Collection.ValueArray E.N.equals``() = + member __.``NullableDecimals.Collection.ValueArray E.N.equals``() = validate (NullableDecimals.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.ValueArray E.N.equal``() = + member __.``NullableDecimals.Collection.ValueArray E.N.equal``() = validate (NullableDecimals.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.ValueArray E.N.not_equal``() = + member __.``NullableDecimals.Collection.ValueArray E.N.not_equal``() = validate (NullableDecimals.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableDecimals.Collection.ValueWrapArray E.I.equals``() = + member __.``NullableDecimals.Collection.ValueWrapArray E.I.equals``() = validate (NullableDecimals.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.ValueWrapArray E.I.equal``() = + member __.``NullableDecimals.Collection.ValueWrapArray E.I.equal``() = validate (NullableDecimals.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.ValueWrapArray E.I.not_equal``() = + member __.``NullableDecimals.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableDecimals.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableDecimals.Collection.ValueWrapArray E.N.equals``() = + member __.``NullableDecimals.Collection.ValueWrapArray E.N.equals``() = validate (NullableDecimals.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.ValueWrapArray E.N.equal``() = + member __.``NullableDecimals.Collection.ValueWrapArray E.N.equal``() = validate (NullableDecimals.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``NullableDecimals.Collection.ValueWrapArray E.N.not_equal``() = + member __.``NullableDecimals.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableDecimals.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``NullableDecimals.Collection.ArrayArray E.I.equals``() = + member __.``NullableDecimals.Collection.ArrayArray E.I.equals``() = validate (NullableDecimals.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -40390,7 +40390,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.ArrayArray E.I.equal``() = + member __.``NullableDecimals.Collection.ArrayArray E.I.equal``() = validate (NullableDecimals.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -40399,7 +40399,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.ArrayArray E.I.not_equal``() = + member __.``NullableDecimals.Collection.ArrayArray E.I.not_equal``() = validate (NullableDecimals.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -40408,7 +40408,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.ArrayArray E.N.equals``() = + member __.``NullableDecimals.Collection.ArrayArray E.N.equals``() = validate (NullableDecimals.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -40417,7 +40417,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.ArrayArray E.N.equal``() = + member __.``NullableDecimals.Collection.ArrayArray E.N.equal``() = validate (NullableDecimals.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -40426,7 +40426,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.ArrayArray E.N.not_equal``() = + member __.``NullableDecimals.Collection.ArrayArray E.N.not_equal``() = validate (NullableDecimals.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -40435,7 +40435,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.ListArray E.I.equals``() = + member __.``NullableDecimals.Collection.ListArray E.I.equals``() = validate (NullableDecimals.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -40444,7 +40444,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.ListArray E.I.equal``() = + member __.``NullableDecimals.Collection.ListArray E.I.equal``() = validate (NullableDecimals.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -40453,7 +40453,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.ListArray E.I.not_equal``() = + member __.``NullableDecimals.Collection.ListArray E.I.not_equal``() = validate (NullableDecimals.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -40462,7 +40462,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.ListArray E.N.equals``() = + member __.``NullableDecimals.Collection.ListArray E.N.equals``() = validate (NullableDecimals.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -40471,7 +40471,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.ListArray E.N.equal``() = + member __.``NullableDecimals.Collection.ListArray E.N.equal``() = validate (NullableDecimals.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -40480,7 +40480,7 @@ type GeneratedTests () = |] [] - member _.``NullableDecimals.Collection.ListArray E.N.not_equal``() = + member __.``NullableDecimals.Collection.ListArray E.N.not_equal``() = validate (NullableDecimals.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -40489,7 +40489,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.Array C.I.equals``() = + member __.``Floats.Collection.Array C.I.equals``() = validate (Floats.Collection.Array) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40497,7 +40497,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.Array C.I.equal``() = + member __.``Floats.Collection.Array C.I.equal``() = validate (Floats.Collection.Array) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40505,7 +40505,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.Array C.I.not_equal``() = + member __.``Floats.Collection.Array C.I.not_equal``() = validate (Floats.Collection.Array) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -40513,7 +40513,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.Array C.I.compare``() = + member __.``Floats.Collection.Array C.I.compare``() = validate (Floats.Collection.Array) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -40521,7 +40521,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.Array C.I.less_than``() = + member __.``Floats.Collection.Array C.I.less_than``() = validate (Floats.Collection.Array) C.I.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -40529,7 +40529,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.Array C.I.less_or_equal``() = + member __.``Floats.Collection.Array C.I.less_or_equal``() = validate (Floats.Collection.Array) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -40537,7 +40537,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.Array C.I.greater_than``() = + member __.``Floats.Collection.Array C.I.greater_than``() = validate (Floats.Collection.Array) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -40545,7 +40545,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.Array C.I.greater_or_equal``() = + member __.``Floats.Collection.Array C.I.greater_or_equal``() = validate (Floats.Collection.Array) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -40553,7 +40553,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.Array C.N.equals``() = + member __.``Floats.Collection.Array C.N.equals``() = validate (Floats.Collection.Array) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40561,7 +40561,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.Array C.N.equal``() = + member __.``Floats.Collection.Array C.N.equal``() = validate (Floats.Collection.Array) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40569,7 +40569,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.Array C.N.not_equal``() = + member __.``Floats.Collection.Array C.N.not_equal``() = validate (Floats.Collection.Array) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -40577,7 +40577,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.Array C.N.compare``() = + member __.``Floats.Collection.Array C.N.compare``() = validate (Floats.Collection.Array) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -40585,7 +40585,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.Array C.N.less_than``() = + member __.``Floats.Collection.Array C.N.less_than``() = validate (Floats.Collection.Array) C.N.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -40593,7 +40593,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.Array C.N.less_or_equal``() = + member __.``Floats.Collection.Array C.N.less_or_equal``() = validate (Floats.Collection.Array) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -40601,7 +40601,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.Array C.N.greater_than``() = + member __.``Floats.Collection.Array C.N.greater_than``() = validate (Floats.Collection.Array) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -40609,7 +40609,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.Array C.N.greater_or_equal``() = + member __.``Floats.Collection.Array C.N.greater_or_equal``() = validate (Floats.Collection.Array) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -40617,7 +40617,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.OptionArray C.I.equals``() = + member __.``Floats.Collection.OptionArray C.I.equals``() = validate (Floats.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -40625,7 +40625,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.OptionArray C.I.equal``() = + member __.``Floats.Collection.OptionArray C.I.equal``() = validate (Floats.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -40633,7 +40633,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.OptionArray C.I.not_equal``() = + member __.``Floats.Collection.OptionArray C.I.not_equal``() = validate (Floats.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -40641,7 +40641,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.OptionArray C.I.compare``() = + member __.``Floats.Collection.OptionArray C.I.compare``() = validate (Floats.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;1;-1;-1;-1;-1;1;1;0;1;1;1;-1;1;1;1;1;1;-1;0;1;1;-1;1;1;-1; 1;-1;-1;-1;0;-1;-1;-1;-1;-1;1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;-1;-1;1;1;-1;0;-1;-1; @@ -40649,7 +40649,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.OptionArray C.I.less_than``() = + member __.``Floats.Collection.OptionArray C.I.less_than``() = validate (Floats.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;1;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1; @@ -40657,7 +40657,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.OptionArray C.I.less_or_equal``() = + member __.``Floats.Collection.OptionArray C.I.less_or_equal``() = validate (Floats.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;1;1;0;0;1;1;1;1;0;0;1;0;0;0;1;0;0;0;0;0;1;1;0;0;1;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;1;1;1;1; @@ -40665,7 +40665,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.OptionArray C.I.greater_than``() = + member __.``Floats.Collection.OptionArray C.I.greater_than``() = validate (Floats.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;0;1;0;1;0;1;1;1;1;1;0;0;0;1;0;1;1;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;0;0;1;0;0;0;0; @@ -40673,7 +40673,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.OptionArray C.I.greater_or_equal``() = + member __.``Floats.Collection.OptionArray C.I.greater_or_equal``() = validate (Floats.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;1;0;1;0;1;1;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;1;0;1;0;0; @@ -40681,7 +40681,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.OptionArray C.N.equals``() = + member __.``Floats.Collection.OptionArray C.N.equals``() = validate (Floats.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -40689,7 +40689,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.OptionArray C.N.equal``() = + member __.``Floats.Collection.OptionArray C.N.equal``() = validate (Floats.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -40697,7 +40697,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.OptionArray C.N.not_equal``() = + member __.``Floats.Collection.OptionArray C.N.not_equal``() = validate (Floats.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -40705,7 +40705,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.OptionArray C.N.compare``() = + member __.``Floats.Collection.OptionArray C.N.compare``() = validate (Floats.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;1;-1;-1;-1;-1;1;1;0;1;1;1;-1;1;1;1;1;1;-1;0;1;1;-1;1;1;-1; 1;-1;-1;-1;0;-1;-1;-1;-1;-1;1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;-1;-1;1;1;-1;0;-1;-1; @@ -40713,7 +40713,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.OptionArray C.N.less_than``() = + member __.``Floats.Collection.OptionArray C.N.less_than``() = validate (Floats.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;1;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1; @@ -40721,7 +40721,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.OptionArray C.N.less_or_equal``() = + member __.``Floats.Collection.OptionArray C.N.less_or_equal``() = validate (Floats.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;1;1;0;0;1;1;1;1;0;0;1;0;0;0;1;0;0;0;0;0;1;1;0;0;1;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;1;1;1;1; @@ -40729,7 +40729,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.OptionArray C.N.greater_than``() = + member __.``Floats.Collection.OptionArray C.N.greater_than``() = validate (Floats.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;0;1;0;1;0;1;1;1;1;1;0;0;0;1;0;1;1;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;0;0;1;0;0;0;0; @@ -40737,7 +40737,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.OptionArray C.N.greater_or_equal``() = + member __.``Floats.Collection.OptionArray C.N.greater_or_equal``() = validate (Floats.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;1;0;1;0;1;1;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;1;0;1;0;0; @@ -40745,7 +40745,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefArray C.I.equals``() = + member __.``Floats.Collection.RefArray C.I.equals``() = validate (Floats.Collection.RefArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40753,7 +40753,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefArray C.I.equal``() = + member __.``Floats.Collection.RefArray C.I.equal``() = validate (Floats.Collection.RefArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40761,7 +40761,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefArray C.I.not_equal``() = + member __.``Floats.Collection.RefArray C.I.not_equal``() = validate (Floats.Collection.RefArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -40769,7 +40769,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefArray C.I.compare``() = + member __.``Floats.Collection.RefArray C.I.compare``() = validate (Floats.Collection.RefArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -40777,7 +40777,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefArray C.I.less_than``() = + member __.``Floats.Collection.RefArray C.I.less_than``() = validate (Floats.Collection.RefArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -40785,7 +40785,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefArray C.I.less_or_equal``() = + member __.``Floats.Collection.RefArray C.I.less_or_equal``() = validate (Floats.Collection.RefArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -40793,7 +40793,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefArray C.I.greater_than``() = + member __.``Floats.Collection.RefArray C.I.greater_than``() = validate (Floats.Collection.RefArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -40801,7 +40801,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefArray C.I.greater_or_equal``() = + member __.``Floats.Collection.RefArray C.I.greater_or_equal``() = validate (Floats.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -40809,7 +40809,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefArray C.N.equals``() = + member __.``Floats.Collection.RefArray C.N.equals``() = validate (Floats.Collection.RefArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40817,7 +40817,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefArray C.N.equal``() = + member __.``Floats.Collection.RefArray C.N.equal``() = validate (Floats.Collection.RefArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40825,7 +40825,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefArray C.N.not_equal``() = + member __.``Floats.Collection.RefArray C.N.not_equal``() = validate (Floats.Collection.RefArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -40833,7 +40833,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefArray C.N.compare``() = + member __.``Floats.Collection.RefArray C.N.compare``() = validate (Floats.Collection.RefArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -40841,7 +40841,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefArray C.N.less_than``() = + member __.``Floats.Collection.RefArray C.N.less_than``() = validate (Floats.Collection.RefArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -40849,7 +40849,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefArray C.N.less_or_equal``() = + member __.``Floats.Collection.RefArray C.N.less_or_equal``() = validate (Floats.Collection.RefArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -40857,7 +40857,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefArray C.N.greater_than``() = + member __.``Floats.Collection.RefArray C.N.greater_than``() = validate (Floats.Collection.RefArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -40865,7 +40865,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefArray C.N.greater_or_equal``() = + member __.``Floats.Collection.RefArray C.N.greater_or_equal``() = validate (Floats.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -40873,7 +40873,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefWrapArray C.I.equals``() = + member __.``Floats.Collection.RefWrapArray C.I.equals``() = validate (Floats.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40881,7 +40881,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefWrapArray C.I.equal``() = + member __.``Floats.Collection.RefWrapArray C.I.equal``() = validate (Floats.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40889,7 +40889,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefWrapArray C.I.not_equal``() = + member __.``Floats.Collection.RefWrapArray C.I.not_equal``() = validate (Floats.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -40897,7 +40897,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefWrapArray C.I.compare``() = + member __.``Floats.Collection.RefWrapArray C.I.compare``() = validate (Floats.Collection.RefWrapArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -40905,7 +40905,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefWrapArray C.I.less_than``() = + member __.``Floats.Collection.RefWrapArray C.I.less_than``() = validate (Floats.Collection.RefWrapArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -40913,7 +40913,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefWrapArray C.I.less_or_equal``() = + member __.``Floats.Collection.RefWrapArray C.I.less_or_equal``() = validate (Floats.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -40921,7 +40921,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefWrapArray C.I.greater_than``() = + member __.``Floats.Collection.RefWrapArray C.I.greater_than``() = validate (Floats.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -40929,7 +40929,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefWrapArray C.I.greater_or_equal``() = + member __.``Floats.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Floats.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -40937,7 +40937,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefWrapArray C.N.equals``() = + member __.``Floats.Collection.RefWrapArray C.N.equals``() = validate (Floats.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40945,7 +40945,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefWrapArray C.N.equal``() = + member __.``Floats.Collection.RefWrapArray C.N.equal``() = validate (Floats.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40953,7 +40953,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefWrapArray C.N.not_equal``() = + member __.``Floats.Collection.RefWrapArray C.N.not_equal``() = validate (Floats.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -40961,7 +40961,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefWrapArray C.N.compare``() = + member __.``Floats.Collection.RefWrapArray C.N.compare``() = validate (Floats.Collection.RefWrapArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -40969,7 +40969,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefWrapArray C.N.less_than``() = + member __.``Floats.Collection.RefWrapArray C.N.less_than``() = validate (Floats.Collection.RefWrapArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -40977,7 +40977,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefWrapArray C.N.less_or_equal``() = + member __.``Floats.Collection.RefWrapArray C.N.less_or_equal``() = validate (Floats.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -40985,7 +40985,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefWrapArray C.N.greater_than``() = + member __.``Floats.Collection.RefWrapArray C.N.greater_than``() = validate (Floats.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -40993,7 +40993,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.RefWrapArray C.N.greater_or_equal``() = + member __.``Floats.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Floats.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -41001,7 +41001,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionArray C.I.equals``() = + member __.``Floats.Collection.UnionArray C.I.equals``() = validate (Floats.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -41106,7 +41106,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionArray C.I.equal``() = + member __.``Floats.Collection.UnionArray C.I.equal``() = validate (Floats.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -41211,7 +41211,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionArray C.I.not_equal``() = + member __.``Floats.Collection.UnionArray C.I.not_equal``() = validate (Floats.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -41316,7 +41316,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionArray C.I.compare``() = + member __.``Floats.Collection.UnionArray C.I.compare``() = validate (Floats.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -41421,7 +41421,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionArray C.I.less_than``() = + member __.``Floats.Collection.UnionArray C.I.less_than``() = validate (Floats.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -41526,7 +41526,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionArray C.I.less_or_equal``() = + member __.``Floats.Collection.UnionArray C.I.less_or_equal``() = validate (Floats.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -41631,7 +41631,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionArray C.I.greater_than``() = + member __.``Floats.Collection.UnionArray C.I.greater_than``() = validate (Floats.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -41736,7 +41736,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionArray C.I.greater_or_equal``() = + member __.``Floats.Collection.UnionArray C.I.greater_or_equal``() = validate (Floats.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -41841,7 +41841,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionArray C.N.equals``() = + member __.``Floats.Collection.UnionArray C.N.equals``() = validate (Floats.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -41946,7 +41946,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionArray C.N.equal``() = + member __.``Floats.Collection.UnionArray C.N.equal``() = validate (Floats.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -42051,7 +42051,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionArray C.N.not_equal``() = + member __.``Floats.Collection.UnionArray C.N.not_equal``() = validate (Floats.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -42156,7 +42156,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionArray C.N.compare``() = + member __.``Floats.Collection.UnionArray C.N.compare``() = validate (Floats.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -42261,7 +42261,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionArray C.N.less_than``() = + member __.``Floats.Collection.UnionArray C.N.less_than``() = validate (Floats.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -42366,7 +42366,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionArray C.N.less_or_equal``() = + member __.``Floats.Collection.UnionArray C.N.less_or_equal``() = validate (Floats.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -42471,7 +42471,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionArray C.N.greater_than``() = + member __.``Floats.Collection.UnionArray C.N.greater_than``() = validate (Floats.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -42576,7 +42576,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionArray C.N.greater_or_equal``() = + member __.``Floats.Collection.UnionArray C.N.greater_or_equal``() = validate (Floats.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -42681,7 +42681,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionWrapArray C.I.equals``() = + member __.``Floats.Collection.UnionWrapArray C.I.equals``() = validate (Floats.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -42786,7 +42786,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionWrapArray C.I.equal``() = + member __.``Floats.Collection.UnionWrapArray C.I.equal``() = validate (Floats.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -42891,7 +42891,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionWrapArray C.I.not_equal``() = + member __.``Floats.Collection.UnionWrapArray C.I.not_equal``() = validate (Floats.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -42996,7 +42996,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionWrapArray C.I.compare``() = + member __.``Floats.Collection.UnionWrapArray C.I.compare``() = validate (Floats.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -43101,7 +43101,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionWrapArray C.I.less_than``() = + member __.``Floats.Collection.UnionWrapArray C.I.less_than``() = validate (Floats.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -43206,7 +43206,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionWrapArray C.I.less_or_equal``() = + member __.``Floats.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Floats.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -43311,7 +43311,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionWrapArray C.I.greater_than``() = + member __.``Floats.Collection.UnionWrapArray C.I.greater_than``() = validate (Floats.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -43416,7 +43416,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionWrapArray C.I.greater_or_equal``() = + member __.``Floats.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Floats.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -43521,7 +43521,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionWrapArray C.N.equals``() = + member __.``Floats.Collection.UnionWrapArray C.N.equals``() = validate (Floats.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -43626,7 +43626,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionWrapArray C.N.equal``() = + member __.``Floats.Collection.UnionWrapArray C.N.equal``() = validate (Floats.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -43731,7 +43731,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionWrapArray C.N.not_equal``() = + member __.``Floats.Collection.UnionWrapArray C.N.not_equal``() = validate (Floats.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -43836,7 +43836,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionWrapArray C.N.compare``() = + member __.``Floats.Collection.UnionWrapArray C.N.compare``() = validate (Floats.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -43941,7 +43941,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionWrapArray C.N.less_than``() = + member __.``Floats.Collection.UnionWrapArray C.N.less_than``() = validate (Floats.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -44046,7 +44046,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionWrapArray C.N.less_or_equal``() = + member __.``Floats.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Floats.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -44151,7 +44151,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionWrapArray C.N.greater_than``() = + member __.``Floats.Collection.UnionWrapArray C.N.greater_than``() = validate (Floats.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -44256,7 +44256,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.UnionWrapArray C.N.greater_or_equal``() = + member __.``Floats.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Floats.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -44361,7 +44361,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueArray C.I.equals``() = + member __.``Floats.Collection.ValueArray C.I.equals``() = validate (Floats.Collection.ValueArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -44369,7 +44369,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueArray C.I.equal``() = + member __.``Floats.Collection.ValueArray C.I.equal``() = validate (Floats.Collection.ValueArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -44377,7 +44377,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueArray C.I.not_equal``() = + member __.``Floats.Collection.ValueArray C.I.not_equal``() = validate (Floats.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -44385,7 +44385,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueArray C.I.compare``() = + member __.``Floats.Collection.ValueArray C.I.compare``() = validate (Floats.Collection.ValueArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -44393,7 +44393,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueArray C.I.less_than``() = + member __.``Floats.Collection.ValueArray C.I.less_than``() = validate (Floats.Collection.ValueArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -44401,7 +44401,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueArray C.I.less_or_equal``() = + member __.``Floats.Collection.ValueArray C.I.less_or_equal``() = validate (Floats.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -44409,7 +44409,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueArray C.I.greater_than``() = + member __.``Floats.Collection.ValueArray C.I.greater_than``() = validate (Floats.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -44417,7 +44417,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueArray C.I.greater_or_equal``() = + member __.``Floats.Collection.ValueArray C.I.greater_or_equal``() = validate (Floats.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -44425,7 +44425,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueArray C.N.equals``() = + member __.``Floats.Collection.ValueArray C.N.equals``() = validate (Floats.Collection.ValueArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -44433,7 +44433,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueArray C.N.equal``() = + member __.``Floats.Collection.ValueArray C.N.equal``() = validate (Floats.Collection.ValueArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -44441,7 +44441,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueArray C.N.not_equal``() = + member __.``Floats.Collection.ValueArray C.N.not_equal``() = validate (Floats.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -44449,7 +44449,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueArray C.N.compare``() = + member __.``Floats.Collection.ValueArray C.N.compare``() = validate (Floats.Collection.ValueArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -44457,7 +44457,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueArray C.N.less_than``() = + member __.``Floats.Collection.ValueArray C.N.less_than``() = validate (Floats.Collection.ValueArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -44465,7 +44465,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueArray C.N.less_or_equal``() = + member __.``Floats.Collection.ValueArray C.N.less_or_equal``() = validate (Floats.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -44473,7 +44473,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueArray C.N.greater_than``() = + member __.``Floats.Collection.ValueArray C.N.greater_than``() = validate (Floats.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -44481,7 +44481,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueArray C.N.greater_or_equal``() = + member __.``Floats.Collection.ValueArray C.N.greater_or_equal``() = validate (Floats.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -44489,7 +44489,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueWrapArray C.I.equals``() = + member __.``Floats.Collection.ValueWrapArray C.I.equals``() = validate (Floats.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -44497,7 +44497,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueWrapArray C.I.equal``() = + member __.``Floats.Collection.ValueWrapArray C.I.equal``() = validate (Floats.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -44505,7 +44505,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueWrapArray C.I.not_equal``() = + member __.``Floats.Collection.ValueWrapArray C.I.not_equal``() = validate (Floats.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -44513,7 +44513,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueWrapArray C.I.compare``() = + member __.``Floats.Collection.ValueWrapArray C.I.compare``() = validate (Floats.Collection.ValueWrapArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -44521,7 +44521,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueWrapArray C.I.less_than``() = + member __.``Floats.Collection.ValueWrapArray C.I.less_than``() = validate (Floats.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -44529,7 +44529,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueWrapArray C.I.less_or_equal``() = + member __.``Floats.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Floats.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -44537,7 +44537,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueWrapArray C.I.greater_than``() = + member __.``Floats.Collection.ValueWrapArray C.I.greater_than``() = validate (Floats.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -44545,7 +44545,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueWrapArray C.I.greater_or_equal``() = + member __.``Floats.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Floats.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -44553,7 +44553,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueWrapArray C.N.equals``() = + member __.``Floats.Collection.ValueWrapArray C.N.equals``() = validate (Floats.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -44561,7 +44561,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueWrapArray C.N.equal``() = + member __.``Floats.Collection.ValueWrapArray C.N.equal``() = validate (Floats.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -44569,7 +44569,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueWrapArray C.N.not_equal``() = + member __.``Floats.Collection.ValueWrapArray C.N.not_equal``() = validate (Floats.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -44577,7 +44577,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueWrapArray C.N.compare``() = + member __.``Floats.Collection.ValueWrapArray C.N.compare``() = validate (Floats.Collection.ValueWrapArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -44585,7 +44585,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueWrapArray C.N.less_than``() = + member __.``Floats.Collection.ValueWrapArray C.N.less_than``() = validate (Floats.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -44593,7 +44593,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueWrapArray C.N.less_or_equal``() = + member __.``Floats.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Floats.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -44601,7 +44601,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueWrapArray C.N.greater_than``() = + member __.``Floats.Collection.ValueWrapArray C.N.greater_than``() = validate (Floats.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -44609,7 +44609,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ValueWrapArray C.N.greater_or_equal``() = + member __.``Floats.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Floats.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -44617,7 +44617,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray C.I.equals``() = + member __.``Floats.Collection.ArrayArray C.I.equals``() = validate (Floats.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44631,7 +44631,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray C.I.equal``() = + member __.``Floats.Collection.ArrayArray C.I.equal``() = validate (Floats.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44645,7 +44645,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray C.I.not_equal``() = + member __.``Floats.Collection.ArrayArray C.I.not_equal``() = validate (Floats.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -44659,7 +44659,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray C.I.compare``() = + member __.``Floats.Collection.ArrayArray C.I.compare``() = validate (Floats.Collection.ArrayArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;0;1; 1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -44673,7 +44673,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray C.I.less_than``() = + member __.``Floats.Collection.ArrayArray C.I.less_than``() = validate (Floats.Collection.ArrayArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;0;0; 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; @@ -44687,7 +44687,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray C.I.less_or_equal``() = + member __.``Floats.Collection.ArrayArray C.I.less_or_equal``() = validate (Floats.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1;0; 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -44701,7 +44701,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray C.I.greater_than``() = + member __.``Floats.Collection.ArrayArray C.I.greater_than``() = validate (Floats.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0; 1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -44715,7 +44715,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray C.I.greater_or_equal``() = + member __.``Floats.Collection.ArrayArray C.I.greater_or_equal``() = validate (Floats.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;1;0; 1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44729,7 +44729,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray C.N.equals``() = + member __.``Floats.Collection.ArrayArray C.N.equals``() = validate (Floats.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44743,7 +44743,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray C.N.equal``() = + member __.``Floats.Collection.ArrayArray C.N.equal``() = validate (Floats.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44757,7 +44757,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray C.N.not_equal``() = + member __.``Floats.Collection.ArrayArray C.N.not_equal``() = validate (Floats.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -44771,7 +44771,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray C.N.compare``() = + member __.``Floats.Collection.ArrayArray C.N.compare``() = validate (Floats.Collection.ArrayArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;0;1; 1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -44785,7 +44785,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray C.N.less_than``() = + member __.``Floats.Collection.ArrayArray C.N.less_than``() = validate (Floats.Collection.ArrayArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;0;0; 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; @@ -44799,7 +44799,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray C.N.less_or_equal``() = + member __.``Floats.Collection.ArrayArray C.N.less_or_equal``() = validate (Floats.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1;0; 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -44813,7 +44813,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray C.N.greater_than``() = + member __.``Floats.Collection.ArrayArray C.N.greater_than``() = validate (Floats.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0; 1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -44827,7 +44827,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray C.N.greater_or_equal``() = + member __.``Floats.Collection.ArrayArray C.N.greater_or_equal``() = validate (Floats.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;1;0; 1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44841,7 +44841,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ListArray C.I.equals``() = + member __.``Floats.Collection.ListArray C.I.equals``() = validate (Floats.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44855,7 +44855,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ListArray C.I.equal``() = + member __.``Floats.Collection.ListArray C.I.equal``() = validate (Floats.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44869,7 +44869,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ListArray C.I.not_equal``() = + member __.``Floats.Collection.ListArray C.I.not_equal``() = validate (Floats.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -44883,7 +44883,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ListArray C.I.compare``() = + member __.``Floats.Collection.ListArray C.I.compare``() = validate (Floats.Collection.ListArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;1;1;1;-1;1;1;1;1;-1;0;1; 1;-1;1;1;-1;1;-1;-1;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -44897,7 +44897,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ListArray C.I.less_than``() = + member __.``Floats.Collection.ListArray C.I.less_than``() = validate (Floats.Collection.ListArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;0;0; 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1; @@ -44911,7 +44911,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ListArray C.I.less_or_equal``() = + member __.``Floats.Collection.ListArray C.I.less_or_equal``() = validate (Floats.Collection.ListArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;1;0; 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1; @@ -44925,7 +44925,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ListArray C.I.greater_than``() = + member __.``Floats.Collection.ListArray C.I.greater_than``() = validate (Floats.Collection.ListArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;0;0; 1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -44939,7 +44939,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ListArray C.I.greater_or_equal``() = + member __.``Floats.Collection.ListArray C.I.greater_or_equal``() = validate (Floats.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;1;0; 1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44953,7 +44953,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ListArray C.N.equals``() = + member __.``Floats.Collection.ListArray C.N.equals``() = validate (Floats.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44967,7 +44967,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ListArray C.N.equal``() = + member __.``Floats.Collection.ListArray C.N.equal``() = validate (Floats.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44981,7 +44981,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ListArray C.N.not_equal``() = + member __.``Floats.Collection.ListArray C.N.not_equal``() = validate (Floats.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -44995,7 +44995,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ListArray C.N.compare``() = + member __.``Floats.Collection.ListArray C.N.compare``() = validate (Floats.Collection.ListArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;1;1;1;-1;1;1;1;1;-1;0;1; 1;-1;1;1;-1;1;-1;-1;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -45009,7 +45009,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ListArray C.N.less_than``() = + member __.``Floats.Collection.ListArray C.N.less_than``() = validate (Floats.Collection.ListArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;0;0; 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1; @@ -45023,7 +45023,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ListArray C.N.less_or_equal``() = + member __.``Floats.Collection.ListArray C.N.less_or_equal``() = validate (Floats.Collection.ListArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;1;0; 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1; @@ -45037,7 +45037,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ListArray C.N.greater_than``() = + member __.``Floats.Collection.ListArray C.N.greater_than``() = validate (Floats.Collection.ListArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;0;0; 1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -45051,7 +45051,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ListArray C.N.greater_or_equal``() = + member __.``Floats.Collection.ListArray C.N.greater_or_equal``() = validate (Floats.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;1;0; 1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -45065,7 +45065,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -45079,7 +45079,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -45093,7 +45093,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -45107,7 +45107,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;-1;0;1; 1;-1;1;1;-1;1;-1;1;1;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -45121,7 +45121,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; @@ -45135,7 +45135,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0; 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -45149,7 +45149,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1; 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -45163,7 +45163,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; @@ -45177,7 +45177,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -45191,7 +45191,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -45205,7 +45205,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -45219,7 +45219,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;-1;0;1; 1;-1;1;1;-1;1;-1;1;1;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -45233,7 +45233,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; @@ -45247,7 +45247,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0; 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -45261,7 +45261,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1; 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -45275,7 +45275,7 @@ type GeneratedTests () = |] [] - member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; @@ -45289,7 +45289,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.Array E.I.equals``() = + member __.``NullableFloats.Collection.Array E.I.equals``() = validate (NullableFloats.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45297,7 +45297,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.Array E.I.equal``() = + member __.``NullableFloats.Collection.Array E.I.equal``() = validate (NullableFloats.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45305,7 +45305,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.Array E.I.not_equal``() = + member __.``NullableFloats.Collection.Array E.I.not_equal``() = validate (NullableFloats.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -45313,7 +45313,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.Array E.N.equals``() = + member __.``NullableFloats.Collection.Array E.N.equals``() = validate (NullableFloats.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45321,7 +45321,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.Array E.N.equal``() = + member __.``NullableFloats.Collection.Array E.N.equal``() = validate (NullableFloats.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45329,7 +45329,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.Array E.N.not_equal``() = + member __.``NullableFloats.Collection.Array E.N.not_equal``() = validate (NullableFloats.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -45337,7 +45337,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.OptionArray E.I.equals``() = + member __.``NullableFloats.Collection.OptionArray E.I.equals``() = validate (NullableFloats.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -45346,7 +45346,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.OptionArray E.I.equal``() = + member __.``NullableFloats.Collection.OptionArray E.I.equal``() = validate (NullableFloats.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -45355,7 +45355,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.OptionArray E.I.not_equal``() = + member __.``NullableFloats.Collection.OptionArray E.I.not_equal``() = validate (NullableFloats.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -45364,7 +45364,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.OptionArray E.N.equals``() = + member __.``NullableFloats.Collection.OptionArray E.N.equals``() = validate (NullableFloats.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -45373,7 +45373,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.OptionArray E.N.equal``() = + member __.``NullableFloats.Collection.OptionArray E.N.equal``() = validate (NullableFloats.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -45382,7 +45382,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.OptionArray E.N.not_equal``() = + member __.``NullableFloats.Collection.OptionArray E.N.not_equal``() = validate (NullableFloats.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -45391,7 +45391,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.RefArray E.I.equals``() = + member __.``NullableFloats.Collection.RefArray E.I.equals``() = validate (NullableFloats.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45399,7 +45399,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.RefArray E.I.equal``() = + member __.``NullableFloats.Collection.RefArray E.I.equal``() = validate (NullableFloats.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45407,7 +45407,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.RefArray E.I.not_equal``() = + member __.``NullableFloats.Collection.RefArray E.I.not_equal``() = validate (NullableFloats.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -45415,7 +45415,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.RefArray E.N.equals``() = + member __.``NullableFloats.Collection.RefArray E.N.equals``() = validate (NullableFloats.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45423,7 +45423,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.RefArray E.N.equal``() = + member __.``NullableFloats.Collection.RefArray E.N.equal``() = validate (NullableFloats.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45431,7 +45431,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.RefArray E.N.not_equal``() = + member __.``NullableFloats.Collection.RefArray E.N.not_equal``() = validate (NullableFloats.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -45439,7 +45439,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.RefWrapArray E.I.equals``() = + member __.``NullableFloats.Collection.RefWrapArray E.I.equals``() = validate (NullableFloats.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45447,7 +45447,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.RefWrapArray E.I.equal``() = + member __.``NullableFloats.Collection.RefWrapArray E.I.equal``() = validate (NullableFloats.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45455,7 +45455,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.RefWrapArray E.I.not_equal``() = + member __.``NullableFloats.Collection.RefWrapArray E.I.not_equal``() = validate (NullableFloats.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -45463,7 +45463,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.RefWrapArray E.N.equals``() = + member __.``NullableFloats.Collection.RefWrapArray E.N.equals``() = validate (NullableFloats.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45471,7 +45471,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.RefWrapArray E.N.equal``() = + member __.``NullableFloats.Collection.RefWrapArray E.N.equal``() = validate (NullableFloats.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45479,7 +45479,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.RefWrapArray E.N.not_equal``() = + member __.``NullableFloats.Collection.RefWrapArray E.N.not_equal``() = validate (NullableFloats.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -45487,7 +45487,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.UnionArray E.I.equals``() = + member __.``NullableFloats.Collection.UnionArray E.I.equals``() = validate (NullableFloats.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -45615,7 +45615,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.UnionArray E.I.equal``() = + member __.``NullableFloats.Collection.UnionArray E.I.equal``() = validate (NullableFloats.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -45743,7 +45743,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.UnionArray E.I.not_equal``() = + member __.``NullableFloats.Collection.UnionArray E.I.not_equal``() = validate (NullableFloats.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; @@ -45871,7 +45871,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.UnionArray E.N.equals``() = + member __.``NullableFloats.Collection.UnionArray E.N.equals``() = validate (NullableFloats.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -45999,7 +45999,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.UnionArray E.N.equal``() = + member __.``NullableFloats.Collection.UnionArray E.N.equal``() = validate (NullableFloats.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -46127,7 +46127,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.UnionArray E.N.not_equal``() = + member __.``NullableFloats.Collection.UnionArray E.N.not_equal``() = validate (NullableFloats.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; @@ -46255,7 +46255,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.UnionWrapArray E.I.equals``() = + member __.``NullableFloats.Collection.UnionWrapArray E.I.equals``() = validate (NullableFloats.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -46383,7 +46383,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.UnionWrapArray E.I.equal``() = + member __.``NullableFloats.Collection.UnionWrapArray E.I.equal``() = validate (NullableFloats.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -46511,7 +46511,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.UnionWrapArray E.I.not_equal``() = + member __.``NullableFloats.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableFloats.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; @@ -46639,7 +46639,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.UnionWrapArray E.N.equals``() = + member __.``NullableFloats.Collection.UnionWrapArray E.N.equals``() = validate (NullableFloats.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -46767,7 +46767,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.UnionWrapArray E.N.equal``() = + member __.``NullableFloats.Collection.UnionWrapArray E.N.equal``() = validate (NullableFloats.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -46895,7 +46895,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.UnionWrapArray E.N.not_equal``() = + member __.``NullableFloats.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableFloats.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; @@ -47023,7 +47023,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ValueArray E.I.equals``() = + member __.``NullableFloats.Collection.ValueArray E.I.equals``() = validate (NullableFloats.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47031,7 +47031,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ValueArray E.I.equal``() = + member __.``NullableFloats.Collection.ValueArray E.I.equal``() = validate (NullableFloats.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47039,7 +47039,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ValueArray E.I.not_equal``() = + member __.``NullableFloats.Collection.ValueArray E.I.not_equal``() = validate (NullableFloats.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -47047,7 +47047,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ValueArray E.N.equals``() = + member __.``NullableFloats.Collection.ValueArray E.N.equals``() = validate (NullableFloats.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47055,7 +47055,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ValueArray E.N.equal``() = + member __.``NullableFloats.Collection.ValueArray E.N.equal``() = validate (NullableFloats.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47063,7 +47063,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ValueArray E.N.not_equal``() = + member __.``NullableFloats.Collection.ValueArray E.N.not_equal``() = validate (NullableFloats.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -47071,7 +47071,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ValueWrapArray E.I.equals``() = + member __.``NullableFloats.Collection.ValueWrapArray E.I.equals``() = validate (NullableFloats.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47079,7 +47079,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ValueWrapArray E.I.equal``() = + member __.``NullableFloats.Collection.ValueWrapArray E.I.equal``() = validate (NullableFloats.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47087,7 +47087,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ValueWrapArray E.I.not_equal``() = + member __.``NullableFloats.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableFloats.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -47095,7 +47095,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ValueWrapArray E.N.equals``() = + member __.``NullableFloats.Collection.ValueWrapArray E.N.equals``() = validate (NullableFloats.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47103,7 +47103,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ValueWrapArray E.N.equal``() = + member __.``NullableFloats.Collection.ValueWrapArray E.N.equal``() = validate (NullableFloats.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47111,7 +47111,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ValueWrapArray E.N.not_equal``() = + member __.``NullableFloats.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableFloats.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -47119,7 +47119,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ArrayArray E.I.equals``() = + member __.``NullableFloats.Collection.ArrayArray E.I.equals``() = validate (NullableFloats.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -47134,7 +47134,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ArrayArray E.I.equal``() = + member __.``NullableFloats.Collection.ArrayArray E.I.equal``() = validate (NullableFloats.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -47149,7 +47149,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ArrayArray E.I.not_equal``() = + member __.``NullableFloats.Collection.ArrayArray E.I.not_equal``() = validate (NullableFloats.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -47164,7 +47164,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ArrayArray E.N.equals``() = + member __.``NullableFloats.Collection.ArrayArray E.N.equals``() = validate (NullableFloats.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -47179,7 +47179,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ArrayArray E.N.equal``() = + member __.``NullableFloats.Collection.ArrayArray E.N.equal``() = validate (NullableFloats.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -47194,7 +47194,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ArrayArray E.N.not_equal``() = + member __.``NullableFloats.Collection.ArrayArray E.N.not_equal``() = validate (NullableFloats.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -47209,7 +47209,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ListArray E.I.equals``() = + member __.``NullableFloats.Collection.ListArray E.I.equals``() = validate (NullableFloats.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -47224,7 +47224,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ListArray E.I.equal``() = + member __.``NullableFloats.Collection.ListArray E.I.equal``() = validate (NullableFloats.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -47239,7 +47239,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ListArray E.I.not_equal``() = + member __.``NullableFloats.Collection.ListArray E.I.not_equal``() = validate (NullableFloats.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -47254,7 +47254,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ListArray E.N.equals``() = + member __.``NullableFloats.Collection.ListArray E.N.equals``() = validate (NullableFloats.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -47269,7 +47269,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ListArray E.N.equal``() = + member __.``NullableFloats.Collection.ListArray E.N.equal``() = validate (NullableFloats.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -47284,7 +47284,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloats.Collection.ListArray E.N.not_equal``() = + member __.``NullableFloats.Collection.ListArray E.N.not_equal``() = validate (NullableFloats.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -47299,7 +47299,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.Array C.I.equals``() = + member __.``Float32s.Collection.Array C.I.equals``() = validate (Float32s.Collection.Array) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47307,7 +47307,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.Array C.I.equal``() = + member __.``Float32s.Collection.Array C.I.equal``() = validate (Float32s.Collection.Array) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47315,7 +47315,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.Array C.I.not_equal``() = + member __.``Float32s.Collection.Array C.I.not_equal``() = validate (Float32s.Collection.Array) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -47323,7 +47323,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.Array C.I.compare``() = + member __.``Float32s.Collection.Array C.I.compare``() = validate (Float32s.Collection.Array) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -47331,7 +47331,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.Array C.I.less_than``() = + member __.``Float32s.Collection.Array C.I.less_than``() = validate (Float32s.Collection.Array) C.I.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -47339,7 +47339,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.Array C.I.less_or_equal``() = + member __.``Float32s.Collection.Array C.I.less_or_equal``() = validate (Float32s.Collection.Array) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -47347,7 +47347,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.Array C.I.greater_than``() = + member __.``Float32s.Collection.Array C.I.greater_than``() = validate (Float32s.Collection.Array) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -47355,7 +47355,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.Array C.I.greater_or_equal``() = + member __.``Float32s.Collection.Array C.I.greater_or_equal``() = validate (Float32s.Collection.Array) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -47363,7 +47363,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.Array C.N.equals``() = + member __.``Float32s.Collection.Array C.N.equals``() = validate (Float32s.Collection.Array) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47371,7 +47371,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.Array C.N.equal``() = + member __.``Float32s.Collection.Array C.N.equal``() = validate (Float32s.Collection.Array) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47379,7 +47379,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.Array C.N.not_equal``() = + member __.``Float32s.Collection.Array C.N.not_equal``() = validate (Float32s.Collection.Array) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -47387,7 +47387,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.Array C.N.compare``() = + member __.``Float32s.Collection.Array C.N.compare``() = validate (Float32s.Collection.Array) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -47395,7 +47395,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.Array C.N.less_than``() = + member __.``Float32s.Collection.Array C.N.less_than``() = validate (Float32s.Collection.Array) C.N.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -47403,7 +47403,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.Array C.N.less_or_equal``() = + member __.``Float32s.Collection.Array C.N.less_or_equal``() = validate (Float32s.Collection.Array) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -47411,7 +47411,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.Array C.N.greater_than``() = + member __.``Float32s.Collection.Array C.N.greater_than``() = validate (Float32s.Collection.Array) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -47419,7 +47419,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.Array C.N.greater_or_equal``() = + member __.``Float32s.Collection.Array C.N.greater_or_equal``() = validate (Float32s.Collection.Array) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -47427,7 +47427,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.OptionArray C.I.equals``() = + member __.``Float32s.Collection.OptionArray C.I.equals``() = validate (Float32s.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47435,7 +47435,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.OptionArray C.I.equal``() = + member __.``Float32s.Collection.OptionArray C.I.equal``() = validate (Float32s.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47443,7 +47443,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.OptionArray C.I.not_equal``() = + member __.``Float32s.Collection.OptionArray C.I.not_equal``() = validate (Float32s.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -47451,7 +47451,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.OptionArray C.I.compare``() = + member __.``Float32s.Collection.OptionArray C.I.compare``() = validate (Float32s.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;1;-1;-1;-1;-1;1;1;0;1;1;1;-1;1;1;1;1;1;-1;0;1;1;-1;1;1;-1; 1;-1;-1;-1;0;-1;-1;-1;-1;-1;1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;-1;-1;1;1;-1;0;-1;-1; @@ -47459,7 +47459,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.OptionArray C.I.less_than``() = + member __.``Float32s.Collection.OptionArray C.I.less_than``() = validate (Float32s.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;1;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1; @@ -47467,7 +47467,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.OptionArray C.I.less_or_equal``() = + member __.``Float32s.Collection.OptionArray C.I.less_or_equal``() = validate (Float32s.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;1;1;0;0;1;1;1;1;0;0;1;0;0;0;1;0;0;0;0;0;1;1;0;0;1;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;1;1;1;1; @@ -47475,7 +47475,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.OptionArray C.I.greater_than``() = + member __.``Float32s.Collection.OptionArray C.I.greater_than``() = validate (Float32s.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;0;1;0;1;0;1;1;1;1;1;0;0;0;1;0;1;1;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;0;0;1;0;0;0;0; @@ -47483,7 +47483,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.OptionArray C.I.greater_or_equal``() = + member __.``Float32s.Collection.OptionArray C.I.greater_or_equal``() = validate (Float32s.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;1;0;1;0;1;1;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;1;0;1;0;0; @@ -47491,7 +47491,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.OptionArray C.N.equals``() = + member __.``Float32s.Collection.OptionArray C.N.equals``() = validate (Float32s.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47499,7 +47499,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.OptionArray C.N.equal``() = + member __.``Float32s.Collection.OptionArray C.N.equal``() = validate (Float32s.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47507,7 +47507,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.OptionArray C.N.not_equal``() = + member __.``Float32s.Collection.OptionArray C.N.not_equal``() = validate (Float32s.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -47515,7 +47515,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.OptionArray C.N.compare``() = + member __.``Float32s.Collection.OptionArray C.N.compare``() = validate (Float32s.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;1;-1;-1;-1;-1;1;1;0;1;1;1;-1;1;1;1;1;1;-1;0;1;1;-1;1;1;-1; 1;-1;-1;-1;0;-1;-1;-1;-1;-1;1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;-1;-1;1;1;-1;0;-1;-1; @@ -47523,7 +47523,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.OptionArray C.N.less_than``() = + member __.``Float32s.Collection.OptionArray C.N.less_than``() = validate (Float32s.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;1;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1; @@ -47531,7 +47531,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.OptionArray C.N.less_or_equal``() = + member __.``Float32s.Collection.OptionArray C.N.less_or_equal``() = validate (Float32s.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;1;1;0;0;1;1;1;1;0;0;1;0;0;0;1;0;0;0;0;0;1;1;0;0;1;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;1;1;1;1; @@ -47539,7 +47539,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.OptionArray C.N.greater_than``() = + member __.``Float32s.Collection.OptionArray C.N.greater_than``() = validate (Float32s.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;0;1;0;1;0;1;1;1;1;1;0;0;0;1;0;1;1;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;0;0;1;0;0;0;0; @@ -47547,7 +47547,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.OptionArray C.N.greater_or_equal``() = + member __.``Float32s.Collection.OptionArray C.N.greater_or_equal``() = validate (Float32s.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;1;0;1;0;1;1;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;1;0;1;0;0; @@ -47555,7 +47555,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefArray C.I.equals``() = + member __.``Float32s.Collection.RefArray C.I.equals``() = validate (Float32s.Collection.RefArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47563,7 +47563,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefArray C.I.equal``() = + member __.``Float32s.Collection.RefArray C.I.equal``() = validate (Float32s.Collection.RefArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47571,7 +47571,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefArray C.I.not_equal``() = + member __.``Float32s.Collection.RefArray C.I.not_equal``() = validate (Float32s.Collection.RefArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -47579,7 +47579,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefArray C.I.compare``() = + member __.``Float32s.Collection.RefArray C.I.compare``() = validate (Float32s.Collection.RefArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -47587,7 +47587,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefArray C.I.less_than``() = + member __.``Float32s.Collection.RefArray C.I.less_than``() = validate (Float32s.Collection.RefArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -47595,7 +47595,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefArray C.I.less_or_equal``() = + member __.``Float32s.Collection.RefArray C.I.less_or_equal``() = validate (Float32s.Collection.RefArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -47603,7 +47603,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefArray C.I.greater_than``() = + member __.``Float32s.Collection.RefArray C.I.greater_than``() = validate (Float32s.Collection.RefArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -47611,7 +47611,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefArray C.I.greater_or_equal``() = + member __.``Float32s.Collection.RefArray C.I.greater_or_equal``() = validate (Float32s.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -47619,7 +47619,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefArray C.N.equals``() = + member __.``Float32s.Collection.RefArray C.N.equals``() = validate (Float32s.Collection.RefArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47627,7 +47627,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefArray C.N.equal``() = + member __.``Float32s.Collection.RefArray C.N.equal``() = validate (Float32s.Collection.RefArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47635,7 +47635,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefArray C.N.not_equal``() = + member __.``Float32s.Collection.RefArray C.N.not_equal``() = validate (Float32s.Collection.RefArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -47643,7 +47643,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefArray C.N.compare``() = + member __.``Float32s.Collection.RefArray C.N.compare``() = validate (Float32s.Collection.RefArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -47651,7 +47651,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefArray C.N.less_than``() = + member __.``Float32s.Collection.RefArray C.N.less_than``() = validate (Float32s.Collection.RefArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -47659,7 +47659,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefArray C.N.less_or_equal``() = + member __.``Float32s.Collection.RefArray C.N.less_or_equal``() = validate (Float32s.Collection.RefArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -47667,7 +47667,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefArray C.N.greater_than``() = + member __.``Float32s.Collection.RefArray C.N.greater_than``() = validate (Float32s.Collection.RefArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -47675,7 +47675,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefArray C.N.greater_or_equal``() = + member __.``Float32s.Collection.RefArray C.N.greater_or_equal``() = validate (Float32s.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -47683,7 +47683,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefWrapArray C.I.equals``() = + member __.``Float32s.Collection.RefWrapArray C.I.equals``() = validate (Float32s.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47691,7 +47691,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefWrapArray C.I.equal``() = + member __.``Float32s.Collection.RefWrapArray C.I.equal``() = validate (Float32s.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47699,7 +47699,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefWrapArray C.I.not_equal``() = + member __.``Float32s.Collection.RefWrapArray C.I.not_equal``() = validate (Float32s.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -47707,7 +47707,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefWrapArray C.I.compare``() = + member __.``Float32s.Collection.RefWrapArray C.I.compare``() = validate (Float32s.Collection.RefWrapArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -47715,7 +47715,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefWrapArray C.I.less_than``() = + member __.``Float32s.Collection.RefWrapArray C.I.less_than``() = validate (Float32s.Collection.RefWrapArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -47723,7 +47723,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefWrapArray C.I.less_or_equal``() = + member __.``Float32s.Collection.RefWrapArray C.I.less_or_equal``() = validate (Float32s.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -47731,7 +47731,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefWrapArray C.I.greater_than``() = + member __.``Float32s.Collection.RefWrapArray C.I.greater_than``() = validate (Float32s.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -47739,7 +47739,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefWrapArray C.I.greater_or_equal``() = + member __.``Float32s.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Float32s.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -47747,7 +47747,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefWrapArray C.N.equals``() = + member __.``Float32s.Collection.RefWrapArray C.N.equals``() = validate (Float32s.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47755,7 +47755,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefWrapArray C.N.equal``() = + member __.``Float32s.Collection.RefWrapArray C.N.equal``() = validate (Float32s.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47763,7 +47763,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefWrapArray C.N.not_equal``() = + member __.``Float32s.Collection.RefWrapArray C.N.not_equal``() = validate (Float32s.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -47771,7 +47771,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefWrapArray C.N.compare``() = + member __.``Float32s.Collection.RefWrapArray C.N.compare``() = validate (Float32s.Collection.RefWrapArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -47779,7 +47779,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefWrapArray C.N.less_than``() = + member __.``Float32s.Collection.RefWrapArray C.N.less_than``() = validate (Float32s.Collection.RefWrapArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -47787,7 +47787,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefWrapArray C.N.less_or_equal``() = + member __.``Float32s.Collection.RefWrapArray C.N.less_or_equal``() = validate (Float32s.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -47795,7 +47795,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefWrapArray C.N.greater_than``() = + member __.``Float32s.Collection.RefWrapArray C.N.greater_than``() = validate (Float32s.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -47803,7 +47803,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.RefWrapArray C.N.greater_or_equal``() = + member __.``Float32s.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Float32s.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -47811,7 +47811,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionArray C.I.equals``() = + member __.``Float32s.Collection.UnionArray C.I.equals``() = validate (Float32s.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -47916,7 +47916,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionArray C.I.equal``() = + member __.``Float32s.Collection.UnionArray C.I.equal``() = validate (Float32s.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -48021,7 +48021,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionArray C.I.not_equal``() = + member __.``Float32s.Collection.UnionArray C.I.not_equal``() = validate (Float32s.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -48126,7 +48126,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionArray C.I.compare``() = + member __.``Float32s.Collection.UnionArray C.I.compare``() = validate (Float32s.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -48231,7 +48231,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionArray C.I.less_than``() = + member __.``Float32s.Collection.UnionArray C.I.less_than``() = validate (Float32s.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -48336,7 +48336,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionArray C.I.less_or_equal``() = + member __.``Float32s.Collection.UnionArray C.I.less_or_equal``() = validate (Float32s.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -48441,7 +48441,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionArray C.I.greater_than``() = + member __.``Float32s.Collection.UnionArray C.I.greater_than``() = validate (Float32s.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -48546,7 +48546,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionArray C.I.greater_or_equal``() = + member __.``Float32s.Collection.UnionArray C.I.greater_or_equal``() = validate (Float32s.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -48651,7 +48651,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionArray C.N.equals``() = + member __.``Float32s.Collection.UnionArray C.N.equals``() = validate (Float32s.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -48756,7 +48756,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionArray C.N.equal``() = + member __.``Float32s.Collection.UnionArray C.N.equal``() = validate (Float32s.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -48861,7 +48861,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionArray C.N.not_equal``() = + member __.``Float32s.Collection.UnionArray C.N.not_equal``() = validate (Float32s.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -48966,7 +48966,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionArray C.N.compare``() = + member __.``Float32s.Collection.UnionArray C.N.compare``() = validate (Float32s.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -49071,7 +49071,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionArray C.N.less_than``() = + member __.``Float32s.Collection.UnionArray C.N.less_than``() = validate (Float32s.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -49176,7 +49176,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionArray C.N.less_or_equal``() = + member __.``Float32s.Collection.UnionArray C.N.less_or_equal``() = validate (Float32s.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -49281,7 +49281,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionArray C.N.greater_than``() = + member __.``Float32s.Collection.UnionArray C.N.greater_than``() = validate (Float32s.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -49386,7 +49386,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionArray C.N.greater_or_equal``() = + member __.``Float32s.Collection.UnionArray C.N.greater_or_equal``() = validate (Float32s.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -49491,7 +49491,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionWrapArray C.I.equals``() = + member __.``Float32s.Collection.UnionWrapArray C.I.equals``() = validate (Float32s.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -49596,7 +49596,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionWrapArray C.I.equal``() = + member __.``Float32s.Collection.UnionWrapArray C.I.equal``() = validate (Float32s.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -49701,7 +49701,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionWrapArray C.I.not_equal``() = + member __.``Float32s.Collection.UnionWrapArray C.I.not_equal``() = validate (Float32s.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -49806,7 +49806,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionWrapArray C.I.compare``() = + member __.``Float32s.Collection.UnionWrapArray C.I.compare``() = validate (Float32s.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -49911,7 +49911,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionWrapArray C.I.less_than``() = + member __.``Float32s.Collection.UnionWrapArray C.I.less_than``() = validate (Float32s.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -50016,7 +50016,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionWrapArray C.I.less_or_equal``() = + member __.``Float32s.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Float32s.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -50121,7 +50121,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionWrapArray C.I.greater_than``() = + member __.``Float32s.Collection.UnionWrapArray C.I.greater_than``() = validate (Float32s.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -50226,7 +50226,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionWrapArray C.I.greater_or_equal``() = + member __.``Float32s.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Float32s.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -50331,7 +50331,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionWrapArray C.N.equals``() = + member __.``Float32s.Collection.UnionWrapArray C.N.equals``() = validate (Float32s.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -50436,7 +50436,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionWrapArray C.N.equal``() = + member __.``Float32s.Collection.UnionWrapArray C.N.equal``() = validate (Float32s.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -50541,7 +50541,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionWrapArray C.N.not_equal``() = + member __.``Float32s.Collection.UnionWrapArray C.N.not_equal``() = validate (Float32s.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -50646,7 +50646,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionWrapArray C.N.compare``() = + member __.``Float32s.Collection.UnionWrapArray C.N.compare``() = validate (Float32s.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -50751,7 +50751,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionWrapArray C.N.less_than``() = + member __.``Float32s.Collection.UnionWrapArray C.N.less_than``() = validate (Float32s.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -50856,7 +50856,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionWrapArray C.N.less_or_equal``() = + member __.``Float32s.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Float32s.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -50961,7 +50961,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionWrapArray C.N.greater_than``() = + member __.``Float32s.Collection.UnionWrapArray C.N.greater_than``() = validate (Float32s.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -51066,7 +51066,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.UnionWrapArray C.N.greater_or_equal``() = + member __.``Float32s.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Float32s.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -51171,7 +51171,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueArray C.I.equals``() = + member __.``Float32s.Collection.ValueArray C.I.equals``() = validate (Float32s.Collection.ValueArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -51179,7 +51179,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueArray C.I.equal``() = + member __.``Float32s.Collection.ValueArray C.I.equal``() = validate (Float32s.Collection.ValueArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -51187,7 +51187,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueArray C.I.not_equal``() = + member __.``Float32s.Collection.ValueArray C.I.not_equal``() = validate (Float32s.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -51195,7 +51195,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueArray C.I.compare``() = + member __.``Float32s.Collection.ValueArray C.I.compare``() = validate (Float32s.Collection.ValueArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -51203,7 +51203,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueArray C.I.less_than``() = + member __.``Float32s.Collection.ValueArray C.I.less_than``() = validate (Float32s.Collection.ValueArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -51211,7 +51211,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueArray C.I.less_or_equal``() = + member __.``Float32s.Collection.ValueArray C.I.less_or_equal``() = validate (Float32s.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -51219,7 +51219,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueArray C.I.greater_than``() = + member __.``Float32s.Collection.ValueArray C.I.greater_than``() = validate (Float32s.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -51227,7 +51227,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueArray C.I.greater_or_equal``() = + member __.``Float32s.Collection.ValueArray C.I.greater_or_equal``() = validate (Float32s.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -51235,7 +51235,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueArray C.N.equals``() = + member __.``Float32s.Collection.ValueArray C.N.equals``() = validate (Float32s.Collection.ValueArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -51243,7 +51243,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueArray C.N.equal``() = + member __.``Float32s.Collection.ValueArray C.N.equal``() = validate (Float32s.Collection.ValueArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -51251,7 +51251,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueArray C.N.not_equal``() = + member __.``Float32s.Collection.ValueArray C.N.not_equal``() = validate (Float32s.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -51259,7 +51259,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueArray C.N.compare``() = + member __.``Float32s.Collection.ValueArray C.N.compare``() = validate (Float32s.Collection.ValueArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -51267,7 +51267,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueArray C.N.less_than``() = + member __.``Float32s.Collection.ValueArray C.N.less_than``() = validate (Float32s.Collection.ValueArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -51275,7 +51275,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueArray C.N.less_or_equal``() = + member __.``Float32s.Collection.ValueArray C.N.less_or_equal``() = validate (Float32s.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -51283,7 +51283,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueArray C.N.greater_than``() = + member __.``Float32s.Collection.ValueArray C.N.greater_than``() = validate (Float32s.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -51291,7 +51291,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueArray C.N.greater_or_equal``() = + member __.``Float32s.Collection.ValueArray C.N.greater_or_equal``() = validate (Float32s.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -51299,7 +51299,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueWrapArray C.I.equals``() = + member __.``Float32s.Collection.ValueWrapArray C.I.equals``() = validate (Float32s.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -51307,7 +51307,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueWrapArray C.I.equal``() = + member __.``Float32s.Collection.ValueWrapArray C.I.equal``() = validate (Float32s.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -51315,7 +51315,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueWrapArray C.I.not_equal``() = + member __.``Float32s.Collection.ValueWrapArray C.I.not_equal``() = validate (Float32s.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -51323,7 +51323,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueWrapArray C.I.compare``() = + member __.``Float32s.Collection.ValueWrapArray C.I.compare``() = validate (Float32s.Collection.ValueWrapArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -51331,7 +51331,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueWrapArray C.I.less_than``() = + member __.``Float32s.Collection.ValueWrapArray C.I.less_than``() = validate (Float32s.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -51339,7 +51339,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueWrapArray C.I.less_or_equal``() = + member __.``Float32s.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Float32s.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -51347,7 +51347,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueWrapArray C.I.greater_than``() = + member __.``Float32s.Collection.ValueWrapArray C.I.greater_than``() = validate (Float32s.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -51355,7 +51355,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueWrapArray C.I.greater_or_equal``() = + member __.``Float32s.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Float32s.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -51363,7 +51363,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueWrapArray C.N.equals``() = + member __.``Float32s.Collection.ValueWrapArray C.N.equals``() = validate (Float32s.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -51371,7 +51371,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueWrapArray C.N.equal``() = + member __.``Float32s.Collection.ValueWrapArray C.N.equal``() = validate (Float32s.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -51379,7 +51379,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueWrapArray C.N.not_equal``() = + member __.``Float32s.Collection.ValueWrapArray C.N.not_equal``() = validate (Float32s.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -51387,7 +51387,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueWrapArray C.N.compare``() = + member __.``Float32s.Collection.ValueWrapArray C.N.compare``() = validate (Float32s.Collection.ValueWrapArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -51395,7 +51395,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueWrapArray C.N.less_than``() = + member __.``Float32s.Collection.ValueWrapArray C.N.less_than``() = validate (Float32s.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -51403,7 +51403,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueWrapArray C.N.less_or_equal``() = + member __.``Float32s.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Float32s.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -51411,7 +51411,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueWrapArray C.N.greater_than``() = + member __.``Float32s.Collection.ValueWrapArray C.N.greater_than``() = validate (Float32s.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -51419,7 +51419,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ValueWrapArray C.N.greater_or_equal``() = + member __.``Float32s.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Float32s.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -51427,7 +51427,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray C.I.equals``() = + member __.``Float32s.Collection.ArrayArray C.I.equals``() = validate (Float32s.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51441,7 +51441,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray C.I.equal``() = + member __.``Float32s.Collection.ArrayArray C.I.equal``() = validate (Float32s.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51455,7 +51455,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray C.I.not_equal``() = + member __.``Float32s.Collection.ArrayArray C.I.not_equal``() = validate (Float32s.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -51469,7 +51469,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray C.I.compare``() = + member __.``Float32s.Collection.ArrayArray C.I.compare``() = validate (Float32s.Collection.ArrayArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;0;1; 1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -51483,7 +51483,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray C.I.less_than``() = + member __.``Float32s.Collection.ArrayArray C.I.less_than``() = validate (Float32s.Collection.ArrayArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;0;0; 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; @@ -51497,7 +51497,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray C.I.less_or_equal``() = + member __.``Float32s.Collection.ArrayArray C.I.less_or_equal``() = validate (Float32s.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1;0; 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -51511,7 +51511,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray C.I.greater_than``() = + member __.``Float32s.Collection.ArrayArray C.I.greater_than``() = validate (Float32s.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0; 1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -51525,7 +51525,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray C.I.greater_or_equal``() = + member __.``Float32s.Collection.ArrayArray C.I.greater_or_equal``() = validate (Float32s.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;1;0; 1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51539,7 +51539,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray C.N.equals``() = + member __.``Float32s.Collection.ArrayArray C.N.equals``() = validate (Float32s.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51553,7 +51553,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray C.N.equal``() = + member __.``Float32s.Collection.ArrayArray C.N.equal``() = validate (Float32s.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51567,7 +51567,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray C.N.not_equal``() = + member __.``Float32s.Collection.ArrayArray C.N.not_equal``() = validate (Float32s.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -51581,7 +51581,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray C.N.compare``() = + member __.``Float32s.Collection.ArrayArray C.N.compare``() = validate (Float32s.Collection.ArrayArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;0;1; 1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -51595,7 +51595,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray C.N.less_than``() = + member __.``Float32s.Collection.ArrayArray C.N.less_than``() = validate (Float32s.Collection.ArrayArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;0;0; 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; @@ -51609,7 +51609,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray C.N.less_or_equal``() = + member __.``Float32s.Collection.ArrayArray C.N.less_or_equal``() = validate (Float32s.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1;0; 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -51623,7 +51623,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray C.N.greater_than``() = + member __.``Float32s.Collection.ArrayArray C.N.greater_than``() = validate (Float32s.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0; 1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -51637,7 +51637,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray C.N.greater_or_equal``() = + member __.``Float32s.Collection.ArrayArray C.N.greater_or_equal``() = validate (Float32s.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;1;0; 1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51651,7 +51651,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ListArray C.I.equals``() = + member __.``Float32s.Collection.ListArray C.I.equals``() = validate (Float32s.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51665,7 +51665,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ListArray C.I.equal``() = + member __.``Float32s.Collection.ListArray C.I.equal``() = validate (Float32s.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51679,7 +51679,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ListArray C.I.not_equal``() = + member __.``Float32s.Collection.ListArray C.I.not_equal``() = validate (Float32s.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -51693,7 +51693,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ListArray C.I.compare``() = + member __.``Float32s.Collection.ListArray C.I.compare``() = validate (Float32s.Collection.ListArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;1;1;1;-1;1;1;1;1;-1;0;1; 1;-1;1;1;-1;1;-1;-1;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -51707,7 +51707,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ListArray C.I.less_than``() = + member __.``Float32s.Collection.ListArray C.I.less_than``() = validate (Float32s.Collection.ListArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;0;0; 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1; @@ -51721,7 +51721,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ListArray C.I.less_or_equal``() = + member __.``Float32s.Collection.ListArray C.I.less_or_equal``() = validate (Float32s.Collection.ListArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;1;0; 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1; @@ -51735,7 +51735,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ListArray C.I.greater_than``() = + member __.``Float32s.Collection.ListArray C.I.greater_than``() = validate (Float32s.Collection.ListArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;0;0; 1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -51749,7 +51749,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ListArray C.I.greater_or_equal``() = + member __.``Float32s.Collection.ListArray C.I.greater_or_equal``() = validate (Float32s.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;1;0; 1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51763,7 +51763,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ListArray C.N.equals``() = + member __.``Float32s.Collection.ListArray C.N.equals``() = validate (Float32s.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51777,7 +51777,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ListArray C.N.equal``() = + member __.``Float32s.Collection.ListArray C.N.equal``() = validate (Float32s.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51791,7 +51791,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ListArray C.N.not_equal``() = + member __.``Float32s.Collection.ListArray C.N.not_equal``() = validate (Float32s.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -51805,7 +51805,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ListArray C.N.compare``() = + member __.``Float32s.Collection.ListArray C.N.compare``() = validate (Float32s.Collection.ListArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;1;1;1;-1;1;1;1;1;-1;0;1; 1;-1;1;1;-1;1;-1;-1;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -51819,7 +51819,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ListArray C.N.less_than``() = + member __.``Float32s.Collection.ListArray C.N.less_than``() = validate (Float32s.Collection.ListArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;0;0; 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1; @@ -51833,7 +51833,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ListArray C.N.less_or_equal``() = + member __.``Float32s.Collection.ListArray C.N.less_or_equal``() = validate (Float32s.Collection.ListArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;1;0; 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1; @@ -51847,7 +51847,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ListArray C.N.greater_than``() = + member __.``Float32s.Collection.ListArray C.N.greater_than``() = validate (Float32s.Collection.ListArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;0;0; 1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -51861,7 +51861,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ListArray C.N.greater_or_equal``() = + member __.``Float32s.Collection.ListArray C.N.greater_or_equal``() = validate (Float32s.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;1;0; 1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51875,7 +51875,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51889,7 +51889,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51903,7 +51903,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -51917,7 +51917,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;-1;0;1; 1;-1;1;1;-1;1;-1;1;1;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -51931,7 +51931,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; @@ -51945,7 +51945,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0; 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -51959,7 +51959,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1; 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -51973,7 +51973,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; @@ -51987,7 +51987,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -52001,7 +52001,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -52015,7 +52015,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -52029,7 +52029,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;-1;0;1; 1;-1;1;1;-1;1;-1;1;1;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -52043,7 +52043,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; @@ -52057,7 +52057,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0; 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -52071,7 +52071,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1; 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -52085,7 +52085,7 @@ type GeneratedTests () = |] [] - member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; @@ -52099,7 +52099,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.Array E.I.equals``() = + member __.``NullableFloat32s.Collection.Array E.I.equals``() = validate (NullableFloat32s.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52107,7 +52107,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.Array E.I.equal``() = + member __.``NullableFloat32s.Collection.Array E.I.equal``() = validate (NullableFloat32s.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52115,7 +52115,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.Array E.I.not_equal``() = + member __.``NullableFloat32s.Collection.Array E.I.not_equal``() = validate (NullableFloat32s.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -52123,7 +52123,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.Array E.N.equals``() = + member __.``NullableFloat32s.Collection.Array E.N.equals``() = validate (NullableFloat32s.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52131,7 +52131,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.Array E.N.equal``() = + member __.``NullableFloat32s.Collection.Array E.N.equal``() = validate (NullableFloat32s.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52139,7 +52139,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.Array E.N.not_equal``() = + member __.``NullableFloat32s.Collection.Array E.N.not_equal``() = validate (NullableFloat32s.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -52147,7 +52147,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.OptionArray E.I.equals``() = + member __.``NullableFloat32s.Collection.OptionArray E.I.equals``() = validate (NullableFloat32s.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -52156,7 +52156,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.OptionArray E.I.equal``() = + member __.``NullableFloat32s.Collection.OptionArray E.I.equal``() = validate (NullableFloat32s.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -52165,7 +52165,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.OptionArray E.I.not_equal``() = + member __.``NullableFloat32s.Collection.OptionArray E.I.not_equal``() = validate (NullableFloat32s.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -52174,7 +52174,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.OptionArray E.N.equals``() = + member __.``NullableFloat32s.Collection.OptionArray E.N.equals``() = validate (NullableFloat32s.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -52183,7 +52183,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.OptionArray E.N.equal``() = + member __.``NullableFloat32s.Collection.OptionArray E.N.equal``() = validate (NullableFloat32s.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -52192,7 +52192,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.OptionArray E.N.not_equal``() = + member __.``NullableFloat32s.Collection.OptionArray E.N.not_equal``() = validate (NullableFloat32s.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -52201,7 +52201,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.RefArray E.I.equals``() = + member __.``NullableFloat32s.Collection.RefArray E.I.equals``() = validate (NullableFloat32s.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52209,7 +52209,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.RefArray E.I.equal``() = + member __.``NullableFloat32s.Collection.RefArray E.I.equal``() = validate (NullableFloat32s.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52217,7 +52217,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.RefArray E.I.not_equal``() = + member __.``NullableFloat32s.Collection.RefArray E.I.not_equal``() = validate (NullableFloat32s.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -52225,7 +52225,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.RefArray E.N.equals``() = + member __.``NullableFloat32s.Collection.RefArray E.N.equals``() = validate (NullableFloat32s.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52233,7 +52233,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.RefArray E.N.equal``() = + member __.``NullableFloat32s.Collection.RefArray E.N.equal``() = validate (NullableFloat32s.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52241,7 +52241,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.RefArray E.N.not_equal``() = + member __.``NullableFloat32s.Collection.RefArray E.N.not_equal``() = validate (NullableFloat32s.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -52249,7 +52249,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.RefWrapArray E.I.equals``() = + member __.``NullableFloat32s.Collection.RefWrapArray E.I.equals``() = validate (NullableFloat32s.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52257,7 +52257,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.RefWrapArray E.I.equal``() = + member __.``NullableFloat32s.Collection.RefWrapArray E.I.equal``() = validate (NullableFloat32s.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52265,7 +52265,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.RefWrapArray E.I.not_equal``() = + member __.``NullableFloat32s.Collection.RefWrapArray E.I.not_equal``() = validate (NullableFloat32s.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -52273,7 +52273,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.RefWrapArray E.N.equals``() = + member __.``NullableFloat32s.Collection.RefWrapArray E.N.equals``() = validate (NullableFloat32s.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52281,7 +52281,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.RefWrapArray E.N.equal``() = + member __.``NullableFloat32s.Collection.RefWrapArray E.N.equal``() = validate (NullableFloat32s.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52289,7 +52289,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.RefWrapArray E.N.not_equal``() = + member __.``NullableFloat32s.Collection.RefWrapArray E.N.not_equal``() = validate (NullableFloat32s.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -52297,7 +52297,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.UnionArray E.I.equals``() = + member __.``NullableFloat32s.Collection.UnionArray E.I.equals``() = validate (NullableFloat32s.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -52425,7 +52425,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.UnionArray E.I.equal``() = + member __.``NullableFloat32s.Collection.UnionArray E.I.equal``() = validate (NullableFloat32s.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -52553,7 +52553,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.UnionArray E.I.not_equal``() = + member __.``NullableFloat32s.Collection.UnionArray E.I.not_equal``() = validate (NullableFloat32s.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; @@ -52681,7 +52681,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.UnionArray E.N.equals``() = + member __.``NullableFloat32s.Collection.UnionArray E.N.equals``() = validate (NullableFloat32s.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -52809,7 +52809,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.UnionArray E.N.equal``() = + member __.``NullableFloat32s.Collection.UnionArray E.N.equal``() = validate (NullableFloat32s.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -52937,7 +52937,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.UnionArray E.N.not_equal``() = + member __.``NullableFloat32s.Collection.UnionArray E.N.not_equal``() = validate (NullableFloat32s.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; @@ -53065,7 +53065,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.UnionWrapArray E.I.equals``() = + member __.``NullableFloat32s.Collection.UnionWrapArray E.I.equals``() = validate (NullableFloat32s.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -53193,7 +53193,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.UnionWrapArray E.I.equal``() = + member __.``NullableFloat32s.Collection.UnionWrapArray E.I.equal``() = validate (NullableFloat32s.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -53321,7 +53321,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.UnionWrapArray E.I.not_equal``() = + member __.``NullableFloat32s.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableFloat32s.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; @@ -53449,7 +53449,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.UnionWrapArray E.N.equals``() = + member __.``NullableFloat32s.Collection.UnionWrapArray E.N.equals``() = validate (NullableFloat32s.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -53577,7 +53577,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.UnionWrapArray E.N.equal``() = + member __.``NullableFloat32s.Collection.UnionWrapArray E.N.equal``() = validate (NullableFloat32s.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -53705,7 +53705,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.UnionWrapArray E.N.not_equal``() = + member __.``NullableFloat32s.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableFloat32s.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; @@ -53833,7 +53833,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ValueArray E.I.equals``() = + member __.``NullableFloat32s.Collection.ValueArray E.I.equals``() = validate (NullableFloat32s.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -53841,7 +53841,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ValueArray E.I.equal``() = + member __.``NullableFloat32s.Collection.ValueArray E.I.equal``() = validate (NullableFloat32s.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -53849,7 +53849,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ValueArray E.I.not_equal``() = + member __.``NullableFloat32s.Collection.ValueArray E.I.not_equal``() = validate (NullableFloat32s.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -53857,7 +53857,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ValueArray E.N.equals``() = + member __.``NullableFloat32s.Collection.ValueArray E.N.equals``() = validate (NullableFloat32s.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -53865,7 +53865,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ValueArray E.N.equal``() = + member __.``NullableFloat32s.Collection.ValueArray E.N.equal``() = validate (NullableFloat32s.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -53873,7 +53873,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ValueArray E.N.not_equal``() = + member __.``NullableFloat32s.Collection.ValueArray E.N.not_equal``() = validate (NullableFloat32s.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -53881,7 +53881,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ValueWrapArray E.I.equals``() = + member __.``NullableFloat32s.Collection.ValueWrapArray E.I.equals``() = validate (NullableFloat32s.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -53889,7 +53889,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ValueWrapArray E.I.equal``() = + member __.``NullableFloat32s.Collection.ValueWrapArray E.I.equal``() = validate (NullableFloat32s.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -53897,7 +53897,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ValueWrapArray E.I.not_equal``() = + member __.``NullableFloat32s.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableFloat32s.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -53905,7 +53905,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ValueWrapArray E.N.equals``() = + member __.``NullableFloat32s.Collection.ValueWrapArray E.N.equals``() = validate (NullableFloat32s.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -53913,7 +53913,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ValueWrapArray E.N.equal``() = + member __.``NullableFloat32s.Collection.ValueWrapArray E.N.equal``() = validate (NullableFloat32s.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -53921,7 +53921,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ValueWrapArray E.N.not_equal``() = + member __.``NullableFloat32s.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableFloat32s.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -53929,7 +53929,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ArrayArray E.I.equals``() = + member __.``NullableFloat32s.Collection.ArrayArray E.I.equals``() = validate (NullableFloat32s.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -53944,7 +53944,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ArrayArray E.I.equal``() = + member __.``NullableFloat32s.Collection.ArrayArray E.I.equal``() = validate (NullableFloat32s.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -53959,7 +53959,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ArrayArray E.I.not_equal``() = + member __.``NullableFloat32s.Collection.ArrayArray E.I.not_equal``() = validate (NullableFloat32s.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -53974,7 +53974,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ArrayArray E.N.equals``() = + member __.``NullableFloat32s.Collection.ArrayArray E.N.equals``() = validate (NullableFloat32s.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -53989,7 +53989,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ArrayArray E.N.equal``() = + member __.``NullableFloat32s.Collection.ArrayArray E.N.equal``() = validate (NullableFloat32s.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54004,7 +54004,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ArrayArray E.N.not_equal``() = + member __.``NullableFloat32s.Collection.ArrayArray E.N.not_equal``() = validate (NullableFloat32s.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -54019,7 +54019,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ListArray E.I.equals``() = + member __.``NullableFloat32s.Collection.ListArray E.I.equals``() = validate (NullableFloat32s.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54034,7 +54034,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ListArray E.I.equal``() = + member __.``NullableFloat32s.Collection.ListArray E.I.equal``() = validate (NullableFloat32s.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54049,7 +54049,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ListArray E.I.not_equal``() = + member __.``NullableFloat32s.Collection.ListArray E.I.not_equal``() = validate (NullableFloat32s.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -54064,7 +54064,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ListArray E.N.equals``() = + member __.``NullableFloat32s.Collection.ListArray E.N.equals``() = validate (NullableFloat32s.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54079,7 +54079,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ListArray E.N.equal``() = + member __.``NullableFloat32s.Collection.ListArray E.N.equal``() = validate (NullableFloat32s.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54094,7 +54094,7 @@ type GeneratedTests () = |] [] - member _.``NullableFloat32s.Collection.ListArray E.N.not_equal``() = + member __.``NullableFloat32s.Collection.ListArray E.N.not_equal``() = validate (NullableFloat32s.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -54109,391 +54109,391 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.Array C.I.equals``() = + member __.``DateTimes.Collection.Array C.I.equals``() = validate (DateTimes.Collection.Array) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``DateTimes.Collection.Array C.I.equal``() = + member __.``DateTimes.Collection.Array C.I.equal``() = validate (DateTimes.Collection.Array) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``DateTimes.Collection.Array C.I.not_equal``() = + member __.``DateTimes.Collection.Array C.I.not_equal``() = validate (DateTimes.Collection.Array) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``DateTimes.Collection.Array C.I.compare``() = + member __.``DateTimes.Collection.Array C.I.compare``() = validate (DateTimes.Collection.Array) C.I.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member _.``DateTimes.Collection.Array C.I.less_than``() = + member __.``DateTimes.Collection.Array C.I.less_than``() = validate (DateTimes.Collection.Array) C.I.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member _.``DateTimes.Collection.Array C.I.less_or_equal``() = + member __.``DateTimes.Collection.Array C.I.less_or_equal``() = validate (DateTimes.Collection.Array) C.I.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member _.``DateTimes.Collection.Array C.I.greater_than``() = + member __.``DateTimes.Collection.Array C.I.greater_than``() = validate (DateTimes.Collection.Array) C.I.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member _.``DateTimes.Collection.Array C.I.greater_or_equal``() = + member __.``DateTimes.Collection.Array C.I.greater_or_equal``() = validate (DateTimes.Collection.Array) C.I.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member _.``DateTimes.Collection.Array C.N.equals``() = + member __.``DateTimes.Collection.Array C.N.equals``() = validate (DateTimes.Collection.Array) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``DateTimes.Collection.Array C.N.equal``() = + member __.``DateTimes.Collection.Array C.N.equal``() = validate (DateTimes.Collection.Array) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``DateTimes.Collection.Array C.N.not_equal``() = + member __.``DateTimes.Collection.Array C.N.not_equal``() = validate (DateTimes.Collection.Array) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``DateTimes.Collection.Array C.N.compare``() = + member __.``DateTimes.Collection.Array C.N.compare``() = validate (DateTimes.Collection.Array) C.N.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member _.``DateTimes.Collection.Array C.N.less_than``() = + member __.``DateTimes.Collection.Array C.N.less_than``() = validate (DateTimes.Collection.Array) C.N.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member _.``DateTimes.Collection.Array C.N.less_or_equal``() = + member __.``DateTimes.Collection.Array C.N.less_or_equal``() = validate (DateTimes.Collection.Array) C.N.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member _.``DateTimes.Collection.Array C.N.greater_than``() = + member __.``DateTimes.Collection.Array C.N.greater_than``() = validate (DateTimes.Collection.Array) C.N.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member _.``DateTimes.Collection.Array C.N.greater_or_equal``() = + member __.``DateTimes.Collection.Array C.N.greater_or_equal``() = validate (DateTimes.Collection.Array) C.N.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member _.``DateTimes.Collection.OptionArray C.I.equals``() = + member __.``DateTimes.Collection.OptionArray C.I.equals``() = validate (DateTimes.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``DateTimes.Collection.OptionArray C.I.equal``() = + member __.``DateTimes.Collection.OptionArray C.I.equal``() = validate (DateTimes.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``DateTimes.Collection.OptionArray C.I.not_equal``() = + member __.``DateTimes.Collection.OptionArray C.I.not_equal``() = validate (DateTimes.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``DateTimes.Collection.OptionArray C.I.compare``() = + member __.``DateTimes.Collection.OptionArray C.I.compare``() = validate (DateTimes.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;1;1;1;-1;0 |] [] - member _.``DateTimes.Collection.OptionArray C.I.less_than``() = + member __.``DateTimes.Collection.OptionArray C.I.less_than``() = validate (DateTimes.Collection.OptionArray) C.I.less_than [| 0;1;1;1;0;0;1;1;0;0;0;0;0;0;1;0 |] [] - member _.``DateTimes.Collection.OptionArray C.I.less_or_equal``() = + member __.``DateTimes.Collection.OptionArray C.I.less_or_equal``() = validate (DateTimes.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;0;1;1;1;0;0;1;0;0;0;1;1 |] [] - member _.``DateTimes.Collection.OptionArray C.I.greater_than``() = + member __.``DateTimes.Collection.OptionArray C.I.greater_than``() = validate (DateTimes.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;1;1;0;1;1;1;0;0 |] [] - member _.``DateTimes.Collection.OptionArray C.I.greater_or_equal``() = + member __.``DateTimes.Collection.OptionArray C.I.greater_or_equal``() = validate (DateTimes.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;1;1;0;0;1;1;1;1;1;1;0;1 |] [] - member _.``DateTimes.Collection.OptionArray C.N.equals``() = + member __.``DateTimes.Collection.OptionArray C.N.equals``() = validate (DateTimes.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``DateTimes.Collection.OptionArray C.N.equal``() = + member __.``DateTimes.Collection.OptionArray C.N.equal``() = validate (DateTimes.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``DateTimes.Collection.OptionArray C.N.not_equal``() = + member __.``DateTimes.Collection.OptionArray C.N.not_equal``() = validate (DateTimes.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``DateTimes.Collection.OptionArray C.N.compare``() = + member __.``DateTimes.Collection.OptionArray C.N.compare``() = validate (DateTimes.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;1;1;1;-1;0 |] [] - member _.``DateTimes.Collection.OptionArray C.N.less_than``() = + member __.``DateTimes.Collection.OptionArray C.N.less_than``() = validate (DateTimes.Collection.OptionArray) C.N.less_than [| 0;1;1;1;0;0;1;1;0;0;0;0;0;0;1;0 |] [] - member _.``DateTimes.Collection.OptionArray C.N.less_or_equal``() = + member __.``DateTimes.Collection.OptionArray C.N.less_or_equal``() = validate (DateTimes.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;0;1;1;1;0;0;1;0;0;0;1;1 |] [] - member _.``DateTimes.Collection.OptionArray C.N.greater_than``() = + member __.``DateTimes.Collection.OptionArray C.N.greater_than``() = validate (DateTimes.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;1;1;0;1;1;1;0;0 |] [] - member _.``DateTimes.Collection.OptionArray C.N.greater_or_equal``() = + member __.``DateTimes.Collection.OptionArray C.N.greater_or_equal``() = validate (DateTimes.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;1;1;0;0;1;1;1;1;1;1;0;1 |] [] - member _.``DateTimes.Collection.RefArray C.I.equals``() = + member __.``DateTimes.Collection.RefArray C.I.equals``() = validate (DateTimes.Collection.RefArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``DateTimes.Collection.RefArray C.I.equal``() = + member __.``DateTimes.Collection.RefArray C.I.equal``() = validate (DateTimes.Collection.RefArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``DateTimes.Collection.RefArray C.I.not_equal``() = + member __.``DateTimes.Collection.RefArray C.I.not_equal``() = validate (DateTimes.Collection.RefArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``DateTimes.Collection.RefArray C.I.compare``() = + member __.``DateTimes.Collection.RefArray C.I.compare``() = validate (DateTimes.Collection.RefArray) C.I.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member _.``DateTimes.Collection.RefArray C.I.less_than``() = + member __.``DateTimes.Collection.RefArray C.I.less_than``() = validate (DateTimes.Collection.RefArray) C.I.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member _.``DateTimes.Collection.RefArray C.I.less_or_equal``() = + member __.``DateTimes.Collection.RefArray C.I.less_or_equal``() = validate (DateTimes.Collection.RefArray) C.I.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member _.``DateTimes.Collection.RefArray C.I.greater_than``() = + member __.``DateTimes.Collection.RefArray C.I.greater_than``() = validate (DateTimes.Collection.RefArray) C.I.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member _.``DateTimes.Collection.RefArray C.I.greater_or_equal``() = + member __.``DateTimes.Collection.RefArray C.I.greater_or_equal``() = validate (DateTimes.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member _.``DateTimes.Collection.RefArray C.N.equals``() = + member __.``DateTimes.Collection.RefArray C.N.equals``() = validate (DateTimes.Collection.RefArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``DateTimes.Collection.RefArray C.N.equal``() = + member __.``DateTimes.Collection.RefArray C.N.equal``() = validate (DateTimes.Collection.RefArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``DateTimes.Collection.RefArray C.N.not_equal``() = + member __.``DateTimes.Collection.RefArray C.N.not_equal``() = validate (DateTimes.Collection.RefArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``DateTimes.Collection.RefArray C.N.compare``() = + member __.``DateTimes.Collection.RefArray C.N.compare``() = validate (DateTimes.Collection.RefArray) C.N.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member _.``DateTimes.Collection.RefArray C.N.less_than``() = + member __.``DateTimes.Collection.RefArray C.N.less_than``() = validate (DateTimes.Collection.RefArray) C.N.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member _.``DateTimes.Collection.RefArray C.N.less_or_equal``() = + member __.``DateTimes.Collection.RefArray C.N.less_or_equal``() = validate (DateTimes.Collection.RefArray) C.N.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member _.``DateTimes.Collection.RefArray C.N.greater_than``() = + member __.``DateTimes.Collection.RefArray C.N.greater_than``() = validate (DateTimes.Collection.RefArray) C.N.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member _.``DateTimes.Collection.RefArray C.N.greater_or_equal``() = + member __.``DateTimes.Collection.RefArray C.N.greater_or_equal``() = validate (DateTimes.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member _.``DateTimes.Collection.RefWrapArray C.I.equals``() = + member __.``DateTimes.Collection.RefWrapArray C.I.equals``() = validate (DateTimes.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``DateTimes.Collection.RefWrapArray C.I.equal``() = + member __.``DateTimes.Collection.RefWrapArray C.I.equal``() = validate (DateTimes.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``DateTimes.Collection.RefWrapArray C.I.not_equal``() = + member __.``DateTimes.Collection.RefWrapArray C.I.not_equal``() = validate (DateTimes.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``DateTimes.Collection.RefWrapArray C.I.compare``() = + member __.``DateTimes.Collection.RefWrapArray C.I.compare``() = validate (DateTimes.Collection.RefWrapArray) C.I.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member _.``DateTimes.Collection.RefWrapArray C.I.less_than``() = + member __.``DateTimes.Collection.RefWrapArray C.I.less_than``() = validate (DateTimes.Collection.RefWrapArray) C.I.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member _.``DateTimes.Collection.RefWrapArray C.I.less_or_equal``() = + member __.``DateTimes.Collection.RefWrapArray C.I.less_or_equal``() = validate (DateTimes.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member _.``DateTimes.Collection.RefWrapArray C.I.greater_than``() = + member __.``DateTimes.Collection.RefWrapArray C.I.greater_than``() = validate (DateTimes.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member _.``DateTimes.Collection.RefWrapArray C.I.greater_or_equal``() = + member __.``DateTimes.Collection.RefWrapArray C.I.greater_or_equal``() = validate (DateTimes.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member _.``DateTimes.Collection.RefWrapArray C.N.equals``() = + member __.``DateTimes.Collection.RefWrapArray C.N.equals``() = validate (DateTimes.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``DateTimes.Collection.RefWrapArray C.N.equal``() = + member __.``DateTimes.Collection.RefWrapArray C.N.equal``() = validate (DateTimes.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``DateTimes.Collection.RefWrapArray C.N.not_equal``() = + member __.``DateTimes.Collection.RefWrapArray C.N.not_equal``() = validate (DateTimes.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``DateTimes.Collection.RefWrapArray C.N.compare``() = + member __.``DateTimes.Collection.RefWrapArray C.N.compare``() = validate (DateTimes.Collection.RefWrapArray) C.N.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member _.``DateTimes.Collection.RefWrapArray C.N.less_than``() = + member __.``DateTimes.Collection.RefWrapArray C.N.less_than``() = validate (DateTimes.Collection.RefWrapArray) C.N.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member _.``DateTimes.Collection.RefWrapArray C.N.less_or_equal``() = + member __.``DateTimes.Collection.RefWrapArray C.N.less_or_equal``() = validate (DateTimes.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member _.``DateTimes.Collection.RefWrapArray C.N.greater_than``() = + member __.``DateTimes.Collection.RefWrapArray C.N.greater_than``() = validate (DateTimes.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member _.``DateTimes.Collection.RefWrapArray C.N.greater_or_equal``() = + member __.``DateTimes.Collection.RefWrapArray C.N.greater_or_equal``() = validate (DateTimes.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member _.``DateTimes.Collection.UnionArray C.I.equals``() = + member __.``DateTimes.Collection.UnionArray C.I.equals``() = validate (DateTimes.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54510,7 +54510,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionArray C.I.equal``() = + member __.``DateTimes.Collection.UnionArray C.I.equal``() = validate (DateTimes.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54527,7 +54527,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionArray C.I.not_equal``() = + member __.``DateTimes.Collection.UnionArray C.I.not_equal``() = validate (DateTimes.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -54544,7 +54544,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionArray C.I.compare``() = + member __.``DateTimes.Collection.UnionArray C.I.compare``() = validate (DateTimes.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -54561,7 +54561,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionArray C.I.less_than``() = + member __.``DateTimes.Collection.UnionArray C.I.less_than``() = validate (DateTimes.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -54578,7 +54578,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionArray C.I.less_or_equal``() = + member __.``DateTimes.Collection.UnionArray C.I.less_or_equal``() = validate (DateTimes.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -54595,7 +54595,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionArray C.I.greater_than``() = + member __.``DateTimes.Collection.UnionArray C.I.greater_than``() = validate (DateTimes.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -54612,7 +54612,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionArray C.I.greater_or_equal``() = + member __.``DateTimes.Collection.UnionArray C.I.greater_or_equal``() = validate (DateTimes.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -54629,7 +54629,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionArray C.N.equals``() = + member __.``DateTimes.Collection.UnionArray C.N.equals``() = validate (DateTimes.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54646,7 +54646,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionArray C.N.equal``() = + member __.``DateTimes.Collection.UnionArray C.N.equal``() = validate (DateTimes.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54663,7 +54663,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionArray C.N.not_equal``() = + member __.``DateTimes.Collection.UnionArray C.N.not_equal``() = validate (DateTimes.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -54680,7 +54680,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionArray C.N.compare``() = + member __.``DateTimes.Collection.UnionArray C.N.compare``() = validate (DateTimes.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -54697,7 +54697,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionArray C.N.less_than``() = + member __.``DateTimes.Collection.UnionArray C.N.less_than``() = validate (DateTimes.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -54714,7 +54714,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionArray C.N.less_or_equal``() = + member __.``DateTimes.Collection.UnionArray C.N.less_or_equal``() = validate (DateTimes.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -54731,7 +54731,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionArray C.N.greater_than``() = + member __.``DateTimes.Collection.UnionArray C.N.greater_than``() = validate (DateTimes.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -54748,7 +54748,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionArray C.N.greater_or_equal``() = + member __.``DateTimes.Collection.UnionArray C.N.greater_or_equal``() = validate (DateTimes.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -54765,7 +54765,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionWrapArray C.I.equals``() = + member __.``DateTimes.Collection.UnionWrapArray C.I.equals``() = validate (DateTimes.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54782,7 +54782,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionWrapArray C.I.equal``() = + member __.``DateTimes.Collection.UnionWrapArray C.I.equal``() = validate (DateTimes.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54799,7 +54799,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionWrapArray C.I.not_equal``() = + member __.``DateTimes.Collection.UnionWrapArray C.I.not_equal``() = validate (DateTimes.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -54816,7 +54816,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionWrapArray C.I.compare``() = + member __.``DateTimes.Collection.UnionWrapArray C.I.compare``() = validate (DateTimes.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -54833,7 +54833,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionWrapArray C.I.less_than``() = + member __.``DateTimes.Collection.UnionWrapArray C.I.less_than``() = validate (DateTimes.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -54850,7 +54850,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionWrapArray C.I.less_or_equal``() = + member __.``DateTimes.Collection.UnionWrapArray C.I.less_or_equal``() = validate (DateTimes.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -54867,7 +54867,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionWrapArray C.I.greater_than``() = + member __.``DateTimes.Collection.UnionWrapArray C.I.greater_than``() = validate (DateTimes.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -54884,7 +54884,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionWrapArray C.I.greater_or_equal``() = + member __.``DateTimes.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (DateTimes.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -54901,7 +54901,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionWrapArray C.N.equals``() = + member __.``DateTimes.Collection.UnionWrapArray C.N.equals``() = validate (DateTimes.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54918,7 +54918,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionWrapArray C.N.equal``() = + member __.``DateTimes.Collection.UnionWrapArray C.N.equal``() = validate (DateTimes.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54935,7 +54935,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionWrapArray C.N.not_equal``() = + member __.``DateTimes.Collection.UnionWrapArray C.N.not_equal``() = validate (DateTimes.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -54952,7 +54952,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionWrapArray C.N.compare``() = + member __.``DateTimes.Collection.UnionWrapArray C.N.compare``() = validate (DateTimes.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -54969,7 +54969,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionWrapArray C.N.less_than``() = + member __.``DateTimes.Collection.UnionWrapArray C.N.less_than``() = validate (DateTimes.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -54986,7 +54986,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionWrapArray C.N.less_or_equal``() = + member __.``DateTimes.Collection.UnionWrapArray C.N.less_or_equal``() = validate (DateTimes.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -55003,7 +55003,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionWrapArray C.N.greater_than``() = + member __.``DateTimes.Collection.UnionWrapArray C.N.greater_than``() = validate (DateTimes.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -55020,7 +55020,7 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.UnionWrapArray C.N.greater_or_equal``() = + member __.``DateTimes.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (DateTimes.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -55037,631 +55037,631 @@ type GeneratedTests () = |] [] - member _.``DateTimes.Collection.ValueArray C.I.equals``() = + member __.``DateTimes.Collection.ValueArray C.I.equals``() = validate (DateTimes.Collection.ValueArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``DateTimes.Collection.ValueArray C.I.equal``() = + member __.``DateTimes.Collection.ValueArray C.I.equal``() = validate (DateTimes.Collection.ValueArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``DateTimes.Collection.ValueArray C.I.not_equal``() = + member __.``DateTimes.Collection.ValueArray C.I.not_equal``() = validate (DateTimes.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``DateTimes.Collection.ValueArray C.I.compare``() = + member __.``DateTimes.Collection.ValueArray C.I.compare``() = validate (DateTimes.Collection.ValueArray) C.I.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member _.``DateTimes.Collection.ValueArray C.I.less_than``() = + member __.``DateTimes.Collection.ValueArray C.I.less_than``() = validate (DateTimes.Collection.ValueArray) C.I.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member _.``DateTimes.Collection.ValueArray C.I.less_or_equal``() = + member __.``DateTimes.Collection.ValueArray C.I.less_or_equal``() = validate (DateTimes.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member _.``DateTimes.Collection.ValueArray C.I.greater_than``() = + member __.``DateTimes.Collection.ValueArray C.I.greater_than``() = validate (DateTimes.Collection.ValueArray) C.I.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member _.``DateTimes.Collection.ValueArray C.I.greater_or_equal``() = + member __.``DateTimes.Collection.ValueArray C.I.greater_or_equal``() = validate (DateTimes.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member _.``DateTimes.Collection.ValueArray C.N.equals``() = + member __.``DateTimes.Collection.ValueArray C.N.equals``() = validate (DateTimes.Collection.ValueArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``DateTimes.Collection.ValueArray C.N.equal``() = + member __.``DateTimes.Collection.ValueArray C.N.equal``() = validate (DateTimes.Collection.ValueArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``DateTimes.Collection.ValueArray C.N.not_equal``() = + member __.``DateTimes.Collection.ValueArray C.N.not_equal``() = validate (DateTimes.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``DateTimes.Collection.ValueArray C.N.compare``() = + member __.``DateTimes.Collection.ValueArray C.N.compare``() = validate (DateTimes.Collection.ValueArray) C.N.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member _.``DateTimes.Collection.ValueArray C.N.less_than``() = + member __.``DateTimes.Collection.ValueArray C.N.less_than``() = validate (DateTimes.Collection.ValueArray) C.N.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member _.``DateTimes.Collection.ValueArray C.N.less_or_equal``() = + member __.``DateTimes.Collection.ValueArray C.N.less_or_equal``() = validate (DateTimes.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member _.``DateTimes.Collection.ValueArray C.N.greater_than``() = + member __.``DateTimes.Collection.ValueArray C.N.greater_than``() = validate (DateTimes.Collection.ValueArray) C.N.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member _.``DateTimes.Collection.ValueArray C.N.greater_or_equal``() = + member __.``DateTimes.Collection.ValueArray C.N.greater_or_equal``() = validate (DateTimes.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member _.``DateTimes.Collection.ValueWrapArray C.I.equals``() = + member __.``DateTimes.Collection.ValueWrapArray C.I.equals``() = validate (DateTimes.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``DateTimes.Collection.ValueWrapArray C.I.equal``() = + member __.``DateTimes.Collection.ValueWrapArray C.I.equal``() = validate (DateTimes.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``DateTimes.Collection.ValueWrapArray C.I.not_equal``() = + member __.``DateTimes.Collection.ValueWrapArray C.I.not_equal``() = validate (DateTimes.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``DateTimes.Collection.ValueWrapArray C.I.compare``() = + member __.``DateTimes.Collection.ValueWrapArray C.I.compare``() = validate (DateTimes.Collection.ValueWrapArray) C.I.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member _.``DateTimes.Collection.ValueWrapArray C.I.less_than``() = + member __.``DateTimes.Collection.ValueWrapArray C.I.less_than``() = validate (DateTimes.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member _.``DateTimes.Collection.ValueWrapArray C.I.less_or_equal``() = + member __.``DateTimes.Collection.ValueWrapArray C.I.less_or_equal``() = validate (DateTimes.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member _.``DateTimes.Collection.ValueWrapArray C.I.greater_than``() = + member __.``DateTimes.Collection.ValueWrapArray C.I.greater_than``() = validate (DateTimes.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member _.``DateTimes.Collection.ValueWrapArray C.I.greater_or_equal``() = + member __.``DateTimes.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (DateTimes.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member _.``DateTimes.Collection.ValueWrapArray C.N.equals``() = + member __.``DateTimes.Collection.ValueWrapArray C.N.equals``() = validate (DateTimes.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``DateTimes.Collection.ValueWrapArray C.N.equal``() = + member __.``DateTimes.Collection.ValueWrapArray C.N.equal``() = validate (DateTimes.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member _.``DateTimes.Collection.ValueWrapArray C.N.not_equal``() = + member __.``DateTimes.Collection.ValueWrapArray C.N.not_equal``() = validate (DateTimes.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member _.``DateTimes.Collection.ValueWrapArray C.N.compare``() = + member __.``DateTimes.Collection.ValueWrapArray C.N.compare``() = validate (DateTimes.Collection.ValueWrapArray) C.N.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member _.``DateTimes.Collection.ValueWrapArray C.N.less_than``() = + member __.``DateTimes.Collection.ValueWrapArray C.N.less_than``() = validate (DateTimes.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member _.``DateTimes.Collection.ValueWrapArray C.N.less_or_equal``() = + member __.``DateTimes.Collection.ValueWrapArray C.N.less_or_equal``() = validate (DateTimes.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member _.``DateTimes.Collection.ValueWrapArray C.N.greater_than``() = + member __.``DateTimes.Collection.ValueWrapArray C.N.greater_than``() = validate (DateTimes.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member _.``DateTimes.Collection.ValueWrapArray C.N.greater_or_equal``() = + member __.``DateTimes.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (DateTimes.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member _.``DateTimes.Collection.ArrayArray C.I.equals``() = + member __.``DateTimes.Collection.ArrayArray C.I.equals``() = validate (DateTimes.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``DateTimes.Collection.ArrayArray C.I.equal``() = + member __.``DateTimes.Collection.ArrayArray C.I.equal``() = validate (DateTimes.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``DateTimes.Collection.ArrayArray C.I.not_equal``() = + member __.``DateTimes.Collection.ArrayArray C.I.not_equal``() = validate (DateTimes.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``DateTimes.Collection.ArrayArray C.I.compare``() = + member __.``DateTimes.Collection.ArrayArray C.I.compare``() = validate (DateTimes.Collection.ArrayArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;1;-1;-1;-1;1;-1;0;-1;-1;-1;1;1;1;0;-1;-1;1;1;1;1;0;1;1;1;1;1;-1;0 |] [] - member _.``DateTimes.Collection.ArrayArray C.I.less_than``() = + member __.``DateTimes.Collection.ArrayArray C.I.less_than``() = validate (DateTimes.Collection.ArrayArray) C.I.less_than [| 0;1;1;1;1;1;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0 |] [] - member _.``DateTimes.Collection.ArrayArray C.I.less_or_equal``() = + member __.``DateTimes.Collection.ArrayArray C.I.less_or_equal``() = validate (DateTimes.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;0;1;1;1;0;1;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;0;0;0;0;0;1;1 |] [] - member _.``DateTimes.Collection.ArrayArray C.I.greater_than``() = + member __.``DateTimes.Collection.ArrayArray C.I.greater_than``() = validate (DateTimes.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;1;0;0;0;1;0;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;1;1;1;1;1;0;0 |] [] - member _.``DateTimes.Collection.ArrayArray C.I.greater_or_equal``() = + member __.``DateTimes.Collection.ArrayArray C.I.greater_or_equal``() = validate (DateTimes.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;1;0;0;0;1;0;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1 |] [] - member _.``DateTimes.Collection.ArrayArray C.N.equals``() = + member __.``DateTimes.Collection.ArrayArray C.N.equals``() = validate (DateTimes.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``DateTimes.Collection.ArrayArray C.N.equal``() = + member __.``DateTimes.Collection.ArrayArray C.N.equal``() = validate (DateTimes.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``DateTimes.Collection.ArrayArray C.N.not_equal``() = + member __.``DateTimes.Collection.ArrayArray C.N.not_equal``() = validate (DateTimes.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``DateTimes.Collection.ArrayArray C.N.compare``() = + member __.``DateTimes.Collection.ArrayArray C.N.compare``() = validate (DateTimes.Collection.ArrayArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;1;-1;-1;-1;1;-1;0;-1;-1;-1;1;1;1;0;-1;-1;1;1;1;1;0;1;1;1;1;1;-1;0 |] [] - member _.``DateTimes.Collection.ArrayArray C.N.less_than``() = + member __.``DateTimes.Collection.ArrayArray C.N.less_than``() = validate (DateTimes.Collection.ArrayArray) C.N.less_than [| 0;1;1;1;1;1;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0 |] [] - member _.``DateTimes.Collection.ArrayArray C.N.less_or_equal``() = + member __.``DateTimes.Collection.ArrayArray C.N.less_or_equal``() = validate (DateTimes.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;0;1;1;1;0;1;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;0;0;0;0;0;1;1 |] [] - member _.``DateTimes.Collection.ArrayArray C.N.greater_than``() = + member __.``DateTimes.Collection.ArrayArray C.N.greater_than``() = validate (DateTimes.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;1;0;0;0;1;0;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;1;1;1;1;1;0;0 |] [] - member _.``DateTimes.Collection.ArrayArray C.N.greater_or_equal``() = + member __.``DateTimes.Collection.ArrayArray C.N.greater_or_equal``() = validate (DateTimes.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;1;0;0;0;1;0;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1 |] [] - member _.``DateTimes.Collection.ListArray C.I.equals``() = + member __.``DateTimes.Collection.ListArray C.I.equals``() = validate (DateTimes.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``DateTimes.Collection.ListArray C.I.equal``() = + member __.``DateTimes.Collection.ListArray C.I.equal``() = validate (DateTimes.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``DateTimes.Collection.ListArray C.I.not_equal``() = + member __.``DateTimes.Collection.ListArray C.I.not_equal``() = validate (DateTimes.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``DateTimes.Collection.ListArray C.I.compare``() = + member __.``DateTimes.Collection.ListArray C.I.compare``() = validate (DateTimes.Collection.ListArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;1;1;-1;1;1;-1;0;1;-1;-1;1;-1;-1;0;-1;-1;1;1;1;1;0;1;1;-1;1;1;-1;0 |] [] - member _.``DateTimes.Collection.ListArray C.I.less_than``() = + member __.``DateTimes.Collection.ListArray C.I.less_than``() = validate (DateTimes.Collection.ListArray) C.I.less_than [| 0;1;1;1;1;1;0;0;0;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;0;0;0;0;0;0;0;1;0;0;1;0 |] [] - member _.``DateTimes.Collection.ListArray C.I.less_or_equal``() = + member __.``DateTimes.Collection.ListArray C.I.less_or_equal``() = validate (DateTimes.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;1;1;1;0;0;0;0;1;0;0;1;0;0;1;1 |] [] - member _.``DateTimes.Collection.ListArray C.I.greater_than``() = + member __.``DateTimes.Collection.ListArray C.I.greater_than``() = validate (DateTimes.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;1;1;1;1;0;1;1;0;1;1;0;0 |] [] - member _.``DateTimes.Collection.ListArray C.I.greater_or_equal``() = + member __.``DateTimes.Collection.ListArray C.I.greater_or_equal``() = validate (DateTimes.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;1;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;1;1;1;1;1;1;1;0;1;1;0;1 |] [] - member _.``DateTimes.Collection.ListArray C.N.equals``() = + member __.``DateTimes.Collection.ListArray C.N.equals``() = validate (DateTimes.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``DateTimes.Collection.ListArray C.N.equal``() = + member __.``DateTimes.Collection.ListArray C.N.equal``() = validate (DateTimes.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``DateTimes.Collection.ListArray C.N.not_equal``() = + member __.``DateTimes.Collection.ListArray C.N.not_equal``() = validate (DateTimes.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``DateTimes.Collection.ListArray C.N.compare``() = + member __.``DateTimes.Collection.ListArray C.N.compare``() = validate (DateTimes.Collection.ListArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;1;1;-1;1;1;-1;0;1;-1;-1;1;-1;-1;0;-1;-1;1;1;1;1;0;1;1;-1;1;1;-1;0 |] [] - member _.``DateTimes.Collection.ListArray C.N.less_than``() = + member __.``DateTimes.Collection.ListArray C.N.less_than``() = validate (DateTimes.Collection.ListArray) C.N.less_than [| 0;1;1;1;1;1;0;0;0;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;0;0;0;0;0;0;0;1;0;0;1;0 |] [] - member _.``DateTimes.Collection.ListArray C.N.less_or_equal``() = + member __.``DateTimes.Collection.ListArray C.N.less_or_equal``() = validate (DateTimes.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;1;1;1;0;0;0;0;1;0;0;1;0;0;1;1 |] [] - member _.``DateTimes.Collection.ListArray C.N.greater_than``() = + member __.``DateTimes.Collection.ListArray C.N.greater_than``() = validate (DateTimes.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;1;1;1;1;0;1;1;0;1;1;0;0 |] [] - member _.``DateTimes.Collection.ListArray C.N.greater_or_equal``() = + member __.``DateTimes.Collection.ListArray C.N.greater_or_equal``() = validate (DateTimes.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;1;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;1;1;1;1;1;1;1;0;1;1;0;1 |] [] - member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;-1;0;1;-1;1;1;-1;-1;0;-1;1;1;-1;1;1;0;1;1;-1;-1;-1;-1;0 |] [] - member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;1;0;0;1;1;0;1;0;0;1;0;0;0;0;0;1;1;1;1;0 |] [] - member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;0;0;1;0;0;1;0;0;1;1;1;1;1 |] [] - member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;1;1;0;1;1;0;1;1;0;0;0;0;0 |] [] - member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;0;1;1;0;0;1;0;1;1;0;1;1;1;1;1;0;0;0;0;1 |] [] - member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;-1;0;1;-1;1;1;-1;-1;0;-1;1;1;-1;1;1;0;1;1;-1;-1;-1;-1;0 |] [] - member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;1;0;0;1;1;0;1;0;0;1;0;0;0;0;0;1;1;1;1;0 |] [] - member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;0;0;1;0;0;1;0;0;1;1;1;1;1 |] [] - member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;1;1;0;1;1;0;1;1;0;0;0;0;0 |] [] - member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;0;1;1;0;0;1;0;1;1;0;1;1;1;1;1;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.Array E.I.equals``() = + member __.``NullableDateTimes.Collection.Array E.I.equals``() = validate (NullableDateTimes.Collection.Array) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.Array E.I.equal``() = + member __.``NullableDateTimes.Collection.Array E.I.equal``() = validate (NullableDateTimes.Collection.Array) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.Array E.I.not_equal``() = + member __.``NullableDateTimes.Collection.Array E.I.not_equal``() = validate (NullableDateTimes.Collection.Array) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableDateTimes.Collection.Array E.N.equals``() = + member __.``NullableDateTimes.Collection.Array E.N.equals``() = validate (NullableDateTimes.Collection.Array) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.Array E.N.equal``() = + member __.``NullableDateTimes.Collection.Array E.N.equal``() = validate (NullableDateTimes.Collection.Array) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.Array E.N.not_equal``() = + member __.``NullableDateTimes.Collection.Array E.N.not_equal``() = validate (NullableDateTimes.Collection.Array) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableDateTimes.Collection.OptionArray E.I.equals``() = + member __.``NullableDateTimes.Collection.OptionArray E.I.equals``() = validate (NullableDateTimes.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.OptionArray E.I.equal``() = + member __.``NullableDateTimes.Collection.OptionArray E.I.equal``() = validate (NullableDateTimes.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.OptionArray E.I.not_equal``() = + member __.``NullableDateTimes.Collection.OptionArray E.I.not_equal``() = validate (NullableDateTimes.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``NullableDateTimes.Collection.OptionArray E.N.equals``() = + member __.``NullableDateTimes.Collection.OptionArray E.N.equals``() = validate (NullableDateTimes.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.OptionArray E.N.equal``() = + member __.``NullableDateTimes.Collection.OptionArray E.N.equal``() = validate (NullableDateTimes.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.OptionArray E.N.not_equal``() = + member __.``NullableDateTimes.Collection.OptionArray E.N.not_equal``() = validate (NullableDateTimes.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member _.``NullableDateTimes.Collection.RefArray E.I.equals``() = + member __.``NullableDateTimes.Collection.RefArray E.I.equals``() = validate (NullableDateTimes.Collection.RefArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.RefArray E.I.equal``() = + member __.``NullableDateTimes.Collection.RefArray E.I.equal``() = validate (NullableDateTimes.Collection.RefArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.RefArray E.I.not_equal``() = + member __.``NullableDateTimes.Collection.RefArray E.I.not_equal``() = validate (NullableDateTimes.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableDateTimes.Collection.RefArray E.N.equals``() = + member __.``NullableDateTimes.Collection.RefArray E.N.equals``() = validate (NullableDateTimes.Collection.RefArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.RefArray E.N.equal``() = + member __.``NullableDateTimes.Collection.RefArray E.N.equal``() = validate (NullableDateTimes.Collection.RefArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.RefArray E.N.not_equal``() = + member __.``NullableDateTimes.Collection.RefArray E.N.not_equal``() = validate (NullableDateTimes.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableDateTimes.Collection.RefWrapArray E.I.equals``() = + member __.``NullableDateTimes.Collection.RefWrapArray E.I.equals``() = validate (NullableDateTimes.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.RefWrapArray E.I.equal``() = + member __.``NullableDateTimes.Collection.RefWrapArray E.I.equal``() = validate (NullableDateTimes.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.RefWrapArray E.I.not_equal``() = + member __.``NullableDateTimes.Collection.RefWrapArray E.I.not_equal``() = validate (NullableDateTimes.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableDateTimes.Collection.RefWrapArray E.N.equals``() = + member __.``NullableDateTimes.Collection.RefWrapArray E.N.equals``() = validate (NullableDateTimes.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.RefWrapArray E.N.equal``() = + member __.``NullableDateTimes.Collection.RefWrapArray E.N.equal``() = validate (NullableDateTimes.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.RefWrapArray E.N.not_equal``() = + member __.``NullableDateTimes.Collection.RefWrapArray E.N.not_equal``() = validate (NullableDateTimes.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableDateTimes.Collection.UnionArray E.I.equals``() = + member __.``NullableDateTimes.Collection.UnionArray E.I.equals``() = validate (NullableDateTimes.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -55686,7 +55686,7 @@ type GeneratedTests () = |] [] - member _.``NullableDateTimes.Collection.UnionArray E.I.equal``() = + member __.``NullableDateTimes.Collection.UnionArray E.I.equal``() = validate (NullableDateTimes.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -55711,7 +55711,7 @@ type GeneratedTests () = |] [] - member _.``NullableDateTimes.Collection.UnionArray E.I.not_equal``() = + member __.``NullableDateTimes.Collection.UnionArray E.I.not_equal``() = validate (NullableDateTimes.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -55736,7 +55736,7 @@ type GeneratedTests () = |] [] - member _.``NullableDateTimes.Collection.UnionArray E.N.equals``() = + member __.``NullableDateTimes.Collection.UnionArray E.N.equals``() = validate (NullableDateTimes.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -55761,7 +55761,7 @@ type GeneratedTests () = |] [] - member _.``NullableDateTimes.Collection.UnionArray E.N.equal``() = + member __.``NullableDateTimes.Collection.UnionArray E.N.equal``() = validate (NullableDateTimes.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -55786,7 +55786,7 @@ type GeneratedTests () = |] [] - member _.``NullableDateTimes.Collection.UnionArray E.N.not_equal``() = + member __.``NullableDateTimes.Collection.UnionArray E.N.not_equal``() = validate (NullableDateTimes.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -55811,7 +55811,7 @@ type GeneratedTests () = |] [] - member _.``NullableDateTimes.Collection.UnionWrapArray E.I.equals``() = + member __.``NullableDateTimes.Collection.UnionWrapArray E.I.equals``() = validate (NullableDateTimes.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -55836,7 +55836,7 @@ type GeneratedTests () = |] [] - member _.``NullableDateTimes.Collection.UnionWrapArray E.I.equal``() = + member __.``NullableDateTimes.Collection.UnionWrapArray E.I.equal``() = validate (NullableDateTimes.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -55861,7 +55861,7 @@ type GeneratedTests () = |] [] - member _.``NullableDateTimes.Collection.UnionWrapArray E.I.not_equal``() = + member __.``NullableDateTimes.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableDateTimes.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -55886,7 +55886,7 @@ type GeneratedTests () = |] [] - member _.``NullableDateTimes.Collection.UnionWrapArray E.N.equals``() = + member __.``NullableDateTimes.Collection.UnionWrapArray E.N.equals``() = validate (NullableDateTimes.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -55911,7 +55911,7 @@ type GeneratedTests () = |] [] - member _.``NullableDateTimes.Collection.UnionWrapArray E.N.equal``() = + member __.``NullableDateTimes.Collection.UnionWrapArray E.N.equal``() = validate (NullableDateTimes.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -55936,7 +55936,7 @@ type GeneratedTests () = |] [] - member _.``NullableDateTimes.Collection.UnionWrapArray E.N.not_equal``() = + member __.``NullableDateTimes.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableDateTimes.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -55961,547 +55961,547 @@ type GeneratedTests () = |] [] - member _.``NullableDateTimes.Collection.ValueArray E.I.equals``() = + member __.``NullableDateTimes.Collection.ValueArray E.I.equals``() = validate (NullableDateTimes.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.ValueArray E.I.equal``() = + member __.``NullableDateTimes.Collection.ValueArray E.I.equal``() = validate (NullableDateTimes.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.ValueArray E.I.not_equal``() = + member __.``NullableDateTimes.Collection.ValueArray E.I.not_equal``() = validate (NullableDateTimes.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableDateTimes.Collection.ValueArray E.N.equals``() = + member __.``NullableDateTimes.Collection.ValueArray E.N.equals``() = validate (NullableDateTimes.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.ValueArray E.N.equal``() = + member __.``NullableDateTimes.Collection.ValueArray E.N.equal``() = validate (NullableDateTimes.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.ValueArray E.N.not_equal``() = + member __.``NullableDateTimes.Collection.ValueArray E.N.not_equal``() = validate (NullableDateTimes.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableDateTimes.Collection.ValueWrapArray E.I.equals``() = + member __.``NullableDateTimes.Collection.ValueWrapArray E.I.equals``() = validate (NullableDateTimes.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.ValueWrapArray E.I.equal``() = + member __.``NullableDateTimes.Collection.ValueWrapArray E.I.equal``() = validate (NullableDateTimes.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.ValueWrapArray E.I.not_equal``() = + member __.``NullableDateTimes.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableDateTimes.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableDateTimes.Collection.ValueWrapArray E.N.equals``() = + member __.``NullableDateTimes.Collection.ValueWrapArray E.N.equals``() = validate (NullableDateTimes.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.ValueWrapArray E.N.equal``() = + member __.``NullableDateTimes.Collection.ValueWrapArray E.N.equal``() = validate (NullableDateTimes.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.ValueWrapArray E.N.not_equal``() = + member __.``NullableDateTimes.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableDateTimes.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member _.``NullableDateTimes.Collection.ArrayArray E.I.equals``() = + member __.``NullableDateTimes.Collection.ArrayArray E.I.equals``() = validate (NullableDateTimes.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.ArrayArray E.I.equal``() = + member __.``NullableDateTimes.Collection.ArrayArray E.I.equal``() = validate (NullableDateTimes.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.ArrayArray E.I.not_equal``() = + member __.``NullableDateTimes.Collection.ArrayArray E.I.not_equal``() = validate (NullableDateTimes.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member _.``NullableDateTimes.Collection.ArrayArray E.N.equals``() = + member __.``NullableDateTimes.Collection.ArrayArray E.N.equals``() = validate (NullableDateTimes.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.ArrayArray E.N.equal``() = + member __.``NullableDateTimes.Collection.ArrayArray E.N.equal``() = validate (NullableDateTimes.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.ArrayArray E.N.not_equal``() = + member __.``NullableDateTimes.Collection.ArrayArray E.N.not_equal``() = validate (NullableDateTimes.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member _.``NullableDateTimes.Collection.ListArray E.I.equals``() = + member __.``NullableDateTimes.Collection.ListArray E.I.equals``() = validate (NullableDateTimes.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.ListArray E.I.equal``() = + member __.``NullableDateTimes.Collection.ListArray E.I.equal``() = validate (NullableDateTimes.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.ListArray E.I.not_equal``() = + member __.``NullableDateTimes.Collection.ListArray E.I.not_equal``() = validate (NullableDateTimes.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member _.``NullableDateTimes.Collection.ListArray E.N.equals``() = + member __.``NullableDateTimes.Collection.ListArray E.N.equals``() = validate (NullableDateTimes.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.ListArray E.N.equal``() = + member __.``NullableDateTimes.Collection.ListArray E.N.equal``() = validate (NullableDateTimes.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member _.``NullableDateTimes.Collection.ListArray E.N.not_equal``() = + member __.``NullableDateTimes.Collection.ListArray E.N.not_equal``() = validate (NullableDateTimes.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.Array C.I.equals``() = + member __.``Tuple2s.Collection.Array C.I.equals``() = validate (Tuple2s.Collection.Array) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.Array C.I.equal``() = + member __.``Tuple2s.Collection.Array C.I.equal``() = validate (Tuple2s.Collection.Array) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.Array C.I.not_equal``() = + member __.``Tuple2s.Collection.Array C.I.not_equal``() = validate (Tuple2s.Collection.Array) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.Array C.I.compare``() = + member __.``Tuple2s.Collection.Array C.I.compare``() = validate (Tuple2s.Collection.Array) C.I.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.Array C.I.less_than``() = + member __.``Tuple2s.Collection.Array C.I.less_than``() = validate (Tuple2s.Collection.Array) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.Array C.I.less_or_equal``() = + member __.``Tuple2s.Collection.Array C.I.less_or_equal``() = validate (Tuple2s.Collection.Array) C.I.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.Array C.I.greater_than``() = + member __.``Tuple2s.Collection.Array C.I.greater_than``() = validate (Tuple2s.Collection.Array) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.Array C.I.greater_or_equal``() = + member __.``Tuple2s.Collection.Array C.I.greater_or_equal``() = validate (Tuple2s.Collection.Array) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.Array C.N.equals``() = + member __.``Tuple2s.Collection.Array C.N.equals``() = validate (Tuple2s.Collection.Array) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.Array C.N.equal``() = + member __.``Tuple2s.Collection.Array C.N.equal``() = validate (Tuple2s.Collection.Array) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.Array C.N.not_equal``() = + member __.``Tuple2s.Collection.Array C.N.not_equal``() = validate (Tuple2s.Collection.Array) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.Array C.N.compare``() = + member __.``Tuple2s.Collection.Array C.N.compare``() = validate (Tuple2s.Collection.Array) C.N.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.Array C.N.less_than``() = + member __.``Tuple2s.Collection.Array C.N.less_than``() = validate (Tuple2s.Collection.Array) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.Array C.N.less_or_equal``() = + member __.``Tuple2s.Collection.Array C.N.less_or_equal``() = validate (Tuple2s.Collection.Array) C.N.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.Array C.N.greater_than``() = + member __.``Tuple2s.Collection.Array C.N.greater_than``() = validate (Tuple2s.Collection.Array) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.Array C.N.greater_or_equal``() = + member __.``Tuple2s.Collection.Array C.N.greater_or_equal``() = validate (Tuple2s.Collection.Array) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.OptionArray C.I.equals``() = + member __.``Tuple2s.Collection.OptionArray C.I.equals``() = validate (Tuple2s.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.OptionArray C.I.equal``() = + member __.``Tuple2s.Collection.OptionArray C.I.equal``() = validate (Tuple2s.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.OptionArray C.I.not_equal``() = + member __.``Tuple2s.Collection.OptionArray C.I.not_equal``() = validate (Tuple2s.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.OptionArray C.I.compare``() = + member __.``Tuple2s.Collection.OptionArray C.I.compare``() = validate (Tuple2s.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0;-1;-1;1;1;1;0;-1;1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.OptionArray C.I.less_than``() = + member __.``Tuple2s.Collection.OptionArray C.I.less_than``() = validate (Tuple2s.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.OptionArray C.I.less_or_equal``() = + member __.``Tuple2s.Collection.OptionArray C.I.less_or_equal``() = validate (Tuple2s.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.OptionArray C.I.greater_than``() = + member __.``Tuple2s.Collection.OptionArray C.I.greater_than``() = validate (Tuple2s.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0 |] [] - member _.``Tuple2s.Collection.OptionArray C.I.greater_or_equal``() = + member __.``Tuple2s.Collection.OptionArray C.I.greater_or_equal``() = validate (Tuple2s.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;1 |] [] - member _.``Tuple2s.Collection.OptionArray C.N.equals``() = + member __.``Tuple2s.Collection.OptionArray C.N.equals``() = validate (Tuple2s.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.OptionArray C.N.equal``() = + member __.``Tuple2s.Collection.OptionArray C.N.equal``() = validate (Tuple2s.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.OptionArray C.N.not_equal``() = + member __.``Tuple2s.Collection.OptionArray C.N.not_equal``() = validate (Tuple2s.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.OptionArray C.N.compare``() = + member __.``Tuple2s.Collection.OptionArray C.N.compare``() = validate (Tuple2s.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0;-1;-1;1;1;1;0;-1;1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.OptionArray C.N.less_than``() = + member __.``Tuple2s.Collection.OptionArray C.N.less_than``() = validate (Tuple2s.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.OptionArray C.N.less_or_equal``() = + member __.``Tuple2s.Collection.OptionArray C.N.less_or_equal``() = validate (Tuple2s.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.OptionArray C.N.greater_than``() = + member __.``Tuple2s.Collection.OptionArray C.N.greater_than``() = validate (Tuple2s.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0 |] [] - member _.``Tuple2s.Collection.OptionArray C.N.greater_or_equal``() = + member __.``Tuple2s.Collection.OptionArray C.N.greater_or_equal``() = validate (Tuple2s.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;1 |] [] - member _.``Tuple2s.Collection.RefArray C.I.equals``() = + member __.``Tuple2s.Collection.RefArray C.I.equals``() = validate (Tuple2s.Collection.RefArray) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.RefArray C.I.equal``() = + member __.``Tuple2s.Collection.RefArray C.I.equal``() = validate (Tuple2s.Collection.RefArray) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.RefArray C.I.not_equal``() = + member __.``Tuple2s.Collection.RefArray C.I.not_equal``() = validate (Tuple2s.Collection.RefArray) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.RefArray C.I.compare``() = + member __.``Tuple2s.Collection.RefArray C.I.compare``() = validate (Tuple2s.Collection.RefArray) C.I.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.RefArray C.I.less_than``() = + member __.``Tuple2s.Collection.RefArray C.I.less_than``() = validate (Tuple2s.Collection.RefArray) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.RefArray C.I.less_or_equal``() = + member __.``Tuple2s.Collection.RefArray C.I.less_or_equal``() = validate (Tuple2s.Collection.RefArray) C.I.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.RefArray C.I.greater_than``() = + member __.``Tuple2s.Collection.RefArray C.I.greater_than``() = validate (Tuple2s.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.RefArray C.I.greater_or_equal``() = + member __.``Tuple2s.Collection.RefArray C.I.greater_or_equal``() = validate (Tuple2s.Collection.RefArray) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.RefArray C.N.equals``() = + member __.``Tuple2s.Collection.RefArray C.N.equals``() = validate (Tuple2s.Collection.RefArray) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.RefArray C.N.equal``() = + member __.``Tuple2s.Collection.RefArray C.N.equal``() = validate (Tuple2s.Collection.RefArray) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.RefArray C.N.not_equal``() = + member __.``Tuple2s.Collection.RefArray C.N.not_equal``() = validate (Tuple2s.Collection.RefArray) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.RefArray C.N.compare``() = + member __.``Tuple2s.Collection.RefArray C.N.compare``() = validate (Tuple2s.Collection.RefArray) C.N.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.RefArray C.N.less_than``() = + member __.``Tuple2s.Collection.RefArray C.N.less_than``() = validate (Tuple2s.Collection.RefArray) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.RefArray C.N.less_or_equal``() = + member __.``Tuple2s.Collection.RefArray C.N.less_or_equal``() = validate (Tuple2s.Collection.RefArray) C.N.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.RefArray C.N.greater_than``() = + member __.``Tuple2s.Collection.RefArray C.N.greater_than``() = validate (Tuple2s.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.RefArray C.N.greater_or_equal``() = + member __.``Tuple2s.Collection.RefArray C.N.greater_or_equal``() = validate (Tuple2s.Collection.RefArray) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.RefWrapArray C.I.equals``() = + member __.``Tuple2s.Collection.RefWrapArray C.I.equals``() = validate (Tuple2s.Collection.RefWrapArray) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.RefWrapArray C.I.equal``() = + member __.``Tuple2s.Collection.RefWrapArray C.I.equal``() = validate (Tuple2s.Collection.RefWrapArray) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.RefWrapArray C.I.not_equal``() = + member __.``Tuple2s.Collection.RefWrapArray C.I.not_equal``() = validate (Tuple2s.Collection.RefWrapArray) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.RefWrapArray C.I.compare``() = + member __.``Tuple2s.Collection.RefWrapArray C.I.compare``() = validate (Tuple2s.Collection.RefWrapArray) C.I.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.RefWrapArray C.I.less_than``() = + member __.``Tuple2s.Collection.RefWrapArray C.I.less_than``() = validate (Tuple2s.Collection.RefWrapArray) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.RefWrapArray C.I.less_or_equal``() = + member __.``Tuple2s.Collection.RefWrapArray C.I.less_or_equal``() = validate (Tuple2s.Collection.RefWrapArray) C.I.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.RefWrapArray C.I.greater_than``() = + member __.``Tuple2s.Collection.RefWrapArray C.I.greater_than``() = validate (Tuple2s.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.RefWrapArray C.I.greater_or_equal``() = + member __.``Tuple2s.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Tuple2s.Collection.RefWrapArray) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.RefWrapArray C.N.equals``() = + member __.``Tuple2s.Collection.RefWrapArray C.N.equals``() = validate (Tuple2s.Collection.RefWrapArray) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.RefWrapArray C.N.equal``() = + member __.``Tuple2s.Collection.RefWrapArray C.N.equal``() = validate (Tuple2s.Collection.RefWrapArray) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.RefWrapArray C.N.not_equal``() = + member __.``Tuple2s.Collection.RefWrapArray C.N.not_equal``() = validate (Tuple2s.Collection.RefWrapArray) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.RefWrapArray C.N.compare``() = + member __.``Tuple2s.Collection.RefWrapArray C.N.compare``() = validate (Tuple2s.Collection.RefWrapArray) C.N.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.RefWrapArray C.N.less_than``() = + member __.``Tuple2s.Collection.RefWrapArray C.N.less_than``() = validate (Tuple2s.Collection.RefWrapArray) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.RefWrapArray C.N.less_or_equal``() = + member __.``Tuple2s.Collection.RefWrapArray C.N.less_or_equal``() = validate (Tuple2s.Collection.RefWrapArray) C.N.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.RefWrapArray C.N.greater_than``() = + member __.``Tuple2s.Collection.RefWrapArray C.N.greater_than``() = validate (Tuple2s.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.RefWrapArray C.N.greater_or_equal``() = + member __.``Tuple2s.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Tuple2s.Collection.RefWrapArray) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.UnionArray C.I.equals``() = + member __.``Tuple2s.Collection.UnionArray C.I.equals``() = validate (Tuple2s.Collection.UnionArray) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -56526,7 +56526,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionArray C.I.equal``() = + member __.``Tuple2s.Collection.UnionArray C.I.equal``() = validate (Tuple2s.Collection.UnionArray) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -56551,7 +56551,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionArray C.I.not_equal``() = + member __.``Tuple2s.Collection.UnionArray C.I.not_equal``() = validate (Tuple2s.Collection.UnionArray) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -56576,7 +56576,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionArray C.I.compare``() = + member __.``Tuple2s.Collection.UnionArray C.I.compare``() = validate (Tuple2s.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1; @@ -56601,7 +56601,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionArray C.I.less_than``() = + member __.``Tuple2s.Collection.UnionArray C.I.less_than``() = validate (Tuple2s.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -56626,7 +56626,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionArray C.I.less_or_equal``() = + member __.``Tuple2s.Collection.UnionArray C.I.less_or_equal``() = validate (Tuple2s.Collection.UnionArray) C.I.less_or_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -56651,7 +56651,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionArray C.I.greater_than``() = + member __.``Tuple2s.Collection.UnionArray C.I.greater_than``() = validate (Tuple2s.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -56676,7 +56676,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionArray C.I.greater_or_equal``() = + member __.``Tuple2s.Collection.UnionArray C.I.greater_or_equal``() = validate (Tuple2s.Collection.UnionArray) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -56701,7 +56701,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionArray C.N.equals``() = + member __.``Tuple2s.Collection.UnionArray C.N.equals``() = validate (Tuple2s.Collection.UnionArray) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -56726,7 +56726,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionArray C.N.equal``() = + member __.``Tuple2s.Collection.UnionArray C.N.equal``() = validate (Tuple2s.Collection.UnionArray) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -56751,7 +56751,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionArray C.N.not_equal``() = + member __.``Tuple2s.Collection.UnionArray C.N.not_equal``() = validate (Tuple2s.Collection.UnionArray) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -56776,7 +56776,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionArray C.N.compare``() = + member __.``Tuple2s.Collection.UnionArray C.N.compare``() = validate (Tuple2s.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1; @@ -56801,7 +56801,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionArray C.N.less_than``() = + member __.``Tuple2s.Collection.UnionArray C.N.less_than``() = validate (Tuple2s.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -56826,7 +56826,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionArray C.N.less_or_equal``() = + member __.``Tuple2s.Collection.UnionArray C.N.less_or_equal``() = validate (Tuple2s.Collection.UnionArray) C.N.less_or_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -56851,7 +56851,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionArray C.N.greater_than``() = + member __.``Tuple2s.Collection.UnionArray C.N.greater_than``() = validate (Tuple2s.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -56876,7 +56876,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionArray C.N.greater_or_equal``() = + member __.``Tuple2s.Collection.UnionArray C.N.greater_or_equal``() = validate (Tuple2s.Collection.UnionArray) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -56901,7 +56901,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionWrapArray C.I.equals``() = + member __.``Tuple2s.Collection.UnionWrapArray C.I.equals``() = validate (Tuple2s.Collection.UnionWrapArray) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -56926,7 +56926,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionWrapArray C.I.equal``() = + member __.``Tuple2s.Collection.UnionWrapArray C.I.equal``() = validate (Tuple2s.Collection.UnionWrapArray) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -56951,7 +56951,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionWrapArray C.I.not_equal``() = + member __.``Tuple2s.Collection.UnionWrapArray C.I.not_equal``() = validate (Tuple2s.Collection.UnionWrapArray) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -56976,7 +56976,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionWrapArray C.I.compare``() = + member __.``Tuple2s.Collection.UnionWrapArray C.I.compare``() = validate (Tuple2s.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1; @@ -57001,7 +57001,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionWrapArray C.I.less_than``() = + member __.``Tuple2s.Collection.UnionWrapArray C.I.less_than``() = validate (Tuple2s.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -57026,7 +57026,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionWrapArray C.I.less_or_equal``() = + member __.``Tuple2s.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Tuple2s.Collection.UnionWrapArray) C.I.less_or_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -57051,7 +57051,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionWrapArray C.I.greater_than``() = + member __.``Tuple2s.Collection.UnionWrapArray C.I.greater_than``() = validate (Tuple2s.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -57076,7 +57076,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionWrapArray C.I.greater_or_equal``() = + member __.``Tuple2s.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Tuple2s.Collection.UnionWrapArray) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -57101,7 +57101,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionWrapArray C.N.equals``() = + member __.``Tuple2s.Collection.UnionWrapArray C.N.equals``() = validate (Tuple2s.Collection.UnionWrapArray) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -57126,7 +57126,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionWrapArray C.N.equal``() = + member __.``Tuple2s.Collection.UnionWrapArray C.N.equal``() = validate (Tuple2s.Collection.UnionWrapArray) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -57151,7 +57151,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionWrapArray C.N.not_equal``() = + member __.``Tuple2s.Collection.UnionWrapArray C.N.not_equal``() = validate (Tuple2s.Collection.UnionWrapArray) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -57176,7 +57176,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionWrapArray C.N.compare``() = + member __.``Tuple2s.Collection.UnionWrapArray C.N.compare``() = validate (Tuple2s.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1; @@ -57201,7 +57201,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionWrapArray C.N.less_than``() = + member __.``Tuple2s.Collection.UnionWrapArray C.N.less_than``() = validate (Tuple2s.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -57226,7 +57226,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionWrapArray C.N.less_or_equal``() = + member __.``Tuple2s.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Tuple2s.Collection.UnionWrapArray) C.N.less_or_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -57251,7 +57251,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionWrapArray C.N.greater_than``() = + member __.``Tuple2s.Collection.UnionWrapArray C.N.greater_than``() = validate (Tuple2s.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -57276,7 +57276,7 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.UnionWrapArray C.N.greater_or_equal``() = + member __.``Tuple2s.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Tuple2s.Collection.UnionWrapArray) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -57301,647 +57301,647 @@ type GeneratedTests () = |] [] - member _.``Tuple2s.Collection.ValueArray C.I.equals``() = + member __.``Tuple2s.Collection.ValueArray C.I.equals``() = validate (Tuple2s.Collection.ValueArray) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.ValueArray C.I.equal``() = + member __.``Tuple2s.Collection.ValueArray C.I.equal``() = validate (Tuple2s.Collection.ValueArray) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.ValueArray C.I.not_equal``() = + member __.``Tuple2s.Collection.ValueArray C.I.not_equal``() = validate (Tuple2s.Collection.ValueArray) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.ValueArray C.I.compare``() = + member __.``Tuple2s.Collection.ValueArray C.I.compare``() = validate (Tuple2s.Collection.ValueArray) C.I.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.ValueArray C.I.less_than``() = + member __.``Tuple2s.Collection.ValueArray C.I.less_than``() = validate (Tuple2s.Collection.ValueArray) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ValueArray C.I.less_or_equal``() = + member __.``Tuple2s.Collection.ValueArray C.I.less_or_equal``() = validate (Tuple2s.Collection.ValueArray) C.I.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.ValueArray C.I.greater_than``() = + member __.``Tuple2s.Collection.ValueArray C.I.greater_than``() = validate (Tuple2s.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ValueArray C.I.greater_or_equal``() = + member __.``Tuple2s.Collection.ValueArray C.I.greater_or_equal``() = validate (Tuple2s.Collection.ValueArray) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.ValueArray C.N.equals``() = + member __.``Tuple2s.Collection.ValueArray C.N.equals``() = validate (Tuple2s.Collection.ValueArray) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.ValueArray C.N.equal``() = + member __.``Tuple2s.Collection.ValueArray C.N.equal``() = validate (Tuple2s.Collection.ValueArray) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.ValueArray C.N.not_equal``() = + member __.``Tuple2s.Collection.ValueArray C.N.not_equal``() = validate (Tuple2s.Collection.ValueArray) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.ValueArray C.N.compare``() = + member __.``Tuple2s.Collection.ValueArray C.N.compare``() = validate (Tuple2s.Collection.ValueArray) C.N.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.ValueArray C.N.less_than``() = + member __.``Tuple2s.Collection.ValueArray C.N.less_than``() = validate (Tuple2s.Collection.ValueArray) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ValueArray C.N.less_or_equal``() = + member __.``Tuple2s.Collection.ValueArray C.N.less_or_equal``() = validate (Tuple2s.Collection.ValueArray) C.N.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.ValueArray C.N.greater_than``() = + member __.``Tuple2s.Collection.ValueArray C.N.greater_than``() = validate (Tuple2s.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ValueArray C.N.greater_or_equal``() = + member __.``Tuple2s.Collection.ValueArray C.N.greater_or_equal``() = validate (Tuple2s.Collection.ValueArray) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.ValueWrapArray C.I.equals``() = + member __.``Tuple2s.Collection.ValueWrapArray C.I.equals``() = validate (Tuple2s.Collection.ValueWrapArray) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.ValueWrapArray C.I.equal``() = + member __.``Tuple2s.Collection.ValueWrapArray C.I.equal``() = validate (Tuple2s.Collection.ValueWrapArray) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.ValueWrapArray C.I.not_equal``() = + member __.``Tuple2s.Collection.ValueWrapArray C.I.not_equal``() = validate (Tuple2s.Collection.ValueWrapArray) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.ValueWrapArray C.I.compare``() = + member __.``Tuple2s.Collection.ValueWrapArray C.I.compare``() = validate (Tuple2s.Collection.ValueWrapArray) C.I.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.ValueWrapArray C.I.less_than``() = + member __.``Tuple2s.Collection.ValueWrapArray C.I.less_than``() = validate (Tuple2s.Collection.ValueWrapArray) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ValueWrapArray C.I.less_or_equal``() = + member __.``Tuple2s.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Tuple2s.Collection.ValueWrapArray) C.I.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.ValueWrapArray C.I.greater_than``() = + member __.``Tuple2s.Collection.ValueWrapArray C.I.greater_than``() = validate (Tuple2s.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ValueWrapArray C.I.greater_or_equal``() = + member __.``Tuple2s.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Tuple2s.Collection.ValueWrapArray) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.ValueWrapArray C.N.equals``() = + member __.``Tuple2s.Collection.ValueWrapArray C.N.equals``() = validate (Tuple2s.Collection.ValueWrapArray) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.ValueWrapArray C.N.equal``() = + member __.``Tuple2s.Collection.ValueWrapArray C.N.equal``() = validate (Tuple2s.Collection.ValueWrapArray) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.ValueWrapArray C.N.not_equal``() = + member __.``Tuple2s.Collection.ValueWrapArray C.N.not_equal``() = validate (Tuple2s.Collection.ValueWrapArray) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.ValueWrapArray C.N.compare``() = + member __.``Tuple2s.Collection.ValueWrapArray C.N.compare``() = validate (Tuple2s.Collection.ValueWrapArray) C.N.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.ValueWrapArray C.N.less_than``() = + member __.``Tuple2s.Collection.ValueWrapArray C.N.less_than``() = validate (Tuple2s.Collection.ValueWrapArray) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ValueWrapArray C.N.less_or_equal``() = + member __.``Tuple2s.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Tuple2s.Collection.ValueWrapArray) C.N.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.ValueWrapArray C.N.greater_than``() = + member __.``Tuple2s.Collection.ValueWrapArray C.N.greater_than``() = validate (Tuple2s.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ValueWrapArray C.N.greater_or_equal``() = + member __.``Tuple2s.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Tuple2s.Collection.ValueWrapArray) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple2s.Collection.ArrayArray C.I.equals``() = + member __.``Tuple2s.Collection.ArrayArray C.I.equals``() = validate (Tuple2s.Collection.ArrayArray) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ArrayArray C.I.equal``() = + member __.``Tuple2s.Collection.ArrayArray C.I.equal``() = validate (Tuple2s.Collection.ArrayArray) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ArrayArray C.I.not_equal``() = + member __.``Tuple2s.Collection.ArrayArray C.I.not_equal``() = validate (Tuple2s.Collection.ArrayArray) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 |] [] - member _.``Tuple2s.Collection.ArrayArray C.I.compare``() = + member __.``Tuple2s.Collection.ArrayArray C.I.compare``() = validate (Tuple2s.Collection.ArrayArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;0;-1;-1;-1; 1;1;1;1;1;0;-1;-1;1;1;1;1;1;1;0;-1;1;1;1;1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.ArrayArray C.I.less_than``() = + member __.``Tuple2s.Collection.ArrayArray C.I.less_than``() = validate (Tuple2s.Collection.ArrayArray) C.I.less_than [| 0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ArrayArray C.I.less_or_equal``() = + member __.``Tuple2s.Collection.ArrayArray C.I.less_or_equal``() = validate (Tuple2s.Collection.ArrayArray) C.I.less_or_equal [| 0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ArrayArray C.I.greater_than``() = + member __.``Tuple2s.Collection.ArrayArray C.I.greater_than``() = validate (Tuple2s.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0; 1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ArrayArray C.I.greater_or_equal``() = + member __.``Tuple2s.Collection.ArrayArray C.I.greater_or_equal``() = validate (Tuple2s.Collection.ArrayArray) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;1;0;0;0;0; 1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ArrayArray C.N.equals``() = + member __.``Tuple2s.Collection.ArrayArray C.N.equals``() = validate (Tuple2s.Collection.ArrayArray) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ArrayArray C.N.equal``() = + member __.``Tuple2s.Collection.ArrayArray C.N.equal``() = validate (Tuple2s.Collection.ArrayArray) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ArrayArray C.N.not_equal``() = + member __.``Tuple2s.Collection.ArrayArray C.N.not_equal``() = validate (Tuple2s.Collection.ArrayArray) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 |] [] - member _.``Tuple2s.Collection.ArrayArray C.N.compare``() = + member __.``Tuple2s.Collection.ArrayArray C.N.compare``() = validate (Tuple2s.Collection.ArrayArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;0;-1;-1;-1; 1;1;1;1;1;0;-1;-1;1;1;1;1;1;1;0;-1;1;1;1;1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.ArrayArray C.N.less_than``() = + member __.``Tuple2s.Collection.ArrayArray C.N.less_than``() = validate (Tuple2s.Collection.ArrayArray) C.N.less_than [| 0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ArrayArray C.N.less_or_equal``() = + member __.``Tuple2s.Collection.ArrayArray C.N.less_or_equal``() = validate (Tuple2s.Collection.ArrayArray) C.N.less_or_equal [| 0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ArrayArray C.N.greater_than``() = + member __.``Tuple2s.Collection.ArrayArray C.N.greater_than``() = validate (Tuple2s.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0; 1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ArrayArray C.N.greater_or_equal``() = + member __.``Tuple2s.Collection.ArrayArray C.N.greater_or_equal``() = validate (Tuple2s.Collection.ArrayArray) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;1;0;0;0;0; 1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ListArray C.I.equals``() = + member __.``Tuple2s.Collection.ListArray C.I.equals``() = validate (Tuple2s.Collection.ListArray) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ListArray C.I.equal``() = + member __.``Tuple2s.Collection.ListArray C.I.equal``() = validate (Tuple2s.Collection.ListArray) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ListArray C.I.not_equal``() = + member __.``Tuple2s.Collection.ListArray C.I.not_equal``() = validate (Tuple2s.Collection.ListArray) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 |] [] - member _.``Tuple2s.Collection.ListArray C.I.compare``() = + member __.``Tuple2s.Collection.ListArray C.I.compare``() = validate (Tuple2s.Collection.ListArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;-1;-1;-1;1;1;0;-1;1;1;-1;-1;1;1;1;0;1;1;1;-1;1;-1;-1;-1;0;-1;-1;-1; 1;1;-1;-1;1;0;-1;-1;1;1;1;-1;1;1;0;-1;1;1;1;1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.ListArray C.I.less_than``() = + member __.``Tuple2s.Collection.ListArray C.I.less_than``() = validate (Tuple2s.Collection.ListArray) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ListArray C.I.less_or_equal``() = + member __.``Tuple2s.Collection.ListArray C.I.less_or_equal``() = validate (Tuple2s.Collection.ListArray) C.I.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ListArray C.I.greater_than``() = + member __.``Tuple2s.Collection.ListArray C.I.greater_than``() = validate (Tuple2s.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ListArray C.I.greater_or_equal``() = + member __.``Tuple2s.Collection.ListArray C.I.greater_or_equal``() = validate (Tuple2s.Collection.ListArray) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ListArray C.N.equals``() = + member __.``Tuple2s.Collection.ListArray C.N.equals``() = validate (Tuple2s.Collection.ListArray) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ListArray C.N.equal``() = + member __.``Tuple2s.Collection.ListArray C.N.equal``() = validate (Tuple2s.Collection.ListArray) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ListArray C.N.not_equal``() = + member __.``Tuple2s.Collection.ListArray C.N.not_equal``() = validate (Tuple2s.Collection.ListArray) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 |] [] - member _.``Tuple2s.Collection.ListArray C.N.compare``() = + member __.``Tuple2s.Collection.ListArray C.N.compare``() = validate (Tuple2s.Collection.ListArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;-1;-1;-1;1;1;0;-1;1;1;-1;-1;1;1;1;0;1;1;1;-1;1;-1;-1;-1;0;-1;-1;-1; 1;1;-1;-1;1;0;-1;-1;1;1;1;-1;1;1;0;-1;1;1;1;1;1;1;1;0 |] [] - member _.``Tuple2s.Collection.ListArray C.N.less_than``() = + member __.``Tuple2s.Collection.ListArray C.N.less_than``() = validate (Tuple2s.Collection.ListArray) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ListArray C.N.less_or_equal``() = + member __.``Tuple2s.Collection.ListArray C.N.less_or_equal``() = validate (Tuple2s.Collection.ListArray) C.N.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ListArray C.N.greater_than``() = + member __.``Tuple2s.Collection.ListArray C.N.greater_than``() = validate (Tuple2s.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ListArray C.N.greater_or_equal``() = + member __.``Tuple2s.Collection.ListArray C.N.greater_or_equal``() = validate (Tuple2s.Collection.ListArray) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 |] [] - member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;-1;-1;1;1;1;0;-1;1;1;-1;1;1;1;1;0;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1; 1;1;-1;-1;1;0;-1;1;1;1;1;-1;1;1;0;1;1;-1;-1;-1;1;-1;-1;0 |] [] - member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;1;1;1;1;1;0;0;1;1;0;1;1;0;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1; 0;0;1;1;0;0;1;0;0;0;0;1;0;0;0;0;0;1;1;1;0;1;1;0 |] [] - member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;0;1;1;1;0;1;1;0;0;0;1;1;0;0;1;0;0;0;0;1;0;0;0;0;0;1;1;1;1;1;1;1; 0;0;1;1;0;1;1;0;0;0;0;1;0;0;1;0;0;1;1;1;0;1;1;1 |] [] - member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;1;1;1;0;0;1;1;0;1;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0; 1;1;0;0;1;0;0;1;1;1;1;0;1;1;0;1;1;0;0;0;1;0;0;0 |] [] - member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;1;1;0;0;1;0;0;1;1;1;1;0;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;0;1;0;0;0; 1;1;0;0;1;1;0;1;1;1;1;0;1;1;1;1;1;0;0;0;1;0;0;1 |] [] - member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 |] [] - member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;-1;-1;1;1;1;0;-1;1;1;-1;1;1;1;1;0;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1; 1;1;-1;-1;1;0;-1;1;1;1;1;-1;1;1;0;1;1;-1;-1;-1;1;-1;-1;0 |] [] - member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;1;1;1;1;1;0;0;1;1;0;1;1;0;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1; 0;0;1;1;0;0;1;0;0;0;0;1;0;0;0;0;0;1;1;1;0;1;1;0 |] [] - member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;0;1;1;1;0;1;1;0;0;0;1;1;0;0;1;0;0;0;0;1;0;0;0;0;0;1;1;1;1;1;1;1; 0;0;1;1;0;1;1;0;0;0;0;1;0;0;1;0;0;1;1;1;0;1;1;1 |] [] - member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;1;1;1;0;0;1;1;0;1;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0; 1;1;0;0;1;0;0;1;1;1;1;0;1;1;0;1;1;0;0;0;1;0;0;0 |] [] - member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;1;1;0;0;1;0;0;1;1;1;1;0;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;0;1;0;0;0; 1;1;0;0;1;1;0;1;1;1;1;0;1;1;1;1;1;0;0;0;1;0;0;1 |] [] - member _.``Tuple3s.Collection.Array C.I.equals``() = + member __.``Tuple3s.Collection.Array C.I.equals``() = validate (Tuple3s.Collection.Array) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple3s.Collection.Array C.I.equal``() = + member __.``Tuple3s.Collection.Array C.I.equal``() = validate (Tuple3s.Collection.Array) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple3s.Collection.Array C.I.not_equal``() = + member __.``Tuple3s.Collection.Array C.I.not_equal``() = validate (Tuple3s.Collection.Array) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member _.``Tuple3s.Collection.Array C.I.compare``() = + member __.``Tuple3s.Collection.Array C.I.compare``() = validate (Tuple3s.Collection.Array) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;0;-1;-1;-1; 1;1;1;1;1;0;-1;-1;1;1;1;1;1;1;0;-1;1;1;1;1;1;1;1;0 |] [] - member _.``Tuple3s.Collection.Array C.I.less_than``() = + member __.``Tuple3s.Collection.Array C.I.less_than``() = validate (Tuple3s.Collection.Array) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple3s.Collection.Array C.I.less_or_equal``() = + member __.``Tuple3s.Collection.Array C.I.less_or_equal``() = validate (Tuple3s.Collection.Array) C.I.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple3s.Collection.Array C.I.greater_than``() = + member __.``Tuple3s.Collection.Array C.I.greater_than``() = validate (Tuple3s.Collection.Array) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple3s.Collection.Array C.I.greater_or_equal``() = + member __.``Tuple3s.Collection.Array C.I.greater_or_equal``() = validate (Tuple3s.Collection.Array) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple3s.Collection.Array C.N.equals``() = + member __.``Tuple3s.Collection.Array C.N.equals``() = validate (Tuple3s.Collection.Array) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple3s.Collection.Array C.N.equal``() = + member __.``Tuple3s.Collection.Array C.N.equal``() = validate (Tuple3s.Collection.Array) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple3s.Collection.Array C.N.not_equal``() = + member __.``Tuple3s.Collection.Array C.N.not_equal``() = validate (Tuple3s.Collection.Array) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member _.``Tuple3s.Collection.Array C.N.compare``() = + member __.``Tuple3s.Collection.Array C.N.compare``() = validate (Tuple3s.Collection.Array) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;0;-1;-1;-1; 1;1;1;1;1;0;-1;-1;1;1;1;1;1;1;0;-1;1;1;1;1;1;1;1;0 |] [] - member _.``Tuple3s.Collection.Array C.N.less_than``() = + member __.``Tuple3s.Collection.Array C.N.less_than``() = validate (Tuple3s.Collection.Array) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple3s.Collection.Array C.N.less_or_equal``() = + member __.``Tuple3s.Collection.Array C.N.less_or_equal``() = validate (Tuple3s.Collection.Array) C.N.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple3s.Collection.Array C.N.greater_than``() = + member __.``Tuple3s.Collection.Array C.N.greater_than``() = validate (Tuple3s.Collection.Array) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member _.``Tuple3s.Collection.Array C.N.greater_or_equal``() = + member __.``Tuple3s.Collection.Array C.N.greater_or_equal``() = validate (Tuple3s.Collection.Array) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member _.``Tuple4s.Collection.Array C.I.equals``() = + member __.``Tuple4s.Collection.Array C.I.equals``() = validate (Tuple4s.Collection.Array) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -57953,7 +57953,7 @@ type GeneratedTests () = |] [] - member _.``Tuple4s.Collection.Array C.I.equal``() = + member __.``Tuple4s.Collection.Array C.I.equal``() = validate (Tuple4s.Collection.Array) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -57965,7 +57965,7 @@ type GeneratedTests () = |] [] - member _.``Tuple4s.Collection.Array C.I.not_equal``() = + member __.``Tuple4s.Collection.Array C.I.not_equal``() = validate (Tuple4s.Collection.Array) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -57977,7 +57977,7 @@ type GeneratedTests () = |] [] - member _.``Tuple4s.Collection.Array C.I.compare``() = + member __.``Tuple4s.Collection.Array C.I.compare``() = validate (Tuple4s.Collection.Array) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1; -1;-1;-1;-1;-1;-1;-1;-1;1;1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1; @@ -57989,7 +57989,7 @@ type GeneratedTests () = |] [] - member _.``Tuple4s.Collection.Array C.I.less_than``() = + member __.``Tuple4s.Collection.Array C.I.less_than``() = validate (Tuple4s.Collection.Array) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58001,7 +58001,7 @@ type GeneratedTests () = |] [] - member _.``Tuple4s.Collection.Array C.I.less_or_equal``() = + member __.``Tuple4s.Collection.Array C.I.less_or_equal``() = validate (Tuple4s.Collection.Array) C.I.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58013,7 +58013,7 @@ type GeneratedTests () = |] [] - member _.``Tuple4s.Collection.Array C.I.greater_than``() = + member __.``Tuple4s.Collection.Array C.I.greater_than``() = validate (Tuple4s.Collection.Array) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58025,7 +58025,7 @@ type GeneratedTests () = |] [] - member _.``Tuple4s.Collection.Array C.I.greater_or_equal``() = + member __.``Tuple4s.Collection.Array C.I.greater_or_equal``() = validate (Tuple4s.Collection.Array) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58037,7 +58037,7 @@ type GeneratedTests () = |] [] - member _.``Tuple4s.Collection.Array C.N.equals``() = + member __.``Tuple4s.Collection.Array C.N.equals``() = validate (Tuple4s.Collection.Array) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58049,7 +58049,7 @@ type GeneratedTests () = |] [] - member _.``Tuple4s.Collection.Array C.N.equal``() = + member __.``Tuple4s.Collection.Array C.N.equal``() = validate (Tuple4s.Collection.Array) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58061,7 +58061,7 @@ type GeneratedTests () = |] [] - member _.``Tuple4s.Collection.Array C.N.not_equal``() = + member __.``Tuple4s.Collection.Array C.N.not_equal``() = validate (Tuple4s.Collection.Array) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -58073,7 +58073,7 @@ type GeneratedTests () = |] [] - member _.``Tuple4s.Collection.Array C.N.compare``() = + member __.``Tuple4s.Collection.Array C.N.compare``() = validate (Tuple4s.Collection.Array) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1; -1;-1;-1;-1;-1;-1;-1;-1;1;1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1; @@ -58085,7 +58085,7 @@ type GeneratedTests () = |] [] - member _.``Tuple4s.Collection.Array C.N.less_than``() = + member __.``Tuple4s.Collection.Array C.N.less_than``() = validate (Tuple4s.Collection.Array) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58097,7 +58097,7 @@ type GeneratedTests () = |] [] - member _.``Tuple4s.Collection.Array C.N.less_or_equal``() = + member __.``Tuple4s.Collection.Array C.N.less_or_equal``() = validate (Tuple4s.Collection.Array) C.N.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58109,7 +58109,7 @@ type GeneratedTests () = |] [] - member _.``Tuple4s.Collection.Array C.N.greater_than``() = + member __.``Tuple4s.Collection.Array C.N.greater_than``() = validate (Tuple4s.Collection.Array) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58121,7 +58121,7 @@ type GeneratedTests () = |] [] - member _.``Tuple4s.Collection.Array C.N.greater_or_equal``() = + member __.``Tuple4s.Collection.Array C.N.greater_or_equal``() = validate (Tuple4s.Collection.Array) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58133,7 +58133,7 @@ type GeneratedTests () = |] [] - member _.``Tuple5s.Collection.Array C.I.equals``() = + member __.``Tuple5s.Collection.Array C.I.equals``() = validate (Tuple5s.Collection.Array) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58164,7 +58164,7 @@ type GeneratedTests () = |] [] - member _.``Tuple5s.Collection.Array C.I.equal``() = + member __.``Tuple5s.Collection.Array C.I.equal``() = validate (Tuple5s.Collection.Array) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58195,7 +58195,7 @@ type GeneratedTests () = |] [] - member _.``Tuple5s.Collection.Array C.I.not_equal``() = + member __.``Tuple5s.Collection.Array C.I.not_equal``() = validate (Tuple5s.Collection.Array) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -58226,7 +58226,7 @@ type GeneratedTests () = |] [] - member _.``Tuple5s.Collection.Array C.I.compare``() = + member __.``Tuple5s.Collection.Array C.I.compare``() = validate (Tuple5s.Collection.Array) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1; -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1; @@ -58257,7 +58257,7 @@ type GeneratedTests () = |] [] - member _.``Tuple5s.Collection.Array C.I.less_than``() = + member __.``Tuple5s.Collection.Array C.I.less_than``() = validate (Tuple5s.Collection.Array) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58288,7 +58288,7 @@ type GeneratedTests () = |] [] - member _.``Tuple5s.Collection.Array C.I.less_or_equal``() = + member __.``Tuple5s.Collection.Array C.I.less_or_equal``() = validate (Tuple5s.Collection.Array) C.I.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58319,7 +58319,7 @@ type GeneratedTests () = |] [] - member _.``Tuple5s.Collection.Array C.I.greater_than``() = + member __.``Tuple5s.Collection.Array C.I.greater_than``() = validate (Tuple5s.Collection.Array) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58350,7 +58350,7 @@ type GeneratedTests () = |] [] - member _.``Tuple5s.Collection.Array C.I.greater_or_equal``() = + member __.``Tuple5s.Collection.Array C.I.greater_or_equal``() = validate (Tuple5s.Collection.Array) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58381,7 +58381,7 @@ type GeneratedTests () = |] [] - member _.``Tuple5s.Collection.Array C.N.equals``() = + member __.``Tuple5s.Collection.Array C.N.equals``() = validate (Tuple5s.Collection.Array) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58412,7 +58412,7 @@ type GeneratedTests () = |] [] - member _.``Tuple5s.Collection.Array C.N.equal``() = + member __.``Tuple5s.Collection.Array C.N.equal``() = validate (Tuple5s.Collection.Array) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58443,7 +58443,7 @@ type GeneratedTests () = |] [] - member _.``Tuple5s.Collection.Array C.N.not_equal``() = + member __.``Tuple5s.Collection.Array C.N.not_equal``() = validate (Tuple5s.Collection.Array) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -58474,7 +58474,7 @@ type GeneratedTests () = |] [] - member _.``Tuple5s.Collection.Array C.N.compare``() = + member __.``Tuple5s.Collection.Array C.N.compare``() = validate (Tuple5s.Collection.Array) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1; -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1; @@ -58505,7 +58505,7 @@ type GeneratedTests () = |] [] - member _.``Tuple5s.Collection.Array C.N.less_than``() = + member __.``Tuple5s.Collection.Array C.N.less_than``() = validate (Tuple5s.Collection.Array) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58536,7 +58536,7 @@ type GeneratedTests () = |] [] - member _.``Tuple5s.Collection.Array C.N.less_or_equal``() = + member __.``Tuple5s.Collection.Array C.N.less_or_equal``() = validate (Tuple5s.Collection.Array) C.N.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58567,7 +58567,7 @@ type GeneratedTests () = |] [] - member _.``Tuple5s.Collection.Array C.N.greater_than``() = + member __.``Tuple5s.Collection.Array C.N.greater_than``() = validate (Tuple5s.Collection.Array) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58598,7 +58598,7 @@ type GeneratedTests () = |] [] - member _.``Tuple5s.Collection.Array C.N.greater_or_equal``() = + member __.``Tuple5s.Collection.Array C.N.greater_or_equal``() = validate (Tuple5s.Collection.Array) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/DiscriminatedUnionType.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/DiscrimantedUnionType.fs similarity index 100% rename from tests/FSharp.Core.UnitTests/FSharp.Core/DiscriminatedUnionType.fs rename to tests/FSharp.Core.UnitTests/FSharp.Core/DiscrimantedUnionType.fs diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs index 303df51ecb8..ffe4f00df16 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs @@ -272,9 +272,8 @@ type AsyncModule() = | e -> Assert.Fail(sprintf "Unexpected error %A" e) } Async.RunSynchronously test - - // test is flaky: https://github.com/dotnet/fsharp/issues/11586 - //[] + + [] member this.``OnCancel.RaceBetweenCancellationHandlerAndDisposingHandlerRegistration``() = let test() = use flag = new ManualResetEvent(false) @@ -297,8 +296,7 @@ type AsyncModule() = for _i = 1 to 300 do test() - // test is flaky: https://github.com/dotnet/fsharp/issues/11586 - //[] + [] member this.``OnCancel.RaceBetweenCancellationAndDispose``() = let flag = ref 0 let cts = new System.Threading.CancellationTokenSource() @@ -306,7 +304,7 @@ type AsyncModule() = use disp = cts.Cancel() { new IDisposable with - override _.Dispose() = incr flag } + override __.Dispose() = incr flag } while true do do! Async.Sleep 50 } @@ -316,13 +314,13 @@ type AsyncModule() = :? System.OperationCanceledException -> () Assert.AreEqual(1, !flag) - // test is flaky: https://github.com/dotnet/fsharp/issues/11586 - //[] + [] member this.``OnCancel.CancelThatWasSignalledBeforeRunningTheComputation``() = let test() = let cts = new System.Threading.CancellationTokenSource() let go e (flag : bool ref) = async { let! _ = Async.AwaitWaitHandle e + sleep 500 use! _holder = Async.OnCancel(fun () -> flag := true) while true do do! Async.Sleep 100 @@ -332,6 +330,7 @@ type AsyncModule() = let finish = new System.Threading.ManualResetEvent(false) let cancelledWasCalled = ref false Async.StartWithContinuations(go evt cancelledWasCalled, ignore, ignore, (fun _ -> finish.Set() |> ignore), cancellationToken = cts.Token) + sleep 500 evt.Set() |> ignore cts.Cancel() diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs index 689bcec6d1b..c89f5913c1f 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs @@ -45,7 +45,7 @@ type AsyncType() = let onSuccess x = match !whatToDo with - | Cancel | Throw + | Cancel | Throw -> Assert.Fail("Expected onSuccess but whatToDo was not Exit", [| whatToDo |]) | Exit -> () @@ -153,7 +153,7 @@ type AsyncType() = member this.AsyncSleepInfinitely() = ignoreSynchCtx (fun () -> let computation = Async.Sleep(System.Threading.Timeout.Infinite) - let result = TaskCompletionSource() + let result = TaskCompletionSource() use cts = new CancellationTokenSource(TimeSpan.FromSeconds(1.0)) // there's a long way from 1 sec to infinity, but it'll have to do. Async.StartWithContinuations(computation, (fun _ -> result.TrySetResult("Ok") |> ignore), @@ -167,8 +167,8 @@ type AsyncType() = member private this.WaitASec (t:Task) = let result = t.Wait(TimeSpan(hours=0,minutes=0,seconds=1)) Assert.True(result, "Task did not finish after waiting for a second.") - - + + [] member this.CreateTask () = let s = "Hello tasks!" @@ -206,7 +206,7 @@ type AsyncType() = with :? AggregateException -> Assert.Fail "Task should not finish, yet" spinloop <- false - + try this.WaitASec t with :? AggregateException as a -> @@ -250,58 +250,54 @@ type AsyncType() = let! result = tcs.Task |> Async.AwaitTask return result } - let cancelled = - try - Async.RunSynchronously(a, cancellationToken = cts.Token) |> ignore - false - with :? OperationCanceledException as o -> true - | _ -> false - - Assert.True (cancelled, "Task is not cancelled") + try + Async.RunSynchronously(a, cancellationToken = cts.Token) + |> ignore + with :? OperationCanceledException as o -> () [] member this.ExceptionPropagatesToTask () = - let a = async { + let a = async { do raise (Exception ()) } #if !NET46 - let t = + let t = #else use t = #endif Async.StartAsTask a let mutable exceptionThrown = false - try + try this.WaitASec t - with + with e -> exceptionThrown <- true Assert.True (t.IsFaulted) Assert.True(exceptionThrown) - + [] member this.CancellationPropagatesToTask () = let a = async { while true do () } #if !NET46 - let t = + let t = #else use t = #endif Async.StartAsTask a - Async.CancelDefaultToken () + Async.CancelDefaultToken () let mutable exceptionThrown = false try this.WaitASec t with e -> exceptionThrown <- true - Assert.True (exceptionThrown) - Assert.True(t.IsCanceled) - + Assert.True (exceptionThrown) + Assert.True(t.IsCanceled) + [] member this.CancellationPropagatesToGroup () = let ewh = new ManualResetEvent(false) let cancelled = ref false - let a = async { + let a = async { use! holder = Async.OnCancel (fun _ -> cancelled := true) ewh.Set() |> Assert.True while true do () @@ -309,7 +305,7 @@ type AsyncType() = let cts = new CancellationTokenSource() let token = cts.Token #if !NET46 - let t = + let t = #else use t = #endif @@ -317,14 +313,14 @@ type AsyncType() = // printfn "%A" t.Status ewh.WaitOne() |> Assert.True cts.Cancel() -// printfn "%A" t.Status +// printfn "%A" t.Status let mutable exceptionThrown = false try this.WaitASec t with e -> exceptionThrown <- true - Assert.True (exceptionThrown) - Assert.True(t.IsCanceled) - Assert.True(!cancelled) + Assert.True (exceptionThrown) + Assert.True(t.IsCanceled) + Assert.True(!cancelled) [] member this.CreateImmediateAsTask () = @@ -338,38 +334,38 @@ type AsyncType() = Async.StartImmediateAsTask a this.WaitASec t Assert.True (t.IsCompleted) - Assert.AreEqual(s, t.Result) - + Assert.AreEqual(s, t.Result) + [] member this.StartImmediateAsTask () = let s = "Hello tasks!" let a = async { return s } #if !NET46 - let t = + let t = #else use t = #endif Async.StartImmediateAsTask a this.WaitASec t Assert.True (t.IsCompleted) - Assert.AreEqual(s, t.Result) - + Assert.AreEqual(s, t.Result) + [] member this.ExceptionPropagatesToImmediateTask () = - let a = async { + let a = async { do raise (Exception ()) } #if !NET46 - let t = + let t = #else use t = #endif Async.StartImmediateAsTask a let mutable exceptionThrown = false - try + try this.WaitASec t - with + with e -> exceptionThrown <- true Assert.True (t.IsFaulted) Assert.True(exceptionThrown) @@ -382,18 +378,18 @@ type AsyncType() = while true do () } #if !NET46 - let t = + let t = #else use t = #endif Async.StartImmediateAsTask a - Async.CancelDefaultToken () + Async.CancelDefaultToken () let mutable exceptionThrown = false try this.WaitASec t with e -> exceptionThrown <- true - Assert.True (exceptionThrown) - Assert.True(t.IsCanceled) + Assert.True (exceptionThrown) + Assert.True(t.IsCanceled) #endif #if IGNORED @@ -402,7 +398,7 @@ type AsyncType() = member this.CancellationPropagatesToGroupImmediate () = let ewh = new ManualResetEvent(false) let cancelled = ref false - let a = async { + let a = async { use! holder = Async.OnCancel (fun _ -> cancelled := true) ewh.Set() |> Assert.True while true do () @@ -414,21 +410,21 @@ type AsyncType() = // printfn "%A" t.Status ewh.WaitOne() |> Assert.True cts.Cancel() -// printfn "%A" t.Status +// printfn "%A" t.Status let mutable exceptionThrown = false try this.WaitASec t with e -> exceptionThrown <- true - Assert.True (exceptionThrown) - Assert.True(t.IsCanceled) - Assert.True(!cancelled) + Assert.True (exceptionThrown) + Assert.True(t.IsCanceled) + Assert.True(!cancelled) #endif [] member this.TaskAsyncValue () = let s = "Test" #if !NET46 - let t = + let t = #else use t = #endif @@ -437,49 +433,38 @@ type AsyncType() = let! s1 = Async.AwaitTask(t) return s = s1 } - Async.RunSynchronously(a) |> Assert.True + Async.RunSynchronously(a, 1000) |> Assert.True [] member this.AwaitTaskCancellation () = let test() = async { let tcs = new System.Threading.Tasks.TaskCompletionSource() tcs.SetCanceled() - try + try do! Async.AwaitTask tcs.Task return false with :? System.OperationCanceledException -> return true } - Async.RunSynchronously(test()) |> Assert.True - - [] - member this.AwaitCompletedTask() = - let test() = async { - let threadIdBefore = Thread.CurrentThread.ManagedThreadId - do! Async.AwaitTask Task.CompletedTask - let threadIdAfter = Thread.CurrentThread.ManagedThreadId - return threadIdBefore = threadIdAfter - } - - Async.RunSynchronously(test()) |> Assert.True - + Async.RunSynchronously(test()) |> Assert.True + [] member this.AwaitTaskCancellationUntyped () = let test() = async { let tcs = new System.Threading.Tasks.TaskCompletionSource() tcs.SetCanceled() - try + try do! Async.AwaitTask (tcs.Task :> Task) return false with :? System.OperationCanceledException -> return true } - Async.RunSynchronously(test()) |> Assert.True - + Async.RunSynchronously(test()) |> Assert.True + [] member this.TaskAsyncValueException () = #if !NET46 - let t = + let t = #else use t = #endif @@ -490,59 +475,52 @@ type AsyncType() = return false with e -> return true } - Async.RunSynchronously(a) |> Assert.True - - // test is flaky: https://github.com/dotnet/fsharp/issues/11586 - //[] + Async.RunSynchronously(a, 1000) |> Assert.True + + [] member this.TaskAsyncValueCancellation () = - use ewh = new ManualResetEvent(false) + use ewh = new ManualResetEvent(false) let cts = new CancellationTokenSource() let token = cts.Token #if !NET46 - let t : Task= + let t : Task= #else use t : Task= -#endif +#endif Task.Factory.StartNew(Func(fun () -> while not token.IsCancellationRequested do ()), token) let cancelled = ref true - let a = - async { - try + let a = async { use! _holder = Async.OnCancel(fun _ -> ewh.Set() |> ignore) let! v = Async.AwaitTask(t) return v - // AwaitTask raises TaskCanceledException when it is canceled, it is a valid result of this test - with - :? TaskCanceledException -> - ewh.Set() |> ignore // this is ok - } + } Async.Start a cts.Cancel() - ewh.WaitOne(10000) |> ignore + ewh.WaitOne(10000) |> ignore [] member this.NonGenericTaskAsyncValue () = let hasBeenCalled = ref false #if !NET46 - let t = + let t = #else use t = -#endif +#endif Task.Factory.StartNew(Action(fun () -> hasBeenCalled := true)) let a = async { do! Async.AwaitTask(t) return true } - let result =Async.RunSynchronously(a) + let result =Async.RunSynchronously(a, 1000) (!hasBeenCalled && result) |> Assert.True - + [] member this.NonGenericTaskAsyncValueException () = #if !NET46 - let t = + let t = #else use t = -#endif +#endif Task.Factory.StartNew(Action(fun () -> raise <| Exception())) let a = async { try @@ -550,8 +528,8 @@ type AsyncType() = return false with e -> return true } - Async.RunSynchronously(a) |> Assert.True - + Async.RunSynchronously(a, 3000) |> Assert.True + [] member this.NonGenericTaskAsyncValueCancellation () = use ewh = new ManualResetEvent(false) @@ -563,16 +541,10 @@ type AsyncType() = use t = #endif Task.Factory.StartNew(Action(fun () -> while not token.IsCancellationRequested do ()), token) - let a = - async { - try + let a = async { use! _holder = Async.OnCancel(fun _ -> ewh.Set() |> ignore) let! v = Async.AwaitTask(t) return v - // AwaitTask raises TaskCanceledException when it is canceled, it is a valid result of this test - with - :? TaskCanceledException -> - ewh.Set() |> ignore // this is ok } Async.Start a cts.Cancel() diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/EventTypes.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/EventTypes.fs deleted file mode 100644 index 69cb4d65143..00000000000 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/EventTypes.fs +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -// Various tests for the: -// Microsoft.FSharp.Control event types - -namespace FSharp.Core.UnitTests.Control - -open System -open System.Reflection -open Xunit - -module private EventTypes = - type MultiArgDelegate = delegate of obj * obj[] -> unit - - let getListeners event = - let eventType = event.GetType() - let multicastField = - eventType - .GetField("multicast", BindingFlags.NonPublic ||| BindingFlags.Instance) - .GetValue event - :?> System.Delegate - - if not (isNull multicastField) then - let multicastType = typeof - let listeners = - multicastType - .GetMethod("GetInvocationList") - .Invoke(multicastField, [||]) - :?> System.Delegate [] - Some listeners - else - None - -type EventTypes() = - - [] - let RunsCount = 100 - - let runAddRemoveHandlers (event: IDelegateEvent<_>) handlerInitializer = - seq { - for _ in 1 .. RunsCount do - async { - let h = handlerInitializer() - event.AddHandler(h) - event.RemoveHandler(h) - } - } |> Async.Parallel |> Async.RunSynchronously |> ignore - - [] - member this.``Adding/removing handlers to published Event<'T> is thread-safe``() = - let event = new Event() - let listenersBefore = EventTypes.getListeners event - runAddRemoveHandlers (event.Publish) (fun _ -> new Handler<_>(fun sender args -> ())) - let listenersAfter = EventTypes.getListeners event - - Assert.True(listenersBefore.IsNone) - Assert.True(listenersAfter.IsNone) - - [] - member this.``Adding/removing handlers to published DelegateEvent is thread-safe``() = - let event = new DelegateEvent<_>() - let listenersBefore = EventTypes.getListeners event - runAddRemoveHandlers (event.Publish) (fun _ -> EventTypes.MultiArgDelegate(fun sender args -> ())) - let listenersAfter = EventTypes.getListeners event - - Assert.True(listenersBefore.IsNone) - Assert.True(listenersAfter.IsNone) - - [] - member this.``Adding/removing handlers to published Event<'D,'A> is thread-safe``() = - let event = new Event<_, _>() - let listenersBefore = EventTypes.getListeners event - runAddRemoveHandlers (event.Publish) (fun _ -> EventTypes.MultiArgDelegate(fun sender args -> ())) - let listenersAfter = EventTypes.getListeners event - - Assert.True(listenersBefore.IsNone) - Assert.True(listenersAfter.IsNone) diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/MailboxProcessorType.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/MailboxProcessorType.fs index c887eb470c8..9edfbcf410c 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/MailboxProcessorType.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/MailboxProcessorType.fs @@ -6,8 +6,10 @@ namespace FSharp.Core.UnitTests.Control open System +open FSharp.Core.UnitTests.LibraryTestFx open Xunit open System.Threading +open System.Collections.Generic type Message = | Increment of int @@ -68,22 +70,16 @@ type MailboxProcessorType() = [] member this.``Receive handles cancellation token``() = - let mutable result = None - use mre1 = new ManualResetEventSlim(false) - use mre2 = new ManualResetEventSlim(false) - + let result = ref None + // https://github.com/Microsoft/visualfsharp/issues/3337 let cts = new CancellationTokenSource () - + let addMsg msg = - match result with - | Some text -> - //printfn "Got some, adding %s" msg - result <- Some(text + " " + msg) - | None -> - //printfn "got none, setting %s" msg - result <- Some msg - + match !result with + | Some text -> result := Some(text + " " + msg) + | None -> result := Some msg + let mb = MailboxProcessor.Start ( fun inbox -> async { @@ -91,41 +87,32 @@ type MailboxProcessorType() = { new IDisposable with member this.Dispose () = addMsg "Disposed" - mre2.Set() } - + while true do - let! (msg : int) = inbox.Receive() + let! (msg : int) = inbox.Receive () addMsg (sprintf "Received %i" msg) - mre1.Set() }, cancellationToken = cts.Token) - - mb.Post(1) - mre1.Wait() - - cts.Cancel() - mre2.Wait() - Assert.AreEqual(Some("Received 1 Disposed"), result) + mb.Post 1 + Thread.Sleep 1000 + cts.Cancel () + Thread.Sleep 4000 + + Assert.AreEqual(Some("Received 1 Disposed"), !result) [] member this.``Receive with timeout argument handles cancellation token``() = - let mutable result = None - use mre1 = new ManualResetEventSlim(false) - use mre2 = new ManualResetEventSlim(false) - + let result = ref None + // https://github.com/Microsoft/visualfsharp/issues/3337 let cts = new CancellationTokenSource () - + let addMsg msg = - match result with - | Some text -> - //printfn "Got some, adding %s" msg - result <- Some(text + " " + msg) - | None -> - //printfn "got none, setting %s" msg - result <- Some msg - + match !result with + | Some text -> result := Some(text + " " + msg) + | None -> result := Some msg + let mb = MailboxProcessor.Start ( fun inbox -> async { @@ -133,40 +120,31 @@ type MailboxProcessorType() = { new IDisposable with member this.Dispose () = addMsg "Disposed" - mre2.Set() } - + while true do - let! (msg : int) = inbox.Receive(100000) + let! (msg : int) = inbox.Receive (100000) addMsg (sprintf "Received %i" msg) - mre1.Set() }, cancellationToken = cts.Token) - - mb.Post(1) - mre1.Wait() - - cts.Cancel() - mre2.Wait() - Assert.AreEqual(Some("Received 1 Disposed"), result) + mb.Post 1 + Thread.Sleep 1000 + cts.Cancel () + Thread.Sleep 4000 + + Assert.AreEqual(Some("Received 1 Disposed"),!result) [] member this.``Scan handles cancellation token``() = - let mutable result = None - use mre1 = new ManualResetEventSlim(false) - use mre2 = new ManualResetEventSlim(false) + let result = ref None // https://github.com/Microsoft/visualfsharp/issues/3337 let cts = new CancellationTokenSource () let addMsg msg = - match result with - | Some text -> - //printfn "Got some, adding %s" msg - result <- Some(text + " " + msg) - | None -> - //printfn "got none, setting %s" msg - result <- Some msg + match !result with + | Some text -> result := Some(text + " " + msg) + | None -> result := Some msg let mb = MailboxProcessor.Start ( @@ -175,22 +153,19 @@ type MailboxProcessorType() = { new IDisposable with member this.Dispose () = addMsg "Disposed" - mre2.Set() } while true do let! (msg : int) = inbox.Scan (fun msg -> Some(async { return msg }) ) addMsg (sprintf "Scanned %i" msg) - mre1.Set() }, cancellationToken = cts.Token) - mb.Post(1) - mre1.Wait() - - cts.Cancel() - mre2.Wait() + mb.Post 1 + Thread.Sleep 1000 + cts.Cancel () + Thread.Sleep 4000 - Assert.AreEqual(Some("Scanned 1 Disposed"), result) + Assert.AreEqual(Some("Scanned 1 Disposed"), !result) [] member this.``Receive Races with Post``() = @@ -316,7 +291,7 @@ type MailboxProcessorType() = test() - [] + //[] // need to re-visit this member this.PostAndAsyncReply_Cancellation() = use cancel = new CancellationTokenSource(500) diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Core/PrintfTests.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Core/PrintfTests.fs index 187fa62c60e..9c1e7dfe774 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Core/PrintfTests.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Core/PrintfTests.fs @@ -46,37 +46,7 @@ type PrintfTests() = test "%-10c" 'a' "a " [] - member this.NumbersInDifferentBases() = - test "%10u" 123 " 123" - test "%-10u" 123 "123 " - test "%10B" 123 " 1111011" - test "%-10B" 123 "1111011 " - test "%10o" 123 " 173" - test "%-10o" 123 "173 " - test "%10x" 123 " 7b" - test "%-10x" 123 "7b " - test "%10X" 123 " 7B" - test "%-10X" 123 "7B " - - [] - member this.VariableWidth() = - Assert.AreEqual(" a", sprintf "%*c" 8 'a' ) - Assert.AreEqual("a ", sprintf "%-*c" 8 'a' ) - Assert.AreEqual(" abc", sprintf "%*s" 8 "abc") - Assert.AreEqual("abc ", sprintf "%-*s" 8 "abc") - Assert.AreEqual(" 123", sprintf "%*u" 8 123 ) - Assert.AreEqual("123 ", sprintf "%-*u" 8 123 ) - Assert.AreEqual(" 1111011", sprintf "%*B" 8 123 ) - Assert.AreEqual("1111011 ", sprintf "%-*B" 8 123 ) - Assert.AreEqual(" 173", sprintf "%*o" 8 123 ) - Assert.AreEqual("173 ", sprintf "%-*o" 8 123 ) - Assert.AreEqual(" 7b", sprintf "%*x" 8 123 ) - Assert.AreEqual("7b ", sprintf "%-*x" 8 123 ) - Assert.AreEqual(" 7B", sprintf "%*X" 8 123 ) - Assert.AreEqual("7B ", sprintf "%-*X" 8 123 ) - - [] - member _.``union case formatting`` () = + member __.``union case formatting`` () = Assert.AreEqual("CaseOne", sprintf "%A" CaseOne) Assert.AreEqual("CaseTwo \"hello\"", sprintf "%A" (CaseTwo "hello")) Assert.AreEqual("CaseTwoOpt None", sprintf "%A" (CaseTwoOpt None)) @@ -84,7 +54,7 @@ type PrintfTests() = Assert.AreEqual("CaseThree (5, \"hello\")", sprintf "%A" (CaseThree (5, "hello"))) [] - member _.``union case formatting with RequireQualifiedAccess`` () = + member __.``union case formatting with RequireQualifiedAccess`` () = Assert.AreEqual("Case1", sprintf "%A" SecondUnionType.Case1) Assert.AreEqual("Case2 \"hello\"", sprintf "%A" (SecondUnionType.Case2 "hello")) Assert.AreEqual("Case2Opt None", sprintf "%A" (SecondUnionType.Case2Opt None)) @@ -92,31 +62,31 @@ type PrintfTests() = Assert.AreEqual("Case3 (5, \"hello\")", sprintf "%A" (SecondUnionType.Case3 (5, "hello"))) [] - member _.``union case formatting with UseNullAsTrueValue`` () = + member __.``union case formatting with UseNullAsTrueValue`` () = Assert.AreEqual("NullCase", sprintf "%A" NullCase) Assert.AreEqual("NullCase", sprintf "%A" RQANullAsTrueUnionType.NullCase) [] - member _.``F# option formatting`` () = + member __.``F# option formatting`` () = Assert.AreEqual("None", sprintf "%A" None) Assert.AreEqual("Some 15", sprintf "%A" (Some 15)) [] - member _.``null formatting`` () = + member __.``null formatting`` () = Assert.AreEqual("", sprintf "%A" null) Assert.AreEqual("CaseTwo null", sprintf "%A" (CaseTwo null)) [] - member _.``tuple formatting`` () = + member __.``tuple formatting`` () = Assert.AreEqual("""(1, "two", 3.4)""", sprintf "%A" (1,"two",3.4)) Assert.AreEqual("""(1, "two", 3.4, 5, 6, 7, 8, 9, "ten", 11.12)""", sprintf "%A" (1,"two",3.4,5,6,7,8,9,"ten",11.12)) [] - member _.``value tuple formatting`` () = + member __.``value tuple formatting`` () = Assert.AreEqual("""struct (1, "two", 3.4)""", sprintf "%A" (struct (1,"two",3.4))) Assert.AreEqual("""struct (1, "two", 3.4, 5, 6, 7, 8, 9, "ten", 11.12)""", sprintf "%A" (struct (1,"two",3.4,5,6,7,8,9,"ten",11.12))) [] - member _.``list types`` () = + member __.``list types`` () = Assert.AreEqual("""[CaseTwo "hello"; CaseTwo "hi there!"]""", [CaseTwo "hello"; CaseTwo "hi there!"] |> sprintf "%A") Assert.AreEqual("""[CaseTwoOpt (Some "hello"); CaseTwoOpt (Some "hi there!")]""", [CaseTwoOpt (Some "hello"); CaseTwoOpt (Some "hi there!")] |> sprintf "%A") diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Reflection/FSharpReflection.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Reflection/FSharpReflection.fs index ff1223b482a..abba3681220 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Reflection/FSharpReflection.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Reflection/FSharpReflection.fs @@ -28,7 +28,7 @@ Make sure each method works on: module IsModule = type IsModuleType () = - member _.M = 1 + member __.M = 1 type FSharpDelegate = delegate of int -> string @@ -118,12 +118,10 @@ type FSharpValueTests() = let tuple1 = ( 1, "tuple1") let tuple2 = ( 2, "tuple2", (fun x -> x + 1)) let tuple3 = ( 1, ( 2, "tuple")) - let longTuple = (("yup", 1s), 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, Some 12, 13, "nope", struct (15, 16), 17, 18, ValueSome 19) let structTuple1 = struct ( 1, "tuple1") let structTuple2 = struct ( 2, "tuple2", (fun x -> x + 1)) let structTuple3 = struct ( 1, struct ( 2, "tuple")) - let longStructTuple = struct (("yup", 1s), 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, Some 12, 13, "nope", struct (15, 16), 17, 18, ValueSome 19) let func1 param = param + 1 let func2 param = param + "" @@ -132,13 +130,13 @@ type FSharpValueTests() = let exDataless = DatalessException [] - member _.Equals1() = + member __.Equals1() = // Record value Assert.True(FSharpValue.Equals(record1, record1)) Assert.False(FSharpValue.Equals(record1, record2)) [] - member _.Equals2() = + member __.Equals2() = Assert.True(FSharpValue.Equals(structRecord1, structRecord1)) Assert.False(FSharpValue.Equals(structRecord1, structRecord2)) Assert.False(FSharpValue.Equals(structRecord1, record2)) @@ -146,72 +144,72 @@ type FSharpValueTests() = Assert.False(FSharpValue.Equals(record2, structRecord2)) [] - member _.Equals3() = + member __.Equals3() = // Generic Record value Assert.True(FSharpValue.Equals(genericRecordType1, genericRecordType1)) Assert.False(FSharpValue.Equals(genericRecordType1, genericRecordType2)) [] - member _.Equals4() = + member __.Equals4() = // null value Assert.True(FSharpValue.Equals(nullValue, nullValue)) Assert.False(FSharpValue.Equals(nullValue, 1)) [] - member _.Equals5() = + member __.Equals5() = // Single Case Union Assert.True(FSharpValue.Equals(singleCaseUnion1, singleCaseUnion1)) Assert.False(FSharpValue.Equals(singleCaseUnion1, singleCaseUnion2)) [] - member _.Equals6() = + member __.Equals6() = // Single Case Union Assert.True(FSharpValue.Equals(singleCaseStructUnion1, singleCaseStructUnion1)) Assert.False(FSharpValue.Equals(singleCaseStructUnion1, singleCaseStructUnion2)) [] - member _.Equals7() = + member __.Equals7() = // Discriminated Union Assert.True(FSharpValue.Equals(discUnionCaseA, discUnionCaseA)) Assert.False(FSharpValue.Equals(discUnionCaseB, discUnionCaseC)) [] - member _.Equals8() = + member __.Equals8() = // Discriminated Union Assert.True(FSharpValue.Equals(discStructUnionCaseA, discStructUnionCaseA)) Assert.False(FSharpValue.Equals(discStructUnionCaseB, discStructUnionCaseC)) [] - member _.Equals9() = + member __.Equals9() = // FSharpDelegate Assert.True(FSharpValue.Equals(fsharpDelegate1, fsharpDelegate1)) Assert.False(FSharpValue.Equals(fsharpDelegate1, fsharpDelegate2)) [] - member _.Equals10() = + member __.Equals10() = // Tuple Assert.True(FSharpValue.Equals(tuple1, tuple1)) Assert.False(FSharpValue.Equals( (1, 2, 3), (4, 5, 6) )) [] - member _.Equals10b() = + member __.Equals10b() = // Tuple Assert.True(FSharpValue.Equals(structTuple1, structTuple1)) Assert.False(FSharpValue.Equals( struct (1, 2, 3), struct (4, 5, 6) )) [] - member _.Equals11() = + member __.Equals11() = // Tuples of differing types Assert.False(FSharpValue.Equals(tuple1, tuple2)) [] - member _.Equals12() = + member __.Equals12() = // Exception Assert.True(FSharpValue.Equals(exInt, exInt)) Assert.False(FSharpValue.Equals(exInt, exDataless)) [] - member _.GetExceptionFields() = + member __.GetExceptionFields() = // int Assert.AreEqual(FSharpValue.GetExceptionFields(exInt), ([|1|] : obj [])) @@ -230,7 +228,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.GetExceptionFields(null) |> ignore) [] - member _.GetRecordField() = + member __.GetRecordField() = // Record let propertyinfo1 = (typeof).GetProperty("field1") @@ -252,7 +250,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.GetRecordField("invalid", propertyinfoint) |> ignore) [] - member _.GetStructRecordField() = + member __.GetStructRecordField() = // Record let propertyinfo1 = (typeof).GetProperty("field1") @@ -270,7 +268,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.GetRecordField("invalid", propertyinfoint) |> ignore) [] - member _.GetRecordFields() = + member __.GetRecordFields() = // Record let propertyinfo1 = (typeof).GetProperty("field1") Assert.AreEqual((FSharpValue.GetRecordFields(record1)).[0], "field1") @@ -287,12 +285,12 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.GetRecordFields("invalid") |> ignore) [] - member _.GetStructRecordFields() = + member __.GetStructRecordFields() = let propertyinfo1 = (typeof).GetProperty("field1") Assert.AreEqual((FSharpValue.GetRecordFields(structRecord1)).[0], "field1") [] - member _.GetTupleField() = + member __.GetTupleField() = // Tuple Assert.AreEqual((FSharpValue.GetTupleField(tuple1, 0)), 1) @@ -310,7 +308,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.GetTupleField(tuple2, 8)|> ignore) [] - member _.GetStructTupleField() = + member __.GetStructTupleField() = // Tuple Assert.AreEqual((FSharpValue.GetTupleField(structTuple1, 0)), 1) @@ -321,7 +319,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.GetTupleField(structTuple2, 8)|> ignore) [] - member _.GetTupleFields() = + member __.GetTupleFields() = // Tuple Assert.AreEqual(FSharpValue.GetTupleFields(tuple1).[0], 1) @@ -336,7 +334,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.GetTupleFields("Invalid")|> ignore) [] - member _.GetStructTupleFields() = + member __.GetStructTupleFields() = // Tuple Assert.AreEqual(FSharpValue.GetTupleFields(structTuple1).[0], 1) @@ -344,7 +342,7 @@ type FSharpValueTests() = Assert.AreEqual( (FSharpValue.GetTupleFields(structTuple2)).[1], "tuple2") [] - member _.GetUnionFields() = + member __.GetUnionFields() = // single case union let (singlecaseinfo, singlevaluearray) = FSharpValue.GetUnionFields(singleCaseUnion1, typeof) Assert.AreEqual(singlevaluearray, ([|1.0;2.0;3.0|] : obj [])) @@ -358,7 +356,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.GetUnionFields( () , null)|> ignore) [] - member _.GetStructUnionFields() = + member __.GetStructUnionFields() = // single case union let (_singlecaseinfo, singlevaluearray) = FSharpValue.GetUnionFields(singleCaseStructUnion1, typeof) Assert.AreEqual(singlevaluearray, ([|1.0;2.0;3.0|] : obj [])) @@ -368,7 +366,7 @@ type FSharpValueTests() = Assert.AreEqual(duValueArray.[0], 1) [] - member _.MakeFunction() = + member __.MakeFunction() = // Int function let implementationInt (x:obj) = box( unbox(x) + 1) @@ -383,7 +381,7 @@ type FSharpValueTests() = Assert.AreEqual(resultFuncString("parameter"), "parameter function") [] - member _.MakeRecord() = + member __.MakeRecord() = // Record let makeRecord = FSharpValue.MakeRecord(typeof, [| box"field1"; box(Some(record1)); box( fun () -> (record1, "")) |]) Assert.AreEqual(FSharpValue.GetRecordFields(makeRecord).[0], "field1") @@ -399,13 +397,13 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.MakeRecord(typeof>, [| box 1; box("invalid param"); box("invalid param") |])|> ignore) [] - member _.MakeStructRecord() = + member __.MakeStructRecord() = // Record let makeRecord = FSharpValue.MakeRecord(typeof, [| box"field1"; box(Some(structRecord1)); box( fun () -> (structRecord1, "")) |]) Assert.AreEqual(FSharpValue.GetRecordFields(makeRecord).[0], "field1") [] - member _.MakeTuple() = + member __.MakeTuple() = // Tuple let makeTuple = FSharpValue.MakeTuple([| box 1; box("tuple") |], typeof>) Assert.AreEqual(FSharpValue.GetTupleFields(makeTuple).[0], 1) @@ -421,7 +419,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.MakeTuple([| box"invalid param"; box"invalid param"|], typeof>) |> ignore) [] - member _.MakeStructTuple() = + member __.MakeStructTuple() = // Tuple let makeTuple = FSharpValue.MakeTuple([| box 1; box("tuple") |], typeof) Assert.AreEqual(FSharpValue.GetTupleFields(makeTuple).[0], 1) @@ -436,7 +434,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.MakeTuple([| box"invalid param"; box"invalid param"|], typeof) |> ignore) [] - member _.MakeUnion() = + member __.MakeUnion() = // single case union let (singlecaseinfo, _singlevaluearray) = FSharpValue.GetUnionFields(singleCaseUnion1, typeof) let resultSingleCaseUnion=FSharpValue.MakeUnion(singlecaseinfo, [| box 1.0; box 2.0; box 3.0|]) @@ -448,7 +446,7 @@ type FSharpValueTests() = Assert.AreEqual(resultDiscUnion, discUnionRecCaseB) [] - member _.MakeStructUnion() = + member __.MakeStructUnion() = // single case union let (singlecaseinfo, _singlevaluearray) = FSharpValue.GetUnionFields(singleCaseStructUnion1, typeof) let resultSingleCaseUnion=FSharpValue.MakeUnion(singlecaseinfo, [| box 1.0; box 2.0; box 3.0|]) @@ -459,7 +457,7 @@ type FSharpValueTests() = FSharpValue.MakeUnion(duCaseinfo, [| box 1|]) |> ignore [] - member _.PreComputeRecordConstructor() = + member __.PreComputeRecordConstructor() = // Record let recCtor = FSharpValue.PreComputeRecordConstructor(typeof) let resultRecordType = recCtor([| box("field1"); box(Some(record1)); box(fun () -> (record1, "")) |]) @@ -477,7 +475,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeRecordConstructor(typeof>) |> ignore) [] - member _.PreComputeStructRecordConstructor() = + member __.PreComputeStructRecordConstructor() = // Record let recCtor = FSharpValue.PreComputeRecordConstructor(typeof) let resultRecordType = recCtor([| box("field1"); box(Some(structRecord1)); box(fun () -> (structRecord1, "")) |]) @@ -485,7 +483,7 @@ type FSharpValueTests() = [] - member _.PreComputeRecordConstructorInfo() = + member __.PreComputeRecordConstructorInfo() = // Record let recordCtorInfo = FSharpValue.PreComputeRecordConstructorInfo(typeof) Assert.AreEqual(recordCtorInfo.ReflectedType, typeof ) @@ -501,13 +499,13 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeRecordConstructorInfo(typeof>) |> ignore) [] - member _.PreComputeStructRecordConstructorInfo() = + member __.PreComputeStructRecordConstructorInfo() = // Record let recordCtorInfo = FSharpValue.PreComputeRecordConstructorInfo(typeof) Assert.AreEqual(recordCtorInfo.ReflectedType, typeof ) [] - member _.PreComputeRecordFieldReader() = + member __.PreComputeRecordFieldReader() = // Record let recordFieldReader = FSharpValue.PreComputeRecordFieldReader((typeof).GetProperty("field1")) Assert.AreEqual(recordFieldReader(record1), box("field1")) @@ -520,13 +518,13 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeRecordFieldReader(null)|> ignore) [] - member _.PreComputeStructRecordFieldReader() = + member __.PreComputeStructRecordFieldReader() = // Record let recordFieldReader = FSharpValue.PreComputeRecordFieldReader((typeof).GetProperty("field1")) Assert.AreEqual(recordFieldReader(structRecord1), box("field1")) [] - member _.PreComputeRecordReader() = + member __.PreComputeRecordReader() = // Record let recordReader = FSharpValue.PreComputeRecordReader(typeof) Assert.AreEqual( (recordReader(record1)).[0], "field1") @@ -542,19 +540,16 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeRecordReader(typeof>) |> ignore) [] - member _.PreComputeStructRecordReader() = + member __.PreComputeStructRecordReader() = // Record let recordReader = FSharpValue.PreComputeRecordReader(typeof) Assert.AreEqual( (recordReader(structRecord1)).[0], "field1") [] - member _.PreComputeTupleConstructor() = + member __.PreComputeTupleConstructor() = // Tuple let tupleCtor = FSharpValue.PreComputeTupleConstructor(tuple1.GetType()) Assert.AreEqual( tupleCtor([| box 1; box "tuple1" |]) , box(tuple1)) - - let tupleCtor = FSharpValue.PreComputeTupleConstructor(longTuple.GetType()) - Assert.AreEqual( tupleCtor([| box ("yup", 1s); box 2; box 3; box 4; box 5; box 6; box 7; box 8; box 9; box 10; box 11; box (Some 12); box 13; box "nope"; box (struct (15, 16)); box 17; box 18; box (ValueSome 19) |]) , box(longTuple)) // Tuple with function member let tuplewithFuncCtor = FSharpValue.PreComputeTupleConstructor(tuple2.GetType()) @@ -573,14 +568,11 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeTupleConstructor(typeof) |> ignore) [] - member _.PreComputeStructTupleConstructor() = + member __.PreComputeStructTupleConstructor() = // Tuple let tupleCtor = FSharpValue.PreComputeTupleConstructor(structTuple1.GetType()) Assert.AreEqual( tupleCtor([| box 1; box "tuple1" |]) , box(structTuple1)) - let tupleCtor = FSharpValue.PreComputeTupleConstructor(longStructTuple.GetType()) - Assert.AreEqual( tupleCtor([| box ("yup", 1s); box 2; box 3; box 4; box 5; box 6; box 7; box 8; box 9; box 10; box 11; box (Some 12); box 13; box "nope"; box (struct (15, 16)); box 17; box 18; box (ValueSome 19) |]) , box(longStructTuple)) - // Tuple with function member let tuplewithFuncCtor = FSharpValue.PreComputeTupleConstructor(structTuple2.GetType()) let resultTuplewithFunc = tuplewithFuncCtor([| box 2; box "tuple2"; box (fun x -> x + 1) |]) @@ -594,7 +586,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeTupleConstructor(typeof>) |> ignore) [] - member _.PreComputeTupleConstructorInfo() = + member __.PreComputeTupleConstructorInfo() = // Tuple let (tupleCtorInfo, _tupleType) = FSharpValue.PreComputeTupleConstructorInfo(typeof>) Assert.AreEqual(tupleCtorInfo.ReflectedType, typeof> ) @@ -613,7 +605,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeTupleConstructorInfo(typeof) |> ignore) [] - member _.PreComputeStructTupleConstructorInfo() = + member __.PreComputeStructTupleConstructorInfo() = // Tuple let (tupleCtorInfo, _tupleType) = FSharpValue.PreComputeTupleConstructorInfo(typeof) Assert.AreEqual(tupleCtorInfo.ReflectedType, typeof ) @@ -623,7 +615,7 @@ type FSharpValueTests() = Assert.AreEqual(nestedTupleCtorInfo.ReflectedType, typeof) [] - member _.PreComputeTuplePropertyInfo() = + member __.PreComputeTuplePropertyInfo() = // Tuple let (tuplePropInfo, _typeindex) = FSharpValue.PreComputeTuplePropertyInfo(typeof>, 0) @@ -645,7 +637,7 @@ type FSharpValueTests() = // This fails as no PropertyInfo's actually exist for struct tuple types. // //[] - //member _.PreComputeStructTuplePropertyInfo() = + //member __.PreComputeStructTuplePropertyInfo() = // // // Tuple // let (tuplePropInfo, _typeindex) = FSharpValue.PreComputeTuplePropertyInfo(typeof, 0) @@ -656,7 +648,7 @@ type FSharpValueTests() = // Assert.AreEqual(tupleNestedPropInfo.PropertyType, typeof) [] - member _.PreComputeTupleReader() = + member __.PreComputeTupleReader() = // Tuple let tuplereader = FSharpValue.PreComputeTupleReader(typeof>) @@ -665,9 +657,6 @@ type FSharpValueTests() = // Nested let nestedtuplereader = FSharpValue.PreComputeTupleReader(typeof>>) Assert.AreEqual(nestedtuplereader(tuple3).[1], box(2, "tuple")) - - let longTupleReader = FSharpValue.PreComputeTupleReader (longTuple.GetType ()) - Assert.AreEqual (longTupleReader longTuple, [| box ("yup", 1s); box 2; box 3; box 4; box 5; box 6; box 7; box 8; box 9; box 10; box 11; box (Some 12); box 13; box "nope"; box (struct (15, 16)); box 17; box 18; box (ValueSome 19) |]) // null value CheckThrowsArgumentException(fun () ->FSharpValue.PreComputeTupleReader(null)|> ignore) @@ -676,7 +665,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeTupleReader(typeof) |> ignore) [] - member _.PreComputeStructTupleReader() = + member __.PreComputeStructTupleReader() = // Tuple let tuplereader = FSharpValue.PreComputeTupleReader(typeof) @@ -686,14 +675,11 @@ type FSharpValueTests() = let nestedtuplereader = FSharpValue.PreComputeTupleReader(typeof) Assert.AreEqual(nestedtuplereader(structTuple3).[1], box (struct (2, "tuple"))) - let longTupleReader = FSharpValue.PreComputeTupleReader (longStructTuple.GetType ()) - Assert.AreEqual (longTupleReader longStructTuple, [| box ("yup", 1s); box 2; box 3; box 4; box 5; box 6; box 7; box 8; box 9; box 10; box 11; box (Some 12); box 13; box "nope"; box (struct (15, 16)); box 17; box 18; box (ValueSome 19) |]) - // invalid value CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeTupleReader(typeof) |> ignore) [] - member _.PreComputeUnionConstructor() = + member __.PreComputeUnionConstructor() = // SingleCaseUnion let (singlecaseinfo, _singlevaluearray) = FSharpValue.GetUnionFields(singleCaseUnion1, typeof) @@ -708,7 +694,7 @@ type FSharpValueTests() = Assert.AreEqual(resuleDiscUnionB, discUnionRecCaseB) [] - member _.PreComputeStructUnionConstructor() = + member __.PreComputeStructUnionConstructor() = // SingleCaseUnion let (singlecaseinfo, _singlevaluearray) = FSharpValue.GetUnionFields(singleCaseStructUnion1, typeof) @@ -723,7 +709,7 @@ type FSharpValueTests() = Assert.AreEqual(resuleDiscUnionB, discStructUnionCaseB) [] - member _.PreComputeUnionConstructorInfo() = + member __.PreComputeUnionConstructorInfo() = // SingleCaseUnion let (singlecaseinfo, _singlevaluearray) = FSharpValue.GetUnionFields(singleCaseUnion1, typeof) @@ -736,7 +722,7 @@ type FSharpValueTests() = Assert.AreEqual(discUnionMethodInfo.ReflectedType, typeof>) [] - member _.PreComputeStructUnionConstructorInfo() = + member __.PreComputeStructUnionConstructorInfo() = // SingleCaseUnion let (singlecaseinfo, _singlevaluearray) = FSharpValue.GetUnionFields(singleCaseStructUnion1, typeof) @@ -749,7 +735,7 @@ type FSharpValueTests() = Assert.AreEqual(discUnionMethodInfo.ReflectedType, typeof>) [] - member _.PreComputeUnionReader() = + member __.PreComputeUnionReader() = // SingleCaseUnion let (singlecaseinfo, singlevaluearray) = FSharpValue.GetUnionFields(singleCaseUnion1, typeof) @@ -780,7 +766,7 @@ type FSharpValueTests() = Assert.AreEqual(listReader(box(list2)), [| |]) [] - member _.PreComputeStructUnionReader() = + member __.PreComputeStructUnionReader() = // SingleCaseUnion let (singlecaseinfo, singlevaluearray) = FSharpValue.GetUnionFields(singleCaseStructUnion1, typeof) @@ -802,7 +788,7 @@ type FSharpValueTests() = Assert.AreEqual(voptionReader(box(voptionNone)), [| |]) [] - member _.PreComputeUnionTagMemberInfo() = + member __.PreComputeUnionTagMemberInfo() = // SingleCaseUnion let singlecaseUnionMemberInfo = FSharpValue.PreComputeUnionTagMemberInfo(typeof) @@ -819,7 +805,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeUnionTagMemberInfo(typeof) |> ignore) [] - member _.PreComputeStructUnionTagMemberInfo() = + member __.PreComputeStructUnionTagMemberInfo() = // SingleCaseUnion let singlecaseUnionMemberInfo = FSharpValue.PreComputeUnionTagMemberInfo(typeof) @@ -830,7 +816,7 @@ type FSharpValueTests() = Assert.AreEqual(discUnionMemberInfo.ReflectedType, typeof>) [] - member _.PreComputeUnionTagReader() = + member __.PreComputeUnionTagReader() = // SingleCaseUnion let singlecaseUnionTagReader = FSharpValue.PreComputeUnionTagReader(typeof) @@ -857,7 +843,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeUnionTagReader(typeof) |> ignore) [] - member _.PreComputeStructUnionTagReader() = + member __.PreComputeStructUnionTagReader() = // SingleCaseUnion let singlecaseUnionTagReader = FSharpValue.PreComputeUnionTagReader(typeof) @@ -870,7 +856,7 @@ type FSharpValueTests() = type FSharpTypeTests() = - // instance for member _.ObjectEquals + // instance for member __.ObjectEquals let rec recordtype1 : RecordType = { field1 = "field1"; field2 = Some(recordtype1); field3 = ( fun () -> (recordtype1, "") )} let recordtype2 : RecordType = { field1 = "field2"; field2 = Some(recordtype1); field3 = ( fun () -> (recordtype1, "") )} let rec genericRecordType1 : GenericRecordType = { field1 = "field1"; field2 = 1; field3 = ( fun () -> genericRecordType1 )} @@ -900,7 +886,7 @@ type FSharpTypeTests() = // Base class methods [] - member _.ObjectEquals() = + member __.ObjectEquals() = // Record value Assert.True(FSharpValue.Equals(recordtype1, recordtype1)) @@ -937,7 +923,7 @@ type FSharpTypeTests() = // Static methods [] - member _.GetExceptionFields() = + member __.GetExceptionFields() = // positive let forallexistedInt = @@ -959,7 +945,7 @@ type FSharpTypeTests() = [] - member _.GetFunctionElements() = + member __.GetFunctionElements() = // positive Assert.AreEqual(FSharpType.GetFunctionElements(typeof string>), (typeof, typeof)) @@ -972,7 +958,7 @@ type FSharpTypeTests() = CheckThrowsArgumentNullException(fun () ->FSharpType.GetFunctionElements(null) |> ignore ) [] - member _.GetRecordFields() = + member __.GetRecordFields() = // positive Assert.AreEqual(FSharpType.GetRecordFields(typeof), (typeof.GetProperties())) @@ -986,7 +972,7 @@ type FSharpTypeTests() = [] - member _.GetTupleElements() = + member __.GetTupleElements() = // positive Assert.AreEqual(FSharpType.GetTupleElements(typeof>), [|typeof; typeof|]) @@ -999,7 +985,7 @@ type FSharpTypeTests() = CheckThrowsArgumentNullException(fun () ->FSharpType.GetTupleElements(null) |> ignore ) [] - member _.GetUnionCases() = + member __.GetUnionCases() = // SingleCaseUnion let singlecaseUnionCaseInfoArray = FSharpType.GetUnionCases(typeof) let (expectedSinglecaseinfo, singlevaluearray) = FSharpValue.GetUnionFields(singlecaseunion1, typeof) @@ -1017,7 +1003,7 @@ type FSharpTypeTests() = CheckThrowsArgumentException(fun () -> FSharpType.GetUnionCases(typeof) |> ignore) [] - member _.IsExceptionRepresentation() = + member __.IsExceptionRepresentation() = // positive Assert.True(FSharpType.IsExceptionRepresentation(typeof)) @@ -1031,7 +1017,7 @@ type FSharpTypeTests() = CheckThrowsArgumentNullException(fun () -> FSharpType.IsExceptionRepresentation(null) |> ignore ) [] - member _.IsFunction() = + member __.IsFunction() = // positive Assert.True(FSharpType.IsFunction(typeof int>)) @@ -1044,7 +1030,7 @@ type FSharpTypeTests() = CheckThrowsArgumentNullException(fun () -> FSharpType.IsFunction(null) |> ignore ) [] - member _.IsModule() = + member __.IsModule() = let getasm (t : Type) = t.Assembly @@ -1075,7 +1061,7 @@ type FSharpTypeTests() = CheckThrowsArgumentNullException(fun () -> FSharpType.IsModule(null) |> ignore ) [] - member _.IsRecord() = + member __.IsRecord() = // positive Assert.True(FSharpType.IsRecord(typeof)) @@ -1090,14 +1076,14 @@ type FSharpTypeTests() = // Regression for 5588, Reflection: unit is still treated as a record type, but only if you pass BindingFlags.NonPublic [] - member _.``IsRecord.Regression5588``() = + member __.``IsRecord.Regression5588``() = // negative Assert.False(FSharpType.IsRecord(typeof)) Assert.False( FSharpType.IsRecord(typeof, System.Reflection.BindingFlags.NonPublic) ) () [] - member _.IsTuple() = + member __.IsTuple() = // positive Assert.True(FSharpType.IsTuple(typeof>)) Assert.True(FSharpType.IsTuple(typeof>)) @@ -1113,7 +1099,7 @@ type FSharpTypeTests() = CheckThrowsArgumentNullException(fun () ->FSharpType.IsTuple(null) |> ignore ) [] - member _.IsUnion() = + member __.IsUnion() = // positive Assert.True(FSharpType.IsUnion(typeof)) @@ -1129,7 +1115,7 @@ type FSharpTypeTests() = CheckThrowsArgumentNullException(fun () ->FSharpType.IsUnion(null) |> ignore ) [] - member _.MakeFunctionType() = + member __.MakeFunctionType() = // positive Assert.AreEqual(FSharpType.MakeFunctionType(typeof, typeof), typeofstring>) @@ -1141,7 +1127,7 @@ type FSharpTypeTests() = CheckThrowsArgumentNullException(fun () ->FSharpType.MakeFunctionType(null, null) |> ignore ) [] - member _.MakeTupleType() = + member __.MakeTupleType() = // positive Assert.AreEqual(FSharpType.MakeTupleType([|typeof; typeof|]), typeof>) @@ -1153,7 +1139,7 @@ type FSharpTypeTests() = CheckThrowsArgumentException(fun () ->FSharpType.MakeTupleType([|null;null|]) |> ignore ) [] - member _.MakeStructTupleType() = + member __.MakeStructTupleType() = let asm = typeof.Assembly // positive Assert.AreEqual(FSharpType.MakeStructTupleType(asm, [|typeof; typeof|]), typeof) @@ -1188,7 +1174,7 @@ type UnionCaseInfoTests() = let ((recDiscCaseinfo:UnionCaseInfo), recDiscCasevaluearray) = FSharpValue.GetUnionFields(recDiscUniontypeB, typeof>) [] - member _.Equals() = + member __.Equals() = //positive // single case Assert.True(singlecaseinfo.Equals(singlecaseinfo)) @@ -1213,7 +1199,7 @@ type UnionCaseInfoTests() = Assert.False(singlecaseinfo.Equals(null)) [] - member _.GetCustomAttributes() = + member __.GetCustomAttributes() = // single case let singlecaseAttribute = (singlecaseinfo.GetCustomAttributes()).[0] :?> Attribute @@ -1231,7 +1217,7 @@ type UnionCaseInfoTests() = CheckThrowsArgumentNullException(fun () -> singlecaseinfo.GetCustomAttributes(null) |> ignore ) [] - member _.GetFields() = + member __.GetFields() = // single case let singlecaseFieldInfo = (singlecaseinfo.GetFields()).[0] @@ -1250,7 +1236,7 @@ type UnionCaseInfoTests() = Assert.AreEqual(recdiscFieldInfo.PropertyType , typeof) [] - member _.GetHashCode() = + member __.GetHashCode() = // positive // single case @@ -1269,7 +1255,7 @@ type UnionCaseInfoTests() = Assert.AreNotEqual(discUnionInfoA.GetHashCode(), discUnionInfoB.GetHashCode()) [] - member _.GetType() = + member __.GetType() = // single case Assert.AreEqual(singlecaseinfo.GetType(), typeof ) @@ -1281,7 +1267,7 @@ type UnionCaseInfoTests() = Assert.AreEqual(recDiscCaseinfo.GetType(), typeof ) [] - member _.ToString() = + member __.ToString() = // single case Assert.AreEqual(singlenullarycaseinfo.ToString(), "SingleNullaryCaseDiscUnion.SingleNullaryCaseTag") diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/PrimTypes.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/PrimTypes.fs index 81429996a05..67f887e051a 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/PrimTypes.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/PrimTypes.fs @@ -885,22 +885,22 @@ module internal RangeTestsHelpers = type RangeTests() = - [] member _.``Range.SByte`` () = RangeTestsHelpers.signed System.SByte.MinValue System.SByte.MaxValue - [] member _.``Range.Byte`` () = RangeTestsHelpers.unsigned System.Byte.MinValue System.Byte.MaxValue - [] member _.``Range.Int16`` () = RangeTestsHelpers.signed System.Int16.MinValue System.Int16.MaxValue - [] member _.``Range.UInt16`` () = RangeTestsHelpers.unsigned System.UInt16.MinValue System.UInt16.MaxValue - [] member _.``Range.Int32`` () = RangeTestsHelpers.signed System.Int32.MinValue System.Int32.MaxValue - [] member _.``Range.UInt32`` () = RangeTestsHelpers.unsigned System.UInt32.MinValue System.UInt32.MaxValue - [] member _.``Range.Int64`` () = RangeTestsHelpers.signed System.Int64.MinValue System.Int64.MaxValue - [] member _.``Range.UInt64`` () = RangeTestsHelpers.unsigned System.UInt64.MinValue System.UInt64.MaxValue + [] member __.``Range.SByte`` () = RangeTestsHelpers.signed System.SByte.MinValue System.SByte.MaxValue + [] member __.``Range.Byte`` () = RangeTestsHelpers.unsigned System.Byte.MinValue System.Byte.MaxValue + [] member __.``Range.Int16`` () = RangeTestsHelpers.signed System.Int16.MinValue System.Int16.MaxValue + [] member __.``Range.UInt16`` () = RangeTestsHelpers.unsigned System.UInt16.MinValue System.UInt16.MaxValue + [] member __.``Range.Int32`` () = RangeTestsHelpers.signed System.Int32.MinValue System.Int32.MaxValue + [] member __.``Range.UInt32`` () = RangeTestsHelpers.unsigned System.UInt32.MinValue System.UInt32.MaxValue + [] member __.``Range.Int64`` () = RangeTestsHelpers.signed System.Int64.MinValue System.Int64.MaxValue + [] member __.``Range.UInt64`` () = RangeTestsHelpers.unsigned System.UInt64.MinValue System.UInt64.MaxValue [] - member _.``Range.IntPtr`` () = + member __.``Range.IntPtr`` () = if System.IntPtr.Size >= 4 then RangeTestsHelpers.signed (System.IntPtr System.Int32.MinValue) (System.IntPtr System.Int32.MaxValue) if System.IntPtr.Size >= 8 then RangeTestsHelpers.signed (System.IntPtr System.Int64.MinValue) (System.IntPtr System.Int64.MaxValue) [] - member _.``Range.UIntPtr`` () = + member __.``Range.UIntPtr`` () = if System.UIntPtr.Size >= 4 then RangeTestsHelpers.unsigned (System.UIntPtr System.UInt32.MinValue) (System.UIntPtr System.UInt32.MaxValue) if System.UIntPtr.Size >= 8 then RangeTestsHelpers.unsigned (System.UIntPtr System.UInt64.MinValue) (System.UIntPtr System.UInt64.MaxValue) @@ -911,7 +911,7 @@ open NonStructuralComparison type NonStructuralComparisonTests() = [] - member _.CompareFloat32() = // https://github.com/Microsoft/visualfsharp/pull/4493 + member __.CompareFloat32() = // https://github.com/Microsoft/visualfsharp/pull/4493 let x = 32 |> float32 let y = 32 |> float32 diff --git a/tests/FSharp.Core.UnitTests/SurfaceArea.fs b/tests/FSharp.Core.UnitTests/SurfaceArea.fs index e68d5515509..11fb8cec14e 100644 --- a/tests/FSharp.Core.UnitTests/SurfaceArea.fs +++ b/tests/FSharp.Core.UnitTests/SurfaceArea.fs @@ -701,14 +701,6 @@ Microsoft.FSharp.Core.CompilerMessageAttribute: System.String get_Message() 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.ArrayCollector`1[T]: T[] Close() -Microsoft.FSharp.Core.CompilerServices.ArrayCollector`1[T]: Void Add(T) -Microsoft.FSharp.Core.CompilerServices.ArrayCollector`1[T]: Void AddMany(System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Core.CompilerServices.ArrayCollector`1[T]: T[] AddManyAndClose(System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Core.CompilerServices.ListCollector`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Close() -Microsoft.FSharp.Core.CompilerServices.ListCollector`1[T]: Void Add(T) -Microsoft.FSharp.Core.CompilerServices.ListCollector`1[T]: Void AddMany(System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Core.CompilerServices.ListCollector`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] AddManyAndClose(System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean CheckClose 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) diff --git a/tests/FSharp.Test.Utilities/Compiler.fs b/tests/FSharp.Test.Utilities/Compiler.fs index 153904e1636..1deb43dfade 100644 --- a/tests/FSharp.Test.Utilities/Compiler.fs +++ b/tests/FSharp.Test.Utilities/Compiler.fs @@ -3,12 +3,11 @@ namespace FSharp.Test.Utilities open FSharp.Compiler.Interactive.Shell -open FSharp.Compiler.IO -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.Scripting +open FSharp.Compiler.SourceCodeServices open FSharp.Test.Utilities open FSharp.Test.Utilities.Assert open FSharp.Test.Utilities.Utilities -open FSharp.Test.ScriptHelpers open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.CSharp open NUnit.Framework @@ -102,9 +101,7 @@ module rec Compiler = let private getSource (src: TestType) : string = match src with | Text t -> t - | Path p -> - use stream = FileSystem.OpenFileForReadShim(p) - stream.ReadAllText() + | Path p -> System.IO.File.ReadAllText p let private fsFromString (source: string) (kind: SourceKind) : FSharpCompilationSource = match source with @@ -124,29 +121,29 @@ module rec Compiler = | null -> failwith "Source cannot be null" | _ -> { Source = Text source - LangVersion = CSharpLanguageVersion.CSharp9 - TargetFramework = TargetFramework.Current + LangVersion = CSharpLanguageVersion.CSharp8 + TargetFramework = TargetFramework.NetCoreApp31 Name = None References = [] } - let private fromFSharpDiagnostic (errors: FSharpDiagnostic[]) : ErrorInfo list = - let toErrorInfo (e: FSharpDiagnostic) : ErrorInfo = + let private fromFSharpErrorInfo (errors: FSharpErrorInfo[]) : ErrorInfo list = + let toErrorInfo (e: FSharpErrorInfo) : ErrorInfo = let errorNumber = e.ErrorNumber let severity = e.Severity - let error = if severity = FSharpDiagnosticSeverity.Warning then Warning errorNumber else Error errorNumber + let error = if severity = FSharpErrorSeverity.Warning then Warning errorNumber else Error errorNumber { Error = error Range = - { StartLine = e.StartLine + { StartLine = e.StartLineAlternate StartColumn = e.StartColumn - EndLine = e.EndLine + EndLine = e.EndLineAlternate EndColumn = e.EndColumn } Message = e.Message } errors |> List.ofArray - |> List.distinctBy (fun e -> e.Severity, e.ErrorNumber, e.StartLine, e.StartColumn, e.EndLine, e.EndColumn, e.Message) + |> List.distinctBy (fun e -> e.Severity, e.ErrorNumber, e.StartLineAlternate, e.StartColumn, e.EndLineAlternate, e.EndColumn, e.Message) |> List.map toErrorInfo let private partitionErrors diagnostics = diagnostics |> List.partition (fun e -> match e.Error with Error _ -> true | _ -> false) @@ -277,9 +274,9 @@ module rec Compiler = let private compileFSharpCompilation compilation ignoreWarnings : TestResult = - let ((err: FSharpDiagnostic[], outputFilePath: string), deps) = CompilerAssert.CompileRaw(compilation, ignoreWarnings) + let ((err: FSharpErrorInfo[], outputFilePath: string), deps) = CompilerAssert.CompileRaw(compilation, ignoreWarnings) - let diagnostics = err |> fromFSharpDiagnostic + let diagnostics = err |> fromFSharpErrorInfo let result = { OutputPath = None @@ -370,7 +367,7 @@ module rec Compiler = let parseResults = CompilerAssert.Parse source let failed = parseResults.ParseHadErrors - let diagnostics = parseResults.Diagnostics |> fromFSharpDiagnostic + let diagnostics = parseResults.Errors |> fromFSharpErrorInfo let result = { OutputPath = None @@ -389,21 +386,21 @@ module rec Compiler = | FS fs -> parseFSharp fs | _ -> failwith "Parsing only supported for F#." - let private typecheckFSharpSourceAndReturnErrors (fsSource: FSharpCompilationSource) : FSharpDiagnostic [] = + let private typecheckFSharpSourceAndReturnErrors (fsSource: FSharpCompilationSource) : FSharpErrorInfo [] = let source = getSource fsSource.Source let options = fsSource.Options |> Array.ofList let name = match fsSource.Name with | None -> "test.fs" | Some n -> n - let (err: FSharpDiagnostic []) = CompilerAssert.TypeCheckWithOptionsAndName options name source + let (err: FSharpErrorInfo []) = CompilerAssert.TypeCheckWithOptionsAndName options name source err let private typecheckFSharpSource (fsSource: FSharpCompilationSource) : TestResult = - let (err: FSharpDiagnostic []) = typecheckFSharpSourceAndReturnErrors fsSource + let (err: FSharpErrorInfo []) = typecheckFSharpSourceAndReturnErrors fsSource - let diagnostics = err |> fromFSharpDiagnostic + let diagnostics = err |> fromFSharpErrorInfo let result = { OutputPath = None @@ -429,17 +426,6 @@ module rec Compiler = | FS fs -> typecheckFSharp fs | _ -> failwith "Typecheck only supports F#" - let typecheckResults (cUnit: CompilationUnit) : FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults = - match cUnit with - | FS fsSource -> - let source = getSource fsSource.Source - let options = fsSource.Options |> Array.ofList - - let name = match fsSource.Name with | None -> "test.fs" | Some n -> n - - CompilerAssert.TypeCheck(options, name, source) - | _ -> failwith "Typecheck only supports F#" - let run (result: TestResult) : TestResult = match result with | Failure f -> failwith (sprintf "Compilation should be successfull in order to run.\n Errors: %A" (f.Diagnostics)) @@ -464,9 +450,9 @@ module rec Compiler = use script = new FSharpScript(additionalArgs=options) - let ((evalresult: Result), (err: FSharpDiagnostic[])) = script.Eval(source) + let ((evalresult: Result), (err: FSharpErrorInfo[])) = script.Eval(source) - let diagnostics = err |> fromFSharpDiagnostic + let diagnostics = err |> fromFSharpErrorInfo let result = { OutputPath = None @@ -516,9 +502,9 @@ module rec Compiler = | _ -> failwith "FSI running only supports F#." - let private createBaselineErrors (baseline: Baseline) (actualErrors: string) extension : unit = + let private createBaselineErrors (baseline: Baseline) actualErrors extension : unit = match baseline.SourceFilename with - | Some f -> FileSystem.OpenFileForWriteShim(Path.ChangeExtension(f, extension)).Write(actualErrors) + | Some f -> File.WriteAllText(Path.ChangeExtension(f, extension), actualErrors) | _ -> () let private verifyFSBaseline (fs) : unit = @@ -619,8 +605,8 @@ module rec Compiler = // TODO: Check all "categories", collect all results and print alltogether. checkEqual "Errors count" expected.Length errors.Length - (errors, expected) - ||> List.iter2 (fun actualError expectedError -> + List.zip errors expected + |> List.iter (fun (actualError, expectedError) -> let { Error = actualError; Range = actualRange; Message = actualMessage } = actualError let { Error = expectedError; Range = expectedRange; Message = expectedMessage } = expectedError checkEqual "Error" expectedError actualError diff --git a/tests/FSharp.Test.Utilities/CompilerAssert.fs b/tests/FSharp.Test.Utilities/CompilerAssert.fs index c9e0d50582f..d79135284a4 100644 --- a/tests/FSharp.Test.Utilities/CompilerAssert.fs +++ b/tests/FSharp.Test.Utilities/CompilerAssert.fs @@ -3,18 +3,22 @@ namespace FSharp.Test.Utilities open System +open System.Diagnostics open System.IO open System.Text +open System.Diagnostics +open System.Collections.Generic open System.Reflection -open FSharp.Compiler.Interactive.Shell -open FSharp.Compiler.IO -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Diagnostics open FSharp.Compiler.Text +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Interactive.Shell #if FX_NO_APP_DOMAINS open System.Runtime.Loader #endif open NUnit.Framework +open System.Reflection.Emit +open Microsoft.CodeAnalysis +open Microsoft.CodeAnalysis.CSharp open FSharp.Test.Utilities.Utilities open TestFramework @@ -37,7 +41,7 @@ type Worker () = AppDomain.CurrentDomain.add_AssemblyResolve(ResolveEventHandler(fun _ args -> deps |> Array.tryFind (fun (x: string) -> Path.GetFileNameWithoutExtension x = args.Name) - |> Option.bind (fun x -> if FileSystem.FileExistsShim x then Some x else None) + |> Option.bind (fun x -> if File.Exists x then Some x else None) |> Option.map Assembly.LoadFile |> Option.defaultValue null)) let asm = Assembly.LoadFrom(assemblyPath) @@ -76,6 +80,109 @@ type CompilerAssert private () = static let checker = FSharpChecker.Create(suggestNamesForErrors=true) + static let config = TestFramework.initializeSuite () + + static let _ = config |> ignore + +// Do a one time dotnet sdk build to compute the proper set of reference assemblies to pass to the compiler + static let projectFile = """ + + + + Exe + $TARGETFRAMEWORK + true + true + + + + + + + + + + + + + + + + + + + + + + + +""" + + static let directoryBuildProps = """ + + +""" + + static let directoryBuildTargets = """ + + +""" + + static let programFs = """ +open System + +[] +let main argv = 0""" + + static let getNetCoreAppReferences = + let mutable output = "" + let mutable errors = "" + let mutable cleanUp = true + let pathToArtifacts = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "../../../..")) + if Path.GetFileName(pathToArtifacts) <> "artifacts" then failwith "CompilerAssert did not find artifacts directory --- has the location changed????" + let pathToTemp = Path.Combine(pathToArtifacts, "Temp") + let projectDirectory = Path.Combine(pathToTemp, "CompilerAssert", Path.GetRandomFileName()) + let pathToFSharpCore = typeof.Assembly.Location + try + try + Directory.CreateDirectory(projectDirectory) |> ignore + let projectFileName = Path.Combine(projectDirectory, "ProjectFile.fsproj") + let programFsFileName = Path.Combine(projectDirectory, "Program.fs") + let directoryBuildPropsFileName = Path.Combine(projectDirectory, "Directory.Build.props") + let directoryBuildTargetsFileName = Path.Combine(projectDirectory, "Directory.Build.targets") + let frameworkReferencesFileName = Path.Combine(projectDirectory, "FrameworkReferences.txt") +#if NETCOREAPP + File.WriteAllText(projectFileName, projectFile.Replace("$TARGETFRAMEWORK", "netcoreapp3.1").Replace("$FSHARPCORELOCATION", pathToFSharpCore)) +#else + File.WriteAllText(projectFileName, projectFile.Replace("$TARGETFRAMEWORK", "net472").Replace("$FSHARPCORELOCATION", pathToFSharpCore)) +#endif + File.WriteAllText(programFsFileName, programFs) + File.WriteAllText(directoryBuildPropsFileName, directoryBuildProps) + File.WriteAllText(directoryBuildTargetsFileName, directoryBuildTargets) + + let timeout = 30000 + let exitCode, output, errors = Commands.executeProcess (Some config.DotNetExe) "build" projectDirectory timeout + + if exitCode <> 0 || errors.Length > 0 then + printfn "Output:\n=======\n" + output |> Seq.iter(fun line -> printfn "STDOUT:%s\n" line) + printfn "Errors:\n=======\n" + errors |> Seq.iter(fun line -> printfn "STDERR:%s\n" line) + Assert.True(false, "Errors produced generating References") + + File.ReadLines(frameworkReferencesFileName) |> Seq.toArray + with | e -> + cleanUp <- false + printfn "Project directory: %s" projectDirectory + printfn "STDOUT: %s" output + File.WriteAllText(Path.Combine(projectDirectory, "project.stdout"), output) + printfn "STDERR: %s" errors + File.WriteAllText(Path.Combine(projectDirectory, "project.stderror"), errors) + raise (new Exception (sprintf "An error occurred getting netcoreapp references: %A" e)) + finally + if cleanUp then + try Directory.Delete(projectDirectory) with | _ -> () + #if FX_NO_APP_DOMAINS static let executeBuiltApp assembly deps = let ctxt = AssemblyLoadContext("ContextName", true) @@ -111,7 +218,7 @@ type CompilerAssert private () = ProjectId = None SourceFiles = [|"test.fs"|] OtherOptions = - let assemblies = TargetFrameworkUtil.currentReferences |> Array.map (fun x -> sprintf "-r:%s" x) + let assemblies = getNetCoreAppReferences |> Array.map (fun x -> sprintf "-r:%s" x) #if NETCOREAPP Array.append [|"--preferreduilang:en-US"; "--targetprofile:netcore"; "--noframework"; "--simpleresolution"; "--warn:5"|] assemblies #else @@ -123,6 +230,7 @@ type CompilerAssert private () = LoadTime = DateTime() UnresolvedReferences = None OriginalLoadReferences = [] + ExtraProjectInfo = None Stamp = None } @@ -131,7 +239,7 @@ type CompilerAssert private () = let args = options |> Array.append defaultProjectOptions.OtherOptions - |> Array.append [| "fsc.dll"; inputFilePath; "-o:" + outputFilePath; (if isExe then "--target:exe" else "--target:library"); "--nowin32manifest" |] + |> Array.append [| "fsc.exe"; inputFilePath; "-o:" + outputFilePath; (if isExe then "--target:exe" else "--target:library"); "--nowin32manifest" |] let errors, _ = checker.Compile args |> Async.RunSynchronously errors, outputFilePath @@ -166,13 +274,13 @@ type CompilerAssert private () = o.Dispose() reraise() - static let assertErrors libAdjust ignoreWarnings (errors: FSharpDiagnostic []) expectedErrors = + static let assertErrors libAdjust ignoreWarnings (errors: FSharpErrorInfo []) expectedErrors = let errors = errors - |> Array.filter (fun error -> if ignoreWarnings then error.Severity <> FSharpDiagnosticSeverity.Warning else true) - |> Array.distinctBy (fun e -> e.Severity, e.ErrorNumber, e.StartLine, e.StartColumn, e.EndLine, e.EndColumn, e.Message) + |> Array.filter (fun error -> if ignoreWarnings then error.Severity <> FSharpErrorSeverity.Warning else true) + |> Array.distinctBy (fun e -> e.Severity, e.ErrorNumber, e.StartLineAlternate, e.StartColumn, e.EndLineAlternate, e.EndColumn, e.Message) |> Array.map (fun info -> - (info.Severity, info.ErrorNumber, (info.StartLine - libAdjust, info.StartColumn + 1, info.EndLine - libAdjust, info.EndColumn + 1), info.Message)) + (info.Severity, info.ErrorNumber, (info.StartLineAlternate - libAdjust, info.StartColumn + 1, info.EndLineAlternate - libAdjust, info.EndColumn + 1), info.Message)) let checkEqual k a b = if a <> b then @@ -191,10 +299,12 @@ type CompilerAssert private () = checkEqual "ErrorRange" expectedErrorRange actualErrorRange checkEqual "Message" expectedErrorMsg actualErrorMsg) + static let gate = obj () + static let compile isExe options source f = - compileAux isExe options source f + lock gate (fun _ -> compileAux isExe options source f) - static let rec compileCompilationAux outputPath (disposals: ResizeArray) ignoreWarnings (cmpl: Compilation) : (FSharpDiagnostic[] * string) * string list = + static let rec compileCompilationAux outputPath (disposals: ResizeArray) ignoreWarnings (cmpl: Compilation) : (FSharpErrorInfo[] * string) * string list = let compilationRefs, deps = match cmpl with | Compilation(_, _, _, _, cmpls, _) -> @@ -332,7 +442,7 @@ type CompilerAssert private () = let runtimeconfig = """ { "runtimeOptions": { - "tfm": "net5.0", + "tfm": "netcoreapp3.1", "framework": { "name": "Microsoft.NETCore.App", "version": "5.0.0" @@ -347,22 +457,19 @@ type CompilerAssert private () = #endif let timeout = 30000 let exitCode, output, errors = Commands.executeProcess (Some filename) arguments (Path.GetDirectoryName(outputFilePath)) timeout - (exitCode, output |> String.concat "\n", errors |> String.concat "\n") - - static member Checker = checker - - static member DefaultProjectOptions = defaultProjectOptions + (exitCode, output |> String.concat Environment.NewLine, errors |> String.concat Environment.NewLine) static member CompileWithErrors(cmpl: Compilation, expectedErrors, ?ignoreWarnings) = let ignoreWarnings = defaultArg ignoreWarnings false - compileCompilation ignoreWarnings cmpl (fun ((errors, _), _) -> - assertErrors 0 ignoreWarnings errors expectedErrors) + lock gate (fun () -> + compileCompilation ignoreWarnings cmpl (fun ((errors, _), _) -> + assertErrors 0 ignoreWarnings errors expectedErrors)) static member Compile(cmpl: Compilation, ?ignoreWarnings) = CompilerAssert.CompileWithErrors(cmpl, [||], defaultArg ignoreWarnings false) static member CompileRaw(cmpl: Compilation, ?ignoreWarnings) = - returnCompilation cmpl (defaultArg ignoreWarnings false) + lock gate (fun () -> returnCompilation cmpl (defaultArg ignoreWarnings false)) static member ExecuteAndReturnResult (outputFilePath: string, deps: string list, newProcess: bool) = // If we execute in-process (true by default), then the only way of getting STDOUT is to redirect it to SB, and STDERR is from catching an exception. @@ -376,40 +483,42 @@ type CompilerAssert private () = let beforeExecute = defaultArg beforeExecute (fun _ _ -> ()) let newProcess = defaultArg newProcess false let onOutput = defaultArg onOutput (fun _ -> ()) - compileCompilation ignoreWarnings cmpl (fun ((errors, outputFilePath), deps) -> - assertErrors 0 ignoreWarnings errors [||] - beforeExecute outputFilePath deps - if newProcess then - let (exitCode, output, errors) = executeBuiltAppNewProcessAndReturnResult outputFilePath - if exitCode <> 0 then - Assert.Fail errors - onOutput output - else - executeBuiltApp outputFilePath deps) + lock gate (fun () -> + compileCompilation ignoreWarnings cmpl (fun ((errors, outputFilePath), deps) -> + assertErrors 0 ignoreWarnings errors [||] + beforeExecute outputFilePath deps + if newProcess then + let (exitCode, output, errors) = executeBuiltAppNewProcessAndReturnResult outputFilePath + if exitCode <> 0 then + Assert.Fail errors + onOutput output + else + executeBuiltApp outputFilePath deps)) static member ExecutionHasOutput(cmpl: Compilation, expectedOutput: string) = - CompilerAssert.Execute(cmpl, newProcess = true, onOutput = (fun output -> Assert.AreEqual(expectedOutput, output, sprintf "'%s' = '%s'" expectedOutput output))) + CompilerAssert.Execute(cmpl, newProcess = true, onOutput = (fun output -> Assert.AreEqual(expectedOutput, output))) /// Assert that the given source code compiles with the `defaultProjectOptions`, with no errors or warnings static member CompileOfAst isExe source = let outputFilePath = Path.ChangeExtension (Path.GetTempFileName(), if isExe then "exe" else ".dll") let parseOptions = { FSharpParsingOptions.Default with SourceFiles = [|"test.fs"|] } - let parseResults = - checker.ParseFile("test.fs", SourceText.ofString source, parseOptions) + let parseResults = + checker.ParseFile("test.fs", SourceText.ofString source, parseOptions) |> Async.RunSynchronously - Assert.IsEmpty(parseResults.Diagnostics, sprintf "Parse errors: %A" parseResults.Diagnostics) + Assert.IsEmpty(parseResults.Errors, sprintf "Parse errors: %A" parseResults.Errors) + Assert.IsTrue(parseResults.ParseTree.IsSome, "no parse tree returned") let dependencies = #if NETCOREAPP - Array.toList TargetFrameworkUtil.currentReferences + Array.toList getNetCoreAppReferences #else [] #endif - let compileErrors, statusCode = - checker.Compile([parseResults.ParseTree], "test", outputFilePath, dependencies, executable = isExe, noframework = true) + let compileErrors, statusCode = + checker.Compile([parseResults.ParseTree.Value], "test", outputFilePath, dependencies, executable = isExe, noframework = true) |> Async.RunSynchronously Assert.IsEmpty(compileErrors, sprintf "Compile errors: %A" compileErrors) @@ -419,21 +528,22 @@ type CompilerAssert private () = static member CompileOfAstToDynamicAssembly source = let assemblyName = sprintf "test-%O" (Guid.NewGuid()) let parseOptions = { FSharpParsingOptions.Default with SourceFiles = [|"test.fs"|] } - let parseResults = - checker.ParseFile("test.fs", SourceText.ofString source, parseOptions) + let parseResults = + checker.ParseFile("test.fs", SourceText.ofString source, parseOptions) |> Async.RunSynchronously - - Assert.IsEmpty(parseResults.Diagnostics, sprintf "Parse errors: %A" parseResults.Diagnostics) + + Assert.IsEmpty(parseResults.Errors, sprintf "Parse errors: %A" parseResults.Errors) + Assert.IsTrue(parseResults.ParseTree.IsSome, "no parse tree returned") let dependencies = #if NETCOREAPP - Array.toList TargetFrameworkUtil.currentReferences + Array.toList getNetCoreAppReferences #else [] #endif - let compileErrors, statusCode, assembly = - checker.CompileToDynamicAssembly([parseResults.ParseTree], assemblyName, dependencies, None, noframework = true) + let compileErrors, statusCode, assembly = + checker.CompileToDynamicAssembly([parseResults.ParseTree.Value], assemblyName, dependencies, None, noframework = true) |> Async.RunSynchronously Assert.IsEmpty(compileErrors, sprintf "Compile errors: %A" compileErrors) @@ -442,140 +552,124 @@ type CompilerAssert private () = Option.get assembly static member Pass (source: string) = - let parseResults, fileAnswer = checker.ParseAndCheckFileInProject("test.fs", 0, SourceText.ofString source, defaultProjectOptions) |> Async.RunSynchronously + lock gate <| fun () -> + let parseResults, fileAnswer = checker.ParseAndCheckFileInProject("test.fs", 0, SourceText.ofString source, defaultProjectOptions) |> Async.RunSynchronously - Assert.IsEmpty(parseResults.Diagnostics, sprintf "Parse errors: %A" parseResults.Diagnostics) + Assert.IsEmpty(parseResults.Errors, sprintf "Parse errors: %A" parseResults.Errors) - match fileAnswer with - | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted") - | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> + match fileAnswer with + | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted") + | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> - Assert.IsEmpty(typeCheckResults.Diagnostics, sprintf "Type Check errors: %A" typeCheckResults.Diagnostics) + Assert.IsEmpty(typeCheckResults.Errors, sprintf "Type Check errors: %A" typeCheckResults.Errors) static member PassWithOptions options (source: string) = - let options = { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions} + lock gate <| fun () -> + let options = { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions} - let parseResults, fileAnswer = checker.ParseAndCheckFileInProject("test.fs", 0, SourceText.ofString source, options) |> Async.RunSynchronously + let parseResults, fileAnswer = checker.ParseAndCheckFileInProject("test.fs", 0, SourceText.ofString source, options) |> Async.RunSynchronously - Assert.IsEmpty(parseResults.Diagnostics, sprintf "Parse errors: %A" parseResults.Diagnostics) + Assert.IsEmpty(parseResults.Errors, sprintf "Parse errors: %A" parseResults.Errors) - match fileAnswer with - | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted") - | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> + match fileAnswer with + | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted") + | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> - Assert.IsEmpty(typeCheckResults.Diagnostics, sprintf "Type Check errors: %A" typeCheckResults.Diagnostics) + Assert.IsEmpty(typeCheckResults.Errors, sprintf "Type Check errors: %A" typeCheckResults.Errors) static member TypeCheckWithErrorsAndOptionsAgainstBaseLine options (sourceDirectory:string) (sourceFile: string) = - let absoluteSourceFile = System.IO.Path.Combine(sourceDirectory, sourceFile) - let parseResults, fileAnswer = - checker.ParseAndCheckFileInProject( - sourceFile, - 0, - SourceText.ofString (File.ReadAllText absoluteSourceFile), - { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions; SourceFiles = [|sourceFile|] }) - |> Async.RunSynchronously - - Assert.IsEmpty(parseResults.Diagnostics, sprintf "Parse errors: %A" parseResults.Diagnostics) - - match fileAnswer with - | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted") - | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> - - let errorsExpectedBaseLine = - let bslFile = Path.ChangeExtension(absoluteSourceFile, "bsl") - if not (FileSystem.FileExistsShim bslFile) then - // new test likely initialized, create empty baseline file - File.WriteAllText(bslFile, "") - File.ReadAllText(Path.ChangeExtension(absoluteSourceFile, "bsl")) - let errorsActual = - typeCheckResults.Diagnostics - |> Array.map (sprintf "%A") - |> String.concat "\n" - File.WriteAllText(Path.ChangeExtension(absoluteSourceFile,"err"), errorsActual) - - Assert.AreEqual(errorsExpectedBaseLine.Replace("\r\n","\n"), errorsActual.Replace("\r\n","\n")) - - static member TypeCheckWithOptionsAndName options name (source: string) = - let errors = - let parseResults, fileAnswer = - checker.ParseAndCheckFileInProject( - name, - 0, - SourceText.ofString source, - { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions; SourceFiles = [|name|] }) - |> Async.RunSynchronously - - if parseResults.Diagnostics.Length > 0 then - parseResults.Diagnostics - else - - match fileAnswer with - | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted"); [| |] - | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> typeCheckResults.Diagnostics - - errors - - static member TypeCheckWithOptions options (source: string) = - let errors = + lock gate <| fun () -> + let absoluteSourceFile = System.IO.Path.Combine(sourceDirectory, sourceFile) let parseResults, fileAnswer = checker.ParseAndCheckFileInProject( - "test.fs", + sourceFile, 0, - SourceText.ofString source, - { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions}) + SourceText.ofString (File.ReadAllText absoluteSourceFile), + { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions; SourceFiles = [|sourceFile|] }) |> Async.RunSynchronously - if parseResults.Diagnostics.Length > 0 then - parseResults.Diagnostics - else + Assert.IsEmpty(parseResults.Errors, sprintf "Parse errors: %A" parseResults.Errors) - match fileAnswer with - | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted"); [| |] - | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> typeCheckResults.Diagnostics + match fileAnswer with + | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted") + | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> - errors + let errorsExpectedBaseLine = + let bslFile = Path.ChangeExtension(absoluteSourceFile, "bsl") + if not (File.Exists bslFile) then + // new test likely initialized, create empty baseline file + File.WriteAllText(bslFile, "") + File.ReadAllText(Path.ChangeExtension(absoluteSourceFile, "bsl")) + let errorsActual = + typeCheckResults.Errors + |> Array.map (sprintf "%A") + |> String.concat "\n" + File.WriteAllText(Path.ChangeExtension(absoluteSourceFile,"err"), errorsActual) - /// Parses and type checks the given source. Fails if type checker is aborted. - static member ParseAndTypeCheck(options, name, source: string) = - let parseResults, fileAnswer = - checker.ParseAndCheckFileInProject( - name, - 0, - SourceText.ofString source, - { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions}) - |> Async.RunSynchronously + Assert.AreEqual(errorsExpectedBaseLine.Replace("\r\n","\n"), errorsActual.Replace("\r\n","\n")) - match fileAnswer with - | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted"); failwith "Type Checker Aborted" - | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> parseResults, typeCheckResults + static member TypeCheckWithOptionsAndName options name (source: string) = + lock gate <| fun () -> + let errors = + let parseResults, fileAnswer = + checker.ParseAndCheckFileInProject( + name, + 0, + SourceText.ofString source, + { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions; SourceFiles = [|name|] }) + |> Async.RunSynchronously + + if parseResults.Errors.Length > 0 then + parseResults.Errors + else + + match fileAnswer with + | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted"); [| |] + | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> typeCheckResults.Errors - /// Parses and type checks the given source. Fails if the type checker is aborted or the parser returns any diagnostics. - static member TypeCheck(options, name, source: string) = - let parseResults, checkResults = CompilerAssert.ParseAndTypeCheck(options, name, source) + errors - Assert.IsEmpty(parseResults.Diagnostics, sprintf "Parse errors: %A" parseResults.Diagnostics) + static member TypeCheckWithOptions options (source: string) = + lock gate <| fun () -> + let errors = + let parseResults, fileAnswer = + checker.ParseAndCheckFileInProject( + "test.fs", + 0, + SourceText.ofString source, + { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions}) + |> Async.RunSynchronously + + if parseResults.Errors.Length > 0 then + parseResults.Errors + else + + match fileAnswer with + | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted"); [| |] + | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> typeCheckResults.Errors - checkResults + errors static member TypeCheckWithErrorsAndOptionsAndAdjust options libAdjust (source: string) expectedTypeErrors = - let errors = - let parseResults, fileAnswer = - checker.ParseAndCheckFileInProject( - "test.fs", - 0, - SourceText.ofString source, - { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions}) - |> Async.RunSynchronously + lock gate <| fun () -> + let errors = + let parseResults, fileAnswer = + checker.ParseAndCheckFileInProject( + "test.fs", + 0, + SourceText.ofString source, + { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions}) + |> Async.RunSynchronously - if parseResults.Diagnostics.Length > 0 then - parseResults.Diagnostics - else + if parseResults.Errors.Length > 0 then + parseResults.Errors + else - match fileAnswer with - | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted"); [| |] - | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> typeCheckResults.Diagnostics + match fileAnswer with + | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted"); [| |] + | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> typeCheckResults.Errors - assertErrors libAdjust false errors expectedTypeErrors + assertErrors libAdjust false errors expectedTypeErrors static member TypeCheckWithErrorsAndOptions options (source: string) expectedTypeErrors = @@ -584,10 +678,10 @@ type CompilerAssert private () = static member TypeCheckWithErrors (source: string) expectedTypeErrors = CompilerAssert.TypeCheckWithErrorsAndOptions [||] source expectedTypeErrors - static member TypeCheckSingleErrorWithOptions options (source: string) (expectedSeverity: FSharpDiagnosticSeverity) (expectedErrorNumber: int) (expectedErrorRange: int * int * int * int) (expectedErrorMsg: string) = + static member TypeCheckSingleErrorWithOptions options (source: string) (expectedSeverity: FSharpErrorSeverity) (expectedErrorNumber: int) (expectedErrorRange: int * int * int * int) (expectedErrorMsg: string) = CompilerAssert.TypeCheckWithErrorsAndOptions options source [| expectedSeverity, expectedErrorNumber, expectedErrorRange, expectedErrorMsg |] - static member TypeCheckSingleError (source: string) (expectedSeverity: FSharpDiagnosticSeverity) (expectedErrorNumber: int) (expectedErrorRange: int * int * int * int) (expectedErrorMsg: string) = + static member TypeCheckSingleError (source: string) (expectedSeverity: FSharpErrorSeverity) (expectedErrorNumber: int) (expectedErrorRange: int * int * int * int) (expectedErrorMsg: string) = CompilerAssert.TypeCheckWithErrors source [| expectedSeverity, expectedErrorNumber, expectedErrorRange, expectedErrorMsg |] static member CompileExeWithOptions options (source: string) = @@ -613,7 +707,7 @@ type CompilerAssert private () = static member CompileLibraryAndVerifyILWithOptions options (source: string) (f: ILVerifier -> unit) = compile false options source (fun (errors, outputFilePath) -> let errors = - errors |> Array.filter (fun x -> x.Severity = FSharpDiagnosticSeverity.Error) + errors |> Array.filter (fun x -> x.Severity = FSharpErrorSeverity.Error) if errors.Length > 0 then Assert.Fail (sprintf "Compile had errors: %A" errors) @@ -654,14 +748,15 @@ type CompilerAssert private () = errorMessages static member RunScriptWithOptions options (source: string) (expectedErrorMessages: string list) = - let errorMessages = CompilerAssert.RunScriptWithOptionsAndReturnResult options source - if expectedErrorMessages.Length <> errorMessages.Count then - Assert.Fail(sprintf "Expected error messages: %A \n\n Actual error messages: %A" expectedErrorMessages errorMessages) - else - (expectedErrorMessages, errorMessages) - ||> Seq.iter2 (fun expectedErrorMessage errorMessage -> - Assert.AreEqual(expectedErrorMessage, errorMessage) - ) + lock gate <| fun () -> + let errorMessages = CompilerAssert.RunScriptWithOptionsAndReturnResult options source + if expectedErrorMessages.Length <> errorMessages.Count then + Assert.Fail(sprintf "Expected error messages: %A \n\n Actual error messages: %A" expectedErrorMessages errorMessages) + else + (expectedErrorMessages, errorMessages) + ||> Seq.iter2 (fun expectedErrorMessage errorMessage -> + Assert.AreEqual(expectedErrorMessage, errorMessage) + ) static member RunScript source expectedErrorMessages = CompilerAssert.RunScriptWithOptions [||] source expectedErrorMessages @@ -677,16 +772,16 @@ type CompilerAssert private () = Assert.True(parseResults.ParseHadErrors) let errors = - parseResults.Diagnostics - |> Array.distinctBy (fun e -> e.Severity, e.ErrorNumber, e.StartLine, e.StartColumn, e.EndLine, e.EndColumn, e.Message) + parseResults.Errors + |> Array.distinctBy (fun e -> e.Severity, e.ErrorNumber, e.StartLineAlternate, e.StartColumn, e.EndLineAlternate, e.EndColumn, e.Message) - Assert.AreEqual(Array.length expectedParseErrors, errors.Length, sprintf "Parse errors: %A" parseResults.Diagnostics) + Assert.AreEqual(Array.length expectedParseErrors, errors.Length, sprintf "Parse errors: %A" parseResults.Errors) Array.zip errors expectedParseErrors |> Array.iter (fun (info, expectedError) -> - let (expectedSeverity: FSharpDiagnosticSeverity, expectedErrorNumber: int, expectedErrorRange: int * int * int * int, expectedErrorMsg: string) = expectedError + let (expectedSeverity: FSharpErrorSeverity, expectedErrorNumber: int, expectedErrorRange: int * int * int * int, expectedErrorMsg: string) = expectedError Assert.AreEqual(expectedSeverity, info.Severity) Assert.AreEqual(expectedErrorNumber, info.ErrorNumber, "expectedErrorNumber") - Assert.AreEqual(expectedErrorRange, (info.StartLine, info.StartColumn + 1, info.EndLine, info.EndColumn + 1), "expectedErrorRange") + Assert.AreEqual(expectedErrorRange, (info.StartLineAlternate, info.StartColumn + 1, info.EndLineAlternate, info.EndColumn + 1), "expectedErrorRange") Assert.AreEqual(expectedErrorMsg, info.Message, "expectedErrorMsg") ) diff --git a/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj b/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj index 07250b365ad..0bfdf0255f4 100644 --- a/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj +++ b/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj @@ -1,8 +1,8 @@  - net472;net5.0 - net5.0 + net472;netcoreapp3.1 + netcoreapp3.1 win-x86;win-x64;linux-x64;osx-x64 $(AssetTargetFallback);portable-net45+win8+wp8+wpa81 true @@ -22,7 +22,6 @@ - @@ -32,7 +31,8 @@ Make sure they are getting built with the Utilities. --> - + + @@ -52,29 +52,29 @@ - + - + Always - + Always - + Always - + Always - + Always - + Always - + Always diff --git a/tests/FSharp.Test.Utilities/ScriptHelpers.fs b/tests/FSharp.Test.Utilities/ScriptHelpers.fs deleted file mode 100644 index afb592b8c72..00000000000 --- a/tests/FSharp.Test.Utilities/ScriptHelpers.fs +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Test.ScriptHelpers - -open System -open System.Collections.Generic -open System.IO -open System.Text -open System.Threading -open FSharp.Compiler -open FSharp.Compiler.Interactive.Shell -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.EditorServices - -type CapturedTextReader() = - inherit TextReader() - let queue = Queue() - member _.ProvideInput(text: string) = - for c in text.ToCharArray() do - queue.Enqueue(c) - override _.Peek() = - if queue.Count > 0 then queue.Peek() |> int else -1 - override _.Read() = - if queue.Count > 0 then queue.Dequeue() |> int else -1 - -type RedirectConsoleInput() = - let oldStdIn = Console.In - let newStdIn = new CapturedTextReader() - do Console.SetIn(newStdIn) - member _.ProvideInput(text: string) = - newStdIn.ProvideInput(text) - interface IDisposable with - member _.Dispose() = - Console.SetIn(oldStdIn) - newStdIn.Dispose() - -type EventedTextWriter() = - inherit TextWriter() - let sb = StringBuilder() - let lineWritten = Event() - member _.LineWritten = lineWritten.Publish - override _.Encoding = Encoding.UTF8 - override _.Write(c: char) = - if c = '\n' then - let line = - let v = sb.ToString() - if v.EndsWith("\r") then v.Substring(0, v.Length - 1) - else v - sb.Clear() |> ignore - lineWritten.Trigger(line) - else sb.Append(c) |> ignore - -type RedirectConsoleOutput() = - let outputProduced = Event() - let errorProduced = Event() - let oldStdOut = Console.Out - let oldStdErr = Console.Error - let newStdOut = new EventedTextWriter() - let newStdErr = new EventedTextWriter() - do newStdOut.LineWritten.Add outputProduced.Trigger - do newStdErr.LineWritten.Add errorProduced.Trigger - do Console.SetOut(newStdOut) - do Console.SetError(newStdErr) - member _.OutputProduced = outputProduced.Publish - member _.ErrorProduced = errorProduced.Publish - interface IDisposable with - member _.Dispose() = - Console.SetOut(oldStdOut) - Console.SetError(oldStdErr) - newStdOut.Dispose() - newStdErr.Dispose() - - -[] -type LangVersion = - | V47 - | V50 - | Preview - -type FSharpScript(?additionalArgs: string[], ?quiet: bool, ?langVersion: LangVersion) = - - let additionalArgs = defaultArg additionalArgs [||] - let quiet = defaultArg quiet true - let langVersion = defaultArg langVersion LangVersion.Preview - let config = FsiEvaluationSession.GetDefaultConfiguration() - - let computedProfile = - // If we are being executed on the desktop framework (we can tell because the assembly containing int is mscorlib) then profile must be mscorlib otherwise use netcore - if typeof.Assembly.GetName().Name = "mscorlib" then "mscorlib" - else "netcore" - - let baseArgs = [| - typeof.Assembly.Location; - "--noninteractive"; - "--targetprofile:" + computedProfile - if quiet then "--quiet" - match langVersion with - | LangVersion.V47 -> "--langversion:4.7" - | LangVersion.V50 -> "--langversion:5.0" - | LangVersion.Preview -> "--langversion:preview" - |] - - let argv = Array.append baseArgs additionalArgs - - let fsi = FsiEvaluationSession.Create (config, argv, stdin, stdout, stderr) - - member _.ValueBound = fsi.ValueBound - - member _.Fsi = fsi - - member _.Eval(code: string, ?cancellationToken: CancellationToken) = - let cancellationToken = defaultArg cancellationToken CancellationToken.None - let ch, errors = fsi.EvalInteractionNonThrowing(code, cancellationToken) - match ch with - | Choice1Of2 v -> Ok(v), errors - | Choice2Of2 ex -> Error(ex), errors - - /// Get the available completion items from the code at the specified location. - /// - /// The input text on which completions will be calculated - /// The 1-based line index - /// The 0-based column index - member _.GetCompletionItems(text: string, line: int, column: int) = - async { - let parseResults, checkResults, _projectResults = fsi.ParseAndCheckInteraction(text) - let lineText = text.Split('\n').[line - 1] - let partialName = QuickParse.GetPartialLongNameEx(lineText, column - 1) - let declarationListInfos = checkResults.GetDeclarationListInfo(Some parseResults, line, lineText, partialName) - return declarationListInfos.Items - } - - interface IDisposable with - member _.Dispose() = - (fsi :> IDisposable).Dispose() - -[] -module TestHelpers = - - let getValue ((value: Result), (errors: FSharpDiagnostic[])) = - if errors.Length > 0 then - failwith <| sprintf "Evaluation returned %d errors:\r\n\t%s" errors.Length (String.Join("\r\n\t", errors)) - match value with - | Ok(value) -> value - | Error ex -> raise ex - - let ignoreValue = getValue >> ignore - - let getTempDir () = - let sysTempDir = Path.GetTempPath() - let customTempDirName = Guid.NewGuid().ToString("D") - let fullDirName = Path.Combine(sysTempDir, customTempDirName) - let dirInfo = Directory.CreateDirectory(fullDirName) - { new Object() with - member _.ToString() = dirInfo.FullName - interface IDisposable with - member _.Dispose() = - dirInfo.Delete(true) - } diff --git a/tests/FSharp.Test.Utilities/TestFramework.fs b/tests/FSharp.Test.Utilities/TestFramework.fs index efe60a1a41f..0191804c72c 100644 --- a/tests/FSharp.Test.Utilities/TestFramework.fs +++ b/tests/FSharp.Test.Utilities/TestFramework.fs @@ -2,19 +2,17 @@ module TestFramework +open Microsoft.Win32 open System open System.IO -open System.Reflection +open System.Text.RegularExpressions open System.Diagnostics open Scripting open NUnit.Framework -open FSharp.Compiler.IO [] module Commands = - let gate = obj() - // Execute the process pathToExe passing the arguments: arguments with the working directory: workingDir timeout after timeout milliseconds -1 = wait forever // returns exit code, stdio and stderr as string arrays let executeProcess pathToExe arguments workingDir timeout = @@ -55,21 +53,10 @@ module Commands = // Timed out resolving throw a diagnostic. raise (new TimeoutException(sprintf "Timeout executing command '%s' '%s'" (psi.FileName) (psi.Arguments))) else - p.WaitForExit() + () #if DEBUG - let workingDir' = - if workingDir = "" - then - // Assign working dir to prevent default to C:\Windows\System32 - let executionLocation = Assembly.GetExecutingAssembly().Location - Path.GetDirectoryName executionLocation - else - workingDir - - lock gate (fun () -> - File.WriteAllLines(Path.Combine(workingDir', "StandardOutput.txt"), outputList) - File.WriteAllLines(Path.Combine(workingDir', "StandardError.txt"), errorsList) - ) + File.WriteAllLines(Path.Combine(workingDir, "StandardOutput.txt"), outputList) + File.WriteAllLines(Path.Combine(workingDir, "StandardError.txt"), errorsList) #endif p.ExitCode, outputList.ToArray(), errorsList.ToArray() | None -> -1, Array.empty, Array.empty @@ -81,7 +68,7 @@ module Commands = rooted |> Path.GetFullPath let fileExists workDir path = - if path |> getfullpath workDir |> FileSystem.FileExistsShim then Some path else None + if path |> getfullpath workDir |> File.Exists then Some path else None let directoryExists workDir path = if path |> getfullpath workDir |> Directory.Exists then Some path else None @@ -97,7 +84,7 @@ module Commands = let rm dir path = let p = path |> getfullpath dir - if FileSystem.FileExistsShim(p) then + if File.Exists(p) then (log "rm %s" p) |> ignore File.Delete(p) else @@ -207,8 +194,6 @@ type TestConfig = PEVERIFY : string Directory: string DotNetExe: string - DotNetMultiLevelLookup: string - DotNetRoot: string DefaultPlatform: string} #if NETCOREAPP @@ -271,9 +256,9 @@ let config configurationName envVars = let fsiArchitecture = "net472" let peverifyArchitecture = "net472" #else - let fscArchitecture = "net5.0" - let fsiArchitecture = "net5.0" - let peverifyArchitecture = "net5.0" + let fscArchitecture = "netcoreapp3.1" + let fsiArchitecture = "netcoreapp3.1" + let peverifyArchitecture = "netcoreapp3.1" #endif let repoRoot = SCRIPT_ROOT ++ ".." ++ ".." let artifactsPath = repoRoot ++ "artifacts" @@ -305,22 +290,16 @@ let config configurationName envVars = // first look for {repoRoot}\.dotnet\dotnet.exe, otherwise fallback to %PATH% let DOTNET_EXE = if operatingSystem = "win" then "dotnet.exe" else "dotnet" let repoLocalDotnetPath = repoRoot ++ ".dotnet" ++ DOTNET_EXE - if FileSystem.FileExistsShim(repoLocalDotnetPath) then repoLocalDotnetPath + if File.Exists(repoLocalDotnetPath) then repoLocalDotnetPath else DOTNET_EXE -#if !NETCOREAPP let FSI_PATH = ("fsi" ++ configurationName ++ fsiArchitecture ++ "fsi.exe") -#else - let FSI_PATH = ("fsi" ++ configurationName ++ fsiArchitecture ++ "fsi.dll") -#endif let FSI_FOR_SCRIPTS = requireArtifact FSI_PATH let FSI = requireArtifact FSI_PATH #if !NETCOREAPP let FSIANYCPU = requireArtifact ("fsiAnyCpu" ++ configurationName ++ "net472" ++ "fsiAnyCpu.exe") - let FSC = requireArtifact ("fsc" ++ configurationName ++ fscArchitecture ++ "fsc.exe") -#else - let FSC = requireArtifact ("fsc" ++ configurationName ++ fscArchitecture ++ "fsc.dll") #endif + let FSC = requireArtifact ("fsc" ++ configurationName ++ fscArchitecture ++ "fsc.exe") let FSCOREDLLPATH = requireArtifact ("FSharp.Core" ++ configurationName ++ fsharpCoreArchitecture ++ "FSharp.Core.dll") let defaultPlatform = @@ -352,34 +331,29 @@ let config configurationName envVars = vbc_flags = vbc_flags Directory="" DotNetExe = dotNetExe - DotNetMultiLevelLookup = System.Environment.GetEnvironmentVariable "DOTNET_MULTILEVEL_LOOKUP" - DotNetRoot = System.Environment.GetEnvironmentVariable "DOTNET_ROOT" DefaultPlatform = defaultPlatform } let logConfig (cfg: TestConfig) = log "---------------------------------------------------------------" log "Executables" log "" - log "CSC = %s" cfg.CSC - log "BUILD_CONFIG = %s" cfg.BUILD_CONFIG - log "csc_flags = %s" cfg.csc_flags - log "FSC = %s" cfg.FSC - log "fsc_flags = %s" cfg.fsc_flags - log "FSCOREDLLPATH = %s" cfg.FSCOREDLLPATH - log "FSI = %s" cfg.FSI -#if NETCOREAPP - log "DotNetExe =%s" cfg.DotNetExe - log "DOTNET_MULTILEVEL_LOOKUP = %s" cfg.DotNetMultiLevelLookup - log "DOTNET_ROOT = %s" cfg.DotNetRoot -#else - log "FSIANYCPU = %s" cfg.FSIANYCPU + log "CSC =%s" cfg.CSC + log "BUILD_CONFIG =%s" cfg.BUILD_CONFIG + log "csc_flags =%s" cfg.csc_flags + log "FSC =%s" cfg.FSC + log "fsc_flags =%s" cfg.fsc_flags + log "FSCOREDLLPATH =%s" cfg.FSCOREDLLPATH + log "FSI =%s" cfg.FSI +#if !NETCOREAPP + log "FSIANYCPU =%s" cfg.FSIANYCPU #endif - log "FSI_FOR_SCRIPTS = %s" cfg.FSI_FOR_SCRIPTS - log "fsi_flags = %s" cfg.fsi_flags - log "ILDASM = %s" cfg.ILDASM - log "PEVERIFY = %s" cfg.PEVERIFY + log "FSI_FOR_SCRIPTS =%s" cfg.FSI_FOR_SCRIPTS + log "fsi_flags =%s" cfg.fsi_flags + log "ILDASM =%s" cfg.ILDASM + log "PEVERIFY =%s" cfg.PEVERIFY log "---------------------------------------------------------------" + let checkResult result = match result with | CmdResult.ErrorLevel (msg1, err) -> Assert.Fail (sprintf "%s. ERRORLEVEL %d" msg1 err) @@ -432,22 +406,27 @@ type public InitializeSuiteAttribute () = override x.Targets = ActionTargets.Test ||| ActionTargets.Suite -let testConfig (testDir: string) = + +[] +[] +() + +let fsharpSuiteDirectory = __SOURCE_DIRECTORY__ + +let testConfig testDir = let cfg = suiteHelpers.Value - if not (Path.IsPathRooted testDir) then - failwith $"path is not rooted: {testDir}" - let testDir = Path.GetFullPath testDir // mostly used to normalize / and \ - log "------------------ %s ---------------" testDir - log "cd %s" testDir - { cfg with Directory = testDir } + let dir = Path.GetFullPath(fsharpSuiteDirectory ++ testDir) + log "------------------ %s ---------------" dir + log "cd %s" dir + { cfg with Directory = dir} [] type FileGuard(path: string) = - let remove path = if FileSystem.FileExistsShim(path) then Commands.rm (Path.GetTempPath()) path + let remove path = if File.Exists(path) then Commands.rm (Path.GetTempPath()) path do if not (Path.IsPathRooted(path)) then failwithf "path '%s' must be absolute" path do remove path member x.Path = path - member x.Exists = x.Path |> FileSystem.FileExistsShim + member x.Exists = x.Path |> File.Exists member x.CheckExists() = if not x.Exists then failwith (sprintf "exit code 0 but %s file doesn't exists" (x.Path |> Path.GetFileName)) @@ -605,10 +584,10 @@ let diff normalize path1 path2 = let append s = result.AppendLine s |> ignore let cwd = Directory.GetCurrentDirectory() - if not <| FileSystem.FileExistsShim(path1) then + if not <| File.Exists(path1) then // creating empty baseline file as this is likely someone initializing a new test File.WriteAllText(path1, String.Empty) - if not <| FileSystem.FileExistsShim(path2) then failwithf "Invalid path %s" path2 + if not <| File.Exists(path2) then failwithf "Invalid path %s" path2 let lines1 = File.ReadAllLines(path1) let lines2 = File.ReadAllLines(path2) diff --git a/tests/FSharp.Test.Utilities/Utilities.fs b/tests/FSharp.Test.Utilities/Utilities.fs index fa02e829b7b..fe192cce0e8 100644 --- a/tests/FSharp.Test.Utilities/Utilities.fs +++ b/tests/FSharp.Test.Utilities/Utilities.fs @@ -10,8 +10,6 @@ open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.CSharp open System.Diagnostics open FSharp.Test.Utilities -open TestFramework -open NUnit.Framework // This file mimics how Roslyn handles their compilation references for compilation testing @@ -21,7 +19,6 @@ module Utilities = type TargetFramework = | NetStandard20 | NetCoreApp31 - | Current let private getResourceStream name = let assembly = typeof.GetTypeInfo().Assembly @@ -78,108 +75,7 @@ module Utilities = let systemConsoleRef = lazy AssemblyMetadata.CreateFromImage(NetCoreApp31Refs.System_Console ()).GetReference(display = "System.Console.dll (netcoreapp 3.1 ref)") [] - module TargetFrameworkUtil = - - let private config = TestFramework.initializeSuite () - - // Do a one time dotnet sdk build to compute the proper set of reference assemblies to pass to the compiler - let private projectFile = """ - - - - Exe - $TARGETFRAMEWORK - true - true - - - - - - - - - - - - - - - - - - - - - - - -""" - - let private directoryBuildProps = """ - - -""" - - let private directoryBuildTargets = """ - - -""" - - let private programFs = """ -open System - -[] -let main argv = 0""" - - let private getNetCoreAppReferences = - let mutable output = "" - let mutable errors = "" - let mutable cleanUp = true - let pathToArtifacts = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "../../../..")) - if Path.GetFileName(pathToArtifacts) <> "artifacts" then failwith "CompilerAssert did not find artifacts directory --- has the location changed????" - let pathToTemp = Path.Combine(pathToArtifacts, "Temp") - let projectDirectory = Path.Combine(pathToTemp, "CompilerAssert", Path.GetRandomFileName()) - let pathToFSharpCore = typeof.Assembly.Location - try - try - Directory.CreateDirectory(projectDirectory) |> ignore - let projectFileName = Path.Combine(projectDirectory, "ProjectFile.fsproj") - let programFsFileName = Path.Combine(projectDirectory, "Program.fs") - let directoryBuildPropsFileName = Path.Combine(projectDirectory, "Directory.Build.props") - let directoryBuildTargetsFileName = Path.Combine(projectDirectory, "Directory.Build.targets") - let frameworkReferencesFileName = Path.Combine(projectDirectory, "FrameworkReferences.txt") -#if NETCOREAPP - File.WriteAllText(projectFileName, projectFile.Replace("$TARGETFRAMEWORK", "net5.0").Replace("$FSHARPCORELOCATION", pathToFSharpCore)) -#else - File.WriteAllText(projectFileName, projectFile.Replace("$TARGETFRAMEWORK", "net472").Replace("$FSHARPCORELOCATION", pathToFSharpCore)) -#endif - File.WriteAllText(programFsFileName, programFs) - File.WriteAllText(directoryBuildPropsFileName, directoryBuildProps) - File.WriteAllText(directoryBuildTargetsFileName, directoryBuildTargets) - - let timeout = 30000 - let exitCode, output, errors = Commands.executeProcess (Some config.DotNetExe) "build" projectDirectory timeout - - if exitCode <> 0 || errors.Length > 0 then - printfn "Output:\n=======\n" - output |> Seq.iter(fun line -> printfn "STDOUT:%s\n" line) - printfn "Errors:\n=======\n" - errors |> Seq.iter(fun line -> printfn "STDERR:%s\n" line) - Assert.True(false, "Errors produced generating References") - - File.ReadLines(frameworkReferencesFileName) |> Seq.toArray - with | e -> - cleanUp <- false - printfn "Project directory: %s" projectDirectory - printfn "STDOUT: %s" output - File.WriteAllText(Path.Combine(projectDirectory, "project.stdout"), output) - printfn "STDERR: %s" errors - File.WriteAllText(Path.Combine(projectDirectory, "project.stderror"), errors) - raise (new Exception (sprintf "An error occurred getting netcoreapp references: %A" e)) - finally - if cleanUp then - try Directory.Delete(projectDirectory, recursive=true) with | _ -> () + module internal TargetFrameworkUtil = open TestReferences @@ -188,21 +84,10 @@ let main argv = 0""" let private netCoreApp31References = lazy ImmutableArray.Create(NetCoreApp31.netStandard.Value, NetCoreApp31.mscorlibRef.Value, NetCoreApp31.systemRuntimeRef.Value, NetCoreApp31.systemCoreRef.Value, NetCoreApp31.systemDynamicRuntimeRef.Value, NetCoreApp31.systemConsoleRef.Value) - let currentReferences = - getNetCoreAppReferences - - let currentReferencesAsPEs = - getNetCoreAppReferences - |> Seq.map (fun x -> - PortableExecutableReference.CreateFromFile(x) - ) - |> ImmutableArray.CreateRange - - let getReferences tf = + let internal getReferences tf = match tf with | TargetFramework.NetStandard20 -> netStandard20References.Value | TargetFramework.NetCoreApp31 -> netCoreApp31References.Value - | TargetFramework.Current -> currentReferencesAsPEs type RoslynLanguageVersion = LanguageVersion @@ -243,7 +128,6 @@ let main argv = 0""" type CSharpLanguageVersion = | CSharp8 = 0 - | CSharp9 = 1 [] type CompilationUtil private () = @@ -252,7 +136,6 @@ let main argv = 0""" let lv = match lv with | CSharpLanguageVersion.CSharp8 -> LanguageVersion.CSharp8 - | CSharpLanguageVersion.CSharp9 -> LanguageVersion.CSharp9 | _ -> LanguageVersion.Default let tf = defaultArg tf TargetFramework.NetStandard20 diff --git a/tests/FSharp.Test.Utilities/Xunit/Attributes/DirectoryAttribute.fs b/tests/FSharp.Test.Utilities/Xunit/Attributes/DirectoryAttribute.fs index 824c9f22a19..4039a3b46ed 100644 --- a/tests/FSharp.Test.Utilities/Xunit/Attributes/DirectoryAttribute.fs +++ b/tests/FSharp.Test.Utilities/Xunit/Attributes/DirectoryAttribute.fs @@ -1,14 +1,18 @@ namespace FSharp.Test.Utilities.Xunit.Attributes open System +open System.Collections.Generic +open System.Diagnostics.CodeAnalysis open System.IO open System.Reflection +open Xunit +open Xunit.Extensions open Xunit.Sdk -open FSharp.Compiler.IO - open FSharp.Test.Utilities +open FSharp.Test.Utilities.Assert open FSharp.Test.Utilities.Compiler +open FSharp.Test.Utilities.Utilities /// Attribute to use with Xunit's TheoryAttribute. /// Takes a directory, relative to current test suite's root. @@ -24,9 +28,9 @@ type DirectoryAttribute(dir: string) = let directory = dir let mutable includes = Array.empty - + let readFileOrDefault (path: string) : string option = - match FileSystem.FileExistsShim(path) with + match File.Exists(path) with | true -> Some <| File.ReadAllText path | _ -> None @@ -50,7 +54,7 @@ type DirectoryAttribute(dir: string) = References = [] } |> FS member x.Includes with get() = includes and set v = includes <- v - + override _.GetData(_: MethodInfo) = let absolutePath = Path.GetFullPath(directory) @@ -61,18 +65,19 @@ type DirectoryAttribute(dir: string) = let filteredFiles = match (includes |> Array.map (fun f -> absolutePath ++ f)) with - | [||] -> allFiles + | [||] -> allFiles | incl -> incl - + let fsFiles = filteredFiles |> Array.map Path.GetFileName if fsFiles |> Array.length < 1 then failwith (sprintf "No required files found in \"%s\".\nAll files: %A.\nIncludes:%A." absolutePath allFiles includes) for f in filteredFiles do - if not <| FileSystem.FileExistsShim(f) then + if not <| File.Exists(f) then failwithf "Requested file \"%s\" not found.\nAll files: %A.\nIncludes:%A." f allFiles includes - + fsFiles |> Array.map (fun fs -> createCompilationUnit absolutePath fs) |> Seq.map (fun c -> [| c |]) + diff --git a/tests/benchmarks/Benchmarks.sln b/tests/benchmarks/Benchmarks.sln new file mode 100644 index 00000000000..b2a35f33b01 --- /dev/null +++ b/tests/benchmarks/Benchmarks.sln @@ -0,0 +1,44 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28407.52 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "CompilerServiceBenchmarks", "CompilerServiceBenchmarks\CompilerServiceBenchmarks.fsproj", "{9A3C565C-B514-4AE0-8B01-CA80E8453EB0}" +EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Service", "..\..\src\fsharp\FSharp.Compiler.Service\FSharp.Compiler.Service.fsproj", "{0BD3108C-8CDC-48E3-8CD3-B50E4F2E72A4}" +EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Core", "..\..\src\fsharp\FSharp.Core\FSharp.Core.fsproj", "{A2E3D114-10EE-4438-9C1D-2E15046607F3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Proto|Any CPU = Proto|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9A3C565C-B514-4AE0-8B01-CA80E8453EB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9A3C565C-B514-4AE0-8B01-CA80E8453EB0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9A3C565C-B514-4AE0-8B01-CA80E8453EB0}.Proto|Any CPU.ActiveCfg = Release|Any CPU + {9A3C565C-B514-4AE0-8B01-CA80E8453EB0}.Proto|Any CPU.Build.0 = Release|Any CPU + {9A3C565C-B514-4AE0-8B01-CA80E8453EB0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9A3C565C-B514-4AE0-8B01-CA80E8453EB0}.Release|Any CPU.Build.0 = Release|Any CPU + {0BD3108C-8CDC-48E3-8CD3-B50E4F2E72A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0BD3108C-8CDC-48E3-8CD3-B50E4F2E72A4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0BD3108C-8CDC-48E3-8CD3-B50E4F2E72A4}.Proto|Any CPU.ActiveCfg = Debug|Any CPU + {0BD3108C-8CDC-48E3-8CD3-B50E4F2E72A4}.Proto|Any CPU.Build.0 = Debug|Any CPU + {0BD3108C-8CDC-48E3-8CD3-B50E4F2E72A4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0BD3108C-8CDC-48E3-8CD3-B50E4F2E72A4}.Release|Any CPU.Build.0 = Release|Any CPU + {A2E3D114-10EE-4438-9C1D-2E15046607F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A2E3D114-10EE-4438-9C1D-2E15046607F3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A2E3D114-10EE-4438-9C1D-2E15046607F3}.Proto|Any CPU.ActiveCfg = Debug|Any CPU + {A2E3D114-10EE-4438-9C1D-2E15046607F3}.Proto|Any CPU.Build.0 = Debug|Any CPU + {A2E3D114-10EE-4438-9C1D-2E15046607F3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A2E3D114-10EE-4438-9C1D-2E15046607F3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {049A4D02-709F-418C-AD59-7FB0DBE956B1} + EndGlobalSection +EndGlobal diff --git a/tests/benchmarks/CompilerServiceBenchmarks/CompilerServiceBenchmarks.fsproj b/tests/benchmarks/CompilerServiceBenchmarks/CompilerServiceBenchmarks.fsproj index 27336d1c50e..5ee4d5f5ad2 100644 --- a/tests/benchmarks/CompilerServiceBenchmarks/CompilerServiceBenchmarks.fsproj +++ b/tests/benchmarks/CompilerServiceBenchmarks/CompilerServiceBenchmarks.fsproj @@ -1,9 +1,19 @@  + + $(MSBuildProjectDirectory)\..\..\src + + Exe - net5.0 + net472 true + true + $(SystemValueTupleVersion) + + + + AnyCPU @@ -14,8 +24,8 @@ - - + + diff --git a/tests/benchmarks/CompilerServiceBenchmarks/Program.fs b/tests/benchmarks/CompilerServiceBenchmarks/Program.fs index 28c42defebf..74ccbe06f5e 100644 --- a/tests/benchmarks/CompilerServiceBenchmarks/Program.fs +++ b/tests/benchmarks/CompilerServiceBenchmarks/Program.fs @@ -2,12 +2,9 @@ open System.IO open System.Text open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.Syntax -open FSharp.Compiler.Symbols -open FSharp.Compiler.EditorServices +open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Text +open FSharp.Compiler.Range open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILBinaryReader @@ -98,13 +95,14 @@ module Helpers = Array.append [|"--optimize+"; "--target:library" |] (referencedProjects |> Array.ofList |> Array.map (fun x -> "-r:" + x.ProjectFileName)) ReferencedProjects = referencedProjects - |> List.map (fun x -> FSharpReferencedProject.CreateFSharp (x.ProjectFileName, x)) + |> List.map (fun x -> (x.ProjectFileName, x)) |> Array.ofList IsIncompleteTypeCheckEnvironment = false UseScriptResolutionRules = false LoadTime = DateTime() UnresolvedReferences = None OriginalLoadReferences = [] + ExtraProjectInfo = None Stamp = Some 0L (* set the stamp to 0L on each run so we don't evaluate the whole project again *) } @@ -139,7 +137,7 @@ type CompilerService() = { SourceFiles = [|"CheckExpressions.fs"|] ConditionalCompilationDefines = [] - ErrorSeverityOptions = FSharpDiagnosticOptions.Default + ErrorSeverityOptions = FSharpErrorSeverityOptions.Default IsInteractive = false LightSyntax = None CompilingFsLib = false @@ -192,7 +190,7 @@ type CompilerService() = | _, None -> failwith "no source" | Some(checker), Some(source) -> let results = checker.ParseFile("CheckExpressions.fs", source.ToFSharpSourceText(), parsingOptions) |> Async.RunSynchronously - if results.ParseHadErrors then failwithf "parse had errors: %A" results.Diagnostics + if results.ParseHadErrors then failwithf "parse had errors: %A" results.Errors [] member __.ParsingTypeCheckerFsSetup() = @@ -274,15 +272,15 @@ type CompilerService() = checker.ParseAndCheckFileInProject(file, 0, SourceText.ofString (File.ReadAllText(file)), options) |> Async.RunSynchronously - if parseResult.Diagnostics.Length > 0 then - failwithf "%A" parseResult.Diagnostics + if parseResult.Errors.Length > 0 then + failwithf "%A" parseResult.Errors match checkResult with | FSharpCheckFileAnswer.Aborted -> failwith "aborted" | FSharpCheckFileAnswer.Succeeded checkFileResult -> - if checkFileResult.Diagnostics.Length > 0 then - failwithf "%A" checkFileResult.Diagnostics + if checkFileResult.Errors.Length > 0 then + failwithf "%A" checkFileResult.Errors [] member this.TypeCheckFileWith100ReferencedProjectsSetup() = @@ -292,13 +290,11 @@ type CompilerService() = ) this.TypeCheckFileWith100ReferencedProjectsOptions.ReferencedProjects - |> Seq.iter (function - | FSharpReferencedProject.FSharpReference(_, referencedProjectOptions) -> - referencedProjectOptions.SourceFiles - |> Seq.iter (fun file -> - File.WriteAllText(file, generateSourceCode (Path.GetFileNameWithoutExtension(file))) - ) - | _ -> () + |> Seq.iter (fun (_, referencedProjectOptions) -> + referencedProjectOptions.SourceFiles + |> Seq.iter (fun file -> + File.WriteAllText(file, generateSourceCode (Path.GetFileNameWithoutExtension(file))) + ) ) this.TypeCheckFileWith100ReferencedProjectsRun() @@ -319,13 +315,11 @@ type CompilerService() = ) this.TypeCheckFileWith100ReferencedProjectsOptions.ReferencedProjects - |> Seq.iter (function - | FSharpReferencedProject.FSharpReference(_, referencedProjectOptions) -> - referencedProjectOptions.SourceFiles - |> Seq.iter (fun file -> - try File.Delete(file) with | _ -> () - ) - | _ -> () + |> Seq.iter (fun (_, referencedProjectOptions) -> + referencedProjectOptions.SourceFiles + |> Seq.iter (fun file -> + try File.Delete(file) with | _ -> () + ) ) match checkerOpt with diff --git a/tests/benchmarks/MicroPerf/Benchmarks.fs b/tests/benchmarks/MicroPerf/Benchmarks.fs deleted file mode 100644 index cb264e065e3..00000000000 --- a/tests/benchmarks/MicroPerf/Benchmarks.fs +++ /dev/null @@ -1,49 +0,0 @@ -(* -msbuild tests\fsharp\perf\tasks\FS\TaskPerf.fsproj /p:Configuration=Release -dotnet artifacts\bin\TaskPerf\Release\netcoreapp2.1\TaskPerf.dll -*) - -namespace TaskPerf - -//open FSharp.Control.Tasks -open BenchmarkDotNet.Attributes -open BenchmarkDotNet.Running -open BenchmarkDotNet.Configs -open BenchmarkDotNet.Diagnosers -open System.Runtime.CompilerServices - -module Code = - [] - let condition_2 x = - if (x = 1 || x = 2) then 1 - elif(x = 3 || x = 4) then 2 - - else 8 - -[] -[] -type Benchmarks() = - - [] - [] - [] - [] - [] - member _.CSharp(x: int) = - MicroPerfCSharp.Cond(x) - - [] - [] - [] - [] - [] - member _.FSharp(x: int) = - Code.condition_2(x) - -module Main = - - [] - let main argv = - printfn "Running benchmarks..." - let results = BenchmarkRunner.Run() - 0 diff --git a/tests/benchmarks/MicroPerf/CS/MicroPerfCSharp.cs b/tests/benchmarks/MicroPerf/CS/MicroPerfCSharp.cs deleted file mode 100644 index 409ed07ac55..00000000000 --- a/tests/benchmarks/MicroPerf/CS/MicroPerfCSharp.cs +++ /dev/null @@ -1,17 +0,0 @@ - -using System.Runtime.CompilerServices; - -public class MicroPerfCSharp -{ - // - // FSharp will not inline the code so we shouldn't eiter. - // - [MethodImpl(MethodImplOptions.NoInlining)] - public static int Cond(int x) - { - if (x == 1 || x == 2) return 1; - else if (x == 3 || x == 4) return 2; - - else return 8; - } -} \ No newline at end of file diff --git a/tests/benchmarks/MicroPerf/CS/MicroPerfCSharp.csproj b/tests/benchmarks/MicroPerf/CS/MicroPerfCSharp.csproj deleted file mode 100644 index 32ae4d1b867..00000000000 --- a/tests/benchmarks/MicroPerf/CS/MicroPerfCSharp.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - - net5.0 - Library - 8.0 - - - - - - - \ No newline at end of file diff --git a/tests/benchmarks/MicroPerf/MicroPerf.fsproj b/tests/benchmarks/MicroPerf/MicroPerf.fsproj deleted file mode 100644 index 6e9e411e438..00000000000 --- a/tests/benchmarks/MicroPerf/MicroPerf.fsproj +++ /dev/null @@ -1,31 +0,0 @@ - - - - net5.0 - Exe - true - - $(OtherFlags) --nowarn:1204 - - $(OtherFlags) --nowarn:57 - $(OtherFlags) --langversion:preview - $(OtherFlags) --define:PREVIEW - - - - - - - - - - - - - - - diff --git a/tests/fsharp/Compiler/CodeGen/EmittedIL/BooleanLogic.fs b/tests/fsharp/Compiler/CodeGen/EmittedIL/BooleanLogic.fs deleted file mode 100644 index 7268da013ee..00000000000 --- a/tests/fsharp/Compiler/CodeGen/EmittedIL/BooleanLogic.fs +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.UnitTests.CodeGen.EmittedIL - -open FSharp.Test.Utilities -open NUnit.Framework - -[] -module ``BooleanLogic`` = - - [] - let ``BooleanOrs``() = - CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize+"|] - """ -module BooleanOrs -let compute (x: int) = - if (x = 1 || x = 2) then 2 - elif (x = 3 || x = 4) then 3 - else 4 - """ - (fun verifier -> verifier.VerifyIL [ - """ -.method public static int32 compute(int32 x) cil managed -{ - - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldc.i4.1 - IL_0002: beq.s IL_0008 - - IL_0004: ldarg.0 - IL_0005: ldc.i4.2 - IL_0006: bne.un.s IL_000a - - IL_0008: ldc.i4.2 - IL_0009: ret - - IL_000a: ldarg.0 - IL_000b: ldc.i4.3 - IL_000c: beq.s IL_0012 - - IL_000e: ldarg.0 - IL_000f: ldc.i4.4 - IL_0010: bne.un.s IL_0014 - - IL_0012: ldc.i4.3 - IL_0013: ret - - IL_0014: ldc.i4.4 - IL_0015: ret -} - - """ - ]) - diff --git a/tests/fsharp/Compiler/CodeGen/EmittedIL/ComputedListExpressions.fs b/tests/fsharp/Compiler/CodeGen/EmittedIL/ComputedListExpressions.fs deleted file mode 100644 index 4938f7b2a7e..00000000000 --- a/tests/fsharp/Compiler/CodeGen/EmittedIL/ComputedListExpressions.fs +++ /dev/null @@ -1,407 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.UnitTests.CodeGen.EmittedIL - -open FSharp.Test.Utilities -open NUnit.Framework - -[] -module ``ComputedListExpressions`` = - - [] - let ``ComputedListExpression01``() = - CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"|] - """ -module ComputedListExpression01 -let ListExpressionSteppingTest1 () = [ yield 1 ] - """ - (fun verifier -> verifier.VerifyIL [ - """ -.method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - ListExpressionSteppingTest1() cil managed -{ - - .maxstack 4 - .locals init (valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0) - IL_0000: ldloca.s V_0 - IL_0002: ldc.i4.1 - IL_0003: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) - IL_0008: nop - IL_0009: ldloca.s V_0 - IL_000b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() - IL_0010: ret -} - """ - ]) - - [] - let ``ComputedListExpression02``() = - CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"|] - """ -module ComputedListExpression02 -let ListExpressionSteppingTest2 () = - [ printfn "hello" - yield 1 - printfn "goodbye" - yield 2] - """ - (fun verifier -> verifier.VerifyIL [ - """ - .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - ListExpressionSteppingTest2() cil managed - { - - .maxstack 4 - .locals init (valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0) - IL_0000: ldstr "hello" - IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_000f: pop - IL_0010: ldloca.s V_0 - IL_0012: ldc.i4.1 - IL_0013: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) - IL_0018: nop - IL_0019: ldstr "goodbye" - IL_001e: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0023: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0028: pop - IL_0029: ldloca.s V_0 - IL_002b: ldc.i4.2 - IL_002c: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) - IL_0031: nop - IL_0032: ldloca.s V_0 - IL_0034: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() - IL_0039: ret - } - """ - ]) - - [] - let ``ComputedListExpression03``() = - CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"|] - """ -module ComputedListExpression03 -let ListExpressionSteppingTest3 () = - let x = ref 0 - [ while !x < 4 do - incr x - printfn "hello" - yield x ] - """ - (fun verifier -> verifier.VerifyIL [ - """ -.method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1> - ListExpressionSteppingTest3() cil managed -{ - - .maxstack 4 - .locals init (class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 V_0, - valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1> V_1) - IL_0000: ldc.i4.0 - IL_0001: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0006: stloc.0 - IL_0007: nop - IL_0008: ldloc.0 - IL_0009: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_000e: ldc.i4.4 - IL_000f: bge.s IL_0034 - - IL_0011: ldloc.0 - IL_0012: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0017: nop - IL_0018: ldstr "hello" - IL_001d: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0022: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0027: pop - IL_0028: ldloca.s V_1 - IL_002a: ldloc.0 - IL_002b: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1>::Add(!0) - IL_0030: nop - IL_0031: nop - IL_0032: br.s IL_0007 - - IL_0034: ldloca.s V_1 - IL_0036: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1>::Close() - IL_003b: ret -} - """ - ]) - - [] - let ``ComputedListExpression04``() = - CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"|] - """ -module ComputedListExpression04 -let ListExpressionSteppingTest4 () = - [ let x = ref 0 - try - let y = ref 0 - incr y - yield !x - let z = !x + !y - yield z - finally - incr x - printfn "done" ] - """ - (fun verifier -> verifier.VerifyIL [ - """ -.method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - ListExpressionSteppingTest4() cil managed -{ - - .maxstack 4 - .locals init (valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 V_1, - class [runtime]System.Collections.Generic.IEnumerable`1 V_2, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 V_3, - int32 V_4) - IL_0000: ldc.i4.0 - IL_0001: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0006: stloc.1 - .try - { - IL_0007: nop - IL_0008: ldc.i4.0 - IL_0009: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_000e: stloc.3 - IL_000f: ldloc.3 - IL_0010: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0015: nop - IL_0016: ldloca.s V_0 - IL_0018: ldloc.1 - IL_0019: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_001e: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) - IL_0023: nop - IL_0024: ldloc.1 - IL_0025: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_002a: ldloc.3 - IL_002b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0030: add - IL_0031: stloc.s V_4 - IL_0033: ldloca.s V_0 - IL_0035: ldloc.s V_4 - IL_0037: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) - IL_003c: nop - IL_003d: ldnull - IL_003e: stloc.2 - IL_003f: leave.s IL_005a - - } - finally - { - IL_0041: nop - IL_0042: ldloc.1 - IL_0043: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0048: nop - IL_0049: ldstr "done" - IL_004e: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0053: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0058: pop - IL_0059: endfinally - } - IL_005a: ldloc.2 - IL_005b: pop - IL_005c: ldloca.s V_0 - IL_005e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() - IL_0063: ret -} - """ - ]) - - [] - let ``ComputedListExpression05``() = - CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"|] - """ -module ComputedListExpression05 -let ListExpressionSteppingTest5 () = - [ for x in 1..4 do - printfn "hello" - yield x ] - """ - (fun verifier -> verifier.VerifyIL [ - """ - .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - ListExpressionSteppingTest5() cil managed - { - - .maxstack 5 - .locals init (valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0, - class [runtime]System.Collections.Generic.IEnumerator`1 V_1, - class [runtime]System.Collections.Generic.IEnumerable`1 V_2, - int32 V_3, - class [runtime]System.IDisposable V_4) - IL_0000: ldc.i4.1 - IL_0001: ldc.i4.1 - IL_0002: ldc.i4.4 - IL_0003: call class [runtime]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, - int32, - int32) - IL_0008: callvirt instance class [runtime]System.Collections.Generic.IEnumerator`1 class [runtime]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_000d: stloc.1 - .try - { - IL_000e: ldloc.1 - IL_000f: callvirt instance bool [runtime]System.Collections.IEnumerator::MoveNext() - IL_0014: brfalse.s IL_0039 - - IL_0016: ldloc.1 - IL_0017: callvirt instance !0 class [runtime]System.Collections.Generic.IEnumerator`1::get_Current() - IL_001c: stloc.3 - IL_001d: ldstr "hello" - IL_0022: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0027: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_002c: pop - IL_002d: ldloca.s V_0 - IL_002f: ldloc.3 - IL_0030: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) - IL_0035: nop - IL_0036: nop - IL_0037: br.s IL_000e - - IL_0039: ldnull - IL_003a: stloc.2 - IL_003b: leave.s IL_0056 - - } - finally - { - IL_003d: ldloc.1 - IL_003e: isinst [runtime]System.IDisposable - IL_0043: stloc.s V_4 - IL_0045: ldloc.s V_4 - IL_0047: brfalse.s IL_0053 - - IL_0049: ldloc.s V_4 - IL_004b: callvirt instance void [runtime]System.IDisposable::Dispose() - IL_0050: ldnull - IL_0051: pop - IL_0052: endfinally - IL_0053: ldnull - IL_0054: pop - IL_0055: endfinally - } - IL_0056: ldloc.2 - IL_0057: pop - IL_0058: ldloca.s V_0 - IL_005a: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() - IL_005f: ret - } - """ - ]) - - [] - let ``ComputedListExpression06``() = - CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"|] - """ -module ComputedListExpression06 -let ListExpressionSteppingTest6 () = - [ for x in 1..4 do - match x with - | 1 -> - printfn "hello" - yield x - | 2 -> - printfn "hello" - yield x - | _ -> - yield x - ] - """ - (fun verifier -> verifier.VerifyIL [ - """ -.method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - ListExpressionSteppingTest6() cil managed - { - - .maxstack 5 - .locals init (valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0, - class [runtime]System.Collections.Generic.IEnumerator`1 V_1, - class [runtime]System.Collections.Generic.IEnumerable`1 V_2, - int32 V_3, - class [runtime]System.IDisposable V_4) - IL_0000: ldc.i4.1 - IL_0001: ldc.i4.1 - IL_0002: ldc.i4.4 - IL_0003: call class [runtime]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, - int32, - int32) - IL_0008: callvirt instance class [runtime]System.Collections.Generic.IEnumerator`1 class [runtime]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_000d: stloc.1 - .try - { - IL_000e: ldloc.1 - IL_000f: callvirt instance bool [runtime]System.Collections.IEnumerator::MoveNext() - IL_0014: brfalse.s IL_0073 - - IL_0016: ldloc.1 - IL_0017: callvirt instance !0 class [runtime]System.Collections.Generic.IEnumerator`1::get_Current() - IL_001c: stloc.3 - IL_001d: ldloc.3 - IL_001e: ldc.i4.1 - IL_001f: sub - IL_0020: switch ( - IL_002f, - IL_004b) - IL_002d: br.s IL_0067 - - IL_002f: ldstr "hello" - IL_0034: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0039: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_003e: pop - IL_003f: ldloca.s V_0 - IL_0041: ldloc.3 - IL_0042: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) - IL_0047: nop - IL_0048: nop - IL_0049: br.s IL_000e - - IL_004b: ldstr "hello" - IL_0050: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0055: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_005a: pop - IL_005b: ldloca.s V_0 - IL_005d: ldloc.3 - IL_005e: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) - IL_0063: nop - IL_0064: nop - IL_0065: br.s IL_000e - - IL_0067: ldloca.s V_0 - IL_0069: ldloc.3 - IL_006a: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) - IL_006f: nop - IL_0070: nop - IL_0071: br.s IL_000e - - IL_0073: ldnull - IL_0074: stloc.2 - IL_0075: leave.s IL_0090 - - } - finally - { - IL_0077: ldloc.1 - IL_0078: isinst [runtime]System.IDisposable - IL_007d: stloc.s V_4 - IL_007f: ldloc.s V_4 - IL_0081: brfalse.s IL_008d - - IL_0083: ldloc.s V_4 - IL_0085: callvirt instance void [runtime]System.IDisposable::Dispose() - IL_008a: ldnull - IL_008b: pop - IL_008c: endfinally - IL_008d: ldnull - IL_008e: pop - IL_008f: endfinally - } - IL_0090: ldloc.2 - IL_0091: pop - IL_0092: ldloca.s V_0 - IL_0094: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() - IL_0099: ret - } - - """ - ]) diff --git a/tests/fsharp/Compiler/CodeGen/EmittedIL/Mutation.fs b/tests/fsharp/Compiler/CodeGen/EmittedIL/Mutation.fs index 0a2bac6b626..a13eb1e75a6 100644 --- a/tests/fsharp/Compiler/CodeGen/EmittedIL/Mutation.fs +++ b/tests/fsharp/Compiler/CodeGen/EmittedIL/Mutation.fs @@ -284,20 +284,24 @@ type StaticC() = { .maxstack 8 - IL_0000: volatile. - IL_0002: ldsfld int32 Mutation05/StaticC::init@10 - IL_0007: ldc.i4.1 - IL_0008: bge.s IL_0013 - - IL_000a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() - IL_000f: nop - IL_0010: nop - IL_0011: br.s IL_0014 - - IL_0013: nop - IL_0014: volatile. - IL_0016: ldsfld int32 Mutation05/StaticC::x - IL_001b: ret + IL_0000: volatile. + IL_0002: ldsfld int32 Mutation05/StaticC::init@10 + IL_0007: ldc.i4.1 + IL_0008: bge.s IL_000c + + IL_000a: br.s IL_000e + + IL_000c: br.s IL_0017 + + IL_000e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() + IL_0013: nop + IL_0014: nop + IL_0015: br.s IL_0018 + + IL_0017: nop + IL_0018: volatile. + IL_001a: ldsfld int32 Mutation05/StaticC::x + IL_001f: ret } .method public specialname static void @@ -305,21 +309,25 @@ type StaticC() = { .maxstack 8 - IL_0000: volatile. - IL_0002: ldsfld int32 Mutation05/StaticC::init@10 - IL_0007: ldc.i4.1 - IL_0008: bge.s IL_0013 - - IL_000a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() - IL_000f: nop - IL_0010: nop - IL_0011: br.s IL_0014 - - IL_0013: nop - IL_0014: ldarg.0 - IL_0015: volatile. - IL_0017: stsfld int32 Mutation05/StaticC::x - IL_001c: ret + IL_0000: volatile. + IL_0002: ldsfld int32 Mutation05/StaticC::init@10 + IL_0007: ldc.i4.1 + IL_0008: bge.s IL_000c + + IL_000a: br.s IL_000e + + IL_000c: br.s IL_0017 + + IL_000e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() + IL_0013: nop + IL_0014: nop + IL_0015: br.s IL_0018 + + IL_0017: nop + IL_0018: ldarg.0 + IL_0019: volatile. + IL_001b: stsfld int32 Mutation05/StaticC::x + IL_0020: ret } .method private specialname rtspecialname static diff --git a/tests/fsharp/Compiler/Conformance/BasicGrammarElements/BasicConstants.fs b/tests/fsharp/Compiler/Conformance/BasicGrammarElements/BasicConstants.fs index 5d7a454dcc0..68dda297ece 100644 --- a/tests/fsharp/Compiler/Conformance/BasicGrammarElements/BasicConstants.fs +++ b/tests/fsharp/Compiler/Conformance/BasicGrammarElements/BasicConstants.fs @@ -4,7 +4,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices [] module ``Basic Grammar Element Constants`` = diff --git a/tests/fsharp/Compiler/Conformance/DataExpressions/ComputationExpressions.fs b/tests/fsharp/Compiler/Conformance/DataExpressions/ComputationExpressions.fs index 60b21122a4c..5b2c6159b09 100644 --- a/tests/fsharp/Compiler/Conformance/DataExpressions/ComputationExpressions.fs +++ b/tests/fsharp/Compiler/Conformance/DataExpressions/ComputationExpressions.fs @@ -4,7 +4,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices [] module ``ComputationExpressions`` = @@ -281,7 +281,7 @@ let ceResult : Trace = return if y then x else -1 } """ - [| FSharpDiagnosticSeverity.Error, 3344, (6, 9, 8, 35), "This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature." |] + [| FSharpErrorSeverity.Error, 3344, (6, 9, 8, 35), "This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature." |] [] let ``AndBang TraceMultiBindingMonoid`` () = @@ -582,7 +582,7 @@ let _ = return x + y } """ - [|(FSharpDiagnosticSeverity.Error, 3343, (6, 9, 6, 25), "The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a 'Bind2' method or appropriate 'MergeSource' and 'Bind' methods")|] + [|(FSharpErrorSeverity.Error, 3343, (6, 9, 6, 25), "The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a 'Bind2' method or appropriate 'MergeSource' and 'Bind' methods")|] [] let ``AndBang Negative TraceApplicative missing Bind and BindReturn`` () = @@ -596,7 +596,7 @@ let _ = return x + y } """ - [|(FSharpDiagnosticSeverity.Error, 708, (6, 9, 6, 25), "This control construct may only be used if the computation expression builder defines a 'Bind' method")|] + [|(FSharpErrorSeverity.Error, 708, (6, 9, 6, 25), "This control construct may only be used if the computation expression builder defines a 'Bind' method")|] [] @@ -612,7 +612,7 @@ let _ = return x + y } """ - [| FSharpDiagnosticSeverity.Error, 708, (7, 9, 7, 25), "This control construct may only be used if the computation expression builder defines a 'Bind' method" |] + [| FSharpErrorSeverity.Error, 708, (7, 9, 7, 25), "This control construct may only be used if the computation expression builder defines a 'Bind' method" |] [] let ``AndBang TraceApplicative with do-bang`` () = @@ -627,9 +627,9 @@ let _ = return x + y } """ - [|(FSharpDiagnosticSeverity.Error, 10, (7, 9, 7, 13),"Unexpected keyword 'and!' in expression. Expected '}' or other token."); - (FSharpDiagnosticSeverity.Error, 604, (5, 12, 5, 13), "Unmatched '{'"); - (FSharpDiagnosticSeverity.Error, 10, (8, 9, 8, 13), "Unexpected keyword 'and!' in implementation file")|] + [|(FSharpErrorSeverity.Error, 10, (7, 9, 7, 13),"Unexpected keyword 'and!' in expression. Expected '}' or other token."); + (FSharpErrorSeverity.Error, 604, (5, 12, 5, 13), "Unmatched '{'"); + (FSharpErrorSeverity.Error, 10, (8, 9, 8, 13), "Unexpected keyword 'and!' in implementation file")|] [] let ``AndBang Negative TraceApplicative let betweeen let! and and!`` () = @@ -644,7 +644,7 @@ let _ = return x + y } """ - [| (FSharpDiagnosticSeverity.Error, 10, (8, 9, 8, 13), "Unexpected keyword 'and!' in expression") |] + [| (FSharpErrorSeverity.Error, 10, (8, 9, 8, 13), "Unexpected keyword 'and!' in expression") |] [] @@ -658,7 +658,7 @@ let _ = and! y = Trace 2 } """ - [|(FSharpDiagnosticSeverity.Error, 10, (8, 5, 8, 6), "Unexpected symbol '}' in expression")|] + [|(FSharpErrorSeverity.Error, 10, (8, 5, 8, 6), "Unexpected symbol '}' in expression")|] [] let ``AndBang TraceApplicative conditional return`` () = diff --git a/tests/fsharp/Compiler/Language/AnonRecordTests.fs b/tests/fsharp/Compiler/Language/AnonRecordTests.fs index 7773afcb45d..05276a13c34 100644 --- a/tests/fsharp/Compiler/Language/AnonRecordTests.fs +++ b/tests/fsharp/Compiler/Language/AnonRecordTests.fs @@ -4,7 +4,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices [] module AnonRecordsTests = @@ -32,7 +32,7 @@ let sAnon = StructClass() type RefClass<'a when 'a : not struct>() = class end let rAnon = RefClass() """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 1 (3, 13, 3, 42) "A generic construct requires that the type 'struct {| R: int |}' have reference semantics, but it does not, i.e. it is a struct" @@ -44,7 +44,7 @@ let rAnon = RefClass() type StructClass<'a when 'a : struct>() = class end let sAnon = StructClass<{| S: int |}>() """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 1 (3, 13, 3, 38) "A generic construct requires that the type '{| S: int |}' is a CLI or F# struct type" diff --git a/tests/fsharp/Compiler/Language/ByrefTests.fs b/tests/fsharp/Compiler/Language/ByrefTests.fs index ef9fc80aedb..cd2dd148a5b 100644 --- a/tests/fsharp/Compiler/Language/ByrefTests.fs +++ b/tests/fsharp/Compiler/Language/ByrefTests.fs @@ -5,7 +5,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities open FSharp.Test.Utilities.Utilities -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices open FSharp.Test.Utilities open FSharp.Test.Utilities.Compiler open FSharp.Tests @@ -87,31 +87,31 @@ let f5 () = """ [| ( - FSharpDiagnosticSeverity.Error, + FSharpErrorSeverity.Error, 3228, (12, 6, 12, 25), "The address of a value returned from the expression cannot be used at this point. This is to ensure the address of the local value does not escape its scope." ) ( - FSharpDiagnosticSeverity.Error, + FSharpErrorSeverity.Error, 3228, (17, 10, 17, 19), "The address of a value returned from the expression cannot be used at this point. This is to ensure the address of the local value does not escape its scope." ) ( - FSharpDiagnosticSeverity.Error, + FSharpErrorSeverity.Error, 3228, (21, 5, 21, 50), "The address of a value returned from the expression cannot be used at this point. This is to ensure the address of the local value does not escape its scope." ) ( - FSharpDiagnosticSeverity.Error, + FSharpErrorSeverity.Error, 3228, (25, 6, 25, 26), "The address of a value returned from the expression cannot be used at this point. This is to ensure the address of the local value does not escape its scope." ) ( - FSharpDiagnosticSeverity.Error, + FSharpErrorSeverity.Error, 3228, (28, 6, 28, 51), "The address of a value returned from the expression cannot be used at this point. This is to ensure the address of the local value does not escape its scope." @@ -176,25 +176,25 @@ let test1 () = """ [| ( - FSharpDiagnosticSeverity.Warning, + FSharpErrorSeverity.Warning, 52, (3, 30, 3, 45), "The value has been copied to ensure the original is not mutated by this operation or because the copy is implicit when returning a struct from a member and another member is then accessed" ) ( - FSharpDiagnosticSeverity.Warning, + FSharpErrorSeverity.Warning, 52, (7, 5, 7, 20), "The value has been copied to ensure the original is not mutated by this operation or because the copy is implicit when returning a struct from a member and another member is then accessed" ) ( - FSharpDiagnosticSeverity.Warning, + FSharpErrorSeverity.Warning, 52, (10, 5, 10, 26), "The value has been copied to ensure the original is not mutated by this operation or because the copy is implicit when returning a struct from a member and another member is then accessed" ) ( - FSharpDiagnosticSeverity.Warning, + FSharpErrorSeverity.Warning, 52, (20, 5, 20, 29), "The value has been copied to ensure the original is not mutated by this operation or because the copy is implicit when returning a struct from a member and another member is then accessed" @@ -265,7 +265,7 @@ let test () = let y = &&x () """ [| - (FSharpDiagnosticSeverity.Error, 256, (6, 13, 6, 16), "A value must be mutable in order to mutate the contents or take the address of a value type, e.g. 'let mutable x = ...'") + (FSharpErrorSeverity.Error, 256, (6, 13, 6, 16), "A value must be mutable in order to mutate the contents or take the address of a value type, e.g. 'let mutable x = ...'") |] [] diff --git a/tests/fsharp/Compiler/Language/CompilerDirectiveTests.fs b/tests/fsharp/Compiler/Language/CompilerDirectiveTests.fs index 94df44607ef..f0c50060e60 100644 --- a/tests/fsharp/Compiler/Language/CompilerDirectiveTests.fs +++ b/tests/fsharp/Compiler/Language/CompilerDirectiveTests.fs @@ -4,7 +4,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices [] module ``Test Compiler Directives`` = @@ -17,7 +17,7 @@ module ``Test Compiler Directives`` = CompilerAssert.CompileWithErrors( Compilation.Create(source, Fsx, Library), [| - FSharpDiagnosticSeverity.Warning, 213, (2,1,2,6), "'' is not a valid assembly name" + FSharpErrorSeverity.Warning, 213, (2,1,2,6), "'' is not a valid assembly name" |]) [] @@ -28,5 +28,5 @@ module ``Test Compiler Directives`` = CompilerAssert.CompileWithErrors( Compilation.Create(source, Fsx, Library), [| - FSharpDiagnosticSeverity.Warning, 213, (2,1,2,10), "'' is not a valid assembly name" + FSharpErrorSeverity.Warning, 213, (2,1,2,10), "'' is not a valid assembly name" |]) diff --git a/tests/fsharp/Compiler/Language/ComputationExpressionTests.fs b/tests/fsharp/Compiler/Language/ComputationExpressionTests.fs index b8961030ac0..c75052380f3 100644 --- a/tests/fsharp/Compiler/Language/ComputationExpressionTests.fs +++ b/tests/fsharp/Compiler/Language/ComputationExpressionTests.fs @@ -2,7 +2,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices [] module ComputationExpressionTests = @@ -11,12 +11,12 @@ module ComputationExpressionTests = sprintf """ module Code type ResultBuilder() = - member _.Return value = Ok value - member _.ReturnFrom (result: Result<_,_>) = result + member __.Return value = Ok value + member __.ReturnFrom (result: Result<_,_>) = result member x.Zero() = x.Return () - member _.Bind(r: Result<'t,_>, binder: 't -> Result<_,_>) = match r with | Ok r' -> binder r' | Error e -> e - member _.Delay(gen: unit -> Result<_,_>) = gen - member _.Run(gen: unit -> Result<_,_>) = gen() + member __.Bind(r: Result<'t,_>, binder: 't -> Result<_,_>) = match r with | Ok r' -> binder r' | Error e -> e + member __.Delay(gen: unit -> Result<_,_>) = gen + member __.Run(gen: unit -> Result<_,_>) = gen() member _.BindReturn(x: Result<'t,_>, f) = Result.map f x member inline _.Source(result : Result<_,_>) : Result<_,_> = result @@ -59,18 +59,18 @@ module AsyncResult = type AsyncResultBuilder() = - member _.Return (value: 'T) : Async> = + member __.Return (value: 'T) : Async> = async.Return <| result.Return value - member inline _.ReturnFrom + member inline __.ReturnFrom (asyncResult: Async>) : Async> = asyncResult - member _.Zero () : Async> = + member __.Zero () : Async> = async.Return <| result.Zero () - member inline _.Bind + member inline __.Bind (asyncResult: Async>, binder: 'T -> Async>) : Async> = @@ -81,7 +81,7 @@ type AsyncResultBuilder() = | Error x -> return Error x } - member _.Delay + member __.Delay (generator: unit -> Async>) : Async> = async.Delay generator @@ -92,19 +92,19 @@ type AsyncResultBuilder() = : Async> = this.Bind(computation1, fun () -> computation2) - member _.TryWith + member __.TryWith (computation: Async>, handler: System.Exception -> Async>) : Async> = async.TryWith(computation, handler) - member _.TryFinally + member __.TryFinally (computation: Async>, compensation: unit -> unit) : Async> = async.TryFinally(computation, compensation) - member _.Using + member __.Using (resource: 'T when 'T :> System.IDisposable, binder: 'T -> Async>) : Async> = @@ -123,8 +123,8 @@ type AsyncResultBuilder() = this.While(enum.MoveNext, this.Delay(fun () -> binder enum.Current))) - member inline _.BindReturn(x: Async>, f) = async.Bind(x, fun r -> Result.map f r |> async.Return) - member inline _.MergeSources(t1: Async>, t2: Async>) = + member inline __.BindReturn(x: Async>, f) = async.Bind(x, fun r -> Result.map f r |> async.Return) + member inline __.MergeSources(t1: Async>, t2: Async>) = AsyncResult.zip t1 t2 member inline _.Source(result : Async>) : Async> = result @@ -135,7 +135,7 @@ module ARExts = /// /// Needed to allow `for..in` and `for..do` functionality /// - member inline _.Source(s: #seq<_>) = s + member inline __.Source(s: #seq<_>) = s /// /// Method lets us transform data types into our internal representation. @@ -153,7 +153,7 @@ module ARExts = /// /// Method lets us transform data types into our internal representation. /// - member inline _.Source(asyncComputation : Async<_>) : Async> = asyncComputation |> Async.map Ok + member inline __.Source(asyncComputation : Async<_>) : Async> = asyncComputation |> Async.map Ok let asyncResult = AsyncResultBuilder() diff --git a/tests/fsharp/Compiler/Language/CustomCollectionTests.fs b/tests/fsharp/Compiler/Language/CustomCollectionTests.fs index 0f02e397952..fe8b5aa5956 100644 --- a/tests/fsharp/Compiler/Language/CustomCollectionTests.fs +++ b/tests/fsharp/Compiler/Language/CustomCollectionTests.fs @@ -2,7 +2,7 @@ open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices [] module CustomCollectionTests = @@ -14,7 +14,7 @@ open System type foo() = let mutable i = "" member this.GetReverseIndex(_x: int, y: string) = y + " " - member _.Item with get (_x: string) = i and set idx value = i <- idx + value + member __.Item with get (_x: string) = i and set idx value = i <- idx + value let a = foo() a.[^"2"] <- "-1" @@ -63,7 +63,7 @@ open System type foo() = let mutable i = "" member this.GetReverseIndex(x: int, y: string) = x.ToString() + " " + y - member _.Item with get (_x: string) = i and set (idx1, idx2) value = i <- idx1 + " " + idx2 + " " + value + member __.Item with get (_x: string) = i and set (idx1, idx2) value = i <- idx1 + " " + idx2 + " " + value let a = foo() a.[^"1",^"2"] <- "3" @@ -99,7 +99,7 @@ let a = foo() if a.[^2] <> 12 then failwith "expected 12" """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 39 (9,7,9,9) "The type 'foo' does not define the field, constructor or member 'GetReverseIndex'." @@ -139,7 +139,7 @@ let a = foo() if a.[^2..1] <> 13 then failwith "expected 13" """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 39 (12,7,12,9) "The type 'foo' does not define the field, constructor or member 'GetReverseIndex'." diff --git a/tests/fsharp/Compiler/Language/DefaultInterfaceMemberTests.fs b/tests/fsharp/Compiler/Language/DefaultInterfaceMemberTests.fs index ec87bfe38dd..ff0abf3091e 100644 --- a/tests/fsharp/Compiler/Language/DefaultInterfaceMemberTests.fs +++ b/tests/fsharp/Compiler/Language/DefaultInterfaceMemberTests.fs @@ -5,7 +5,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities open FSharp.Test.Utilities.Utilities -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices #if NETCOREAPP @@ -51,8 +51,8 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [ilCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpDiagnosticSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for 'ITest.DefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpErrorSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpErrorSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for 'ITest.DefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -173,8 +173,8 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpDiagnosticSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for those members: + (FSharpErrorSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpErrorSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for those members: \t'ITest.DefaultMethod() : unit' \t'ITest.NonDefaultMethod() : unit' Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") @@ -221,8 +221,8 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpDiagnosticSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for 'ITest.DefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpErrorSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpErrorSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for 'ITest.DefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -263,8 +263,8 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpDiagnosticSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for those members: + (FSharpErrorSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpErrorSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for those members: 'ITest.Method1() : unit' 'ITest.Method2() : unit' Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") @@ -312,8 +312,8 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3350, (9, 15, 9, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpDiagnosticSeverity.Error, 366, (9, 15, 9, 20), "No implementation was given for 'ITest.DefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpErrorSeverity.Error, 3350, (9, 15, 9, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpErrorSeverity.Error, 366, (9, 15, 9, 20), "No implementation was given for 'ITest.DefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -360,7 +360,7 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 855, (11, 19, 11, 32), "No abstract or interface member was found that corresponds to this override") + (FSharpErrorSeverity.Error, 855, (11, 19, 11, 32), "No abstract or interface member was found that corresponds to this override") |]) [] @@ -410,8 +410,8 @@ let f () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3350, (14, 7, 14, 8), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpDiagnosticSeverity.Error, 3350, (14, 9, 14, 10), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpErrorSeverity.Error, 3350, (14, 7, 14, 8), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpErrorSeverity.Error, 3350, (14, 9, 14, 10), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") |]) [] @@ -461,7 +461,7 @@ let f () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3350, (14, 5, 14, 27), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpErrorSeverity.Error, 3350, (14, 5, 14, 27), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") |]) [] @@ -498,7 +498,7 @@ let f () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3350, (8, 5, 8, 22), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpErrorSeverity.Error, 3350, (8, 5, 8, 22), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") |]) [] @@ -535,7 +535,7 @@ let f () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3350, (8, 5, 8, 19), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpErrorSeverity.Error, 3350, (8, 5, 8, 19), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") |]) [] @@ -576,7 +576,7 @@ let f1 () = Compilation.Create(fsharpSource, Fsx, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3350, (9, 5, 9, 15), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpErrorSeverity.Error, 3350, (9, 5, 9, 15), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") |]) [] @@ -626,11 +626,11 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 363, (8, 15, 8, 17), "The interface 'IA' is included in multiple explicitly implemented interface types. Add an explicit implementation of this interface.") - (FSharpDiagnosticSeverity.Error, 3350, (9, 15, 9, 17), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpDiagnosticSeverity.Error, 366, (9, 15, 9, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") - (FSharpDiagnosticSeverity.Error, 3350, (8, 15, 8, 17), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpDiagnosticSeverity.Error, 366, (8, 15, 8, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpErrorSeverity.Error, 363, (8, 15, 8, 17), "The interface 'IA' is included in multiple explicitly implemented interface types. Add an explicit implementation of this interface.") + (FSharpErrorSeverity.Error, 3350, (9, 15, 9, 17), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpErrorSeverity.Error, 366, (9, 15, 9, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpErrorSeverity.Error, 3350, (8, 15, 8, 17), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpErrorSeverity.Error, 366, (8, 15, 8, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -681,8 +681,8 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3350, (10, 15, 10, 17), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpDiagnosticSeverity.Error, 366, (10, 15, 10, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpErrorSeverity.Error, 3350, (10, 15, 10, 17), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpErrorSeverity.Error, 366, (10, 15, 10, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -937,8 +937,8 @@ type Test2 () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3350, (10, 15, 10, 22), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpDiagnosticSeverity.Error, 358, (10, 15, 10, 22), "The override for 'M<'U> : 'U * int -> unit' was ambiguous") + (FSharpErrorSeverity.Error, 3350, (10, 15, 10, 22), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpErrorSeverity.Error, 358, (10, 15, 10, 22), "The override for 'M<'U> : 'U * int -> unit' was ambiguous") |]) #else @@ -985,9 +985,9 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [ilCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3351, (8, 15, 8, 20), "Feature 'default interface member consumption' is not supported by target runtime.") - (FSharpDiagnosticSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpDiagnosticSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for 'ITest.DefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpErrorSeverity.Error, 3351, (8, 15, 8, 20), "Feature 'default interface member consumption' is not supported by target runtime.") + (FSharpErrorSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpErrorSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for 'ITest.DefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -1028,7 +1028,7 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [ilCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3351, (8, 15, 8, 20), "Feature 'default interface member consumption' is not supported by target runtime.") + (FSharpErrorSeverity.Error, 3351, (8, 15, 8, 20), "Feature 'default interface member consumption' is not supported by target runtime.") |]) [] @@ -1078,8 +1078,8 @@ let f () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3351, (14, 5, 14, 27), "Feature 'default interface member consumption' is not supported by target runtime.") - (FSharpDiagnosticSeverity.Error, 3350, (14, 5, 14, 27), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpErrorSeverity.Error, 3351, (14, 5, 14, 27), "Feature 'default interface member consumption' is not supported by target runtime.") + (FSharpErrorSeverity.Error, 3350, (14, 5, 14, 27), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") |]) #endif @@ -1128,7 +1128,7 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for 'ITest.NonDefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpErrorSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for 'ITest.NonDefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -1209,7 +1209,7 @@ type Test () = interface ITest with - member _.NonDefaultMethod () = + member __.NonDefaultMethod () = Console.Write("NonDefaultMethod") [] @@ -1271,7 +1271,7 @@ type Test () = interface ITest with // protected member - member _.M1() = + member __.M1() = Console.Write("Protected") type Test2 () = @@ -1280,7 +1280,7 @@ type Test2 () = interface ITest2 with // protected member - member _.M1() = + member __.M1() = Console.Write("ProtectedOverride") [] @@ -1344,7 +1344,7 @@ open CSharpTest let main _ = let test = { new ITest with - member _.M1() = + member __.M1() = Console.Write("ObjExprProtected") } test.M2 () @@ -1352,7 +1352,7 @@ let main _ = let test2 = { new ITest2 with - member _.M1() = + member __.M1() = Console.Write("ObjExprProtected2") } test2.M2 () 0 @@ -1410,7 +1410,7 @@ type Test () = interface ITest with // protected member - member _.M1() = + member __.M1() = Console.Write("Protected") type Test2 () = @@ -1419,7 +1419,7 @@ type Test2 () = interface ITest2 with // protected member - member _.M1() = + member __.M1() = Console.Write("ProtectedOverride") let f () = @@ -1441,8 +1441,8 @@ let f () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 491, (26, 5, 26, 15), "The member or object constructor 'M1' is not accessible. Private members may only be accessed from within the declaring type. Protected members may only be accessed from an extending type and cannot be accessed from inner lambda expressions.") - (FSharpDiagnosticSeverity.Error, 491, (31, 5, 31, 16), "The member or object constructor 'M1' is not accessible. Private members may only be accessed from within the declaring type. Protected members may only be accessed from an extending type and cannot be accessed from inner lambda expressions.") + (FSharpErrorSeverity.Error, 491, (26, 5, 26, 15), "The member or object constructor 'M1' is not accessible. Private members may only be accessed from within the declaring type. Protected members may only be accessed from an extending type and cannot be accessed from inner lambda expressions.") + (FSharpErrorSeverity.Error, 491, (31, 5, 31, 16), "The member or object constructor 'M1' is not accessible. Private members may only be accessed from within the declaring type. Protected members may only be accessed from an extending type and cannot be accessed from inner lambda expressions.") |]) [] @@ -1494,7 +1494,7 @@ type Test () = (this :> ITest).M1() // protected member - member _.M1() = + member __.M1() = Console.Write("Protected") type Test2 () = @@ -1509,7 +1509,7 @@ type Test2 () = (this :> ITest).M1() // protected member - member _.M1() = + member __.M1() = Console.Write("ProtectedOverride") """ @@ -1521,10 +1521,10 @@ type Test2 () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 629, (10, 9, 10, 27), "Method 'M1' is not accessible from this code location") - (FSharpDiagnosticSeverity.Error, 629, (15, 13, 15, 31), "Method 'M1' is not accessible from this code location") - (FSharpDiagnosticSeverity.Error, 629, (25, 9, 25, 28), "Method 'M1' is not accessible from this code location") - (FSharpDiagnosticSeverity.Error, 629, (30, 13, 30, 31), "Method 'M1' is not accessible from this code location") + (FSharpErrorSeverity.Error, 629, (10, 9, 10, 27), "Method 'M1' is not accessible from this code location") + (FSharpErrorSeverity.Error, 629, (15, 13, 15, 31), "Method 'M1' is not accessible from this code location") + (FSharpErrorSeverity.Error, 629, (25, 9, 25, 28), "Method 'M1' is not accessible from this code location") + (FSharpErrorSeverity.Error, 629, (30, 13, 30, 31), "Method 'M1' is not accessible from this code location") |]) [] @@ -1556,7 +1556,7 @@ type Test () = interface ITest with - member _.NonDefaultMethod () = + member __.NonDefaultMethod () = Console.Write("NonDefaultMethod") [] @@ -1606,7 +1606,7 @@ type Test () = interface ITest with - member _.NonDefaultMethod () = + member __.NonDefaultMethod () = Console.Write("NonDefaultMethod") let f () = @@ -1623,7 +1623,7 @@ let f () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 39, (16, 10, 16, 23), "The type 'ITest' does not define the field, constructor or member 'DefaultMethod'. Maybe you want one of the following: + (FSharpErrorSeverity.Error, 39, (16, 10, 16, 23), "The type 'ITest' does not define the field, constructor or member 'DefaultMethod'. Maybe you want one of the following: NonDefaultMethod") |]) @@ -1673,7 +1673,7 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 855, (11, 19, 11, 32), "No abstract or interface member was found that corresponds to this override") + (FSharpErrorSeverity.Error, 855, (11, 19, 11, 32), "No abstract or interface member was found that corresponds to this override") |]) [] @@ -1708,10 +1708,10 @@ type Test () = interface ITest with - member _.DefaultMethod () = + member __.DefaultMethod () = Console.Write("IVT-") - member _.NonDefaultMethod () = + member __.NonDefaultMethod () = Console.Write("NonDefaultMethod") [] @@ -1797,7 +1797,7 @@ open CSharpTest [] let main _ = - let test = { new ITest with member _.NonDefaultMethod () = Console.Write("ObjExpr") } + let test = { new ITest with member __.NonDefaultMethod () = Console.Write("ObjExpr") } test.DefaultMethod () Console.Write("-") test.NonDefaultMethod(); @@ -1851,7 +1851,7 @@ let test = { new ITest } Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 366, (7, 12, 7, 25), "No implementation was given for 'ITest.NonDefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpErrorSeverity.Error, 366, (7, 12, 7, 25), "No implementation was given for 'ITest.NonDefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -1883,10 +1883,10 @@ type Test () = interface ITest with - member _.DefaultMethod () = + member __.DefaultMethod () = Console.Write("OverrideDefaultMethod") - member _.NonDefaultMethod () = + member __.NonDefaultMethod () = Console.Write("NonDefaultMethod") [] @@ -1936,9 +1936,9 @@ open CSharpTest let main _ = let test = { new ITest with - member _.DefaultMethod () = + member __.DefaultMethod () = Console.Write("ObjExprOverrideDefaultMethod") - member _.NonDefaultMethod () = + member __.NonDefaultMethod () = Console.Write("ObjExprNonDefaultMethod") } test.DefaultMethod () Console.Write("-") @@ -2082,16 +2082,16 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 363, (9, 15, 9, 21), "The interface 'ITest1' is included in multiple explicitly implemented interface types. Add an explicit implementation of this interface.") - (FSharpDiagnosticSeverity.Error, 3352, (10, 15, 10, 21), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") - (FSharpDiagnosticSeverity.Error, 3352, (10, 15, 10, 21), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") - (FSharpDiagnosticSeverity.Error, 366, (10, 15, 10, 21), "No implementation was given for those members: + (FSharpErrorSeverity.Error, 363, (9, 15, 9, 21), "The interface 'ITest1' is included in multiple explicitly implemented interface types. Add an explicit implementation of this interface.") + (FSharpErrorSeverity.Error, 3352, (10, 15, 10, 21), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") + (FSharpErrorSeverity.Error, 3352, (10, 15, 10, 21), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") + (FSharpErrorSeverity.Error, 366, (10, 15, 10, 21), "No implementation was given for those members: 'ITest1.Method1() : unit' 'ITest1.Method2() : unit' Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") - (FSharpDiagnosticSeverity.Error, 3352, (9, 15, 9, 21), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") - (FSharpDiagnosticSeverity.Error, 3352, (9, 15, 9, 21), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") - (FSharpDiagnosticSeverity.Error, 366, (9, 15, 9, 21), "No implementation was given for those members: + (FSharpErrorSeverity.Error, 3352, (9, 15, 9, 21), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") + (FSharpErrorSeverity.Error, 3352, (9, 15, 9, 21), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") + (FSharpErrorSeverity.Error, 366, (9, 15, 9, 21), "No implementation was given for those members: 'ITest1.Method1() : unit' 'ITest1.Method2() : unit' Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") @@ -2165,9 +2165,9 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3352, (9, 15, 9, 21), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") - (FSharpDiagnosticSeverity.Error, 3352, (9, 15, 9, 21), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") - (FSharpDiagnosticSeverity.Error, 366, (9, 15, 9, 21), "No implementation was given for those members: + (FSharpErrorSeverity.Error, 3352, (9, 15, 9, 21), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") + (FSharpErrorSeverity.Error, 3352, (9, 15, 9, 21), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") + (FSharpErrorSeverity.Error, 366, (9, 15, 9, 21), "No implementation was given for those members: 'ITest1.Method1() : unit' 'ITest1.Method2() : unit' Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") @@ -2243,9 +2243,9 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3352, (9, 15, 9, 28), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") - (FSharpDiagnosticSeverity.Error, 3352, (9, 15, 9, 28), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") - (FSharpDiagnosticSeverity.Error, 366, (9, 15, 9, 28), "No implementation was given for those members: + (FSharpErrorSeverity.Error, 3352, (9, 15, 9, 28), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") + (FSharpErrorSeverity.Error, 3352, (9, 15, 9, 28), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") + (FSharpErrorSeverity.Error, 366, (9, 15, 9, 28), "No implementation was given for those members: 'ITest1.Method1() : unit' 'ITest1.Method2() : unit' Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") @@ -2321,9 +2321,9 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") - (FSharpDiagnosticSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") - (FSharpDiagnosticSeverity.Error, 366, (13, 15, 13, 28), "No implementation was given for those members: + (FSharpErrorSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") + (FSharpErrorSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") + (FSharpErrorSeverity.Error, 366, (13, 15, 13, 28), "No implementation was given for those members: 'ITest1.Method1() : unit' 'ITest1.Method2() : unit' Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") @@ -2393,9 +2393,9 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") - (FSharpDiagnosticSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") - (FSharpDiagnosticSeverity.Error, 366, (13, 15, 13, 28), "No implementation was given for those members: + (FSharpErrorSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") + (FSharpErrorSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") + (FSharpErrorSeverity.Error, 366, (13, 15, 13, 28), "No implementation was given for those members: 'ITest1.Method1() : unit' 'ITest1.Method2() : unit' Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") @@ -2459,9 +2459,9 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") - (FSharpDiagnosticSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") - (FSharpDiagnosticSeverity.Error, 366, (13, 15, 13, 28), "No implementation was given for those members: + (FSharpErrorSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") + (FSharpErrorSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") + (FSharpErrorSeverity.Error, 366, (13, 15, 13, 28), "No implementation was given for those members: 'ITest1.Method1() : unit' 'ITest1.Method2() : unit' Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") @@ -2527,9 +2527,9 @@ type Test () = interface ICombinedTest with - member _.Method1 () = Console.Write("FSharpICombinedTest-Method1") + member __.Method1 () = Console.Write("FSharpICombinedTest-Method1") - member _.Method2 () = Console.Write("FSharpICombinedTest-Method2") + member __.Method2 () = Console.Write("FSharpICombinedTest-Method2") [] let main _ = @@ -2597,9 +2597,9 @@ type Test () = interface ICombinedTest with - member _.Method1 () = Console.Write("FSharpICombinedTest-Method1") + member __.Method1 () = Console.Write("FSharpICombinedTest-Method1") - member _.Method2 () = Console.Write("FSharpICombinedTest-Method2") + member __.Method2 () = Console.Write("FSharpICombinedTest-Method2") [] let main _ = @@ -2675,9 +2675,9 @@ type Test () = interface ITest2 interface ITest1 with - member _.Method1 () = Console.Write("FSharpExplicitTest-Method1") + member __.Method1 () = Console.Write("FSharpExplicitTest-Method1") - member _.Method2 () = Console.Write("FSharpExplicitTest-Method2") + member __.Method2 () = Console.Write("FSharpExplicitTest-Method2") interface ITest3 [] @@ -2748,7 +2748,7 @@ type Test () = interface ICombinedTest with - member _.Method2 () = Console.Write("FSharpICombinedTest-Method2") + member __.Method2 () = Console.Write("FSharpICombinedTest-Method2") """ let csCmpl = @@ -2759,8 +2759,8 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3352, (14, 15, 14, 28), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") - (FSharpDiagnosticSeverity.Error, 366, (14, 15, 14, 28), "No implementation was given for 'ITest1.Method1() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpErrorSeverity.Error, 3352, (14, 15, 14, 28), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") + (FSharpErrorSeverity.Error, 366, (14, 15, 14, 28), "No implementation was given for 'ITest1.Method1() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -3063,7 +3063,7 @@ type Test () = interface ICombinedSideTest with - member _.Method2 () = () + member __.Method2 () = () interface IFinalCombinedTest @@ -3263,19 +3263,19 @@ type Test () = interface IBase with - member _.Method () = Console.Write("IBase") + member __.Method () = Console.Write("IBase") interface IA1 with - member _.Method () = Console.Write("IA1") + member __.Method () = Console.Write("IA1") interface IB1 with - member _.Method () = Console.Write("IB1") + member __.Method () = Console.Write("IB1") interface IC1 with - member _.Method () = Console.Write("IC1") + member __.Method () = Console.Write("IC1") interface IDiamond1 interface IDiamond2 @@ -3396,7 +3396,7 @@ type Test () = interface IBase with - member _.Method () = Console.Write "123" + member __.Method () = Console.Write "123" interface IC2 interface IDiamond2 @@ -3500,9 +3500,9 @@ type Test () = interface ICombinedSideTest interface ITest1 with - member _.Method1 () = () + member __.Method1 () = () - member _.Method2 () = () + member __.Method2 () = () [] let main _ = @@ -3620,7 +3620,7 @@ type Test2 () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 366, (10, 15, 10, 32), "No implementation was given for 'ITest1.Method2() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpErrorSeverity.Error, 366, (10, 15, 10, 32), "No implementation was given for 'ITest1.Method2() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -3647,7 +3647,7 @@ type Test () = interface ITest with - member _.NonDefaultMethod () = + member __.NonDefaultMethod () = Console.Write("NonDefaultMethod") [] @@ -3692,9 +3692,9 @@ type Test () = interface ITest with - member _.A with get () = "OverrideA" + member __.A with get () = "OverrideA" - member _.NonDefaultMethod () = + member __.NonDefaultMethod () = Console.Write("NonDefaultMethod") [] @@ -3892,11 +3892,11 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 363, (8, 15, 8, 17), "The interface 'IA' is included in multiple explicitly implemented interface types. Add an explicit implementation of this interface.") - (FSharpDiagnosticSeverity.Error, 3352, (9, 15, 9, 17), "Interface member 'IA.M() : unit' does not have a most specific implementation.") - (FSharpDiagnosticSeverity.Error, 366, (9, 15, 9, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") - (FSharpDiagnosticSeverity.Error, 3352, (8, 15, 8, 17), "Interface member 'IA.M() : unit' does not have a most specific implementation.") - (FSharpDiagnosticSeverity.Error, 366, (8, 15, 8, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpErrorSeverity.Error, 363, (8, 15, 8, 17), "The interface 'IA' is included in multiple explicitly implemented interface types. Add an explicit implementation of this interface.") + (FSharpErrorSeverity.Error, 3352, (9, 15, 9, 17), "Interface member 'IA.M() : unit' does not have a most specific implementation.") + (FSharpErrorSeverity.Error, 366, (9, 15, 9, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpErrorSeverity.Error, 3352, (8, 15, 8, 17), "Interface member 'IA.M() : unit' does not have a most specific implementation.") + (FSharpErrorSeverity.Error, 366, (8, 15, 8, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -3947,8 +3947,8 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3352, (10, 15, 10, 17), "Interface member 'IA.M() : unit' does not have a most specific implementation.") - (FSharpDiagnosticSeverity.Error, 366, (10, 15, 10, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpErrorSeverity.Error, 3352, (10, 15, 10, 17), "Interface member 'IA.M() : unit' does not have a most specific implementation.") + (FSharpErrorSeverity.Error, 366, (10, 15, 10, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -3990,7 +3990,7 @@ type Test () = interface IC interface IA with - member _.M () = Console.Write("M") + member __.M () = Console.Write("M") [] let main _ = @@ -4077,9 +4077,9 @@ type Test () = interface IC interface IA with - member _.M () = Console.Write("M") + member __.M () = Console.Write("M") - member _.M (_x: single) = Console.Write("fs_single") + member __.M (_x: single) = Console.Write("fs_single") [] let main _ = @@ -4169,7 +4169,7 @@ type Test () = interface IC interface IA with - member _.M () = Console.Write("M") + member __.M () = Console.Write("M") """ let csCmpl = @@ -4180,7 +4180,7 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 366, (12, 15, 12, 17), "No implementation was given for 'IA.M(x: float32) : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpErrorSeverity.Error, 366, (12, 15, 12, 17), "No implementation was given for 'IA.M(x: float32) : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -4227,16 +4227,16 @@ type Test () = interface IA with - member _.M(_x: int) = Console.Write("InTest") + member __.M(_x: int) = Console.Write("InTest") - member _.M<'Item> (x: int, y: 'Item) = + member __.M<'Item> (x: int, y: 'Item) = Console.Write(x.ToString()) Console.Write(y.ToString ()) - member _.M<'TTT> (x: 'TTT) = + member __.M<'TTT> (x: 'TTT) = Console.Write(x.ToString ()) - member _.M (x: int, text: string) = + member __.M (x: int, text: string) = Console.Write("ABC") Console.Write(x.ToString()) Console.Write(text) @@ -4351,9 +4351,9 @@ type Test () = interface IC interface IA with - member _.M(_x: string) = Console.Write("Test.String") + member __.M(_x: string) = Console.Write("Test.String") - member _.Prop2 with set _ = Console.Write("Test.Prop2") + member __.Prop2 with set _ = Console.Write("Test.Prop2") [] let main _ = @@ -4448,7 +4448,7 @@ type Test () = interface IC interface IA with - member _.M(_x: string) = Console.Write("Test.String") + member __.M(_x: string) = Console.Write("Test.String") """ let csCmpl = @@ -4459,8 +4459,8 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3352, (12, 15, 12, 25), "Interface member 'IA.set_Prop2(value: string) : unit' does not have a most specific implementation.") - (FSharpDiagnosticSeverity.Error, 366, (12, 15, 12, 25), "No implementation was given for 'IA.set_Prop2(value: string) : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpErrorSeverity.Error, 3352, (12, 15, 12, 25), "Interface member 'IA.set_Prop2(value: string) : unit' does not have a most specific implementation.") + (FSharpErrorSeverity.Error, 366, (12, 15, 12, 25), "No implementation was given for 'IA.set_Prop2(value: string) : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -4509,11 +4509,11 @@ let test = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 363, (8, 7, 8, 21), "The interface 'IA' is included in multiple explicitly implemented interface types. Add an explicit implementation of this interface.") - (FSharpDiagnosticSeverity.Error, 3352, (7, 5, 8, 21), "Interface member 'IA.M() : unit' does not have a most specific implementation.") - (FSharpDiagnosticSeverity.Error, 366, (7, 5, 8, 21), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") - (FSharpDiagnosticSeverity.Error, 3352, (8, 7, 8, 21), "Interface member 'IA.M() : unit' does not have a most specific implementation.") - (FSharpDiagnosticSeverity.Error, 366, (8, 7, 8, 21), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpErrorSeverity.Error, 363, (8, 7, 8, 21), "The interface 'IA' is included in multiple explicitly implemented interface types. Add an explicit implementation of this interface.") + (FSharpErrorSeverity.Error, 3352, (7, 5, 8, 21), "Interface member 'IA.M() : unit' does not have a most specific implementation.") + (FSharpErrorSeverity.Error, 366, (7, 5, 8, 21), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpErrorSeverity.Error, 3352, (8, 7, 8, 21), "Interface member 'IA.M() : unit' does not have a most specific implementation.") + (FSharpErrorSeverity.Error, 366, (8, 7, 8, 21), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -4797,7 +4797,7 @@ let f () = Compilation.Create(fsharpSource, Fsx, Exe, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 39, (6, 17, 6, 29), "The type 'CSharpClass' does not define the field, constructor or member 'StaticMethod'.") + (FSharpErrorSeverity.Error, 39, (6, 17, 6, 29), "The type 'CSharpClass' does not define the field, constructor or member 'StaticMethod'.") |]) [] @@ -4847,7 +4847,7 @@ let f () = Compilation.Create(fsharpSource, Fsx, Exe, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 39, (11, 17, 11, 29), "The type 'FSharpClass' does not define the field, constructor or member 'StaticMethod'.") + (FSharpErrorSeverity.Error, 39, (11, 17, 11, 29), "The type 'FSharpClass' does not define the field, constructor or member 'StaticMethod'.") |]) [] @@ -4897,7 +4897,7 @@ let f () = Compilation.Create(fsharpSource, Fsx, Exe, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 1, (9, 5, 9, 15), "The type 'CSharpClass' does not support the operator 'StaticMethod'") + (FSharpErrorSeverity.Error, 1, (9, 5, 9, 15), "The type 'CSharpClass' does not support the operator 'StaticMethod'") |]) [] @@ -4950,7 +4950,7 @@ let f () = Compilation.Create(fsharpSource, Fsx, Exe, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 1, (14, 5, 14, 15), "The type 'FSharpClass' does not support the operator 'StaticMethod'") + (FSharpErrorSeverity.Error, 1, (14, 5, 14, 15), "The type 'FSharpClass' does not support the operator 'StaticMethod'") |]) #else @@ -4997,9 +4997,9 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [ilCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3351, (8, 15, 8, 20), "Feature 'default interface member consumption' is not supported by target runtime.") - (FSharpDiagnosticSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpDiagnosticSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for 'ITest.DefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpErrorSeverity.Error, 3351, (8, 15, 8, 20), "Feature 'default interface member consumption' is not supported by target runtime.") + (FSharpErrorSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpErrorSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for 'ITest.DefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -5049,8 +5049,8 @@ let f () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 3351, (14, 5, 14, 27), "Feature 'default interface member consumption' is not supported by target runtime.") - (FSharpDiagnosticSeverity.Error, 3350, (14, 5, 14, 27), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpErrorSeverity.Error, 3351, (14, 5, 14, 27), "Feature 'default interface member consumption' is not supported by target runtime.") + (FSharpErrorSeverity.Error, 3350, (14, 5, 14, 27), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") |]) #endif diff --git a/tests/fsharp/Compiler/Language/FixedIndexSliceTests.fs b/tests/fsharp/Compiler/Language/FixedIndexSliceTests.fs index a9a26f36775..5dc42ccf294 100644 --- a/tests/fsharp/Compiler/Language/FixedIndexSliceTests.fs +++ b/tests/fsharp/Compiler/Language/FixedIndexSliceTests.fs @@ -2,7 +2,7 @@ open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices [] module FixedIndexSliceTests = @@ -22,12 +22,12 @@ arr3.[*, 1, *] arr3.[*, 1, 1] """ [| - FSharpDiagnosticSeverity.Error, 39, (5,1,5,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." - FSharpDiagnosticSeverity.Error, 39, (6,1,6,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." - FSharpDiagnosticSeverity.Error, 39, (7,1,7,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." - FSharpDiagnosticSeverity.Error, 39, (8,1,8,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." - FSharpDiagnosticSeverity.Error, 39, (9,1,9,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." - FSharpDiagnosticSeverity.Error, 39, (10,1,10,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." + FSharpErrorSeverity.Error, 39, (5,1,5,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." + FSharpErrorSeverity.Error, 39, (6,1,6,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." + FSharpErrorSeverity.Error, 39, (7,1,7,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." + FSharpErrorSeverity.Error, 39, (8,1,8,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." + FSharpErrorSeverity.Error, 39, (9,1,9,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." + FSharpErrorSeverity.Error, 39, (10,1,10,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." |] [] @@ -52,19 +52,19 @@ arr4.[1, 1, 1, *] arr4.[*, 1, 1, 1] """ [| - FSharpDiagnosticSeverity.Error, 39, (5,1,5,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpDiagnosticSeverity.Error, 39, (6,1,6,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpDiagnosticSeverity.Error, 39, (7,1,7,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpDiagnosticSeverity.Error, 39, (8,1,8,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpDiagnosticSeverity.Error, 39, (9,1,9,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpDiagnosticSeverity.Error, 39, (10,1,10,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpDiagnosticSeverity.Error, 39, (11,1,11,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpDiagnosticSeverity.Error, 39, (12,1,12,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpDiagnosticSeverity.Error, 39, (13,1,13,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpDiagnosticSeverity.Error, 39, (14,1,14,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpDiagnosticSeverity.Error, 39, (15,1,15,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpDiagnosticSeverity.Error, 39, (16,1,16,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpDiagnosticSeverity.Error, 39, (17,1,17,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpErrorSeverity.Error, 39, (5,1,5,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpErrorSeverity.Error, 39, (6,1,6,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpErrorSeverity.Error, 39, (7,1,7,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpErrorSeverity.Error, 39, (8,1,8,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpErrorSeverity.Error, 39, (9,1,9,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpErrorSeverity.Error, 39, (10,1,10,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpErrorSeverity.Error, 39, (11,1,11,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpErrorSeverity.Error, 39, (12,1,12,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpErrorSeverity.Error, 39, (13,1,13,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpErrorSeverity.Error, 39, (14,1,14,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpErrorSeverity.Error, 39, (15,1,15,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpErrorSeverity.Error, 39, (16,1,16,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpErrorSeverity.Error, 39, (17,1,17,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." |] [] @@ -84,12 +84,12 @@ arr3.[*, 1, *] <- arr1 arr3.[*, 1, 1] <- arr1 """ [| - FSharpDiagnosticSeverity.Error, 39, (7,1,7,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." - FSharpDiagnosticSeverity.Error, 39, (8,1,8,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." - FSharpDiagnosticSeverity.Error, 39, (9,1,9,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." - FSharpDiagnosticSeverity.Error, 39, (10,1,10,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." - FSharpDiagnosticSeverity.Error, 39, (11,1,11,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." - FSharpDiagnosticSeverity.Error, 39, (12,1,12,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." + FSharpErrorSeverity.Error, 39, (7,1,7,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." + FSharpErrorSeverity.Error, 39, (8,1,8,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." + FSharpErrorSeverity.Error, 39, (9,1,9,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." + FSharpErrorSeverity.Error, 39, (10,1,10,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." + FSharpErrorSeverity.Error, 39, (11,1,11,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." + FSharpErrorSeverity.Error, 39, (12,1,12,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." |] [] @@ -118,18 +118,18 @@ arr4.[1, 1, 1, *] <- arr1 arr4.[*, 1, 1, 1] <- arr1 """ [| - FSharpDiagnosticSeverity.Error, 39, (8,1,8,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpDiagnosticSeverity.Error, 39, (9,1,9,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpDiagnosticSeverity.Error, 39, (10,1,10,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpDiagnosticSeverity.Error, 39, (11,1,11,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpDiagnosticSeverity.Error, 39, (12,1,12,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpDiagnosticSeverity.Error, 39, (13,1,13,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpDiagnosticSeverity.Error, 39, (14,1,14,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpDiagnosticSeverity.Error, 39, (15,1,15,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpDiagnosticSeverity.Error, 39, (16,1,16,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpDiagnosticSeverity.Error, 39, (17,1,17,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpDiagnosticSeverity.Error, 39, (18,1,18,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpDiagnosticSeverity.Error, 39, (19,1,19,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpDiagnosticSeverity.Error, 39, (20,1,20,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpDiagnosticSeverity.Error, 39, (21,1,21,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpErrorSeverity.Error, 39, (8,1,8,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpErrorSeverity.Error, 39, (9,1,9,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpErrorSeverity.Error, 39, (10,1,10,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpErrorSeverity.Error, 39, (11,1,11,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpErrorSeverity.Error, 39, (12,1,12,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpErrorSeverity.Error, 39, (13,1,13,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpErrorSeverity.Error, 39, (14,1,14,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpErrorSeverity.Error, 39, (15,1,15,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpErrorSeverity.Error, 39, (16,1,16,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpErrorSeverity.Error, 39, (17,1,17,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpErrorSeverity.Error, 39, (18,1,18,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpErrorSeverity.Error, 39, (19,1,19,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpErrorSeverity.Error, 39, (20,1,20,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpErrorSeverity.Error, 39, (21,1,21,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." |] diff --git a/tests/fsharp/Compiler/Language/HatDesugaringTests.fs b/tests/fsharp/Compiler/Language/HatDesugaringTests.fs index 71304dcf5fd..f692eaf87c2 100644 --- a/tests/fsharp/Compiler/Language/HatDesugaringTests.fs +++ b/tests/fsharp/Compiler/Language/HatDesugaringTests.fs @@ -2,7 +2,7 @@ open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices [] module HatDesugaringTests = @@ -42,7 +42,7 @@ module X let x = @1 """ [| - FSharpDiagnosticSeverity.Error, 10, (4,9,4,10), "Unexpected infix operator in binding" + FSharpErrorSeverity.Error, 10, (4,9,4,10), "Unexpected infix operator in binding" |] [] @@ -57,9 +57,9 @@ let (~^) (x: int) (y:int) = x + y Console.WriteLine(^1) """ [| - FSharpDiagnosticSeverity.Error, 1208, (5,6,5,8), "Invalid operator definition. Prefix operator definitions must use a valid prefix operator name."; - FSharpDiagnosticSeverity.Error, 10, (7,20,7,21), "Unexpected integer literal in expression. Expected ')' or other token."; - FSharpDiagnosticSeverity.Error, 583, (7,18,7,19), "Unmatched '('"; + FSharpErrorSeverity.Error, 1208, (5,6,5,8), "Invalid operator definition. Prefix operator definitions must use a valid prefix operator name."; + FSharpErrorSeverity.Error, 10, (7,20,7,21), "Unexpected integer literal in expression. Expected ')' or other token."; + FSharpErrorSeverity.Error, 583, (7,18,7,19), "Unmatched '('"; |] [] @@ -73,7 +73,7 @@ let list = [1;2;3] Console.WriteLine(list.[@1..]) """ [| - FSharpDiagnosticSeverity.Error, 1208, (6,25,6,26), "Invalid prefix operator" + FSharpErrorSeverity.Error, 1208, (6,25,6,26), "Invalid prefix operator" |] [] @@ -87,7 +87,7 @@ let list = [1;2;3] Console.WriteLine(list.[..@1]) """ [| - FSharpDiagnosticSeverity.Error, 1208, (6,25,6,28), "Invalid prefix operator" + FSharpErrorSeverity.Error, 1208, (6,25,6,28), "Invalid prefix operator" |] [] @@ -101,8 +101,8 @@ let list = [1;2;3] Console.WriteLine(list.[@1..@1]) """ [| - FSharpDiagnosticSeverity.Error, 1208, (6,25,6,26), "Invalid prefix operator"; - FSharpDiagnosticSeverity.Error, 1208, (6,29,6,30), "Invalid prefix operator" + FSharpErrorSeverity.Error, 1208, (6,25,6,26), "Invalid prefix operator"; + FSharpErrorSeverity.Error, 1208, (6,29,6,30), "Invalid prefix operator" |] [] @@ -116,5 +116,5 @@ let list = [1;2;3] Console.WriteLine(list.[@11]) """ [| - FSharpDiagnosticSeverity.Error, 1208, (6,25,6,26), "Invalid prefix operator" + FSharpErrorSeverity.Error, 1208, (6,25,6,26), "Invalid prefix operator" |] diff --git a/tests/fsharp/Compiler/Language/InitOnlyPropertyConsumptionTests.fs b/tests/fsharp/Compiler/Language/InitOnlyPropertyConsumptionTests.fs deleted file mode 100644 index eca26290cec..00000000000 --- a/tests/fsharp/Compiler/Language/InitOnlyPropertyConsumptionTests.fs +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.UnitTests - -open NUnit.Framework -open FSharp.Test.Utilities.Compiler -open FSharp.Test.Utilities -open FSharp.Test.Utilities.Utilities -open FSharp.Tests - -#if NETCOREAPP - -[] -module InitOnlyPropertyConsumptionTests = - - [] - let ``Should be able to set an init-only property from a C# record`` () = - let csharpSource = - """ -using System; - -namespace CSharpTest -{ - public record Test - { - public int X { get; init; } - } -} - """ - - let fsharpSource = - """ -open System -open System.Runtime.CompilerServices -open CSharpTest - -let test() = - Test(X = 123) - -[] -let main _ = - let x = test() - Console.Write(x.X) - 0 - """ - - let csCmpl = - CompilationUtil.CreateCSharpCompilation(csharpSource, CSharpLanguageVersion.CSharp9, TargetFramework.Current) - |> CompilationReference.Create - - let fsCmpl = - Compilation.Create(fsharpSource, Fs, Exe, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) - - CompilerAssert.ExecutionHasOutput(fsCmpl, "123") - -#endif - diff --git a/tests/fsharp/Compiler/Language/InterfaceTests.fs b/tests/fsharp/Compiler/Language/InterfaceTests.fs index 3a11860f362..177e3337ca7 100644 --- a/tests/fsharp/Compiler/Language/InterfaceTests.fs +++ b/tests/fsharp/Compiler/Language/InterfaceTests.fs @@ -2,12 +2,14 @@ namespace FSharp.Compiler.UnitTests -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices open NUnit.Framework open FSharp.Test open FSharp.Test.Utilities open FSharp.Test.Utilities.Utilities + + [] module InterfaceTests = @@ -201,7 +203,7 @@ assertion (fun (x:float) -> x * 3.0) (fun v -> |] ``Many Instantiations of the same interface`` [| - (FSharpDiagnosticSeverity.Error, 3350, (24, 6, 24, 20), "Feature 'interfaces with multiple generic instantiation' is not available in F# 4.7. Please use language version 5.0 or greater.") + (FSharpErrorSeverity.Error, 3350, (24, 6, 24, 20), "Feature 'interfaces with multiple generic instantiation' is not available in F# 4.7. Please use language version 5.0 or greater.") |] [] diff --git a/tests/fsharp/Compiler/Language/OpenTypeDeclarationTests.fs b/tests/fsharp/Compiler/Language/OpenTypeDeclarationTests.fs index 616f4894220..88dd2d0d834 100644 --- a/tests/fsharp/Compiler/Language/OpenTypeDeclarationTests.fs +++ b/tests/fsharp/Compiler/Language/OpenTypeDeclarationTests.fs @@ -2,7 +2,7 @@ namespace FSharp.Compiler.UnitTests -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices open NUnit.Framework open FSharp.Test.Utilities open FSharp.Test.Utilities.Utilities @@ -2248,7 +2248,7 @@ let main _ = Compilation.Create(fsharpSource, Fs, Exe, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpDiagnosticSeverity.Error, 39, (9, 5, 9, 6), "The value or constructor 'M' is not defined.") + (FSharpErrorSeverity.Error, 39, (9, 5, 9, 6), "The value or constructor 'M' is not defined.") |]) #endif diff --git a/tests/fsharp/Compiler/Language/OptionalInteropTests.fs b/tests/fsharp/Compiler/Language/OptionalInteropTests.fs index 19d32334850..eda7a75e31d 100644 --- a/tests/fsharp/Compiler/Language/OptionalInteropTests.fs +++ b/tests/fsharp/Compiler/Language/OptionalInteropTests.fs @@ -6,8 +6,7 @@ open System.Collections.Immutable open NUnit.Framework open FSharp.Test.Utilities open FSharp.Test.Utilities.Utilities -open FSharp.Test.Utilities.Compiler -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices open Microsoft.CodeAnalysis [] diff --git a/tests/fsharp/Compiler/Language/SlicingQuotationTests.fs b/tests/fsharp/Compiler/Language/SlicingQuotationTests.fs index a7d3a889d25..f34e0510712 100644 --- a/tests/fsharp/Compiler/Language/SlicingQuotationTests.fs +++ b/tests/fsharp/Compiler/Language/SlicingQuotationTests.fs @@ -2,7 +2,7 @@ open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices [] module SlicingQuotationTests = diff --git a/tests/fsharp/Compiler/Language/SpanOptimizationTests.fs b/tests/fsharp/Compiler/Language/SpanOptimizationTests.fs index 64ceb55ec20..3899a42f8b1 100644 --- a/tests/fsharp/Compiler/Language/SpanOptimizationTests.fs +++ b/tests/fsharp/Compiler/Language/SpanOptimizationTests.fs @@ -27,37 +27,45 @@ let test () = (fun verifier -> verifier.VerifyIL [ - """ -.method public static void test() cil managed -{ + """.method public static void test() cil managed + { - .maxstack 4 - .locals init (valuetype [runtime]System.Span`1 V_0, + .maxstack 5 + .locals init (valuetype [System.Runtime]System.Span`1 V_0, int32 V_1, - object& V_2) - IL_0000: call valuetype [runtime]System.Span`1 valuetype [runtime]System.Span`1::get_Empty() + int32 V_2, + object& V_3) + IL_0000: call valuetype [System.Runtime]System.Span`1 valuetype [System.Runtime]System.Span`1::get_Empty() IL_0005: stloc.0 IL_0006: ldc.i4.0 - IL_0007: stloc.1 - IL_0008: br.s IL_0022 - - IL_000a: ldloca.s V_0 - IL_000c: ldloc.1 - IL_000d: call instance !0& valuetype [runtime]System.Span`1::get_Item(int32) - IL_0012: stloc.2 + IL_0007: stloc.2 + IL_0008: ldloca.s V_0 + IL_000a: call instance int32 valuetype [System.Runtime]System.Span`1::get_Length() + IL_000f: ldc.i4.1 + IL_0010: sub + IL_0011: stloc.1 + IL_0012: ldloc.1 IL_0013: ldloc.2 - IL_0014: ldobj [runtime]System.Object - IL_0019: call void [System.Console]System.Console::WriteLine(object) - IL_001e: ldloc.1 - IL_001f: ldc.i4.1 - IL_0020: add - IL_0021: stloc.1 - IL_0022: ldloc.1 - IL_0023: ldloca.s V_0 - IL_0025: call instance int32 valuetype [runtime]System.Span`1::get_Length() - IL_002a: blt.s IL_000a - - IL_002c: ret + IL_0014: blt.s IL_0034 + + IL_0016: ldloca.s V_0 + IL_0018: ldloc.2 + IL_0019: call instance !0& valuetype [System.Runtime]System.Span`1::get_Item(int32) + IL_001e: stloc.3 + IL_001f: ldloc.3 + IL_0020: ldobj [System.Runtime]System.Object + IL_0025: call void [System.Console]System.Console::WriteLine(object) + IL_002a: ldloc.2 + IL_002b: ldc.i4.1 + IL_002c: add + IL_002d: stloc.2 + IL_002e: ldloc.2 + IL_002f: ldloc.1 + IL_0030: ldc.i4.1 + IL_0031: add + IL_0032: bne.un.s IL_0016 + + IL_0034: ret }""" ]) @@ -82,33 +90,42 @@ let test () = """.method public static void test() cil managed { - .maxstack 4 - .locals init (valuetype [runtime]System.ReadOnlySpan`1 V_0, - int32 V_1, - object& V_2) - IL_0000: call valuetype [runtime]System.ReadOnlySpan`1 valuetype [runtime]System.ReadOnlySpan`1::get_Empty() + .maxstack 5 + .locals init (valuetype [System.Runtime]System.ReadOnlySpan`1 V_0, + int32 V_1, + int32 V_2, + object& V_3) + IL_0000: call valuetype [System.Runtime]System.ReadOnlySpan`1 valuetype [System.Runtime]System.ReadOnlySpan`1::get_Empty() IL_0005: stloc.0 IL_0006: ldc.i4.0 - IL_0007: stloc.1 - IL_0008: br.s IL_0022 - - IL_000a: ldloca.s V_0 - IL_000c: ldloc.1 - IL_000d: call instance !0& modreq([runtime]System.Runtime.InteropServices.InAttribute) valuetype [runtime]System.ReadOnlySpan`1::get_Item(int32) - IL_0012: stloc.2 + IL_0007: stloc.2 + IL_0008: ldloca.s V_0 + IL_000a: call instance int32 valuetype [System.Runtime]System.ReadOnlySpan`1::get_Length() + IL_000f: ldc.i4.1 + IL_0010: sub + IL_0011: stloc.1 + IL_0012: ldloc.1 IL_0013: ldloc.2 - IL_0014: ldobj [runtime]System.Object - IL_0019: call void [System.Console]System.Console::WriteLine(object) - IL_001e: ldloc.1 - IL_001f: ldc.i4.1 - IL_0020: add - IL_0021: stloc.1 - IL_0022: ldloc.1 - IL_0023: ldloca.s V_0 - IL_0025: call instance int32 valuetype [runtime]System.ReadOnlySpan`1::get_Length() - IL_002a: blt.s IL_000a - - IL_002c: ret + IL_0014: blt.s IL_0034 + + IL_0016: ldloca.s V_0 + IL_0018: ldloc.2 + IL_0019: call instance !0& modreq([System.Runtime]System.Runtime.InteropServices.InAttribute) valuetype [System.Runtime]System.ReadOnlySpan`1::get_Item(int32) + IL_001e: stloc.3 + IL_001f: ldloc.3 + IL_0020: ldobj [System.Runtime]System.Object + IL_0025: call void [System.Console]System.Console::WriteLine(object) + IL_002a: ldloc.2 + IL_002b: ldc.i4.1 + IL_002c: add + IL_002d: stloc.2 + IL_002e: ldloc.2 + IL_002f: ldloc.1 + IL_0030: ldc.i4.1 + IL_0031: add + IL_0032: bne.un.s IL_0016 + + IL_0034: ret }""" ]) @@ -133,17 +150,17 @@ open System.Runtime.CompilerServices [] type Span<'T>(arr: 'T []) = - member _.Item + member __.Item with get (i: int) = &arr.[i] - member _.Length + member __.Length with get () = 0 static member Empty = Span<'T>([||]) interface IEnumerable with - member _.GetEnumerator() = null + member __.GetEnumerator() = null module Test = @@ -166,152 +183,51 @@ module Test = class [System.Runtime]System.Collections.IEnumerator V_1, class [FSharp.Core]Microsoft.FSharp.Core.Unit V_2, class [System.Runtime]System.IDisposable V_3) - IL_0000: call !!0[] [runtime]System.Array::Empty() - IL_0005: newobj instance void valuetype System.Span`1::.ctor(!0[]) - IL_000a: stloc.0 - IL_000b: ldloc.0 - IL_000c: box valuetype System.Span`1 - IL_0011: unbox.any [System.Runtime]System.Collections.IEnumerable - IL_0016: callvirt instance class [System.Runtime]System.Collections.IEnumerator [System.Runtime]System.Collections.IEnumerable::GetEnumerator() - IL_001b: stloc.1 + IL_0000: ldc.i4.0 + IL_0001: newarr [System.Runtime]System.Object + IL_0006: newobj instance void valuetype System.Span`1::.ctor(!0[]) + IL_000b: stloc.0 + IL_000c: ldloc.0 + IL_000d: box valuetype System.Span`1 + IL_0012: unbox.any [System.Runtime]System.Collections.IEnumerable + IL_0017: callvirt instance class [System.Runtime]System.Collections.IEnumerator [System.Runtime]System.Collections.IEnumerable::GetEnumerator() + IL_001c: stloc.1 .try { - IL_001c: ldloc.1 - IL_001d: callvirt instance bool [System.Runtime]System.Collections.IEnumerator::MoveNext() - IL_0022: brfalse.s IL_0031 + IL_001d: ldloc.1 + IL_001e: callvirt instance bool [System.Runtime]System.Collections.IEnumerator::MoveNext() + IL_0023: brfalse.s IL_0032 - IL_0024: ldloc.1 - IL_0025: callvirt instance object [System.Runtime]System.Collections.IEnumerator::get_Current() - IL_002a: call void [System.Console]System.Console::WriteLine(object) - IL_002f: br.s IL_001c + IL_0025: ldloc.1 + IL_0026: callvirt instance object [System.Runtime]System.Collections.IEnumerator::get_Current() + IL_002b: call void [System.Console]System.Console::WriteLine(object) + IL_0030: br.s IL_001d - IL_0031: ldnull - IL_0032: stloc.2 - IL_0033: leave.s IL_004b + IL_0032: ldnull + IL_0033: stloc.2 + IL_0034: leave.s IL_004c } finally { - IL_0035: ldloc.1 - IL_0036: isinst [System.Runtime]System.IDisposable - IL_003b: stloc.3 - IL_003c: ldloc.3 - IL_003d: brfalse.s IL_0048 - - IL_003f: ldloc.3 - IL_0040: callvirt instance void [System.Runtime]System.IDisposable::Dispose() - IL_0045: ldnull - IL_0046: pop - IL_0047: endfinally - IL_0048: ldnull - IL_0049: pop - IL_004a: endfinally + IL_0036: ldloc.1 + IL_0037: isinst [System.Runtime]System.IDisposable + IL_003c: stloc.3 + IL_003d: ldloc.3 + IL_003e: brfalse.s IL_0049 + + IL_0040: ldloc.3 + IL_0041: callvirt instance void [System.Runtime]System.IDisposable::Dispose() + IL_0046: ldnull + IL_0047: pop + IL_0048: endfinally + IL_0049: ldnull + IL_004a: pop + IL_004b: endfinally } - IL_004b: ldloc.2 - IL_004c: pop - IL_004d: ret - }""" - ]) - - [] - let SpanForInBoundsDo() = - let source = - """ -module Test - -open System - -let test () = -let span = Span.Empty -for i in 0 .. span.Length-1 do - Console.WriteLine(span.[i]) - """ - - CompilerAssert.CompileLibraryAndVerifyIL source - (fun verifier -> - verifier.VerifyIL - [ - """.method public static void test() cil managed - { - - .maxstack 4 - .locals init (valuetype [runtime]System.Span`1 V_0, - int32 V_1, - object& V_2) - IL_0000: call valuetype [runtime]System.Span`1 valuetype [runtime]System.Span`1::get_Empty() - IL_0005: stloc.0 - IL_0006: ldc.i4.0 - IL_0007: stloc.1 - IL_0008: br.s IL_0022 - - IL_000a: ldloca.s V_0 - IL_000c: ldloc.1 - IL_000d: call instance !0& valuetype [runtime]System.Span`1::get_Item(int32) - IL_0012: stloc.2 - IL_0013: ldloc.2 - IL_0014: ldobj [runtime]System.Object - IL_0019: call void [System.Console]System.Console::WriteLine(object) - IL_001e: ldloc.1 - IL_001f: ldc.i4.1 - IL_0020: add - IL_0021: stloc.1 - IL_0022: ldloc.1 - IL_0023: ldloca.s V_0 - IL_0025: call instance int32 valuetype [runtime]System.Span`1::get_Length() - IL_002a: blt.s IL_000a - - IL_002c: ret - }""" - ]) - [] - let ReadOnlySpanForInBoundsDo() = - let source = - """ -module Test - -open System - -let test () = -let span = ReadOnlySpan.Empty -for i in 0 .. span.Length-1 do -Console.WriteLine(span.[i]) - """ - - CompilerAssert.CompileLibraryAndVerifyIL source - (fun verifier -> - verifier.VerifyIL - [ - """.method public static void test() cil managed - { - - .maxstack 4 - .locals init (valuetype [runtime]System.ReadOnlySpan`1 V_0, - int32 V_1, - object& V_2) - IL_0000: call valuetype [runtime]System.ReadOnlySpan`1 valuetype [runtime]System.ReadOnlySpan`1::get_Empty() - IL_0005: stloc.0 - IL_0006: ldc.i4.0 - IL_0007: stloc.1 - IL_0008: br.s IL_0022 - - IL_000a: ldloca.s V_0 - IL_000c: ldloc.1 - IL_000d: call instance !0& modreq([runtime]System.Runtime.InteropServices.InAttribute) valuetype [runtime]System.ReadOnlySpan`1::get_Item(int32) - IL_0012: stloc.2 - IL_0013: ldloc.2 - IL_0014: ldobj [runtime]System.Object - IL_0019: call void [System.Console]System.Console::WriteLine(object) - IL_001e: ldloc.1 - IL_001f: ldc.i4.1 - IL_0020: add - IL_0021: stloc.1 - IL_0022: ldloc.1 - IL_0023: ldloca.s V_0 - IL_0025: call instance int32 valuetype [runtime]System.ReadOnlySpan`1::get_Length() - IL_002a: blt.s IL_000a - - IL_002c: ret + IL_004c: ldloc.2 + IL_004d: pop + IL_004e: ret }""" ]) - #endif diff --git a/tests/fsharp/Compiler/Language/SpanTests.fs b/tests/fsharp/Compiler/Language/SpanTests.fs index f24036c8664..2eb6b44916b 100644 --- a/tests/fsharp/Compiler/Language/SpanTests.fs +++ b/tests/fsharp/Compiler/Language/SpanTests.fs @@ -3,7 +3,7 @@ namespace FSharp.Compiler.UnitTests open System -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices open NUnit.Framework open FSharp.Test.Utilities @@ -26,45 +26,6 @@ let test () : unit = if result.[0] <> 1 || result.[1] <> 2 || result.[2] <> 3 || result.[3] <> 4 then failwith "SpanForInDo didn't work properly" -test () - """ - - CompilerAssert.RunScript script [] - [] - let Script_SpanForInBoundsDo() = - let script = - """ -open System - -let test () : unit = - let span = Span([|1;2;3;4|]) - let result = ResizeArray() - for i in 0 .. span.Length-1 do - result.Add(span.[i]) - - if result.[0] <> 1 || result.[1] <> 2 || result.[2] <> 3 || result.[3] <> 4 then - failwith "SpanForInBoundsDo didn't work properly" - -test () - """ - - CompilerAssert.RunScript script [] - - [] - let Script_EmptySpanForInBoundsDo() = - let script = - """ -open System - -let test () : unit = - let span = Span([||]) - let result = ResizeArray() - for i in 0 .. span.Length-1 do - result.Add(span.[i]) - - if result.Count <> 0 then - failwith "EmptySpanForInBoundsDo didn't work properly" - test () """ @@ -92,28 +53,6 @@ test () // See: https://github.com/dotnet/corefx/issues/29254 CompilerAssert.RunScript script [ "Method not found: '!0 ByRef System.ReadOnlySpan`1.get_Item(Int32)'." ] - [] - let Script_ReadOnlySpanForInBoundsDo() = - let script = - """ -open System - -let test () : unit = - let span = ReadOnlySpan([|1;2;3;4|]) - let result = ResizeArray() - for i in 0 .. span.Length-1 do - result.Add(span.[i]) - - if result.[0] <> 1 || result.[1] <> 2 || result.[2] <> 3 || result.[3] <> 4 then - failwith "Script_ReadOnlySpanForInBoundsDo didn't work properly" - -test () - """ - - // We expect this error until System.Reflection.Emit gets fixed for emitting `modreq` on method calls. - // See: https://github.com/dotnet/corefx/issues/29254 - CompilerAssert.RunScript script [ "Method not found: '!0 ByRef System.ReadOnlySpan`1.get_Item(Int32)'." ] - [] let ``Invalid usage of type abbreviated span should fail to compile``() = @@ -147,9 +86,9 @@ let test () = 0 """ [| - FSharpDiagnosticSeverity.Error, 412, (11, 17, 11, 28), "A type instantiation involves a byref type. This is not permitted by the rules of Common IL." - FSharpDiagnosticSeverity.Error, 412, (19, 17, 19, 29), "A type instantiation involves a byref type. This is not permitted by the rules of Common IL." - FSharpDiagnosticSeverity.Error, 412, (19, 27, 19, 29), "A type instantiation involves a byref type. This is not permitted by the rules of Common IL." + FSharpErrorSeverity.Error, 412, (11, 17, 11, 28), "A type instantiation involves a byref type. This is not permitted by the rules of Common IL." + FSharpErrorSeverity.Error, 412, (19, 17, 19, 29), "A type instantiation involves a byref type. This is not permitted by the rules of Common IL." + FSharpErrorSeverity.Error, 412, (19, 27, 19, 29), "A type instantiation involves a byref type. This is not permitted by the rules of Common IL." |] [] @@ -162,6 +101,6 @@ type TA = Span * Span let f (x: TA) = () """ [| - FSharpDiagnosticSeverity.Error, 3300, (6, 8, 6, 9), "The parameter 'x' has an invalid type 'TA'. This is not permitted by the rules of Common IL." + FSharpErrorSeverity.Error, 3300, (6, 8, 6, 9), "The parameter 'x' has an invalid type 'TA'. This is not permitted by the rules of Common IL." |] #endif diff --git a/tests/fsharp/Compiler/Language/StringInterpolation.fs b/tests/fsharp/Compiler/Language/StringInterpolation.fs index 6d41510b038..dd1890fcc4f 100644 --- a/tests/fsharp/Compiler/Language/StringInterpolation.fs +++ b/tests/fsharp/Compiler/Language/StringInterpolation.fs @@ -3,7 +3,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices open FSharp.Test.Utilities [] @@ -325,16 +325,16 @@ check "fwejwflpej2" (fmt $"abc") "abc" check "fwejwflpej3" (fmt $"abc{1}") "abc1" check "fwejwflpej6" (fmt_us $"abc {30000} def") "abc 30000 def" check "fwejwflpej7" (fmt_de $"abc {30000} def") "abc 30000 def" -check "fwejwflpej8" (fmt_us $"abc {30000:N2} def") "abc 30,000.00 def" -check "fwejwflpej9" (fmt_de $"abc {30000:N2} def") "abc 30.000,00 def" +check "fwejwflpej8" (fmt_us $"abc {30000:N} def") "abc 30,000.00 def" +check "fwejwflpej9" (fmt_de $"abc {30000:N} def") "abc 30.000,00 def" check "fwejwflpej10" (fmt_us $"abc {30000} def {40000} hij") "abc 30000 def 40000 hij" check "fwejwflpej11" (fmt_us $"abc {30000,-10} def {40000} hij") "abc 30000 def 40000 hij" check "fwejwflpej12" (fmt_us $"abc {30000,10} def {40000} hij") "abc 30000 def 40000 hij" check "fwejwflpej13" (fmt_de $"abc {30000} def {40000} hij") "abc 30000 def 40000 hij" -check "fwejwflpej14" (fmt_us $"abc {30000:N2} def {40000:N2} hij") "abc 30,000.00 def 40,000.00 hij" -check "fwejwflpej15" (fmt_de $"abc {30000:N2} def {40000:N2} hij") "abc 30.000,00 def 40.000,00 hij" -check "fwejwflpej16" (fmt_de $"abc {30000,10:N2} def {40000:N2} hij") "abc 30.000,00 def 40.000,00 hij" -check "fwejwflpej17" (fmt_de $"abc {30000,-10:N2} def {40000:N2} hij") "abc 30.000,00 def 40.000,00 hij" +check "fwejwflpej14" (fmt_us $"abc {30000:N} def {40000:N} hij") "abc 30,000.00 def 40,000.00 hij" +check "fwejwflpej15" (fmt_de $"abc {30000:N} def {40000:N} hij") "abc 30.000,00 def 40.000,00 hij" +check "fwejwflpej16" (fmt_de $"abc {30000,10:N} def {40000:N} hij") "abc 30.000,00 def 40.000,00 hij" +check "fwejwflpej17" (fmt_de $"abc {30000,-10:N} def {40000:N} hij") "abc 30.000,00 def 40.000,00 hij" """ @@ -354,16 +354,16 @@ check "fwejwflpej2" (fmt $"abc") "abc" check "fwejwflpej3" (fmt $"abc{1}") "abc1" check "fwejwflpej6" (fmt_us $"abc {30000} def") "abc 30000 def" check "fwejwflpej7" (fmt_de $"abc {30000} def") "abc 30000 def" -check "fwejwflpej8" (fmt_us $"abc {30000:N2} def") "abc 30,000.00 def" -check "fwejwflpej9" (fmt_de $"abc {30000:N2} def") "abc 30.000,00 def" +check "fwejwflpej8" (fmt_us $"abc {30000:N} def") "abc 30,000.00 def" +check "fwejwflpej9" (fmt_de $"abc {30000:N} def") "abc 30.000,00 def" check "fwejwflpej10" (fmt_us $"abc {30000} def {40000} hij") "abc 30000 def 40000 hij" check "fwejwflpej11" (fmt_us $"abc {30000,-10} def {40000} hij") "abc 30000 def 40000 hij" check "fwejwflpej12" (fmt_us $"abc {30000,10} def {40000} hij") "abc 30000 def 40000 hij" check "fwejwflpej13" (fmt_de $"abc {30000} def {40000} hij") "abc 30000 def 40000 hij" -check "fwejwflpej14" (fmt_us $"abc {30000:N2} def {40000:N2} hij") "abc 30,000.00 def 40,000.00 hij" -check "fwejwflpej15" (fmt_de $"abc {30000:N2} def {40000:N2} hij") "abc 30.000,00 def 40.000,00 hij" -check "fwejwflpej16" (fmt_de $"abc {30000,10:N2} def {40000:N2} hij") "abc 30.000,00 def 40.000,00 hij" -check "fwejwflpej17" (fmt_de $"abc {30000,-10:N2} def {40000:N2} hij") "abc 30.000,00 def 40.000,00 hij" +check "fwejwflpej14" (fmt_us $"abc {30000:N} def {40000:N} hij") "abc 30,000.00 def 40,000.00 hij" +check "fwejwflpej15" (fmt_de $"abc {30000:N} def {40000:N} hij") "abc 30.000,00 def 40.000,00 hij" +check "fwejwflpej16" (fmt_de $"abc {30000,10:N} def {40000:N} hij") "abc 30.000,00 def 40.000,00 hij" +check "fwejwflpej17" (fmt_de $"abc {30000,-10:N} def {40000:N} hij") "abc 30.000,00 def 40.000,00 hij" """ @@ -536,19 +536,7 @@ check "vcewweh22g" $"x = %A{s}" "x = \"sixsix\"" check "vcewweh20" $"x = %A{1}" "x = 1" """ - [] - let ``%B fails for langVersion 5.0`` () = - CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] - """printf "%B" 10""" - [|(FSharpDiagnosticSeverity.Error, 3350, (1, 8, 1, 12), - "Feature 'binary formatting for integers' is not available in F# 5.0. Please use language version 'preview' or greater.")|] - [] - let ``%B succeeds for langVersion preview`` () = - CompilerAssert.CompileExeAndRunWithOptions [| "--langversion:preview" |] """ -let check msg a b = - if a = b then printfn "test case '%s' succeeded" msg else failwithf "test case '%s' failed, expected %A, got %A" msg b a -check "vcewweh22a" $"x = %B{19}" "x = 10011" - """ + [] let ``String interpolation using list and array data`` () = @@ -627,7 +615,7 @@ check "vcewweh23" $"abc{({| A=1 |})}def" "abc{ A = 1 }def" """ let x = $"one" """ - [|(FSharpDiagnosticSeverity.Error, 3350, (2, 9, 2, 15), + [|(FSharpErrorSeverity.Error, 3350, (2, 9, 2, 15), "Feature 'string interpolation' is not available in F# 4.7. Please use language version 5.0 or greater.")|] @@ -649,32 +637,32 @@ let xe = $"%A{{1}}" // fake expression (delimiters escaped) """ CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpDiagnosticSeverity.Error, 1, (2, 19, 2, 38), + [|(FSharpErrorSeverity.Error, 1, (2, 19, 2, 38), "The type 'string' is not compatible with any of the types byte,int16,int32,int64,sbyte,uint16,uint32,uint64,nativeint,unativeint, arising from the use of a printf-style format string"); - (FSharpDiagnosticSeverity.Error, 1, (3, 19, 3, 20), + (FSharpErrorSeverity.Error, 1, (3, 19, 3, 20), """This expression was expected to have type 'string' but here has type 'int' """); - (FSharpDiagnosticSeverity.Error, 3376, (4, 10, 4, 19), + (FSharpErrorSeverity.Error, 3376, (4, 10, 4, 19), "Invalid interpolated string. Interpolated strings may not use '%' format specifiers unless each is given an expression, e.g. '%d{1+1}'."); - (FSharpDiagnosticSeverity.Error, 3376, (5, 10, 5, 19), + (FSharpErrorSeverity.Error, 3376, (5, 10, 5, 19), "Invalid interpolated string. Interpolated strings may not use '%' format specifiers unless each is given an expression, e.g. '%d{1+1}'."); - (FSharpDiagnosticSeverity.Error, 3376, (6, 10, 6, 19), + (FSharpErrorSeverity.Error, 3376, (6, 10, 6, 19), "Invalid interpolated string. Interpolated strings may not use '%' format specifiers unless each is given an expression, e.g. '%d{1+1}'."); - (FSharpDiagnosticSeverity.Error, 3376, (7, 10, 7, 19), + (FSharpErrorSeverity.Error, 3376, (7, 10, 7, 19), "Invalid interpolated string. The '%P' specifier may not be used explicitly."); - (FSharpDiagnosticSeverity.Error, 3371, (8, 10, 8, 21), + (FSharpErrorSeverity.Error, 3371, (8, 10, 8, 21), "Mismatch in interpolated string. Interpolated strings may not use '%' format specifiers unless each is given an expression, e.g. '%d{1+1}'"); - (FSharpDiagnosticSeverity.Error, 3371, (9, 10, 9, 24), + (FSharpErrorSeverity.Error, 3371, (9, 10, 9, 24), "Mismatch in interpolated string. Interpolated strings may not use '%' format specifiers unless each is given an expression, e.g. '%d{1+1}'"); - (FSharpDiagnosticSeverity.Error, 3376, (10, 10, 10, 19), + (FSharpErrorSeverity.Error, 3376, (10, 10, 10, 19), "Invalid interpolated string. Interpolated strings may not use '%' format specifiers unless each is given an expression, e.g. '%d{1+1}'."); - (FSharpDiagnosticSeverity.Error, 3376, (11, 10, 11, 24), + (FSharpErrorSeverity.Error, 3376, (11, 10, 11, 24), "Invalid interpolated string. .NET-style format specifiers such as '{x,3}' or '{x:N5}' may not be mixed with '%' format specifiers.") - (FSharpDiagnosticSeverity.Error, 3376, (12, 10, 12, 16), + (FSharpErrorSeverity.Error, 3376, (12, 10, 12, 16), "Invalid interpolated string. Bad precision in format specifier") - (FSharpDiagnosticSeverity.Error, 3376, (13, 10, 13, 20), + (FSharpErrorSeverity.Error, 3376, (13, 10, 13, 20), "Invalid interpolated string. Interpolated strings may not use '%' format specifiers unless each is given an expression, e.g. '%d{1+1}'.") |] @@ -683,11 +671,11 @@ let xb = $"{%5d{1:N3}}" // inner error that looks like format specifiers """ CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpDiagnosticSeverity.Error, 1156, (2, 14, 2, 16), + [|(FSharpErrorSeverity.Error, 1156, (2, 14, 2, 16), "This is not a valid numeric literal. Valid numeric literals include 1, 0x1, 0o1, 0b1, 1l (int), 1u (uint32), 1L (int64), 1UL (uint64), 1s (int16), 1y (sbyte), 1uy (byte), 1.0 (float), 1.0f (float32), 1.0m (decimal), 1I (BigInteger)."); - (FSharpDiagnosticSeverity.Error, 10, (2, 18, 2, 19), + (FSharpErrorSeverity.Error, 10, (2, 18, 2, 19), "Unexpected symbol ':' in expression. Expected '}' or other token."); - (FSharpDiagnosticSeverity.Error, 604, (2, 16, 2, 17), "Unmatched '{'") + (FSharpErrorSeverity.Error, 604, (2, 16, 2, 17), "Unmatched '{'") |] let code = """ @@ -695,7 +683,7 @@ let xd = $"%A{}" // empty expression """ CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpDiagnosticSeverity.Error, 3382, (2, 15, 2, 15), + [|(FSharpErrorSeverity.Error, 3382, (2, 15, 2, 15), "Invalid interpolated string. This interpolated string expression fill is empty, an expression was expected.") |] @@ -704,7 +692,7 @@ let xd = $"%A{ }" // empty expression """ CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpDiagnosticSeverity.Error, 3382, (2, 15, 2, 17), + [|(FSharpErrorSeverity.Error, 3382, (2, 15, 2, 17), "Invalid interpolated string. This interpolated string expression fill is empty, an expression was expected.") |] @@ -719,11 +707,11 @@ let x3 : FormattableString = $"one %10s{String.Empty}" // no %10s in Formattable """ CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpDiagnosticSeverity.Error, 3376, (4, 30, 4, 44), + [|(FSharpErrorSeverity.Error, 3376, (4, 30, 4, 44), "Invalid interpolated string. Interpolated strings used as type IFormattable or type FormattableString may not use '%' specifiers, only .NET-style interpolands such as '{expr}', '{expr,3}' or '{expr:N5}' may be used."); - (FSharpDiagnosticSeverity.Error, 3376, (5, 30, 5, 53), + (FSharpErrorSeverity.Error, 3376, (5, 30, 5, 53), "Invalid interpolated string. Interpolated strings used as type IFormattable or type FormattableString may not use '%' specifiers, only .NET-style interpolands such as '{expr}', '{expr,3}' or '{expr:N5}' may be used."); - (FSharpDiagnosticSeverity.Error, 3376, (6, 30, 6, 55), + (FSharpErrorSeverity.Error, 3376, (6, 30, 6, 55), "Invalid interpolated string. Interpolated strings used as type IFormattable or type FormattableString may not use '%' specifiers, only .NET-style interpolands such as '{expr}', '{expr,3}' or '{expr:N5}' may be used.")|] @@ -744,23 +732,23 @@ let s9 = @$"123{456}789{$@"012"}345" """ CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpDiagnosticSeverity.Error, 3373, (4, 24, 4, 25), + [|(FSharpErrorSeverity.Error, 3373, (4, 24, 4, 25), "Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal."); - (FSharpDiagnosticSeverity.Error, 3373, (5, 24, 5, 26), + (FSharpErrorSeverity.Error, 3373, (5, 24, 5, 26), "Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal."); - (FSharpDiagnosticSeverity.Error, 3373, (6, 24, 6, 26), + (FSharpErrorSeverity.Error, 3373, (6, 24, 6, 26), "Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal."); - (FSharpDiagnosticSeverity.Error, 3373, (7, 25, 7, 26), + (FSharpErrorSeverity.Error, 3373, (7, 25, 7, 26), "Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal."); - (FSharpDiagnosticSeverity.Error, 3373, (8, 25, 8, 26), + (FSharpErrorSeverity.Error, 3373, (8, 25, 8, 26), "Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal."); - (FSharpDiagnosticSeverity.Error, 3373, (9, 25, 9, 27), + (FSharpErrorSeverity.Error, 3373, (9, 25, 9, 27), "Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal."); - (FSharpDiagnosticSeverity.Error, 3373, (10, 25, 10, 27), + (FSharpErrorSeverity.Error, 3373, (10, 25, 10, 27), "Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal."); - (FSharpDiagnosticSeverity.Error, 3373, (11, 25, 11, 28), + (FSharpErrorSeverity.Error, 3373, (11, 25, 11, 28), "Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal."); - (FSharpDiagnosticSeverity.Error, 3373, (12, 25, 12, 28), + (FSharpErrorSeverity.Error, 3373, (12, 25, 12, 28), "Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal.")|] [] @@ -777,17 +765,17 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3 " CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpDiagnosticSeverity.Error, 3374, (4, 52, 4, 55), + [|(FSharpErrorSeverity.Error, 3374, (4, 52, 4, 55), "Invalid interpolated string. Triple quote string literals may not be used in interpolated expressions. Consider using an explicit 'let' binding for the interpolation expression."); - (FSharpDiagnosticSeverity.Error, 3374, (5, 50, 5, 53), + (FSharpErrorSeverity.Error, 3374, (5, 50, 5, 53), "Invalid interpolated string. Triple quote string literals may not be used in interpolated expressions. Consider using an explicit 'let' binding for the interpolation expression."); - (FSharpDiagnosticSeverity.Error, 3374, (6, 50, 6, 53), + (FSharpErrorSeverity.Error, 3374, (6, 50, 6, 53), "Invalid interpolated string. Triple quote string literals may not be used in interpolated expressions. Consider using an explicit 'let' binding for the interpolation expression."); - (FSharpDiagnosticSeverity.Error, 3374, (7, 64, 7, 68), + (FSharpErrorSeverity.Error, 3374, (7, 64, 7, 68), "Invalid interpolated string. Triple quote string literals may not be used in interpolated expressions. Consider using an explicit 'let' binding for the interpolation expression."); - (FSharpDiagnosticSeverity.Error, 3374, (8, 62, 8, 66), + (FSharpErrorSeverity.Error, 3374, (8, 62, 8, 66), "Invalid interpolated string. Triple quote string literals may not be used in interpolated expressions. Consider using an explicit 'let' binding for the interpolation expression."); - (FSharpDiagnosticSeverity.Error, 3374, (9, 62, 9, 66), + (FSharpErrorSeverity.Error, 3374, (9, 62, 9, 66), "Invalid interpolated string. Triple quote string literals may not be used in interpolated expressions. Consider using an explicit 'let' binding for the interpolation expression.")|] [] @@ -795,9 +783,9 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3 let code = """let x1 = $"one %d{System.String.Empty}""" CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpDiagnosticSeverity.Error, 10, (1, 1, 1, 39), + [|(FSharpErrorSeverity.Error, 10, (1, 1, 1, 39), "Incomplete structured construct at or before this point in binding. Expected interpolated string (final part), interpolated string (part) or other token."); - (FSharpDiagnosticSeverity.Error, 3379, (1, 38, 1, 39), + (FSharpErrorSeverity.Error, 3379, (1, 38, 1, 39), "Incomplete interpolated string begun at or before here")|] [] @@ -805,9 +793,9 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3 let code = """let x1 = $"one %d{System.String.Empty""" CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpDiagnosticSeverity.Error, 10, (1, 1, 1, 38), + [|(FSharpErrorSeverity.Error, 10, (1, 1, 1, 38), "Incomplete structured construct at or before this point in binding. Expected interpolated string (final part), interpolated string (part) or other token."); - (FSharpDiagnosticSeverity.Error, 3378, (1, 18, 1, 19), + (FSharpErrorSeverity.Error, 3378, (1, 18, 1, 19), "Incomplete interpolated string expression fill begun at or before here")|] [] @@ -815,9 +803,9 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3 let code = """let x1 = @$"one %d{System.String.Empty} """ CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpDiagnosticSeverity.Error, 10, (1, 1, 1, 41), + [|(FSharpErrorSeverity.Error, 10, (1, 1, 1, 41), "Incomplete structured construct at or before this point in binding. Expected interpolated string (final part), interpolated string (part) or other token."); - (FSharpDiagnosticSeverity.Error, 3380, (1, 39, 1, 40), + (FSharpErrorSeverity.Error, 3380, (1, 39, 1, 40), "Incomplete interpolated verbatim string begun at or before here")|] [] @@ -825,13 +813,13 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3 let code = "let x1 = $\"\"\"one" CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpDiagnosticSeverity.Warning, 58, (1, 1, 1, 17), + [|(FSharpErrorSeverity.Warning, 58, (1, 1, 1, 17), "Possible incorrect indentation: this token is offside of context started at position (1:1). Try indenting this token further or using standard formatting conventions."); - (FSharpDiagnosticSeverity.Warning, 58, (1, 17, 1, 17), + (FSharpErrorSeverity.Warning, 58, (1, 17, 1, 17), "Possible incorrect indentation: this token is offside of context started at position (1:1). Try indenting this token further or using standard formatting conventions."); - (FSharpDiagnosticSeverity.Error, 10, (1, 1, 1, 17), + (FSharpErrorSeverity.Error, 10, (1, 1, 1, 17), "Incomplete structured construct at or before this point in binding"); - (FSharpDiagnosticSeverity.Error, 3381, (1, 10, 1, 14), + (FSharpErrorSeverity.Error, 3381, (1, 10, 1, 14), "Incomplete interpolated triple-quote string begun at or before here")|] [] @@ -839,7 +827,7 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3 let code = "let x1 = $\"}\"" CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpDiagnosticSeverity.Error, 3383, (1, 10, 1, 14), + [|(FSharpErrorSeverity.Error, 3383, (1, 10, 1, 14), "A '}' character must be escaped (by doubling) in an interpolated string.")|] [] @@ -847,7 +835,7 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3 let code = "let x1 = @$\"}\"" CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpDiagnosticSeverity.Error, 3383, (1, 10, 1, 15), + [|(FSharpErrorSeverity.Error, 3383, (1, 10, 1, 15), "A '}' character must be escaped (by doubling) in an interpolated string.")|] [] @@ -855,7 +843,7 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3 let code = "let x1 = $\"\"\"}\"\"\"" CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpDiagnosticSeverity.Error, 3383, (1, 10, 1, 18), + [|(FSharpErrorSeverity.Error, 3383, (1, 10, 1, 18), "A '}' character must be escaped (by doubling) in an interpolated string.")|] [] @@ -863,7 +851,7 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3 let code = "let x1 = $\"{0}}\"" CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpDiagnosticSeverity.Error, 3383, (1, 14, 1, 17), + [|(FSharpErrorSeverity.Error, 3383, (1, 14, 1, 17), "A '}' character must be escaped (by doubling) in an interpolated string.")|] [] @@ -871,5 +859,5 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3 let code = "let x1 = \"hello \\\n world\", foo" CompilerAssert.TypeCheckWithErrorsAndOptions [| |] code - [|(FSharpDiagnosticSeverity.Error, 39, (2, 14, 2, 17), - "The value or constructor 'foo' is not defined. Maybe you want one of the following:\n floor")|] + [|(FSharpErrorSeverity.Error, 39, (2, 14, 2, 17), + "The value or constructor 'foo' is not defined. Maybe you want one of the following:\n floor")|] \ No newline at end of file diff --git a/tests/fsharp/Compiler/Language/StructActivePatternTests.fs b/tests/fsharp/Compiler/Language/StructActivePatternTests.fs deleted file mode 100644 index c4c4162fc9a..00000000000 --- a/tests/fsharp/Compiler/Language/StructActivePatternTests.fs +++ /dev/null @@ -1,205 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.UnitTests - -open NUnit.Framework -open FSharp.Compiler.Diagnostics -open FSharp.Test.Utilities - -[] -module StructActivePatternTests = - - let private pass = CompilerAssert.PassWithOptions [| "--langversion:preview" |] - let private fail = CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:preview" |] - let private run src = CompilerAssert.CompileExeAndRunWithOptions [| "--langversion:preview" |] (""" -let fail msg = - printfn "%s" msg - failwith msg -""" + src) - - [] - let ``Partial active pattern returns Option`1`` () = - pass "let (|Foo|_|) x = None" - - [] - let ``Partial struct active pattern returns ValueOption`1`` () = - pass "[] let (|P1|_|) x = ValueNone" - - [] - let ``StructAttribute can be placed at the active pattern return type annotation`` () = - pass - """ -let (|P1|_|) x: [] _ = ValueNone -let (|P2|_|) x: [] _ = ValueNone - """ - - [] - let ``Partial struct active pattern results can be retrieved`` () = - run """ -[] -type T1 = { v1: int } -and T2 = - | T2C1 of int * string - | T2C2 of T1 * T2 -and [] T3 = { v3: T2 } -and T4() = - let mutable _v4 = { v3 = T2C2({v1=0}, T2C1(1, "hey")) } - member __.v4 with get() = _v4 and set (x) = _v4 <- x - -[] -let (|P1|_|) = - function - | 0 -> ValueNone - | _ -> ValueSome() - -[] -let (|P2|_|) = - function - | "foo" -> ValueNone - | _ -> ValueSome "bar" - -[] -let (|P3|_|) (x: T2) = - match x with - | T2C1(a, b) -> ValueSome(a, b) - | _ -> ValueNone - -[] -let (|P4|_|) (x: T4) = - match x.v4 with - | { v3 = T2C2 ({v1=a}, P3(b, c)) } -> ValueSome (a, b, c) - | _ -> ValueNone - -match 0, 1 with -| P1, _ -> fail "unit" -| _, P1 -> () -| _ -> fail "unit" - -match "foo", "bar" with -| P2 _, _ -> fail "string" -| _, P2("bar") -> () -| _ -> fail "string" - -let t4 = T4() -match t4 with -| P4 (0, 1, "hey") -> () -| _ -> fail "nested" - """ - - [] - let ``[] attribute is rotated to the return value``() = - run - """ -open System - -[] -type MyAttribute() = - inherit Attribute() - -let extract xs = - xs - |> Seq.map (fun x -> x.GetType().Name) - |> List.ofSeq - |> FSharp.Core.String.concat "," - -[] -let Fn () = () - -let method = Fn.GetType() - .DeclaringType - .GetMethod("Fn") - -let ret_attrs = method.ReturnTypeCustomAttributes - .GetCustomAttributes(false) - |> extract - -let binding_attrs = method.GetCustomAttributes(false) - |> extract - -match ret_attrs, binding_attrs with -| "MyAttribute", "" -> () -| _ -> fail $"ret_attrs = {ret_attrs}, binding_attrs = {binding_attrs} method = {method}" - """ - [] - let ``Implicitly-targeted attribute on let binding do not target return``() = - run - """ -open System - -[] -type MyAttribute() = - inherit Attribute() - -let extract xs = - xs - |> Seq.map (fun x -> x.GetType().Name) - |> List.ofSeq - |> FSharp.Core.String.concat "," - -[] -let Fn () = () - -let method = Fn.GetType() - .DeclaringType - .GetMethod("Fn") - -let ret_attrs = method.ReturnTypeCustomAttributes - .GetCustomAttributes(false) - |> extract - -let binding_attrs = method.GetCustomAttributes(false) - |> extract - -match ret_attrs, binding_attrs with -| "", "MyAttribute" -> () -| _ -> fail $"ret_attrs = {ret_attrs}, binding_attrs = {binding_attrs} method = {method}" - """ - - -// negative tests - - [] - let ``Struct active pattern (no preview)`` () = - CompilerAssert.TypeCheckWithErrorsAndOptions [| |] - """ -[] -let (|Foo|_|) x = ValueNone - """ - [|(FSharpDiagnosticSeverity.Error, 3350, (2, 1, 3, 16), - "Feature 'struct representation for active patterns' is not available in F# 5.0. Please use language version 'preview' or greater.")|] - - [] - let ``StructAttribute must explicitly target active pattern return value`` () = - fail - """ -[] -let (|Foo|_|) x = ValueNone -""" - [|(FSharpDiagnosticSeverity.Error, 842, (2, 3, 2, 9), - "This attribute is not valid for use on this language element"); - (FSharpDiagnosticSeverity.Error, 1, (2, 1, 3, 16), - "This expression was expected to have type - ''a option' -but here has type - ''b voption' ")|] - - [] - let ``StructAttribute not allowed on other bindings than partial active pattern definitions`` () = - fail - """ -[] -let x = 1 - -[] -let f x = x - -[] -let (|A|B|) x = A -""" - [|(FSharpDiagnosticSeverity.Error, 3385, (2, 1, 3, 6), - "The use of '[]' on values, functions and methods is only allowed on partial active pattern definitions") - (FSharpDiagnosticSeverity.Error, 3385, (5, 1, 6, 8), - "The use of '[]' on values, functions and methods is only allowed on partial active pattern definitions") - (FSharpDiagnosticSeverity.Error, 3385, (8, 1, 9, 14), - "The use of '[]' on values, functions and methods is only allowed on partial active pattern definitions")|] - diff --git a/tests/fsharp/Compiler/Language/TypeAttributeTests.fs b/tests/fsharp/Compiler/Language/TypeAttributeTests.fs index 27f8584c593..d93e135daf9 100644 --- a/tests/fsharp/Compiler/Language/TypeAttributeTests.fs +++ b/tests/fsharp/Compiler/Language/TypeAttributeTests.fs @@ -2,7 +2,7 @@ open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices [] module TypeAttributeTests = @@ -24,7 +24,7 @@ open System type String with member this.test = 42 """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 3246 (4, 1, 4, 15) "Attributes cannot be applied to type extensions." @@ -39,7 +39,7 @@ type Point = {x:int; y:int} type Point with member this.test = 42 """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 3246 (4, 1, 4, 15) "Attributes cannot be applied to type extensions." diff --git a/tests/fsharp/Compiler/Libraries/Core/Collections/IEnumerableTests.fs b/tests/fsharp/Compiler/Libraries/Core/Collections/IEnumerableTests.fs index d9671884293..a2e994bbae1 100644 --- a/tests/fsharp/Compiler/Libraries/Core/Collections/IEnumerableTests.fs +++ b/tests/fsharp/Compiler/Libraries/Core/Collections/IEnumerableTests.fs @@ -15,22 +15,22 @@ module ``IEnumerable Tests`` = type E(_c:int) = class interface System.IDisposable with - member _.Dispose () = dispose_called_in_E <- dispose_called_in_E + 1 + member __.Dispose () = dispose_called_in_E <- dispose_called_in_E + 1 end type C() = class let mutable i = 0 interface System.Collections.IEnumerator with - member _.Current with get () = new E(i) :> obj - member _.MoveNext () = + member __.Current with get () = new E(i) :> obj + member __.MoveNext () = i <- i+1 i<4 - member _.Reset () = i <- 0 + member __.Reset () = i <- 0 interface System.Collections.IEnumerable with member x.GetEnumerator () = x :> System.Collections.IEnumerator interface System.IDisposable with - member _.Dispose () = dispose_called_in_C <- dispose_called_in_C + 1 + member __.Dispose () = dispose_called_in_C <- dispose_called_in_C + 1 end end diff --git a/tests/fsharp/Compiler/Libraries/Core/Collections/ListTests.fs b/tests/fsharp/Compiler/Libraries/Core/Collections/ListTests.fs index a57dac45d17..974bc67b9bd 100644 --- a/tests/fsharp/Compiler/Libraries/Core/Collections/ListTests.fs +++ b/tests/fsharp/Compiler/Libraries/Core/Collections/ListTests.fs @@ -4,7 +4,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices [] module ``List Tests`` = @@ -18,7 +18,7 @@ module ``List Tests`` = """ List.hd [1] |> ignore """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 39 (2, 6, 2, 8) "The value, constructor, namespace or type 'hd' is not defined." @@ -34,7 +34,7 @@ List.hd [1] |> ignore """ List.tl [1] |> ignore """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 39 (2, 6, 2, 8) "The value, constructor, namespace or type 'tl' is not defined." diff --git a/tests/fsharp/Compiler/Libraries/Core/NativeInterop/StackallocTests.fs b/tests/fsharp/Compiler/Libraries/Core/NativeInterop/StackallocTests.fs index 9111f90d87b..2c0277639d8 100644 --- a/tests/fsharp/Compiler/Libraries/Core/NativeInterop/StackallocTests.fs +++ b/tests/fsharp/Compiler/Libraries/Core/NativeInterop/StackallocTests.fs @@ -4,7 +4,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices #nowarn "9" @@ -69,7 +69,7 @@ module ``Stackalloc Tests`` = let _ = NativeInterop.NativePtr.stackalloc 1 """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 1 (4, 9, 4, 43) "A generic construct requires that the type 'System.Object' is an unmanaged type" @@ -82,7 +82,7 @@ let _ = NativeInterop.NativePtr.stackalloc 1 let _ = NativeInterop.NativePtr.stackalloc 1 """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 1 (4, 9, 4, 43) "A generic construct requires that the type 'System.Collections.IEnumerable' is an unmanaged type" @@ -95,7 +95,7 @@ let _ = NativeInterop.NativePtr.stackalloc 1 let _ = NativeInterop.NativePtr.stackalloc 1 """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 1 (4, 9, 4, 43) "A generic construct requires that the type 'System.EventHandler' is an unmanaged type" @@ -143,13 +143,13 @@ let _ = NativeInterop.NativePtr.stackalloc 1 type C() = class - member _.M = 10 - member _.N(x) = x + 1 + member __.M = 10 + member __.N(x) = x + 1 end let _ = NativeInterop.NativePtr.stackalloc 1 """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 1 (10, 9, 10, 43) "A generic construct requires that the type 'C' is an unmanaged type" @@ -164,7 +164,7 @@ type R = { A : int } let _ = NativeInterop.NativePtr.stackalloc 1 """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 1 (6, 9, 6, 43) "A generic construct requires that the type 'R' is an unmanaged type" diff --git a/tests/fsharp/Compiler/Libraries/Core/Operators/AbsTests.fs b/tests/fsharp/Compiler/Libraries/Core/Operators/AbsTests.fs index 826bafd33a3..806c93b7dba 100644 --- a/tests/fsharp/Compiler/Libraries/Core/Operators/AbsTests.fs +++ b/tests/fsharp/Compiler/Libraries/Core/Operators/AbsTests.fs @@ -3,7 +3,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices open FSharp.Test.Utilities [] @@ -26,7 +26,7 @@ module ``Abs Tests`` = """ abs -1uy |> ignore """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 1 (2, 6, 2, 9) "The type 'byte' does not support the operator 'Abs'" @@ -37,7 +37,7 @@ abs -1uy |> ignore """ abs -1us |> ignore """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 1 (2, 6, 2, 9) "The type 'uint16' does not support the operator 'Abs'" @@ -48,7 +48,7 @@ abs -1us |> ignore """ abs -1ul |> ignore """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 1 (2, 6, 2, 9) "The type 'uint32' does not support the operator 'Abs'" @@ -57,7 +57,7 @@ abs -1ul |> ignore """ abs -1u |> ignore """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 1 (2, 6, 2, 8) "The type 'uint32' does not support the operator 'Abs'" @@ -68,7 +68,7 @@ abs -1u |> ignore """ abs -1un |> ignore """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 1 (2, 6, 2, 9) "The type 'unativeint' does not support the operator 'Abs'" @@ -79,7 +79,7 @@ abs -1un |> ignore """ abs -1uL |> ignore """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 1 (2, 6, 2, 9) "The type 'uint64' does not support the operator 'Abs'" @@ -88,7 +88,7 @@ abs -1uL |> ignore """ abs -1UL |> ignore """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 1 (2, 6, 2, 9) "The type 'uint64' does not support the operator 'Abs'" \ No newline at end of file diff --git a/tests/fsharp/Compiler/Libraries/Core/Operators/HashTests.fs b/tests/fsharp/Compiler/Libraries/Core/Operators/HashTests.fs index b5b7f8af3d9..8958cd5b8e9 100644 --- a/tests/fsharp/Compiler/Libraries/Core/Operators/HashTests.fs +++ b/tests/fsharp/Compiler/Libraries/Core/Operators/HashTests.fs @@ -3,7 +3,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices open FSharp.Test.Utilities [] @@ -20,7 +20,7 @@ module ``Hash Tests`` = """ hash id |> ignore """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 1 (2, 6, 2, 8) "The type '('a -> 'a)' does not support the 'equality' constraint because it is a function type" diff --git a/tests/fsharp/Compiler/Libraries/Core/Operators/SignTests.fs b/tests/fsharp/Compiler/Libraries/Core/Operators/SignTests.fs index 158131e2ca8..751e535d531 100644 --- a/tests/fsharp/Compiler/Libraries/Core/Operators/SignTests.fs +++ b/tests/fsharp/Compiler/Libraries/Core/Operators/SignTests.fs @@ -3,7 +3,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices open FSharp.Test.Utilities [] @@ -42,7 +42,7 @@ module ``Sign Tests`` = """ sign 0uy |> ignore """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 1 (2, 6, 2, 9) "The type 'byte' does not support the operator 'get_Sign'" @@ -53,7 +53,7 @@ sign 0uy |> ignore """ sign 0us |> ignore """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 1 (2, 6, 2, 9) "The type 'uint16' does not support the operator 'get_Sign'" @@ -64,7 +64,7 @@ sign 0us |> ignore """ sign 0u |> ignore """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 1 (2, 6, 2, 8) "The type 'uint32' does not support the operator 'get_Sign'" @@ -75,7 +75,7 @@ sign 0u |> ignore """ sign 0uL |> ignore """ - FSharpDiagnosticSeverity.Error + FSharpErrorSeverity.Error 1 (2, 6, 2, 9) "The type 'uint64' does not support the operator 'get_Sign'" \ No newline at end of file diff --git a/tests/fsharp/Compiler/Libraries/Core/Operators/StringTests.fs b/tests/fsharp/Compiler/Libraries/Core/Operators/StringTests.fs index ad54fd0940f..dbb691fb35b 100644 --- a/tests/fsharp/Compiler/Libraries/Core/Operators/StringTests.fs +++ b/tests/fsharp/Compiler/Libraries/Core/Operators/StringTests.fs @@ -12,7 +12,7 @@ module ``String Tests`` = let mutable x = x let mutable y = y - member _.Sum () = x + y + member __.Sum () = x + y interface IFormattable with member x.ToString (format: string, _ : IFormatProvider) = diff --git a/tests/fsharp/Compiler/Libraries/Core/Reflection/PreComputedTupleConstructorTests.fs b/tests/fsharp/Compiler/Libraries/Core/Reflection/PreComputedTupleConstructorTests.fs index 6b2a0c0752d..cd24ea20106 100644 --- a/tests/fsharp/Compiler/Libraries/Core/Reflection/PreComputedTupleConstructorTests.fs +++ b/tests/fsharp/Compiler/Libraries/Core/Reflection/PreComputedTupleConstructorTests.fs @@ -25,4 +25,4 @@ module ``PreComputedTupleConstructor Tests`` = let testDelegate = TestDelegate (fun () -> Reflection.FSharpValue.PreComputeTupleConstructor(typeof) [| box "text"; box 12; |] |> ignore) - Assert.Throws testDelegate |> ignore \ No newline at end of file + Assert.Throws testDelegate |> ignore \ No newline at end of file diff --git a/tests/fsharp/Compiler/Regressions/NullableOptionalRegressionTests.fs b/tests/fsharp/Compiler/Regressions/NullableOptionalRegressionTests.fs index 26391ffa1c3..93970223ce5 100644 --- a/tests/fsharp/Compiler/Regressions/NullableOptionalRegressionTests.fs +++ b/tests/fsharp/Compiler/Regressions/NullableOptionalRegressionTests.fs @@ -33,66 +33,3 @@ let test () = |> typecheck |> shouldSucceed |> ignore - - [] - let ``Method should infer 'z' correctly``() = - let fsSrc = - """ -namespace FSharpTest - -open System - -type Test() = class end - -type Test with - - static member nullableE (encoder, x: Nullable<'a>) = if x.HasValue then encoder x.Value else Test() - static member nullable codec z = Test.nullableE(codec, z) - """ - FSharp fsSrc - |> withLangVersionPreview - |> typecheck - |> shouldSucceed - |> ignore - - [] - let ``Method should infer correctly``() = - let fsSrc = - """ -namespace FSharpTest - -open System - -type Test() = class end - -type Test with - - static member nullableE encoder (x: Nullable<'a>) = if x.HasValue then encoder x.Value else Test() - static member nullable codec = Test.nullableE codec - """ - FSharp fsSrc - |> withLangVersionPreview - |> typecheck - |> shouldSucceed - |> ignore - - [] - let ``Method should infer correctly 2``() = - let fsSrc = - """ -namespace FSharpTest - -open System - -type Test() = class end - -type Test with - - static member nullableE encoder (x: Nullable) = if x.HasValue then encoder x.Value else Test() - static member nullable codec = Test.nullableE codec - """ - FSharp fsSrc - |> withLangVersionPreview - |> typecheck - |> shouldSucceed - |> ignore diff --git a/tests/fsharp/Compiler/Service/MultiProjectTests.fs b/tests/fsharp/Compiler/Service/MultiProjectTests.fs deleted file mode 100644 index 6b4bedc74f0..00000000000 --- a/tests/fsharp/Compiler/Service/MultiProjectTests.fs +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.UnitTests - -open System -open System.IO -open FSharp.Compiler.Diagnostics -open NUnit.Framework -open FSharp.Test.Utilities -open FSharp.Test.Utilities.Utilities -open FSharp.Test.Utilities.Compiler -open FSharp.Tests -open FSharp.Compiler.CodeAnalysis -open Microsoft.CodeAnalysis -open Microsoft.CodeAnalysis.CSharp -open FSharp.Compiler.Text - -[] -module MultiProjectTests = - - let AssertInMemoryCSharpReferenceIsValid () = - let csSrc = - """ -namespace CSharpTest -{ - public class CSharpClass - { - } -} - """ - - let csOptions = CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary) - let csSyntax = CSharpSyntaxTree.ParseText(csSrc) - let csReferences = TargetFrameworkUtil.getReferences TargetFramework.NetStandard20 - let cs = CSharpCompilation.Create("csharp_test.dll", references = csReferences.As(), syntaxTrees = [csSyntax], options = csOptions) - - let ms = new MemoryStream() - let getStream = - fun ct -> - cs.Emit(ms, cancellationToken = ct) |> ignore - ms.Position <- 0L - ms :> Stream - |> Some - - let csRefProj = FSharpReferencedProject.CreatePortableExecutable("""Z:\csharp_test.dll""", DateTime.UtcNow, getStream) - - let fsOptions = CompilerAssert.DefaultProjectOptions - let fsOptions = - { fsOptions with - ProjectId = Some(Guid.NewGuid().ToString()) - OtherOptions = Array.append fsOptions.OtherOptions [|"""-r:Z:\csharp_test.dll"""|] - ReferencedProjects = [|csRefProj|] } - - let fsText = - """ -module FSharpTest - -open CSharpTest - -let test() = - CSharpClass() - """ - |> SourceText.ofString - let _, checkAnswer = - CompilerAssert.Checker.ParseAndCheckFileInProject("test.fs", 0, fsText, fsOptions) - |> Async.RunSynchronously - - - match checkAnswer with - | FSharpCheckFileAnswer.Aborted -> failwith "check file aborted" - | FSharpCheckFileAnswer.Succeeded(checkResults) -> - Assert.shouldBeEmpty(checkResults.Diagnostics) - WeakReference(ms) - - [] - let ``Using a CSharp reference project in-memory``() = - AssertInMemoryCSharpReferenceIsValid() |> ignore - - [] - let ``Using a CSharp reference project in-memory and it gets GCed``() = - let weakRef = AssertInMemoryCSharpReferenceIsValid() - CompilerAssert.Checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() - GC.Collect(2, GCCollectionMode.Forced, true) - Assert.shouldBeFalse(weakRef.IsAlive) - - - diff --git a/tests/fsharp/Compiler/Service/SignatureGenerationTests.fs b/tests/fsharp/Compiler/Service/SignatureGenerationTests.fs deleted file mode 100644 index 3fb1a5487c8..00000000000 --- a/tests/fsharp/Compiler/Service/SignatureGenerationTests.fs +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.UnitTests - -open FSharp.Compiler.Diagnostics -open NUnit.Framework -open FSharp.Test.Utilities -open FSharp.Test.Utilities.Utilities -open FSharp.Test.Utilities.Compiler -open FSharp.Tests - -[] -module SignatureGenerationTests = - - let sigText (checkResults: FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults) = - match checkResults.GenerateSignature() with - | None -> failwith "Unable to generate signature text." - | Some text -> text - - let sigShouldBe (expected: string) src = - let text = - FSharp src - |> withLangVersion50 - |> typecheckResults - |> sigText - - let actual = text.ToString() - let expected2 = expected.Replace("\r\n", "\n") - Assert.shouldBeEquivalentTo expected2 actual - - [] - let ``can generate sigs with comments`` () = - """ -/// namespace comments -namespace Sample - -/// exception comments -exception MyEx of reason: string - -/// module-level docs -module Inner = - /// type-level docs - type Facts - /// primary ctor docs - (name: string) = - /// constructor-level docs - new() = Facts("default name") - /// member-level docs - member x.blah() = [1;2;3] - /// auto-property-level docs - member val Name = name with get, set - - /// module-level binding docs - let module_member = () - - /// record docs - type TestRecord = - { - /// record field docs - RecordField: int - } - /// record member docs - member x.Data = 1 - /// static record member docs - static member Foo = true - - /// union docs - type TestUnion = - /// docs for first case - | FirstCase of thing: int - /// union member - member x.Thing = match x with | FirstCase thing -> thing - """ - |> sigShouldBe """namespace Sample - /// exception comments - exception MyEx of reason: string - /// module-level docs - module Inner = begin - /// type-level docs - type Facts = - /// constructor-level docs - new : unit -> Facts - /// primary ctor docs - new : name:string -> Facts - /// member-level docs - member blah : unit -> int list - /// auto-property-level docs - member Name : string - /// module-level binding docs - val module_member : unit - /// record docs - type TestRecord = - { /// record field docs - RecordField: int } - with - /// record member docs - member Data : int - /// static record member docs - static member Foo : bool - end - /// union docs - type TestUnion = - /// docs for first case - | FirstCase of thing: int - with - /// union member - member Thing : int - end - end""" \ No newline at end of file diff --git a/tests/fsharp/Compiler/SourceTextTests.fs b/tests/fsharp/Compiler/SourceTextTests.fs index 1111039c304..e32647195b0 100644 --- a/tests/fsharp/Compiler/SourceTextTests.fs +++ b/tests/fsharp/Compiler/SourceTextTests.fs @@ -5,7 +5,6 @@ namespace FSharp.Compiler.UnitTests open System open NUnit.Framework -open FSharp.Compiler.Diagnostics open FSharp.Compiler.Text [] diff --git a/tests/fsharp/Compiler/Stress/LargeExprTests.fs b/tests/fsharp/Compiler/Stress/LargeExprTests.fs index c0c8e69cdaa..9be3574c000 100644 --- a/tests/fsharp/Compiler/Stress/LargeExprTests.fs +++ b/tests/fsharp/Compiler/Stress/LargeExprTests.fs @@ -984,6 +984,36 @@ type TestRecord = test968: int test969: int test970: int + test971: int + test972: int + test973: int + test974: int + test975: int + test976: int + test977: int + test978: int + test979: int + test980: int + test981: int + test982: int + test983: int + test984: int + test985: int + test986: int + test987: int + test988: int + test989: int + test990: int + test991: int + test992: int + test993: int + test994: int + test995: int + test996: int + test997: int + test998: int + test999: int + test1000: int } [] @@ -1966,7 +1996,36 @@ type TestRecord = test968: string test969: string test970: string - + test971: string + test972: string + test973: string + test974: string + test975: string + test976: string + test977: string + test978: string + test979: string + test980: string + test981: string + test982: string + test983: string + test984: string + test985: string + test986: string + test987: string + test988: string + test989: string + test990: string + test991: string + test992: string + test993: string + test994: string + test995: string + test996: string + test997: string + test998: string + test999: string + test1000: string } [] diff --git a/tests/fsharp/Compiler/Warnings/AssignmentWarningTests.fs b/tests/fsharp/Compiler/Warnings/AssignmentWarningTests.fs index c87ccdefd0f..c6fdb75d97f 100644 --- a/tests/fsharp/Compiler/Warnings/AssignmentWarningTests.fs +++ b/tests/fsharp/Compiler/Warnings/AssignmentWarningTests.fs @@ -4,7 +4,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices [] module ``Warnings assigning to mutable and immutable objects`` = @@ -20,7 +20,7 @@ let changeX() = x = 20 y = "test" """ - FSharpDiagnosticSeverity.Warning + FSharpErrorSeverity.Warning 20 (6, 5, 6, 11) "The result of this equality expression has type 'bool' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then mark the value 'mutable' and use the '<-' operator e.g. 'x <- expression'." @@ -36,7 +36,7 @@ let changeX() = x = 20 y = "test" """ - FSharpDiagnosticSeverity.Warning + FSharpErrorSeverity.Warning 20 (6, 5, 6, 11) "The result of this equality expression has type 'bool' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then use the '<-' operator e.g. 'x <- expression'." @@ -54,7 +54,7 @@ let changeProperty() = z.Enabled = true y = "test" """ - FSharpDiagnosticSeverity.Warning + FSharpErrorSeverity.Warning 20 (8, 5, 8, 21) "The result of this equality expression has type 'bool' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to set a value to a property, then use the '<-' operator e.g. 'z.Enabled <- expression'." @@ -74,7 +74,7 @@ let changeProperty() = x.Property2 = "20" y = "test" """ - FSharpDiagnosticSeverity.Warning + FSharpErrorSeverity.Warning 20 (10, 5, 10, 23) "The result of this equality expression has type 'bool' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to set a value to a property, then use the '<-' operator e.g. 'x.Property2 <- expression'." @@ -93,7 +93,7 @@ let changeProperty() = x.Property2 = "22" y = "test" """ - FSharpDiagnosticSeverity.Warning + FSharpErrorSeverity.Warning 20 (9, 5, 9, 23) "The result of this equality expression has type 'bool' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'." diff --git a/tests/fsharp/Compiler/Warnings/ExperimentalAttributeTests.fs b/tests/fsharp/Compiler/Warnings/ExperimentalAttributeTests.fs index d83ac8632e8..ce31ccb45e2 100644 --- a/tests/fsharp/Compiler/Warnings/ExperimentalAttributeTests.fs +++ b/tests/fsharp/Compiler/Warnings/ExperimentalAttributeTests.fs @@ -3,7 +3,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices [] module ``Validate ExperimentalAttribute and LanguageVersion`` = @@ -27,7 +27,7 @@ module TestModule = let ``ExperimentalAttribute warn when preview not specified``() = CompilerAssert.TypeCheckSingleError experimentalSource - FSharpDiagnosticSeverity.Warning + FSharpErrorSeverity.Warning 57 (7, 8, 7, 17) "Preview library feature, requires '--langversion:preview'. This warning can be disabled using '--nowarn:57' or '#nowarn \"57\"'." diff --git a/tests/fsharp/Compiler/Warnings/PatternMatchingWarningTests.fs b/tests/fsharp/Compiler/Warnings/PatternMatchingWarningTests.fs index 4aa8feb8a7d..7c371cfc2f3 100644 --- a/tests/fsharp/Compiler/Warnings/PatternMatchingWarningTests.fs +++ b/tests/fsharp/Compiler/Warnings/PatternMatchingWarningTests.fs @@ -2,7 +2,7 @@ open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices [] module PatternMatchingWarningTests = diff --git a/tests/fsharp/FSharpSuite.Tests.fsproj b/tests/fsharp/FSharpSuite.Tests.fsproj index 533bc765dc3..c67895f0e24 100644 --- a/tests/fsharp/FSharpSuite.Tests.fsproj +++ b/tests/fsharp/FSharpSuite.Tests.fsproj @@ -2,8 +2,8 @@ - net472;net5.0 - net5.0 + net472;netcoreapp3.1 + netcoreapp3.1 win-x86;win-x64 $(AssetTargetFallback);portable-net45+win8+wp8+wpa81 true @@ -25,12 +25,8 @@ - - - - @@ -42,7 +38,6 @@ - @@ -62,7 +57,6 @@ - @@ -93,7 +87,7 @@ - + diff --git a/tests/fsharp/NUnitHelpers.fs b/tests/fsharp/NUnitHelpers.fs index b80b3e54bf6..6af423d9b7c 100644 --- a/tests/fsharp/NUnitHelpers.fs +++ b/tests/fsharp/NUnitHelpers.fs @@ -2,9 +2,6 @@ namespace NUnit.Framework module Assert = - [] - do() - let inline fail message = Assert.Fail message let inline failf fmt = Printf.kprintf fail fmt diff --git a/tests/fsharp/TypeProviderTests.fs b/tests/fsharp/TypeProviderTests.fs index 971960ddcd9..4b26147b5eb 100644 --- a/tests/fsharp/TypeProviderTests.fs +++ b/tests/fsharp/TypeProviderTests.fs @@ -7,7 +7,7 @@ #load "../FSharp.Test.Utilities/TestFramework.fs" #load "single-test.fs" #else -[] +[] module FSharp.Test.FSharpSuite.TypeProviderTests #endif @@ -19,8 +19,6 @@ open TestFramework open Scripting open SingleTest -open FSharp.Compiler.IO - #if !NETCOREAPP // All tests which do a manual invoke of the F# compiler are disabled @@ -34,11 +32,11 @@ let FSI_BASIC = FSI_FILE #endif let inline getTestsDirectory dir = __SOURCE_DIRECTORY__ ++ dir -let testConfig = getTestsDirectory >> testConfig +let testConfig' = getTestsDirectory >> testConfig [] let diamondAssembly () = - let cfg = testConfig "typeProviders/diamondAssembly" + let cfg = testConfig' "typeProviders/diamondAssembly" rm cfg "provider.dll" @@ -74,14 +72,14 @@ let diamondAssembly () = [] let globalNamespace () = - let cfg = testConfig "typeProviders/globalNamespace" + let cfg = testConfig' "typeProviders/globalNamespace" csc cfg """/out:globalNamespaceTP.dll /debug+ /target:library /r:netstandard.dll /r:"%s" """ cfg.FSCOREDLLPATH ["globalNamespaceTP.cs"] fsc cfg "%s /debug+ /r:globalNamespaceTP.dll /optimize-" cfg.fsc_flags ["test.fsx"] let helloWorld p = - let cfg = testConfig "typeProviders/helloWorld" + let cfg = testConfig' "typeProviders/helloWorld" fsc cfg "%s" "--out:provided1.dll -g -a" [".." ++ "helloWorld" ++ "provided.fs"] @@ -156,7 +154,7 @@ let ``helloWorld fsi`` () = helloWorld FSI_STDIN [] let helloWorldCSharp () = - let cfg = testConfig "typeProviders/helloWorldCSharp" + let cfg = testConfig' "typeProviders/helloWorldCSharp" rm cfg "magic.dll" @@ -204,9 +202,8 @@ let helloWorldCSharp () = [] [] [] -[] let ``negative type provider tests`` (name:string) = - let cfg = testConfig "typeProviders/negTests" + let cfg = testConfig' "typeProviders/negTests" let dir = cfg.Directory if requireENCulture () then @@ -244,13 +241,12 @@ let ``negative type provider tests`` (name:string) = let preprocess name pref = let dirp = (dir |> Commands.pathAddBackslash) do - FileSystem.OpenFileForReadShim(sprintf "%s%s.%sbslpp" dirp name pref) - .ReadAllText() - .Replace("", getfullpath cfg (sprintf "provider_%s.dll" name)) - .Replace("",dirp) - .Replace("",sprintf "file:///%s" dirp) - |> fun txt -> FileSystem.OpenFileForWriteShim(sprintf "%s%s.%sbsl" dirp name pref).Write(txt) - + File.ReadAllText(sprintf "%s%s.%sbslpp" dirp name pref) + .Replace("", getfullpath cfg (sprintf "provider_%s.dll" name)) + .Replace("",dirp) + .Replace("",sprintf "file:///%s" dirp) + |> fun txt -> File.WriteAllText(sprintf "%s%s.%sbsl" dirp name pref,txt) + if name = "ProviderAttribute_EmptyConsume" || name = "providerAttributeErrorConsume" then () else fsc cfg "--define:%s --out:provider_%s.dll -a" name name ["provider.fsx"] @@ -261,8 +257,8 @@ let ``negative type provider tests`` (name:string) = SingleTest.singleNegTest cfg name let splitAssembly subdir project = - let subdir = getTestsDirectory subdir - let cfg = testConfig project + + let cfg = testConfig' project let clean() = rm cfg "providerDesigner.dll" @@ -334,16 +330,17 @@ let splitAssembly subdir project = end clean() +let splitAssembly' = getTestsDirectory >> splitAssembly [] -let splitAssemblyTools () = splitAssembly "tools" "typeProviders/splitAssemblyTools" +let splitAssemblyTools () = splitAssembly' "tools" "typeProviders/splitAssemblyTools" [] -let splitAssemblyTypeProviders () = splitAssembly "typeproviders" "typeProviders/splitAssemblyTypeproviders" +let splitAssemblyTypeProviders () = splitAssembly' "typeproviders" "typeProviders/splitAssemblyTypeproviders" [] let wedgeAssembly () = - let cfg = testConfig "typeProviders/wedgeAssembly" + let cfg = testConfig' "typeProviders/wedgeAssembly" rm cfg "provider.dll" diff --git a/tests/fsharp/core/innerpoly/test.fsx b/tests/fsharp/core/innerpoly/test.fsx index 752ba98a3dd..657b8c2e81a 100644 --- a/tests/fsharp/core/innerpoly/test.fsx +++ b/tests/fsharp/core/innerpoly/test.fsx @@ -389,56 +389,6 @@ module InnerGenericBindingsInComputationExpressions = begin f() end -module LocalTypeFunctionRequiredForWitnessPassingOfGenericInnerFunctionsConstrainedByMemberConstraints = - let inline clamp16 v = uint16 (max 0. (min 65535. v)) - let inline clamp8 v = uint8 (max 0. (min 255. v)) - - type Clampage = - static member inline FromFloat (_ : byte, _ : Clampage) = fun (x : float) -> clamp8 x - static member inline FromFloat (_ : uint16, _ : Clampage) = fun (x : float) -> clamp16 x - - static member inline Invoke (x: float) : 'Num = - let inline call2 (a: ^a, b: ^b) = ((^a or ^b) : (static member FromFloat : _*_ -> _) (b, a)) - let inline call (a: 'a) = fun (x: 'x) -> call2 (a, Unchecked.defaultof<'r>) x : 'r - call Unchecked.defaultof x - - let inline clamp x = Clampage.Invoke x - let x1 : byte = clamp 3.0 - let x2 : uint16 = clamp 3.0 - let x3 : byte = clamp 257.0 - check "clecqwe1" x1 3uy - check "clecqwe2" x2 3us - check "clecqwe3" x3 255uy - -// Same as the above but capturing an extra constrained free type variable 'Free -module LocalTypeFunctionRequiredForWitnessPassingOfGenericInnerFunctionsConstrainedByMemberConstraints2 = - let inline clamp16 v = uint16 (max 0. (min 65535. v)) - let inline clamp8 v = uint8 (max 0. (min 255. v)) - - type Clampage = - static member inline FromFloat (_ : byte, _ : Clampage) = fun (x : float) -> clamp8 x - static member inline FromFloat (_ : uint16, _ : Clampage) = fun (x : float) -> clamp16 x - - static member inline Invoke (x: float) (free: 'Free) : 'Num * 'Free = - let inline call2 (a: ^a, b: ^b) = ((^a or ^b) : (static member FromFloat : _*_ -> _) (b, a)) - let inline call (a: 'a) = (fun (x: 'x) -> call2 (a, Unchecked.defaultof<'r>) x : 'r), free + free - let f, info = call Unchecked.defaultof - f x, info - - let inline clamp x free = Clampage.Invoke x free - let (x1a1: byte, x1a2: int64) = clamp 3.0 1L - let (x1b1: uint16, x1b2: string) = clamp 3.0 "abc" - check "clecqwea1" x1a1 3uy - check "clecqwea2" x1a2 2L - check "clecqwea3" x1b1 3us - check "clecqwea4" x1b2 "abcabc" - -module Bug10408 = - let test x = - match x with - | [| |] -> x - | _ -> x - #if TESTS_AS_APP let RUN() = !failures #else diff --git a/tests/fsharp/core/printf-interpolated/test.fsx b/tests/fsharp/core/printf-interpolated/test.fsx index b1891f31ad9..64e08fec66e 100644 --- a/tests/fsharp/core/printf-interpolated/test.fsx +++ b/tests/fsharp/core/printf-interpolated/test.fsx @@ -41,17 +41,8 @@ let _ = test "cewoui2e" (lazy(sprintf $"%o{System.Int32.MinValue}" )) "200000000 let _ = test "cewoui2r" (lazy(sprintf $"%o{0xffffffff}" )) "37777777777" let _ = test "cewoui2t" (lazy(sprintf $"%o{System.Int32.MinValue+1}")) "20000000001" let _ = test "cewoui2y" (lazy(sprintf $"%o{System.Int32.MaxValue}")) "17777777777" + let _ = test "cewoui2u" (lazy(sprintf $"%o{-1}" )) "37777777777" -let _ = test "cewoui2aB" (lazy(sprintf $"%B{0}")) "0" -let _ = test "cewoui2bB" (lazy(sprintf $"%B{0}")) "0" -let _ = test "cewoui2cB" (lazy(sprintf $"%B{5}")) "101" -let _ = test "cewoui2qB" (lazy(sprintf $"%B{8}")) "1000" -let _ = test "cewoui2wB" (lazy(sprintf $"%B{15}")) "1111" -let _ = test "cewoui2eB" (lazy(sprintf $"%B{System.Int32.MinValue}" )) "10000000000000000000000000000000" -let _ = test "cewoui2rB" (lazy(sprintf $"%B{0xffffffff}" )) "11111111111111111111111111111111" -let _ = test "cewoui2tB" (lazy(sprintf $"%B{System.Int32.MinValue+1}")) "10000000000000000000000000000001" -let _ = test "cewoui2yB" (lazy(sprintf $"%B{System.Int32.MaxValue}")) "1111111111111111111111111111111" -let _ = test "cewoui2uB" (lazy(sprintf $"%B{-1}" )) "11111111111111111111111111111111" let f z = sprintf $"%o{z}" @@ -64,20 +55,8 @@ let _ = test "cewoui2h" (lazy(f System.Int32.MinValue)) "20000000000" let _ = test "cewoui2j" (lazy(f 0xffffffff)) "37777777777" let _ = test "cewoui2lk" (lazy(f (System.Int32.MinValue+1))) "20000000001" let _ = test "cewoui2l" (lazy(f System.Int32.MaxValue)) "17777777777" -let _ = test "cewoui212" (lazy(f (-1))) "37777777777" -let fB z = sprintf $"%B{z}" - -let _ = test "cewoui2aB" (lazy(fB 0)) "0" -let _ = test "cewoui2sB" (lazy(fB 0)) "0" -let _ = test "cewoui2dB" (lazy(fB 5)) "101" -let _ = test "cewoui2fB" (lazy(fB 8)) "1000" -let _ = test "cewoui2gB" (lazy(fB 15)) "1111" -let _ = test "cewoui2hB" (lazy(fB System.Int32.MinValue)) "10000000000000000000000000000000" -let _ = test "cewoui2jB" (lazy(fB 0xffffffff)) "11111111111111111111111111111111" -let _ = test "cewoui2lkB" (lazy(fB (System.Int32.MinValue+1))) "10000000000000000000000000000001" -let _ = test "cewoui2lB" (lazy(fB System.Int32.MaxValue)) "1111111111111111111111111111111" -let _ = test "cewoui212B" (lazy(fB (-1))) "11111111111111111111111111111111" +let _ = test "cewoui212" (lazy(f (-1))) "37777777777" // check bprintf let _ = test "csd3oui2!" (lazy(let buf = new System.Text.StringBuilder() in ignore (bprintf buf $"%x{0}%x{1}"); buf.ToString())) "01" diff --git a/tests/fsharp/core/printf/test.fsx b/tests/fsharp/core/printf/test.fsx index 8ea722c9ee4..af5673500f3 100644 --- a/tests/fsharp/core/printf/test.fsx +++ b/tests/fsharp/core/printf/test.fsx @@ -58,22 +58,8 @@ let _ = test "cewoui2e" (lazy(sprintf "%o" System.Int32.MinValue)) "20000000000" let _ = test "cewoui2r" (lazy(sprintf "%o" 0xffffffff)) "37777777777" let _ = test "cewoui2t" (lazy(sprintf "%o" (System.Int32.MinValue+1))) "20000000001" let _ = test "cewoui2y" (lazy(sprintf "%o" System.Int32.MaxValue)) "17777777777" -let _ = test "cewoui2u" (lazy(sprintf "%o" (-1))) "37777777777" -let _ = test "cewoui2i" (lazy(sprintf "%o" System.UInt64.MaxValue)) "1777777777777777777777" -let _ = test "cewoui2i" (lazy(sprintf "%o" System.Int64.MinValue)) "1000000000000000000000" -let _ = test "cewoui2aB" (lazy(sprintf "%B" 0)) "0" -let _ = test "cewoui2bB" (lazy(sprintf "%B" 0)) "0" -let _ = test "cewoui2cB" (lazy(sprintf "%B" 5)) "101" -let _ = test "cewoui2qB" (lazy(sprintf "%B" 8)) "1000" -let _ = test "cewoui2wB" (lazy(sprintf "%B" 15)) "1111" -let _ = test "cewoui2eB" (lazy(sprintf "%B" System.Int32.MinValue)) "10000000000000000000000000000000" -let _ = test "cewoui2rB" (lazy(sprintf "%B" 0xffffffff)) "11111111111111111111111111111111" -let _ = test "cewoui2tB" (lazy(sprintf "%B" (System.Int32.MinValue+1))) "10000000000000000000000000000001" -let _ = test "cewoui2yB" (lazy(sprintf "%B" System.Int32.MaxValue)) "1111111111111111111111111111111" -let _ = test "cewoui2uB" (lazy(sprintf "%B" (-1))) "11111111111111111111111111111111" -let _ = test "cewoui2iB" (lazy(sprintf "%B" System.UInt64.MaxValue)) "1111111111111111111111111111111111111111111111111111111111111111" -let _ = test "cewoui2iB" (lazy(sprintf "%B" System.Int64.MinValue)) "1000000000000000000000000000000000000000000000000000000000000000" +let _ = test "cewoui2u" (lazy(sprintf "%o" (-1))) "37777777777" let f = sprintf "%o" @@ -86,20 +72,8 @@ let _ = test "cewoui2h" (lazy(f System.Int32.MinValue)) "20000000000" let _ = test "cewoui2j" (lazy(f 0xffffffff)) "37777777777" let _ = test "cewoui2lk" (lazy(f (System.Int32.MinValue+1))) "20000000001" let _ = test "cewoui2l" (lazy(f System.Int32.MaxValue)) "17777777777" -let _ = test "cewoui212" (lazy(f (-1))) "37777777777" -let fB = sprintf "%B" - -let _ = test "cewoui2a" (lazy(fB 0)) "0" -let _ = test "cewoui2s" (lazy(fB 0)) "0" -let _ = test "cewoui2d" (lazy(fB 5)) "101" -let _ = test "cewoui2f" (lazy(fB 8)) "1000" -let _ = test "cewoui2g" (lazy(fB 15)) "1111" -let _ = test "cewoui2h" (lazy(fB System.Int32.MinValue)) "10000000000000000000000000000000" -let _ = test "cewoui2j" (lazy(fB 0xffffffff)) "11111111111111111111111111111111" -let _ = test "cewoui2lk" (lazy(fB (System.Int32.MinValue+1))) "10000000000000000000000000000001" -let _ = test "cewoui2l" (lazy(fB System.Int32.MaxValue)) "1111111111111111111111111111111" -let _ = test "cewoui212" (lazy(fB (-1))) "11111111111111111111111111111111" +let _ = test "cewoui212" (lazy(f (-1))) "37777777777" // Test nothing comes out until all arguments have been applied let _ = test "csd3oui2!" (lazy(let buf = new System.Text.StringBuilder() in ignore (bprintf buf "%x%x" 0); buf.ToString())) "" @@ -115,8 +89,6 @@ let _ = test "cewoui2Z" (lazy(sprintf "%x" System.Int32.MinValue)) "80000000" let _ = test "cewoui2X" (lazy(sprintf "%x" 0xffffffff)) "ffffffff" let _ = test "cewoui2A" (lazy(sprintf "%x" (System.Int32.MinValue+1))) "80000001" let _ = test "cewoui2Q" (lazy(sprintf "%x" System.Int32.MaxValue)) "7fffffff" -let _ = test "cewoui2`" (lazy(sprintf "%x" System.UInt64.MaxValue)) "ffffffffffffffff" -let _ = test "cewoui2~" (lazy(sprintf "%x" System.Int64.MinValue)) "8000000000000000" let fx = sprintf "%x" let _ = test "cewoui2W" (lazy(fx 0)) "0" @@ -136,8 +108,6 @@ let _ = test "cewoui2v" (lazy(sprintf "%X" System.Int32.MinValue)) "80000000" let _ = test "cewoui2B" (lazy(sprintf "%X" 0xffffffff)) "FFFFFFFF" let _ = test "cewoui2N" (lazy(sprintf "%X" (System.Int32.MinValue+1))) "80000001" let _ = test "cewoui2M" (lazy(sprintf "%X" System.Int32.MaxValue)) "7FFFFFFF" -let _ = test "cewoui2," (lazy(sprintf "%X" System.UInt64.MaxValue)) "FFFFFFFFFFFFFFFF" -let _ = test "cewoui2." (lazy(sprintf "%X" System.Int64.MinValue)) "8000000000000000" let _ = test "cewou44a" (lazy(sprintf "%u" 0)) "0" let _ = test "cewou44b" (lazy(sprintf "%u" 5)) "5" @@ -147,7 +117,6 @@ let _ = test "cewou44e" (lazy(sprintf "%u" System.Int32.MinValue)) "2147483648" let _ = test "cewou44f" (lazy(sprintf "%u" 0xffffffff)) "4294967295" let _ = test "cewou44g" (lazy(sprintf "%u" (System.Int32.MinValue+1))) "2147483649" let _ = test "cewou44h" (lazy(sprintf "%u" System.Int32.MaxValue)) "2147483647" -let _ = test "cewou44i" (lazy(sprintf "%u" System.UInt64.MaxValue)) "18446744073709551615" let _ = test "cewou45a" (lazy(sprintf "%d" 0ul)) "0" let _ = test "cewou45b" (lazy(sprintf "%d" 5ul)) "5" @@ -157,7 +126,6 @@ let _ = test "cewou45e" (lazy(sprintf "%d" 2147483648ul)) "2147483648" let _ = test "cewou45f" (lazy(sprintf "%d" 4294967295ul)) "4294967295" let _ = test "cewou45g" (lazy(sprintf "%d" 2147483649ul)) "2147483649" let _ = test "cewou45h" (lazy(sprintf "%d" 2147483647ul)) "2147483647" -let _ = test "cewou45i" (lazy(sprintf "%d" System.UInt64.MaxValue)) "18446744073709551615" let _ = test "cewou46a" (lazy(sprintf "%d" 0ul)) "0" let _ = test "cewou46b" (lazy(sprintf "%d" 5ul)) "5" @@ -167,7 +135,6 @@ let _ = test "cewou46e" (lazy(sprintf "%d" 2147483648ul)) "2147483648" let _ = test "cewou46f" (lazy(sprintf "%d" 4294967295ul)) "4294967295" let _ = test "cewou46g" (lazy(sprintf "%d" 2147483649ul)) "2147483649" let _ = test "cewou46h" (lazy(sprintf "%d" 2147483647ul)) "2147483647" -let _ = test "cewou46i" (lazy(sprintf "%d" System.UInt64.MaxValue)) "18446744073709551615" let _ = test "ceew903" (lazy(sprintf "%u" System.Int64.MaxValue)) "9223372036854775807" let _ = test "ceew903" (lazy(sprintf "%u" System.Int64.MinValue)) "9223372036854775808" 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 4ae32a6ed01..32534466417 100644 --- a/tests/fsharp/core/printing/z.output.test.1000.stderr.bsl +++ b/tests/fsharp/core/printing/z.output.test.1000.stderr.bsl @@ -1,6 +1,6 @@ #blaaaaaa // blaaaaaa is not a known command;; - ^^^^^^^^^ + ^ stdin(220,1): warning FS3353: Invalid directive '#blaaaaaa ' 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 4ae32a6ed01..32534466417 100644 --- a/tests/fsharp/core/printing/z.output.test.200.stderr.bsl +++ b/tests/fsharp/core/printing/z.output.test.200.stderr.bsl @@ -1,6 +1,6 @@ #blaaaaaa // blaaaaaa is not a known command;; - ^^^^^^^^^ + ^ stdin(220,1): warning FS3353: Invalid directive '#blaaaaaa ' 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 4ae32a6ed01..32534466417 100644 --- a/tests/fsharp/core/printing/z.output.test.default.stderr.bsl +++ b/tests/fsharp/core/printing/z.output.test.default.stderr.bsl @@ -1,6 +1,6 @@ #blaaaaaa // blaaaaaa is not a known command;; - ^^^^^^^^^ + ^ stdin(220,1): warning FS3353: Invalid directive '#blaaaaaa ' 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 4ae32a6ed01..32534466417 100644 --- a/tests/fsharp/core/printing/z.output.test.off.stderr.bsl +++ b/tests/fsharp/core/printing/z.output.test.off.stderr.bsl @@ -1,6 +1,6 @@ #blaaaaaa // blaaaaaa is not a known command;; - ^^^^^^^^^ + ^ stdin(220,1): warning FS3353: Invalid directive '#blaaaaaa ' 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 4ae32a6ed01..32534466417 100644 --- a/tests/fsharp/core/printing/z.output.test.quiet.stderr.bsl +++ b/tests/fsharp/core/printing/z.output.test.quiet.stderr.bsl @@ -1,6 +1,6 @@ #blaaaaaa // blaaaaaa is not a known command;; - ^^^^^^^^^ + ^ stdin(220,1): warning FS3353: Invalid directive '#blaaaaaa ' diff --git a/tests/fsharp/core/quotes/test.fsx b/tests/fsharp/core/quotes/test.fsx index 6415c466a65..bb4223edd12 100644 --- a/tests/fsharp/core/quotes/test.fsx +++ b/tests/fsharp/core/quotes/test.fsx @@ -10,13 +10,6 @@ module Core_quotes #nowarn "57" -open System -open System.Reflection -open Microsoft.FSharp.Quotations -open Microsoft.FSharp.Quotations.Patterns -open Microsoft.FSharp.Quotations.DerivedPatterns - - let failures = ref [] let report_failure (s : string) = @@ -34,19 +27,12 @@ let check s v1 v2 = eprintf " FAILED: got %A, expected %A" v1 v2 report_failure s -let rec removeDoubleSpaces (s: string) = - let s2 = s.Replace(" ", " ") - if s = s2 then s else removeDoubleSpaces s2 -let normalizeActivePatternResults (s: string) = - System.Text.RegularExpressions.Regex(@"activePatternResult\d+").Replace(s, "activePatternResult") - -let checkStrings s (v1: string) (v2: string) = - check s - (v1.Replace("\r","").Replace("\n","") |> removeDoubleSpaces |> normalizeActivePatternResults) - (v2.Replace("\r","").Replace("\n","") |> removeDoubleSpaces |> normalizeActivePatternResults) - -let checkQuoteString s expected (q: Expr) = checkStrings s (sprintf "%A" q) expected +open System +open System.Reflection +open Microsoft.FSharp.Quotations +open Microsoft.FSharp.Quotations.Patterns +open Microsoft.FSharp.Quotations.DerivedPatterns let (|TypedValue|_|) (v : 'T) value = match value with @@ -1458,39 +1444,42 @@ end module MoreQuotationsTests = let t1 = <@@ try 1 with e when true -> 2 | e -> 3 @@> - checkStrings "vwjnkwve0-vwnio" - (sprintf "%A" t1) - """TryWith (Value (1), matchValue, - IfThenElse (Let (e, matchValue, Value (true)), - Let (e, matchValue, Value (1)), - Let (e, matchValue, Value (1))), matchValue, - IfThenElse (Let (e, matchValue, Value (true)), - Let (e, matchValue, Value (2)), - Let (e, matchValue, Value (3))))""" + printfn "t1 = %A" t1 + check "vwjnkwve0-vwnio" + (sprintf "%A" t1) + "TryWith (Value (1), matchValue, + IfThenElse (Let (e, matchValue, Value (true)), + Let (e, matchValue, Value (1)), + Let (e, matchValue, Value (1))), matchValue, + IfThenElse (Let (e, matchValue, Value (true)), + Let (e, matchValue, Value (2)), + Let (e, matchValue, Value (3))))" [] let k (x:int) = try 1 with _ when true -> 2 | e -> 3 let t2 = <@@ Map.empty.[0] @@> - checkStrings "vwjnkwve0-vwnio1" + printfn "t2 = %A" t2 + check "vwjnkwve0-vwnio1" (sprintf "%A" t2) "PropertyGet (Some (Call (None, Empty, [])), Item, [Value (0)])" let t4 = <@@ use a = new System.IO.StreamWriter(System.IO.Stream.Null) in a @@> - checkStrings "vwjnkwve0-vwnio3" + printfn "t4 = %A" t4 + check "vwjnkwve0-vwnio3" (sprintf "%A" t4) - "Let (a, NewObject (StreamWriter, FieldGet (None, Null)), + "Let (a, NewObject (StreamWriter, FieldGet (None, Null)), TryFinally (a, IfThenElse (TypeTest (IDisposable, Coerce (a, Object)), Call (Some (Call (None, UnboxGeneric, [Coerce (a, Object)])), Dispose, []), Value ())))" - checkStrings "vwjnkwve0-vwnio3fuull" + check "vwjnkwve0-vwnio3fuull" (t4.ToString(true)) - "Let (a, + "Let (a, NewObject (Void .ctor(System.IO.Stream), FieldGet (None, System.IO.Stream Null)), TryFinally (a, @@ -1503,129 +1492,47 @@ module MoreQuotationsTests = let t5 = <@@ try failwith "test" with _ when true -> 0 @@> - checkStrings "vwekwvel5" (sprintf "%A" t5) - """TryWith (Call (None, FailWith, [Value ("test")]), matchValue, - IfThenElse (Value (true), Value (1), Value (0)), matchValue, - IfThenElse (Value (true), Value (0), Call (None, Reraise, [])))""" + printfn "t5 = %A" t5 let t6 = <@@ let mutable a = 0 in a <- 2 @@> - checkStrings "vwewvwewe6" (sprintf "%A" t6) - """Let (a, Value (0), VarSet (a, Value (2)))""" + printfn "t6 = %A" t6 let f (x: _ byref) = x let t7 = <@@ let mutable a = 0 in f (&a) @@> - checkStrings "vwewvwewe7" (sprintf "%A" t7) - """Let (a, Value (0), Call (None, f, [AddressOf (a)]))""" - + printfn "t7 = %A" t7 + let t8 = <@@ for i in 1s .. 10s do printfn "%A" i @@> - checkStrings "vwewvwewe8" (sprintf "%A" t8) - """Let (inputSequence, Call (None, op_Range, [Value (1s), Value (10s)]), - Let (enumerator, Call (Some (inputSequence), GetEnumerator, []), - TryFinally (WhileLoop (Call (Some (enumerator), MoveNext, []), - Let (i, - PropertyGet (Some (enumerator), Current, - []), - Application (Let (clo1, - Call (None, - PrintFormatLine, - [Coerce (NewObject (PrintfFormat`5, - Value ("%A")), - PrintfFormat`4)]), - Lambda (arg10, - Application (clo1, - arg10))), - i))), - IfThenElse (TypeTest (IDisposable, - Coerce (enumerator, Object)), - Call (Some (Call (None, UnboxGeneric, - [Coerce (enumerator, Object)])), - Dispose, []), Value ()))))""" - - let t9() = <@@ try failwith "test" with Failure _ -> 0 @@> - checkStrings "vwewvwewe9" (sprintf "%A" (t9())) - """TryWith (Call (None, FailWith, [Value ("test")]), matchValue, - Let (activePatternResult1557, Call (None, FailurePattern, [matchValue]), - IfThenElse (UnionCaseTest (activePatternResult1557, Some), - Value (1), Value (0))), matchValue, - Let (activePatternResult1558, Call (None, FailurePattern, [matchValue]), - IfThenElse (UnionCaseTest (activePatternResult1558, Some), - Value (0), Call (None, Reraise, []))))""" + printfn "t8 = %A" t8 - let t9b = <@@ Failure "fil" @@> - checkStrings "vwewvwewe9b" (sprintf "%A" t9b) - """Call (None, Failure, [Value ("fil")])""" + let t9 = <@@ try failwith "test" with Failure _ -> 0 @@> + printfn "t9 = %A" t9 + let t9b = <@@ Failure "fil" @@> + printfn "t9b = %A" t9b let t9c = <@@ match Failure "fil" with Failure msg -> msg | _ -> "no" @@> - checkStrings "vwewvwewe9c" (sprintf "%A" t9c) - """Let (matchValue, Call (None, Failure, [Value ("fil")]), - Let (activePatternResult1564, Call (None, FailurePattern, [matchValue]), - IfThenElse (UnionCaseTest (activePatternResult1564, Some), - Let (msg, - PropertyGet (Some (activePatternResult1564), Value, - []), msg), Value ("no"))))""" + printfn "t9c = %A" t9c let t10 = <@@ try failwith "test" with Failure _ -> 0 | _ -> 1 @@> - checkStrings "vwewvwewe10" (sprintf "%A" t10) - """TryWith (Call (None, FailWith, [Value ("test")]), matchValue, - Let (activePatternResult1565, Call (None, FailurePattern, [matchValue]), - IfThenElse (UnionCaseTest (activePatternResult1565, Some), - Value (1), Value (1))), matchValue, - Let (activePatternResult1566, Call (None, FailurePattern, [matchValue]), - IfThenElse (UnionCaseTest (activePatternResult1566, Some), - Value (0), Value (1))))""" + printfn "t10 = %A" t10 let t11 = <@@ try failwith "test" with :? System.NullReferenceException -> 0 @@> - checkStrings "vwewvwewe11" (sprintf "%A" t11) - """TryWith (Call (None, FailWith, [Value ("test")]), matchValue, - IfThenElse (TypeTest (NullReferenceException, matchValue), Value (1), - Value (0)), matchValue, - IfThenElse (TypeTest (NullReferenceException, matchValue), Value (0), - Call (None, Reraise, [])))""" + printfn "t11 = %A" t11 let t12 = <@@ try failwith "test" with :? System.NullReferenceException as n -> 0 @@> - checkStrings "vwewvwewe12" (sprintf "%A" t12) - """TryWith (Call (None, FailWith, [Value ("test")]), matchValue, - IfThenElse (TypeTest (NullReferenceException, matchValue), - Let (n, Call (None, UnboxGeneric, [matchValue]), Value (1)), - Value (0)), matchValue, - IfThenElse (TypeTest (NullReferenceException, matchValue), - Let (n, Call (None, UnboxGeneric, [matchValue]), Value (0)), - Call (None, Reraise, [])))""" + printfn "t12 = %A" t12 let t13 = <@@ try failwith "test" with Failure _ -> 1 | :? System.NullReferenceException as n -> 0 @@> - checkStrings "vwewvwewe13" (sprintf "%A" t13) - """TryWith (Call (None, FailWith, [Value ("test")]), matchValue, - Let (activePatternResult1576, Call (None, FailurePattern, [matchValue]), - IfThenElse (UnionCaseTest (activePatternResult1576, Some), - Value (1), - IfThenElse (TypeTest (NullReferenceException, - matchValue), - Let (n, - Call (None, UnboxGeneric, - [matchValue]), Value (1)), - Value (0)))), matchValue, - Let (activePatternResult1577, Call (None, FailurePattern, [matchValue]), - IfThenElse (UnionCaseTest (activePatternResult1577, Some), - Value (1), - IfThenElse (TypeTest (NullReferenceException, - matchValue), - Let (n, - Call (None, UnboxGeneric, - [matchValue]), Value (0)), - Call (None, Reraise, [])))))""" + printfn "t13 = %A" t13 let t14 = <@@ try failwith "test" with _ when true -> 0 @@> - checkStrings "vwewvwewe13" (sprintf "%A" t14) - """TryWith (Call (None, FailWith, [Value ("test")]), matchValue, - IfThenElse (Value (true), Value (1), Value (0)), matchValue, - IfThenElse (Value (true), Value (0), Call (None, Reraise, [])))""" + printfn "t14 = %A" t14 - let _ = <@@ let x : int option = None in x.IsSome @@> |> checkQuoteString "fqekhec1" """Let (x, NewUnionCase (None), Call (None, get_IsSome, [x]))""" - let _ = <@@ let x : int option = None in x.IsNone @@> |> checkQuoteString "fqekhec2" """Let (x, NewUnionCase (None), Call (None, get_IsNone, [x]))""" - let _ = <@@ let x : int option = None in x.Value @@> |> checkQuoteString "fqekhec3" """Let (x, NewUnionCase (None), PropertyGet (Some (x), Value, []))""" - let _ = <@@ let x : int option = None in x.ToString() @@> |> checkQuoteString "fqekhec4" """Let (x, NewUnionCase (None), Call (Some (x), ToString, []))""" + let _ = <@@ let x : int option = None in x.IsSome @@> |> printfn "quote = %A" + let _ = <@@ let x : int option = None in x.IsNone @@> |> printfn "quote = %A" + let _ = <@@ let x : int option = None in x.Value @@> |> printfn "quote = %A" + let _ = <@@ let x : int option = None in x.ToString() @@> |> printfn "quote = %A" module Extensions = type System.Object with @@ -1655,63 +1562,63 @@ module MoreQuotationsTests = member x.Int32ExtensionIndexer2 with set(idx:int) (v:int) = () let v = new obj() - let _ = <@@ v.ExtensionMethod0() @@> |> checkQuoteString "fqekhec5" """Call (None, Object.ExtensionMethod0, [PropertyGet (None, v, [])])""" - let _ = <@@ v.ExtensionMethod1() @@> |> checkQuoteString "fqekhec6" """Call (None, Object.ExtensionMethod1, [PropertyGet (None, v, [])])""" - let _ = <@@ v.ExtensionMethod2(3) @@> |> checkQuoteString "fqekhec7" """Call (None, Object.ExtensionMethod2, [PropertyGet (None, v, []), Value (3)])""" - let _ = <@@ v.ExtensionMethod3(3) @@> |> checkQuoteString "fqekhec8" """Call (None, Object.ExtensionMethod3, [PropertyGet (None, v, []), Value (3)])""" - let _ = <@@ v.ExtensionMethod4(3,4) @@> |> checkQuoteString "fqekhec9" """Call (None, Object.ExtensionMethod4, [PropertyGet (None, v, []), Value (3), Value (4)])""" - let _ = <@@ v.ExtensionMethod5(3,4) @@> |> checkQuoteString "fqekhec10" """Call (None, Object.ExtensionMethod5, [PropertyGet (None, v, []), NewTuple (Value (3), Value (4))])""" - let _ = <@@ v.ExtensionProperty1 @@> |> checkQuoteString "fqekhec11" """Call (None, Object.get_ExtensionProperty1, [PropertyGet (None, v, [])])""" - let _ = <@@ v.ExtensionProperty2 @@> |> checkQuoteString "fqekhec12" """Call (None, Object.get_ExtensionProperty2, [PropertyGet (None, v, [])])""" - let _ = <@@ v.ExtensionProperty3 <- 4 @@> |> checkQuoteString "fqekhec13" """Call (None, Object.set_ExtensionProperty3, [PropertyGet (None, v, []), Value (4)])""" - let _ = <@@ v.ExtensionIndexer1(3) @@> |> checkQuoteString "fqekhec14" """Call (None, Object.get_ExtensionIndexer1, [PropertyGet (None, v, []), Value (3)])""" - let _ = <@@ v.ExtensionIndexer2(3) <- 4 @@> |> checkQuoteString "fqekhec15" """Call (None, Object.set_ExtensionIndexer2, [PropertyGet (None, v, []), Value (3), Value (4)])""" - - let _ = <@@ v.ExtensionMethod0 @@> |> checkQuoteString "fqekhec16" """Lambda (unitVar, Call (None, Object.ExtensionMethod0, [PropertyGet (None, v, [])]))""" - let _ = <@@ v.ExtensionMethod1 @@> |> checkQuoteString "fqekhec17" """Lambda (unitVar, Call (None, Object.ExtensionMethod1, [PropertyGet (None, v, [])]))""" - let _ = <@@ v.ExtensionMethod2 @@> |> checkQuoteString "fqekhec18" """Lambda (arg00, Call (None, Object.ExtensionMethod2, [PropertyGet (None, v, []), arg00]))""" - let _ = <@@ v.ExtensionMethod3 @@> |> checkQuoteString "fqekhec19" """Lambda (arg00, Call (None, Object.ExtensionMethod3, [PropertyGet (None, v, []), arg00]))""" - let _ = <@@ v.ExtensionMethod4 @@> |> checkQuoteString "fqekhec20" """Lambda (tupledArg, Let (arg00, TupleGet (tupledArg, 0), Let (arg01, TupleGet (tupledArg, 1), Call (None, Object.ExtensionMethod4, [PropertyGet (None, v, []), arg00, arg01]))))""" - let _ = <@@ v.ExtensionMethod5 @@> |> checkQuoteString "fqekhec21" """Lambda (arg00, Call (None, Object.ExtensionMethod5, [PropertyGet (None, v, []), arg00]))""" + let _ = <@@ v.ExtensionMethod0() @@> |> printfn "quote = %A" + let _ = <@@ v.ExtensionMethod1() @@> |> printfn "quote = %A" + let _ = <@@ v.ExtensionMethod2(3) @@> |> printfn "quote = %A" + let _ = <@@ v.ExtensionMethod3(3) @@> |> printfn "quote = %A" + let _ = <@@ v.ExtensionMethod4(3,4) @@> |> printfn "quote = %A" + let _ = <@@ v.ExtensionMethod5(3,4) @@> |> printfn "quote = %A" + let _ = <@@ v.ExtensionProperty1 @@> |> printfn "quote = %A" + let _ = <@@ v.ExtensionProperty2 @@> |> printfn "quote = %A" + let _ = <@@ v.ExtensionProperty3 <- 4 @@> |> printfn "quote = %A" + let _ = <@@ v.ExtensionIndexer1(3) @@> |> printfn "quote = %A" + let _ = <@@ v.ExtensionIndexer2(3) <- 4 @@> |> printfn "quote = %A" + + let _ = <@@ v.ExtensionMethod0 @@> |> printfn "quote = %A" + let _ = <@@ v.ExtensionMethod1 @@> |> printfn "quote = %A" + let _ = <@@ v.ExtensionMethod2 @@> |> printfn "quote = %A" + let _ = <@@ v.ExtensionMethod3 @@> |> printfn "quote = %A" + let _ = <@@ v.ExtensionMethod4 @@> |> printfn "quote = %A" + let _ = <@@ v.ExtensionMethod5 @@> |> printfn "quote = %A" let v2 = 3 - let _ = <@@ v2.ExtensionMethod0() @@> |> checkQuoteString "fqekhec22" """Call (None, Object.ExtensionMethod0, [Coerce (PropertyGet (None, v2, []), Object)])""" - let _ = <@@ v2.ExtensionMethod1() @@> |> checkQuoteString "fqekhec23" """Call (None, Object.ExtensionMethod1, [Coerce (PropertyGet (None, v2, []), Object)])""" - let _ = <@@ v2.ExtensionMethod2(3) @@> |> checkQuoteString "fqekhec24" """Call (None, Object.ExtensionMethod2, [Coerce (PropertyGet (None, v2, []), Object), Value (3)])""" - let _ = <@@ v2.ExtensionMethod3(3) @@> |> checkQuoteString "fqekhec25" """Call (None, Object.ExtensionMethod3, [Coerce (PropertyGet (None, v2, []), Object), Value (3)])""" - let _ = <@@ v2.ExtensionMethod4(3,4) @@> |> checkQuoteString "fqekhec26" """Call (None, Object.ExtensionMethod4, [Coerce (PropertyGet (None, v2, []), Object), Value (3), Value (4)])""" - let _ = <@@ v2.ExtensionMethod5(3,4) @@> |> checkQuoteString "fqekhec27" """Call (None, Object.ExtensionMethod5, [Coerce (PropertyGet (None, v2, []), Object), NewTuple (Value (3), Value (4))])""" - let _ = <@@ v2.ExtensionProperty1 @@> |> checkQuoteString "fqekhec28" """Call (None, Object.get_ExtensionProperty1, [Coerce (PropertyGet (None, v2, []), Object)])""" - let _ = <@@ v2.ExtensionProperty2 @@> |> checkQuoteString "fqekhec29" """Call (None, Object.get_ExtensionProperty2, [Coerce (PropertyGet (None, v2, []), Object)])""" - let _ = <@@ v2.ExtensionProperty3 <- 4 @@> |> checkQuoteString "fqekhec30" """Call (None, Object.set_ExtensionProperty3, [Coerce (PropertyGet (None, v2, []), Object), Value (4)])""" - let _ = <@@ v2.ExtensionIndexer1(3) @@> |> checkQuoteString "fqekhec31" """Call (None, Object.get_ExtensionIndexer1, [Coerce (PropertyGet (None, v2, []), Object), Value (3)])""" - let _ = <@@ v2.ExtensionIndexer2(3) <- 4 @@> |> checkQuoteString "fqekhec32" """Call (None, Object.set_ExtensionIndexer2, [Coerce (PropertyGet (None, v2, []), Object), Value (3), Value (4)])""" - - let _ = <@@ v2.ExtensionMethod0 @@> |> checkQuoteString "fqekhec33" """Lambda (unitVar, Call (None, Object.ExtensionMethod0, [Coerce (PropertyGet (None, v2, []), Object)]))""" - let _ = <@@ v2.ExtensionMethod1 @@> |> checkQuoteString "fqekhec34" """Lambda (unitVar, Call (None, Object.ExtensionMethod1, [Coerce (PropertyGet (None, v2, []), Object)]))""" - let _ = <@@ v2.ExtensionMethod2 @@> |> checkQuoteString "fqekhec35" """Lambda (arg00, Call (None, Object.ExtensionMethod2, [Coerce (PropertyGet (None, v2, []), Object), arg00]))""" - let _ = <@@ v2.ExtensionMethod3 @@> |> checkQuoteString "fqekhec36" """Lambda (arg00, Call (None, Object.ExtensionMethod3, [Coerce (PropertyGet (None, v2, []), Object), arg00]))""" - let _ = <@@ v2.ExtensionMethod4 @@> |> checkQuoteString "fqekhec37" """Lambda (tupledArg, Let (arg00, TupleGet (tupledArg, 0), Let (arg01, TupleGet (tupledArg, 1), Call (None, Object.ExtensionMethod4, [Coerce (PropertyGet (None, v2, []), Object), arg00, arg01]))))""" - let _ = <@@ v2.ExtensionMethod5 @@> |> checkQuoteString "fqekhec38" """Lambda (arg00, Call (None, Object.ExtensionMethod5, [Coerce (PropertyGet (None, v2, []), Object), arg00]))""" - - let _ = <@@ v2.Int32ExtensionMethod0() @@> |> checkQuoteString "fqekhec39" """Call (None, Int32.Int32ExtensionMethod0, [PropertyGet (None, v2, [])])""" - let _ = <@@ v2.Int32ExtensionMethod1() @@> |> checkQuoteString "fqekhec40" """Call (None, Int32.Int32ExtensionMethod1, [PropertyGet (None, v2, [])])""" - let _ = <@@ v2.Int32ExtensionMethod2(3) @@> |> checkQuoteString "fqekhec41" """Call (None, Int32.Int32ExtensionMethod2, [PropertyGet (None, v2, []), Value (3)])""" - let _ = <@@ v2.Int32ExtensionMethod3(3) @@> |> checkQuoteString "fqekhec42" """Call (None, Int32.Int32ExtensionMethod3, [PropertyGet (None, v2, []), Value (3)])""" - let _ = <@@ v2.Int32ExtensionMethod4(3,4) @@> |> checkQuoteString "fqekhec43" """Call (None, Int32.Int32ExtensionMethod4, [PropertyGet (None, v2, []), Value (3), Value (4)])""" - let _ = <@@ v2.Int32ExtensionMethod5(3,4) @@> |> checkQuoteString "fqekhec44" """Call (None, Int32.Int32ExtensionMethod5, [PropertyGet (None, v2, []), NewTuple (Value (3), Value (4))])""" - let _ = <@@ v2.Int32ExtensionProperty1 @@> |> checkQuoteString "fqekhec45" """Call (None, Int32.get_Int32ExtensionProperty1, [PropertyGet (None, v2, [])])""" - let _ = <@@ v2.Int32ExtensionProperty2 @@> |> checkQuoteString "fqekhec46" """Call (None, Int32.get_Int32ExtensionProperty2, [PropertyGet (None, v2, [])])""" - let _ = <@@ v2.Int32ExtensionProperty3 <- 4 @@> |> checkQuoteString "fqekhec47" """Call (None, Int32.set_Int32ExtensionProperty3, [PropertyGet (None, v2, []), Value (4)])""" - let _ = <@@ v2.Int32ExtensionIndexer1(3) @@> |> checkQuoteString "fqekhec48" """Call (None, Int32.get_Int32ExtensionIndexer1, [PropertyGet (None, v2, []), Value (3)])""" - let _ = <@@ v2.Int32ExtensionIndexer2(3) <- 4 @@> |> checkQuoteString "fqekhec49" """Call (None, Int32.set_Int32ExtensionIndexer2, [PropertyGet (None, v2, []), Value (3), Value (4)])""" - - let _ = <@@ v2.Int32ExtensionMethod0 @@> |> checkQuoteString "fqekhec50" """Lambda (unitVar, Call (None, Int32.Int32ExtensionMethod0, [PropertyGet (None, v2, [])]))""" - let _ = <@@ v2.Int32ExtensionMethod1 @@> |> checkQuoteString "fqekhec51" """Lambda (unitVar, Call (None, Int32.Int32ExtensionMethod1, [PropertyGet (None, v2, [])]))""" - let _ = <@@ v2.Int32ExtensionMethod2 @@> |> checkQuoteString "fqekhec52" """Lambda (arg00, Call (None, Int32.Int32ExtensionMethod2, [PropertyGet (None, v2, []), arg00]))""" - let _ = <@@ v2.Int32ExtensionMethod3 @@> |> checkQuoteString "fqekhec53" """Lambda (arg00, Call (None, Int32.Int32ExtensionMethod3, [PropertyGet (None, v2, []), arg00]))""" - let _ = <@@ v2.Int32ExtensionMethod4 @@> |> checkQuoteString "fqekhec54" """Lambda (tupledArg, Let (arg00, TupleGet (tupledArg, 0), Let (arg01, TupleGet (tupledArg, 1), Call (None, Int32.Int32ExtensionMethod4, [PropertyGet (None, v2, []), arg00, arg01]))))""" - let _ = <@@ v2.Int32ExtensionMethod5 @@> |> checkQuoteString "fqekhec55" """Lambda (arg00, Call (None, Int32.Int32ExtensionMethod5, [PropertyGet (None, v2, []), arg00]))""" + let _ = <@@ v2.ExtensionMethod0() @@> |> printfn "quote = %A" + let _ = <@@ v2.ExtensionMethod1() @@> |> printfn "quote = %A" + let _ = <@@ v2.ExtensionMethod2(3) @@> |> printfn "quote = %A" + let _ = <@@ v2.ExtensionMethod3(3) @@> |> printfn "quote = %A" + let _ = <@@ v2.ExtensionMethod4(3,4) @@> |> printfn "quote = %A" + let _ = <@@ v2.ExtensionMethod5(3,4) @@> |> printfn "quote = %A" + let _ = <@@ v2.ExtensionProperty1 @@> |> printfn "quote = %A" + let _ = <@@ v2.ExtensionProperty2 @@> |> printfn "quote = %A" + let _ = <@@ v2.ExtensionProperty3 <- 4 @@> |> printfn "quote = %A" + let _ = <@@ v2.ExtensionIndexer1(3) @@> |> printfn "quote = %A" + let _ = <@@ v2.ExtensionIndexer2(3) <- 4 @@> |> printfn "quote = %A" + + let _ = <@@ v2.ExtensionMethod0 @@> |> printfn "quote = %A" + let _ = <@@ v2.ExtensionMethod1 @@> |> printfn "quote = %A" + let _ = <@@ v2.ExtensionMethod2 @@> |> printfn "quote = %A" + let _ = <@@ v2.ExtensionMethod3 @@> |> printfn "quote = %A" + let _ = <@@ v2.ExtensionMethod4 @@> |> printfn "quote = %A" + let _ = <@@ v2.ExtensionMethod5 @@> |> printfn "quote = %A" + + let _ = <@@ v2.Int32ExtensionMethod0() @@> |> printfn "quote = %A" + let _ = <@@ v2.Int32ExtensionMethod1() @@> |> printfn "quote = %A" + let _ = <@@ v2.Int32ExtensionMethod2(3) @@> |> printfn "quote = %A" + let _ = <@@ v2.Int32ExtensionMethod3(3) @@> |> printfn "quote = %A" + let _ = <@@ v2.Int32ExtensionMethod4(3,4) @@> |> printfn "quote = %A" + let _ = <@@ v2.Int32ExtensionMethod5(3,4) @@> |> printfn "quote = %A" + let _ = <@@ v2.Int32ExtensionProperty1 @@> |> printfn "quote = %A" + let _ = <@@ v2.Int32ExtensionProperty2 @@> |> printfn "quote = %A" + let _ = <@@ v2.Int32ExtensionProperty3 <- 4 @@> |> printfn "quote = %A" + let _ = <@@ v2.Int32ExtensionIndexer1(3) @@> |> printfn "quote = %A" + let _ = <@@ v2.Int32ExtensionIndexer2(3) <- 4 @@> |> printfn "quote = %A" + + let _ = <@@ v2.Int32ExtensionMethod0 @@> |> printfn "quote = %A" + let _ = <@@ v2.Int32ExtensionMethod1 @@> |> printfn "quote = %A" + let _ = <@@ v2.Int32ExtensionMethod2 @@> |> printfn "quote = %A" + let _ = <@@ v2.Int32ExtensionMethod3 @@> |> printfn "quote = %A" + let _ = <@@ v2.Int32ExtensionMethod4 @@> |> printfn "quote = %A" + let _ = <@@ v2.Int32ExtensionMethod5 @@> |> printfn "quote = %A" module QuotationConstructionTests = @@ -4005,120 +3912,9 @@ module TestQuotationOfListSum2 = test "check List.sum 216" false -module ComputationExpressionWithOptionalsAndParamArray = - open System - type InputKind = - | Text of placeholder:string option - | Password of placeholder: string option - type InputOptions = - { Label: string option - Kind : InputKind - Validators : (string -> bool) array } - type InputBuilder() = - member t.Yield(_) = - { Label = None - Kind = Text None - Validators = [||] } - [] - member this.Text(io, ?placeholder) = - { io with Kind = Text placeholder } - [] - member this.Password(io, ?placeholder) = - { io with Kind = Password placeholder } - [] - member this.Label(io, label) = - { io with Label = Some label } - [] - member this.Validators(io, [] validators) = - { io with Validators = validators } - - let input = InputBuilder() - let name = - input { - label "Name" - text - with_validators - (String.IsNullOrWhiteSpace >> not) - } - let email = - input { - label "Email" - text "Your email" - with_validators - (String.IsNullOrWhiteSpace >> not) - (fun s -> s.Contains "@") - } - let password = - input { - label "Password" - password "Must contains at least 6 characters, one number and one uppercase" - with_validators - (String.exists Char.IsUpper) - (String.exists Char.IsDigit) - (fun s -> s.Length >= 6) - } - check "vewhkvh1" name.Kind (Text None) - check "vewhkvh2" email.Kind (Text (Some "Your email")) - check "vewhkvh3" email.Label (Some "Email") - check "vewhkvh4" email.Validators.Length 2 - check "vewhkvh5" password.Label (Some "Password") - check "vewhkvh6" password.Validators.Length 3 #endif -module QuotationOfComputationExpressionZipOperation = - - type Builder() = - member __.Bind (x, f) = f x - member __.Return x = x - member __.For (x, f) = f x - member __.Yield x = x - [] - member __.Var (x, y, f) = f x y - - let builder = Builder() - - let q = - <@ builder { - let! x = 1 - var y in 2 - return x + y - } @> - - let actual = (q.ToString()) - checkStrings "brewbreebr" actual - """Application (Lambda (builder@, - Call (Some (builder@), For, - [Call (Some (builder@), Var, - [Call (Some (builder@), Bind, - [Value (1), - Lambda (_arg1, - Let (x, _arg1, - Call (Some (builder@), - Yield, [x])))]), - Value (2), - Lambda (x, Lambda (y, NewTuple (x, y)))]), - Lambda (_arg2, - Let (y, TupleGet (_arg2, 1), - Let (x, TupleGet (_arg2, 0), - Call (Some (builder@), Return, - [Call (None, op_Addition, - [x, y])]))))])), - PropertyGet (None, builder, []))""" - -module CheckEliminatedConstructs = - let isNullQuoted (ts : 't[]) = - <@ - match ts with - | null -> true - | _ -> false - @> - - let actual1 = ((isNullQuoted [| |]).ToString()) - checkStrings "brewbreebrvwe1" actual1 - """IfThenElse (Call (None, op_Equality, [ValueWithName ([||], ts), Value ()]), - Value (true), Value (false))""" - module TestAssemblyAttributes = let attributes = System.Reflection.Assembly.GetExecutingAssembly().GetCustomAttributes(false) diff --git a/tests/fsharp/readme.md b/tests/fsharp/readme.md index 42960c28c31..639192c5a56 100644 --- a/tests/fsharp/readme.md +++ b/tests/fsharp/readme.md @@ -49,7 +49,7 @@ let changeX() = x = 20 y = "test" """ - FSharpDiagnosticSeverity.Warning + FSharpErrorSeverity.Warning 20 (6, 5, 6, 11) "The result of this equality expression has type 'bool' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then mark the value 'mutable' and use the '<-' operator e.g. 'x <- expression'." diff --git a/tests/fsharp/single-test.fs b/tests/fsharp/single-test.fs index 31b26fa76cb..c12080d761e 100644 --- a/tests/fsharp/single-test.fs +++ b/tests/fsharp/single-test.fs @@ -2,12 +2,13 @@ open System open System.IO +open System.Diagnostics open System.Reflection +open NUnit.Framework open TestFramework open HandleExpects -open FSharp.Compiler.IO -type Permutation = +type Permutation = | FSC_CORECLR | FSC_CORECLR_BUILDONLY | FSI_CORECLR @@ -94,7 +95,7 @@ let generateOverrides = // Arguments: // pc = ProjectConfiguration // outputType = OutputType.Exe, OutputType.Library or OutputType.Script -// targetFramework optimize = "net472" or net5.0 etc ... +// targetFramework optimize = "net472" OR NETCOREAPP3.1 etc ... // optimize = true or false // configuration = "Release" or "Debug" // @@ -209,12 +210,12 @@ let singleTestBuildAndRunCore cfg copyFiles p languageVersion = let extraSources = ["testlib.fsi";"testlib.fs";"test.mli";"test.ml";"test.fsi";"test.fs";"test2.fsi";"test2.fs";"test.fsx";"test2.fsx"] let utilitySources = [__SOURCE_DIRECTORY__ ++ "coreclr_utilities.fs"] let referenceItems = if String.IsNullOrEmpty(copyFiles) then [] else [copyFiles] - let framework = "net5.0" + let framework = "netcoreapp3.1" // Arguments: // outputType = OutputType.Exe, OutputType.Library or OutputType.Script // compilerType = "coreclr" or "net40" - // targetFramework optimize = "net472" OR net5.0 etc ... + // targetFramework optimize = "net472" OR NETCOREAPP3.1 etc ... // optimize = true or false let executeSingleTestBuildAndRun outputType compilerType targetFramework optimize buildOnly = let mutable result = false @@ -249,7 +250,7 @@ let singleTestBuildAndRunCore cfg copyFiles p languageVersion = let findFirstSourceFile (pc:ProjectConfiguration) = let sources = List.append pc.SourceItems pc.ExtraSourceItems - let found = sources |> List.tryFind(fun source -> FileSystem.FileExistsShim(Path.Combine(directory, source))) + let found = sources |> List.tryFind(fun source -> File.Exists(Path.Combine(directory, source))) match found with | Some p -> Path.Combine(directory, p) | None -> failwith "Missing SourceFile in test case" @@ -278,7 +279,7 @@ let singleTestBuildAndRunCore cfg copyFiles p languageVersion = let cfg = { cfg with Directory = directory } let result = execBothToOutNoCheck cfg directory buildOutputFile cfg.DotNetExe (sprintf "run -f %s" targetFramework) if not (buildOnly) then - result |> checkResult + result |> checkResult testOkFile.CheckExists() executeFsc compilerType targetFramework if buildOnly then verifyResults (findFirstSourceFile pc) buildOutputFile @@ -303,9 +304,9 @@ let singleTestBuildAndRunCore cfg copyFiles p languageVersion = printfn "Filename: %s" projectFileName match p with - | FSC_CORECLR -> executeSingleTestBuildAndRun OutputType.Exe "coreclr" "net5.0" true false - | FSC_CORECLR_BUILDONLY -> executeSingleTestBuildAndRun OutputType.Exe "coreclr" "net5.0" true true - | FSI_CORECLR -> executeSingleTestBuildAndRun OutputType.Script "coreclr" "net5.0" true false + | FSC_CORECLR -> executeSingleTestBuildAndRun OutputType.Exe "coreclr" "netcoreapp3.1" true false + | FSC_CORECLR_BUILDONLY -> executeSingleTestBuildAndRun OutputType.Exe "coreclr" "netcoreapp3.1" true true + | FSI_CORECLR -> executeSingleTestBuildAndRun OutputType.Script "coreclr" "netcoreapp3.1" true false #if !NETCOREAPP | FSC_BUILDONLY -> executeSingleTestBuildAndRun OutputType.Exe "net40" "net472" false true @@ -313,7 +314,7 @@ let singleTestBuildAndRunCore cfg copyFiles p languageVersion = | FSC_OPT_MINUS_DEBUG -> executeSingleTestBuildAndRun OutputType.Exe "net40" "net472" false false | FSI_FILE -> executeSingleTestBuildAndRun OutputType.Script "net40" "net472" true false - | FSI_STDIN -> + | FSI_STDIN -> use cleanup = (cleanUpFSharpCore cfg) use testOkFile = new FileGuard (getfullpath cfg "test.ok") let sources = extraSources |> List.filter (fileExists cfg) @@ -322,11 +323,11 @@ let singleTestBuildAndRunCore cfg copyFiles p languageVersion = testOkFile.CheckExists() - | GENERATED_SIGNATURE -> + | GENERATED_SIGNATURE -> use cleanup = (cleanUpFSharpCore cfg) - let source1 = - ["test.ml"; "test.fs"; "test.fsx"] + let source1 = + ["test.ml"; "test.fs"; "test.fsx"] |> List.rev |> List.tryFind (fileExists cfg) @@ -334,22 +335,22 @@ let singleTestBuildAndRunCore cfg copyFiles p languageVersion = log "Generated signature file..." fsc cfg "%s --sig:tmptest.fsi" cfg.fsc_flags ["tmptest.fs"] - (if FileSystem.FileExistsShim("FSharp.Core.dll") then log "found fsharp.core.dll after build" else log "found fsharp.core.dll after build") |> ignore + (if File.Exists("FSharp.Core.dll") then log "found fsharp.core.dll after build" else log "found fsharp.core.dll after build") |> ignore log "Compiling against generated signature file..." fsc cfg "%s -o:tmptest1.exe" cfg.fsc_flags ["tmptest.fsi";"tmptest.fs"] - (if FileSystem.FileExistsShim("FSharp.Core.dll") then log "found fsharp.core.dll after build" else log "found fsharp.core.dll after build") |> ignore + (if File.Exists("FSharp.Core.dll") then log "found fsharp.core.dll after build" else log "found fsharp.core.dll after build") |> ignore log "Verifying built .exe..." peverify cfg "tmptest1.exe" - | AS_DLL -> + | AS_DLL -> // Compile as a DLL to exercise pickling of interface data, then recompile the original source file referencing this DLL // THe second compilation will not utilize the information from the first in any meaningful way, but the // compiler will unpickle the interface and optimization data, so we test unpickling as well. use cleanup = (cleanUpFSharpCore cfg) use testOkFile = new FileGuard (getfullpath cfg "test.ok") - + let sources = extraSources |> List.filter (fileExists cfg) fsc cfg "%s --optimize -a -o:test--optimize-lib.dll -g --langversion:preview " cfg.fsc_flags sources @@ -363,13 +364,13 @@ let singleTestBuildAndRunCore cfg copyFiles p languageVersion = testOkFile.CheckExists() #endif -let singleTestBuildAndRunAux cfg p = +let singleTestBuildAndRunAux cfg p = singleTestBuildAndRunCore cfg "" p "latest" -let singleTestBuildAndRunWithCopyDlls cfg copyFiles p = +let singleTestBuildAndRunWithCopyDlls cfg copyFiles p = singleTestBuildAndRunCore cfg copyFiles p "latest" -let singleTestBuildAndRun dir p = +let singleTestBuildAndRun dir p = let cfg = testConfig dir singleTestBuildAndRunAux cfg p @@ -386,29 +387,29 @@ let singleVersionedNegTest (cfg: TestConfig) version testname = } // REM == Set baseline (fsc vs vs, in case the vs baseline exists) - let VSBSLFILE = + let VSBSLFILE = if (sprintf "%s.vsbsl" testname) |> (fileExists cfg) then sprintf "%s.vsbsl" testname else sprintf "%s.bsl" testname let sources = [ let src = [ testname + ".mli"; testname + ".fsi"; testname + ".ml"; testname + ".fs"; testname + ".fsx"; - testname + "a.mli"; testname + "a.fsi"; testname + "a.ml"; testname + "a.fs"; + testname + "a.mli"; testname + "a.fsi"; testname + "a.ml"; testname + "a.fs"; testname + "b.mli"; testname + "b.fsi"; testname + "b.ml"; testname + "b.fs"; ] yield! src |> List.filter (fileExists cfg) - if fileExists cfg "helloWorldProvider.dll" then + if fileExists cfg "helloWorldProvider.dll" then yield "-r:helloWorldProvider.dll" - if fileExists cfg (testname + "-pre.fs") then + if fileExists cfg (testname + "-pre.fs") then yield (sprintf "-r:%s-pre.dll" testname) ] if fileExists cfg (testname + "-pre.fs") then - fsc cfg "%s -a -o:%s-pre.dll" cfg.fsc_flags testname [testname + "-pre.fs"] + fsc cfg "%s -a -o:%s-pre.dll" cfg.fsc_flags testname [testname + "-pre.fs"] else () if fileExists cfg (testname + "-pre.fsx") then @@ -433,18 +434,18 @@ let singleVersionedNegTest (cfg: TestConfig) version testname = let vbslDiff = fsdiff cfg (sprintf "%s.vserr" testname) VSBSLFILE match diff,vbslDiff with - | "","" -> + | "","" -> log "Good, output %s.err matched %s.bsl" testname testname log "Good, output %s.vserr matched %s" testname VSBSLFILE - | l,"" -> - log "***** %s.err %s.bsl differed: a bug or baseline may need updating" testname testname + | l,"" -> + log "***** %s.err %s.bsl differed: a bug or baseline may need updating" testname testname failwithf "%s.err %s.bsl differ; %A" testname testname l | "",l -> log "Good, output %s.err matched %s.bsl" testname testname log "***** %s.vserr %s differed: a bug or baseline may need updating" testname VSBSLFILE failwithf "%s.vserr %s differ; %A" testname VSBSLFILE l - | l1,l2 -> - log "***** %s.err %s.bsl differed: a bug or baseline may need updating" testname testname + | l1,l2 -> + log "***** %s.err %s.bsl differed: a bug or baseline may need updating" testname testname log "***** %s.vserr %s differed: a bug or baseline may need updating" testname VSBSLFILE failwithf "%s.err %s.bsl differ; %A; %s.vserr %s differ; %A" testname testname l1 testname VSBSLFILE l2 diff --git a/tests/fsharp/tests.fs b/tests/fsharp/tests.fs index 214fbc8e821..5de0936fdab 100644 --- a/tests/fsharp/tests.fs +++ b/tests/fsharp/tests.fs @@ -30,230 +30,229 @@ let FSI_BASIC = FSI_FILE // ^^^^^^^^^^^^ To run these tests in F# Interactive , 'build net40', then send this chunk, then evaluate body of a test ^^^^^^^^^^^^ let inline getTestsDirectory dir = __SOURCE_DIRECTORY__ ++ dir -let singleTestBuildAndRun = getTestsDirectory >> singleTestBuildAndRun -let singleTestBuildAndRunVersion = getTestsDirectory >> singleTestBuildAndRunVersion -let testConfig = getTestsDirectory >> testConfig +let singleTestBuildAndRun' = getTestsDirectory >> singleTestBuildAndRun +let singleTestBuildAndRunVersion' = getTestsDirectory >> singleTestBuildAndRunVersion +let testConfig' = getTestsDirectory >> testConfig -[] module CoreTests = // These tests are enabled for .NET Framework and .NET Core [] - let ``access-FSC_BASIC``() = singleTestBuildAndRun "core/access" FSC_BASIC + let ``access-FSC_BASIC``() = singleTestBuildAndRun' "core/access" FSC_BASIC [] - let ``access-FSI_BASIC``() = singleTestBuildAndRun "core/access" FSI_BASIC + let ``access-FSI_BASIC``() = singleTestBuildAndRun' "core/access" FSI_BASIC [] - let ``apporder-FSC_BASIC`` () = singleTestBuildAndRun "core/apporder" FSC_BASIC + let ``apporder-FSC_BASIC`` () = singleTestBuildAndRun' "core/apporder" FSC_BASIC [] - let ``apporder-FSI_BASIC`` () = singleTestBuildAndRun "core/apporder" FSI_BASIC + let ``apporder-FSI_BASIC`` () = singleTestBuildAndRun' "core/apporder" FSI_BASIC [] - let ``array-FSC_BASIC`` () = singleTestBuildAndRun "core/array" FSC_BASIC + let ``array-FSC_BASIC`` () = singleTestBuildAndRun' "core/array" FSC_BASIC [] - let ``array-FSI_BASIC`` () = singleTestBuildAndRun "core/array" FSI_BASIC + let ``array-FSI_BASIC`` () = singleTestBuildAndRun' "core/array" FSI_BASIC [] - let ``comprehensions-FSC_BASIC`` () = singleTestBuildAndRun "core/comprehensions" FSC_BASIC + let ``comprehensions-FSC_BASIC`` () = singleTestBuildAndRun' "core/comprehensions" FSC_BASIC [] - let ``comprehensions-FSI_BASIC`` () = singleTestBuildAndRun "core/comprehensions" FSI_BASIC + let ``comprehensions-FSI_BASIC`` () = singleTestBuildAndRun' "core/comprehensions" FSI_BASIC [] - let ``comprehensionshw-FSC_BASIC`` () = singleTestBuildAndRun "core/comprehensions-hw" FSC_BASIC + let ``comprehensionshw-FSC_BASIC`` () = singleTestBuildAndRun' "core/comprehensions-hw" FSC_BASIC [] - let ``comprehensionshw-FSI_BASIC`` () = singleTestBuildAndRun "core/comprehensions-hw" FSI_BASIC + let ``comprehensionshw-FSI_BASIC`` () = singleTestBuildAndRun' "core/comprehensions-hw" FSI_BASIC [] - let ``genericmeasures-FSC_BASIC`` () = singleTestBuildAndRun "core/genericmeasures" FSC_BASIC + let ``genericmeasures-FSC_BASIC`` () = singleTestBuildAndRun' "core/genericmeasures" FSC_BASIC [] - let ``genericmeasures-FSI_BASIC`` () = singleTestBuildAndRun "core/genericmeasures" FSI_BASIC + let ``genericmeasures-FSI_BASIC`` () = singleTestBuildAndRun' "core/genericmeasures" FSI_BASIC [] - let ``innerpoly-FSC_BASIC`` () = singleTestBuildAndRun "core/innerpoly" FSC_BASIC + let ``innerpoly-FSC_BASIC`` () = singleTestBuildAndRun' "core/innerpoly" FSC_BASIC [] - let ``innerpoly-FSI_BASIC`` () = singleTestBuildAndRun "core/innerpoly" FSI_BASIC + let ``innerpoly-FSI_BASIC`` () = singleTestBuildAndRun' "core/innerpoly" FSI_BASIC [] - let ``namespaceAttributes-FSC_BASIC`` () = singleTestBuildAndRun "core/namespaces" FSC_BASIC + let ``namespaceAttributes-FSC_BASIC`` () = singleTestBuildAndRun' "core/namespaces" FSC_BASIC [] - let ``unicode2-FSC_BASIC`` () = singleTestBuildAndRun "core/unicode" FSC_BASIC // TODO: fails on coreclr + let ``unicode2-FSC_BASIC`` () = singleTestBuildAndRun' "core/unicode" FSC_BASIC // TODO: fails on coreclr [] - let ``unicode2-FSI_BASIC`` () = singleTestBuildAndRun "core/unicode" FSI_BASIC + let ``unicode2-FSI_BASIC`` () = singleTestBuildAndRun' "core/unicode" FSI_BASIC [] - let ``lazy test-FSC_BASIC`` () = singleTestBuildAndRun "core/lazy" FSC_BASIC + let ``lazy test-FSC_BASIC`` () = singleTestBuildAndRun' "core/lazy" FSC_BASIC [] - let ``lazy test-FSI_BASIC`` () = singleTestBuildAndRun "core/lazy" FSI_BASIC + let ``lazy test-FSI_BASIC`` () = singleTestBuildAndRun' "core/lazy" FSI_BASIC [] - let ``letrec-FSC_BASIC`` () = singleTestBuildAndRun "core/letrec" FSC_BASIC + let ``letrec-FSC_BASIC`` () = singleTestBuildAndRun' "core/letrec" FSC_BASIC [] - let ``letrec-FSI_BASIC`` () = singleTestBuildAndRun "core/letrec" FSI_BASIC + let ``letrec-FSI_BASIC`` () = singleTestBuildAndRun' "core/letrec" FSI_BASIC [] - let ``letrec (mutrec variations part one) FSC_BASIC`` () = singleTestBuildAndRun "core/letrec-mutrec" FSC_BASIC + let ``letrec (mutrec variations part one) FSC_BASIC`` () = singleTestBuildAndRun' "core/letrec-mutrec" FSC_BASIC [] - let ``letrec (mutrec variations part one) FSI_BASIC`` () = singleTestBuildAndRun "core/letrec-mutrec" FSI_BASIC + let ``letrec (mutrec variations part one) FSI_BASIC`` () = singleTestBuildAndRun' "core/letrec-mutrec" FSI_BASIC [] - let ``libtest-FSC_BASIC`` () = singleTestBuildAndRun "core/libtest" FSC_BASIC + let ``libtest-FSC_BASIC`` () = singleTestBuildAndRun' "core/libtest" FSC_BASIC [] - let ``libtest-FSI_BASIC`` () = singleTestBuildAndRun "core/libtest" FSI_BASIC + let ``libtest-FSI_BASIC`` () = singleTestBuildAndRun' "core/libtest" FSI_BASIC [] - let ``lift-FSC_BASIC`` () = singleTestBuildAndRun "core/lift" FSC_BASIC + let ``lift-FSC_BASIC`` () = singleTestBuildAndRun' "core/lift" FSC_BASIC [] - let ``lift-FSI_BASIC`` () = singleTestBuildAndRun "core/lift" FSI_BASIC + let ``lift-FSI_BASIC`` () = singleTestBuildAndRun' "core/lift" FSI_BASIC [] - let ``map-FSC_BASIC`` () = singleTestBuildAndRun "core/map" FSC_BASIC + let ``map-FSC_BASIC`` () = singleTestBuildAndRun' "core/map" FSC_BASIC [] - let ``map-FSI_BASIC`` () = singleTestBuildAndRun "core/map" FSI_BASIC + let ``map-FSI_BASIC`` () = singleTestBuildAndRun' "core/map" FSI_BASIC [] - let ``measures-FSC_BASIC`` () = singleTestBuildAndRun "core/measures" FSC_BASIC + let ``measures-FSC_BASIC`` () = singleTestBuildAndRun' "core/measures" FSC_BASIC [] - let ``measures-FSI_BASIC`` () = singleTestBuildAndRun "core/measures" FSI_BASIC + let ``measures-FSI_BASIC`` () = singleTestBuildAndRun' "core/measures" FSI_BASIC [] - let ``nested-FSC_BASIC`` () = singleTestBuildAndRun "core/nested" FSC_BASIC + let ``nested-FSC_BASIC`` () = singleTestBuildAndRun' "core/nested" FSC_BASIC [] - let ``nested-FSI_BASIC`` () = singleTestBuildAndRun "core/nested" FSI_BASIC + let ``nested-FSI_BASIC`` () = singleTestBuildAndRun' "core/nested" FSI_BASIC [] - let ``members-ops-FSC_BASIC`` () = singleTestBuildAndRun "core/members/ops" FSC_BASIC + let ``members-ops-FSC_BASIC`` () = singleTestBuildAndRun' "core/members/ops" FSC_BASIC [] - let ``members-ops-FSI_BASIC`` () = singleTestBuildAndRun "core/members/ops" FSI_BASIC + let ``members-ops-FSI_BASIC`` () = singleTestBuildAndRun' "core/members/ops" FSI_BASIC [] - let ``members-ops-mutrec-FSC_BASIC`` () = singleTestBuildAndRun "core/members/ops-mutrec" FSC_BASIC + let ``members-ops-mutrec-FSC_BASIC`` () = singleTestBuildAndRun' "core/members/ops-mutrec" FSC_BASIC [] - let ``members-ops-mutrec-FSI_BASIC`` () = singleTestBuildAndRun "core/members/ops-mutrec" FSI_BASIC + let ``members-ops-mutrec-FSI_BASIC`` () = singleTestBuildAndRun' "core/members/ops-mutrec" FSI_BASIC [] - let ``seq-FSC_BASIC`` () = singleTestBuildAndRun "core/seq" FSC_BASIC + let ``seq-FSC_BASIC`` () = singleTestBuildAndRun' "core/seq" FSC_BASIC [] - let ``seq-FSI_BASIC`` () = singleTestBuildAndRun "core/seq" FSI_BASIC + let ``seq-FSI_BASIC`` () = singleTestBuildAndRun' "core/seq" FSI_BASIC [] - let ``math-numbers-FSC_BASIC`` () = singleTestBuildAndRun "core/math/numbers" FSC_BASIC + let ``math-numbers-FSC_BASIC`` () = singleTestBuildAndRun' "core/math/numbers" FSC_BASIC [] - let ``math-numbers-FSI_BASIC`` () = singleTestBuildAndRun "core/math/numbers" FSI_BASIC + let ``math-numbers-FSI_BASIC`` () = singleTestBuildAndRun' "core/math/numbers" FSI_BASIC [] - let ``members-ctree-FSC_BASIC`` () = singleTestBuildAndRun "core/members/ctree" FSC_BASIC + let ``members-ctree-FSC_BASIC`` () = singleTestBuildAndRun' "core/members/ctree" FSC_BASIC [] - let ``members-ctree-FSI_BASIC`` () = singleTestBuildAndRun "core/members/ctree" FSI_BASIC + let ``members-ctree-FSI_BASIC`` () = singleTestBuildAndRun' "core/members/ctree" FSI_BASIC [] - let ``members-factors-FSC_BASIC`` () = singleTestBuildAndRun "core/members/factors" FSC_BASIC + let ``members-factors-FSC_BASIC`` () = singleTestBuildAndRun' "core/members/factors" FSC_BASIC [] - let ``members-factors-FSI_BASIC`` () = singleTestBuildAndRun "core/members/factors" FSI_BASIC + let ``members-factors-FSI_BASIC`` () = singleTestBuildAndRun' "core/members/factors" FSI_BASIC [] - let ``members-factors-mutrec-FSC_BASIC`` () = singleTestBuildAndRun "core/members/factors-mutrec" FSC_BASIC + let ``members-factors-mutrec-FSC_BASIC`` () = singleTestBuildAndRun' "core/members/factors-mutrec" FSC_BASIC [] - let ``members-factors-mutrec-FSI_BASIC`` () = singleTestBuildAndRun "core/members/factors-mutrec" FSI_BASIC + let ``members-factors-mutrec-FSI_BASIC`` () = singleTestBuildAndRun' "core/members/factors-mutrec" FSI_BASIC [] - let ``graph-FSC_BASIC`` () = singleTestBuildAndRun "perf/graph" FSC_BASIC + let ``graph-FSC_BASIC`` () = singleTestBuildAndRun' "perf/graph" FSC_BASIC [] - let ``graph-FSI_BASIC`` () = singleTestBuildAndRun "perf/graph" FSI_BASIC + let ``graph-FSI_BASIC`` () = singleTestBuildAndRun' "perf/graph" FSI_BASIC [] - let ``nbody-FSC_BASIC`` () = singleTestBuildAndRun "perf/nbody" FSC_BASIC + let ``nbody-FSC_BASIC`` () = singleTestBuildAndRun' "perf/nbody" FSC_BASIC [] - let ``nbody-FSI_BASIC`` () = singleTestBuildAndRun "perf/nbody" FSI_BASIC + let ``nbody-FSI_BASIC`` () = singleTestBuildAndRun' "perf/nbody" FSI_BASIC [] - let ``letrec (mutrec variations part two) FSC_BASIC`` () = singleTestBuildAndRun "core/letrec-mutrec2" FSC_BASIC + let ``letrec (mutrec variations part two) FSC_BASIC`` () = singleTestBuildAndRun' "core/letrec-mutrec2" FSC_BASIC [] - let ``letrec (mutrec variations part two) FSI_BASIC`` () = singleTestBuildAndRun "core/letrec-mutrec2" FSI_BASIC + let ``letrec (mutrec variations part two) FSI_BASIC`` () = singleTestBuildAndRun' "core/letrec-mutrec2" FSI_BASIC [] - let ``printf`` () = singleTestBuildAndRunVersion "core/printf" FSC_BASIC "preview" + let ``printf`` () = singleTestBuildAndRun' "core/printf" FSC_BASIC [] - let ``printf-interpolated`` () = singleTestBuildAndRunVersion "core/printf-interpolated" FSC_BASIC "preview" + let ``printf-interpolated`` () = singleTestBuildAndRunVersion' "core/printf-interpolated" FSC_BASIC "preview" [] - let ``tlr-FSC_BASIC`` () = singleTestBuildAndRun "core/tlr" FSC_BASIC + let ``tlr-FSC_BASIC`` () = singleTestBuildAndRun' "core/tlr" FSC_BASIC [] - let ``tlr-FSI_BASIC`` () = singleTestBuildAndRun "core/tlr" FSI_BASIC + let ``tlr-FSI_BASIC`` () = singleTestBuildAndRun' "core/tlr" FSI_BASIC [] - let ``subtype-FSC_BASIC`` () = singleTestBuildAndRun "core/subtype" FSC_BASIC + let ``subtype-FSC_BASIC`` () = singleTestBuildAndRun' "core/subtype" FSC_BASIC [] - let ``subtype-FSI_BASIC`` () = singleTestBuildAndRun "core/subtype" FSI_BASIC + let ``subtype-FSI_BASIC`` () = singleTestBuildAndRun' "core/subtype" FSI_BASIC [] - let ``syntax-FSC_BASIC`` () = singleTestBuildAndRun "core/syntax" FSC_BASIC + let ``syntax-FSC_BASIC`` () = singleTestBuildAndRun' "core/syntax" FSC_BASIC [] - let ``syntax-FSI_BASIC`` () = singleTestBuildAndRun "core/syntax" FSI_BASIC + let ``syntax-FSI_BASIC`` () = singleTestBuildAndRun' "core/syntax" FSI_BASIC [] - let ``test int32-FSC_BASIC`` () = singleTestBuildAndRun "core/int32" FSC_BASIC + let ``test int32-FSC_BASIC`` () = singleTestBuildAndRun' "core/int32" FSC_BASIC [] - let ``test int32-FSI_BASIC`` () = singleTestBuildAndRun "core/int32" FSI_BASIC + let ``test int32-FSI_BASIC`` () = singleTestBuildAndRun' "core/int32" FSI_BASIC [] - let ``quotes-FSC-BASIC`` () = singleTestBuildAndRun "core/quotes" FSC_BASIC + let ``quotes-FSC-BASIC`` () = singleTestBuildAndRun' "core/quotes" FSC_BASIC [] - let ``quotes-FSI-BASIC`` () = singleTestBuildAndRun "core/quotes" FSI_BASIC + let ``quotes-FSI-BASIC`` () = singleTestBuildAndRun' "core/quotes" FSI_BASIC [] - let ``recordResolution-FSC_BASIC`` () = singleTestBuildAndRun "core/recordResolution" FSC_BASIC + let ``recordResolution-FSC_BASIC`` () = singleTestBuildAndRun' "core/recordResolution" FSC_BASIC [] - let ``recordResolution-FSI_BASIC`` () = singleTestBuildAndRun "core/recordResolution" FSI_BASIC + let ``recordResolution-FSI_BASIC`` () = singleTestBuildAndRun' "core/recordResolution" FSI_BASIC [] let ``SDKTests`` () = - let cfg = testConfig "SDKTests" + let cfg = testConfig' "SDKTests" exec cfg cfg.DotNetExe ("msbuild " + Path.Combine(cfg.Directory, "AllSdkTargetsTests.proj") + " /p:Configuration=" + cfg.BUILD_CONFIG) #if !NETCOREAPP [] - let ``attributes-FSC_BASIC`` () = singleTestBuildAndRun "core/attributes" FSC_BASIC + let ``attributes-FSC_BASIC`` () = singleTestBuildAndRun' "core/attributes" FSC_BASIC [] - let ``attributes-FSI_BASIC`` () = singleTestBuildAndRun "core/attributes" FSI_BASIC + let ``attributes-FSI_BASIC`` () = singleTestBuildAndRun' "core/attributes" FSI_BASIC [] let byrefs () = - let cfg = testConfig "core/byrefs" + let cfg = testConfig' "core/byrefs" begin use testOkFile = fileguard cfg "test.ok" @@ -307,7 +306,7 @@ module CoreTests = [] let span () = - let cfg = testConfig "core/span" + let cfg = testConfig' "core/span" let cfg = { cfg with fsc_flags = sprintf "%s --test:StackSpan" cfg.fsc_flags} @@ -352,7 +351,7 @@ module CoreTests = [] let asyncStackTraces () = - let cfg = testConfig "core/asyncStackTraces" + let cfg = testConfig' "core/asyncStackTraces" use testOkFile = fileguard cfg "test.ok" @@ -364,7 +363,7 @@ module CoreTests = [] let ``lots-of-conditionals``() = - let cfg = testConfig "core/large/conditionals" + let cfg = testConfig' "core/large/conditionals" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeConditionals-200.fs"] exec cfg ("." ++ "test.exe") "" @@ -372,7 +371,7 @@ module CoreTests = [] let ``lots-of-conditionals-maxtested``() = - let cfg = testConfig "core/large/conditionals" + let cfg = testConfig' "core/large/conditionals" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeConditionals-maxtested.fs"] exec cfg ("." ++ "test.exe") "" @@ -380,7 +379,7 @@ module CoreTests = [] let ``lots-of-lets``() = - let cfg = testConfig "core/large/lets" + let cfg = testConfig' "core/large/lets" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeLets-500.fs"] exec cfg ("." ++ "test.exe") "" @@ -388,7 +387,7 @@ module CoreTests = [] let ``lots-of-lets-maxtested``() = - let cfg = testConfig "core/large/lets" + let cfg = testConfig' "core/large/lets" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeLets-maxtested.fs"] exec cfg ("." ++ "test.exe") "" @@ -396,7 +395,7 @@ module CoreTests = [] let ``lots-of-lists``() = - let cfg = testConfig "core/large/lists" + let cfg = testConfig' "core/large/lists" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test-500.exe " cfg.fsc_flags ["LargeList-500.fs"] exec cfg ("." ++ "test-500.exe") "" @@ -404,7 +403,7 @@ module CoreTests = [] let ``lots-of-matches``() = - let cfg = testConfig "core/large/matches" + let cfg = testConfig' "core/large/matches" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeMatches-200.fs"] exec cfg ("." ++ "test.exe") "" @@ -412,7 +411,7 @@ module CoreTests = [] let ``lots-of-matches-maxtested``() = - let cfg = testConfig "core/large/matches" + let cfg = testConfig' "core/large/matches" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeMatches-maxtested.fs"] exec cfg ("." ++ "test.exe") "" @@ -420,7 +419,7 @@ module CoreTests = [] let ``lots-of-sequential-and-let``() = - let cfg = testConfig "core/large/mixed" + let cfg = testConfig' "core/large/mixed" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeSequentialLet-500.fs"] exec cfg ("." ++ "test.exe") "" @@ -428,7 +427,7 @@ module CoreTests = [] let ``lots-of-sequential-and-let-maxtested``() = - let cfg = testConfig "core/large/mixed" + let cfg = testConfig' "core/large/mixed" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeSequentialLet-maxtested.fs"] exec cfg ("." ++ "test.exe") "" @@ -436,7 +435,7 @@ module CoreTests = [] let ``lots-of-sequential``() = - let cfg = testConfig "core/large/sequential" + let cfg = testConfig' "core/large/sequential" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeSequential-500.fs"] exec cfg ("." ++ "test.exe") "" @@ -444,7 +443,7 @@ module CoreTests = [] let ``lots-of-sequential-maxtested``() = - let cfg = testConfig "core/large/sequential" + let cfg = testConfig' "core/large/sequential" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeSequential-maxtested.fs"] exec cfg ("." ++ "test.exe") "" @@ -453,59 +452,59 @@ module CoreTests = #endif [] - let ``control-FSC_BASIC`` () = singleTestBuildAndRun "core/control" FSC_BASIC + let ``control-FSC_BASIC`` () = singleTestBuildAndRun' "core/control" FSC_BASIC [] - let ``control-FSI_BASIC`` () = singleTestBuildAndRun "core/control" FSI_BASIC + let ``control-FSI_BASIC`` () = singleTestBuildAndRun' "core/control" FSI_BASIC [] let ``control --tailcalls`` () = - let cfg = testConfig "core/control" + let cfg = testConfig' "core/control" singleTestBuildAndRunAux {cfg with fsi_flags = " --tailcalls" } FSC_BASIC [] let ``controlChamenos-FSC_BASIC`` () = - let cfg = testConfig "core/controlChamenos" + let cfg = testConfig' "core/controlChamenos" singleTestBuildAndRunAux {cfg with fsi_flags = " --tailcalls" } FSC_BASIC [] let ``controlChamenos-FSI_BASIC`` () = - let cfg = testConfig "core/controlChamenos" + let cfg = testConfig' "core/controlChamenos" singleTestBuildAndRunAux {cfg with fsi_flags = " --tailcalls" } FSI_BASIC [] - let ``controlMailbox-FSC_BASIC`` () = singleTestBuildAndRun "core/controlMailbox" FSC_BASIC + let ``controlMailbox-FSC_BASIC`` () = singleTestBuildAndRun' "core/controlMailbox" FSC_BASIC [] - let ``controlMailbox-FSI_BASIC`` () = singleTestBuildAndRun "core/controlMailbox" FSI_BASIC + let ``controlMailbox-FSI_BASIC`` () = singleTestBuildAndRun' "core/controlMailbox" FSI_BASIC [] let ``controlMailbox --tailcalls`` () = - let cfg = testConfig "core/controlMailbox" + let cfg = testConfig' "core/controlMailbox" singleTestBuildAndRunAux {cfg with fsi_flags = " --tailcalls" } FSC_BASIC [] - let ``csext-FSC_BASIC`` () = singleTestBuildAndRun "core/csext" FSC_BASIC + let ``csext-FSC_BASIC`` () = singleTestBuildAndRun' "core/csext" FSC_BASIC [] - let ``csext-FSI_BASIC`` () = singleTestBuildAndRun "core/csext" FSI_BASIC + let ``csext-FSI_BASIC`` () = singleTestBuildAndRun' "core/csext" FSI_BASIC [] - let ``enum-FSC_BASIC`` () = singleTestBuildAndRun "core/enum" FSC_BASIC + let ``enum-FSC_BASIC`` () = singleTestBuildAndRun' "core/enum" FSC_BASIC [] - let ``enum-FSI_BASIC`` () = singleTestBuildAndRun "core/enum" FSI_BASIC + let ``enum-FSI_BASIC`` () = singleTestBuildAndRun' "core/enum" FSI_BASIC #if !NETCOREAPP // Requires winforms will not run on coreclr [] - let controlWpf () = singleTestBuildAndRun "core/controlwpf" FSC_BASIC + let controlWpf () = singleTestBuildAndRun' "core/controlwpf" FSC_BASIC // These tests are enabled for .NET Framework [] let ``anon-FSC_BASIC``() = - let cfg = testConfig "core/anon" + let cfg = testConfig' "core/anon" fsc cfg "%s -a -o:lib.dll" cfg.fsc_flags ["lib.fs"] @@ -533,7 +532,7 @@ module CoreTests = [] let events () = - let cfg = testConfig "core/events" + let cfg = testConfig' "core/events" fsc cfg "%s -a -o:test.dll -g" cfg.fsc_flags ["test.fs"] @@ -604,7 +603,7 @@ module CoreTests = [] let forwarders () = - let cfg = testConfig "core/forwarders" + let cfg = testConfig' "core/forwarders" mkdir cfg "orig" mkdir cfg "split" @@ -637,7 +636,7 @@ module CoreTests = [] let fsfromcs () = - let cfg = testConfig "core/fsfromcs" + let cfg = testConfig' "core/fsfromcs" fsc cfg "%s -a --doc:lib.xml -o:lib.dll -g" cfg.fsc_flags ["lib.fs"] @@ -657,7 +656,7 @@ module CoreTests = [] let fsfromfsviacs () = - let cfg = testConfig "core/fsfromfsviacs" + let cfg = testConfig' "core/fsfromfsviacs" fsc cfg "%s -a -o:lib.dll -g" cfg.fsc_flags ["lib.fs"] @@ -712,7 +711,7 @@ module CoreTests = [] let ``fsi-reference`` () = - let cfg = testConfig "core/fsi-reference" + let cfg = testConfig' "core/fsi-reference" begin use testOkFile = fileguard cfg "test.ok" @@ -724,7 +723,7 @@ module CoreTests = [] let ``fsi-reload`` () = - let cfg = testConfig "core/fsi-reload" + let cfg = testConfig' "core/fsi-reload" begin use testOkFile = fileguard cfg "test.ok" @@ -750,7 +749,7 @@ module CoreTests = [] let fsiAndModifiers () = - let cfg = testConfig "core/fsiAndModifiers" + let cfg = testConfig' "core/fsiAndModifiers" do if fileExists cfg "TestLibrary.dll" then rm cfg "TestLibrary.dll" @@ -763,12 +762,12 @@ module CoreTests = testOkFile.CheckExists() [] - let ``genericmeasures-AS_DLL`` () = singleTestBuildAndRun "core/genericmeasures" AS_DLL + let ``genericmeasures-AS_DLL`` () = singleTestBuildAndRun' "core/genericmeasures" AS_DLL [] let hiding () = - let cfg = testConfig "core/hiding" + let cfg = testConfig' "core/hiding" fsc cfg "%s -a --optimize -o:lib.dll" cfg.fsc_flags ["lib.mli";"lib.ml";"libv.ml"] @@ -783,11 +782,11 @@ module CoreTests = peverify cfg "client.exe" [] - let ``innerpoly-AS_DLL`` () = singleTestBuildAndRun "core/innerpoly" AS_DLL + let ``innerpoly-AS_DLL`` () = singleTestBuildAndRun' "core/innerpoly" AS_DLL [] let queriesCustomQueryOps () = - let cfg = testConfig "core/queriesCustomQueryOps" + let cfg = testConfig' "core/queriesCustomQueryOps" fsc cfg """%s -o:test.exe -g""" cfg.fsc_flags ["test.fsx"] @@ -828,7 +827,7 @@ module CoreTests = // then /// windiff z.output.test.default.stdout.bsl a.out let printing flag diffFileOut expectedFileOut diffFileErr expectedFileErr = - let cfg = testConfig "core/printing" + let cfg = testConfig' "core/printing" if requireENCulture () then @@ -913,7 +912,7 @@ module CoreTests = let signedtest(programId:string, args:string, expectedSigning:SigningType) = - let cfg = testConfig "core/signedtests" + let cfg = testConfig' "core/signedtests" let newFlags = cfg.fsc_flags + " " + args let exefile = programId + ".exe" @@ -993,12 +992,12 @@ module CoreTests = #if !NETCOREAPP [] let quotes () = - let cfg = testConfig "core/quotes" + let cfg = testConfig' "core/quotes" csc cfg """/nologo /target:library /out:cslib.dll""" ["cslib.cs"] - fsc cfg "%s --define:LANGVERSION_PREVIEW --langversion:preview -o:test.exe -r cslib.dll -g" cfg.fsc_flags ["test.fsx"] + fsc cfg "%s --define:LANGVERSION_PREVIEW --langversion:5.0 -o:test.exe -r cslib.dll -g" cfg.fsc_flags ["test.fsx"] peverify cfg "test.exe" @@ -1038,7 +1037,7 @@ module CoreTests = [] let parsing () = - let cfg = testConfig "core/parsing" + let cfg = testConfig' "core/parsing" fsc cfg "%s -a -o:crlf.dll -g" cfg.fsc_flags ["crlf.ml"] @@ -1048,7 +1047,7 @@ module CoreTests = [] let unicode () = - let cfg = testConfig "core/unicode" + let cfg = testConfig' "core/unicode" fsc cfg "%s -a -o:kanji-unicode-utf8-nosig-codepage-65001.dll -g" cfg.fsc_flags ["kanji-unicode-utf8-nosig-codepage-65001.fs"] @@ -1073,7 +1072,7 @@ module CoreTests = [] let internalsvisible () = - let cfg = testConfig "core/internalsvisible" + let cfg = testConfig' "core/internalsvisible" // Compiling F# Library fsc cfg "%s --version:1.2.3 --keyfile:key.snk -a --optimize -o:library.dll" cfg.fsc_flags ["library.fsi"; "library.fs"] @@ -1097,7 +1096,7 @@ module CoreTests = // Repro for https://github.com/Microsoft/visualfsharp/issues/1298 [] let fileorder () = - let cfg = testConfig "core/fileorder" + let cfg = testConfig' "core/fileorder" log "== Compiling F# Library and Code, when empty file libfile2.fs IS NOT included" fsc cfg "%s -a --optimize -o:lib.dll " cfg.fsc_flags ["libfile1.fs"] @@ -1124,7 +1123,7 @@ module CoreTests = // Repro for https://github.com/Microsoft/visualfsharp/issues/2679 [] let ``add files with same name from different folders`` () = - let cfg = testConfig "core/samename" + let cfg = testConfig' "core/samename" log "== Compiling F# Code with files with same name in different folders" fsc cfg "%s -o:test.exe" cfg.fsc_flags ["folder1/a.fs"; "folder1/b.fs"; "folder2/a.fs"; "folder2/b.fs"] @@ -1135,7 +1134,7 @@ module CoreTests = [] let ``add files with same name from different folders including signature files`` () = - let cfg = testConfig "core/samename" + let cfg = testConfig' "core/samename" log "== Compiling F# Code with files with same name in different folders including signature files" fsc cfg "%s -o:test.exe" cfg.fsc_flags ["folder1/a.fsi"; "folder1/a.fs"; "folder1/b.fsi"; "folder1/b.fs"; "folder2/a.fsi"; "folder2/a.fs"; "folder2/b.fsi"; "folder2/b.fs"] @@ -1146,7 +1145,7 @@ module CoreTests = [] let ``add files with same name from different folders including signature files that are not synced`` () = - let cfg = testConfig "core/samename" + let cfg = testConfig' "core/samename" log "== Compiling F# Code with files with same name in different folders including signature files" fsc cfg "%s -o:test.exe" cfg.fsc_flags ["folder1/a.fsi"; "folder1/a.fs"; "folder1/b.fs"; "folder2/a.fsi"; "folder2/a.fs"; "folder2/b.fsi"; "folder2/b.fs"] @@ -1156,21 +1155,21 @@ module CoreTests = exec cfg ("." ++ "test.exe") "" [] - let ``libtest-FSI_STDIN`` () = singleTestBuildAndRun "core/libtest" FSI_STDIN + let ``libtest-FSI_STDIN`` () = singleTestBuildAndRun' "core/libtest" FSI_STDIN [] - let ``libtest-GENERATED_SIGNATURE`` () = singleTestBuildAndRun "core/libtest" GENERATED_SIGNATURE + let ``libtest-GENERATED_SIGNATURE`` () = singleTestBuildAndRun' "core/libtest" GENERATED_SIGNATURE [] - let ``libtest-FSC_OPT_MINUS_DEBUG`` () = singleTestBuildAndRun "core/libtest" FSC_OPT_MINUS_DEBUG + let ``libtest-FSC_OPT_MINUS_DEBUG`` () = singleTestBuildAndRun' "core/libtest" FSC_OPT_MINUS_DEBUG [] - let ``libtest-AS_DLL`` () = singleTestBuildAndRun "core/libtest" AS_DLL + let ``libtest-AS_DLL`` () = singleTestBuildAndRun' "core/libtest" AS_DLL [] let ``no-warn-2003-tests`` () = // see https://github.com/Microsoft/visualfsharp/issues/3139 - let cfg = testConfig "core/versionAttributes" + let cfg = testConfig' "core/versionAttributes" let stdoutPath = "out.stdout.txt" |> getfullpath cfg let stderrPath = "out.stderr.txt" |> getfullpath cfg let stderrBaseline = "out.stderr.bsl" |> getfullpath cfg @@ -1229,7 +1228,7 @@ module CoreTests = [] let ``load-script`` () = - let cfg = testConfig "core/load-script" + let cfg = testConfig' "core/load-script" let stdoutPath = "out.stdout.txt" |> getfullpath cfg let stderrPath = "out.stderr.txt" |> getfullpath cfg @@ -1358,68 +1357,68 @@ module CoreTests = #endif [] - let ``longnames-FSC_BASIC`` () = singleTestBuildAndRun "core/longnames" FSC_BASIC + let ``longnames-FSC_BASIC`` () = singleTestBuildAndRun' "core/longnames" FSC_BASIC [] - let ``longnames-FSI_BASIC`` () = singleTestBuildAndRun "core/longnames" FSI_BASIC + let ``longnames-FSI_BASIC`` () = singleTestBuildAndRun' "core/longnames" FSI_BASIC [] - let ``math-numbersVS2008-FSC_BASIC`` () = singleTestBuildAndRun "core/math/numbersVS2008" FSC_BASIC + let ``math-numbersVS2008-FSC_BASIC`` () = singleTestBuildAndRun' "core/math/numbersVS2008" FSC_BASIC [] - let ``math-numbersVS2008-FSI_BASIC`` () = singleTestBuildAndRun "core/math/numbersVS2008" FSI_BASIC + let ``math-numbersVS2008-FSI_BASIC`` () = singleTestBuildAndRun' "core/math/numbersVS2008" FSI_BASIC [] - let ``patterns-FSC_BASIC`` () = singleTestBuildAndRun "core/patterns" FSC_BASIC + let ``patterns-FSC_BASIC`` () = singleTestBuildAndRun' "core/patterns" FSC_BASIC //BUGBUG: https://github.com/Microsoft/visualfsharp/issues/6601 // [] // let ``patterns-FSI_BASIC`` () = singleTestBuildAndRun' "core/patterns" FSI_BASIC [] - let ``pinvoke-FSC_BASIC`` () = singleTestBuildAndRun "core/pinvoke" FSC_BASIC + let ``pinvoke-FSC_BASIC`` () = singleTestBuildAndRun' "core/pinvoke" FSC_BASIC [] let ``pinvoke-FSI_BASIC`` () = - singleTestBuildAndRun "core/pinvoke" FSI_BASIC + singleTestBuildAndRun' "core/pinvoke" FSI_BASIC [] - let ``fsi_load-FSC_BASIC`` () = singleTestBuildAndRun "core/fsi-load" FSC_BASIC + let ``fsi_load-FSC_BASIC`` () = singleTestBuildAndRun' "core/fsi-load" FSC_BASIC [] - let ``fsi_load-FSI_BASIC`` () = singleTestBuildAndRun "core/fsi-load" FSI_BASIC + let ``fsi_load-FSI_BASIC`` () = singleTestBuildAndRun' "core/fsi-load" FSI_BASIC #if !NETCOREAPP [] - let ``measures-AS_DLL`` () = singleTestBuildAndRun "core/measures" AS_DLL + let ``measures-AS_DLL`` () = singleTestBuildAndRun' "core/measures" AS_DLL [] - let ``members-basics-AS_DLL`` () = singleTestBuildAndRun "core/members/basics" AS_DLL + let ``members-basics-AS_DLL`` () = singleTestBuildAndRun' "core/members/basics" AS_DLL [] - let ``members-basics-hw`` () = singleTestBuildAndRun "core/members/basics-hw" FSC_BASIC + let ``members-basics-hw`` () = singleTestBuildAndRun' "core/members/basics-hw" FSC_BASIC [] - let ``members-basics-hw-mutrec`` () = singleTestBuildAndRun "core/members/basics-hw-mutrec" FSC_BASIC + let ``members-basics-hw-mutrec`` () = singleTestBuildAndRun' "core/members/basics-hw-mutrec" FSC_BASIC [] - let ``members-incremental-FSC_BASIC`` () = singleTestBuildAndRun "core/members/incremental" FSC_BASIC + let ``members-incremental-FSC_BASIC`` () = singleTestBuildAndRun' "core/members/incremental" FSC_BASIC [] - let ``members-incremental-FSI_BASIC`` () = singleTestBuildAndRun "core/members/incremental" FSI_BASIC + let ``members-incremental-FSI_BASIC`` () = singleTestBuildAndRun' "core/members/incremental" FSI_BASIC [] - let ``members-incremental-hw-FSC_BASIC`` () = singleTestBuildAndRun "core/members/incremental-hw" FSC_BASIC + let ``members-incremental-hw-FSC_BASIC`` () = singleTestBuildAndRun' "core/members/incremental-hw" FSC_BASIC [] - let ``members-incremental-hw-FSI_BASIC`` () = singleTestBuildAndRun "core/members/incremental-hw" FSI_BASIC + let ``members-incremental-hw-FSI_BASIC`` () = singleTestBuildAndRun' "core/members/incremental-hw" FSI_BASIC [] - let ``members-incremental-hw-mutrec-FSC_BASIC`` () = singleTestBuildAndRun "core/members/incremental-hw-mutrec" FSC_BASIC + let ``members-incremental-hw-mutrec-FSC_BASIC`` () = singleTestBuildAndRun' "core/members/incremental-hw-mutrec" FSC_BASIC [] let queriesLeafExpressionConvert () = - let cfg = testConfig "core/queriesLeafExpressionConvert" + let cfg = testConfig' "core/queriesLeafExpressionConvert" fsc cfg "%s -o:test.exe -g" cfg.fsc_flags ["test.fsx"] @@ -1450,7 +1449,7 @@ module CoreTests = [] let queriesNullableOperators () = - let cfg = testConfig "core/queriesNullableOperators" + let cfg = testConfig' "core/queriesNullableOperators" fsc cfg "%s -o:test.exe -g" cfg.fsc_flags ["test.fsx"] @@ -1474,7 +1473,7 @@ module CoreTests = [] let queriesOverIEnumerable () = - let cfg = testConfig "core/queriesOverIEnumerable" + let cfg = testConfig' "core/queriesOverIEnumerable" fsc cfg "%s -o:test.exe -g" cfg.fsc_flags ["test.fsx"] @@ -1504,7 +1503,7 @@ module CoreTests = [] let queriesOverIQueryable () = - let cfg = testConfig "core/queriesOverIQueryable" + let cfg = testConfig' "core/queriesOverIQueryable" fsc cfg "%s -o:test.exe -g" cfg.fsc_flags ["test.fsx"] @@ -1535,7 +1534,7 @@ module CoreTests = [] let quotesDebugInfo () = - let cfg = testConfig "core/quotesDebugInfo" + let cfg = testConfig' "core/quotesDebugInfo" fsc cfg "%s --quotations-debug+ --optimize -o:test.exe -g" cfg.fsc_flags ["test.fsx"] @@ -1566,7 +1565,7 @@ module CoreTests = [] let quotesInMultipleModules () = - let cfg = testConfig "core/quotesInMultipleModules" + let cfg = testConfig' "core/quotesInMultipleModules" fsc cfg "%s -o:module1.dll --target:library" cfg.fsc_flags ["module1.fsx"] @@ -1615,15 +1614,15 @@ module CoreTests = #endif [] - let ``reflect-FSC_BASIC`` () = singleTestBuildAndRun "core/reflect" FSC_BASIC + let ``reflect-FSC_BASIC`` () = singleTestBuildAndRun' "core/reflect" FSC_BASIC [] - let ``reflect-FSI_BASIC`` () = singleTestBuildAndRun "core/reflect" FSI_BASIC + let ``reflect-FSI_BASIC`` () = singleTestBuildAndRun' "core/reflect" FSI_BASIC #if !NETCOREAPP [] let refnormalization () = - let cfg = testConfig "core/refnormalization" + let cfg = testConfig' "core/refnormalization" // Prepare by building multiple versions of the test assemblies fsc cfg @"%s --target:library -o:version1\DependentAssembly.dll -g --version:1.0.0.0 --keyfile:keyfile.snk" cfg.fsc_flags [@"DependentAssembly.fs"] @@ -1659,7 +1658,7 @@ module CoreTests = [] let testResources () = - let cfg = testConfig "core/resources" + let cfg = testConfig' "core/resources" fsc cfg "%s --resource:Resources.resources -o:test-embed.exe -g" cfg.fsc_flags ["test.fs"] @@ -1687,7 +1686,7 @@ module CoreTests = [] let topinit () = - let cfg = testConfig "core/topinit" + let cfg = testConfig' "core/topinit" fsc cfg "%s --optimize -o both69514.exe -g" cfg.fsc_flags ["lib69514.fs"; "app69514.fs"] @@ -1815,7 +1814,7 @@ module CoreTests = [] let unitsOfMeasure () = - let cfg = testConfig "core/unitsOfMeasure" + let cfg = testConfig' "core/unitsOfMeasure" fsc cfg "%s --optimize- -o:test.exe -g" cfg.fsc_flags ["test.fs"] @@ -1829,7 +1828,7 @@ module CoreTests = [] let verify () = - let cfg = testConfig "core/verify" + let cfg = testConfig' "core/verify" peverifyWithArgs cfg "/nologo" (cfg.FSharpBuild) @@ -1846,7 +1845,7 @@ module CoreTests = [] let ``property setter in method or constructor`` () = - let cfg = testConfig "core/members/set-only-property" + let cfg = testConfig' "core/members/set-only-property" csc cfg @"%s /target:library /out:cs.dll" cfg.csc_flags ["cs.cs"] vbc cfg @"%s /target:library /out:vb.dll" cfg.vbc_flags ["vb.vb"] fsc cfg @"%s /target:library /out:fs.dll" cfg.fsc_flags ["fs.fs"] @@ -1854,40 +1853,38 @@ module CoreTests = #endif -[] module VersionTests = [] - let ``member-selfidentifier-version4.6``() = singleTestBuildAndRunVersion "core/members/self-identifier/version46" FSC_BUILDONLY "4.6" + let ``member-selfidentifier-version4.6``() = singleTestBuildAndRunVersion' "core/members/self-identifier/version46" FSC_BUILDONLY "4.6" [] - let ``member-selfidentifier-version4.7``() = singleTestBuildAndRun "core/members/self-identifier/version47" FSC_BUILDONLY + let ``member-selfidentifier-version4.7``() = singleTestBuildAndRun' "core/members/self-identifier/version47" FSC_BUILDONLY [] - let ``indent-version4.6``() = singleTestBuildAndRunVersion "core/indent/version46" FSC_BUILDONLY "4.6" + let ``indent-version4.6``() = singleTestBuildAndRunVersion' "core/indent/version46" FSC_BUILDONLY "4.6" [] - let ``indent-version4.7``() = singleTestBuildAndRun "core/indent/version47" FSC_BUILDONLY + let ``indent-version4.7``() = singleTestBuildAndRun' "core/indent/version47" FSC_BUILDONLY [] - let ``nameof-version4.6``() = singleTestBuildAndRunVersion "core/nameof/version46" FSC_BUILDONLY "4.6" + let ``nameof-version4.6``() = singleTestBuildAndRunVersion' "core/nameof/version46" FSC_BUILDONLY "4.6" [] - let ``nameof-versionpreview``() = singleTestBuildAndRunVersion "core/nameof/preview" FSC_BUILDONLY "preview" + let ``nameof-versionpreview``() = singleTestBuildAndRunVersion' "core/nameof/preview" FSC_BUILDONLY "preview" [] - let ``nameof-execute``() = singleTestBuildAndRunVersion "core/nameof/preview" FSC_BASIC "preview" + let ``nameof-execute``() = singleTestBuildAndRunVersion' "core/nameof/preview" FSC_BASIC "preview" [] - let ``nameof-fsi``() = singleTestBuildAndRunVersion "core/nameof/preview" FSI_BASIC "preview" + let ``nameof-fsi``() = singleTestBuildAndRunVersion' "core/nameof/preview" FSI_BASIC "preview" #if !NETCOREAPP -[] module ToolsTests = // This test is disabled in coreclr builds dependent on fixing : https://github.com/Microsoft/visualfsharp/issues/2600 [] let bundle () = - let cfg = testConfig "tools/bundle" + let cfg = testConfig' "tools/bundle" fsc cfg "%s --progress --standalone -o:test-one-fsharp-module.exe -g" cfg.fsc_flags ["test-one-fsharp-module.fs"] @@ -1907,35 +1904,34 @@ module ToolsTests = #endif [] - let ``eval-FSC_BASIC`` () = singleTestBuildAndRun "tools/eval" FSC_BASIC + let ``eval-FSC_BASIC`` () = singleTestBuildAndRun' "tools/eval" FSC_BASIC [] - let ``eval-FSI_BASIC`` () = singleTestBuildAndRun "tools/eval" FSI_BASIC + let ``eval-FSI_BASIC`` () = singleTestBuildAndRun' "tools/eval" FSI_BASIC -[] module RegressionTests = [] - let ``literal-value-bug-2-FSC_BASIC`` () = singleTestBuildAndRun "regression/literal-value-bug-2" FSC_BASIC + let ``literal-value-bug-2-FSC_BASIC`` () = singleTestBuildAndRun' "regression/literal-value-bug-2" FSC_BASIC [] - let ``literal-value-bug-2-FSI_BASIC`` () = singleTestBuildAndRun "regression/literal-value-bug-2" FSI_BASIC + let ``literal-value-bug-2-FSI_BASIC`` () = singleTestBuildAndRun' "regression/literal-value-bug-2" FSI_BASIC [] - let ``OverloadResolution-bug-FSC_BASIC`` () = singleTestBuildAndRun "regression/OverloadResolution-bug" FSC_BASIC + let ``OverloadResolution-bug-FSC_BASIC`` () = singleTestBuildAndRun' "regression/OverloadResolution-bug" FSC_BASIC [] - let ``OverloadResolution-bug-FSI_BASIC`` () = singleTestBuildAndRun "regression/OverloadResolution-bug" FSI_BASIC + let ``OverloadResolution-bug-FSI_BASIC`` () = singleTestBuildAndRun' "regression/OverloadResolution-bug" FSI_BASIC [] - let ``struct-tuple-bug-1-FSC_BASIC`` () = singleTestBuildAndRun "regression/struct-tuple-bug-1" FSC_BASIC + let ``struct-tuple-bug-1-FSC_BASIC`` () = singleTestBuildAndRun' "regression/struct-tuple-bug-1" FSC_BASIC [] - let ``tuple-bug-1-FSC_BASIC`` () = singleTestBuildAndRun "regression/tuple-bug-1" FSC_BASIC + let ``tuple-bug-1-FSC_BASIC`` () = singleTestBuildAndRun' "regression/tuple-bug-1" FSC_BASIC #if !NETCOREAPP [] let ``SRTP doesn't handle calling member hiding hinherited members`` () = - let cfg = testConfig "regression/5531" + let cfg = testConfig' "regression/5531" let outFile = "compilation.output.test.txt" let expectedFile = "compilation.output.test.bsl" @@ -1962,16 +1958,16 @@ module RegressionTests = #endif [] - let ``26`` () = singleTestBuildAndRun "regression/26" FSC_BASIC + let ``26`` () = singleTestBuildAndRun' "regression/26" FSC_BASIC [] - let ``321`` () = singleTestBuildAndRun "regression/321" FSC_BASIC + let ``321`` () = singleTestBuildAndRun' "regression/321" FSC_BASIC #if !NETCOREAPP // This test is disabled in coreclr builds dependent on fixing : https://github.com/Microsoft/visualfsharp/issues/2600 [] let ``655`` () = - let cfg = testConfig "regression/655" + let cfg = testConfig' "regression/655" fsc cfg "%s -a -o:pack.dll" cfg.fsc_flags ["xlibC.ml"] @@ -1990,7 +1986,7 @@ module RegressionTests = // This test is disabled in coreclr builds dependent on fixing : https://github.com/Microsoft/visualfsharp/issues/2600 [] let ``656`` () = - let cfg = testConfig "regression/656" + let cfg = testConfig' "regression/656" fsc cfg "%s -o:pack.exe" cfg.fsc_flags ["misc.fs mathhelper.fs filehelper.fs formshelper.fs plot.fs traj.fs playerrecord.fs trackedplayers.fs form.fs"] @@ -2000,14 +1996,14 @@ module RegressionTests = #if !NETCOREAPP // Requires WinForms [] - let ``83`` () = singleTestBuildAndRun "regression/83" FSC_BASIC + let ``83`` () = singleTestBuildAndRun' "regression/83" FSC_BASIC [] - let ``84`` () = singleTestBuildAndRun "regression/84" FSC_BASIC + let ``84`` () = singleTestBuildAndRun' "regression/84" FSC_BASIC [] let ``85`` () = - let cfg = testConfig "regression/85" + let cfg = testConfig' "regression/85" fsc cfg "%s -r:Category.dll -a -o:petshop.dll" cfg.fsc_flags ["Category.ml"] @@ -2015,27 +2011,26 @@ module RegressionTests = #endif [] - let ``86`` () = singleTestBuildAndRun "regression/86" FSC_BASIC + let ``86`` () = singleTestBuildAndRun' "regression/86" FSC_BASIC [] - let ``struct-tuple-bug-1-FSI_BASIC`` () = singleTestBuildAndRun "regression/struct-tuple-bug-1" FSI_BASIC + let ``struct-tuple-bug-1-FSI_BASIC`` () = singleTestBuildAndRun' "regression/struct-tuple-bug-1" FSI_BASIC #if !NETCOREAPP // This test is disabled in coreclr builds dependent on fixing : https://github.com/Microsoft/visualfsharp/issues/2600 [] let ``struct-measure-bug-1`` () = - let cfg = testConfig "regression/struct-measure-bug-1" + let cfg = testConfig' "regression/struct-measure-bug-1" fsc cfg "%s --optimize- -o:test.exe -g" cfg.fsc_flags ["test.fs"] peverify cfg "test.exe" -[] module OptimizationTests = [] let functionSizes () = - let cfg = testConfig "optimize/analyses" + let cfg = testConfig' "optimize/analyses" let outFile = "sizes.FunctionSizes.output.test.txt" let expectedFile = "sizes.FunctionSizes.output.test.bsl" @@ -2053,7 +2048,7 @@ module OptimizationTests = [] let totalSizes () = - let cfg = testConfig "optimize/analyses" + let cfg = testConfig' "optimize/analyses" let outFile = "sizes.TotalSizes.output.test.txt" let expectedFile = "sizes.TotalSizes.output.test.bsl" @@ -2070,7 +2065,7 @@ module OptimizationTests = [] let hasEffect () = - let cfg = testConfig "optimize/analyses" + let cfg = testConfig' "optimize/analyses" let outFile = "effects.HasEffect.output.test.txt" let expectedFile = "effects.HasEffect.output.test.bsl" @@ -2087,7 +2082,7 @@ module OptimizationTests = [] let noNeedToTailcall () = - let cfg = testConfig "optimize/analyses" + let cfg = testConfig' "optimize/analyses" let outFile = "tailcalls.NoNeedToTailcall.output.test.txt" let expectedFile = "tailcalls.NoNeedToTailcall.output.test.bsl" @@ -2104,7 +2099,7 @@ module OptimizationTests = [] let ``inline`` () = - let cfg = testConfig "optimize/inline" + let cfg = testConfig' "optimize/inline" fsc cfg "%s -g --optimize- --target:library -o:lib.dll" cfg.fsc_flags ["lib.fs"; "lib2.fs"] @@ -2143,7 +2138,7 @@ module OptimizationTests = [] let stats () = - let cfg = testConfig "optimize/stats" + let cfg = testConfig' "optimize/stats" ildasm cfg "/out=FSharp.Core.il" cfg.FSCOREDLLPATH @@ -2164,93 +2159,92 @@ module OptimizationTests = log "%s" m #endif -[] module TypecheckTests = [] let ``full-rank-arrays`` () = - let cfg = testConfig "typecheck/full-rank-arrays" + let cfg = testConfig' "typecheck/full-rank-arrays" SingleTest.singleTestBuildAndRunWithCopyDlls cfg "full-rank-arrays.dll" FSC_BASIC [] - let misc () = singleTestBuildAndRun "typecheck/misc" FSC_BASIC + let misc () = singleTestBuildAndRun' "typecheck/misc" FSC_BASIC #if !NETCOREAPP [] let ``sigs pos26`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:exe -o:pos26.exe" cfg.fsc_flags ["pos26.fsi"; "pos26.fs"] peverify cfg "pos26.exe" [] let ``sigs pos25`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:exe -o:pos25.exe" cfg.fsc_flags ["pos25.fs"] peverify cfg "pos25.exe" [] let ``sigs pos27`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:exe -o:pos27.exe" cfg.fsc_flags ["pos27.fs"] peverify cfg "pos27.exe" [] let ``sigs pos28`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:exe -o:pos28.exe" cfg.fsc_flags ["pos28.fs"] peverify cfg "pos28.exe" [] let ``sigs pos29`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:exe -o:pos29.exe" cfg.fsc_flags ["pos29.fsi"; "pos29.fs"; "pos29.app.fs"] peverify cfg "pos29.exe" [] let ``sigs pos30`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:exe -o:pos30.exe --warnaserror+" cfg.fsc_flags ["pos30.fs"] peverify cfg "pos30.exe" [] let ``sigs pos24`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:exe -o:pos24.exe" cfg.fsc_flags ["pos24.fs"] peverify cfg "pos24.exe" [] let ``sigs pos31`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:exe -o:pos31.exe --warnaserror" cfg.fsc_flags ["pos31.fsi"; "pos31.fs"] peverify cfg "pos31.exe" [] let ``sigs pos32`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:library -o:pos32.dll --warnaserror" cfg.fsc_flags ["pos32.fs"] peverify cfg "pos32.dll" [] let ``sigs pos33`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:library -o:pos33.dll --warnaserror" cfg.fsc_flags ["pos33.fsi"; "pos33.fs"] peverify cfg "pos33.dll" [] let ``sigs pos34`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:library -o:pos34.dll --warnaserror" cfg.fsc_flags ["pos34.fs"] peverify cfg "pos34.dll" [] let ``sigs pos35`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:library -o:pos35.dll --warnaserror" cfg.fsc_flags ["pos35.fs"] peverify cfg "pos35.dll" [] let ``sigs pos36-srtp`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:library -o:pos36-srtp-lib.dll --warnaserror" cfg.fsc_flags ["pos36-srtp-lib.fs"] fsc cfg "%s --target:exe -r:pos36-srtp-lib.dll -o:pos36-srtp-app.exe --warnaserror" cfg.fsc_flags ["pos36-srtp-app.fs"] peverify cfg "pos36-srtp-lib.dll" @@ -2259,129 +2253,129 @@ module TypecheckTests = [] let ``sigs pos37`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:library -o:pos37.dll --warnaserror" cfg.fsc_flags ["pos37.fs"] peverify cfg "pos37.dll" [] let ``sigs pos38`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:library -o:pos38.dll --warnaserror" cfg.fsc_flags ["pos38.fs"] peverify cfg "pos38.dll" [] let ``sigs pos39`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:exe -o:pos39.exe" cfg.fsc_flags ["pos39.fs"] peverify cfg "pos39.exe" exec cfg ("." ++ "pos39.exe") "" [] let ``sigs pos23`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:exe -o:pos23.exe" cfg.fsc_flags ["pos23.fs"] peverify cfg "pos23.exe" exec cfg ("." ++ "pos23.exe") "" [] let ``sigs pos20`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:exe -o:pos20.exe" cfg.fsc_flags ["pos20.fs"] peverify cfg "pos20.exe" exec cfg ("." ++ "pos20.exe") "" [] let ``sigs pos19`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:exe -o:pos19.exe" cfg.fsc_flags ["pos19.fs"] peverify cfg "pos19.exe" exec cfg ("." ++ "pos19.exe") "" [] let ``sigs pos18`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:exe -o:pos18.exe" cfg.fsc_flags ["pos18.fs"] peverify cfg "pos18.exe" exec cfg ("." ++ "pos18.exe") "" [] let ``sigs pos16`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:exe -o:pos16.exe" cfg.fsc_flags ["pos16.fs"] peverify cfg "pos16.exe" exec cfg ("." ++ "pos16.exe") "" [] let ``sigs pos17`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:exe -o:pos17.exe" cfg.fsc_flags ["pos17.fs"] peverify cfg "pos17.exe" exec cfg ("." ++ "pos17.exe") "" [] let ``sigs pos15`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:exe -o:pos15.exe" cfg.fsc_flags ["pos15.fs"] peverify cfg "pos15.exe" exec cfg ("." ++ "pos15.exe") "" [] let ``sigs pos14`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:exe -o:pos14.exe" cfg.fsc_flags ["pos14.fs"] peverify cfg "pos14.exe" exec cfg ("." ++ "pos14.exe") "" [] let ``sigs pos13`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s --target:exe -o:pos13.exe" cfg.fsc_flags ["pos13.fs"] peverify cfg "pos13.exe" exec cfg ("." ++ "pos13.exe") "" [] let ``sigs pos12 `` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s -a -o:pos12.dll" cfg.fsc_flags ["pos12.fs"] [] let ``sigs pos11`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s -a -o:pos11.dll" cfg.fsc_flags ["pos11.fs"] [] let ``sigs pos10`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s -a -o:pos10.dll" cfg.fsc_flags ["pos10.fs"] peverify cfg "pos10.dll" [] let ``sigs pos09`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s -a -o:pos09.dll" cfg.fsc_flags ["pos09.fs"] peverify cfg "pos09.dll" [] let ``sigs pos07`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s -a -o:pos07.dll" cfg.fsc_flags ["pos07.fs"] peverify cfg "pos07.dll" [] let ``sigs pos08`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s -a -o:pos08.dll" cfg.fsc_flags ["pos08.fs"] peverify cfg "pos08.dll" [] let ``sigs pos06`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s -a -o:pos06.dll" cfg.fsc_flags ["pos06.fs"] peverify cfg "pos06.dll" [] let ``sigs pos03`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s -a -o:pos03.dll" cfg.fsc_flags ["pos03.fs"] peverify cfg "pos03.dll" fsc cfg "%s -a -o:pos03a.dll" cfg.fsc_flags ["pos03a.fsi"; "pos03a.fs"] @@ -2389,520 +2383,520 @@ module TypecheckTests = [] let ``sigs pos01a`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s -a -o:pos01a.dll" cfg.fsc_flags ["pos01a.fsi"; "pos01a.fs"] peverify cfg "pos01a.dll" [] let ``sigs pos02`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s -a -o:pos02.dll" cfg.fsc_flags ["pos02.fs"] peverify cfg "pos02.dll" [] let ``sigs pos05`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" fsc cfg "%s -a -o:pos05.dll" cfg.fsc_flags ["pos05.fs"] [] - let ``type check neg01`` () = singleNegTest (testConfig "typecheck/sigs") "neg01" + let ``type check neg01`` () = singleNegTest (testConfig' "typecheck/sigs") "neg01" [] - let ``type check neg02`` () = singleNegTest (testConfig "typecheck/sigs") "neg02" + let ``type check neg02`` () = singleNegTest (testConfig' "typecheck/sigs") "neg02" [] - let ``type check neg03`` () = singleNegTest (testConfig "typecheck/sigs") "neg03" + let ``type check neg03`` () = singleNegTest (testConfig' "typecheck/sigs") "neg03" [] - let ``type check neg04`` () = singleNegTest (testConfig "typecheck/sigs") "neg04" + let ``type check neg04`` () = singleNegTest (testConfig' "typecheck/sigs") "neg04" [] - let ``type check neg05`` () = singleNegTest (testConfig "typecheck/sigs") "neg05" + let ``type check neg05`` () = singleNegTest (testConfig' "typecheck/sigs") "neg05" [] - let ``type check neg06`` () = singleNegTest (testConfig "typecheck/sigs") "neg06" + let ``type check neg06`` () = singleNegTest (testConfig' "typecheck/sigs") "neg06" [] - let ``type check neg06_a`` () = singleNegTest (testConfig "typecheck/sigs") "neg06_a" + let ``type check neg06_a`` () = singleNegTest (testConfig' "typecheck/sigs") "neg06_a" [] - let ``type check neg06_b`` () = singleNegTest (testConfig "typecheck/sigs") "neg06_b" + let ``type check neg06_b`` () = singleNegTest (testConfig' "typecheck/sigs") "neg06_b" [] - let ``type check neg07`` () = singleNegTest (testConfig "typecheck/sigs") "neg07" + let ``type check neg07`` () = singleNegTest (testConfig' "typecheck/sigs") "neg07" [] - let ``type check neg08`` () = singleNegTest (testConfig "typecheck/sigs") "neg08" + let ``type check neg08`` () = singleNegTest (testConfig' "typecheck/sigs") "neg08" [] - let ``type check neg09`` () = singleNegTest (testConfig "typecheck/sigs") "neg09" + let ``type check neg09`` () = singleNegTest (testConfig' "typecheck/sigs") "neg09" [] - let ``type check neg10`` () = singleNegTest (testConfig "typecheck/sigs") "neg10" + let ``type check neg10`` () = singleNegTest (testConfig' "typecheck/sigs") "neg10" [] - let ``type check neg10_a`` () = singleNegTest (testConfig "typecheck/sigs") "neg10_a" + let ``type check neg10_a`` () = singleNegTest (testConfig' "typecheck/sigs") "neg10_a" [] - let ``type check neg11`` () = singleNegTest (testConfig "typecheck/sigs") "neg11" + let ``type check neg11`` () = singleNegTest (testConfig' "typecheck/sigs") "neg11" [] - let ``type check neg12`` () = singleNegTest (testConfig "typecheck/sigs") "neg12" + let ``type check neg12`` () = singleNegTest (testConfig' "typecheck/sigs") "neg12" [] - let ``type check neg13`` () = singleNegTest (testConfig "typecheck/sigs") "neg13" + let ``type check neg13`` () = singleNegTest (testConfig' "typecheck/sigs") "neg13" [] - let ``type check neg14`` () = singleNegTest (testConfig "typecheck/sigs") "neg14" + let ``type check neg14`` () = singleNegTest (testConfig' "typecheck/sigs") "neg14" [] - let ``type check neg15`` () = singleNegTest (testConfig "typecheck/sigs") "neg15" + let ``type check neg15`` () = singleNegTest (testConfig' "typecheck/sigs") "neg15" [] - let ``type check neg16`` () = singleNegTest (testConfig "typecheck/sigs") "neg16" + let ``type check neg16`` () = singleNegTest (testConfig' "typecheck/sigs") "neg16" [] - let ``type check neg17`` () = singleNegTest (testConfig "typecheck/sigs") "neg17" + let ``type check neg17`` () = singleNegTest (testConfig' "typecheck/sigs") "neg17" [] - let ``type check neg18`` () = singleNegTest (testConfig "typecheck/sigs") "neg18" + let ``type check neg18`` () = singleNegTest (testConfig' "typecheck/sigs") "neg18" [] - let ``type check neg19`` () = singleNegTest (testConfig "typecheck/sigs") "neg19" + let ``type check neg19`` () = singleNegTest (testConfig' "typecheck/sigs") "neg19" [] - let ``type check neg20`` () = singleNegTest (testConfig "typecheck/sigs") "neg20" + let ``type check neg20`` () = singleNegTest (testConfig' "typecheck/sigs") "neg20" [] - let ``type check neg21`` () = singleNegTest (testConfig "typecheck/sigs") "neg21" + let ``type check neg21`` () = singleNegTest (testConfig' "typecheck/sigs") "neg21" [] - let ``type check neg22`` () = singleNegTest (testConfig "typecheck/sigs") "neg22" + let ``type check neg22`` () = singleNegTest (testConfig' "typecheck/sigs") "neg22" [] - let ``type check neg23`` () = singleNegTest (testConfig "typecheck/sigs") "neg23" + let ``type check neg23`` () = singleNegTest (testConfig' "typecheck/sigs") "neg23" [] let ``type check neg24 version 4.6`` () = - let cfg = testConfig "typecheck/sigs/version46" + let cfg = testConfig' "typecheck/sigs/version46" // For some reason this warning is off by default in the test framework but in this case we are testing for it let cfg = { cfg with fsc_flags = cfg.fsc_flags.Replace("--nowarn:20", "") } singleVersionedNegTest cfg "4.6" "neg24" [] let ``type check neg24 version 4.7`` () = - let cfg = testConfig "typecheck/sigs/version47" + let cfg = testConfig' "typecheck/sigs/version47" // For some reason this warning is off by default in the test framework but in this case we are testing for it let cfg = { cfg with fsc_flags = cfg.fsc_flags.Replace("--nowarn:20", "") } singleVersionedNegTest cfg "preview" "neg24" [] - let ``type check neg25`` () = singleNegTest (testConfig "typecheck/sigs") "neg25" + let ``type check neg25`` () = singleNegTest (testConfig' "typecheck/sigs") "neg25" [] - let ``type check neg26`` () = singleNegTest (testConfig "typecheck/sigs") "neg26" + let ``type check neg26`` () = singleNegTest (testConfig' "typecheck/sigs") "neg26" [] - let ``type check neg27`` () = singleNegTest (testConfig "typecheck/sigs") "neg27" + let ``type check neg27`` () = singleNegTest (testConfig' "typecheck/sigs") "neg27" [] - let ``type check neg28`` () = singleNegTest (testConfig "typecheck/sigs") "neg28" + let ``type check neg28`` () = singleNegTest (testConfig' "typecheck/sigs") "neg28" [] - let ``type check neg29`` () = singleNegTest (testConfig "typecheck/sigs") "neg29" + let ``type check neg29`` () = singleNegTest (testConfig' "typecheck/sigs") "neg29" [] - let ``type check neg30`` () = singleNegTest (testConfig "typecheck/sigs") "neg30" + let ``type check neg30`` () = singleNegTest (testConfig' "typecheck/sigs") "neg30" [] - let ``type check neg31`` () = singleNegTest (testConfig "typecheck/sigs") "neg31" + let ``type check neg31`` () = singleNegTest (testConfig' "typecheck/sigs") "neg31" [] - let ``type check neg32`` () = singleNegTest (testConfig "typecheck/sigs") "neg32" + let ``type check neg32`` () = singleNegTest (testConfig' "typecheck/sigs") "neg32" [] - let ``type check neg33`` () = singleNegTest (testConfig "typecheck/sigs") "neg33" + let ``type check neg33`` () = singleNegTest (testConfig' "typecheck/sigs") "neg33" [] - let ``type check neg34`` () = singleNegTest (testConfig "typecheck/sigs") "neg34" + let ``type check neg34`` () = singleNegTest (testConfig' "typecheck/sigs") "neg34" [] - let ``type check neg35`` () = singleNegTest (testConfig "typecheck/sigs") "neg35" + let ``type check neg35`` () = singleNegTest (testConfig' "typecheck/sigs") "neg35" [] - let ``type check neg36`` () = singleNegTest (testConfig "typecheck/sigs") "neg36" + let ``type check neg36`` () = singleNegTest (testConfig' "typecheck/sigs") "neg36" [] - let ``type check neg37`` () = singleNegTest (testConfig "typecheck/sigs") "neg37" + let ``type check neg37`` () = singleNegTest (testConfig' "typecheck/sigs") "neg37" [] - let ``type check neg37_a`` () = singleNegTest (testConfig "typecheck/sigs") "neg37_a" + let ``type check neg37_a`` () = singleNegTest (testConfig' "typecheck/sigs") "neg37_a" [] - let ``type check neg38`` () = singleNegTest (testConfig "typecheck/sigs") "neg38" + let ``type check neg38`` () = singleNegTest (testConfig' "typecheck/sigs") "neg38" [] - let ``type check neg39`` () = singleNegTest (testConfig "typecheck/sigs") "neg39" + let ``type check neg39`` () = singleNegTest (testConfig' "typecheck/sigs") "neg39" [] - let ``type check neg40`` () = singleNegTest (testConfig "typecheck/sigs") "neg40" + let ``type check neg40`` () = singleNegTest (testConfig' "typecheck/sigs") "neg40" [] - let ``type check neg41`` () = singleNegTest (testConfig "typecheck/sigs") "neg41" + let ``type check neg41`` () = singleNegTest (testConfig' "typecheck/sigs") "neg41" [] - let ``type check neg42`` () = singleNegTest (testConfig "typecheck/sigs") "neg42" + let ``type check neg42`` () = singleNegTest (testConfig' "typecheck/sigs") "neg42" [] - let ``type check neg43`` () = singleNegTest (testConfig "typecheck/sigs") "neg43" + let ``type check neg43`` () = singleNegTest (testConfig' "typecheck/sigs") "neg43" [] - let ``type check neg44`` () = singleNegTest (testConfig "typecheck/sigs") "neg44" + let ``type check neg44`` () = singleNegTest (testConfig' "typecheck/sigs") "neg44" [] - let ``type check neg45`` () = singleNegTest (testConfig "typecheck/sigs") "neg45" + let ``type check neg45`` () = singleNegTest (testConfig' "typecheck/sigs") "neg45" [] - let ``type check neg46`` () = singleNegTest (testConfig "typecheck/sigs") "neg46" + let ``type check neg46`` () = singleNegTest (testConfig' "typecheck/sigs") "neg46" [] - let ``type check neg47`` () = singleNegTest (testConfig "typecheck/sigs") "neg47" + let ``type check neg47`` () = singleNegTest (testConfig' "typecheck/sigs") "neg47" [] - let ``type check neg48`` () = singleNegTest (testConfig "typecheck/sigs") "neg48" + let ``type check neg48`` () = singleNegTest (testConfig' "typecheck/sigs") "neg48" [] - let ``type check neg49`` () = singleNegTest (testConfig "typecheck/sigs") "neg49" + let ``type check neg49`` () = singleNegTest (testConfig' "typecheck/sigs") "neg49" [] - let ``type check neg50`` () = singleNegTest (testConfig "typecheck/sigs") "neg50" + let ``type check neg50`` () = singleNegTest (testConfig' "typecheck/sigs") "neg50" [] - let ``type check neg51`` () = singleNegTest (testConfig "typecheck/sigs") "neg51" + let ``type check neg51`` () = singleNegTest (testConfig' "typecheck/sigs") "neg51" [] - let ``type check neg52`` () = singleNegTest (testConfig "typecheck/sigs") "neg52" + let ``type check neg52`` () = singleNegTest (testConfig' "typecheck/sigs") "neg52" [] - let ``type check neg53`` () = singleNegTest (testConfig "typecheck/sigs") "neg53" + let ``type check neg53`` () = singleNegTest (testConfig' "typecheck/sigs") "neg53" [] - let ``type check neg54`` () = singleNegTest (testConfig "typecheck/sigs") "neg54" + let ``type check neg54`` () = singleNegTest (testConfig' "typecheck/sigs") "neg54" [] - let ``type check neg55`` () = singleNegTest (testConfig "typecheck/sigs") "neg55" + let ``type check neg55`` () = singleNegTest (testConfig' "typecheck/sigs") "neg55" [] - let ``type check neg56`` () = singleNegTest (testConfig "typecheck/sigs") "neg56" + let ``type check neg56`` () = singleNegTest (testConfig' "typecheck/sigs") "neg56" [] - let ``type check neg56_a`` () = singleNegTest (testConfig "typecheck/sigs") "neg56_a" + let ``type check neg56_a`` () = singleNegTest (testConfig' "typecheck/sigs") "neg56_a" [] - let ``type check neg56_b`` () = singleNegTest (testConfig "typecheck/sigs") "neg56_b" + let ``type check neg56_b`` () = singleNegTest (testConfig' "typecheck/sigs") "neg56_b" [] - let ``type check neg57`` () = singleNegTest (testConfig "typecheck/sigs") "neg57" + let ``type check neg57`` () = singleNegTest (testConfig' "typecheck/sigs") "neg57" [] - let ``type check neg58`` () = singleNegTest (testConfig "typecheck/sigs") "neg58" + let ``type check neg58`` () = singleNegTest (testConfig' "typecheck/sigs") "neg58" [] - let ``type check neg59`` () = singleNegTest (testConfig "typecheck/sigs") "neg59" + let ``type check neg59`` () = singleNegTest (testConfig' "typecheck/sigs") "neg59" [] - let ``type check neg60`` () = singleNegTest (testConfig "typecheck/sigs") "neg60" + let ``type check neg60`` () = singleNegTest (testConfig' "typecheck/sigs") "neg60" [] - let ``type check neg61`` () = singleNegTest (testConfig "typecheck/sigs") "neg61" + let ``type check neg61`` () = singleNegTest (testConfig' "typecheck/sigs") "neg61" [] - let ``type check neg62`` () = singleNegTest (testConfig "typecheck/sigs") "neg62" + let ``type check neg62`` () = singleNegTest (testConfig' "typecheck/sigs") "neg62" [] - let ``type check neg63`` () = singleNegTest (testConfig "typecheck/sigs") "neg63" + let ``type check neg63`` () = singleNegTest (testConfig' "typecheck/sigs") "neg63" [] - let ``type check neg64`` () = singleNegTest (testConfig "typecheck/sigs") "neg64" + let ``type check neg64`` () = singleNegTest (testConfig' "typecheck/sigs") "neg64" [] - let ``type check neg65`` () = singleNegTest (testConfig "typecheck/sigs") "neg65" + let ``type check neg65`` () = singleNegTest (testConfig' "typecheck/sigs") "neg65" [] - let ``type check neg66`` () = singleNegTest (testConfig "typecheck/sigs") "neg66" + let ``type check neg66`` () = singleNegTest (testConfig' "typecheck/sigs") "neg66" [] - let ``type check neg67`` () = singleNegTest (testConfig "typecheck/sigs") "neg67" + let ``type check neg67`` () = singleNegTest (testConfig' "typecheck/sigs") "neg67" [] - let ``type check neg68`` () = singleNegTest (testConfig "typecheck/sigs") "neg68" + let ``type check neg68`` () = singleNegTest (testConfig' "typecheck/sigs") "neg68" [] - let ``type check neg69`` () = singleNegTest (testConfig "typecheck/sigs") "neg69" + let ``type check neg69`` () = singleNegTest (testConfig' "typecheck/sigs") "neg69" [] - let ``type check neg70`` () = singleNegTest (testConfig "typecheck/sigs") "neg70" + let ``type check neg70`` () = singleNegTest (testConfig' "typecheck/sigs") "neg70" [] - let ``type check neg71`` () = singleNegTest (testConfig "typecheck/sigs") "neg71" + let ``type check neg71`` () = singleNegTest (testConfig' "typecheck/sigs") "neg71" [] - let ``type check neg72`` () = singleNegTest (testConfig "typecheck/sigs") "neg72" + let ``type check neg72`` () = singleNegTest (testConfig' "typecheck/sigs") "neg72" [] - let ``type check neg73`` () = singleNegTest (testConfig "typecheck/sigs") "neg73" + let ``type check neg73`` () = singleNegTest (testConfig' "typecheck/sigs") "neg73" [] - let ``type check neg74`` () = singleNegTest (testConfig "typecheck/sigs") "neg74" + let ``type check neg74`` () = singleNegTest (testConfig' "typecheck/sigs") "neg74" [] - let ``type check neg75`` () = singleNegTest (testConfig "typecheck/sigs") "neg75" + let ``type check neg75`` () = singleNegTest (testConfig' "typecheck/sigs") "neg75" [] - let ``type check neg76`` () = singleNegTest (testConfig "typecheck/sigs") "neg76" + let ``type check neg76`` () = singleNegTest (testConfig' "typecheck/sigs") "neg76" [] - let ``type check neg77`` () = singleNegTest (testConfig "typecheck/sigs") "neg77" + let ``type check neg77`` () = singleNegTest (testConfig' "typecheck/sigs") "neg77" [] - let ``type check neg78`` () = singleNegTest (testConfig "typecheck/sigs") "neg78" + let ``type check neg78`` () = singleNegTest (testConfig' "typecheck/sigs") "neg78" [] - let ``type check neg79`` () = singleNegTest (testConfig "typecheck/sigs") "neg79" + let ``type check neg79`` () = singleNegTest (testConfig' "typecheck/sigs") "neg79" [] - let ``type check neg80`` () = singleNegTest (testConfig "typecheck/sigs") "neg80" + let ``type check neg80`` () = singleNegTest (testConfig' "typecheck/sigs") "neg80" [] - let ``type check neg81`` () = singleNegTest (testConfig "typecheck/sigs") "neg81" + let ``type check neg81`` () = singleNegTest (testConfig' "typecheck/sigs") "neg81" [] - let ``type check neg82`` () = singleNegTest (testConfig "typecheck/sigs") "neg82" + let ``type check neg82`` () = singleNegTest (testConfig' "typecheck/sigs") "neg82" [] - let ``type check neg83`` () = singleNegTest (testConfig "typecheck/sigs") "neg83" + let ``type check neg83`` () = singleNegTest (testConfig' "typecheck/sigs") "neg83" [] - let ``type check neg84`` () = singleNegTest (testConfig "typecheck/sigs") "neg84" + let ``type check neg84`` () = singleNegTest (testConfig' "typecheck/sigs") "neg84" [] - let ``type check neg85`` () = singleNegTest (testConfig "typecheck/sigs") "neg85" + let ``type check neg85`` () = singleNegTest (testConfig' "typecheck/sigs") "neg85" [] - let ``type check neg86`` () = singleNegTest (testConfig "typecheck/sigs") "neg86" + let ``type check neg86`` () = singleNegTest (testConfig' "typecheck/sigs") "neg86" [] - let ``type check neg87`` () = singleNegTest (testConfig "typecheck/sigs") "neg87" + let ``type check neg87`` () = singleNegTest (testConfig' "typecheck/sigs") "neg87" [] - let ``type check neg88`` () = singleNegTest (testConfig "typecheck/sigs") "neg88" + let ``type check neg88`` () = singleNegTest (testConfig' "typecheck/sigs") "neg88" [] - let ``type check neg89`` () = singleNegTest (testConfig "typecheck/sigs") "neg89" + let ``type check neg89`` () = singleNegTest (testConfig' "typecheck/sigs") "neg89" [] - let ``type check neg90`` () = singleNegTest (testConfig "typecheck/sigs") "neg90" + let ``type check neg90`` () = singleNegTest (testConfig' "typecheck/sigs") "neg90" [] - let ``type check neg91`` () = singleNegTest (testConfig "typecheck/sigs") "neg91" + let ``type check neg91`` () = singleNegTest (testConfig' "typecheck/sigs") "neg91" [] - let ``type check neg92`` () = singleNegTest (testConfig "typecheck/sigs") "neg92" + let ``type check neg92`` () = singleNegTest (testConfig' "typecheck/sigs") "neg92" [] - let ``type check neg93`` () = singleNegTest (testConfig "typecheck/sigs") "neg93" + let ``type check neg93`` () = singleNegTest (testConfig' "typecheck/sigs") "neg93" [] - let ``type check neg94`` () = singleNegTest (testConfig "typecheck/sigs") "neg94" + let ``type check neg94`` () = singleNegTest (testConfig' "typecheck/sigs") "neg94" [] - let ``type check neg95`` () = singleNegTest (testConfig "typecheck/sigs") "neg95" + let ``type check neg95`` () = singleNegTest (testConfig' "typecheck/sigs") "neg95" [] - let ``type check neg96`` () = singleNegTest (testConfig "typecheck/sigs") "neg96" + let ``type check neg96`` () = singleNegTest (testConfig' "typecheck/sigs") "neg96" [] - let ``type check neg97`` () = singleNegTest (testConfig "typecheck/sigs") "neg97" + let ``type check neg97`` () = singleNegTest (testConfig' "typecheck/sigs") "neg97" [] - let ``type check neg98`` () = singleNegTest (testConfig "typecheck/sigs") "neg98" + let ``type check neg98`` () = singleNegTest (testConfig' "typecheck/sigs") "neg98" [] - let ``type check neg99`` () = singleNegTest (testConfig "typecheck/sigs") "neg99" + let ``type check neg99`` () = singleNegTest (testConfig' "typecheck/sigs") "neg99" [] let ``type check neg100`` () = - let cfg = testConfig "typecheck/sigs" + let cfg = testConfig' "typecheck/sigs" let cfg = { cfg with fsc_flags = cfg.fsc_flags + " --warnon:3218" } singleNegTest cfg "neg100" [] - let ``type check neg101`` () = singleNegTest (testConfig "typecheck/sigs") "neg101" + let ``type check neg101`` () = singleNegTest (testConfig' "typecheck/sigs") "neg101" [] - let ``type check neg102`` () = singleNegTest (testConfig "typecheck/sigs") "neg102" + let ``type check neg102`` () = singleNegTest (testConfig' "typecheck/sigs") "neg102" [] - let ``type check neg103`` () = singleNegTest (testConfig "typecheck/sigs") "neg103" + let ``type check neg103`` () = singleNegTest (testConfig' "typecheck/sigs") "neg103" [] - let ``type check neg104`` () = singleNegTest (testConfig "typecheck/sigs") "neg104" + let ``type check neg104`` () = singleNegTest (testConfig' "typecheck/sigs") "neg104" [] - let ``type check neg106`` () = singleNegTest (testConfig "typecheck/sigs") "neg106" + let ``type check neg106`` () = singleNegTest (testConfig' "typecheck/sigs") "neg106" [] - let ``type check neg107`` () = singleNegTest (testConfig "typecheck/sigs") "neg107" + let ``type check neg107`` () = singleNegTest (testConfig' "typecheck/sigs") "neg107" [] - let ``type check neg108`` () = singleNegTest (testConfig "typecheck/sigs") "neg108" + let ``type check neg108`` () = singleNegTest (testConfig' "typecheck/sigs") "neg108" [] - let ``type check neg109`` () = singleNegTest (testConfig "typecheck/sigs") "neg109" + let ``type check neg109`` () = singleNegTest (testConfig' "typecheck/sigs") "neg109" [] - let ``type check neg110`` () = singleNegTest (testConfig "typecheck/sigs") "neg110" + let ``type check neg110`` () = singleNegTest (testConfig' "typecheck/sigs") "neg110" [] - let ``type check neg111`` () = singleNegTest (testConfig "typecheck/sigs") "neg111" + let ``type check neg111`` () = singleNegTest (testConfig' "typecheck/sigs") "neg111" [] - let ``type check neg112`` () = singleNegTest (testConfig "typecheck/sigs") "neg112" + let ``type check neg112`` () = singleNegTest (testConfig' "typecheck/sigs") "neg112" [] - let ``type check neg113`` () = singleNegTest (testConfig "typecheck/sigs") "neg113" + let ``type check neg113`` () = singleNegTest (testConfig' "typecheck/sigs") "neg113" [] - let ``type check neg114`` () = singleNegTest (testConfig "typecheck/sigs") "neg114" + let ``type check neg114`` () = singleNegTest (testConfig' "typecheck/sigs") "neg114" [] - let ``type check neg115`` () = singleNegTest (testConfig "typecheck/sigs") "neg115" + let ``type check neg115`` () = singleNegTest (testConfig' "typecheck/sigs") "neg115" [] - let ``type check neg116`` () = singleNegTest (testConfig "typecheck/sigs") "neg116" + let ``type check neg116`` () = singleNegTest (testConfig' "typecheck/sigs") "neg116" [] - let ``type check neg117`` () = singleNegTest (testConfig "typecheck/sigs") "neg117" + let ``type check neg117`` () = singleNegTest (testConfig' "typecheck/sigs") "neg117" [] - let ``type check neg118`` () = singleNegTest (testConfig "typecheck/sigs") "neg118" + let ``type check neg118`` () = singleNegTest (testConfig' "typecheck/sigs") "neg118" [] - let ``type check neg119`` () = singleNegTest (testConfig "typecheck/sigs") "neg119" + let ``type check neg119`` () = singleNegTest (testConfig' "typecheck/sigs") "neg119" [] - let ``type check neg120`` () = singleNegTest (testConfig "typecheck/sigs") "neg120" + let ``type check neg120`` () = singleNegTest (testConfig' "typecheck/sigs") "neg120" [] - let ``type check neg121`` () = singleNegTest (testConfig "typecheck/sigs") "neg121" + let ``type check neg121`` () = singleNegTest (testConfig' "typecheck/sigs") "neg121" [] - let ``type check neg122`` () = singleNegTest (testConfig "typecheck/sigs") "neg122" + let ``type check neg122`` () = singleNegTest (testConfig' "typecheck/sigs") "neg122" [] - let ``type check neg123`` () = singleNegTest (testConfig "typecheck/sigs") "neg123" + let ``type check neg123`` () = singleNegTest (testConfig' "typecheck/sigs") "neg123" [] - let ``type check neg124`` () = singleNegTest (testConfig "typecheck/sigs") "neg124" + let ``type check neg124`` () = singleNegTest (testConfig' "typecheck/sigs") "neg124" [] - let ``type check neg125`` () = singleNegTest (testConfig "typecheck/sigs") "neg125" + let ``type check neg125`` () = singleNegTest (testConfig' "typecheck/sigs") "neg125" [] - let ``type check neg126`` () = singleNegTest (testConfig "typecheck/sigs") "neg126" + let ``type check neg126`` () = singleNegTest (testConfig' "typecheck/sigs") "neg126" [] - let ``type check neg127`` () = singleNegTest (testConfig "typecheck/sigs") "neg127" + let ``type check neg127`` () = singleNegTest (testConfig' "typecheck/sigs") "neg127" [] - let ``type check neg128`` () = singleNegTest (testConfig "typecheck/sigs") "neg128" + let ``type check neg128`` () = singleNegTest (testConfig' "typecheck/sigs") "neg128" [] - let ``type check neg129`` () = singleNegTest (testConfig "typecheck/sigs") "neg129" + let ``type check neg129`` () = singleNegTest (testConfig' "typecheck/sigs") "neg129" [] - let ``type check neg130`` () = singleNegTest (testConfig "typecheck/sigs") "neg130" + let ``type check neg130`` () = singleNegTest (testConfig' "typecheck/sigs") "neg130" [] - let ``type check neg_anon_1`` () = singleNegTest (testConfig "typecheck/sigs") "neg_anon_1" + let ``type check neg_anon_1`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_anon_1" [] - let ``type check neg_anon_2`` () = singleNegTest (testConfig "typecheck/sigs") "neg_anon_2" + let ``type check neg_anon_2`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_anon_2" [] - let ``type check neg_issue_3752`` () = singleNegTest (testConfig "typecheck/sigs") "neg_issue_3752" + let ``type check neg_issue_3752`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_issue_3752" [] - let ``type check neg_byref_1`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_1" + let ``type check neg_byref_1`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_1" [] - let ``type check neg_byref_2`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_2" + let ``type check neg_byref_2`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_2" [] - let ``type check neg_byref_3`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_3" + let ``type check neg_byref_3`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_3" [] - let ``type check neg_byref_4`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_4" + let ``type check neg_byref_4`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_4" [] - let ``type check neg_byref_5`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_5" + let ``type check neg_byref_5`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_5" [] - let ``type check neg_byref_6`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_6" + let ``type check neg_byref_6`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_6" [] - let ``type check neg_byref_7`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_7" + let ``type check neg_byref_7`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_7" [] - let ``type check neg_byref_8`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_8" + let ``type check neg_byref_8`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_8" [] - let ``type check neg_byref_10`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_10" + let ``type check neg_byref_10`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_10" [] - let ``type check neg_byref_11`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_11" + let ``type check neg_byref_11`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_11" [] - let ``type check neg_byref_12`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_12" + let ``type check neg_byref_12`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_12" [] - let ``type check neg_byref_13`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_13" + let ``type check neg_byref_13`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_13" [] - let ``type check neg_byref_14`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_14" + let ``type check neg_byref_14`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_14" [] - let ``type check neg_byref_15`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_15" + let ``type check neg_byref_15`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_15" [] - let ``type check neg_byref_16`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_16" + let ``type check neg_byref_16`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_16" [] - let ``type check neg_byref_17`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_17" + let ``type check neg_byref_17`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_17" [] - let ``type check neg_byref_18`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_18" + let ``type check neg_byref_18`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_18" [] - let ``type check neg_byref_19`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_19" + let ``type check neg_byref_19`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_19" [] - let ``type check neg_byref_20`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_20" + let ``type check neg_byref_20`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_20" [] - let ``type check neg_byref_21`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_21" + let ``type check neg_byref_21`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_21" [] - let ``type check neg_byref_22`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_22" + let ``type check neg_byref_22`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_22" [] - let ``type check neg_byref_23`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_23" + let ``type check neg_byref_23`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_23" + -[] module FscTests = [] let ``should be raised if AssemblyInformationalVersion has invalid version`` () = - let cfg = testConfig (Commands.createTempDir()) + let cfg = testConfig' (Commands.createTempDir()) let code = """ @@ -2927,7 +2921,7 @@ open System.Reflection [] let ``should set file version info on generated file`` () = - let cfg = testConfig (Commands.createTempDir()) + let cfg = testConfig' (Commands.createTempDir()) let code = """ @@ -2968,7 +2962,6 @@ open System.Runtime.InteropServices #endif #if NET472 -[] module ProductVersionTest = let informationalVersionAttrName = typeof.FullName @@ -2987,7 +2980,7 @@ module ProductVersionTest = let ``should use correct fallback``() = for (assemblyVersion, fileVersion, infoVersion, expected) in fallbackTestData () do - let cfg = testConfig (Commands.createTempDir()) + let cfg = testConfig' (Commands.createTempDir()) let dir = cfg.Directory printfn "Directory: %s" dir @@ -3018,56 +3011,55 @@ namespace CST.RI.Anshun module GeneratedSignatureTests = [] - let ``members-basics-GENERATED_SIGNATURE`` () = singleTestBuildAndRun "core/members/basics" GENERATED_SIGNATURE + let ``members-basics-GENERATED_SIGNATURE`` () = singleTestBuildAndRun' "core/members/basics" GENERATED_SIGNATURE [] - let ``access-GENERATED_SIGNATURE``() = singleTestBuildAndRun "core/access" GENERATED_SIGNATURE + let ``access-GENERATED_SIGNATURE``() = singleTestBuildAndRun' "core/access" GENERATED_SIGNATURE [] - let ``array-GENERATED_SIGNATURE``() = singleTestBuildAndRun "core/array" GENERATED_SIGNATURE + let ``array-GENERATED_SIGNATURE``() = singleTestBuildAndRun' "core/array" GENERATED_SIGNATURE [] - let ``genericmeasures-GENERATED_SIGNATURE`` () = singleTestBuildAndRun "core/genericmeasures" GENERATED_SIGNATURE + let ``genericmeasures-GENERATED_SIGNATURE`` () = singleTestBuildAndRun' "core/genericmeasures" GENERATED_SIGNATURE [] - let ``innerpoly-GENERATED_SIGNATURE`` () = singleTestBuildAndRun "core/innerpoly" GENERATED_SIGNATURE + let ``innerpoly-GENERATED_SIGNATURE`` () = singleTestBuildAndRun' "core/innerpoly" GENERATED_SIGNATURE [] - let ``measures-GENERATED_SIGNATURE`` () = singleTestBuildAndRun "core/measures" GENERATED_SIGNATURE + let ``measures-GENERATED_SIGNATURE`` () = singleTestBuildAndRun' "core/measures" GENERATED_SIGNATURE #endif #if !NETCOREAPP -[] module OverloadResolution = module ``fsharpqa migrated tests`` = - let [] ``Conformance\Expressions\SyntacticSugar (E_Slices01.fs)`` () = singleNegTest (testConfig "conformance/expressions/syntacticsugar") "E_Slices01" - let [] ``Conformance\Expressions\Type-relatedExpressions (E_RigidTypeAnnotation03.fsx)`` () = singleNegTest (testConfig "conformance/expressions/type-relatedexpressions") "E_RigidTypeAnnotation03" - let [] ``Conformance\Inference (E_OneTypeVariable03.fs)`` () = singleNegTest (testConfig "conformance/inference") "E_OneTypeVariable03" - let [] ``Conformance\Inference (E_OneTypeVariable03rec.fs)`` () = singleNegTest (testConfig "conformance/inference") "E_OneTypeVariable03rec" - let [] ``Conformance\Inference (E_TwoDifferentTypeVariablesGen00.fs)`` () = singleNegTest (testConfig "conformance/inference") "E_TwoDifferentTypeVariablesGen00" - let [] ``Conformance\Inference (E_TwoDifferentTypeVariables01.fs)`` () = singleNegTest (testConfig "conformance/inference") "E_TwoDifferentTypeVariables01" - let [] ``Conformance\Inference (E_TwoDifferentTypeVariables01rec.fs)`` () = singleNegTest (testConfig "conformance/inference") "E_TwoDifferentTypeVariables01rec" - let [] ``Conformance\Inference (E_TwoDifferentTypeVariablesGen00rec.fs)`` () = singleNegTest (testConfig "conformance/inference") "E_TwoDifferentTypeVariablesGen00rec" - let [] ``Conformance\Inference (E_TwoEqualTypeVariables02.fs)`` () = singleNegTest (testConfig "conformance/inference") "E_TwoEqualTypeVariables02" - let [] ``Conformance\Inference (E_TwoEqualYypeVariables02rec.fs)`` () = singleNegTest (testConfig "conformance/inference") "E_TwoEqualYypeVariables02rec" - let [] ``Conformance\Inference (E_LeftToRightOverloadResolution01.fs)`` () = singleNegTest (testConfig "conformance/inference") "E_LeftToRightOverloadResolution01" - let [] ``Conformance\WellFormedness (E_Clashing_Values_in_AbstractClass01.fs)`` () = singleNegTest (testConfig "conformance/wellformedness") "E_Clashing_Values_in_AbstractClass01" - let [] ``Conformance\WellFormedness (E_Clashing_Values_in_AbstractClass03.fs)`` () = singleNegTest (testConfig "conformance/wellformedness") "E_Clashing_Values_in_AbstractClass03" - let [] ``Conformance\WellFormedness (E_Clashing_Values_in_AbstractClass04.fs)`` () = singleNegTest (testConfig "conformance/wellformedness") "E_Clashing_Values_in_AbstractClass04" + let [] ``Conformance\Expressions\SyntacticSugar (E_Slices01.fs)`` () = singleNegTest (testConfig' "conformance/expressions/syntacticsugar") "E_Slices01" + let [] ``Conformance\Expressions\Type-relatedExpressions (E_RigidTypeAnnotation03.fsx)`` () = singleNegTest (testConfig' "conformance/expressions/type-relatedexpressions") "E_RigidTypeAnnotation03" + let [] ``Conformance\Inference (E_OneTypeVariable03.fs)`` () = singleNegTest (testConfig' "conformance/inference") "E_OneTypeVariable03" + let [] ``Conformance\Inference (E_OneTypeVariable03rec.fs)`` () = singleNegTest (testConfig' "conformance/inference") "E_OneTypeVariable03rec" + let [] ``Conformance\Inference (E_TwoDifferentTypeVariablesGen00.fs)`` () = singleNegTest (testConfig' "conformance/inference") "E_TwoDifferentTypeVariablesGen00" + let [] ``Conformance\Inference (E_TwoDifferentTypeVariables01.fs)`` () = singleNegTest (testConfig' "conformance/inference") "E_TwoDifferentTypeVariables01" + let [] ``Conformance\Inference (E_TwoDifferentTypeVariables01rec.fs)`` () = singleNegTest (testConfig' "conformance/inference") "E_TwoDifferentTypeVariables01rec" + let [] ``Conformance\Inference (E_TwoDifferentTypeVariablesGen00rec.fs)`` () = singleNegTest (testConfig' "conformance/inference") "E_TwoDifferentTypeVariablesGen00rec" + let [] ``Conformance\Inference (E_TwoEqualTypeVariables02.fs)`` () = singleNegTest (testConfig' "conformance/inference") "E_TwoEqualTypeVariables02" + let [] ``Conformance\Inference (E_TwoEqualYypeVariables02rec.fs)`` () = singleNegTest (testConfig' "conformance/inference") "E_TwoEqualYypeVariables02rec" + let [] ``Conformance\Inference (E_LeftToRightOverloadResolution01.fs)`` () = singleNegTest (testConfig' "conformance/inference") "E_LeftToRightOverloadResolution01" + let [] ``Conformance\WellFormedness (E_Clashing_Values_in_AbstractClass01.fs)`` () = singleNegTest (testConfig' "conformance/wellformedness") "E_Clashing_Values_in_AbstractClass01" + let [] ``Conformance\WellFormedness (E_Clashing_Values_in_AbstractClass03.fs)`` () = singleNegTest (testConfig' "conformance/wellformedness") "E_Clashing_Values_in_AbstractClass03" + let [] ``Conformance\WellFormedness (E_Clashing_Values_in_AbstractClass04.fs)`` () = singleNegTest (testConfig' "conformance/wellformedness") "E_Clashing_Values_in_AbstractClass04" // note: this test still exist in fsharpqa to assert the compiler doesn't crash // the part of the code generating a flaky error due to https://github.com/dotnet/fsharp/issues/6725 // is elided here to focus on overload resolution error messages - let [] ``Conformance\LexicalAnalysis\SymbolicOperators (E_LessThanDotOpenParen001.fs)`` () = singleNegTest (testConfig "conformance/lexicalanalysis") "E_LessThanDotOpenParen001" + let [] ``Conformance\LexicalAnalysis\SymbolicOperators (E_LessThanDotOpenParen001.fs)`` () = singleNegTest (testConfig' "conformance/lexicalanalysis") "E_LessThanDotOpenParen001" module ``error messages using BCL``= - let [] ``neg_System.Convert.ToString.OverloadList``() = singleNegTest (testConfig "typecheck/overloads") "neg_System.Convert.ToString.OverloadList" - let [] ``neg_System.Threading.Tasks.Task.Run.OverloadList``() = singleNegTest (testConfig "typecheck/overloads") "neg_System.Threading.Tasks.Task.Run.OverloadList" - let [] ``neg_System.Drawing.Graphics.DrawRectangleOverloadList.fsx``() = singleNegTest (testConfig "typecheck/overloads") "neg_System.Drawing.Graphics.DrawRectangleOverloadList" + let [] ``neg_System.Convert.ToString.OverloadList``() = singleNegTest (testConfig' "typecheck/overloads") "neg_System.Convert.ToString.OverloadList" + let [] ``neg_System.Threading.Tasks.Task.Run.OverloadList``() = singleNegTest (testConfig' "typecheck/overloads") "neg_System.Threading.Tasks.Task.Run.OverloadList" + let [] ``neg_System.Drawing.Graphics.DrawRectangleOverloadList.fsx``() = singleNegTest (testConfig' "typecheck/overloads") "neg_System.Drawing.Graphics.DrawRectangleOverloadList" module ``ad hoc code overload error messages``= - let [] ``neg_many_many_overloads`` () = singleNegTest (testConfig "typecheck/overloads") "neg_many_many_overloads" - let [] ``neg_interface_generics`` () = singleNegTest (testConfig "typecheck/overloads") "neg_interface_generics" - let [] ``neg_known_return_type_and_known_type_arguments`` () = singleNegTest (testConfig "typecheck/overloads") "neg_known_return_type_and_known_type_arguments" - let [] ``neg_generic_known_argument_types`` () = singleNegTest (testConfig "typecheck/overloads") "neg_generic_known_argument_types" - let [] ``neg_tupled_arguments`` () = singleNegTest (testConfig "typecheck/overloads") "neg_tupled_arguments" + let [] ``neg_many_many_overloads`` () = singleNegTest (testConfig' "typecheck/overloads") "neg_many_many_overloads" + let [] ``neg_interface_generics`` () = singleNegTest (testConfig' "typecheck/overloads") "neg_interface_generics" + let [] ``neg_known_return_type_and_known_type_arguments`` () = singleNegTest (testConfig' "typecheck/overloads") "neg_known_return_type_and_known_type_arguments" + let [] ``neg_generic_known_argument_types`` () = singleNegTest (testConfig' "typecheck/overloads") "neg_generic_known_argument_types" + let [] ``neg_tupled_arguments`` () = singleNegTest (testConfig' "typecheck/overloads") "neg_tupled_arguments" #endif diff --git a/tests/fsharp/tools/fsharp41/net45/providerDesigner.dll b/tests/fsharp/tools/fsharp41/net45/providerDesigner.dll deleted file mode 100644 index cb79536e157facb1e7eb4a0b37657130a7e2937e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75264 zcmb@v3t&{$wKu-bnVECuop~i8kc0`M4oQeWcq(ebOQWC&_&`xIBm<0uOqfX!jM1c0 zAGbOzO2{2)ZW?_uC}+@ezkt}-fR15`~R)A&p9)b3`qUo z=-Fqlwbx#I?X}ll`*HRjR$ci4auJam&)@$}^d-FcuS3EU2ct+1PyI@mp78y!=}X$m zA2zMqnk^&;^0_Vf^!8*=y1zd+nB0^}=7;)|+5Y6Ri`OQ%=Xx`3p^$&N#d`H}qLrG9 z-uf54+d|P%3O5BbFHuq>(iQf;a}iG>-hnqu$8n^w-27+1X%y*J9v5|Zh$8ZT@oj-B z8!Z9f^;W#%t6QUB#e{c2CW%l3=g$lHd!<0i5pZ_v?h(N5=0<(kelxl`KFgs01WN!>eV9>+6vCF)nmk?u ziaLi@^{3E={^o*#&~Kql!~-?KmK~<|0pPWeF9%)wTd(%ze0ay*QMck*b0?T-IX{r8 z$BB%%$H)Z$%&aojCg_l%(HK}9po8_z5tI6jnSuNnU|vXo?s_9&rm7K1xZIwwyHJDZ-x4_p?}vW9H2Y-o zO4hKaEHm=8<+nM-G}hb+^=i#+`ENV8$w>nptC`m5xk)Im)yTtn3^eCM8bahpdvg_$ zrw$k;?(yRD^%{uJ9$^EBO6XhO>|&t`oHEw3m3=Hm3ibVdUQ*%WTR zinqFITeKQvxH5k!m)!_H%&bMvC8dBX^F53Q+j4w-mPt3G9B4Yq92e~ZP~%snww|vK za_NB@fAY(_7u;tK!_?eCZ>!gvn+8rO(x~5LOzOGfiYpX_%N&Mi?iARy6qAf*eUK#% z)ml`(VLwwrTV+(Jz#Kh=I{I_YztRwc>_5>JfRPh7ucWTUrx9ay^0MSL!rYV2xFUxM@gL;$C;u zlv+f+^7>mMg>Kmb!kT6m6j}2(joU9i%T1rg8=RH=_ptn|=sQ{VfLS7{-xczefI-9C zp0y-D%aYvfQj&Y3ZY8*qKZRCe!QD!5CI2|V4VMz!M7>!1miUkxO;b^B^esZ2qPDtQ z{knm^HkF%(ZS68Wg)V8p>v5aI>#@3kM?YW$`#-^)>CkbxY{w!%Gw^Kh$PfPn{2YCl zBPuh>wqc7c73tx^6g@{2GtjfHyWsqw4CuPh3f?1d6>dE@lZ#>Z3}3{8!sD&ZVv89zQgc8x0*~a@YyTD>nT!aUldjeO79VDy_6#%C z&Ws4EWU^-3IWaB&OQ%ZQCIMOi9{e|vR3Bz8mOBm`VKeM4%tZl(c?e)?^YLn?_f*Qr zbq57_v-?Cj9?Ihl!;4lTw;GJSS!=V?T&xJVvzRw;>O6X}U8H2-QgKj%p&nBHiakqi zAqva~#!(Y(u2d+i7{XQ3Q586-5#l&`**1~4zXIPxf@cOs^Ia9vT#1@Q;RsUEul?Mw zMK@l$0&mo|l5SjX&humBNum3-_>B|>W`Ao7kF*?-RbXA{UaDC8$QPkdS&Fqj-qd3BjwdTa}b$3kZ4n`ol`=<&z z&UHd!7hB&FL@L{-(12p8P$>I6^SCm*3jc{>b$6+P%A}s6q$WCUo4=yuhO4sL+(WyM zTV5D5PxOcu_@A>JLkxQoJQZW)XNpK8k%B2Q@)VbCvaZ5wCl(jx$x24~$CdYWB`;j9 zC9grWn3ie)TC>X2Ub|AoM9ezkQM6zLr=khu-3MP3_n?wWGbwxN$pIUKw4{KvEa53>Vq~x;wm0OEXUzd7Xg{Cw~>pcUXqE z+$v;kbxmr~YHPZaye8?^hk3xONnOND;h0-mT{SJ9B=~f6gFkvsOY@qE40$SmIq`%s z;(rxi$%nq;807KGuaNIqZk!Yp!~;h~zs@F3?AuVa3bMFbPjL;wRb#&1T5AM!89_}6Q)|GBC(1l&X1nzgmk%FSfsb2c z+bChX;hvi8ZqeL+mr?L=|B=oV^cJudGjxyPO08uh=8h!eO~9ji(`lyFkqnRY@8k3$ zv$=v@)Z8h(y7HI|SC1jdUn!qHj0$m^Rp6-)Lqye{9=Zc{N4rH`g(|5MPdHQSxE^r- zE$-Z99L2(@B?WK9J3HieAum>Xh0W|0DK0$t- zQ?Gzr{HN!x1ij3o;R<;k4LNuo4e>CQ^o(HD$y3S^$cQ&D@rMw@%+gxpCjmhZnE!JQ ztdn1Nti3INipRG6_$(J;%pr6`>;W)S>;bS5r>|D*sG1c6SwADr z#1e1IU+t6!dAK6HUg3H{uJ=1>Cs@C8ZJhOcTfW$H!&4*8f7NpvY-ODWLMZDLetAZk z_=QEssq*%WoGx!;WV*b~5iG2sq_+GIN@QpQAx zI~|~5S-8F|+R4_J1$OGo`xX91)%Urr@I-6<*2ak5;xW)a{TPf;23NS*kJ-SAylG;V zU9!VP1U+4C>j|d8dP?yN3Yx)hPfZF2&@$2@NY9Ns@lK(YT1K$EgPyRD!VyOebNOkkWtyS8BL4iE-c!dMw~&kR0` z@llN#ykWHw9Q~eFuP4=wSc~Vz>%cD%_Q2qGAqIo@$fj0McNwNPk-)mfC_n({BRs$H=}|$Vl=cs5|Zsn=@zV`C6#lCHskP><^@Rz}T1SW%i!bUhqg| zxC&>6&A2D3q>dY9xuQmDGf0k`m+S3Hv}_7{CP<*?o1D_0g|Al{EEl6z_SsIY$+v*i zok%27AAnQ`Q3Wlv1?84V88^+DEm0Fw(FLGYQ?95fP9g4v?!rbQ>XrHw(D#gHGwzF; zt!G5dxIgN*$f7JVyBmUWnkfqhWWg7^gpMS!sY*H8mzi zwAMHCH$%q!F&1WK-T{3%g*<3dR;VzTW(Fk4QPA#$FnyTn|qB`Ph^v9?@*N}yu}#FB|F z&=b7kJX>Kg=M?*P^ZbD@?TjW0+qho3QRu^4`Iw1mm=#N!NiQQGWR2=WI;;lMj3}0_ zt`z)W3rax*2HJ@v5Htw#8y055R&%L5{ zeeD%-BWl!~f%&i=HR5K}ypsvz-ncLBuZahvCMW~ZKr}d~De8>|UA58R6~gNv(?x?| z5R3++f!ZtDe;xHleK0Fayd7L{{x#T%a*X-kdO4a0TFsFPh{Z$Ekg|84+kX&szyKPx zKRdW`7-sz`xJIm3a_~j|ng?d1*nn>2{~O$La7zA>nXm#qAN0|{NE=5Ba6bN#GdLRc z6dp$Vq5r~XwuE%kS9laK?{}o&DqG?n?;so@=tky&-j{>N!RG;dCm7}k)G;y(c(zmc zUFP15F&NFQHDBq<&qtB6>(y%N!$OC#U`?&ercSLZTXcDMYTsBJ7Lf@k6Uy2sAz-w{0T-dT&A7&<^&iucDd9iA>vK)h7Or-9Bdi;8=6y!2eFlB%0 zZYwax7Q!edHS3d<90`%52Hz4Cg6p$a39#ISxLv$~c#DDm^cJ0G;b=du0QP1@B6QP( z(kR$_-G`!3+qs;Kz29MuSm{u)>c+fB`yoZgmeNcY>BAf;JOnPF;<2tduc!W5(ac8@ zG`E0Xo)OeQY>0g^+wJOZMhTN|TqGs&o*{-dUe{y4Sbd5!^3Oy4&8h>UH~kA|JlDv56z@Rl zb6{`E&PnSuBY%ty@?Ip!7r3BTFZuKqp_Yer*b>wN?_)=}e-u8(sL40p$1lk8ad}@^ zo7#_v>i1mOsFD%igbpwPY&FXLiFE_xmA}FlA|vH9_XVI^+jIq>fw8%i`x0KY?X~F2BBc4C4pR_8 zYnxlX)ADV-u7pFX1(N6q#o9_p2r;j*r(pcJ5kg`b5=~%Q%na++FV|RZu7cijjY2MW zTPS|Bm%xmSTD&cj#aATo31DKOWu+wozX}d+f}laKA8|5ITX-jbM8@)~RX47OELsFC zF_XG*69plF_UMUA_Djj`+U8p2r?{ceAACHQmcLRh+uPvWhD94)!C82&&yfl?iV+9t zJjNDnlyQ!Ye&4b=%SO*Hqn{==!Z^o9pSI{N8|^BiS2oHx$3~xF`X9qaF8~%cdLh3& zBP;m@8(k%D&&WmcHbySycga}er(dGJ(?t%Z8E30OB(_v7+=th~_i^wL0+=foW}EA? zkU(MdVJ;Q}0t->xPf>;|lGG|eh8a+XyI5C1iQzW3pK8jI&th~M8+Z)1ER`^&4lv^{ zw|o&6B{*SWo3RvRB_xDc_7%t5F=w1$$BaA~J04$ZS#j^mj!#tbcsu4s6u&+Nt-*h` z`la!u5$q2%az@}QP+)VjOT0oOe`PKk6J9|3jjm>v#CCKEVz8q%{PK*fc4QLFfY4I#(M(g>j&23bLUtw#F{H5_NnyiWi0o4b_3^)Uv0A;Pu1Dr@>JUE#LIF`s6;3Ppf*v%`f>r{?}5W_Q!Z(q(fp?w*7GVMFQ z%(BAXRr{W(sjrpT#=~U$4W_AV8=G6Y7v2Oq_zht{%-l@=KMo;boqc8WYEI2KXHNY$rnl=l zN7c1u z235VVcX5Kfh$!oBNb;VLF2Qs=ZMtu;{b6q-gl;QynE-5%{|dECcb!dlz@m#zpqtEe zyKK6B$K}_+bi0KPy0qH%dV!s~GHBHmG>5YRms0XYa6V-u`W*jy}aC^c9pk0#RUfH}cCf z0#7MEcU0bN1;YZ?JkI7B>TU_-)|v;=wk>%$9X6*_M8Nm>H^*^7Ys{6}}eIheD+U3>Dxf zgx?3QwI0JsDd7*w2A3Q>Aa3A@~b_;^wMEUv#L(h`*24KMG( zs-0NbOJ@b3?~8Eo-25R$&E;=H0`zn{zdR%V#4n7=?~}J@FxI@Cnf7SrYX^z ziG(1YFbfi0$ogG4%<=0M!h!Jk%ths%W*tarwW^e12GpRuU01*lL4&V0yfJO4wV%i} z$;!Zh$^e5CfJgBFhG-Gn6sge`KSMhSMu_Y|n=>rrTL@6BN@W33t&kL(T_Ty4kPt@J zeDA}k!>On@?{#su$t8PTo`rC3XnDq;sBv0bCSjLeZ<$^}u!+KyNl{_2A1vDhQ+r^O zDLt(Az@B+$al)_{-mf=!C(POl;|7;8KY|+ZpK3PeJ6kixvuB`f^ss;9mwN;Ye4fnn zxHBL0GsHF+nfeg|9H>a@!%XVR{TN|DALcYO^%I1tpK=t(F@A{Bn=H zpz!6q8Ck-cNgdvtR+;ybwHGYW_;ecn*i3iMZJX8BKC6B9BF1>A58;z%5}g81#s^jR zOhtU{U_RTw1%n*X!&ee5^8!=*PqE29iskegrUdC^F8$n;(n<)P;xhyYO(|Ux)`P zBiJqe?3x)=KurvKj*cLFL*fZd(+pauF@BH6`27-o4WXY*{U}nK^ghIABJQVA!Q7*B z>Jj}>-A_M4XwWgx7&OVn92UAb-XZZ-60VbQ*tOYZ(5*=I(}OO~^?kvQxTRc#e)_uS zQN2K)gA+4op23uF8(hj&=A-(}bTRyhK_4)g|3l_|ra`|pIai&RY33m`=q4|x-sfff zWZ$EDnCAKzbBB*hx!S+PZ_wTT0>Z=oM-l!?!oNs3E5Nx50p|7|2_Hciw)FO9K-0of zx}WkvF6*u!bNB&5H~khjTwWu5Zbo>SwAToURy$zwC{-yRPYNXoko;t>SY_hxBPoI$R{q@}X zZ`HGG7dCKxzthOp!usUD9y}gpT}h&SsK0{t13GBk_d!DfdIFFS)@jgKGA5exAfBN2 zKuIF~% zP#wNrV+R7z2LUyJBj(b8J_D!;qZDQiO+-Hc|`^cJe_`64i%b(HW9$G|?3G^2W`kX*+ z7niVz{#Ei-q5Dpzv*?QgwE}9S#q;d3UqoKMdPbT*(i_?2gc%LRb^ zbOHTX(k=xwA7_7GkhES&yM%rr5O4jQNte?xp}bWnH{d=Z%W@Z>bLeV%MbaLUv`y$O zoc08uC9tU1CG9Cm+e-f<(9Z!)qb&VZpx*;J4JV%866kF}&9sgFCQud3t&P34#rtLrd>2ypx*%srPBK3$KCsw{N?4*wz= z##K~?l7QCG4K!V2Eu9UhiALyjNxK}-WO@(!3{&m^bQ!FAwm>&XzCAQo^6drWr}xqV zfj%YBZRk&&@B4tRq&sP;K)(QV4ZWY1uKAmJ_v_eyxT!{@5dJ%R~9=fA9GU9k-q^!sXV&9|%Xg#P0=i_P5J)g1aH zTnhS;nrYx;w*|NR!J35_S)XX^M7VxxX-jeHlQp*jzj5jZ5f2j|1w%7^b+K153SEpr`0n^CgVdFF4R^ z82u+rW6Gx}=X*=9qUjcNz^A*as8vDU&-%Q87Fy6DUl>q_1>I`irB%@t7WAU;20+~w z^hbgE6a-h3K)ziLG}#rQJr>mLpXQ3uJ`2j=Zb*#o5y%Bi?9dXlU!WQ~C2*cAK@SUb z3oQ-Yuhr0(thBX(jH`wYS!vx!tEHzcXj|ZMKrae(v-ios7@#)R_{bGEG0#hUU4a(D?$f)E{@(Q@233&=-TB zbT`sg3pyOUOKYS7hw>4mjaq5H58j|nrP~BzD>&OTmF}_9m`jpAWkJj(Nndg(&+{bd zyH*-=X`&aLG`G=2vrcC@Z>Ck@EY|TW1$xT6BYZoq+V?4lt`C0`&|_BGqryB2g^RnS~Wf3l#bt9s2v zw2l`qu)%QTUrfwbET}H>DYJvOd?amJe96d!}k6i3sOOctJc!_4m8=dj<#A5_o~b2HVfijbs2q1LEb?4 zlkO|%hy`)Ky@KRY58C!;(fPhBX!;qdgdd>iTtTZXXmxNN^4()W?~l}b*VFV_it_(O zkC+>%!-BY1ZJ-ST-R!N34f;0FE`bjFCdVE}+CG&=1F>%!8>n?Qb77l5?CYgbfu8aj z@f);j={5yXZTuzQwY1NITH~+#257$p{n+&SchDgVS{nEI^K{gLR>$$P2J|}xdEvqQ z1^R;pJ!Rgn73fV1>WMSt<|Q<=I}m>j>&}RRMDx37k_EBOc2UxT*w^i%Rx2O3$}U>y zK$Bg&X_*Cas|?dR3*uH8rfvm^=0~VkAlAfE{|Ftl(tZ=)?%zX?S^3Z)EGJV1+itBT@up!!q6Pt!pQ`cCyPf}f)& zEGSu19r^-IU!W*w)?6C;I<2&z>{weLTpywwYF@Hw)TF~UW9oo-mzXi>!TT=BiI%q*(sM}ff0=;QL zp2>@={++zo0V6uBoj>_zKoJG`zBze+)h{SzLG@GiSG`Cb7G=+rPgebsRtm(e`PHgl zQJ+97^vCLdS#^y5U_sxk-=X~ny=g(;t-l{oJ$Bl#+R~q|f2Ha_Xu1WxQvXLla|Pnj zSBv}yEwj>IH3N~CXhTWb%hczj#UsBVKFErFGUS^T`7P~t(pE=ap`!xDX;Q<+$g6~< zH~!+@8yoJA{2%fvh`!hG1wc1g(CZC9j{K4KSWtCiee^ZD!-84`+9yzS(&EO9@ftlW zkecbdMo$Q|LVwk~2Kk;Wq5Kp5)Sqy-wPy*niW*PTGyJ|DmUyv=7DJq!*pE*JFR7w*=z$n;QQswVuPJ zbNgKv|2w^9LEL_%-E*!=UhoX@gGMwAgHIpOdyKHb*>6*N!-8ABxS@e(I#X9-F7V;iT=*=4)>`X`heJ*MciqY9-kMZMr~Qhje0rwpbul zhecYillDyXOl{Cf`&INTZI6@oc670}&qyPmuS-kVp+B(mTC)~v>nJUm#VZhHW|gDQjJ+MFdisU!_fV(!LY9NSo`VeIs$PHt3}7(AH`wTK1r zd}+NlNgx+W*a0Xh5ZB?F=z1+Bkdoy}t)qnUO6`1yGF*M7wyuQoDy^@C@+xi6p?o%R zl{Q*Jxk0-}Ag*XE>QLE`%x-$BL$KT!o*P_+7&7!Fta1 zDTEq*O+v=Qk2P>u8h=PyJO(^}S1Qu90i)Adf?p!Jo|90~uv8kpcW`)PBZs$1c&CJS zOL&ij_euDGgrAo1Q3+MK%2zxAj2rv^+-jvVzdN4XBFZzk@dbf-GH3px#BwTaG?&P5 zGV~`SE%VW+l=F#e_m9#m&i|-RR4y({C-#}Pg#Rd?QfZYn{!VoGM}#_YTv@4GELNj8 zBvsj4Xc0g-Z`C3KQ=$1HEFM!pF!&D=Hm$8GQWV(<^3A?@Gdat zeM*~wyua3>!ubfj5KI5RGn?kkS`0J z`s-CUnO(X_Lj3h)2Jsh;8N^>UW)SbP*Mt9%eu@5x$opK=q3uWXsQz^1a&N2l^GKg} zuJ&@|A%uU7JmKxsKWu)-JA?ilxnEnXp^1I#^{Qyxm)7rz&h+{4ed}?w$ji~Qe9I*D z4Z0+@2;8oT-Qb%c-(VK$TVuETR*JMMMcUb-jddEg+9HW}S|P7HHVD2~!rS%M>TIA_ zIQL2TG#07kTPN`&5+9WKM^N7n2Kyw}poI8l1x@Zj_-g152|J;;+kFT0w`$gh59mg1 zR>Iw39|dY}5WBh~{Auvnp?yz(1pA$T(GJ&sH~bgvh1!2Z7^rLgA&f5 zy>+Xq7SVlmYpV|EkJVjO^{{B~VbR_`?SqrwSM`MU#mUclp3uTmp7nIm*QYG0x`ci* zWrx;9zrfyQ7ri-UC&Ezu;;QvD1z{JRQGYYyOY4uA>uF{EbKx%9P`@9TZS{8{*9hXT zi<}A3+mlk_lTu>6V5UphD&fM3WvoK2DL8+7wJLmaBv_R)Rs05AzamXJ;KWyZ$g-E+=Fmi$De;vOUnlW(65k;4H^dHmC4NNva^vi{&-IhW`?a^U7aJGpS>o?V zQT-=Vmd5*pW>CT#B-|t69TM)7@LmbsI)8&-CUp<$Y;OkzpHSMim6uuFl`u7wc^8Pf9J8>1>&cb?)QKq^u`}ex=Z_ z6nZay^(O81;$Ro$hWcBrN5Y#W+(REl>H|0{!{LS6neGRGztnwD@GsF- z+P}JA68tOl6HvZ_Q&AkgL}$V~sgUuS#(0-@m8N-I8uRgKjQ0uNCzMTA$oM9~&k&j! zR-CzY3QecrI|bi`9fl!ymteXClNOq^VA6u=(YRh&P~PIs3O+0NF`*n2%$Q(q7RuW} z`6u`7g1=qx4+#F#Qr4#h|7pR0OYq+l&fgRK_XPiv_JC`P{*t7=BHUh))K?_crQhs^ zHguM1DZ)3aMs=?BsLop2um7H|a2*oNA;EkLH1CTX1-{SqlElfy^yFgtq{NdF?~r(h z#JeRvD&c+!4@r1b!k1iJF1eXc(h8Ydhr~PF9PgHRx5P&!J}U8>-JEy7VD<~4NVNe23tB1m9$^B{Uh# zp~+wlor38UOs8PFjGJ+aG%fhF;M0O16U>-k#sqUfFb4#4Krn{|b67Bk1*4f_$tIVm znOtI%U^=ak@tuMn6U>-UjtS;~U=9f8fM5;_=CEK63+9+$jtS(^T%ya% zI!OyYE%>zH#{@Gbm@&cJER+WXe?agD1pk2G4-5XV;13J_m|%_x=9pkKpOo&C(tT22 z!88e`NiYWlb3iZ$1anw0hXr$3FvkRQOfbg;Gv;T`V}9m5=4Z|a1am+z2Ly9iFoy+m zSTIci&eas)TulMa)hU=x!E_3yTjFWKr>!_s9uv$l!5kAxEhx1MO6`JDJHa#wrb#dd z1am+z2Ly9iFoy+mSTM%~b4)PD1mg~UlqC#_v>}l;#QdiVzEkj>g6|Z3S}qXp*$$zA;BLK{1L&tEFsnWz`Zl#u94CuJSgGO8ZPl@4VO5*mQy=w8PieA zm}P?Lm2gz>qk`Wfn1d1?68s^-(+;yBQ zDVU^SrVFM+Fdc$fCYVvdj0)zE#1BcFCJVR8%zr^=T{E);CN&Kk9k1Co5rr+NnWl8*y#E(k+sKoa-3QeQXNc@n*k4pTg#5<-k zO~+KG8I|~`#1BdQki;n|vL%_OL*gA0-!Jj~5OqY_UxF@3U$>ANM~E%E&l-!Ji_ z5O^lzr=s2J)uA6`kSlH zJ)3jH~rr8z0Y|&eHZyY?)$s1;D61(FYxog1HnHAweY_1+uciD8tlr&N$9u4sXyRnH7i)7LZZG)p>x2QU&V!hR zhH&d4jFacJIKPjR2RjI%wFrYDrfkzVtd@97h;z-AP?b0pkv-2M>q}lM|3&``qr^a zQit$#nu0KeyCXX8158CY6Q}QW9G*J`;Ve+;G#gYpT4)BscHBPE@q4Z_5v~N4PM08E z$NBwsgllm>M905~wE*GOxbvY?51oau7q>ceToOAM;TGJ~&}l0zMVO`K2>WqA13#0G zn;1H79bAZTh*lxI4xjvV+$XpM;coEO@q1gBBD@KAFLWA3IoM;Ss}Q~yrRj7FZA5r0 ze%({2+fcHOfA1y(eLMl1i_n?aL5bjQQ2^lzErf6}&OSuw9IU(}G)Idg?9i$a&c_*r z2yPYBAzY$OK{yL13?j5lo2ucy74*}Bx-CKdv$PYpYVN1Q^j+K{d7genzoGwwZL7F; zx^|}4rM2kS>mSs2yFTH1)b(A@bDsAb|BQbgKb^z|C1yM+$%#U#AH$!f(flz+X3 z>FxlY>FxlY>F&Vkd8WIAjtJdei{D=G1DfKRj&CCPrA2M2z%w+(XNIQu%+M5{8JglV zLsNWOkdMo2(G;I8nySwhP1SRYrs|os@L3C=1)k-~YO0=Djd!n!wpskPfgj7i4RSEu zHps#9Z-X2r?bXhudtK+z5AgiRbs^pt;(amR7vpW>T_DpOqSMS_JU8Jf$nzN9KQ>LF z`8D3Z0sOXkCoS}TkgoCGP5Znb0i8(!-^Z!R_Zi@BqCLLP;`umz(EoAz5T3o-w`e%< zaT*J3*4`J0X?wM;+J}SJ;`t@54Sx&xZ-M{Y)LT{1E{GSjouXHWj(>r0XSO$!UzRCk zxAbT7ZM}Vcv|{bnbbeqh5b438d}djCFx@tu&?35cU@*HqdwqH^o9nMkw|G^qcc?FO z4z1l?7|d*^i#J`H=^3Q$g`Ql#FT2U&)3$E+KxS2XOSXsBWU`yHnclAc!eF|;CqrGF zw000h6b7?B1zMUzN`9zkFqiMzKG0|JZCjJs+y};xql}_|bB>q+at)@ls3CPN-!X(5 zZR*Q(&$cr!&GlKC3)F>sz~DZVPxm>Lv@X4+Ko_OAX9@#p$iy6rV8^n|rlBp2Tb$2W&4X>KP1}~{@)-o%2eN&c{Mt-@XSOGUDqFIvOeLh$wJcj0$Q4*y)Mc^l zE$U%0+9f|YG_Vx^R^{}8akg|0O}7QH&1?GR!Y-Q0P1iA}edYo>FM}3I4`zDTW_Ao^ z(ArDV1#XsAneCfYO>OEqGv`;Xjb%V9hWdND=g_77*+DzY?3r_EW%~Nv;Aa&%f95<| z(Z@}>BA4Hu9vsAdZ<@}PSEi@P<}IY9LxsWI_Rc}v2;Vd`C_TX9F}r=v%-OVVXaMH3 zkd|cod%;8TWPp`#Hxvw?Eje!+*?G7xp6;_c3ySFD&c&^1v6~Hb43=1Tp=0*E`KW_x z5AJEXe$=HBQM;uvu1cXI#hi-RirgrlDL}Z6+4EV0B|v*AFsBrlT>@}H%5G7C1+xh% z=E&$n$sjC~$i&NtJ$v@chH zEfr`B45-|6IoqNliv{yhD5%8dZN3X?fA=AtH*#F#sG7V>5-Msw#W-ZtZT%(&R=3m0#;+IV-zTvYplT(-a1 z=w1DTxe{7XETW}p=+SQRxeMAA;_~d^*3SHvj=2kGO&IE|eg$Tk{AM_H9=|E3N3_MT&mZ9_(3<($@2eUh+U&7mE zdw5jo%kl`oKR8jqkOzHjWT#5%Cn$IT>q!sVeq$Z~`?o5^cJL^&s1C`#G~K@@lkR0< z@W1MRP$-Wk>{Cf8T1Z!B`nL>jrOttYOn&4@ReE3mKCY;fwYi~u z4-cpX87P(WTbl0cE3C^&+0tVysm5cKNav^fdoiM{8S2OM0nNr@S~#bif+cq3!Tajuf=HU+&HSPJn(0jt!P+ju$bbMC9d4* zTGG8YmMM$tP(saMS3&hisb9ISIJsP35NJZpv;A9PrGu2VM?c%h$5V2Lv2Cg8FKoxy7QiE|Nqa^g%4och^Wmu1si`q3MCGAJ{zEt&j9 zx&BKFnLN)!iu88kl6>wunZlePiIs+4QYg-Cx(ZV9i!#?0acVA0SxjW%%MgmMgU*X2 zpqG4{Ds5o#VdZoE;Sc%;H>>{EJrCA2m`|_E4Xnf%*mp5TwKN<~K~X6pr%#sUoJ$)w zO8t0()|cMRwx!%pFMA|$Gz_x`v|JKqj<&;*IWYSmJBfPWwnSVjukEB9f^qoDd?goK zZJDE6zNT368cg)E`OGEk0x>h_?d-t>v@o$@tZEe#x1k;-ubjF3@fu zk=bcBW^JdGHyx)q&37JLo;`F~D@Y!@(40W?%u_1GKHM7gM8Cx}8k9M9g_Tut35nH= zrOI`=&U_xdvuk-jhLOCr>MWN5ZJlFRX*I9qHCgC&Q0>L}i(r^i)$=jHUyP;t<}}6= zVmhl7PADH-6r=`Xk-(x{k?q5XME0o0tc&9r#8RV+j5{(tXFh7m&M~yUnky0Z2C$M` z$}@{nykwL~JEPS^o@4f8P8PiR3>H59(pQjFGIM82%WjmfvxF9)+!?Ohn!!$LX>Kh2 zHsy9%p2wQ*tVlzvTcF70+Xn`B%f5hs@Yk|lptU&|UeW7Xs)cr#x6}J%d=}BW3ZhIa zzGOGLq7`3_87h=xL-wT4f|p*rN=*?32Jhu+_!lL>O_zW+1t+b@=eCzml^APbxLy@~ z5hs-RBg=zdoQFZD``|Y)v)n$&6||IP8-wxzmiw|c0k}L_8@G+yhH2wcDo^?xm$Gzg zrf1tatiGWpX*;ew5boX9PkFY z>NgB@G4VKu873B1&PIsF7wQzRn$n&Cm$c=Y^mSGzQ+gP%X(UHZ=GEywm6k1B zJT%zR-afx#!(nZVu@w}m`O5f+sN+gft5qom$#!$&`$+{)jzKQhCwoWe4H+!ac$`xV z>{V};XYj)9vK(d+D$(JZEt!NXW9PxvilKN|<9QQ}(Q(T~mu#)EclTqs$As4@K=ELv zY}ghRuO^BsadLF4`hu;Y)wzOdW+%O@MXWBWnm{qOjC-6c78W13WFNq3dkZcZWJ!4= z-p46f*gL)R#H)Lo44XY=i+ubWOg;G4hSgiyQlB zWjotCcU@^tECgglC(aQH-I+m(YPme;!)%rNi0WV5acFHO-G_;+J$0j1yW6bQ4X+9@ z&+U~}o?SN2F|bo9gQIfgc?G}^^E^*k70Y7xe5i7Bc8lt9YQ=2NbKn8&UGIzg`*yF) zrF(hI;L516Q|6nTxq_8f*a>c%xW_Awo-IgrzQvT@Juk?mMqY;@R{1BjM_oy>HJL)L zZ>Q)>HBLfP50 zIu#~b?Q>{VdK-*SmQog8^~#ggSeXEot#}hYMZa5i@1hOIOQaOyxDGV~k%1Ne{AHJP z5pRocq3yV_b z?^e5(|AAw%7O3z7YNeL8SF9Cn%C=Ip_wiX&GzRXRc0ZSC!Gx{~iU}Syr-!hDy)2#QmFG|&?}lInn7JIQ4E5b*T^{>{_Vk3;1B6{s z-agIcvs+|d&C_ga$JFlNOLOqnC3_oNRA1&r2iH^_dL>*}K?KkC2o)4u0+vkEkl@S* zHp}-cYdp(=vv>`=B&_W$M4r; zYh3omxm|e&rd_JTvAIr6ZL%^>=5Ru{KvH2WgM<%}A`<%VOUQ@p-hde2;jewcuA8g+u$rKa{oBD3$9?!O(2p}f zefaN89NQYk(Un$85>*Z349E!1bPUsMyvfB6D9-A_8KRw(Lz`tlm!$&2e!zox7rAh%6>9-u*-N8)fRxb)(j(s;@=(y~bF z$61m-%%8WQR9f^-oJ)D0k6iuW&E-?54fD7j@MM`Oz>pO`>z#P6LH^Cch4XN2*Wv8c zfN(t(r)p-Q&I@r0hD?U=o_&#}=_G2!wPU?!$~2e;rVnY?2|qgbQlzq;Plv>+l}-n= zS)@&(?o7K0_2~n)A8*!Y0Wzdfj|^!uEYL?B9x(8nRUi(UDPaF1M8v(WpBo#=-3hlQIkBRO(LfB#qu$%+J7}tbCQ>>2%A@y z4bXM}czLV|mX`IxZImx5l`Z$A%H8&lm#f;>u6bVC_@v5Ok6+;vIg7oEd9mJDUrNJC zVEP5aA!h9exvv%V*@HT>B`N%=prNx*+_JXzmrE|z7xzoYqTAmocNfZ7hFsj%ELAVj zf)$W+2oTHGk2u?Xv2PbGmeWti`LqJUHqx#x&9`0bp8LG=7+m+A;F5=&In=Tjxfr+k zWVxdkp14n}6&WuR4Gtkri{2@RvfEDBI`_H){^J&d&fl>tm9wO*v)-w!6L_6VPbRP3 z`|Oro3jMML<sZ=N>ecY`L>8G8xiALVWou8VQ0}ME*$Tr*tV4>l^Xb% zb`eBoMHL5;0=lGX;x2Szd+5ie0p<@ZxH5Rv&}X9Xe(>QThXpAwqqj``XG}<4ik$r@ znN4sAT}chZXW#&7B|J;R1K}BETx~2*V(bC&Y)og8;K$Pi?wo+DS7Bgj!%=E>PquN; zj1@Tg%q|uixkz0rE{B!gDfxK1vI$%;^i?T0ZR?V7*%uCPbWACVL-v6@@+jXto`I?o zr*ZM@!Diy&YBKwzm6zMG)UPug&kWRPpsdDjK-{Lqf11h7n1j{Y^92f&c$Ws2N_kIK zNa+}XTLJU9FR3xnZsy`#gDp?Z_Sih^UW!=*{@(f*y?gGr2M>I5x$9<*llP0)Z@8>( z?$O(g>R3pNCA^QFyYZ&z&-`Zso~^~^`Koc3HgKdRXYUB>lsxY z>+*)9t74bbH`F&oFO99Qj$N%agzJMUF|CD>ImSRVQ;M1-s8tga8W|O9JzlaB(`O3R zJY9iV_1dmpbtRGe8=$97xjxGV0i7l9d9&sA%v zkFBo{Gc)AWnINu-KA4e_bZK6%H=>oDBFC9>quyo2s$EF}iLQaAJ4pi9gIL!aaU$I1 z*XltK#{GqGIP6JML#z(4&Xf(vRS%^C_8LhoHhO2+n{@H3z8?S92-dJ6% zA&fW(wdm+ayc#Y>@SiJ1UQddmqaTy-0N}7Y1u<%&s4KEb4?-T|QB=;$M&`roEBS-27n3a zN~edRQ}qWO>R!@giP-43!^kBH4{Ep&VE-9}juor6a4KIEOuy$5dqa&}tdEZM;ZnrqwN8=Ay+a=j;hncTNbKZd)^Pa#6eYsxb;a;7TSW^1bU!<~c zqgO>UW(w_@*6OFKUWA?kw^zZ(8PfZ7^d1>y3Oo|unacXTY&5Ua+(6hd!n z;O;h7jb6vS#%H46GgTBxz}HD{bdu+>itBhpWQTxQoPt)571BD>Z4p?n*gQLuG~kWP zN|&PMMOUHE>mtP>_O>4EKy<*&>V&i|y2>sY&V%)UQPQ7eS;El_?Xz>)0hWRR^uGHt?dtsk`5<5lF zWO9{&f@PpFILbpZbO&2z>qK9KA0L|?9h-;2FPec1^-9HKt+7_&7CzO4clWwuNyk1KzhI$_}JMrUIa4UZapYr^NUSTT(kTS2 zCb29wYp$!BQTrhq&rN;YD1vGx%oxW>APJ5zwm;TkG4Q&h2jmT1Z!&|@4BW~#b$NqK zY$7W|iS$;3G6Oa}^|qmP#Pdws_M~+t@;qMIC5>p4h~;`PfeMEM{^CsAZR)x{XJT1W zpi`=2_Kx&1^2C~8I`AM?Bh;T}dQeBHrc<*Dc6u%fg9ohCsY+BdUYlujtR^l?pT(AQ zVg|}i>QdL1O0!uo}KRfVT%}utTj1@kt)` zr;U1}tI=Hp#WF|svJP2X3$d{|nNE#xb{>o*gmw{kNr;<~Dy31wl5eb@7c5#lqL^~r zPUU&%*d;9U*d;M0g`f@$6H;)DT%3;o9h6CKUd4nbn_*Pf#|DRml(#{M5O}>|T;pa4 z1LW8xL3I1E^?6t!1ta|KrxS6rr(f-8}-~oAV*NW-1Q~W$$81I8A>8gvfkl6`BW=q&- znP=9PI+jI-?GrL=FUhc-Gi-Mvk_1nSK2UKf@SB60&` zk8_dWBb|lpp z%~`1dzgFRw7{uv~f&*Y5#ilQ8z-6TDpnYU%T`t#G*f3tGHe3St z$i+&Zb2!RS)o^n)BI+nj@qT)Yw`%Mn)L}@YN6th>`2dEqEyR%v9hN7&@?PmU;RIf8 zJ``l&mLqP0#3r7MjGs60G~=pwUwj2_?yIiuo?V5rGNs2HyWV{f<2V`W0+XB7>m5YE z3iLt_MiiF3`*Lg+rga!?vMQ*p!fDDt2`*9TK-)=Ix70`~9=CMi;#a8brw$TaX}-yp z8yf7iE_xQK8M!(=C|BnkY!wbi;dHeF>xIDtsyX3c@VgVY5+{H0Y_DG(|K!ug{^DU~ zHy=li7wog)B{a^-?t;F3lQs|nd#96}e7lw@w2TE?{`iA{=bx;(jAuKZQOG$C$_K{7 z<;Mt@zN=Eoc?3(3UPmXKLR|5#ikQGAyoC?OIfqQ&o#5p>Ox_B|%>=J~GS(+GflU^o zOIIqSb8NC6Z6xOgaa?l38PZGMRUJ>n(QEsB_om&08LxdtwYs#m9ohWFBl4lLyNafD z&sn^U!UpSz|yJfO`8io2Y|;d`w1F<@$P>ZIw-mO z?*pg~U3%?ny473w+~N2unN{PiPq}bg%&X3mcF&HFyOYBgtAk6_4MaJRXfTk;hsu6I zBvA4TB2};qbsJw@X$+N}Zmd(s7b{$5k3-mTg%=Fy9v3(b<=VX!r9qm5UDdlRNFrga@Yl(z48u$k0WAm>&Kl-z?ity8 z+=CAww|!ST#O%0V%O|ergp1jUNd|iIHO@*DP7sEVadcJE>|>$78}>aViRu26#~{FVpe0g2QC0v ztQ*CiL2xNlm9vo!Q0y4iD9@vwAA~BQ!1FP=f$NiyQ`zgNOSwVBoJ+a>;-y^fSq@%U zh+|dbh0Q`xA`|A;>Nly-;6VpqIr7fEL1t+s;VKsU!IGQ1oLB^v^m6&Q8VQb7IrnG- zCHH6%cka=Kx(X%tXsZB~-lGLvc8`{2D7iQrn|P0Q(iXIJr8}~IPEa?b4D}MnQtT;i zz9!3hwk(gEPv1VsZo=x;&P-5v;hrGud;Ww^&g0yE8<#s_aEO$uoI71`z-kb-QwLx} z4BIIX1ULU25LZwEiVL-wF}W9bxijR!WtX9hhaL7VHX8M_3%JSZb8fOS8viS^V*q&- zz}DYYeyufTm*O;TA+Sa2CO<x_97mY2EyaC%AvKU& z_f}F4a&u46s1PYKyA;!f8=8Y_?HHQT7Fi zY6nw#haza{T`VN17%MxmOR;59*ea`@b~8j3T;iRpRiEV+E4glJ^vSQ$cn2&6HJtD_ zr96eqj_%ohix>_sSo#A~+GYh>KQDC}G<_0xMlE}nRh;@Y1OENFs&RL9f~8k^v|J4o zKYn7;F>l_~claF@4_~^OE#VxWGupWs>&f%)hrq#Q3qDL6l>3YFa8>sEO_6NLn9e^N zf|-!~Y)EY-iExeH=iJw>NP+v>9vJ|tD_*V&+I@&=40XB6YhSLa8h6EZ>Hoq?0Ed%s zZp!7-Ox;}RGFOgOAy|cHEuO3JT#sk;Rt|o^!7n-ZErPLW9DD6z@)+j-*WR_q*HzT{ zGxy#!X`7_!Nt#ES*UdXkn@5|zLZIoB$7w^MEwwGQg;GnQyh`x`u4M*MR4O1MP%*{_ zU0k$TSfPm4*SaimTT~RmRa*q52tHVJcX8L>y_^A}yew z{inlq21i}&#DPemOZoRQopc5Nmv-vk{{wz z_ZyU9zx*9p*Q-2j6;P0xB2b@953b}xZ~+$3$iG4VXg%FQjgkMvNs|kUrj)p)W#yGs zGpcLq>XQwPP0cN>ZS6BVW_5OT&*_~vf5E~$V3B;j}_r$p=sh6NPvUbfT`TF3ARNuZfG8h)YgN;fPi! zuqsCm+Sx^P(#NEaO$EJ)`m*{~Hgx)!$P*$Fz;N(>X^o+SvT@>NVwy-K%aV<3Fiu?L zg)qt(Lx@Tu1P}rY(e!}0%0#j$Im@RjQ6;8}L~~hlH5&oC!kAS-x_rEJ`SNCnYLRGj z+p5?w{E3C=njx^b%3R6h&V*XLE;})^Y-Sr9l-fb5mibPjgS1TKgqj@zsMDHBN5k8L?kMF}J*@P@KC%W3YX8QC^nun{l6Fp@;wQMkM zp@_Zx7?_0;ax;Kqo`yw}ppxTbWeZNj)yWIRqH!QCJT+2bpExZODTcMP7&XX1X$9V) z4v8RY1g$(y#oMIO(y5VByU!H3q5-i)B<7UO>1KnAI)(XD5&(6?fMMZsfqQZRqoY_n zuyA<-Z#G@z7hK@dC5JT&Tp*tF-zp@Z z8iT6wQ?f%R#~1=f6v3ph&i4W2t=Ri7JZvVZVIz)GVkd`~#+n;S8XuwyqyVtqtEsI? zI%3ePX|3sDj-VzGYs$F*sV%OpW&`^nNIG2kAceA8BAm3OP;F4Mk~K(HS6o-YhDnxx z%4Ac|L$dmk`bsuTGTmWNZuEbiz}5~BO-#+s*F7HqbBgBFvJn^ML~g~~j|~u&(6$Vb zO);)XEhTRC7WdY$L8{b^Veb>tv;0=_4+urRfc9svd~hINR5L#tf$8%T;&`FgTie?q zL=!iwi>xfyP}W<#-p<}7(P3M?-sQdLSpEaGY#Yexcl#^Zh~rQP`tcA2-1Zs`ceY{s z07O+>B5+$RT-yb1&V{YjE^mqvmr@16PcxF#TEY>Rc>PuVjY#12&+T7?1YZBL{?(4S z)a&2Sza>D>v~3`0z#XV$g9*xFN(M=Ep=h3{r~Kgh(?~cUG(-VZT@HXV-7~A%FaV7q zfXgia2+uCc^xXhB%RQ@{4FjNCl$IGGc8exT8P%cyIpZn-c&=B+h5>Lx6kKHi_!jX@ zW>#MffK~3QIyNE!t{xMh<{AL3c2_sE!2r#=0S2gW#5D{e#2(R1m8rWO))ic@j@aX^ zZdvW?HWaOvfCt^dW;O^IBH)VL;4yI>`V9h)&IF3|I&ZLLa4uywIB#$uAX9aFk=eQK zx$SIdHpIkij5tH3*lSp!gQ9A*{ssW8ao5aXBTcnv4guZ3K-m-%ceI!=wQH)^v=g;! zI@Zh&P@B9FnXJuQ>#`9SEv!f77a%2_+)5mAqgBLw%eJj`ir_d6*~wc)MMm;A5F*5T zL@RSt_%PfUK^y@!?#rZuyRlXjHb~1pL0~a)v(Yg=XrQo^3y-w`+mr1)mgYRLqOVFW8$1P+SITet(dl{<7`->iFf5slqKJ<^8a4draaorwTJuf+dV zanX)Jek~ep3r8@2cBR+nH>tq z16nfJQ@3m4EC#;vV<50j?#IyJ61Zl|{R^lEmiy0?`!PI__rkeB?!O4m`{2A(?njp= z?}u}b-2ZOsoaKJ`QG7oR?*sJXYxq7B;OR^X^5h+^ykokt3{N`)1qM$)Zh49ZoXyh? z`2fM(>B>6+!3y`5h*4_FvTc{a=}`3Zu#*Om9qFjh3oC&q-CEr$r^K3Cq?YOH9O zp)p}PXQ~Gy9mNbs;;|?Jc$ z@LVGgY=QH$aPE}{&~uRZ9FXtDcYi=mx~ZXh@&Q*qkTe$aqKdQ6Ap1ck8$x5r){$(D zQ}YHr4>ZUJXsUr)Eh&*6d62RgcI9xLv6xR2j5ZB(syoc7gPi4rbbIvkwuA8Tu&mpX zh$l{Jd&Bi|xJgqx+$o1KGDqVZK3fjsxs13syipEgv`X9?evcfMx4;ed4Wp3_OFT*X zWt$@(qOv{g%7?3s6<}XRSssdHpHG`%-@`TXVf4Fx7IWq2D2qd`JOpWFi`j=cKL}b+ zm|dUaEMgJt5*VZDhKWG{@!-%5d5Ah3)YzeBz``tR9_H!ILZNxYD)E3 zoqP;hRek}W7`mY``B~1FhbYU(UHLfVkS#8ieiY5f@{mT>1GW%;BlpG3W|6{wetEFa-4GaIX) zo2i#4tL2lydRZhNr7VuP@<`HHTq@gGwL-IMZEm=fIE0VFjM-SfNKp_;=GJc*8fZZ^ zjrB-_Jko*`p9VeM^2ll2SdZWbrZwajVQ-d4@N7zr^~ja-$R0S+R*$?#9+B@4RDU1Q z>dB{YHU`ztR)BdKC3!58c|K)^c~8~Lr|_aLU&2n4k5d*;yYlIJV+FFvkg&%ivmgd) zKwaXelk(}H2=vRtl*Lh39z`kG;`-6rAR~*zoJFKI@bfY4=4ibG^ruw-e>TIv>dIFE&lbT$Xv0%0;ViNzDtN?3&)_WXX#Cd!twp}dlPmJodGghP zKub7>rdQ-IaTKWCSeh|`DHfaIDW+IZ0*|Ix_)RhAZEIE@jK0v`ac_9$A;rI{f4rYqlsf?~^{R0L3R zO(t2rzGfeR{LYoX1BcjR5Sp?Hj=uKsldBL>Q#L~W1CmzB-(d>gSD)v}rwI5hSH6Xc zW{ZF^_mAlnp&u+VdX1;J65@ej>puz<97Xqs`z*MAKN3d>#;|Wy%eU&`d>YO+`PNL` zyS%kPzO^(!(D`x{1gQj0ku@7jvx_l<)ra(>Mjmun6!X{8a*E2sNw4X~GRzNZi!ql} zAPDQ^w+W@7L=}`9%hE&>M}g@RR98e-xBh$~{|Nw-%GIP+V;M4nG9bkHqMXu;^h_WL zHLbYmr?U(26zQqLB2`#pthj?yji{^al^W5_(^}nP9#3m6CJ;NVg~8f|0H{@kSZg(|$!RxEPgAiqb%yRLF; zjTIO3XyQm$>S7Xg6jOdr@X!qhe6x57n0Lr$38vIlrKnN12nKA($6s(+Nbe%huqfKI z3_C&CrXjy?=7us?W8@F4-bMaqdWb538x1&Dk8EeC(pq4CAI@e~3Q@iUt{zp&<6TvX zA2i9qlVY?RMYLCRcJ27a)`{Lp=nej4?Oe~yU&^XOs(_}1$){lOA{mEy{j~L!8btG*qp}Mq&0~0Qy^&?g5DlFh? zOQVVTtU0aNU2cGA5+q}=3Xm=G$AnVns=6v;85FI5EsFfHg~=WQ0cNZG3BlC6svg42 zRy52{#)R1>e@ZY(S0w?%7QtjM%?3&car`NR<_X&Z#v}NFB~s`fh<d8%a~P(|;g5u|E$RcpJk zG-CoINSom)Mvy4MP8va~HdnRHFjl$*BG_siG0qXBYO7Y*!il9i)z+ih{1GHFyNriw zs@+xXXyt5a(uE$XS?L;Us0Nr_+`o1dsSeQ07Iv`c{?%Vy5{(fJjn#2dEa0wo3Dl3@ z)#h_o+fl7LK)F2OsaZ8@Rx6xe^wjJcH5<+?p6aYoo!#*Ku&26eR2MwAdaAodbz^#L zwx@b(RF6OL1Nh73i^SYsSM|;^R$MHgzH}is`6ae5eNiiNAr@w7HNadUUm}=!uA0|q zECZwa2Mq(VUa~NLw}1j_4GWmvI|*gJtLCFUv87QoQvw7z;uQM@0EYX+0JgwY3p$Nu zNYc9(EJLRT$B=fsu)(Hjped&by!0FbM><5=XXMGz^r3`k?3NJ5OU z`2Zl-Y$HngT-8@;ECR`)scqr5@qUKfihAs=ELu zeXCX923FI37puO@0+o3!tLc7M^+QdwWlF8pv}N5GY8s{9!)h8Y;W!-krcr_vtLde# zS_+lNR=Na6Os_CWGYN=M!OMBE(Uri&k8?>5U=Bj0AQ*3F{jhfauVVFC{6E$FN zlrK}OTJEal&|7R7n66OMlrP(jL0DSI7}NpgCi!!MIonldgBrFBOju0i&#n5)ej)+P zyX7wk<{Vd@lQfor(PLG=P`|J+$tY_6il0#k~T$JNM^p^-8P=hOS1iyyhRcbKDQ!YB@!L4d= zk1Ye}xS8AD`K~%2ZI7+ESj6=D`sIo;ge95e4PYvovYS?v1}O_Eyor{zHV`{<(P18;SO)TtJb4Auw`I)HAYyN z%Pk77#mQ(?gz{ebYoca@t2UrHuw`KKxp7(;`D=^g&v2re^`L@qZk4|wob9gK4szJa zgJ$@x0890*VG?cZ2V%L&({h8YL7{y?NP%trwb%|Ck}FQ4w*b-l<%4JeD~$Z3OnxS` z?HSvD)b<*+y#>w>!r7{}cjpkM4Z^~7v24m4IN{FE`u@a24O!S*2voC^i zyh)rGmTFX~S(;&~*(xwHiIP`D2ZM?7DkY_g4wi2rT;7WB zP*8MklYbyS4!LRwT9B;>J{pbAdfjJCh-JCCG&EBUVV4zgX=sreTA{f#bfy~0#RhO` z=mIsAOC0_K!Q0f(J9CutKM{PH8oDYv7+e~fmxX{~OMg>fnYPr2G$pH>rbH z=Lmiq!F$xfeL*@usG##aHR7s~T4RN3GgNnUVhSB}bX(95d|b9>OfhDtRoena>eL7+ zhZD$bwi=;o#nHT{Vh&Wh)PBQyCqTuT&z~m%vnJtyZkbT-*wELeLwd zZEBQ60bCoMuSN$n*G8A9Q7@W!aBXz88r>EhN;3_km#ER*(ZS%_=v8WTZ*(ZQHu^3# zDrIyqv29e|g71fde7jv?1=CZU#a3L*jR~SV8xHcPCLmgy`YtA9(vo?H$|scP zT=iU+u`oJ9zXBxc#G{cWB5JpK4x_m=(w%A&A-&+L7ix`_mlqGpcp~^CFZg3Z@JD{| zM?9X0C-4tD4~K!{iTp$&lO`X^Cd_5iI8aRnadqm2`XKFhsY0UtgsV<~cDC|j1r{dZ z;5EI$A0Vb6F_Dc-TKq)TtApJU^m}D9=}1^~yqHkyPj-rF0-PN+eV>w@$b$rc@h}+edPUQVaA?X;fu+O= zxPgif)?pW!2BZfRtX5)SO*rN}9i@m9m8&TZon8zau=4|uQ34Wrj#%wrBu1>GY1e7z zYA;y!*d2z)6bY6+QFk8u;82|P0S!!rWe@$vBL;shdx$m69-61kch)*yPjOETGPUKv z(FA0));XVG^$|KG!3S%!Q313@YpR3tD=^>4{0f}S4j-`-bnOlP`EVz(F1l+)l)#}l z=GkV;Onu6Z>%|Z7RS^TheGJcr z()L4yW}S)Kp;N=sXMaTfPVECr`{)70W!e{(iPvzs_JL)58qseNC9sT79Ah`~fn|JL z41&l9mi4(t`&>gC@Ngs!LsPIJ-}=&?hwuR?^nZi^OC#t<`5UzF4Z--L8SR8lV^D4C zW=V2DC%)+$DF+jsn;bq|L?O=zIMp<7-PCpMCJO>r z<=(nk>*kP;Xi*ia!dsVES46*%1dsTRs`SVN5(B4y(i-o zCx!?Udzn;;R5&&qU@gRhGpyxG3))Nln8JC~1o^be{L)H@x-}95! z6At5vLmJj|n3QhL^DGbAXb);mn2lYv@}Lbki2k0^6HNArm~Q!yjrdRqp<8~=27Hb* z1rR8ljygPS10D{g=)nO2!<^3tQqXMDAsYaPE+Ok@SB}_#kw6OCw*QC?cqEj^9NaKx z@_00(Tv=P;V_=A{JQmo!;kq5>j{UA$^9&p9(S~S z%rDN}CA_#7g;%f_C2yZC{#FI@!~6X~B#3Og?3kK9%648T%baZ7>`fSxX|1HG$59 zO-7H)Z|k@YIc(foj4FgEM>mUZI7WvE(?f#E(1Y}i>;We`STVugIojbTCI|XJjPH5y zoZg|A*1Jb-kB1!ujtp(R(@LEp=#I(X>X$3^cg()NfbQnh)OX<#R&N;$Cl2aMJgQrzO@St(TN|o_TN`JJMPAxcmNCRDL}k-AQosuxc^m@Hdu#A69>^tPLLTVp zObfWbFD5Nz#}P@hAJH-Sl->@b<(tB_e4nuUYr=`+*$*Q?!X%g8Vv`ZszV8H4FaxBw z=7gg#rDzU%TTezmWJB^05$=^NP+iX3?oErHj; z@sc=5uxSZ-wk2R{lb5ywy7(lw1nOQ$$S`}!tJfJ3bW`xx$kP%?sp&!0QT3i$Q=ry> zIDhm`fgx3%^l(dCtV?JAYS-Lrn?Si6FG@7}zIL)PDSM#P? zwP_}~v2AEmhuYLb?iRS`s7?Mv>}r6=k*$0KRBkI)+p5GAO{EZnf+q`F?PLLV*{~Xg zg-@~k4Rh!XNB*V&a~zZG1SZXX(&JsrIG4>Q@syNRi2AXZO&YJiY4dnf_vj(eQ!O3; z-X{J%9yb4Mi?DyNx%?qA7t%IpOlpeET6IP®JmfS{wNOqm=gR^68wP~`@%#KjCi6r zo|qC(lq4`-wt2vjhx_qMV#Uh4Uuh-NJ=M#r$sJY44r*8*0E2ANGzpH)M47 zHYNuPv2l!GXhAL?iin~@QA4*HFVcrRmk`SXNi?FsqrPzPQULu-1eJiU0>ds5Py0=< zsndYK(8x4CgD%25f@2uS2vP9J;;lDN{o$lOyibrxo&th#F=))e`kg3v;-(8PsOtUM z2hF=Wal1D{qSFx}zy|9;GrdHVZ9_^a{XjLw1XMiKKH^f5OAUqeGQ$k71bM~EqnJ*9 z+P`A#;L1f2T(_xOzO2{2)ZW?_uC}+@ezkt}-fR15`~R)A&p9)b3`qUo z=-Fqlwbx#I?X}ll`*HRjR$ci4auJam&)@$}^d-FcuS3EU2ct+1PyI@mp78y!=}X$m zA2zMqnk^&;^0_Vf^!8*=y1zd+nB0^}=7;)|+5Y6Ri`OQ%=Xx`3p^$&N#d`H}qLrG9 z-uxH6+d|P%3O5BbFHuq>(iQf;a}iG>-hnqu$8n^w-27+1X%y*J9v5|Zh$8ZT@oj-B z8!Z9f^;W#%t6QUB#e{c2CW%l3=g$lHd!<0i5pZ_v?h(N5=0<(kelxl`KFgs01WN!>eV9>+6vCF)nmk?u ziaLi@^{3E={^o*#&~Kql!~-?KmK~<|0pPWeF9%)wTd(%ze0ay*QMck*b0?T-IX{r8 z$BB%%$H)Z$%&aojCg_l%(HK}9po8_z5tI6jnSuNnU|vXo?s_9&rm7K1xZIwwyHJDZ-x4_p?}vW9H2Y-o zO4hKaEHm=8<+nM-G}hb+^=i#+`ENV8$w>nptC`m5xk)Im)yTtn3^eCM8bahpdvg_$ zrw$k;?(yRD^%{uJ9$^EBO6XhO>|&t`oHEw3m3=Hm3ibVdUQ*%WTR zinqFITeKQvxH5k!m)!_H%&bMvC8dBX^F53Q+j4w-mPt3G9B4Yq92e~ZP~%snww|vK za_NB@fAY(_7u;tK!_?eCZ>!gvn+8rO(x~5LOzOGfiYpX_%N&Mi?iARy6qAf*eUK#% z)ml`(VLwwrTV+(Jz#Kh=I{I_YztRwc>_5>JfRPh7ucWTUrx9ay^0MSL!rYV2xFUxM@gL;$C;u zlv+f+^7>mMg>Kmb!kT6m6j}2(joU9i%T1rg8=RH=_ptn|=sQ{VfLS7{-xczefI-9C zp0y-D%aYvfQj&Y3ZY8*qKZRCe!QD!5CI2|V4VMz!M7>!1miUkxO;b^B^esZ2qPDtQ z{knm^HkF%(ZS68Wg)V8p>v5aI>#@3kM?YW$`#-^)>CkbxY{w!%Gw^Kh$PfPn{2YCl zBPuh>wqc7c73tx^6g@{2GtjfHyWsqw4CuPh3f?1d6>dE@lZ#>Z3}3{8!sD&ZVv89zQgc8x0*~a@YyTD>nT!aUldjeO79VDy_6#%C z&Ws4EWU^-3IWaB&OQ%ZQCIMOi9{e|vR3Bz8mOBm`VKeM4%tZl(c?e)?^YLn?_f*Qr zbq57_v-?Cj9?Ihl!;4lTw;GJSS!=V?T&xJVvzRw;>O6X}U8H2-QgKj%p&nBHiakqi zAqva~#!(Y(u2d+i7{XQ3Q586-5#l&`**1~4zXIPxf@cOs^Ia9vT#1@Q;RsUEul?Mw zMK@l$0&mo|l5SjX&humBNum3-_>B|>W`Ao7kF*?-RbXA{UaDC8$QPkdS&Fqj-qd3BjwdTa}b$3kZ4n`ol`=<&z z&UHd!7hB&FL@L{-(12p8P$>I6^SCm*3jc{>b$6+P%A}s6q$WCUo4=yuhO4sL+(WyM zTV5D5PxOcu_@A>JLkxQoJQZW)XNpK8k%B2Q@)VbCvaZ5wCl(jx$x24~$CdYWB`;j9 zC9grWn3ie)TC>X2Ub|AoM9ezkQM6zLr=khu-3MP3_n?wWGbwxN$pIUKw4{KvEa53>Vq~x;wm0OEXUzd7Xg{Cw~>pcUXqE z+$v;kbxmr~YHPZaye8?^hk3xONnOND;h0-mT{SJ9B=~f6gFkvsOY@qE40$SmIq`%s z;(rxi$%nq;807KGuaNIqZk!Yp!~;h~zs@F3?AuVa3bMFbPjL;wRb#&1T5AM!89_}6Q)|GBC(1l&X1nzgmk%FSfsb2c z+bChX;hvi8ZqeL+mr?L=|B=oV^cJudGjxyPO08uh=8h!eO~9ji(`lyFkqnRY@8k3$ zv$=v@)Z8h(y7HI|SC1jdUn!qHj0$m^Rp6-)Lqye{9=Zc{N4rH`g(|5MPdHQSxE^r- zE$-Z99L2(@B?WK9J3HieAum>Xh0W|0DK0$t- zQ?Gzr{HN!x1ij3o;R<;k4LNuo4e>CQ^o(HD$y3S^$cQ&D@rMw@%+gxpCjmhZnE!JQ ztdn1Nti3INipRG6_$(J;%pr6`>;W)S>;bS5r>|D*sG1c6SwADr z#1e1IU+t6!dAK6HUg3H{uJ=1>Cs@C8ZJhOcTfW$H!&4*8f7NpvY-ODWLMZDLetAZk z_=QEssq*%WoGx!;WV*b~5iG2sq_+GIN@QpQAx zI~|~5S-8F|+R4_J1$OGo`xX91)%Urr@I-6<*2ak5;xW)a{TPf;23NS*kJ-SAylG;V zU9!VP1U+4C>j|d8dP?yN3Yx)hPfZF2&@$2@NY9Ns@lK(YT1K$EgPyRD!VyOebNOkkWtyS8BL4iE-c!dMw~&kR0` z@llN#ykWHw9Q~eFuP4=wSc~Vz>%cD%_Q2qGAqIo@$fj0McNwNPk-)mfC_n({BRs$H=}|$Vl=cs5|Zsn=@zV`C6#lCHskP><^@Rz}T1SW%i!bUhqg| zxC&>6&A2D3q>dY9xuQmDGf0k`m+S3Hv}_7{CP<*?o1D_0g|Al{EEl6z_SsIY$+v*i zok%27AAnQ`Q3Wlv1?84V88^+DEm0Fw(FLGYQ?95fP9g4v?!rbQ>XrHw(D#gHGwzF; zt!G5dxIgN*$f7JVyBmUWnkfqhWWg7^gpMS!sY*H8mzi zwAMHCH$%q!F&1WK-T{3%g*<3dR;VzTW(Fk4QPA#$FnyTn|qB`Ph^v9?@*N}yu}#FB|F z&=b7kJX>Kg=M?*P^ZbD@?TjW0+qho3QRu^4`Iw1mm=#N!NiQQGWR2=WI;;lMj3}0_ zt`z)W3rax*2HJ@v5Htw#8y055R&%L5{ zeeD%-BWl!~f%&i=HR5K}ypsvz-ncLBuZahvCMW~ZKr}d~De8>|UA58R6~gNv(?x?| z5R3++f!ZtDe;xHleK0Fayd7L{{x#T%a*X-kdO4a0TFsFPh{Z$Ekg|84+kX&szyKPx zKRdW`7-sz`xJIm3a_~j|ng?d1*nn>2{~O$La7zA>nXm#qAN0|{NE=5Ba6bN#GdLRc z6dp$Vq5r~XwuE%kS9laK?{}o&DqG?n?;so@=tky&-j{>N!RG;dCm7}k)G;y(c(zmc zUFP15F&NFQHDBq<&qtB6>(y%N!$OC#U`?&ercSLZTXcDMYTsBJ7Lf@k6Uy2sAz-w{0T-dT&A7&<^&iucDd9iA>vK)h7Or-9Bdi;8=6y!2eFlB%0 zZYwax7Q!edHS3d<90`%52Hz4Cg6p$a39#ISxLv$~c#DDm^cJ0G;b=du0QP1@B6QP( z(kR$_-G`!3+qs;Kz29MuSm{u)>c+fB`yoZgmeNcY>BAf;JOnPF;<2tduc!W5(ac8@ zG`E0Xo)OeQY>0g^+wJOZMhTN|TqGs&o*{-dUe{y4Sbd5!^3Oy4&8h>UH~kA|JlDv56z@Rl zb6{`E&PnSuBY%ty@?Ip!7r3BTFZuKqp_Yer*b>wN?_)=}e-u8(sL40p$1lk8ad}@^ zo7#_v>i1mOsFD%igbpwPY&FXLiFE_xmA}FlA|vH9_XVI^+jIq>fw8%i`x0KY?X~F2BBc4C4pR_8 zYnxlX)ADV-u7pFX1(N6q#o9_p2r;j*r(pcJ5kg`b5=~%Q%na++FV|RZu7cijjY2MW zTPS|Bm%xmSTD&cj#aATo31DKOWu+wozX}d+f}laKA8|5ITX-jbM8@)~RX47OELsFC zF_XG*69plF_UMUA_Djj`+U8p2r?{ceAACHQmcLRh+uPvWhD94)!C82&&yfl?iV+9t zJjNDnlyQ!Ye&4b=%SO*Hqn{==!Z^o9pSI{N8|^BiS2oHx$3~xF`X9qaF8~%cdLh3& zBP;m@8(k%D&&WmcHbySycga}er(dGJ(?t%Z8E30OB(_v7+=th~_i^wL0+=foW}EA? zkU(MdVJ;Q}0t->xPf>;|lGG|eh8a+XyI5C1iQzW3pK8jI&th~M8+Z)1ER`^&4lv^{ zw|o&6B{*SWo3RvRB_xDc_7%t5F=w1$$BaA~J04$ZS#j^mj!#tbcsu4s6u&+Nt-*h` z`la!u5$q2%az@}QP+)VjOT0oOe`PKk6J9|3jjm>v#CCKEVz8q%{PK*fc4QLFfY4I#(M(g>j&23bLUtw#F{H5_NnyiWi0o4b_3^)Uv0A;Pu1Dr@>JUE#LIF`s6;3Ppf*v%`f>r{?}5W_Q!Z(q(fp?w*7GVMFQ z%(BAXRr{W(sjrpT#=~U$4W_AV8=G6Y7v2Oq_zht{%-l@=KMo;boqc8WYEI2KXHNY$rnl=l zN7c1u z235VVcX5Kfh$!oBNb;VLF2Qs=ZMtu;{b6q-gl;QynE-5%{|dECcb!dlz@m#zpqtEe zyKK6B$K}_+bi0KPy0qH%dV!s~GHBHmG>5YRms0XYa6V-u`W*jy}aC^c9pk0#RUfH}cCf z0#7MEcU0bN1;YZ?JkI7B>TU_-)|v;=wk>%$9X6*_M8Nm>H^*^7Ys{6}}eIheD+U3>Dxf zgx?3QwI0JsDd7*w2A3Q>Aa3A@~b_;^wMEUv#L(h`*24KMG( zs-0NbOJ@b3?~8Eo-25R$&E;=H0`zn{zdR%V#4n7=?~}J@FxI@Cnf7SrYX^z ziG(1YFbfi0$ogG4%<=0M!h!Jk%ths%W*tarwW^e12GpRuU01*lL4&V0yfJO4wV%i} z$;!Zh$^e5CfJgBFhG-Gn6sge`KSMhSMu_Y|n=>rrTL@6BN@W33t&kL(T_Ty4kPt@J zeDA}k!>On@?{#su$t8PTo`rC3XnDq;sBv0bCSjLeZ<$^}u!+KyNl{_2A1vDhQ+r^O zDLt(Az@B+$al)_{-mf=!C(POl;|7;8KY|+ZpK3PeJ6kixvuB`f^ss;9mwN;Ye4fnn zxHBL0GsHF+nfeg|9H>a@!%XVR{TN|DALcYO^%I1tpK=t(F@A{Bn=H zpz!6q8Ck-cNgdvtR+;ybwHGYW_;ecn*i3iMZJX8BKC6B9BF1>A58;z%5}g81#s^jR zOhtU{U_RTw1%n*X!&ee5^8!=*PqE29iskegrUdC^F8$n;(n<)P;xhyYO(|Ux)`P zBiJqe?3x)=KurvKj*cLFL*fZd(+pauF@BH6`27-o4WXY*{U}nK^ghIABJQVA!Q7*B z>Jj}>-A_M4XwWgx7&OVn92UAb-XZZ-60VbQ*tOYZ(5*=I(}OO~^?kvQxTRc#e)_uS zQN2K)gA+4op23uF8(hj&=A-(}bTRyhK_4)g|3l_|ra`|pIai&RY33m`=q4|x-sfff zWZ$EDnCAKzbBB*hx!S+PZ_wTT0>Z=oM-l!?!oNs3E5Nx50p|7|2_Hciw)FO9K-0of zx}WkvF6*u!bNB&5H~khjTwWu5Zbo>SwAToURy$zwC{-yRPYNXoko;t>SY_hxBPoI$R{q@}X zZ`HGG7dCKxzthOp!usUD9y}gpT}h&SsK0{t13GBk_d!DfdIFFS)@jgKGA5exAfBN2 zKuIF~% zP#wNrV+R7z2LUyJBj(b8J_D!;qZDQiO+-Hc|`^cJe_`64i%b(HW9$G|?3G^2W`kX*+ z7niVz{#Ei-q5Dpzv*?QgwE}9S#q;d3UqoKMdPbT*(i_?2gc%LRb^ zbOHTX(k=xwA7_7GkhES&yM%rr5O4jQNte?xp}bWnH{d=Z%W@Z>bLeV%MbaLUv`y$O zoc08uC9tU1CG9Cm+e-f<(9Z!)qb&VZpx*;J4JV%866kF}&9sgFCQud3t&P34#rtLrd>2ypx*%srPBK3$KCsw{N?4*wz= z##K~?l7QCG4K!V2Eu9UhiALyjNxK}-WO@(!3{&m^bQ!FAwm>&XzCAQo^6drWr}xqV zfj%YBZRk&&@B4tRq&sP;K)(QV4ZWY1uKAmJ_v_eyxT!{@5dJ%R~9=fA9GU9k-q^!sXV&9|%Xg#P0=i_P5J)g1aH zTnhS;nrYx;w*|NR!J35_S)XX^M7VxxX-jeHlQp*jzj5jZ5f2j|1w%7^b+K153SEpr`0n^CgVdFF4R^ z82u+rW6Gx}=X*=9qUjcNz^A*as8vDU&-%Q87Fy6DUl>q_1>I`irB%@t7WAU;20+~w z^hbgE6a-h3K)ziLG}#rQJr>mLpXQ3uJ`2j=Zb*#o5y%Bi?9dXlU!WQ~C2*cAK@SUb z3oQ-Yuhr0(thBX(jH`wYS!vx!tEHzcXj|ZMKrae(v-ios7@#)R_{bGEG0#hUU4a(D?$f)E{@(Q@233&=-TB zbT`sg3pyOUOKYS7hw>4mjaq5H58j|nrP~BzD>&OTmF}_9m`jpAWkJj(Nndg(&+{bd zyH*-=X`&aLG`G=2vrcC@Z>Ck@EY|TW1$xT6BYZoq+V?4lt`C0`&|_BGqryB2g^RnS~Wf3l#bt9s2v zw2l`qu)%QTUrfwbET}H>DYJvOd?amJe96d!}k6i3sOOctJc!_4m8=dj<#A5_o~b2HVfijbs2q1LEb?4 zlkO|%hy`)Ky@KRY58C!;(fPhBX!;qdgdd>iTtTZXXmxNN^4()W?~l}b*VFV_it_(O zkC+>%!-BY1ZJ-ST-R!N34f;0FE`bjFCdVE}+CG&=1F>%!8>n?Qb77l5?CYgbfu8aj z@f);j={5yXZTuzQwY1NITH~+#257$p{n+&SchDgVS{nEI^K{gLR>$$P2J|}xdEvqQ z1^R;pJ!Rgn73fV1>WMSt<|Q<=I}m>j>&}RRMDx37k_EBOc2UxT*w^i%Rx2O3$}U>y zK$Bg&X_*Cas|?dR3*uH8rfvm^=0~VkAlAfE{|Ftl(tZ=)?%zX?S^3Z)EGJV1+itBT@up!!q6Pt!pQ`cCyPf}f)& zEGSu19r^-IU!W*w)?6C;I<2&z>{weLTpywwYF@Hw)TF~UW9oo-mzXi>!TT=BiI%q*(sM}ff0=;QL zp2>@={++zo0V6uBoj>_zKoJG`zBze+)h{SzLG@GiSG`Cb7G=+rPgebsRtm(e`PHgl zQJ+97^vCLdS#^y5U_sxk-=X~ny=g(;t-l{oJ$Bl#+R~q|f2Ha_Xu1WxQvXLla|Pnj zSBv}yEwj>IH3N~CXhTWb%hczj#UsBVKFErFGUS^T`7P~t(pE=ap`!xDX;Q<+$g6~< zH~!+@8yoJA{2%fvh`!hG1wc1g(CZC9j{K4KSWtCiee^ZD!-84`+9yzS(&EO9@ftlW zkecbdMo$Q|LVwk~2Kk;Wq5Kp5)Sqy-wPy*niW*PTGyJ|DmUyv=7DJq!*pE*JFR7w*=z$n;QQswVuPJ zbNgKv|2w^9LEL_%-E*!=UhoX@gGMwAgHIpOdyKHb*>6*N!-8ABxS@e(I#X9-F7V;iT=*=4)>`X`heJ*MciqY9-kMZMr~Qhje0rwpbul zhecYillDyXOl{Cf`&INTZI6@oc670}&qyPmuS-kVp+B(mTC)~v>nJUm#VZhHW|gDQjJ+MFdisU!_fV(!LY9NSo`VeIs$PHt3}7(AH`wTK1r zd}+NlNgx+W*a0Xh5ZB?F=z1+Bkdoy}t)qnUO6`1yGF*M7wyuQoDy^@C@+xi6p?o%R zl{Q*Jxk0-}Ag*XE>QLE`%x-$BL$KT!o*P_+7&7!Fta1 zDTEq*O+v=Qk2P>u8h=PyJO(^}S1Qu90i)Adf?p!Jo|90~uv8kpcW`)PBZs$1c&CJS zOL&ij_euDGgrAo1Q3+MK%2zxAj2rv^+-jvVzdN4XBFZzk@dbf-GH3px#BwTaG?&P5 zGV~`SE%VW+l=F#e_m9#m&i|-RR4y({C-#}Pg#Rd?QfZYn{!VoGM}#_YTv@4GELNj8 zBvsj4Xc0g-Z`C3KQ=$1HEFM!pF!&D=Hm$8GQWV(<^3A?@Gdat zeM*~wyua3>!ubfj5KI5RGn?kkS`0J z`s-CUnO(X_Lj3h)2Jsh;8N^>UW)SbP*Mt9%eu@5x$opK=q3uWXsQz^1a&N2l^GKg} zuJ&@|A%uU7JmKxsKWu)-JA?ilxnEnXp^1I#^{Qyxm)7rz&h+{4ed}?w$ji~Qe9I*D z4Z0+@2;8oT-Qb%c-(VK$TVuETR*JMMMcUb-jddEg+9HW}S|P7HHVD2~!rS%M>TIA_ zIQL2TG#07kTPN`&5+9WKM^N7n2Kyw}poI8l1x@Zj_-g152|J;;+kFT0w`$gh59mg1 zR>Iw39|dY}5WBh~{Auvnp?yz(1pA$T(GJ&sH~bgvh1!2Z7^rLgA&f5 zy>+Xq7SVlmYpV|EkJVjO^{{B~VbR_`?SqrwSM`MU#mUclp3uTmp7nIm*QYG0x`ci* zWrx;9zrfyQ7ri-UC&Ezu;;QvD1z{JRQGYYyOY4uA>uF{EbKx%9P`@9TZS{8{*9hXT zi<}A3+mlk_lTu>6V5UphD&fM3WvoK2DL8+7wJLmaBv_R)Rs05AzamXJ;KWyZ$g-E+=Fmi$De;vOUnlW(65k;4H^dHmC4NNva^vi{&-IhW`?a^U7aJGpS>o?V zQT-=Vmd5*pW>CT#B-|t69TM)7@LmbsI)8&-CUp<$Y;OkzpHSMim6uuFl`u7wc^8Pf9J8>1>&cb?)QKq^u`}ex=Z_ z6nZay^(O81;$Ro$hWcBrN5Y#W+(REl>H|0{!{LS6neGRGztnwD@GsF- z+P}JA68tOl6HvZ_Q&AkgL}$V~sgUuS#(0-@m8N-I8uRgKjQ0uNCzMTA$oM9~&k&j! zR-CzY3QecrI|bi`9fl!ymteXClNOq^VA6u=(YRh&P~PIs3O+0NF`*n2%$Q(q7RuW} z`6u`7g1=qx4+#F#Qr4#h|7pR0OYq+l&fgRK_XPiv_JC`P{*t7=BHUh))K?_crQhs^ zHguM1DZ)3aMs=?BsLop2um7H|a2*oNA;EkLH1CTX1-{SqlElfy^yFgtq{NdF?~r(h z#JeRvD&c+!4@r1b!k1iJF1eXc(h8Ydhr~PF9PgHRx5P&!J}U8>-JEy7VD<~4NVNe23tB1m9$^B{Uh# zp~+wlor38UOs8PFjGJ+aG%fhF;M0O16U>-k#sqUfFb4#4Krn{|b67Bk1*4f_$tIVm znOtI%U^=ak@tuMn6U>-UjtS;~U=9f8fM5;_=CEK63+9+$jtS(^T%ya% zI!OyYE%>zH#{@Gbm@&cJER+WXe?agD1pk2G4-5XV;13J_m|%_x=9pkKpOo&C(tT22 z!88e`NiYWlb3iZ$1anw0hXr$3FvkRQOfbg;Gv;T`V}9m5=4Z|a1am+z2Ly9iFoy+m zSTIci&eas)TulMa)hU=x!E_3yTjFWKr>!_s9uv$l!5kAxEhx1MO6`JDJHa#wrb#dd z1am+z2Ly9iFoy+mSTM%~b4)PD1mg~UlqC#_v>}l;#QdiVzEkj>g6|Z3S}qXp*$$zA;BLK{1L&tEFsnWz`Zl#u94CuJSgGO8ZPl@4VO5*mQy=w8PieA zm}P?Lm2gz>qk`Wfn1d1?68s^-(+;yBQ zDVU^SrVFM+Fdc$fCYVvdj0)zE#1BcFCJVR8%zr^=T{E);CN&Kk9k1Co5rr+NnWl8*y#E(k+sKoa-3QeQXNc@n*k4pTg#5<-k zO~+KG8I|~`#1BdQki;n|vL%_OL*gA0-!Jj~5OqY_UxF@3U$>ANM~E%E&l-!Ji_ z5O^lzr=s2J)uA6`kSlH zJ)3jH~rr8z0Y|&eHZyY?)$s1;D61(FYxog1HnHAweY_1+uciD8tlr&N$9u4sXyRnH7i)7LZZG)p>x2QU&V!hR zhH&d4jFacJIKPjR2RjI%wFrYDrfkzVtd@97h;z-AP?b0pkv-2M>q}lM|3&``qr^a zQit$#nu0KeyCXX8158CY6Q}QW9G*J`;Ve+;G#gYpT4)BscHBPE@q4Z_5v~N4PM08E z$NBwsgllm>M905~wE*GOxbvY?51oau7q>ceToOAM;TGJ~&}l0zMVO`K2>WqA13#0G zn;1H79bAZTh*lxI4xjvV+$XpM;coEO@q1gBBD@KAFLWA3IoM;Ss}Q~yrRj7FZA5r0 ze%({2+fcHOfA1y(eLMl1i_n?aL5bjQQ2^lzErf6}&OSuw9IU(}G)Idg?9i$a&c_*r z2yPYBAzY$OK{yL13?j5lo2ucy74*}Bx-CKdv$PYpYVN1Q^j+K{d7genzoGwwZL7F; zx^|}4rM2kS>mSs2yFTH1)b(A@bDsAb|BQbgKb^z|C1yM+$%#U#AH$!f(flz+X3 z>FxlY>FxlY>F&Vkd8WIAjtJdei{D=G1DfKRj&CCPrA2M2z%w+(XNIQu%+M5{8JglV zLsNWOkdMo2(G;I8nySwhP1SRYrs|os@L3C=1)k-~YO0=Djd!n!wpskPfgj7i4RSEu zHps#9Z-X2r?bXhudtK+z5AgiRbs^pt;(amR7vpW>T_DpOqSMS_JU8Jf$nzN9KQ>LF z`8D3Z0sOXkCoS}TkgoCGP5Znb0i8(!-^Z!R_Zi@BqCLLP;`umz(EoAz5T3o-w`e%< zaT*J3*4`J0X?wM;+J}SJ;`t@54Sx&xZ-M{Y)LT{1E{GSjouXHWj(>r0XSO$!UzRCk zxAbT7ZM}Vcv|{bnbbeqh5b438d}djCFx@tu&?35cU@*HqdwqH^o9nMkw|G^qcc?FO z4z1l?7|d*^i#J`H=^3Q$g`Ql#FT2U&)3$E+KxS2XOSXsBWU`yHnclAc!eF|;CqrGF zw000h6b7?B1zMUzN`9zkFqiMzKG0|JZCjJs+y};xql}_|bB>q+at)@ls3CPN-!X(5 zZR*Q(&$cr!&GlKC3)F>sz~DZVPxm>Lv@X4+Ko_OAX9@#p$iy6rV8^n|rlBp2Tb$2W&4X>KP1}~{@)-o%2eN&c{Mt-@XSOGUDqFIvOeLh$wJcj0$Q4*y)Mc^l zE$U%0+9f|YG_Vx^R^{}8akg|0O}7QH&1?GR!Y-Q0P1iA}edYo>FM}3I4`zDTW_Ao^ z(ArDV1#XsAneCfYO>OEqGv`;Xjb%V9hWdND=g_77*+DzY?3r_EW%~Nv;Aa&%f95<| z(Z@}>BA4Hu9vsAdZ<@}PSEi@P<}IY9LxsWI_Rc}v2;Vd`C_TX9F}r=v%-OVVXaMH3 zkd|cod%;8TWPp`#Hxvw?Eje!+*?G7xp6;_c3ySFD&c&^1v6~Hb43=1Tp=0*E`KW_x z5AJEXe$=HBQM;uvu1cXI#hi-RirgrlDL}Z6+4EV0B|v*AFsBrlT>@}H%5G7C1+xh% z=E&$n$sjC~$i&NtJ$v@chH zEfr`B45-|6IoqNliv{yhD5%8dZN3X?fA=AtH*#F#sG7V>5-Msw#W-ZtZT%(&R=3m0#;+IV-zTvYplT(-a1 z=w1DTxe{7XETW}p=+SQRxeMAA;_~d^*3SHvj=2kGO&IE|eg$Tk{AM_H9=|E3N3_MT&mZ9_(3<($@2eUh+U&7mE zdw5jo%kl`oKR8jqkOzHjWT#5%Cn$IT>q!sVeq$Z~`?o5^cJL^&s1C`#G~K@@lkR0< z@W1MRP$-Wk>{Cf8T1Z!B`nL>jrOttYOn&4@ReE3mKCY;fwYi~u z4-cpX87P(WTbl0cE3C^&+0tVysm5cKNav^fdoiM{8S2OM0nNr@S~#bif+cq3!Tajuf=HU+&HSPJn(0jt!P+ju$bbMC9d4* zTGG8YmMM$tP(saMS3&hisb9ISIJsP35NJZpv;A9PrGu2VM?c%h$5V2Lv2Cg8FKoxy7QiE|Nqa^g%4och^Wmu1si`q3MCGAJ{zEt&j9 zx&BKFnLN)!iu88kl6>wunZlePiIs+4QYg-Cx(ZV9i!#?0acVA0SxjW%%MgmMgU*X2 zpqG4{Ds5o#VdZoE;Sc%;H>>{EJrCA2m`|_E4Xnf%*mp5TwKN<~K~X6pr%#sUoJ$)w zO8t0()|cMRwx!%pFMA|$Gz_x`v|JKqj<&;*IWYSmJBfPWwnSVjukEB9f^qoDd?goK zZJDE6zNT368cg)E`OGEk0x>h_?d-t>v@o$@tZEe#x1k;-ubjF3@fu zk=bcBW^JdGHyx)q&37JLo;`F~D@Y!@(40W?%u_1GKHM7gM8Cx}8k9M9g_Tut35nH= zrOI`=&U_xdvuk-jhLOCr>MWN5ZJlFRX*I9qHCgC&Q0>L}i(r^i)$=jHUyP;t<}}6= zVmhl7PADH-6r=`Xk-(x{k?q5XME0o0tc&9r#8RV+j5{(tXFh7m&M~yUnky0Z2C$M` z$}@{nykwL~JEPS^o@4f8P8PiR3>H59(pQjFGIM82%WjmfvxF9)+!?Ohn!!$LX>Kh2 zHsy9%p2wQ*tVlzvTcF70+Xn`B%f5hs@Yk|lptU&|UeW7Xs)cr#x6}J%d=}BW3ZhIa zzGOGLq7`3_87h=xL-wT4f|p*rN=*?32Jhu+_!lL>O_zW+1t+b@=eCzml^APbxLy@~ z5hs-RBg=zdoQFZD``|Y)v)n$&6||IP8-wxzmiw|c0k}L_8@G+yhH2wcDo^?xm$Gzg zrf1tatiGWpX*;ew5boX9PkFY z>NgB@G4VKu873B1&PIsF7wQzRn$n&Cm$c=Y^mSGzQ+gP%X(UHZ=GEywm6k1B zJT%zR-afx#!(nZVu@w}m`O5f+sN+gft5qom$#!$&`$+{)jzKQhCwoWe4H+!ac$`xV z>{V};XYj)9vK(d+D$(JZEt!NXW9PxvilKN|<9QQ}(Q(T~mu#)EclTqs$As4@K=ELv zY}ghRuO^BsadLF4`hu;Y)wzOdW+%O@MXWBWnm{qOjC-6c78W13WFNq3dkZcZWJ!4= z-p46f*gL)R#H)Lo44XY=i+ubWOg;G4hSgiyQlB zWjotCcU@^tECgglC(aQH-I+m(YPme;!)%rNi0WV5acFHO-G_;+J$0j1yW6bQ4X+9@ z&+U~}o?SN2F|bo9gQIfgc?G}^^E^*k70Y7xe5i7Bc8lt9YQ=2NbKn8&UGIzg`*yF) zrF(hI;L516Q|6nTxq_8f*a>c%xW_Awo-IgrzQvT@Juk?mMqY;@R{1BjM_oy>HJL)L zZ>Q)>HBLfP50 zIu#~b?Q>{VdK-*SmQog8^~#ggSeXEot#}hYMZa5i@1hOIOQaOyxDGV~k%1Ne{AHJP z5pRocq3yV_b z?^e5(|AAw%7O3z7YNeL8SF9Cn%C=Ip_wiX&GzRXRc0ZSC!Gx{~iU}Syr-!hDy)2#QmFG|&?}lInn7JIQ4E5b*T^{>{_Vk3;1B6{s z-agIcvs+|d&C_ga$JFlNOLOqnC3_oNRA1&r2iH^_dL>*}K?KkC2o)4u0+vkEkl@S* zHp}-cYdp(=vv>`=B&_W$M4r; zYh3omxm|e&rd_JTvAIr6ZL%^>=5Ru{KvH2WgM<%}A`<%VOUQ@p-hde2;jewcuA8g+u$rKa{oBD3$9?!O(2p}f zefaN89NQYk(Un$85>*Z349E!1bPUsMyvfB6D9-A_8KRw(Lz`tlm!$&2e!zox7rAh%6>9-u*-N8)fRxb)(j(s;@=(y~bF z$61m-%%8WQR9f^-oJ)D0k6iuW&E-?54fD7j@MM`Oz>pO`>z#P6LH^Cch4XN2*Wv8c zfN(t(r)p-Q&I@r0hD?U=o_&#}=_G2!wPU?!$~2e;rVnY?2|qgbQlzq;Plv>+l}-n= zS)@&(?o7K0_2~n)A8*!Y0Wzdfj|^!uEYL?B9x(8nRUi(UDPaF1M8v(WpBo#=-3hlQIkBRO(LfB#qu$%+J7}tbCQ>>2%A@y z4bXM}czLV|mX`IxZImx5l`Z$A%H8&lm#f;>u6bVC_@v5Ok6+;vIg7oEd9mJDUrNJC zVEP5aA!h9exvv%V*@HT>B`N%=prNx*+_JXzmrE|z7xzoYqTAmocNfZ7hFsj%ELAVj zf)$W+2oTHGk2u?Xv2PbGmeWti`LqJUHqx#x&9`0bp8LG=7+m+A;F5=&In=Tjxfr+k zWVxdkp14n}6&WuR4Gtkri{2@RvfEDBI`_H){^J&d&fl>tm9wO*v)-w!6L_6VPbRP3 z`|Oro3jMML<sZ=N>ecY`L>8G8xiALVWou8VQ0}ME*$Tr*tV4>l^Xb% zb`eBoMHL5;0=lGX;x2Szd+5ie0p<@ZxH5Rv&}X9Xe(>QThXpAwqqj``XG}<4ik$r@ znN4sAT}chZXW#&7B|J;R1K}BETx~2*V(bC&Y)og8;K$Pi?wo+DS7Bgj!%=E>PquN; zj1@Tg%q|uixkz0rE{B!gDfxK1vI$%;^i?T0ZR?V7*%uCPbWACVL-v6@@+jXto`I?o zr*ZM@!Diy&YBKwzm6zMG)UPug&kWRPpsdDjK-{Lqf11h7n1j{Y^92f&c$Ws2N_kIK zNa+}XTLJU9FR3xnZsy`#gDp?Z_Sih^UW!=*{@(l-y?gGr2M>I5x$9<*llP0)Z@8>( z?$O(g>R3pNCA^QFyYZ&z&-`Zso~^~^`Koc3HgKdRXYUB>lsxY z>+*)9t74bbH`F&oFO99Qj$N%agzJMUF|CD>ImSRVQ;M1-s8tga8W|O9JzlaB(`O3R zJY9iV_1dmpbtRGe8=$97xjxGV0i7l9d9&sA%v zkFBo{Gc)AWnINu-KA4e_bZK6%H=>oDBFC9>quyo2s$EF}iLQaAJ4pi9gIL!aaU$I1 z*XltK#{GqGIP6JML#z(4&Xf(vRS%^C_8LhoHhO2+n{@H3z8?S92-dJ6% zA&fW(wdm+ayc#Y>@SiJ1UQddmqaTy-0N}7Y1u<%&s4KEb4?-T|QB=;$M&`roEBS-27n3a zN~edRQ}qWO>R!@giP-43!^kBH4{Ep&VE-9}juor6a4KIEOuy$5dqa&}tdEZM;ZnrqwN8=Ay+a=j;hncTNbKZd)^Pa#6eYsxb;a;7TSW^1bU!<~c zqgO>UW(w_@*6OFKUWA?kw^zZ(8PfZ7^d1>y3Oo|unacXTY&5Ua+(6hd!n z;O;h7jb6vS#%H46GgTBxz}HD{bdu+>itBhpWQTxQoPt)571BD>Z4p?n*gQLuG~kWP zN|&PMMOUHE>mtP>_O>4EKy<*&>V&i|y2>sY&V%)UQPQ7eS;El_?Xz>)0hWRR^uGHt?dtsk`5<5lF zWO9{&f@PpFILbpZbO&2z>qK9KA0L|?9h-;2FPec1^-9HKt+7_&7CzO4clWwuNyk1KzhI$_}JMrUIa4UZapYr^NUSTT(kTS2 zCb29wYp$!BQTrhq&rN;YD1vGx%oxW>APJ5zwm;TkG4Q&h2jmT1Z!&|@4BW~#b$NqK zY$7W|iS$;3G6Oa}^|qmP#Pdws_M~+t@;qMIC5>p4h~;`PfeMEM{^CsAZR)x{XJT1W zpi`=2_Kx&1^2C~8I`AM?Bh;T}dQeBHrc<*Dc6u%fg9ohCsY+BdUYlujtR^l?pT(AQ zVg|}i>QdL1O0!uo}KRfVT%}utTj1@kt)` zr;U1}tI=Hp#WF|svJP2X3$d{|nNE#xb{>o*gmw{kNr;<~Dy31wl5eb@7c5#lqL^~r zPUU&%*d;9U*d;M0g`f@$6H;)DT%3;o9h6CKUd4nbn_*Pf#|DRml(#{M5O}>|T;pa4 z1LW8xL3I1E^?6t!1ta|KrxS6rr(f-8}-~oAV*NW-1Q~W$$81I8A>8gvfkl6`BW=q&- znP=9PI+jI-?GrL=FUhc-Gi-Mvk_1nSK2UKf@SB60&` zk8_dWBb|lpp z%~`1dzgFRw7{uv~f&*Y5#ilQ8z-6TDpnYU%T`t#G*f3tGHe3St z$i+&Zb2!RS)o^n)BI+nj@qT)Yw`%Mn)L}@YN6th>`2dEqEyR%v9hN7&@?PmU;RIf8 zJ``l&mLqP0#3r7MjGs60G~=pwUwj2_?yIiuo?V5rGNs2HyWV{f<2V`W0+XB7>m5YE z3iLt_MiiF3`*Lg+rga!?vMQ*p!fDDt2`*9TK-)=Ix70`~9=CMi;#a8brw$TaX}-yp z8yf7iE_xQK8M!(=C|BnkY!wbi;dHeF>xIDtsyX3c@VgVY5+{H0Y_DG(|K!ug{^DU~ zHy=li7wog)B{a^-?t;F3lQs|nd#96}e7lw@w2TE?{`iA{=bx;(jAuKZQOG$C$_K{7 z<;Mt@zN=Eoc?3(3UPmXKLR|5#ikQGAyoC?OIfqQ&o#5p>Ox_B|%>=J~GS(+GflU^o zOIIqSb8NC6Z6xOgaa?l38PZGMRUJ>n(QEsB_om&08LxdtwYs#m9ohWFBl4lLyNafD z&sn^U!UpSz|yJfO`8io2Y|;d`w1F<@$P>ZIw-mO z?*pg~U3%?ny473w+~N2unN{PiPq}bg%&X3mcF&HFyOYBgtAk6_4MaJRXfTk;hsu6I zBvA4TB2};qbsJw@X$+N}Zmd(s7b{$5k3-mTg%=Fy9v3(b<=VX!r9qm5UDdlRNFrga@Yl(z48u$k0WAm>&Kl-z?ity8 z+=CAww|!ST#O%0V%O|ergp1jUNd|iIHO@*DP7sEVadcJE>|>$78}>aViRu26#~{FVpe0g2QC0v ztQ*CiL2xNlm9vo!Q0y4iD9@vwAA~BQ!1FP=f$NiyQ`zgNOSwVBoJ+a>;-y^fSq@%U zh+|dbh0Q`xA`|A;>Nly-;6VpqIr7fEL1t+s;VKsU!IGQ1oLB^v^m6&Q8VQb7IrnG- zCHH6%cka=Kx(X%tXsZB~-lGLvc8`{2D7iQrn|P0Q(iXIJr8}~IPEa?b4D}MnQtT;i zz9!3hwk(gEPv1VsZo=x;&P-5v;hrGud;Ww^&g0yE8<#s_aEO$uoI71`z-kb-QwLx} z4BIIX1ULU25LZwEiVL-wF}W9bxijR!WtX9hhaL7VHX8M_3%JSZb8fOS8viS^V*q&- zz}DYYeyufTm*O;TA+Sa2CO<x_97mY2EyaC%AvKU& z_f}F4a&u46s1PYKyA;!f8=8Y_?HHQT7Fi zY6nw#haza{T`VN17%MxmOR;59*ea`@b~8j3T;iRpRiEV+E4glJ^vSQ$cn2&6HJtD_ zr96eqj_%ohix>_sSo#A~+GYh>KQDC}G<_0xMlE}nRh;@Y1OENFs&RL9f~8k^v|J4o zKYn7;F>l_~claF@4_~^OE#VxWGupWs>&f%)hrq#Q3qDL6l>3YFa8>sEO_6NLn9e^N zf|-!~Y)EY-iExeH=iJw>NP+v>9vJ|tD_*V&+I@&=40XB6YhSLa8h6EZ>Hoq?0Ed%s zZp!7-Ox;}RGFOgOAy|cHEuO3JT#sk;Rt|o^!7n-ZErPLW9DD6z@)+j-*WR_q*HzT{ zGxy#!X`7_!Nt#ES*UdXkn@5|zLZIoB$7w^MEwwGQg;GnQyh`x`u4M*MR4O1MP%*{_ zU0k$TSfPm4*SaimTT~RmRa*q52tHVJcX8L>y_^A}yew z{inlq21i}&#DPemOZoRQopc5Nmv-vk{{wz z_ZyU9zx*9p*Q-2j6;P0xB2b@953b}xZ~+$3$iG4VXg%FQjgkMvNs|kUrj)p)W#yGs zGpcLq>XQwPP0cN>ZS6BVW_5OT&*_~vf5E~$V3B;j}_r$p=sh6NPvUbfT`TF3ARNuZfG8h)YgN;fPi! zuqsCm+Sx^P(#NEaO$EJ)`m*{~Hgx)!$P*$Fz;N(>X^o+SvT@>NVwy-K%aV<3Fiu?L zg)qt(Lx@Tu1P}rY(e!}0%0#j$Im@RjQ6;8}L~~hlH5&oC!kAS-x_rEJ`SNCnYLRGj z+p5?w{E3C=njx^b%3R6h&V*XLE;})^Y-Sr9l-fb5mibPjgS1TKgqj@zsMDHBN5k8L?kMF}J*@P@KC%W3YX8QC^nun{l6Fp@;wQMkM zp@_Zx7?_0;ax;Kqo`yw}ppxTbWeZNj)yWIRqH!QCJT+2bpExZODTcMP7&XX1X$9V) z4v8RY1g$(y#oMIO(y5VByU!H3q5-i)B<7UO>1KnAI)(XD5&(6?fMMZsfqQZRqoY_n zuyA<-Z#G@z7hK@dC5JT&Tp*tF-zp@Z z8iT6wQ?f%R#~1=f6v3ph&i4W2t=Ri7JZvVZVIz)GVkd`~#+n;S8XuwyqyVtqtEsI? zI%3ePX|3sDj-VzGYs$F*sV%OpW&`^nNIG2kAceA8BAm3OP;F4Mk~K(HS6o-YhDnxx z%4Ac|L$dmk`bsuTGTmWNZuEbiz}5~BO-#+s*F7HqbBgBFvJn^ML~g~~j|~u&(6$Vb zO);)XEhTRC7WdY$L8{b^Veb>tv;0=_4+urRfc9svd~hINR5L#tf$8%T;&`FgTie?q zL=!iwi>xfyP}W<#-p<}7(P3M?-sQdLSpEaGY#Yexcl#^Zh~rQP`tcA2-1Zs`ceY{s z07O+>B5+$RT-yb1&V{YjE^mqvmr@16PcxF#TEY>Rc>PuVjY#12&+T7?1YZBL{?(4S z)a&2Sza>D>v~3`0z#XV$g9*xFN(M=Ep=h3{r~Kgh(?~cUG(-VZT@HXV-7~A%FaV7q zfXgia2+uCc^xXhB%RQ@{4FjNCl$IGGc8exT8P%cyIpZn-c&=B+h5>Lx6kKHi_!jX@ zW>#MffK~3QIyNE!t{xMh<{AL3c2_sE!2r#=0S2gW#5D{e#2(R1m8rWO))ic@j@aX^ zZdvW?HWaOvfCt^dW;O^IBH)VL;4yI>`V9h)&IF3|I&ZLLa4uywIB#$uAX9aFk=eQK zx$SIdHpIkij5tH3*lSp!gQ9A*{ssW8ao5aXBTcnv4guZ3K-m-%ceI!=wQH)^v=g;! zI@Zh&P@B9FnXJuQ>#`9SEv!f77a%2_+)5mAqgBLw%eJj`ir_d6*~wc)MMm;A5F*5T zL@RSt_%PfUK^y@!?#rZuyRlXjHb~1pL0~a)v(Yg=XrQo^3y-w`+mr1)mgYRLqOVFW8$1P+SITet(dl{<7`->iFf5slqKJ<^8a4draaorwTJuf+dV zanX)Jek~ep3r8@2cBR+nH>tq z16nfJQ@3m4EC#;vV<50j?#IyJ61Zl|{R^lEmiy0?`!PI__rkeB?!O4m`{2A(?njp= z?}u}b-2ZOsoaKJ`QG7oR?*sJXYxq7B;OR^X^5h+^ykokt3{N`)1qM$)Zh49ZoXyh? z`2fM(>B>6+!3y`5h*4_FvTc{a=}`3Zu#*Om9qFjh3oC&q-CEr$r^K3Cq?YOH9O zp)p}PXQ~Gy9mNbs;;|?Jc$ z@LVGgY=QH$aPE}{&~uRZ9FXtDcYi=mx~ZXh@&Q*qkTe$aqKdQ6Ap1ck8$x5r){$(D zQ}YHr4>ZUJXsUr)Eh&*6d62RgcI9xLv6xR2j5ZB(syoc7gPi4rbbIvkwuA8Tu&mpX zh$l{Jd&Bi|xJgqx+$o1KGDqVZK3fjsxs13syipEgv`X9?evcfMx4;ed4Wp3_OFT*X zWt$@(qOv{g%7?3s6<}XRSssdHpHG`%-@`TXVf4Fx7IWq2D2qd`JOpWFi`j=cKL}b+ zm|dUaEMgJt5*VZDhKWG{@!-%5d5Ah3)YzeBz``tR9_H!ILZNxYD)E3 zoqP;hRek}W7`mY``B~1FhbYU(UHLfVkS#8ieiY5f@{mT>1GW%;BlpG3W|6{wetEFa-4GaIX) zo2i#4tL2lydRZhNr7VuP@<`HHTq@gGwL-IMZEm=fIE0VFjM-SfNKp_;=GJc*8fZZ^ zjrB-_Jko*`p9VeM^2ll2SdZWbrZwajVQ-d4@N7zr^~ja-$R0S+R*$?#9+B@4RDU1Q z>dB{YHU`ztR)BdKC3!58c|K)^c~8~Lr|_aLU&2n4k5d*;yYlIJV+FFvkg&%ivmgd) zKwaXelk(}H2=vRtl*Lh39z`kG;`-6rAR~*zoJFKI@bfY4=4ibG^ruw-e>TIv>dIFE&lbT$Xv0%0;ViNzDtN?3&)_WXX#Cd!twp}dlPmJodGghP zKub7>rdQ-IaTKWCSeh|`DHfaIDW+IZ0*|Ix_)RhAZEIE@jK0v`ac_9$A;rI{f4rYqlsf?~^{R0L3R zO(t2rzGfeR{LYoX1BcjR5Sp?Hj=uKsldBL>Q#L~W1CmzB-(d>gSD)v}rwI5hSH6Xc zW{ZF^_mAlnp&u+VdX1;J65@ej>puz<97Xqs`z*MAKN3d>#;|Wy%eU&`d>YO+`PNL` zyS%kPzO^(!(D`x{1gQj0ku@7jvx_l<)ra(>Mjmun6!X{8a*E2sNw4X~GRzNZi!ql} zAPDQ^w+W@7L=}`9%hE&>M}g@RR98e-xBh$~{|Nw-%GIP+V;M4nG9bkHqMXu;^h_WL zHLbYmr?U(26zQqLB2`#pthj?yji{^al^W5_(^}nP9#3m6CJ;NVg~8f|0H{@kSZg(|$!RxEPgAiqb%yRLF; zjTIO3XyQm$>S7Xg6jOdr@X!qhe6x57n0Lr$38vIlrKnN12nKA($6s(+Nbe%huqfKI z3_C&CrXjy?=7us?W8@F4-bMaqdWb538x1&Dk8EeC(pq4CAI@e~3Q@iUt{zp&<6TvX zA2i9qlVY?RMYLCRcJ27a)`{Lp=nej4?Oe~yU&^XOs(_}1$){lOA{mEy{j~L!8btG*qp}Mq&0~0Qy^&?g5DlFh? zOQVVTtU0aNU2cGA5+q}=3Xm=G$AnVns=6v;85FI5EsFfHg~=WQ0cNZG3BlC6svg42 zRy52{#)R1>e@ZY(S0w?%7QtjM%?3&car`NR<_X&Z#v}NFB~s`fh<d8%a~P(|;g5u|E$RcpJk zG-CoINSom)Mvy4MP8va~HdnRHFjl$*BG_siG0qXBYO7Y*!il9i)z+ih{1GHFyNriw zs@+xXXyt5a(uE$XS?L;Us0Nr_+`o1dsSeQ07Iv`c{?%Vy5{(fJjn#2dEa0wo3Dl3@ z)#h_o+fl7LK)F2OsaZ8@Rx6xe^wjJcH5<+?p6aYoo!#*Ku&26eR2MwAdaAodbz^#L zwx@b(RF6OL1Nh73i^SYsSM|;^R$MHgzH}is`6ae5eNiiNAr@w7HNadUUm}=!uA0|q zECZwa2Mq(VUa~NLw}1j_4GWmvI|*gJtLCFUv87QoQvw7z;uQM@0EYX+0JgwY3p$Nu zNYc9(EJLRT$B=fsu)(Hjped&by!0FbM><5=XXMGz^r3`k?3NJ5OU z`2Zl-Y$HngT-8@;ECR`)scqr5@qUKfihAs=ELu zeXCX923FI37puO@0+o3!tLc7M^+QdwWlF8pv}N5GY8s{9!)h8Y;W!-krcr_vtLde# zS_+lNR=Na6Os_CWGYN=M!OMBE(Uri&k8?>5U=Bj0AQ*3F{jhfauVVFC{6E$FN zlrK}OTJEal&|7R7n66OMlrP(jL0DSI7}NpgCi!!MIonldgBrFBOju0i&#n5)ej)+P zyX7wk<{Vd@lQfor(PLG=P`|J+$tY_6il0#k~T$JNM^p^-8P=hOS1iyyhRcbKDQ!YB@!L4d= zk1Ye}xS8AD`K~%2ZI7+ESj6=D`sIo;ge95e4PYvovYS?v1}O_Eyor{zHV`{<(P18;SO)TtJb4Auw`I)HAYyN z%Pk77#mQ(?gz{ebYoca@t2UrHuw`KKxp7(;`D=^g&v2re^`L@qZk4|wob9gK4szJa zgJ$@x0890*VG?cZ2V%L&({h8YL7{y?NP%trwb%|Ck}FQ4w*b-l<%4JeD~$Z3OnxS` z?HSvD)b<*+y#>w>!r7{}cjpkM4Z^~7v24m4IN{FE`u@a24O!S*2voC^i zyh)rGmTFX~S(;&~*(xwHiIP`D2ZM?7DkY_g4wi2rT;7WB zP*8MklYbyS4!LRwT9B;>J{pbAdfjJCh-JCCG&EBUVV4zgX=sreTA{f#bfy~0#RhO` z=mIsAOC0_K!Q0f(J9CutKM{PH8oDYv7+e~fmxX{~OMg>fnYPr2G$pH>rbH z=Lmiq!F$xfeL*@usG##aHR7s~T4RN3GgNnUVhSB}bX(95d|b9>OfhDtRoena>eL7+ zhZD$bwi=;o#nHT{Vh&Wh)PBQyCqTuT&z~m%vnJtyZkbT-*wELeLwd zZEBQ60bCoMuSN$n*G8A9Q7@W!aBXz88r>EhN;3_km#ER*(ZS%_=v8WTZ*(ZQHu^3# zDrIyqv29e|g71fde7jv?1=CZU#a3L*jR~SV8xHcPCLmgy`YtA9(vo?H$|scP zT=iU+u`oJ9zXBxc#G{cWB5JpK4x_m=(w%A&A-&+L7ix`_mlqGpcp~^CFZg3Z@JD{| zM?9X0C-4tD4~K!{iTp$&lO`X^Cd_5iI8aRnadqm2`XKFhsY0UtgsV<~cDC|j1r{dZ z;5EI$A0Vb6F_Dc-TKq)TtApJU^m}D9=}1^~yqHkyPj-rF0-PN+eV>w@$b$rc@h}+edPUQVaA?X;fu+O= zxPgif)?pW!2BZfRtX5)SO*rN}9i@m9m8&TZon8zau=4|uQ34Wrj#%wrBu1>GY1e7z zYA;y!*d2z)6bY6+QFk8u;82|P0S!!rWe@$vBL;shdx$m69-61kch)*yPjOETGPUKv z(FA0));XVG^$|KG!3S%!Q313@YpR3tD=^>4{0f}S4j-`-bnOlP`EVz(F1l+)l)#}l z=GkV;Onu6Z>%|Z7RS^TheGJcr z()L4yW}S)Kp;N=sXMaTfPVECr`{)70W!e{(iPvzs_JL)58qseNC9sT79Ah`~fn|JL z41&l9mi4(t`&>gC@Ngs!LsPIJ-}=&?hwuR?^nZi^OC#t<`5UzF4Z--L8SR8lV^D4C zW=V2DC%)+$DF+jsn;bq|L?O=zIMp<7-PCpMCJO>r z<=(nk>*kP;Xi*ia!dsVES46*%1dsTRs`SVN5(B4y(i-o zCx!?Udzn;;R5&&qU@gRhGpyxG3))Nln8JC~1o^be{L)H@x-}95! z6At5vLmJj|n3QhL^DGbAXb);mn2lYv@}Lbki2k0^6HNArm~Q!yjrdRqp<8~=27Hb* z1rR8ljygPS10D{g=)nO2!<^3tQqXMDAsYaPE+Ok@SB}_#kw6OCw*QC?cqEj^9NaKx z@_00(Tv=P;V_=A{JQmo!;kq5>j{UA$^9&p9(S~S z%rDN}CA_#7g;%f_C2yZC{#FI@!~6X~B#3Og?3kK9%648T%baZ7>`fSxX|1HG$59 zO-7H)Z|k@YIc(foj4FgEM>mUZI7WvE(?f#E(1Y}i>;We`STVugIojbTCI|XJjPH5y zoZg|A*1Jb-kB1!ujtp(R(@LEp=#I(X>X$3^cg()NfbQnh)OX<#R&N;$Cl2aMJgQrzO@St(TN|o_TN`JJMPAxcmNCRDL}k-AQosuxc^m@Hdu#A69>^tPLLTVp zObfWbFD5Nz#}P@hAJH-Sl->@b<(tB_e4nuUYr=`+*$*Q?!X%g8Vv`ZszV8H4FaxBw z=7gg#rDzU%TTezmWJB^05$=^NP+iX3?oErHj; z@sc=5uxSZ-wk2R{lb5ywy7(lw1nOQ$$S`}!tJfJ3bW`xx$kP%?sp&!0QT3i$Q=ry> zIDhm`fgx3%^l(dCtV?JAYS-Lrn?Si6FG@7}zIL)PDSM#P? zwP_}~v2AEmhuYLb?iRS`s7?Mv>}r6=k*$0KRBkI)+p5GAO{EZnf+q`F?PLLV*{~Xg zg-@~k4Rh!XNB*V&a~zZG1SZXX(&JsrIG4>Q@syNRi2AXZO&YJiY4dnf_vj(eQ!O3; z-X{J%9yb4Mi?DyNx%?qA7t%IpOlpeET6IP®JmfS{wNOqm=gR^68wP~`@%#KjCi6r zo|qC(lq4`-wt2vjhx_qMV#Uh4Uuh-NJ=M#r$sJY44r*8*0E2ANGzpH)M47 zHYNuPv2l!GXhAL?iin~@QA4*HFVcrRmk`SXNi?FsqrPzPQULu-1eJiU0>ds5Py0=< zsndYK(8x4CgD%25f@2uS2vP9J;;lDN{o$lOyibrxo&th#F=))e`kg3v;-(8PsOtUM z2hF=Wal1D{qSFx}zy|9;GrdHVZ9_^a{XjLw1XMiKKH^f5OAUqeGQ$k71bM~EqnJ*9 z+P`A#;L1f2T(_xOzO2{2)ZW?_uC}+@ezkt}-fR15`~R)A&p9)b3`qUo z=-Fqlwbx#I?X}ll`*HRjR$ci4auJam&)@$}^d-FcuS3EU2ct+1PyI@mp78y!=}X$m zA2zMqnk^&;^0_Vf^!8*=y1zd+nB0^}=7;)|+5Y6Ri`OQ%=Xx`3p^$&N#d`H}qLrG9 z-u@T8+d|P%3O5BbFHuq>(iQf;a}iG>-hnqu$8n^w-27+1X%y*J9v5|Zh$8ZT@oj-B z8!Z9f^;W#%t6QUB#e{c2CW%l3=g$lHd!<0i5pZ_v?h(N5=0<(kelxl`KFgs01WN!>eV9>+6vCF)nmk?u ziaLi@^{3E={^o*#&~Kql!~-?KmK~<|0pPWeF9%)wTd(%ze0ay*QMck*b0?T-IX{r8 z$BB%%$H)Z$%&aojCg_l%(HK}9po8_z5tI6jnSuNnU|vXo?s_9&rm7K1xZIwwyHJDZ-x4_p?}vW9H2Y-o zO4hKaEHm=8<+nM-G}hb+^=i#+`ENV8$w>nptC`m5xk)Im)yTtn3^eCM8bahpdvg_$ zrw$k;?(yRD^%{uJ9$^EBO6XhO>|&t`oHEw3m3=Hm3ibVdUQ*%WTR zinqFITeKQvxH5k!m)!_H%&bMvC8dBX^F53Q+j4w-mPt3G9B4Yq92e~ZP~%snww|vK za_NB@fAY(_7u;tK!_?eCZ>!gvn+8rO(x~5LOzOGfiYpX_%N&Mi?iARy6qAf*eUK#% z)ml`(VLwwrTV+(Jz#Kh=I{I_YztRwc>_5>JfRPh7ucWTUrx9ay^0MSL!rYV2xFUxM@gL;$C;u zlv+f+^7>mMg>Kmb!kT6m6j}2(joU9i%T1rg8=RH=_ptn|=sQ{VfLS7{-xczefI-9C zp0y-D%aYvfQj&Y3ZY8*qKZRCe!QD!5CI2|V4VMz!M7>!1miUkxO;b^B^esZ2qPDtQ z{knm^HkF%(ZS68Wg)V8p>v5aI>#@3kM?YW$`#-^)>CkbxY{w!%Gw^Kh$PfPn{2YCl zBPuh>wqc7c73tx^6g@{2GtjfHyWsqw4CuPh3f?1d6>dE@lZ#>Z3}3{8!sD&ZVv89zQgc8x0*~a@YyTD>nT!aUldjeO79VDy_6#%C z&Ws4EWU^-3IWaB&OQ%ZQCIMOi9{e|vR3Bz8mOBm`VKeM4%tZl(c?e)?^YLn?_f*Qr zbq57_v-?Cj9?Ihl!;4lTw;GJSS!=V?T&xJVvzRw;>O6X}U8H2-QgKj%p&nBHiakqi zAqva~#!(Y(u2d+i7{XQ3Q586-5#l&`**1~4zXIPxf@cOs^Ia9vT#1@Q;RsUEul?Mw zMK@l$0&mo|l5SjX&humBNum3-_>B|>W`Ao7kF*?-RbXA{UaDC8$QPkdS&Fqj-qd3BjwdTa}b$3kZ4n`ol`=<&z z&UHd!7hB&FL@L{-(12p8P$>I6^SCm*3jc{>b$6+P%A}s6q$WCUo4=yuhO4sL+(WyM zTV5D5PxOcu_@A>JLkxQoJQZW)XNpK8k%B2Q@)VbCvaZ5wCl(jx$x24~$CdYWB`;j9 zC9grWn3ie)TC>X2Ub|AoM9ezkQM6zLr=khu-3MP3_n?wWGbwxN$pIUKw4{KvEa53>Vq~x;wm0OEXUzd7Xg{Cw~>pcUXqE z+$v;kbxmr~YHPZaye8?^hk3xONnOND;h0-mT{SJ9B=~f6gFkvsOY@qE40$SmIq`%s z;(rxi$%nq;807KGuaNIqZk!Yp!~;h~zs@F3?AuVa3bMFbPjL;wRb#&1T5AM!89_}6Q)|GBC(1l&X1nzgmk%FSfsb2c z+bChX;hvi8ZqeL+mr?L=|B=oV^cJudGjxyPO08uh=8h!eO~9ji(`lyFkqnRY@8k3$ zv$=v@)Z8h(y7HI|SC1jdUn!qHj0$m^Rp6-)Lqye{9=Zc{N4rH`g(|5MPdHQSxE^r- zE$-Z99L2(@B?WK9J3HieAum>Xh0W|0DK0$t- zQ?Gzr{HN!x1ij3o;R<;k4LNuo4e>CQ^o(HD$y3S^$cQ&D@rMw@%+gxpCjmhZnE!JQ ztdn1Nti3INipRG6_$(J;%pr6`>;W)S>;bS5r>|D*sG1c6SwADr z#1e1IU+t6!dAK6HUg3H{uJ=1>Cs@C8ZJhOcTfW$H!&4*8f7NpvY-ODWLMZDLetAZk z_=QEssq*%WoGx!;WV*b~5iG2sq_+GIN@QpQAx zI~|~5S-8F|+R4_J1$OGo`xX91)%Urr@I-6<*2ak5;xW)a{TPf;23NS*kJ-SAylG;V zU9!VP1U+4C>j|d8dP?yN3Yx)hPfZF2&@$2@NY9Ns@lK(YT1K$EgPyRD!VyOebNOkkWtyS8BL4iE-c!dMw~&kR0` z@llN#ykWHw9Q~eFuP4=wSc~Vz>%cD%_Q2qGAqIo@$fj0McNwNPk-)mfC_n({BRs$H=}|$Vl=cs5|Zsn=@zV`C6#lCHskP><^@Rz}T1SW%i!bUhqg| zxC&>6&A2D3q>dY9xuQmDGf0k`m+S3Hv}_7{CP<*?o1D_0g|Al{EEl6z_SsIY$+v*i zok%27AAnQ`Q3Wlv1?84V88^+DEm0Fw(FLGYQ?95fP9g4v?!rbQ>XrHw(D#gHGwzF; zt!G5dxIgN*$f7JVyBmUWnkfqhWWg7^gpMS!sY*H8mzi zwAMHCH$%q!F&1WK-T{3%g*<3dR;VzTW(Fk4QPA#$FnyTn|qB`Ph^v9?@*N}yu}#FB|F z&=b7kJX>Kg=M?*P^ZbD@?TjW0+qho3QRu^4`Iw1mm=#N!NiQQGWR2=WI;;lMj3}0_ zt`z)W3rax*2HJ@v5Htw#8y055R&%L5{ zeeD%-BWl!~f%&i=HR5K}ypsvz-ncLBuZahvCMW~ZKr}d~De8>|UA58R6~gNv(?x?| z5R3++f!ZtDe;xHleK0Fayd7L{{x#T%a*X-kdO4a0TFsFPh{Z$Ekg|84+kX&szyKPx zKRdW`7-sz`xJIm3a_~j|ng?d1*nn>2{~O$La7zA>nXm#qAN0|{NE=5Ba6bN#GdLRc z6dp$Vq5r~XwuE%kS9laK?{}o&DqG?n?;so@=tky&-j{>N!RG;dCm7}k)G;y(c(zmc zUFP15F&NFQHDBq<&qtB6>(y%N!$OC#U`?&ercSLZTXcDMYTsBJ7Lf@k6Uy2sAz-w{0T-dT&A7&<^&iucDd9iA>vK)h7Or-9Bdi;8=6y!2eFlB%0 zZYwax7Q!edHS3d<90`%52Hz4Cg6p$a39#ISxLv$~c#DDm^cJ0G;b=du0QP1@B6QP( z(kR$_-G`!3+qs;Kz29MuSm{u)>c+fB`yoZgmeNcY>BAf;JOnPF;<2tduc!W5(ac8@ zG`E0Xo)OeQY>0g^+wJOZMhTN|TqGs&o*{-dUe{y4Sbd5!^3Oy4&8h>UH~kA|JlDv56z@Rl zb6{`E&PnSuBY%ty@?Ip!7r3BTFZuKqp_Yer*b>wN?_)=}e-u8(sL40p$1lk8ad}@^ zo7#_v>i1mOsFD%igbpwPY&FXLiFE_xmA}FlA|vH9_XVI^+jIq>fw8%i`x0KY?X~F2BBc4C4pR_8 zYnxlX)ADV-u7pFX1(N6q#o9_p2r;j*r(pcJ5kg`b5=~%Q%na++FV|RZu7cijjY2MW zTPS|Bm%xmSTD&cj#aATo31DKOWu+wozX}d+f}laKA8|5ITX-jbM8@)~RX47OELsFC zF_XG*69plF_UMUA_Djj`+U8p2r?{ceAACHQmcLRh+uPvWhD94)!C82&&yfl?iV+9t zJjNDnlyQ!Ye&4b=%SO*Hqn{==!Z^o9pSI{N8|^BiS2oHx$3~xF`X9qaF8~%cdLh3& zBP;m@8(k%D&&WmcHbySycga}er(dGJ(?t%Z8E30OB(_v7+=th~_i^wL0+=foW}EA? zkU(MdVJ;Q}0t->xPf>;|lGG|eh8a+XyI5C1iQzW3pK8jI&th~M8+Z)1ER`^&4lv^{ zw|o&6B{*SWo3RvRB_xDc_7%t5F=w1$$BaA~J04$ZS#j^mj!#tbcsu4s6u&+Nt-*h` z`la!u5$q2%az@}QP+)VjOT0oOe`PKk6J9|3jjm>v#CCKEVz8q%{PK*fc4QLFfY4I#(M(g>j&23bLUtw#F{H5_NnyiWi0o4b_3^)Uv0A;Pu1Dr@>JUE#LIF`s6;3Ppf*v%`f>r{?}5W_Q!Z(q(fp?w*7GVMFQ z%(BAXRr{W(sjrpT#=~U$4W_AV8=G6Y7v2Oq_zht{%-l@=KMo;boqc8WYEI2KXHNY$rnl=l zN7c1u z235VVcX5Kfh$!oBNb;VLF2Qs=ZMtu;{b6q-gl;QynE-5%{|dECcb!dlz@m#zpqtEe zyKK6B$K}_+bi0KPy0qH%dV!s~GHBHmG>5YRms0XYa6V-u`W*jy}aC^c9pk0#RUfH}cCf z0#7MEcU0bN1;YZ?JkI7B>TU_-)|v;=wk>%$9X6*_M8Nm>H^*^7Ys{6}}eIheD+U3>Dxf zgx?3QwI0JsDd7*w2A3Q>Aa3A@~b_;^wMEUv#L(h`*24KMG( zs-0NbOJ@b3?~8Eo-25R$&E;=H0`zn{zdR%V#4n7=?~}J@FxI@Cnf7SrYX^z ziG(1YFbfi0$ogG4%<=0M!h!Jk%ths%W*tarwW^e12GpRuU01*lL4&V0yfJO4wV%i} z$;!Zh$^e5CfJgBFhG-Gn6sge`KSMhSMu_Y|n=>rrTL@6BN@W33t&kL(T_Ty4kPt@J zeDA}k!>On@?{#su$t8PTo`rC3XnDq;sBv0bCSjLeZ<$^}u!+KyNl{_2A1vDhQ+r^O zDLt(Az@B+$al)_{-mf=!C(POl;|7;8KY|+ZpK3PeJ6kixvuB`f^ss;9mwN;Ye4fnn zxHBL0GsHF+nfeg|9H>a@!%XVR{TN|DALcYO^%I1tpK=t(F@A{Bn=H zpz!6q8Ck-cNgdvtR+;ybwHGYW_;ecn*i3iMZJX8BKC6B9BF1>A58;z%5}g81#s^jR zOhtU{U_RTw1%n*X!&ee5^8!=*PqE29iskegrUdC^F8$n;(n<)P;xhyYO(|Ux)`P zBiJqe?3x)=KurvKj*cLFL*fZd(+pauF@BH6`27-o4WXY*{U}nK^ghIABJQVA!Q7*B z>Jj}>-A_M4XwWgx7&OVn92UAb-XZZ-60VbQ*tOYZ(5*=I(}OO~^?kvQxTRc#e)_uS zQN2K)gA+4op23uF8(hj&=A-(}bTRyhK_4)g|3l_|ra`|pIai&RY33m`=q4|x-sfff zWZ$EDnCAKzbBB*hx!S+PZ_wTT0>Z=oM-l!?!oNs3E5Nx50p|7|2_Hciw)FO9K-0of zx}WkvF6*u!bNB&5H~khjTwWu5Zbo>SwAToURy$zwC{-yRPYNXoko;t>SY_hxBPoI$R{q@}X zZ`HGG7dCKxzthOp!usUD9y}gpT}h&SsK0{t13GBk_d!DfdIFFS)@jgKGA5exAfBN2 zKuIF~% zP#wNrV+R7z2LUyJBj(b8J_D!;qZDQiO+-Hc|`^cJe_`64i%b(HW9$G|?3G^2W`kX*+ z7niVz{#Ei-q5Dpzv*?QgwE}9S#q;d3UqoKMdPbT*(i_?2gc%LRb^ zbOHTX(k=xwA7_7GkhES&yM%rr5O4jQNte?xp}bWnH{d=Z%W@Z>bLeV%MbaLUv`y$O zoc08uC9tU1CG9Cm+e-f<(9Z!)qb&VZpx*;J4JV%866kF}&9sgFCQud3t&P34#rtLrd>2ypx*%srPBK3$KCsw{N?4*wz= z##K~?l7QCG4K!V2Eu9UhiALyjNxK}-WO@(!3{&m^bQ!FAwm>&XzCAQo^6drWr}xqV zfj%YBZRk&&@B4tRq&sP;K)(QV4ZWY1uKAmJ_v_eyxT!{@5dJ%R~9=fA9GU9k-q^!sXV&9|%Xg#P0=i_P5J)g1aH zTnhS;nrYx;w*|NR!J35_S)XX^M7VxxX-jeHlQp*jzj5jZ5f2j|1w%7^b+K153SEpr`0n^CgVdFF4R^ z82u+rW6Gx}=X*=9qUjcNz^A*as8vDU&-%Q87Fy6DUl>q_1>I`irB%@t7WAU;20+~w z^hbgE6a-h3K)ziLG}#rQJr>mLpXQ3uJ`2j=Zb*#o5y%Bi?9dXlU!WQ~C2*cAK@SUb z3oQ-Yuhr0(thBX(jH`wYS!vx!tEHzcXj|ZMKrae(v-ios7@#)R_{bGEG0#hUU4a(D?$f)E{@(Q@233&=-TB zbT`sg3pyOUOKYS7hw>4mjaq5H58j|nrP~BzD>&OTmF}_9m`jpAWkJj(Nndg(&+{bd zyH*-=X`&aLG`G=2vrcC@Z>Ck@EY|TW1$xT6BYZoq+V?4lt`C0`&|_BGqryB2g^RnS~Wf3l#bt9s2v zw2l`qu)%QTUrfwbET}H>DYJvOd?amJe96d!}k6i3sOOctJc!_4m8=dj<#A5_o~b2HVfijbs2q1LEb?4 zlkO|%hy`)Ky@KRY58C!;(fPhBX!;qdgdd>iTtTZXXmxNN^4()W?~l}b*VFV_it_(O zkC+>%!-BY1ZJ-ST-R!N34f;0FE`bjFCdVE}+CG&=1F>%!8>n?Qb77l5?CYgbfu8aj z@f);j={5yXZTuzQwY1NITH~+#257$p{n+&SchDgVS{nEI^K{gLR>$$P2J|}xdEvqQ z1^R;pJ!Rgn73fV1>WMSt<|Q<=I}m>j>&}RRMDx37k_EBOc2UxT*w^i%Rx2O3$}U>y zK$Bg&X_*Cas|?dR3*uH8rfvm^=0~VkAlAfE{|Ftl(tZ=)?%zX?S^3Z)EGJV1+itBT@up!!q6Pt!pQ`cCyPf}f)& zEGSu19r^-IU!W*w)?6C;I<2&z>{weLTpywwYF@Hw)TF~UW9oo-mzXi>!TT=BiI%q*(sM}ff0=;QL zp2>@={++zo0V6uBoj>_zKoJG`zBze+)h{SzLG@GiSG`Cb7G=+rPgebsRtm(e`PHgl zQJ+97^vCLdS#^y5U_sxk-=X~ny=g(;t-l{oJ$Bl#+R~q|f2Ha_Xu1WxQvXLla|Pnj zSBv}yEwj>IH3N~CXhTWb%hczj#UsBVKFErFGUS^T`7P~t(pE=ap`!xDX;Q<+$g6~< zH~!+@8yoJA{2%fvh`!hG1wc1g(CZC9j{K4KSWtCiee^ZD!-84`+9yzS(&EO9@ftlW zkecbdMo$Q|LVwk~2Kk;Wq5Kp5)Sqy-wPy*niW*PTGyJ|DmUyv=7DJq!*pE*JFR7w*=z$n;QQswVuPJ zbNgKv|2w^9LEL_%-E*!=UhoX@gGMwAgHIpOdyKHb*>6*N!-8ABxS@e(I#X9-F7V;iT=*=4)>`X`heJ*MciqY9-kMZMr~Qhje0rwpbul zhecYillDyXOl{Cf`&INTZI6@oc670}&qyPmuS-kVp+B(mTC)~v>nJUm#VZhHW|gDQjJ+MFdisU!_fV(!LY9NSo`VeIs$PHt3}7(AH`wTK1r zd}+NlNgx+W*a0Xh5ZB?F=z1+Bkdoy}t)qnUO6`1yGF*M7wyuQoDy^@C@+xi6p?o%R zl{Q*Jxk0-}Ag*XE>QLE`%x-$BL$KT!o*P_+7&7!Fta1 zDTEq*O+v=Qk2P>u8h=PyJO(^}S1Qu90i)Adf?p!Jo|90~uv8kpcW`)PBZs$1c&CJS zOL&ij_euDGgrAo1Q3+MK%2zxAj2rv^+-jvVzdN4XBFZzk@dbf-GH3px#BwTaG?&P5 zGV~`SE%VW+l=F#e_m9#m&i|-RR4y({C-#}Pg#Rd?QfZYn{!VoGM}#_YTv@4GELNj8 zBvsj4Xc0g-Z`C3KQ=$1HEFM!pF!&D=Hm$8GQWV(<^3A?@Gdat zeM*~wyua3>!ubfj5KI5RGn?kkS`0J z`s-CUnO(X_Lj3h)2Jsh;8N^>UW)SbP*Mt9%eu@5x$opK=q3uWXsQz^1a&N2l^GKg} zuJ&@|A%uU7JmKxsKWu)-JA?ilxnEnXp^1I#^{Qyxm)7rz&h+{4ed}?w$ji~Qe9I*D z4Z0+@2;8oT-Qb%c-(VK$TVuETR*JMMMcUb-jddEg+9HW}S|P7HHVD2~!rS%M>TIA_ zIQL2TG#07kTPN`&5+9WKM^N7n2Kyw}poI8l1x@Zj_-g152|J;;+kFT0w`$gh59mg1 zR>Iw39|dY}5WBh~{Auvnp?yz(1pA$T(GJ&sH~bgvh1!2Z7^rLgA&f5 zy>+Xq7SVlmYpV|EkJVjO^{{B~VbR_`?SqrwSM`MU#mUclp3uTmp7nIm*QYG0x`ci* zWrx;9zrfyQ7ri-UC&Ezu;;QvD1z{JRQGYYyOY4uA>uF{EbKx%9P`@9TZS{8{*9hXT zi<}A3+mlk_lTu>6V5UphD&fM3WvoK2DL8+7wJLmaBv_R)Rs05AzamXJ;KWyZ$g-E+=Fmi$De;vOUnlW(65k;4H^dHmC4NNva^vi{&-IhW`?a^U7aJGpS>o?V zQT-=Vmd5*pW>CT#B-|t69TM)7@LmbsI)8&-CUp<$Y;OkzpHSMim6uuFl`u7wc^8Pf9J8>1>&cb?)QKq^u`}ex=Z_ z6nZay^(O81;$Ro$hWcBrN5Y#W+(REl>H|0{!{LS6neGRGztnwD@GsF- z+P}JA68tOl6HvZ_Q&AkgL}$V~sgUuS#(0-@m8N-I8uRgKjQ0uNCzMTA$oM9~&k&j! zR-CzY3QecrI|bi`9fl!ymteXClNOq^VA6u=(YRh&P~PIs3O+0NF`*n2%$Q(q7RuW} z`6u`7g1=qx4+#F#Qr4#h|7pR0OYq+l&fgRK_XPiv_JC`P{*t7=BHUh))K?_crQhs^ zHguM1DZ)3aMs=?BsLop2um7H|a2*oNA;EkLH1CTX1-{SqlElfy^yFgtq{NdF?~r(h z#JeRvD&c+!4@r1b!k1iJF1eXc(h8Ydhr~PF9PgHRx5P&!J}U8>-JEy7VD<~4NVNe23tB1m9$^B{Uh# zp~+wlor38UOs8PFjGJ+aG%fhF;M0O16U>-k#sqUfFb4#4Krn{|b67Bk1*4f_$tIVm znOtI%U^=ak@tuMn6U>-UjtS;~U=9f8fM5;_=CEK63+9+$jtS(^T%ya% zI!OyYE%>zH#{@Gbm@&cJER+WXe?agD1pk2G4-5XV;13J_m|%_x=9pkKpOo&C(tT22 z!88e`NiYWlb3iZ$1anw0hXr$3FvkRQOfbg;Gv;T`V}9m5=4Z|a1am+z2Ly9iFoy+m zSTIci&eas)TulMa)hU=x!E_3yTjFWKr>!_s9uv$l!5kAxEhx1MO6`JDJHa#wrb#dd z1am+z2Ly9iFoy+mSTM%~b4)PD1mg~UlqC#_v>}l;#QdiVzEkj>g6|Z3S}qXp*$$zA;BLK{1L&tEFsnWz`Zl#u94CuJSgGO8ZPl@4VO5*mQy=w8PieA zm}P?Lm2gz>qk`Wfn1d1?68s^-(+;yBQ zDVU^SrVFM+Fdc$fCYVvdj0)zE#1BcFCJVR8%zr^=T{E);CN&Kk9k1Co5rr+NnWl8*y#E(k+sKoa-3QeQXNc@n*k4pTg#5<-k zO~+KG8I|~`#1BdQki;n|vL%_OL*gA0-!Jj~5OqY_UxF@3U$>ANM~E%E&l-!Ji_ z5O^lzr=s2J)uA6`kSlH zJ)3jH~rr8z0Y|&eHZyY?)$s1;D61(FYxog1HnHAweY_1+uciD8tlr&N$9u4sXyRnH7i)7LZZG)p>x2QU&V!hR zhH&d4jFacJIKPjR2RjI%wFrYDrfkzVtd@97h;z-AP?b0pkv-2M>q}lM|3&``qr^a zQit$#nu0KeyCXX8158CY6Q}QW9G*J`;Ve+;G#gYpT4)BscHBPE@q4Z_5v~N4PM08E z$NBwsgllm>M905~wE*GOxbvY?51oau7q>ceToOAM;TGJ~&}l0zMVO`K2>WqA13#0G zn;1H79bAZTh*lxI4xjvV+$XpM;coEO@q1gBBD@KAFLWA3IoM;Ss}Q~yrRj7FZA5r0 ze%({2+fcHOfA1y(eLMl1i_n?aL5bjQQ2^lzErf6}&OSuw9IU(}G)Idg?9i$a&c_*r z2yPYBAzY$OK{yL13?j5lo2ucy74*}Bx-CKdv$PYpYVN1Q^j+K{d7genzoGwwZL7F; zx^|}4rM2kS>mSs2yFTH1)b(A@bDsAb|BQbgKb^z|C1yM+$%#U#AH$!f(flz+X3 z>FxlY>FxlY>F&Vkd8WIAjtJdei{D=G1DfKRj&CCPrA2M2z%w+(XNIQu%+M5{8JglV zLsNWOkdMo2(G;I8nySwhP1SRYrs|os@L3C=1)k-~YO0=Djd!n!wpskPfgj7i4RSEu zHps#9Z-X2r?bXhudtK+z5AgiRbs^pt;(amR7vpW>T_DpOqSMS_JU8Jf$nzN9KQ>LF z`8D3Z0sOXkCoS}TkgoCGP5Znb0i8(!-^Z!R_Zi@BqCLLP;`umz(EoAz5T3o-w`e%< zaT*J3*4`J0X?wM;+J}SJ;`t@54Sx&xZ-M{Y)LT{1E{GSjouXHWj(>r0XSO$!UzRCk zxAbT7ZM}Vcv|{bnbbeqh5b438d}djCFx@tu&?35cU@*HqdwqH^o9nMkw|G^qcc?FO z4z1l?7|d*^i#J`H=^3Q$g`Ql#FT2U&)3$E+KxS2XOSXsBWU`yHnclAc!eF|;CqrGF zw000h6b7?B1zMUzN`9zkFqiMzKG0|JZCjJs+y};xql}_|bB>q+at)@ls3CPN-!X(5 zZR*Q(&$cr!&GlKC3)F>sz~DZVPxm>Lv@X4+Ko_OAX9@#p$iy6rV8^n|rlBp2Tb$2W&4X>KP1}~{@)-o%2eN&c{Mt-@XSOGUDqFIvOeLh$wJcj0$Q4*y)Mc^l zE$U%0+9f|YG_Vx^R^{}8akg|0O}7QH&1?GR!Y-Q0P1iA}edYo>FM}3I4`zDTW_Ao^ z(ArDV1#XsAneCfYO>OEqGv`;Xjb%V9hWdND=g_77*+DzY?3r_EW%~Nv;Aa&%f95<| z(Z@}>BA4Hu9vsAdZ<@}PSEi@P<}IY9LxsWI_Rc}v2;Vd`C_TX9F}r=v%-OVVXaMH3 zkd|cod%;8TWPp`#Hxvw?Eje!+*?G7xp6;_c3ySFD&c&^1v6~Hb43=1Tp=0*E`KW_x z5AJEXe$=HBQM;uvu1cXI#hi-RirgrlDL}Z6+4EV0B|v*AFsBrlT>@}H%5G7C1+xh% z=E&$n$sjC~$i&NtJ$v@chH zEfr`B45-|6IoqNliv{yhD5%8dZN3X?fA=AtH*#F#sG7V>5-Msw#W-ZtZT%(&R=3m0#;+IV-zTvYplT(-a1 z=w1DTxe{7XETW}p=+SQRxeMAA;_~d^*3SHvj=2kGO&IE|eg$Tk{AM_H9=|E3N3_MT&mZ9_(3<($@2eUh+U&7mE zdw5jo%kl`oKR8jqkOzHjWT#5%Cn$IT>q!sVeq$Z~`?o5^cJL^&s1C`#G~K@@lkR0< z@W1MRP$-Wk>{Cf8T1Z!B`nL>jrOttYOn&4@ReE3mKCY;fwYi~u z4-cpX87P(WTbl0cE3C^&+0tVysm5cKNav^fdoiM{8S2OM0nNr@S~#bif+cq3!Tajuf=HU+&HSPJn(0jt!P+ju$bbMC9d4* zTGG8YmMM$tP(saMS3&hisb9ISIJsP35NJZpv;A9PrGu2VM?c%h$5V2Lv2Cg8FKoxy7QiE|Nqa^g%4och^Wmu1si`q3MCGAJ{zEt&j9 zx&BKFnLN)!iu88kl6>wunZlePiIs+4QYg-Cx(ZV9i!#?0acVA0SxjW%%MgmMgU*X2 zpqG4{Ds5o#VdZoE;Sc%;H>>{EJrCA2m`|_E4Xnf%*mp5TwKN<~K~X6pr%#sUoJ$)w zO8t0()|cMRwx!%pFMA|$Gz_x`v|JKqj<&;*IWYSmJBfPWwnSVjukEB9f^qoDd?goK zZJDE6zNT368cg)E`OGEk0x>h_?d-t>v@o$@tZEe#x1k;-ubjF3@fu zk=bcBW^JdGHyx)q&37JLo;`F~D@Y!@(40W?%u_1GKHM7gM8Cx}8k9M9g_Tut35nH= zrOI`=&U_xdvuk-jhLOCr>MWN5ZJlFRX*I9qHCgC&Q0>L}i(r^i)$=jHUyP;t<}}6= zVmhl7PADH-6r=`Xk-(x{k?q5XME0o0tc&9r#8RV+j5{(tXFh7m&M~yUnky0Z2C$M` z$}@{nykwL~JEPS^o@4f8P8PiR3>H59(pQjFGIM82%WjmfvxF9)+!?Ohn!!$LX>Kh2 zHsy9%p2wQ*tVlzvTcF70+Xn`B%f5hs@Yk|lptU&|UeW7Xs)cr#x6}J%d=}BW3ZhIa zzGOGLq7`3_87h=xL-wT4f|p*rN=*?32Jhu+_!lL>O_zW+1t+b@=eCzml^APbxLy@~ z5hs-RBg=zdoQFZD``|Y)v)n$&6||IP8-wxzmiw|c0k}L_8@G+yhH2wcDo^?xm$Gzg zrf1tatiGWpX*;ew5boX9PkFY z>NgB@G4VKu873B1&PIsF7wQzRn$n&Cm$c=Y^mSGzQ+gP%X(UHZ=GEywm6k1B zJT%zR-afx#!(nZVu@w}m`O5f+sN+gft5qom$#!$&`$+{)jzKQhCwoWe4H+!ac$`xV z>{V};XYj)9vK(d+D$(JZEt!NXW9PxvilKN|<9QQ}(Q(T~mu#)EclTqs$As4@K=ELv zY}ghRuO^BsadLF4`hu;Y)wzOdW+%O@MXWBWnm{qOjC-6c78W13WFNq3dkZcZWJ!4= z-p46f*gL)R#H)Lo44XY=i+ubWOg;G4hSgiyQlB zWjotCcU@^tECgglC(aQH-I+m(YPme;!)%rNi0WV5acFHO-G_;+J$0j1yW6bQ4X+9@ z&+U~}o?SN2F|bo9gQIfgc?G}^^E^*k70Y7xe5i7Bc8lt9YQ=2NbKn8&UGIzg`*yF) zrF(hI;L516Q|6nTxq_8f*a>c%xW_Awo-IgrzQvT@Juk?mMqY;@R{1BjM_oy>HJL)L zZ>Q)>HBLfP50 zIu#~b?Q>{VdK-*SmQog8^~#ggSeXEot#}hYMZa5i@1hOIOQaOyxDGV~k%1Ne{AHJP z5pRocq3yV_b z?^e5(|AAw%7O3z7YNeL8SF9Cn%C=Ip_wiX&GzRXRc0ZSC!Gx{~iU}Syr-!hDy)2#QmFG|&?}lInn7JIQ4E5b*T^{>{_Vk3;1B6{s z-agIcvs+|d&C_ga$JFlNOLOqnC3_oNRA1&r2iH^_dL>*}K?KkC2o)4u0+vkEkl@S* zHp}-cYdp(=vv>`=B&_W$M4r; zYh3omxm|e&rd_JTvAIr6ZL%^>=5Ru{KvH2WgM<%}A`<%VOUQ@p-hde2;jewcuA8g+u$rKa{oBD3$9?!O(2p}f zefaN89NQYk(Un$85>*Z349E!1bPUsMyvfB6D9-A_8KRw(Lz`tlm!$&2e!zox7rAh%6>9-u*-N8)fRxb)(j(s;@=(y~bF z$61m-%%8WQR9f^-oJ)D0k6iuW&E-?54fD7j@MM`Oz>pO`>z#P6LH^Cch4XN2*Wv8c zfN(t(r)p-Q&I@r0hD?U=o_&#}=_G2!wPU?!$~2e;rVnY?2|qgbQlzq;Plv>+l}-n= zS)@&(?o7K0_2~n)A8*!Y0Wzdfj|^!uEYL?B9x(8nRUi(UDPaF1M8v(WpBo#=-3hlQIkBRO(LfB#qu$%+J7}tbCQ>>2%A@y z4bXM}czLV|mX`IxZImx5l`Z$A%H8&lm#f;>u6bVC_@v5Ok6+;vIg7oEd9mJDUrNJC zVEP5aA!h9exvv%V*@HT>B`N%=prNx*+_JXzmrE|z7xzoYqTAmocNfZ7hFsj%ELAVj zf)$W+2oTHGk2u?Xv2PbGmeWti`LqJUHqx#x&9`0bp8LG=7+m+A;F5=&In=Tjxfr+k zWVxdkp14n}6&WuR4Gtkri{2@RvfEDBI`_H){^J&d&fl>tm9wO*v)-w!6L_6VPbRP3 z`|Oro3jMML<sZ=N>ecY`L>8G8xiALVWou8VQ0}ME*$Tr*tV4>l^Xb% zb`eBoMHL5;0=lGX;x2Szd+5ie0p<@ZxH5Rv&}X9Xe(>QThXpAwqqj``XG}<4ik$r@ znN4sAT}chZXW#&7B|J;R1K}BETx~2*V(bC&Y)og8;K$Pi?wo+DS7Bgj!%=E>PquN; zj1@Tg%q|uixkz0rE{B!gDfxK1vI$%;^i?T0ZR?V7*%uCPbWACVL-v6@@+jXto`I?o zr*ZM@!Diy&YBKwzm6zMG)UPug&kWRPpsdDjK-{Lqf11h7n1j{Y^92f&c$Ws2N_kIK zNa+}XTLJU9FR3xnZsy`#gDp?Z_Sih^UW!=*{@(rI5x$9<*llP0)Z@8>( z?$O(g>R3pNCA^QFyYZ&z&-`Zso~^~^`Koc3HgKdRXYUB>lsxY z>+*)9t74bbH`F&oFO99Qj$N%agzJMUF|CD>ImSRVQ;M1-s8tga8W|O9JzlaB(`O3R zJY9iV_1dmpbtRGe8=$97xjxGV0i7l9d9&sA%v zkFBo{Gc)AWnINu-KA4e_bZK6%H=>oDBFC9>quyo2s$EF}iLQaAJ4pi9gIL!aaU$I1 z*XltK#{GqGIP6JML#z(4&Xf(vRS%^C_8LhoHhO2+n{@H3z8?S92-dJ6% zA&fW(wdm+ayc#Y>@SiJ1UQddmqaTy-0N}7Y1u<%&s4KEb4?-T|QB=;$M&`roEBS-27n3a zN~edRQ}qWO>R!@giP-43!^kBH4{Ep&VE-9}juor6a4KIEOuy$5dqa&}tdEZM;ZnrqwN8=Ay+a=j;hncTNbKZd)^Pa#6eYsxb;a;7TSW^1bU!<~c zqgO>UW(w_@*6OFKUWA?kw^zZ(8PfZ7^d1>y3Oo|unacXTY&5Ua+(6hd!n z;O;h7jb6vS#%H46GgTBxz}HD{bdu+>itBhpWQTxQoPt)571BD>Z4p?n*gQLuG~kWP zN|&PMMOUHE>mtP>_O>4EKy<*&>V&i|y2>sY&V%)UQPQ7eS;El_?Xz>)0hWRR^uGHt?dtsk`5<5lF zWO9{&f@PpFILbpZbO&2z>qK9KA0L|?9h-;2FPec1^-9HKt+7_&7CzO4clWwuNyk1KzhI$_}JMrUIa4UZapYr^NUSTT(kTS2 zCb29wYp$!BQTrhq&rN;YD1vGx%oxW>APJ5zwm;TkG4Q&h2jmT1Z!&|@4BW~#b$NqK zY$7W|iS$;3G6Oa}^|qmP#Pdws_M~+t@;qMIC5>p4h~;`PfeMEM{^CsAZR)x{XJT1W zpi`=2_Kx&1^2C~8I`AM?Bh;T}dQeBHrc<*Dc6u%fg9ohCsY+BdUYlujtR^l?pT(AQ zVg|}i>QdL1O0!uo}KRfVT%}utTj1@kt)` zr;U1}tI=Hp#WF|svJP2X3$d{|nNE#xb{>o*gmw{kNr;<~Dy31wl5eb@7c5#lqL^~r zPUU&%*d;9U*d;M0g`f@$6H;)DT%3;o9h6CKUd4nbn_*Pf#|DRml(#{M5O}>|T;pa4 z1LW8xL3I1E^?6t!1ta|KrxS6rr(f-8}-~oAV*NW-1Q~W$$81I8A>8gvfkl6`BW=q&- znP=9PI+jI-?GrL=FUhc-Gi-Mvk_1nSK2UKf@SB60&` zk8_dWBb|lpp z%~`1dzgFRw7{uv~f&*Y5#ilQ8z-6TDpnYU%T`t#G*f3tGHe3St z$i+&Zb2!RS)o^n)BI+nj@qT)Yw`%Mn)L}@YN6th>`2dEqEyR%v9hN7&@?PmU;RIf8 zJ``l&mLqP0#3r7MjGs60G~=pwUwj2_?yIiuo?V5rGNs2HyWV{f<2V`W0+XB7>m5YE z3iLt_MiiF3`*Lg+rga!?vMQ*p!fDDt2`*9TK-)=Ix70`~9=CMi;#a8brw$TaX}-yp z8yf7iE_xQK8M!(=C|BnkY!wbi;dHeF>xIDtsyX3c@VgVY5+{H0Y_DG(|K!ug{^DU~ zHy=li7wog)B{a^-?t;F3lQs|nd#96}e7lw@w2TE?{`iA{=bx;(jAuKZQOG$C$_K{7 z<;Mt@zN=Eoc?3(3UPmXKLR|5#ikQGAyoC?OIfqQ&o#5p>Ox_B|%>=J~GS(+GflU^o zOIIqSb8NC6Z6xOgaa?l38PZGMRUJ>n(QEsB_om&08LxdtwYs#m9ohWFBl4lLyNafD z&sn^U!UpSz|yJfO`8io2Y|;d`w1F<@$P>ZIw-mO z?*pg~U3%?ny473w+~N2unN{PiPq}bg%&X3mcF&HFyOYBgtAk6_4MaJRXfTk;hsu6I zBvA4TB2};qbsJw@X$+N}Zmd(s7b{$5k3-mTg%=Fy9v3(b<=VX!r9qm5UDdlRNFrga@Yl(z48u$k0WAm>&Kl-z?ity8 z+=CAww|!ST#O%0V%O|ergp1jUNd|iIHO@*DP7sEVadcJE>|>$78}>aViRu26#~{FVpe0g2QC0v ztQ*CiL2xNlm9vo!Q0y4iD9@vwAA~BQ!1FP=f$NiyQ`zgNOSwVBoJ+a>;-y^fSq@%U zh+|dbh0Q`xA`|A;>Nly-;6VpqIr7fEL1t+s;VKsU!IGQ1oLB^v^m6&Q8VQb7IrnG- zCHH6%cka=Kx(X%tXsZB~-lGLvc8`{2D7iQrn|P0Q(iXIJr8}~IPEa?b4D}MnQtT;i zz9!3hwk(gEPv1VsZo=x;&P-5v;hrGud;Ww^&g0yE8<#s_aEO$uoI71`z-kb-QwLx} z4BIIX1ULU25LZwEiVL-wF}W9bxijR!WtX9hhaL7VHX8M_3%JSZb8fOS8viS^V*q&- zz}DYYeyufTm*O;TA+Sa2CO<x_97mY2EyaC%AvKU& z_f}F4a&u46s1PYKyA;!f8=8Y_?HHQT7Fi zY6nw#haza{T`VN17%MxmOR;59*ea`@b~8j3T;iRpRiEV+E4glJ^vSQ$cn2&6HJtD_ zr96eqj_%ohix>_sSo#A~+GYh>KQDC}G<_0xMlE}nRh;@Y1OENFs&RL9f~8k^v|J4o zKYn7;F>l_~claF@4_~^OE#VxWGupWs>&f%)hrq#Q3qDL6l>3YFa8>sEO_6NLn9e^N zf|-!~Y)EY-iExeH=iJw>NP+v>9vJ|tD_*V&+I@&=40XB6YhSLa8h6EZ>Hoq?0Ed%s zZp!7-Ox;}RGFOgOAy|cHEuO3JT#sk;Rt|o^!7n-ZErPLW9DD6z@)+j-*WR_q*HzT{ zGxy#!X`7_!Nt#ES*UdXkn@5|zLZIoB$7w^MEwwGQg;GnQyh`x`u4M*MR4O1MP%*{_ zU0k$TSfPm4*SaimTT~RmRa*q52tHVJcX8L>y_^A}yew z{inlq21i}&#DPemOZoRQopc5Nmv-vk{{wz z_ZyU9zx*9p*Q-2j6;P0xB2b@953b}xZ~+$3$iG4VXg%FQjgkMvNs|kUrj)p)W#yGs zGpcLq>XQwPP0cN>ZS6BVW_5OT&*_~vf5E~$V3B;j}_r$p=sh6NPvUbfT`TF3ARNuZfG8h)YgN;fPi! zuqsCm+Sx^P(#NEaO$EJ)`m*{~Hgx)!$P*$Fz;N(>X^o+SvT@>NVwy-K%aV<3Fiu?L zg)qt(Lx@Tu1P}rY(e!}0%0#j$Im@RjQ6;8}L~~hlH5&oC!kAS-x_rEJ`SNCnYLRGj z+p5?w{E3C=njx^b%3R6h&V*XLE;})^Y-Sr9l-fb5mibPjgS1TKgqj@zsMDHBN5k8L?kMF}J*@P@KC%W3YX8QC^nun{l6Fp@;wQMkM zp@_Zx7?_0;ax;Kqo`yw}ppxTbWeZNj)yWIRqH!QCJT+2bpExZODTcMP7&XX1X$9V) z4v8RY1g$(y#oMIO(y5VByU!H3q5-i)B<7UO>1KnAI)(XD5&(6?fMMZsfqQZRqoY_n zuyA<-Z#G@z7hK@dC5JT&Tp*tF-zp@Z z8iT6wQ?f%R#~1=f6v3ph&i4W2t=Ri7JZvVZVIz)GVkd`~#+n;S8XuwyqyVtqtEsI? zI%3ePX|3sDj-VzGYs$F*sV%OpW&`^nNIG2kAceA8BAm3OP;F4Mk~K(HS6o-YhDnxx z%4Ac|L$dmk`bsuTGTmWNZuEbiz}5~BO-#+s*F7HqbBgBFvJn^ML~g~~j|~u&(6$Vb zO);)XEhTRC7WdY$L8{b^Veb>tv;0=_4+urRfc9svd~hINR5L#tf$8%T;&`FgTie?q zL=!iwi>xfyP}W<#-p<}7(P3M?-sQdLSpEaGY#Yexcl#^Zh~rQP`tcA2-1Zs`ceY{s z07O+>B5+$RT-yb1&V{YjE^mqvmr@16PcxF#TEY>Rc>PuVjY#12&+T7?1YZBL{?(4S z)a&2Sza>D>v~3`0z#XV$g9*xFN(M=Ep=h3{r~Kgh(?~cUG(-VZT@HXV-7~A%FaV7q zfXgia2+uCc^xXhB%RQ@{4FjNCl$IGGc8exT8P%cyIpZn-c&=B+h5>Lx6kKHi_!jX@ zW>#MffK~3QIyNE!t{xMh<{AL3c2_sE!2r#=0S2gW#5D{e#2(R1m8rWO))ic@j@aX^ zZdvW?HWaOvfCt^dW;O^IBH)VL;4yI>`V9h)&IF3|I&ZLLa4uywIB#$uAX9aFk=eQK zx$SIdHpIkij5tH3*lSp!gQ9A*{ssW8ao5aXBTcnv4guZ3K-m-%ceI!=wQH)^v=g;! zI@Zh&P@B9FnXJuQ>#`9SEv!f77a%2_+)5mAqgBLw%eJj`ir_d6*~wc)MMm;A5F*5T zL@RSt_%PfUK^y@!?#rZuyRlXjHb~1pL0~a)v(Yg=XrQo^3y-w`+mr1)mgYRLqOVFW8$1P+SITet(dl{<7`->iFf5slqKJ<^8a4draaorwTJuf+dV zanX)Jek~ep3r8@2cBR+nH>tq z16nfJQ@3m4EC#;vV<50j?#IyJ61Zl|{R^lEmiy0?`!PI__rkeB?!O4m`{2A(?njp= z?}u}b-2ZOsoaKJ`QG7oR?*sJXYxq7B;OR^X^5h+^ykokt3{N`)1qM$)Zh49ZoXyh? z`2fM(>B>6+!3y`5h*4_FvTc{a=}`3Zu#*Om9qFjh3oC&q-CEr$r^K3Cq?YOH9O zp)p}PXQ~Gy9mNbs;;|?Jc$ z@LVGgY=QH$aPE}{&~uRZ9FXtDcYi=mx~ZXh@&Q*qkTe$aqKdQ6Ap1ck8$x5r){$(D zQ}YHr4>ZUJXsUr)Eh&*6d62RgcI9xLv6xR2j5ZB(syoc7gPi4rbbIvkwuA8Tu&mpX zh$l{Jd&Bi|xJgqx+$o1KGDqVZK3fjsxs13syipEgv`X9?evcfMx4;ed4Wp3_OFT*X zWt$@(qOv{g%7?3s6<}XRSssdHpHG`%-@`TXVf4Fx7IWq2D2qd`JOpWFi`j=cKL}b+ zm|dUaEMgJt5*VZDhKWG{@!-%5d5Ah3)YzeBz``tR9_H!ILZNxYD)E3 zoqP;hRek}W7`mY``B~1FhbYU(UHLfVkS#8ieiY5f@{mT>1GW%;BlpG3W|6{wetEFa-4GaIX) zo2i#4tL2lydRZhNr7VuP@<`HHTq@gGwL-IMZEm=fIE0VFjM-SfNKp_;=GJc*8fZZ^ zjrB-_Jko*`p9VeM^2ll2SdZWbrZwajVQ-d4@N7zr^~ja-$R0S+R*$?#9+B@4RDU1Q z>dB{YHU`ztR)BdKC3!58c|K)^c~8~Lr|_aLU&2n4k5d*;yYlIJV+FFvkg&%ivmgd) zKwaXelk(}H2=vRtl*Lh39z`kG;`-6rAR~*zoJFKI@bfY4=4ibG^ruw-e>TIv>dIFE&lbT$Xv0%0;ViNzDtN?3&)_WXX#Cd!twp}dlPmJodGghP zKub7>rdQ-IaTKWCSeh|`DHfaIDW+IZ0*|Ix_)RhAZEIE@jK0v`ac_9$A;rI{f4rYqlsf?~^{R0L3R zO(t2rzGfeR{LYoX1BcjR5Sp?Hj=uKsldBL>Q#L~W1CmzB-(d>gSD)v}rwI5hSH6Xc zW{ZF^_mAlnp&u+VdX1;J65@ej>puz<97Xqs`z*MAKN3d>#;|Wy%eU&`d>YO+`PNL` zyS%kPzO^(!(D`x{1gQj0ku@7jvx_l<)ra(>Mjmun6!X{8a*E2sNw4X~GRzNZi!ql} zAPDQ^w+W@7L=}`9%hE&>M}g@RR98e-xBh$~{|Nw-%GIP+V;M4nG9bkHqMXu;^h_WL zHLbYmr?U(26zQqLB2`#pthj?yji{^al^W5_(^}nP9#3m6CJ;NVg~8f|0H{@kSZg(|$!RxEPgAiqb%yRLF; zjTIO3XyQm$>S7Xg6jOdr@X!qhe6x57n0Lr$38vIlrKnN12nKA($6s(+Nbe%huqfKI z3_C&CrXjy?=7us?W8@F4-bMaqdWb538x1&Dk8EeC(pq4CAI@e~3Q@iUt{zp&<6TvX zA2i9qlVY?RMYLCRcJ27a)`{Lp=nej4?Oe~yU&^XOs(_}1$){lOA{mEy{j~L!8btG*qp}Mq&0~0Qy^&?g5DlFh? zOQVVTtU0aNU2cGA5+q}=3Xm=G$AnVns=6v;85FI5EsFfHg~=WQ0cNZG3BlC6svg42 zRy52{#)R1>e@ZY(S0w?%7QtjM%?3&car`NR<_X&Z#v}NFB~s`fh<d8%a~P(|;g5u|E$RcpJk zG-CoINSom)Mvy4MP8va~HdnRHFjl$*BG_siG0qXBYO7Y*!il9i)z+ih{1GHFyNriw zs@+xXXyt5a(uE$XS?L;Us0Nr_+`o1dsSeQ07Iv`c{?%Vy5{(fJjn#2dEa0wo3Dl3@ z)#h_o+fl7LK)F2OsaZ8@Rx6xe^wjJcH5<+?p6aYoo!#*Ku&26eR2MwAdaAodbz^#L zwx@b(RF6OL1Nh73i^SYsSM|;^R$MHgzH}is`6ae5eNiiNAr@w7HNadUUm}=!uA0|q zECZwa2Mq(VUa~NLw}1j_4GWmvI|*gJtLCFUv87QoQvw7z;uQM@0EYX+0JgwY3p$Nu zNYc9(EJLRT$B=fsu)(Hjped&by!0FbM><5=XXMGz^r3`k?3NJ5OU z`2Zl-Y$HngT-8@;ECR`)scqr5@qUKfihAs=ELu zeXCX923FI37puO@0+o3!tLc7M^+QdwWlF8pv}N5GY8s{9!)h8Y;W!-krcr_vtLde# zS_+lNR=Na6Os_CWGYN=M!OMBE(Uri&k8?>5U=Bj0AQ*3F{jhfauVVFC{6E$FN zlrK}OTJEal&|7R7n66OMlrP(jL0DSI7}NpgCi!!MIonldgBrFBOju0i&#n5)ej)+P zyX7wk<{Vd@lQfor(PLG=P`|J+$tY_6il0#k~T$JNM^p^-8P=hOS1iyyhRcbKDQ!YB@!L4d= zk1Ye}xS8AD`K~%2ZI7+ESj6=D`sIo;ge95e4PYvovYS?v1}O_Eyor{zHV`{<(P18;SO)TtJb4Auw`I)HAYyN z%Pk77#mQ(?gz{ebYoca@t2UrHuw`KKxp7(;`D=^g&v2re^`L@qZk4|wob9gK4szJa zgJ$@x0890*VG?cZ2V%L&({h8YL7{y?NP%trwb%|Ck}FQ4w*b-l<%4JeD~$Z3OnxS` z?HSvD)b<*+y#>w>!r7{}cjpkM4Z^~7v24m4IN{FE`u@a24O!S*2voC^i zyh)rGmTFX~S(;&~*(xwHiIP`D2ZM?7DkY_g4wi2rT;7WB zP*8MklYbyS4!LRwT9B;>J{pbAdfjJCh-JCCG&EBUVV4zgX=sreTA{f#bfy~0#RhO` z=mIsAOC0_K!Q0f(J9CutKM{PH8oDYv7+e~fmxX{~OMg>fnYPr2G$pH>rbH z=Lmiq!F$xfeL*@usG##aHR7s~T4RN3GgNnUVhSB}bX(95d|b9>OfhDtRoena>eL7+ zhZD$bwi=;o#nHT{Vh&Wh)PBQyCqTuT&z~m%vnJtyZkbT-*wELeLwd zZEBQ60bCoMuSN$n*G8A9Q7@W!aBXz88r>EhN;3_km#ER*(ZS%_=v8WTZ*(ZQHu^3# zDrIyqv29e|g71fde7jv?1=CZU#a3L*jR~SV8xHcPCLmgy`YtA9(vo?H$|scP zT=iU+u`oJ9zXBxc#G{cWB5JpK4x_m=(w%A&A-&+L7ix`_mlqGpcp~^CFZg3Z@JD{| zM?9X0C-4tD4~K!{iTp$&lO`X^Cd_5iI8aRnadqm2`XKFhsY0UtgsV<~cDC|j1r{dZ z;5EI$A0Vb6F_Dc-TKq)TtApJU^m}D9=}1^~yqHkyPj-rF0-PN+eV>w@$b$rc@h}+edPUQVaA?X;fu+O= zxPgif)?pW!2BZfRtX5)SO*rN}9i@m9m8&TZon8zau=4|uQ34Wrj#%wrBu1>GY1e7z zYA;y!*d2z)6bY6+QFk8u;82|P0S!!rWe@$vBL;shdx$m69-61kch)*yPjOETGPUKv z(FA0));XVG^$|KG!3S%!Q313@YpR3tD=^>4{0f}S4j-`-bnOlP`EVz(F1l+)l)#}l z=GkV;Onu6Z>%|Z7RS^TheGJcr z()L4yW}S)Kp;N=sXMaTfPVECr`{)70W!e{(iPvzs_JL)58qseNC9sT79Ah`~fn|JL z41&l9mi4(t`&>gC@Ngs!LsPIJ-}=&?hwuR?^nZi^OC#t<`5UzF4Z--L8SR8lV^D4C zW=V2DC%)+$DF+jsn;bq|L?O=zIMp<7-PCpMCJO>r z<=(nk>*kP;Xi*ia!dsVES46*%1dsTRs`SVN5(B4y(i-o zCx!?Udzn;;R5&&qU@gRhGpyxG3))Nln8JC~1o^be{L)H@x-}95! z6At5vLmJj|n3QhL^DGbAXb);mn2lYv@}Lbki2k0^6HNArm~Q!yjrdRqp<8~=27Hb* z1rR8ljygPS10D{g=)nO2!<^3tQqXMDAsYaPE+Ok@SB}_#kw6OCw*QC?cqEj^9NaKx z@_00(Tv=P;V_=A{JQmo!;kq5>j{UA$^9&p9(S~S z%rDN}CA_#7g;%f_C2yZC{#FI@!~6X~B#3Og?3kK9%648T%baZ7>`fSxX|1HG$59 zO-7H)Z|k@YIc(foj4FgEM>mUZI7WvE(?f#E(1Y}i>;We`STVugIojbTCI|XJjPH5y zoZg|A*1Jb-kB1!ujtp(R(@LEp=#I(X>X$3^cg()NfbQnh)OX<#R&N;$Cl2aMJgQrzO@St(TN|o_TN`JJMPAxcmNCRDL}k-AQosuxc^m@Hdu#A69>^tPLLTVp zObfWbFD5Nz#}P@hAJH-Sl->@b<(tB_e4nuUYr=`+*$*Q?!X%g8Vv`ZszV8H4FaxBw z=7gg#rDzU%TTezmWJB^05$=^NP+iX3?oErHj; z@sc=5uxSZ-wk2R{lb5ywy7(lw1nOQ$$S`}!tJfJ3bW`xx$kP%?sp&!0QT3i$Q=ry> zIDhm`fgx3%^l(dCtV?JAYS-Lrn?Si6FG@7}zIL)PDSM#P? zwP_}~v2AEmhuYLb?iRS`s7?Mv>}r6=k*$0KRBkI)+p5GAO{EZnf+q`F?PLLV*{~Xg zg-@~k4Rh!XNB*V&a~zZG1SZXX(&JsrIG4>Q@syNRi2AXZO&YJiY4dnf_vj(eQ!O3; z-X{J%9yb4Mi?DyNx%?qA7t%IpOlpeET6IP®JmfS{wNOqm=gR^68wP~`@%#KjCi6r zo|qC(lq4`-wt2vjhx_qMV#Uh4Uuh-NJ=M#r$sJY44r*8*0E2ANGzpH)M47 zHYNuPv2l!GXhAL?iin~@QA4*HFVcrRmk`SXNi?FsqrPzPQULu-1eJiU0>ds5Py0=< zsndYK(8x4CgD%25f@2uS2vP9J;;lDN{o$lOyibrxo&th#F=))e`kg3v;-(8PsOtUM z2hF=Wal1D{qSFx}zy|9;GrdHVZ9_^a{XjLw1XMiKKH^f5OAUqeGQ$k71bM~EqnJ*9 z+P`A#;L1f2T(_xC4*6 zA2qGpnk^&;^0_Vf^!8*=y1zd+nB0^}=7;)|+5Y6Ri`OQ%=Xx`3p^$&N#d`H}qLrG9 zJRjA&EfgK4a8p3@5+yYvU17g*F5*eVJMd=dIF2-yoB!-LjUwI3AQV|4v*=*@1iB?w7U%WPtXKT8Y&v=9p|wOWU2l~K+y|Z} z`oREGoZR0vdJYo$_0x3M2spcS_XuEjbE7_NzZu;epJmX0f+c{cKFp{@3SmoYO&+fS zMV&*d`cr5_e{;b==(o@&;(?lA%MR0fKk!<}mxHeTtylYUKD^`Zs9W)@xf9H^oFB;4 zV?;*WW8?w=W>y*b5Q@n`UH-Vy5;F49B534m0r;f!s3!+PrXg?b6+y4LH+$|afB*a6 z6`xk{IlY*%g^XMn)cF?RN~=%>WHWtH&!H5h8`R9Ldq&XpprV=Pjb|a!Vz^T=5R9P4 z?q;I+EHBN1j-WW`h)Mm%%s~DOFfSxPcfAoXQ`LwhTy9U;U8q6yZ;2d)_d~y4ntd{P zC2QDImKpil^4pwZ8f)%^dbQ@Z{C6DOd7ADjG@<2~XR|(pme&)1b8&iMI-`MuYzjAD z#amsqEm{pST$#U=%Wec8X4azTl2X8x`5wlDZ8<(Z%cPr84m2HQj*E5ysPU^(ThG@A zx%5DdKlzp23qEcR!_?eCZ>!gvn+8rO(x~5LOzOGfiYpX_%N&Mi?iARy6qAf*eUK#% z)ml`(VLwwrTV+(Jz#Kh=I{I_YztRwc>_5>JfRPh7ucWTUrx9ay^0MSL!rYV2xFUxM@gL;$C;u zlv+f+^7>mMg>Kmb!kT6m6j}2(joU9i%T1rb8=RH=_ptn|=sQ{VfLS7{-xczefI-9C zp0y-D%aYvfQj&Y3ZY8*qKZRCe!QD!5CI2|V4VMz!M7>!1miUkxO;b^B^esZ2qPDtQ z{knm^HkF%(ZS68Wg)V8p>v5aI>#@3kM?YW$`#-^)>CkbxY{w!%Gw^Kh$PfPn{2YCl zBPuh>wqc7c73tx^6g@{2GtjfHyWsqw4CuPh3f?1d6>dE@lZ#>Z3}3{8!sDnT!aUldjeO79VDy_6#%C z&Ws4EWU^-3IWaB&E2m1_CIMOi9{e|vR3Bz8mOBm`VKeM4%tZl(c?e)?^YLn?_f*Qr zbq57_v-?Cj9?Ihl!;4lTw;GJSS!=V?T&xJVvzRw;>O6X}U8H2-QgKj%p&nBHiakqi zAqva~#!(Y(u2d+i7{XQ3Q586-5#l&`**1~4zXIPxf@cOs^Ia9vT#1@Q;RsUEul?Mw zMK@l$0&mo|l5SjX&hr!GNum3-_>B|>W`Ao7kF*?-RbXA{Ua(&Q&QPkdS&Fqj-qd3BjwdTa}b$3kZ4n`ol`=<&z z&UHd!7hB&FL@L{-(12p8P$>I6^SCm*3jc{>b$6+P%A}s6q$WCUo4>5&hO4sL+(WyM zTV5D5PxOcu_@A>JLkxQoJQZW)XNyQ9k%B2Q@)VbCvaZ5wCl(jx$x24~$CdYWB`;j9 zC9grWn3ie)TC>X2Ub|AoM9ezkQM6zLr=kVq~x;wm0OEXUzd7Xg{Cw~>pcUXqE z+$v;kbxmr~YHPZaye8?^hk3xONnOND;h0-mT{SJ9B=~f6gFkvsOY@qE40$SmIq`%s z;(rxi$%nq|807KGuaNH@F3?AuVa3bMFbPjL;wRb#&1T5AM!89_}6Q)|GBC(1l&X1nzgmk%FSfsb2c z+bChX;hvi8ZqeL+mr?L=|B=oV^cJudGjxyPO08uh=8h!eO~9ji(`lyFkqnRY@8k3$ zv$=v@)Z8h(y7HI|SC1jdUn!qHj0$m^Rp6-)Lqye{9=Zc{N4rH`g(|5MPdHQSxE^r- zE$-Z99L2(@B?WK9J3HieAum>Xh0W|0DK0$t- zQ?Gzr{HN!x1ij3o;R<;k4LNuo4e>CQ^o(HD$y3S^$cQ&D@rMw@%+gxpCjmhZnE!JQ ztdn1Nti3INipRG6_$(J;%pr6`>;W)S>;bS5r>|D*sG1c6SwADr z#1e1IU+t6!dAK6HUg3H{uJ=1>Cs@C8ZJhOcTfW$H!&4*8f7NpvY-ODWLMZDLetAZk z_=QEssq*%WoGx!;WV*b~5iG2sq_+GIOJry=Y~4UcA;8|3gKNuw(}^RU88%<54>QAx zI~|~5S-8F|+R4_J1$OGo`xX91)%Urr@I-6<*2ak5;xW)a{TPf;23NS*kJ-SAylG;V zU9!VP1U+4C>j|d8dP?yN3Yx)hPfZF2&@$2@NY9Ns@lK(YT1K$EgPyRD!VyOebNOkkWtyS8BL4iE-c!dMw~&kR0; z@llN#ykWHw9Q~eFuP4=wSc~Vz>%cD%_Q2qGAqIo@$fj0McNwNPk-)mfC_n({BRs$H=}|$Vl=cs5|Zsn=@zV`C6#lCHskP><^@Rz}T1SW%i!bUhqg| zxC&>6&A2D3q>dY9xuQmDGf0k`m+S3Hv}_7{CP<*?o1D_0fv;B@EEl6z_SsIY$+v*i zok%27AAnQ`Q3Wlv1?84V88^+DEm0Fw(FLGYQ?95fP9g4v?!rbQ>XrHw(D#gHGwzF; zt!G5dxIgN*$f7JVyBmUWnkfqhWWg7^gpMS!sY*H8mzi zwAMHCH$%q!F&1g2e9Xi&%!(z=q?eEnvPShG9ae*BMifg| zR|F6*TjQS6O@5yAR3(06!k`fuG(nu3gLB->7qd} z2u6d^KImZ0&yd2E~t>#Dt#Nwf7NZC8j?LUY*U;vHU zpB-E|472_eTqD*iIrt)f&Hb}cY(O{i{|#ZBmI3NGW861sz z3J;l`V0PcMy&cbR+XX@5{mC;PU{!6AW_%>KK^?JliS! zE^}|j7>wrDny+-_=c7p3^=dWsVWGoVu%=dKQ>WG_l&sM>KO2!Bd)>TtIu9@gY|H^z z_WTO)$=!ftJL@y(h{~l%_S^{4{KnMg6nM0xZUU4VMF1O+)}?c5MJAMaP-L^`32XFW zRzq$K#4gN=(1UnsfHh4y9yTucw){$nqS_;moiON{$E`X1@{F|eD}^=^+W4#>4T2XY z7^nx6)UKBWB}`R5;I+70E^Jw?4>J={Xa3*7yjZnbS&qRkCQ^4mJ$}7b3UV1Kn6f{0 zw-p#;3t<$Kn)OLaj)cfjgKr56!S&gz1X%7u+%Dcgyv4wOdW+7paI_y+0DH3{5xVI? zX%y_e?n6Tafs@z zVJtjS_aM2|?RIrHqlC#fE|QXX&k#c!uj{d2tUkpV`RAbiX4L`FoBo9}o@?YjigzIO zd9XKS=cIL-kw3-;c`p*=3tZ5vmwbAQP|HI)Yzbx zo7#_v>i1mOsFD%igbpwPY&FXLiFE_xmA}H5AkOGnQWxm`KG30k7F%@-$vBln-CU{r zk>q!!(3JjwEA;?gL09UNc!gZ4PvI4JyHcO#x5t(G48O5}LW}uRpJf2umYHHIgApR? zi5gK86+-7jXGOVi9bE3&QZD9E9N}*CFz~#`4_CtJ=U8$XJf|WU0{R2vT)EGIz;6_u zV1}T7RMDSXMn6sH8RyEO6`1}T7X4$2zN3u(6rpFFEBCL8{t(kY21z=Bh1D(LmuF-t zzcAfgCU4Kka(<^CM;`7otnY8(Jze-Q4f?O$flMU$@U#RM!kJP_VIle?VJn_XkQFJ! zL~blkrOaV2vR3Wy|vH9_eG#v+jIq>fw8%i`!Zg&?X~F2BBc3%4pR_8 zYnxlX+wvW~u7pFX1(N6q#o9_p2r;j*r(pcJ5kg`b5=~%Q%na++FV|RZu7cijjY2MW zTPS|Bm%xmSTD&cj#aATo31DKOWu+wozYY#=f}laKA8|5ITX-jbM8@)~RX47OELsFC zF_XG*69plF_Q;7#_Djj`+U8p2r?{ceAACHQmcLRh+uPvWhD94)!C82&&yfl?iV+9t zJjNDnlyQ!Y{=l+1%SO*Hqn{==!Z^o9pR(vJ8|^BiS2oHx$3~xK`k%l?F8~%cdLh3& zBP;m@8(k%D&&WmcHbySycga}er(dDI(?t%Z8E30OB(_v7+=th~_i^wb0+=foW}E9X zkU(MdVJ;Q}0t->xPf>;|lGG|eh8a+XyI5C1iQzW3pK8jI&th~M8+Z)1ER`^&4lv`d zw0sE`B{*SWo3RvRB_xDc_7%t5F=w1$$BaA~J04$ZS#j^mj!#tbcsu4s6u&+Nt-*h` z`la!u5$q2%az@~*P+)VjOT0oOe`PKk6P`!=jjm>v#CCKEVz8q%{PK*fc4QLFfY4I#(M(g>j&23bLUtw#F{H5_NnyiWi0o4b_3^)Uv0A;Pu1Dr@>JTRFDIF`s6;3Ppf*v%`f>r{?}5W_Q!Z(q(fp?w*7GVMFQ z%(BAXRr{W(sjrvV#zSQL4W_AV8=G6Y7v2Oq_zht{%-l@=KL#OToqc8WYEI2KXHNY$rnl=l zN7c1u z235VVcX5Kfh$!oBNb;VLF2Qs=ZMtu={b6q-gl;QynE-5%{|dECcb!dlz@m#zpqtEe zyKK6B$K}_+bi0KPy0qH%dV!s~GHBHmG>56n+w%xX)Zy@y!{9>YRms0XYa6V-u@k=jy}mG^i`BP0#RUfH}cCf z0#7MEcU0bN1;YZ?!245&eQyRLvAfd*e~cw^d7Yd?`| zl9ho0l>r7P0FUAU4ACOCDN>^?evWn$j1bv_HfLDKw-BIMmC6F7S|KSmyF@Z8At8*c z`QC?7hf`5+-s|FQlS}rxJPYC6(DIBwQRB3>Ou{a`-ZH&{U=xKYlcK_4KUlU2ruM)l zQ+inKfj#}s;)G!@ykBqdPMEb9#tklGegrk*KhZb@(KjSElWBeR%@Br^;5d-h%_~jmX zUg67mGqQv?lRCUPtupT=YcE)$@#!@Dv6=3i+cvAMeOCMIMU3%KAHpZjBsvA2j1Q{r znTq(@!F;xV3kEr&hpr@A<_GT5we+W6br0&4^DgaL#)%o+`>96SlD^y~hVh5~sa-zx zzJRX^z+bg?_93xXLMBGoKg1JZM z)Fb*Mx}ScG(4b?WF=&#DIV^N>yhGxvBwQ!quxqo+pj(mZrw3e|>j#1#aZ9-f{qzmb zBYJ^84<}~OJcB9UHn^0l%t!Q_>0SrTrkFg+M$&UeL_^S-#$E5Y0vs@>HF zEvsgl_apSv>oq^G@ze5J=CHk%Q-^Cg?`;VE^e?qXQ6trM_tY`wW0T$0e)^<@@2}_9 zf2*ElyRd=l``t#i7S<>K_2BU+>q-*sL;V%BAJ9STz7HA_(Bpu7uug-F_L@EJi0IaX?^34;#5(q%C!jx|gln~%u|pr?Q!juD zfa>t|8aohxJ_x7*95I&$^jSbn7^N_CXd?O{AP>!?+et&(bJ}wnLm!sQjvMt3-GjSc z2g!44jQF#^UqMX~x*rfMiykBopl1QaXdXQz(C-1&z~4P0T>gv}_s}AGRG`0D(B}nm zySRi!^skby3f*@yokd>~s1;BnEvByugag4ejn1Yg1bQ6MX><;KL!f5?HPg9tNT62% zwNVGYC$ZEzW-N246Fr{gtN}EQR?rUwIt9>a@HbBhgwL7aay~sR(Aj|6;8&gzE*Aju z(*^VsNxKx#e4PD#UebCc?GpN>K)m&HCS6X)gz{FQ+<^OtEX!Sh&Y`R6Wl4Kb(l(*D zaN6U5mcXK3m$WA(Z7cncK)(Pqjk5Gtf&KvKG@N*TOQ5#_HPbfwn?O}Cw>I|H8rOCz zp!u|&bb;Cg>L-stX9Jo>17r$x5unp(2l)ir2&ftNJOTm@0BVB=2njR>Xa&BtR|&+Y z3ntSLMFskZKszZR&;x)jpzEksAU+N}nRd}+fqoAtjFa;X0{u6j`E)%ls{X*T#y^}Fcb<4p66w;6FIgQEOE=p10i5={C21WR>mm?=M&*bDrp63pk) zT256mbk}|@?4rAXf&Z=j9DMf!_1Cx!`gHx55LXx#J{ZD*DT+0G7^zoxyl_pg&Y|Yrb85C-fi3S#0L!uIA7u z;Zo3#)Jy{(yDhlg57sQi$ohC=C&KkpOIwOlpQyPN_>EIPh_D!6jqwKafJsf}kfzaA zfo`Vx<_)m50Sj7gjse;w(32GL-UUegJsI5KeGE_^#xTX@99ZhT0zFBum@i_qe%^sz z!{|S08dE+=Ip14)6-~FG13ukVMXd_*e$M9ww9tYM`NDuYEa+DAF0G2Lu%H)wHvsCk zpg#)Kry#hR1oG{2pvkTX?XjR{|1?*O_E}H{cSB-yk3cSHVuzNX{Q}j{DS`7`33^DN zTWD$EKCOnnY^ALYWL!0L$V%%*S}i?gLE8e40eV58o4rp2#sIw`&YJ`8R|lKjlWF>?HZ;#Yh0Yg||w=p_rvME+o&PkopUa(Q1ib?-&A&w@rH3Gc<$;^;~GM&x4eYT7DGr6=j% ztFANG&`}GT96jB)mKM)cTxLb@)7H{D3tB8tp9P&S&>joAOrU!$XtO|%ThPwv4dC)K z3wp1ly{aJZ6OtBelk&XW7$ajwgy+2a#T~E_zDa!vB zJz{R44h!O5wShJWbhEcAHt5?xy97Gyn;d%#Y5PY@pWJ%!O_Ku&6)}0XriRO3FBnx7l?V_Xwv9H@jtyVs6m0h&Z zfhN0l(=rR?d+$B;f(5bn-a{{0l&_etfs%N08ST!Nbvt=2i0gMdVS*xQT)*3? zUO{4Yw-evTRyH`<^-na{g1CNn&@v0+`rSe2D@f|MmsVO(O=7oyFZEeaYvKlNFAZAI zS&5sFwo5@W#_gp$1Y*4$K-yDQ8kcuByA#y2b5)I= zON=3Hxm^xf)T20u@a zTTrs5I`l=FzCcmVthqGw4O(eI%WG~4JxLoZ=+c@8LO-NF3))iih0u>^)PioQIUIVL z_F2&9YO2EjMvq$1lQrjtpP{ELC|>)y@Q>*U-q?|zGq38Wv_W>K4*OoIy-WKU^(si4 zKWTB*FW_Dp&<{4?5PLC;M(V*Z@&wV=s$JG7tEehZpcx1{RlbkKsnShut4d3w`= zJd+n!{X2QF14eXMJAd-cfFcU=eQWams$Wvdg6gO2uX=$xEXtlKpQ`#5trUn`^J`VV zrapmI=#SR_s_GcMYC+$s-=X~ny=g(;tG^FWJ$Bl#+R~q^f4S;EXu1WxT>nQva|Pnj zSBv}yEwj>IF$0koX+ufcOVsD2#UsBZKFErFGUS^T`5oqy-wPy*niVQPTGyJ|DmUxv=7DJq!*mD*JFR7w*=z$n;QQswVuPJ zbNgKv|2w^9LEL_%-E*!=I>E5}v@gWxYr&N)wUTUsHeDdDLprfQTP%>O z!y>KMNqaharZ(uL{W^M(mmfY<&*tOSI_%u`F8?OSOeg+74}**5RaG6J4gAFOaIya;>|Ba=Es(gmSqy zP(ryvyRC$Bh4ul5awM@ryQhTm0`1Wf$_unFJCxT%FVGH^P+q7#UqX4IcGRH^L@v~R zUqZQ3!?qm$l(nwZA_6JRuhOPFY2S@pq|J5GzL~gK8+6ikXlu0_oU~^WYqi@1Qkqz& z?H7pq*#Awe)1DFNN#gm-dhMtM@!V#;_9qKEV=AW+mNPs*>zMi&AYR-s#B-wcTEv2Q zzO-JOB#;Xw>;RM$i0g1obiI}mNXc@g)=@%vrFOnU8LqxkTUSDPmDX26d6hQkP(G8m zN*gVq+@Ref5ZCXF>J8eLElT!-8@1lmEVc5&-P(W!ai8wiK5aql2fMXLEr|VKw{}P% z=6OMNxArG1jd^CY-(OPXxmmk+je?lxW{t0k+Ovzz+Vd8~JU44^2*g@?CA3)!u2qz; zm`_!2)m96n()zTmPTIpdf34H7Ys%l?aL*L+=e!&@eEenZ8N@ZZ0CAlz70d>NZrXy- z&c&(NZxlSIdaTrhpK0n5>NGLFAi(&u5o*|d<y2rHxY&chg*i9-&mJHczIsHN%u1p;SC4QkG*DMT)X9pYqgF&O@NA#98H1 zwJYT?u`Np5=+Dt&xo;xwlKR>;I(aQAEBZ-{IeZbJTiU{d9dFj^w-MU*lZ-PBb9ReX zJ#-o{hGj*I5Z97-H=v_TG!Km6meywyktNmf(7Q z6QLWs^eiD;qlPaCm2LIEL4z->pfSZhm8~A1UfDL=v)yM)wS5J?-g_vG(4cJyP2udN zA;gbQ{}rJ>G=ctC!06a*<{JG0aW{6GnSZ>d$nBlAir?BoF1z%Tr$4bii~dT(E;sW( zDB%+&;hD88ziQbR5!dMHNgUo($N2XkbkS`H;S47;#)VL&;#koXj;rts62D8hJy6fN zK8;YLuS>{y_^}2KOXCkpi^qWH?@C3QHehr*OYlo1*Rv8T8kS1K_YMwkY~=7Z3GbBf zZVB&^@Z%ERFX3k-d_+Q3uJRR+1LMa2Ket+`%6Q+Wn*Sit|6J6P1h0(usYhE#W`Pr&L;HjlUNi{t=;099LHA7K_#B z4M|n@R+?AY&tD~%Zz|`iMd+sK2yI(BagSallxs`qxo7Fp%H=lCeN7h|aN#RbWgFw3 zsN-7_m#$hlgSdT zElWH{jA|b?|5>Zk7(W9$=l5!}iFZzC(@)G#YE9ZJ=4X-my7?Hwx6Cghba}rHKD-Oe zd7so~An$LqsBk_)Z+RE#UBc}WghTpMg83OzKcPQ_FI5lgP1?Wt?$hQCCOq{bPg=yWaqZXFM|y?$F+#zlEOhM5SIci1*BA5P$i2OQenJ%fcDM zja<)of(Rcm7K;qGYy9P82Jsh@COuvC7o$nPwJKpIw2xM`BYd!Gk-kX(Zq?c54EeIq zslQ%zli8(6hrAjJ(e^9ol|akLpiFF88)-zlijC z=V~uS9z^)Z$m8Bl{ln&Wy))>~k^8j88k*R*UayMAeQEuk=uDpv-?tt^i@X#)%ePEY z-=Irki@@!g*bTlJ@(pH@zBP8cZ>31PQly#>TPhpWtzI75mBJn|qe+2dYV6abe4N8b_R?y@ggs+6|kgyYayWMv{f2(GF_<(NI zW+mJm_EDhr2C=IGz-zBKt6&*NHn$}^rW`o@$cRhQ6D zr|i(W=$F{L?4mcP>_ixU7j8|wE1v#tIvrI;$Q>Y#@8D@75N$J_1(w| zn!hm+eF@>x=&O=zu5ef^VNm;0aFHI=4hILKL2YT{5W-cB*CV{V@g{`n#ytqPHQtVJ zsBv%9E%eJI?=rFEl@ebm@pTekC-Dsue?#oBSK>#suQbk%`&>V5yia>ed!ccWo+bW{ z6xDw^Wof)mXa*&`LBc%}-XY;W3GbEAt@AhdWm5N`&h~at@Cl_oo$LFMVCn@^56sf& zY~t@WvuSDkliGBhC27@JhR20+uFl`r=j!~eeX-8g{)E(Gna-BESm!>zOv-vf=vNB; zN}>1CBucxz_$`nvdK{-_s~a?dOyy}aCo71ru%;2FLfUj{EKvz z_OI?21^+Vr6qGOHR1}9V(wXp1DrCH-G2W$JrD-0Q#(aDl<9&kn31yQNGQLUhGlXV_ z6=!apLenYuPQiC!hhfOwC73S3q=hCen6zMeG_F?`l()FEg3k(mOen_$GbWguh4OY# z{>gp2;BOcF{eu6Dl=T_Ge@5`%7X0^x^Y;b+eZjw|-S66>zbL6M3%8dg^<_zQ={LKf z4V|T0itx>wlmtT!#d6NHE_9&HExpf$wv@C~F~J-V%mKk15X@o092U%B!DyyfvdJZC zCYRVGm`*EXe5c^Y1T!X-V}dy#m;-`2Aeh5~IV_mNf;lFbV}dy*7|kmsdZk1!m+11c zPSS!;3qCFQF~N)pW=t?Q3*`a99}xTj!QU_V!-797_``xfCYWP_IVKp*C#CzObf45$ zFinDK63hX?91zR_!5kLMVZj_0%rU_n6U;HejQN@Kn4dY1`I++p!5k3G0l^#=%wfSC z7EDusb2SAxS5tsTC=W__NbrXQe?%}ZNk}z6bnlF~Yov4u4@!8nhD$tJ!zE6y<4NDHOow2W31(COql%`1>GwBCSrR`a@uLzyD)Ie|LenTT5^OrLCG`fiDLOMJh?_e=b! z#E(imIZf!Ni3}1SmH1JKAC-8=DI(`7OtW9&`z21(MYic8o5VXLJ}U81i61(ZX%3yr zG|AJXtka|{iH}OW`*g;4pDuWbk4ik568e<_FCCOuzSh@3Y=c-$lMp`2OxI_+Rty3;ZH*fAEh%Exa%Mc6dkC^HrBe z9**1{jmNUFXJhN)H^;vg|6*da`f#-it9Lin@gD3YnmC#5#oFA5+Y5gDI$;2-^B`uS zA>4WhTTN38{OcMz#b>SE7B>Ze} zvzzGiL8km&kSQl({t{f}!45)bEy7@kDcdv-t0mqN;#_kjR3**|Fi%x(S7<$QtqWa) z@VzmnyxaS)*mZp%#xguC;Y2xAuHA9oJwI`c6y?M5$)NmZocaGCoHlEcDz2Tb zovC$cE&BEP2ld^qPr4p)eb4i(=l#Y%HC#MJ7|)&12U zuYRQZtJS}#c8~IxyVAc`4c=EP{%N>(!GADd=Pydtur%IhEB^KA=fJMjA36vBLN0Y& z%e!!dR^+BPa^XisC*KIO3^;rA@{&1y4Pm20V>;rs7HBX~HuN z&nbAO<2e=2X?RY@lfp9tPcxntJgsLOhG` zoQdZwJd5$1jprOZ=i=$W(}`yZo~3w};aQGn1)lTp@ZSyioi48L4P-R3Zf+ni_C*Pn zr|>sg_#1&o_Xj@J$hy8!c9{t_s8@6TTj-}Xoc|X3Mh(;5LWlTb65iipwc;1bzfr?< zcL2|HcL2|Hci{9q)7?Qwgl@0JZ!h=(O>s@fHxc~OqPA4v8JglVLsNWaXo}AaP4Stb zDLyU8$K|zXiq95J)n|*Q>bXTz^~_rMtcA}4&vIooRnM%(yVpe9EPmU-kLBM6Ihbx6 zcTx>a39L2`y5JIm)=sKi_+UOg@H6=Vva?yV_9a?&=$t6&gXXR zmefi(5f>x_nf&1HE=V>3L8~%@TXU$pl~x34bsGOtWM(jvcM{7mQs|PQY#$nvP=>TB zt;+V~bA{aI!8X;VZA)|c41(o0~mMskA3al;ave@<( z^{^Q2k{=uzSc-qEa{9nHTRMlP+k)8UHGOko7tQ3R>zLC%a{--~L5rjZGremwJBBi7 z?Iq~~H_NKb_D!m$HuapD^DEcJGN2Vh{XN}t=+ge|pq*v*%(=8Oef@6mvx=NQa~`ee z?oVShaJlq#g_gS3QafQ-O?CWrBIP#PDN}*Zj{dyAY8}n`K-YbpuH5BQwq#30k|M#x2V8^*#s5z z^>TDBr>wA{g(Oj_e`aT0s#vHX zO3M_)I1Y1RNHD^ltz3;cb8I7B&_2_Sx3@2VZXt(&>1?>uPd3JDXXMRh^+=a6y40Tq&0<%nhGn_gPUzee&(aW5U zPi^e0D7Wca+M2U1jLpItq*#p%T7%m8>B3fauIYRRo~M7yPeE0X5l*M%@p=PkFpn9a#uUuE0T&^z&G@<6%{;jamK}y@BpKavhDY?VgHd-=)YLh`7 zR^7D{Gd2uZU4>h7yBMQd8V;wRs1%XYC(ClqrHvb< zemp_zOYdgeQtqdhJ(4&YhS>vJE(tS7+u_I@n0=6)L_Kg@BCeI!c2W+(IDBQkl8ddj z%+W1hQ!IH6CVJU?<`Q;+m>KkT_Fw{9nAk8@wTcN{qH_){oeRubRXDq`S^4mdyLOjn zRZYQdvXQ;H{FcvoLs|I0LILAo-)>ql)Ym5t#>O}@3YNX7H0-53%j??>2c%Xsf>a}q zM5RRw_K-{2!ty+__7c1}B2cuw5P=&jh~dyCn|Ipoa|M~tJ5?yi+`<~M(1p>f1~J^p z%8Gg>xZZp&H(0btHRdV_G0|8AUzHu~Sh#=+P#%lJlP}Sa#gLU+IXi|C%Y=9e!V^+V zrPJBIE}nL;$-oeMFr($Uf+`L!^13pZS&Qz=u>CytVI_f7LI~wqQ|AJ4QtvnyXg83^ z>@*v*wo}TRj#HfGI}a|;9=fa*B#&KaPM~?_DV1U$ZVh^(-(ngK${f4G%Br}8#A?P; z<+@yFK9AnnwY(q0NZwj?mdk*)&atbsn%DB0Ec804_Tv0SFiffH`553Y#!`KA8siBu zomC1aln*WnQUkF_U{S8f_F+UKdsJiA#qkVcsnJEo9hsgpA2ns?7+PP=l?ZzSSV=DB znMEmHGRmZ#(P|>kF?%v63*LMN3!i@JD@ZDtxih6@H_F#pLJLst4A*VVU?;USH3uRji|AbiQKl7N zvKw8|im%2D70R(8d(vmYOD|rfricQA_i{D-ixS|bOF)}~lUC$&+smg)jI}UauZq5i z6H5G%<-sq`!=TfB@Ee#}ZXe_dTFSDGLHPj7eOa3TT%N3r+s19fv~ekwCw-1fS-LgT zvuzz#Vs!Cl)eU-;?Ur_a9_!SOh$zDb9OYxf$C}#WeK{s38J@|@7K&uBfwh@Iwrm?@ z|K$LvE2lx^@pG7tISXcqN!aBIPw-MR!<{leBuBbpyvFGR<0Yc5aTrLZ_GKoxDR^9`C#k4YE`}eTQ;QZ*ZA|-Y%5mJK z$Fg&jIT{u!*gxY86ALS6BShm1b&6L_X-|Ml+Hy_$I;)c@Jq*}1k|QVc>U5t<%N8yk z8tiCqpI@=zur|in3JTSHWqd@`aV4qMsuY7{ySefGq=F~MAeZZty(9F743=m-&M5}= zsyE9sc;R+g4zmcA=y1)JOv071^I&VmP&};hyotu>xaFctw$|9Y`!U>O!s`^Ecra5o zY>SFl6UCJ{Il5JS!Pd~~TtPLnlU~*$Ru@%Gpcq@mJx&%2i;r8f58$-D1(yu6q`VRD z1+9(-%V>aA?4Pn#w-=p{orwa~(3MYgt=?;6MxChFF* zoo$`Ft~4hW0HE}Q2V*r}AkQMvNG0^o;vo~NveWwCocRJl33MfEtfVz%cw@BsF%_r?8vyI1DY zy*y@cWz^Uy^G(iN!OAP_1h-Ax;}u8G79>00VoL9x7vxeSufq_l{FB{t7wolW$^Lhn+6vE{w7{iJ*oNJfzTIkNUL0>RJK31dZ<#Hj>}*<{ z3KOmNIkYOh4aO%+DGRT9<;iNSOn}N(ya}J8-z~d$(T3wCQVMZghnj)Nz>0tVvP-%M zx=PowOkZXT*5?W_n>u@~-J<-v6F%MByAfSlbLU~7hy4twIu@H`j#EMjWXLTf-5oix5;I3 zv;wYstF;W{OX|}avYIpFZIe6=my^SrZFY}^ z<$IPjp5?$tLuDk=&F4f`KTqmYBSs5pDIH6l0sW6s7!iPg1II-I5>C3hA%D;UUN9S;Kjznj3 zbhboiaTK3+GFVCT09UywX%)J#mJla^kN4(Km@T;xZjoanZ z2y061Kqw;+$;&27T!u5BV#f1@{Q?mZQu9X%vU#&b)5dLBP0+^v?O=)HKKvKx#~GkL z{C6gfZ4Kk-N-HIas)lg}WCUkAhG{n5+quakv#+dT~x^JY^bbS)}#j zEJ+{c&s$I`EqW);r996^u72?5@+s7Yd0Y>8vdk1<$cmr!PCVBj|7PLBdAPRgaCT}y zxSonrHM3CXg*XL6CPR47zR1#a61C#mvEDOf8cYMzhqUX2ADw$CQd!TZLt@oRrvut7 z(k4-Nrrm`4^a0zCH|w(i8PcdnhO`+MA)Q<1_!_?yI$nmhMfNrJk|tD%X;B9%9oVNmU~j=Zu`f}RqbonJTGm0Qe~~jukeYS#ooodSZ}N^rQswn z{es~Tvv!2s*NXb=L7mx>6#i7u(Ag($SzG(dB^T?9`=w*i?eCPk3uP=rE^cd8Im-S^;4jX;+u#+b(v`eO`GCuKP}K$wST@YT1iijN5#& z+|dh9+$YwGjF*W9hY+Vl@03H?Z6|De%XR@Xq!&F2O)VDK4l0ot_v-FC$6dvOQ0|IRYe=ff`jtZwEpCHtU~^O(DR@7 zPMp_>1+pY;d!;3mjRRGsDH#8JTSS(Ph;gm3Qo`u4vuG0+j`vb*+e(wl53-FWLC;>A z^V{BsErWey5l2@K09WeqD)Y*q4y+yJ#g50B@nzgYrRCG;f7uPMDzFnwc^e~-;gm(Y z2qLqhii1c2T~al17do*$^kdTi^9L4O8N6!fGf{Xy`0$X!f|QrhTc-XqCZsM!&VH24 zCOCwyqz2+MaDcQDo~7Y|@QgC9HkKzb_JDXcrZY+K( z3LJfA7mJNtq^=d0!%FXzd^}y*1TGl*s+60ybxFAF3x_v4rWC~?`#>Ifly4r-Kvjv; zxOnzpGx2aWnSIjA%k5a|*O`uI25K}=R%16HZqwpF&E#gx!D{XK0tHIEO9M-#yeBK9 zbd12QfO*`P)R<^Db8)W0mZxTWY#w$m#jF8;o{#F?bH6iq;8V+8H*=i4U%Gz7Wp#6p z-fmRKLRu{0ee~RoH${K$KNIk5EjG_rjk~n5vm0XbLMm2`U;hH+RZy(jAy{6|sOngk zHym9RyQIFMz9D*PY<+d?YONt$A5@8HEsV@D2BMi#)FeTznwZeYs95Xql9iY~Q>fc z4}vi6FNDKkPm&s9b%1rIY(TDhC>5~RNNTasJHy_ji(mEi__sztAC8(PVC3<}>S7IH z#6hSCsf{u$EC9G!(U&(pD3N zt;{iybUXD4CO!2I0R2Ws9~Lb)N&I6H9`Gc!hI-vh>S*U`-It{5*y!iA*m5)gOh{Kc zJq(?yKj={Rk{(OMM!yqAE>U<;!-W9*&meTHSha;y`J!O@eUB(N5ssaW){8_m{A4)L zKgMr`Gsfqa28kuY%78&PK2t2=gY9@@qrYe*j~_cg=lWaUH;{*jW= zUj!nWOBYfQ<6qtihhwG>JzoBg)#JZpEQt!}^&pCv-tq)!1$A_rs0!Loug5=(S3O*Q zv?Mj7wSNazpHPjeq;7cKtOOVvM1#4CZn$p<+SU)1AXG-T0eamKb+TH~FnB=(R1QCQ zv0%bSM_z&RzL%WbZgIAc#viV>OS0PzGhdD7yaPApJ%JJWa=pmIy*eqer1Yu3NM+wf zuZm{O6xuVb)lXHu2t5UEuY!*=r1$CS#S9Z(!9>S2j*NMGJ%~;Y~UpC-0C~J8;pz4SU!sRDDF(13`=vb&BR*iuvgx=P` z-EFKIy^ed0&qTjxswk3xuan;BB+p|N*YSwR4gs+^1+5+{q;;m-BCuYud3Gdez#Es9 zE=A3Yu0o&JMT$l6{~Ys~E{u;2u?DY@G(=Zu6G;J(E~G* z7!#BP)=U9N)<8KeSb#k1l3HKF^-c!5*%S{f2_k|;B`k2$Q!!eWCo=fxRq_{@&=jM zL{^3p>8%E325frjZA0sb=b5(cN$X7HdAzbq8qp>Z%k^La6%Ggd#hJF-)OCH%#ImG7 zr&P!69qD7_i8aA=;6bcLs6Wm0ppH^ar)CxG^js7M4_K*Fm8fXEHq+=>OF#04Gs$_Z-Wpa@Os0z#?250 z$gxX;==Njl0bd;(OB-;_qi=@|9tvfmh~{H$*y&h)j%6XD^d9!ES@^64CML&kgPui? zoo%J^%ZW0cHQxzx3mL2C6+mn(1LxBan~6~peYCnE+`#ie4D=X2V-0A1Omn&7va0i{ zVGJNopc{f1CQ*&i4{|+ZxNVA62V`EcLmG(5hmiYfRn*l?F#ymxid9kyR%dY9!D5rz< z>}Vv;E4~gL<=LMp;)aZFgn#gJJ{-hHq{MF$yu ztE7WOP){I=%gvgIN4f!b^kP4%=Z+ODL2y1Giuq(N;DzdXMWxGQtj1QZd90O}%^C;1 zrjNTgaC6|{z~I1)n&lfP4dKa29z-h6ux>!3u>@n%Yhpe%`yavVpSv0(d9I6LT?TSNOym6t zIF93r7n@hoGktzo_1NujGh?@-{fi~Q1M=Li71L>__<6iA-Un0CRTpO=vlE2Omaxw< z&#WzVEQ<`=CuG=Ol3_b%*zRQ5jtq4ZGL*WOI?hn%WT;~iALZZ()S2PEE-WELA~ z_D-%#`K$m1j=4GT!q(BzO7@>rUoU3nEezgXn@-a>|m-U)wd1p?r zOs3AUl{&1OFo&AwlRm}e$f%~q@VGUG7mMc+%}zs(G`7S1N)^}_(}GFtLxNa#B-I$r zS!o`At-?(KYnOvBc2i_v+!bt`EhxF8=Cv=~N8+O&8k;eJ+8pZN)}OnspS2nTA8LB#Nu1-W9sVUx5k1;>HD0L{(=#jILQ9g*_Y!7kdLWkuEufA70Rycu| zn-2#Wxb27=A+d=kB;)5zJk_}B-4|bhoBOJ(yJuJ7%uMNV$F6r@#5hidy2#{a^?C;p zumZi1gAs)#@4g(Hg=rm1o2&|It8l6^P=ZTTI@os7)h#uWipMTpxBwO^`^kd@SDJ6M z<%R}3tqY%pYDTV356Trf2U~?hQaEMpzev-=qzMz~1R3C*Q7R3N2&7mOuVL;Q1$OF5}sbXB2Xdh4R7i zaQShqHZM00Y!s>Og>ch ziz0!NUlgf=g{a&4>WX8i?6hN@I?h<(a(f)Yjw`%ipbc=L(@-w1j5GSBU!`)B8hnN_ zlQ*r~?reC<7x9(0akt$Q#T3UH3hbYpPG5+y;uM*>CK0dja{-Y0fIZuIMYuQRa($+CJwBAS?|ZPB)K(zpRtuEei#M%Pyry+8 z-sjwl4ms2p)d^@#!cGOWju8qi#)`U5|M2`$|JNhu;QnLA+`^(-<7?7C2ROe<3+-;pZ zz+Q89mT!xNUxH4Qd?#i&VAYU1F^L6c@vO-k_cRw1|Q1^!2X?Q;$PH&6! zg(^-exi=hSJFs1o0QSA%5T`h!VqGa+*)3wp#3L_PG=>%%*TrHJZp;+|)}dlnW4H${ z09mXX#-2fNDO8oSkq%Jo7}jXdqn{syDxtvhGP#lKlaN!{>!?e*LByO(y8hxNUG7;9 zURa2ORpW-uLQoj#WAL zY6B(rY7uwt)rPtXCHHEp0F~aW1zdKomSrfpNE@4YuXfTFv~{IBvwlucH>M2r630^P zDQ>ekMTPt~R zkX!dyWpHuWGF9AxirP{ll;2tPtDBXaMLRdZFYEVzShcpoBi6OdEQAr?WT@Xf3tQJR zEz5!HRTFF<@~S%daC=n6*z2JN=S>{*YAx>e;=(S~P&o{+K*nl|s{8_KQ8jF~QAbhs zg^6khQ+lT&Xz5)nB&ZlGJF!c#Wl`8FtDbfs!kI1M9G^4Vxf$!p^Y4kk!DS0ROdFK@i}G+)_Ipl|Y{{6; zKO=&fko=5DZ6%3tt={L{->yi3``aEF0IDlqwhG#Ph-nOU*~)8QwyGL;<@Un=#T5Y# zE#W+s%cYsRxzc5>9IHaG3eQ?RSK+xH&*-fj{E&lRaqv3?W79bH+QsBCOz;2K-n9qT zRh0QN_ue#Vo22PUnn#=0%{xt-N1MJvpy`vxX+xncwJo%TQcIz{O7Q|}nL!kV3Wy3+ zjPXGi7i|_+D5CYXE=$}N6-98>7C|Y34;I~B+;w-^-}lYTx#!$_ZW{mauk|K(X6`(G z^UXKkd^2YrXD}5A3?~6+F`HAgcM1O}jm63<;<54?{#CDolCgMsTRZv8>>y_^A}yew z{inlq21i}&#DPemOZoRQopc5Nmet;r_eTef>@>t5gpJwxK*!){I|BlVSXY(I8%~5v$3%ifA`{(RF$?jjX z`whylU;dt~>s6k%3MfcT5vWh52UqnWxBv@lju-q{)RvQ%c;@vhvER z8Pzp)^~r|DrskH`w)UAFvpT!F=k(5-zhL2_zSH_oKV$L0lBLU*dxLL3w2l|K96_7p z()-Y~XH5HTM;r>m<%;|%HTK70$DA0go+Sj9S%DGynB?>G^ec?@p3iiQVoF|&y?-K6 zSXfxbMjS+lTONaH{c+i9);{I#E|vmt+IC+Qdan#3d)Ca6~H< zSgj)m?f4=(>0{Ezrh?u?eOY}g8#;YVoaNJ%s1nmfqPeWOnvDQmVa%!^T|QpAe0eiOwMewN zZB=X-{=`Cb%@A00Wv*m$XF@Grqn(&pHnWWlO6{Oj%!D|b`59%b#dahpAkjdDgR4=; zWp|TK!R~a~@$UKN#LSs9QFi*6ddY9WYq=90WgTs7aLzF?kr5_|Ng?`MIM0}vC3tOC z%+|38P2eTqhQ|QzOmwt&bU30b(J`xIwx3r)x9Aax&a%!V8v$O2WuTk$K|5pdu()ZO zC(aRbMWU;$tCbDL(Y%@*qIVAC2%krc$M@utY(f^A6J2dxGky9d&BGPkiJr2aS~eKB zP{iJT49r3axf#GQPs5@~P|5MJvIVE%>g0uD(KwJ6o*JpJPn?#C6vLWYj2dL1v;yx| zheQxHf>tD_;w{r?>C{N6-De71(STSY5_8JtbhE)lox=Pn34l6cz_4(+!2P*^(NQcO zShzfaH=Zu?3odXOlf#+?E|5|NQl^O&mK0p<2%7j!?7{_6D-$IJC3t5y>I3&cK^ak~ zaL!CjEtrZ|Pp7?Oq9TSht}+Ckop7-=IT*-L=OoGs%0Of~4dn&>G98exSkqx|KK9>3 z0a9T=AmFGIhr@m;fIh@D%{Tc9E3T_x!z9Z; zWwNQ~Az6J%eI*+vneH$sH~K$MV9N)HCZ=ZR>z)sQIYo17*@%mBBDdo0#|DT>Xj_KJ zrWn_!mJ+vmi+gL>AXVzduqO)XS$-?|2ZSPDK>M>-J~)sss+pgS!1VbEalFv$t?lg) zqKTW;MOKz;DC;d=Z)fk4=&-F`@ABSrEdPO8whd(UyZx1H#BtaI{dkB1ZhMV}JKM0W z0HP``5xB(`uI&Oh>cZA)mp99ZOR0k3rx{6VE#Zhuy#A{GMkMh1=k_l`0h*8v-x45b+BOh0;0{!>!31S7C4(foXf#jMQ+{y$d8DCM>b-%gfodXgpkZJZkvPyl zu#`v~ST%3~kvOnzU}u2D@*N;?xx2iR4I&XjP#+>{hv3^!g{TKb)c)y1mJnci#ZCaM za97l^p#iwclOd3u21Ex%0aacGpq1{*S~d(N4FM2=m+2cy8lnKIE(gGw?wQqW7=XqQ zz~vSIgl89J`fdQ6<(^f}h5^tmO3RE8yG0YFjA~JUoN*NZJlCsZ!vMG;3a+vMe7kri zGpnx#z$$lD9UGAVSC0u$a}5AiyQ`boV1Q=b00UGw;u;1KVvlI1%GBKs>k6({N9^%d zx2*Pc8;Vv-z=Q5!GaCd95pYFr@R+y`{RV+YX97ifoj2GrIF~XToHsZSkg2-8$n0GA z+;%oJ8)9NMMx3Ei>@}>=K~XhYe*=KlxNByxk)~QShk$NiplphXJ6cSb+BMZ{+KJjV z9c$(Xs7>C8OxEVDb=ioE7S^Nki;$8|ZY7Sm(JErTecRSLMR1&k?BuPYA|rVl2od7F zqLn!+d>C$wAdY|<_hr(--B>FM8>D5QAh4LY+2|M_G*DQ|g~wWeZOVd$CeMT<*%893 ztu)_)^fhM#wPXUtFoG2=0tZOtE!+X!${jkeZ`M7#h{kTA9%)1IhH^II&P0HqSK|Mw zxM;^9zZQ))hJmeU%IK%?TuQwJ1_?Br(dJAsgMZQV1EuU>6VeWMzL>@R7-RsSIKH5C zq9f!7y$ux`>f!j1_l}BpkmGi5V+C%U7V-{nQ^lrQ>d!V;Y@Qk2pUM5+g_Reg7mVr% z<%hkCDlclt5qPJ!rE*Jsj=;OTt(9BR)p64npt@Dw4Q|QXO5|;g#)^wsm?k*|Cq#?~ zCG)vbsqDIKp!D)1z-f}V%?;$zChwtK?r`ND<;J31AbGR7@evGZQh5*Q33A~{CPOKM z*mn6bg4yrN{k6s-m{ZXj$O7bjjI$^Z^5c4Znbon%drfPQ_h~8M;>r8@2cBR+nH>tq z16nfJQ@3m4EC#;v;~=n3?#IyJ61Zl|{R^lEmiy0?`!PI__rkeB?!O4m`{2A(?njp= z?}u}b-2ZOsoaKJ`QG7oE?*sJX>-ats;OR^X^5mVaymPv-3{N`)1qM$)VR?!MoXyh? z`2fM(<;uGN!3y`5h*4_FvTc{a=}`ALGg*Om9qFjh3oC&z@DEr$r^K3Cq?YOH9O zp)p}P<);YdeplX)La}9FbPwzo>Qfdby9mNbs;;|?JeM z@LVGgY=QH0aPE}{&~uRZ9FXtBcYi=mx~ZXh@&Q*qkTe$aqKdQ6Ap1ck8$x5r){$(D zQ}YHr4>ZUJXsUr)Eh&*6d62RgcI9xLv6xR2j5ZB(syoc7gPi4rbbIvkwuA8Tu&mpX zh$l{Jd&Bi|xJgqx+$o1KGDqVZK3fjsxs13syipEgv`X9?ey<#sx4;ed4Wp3_OFT*X zWt$@(qOv{g%7?3s6<}XRSssdHpHG`%-@`TXVf4Fx7IWq2DT_m{JOpWFi`j=cKL}b+ zm|dUeEMgJt5*VZDhKWG{@!-%5d5Ah3)YzeBz_^QR9_T&ILZNxYD)E3 zoqP;hRelkm7`mY``B~1FhbYU(UHLfVkS#8ieiY5f@{mT>1GW%;BlpG3W|6{wetEFa-4GaIX) zo2i#4tL2lydRZhNr7VuP@<`HHTq@gGwL-IMZEm=fIGm5djM-SfL{Sh)=GJc*8fZZ^ zjrB-_Jko*`p8-AH^2ll2SdZWbrZwc3U~iU3@N7zr^~ja-$R0S+R*$?_9+4jiRDU1Q z>dB{YW(L*IR)BdKC3!58c|K)^c~8~Lr|<$WU&2n4k5d*;yYlIJV+FFvkg&%ivmgd) zKwaXelk(}H2=vRtl*Lh39z`kG;`-6rAR~*zoJFKI@bfY4=4ib@)|HMLTHlVE;{gDfq^ zil7EM@S7GUlA1GVI!C_Z%2)9G!InV@4|2zt(!nt2ESmR_CtZ26*;ot`ocFNuH;zda zd9p>G^ruw-e>TIv>dIFE&lbT$Xv0%0;ViNzDtN?3&)_WXX#Cd!twp}dlPmJodGghP zKub7>rdQ;za73uxSeh|`DHfaIDW+IZ0*|Ixce~s46 zmH`Y3z7S(f+kppz^4o;+hAZEIE@jK0vQ#L~WBa&9h-(w2iSD)v}rwI5hSH6Xc zW{ZF^_mAlnp&u+VdX1;J65@ej>puw;97Xqs`z*MAKN3d>#;|Wy%eU&`d>YO+`PNL` zyS%kPzO^(!(D`x{1gQj0mo*zpvx_l<)ra(>Mjmun6!X{8a*E2s39#wLGRzNZi!ql} zAPDQ^cL=4RL=}`9%hE&>M}g@RR98e-xBh$~{}}+2%GIP+V;M4nG9bkHqMXu;^h_WL zHLbYmr?U(26zQqLB2`#pthj^Ij;O2bl^W5_(^}nP9#3m6CJ;NVg~8f|0H{@kSZS7Xg6jOd*@X!qhf3tWAn0Lr$38vIlrKnN12nKA($6s(+Nbe%huqfKI z3_C&CrXhb|=7us?W8@F5-bMaqdWb538x1&Dk8EeC(pq5t0M2Gr3Q@iUt{zp&<6TvX zA2i9qlVY?RMYLCRcJ27a)`{Lp=nej4?Oe~yUd8%a~P(|;g5u|E$RcpJk zG-CoINSom)Mvy4MP8va~HdnRHFjl$*BG_siG0qXBYO7Y*!il9i)z+ih{1GHFyNriw zs@+xXXyt5a(uE$XS?L;Us0Nr_+`o1dsSeQ07Iv`c{?%Vy5{(fJjn#2dEa0wo3Dl3@ z)#h_o+fl7LK)F2OsaZ8@Rx6xe^3?1aH5<+?p6aYoo!#*Ku&26eR2MwAdaAodbz^#L zwx@b(RF6OL1Nh73i^SYsSM|;^R$MHgzH}is`6ae5eNiiNAr@w7HNadUUm}=!uA0|q zECZwa2Mq(VUa~NLw}1j_4GWmvI|*gJtLCFUv87QoQvw7z;uQM@0ETLRT$B=fsu)(Hjped&by!0FbM><5=XXMGz^r3`k?3NJ5OU z`2Zl-Y$HngT-8@;ECR`)scqr5@qUKfihAs=ELu zeXCX923FI37puO@0+o3!tLc7M^+QdwWlF8pv}N5GY8s{9!)h8Y=Qte_!IlBhYTAN~ zp{4krcr_vtLde# zS_+lNR=Na6Os_CWGYN=M!OMBE(Uri&k8?>5U=Bj0AQ*3F{jhfauVVFC{6E$FN zlrK}OTJEal&|7R7n66OMlrP(jL0DSI7}NpgCix43IonldgBrFBOju0iFRc2@ej)+P zyX7wl<{Vd@lQfor(PLG=P`|V=$tY^x!%wQ7t2~V9*fJ==hBxMuDrkAHdPXEa1(I5k@(^&Zms+3N499(5>XOtu z;ke&RU6aBz$E99Mek3LDht~l(kEG;LE4LU{@8jNeuviVEL9<1Q&^)`+o+EmgCNtgF zF5(V#8IxwVWB>%Dslj?RNORz?!Z}L~F3RyB`YQwvsKFIEf?q@MDm9qnDHk2{;8r!b z$Cd$f+{|t7d{>>1w#QanEMj{7eN4;1OZwj{lH@?AOhH*y4lpTM*{*ffS}0q#G@8(L zu90YannsG)@JT32zD@$T&Q9sM=wOKA_Vd;D z9nqokE(GsX+po+Kd?$jhR@+mSzbLGHzkHMUn{rjE!B{kl5@KjftOVmM6a8k%?2BL= zZxSblr5aUgmS$LLwo1*bf`p;Q`=O^AKFln zKOp}=MV79Tc#>s{WQgX^Sbnq)iWr@-@MI6#vSiBVkeHh(R1OK#g~&CjWG7gINjKT0 zBqoe#(oOa&c~*{+{2PMtzcxqkza#7dCAa1X{tpCSqU06P!C<1iN=d1rgXLQYm$%|O z6cnA?o8f zx;jks#0)>xt14AmW-m_i2~-4^r%AD68eQ;ZpE)wY0n2&rW))YS*}KM6&cUWBOBGo_UOc05xPT-A>N7P(!a2lCXYt42|;Y~^8XDx+ial}ZHr5}3-Y)rvKli(8>i2zq0* zO^uQ$fNP`k)#!lc+UOEB>O~U|u8po%quZiGX{KTH5;eLzIv89Vy-JPljSdCZM&G4I zrHl?HwvEbL@V!0Aw>uP8Fg}^$eap*y86sznZaqFiY@Ja8%(l zP3oB*p6+>Ou6kx=5cR_{~d;UIr%0;094?_okFEtz+!d_sB7 zRnK)93!@|SD?p-7JQ`^tqIRq2Fq%sv-K8cG(hIJ7q1IS=dGVl(CxSonfLT@u zo|1XxJoU=vKshGoIckdIO)i-{9hFBz?a&7zg}+#SY*lO%0w$R6B-r%52j7q33&nJg zDgkYU1%(xC@Oan2=?Xs^O6{X+Dk2pX7FDu=4f1#fd5{1w9tNXbuV{J^4o&$fu#`9f zH&gM!I_x6Tfb@WZ)k-X^3CEnLqZDzXay7-F(~E%vc76adNds>y9E!6(pn<8d?4jRy#Ne-G53z>XL-Vxx&RWOoDekF3rnVe7 znt+VfI_DFtK0=2i_+X7TDuC8#O?6Oy1?C%>UxBmP;Uji}uEW7UAMPa9MR%=;5;zpc zJlkxUsZZH)z4!sXDndf6MJ^~npKE9X9*)FeXbLvuTVLAq5Iz8f{*Mq~X$1W!e}neDAsAmYqn*%c4604t zEJ+UN#5a8-zm-5l}}EviCQc!MZs>u0Vd?6 z4>lPO;tV`+R7rd6qe8am28km_Cfz<04ckvlG~CjK;$(~O9Acj4Hf3de>6tc7@RhP7OYp&*hvrwh&P9Dz#Cn+Qhzg->(IyG>^DZj#RNorJna zr=jCZoCfW1HqIF_)i`hjvd1x{igP+90UTzdPp5pqdct8mgg2_G+(=8ve5g!U6bj#1%fX|br z00M>6QHO_Zz{8;wJvbm>nDd1|3YtwiWCP&PC1m~V$`Knd5=cSY_8+kUkA(7=gPZ3} z9*<^}D{D){x=_%Xj}J>jr1xu1p7#SgfD1x{jC6GWr3UBU6S#ppCeV4X z$>?$U9Ua#phmBi{QH2oY=w{Ik$LJ7YdPp!CdXT=6J>X;qD<;@GM?3t)wIidiSX9@vwuyk)f@3TB%b6-7)!F{c@%LuG!ZY(A}Jx`Yt@e>Meue#KGQFVF9AJ zKotiDoRZSxQ>u0UQM^+Nw48d^BK84NRUV}cfncoJDfq1Qe3lw^j(va6*+|b(OGHX7 zqTTX&8}Pghz%TDbQqeYeRK#YvW9@$V*$wGKP4CsBHR13V5L-k3+zDZw=nX1Gz*@$OAo{ zX#w~5#iXU|I3j8GBRVFZ(%WIQd{elV?-O=^O*nBp`(Xq~nB>x1Y%(I-_njaLW`Ok8 zoNyGT6wN_z>&XafM7s1wo^T)vTc+E=aR*nr{h7OqhMDOlJ$hccy{B7 z3T@{&_S+aQ&AuJR8@7pAkEbk-3EOz-r!6FA8RuO^joVDDZ6vo*`&YEw9@lcqX^h++ z*K*5V`iTt4EVtTA%k6P3x9|$dExbu?!#gUp+#c6*OCUkHJ+9@}rVv(c!84Xy&a_>= zY|29pQ|vA*^J`X+!+7GXiuHuUcqVl>a9no-jEGS`E$(Nugd$WoeIr{!kt0u{CGa{p zUJ?fhHZ38~wggOV^3rxd7oX&oK-~)o8D=ke^*SShZVLVyd0GM~H9e?0s@_v;3e*}9 z=a1egFr>=HJl5CVEqOC!hY!_u+#BZpmFMhzshY5-lQS!D%;lxYR0OT@O=Wefn8l0vrAU`ObK6Z)#cg!RF+I~^`UQFx z?Y>gfs)P-M!(XOQ81ZU~;Rr1|s7W>ij=a3WU|EWSKZ=7trUZYK1b<-0zA#Y)Bc3RZ zC#J*`B?*j|Z60vs;oiL8(X_SRC*lTwAo0|M%Z4hlX^M0q{posYLm9ff1YYzlHD7A^ z-1@0O=|6>24F2Z>7_lcJu8i_;i3;B>6}m~vi7hlYHKlLK2;W=~ywkwkFBH5CA^T#3 z^c_%q`4e4;!S^oli-{dvO@(Wv_UsH^chwesdC97auiAP2#XE6P)UGRc?cMdR9oNmk z8;ZA@*R=Bm3A^^*NOw!ojR}5fo6Oxrfg2k-vuLo3r%A zR^z$Cir)|Jzml08=BlZvd!_g$sE9kLGB1bHcR8JDu5hyVFGXIgREAjkHQ;;bBB34E zUAOD%tHyWfP!W>)lwTKh8&Jk2K2#CN>*C$JF2!{;S@+n4ZsbW{YLjvIPxe(kW8QHS zzLCZ$N4udJMC#5Hc@tuZe5YU{o0HfqV{;l_C>zT|(DWHjtg@2*YS^sP-u3ZVq5(~{ zwT*n+XOeR^IlHNFrQG%}6Ppo{R1;1~unLKHl*cABN?-OK_r+{Ew7#ef1ekTf^xaq=yXH~u)#XeOfL~-+mKR9KTwS^0TmCmkGNFiQbQrV%rL_%L0+-)D5jI2 z_OBQ_xN=bh*KO)znp3HCs))sO*bg84#tSX+JDi6kO-&+Y|{IrO@tOA0TJNOL51{mt4Zvza2(*%Gt1DU z0nr!f*q!OvQ}GsB4Eam|7V(+>Vps;bH`{BT@haiWrlQ_%p~Elc^B}qF?XR$XZy;Ve zWGn6pT)unvYFwD(@CAoEc6464dv`hlyWVbg>IX9X{`&K;9QZRh&@Fh@=$kl(_1Dk; HKMwpKm}(wV diff --git a/tests/fsharp/typeProviders/fsharp41/net461/providerDesigner.dll b/tests/fsharp/typeProviders/fsharp41/net461/providerDesigner.dll deleted file mode 100644 index a26e114cc7427734e225cce2a831a04f744d6303..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75264 zcmb@v3t&{$wKu-bnVECuop~i8kc0`M4oQeWcq(ebOQWC&_&`xIBm<0uOqfX!jM1c0 zAGbfkqA%mlzYYmc9E>74JoT$#dffM;rY~zN zf7G;YYqpRa$mh1?)7z6h>HhxQU~*F?nIGy;X8V)NE?%45p6kuDg+l)67VFi^iB@VZ z(mtwpTPQk8;iiD*B}!^Uy25_rT*Q-zci_&_aU5wZH~;KAjUwI3Kt0tpF$h@n+pa)zlAmt57Y!(c9`D#f!9L59CYn(z1o-a;U0HK-HK<;onWTr{6MB2 zBQoM1BNqTLv&zVaP)rW$^2d#qkdcoTK_g!az$c|gJvk6E4S8#?2zt%E*>i9C```br z__Tu0>BWpKWaPr2&bI(pT7@bgo9T;s4y7pFpk{8}GlH%M70onnJPVN)!<~wOU<5UG zHxtEYd1)4O1jRu|OzJmg2J&Zsc_9J1>y3b!szxN?a(lw=LJgvSOXMKDANuvu?32kW zS;L;P%*fZ4-{ut4SaT=Tt2MXfzvJL0Ck=G0W?G}?CZW7mBM;{>(3}rx2$3J{%~eF6 zI$)Hz$BWO`hq=ayTpde}tF{^WQ*1}g({xv%2`$GwoAn{Iyq@@*i_;6!84Vm{Q@Hsm z-s-At(Q1(4%KW8Vb|d&Ovlcy7jbD}8dcHo$ zr3Y&K$*=5Q@Nsh(rsfWMTfN@gG;l(ZM*SvZQqL7vT%jmj<}gHar@*eIm}E5TgDi2V z)}rza`K~uwq0d7kkSh81v#>+Zo$faleGq^i^olx^3IYcA zgc3x^^tErZsj@;^Qm3&3Ypg27O+%^@_qwB| z)FSGY+usr?bjubH)-=1I$eO=t+1ohvjEQ-^sEE%o0)ku8^+;3>x0{ ztR?wbmgH`ilH3z@E5VigDYOy`?pA^;`Ns)vxRl@~>c!f(#E0Bynu>CxZxQMgwbk9~ z*A4WwsoXSdYnSOMbV&nVkJ}txkJSY{`T--@{|V+yhmOl-I~D<&foFS1e)uQg=jg*6 zQJGP;4O?ufNDmjL=sBX8fu42U1?LB4K-Yy<@E(DyaO=65TnxKs_#ze*9)~?qoNr!wM@_W3QlYG32v*~x^cNV&rgsih3?nlH&Pgw{jDuL(sE3KnPD@v7(meb0CcD|8zEl`ov%ef z37Ok;qYRW;p^O_>qc*xLcMh{dZ$lxidJBei)O>f+KGWLTpcD(&C>L3T@_G8cnlm!c`P?qjW?nk0Kw+v0k#&=F}Jk3YFa!=@agCVfApM|<~0);@>BqG;t6BK z|0=$c4}IA&$m5q^A>T9HI4LNI2abwPm!aZlRVO=m#wJU^>cOzC*1!!BhUvt~+rD`ZgSU?fMuvw3Q=`N0Y_!#tklE`j3I z=qS;2v&_5Lx1nkkWO22g;u?ah#(cfC)(Ge_f|?Sh)_@mJlzGz3cIzcBA3m%CAGgT1 zQNnh^JvG_gqPhJpqu}BGBb_PeEnqEX=pMtBTFXYv9ZANUfJgPF(@d))86N51$LU38 za|OGoxl?*|dRZ z+_}p*iiJ^23f_pv=_`Pk*^s}AZRR*G$q0IdOwlI1srASc@`c@D4@C9@XwKh#g8V$E zUIDrIr{}H&z09NG3V9w4Id~oo@i3M2j9}HtQ_2y@h&wOwhY-We(puvu0YML#|8owk zlV5kNy)A!=$F}_VEEi$SA#_9R0WeeS0k9FLu3~v%C#C6JSb4g=cK5@mniT_CKO@e> z5^u|2?UV<3xFWn>;d()?_d97PSif^^ob`KKzSwiaQzOlP)pHwcWt|2>DC-oyc}AM} zhDFDza`%j!E_Y*Oy4=kXEUclVw)_uEWN0#M-9Sbmz}}aGYs-Jri6fmEHeag`GsB8I z9iU-ZxV|jf$<~(zcIwOf75+xm_qnZbMQi=m#)#hHG0;E#7>rN`SGd`a*}#gtX=0XL zvcp9LJzZ_<38uk%O7RT}n!$HZO$r9kGSVVQ&y72APob4sMzFktp0JO?5l1eR$85N6 z%%}OE_0%=Yf0!A_a94wIj#;;w$p|_o_At7U;~a%dV4Op{wqWcI5C&JmSQ&NC3_gSL zQH>eAVYLw){hn5@C)JHui|5Acz%LN?z~FZw27~v=rdCjQ8KyUpz`DjLKmh0?KFd#t z5&Cx2b0cPG?iBRXl0u`lU?uD}QfQi%)F$vvV3r0(XhzJC;Qj$` zogaP7NG!Y_{K8nr$i7&}Nb(}6JMIpfGiT`eTBzJ5`-yJs52Sj)*q7>M_MX&U@JMC2 z3TKARxF@QljvHmUqDE>nNRFGA>+MRkYzliONTBDNoYJ3xuU8r@7o%48*-ov=w}8~0 zNF-7pfK&%j1ueA&<(5bpH_e$XQ4>?q1)x<^uBa(aA?}6l!bT$MmHHIW_l#yU?u(kO zXGG1oKkB#0qCOP~2z@jlR3dPY%N+^yzM)?U|h~T!PVRx+ytfu z48bUOrmJ4OY8IURVRLH45PJx)1-^$Z(69_pZ1QH?CSi2`5HI=F=B6z9uLUlSwVB&% z`l9YaPD)qx#Dq_NN)+C>P?C$7Y&#IlmJ?-&oM-ATF&ArzN=tOCEf=5?=vV=H&99s$hz9VxiVmbk||2uBFIk$Ir^<=}DfcmU4{hB*RtjLZU_?G%2O zxi@1BMssV;SGw}^QKam8wVL{{&|xfCQ!BHnQ)?7T)@YocjmVF^ZeBZ`2N(l3<^U{v zeg*jCZa}h~^%-JX%sW0ZNS`fDK6N(mAyv6Usa&vf1;5HTp2C zAvXqM7iLB1LA*4;nx-5N8y9?AekDXv?UBb$7eIv{$}zi`HLjoe3Z52QX1 z_NMHdv`#bf$Jik6MS?tm3wrgEM{f~oc}RyXK`rn;c7*#!;bV-NeB;OY23bBK_bY2t z`w>z7o(mgQGUA!g0VaU0M!7$+ZeYCfD|`v!jGiTRf!^-}9olEHRkx6gQ%Tg#mAW5E zepd=j=?}P458xJbr9O#U$d&pOZgICO^=ZC)T&d6S9SbP5m_PMd2GDJpDW)M4A{kdiI(}bRJt{hr{>AzvoKc?tA%IHrKdd9hO|ElN@G5uqZq!U5aDYX<9qE8aG;<*G_kwQ%5 z#`09k9Ofcx)&5TI3n)PqUaQI;W=V2i1iH0NR{$Cqn@hPb<5t^Vi>@p}nh)qO1rfBi zx#hbp-_h$zIHX!2iJnlbt%QUS^BQ{!#*Z5zB&H$J1g6Ezux|ZwjpgPl=q=YM zsS7tz5CUkAoVaAal`+UN?-!gGC&RIpKuI7sI) zwrHb_b8Penmd#lOD!F?`E|R-3axvda#u`8U3iX{Xaxl#}TMZ(yrE1|m+!nr%g9j17T)8mYT%Umi z3ZoBmu^13oh~j>VGF*|QRtYl9fHK_0x&lfJx3T?HQHW3XkZgei4^8Goha zORy-x2@Bhdr64OIA;hw;INpvq;{-cq|bJ>{iJlbz`HM1nPqe~Ej9j)P;XJjqkU`OlZ?ismM z?#9Svd@r#hlVApfmV%FFn#y)`D`*z7Gg*isjqOMZ8|Fe}pITXplvS&W8fHLQ$|_v} zY$+IL*~Lw6$7-G>RS!w|fqvAmOo!2G63M0`ax1Z6I-hR&Buqze!qYY#DcMR$NF8gM z$J-6(nqW7KJQ=$gUu0QX@5*jYRPuPc;YJ&0H>v@ov85TSMbd< zvYv0Sg)8Om8NqlC8~7R<7h03&-=D=@*#Og&*nmAGwD?*wEgQuI(E7rDn7Nml9P$vnWZM9u&w3Bti{USVCQawLQpo?(3Za<&QW%gB>y-|=OZ z751*$_e3R+Z(pwdxbdy1Vs6=E(y}tXeHG1y7T&;F=!?oXOlqH|4>QKUHm>2DXJjMaU>n_X_l%_Zp27sJf^9I(JKBb@A7<_)wjrg|szQbt zaBM?>65E(0lOK`Bcwh?K2214Fh9n3F+ct!ConoC3;tICG*(TTqBTvRQ#+O-E*t@cg z6O}yPHn{rZY@?`RwvCr3*aoIzu#K-O+n5?*<6zW8<6x{~9BdmsK)^P7`Q{nP@C~-H zS?->ZEqqUXy~H*iBHM2;O=a8I+|s@9CeXoe2>W5?USbs{H#iAo-C z8(jNwwoz0u+s5mbZD4K5exvzXWfRF!v`4#m2_B87CMV1-{s$RHw=(;ZIdxWG%&9q2 zVNQLmq?gaB8RyKY|H|SN*L~Z{=+&H>an79jEsOp!2np-#E2CF)YQ{Np>c26)UDr9P zuC*JT_w!2D(>it}N4E<$q4;$ zq=J5SNP4+`80YB6}`b5ZDlSKfDQ7mP|I}J*>ndiy66PD$xOG) zrrUR1eho~wTj-!mt8K3r*r_XnR$W1J2)tllhnc0U3ELsp>6jCT-L0pD@ys#xEhOOu zjwD#?!%Ua^HUeyOp*k(iB`BG6jt!^)Y|Gb8*~94zK_f z_nO*RfA3*3wuA4gx&-|8K4@88W;5;0HtmV){XMSt_od!>)cd{2g?it@H_yned@EU( z81!+p0sr)2Cc)U^W&ju84P0Ja*ru4-vaTiD(ytFQL-nS7J+@ATuZ8rXP$>aJ1^5Z! z4}fc}$8b_g_`@>7y3#Z&zdl(Z69V%Bb()1jl%7?>F83flUQ|De>u-s)1Z8)_%X_eD zCsy{-Spn$#A{;z7KS)t?`P+~HJ>AYX&&WUV4P)~AkZxsv-ZNc!DY;kpho;t&E`C3YsPr?G_;K#_HTT1k6?k%lX)I@ z=7WBQ*ajn0KSqETDw6szle%(0K^V}7In7M{6k+OT9L4JxKgS(B!24Om!23DAxksK? z_;TKiEaAV?5M{@QE{tPJt)m7ghI6 zMSSgGKHI+qgB;OAR}wAr19$0K`ctnu2X)GMmv$}V#0<{;R3mLkUv3k__@RGlmruPf z;Hv`gSFN3W3YX65=i&MQt`$J^<6?IM$)!&}3>Z2T8Ry{67e)c=r+}W(E~d6N8?mBM9G+ctX=OgBEIx-=i^pzl2{$=qFP@iqs~(5Am6Z`)O1#_voB@ zM1Ms0(~l7vbPO~GO>!}Zg)WYFNPLxq>m(d@ZFU)SD^mURfQxheK=31ODHoxizTtU9 zFVN@V#0;8eFy-3@mvWW)h<-C&3_oJf2TbPwp!sprpx>CBtIo?b^AH+zlb2IJ?q&RB z-y?dM=K2_OhmT9S+P}na(B1w5!o&VY5dK=izeqSMz_|(m=Jp;5A4V9q^!8>z)521^ zpYlO2>#iVk_#r|!{SGHwUL!niMtGUD+uwp*t}DdleiWgfJ{RIz%!U^<$f#n>w%2m%a4qM(4WXa@rS>Rlq}uMDI>vl#vb)+(pOo% z)Pd(oEVYgq%N*)Nk7qe+08OJ6^aFuT0dyMt%~Jy5aVEH&PfrVUHlQ~6m1l&@1%Ui? z0sTbME(J6n@BTh7X}ywm3H?$a-ugL{E~jHcd8<%vzD5>KvgieHulyU*LEtP z`LvyMf!YM>Cyzj91DZwyWD0ZYi7-RZx$G+lo(NAK`;WrXj z68n-NzsD9R6n&H-jD!IbY$uvE8(netQ zyMX`ntBlW7#DUo)1zG1r- zr$01Y<8H@WjaNo7hJ`jGyshyN!n+$^M)>i@_LxDRY256wQ|qe2af2Rjj3Knknu7R= zb8#&Us+9LjRb2X`;GjxB5v5I2iO(T$P9>HCFeLBd@U?v?OvhtE}^dju1J&VNS99o- za4G0VYNmmY-4@*L2Wu8$WPQA`6XE))r7gv&Pt@EB{KlytL|BZk#(0Byz@#Q~NYiMm zKsVET^9I=3fCVi##{lgT=t+ur?*gQLPX;%59|P2fF-&ne2bOxTKu^*u=8G7upLd|w zF#1oL#*|M|&i9sHMbj2W z=#K*RDG076fqc6hXtFCpdn~BgKg|`ReHN6#*^n6BBajQ4*r6q8zd$u~O5i+Kf*um+ z7Frs(PphFXTWM7~k*2M4V zhk@U?YUy4FdQ6){4_VOaVAMT{`lc(&)xl=>WSV}e4b5{;q4Nb|sXyVar*466p)UnL z{7IZjxm)1xF4&}p08@1B@5WGQ~O1BBbR&cgwD&1qHF_$EL+Jcx%lD_Ovp65x@ z_pCJL(nQZYX>Oy5W}VJ*-b|~)S*+t%3iPCRNBDLeweM39T_64yphvB=$HG51+UaK& z^v&>HSdy&6LLTSWsQ$(`E;6`AFKd$QR5d)M`Pkk*}LeX|)9{iySeR)1U>diTnW2 z6Bcw;*^ddY$^kw2K{Qy->-T;7*W-Fp%3v!KyP!h5l`IC_%45xLmAnzqVP=}G$c zs_V=(bku?-M^E>yrNuK9ms!#Kw6(O(f))$ZXF=x+w8w%j6X;$G+APrH7PK>Z1GxOm zg5E1>uPVsOctJc!_4m8=dj<#A5_o~b2HVfijbs2qHLEb?4 zQ|>G1hy`)Ky@KRW58C$U(fPhBX!;qdgdd{kTtTZXXmxNN^4()W?~l}b*VFV_it_(O zkC+>%!-BY1ZJ-ST-R!N34f;0FE`bjFCdVE_+CG&=1F>%z8>n?Qb77l5?CYgbfu8gl z@f);j={5yXZTv;wwY1NITH~+#257$p{lxV8chDgVS{nEI^K{gLR>$#K1Nyy!yzpTD z0=;TMPn!2>1$xthdg2VZc?k{e4#Z!>x-+66(flr&WI?R6U6iyS_I10c)yl`MvWpfv z&}7$cT4q7qD#NtSg1A+Nsarv!`4Q?Bh&8d)KSBqswBN?J`}feJRz7#)liD77!h+ae z@1Y|W#J+qFJ!9o#@4bg!upsu{d*~&L@)h$nP!ex0qutrEZYQq=as6&5Oi(0^>vucV zD@d&FcH;Bc$_6L9{)y&V5ZCVxT4q69zdPuB1xfw((n<@eN$mFTr9KO4P28aEr9lfi zD{&Ljb}2~4xV?0TK&+PoNPEgk`P9{dZGhuBy>< zi7}*27YOsO#FW6@bb|%8SARV4QF`2hx~dlk571)Xs-id@sQz^DGjz~`zFYmv;OFUa z3rf~hhrUSD7bwb^HJ66IK`Sk2dCe`MCuxHPU0U-%=!ev2L0f9R5c&~~TF@;uheJ=( zJ`4I>O;z~c=ur!LvgX|IGxU@N#cMwo{xLnl8#~f-=2iWaHpuSOVc#pYcWFPPUIl6M zCoQh}8TDDvo=MM!e@1&O=($Np%%9V}7BsnThxT*YZ$b0wmQ?+m4qDI`>vmQ>Pj6a~ zXY%5ze%{Vey!@) z)F;pi{n7egRUM;OE$CbIJGB3xH!bLU_4fg)$4(noTl#bLFIW8sO}C(z>;DL7u0TBc zYLWk-WmeiNW+3t+Z74~5iTa$hc;vUlFS25v4Ebh7en8L<)n$)l{@(N+; zjbGe*W5a!s|3h8{(f1p^2`=y8Eo=&zX9Am0-ulz*b1Ih5B%|3oi2ln+E-r1Y%7*9VLxAR6eeQrbPte zw6~+WmUPml#avp4leQ}6)>b=dH^w~LfRpy2n4yh2X|KmjZNETVhmXa*+VfT#+hABb z(nI>Nq}AzNR@Z0_Lh~#<(;Or zcG=~fmN;G8AP|?gFwv?dE>Iq!SCY#R921 zEYfkDPTI8C+1ley+N#(&+7T!1#@M;qOHSH{VjbEW zPTK3SPA##@*5{DEM4K)U%d$1GR9onz?a-EK9ZuRc(Pi5C0;w7;*Sbq6mup)~D3@yk zC6p_)+e#=`XdiGWM-nTvdrBxT&>k(Jyg>W1LwQZ~0_{)<<%QbwC6pIxM;*#QNP_KZMJ63<`OYey}J=QiuLKUvTjQ#p;WoZ$Q|XN|r0NjuOf%weuayaP^hix)RE(w7wF`tF%Ff@|na{ z+Gq*o2JIe!xPE6;Z_vJMQL-Q0sP(R9sg)P*)&?wy`*gSVX$xXM*sVQkLF@;+wL=0i z&kL%%wLe*D%rm3?{*ofk&Dy6XMqu@E!W2GkiOjD0gr-|_e0mh$=P{ZykhyGxZXECly(Xd-Po}Oj4Qwt$Z<*!xo zt}IJ<6+%3rfjkCH5A&C=J^+jtJGy)@r4J##^a#9$Jvz=?T8le?@zC7}4Y~)RDK+xa zeTZw=pJaNajZ+bK(_Dlep;W0hPo}gr!;~JOR6HkAmSYx0in1}E^3+n!L!hk0S>;l- zE9Ee;ElS(y&(UJJZzArJ`r0)*c`Yd``bmsAd=a5r+QNe!Z`SI!5!&{Xj57^$c8gX$ zbQ&;*Wkrh+*Qhj9wpuC))1RExDXIQlN@Ts+Qn76qV(ljO-ixx8mU8m8t#m$?;Cg)% zp&PsOEFoK?h9?M>ZS}uFgD0$@F~vTWtsb9V**4p=-DgX+eFdK0dnk?2plt|E;q0X$ z#E(z^6`?;gf&N#(=-6%M8vOxrH+Gwuf4rv1?VYuXZ*3u$UHZw>pIDzof2CoUoB1D< z@QIS}%vzRTwd{+CYxMLa4sWVs{Cg0(=r)9KhLaiNLa0*lTG14atMCgFze~71P|vwO zjZmYnOUQWmu?7xH;}1%U$AIVON=2GBV01c5@Jl4uvl1#AmP*6(4i0Z@JV9Wd%$c7kv7Aa9%_TCN z4E@PS%X~B{<$U7W{iF1X^FOK+m5a;LiG8Lm;Xlf!R9aNl^ z#oSiAUI6`&{t@jXf%myy63SNv^BIkIt$o^afx|9Ms|xbv!!WqMj zT+eud2p=&Piww7G{N!W?@e`9KJzez|qe;KDDq$wHk5;uKe6VVfzDWOW)!F6@d9u){ zzg~5d*`Q6;3_qJ-ki1c~q zYA;0|MEJ+ZQ`HT(zF2Anc+u>TgDTY5fs%J*}*NHrz!U>h}Y)t^O|L8bSPZ zkuxEBdqPTlLQ1R`%ybD`C45Tsvsk3nTutUcWCq>Ua38GVU<2F6*Bd?+`5Ef<-N*}? zzcCPf3E|S{tCDN3a9Av1Q2SDFksj0z2M3}-ZE52W!c~peBfPxvCWPt6JqWio-i~mn zac|Tu^vfjgGO^^95??9tbrN4E@eLAxL+r3u;zzWvG|rCuTt98RPkT#yp>dI(C4P<+ z)qgr=X}nKp1|_^f!aWk+A>lp=@0HN4^E3EmQum-&&k>IG8|%+ly= z;^#KAX=(hE+H{>IY1LVV$AxmP&d=B9>in#IvCh{1gw$f0&X&1Y=RUqn%6dZRR|@?~ zq4&}xO1r)I7RVO84c>CSwiM4$f2Z|Gc(a6i=%YxzAMeU=c%gQt`+ndrbsrS`i*%Lt zukIHG|1$j)lrQ70C=OqwGvS?7$aqa-yi2=E(>yMX`S>)(`vmV3$|fshe3Rg32+a&D z&fGeMrc>~pg73l(!;rg6FkOO43r$)uX~FbpT(2xBZ*gY@pB4O=P>u;^OfWYKobD?jNrd5`0oqn?+gC>f`3uF-?c@5QBq$PZZAvf%aZESZ+1f) zI!m<_;hR;XI@fwsXD#j5|3Fu`4hiOvV7?8S_eG8Z-{*Q!;^bm_axr~U;z@~jNW4Sh z-4Y*_aKD6yBs?nNi!Lsg+{`Cwh0Lu(;vH^|cT2om;-eBDmH5qW&bwbQ`vr4I;)f*u zZAm@i{wO#c75q`bzbN>Z1Wz83-@~Q2JxrMtOj0nXc$oim!FLG0L-0LzH(}Eup%$Q)t1am+z2Ly9KFoy+mSTKhLqnTpKCYPw0 zTw;@8I<1iLoq`_|%$QJ)3Fd%c4hZIeU=9oBuwV`g=9plP3Feq!G_RECl@h&NqRY!V zNeezL__W~11T!X>F~Qs{lm`TVK=20yf4|@l3;wX+4-5X7V2%mqm|!%YldbPA?h;%ULBtvFL26U;He91}_{D76bp?SfJ}!88e`NiYWl zb3iZ$1anw0hXr$3FvkRQOfbg;;|_h4B@BtQA(1x3{HF`PQ}CUF?-YDmFloW01v4g? zF~N)pMhlCyVUad0(h8F~PWFA4T5j5-yYQ zpoB*xd`UugTxcX*CgDK|k4X5Egzf~>?2+)GghwQNNkXb-IjNfEbXPNFQZPxubV$5I z;-eBDmG~Z^JSgEI!5F7ap$mpHwaQ#)!I(^1Qq zWrFFIa8&T4g5M*UgAyJR{2{^9B$0oTaGNCD1k)jyWrFFIaF2usC8RpZRmZv9b(||H zn51B)3#LOb9fDaVm{Gxu3g(c+4@sOR3%AM4?U2L|N&Kk9k4l`T2+b6xIV$m^5~q5> z*E4><#P>`5ki-v3{HVl_Dw+nS-`^l*N&Jw+k4pTg#P>G}O{36A{E)GZUeX@z^yCvQ&@%<9tFY%)i zKPvI$G@+j+GDv(>;zuQZRN@_{h@7V|&3=jRmpDxq*`|wZ67P`ssKiGle&|%DIdm%1 zBu|sFPLr}EJ}U9<(;44=y5J=~D)D4W=u^U9;vEw2mUy?s_e*@g#DAncu0QMgo2$+} z%l$u|Um6#fA29DT{oeDv&w4w37x_Nn`@65;f6c!y@Qc9x!9NDI@V@Zd;T=`aS6v=? zIC6J19?Qm_jjfB{9RFJUi;2em1z- zP4xL7Q~oZv(Eg|0#P z-WXHf?fqBmx;_wN86K8!qMRz%?l|wBpSVVf^5OVoP<}Jc{C^NnBCdE|oKPk10cJr#X_;p~M@qbLV^%ybpP_o6hNZlR3`Z^hR= zb-E2D>-c*&8R+A2*j$9p#12XXXNv*|S7;%Gi}CJ5gwDarJ3@1`IKmFC8sU7rqY%NV zf;xmtv?&N@;SGZbEz_oIIBy00w4iQFQ2#9L#HpJ5=rDZ`r%0ZoU(;{t|6toHuAQ!( zsdZ^B`t|w;_1&&dx*lU0X-R(j5NBPNJ>F-s8_tlC&4d*WS2LpC~QL2We@jhGe*QcKYyH-DR4*o(ebzIB4 zaD-Om{aWtJ9`s}nY|R6$dT=5r3d@S(JQFzLs)MCX#x(_3J+1~^jku=bO5$q5H4WD( zxTfPe71wFFPREtPH3L^Ot`=OaxMt#N!*vF(S-587nuDty*IZolaLvcH0M|lXi*TKZ z>nvQ0ah;9p99-w(>cG{BYYDEUxR&8sj%x+3^KkL+27ITB>w5zkjjWp+$cueZg5@dv zjTZh!;L-hoPc^cxZRc&tfuOj)p+-sXq&}v8~CyO+aL$iZG#*v z|2D{B(q8Rcy4Q6c{SeoWT^HhhA?_FBelhMQ?gcWLYeVc{@pP;e8 zX6=1}n6_8js(mQkXEPhmm)KRnY@!&hLJ*-3}yS!n1nKv)%V!X5AISD)@@q5so!OoYs%*)wGL?{0*RpJ3AXi{*QJ2NGx2T83 zXqWup(7;mst;*>G<80|1nr;hXo7eQsg*u_qK}($ zMJ~TRJvfN--ZY&nuS`#o&09!IhYEwa?VW=-5x!|?P*^8teFe~mu*$iVAa-NGaa4x-4 z{f;@aX3-%2ys9#yLdTrhvu3tWz|5I|nLQq(YQmPtOiD9!%$YZ@gc{&nsH#|~AWF*= z#5fLfVMs8-o~>MsIdg0yUC=($j<>fjfaKeyGZZ@7=i9a*#y*cM=bPzW+LtT9mI|~5 z22^gkoNZB&#e(@L6jWmKHs6J_P~v#xf`y>$9ooKqH`LqJzcaTj(=m7U0>}90(b9Yd zT~|DFk7M*5b5WB@V$7X83wg5^qq*}GZ=3NvW?by`g^M>^ZM?f*{PEH1O*RZJ?TN)Z>;0Lf2&e#2ah6)>X7V9)BS5Q>0TBF|5g8k zLU}Y{pGr#6Lb@{3zh!VMbq)+<`g^UL@`to8=SaXqgbeGe(gOqVaYdc1%?;&yct9=4 zK&hPH(sW;6VO>tjmL6kCH6E)(IzQdtixFkbP(P**Xf_tp!a3y>Eb&VaqN8P*p1w4H zsY8@+4g0F^TjoW*Wh7fFbP9A|pf_HY?iQ2{nUV1=S;^e&xF2MAVDY{t~9muFFS2CL~O&PD9Wi8D2D>St$NmQ8QzM{nfGpv=6sWbzl~`Y$bH z@;nbI(%Xqk^116|3Uh)aRvLOqp*XkcDoDjI%3N2(sktm=F_DEYLnyuuIxmudUh;9O zw1LHkmCyBuKj_2UUz zUwSv&mU2J6?2*LLFw7p%a!Hsu+73tN!0dzUB0Dses>0cg&B}*w+_k$rt7-~v zla1`n(4LKjA_8pLoXD=X@m z;Cl19++fin)tIX!#6)8ed{uU^W8nfSKzS?2v0~cl}=~- zx_H{XCIdt4!HkyY3aU7`$m_~rW-Yoe!}jyohm{0U2_ckcO`QwGNxkD-pxrx9Xd+4%OkUVywIf3Sxr&Nl4xHagBev4@|D0A!zE34uX5~~?YmFsey z`8;}O*YbW0BYA7pSuO+GI>)ZkYF^80ve4_G+KclS!7!z&=VO4s7)$ldX^bbtbXF;x zP(HXQNDagyfkn9@+lLW}>`{$b7soS*rA8MScVv3beAJYkV`zOfS0d~UU?sVfXBMS+ z$taU{MyrWD$Lz_REO_%7EPVQ>eE|XCuVuYJYjZHXqSv)l3+*s(r}xSDETVT6M4486$!>H- zE4~^tR4B)W>`9*mFTHq`nj#7e-pkeSFG_%$E&*){PFj)AZ7-iHG1kIxy(;=5PAKt5 zmIuE$4}(tk!Eaz@xqXl;XerA!2IT`R_hoGYaCx#eZX34^)5fJ#p7c2`W$D&T&$e|~ ziP6QIRX6BWwp-fyd8|`ABBBf%aFmY?A8Trh`{kIJWOyboTPTvj2G(W<*|Ker{g(rv zuAByu$IoFp<}8>cCSjK=Ji$xN40p=>kmqx|#3E#{;_d%o}{8qxfp(UPAytMwK46pDaUb_9?Q;A z=4e=`VE>FWOf0ONjS!75)G1yyr9A;IY0EX~>#R#fnsbK_c&QBEFNyjK7iBq7F;sOlJZ8pk5jU+ zcY5cESNApR;S(Xl*9lhl#8`b)!|g+pN_MuL?2G?UhxY zT{h1#uv006qjKeW1;7vUJWp8_%VPI@sB&|5i|TP|#ca=W-~sGi?~D8UcCXB(dwI;@ z%BZnZ=9`?kf|Xa;32vLX$19GWEl760#gyJXFUX}vUWXx8`6snUT}iSvnL@5_r|3)M z8idaN{|m^PFW76%lKt;CwH2N@X@N_dunoH{eY@4lyg1%scCs;@-!fZ5+1a!@6((Bk zb7)n18;nnuQWjqI%9GVtnE;iocoQB)zgu?iq7BDOq!i+~4mAUjffaxLvP-%Mx=Pow zOkZXT*5?W_n>u@~-J<-v6F%MByAfSlbLU~7hy4twIu@H`j#EMjWXLTf-5oix5;I3v;wYs ztF;W{OX|}avYIpFZIe6=my^SrZFY}^<$0Dh zp5?$sL3PUsd$DvV{2@ZgXKPOP?i`f}~O@^7ET(K#HQBhlF$oh{K> z9L1xZ3|7)Sz*TNaT7@nw=D~t3wd{tyY`b__?3*Dzk2aR?5pT2>{Aw$9<92y8!kSV$ z5XuNd^0LVim*LE(nDKmJzd(e9)cjC_Y~F0qv~e3&6ST2^J6Pg%AN~dU@eWWQ{+)@} zwubTQN-HIas)q3n$Ozu)7^c~{lZ!73(Vhb+F@t*sxoz6>01e`OBo4QNOE2D28c&%eB~oKkls00%S;|9vRYRT!eIPnd58xQs{UY+7|8OYQf7cC(c2EH1w1Q|J_8n zi%^DYW!4$Dby2fy4XleEl)V|3qGL-KL{0LLHi?+h7t6=6YX8+p%}HLiB5Yn+HbB?? zNRJPocDtFsIUao3iyXJXmR%E)h)K_{S{IxK;{*jE*8APWx4Q`7pBNH{KNex&KVSv$fbfUp3Cs#?Eet%?qhmHNO4@$g7}OwL`GHo>A4YE^j!x zDt1YILw!T^(%Aay*wtD?xIU;7(^?prV+=$yrKm}QS~W4Dkx{YM<0UIGeWp;&(-oLi zx9#dyrxF`<6g%XJRYzBG(T*fTo;Y40jze;ViZiR~*lr6Qcg5ZHA~56XxoQpdvGw&~ zW`>+P6T~&q2QxB~F3s!pMzpfG$nj3OQSUNh)vhFgMAyL5og{(lL9FYIcq829*XltK z#`%SCIP6JML#z(4&Xf(vRS%^C_8LhoHhO2+n{@H5z8-&T1oYvkX#z$bZ>%oX5Jnt? zT6FXyUJVB$_~%NI*OQ{?=*J{H066SUL5y0cDy`WyFV@lzylVgDXn#e)*03BR#VLil z#;VKkHc+lCw}!&KPYuWa{-c?{y2K5s!ZnpCQA&xHLrIUOT8Fia+MuDR&6Kv9C~Rep zfu!51PcZ4JcL3-&I{L6^xk=(5lkk8isWsH=W>QBxSL?ncRmVm@uf>+50boM9(&=I7 zRQ;es-Aj5b5gYwZ7`a5@K@A52?4LpCSg~pgr}9O?^!pxBZXz5z8?6_KX!v9}&_Bkv z!WrZ9OM}D`VP(Le8=onb@WFPxvC&^NlE)9D_>LQ4wbyieWA))!60&ll2Y;kw^cR7M z=F)`}#Q4iw;c(3Kp~uVrSUvtFV@Xs%uLn`Y^p+<;E2yK}L{-p!dOiLyUiEPKt0k!! zt^GT&`h;p!C3VB=W+lMbAR5e7bi;i^(6)Z41fepz4bba`sFT%-hQSRYpmO-&#exYB z9eD-L`(Ed2!- z?Qy8$NpFceh9l?^<@K2gR+*l1FDXwAY6XZ6Z5g_j*f*IV$~R!Lg;M`+}*~i z(d)R^_)PSBrivm7_&Vv0PVzifaUG9{><|!(Q_$+MLRx3KEduKnn`cLo2E1`u=~C3Z z=qmJiU8Gn9|Iaa>>B9Kf5Nq%XNkep%$K>G_-7=O14;C~lN!jQsIHXv0ScmFRC#KkL zQEV5A?a1s$=4uY3mqsB*ornPihz^)posiZ=SJ@@Qd9WTZO8S#5OE{W=oQ~sx(_m-i zRlX@47OTX~)R~rrs74uvXr`VEXjLQ13<72aCqP}3MJgT2hyA`^;F18zzh@QKoS)1prqomH9&L!c-Q zdKeMFgXc+{+iOal!4xx!2DT)yW(PKQwiFZM$w8CbXoxk%rKQV8=X$ph9X&83i7`P* zV9gYOWDS(lf(6(!V-p$;Nl_u5*fdE=oft;zbwkG#NDo*8A3K`{%mA#~fg!ZUf#{c0 zg-fTZO!YJ;>9{_u#dMvtn_CsZ*jWw7D5?TWtK8!&u12Oh*~g!4#v)FP@%s|PMEaQ7e$cBoY$KFP!Wv{7$# zHM(n{SmwxH)**{)AvQKA)2R{8&V!MJ&@SRG32`z~r8H_-@{QH=f<=o*6jP4dsXPxI zyM$#PyClY>5Y&NTLJE$Ni_`JnL7C*{RZMuY8Af$|Y;agec^iZXf!7Z!1K#pA! zM7JMX5BTcXSlWPV9(_A(@K7idMKm94!%oNYb1VxHrT4IR&BA9bFfloP8}uxC>})HQ zZ%&l)tocrmTgX^7uK;3W891MY*i4L)=%dvQ;Rc=$VxY(H8EZi6W17nqmsOot4PyX# z0^JbAFo|l6evs=S!);TnIw13k9nwHdK7`y?tD>%E8V_V;ug{`jia0Nb>9m5pm>(bm z^vp|LwuE_HOkDu8e~jD;0Z(g9T}F_ODLT$W=*50i&mAjRg5Z2W6!Xbkzzfy&ib|KqSdFb*^H?h{n>7x2O&@o0 z;O4-?fx&?pHOn_p8p4y4Jcv}B$%jxldoWeADp5lbhFYY)NL9mk`JPL)MP7~#bK4bp zMA#gPU^G)FMOKapA5X2xzu`xi@q2jsb3E2h&<@$-0Lybq?Nt1iw$W+w=lEn%N!o>^P! zSQZ(!Psp&nB*S*ju-(b99U1B-WGHnlb)2Ej$xz24KFYxns58TRU06bh$PJ7=%E3z< z{63O&!#qni+Jrm)eQl%3_rK^u~29CLHvg{`BbmFz#MzFy4CTNu2(HczaChg{oS>ZX7%`kx@;J;c;sWFBZ=unw^FmX>5o2l`60=rUjGOhXk?gNUAZKv(h|# zt-?(KYnOu$c2i_v+!1WNTTpUF&1)aJkHkkmG&W-bwK>$ktv`2NKY8sp54)G1xnWyo zXSP3|?l0uFZ`fSmF9U2C#M>JM2f#jxO<&l6!${dd`;{f$VzEUkY_MbYVemE_2KUGT zOP}+Sl%cBQ=ITV$D>cP)>M`bL7o}c`GYs z4R%@wJ`2^1T%8`2BXkb73NK0FEo%qX3xf$%bHWS4?@ruGoczUieEsS*P=4#!UwotMj_|5P=0Yd zT>d)Y(sxx#IgeoJE7;KqZzHaFS4B)<6W+ov$T=^YzB|Fod6>KBa zq0Hn>>$E!?p7KR}q;1@3_e3$pv4#TsC#TaFBCI$?rjAL(D|{|MdRLJ{M9~)!US`5R z53bYxq>M}!%1*`$#&WajO9JfK#w)_TDVOUrt>f{bw0+)#&7`&hIk#G%$Xn=l|TfvMh`EpWGW z&H(!zO%=TMVQ2%dZsRa?yuy*;s&Pk#r3LxOu$zx-2bC47D!BX6u!cG}>`ue``SA9( zNMESpq>^*PLAC?iH3?v!8xC=bGb+}V(v_VemP|bIaz$fkv2k52HsQovAz-~!%xVnx zzy%U>b4b@;JfzD# z%fSl^ajFUB zbFMZ}a;_F}=Ui>5t59;TwhB<`xmv(w=W1Dol7qCdiRWr3Z9!XCIy39%1a)G{P&aWb z#h&8kW3#Mh%ksGS^zDP}CaiAl%m{@S&JDu8=TCS9JO>xKNuJlY4=eGejO7ei_Pm*kSKtqfwt>z{yshbF!7u_^-^4 z0pwKxTYp#iG1r(~iqp7-z!s^Se3nK!k9`W3Em(vITec3v;#&H*J7-oKIq&h$tWG-K z8QCaUb0009l5mFKvIG9ox<&px>{-P*jxb>zge-M9g`%J2PQyZn;CIm|P&Vt=BPUWr zY9P1HvC81$uw|;a0~NKUL?}PA>Q^T#Ig55~fN$3Ke^|A)!XwtP%q)Zv-(;w7o`tPr znU>|i^{NTB4|!Fcd^kO-V(j%$gYzbid9@aIdvRfxYN#9rSRiAyMOA(PwWu04+o+=` z`@lrCgDE{z5w!F!77|p9m7Un7*s>^Wl~qr>8KMd<@y^w%&vJ{E96vSs)!{G%>KRBgrR-pB{snek8lQ=_a*}JUf)YlF8dvsOf&h7+DkM?M} z8Yq7J#H3^1ys7W-T@?=>!kI1M9G^4Vxf$!p^Y=vH;IaiDrVYydMR~X?`<_!ITQa8e zXGAa)lFx|LR+0$E>V3}n?TQpQzwMC$pt|B=tDxP7n8r|tt-SVOtEzEFZZG^_ToK@< zCA?4Na%rY+u5_6z$Epyl!nGFHRk*IlHF_%tKjh$79Q+Q!*ffs4b}@Mj(~GUZ|F6Ak z53H*w^Jnh8Y0@@H(~~rhHm{p^nl_I%eT6{NCy&#HLR)HEXbYv5LV1uX(>xGgG*;HoWxQUo6?y1TgR?y|q{o0)UZx%b>O{^4KiP43Lx zdHm*^Z@&3v&OFWl!%4td%;psBUBW*~W3lpzc&xmJf7R=tWGr6Z)=oY%JIL9KNDJs^ z|LJg@!BH1GaUfFYQvSV6CtblmCIYd76PyLt0({R9A}&DHYBJVxq;+hrj|1WYGB%L$ z4j3CZQKZcrd=YtGOh!8y?wuFloGeJth};n zMs-bHeX^mkskx=Kt$k+4tj@0PIlc4dFIc#!@3j8Y&saRLWa+Zy-r(C0t>Z;5N6;p@ z^gcB08Pk5-5r=|sxgvi`js0=hF(*c=X9F1WXfA86W+OmX7_%x!myee&U)~H+EfQ^R zTNN9IKd}&9GXxf0nJbyxnNW+@XeVZt&1_?XQadOWGa=4qenuH~fjl$}1NUh-S;TJA(gSw|ZioO4V}WQ0j#Qi%Q*&NC)v30|8O zvvn*&6L<-@;W2Ws|CtPez4hAyRIf=4@G7yy znQZELNLF7`U&)3^raKJEjsDLQ*zy6QiK*H7y5|F6PSKoNHsYe3$gOz$u>qnI+Lj@* zDaQ4wrNph?;@%oINR_%V?1@5pmfuSL0innj(EjX|4-VvuYUXDnFnxYP953{GYkNC{ zXyRsdk(K2d%6f~}+u6G$I&7=gyS(=t%YUGjZ39{TZhs{kaUAwQKOUlh+g_vL&Ngf- zfT)T~1a7f~YrDXWy0Ep{<;^nUQmP>MX-1M-OE}^ZufM9l5edBhx&4cf!0TVuzuFO( zdi@*vw*&~9whaUgxC51JFhN;N$sma?8qE{+lpkDw9%-nRdT*d=pqfY=Xc(A9Bo6cs zEF}^LRt;Q0Bo1sF*cl+PdnvduBBo2B0wn zaJdBl;n_u*z8e5%xo4HLVE}ZC(lR5&ZqY<3qgoUoXIupU&-LoqFaU0df~zb5-!7iX z%<8KFu*zLk$3`T;)nfwGTmyjB?&@YX7@%1J9(?9$VlD>LWFp) zXl0HHABGzvh$EoJeVKG{H`a>625H$R2rMRUHaf-!4HTAg;jtEAo3db`$ul8Ic7(8M zE6ukcea+cGEtx`hDv^i7E;9oTTKq))egtWt*FJ^H+1{uI7jxQ*k z=m_~iZ$rg~dN@Ahy`$nCagIn^p5_wyrvEpJDrb$l02@&H# z$$YLvH*D><17k<{J0)pW_7IcUeg-neOd~*c=CS!fhQPHW`_du zfR+sQ)a{x$i-E8FI0&qh`!O`Q1g_a~{{rfP<^D6}ehd%fy>M=j`!9m?J~%Ix`_bje z`{CRp_rIGuXSrW~6yHz4`vCp;I=;^Ycsi4UJb9-p@0@Nd!_&?{fx**HSe~K*XY;f} zK0q*cx$-W+uw`I$Z|7Id0~Q8So((fgev)ABb>+P?j1>*@$uVJO%OQff&z1MJ8Y>!R zXiS(+`6+_A-<9{HP;40(-2?lD`jmyq?t&q2U2>RU4!H6_ld%W}qgm1sU0nAV?Lt$` z6tw}SqsoREI8VsWWQ-`~XGND5sL$#2`bSW@cr40I6q-za201s&1Klh>2L|MUmGJy5 zJlDtrTj2a0oO|T~^c*BU2ju(k-5-#XZfdBWe880tB#p(qsN(E1$bOK?hR|5DbtGHk z)Vx8@0}b*4nrfg{OG>0i9;7UWT{&E5EauY$qfNt{>JD@2AZIxt-5&kC?I3(SEbF!; z;)#>m-f+DfZqn2acgkUm%+dIU&z8e@E+g&@ZJwT z+2+WHsB90r^5JS@1=yESmWLwQ=hJ4`_i&AT82zrF#a#J$%HohK4?$YlV)kLq4}#Vc zX4mIAi&zA^1jcB(VPX(KJUBE%9-$gY zrSfw#rFyhlK8hiUpT#`+1Ph zCm(}Wm0tuXhHhv~ewOp)A%y zC8!c}!X+5VDuHc6VopZA9G)Q$n|e8%l!t@$vQR!kSw88?Cs8kK1?nXu%SSlN%*N{H zX6oh1YWZZaUKYtmDT^bnJd!jPm&!I)tZ?=Q4~ayx%C@{23k-} zV?EL!kF+4gXFyN4JaQU0)+6|VX$|=$*qh}MJeyKuJ#wWyvIkDI)g$kfN8|?r)!#?7 zdh#ipnL+il6<}UQNgj)2o==%!-c$ARDZBv8m$1|1q9Y9d zWrl}t0Nb;N8H?qU1asV#$7_sbVDwX*uTY+}F#eMaWYRD2fcy%Ey7E=PvqkU_+VIp$IE(Cw3Ldf1GdPPo8vk`bYmu+=UGxSt3Z7HHWhJ8*PBUfKYxxrt+0`^B={upx81f6#|)Gd^&$PJkp~?X#r(CjoTBn@0&Kdm4D*B9V$3BK z2*Nt~9YQH6Q3d73vNX}eQDFK6)fLgztv_GLe+Iy$ay6;dScZ(C3FfeLMS7~RNEOx?EAHU5BkC%9rABn~v{tv6$J1Ji3B*ooVX$@~0BThsmYd}< zIA^KCg>XIt=OR_Of~K@o;YwAwF~{uFcM-f<74FIr{5=F;p$c!b6^qA#gyL{Jaogs-z;7N<{k1`f+=-XDQc80f&m-y@fTbc(z^&WEQ|oF57OEX5>- zo<@HJkUCZ7kJP}cP4aolf(}?B3$}C?A_M;UOn8wAJ*`en3qo&}FA#JU4$uRdt!U^M zP6=IAr>cU`7s?+KG*0=~G#QJb^`oC&fASggV}>_N9Z6eDs4lJHz=Vrv{Ycfi3JbW} z(r98nYfdY6mm46O1j!hz0%VK)38B=vs; z&6vOl(q?#y5hO~mlSYuL%~fqPjFm2d2(}tWjB^C3+Nu?{aAK)Wwe_ere*}rlF5{t^ zYIjvTS~**qbfJf8R=UO-ssUyf_pcpAssl8$g&i!qfAv?FL}NrlV|APq3%ILY0`=o} zwfWrDc2uhlP%ck+YF3S!)e7gAJT<#U&4zP}r#fp?XE!`Q?5VCA)dkP3p6aeq-IyMm z?Wvv`)#Fe60RD3MA~CnuRlT!}6&DMrFI~t@eu?c%U(||Rh=o~N4KP>8mk4H_tL8Nt z%fRUVLBoKomn@9mEuer}!vbdaPC}XQs`+S7Y-tqDlmJ1FIK_SefZ<*-fGu#T!Zy5_z z-)hyjfz@>1#j5YJKxJObYP#Q5{ZP|vnNn*tZCN*lnntPju$sopIZlT}uw_8BnzkTg zsA+&)$7=cvSDgV6wjx2sP}2a}%X)ONs}@6#vc(`lHEp>*9yPtVMJ@K#G~lmi_yJc9 z0G=&^&r;LjEXJp%2U^sCR?`FX)WATXir&R)dWox+Kuxoy852;`Hp5e>X_O$vYI>=w zmO|yRl`er%(-v&JYI>^cGtNrYqDm<;!+s5SA7)26ceBN&bRh&UV$=poT326BbkX3#PPUjZ$tf>bpd z^pJU~CG}e{V<~82NPje&3ZV2q?xku{NgC>YsX79d)`d=M>Qg^_=h$h1$L*IvAq3{d~23 zM|7yX3&A_p_A7G)--+O>)%KL-FA6K)FW)5ord*Y3Fc!_CgcuqVE5SI+M88=w`yv>} zo5YD>sYaEWr5To*ty1%IkOhXN7OK=hj$kk>wN$0fjt&M#QuyBz9V$`e)Hap!hc;B? z56C}Ik)^97o@Ch~8KU_!mLIKyB1UH{JlTV`ESd5-B<5xcl|#aGA#zPB*$LKQ(oJ?L zi3uZ`bd&u`o|U5{|At`vugwws?+Cj<$*nnp{{z97D0xM6FqkN>Qc|kuVEGop<*oP* z1x4pJ`A6d8kgJBE1=)(=qtWQB*L}u>SeBbhLo?M7c3BaZh8C%z6`D&!XR4uGYyg*r zE>J_c#Nj^?yiEe>F?-NhVAPxX_?HH73$>v8;RP~LG--T$sJsv4lalDf8boH4sOUn%KsvGlR9{H zj^MWuyhk0}7o_t;3OdhIBd!{$HCCuLLv=?drqDr0w*~#c$7O5A6k~>3wJl(zPK}Uq zIDyP&s}ZVZJPVI3R3l5HsRsK;maCCmMaDDp$VN4?Jv#ALgziuyIpiPD)+1M{kyLbA z385OfQH@A&NOw%6MQ&H9(RZm) zDWijlZKLuQd~Xl(?GA+%Oivwi)v=_pPC5R|(KImrJJz6%QJ;*aaja7vJ1qw(82=qx zs*atRBN*eqV}t70=ICIs@Yu!b*xq0%_A4xBdFmNgJ%eWtw)lC^uV!o?%o2PQ998&C zlX|9yr+c26tDadIME$Tz5bF0_^*zWGTX8WrCW!8AILM!xfM{*%dzg?(OXi&_pHQB2 z)pK3O!srP73XrH1k4Bn^sNL#0jONlvcd1E)^n$Bis5MqzUOXt{iQtdC;ExHxANj!_ z@pvMhz(4Ff90raj@)L`Z}U7+r%r_O{D>-|JYR9uD+`T9QlXEO(t*$@kx<2mx=6jE zr(|9^Prb4^P>#uYj+)|llS?K~N9EB_JM@7_;V+gSTNT@cfC=V12{wK2!S`eMLNVQ= zNu~VThdYUN(OoN|1P;Y9 z&o*0T>Qi=HFMfcpijWX%kqZhI=!)|rAje|n_GTv!3;p9i=!eea9I;t!qo?-lV|X@{ zwjUxi>rC7Zof?)t`y=XiY9CnIM-Lz_)4s4wyoSrQ4=m%;h<=MGfn|K+7`u@VEaT&1 z5JWz(tj{&t=Nj68ha+(qnt~1a)|d7?gbzTW|04ug8bLqG-=KYO2*wx9XeV?UgKASZ zOOgXR@lD@IIhg3&_(K(n(+CP@FJbn=sit}Brmkx@SrE7? z_two?H-~&gi>go+-nzuPBKn0Sc*J*9rMJFtJx&!-go+ApePTWCTtWbFQLvkEfC)M2 zgH6VRI0FwHRni{&sE{qXLE^}fNw?2L!}b#s&3NGC5B4kQ(>|h&L_32amJ!wtHN;7d zyv^aGK6p<9h$KQ$&|)-FI`k8IvZoV2h+&W5_-aPphGcqBMZx+A4f$v-#KFM^qL1!m zMBwzK#PDG4pR(cR!|4SE9*#X16ov-92r?&yGJ;6?*|S68AkGh4F&uLqD2tp`LSV@3 zsOjF;)~$LMYk-_y3Yy_vQEftSr(lmhGH&tcJsGDs zF+`Zy%cM%A!m;51Yat$-VJ%l;D2Sxa=|XcmN1&4PCW29a;nQ65Zj+h3o1}AmC!y}q zY3TS8r$IZMjdMm!H4Yqs>~Tz~;+&320EgM=(NFV1X9qp{YPxTBcVLz;O04# z$DFm@6N*0gs0QaDc!D91aoV$|r2V6QLAM^2;^=4qYznlz!5B!eKm{ zj{VN`E~0Fhw*gfH>@Wde#~!LPdIE$?q{L&xTED` zesS(D;l;fuyn?+bdHZbfw<>TqiXiSs2_(>u!kar%mK>xI&Dh#$Di01rM=$s8h|AqO z)8S%~$i#!g#A`>7MhZsvY#gs*pYh^O3tqHm@+q72sRSp@*zY)MgW=G~S`vAz33MK8 zGJ0HoN5^%@VdK_fR3St;x>;MuiV614(GEW`InW1Ue9wdD z^bWnW-aTr2JnSHFWN7Q1R_YW%cTE0Pzg(%mYxea8bT_A_z6+1Addpxqaj-X4Sb!)l zP{n}(r=;}wlxp376z|jmEvMeKh<$)ml}BkqAQ)?Q3O;K+pQVPKW8dF%Hqvv{5|L7i zXt#Xc20U*AFirJ>^?V`V`D5z|ht6D&O?e~=qIf9EG|k7JFGDCChR|mDQ|k$b@A)(9 z`7_e9Q9HJDdpoMz8{_MNEwW_M*KFXCExdSWtG#rqJgQqIyh5!K-qb3?8;EqPJgQqI zfdpISQQazS3N#tr+E5+b+Bj1z^3s;Fj3HhjDx1EM0$%9I;}CG(TZ4D;KrRsz@<2~# zTEP8%F=;6~j!2sQh>ppp^mZ66-xRLp`-I(J6HXk@ei#7~Cb{$$n~cczeJ6;586dqi zCme+-MRU;GdNRTqkuJTFCme{vmg#nI+`*M@f9CEY`6A2DaX}8VI=oQ6WIf?9p51t& zLfbix{Wiu+vu}s-hHYZj<0*?{!Zu#|X$y&2#(7s!<2Dm(8_8|d{uM2^$FkIM(?Rj1!@yE=Ch@jrJLi}E+`sBqnS&K(_9*MHE*g_ zn`V+5+lDrEs7*cOZh?D_+T>5ft_FA<*~&LS<+ftAtx8PMR0=UDc(S0?P8ML74XaUD z_!P_EGKb!9Ip9bJ=_nPf1yYs2_{jr1AQjHjg)Tj~)U&)za}F zY~nxQVe>Dx2>VBy%O4|iA#H=k#HKI%p(106@=q4yPrkHgF5oE$0fh7oN718murwjm zKV$Jsp?)xaT^_SOwV+feu17v zyRQ_rDq#cR@RunRM!cG0I6}(~YLX3sBQLKoSeByTkK*8uDZw8l!5^5hFH97{h$o8U zi7D|!Ndn_#n+F_uxHs>2G;OW-iMYWZNIW&+vZ0D>nj&3Df4ZL9P=+oqffs#C&6ip} zw|;6+`cL5$ga7#eM(l}*E2I2dqQZAeg>I5^VhhbpP3c=Q!Z#NL?=&#?3k5Gj$iCPh zeFqd@{zMmI@V!g?VqynZQ{h^vJv)QfUA0ADUb5=qt9D+0@lIS6wd=}Vdw0ES$8|IC zhT^T}HSK&s!mhnH(%n*YV}f7WCUZAY;Kqi|tlJmN{R(u05Z?x&-(Wl`{q|=6<}7`& z)p)M3;`f95uVf~NxoRrvUMao_D&h{R%*&zlT~243E1c~8OOY2Vl_8dX4fr0qNNC4( z*X_Fcs_|VqRD`5H<<~{s29$A$4^;&6x_I}lOK}}d);%_%8+p=~+GO1QlYLdsn0MTS zZ=`X`(Qar4k-GCl-h@~p-zk{L<|H=D*qnwJ%Es~#G<}8>tE^J&aQ5R^x!*(yykP71unf?IBx>pEnHYs%I(-i1<=n#PzmTNFzgcXwBH1q zIt>U6jZEV+=pwu$IEI0Y5CxAc-g@)YA5H4R`vjTfDIgdZhQ=JM--&`JZo2S-s@|V} z$h@l)w|*leIvo)LY_JYA(@R9zHl&o&4^(4JK*dAtBQ6!W)KEw-GtBTxkXNicis|I1 z{VT=}u3Qwsb(^}F=2R-3Dq=Am_QMCi@j^@d&L?sUtQUH8?G?imikN7FRJ?^2Lp~FLMSP~e7?wfq&GwpSyh=E;si?PG=C4*6 zA2qGpnk^&;^0_Vf^!8*=y1zd+nB0^}=7;)|+5Y6Ri`OQ%=Xx`3p^$&N#d`H}qLrG9 zjF0Nw7K)BixGA7{iIN(TuCU)Y7x5(G9eA^J97h_<&42crMv-piaZ!hdC?fwC-xjE{ z(Ustvw&E3E-5LceCcFbONrW0We_p`nI}lOZU}o1K;3HEZFVafuYLfxo-Ig!pdw>9y zsyo+hnm~+^zYe6d`f0jr1f1Qvdjzn%xltds-;8dK&obyg!4g1JA7)e{g|MZyCXd&E zqRydJ{VBAezqw!_^jl~X@jy+mWryj#A9yX~%R$%v)~kIvAKr0y)U9~d+zDn{&JSej zF(M=GF>(O_Gpmez2*u=}E`Qu;2^sll5j66(0DMw<)RO}t(~!6JilEorn?3iIzyJO3 zicc%}oLLPjnO>U;}urB$c`vYEc9=TM5$4Ql4rJtOFPP|-~D#W*~nCm=_YDyWR+xscJ+LF1IJ_F4Q3Uw?q!Y`=MVi%|4mD zk~Qop%Zz+&`E5=yjWu^dy;^fy{yPqCa?(J@YNj=MZW79CHS%yC1I_u6h7kGD-dsiG zsRKrdd%XC3eVA*U$knmrcxs!GKgD*`JWY2Mn$U90vsoWP%j=21xj4NrozcKSHiet7 z;;pXQ7Oe&uuFPM`WjBHkGi%XvNh#pUd=KNnwj3XyWzx+k2bzvD$3?pU)c94Yt>^25 zTza6!pZv=11s^wuVQTK6x7F*-O#>$sY1D5rCiPr##TAOeWe!6$cM9xUib+PZKFAV> zYAq_?u%D@*tuiW9V2++b9sRj_tN!s>9{M~)0;!U3KMOkq-RXW~(FXzOL9eJosUTo* zPbfizOkevpt2&ESb7sD|H$xu*RxF+%%*raj!dS zN-d&ZdHpSsLbq%IVNJ6OimdsY#_boM<)+Wz4bDpbdsu!}^qnkwz$_8f?+W=!z@Xu6 z&svh7Wl8RKDak!iw-Q{*pF%6K;BF5i8R%KpU2uL-26SC$1@95K3b&q{$;GgHhA(14;c?g##rYL> zkHFjE?HPf~!rL4{t?>4az^~!$8$qv!a}`#pHfA-GX2yLvxHLaJ+sB+Vy_{{0WoR&GsbLOo(ccnKMTw3^&_HgzW(3a9 z{Z5%@mu6;#j=+VXa>h)rUid0nvBeAV}uo?Ci=AwYYJOnVc`FJ(cdn#q* zx`P6|*?poM59RTO;YBNvTMfqEthL!`E>;BGSbdZsW>RXP!B18#hxX% z5C!G~+@7B9-k^Xh5-4D3pDkd0d%Yh5tmcy1P_CWl~R3QWG7w&0kh>!&O;r?xEes zEia6jCwfE+{LfjAA%;B(o{BN@vqhwlNWl~td5X(6Sy$n;6N?M;WF@2gkfH`W z82Bjve%8WrB=Ib?#g#h`(SWJCa-!L`GACq%LBnaLg^Ou9_B45_~$k!5=-RrFqRnhCCI(oOr?* z@xO|%0-{xTeX%+I8%{)*${-?X` zPIesGc-)gVcGDTqJI~K56;nFi>99)~$E=ys-U=C%IT*=N@NAx%Y<{o;%`lH=xl5op zH9AT(-7NDi_HC$I1zB9Jr?`gTsxe=0tu+F=jG(53sWsrm6J?$>v)y`$%ZCrEz{f4J zZIrOxa8FHkw`gv^%P4rb|43&FdJ9;K8M?=CrPi_$b4QZ#Cg4%M=`_>oNQOuH_i=iW z*<8UcYVMR?U3pA~tH+S!uar+8MuoV|D)7{YA);ze58Z*fqurveLX}jBC!DEuTo1Va z7I*G4j$&cdl7ctlarz1%W;W!nVw*XROEQ99Ayc#oZ)!dAgnVIl*aMOM0Gji6pCCWa zsaHTQ{?l_;f?np)aD_aNh8#SPhIp7tdPcD7OwD z*2%9s*4~ys#baB3e3pwa<`B9e_5heE_5j$3Q&+LPu#?hsF04G=Uc38YRLzQkte+8Q zVu`oquXf6VJX{f8uW-E}*ZZBc6Rh94HqQFJEnn=p;i-}4zv{USwz5tGA(V9rzdR#N z{KBH+RC#+wPM5baGF{&02o}~*Qd|CqB{DP_wr(J!5Mb}i!L{YT>BN!F44bdjhnZo; zoet2jEL>j}?PTlA0z38P{R)4h>igVQc%rp_Yhy%j@fhfzehfw^gDc$Z$82Cl-ZU}G zF4^HCf}XCn^#s#kJ*D^s1J5WdtmUp5QD*cWK%1syA0EtNMK!K6d(Zf5ufEJ z#0Y&m>bVg!GstTe!@ni>-$ zTI-wnn;~QV7z?@;)wmwzd5qRz3caXB^xvW-%yBTUfK%^d(Xsa-UAJ&LMgo{8%Js>f zJ%(VEJJVG!UNsBO{;)YUVu(Ei*aF|f7HC)oC^mVsZIduMe~6d-YI9ST{MP~($J)&8 zHGNTcAt$A)dSb#Se@YbIxKNUdm~1-`%$5^nh@5BYE-@EtiAqa!tSuLy66ja~v1FnP z^aQUs&sJE>ImN!+JbxfeJEMuhHm;X$6#DR1K4xMXX2p_b(o4t(S)=-p4y(a5BZ{S~ zD+NE;f>KcUXJF0R&%5RV)0Nkr0kvN_8&wYFn~tw z&kn8}hFO0Kt`X~%9DI?#=Kk3zHlQ2%{|2`loRWWJCagfu2Yoa!(#FvOoR5Fx430)U zg@@37=)drpEg{|X6&?Z1`yDB`%9gmtI|xSzx{-OH_vPSm@Oc2=35GcWb&Sjcp6wKV zm$^4%3`TQn%~!he^HHSidbOJRu+U*FSW_#rsZ(ndO4ewcpN+_my>4DRod*~LHs$~< zdwvD@du{}2eq(BL3Org;HvvkGB7hA@>(V*3A`{9yD6-k}gf;pw zt06ZAVi#sb=s~#2WMH1m-J z%`M=UX9P768)6>|=JKZxOX4t7ie>R2XNXND^kL2+#+dpr7(zw=#KQ8NHICevI7Ic< zFcu!Edyw4fcDuTpQNrXK7fDIHXNaMV*Y(&hR-fXG{Bux$v+988P5;6f&oy!%#XFGt zJlLDEbJ9A^$RA^aycY@b1up2-OFq3tsO2FYwgk1n``8igABB%GYVwUA=NDx8guJh; zP3=cS^?NRCRLO{MLI;=twi@OB#JYj;%3tA25NGr(sSEUeAL!6Ni>DHro7j&L`67LJF0sVn-uH5H9;5Q0S zFhkHks_4%xqn{@9jC1AC3QYeEi~cc1-%&KcuocfG$chwV zA~%+&QsyuhS*!MUa$i6Rs__ApD5`y$Y-ZMp)`z}Q^MeHpLX_F8mh5z>4>hbf4l zwaqQxZTXH~SHdCH0!j3QVr?ZPgqYXZQ!swq2q7^Ii6$^DW`=d^muoCHS3z&NMj@BG zEfl}mOJGJuE#8*N;wuvP1TeACveFWPUk3*_LC~Prk2sm9ExeOIB4hd0svFls7A*pn zm`Po@iGmP7d*s9=`=w-eZF8;iQ`}JK4?dnt%U`LM?QL*w!=jC@;4D1X=ST$`#fXD+ z9%G9($~ebHe_+|1Wuxbp(N7Z_VVq;5Pg(SqjdqpMD;s5;W1~+q{ZC+{7XS+zy^vp? zk(K;{jjocnXXGMz8zUF!9XE8dB4Lk;0mP(jX2bl3! zTD}B}5}dHG%~%Su5)wiz`-etAaL@(XsfPTro8 zOXY2hT*mJbJ2DAoKxirWXr`%bN4J7zAv=?W7}D5|q_ANwME0qbrAS$|s;FTGl%=fF z6~LB)ah6@&aK=mQTWT1SdRg(~**`goMadx8`KpI<`f$ip(>{5uwy~~jSwr~Z% zJR|G*1zWgM-kuSR=dgjVv2md_dH(%byp;_wO^FTILqdzMCDXD|OaQGf?1!0qN$X1~ zwW^R|2Aly-fU?%-0Zybb9+=Dn982U3aFQS#?B*5Lbt*?fh~XK=w=ZX#(7ud3nf4uD zW?5nHs(nvX^7!`U>W>@WiYn%oJti$HW5?USby1a(E|i*qnBTvkqp0J z8=K|r8QH?`)YnUF;~}#B2Gdlwjm<6H3vU7){D!a}X6_}nA*Ix+LWUVowsD58fD+q4 zRoHQeIK~488wZO7<9M>=2*w3TkX*KL2yZJPA;c5M1jy6|-%;ZrKLbmh3m0uT?gY97TJyir*Oaa~1|%c& z!;uR5*&*rW`eB@-ACtF$i~7lz(JTEh&e4z0qPO%@D5F>UVVt9%fJOferO!d3zrd~+ zgQ{NGyEwsKM3i+mBzaFrmteY`Hr+Sb{;;e}!76yUwONV9`Y<&`oB# zT{hjmy}(Xg8MNvOnnU0P`#Q`lWlh))xlYHNIP7jcC5&&5sc#_( z2RM>otq(I@?%N2k&4uc;G?$=c-hPA`wdMbhvv*iFZ~qQbN1tR8`YK8tfhe%L8~NoK zfu|IoJ1TF_$QZw^4`;HTWrXwX3bSa2XJSJSUn1q(7H4$Qv7}>$yw}J4`OU>~A34AR zRNQN7WBt8{$=D9QtLhT)+xwtpb(zhyH`}x)uJ`x2-rtvc=TYzXA{Xj?3%@)gxALoG zU1HG3(FXjd4>JkI7B>TU_-)|v;=wk>%$9X6*_M8Nm>H^*^7Ys{6}}eIheD+U3>Dxf zgg*eTwI0JsDd7*x2A3Q>Ai3A@~b_;^wMEUv#L(h`*24KMG( zs-0NbOJ@b3?~8Eo-25R$&E;=H0`zn{zdR%V#4n7=?~}J@Fp0FCnf7SrYX^z ziG(1YFbfi0$ogG4%<=0M!h!Jk%ths%VjW0nwW^e12GpRuU01-5K!dL~yfJO4wV%i} z$;!Zh$^e5CfJgBFhG-Gn6sge`KSw(WMu_Y|n=>rrTL@6BN@W33t&kL(T_Ty4kPt@J zeDA}k!>On@?{#su$t8PTo`rC3XnDq;sBv0bCSjLeZ<$^}u!+KyNl{_2A1vDhQ+r^O zDLt(Az@C0*al)_{-mf=!C(POl;|7;8KY|+ZpK3PeJ6kixv!|hL^ss;9mwN;Ye4fnn zxHBL0GsHF+nffsT9H>a@!%XVR{RCk^ALcYO^;3kYpK%n&F@BCWc!2k_h=KQW{Bn;x zukhu(8Ck-cNgdvtR+;ybwHGYW_;ecn*i3iMZJX8BKC6B9BF1>A58)GM5}g81#s^jR zOhtU{U_RTw1%n*XLst?l^8!=*PqE29iskei$%xC^F8$n;(n<)P;xhyYO(|Ux)`P zBiJqe?3x)=KurvKmX08NL*fZd(+pauF@BH6`27-o9ig90{U}nK^ghIABJQVA!Q7*B z>Jj}B-A_M8XwWgx7&OVn92UAb-XZZ-60VbQ*tOYZ(5*=I(*rKf^#j3=xTRc#e)@*z z5xqd4hZ8esp23uF8(hj&<|F#ebTRyhK_4)g|AXeoO@n@8a;`cr)67F?&`n-W{kWI$ zlYNiqVVdh>%pE>13+%wxvaZ_%;AR!-Sj)$aCwdJxf$VQ(r$kXa=ES$m-|tKe)?R9YcU&M&>*9VF_%}J zS!GbRYKh-ZdlC236B7OwVVK^mVhwyG!t!{cED5(%m>!HW=euIed0$-Wm0)fS)$VG8 zmQ^#&`w{x-^_rj8_-T19bJ$+Xsl&CL_cnxn`j^_HsF7;Bd+HeTvB~agKYdcd_t$gl zzg5q&UD&|&{ca;$3+t2rdhmFZbtQ@Rq5cZm59pwE-v;w<==XqX;O`z0E`LUgduS0oD$rjn=<@=( zU0lK<`d7(Uh3-3<&Y~{~)C#DP7SmS+!hv9#MrYF#0zD4sG&+aAA<(mcn(16RB+#pX z+NcBHlUQmUGnP5ji5|~#)&QDDE9eITodW1I_?xE$!skqIIiH>u=xji3@GH*qzRq+JSVKFx2xf&LrNe7YVNRaxo)9R5W# zjH{>&B>}CW8)&-5S~?q06OGX6l6E&1(_1nA;IPvqwtA;?W)3FdQY zEvG6Ox@*4{cF|qH!2i~M4!-+=`fJ<ojk_JE8n29E3=3^Wcw6Hkgm*W-jPT=)?JyO~HQ%nj6Z((iEH-mM{4lMOvfu5vS%oj0QKkq=V zVf3FgjVYg`obN5Yil$r80iW)wqE-cYKj-rTT4+Isd|^Nx7Idq5msUkrSkMc;8vu1% z&>scrQxIHD0{M11&}3JH_E=D}f0`>s`z$DfyCE^UM<5q8u|rGHet~M}l)!ne1U)3s zEwnUnpH@R(w$j!HGOijrWTkZ@t(Km$plyN20KFj4&E6*hV}RZeXob!itfk;7tcl;z z4+Fn()zZBV^q4k@9A3WRJzAXV=hVhv;{GjBz@VTJkOJ) z?^$WgrHP(*(%eQ9%{rasyqQ*ovslNk6zECsj_~ccYTu_Ix<33ZK#y8!kA;73wA0Tl z=$qlYuq0WBg*@!VTO-hb1wAFu2Q27!;Tu5tkb>yX;r|4e?^)1wRY7wh{mFu!s_Hct z(K=qdzy`ySe=#v%v7oxhr_B!D@{zP@kuR7_sMUg6BVRX{(rOD@7CB-rr$Gx^6Zrw4 zCoJfy$aCg-^pXW-B7ZQ?r#?&vxx6o%y7wa5XF;Qpg!f`=ar7j8BXY5KHEorp(v$S> zRo9to=%@uvj-KvYON(bJF0-QdX=`bn1uYh+&w|buXpaS5CeXbWv{|6XEof)-25|YA z1-)0&UR99y2}ujKNqJuGachb10&^X>SFNS<9cZ#^9c{HB?p2r3Z5G76>N5JYg1mw7 zr`%W25ewpedj-j*9<=Sxqw{@N(DXA@2|q;7xq?<((CXkk>5UO^!W=w0$a#24debHc;zq=E63A*w;&=0zK(9 z;x}m5(rpT&+W3pUYiXYawZ>of4bXlI`ibfF@1R2#v^4JZ=jo^gt&Zbo4e0j@^1_4p z3-qc5J!#&j73fV1>WMSt<|Q<=I}m>j>&}RRMDx37k_EBOc2UxT*w^i%Rx2O3$}U>y zK$Bg&X_*Cas|?dR3*uH8rfvm^=0~VkAlAfE{|Ftl(taD??%zX?TKU|GPilMU2@7I> zy@!ri5c~2y^o*5{z4sn^!GhR(@1d70%2&+SKuNs0jCNoZ)EGJV1+itBT@up!(Cn&(J{&`fl|vgP*6z zEht%29r_|oU!W*w)?6C;2CcN9*HbZN~4p&wG81#PMMLg+^{YC*Tu91cBA z`z+{lHC5q%qem_1$(nP+&(KpA6tDeU_{a1FZ|q3VnOF5w+911AhkdWq-lhGFdKIM2 zpR~B@XVhmwdnP>_{u%ADpywtXF@H|?TF~UW9oo-nzXi>!TT=CNI%q*(tlL@jJiTc_ zp2>@={++zo0V6uBoj>_zKoJG`zBPG&)h{V!LG@GiSG_4F{EqfJX{#eI(@}xqG^t@@A==Fx5ME*#7EU3D%KKdHnVL`0|?Gq?EX>nu5c#R$s zNX>L!qsIkWp}%5YgM3evQ2vR2=1^W6{S&?9P(BcSomQT0*Wu~t|D_EAF_&LQ|4e;O z+S}1L=msZkTI|2*UMFo;?7!(DC+)`A|IkxT+J|Cq(hE-7>#@JkTLN+WO^yGRTF>Fq zx&5w-|DE2lAZ|a>?m1Vbar=>W#Dboy-y0|GDGPeJ{%$~j5{NbNbd)seQ2DqHnidg= z)83BiTGC0I7ISGGPTH!NTU+g<-5B#|15Vn9Vum*Aq`e+9wfzEd9X=NKYR_9~Y=dF# zNGIWMh0b-T(z=%@i0e?L-C;p&gH_r-3t}6r(w-1VwPuxe#7cX`{6f4+dqyDD?h)flIH^-m)Mry;i$tS+Vq5?T7_&>9yKZ7R063YHtX{Jdea{wdu=kp3lbX zwHGXic{XUfRup+QXa_Cmx%&TzH)s!8(98Az3FsMtxJE;IgLc$P;~F(;k@J`fm-k=s zsal6XYz1awy7s08ae1d|`_3SeC7crP@L#ZHKl@>u}Ppi7wO57f97;xz=4mxm?>?Lb+TU zD4|@T-Bv=mLi>P2Ig(hR-BUt&f%a$#7ifn{C@<8WFQL3pJL*sdA{T1E zFQHtiVOtJ=%34=y5rLHES83CowC_eP(&jp8-%MPr4LWH%w6)p|PTDhxwc2e0DNU@? z_6x*)?Efa#Y0n7sB=P)Zy>`@scy6;^`;!HoF_qH@%Nd@ZbxeH>5HD^R;yKZJEn-1D zUs|tC63B%Tb^uBW#C5nPx?W2Oq-42L>nNeTQaj(F3|C*Ntt+9tO6x13yh0$oms}BI<#f~mtOzA_2UwQ;y!yX;yEv>~Jz`yYi(#ENXyJ;>$k5H;qnXcOfE+w+wY^m5b46$|-d+$ZrN=rF;+g3UsOK`ou ziO`K*dX|u_QNtI6%C`F7purbb(3oPM%2tn0uWXy`+3vHY+P(r`?>&@8XwWu5#cypPmtFeF)1O$MMSrDXmz((? zl<upBo1$?WBhv%y6859aE6l^<3gxXaja+x$5r?RiQgsM9;oMB zpGK(B*Ck{;{8$5rrSS))#bdzpccmgt8!$SZCHN(h>sbjE4NIlrdk2R%Hgb5Igm+4K zw}kgd_;CsEm+&(ZJ|dwiSNV#^fpKI1pIfa|=6A=FTSR#VH@+Y+Pv*>Dlvqxsjph;= zPKN$uq-8!Dm2y6D?fy}E#rYrAiOR)g>BK(Mmhd0tQ!1^p#@~w$|As5i^Xd6 zhNLQcE6uCy=dY5>H1jF zmL;AeMzs%{|E$$%jGuv>^Lw?~#5;~Tq`3AE{-x|B!w^F2CDbmgsZLHI{)fP#-(+YXru|e>?65g)2R%Zjf z!nsevr?5yR-#UpOk@%p*KZ5#xFxV%#1|`HdD`;{L!dF6fNZ1Lz-R?V}zg4q7d_Xs9 zvl8wO`zTO*gV@y_;m?524(C(>^%)eN~TZUz+@k=W#7O`xt>k(ewcoV{O;~s?D8gEB9 z)VMe57W!q9cbQo7N{O$O_&SNNllTUSzae(mEAb=RR~l!>eXgH2-lx5#z0kNw&k}z} zit0a|vNYZ&G=mb}AmJVf?~rhxg!fA5*7+O!GO2q|XL~y+_=M7)&h>prF!h3|2WDw> zHt~0x*|aqNNo~5$lC~IJ{6h(|teim%0xM{zbY< z`&ajif`6HQ3d)ypDvHAw=}dSh6*6Aa81K@q(ln1tV?I8O@jk)(gtEyB8Q&!M8A3C| ziZi!Pq3INSr{KG=!!YFT5=@t1(n6CKOj857LSLU}tV z|Kz@1@V5*8e!+i6%KD7pKO^{W3;z4U`TK(ZzTjWf?ssj`UzF6Bh1<)L`m&_D^qbw# zhR#wgMfhgbsLr(>)mcmX^*_)Ru0w)3B$#i5=6#W)!1uXclsLJVo?J|ylz39&9TM-5 zc(=qyCEPFJAqkI4_@ax;B{%a)S|M}mka&liC;F}D#geHSI zG#SjHQ!t%^=@d+taWhVlrUjoCd|L2hf*BLcm|zYF=73-h2r zGbWfZ!DwNTHZ0PHMOwi$38qOfor38UOs8Pdf=LS|tuR&0CylSDTQF~9K8Nw;@J!d? z2xAUM7;{W8#{_dsFilaZOH}F-WtvXGbPA?ZFloW01(O!cm|(^PGbR{!?4!s#UBYD& z9+dEigfB_xjth;1%OpG~;SmX6lF*%CnmrO8l<)UX zvrI6(5{?RfRPcKQb5O!Vfx#~EVyN+`u z1(Ouabis58rb95x1T!j_QNbLN_#uhYWZ^cMxgC=DA&DQA_)&?|6rq{IG)E6pqiqY@vL_#ufOk~k$rwj|SZNW4Sh`z5|#;zuQZRN~1drcX98eYeEBCB9$c`z3x< z;zuQ(oF??sLs1#1EayG>1-Q zn&fFx)@f3f#78CGeLCa2PZzwzM9{IB`<1%45@KlsO>7Ty((cn|gxO`Od3Vr}lj?FB!6oiKpac@VSE z5N$dnT?e+jPgU(Bajv-%suE`fn5QbYE3_WD)`hM? z_}&;(-tGNY?7BV>V;LTnaH5{(UYt-R?g3^; z;-3)qH|&eBR$b6-0B;?dG!cfNT^-sCAgltU<90|D!Wt|KbjJXkzQxK+bcSOg1fT;*);`F_a!*iz~oCPYKW`jyc3(Y{-j@u_Xe$RC#!j+)X=@O*t zIKSVHa4qhK=(L^|AiNrPK6L7#vk>;;R)>yDV&@{{DumbJlb??J1eYM(4cO4jl3-DIGT$6<33Iuko65!@{bAY7q^5H7~qhX|d6m3M^ZXmNxcS~bG?IHM53 zt%5p)OSCBnXW@iFgqCSjHQcv?ep*nsC8&RvcH&meeRP<@y~;t?(OvUcn^60>OJ50Vc(m+@A#kce?Rc! zz|*0B56ug|5dMAmzrtIqK3w&^s%NT}MZOmKf06d+y6Bf;XT=XB9!~s6Vruo~>i+7F zS3gqy)#_hVyGQxUUFqMe2JfpC|1{jY;6E6!^B1LRSQ_uM761D5b70r%51oU5A(uL? zn|F@wDMN1J5ixv+>Nq(~f5@o_ToY<5_@bA)ZBe z&ct&Tp2c|1#&ZsybMbWG>BO@H&r&?g@GQr(0?&DP`0ob%P8Zkr1~M91H#d+M`=SKP zQ}`P#{Efh)`vae9WL@7VyUYX|)T=rFE%ehG&VLJiqlW2jp+kHz3GZ*QTJa0z->6}_ zJAh}pJAh}pJ8*iQ>F%H-LbuoAw-@|?rnsi#n+SesQClkT3{CNwp(#EyG{t9zrufXz z6rUF4a#^t_1vPVdS)$r*1~6jXSuSPs%KW?-D{$47Qb!a$MSE3989+j zaEOjBrn zgZFO%zir-03%wttYrJ>UKJQ0BXHvlT32O3v7Py;ekMDDMK0zP!e}X=QXRr2c8V-Dd z#sZtQ_XT3wUTv%P;o!A+eno4;-v<8M;Qu!DRu!}h;stG|=oO;lUm)C>?akzuWeV9X z{h54QZ(kp+Si3cyA6N@SdT=P8S(YA5w~Z&Xh%O!&%x=$KpB~KS`YY2dUX|+|>dTx% zYj+n0Gu!FnP1k0625EbtCztQbZnF5at=m12S(VAL<#*<-4{I^jUn{)?_yKfidJLqv+q9BW8eHgXt`4NL|Z!453Dw z`ZC?K?aWJaeOBfIb>SW`xDVyieGVn9OK&OAMd|IC!ay1_F~=gxq!~gphePynclUT9YYzk z_L6jgn`KpI`zBRWn|jX7`IT#98PJNM{+{kRbZLKf(9SY@=3H8tzJ53OSw+sDIgeKK zaZ|3y<+rB?2XWt zCE5O7@K8J%VCCBl1;b}c&f7+I9`1{$`>f7_BKo*Y&<# zds?m^b*V(uZfT6GQm9BVry{l@H_B%U5UykPeAZwI&|V76DFtSi09=r=TU21dY=R2< zdO13mQ&!l}LXxP|KeIE_KM0bA?M$-VhUSw*g#^ZhfAeYfBB=+=iu+JD!Cs*RT)vCW6tbZGutO%=1joM9*h0>^ncJ4>m^*ucWBl`I zX+DFlE1tQ>G5U_Vs7WO;=FXjkyjhFU+twHVlbYUwy*K|Gu&(ptUD7^(k0tU#z>`v*I@OIfA z9##6XJOc0!P82ZYL0=o$sgn8$3Le0E(u20&SjYeVtxB;SJc=x;L$WVT_piyMds!I# zulgSp%A*PUR8oo-(v_M1ErVOBb6_CT-)p^;KcsazM*vB@I^cYL3@mM9&`RV>%j3{e{`Z0Y#v$2>K&MBv0iC=;c9WBfB z^riWiIz;)_u&?^QWnR=|5jM(Af@fm&o=V$l-yx#8!eeYwaK6k ztL|Ef85;(yuEMg+W=y?$c@|}7u$q42T*RK7I8y_sesivX%ymVan#)oa6Iu8&gyQR<^CAi8 zB_F3s8(4f;`CNbagZ{zIs=sy5gEbB2)9Z2rD=`N4U5rsJ4Tn=uREo&ylVv&Q(#DNa zKc1lVrFXM!DfiRM9!VSx!|VYqmxP(4?Qmoc%s$9Yq8_*{5!cFVJ1K`?9KJGN$;DP% z=IEBMDVDqj6TNIca|ydZ%nW)vdoTelOl%mdTE&De(K&~f&IM+zDxBTetbF*!UAxP( zs;1yJ*~s2pe#_^)p)CAgp@4C)Z#S(N>gy8+V`Cf{1Qld zcAAY@+bQKu$0<(pod=g^4_(#@lE*GIC(u0eluEG=w+21YZ!wJqWsY58WmQ~4Vl`u_ za$T-7pGWWPTHcRgByX)c%Vj`Y=h#(R&1-p07J402dvX3E7^YP9d<^gxW2wG5jq!w- z&MJiy$_Ez(sexD|uqan#`!FJrJ*qM5;&=wJ)aWAPj!e&)kD9V`46U!`N`$=utR$E6 z%%T)88D-MWXf=`Nm_3=31#dosg-^fq6(p6++?mp{8|CXPp#>;+hU>Owu#;Mv8%w`U zxm}j$v8FpK($MM_D02Dsfx+FfFCZZNwX7FtZ4QQ4^tzU6p&jP!^gbD%Mf9$MDAS5B z*^RDf#aCm73gy_4J?XRHr5CSKQ$&Hmd$}6^MG0`zC7?~gNh|WX?d4M?##$JzS4CgM z2_^o>^57TeVbJM5_zlb~w-0g!EoIrppnQPkzN}3EE>G6RZR56K+PIX;lRn3#EZv&v z*|rWVF}irO>IS{ac1t@yk9BHCM3i9zj`FeLV@+-Gz8n*i4A10c3q>;6z}n0pTec0d z|8fA-mD3>d_&H3+oCUMQBccDtyg{z| z4Fg?FJkDV`k|SL)UgPwE@e)zjI1D6H`!W;U6g;lelT_3x7sC(FsYMH@Hl}?x%91RNoD|v?stNZMi0Woz=;d9tLb0$&r(Jb-GWbWeXP% z4R*A*&#%~USQ}$(1%+z9GCm^exRTUrRf<8f-Q4(oQo)mBkjwSS-Vu6321_&^=M)2b z)tluRyl}fLhgpP5bhu_qCgIB1d9bx&C?3{$-b7<`+;Y(+TWjpy{TS{s;dKg7JeVmP zwnfFOiQ-C}9NntEU~6b~uArLPNiS;=tBa~8P>e0(9w&>1#m6n#2XNZnf=dQjQr?L7 zaY`2UPVYSN>fR>9W>487AO8kZ55Bcw^;Wjjr%e+Z^pc^RT4-UiB3s+bcMaqT6Lo9Z z&bH27SDF(G0a?+BbA&>7W{{#{QC&s9bqo0r0~-&r?>#ve-Qzs@$C2qI#TKG28PTcmR9X`{Mq--79nH zULG^JGHUFU`6g$sVC5Bdg4-tU@rt8o3zD60F{O9U3v#KE*I|fN{z>goSCVW^rjYB~ zDf$w*2BEY6{{ph+3-(&GWdFNOZG~q}THw+qY{PC#-)^-sFOIjEoor0!x6GDMb~dd} zg^5=C99os$2IG^Zl!aHl@?BV8uUw*(F^B zU8QSTrZ2Mv>vM&eO`W~gZc+Z-37_um-H0x&x@Ly9%5GF1ooRb+r!~ELmz?v$qLlf& z)vo1#;8?5$D!hPNsio}|Yek!~trYEjd=?drfjg(&&t+OLp{s&oLW=>Xdd&FVI8Mo1 zFsX3ZOD~9yAy@%sF2^cEeRo-x$3CGwJ>m5LVONy5 zPjmU~7MWM`G~3!SwLAFI9K3bO-o_TymwC~_H5G?m3D;E+!LvO=1qGLYCDSw{IP-zc z@;%EM&vM`_Uc)X4tA4fU=OUS@8j$gAU;!pk`0dSY)Ugp;(dvWi#7%$v0_XPe`}Now zm%VXrSKfhXm+EkAt`k$6tc;U6oX{>@=*f&Fb9&Ie&Bi?8&_|;bI#_jTH zgf*phAe0e^*}U1JY2!AmCTL^-cCf^8AN~vU;|x$A z{yP)LwuW(ZrInIIRl_&~GJ-Q5!!#Rja`6L-v$}AGXeZ^+W*N|BserH_@F3m=a2mjW zIm!dhV1AUu>7xvw3{IBNdYdkb_8dTo8N4&dZPT6yXb|U-INS;@y*Q^do-&QJEYkXM zmZT5!=Pf9e7QGYaQl94{S3h`j`4noyJgx^kS!N0_WW~>VC!TANf3tAmJY3s#I6E~U zTu;TRnpvpxLY#sjlOeokUu0=IiCS^(SnruK4W@zVL)vx1kIuamsjTPIA+c(u(*bQ3 zX_Kfs({4h2`he}noAp_M3~AIOL)wgskj^c0e2rfU9WO)MqJ3N~IP7xb927`HPkHd) zO_aL`WvEtWopDtgZd!l8g1l{nD}M_IJwNg)){Q7q>M_)l0Ns z1>_t8#Ip4x&URny+eM4z^wV)Zt$?tNw5v<=Z5O-eKCe6m*L^3r+&5Lx|I&cgmscwiC9_y{>@&xW%CJcPvZgEGg@(cPi@yUgy%2$!qsM zyJeR`zidG{v`r`8gOEH6pE86P*M*k86IWG-CD0f9s-g{K!9jUyT7PmpRw4gC==slk zC(dic0$CEaz0wlO#(}ER6pVkqEh5WC#JE;iDPeTjS+t1@$9pNZZKX-&2iZoGpl2`5 z`EBpRmchQUh@-0qfGhQQm3d`Q2iA`AV#njm_%iOH((-BazwCxr71#-;yp55^aLS@x z1d&-$#X+QiE~%Qh3!T^=`mt$%`2!2C3|=+#nJBy;e0a!VLCVYMEmQv)6H=EVXFp12 z6C6TUQUmcBI6ztn&(iQfct#ml8_Sazdq6xJ)0rgr@pOSZC*bN;7+BhHl$za>Z5%XX z1&%(mi^WDRQrC*hVWoFUKAx^@0v8N@Rmx4rBTp12q~btFappw`uX8W^yy;V72yqfdVDorGceV-jfwl zI!54Dz&!3tYD~17xj5Hg%Tu#GHV?a(V%C5^4>D zw;R>5kQPgLA3b;DP0^qG&jdVMi_P;@<1TIN?1tF9kcw5~*S`RH6%?y>2$t6~syf!? z4M$hSE~#&*Z-`zRTVEZ!T5AZ`2UTKP3nO!kfoP@_HAzsbCMGm8D%N_uWF@B06smc; z0<-G1UA^j5VuOxihdi>$f+|yToZjTBO~e3yk2iaD?3GwGv!9T%ZOFGk^~Z6150<31g;0Mt~cUDxXZ8A zgCLCi3*m6slca`N9bla)8<49WN(JmSl3Hx^&agM>;#Yk={;d(vhohzm7!RP zaS&?J(T{jFT#Vp9SBkuz6h%irCgB0VVRs5*)IwEh&8~T|mVV$>`!7fPD+;!T&4MlCHwADmm zD{~Aa-A;XiNl(24K)=z^hegXx691Tl2RuowpSvk>zf23se z7lDZ8(uEYn_?NfB;h5<|kC*>r_4qFtOQHgLJ%}Qvw>$w_K^@&Ds)F{@>+uicRS%aR zElJI2?cagbCsd;3zC-F~fvcFwrrMBV!&d*4iLEj^|!sAwtE1#3@@cK!~Gq&w+Dqr$kv8jmZaq;l7PC+3_E$@wK6wI04ln+n00!|^I0UGFcb zBaarf$DxWRy(R7-?ui?5GnVw$mkl@#%39tIs5+v8aQR73%*U=fIu>e(RbyZZp|>?~ zcN?oluj5|hGtuvvDvBiF>!de2$@5snbvz=nLqIG}L953KX`Sh|2&`9Zo*hXV@Wy4O zOHuQptI+3lkzx`2KgWEg3*%!$tidZJ4bfE|lZRV$%UBjXSkSB_WuvR$kYd$g9jZf} zm}0v{v0W&(BeNfwt2vBb8ig2jA_f#7I$&mXLRuGHWtR-+!Fs?b=})pO;b;bOI*tcU zgPoOE`KEAKtP(F%XId7b8f6%wnR+guRm~JyqpMDjxIB$8fJJ&78bl}t!EJ!rYmLCh zq4Gv8=yw$dXyk@^!5f#bBpS!T~eDuungUouX(m zxk^C6GSC zfucC*VMG8Ao+oi`uPJo~Q_LtD*pk4S9oX2}QcQ>^2Tg9HA=VU^mM$Be>)l3l^uUZH z#snpSHB$hRHBe3q7GTeeO=vVEMTK}`(L04INV;Jzx!d>}(n^1F&ibhR_-Z zqF+uGE}g0})zh4$IK{XR*jN>Gb1V5 zk(HrDdaFU10h^wB+t51Vd8Tc9(mE4)9Q6I0sH0TVsaXX(Jr{++16Jx(B`O-P%``ez6PKmWV#_%( z17#<61{i~gD!CnTotogna?EGhEjM_8ofdn8d9k`6v2z4i4PPF>+k-UNp;m?XBoF)3 zM!nJ1=&pfcnIn5yhb*pz*w~y*r$#tC4@MF~yNJ6a#LY;R(x_p{H&)LJ7A+o8OgV0+ z@;r3x5|(-Fk{FXhPzQzyDL6(hPRIWa$|N_hV#1TnFskcggTq3~+aN>;yxuUbaWjMg za_o{Iy8YOCz*on{(gs}f=-Xj~heDYsqWM@Gb~=`yV_AqOy@$PP7Cvi%iOKQXpl8uz zXIrWKa-xi9&3A&_LdL3j1rQs{!1*-9W@3~?AFXZ(H}HHA13iY%SOZ!g(_F5&tm?dK z7z4-?=!PJMNmOI>gIo_8ZkuA&0hw3qkOpG%A>_VV6?HY!cpxi#eHH~%#CbtXrxoPI z`~VrCXI|>ECCuYu>H?VkW8_u{cv@@fGJtEn=~4#nw`zf|kczNc91~V?F=Q5#cONWK(LqMv zD(N5*)Dwu}aEkXA+#Gl~FgP%yX88t6LwItM2a$?1`49?c52k8XC2Aa+TscQHx-*c(9$jh-| zZo49n2%AF@jArVj$VyYHDK@_fOPqw_T3%F*;$4o6u4=OQD3@2MB(*7o9$9%kHQ6ex zf*kc$krk3+tu7;xgRCG4}z zGiys7%Ob<}2^qGRWZ2FbwmTWNBSYPU45hB6jx*Fb8R}TXM>#kGb!K?43rh$Qxq-1q zIe3YK-$#;em}kj`9AjVQ;7{BN;!spCSDlN!VwNr1t9F2}XCfR_s&s;=bd}P*JJrpL zy_4%wJ}W?hV{Q(-uyu5_lKm&u*Nd5X3xl`U=82W?kZYSu-4yVJe2i1gWxeKE-kB3D zlc{rTr4H*R%%SG_q)%}$@qB_Pc^Q3_r+J>=DzCc?%7p1GgErpvFqIzF^-d=E;6}Uz1~3t ztUxd1U_@cbyD!IPVOodMCaZ$lDx9hel;9GT4z`_ibxVz;;;~B?E`Wu~e)1r}mF635 zxuL;M>%wQDnvtv1gK~w=!B*jr6i!(?uwEEUpqdj72){dVD{=A{&-nV)F;G5r>@OZ_ zcJs01c)>m+UP9xX@Gj`vH)#VQuy;Di$+v5nLd#gN<&QrQc>c+n%Xqfq8HJoANbWoJX+q2zGSBX~Y%ps)z|}!dv)&oO9Up-3eaK!{jY-+)(h^CuDt66WC-S zx^$&NI>#sL(MEE95XUAboF%>FUDfeK9KE*hcW>G~nDN?YRjW%|+mX#*JSrb5yR&Fo zM}LE*2k1@fZ2ac`%|WTHZNt_~UtjKW{2EQ~29{D?ciLR=IRHFw*-z5=i@yaBhAv8e z3&00Z9m4e5*LJJ7@HxcsS2U}}U8i#4_Lx_lFYTTkA9qKGFIoqes2hoLK+#|zlMj{s zqDY|R7e%UIA?kL%y5blrJMCDfjx$!c+#ZLp;|ebrXaij6G?a@g(nF~zZl0{bVY(-$JFI7OzeNyIDsT!8ehB8P~gFCx6mgnb@d zr~Q*MGFd3Q87~;i&8lA#V9z#Q5$;X7T%T!Oj}N8o`yOm2wH3&@)dD5=;!W!muW8+j z_c{0C1ITUP-3~E3?%(psD>~t#cB0bH6M1o78NNP~H`E1ePYzurA1wW)BW<0Dk&Az; zC!jRJYa{ZbHDOLK(IbQ0jy_Ddlx#ld{<3!y1|%jh)w$UMcU$KU zu;0;C!E0ZJHgI$sm!abot_)X=yD}^-$XABld|f-JtWZ_K-H(Pf)V*PM8s5)`)7v6_ zp^B4A?hOao4s6#XfPHT`#3|0GSXW9{c8gdt@yN>+jiJTHb+Ool8*_z#b*Pxt818`! zKo;wUv1brm3RUH7qyrQ?hBeyr=;sHaN+|HWOm5`*B;-`~I_i>c5HaVHuD^ImmwT3j z7Z&1R)wp4^5R}M-Ikx(ZDl~Y|0a%W_bB~Z&T1mK?#eT5lCNC!zK_$IhMy^JJV^z+* z+Ca&@TEv}uwV|#;$-UYtK&AI;0hisYWf@8?(#9sYHt;S=;Yx8KI)P8b{_r7Gu67aXt}gzeM; z*bu{Z3IxGTKnKK?RDj|_ZDvgF1zzqDd2snjrjoGC*javw8k-Evx(n#mAZ^5z!ix6SU)?rv&OaFG~&T1p)J^r25Nyob* z8wG3bqs3bi&hT4y!CzXp$e)Kjt2oCICajB)r4FZ1^po6aSm+S^E*b^OX8n5PMrue6 z<#$&7>SiTp(asI<%liEvR;{h@h;=P93t_}J8R|FB!q&A+ z%W~j))dbszysAz<+#Xdi_Ijwnc@xLHT8q2AxUfq#R1O0ykg?jLD!+hQR1KSL)KQdu zVWQf>l-{WbT6z}?2`a|QPV7=_SroR)s;AuyQ3aQH=W5kwxy4GZpBjDg>ond0OF<1M z{EaD3A+w`uXMVo~cifDbU%M!OmMG;)JMNo?1gGF~2cimm~_kA;S?m73Ko5nxwuFloGeJth};n zMs-bHeX^mkskx=Kt$k+4tj@0PIlc4dFIc#!@3j8Y&saRLWa+Zy-r(C0t>Z;5N6;p@ z^gcB08Pk5-5r=|sxgvi`js0=hF(*c=X9F1WXfA86W+OmX7_%x!myee&U)~H+EfQ^R zTNN9IKd}&9GXxf0nJbyxnNW+@XeVZt&1_?XQadOWGa=4qenuH~fjl$}1NUh-S;TJA(gSw|ZioO4V}WQ0j#Qi%Q*&NC)v30|8O zvvn*&6L<-@;W2Ws|CtPez4hAyRIf=4@G7yy znQZELNLF7`U&)3^raKJEjsDLQ*zy6QiK*H7y5|F6PSKoNHsYe3$gOz$u>qnI+Lj@* zDaQ4wrNph?;@%oINR_%V?1@5pmfuSL0innj(EjX|4-VvuYUXDnFnxYP953{GYkNC{ zXyRsdk(K2d%6f~}+u6G$I&7=gyS(=t%YUGjZ39{TZhs{kaUAwQKOUlh+g_vL&Ngf- zfT)T~1a7f~YrDXWy0Ep{<;^nUQmP>MX-1M-OE}^ZufM9l5edBhx&4cf!0TVuzuFO( zdi@*vw*&~9whaUgxC51JFhN;N$sma?8qE{+lpkDw9%-nRdT*d=pqfY=Xc(A9Bo6cs zEF}^LRt;Q0Bo1sF*cl+PdnvduBBo2B0wn zaJdBl;n_u*z8e5%xo4HLVE}ZC(lR5&ZqY<3qgoUoXIupU&-LoqFaU0df~zb5-!7iX z%<8KFu*zLk$3`T;)nfwGTmyjB?&@YX7@%1J9(?9$VlD>LWFp) zXl0HHABGzvh$EoJeVKG{H`a>625H$R2rMRUHaf-!4HTAg;jtEAo3db`$ul8Ic7(8M zE6ukcea+cGEtx`hDv^i7E;9oTTKq))egtWt*FJ^H+1{uI7jxQ*k z=m_~iZ$rg~dN@Ahy`$nCagIn^p5_wyrvEpJDrb$l02@&H# z$$YLvH*D><17k<{J0)pW_7IcUeg-neOd~*c=CS!fhQPHW`_du zfR+sQ)a{x$i-E8FI0&qh`!O`Q1g_a~{{rfP<^D6}ehd%fy>M=j`!9m?J~%Ix`_bje z`{CRp_rIGuXSrW~6yHz4`vCp;I=;^Ycsi4UJb9-p@0@Nd!_&?{fx**HSe~K*XY;f} zK0q*cx$-W+uw`I$Z|7Id0~Q8So((fgev)ABb>+P?j1>*@$uVJO%OQff&z1MJ8Y>!R zXiS(+`6+_A-<9{HP;40(-2?lD`jmyq?t&q2U2>RU4!H6_ld%W}qgm1sU0nAV?Lt$` z6tw}SqsoREI8VsWWQ-`~XGND5sL$#2`bSW@cr40I6q-za201s&1Klh>2L|MUmGJy5 zJlDtrTj2a0oO|T~^c*BU2ju(k-5-#XZfdBWe880tB#p(qsN(E1$bOK?hR|5DbtGHk z)Vx8@0}b*4nrfg{OG>0i9;7UWT{&E5EauY$qfNt{>JD@2AZIxt-5&kC?I3(SEbF!; z;)#>m-f+DfZqn2acgkUm%+dIU&z8e@E+g&@ZJwT z+2+WHsB90r^5JS@1=yESmWLwQ=hJ4`_i&AT82zrF#a#J$%HohK4?$YlV)kLq4}#Vc zX4mIAi&zA^1jcB(VPX(KJUBE%9-$gY zrSfw#rFyhlK8hiUpT#`+1Ph zCm(}Wm0tuXhHhv~ewOp)A%y zC8!c}!X+5VDuHc6VopZA9G)Q$n|e8%l!t@$vQR!kSw88?Cs8kK1?nXu%SSlN%*N{H zX6oh1YWZZaUKYtmDT^bnJd!jPm&!I)tZ?=Q4~ayx%C@{23k-} zV?EL!kF+4gXFyN4JaQU0)+6|VX$|=$*qh}MJeyKuJ#wWyvIkDI)g$kfN8|?r)!#?7 zdh#ipnL+il6<}UQNgj)2o==%!-c$ARDZBv8m$1|1q9Y9d zWrl}t0Nb;N8H?qU1asV#$7_sbVDwX*uTY+}F#eMaWYRD2fcy%Ey7E=PvqkU_+VIp$IE(Cw3Ldf1GdPPo8vk`bYmu+=UGxSt3Z7HHWhJ8*PBUfKYxxrt+0`^B={upx81f6#|)Gd^&$PJkp~?X#r(CjoTBn@0&Kdm4D*B9V$3BK z2*Nt~9YQH6Q3d73vNX}eQDFK6)fLgztv_GLe+Iy$ay6;dScZ(C3FfeLMS7~RNEOx?EAHU5BkC%9rABn~v{tv6$J1Ji3B*ooVX$@~0BThsmYd}< zIA^KCg>XIt=OR_Of~K@o;YwAwF~{uFcM-f<74FIr{5=F;p$c!b6^qA#gyL{Jaogs-z;7N<{k1`f+=-XDQc80f&m-y@fTbc(z^&WEQ|oF57OEX5>- zo<@HJkUCZ7kJP}cP4aolf(}?B3$}C?A_M;UOn8wAJ*`en3qo&}FA#JU4$uRdt!U^M zP6=IAr>cU`7s?+KG*0=~G#QJb^`oC&fASggV}>_N9Z6eDs4lJHz=Vrv{Ycfi3JbW} z(r98nYfdY6mm46O1j!hz0%VK)38B=vs; z&6vOl(q?#y5hO~mlSYuL%~fqPjFm2d2(}tWjB^C3+Nu?{aAK)Wwe_ere*}rlF5{t^ zYIjvTS~**qbfJf8R=UO-ssUyf_pcpAssl8$g&i!qfAv?FL}NrlV|APq3%ILY0`=o} zwfWrDc2uhlP%ck+YF3S!)e7gAJT<#U&4zP}r#fp?XE!`Q?5VCA)dkP3p6aeq-IyMm z?Wvv`)#Fe60RD3MA~CnuRlT!}6&DMrFI~t@eu?c%U(||Rh=o~N4KP>8mk4H_tL8Nt z%fRUVLBoKomn@9mEuer}!vbdaPC}XQs`+S7Y-tqDlmJ1FIK_SefZ<*-fGu#T!Zy5_z z-)hyjfz@>1#j5YJKxJObYP#Q5{ZP|vnNn*tZCN*lnntPju$sopIZlT}uw_8BnzkTg zsA+&)$7=cvSDgV6wjx2sP}2a}%X)ONs}@6#vc(`lHEp>*9yPtVMJ@K#G~lmi_yJc9 z0G=&^&r;LjEXJp%2U^sCR?`FX)WATXir&R)dWox+Kuxoy852;`Hp5e>X_O$vYI>=w zmO|yRl`er%(-v&JYI>^cGtNrYqDm<;!+s5SA7)26ceBN&bRh&UV$=poT326BbkX3#PPUjZ$tf>bpd z^pJU~CG}e{V<~82NPje&3ZV2q?xku{NgC>YsX79d)`d=M>Qg^_=h$h1$L*IvAq3{d~23 zM|7yX3&A_p_A7G)--+O>)%KL-FA6K)FW)5ord*Y3Fc!_CgcuqVE5SI+M88=w`yv>} zo5YD>sYaEWr5To*ty1%IkOhXN7OK=hj$kk>wN$0fjt&M#QuyBz9V$`e)Hap!hc;B? z56C}Ik)^97o@Ch~8KU_!mLIKyB1UH{JlTV`ESd5-B<5xcl|#aGA#zPB*$LKQ(oJ?L zi3uZ`bd&u`o|U5{|At`vugwws?+Cj<$*nnp{{z97D0xM6FqkN>Qc|kuVEGop<*oP* z1x4pJ`A6d8kgJBE1=)(=qtWQB*L}u>SeBbhLo?M7c3BaZh8C%z6`D&!XR4uGYyg*r zE>J_c#Nj^?yiEe>F?-NhVAPxX_?HH73$>v8;RP~LG--T$sJsv4lalDf8boH4sOUn%KsvGlR9{H zj^MWuyhk0}7o_t;3OdhIBd!{$HCCuLLv=?drqDr0w*~#c$7O5A6k~>3wJl(zPK}Uq zIDyP&s}ZVZJPVI3R3l5HsRsK;maCCmMaDDp$VN4?Jv#ALgziuyIpiPD)+1M{kyLbA z385OfQH@A&NOw%6MQ&H9(RZm) zDWijlZKLuQd~Xl(?GA+%Oivwi)v=_pPC5R|(KImrJJz6%QJ;*aaja7vJ1qw(82=qx zs*atRBN*eqV}t70=ICIs@Yu!b*xq0%_A4xBdFmNgJ%eWtw)lC^uV!o?%o2PQ998&C zlX|9yr+c26tDadIME$Tz5bF0_^*zWGTX8WrCW!8AILM!xfM{*%dzg?(OXi&_pHQB2 z)pK3O!srP73XrH1k4Bn^sNL#0jONlvcd1E)^n$Bis5MqzUOXt{iQtdC;ExHxANj!_ z@pvMhz(4Ff90raj@)L`Z}U7+r%r_O{D>-|JYR9uD+`T9QlXEO(t*$@kx<2mx=6jE zr(|9^Prb4^P>#uYj+)|llS?K~N9EB_JM@7_;V+gSTNT@cfC=V12{wK2!S`eMLNVQ= zNu~VThdYUN(OoN|1P;Y9 z&o*0T>Qi=HFMfcpijWX%kqZhI=!)|rAje|n_GTv!3;p9i=!eea9I;t!qo?-lV|X@{ zwjUxi>rC7Zof?)t`y=XiY9CnIM-Lz_)4s4wyoSrQ4=m%;h<=MGfn|K+7`u@VEaT&1 z5JWz(tj{&t=Nj68ha+(qnt~1a)|d7?gbzTW|04ug8bLqG-=KYO2*wx9XeV?UgKASZ zOOgXR@lD@IIhg3&_(K(n(+CP@FJbn=sit}Brmkx@SrE7? z_two?H-~&gi>go+-nzuPBKn0Sc*J*9rMJFtJx&!-go+ApePTWCTtWbFQLvkEfC)M2 zgH6VRI0FwHRni{&sE{qXLE^}fNw?2L!}b#s&3NGC5B4kQ(>|h&L_32amJ!wtHN;7d zyv^aGK6p<9h$KQ$&|)-FI`k8IvZoV2h+&W5_-aPphGcqBMZx+A4f$v-#KFM^qL1!m zMBwzK#PDG4pR(cR!|4SE9*#X16ov-92r?&yGJ;6?*|S68AkGh4F&uLqD2tp`LSV@3 zsOjF;)~$LMYk-_y3Yy_vQEftSr(lmhGH&tcJsGDs zF+`Zy%cM%A!m;51Yat$-VJ%l;D2Sxa=|XcmN1&4PCW29a;nQ65Zj+h3o1}AmC!y}q zY3TS8r$IZMjdMm!H4Yqs>~Tz~;+&320EgM=(NFV1X9qp{YPxTBcVLz;O04# z$DFm@6N*0gs0QaDc!D91aoV$|r2V6QLAM^2;^=4qYznlz!5B!eKm{ zj{VN`E~0Fhw*gfH>@Wde#~!LPdIE$?q{L&xTED` zesS(D;l;fuyn?+bdHZbfw<>TqiXiSs2_(>u!kar%mK>xI&Dh#$Di01rM=$s8h|AqO z)8S%~$i#!g#A`>7MhZsvY#gs*pYh^O3tqHm@+q72sRSp@*zY)MgW=G~S`vAz33MK8 zGJ0HoN5^%@VdK_fR3St;x>;MuiV614(GEW`InW1Ue9wdD z^bWnW-aTr2JnSHFWN7Q1R_YW%cTE0Pzg(%mYxea8bT_A_z6+1Addpxqaj-X4Sb!)l zP{n}(r=;}wlxp376z|jmEvMeKh<$)ml}BkqAQ)?Q3O;K+pQVPKW8dF%Hqvv{5|L7i zXt#Xc20U*AFirJ>^?V`V`D5z|ht6D&O?e~=qIf9EG|k7JFGDCChR|mDQ|k$b@A)(9 z`7_e9Q9HJDdpoMz8{_MNEwW_M*KFXCExdSWtG#rqJgQqIyh5!K-qb3?8;EqPJgQqI zfdpISQQazS3N#tr+E5+b+Bj1z^3s;Fj3HhjDx1EM0$%9I;}CG(TZ4D;KrRsz@<2~# zTEP8%F=;6~j!2sQh>ppp^mZ66-xRLp`-I(J6HXk@ei#7~Cb{$$n~cczeJ6;586dqi zCme+-MRU;GdNRTqkuJTFCme{vmg#nI+`*M@f9CEY`6A2DaX}8VI=oQ6WIf?9p51t& zLfbix{Wiu+vu}s-hHYZj<0*?{!Zu#|X$y&2#(7s!<2Dm(8_8|d{uM2^$FkIM(?Rj1!@yE=Ch@jrJLi}E+`sBqnS&K(_9*MHE*g_ zn`V+5+lDrEs7*cOZh?D_+T>5ft_FA<*~&LS<+ftAtx8PMR0=UDc(S0?P8ML74XaUD z_!P_EGKb!9Ip9bJ=_nPf1yYs2_{jr1AQjHjg)Tj~)U&)za}F zY~nxQVe>Dx2>VBy%O4|iA#H=k#HKI%p(106@=q4yPrkHgF5oE$0fh7oN718murwjm zKV$Jsp?)xaT^_SOwV+feu17v zyRQ_rDq#cR@RunRM!cG0I6}(~YLX3sBQLKoSeByTkK*8uDZw8l!5^5hFH97{h$o8U zi7D|!Ndn_#n+F_uxHs>2G;OW-iMYWZNIW&+vZ0D>nj&3Df4ZL9P=+oqffs#C&6ip} zw|;6+`cL5$ga7#eM(l}*E2I2dqQZAeg>I5^VhhbpP3c=Q!Z#NL?=&#?3k5Gj$iCPh zeFqd@{zMmI@V!g?VqynZQ{h^vJv)QfUA0ADUb5=qt9D+0@lIS6wd=}Vdw0ES$8|IC zhT^T}HSK&s!mhnH(%n*YV}f7WCUZAY;Kqi|tlJmN{R(u05Z?x&-(Wl`{q|=6<}7`& z)p)M3;`f95uVf~NxoRrvUMao_D&h{R%*&zlT~243E1c~8OOY2Vl_8dX4fr0qNNC4( z*X_Fcs_|VqRD`5H<<~{s29$A$4^;&6x_I}lOK}}d);%_%8+p=~+GO1QlYLdsn0MTS zZ=`X`(Qar4k-GCl-h@~p-zk{L<|H=D*qnwJ%Es~#G<}8>tE^J&aQ5R^x!*(yykP71unf?IBx>pEnHYs%I(-i1<=n#PzmTNFzgcXwBH1q zIt>U6jZEV+=pwu$IEI0Y5CxAc-g@)YA5H4R`vjTfDIgdZhQ=JM--&`JZo2S-s@|V} z$h@l)w|*leIvo)LY_JYA(@R9zHl&o&4^(4JK*dAtBQ6!W)KEw-GtBTxkXNicis|I1 z{VT=}u3Qwsb(^}F=2R-3Dq=Am_QMCi@j^@d&L?sUtQUH8?G?imikN7FRJ?^2Lp~FLMSP~e7?wfq&GwpSyh=E;si?PG=.StaticProperty1 "You got a static property" - check "vlkrrevpojvr1c" - FSharp.HelloWorld.HelloWorldTypeWithStaticStringParameter<__SOURCE_DIRECTORY__>.StaticProperty1 - "You got a static property" module Bool = check "vlkrrevpojvr1" diff --git a/tests/fsharp/typecheck/sigs/neg03.bsl b/tests/fsharp/typecheck/sigs/neg03.bsl index 6b6f72b5826..c956b2738dd 100644 --- a/tests/fsharp/typecheck/sigs/neg03.bsl +++ b/tests/fsharp/typecheck/sigs/neg03.bsl @@ -13,7 +13,7 @@ neg03.fs(14,5,14,8): typecheck error FS0025: Incomplete pattern matches on this neg03.fs(16,8,16,11): typecheck error FS0025: Incomplete pattern matches on this expression. For example, the value '[_;_]' may indicate a case not covered by the pattern(s). -neg03.fs(22,39,22,47): typecheck error FS0026: This rule will never be matched +neg03.fs(22,39,22,42): typecheck error FS0026: This rule will never be matched neg03.fs(25,9,25,13): typecheck error FS0001: The type 'bool' does not support the operator '<<<' @@ -92,9 +92,9 @@ neg03.fs(86,9,86,13): typecheck error FS0025: Incomplete pattern matches on this neg03.fs(87,19,87,26): typecheck error FS0025: Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s). -neg03.fs(91,11,91,26): typecheck error FS0026: This rule will never be matched +neg03.fs(91,11,91,20): typecheck error FS0026: This rule will never be matched -neg03.fs(97,11,97,26): typecheck error FS0026: This rule will never be matched +neg03.fs(97,11,97,20): typecheck error FS0026: This rule will never be matched neg03.fs(100,9,100,12): typecheck error FS0025: Incomplete pattern matches on this expression. For example, the value '[_]' may indicate a case not covered by the pattern(s). diff --git a/tests/fsharp/typecheck/sigs/neg07.bsl b/tests/fsharp/typecheck/sigs/neg07.bsl index b768e036c87..fa80ade69b1 100644 --- a/tests/fsharp/typecheck/sigs/neg07.bsl +++ b/tests/fsharp/typecheck/sigs/neg07.bsl @@ -10,7 +10,7 @@ neg07.fs(27,11,27,21): typecheck error FS0049: Uppercase variable identifiers sh neg07.fs(28,11,28,21): typecheck error FS0049: Uppercase variable identifiers should not generally be used in patterns, and may indicate a missing open declaration or a misspelt pattern name. -neg07.fs(28,11,28,26): typecheck error FS0026: This rule will never be matched +neg07.fs(28,11,28,21): typecheck error FS0026: This rule will never be matched neg07.fs(31,18,31,28): typecheck error FS0039: The value or constructor 'UnionCase1' is not defined. Maybe you want one of the following: X.UnionCase1 @@ -19,7 +19,7 @@ neg07.fs(35,11,35,21): typecheck error FS0049: Uppercase variable identifiers sh neg07.fs(36,11,36,21): typecheck error FS0049: Uppercase variable identifiers should not generally be used in patterns, and may indicate a missing open declaration or a misspelt pattern name. -neg07.fs(36,11,36,27): typecheck error FS0026: This rule will never be matched +neg07.fs(36,11,36,21): typecheck error FS0026: This rule will never be matched neg07.fs(46,15,46,27): typecheck error FS0039: The record label 'RecordLabel1' is not defined. Maybe you want one of the following: R.RecordLabel1 diff --git a/tests/fsharp/typecheck/sigs/neg10.bsl b/tests/fsharp/typecheck/sigs/neg10.bsl index efbe9b93b80..2e94ef5bd9b 100644 --- a/tests/fsharp/typecheck/sigs/neg10.bsl +++ b/tests/fsharp/typecheck/sigs/neg10.bsl @@ -13,9 +13,13 @@ neg10.fs(16,32,16,34): typecheck error FS0887: The type 'C1' is not an interface neg10.fs(16,32,16,34): typecheck error FS1207: Interfaces inherited by other interfaces should be declared using 'inherit ...' instead of 'interface ...' +neg10.fs(16,32,16,34): typecheck error FS0908: This type is not an interface type + neg10.fs(17,28,17,30): typecheck error FS0887: The type 'C1' is not an interface type -neg10.fs(19,17,19,22): typecheck error FS0870: Structs cannot have an object constructor with no arguments. This is a restriction imposed on all CLI languages as structs automatically support a default constructor. +neg10.fs(17,28,17,30): typecheck error FS0908: This type is not an interface type + +neg10.fs(19,17,19,28): typecheck error FS0870: Structs cannot have an object constructor with no arguments. This is a restriction imposed on all CLI languages as structs automatically support a default constructor. neg10.fs(21,16,21,46): typecheck error FS0001: A generic construct requires that the type 'System.Enum' have a public default constructor diff --git a/tests/fsharp/typecheck/sigs/neg16.bsl b/tests/fsharp/typecheck/sigs/neg16.bsl index c32ad022d1f..72bcb7e0b85 100644 --- a/tests/fsharp/typecheck/sigs/neg16.bsl +++ b/tests/fsharp/typecheck/sigs/neg16.bsl @@ -73,24 +73,24 @@ neg16.fs(90,8,90,18): typecheck error FS0039: The pattern discriminator 'FooB++' neg16.fs(90,7,90,22): typecheck error FS0025: Incomplete pattern matches on this expression. -neg16.fs(96,3,97,16): typecheck error FS0823: The 'VolatileField' attribute may only be used on 'let' bindings in classes +neg16.fs(97,15,97,16): typecheck error FS0823: The 'VolatileField' attribute may only be used on 'let' bindings in classes -neg16.fs(99,3,100,14): typecheck error FS0823: The 'VolatileField' attribute may only be used on 'let' bindings in classes +neg16.fs(100,11,100,14): typecheck error FS0823: The 'VolatileField' attribute may only be used on 'let' bindings in classes -neg16.fs(99,3,100,14): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static +neg16.fs(100,11,100,14): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static -neg16.fs(102,3,103,9): typecheck error FS0823: The 'VolatileField' attribute may only be used on 'let' bindings in classes +neg16.fs(103,7,103,9): typecheck error FS0823: The 'VolatileField' attribute may only be used on 'let' bindings in classes -neg16.fs(102,3,103,9): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static +neg16.fs(103,7,103,9): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static neg16.fs(119,17,119,24): typecheck error FS0823: The 'VolatileField' attribute may only be used on 'let' bindings in classes -neg16.fs(106,5,107,19): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static +neg16.fs(107,16,107,19): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static -neg16.fs(109,5,110,20): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static +neg16.fs(110,16,110,20): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static -neg16.fs(112,5,113,11): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static +neg16.fs(113,9,113,11): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static -neg16.fs(115,5,116,13): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static +neg16.fs(116,9,116,13): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static neg16.fs(130,10,130,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/neg20.bsl b/tests/fsharp/typecheck/sigs/neg20.bsl index 75d06ce1332..4227ab07193 100644 --- a/tests/fsharp/typecheck/sigs/neg20.bsl +++ b/tests/fsharp/typecheck/sigs/neg20.bsl @@ -305,7 +305,7 @@ neg20.fs(195,5,195,10): typecheck error FS0842: This attribute is not valid for neg20.fs(198,5,198,11): typecheck error FS0842: This attribute is not valid for use on this language element -neg20.fs(201,3,202,9): typecheck error FS0825: The 'DefaultValue' attribute may only be used on 'val' declarations +neg20.fs(202,7,202,9): typecheck error FS0825: The 'DefaultValue' attribute may only be used on 'val' declarations neg20.fs(204,5,204,14): typecheck error FS0842: This attribute is not valid for use on this language element diff --git a/tests/fsharp/typecheck/sigs/neg47.bsl b/tests/fsharp/typecheck/sigs/neg47.bsl index 7653ed8d5b1..52964659d68 100644 --- a/tests/fsharp/typecheck/sigs/neg47.bsl +++ b/tests/fsharp/typecheck/sigs/neg47.bsl @@ -1,8 +1,8 @@ neg47.fs(18,9,18,26): typecheck error FS1221: DLLImport bindings must be static members in a class or function definitions in a module -neg47.fs(23,5,24,33): typecheck error FS1221: DLLImport bindings must be static members in a class or function definitions in a module +neg47.fs(24,12,24,33): typecheck error FS1221: DLLImport bindings must be static members in a class or function definitions in a module -neg47.fs(28,9,29,27): typecheck error FS1221: DLLImport bindings must be static members in a class or function definitions in a module +neg47.fs(29,16,29,27): typecheck error FS1221: DLLImport bindings must be static members in a class or function definitions in a module -neg47.fs(32,5,33,27): typecheck error FS1221: DLLImport bindings must be static members in a class or function definitions in a module +neg47.fs(33,12,33,27): typecheck error FS1221: DLLImport bindings must be static members in a class or function definitions in a module diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember01.il.bsl index b07afd62275..5875beb14e4 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly CCtorDUWithMember01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.CCtorDUWithMember01 { - // Offset: 0x00000000 Length: 0x0000077A + // Offset: 0x00000000 Length: 0x00000790 } .mresource public FSharpOptimizationData.CCtorDUWithMember01 { - // Offset: 0x00000780 Length: 0x00000227 + // Offset: 0x00000798 Length: 0x00000227 } .module CCtorDUWithMember01.exe -// MVID: {60B68B7E-26F1-14EE-A745-03837E8BB660} +// MVID: {59B1923F-26F1-14EE-A745-03833F92B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06D80000 +// Image base: 0x00A70000 // =============== CLASS MEMBERS DECLARATION =================== @@ -70,7 +70,7 @@ [2] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_2, [3] class CCtorDUWithMember01a/C V_3) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 2,2 : 1,23 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember01.fs' + .line 2,2 : 1,23 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember01.fs' IL_0000: ldstr "File1.A = %A" IL_0005: 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 CCtorDUWithMember01a/C>::.ctor(string) IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) @@ -255,60 +255,76 @@ instance int32 CompareTo(class CCtorDUWithMember01a/C obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 48 (0x30) + // Code size 64 (0x40) .maxstack 4 .locals init ([0] int32 V_0, [1] int32 V_1) - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember01a.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember01a.fs' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0026 + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: ldnull - IL_0008: cgt.un - IL_000a: brfalse.s IL_0024 + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: brfalse.s IL_0012 + + IL_0010: br.s IL_0014 + + IL_0012: br.s IL_0030 .line 100001,100001 : 0,0 '' - IL_000c: ldarg.0 - IL_000d: ldfld int32 CCtorDUWithMember01a/C::_tag - IL_0012: stloc.0 - IL_0013: ldarg.1 - IL_0014: ldfld int32 CCtorDUWithMember01a/C::_tag - IL_0019: stloc.1 - IL_001a: ldloc.0 - IL_001b: ldloc.1 - IL_001c: bne.un.s IL_0020 + IL_0014: ldarg.0 + IL_0015: ldfld int32 CCtorDUWithMember01a/C::_tag + IL_001a: stloc.0 + IL_001b: ldarg.1 + IL_001c: ldfld int32 CCtorDUWithMember01a/C::_tag + IL_0021: stloc.1 + IL_0022: ldloc.0 + IL_0023: ldloc.1 + IL_0024: bne.un.s IL_0028 + + IL_0026: br.s IL_002a + + IL_0028: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_001e: ldc.i4.0 - IL_001f: ret + IL_002a: ldc.i4.0 + IL_002b: ret .line 100001,100001 : 0,0 '' - IL_0020: ldloc.0 - IL_0021: ldloc.1 - IL_0022: sub - IL_0023: ret + IL_002c: ldloc.0 + IL_002d: ldloc.1 + IL_002e: sub + IL_002f: ret .line 100001,100001 : 0,0 '' - IL_0024: ldc.i4.1 - IL_0025: ret + IL_0030: ldc.i4.1 + IL_0031: ret .line 100001,100001 : 0,0 '' - IL_0026: ldarg.1 - IL_0027: ldnull - IL_0028: cgt.un - IL_002a: brfalse.s IL_002e + IL_0032: ldarg.1 + IL_0033: ldnull + IL_0034: cgt.un + IL_0036: brfalse.s IL_003a + + IL_0038: br.s IL_003c + + IL_003a: br.s IL_003e .line 100001,100001 : 0,0 '' - IL_002c: ldc.i4.m1 - IL_002d: ret + IL_003c: ldc.i4.m1 + IL_003d: ret .line 100001,100001 : 0,0 '' - IL_002e: ldc.i4.0 - IL_002f: ret + IL_003e: ldc.i4.0 + IL_003f: ret } // end of method C::CompareTo .method public hidebysig virtual final @@ -330,7 +346,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 65 (0x41) + // Code size 81 (0x51) .maxstack 4 .locals init ([0] class CCtorDUWithMember01a/C V_0, [1] int32 V_1, @@ -342,79 +358,99 @@ IL_0007: ldarg.0 IL_0008: ldnull IL_0009: cgt.un - IL_000b: brfalse.s IL_0032 + IL_000b: brfalse.s IL_000f + + IL_000d: br.s IL_0011 + + IL_000f: br.s IL_003e .line 100001,100001 : 0,0 '' - IL_000d: ldarg.1 - IL_000e: unbox.any CCtorDUWithMember01a/C - IL_0013: ldnull - IL_0014: cgt.un - IL_0016: brfalse.s IL_0030 + IL_0011: ldarg.1 + IL_0012: unbox.any CCtorDUWithMember01a/C + IL_0017: ldnull + IL_0018: cgt.un + IL_001a: brfalse.s IL_001e + + IL_001c: br.s IL_0020 + + IL_001e: br.s IL_003c .line 100001,100001 : 0,0 '' - IL_0018: ldarg.0 - IL_0019: ldfld int32 CCtorDUWithMember01a/C::_tag - IL_001e: stloc.1 - IL_001f: ldloc.0 - IL_0020: ldfld int32 CCtorDUWithMember01a/C::_tag - IL_0025: stloc.2 - IL_0026: ldloc.1 - IL_0027: ldloc.2 - IL_0028: bne.un.s IL_002c + IL_0020: ldarg.0 + IL_0021: ldfld int32 CCtorDUWithMember01a/C::_tag + IL_0026: stloc.1 + IL_0027: ldloc.0 + IL_0028: ldfld int32 CCtorDUWithMember01a/C::_tag + IL_002d: stloc.2 + IL_002e: ldloc.1 + IL_002f: ldloc.2 + IL_0030: bne.un.s IL_0034 + + IL_0032: br.s IL_0036 + + IL_0034: br.s IL_0038 .line 100001,100001 : 0,0 '' - IL_002a: ldc.i4.0 - IL_002b: ret + IL_0036: ldc.i4.0 + IL_0037: ret .line 100001,100001 : 0,0 '' - IL_002c: ldloc.1 - IL_002d: ldloc.2 - IL_002e: sub - IL_002f: ret + IL_0038: ldloc.1 + IL_0039: ldloc.2 + IL_003a: sub + IL_003b: ret .line 100001,100001 : 0,0 '' - IL_0030: ldc.i4.1 - IL_0031: ret + IL_003c: ldc.i4.1 + IL_003d: ret .line 100001,100001 : 0,0 '' - IL_0032: ldarg.1 - IL_0033: unbox.any CCtorDUWithMember01a/C - IL_0038: ldnull - IL_0039: cgt.un - IL_003b: brfalse.s IL_003f + IL_003e: ldarg.1 + IL_003f: unbox.any CCtorDUWithMember01a/C + IL_0044: ldnull + IL_0045: cgt.un + IL_0047: brfalse.s IL_004b + + IL_0049: br.s IL_004d + + IL_004b: br.s IL_004f .line 100001,100001 : 0,0 '' - IL_003d: ldc.i4.m1 - IL_003e: ret + IL_004d: ldc.i4.m1 + IL_004e: ret .line 100001,100001 : 0,0 '' - IL_003f: ldc.i4.0 - IL_0040: ret + IL_004f: ldc.i4.0 + IL_0050: ret } // end of method C::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 17 (0x11) + // Code size 21 (0x15) .maxstack 3 .locals init ([0] int32 V_0) .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_000f + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_0013 .line 100001,100001 : 0,0 '' - IL_0006: ldc.i4.0 - IL_0007: stloc.0 - IL_0008: ldarg.0 - IL_0009: ldfld int32 CCtorDUWithMember01a/C::_tag - IL_000e: ret + IL_000a: ldc.i4.0 + IL_000b: stloc.0 + IL_000c: ldarg.0 + IL_000d: ldfld int32 CCtorDUWithMember01a/C::_tag + IL_0012: ret .line 100001,100001 : 0,0 '' - IL_000f: ldc.i4.0 - IL_0010: ret + IL_0013: ldc.i4.0 + IL_0014: ret } // end of method C::GetHashCode .method public hidebysig virtual final @@ -435,7 +471,7 @@ class [mscorlib]System.Collections.IEqualityComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 47 (0x2f) + // Code size 55 (0x37) .maxstack 4 .locals init ([0] class CCtorDUWithMember01a/C V_0, [1] class CCtorDUWithMember01a/C V_1, @@ -445,40 +481,48 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0027 + IL_0004: brfalse.s IL_0008 - .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: isinst CCtorDUWithMember01a/C - IL_000c: stloc.0 - IL_000d: ldloc.0 - IL_000e: brfalse.s IL_0025 + IL_0006: br.s IL_000a + + IL_0008: br.s IL_002f .line 100001,100001 : 0,0 '' - IL_0010: ldloc.0 - IL_0011: stloc.1 - IL_0012: ldarg.0 - IL_0013: ldfld int32 CCtorDUWithMember01a/C::_tag - IL_0018: stloc.2 - IL_0019: ldloc.1 - IL_001a: ldfld int32 CCtorDUWithMember01a/C::_tag - IL_001f: stloc.3 - IL_0020: ldloc.2 - IL_0021: ldloc.3 - IL_0022: ceq - IL_0024: ret + IL_000a: ldarg.1 + IL_000b: isinst CCtorDUWithMember01a/C + IL_0010: stloc.0 + IL_0011: ldloc.0 + IL_0012: brfalse.s IL_0016 + + IL_0014: br.s IL_0018 + + IL_0016: br.s IL_002d .line 100001,100001 : 0,0 '' - IL_0025: ldc.i4.0 - IL_0026: ret + IL_0018: ldloc.0 + IL_0019: stloc.1 + IL_001a: ldarg.0 + IL_001b: ldfld int32 CCtorDUWithMember01a/C::_tag + IL_0020: stloc.2 + IL_0021: ldloc.1 + IL_0022: ldfld int32 CCtorDUWithMember01a/C::_tag + IL_0027: stloc.3 + IL_0028: ldloc.2 + IL_0029: ldloc.3 + IL_002a: ceq + IL_002c: ret .line 100001,100001 : 0,0 '' - IL_0027: ldarg.1 - IL_0028: ldnull - IL_0029: cgt.un - IL_002b: ldc.i4.0 - IL_002c: ceq + IL_002d: ldc.i4.0 IL_002e: ret + + .line 100001,100001 : 0,0 '' + IL_002f: ldarg.1 + IL_0030: ldnull + IL_0031: cgt.un + IL_0033: ldc.i4.0 + IL_0034: ceq + IL_0036: ret } // end of method C::Equals .method public hidebysig specialname @@ -495,7 +539,7 @@ instance bool Equals(class CCtorDUWithMember01a/C obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 41 (0x29) + // Code size 49 (0x31) .maxstack 4 .locals init ([0] int32 V_0, [1] int32 V_1) @@ -503,44 +547,52 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0021 + IL_0004: brfalse.s IL_0008 - .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: ldnull - IL_0008: cgt.un - IL_000a: brfalse.s IL_001f + IL_0006: br.s IL_000a + + IL_0008: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_000c: ldarg.0 - IL_000d: ldfld int32 CCtorDUWithMember01a/C::_tag - IL_0012: stloc.0 - IL_0013: ldarg.1 - IL_0014: ldfld int32 CCtorDUWithMember01a/C::_tag - IL_0019: stloc.1 - IL_001a: ldloc.0 - IL_001b: ldloc.1 - IL_001c: ceq - IL_001e: ret + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: brfalse.s IL_0012 + + IL_0010: br.s IL_0014 + + IL_0012: br.s IL_0027 .line 100001,100001 : 0,0 '' - IL_001f: ldc.i4.0 - IL_0020: ret + IL_0014: ldarg.0 + IL_0015: ldfld int32 CCtorDUWithMember01a/C::_tag + IL_001a: stloc.0 + IL_001b: ldarg.1 + IL_001c: ldfld int32 CCtorDUWithMember01a/C::_tag + IL_0021: stloc.1 + IL_0022: ldloc.0 + IL_0023: ldloc.1 + IL_0024: ceq + IL_0026: ret .line 100001,100001 : 0,0 '' - IL_0021: ldarg.1 - IL_0022: ldnull - IL_0023: cgt.un - IL_0025: ldc.i4.0 - IL_0026: ceq + IL_0027: ldc.i4.0 IL_0028: ret + + .line 100001,100001 : 0,0 '' + IL_0029: ldarg.1 + IL_002a: ldnull + IL_002b: cgt.un + IL_002d: ldc.i4.0 + IL_002e: ceq + IL_0030: ret } // end of method C::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 20 (0x14) + // Code size 24 (0x18) .maxstack 4 .locals init ([0] class CCtorDUWithMember01a/C V_0) .line 3,3 : 6,7 '' @@ -548,17 +600,21 @@ IL_0001: isinst CCtorDUWithMember01a/C IL_0006: stloc.0 IL_0007: ldloc.0 - IL_0008: brfalse.s IL_0012 + IL_0008: brfalse.s IL_000c + + IL_000a: br.s IL_000e + + IL_000c: br.s IL_0016 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.0 - IL_000b: ldloc.0 - IL_000c: callvirt instance bool CCtorDUWithMember01a/C::Equals(class CCtorDUWithMember01a/C) - IL_0011: ret + IL_000e: ldarg.0 + IL_000f: ldloc.0 + IL_0010: callvirt instance bool CCtorDUWithMember01a/C::Equals(class CCtorDUWithMember01a/C) + IL_0015: ret .line 100001,100001 : 0,0 '' - IL_0012: ldc.i4.0 - IL_0013: ret + IL_0016: ldc.i4.0 + IL_0017: ret } // end of method C::Equals .property instance int32 Tag() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember02.il.bsl index 10cb539ef09..f8d32ee78a8 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember02.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly CCtorDUWithMember02 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.CCtorDUWithMember02 { - // Offset: 0x00000000 Length: 0x00000302 + // Offset: 0x00000000 Length: 0x0000030C } .mresource public FSharpOptimizationData.CCtorDUWithMember02 { - // Offset: 0x00000308 Length: 0x000000E4 + // Offset: 0x00000310 Length: 0x000000E4 } .module CCtorDUWithMember02.exe -// MVID: {60B68B7E-D176-C99D-A745-03837E8BB660} +// MVID: {59B1923F-D176-C99D-A745-03833F92B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06BF0000 +// Image base: 0x01380000 // =============== CLASS MEMBERS DECLARATION =================== @@ -68,7 +68,7 @@ .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0, [1] int32 V_1) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 2,2 : 1,17 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember02.fs' + .line 2,2 : 1,17 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember02.fs' IL_0000: ldstr "x = %A" IL_0005: 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_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) @@ -152,7 +152,7 @@ // Code size 77 (0x4d) .maxstack 4 .locals init ([0] int32 y) - .line 3,3 : 1,17 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember02a.fs' + .line 3,3 : 1,17 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember02a.fs' IL_0000: ldstr "hello1" IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember03.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember03.il.bsl index 6f45553c0ec..2ded0bcb8b9 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember03.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember03.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly CCtorDUWithMember03 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.CCtorDUWithMember03 { - // Offset: 0x00000000 Length: 0x00000293 + // Offset: 0x00000000 Length: 0x0000029D } .mresource public FSharpOptimizationData.CCtorDUWithMember03 { - // Offset: 0x00000298 Length: 0x000000B2 + // Offset: 0x000002A8 Length: 0x000000B2 } .module CCtorDUWithMember03.exe -// MVID: {60B68B7E-C97B-D207-A745-03837E8BB660} +// MVID: {59B1923F-C97B-D207-A745-03833F92B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05970000 +// Image base: 0x030C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -68,7 +68,7 @@ .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0, [1] int32 V_1) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 2,2 : 1,23 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember03.fs' + .line 2,2 : 1,23 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember03.fs' IL_0000: ldstr "File1.x = %A" IL_0005: 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_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) @@ -93,7 +93,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld int32 ''.$CCtorDUWithMember03a::x@3 + IL_0000: ldsfld int32 ''.$CCtorDUWithMember03a::'x@3-1' IL_0005: ret } // end of method CCtorDUWithMember03a::get_x @@ -103,7 +103,7 @@ // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 - IL_0001: stsfld int32 ''.$CCtorDUWithMember03a::x@3 + IL_0001: stsfld int32 ''.$CCtorDUWithMember03a::'x@3-1' IL_0006: ret } // end of method CCtorDUWithMember03a::set_x @@ -118,7 +118,7 @@ .class private abstract auto ansi sealed ''.$CCtorDUWithMember03a extends [mscorlib]System.Object { - .field static assembly int32 x@3 + .field static assembly int32 'x@3-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 int32 init@ .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) @@ -129,9 +129,9 @@ { // Code size 7 (0x7) .maxstack 8 - .line 3,3 : 1,18 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember03a.fs' + .line 3,3 : 1,18 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember03a.fs' IL_0000: ldc.i4.1 - IL_0001: stsfld int32 ''.$CCtorDUWithMember03a::x@3 + IL_0001: stsfld int32 ''.$CCtorDUWithMember03a::'x@3-1' IL_0006: ret } // end of method $CCtorDUWithMember03a::.cctor diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember04.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember04.il.bsl index 0813094fef6..4063e241fda 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember04.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember04.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly CCtorDUWithMember04 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.CCtorDUWithMember04 { - // Offset: 0x00000000 Length: 0x00000293 + // Offset: 0x00000000 Length: 0x0000029D } .mresource public FSharpOptimizationData.CCtorDUWithMember04 { - // Offset: 0x00000298 Length: 0x000000B2 + // Offset: 0x000002A8 Length: 0x000000B2 } .module CCtorDUWithMember04.exe -// MVID: {60B68B7E-CF28-717B-A745-03837E8BB660} +// MVID: {59B1923F-CF28-717B-A745-03833F92B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07050000 +// Image base: 0x00AA0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -68,7 +68,7 @@ .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0, [1] int32 V_1) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 2,2 : 1,23 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember04.fs' + .line 2,2 : 1,23 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember04.fs' IL_0000: ldstr "File1.x = %A" IL_0005: 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_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) @@ -118,7 +118,7 @@ // Code size 7 (0x7) .maxstack 3 .locals init ([0] int32 x) - .line 3,3 : 1,10 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember04a.fs' + .line 3,3 : 1,10 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember04a.fs' IL_0000: call int32 CCtorDUWithMember04a::get_x() IL_0005: stloc.0 IL_0006: ret diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter01.il.bsl index 91a0b81b6ca..601e4ffc1e7 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:5:0:0 } .assembly GenIter01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.GenIter01 { - // Offset: 0x00000000 Length: 0x000001F3 + // Offset: 0x00000000 Length: 0x000001FF } .mresource public FSharpOptimizationData.GenIter01 { - // Offset: 0x000001F8 Length: 0x0000007A + // Offset: 0x00000208 Length: 0x0000007A } .module GenIter01.exe -// MVID: {60B78A57-F836-DC98-A745-0383578AB760} +// MVID: {5B9A6329-F836-DC98-A745-038329639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x04D30000 +// Image base: 0x01080000 // =============== CLASS MEMBERS DECLARATION =================== @@ -51,79 +51,355 @@ 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 [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - squaresOfOneToTen() cil managed + .class auto autochar serializable sealed nested assembly beforefieldinit specialname squaresOfOneToTen@5 + extends class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1 { - // Code size 82 (0x52) - .maxstack 5 - .locals init ([0] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0, - [1] class [mscorlib]System.Collections.Generic.IEnumerator`1 V_1, - [2] class [mscorlib]System.Collections.Generic.IEnumerable`1 V_2, - [3] int32 x, - [4] class [mscorlib]System.IDisposable V_4) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,6 : 5,25 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\GeneratedIterators\\GenIter01.fs' - IL_0000: ldc.i4.0 - IL_0001: ldc.i4.1 - IL_0002: ldc.i4.2 - IL_0003: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, - int32, - int32) - IL_0008: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_000d: stloc.1 - .line 5,5 : 7,26 '' - .try + .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 [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 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 [mscorlib]System.Collections.Generic.IEnumerator`1 'enum', + int32 pc, + int32 current) cil managed { - IL_000e: ldloc.1 - IL_000f: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0014: brfalse.s IL_002b + // Code size 28 (0x1c) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter01/squaresOfOneToTen@5::'enum' + IL_0007: ldarg.0 + IL_0008: ldarg.2 + IL_0009: stfld int32 GenIter01/squaresOfOneToTen@5::pc + IL_000e: ldarg.0 + IL_000f: ldarg.3 + IL_0010: stfld int32 GenIter01/squaresOfOneToTen@5::current + IL_0015: ldarg.0 + IL_0016: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1::.ctor() + IL_001b: ret + } // end of method squaresOfOneToTen@5::.ctor - IL_0016: ldloc.1 - IL_0017: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_001c: stloc.3 - .line 6,6 : 18,23 '' - IL_001d: ldloca.s V_0 - IL_001f: ldloc.3 - IL_0020: ldloc.3 - IL_0021: mul - IL_0022: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + .method public strict virtual instance int32 + GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed + { + // Code size 157 (0x9d) + .maxstack 8 + .locals init ([0] int32 x) + .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\\GeneratedIterators\\GenIter01.fs' + IL_0000: ldarg.0 + IL_0001: ldfld int32 GenIter01/squaresOfOneToTen@5::pc + IL_0006: ldc.i4.1 + IL_0007: sub + IL_0008: switch ( + IL_001b, + IL_001d, + IL_001f) + IL_0019: br.s IL_002a + + IL_001b: br.s IL_0021 + + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 + + .line 100001,100001 : 0,0 '' + IL_0021: nop + IL_0022: br.s IL_0073 + + .line 100001,100001 : 0,0 '' + IL_0024: nop + IL_0025: br.s IL_0070 + + .line 100001,100001 : 0,0 '' IL_0027: nop + IL_0028: br.s IL_0094 + .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_000e + IL_002a: nop + .line 5,6 : 7,23 '' + IL_002b: ldarg.0 + IL_002c: ldc.i4.0 + IL_002d: ldc.i4.1 + IL_002e: ldc.i4.2 + IL_002f: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, + int32, + int32) + IL_0034: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0039: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter01/squaresOfOneToTen@5::'enum' + IL_003e: ldarg.0 + IL_003f: ldc.i4.1 + IL_0040: stfld int32 GenIter01/squaresOfOneToTen@5::pc + .line 5,6 : 7,23 '' + IL_0045: ldarg.0 + IL_0046: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter01/squaresOfOneToTen@5::'enum' + IL_004b: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0050: brfalse.s IL_0073 + + IL_0052: ldarg.0 + IL_0053: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter01/squaresOfOneToTen@5::'enum' + IL_0058: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005d: stloc.0 + IL_005e: ldarg.0 + IL_005f: ldc.i4.2 + IL_0060: stfld int32 GenIter01/squaresOfOneToTen@5::pc + .line 6,6 : 18,23 '' + IL_0065: ldarg.0 + IL_0066: ldloc.0 + IL_0067: ldloc.0 + IL_0068: mul + IL_0069: stfld int32 GenIter01/squaresOfOneToTen@5::current + IL_006e: ldc.i4.1 + IL_006f: ret - IL_002b: ldnull - IL_002c: stloc.2 - IL_002d: leave.s IL_0048 + .line 100001,100001 : 0,0 '' + IL_0070: nop + IL_0071: br.s IL_0045 + IL_0073: ldarg.0 + IL_0074: ldc.i4.3 + IL_0075: stfld int32 GenIter01/squaresOfOneToTen@5::pc .line 5,6 : 7,23 '' - } // end .try - finally + IL_007a: ldarg.0 + IL_007b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter01/squaresOfOneToTen@5::'enum' + IL_0080: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0085: nop + IL_0086: ldarg.0 + IL_0087: ldnull + IL_0088: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter01/squaresOfOneToTen@5::'enum' + IL_008d: ldarg.0 + IL_008e: ldc.i4.3 + IL_008f: stfld int32 GenIter01/squaresOfOneToTen@5::pc + IL_0094: ldarg.0 + IL_0095: ldc.i4.0 + IL_0096: stfld int32 GenIter01/squaresOfOneToTen@5::current + IL_009b: ldc.i4.0 + IL_009c: ret + } // end of method squaresOfOneToTen@5::GenerateNext + + .method public strict virtual instance void + Close() cil managed { - IL_002f: ldloc.1 - IL_0030: isinst [mscorlib]System.IDisposable - IL_0035: stloc.s V_4 - IL_0037: ldloc.s V_4 - IL_0039: brfalse.s IL_0045 - - .line 100001,100001 : 0,0 '' - IL_003b: ldloc.s V_4 - IL_003d: callvirt instance void [mscorlib]System.IDisposable::Dispose() - IL_0042: ldnull - IL_0043: pop - IL_0044: endfinally - .line 100001,100001 : 0,0 '' - IL_0045: ldnull - IL_0046: pop - IL_0047: endfinally - .line 100001,100001 : 0,0 '' - } // end handler - IL_0048: ldloc.2 - IL_0049: pop + // Code size 148 (0x94) + .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: ldarg.0 + IL_0001: ldfld int32 GenIter01/squaresOfOneToTen@5::pc + IL_0006: ldc.i4.3 + IL_0007: sub + IL_0008: switch ( + IL_0013) + IL_0011: br.s IL_0019 + + .line 100001,100001 : 0,0 '' + IL_0013: nop + IL_0014: br IL_0087 + + .line 100001,100001 : 0,0 '' + IL_0019: nop + .try + { + IL_001a: ldarg.0 + IL_001b: ldfld int32 GenIter01/squaresOfOneToTen@5::pc + IL_0020: switch ( + IL_0037, + IL_0039, + IL_003b, + IL_003d) + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 + + .line 100001,100001 : 0,0 '' + IL_003f: nop + IL_0040: br.s IL_0061 + + .line 100001,100001 : 0,0 '' + IL_0042: nop + IL_0043: br.s IL_004d + + .line 100001,100001 : 0,0 '' + IL_0045: nop + IL_0046: br.s IL_004c + + .line 100001,100001 : 0,0 '' + IL_0048: nop + IL_0049: br.s IL_0061 + + .line 100001,100001 : 0,0 '' + IL_004b: nop + .line 100001,100001 : 0,0 '' + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 GenIter01/squaresOfOneToTen@5::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter01/squaresOfOneToTen@5::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop + .line 100001,100001 : 0,0 '' + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 GenIter01/squaresOfOneToTen@5::pc + IL_0068: ldarg.0 + IL_0069: ldc.i4.0 + IL_006a: stfld int32 GenIter01/squaresOfOneToTen@5::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f + + } // end .try + catch [mscorlib]System.Object + { + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 + .line 5,6 : 7,23 '' + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f + + .line 100001,100001 : 0,0 '' + } // end handler + IL_007f: ldloc.1 + IL_0080: pop + .line 100001,100001 : 0,0 '' + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 + + .line 100001,100001 : 0,0 '' + IL_0091: ldloc.0 + IL_0092: throw + + .line 100001,100001 : 0,0 '' + IL_0093: ret + } // end of method squaresOfOneToTen@5::Close + + .method public strict virtual instance bool + get_CheckClose() cil managed + { + // Code size 56 (0x38) + .maxstack 8 + .line 100001,100001 : 0,0 '' + IL_0000: ldarg.0 + IL_0001: ldfld int32 GenIter01/squaresOfOneToTen@5::pc + IL_0006: switch ( + IL_001d, + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e + + .line 100001,100001 : 0,0 '' + IL_0025: nop + IL_0026: br.s IL_0036 + + .line 100001,100001 : 0,0 '' + IL_0028: nop + IL_0029: br.s IL_0034 + + .line 100001,100001 : 0,0 '' + IL_002b: nop + IL_002c: br.s IL_0032 + + .line 100001,100001 : 0,0 '' + IL_002e: nop + IL_002f: br.s IL_0036 + + .line 100001,100001 : 0,0 '' + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret + + IL_0034: ldc.i4.1 + IL_0035: ret + + IL_0036: ldc.i4.0 + IL_0037: ret + } // end of method squaresOfOneToTen@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 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 GenIter01/squaresOfOneToTen@5::current + IL_0006: ret + } // end of method squaresOfOneToTen@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 9 (0x9) + .maxstack 8 + IL_0000: ldnull + IL_0001: ldc.i4.0 + IL_0002: ldc.i4.0 + IL_0003: newobj instance void GenIter01/squaresOfOneToTen@5::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + int32, + int32) + IL_0008: ret + } // end of method squaresOfOneToTen@5::GetFreshEnumerator + + } // end of class squaresOfOneToTen@5 + + .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 + squaresOfOneToTen() cil managed + { + // Code size 16 (0x10) + .maxstack 8 .line 5,6 : 5,25 '' - IL_004a: ldloca.s V_0 - IL_004c: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() - IL_0051: ret + IL_0000: ldnull + IL_0001: ldc.i4.0 + IL_0002: ldc.i4.0 + IL_0003: newobj instance void GenIter01/squaresOfOneToTen@5::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + int32, + int32) + IL_0008: tail. + IL_000a: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_000f: ret } // end of method GenIter01::squaresOfOneToTen } // end of class GenIter01 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter02.il.bsl index e9ec641157f..aa203793fe4 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter02.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:5:0:0 } .assembly GenIter02 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.GenIter02 { - // Offset: 0x00000000 Length: 0x000001F4 + // Offset: 0x00000000 Length: 0x00000200 } .mresource public FSharpOptimizationData.GenIter02 { - // Offset: 0x000001F8 Length: 0x0000007B + // Offset: 0x00000208 Length: 0x0000007B } .module GenIter02.exe -// MVID: {60B78A57-F857-DC98-A745-0383578AB760} +// MVID: {5B9A6329-F857-DC98-A745-038329639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x066F0000 +// Image base: 0x02900000 // =============== CLASS MEMBERS DECLARATION =================== @@ -51,84 +51,360 @@ 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 [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - squaresOfOneToTenB() cil managed + .class auto autochar serializable sealed nested assembly beforefieldinit specialname squaresOfOneToTenB@5 + extends class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1 { - // Code size 98 (0x62) - .maxstack 5 - .locals init ([0] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0, - [1] class [mscorlib]System.Collections.Generic.IEnumerator`1 V_1, - [2] class [mscorlib]System.Collections.Generic.IEnumerable`1 V_2, - [3] int32 x, - [4] class [mscorlib]System.IDisposable V_4) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,7 : 5,25 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\GeneratedIterators\\GenIter02.fs' - IL_0000: ldc.i4.0 - IL_0001: ldc.i4.1 - IL_0002: ldc.i4.2 - IL_0003: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, - int32, - int32) - IL_0008: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_000d: stloc.1 - .line 5,5 : 7,25 '' - .try + .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 [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 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 [mscorlib]System.Collections.Generic.IEnumerator`1 'enum', + int32 pc, + int32 current) cil managed { - IL_000e: ldloc.1 - IL_000f: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0014: brfalse.s IL_003b + // Code size 28 (0x1c) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter02/squaresOfOneToTenB@5::'enum' + IL_0007: ldarg.0 + IL_0008: ldarg.2 + IL_0009: stfld int32 GenIter02/squaresOfOneToTenB@5::pc + IL_000e: ldarg.0 + IL_000f: ldarg.3 + IL_0010: stfld int32 GenIter02/squaresOfOneToTenB@5::current + IL_0015: ldarg.0 + IL_0016: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1::.ctor() + IL_001b: ret + } // end of method squaresOfOneToTenB@5::.ctor + + .method public strict virtual instance int32 + GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed + { + // Code size 176 (0xb0) + .maxstack 8 + .locals init ([0] int32 x) + .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\\GeneratedIterators\\GenIter02.fs' + IL_0000: ldarg.0 + IL_0001: ldfld int32 GenIter02/squaresOfOneToTenB@5::pc + IL_0006: ldc.i4.1 + IL_0007: sub + IL_0008: switch ( + IL_001b, + IL_001d, + IL_001f) + IL_0019: br.s IL_002d + + IL_001b: br.s IL_0021 - IL_0016: ldloc.1 - IL_0017: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_001c: stloc.3 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 + + .line 100001,100001 : 0,0 '' + IL_0021: nop + IL_0022: br.s IL_0086 + + .line 100001,100001 : 0,0 '' + IL_0024: nop + IL_0025: br.s IL_0083 + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br IL_00a7 + + .line 100001,100001 : 0,0 '' + IL_002d: nop + .line 5,7 : 7,23 '' + IL_002e: ldarg.0 + IL_002f: ldc.i4.0 + IL_0030: ldc.i4.1 + IL_0031: ldc.i4.2 + IL_0032: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, + int32, + int32) + IL_0037: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_003c: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter02/squaresOfOneToTenB@5::'enum' + IL_0041: ldarg.0 + IL_0042: ldc.i4.1 + IL_0043: stfld int32 GenIter02/squaresOfOneToTenB@5::pc + .line 5,7 : 7,23 '' + IL_0048: ldarg.0 + IL_0049: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter02/squaresOfOneToTenB@5::'enum' + IL_004e: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0053: brfalse.s IL_0086 + + IL_0055: ldarg.0 + IL_0056: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter02/squaresOfOneToTenB@5::'enum' + IL_005b: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0060: stloc.0 .line 6,6 : 12,27 '' - IL_001d: ldstr "hello" - IL_0022: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0027: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_002c: pop + IL_0061: ldstr "hello" + IL_0066: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_006b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_0070: pop + IL_0071: ldarg.0 + IL_0072: ldc.i4.2 + IL_0073: stfld int32 GenIter02/squaresOfOneToTenB@5::pc .line 7,7 : 12,23 '' - IL_002d: ldloca.s V_0 - IL_002f: ldloc.3 - IL_0030: ldloc.3 - IL_0031: mul - IL_0032: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) - IL_0037: nop - .line 100001,100001 : 0,0 '' - IL_0038: nop - IL_0039: br.s IL_000e + IL_0078: ldarg.0 + IL_0079: ldloc.0 + IL_007a: ldloc.0 + IL_007b: mul + IL_007c: stfld int32 GenIter02/squaresOfOneToTenB@5::current + IL_0081: ldc.i4.1 + IL_0082: ret - IL_003b: ldnull - IL_003c: stloc.2 - IL_003d: leave.s IL_0058 + .line 100001,100001 : 0,0 '' + IL_0083: nop + IL_0084: br.s IL_0048 + IL_0086: ldarg.0 + IL_0087: ldc.i4.3 + IL_0088: stfld int32 GenIter02/squaresOfOneToTenB@5::pc .line 5,7 : 7,23 '' - } // end .try - finally + IL_008d: ldarg.0 + IL_008e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter02/squaresOfOneToTenB@5::'enum' + IL_0093: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0098: nop + IL_0099: ldarg.0 + IL_009a: ldnull + IL_009b: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter02/squaresOfOneToTenB@5::'enum' + IL_00a0: ldarg.0 + IL_00a1: ldc.i4.3 + IL_00a2: stfld int32 GenIter02/squaresOfOneToTenB@5::pc + IL_00a7: ldarg.0 + IL_00a8: ldc.i4.0 + IL_00a9: stfld int32 GenIter02/squaresOfOneToTenB@5::current + IL_00ae: ldc.i4.0 + IL_00af: ret + } // end of method squaresOfOneToTenB@5::GenerateNext + + .method public strict virtual instance void + Close() cil managed { - IL_003f: ldloc.1 - IL_0040: isinst [mscorlib]System.IDisposable - IL_0045: stloc.s V_4 - IL_0047: ldloc.s V_4 - IL_0049: brfalse.s IL_0055 - - .line 100001,100001 : 0,0 '' - IL_004b: ldloc.s V_4 - IL_004d: callvirt instance void [mscorlib]System.IDisposable::Dispose() - IL_0052: ldnull - IL_0053: pop - IL_0054: endfinally - .line 100001,100001 : 0,0 '' - IL_0055: ldnull - IL_0056: pop - IL_0057: endfinally - .line 100001,100001 : 0,0 '' - } // end handler - IL_0058: ldloc.2 - IL_0059: pop + // Code size 148 (0x94) + .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: ldarg.0 + IL_0001: ldfld int32 GenIter02/squaresOfOneToTenB@5::pc + IL_0006: ldc.i4.3 + IL_0007: sub + IL_0008: switch ( + IL_0013) + IL_0011: br.s IL_0019 + + .line 100001,100001 : 0,0 '' + IL_0013: nop + IL_0014: br IL_0087 + + .line 100001,100001 : 0,0 '' + IL_0019: nop + .try + { + IL_001a: ldarg.0 + IL_001b: ldfld int32 GenIter02/squaresOfOneToTenB@5::pc + IL_0020: switch ( + IL_0037, + IL_0039, + IL_003b, + IL_003d) + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 + + .line 100001,100001 : 0,0 '' + IL_003f: nop + IL_0040: br.s IL_0061 + + .line 100001,100001 : 0,0 '' + IL_0042: nop + IL_0043: br.s IL_004d + + .line 100001,100001 : 0,0 '' + IL_0045: nop + IL_0046: br.s IL_004c + + .line 100001,100001 : 0,0 '' + IL_0048: nop + IL_0049: br.s IL_0061 + + .line 100001,100001 : 0,0 '' + IL_004b: nop + .line 100001,100001 : 0,0 '' + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 GenIter02/squaresOfOneToTenB@5::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter02/squaresOfOneToTenB@5::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop + .line 100001,100001 : 0,0 '' + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 GenIter02/squaresOfOneToTenB@5::pc + IL_0068: ldarg.0 + IL_0069: ldc.i4.0 + IL_006a: stfld int32 GenIter02/squaresOfOneToTenB@5::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f + + } // end .try + catch [mscorlib]System.Object + { + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 + .line 5,7 : 7,23 '' + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f + + .line 100001,100001 : 0,0 '' + } // end handler + IL_007f: ldloc.1 + IL_0080: pop + .line 100001,100001 : 0,0 '' + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 + + .line 100001,100001 : 0,0 '' + IL_0091: ldloc.0 + IL_0092: throw + + .line 100001,100001 : 0,0 '' + IL_0093: ret + } // end of method squaresOfOneToTenB@5::Close + + .method public strict virtual instance bool + get_CheckClose() cil managed + { + // Code size 56 (0x38) + .maxstack 8 + .line 100001,100001 : 0,0 '' + IL_0000: ldarg.0 + IL_0001: ldfld int32 GenIter02/squaresOfOneToTenB@5::pc + IL_0006: switch ( + IL_001d, + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e + + .line 100001,100001 : 0,0 '' + IL_0025: nop + IL_0026: br.s IL_0036 + + .line 100001,100001 : 0,0 '' + IL_0028: nop + IL_0029: br.s IL_0034 + + .line 100001,100001 : 0,0 '' + IL_002b: nop + IL_002c: br.s IL_0032 + + .line 100001,100001 : 0,0 '' + IL_002e: nop + IL_002f: br.s IL_0036 + + .line 100001,100001 : 0,0 '' + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret + + IL_0034: ldc.i4.1 + IL_0035: ret + + IL_0036: ldc.i4.0 + IL_0037: ret + } // end of method squaresOfOneToTenB@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 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 GenIter02/squaresOfOneToTenB@5::current + IL_0006: ret + } // end of method squaresOfOneToTenB@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 9 (0x9) + .maxstack 8 + IL_0000: ldnull + IL_0001: ldc.i4.0 + IL_0002: ldc.i4.0 + IL_0003: newobj instance void GenIter02/squaresOfOneToTenB@5::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + int32, + int32) + IL_0008: ret + } // end of method squaresOfOneToTenB@5::GetFreshEnumerator + + } // end of class squaresOfOneToTenB@5 + + .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 + squaresOfOneToTenB() cil managed + { + // Code size 16 (0x10) + .maxstack 8 .line 5,7 : 5,25 '' - IL_005a: ldloca.s V_0 - IL_005c: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() - IL_0061: ret + IL_0000: ldnull + IL_0001: ldc.i4.0 + IL_0002: ldc.i4.0 + IL_0003: newobj instance void GenIter02/squaresOfOneToTenB@5::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + int32, + int32) + IL_0008: tail. + IL_000a: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_000f: ret } // end of method GenIter02::squaresOfOneToTenB } // end of class GenIter02 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter03.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter03.il.bsl index b649a939686..88bd760bc85 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter03.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter03.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:5:0:0 } .assembly GenIter03 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.GenIter03 { - // Offset: 0x00000000 Length: 0x000001F4 + // Offset: 0x00000000 Length: 0x00000200 } .mresource public FSharpOptimizationData.GenIter03 { - // Offset: 0x000001F8 Length: 0x0000007B + // Offset: 0x00000208 Length: 0x0000007B } .module GenIter03.exe -// MVID: {60B78A57-F77C-DC98-A745-0383578AB760} +// MVID: {5B9A6329-F77C-DC98-A745-038329639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x057E0000 +// Image base: 0x026B0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -51,79 +51,355 @@ 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 [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - squaresOfOneToTenC() cil managed + .class auto autochar serializable sealed nested assembly beforefieldinit specialname squaresOfOneToTenC@4 + extends class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1 { - // Code size 83 (0x53) - .maxstack 5 - .locals init ([0] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0, - [1] class [mscorlib]System.Collections.Generic.IEnumerator`1 V_1, - [2] class [mscorlib]System.Collections.Generic.IEnumerable`1 V_2, - [3] int32 x, - [4] class [mscorlib]System.IDisposable V_4) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 28,57 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\GeneratedIterators\\GenIter03.fs' - IL_0000: ldc.i4.0 - IL_0001: ldc.i4.1 - IL_0002: ldc.i4.s 10 - IL_0004: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, - int32, - int32) - IL_0009: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_000e: stloc.1 - .line 4,4 : 30,46 '' - .try + .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 [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 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 [mscorlib]System.Collections.Generic.IEnumerator`1 'enum', + int32 pc, + int32 current) cil managed { - IL_000f: ldloc.1 - IL_0010: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0015: brfalse.s IL_002c + // Code size 28 (0x1c) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter03/squaresOfOneToTenC@4::'enum' + IL_0007: ldarg.0 + IL_0008: ldarg.2 + IL_0009: stfld int32 GenIter03/squaresOfOneToTenC@4::pc + IL_000e: ldarg.0 + IL_000f: ldarg.3 + IL_0010: stfld int32 GenIter03/squaresOfOneToTenC@4::current + IL_0015: ldarg.0 + IL_0016: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1::.ctor() + IL_001b: ret + } // end of method squaresOfOneToTenC@4::.ctor + + .method public strict virtual instance int32 + GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed + { + // Code size 158 (0x9e) + .maxstack 8 + .locals init ([0] int32 x) + .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\\GeneratedIterators\\GenIter03.fs' + IL_0000: ldarg.0 + IL_0001: ldfld int32 GenIter03/squaresOfOneToTenC@4::pc + IL_0006: ldc.i4.1 + IL_0007: sub + IL_0008: switch ( + IL_001b, + IL_001d, + IL_001f) + IL_0019: br.s IL_002a + + IL_001b: br.s IL_0021 - IL_0017: ldloc.1 - IL_0018: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_001d: stloc.3 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 + + .line 100001,100001 : 0,0 '' + IL_0021: nop + IL_0022: br.s IL_0074 + + .line 100001,100001 : 0,0 '' + IL_0024: nop + IL_0025: br.s IL_0071 + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0095 + + .line 100001,100001 : 0,0 '' + IL_002a: nop + .line 4,4 : 30,55 '' + IL_002b: ldarg.0 + IL_002c: ldc.i4.0 + IL_002d: ldc.i4.1 + IL_002e: ldc.i4.s 10 + IL_0030: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, + int32, + int32) + IL_0035: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_003a: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter03/squaresOfOneToTenC@4::'enum' + IL_003f: ldarg.0 + IL_0040: ldc.i4.1 + IL_0041: stfld int32 GenIter03/squaresOfOneToTenC@4::pc + .line 4,4 : 30,55 '' + IL_0046: ldarg.0 + IL_0047: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter03/squaresOfOneToTenC@4::'enum' + IL_004c: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0051: brfalse.s IL_0074 + + IL_0053: ldarg.0 + IL_0054: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter03/squaresOfOneToTenC@4::'enum' + IL_0059: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005e: stloc.0 + IL_005f: ldarg.0 + IL_0060: ldc.i4.2 + IL_0061: stfld int32 GenIter03/squaresOfOneToTenC@4::pc .line 4,4 : 50,55 '' - IL_001e: ldloca.s V_0 - IL_0020: ldloc.3 - IL_0021: ldloc.3 - IL_0022: mul - IL_0023: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_0066: ldarg.0 + IL_0067: ldloc.0 + IL_0068: ldloc.0 + IL_0069: mul + IL_006a: stfld int32 GenIter03/squaresOfOneToTenC@4::current + IL_006f: ldc.i4.1 + IL_0070: ret + + .line 100001,100001 : 0,0 '' + IL_0071: nop + IL_0072: br.s IL_0046 + + IL_0074: ldarg.0 + IL_0075: ldc.i4.3 + IL_0076: stfld int32 GenIter03/squaresOfOneToTenC@4::pc + .line 4,4 : 30,55 '' + IL_007b: ldarg.0 + IL_007c: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter03/squaresOfOneToTenC@4::'enum' + IL_0081: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0086: nop + IL_0087: ldarg.0 + IL_0088: ldnull + IL_0089: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter03/squaresOfOneToTenC@4::'enum' + IL_008e: ldarg.0 + IL_008f: ldc.i4.3 + IL_0090: stfld int32 GenIter03/squaresOfOneToTenC@4::pc + IL_0095: ldarg.0 + IL_0096: ldc.i4.0 + IL_0097: stfld int32 GenIter03/squaresOfOneToTenC@4::current + IL_009c: ldc.i4.0 + IL_009d: ret + } // end of method squaresOfOneToTenC@4::GenerateNext + + .method public strict virtual instance void + Close() cil managed + { + // Code size 148 (0x94) + .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: ldarg.0 + IL_0001: ldfld int32 GenIter03/squaresOfOneToTenC@4::pc + IL_0006: ldc.i4.3 + IL_0007: sub + IL_0008: switch ( + IL_0013) + IL_0011: br.s IL_0019 + + .line 100001,100001 : 0,0 '' + IL_0013: nop + IL_0014: br IL_0087 + + .line 100001,100001 : 0,0 '' + IL_0019: nop + .try + { + IL_001a: ldarg.0 + IL_001b: ldfld int32 GenIter03/squaresOfOneToTenC@4::pc + IL_0020: switch ( + IL_0037, + IL_0039, + IL_003b, + IL_003d) + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 + + .line 100001,100001 : 0,0 '' + IL_003f: nop + IL_0040: br.s IL_0061 + + .line 100001,100001 : 0,0 '' + IL_0042: nop + IL_0043: br.s IL_004d + + .line 100001,100001 : 0,0 '' + IL_0045: nop + IL_0046: br.s IL_004c + + .line 100001,100001 : 0,0 '' + IL_0048: nop + IL_0049: br.s IL_0061 + + .line 100001,100001 : 0,0 '' + IL_004b: nop + .line 100001,100001 : 0,0 '' + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 GenIter03/squaresOfOneToTenC@4::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter03/squaresOfOneToTenC@4::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop + .line 100001,100001 : 0,0 '' + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 GenIter03/squaresOfOneToTenC@4::pc + IL_0068: ldarg.0 + IL_0069: ldc.i4.0 + IL_006a: stfld int32 GenIter03/squaresOfOneToTenC@4::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f + + } // end .try + catch [mscorlib]System.Object + { + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 + .line 4,4 : 30,55 '' + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f + + .line 100001,100001 : 0,0 '' + } // end handler + IL_007f: ldloc.1 + IL_0080: pop + .line 100001,100001 : 0,0 '' + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 + + .line 100001,100001 : 0,0 '' + IL_0091: ldloc.0 + IL_0092: throw + + .line 100001,100001 : 0,0 '' + IL_0093: ret + } // end of method squaresOfOneToTenC@4::Close + + .method public strict virtual instance bool + get_CheckClose() cil managed + { + // Code size 56 (0x38) + .maxstack 8 + .line 100001,100001 : 0,0 '' + IL_0000: ldarg.0 + IL_0001: ldfld int32 GenIter03/squaresOfOneToTenC@4::pc + IL_0006: switch ( + IL_001d, + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e + + .line 100001,100001 : 0,0 '' + IL_0025: nop + IL_0026: br.s IL_0036 + + .line 100001,100001 : 0,0 '' IL_0028: nop + IL_0029: br.s IL_0034 + .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: br.s IL_000f + IL_002b: nop + IL_002c: br.s IL_0032 - IL_002c: ldnull - IL_002d: stloc.2 - IL_002e: leave.s IL_0049 + .line 100001,100001 : 0,0 '' + IL_002e: nop + IL_002f: br.s IL_0036 - .line 4,4 : 30,55 '' - } // end .try - finally + .line 100001,100001 : 0,0 '' + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret + + IL_0034: ldc.i4.1 + IL_0035: ret + + IL_0036: ldc.i4.0 + IL_0037: ret + } // end of method squaresOfOneToTenC@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 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 GenIter03/squaresOfOneToTenC@4::current + IL_0006: ret + } // end of method squaresOfOneToTenC@4::get_LastGenerated + + .method public strict virtual instance class [mscorlib]System.Collections.Generic.IEnumerator`1 + GetFreshEnumerator() cil managed { - IL_0030: ldloc.1 - IL_0031: isinst [mscorlib]System.IDisposable - IL_0036: stloc.s V_4 - IL_0038: ldloc.s V_4 - IL_003a: brfalse.s IL_0046 - - .line 100001,100001 : 0,0 '' - IL_003c: ldloc.s V_4 - IL_003e: callvirt instance void [mscorlib]System.IDisposable::Dispose() - IL_0043: ldnull - IL_0044: pop - IL_0045: endfinally - .line 100001,100001 : 0,0 '' - IL_0046: ldnull - IL_0047: pop - IL_0048: endfinally - .line 100001,100001 : 0,0 '' - } // end handler - IL_0049: ldloc.2 - IL_004a: pop + .custom 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 9 (0x9) + .maxstack 8 + IL_0000: ldnull + IL_0001: ldc.i4.0 + IL_0002: ldc.i4.0 + IL_0003: newobj instance void GenIter03/squaresOfOneToTenC@4::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + int32, + int32) + IL_0008: ret + } // end of method squaresOfOneToTenC@4::GetFreshEnumerator + + } // end of class squaresOfOneToTenC@4 + + .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 + squaresOfOneToTenC() cil managed + { + // Code size 16 (0x10) + .maxstack 8 .line 4,4 : 28,57 '' - IL_004b: ldloca.s V_0 - IL_004d: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() - IL_0052: ret + IL_0000: ldnull + IL_0001: ldc.i4.0 + IL_0002: ldc.i4.0 + IL_0003: newobj instance void GenIter03/squaresOfOneToTenC@4::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + int32, + int32) + IL_0008: tail. + IL_000a: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_000f: ret } // end of method GenIter03::squaresOfOneToTenC } // end of class GenIter03 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter04.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter04.il.bsl index c3401ee5341..25a08dfd652 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter04.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter04.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:5:0:0 } .assembly GenIter04 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.GenIter04 { - // Offset: 0x00000000 Length: 0x000001E4 + // Offset: 0x00000000 Length: 0x000001F0 } .mresource public FSharpOptimizationData.GenIter04 { - // Offset: 0x000001E8 Length: 0x0000007B + // Offset: 0x000001F8 Length: 0x0000007B } .module GenIter04.exe -// MVID: {60B78A57-F79D-DC98-A745-0383578AB760} +// MVID: {5B9A6329-F79D-DC98-A745-038329639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06F10000 +// Image base: 0x00790000 // =============== CLASS MEMBERS DECLARATION =================== @@ -51,6 +51,340 @@ 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 squaresOfOneToTenD@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 [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 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 [mscorlib]System.Collections.Generic.IEnumerator`1 'enum', + int32 pc, + int32 current) cil managed + { + // Code size 28 (0x1c) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter04/squaresOfOneToTenD@4::'enum' + IL_0007: ldarg.0 + IL_0008: ldarg.2 + IL_0009: stfld int32 GenIter04/squaresOfOneToTenD@4::pc + IL_000e: ldarg.0 + IL_000f: ldarg.3 + IL_0010: stfld int32 GenIter04/squaresOfOneToTenD@4::current + IL_0015: ldarg.0 + IL_0016: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1::.ctor() + IL_001b: ret + } // end of method squaresOfOneToTenD@4::.ctor + + .method public strict virtual instance int32 + GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed + { + // Code size 158 (0x9e) + .maxstack 8 + .locals init ([0] int32 x) + .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\\GeneratedIterators\\GenIter04.fs' + IL_0000: ldarg.0 + IL_0001: ldfld int32 GenIter04/squaresOfOneToTenD@4::pc + IL_0006: ldc.i4.1 + IL_0007: sub + IL_0008: switch ( + IL_001b, + IL_001d, + IL_001f) + IL_0019: br.s IL_002a + + IL_001b: br.s IL_0021 + + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 + + .line 100001,100001 : 0,0 '' + IL_0021: nop + IL_0022: br.s IL_0074 + + .line 100001,100001 : 0,0 '' + IL_0024: nop + IL_0025: br.s IL_0071 + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0095 + + .line 100001,100001 : 0,0 '' + IL_002a: nop + .line 4,4 : 28,53 '' + IL_002b: ldarg.0 + IL_002c: ldc.i4.0 + IL_002d: ldc.i4.1 + IL_002e: ldc.i4.s 10 + IL_0030: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, + int32, + int32) + IL_0035: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_003a: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter04/squaresOfOneToTenD@4::'enum' + IL_003f: ldarg.0 + IL_0040: ldc.i4.1 + IL_0041: stfld int32 GenIter04/squaresOfOneToTenD@4::pc + .line 4,4 : 28,53 '' + IL_0046: ldarg.0 + IL_0047: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter04/squaresOfOneToTenD@4::'enum' + IL_004c: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0051: brfalse.s IL_0074 + + IL_0053: ldarg.0 + IL_0054: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter04/squaresOfOneToTenD@4::'enum' + IL_0059: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005e: stloc.0 + IL_005f: ldarg.0 + IL_0060: ldc.i4.2 + IL_0061: stfld int32 GenIter04/squaresOfOneToTenD@4::pc + .line 4,4 : 48,53 '' + IL_0066: ldarg.0 + IL_0067: ldloc.0 + IL_0068: ldloc.0 + IL_0069: mul + IL_006a: stfld int32 GenIter04/squaresOfOneToTenD@4::current + IL_006f: ldc.i4.1 + IL_0070: ret + + .line 100001,100001 : 0,0 '' + IL_0071: nop + IL_0072: br.s IL_0046 + + IL_0074: ldarg.0 + IL_0075: ldc.i4.3 + IL_0076: stfld int32 GenIter04/squaresOfOneToTenD@4::pc + .line 4,4 : 28,53 '' + IL_007b: ldarg.0 + IL_007c: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter04/squaresOfOneToTenD@4::'enum' + IL_0081: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0086: nop + IL_0087: ldarg.0 + IL_0088: ldnull + IL_0089: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter04/squaresOfOneToTenD@4::'enum' + IL_008e: ldarg.0 + IL_008f: ldc.i4.3 + IL_0090: stfld int32 GenIter04/squaresOfOneToTenD@4::pc + IL_0095: ldarg.0 + IL_0096: ldc.i4.0 + IL_0097: stfld int32 GenIter04/squaresOfOneToTenD@4::current + IL_009c: ldc.i4.0 + IL_009d: ret + } // end of method squaresOfOneToTenD@4::GenerateNext + + .method public strict virtual instance void + Close() cil managed + { + // Code size 148 (0x94) + .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: ldarg.0 + IL_0001: ldfld int32 GenIter04/squaresOfOneToTenD@4::pc + IL_0006: ldc.i4.3 + IL_0007: sub + IL_0008: switch ( + IL_0013) + IL_0011: br.s IL_0019 + + .line 100001,100001 : 0,0 '' + IL_0013: nop + IL_0014: br IL_0087 + + .line 100001,100001 : 0,0 '' + IL_0019: nop + .try + { + IL_001a: ldarg.0 + IL_001b: ldfld int32 GenIter04/squaresOfOneToTenD@4::pc + IL_0020: switch ( + IL_0037, + IL_0039, + IL_003b, + IL_003d) + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 + + .line 100001,100001 : 0,0 '' + IL_003f: nop + IL_0040: br.s IL_0061 + + .line 100001,100001 : 0,0 '' + IL_0042: nop + IL_0043: br.s IL_004d + + .line 100001,100001 : 0,0 '' + IL_0045: nop + IL_0046: br.s IL_004c + + .line 100001,100001 : 0,0 '' + IL_0048: nop + IL_0049: br.s IL_0061 + + .line 100001,100001 : 0,0 '' + IL_004b: nop + .line 100001,100001 : 0,0 '' + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 GenIter04/squaresOfOneToTenD@4::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter04/squaresOfOneToTenD@4::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop + .line 100001,100001 : 0,0 '' + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 GenIter04/squaresOfOneToTenD@4::pc + IL_0068: ldarg.0 + IL_0069: ldc.i4.0 + IL_006a: stfld int32 GenIter04/squaresOfOneToTenD@4::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f + + } // end .try + catch [mscorlib]System.Object + { + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 + .line 4,4 : 28,53 '' + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f + + .line 100001,100001 : 0,0 '' + } // end handler + IL_007f: ldloc.1 + IL_0080: pop + .line 100001,100001 : 0,0 '' + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 + + .line 100001,100001 : 0,0 '' + IL_0091: ldloc.0 + IL_0092: throw + + .line 100001,100001 : 0,0 '' + IL_0093: ret + } // end of method squaresOfOneToTenD@4::Close + + .method public strict virtual instance bool + get_CheckClose() cil managed + { + // Code size 56 (0x38) + .maxstack 8 + .line 100001,100001 : 0,0 '' + IL_0000: ldarg.0 + IL_0001: ldfld int32 GenIter04/squaresOfOneToTenD@4::pc + IL_0006: switch ( + IL_001d, + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e + + .line 100001,100001 : 0,0 '' + IL_0025: nop + IL_0026: br.s IL_0036 + + .line 100001,100001 : 0,0 '' + IL_0028: nop + IL_0029: br.s IL_0034 + + .line 100001,100001 : 0,0 '' + IL_002b: nop + IL_002c: br.s IL_0032 + + .line 100001,100001 : 0,0 '' + IL_002e: nop + IL_002f: br.s IL_0036 + + .line 100001,100001 : 0,0 '' + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret + + IL_0034: ldc.i4.1 + IL_0035: ret + + IL_0036: ldc.i4.0 + IL_0037: ret + } // end of method squaresOfOneToTenD@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 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 GenIter04/squaresOfOneToTenD@4::current + IL_0006: ret + } // end of method squaresOfOneToTenD@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 9 (0x9) + .maxstack 8 + IL_0000: ldnull + IL_0001: ldc.i4.0 + IL_0002: ldc.i4.0 + IL_0003: newobj instance void GenIter04/squaresOfOneToTenD@4::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + int32, + int32) + IL_0008: ret + } // end of method squaresOfOneToTenD@4::GetFreshEnumerator + + } // end of class squaresOfOneToTenD@4 + .method public specialname static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 get_squaresOfOneToTenD() cil managed { @@ -80,79 +414,21 @@ .method public static void main@() cil managed { .entrypoint - // Code size 93 (0x5d) + // Code size 21 (0x15) .maxstack 5 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 squaresOfOneToTenD, - [1] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_1, - [2] class [mscorlib]System.Collections.Generic.IEnumerator`1 V_2, - [3] class [mscorlib]System.Collections.Generic.IEnumerable`1 V_3, - [4] int32 x, - [5] class [mscorlib]System.IDisposable V_5) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 1,55 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\GeneratedIterators\\GenIter04.fs' - IL_0000: ldc.i4.0 - IL_0001: ldc.i4.1 - IL_0002: ldc.i4.s 10 - IL_0004: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, - int32, - int32) - IL_0009: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_000e: stloc.2 - .line 4,4 : 28,44 '' - .try - { - IL_000f: ldloc.2 - IL_0010: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0015: brfalse.s IL_002f - - IL_0017: ldloc.2 - IL_0018: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_001d: stloc.s x - .line 4,4 : 48,53 '' - IL_001f: ldloca.s V_1 - IL_0021: ldloc.s x - IL_0023: ldloc.s x - IL_0025: mul - IL_0026: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) - IL_002b: nop - .line 100001,100001 : 0,0 '' - IL_002c: nop - IL_002d: br.s IL_000f - - IL_002f: ldnull - IL_0030: stloc.3 - IL_0031: leave.s IL_004c - - .line 4,4 : 28,53 '' - } // end .try - finally - { - IL_0033: ldloc.2 - IL_0034: isinst [mscorlib]System.IDisposable - IL_0039: stloc.s V_5 - IL_003b: ldloc.s V_5 - IL_003d: brfalse.s IL_0049 - - .line 100001,100001 : 0,0 '' - IL_003f: ldloc.s V_5 - IL_0041: callvirt instance void [mscorlib]System.IDisposable::Dispose() - IL_0046: ldnull - IL_0047: pop - IL_0048: endfinally - .line 100001,100001 : 0,0 '' - IL_0049: ldnull - IL_004a: pop - IL_004b: endfinally - .line 100001,100001 : 0,0 '' - } // end handler - IL_004c: ldloc.3 - IL_004d: pop - IL_004e: ldloca.s V_1 - IL_0050: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() - IL_0055: dup - IL_0056: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$GenIter04::squaresOfOneToTenD@4 - IL_005b: stloc.0 - IL_005c: ret + .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 squaresOfOneToTenD) + .line 4,4 : 1,55 '' + IL_0000: ldnull + IL_0001: ldc.i4.0 + IL_0002: ldc.i4.0 + IL_0003: newobj instance void GenIter04/squaresOfOneToTenD@4::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + int32, + int32) + IL_0008: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_000d: dup + IL_000e: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$GenIter04::squaresOfOneToTenD@4 + IL_0013: stloc.0 + IL_0014: ret } // end of method $GenIter04::main@ } // end of class ''.$GenIter04 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison01.il.bsl index bc1449351fd..37c0b51c0e3 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly InequalityComparison01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.InequalityComparison01 { - // Offset: 0x00000000 Length: 0x0000020A + // Offset: 0x00000000 Length: 0x0000020E } .mresource public FSharpOptimizationData.InequalityComparison01 { - // Offset: 0x00000210 Length: 0x00000085 + // Offset: 0x00000218 Length: 0x00000085 } .module InequalityComparison01.exe -// MVID: {60B68B7E-263A-E6D5-A745-03837E8BB660} +// MVID: {59B19213-263A-E6D5-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x074E0000 +// Image base: 0x002E0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -58,7 +58,7 @@ // Code size 8 (0x8) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 27,33 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\InequalityComparison\\InequalityComparison01.fs' + .line 3,3 : 27,33 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\InequalityComparison\\InequalityComparison01.fs' IL_0000: ldarg.0 IL_0001: ldarg.1 IL_0002: cgt diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison02.il.bsl index ca23c28d8a2..6ce221af23c 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison02.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly InequalityComparison02 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.InequalityComparison02 { - // Offset: 0x00000000 Length: 0x0000020A + // Offset: 0x00000000 Length: 0x0000020E } .mresource public FSharpOptimizationData.InequalityComparison02 { - // Offset: 0x00000210 Length: 0x00000085 + // Offset: 0x00000218 Length: 0x00000085 } .module InequalityComparison02.exe -// MVID: {60B68B7E-263A-E72C-A745-03837E8BB660} +// MVID: {59B19213-263A-E72C-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07180000 +// Image base: 0x02D40000 // =============== CLASS MEMBERS DECLARATION =================== @@ -58,7 +58,7 @@ // Code size 8 (0x8) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 27,33 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\InequalityComparison\\InequalityComparison02.fs' + .line 3,3 : 27,33 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\InequalityComparison\\InequalityComparison02.fs' IL_0000: ldarg.0 IL_0001: ldarg.1 IL_0002: clt diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison03.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison03.il.bsl index 4fd361bb957..96a9c5591cc 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison03.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison03.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly InequalityComparison03 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.InequalityComparison03 { - // Offset: 0x00000000 Length: 0x0000020A + // Offset: 0x00000000 Length: 0x0000020E } .mresource public FSharpOptimizationData.InequalityComparison03 { - // Offset: 0x00000210 Length: 0x00000085 + // Offset: 0x00000218 Length: 0x00000085 } .module InequalityComparison03.exe -// MVID: {60B68B7E-263A-E70B-A745-03837E8BB660} +// MVID: {59B19213-263A-E70B-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06510000 +// Image base: 0x008E0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -58,7 +58,7 @@ // Code size 5 (0x5) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 27,32 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\InequalityComparison\\InequalityComparison03.fs' + .line 3,3 : 27,32 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\InequalityComparison\\InequalityComparison03.fs' IL_0000: ldarg.0 IL_0001: ldarg.1 IL_0002: clt diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison04.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison04.il.bsl index 988eae50727..5209536406c 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison04.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison04.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly InequalityComparison04 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.InequalityComparison04 { - // Offset: 0x00000000 Length: 0x0000020A + // Offset: 0x00000000 Length: 0x0000020E } .mresource public FSharpOptimizationData.InequalityComparison04 { - // Offset: 0x00000210 Length: 0x00000085 + // Offset: 0x00000218 Length: 0x00000085 } .module InequalityComparison04.exe -// MVID: {60B68B7E-263A-E772-A745-03837E8BB660} +// MVID: {59B19213-263A-E772-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07590000 +// Image base: 0x00F20000 // =============== CLASS MEMBERS DECLARATION =================== @@ -58,7 +58,7 @@ // Code size 5 (0x5) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 27,32 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\InequalityComparison\\InequalityComparison04.fs' + .line 3,3 : 27,32 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\InequalityComparison\\InequalityComparison04.fs' IL_0000: ldarg.0 IL_0001: ldarg.1 IL_0002: cgt diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison05.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison05.il.bsl index d0f9c71afb5..173552b2fa4 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison05.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison05.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly InequalityComparison05 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.InequalityComparison05 { - // Offset: 0x00000000 Length: 0x00000232 + // Offset: 0x00000000 Length: 0x00000236 } .mresource public FSharpOptimizationData.InequalityComparison05 { - // Offset: 0x00000238 Length: 0x00000085 + // Offset: 0x00000240 Length: 0x00000085 } .module InequalityComparison05.exe -// MVID: {60B68B7E-263A-E751-A745-03837E8BB660} +// MVID: {59B19213-263A-E751-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07350000 +// Image base: 0x001D0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -58,21 +58,25 @@ { .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationArgumentCountsAttribute::.ctor(int32[]) = ( 01 00 04 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00 ) - // Code size 8 (0x8) + // Code size 12 (0xc) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 40,55 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\InequalityComparison\\InequalityComparison05.fs' + .line 3,3 : 40,55 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\InequalityComparison\\InequalityComparison05.fs' IL_0000: ldarg.0 IL_0001: ldarg.1 IL_0002: ble.s IL_0006 + IL_0004: br.s IL_0008 + + IL_0006: br.s IL_000a + .line 3,3 : 56,57 '' - IL_0004: ldarg.2 - IL_0005: ret + IL_0008: ldarg.2 + IL_0009: ret .line 3,3 : 63,64 '' - IL_0006: ldarg.3 - IL_0007: ret + IL_000a: ldarg.3 + IL_000b: ret } // end of method InequalityComparison05::f5 } // end of class InequalityComparison05 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest1.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest1.il.bsl index 0ee5384e72f..831514e5f3c 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest1.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest1.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly ListExpressionSteppingTest1 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.ListExpressionSteppingTest1 { - // Offset: 0x00000000 Length: 0x00000269 + // Offset: 0x00000000 Length: 0x0000026D } .mresource public FSharpOptimizationData.ListExpressionSteppingTest1 { - // Offset: 0x00000270 Length: 0x000000AF + // Offset: 0x00000278 Length: 0x000000AF } .module ListExpressionSteppingTest1.exe -// MVID: {60B78A57-50CF-F6CE-A745-0383578AB760} +// MVID: {59B1920C-50CF-F6CE-A745-03830C92B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07190000 +// Image base: 0x030B0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -55,22 +55,178 @@ 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 f0@6 + 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 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 pc, + int32 current) cil managed + { + // Code size 21 (0x15) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: stfld int32 ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::pc + IL_0007: ldarg.0 + IL_0008: ldarg.2 + IL_0009: stfld int32 ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::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 f0@6::.ctor + + .method public strict virtual instance int32 + GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed + { + // Code size 66 (0x42) + .maxstack 6 + .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\\ListExpressionStepping\\ListExpressionSteppingTest1.fs' + IL_0000: ldarg.0 + IL_0001: ldfld int32 ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::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 '' + IL_001b: nop + IL_001c: br.s IL_0032 + + .line 100001,100001 : 0,0 '' + IL_001e: nop + IL_001f: br.s IL_0039 + + .line 100001,100001 : 0,0 '' + IL_0021: nop + IL_0022: ldarg.0 + IL_0023: ldc.i4.1 + IL_0024: stfld int32 ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::pc + .line 6,6 : 11,18 '' + IL_0029: ldarg.0 + IL_002a: ldc.i4.1 + IL_002b: stfld int32 ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::current + IL_0030: ldc.i4.1 + IL_0031: ret + + IL_0032: ldarg.0 + IL_0033: ldc.i4.2 + IL_0034: stfld int32 ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::pc + IL_0039: ldarg.0 + IL_003a: ldc.i4.0 + IL_003b: stfld int32 ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::current + IL_0040: ldc.i4.0 + IL_0041: ret + } // end of method f0@6::GenerateNext + + .method public strict virtual instance void + Close() cil managed + { + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldc.i4.2 + IL_0002: stfld int32 ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::pc + IL_0007: ret + } // end of method f0@6::Close + + .method public strict virtual instance bool + get_CheckClose() cil managed + { + // Code size 45 (0x2d) + .maxstack 8 + .line 100001,100001 : 0,0 '' + IL_0000: ldarg.0 + IL_0001: ldfld int32 ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::pc + IL_0006: switch ( + IL_0019, + IL_001b, + IL_001d) + IL_0017: br.s IL_0028 + + IL_0019: br.s IL_001f + + IL_001b: br.s IL_0022 + + IL_001d: br.s IL_0025 + + .line 100001,100001 : 0,0 '' + IL_001f: nop + IL_0020: br.s IL_002b + + .line 100001,100001 : 0,0 '' + IL_0022: nop + IL_0023: br.s IL_0029 + + .line 100001,100001 : 0,0 '' + IL_0025: nop + IL_0026: br.s IL_002b + + .line 100001,100001 : 0,0 '' + IL_0028: nop + IL_0029: ldc.i4.0 + IL_002a: ret + + IL_002b: ldc.i4.0 + IL_002c: ret + } // end of method f0@6::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 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::current + IL_0006: ret + } // end of method f0@6::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 8 (0x8) + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: ldc.i4.0 + IL_0002: newobj instance void ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::.ctor(int32, + int32) + IL_0007: ret + } // end of method f0@6::GetFreshEnumerator + + } // end of class f0@6 + .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 f0() cil managed { - // Code size 17 (0x11) - .maxstack 4 - .locals init ([0] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 9,20 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\ListExpressionStepping\\ListExpressionSteppingTest1.fs' - IL_0000: ldloca.s V_0 - IL_0002: ldc.i4.1 - IL_0003: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) - IL_0008: nop + // Code size 15 (0xf) + .maxstack 8 .line 6,6 : 9,20 '' - IL_0009: ldloca.s V_0 - IL_000b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() - IL_0010: ret + IL_0000: ldc.i4.0 + IL_0001: ldc.i4.0 + IL_0002: newobj instance void ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::.ctor(int32, + int32) + IL_0007: tail. + IL_0009: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_000e: ret } // end of method ListExpressionSteppingTest1::f0 } // end of class ListExpressionSteppingTest1 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest2.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest2.il.bsl index 8b7a79bdaab..2b86c1c4ba1 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest2.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest2.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly ListExpressionSteppingTest2 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.ListExpressionSteppingTest2 { - // Offset: 0x00000000 Length: 0x00000269 + // Offset: 0x00000000 Length: 0x0000026D } .mresource public FSharpOptimizationData.ListExpressionSteppingTest2 { - // Offset: 0x00000270 Length: 0x000000AF + // Offset: 0x00000278 Length: 0x000000AF } .module ListExpressionSteppingTest2.exe -// MVID: {60B78A57-D3DE-B780-A745-0383578AB760} +// MVID: {59B1920C-D3DE-B780-A745-03830C92B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x094E0000 +// Image base: 0x00690000 // =============== CLASS MEMBERS DECLARATION =================== @@ -55,37 +55,215 @@ 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 f1@6 + 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 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 pc, + int32 current) cil managed + { + // Code size 21 (0x15) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: stfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::pc + IL_0007: ldarg.0 + IL_0008: ldarg.2 + IL_0009: stfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::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 f1@6::.ctor + + .method public strict virtual instance int32 + GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed + { + // Code size 123 (0x7b) + .maxstack 6 + .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\\ListExpressionStepping\\ListExpressionSteppingTest2.fs' + IL_0000: ldarg.0 + IL_0001: ldfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::pc + IL_0006: ldc.i4.1 + IL_0007: sub + IL_0008: switch ( + IL_001b, + IL_001d, + IL_001f) + IL_0019: br.s IL_002a + + IL_001b: br.s IL_0021 + + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 + + .line 100001,100001 : 0,0 '' + IL_0021: nop + IL_0022: br.s IL_004b + + .line 100001,100001 : 0,0 '' + IL_0024: nop + IL_0025: br.s IL_006b + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0072 + + .line 100001,100001 : 0,0 '' + IL_002a: nop + .line 6,6 : 11,26 '' + IL_002b: ldstr "hello" + IL_0030: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0035: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_003a: pop + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::pc + .line 7,7 : 11,18 '' + IL_0042: ldarg.0 + IL_0043: ldc.i4.1 + IL_0044: stfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::current + IL_0049: ldc.i4.1 + IL_004a: ret + + .line 8,8 : 11,28 '' + IL_004b: ldstr "goodbye" + IL_0050: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0055: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_005a: pop + IL_005b: ldarg.0 + IL_005c: ldc.i4.2 + IL_005d: stfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::pc + .line 9,9 : 11,18 '' + IL_0062: ldarg.0 + IL_0063: ldc.i4.2 + IL_0064: stfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::current + IL_0069: ldc.i4.1 + IL_006a: ret + + IL_006b: ldarg.0 + IL_006c: ldc.i4.3 + IL_006d: stfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::pc + IL_0072: ldarg.0 + IL_0073: ldc.i4.0 + IL_0074: stfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::current + IL_0079: ldc.i4.0 + IL_007a: ret + } // end of method f1@6::GenerateNext + + .method public strict virtual instance void + Close() cil managed + { + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldc.i4.3 + IL_0002: stfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::pc + IL_0007: ret + } // end of method f1@6::Close + + .method public strict virtual instance bool + get_CheckClose() cil managed + { + // Code size 56 (0x38) + .maxstack 8 + .line 100001,100001 : 0,0 '' + IL_0000: ldarg.0 + IL_0001: ldfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::pc + IL_0006: switch ( + IL_001d, + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e + + .line 100001,100001 : 0,0 '' + IL_0025: nop + IL_0026: br.s IL_0036 + + .line 100001,100001 : 0,0 '' + IL_0028: nop + IL_0029: br.s IL_0034 + + .line 100001,100001 : 0,0 '' + IL_002b: nop + IL_002c: br.s IL_0032 + + .line 100001,100001 : 0,0 '' + IL_002e: nop + IL_002f: br.s IL_0036 + + .line 100001,100001 : 0,0 '' + IL_0031: nop + IL_0032: ldc.i4.0 + IL_0033: ret + + IL_0034: ldc.i4.0 + IL_0035: ret + + IL_0036: ldc.i4.0 + IL_0037: ret + } // end of method f1@6::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 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::current + IL_0006: ret + } // end of method f1@6::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 8 (0x8) + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: ldc.i4.0 + IL_0002: newobj instance void ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::.ctor(int32, + int32) + IL_0007: ret + } // end of method f1@6::GetFreshEnumerator + + } // end of class f1@6 + .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 f1() cil managed { - // Code size 58 (0x3a) - .maxstack 4 - .locals init ([0] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 11,26 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\ListExpressionStepping\\ListExpressionSteppingTest2.fs' - IL_0000: ldstr "hello" - IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_000f: pop - .line 7,7 : 11,18 '' - IL_0010: ldloca.s V_0 - IL_0012: ldc.i4.1 - IL_0013: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) - IL_0018: nop - .line 8,8 : 11,28 '' - IL_0019: ldstr "goodbye" - IL_001e: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0023: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0028: pop - .line 9,9 : 11,18 '' - IL_0029: ldloca.s V_0 - IL_002b: ldc.i4.2 - IL_002c: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) - IL_0031: nop + // Code size 15 (0xf) + .maxstack 8 .line 6,9 : 9,19 '' - IL_0032: ldloca.s V_0 - IL_0034: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() - IL_0039: ret + IL_0000: ldc.i4.0 + IL_0001: ldc.i4.0 + IL_0002: newobj instance void ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::.ctor(int32, + int32) + IL_0007: tail. + IL_0009: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_000e: ret } // end of method ListExpressionSteppingTest2::f1 } // end of class ListExpressionSteppingTest2 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest3.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest3.il.bsl index 92f1f9b3632..864056dbe8c 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest3.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest3.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly ListExpressionSteppingTest3 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.ListExpressionSteppingTest3 { - // Offset: 0x00000000 Length: 0x00000279 + // Offset: 0x00000000 Length: 0x0000027D } .mresource public FSharpOptimizationData.ListExpressionSteppingTest3 { - // Offset: 0x00000280 Length: 0x000000AF + // Offset: 0x00000288 Length: 0x000000AF } .module ListExpressionSteppingTest3.exe -// MVID: {60B78A57-AE45-39B4-A745-0383578AB760} +// MVID: {59B1920C-AE45-39B4-A745-03830C92B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06EB0000 +// Image base: 0x00FF0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -55,48 +55,215 @@ 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 f2@7 + 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 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 class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 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, + int32 pc, + class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 current) cil managed + { + // Code size 28 (0x1c) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::x + IL_0007: ldarg.0 + IL_0008: ldarg.2 + IL_0009: stfld int32 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::pc + IL_000e: ldarg.0 + IL_000f: ldarg.3 + IL_0010: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::current + IL_0015: ldarg.0 + IL_0016: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1>::.ctor() + IL_001b: ret + } // end of method f2@7::.ctor + + .method public strict virtual instance int32 + GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1>& next) cil managed + { + // Code size 116 (0x74) + .maxstack 6 + .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\\ListExpressionStepping\\ListExpressionSteppingTest3.fs' + IL_0000: ldarg.0 + IL_0001: ldfld int32 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::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 '' + IL_001b: nop + IL_001c: br.s IL_0061 + + .line 100001,100001 : 0,0 '' + IL_001e: nop + IL_001f: br.s IL_006b + + .line 100001,100001 : 0,0 '' + IL_0021: nop + .line 7,7 : 17,23 '' + IL_0022: ldarg.0 + IL_0023: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::x + IL_0028: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_002d: ldc.i4.4 + IL_002e: bge.s IL_0064 + + .line 8,8 : 14,20 '' + IL_0030: ldarg.0 + IL_0031: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::x + IL_0036: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_003b: nop + .line 9,9 : 14,29 '' + IL_003c: ldstr "hello" + IL_0041: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0046: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_004b: pop + IL_004c: ldarg.0 + IL_004d: ldc.i4.1 + IL_004e: stfld int32 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::pc + .line 10,10 : 14,21 '' + IL_0053: ldarg.0 + IL_0054: ldarg.0 + IL_0055: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::x + IL_005a: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::current + IL_005f: ldc.i4.1 + IL_0060: ret + + .line 100001,100001 : 0,0 '' + IL_0061: nop + IL_0062: br.s IL_0022 + + IL_0064: ldarg.0 + IL_0065: ldc.i4.2 + IL_0066: stfld int32 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::pc + IL_006b: ldarg.0 + IL_006c: ldnull + IL_006d: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::current + IL_0072: ldc.i4.0 + IL_0073: ret + } // end of method f2@7::GenerateNext + + .method public strict virtual instance void + Close() cil managed + { + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldc.i4.2 + IL_0002: stfld int32 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::pc + IL_0007: ret + } // end of method f2@7::Close + + .method public strict virtual instance bool + get_CheckClose() cil managed + { + // Code size 45 (0x2d) + .maxstack 8 + .line 100001,100001 : 0,0 '' + IL_0000: ldarg.0 + IL_0001: ldfld int32 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::pc + IL_0006: switch ( + IL_0019, + IL_001b, + IL_001d) + IL_0017: br.s IL_0028 + + IL_0019: br.s IL_001f + + IL_001b: br.s IL_0022 + + IL_001d: br.s IL_0025 + + .line 100001,100001 : 0,0 '' + IL_001f: nop + IL_0020: br.s IL_002b + + .line 100001,100001 : 0,0 '' + IL_0022: nop + IL_0023: br.s IL_0029 + + .line 100001,100001 : 0,0 '' + IL_0025: nop + IL_0026: br.s IL_002b + + .line 100001,100001 : 0,0 '' + IL_0028: nop + IL_0029: ldc.i4.0 + IL_002a: ret + + IL_002b: ldc.i4.0 + IL_002c: ret + } // end of method f2@7::get_CheckClose + + .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 + 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 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::current + IL_0006: ret + } // end of method f2@7::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 14 (0xe) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::x + IL_0006: ldc.i4.0 + IL_0007: ldnull + IL_0008: newobj instance void ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, + int32, + class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_000d: ret + } // end of method f2@7::GetFreshEnumerator + + } // end of class f2@7 + .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1> f2() cil managed { - // Code size 60 (0x3c) - .maxstack 4 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x, - [1] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1> V_1) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 9,22 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\ListExpressionStepping\\ListExpressionSteppingTest3.fs' + // Code size 23 (0x17) + .maxstack 5 + .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x) + .line 6,6 : 9,22 '' IL_0000: ldc.i4.0 IL_0001: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) IL_0006: stloc.0 .line 7,10 : 9,23 '' - IL_0007: nop - .line 7,7 : 11,23 '' - IL_0008: ldloc.0 - IL_0009: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_000e: ldc.i4.4 - IL_000f: bge.s IL_0034 - - .line 8,8 : 14,20 '' - IL_0011: ldloc.0 - IL_0012: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0017: nop - .line 9,9 : 14,29 '' - IL_0018: ldstr "hello" - IL_001d: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0022: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0027: pop - .line 10,10 : 14,21 '' - IL_0028: ldloca.s V_1 - IL_002a: ldloc.0 - IL_002b: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1>::Add(!0) - IL_0030: nop - .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: br.s IL_0007 - - .line 7,10 : 9,23 '' - IL_0034: ldloca.s V_1 - IL_0036: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1>::Close() - IL_003b: ret + IL_0007: ldloc.0 + IL_0008: ldc.i4.0 + IL_0009: ldnull + IL_000a: newobj instance void ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, + int32, + class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_000f: tail. + IL_0011: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList>(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0016: ret } // end of method ListExpressionSteppingTest3::f2 } // end of class ListExpressionSteppingTest3 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest4.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest4.il.bsl index a3ae5487968..2d0ccb9e33d 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest4.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest4.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:5:0:0 } .assembly ListExpressionSteppingTest4 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.ListExpressionSteppingTest4 { - // Offset: 0x00000000 Length: 0x00000269 + // Offset: 0x00000000 Length: 0x00000275 } .mresource public FSharpOptimizationData.ListExpressionSteppingTest4 { - // Offset: 0x00000270 Length: 0x000000AF + // Offset: 0x00000280 Length: 0x000000AF } .module ListExpressionSteppingTest4.exe -// MVID: {60B78A57-3154-FA67-A745-0383578AB760} +// MVID: {5B9A68C1-3154-FA67-A745-0383C1689A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06700000 +// Image base: 0x018D0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -55,54 +55,262 @@ 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@6 + 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 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 pc, + int32 current) cil managed + { + // Code size 36 (0x24) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::x + IL_0007: ldarg.0 + IL_0008: ldarg.2 + IL_0009: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::y + IL_000e: ldarg.0 + IL_000f: ldarg.3 + IL_0010: stfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::pc + IL_0015: ldarg.0 + IL_0016: ldarg.s current + IL_0018: stfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::current + IL_001d: ldarg.0 + IL_001e: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1::.ctor() + IL_0023: ret + } // end of method f3@6::.ctor + + .method public strict virtual instance int32 + GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed + { + // Code size 190 (0xbe) + .maxstack 6 + .locals init ([0] int32 z) + .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\\ListExpressionStepping\\ListExpressionSteppingTest4.fs' + IL_0000: ldarg.0 + IL_0001: ldfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::pc + IL_0006: ldc.i4.1 + IL_0007: sub + IL_0008: switch ( + IL_001b, + IL_001d, + IL_001f) + IL_0019: br.s IL_002d + + IL_001b: br.s IL_0021 + + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 + + .line 100001,100001 : 0,0 '' + IL_0021: nop + IL_0022: br.s IL_0078 + + .line 100001,100001 : 0,0 '' + IL_0024: nop + IL_0025: br.s IL_00a0 + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br IL_00b5 + + .line 100001,100001 : 0,0 '' + IL_002d: nop + .line 6,6 : 11,24 '' + IL_002e: ldarg.0 + IL_002f: ldc.i4.0 + IL_0030: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) + IL_0035: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::x + .line 7,7 : 11,17 '' + IL_003a: ldarg.0 + IL_003b: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::x + IL_0040: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0045: nop + .line 8,8 : 11,24 '' + IL_0046: ldarg.0 + IL_0047: ldc.i4.0 + IL_0048: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) + IL_004d: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::y + .line 9,9 : 11,17 '' + IL_0052: ldarg.0 + IL_0053: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::y + IL_0058: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_005d: nop + IL_005e: ldarg.0 + IL_005f: ldc.i4.1 + IL_0060: stfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::pc + .line 10,10 : 11,19 '' + IL_0065: ldarg.0 + IL_0066: ldarg.0 + IL_0067: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::x + IL_006c: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0071: stfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::current + IL_0076: ldc.i4.1 + IL_0077: ret + + .line 11,11 : 11,26 '' + IL_0078: ldarg.0 + IL_0079: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::x + IL_007e: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0083: ldarg.0 + IL_0084: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::y + IL_0089: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_008e: add + IL_008f: stloc.0 + IL_0090: ldarg.0 + IL_0091: ldc.i4.2 + IL_0092: stfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::pc + .line 12,12 : 11,18 '' + IL_0097: ldarg.0 + IL_0098: ldloc.0 + IL_0099: stfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::current + IL_009e: ldc.i4.1 + IL_009f: ret + + .line 8,8 : 15,16 '' + IL_00a0: ldarg.0 + IL_00a1: ldnull + IL_00a2: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::y + IL_00a7: ldarg.0 + IL_00a8: ldnull + IL_00a9: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::x + IL_00ae: ldarg.0 + IL_00af: ldc.i4.3 + IL_00b0: stfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::pc + IL_00b5: ldarg.0 + IL_00b6: ldc.i4.0 + IL_00b7: stfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::current + IL_00bc: ldc.i4.0 + IL_00bd: ret + } // end of method f3@6::GenerateNext + + .method public strict virtual instance void + Close() cil managed + { + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldc.i4.3 + IL_0002: stfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::pc + IL_0007: ret + } // end of method f3@6::Close + + .method public strict virtual instance bool + get_CheckClose() cil managed + { + // Code size 56 (0x38) + .maxstack 8 + .line 100001,100001 : 0,0 '' + IL_0000: ldarg.0 + IL_0001: ldfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::pc + IL_0006: switch ( + IL_001d, + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e + + .line 100001,100001 : 0,0 '' + IL_0025: nop + IL_0026: br.s IL_0036 + + .line 100001,100001 : 0,0 '' + IL_0028: nop + IL_0029: br.s IL_0034 + + .line 100001,100001 : 0,0 '' + IL_002b: nop + IL_002c: br.s IL_0032 + + .line 100001,100001 : 0,0 '' + IL_002e: nop + IL_002f: br.s IL_0036 + + .line 100001,100001 : 0,0 '' + IL_0031: nop + IL_0032: ldc.i4.0 + IL_0033: ret + + IL_0034: ldc.i4.0 + IL_0035: ret + + IL_0036: ldc.i4.0 + IL_0037: ret + } // end of method f3@6::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 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::current + IL_0006: ret + } // end of method f3@6::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 10 (0xa) + .maxstack 8 + IL_0000: ldnull + IL_0001: ldnull + IL_0002: ldc.i4.0 + IL_0003: ldc.i4.0 + IL_0004: newobj instance void ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, + class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, + int32, + int32) + IL_0009: ret + } // end of method f3@6::GetFreshEnumerator + + } // end of class f3@6 + .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 f3() cil managed { - // Code size 73 (0x49) - .maxstack 4 - .locals init ([0] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0, - [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x, - [2] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 y, - [3] int32 z) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 11,24 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\ListExpressionStepping\\ListExpressionSteppingTest4.fs' - IL_0000: ldc.i4.0 - IL_0001: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0006: stloc.1 - .line 7,7 : 11,17 '' - IL_0007: ldloc.1 - IL_0008: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_000d: nop - .line 8,8 : 11,24 '' - IL_000e: ldc.i4.0 - IL_000f: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0014: stloc.2 - .line 9,9 : 11,17 '' - IL_0015: ldloc.2 - IL_0016: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_001b: nop - .line 10,10 : 11,19 '' - IL_001c: ldloca.s V_0 - IL_001e: ldloc.1 - IL_001f: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0024: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) - IL_0029: nop - .line 11,11 : 11,26 '' - IL_002a: ldloc.1 - IL_002b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0030: ldloc.2 - IL_0031: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0036: add - IL_0037: stloc.3 - .line 12,12 : 11,18 '' - IL_0038: ldloca.s V_0 - IL_003a: ldloc.3 - IL_003b: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) - IL_0040: nop + // Code size 17 (0x11) + .maxstack 8 .line 6,12 : 9,20 '' - IL_0041: ldloca.s V_0 - IL_0043: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() - IL_0048: ret + IL_0000: ldnull + IL_0001: ldnull + IL_0002: ldc.i4.0 + IL_0003: ldc.i4.0 + IL_0004: newobj instance void ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, + class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, + int32, + int32) + IL_0009: tail. + IL_000b: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0010: ret } // end of method ListExpressionSteppingTest4::f3 } // end of class ListExpressionSteppingTest4 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest5.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest5.il.bsl index 92dd8b4cd4d..39def210b7f 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest5.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest5.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:5:0:0 } .assembly ListExpressionSteppingTest5 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.ListExpressionSteppingTest5 { - // Offset: 0x00000000 Length: 0x00000269 + // Offset: 0x00000000 Length: 0x00000275 } .mresource public FSharpOptimizationData.ListExpressionSteppingTest5 { - // Offset: 0x00000270 Length: 0x000000AF + // Offset: 0x00000280 Length: 0x000000AF } .module ListExpressionSteppingTest5.exe -// MVID: {60B78A57-CBE3-BFEA-A745-0383578AB760} +// MVID: {5B9A6329-CBE3-BFEA-A745-038329639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06C00000 +// Image base: 0x027C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -55,78 +55,413 @@ 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 [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - f4() cil managed + .class auto autochar serializable sealed nested assembly beforefieldinit specialname f4@6 + extends class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1 { - // Code size 100 (0x64) - .maxstack 4 - .locals init ([0] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0, - [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x, - [2] class [mscorlib]System.Collections.Generic.IEnumerable`1 V_2, - [3] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 y, - [4] int32 z) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 11,24 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\ListExpressionStepping\\ListExpressionSteppingTest5.fs' - IL_0000: ldc.i4.0 - IL_0001: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0006: stloc.1 - .line 7,7 : 11,14 '' - .try + .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 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 pc, + int32 current) cil managed + { + // Code size 36 (0x24) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::x + IL_0007: ldarg.0 + IL_0008: ldarg.2 + IL_0009: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::y + IL_000e: ldarg.0 + IL_000f: ldarg.3 + IL_0010: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc + IL_0015: ldarg.0 + IL_0016: ldarg.s current + IL_0018: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::current + IL_001d: ldarg.0 + IL_001e: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1::.ctor() + IL_0023: ret + } // end of method f4@6::.ctor + + .method public strict virtual instance int32 + GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - IL_0007: nop + // Code size 232 (0xe8) + .maxstack 6 + .locals init ([0] int32 z) + .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\\ListExpressionStepping\\ListExpressionSteppingTest5.fs' + IL_0000: ldarg.0 + IL_0001: ldfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::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 '' + IL_0027: nop + IL_0028: br IL_00ae + + .line 100001,100001 : 0,0 '' + IL_002d: nop + IL_002e: br.s IL_007f + + .line 100001,100001 : 0,0 '' + IL_0030: nop + IL_0031: br.s IL_00a7 + + .line 100001,100001 : 0,0 '' + IL_0033: nop + IL_0034: br IL_00df + + .line 100001,100001 : 0,0 '' + IL_0039: nop + .line 6,6 : 11,24 '' + 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 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::x + IL_0046: ldarg.0 + IL_0047: ldc.i4.1 + IL_0048: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc .line 8,8 : 15,28 '' - IL_0008: ldc.i4.0 - IL_0009: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_000e: stloc.3 + 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 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::y .line 9,9 : 15,21 '' - IL_000f: ldloc.3 - IL_0010: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0015: nop + IL_0059: ldarg.0 + IL_005a: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::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 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc .line 10,10 : 15,23 '' - IL_0016: ldloca.s V_0 - IL_0018: ldloc.1 - IL_0019: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_001e: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) - IL_0023: nop + IL_006c: ldarg.0 + IL_006d: ldarg.0 + IL_006e: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::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 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::current + IL_007d: ldc.i4.1 + IL_007e: ret + .line 11,11 : 15,30 '' - IL_0024: ldloc.1 - IL_0025: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_002a: ldloc.3 - IL_002b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0030: add - IL_0031: stloc.s z + IL_007f: ldarg.0 + IL_0080: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::x + IL_0085: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_008a: ldarg.0 + IL_008b: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::y + IL_0090: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0095: add + IL_0096: stloc.0 + IL_0097: ldarg.0 + IL_0098: ldc.i4.3 + IL_0099: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc .line 12,12 : 15,22 '' - IL_0033: ldloca.s V_0 - IL_0035: ldloc.s z - IL_0037: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) - IL_003c: nop - IL_003d: ldnull - IL_003e: stloc.2 - IL_003f: leave.s IL_005a - - .line 13,13 : 11,18 '' - } // end .try - finally - { - IL_0041: nop + IL_009e: ldarg.0 + IL_009f: ldloc.0 + IL_00a0: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::current + IL_00a5: ldc.i4.1 + IL_00a6: ret + + IL_00a7: ldarg.0 + IL_00a8: ldnull + IL_00a9: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::y + IL_00ae: ldarg.0 + IL_00af: ldc.i4.4 + IL_00b0: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc .line 14,14 : 14,20 '' - IL_0042: ldloc.1 - IL_0043: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0048: nop + IL_00b5: ldarg.0 + IL_00b6: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::x + IL_00bb: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_00c0: nop .line 15,15 : 14,28 '' - IL_0049: ldstr "done" - IL_004e: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0053: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0058: pop - IL_0059: endfinally - .line 100001,100001 : 0,0 '' - } // end handler - IL_005a: ldloc.2 - IL_005b: pop + IL_00c1: ldstr "done" + IL_00c6: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_00cb: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_00d0: pop + IL_00d1: ldarg.0 + IL_00d2: ldnull + IL_00d3: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::x + IL_00d8: ldarg.0 + IL_00d9: ldc.i4.4 + IL_00da: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc + IL_00df: ldarg.0 + IL_00e0: ldc.i4.0 + IL_00e1: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::current + IL_00e6: ldc.i4.0 + IL_00e7: ret + } // end of method f4@6::GenerateNext + + .method public strict virtual instance void + Close() cil managed + { + // Code size 176 (0xb0) + .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: ldarg.0 + IL_0001: ldfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc + IL_0006: ldc.i4.4 + IL_0007: sub + IL_0008: switch ( + IL_0013) + IL_0011: br.s IL_0019 + + .line 100001,100001 : 0,0 '' + IL_0013: nop + IL_0014: br IL_00a3 + + .line 100001,100001 : 0,0 '' + IL_0019: nop + .try + { + IL_001a: ldarg.0 + IL_001b: ldfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc + IL_0020: switch ( + IL_003b, + IL_003d, + IL_003f, + IL_0041, + IL_0043) + IL_0039: br.s IL_0054 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 + + IL_003f: br.s IL_004b + + IL_0041: br.s IL_004e + + IL_0043: br.s IL_0051 + + .line 100001,100001 : 0,0 '' + IL_0045: nop + IL_0046: br.s IL_007d + + .line 100001,100001 : 0,0 '' + IL_0048: nop + IL_0049: br.s IL_0059 + + .line 100001,100001 : 0,0 '' + IL_004b: nop + IL_004c: br.s IL_0058 + + .line 100001,100001 : 0,0 '' + IL_004e: nop + IL_004f: br.s IL_0055 + + .line 100001,100001 : 0,0 '' + IL_0051: nop + IL_0052: br.s IL_007d + + .line 100001,100001 : 0,0 '' + IL_0054: nop + .line 100001,100001 : 0,0 '' + IL_0055: nop + IL_0056: br.s IL_0059 + + .line 100001,100001 : 0,0 '' + IL_0058: nop + IL_0059: ldarg.0 + IL_005a: ldc.i4.4 + IL_005b: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc + .line 14,14 : 14,20 '' + IL_0060: ldarg.0 + IL_0061: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::x + IL_0066: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_006b: nop + .line 15,15 : 14,28 '' + IL_006c: ldstr "done" + IL_0071: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0076: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_007b: pop + .line 100001,100001 : 0,0 '' + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldc.i4.4 + IL_007f: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc + IL_0084: ldarg.0 + IL_0085: ldc.i4.0 + IL_0086: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::current + IL_008b: ldnull + IL_008c: stloc.1 + IL_008d: leave.s IL_009b + + } // end .try + catch [mscorlib]System.Object + { + IL_008f: castclass [mscorlib]System.Exception + IL_0094: stloc.2 + .line 6,6 : 15,16 '' + IL_0095: ldloc.2 + IL_0096: stloc.0 + IL_0097: ldnull + IL_0098: stloc.1 + IL_0099: leave.s IL_009b + + .line 100001,100001 : 0,0 '' + } // end handler + IL_009b: ldloc.1 + IL_009c: pop + .line 100001,100001 : 0,0 '' + IL_009d: nop + IL_009e: br IL_0000 + + IL_00a3: ldloc.0 + IL_00a4: ldnull + IL_00a5: cgt.un + IL_00a7: brfalse.s IL_00ab + + IL_00a9: br.s IL_00ad + + IL_00ab: br.s IL_00af + + .line 100001,100001 : 0,0 '' + IL_00ad: ldloc.0 + IL_00ae: throw + + .line 100001,100001 : 0,0 '' + IL_00af: ret + } // end of method f4@6::Close + + .method public strict virtual instance bool + get_CheckClose() cil managed + { + // Code size 67 (0x43) + .maxstack 5 + .line 100001,100001 : 0,0 '' + IL_0000: ldarg.0 + IL_0001: ldfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc + IL_0006: switch ( + IL_0021, + IL_0023, + IL_0025, + IL_0027, + IL_0029) + IL_001f: br.s IL_003a + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e + + IL_0025: br.s IL_0031 + + IL_0027: br.s IL_0034 + + IL_0029: br.s IL_0037 + + .line 100001,100001 : 0,0 '' + IL_002b: nop + IL_002c: br.s IL_0041 + + .line 100001,100001 : 0,0 '' + IL_002e: nop + IL_002f: br.s IL_003f + + .line 100001,100001 : 0,0 '' + IL_0031: nop + IL_0032: br.s IL_003d + + .line 100001,100001 : 0,0 '' + IL_0034: nop + IL_0035: br.s IL_003b + + .line 100001,100001 : 0,0 '' + IL_0037: nop + IL_0038: br.s IL_0041 + + .line 100001,100001 : 0,0 '' + IL_003a: nop + IL_003b: ldc.i4.1 + IL_003c: ret + + IL_003d: ldc.i4.1 + IL_003e: ret + + IL_003f: ldc.i4.1 + IL_0040: ret + + IL_0041: ldc.i4.0 + IL_0042: ret + } // end of method f4@6::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 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::current + IL_0006: ret + } // end of method f4@6::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 10 (0xa) + .maxstack 8 + IL_0000: ldnull + IL_0001: ldnull + IL_0002: ldc.i4.0 + IL_0003: ldc.i4.0 + IL_0004: newobj instance void ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, + class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, + int32, + int32) + IL_0009: ret + } // end of method f4@6::GetFreshEnumerator + + } // end of class f4@6 + + .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 + f4() cil managed + { + // Code size 17 (0x11) + .maxstack 8 .line 6,15 : 9,30 '' - IL_005c: ldloca.s V_0 - IL_005e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() - IL_0063: ret + IL_0000: ldnull + IL_0001: ldnull + IL_0002: ldc.i4.0 + IL_0003: ldc.i4.0 + IL_0004: newobj instance void ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, + class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, + int32, + int32) + IL_0009: tail. + IL_000b: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0010: ret } // end of method ListExpressionSteppingTest5::f4 } // end of class ListExpressionSteppingTest5 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest6.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest6.il.bsl index bfa33913669..2d43c04e954 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest6.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest6.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:5:0:0 } .assembly ListExpressionSteppingTest6 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.ListExpressionSteppingTest6 { - // Offset: 0x00000000 Length: 0x00000291 + // Offset: 0x00000000 Length: 0x0000029D } .mresource public FSharpOptimizationData.ListExpressionSteppingTest6 { - // Offset: 0x00000298 Length: 0x000000BC + // Offset: 0x000002A8 Length: 0x000000BC } .module ListExpressionSteppingTest6.exe -// MVID: {60B78A57-98A2-AB14-A745-0383578AB760} +// MVID: {5B9A6329-98A2-AB14-A745-038329639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06F80000 +// Image base: 0x007B0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -55,145 +55,484 @@ 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 specialname static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - get_es() cil managed + .class auto autochar serializable sealed nested assembly beforefieldinit specialname f7@7 + extends class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1 { - // Code size 6 (0x6) - .maxstack 8 - IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$ListExpressionSteppingTest6::es@5 - IL_0005: ret - } // end of method ListExpressionSteppingTest6::get_es + .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 [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(class [mscorlib]System.Collections.Generic.IEnumerator`1 'enum', + class [mscorlib]System.Collections.Generic.IEnumerator`1 enum0, + int32 pc, + int32 current) cil managed + { + // Code size 36 (0x24) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::'enum' + IL_0007: ldarg.0 + IL_0008: ldarg.2 + IL_0009: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::enum0 + IL_000e: ldarg.0 + IL_000f: ldarg.3 + IL_0010: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc + IL_0015: ldarg.0 + IL_0016: ldarg.s current + IL_0018: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::current + IL_001d: ldarg.0 + IL_001e: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1::.ctor() + IL_0023: ret + } // end of method f7@7::.ctor - .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - f7() cil managed - { - // Code size 186 (0xba) - .maxstack 4 - .locals init ([0] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0, - [1] class [mscorlib]System.Collections.Generic.IEnumerator`1 V_1, - [2] class [mscorlib]System.Collections.Generic.IEnumerable`1 V_2, - [3] int32 x, - [4] class [mscorlib]System.IDisposable V_4, - [5] class [mscorlib]System.Collections.Generic.IEnumerator`1 V_5, - [6] class [mscorlib]System.Collections.Generic.IEnumerable`1 V_6, - [7] int32 V_7, - [8] class [mscorlib]System.IDisposable V_8) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 7,12 : 9,23 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\ListExpressionStepping\\ListExpressionSteppingTest6.fs' - IL_0000: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6::get_es() - IL_0005: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_000a: stloc.1 - .line 7,7 : 11,25 '' - .try + .method public strict virtual instance int32 + GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - IL_000b: ldloc.1 - IL_000c: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0011: brfalse.s IL_0036 + // Code size 304 (0x130) + .maxstack 6 + .locals init ([0] int32 x, + [1] int32 V_1) + .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\\ListExpressionStepping\\ListExpressionSteppingTest6.fs' + IL_0000: ldarg.0 + IL_0001: ldfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::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_0045 + + IL_0023: br.s IL_002d + + IL_0025: br.s IL_0030 + + IL_0027: br.s IL_0033 + + IL_0029: br.s IL_0039 + + IL_002b: br.s IL_003f + + .line 100001,100001 : 0,0 '' + IL_002d: nop + IL_002e: br.s IL_0099 + + .line 100001,100001 : 0,0 '' + IL_0030: nop + IL_0031: br.s IL_0096 - IL_0013: ldloc.1 - IL_0014: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0019: stloc.3 - .line 8,8 : 14,29 '' - IL_001a: ldstr "hello" - IL_001f: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0024: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0029: pop - .line 9,9 : 14,21 '' - IL_002a: ldloca.s V_0 - IL_002c: ldloc.3 - IL_002d: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) - IL_0032: nop .line 100001,100001 : 0,0 '' IL_0033: nop - IL_0034: br.s IL_000b + IL_0034: br IL_0106 - IL_0036: ldnull - IL_0037: stloc.2 - IL_0038: leave.s IL_0053 + .line 100001,100001 : 0,0 '' + IL_0039: nop + IL_003a: br IL_0103 + + .line 100001,100001 : 0,0 '' + IL_003f: nop + IL_0040: br IL_0127 + .line 100001,100001 : 0,0 '' + IL_0045: nop .line 7,9 : 11,21 '' - } // end .try - finally - { - IL_003a: ldloc.1 - IL_003b: isinst [mscorlib]System.IDisposable - IL_0040: stloc.s V_4 - IL_0042: ldloc.s V_4 - IL_0044: brfalse.s IL_0050 - - .line 100001,100001 : 0,0 '' - IL_0046: ldloc.s V_4 - IL_0048: callvirt instance void [mscorlib]System.IDisposable::Dispose() - IL_004d: ldnull - IL_004e: pop - IL_004f: endfinally - .line 100001,100001 : 0,0 '' - IL_0050: ldnull - IL_0051: pop - IL_0052: endfinally - .line 100001,100001 : 0,0 '' - } // end handler - IL_0053: ldloc.2 - IL_0054: pop - IL_0055: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6::get_es() - IL_005a: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_005f: stloc.s V_5 - .line 10,10 : 11,25 '' - .try - { - IL_0061: ldloc.s V_5 + IL_0046: ldarg.0 + IL_0047: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6::get_es() + IL_004c: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0051: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::'enum' + IL_0056: ldarg.0 + IL_0057: ldc.i4.1 + IL_0058: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc + .line 7,9 : 11,21 '' + IL_005d: ldarg.0 + IL_005e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::'enum' IL_0063: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0068: brfalse.s IL_0090 + IL_0068: brfalse.s IL_0099 - IL_006a: ldloc.s V_5 - IL_006c: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0071: stloc.s V_7 + IL_006a: ldarg.0 + IL_006b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::'enum' + IL_0070: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0075: stloc.0 + .line 8,8 : 14,29 '' + IL_0076: ldstr "hello" + IL_007b: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0080: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_0085: pop + IL_0086: ldarg.0 + IL_0087: ldc.i4.2 + IL_0088: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc + .line 9,9 : 14,21 '' + IL_008d: ldarg.0 + IL_008e: ldloc.0 + IL_008f: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::current + IL_0094: ldc.i4.1 + IL_0095: ret + + .line 100001,100001 : 0,0 '' + IL_0096: nop + IL_0097: br.s IL_005d + + IL_0099: ldarg.0 + IL_009a: ldc.i4.5 + IL_009b: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc + .line 7,9 : 11,21 '' + IL_00a0: ldarg.0 + IL_00a1: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::'enum' + IL_00a6: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_00ab: nop + IL_00ac: ldarg.0 + IL_00ad: ldnull + IL_00ae: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::'enum' + .line 10,12 : 11,21 '' + IL_00b3: ldarg.0 + IL_00b4: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6::get_es() + IL_00b9: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_00be: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::enum0 + IL_00c3: ldarg.0 + IL_00c4: ldc.i4.3 + IL_00c5: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc + .line 10,12 : 11,21 '' + IL_00ca: ldarg.0 + IL_00cb: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::enum0 + IL_00d0: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_00d5: brfalse.s IL_0106 + + IL_00d7: ldarg.0 + IL_00d8: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::enum0 + IL_00dd: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_00e2: stloc.1 .line 11,11 : 14,31 '' - IL_0073: ldstr "goodbye" - IL_0078: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_007d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0082: pop + IL_00e3: ldstr "goodbye" + IL_00e8: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_00ed: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_00f2: pop + IL_00f3: ldarg.0 + IL_00f4: ldc.i4.4 + IL_00f5: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc .line 12,12 : 14,21 '' - IL_0083: ldloca.s V_0 - IL_0085: ldloc.s V_7 - IL_0087: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) - IL_008c: nop - .line 100001,100001 : 0,0 '' - IL_008d: nop - IL_008e: br.s IL_0061 + IL_00fa: ldarg.0 + IL_00fb: ldloc.1 + IL_00fc: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::current + IL_0101: ldc.i4.1 + IL_0102: ret - IL_0090: ldnull - IL_0091: stloc.s V_6 - IL_0093: leave.s IL_00af + .line 100001,100001 : 0,0 '' + IL_0103: nop + IL_0104: br.s IL_00ca + IL_0106: ldarg.0 + IL_0107: ldc.i4.5 + IL_0108: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc .line 10,12 : 11,21 '' - } // end .try - finally + IL_010d: ldarg.0 + IL_010e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::enum0 + IL_0113: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0118: nop + IL_0119: ldarg.0 + IL_011a: ldnull + IL_011b: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::enum0 + IL_0120: ldarg.0 + IL_0121: ldc.i4.5 + IL_0122: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc + IL_0127: ldarg.0 + IL_0128: ldc.i4.0 + IL_0129: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::current + IL_012e: ldc.i4.0 + IL_012f: ret + } // end of method f7@7::GenerateNext + + .method public strict virtual instance void + Close() cil managed + { + // Code size 189 (0xbd) + .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: ldarg.0 + IL_0001: ldfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc + IL_0006: ldc.i4.5 + IL_0007: sub + IL_0008: switch ( + IL_0013) + IL_0011: br.s IL_0019 + + .line 100001,100001 : 0,0 '' + IL_0013: nop + IL_0014: br IL_00b0 + + .line 100001,100001 : 0,0 '' + IL_0019: nop + .try + { + IL_001a: ldarg.0 + IL_001b: ldfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc + IL_0020: switch ( + IL_003f, + IL_0041, + IL_0043, + IL_0045, + IL_0047, + IL_0049) + IL_003d: br.s IL_005d + + IL_003f: br.s IL_004b + + IL_0041: br.s IL_004e + + IL_0043: br.s IL_0051 + + IL_0045: br.s IL_0054 + + IL_0047: br.s IL_0057 + + IL_0049: br.s IL_005a + + .line 100001,100001 : 0,0 '' + IL_004b: nop + IL_004c: br.s IL_008a + + .line 100001,100001 : 0,0 '' + IL_004e: nop + IL_004f: br.s IL_0076 + + .line 100001,100001 : 0,0 '' + IL_0051: nop + IL_0052: br.s IL_0075 + + .line 100001,100001 : 0,0 '' + IL_0054: nop + IL_0055: br.s IL_005f + + .line 100001,100001 : 0,0 '' + IL_0057: nop + IL_0058: br.s IL_005e + + .line 100001,100001 : 0,0 '' + IL_005a: nop + IL_005b: br.s IL_008a + + .line 100001,100001 : 0,0 '' + IL_005d: nop + .line 100001,100001 : 0,0 '' + IL_005e: nop + IL_005f: ldarg.0 + IL_0060: ldc.i4.5 + IL_0061: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc + IL_0066: ldarg.0 + IL_0067: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::enum0 + IL_006c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0071: nop + .line 100001,100001 : 0,0 '' + IL_0072: nop + IL_0073: br.s IL_008a + + .line 100001,100001 : 0,0 '' + IL_0075: nop + IL_0076: ldarg.0 + IL_0077: ldc.i4.5 + IL_0078: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc + IL_007d: ldarg.0 + IL_007e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::'enum' + IL_0083: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0088: nop + .line 100001,100001 : 0,0 '' + IL_0089: nop + IL_008a: ldarg.0 + IL_008b: ldc.i4.5 + IL_008c: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc + IL_0091: ldarg.0 + IL_0092: ldc.i4.0 + IL_0093: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::current + IL_0098: ldnull + IL_0099: stloc.1 + IL_009a: leave.s IL_00a8 + + } // end .try + catch [mscorlib]System.Object + { + IL_009c: castclass [mscorlib]System.Exception + IL_00a1: stloc.2 + .line 7,9 : 11,21 '' + IL_00a2: ldloc.2 + IL_00a3: stloc.0 + IL_00a4: ldnull + IL_00a5: stloc.1 + IL_00a6: leave.s IL_00a8 + + .line 100001,100001 : 0,0 '' + } // end handler + IL_00a8: ldloc.1 + IL_00a9: pop + .line 100001,100001 : 0,0 '' + IL_00aa: nop + IL_00ab: br IL_0000 + + IL_00b0: ldloc.0 + IL_00b1: ldnull + IL_00b2: cgt.un + IL_00b4: brfalse.s IL_00b8 + + IL_00b6: br.s IL_00ba + + IL_00b8: br.s IL_00bc + + .line 100001,100001 : 0,0 '' + IL_00ba: ldloc.0 + IL_00bb: throw + + .line 100001,100001 : 0,0 '' + IL_00bc: ret + } // end of method f7@7::Close + + .method public strict virtual instance bool + get_CheckClose() cil managed + { + // Code size 78 (0x4e) + .maxstack 5 + .line 100001,100001 : 0,0 '' + IL_0000: ldarg.0 + IL_0001: ldfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc + IL_0006: switch ( + IL_0025, + IL_0027, + IL_0029, + IL_002b, + IL_002d, + IL_002f) + IL_0023: br.s IL_0043 + + IL_0025: br.s IL_0031 + + IL_0027: br.s IL_0034 + + IL_0029: br.s IL_0037 + + IL_002b: br.s IL_003a + + IL_002d: br.s IL_003d + + IL_002f: br.s IL_0040 + + .line 100001,100001 : 0,0 '' + IL_0031: nop + IL_0032: br.s IL_004c + + .line 100001,100001 : 0,0 '' + IL_0034: nop + IL_0035: br.s IL_004a + + .line 100001,100001 : 0,0 '' + IL_0037: nop + IL_0038: br.s IL_0048 + + .line 100001,100001 : 0,0 '' + IL_003a: nop + IL_003b: br.s IL_0046 + + .line 100001,100001 : 0,0 '' + IL_003d: nop + IL_003e: br.s IL_0044 + + .line 100001,100001 : 0,0 '' + IL_0040: nop + IL_0041: br.s IL_004c + + .line 100001,100001 : 0,0 '' + IL_0043: nop + IL_0044: ldc.i4.1 + IL_0045: ret + + IL_0046: ldc.i4.1 + IL_0047: ret + + IL_0048: ldc.i4.1 + IL_0049: ret + + IL_004a: ldc.i4.1 + IL_004b: ret + + IL_004c: ldc.i4.0 + IL_004d: ret + } // end of method f7@7::get_CheckClose + + .method public strict virtual instance int32 + get_LastGenerated() cil managed { - IL_0095: ldloc.s V_5 - IL_0097: isinst [mscorlib]System.IDisposable - IL_009c: stloc.s V_8 - IL_009e: ldloc.s V_8 - IL_00a0: brfalse.s IL_00ac - - .line 100001,100001 : 0,0 '' - IL_00a2: ldloc.s V_8 - IL_00a4: callvirt instance void [mscorlib]System.IDisposable::Dispose() - IL_00a9: ldnull - IL_00aa: pop - IL_00ab: endfinally - .line 100001,100001 : 0,0 '' - IL_00ac: ldnull - IL_00ad: pop - IL_00ae: endfinally - .line 100001,100001 : 0,0 '' - } // end handler - IL_00af: ldloc.s V_6 - IL_00b1: pop + .custom 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: ldfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::current + IL_0006: ret + } // end of method f7@7::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 10 (0xa) + .maxstack 8 + IL_0000: ldnull + IL_0001: ldnull + IL_0002: ldc.i4.0 + IL_0003: ldc.i4.0 + IL_0004: newobj instance void ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + class [mscorlib]System.Collections.Generic.IEnumerator`1, + int32, + int32) + IL_0009: ret + } // end of method f7@7::GetFreshEnumerator + + } // end of class f7@7 + + .method public specialname static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 + get_es() cil managed + { + // Code size 6 (0x6) + .maxstack 8 + IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$ListExpressionSteppingTest6::es@5 + IL_0005: ret + } // end of method ListExpressionSteppingTest6::get_es + + .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 + f7() cil managed + { + // Code size 17 (0x11) + .maxstack 8 .line 7,12 : 9,23 '' - IL_00b2: ldloca.s V_0 - IL_00b4: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() - IL_00b9: ret + IL_0000: ldnull + IL_0001: ldnull + IL_0002: ldc.i4.0 + IL_0003: ldc.i4.0 + IL_0004: newobj instance void ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + class [mscorlib]System.Collections.Generic.IEnumerator`1, + int32, + int32) + IL_0009: tail. + IL_000b: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0010: ret } // end of method ListExpressionSteppingTest6::f7 .property class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AbstractClass.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AbstractClass.il.bsl index 4c8bea58a08..0bae910d0f1 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AbstractClass.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AbstractClass.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly AbstractClass { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.AbstractClass { - // Offset: 0x00000000 Length: 0x00000302 + // Offset: 0x00000000 Length: 0x00000306 } .mresource public FSharpOptimizationData.AbstractClass { - // Offset: 0x00000308 Length: 0x000000B1 + // Offset: 0x00000310 Length: 0x000000B1 } .module AbstractClass.exe -// MVID: {60B68B7F-333C-8BAF-A745-03837F8BB660} +// MVID: {59B19213-333C-8BAF-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07500000 +// Image base: 0x010A0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -62,7 +62,7 @@ // Code size 9 (0x9) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\AbstractClass.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\AbstractClass.fs' IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AnonRecd.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AnonRecd.il.bsl index 23db70c3a45..af9a419018c 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AnonRecd.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AnonRecd.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.7.3081.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 5:0:0:0 + .ver 4:6:0:0 } .assembly AnonRecd { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.AnonRecd { - // Offset: 0x00000000 Length: 0x000001C2 + // Offset: 0x00000000 Length: 0x000001CE } .mresource public FSharpOptimizationData.AnonRecd { - // Offset: 0x000001C8 Length: 0x0000006B + // Offset: 0x000001D8 Length: 0x0000006B } .module AnonRecd.exe -// MVID: {60B68B7F-C42F-5208-A745-03837F8BB660} +// MVID: {5CBDEF61-C42F-5208-A745-038361EFBD5C} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05160000 +// Image base: 0x00D20000 // =============== CLASS MEMBERS DECLARATION =================== @@ -58,7 +58,7 @@ .locals init ([0] int32 x, [1] class '<>f__AnonymousType1912756633`2' a) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 5,22 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\AnonRecd.fs' + .line 4,4 : 5,22 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\AnonRecd.fs' IL_0000: ldc.i4.1 IL_0001: stloc.0 .line 6,6 : 5,31 '' @@ -161,77 +161,97 @@ instance int32 CompareTo(class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 84 (0x54) + // Code size 104 (0x68) .maxstack 5 .locals init ([0] int32 V_0) - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\unknown' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\unknown' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_004a + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_005a .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: ldnull - IL_0008: cgt.un - IL_000a: brfalse.s IL_0048 + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: brfalse.s IL_0012 + + IL_0010: br.s IL_0014 + + IL_0012: br.s IL_0058 .line 100001,100001 : 0,0 '' - IL_000c: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0011: ldarg.0 - IL_0012: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ - IL_0017: ldarg.1 - IL_0018: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ - IL_001d: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [mscorlib]System.Collections.IComparer, + IL_0014: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0019: ldarg.0 + IL_001a: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ + IL_001f: ldarg.1 + IL_0020: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ + IL_0025: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [mscorlib]System.Collections.IComparer, !!0, !!0) - IL_0022: stloc.0 - IL_0023: ldloc.0 - IL_0024: ldc.i4.0 - IL_0025: bge.s IL_0029 + IL_002a: stloc.0 + IL_002b: ldloc.0 + IL_002c: ldc.i4.0 + IL_002d: bge.s IL_0031 + + IL_002f: br.s IL_0033 + + IL_0031: br.s IL_0035 .line 100001,100001 : 0,0 '' - IL_0027: ldloc.0 - IL_0028: ret + IL_0033: ldloc.0 + IL_0034: ret .line 100001,100001 : 0,0 '' - IL_0029: ldloc.0 - IL_002a: ldc.i4.0 - IL_002b: ble.s IL_002f + IL_0035: ldloc.0 + IL_0036: ldc.i4.0 + IL_0037: ble.s IL_003b + + IL_0039: br.s IL_003d + + IL_003b: br.s IL_003f .line 100001,100001 : 0,0 '' - IL_002d: ldloc.0 - IL_002e: ret + IL_003d: ldloc.0 + IL_003e: ret .line 100001,100001 : 0,0 '' - IL_002f: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0034: ldarg.0 - IL_0035: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ - IL_003a: ldarg.1 - IL_003b: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ - IL_0040: tail. - IL_0042: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [mscorlib]System.Collections.IComparer, + IL_003f: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0044: ldarg.0 + IL_0045: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ + IL_004a: ldarg.1 + IL_004b: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ + IL_0050: tail. + IL_0052: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [mscorlib]System.Collections.IComparer, !!0, !!0) - IL_0047: ret + IL_0057: ret .line 100001,100001 : 0,0 '' - IL_0048: ldc.i4.1 - IL_0049: ret + IL_0058: ldc.i4.1 + IL_0059: ret .line 100001,100001 : 0,0 '' - IL_004a: ldarg.1 - IL_004b: ldnull - IL_004c: cgt.un - IL_004e: brfalse.s IL_0052 + IL_005a: ldarg.1 + IL_005b: ldnull + IL_005c: cgt.un + IL_005e: brfalse.s IL_0062 + + IL_0060: br.s IL_0064 + + IL_0062: br.s IL_0066 .line 100001,100001 : 0,0 '' - IL_0050: ldc.i4.m1 - IL_0051: ret + IL_0064: ldc.i4.m1 + IL_0065: ret .line 100001,100001 : 0,0 '' - IL_0052: ldc.i4.0 - IL_0053: ret + IL_0066: ldc.i4.0 + IL_0067: ret } // end of method '<>f__AnonymousType1912756633`2'::CompareTo .method public hidebysig virtual final @@ -254,7 +274,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 95 (0x5f) + // Code size 115 (0x73) .maxstack 5 .locals init ([0] class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> V_0, [1] class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> V_1, @@ -268,128 +288,152 @@ IL_0009: ldarg.0 IL_000a: ldnull IL_000b: cgt.un - IL_000d: brfalse.s IL_0050 + IL_000d: brfalse.s IL_0011 + + IL_000f: br.s IL_0013 + + IL_0011: br.s IL_0060 .line 100001,100001 : 0,0 '' - IL_000f: ldarg.1 - IL_0010: unbox.any class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> - IL_0015: ldnull - IL_0016: cgt.un - IL_0018: brfalse.s IL_004e + IL_0013: ldarg.1 + IL_0014: unbox.any class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> + IL_0019: ldnull + IL_001a: cgt.un + IL_001c: brfalse.s IL_0020 + + IL_001e: br.s IL_0022 + + IL_0020: br.s IL_005e .line 100001,100001 : 0,0 '' - IL_001a: ldarg.2 - IL_001b: ldarg.0 - IL_001c: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ - IL_0021: ldloc.1 - IL_0022: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ - IL_0027: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [mscorlib]System.Collections.IComparer, + IL_0022: ldarg.2 + IL_0023: ldarg.0 + IL_0024: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ + IL_0029: ldloc.1 + IL_002a: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ + IL_002f: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [mscorlib]System.Collections.IComparer, !!0, !!0) - IL_002c: stloc.2 - IL_002d: ldloc.2 - IL_002e: ldc.i4.0 - IL_002f: bge.s IL_0033 + IL_0034: stloc.2 + IL_0035: ldloc.2 + IL_0036: ldc.i4.0 + IL_0037: bge.s IL_003b + + IL_0039: br.s IL_003d + + IL_003b: br.s IL_003f .line 100001,100001 : 0,0 '' - IL_0031: ldloc.2 - IL_0032: ret + IL_003d: ldloc.2 + IL_003e: ret .line 100001,100001 : 0,0 '' - IL_0033: ldloc.2 - IL_0034: ldc.i4.0 - IL_0035: ble.s IL_0039 + IL_003f: ldloc.2 + IL_0040: ldc.i4.0 + IL_0041: ble.s IL_0045 + + IL_0043: br.s IL_0047 + + IL_0045: br.s IL_0049 .line 100001,100001 : 0,0 '' - IL_0037: ldloc.2 - IL_0038: ret + IL_0047: ldloc.2 + IL_0048: ret .line 100001,100001 : 0,0 '' - IL_0039: ldarg.2 - IL_003a: ldarg.0 - IL_003b: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ - IL_0040: ldloc.1 - IL_0041: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ - IL_0046: tail. - IL_0048: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [mscorlib]System.Collections.IComparer, + IL_0049: ldarg.2 + IL_004a: ldarg.0 + IL_004b: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ + IL_0050: ldloc.1 + IL_0051: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ + IL_0056: tail. + IL_0058: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [mscorlib]System.Collections.IComparer, !!0, !!0) - IL_004d: ret + IL_005d: ret .line 100001,100001 : 0,0 '' - IL_004e: ldc.i4.1 - IL_004f: ret + IL_005e: ldc.i4.1 + IL_005f: ret .line 100001,100001 : 0,0 '' - IL_0050: ldarg.1 - IL_0051: unbox.any class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> - IL_0056: ldnull - IL_0057: cgt.un - IL_0059: brfalse.s IL_005d + IL_0060: ldarg.1 + IL_0061: unbox.any class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> + IL_0066: ldnull + IL_0067: cgt.un + IL_0069: brfalse.s IL_006d + + IL_006b: br.s IL_006f + + IL_006d: br.s IL_0071 .line 100001,100001 : 0,0 '' - IL_005b: ldc.i4.m1 - IL_005c: ret + IL_006f: ldc.i4.m1 + IL_0070: ret .line 100001,100001 : 0,0 '' - IL_005d: ldc.i4.0 - IL_005e: ret + IL_0071: ldc.i4.0 + IL_0072: ret } // end of method '<>f__AnonymousType1912756633`2'::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 66 (0x42) + // Code size 70 (0x46) .maxstack 7 .locals init ([0] int32 V_0) .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0040 + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_0044 .line 100001,100001 : 0,0 '' - IL_0006: ldc.i4.0 - IL_0007: stloc.0 - IL_0008: ldc.i4 0x9e3779b9 - IL_000d: ldarg.1 - IL_000e: ldarg.0 - IL_000f: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ - IL_0014: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [mscorlib]System.Collections.IEqualityComparer, + IL_000a: ldc.i4.0 + IL_000b: stloc.0 + IL_000c: ldc.i4 0x9e3779b9 + IL_0011: ldarg.1 + IL_0012: ldarg.0 + IL_0013: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ + IL_0018: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [mscorlib]System.Collections.IEqualityComparer, !!0) - IL_0019: ldloc.0 - IL_001a: ldc.i4.6 - IL_001b: shl - IL_001c: ldloc.0 - IL_001d: ldc.i4.2 - IL_001e: shr - IL_001f: add - IL_0020: add - IL_0021: add - IL_0022: stloc.0 - IL_0023: ldc.i4 0x9e3779b9 - IL_0028: ldarg.1 - IL_0029: ldarg.0 - IL_002a: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ - IL_002f: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [mscorlib]System.Collections.IEqualityComparer, + IL_001d: ldloc.0 + IL_001e: ldc.i4.6 + IL_001f: shl + IL_0020: ldloc.0 + IL_0021: ldc.i4.2 + IL_0022: shr + IL_0023: add + IL_0024: add + IL_0025: add + IL_0026: stloc.0 + IL_0027: ldc.i4 0x9e3779b9 + IL_002c: ldarg.1 + IL_002d: ldarg.0 + IL_002e: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ + IL_0033: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [mscorlib]System.Collections.IEqualityComparer, !!0) - IL_0034: ldloc.0 - IL_0035: ldc.i4.6 - IL_0036: shl - IL_0037: ldloc.0 - IL_0038: ldc.i4.2 - IL_0039: shr - IL_003a: add - IL_003b: add - IL_003c: add - IL_003d: stloc.0 - IL_003e: ldloc.0 - IL_003f: ret - - .line 100001,100001 : 0,0 '' - IL_0040: ldc.i4.0 - IL_0041: ret + IL_0038: ldloc.0 + IL_0039: ldc.i4.6 + IL_003a: shl + IL_003b: ldloc.0 + IL_003c: ldc.i4.2 + IL_003d: shr + IL_003e: add + IL_003f: add + IL_0040: add + IL_0041: stloc.0 + IL_0042: ldloc.0 + IL_0043: ret + + .line 100001,100001 : 0,0 '' + IL_0044: ldc.i4.0 + IL_0045: ret } // end of method '<>f__AnonymousType1912756633`2'::GetHashCode .method public hidebysig virtual final @@ -411,7 +455,7 @@ class [mscorlib]System.Collections.IEqualityComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 71 (0x47) + // Code size 83 (0x53) .maxstack 5 .locals init ([0] class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> V_0, [1] class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> V_1) @@ -419,116 +463,140 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_003f + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_004b .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: isinst class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> - IL_000c: stloc.0 - IL_000d: ldloc.0 - IL_000e: brfalse.s IL_003d + IL_000a: ldarg.1 + IL_000b: isinst class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> + IL_0010: stloc.0 + IL_0011: ldloc.0 + IL_0012: brfalse.s IL_0016 + + IL_0014: br.s IL_0018 + + IL_0016: br.s IL_0049 .line 100001,100001 : 0,0 '' - IL_0010: ldloc.0 - IL_0011: stloc.1 - IL_0012: ldarg.2 - IL_0013: ldarg.0 - IL_0014: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ - IL_0019: ldloc.1 - IL_001a: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ - IL_001f: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [mscorlib]System.Collections.IEqualityComparer, + IL_0018: ldloc.0 + IL_0019: stloc.1 + IL_001a: ldarg.2 + IL_001b: ldarg.0 + IL_001c: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ + IL_0021: ldloc.1 + IL_0022: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ + IL_0027: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [mscorlib]System.Collections.IEqualityComparer, !!0, !!0) - IL_0024: brfalse.s IL_003b + IL_002c: brfalse.s IL_0030 + + IL_002e: br.s IL_0032 + + IL_0030: br.s IL_0047 .line 100001,100001 : 0,0 '' - IL_0026: ldarg.2 - IL_0027: ldarg.0 - IL_0028: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ - IL_002d: ldloc.1 - IL_002e: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ - IL_0033: tail. - IL_0035: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [mscorlib]System.Collections.IEqualityComparer, + IL_0032: ldarg.2 + IL_0033: ldarg.0 + IL_0034: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ + IL_0039: ldloc.1 + IL_003a: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ + IL_003f: tail. + IL_0041: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [mscorlib]System.Collections.IEqualityComparer, !!0, !!0) - IL_003a: ret + IL_0046: ret .line 100001,100001 : 0,0 '' - IL_003b: ldc.i4.0 - IL_003c: ret + IL_0047: ldc.i4.0 + IL_0048: ret .line 100001,100001 : 0,0 '' - IL_003d: ldc.i4.0 - IL_003e: ret + IL_0049: ldc.i4.0 + IL_004a: ret .line 100001,100001 : 0,0 '' - IL_003f: ldarg.1 - IL_0040: ldnull - IL_0041: cgt.un - IL_0043: ldc.i4.0 - IL_0044: ceq - IL_0046: ret + IL_004b: ldarg.1 + IL_004c: ldnull + IL_004d: cgt.un + IL_004f: ldc.i4.0 + IL_0050: ceq + IL_0052: ret } // end of method '<>f__AnonymousType1912756633`2'::Equals .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 63 (0x3f) - .maxstack 8 + // Code size 75 (0x4b) + .maxstack 4 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0037 + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_0043 .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: ldnull - IL_0008: cgt.un - IL_000a: brfalse.s IL_0035 + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: brfalse.s IL_0012 + + IL_0010: br.s IL_0014 + + IL_0012: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_000c: ldarg.0 - IL_000d: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ - IL_0012: ldarg.1 - IL_0013: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ - IL_0018: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + IL_0014: ldarg.0 + IL_0015: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ + IL_001a: ldarg.1 + IL_001b: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ + IL_0020: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, !!0) - IL_001d: brfalse.s IL_0033 + IL_0025: brfalse.s IL_0029 + + IL_0027: br.s IL_002b + + IL_0029: br.s IL_003f .line 100001,100001 : 0,0 '' - IL_001f: ldarg.0 - IL_0020: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ - IL_0025: ldarg.1 - IL_0026: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ - IL_002b: tail. - IL_002d: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + IL_002b: ldarg.0 + IL_002c: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ + IL_0031: ldarg.1 + IL_0032: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ + IL_0037: tail. + IL_0039: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, !!0) - IL_0032: ret + IL_003e: ret .line 100001,100001 : 0,0 '' - IL_0033: ldc.i4.0 - IL_0034: ret + IL_003f: ldc.i4.0 + IL_0040: ret .line 100001,100001 : 0,0 '' - IL_0035: ldc.i4.0 - IL_0036: ret + IL_0041: ldc.i4.0 + IL_0042: ret .line 100001,100001 : 0,0 '' - IL_0037: ldarg.1 - IL_0038: ldnull - IL_0039: cgt.un - IL_003b: ldc.i4.0 - IL_003c: ceq - IL_003e: ret + IL_0043: ldarg.1 + IL_0044: ldnull + IL_0045: cgt.un + IL_0047: ldc.i4.0 + IL_0048: ceq + IL_004a: ret } // end of method '<>f__AnonymousType1912756633`2'::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 22 (0x16) + // Code size 26 (0x1a) .maxstack 4 .locals init ([0] class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> V_0) .line 1,1 : 1,1 '' @@ -536,18 +604,22 @@ IL_0001: isinst class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> IL_0006: stloc.0 IL_0007: ldloc.0 - IL_0008: brfalse.s IL_0014 + IL_0008: brfalse.s IL_000c + + IL_000a: br.s IL_000e + + IL_000c: br.s IL_0018 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.0 - IL_000b: ldloc.0 - IL_000c: tail. - IL_000e: callvirt instance bool class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType1912756633`2') - IL_0013: ret + IL_000e: ldarg.0 + IL_000f: ldloc.0 + IL_0010: tail. + IL_0012: callvirt instance bool class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType1912756633`2') + IL_0017: ret .line 100001,100001 : 0,0 '' - IL_0014: ldc.i4.0 - IL_0015: ret + IL_0018: ldc.i4.0 + IL_0019: ret } // end of method '<>f__AnonymousType1912756633`2'::Equals .property instance !'j__TPar' A() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ArgumentNamesInClosures01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ArgumentNamesInClosures01.il.bsl index e6142d728e9..20e4f6be78f 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ArgumentNamesInClosures01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ArgumentNamesInClosures01.il.bsl @@ -36,13 +36,13 @@ // Offset: 0x000003A0 Length: 0x0000010D } .module ArgumentNamesInClosures01.dll -// MVID: {60B68B7F-39CA-41B5-A745-03837F8BB660} +// MVID: {5FCFFD09-39CA-41B5-A745-038309FDCF5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00EF0000 +// Image base: 0x05A70000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/CodeGenRenamings01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/CodeGenRenamings01.il.bsl index 08a6e0020c2..6fab8d600ef 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/CodeGenRenamings01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/CodeGenRenamings01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly CodeGenRenamings01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.CodeGenRenamings01 { - // Offset: 0x00000000 Length: 0x000003C8 + // Offset: 0x00000000 Length: 0x000003CC } .mresource public FSharpOptimizationData.CodeGenRenamings01 { // Offset: 0x000003D0 Length: 0x0000011B } .module CodeGenRenamings01.exe -// MVID: {60B78A57-8173-986B-A745-0383578AB760} +// MVID: {59B19213-8173-986B-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06CA0000 +// Image base: 0x010A0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -83,68 +83,74 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1>& next) cil managed { - // Code size 97 (0x61) + // Code size 103 (0x67) .maxstack 7 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\CodeGenRenamings01.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\CodeGenRenamings01.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 CodeGenRenamings01/seq1@9::pc IL_0006: ldc.i4.1 IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_003b + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0051 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_0058 + IL_0022: br.s IL_0041 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_0057 + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_005e + + .line 100001,100001 : 0,0 '' + IL_002a: nop + IL_002b: ldarg.0 + IL_002c: ldc.i4.1 + IL_002d: stfld int32 CodeGenRenamings01/seq1@9::pc .line 9,9 : 18,30 '' - IL_0025: ldarg.0 - IL_0026: ldc.i4.1 - IL_0027: stfld int32 CodeGenRenamings01/seq1@9::pc - IL_002c: ldarg.0 - IL_002d: ldc.i4.1 - IL_002e: ldc.i4.1 - IL_002f: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, + IL_0032: ldarg.0 + IL_0033: ldc.i4.1 + IL_0034: ldc.i4.1 + IL_0035: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, !1) - IL_0034: stfld class [mscorlib]System.Tuple`2 CodeGenRenamings01/seq1@9::current - IL_0039: ldc.i4.1 - IL_003a: ret + IL_003a: stfld class [mscorlib]System.Tuple`2 CodeGenRenamings01/seq1@9::current + IL_003f: ldc.i4.1 + IL_0040: ret + IL_0041: ldarg.0 + IL_0042: ldc.i4.2 + IL_0043: stfld int32 CodeGenRenamings01/seq1@9::pc .line 9,9 : 32,44 '' - IL_003b: ldarg.0 - IL_003c: ldc.i4.2 - IL_003d: stfld int32 CodeGenRenamings01/seq1@9::pc - IL_0042: ldarg.0 - IL_0043: ldc.i4.2 - IL_0044: ldc.i4.2 - IL_0045: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, + IL_0048: ldarg.0 + IL_0049: ldc.i4.2 + IL_004a: ldc.i4.2 + IL_004b: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, !1) - IL_004a: stfld class [mscorlib]System.Tuple`2 CodeGenRenamings01/seq1@9::current - IL_004f: ldc.i4.1 - IL_0050: ret - - IL_0051: ldarg.0 - IL_0052: ldc.i4.3 - IL_0053: stfld int32 CodeGenRenamings01/seq1@9::pc - IL_0058: ldarg.0 - IL_0059: ldnull - IL_005a: stfld class [mscorlib]System.Tuple`2 CodeGenRenamings01/seq1@9::current - IL_005f: ldc.i4.0 - IL_0060: ret + IL_0050: stfld class [mscorlib]System.Tuple`2 CodeGenRenamings01/seq1@9::current + IL_0055: ldc.i4.1 + IL_0056: ret + + IL_0057: ldarg.0 + IL_0058: ldc.i4.3 + IL_0059: stfld int32 CodeGenRenamings01/seq1@9::pc + IL_005e: ldarg.0 + IL_005f: ldnull + IL_0060: stfld class [mscorlib]System.Tuple`2 CodeGenRenamings01/seq1@9::current + IL_0065: ldc.i4.0 + IL_0066: ret } // end of method seq1@9::GenerateNext .method public strict virtual instance void @@ -161,44 +167,52 @@ .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 CodeGenRenamings01/seq1@9::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.0 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.0 + IL_0033: ret - IL_002c: ldc.i4.0 - IL_002d: ret + IL_0034: ldc.i4.0 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method seq1@9::get_CheckClose .method public strict virtual instance class [mscorlib]System.Tuple`2 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/CustomAttributeGenericParameter01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/CustomAttributeGenericParameter01.il.bsl index f3c32848290..63d76598150 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/CustomAttributeGenericParameter01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/CustomAttributeGenericParameter01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly CustomAttributeGenericParameter01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.CustomAttributeGenericParameter01 { - // Offset: 0x00000000 Length: 0x000002BE + // Offset: 0x00000000 Length: 0x000002C2 } .mresource public FSharpOptimizationData.CustomAttributeGenericParameter01 { // Offset: 0x000002C8 Length: 0x0000007A } .module CustomAttributeGenericParameter01.exe -// MVID: {60B68B7F-F08A-F524-A745-03837F8BB660} +// MVID: {59B19213-F08A-F524-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05340000 +// Image base: 0x001D0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -58,7 +58,7 @@ // Code size 2 (0x2) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 48,49 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\CustomAttributeGenericParameter01.fs' + .line 4,4 : 48,49 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\CustomAttributeGenericParameter01.fs' IL_0000: ldarg.0 IL_0001: ret } // end of method M::f diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Decimal01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Decimal01.il.bsl index b0c34bdda4a..6fa27f19cbf 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Decimal01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Decimal01.il.bsl @@ -34,20 +34,20 @@ } .mresource public FSharpSignatureData.Decimal01 { - // Offset: 0x00000000 Length: 0x0000013B + // Offset: 0x00000000 Length: 0x00000139 } .mresource public FSharpOptimizationData.Decimal01 { // Offset: 0x00000140 Length: 0x00000050 } .module Decimal01.exe -// MVID: {60B68B7F-F150-FA46-A745-03837F8BB660} +// MVID: {5F1F9A50-F150-FA46-A745-0383509A1F5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05600000 +// Image base: 0x06840000 // =============== CLASS MEMBERS DECLARATION =================== @@ -71,7 +71,7 @@ // Code size 13 (0xd) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 9,13 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\Decimal01.fs' + .line 6,6 : 9,13 'C:\\kevinransom\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\Decimal01.fs' IL_0000: ldc.i4.s 12 IL_0002: ldc.i4.0 IL_0003: ldc.i4.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EntryPoint01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EntryPoint01.il.bsl index 4afe8d6966b..4768f783d4c 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.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly EntryPoint01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.EntryPoint01 { - // Offset: 0x00000000 Length: 0x0000024F + // Offset: 0x00000000 Length: 0x00000253 } .mresource public FSharpOptimizationData.EntryPoint01 { // Offset: 0x00000258 Length: 0x00000090 } .module EntryPoint01.exe -// MVID: {60B68B7F-9846-72C1-A745-03837F8BB660} +// MVID: {59B19213-9846-72C1-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x071C0000 +// Image base: 0x00680000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,10 +66,10 @@ { .entrypoint .custom instance void [FSharp.Core]Microsoft.FSharp.Core.EntryPointAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 35 (0x23) + // Code size 39 (0x27) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 8,8 : 9,39 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\EntryPoint01.fs' + .line 8,8 : 9,39 '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@ @@ -77,22 +77,26 @@ IL_000b: pop IL_000c: call int32 EntryPoint01::get_static_initializer() IL_0011: ldc.i4.s 10 - IL_0013: bne.un.s IL_0019 + IL_0013: bne.un.s IL_0017 + + IL_0015: br.s IL_0019 + + IL_0017: br.s IL_001d .line 8,8 : 40,41 '' - IL_0015: ldc.i4.0 + IL_0019: ldc.i4.0 .line 100001,100001 : 0,0 '' - IL_0016: nop - IL_0017: br.s IL_001b + IL_001a: nop + IL_001b: br.s IL_001f .line 8,8 : 47,48 '' - IL_0019: ldc.i4.1 + IL_001d: ldc.i4.1 .line 100001,100001 : 0,0 '' - IL_001a: nop + IL_001e: nop .line 100001,100001 : 0,0 '' - IL_001b: tail. - IL_001d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32) - IL_0022: ret + IL_001f: tail. + IL_0021: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32) + IL_0026: ret } // end of method EntryPoint01::main .property int32 static_initializer() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EqualsOnUnions01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EqualsOnUnions01.il.bsl index f1c372c2645..5d270545498 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EqualsOnUnions01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EqualsOnUnions01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly EqualsOnUnions01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.EqualsOnUnions01 { - // Offset: 0x00000000 Length: 0x0000063B + // Offset: 0x00000000 Length: 0x0000064B } .mresource public FSharpOptimizationData.EqualsOnUnions01 { - // Offset: 0x00000640 Length: 0x000001C7 + // Offset: 0x00000650 Length: 0x000001C7 } .module EqualsOnUnions01.exe -// MVID: {60B68B7F-BBFB-14A0-A745-03837F8BB660} +// MVID: {59B19213-BBFB-14A0-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07200000 +// Image base: 0x01350000 // =============== CLASS MEMBERS DECLARATION =================== @@ -339,7 +339,7 @@ instance int32 CompareTo(class EqualsOnUnions01/U obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 131 (0x83) + // Code size 158 (0x9e) .maxstack 4 .locals init ([0] int32 V_0, [1] class EqualsOnUnions01/U V_1, @@ -351,106 +351,130 @@ [7] int32 V_7, [8] int32 V_8) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\EqualsOnUnions01.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\EqualsOnUnions01.fs' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse IL_0079 + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000d + + IL_0008: br IL_0090 .line 100001,100001 : 0,0 '' - IL_0009: ldarg.1 - IL_000a: ldnull - IL_000b: cgt.un - IL_000d: brfalse.s IL_0077 + IL_000d: ldarg.1 + IL_000e: ldnull + IL_000f: cgt.un + IL_0011: brfalse.s IL_0015 + + IL_0013: br.s IL_001a + + IL_0015: br IL_008e .line 100001,100001 : 0,0 '' - IL_000f: ldarg.0 - IL_0010: stloc.1 - IL_0011: ldloc.1 - IL_0012: isinst EqualsOnUnions01/U/B - IL_0017: brfalse.s IL_001c - - IL_0019: ldc.i4.1 - IL_001a: br.s IL_001d - - IL_001c: ldc.i4.0 - IL_001d: stloc.0 - IL_001e: ldarg.1 - IL_001f: stloc.3 - IL_0020: ldloc.3 - IL_0021: isinst EqualsOnUnions01/U/B - IL_0026: brfalse.s IL_002b - - IL_0028: ldc.i4.1 - IL_0029: br.s IL_002c - - IL_002b: ldc.i4.0 - IL_002c: stloc.2 - IL_002d: ldloc.0 - IL_002e: ldloc.2 - IL_002f: bne.un.s IL_0073 - - .line 100001,100001 : 0,0 '' - IL_0031: ldarg.0 - IL_0032: isinst EqualsOnUnions01/U/B - IL_0037: brfalse.s IL_0071 - - .line 100001,100001 : 0,0 '' - IL_0039: ldarg.0 - IL_003a: castclass EqualsOnUnions01/U/B - IL_003f: stloc.s V_4 - IL_0041: ldarg.1 - IL_0042: castclass EqualsOnUnions01/U/B - IL_0047: stloc.s V_5 - IL_0049: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_004e: stloc.s V_6 - IL_0050: ldloc.s V_4 - IL_0052: ldfld int32 EqualsOnUnions01/U/B::item - IL_0057: stloc.s V_7 - IL_0059: ldloc.s V_5 - IL_005b: ldfld int32 EqualsOnUnions01/U/B::item - IL_0060: stloc.s V_8 - IL_0062: ldloc.s V_7 - IL_0064: ldloc.s V_8 - IL_0066: bge.s IL_006a + IL_001a: ldarg.0 + IL_001b: stloc.1 + IL_001c: ldloc.1 + IL_001d: isinst EqualsOnUnions01/U/B + IL_0022: brfalse.s IL_0027 + + IL_0024: ldc.i4.1 + IL_0025: br.s IL_0028 + + IL_0027: ldc.i4.0 + IL_0028: stloc.0 + IL_0029: ldarg.1 + IL_002a: stloc.3 + IL_002b: ldloc.3 + IL_002c: isinst EqualsOnUnions01/U/B + IL_0031: brfalse.s IL_0036 + + IL_0033: ldc.i4.1 + IL_0034: br.s IL_0037 + + IL_0036: ldc.i4.0 + IL_0037: stloc.2 + IL_0038: ldloc.0 + IL_0039: ldloc.2 + IL_003a: bne.un.s IL_003e + + IL_003c: br.s IL_0040 + + IL_003e: br.s IL_008a .line 100001,100001 : 0,0 '' - IL_0068: ldc.i4.m1 - IL_0069: ret + IL_0040: ldarg.0 + IL_0041: isinst EqualsOnUnions01/U/B + IL_0046: brfalse.s IL_004a + + IL_0048: br.s IL_004c + + IL_004a: br.s IL_0088 .line 100001,100001 : 0,0 '' - IL_006a: ldloc.s V_7 - IL_006c: ldloc.s V_8 - IL_006e: cgt - IL_0070: ret + IL_004c: ldarg.0 + IL_004d: castclass EqualsOnUnions01/U/B + IL_0052: stloc.s V_4 + IL_0054: ldarg.1 + IL_0055: castclass EqualsOnUnions01/U/B + IL_005a: stloc.s V_5 + IL_005c: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0061: stloc.s V_6 + IL_0063: ldloc.s V_4 + IL_0065: ldfld int32 EqualsOnUnions01/U/B::item + IL_006a: stloc.s V_7 + IL_006c: ldloc.s V_5 + IL_006e: ldfld int32 EqualsOnUnions01/U/B::item + IL_0073: stloc.s V_8 + IL_0075: ldloc.s V_7 + IL_0077: ldloc.s V_8 + IL_0079: bge.s IL_007d + + IL_007b: br.s IL_007f + + IL_007d: br.s IL_0081 .line 100001,100001 : 0,0 '' - IL_0071: ldc.i4.0 - IL_0072: ret + IL_007f: ldc.i4.m1 + IL_0080: ret .line 100001,100001 : 0,0 '' - IL_0073: ldloc.0 - IL_0074: ldloc.2 - IL_0075: sub - IL_0076: ret + IL_0081: ldloc.s V_7 + IL_0083: ldloc.s V_8 + IL_0085: cgt + IL_0087: ret .line 100001,100001 : 0,0 '' - IL_0077: ldc.i4.1 - IL_0078: ret + IL_0088: ldc.i4.0 + IL_0089: ret .line 100001,100001 : 0,0 '' - IL_0079: ldarg.1 - IL_007a: ldnull - IL_007b: cgt.un - IL_007d: brfalse.s IL_0081 + IL_008a: ldloc.0 + IL_008b: ldloc.2 + IL_008c: sub + IL_008d: ret .line 100001,100001 : 0,0 '' - IL_007f: ldc.i4.m1 - IL_0080: ret + IL_008e: ldc.i4.1 + IL_008f: ret .line 100001,100001 : 0,0 '' - IL_0081: ldc.i4.0 - IL_0082: ret + IL_0090: ldarg.1 + IL_0091: ldnull + IL_0092: cgt.un + IL_0094: brfalse.s IL_0098 + + IL_0096: br.s IL_009a + + IL_0098: br.s IL_009c + + .line 100001,100001 : 0,0 '' + IL_009a: ldc.i4.m1 + IL_009b: ret + + .line 100001,100001 : 0,0 '' + IL_009c: ldc.i4.0 + IL_009d: ret } // end of method U::CompareTo .method public hidebysig virtual final @@ -472,7 +496,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 146 (0x92) + // Code size 173 (0xad) .maxstack 4 .locals init ([0] class EqualsOnUnions01/U V_0, [1] int32 V_1, @@ -491,111 +515,135 @@ IL_0007: ldarg.0 IL_0008: ldnull IL_0009: cgt.un - IL_000b: brfalse IL_0083 + IL_000b: brfalse.s IL_000f + + IL_000d: br.s IL_0014 + + IL_000f: br IL_009a .line 100001,100001 : 0,0 '' - IL_0010: ldarg.1 - IL_0011: unbox.any EqualsOnUnions01/U - IL_0016: ldnull - IL_0017: cgt.un - IL_0019: brfalse.s IL_0081 + IL_0014: ldarg.1 + IL_0015: unbox.any EqualsOnUnions01/U + IL_001a: ldnull + IL_001b: cgt.un + IL_001d: brfalse.s IL_0021 + + IL_001f: br.s IL_0026 + + IL_0021: br IL_0098 .line 100001,100001 : 0,0 '' - IL_001b: ldarg.0 - IL_001c: stloc.2 - IL_001d: ldloc.2 - IL_001e: isinst EqualsOnUnions01/U/B - IL_0023: brfalse.s IL_0028 + IL_0026: ldarg.0 + IL_0027: stloc.2 + IL_0028: ldloc.2 + IL_0029: isinst EqualsOnUnions01/U/B + IL_002e: brfalse.s IL_0033 - IL_0025: ldc.i4.1 - IL_0026: br.s IL_0029 + IL_0030: ldc.i4.1 + IL_0031: br.s IL_0034 - IL_0028: ldc.i4.0 - IL_0029: stloc.1 - IL_002a: ldloc.0 - IL_002b: stloc.s V_4 - IL_002d: ldloc.s V_4 - IL_002f: isinst EqualsOnUnions01/U/B - IL_0034: brfalse.s IL_0039 + IL_0033: ldc.i4.0 + IL_0034: stloc.1 + IL_0035: ldloc.0 + IL_0036: stloc.s V_4 + IL_0038: ldloc.s V_4 + IL_003a: isinst EqualsOnUnions01/U/B + IL_003f: brfalse.s IL_0044 - IL_0036: ldc.i4.1 - IL_0037: br.s IL_003a + IL_0041: ldc.i4.1 + IL_0042: br.s IL_0045 - IL_0039: ldc.i4.0 - IL_003a: stloc.3 - IL_003b: ldloc.1 - IL_003c: ldloc.3 - IL_003d: bne.un.s IL_007d + IL_0044: ldc.i4.0 + IL_0045: stloc.3 + IL_0046: ldloc.1 + IL_0047: ldloc.3 + IL_0048: bne.un.s IL_004c + + IL_004a: br.s IL_004e + + IL_004c: br.s IL_0094 .line 100001,100001 : 0,0 '' - IL_003f: ldarg.0 - IL_0040: isinst EqualsOnUnions01/U/B - IL_0045: brfalse.s IL_007b + IL_004e: ldarg.0 + IL_004f: isinst EqualsOnUnions01/U/B + IL_0054: brfalse.s IL_0058 + + IL_0056: br.s IL_005a + + IL_0058: br.s IL_0092 .line 100001,100001 : 0,0 '' - IL_0047: ldarg.0 - IL_0048: castclass EqualsOnUnions01/U/B - IL_004d: stloc.s V_5 - IL_004f: ldloc.0 - IL_0050: castclass EqualsOnUnions01/U/B - IL_0055: stloc.s V_6 - IL_0057: ldarg.2 - IL_0058: stloc.s V_7 - IL_005a: ldloc.s V_5 - IL_005c: ldfld int32 EqualsOnUnions01/U/B::item - IL_0061: stloc.s V_8 - IL_0063: ldloc.s V_6 - IL_0065: ldfld int32 EqualsOnUnions01/U/B::item - IL_006a: stloc.s V_9 - IL_006c: ldloc.s V_8 - IL_006e: ldloc.s V_9 - IL_0070: bge.s IL_0074 + IL_005a: ldarg.0 + IL_005b: castclass EqualsOnUnions01/U/B + IL_0060: stloc.s V_5 + IL_0062: ldloc.0 + IL_0063: castclass EqualsOnUnions01/U/B + IL_0068: stloc.s V_6 + IL_006a: ldarg.2 + IL_006b: stloc.s V_7 + IL_006d: ldloc.s V_5 + IL_006f: ldfld int32 EqualsOnUnions01/U/B::item + IL_0074: stloc.s V_8 + IL_0076: ldloc.s V_6 + IL_0078: ldfld int32 EqualsOnUnions01/U/B::item + IL_007d: stloc.s V_9 + IL_007f: ldloc.s V_8 + IL_0081: ldloc.s V_9 + IL_0083: bge.s IL_0087 + + IL_0085: br.s IL_0089 + + IL_0087: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_0072: ldc.i4.m1 - IL_0073: ret + IL_0089: ldc.i4.m1 + IL_008a: ret .line 100001,100001 : 0,0 '' - IL_0074: ldloc.s V_8 - IL_0076: ldloc.s V_9 - IL_0078: cgt - IL_007a: ret + IL_008b: ldloc.s V_8 + IL_008d: ldloc.s V_9 + IL_008f: cgt + IL_0091: ret .line 100001,100001 : 0,0 '' - IL_007b: ldc.i4.0 - IL_007c: ret + IL_0092: ldc.i4.0 + IL_0093: ret .line 100001,100001 : 0,0 '' - IL_007d: ldloc.1 - IL_007e: ldloc.3 - IL_007f: sub - IL_0080: ret + IL_0094: ldloc.1 + IL_0095: ldloc.3 + IL_0096: sub + IL_0097: ret .line 100001,100001 : 0,0 '' - IL_0081: ldc.i4.1 - IL_0082: ret + IL_0098: ldc.i4.1 + IL_0099: ret .line 100001,100001 : 0,0 '' - IL_0083: ldarg.1 - IL_0084: unbox.any EqualsOnUnions01/U - IL_0089: ldnull - IL_008a: cgt.un - IL_008c: brfalse.s IL_0090 + IL_009a: ldarg.1 + IL_009b: unbox.any EqualsOnUnions01/U + IL_00a0: ldnull + IL_00a1: cgt.un + IL_00a3: brfalse.s IL_00a7 + + IL_00a5: br.s IL_00a9 + + IL_00a7: br.s IL_00ab .line 100001,100001 : 0,0 '' - IL_008e: ldc.i4.m1 - IL_008f: ret + IL_00a9: ldc.i4.m1 + IL_00aa: ret .line 100001,100001 : 0,0 '' - IL_0090: ldc.i4.0 - IL_0091: ret + IL_00ab: ldc.i4.0 + IL_00ac: 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 67 (0x43) + // Code size 75 (0x4b) .maxstack 7 .locals init ([0] int32 V_0, [1] class EqualsOnUnions01/U/B V_1, @@ -605,55 +653,63 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0041 - - .line 100001,100001 : 0,0 '' - IL_0006: ldc.i4.0 - IL_0007: stloc.0 - IL_0008: ldarg.0 - IL_0009: isinst EqualsOnUnions01/U/B - IL_000e: brfalse.s IL_0032 - - .line 100001,100001 : 0,0 '' - IL_0010: ldarg.0 - IL_0011: castclass EqualsOnUnions01/U/B - IL_0016: stloc.1 - IL_0017: ldc.i4.1 - IL_0018: stloc.0 - IL_0019: ldc.i4 0x9e3779b9 - IL_001e: ldarg.1 - IL_001f: stloc.2 - IL_0020: ldloc.1 - IL_0021: ldfld int32 EqualsOnUnions01/U/B::item - IL_0026: ldloc.0 - IL_0027: ldc.i4.6 - IL_0028: shl - IL_0029: ldloc.0 - IL_002a: ldc.i4.2 - IL_002b: shr - IL_002c: add - IL_002d: add - IL_002e: add - IL_002f: stloc.0 - IL_0030: ldloc.0 - IL_0031: ret - - .line 100001,100001 : 0,0 '' - IL_0032: ldarg.0 - IL_0033: stloc.3 - IL_0034: ldloc.3 - IL_0035: isinst EqualsOnUnions01/U/B - IL_003a: brfalse.s IL_003f - - IL_003c: ldc.i4.1 - IL_003d: br.s IL_0040 - - IL_003f: ldc.i4.0 - IL_0040: ret - - .line 100001,100001 : 0,0 '' - IL_0041: ldc.i4.0 - IL_0042: ret + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_0049 + + .line 100001,100001 : 0,0 '' + IL_000a: ldc.i4.0 + IL_000b: stloc.0 + IL_000c: ldarg.0 + IL_000d: isinst EqualsOnUnions01/U/B + IL_0012: brfalse.s IL_0016 + + IL_0014: br.s IL_0018 + + IL_0016: br.s IL_003a + + .line 100001,100001 : 0,0 '' + IL_0018: ldarg.0 + IL_0019: castclass EqualsOnUnions01/U/B + IL_001e: stloc.1 + IL_001f: ldc.i4.1 + IL_0020: stloc.0 + IL_0021: ldc.i4 0x9e3779b9 + IL_0026: ldarg.1 + IL_0027: stloc.2 + IL_0028: ldloc.1 + IL_0029: ldfld int32 EqualsOnUnions01/U/B::item + IL_002e: ldloc.0 + IL_002f: ldc.i4.6 + IL_0030: shl + IL_0031: ldloc.0 + IL_0032: ldc.i4.2 + IL_0033: shr + IL_0034: add + IL_0035: add + IL_0036: add + IL_0037: stloc.0 + IL_0038: ldloc.0 + IL_0039: ret + + .line 100001,100001 : 0,0 '' + IL_003a: ldarg.0 + IL_003b: stloc.3 + IL_003c: ldloc.3 + IL_003d: isinst EqualsOnUnions01/U/B + IL_0042: brfalse.s IL_0047 + + IL_0044: ldc.i4.1 + IL_0045: br.s IL_0048 + + IL_0047: ldc.i4.0 + IL_0048: ret + + .line 100001,100001 : 0,0 '' + IL_0049: ldc.i4.0 + IL_004a: ret } // end of method U::GetHashCode .method public hidebysig virtual final @@ -674,7 +730,7 @@ class [mscorlib]System.Collections.IEqualityComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 114 (0x72) + // Code size 133 (0x85) .maxstack 4 .locals init ([0] class EqualsOnUnions01/U V_0, [1] class EqualsOnUnions01/U V_1, @@ -689,91 +745,107 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_006a + IL_0004: brfalse.s IL_0008 - .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: isinst EqualsOnUnions01/U - IL_000c: stloc.0 - IL_000d: ldloc.0 - IL_000e: brfalse.s IL_0068 + IL_0006: br.s IL_000d + + IL_0008: br IL_007d .line 100001,100001 : 0,0 '' - IL_0010: ldloc.0 - IL_0011: stloc.1 - IL_0012: ldarg.0 - IL_0013: stloc.3 - IL_0014: ldloc.3 - IL_0015: isinst EqualsOnUnions01/U/B - IL_001a: brfalse.s IL_001f + IL_000d: ldarg.1 + IL_000e: isinst EqualsOnUnions01/U + IL_0013: stloc.0 + IL_0014: ldloc.0 + IL_0015: brfalse.s IL_0019 - IL_001c: ldc.i4.1 - IL_001d: br.s IL_0020 + IL_0017: br.s IL_001b - IL_001f: ldc.i4.0 - IL_0020: stloc.2 - IL_0021: ldloc.1 - IL_0022: stloc.s V_5 - IL_0024: ldloc.s V_5 - IL_0026: isinst EqualsOnUnions01/U/B - IL_002b: brfalse.s IL_0030 + IL_0019: br.s IL_007b - IL_002d: ldc.i4.1 - IL_002e: br.s IL_0031 + .line 100001,100001 : 0,0 '' + IL_001b: ldloc.0 + IL_001c: stloc.1 + IL_001d: ldarg.0 + IL_001e: stloc.3 + IL_001f: ldloc.3 + IL_0020: isinst EqualsOnUnions01/U/B + IL_0025: brfalse.s IL_002a + + IL_0027: ldc.i4.1 + IL_0028: br.s IL_002b + + IL_002a: ldc.i4.0 + IL_002b: stloc.2 + IL_002c: ldloc.1 + IL_002d: stloc.s V_5 + IL_002f: ldloc.s V_5 + IL_0031: isinst EqualsOnUnions01/U/B + IL_0036: brfalse.s IL_003b + + IL_0038: ldc.i4.1 + IL_0039: br.s IL_003c + + IL_003b: ldc.i4.0 + IL_003c: stloc.s V_4 + IL_003e: ldloc.2 + IL_003f: ldloc.s V_4 + IL_0041: bne.un.s IL_0045 + + IL_0043: br.s IL_0047 - IL_0030: ldc.i4.0 - IL_0031: stloc.s V_4 - IL_0033: ldloc.2 - IL_0034: ldloc.s V_4 - IL_0036: bne.un.s IL_0066 + IL_0045: br.s IL_0079 .line 100001,100001 : 0,0 '' - IL_0038: ldarg.0 - IL_0039: isinst EqualsOnUnions01/U/B - IL_003e: brfalse.s IL_0064 + IL_0047: ldarg.0 + IL_0048: isinst EqualsOnUnions01/U/B + IL_004d: brfalse.s IL_0051 + + IL_004f: br.s IL_0053 + + IL_0051: br.s IL_0077 .line 100001,100001 : 0,0 '' - IL_0040: ldarg.0 - IL_0041: castclass EqualsOnUnions01/U/B - IL_0046: stloc.s V_6 - IL_0048: ldloc.1 - IL_0049: castclass EqualsOnUnions01/U/B - IL_004e: stloc.s V_7 - IL_0050: ldarg.2 - IL_0051: stloc.s V_8 - IL_0053: ldloc.s V_6 - IL_0055: ldfld int32 EqualsOnUnions01/U/B::item - IL_005a: ldloc.s V_7 - IL_005c: ldfld int32 EqualsOnUnions01/U/B::item - IL_0061: ceq - IL_0063: ret + IL_0053: ldarg.0 + IL_0054: castclass EqualsOnUnions01/U/B + IL_0059: stloc.s V_6 + IL_005b: ldloc.1 + IL_005c: castclass EqualsOnUnions01/U/B + IL_0061: stloc.s V_7 + IL_0063: ldarg.2 + IL_0064: stloc.s V_8 + IL_0066: ldloc.s V_6 + IL_0068: ldfld int32 EqualsOnUnions01/U/B::item + IL_006d: ldloc.s V_7 + IL_006f: ldfld int32 EqualsOnUnions01/U/B::item + IL_0074: ceq + IL_0076: ret .line 100001,100001 : 0,0 '' - IL_0064: ldc.i4.1 - IL_0065: ret + IL_0077: ldc.i4.1 + IL_0078: ret .line 100001,100001 : 0,0 '' - IL_0066: ldc.i4.0 - IL_0067: ret + IL_0079: ldc.i4.0 + IL_007a: ret .line 100001,100001 : 0,0 '' - IL_0068: ldc.i4.0 - IL_0069: ret + IL_007b: ldc.i4.0 + IL_007c: ret .line 100001,100001 : 0,0 '' - IL_006a: ldarg.1 - IL_006b: ldnull - IL_006c: cgt.un - IL_006e: ldc.i4.0 - IL_006f: ceq - IL_0071: ret + IL_007d: ldarg.1 + IL_007e: ldnull + IL_007f: cgt.un + IL_0081: ldc.i4.0 + IL_0082: ceq + IL_0084: ret } // end of method U::Equals .method public hidebysig virtual final instance bool Equals(class EqualsOnUnions01/U obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 101 (0x65) + // Code size 120 (0x78) .maxstack 4 .locals init ([0] int32 V_0, [1] class EqualsOnUnions01/U V_1, @@ -785,86 +857,102 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_005d + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000d + + IL_0008: br IL_0070 .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: ldnull - IL_0008: cgt.un - IL_000a: brfalse.s IL_005b + IL_000d: ldarg.1 + IL_000e: ldnull + IL_000f: cgt.un + IL_0011: brfalse.s IL_0015 + + IL_0013: br.s IL_0017 + + IL_0015: br.s IL_006e .line 100001,100001 : 0,0 '' - IL_000c: ldarg.0 - IL_000d: stloc.1 - IL_000e: ldloc.1 - IL_000f: isinst EqualsOnUnions01/U/B - IL_0014: brfalse.s IL_0019 + IL_0017: ldarg.0 + IL_0018: stloc.1 + IL_0019: ldloc.1 + IL_001a: isinst EqualsOnUnions01/U/B + IL_001f: brfalse.s IL_0024 + + IL_0021: ldc.i4.1 + IL_0022: br.s IL_0025 + + IL_0024: ldc.i4.0 + IL_0025: stloc.0 + IL_0026: ldarg.1 + IL_0027: stloc.3 + IL_0028: ldloc.3 + IL_0029: isinst EqualsOnUnions01/U/B + IL_002e: brfalse.s IL_0033 - IL_0016: ldc.i4.1 - IL_0017: br.s IL_001a + IL_0030: ldc.i4.1 + IL_0031: br.s IL_0034 - IL_0019: ldc.i4.0 - IL_001a: stloc.0 - IL_001b: ldarg.1 - IL_001c: stloc.3 - IL_001d: ldloc.3 - IL_001e: isinst EqualsOnUnions01/U/B - IL_0023: brfalse.s IL_0028 + IL_0033: ldc.i4.0 + IL_0034: stloc.2 + IL_0035: ldloc.0 + IL_0036: ldloc.2 + IL_0037: bne.un.s IL_003b - IL_0025: ldc.i4.1 - IL_0026: br.s IL_0029 + IL_0039: br.s IL_003d - IL_0028: ldc.i4.0 - IL_0029: stloc.2 - IL_002a: ldloc.0 - IL_002b: ldloc.2 - IL_002c: bne.un.s IL_0059 + IL_003b: br.s IL_006c .line 100001,100001 : 0,0 '' - IL_002e: ldarg.0 - IL_002f: isinst EqualsOnUnions01/U/B - IL_0034: brfalse.s IL_0057 + IL_003d: ldarg.0 + IL_003e: isinst EqualsOnUnions01/U/B + IL_0043: brfalse.s IL_0047 + + IL_0045: br.s IL_0049 + + IL_0047: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0036: ldarg.0 - IL_0037: castclass EqualsOnUnions01/U/B - IL_003c: stloc.s V_4 - IL_003e: ldarg.1 - IL_003f: castclass EqualsOnUnions01/U/B - IL_0044: stloc.s V_5 - IL_0046: ldloc.s V_4 - IL_0048: ldfld int32 EqualsOnUnions01/U/B::item - IL_004d: ldloc.s V_5 - IL_004f: ldfld int32 EqualsOnUnions01/U/B::item - IL_0054: ceq - IL_0056: ret + IL_0049: ldarg.0 + IL_004a: castclass EqualsOnUnions01/U/B + IL_004f: stloc.s V_4 + IL_0051: ldarg.1 + IL_0052: castclass EqualsOnUnions01/U/B + IL_0057: stloc.s V_5 + IL_0059: ldloc.s V_4 + IL_005b: ldfld int32 EqualsOnUnions01/U/B::item + IL_0060: ldloc.s V_5 + IL_0062: ldfld int32 EqualsOnUnions01/U/B::item + IL_0067: ceq + IL_0069: ret .line 100001,100001 : 0,0 '' - IL_0057: ldc.i4.1 - IL_0058: ret + IL_006a: ldc.i4.1 + IL_006b: ret .line 100001,100001 : 0,0 '' - IL_0059: ldc.i4.0 - IL_005a: ret + IL_006c: ldc.i4.0 + IL_006d: ret .line 100001,100001 : 0,0 '' - IL_005b: ldc.i4.0 - IL_005c: ret + IL_006e: ldc.i4.0 + IL_006f: ret .line 100001,100001 : 0,0 '' - IL_005d: ldarg.1 - IL_005e: ldnull - IL_005f: cgt.un - IL_0061: ldc.i4.0 - IL_0062: ceq - IL_0064: ret + IL_0070: ldarg.1 + IL_0071: ldnull + IL_0072: cgt.un + IL_0074: ldc.i4.0 + IL_0075: ceq + IL_0077: 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 20 (0x14) + // Code size 24 (0x18) .maxstack 4 .locals init ([0] class EqualsOnUnions01/U V_0) .line 6,6 : 6,7 '' @@ -872,17 +960,21 @@ IL_0001: isinst EqualsOnUnions01/U IL_0006: stloc.0 IL_0007: ldloc.0 - IL_0008: brfalse.s IL_0012 + IL_0008: brfalse.s IL_000c + + IL_000a: br.s IL_000e + + IL_000c: br.s IL_0016 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.0 - IL_000b: ldloc.0 - IL_000c: callvirt instance bool EqualsOnUnions01/U::Equals(class EqualsOnUnions01/U) - IL_0011: ret + IL_000e: ldarg.0 + IL_000f: ldloc.0 + IL_0010: callvirt instance bool EqualsOnUnions01/U::Equals(class EqualsOnUnions01/U) + IL_0015: ret .line 100001,100001 : 0,0 '' - IL_0012: ldc.i4.0 - IL_0013: ret + IL_0016: ldc.i4.0 + IL_0017: ret } // end of method U::Equals .property instance int32 Tag() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop01.il.bsl index 1cbb7d93ca5..0f5a2183244 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly ForLoop01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.ForLoop01 { - // Offset: 0x00000000 Length: 0x0000013B + // Offset: 0x00000000 Length: 0x0000013F } .mresource public FSharpOptimizationData.ForLoop01 { - // Offset: 0x00000140 Length: 0x00000050 + // Offset: 0x00000148 Length: 0x00000050 } .module ForLoop01.exe -// MVID: {60B68B7F-1795-791C-A745-03837F8BB660} +// MVID: {59B19213-1795-791C-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05340000 +// Image base: 0x002E0000 // =============== 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 : 1,24 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\ForLoop01.fs' + .line 5,5 : 1,24 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\ForLoop01.fs' IL_0000: ldc.i4.1 IL_0001: ldc.i4.1 IL_0002: ldc.i4.3 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop02.il.bsl index d40f24fed45..f54c8480177 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.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly ForLoop02 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.ForLoop02 { - // Offset: 0x00000000 Length: 0x0000013B + // Offset: 0x00000000 Length: 0x0000013F } .mresource public FSharpOptimizationData.ForLoop02 { - // Offset: 0x00000140 Length: 0x00000050 + // Offset: 0x00000148 Length: 0x00000050 } .module ForLoop02.exe -// MVID: {60B68B7F-1736-791C-A745-03837F8BB660} +// MVID: {59B19213-1736-791C-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05980000 +// Image base: 0x03030000 // =============== 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 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\ForLoop02.fs' + .line 5,5 : 1,19 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\ForLoop02.fs' IL_0000: ldc.i4.1 IL_0001: stloc.0 IL_0002: br.s IL_0022 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop03.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop03.il.bsl index 61f328b715c..e6fda0879b7 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.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly ForLoop03 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.ForLoop03 { - // Offset: 0x00000000 Length: 0x000001F6 + // Offset: 0x00000000 Length: 0x000001FA } .mresource public FSharpOptimizationData.ForLoop03 { // Offset: 0x00000200 Length: 0x0000007B } .module ForLoop03.exe -// MVID: {60B68B7F-1757-791C-A745-03837F8BB660} +// MVID: {59B19213-1757-791C-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07280000 +// Image base: 0x00680000 // =============== CLASS MEMBERS DECLARATION =================== @@ -73,7 +73,7 @@ [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 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\ForLoop03.fs' + .line 10,10 : 4,21 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\ForLoop03.fs' IL_0000: ldc.i4.0 IL_0001: stloc.0 .line 11,11 : 4,28 '' diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/GeneralizationOnUnions01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/GeneralizationOnUnions01.il.bsl index 70bbfca2a6f..eca246c526b 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.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly GeneralizationOnUnions01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.GeneralizationOnUnions01 { - // Offset: 0x00000000 Length: 0x00000689 + // Offset: 0x00000000 Length: 0x00000699 } .mresource public FSharpOptimizationData.GeneralizationOnUnions01 { - // Offset: 0x00000690 Length: 0x000001F4 + // Offset: 0x000006A0 Length: 0x000001F4 } .module GeneralizationOnUnions01.exe -// MVID: {60B68B7F-4CA2-8CD1-A745-03837F8BB660} +// MVID: {59B19213-4CA2-8CD1-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06C00000 +// Image base: 0x014C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -145,42 +145,54 @@ instance int32 CompareTo(class GeneralizationOnUnions01/Weirdo obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 26 (0x1a) + // Code size 38 (0x26) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\GeneralizationOnUnions01.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\GeneralizationOnUnions01.fs' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0010 + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_0018 .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: ldnull - IL_0008: cgt.un - IL_000a: brfalse.s IL_000e + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: brfalse.s IL_0012 + + IL_0010: br.s IL_0014 + + IL_0012: br.s IL_0016 .line 100001,100001 : 0,0 '' - IL_000c: ldc.i4.0 - IL_000d: ret + IL_0014: ldc.i4.0 + IL_0015: ret .line 100001,100001 : 0,0 '' - IL_000e: ldc.i4.1 - IL_000f: ret + IL_0016: ldc.i4.1 + IL_0017: ret .line 100001,100001 : 0,0 '' - IL_0010: ldarg.1 - IL_0011: ldnull - IL_0012: cgt.un - IL_0014: brfalse.s IL_0018 + IL_0018: ldarg.1 + IL_0019: ldnull + IL_001a: cgt.un + IL_001c: brfalse.s IL_0020 + + IL_001e: br.s IL_0022 + + IL_0020: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0016: ldc.i4.m1 - IL_0017: ret + IL_0022: ldc.i4.m1 + IL_0023: ret .line 100001,100001 : 0,0 '' - IL_0018: ldc.i4.0 - IL_0019: ret + IL_0024: ldc.i4.0 + IL_0025: ret } // end of method Weirdo::CompareTo .method public hidebysig virtual final @@ -202,7 +214,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 43 (0x2b) + // Code size 55 (0x37) .maxstack 3 .locals init ([0] class GeneralizationOnUnions01/Weirdo V_0) .line 4,4 : 6,12 '' @@ -212,63 +224,79 @@ IL_0007: ldarg.0 IL_0008: ldnull IL_0009: cgt.un - IL_000b: brfalse.s IL_001c + IL_000b: brfalse.s IL_000f + + IL_000d: br.s IL_0011 + + IL_000f: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_000d: ldarg.1 - IL_000e: unbox.any GeneralizationOnUnions01/Weirdo - IL_0013: ldnull - IL_0014: cgt.un - IL_0016: brfalse.s IL_001a + IL_0011: ldarg.1 + IL_0012: unbox.any GeneralizationOnUnions01/Weirdo + IL_0017: ldnull + IL_0018: cgt.un + IL_001a: brfalse.s IL_001e + + IL_001c: br.s IL_0020 + + IL_001e: br.s IL_0022 .line 100001,100001 : 0,0 '' - IL_0018: ldc.i4.0 - IL_0019: ret + IL_0020: ldc.i4.0 + IL_0021: ret .line 100001,100001 : 0,0 '' - IL_001a: ldc.i4.1 - IL_001b: ret + IL_0022: ldc.i4.1 + IL_0023: ret .line 100001,100001 : 0,0 '' - IL_001c: ldarg.1 - IL_001d: unbox.any GeneralizationOnUnions01/Weirdo - IL_0022: ldnull - IL_0023: cgt.un - IL_0025: brfalse.s IL_0029 + IL_0024: ldarg.1 + IL_0025: unbox.any GeneralizationOnUnions01/Weirdo + IL_002a: ldnull + IL_002b: cgt.un + IL_002d: brfalse.s IL_0031 + + IL_002f: br.s IL_0033 + + IL_0031: br.s IL_0035 .line 100001,100001 : 0,0 '' - IL_0027: ldc.i4.m1 - IL_0028: ret + IL_0033: ldc.i4.m1 + IL_0034: ret .line 100001,100001 : 0,0 '' - IL_0029: ldc.i4.0 - IL_002a: ret + IL_0035: ldc.i4.0 + IL_0036: ret } // end of method Weirdo::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 14 (0xe) + // Code size 18 (0x12) .maxstack 3 .locals init ([0] int32 V_0) .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_000c + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_0010 .line 100001,100001 : 0,0 '' - IL_0006: ldc.i4.0 - IL_0007: stloc.0 - IL_0008: ldarg.0 - IL_0009: pop IL_000a: ldc.i4.0 - IL_000b: ret + IL_000b: stloc.0 + IL_000c: ldarg.0 + IL_000d: pop + IL_000e: ldc.i4.0 + IL_000f: ret .line 100001,100001 : 0,0 '' - IL_000c: ldc.i4.0 - IL_000d: ret + IL_0010: ldc.i4.0 + IL_0011: ret } // end of method Weirdo::GetHashCode .method public hidebysig virtual final @@ -289,7 +317,7 @@ class [mscorlib]System.Collections.IEqualityComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 30 (0x1e) + // Code size 38 (0x26) .maxstack 4 .locals init ([0] class GeneralizationOnUnions01/Weirdo V_0, [1] class GeneralizationOnUnions01/Weirdo V_1) @@ -297,66 +325,78 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0016 + IL_0004: brfalse.s IL_0008 - .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: isinst GeneralizationOnUnions01/Weirdo - IL_000c: stloc.0 - IL_000d: ldloc.0 - IL_000e: brfalse.s IL_0014 + IL_0006: br.s IL_000a + + IL_0008: br.s IL_001e .line 100001,100001 : 0,0 '' - IL_0010: ldloc.0 - IL_0011: stloc.1 - IL_0012: ldc.i4.1 - IL_0013: ret + IL_000a: ldarg.1 + IL_000b: isinst GeneralizationOnUnions01/Weirdo + IL_0010: stloc.0 + IL_0011: ldloc.0 + IL_0012: brfalse.s IL_0016 + + IL_0014: br.s IL_0018 + + IL_0016: br.s IL_001c .line 100001,100001 : 0,0 '' - IL_0014: ldc.i4.0 - IL_0015: ret + IL_0018: ldloc.0 + IL_0019: stloc.1 + IL_001a: ldc.i4.1 + IL_001b: ret .line 100001,100001 : 0,0 '' - IL_0016: ldarg.1 - IL_0017: ldnull - IL_0018: cgt.un - IL_001a: ldc.i4.0 - IL_001b: ceq + IL_001c: ldc.i4.0 IL_001d: ret + + .line 100001,100001 : 0,0 '' + IL_001e: ldarg.1 + IL_001f: ldnull + IL_0020: cgt.un + IL_0022: ldc.i4.0 + IL_0023: ceq + IL_0025: ret } // end of method Weirdo::Equals .method public hidebysig virtual final instance bool Equals(class GeneralizationOnUnions01/Weirdo obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 19 (0x13) + // Code size 23 (0x17) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_000b + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_000f .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: ldnull - IL_0008: cgt.un - IL_000a: ret + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: ret .line 100001,100001 : 0,0 '' - IL_000b: ldarg.1 - IL_000c: ldnull - IL_000d: cgt.un - IL_000f: ldc.i4.0 - IL_0010: ceq - IL_0012: ret + IL_000f: ldarg.1 + IL_0010: ldnull + IL_0011: cgt.un + IL_0013: ldc.i4.0 + IL_0014: ceq + IL_0016: ret } // end of method Weirdo::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 20 (0x14) + // Code size 24 (0x18) .maxstack 4 .locals init ([0] class GeneralizationOnUnions01/Weirdo V_0) .line 4,4 : 6,12 '' @@ -364,17 +404,21 @@ IL_0001: isinst GeneralizationOnUnions01/Weirdo IL_0006: stloc.0 IL_0007: ldloc.0 - IL_0008: brfalse.s IL_0012 + IL_0008: brfalse.s IL_000c + + IL_000a: br.s IL_000e + + IL_000c: br.s IL_0016 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.0 - IL_000b: ldloc.0 - IL_000c: callvirt instance bool GeneralizationOnUnions01/Weirdo::Equals(class GeneralizationOnUnions01/Weirdo) - IL_0011: ret + IL_000e: ldarg.0 + IL_000f: ldloc.0 + IL_0010: callvirt instance bool GeneralizationOnUnions01/Weirdo::Equals(class GeneralizationOnUnions01/Weirdo) + IL_0015: ret .line 100001,100001 : 0,0 '' - IL_0012: ldc.i4.0 - IL_0013: ret + IL_0016: ldc.i4.0 + IL_0017: ret } // end of method Weirdo::Equals .property instance int32 Tag() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/GenericTypeStaticField01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/GenericTypeStaticField01.il.bsl index 928e00e3cfd..8e3f9aced4a 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/GenericTypeStaticField01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/GenericTypeStaticField01.il.bsl @@ -36,13 +36,13 @@ // Offset: 0x00000608 Length: 0x000001E1 } .module GenericTypeStaticField01.exe -// MVID: {60B68B7F-1E75-7E6B-A745-03837F8BB660} +// MVID: {5FCFFD09-1E75-7E6B-A745-038309FDCF5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00F10000 +// Image base: 0x00EB0000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/IfThenElse01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/IfThenElse01.il.bsl index 3d0ba7cb01f..e8edb3c0b9a 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/IfThenElse01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/IfThenElse01.il.bsl @@ -36,13 +36,13 @@ // Offset: 0x00000208 Length: 0x00000092 } .module IfThenElse01.dll -// MVID: {60B68B7F-2D6C-0B5D-A745-03837F8BB660} +// MVID: {5FCFFD09-2D6C-0B5D-A745-038309FDCF5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06DD0000 +// Image base: 0x067C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -128,7 +128,7 @@ !a z, !a w) cil managed { - // Code size 16 (0x10) + // Code size 20 (0x14) .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}' @@ -140,13 +140,17 @@ IL_0008: ldarg.2 IL_0009: ble.s IL_000d + IL_000b: br.s IL_000f + + IL_000d: br.s IL_0011 + .line 5,5 : 64,65 '' - IL_000b: ldarg.3 - IL_000c: ret + IL_000f: ldarg.3 + IL_0010: ret .line 5,5 : 71,72 '' - IL_000d: ldarg.s w - IL_000f: ret + IL_0011: ldarg.s w + IL_0013: ret } // end of method f5@5T::Invoke } // end of class f5@5T diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/LetIfThenElse01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/LetIfThenElse01.il.bsl index 4fd045b7168..8c6ee74160d 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/LetIfThenElse01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/LetIfThenElse01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly LetIfThenElse01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.LetIfThenElse01 { - // Offset: 0x00000000 Length: 0x000001D9 + // Offset: 0x00000000 Length: 0x000001E5 } .mresource public FSharpOptimizationData.LetIfThenElse01 { - // Offset: 0x000001E0 Length: 0x00000076 + // Offset: 0x000001F0 Length: 0x00000076 } .module LetIfThenElse01.exe -// MVID: {60B68B7F-BE5A-D8FD-A745-03837F8BB660} +// MVID: {59B19213-BE5A-D8FD-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06AF0000 +// Image base: 0x02940000 // =============== CLASS MEMBERS DECLARATION =================== @@ -54,7 +54,7 @@ .method public static class [mscorlib]System.Tuple`4 F(!!a y) cil managed { - // Code size 124 (0x7c) + // Code size 140 (0x8c) .maxstack 6 .locals init ([0] int32 x1, [1] valuetype [mscorlib]System.DateTime V_1, @@ -65,96 +65,112 @@ [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 : 12,51 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\LetIfThenElse01.fs' + .line 6,6 : 12,51 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\LetIfThenElse01.fs' IL_0000: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() IL_0005: stloc.1 IL_0006: ldloca.s V_1 IL_0008: call instance int32 [mscorlib]System.DateTime::get_Year() IL_000d: ldc.i4 0x7d0 - IL_0012: ble.s IL_0018 + IL_0012: ble.s IL_0016 + + IL_0014: br.s IL_0018 + + IL_0016: br.s IL_001c .line 6,6 : 52,53 '' - IL_0014: ldc.i4.1 + IL_0018: ldc.i4.1 .line 100001,100001 : 0,0 '' - IL_0015: nop - IL_0016: br.s IL_001a + IL_0019: nop + IL_001a: br.s IL_001e .line 6,6 : 59,60 '' - IL_0018: ldc.i4.2 + IL_001c: ldc.i4.2 .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_001d: nop .line 100001,100001 : 0,0 '' - IL_001a: stloc.0 + IL_001e: stloc.0 .line 7,7 : 12,51 '' - IL_001b: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() - IL_0020: stloc.3 - IL_0021: ldloca.s V_3 - IL_0023: call instance int32 [mscorlib]System.DateTime::get_Year() - IL_0028: ldc.i4 0x7d0 - IL_002d: ble.s IL_0033 + IL_001f: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() + IL_0024: stloc.3 + IL_0025: ldloca.s V_3 + IL_0027: call instance int32 [mscorlib]System.DateTime::get_Year() + IL_002c: ldc.i4 0x7d0 + IL_0031: ble.s IL_0035 + + IL_0033: br.s IL_0037 + + IL_0035: br.s IL_003b .line 7,7 : 52,53 '' - IL_002f: ldc.i4.1 + IL_0037: ldc.i4.1 .line 100001,100001 : 0,0 '' - IL_0030: nop - IL_0031: br.s IL_0035 + IL_0038: nop + IL_0039: br.s IL_003d .line 7,7 : 59,60 '' - IL_0033: ldc.i4.2 + IL_003b: ldc.i4.2 .line 100001,100001 : 0,0 '' - IL_0034: nop + IL_003c: nop .line 100001,100001 : 0,0 '' - IL_0035: stloc.2 + IL_003d: stloc.2 .line 8,8 : 12,51 '' - IL_0036: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() - IL_003b: stloc.s V_5 - IL_003d: ldloca.s V_5 - IL_003f: call instance int32 [mscorlib]System.DateTime::get_Year() - IL_0044: ldc.i4 0x7d0 - IL_0049: bge.s IL_004f + IL_003e: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() + IL_0043: stloc.s V_5 + IL_0045: ldloca.s V_5 + IL_0047: call instance int32 [mscorlib]System.DateTime::get_Year() + IL_004c: ldc.i4 0x7d0 + IL_0051: bge.s IL_0055 + + IL_0053: br.s IL_0057 + + IL_0055: br.s IL_005b .line 8,8 : 52,53 '' - IL_004b: ldc.i4.1 + IL_0057: ldc.i4.1 .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: br.s IL_0051 + IL_0058: nop + IL_0059: br.s IL_005d .line 8,8 : 59,60 '' - IL_004f: ldc.i4.2 + IL_005b: ldc.i4.2 .line 100001,100001 : 0,0 '' - IL_0050: nop + IL_005c: nop .line 100001,100001 : 0,0 '' - IL_0051: stloc.s x2 + IL_005d: stloc.s x2 .line 9,9 : 12,51 '' - IL_0053: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() - IL_0058: stloc.s V_7 - IL_005a: ldloca.s V_7 - IL_005c: call instance int32 [mscorlib]System.DateTime::get_Year() - IL_0061: ldc.i4 0x7d0 - IL_0066: bge.s IL_006c + IL_005f: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() + IL_0064: stloc.s V_7 + IL_0066: ldloca.s V_7 + IL_0068: call instance int32 [mscorlib]System.DateTime::get_Year() + IL_006d: ldc.i4 0x7d0 + IL_0072: bge.s IL_0076 + + IL_0074: br.s IL_0078 + + IL_0076: br.s IL_007c .line 9,9 : 52,53 '' - IL_0068: ldc.i4.1 + IL_0078: ldc.i4.1 .line 100001,100001 : 0,0 '' - IL_0069: nop - IL_006a: br.s IL_006e + IL_0079: nop + IL_007a: br.s IL_007e .line 9,9 : 59,60 '' - IL_006c: ldc.i4.2 + IL_007c: ldc.i4.2 .line 100001,100001 : 0,0 '' - IL_006d: nop + IL_007d: nop .line 100001,100001 : 0,0 '' - IL_006e: stloc.s y2 + IL_007e: stloc.s y2 .line 10,10 : 3,14 '' - IL_0070: ldloc.0 - IL_0071: ldloc.2 - IL_0072: ldloc.s x2 - IL_0074: ldloc.s y2 - IL_0076: newobj instance void class [mscorlib]System.Tuple`4::.ctor(!0, + IL_0080: ldloc.0 + IL_0081: ldloc.2 + IL_0082: ldloc.s x2 + IL_0084: ldloc.s y2 + IL_0086: newobj instance void class [mscorlib]System.Tuple`4::.ctor(!0, !1, !2, !3) - IL_007b: ret + IL_008b: ret } // end of method LetIfThenElse01::F } // end of class LetIfThenElse01 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Lock01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Lock01.il.bsl index 2e01e08825f..37d6c43ab3d 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Lock01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Lock01.il.bsl @@ -41,13 +41,13 @@ // Offset: 0x00000188 Length: 0x00000064 } .module Lock01.exe -// MVID: {60B68B7F-2BCA-B308-A745-03837F8BB660} +// MVID: {5FCFFD09-2BCA-B308-A745-038309FDCF5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06BF0000 +// Image base: 0x06B00000 // =============== CLASS MEMBERS DECLARATION =================== @@ -123,7 +123,7 @@ .method public static void main@() cil managed { .entrypoint - // Code size 64 (0x40) + // Code size 68 (0x44) .maxstack 4 .locals init ([0] object o, [1] object V_1, @@ -152,29 +152,33 @@ IL_0023: ldnull IL_0024: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) IL_0029: stloc.s V_4 - IL_002b: leave.s IL_003c + IL_002b: leave.s IL_0040 } // end .try finally { IL_002d: ldloc.3 - IL_002e: brfalse.s IL_0039 + IL_002e: brfalse.s IL_0032 + + IL_0030: br.s IL_0034 + + IL_0032: br.s IL_003d .line 100001,100001 : 0,0 '' - IL_0030: ldloc.1 - IL_0031: call void [netstandard]System.Threading.Monitor::Exit(object) - IL_0036: ldnull - IL_0037: pop - IL_0038: endfinally + IL_0034: ldloc.1 + IL_0035: call void [netstandard]System.Threading.Monitor::Exit(object) + IL_003a: ldnull + IL_003b: pop + IL_003c: endfinally .line 100001,100001 : 0,0 '' - IL_0039: ldnull - IL_003a: pop - IL_003b: endfinally + IL_003d: ldnull + IL_003e: pop + IL_003f: endfinally .line 100001,100001 : 0,0 '' } // end handler - IL_003c: ldloc.s V_4 - IL_003e: pop - IL_003f: ret + IL_0040: ldloc.s V_4 + IL_0042: pop + IL_0043: ret } // end of method $Lock01::main@ } // end of class ''.$Lock01 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Marshal.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Marshal.il.bsl index a72c99aedd5..a4ee5c51231 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Marshal.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Marshal.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly Marshal { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Marshal { - // Offset: 0x00000000 Length: 0x00000507 + // Offset: 0x00000000 Length: 0x0000050B } .mresource public FSharpOptimizationData.Marshal { // Offset: 0x00000510 Length: 0x0000004E } .module Marshal.exe -// MVID: {60B68B7F-7500-369C-A745-03837F8BB660} +// MVID: {59B19213-7500-369C-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x068F0000 +// Image base: 0x01080000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/MethodImplNoInline.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/MethodImplNoInline.il.bsl index ebeebd6525a..aae557b86ca 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/MethodImplNoInline.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/MethodImplNoInline.il.bsl @@ -30,20 +30,20 @@ } .mresource public FSharpSignatureData.MethodImplNoInline { - // Offset: 0x00000000 Length: 0x000002FB + // Offset: 0x00000000 Length: 0x000002F9 } .mresource public FSharpOptimizationData.MethodImplNoInline { // Offset: 0x00000300 Length: 0x000000F5 } .module MethodImplNoInline.exe -// MVID: {60B68B7F-4480-09E2-A745-03837F8BB660} +// MVID: {5F1F9A50-4480-09E2-A745-0383509A1F5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06DC0000 +// Image base: 0x054F0000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/MethodImplNoInline02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/MethodImplNoInline02.il.bsl index 607b8bf6f14..6f291d69311 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/MethodImplNoInline02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/MethodImplNoInline02.il.bsl @@ -30,20 +30,20 @@ } .mresource public FSharpSignatureData.MethodImplNoInline02 { - // Offset: 0x00000000 Length: 0x00000301 + // Offset: 0x00000000 Length: 0x000002FF } .mresource public FSharpOptimizationData.MethodImplNoInline02 { // Offset: 0x00000308 Length: 0x000000F9 } .module MethodImplNoInline02.exe -// MVID: {60B68B7F-084F-1A8E-A745-03837F8BB660} +// MVID: {5F1F9A50-084F-1A8E-A745-0383509A1F5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05140000 +// Image base: 0x04E70000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ModuleWithExpression01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ModuleWithExpression01.il.bsl index 4dbdb7783fe..479fa38706d 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ModuleWithExpression01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ModuleWithExpression01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly ModuleWithExpression01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.ModuleWithExpression01 { - // Offset: 0x00000000 Length: 0x0000020A + // Offset: 0x00000000 Length: 0x0000020E } .mresource public FSharpOptimizationData.ModuleWithExpression01 { - // Offset: 0x00000210 Length: 0x000000A6 + // Offset: 0x00000218 Length: 0x000000A6 } .module ModuleWithExpression01.exe -// MVID: {60B68B7F-CD1E-A8B4-A745-03837F8BB660} +// MVID: {59B19213-CD1E-A8B4-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07550000 +// Image base: 0x030A0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -88,7 +88,7 @@ .maxstack 3 .locals init ([0] int32 x) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 8,8 : 5,20 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\ModuleWithExpression01.fs' + .line 8,8 : 5,20 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\ModuleWithExpression01.fs' IL_0000: ldstr "hello" IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/NoBoxingOnDispose01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/NoBoxingOnDispose01.il.bsl index 1c571a25e0b..2e111b971f8 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.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly NoBoxingOnDispose01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.NoBoxingOnDispose01 { - // Offset: 0x00000000 Length: 0x00000216 + // Offset: 0x00000000 Length: 0x0000021A } .mresource public FSharpOptimizationData.NoBoxingOnDispose01 { // Offset: 0x00000220 Length: 0x0000007F } .module NoBoxingOnDispose01.exe -// MVID: {60B68B7F-4EA9-C934-A745-03837F8BB660} +// MVID: {59B19213-4EA9-C934-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06C40000 +// Image base: 0x00590000 // =============== CLASS MEMBERS DECLARATION =================== @@ -60,7 +60,7 @@ [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 : 3,16 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\NoBoxingOnDispose01.fs' + .line 6,6 : 3,16 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\NoBoxingOnDispose01.fs' IL_0000: ldarg.0 IL_0001: stloc.0 .line 6,6 : 3,16 '' diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/NonEscapingArguments02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/NonEscapingArguments02.il.bsl index a20d0205daa..5209960dc5f 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/NonEscapingArguments02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/NonEscapingArguments02.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly NonEscapingArguments02 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.NonEscapingArguments02 { - // Offset: 0x00000000 Length: 0x00000355 + // Offset: 0x00000000 Length: 0x00000359 } .mresource public FSharpOptimizationData.NonEscapingArguments02 { - // Offset: 0x00000360 Length: 0x0000019E + // Offset: 0x00000360 Length: 0x000001A4 } .module NonEscapingArguments02.dll -// MVID: {60B68B7F-BB56-6582-A745-03837F8BB660} +// MVID: {59B19213-BB56-6582-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06B40000 +// Image base: 0x01730000 // =============== CLASS MEMBERS DECLARATION =================== @@ -62,7 +62,7 @@ // Code size 21 (0x15) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\NonEscapingArguments02.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\NonEscapingArguments02.fs' IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/PreserveSig.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/PreserveSig.il.bsl index bbd2fc4fee7..5a8b4ef3b76 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/PreserveSig.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/PreserveSig.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly PreserveSig { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.PreserveSig { - // Offset: 0x00000000 Length: 0x000002F1 + // Offset: 0x00000000 Length: 0x000002F5 } .mresource public FSharpOptimizationData.PreserveSig { - // Offset: 0x000002F8 Length: 0x0000004A + // Offset: 0x00000300 Length: 0x0000004A } .module PreserveSig.dll -// MVID: {60B68B7F-E8CC-64FE-A745-03837F8BB660} +// MVID: {59B19213-E8CC-64FE-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05120000 +// Image base: 0x01660000 // =============== CLASS MEMBERS DECLARATION =================== 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 cbcdbfefab9..0249c7e112a 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 @@ -36,13 +36,13 @@ // Offset: 0x000001B0 Length: 0x00000072 } .module Seq_for_all01.exe -// MVID: {60B68B7F-D30D-BA80-A745-03837F8BB660} +// MVID: {5FCFFD09-D30D-BA80-A745-038309FDCF5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05500000 +// Image base: 0x00F60000 // =============== CLASS MEMBERS DECLARATION =================== @@ -70,7 +70,7 @@ .method public strict virtual instance bool Invoke(int32 s) cil managed { - // Code size 14 (0xe) + // Code size 18 (0x12) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' .line 5,5 : 31,47 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\Seq_for_all01.fs' @@ -80,19 +80,23 @@ .line 100001,100001 : 0,0 '' IL_0004: nop .line 100001,100001 : 0,0 '' - IL_0005: brfalse.s IL_000b + IL_0005: brfalse.s IL_0009 + + IL_0007: br.s IL_000b + + IL_0009: br.s IL_000f .line 5,5 : 48,50 '' - IL_0007: nop + IL_000b: nop .line 100001,100001 : 0,0 '' - IL_0008: nop - IL_0009: br.s IL_000c + IL_000c: nop + IL_000d: br.s IL_0010 .line 100001,100001 : 0,0 '' - IL_000b: nop + IL_000f: nop .line 6,6 : 31,35 '' - IL_000c: ldc.i4.1 - IL_000d: ret + IL_0010: ldc.i4.1 + IL_0011: ret } // end of method q@4::Invoke .method private specialname rtspecialname static diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs01.il.bsl index 1d930ea81ac..b3476b282f7 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly Structs01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Structs01 { - // Offset: 0x00000000 Length: 0x0000073D + // Offset: 0x00000000 Length: 0x0000074D } .mresource public FSharpOptimizationData.Structs01 { - // Offset: 0x00000748 Length: 0x00000231 + // Offset: 0x00000758 Length: 0x00000231 } .module Structs01.exe -// MVID: {60B68B7F-701F-5E27-A745-03837F8BB660} +// MVID: {59B19213-701F-5E27-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07280000 +// Image base: 0x01470000 // =============== CLASS MEMBERS DECLARATION =================== @@ -65,14 +65,14 @@ instance int32 CompareTo(valuetype Experiment.Test/Test obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 34 (0x22) + // Code size 38 (0x26) .maxstack 4 .locals init ([0] valuetype Experiment.Test/Test& 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,10 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\Structs01.fs' + .line 7,7 : 6,10 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\Structs01.fs' IL_0000: ldarga.s obj IL_0002: stloc.0 IL_0003: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() @@ -87,15 +87,19 @@ IL_0018: ldloc.3 IL_0019: bge.s IL_001d + IL_001b: br.s IL_001f + + IL_001d: br.s IL_0021 + .line 100001,100001 : 0,0 '' - IL_001b: ldc.i4.m1 - IL_001c: ret + IL_001f: ldc.i4.m1 + IL_0020: ret .line 100001,100001 : 0,0 '' - IL_001d: ldloc.2 - IL_001e: ldloc.3 - IL_001f: cgt - IL_0021: ret + IL_0021: ldloc.2 + IL_0022: ldloc.3 + IL_0023: cgt + IL_0025: ret } // end of method Test::CompareTo .method public hidebysig virtual final @@ -117,7 +121,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 40 (0x28) + // Code size 44 (0x2c) .maxstack 4 .locals init ([0] valuetype Experiment.Test/Test V_0, [1] valuetype Experiment.Test/Test& V_1, @@ -142,15 +146,19 @@ IL_001c: ldloc.s V_4 IL_001e: bge.s IL_0022 + IL_0020: br.s IL_0024 + + IL_0022: br.s IL_0026 + .line 100001,100001 : 0,0 '' - IL_0020: ldc.i4.m1 - IL_0021: ret + IL_0024: ldc.i4.m1 + IL_0025: ret .line 100001,100001 : 0,0 '' - IL_0022: ldloc.3 - IL_0023: ldloc.s V_4 - IL_0025: cgt - IL_0027: ret + IL_0026: ldloc.3 + IL_0027: ldloc.s V_4 + IL_0029: cgt + IL_002b: ret } // end of method Test::CompareTo .method public hidebysig virtual final diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs02.il.bsl index d22541e0303..dc002382e1d 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs02.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly Structs02 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Structs02 { - // Offset: 0x00000000 Length: 0x00000777 + // Offset: 0x00000000 Length: 0x00000787 } .mresource public FSharpOptimizationData.Structs02 { - // Offset: 0x00000780 Length: 0x00000237 + // Offset: 0x00000790 Length: 0x00000237 } .module Structs02.exe -// MVID: {60B68B7F-7040-5E27-A745-03837F8BB660} +// MVID: {59B19213-7040-5E27-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05320000 +// Image base: 0x002F0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -76,14 +76,14 @@ instance int32 CompareTo(valuetype Experiment.Test/Repro obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 34 (0x22) + // Code size 38 (0x26) .maxstack 4 .locals init ([0] valuetype Experiment.Test/Repro& 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 6,6 : 6,11 'C:\\GitHub\\dsyme\\fsharp\\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: ldarga.s obj IL_0002: stloc.0 IL_0003: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() @@ -98,15 +98,19 @@ IL_0018: ldloc.3 IL_0019: bge.s IL_001d + IL_001b: br.s IL_001f + + IL_001d: br.s IL_0021 + .line 100001,100001 : 0,0 '' - IL_001b: ldc.i4.m1 - IL_001c: ret + IL_001f: ldc.i4.m1 + IL_0020: ret .line 100001,100001 : 0,0 '' - IL_001d: ldloc.2 - IL_001e: ldloc.3 - IL_001f: cgt - IL_0021: ret + IL_0021: ldloc.2 + IL_0022: ldloc.3 + IL_0023: cgt + IL_0025: ret } // end of method Repro::CompareTo .method public hidebysig virtual final @@ -128,7 +132,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 40 (0x28) + // Code size 44 (0x2c) .maxstack 4 .locals init ([0] valuetype Experiment.Test/Repro V_0, [1] valuetype Experiment.Test/Repro& V_1, @@ -153,15 +157,19 @@ IL_001c: ldloc.s V_4 IL_001e: bge.s IL_0022 + IL_0020: br.s IL_0024 + + IL_0022: br.s IL_0026 + .line 100001,100001 : 0,0 '' - IL_0020: ldc.i4.m1 - IL_0021: ret + IL_0024: ldc.i4.m1 + IL_0025: ret .line 100001,100001 : 0,0 '' - IL_0022: ldloc.3 - IL_0023: ldloc.s V_4 - IL_0025: cgt - IL_0027: ret + IL_0026: ldloc.3 + IL_0027: ldloc.s V_4 + IL_0029: cgt + IL_002b: ret } // end of method Repro::CompareTo .method public hidebysig virtual final diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/StructsAsArrayElements01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/StructsAsArrayElements01.il.bsl index 7beca501cef..e3e7795ebd4 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/StructsAsArrayElements01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/StructsAsArrayElements01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:3:0 } .assembly StructsAsArrayElements01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.StructsAsArrayElements01 { - // Offset: 0x00000000 Length: 0x00000754 + // Offset: 0x00000000 Length: 0x00000758 } .mresource public FSharpOptimizationData.StructsAsArrayElements01 { - // Offset: 0x00000758 Length: 0x0000022C + // Offset: 0x00000760 Length: 0x0000022C } .module StructsAsArrayElements01.dll -// MVID: {60B68B7F-29F3-6E68-A745-03837F8BB660} +// MVID: {5B17FC4F-29F3-6E68-A745-03834FFC175B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06A80000 +// Image base: 0x00E30000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,14 +66,14 @@ instance int32 CompareTo(valuetype StructsAsArrayElements01/T obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 34 (0x22) + // Code size 38 (0x26) .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 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\StructsAsArrayElements01.fs' + .line 7,7 : 6,7 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\StructsAsArrayElements01.fs' IL_0000: ldarga.s obj IL_0002: stloc.0 IL_0003: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() @@ -88,15 +88,19 @@ IL_0018: ldloc.3 IL_0019: bge.s IL_001d + IL_001b: br.s IL_001f + + IL_001d: br.s IL_0021 + .line 100001,100001 : 0,0 '' - IL_001b: ldc.i4.m1 - IL_001c: ret + IL_001f: ldc.i4.m1 + IL_0020: ret .line 100001,100001 : 0,0 '' - IL_001d: ldloc.2 - IL_001e: ldloc.3 - IL_001f: cgt - IL_0021: ret + IL_0021: ldloc.2 + IL_0022: ldloc.3 + IL_0023: cgt + IL_0025: ret } // end of method T::CompareTo .method public hidebysig virtual final @@ -118,7 +122,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 40 (0x28) + // Code size 44 (0x2c) .maxstack 4 .locals init ([0] valuetype StructsAsArrayElements01/T V_0, [1] valuetype StructsAsArrayElements01/T& V_1, @@ -143,15 +147,19 @@ IL_001c: ldloc.s V_4 IL_001e: bge.s IL_0022 + IL_0020: br.s IL_0024 + + IL_0022: br.s IL_0026 + .line 100001,100001 : 0,0 '' - IL_0020: ldc.i4.m1 - IL_0021: ret + IL_0024: ldc.i4.m1 + IL_0025: ret .line 100001,100001 : 0,0 '' - IL_0022: ldloc.3 - IL_0023: ldloc.s V_4 - IL_0025: cgt - IL_0027: ret + IL_0026: ldloc.3 + IL_0027: ldloc.s V_4 + IL_0029: cgt + IL_002b: ret } // end of method T::CompareTo .method public hidebysig virtual final diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/TryWith_NoFilterBlocks01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/TryWith_NoFilterBlocks01.il.bsl index d053449a8d5..63da7e6e404 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/TryWith_NoFilterBlocks01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/TryWith_NoFilterBlocks01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TryWith_NoFilterBlocks01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TryWith_NoFilterBlocks01 { - // Offset: 0x00000000 Length: 0x00000159 + // Offset: 0x00000000 Length: 0x0000015D } .mresource public FSharpOptimizationData.TryWith_NoFilterBlocks01 { - // Offset: 0x00000160 Length: 0x0000005F + // Offset: 0x00000168 Length: 0x0000005F } .module TryWith_NoFilterBlocks01.exe -// MVID: {60B68B7F-3DEF-9A40-A745-03837F8BB660} +// MVID: {59B19213-3DEF-9A40-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00F10000 +// Image base: 0x017A0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -63,19 +63,19 @@ .method public static void main@() cil managed { .entrypoint - // Code size 36 (0x24) + // Code size 40 (0x28) .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_0, [1] class [mscorlib]System.Exception V_1, [2] class [mscorlib]System.Exception e, [3] class [mscorlib]System.Exception V_3) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 3,5 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\TryWith_NoFilterBlocks01.fs' + .line 4,4 : 3,5 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\TryWith_NoFilterBlocks01.fs' .try { IL_0000: ldnull IL_0001: stloc.0 - IL_0002: leave.s IL_0021 + IL_0002: leave.s IL_0025 .line 5,5 : 2,6 '' } // end .try @@ -89,25 +89,29 @@ IL_000d: callvirt instance int32 [mscorlib]System.Object::GetHashCode() IL_0012: ldc.i4.0 IL_0013: ceq - IL_0015: brfalse.s IL_001d + IL_0015: brfalse.s IL_0019 - IL_0017: ldloc.1 - IL_0018: stloc.3 - .line 6,6 : 35,37 '' - IL_0019: ldnull - IL_001a: stloc.0 - IL_001b: leave.s IL_0021 + IL_0017: br.s IL_001b - .line 7,7 : 10,12 '' + IL_0019: br.s IL_0021 + + IL_001b: ldloc.1 + IL_001c: stloc.3 + .line 6,6 : 35,37 '' IL_001d: ldnull IL_001e: stloc.0 - IL_001f: leave.s IL_0021 + IL_001f: leave.s IL_0025 + + .line 7,7 : 10,12 '' + IL_0021: ldnull + IL_0022: stloc.0 + IL_0023: leave.s IL_0025 .line 100001,100001 : 0,0 '' } // end handler - IL_0021: ldloc.0 - IL_0022: pop - IL_0023: ret + IL_0025: ldloc.0 + IL_0026: pop + IL_0027: ret } // end of method $TryWith_NoFilterBlocks01::main@ } // end of class ''.$TryWith_NoFilterBlocks01 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/cas.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/cas.il.bsl index 301f28d9b64..5f937b00b51 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/cas.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/cas.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly extern cas { @@ -36,20 +36,20 @@ } .mresource public FSharpSignatureData.cas { - // Offset: 0x00000000 Length: 0x00000619 + // Offset: 0x00000000 Length: 0x000005DF } .mresource public FSharpOptimizationData.cas { - // Offset: 0x00000620 Length: 0x000000F3 + // Offset: 0x000005E8 Length: 0x000000F3 } .module cas.exe -// MVID: {60B68B7F-35EA-18E3-A745-03837F8BB660} +// MVID: {59B19213-35EA-18E3-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05250000 +// Image base: 0x006A0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -76,7 +76,7 @@ // Code size 9 (0x9) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\cas.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\cas.fs' IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Aggregates01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Aggregates01.il.bsl index 725432edbd2..18f8641994e 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Aggregates01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Aggregates01.il.bsl @@ -50,13 +50,13 @@ // Offset: 0x000005F0 Length: 0x00000211 } .module Linq101Aggregates01.exe -// MVID: {60B78A59-D281-4783-A745-0383598AB760} +// MVID: {5FCFFD0D-D281-4783-A745-03830DFDCF5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06380000 +// Image base: 0x00F40000 // =============== CLASS MEMBERS DECLARATION =================== @@ -105,7 +105,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -117,84 +117,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 12,12 : 9,33 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_factorsOf300() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_factorsOf300() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc .line 12,12 : 9,33 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 12,12 : 9,33 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc .line 13,13 : 9,17 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld int32 Linq101Aggregates01/uniqueFactors@12::current - IL_0065: ldc.i4.1 - IL_0066: ret + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld int32 Linq101Aggregates01/uniqueFactors@12::current + IL_006b: ldc.i4.1 + IL_006c: ret .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c + IL_006d: nop + IL_006e: br.s IL_0042 - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc .line 12,12 : 9,33 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc - IL_008b: ldarg.0 - IL_008c: ldc.i4.0 - IL_008d: stfld int32 Linq101Aggregates01/uniqueFactors@12::current + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc + IL_0091: ldarg.0 IL_0092: ldc.i4.0 - IL_0093: ret + IL_0093: stfld int32 Linq101Aggregates01/uniqueFactors@12::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method uniqueFactors@12::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -206,138 +212,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Aggregates01/uniqueFactors@12::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Aggregates01/uniqueFactors@12::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc - IL_005d: ldarg.0 - IL_005e: ldc.i4.0 - IL_005f: stfld int32 Linq101Aggregates01/uniqueFactors@12::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc + IL_0068: ldarg.0 + IL_0069: ldc.i4.0 + IL_006a: stfld int32 Linq101Aggregates01/uniqueFactors@12::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 12,12 : 9,33 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method uniqueFactors@12::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/uniqueFactors@12::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method uniqueFactors@12::get_CheckClose .method public strict virtual instance int32 @@ -410,7 +436,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -421,84 +447,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 21,21 : 9,28 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_numbers() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101Aggregates01/numSum@21::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_numbers() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101Aggregates01/numSum@21::pc .line 21,21 : 9,28 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 21,21 : 9,28 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101Aggregates01/numSum@21::pc .line 22,22 : 9,16 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101Aggregates01/numSum@21::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld int32 Linq101Aggregates01/numSum@21::current - IL_0065: ldc.i4.1 - IL_0066: ret + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld int32 Linq101Aggregates01/numSum@21::current + IL_006b: ldc.i4.1 + IL_006c: ret .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c + IL_006d: nop + IL_006e: br.s IL_0042 - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101Aggregates01/numSum@21::pc + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101Aggregates01/numSum@21::pc .line 21,21 : 9,28 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101Aggregates01/numSum@21::pc - IL_008b: ldarg.0 - IL_008c: ldc.i4.0 - IL_008d: stfld int32 Linq101Aggregates01/numSum@21::current + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101Aggregates01/numSum@21::pc + IL_0091: ldarg.0 IL_0092: ldc.i4.0 - IL_0093: ret + IL_0093: stfld int32 Linq101Aggregates01/numSum@21::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method numSum@21::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -510,138 +542,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Aggregates01/numSum@21::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Aggregates01/numSum@21::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Aggregates01/numSum@21::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Aggregates01/numSum@21::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Aggregates01/numSum@21::pc - IL_005d: ldarg.0 - IL_005e: ldc.i4.0 - IL_005f: stfld int32 Linq101Aggregates01/numSum@21::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Aggregates01/numSum@21::pc + IL_0068: ldarg.0 + IL_0069: ldc.i4.0 + IL_006a: stfld int32 Linq101Aggregates01/numSum@21::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 21,21 : 9,28 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method numSum@21::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/numSum@21::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method numSum@21::get_CheckClose .method public strict virtual instance int32 @@ -752,7 +804,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] string V_0, [1] string w) @@ -763,84 +815,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 30,30 : 9,26 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_words() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101Aggregates01/totalChars@30::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_words() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101Aggregates01/totalChars@30::pc .line 30,30 : 9,26 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 30,30 : 9,26 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101Aggregates01/totalChars@30::pc .line 31,31 : 9,25 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101Aggregates01/totalChars@30::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld string Linq101Aggregates01/totalChars@30::current - IL_0065: ldc.i4.1 - IL_0066: ret + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld string Linq101Aggregates01/totalChars@30::current + IL_006b: ldc.i4.1 + IL_006c: ret .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c + IL_006d: nop + IL_006e: br.s IL_0042 - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101Aggregates01/totalChars@30::pc + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101Aggregates01/totalChars@30::pc .line 30,30 : 9,26 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101Aggregates01/totalChars@30::pc - IL_008b: ldarg.0 - IL_008c: ldnull - IL_008d: stfld string Linq101Aggregates01/totalChars@30::current - IL_0092: ldc.i4.0 - IL_0093: ret + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101Aggregates01/totalChars@30::pc + IL_0091: ldarg.0 + IL_0092: ldnull + IL_0093: stfld string Linq101Aggregates01/totalChars@30::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method totalChars@30::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -852,138 +910,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Aggregates01/totalChars@30::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Aggregates01/totalChars@30::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Aggregates01/totalChars@30::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Aggregates01/totalChars@30::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Aggregates01/totalChars@30::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld string Linq101Aggregates01/totalChars@30::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Aggregates01/totalChars@30::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld string Linq101Aggregates01/totalChars@30::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 30,30 : 9,26 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method totalChars@30::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/totalChars@30::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method totalChars@30::get_CheckClose .method public strict virtual instance string @@ -1220,7 +1298,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 149 (0x95) + // Code size 155 (0x9b) .maxstack 6 .locals init ([0] class [Utils]Utils/Product V_0, [1] class [Utils]Utils/Product x) @@ -1231,85 +1309,91 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006b + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0068 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008c + IL_0022: br.s IL_0071 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006e + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0092 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 42,42 : 13,26 '' - IL_0025: ldarg.0 - IL_0026: ldarg.0 - IL_0027: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/sum@42::g - IL_002c: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0031: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' - IL_0036: ldarg.0 - IL_0037: ldc.i4.1 - IL_0038: stfld int32 Linq101Aggregates01/sum@42::pc + IL_002b: ldarg.0 + IL_002c: ldarg.0 + IL_002d: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/sum@42::g + IL_0032: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0037: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' + IL_003c: ldarg.0 + IL_003d: ldc.i4.1 + IL_003e: stfld int32 Linq101Aggregates01/sum@42::pc .line 42,42 : 13,26 '' - IL_003d: ldarg.0 - IL_003e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' - IL_0043: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0048: brfalse.s IL_006b - - IL_004a: ldarg.0 - IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' - IL_0050: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0055: stloc.0 + IL_0043: ldarg.0 + IL_0044: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' + IL_0049: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004e: brfalse.s IL_0071 + + IL_0050: ldarg.0 + IL_0051: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' + IL_0056: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005b: stloc.0 .line 42,42 : 13,26 '' - IL_0056: ldloc.0 - IL_0057: stloc.1 + IL_005c: ldloc.0 + IL_005d: stloc.1 + IL_005e: ldarg.0 + IL_005f: ldc.i4.2 + IL_0060: stfld int32 Linq101Aggregates01/sum@42::pc .line 43,43 : 13,33 '' - IL_0058: ldarg.0 - IL_0059: ldc.i4.2 - IL_005a: stfld int32 Linq101Aggregates01/sum@42::pc - IL_005f: ldarg.0 - IL_0060: ldloc.1 - IL_0061: stfld class [Utils]Utils/Product Linq101Aggregates01/sum@42::current - IL_0066: ldc.i4.1 - IL_0067: ret - - .line 100001,100001 : 0,0 '' - IL_0068: nop - IL_0069: br.s IL_003d - - IL_006b: ldarg.0 - IL_006c: ldc.i4.3 - IL_006d: stfld int32 Linq101Aggregates01/sum@42::pc + IL_0065: ldarg.0 + IL_0066: ldloc.1 + IL_0067: stfld class [Utils]Utils/Product Linq101Aggregates01/sum@42::current + IL_006c: ldc.i4.1 + IL_006d: ret + + .line 100001,100001 : 0,0 '' + IL_006e: nop + IL_006f: br.s IL_0043 + + IL_0071: ldarg.0 + IL_0072: ldc.i4.3 + IL_0073: stfld int32 Linq101Aggregates01/sum@42::pc .line 42,42 : 13,26 '' - IL_0072: ldarg.0 - IL_0073: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' - IL_0078: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007d: nop - IL_007e: ldarg.0 - IL_007f: ldnull - IL_0080: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' - IL_0085: ldarg.0 - IL_0086: ldc.i4.3 - IL_0087: stfld int32 Linq101Aggregates01/sum@42::pc - IL_008c: ldarg.0 - IL_008d: ldnull - IL_008e: stfld class [Utils]Utils/Product Linq101Aggregates01/sum@42::current - IL_0093: ldc.i4.0 - IL_0094: ret + IL_0078: ldarg.0 + IL_0079: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' + IL_007e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0083: nop + IL_0084: ldarg.0 + IL_0085: ldnull + IL_0086: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' + IL_008b: ldarg.0 + IL_008c: ldc.i4.3 + IL_008d: stfld int32 Linq101Aggregates01/sum@42::pc + IL_0092: ldarg.0 + IL_0093: ldnull + IL_0094: stfld class [Utils]Utils/Product Linq101Aggregates01/sum@42::current + IL_0099: ldc.i4.0 + IL_009a: ret } // end of method sum@42::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -1321,138 +1405,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Aggregates01/sum@42::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Aggregates01/sum@42::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Aggregates01/sum@42::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Aggregates01/sum@42::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Aggregates01/sum@42::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld class [Utils]Utils/Product Linq101Aggregates01/sum@42::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Aggregates01/sum@42::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld class [Utils]Utils/Product Linq101Aggregates01/sum@42::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 42,42 : 13,26 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method sum@42::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/sum@42::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method sum@42::get_CheckClose .method public strict virtual instance class [Utils]Utils/Product @@ -1553,7 +1657,7 @@ .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,int32>,object> Invoke(class [System.Core]System.Linq.IGrouping`2 _arg2) cil managed { - // Code size 141 (0x8d) + // Code size 145 (0x91) .maxstack 8 .locals init ([0] class [System.Core]System.Linq.IGrouping`2 g, [1] int32 sum, @@ -1613,7 +1717,7 @@ IL_0055: ldloc.s V_9 IL_0057: stloc.s V_8 - IL_0059: leave.s IL_0075 + IL_0059: leave.s IL_0079 } // end .try finally @@ -1622,32 +1726,36 @@ IL_005d: isinst [mscorlib]System.IDisposable IL_0062: stloc.s V_10 IL_0064: ldloc.s V_10 - IL_0066: brfalse.s IL_0072 + IL_0066: brfalse.s IL_006a + + IL_0068: br.s IL_006c + + IL_006a: br.s IL_0076 .line 100001,100001 : 0,0 '' - IL_0068: ldloc.s V_10 - IL_006a: callvirt instance void [netstandard]System.IDisposable::Dispose() - IL_006f: ldnull - IL_0070: pop - IL_0071: endfinally + IL_006c: ldloc.s V_10 + IL_006e: callvirt instance void [netstandard]System.IDisposable::Dispose() + IL_0073: ldnull + IL_0074: pop + IL_0075: endfinally .line 100001,100001 : 0,0 '' - IL_0072: ldnull - IL_0073: pop - IL_0074: endfinally + IL_0076: ldnull + IL_0077: pop + IL_0078: endfinally .line 100001,100001 : 0,0 '' } // end handler - IL_0075: ldloc.s V_8 - IL_0077: stloc.1 + IL_0079: ldloc.s V_8 + IL_007b: stloc.1 .line 45,45 : 9,28 '' - IL_0078: ldarg.0 - IL_0079: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/'categories@40-3'::builder@ - IL_007e: ldloc.0 - IL_007f: ldloc.1 - IL_0080: newobj instance void class [mscorlib]System.Tuple`2,int32>::.ctor(!0, + IL_007c: ldarg.0 + IL_007d: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/'categories@40-3'::builder@ + IL_0082: ldloc.0 + IL_0083: ldloc.1 + IL_0084: newobj instance void class [mscorlib]System.Tuple`2,int32>::.ctor(!0, !1) - IL_0085: tail. - IL_0087: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Yield,int32>,object>(!!0) - IL_008c: ret + IL_0089: tail. + IL_008b: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Yield,int32>,object>(!!0) + IL_0090: ret } // end of method 'categories@40-3'::Invoke } // end of class 'categories@40-3' @@ -1743,7 +1851,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -1754,84 +1862,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 49,49 : 22,41 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_numbers() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101Aggregates01/minNum@49::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_numbers() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101Aggregates01/minNum@49::pc .line 49,49 : 22,41 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 49,49 : 22,41 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101Aggregates01/minNum@49::pc .line 49,49 : 42,49 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101Aggregates01/minNum@49::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld int32 Linq101Aggregates01/minNum@49::current - IL_0065: ldc.i4.1 - IL_0066: ret + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld int32 Linq101Aggregates01/minNum@49::current + IL_006b: ldc.i4.1 + IL_006c: ret .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c + IL_006d: nop + IL_006e: br.s IL_0042 - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101Aggregates01/minNum@49::pc + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101Aggregates01/minNum@49::pc .line 49,49 : 22,41 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101Aggregates01/minNum@49::pc - IL_008b: ldarg.0 - IL_008c: ldc.i4.0 - IL_008d: stfld int32 Linq101Aggregates01/minNum@49::current + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101Aggregates01/minNum@49::pc + IL_0091: ldarg.0 IL_0092: ldc.i4.0 - IL_0093: ret + IL_0093: stfld int32 Linq101Aggregates01/minNum@49::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method minNum@49::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -1843,138 +1957,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Aggregates01/minNum@49::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Aggregates01/minNum@49::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Aggregates01/minNum@49::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Aggregates01/minNum@49::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Aggregates01/minNum@49::pc - IL_005d: ldarg.0 - IL_005e: ldc.i4.0 - IL_005f: stfld int32 Linq101Aggregates01/minNum@49::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Aggregates01/minNum@49::pc + IL_0068: ldarg.0 + IL_0069: ldc.i4.0 + IL_006a: stfld int32 Linq101Aggregates01/minNum@49::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 49,49 : 22,41 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method minNum@49::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/minNum@49::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method minNum@49::get_CheckClose .method public strict virtual instance int32 @@ -2085,7 +2219,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] string V_0, [1] string w) @@ -2096,84 +2230,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 52,52 : 28,45 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_words() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101Aggregates01/shortestWord@52::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_words() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101Aggregates01/shortestWord@52::pc .line 52,52 : 28,45 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 52,52 : 28,45 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101Aggregates01/shortestWord@52::pc .line 52,52 : 46,60 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101Aggregates01/shortestWord@52::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld string Linq101Aggregates01/shortestWord@52::current - IL_0065: ldc.i4.1 - IL_0066: ret + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld string Linq101Aggregates01/shortestWord@52::current + IL_006b: ldc.i4.1 + IL_006c: ret .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c + IL_006d: nop + IL_006e: br.s IL_0042 - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101Aggregates01/shortestWord@52::pc + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101Aggregates01/shortestWord@52::pc .line 52,52 : 28,45 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101Aggregates01/shortestWord@52::pc - IL_008b: ldarg.0 - IL_008c: ldnull - IL_008d: stfld string Linq101Aggregates01/shortestWord@52::current - IL_0092: ldc.i4.0 - IL_0093: ret + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101Aggregates01/shortestWord@52::pc + IL_0091: ldarg.0 + IL_0092: ldnull + IL_0093: stfld string Linq101Aggregates01/shortestWord@52::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method shortestWord@52::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -2185,138 +2325,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Aggregates01/shortestWord@52::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Aggregates01/shortestWord@52::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Aggregates01/shortestWord@52::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Aggregates01/shortestWord@52::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Aggregates01/shortestWord@52::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld string Linq101Aggregates01/shortestWord@52::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Aggregates01/shortestWord@52::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld string Linq101Aggregates01/shortestWord@52::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 52,52 : 28,45 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f + + .line 100001,100001 : 0,0 '' + } // end handler + IL_007f: ldloc.1 + IL_0080: pop + .line 100001,100001 : 0,0 '' + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f - .line 100001,100001 : 0,0 '' - } // end handler - IL_0074: ldloc.1 - IL_0075: pop - .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_008d: br.s IL_0091 - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method shortestWord@52::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/shortestWord@52::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method shortestWord@52::get_CheckClose .method public strict virtual instance string @@ -2553,7 +2713,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 149 (0x95) + // Code size 155 (0x9b) .maxstack 6 .locals init ([0] class [Utils]Utils/Product V_0, [1] class [Utils]Utils/Product x) @@ -2564,85 +2724,91 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006b + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0068 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008c + IL_0022: br.s IL_0071 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006e + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0092 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 59,59 : 27,40 '' - IL_0025: ldarg.0 - IL_0026: ldarg.0 - IL_0027: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/min@59::g - IL_002c: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0031: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' - IL_0036: ldarg.0 - IL_0037: ldc.i4.1 - IL_0038: stfld int32 Linq101Aggregates01/min@59::pc + IL_002b: ldarg.0 + IL_002c: ldarg.0 + IL_002d: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/min@59::g + IL_0032: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0037: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' + IL_003c: ldarg.0 + IL_003d: ldc.i4.1 + IL_003e: stfld int32 Linq101Aggregates01/min@59::pc .line 59,59 : 27,40 '' - IL_003d: ldarg.0 - IL_003e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' - IL_0043: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0048: brfalse.s IL_006b - - IL_004a: ldarg.0 - IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' - IL_0050: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0055: stloc.0 + IL_0043: ldarg.0 + IL_0044: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' + IL_0049: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004e: brfalse.s IL_0071 + + IL_0050: ldarg.0 + IL_0051: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' + IL_0056: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005b: stloc.0 .line 59,59 : 27,40 '' - IL_0056: ldloc.0 - IL_0057: stloc.1 + IL_005c: ldloc.0 + IL_005d: stloc.1 + IL_005e: ldarg.0 + IL_005f: ldc.i4.2 + IL_0060: stfld int32 Linq101Aggregates01/min@59::pc .line 59,59 : 41,58 '' - IL_0058: ldarg.0 - IL_0059: ldc.i4.2 - IL_005a: stfld int32 Linq101Aggregates01/min@59::pc - IL_005f: ldarg.0 - IL_0060: ldloc.1 - IL_0061: stfld class [Utils]Utils/Product Linq101Aggregates01/min@59::current - IL_0066: ldc.i4.1 - IL_0067: ret - - .line 100001,100001 : 0,0 '' - IL_0068: nop - IL_0069: br.s IL_003d - - IL_006b: ldarg.0 - IL_006c: ldc.i4.3 - IL_006d: stfld int32 Linq101Aggregates01/min@59::pc + IL_0065: ldarg.0 + IL_0066: ldloc.1 + IL_0067: stfld class [Utils]Utils/Product Linq101Aggregates01/min@59::current + IL_006c: ldc.i4.1 + IL_006d: ret + + .line 100001,100001 : 0,0 '' + IL_006e: nop + IL_006f: br.s IL_0043 + + IL_0071: ldarg.0 + IL_0072: ldc.i4.3 + IL_0073: stfld int32 Linq101Aggregates01/min@59::pc .line 59,59 : 27,40 '' - IL_0072: ldarg.0 - IL_0073: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' - IL_0078: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007d: nop - IL_007e: ldarg.0 - IL_007f: ldnull - IL_0080: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' - IL_0085: ldarg.0 - IL_0086: ldc.i4.3 - IL_0087: stfld int32 Linq101Aggregates01/min@59::pc - IL_008c: ldarg.0 - IL_008d: ldnull - IL_008e: stfld class [Utils]Utils/Product Linq101Aggregates01/min@59::current - IL_0093: ldc.i4.0 - IL_0094: ret + IL_0078: ldarg.0 + IL_0079: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' + IL_007e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0083: nop + IL_0084: ldarg.0 + IL_0085: ldnull + IL_0086: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' + IL_008b: ldarg.0 + IL_008c: ldc.i4.3 + IL_008d: stfld int32 Linq101Aggregates01/min@59::pc + IL_0092: ldarg.0 + IL_0093: ldnull + IL_0094: stfld class [Utils]Utils/Product Linq101Aggregates01/min@59::current + IL_0099: ldc.i4.0 + IL_009a: ret } // end of method min@59::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -2654,138 +2820,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Aggregates01/min@59::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Aggregates01/min@59::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Aggregates01/min@59::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Aggregates01/min@59::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Aggregates01/min@59::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld class [Utils]Utils/Product Linq101Aggregates01/min@59::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Aggregates01/min@59::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld class [Utils]Utils/Product Linq101Aggregates01/min@59::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 59,59 : 27,40 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method min@59::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/min@59::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method min@59::get_CheckClose .method public strict virtual instance class [Utils]Utils/Product @@ -3155,7 +3341,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 149 (0x95) + // Code size 155 (0x9b) .maxstack 6 .locals init ([0] class [Utils]Utils/Product V_0, [1] class [Utils]Utils/Product x) @@ -3166,85 +3352,91 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006b + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0068 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008c + IL_0022: br.s IL_0071 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006e + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0092 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 69,69 : 40,53 '' - IL_0025: ldarg.0 - IL_0026: ldarg.0 - IL_0027: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/cheapestProducts@69::g - IL_002c: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0031: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' - IL_0036: ldarg.0 - IL_0037: ldc.i4.1 - IL_0038: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc + IL_002b: ldarg.0 + IL_002c: ldarg.0 + IL_002d: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/cheapestProducts@69::g + IL_0032: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0037: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' + IL_003c: ldarg.0 + IL_003d: ldc.i4.1 + IL_003e: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc .line 69,69 : 40,53 '' - IL_003d: ldarg.0 - IL_003e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' - IL_0043: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0048: brfalse.s IL_006b - - IL_004a: ldarg.0 - IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' - IL_0050: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0055: stloc.0 + IL_0043: ldarg.0 + IL_0044: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' + IL_0049: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004e: brfalse.s IL_0071 + + IL_0050: ldarg.0 + IL_0051: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' + IL_0056: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005b: stloc.0 .line 69,69 : 40,53 '' - IL_0056: ldloc.0 - IL_0057: stloc.1 + IL_005c: ldloc.0 + IL_005d: stloc.1 + IL_005e: ldarg.0 + IL_005f: ldc.i4.2 + IL_0060: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc .line 69,69 : 54,79 '' - IL_0058: ldarg.0 - IL_0059: ldc.i4.2 - IL_005a: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc - IL_005f: ldarg.0 - IL_0060: ldloc.1 - IL_0061: stfld class [Utils]Utils/Product Linq101Aggregates01/cheapestProducts@69::current - IL_0066: ldc.i4.1 - IL_0067: ret - - .line 100001,100001 : 0,0 '' - IL_0068: nop - IL_0069: br.s IL_003d - - IL_006b: ldarg.0 - IL_006c: ldc.i4.3 - IL_006d: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc + IL_0065: ldarg.0 + IL_0066: ldloc.1 + IL_0067: stfld class [Utils]Utils/Product Linq101Aggregates01/cheapestProducts@69::current + IL_006c: ldc.i4.1 + IL_006d: ret + + .line 100001,100001 : 0,0 '' + IL_006e: nop + IL_006f: br.s IL_0043 + + IL_0071: ldarg.0 + IL_0072: ldc.i4.3 + IL_0073: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc .line 69,69 : 40,53 '' - IL_0072: ldarg.0 - IL_0073: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' - IL_0078: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007d: nop - IL_007e: ldarg.0 - IL_007f: ldnull - IL_0080: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' - IL_0085: ldarg.0 - IL_0086: ldc.i4.3 - IL_0087: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc - IL_008c: ldarg.0 - IL_008d: ldnull - IL_008e: stfld class [Utils]Utils/Product Linq101Aggregates01/cheapestProducts@69::current - IL_0093: ldc.i4.0 - IL_0094: ret + IL_0078: ldarg.0 + IL_0079: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' + IL_007e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0083: nop + IL_0084: ldarg.0 + IL_0085: ldnull + IL_0086: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' + IL_008b: ldarg.0 + IL_008c: ldc.i4.3 + IL_008d: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc + IL_0092: ldarg.0 + IL_0093: ldnull + IL_0094: stfld class [Utils]Utils/Product Linq101Aggregates01/cheapestProducts@69::current + IL_0099: ldc.i4.0 + IL_009a: ret } // end of method cheapestProducts@69::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -3256,138 +3448,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Aggregates01/cheapestProducts@69::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Aggregates01/cheapestProducts@69::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld class [Utils]Utils/Product Linq101Aggregates01/cheapestProducts@69::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld class [Utils]Utils/Product Linq101Aggregates01/cheapestProducts@69::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 69,69 : 40,53 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method cheapestProducts@69::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/cheapestProducts@69::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method cheapestProducts@69::get_CheckClose .method public strict virtual instance class [Utils]Utils/Product @@ -3632,7 +3844,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -3643,84 +3855,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 74,74 : 22,41 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_numbers() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101Aggregates01/maxNum@74::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_numbers() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101Aggregates01/maxNum@74::pc .line 74,74 : 22,41 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 74,74 : 22,41 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101Aggregates01/maxNum@74::pc .line 74,74 : 42,49 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101Aggregates01/maxNum@74::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld int32 Linq101Aggregates01/maxNum@74::current - IL_0065: ldc.i4.1 - IL_0066: ret + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld int32 Linq101Aggregates01/maxNum@74::current + IL_006b: ldc.i4.1 + IL_006c: ret .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c + IL_006d: nop + IL_006e: br.s IL_0042 - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101Aggregates01/maxNum@74::pc + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101Aggregates01/maxNum@74::pc .line 74,74 : 22,41 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101Aggregates01/maxNum@74::pc - IL_008b: ldarg.0 - IL_008c: ldc.i4.0 - IL_008d: stfld int32 Linq101Aggregates01/maxNum@74::current + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101Aggregates01/maxNum@74::pc + IL_0091: ldarg.0 IL_0092: ldc.i4.0 - IL_0093: ret + IL_0093: stfld int32 Linq101Aggregates01/maxNum@74::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method maxNum@74::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -3732,138 +3950,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Aggregates01/maxNum@74::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Aggregates01/maxNum@74::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Aggregates01/maxNum@74::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Aggregates01/maxNum@74::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Aggregates01/maxNum@74::pc - IL_005d: ldarg.0 - IL_005e: ldc.i4.0 - IL_005f: stfld int32 Linq101Aggregates01/maxNum@74::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Aggregates01/maxNum@74::pc + IL_0068: ldarg.0 + IL_0069: ldc.i4.0 + IL_006a: stfld int32 Linq101Aggregates01/maxNum@74::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 74,74 : 22,41 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method maxNum@74::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/maxNum@74::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method maxNum@74::get_CheckClose .method public strict virtual instance int32 @@ -3974,7 +4212,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] string V_0, [1] string w) @@ -3985,84 +4223,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 77,77 : 29,46 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_words() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101Aggregates01/longestLength@77::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_words() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101Aggregates01/longestLength@77::pc .line 77,77 : 29,46 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 77,77 : 29,46 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101Aggregates01/longestLength@77::pc .line 77,77 : 47,61 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101Aggregates01/longestLength@77::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld string Linq101Aggregates01/longestLength@77::current - IL_0065: ldc.i4.1 - IL_0066: ret + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld string Linq101Aggregates01/longestLength@77::current + IL_006b: ldc.i4.1 + IL_006c: ret .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c + IL_006d: nop + IL_006e: br.s IL_0042 - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101Aggregates01/longestLength@77::pc + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101Aggregates01/longestLength@77::pc .line 77,77 : 29,46 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101Aggregates01/longestLength@77::pc - IL_008b: ldarg.0 - IL_008c: ldnull - IL_008d: stfld string Linq101Aggregates01/longestLength@77::current - IL_0092: ldc.i4.0 - IL_0093: ret + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101Aggregates01/longestLength@77::pc + IL_0091: ldarg.0 + IL_0092: ldnull + IL_0093: stfld string Linq101Aggregates01/longestLength@77::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method longestLength@77::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -4074,138 +4318,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Aggregates01/longestLength@77::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Aggregates01/longestLength@77::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Aggregates01/longestLength@77::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Aggregates01/longestLength@77::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Aggregates01/longestLength@77::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld string Linq101Aggregates01/longestLength@77::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Aggregates01/longestLength@77::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld string Linq101Aggregates01/longestLength@77::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 77,77 : 29,46 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method longestLength@77::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/longestLength@77::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method longestLength@77::get_CheckClose .method public strict virtual instance string @@ -4442,7 +4706,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 149 (0x95) + // Code size 155 (0x9b) .maxstack 6 .locals init ([0] class [Utils]Utils/Product V_0, [1] class [Utils]Utils/Product x) @@ -4453,85 +4717,91 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006b + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0068 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008c + IL_0022: br.s IL_0071 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006e + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0092 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 84,84 : 42,55 '' - IL_0025: ldarg.0 - IL_0026: ldarg.0 - IL_0027: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/mostExpensivePrice@84::g - IL_002c: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0031: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' - IL_0036: ldarg.0 - IL_0037: ldc.i4.1 - IL_0038: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc + IL_002b: ldarg.0 + IL_002c: ldarg.0 + IL_002d: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/mostExpensivePrice@84::g + IL_0032: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0037: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' + IL_003c: ldarg.0 + IL_003d: ldc.i4.1 + IL_003e: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc .line 84,84 : 42,55 '' - IL_003d: ldarg.0 - IL_003e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' - IL_0043: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0048: brfalse.s IL_006b - - IL_004a: ldarg.0 - IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' - IL_0050: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0055: stloc.0 + IL_0043: ldarg.0 + IL_0044: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' + IL_0049: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004e: brfalse.s IL_0071 + + IL_0050: ldarg.0 + IL_0051: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' + IL_0056: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005b: stloc.0 .line 84,84 : 42,55 '' - IL_0056: ldloc.0 - IL_0057: stloc.1 + IL_005c: ldloc.0 + IL_005d: stloc.1 + IL_005e: ldarg.0 + IL_005f: ldc.i4.2 + IL_0060: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc .line 84,84 : 56,73 '' - IL_0058: ldarg.0 - IL_0059: ldc.i4.2 - IL_005a: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc - IL_005f: ldarg.0 - IL_0060: ldloc.1 - IL_0061: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensivePrice@84::current - IL_0066: ldc.i4.1 - IL_0067: ret - - .line 100001,100001 : 0,0 '' - IL_0068: nop - IL_0069: br.s IL_003d - - IL_006b: ldarg.0 - IL_006c: ldc.i4.3 - IL_006d: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc + IL_0065: ldarg.0 + IL_0066: ldloc.1 + IL_0067: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensivePrice@84::current + IL_006c: ldc.i4.1 + IL_006d: ret + + .line 100001,100001 : 0,0 '' + IL_006e: nop + IL_006f: br.s IL_0043 + + IL_0071: ldarg.0 + IL_0072: ldc.i4.3 + IL_0073: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc .line 84,84 : 42,55 '' - IL_0072: ldarg.0 - IL_0073: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' - IL_0078: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007d: nop - IL_007e: ldarg.0 - IL_007f: ldnull - IL_0080: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' - IL_0085: ldarg.0 - IL_0086: ldc.i4.3 - IL_0087: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc - IL_008c: ldarg.0 - IL_008d: ldnull - IL_008e: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensivePrice@84::current - IL_0093: ldc.i4.0 - IL_0094: ret + IL_0078: ldarg.0 + IL_0079: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' + IL_007e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0083: nop + IL_0084: ldarg.0 + IL_0085: ldnull + IL_0086: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' + IL_008b: ldarg.0 + IL_008c: ldc.i4.3 + IL_008d: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc + IL_0092: ldarg.0 + IL_0093: ldnull + IL_0094: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensivePrice@84::current + IL_0099: ldc.i4.0 + IL_009a: ret } // end of method mostExpensivePrice@84::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -4543,138 +4813,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensivePrice@84::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensivePrice@84::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 84,84 : 42,55 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method mostExpensivePrice@84::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method mostExpensivePrice@84::get_CheckClose .method public strict virtual instance class [Utils]Utils/Product @@ -5026,7 +5316,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 149 (0x95) + // Code size 155 (0x9b) .maxstack 6 .locals init ([0] class [Utils]Utils/Product V_0, [1] class [Utils]Utils/Product x) @@ -5037,85 +5327,91 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006b + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0068 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008c + IL_0022: br.s IL_0071 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006e + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0092 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 93,93 : 32,45 '' - IL_0025: ldarg.0 - IL_0026: ldarg.0 - IL_0027: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/maxPrice@93::g - IL_002c: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0031: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' - IL_0036: ldarg.0 - IL_0037: ldc.i4.1 - IL_0038: stfld int32 Linq101Aggregates01/maxPrice@93::pc + IL_002b: ldarg.0 + IL_002c: ldarg.0 + IL_002d: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/maxPrice@93::g + IL_0032: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0037: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' + IL_003c: ldarg.0 + IL_003d: ldc.i4.1 + IL_003e: stfld int32 Linq101Aggregates01/maxPrice@93::pc .line 93,93 : 32,45 '' - IL_003d: ldarg.0 - IL_003e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' - IL_0043: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0048: brfalse.s IL_006b - - IL_004a: ldarg.0 - IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' - IL_0050: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0055: stloc.0 + IL_0043: ldarg.0 + IL_0044: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' + IL_0049: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004e: brfalse.s IL_0071 + + IL_0050: ldarg.0 + IL_0051: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' + IL_0056: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005b: stloc.0 .line 93,93 : 32,45 '' - IL_0056: ldloc.0 - IL_0057: stloc.1 + IL_005c: ldloc.0 + IL_005d: stloc.1 + IL_005e: ldarg.0 + IL_005f: ldc.i4.2 + IL_0060: stfld int32 Linq101Aggregates01/maxPrice@93::pc .line 93,93 : 46,63 '' - IL_0058: ldarg.0 - IL_0059: ldc.i4.2 - IL_005a: stfld int32 Linq101Aggregates01/maxPrice@93::pc - IL_005f: ldarg.0 - IL_0060: ldloc.1 - IL_0061: stfld class [Utils]Utils/Product Linq101Aggregates01/maxPrice@93::current - IL_0066: ldc.i4.1 - IL_0067: ret - - .line 100001,100001 : 0,0 '' - IL_0068: nop - IL_0069: br.s IL_003d - - IL_006b: ldarg.0 - IL_006c: ldc.i4.3 - IL_006d: stfld int32 Linq101Aggregates01/maxPrice@93::pc + IL_0065: ldarg.0 + IL_0066: ldloc.1 + IL_0067: stfld class [Utils]Utils/Product Linq101Aggregates01/maxPrice@93::current + IL_006c: ldc.i4.1 + IL_006d: ret + + .line 100001,100001 : 0,0 '' + IL_006e: nop + IL_006f: br.s IL_0043 + + IL_0071: ldarg.0 + IL_0072: ldc.i4.3 + IL_0073: stfld int32 Linq101Aggregates01/maxPrice@93::pc .line 93,93 : 32,45 '' - IL_0072: ldarg.0 - IL_0073: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' - IL_0078: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007d: nop - IL_007e: ldarg.0 - IL_007f: ldnull - IL_0080: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' - IL_0085: ldarg.0 - IL_0086: ldc.i4.3 - IL_0087: stfld int32 Linq101Aggregates01/maxPrice@93::pc - IL_008c: ldarg.0 - IL_008d: ldnull - IL_008e: stfld class [Utils]Utils/Product Linq101Aggregates01/maxPrice@93::current - IL_0093: ldc.i4.0 - IL_0094: ret + IL_0078: ldarg.0 + IL_0079: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' + IL_007e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0083: nop + IL_0084: ldarg.0 + IL_0085: ldnull + IL_0086: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' + IL_008b: ldarg.0 + IL_008c: ldc.i4.3 + IL_008d: stfld int32 Linq101Aggregates01/maxPrice@93::pc + IL_0092: ldarg.0 + IL_0093: ldnull + IL_0094: stfld class [Utils]Utils/Product Linq101Aggregates01/maxPrice@93::current + IL_0099: ldc.i4.0 + IL_009a: ret } // end of method maxPrice@93::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -5127,138 +5423,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Aggregates01/maxPrice@93::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Aggregates01/maxPrice@93::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Aggregates01/maxPrice@93::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Aggregates01/maxPrice@93::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Aggregates01/maxPrice@93::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld class [Utils]Utils/Product Linq101Aggregates01/maxPrice@93::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Aggregates01/maxPrice@93::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld class [Utils]Utils/Product Linq101Aggregates01/maxPrice@93::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 93,93 : 32,45 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method maxPrice@93::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/maxPrice@93::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method maxPrice@93::get_CheckClose .method public strict virtual instance class [Utils]Utils/Product @@ -5379,7 +5695,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 149 (0x95) + // Code size 155 (0x9b) .maxstack 6 .locals init ([0] class [Utils]Utils/Product V_0, [1] class [Utils]Utils/Product x) @@ -5390,85 +5706,91 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006b + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0068 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008c + IL_0022: br.s IL_0071 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006e + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0092 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 94,94 : 45,58 '' - IL_0025: ldarg.0 - IL_0026: ldarg.0 - IL_0027: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/mostExpensiveProducts@94::g - IL_002c: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0031: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' - IL_0036: ldarg.0 - IL_0037: ldc.i4.1 - IL_0038: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc + IL_002b: ldarg.0 + IL_002c: ldarg.0 + IL_002d: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/mostExpensiveProducts@94::g + IL_0032: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0037: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' + IL_003c: ldarg.0 + IL_003d: ldc.i4.1 + IL_003e: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc .line 94,94 : 45,58 '' - IL_003d: ldarg.0 - IL_003e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' - IL_0043: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0048: brfalse.s IL_006b - - IL_004a: ldarg.0 - IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' - IL_0050: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0055: stloc.0 + IL_0043: ldarg.0 + IL_0044: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' + IL_0049: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004e: brfalse.s IL_0071 + + IL_0050: ldarg.0 + IL_0051: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' + IL_0056: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005b: stloc.0 .line 94,94 : 45,58 '' - IL_0056: ldloc.0 - IL_0057: stloc.1 + IL_005c: ldloc.0 + IL_005d: stloc.1 + IL_005e: ldarg.0 + IL_005f: ldc.i4.2 + IL_0060: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc .line 94,94 : 59,89 '' - IL_0058: ldarg.0 - IL_0059: ldc.i4.2 - IL_005a: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc - IL_005f: ldarg.0 - IL_0060: ldloc.1 - IL_0061: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensiveProducts@94::current - IL_0066: ldc.i4.1 - IL_0067: ret - - .line 100001,100001 : 0,0 '' - IL_0068: nop - IL_0069: br.s IL_003d - - IL_006b: ldarg.0 - IL_006c: ldc.i4.3 - IL_006d: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc + IL_0065: ldarg.0 + IL_0066: ldloc.1 + IL_0067: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensiveProducts@94::current + IL_006c: ldc.i4.1 + IL_006d: ret + + .line 100001,100001 : 0,0 '' + IL_006e: nop + IL_006f: br.s IL_0043 + + IL_0071: ldarg.0 + IL_0072: ldc.i4.3 + IL_0073: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc .line 94,94 : 45,58 '' - IL_0072: ldarg.0 - IL_0073: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' - IL_0078: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007d: nop - IL_007e: ldarg.0 - IL_007f: ldnull - IL_0080: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' - IL_0085: ldarg.0 - IL_0086: ldc.i4.3 - IL_0087: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc - IL_008c: ldarg.0 - IL_008d: ldnull - IL_008e: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensiveProducts@94::current - IL_0093: ldc.i4.0 - IL_0094: ret + IL_0078: ldarg.0 + IL_0079: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' + IL_007e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0083: nop + IL_0084: ldarg.0 + IL_0085: ldnull + IL_0086: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' + IL_008b: ldarg.0 + IL_008c: ldc.i4.3 + IL_008d: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc + IL_0092: ldarg.0 + IL_0093: ldnull + IL_0094: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensiveProducts@94::current + IL_0099: ldc.i4.0 + IL_009a: ret } // end of method mostExpensiveProducts@94::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -5480,138 +5802,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensiveProducts@94::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensiveProducts@94::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 94,94 : 45,58 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method mostExpensiveProducts@94::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method mostExpensiveProducts@94::get_CheckClose .method public strict virtual instance class [Utils]Utils/Product @@ -5861,7 +6203,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 156 (0x9c) + // Code size 162 (0xa2) .maxstack 6 .locals init ([0] float64 V_0, [1] float64 n) @@ -5872,84 +6214,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 100,100 : 26,46 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_numbers2() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101Aggregates01/averageNum@100::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_numbers2() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101Aggregates01/averageNum@100::pc .line 100,100 : 26,46 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 100,100 : 26,46 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101Aggregates01/averageNum@100::pc .line 100,100 : 47,58 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101Aggregates01/averageNum@100::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld float64 Linq101Aggregates01/averageNum@100::current - IL_0065: ldc.i4.1 - IL_0066: ret + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld float64 Linq101Aggregates01/averageNum@100::current + IL_006b: ldc.i4.1 + IL_006c: ret .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c + IL_006d: nop + IL_006e: br.s IL_0042 - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101Aggregates01/averageNum@100::pc + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101Aggregates01/averageNum@100::pc .line 100,100 : 26,46 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101Aggregates01/averageNum@100::pc - IL_008b: ldarg.0 - IL_008c: ldc.r8 0.0 - IL_0095: stfld float64 Linq101Aggregates01/averageNum@100::current - IL_009a: ldc.i4.0 - IL_009b: ret + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101Aggregates01/averageNum@100::pc + IL_0091: ldarg.0 + IL_0092: ldc.r8 0.0 + IL_009b: stfld float64 Linq101Aggregates01/averageNum@100::current + IL_00a0: ldc.i4.0 + IL_00a1: ret } // end of method averageNum@100::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 144 (0x90) + // Code size 156 (0x9c) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -5965,7 +6313,7 @@ .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br IL_008f .line 100001,100001 : 0,0 '' IL_0019: nop @@ -5975,124 +6323,144 @@ IL_001b: ldfld int32 Linq101Aggregates01/averageNum@100::pc IL_0020: switch ( IL_0037, - IL_003a, - IL_003d, - IL_0040) - IL_0035: br.s IL_0043 + IL_0039, + IL_003b, + IL_003d) + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0059 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0045 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0044 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_0040: nop - IL_0041: br.s IL_0059 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0043: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0044: nop - IL_0045: ldarg.0 - IL_0046: ldc.i4.3 - IL_0047: stfld int32 Linq101Aggregates01/averageNum@100::pc - IL_004c: ldarg.0 - IL_004d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' - IL_0052: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0057: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Aggregates01/averageNum@100::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0058: nop - IL_0059: ldarg.0 - IL_005a: ldc.i4.3 - IL_005b: stfld int32 Linq101Aggregates01/averageNum@100::pc - IL_0060: ldarg.0 - IL_0061: ldc.r8 0.0 - IL_006a: stfld float64 Linq101Aggregates01/averageNum@100::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Aggregates01/averageNum@100::pc + IL_0068: ldarg.0 + IL_0069: ldc.r8 0.0 + IL_0072: stfld float64 Linq101Aggregates01/averageNum@100::current + IL_0077: ldnull + IL_0078: stloc.1 + IL_0079: leave.s IL_0087 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_007b: castclass [mscorlib]System.Exception + IL_0080: stloc.2 .line 100,100 : 26,46 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_0081: ldloc.2 + IL_0082: stloc.0 + IL_0083: ldnull + IL_0084: stloc.1 + IL_0085: leave.s IL_0087 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0087: ldloc.1 + IL_0088: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 + IL_0089: nop + IL_008a: br IL_0000 - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f + IL_008f: ldloc.0 + IL_0090: ldnull + IL_0091: cgt.un + IL_0093: brfalse.s IL_0097 + + IL_0095: br.s IL_0099 + + IL_0097: br.s IL_009b .line 100001,100001 : 0,0 '' - IL_008d: ldloc.0 - IL_008e: throw + IL_0099: ldloc.0 + IL_009a: throw .line 100001,100001 : 0,0 '' - IL_008f: ret + IL_009b: ret } // end of method averageNum@100::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/averageNum@100::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method averageNum@100::get_CheckClose .method public strict virtual instance float64 @@ -6426,7 +6794,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 149 (0x95) + // Code size 155 (0x9b) .maxstack 6 .locals init ([0] class [Utils]Utils/Product V_0, [1] class [Utils]Utils/Product x) @@ -6437,85 +6805,91 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006b + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0068 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008c + IL_0022: br.s IL_0071 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006e + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0092 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 115,115 : 36,49 '' - IL_0025: ldarg.0 - IL_0026: ldarg.0 - IL_0027: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/averagePrice@115::g - IL_002c: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0031: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' - IL_0036: ldarg.0 - IL_0037: ldc.i4.1 - IL_0038: stfld int32 Linq101Aggregates01/averagePrice@115::pc + IL_002b: ldarg.0 + IL_002c: ldarg.0 + IL_002d: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/averagePrice@115::g + IL_0032: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0037: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' + IL_003c: ldarg.0 + IL_003d: ldc.i4.1 + IL_003e: stfld int32 Linq101Aggregates01/averagePrice@115::pc .line 115,115 : 36,49 '' - IL_003d: ldarg.0 - IL_003e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' - IL_0043: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0048: brfalse.s IL_006b - - IL_004a: ldarg.0 - IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' - IL_0050: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0055: stloc.0 + IL_0043: ldarg.0 + IL_0044: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' + IL_0049: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004e: brfalse.s IL_0071 + + IL_0050: ldarg.0 + IL_0051: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' + IL_0056: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005b: stloc.0 .line 115,115 : 36,49 '' - IL_0056: ldloc.0 - IL_0057: stloc.1 + IL_005c: ldloc.0 + IL_005d: stloc.1 + IL_005e: ldarg.0 + IL_005f: ldc.i4.2 + IL_0060: stfld int32 Linq101Aggregates01/averagePrice@115::pc .line 115,115 : 50,71 '' - IL_0058: ldarg.0 - IL_0059: ldc.i4.2 - IL_005a: stfld int32 Linq101Aggregates01/averagePrice@115::pc - IL_005f: ldarg.0 - IL_0060: ldloc.1 - IL_0061: stfld class [Utils]Utils/Product Linq101Aggregates01/averagePrice@115::current - IL_0066: ldc.i4.1 - IL_0067: ret - - .line 100001,100001 : 0,0 '' - IL_0068: nop - IL_0069: br.s IL_003d - - IL_006b: ldarg.0 - IL_006c: ldc.i4.3 - IL_006d: stfld int32 Linq101Aggregates01/averagePrice@115::pc + IL_0065: ldarg.0 + IL_0066: ldloc.1 + IL_0067: stfld class [Utils]Utils/Product Linq101Aggregates01/averagePrice@115::current + IL_006c: ldc.i4.1 + IL_006d: ret + + .line 100001,100001 : 0,0 '' + IL_006e: nop + IL_006f: br.s IL_0043 + + IL_0071: ldarg.0 + IL_0072: ldc.i4.3 + IL_0073: stfld int32 Linq101Aggregates01/averagePrice@115::pc .line 115,115 : 36,49 '' - IL_0072: ldarg.0 - IL_0073: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' - IL_0078: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007d: nop - IL_007e: ldarg.0 - IL_007f: ldnull - IL_0080: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' - IL_0085: ldarg.0 - IL_0086: ldc.i4.3 - IL_0087: stfld int32 Linq101Aggregates01/averagePrice@115::pc - IL_008c: ldarg.0 - IL_008d: ldnull - IL_008e: stfld class [Utils]Utils/Product Linq101Aggregates01/averagePrice@115::current - IL_0093: ldc.i4.0 - IL_0094: ret + IL_0078: ldarg.0 + IL_0079: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' + IL_007e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0083: nop + IL_0084: ldarg.0 + IL_0085: ldnull + IL_0086: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' + IL_008b: ldarg.0 + IL_008c: ldc.i4.3 + IL_008d: stfld int32 Linq101Aggregates01/averagePrice@115::pc + IL_0092: ldarg.0 + IL_0093: ldnull + IL_0094: stfld class [Utils]Utils/Product Linq101Aggregates01/averagePrice@115::current + IL_0099: ldc.i4.0 + IL_009a: ret } // end of method averagePrice@115::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -6527,138 +6901,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Aggregates01/averagePrice@115::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Aggregates01/averagePrice@115::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Aggregates01/averagePrice@115::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Aggregates01/averagePrice@115::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Aggregates01/averagePrice@115::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld class [Utils]Utils/Product Linq101Aggregates01/averagePrice@115::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Aggregates01/averagePrice@115::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld class [Utils]Utils/Product Linq101Aggregates01/averagePrice@115::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 115,115 : 36,49 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method averagePrice@115::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/averagePrice@115::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method averagePrice@115::get_CheckClose .method public strict virtual instance class [Utils]Utils/Product @@ -6759,7 +7153,7 @@ .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,valuetype [mscorlib]System.Decimal>,object> Invoke(class [System.Core]System.Linq.IGrouping`2 _arg2) cil managed { - // Code size 222 (0xde) + // Code size 230 (0xe6) .maxstack 9 .locals init ([0] class [System.Core]System.Linq.IGrouping`2 g, [1] valuetype [mscorlib]System.Decimal averagePrice, @@ -6850,60 +7244,68 @@ IL_0080: br.s IL_0059 IL_0082: ldloc.s V_10 - IL_0084: brtrue.s IL_0091 + IL_0084: brtrue.s IL_0088 + + IL_0086: br.s IL_008a + + IL_0088: br.s IL_0095 .line 100001,100001 : 0,0 '' - IL_0086: ldstr "source" - IL_008b: newobj instance void [netstandard]System.InvalidOperationException::.ctor(string) - IL_0090: throw + IL_008a: ldstr "source" + IL_008f: newobj instance void [netstandard]System.InvalidOperationException::.ctor(string) + IL_0094: throw .line 100001,100001 : 0,0 '' - IL_0091: nop - IL_0092: ldloc.s V_9 - IL_0094: stloc.s V_11 - IL_0096: ldloc.s V_10 - IL_0098: stloc.s V_12 - IL_009a: ldloc.s V_11 - IL_009c: ldloc.s V_12 - IL_009e: call valuetype [netstandard]System.Decimal [netstandard]System.Convert::ToDecimal(int32) - IL_00a3: call valuetype [netstandard]System.Decimal [netstandard]System.Decimal::Divide(valuetype [netstandard]System.Decimal, + IL_0095: nop + IL_0096: ldloc.s V_9 + IL_0098: stloc.s V_11 + IL_009a: ldloc.s V_10 + IL_009c: stloc.s V_12 + IL_009e: ldloc.s V_11 + IL_00a0: ldloc.s V_12 + IL_00a2: call valuetype [netstandard]System.Decimal [netstandard]System.Convert::ToDecimal(int32) + IL_00a7: call valuetype [netstandard]System.Decimal [netstandard]System.Decimal::Divide(valuetype [netstandard]System.Decimal, valuetype [netstandard]System.Decimal) - IL_00a8: stloc.s V_8 - IL_00aa: leave.s IL_00c6 + IL_00ac: stloc.s V_8 + IL_00ae: leave.s IL_00ce } // end .try finally { - IL_00ac: ldloc.s V_7 - IL_00ae: isinst [mscorlib]System.IDisposable - IL_00b3: stloc.s V_13 - IL_00b5: ldloc.s V_13 - IL_00b7: brfalse.s IL_00c3 + IL_00b0: ldloc.s V_7 + IL_00b2: isinst [mscorlib]System.IDisposable + IL_00b7: stloc.s V_13 + IL_00b9: ldloc.s V_13 + IL_00bb: brfalse.s IL_00bf + + IL_00bd: br.s IL_00c1 + + IL_00bf: br.s IL_00cb .line 100001,100001 : 0,0 '' - IL_00b9: ldloc.s V_13 - IL_00bb: callvirt instance void [netstandard]System.IDisposable::Dispose() - IL_00c0: ldnull - IL_00c1: pop - IL_00c2: endfinally + IL_00c1: ldloc.s V_13 + IL_00c3: callvirt instance void [netstandard]System.IDisposable::Dispose() + IL_00c8: ldnull + IL_00c9: pop + IL_00ca: endfinally .line 100001,100001 : 0,0 '' - IL_00c3: ldnull - IL_00c4: pop - IL_00c5: endfinally + IL_00cb: ldnull + IL_00cc: pop + IL_00cd: endfinally .line 100001,100001 : 0,0 '' } // end handler - IL_00c6: ldloc.s V_8 - IL_00c8: stloc.1 + IL_00ce: ldloc.s V_8 + IL_00d0: stloc.1 .line 116,116 : 9,37 '' - IL_00c9: ldarg.0 - IL_00ca: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/'categories6@114-3'::builder@ - IL_00cf: ldloc.0 - IL_00d0: ldloc.1 - IL_00d1: newobj instance void class [mscorlib]System.Tuple`2,valuetype [mscorlib]System.Decimal>::.ctor(!0, + IL_00d1: ldarg.0 + IL_00d2: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/'categories6@114-3'::builder@ + IL_00d7: ldloc.0 + IL_00d8: ldloc.1 + IL_00d9: newobj instance void class [mscorlib]System.Tuple`2,valuetype [mscorlib]System.Decimal>::.ctor(!0, !1) - IL_00d6: tail. - IL_00d8: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Yield,valuetype [mscorlib]System.Decimal>,object>(!!0) - IL_00dd: ret + IL_00de: tail. + IL_00e0: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Yield,valuetype [mscorlib]System.Decimal>,object>(!!0) + IL_00e5: ret } // end of method 'categories6@114-3'::Invoke } // end of class 'categories6@114-3' @@ -7302,7 +7704,7 @@ .method public static void main@() cil managed { .entrypoint - // Code size 1741 (0x6cd) + // Code size 1765 (0x6e5) .maxstack 13 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 factorsOf300, [1] int32 uniqueFactors, @@ -7487,7 +7889,7 @@ IL_00f4: ldloc.s V_28 IL_00f6: stloc.s V_27 - IL_00f8: leave.s IL_0114 + IL_00f8: leave.s IL_0118 } // end .try finally @@ -7496,601 +7898,625 @@ IL_00fc: isinst [mscorlib]System.IDisposable IL_0101: stloc.s V_29 IL_0103: ldloc.s V_29 - IL_0105: brfalse.s IL_0111 + IL_0105: brfalse.s IL_0109 + + IL_0107: br.s IL_010b + + IL_0109: br.s IL_0115 .line 100001,100001 : 0,0 '' - IL_0107: ldloc.s V_29 - IL_0109: callvirt instance void [netstandard]System.IDisposable::Dispose() - IL_010e: ldnull - IL_010f: pop - IL_0110: endfinally + IL_010b: ldloc.s V_29 + IL_010d: callvirt instance void [netstandard]System.IDisposable::Dispose() + IL_0112: ldnull + IL_0113: pop + IL_0114: endfinally .line 100001,100001 : 0,0 '' - IL_0111: ldnull - IL_0112: pop - IL_0113: endfinally + IL_0115: ldnull + IL_0116: pop + IL_0117: endfinally .line 100001,100001 : 0,0 '' } // end handler - IL_0114: ldloc.s V_27 - IL_0116: dup - IL_0117: stsfld int32 ''.$Linq101Aggregates01::numSum@19 - IL_011c: stloc.3 + IL_0118: ldloc.s V_27 + IL_011a: dup + IL_011b: stsfld int32 ''.$Linq101Aggregates01::numSum@19 + IL_0120: stloc.3 .line 26,26 : 1,45 '' - IL_011d: ldstr "cherry" - IL_0122: ldstr "apple" - IL_0127: ldstr "blueberry" - IL_012c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() - IL_0131: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_0121: ldstr "cherry" + IL_0126: ldstr "apple" + IL_012b: ldstr "blueberry" + IL_0130: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() + IL_0135: 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_0136: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_013a: 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_013b: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_013f: 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_0140: dup - IL_0141: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Aggregates01::words@26 - IL_0146: stloc.s words - IL_0148: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_014d: stloc.s V_30 - IL_014f: ldloc.s V_30 - IL_0151: stloc.s V_31 - IL_0153: ldnull - IL_0154: ldc.i4.0 - IL_0155: ldnull - IL_0156: newobj instance void Linq101Aggregates01/totalChars@30::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + IL_0144: dup + IL_0145: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Aggregates01::words@26 + IL_014a: stloc.s words + IL_014c: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_0151: stloc.s V_30 + IL_0153: ldloc.s V_30 + IL_0155: stloc.s V_31 + IL_0157: ldnull + IL_0158: ldc.i4.0 + IL_0159: ldnull + IL_015a: newobj instance void Linq101Aggregates01/totalChars@30::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, int32, string) - IL_015b: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0160: stloc.s V_32 - IL_0162: ldsfld class Linq101Aggregates01/'totalChars@31-1' Linq101Aggregates01/'totalChars@31-1'::@_instance - IL_0167: stloc.s V_33 - IL_0169: ldloc.s V_32 - IL_016b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerable`1 class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::get_Source() - IL_0170: stloc.s V_34 - IL_0172: ldloc.s V_34 - IL_0174: callvirt instance class [netstandard]System.Collections.Generic.IEnumerator`1 class [netstandard]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0179: stloc.s V_35 + IL_015f: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0164: stloc.s V_32 + IL_0166: ldsfld class Linq101Aggregates01/'totalChars@31-1' Linq101Aggregates01/'totalChars@31-1'::@_instance + IL_016b: stloc.s V_33 + IL_016d: ldloc.s V_32 + IL_016f: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerable`1 class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::get_Source() + IL_0174: stloc.s V_34 + IL_0176: ldloc.s V_34 + IL_0178: callvirt instance class [netstandard]System.Collections.Generic.IEnumerator`1 class [netstandard]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_017d: stloc.s V_35 .try { - IL_017b: ldc.i4.0 - IL_017c: stloc.s V_37 - IL_017e: ldloc.s V_35 - IL_0180: callvirt instance bool [netstandard]System.Collections.IEnumerator::MoveNext() - IL_0185: brfalse.s IL_019d + IL_017f: ldc.i4.0 + IL_0180: stloc.s V_37 + IL_0182: ldloc.s V_35 + IL_0184: callvirt instance bool [netstandard]System.Collections.IEnumerator::MoveNext() + IL_0189: brfalse.s IL_01a1 .line 31,31 : 9,25 '' - IL_0187: ldloc.s V_37 - IL_0189: ldloc.s V_33 - IL_018b: ldloc.s V_35 - IL_018d: callvirt instance !0 class [netstandard]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0192: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) - IL_0197: add.ovf - IL_0198: stloc.s V_37 + IL_018b: ldloc.s V_37 + IL_018d: ldloc.s V_33 + IL_018f: ldloc.s V_35 + IL_0191: callvirt instance !0 class [netstandard]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0196: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_019b: add.ovf + IL_019c: stloc.s V_37 .line 100001,100001 : 0,0 '' - IL_019a: nop - IL_019b: br.s IL_017e + IL_019e: nop + IL_019f: br.s IL_0182 - IL_019d: ldloc.s V_37 - IL_019f: stloc.s V_36 - IL_01a1: leave.s IL_01bd + IL_01a1: ldloc.s V_37 + IL_01a3: stloc.s V_36 + IL_01a5: leave.s IL_01c5 } // end .try finally { - IL_01a3: ldloc.s V_35 - IL_01a5: isinst [mscorlib]System.IDisposable - IL_01aa: stloc.s V_38 - IL_01ac: ldloc.s V_38 - IL_01ae: brfalse.s IL_01ba + IL_01a7: ldloc.s V_35 + IL_01a9: isinst [mscorlib]System.IDisposable + IL_01ae: stloc.s V_38 + IL_01b0: ldloc.s V_38 + IL_01b2: brfalse.s IL_01b6 + + IL_01b4: br.s IL_01b8 + + IL_01b6: br.s IL_01c2 .line 100001,100001 : 0,0 '' - IL_01b0: ldloc.s V_38 - IL_01b2: callvirt instance void [netstandard]System.IDisposable::Dispose() - IL_01b7: ldnull - IL_01b8: pop - IL_01b9: endfinally + IL_01b8: ldloc.s V_38 + IL_01ba: callvirt instance void [netstandard]System.IDisposable::Dispose() + IL_01bf: ldnull + IL_01c0: pop + IL_01c1: endfinally .line 100001,100001 : 0,0 '' - IL_01ba: ldnull - IL_01bb: pop - IL_01bc: endfinally + IL_01c2: ldnull + IL_01c3: pop + IL_01c4: endfinally .line 100001,100001 : 0,0 '' } // end handler - IL_01bd: ldloc.s V_36 - IL_01bf: dup - IL_01c0: stsfld int32 ''.$Linq101Aggregates01::totalChars@28 - IL_01c5: stloc.s totalChars + IL_01c5: ldloc.s V_36 + IL_01c7: dup + IL_01c8: stsfld int32 ''.$Linq101Aggregates01::totalChars@28 + IL_01cd: stloc.s totalChars .line 35,35 : 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 ''.$Linq101Aggregates01::products@35 - IL_01d2: stloc.s products + IL_01cf: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [Utils]Utils::getProductList() + IL_01d4: dup + IL_01d5: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Aggregates01::products@35 + IL_01da: stloc.s products .line 37,46 : 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_39 - IL_01db: ldloc.s V_39 - IL_01dd: ldloc.s V_39 - IL_01df: ldloc.s V_39 - IL_01e1: ldloc.s V_39 + IL_01dc: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_01e1: stloc.s V_39 IL_01e3: ldloc.s V_39 - IL_01e5: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() - IL_01ea: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_01ef: ldloc.s V_39 - IL_01f1: newobj instance void Linq101Aggregates01/categories@39::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_01f6: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_01e5: ldloc.s V_39 + IL_01e7: ldloc.s V_39 + IL_01e9: ldloc.s V_39 + IL_01eb: ldloc.s V_39 + IL_01ed: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() + IL_01f2: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_01f7: ldloc.s V_39 + IL_01f9: newobj instance void Linq101Aggregates01/categories@39::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_01fe: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_01fb: ldsfld class Linq101Aggregates01/'categories@40-1' Linq101Aggregates01/'categories@40-1'::@_instance - IL_0200: ldsfld class Linq101Aggregates01/'categories@40-2' Linq101Aggregates01/'categories@40-2'::@_instance - IL_0205: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0203: ldsfld class Linq101Aggregates01/'categories@40-1' Linq101Aggregates01/'categories@40-1'::@_instance + IL_0208: ldsfld class Linq101Aggregates01/'categories@40-2' Linq101Aggregates01/'categories@40-2'::@_instance + IL_020d: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_020a: ldloc.s V_39 - IL_020c: newobj instance void Linq101Aggregates01/'categories@40-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_0211: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2,int32>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0212: ldloc.s V_39 + IL_0214: newobj instance void Linq101Aggregates01/'categories@40-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_0219: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2,int32>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0216: ldsfld class Linq101Aggregates01/'categories@45-4' Linq101Aggregates01/'categories@45-4'::@_instance - IL_021b: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,int32>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_021e: ldsfld class Linq101Aggregates01/'categories@45-4' Linq101Aggregates01/'categories@45-4'::@_instance + IL_0223: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,int32>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0220: 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_0225: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_022a: dup - IL_022b: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Aggregates01::categories@37 - IL_0230: stloc.s categories - IL_0232: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_0237: ldnull - IL_0238: ldc.i4.0 - IL_0239: ldc.i4.0 - IL_023a: newobj instance void Linq101Aggregates01/minNum@49::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + IL_0228: 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_022d: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0232: dup + IL_0233: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Aggregates01::categories@37 + IL_0238: stloc.s categories + IL_023a: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_023f: ldnull + IL_0240: ldc.i4.0 + IL_0241: ldc.i4.0 + IL_0242: newobj instance void Linq101Aggregates01/minNum@49::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, int32, int32) - IL_023f: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0244: ldsfld class Linq101Aggregates01/'minNum@49-1' Linq101Aggregates01/'minNum@49-1'::@_instance - IL_0249: callvirt instance !!2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::MinBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0247: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_024c: ldsfld class Linq101Aggregates01/'minNum@49-1' Linq101Aggregates01/'minNum@49-1'::@_instance + IL_0251: 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_024e: dup - IL_024f: stsfld int32 ''.$Linq101Aggregates01::minNum@49 - IL_0254: stloc.s minNum - IL_0256: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_025b: ldnull - IL_025c: ldc.i4.0 - IL_025d: ldnull - IL_025e: newobj instance void Linq101Aggregates01/shortestWord@52::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + IL_0256: dup + IL_0257: stsfld int32 ''.$Linq101Aggregates01::minNum@49 + IL_025c: stloc.s minNum + IL_025e: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_0263: ldnull + IL_0264: ldc.i4.0 + IL_0265: ldnull + IL_0266: newobj instance void Linq101Aggregates01/shortestWord@52::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, int32, string) - IL_0263: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0268: ldsfld class Linq101Aggregates01/'shortestWord@52-1' Linq101Aggregates01/'shortestWord@52-1'::@_instance - IL_026d: callvirt instance !!2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::MinBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_026b: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0270: ldsfld class Linq101Aggregates01/'shortestWord@52-1' Linq101Aggregates01/'shortestWord@52-1'::@_instance + IL_0275: 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_0272: dup - IL_0273: stsfld int32 ''.$Linq101Aggregates01::shortestWord@52 - IL_0278: stloc.s shortestWord + IL_027a: dup + IL_027b: stsfld int32 ''.$Linq101Aggregates01::shortestWord@52 + IL_0280: stloc.s shortestWord .line 55,61 : 1,21 '' - IL_027a: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_027f: stloc.s V_40 - IL_0281: ldloc.s V_40 - IL_0283: ldloc.s V_40 - IL_0285: ldloc.s V_40 - IL_0287: ldloc.s V_40 + IL_0282: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_0287: stloc.s V_40 IL_0289: ldloc.s V_40 - IL_028b: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() - IL_0290: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0295: ldloc.s V_40 - IL_0297: newobj instance void Linq101Aggregates01/categories2@57::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_029c: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_028b: ldloc.s V_40 + IL_028d: ldloc.s V_40 + IL_028f: ldloc.s V_40 + IL_0291: ldloc.s V_40 + IL_0293: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() + IL_0298: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_029d: ldloc.s V_40 + IL_029f: newobj instance void Linq101Aggregates01/categories2@57::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_02a4: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_02a1: ldsfld class Linq101Aggregates01/'categories2@58-1' Linq101Aggregates01/'categories2@58-1'::@_instance - IL_02a6: ldsfld class Linq101Aggregates01/'categories2@58-2' Linq101Aggregates01/'categories2@58-2'::@_instance - IL_02ab: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_02a9: ldsfld class Linq101Aggregates01/'categories2@58-1' Linq101Aggregates01/'categories2@58-1'::@_instance + IL_02ae: ldsfld class Linq101Aggregates01/'categories2@58-2' Linq101Aggregates01/'categories2@58-2'::@_instance + IL_02b3: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_02b0: ldloc.s V_40 - IL_02b2: newobj instance void Linq101Aggregates01/'categories2@58-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_02b7: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2,valuetype [mscorlib]System.Decimal>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_02b8: ldloc.s V_40 + IL_02ba: newobj instance void Linq101Aggregates01/'categories2@58-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_02bf: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2,valuetype [mscorlib]System.Decimal>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_02bc: ldsfld class Linq101Aggregates01/'categories2@60-4' Linq101Aggregates01/'categories2@60-4'::@_instance - IL_02c1: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,valuetype [mscorlib]System.Decimal>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_02c4: ldsfld class Linq101Aggregates01/'categories2@60-4' Linq101Aggregates01/'categories2@60-4'::@_instance + IL_02c9: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,valuetype [mscorlib]System.Decimal>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_02c6: 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_02cb: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_02d0: dup - IL_02d1: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Aggregates01::categories2@55 - IL_02d6: stloc.s categories2 + IL_02ce: 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_02d3: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_02d8: dup + IL_02d9: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Aggregates01::categories2@55 + IL_02de: stloc.s categories2 .line 64,71 : 1,21 '' - IL_02d8: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_02dd: stloc.s V_41 - IL_02df: ldloc.s V_41 - IL_02e1: ldloc.s V_41 - IL_02e3: ldloc.s V_41 - IL_02e5: ldloc.s V_41 + IL_02e0: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_02e5: stloc.s V_41 IL_02e7: ldloc.s V_41 - IL_02e9: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() - IL_02ee: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_02f3: ldloc.s V_41 - IL_02f5: newobj instance void Linq101Aggregates01/categories3@66::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_02fa: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_02e9: ldloc.s V_41 + IL_02eb: ldloc.s V_41 + IL_02ed: ldloc.s V_41 + IL_02ef: ldloc.s V_41 + IL_02f1: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() + IL_02f6: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_02fb: ldloc.s V_41 + IL_02fd: newobj instance void Linq101Aggregates01/categories3@66::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_0302: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_02ff: ldsfld class Linq101Aggregates01/'categories3@67-1' Linq101Aggregates01/'categories3@67-1'::@_instance - IL_0304: ldsfld class Linq101Aggregates01/'categories3@67-2' Linq101Aggregates01/'categories3@67-2'::@_instance - IL_0309: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0307: ldsfld class Linq101Aggregates01/'categories3@67-1' Linq101Aggregates01/'categories3@67-1'::@_instance + IL_030c: ldsfld class Linq101Aggregates01/'categories3@67-2' Linq101Aggregates01/'categories3@67-2'::@_instance + IL_0311: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_030e: ldloc.s V_41 - IL_0310: newobj instance void Linq101Aggregates01/'categories3@67-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_0315: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`3,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0316: ldloc.s V_41 + IL_0318: newobj instance void Linq101Aggregates01/'categories3@67-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_031d: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`3,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_031a: ldsfld class Linq101Aggregates01/'categories3@70-4' Linq101Aggregates01/'categories3@70-4'::@_instance - IL_031f: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0322: ldsfld class Linq101Aggregates01/'categories3@70-4' Linq101Aggregates01/'categories3@70-4'::@_instance + IL_0327: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0324: 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_0329: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>>(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_032e: dup - IL_032f: stsfld class [mscorlib]System.Tuple`2>[] ''.$Linq101Aggregates01::categories3@64 - IL_0334: stloc.s categories3 - IL_0336: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_033b: ldnull - IL_033c: ldc.i4.0 - IL_033d: ldc.i4.0 - IL_033e: newobj instance void Linq101Aggregates01/maxNum@74::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + IL_032c: 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_0331: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>>(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0336: dup + IL_0337: stsfld class [mscorlib]System.Tuple`2>[] ''.$Linq101Aggregates01::categories3@64 + IL_033c: stloc.s categories3 + IL_033e: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_0343: ldnull + IL_0344: ldc.i4.0 + IL_0345: ldc.i4.0 + IL_0346: newobj instance void Linq101Aggregates01/maxNum@74::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, int32, int32) - IL_0343: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0348: ldsfld class Linq101Aggregates01/'maxNum@74-1' Linq101Aggregates01/'maxNum@74-1'::@_instance - IL_034d: callvirt instance !!2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::MaxBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_034b: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0350: ldsfld class Linq101Aggregates01/'maxNum@74-1' Linq101Aggregates01/'maxNum@74-1'::@_instance + IL_0355: 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_0352: dup - IL_0353: stsfld int32 ''.$Linq101Aggregates01::maxNum@74 - IL_0358: stloc.s maxNum - IL_035a: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_035f: ldnull - IL_0360: ldc.i4.0 - IL_0361: ldnull - IL_0362: newobj instance void Linq101Aggregates01/longestLength@77::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + IL_035a: dup + IL_035b: stsfld int32 ''.$Linq101Aggregates01::maxNum@74 + IL_0360: stloc.s maxNum + IL_0362: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_0367: ldnull + IL_0368: ldc.i4.0 + IL_0369: ldnull + IL_036a: newobj instance void Linq101Aggregates01/longestLength@77::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, int32, string) - IL_0367: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_036c: ldsfld class Linq101Aggregates01/'longestLength@77-1' Linq101Aggregates01/'longestLength@77-1'::@_instance - IL_0371: callvirt instance !!2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::MaxBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_036f: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0374: ldsfld class Linq101Aggregates01/'longestLength@77-1' Linq101Aggregates01/'longestLength@77-1'::@_instance + IL_0379: 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_0376: dup - IL_0377: stsfld int32 ''.$Linq101Aggregates01::longestLength@77 - IL_037c: stloc.s longestLength + IL_037e: dup + IL_037f: stsfld int32 ''.$Linq101Aggregates01::longestLength@77 + IL_0384: stloc.s longestLength .line 80,86 : 1,21 '' - IL_037e: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_0383: stloc.s V_42 - IL_0385: ldloc.s V_42 - IL_0387: ldloc.s V_42 - IL_0389: ldloc.s V_42 - IL_038b: ldloc.s V_42 + IL_0386: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_038b: stloc.s V_42 IL_038d: ldloc.s V_42 - IL_038f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() - IL_0394: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0399: ldloc.s V_42 - IL_039b: newobj instance void Linq101Aggregates01/categories4@82::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_03a0: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_038f: ldloc.s V_42 + IL_0391: ldloc.s V_42 + IL_0393: ldloc.s V_42 + IL_0395: ldloc.s V_42 + IL_0397: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() + IL_039c: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_03a1: ldloc.s V_42 + IL_03a3: newobj instance void Linq101Aggregates01/categories4@82::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_03a8: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_03a5: ldsfld class Linq101Aggregates01/'categories4@83-1' Linq101Aggregates01/'categories4@83-1'::@_instance - IL_03aa: ldsfld class Linq101Aggregates01/'categories4@83-2' Linq101Aggregates01/'categories4@83-2'::@_instance - IL_03af: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_03ad: ldsfld class Linq101Aggregates01/'categories4@83-1' Linq101Aggregates01/'categories4@83-1'::@_instance + IL_03b2: ldsfld class Linq101Aggregates01/'categories4@83-2' Linq101Aggregates01/'categories4@83-2'::@_instance + IL_03b7: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_03b4: ldloc.s V_42 - IL_03b6: newobj instance void Linq101Aggregates01/'categories4@83-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_03bb: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2,valuetype [mscorlib]System.Decimal>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_03bc: ldloc.s V_42 + IL_03be: newobj instance void Linq101Aggregates01/'categories4@83-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_03c3: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2,valuetype [mscorlib]System.Decimal>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_03c0: ldsfld class Linq101Aggregates01/'categories4@85-4' Linq101Aggregates01/'categories4@85-4'::@_instance - IL_03c5: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,valuetype [mscorlib]System.Decimal>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_03c8: ldsfld class Linq101Aggregates01/'categories4@85-4' Linq101Aggregates01/'categories4@85-4'::@_instance + IL_03cd: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,valuetype [mscorlib]System.Decimal>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_03ca: 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_03cf: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_03d4: dup - IL_03d5: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Aggregates01::categories4@80 - IL_03da: stloc.s categories4 + IL_03d2: 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_03d7: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_03dc: dup + IL_03dd: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Aggregates01::categories4@80 + IL_03e2: stloc.s categories4 .line 89,96 : 1,21 '' - IL_03dc: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_03e1: stloc.s V_43 - IL_03e3: ldloc.s V_43 - IL_03e5: ldloc.s V_43 - IL_03e7: ldloc.s V_43 - IL_03e9: ldloc.s V_43 + IL_03e4: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_03e9: stloc.s V_43 IL_03eb: ldloc.s V_43 - IL_03ed: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() - IL_03f2: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_03f7: ldloc.s V_43 - IL_03f9: newobj instance void Linq101Aggregates01/categories5@91::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_03fe: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_03ed: ldloc.s V_43 + IL_03ef: ldloc.s V_43 + IL_03f1: ldloc.s V_43 + IL_03f3: ldloc.s V_43 + IL_03f5: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() + IL_03fa: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_03ff: ldloc.s V_43 + IL_0401: newobj instance void Linq101Aggregates01/categories5@91::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_0406: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0403: ldsfld class Linq101Aggregates01/'categories5@92-1' Linq101Aggregates01/'categories5@92-1'::@_instance - IL_0408: ldsfld class Linq101Aggregates01/'categories5@92-2' Linq101Aggregates01/'categories5@92-2'::@_instance - IL_040d: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_040b: ldsfld class Linq101Aggregates01/'categories5@92-1' Linq101Aggregates01/'categories5@92-1'::@_instance + IL_0410: ldsfld class Linq101Aggregates01/'categories5@92-2' Linq101Aggregates01/'categories5@92-2'::@_instance + IL_0415: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0412: ldloc.s V_43 - IL_0414: newobj instance void Linq101Aggregates01/'categories5@92-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_0419: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`3,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_041a: ldloc.s V_43 + IL_041c: newobj instance void Linq101Aggregates01/'categories5@92-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_0421: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`3,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_041e: ldsfld class Linq101Aggregates01/'categories5@95-4' Linq101Aggregates01/'categories5@95-4'::@_instance - IL_0423: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0426: ldsfld class Linq101Aggregates01/'categories5@95-4' Linq101Aggregates01/'categories5@95-4'::@_instance + IL_042b: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0428: 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_042d: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>>(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0432: dup - IL_0433: stsfld class [mscorlib]System.Tuple`2>[] ''.$Linq101Aggregates01::categories5@89 - IL_0438: stloc.s categories5 + IL_0430: 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_0435: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>>(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_043a: dup + IL_043b: stsfld class [mscorlib]System.Tuple`2>[] ''.$Linq101Aggregates01::categories5@89 + IL_0440: stloc.s categories5 .line 99,99 : 1,66 '' - IL_043a: ldc.r8 5. - IL_0443: ldc.r8 4. - IL_044c: ldc.r8 1. - IL_0455: ldc.r8 3. - IL_045e: ldc.r8 9. - IL_0467: ldc.r8 8. - IL_0470: ldc.r8 6. - IL_0479: ldc.r8 7. - IL_0482: ldc.r8 2. - IL_048b: ldc.r8 0.0 - IL_0494: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() - IL_0499: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_0442: ldc.r8 5. + IL_044b: ldc.r8 4. + IL_0454: ldc.r8 1. + IL_045d: ldc.r8 3. + IL_0466: ldc.r8 9. + IL_046f: ldc.r8 8. + IL_0478: ldc.r8 6. + IL_0481: ldc.r8 7. + IL_048a: ldc.r8 2. + IL_0493: ldc.r8 0.0 + IL_049c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() + IL_04a1: 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_049e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_04a6: 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_04a3: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_04ab: 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_04a8: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_04b0: 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_04ad: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_04b5: 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_04b2: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_04ba: 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_04b7: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_04bf: 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_04bc: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_04c4: 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_04c1: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_04c9: 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_04c6: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_04ce: 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_04cb: dup - IL_04cc: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Aggregates01::numbers2@99 - IL_04d1: stloc.s numbers2 - IL_04d3: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_04d8: stloc.s V_44 - IL_04da: ldloc.s V_44 - IL_04dc: stloc.s V_45 - IL_04de: ldnull - IL_04df: ldc.i4.0 - IL_04e0: ldc.r8 0.0 - IL_04e9: newobj instance void Linq101Aggregates01/averageNum@100::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + IL_04d3: dup + IL_04d4: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Aggregates01::numbers2@99 + IL_04d9: stloc.s numbers2 + IL_04db: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_04e0: stloc.s V_44 + IL_04e2: ldloc.s V_44 + IL_04e4: stloc.s V_45 + IL_04e6: ldnull + IL_04e7: ldc.i4.0 + IL_04e8: ldc.r8 0.0 + IL_04f1: newobj instance void Linq101Aggregates01/averageNum@100::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, int32, float64) - IL_04ee: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_04f3: stloc.s V_46 - IL_04f5: ldsfld class Linq101Aggregates01/'averageNum@100-1' Linq101Aggregates01/'averageNum@100-1'::@_instance - IL_04fa: stloc.s V_47 - IL_04fc: ldloc.s V_46 - IL_04fe: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerable`1 class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::get_Source() - IL_0503: stloc.s V_48 - IL_0505: ldloc.s V_48 - IL_0507: box class [mscorlib]System.Collections.Generic.IEnumerable`1 - IL_050c: brfalse.s IL_0510 - - IL_050e: br.s IL_051b + IL_04f6: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_04fb: stloc.s V_46 + IL_04fd: ldsfld class Linq101Aggregates01/'averageNum@100-1' Linq101Aggregates01/'averageNum@100-1'::@_instance + IL_0502: stloc.s V_47 + IL_0504: ldloc.s V_46 + IL_0506: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerable`1 class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::get_Source() + IL_050b: stloc.s V_48 + IL_050d: ldloc.s V_48 + IL_050f: box class [mscorlib]System.Collections.Generic.IEnumerable`1 + IL_0514: brfalse.s IL_0518 + + IL_0516: br.s IL_0523 .line 100001,100001 : 0,0 '' - IL_0510: ldstr "source" - IL_0515: newobj instance void [netstandard]System.ArgumentNullException::.ctor(string) - IL_051a: throw + IL_0518: ldstr "source" + IL_051d: newobj instance void [netstandard]System.ArgumentNullException::.ctor(string) + IL_0522: throw .line 100001,100001 : 0,0 '' - IL_051b: nop - IL_051c: ldloc.s V_48 - IL_051e: callvirt instance class [netstandard]System.Collections.Generic.IEnumerator`1 class [netstandard]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0523: stloc.s V_49 + IL_0523: nop + IL_0524: ldloc.s V_48 + IL_0526: callvirt instance class [netstandard]System.Collections.Generic.IEnumerator`1 class [netstandard]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_052b: stloc.s V_49 .try { - IL_0525: ldc.r8 0.0 - IL_052e: stloc.s V_51 - IL_0530: ldc.i4.0 - IL_0531: stloc.s V_52 - IL_0533: ldloc.s V_49 - IL_0535: callvirt instance bool [netstandard]System.Collections.IEnumerator::MoveNext() - IL_053a: brfalse.s IL_0558 - - IL_053c: ldloc.s V_51 - IL_053e: ldloc.s V_47 - IL_0540: ldloc.s V_49 - IL_0542: callvirt instance !0 class [netstandard]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0547: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) - IL_054c: add - IL_054d: stloc.s V_51 + IL_052d: ldc.r8 0.0 + IL_0536: stloc.s V_51 + IL_0538: ldc.i4.0 + IL_0539: stloc.s V_52 + IL_053b: ldloc.s V_49 + IL_053d: callvirt instance bool [netstandard]System.Collections.IEnumerator::MoveNext() + IL_0542: brfalse.s IL_0560 + + IL_0544: ldloc.s V_51 + IL_0546: ldloc.s V_47 + IL_0548: ldloc.s V_49 + IL_054a: callvirt instance !0 class [netstandard]System.Collections.Generic.IEnumerator`1::get_Current() + IL_054f: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0554: add + IL_0555: stloc.s V_51 .line 100,100 : 47,58 '' - IL_054f: ldloc.s V_52 - IL_0551: ldc.i4.1 - IL_0552: add - IL_0553: stloc.s V_52 + IL_0557: ldloc.s V_52 + IL_0559: ldc.i4.1 + IL_055a: add + IL_055b: stloc.s V_52 .line 100001,100001 : 0,0 '' - IL_0555: nop - IL_0556: br.s IL_0533 + IL_055d: nop + IL_055e: br.s IL_053b - IL_0558: ldloc.s V_52 - IL_055a: brtrue.s IL_0567 + IL_0560: ldloc.s V_52 + IL_0562: brtrue.s IL_0566 + + IL_0564: br.s IL_0568 + + IL_0566: br.s IL_0573 .line 100001,100001 : 0,0 '' - IL_055c: ldstr "source" - IL_0561: newobj instance void [netstandard]System.InvalidOperationException::.ctor(string) - IL_0566: throw + IL_0568: ldstr "source" + IL_056d: newobj instance void [netstandard]System.InvalidOperationException::.ctor(string) + IL_0572: throw .line 100001,100001 : 0,0 '' - IL_0567: nop - IL_0568: ldloc.s V_51 - IL_056a: stloc.s V_53 - IL_056c: ldloc.s V_52 - IL_056e: stloc.s V_54 - IL_0570: ldloc.s V_53 - IL_0572: ldloc.s V_54 - IL_0574: conv.r8 - IL_0575: div - IL_0576: stloc.s V_50 - IL_0578: leave.s IL_0594 + IL_0573: nop + IL_0574: ldloc.s V_51 + IL_0576: stloc.s V_53 + IL_0578: ldloc.s V_52 + IL_057a: stloc.s V_54 + IL_057c: ldloc.s V_53 + IL_057e: ldloc.s V_54 + IL_0580: conv.r8 + IL_0581: div + IL_0582: stloc.s V_50 + IL_0584: leave.s IL_05a4 } // end .try finally { - IL_057a: ldloc.s V_49 - IL_057c: isinst [mscorlib]System.IDisposable - IL_0581: stloc.s V_55 - IL_0583: ldloc.s V_55 - IL_0585: brfalse.s IL_0591 + IL_0586: ldloc.s V_49 + IL_0588: isinst [mscorlib]System.IDisposable + IL_058d: stloc.s V_55 + IL_058f: ldloc.s V_55 + IL_0591: brfalse.s IL_0595 + + IL_0593: br.s IL_0597 + + IL_0595: br.s IL_05a1 .line 100001,100001 : 0,0 '' - IL_0587: ldloc.s V_55 - IL_0589: callvirt instance void [netstandard]System.IDisposable::Dispose() - IL_058e: ldnull - IL_058f: pop - IL_0590: endfinally + IL_0597: ldloc.s V_55 + IL_0599: callvirt instance void [netstandard]System.IDisposable::Dispose() + IL_059e: ldnull + IL_059f: pop + IL_05a0: endfinally .line 100001,100001 : 0,0 '' - IL_0591: ldnull - IL_0592: pop - IL_0593: endfinally + IL_05a1: ldnull + IL_05a2: pop + IL_05a3: endfinally .line 100001,100001 : 0,0 '' } // end handler - IL_0594: ldloc.s V_50 - IL_0596: dup - IL_0597: stsfld float64 ''.$Linq101Aggregates01::averageNum@100 - IL_059c: stloc.s averageNum - IL_059e: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_05a3: stloc.s V_56 - IL_05a5: ldloc.s V_56 - IL_05a7: stloc.s V_57 - IL_05a9: ldloc.s V_56 - IL_05ab: ldloc.s V_56 - IL_05ad: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_words() - IL_05b2: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_05b7: ldloc.s V_56 - IL_05b9: newobj instance void Linq101Aggregates01/averageLength@105::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_05be: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_05a4: ldloc.s V_50 + IL_05a6: dup + IL_05a7: stsfld float64 ''.$Linq101Aggregates01::averageNum@100 + IL_05ac: stloc.s averageNum + IL_05ae: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_05b3: stloc.s V_56 + IL_05b5: ldloc.s V_56 + IL_05b7: stloc.s V_57 + IL_05b9: ldloc.s V_56 + IL_05bb: ldloc.s V_56 + IL_05bd: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_words() + IL_05c2: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_05c7: ldloc.s V_56 + IL_05c9: newobj instance void Linq101Aggregates01/averageLength@105::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_05ce: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_05c3: stloc.s V_58 - IL_05c5: ldsfld class Linq101Aggregates01/'averageLength@107-1' Linq101Aggregates01/'averageLength@107-1'::@_instance - IL_05ca: stloc.s V_59 - IL_05cc: ldloc.s V_58 - IL_05ce: 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_05d3: stloc.s V_60 - IL_05d5: ldloc.s V_60 - IL_05d7: box class [mscorlib]System.Collections.Generic.IEnumerable`1> - IL_05dc: brfalse.s IL_05e0 - - IL_05de: br.s IL_05eb + IL_05d3: stloc.s V_58 + IL_05d5: ldsfld class Linq101Aggregates01/'averageLength@107-1' Linq101Aggregates01/'averageLength@107-1'::@_instance + IL_05da: stloc.s V_59 + IL_05dc: ldloc.s V_58 + IL_05de: 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_05e3: stloc.s V_60 + IL_05e5: ldloc.s V_60 + IL_05e7: box class [mscorlib]System.Collections.Generic.IEnumerable`1> + IL_05ec: brfalse.s IL_05f0 + + IL_05ee: br.s IL_05fb .line 100001,100001 : 0,0 '' - IL_05e0: ldstr "source" - IL_05e5: newobj instance void [netstandard]System.ArgumentNullException::.ctor(string) - IL_05ea: throw + IL_05f0: ldstr "source" + IL_05f5: newobj instance void [netstandard]System.ArgumentNullException::.ctor(string) + IL_05fa: throw .line 100001,100001 : 0,0 '' - IL_05eb: nop - IL_05ec: ldloc.s V_60 - IL_05ee: callvirt instance class [netstandard]System.Collections.Generic.IEnumerator`1 class [netstandard]System.Collections.Generic.IEnumerable`1>::GetEnumerator() - IL_05f3: stloc.s V_61 + IL_05fb: nop + IL_05fc: ldloc.s V_60 + IL_05fe: callvirt instance class [netstandard]System.Collections.Generic.IEnumerator`1 class [netstandard]System.Collections.Generic.IEnumerable`1>::GetEnumerator() + IL_0603: stloc.s V_61 .try { - IL_05f5: ldc.r8 0.0 - IL_05fe: stloc.s V_63 - IL_0600: ldc.i4.0 - IL_0601: stloc.s V_64 - IL_0603: ldloc.s V_61 - IL_0605: callvirt instance bool [netstandard]System.Collections.IEnumerator::MoveNext() - IL_060a: brfalse.s IL_0628 - - IL_060c: ldloc.s V_63 - IL_060e: ldloc.s V_59 - IL_0610: ldloc.s V_61 - IL_0612: callvirt instance !0 class [netstandard]System.Collections.Generic.IEnumerator`1>::get_Current() - IL_0617: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,float64>::Invoke(!0) - IL_061c: add - IL_061d: stloc.s V_63 + IL_0605: ldc.r8 0.0 + IL_060e: stloc.s V_63 + IL_0610: ldc.i4.0 + IL_0611: stloc.s V_64 + IL_0613: ldloc.s V_61 + IL_0615: callvirt instance bool [netstandard]System.Collections.IEnumerator::MoveNext() + IL_061a: brfalse.s IL_0638 + + IL_061c: ldloc.s V_63 + IL_061e: ldloc.s V_59 + IL_0620: ldloc.s V_61 + IL_0622: callvirt instance !0 class [netstandard]System.Collections.Generic.IEnumerator`1>::get_Current() + IL_0627: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,float64>::Invoke(!0) + IL_062c: add + IL_062d: stloc.s V_63 .line 107,107 : 9,21 '' - IL_061f: ldloc.s V_64 - IL_0621: ldc.i4.1 - IL_0622: add - IL_0623: stloc.s V_64 + IL_062f: ldloc.s V_64 + IL_0631: ldc.i4.1 + IL_0632: add + IL_0633: stloc.s V_64 .line 100001,100001 : 0,0 '' - IL_0625: nop - IL_0626: br.s IL_0603 + IL_0635: nop + IL_0636: br.s IL_0613 - IL_0628: ldloc.s V_64 - IL_062a: brtrue.s IL_0637 + IL_0638: ldloc.s V_64 + IL_063a: brtrue.s IL_063e + + IL_063c: br.s IL_0640 + + IL_063e: br.s IL_064b .line 100001,100001 : 0,0 '' - IL_062c: ldstr "source" - IL_0631: newobj instance void [netstandard]System.InvalidOperationException::.ctor(string) - IL_0636: throw + IL_0640: ldstr "source" + IL_0645: newobj instance void [netstandard]System.InvalidOperationException::.ctor(string) + IL_064a: throw .line 100001,100001 : 0,0 '' - IL_0637: nop - IL_0638: ldloc.s V_63 - IL_063a: stloc.s V_65 - IL_063c: ldloc.s V_64 - IL_063e: stloc.s V_66 - IL_0640: ldloc.s V_65 - IL_0642: ldloc.s V_66 - IL_0644: conv.r8 - IL_0645: div - IL_0646: stloc.s V_62 - IL_0648: leave.s IL_0664 + IL_064b: nop + IL_064c: ldloc.s V_63 + IL_064e: stloc.s V_65 + IL_0650: ldloc.s V_64 + IL_0652: stloc.s V_66 + IL_0654: ldloc.s V_65 + IL_0656: ldloc.s V_66 + IL_0658: conv.r8 + IL_0659: div + IL_065a: stloc.s V_62 + IL_065c: leave.s IL_067c } // end .try finally { - IL_064a: ldloc.s V_61 - IL_064c: isinst [mscorlib]System.IDisposable - IL_0651: stloc.s V_67 - IL_0653: ldloc.s V_67 - IL_0655: brfalse.s IL_0661 + IL_065e: ldloc.s V_61 + IL_0660: isinst [mscorlib]System.IDisposable + IL_0665: stloc.s V_67 + IL_0667: ldloc.s V_67 + IL_0669: brfalse.s IL_066d + + IL_066b: br.s IL_066f + + IL_066d: br.s IL_0679 .line 100001,100001 : 0,0 '' - IL_0657: ldloc.s V_67 - IL_0659: callvirt instance void [netstandard]System.IDisposable::Dispose() - IL_065e: ldnull - IL_065f: pop - IL_0660: endfinally + IL_066f: ldloc.s V_67 + IL_0671: callvirt instance void [netstandard]System.IDisposable::Dispose() + IL_0676: ldnull + IL_0677: pop + IL_0678: endfinally .line 100001,100001 : 0,0 '' - IL_0661: ldnull - IL_0662: pop - IL_0663: endfinally + IL_0679: ldnull + IL_067a: pop + IL_067b: endfinally .line 100001,100001 : 0,0 '' } // end handler - IL_0664: ldloc.s V_62 - IL_0666: dup - IL_0667: stsfld float64 ''.$Linq101Aggregates01::averageLength@103 - IL_066c: stloc.s averageLength + IL_067c: ldloc.s V_62 + IL_067e: dup + IL_067f: stsfld float64 ''.$Linq101Aggregates01::averageLength@103 + IL_0684: stloc.s averageLength .line 111,117 : 1,21 '' - IL_066e: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_0673: stloc.s V_68 - IL_0675: ldloc.s V_68 - IL_0677: ldloc.s V_68 - IL_0679: ldloc.s V_68 - IL_067b: ldloc.s V_68 - IL_067d: ldloc.s V_68 - IL_067f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() - IL_0684: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0689: ldloc.s V_68 - IL_068b: newobj instance void Linq101Aggregates01/categories6@113::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_0690: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0686: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_068b: stloc.s V_68 + IL_068d: ldloc.s V_68 + IL_068f: ldloc.s V_68 + IL_0691: ldloc.s V_68 + IL_0693: ldloc.s V_68 + IL_0695: ldloc.s V_68 + IL_0697: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() + IL_069c: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_06a1: ldloc.s V_68 + IL_06a3: newobj instance void Linq101Aggregates01/categories6@113::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_06a8: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0695: ldsfld class Linq101Aggregates01/'categories6@114-1' Linq101Aggregates01/'categories6@114-1'::@_instance - IL_069a: ldsfld class Linq101Aggregates01/'categories6@114-2' Linq101Aggregates01/'categories6@114-2'::@_instance - IL_069f: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_06ad: ldsfld class Linq101Aggregates01/'categories6@114-1' Linq101Aggregates01/'categories6@114-1'::@_instance + IL_06b2: ldsfld class Linq101Aggregates01/'categories6@114-2' Linq101Aggregates01/'categories6@114-2'::@_instance + IL_06b7: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_06a4: ldloc.s V_68 - IL_06a6: newobj instance void Linq101Aggregates01/'categories6@114-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_06ab: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2,valuetype [mscorlib]System.Decimal>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_06bc: ldloc.s V_68 + IL_06be: newobj instance void Linq101Aggregates01/'categories6@114-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_06c3: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2,valuetype [mscorlib]System.Decimal>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_06b0: ldsfld class Linq101Aggregates01/'categories6@116-4' Linq101Aggregates01/'categories6@116-4'::@_instance - IL_06b5: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,valuetype [mscorlib]System.Decimal>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_06c8: ldsfld class Linq101Aggregates01/'categories6@116-4' Linq101Aggregates01/'categories6@116-4'::@_instance + IL_06cd: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,valuetype [mscorlib]System.Decimal>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_06ba: 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_06bf: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_06c4: dup - IL_06c5: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Aggregates01::categories6@111 - IL_06ca: stloc.s categories6 - IL_06cc: ret + IL_06d2: 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_06d7: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_06dc: dup + IL_06dd: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Aggregates01::categories6@111 + IL_06e2: stloc.s categories6 + IL_06e4: ret } // end of method $Linq101Aggregates01::main@ } // end of class ''.$Linq101Aggregates01 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101ElementOperators01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101ElementOperators01.il.bsl index 02306b555d2..d39512533d5 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101ElementOperators01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101ElementOperators01.il.bsl @@ -45,13 +45,13 @@ // Offset: 0x00000388 Length: 0x00000127 } .module Linq101ElementOperators01.exe -// MVID: {60B78A59-19D7-C20D-A745-0383598AB760} +// MVID: {5FCFFD0D-19D7-C20D-A745-03830DFDCF5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x09100000 +// Image base: 0x05A30000 // =============== CLASS MEMBERS DECLARATION =================== @@ -100,7 +100,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] class [Utils]Utils/Product V_0, [1] class [Utils]Utils/Product p) @@ -112,84 +112,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 12,12 : 9,29 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101ElementOperators01::get_products() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101ElementOperators01/products12@12::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101ElementOperators01::get_products() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101ElementOperators01/products12@12::pc .line 12,12 : 9,29 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 12,12 : 9,29 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101ElementOperators01/products12@12::pc .line 13,13 : 9,33 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101ElementOperators01/products12@12::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld class [Utils]Utils/Product Linq101ElementOperators01/products12@12::current - IL_0065: ldc.i4.1 - IL_0066: ret - - .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c - - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101ElementOperators01/products12@12::pc + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld class [Utils]Utils/Product Linq101ElementOperators01/products12@12::current + IL_006b: ldc.i4.1 + IL_006c: ret + + .line 100001,100001 : 0,0 '' + IL_006d: nop + IL_006e: br.s IL_0042 + + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101ElementOperators01/products12@12::pc .line 12,12 : 9,29 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101ElementOperators01/products12@12::pc - IL_008b: ldarg.0 - IL_008c: ldnull - IL_008d: stfld class [Utils]Utils/Product Linq101ElementOperators01/products12@12::current - IL_0092: ldc.i4.0 - IL_0093: ret + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101ElementOperators01/products12@12::pc + IL_0091: ldarg.0 + IL_0092: ldnull + IL_0093: stfld class [Utils]Utils/Product Linq101ElementOperators01/products12@12::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method products12@12::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -201,138 +207,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101ElementOperators01/products12@12::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101ElementOperators01/products12@12::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101ElementOperators01/products12@12::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101ElementOperators01/products12@12::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101ElementOperators01/products12@12::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld class [Utils]Utils/Product Linq101ElementOperators01/products12@12::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101ElementOperators01/products12@12::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld class [Utils]Utils/Product Linq101ElementOperators01/products12@12::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 12,12 : 9,29 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method products12@12::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101ElementOperators01/products12@12::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method products12@12::get_CheckClose .method public strict virtual instance class [Utils]Utils/Product @@ -446,7 +472,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] string V_0, [1] string s) @@ -457,84 +483,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 22,22 : 9,28 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101ElementOperators01::get_strings() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101ElementOperators01/startsWithO@22::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101ElementOperators01::get_strings() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101ElementOperators01/startsWithO@22::pc .line 22,22 : 9,28 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 22,22 : 9,28 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101ElementOperators01/startsWithO@22::pc .line 23,23 : 9,28 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101ElementOperators01/startsWithO@22::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld string Linq101ElementOperators01/startsWithO@22::current - IL_0065: ldc.i4.1 - IL_0066: ret - - .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c - - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101ElementOperators01/startsWithO@22::pc + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld string Linq101ElementOperators01/startsWithO@22::current + IL_006b: ldc.i4.1 + IL_006c: ret + + .line 100001,100001 : 0,0 '' + IL_006d: nop + IL_006e: br.s IL_0042 + + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101ElementOperators01/startsWithO@22::pc .line 22,22 : 9,28 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101ElementOperators01/startsWithO@22::pc - IL_008b: ldarg.0 - IL_008c: ldnull - IL_008d: stfld string Linq101ElementOperators01/startsWithO@22::current - IL_0092: ldc.i4.0 - IL_0093: ret + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101ElementOperators01/startsWithO@22::pc + IL_0091: ldarg.0 + IL_0092: ldnull + IL_0093: stfld string Linq101ElementOperators01/startsWithO@22::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method startsWithO@22::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -546,138 +578,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101ElementOperators01/startsWithO@22::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101ElementOperators01/startsWithO@22::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101ElementOperators01/startsWithO@22::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101ElementOperators01/startsWithO@22::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101ElementOperators01/startsWithO@22::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld string Linq101ElementOperators01/startsWithO@22::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101ElementOperators01/startsWithO@22::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld string Linq101ElementOperators01/startsWithO@22::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 22,22 : 9,28 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method startsWithO@22::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101ElementOperators01/startsWithO@22::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method startsWithO@22::get_CheckClose .method public strict virtual instance string @@ -792,7 +844,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -803,84 +855,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 31,31 : 9,28 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101ElementOperators01::get_numbers() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101ElementOperators01::get_numbers() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc .line 31,31 : 9,28 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 31,31 : 9,28 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc .line 32,32 : 9,22 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::current - IL_0065: ldc.i4.1 - IL_0066: ret - - .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c - - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::current + IL_006b: ldc.i4.1 + IL_006c: ret + + .line 100001,100001 : 0,0 '' + IL_006d: nop + IL_006e: br.s IL_0042 + + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc .line 31,31 : 9,28 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc - IL_008b: ldarg.0 - IL_008c: ldc.i4.0 - IL_008d: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::current + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc + IL_0091: ldarg.0 IL_0092: ldc.i4.0 - IL_0093: ret + IL_0093: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method firstNumOrDefault@31::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -892,138 +950,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc - IL_005d: ldarg.0 - IL_005e: ldc.i4.0 - IL_005f: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc + IL_0068: ldarg.0 + IL_0069: ldc.i4.0 + IL_006a: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 31,31 : 9,28 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method firstNumOrDefault@31::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method firstNumOrDefault@31::get_CheckClose .method public strict virtual instance int32 @@ -1096,7 +1174,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -1107,84 +1185,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 52,52 : 9,29 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101ElementOperators01::get_numbers2() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101ElementOperators01::get_numbers2() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc .line 52,52 : 9,29 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 52,52 : 9,29 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc .line 53,53 : 9,22 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld int32 Linq101ElementOperators01/fourthLowNum@52::current - IL_0065: ldc.i4.1 - IL_0066: ret - - .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c - - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld int32 Linq101ElementOperators01/fourthLowNum@52::current + IL_006b: ldc.i4.1 + IL_006c: ret + + .line 100001,100001 : 0,0 '' + IL_006d: nop + IL_006e: br.s IL_0042 + + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc .line 52,52 : 9,29 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc - IL_008b: ldarg.0 - IL_008c: ldc.i4.0 - IL_008d: stfld int32 Linq101ElementOperators01/fourthLowNum@52::current + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc + IL_0091: ldarg.0 IL_0092: ldc.i4.0 - IL_0093: ret + IL_0093: stfld int32 Linq101ElementOperators01/fourthLowNum@52::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method fourthLowNum@52::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -1196,138 +1280,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101ElementOperators01/fourthLowNum@52::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101ElementOperators01/fourthLowNum@52::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc - IL_005d: ldarg.0 - IL_005e: ldc.i4.0 - IL_005f: stfld int32 Linq101ElementOperators01/fourthLowNum@52::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc + IL_0068: ldarg.0 + IL_0069: ldc.i4.0 + IL_006a: stfld int32 Linq101ElementOperators01/fourthLowNum@52::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 52,52 : 9,29 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method fourthLowNum@52::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101ElementOperators01/fourthLowNum@52::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method fourthLowNum@52::get_CheckClose .method public strict virtual instance int32 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Grouping01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Grouping01.il.bsl index e5bad87d725..6ef60480015 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Grouping01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Grouping01.il.bsl @@ -50,13 +50,13 @@ // Offset: 0x00000408 Length: 0x00000129 } .module Linq101Grouping01.exe -// MVID: {60B78A59-FB79-E5BF-A745-0383598AB760} +// MVID: {5FCFFD0D-FB79-E5BF-A745-03830DFDCF5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06730000 +// Image base: 0x07010000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Joins01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Joins01.il.bsl index 7078d4c3e68..a0065a9e340 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Joins01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Joins01.il.bsl @@ -45,13 +45,13 @@ // Offset: 0x00000310 Length: 0x000000C3 } .module Linq101Joins01.exe -// MVID: {60B78A59-151B-685E-A745-0383598AB760} +// MVID: {5FCFFD0D-151B-685E-A745-03830DFDCF5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06AF0000 +// Image base: 0x00DF0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -955,7 +955,7 @@ .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 65 (0x41) + // Code size 69 (0x45) .maxstack 9 .locals init ([0] class [Utils]Utils/Product p, [1] string t) @@ -968,37 +968,41 @@ IL_0008: ldnull IL_0009: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericEqualityIntrinsic(!!0, !!0) - IL_000e: brfalse.s IL_0018 + IL_000e: brfalse.s IL_0012 + + IL_0010: br.s IL_0014 + + IL_0012: br.s IL_001c .line 41,41 : 40,55 '' - IL_0010: ldstr "(No products)" + IL_0014: ldstr "(No products)" .line 100001,100001 : 0,0 '' - IL_0015: nop - IL_0016: br.s IL_001f + IL_0019: nop + IL_001a: br.s IL_0023 .line 41,41 : 61,74 '' - IL_0018: ldloc.0 - IL_0019: callvirt instance string [Utils]Utils/Product::get_ProductName() + IL_001c: ldloc.0 + IL_001d: callvirt instance string [Utils]Utils/Product::get_ProductName() .line 100001,100001 : 0,0 '' - IL_001e: nop + IL_0022: nop .line 100001,100001 : 0,0 '' - IL_001f: stloc.1 + IL_0023: stloc.1 .line 42,42 : 9,22 '' - IL_0020: ldarg.0 - IL_0021: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Joins01/'q4@40-4'::builder@ - IL_0026: ldarg.0 - IL_0027: ldfld string Linq101Joins01/'q4@40-4'::c - IL_002c: ldarg.0 - IL_002d: ldfld class [mscorlib]System.Collections.Generic.IEnumerable`1 Linq101Joins01/'q4@40-4'::ps - IL_0032: ldloc.0 - IL_0033: ldloc.1 - IL_0034: newobj instance void class [mscorlib]System.Tuple`4,class [Utils]Utils/Product,string>::.ctor(!0, + IL_0024: ldarg.0 + IL_0025: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Joins01/'q4@40-4'::builder@ + IL_002a: ldarg.0 + IL_002b: ldfld string Linq101Joins01/'q4@40-4'::c + IL_0030: ldarg.0 + IL_0031: ldfld class [mscorlib]System.Collections.Generic.IEnumerable`1 Linq101Joins01/'q4@40-4'::ps + IL_0036: ldloc.0 + IL_0037: ldloc.1 + IL_0038: newobj instance void class [mscorlib]System.Tuple`4,class [Utils]Utils/Product,string>::.ctor(!0, !1, !2, !3) - IL_0039: tail. - IL_003b: 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_0040: ret + IL_003d: tail. + IL_003f: 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_0044: ret } // end of method 'q4@40-4'::Invoke } // end of class 'q4@40-4' diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Ordering01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Ordering01.il.bsl index abcadfd0493..d4afecd4237 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Ordering01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Ordering01.il.bsl @@ -40,13 +40,13 @@ // Offset: 0x000003B8 Length: 0x00000134 } .module Linq101Ordering01.exe -// MVID: {60B78A59-649A-6956-A745-0383598AB760} +// MVID: {5FCFFD0D-649A-6956-A745-03830DFDCF5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x09540000 +// Image base: 0x06F50000 // =============== CLASS MEMBERS DECLARATION =================== @@ -95,7 +95,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] string V_0, [1] string w) @@ -107,84 +107,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 11,11 : 9,26 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Ordering01::get_words() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101Ordering01/sortedWords@11::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Ordering01::get_words() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101Ordering01/sortedWords@11::pc .line 11,11 : 9,26 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 11,11 : 9,26 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101Ordering01/sortedWords@11::pc .line 12,12 : 9,17 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101Ordering01/sortedWords@11::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld string Linq101Ordering01/sortedWords@11::current - IL_0065: ldc.i4.1 - IL_0066: ret - - .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c - - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101Ordering01/sortedWords@11::pc + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld string Linq101Ordering01/sortedWords@11::current + IL_006b: ldc.i4.1 + IL_006c: ret + + .line 100001,100001 : 0,0 '' + IL_006d: nop + IL_006e: br.s IL_0042 + + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101Ordering01/sortedWords@11::pc .line 11,11 : 9,26 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101Ordering01/sortedWords@11::pc - IL_008b: ldarg.0 - IL_008c: ldnull - IL_008d: stfld string Linq101Ordering01/sortedWords@11::current - IL_0092: ldc.i4.0 - IL_0093: ret + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101Ordering01/sortedWords@11::pc + IL_0091: ldarg.0 + IL_0092: ldnull + IL_0093: stfld string Linq101Ordering01/sortedWords@11::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method sortedWords@11::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -196,138 +202,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Ordering01/sortedWords@11::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Ordering01/sortedWords@11::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Ordering01/sortedWords@11::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Ordering01/sortedWords@11::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Ordering01/sortedWords@11::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld string Linq101Ordering01/sortedWords@11::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Ordering01/sortedWords@11::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld string Linq101Ordering01/sortedWords@11::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 11,11 : 9,26 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method sortedWords@11::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Ordering01/sortedWords@11::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method sortedWords@11::get_CheckClose .method public strict virtual instance string @@ -438,7 +464,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] string V_0, [1] string w) @@ -449,84 +475,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 18,18 : 9,26 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Ordering01::get_words() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101Ordering01/sortedWords2@18::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Ordering01::get_words() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101Ordering01/sortedWords2@18::pc .line 18,18 : 9,26 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 18,18 : 9,26 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101Ordering01/sortedWords2@18::pc .line 19,19 : 9,26 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101Ordering01/sortedWords2@18::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld string Linq101Ordering01/sortedWords2@18::current - IL_0065: ldc.i4.1 - IL_0066: ret - - .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c - - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101Ordering01/sortedWords2@18::pc + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld string Linq101Ordering01/sortedWords2@18::current + IL_006b: ldc.i4.1 + IL_006c: ret + + .line 100001,100001 : 0,0 '' + IL_006d: nop + IL_006e: br.s IL_0042 + + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101Ordering01/sortedWords2@18::pc .line 18,18 : 9,26 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101Ordering01/sortedWords2@18::pc - IL_008b: ldarg.0 - IL_008c: ldnull - IL_008d: stfld string Linq101Ordering01/sortedWords2@18::current - IL_0092: ldc.i4.0 - IL_0093: ret + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101Ordering01/sortedWords2@18::pc + IL_0091: ldarg.0 + IL_0092: ldnull + IL_0093: stfld string Linq101Ordering01/sortedWords2@18::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method sortedWords2@18::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -538,138 +570,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Ordering01/sortedWords2@18::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Ordering01/sortedWords2@18::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Ordering01/sortedWords2@18::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Ordering01/sortedWords2@18::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Ordering01/sortedWords2@18::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld string Linq101Ordering01/sortedWords2@18::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Ordering01/sortedWords2@18::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld string Linq101Ordering01/sortedWords2@18::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 18,18 : 9,26 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method sortedWords2@18::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Ordering01/sortedWords2@18::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method sortedWords2@18::get_CheckClose .method public strict virtual instance string @@ -901,7 +953,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] class [Utils]Utils/Product V_0, [1] class [Utils]Utils/Product p) @@ -912,84 +964,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 44,44 : 9,29 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Ordering01::get_products() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101Ordering01/sortedProducts2@44::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Ordering01::get_products() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101Ordering01/sortedProducts2@44::pc .line 44,44 : 9,29 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 44,44 : 9,29 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101Ordering01/sortedProducts2@44::pc .line 45,45 : 9,40 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101Ordering01/sortedProducts2@44::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld class [Utils]Utils/Product Linq101Ordering01/sortedProducts2@44::current - IL_0065: ldc.i4.1 - IL_0066: ret - - .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c - - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101Ordering01/sortedProducts2@44::pc + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld class [Utils]Utils/Product Linq101Ordering01/sortedProducts2@44::current + IL_006b: ldc.i4.1 + IL_006c: ret + + .line 100001,100001 : 0,0 '' + IL_006d: nop + IL_006e: br.s IL_0042 + + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101Ordering01/sortedProducts2@44::pc .line 44,44 : 9,29 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101Ordering01/sortedProducts2@44::pc - IL_008b: ldarg.0 - IL_008c: ldnull - IL_008d: stfld class [Utils]Utils/Product Linq101Ordering01/sortedProducts2@44::current - IL_0092: ldc.i4.0 - IL_0093: ret + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101Ordering01/sortedProducts2@44::pc + IL_0091: ldarg.0 + IL_0092: ldnull + IL_0093: stfld class [Utils]Utils/Product Linq101Ordering01/sortedProducts2@44::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method sortedProducts2@44::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -1001,138 +1059,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Ordering01/sortedProducts2@44::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Ordering01/sortedProducts2@44::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Ordering01/sortedProducts2@44::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Ordering01/sortedProducts2@44::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Ordering01/sortedProducts2@44::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld class [Utils]Utils/Product Linq101Ordering01/sortedProducts2@44::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Ordering01/sortedProducts2@44::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld class [Utils]Utils/Product Linq101Ordering01/sortedProducts2@44::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 44,44 : 9,29 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method sortedProducts2@44::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Ordering01/sortedProducts2@44::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method sortedProducts2@44::get_CheckClose .method public strict virtual instance class [Utils]Utils/Product @@ -1245,7 +1323,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] string V_0, [1] string d) @@ -1256,84 +1334,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 52,52 : 9,27 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Ordering01::get_digits() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101Ordering01/sortedDigits@52::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Ordering01::get_digits() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101Ordering01/sortedDigits@52::pc .line 52,52 : 9,27 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 52,52 : 9,27 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101Ordering01/sortedDigits@52::pc .line 53,53 : 9,24 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101Ordering01/sortedDigits@52::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld string Linq101Ordering01/sortedDigits@52::current - IL_0065: ldc.i4.1 - IL_0066: ret - - .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c - - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101Ordering01/sortedDigits@52::pc + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld string Linq101Ordering01/sortedDigits@52::current + IL_006b: ldc.i4.1 + IL_006c: ret + + .line 100001,100001 : 0,0 '' + IL_006d: nop + IL_006e: br.s IL_0042 + + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101Ordering01/sortedDigits@52::pc .line 52,52 : 9,27 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101Ordering01/sortedDigits@52::pc - IL_008b: ldarg.0 - IL_008c: ldnull - IL_008d: stfld string Linq101Ordering01/sortedDigits@52::current - IL_0092: ldc.i4.0 - IL_0093: ret + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101Ordering01/sortedDigits@52::pc + IL_0091: ldarg.0 + IL_0092: ldnull + IL_0093: stfld string Linq101Ordering01/sortedDigits@52::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method sortedDigits@52::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -1345,138 +1429,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Ordering01/sortedDigits@52::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Ordering01/sortedDigits@52::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Ordering01/sortedDigits@52::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Ordering01/sortedDigits@52::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Ordering01/sortedDigits@52::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld string Linq101Ordering01/sortedDigits@52::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Ordering01/sortedDigits@52::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld string Linq101Ordering01/sortedDigits@52::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 52,52 : 9,27 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method sortedDigits@52::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Ordering01/sortedDigits@52::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method sortedDigits@52::get_CheckClose .method public strict virtual instance string diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Partitioning01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Partitioning01.il.bsl index e6988e57bd7..584e444b9be 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Partitioning01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Partitioning01.il.bsl @@ -45,13 +45,13 @@ // Offset: 0x000003D8 Length: 0x00000138 } .module Linq101Partitioning01.exe -// MVID: {60B78A59-B280-A6A2-A745-0383598AB760} +// MVID: {5FCFFD0D-B280-A6A2-A745-03830DFDCF5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x069E0000 +// Image base: 0x057C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -100,7 +100,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -112,84 +112,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 12,12 : 9,28 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Partitioning01::get_numbers() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101Partitioning01/first3Numbers@12::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Partitioning01::get_numbers() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101Partitioning01/first3Numbers@12::pc .line 12,12 : 9,28 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 12,12 : 9,28 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101Partitioning01/first3Numbers@12::pc .line 13,13 : 9,15 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101Partitioning01/first3Numbers@12::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld int32 Linq101Partitioning01/first3Numbers@12::current - IL_0065: ldc.i4.1 - IL_0066: ret - - .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c - - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101Partitioning01/first3Numbers@12::pc + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld int32 Linq101Partitioning01/first3Numbers@12::current + IL_006b: ldc.i4.1 + IL_006c: ret + + .line 100001,100001 : 0,0 '' + IL_006d: nop + IL_006e: br.s IL_0042 + + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101Partitioning01/first3Numbers@12::pc .line 12,12 : 9,28 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101Partitioning01/first3Numbers@12::pc - IL_008b: ldarg.0 - IL_008c: ldc.i4.0 - IL_008d: stfld int32 Linq101Partitioning01/first3Numbers@12::current + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101Partitioning01/first3Numbers@12::pc + IL_0091: ldarg.0 IL_0092: ldc.i4.0 - IL_0093: ret + IL_0093: stfld int32 Linq101Partitioning01/first3Numbers@12::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method first3Numbers@12::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -201,138 +207,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Partitioning01/first3Numbers@12::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Partitioning01/first3Numbers@12::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Partitioning01/first3Numbers@12::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Partitioning01/first3Numbers@12::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Partitioning01/first3Numbers@12::pc - IL_005d: ldarg.0 - IL_005e: ldc.i4.0 - IL_005f: stfld int32 Linq101Partitioning01/first3Numbers@12::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Partitioning01/first3Numbers@12::pc + IL_0068: ldarg.0 + IL_0069: ldc.i4.0 + IL_006a: stfld int32 Linq101Partitioning01/first3Numbers@12::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 12,12 : 9,28 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method first3Numbers@12::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Partitioning01/first3Numbers@12::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method first3Numbers@12::get_CheckClose .method public strict virtual instance int32 @@ -614,7 +640,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -625,84 +651,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 29,29 : 9,28 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Partitioning01::get_numbers() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Partitioning01::get_numbers() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc .line 29,29 : 9,28 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 29,29 : 9,28 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc .line 30,30 : 9,15 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::current - IL_0065: ldc.i4.1 - IL_0066: ret - - .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c - - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::current + IL_006b: ldc.i4.1 + IL_006c: ret + + .line 100001,100001 : 0,0 '' + IL_006d: nop + IL_006e: br.s IL_0042 + + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc .line 29,29 : 9,28 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc - IL_008b: ldarg.0 - IL_008c: ldc.i4.0 - IL_008d: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::current + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc + IL_0091: ldarg.0 IL_0092: ldc.i4.0 - IL_0093: ret + IL_0093: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method allButFirst4Numbers@29::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -714,138 +746,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc - IL_005d: ldarg.0 - IL_005e: ldc.i4.0 - IL_005f: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc + IL_0068: ldarg.0 + IL_0069: ldc.i4.0 + IL_006a: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 29,29 : 9,28 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method allButFirst4Numbers@29::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method allButFirst4Numbers@29::get_CheckClose .method public strict virtual instance int32 @@ -1127,7 +1179,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -1138,84 +1190,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 45,45 : 9,28 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Partitioning01::get_numbers() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Partitioning01::get_numbers() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc .line 45,45 : 9,28 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 45,45 : 9,28 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc .line 46,46 : 9,26 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::current - IL_0065: ldc.i4.1 - IL_0066: ret - - .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c - - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::current + IL_006b: ldc.i4.1 + IL_006c: ret + + .line 100001,100001 : 0,0 '' + IL_006d: nop + IL_006e: br.s IL_0042 + + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc .line 45,45 : 9,28 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc - IL_008b: ldarg.0 - IL_008c: ldc.i4.0 - IL_008d: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::current + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc + IL_0091: ldarg.0 IL_0092: ldc.i4.0 - IL_0093: ret + IL_0093: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method firstNumbersLessThan6@45::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -1227,138 +1285,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc - IL_005d: ldarg.0 - IL_005e: ldc.i4.0 - IL_005f: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc + IL_0068: ldarg.0 + IL_0069: ldc.i4.0 + IL_006a: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 45,45 : 9,28 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method firstNumbersLessThan6@45::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method firstNumbersLessThan6@45::get_CheckClose .method public strict virtual instance int32 @@ -1471,7 +1549,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -1482,84 +1560,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 52,52 : 9,28 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Partitioning01::get_numbers() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Partitioning01::get_numbers() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc .line 52,52 : 9,28 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 52,52 : 9,28 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc .line 53,53 : 9,31 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::current - IL_0065: ldc.i4.1 - IL_0066: ret - - .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c - - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::current + IL_006b: ldc.i4.1 + IL_006c: ret + + .line 100001,100001 : 0,0 '' + IL_006d: nop + IL_006e: br.s IL_0042 + + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc .line 52,52 : 9,28 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc - IL_008b: ldarg.0 - IL_008c: ldc.i4.0 - IL_008d: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::current + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc + IL_0091: ldarg.0 IL_0092: ldc.i4.0 - IL_0093: ret + IL_0093: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method allButFirst3Numbers@52::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -1571,138 +1655,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc - IL_005d: ldarg.0 - IL_005e: ldc.i4.0 - IL_005f: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc + IL_0068: ldarg.0 + IL_0069: ldc.i4.0 + IL_006a: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 52,52 : 9,28 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method allButFirst3Numbers@52::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method allButFirst3Numbers@52::get_CheckClose .method public strict virtual instance int32 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Quantifiers01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Quantifiers01.il.bsl index 2341c4243cf..865dfef3e73 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Quantifiers01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Quantifiers01.il.bsl @@ -45,13 +45,13 @@ // Offset: 0x00000398 Length: 0x000000FF } .module Linq101Quantifiers01.exe -// MVID: {60B78A59-76DD-E373-A745-0383598AB760} +// MVID: {5FCFFD0D-76DD-E373-A745-03830DFDCF5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x065D0000 +// Image base: 0x07250000 // =============== CLASS MEMBERS DECLARATION =================== @@ -100,7 +100,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] string V_0, [1] string w) @@ -112,84 +112,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 12,12 : 9,26 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Quantifiers01::get_words() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101Quantifiers01/iAfterE@12::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Quantifiers01::get_words() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101Quantifiers01/iAfterE@12::pc .line 12,12 : 9,26 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 12,12 : 9,26 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101Quantifiers01/iAfterE@12::pc .line 13,13 : 9,34 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101Quantifiers01/iAfterE@12::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld string Linq101Quantifiers01/iAfterE@12::current - IL_0065: ldc.i4.1 - IL_0066: ret + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld string Linq101Quantifiers01/iAfterE@12::current + IL_006b: ldc.i4.1 + IL_006c: ret .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c + IL_006d: nop + IL_006e: br.s IL_0042 - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101Quantifiers01/iAfterE@12::pc + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101Quantifiers01/iAfterE@12::pc .line 12,12 : 9,26 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101Quantifiers01/iAfterE@12::pc - IL_008b: ldarg.0 - IL_008c: ldnull - IL_008d: stfld string Linq101Quantifiers01/iAfterE@12::current - IL_0092: ldc.i4.0 - IL_0093: ret + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101Quantifiers01/iAfterE@12::pc + IL_0091: ldarg.0 + IL_0092: ldnull + IL_0093: stfld string Linq101Quantifiers01/iAfterE@12::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method iAfterE@12::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -201,138 +207,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Quantifiers01/iAfterE@12::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Quantifiers01/iAfterE@12::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Quantifiers01/iAfterE@12::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Quantifiers01/iAfterE@12::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Quantifiers01/iAfterE@12::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld string Linq101Quantifiers01/iAfterE@12::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Quantifiers01/iAfterE@12::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld string Linq101Quantifiers01/iAfterE@12::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 12,12 : 9,26 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method iAfterE@12::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Quantifiers01/iAfterE@12::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method iAfterE@12::get_CheckClose .method public strict virtual instance string @@ -710,7 +736,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -721,84 +747,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 32,32 : 9,28 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Quantifiers01::get_numbers() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Quantifiers01::get_numbers() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc .line 32,32 : 9,28 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 32,32 : 9,28 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc .line 33,33 : 9,24 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld int32 Linq101Quantifiers01/onlyOdd@32::current - IL_0065: ldc.i4.1 - IL_0066: ret + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld int32 Linq101Quantifiers01/onlyOdd@32::current + IL_006b: ldc.i4.1 + IL_006c: ret .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c + IL_006d: nop + IL_006e: br.s IL_0042 - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc .line 32,32 : 9,28 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc - IL_008b: ldarg.0 - IL_008c: ldc.i4.0 - IL_008d: stfld int32 Linq101Quantifiers01/onlyOdd@32::current + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc + IL_0091: ldarg.0 IL_0092: ldc.i4.0 - IL_0093: ret + IL_0093: stfld int32 Linq101Quantifiers01/onlyOdd@32::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method onlyOdd@32::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -810,138 +842,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Quantifiers01/onlyOdd@32::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Quantifiers01/onlyOdd@32::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc - IL_005d: ldarg.0 - IL_005e: ldc.i4.0 - IL_005f: stfld int32 Linq101Quantifiers01/onlyOdd@32::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc + IL_0068: ldarg.0 + IL_0069: ldc.i4.0 + IL_006a: stfld int32 Linq101Quantifiers01/onlyOdd@32::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 32,32 : 9,28 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method onlyOdd@32::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Quantifiers01/onlyOdd@32::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method onlyOdd@32::get_CheckClose .method public strict virtual instance int32 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Select01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Select01.il.bsl index 27bc8c410f8..8c78fe1a38c 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Select01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Select01.il.bsl @@ -45,13 +45,13 @@ // Offset: 0x00000648 Length: 0x00000204 } .module Linq101Select01.exe -// MVID: {60B78A59-6057-8F80-A745-0383598AB760} +// MVID: {5FCFFD0D-6057-8F80-A745-03830DFDCF5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07170000 +// Image base: 0x053E0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -145,7 +145,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 158 (0x9e) + // Code size 164 (0xa4) .maxstack 7 .locals init ([0] int32 n) .line 100001,100001 : 0,0 '' @@ -155,86 +155,92 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_0074 + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0071 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_0095 + IL_0022: br.s IL_007a .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_0077 + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_009b + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 13,13 : 9,23 '' - IL_0025: ldarg.0 - IL_0026: ldsfld class Linq101Select01/'numsPlusOne@12-1' Linq101Select01/'numsPlusOne@12-1'::@_instance - IL_002b: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_numbers() - IL_0030: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,int32>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, + IL_002b: ldarg.0 + IL_002c: ldsfld class Linq101Select01/'numsPlusOne@12-1' Linq101Select01/'numsPlusOne@12-1'::@_instance + IL_0031: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_numbers() + IL_0036: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,int32>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0035: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_003a: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' - IL_003f: ldarg.0 - IL_0040: ldc.i4.1 - IL_0041: stfld int32 Linq101Select01/numsPlusOne@13::pc + IL_003b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0040: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' + IL_0045: ldarg.0 + IL_0046: ldc.i4.1 + IL_0047: stfld int32 Linq101Select01/numsPlusOne@13::pc .line 13,13 : 9,23 '' - IL_0046: ldarg.0 - IL_0047: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' - IL_004c: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0051: brfalse.s IL_0074 - - IL_0053: ldarg.0 - IL_0054: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' - IL_0059: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005e: stloc.0 + IL_004c: ldarg.0 + IL_004d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' + IL_0052: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0057: brfalse.s IL_007a + + IL_0059: ldarg.0 + IL_005a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' + IL_005f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0064: stloc.0 + IL_0065: ldarg.0 + IL_0066: ldc.i4.2 + IL_0067: stfld int32 Linq101Select01/numsPlusOne@13::pc .line 13,13 : 17,22 '' - IL_005f: ldarg.0 - IL_0060: ldc.i4.2 - IL_0061: stfld int32 Linq101Select01/numsPlusOne@13::pc - IL_0066: ldarg.0 - IL_0067: ldloc.0 - IL_0068: ldc.i4.1 - IL_0069: add - IL_006a: stfld int32 Linq101Select01/numsPlusOne@13::current - IL_006f: ldc.i4.1 - IL_0070: ret + IL_006c: ldarg.0 + IL_006d: ldloc.0 + IL_006e: ldc.i4.1 + IL_006f: add + IL_0070: stfld int32 Linq101Select01/numsPlusOne@13::current + IL_0075: ldc.i4.1 + IL_0076: ret .line 100001,100001 : 0,0 '' - IL_0071: nop - IL_0072: br.s IL_0046 + IL_0077: nop + IL_0078: br.s IL_004c - IL_0074: ldarg.0 - IL_0075: ldc.i4.3 - IL_0076: stfld int32 Linq101Select01/numsPlusOne@13::pc + IL_007a: ldarg.0 + IL_007b: ldc.i4.3 + IL_007c: stfld int32 Linq101Select01/numsPlusOne@13::pc .line 13,13 : 9,23 '' - IL_007b: ldarg.0 - IL_007c: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' - IL_0081: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0086: nop - IL_0087: ldarg.0 - IL_0088: ldnull - IL_0089: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' - IL_008e: ldarg.0 - IL_008f: ldc.i4.3 - IL_0090: stfld int32 Linq101Select01/numsPlusOne@13::pc - IL_0095: ldarg.0 - IL_0096: ldc.i4.0 - IL_0097: stfld int32 Linq101Select01/numsPlusOne@13::current + IL_0081: ldarg.0 + IL_0082: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' + IL_0087: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_008c: nop + IL_008d: ldarg.0 + IL_008e: ldnull + IL_008f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' + IL_0094: ldarg.0 + IL_0095: ldc.i4.3 + IL_0096: stfld int32 Linq101Select01/numsPlusOne@13::pc + IL_009b: ldarg.0 IL_009c: ldc.i4.0 - IL_009d: ret + IL_009d: stfld int32 Linq101Select01/numsPlusOne@13::current + IL_00a2: ldc.i4.0 + IL_00a3: ret } // end of method numsPlusOne@13::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -246,138 +252,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Select01/numsPlusOne@13::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Select01/numsPlusOne@13::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Select01/numsPlusOne@13::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Select01/numsPlusOne@13::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Select01/numsPlusOne@13::pc - IL_005d: ldarg.0 - IL_005e: ldc.i4.0 - IL_005f: stfld int32 Linq101Select01/numsPlusOne@13::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Select01/numsPlusOne@13::pc + IL_0068: ldarg.0 + IL_0069: ldc.i4.0 + IL_006a: stfld int32 Linq101Select01/numsPlusOne@13::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 13,13 : 9,23 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method numsPlusOne@13::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Select01/numsPlusOne@13::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method numsPlusOne@13::get_CheckClose .method public strict virtual instance int32 @@ -494,7 +520,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 161 (0xa1) + // Code size 167 (0xa7) .maxstack 7 .locals init ([0] class [Utils]Utils/Product p) .line 100001,100001 : 0,0 '' @@ -504,85 +530,91 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_0077 + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0074 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_0098 + IL_0022: br.s IL_007d .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_007a + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_009e + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 22,22 : 9,31 '' - IL_0025: ldarg.0 - IL_0026: ldsfld class Linq101Select01/'productNames@21-1' Linq101Select01/'productNames@21-1'::@_instance - IL_002b: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_products() - IL_0030: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,class [Utils]Utils/Product>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, + IL_002b: ldarg.0 + IL_002c: ldsfld class Linq101Select01/'productNames@21-1' Linq101Select01/'productNames@21-1'::@_instance + IL_0031: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_products() + IL_0036: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,class [Utils]Utils/Product>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0035: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_003a: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' - IL_003f: ldarg.0 - IL_0040: ldc.i4.1 - IL_0041: stfld int32 Linq101Select01/productNames@22::pc + IL_003b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0040: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' + IL_0045: ldarg.0 + IL_0046: ldc.i4.1 + IL_0047: stfld int32 Linq101Select01/productNames@22::pc .line 22,22 : 9,31 '' - IL_0046: ldarg.0 - IL_0047: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' - IL_004c: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0051: brfalse.s IL_0077 - - IL_0053: ldarg.0 - IL_0054: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' - IL_0059: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005e: stloc.0 + IL_004c: ldarg.0 + IL_004d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' + IL_0052: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0057: brfalse.s IL_007d + + IL_0059: ldarg.0 + IL_005a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' + IL_005f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0064: stloc.0 + IL_0065: ldarg.0 + IL_0066: ldc.i4.2 + IL_0067: stfld int32 Linq101Select01/productNames@22::pc .line 22,22 : 17,30 '' - IL_005f: ldarg.0 - IL_0060: ldc.i4.2 - IL_0061: stfld int32 Linq101Select01/productNames@22::pc - IL_0066: ldarg.0 - IL_0067: ldloc.0 - IL_0068: callvirt instance string [Utils]Utils/Product::get_ProductName() - IL_006d: stfld string Linq101Select01/productNames@22::current - IL_0072: ldc.i4.1 - IL_0073: ret + IL_006c: ldarg.0 + IL_006d: ldloc.0 + IL_006e: callvirt instance string [Utils]Utils/Product::get_ProductName() + IL_0073: stfld string Linq101Select01/productNames@22::current + IL_0078: ldc.i4.1 + IL_0079: ret .line 100001,100001 : 0,0 '' - IL_0074: nop - IL_0075: br.s IL_0046 + IL_007a: nop + IL_007b: br.s IL_004c - IL_0077: ldarg.0 - IL_0078: ldc.i4.3 - IL_0079: stfld int32 Linq101Select01/productNames@22::pc + IL_007d: ldarg.0 + IL_007e: ldc.i4.3 + IL_007f: stfld int32 Linq101Select01/productNames@22::pc .line 22,22 : 9,31 '' - IL_007e: ldarg.0 - IL_007f: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' - IL_0084: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0089: nop - IL_008a: ldarg.0 - IL_008b: ldnull - IL_008c: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' - IL_0091: ldarg.0 - IL_0092: ldc.i4.3 - IL_0093: stfld int32 Linq101Select01/productNames@22::pc - IL_0098: ldarg.0 - IL_0099: ldnull - IL_009a: stfld string Linq101Select01/productNames@22::current - IL_009f: ldc.i4.0 - IL_00a0: ret + IL_0084: ldarg.0 + IL_0085: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' + IL_008a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_008f: nop + IL_0090: ldarg.0 + IL_0091: ldnull + IL_0092: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' + IL_0097: ldarg.0 + IL_0098: ldc.i4.3 + IL_0099: stfld int32 Linq101Select01/productNames@22::pc + IL_009e: ldarg.0 + IL_009f: ldnull + IL_00a0: stfld string Linq101Select01/productNames@22::current + IL_00a5: ldc.i4.0 + IL_00a6: ret } // end of method productNames@22::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -594,138 +626,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Select01/productNames@22::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Select01/productNames@22::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Select01/productNames@22::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Select01/productNames@22::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Select01/productNames@22::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld string Linq101Select01/productNames@22::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Select01/productNames@22::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld string Linq101Select01/productNames@22::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 22,22 : 9,31 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method productNames@22::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Select01/productNames@22::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method productNames@22::get_CheckClose .method public strict virtual instance string @@ -842,7 +894,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 166 (0xa6) + // Code size 172 (0xac) .maxstack 7 .locals init ([0] int32 n) .line 100001,100001 : 0,0 '' @@ -852,86 +904,92 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_007c + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0079 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_009d + IL_0022: br.s IL_0082 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_007f + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_00a3 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 30,30 : 9,29 '' - IL_0025: ldarg.0 - IL_0026: ldsfld class Linq101Select01/'textNums@29-1' Linq101Select01/'textNums@29-1'::@_instance - IL_002b: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_numbers() - IL_0030: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,int32>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, + IL_002b: ldarg.0 + IL_002c: ldsfld class Linq101Select01/'textNums@29-1' Linq101Select01/'textNums@29-1'::@_instance + IL_0031: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_numbers() + IL_0036: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,int32>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0035: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_003a: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' - IL_003f: ldarg.0 - IL_0040: ldc.i4.1 - IL_0041: stfld int32 Linq101Select01/textNums@30::pc + IL_003b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0040: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' + IL_0045: ldarg.0 + IL_0046: ldc.i4.1 + IL_0047: stfld int32 Linq101Select01/textNums@30::pc .line 30,30 : 9,29 '' - IL_0046: ldarg.0 - IL_0047: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' - IL_004c: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0051: brfalse.s IL_007c - - IL_0053: ldarg.0 - IL_0054: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' - IL_0059: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005e: stloc.0 + IL_004c: ldarg.0 + IL_004d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' + IL_0052: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0057: brfalse.s IL_0082 + + IL_0059: ldarg.0 + IL_005a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' + IL_005f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0064: stloc.0 + IL_0065: ldarg.0 + IL_0066: ldc.i4.2 + IL_0067: stfld int32 Linq101Select01/textNums@30::pc .line 30,30 : 17,28 '' - IL_005f: ldarg.0 - IL_0060: ldc.i4.2 - IL_0061: stfld int32 Linq101Select01/textNums@30::pc - IL_0066: ldarg.0 - IL_0067: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_strings() - IL_006c: ldloc.0 - IL_006d: callvirt instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Item(int32) - IL_0072: stfld string Linq101Select01/textNums@30::current - IL_0077: ldc.i4.1 - IL_0078: ret + IL_006c: ldarg.0 + IL_006d: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_strings() + IL_0072: ldloc.0 + IL_0073: callvirt instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Item(int32) + IL_0078: stfld string Linq101Select01/textNums@30::current + IL_007d: ldc.i4.1 + IL_007e: ret .line 100001,100001 : 0,0 '' - IL_0079: nop - IL_007a: br.s IL_0046 + IL_007f: nop + IL_0080: br.s IL_004c - IL_007c: ldarg.0 - IL_007d: ldc.i4.3 - IL_007e: stfld int32 Linq101Select01/textNums@30::pc + IL_0082: ldarg.0 + IL_0083: ldc.i4.3 + IL_0084: stfld int32 Linq101Select01/textNums@30::pc .line 30,30 : 9,29 '' - IL_0083: ldarg.0 - IL_0084: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' - IL_0089: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_008e: nop - IL_008f: ldarg.0 - IL_0090: ldnull - IL_0091: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' - IL_0096: ldarg.0 - IL_0097: ldc.i4.3 - IL_0098: stfld int32 Linq101Select01/textNums@30::pc - IL_009d: ldarg.0 - IL_009e: ldnull - IL_009f: stfld string Linq101Select01/textNums@30::current - IL_00a4: ldc.i4.0 - IL_00a5: ret + IL_0089: ldarg.0 + IL_008a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' + IL_008f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0094: nop + IL_0095: ldarg.0 + IL_0096: ldnull + IL_0097: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' + IL_009c: ldarg.0 + IL_009d: ldc.i4.3 + IL_009e: stfld int32 Linq101Select01/textNums@30::pc + IL_00a3: ldarg.0 + IL_00a4: ldnull + IL_00a5: stfld string Linq101Select01/textNums@30::current + IL_00aa: ldc.i4.0 + IL_00ab: ret } // end of method textNums@30::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -943,138 +1001,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Select01/textNums@30::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Select01/textNums@30::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Select01/textNums@30::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Select01/textNums@30::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Select01/textNums@30::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld string Linq101Select01/textNums@30::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Select01/textNums@30::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld string Linq101Select01/textNums@30::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 30,30 : 9,29 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method textNums@30::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Select01/textNums@30::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method textNums@30::get_CheckClose .method public strict virtual instance string @@ -1191,7 +1269,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1>& next) cil managed { - // Code size 175 (0xaf) + // Code size 181 (0xb5) .maxstack 7 .locals init ([0] string w) .line 100001,100001 : 0,0 '' @@ -1201,89 +1279,95 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0027 + IL_001d, + IL_001f) + IL_0019: br.s IL_002d - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_0085 + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0082 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br IL_00a6 + IL_0022: br.s IL_008b + + .line 100001,100001 : 0,0 '' + IL_0024: nop + IL_0025: br.s IL_0088 .line 100001,100001 : 0,0 '' IL_0027: nop + IL_0028: br IL_00ac + + .line 100001,100001 : 0,0 '' + IL_002d: nop .line 39,39 : 8,41 '' - IL_0028: ldarg.0 - IL_0029: ldsfld class Linq101Select01/'upperLowerWords@38-1' Linq101Select01/'upperLowerWords@38-1'::@_instance - IL_002e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_words() - IL_0033: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,string>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, + IL_002e: ldarg.0 + IL_002f: ldsfld class Linq101Select01/'upperLowerWords@38-1' Linq101Select01/'upperLowerWords@38-1'::@_instance + IL_0034: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_words() + IL_0039: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,string>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0038: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_003d: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' - IL_0042: ldarg.0 - IL_0043: ldc.i4.1 - IL_0044: stfld int32 Linq101Select01/upperLowerWords@39::pc + IL_003e: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0043: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' + IL_0048: ldarg.0 + IL_0049: ldc.i4.1 + IL_004a: stfld int32 Linq101Select01/upperLowerWords@39::pc .line 39,39 : 8,41 '' - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' - IL_004f: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0054: brfalse.s IL_0085 - - IL_0056: ldarg.0 - IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' - IL_005c: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0061: stloc.0 + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' + IL_0055: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_005a: brfalse.s IL_008b + + IL_005c: ldarg.0 + IL_005d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' + IL_0062: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0067: stloc.0 + IL_0068: ldarg.0 + IL_0069: ldc.i4.2 + IL_006a: stfld int32 Linq101Select01/upperLowerWords@39::pc .line 39,39 : 16,40 '' - IL_0062: ldarg.0 - IL_0063: ldc.i4.2 - IL_0064: stfld int32 Linq101Select01/upperLowerWords@39::pc - IL_0069: ldarg.0 - IL_006a: ldloc.0 - IL_006b: callvirt instance string [mscorlib]System.String::ToUpper() + IL_006f: ldarg.0 IL_0070: ldloc.0 - IL_0071: callvirt instance string [mscorlib]System.String::ToLower() - IL_0076: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, + IL_0071: callvirt instance string [mscorlib]System.String::ToUpper() + IL_0076: ldloc.0 + IL_0077: callvirt instance string [mscorlib]System.String::ToLower() + IL_007c: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, !1) - IL_007b: stfld class [mscorlib]System.Tuple`2 Linq101Select01/upperLowerWords@39::current - IL_0080: ldc.i4.1 - IL_0081: ret + IL_0081: stfld class [mscorlib]System.Tuple`2 Linq101Select01/upperLowerWords@39::current + IL_0086: ldc.i4.1 + IL_0087: ret .line 100001,100001 : 0,0 '' - IL_0082: nop - IL_0083: br.s IL_0049 + IL_0088: nop + IL_0089: br.s IL_004f - IL_0085: ldarg.0 - IL_0086: ldc.i4.3 - IL_0087: stfld int32 Linq101Select01/upperLowerWords@39::pc + IL_008b: ldarg.0 + IL_008c: ldc.i4.3 + IL_008d: stfld int32 Linq101Select01/upperLowerWords@39::pc .line 39,39 : 8,41 '' - IL_008c: ldarg.0 - IL_008d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' - IL_0092: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0097: nop - IL_0098: ldarg.0 - IL_0099: ldnull - IL_009a: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' - IL_009f: ldarg.0 - IL_00a0: ldc.i4.3 - IL_00a1: stfld int32 Linq101Select01/upperLowerWords@39::pc - IL_00a6: ldarg.0 - IL_00a7: ldnull - IL_00a8: stfld class [mscorlib]System.Tuple`2 Linq101Select01/upperLowerWords@39::current - IL_00ad: ldc.i4.0 - IL_00ae: ret + IL_0092: ldarg.0 + IL_0093: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' + IL_0098: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_009d: nop + IL_009e: ldarg.0 + IL_009f: ldnull + IL_00a0: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' + IL_00a5: ldarg.0 + IL_00a6: ldc.i4.3 + IL_00a7: stfld int32 Linq101Select01/upperLowerWords@39::pc + IL_00ac: ldarg.0 + IL_00ad: ldnull + IL_00ae: stfld class [mscorlib]System.Tuple`2 Linq101Select01/upperLowerWords@39::current + IL_00b3: ldc.i4.0 + IL_00b4: ret } // end of method upperLowerWords@39::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -1295,138 +1379,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Select01/upperLowerWords@39::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Select01/upperLowerWords@39::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Select01/upperLowerWords@39::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Select01/upperLowerWords@39::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Select01/upperLowerWords@39::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld class [mscorlib]System.Tuple`2 Linq101Select01/upperLowerWords@39::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Select01/upperLowerWords@39::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld class [mscorlib]System.Tuple`2 Linq101Select01/upperLowerWords@39::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 39,39 : 8,41 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method upperLowerWords@39::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Select01/upperLowerWords@39::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method upperLowerWords@39::get_CheckClose .method public strict virtual instance class [mscorlib]System.Tuple`2 @@ -1543,7 +1647,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1>& next) cil managed { - // Code size 180 (0xb4) + // Code size 186 (0xba) .maxstack 8 .locals init ([0] int32 n) .line 100001,100001 : 0,0 '' @@ -1553,93 +1657,99 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0027 + IL_001d, + IL_001f) + IL_0019: br.s IL_002d - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_008a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0087 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br IL_00ab + IL_0022: br.s IL_0090 + + .line 100001,100001 : 0,0 '' + IL_0024: nop + IL_0025: br.s IL_008d .line 100001,100001 : 0,0 '' IL_0027: nop + IL_0028: br IL_00b1 + + .line 100001,100001 : 0,0 '' + IL_002d: nop .line 46,46 : 9,42 '' - IL_0028: ldarg.0 - IL_0029: ldsfld class Linq101Select01/'digitOddEvens@45-1' Linq101Select01/'digitOddEvens@45-1'::@_instance - IL_002e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_numbers() - IL_0033: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,int32>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, + IL_002e: ldarg.0 + IL_002f: ldsfld class Linq101Select01/'digitOddEvens@45-1' Linq101Select01/'digitOddEvens@45-1'::@_instance + IL_0034: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_numbers() + IL_0039: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,int32>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0038: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_003d: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' - IL_0042: ldarg.0 - IL_0043: ldc.i4.1 - IL_0044: stfld int32 Linq101Select01/digitOddEvens@46::pc + IL_003e: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0043: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' + IL_0048: ldarg.0 + IL_0049: ldc.i4.1 + IL_004a: stfld int32 Linq101Select01/digitOddEvens@46::pc .line 46,46 : 9,42 '' - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' - IL_004f: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0054: brfalse.s IL_008a - - IL_0056: ldarg.0 - IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' - IL_005c: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0061: stloc.0 + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' + IL_0055: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_005a: brfalse.s IL_0090 + + IL_005c: ldarg.0 + IL_005d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' + IL_0062: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0067: stloc.0 + IL_0068: ldarg.0 + IL_0069: ldc.i4.2 + IL_006a: stfld int32 Linq101Select01/digitOddEvens@46::pc .line 46,46 : 17,41 '' - IL_0062: ldarg.0 - IL_0063: ldc.i4.2 - IL_0064: stfld int32 Linq101Select01/digitOddEvens@46::pc - IL_0069: ldarg.0 - IL_006a: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_strings() - IL_006f: ldloc.0 - IL_0070: callvirt instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Item(int32) + IL_006f: ldarg.0 + IL_0070: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_strings() IL_0075: ldloc.0 - IL_0076: ldc.i4.2 - IL_0077: rem - IL_0078: ldc.i4.0 - IL_0079: ceq - IL_007b: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, + IL_0076: callvirt instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Item(int32) + IL_007b: ldloc.0 + IL_007c: ldc.i4.2 + IL_007d: rem + IL_007e: ldc.i4.0 + IL_007f: ceq + IL_0081: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, !1) - IL_0080: stfld class [mscorlib]System.Tuple`2 Linq101Select01/digitOddEvens@46::current - IL_0085: ldc.i4.1 - IL_0086: ret + IL_0086: stfld class [mscorlib]System.Tuple`2 Linq101Select01/digitOddEvens@46::current + IL_008b: ldc.i4.1 + IL_008c: ret .line 100001,100001 : 0,0 '' - IL_0087: nop - IL_0088: br.s IL_0049 + IL_008d: nop + IL_008e: br.s IL_004f - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101Select01/digitOddEvens@46::pc + IL_0090: ldarg.0 + IL_0091: ldc.i4.3 + IL_0092: stfld int32 Linq101Select01/digitOddEvens@46::pc .line 46,46 : 9,42 '' - IL_0091: ldarg.0 - IL_0092: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' - IL_0097: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_009c: nop - IL_009d: ldarg.0 - IL_009e: ldnull - IL_009f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' - IL_00a4: ldarg.0 - IL_00a5: ldc.i4.3 - IL_00a6: stfld int32 Linq101Select01/digitOddEvens@46::pc - IL_00ab: ldarg.0 - IL_00ac: ldnull - IL_00ad: stfld class [mscorlib]System.Tuple`2 Linq101Select01/digitOddEvens@46::current - IL_00b2: ldc.i4.0 - IL_00b3: ret + IL_0097: ldarg.0 + IL_0098: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' + IL_009d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_00a2: nop + IL_00a3: ldarg.0 + IL_00a4: ldnull + IL_00a5: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' + IL_00aa: ldarg.0 + IL_00ab: ldc.i4.3 + IL_00ac: stfld int32 Linq101Select01/digitOddEvens@46::pc + IL_00b1: ldarg.0 + IL_00b2: ldnull + IL_00b3: stfld class [mscorlib]System.Tuple`2 Linq101Select01/digitOddEvens@46::current + IL_00b8: ldc.i4.0 + IL_00b9: ret } // end of method digitOddEvens@46::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -1651,138 +1761,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Select01/digitOddEvens@46::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Select01/digitOddEvens@46::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Select01/digitOddEvens@46::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Select01/digitOddEvens@46::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Select01/digitOddEvens@46::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld class [mscorlib]System.Tuple`2 Linq101Select01/digitOddEvens@46::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Select01/digitOddEvens@46::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld class [mscorlib]System.Tuple`2 Linq101Select01/digitOddEvens@46::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 46,46 : 9,42 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method digitOddEvens@46::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Select01/digitOddEvens@46::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method digitOddEvens@46::get_CheckClose .method public strict virtual instance class [mscorlib]System.Tuple`2 @@ -1899,7 +2029,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1>& next) cil managed { - // Code size 181 (0xb5) + // Code size 187 (0xbb) .maxstack 8 .locals init ([0] class [Utils]Utils/Product p) .line 100001,100001 : 0,0 '' @@ -1909,92 +2039,98 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0027 + IL_001d, + IL_001f) + IL_0019: br.s IL_002d - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_008b + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0088 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br IL_00ac + IL_0022: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_0024: nop + IL_0025: br.s IL_008e .line 100001,100001 : 0,0 '' IL_0027: nop + IL_0028: br IL_00b2 + + .line 100001,100001 : 0,0 '' + IL_002d: nop .line 53,53 : 9,56 '' - IL_0028: ldarg.0 - IL_0029: ldsfld class Linq101Select01/'productInfos@52-1' Linq101Select01/'productInfos@52-1'::@_instance - IL_002e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_products() - IL_0033: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,class [Utils]Utils/Product>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, + IL_002e: ldarg.0 + IL_002f: ldsfld class Linq101Select01/'productInfos@52-1' Linq101Select01/'productInfos@52-1'::@_instance + IL_0034: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_products() + IL_0039: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,class [Utils]Utils/Product>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0038: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_003d: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' - IL_0042: ldarg.0 - IL_0043: ldc.i4.1 - IL_0044: stfld int32 Linq101Select01/productInfos@53::pc + IL_003e: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0043: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' + IL_0048: ldarg.0 + IL_0049: ldc.i4.1 + IL_004a: stfld int32 Linq101Select01/productInfos@53::pc .line 53,53 : 9,56 '' - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' - IL_004f: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0054: brfalse.s IL_008b - - IL_0056: ldarg.0 - IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' - IL_005c: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0061: stloc.0 + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' + IL_0055: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_005a: brfalse.s IL_0091 + + IL_005c: ldarg.0 + IL_005d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' + IL_0062: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0067: stloc.0 + IL_0068: ldarg.0 + IL_0069: ldc.i4.2 + IL_006a: stfld int32 Linq101Select01/productInfos@53::pc .line 53,53 : 17,55 '' - IL_0062: ldarg.0 - IL_0063: ldc.i4.2 - IL_0064: stfld int32 Linq101Select01/productInfos@53::pc - IL_0069: ldarg.0 - IL_006a: ldloc.0 - IL_006b: callvirt instance string [Utils]Utils/Product::get_ProductName() + IL_006f: ldarg.0 IL_0070: ldloc.0 - IL_0071: callvirt instance string [Utils]Utils/Product::get_Category() + IL_0071: callvirt instance string [Utils]Utils/Product::get_ProductName() IL_0076: ldloc.0 - IL_0077: callvirt instance valuetype [mscorlib]System.Decimal [Utils]Utils/Product::get_UnitPrice() - IL_007c: newobj instance void class [mscorlib]System.Tuple`3::.ctor(!0, + IL_0077: callvirt instance string [Utils]Utils/Product::get_Category() + IL_007c: ldloc.0 + IL_007d: callvirt instance valuetype [mscorlib]System.Decimal [Utils]Utils/Product::get_UnitPrice() + IL_0082: newobj instance void class [mscorlib]System.Tuple`3::.ctor(!0, !1, !2) - IL_0081: stfld class [mscorlib]System.Tuple`3 Linq101Select01/productInfos@53::current - IL_0086: ldc.i4.1 - IL_0087: ret + IL_0087: stfld class [mscorlib]System.Tuple`3 Linq101Select01/productInfos@53::current + IL_008c: ldc.i4.1 + IL_008d: ret .line 100001,100001 : 0,0 '' - IL_0088: nop - IL_0089: br.s IL_0049 + IL_008e: nop + IL_008f: br.s IL_004f - IL_008b: ldarg.0 - IL_008c: ldc.i4.3 - IL_008d: stfld int32 Linq101Select01/productInfos@53::pc + IL_0091: ldarg.0 + IL_0092: ldc.i4.3 + IL_0093: stfld int32 Linq101Select01/productInfos@53::pc .line 53,53 : 9,56 '' - IL_0092: ldarg.0 - IL_0093: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' - IL_0098: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_009d: nop - IL_009e: ldarg.0 - IL_009f: ldnull - IL_00a0: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' - IL_00a5: ldarg.0 - IL_00a6: ldc.i4.3 - IL_00a7: stfld int32 Linq101Select01/productInfos@53::pc - IL_00ac: ldarg.0 - IL_00ad: ldnull - IL_00ae: stfld class [mscorlib]System.Tuple`3 Linq101Select01/productInfos@53::current - IL_00b3: ldc.i4.0 - IL_00b4: ret + IL_0098: ldarg.0 + IL_0099: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' + IL_009e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_00a3: nop + IL_00a4: ldarg.0 + IL_00a5: ldnull + IL_00a6: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' + IL_00ab: ldarg.0 + IL_00ac: ldc.i4.3 + IL_00ad: stfld int32 Linq101Select01/productInfos@53::pc + IL_00b2: ldarg.0 + IL_00b3: ldnull + IL_00b4: stfld class [mscorlib]System.Tuple`3 Linq101Select01/productInfos@53::current + IL_00b9: ldc.i4.0 + IL_00ba: ret } // end of method productInfos@53::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -2006,138 +2142,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Select01/productInfos@53::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Select01/productInfos@53::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Select01/productInfos@53::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Select01/productInfos@53::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Select01/productInfos@53::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld class [mscorlib]System.Tuple`3 Linq101Select01/productInfos@53::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Select01/productInfos@53::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld class [mscorlib]System.Tuple`3 Linq101Select01/productInfos@53::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 53,53 : 9,56 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method productInfos@53::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Select01/productInfos@53::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method productInfos@53::get_CheckClose .method public strict virtual instance class [mscorlib]System.Tuple`3 @@ -3822,7 +3978,7 @@ .method public static void main@() cil managed { .entrypoint - // Code size 1124 (0x464) + // Code size 1128 (0x468) .maxstack 13 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 numbers, [1] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 numsPlusOne, @@ -4080,210 +4236,214 @@ class [mscorlib]System.Collections.IEqualityComparer) IL_0238: ldc.i4.0 IL_0239: ceq - IL_023b: brfalse.s IL_0257 + IL_023b: brfalse.s IL_023f + + IL_023d: br.s IL_0241 + + IL_023f: br.s IL_025b .line 64,64 : 60,84 '' - IL_023d: ldstr "lowNums failed" - IL_0242: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0247: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_024c: pop + IL_0241: ldstr "lowNums failed" + IL_0246: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_024b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_0250: pop .line 64,64 : 86,92 '' - IL_024d: ldc.i4.1 - IL_024e: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32) - IL_0253: pop + IL_0251: ldc.i4.1 + IL_0252: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32) + IL_0257: pop .line 100001,100001 : 0,0 '' - IL_0254: nop - IL_0255: br.s IL_0258 + IL_0258: nop + IL_0259: br.s IL_025c .line 100001,100001 : 0,0 '' - IL_0257: nop + IL_025b: nop .line 67,67 : 1,37 '' - IL_0258: ldc.i4.0 - IL_0259: ldc.i4.2 - IL_025a: ldc.i4.4 - IL_025b: ldc.i4.5 - IL_025c: ldc.i4.6 - IL_025d: ldc.i4.8 - IL_025e: ldc.i4.s 9 - IL_0260: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() - IL_0265: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_025c: ldc.i4.0 + IL_025d: ldc.i4.2 + IL_025e: ldc.i4.4 + IL_025f: ldc.i4.5 + IL_0260: ldc.i4.6 + IL_0261: ldc.i4.8 + IL_0262: ldc.i4.s 9 + IL_0264: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() + IL_0269: 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_026a: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_026e: 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_026f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_0273: 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_0274: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_0278: 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_0279: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_027d: 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_027e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_0282: 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_0283: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_0287: 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_0288: dup - IL_0289: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Select01::numbersA@67 - IL_028e: stloc.s numbersA + IL_028c: dup + IL_028d: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Select01::numbersA@67 + IL_0292: stloc.s numbersA .line 68,68 : 1,31 '' - IL_0290: ldc.i4.1 - IL_0291: ldc.i4.3 - IL_0292: ldc.i4.5 - IL_0293: ldc.i4.7 - IL_0294: ldc.i4.8 - IL_0295: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() - IL_029a: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_0294: ldc.i4.1 + IL_0295: ldc.i4.3 + IL_0296: ldc.i4.5 + IL_0297: ldc.i4.7 + IL_0298: ldc.i4.8 + IL_0299: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() + IL_029e: 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_029f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_02a3: 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_02a4: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_02a8: 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_02a9: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_02ad: 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_02ae: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_02b2: 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_02b3: dup - IL_02b4: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Select01::numbersB@68 - IL_02b9: stloc.s numbersB + IL_02b7: dup + IL_02b8: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Select01::numbersB@68 + IL_02bd: stloc.s numbersB .line 70,76 : 1,21 '' - IL_02bb: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_02c0: stloc.s V_30 - IL_02c2: ldloc.s V_30 - IL_02c4: ldloc.s V_30 + IL_02bf: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_02c4: stloc.s V_30 IL_02c6: ldloc.s V_30 IL_02c8: ldloc.s V_30 - IL_02ca: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_numbersA() - IL_02cf: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_02d4: ldloc.s V_30 - IL_02d6: newobj instance void Linq101Select01/pairs@72::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_02db: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_02ca: ldloc.s V_30 + IL_02cc: ldloc.s V_30 + IL_02ce: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_numbersA() + IL_02d3: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_02d8: ldloc.s V_30 + IL_02da: newobj instance void Linq101Select01/pairs@72::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_02df: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_02e0: ldsfld class Linq101Select01/'pairs@74-2' Linq101Select01/'pairs@74-2'::@_instance - IL_02e5: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_02e4: ldsfld class Linq101Select01/'pairs@74-2' Linq101Select01/'pairs@74-2'::@_instance + IL_02e9: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_02ea: ldsfld class Linq101Select01/'pairs@75-3' Linq101Select01/'pairs@75-3'::@_instance - IL_02ef: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_02ee: ldsfld class Linq101Select01/'pairs@75-3' Linq101Select01/'pairs@75-3'::@_instance + IL_02f3: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_02f4: 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_02f9: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_02fe: dup - IL_02ff: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Select01::pairs@70 - IL_0304: stloc.s pairs + IL_02f8: 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_02fd: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0302: dup + IL_0303: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Select01::pairs@70 + IL_0308: stloc.s pairs .line 79,79 : 1,34 '' - IL_0306: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [Utils]Utils::getCustomerList() - IL_030b: dup - IL_030c: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Select01::customers@79 - IL_0311: stloc.s customers + IL_030a: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [Utils]Utils::getCustomerList() + IL_030f: dup + IL_0310: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Select01::customers@79 + IL_0315: stloc.s customers .line 80,86 : 1,21 '' - IL_0313: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_0318: stloc.s V_31 - IL_031a: ldloc.s V_31 - IL_031c: ldloc.s V_31 + IL_0317: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_031c: stloc.s V_31 IL_031e: ldloc.s V_31 IL_0320: ldloc.s V_31 - IL_0322: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_customers() - IL_0327: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_032c: ldloc.s V_31 - IL_032e: newobj instance void Linq101Select01/orders@82::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_0333: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0322: ldloc.s V_31 + IL_0324: ldloc.s V_31 + IL_0326: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_customers() + IL_032b: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0330: ldloc.s V_31 + IL_0332: newobj instance void Linq101Select01/orders@82::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_0337: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0338: ldsfld class Linq101Select01/'orders@84-2' Linq101Select01/'orders@84-2'::@_instance - IL_033d: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_033c: ldsfld class Linq101Select01/'orders@84-2' Linq101Select01/'orders@84-2'::@_instance + IL_0341: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0342: ldsfld class Linq101Select01/'orders@85-3' Linq101Select01/'orders@85-3'::@_instance - IL_0347: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`3>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0346: ldsfld class Linq101Select01/'orders@85-3' Linq101Select01/'orders@85-3'::@_instance + IL_034b: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`3>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_034c: 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_0351: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0356: dup - IL_0357: stsfld class [mscorlib]System.Tuple`3[] ''.$Linq101Select01::orders@80 - IL_035c: stloc.s orders + IL_0350: 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_0355: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_035a: dup + IL_035b: stsfld class [mscorlib]System.Tuple`3[] ''.$Linq101Select01::orders@80 + IL_0360: stloc.s orders .line 89,95 : 1,21 '' - IL_035e: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_0363: stloc.s V_32 - IL_0365: ldloc.s V_32 - IL_0367: ldloc.s V_32 + IL_0362: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_0367: stloc.s V_32 IL_0369: ldloc.s V_32 IL_036b: ldloc.s V_32 - IL_036d: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_customers() - IL_0372: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0377: ldloc.s V_32 - IL_0379: newobj instance void Linq101Select01/orders2@91::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_037e: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_036d: ldloc.s V_32 + IL_036f: ldloc.s V_32 + IL_0371: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_customers() + IL_0376: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_037b: ldloc.s V_32 + IL_037d: newobj instance void Linq101Select01/orders2@91::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_0382: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0383: ldsfld class Linq101Select01/'orders2@93-2' Linq101Select01/'orders2@93-2'::@_instance - IL_0388: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0387: ldsfld class Linq101Select01/'orders2@93-2' Linq101Select01/'orders2@93-2'::@_instance + IL_038c: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_038d: ldsfld class Linq101Select01/'orders2@94-3' Linq101Select01/'orders2@94-3'::@_instance - IL_0392: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`3>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0391: ldsfld class Linq101Select01/'orders2@94-3' Linq101Select01/'orders2@94-3'::@_instance + IL_0396: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`3>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0397: 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_039c: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_03a1: dup - IL_03a2: stsfld class [mscorlib]System.Tuple`3[] ''.$Linq101Select01::orders2@89 - IL_03a7: stloc.s orders2 - IL_03a9: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_03ae: stloc.s V_33 - IL_03b0: ldloc.s V_33 - IL_03b2: ldloc.s V_33 + IL_039b: 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_03a0: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_03a5: dup + IL_03a6: stsfld class [mscorlib]System.Tuple`3[] ''.$Linq101Select01::orders2@89 + IL_03ab: stloc.s orders2 + IL_03ad: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_03b2: stloc.s V_33 IL_03b4: ldloc.s V_33 IL_03b6: ldloc.s V_33 - IL_03b8: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_customers() - IL_03bd: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_03c2: ldloc.s V_33 - IL_03c4: newobj instance void Linq101Select01/orders3@100::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_03c9: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_03b8: ldloc.s V_33 + IL_03ba: ldloc.s V_33 + IL_03bc: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_customers() + IL_03c1: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_03c6: ldloc.s V_33 + IL_03c8: newobj instance void Linq101Select01/orders3@100::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_03cd: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_03ce: ldsfld class Linq101Select01/'orders3@102-2' Linq101Select01/'orders3@102-2'::@_instance - IL_03d3: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_03d2: ldsfld class Linq101Select01/'orders3@102-2' Linq101Select01/'orders3@102-2'::@_instance + IL_03d7: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_03d8: ldsfld class Linq101Select01/'orders3@103-3' Linq101Select01/'orders3@103-3'::@_instance - IL_03dd: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`3>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_03dc: ldsfld class Linq101Select01/'orders3@103-3' Linq101Select01/'orders3@103-3'::@_instance + IL_03e1: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`3>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_03e2: 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_03e7: dup - IL_03e8: stsfld class [mscorlib]System.Collections.Generic.IEnumerable`1> ''.$Linq101Select01::orders3@98 - IL_03ed: stloc.s orders3 + IL_03e6: 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_03eb: dup + IL_03ec: stsfld class [mscorlib]System.Collections.Generic.IEnumerable`1> ''.$Linq101Select01::orders3@98 + IL_03f1: stloc.s orders3 .line 107,107 : 1,38 '' - IL_03ef: ldc.i4 0x7cd - IL_03f4: ldc.i4.1 - IL_03f5: ldc.i4.1 - IL_03f6: newobj instance void [mscorlib]System.DateTime::.ctor(int32, + IL_03f3: ldc.i4 0x7cd + IL_03f8: ldc.i4.1 + IL_03f9: ldc.i4.1 + IL_03fa: newobj instance void [mscorlib]System.DateTime::.ctor(int32, int32, int32) - IL_03fb: dup - IL_03fc: stsfld valuetype [mscorlib]System.DateTime ''.$Linq101Select01::cutOffDate@107 - IL_0401: stloc.s cutOffDate - IL_0403: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_0408: stloc.s V_34 - IL_040a: ldloc.s V_34 - IL_040c: ldloc.s V_34 + IL_03ff: dup + IL_0400: stsfld valuetype [mscorlib]System.DateTime ''.$Linq101Select01::cutOffDate@107 + IL_0405: stloc.s cutOffDate + IL_0407: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_040c: stloc.s V_34 IL_040e: ldloc.s V_34 IL_0410: ldloc.s V_34 IL_0412: ldloc.s V_34 IL_0414: ldloc.s V_34 - IL_0416: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_customers() - IL_041b: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0420: ldloc.s V_34 - IL_0422: newobj instance void Linq101Select01/orders4@111::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_0427: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0416: ldloc.s V_34 + IL_0418: ldloc.s V_34 + IL_041a: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_customers() + IL_041f: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0424: ldloc.s V_34 + IL_0426: newobj instance void Linq101Select01/orders4@111::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_042b: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_042c: ldsfld class Linq101Select01/'orders4@112-1' Linq101Select01/'orders4@112-1'::@_instance - IL_0431: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0430: ldsfld class Linq101Select01/'orders4@112-1' Linq101Select01/'orders4@112-1'::@_instance + IL_0435: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0436: ldloc.s V_34 - IL_0438: newobj instance void Linq101Select01/'orders4@111-2'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_043d: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_043a: ldloc.s V_34 + IL_043c: newobj instance void Linq101Select01/'orders4@111-2'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_0441: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0442: ldsfld class Linq101Select01/'orders4@114-4' Linq101Select01/'orders4@114-4'::@_instance - IL_0447: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0446: ldsfld class Linq101Select01/'orders4@114-4' Linq101Select01/'orders4@114-4'::@_instance + IL_044b: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_044c: ldsfld class Linq101Select01/'orders4@115-5' Linq101Select01/'orders4@115-5'::@_instance - IL_0451: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0450: ldsfld class Linq101Select01/'orders4@115-5' Linq101Select01/'orders4@115-5'::@_instance + IL_0455: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0456: 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_045b: dup - IL_045c: stsfld class [mscorlib]System.Collections.Generic.IEnumerable`1> ''.$Linq101Select01::orders4@109 - IL_0461: stloc.s orders4 - IL_0463: ret + IL_045a: 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_045f: dup + IL_0460: stsfld class [mscorlib]System.Collections.Generic.IEnumerable`1> ''.$Linq101Select01::orders4@109 + IL_0465: stloc.s orders4 + IL_0467: ret } // end of method $Linq101Select01::main@ } // end of class ''.$Linq101Select01 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101SetOperators01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101SetOperators01.il.bsl index 02331dbae8c..056e0bf87bd 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101SetOperators01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101SetOperators01.il.bsl @@ -45,13 +45,13 @@ // Offset: 0x00000390 Length: 0x0000011E } .module Linq101SetOperators01.exe -// MVID: {60B78A59-4EE5-349F-A745-0383598AB760} +// MVID: {5FCFFD0D-4EE5-349F-A745-03830DFDCF5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06940000 +// Image base: 0x05230000 // =============== CLASS MEMBERS DECLARATION =================== @@ -100,7 +100,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 148 (0x94) + // Code size 154 (0x9a) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -112,84 +112,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_006a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0067 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_008b + IL_0022: br.s IL_0070 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006d + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0091 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 13,13 : 9,33 '' - IL_0025: ldarg.0 - IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101SetOperators01::get_factorsOf300() - IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc + IL_002b: ldarg.0 + IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101SetOperators01::get_factorsOf300() + IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc .line 13,13 : 9,33 '' - IL_003c: ldarg.0 - IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' - IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0047: brfalse.s IL_006a - - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' - IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0054: stloc.0 + IL_0042: ldarg.0 + IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' + IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_004d: brfalse.s IL_0070 + + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' + IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005a: stloc.0 .line 13,13 : 9,33 '' - IL_0055: ldloc.0 - IL_0056: stloc.1 + IL_005b: ldloc.0 + IL_005c: stloc.1 + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc .line 14,14 : 9,17 '' - IL_0057: ldarg.0 - IL_0058: ldc.i4.2 - IL_0059: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc - IL_005e: ldarg.0 - IL_005f: ldloc.1 - IL_0060: stfld int32 Linq101SetOperators01/uniqueFactors@13::current - IL_0065: ldc.i4.1 - IL_0066: ret - - .line 100001,100001 : 0,0 '' - IL_0067: nop - IL_0068: br.s IL_003c - - IL_006a: ldarg.0 - IL_006b: ldc.i4.3 - IL_006c: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc + IL_0064: ldarg.0 + IL_0065: ldloc.1 + IL_0066: stfld int32 Linq101SetOperators01/uniqueFactors@13::current + IL_006b: ldc.i4.1 + IL_006c: ret + + .line 100001,100001 : 0,0 '' + IL_006d: nop + IL_006e: br.s IL_0042 + + IL_0070: ldarg.0 + IL_0071: ldc.i4.3 + IL_0072: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc .line 13,13 : 9,33 '' - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldnull - IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' - IL_0084: ldarg.0 - IL_0085: ldc.i4.3 - IL_0086: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc - IL_008b: ldarg.0 - IL_008c: ldc.i4.0 - IL_008d: stfld int32 Linq101SetOperators01/uniqueFactors@13::current + IL_0077: ldarg.0 + IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' + IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0082: nop + IL_0083: ldarg.0 + IL_0084: ldnull + IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc + IL_0091: ldarg.0 IL_0092: ldc.i4.0 - IL_0093: ret + IL_0093: stfld int32 Linq101SetOperators01/uniqueFactors@13::current + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method uniqueFactors@13::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -201,138 +207,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101SetOperators01/uniqueFactors@13::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101SetOperators01/uniqueFactors@13::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc - IL_005d: ldarg.0 - IL_005e: ldc.i4.0 - IL_005f: stfld int32 Linq101SetOperators01/uniqueFactors@13::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc + IL_0068: ldarg.0 + IL_0069: ldc.i4.0 + IL_006a: stfld int32 Linq101SetOperators01/uniqueFactors@13::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 13,13 : 9,33 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method uniqueFactors@13::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101SetOperators01/uniqueFactors@13::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method uniqueFactors@13::get_CheckClose .method public strict virtual instance int32 @@ -449,7 +475,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 161 (0xa1) + // Code size 167 (0xa7) .maxstack 7 .locals init ([0] class [Utils]Utils/Product p) .line 100001,100001 : 0,0 '' @@ -459,85 +485,91 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_0077 + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0074 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_0098 + IL_0022: br.s IL_007d .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_007a + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_009e + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 23,23 : 9,26 '' - IL_0025: ldarg.0 - IL_0026: ldsfld class Linq101SetOperators01/'categoryNames@22-1' Linq101SetOperators01/'categoryNames@22-1'::@_instance - IL_002b: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101SetOperators01::get_products() - IL_0030: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,class [Utils]Utils/Product>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, + IL_002b: ldarg.0 + IL_002c: ldsfld class Linq101SetOperators01/'categoryNames@22-1' Linq101SetOperators01/'categoryNames@22-1'::@_instance + IL_0031: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101SetOperators01::get_products() + IL_0036: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,class [Utils]Utils/Product>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0035: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_003a: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' - IL_003f: ldarg.0 - IL_0040: ldc.i4.1 - IL_0041: stfld int32 Linq101SetOperators01/categoryNames@23::pc + IL_003b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0040: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' + IL_0045: ldarg.0 + IL_0046: ldc.i4.1 + IL_0047: stfld int32 Linq101SetOperators01/categoryNames@23::pc .line 23,23 : 9,26 '' - IL_0046: ldarg.0 - IL_0047: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' - IL_004c: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0051: brfalse.s IL_0077 - - IL_0053: ldarg.0 - IL_0054: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' - IL_0059: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005e: stloc.0 + IL_004c: ldarg.0 + IL_004d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' + IL_0052: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0057: brfalse.s IL_007d + + IL_0059: ldarg.0 + IL_005a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' + IL_005f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0064: stloc.0 + IL_0065: ldarg.0 + IL_0066: ldc.i4.2 + IL_0067: stfld int32 Linq101SetOperators01/categoryNames@23::pc .line 23,23 : 16,26 '' - IL_005f: ldarg.0 - IL_0060: ldc.i4.2 - IL_0061: stfld int32 Linq101SetOperators01/categoryNames@23::pc - IL_0066: ldarg.0 - IL_0067: ldloc.0 - IL_0068: callvirt instance string [Utils]Utils/Product::get_Category() - IL_006d: stfld string Linq101SetOperators01/categoryNames@23::current - IL_0072: ldc.i4.1 - IL_0073: ret + IL_006c: ldarg.0 + IL_006d: ldloc.0 + IL_006e: callvirt instance string [Utils]Utils/Product::get_Category() + IL_0073: stfld string Linq101SetOperators01/categoryNames@23::current + IL_0078: ldc.i4.1 + IL_0079: ret .line 100001,100001 : 0,0 '' - IL_0074: nop - IL_0075: br.s IL_0046 + IL_007a: nop + IL_007b: br.s IL_004c - IL_0077: ldarg.0 - IL_0078: ldc.i4.3 - IL_0079: stfld int32 Linq101SetOperators01/categoryNames@23::pc + IL_007d: ldarg.0 + IL_007e: ldc.i4.3 + IL_007f: stfld int32 Linq101SetOperators01/categoryNames@23::pc .line 23,23 : 9,26 '' - IL_007e: ldarg.0 - IL_007f: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' - IL_0084: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0089: nop - IL_008a: ldarg.0 - IL_008b: ldnull - IL_008c: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' - IL_0091: ldarg.0 - IL_0092: ldc.i4.3 - IL_0093: stfld int32 Linq101SetOperators01/categoryNames@23::pc - IL_0098: ldarg.0 - IL_0099: ldnull - IL_009a: stfld string Linq101SetOperators01/categoryNames@23::current - IL_009f: ldc.i4.0 - IL_00a0: ret + IL_0084: ldarg.0 + IL_0085: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' + IL_008a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_008f: nop + IL_0090: ldarg.0 + IL_0091: ldnull + IL_0092: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' + IL_0097: ldarg.0 + IL_0098: ldc.i4.3 + IL_0099: stfld int32 Linq101SetOperators01/categoryNames@23::pc + IL_009e: ldarg.0 + IL_009f: ldnull + IL_00a0: stfld string Linq101SetOperators01/categoryNames@23::current + IL_00a5: ldc.i4.0 + IL_00a6: ret } // end of method categoryNames@23::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -549,138 +581,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101SetOperators01/categoryNames@23::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101SetOperators01/categoryNames@23::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101SetOperators01/categoryNames@23::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101SetOperators01/categoryNames@23::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101SetOperators01/categoryNames@23::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld string Linq101SetOperators01/categoryNames@23::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101SetOperators01/categoryNames@23::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld string Linq101SetOperators01/categoryNames@23::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 23,23 : 9,26 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f + + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method categoryNames@23::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101SetOperators01/categoryNames@23::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method categoryNames@23::get_CheckClose .method public strict virtual instance string @@ -797,7 +849,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 170 (0xaa) + // Code size 176 (0xb0) .maxstack 7 .locals init ([0] class [Utils]Utils/Product p) .line 100001,100001 : 0,0 '' @@ -807,87 +859,93 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0027 + IL_001d, + IL_001f) + IL_0019: br.s IL_002d - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_0080 + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_007d + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br IL_00a1 + IL_0022: br.s IL_0086 + + .line 100001,100001 : 0,0 '' + IL_0024: nop + IL_0025: br.s IL_0083 .line 100001,100001 : 0,0 '' IL_0027: nop + IL_0028: br IL_00a7 + + .line 100001,100001 : 0,0 '' + IL_002d: nop .line 33,33 : 9,33 '' - IL_0028: ldarg.0 - IL_0029: ldsfld class Linq101SetOperators01/'productFirstChars@32-1' Linq101SetOperators01/'productFirstChars@32-1'::@_instance - IL_002e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101SetOperators01::get_products() - IL_0033: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,class [Utils]Utils/Product>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, + IL_002e: ldarg.0 + IL_002f: ldsfld class Linq101SetOperators01/'productFirstChars@32-1' Linq101SetOperators01/'productFirstChars@32-1'::@_instance + IL_0034: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101SetOperators01::get_products() + IL_0039: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,class [Utils]Utils/Product>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0038: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_003d: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' - IL_0042: ldarg.0 - IL_0043: ldc.i4.1 - IL_0044: stfld int32 Linq101SetOperators01/productFirstChars@33::pc + IL_003e: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0043: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' + IL_0048: ldarg.0 + IL_0049: ldc.i4.1 + IL_004a: stfld int32 Linq101SetOperators01/productFirstChars@33::pc .line 33,33 : 9,33 '' - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' - IL_004f: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0054: brfalse.s IL_0080 - - IL_0056: ldarg.0 - IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' - IL_005c: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0061: stloc.0 + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' + IL_0055: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_005a: brfalse.s IL_0086 + + IL_005c: ldarg.0 + IL_005d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' + IL_0062: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0067: stloc.0 + IL_0068: ldarg.0 + IL_0069: ldc.i4.2 + IL_006a: stfld int32 Linq101SetOperators01/productFirstChars@33::pc .line 33,33 : 29,30 '' - IL_0062: ldarg.0 - IL_0063: ldc.i4.2 - IL_0064: stfld int32 Linq101SetOperators01/productFirstChars@33::pc - IL_0069: ldarg.0 - IL_006a: ldloc.0 - IL_006b: callvirt instance string [Utils]Utils/Product::get_ProductName() - IL_0070: ldc.i4.0 - IL_0071: callvirt instance char [netstandard]System.String::get_Chars(int32) - IL_0076: stfld char Linq101SetOperators01/productFirstChars@33::current - IL_007b: ldc.i4.1 - IL_007c: ret - - .line 100001,100001 : 0,0 '' - IL_007d: nop - IL_007e: br.s IL_0049 - - IL_0080: ldarg.0 - IL_0081: ldc.i4.3 - IL_0082: stfld int32 Linq101SetOperators01/productFirstChars@33::pc + IL_006f: ldarg.0 + IL_0070: ldloc.0 + IL_0071: callvirt instance string [Utils]Utils/Product::get_ProductName() + IL_0076: ldc.i4.0 + IL_0077: callvirt instance char [netstandard]System.String::get_Chars(int32) + IL_007c: stfld char Linq101SetOperators01/productFirstChars@33::current + IL_0081: ldc.i4.1 + IL_0082: ret + + .line 100001,100001 : 0,0 '' + IL_0083: nop + IL_0084: br.s IL_004f + + IL_0086: ldarg.0 + IL_0087: ldc.i4.3 + IL_0088: stfld int32 Linq101SetOperators01/productFirstChars@33::pc .line 33,33 : 9,33 '' - IL_0087: ldarg.0 - IL_0088: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' - IL_008d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0092: nop - IL_0093: ldarg.0 - IL_0094: ldnull - IL_0095: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' - IL_009a: ldarg.0 - IL_009b: ldc.i4.3 - IL_009c: stfld int32 Linq101SetOperators01/productFirstChars@33::pc - IL_00a1: ldarg.0 - IL_00a2: ldc.i4.0 - IL_00a3: stfld char Linq101SetOperators01/productFirstChars@33::current + IL_008d: ldarg.0 + IL_008e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' + IL_0093: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0098: nop + IL_0099: ldarg.0 + IL_009a: ldnull + IL_009b: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' + IL_00a0: ldarg.0 + IL_00a1: ldc.i4.3 + IL_00a2: stfld int32 Linq101SetOperators01/productFirstChars@33::pc + IL_00a7: ldarg.0 IL_00a8: ldc.i4.0 - IL_00a9: ret + IL_00a9: stfld char Linq101SetOperators01/productFirstChars@33::current + IL_00ae: ldc.i4.0 + IL_00af: ret } // end of method productFirstChars@33::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -899,138 +957,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101SetOperators01/productFirstChars@33::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101SetOperators01/productFirstChars@33::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101SetOperators01/productFirstChars@33::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101SetOperators01/productFirstChars@33::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101SetOperators01/productFirstChars@33::pc - IL_005d: ldarg.0 - IL_005e: ldc.i4.0 - IL_005f: stfld char Linq101SetOperators01/productFirstChars@33::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101SetOperators01/productFirstChars@33::pc + IL_0068: ldarg.0 + IL_0069: ldc.i4.0 + IL_006a: stfld char Linq101SetOperators01/productFirstChars@33::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 33,33 : 9,33 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method productFirstChars@33::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101SetOperators01/productFirstChars@33::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method productFirstChars@33::get_CheckClose .method public strict virtual instance char @@ -1147,7 +1225,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 170 (0xaa) + // Code size 176 (0xb0) .maxstack 7 .locals init ([0] class [Utils]Utils/Customer c) .line 100001,100001 : 0,0 '' @@ -1157,87 +1235,93 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0027 + IL_001d, + IL_001f) + IL_0019: br.s IL_002d - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_0080 + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_007d + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br IL_00a1 + IL_0022: br.s IL_0086 + + .line 100001,100001 : 0,0 '' + IL_0024: nop + IL_0025: br.s IL_0083 .line 100001,100001 : 0,0 '' IL_0027: nop + IL_0028: br IL_00a7 + + .line 100001,100001 : 0,0 '' + IL_002d: nop .line 39,39 : 9,33 '' - IL_0028: ldarg.0 - IL_0029: ldsfld class Linq101SetOperators01/'customerFirstChars@38-1' Linq101SetOperators01/'customerFirstChars@38-1'::@_instance - IL_002e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101SetOperators01::get_customers() - IL_0033: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,class [Utils]Utils/Customer>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, + IL_002e: ldarg.0 + IL_002f: ldsfld class Linq101SetOperators01/'customerFirstChars@38-1' Linq101SetOperators01/'customerFirstChars@38-1'::@_instance + IL_0034: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101SetOperators01::get_customers() + IL_0039: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,class [Utils]Utils/Customer>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0038: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_003d: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' - IL_0042: ldarg.0 - IL_0043: ldc.i4.1 - IL_0044: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc + IL_003e: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0043: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' + IL_0048: ldarg.0 + IL_0049: ldc.i4.1 + IL_004a: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc .line 39,39 : 9,33 '' - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' - IL_004f: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0054: brfalse.s IL_0080 - - IL_0056: ldarg.0 - IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' - IL_005c: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0061: stloc.0 + IL_004f: ldarg.0 + IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' + IL_0055: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_005a: brfalse.s IL_0086 + + IL_005c: ldarg.0 + IL_005d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' + IL_0062: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0067: stloc.0 + IL_0068: ldarg.0 + IL_0069: ldc.i4.2 + IL_006a: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc .line 39,39 : 29,30 '' - IL_0062: ldarg.0 - IL_0063: ldc.i4.2 - IL_0064: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc - IL_0069: ldarg.0 - IL_006a: ldloc.0 - IL_006b: callvirt instance string [Utils]Utils/Customer::get_CompanyName() - IL_0070: ldc.i4.0 - IL_0071: callvirt instance char [netstandard]System.String::get_Chars(int32) - IL_0076: stfld char Linq101SetOperators01/customerFirstChars@39::current - IL_007b: ldc.i4.1 - IL_007c: ret - - .line 100001,100001 : 0,0 '' - IL_007d: nop - IL_007e: br.s IL_0049 - - IL_0080: ldarg.0 - IL_0081: ldc.i4.3 - IL_0082: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc + IL_006f: ldarg.0 + IL_0070: ldloc.0 + IL_0071: callvirt instance string [Utils]Utils/Customer::get_CompanyName() + IL_0076: ldc.i4.0 + IL_0077: callvirt instance char [netstandard]System.String::get_Chars(int32) + IL_007c: stfld char Linq101SetOperators01/customerFirstChars@39::current + IL_0081: ldc.i4.1 + IL_0082: ret + + .line 100001,100001 : 0,0 '' + IL_0083: nop + IL_0084: br.s IL_004f + + IL_0086: ldarg.0 + IL_0087: ldc.i4.3 + IL_0088: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc .line 39,39 : 9,33 '' - IL_0087: ldarg.0 - IL_0088: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' - IL_008d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0092: nop - IL_0093: ldarg.0 - IL_0094: ldnull - IL_0095: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' - IL_009a: ldarg.0 - IL_009b: ldc.i4.3 - IL_009c: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc - IL_00a1: ldarg.0 - IL_00a2: ldc.i4.0 - IL_00a3: stfld char Linq101SetOperators01/customerFirstChars@39::current + IL_008d: ldarg.0 + IL_008e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' + IL_0093: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0098: nop + IL_0099: ldarg.0 + IL_009a: ldnull + IL_009b: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' + IL_00a0: ldarg.0 + IL_00a1: ldc.i4.3 + IL_00a2: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc + IL_00a7: ldarg.0 IL_00a8: ldc.i4.0 - IL_00a9: ret + IL_00a9: stfld char Linq101SetOperators01/customerFirstChars@39::current + IL_00ae: ldc.i4.0 + IL_00af: ret } // end of method customerFirstChars@39::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -1249,138 +1333,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101SetOperators01/customerFirstChars@39::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101SetOperators01/customerFirstChars@39::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc - IL_005d: ldarg.0 - IL_005e: ldc.i4.0 - IL_005f: stfld char Linq101SetOperators01/customerFirstChars@39::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc + IL_0068: ldarg.0 + IL_0069: ldc.i4.0 + IL_006a: stfld char Linq101SetOperators01/customerFirstChars@39::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 39,39 : 9,33 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method customerFirstChars@39::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101SetOperators01/customerFirstChars@39::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method customerFirstChars@39::get_CheckClose .method public strict virtual instance char diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Where01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Where01.il.bsl index b60623e8746..4f10a3e66f0 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Where01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Where01.il.bsl @@ -45,13 +45,13 @@ // Offset: 0x000003D0 Length: 0x0000012E } .module Linq101Where01.exe -// MVID: {60B78A59-FF23-CD21-A745-0383598AB760} +// MVID: {5FCFFD0D-FF23-CD21-A745-03830DFDCF5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06550000 +// Image base: 0x00C30000 // =============== CLASS MEMBERS DECLARATION =================== @@ -363,34 +363,38 @@ .method public strict virtual instance bool Invoke(class [Utils]Utils/Product p) cil managed { - // Code size 37 (0x25) + // Code size 41 (0x29) .maxstack 10 .line 100001,100001 : 0,0 '' IL_0000: ldarg.1 IL_0001: callvirt instance int32 [Utils]Utils/Product::get_UnitsInStock() IL_0006: ldc.i4.0 - IL_0007: ble.s IL_0023 + IL_0007: ble.s IL_000b + + IL_0009: br.s IL_000d + + IL_000b: br.s IL_0027 .line 100001,100001 : 0,0 '' - IL_0009: ldarg.1 - IL_000a: callvirt instance valuetype [mscorlib]System.Decimal [Utils]Utils/Product::get_UnitPrice() - IL_000f: ldc.i4 0x12c - IL_0014: ldc.i4.0 - IL_0015: ldc.i4.0 - IL_0016: ldc.i4.0 - IL_0017: ldc.i4.2 - IL_0018: newobj instance void [netstandard]System.Decimal::.ctor(int32, + IL_000d: ldarg.1 + IL_000e: callvirt instance valuetype [mscorlib]System.Decimal [Utils]Utils/Product::get_UnitPrice() + IL_0013: ldc.i4 0x12c + IL_0018: ldc.i4.0 + IL_0019: ldc.i4.0 + IL_001a: ldc.i4.0 + IL_001b: ldc.i4.2 + IL_001c: newobj instance void [netstandard]System.Decimal::.ctor(int32, int32, int32, bool, uint8) - IL_001d: call bool [netstandard]System.Decimal::op_GreaterThan(valuetype [netstandard]System.Decimal, + IL_0021: call bool [netstandard]System.Decimal::op_GreaterThan(valuetype [netstandard]System.Decimal, valuetype [netstandard]System.Decimal) - IL_0022: ret + IL_0026: ret .line 100001,100001 : 0,0 '' - IL_0023: ldc.i4.0 - IL_0024: ret + IL_0027: ldc.i4.0 + IL_0028: ret } // end of method 'expensiveInStockProducts@33-1'::Invoke .method private specialname rtspecialname static @@ -625,22 +629,26 @@ Invoke(int32 i, string d) cil managed { - // Code size 18 (0x12) + // Code size 22 (0x16) .maxstack 8 .line 54,54 : 29,49 '' IL_0000: ldarg.2 IL_0001: callvirt instance int32 [mscorlib]System.String::get_Length() IL_0006: ldarg.1 - IL_0007: bge.s IL_0010 + IL_0007: bge.s IL_000b + + IL_0009: br.s IL_000d + + IL_000b: br.s IL_0014 .line 54,54 : 50,57 '' - IL_0009: ldarg.2 - IL_000a: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::Some(!0) - IL_000f: ret + IL_000d: ldarg.2 + IL_000e: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::Some(!0) + IL_0013: ret .line 54,54 : 63,67 '' - IL_0010: ldnull - IL_0011: ret + IL_0014: ldnull + IL_0015: ret } // end of method 'shortDigits@54-1'::Invoke .method private specialname rtspecialname static @@ -739,7 +747,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 156 (0x9c) + // Code size 162 (0xa2) .maxstack 7 .locals init ([0] string d) .line 100001,100001 : 0,0 '' @@ -749,84 +757,90 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_0072 + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_006f + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_0093 + IL_0022: br.s IL_0078 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_0075 + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0099 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 52,52 : 9,17 '' - IL_0025: ldarg.0 - IL_0026: ldsfld class Linq101Where01/'shortDigits@51-3' Linq101Where01/'shortDigits@51-3'::@_instance - IL_002b: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Where01::get_digits() - IL_0030: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,string>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, + IL_002b: ldarg.0 + IL_002c: ldsfld class Linq101Where01/'shortDigits@51-3' Linq101Where01/'shortDigits@51-3'::@_instance + IL_0031: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Where01::get_digits() + IL_0036: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,string>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0035: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_003a: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' - IL_003f: ldarg.0 - IL_0040: ldc.i4.1 - IL_0041: stfld int32 Linq101Where01/'shortDigits@52-2'::pc + IL_003b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0040: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' + IL_0045: ldarg.0 + IL_0046: ldc.i4.1 + IL_0047: stfld int32 Linq101Where01/'shortDigits@52-2'::pc .line 52,52 : 9,17 '' - IL_0046: ldarg.0 - IL_0047: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' - IL_004c: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0051: brfalse.s IL_0072 - - IL_0053: ldarg.0 - IL_0054: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' - IL_0059: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005e: stloc.0 + IL_004c: ldarg.0 + IL_004d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' + IL_0052: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0057: brfalse.s IL_0078 + + IL_0059: ldarg.0 + IL_005a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' + IL_005f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0064: stloc.0 + IL_0065: ldarg.0 + IL_0066: ldc.i4.2 + IL_0067: stfld int32 Linq101Where01/'shortDigits@52-2'::pc .line 52,52 : 16,17 '' - IL_005f: ldarg.0 - IL_0060: ldc.i4.2 - IL_0061: stfld int32 Linq101Where01/'shortDigits@52-2'::pc - IL_0066: ldarg.0 - IL_0067: ldloc.0 - IL_0068: stfld string Linq101Where01/'shortDigits@52-2'::current - IL_006d: ldc.i4.1 - IL_006e: ret + IL_006c: ldarg.0 + IL_006d: ldloc.0 + IL_006e: stfld string Linq101Where01/'shortDigits@52-2'::current + IL_0073: ldc.i4.1 + IL_0074: ret .line 100001,100001 : 0,0 '' - IL_006f: nop - IL_0070: br.s IL_0046 + IL_0075: nop + IL_0076: br.s IL_004c - IL_0072: ldarg.0 - IL_0073: ldc.i4.3 - IL_0074: stfld int32 Linq101Where01/'shortDigits@52-2'::pc + IL_0078: ldarg.0 + IL_0079: ldc.i4.3 + IL_007a: stfld int32 Linq101Where01/'shortDigits@52-2'::pc .line 52,52 : 9,17 '' - IL_0079: ldarg.0 - IL_007a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' - IL_007f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0084: nop - IL_0085: ldarg.0 - IL_0086: ldnull - IL_0087: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' - IL_008c: ldarg.0 - IL_008d: ldc.i4.3 - IL_008e: stfld int32 Linq101Where01/'shortDigits@52-2'::pc - IL_0093: ldarg.0 - IL_0094: ldnull - IL_0095: stfld string Linq101Where01/'shortDigits@52-2'::current - IL_009a: ldc.i4.0 - IL_009b: ret + IL_007f: ldarg.0 + IL_0080: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' + IL_0085: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_008a: nop + IL_008b: ldarg.0 + IL_008c: ldnull + IL_008d: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' + IL_0092: ldarg.0 + IL_0093: ldc.i4.3 + IL_0094: stfld int32 Linq101Where01/'shortDigits@52-2'::pc + IL_0099: ldarg.0 + IL_009a: ldnull + IL_009b: stfld string Linq101Where01/'shortDigits@52-2'::current + IL_00a0: ldc.i4.0 + IL_00a1: ret } // end of method 'shortDigits@52-2'::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 133 (0x85) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -838,138 +852,158 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0016 + IL_0011: br.s IL_0019 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br.s IL_007c + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' - IL_0016: nop + IL_0019: nop .try { - IL_0017: ldarg.0 - IL_0018: ldfld int32 Linq101Where01/'shortDigits@52-2'::pc - IL_001d: switch ( - IL_0034, + IL_001a: ldarg.0 + IL_001b: ldfld int32 Linq101Where01/'shortDigits@52-2'::pc + IL_0020: switch ( IL_0037, - IL_003a, + IL_0039, + IL_003b, IL_003d) - IL_0032: br.s IL_0040 + IL_0035: br.s IL_004b + + IL_0037: br.s IL_003f + + IL_0039: br.s IL_0042 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0056 + IL_003f: nop + IL_0040: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0042 + IL_0042: nop + IL_0043: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0041 + IL_0045: nop + IL_0046: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0056 + IL_0048: nop + IL_0049: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_0040: nop + IL_004b: nop .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: ldarg.0 - IL_0043: ldc.i4.3 - IL_0044: stfld int32 Linq101Where01/'shortDigits@52-2'::pc - IL_0049: ldarg.0 - IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' - IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0054: nop + IL_004c: nop + IL_004d: ldarg.0 + IL_004e: ldc.i4.3 + IL_004f: stfld int32 Linq101Where01/'shortDigits@52-2'::pc + IL_0054: ldarg.0 + IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' + IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_005f: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 Linq101Where01/'shortDigits@52-2'::pc - IL_005d: ldarg.0 - IL_005e: ldnull - IL_005f: stfld string Linq101Where01/'shortDigits@52-2'::current - IL_0064: ldnull - IL_0065: stloc.1 - IL_0066: leave.s IL_0074 + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.3 + IL_0063: stfld int32 Linq101Where01/'shortDigits@52-2'::pc + IL_0068: ldarg.0 + IL_0069: ldnull + IL_006a: stfld string Linq101Where01/'shortDigits@52-2'::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_0068: castclass [mscorlib]System.Exception - IL_006d: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 52,52 : 9,17 '' - IL_006e: ldloc.2 - IL_006f: stloc.0 - IL_0070: ldnull - IL_0071: stloc.1 - IL_0072: leave.s IL_0074 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0074: ldloc.1 - IL_0075: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0076: nop - IL_0077: br IL_0000 + IL_0081: nop + IL_0082: br IL_0000 + + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f - IL_007c: ldloc.0 - IL_007d: ldnull - IL_007e: cgt.un - IL_0080: brfalse.s IL_0084 + IL_008d: br.s IL_0091 + + IL_008f: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_0082: ldloc.0 - IL_0083: throw + IL_0091: ldloc.0 + IL_0092: throw .line 100001,100001 : 0,0 '' - IL_0084: ret + IL_0093: ret } // end of method 'shortDigits@52-2'::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Where01/'shortDigits@52-2'::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.1 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.1 + IL_0033: ret - IL_002c: ldc.i4.1 - IL_002d: ret + IL_0034: ldc.i4.1 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method 'shortDigits@52-2'::get_CheckClose .method public strict virtual instance string diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest1.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest1.il.bsl index 7ea3b26508c..884c03da12a 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest1.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest1.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly SeqExpressionSteppingTest1 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SeqExpressionSteppingTest1 { - // Offset: 0x00000000 Length: 0x00000263 + // Offset: 0x00000000 Length: 0x00000267 } .mresource public FSharpOptimizationData.SeqExpressionSteppingTest1 { - // Offset: 0x00000268 Length: 0x000000AD + // Offset: 0x00000270 Length: 0x000000AD } .module SeqExpressionSteppingTest1.exe -// MVID: {60B78A59-2432-947D-A745-0383598AB760} +// MVID: {59B19240-2432-947D-A745-03834092B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06A30000 +// Image base: 0x002D0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -87,47 +87,51 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 62 (0x3e) - .maxstack 8 + // Code size 66 (0x42) + .maxstack 6 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SeqExpressionStepping\\SeqExpressionSteppingTest1.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SeqExpressionStepping\\SeqExpressionSteppingTest1.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest1/SeqExpressionSteppingTest1/f0@6::pc IL_0006: ldc.i4.1 IL_0007: sub IL_0008: switch ( IL_0017, - IL_001a) - IL_0015: br.s IL_001d + 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 '' - IL_0017: nop - IL_0018: br.s IL_002e + IL_001b: nop + IL_001c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_001a: nop - IL_001b: br.s IL_0035 + IL_001e: nop + IL_001f: br.s IL_0039 .line 100001,100001 : 0,0 '' - IL_001d: nop + IL_0021: nop + IL_0022: ldarg.0 + IL_0023: ldc.i4.1 + IL_0024: stfld int32 SeqExpressionSteppingTest1/SeqExpressionSteppingTest1/f0@6::pc .line 6,6 : 15,22 '' - IL_001e: ldarg.0 - IL_001f: ldc.i4.1 - IL_0020: stfld int32 SeqExpressionSteppingTest1/SeqExpressionSteppingTest1/f0@6::pc - IL_0025: ldarg.0 - IL_0026: ldc.i4.1 - IL_0027: stfld int32 SeqExpressionSteppingTest1/SeqExpressionSteppingTest1/f0@6::current - IL_002c: ldc.i4.1 - IL_002d: ret - - IL_002e: ldarg.0 - IL_002f: ldc.i4.2 - IL_0030: stfld int32 SeqExpressionSteppingTest1/SeqExpressionSteppingTest1/f0@6::pc - IL_0035: ldarg.0 - IL_0036: ldc.i4.0 - IL_0037: stfld int32 SeqExpressionSteppingTest1/SeqExpressionSteppingTest1/f0@6::current - IL_003c: ldc.i4.0 - IL_003d: ret + IL_0029: ldarg.0 + IL_002a: ldc.i4.1 + IL_002b: stfld int32 SeqExpressionSteppingTest1/SeqExpressionSteppingTest1/f0@6::current + IL_0030: ldc.i4.1 + IL_0031: ret + + IL_0032: ldarg.0 + IL_0033: ldc.i4.2 + IL_0034: stfld int32 SeqExpressionSteppingTest1/SeqExpressionSteppingTest1/f0@6::pc + IL_0039: ldarg.0 + IL_003a: ldc.i4.0 + IL_003b: stfld int32 SeqExpressionSteppingTest1/SeqExpressionSteppingTest1/f0@6::current + IL_0040: ldc.i4.0 + IL_0041: ret } // end of method f0@6::GenerateNext .method public strict virtual instance void @@ -144,36 +148,42 @@ .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 39 (0x27) + // Code size 45 (0x2d) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest1/SeqExpressionSteppingTest1/f0@6::pc IL_0006: switch ( IL_0019, - IL_001c, - IL_001f) - IL_0017: br.s IL_0022 + IL_001b, + IL_001d) + IL_0017: br.s IL_0028 - .line 100001,100001 : 0,0 '' - IL_0019: nop - IL_001a: br.s IL_0025 + IL_0019: br.s IL_001f - .line 100001,100001 : 0,0 '' - IL_001c: nop - IL_001d: br.s IL_0023 + IL_001b: br.s IL_0022 + + IL_001d: br.s IL_0025 .line 100001,100001 : 0,0 '' IL_001f: nop - IL_0020: br.s IL_0025 + IL_0020: br.s IL_002b .line 100001,100001 : 0,0 '' IL_0022: nop - IL_0023: ldc.i4.0 - IL_0024: ret + IL_0023: br.s IL_0029 + + .line 100001,100001 : 0,0 '' + IL_0025: nop + IL_0026: br.s IL_002b + + .line 100001,100001 : 0,0 '' + IL_0028: nop + IL_0029: ldc.i4.0 + IL_002a: ret - IL_0025: ldc.i4.0 - IL_0026: ret + IL_002b: ldc.i4.0 + IL_002c: ret } // end of method f0@6::get_CheckClose .method public strict virtual instance int32 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest2.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest2.il.bsl index f061027f197..e5450059c32 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest2.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest2.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly SeqExpressionSteppingTest2 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SeqExpressionSteppingTest2 { - // Offset: 0x00000000 Length: 0x00000263 + // Offset: 0x00000000 Length: 0x00000267 } .mresource public FSharpOptimizationData.SeqExpressionSteppingTest2 { - // Offset: 0x00000268 Length: 0x000000AD + // Offset: 0x00000270 Length: 0x000000AD } .module SeqExpressionSteppingTest2.exe -// MVID: {60B78A59-2432-951E-A745-0383598AB760} +// MVID: {59B19240-2432-951E-A745-03834092B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06BF0000 +// Image base: 0x00690000 // =============== CLASS MEMBERS DECLARATION =================== @@ -87,72 +87,78 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 117 (0x75) + // Code size 123 (0x7b) .maxstack 6 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SeqExpressionStepping\\SeqExpressionSteppingTest2.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SeqExpressionStepping\\SeqExpressionSteppingTest2.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::pc IL_0006: ldc.i4.1 IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_0045 + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0065 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_006c + IL_0022: br.s IL_004b .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_006b + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0072 + + .line 100001,100001 : 0,0 '' + IL_002a: nop .line 5,5 : 15,30 '' - IL_0025: ldstr "hello" - IL_002a: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_002f: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0034: pop + IL_002b: ldstr "hello" + IL_0030: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0035: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_003a: pop + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::pc .line 6,6 : 15,22 '' - IL_0035: ldarg.0 - IL_0036: ldc.i4.1 - IL_0037: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::pc - IL_003c: ldarg.0 - IL_003d: ldc.i4.1 - IL_003e: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::current + IL_0042: ldarg.0 IL_0043: ldc.i4.1 - IL_0044: ret + IL_0044: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::current + IL_0049: ldc.i4.1 + IL_004a: ret .line 7,7 : 15,32 '' - IL_0045: ldstr "goodbye" - IL_004a: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_004f: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0054: pop + IL_004b: ldstr "goodbye" + IL_0050: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0055: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_005a: pop + IL_005b: ldarg.0 + IL_005c: ldc.i4.2 + IL_005d: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::pc .line 8,8 : 15,22 '' - IL_0055: ldarg.0 - IL_0056: ldc.i4.2 - IL_0057: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::pc - IL_005c: ldarg.0 - IL_005d: ldc.i4.2 - IL_005e: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::current - IL_0063: ldc.i4.1 - IL_0064: ret - - IL_0065: ldarg.0 - IL_0066: ldc.i4.3 - IL_0067: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::pc - IL_006c: ldarg.0 - IL_006d: ldc.i4.0 - IL_006e: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::current + IL_0062: ldarg.0 + IL_0063: ldc.i4.2 + IL_0064: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::current + IL_0069: ldc.i4.1 + IL_006a: ret + + IL_006b: ldarg.0 + IL_006c: ldc.i4.3 + IL_006d: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::pc + IL_0072: ldarg.0 IL_0073: ldc.i4.0 - IL_0074: ret + IL_0074: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::current + IL_0079: ldc.i4.0 + IL_007a: ret } // end of method f1@5::GenerateNext .method public strict virtual instance void @@ -169,44 +175,52 @@ .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.0 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.0 + IL_0033: ret - IL_002c: ldc.i4.0 - IL_002d: ret + IL_0034: ldc.i4.0 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method f1@5::get_CheckClose .method public strict virtual instance int32 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest3.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest3.il.bsl index d227238134d..37e1a739636 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest3.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest3.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly SeqExpressionSteppingTest3 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SeqExpressionSteppingTest3 { - // Offset: 0x00000000 Length: 0x00000273 + // Offset: 0x00000000 Length: 0x00000277 } .mresource public FSharpOptimizationData.SeqExpressionSteppingTest3 { - // Offset: 0x00000278 Length: 0x000000AD + // Offset: 0x00000280 Length: 0x000000AD } .module SeqExpressionSteppingTest3.exe -// MVID: {60B78A59-2432-943F-A745-0383598AB760} +// MVID: {59B19240-2432-943F-A745-03834092B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x065D0000 +// Image base: 0x02660000 // =============== CLASS MEMBERS DECLARATION =================== @@ -92,69 +92,73 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1>& next) cil managed { - // Code size 112 (0x70) + // Code size 116 (0x74) .maxstack 6 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SeqExpressionStepping\\SeqExpressionSteppingTest3.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SeqExpressionStepping\\SeqExpressionSteppingTest3.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::pc IL_0006: ldc.i4.1 IL_0007: sub IL_0008: switch ( IL_0017, - IL_001a) - IL_0015: br.s IL_001d + 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 '' - IL_0017: nop - IL_0018: br.s IL_005d + IL_001b: nop + IL_001c: br.s IL_0061 .line 100001,100001 : 0,0 '' - IL_001a: nop - IL_001b: br.s IL_0067 + IL_001e: nop + IL_001f: br.s IL_006b .line 100001,100001 : 0,0 '' - IL_001d: nop - .line 6,6 : 15,27 '' - IL_001e: ldarg.0 - IL_001f: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::x - IL_0024: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0029: ldc.i4.4 - IL_002a: bge.s IL_0060 + IL_0021: nop + .line 6,6 : 21,27 '' + IL_0022: ldarg.0 + IL_0023: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::x + IL_0028: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_002d: ldc.i4.4 + IL_002e: bge.s IL_0064 .line 7,7 : 18,24 '' - IL_002c: ldarg.0 - IL_002d: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::x - IL_0032: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0037: nop + IL_0030: ldarg.0 + IL_0031: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::x + IL_0036: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_003b: nop .line 8,8 : 18,33 '' - IL_0038: ldstr "hello" - IL_003d: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0042: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0047: pop + IL_003c: ldstr "hello" + IL_0041: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0046: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_004b: pop + IL_004c: ldarg.0 + IL_004d: ldc.i4.1 + IL_004e: stfld int32 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::pc .line 9,9 : 18,25 '' - IL_0048: ldarg.0 - IL_0049: ldc.i4.1 - IL_004a: stfld int32 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::pc - IL_004f: ldarg.0 - IL_0050: ldarg.0 - IL_0051: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::x - IL_0056: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::current - IL_005b: ldc.i4.1 - IL_005c: ret + IL_0053: ldarg.0 + IL_0054: ldarg.0 + IL_0055: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::x + IL_005a: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::current + IL_005f: ldc.i4.1 + IL_0060: ret .line 100001,100001 : 0,0 '' - IL_005d: nop - IL_005e: br.s IL_001e - - IL_0060: ldarg.0 - IL_0061: ldc.i4.2 - IL_0062: stfld int32 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::pc - IL_0067: ldarg.0 - IL_0068: ldnull - IL_0069: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::current - IL_006e: ldc.i4.0 - IL_006f: ret + IL_0061: nop + IL_0062: br.s IL_0022 + + IL_0064: ldarg.0 + IL_0065: ldc.i4.2 + IL_0066: stfld int32 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::pc + IL_006b: ldarg.0 + IL_006c: ldnull + IL_006d: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::current + IL_0072: ldc.i4.0 + IL_0073: ret } // end of method f2@6::GenerateNext .method public strict virtual instance void @@ -171,36 +175,42 @@ .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 39 (0x27) + // Code size 45 (0x2d) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::pc IL_0006: switch ( IL_0019, - IL_001c, - IL_001f) - IL_0017: br.s IL_0022 + IL_001b, + IL_001d) + IL_0017: br.s IL_0028 - .line 100001,100001 : 0,0 '' - IL_0019: nop - IL_001a: br.s IL_0025 + IL_0019: br.s IL_001f - .line 100001,100001 : 0,0 '' - IL_001c: nop - IL_001d: br.s IL_0023 + IL_001b: br.s IL_0022 + + IL_001d: br.s IL_0025 .line 100001,100001 : 0,0 '' IL_001f: nop - IL_0020: br.s IL_0025 + IL_0020: br.s IL_002b .line 100001,100001 : 0,0 '' IL_0022: nop - IL_0023: ldc.i4.0 - IL_0024: ret + IL_0023: br.s IL_0029 + + .line 100001,100001 : 0,0 '' + IL_0025: nop + IL_0026: br.s IL_002b + + .line 100001,100001 : 0,0 '' + IL_0028: nop + IL_0029: ldc.i4.0 + IL_002a: ret - IL_0025: ldc.i4.0 - IL_0026: ret + IL_002b: ldc.i4.0 + IL_002c: ret } // end of method f2@6::get_CheckClose .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest4.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest4.il.bsl index 91921e1a0f6..ea764c62bb0 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest4.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest4.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:5:0:0 } .assembly SeqExpressionSteppingTest4 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SeqExpressionSteppingTest4 { - // Offset: 0x00000000 Length: 0x00000263 + // Offset: 0x00000000 Length: 0x0000026F } .mresource public FSharpOptimizationData.SeqExpressionSteppingTest4 { - // Offset: 0x00000268 Length: 0x000000AD + // Offset: 0x00000278 Length: 0x000000AD } .module SeqExpressionSteppingTest4.exe -// MVID: {60B78A59-2432-93E0-A745-0383598AB760} +// MVID: {5B9A68C1-2432-93E0-A745-0383C1689A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06580000 +// Image base: 0x00760000 // =============== CLASS MEMBERS DECLARATION =================== @@ -97,101 +97,107 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 184 (0xb8) + // Code size 190 (0xbe) .maxstack 6 .locals init ([0] int32 z) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SeqExpressionStepping\\SeqExpressionSteppingTest4.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SeqExpressionStepping\\SeqExpressionSteppingTest4.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::pc IL_0006: ldc.i4.1 IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0027 + IL_001d, + IL_001f) + IL_0019: br.s IL_002d - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_0072 + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_009a + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br IL_00af + IL_0022: br.s IL_0078 + + .line 100001,100001 : 0,0 '' + IL_0024: nop + IL_0025: br.s IL_00a0 .line 100001,100001 : 0,0 '' IL_0027: nop + IL_0028: br IL_00b5 + + .line 100001,100001 : 0,0 '' + IL_002d: nop .line 5,5 : 15,28 '' - IL_0028: ldarg.0 - IL_0029: ldc.i4.0 - IL_002a: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_002f: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::x + IL_002e: ldarg.0 + IL_002f: ldc.i4.0 + IL_0030: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) + IL_0035: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::x .line 6,6 : 15,21 '' - IL_0034: ldarg.0 - IL_0035: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::x - IL_003a: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_003f: nop + IL_003a: ldarg.0 + IL_003b: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::x + IL_0040: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0045: nop .line 7,7 : 15,28 '' - IL_0040: ldarg.0 - IL_0041: ldc.i4.0 - IL_0042: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0047: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::y + IL_0046: ldarg.0 + IL_0047: ldc.i4.0 + IL_0048: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) + IL_004d: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::y .line 8,8 : 15,21 '' - IL_004c: ldarg.0 - IL_004d: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::y - IL_0052: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0057: nop + IL_0052: ldarg.0 + IL_0053: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::y + IL_0058: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_005d: nop + IL_005e: ldarg.0 + IL_005f: ldc.i4.1 + IL_0060: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::pc .line 9,9 : 15,23 '' - IL_0058: ldarg.0 - IL_0059: ldc.i4.1 - IL_005a: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::pc - IL_005f: ldarg.0 - IL_0060: ldarg.0 - IL_0061: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::x - IL_0066: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_006b: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::current - IL_0070: ldc.i4.1 - IL_0071: ret + IL_0065: ldarg.0 + IL_0066: ldarg.0 + IL_0067: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::x + IL_006c: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0071: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::current + IL_0076: ldc.i4.1 + IL_0077: ret .line 10,10 : 15,30 '' - IL_0072: ldarg.0 - IL_0073: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::x - IL_0078: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_007d: ldarg.0 - IL_007e: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::y - IL_0083: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0088: add - IL_0089: stloc.0 + IL_0078: ldarg.0 + IL_0079: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::x + IL_007e: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0083: ldarg.0 + IL_0084: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::y + IL_0089: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_008e: add + IL_008f: stloc.0 + IL_0090: ldarg.0 + IL_0091: ldc.i4.2 + IL_0092: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::pc .line 11,11 : 15,22 '' - IL_008a: ldarg.0 - IL_008b: ldc.i4.2 - IL_008c: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::pc - IL_0091: ldarg.0 - IL_0092: ldloc.0 - IL_0093: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::current - IL_0098: ldc.i4.1 - IL_0099: ret + IL_0097: ldarg.0 + IL_0098: ldloc.0 + IL_0099: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::current + IL_009e: ldc.i4.1 + IL_009f: ret .line 7,7 : 19,20 '' - IL_009a: ldarg.0 - IL_009b: ldnull - IL_009c: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::y - IL_00a1: ldarg.0 - IL_00a2: ldnull - IL_00a3: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::x - IL_00a8: ldarg.0 - IL_00a9: ldc.i4.3 - IL_00aa: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::pc - IL_00af: ldarg.0 - IL_00b0: ldc.i4.0 - IL_00b1: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::current + IL_00a0: ldarg.0 + IL_00a1: ldnull + IL_00a2: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::y + IL_00a7: ldarg.0 + IL_00a8: ldnull + IL_00a9: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::x + IL_00ae: ldarg.0 + IL_00af: ldc.i4.3 + IL_00b0: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::pc + IL_00b5: ldarg.0 IL_00b6: ldc.i4.0 - IL_00b7: ret + IL_00b7: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::current + IL_00bc: ldc.i4.0 + IL_00bd: ret } // end of method f3@5::GenerateNext .method public strict virtual instance void @@ -208,44 +214,52 @@ .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.0 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.0 + IL_0033: ret - IL_002c: ldc.i4.0 - IL_002d: ret + IL_0034: ldc.i4.0 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method f3@5::get_CheckClose .method public strict virtual instance int32 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest5.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest5.il.bsl index a3ce205c086..0af7608e807 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest5.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest5.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:5:0:0 } .assembly SeqExpressionSteppingTest5 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SeqExpressionSteppingTest5 { - // Offset: 0x00000000 Length: 0x00000263 + // Offset: 0x00000000 Length: 0x0000026F } .mresource public FSharpOptimizationData.SeqExpressionSteppingTest5 { - // Offset: 0x00000268 Length: 0x000000AD + // Offset: 0x00000278 Length: 0x000000AD } .module SeqExpressionSteppingTest5.exe -// MVID: {60B78A59-2432-9401-A745-0383598AB760} +// MVID: {5B9A632A-2432-9401-A745-03832A639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05A80000 +// Image base: 0x026A0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -97,122 +97,130 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 224 (0xe0) + // Code size 232 (0xe8) .maxstack 6 .locals init ([0] int32 z) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SeqExpressionStepping\\SeqExpressionSteppingTest5.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SeqExpressionStepping\\SeqExpressionSteppingTest5.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc IL_0006: ldc.i4.1 IL_0007: sub IL_0008: switch ( IL_001f, - IL_0025, - IL_0028, - IL_002b) - IL_001d: br.s IL_0031 + 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 '' - IL_001f: nop - IL_0020: br IL_00a6 + IL_0027: nop + IL_0028: br IL_00ae .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0077 + IL_002d: nop + IL_002e: br.s IL_007f .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_009f + IL_0030: nop + IL_0031: br.s IL_00a7 .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br IL_00d7 + IL_0033: nop + IL_0034: br IL_00df .line 100001,100001 : 0,0 '' - IL_0031: nop + IL_0039: nop .line 5,5 : 15,28 '' - IL_0032: ldarg.0 - IL_0033: ldc.i4.0 - IL_0034: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0039: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::x - IL_003e: ldarg.0 - IL_003f: ldc.i4.1 - IL_0040: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc + 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@5::x + IL_0046: ldarg.0 + IL_0047: ldc.i4.1 + IL_0048: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc .line 7,7 : 19,32 '' - IL_0045: ldarg.0 - IL_0046: ldc.i4.0 - IL_0047: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_004c: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::y + 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@5::y .line 8,8 : 19,25 '' - IL_0051: ldarg.0 - IL_0052: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::y - IL_0057: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_005c: nop - .line 9,9 : 19,27 '' - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc - IL_0064: ldarg.0 + IL_0059: ldarg.0 + IL_005a: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::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: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::x - IL_006b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0070: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::current - IL_0075: ldc.i4.1 - IL_0076: ret + IL_0066: ldc.i4.2 + IL_0067: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc + .line 9,9 : 19,27 '' + IL_006c: ldarg.0 + IL_006d: ldarg.0 + IL_006e: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::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@5::current + IL_007d: ldc.i4.1 + IL_007e: ret .line 10,10 : 19,34 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::x - IL_007d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0082: ldarg.0 - IL_0083: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::y - IL_0088: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_008d: add - IL_008e: stloc.0 + IL_007f: ldarg.0 + IL_0080: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::x + IL_0085: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_008a: ldarg.0 + IL_008b: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::y + IL_0090: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0095: add + IL_0096: stloc.0 + IL_0097: ldarg.0 + IL_0098: ldc.i4.3 + IL_0099: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc .line 11,11 : 19,26 '' - IL_008f: ldarg.0 - IL_0090: ldc.i4.3 - IL_0091: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc - IL_0096: ldarg.0 - IL_0097: ldloc.0 - IL_0098: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::current - IL_009d: ldc.i4.1 - IL_009e: ret - - IL_009f: ldarg.0 - IL_00a0: ldnull - IL_00a1: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::y - IL_00a6: ldarg.0 - IL_00a7: ldc.i4.4 - IL_00a8: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc + IL_009e: ldarg.0 + IL_009f: ldloc.0 + IL_00a0: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::current + IL_00a5: ldc.i4.1 + IL_00a6: ret + + IL_00a7: ldarg.0 + IL_00a8: ldnull + IL_00a9: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::y + IL_00ae: ldarg.0 + IL_00af: ldc.i4.4 + IL_00b0: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc .line 13,13 : 18,24 '' - IL_00ad: ldarg.0 - IL_00ae: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::x - IL_00b3: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_00b8: nop + IL_00b5: ldarg.0 + IL_00b6: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::x + IL_00bb: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_00c0: nop .line 14,14 : 18,32 '' - IL_00b9: ldstr "done" - IL_00be: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_00c3: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_00c8: pop - IL_00c9: ldarg.0 - IL_00ca: ldnull - IL_00cb: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::x - IL_00d0: ldarg.0 - IL_00d1: ldc.i4.4 - IL_00d2: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc - IL_00d7: ldarg.0 - IL_00d8: ldc.i4.0 - IL_00d9: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::current - IL_00de: ldc.i4.0 - IL_00df: ret + IL_00c1: ldstr "done" + IL_00c6: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_00cb: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_00d0: pop + IL_00d1: ldarg.0 + IL_00d2: ldnull + IL_00d3: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::x + IL_00d8: ldarg.0 + IL_00d9: ldc.i4.4 + IL_00da: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc + IL_00df: ldarg.0 + IL_00e0: ldc.i4.0 + IL_00e1: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::current + IL_00e6: ldc.i4.0 + IL_00e7: ret } // end of method f4@5::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 162 (0xa2) + // Code size 176 (0xb0) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -228,7 +236,7 @@ .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0099 + IL_0014: br IL_00a3 .line 100001,100001 : 0,0 '' IL_0019: nop @@ -238,147 +246,171 @@ IL_001b: ldfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc IL_0020: switch ( IL_003b, - IL_003e, + IL_003d, + IL_003f, IL_0041, - IL_0044, - IL_0047) - IL_0039: br.s IL_004a + IL_0043) + IL_0039: br.s IL_0054 + + IL_003b: br.s IL_0045 + + IL_003d: br.s IL_0048 + + IL_003f: br.s IL_004b + + IL_0041: br.s IL_004e + + IL_0043: br.s IL_0051 .line 100001,100001 : 0,0 '' - IL_003b: nop - IL_003c: br.s IL_0073 + IL_0045: nop + IL_0046: br.s IL_007d .line 100001,100001 : 0,0 '' - IL_003e: nop - IL_003f: br.s IL_004f + IL_0048: nop + IL_0049: br.s IL_0059 .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: br.s IL_004e + IL_004b: nop + IL_004c: br.s IL_0058 .line 100001,100001 : 0,0 '' - IL_0044: nop - IL_0045: br.s IL_004b + IL_004e: nop + IL_004f: br.s IL_0055 .line 100001,100001 : 0,0 '' - IL_0047: nop - IL_0048: br.s IL_0073 + IL_0051: nop + IL_0052: br.s IL_007d .line 100001,100001 : 0,0 '' - IL_004a: nop + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_004b: nop - IL_004c: br.s IL_004f + IL_0055: nop + IL_0056: br.s IL_0059 .line 100001,100001 : 0,0 '' - IL_004e: nop - IL_004f: ldarg.0 - IL_0050: ldc.i4.4 - IL_0051: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc + IL_0058: nop + IL_0059: ldarg.0 + IL_005a: ldc.i4.4 + IL_005b: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc .line 13,13 : 18,24 '' - IL_0056: ldarg.0 - IL_0057: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::x - IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0061: nop + IL_0060: ldarg.0 + IL_0061: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::x + IL_0066: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_006b: nop .line 14,14 : 18,32 '' - IL_0062: ldstr "done" - IL_0067: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_006c: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0071: pop + IL_006c: ldstr "done" + IL_0071: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0076: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_007b: pop .line 100001,100001 : 0,0 '' - IL_0072: nop - IL_0073: ldarg.0 - IL_0074: ldc.i4.4 - IL_0075: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc - IL_007a: ldarg.0 - IL_007b: ldc.i4.0 - IL_007c: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::current - IL_0081: ldnull - IL_0082: stloc.1 - IL_0083: leave.s IL_0091 + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldc.i4.4 + IL_007f: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc + IL_0084: ldarg.0 + IL_0085: ldc.i4.0 + IL_0086: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::current + IL_008b: ldnull + IL_008c: stloc.1 + IL_008d: leave.s IL_009b } // end .try catch [mscorlib]System.Object { - IL_0085: castclass [mscorlib]System.Exception - IL_008a: stloc.2 + IL_008f: castclass [mscorlib]System.Exception + IL_0094: stloc.2 .line 5,5 : 19,20 '' - IL_008b: ldloc.2 - IL_008c: stloc.0 - IL_008d: ldnull - IL_008e: stloc.1 - IL_008f: leave.s IL_0091 + IL_0095: ldloc.2 + IL_0096: stloc.0 + IL_0097: ldnull + IL_0098: stloc.1 + IL_0099: leave.s IL_009b .line 100001,100001 : 0,0 '' } // end handler - IL_0091: ldloc.1 - IL_0092: pop + IL_009b: ldloc.1 + IL_009c: pop .line 100001,100001 : 0,0 '' - IL_0093: nop - IL_0094: br IL_0000 + IL_009d: nop + IL_009e: br IL_0000 + + IL_00a3: ldloc.0 + IL_00a4: ldnull + IL_00a5: cgt.un + IL_00a7: brfalse.s IL_00ab - IL_0099: ldloc.0 - IL_009a: ldnull - IL_009b: cgt.un - IL_009d: brfalse.s IL_00a1 + IL_00a9: br.s IL_00ad + + IL_00ab: br.s IL_00af .line 100001,100001 : 0,0 '' - IL_009f: ldloc.0 - IL_00a0: throw + IL_00ad: ldloc.0 + IL_00ae: throw .line 100001,100001 : 0,0 '' - IL_00a1: ret + IL_00af: ret } // end of method f4@5::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 57 (0x39) - .maxstack 8 + // Code size 67 (0x43) + .maxstack 5 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc IL_0006: switch ( IL_0021, - IL_0024, + IL_0023, + IL_0025, IL_0027, - IL_002a, - IL_002d) - IL_001f: br.s IL_0030 + IL_0029) + IL_001f: br.s IL_003a + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e + + IL_0025: br.s IL_0031 + + IL_0027: br.s IL_0034 + + IL_0029: br.s IL_0037 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0037 + IL_002b: nop + IL_002c: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_0035 + IL_002e: nop + IL_002f: br.s IL_003f .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0033 + IL_0031: nop + IL_0032: br.s IL_003d .line 100001,100001 : 0,0 '' - IL_002a: nop - IL_002b: br.s IL_0031 + IL_0034: nop + IL_0035: br.s IL_003b .line 100001,100001 : 0,0 '' - IL_002d: nop - IL_002e: br.s IL_0037 + IL_0037: nop + IL_0038: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0030: nop - IL_0031: ldc.i4.1 - IL_0032: ret + IL_003a: nop + IL_003b: ldc.i4.1 + IL_003c: ret - IL_0033: ldc.i4.1 - IL_0034: ret + IL_003d: ldc.i4.1 + IL_003e: ret - IL_0035: ldc.i4.1 - IL_0036: ret + IL_003f: ldc.i4.1 + IL_0040: ret - IL_0037: ldc.i4.0 - IL_0038: ret + IL_0041: ldc.i4.0 + IL_0042: ret } // end of method f4@5::get_CheckClose .method public strict virtual instance int32 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest6.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest6.il.bsl index 75fbbcc82e7..d06d692b20b 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest6.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest6.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:5:0:0 } .assembly SeqExpressionSteppingTest6 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SeqExpressionSteppingTest6 { - // Offset: 0x00000000 Length: 0x00000298 + // Offset: 0x00000000 Length: 0x000002A4 } .mresource public FSharpOptimizationData.SeqExpressionSteppingTest6 { - // Offset: 0x000002A0 Length: 0x000000BA + // Offset: 0x000002A8 Length: 0x000000BA } .module SeqExpressionSteppingTest6.exe -// MVID: {60B78A59-2432-94A2-A745-0383598AB760} +// MVID: {5B9A632A-2432-94A2-A745-03832A639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06B30000 +// Image base: 0x01330000 // =============== CLASS MEMBERS DECLARATION =================== @@ -103,158 +103,166 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 294 (0x126) + // Code size 304 (0x130) .maxstack 6 .locals init ([0] int32 x, [1] int32 V_1) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SeqExpressionStepping\\SeqExpressionSteppingTest6.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SeqExpressionStepping\\SeqExpressionSteppingTest6.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc IL_0006: ldc.i4.1 IL_0007: sub IL_0008: switch ( IL_0023, - IL_0026, + IL_0025, + IL_0027, IL_0029, - IL_002f, - IL_0035) - IL_0021: br.s IL_003b + IL_002b) + IL_0021: br.s IL_0045 + + IL_0023: br.s IL_002d + + IL_0025: br.s IL_0030 + + IL_0027: br.s IL_0033 + + IL_0029: br.s IL_0039 + + IL_002b: br.s IL_003f .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_008f + IL_002d: nop + IL_002e: br.s IL_0099 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_008c + IL_0030: nop + IL_0031: br.s IL_0096 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: br IL_00fc + IL_0033: nop + IL_0034: br IL_0106 .line 100001,100001 : 0,0 '' - IL_002f: nop - IL_0030: br IL_00f9 + IL_0039: nop + IL_003a: br IL_0103 .line 100001,100001 : 0,0 '' - IL_0035: nop - IL_0036: br IL_011d + IL_003f: nop + IL_0040: br IL_0127 .line 100001,100001 : 0,0 '' - IL_003b: nop + IL_0045: nop .line 6,8 : 15,25 '' - IL_003c: ldarg.0 - IL_003d: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6::get_es() - IL_0042: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0047: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' - IL_004c: ldarg.0 - IL_004d: ldc.i4.1 - IL_004e: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc + IL_0046: ldarg.0 + IL_0047: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6::get_es() + IL_004c: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0051: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' + IL_0056: ldarg.0 + IL_0057: ldc.i4.1 + IL_0058: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc .line 6,8 : 15,25 '' - IL_0053: ldarg.0 - IL_0054: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' - IL_0059: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_005e: brfalse.s IL_008f - - IL_0060: ldarg.0 - IL_0061: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' - IL_0066: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_006b: stloc.0 + IL_005d: ldarg.0 + IL_005e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' + IL_0063: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0068: brfalse.s IL_0099 + + IL_006a: ldarg.0 + IL_006b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' + IL_0070: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0075: stloc.0 .line 7,7 : 18,33 '' - IL_006c: ldstr "hello" - IL_0071: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0076: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_007b: pop + IL_0076: ldstr "hello" + IL_007b: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0080: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_0085: pop + IL_0086: ldarg.0 + IL_0087: ldc.i4.2 + IL_0088: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc .line 8,8 : 18,25 '' - IL_007c: ldarg.0 - IL_007d: ldc.i4.2 - IL_007e: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc - IL_0083: ldarg.0 - IL_0084: ldloc.0 - IL_0085: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::current - IL_008a: ldc.i4.1 - IL_008b: ret + IL_008d: ldarg.0 + IL_008e: ldloc.0 + IL_008f: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::current + IL_0094: ldc.i4.1 + IL_0095: ret .line 100001,100001 : 0,0 '' - IL_008c: nop - IL_008d: br.s IL_0053 + IL_0096: nop + IL_0097: br.s IL_005d - IL_008f: ldarg.0 - IL_0090: ldc.i4.5 - IL_0091: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc - .line 6,8 : 15,25 '' - IL_0096: ldarg.0 - IL_0097: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' - IL_009c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_00a1: nop + IL_0099: ldarg.0 + IL_009a: ldc.i4.5 + IL_009b: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc .line 6,8 : 15,25 '' - IL_00a2: ldarg.0 - IL_00a3: ldnull - IL_00a4: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' + IL_00a0: ldarg.0 + IL_00a1: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' + IL_00a6: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_00ab: nop + IL_00ac: ldarg.0 + IL_00ad: ldnull + IL_00ae: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' .line 9,11 : 15,25 '' - IL_00a9: ldarg.0 - IL_00aa: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6::get_es() - IL_00af: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_00b4: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 - IL_00b9: ldarg.0 - IL_00ba: ldc.i4.3 - IL_00bb: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc + IL_00b3: ldarg.0 + IL_00b4: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6::get_es() + IL_00b9: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_00be: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 + IL_00c3: ldarg.0 + IL_00c4: ldc.i4.3 + IL_00c5: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc .line 9,11 : 15,25 '' - IL_00c0: ldarg.0 - IL_00c1: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 - IL_00c6: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_00cb: brfalse.s IL_00fc - - IL_00cd: ldarg.0 - IL_00ce: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 - IL_00d3: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_00d8: stloc.1 + IL_00ca: ldarg.0 + IL_00cb: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 + IL_00d0: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_00d5: brfalse.s IL_0106 + + IL_00d7: ldarg.0 + IL_00d8: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 + IL_00dd: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_00e2: stloc.1 .line 10,10 : 18,35 '' - IL_00d9: ldstr "goodbye" - IL_00de: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_00e3: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_00e8: pop + IL_00e3: ldstr "goodbye" + IL_00e8: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_00ed: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_00f2: pop + IL_00f3: ldarg.0 + IL_00f4: ldc.i4.4 + IL_00f5: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc .line 11,11 : 18,25 '' - IL_00e9: ldarg.0 - IL_00ea: ldc.i4.4 - IL_00eb: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc - IL_00f0: ldarg.0 - IL_00f1: ldloc.1 - IL_00f2: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::current - IL_00f7: ldc.i4.1 - IL_00f8: ret + IL_00fa: ldarg.0 + IL_00fb: ldloc.1 + IL_00fc: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::current + IL_0101: ldc.i4.1 + IL_0102: ret .line 100001,100001 : 0,0 '' - IL_00f9: nop - IL_00fa: br.s IL_00c0 + IL_0103: nop + IL_0104: br.s IL_00ca - IL_00fc: ldarg.0 - IL_00fd: ldc.i4.5 - IL_00fe: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc - .line 9,11 : 15,25 '' - IL_0103: ldarg.0 - IL_0104: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 - IL_0109: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_010e: nop + IL_0106: ldarg.0 + IL_0107: ldc.i4.5 + IL_0108: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc .line 9,11 : 15,25 '' - IL_010f: ldarg.0 - IL_0110: ldnull - IL_0111: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 - IL_0116: ldarg.0 - IL_0117: ldc.i4.5 - IL_0118: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc - IL_011d: ldarg.0 - IL_011e: ldc.i4.0 - IL_011f: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::current - IL_0124: ldc.i4.0 - IL_0125: ret + IL_010d: ldarg.0 + IL_010e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 + IL_0113: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0118: nop + IL_0119: ldarg.0 + IL_011a: ldnull + IL_011b: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 + IL_0120: ldarg.0 + IL_0121: ldc.i4.5 + IL_0122: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc + IL_0127: ldarg.0 + IL_0128: ldc.i4.0 + IL_0129: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::current + IL_012e: ldc.i4.0 + IL_012f: ret } // end of method f7@6::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 173 (0xad) + // Code size 189 (0xbd) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -270,7 +278,7 @@ .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_00a4 + IL_0014: br IL_00b0 .line 100001,100001 : 0,0 '' IL_0019: nop @@ -280,163 +288,191 @@ IL_001b: ldfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc IL_0020: switch ( IL_003f, - IL_0042, + IL_0041, + IL_0043, IL_0045, - IL_0048, - IL_004b, - IL_004e) - IL_003d: br.s IL_0051 + IL_0047, + IL_0049) + IL_003d: br.s IL_005d + + IL_003f: br.s IL_004b + + IL_0041: br.s IL_004e + + IL_0043: br.s IL_0051 + + IL_0045: br.s IL_0054 + + IL_0047: br.s IL_0057 + + IL_0049: br.s IL_005a .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_007e + IL_004b: nop + IL_004c: br.s IL_008a .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_006a + IL_004e: nop + IL_004f: br.s IL_0076 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_0069 + IL_0051: nop + IL_0052: br.s IL_0075 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0053 + IL_0054: nop + IL_0055: br.s IL_005f .line 100001,100001 : 0,0 '' - IL_004b: nop - IL_004c: br.s IL_0052 + IL_0057: nop + IL_0058: br.s IL_005e .line 100001,100001 : 0,0 '' - IL_004e: nop - IL_004f: br.s IL_007e + IL_005a: nop + IL_005b: br.s IL_008a .line 100001,100001 : 0,0 '' - IL_0051: nop + IL_005d: nop .line 100001,100001 : 0,0 '' - IL_0052: nop - IL_0053: ldarg.0 - IL_0054: ldc.i4.5 - IL_0055: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc - IL_005a: ldarg.0 - IL_005b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 - IL_0060: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0065: nop + IL_005e: nop + IL_005f: ldarg.0 + IL_0060: ldc.i4.5 + IL_0061: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc + IL_0066: ldarg.0 + IL_0067: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 + IL_006c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0071: nop .line 100001,100001 : 0,0 '' - IL_0066: nop - IL_0067: br.s IL_007e + IL_0072: nop + IL_0073: br.s IL_008a .line 100001,100001 : 0,0 '' - IL_0069: nop - IL_006a: ldarg.0 - IL_006b: ldc.i4.5 - IL_006c: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc - IL_0071: ldarg.0 - IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' - IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_007c: nop + IL_0075: nop + IL_0076: ldarg.0 + IL_0077: ldc.i4.5 + IL_0078: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc + IL_007d: ldarg.0 + IL_007e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' + IL_0083: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0088: nop .line 100001,100001 : 0,0 '' - IL_007d: nop - IL_007e: ldarg.0 - IL_007f: ldc.i4.5 - IL_0080: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc - IL_0085: ldarg.0 - IL_0086: ldc.i4.0 - IL_0087: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::current - IL_008c: ldnull - IL_008d: stloc.1 - IL_008e: leave.s IL_009c + IL_0089: nop + IL_008a: ldarg.0 + IL_008b: ldc.i4.5 + IL_008c: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc + IL_0091: ldarg.0 + IL_0092: ldc.i4.0 + IL_0093: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::current + IL_0098: ldnull + IL_0099: stloc.1 + IL_009a: leave.s IL_00a8 } // end .try catch [mscorlib]System.Object { - IL_0090: castclass [mscorlib]System.Exception - IL_0095: stloc.2 + IL_009c: castclass [mscorlib]System.Exception + IL_00a1: stloc.2 .line 6,8 : 15,25 '' - IL_0096: ldloc.2 - IL_0097: stloc.0 - IL_0098: ldnull - IL_0099: stloc.1 - IL_009a: leave.s IL_009c + IL_00a2: ldloc.2 + IL_00a3: stloc.0 + IL_00a4: ldnull + IL_00a5: stloc.1 + IL_00a6: leave.s IL_00a8 .line 100001,100001 : 0,0 '' } // end handler - IL_009c: ldloc.1 - IL_009d: pop + IL_00a8: ldloc.1 + IL_00a9: pop .line 100001,100001 : 0,0 '' - IL_009e: nop - IL_009f: br IL_0000 + IL_00aa: nop + IL_00ab: br IL_0000 + + IL_00b0: ldloc.0 + IL_00b1: ldnull + IL_00b2: cgt.un + IL_00b4: brfalse.s IL_00b8 - IL_00a4: ldloc.0 - IL_00a5: ldnull - IL_00a6: cgt.un - IL_00a8: brfalse.s IL_00ac + IL_00b6: br.s IL_00ba + + IL_00b8: br.s IL_00bc .line 100001,100001 : 0,0 '' - IL_00aa: ldloc.0 - IL_00ab: throw + IL_00ba: ldloc.0 + IL_00bb: throw .line 100001,100001 : 0,0 '' - IL_00ac: ret + IL_00bc: ret } // end of method f7@6::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 66 (0x42) + // Code size 78 (0x4e) .maxstack 5 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc IL_0006: switch ( IL_0025, - IL_0028, + IL_0027, + IL_0029, IL_002b, - IL_002e, - IL_0031, - IL_0034) - IL_0023: br.s IL_0037 + IL_002d, + IL_002f) + IL_0023: br.s IL_0043 + + IL_0025: br.s IL_0031 + + IL_0027: br.s IL_0034 + + IL_0029: br.s IL_0037 + + IL_002b: br.s IL_003a + + IL_002d: br.s IL_003d + + IL_002f: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0040 + IL_0031: nop + IL_0032: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_003e + IL_0034: nop + IL_0035: br.s IL_004a .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_003c + IL_0037: nop + IL_0038: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_003a + IL_003a: nop + IL_003b: br.s IL_0046 .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: br.s IL_0038 + IL_003d: nop + IL_003e: br.s IL_0044 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_0040 + IL_0040: nop + IL_0041: br.s IL_004c .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: ldc.i4.1 - IL_0039: ret + IL_0043: nop + IL_0044: ldc.i4.1 + IL_0045: ret - IL_003a: ldc.i4.1 - IL_003b: ret + IL_0046: ldc.i4.1 + IL_0047: ret - IL_003c: ldc.i4.1 - IL_003d: ret + IL_0048: ldc.i4.1 + IL_0049: ret - IL_003e: ldc.i4.1 - IL_003f: ret + IL_004a: ldc.i4.1 + IL_004b: ret - IL_0040: ldc.i4.0 - IL_0041: ret + IL_004c: ldc.i4.0 + IL_004d: ret } // end of method f7@6::get_CheckClose .method public strict virtual instance int32 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest7.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest7.il.bsl index a193421655c..ae9e2337813 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest7.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest7.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:5:0:0 } .assembly SeqExpressionSteppingTest7 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SeqExpressionSteppingTest7 { - // Offset: 0x00000000 Length: 0x00000266 + // Offset: 0x00000000 Length: 0x00000272 } .mresource public FSharpOptimizationData.SeqExpressionSteppingTest7 { - // Offset: 0x00000270 Length: 0x00000098 + // Offset: 0x00000278 Length: 0x00000098 } .module SeqExpressionSteppingTest7.exe -// MVID: {60B78A59-2432-93C3-A745-0383598AB760} +// MVID: {5B9A632A-2432-93C3-A745-03832A639A5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x054A0000 +// Image base: 0x02450000 // =============== CLASS MEMBERS DECLARATION =================== @@ -51,6 +51,205 @@ 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 113 (0x71) + .maxstack 7 + .locals init ([0] string V_0, + [1] !a V_1) + .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 '' + IL_001b: nop + IL_001c: br.s IL_005c + + .line 100001,100001 : 0,0 '' + IL_001e: nop + IL_001f: br.s IL_0068 + + .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_005f + + .line 5,5 : 44,55 '' + IL_0035: ldstr "" + IL_003a: stloc.0 + IL_003b: ldarg.0 + IL_003c: ldc.i4.1 + IL_003d: stfld int32 class SeqExpressionSteppingTest7/f@5::pc + .line 5,5 : 44,55 '' + IL_0042: ldarg.1 + IL_0043: ldc.i4.0 + IL_0044: brfalse.s IL_004e + + IL_0046: ldnull + IL_0047: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 + IL_004c: br.s IL_0055 + + IL_004e: ldloc.0 + IL_004f: call class [mscorlib]System.Exception [FSharp.Core]Microsoft.FSharp.Core.Operators::Failure(string) + IL_0054: throw + + IL_0055: stobj class [mscorlib]System.Collections.Generic.IEnumerable`1 + IL_005a: ldc.i4.2 + IL_005b: ret + + .line 100001,100001 : 0,0 '' + IL_005c: nop + IL_005d: br.s IL_0061 + + .line 5,5 : 14,36 '' + IL_005f: nop + .line 100001,100001 : 0,0 '' + IL_0060: nop + IL_0061: ldarg.0 + IL_0062: ldc.i4.2 + IL_0063: stfld int32 class SeqExpressionSteppingTest7/f@5::pc + IL_0068: ldarg.0 + IL_0069: ldloc.1 + IL_006a: stfld !0 class SeqExpressionSteppingTest7/f@5::current + IL_006f: ldc.i4.0 + IL_0070: ret + } // end of method f@5::GenerateNext + + .method public strict virtual instance void + Close() cil managed + { + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldc.i4.2 + IL_0002: stfld int32 class SeqExpressionSteppingTest7/f@5::pc + IL_0007: ret + } // end of method f@5::Close + + .method public strict virtual instance bool + get_CheckClose() cil managed + { + // Code size 46 (0x2e) + .maxstack 8 + .line 100001,100001 : 0,0 '' + IL_0000: ldarg.0 + IL_0001: ldfld int32 class SeqExpressionSteppingTest7/f@5::pc + IL_0006: switch ( + IL_0019, + IL_001b, + IL_001d) + IL_0017: br.s IL_0028 + + IL_0019: br.s IL_001f + + IL_001b: br.s IL_0022 + + IL_001d: br.s IL_0025 + + .line 100001,100001 : 0,0 '' + IL_001f: nop + IL_0020: br.s IL_002c + + .line 100001,100001 : 0,0 '' + IL_0022: nop + IL_0023: br.s IL_0029 + + .line 100001,100001 : 0,0 '' + IL_0025: nop + IL_0026: br.s IL_002c + + .line 100001,100001 : 0,0 '' + IL_0028: nop + IL_0029: ldc.i4.0 + IL_002a: ret + + .line 100001,100001 : 0,0 '' + IL_002b: nop + IL_002c: ldc.i4.0 + IL_002d: 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 7 (0x7) + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class SeqExpressionSteppingTest7/f@5::current + IL_0006: 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 8 (0x8) + .maxstack 6 + .locals init (!a V_0) + IL_0000: ldc.i4.0 + IL_0001: ldloc.0 + IL_0002: newobj instance void class SeqExpressionSteppingTest7/f@5::.ctor(int32, + !0) + IL_0007: 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 { @@ -63,48 +262,17 @@ .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 f() cil managed { - // Code size 59 (0x3b) - .maxstack 5 - .locals init ([0] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0, - [1] string V_1) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 18,24 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SeqExpressionStepping\\SeqExpressionSteppingTest7.fs' - IL_0000: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest7::get_r() - IL_0005: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_000a: nop - .line 5,5 : 26,30 '' - IL_000b: ldc.i4.1 - IL_000c: brfalse.s IL_0031 - - .line 5,5 : 44,55 '' - IL_000e: ldstr "" - IL_0013: stloc.1 - IL_0014: ldloca.s V_0 - IL_0016: ldc.i4.0 - IL_0017: brfalse.s IL_0021 - - IL_0019: ldnull - IL_001a: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 - IL_001f: br.s IL_0028 - - IL_0021: ldloc.1 - IL_0022: call class [mscorlib]System.Exception [FSharp.Core]Microsoft.FSharp.Core.Operators::Failure(string) - IL_0027: throw - - IL_0028: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::AddMany(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_002d: nop - .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0033 - - .line 5,5 : 14,36 '' - IL_0031: nop - .line 100001,100001 : 0,0 '' - IL_0032: nop + // Code size 15 (0xf) + .maxstack 4 + .locals init ([0] !!a V_0) .line 5,5 : 12,57 '' - IL_0033: ldloca.s V_0 - IL_0035: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() - IL_003a: ret + IL_0000: ldc.i4.0 + IL_0001: ldloc.0 + IL_0002: newobj instance void class SeqExpressionSteppingTest7/f@5::.ctor(int32, + !0) + IL_0007: tail. + IL_0009: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_000e: ret } // end of method SeqExpressionSteppingTest7::f .property class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 @@ -127,7 +295,7 @@ .method public static void main@() cil managed { .entrypoint - // Code size 103 (0x67) + // Code size 107 (0x6b) .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, @@ -153,7 +321,7 @@ .line 6,6 : 25,29 '' IL_001e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 SeqExpressionSteppingTest7::f() IL_0023: stloc.3 - IL_0024: leave.s IL_005c + IL_0024: leave.s IL_0060 .line 6,6 : 30,34 '' } // end .try @@ -165,33 +333,37 @@ IL_002f: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::FailurePattern(class [mscorlib]System.Exception) IL_0034: stloc.s V_5 IL_0036: ldloc.s V_5 - IL_0038: brfalse.s IL_0051 + IL_0038: brfalse.s IL_003c + + IL_003a: br.s IL_003e + + IL_003c: br.s IL_0055 .line 6,6 : 48,52 '' - IL_003a: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest7::get_r() - IL_003f: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0044: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() - IL_0049: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_003e: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest7::get_r() + IL_0043: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0048: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() + IL_004d: 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_004e: stloc.3 - IL_004f: leave.s IL_005c + IL_0052: stloc.3 + IL_0053: leave.s IL_0060 .line 100001,100001 : 0,0 '' - IL_0051: rethrow - IL_0053: ldnull - IL_0054: unbox.any class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - IL_0059: stloc.3 - IL_005a: leave.s IL_005c + IL_0055: rethrow + IL_0057: ldnull + IL_0058: unbox.any class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 + IL_005d: stloc.3 + IL_005e: leave.s IL_0060 .line 100001,100001 : 0,0 '' } // end handler - IL_005c: ldloc.3 - IL_005d: stloc.2 - IL_005e: ldloc.1 - IL_005f: ldloc.2 - IL_0060: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,class [FSharp.Core]Microsoft.FSharp.Core.Unit>::Invoke(!0) - IL_0065: pop - IL_0066: ret + IL_0060: ldloc.3 + IL_0061: stloc.2 + IL_0062: ldloc.1 + IL_0063: ldloc.2 + IL_0064: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,class [FSharp.Core]Microsoft.FSharp.Core.Unit>::Invoke(!0) + IL_0069: pop + IL_006a: ret } // end of method $SeqExpressionSteppingTest7::main@ } // end of class ''.$SeqExpressionSteppingTest7 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionTailCalls/SeqExpressionTailCalls01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionTailCalls/SeqExpressionTailCalls01.il.bsl index 79a56d68ab0..d03a45be913 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionTailCalls/SeqExpressionTailCalls01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionTailCalls/SeqExpressionTailCalls01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly SeqExpressionTailCalls01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SeqExpressionTailCalls01 { - // Offset: 0x00000000 Length: 0x00000219 + // Offset: 0x00000000 Length: 0x0000021D } .mresource public FSharpOptimizationData.SeqExpressionTailCalls01 { - // Offset: 0x00000220 Length: 0x0000008C + // Offset: 0x00000228 Length: 0x0000008C } .module SeqExpressionTailCalls01.exe -// MVID: {60B78A58-093A-A6BE-A745-0383588AB760} +// MVID: {59B19240-093A-A6BE-A745-03834092B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06850000 +// Image base: 0x027D0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -88,67 +88,73 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 102 (0x66) + // Code size 108 (0x6c) .maxstack 7 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SeqExpressionTailCalls\\SeqExpressionTailCalls01.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SeqExpressionTailCalls\\SeqExpressionTailCalls01.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionTailCalls01/rwalk@3::pc IL_0006: ldc.i4.1 IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_003a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0056 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_005d + IL_0022: br.s IL_0040 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_005c + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0063 + + .line 100001,100001 : 0,0 '' + IL_002a: nop + IL_002b: ldarg.0 + IL_002c: ldc.i4.1 + IL_002d: stfld int32 SeqExpressionTailCalls01/rwalk@3::pc .line 3,3 : 25,32 '' - IL_0025: ldarg.0 - IL_0026: ldc.i4.1 - IL_0027: stfld int32 SeqExpressionTailCalls01/rwalk@3::pc - IL_002c: ldarg.0 - IL_002d: ldarg.0 - IL_002e: ldfld int32 SeqExpressionTailCalls01/rwalk@3::x - IL_0033: stfld int32 SeqExpressionTailCalls01/rwalk@3::current - IL_0038: ldc.i4.1 - IL_0039: ret - - IL_003a: ldarg.0 - IL_003b: ldc.i4.2 - IL_003c: stfld int32 SeqExpressionTailCalls01/rwalk@3::pc + IL_0032: ldarg.0 + IL_0033: ldarg.0 + IL_0034: ldfld int32 SeqExpressionTailCalls01/rwalk@3::x + IL_0039: stfld int32 SeqExpressionTailCalls01/rwalk@3::current + IL_003e: ldc.i4.1 + IL_003f: ret + + IL_0040: ldarg.0 + IL_0041: ldc.i4.2 + IL_0042: stfld int32 SeqExpressionTailCalls01/rwalk@3::pc .line 3,3 : 41,52 '' - IL_0041: ldarg.1 - IL_0042: ldarg.0 - IL_0043: ldfld int32 SeqExpressionTailCalls01/rwalk@3::x - IL_0048: ldc.i4.1 - IL_0049: add - IL_004a: call class [mscorlib]System.Collections.Generic.IEnumerable`1 SeqExpressionTailCalls01::rwalk(int32) - IL_004f: stobj class [mscorlib]System.Collections.Generic.IEnumerable`1 - IL_0054: ldc.i4.2 - IL_0055: ret - - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 SeqExpressionTailCalls01/rwalk@3::pc - IL_005d: ldarg.0 - IL_005e: ldc.i4.0 - IL_005f: stfld int32 SeqExpressionTailCalls01/rwalk@3::current + IL_0047: ldarg.1 + IL_0048: ldarg.0 + IL_0049: ldfld int32 SeqExpressionTailCalls01/rwalk@3::x + IL_004e: ldc.i4.1 + IL_004f: add + IL_0050: call class [mscorlib]System.Collections.Generic.IEnumerable`1 SeqExpressionTailCalls01::rwalk(int32) + IL_0055: stobj class [mscorlib]System.Collections.Generic.IEnumerable`1 + IL_005a: ldc.i4.2 + IL_005b: ret + + IL_005c: ldarg.0 + IL_005d: ldc.i4.3 + IL_005e: stfld int32 SeqExpressionTailCalls01/rwalk@3::pc + IL_0063: ldarg.0 IL_0064: ldc.i4.0 - IL_0065: ret + IL_0065: stfld int32 SeqExpressionTailCalls01/rwalk@3::current + IL_006a: ldc.i4.0 + IL_006b: ret } // end of method rwalk@3::GenerateNext .method public strict virtual instance void @@ -165,44 +171,52 @@ .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionTailCalls01/rwalk@3::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.0 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.0 + IL_0033: ret - IL_002c: ldc.i4.0 - IL_002d: ret + IL_0034: ldc.i4.0 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method rwalk@3::get_CheckClose .method public strict virtual instance int32 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionTailCalls/SeqExpressionTailCalls02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionTailCalls/SeqExpressionTailCalls02.il.bsl index 1a661c56fba..4cca2bf3f7c 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionTailCalls/SeqExpressionTailCalls02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionTailCalls/SeqExpressionTailCalls02.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly SeqExpressionTailCalls02 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SeqExpressionTailCalls02 { - // Offset: 0x00000000 Length: 0x00000252 + // Offset: 0x00000000 Length: 0x00000256 } .mresource public FSharpOptimizationData.SeqExpressionTailCalls02 { - // Offset: 0x00000258 Length: 0x0000009E + // Offset: 0x00000260 Length: 0x0000009E } .module SeqExpressionTailCalls02.exe -// MVID: {60B78A58-093A-EC43-A745-0383588AB760} +// MVID: {59B19240-093A-EC43-A745-03834092B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x066C0000 +// Image base: 0x017C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -88,67 +88,73 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 102 (0x66) + // Code size 108 (0x6c) .maxstack 7 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SeqExpressionTailCalls\\SeqExpressionTailCalls02.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SeqExpressionTailCalls\\SeqExpressionTailCalls02.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionTailCalls02/rwalk1@5::pc IL_0006: ldc.i4.1 IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_003a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0056 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_005d + IL_0022: br.s IL_0040 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_005c + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0063 + + .line 100001,100001 : 0,0 '' + IL_002a: nop + IL_002b: ldarg.0 + IL_002c: ldc.i4.1 + IL_002d: stfld int32 SeqExpressionTailCalls02/rwalk1@5::pc .line 5,5 : 26,33 '' - IL_0025: ldarg.0 - IL_0026: ldc.i4.1 - IL_0027: stfld int32 SeqExpressionTailCalls02/rwalk1@5::pc - IL_002c: ldarg.0 - IL_002d: ldarg.0 - IL_002e: ldfld int32 SeqExpressionTailCalls02/rwalk1@5::x - IL_0033: stfld int32 SeqExpressionTailCalls02/rwalk1@5::current - IL_0038: ldc.i4.1 - IL_0039: ret - - IL_003a: ldarg.0 - IL_003b: ldc.i4.2 - IL_003c: stfld int32 SeqExpressionTailCalls02/rwalk1@5::pc + IL_0032: ldarg.0 + IL_0033: ldarg.0 + IL_0034: ldfld int32 SeqExpressionTailCalls02/rwalk1@5::x + IL_0039: stfld int32 SeqExpressionTailCalls02/rwalk1@5::current + IL_003e: ldc.i4.1 + IL_003f: ret + + IL_0040: ldarg.0 + IL_0041: ldc.i4.2 + IL_0042: stfld int32 SeqExpressionTailCalls02/rwalk1@5::pc .line 5,5 : 42,54 '' - IL_0041: ldarg.1 - IL_0042: ldarg.0 - IL_0043: ldfld int32 SeqExpressionTailCalls02/rwalk1@5::x - IL_0048: ldc.i4.1 - IL_0049: add - IL_004a: call class [mscorlib]System.Collections.Generic.IEnumerable`1 SeqExpressionTailCalls02::rwalk2(int32) - IL_004f: stobj class [mscorlib]System.Collections.Generic.IEnumerable`1 - IL_0054: ldc.i4.2 - IL_0055: ret - - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 SeqExpressionTailCalls02/rwalk1@5::pc - IL_005d: ldarg.0 - IL_005e: ldc.i4.0 - IL_005f: stfld int32 SeqExpressionTailCalls02/rwalk1@5::current + IL_0047: ldarg.1 + IL_0048: ldarg.0 + IL_0049: ldfld int32 SeqExpressionTailCalls02/rwalk1@5::x + IL_004e: ldc.i4.1 + IL_004f: add + IL_0050: call class [mscorlib]System.Collections.Generic.IEnumerable`1 SeqExpressionTailCalls02::rwalk2(int32) + IL_0055: stobj class [mscorlib]System.Collections.Generic.IEnumerable`1 + IL_005a: ldc.i4.2 + IL_005b: ret + + IL_005c: ldarg.0 + IL_005d: ldc.i4.3 + IL_005e: stfld int32 SeqExpressionTailCalls02/rwalk1@5::pc + IL_0063: ldarg.0 IL_0064: ldc.i4.0 - IL_0065: ret + IL_0065: stfld int32 SeqExpressionTailCalls02/rwalk1@5::current + IL_006a: ldc.i4.0 + IL_006b: ret } // end of method rwalk1@5::GenerateNext .method public strict virtual instance void @@ -165,44 +171,52 @@ .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionTailCalls02/rwalk1@5::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.0 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.0 + IL_0033: ret - IL_002c: ldc.i4.0 - IL_002d: ret + IL_0034: ldc.i4.0 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method rwalk1@5::get_CheckClose .method public strict virtual instance int32 @@ -273,7 +287,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 102 (0x66) + // Code size 108 (0x6c) .maxstack 7 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 @@ -282,57 +296,63 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001e, - IL_0021) - IL_0019: br.s IL_0024 + IL_001d, + IL_001f) + IL_0019: br.s IL_002a - .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_003a + IL_001b: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0056 + IL_001d: br.s IL_0024 + + IL_001f: br.s IL_0027 .line 100001,100001 : 0,0 '' IL_0021: nop - IL_0022: br.s IL_005d + IL_0022: br.s IL_0040 .line 100001,100001 : 0,0 '' IL_0024: nop + IL_0025: br.s IL_005c + + .line 100001,100001 : 0,0 '' + IL_0027: nop + IL_0028: br.s IL_0063 + + .line 100001,100001 : 0,0 '' + IL_002a: nop + IL_002b: ldarg.0 + IL_002c: ldc.i4.1 + IL_002d: stfld int32 SeqExpressionTailCalls02/rwalk2@6::pc .line 6,6 : 26,33 '' - IL_0025: ldarg.0 - IL_0026: ldc.i4.1 - IL_0027: stfld int32 SeqExpressionTailCalls02/rwalk2@6::pc - IL_002c: ldarg.0 - IL_002d: ldarg.0 - IL_002e: ldfld int32 SeqExpressionTailCalls02/rwalk2@6::x - IL_0033: stfld int32 SeqExpressionTailCalls02/rwalk2@6::current - IL_0038: ldc.i4.1 - IL_0039: ret - - IL_003a: ldarg.0 - IL_003b: ldc.i4.2 - IL_003c: stfld int32 SeqExpressionTailCalls02/rwalk2@6::pc + IL_0032: ldarg.0 + IL_0033: ldarg.0 + IL_0034: ldfld int32 SeqExpressionTailCalls02/rwalk2@6::x + IL_0039: stfld int32 SeqExpressionTailCalls02/rwalk2@6::current + IL_003e: ldc.i4.1 + IL_003f: ret + + IL_0040: ldarg.0 + IL_0041: ldc.i4.2 + IL_0042: stfld int32 SeqExpressionTailCalls02/rwalk2@6::pc .line 6,6 : 42,54 '' - IL_0041: ldarg.1 - IL_0042: ldarg.0 - IL_0043: ldfld int32 SeqExpressionTailCalls02/rwalk2@6::x - IL_0048: ldc.i4.1 - IL_0049: add - IL_004a: call class [mscorlib]System.Collections.Generic.IEnumerable`1 SeqExpressionTailCalls02::rwalk1(int32) - IL_004f: stobj class [mscorlib]System.Collections.Generic.IEnumerable`1 - IL_0054: ldc.i4.2 - IL_0055: ret - - IL_0056: ldarg.0 - IL_0057: ldc.i4.3 - IL_0058: stfld int32 SeqExpressionTailCalls02/rwalk2@6::pc - IL_005d: ldarg.0 - IL_005e: ldc.i4.0 - IL_005f: stfld int32 SeqExpressionTailCalls02/rwalk2@6::current + IL_0047: ldarg.1 + IL_0048: ldarg.0 + IL_0049: ldfld int32 SeqExpressionTailCalls02/rwalk2@6::x + IL_004e: ldc.i4.1 + IL_004f: add + IL_0050: call class [mscorlib]System.Collections.Generic.IEnumerable`1 SeqExpressionTailCalls02::rwalk1(int32) + IL_0055: stobj class [mscorlib]System.Collections.Generic.IEnumerable`1 + IL_005a: ldc.i4.2 + IL_005b: ret + + IL_005c: ldarg.0 + IL_005d: ldc.i4.3 + IL_005e: stfld int32 SeqExpressionTailCalls02/rwalk2@6::pc + IL_0063: ldarg.0 IL_0064: ldc.i4.0 - IL_0065: ret + IL_0065: stfld int32 SeqExpressionTailCalls02/rwalk2@6::current + IL_006a: ldc.i4.0 + IL_006b: ret } // end of method rwalk2@6::GenerateNext .method public strict virtual instance void @@ -349,44 +369,52 @@ .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 48 (0x30) + // Code size 56 (0x38) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionTailCalls02/rwalk2@6::pc IL_0006: switch ( IL_001d, - IL_0020, - IL_0023, - IL_0026) - IL_001b: br.s IL_0029 + IL_001f, + IL_0021, + IL_0023) + IL_001b: br.s IL_0031 + + IL_001d: br.s IL_0025 + + IL_001f: br.s IL_0028 + + IL_0021: br.s IL_002b + + IL_0023: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001d: nop - IL_001e: br.s IL_002e + IL_0025: nop + IL_0026: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: br.s IL_002c + IL_0028: nop + IL_0029: br.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0023: nop - IL_0024: br.s IL_002a + IL_002b: nop + IL_002c: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0026: nop - IL_0027: br.s IL_002e + IL_002e: nop + IL_002f: br.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0029: nop - IL_002a: ldc.i4.0 - IL_002b: ret + IL_0031: nop + IL_0032: ldc.i4.0 + IL_0033: ret - IL_002c: ldc.i4.0 - IL_002d: ret + IL_0034: ldc.i4.0 + IL_0035: ret - IL_002e: ldc.i4.0 - IL_002f: ret + IL_0036: ldc.i4.0 + IL_0037: ret } // end of method rwalk2@6::get_CheckClose .method public strict virtual instance int32 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/LetBinding01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/LetBinding01.il.bsl index 5af7ea86311..c29de0c7bdc 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/LetBinding01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/LetBinding01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly LetBinding01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.LetBinding01 { - // Offset: 0x00000000 Length: 0x000001B0 + // Offset: 0x00000000 Length: 0x000001B4 } .mresource public FSharpOptimizationData.LetBinding01 { // Offset: 0x000001B8 Length: 0x00000070 } .module LetBinding01.exe -// MVID: {60B68B90-269D-BEEF-A745-0383908BB660} +// MVID: {59B19250-269D-BEEF-A745-03835092B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06AB0000 +// Image base: 0x01570000 // =============== CLASS MEMBERS DECLARATION =================== @@ -83,7 +83,7 @@ .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 1,11 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\StaticInit\\LetBinding01.fs' + .line 5,5 : 1,11 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\StaticInit\\LetBinding01.fs' IL_0000: call class [FSharp.Core]Microsoft.FSharp.Core.Unit LetBinding01::get_x() IL_0005: pop .line 6,6 : 1,17 '' diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Class01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Class01.il.bsl index aa250d3a1d8..2dd345fe2d4 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Class01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Class01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly StaticInit_Class01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.StaticInit_Class01 { - // Offset: 0x00000000 Length: 0x0000032F + // Offset: 0x00000000 Length: 0x00000335 } .mresource public FSharpOptimizationData.StaticInit_Class01 { - // Offset: 0x00000338 Length: 0x000000AD + // Offset: 0x00000340 Length: 0x000000AD } .module StaticInit_Class01.dll -// MVID: {60B68B90-EC34-E66E-A745-0383908BB660} +// MVID: {59B19250-EC34-E66E-A745-03835092B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06F70000 +// Image base: 0x00FE0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -56,14 +56,14 @@ { .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 static assembly int32 x - .field static assembly int32 init@4 + .field static assembly int32 'init@4-1' .method public specialname rtspecialname instance void .ctor(valuetype [mscorlib]System.DateTime s) cil managed { // Code size 9 (0x9) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\StaticInit\\StaticInit_Class01.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\StaticInit\\StaticInit_Class01.fs' IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 @@ -75,28 +75,32 @@ .method assembly static int32 f() cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 37 (0x25) + // Code size 41 (0x29) .maxstack 8 .line 7,7 : 23,37 '' IL_0000: volatile. - IL_0002: ldsfld int32 StaticInit_ClassS01/C::init@4 + IL_0002: ldsfld int32 StaticInit_ClassS01/C::'init@4-1' IL_0007: ldc.i4.1 - IL_0008: bge.s IL_0013 + IL_0008: bge.s IL_000c + + IL_000a: br.s IL_000e + + IL_000c: br.s IL_0017 .line 100001,100001 : 0,0 '' - IL_000a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() - IL_000f: nop + IL_000e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() + IL_0013: nop .line 100001,100001 : 0,0 '' - IL_0010: nop - IL_0011: br.s IL_0014 + IL_0014: nop + IL_0015: br.s IL_0018 .line 100001,100001 : 0,0 '' - IL_0013: nop - IL_0014: ldsfld int32 StaticInit_ClassS01/C::x - IL_0019: ldstr "2" - IL_001e: callvirt instance int32 [mscorlib]System.String::get_Length() - IL_0023: add - IL_0024: ret + IL_0017: nop + IL_0018: ldsfld int32 StaticInit_ClassS01/C::x + IL_001d: ldstr "2" + IL_0022: callvirt instance int32 [mscorlib]System.String::get_Length() + IL_0027: add + IL_0028: ret } // end of method C::f .method private specialname rtspecialname static @@ -134,7 +138,7 @@ IL_000a: stsfld int32 StaticInit_ClassS01/C::x IL_000f: ldc.i4.1 IL_0010: volatile. - IL_0012: stsfld int32 StaticInit_ClassS01/C::init@4 + IL_0012: stsfld int32 StaticInit_ClassS01/C::'init@4-1' .line 4,4 : 6,7 '' IL_0017: ret } // end of method $StaticInit_ClassS01::.cctor diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Module01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Module01.il.bsl index bbe78bc0de6..c9cd745c46a 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Module01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Module01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly StaticInit_Module01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.StaticInit_Module01 { - // Offset: 0x00000000 Length: 0x000002A3 + // Offset: 0x00000000 Length: 0x000002A7 } .mresource public FSharpOptimizationData.StaticInit_Module01 { - // Offset: 0x000002A8 Length: 0x000000DF + // Offset: 0x000002B0 Length: 0x000000DF } .module StaticInit_Module01.dll -// MVID: {60B68B90-705F-DF4F-A745-0383908BB660} +// MVID: {59B19250-705F-DF4F-A745-03835092B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x050C0000 +// Image base: 0x00370000 // =============== CLASS MEMBERS DECLARATION =================== @@ -94,7 +94,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld int32 ''.$StaticInit_Module01::x@5 + IL_0000: ldsfld int32 ''.$StaticInit_Module01::'x@5-1' IL_0005: ret } // end of method M::get_x @@ -110,7 +110,7 @@ .class private abstract auto ansi sealed ''.$StaticInit_Module01 extends [mscorlib]System.Object { - .field static assembly initonly int32 x@5 + .field static assembly initonly int32 'x@5-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 initonly int32 y@7 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) @@ -129,11 +129,11 @@ [1] int32 y, [2] int32 z) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 3,21 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\StaticInit\\StaticInit_Module01.fs' + .line 5,5 : 3,21 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\StaticInit\\StaticInit_Module01.fs' IL_0000: ldstr "1" IL_0005: callvirt instance int32 [mscorlib]System.String::get_Length() IL_000a: dup - IL_000b: stsfld int32 ''.$StaticInit_Module01::x@5 + IL_000b: stsfld int32 ''.$StaticInit_Module01::'x@5-1' IL_0010: stloc.0 .line 7,7 : 5,27 '' IL_0011: call int32 StaticInit_Module01/M::get_x() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Struct01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Struct01.il.bsl index a0fdade3853..0ddd5159218 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Struct01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Struct01.il.bsl @@ -34,20 +34,20 @@ } .mresource public FSharpSignatureData.StaticInit_Struct01 { - // Offset: 0x00000000 Length: 0x000007A1 + // Offset: 0x00000000 Length: 0x0000079F } .mresource public FSharpOptimizationData.StaticInit_Struct01 { // Offset: 0x000007A8 Length: 0x0000021F } .module StaticInit_Struct01.dll -// MVID: {60B68B90-05F6-D6CB-A745-0383908BB660} +// MVID: {5F1FA087-05F6-D6CB-A745-038387A01F5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05BE0000 +// Image base: 0x053B0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -77,7 +77,7 @@ .locals init ([0] valuetype StaticInit_Struct01/C& V_0, [1] class [mscorlib]System.Collections.IComparer V_1) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 6,7 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\StaticInit\\StaticInit_Struct01.fs' + .line 4,4 : 6,7 'C:\\kevinransom\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\StaticInit\\StaticInit_Struct01.fs' IL_0000: ldarga.s obj IL_0002: stloc.0 IL_0003: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() @@ -229,28 +229,32 @@ .method assembly static int32 f() cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 37 (0x25) + // Code size 41 (0x29) .maxstack 8 .line 7,7 : 23,37 '' IL_0000: volatile. IL_0002: ldsfld int32 StaticInit_Struct01/C::init@4 IL_0007: ldc.i4.1 - IL_0008: bge.s IL_0013 + IL_0008: bge.s IL_000c + + IL_000a: br.s IL_000e + + IL_000c: br.s IL_0017 .line 100001,100001 : 0,0 '' - IL_000a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() - IL_000f: nop + IL_000e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() + IL_0013: nop .line 100001,100001 : 0,0 '' - IL_0010: nop - IL_0011: br.s IL_0014 + IL_0014: nop + IL_0015: br.s IL_0018 .line 100001,100001 : 0,0 '' - IL_0013: nop - IL_0014: ldsfld int32 StaticInit_Struct01/C::x - IL_0019: ldstr "2" - IL_001e: callvirt instance int32 [mscorlib]System.String::get_Length() - IL_0023: add - IL_0024: ret + IL_0017: nop + IL_0018: ldsfld int32 StaticInit_Struct01/C::x + IL_001d: ldstr "2" + IL_0022: callvirt instance int32 [mscorlib]System.String::get_Length() + IL_0027: add + IL_0028: ret } // end of method C::f .method public hidebysig virtual final diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch01.il.bsl index c3bb349428a..aa77b1c7e0e 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly SteppingMatch01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SteppingMatch01 { - // Offset: 0x00000000 Length: 0x00000210 + // Offset: 0x00000000 Length: 0x0000021C } .mresource public FSharpOptimizationData.SteppingMatch01 { - // Offset: 0x00000218 Length: 0x0000007A + // Offset: 0x00000220 Length: 0x0000007A } .module SteppingMatch01.dll -// MVID: {60B68B90-ABFD-13F6-A745-0383908BB660} +// MVID: {59B19213-ABFD-13F6-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06940000 +// Image base: 0x00CA0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -59,7 +59,7 @@ [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`2/Choice2Of2 V_1, [2] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`2/Choice1Of2 V_2) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch01.fs' + .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch01.fs' IL_0000: ldarg.0 IL_0001: stloc.0 IL_0002: ldloc.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch02.il.bsl index 21138ae19ab..453261211ee 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch02.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly SteppingMatch02 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SteppingMatch02 { - // Offset: 0x00000000 Length: 0x00000210 + // Offset: 0x00000000 Length: 0x0000021C } .mresource public FSharpOptimizationData.SteppingMatch02 { - // Offset: 0x00000218 Length: 0x0000007A + // Offset: 0x00000220 Length: 0x0000007A } .module SteppingMatch02.dll -// MVID: {60B68B90-CAC2-C63D-A745-0383908BB660} +// MVID: {59B19213-CAC2-C63D-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05330000 +// Image base: 0x01090000 // =============== CLASS MEMBERS DECLARATION =================== @@ -59,7 +59,7 @@ [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`2/Choice1Of2 V_1, [2] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`2/Choice2Of2 V_2) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch02.fs' + .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch02.fs' IL_0000: ldarg.0 IL_0001: stloc.0 IL_0002: ldloc.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch03.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch03.il.bsl index 2413a566d87..f2ced1b23d2 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch03.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch03.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly SteppingMatch03 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SteppingMatch03 { - // Offset: 0x00000000 Length: 0x00000225 + // Offset: 0x00000000 Length: 0x00000231 } .mresource public FSharpOptimizationData.SteppingMatch03 { - // Offset: 0x00000230 Length: 0x0000007A + // Offset: 0x00000238 Length: 0x0000007A } .module SteppingMatch03.dll -// MVID: {60B68B90-4E87-D110-A745-0383908BB660} +// MVID: {59B19213-4E87-D110-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07380000 +// Image base: 0x00D00000 // =============== CLASS MEMBERS DECLARATION =================== @@ -53,7 +53,7 @@ .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 funcC(class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3 n) cil managed { - // Code size 75 (0x4b) + // Code size 81 (0x51) .maxstack 3 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3 V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3 V_1, @@ -61,44 +61,50 @@ [3] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 V_3, [4] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 V_4) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch03.fs' + .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch03.fs' IL_0000: ldarg.0 IL_0001: stloc.0 IL_0002: ldloc.0 IL_0003: stloc.1 IL_0004: ldloc.1 IL_0005: isinst class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 - IL_000a: brtrue.s IL_0026 + IL_000a: brtrue.s IL_0016 IL_000c: ldloc.1 IL_000d: isinst class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 - IL_0012: brtrue.s IL_0038 + IL_0012: brtrue.s IL_0018 - IL_0014: ldloc.0 - IL_0015: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 - IL_001a: stloc.2 + IL_0014: br.s IL_001a + + IL_0016: br.s IL_002c + + IL_0018: br.s IL_003e + + IL_001a: ldloc.0 + IL_001b: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 + IL_0020: stloc.2 .line 7,7 : 13,35 '' - IL_001b: ldstr "A" - IL_0020: call void [mscorlib]System.Console::WriteLine(string) - IL_0025: ret + IL_0021: ldstr "A" + IL_0026: call void [mscorlib]System.Console::WriteLine(string) + IL_002b: ret .line 5,5 : 9,21 '' - IL_0026: ldloc.0 - IL_0027: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 - IL_002c: stloc.3 + IL_002c: ldloc.0 + IL_002d: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 + IL_0032: stloc.3 .line 9,9 : 13,35 '' - IL_002d: ldstr "B" - IL_0032: call void [mscorlib]System.Console::WriteLine(string) - IL_0037: ret + IL_0033: ldstr "B" + IL_0038: call void [mscorlib]System.Console::WriteLine(string) + IL_003d: ret .line 5,5 : 9,21 '' - IL_0038: ldloc.0 - IL_0039: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 - IL_003e: stloc.s V_4 + IL_003e: ldloc.0 + IL_003f: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 + IL_0044: stloc.s V_4 .line 11,11 : 13,35 '' - IL_0040: ldstr "C" - IL_0045: call void [mscorlib]System.Console::WriteLine(string) - IL_004a: ret + IL_0046: ldstr "C" + IL_004b: call void [mscorlib]System.Console::WriteLine(string) + IL_0050: ret } // end of method SteppingMatch03::funcC } // end of class SteppingMatch03 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch04.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch04.il.bsl index df2a0c23809..dc909634a1a 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch04.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch04.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly SteppingMatch04 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SteppingMatch04 { - // Offset: 0x00000000 Length: 0x00000226 + // Offset: 0x00000000 Length: 0x00000232 } .mresource public FSharpOptimizationData.SteppingMatch04 { - // Offset: 0x00000230 Length: 0x0000007B + // Offset: 0x00000238 Length: 0x0000007B } .module SteppingMatch04.dll -// MVID: {60B68B90-6D4C-8357-A745-0383908BB660} +// MVID: {59B19213-6D4C-8357-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x073C0000 +// Image base: 0x02770000 // =============== CLASS MEMBERS DECLARATION =================== @@ -53,7 +53,7 @@ .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 funcC2(class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3 n) cil managed { - // Code size 75 (0x4b) + // Code size 81 (0x51) .maxstack 3 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3 V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3 V_1, @@ -61,44 +61,50 @@ [3] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 V_3, [4] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 V_4) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch04.fs' + .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch04.fs' IL_0000: ldarg.0 IL_0001: stloc.0 IL_0002: ldloc.0 IL_0003: stloc.1 IL_0004: ldloc.1 IL_0005: isinst class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 - IL_000a: brtrue.s IL_0026 + IL_000a: brtrue.s IL_0016 IL_000c: ldloc.1 IL_000d: isinst class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 - IL_0012: brtrue.s IL_0038 + IL_0012: brtrue.s IL_0018 - IL_0014: ldloc.0 - IL_0015: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 - IL_001a: stloc.2 + IL_0014: br.s IL_001a + + IL_0016: br.s IL_002c + + IL_0018: br.s IL_003e + + IL_001a: ldloc.0 + IL_001b: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 + IL_0020: stloc.2 .line 7,7 : 13,35 '' - IL_001b: ldstr "B" - IL_0020: call void [mscorlib]System.Console::WriteLine(string) - IL_0025: ret + IL_0021: ldstr "B" + IL_0026: call void [mscorlib]System.Console::WriteLine(string) + IL_002b: ret .line 5,5 : 9,21 '' - IL_0026: ldloc.0 - IL_0027: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 - IL_002c: stloc.3 + IL_002c: ldloc.0 + IL_002d: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 + IL_0032: stloc.3 .line 9,9 : 13,35 '' - IL_002d: ldstr "C" - IL_0032: call void [mscorlib]System.Console::WriteLine(string) - IL_0037: ret + IL_0033: ldstr "C" + IL_0038: call void [mscorlib]System.Console::WriteLine(string) + IL_003d: ret .line 5,5 : 9,21 '' - IL_0038: ldloc.0 - IL_0039: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 - IL_003e: stloc.s V_4 + IL_003e: ldloc.0 + IL_003f: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 + IL_0044: stloc.s V_4 .line 11,11 : 13,35 '' - IL_0040: ldstr "A" - IL_0045: call void [mscorlib]System.Console::WriteLine(string) - IL_004a: ret + IL_0046: ldstr "A" + IL_004b: call void [mscorlib]System.Console::WriteLine(string) + IL_0050: ret } // end of method SteppingMatch04::funcC2 } // end of class SteppingMatch04 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch05.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch05.il.bsl index 6f851d8245e..8da1f763ae7 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch05.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch05.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly SteppingMatch05 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SteppingMatch05 { - // Offset: 0x00000000 Length: 0x00000226 + // Offset: 0x00000000 Length: 0x00000232 } .mresource public FSharpOptimizationData.SteppingMatch05 { - // Offset: 0x00000230 Length: 0x0000007B + // Offset: 0x00000238 Length: 0x0000007B } .module SteppingMatch05.dll -// MVID: {60B68B90-30E9-4ADA-A745-0383908BB660} +// MVID: {59B19213-30E9-4ADA-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x072E0000 +// Image base: 0x02FF0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -53,7 +53,7 @@ .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 funcC3(class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3 n) cil managed { - // Code size 75 (0x4b) + // Code size 81 (0x51) .maxstack 3 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3 V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3 V_1, @@ -61,44 +61,50 @@ [3] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 V_3, [4] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 V_4) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch05.fs' + .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch05.fs' IL_0000: ldarg.0 IL_0001: stloc.0 IL_0002: ldloc.0 IL_0003: stloc.1 IL_0004: ldloc.1 IL_0005: isinst class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 - IL_000a: brtrue.s IL_0026 + IL_000a: brtrue.s IL_0016 IL_000c: ldloc.1 IL_000d: isinst class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 - IL_0012: brtrue.s IL_0038 + IL_0012: brtrue.s IL_0018 - IL_0014: ldloc.0 - IL_0015: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 - IL_001a: stloc.2 + IL_0014: br.s IL_001a + + IL_0016: br.s IL_002c + + IL_0018: br.s IL_003e + + IL_001a: ldloc.0 + IL_001b: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 + IL_0020: stloc.2 .line 7,7 : 13,35 '' - IL_001b: ldstr "C" - IL_0020: call void [mscorlib]System.Console::WriteLine(string) - IL_0025: ret + IL_0021: ldstr "C" + IL_0026: call void [mscorlib]System.Console::WriteLine(string) + IL_002b: ret .line 5,5 : 9,21 '' - IL_0026: ldloc.0 - IL_0027: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 - IL_002c: stloc.3 + IL_002c: ldloc.0 + IL_002d: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 + IL_0032: stloc.3 .line 9,9 : 13,35 '' - IL_002d: ldstr "B" - IL_0032: call void [mscorlib]System.Console::WriteLine(string) - IL_0037: ret + IL_0033: ldstr "B" + IL_0038: call void [mscorlib]System.Console::WriteLine(string) + IL_003d: ret .line 5,5 : 9,21 '' - IL_0038: ldloc.0 - IL_0039: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 - IL_003e: stloc.s V_4 + IL_003e: ldloc.0 + IL_003f: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 + IL_0044: stloc.s V_4 .line 11,11 : 13,35 '' - IL_0040: ldstr "A" - IL_0045: call void [mscorlib]System.Console::WriteLine(string) - IL_004a: ret + IL_0046: ldstr "A" + IL_004b: call void [mscorlib]System.Console::WriteLine(string) + IL_0050: ret } // end of method SteppingMatch05::funcC3 } // end of class SteppingMatch05 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch06.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch06.il.bsl index da1fa20a676..078b8cd73e3 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch06.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch06.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly SteppingMatch06 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SteppingMatch06 { - // Offset: 0x00000000 Length: 0x00000675 + // Offset: 0x00000000 Length: 0x0000067D } .mresource public FSharpOptimizationData.SteppingMatch06 { - // Offset: 0x00000680 Length: 0x000001D9 + // Offset: 0x00000688 Length: 0x000001D9 } .module SteppingMatch06.dll -// MVID: {60B68B90-4FAE-FD21-A745-0383908BB660} +// MVID: {59B19213-4FAE-FD21-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05BB0000 +// Image base: 0x028F0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -205,61 +205,77 @@ instance int32 CompareTo(class SteppingMatch06/Discr obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 48 (0x30) + // Code size 64 (0x40) .maxstack 4 .locals init ([0] int32 V_0, [1] int32 V_1) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch06.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch06.fs' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0026 + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: ldnull - IL_0008: cgt.un - IL_000a: brfalse.s IL_0024 + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: brfalse.s IL_0012 + + IL_0010: br.s IL_0014 + + IL_0012: br.s IL_0030 .line 100001,100001 : 0,0 '' - IL_000c: ldarg.0 - IL_000d: ldfld int32 SteppingMatch06/Discr::_tag - IL_0012: stloc.0 - IL_0013: ldarg.1 - IL_0014: ldfld int32 SteppingMatch06/Discr::_tag - IL_0019: stloc.1 - IL_001a: ldloc.0 - IL_001b: ldloc.1 - IL_001c: bne.un.s IL_0020 + IL_0014: ldarg.0 + IL_0015: ldfld int32 SteppingMatch06/Discr::_tag + IL_001a: stloc.0 + IL_001b: ldarg.1 + IL_001c: ldfld int32 SteppingMatch06/Discr::_tag + IL_0021: stloc.1 + IL_0022: ldloc.0 + IL_0023: ldloc.1 + IL_0024: bne.un.s IL_0028 + + IL_0026: br.s IL_002a + + IL_0028: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_001e: ldc.i4.0 - IL_001f: ret + IL_002a: ldc.i4.0 + IL_002b: ret .line 100001,100001 : 0,0 '' - IL_0020: ldloc.0 - IL_0021: ldloc.1 - IL_0022: sub - IL_0023: ret + IL_002c: ldloc.0 + IL_002d: ldloc.1 + IL_002e: sub + IL_002f: ret .line 100001,100001 : 0,0 '' - IL_0024: ldc.i4.1 - IL_0025: ret + IL_0030: ldc.i4.1 + IL_0031: ret .line 100001,100001 : 0,0 '' - IL_0026: ldarg.1 - IL_0027: ldnull - IL_0028: cgt.un - IL_002a: brfalse.s IL_002e + IL_0032: ldarg.1 + IL_0033: ldnull + IL_0034: cgt.un + IL_0036: brfalse.s IL_003a + + IL_0038: br.s IL_003c + + IL_003a: br.s IL_003e .line 100001,100001 : 0,0 '' - IL_002c: ldc.i4.m1 - IL_002d: ret + IL_003c: ldc.i4.m1 + IL_003d: ret .line 100001,100001 : 0,0 '' - IL_002e: ldc.i4.0 - IL_002f: ret + IL_003e: ldc.i4.0 + IL_003f: ret } // end of method Discr::CompareTo .method public hidebysig virtual final @@ -281,7 +297,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 65 (0x41) + // Code size 81 (0x51) .maxstack 4 .locals init ([0] class SteppingMatch06/Discr V_0, [1] int32 V_1, @@ -293,79 +309,99 @@ IL_0007: ldarg.0 IL_0008: ldnull IL_0009: cgt.un - IL_000b: brfalse.s IL_0032 + IL_000b: brfalse.s IL_000f + + IL_000d: br.s IL_0011 + + IL_000f: br.s IL_003e .line 100001,100001 : 0,0 '' - IL_000d: ldarg.1 - IL_000e: unbox.any SteppingMatch06/Discr - IL_0013: ldnull - IL_0014: cgt.un - IL_0016: brfalse.s IL_0030 + IL_0011: ldarg.1 + IL_0012: unbox.any SteppingMatch06/Discr + IL_0017: ldnull + IL_0018: cgt.un + IL_001a: brfalse.s IL_001e + + IL_001c: br.s IL_0020 + + IL_001e: br.s IL_003c .line 100001,100001 : 0,0 '' - IL_0018: ldarg.0 - IL_0019: ldfld int32 SteppingMatch06/Discr::_tag - IL_001e: stloc.1 - IL_001f: ldloc.0 - IL_0020: ldfld int32 SteppingMatch06/Discr::_tag - IL_0025: stloc.2 - IL_0026: ldloc.1 - IL_0027: ldloc.2 - IL_0028: bne.un.s IL_002c + IL_0020: ldarg.0 + IL_0021: ldfld int32 SteppingMatch06/Discr::_tag + IL_0026: stloc.1 + IL_0027: ldloc.0 + IL_0028: ldfld int32 SteppingMatch06/Discr::_tag + IL_002d: stloc.2 + IL_002e: ldloc.1 + IL_002f: ldloc.2 + IL_0030: bne.un.s IL_0034 + + IL_0032: br.s IL_0036 + + IL_0034: br.s IL_0038 .line 100001,100001 : 0,0 '' - IL_002a: ldc.i4.0 - IL_002b: ret + IL_0036: ldc.i4.0 + IL_0037: ret .line 100001,100001 : 0,0 '' - IL_002c: ldloc.1 - IL_002d: ldloc.2 - IL_002e: sub - IL_002f: ret + IL_0038: ldloc.1 + IL_0039: ldloc.2 + IL_003a: sub + IL_003b: ret .line 100001,100001 : 0,0 '' - IL_0030: ldc.i4.1 - IL_0031: ret + IL_003c: ldc.i4.1 + IL_003d: ret .line 100001,100001 : 0,0 '' - IL_0032: ldarg.1 - IL_0033: unbox.any SteppingMatch06/Discr - IL_0038: ldnull - IL_0039: cgt.un - IL_003b: brfalse.s IL_003f + IL_003e: ldarg.1 + IL_003f: unbox.any SteppingMatch06/Discr + IL_0044: ldnull + IL_0045: cgt.un + IL_0047: brfalse.s IL_004b + + IL_0049: br.s IL_004d + + IL_004b: br.s IL_004f .line 100001,100001 : 0,0 '' - IL_003d: ldc.i4.m1 - IL_003e: ret + IL_004d: ldc.i4.m1 + IL_004e: ret .line 100001,100001 : 0,0 '' - IL_003f: ldc.i4.0 - IL_0040: ret + IL_004f: ldc.i4.0 + IL_0050: ret } // end of method Discr::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 17 (0x11) + // Code size 21 (0x15) .maxstack 3 .locals init ([0] int32 V_0) .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_000f + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_0013 .line 100001,100001 : 0,0 '' - IL_0006: ldc.i4.0 - IL_0007: stloc.0 - IL_0008: ldarg.0 - IL_0009: ldfld int32 SteppingMatch06/Discr::_tag - IL_000e: ret + IL_000a: ldc.i4.0 + IL_000b: stloc.0 + IL_000c: ldarg.0 + IL_000d: ldfld int32 SteppingMatch06/Discr::_tag + IL_0012: ret .line 100001,100001 : 0,0 '' - IL_000f: ldc.i4.0 - IL_0010: ret + IL_0013: ldc.i4.0 + IL_0014: ret } // end of method Discr::GetHashCode .method public hidebysig virtual final @@ -386,7 +422,7 @@ class [mscorlib]System.Collections.IEqualityComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 47 (0x2f) + // Code size 55 (0x37) .maxstack 4 .locals init ([0] class SteppingMatch06/Discr V_0, [1] class SteppingMatch06/Discr V_1, @@ -396,47 +432,55 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0027 + IL_0004: brfalse.s IL_0008 - .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: isinst SteppingMatch06/Discr - IL_000c: stloc.0 - IL_000d: ldloc.0 - IL_000e: brfalse.s IL_0025 + IL_0006: br.s IL_000a + + IL_0008: br.s IL_002f .line 100001,100001 : 0,0 '' - IL_0010: ldloc.0 - IL_0011: stloc.1 - IL_0012: ldarg.0 - IL_0013: ldfld int32 SteppingMatch06/Discr::_tag - IL_0018: stloc.2 - IL_0019: ldloc.1 - IL_001a: ldfld int32 SteppingMatch06/Discr::_tag - IL_001f: stloc.3 - IL_0020: ldloc.2 - IL_0021: ldloc.3 - IL_0022: ceq - IL_0024: ret + IL_000a: ldarg.1 + IL_000b: isinst SteppingMatch06/Discr + IL_0010: stloc.0 + IL_0011: ldloc.0 + IL_0012: brfalse.s IL_0016 + + IL_0014: br.s IL_0018 + + IL_0016: br.s IL_002d .line 100001,100001 : 0,0 '' - IL_0025: ldc.i4.0 - IL_0026: ret + IL_0018: ldloc.0 + IL_0019: stloc.1 + IL_001a: ldarg.0 + IL_001b: ldfld int32 SteppingMatch06/Discr::_tag + IL_0020: stloc.2 + IL_0021: ldloc.1 + IL_0022: ldfld int32 SteppingMatch06/Discr::_tag + IL_0027: stloc.3 + IL_0028: ldloc.2 + IL_0029: ldloc.3 + IL_002a: ceq + IL_002c: ret .line 100001,100001 : 0,0 '' - IL_0027: ldarg.1 - IL_0028: ldnull - IL_0029: cgt.un - IL_002b: ldc.i4.0 - IL_002c: ceq + IL_002d: ldc.i4.0 IL_002e: ret + + .line 100001,100001 : 0,0 '' + IL_002f: ldarg.1 + IL_0030: ldnull + IL_0031: cgt.un + IL_0033: ldc.i4.0 + IL_0034: ceq + IL_0036: ret } // end of method Discr::Equals .method public hidebysig virtual final instance bool Equals(class SteppingMatch06/Discr obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 41 (0x29) + // Code size 49 (0x31) .maxstack 4 .locals init ([0] int32 V_0, [1] int32 V_1) @@ -444,44 +488,52 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0021 + IL_0004: brfalse.s IL_0008 - .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: ldnull - IL_0008: cgt.un - IL_000a: brfalse.s IL_001f + IL_0006: br.s IL_000a + + IL_0008: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_000c: ldarg.0 - IL_000d: ldfld int32 SteppingMatch06/Discr::_tag - IL_0012: stloc.0 - IL_0013: ldarg.1 - IL_0014: ldfld int32 SteppingMatch06/Discr::_tag - IL_0019: stloc.1 - IL_001a: ldloc.0 - IL_001b: ldloc.1 - IL_001c: ceq - IL_001e: ret + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: brfalse.s IL_0012 + + IL_0010: br.s IL_0014 + + IL_0012: br.s IL_0027 .line 100001,100001 : 0,0 '' - IL_001f: ldc.i4.0 - IL_0020: ret + IL_0014: ldarg.0 + IL_0015: ldfld int32 SteppingMatch06/Discr::_tag + IL_001a: stloc.0 + IL_001b: ldarg.1 + IL_001c: ldfld int32 SteppingMatch06/Discr::_tag + IL_0021: stloc.1 + IL_0022: ldloc.0 + IL_0023: ldloc.1 + IL_0024: ceq + IL_0026: ret .line 100001,100001 : 0,0 '' - IL_0021: ldarg.1 - IL_0022: ldnull - IL_0023: cgt.un - IL_0025: ldc.i4.0 - IL_0026: ceq + IL_0027: ldc.i4.0 IL_0028: ret + + .line 100001,100001 : 0,0 '' + IL_0029: ldarg.1 + IL_002a: ldnull + IL_002b: cgt.un + IL_002d: ldc.i4.0 + IL_002e: ceq + IL_0030: ret } // end of method Discr::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 20 (0x14) + // Code size 24 (0x18) .maxstack 4 .locals init ([0] class SteppingMatch06/Discr V_0) .line 4,4 : 6,11 '' @@ -489,17 +541,21 @@ IL_0001: isinst SteppingMatch06/Discr IL_0006: stloc.0 IL_0007: ldloc.0 - IL_0008: brfalse.s IL_0012 + IL_0008: brfalse.s IL_000c + + IL_000a: br.s IL_000e + + IL_000c: br.s IL_0016 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.0 - IL_000b: ldloc.0 - IL_000c: callvirt instance bool SteppingMatch06/Discr::Equals(class SteppingMatch06/Discr) - IL_0011: ret + IL_000e: ldarg.0 + IL_000f: ldloc.0 + IL_0010: callvirt instance bool SteppingMatch06/Discr::Equals(class SteppingMatch06/Discr) + IL_0015: ret .line 100001,100001 : 0,0 '' - IL_0012: ldc.i4.0 - IL_0013: ret + IL_0016: ldc.i4.0 + IL_0017: ret } // end of method Discr::Equals .property instance int32 Tag() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch07.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch07.il.bsl index d91371610a6..a897b0908a0 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch07.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch07.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly SteppingMatch07 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SteppingMatch07 { - // Offset: 0x00000000 Length: 0x00000675 + // Offset: 0x00000000 Length: 0x0000067D } .mresource public FSharpOptimizationData.SteppingMatch07 { - // Offset: 0x00000680 Length: 0x000001D9 + // Offset: 0x00000688 Length: 0x000001D9 } .module SteppingMatch07.dll -// MVID: {60B68B90-D373-07F3-A745-0383908BB660} +// MVID: {59B19213-D373-07F3-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07270000 +// Image base: 0x03330000 // =============== CLASS MEMBERS DECLARATION =================== @@ -205,61 +205,77 @@ instance int32 CompareTo(class SteppingMatch07/Discr obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 48 (0x30) + // Code size 64 (0x40) .maxstack 4 .locals init ([0] int32 V_0, [1] int32 V_1) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch07.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch07.fs' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0026 + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: ldnull - IL_0008: cgt.un - IL_000a: brfalse.s IL_0024 + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: brfalse.s IL_0012 + + IL_0010: br.s IL_0014 + + IL_0012: br.s IL_0030 .line 100001,100001 : 0,0 '' - IL_000c: ldarg.0 - IL_000d: ldfld int32 SteppingMatch07/Discr::_tag - IL_0012: stloc.0 - IL_0013: ldarg.1 - IL_0014: ldfld int32 SteppingMatch07/Discr::_tag - IL_0019: stloc.1 - IL_001a: ldloc.0 - IL_001b: ldloc.1 - IL_001c: bne.un.s IL_0020 + IL_0014: ldarg.0 + IL_0015: ldfld int32 SteppingMatch07/Discr::_tag + IL_001a: stloc.0 + IL_001b: ldarg.1 + IL_001c: ldfld int32 SteppingMatch07/Discr::_tag + IL_0021: stloc.1 + IL_0022: ldloc.0 + IL_0023: ldloc.1 + IL_0024: bne.un.s IL_0028 + + IL_0026: br.s IL_002a + + IL_0028: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_001e: ldc.i4.0 - IL_001f: ret + IL_002a: ldc.i4.0 + IL_002b: ret .line 100001,100001 : 0,0 '' - IL_0020: ldloc.0 - IL_0021: ldloc.1 - IL_0022: sub - IL_0023: ret + IL_002c: ldloc.0 + IL_002d: ldloc.1 + IL_002e: sub + IL_002f: ret .line 100001,100001 : 0,0 '' - IL_0024: ldc.i4.1 - IL_0025: ret + IL_0030: ldc.i4.1 + IL_0031: ret .line 100001,100001 : 0,0 '' - IL_0026: ldarg.1 - IL_0027: ldnull - IL_0028: cgt.un - IL_002a: brfalse.s IL_002e + IL_0032: ldarg.1 + IL_0033: ldnull + IL_0034: cgt.un + IL_0036: brfalse.s IL_003a + + IL_0038: br.s IL_003c + + IL_003a: br.s IL_003e .line 100001,100001 : 0,0 '' - IL_002c: ldc.i4.m1 - IL_002d: ret + IL_003c: ldc.i4.m1 + IL_003d: ret .line 100001,100001 : 0,0 '' - IL_002e: ldc.i4.0 - IL_002f: ret + IL_003e: ldc.i4.0 + IL_003f: ret } // end of method Discr::CompareTo .method public hidebysig virtual final @@ -281,7 +297,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 65 (0x41) + // Code size 81 (0x51) .maxstack 4 .locals init ([0] class SteppingMatch07/Discr V_0, [1] int32 V_1, @@ -293,79 +309,99 @@ IL_0007: ldarg.0 IL_0008: ldnull IL_0009: cgt.un - IL_000b: brfalse.s IL_0032 + IL_000b: brfalse.s IL_000f + + IL_000d: br.s IL_0011 + + IL_000f: br.s IL_003e .line 100001,100001 : 0,0 '' - IL_000d: ldarg.1 - IL_000e: unbox.any SteppingMatch07/Discr - IL_0013: ldnull - IL_0014: cgt.un - IL_0016: brfalse.s IL_0030 + IL_0011: ldarg.1 + IL_0012: unbox.any SteppingMatch07/Discr + IL_0017: ldnull + IL_0018: cgt.un + IL_001a: brfalse.s IL_001e + + IL_001c: br.s IL_0020 + + IL_001e: br.s IL_003c .line 100001,100001 : 0,0 '' - IL_0018: ldarg.0 - IL_0019: ldfld int32 SteppingMatch07/Discr::_tag - IL_001e: stloc.1 - IL_001f: ldloc.0 - IL_0020: ldfld int32 SteppingMatch07/Discr::_tag - IL_0025: stloc.2 - IL_0026: ldloc.1 - IL_0027: ldloc.2 - IL_0028: bne.un.s IL_002c + IL_0020: ldarg.0 + IL_0021: ldfld int32 SteppingMatch07/Discr::_tag + IL_0026: stloc.1 + IL_0027: ldloc.0 + IL_0028: ldfld int32 SteppingMatch07/Discr::_tag + IL_002d: stloc.2 + IL_002e: ldloc.1 + IL_002f: ldloc.2 + IL_0030: bne.un.s IL_0034 + + IL_0032: br.s IL_0036 + + IL_0034: br.s IL_0038 .line 100001,100001 : 0,0 '' - IL_002a: ldc.i4.0 - IL_002b: ret + IL_0036: ldc.i4.0 + IL_0037: ret .line 100001,100001 : 0,0 '' - IL_002c: ldloc.1 - IL_002d: ldloc.2 - IL_002e: sub - IL_002f: ret + IL_0038: ldloc.1 + IL_0039: ldloc.2 + IL_003a: sub + IL_003b: ret .line 100001,100001 : 0,0 '' - IL_0030: ldc.i4.1 - IL_0031: ret + IL_003c: ldc.i4.1 + IL_003d: ret .line 100001,100001 : 0,0 '' - IL_0032: ldarg.1 - IL_0033: unbox.any SteppingMatch07/Discr - IL_0038: ldnull - IL_0039: cgt.un - IL_003b: brfalse.s IL_003f + IL_003e: ldarg.1 + IL_003f: unbox.any SteppingMatch07/Discr + IL_0044: ldnull + IL_0045: cgt.un + IL_0047: brfalse.s IL_004b + + IL_0049: br.s IL_004d + + IL_004b: br.s IL_004f .line 100001,100001 : 0,0 '' - IL_003d: ldc.i4.m1 - IL_003e: ret + IL_004d: ldc.i4.m1 + IL_004e: ret .line 100001,100001 : 0,0 '' - IL_003f: ldc.i4.0 - IL_0040: ret + IL_004f: ldc.i4.0 + IL_0050: ret } // end of method Discr::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 17 (0x11) + // Code size 21 (0x15) .maxstack 3 .locals init ([0] int32 V_0) .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_000f + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_0013 .line 100001,100001 : 0,0 '' - IL_0006: ldc.i4.0 - IL_0007: stloc.0 - IL_0008: ldarg.0 - IL_0009: ldfld int32 SteppingMatch07/Discr::_tag - IL_000e: ret + IL_000a: ldc.i4.0 + IL_000b: stloc.0 + IL_000c: ldarg.0 + IL_000d: ldfld int32 SteppingMatch07/Discr::_tag + IL_0012: ret .line 100001,100001 : 0,0 '' - IL_000f: ldc.i4.0 - IL_0010: ret + IL_0013: ldc.i4.0 + IL_0014: ret } // end of method Discr::GetHashCode .method public hidebysig virtual final @@ -386,7 +422,7 @@ class [mscorlib]System.Collections.IEqualityComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 47 (0x2f) + // Code size 55 (0x37) .maxstack 4 .locals init ([0] class SteppingMatch07/Discr V_0, [1] class SteppingMatch07/Discr V_1, @@ -396,47 +432,55 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0027 + IL_0004: brfalse.s IL_0008 - .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: isinst SteppingMatch07/Discr - IL_000c: stloc.0 - IL_000d: ldloc.0 - IL_000e: brfalse.s IL_0025 + IL_0006: br.s IL_000a + + IL_0008: br.s IL_002f .line 100001,100001 : 0,0 '' - IL_0010: ldloc.0 - IL_0011: stloc.1 - IL_0012: ldarg.0 - IL_0013: ldfld int32 SteppingMatch07/Discr::_tag - IL_0018: stloc.2 - IL_0019: ldloc.1 - IL_001a: ldfld int32 SteppingMatch07/Discr::_tag - IL_001f: stloc.3 - IL_0020: ldloc.2 - IL_0021: ldloc.3 - IL_0022: ceq - IL_0024: ret + IL_000a: ldarg.1 + IL_000b: isinst SteppingMatch07/Discr + IL_0010: stloc.0 + IL_0011: ldloc.0 + IL_0012: brfalse.s IL_0016 + + IL_0014: br.s IL_0018 + + IL_0016: br.s IL_002d .line 100001,100001 : 0,0 '' - IL_0025: ldc.i4.0 - IL_0026: ret + IL_0018: ldloc.0 + IL_0019: stloc.1 + IL_001a: ldarg.0 + IL_001b: ldfld int32 SteppingMatch07/Discr::_tag + IL_0020: stloc.2 + IL_0021: ldloc.1 + IL_0022: ldfld int32 SteppingMatch07/Discr::_tag + IL_0027: stloc.3 + IL_0028: ldloc.2 + IL_0029: ldloc.3 + IL_002a: ceq + IL_002c: ret .line 100001,100001 : 0,0 '' - IL_0027: ldarg.1 - IL_0028: ldnull - IL_0029: cgt.un - IL_002b: ldc.i4.0 - IL_002c: ceq + IL_002d: ldc.i4.0 IL_002e: ret + + .line 100001,100001 : 0,0 '' + IL_002f: ldarg.1 + IL_0030: ldnull + IL_0031: cgt.un + IL_0033: ldc.i4.0 + IL_0034: ceq + IL_0036: ret } // end of method Discr::Equals .method public hidebysig virtual final instance bool Equals(class SteppingMatch07/Discr obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 41 (0x29) + // Code size 49 (0x31) .maxstack 4 .locals init ([0] int32 V_0, [1] int32 V_1) @@ -444,44 +488,52 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0021 + IL_0004: brfalse.s IL_0008 - .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: ldnull - IL_0008: cgt.un - IL_000a: brfalse.s IL_001f + IL_0006: br.s IL_000a + + IL_0008: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_000c: ldarg.0 - IL_000d: ldfld int32 SteppingMatch07/Discr::_tag - IL_0012: stloc.0 - IL_0013: ldarg.1 - IL_0014: ldfld int32 SteppingMatch07/Discr::_tag - IL_0019: stloc.1 - IL_001a: ldloc.0 - IL_001b: ldloc.1 - IL_001c: ceq - IL_001e: ret + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: brfalse.s IL_0012 + + IL_0010: br.s IL_0014 + + IL_0012: br.s IL_0027 .line 100001,100001 : 0,0 '' - IL_001f: ldc.i4.0 - IL_0020: ret + IL_0014: ldarg.0 + IL_0015: ldfld int32 SteppingMatch07/Discr::_tag + IL_001a: stloc.0 + IL_001b: ldarg.1 + IL_001c: ldfld int32 SteppingMatch07/Discr::_tag + IL_0021: stloc.1 + IL_0022: ldloc.0 + IL_0023: ldloc.1 + IL_0024: ceq + IL_0026: ret .line 100001,100001 : 0,0 '' - IL_0021: ldarg.1 - IL_0022: ldnull - IL_0023: cgt.un - IL_0025: ldc.i4.0 - IL_0026: ceq + IL_0027: ldc.i4.0 IL_0028: ret + + .line 100001,100001 : 0,0 '' + IL_0029: ldarg.1 + IL_002a: ldnull + IL_002b: cgt.un + IL_002d: ldc.i4.0 + IL_002e: ceq + IL_0030: ret } // end of method Discr::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 20 (0x14) + // Code size 24 (0x18) .maxstack 4 .locals init ([0] class SteppingMatch07/Discr V_0) .line 4,4 : 6,11 '' @@ -489,17 +541,21 @@ IL_0001: isinst SteppingMatch07/Discr IL_0006: stloc.0 IL_0007: ldloc.0 - IL_0008: brfalse.s IL_0012 + IL_0008: brfalse.s IL_000c + + IL_000a: br.s IL_000e + + IL_000c: br.s IL_0016 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.0 - IL_000b: ldloc.0 - IL_000c: callvirt instance bool SteppingMatch07/Discr::Equals(class SteppingMatch07/Discr) - IL_0011: ret + IL_000e: ldarg.0 + IL_000f: ldloc.0 + IL_0010: callvirt instance bool SteppingMatch07/Discr::Equals(class SteppingMatch07/Discr) + IL_0015: ret .line 100001,100001 : 0,0 '' - IL_0012: ldc.i4.0 - IL_0013: ret + IL_0016: ldc.i4.0 + IL_0017: ret } // end of method Discr::Equals .property instance int32 Tag() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch08.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch08.il.bsl index 76a265460b5..5d87f08136f 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.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly SteppingMatch08 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SteppingMatch08 { - // Offset: 0x00000000 Length: 0x000001DB + // Offset: 0x00000000 Length: 0x000001DF } .mresource public FSharpOptimizationData.SteppingMatch08 { - // Offset: 0x000001E0 Length: 0x00000079 + // Offset: 0x000001E8 Length: 0x00000079 } .module SteppingMatch08.dll -// MVID: {60B68B90-F238-BA3A-A745-0383908BB660} +// MVID: {59B19213-F238-BA3A-A745-03831392B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00E20000 +// Image base: 0x00C70000 // =============== CLASS MEMBERS DECLARATION =================== @@ -57,7 +57,7 @@ .maxstack 3 .locals init ([0] int32 b) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch08.fs' + .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch08.fs' IL_0000: ldarg.0 IL_0001: switch ( IL_000c) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch09.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch09.il.bsl index 3d11c8b1b67..479455bcd34 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch09.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch09.il.bsl @@ -36,13 +36,13 @@ // Offset: 0x00000310 Length: 0x000000EB } .module SteppingMatch09.dll -// MVID: {60B68B90-4935-D6AC-A745-0383908BB660} +// MVID: {5FCFFD1E-4935-D6AC-A745-03831EFDCF5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06A70000 +// Image base: 0x05580000 // =============== CLASS MEMBERS DECLARATION =================== @@ -121,7 +121,7 @@ .method public strict virtual instance int32 Invoke(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 list) cil managed { - // Code size 19 (0x13) + // Code size 23 (0x17) .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}' @@ -133,13 +133,17 @@ IL_0008: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_000d: brtrue.s IL_0011 + IL_000f: br.s IL_0013 + + IL_0011: br.s IL_0015 + .line 17,17 : 14,15 '' - IL_000f: ldc.i4.1 - IL_0010: ret + IL_0013: ldc.i4.1 + IL_0014: ret .line 18,18 : 13,14 '' - IL_0011: ldc.i4.2 - IL_0012: ret + IL_0015: ldc.i4.2 + IL_0016: ret } // end of method GenericInner@15T::Invoke } // end of class GenericInner@15T @@ -163,20 +167,24 @@ .method public strict virtual instance int32 Invoke(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 list) cil managed { - // Code size 12 (0xc) + // Code size 16 (0x10) .maxstack 8 .line 25,25 : 6,21 '' IL_0000: ldarg.1 IL_0001: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_0006: brtrue.s IL_000a + IL_0008: br.s IL_000c + + IL_000a: br.s IL_000e + .line 26,26 : 14,15 '' - IL_0008: ldc.i4.1 - IL_0009: ret + IL_000c: ldc.i4.1 + IL_000d: ret .line 27,27 : 13,14 '' - IL_000a: ldc.i4.2 - IL_000b: ret + IL_000e: ldc.i4.2 + IL_000f: ret } // end of method NonGenericInner@25::Invoke .method private specialname rtspecialname static @@ -213,21 +221,25 @@ .method public strict virtual instance int32 Invoke(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 list) cil managed { - // Code size 17 (0x11) + // Code size 21 (0x15) .maxstack 8 .line 34,34 : 6,21 '' IL_0000: ldarg.1 IL_0001: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_0006: brtrue.s IL_000a + IL_0008: br.s IL_000c + + IL_000a: br.s IL_000e + .line 35,35 : 14,15 '' - IL_0008: ldc.i4.1 - IL_0009: ret + IL_000c: ldc.i4.1 + IL_000d: ret .line 36,36 : 13,14 '' - IL_000a: ldarg.0 - IL_000b: ldfld int32 SteppingMatch09/NonGenericInnerWithCapture@34::x - IL_0010: ret + IL_000e: ldarg.0 + IL_000f: ldfld int32 SteppingMatch09/NonGenericInnerWithCapture@34::x + IL_0014: ret } // end of method NonGenericInnerWithCapture@34::Invoke } // end of class NonGenericInnerWithCapture@34 @@ -235,7 +247,7 @@ .method public static class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 funcA(int32 n) cil managed { - // Code size 36 (0x24) + // Code size 40 (0x28) .maxstack 8 .line 5,5 : 9,21 '' IL_0000: ldarg.0 @@ -243,22 +255,26 @@ IL_0002: sub IL_0003: switch ( IL_0012, - IL_001a) - IL_0010: br.s IL_001c + IL_0014) + IL_0010: br.s IL_0020 + + IL_0012: br.s IL_0016 + + IL_0014: br.s IL_001e .line 7,7 : 13,21 '' - IL_0012: ldc.i4.s 10 - IL_0014: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::Some(!0) - IL_0019: ret + IL_0016: ldc.i4.s 10 + IL_0018: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::Some(!0) + IL_001d: ret .line 9,9 : 13,17 '' - IL_001a: ldnull - IL_001b: ret + IL_001e: ldnull + IL_001f: ret .line 11,11 : 20,34 '' - IL_001c: ldc.i4.s 22 - IL_001e: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::Some(!0) - IL_0023: ret + IL_0020: ldc.i4.s 22 + IL_0022: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::Some(!0) + IL_0027: ret } // end of method SteppingMatch09::funcA .method public static int32 OuterWithGenericInner(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 list) cil managed diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction1.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction1.il.bsl index f50ff82be7f..6a80341afe9 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction1.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction1.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction1 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction1 { - // Offset: 0x00000000 Length: 0x000001C6 + // Offset: 0x00000000 Length: 0x000001CA } .mresource public FSharpOptimizationData.TestFunction1 { // Offset: 0x000001D0 Length: 0x00000070 } .module TestFunction1.exe -// MVID: {60B68B97-65FC-8929-A745-0383978BB660} +// MVID: {59B19208-65FC-8929-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x054C0000 +// Image base: 0x03230000 // =============== CLASS MEMBERS DECLARATION =================== @@ -56,7 +56,7 @@ // Code size 36 (0x24) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction1.fs' + .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction1.fs' IL_0000: ldstr "Hello" IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction10.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction10.il.bsl index d25fd60cf44..868ca11e97b 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction10.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction10.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction10 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction10 { - // Offset: 0x00000000 Length: 0x000001C5 + // Offset: 0x00000000 Length: 0x000001C9 } .mresource public FSharpOptimizationData.TestFunction10 { // Offset: 0x000001D0 Length: 0x00000072 } .module TestFunction10.exe -// MVID: {60B68B97-A624-44FB-A745-0383978BB660} +// MVID: {59B199CC-A624-44FB-A745-0383CC99B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x066D0000 +// Image base: 0x00DA0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -61,7 +61,7 @@ [2] int32 y, [3] int32 x) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction10.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction10.fs' IL_0000: ldarg.0 IL_0001: ldarg.1 IL_0002: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction13.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction13.il.bsl index b3bb8d0a49b..a23943d01bf 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction13.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction13.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction13 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction13 { - // Offset: 0x00000000 Length: 0x00000203 + // Offset: 0x00000000 Length: 0x0000020F } .mresource public FSharpOptimizationData.TestFunction13 { - // Offset: 0x00000208 Length: 0x00000072 + // Offset: 0x00000218 Length: 0x00000072 } .module TestFunction13.exe -// MVID: {60B68B97-A624-451C-A745-0383978BB660} +// MVID: {59B199CC-A624-451C-A745-0383CC99B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00EC0000 +// Image base: 0x01000000 // =============== CLASS MEMBERS DECLARATION =================== @@ -57,7 +57,7 @@ // Code size 30 (0x1e) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,16 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction13.fs' + .line 5,5 : 5,16 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction13.fs' IL_0000: ldarg.0 IL_0001: ldarg.0 IL_0002: ldarg.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction14.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction14.il.bsl index b849fc36afb..f9e5f5be62b 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction14.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction14.il.bsl @@ -36,13 +36,13 @@ // Offset: 0x000001F0 Length: 0x00000072 } .module TestFunction14.exe -// MVID: {60B68B97-A624-4587-A745-0383978BB660} +// MVID: {5FCFFD21-A624-4587-A745-038321FDCF5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00F10000 +// Image base: 0x06A40000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction16.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction16.il.bsl index 25a67922af0..35254e97c34 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction16.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction16.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction16 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction16 { - // Offset: 0x00000000 Length: 0x00000683 + // Offset: 0x00000000 Length: 0x00000693 } .mresource public FSharpOptimizationData.TestFunction16 { - // Offset: 0x00000688 Length: 0x000001CD + // Offset: 0x00000698 Length: 0x000001CD } .module TestFunction16.exe -// MVID: {60B68B97-A624-45C5-A745-0383978BB660} +// MVID: {59B199CC-A624-45C5-A745-0383CC99B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00E30000 +// Image base: 0x01940000 // =============== CLASS MEMBERS DECLARATION =================== @@ -174,7 +174,7 @@ instance int32 CompareTo(class TestFunction16/U obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 120 (0x78) + // Code size 154 (0x9a) .maxstack 4 .locals init ([0] class TestFunction16/U V_0, [1] class TestFunction16/U V_1, @@ -186,109 +186,137 @@ [7] int32 V_7, [8] int32 V_8) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction16.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction16.fs' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_006e + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000d + + IL_0008: br IL_008c .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: ldnull - IL_0008: cgt.un - IL_000a: brfalse.s IL_006c + IL_000d: ldarg.1 + IL_000e: ldnull + IL_000f: cgt.un + IL_0011: brfalse.s IL_0015 + + IL_0013: br.s IL_001a + + IL_0015: br IL_008a .line 100001,100001 : 0,0 '' - IL_000c: ldarg.0 - IL_000d: pop + IL_001a: ldarg.0 + IL_001b: pop .line 100001,100001 : 0,0 '' - IL_000e: ldarg.0 - IL_000f: stloc.0 - IL_0010: ldarg.1 - IL_0011: stloc.1 - IL_0012: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0017: stloc.3 - IL_0018: ldloc.0 - IL_0019: ldfld int32 TestFunction16/U::item1 - IL_001e: stloc.s V_4 - IL_0020: ldloc.1 - IL_0021: ldfld int32 TestFunction16/U::item1 - IL_0026: stloc.s V_5 - IL_0028: ldloc.s V_4 - IL_002a: ldloc.s V_5 - IL_002c: bge.s IL_0032 + IL_001c: ldarg.0 + IL_001d: stloc.0 + IL_001e: ldarg.1 + IL_001f: stloc.1 + IL_0020: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0025: stloc.3 + IL_0026: ldloc.0 + IL_0027: ldfld int32 TestFunction16/U::item1 + IL_002c: stloc.s V_4 + IL_002e: ldloc.1 + IL_002f: ldfld int32 TestFunction16/U::item1 + IL_0034: stloc.s V_5 + IL_0036: ldloc.s V_4 + IL_0038: ldloc.s V_5 + IL_003a: bge.s IL_003e + + IL_003c: br.s IL_0040 + + IL_003e: br.s IL_0044 .line 100001,100001 : 0,0 '' - IL_002e: ldc.i4.m1 + IL_0040: ldc.i4.m1 .line 100001,100001 : 0,0 '' - IL_002f: nop - IL_0030: br.s IL_0039 + IL_0041: nop + IL_0042: br.s IL_004b .line 100001,100001 : 0,0 '' - IL_0032: ldloc.s V_4 - IL_0034: ldloc.s V_5 - IL_0036: cgt + IL_0044: ldloc.s V_4 + IL_0046: ldloc.s V_5 + IL_0048: cgt .line 100001,100001 : 0,0 '' - IL_0038: nop + IL_004a: nop .line 100001,100001 : 0,0 '' - IL_0039: stloc.2 - IL_003a: ldloc.2 - IL_003b: ldc.i4.0 - IL_003c: bge.s IL_0040 + IL_004b: stloc.2 + IL_004c: ldloc.2 + IL_004d: ldc.i4.0 + IL_004e: bge.s IL_0052 + + IL_0050: br.s IL_0054 + + IL_0052: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_003e: ldloc.2 - IL_003f: ret + IL_0054: ldloc.2 + IL_0055: ret .line 100001,100001 : 0,0 '' - IL_0040: ldloc.2 - IL_0041: ldc.i4.0 - IL_0042: ble.s IL_0046 + IL_0056: ldloc.2 + IL_0057: ldc.i4.0 + IL_0058: ble.s IL_005c + + IL_005a: br.s IL_005e + + IL_005c: br.s IL_0060 .line 100001,100001 : 0,0 '' - IL_0044: ldloc.2 - IL_0045: ret + IL_005e: ldloc.2 + IL_005f: ret .line 100001,100001 : 0,0 '' - IL_0046: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_004b: stloc.s V_6 - IL_004d: ldloc.0 - IL_004e: ldfld int32 TestFunction16/U::item2 - IL_0053: stloc.s V_7 - IL_0055: ldloc.1 - IL_0056: ldfld int32 TestFunction16/U::item2 - IL_005b: stloc.s V_8 - IL_005d: ldloc.s V_7 - IL_005f: ldloc.s V_8 - IL_0061: bge.s IL_0065 + IL_0060: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0065: stloc.s V_6 + IL_0067: ldloc.0 + IL_0068: ldfld int32 TestFunction16/U::item2 + IL_006d: stloc.s V_7 + IL_006f: ldloc.1 + IL_0070: ldfld int32 TestFunction16/U::item2 + IL_0075: stloc.s V_8 + IL_0077: ldloc.s V_7 + IL_0079: ldloc.s V_8 + IL_007b: bge.s IL_007f + + IL_007d: br.s IL_0081 + + IL_007f: br.s IL_0083 .line 100001,100001 : 0,0 '' - IL_0063: ldc.i4.m1 - IL_0064: ret + IL_0081: ldc.i4.m1 + IL_0082: ret .line 100001,100001 : 0,0 '' - IL_0065: ldloc.s V_7 - IL_0067: ldloc.s V_8 - IL_0069: cgt - IL_006b: ret + IL_0083: ldloc.s V_7 + IL_0085: ldloc.s V_8 + IL_0087: cgt + IL_0089: ret .line 100001,100001 : 0,0 '' - IL_006c: ldc.i4.1 - IL_006d: ret + IL_008a: ldc.i4.1 + IL_008b: ret .line 100001,100001 : 0,0 '' - IL_006e: ldarg.1 - IL_006f: ldnull - IL_0070: cgt.un - IL_0072: brfalse.s IL_0076 + IL_008c: ldarg.1 + IL_008d: ldnull + IL_008e: cgt.un + IL_0090: brfalse.s IL_0094 + + IL_0092: br.s IL_0096 + + IL_0094: br.s IL_0098 .line 100001,100001 : 0,0 '' - IL_0074: ldc.i4.m1 - IL_0075: ret + IL_0096: ldc.i4.m1 + IL_0097: ret .line 100001,100001 : 0,0 '' - IL_0076: ldc.i4.0 - IL_0077: ret + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method U::CompareTo .method public hidebysig virtual final @@ -310,7 +338,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 130 (0x82) + // Code size 164 (0xa4) .maxstack 4 .locals init ([0] class TestFunction16/U V_0, [1] class TestFunction16/U V_1, @@ -329,114 +357,142 @@ IL_0007: ldarg.0 IL_0008: ldnull IL_0009: cgt.un - IL_000b: brfalse.s IL_0073 + IL_000b: brfalse.s IL_000f + + IL_000d: br.s IL_0014 + + IL_000f: br IL_0091 .line 100001,100001 : 0,0 '' - IL_000d: ldarg.1 - IL_000e: unbox.any TestFunction16/U - IL_0013: ldnull - IL_0014: cgt.un - IL_0016: brfalse.s IL_0071 + IL_0014: ldarg.1 + IL_0015: unbox.any TestFunction16/U + IL_001a: ldnull + IL_001b: cgt.un + IL_001d: brfalse.s IL_0021 + + IL_001f: br.s IL_0026 + + IL_0021: br IL_008f .line 100001,100001 : 0,0 '' - IL_0018: ldarg.0 - IL_0019: pop + IL_0026: ldarg.0 + IL_0027: pop .line 100001,100001 : 0,0 '' - IL_001a: ldarg.0 - IL_001b: stloc.1 - IL_001c: ldloc.0 - IL_001d: stloc.2 - IL_001e: ldarg.2 - IL_001f: stloc.s V_4 - IL_0021: ldloc.1 - IL_0022: ldfld int32 TestFunction16/U::item1 - IL_0027: stloc.s V_5 - IL_0029: ldloc.2 - IL_002a: ldfld int32 TestFunction16/U::item1 - IL_002f: stloc.s V_6 - IL_0031: ldloc.s V_5 - IL_0033: ldloc.s V_6 - IL_0035: bge.s IL_003b + IL_0028: ldarg.0 + IL_0029: stloc.1 + IL_002a: ldloc.0 + IL_002b: stloc.2 + IL_002c: ldarg.2 + IL_002d: stloc.s V_4 + IL_002f: ldloc.1 + IL_0030: ldfld int32 TestFunction16/U::item1 + IL_0035: stloc.s V_5 + IL_0037: ldloc.2 + IL_0038: ldfld int32 TestFunction16/U::item1 + IL_003d: stloc.s V_6 + IL_003f: ldloc.s V_5 + IL_0041: ldloc.s V_6 + IL_0043: bge.s IL_0047 + + IL_0045: br.s IL_0049 + + IL_0047: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_0037: ldc.i4.m1 + IL_0049: ldc.i4.m1 .line 100001,100001 : 0,0 '' - IL_0038: nop - IL_0039: br.s IL_0042 + IL_004a: nop + IL_004b: br.s IL_0054 .line 100001,100001 : 0,0 '' - IL_003b: ldloc.s V_5 - IL_003d: ldloc.s V_6 - IL_003f: cgt + IL_004d: ldloc.s V_5 + IL_004f: ldloc.s V_6 + IL_0051: cgt .line 100001,100001 : 0,0 '' - IL_0041: nop + IL_0053: nop .line 100001,100001 : 0,0 '' - IL_0042: stloc.3 - IL_0043: ldloc.3 - IL_0044: ldc.i4.0 - IL_0045: bge.s IL_0049 + IL_0054: stloc.3 + IL_0055: ldloc.3 + IL_0056: ldc.i4.0 + IL_0057: bge.s IL_005b + + IL_0059: br.s IL_005d + + IL_005b: br.s IL_005f .line 100001,100001 : 0,0 '' - IL_0047: ldloc.3 - IL_0048: ret + IL_005d: ldloc.3 + IL_005e: ret .line 100001,100001 : 0,0 '' - IL_0049: ldloc.3 - IL_004a: ldc.i4.0 - IL_004b: ble.s IL_004f + IL_005f: ldloc.3 + IL_0060: ldc.i4.0 + IL_0061: ble.s IL_0065 + + IL_0063: br.s IL_0067 + + IL_0065: br.s IL_0069 .line 100001,100001 : 0,0 '' - IL_004d: ldloc.3 - IL_004e: ret + IL_0067: ldloc.3 + IL_0068: ret .line 100001,100001 : 0,0 '' - IL_004f: ldarg.2 - IL_0050: stloc.s V_7 - IL_0052: ldloc.1 - IL_0053: ldfld int32 TestFunction16/U::item2 - IL_0058: stloc.s V_8 - IL_005a: ldloc.2 - IL_005b: ldfld int32 TestFunction16/U::item2 - IL_0060: stloc.s V_9 - IL_0062: ldloc.s V_8 - IL_0064: ldloc.s V_9 - IL_0066: bge.s IL_006a + IL_0069: ldarg.2 + IL_006a: stloc.s V_7 + IL_006c: ldloc.1 + IL_006d: ldfld int32 TestFunction16/U::item2 + IL_0072: stloc.s V_8 + IL_0074: ldloc.2 + IL_0075: ldfld int32 TestFunction16/U::item2 + IL_007a: stloc.s V_9 + IL_007c: ldloc.s V_8 + IL_007e: ldloc.s V_9 + IL_0080: bge.s IL_0084 + + IL_0082: br.s IL_0086 + + IL_0084: br.s IL_0088 .line 100001,100001 : 0,0 '' - IL_0068: ldc.i4.m1 - IL_0069: ret + IL_0086: ldc.i4.m1 + IL_0087: ret .line 100001,100001 : 0,0 '' - IL_006a: ldloc.s V_8 - IL_006c: ldloc.s V_9 - IL_006e: cgt - IL_0070: ret + IL_0088: ldloc.s V_8 + IL_008a: ldloc.s V_9 + IL_008c: cgt + IL_008e: ret .line 100001,100001 : 0,0 '' - IL_0071: ldc.i4.1 - IL_0072: ret + IL_008f: ldc.i4.1 + IL_0090: ret .line 100001,100001 : 0,0 '' - IL_0073: ldarg.1 - IL_0074: unbox.any TestFunction16/U - IL_0079: ldnull - IL_007a: cgt.un - IL_007c: brfalse.s IL_0080 + IL_0091: ldarg.1 + IL_0092: unbox.any TestFunction16/U + IL_0097: ldnull + IL_0098: cgt.un + IL_009a: brfalse.s IL_009e + + IL_009c: br.s IL_00a0 + + IL_009e: br.s IL_00a2 .line 100001,100001 : 0,0 '' - IL_007e: ldc.i4.m1 - IL_007f: ret + IL_00a0: ldc.i4.m1 + IL_00a1: ret .line 100001,100001 : 0,0 '' - IL_0080: ldc.i4.0 - IL_0081: ret + IL_00a2: ldc.i4.0 + IL_00a3: 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 64 (0x40) + // Code size 68 (0x44) .maxstack 7 .locals init ([0] int32 V_0, [1] class TestFunction16/U V_1, @@ -446,54 +502,58 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_003e - - .line 100001,100001 : 0,0 '' - IL_0006: ldc.i4.0 - IL_0007: stloc.0 - IL_0008: ldarg.0 - IL_0009: pop - .line 100001,100001 : 0,0 '' - IL_000a: ldarg.0 - IL_000b: stloc.1 - IL_000c: ldc.i4.0 - IL_000d: stloc.0 - IL_000e: ldc.i4 0x9e3779b9 - IL_0013: ldarg.1 - IL_0014: stloc.2 - IL_0015: ldloc.1 - IL_0016: ldfld int32 TestFunction16/U::item2 - IL_001b: ldloc.0 - IL_001c: ldc.i4.6 - IL_001d: shl - IL_001e: ldloc.0 - IL_001f: ldc.i4.2 - IL_0020: shr - IL_0021: add - IL_0022: add - IL_0023: add - IL_0024: stloc.0 - IL_0025: ldc.i4 0x9e3779b9 - IL_002a: ldarg.1 - IL_002b: stloc.3 - IL_002c: ldloc.1 - IL_002d: ldfld int32 TestFunction16/U::item1 - IL_0032: ldloc.0 - IL_0033: ldc.i4.6 - IL_0034: shl - IL_0035: ldloc.0 - IL_0036: ldc.i4.2 - IL_0037: shr - IL_0038: add - IL_0039: add - IL_003a: add - IL_003b: stloc.0 - IL_003c: ldloc.0 - IL_003d: ret - - .line 100001,100001 : 0,0 '' - IL_003e: ldc.i4.0 - IL_003f: ret + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_0042 + + .line 100001,100001 : 0,0 '' + IL_000a: ldc.i4.0 + IL_000b: stloc.0 + IL_000c: ldarg.0 + IL_000d: pop + .line 100001,100001 : 0,0 '' + IL_000e: ldarg.0 + IL_000f: stloc.1 + IL_0010: ldc.i4.0 + IL_0011: stloc.0 + IL_0012: ldc.i4 0x9e3779b9 + IL_0017: ldarg.1 + IL_0018: stloc.2 + IL_0019: ldloc.1 + IL_001a: ldfld int32 TestFunction16/U::item2 + IL_001f: ldloc.0 + IL_0020: ldc.i4.6 + IL_0021: shl + IL_0022: ldloc.0 + IL_0023: ldc.i4.2 + IL_0024: shr + IL_0025: add + IL_0026: add + IL_0027: add + IL_0028: stloc.0 + IL_0029: ldc.i4 0x9e3779b9 + IL_002e: ldarg.1 + IL_002f: stloc.3 + IL_0030: ldloc.1 + IL_0031: ldfld int32 TestFunction16/U::item1 + IL_0036: ldloc.0 + IL_0037: ldc.i4.6 + IL_0038: shl + IL_0039: ldloc.0 + IL_003a: ldc.i4.2 + IL_003b: shr + IL_003c: add + IL_003d: add + IL_003e: add + IL_003f: stloc.0 + IL_0040: ldloc.0 + IL_0041: ret + + .line 100001,100001 : 0,0 '' + IL_0042: ldc.i4.0 + IL_0043: ret } // end of method U::GetHashCode .method public hidebysig virtual final @@ -514,7 +574,7 @@ class [mscorlib]System.Collections.IEqualityComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 73 (0x49) + // Code size 85 (0x55) .maxstack 4 .locals init ([0] class TestFunction16/U V_0, [1] class TestFunction16/U V_1, @@ -526,66 +586,78 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0041 + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: isinst TestFunction16/U - IL_000c: stloc.0 - IL_000d: ldloc.0 - IL_000e: brfalse.s IL_003f + IL_000a: ldarg.1 + IL_000b: isinst TestFunction16/U + IL_0010: stloc.0 + IL_0011: ldloc.0 + IL_0012: brfalse.s IL_0016 + + IL_0014: br.s IL_0018 + + IL_0016: br.s IL_004b .line 100001,100001 : 0,0 '' - IL_0010: ldloc.0 - IL_0011: stloc.1 - IL_0012: ldarg.0 - IL_0013: pop + IL_0018: ldloc.0 + IL_0019: stloc.1 + IL_001a: ldarg.0 + IL_001b: pop .line 100001,100001 : 0,0 '' - IL_0014: ldarg.0 - IL_0015: stloc.2 - IL_0016: ldloc.1 - IL_0017: stloc.3 - IL_0018: ldarg.2 - IL_0019: stloc.s V_4 - IL_001b: ldloc.2 - IL_001c: ldfld int32 TestFunction16/U::item1 - IL_0021: ldloc.3 - IL_0022: ldfld int32 TestFunction16/U::item1 - IL_0027: ceq - IL_0029: brfalse.s IL_003d - - .line 100001,100001 : 0,0 '' - IL_002b: ldarg.2 - IL_002c: stloc.s V_5 - IL_002e: ldloc.2 - IL_002f: ldfld int32 TestFunction16/U::item2 - IL_0034: ldloc.3 - IL_0035: ldfld int32 TestFunction16/U::item2 - IL_003a: ceq - IL_003c: ret + IL_001c: ldarg.0 + IL_001d: stloc.2 + IL_001e: ldloc.1 + IL_001f: stloc.3 + IL_0020: ldarg.2 + IL_0021: stloc.s V_4 + IL_0023: ldloc.2 + IL_0024: ldfld int32 TestFunction16/U::item1 + IL_0029: ldloc.3 + IL_002a: ldfld int32 TestFunction16/U::item1 + IL_002f: ceq + IL_0031: brfalse.s IL_0035 - .line 100001,100001 : 0,0 '' - IL_003d: ldc.i4.0 - IL_003e: ret + IL_0033: br.s IL_0037 - .line 100001,100001 : 0,0 '' - IL_003f: ldc.i4.0 - IL_0040: ret + IL_0035: br.s IL_0049 .line 100001,100001 : 0,0 '' - IL_0041: ldarg.1 - IL_0042: ldnull - IL_0043: cgt.un - IL_0045: ldc.i4.0 + IL_0037: ldarg.2 + IL_0038: stloc.s V_5 + IL_003a: ldloc.2 + IL_003b: ldfld int32 TestFunction16/U::item2 + IL_0040: ldloc.3 + IL_0041: ldfld int32 TestFunction16/U::item2 IL_0046: ceq IL_0048: ret + + .line 100001,100001 : 0,0 '' + IL_0049: ldc.i4.0 + IL_004a: ret + + .line 100001,100001 : 0,0 '' + IL_004b: ldc.i4.0 + IL_004c: ret + + .line 100001,100001 : 0,0 '' + IL_004d: ldarg.1 + IL_004e: ldnull + IL_004f: cgt.un + IL_0051: ldc.i4.0 + IL_0052: ceq + IL_0054: ret } // end of method U::Equals .method public hidebysig virtual final instance bool Equals(class TestFunction16/U obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 59 (0x3b) + // Code size 71 (0x47) .maxstack 4 .locals init ([0] class TestFunction16/U V_0, [1] class TestFunction16/U V_1) @@ -593,58 +665,70 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0033 + IL_0004: brfalse.s IL_0008 - .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: ldnull - IL_0008: cgt.un - IL_000a: brfalse.s IL_0031 + IL_0006: br.s IL_000a + + IL_0008: br.s IL_003f .line 100001,100001 : 0,0 '' - IL_000c: ldarg.0 - IL_000d: pop + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: brfalse.s IL_0012 + + IL_0010: br.s IL_0014 + + IL_0012: br.s IL_003d + .line 100001,100001 : 0,0 '' - IL_000e: ldarg.0 - IL_000f: stloc.0 - IL_0010: ldarg.1 - IL_0011: stloc.1 - IL_0012: ldloc.0 - IL_0013: ldfld int32 TestFunction16/U::item1 - IL_0018: ldloc.1 - IL_0019: ldfld int32 TestFunction16/U::item1 - IL_001e: bne.un.s IL_002f + IL_0014: ldarg.0 + IL_0015: pop + .line 100001,100001 : 0,0 '' + IL_0016: ldarg.0 + IL_0017: stloc.0 + IL_0018: ldarg.1 + IL_0019: stloc.1 + IL_001a: ldloc.0 + IL_001b: ldfld int32 TestFunction16/U::item1 + IL_0020: ldloc.1 + IL_0021: ldfld int32 TestFunction16/U::item1 + IL_0026: bne.un.s IL_002a + + IL_0028: br.s IL_002c + + IL_002a: br.s IL_003b .line 100001,100001 : 0,0 '' - IL_0020: ldloc.0 - IL_0021: ldfld int32 TestFunction16/U::item2 - IL_0026: ldloc.1 - IL_0027: ldfld int32 TestFunction16/U::item2 - IL_002c: ceq - IL_002e: ret + IL_002c: ldloc.0 + IL_002d: ldfld int32 TestFunction16/U::item2 + IL_0032: ldloc.1 + IL_0033: ldfld int32 TestFunction16/U::item2 + IL_0038: ceq + IL_003a: ret .line 100001,100001 : 0,0 '' - IL_002f: ldc.i4.0 - IL_0030: ret + IL_003b: ldc.i4.0 + IL_003c: ret .line 100001,100001 : 0,0 '' - IL_0031: ldc.i4.0 - IL_0032: ret + IL_003d: ldc.i4.0 + IL_003e: ret .line 100001,100001 : 0,0 '' - IL_0033: ldarg.1 - IL_0034: ldnull - IL_0035: cgt.un - IL_0037: ldc.i4.0 - IL_0038: ceq - IL_003a: ret + IL_003f: ldarg.1 + IL_0040: ldnull + IL_0041: cgt.un + IL_0043: ldc.i4.0 + IL_0044: ceq + IL_0046: 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 20 (0x14) + // Code size 24 (0x18) .maxstack 4 .locals init ([0] class TestFunction16/U V_0) .line 4,4 : 6,7 '' @@ -652,17 +736,21 @@ IL_0001: isinst TestFunction16/U IL_0006: stloc.0 IL_0007: ldloc.0 - IL_0008: brfalse.s IL_0012 + IL_0008: brfalse.s IL_000c + + IL_000a: br.s IL_000e + + IL_000c: br.s IL_0016 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.0 - IL_000b: ldloc.0 - IL_000c: callvirt instance bool TestFunction16/U::Equals(class TestFunction16/U) - IL_0011: ret + IL_000e: ldarg.0 + IL_000f: ldloc.0 + IL_0010: callvirt instance bool TestFunction16/U::Equals(class TestFunction16/U) + IL_0015: ret .line 100001,100001 : 0,0 '' - IL_0012: ldc.i4.0 - IL_0013: ret + IL_0016: ldc.i4.0 + IL_0017: ret } // end of method U::Equals .property instance int32 Tag() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction17.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction17.il.bsl index 02a8fa33560..cc502982e7b 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction17.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction17.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction17 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction17 { - // Offset: 0x00000000 Length: 0x0000066E + // Offset: 0x00000000 Length: 0x0000067E } .mresource public FSharpOptimizationData.TestFunction17 { - // Offset: 0x00000678 Length: 0x000001CD + // Offset: 0x00000688 Length: 0x000001CD } .module TestFunction17.exe -// MVID: {60B68B97-A624-45A8-A745-0383978BB660} +// MVID: {59B199CC-A624-45A8-A745-0383CC99B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06AA0000 +// Image base: 0x027C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -119,7 +119,7 @@ instance int32 CompareTo(class TestFunction17/R obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 108 (0x6c) + // Code size 142 (0x8e) .maxstack 4 .locals init ([0] int32 V_0, [1] class [mscorlib]System.Collections.IComparer V_1, @@ -129,102 +129,130 @@ [5] int32 V_5, [6] int32 V_6) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction17.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction17.fs' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0062 + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000d + + IL_0008: br IL_0080 .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: ldnull - IL_0008: cgt.un - IL_000a: brfalse.s IL_0060 + IL_000d: ldarg.1 + IL_000e: ldnull + IL_000f: cgt.un + IL_0011: brfalse.s IL_0015 + + IL_0013: br.s IL_001a + + IL_0015: br IL_007e .line 100001,100001 : 0,0 '' - IL_000c: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0011: stloc.1 - IL_0012: ldarg.0 - IL_0013: ldfld int32 TestFunction17/R::x@ - IL_0018: stloc.2 - IL_0019: ldarg.1 - IL_001a: ldfld int32 TestFunction17/R::x@ - IL_001f: stloc.3 - IL_0020: ldloc.2 - IL_0021: ldloc.3 - IL_0022: bge.s IL_0028 + IL_001a: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_001f: stloc.1 + IL_0020: ldarg.0 + IL_0021: ldfld int32 TestFunction17/R::x@ + IL_0026: stloc.2 + IL_0027: ldarg.1 + IL_0028: ldfld int32 TestFunction17/R::x@ + IL_002d: stloc.3 + IL_002e: ldloc.2 + IL_002f: ldloc.3 + IL_0030: bge.s IL_0034 + + IL_0032: br.s IL_0036 + + IL_0034: br.s IL_003a .line 100001,100001 : 0,0 '' - IL_0024: ldc.i4.m1 + IL_0036: ldc.i4.m1 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_002d + IL_0037: nop + IL_0038: br.s IL_003f .line 100001,100001 : 0,0 '' - IL_0028: ldloc.2 - IL_0029: ldloc.3 - IL_002a: cgt + IL_003a: ldloc.2 + IL_003b: ldloc.3 + IL_003c: cgt .line 100001,100001 : 0,0 '' - IL_002c: nop + IL_003e: nop .line 100001,100001 : 0,0 '' - IL_002d: stloc.0 - IL_002e: ldloc.0 - IL_002f: ldc.i4.0 - IL_0030: bge.s IL_0034 + IL_003f: stloc.0 + IL_0040: ldloc.0 + IL_0041: ldc.i4.0 + IL_0042: bge.s IL_0046 + + IL_0044: br.s IL_0048 + + IL_0046: br.s IL_004a .line 100001,100001 : 0,0 '' - IL_0032: ldloc.0 - IL_0033: ret + IL_0048: ldloc.0 + IL_0049: ret .line 100001,100001 : 0,0 '' - IL_0034: ldloc.0 - IL_0035: ldc.i4.0 - IL_0036: ble.s IL_003a + IL_004a: ldloc.0 + IL_004b: ldc.i4.0 + IL_004c: ble.s IL_0050 + + IL_004e: br.s IL_0052 + + IL_0050: br.s IL_0054 .line 100001,100001 : 0,0 '' - IL_0038: ldloc.0 - IL_0039: ret + IL_0052: ldloc.0 + IL_0053: ret .line 100001,100001 : 0,0 '' - IL_003a: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_003f: stloc.s V_4 - IL_0041: ldarg.0 - IL_0042: ldfld int32 TestFunction17/R::y@ - IL_0047: stloc.s V_5 - IL_0049: ldarg.1 - IL_004a: ldfld int32 TestFunction17/R::y@ - IL_004f: stloc.s V_6 - IL_0051: ldloc.s V_5 - IL_0053: ldloc.s V_6 - IL_0055: bge.s IL_0059 + IL_0054: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0059: stloc.s V_4 + IL_005b: ldarg.0 + IL_005c: ldfld int32 TestFunction17/R::y@ + IL_0061: stloc.s V_5 + IL_0063: ldarg.1 + IL_0064: ldfld int32 TestFunction17/R::y@ + IL_0069: stloc.s V_6 + IL_006b: ldloc.s V_5 + IL_006d: ldloc.s V_6 + IL_006f: bge.s IL_0073 + + IL_0071: br.s IL_0075 + + IL_0073: br.s IL_0077 .line 100001,100001 : 0,0 '' - IL_0057: ldc.i4.m1 - IL_0058: ret + IL_0075: ldc.i4.m1 + IL_0076: ret .line 100001,100001 : 0,0 '' - IL_0059: ldloc.s V_5 - IL_005b: ldloc.s V_6 - IL_005d: cgt - IL_005f: ret + IL_0077: ldloc.s V_5 + IL_0079: ldloc.s V_6 + IL_007b: cgt + IL_007d: ret .line 100001,100001 : 0,0 '' - IL_0060: ldc.i4.1 - IL_0061: ret + IL_007e: ldc.i4.1 + IL_007f: ret .line 100001,100001 : 0,0 '' - IL_0062: ldarg.1 - IL_0063: ldnull - IL_0064: cgt.un - IL_0066: brfalse.s IL_006a + IL_0080: ldarg.1 + IL_0081: ldnull + IL_0082: cgt.un + IL_0084: brfalse.s IL_0088 + + IL_0086: br.s IL_008a + + IL_0088: br.s IL_008c .line 100001,100001 : 0,0 '' - IL_0068: ldc.i4.m1 - IL_0069: ret + IL_008a: ldc.i4.m1 + IL_008b: ret .line 100001,100001 : 0,0 '' - IL_006a: ldc.i4.0 - IL_006b: ret + IL_008c: ldc.i4.0 + IL_008d: ret } // end of method R::CompareTo .method public hidebysig virtual final @@ -246,7 +274,7 @@ 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) + // Code size 159 (0x9f) .maxstack 4 .locals init ([0] class TestFunction17/R V_0, [1] class TestFunction17/R V_1, @@ -266,107 +294,135 @@ IL_0009: ldarg.0 IL_000a: ldnull IL_000b: cgt.un - IL_000d: brfalse.s IL_006e + IL_000d: brfalse.s IL_0011 + + IL_000f: br.s IL_0016 + + IL_0011: br IL_008c .line 100001,100001 : 0,0 '' - IL_000f: ldarg.1 - IL_0010: unbox.any TestFunction17/R - IL_0015: ldnull - IL_0016: cgt.un - IL_0018: brfalse.s IL_006c + IL_0016: ldarg.1 + IL_0017: unbox.any TestFunction17/R + IL_001c: ldnull + IL_001d: cgt.un + IL_001f: brfalse.s IL_0023 + + IL_0021: br.s IL_0028 + + IL_0023: br IL_008a .line 100001,100001 : 0,0 '' - IL_001a: ldarg.2 - IL_001b: stloc.3 - IL_001c: ldarg.0 - IL_001d: ldfld int32 TestFunction17/R::x@ - IL_0022: stloc.s V_4 - IL_0024: ldloc.1 - IL_0025: ldfld int32 TestFunction17/R::x@ - IL_002a: stloc.s V_5 - IL_002c: ldloc.s V_4 - IL_002e: ldloc.s V_5 - IL_0030: bge.s IL_0036 + IL_0028: ldarg.2 + IL_0029: stloc.3 + IL_002a: ldarg.0 + IL_002b: ldfld int32 TestFunction17/R::x@ + IL_0030: stloc.s V_4 + IL_0032: ldloc.1 + IL_0033: ldfld int32 TestFunction17/R::x@ + IL_0038: stloc.s V_5 + IL_003a: ldloc.s V_4 + IL_003c: ldloc.s V_5 + IL_003e: bge.s IL_0042 + + IL_0040: br.s IL_0044 + + IL_0042: br.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0032: ldc.i4.m1 + IL_0044: ldc.i4.m1 .line 100001,100001 : 0,0 '' - IL_0033: nop - IL_0034: br.s IL_003d + IL_0045: nop + IL_0046: br.s IL_004f .line 100001,100001 : 0,0 '' - IL_0036: ldloc.s V_4 - IL_0038: ldloc.s V_5 - IL_003a: cgt + IL_0048: ldloc.s V_4 + IL_004a: ldloc.s V_5 + IL_004c: cgt .line 100001,100001 : 0,0 '' - IL_003c: nop + IL_004e: nop .line 100001,100001 : 0,0 '' - IL_003d: stloc.2 - IL_003e: ldloc.2 - IL_003f: ldc.i4.0 - IL_0040: bge.s IL_0044 + IL_004f: stloc.2 + IL_0050: ldloc.2 + IL_0051: ldc.i4.0 + IL_0052: bge.s IL_0056 + + IL_0054: br.s IL_0058 + + IL_0056: br.s IL_005a .line 100001,100001 : 0,0 '' - IL_0042: ldloc.2 - IL_0043: ret + IL_0058: ldloc.2 + IL_0059: ret .line 100001,100001 : 0,0 '' - IL_0044: ldloc.2 - IL_0045: ldc.i4.0 - IL_0046: ble.s IL_004a + IL_005a: ldloc.2 + IL_005b: ldc.i4.0 + IL_005c: ble.s IL_0060 + + IL_005e: br.s IL_0062 + + IL_0060: br.s IL_0064 .line 100001,100001 : 0,0 '' - IL_0048: ldloc.2 - IL_0049: ret + IL_0062: ldloc.2 + IL_0063: ret .line 100001,100001 : 0,0 '' - IL_004a: ldarg.2 - IL_004b: stloc.s V_6 - IL_004d: ldarg.0 - IL_004e: ldfld int32 TestFunction17/R::y@ - IL_0053: stloc.s V_7 - IL_0055: ldloc.1 - IL_0056: ldfld int32 TestFunction17/R::y@ - IL_005b: stloc.s V_8 - IL_005d: ldloc.s V_7 - IL_005f: ldloc.s V_8 - IL_0061: bge.s IL_0065 + IL_0064: ldarg.2 + IL_0065: stloc.s V_6 + IL_0067: ldarg.0 + IL_0068: ldfld int32 TestFunction17/R::y@ + IL_006d: stloc.s V_7 + IL_006f: ldloc.1 + IL_0070: ldfld int32 TestFunction17/R::y@ + IL_0075: stloc.s V_8 + IL_0077: ldloc.s V_7 + IL_0079: ldloc.s V_8 + IL_007b: bge.s IL_007f + + IL_007d: br.s IL_0081 + + IL_007f: br.s IL_0083 .line 100001,100001 : 0,0 '' - IL_0063: ldc.i4.m1 - IL_0064: ret + IL_0081: ldc.i4.m1 + IL_0082: ret .line 100001,100001 : 0,0 '' - IL_0065: ldloc.s V_7 - IL_0067: ldloc.s V_8 - IL_0069: cgt - IL_006b: ret + IL_0083: ldloc.s V_7 + IL_0085: ldloc.s V_8 + IL_0087: cgt + IL_0089: ret .line 100001,100001 : 0,0 '' - IL_006c: ldc.i4.1 - IL_006d: ret + IL_008a: ldc.i4.1 + IL_008b: ret .line 100001,100001 : 0,0 '' - IL_006e: ldarg.1 - IL_006f: unbox.any TestFunction17/R - IL_0074: ldnull - IL_0075: cgt.un - IL_0077: brfalse.s IL_007b + IL_008c: ldarg.1 + IL_008d: unbox.any TestFunction17/R + IL_0092: ldnull + IL_0093: cgt.un + IL_0095: brfalse.s IL_0099 + + IL_0097: br.s IL_009b + + IL_0099: br.s IL_009d .line 100001,100001 : 0,0 '' - IL_0079: ldc.i4.m1 - IL_007a: ret + IL_009b: ldc.i4.m1 + IL_009c: ret .line 100001,100001 : 0,0 '' - IL_007b: ldc.i4.0 - IL_007c: ret + IL_009d: ldc.i4.0 + IL_009e: ret } // end of method R::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 58 (0x3a) + // Code size 62 (0x3e) .maxstack 7 .locals init ([0] int32 V_0, [1] class [mscorlib]System.Collections.IEqualityComparer V_1, @@ -375,47 +431,51 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0038 - - .line 100001,100001 : 0,0 '' - IL_0006: ldc.i4.0 - IL_0007: stloc.0 - IL_0008: ldc.i4 0x9e3779b9 - IL_000d: ldarg.1 - IL_000e: stloc.1 - IL_000f: ldarg.0 - IL_0010: ldfld int32 TestFunction17/R::y@ - IL_0015: ldloc.0 - IL_0016: ldc.i4.6 - IL_0017: shl - IL_0018: ldloc.0 - IL_0019: ldc.i4.2 - IL_001a: shr - IL_001b: add - IL_001c: add - IL_001d: add - IL_001e: stloc.0 - IL_001f: ldc.i4 0x9e3779b9 - IL_0024: ldarg.1 - IL_0025: stloc.2 - IL_0026: ldarg.0 - IL_0027: ldfld int32 TestFunction17/R::x@ - IL_002c: ldloc.0 - IL_002d: ldc.i4.6 - IL_002e: shl - IL_002f: ldloc.0 - IL_0030: ldc.i4.2 - IL_0031: shr - IL_0032: add - IL_0033: add - IL_0034: add - IL_0035: stloc.0 - IL_0036: ldloc.0 - IL_0037: ret - - .line 100001,100001 : 0,0 '' - IL_0038: ldc.i4.0 - IL_0039: ret + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_003c + + .line 100001,100001 : 0,0 '' + IL_000a: ldc.i4.0 + IL_000b: stloc.0 + IL_000c: ldc.i4 0x9e3779b9 + IL_0011: ldarg.1 + IL_0012: stloc.1 + IL_0013: ldarg.0 + IL_0014: ldfld int32 TestFunction17/R::y@ + IL_0019: ldloc.0 + IL_001a: ldc.i4.6 + IL_001b: shl + IL_001c: ldloc.0 + IL_001d: ldc.i4.2 + IL_001e: shr + IL_001f: add + IL_0020: add + IL_0021: add + IL_0022: stloc.0 + IL_0023: ldc.i4 0x9e3779b9 + IL_0028: ldarg.1 + IL_0029: stloc.2 + IL_002a: ldarg.0 + IL_002b: ldfld int32 TestFunction17/R::x@ + IL_0030: ldloc.0 + IL_0031: ldc.i4.6 + IL_0032: shl + IL_0033: ldloc.0 + IL_0034: ldc.i4.2 + IL_0035: shr + IL_0036: add + IL_0037: add + IL_0038: add + IL_0039: stloc.0 + IL_003a: ldloc.0 + IL_003b: ret + + .line 100001,100001 : 0,0 '' + IL_003c: ldc.i4.0 + IL_003d: ret } // end of method R::GetHashCode .method public hidebysig virtual final @@ -436,7 +496,7 @@ class [mscorlib]System.Collections.IEqualityComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 65 (0x41) + // Code size 77 (0x4d) .maxstack 4 .locals init ([0] class TestFunction17/R V_0, [1] class TestFunction17/R V_1, @@ -446,109 +506,133 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0039 + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_0045 .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: isinst TestFunction17/R - IL_000c: stloc.0 - IL_000d: ldloc.0 - IL_000e: brfalse.s IL_0037 + IL_000a: ldarg.1 + IL_000b: isinst TestFunction17/R + IL_0010: stloc.0 + IL_0011: ldloc.0 + IL_0012: brfalse.s IL_0016 + + IL_0014: br.s IL_0018 + + IL_0016: br.s IL_0043 .line 100001,100001 : 0,0 '' - IL_0010: ldloc.0 - IL_0011: stloc.1 - IL_0012: ldarg.2 - IL_0013: stloc.2 - IL_0014: ldarg.0 - IL_0015: ldfld int32 TestFunction17/R::x@ - IL_001a: ldloc.1 - IL_001b: ldfld int32 TestFunction17/R::x@ - IL_0020: ceq - IL_0022: brfalse.s IL_0035 + IL_0018: ldloc.0 + IL_0019: stloc.1 + IL_001a: ldarg.2 + IL_001b: stloc.2 + IL_001c: ldarg.0 + IL_001d: ldfld int32 TestFunction17/R::x@ + IL_0022: ldloc.1 + IL_0023: ldfld int32 TestFunction17/R::x@ + IL_0028: ceq + IL_002a: brfalse.s IL_002e + + IL_002c: br.s IL_0030 + + IL_002e: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0024: ldarg.2 - IL_0025: stloc.3 - IL_0026: ldarg.0 - IL_0027: ldfld int32 TestFunction17/R::y@ - IL_002c: ldloc.1 - IL_002d: ldfld int32 TestFunction17/R::y@ - IL_0032: ceq - IL_0034: ret + IL_0030: ldarg.2 + IL_0031: stloc.3 + IL_0032: ldarg.0 + IL_0033: ldfld int32 TestFunction17/R::y@ + IL_0038: ldloc.1 + IL_0039: ldfld int32 TestFunction17/R::y@ + IL_003e: ceq + IL_0040: ret .line 100001,100001 : 0,0 '' - IL_0035: ldc.i4.0 - IL_0036: ret + IL_0041: ldc.i4.0 + IL_0042: ret .line 100001,100001 : 0,0 '' - IL_0037: ldc.i4.0 - IL_0038: ret + IL_0043: ldc.i4.0 + IL_0044: ret .line 100001,100001 : 0,0 '' - IL_0039: ldarg.1 - IL_003a: ldnull - IL_003b: cgt.un - IL_003d: ldc.i4.0 - IL_003e: ceq - IL_0040: ret + IL_0045: ldarg.1 + IL_0046: ldnull + IL_0047: cgt.un + IL_0049: ldc.i4.0 + IL_004a: ceq + IL_004c: ret } // end of method R::Equals .method public hidebysig virtual final instance bool Equals(class TestFunction17/R obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 53 (0x35) - .maxstack 8 + // Code size 65 (0x41) + .maxstack 4 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_002d + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_0039 .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: ldnull - IL_0008: cgt.un - IL_000a: brfalse.s IL_002b + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: brfalse.s IL_0012 + + IL_0010: br.s IL_0014 + + IL_0012: br.s IL_0037 .line 100001,100001 : 0,0 '' - IL_000c: ldarg.0 - IL_000d: ldfld int32 TestFunction17/R::x@ - IL_0012: ldarg.1 - IL_0013: ldfld int32 TestFunction17/R::x@ - IL_0018: bne.un.s IL_0029 + IL_0014: ldarg.0 + IL_0015: ldfld int32 TestFunction17/R::x@ + IL_001a: ldarg.1 + IL_001b: ldfld int32 TestFunction17/R::x@ + IL_0020: bne.un.s IL_0024 + + IL_0022: br.s IL_0026 + + IL_0024: br.s IL_0035 .line 100001,100001 : 0,0 '' - IL_001a: ldarg.0 - IL_001b: ldfld int32 TestFunction17/R::y@ - IL_0020: ldarg.1 - IL_0021: ldfld int32 TestFunction17/R::y@ - IL_0026: ceq - IL_0028: ret + IL_0026: ldarg.0 + IL_0027: ldfld int32 TestFunction17/R::y@ + IL_002c: ldarg.1 + IL_002d: ldfld int32 TestFunction17/R::y@ + IL_0032: ceq + IL_0034: ret .line 100001,100001 : 0,0 '' - IL_0029: ldc.i4.0 - IL_002a: ret + IL_0035: ldc.i4.0 + IL_0036: ret .line 100001,100001 : 0,0 '' - IL_002b: ldc.i4.0 - IL_002c: ret + IL_0037: ldc.i4.0 + IL_0038: ret .line 100001,100001 : 0,0 '' - IL_002d: ldarg.1 - IL_002e: ldnull - IL_002f: cgt.un - IL_0031: ldc.i4.0 - IL_0032: ceq - IL_0034: ret + IL_0039: ldarg.1 + IL_003a: ldnull + IL_003b: cgt.un + IL_003d: ldc.i4.0 + IL_003e: ceq + IL_0040: ret } // end of method R::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 20 (0x14) + // Code size 24 (0x18) .maxstack 4 .locals init ([0] class TestFunction17/R V_0) .line 4,4 : 6,7 '' @@ -556,17 +640,21 @@ IL_0001: isinst TestFunction17/R IL_0006: stloc.0 IL_0007: ldloc.0 - IL_0008: brfalse.s IL_0012 + IL_0008: brfalse.s IL_000c + + IL_000a: br.s IL_000e + + IL_000c: br.s IL_0016 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.0 - IL_000b: ldloc.0 - IL_000c: callvirt instance bool TestFunction17/R::Equals(class TestFunction17/R) - IL_0011: ret + IL_000e: ldarg.0 + IL_000f: ldloc.0 + IL_0010: callvirt instance bool TestFunction17/R::Equals(class TestFunction17/R) + IL_0015: ret .line 100001,100001 : 0,0 '' - IL_0012: ldc.i4.0 - IL_0013: ret + IL_0016: ldc.i4.0 + IL_0017: ret } // end of method R::Equals .property instance int32 x() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction19.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction19.il.bsl index a6b8e845ea4..f5468bf0fd6 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction19.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction19.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction19 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction19 { - // Offset: 0x00000000 Length: 0x0000034E + // Offset: 0x00000000 Length: 0x00000352 } .mresource public FSharpOptimizationData.TestFunction19 { // Offset: 0x00000358 Length: 0x00000100 } .module TestFunction19.exe -// MVID: {60B68B97-A624-46AE-A745-0383978BB660} +// MVID: {59B19208-A624-46AE-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00E60000 +// Image base: 0x016D0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -64,7 +64,7 @@ // Code size 23 (0x17) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction19.fs' + .line 100001,100001 : 0,0 '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 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction20.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction20.il.bsl index 4126263a239..5b65668cd8c 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction20.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction20.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction20 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction20 { - // Offset: 0x00000000 Length: 0x0000038F + // Offset: 0x00000000 Length: 0x00000393 } .mresource public FSharpOptimizationData.TestFunction20 { // Offset: 0x00000398 Length: 0x00000100 } .module TestFunction20.exe -// MVID: {60B68B97-A643-44FB-A745-0383978BB660} +// MVID: {59B19208-A643-44FB-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06B80000 +// Image base: 0x01320000 // =============== 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 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction20.fs' + .line 100001,100001 : 0,0 '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 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction21.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction21.il.bsl index 752ef0b375b..30b59304c56 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction21.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction21.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction21 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction21 { - // Offset: 0x00000000 Length: 0x00000675 + // Offset: 0x00000000 Length: 0x00000685 } .mresource public FSharpOptimizationData.TestFunction21 { - // Offset: 0x00000680 Length: 0x000001CD + // Offset: 0x00000690 Length: 0x000001CD } .module TestFunction21.exe -// MVID: {60B68B97-A643-45E6-A745-0383978BB660} +// MVID: {59B19208-A643-45E6-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05500000 +// Image base: 0x00F80000 // =============== CLASS MEMBERS DECLARATION =================== @@ -174,7 +174,7 @@ instance int32 CompareTo(class TestFunction21/U obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 120 (0x78) + // Code size 154 (0x9a) .maxstack 4 .locals init ([0] class TestFunction21/U V_0, [1] class TestFunction21/U V_1, @@ -186,109 +186,137 @@ [7] int32 V_7, [8] int32 V_8) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction21.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction21.fs' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_006e + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000d + + IL_0008: br IL_008c .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: ldnull - IL_0008: cgt.un - IL_000a: brfalse.s IL_006c + IL_000d: ldarg.1 + IL_000e: ldnull + IL_000f: cgt.un + IL_0011: brfalse.s IL_0015 + + IL_0013: br.s IL_001a + + IL_0015: br IL_008a .line 100001,100001 : 0,0 '' - IL_000c: ldarg.0 - IL_000d: pop + IL_001a: ldarg.0 + IL_001b: pop .line 100001,100001 : 0,0 '' - IL_000e: ldarg.0 - IL_000f: stloc.0 - IL_0010: ldarg.1 - IL_0011: stloc.1 - IL_0012: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0017: stloc.3 - IL_0018: ldloc.0 - IL_0019: ldfld int32 TestFunction21/U::item1 - IL_001e: stloc.s V_4 - IL_0020: ldloc.1 - IL_0021: ldfld int32 TestFunction21/U::item1 - IL_0026: stloc.s V_5 - IL_0028: ldloc.s V_4 - IL_002a: ldloc.s V_5 - IL_002c: bge.s IL_0032 + IL_001c: ldarg.0 + IL_001d: stloc.0 + IL_001e: ldarg.1 + IL_001f: stloc.1 + IL_0020: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0025: stloc.3 + IL_0026: ldloc.0 + IL_0027: ldfld int32 TestFunction21/U::item1 + IL_002c: stloc.s V_4 + IL_002e: ldloc.1 + IL_002f: ldfld int32 TestFunction21/U::item1 + IL_0034: stloc.s V_5 + IL_0036: ldloc.s V_4 + IL_0038: ldloc.s V_5 + IL_003a: bge.s IL_003e + + IL_003c: br.s IL_0040 + + IL_003e: br.s IL_0044 .line 100001,100001 : 0,0 '' - IL_002e: ldc.i4.m1 + IL_0040: ldc.i4.m1 .line 100001,100001 : 0,0 '' - IL_002f: nop - IL_0030: br.s IL_0039 + IL_0041: nop + IL_0042: br.s IL_004b .line 100001,100001 : 0,0 '' - IL_0032: ldloc.s V_4 - IL_0034: ldloc.s V_5 - IL_0036: cgt + IL_0044: ldloc.s V_4 + IL_0046: ldloc.s V_5 + IL_0048: cgt .line 100001,100001 : 0,0 '' - IL_0038: nop + IL_004a: nop .line 100001,100001 : 0,0 '' - IL_0039: stloc.2 - IL_003a: ldloc.2 - IL_003b: ldc.i4.0 - IL_003c: bge.s IL_0040 + IL_004b: stloc.2 + IL_004c: ldloc.2 + IL_004d: ldc.i4.0 + IL_004e: bge.s IL_0052 + + IL_0050: br.s IL_0054 + + IL_0052: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_003e: ldloc.2 - IL_003f: ret + IL_0054: ldloc.2 + IL_0055: ret .line 100001,100001 : 0,0 '' - IL_0040: ldloc.2 - IL_0041: ldc.i4.0 - IL_0042: ble.s IL_0046 + IL_0056: ldloc.2 + IL_0057: ldc.i4.0 + IL_0058: ble.s IL_005c + + IL_005a: br.s IL_005e + + IL_005c: br.s IL_0060 .line 100001,100001 : 0,0 '' - IL_0044: ldloc.2 - IL_0045: ret + IL_005e: ldloc.2 + IL_005f: ret .line 100001,100001 : 0,0 '' - IL_0046: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_004b: stloc.s V_6 - IL_004d: ldloc.0 - IL_004e: ldfld int32 TestFunction21/U::item2 - IL_0053: stloc.s V_7 - IL_0055: ldloc.1 - IL_0056: ldfld int32 TestFunction21/U::item2 - IL_005b: stloc.s V_8 - IL_005d: ldloc.s V_7 - IL_005f: ldloc.s V_8 - IL_0061: bge.s IL_0065 + IL_0060: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0065: stloc.s V_6 + IL_0067: ldloc.0 + IL_0068: ldfld int32 TestFunction21/U::item2 + IL_006d: stloc.s V_7 + IL_006f: ldloc.1 + IL_0070: ldfld int32 TestFunction21/U::item2 + IL_0075: stloc.s V_8 + IL_0077: ldloc.s V_7 + IL_0079: ldloc.s V_8 + IL_007b: bge.s IL_007f + + IL_007d: br.s IL_0081 + + IL_007f: br.s IL_0083 .line 100001,100001 : 0,0 '' - IL_0063: ldc.i4.m1 - IL_0064: ret + IL_0081: ldc.i4.m1 + IL_0082: ret .line 100001,100001 : 0,0 '' - IL_0065: ldloc.s V_7 - IL_0067: ldloc.s V_8 - IL_0069: cgt - IL_006b: ret + IL_0083: ldloc.s V_7 + IL_0085: ldloc.s V_8 + IL_0087: cgt + IL_0089: ret .line 100001,100001 : 0,0 '' - IL_006c: ldc.i4.1 - IL_006d: ret + IL_008a: ldc.i4.1 + IL_008b: ret .line 100001,100001 : 0,0 '' - IL_006e: ldarg.1 - IL_006f: ldnull - IL_0070: cgt.un - IL_0072: brfalse.s IL_0076 + IL_008c: ldarg.1 + IL_008d: ldnull + IL_008e: cgt.un + IL_0090: brfalse.s IL_0094 + + IL_0092: br.s IL_0096 + + IL_0094: br.s IL_0098 .line 100001,100001 : 0,0 '' - IL_0074: ldc.i4.m1 - IL_0075: ret + IL_0096: ldc.i4.m1 + IL_0097: ret .line 100001,100001 : 0,0 '' - IL_0076: ldc.i4.0 - IL_0077: ret + IL_0098: ldc.i4.0 + IL_0099: ret } // end of method U::CompareTo .method public hidebysig virtual final @@ -310,7 +338,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 130 (0x82) + // Code size 164 (0xa4) .maxstack 4 .locals init ([0] class TestFunction21/U V_0, [1] class TestFunction21/U V_1, @@ -329,114 +357,142 @@ IL_0007: ldarg.0 IL_0008: ldnull IL_0009: cgt.un - IL_000b: brfalse.s IL_0073 + IL_000b: brfalse.s IL_000f + + IL_000d: br.s IL_0014 + + IL_000f: br IL_0091 .line 100001,100001 : 0,0 '' - IL_000d: ldarg.1 - IL_000e: unbox.any TestFunction21/U - IL_0013: ldnull - IL_0014: cgt.un - IL_0016: brfalse.s IL_0071 + IL_0014: ldarg.1 + IL_0015: unbox.any TestFunction21/U + IL_001a: ldnull + IL_001b: cgt.un + IL_001d: brfalse.s IL_0021 + + IL_001f: br.s IL_0026 + + IL_0021: br IL_008f .line 100001,100001 : 0,0 '' - IL_0018: ldarg.0 - IL_0019: pop + IL_0026: ldarg.0 + IL_0027: pop .line 100001,100001 : 0,0 '' - IL_001a: ldarg.0 - IL_001b: stloc.1 - IL_001c: ldloc.0 - IL_001d: stloc.2 - IL_001e: ldarg.2 - IL_001f: stloc.s V_4 - IL_0021: ldloc.1 - IL_0022: ldfld int32 TestFunction21/U::item1 - IL_0027: stloc.s V_5 - IL_0029: ldloc.2 - IL_002a: ldfld int32 TestFunction21/U::item1 - IL_002f: stloc.s V_6 - IL_0031: ldloc.s V_5 - IL_0033: ldloc.s V_6 - IL_0035: bge.s IL_003b + IL_0028: ldarg.0 + IL_0029: stloc.1 + IL_002a: ldloc.0 + IL_002b: stloc.2 + IL_002c: ldarg.2 + 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.2 + IL_0038: ldfld int32 TestFunction21/U::item1 + IL_003d: stloc.s V_6 + IL_003f: ldloc.s V_5 + IL_0041: ldloc.s V_6 + IL_0043: bge.s IL_0047 + + IL_0045: br.s IL_0049 + + IL_0047: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_0037: ldc.i4.m1 + IL_0049: ldc.i4.m1 .line 100001,100001 : 0,0 '' - IL_0038: nop - IL_0039: br.s IL_0042 + IL_004a: nop + IL_004b: br.s IL_0054 .line 100001,100001 : 0,0 '' - IL_003b: ldloc.s V_5 - IL_003d: ldloc.s V_6 - IL_003f: cgt + IL_004d: ldloc.s V_5 + IL_004f: ldloc.s V_6 + IL_0051: cgt .line 100001,100001 : 0,0 '' - IL_0041: nop + IL_0053: nop .line 100001,100001 : 0,0 '' - IL_0042: stloc.3 - IL_0043: ldloc.3 - IL_0044: ldc.i4.0 - IL_0045: bge.s IL_0049 + IL_0054: stloc.3 + IL_0055: ldloc.3 + IL_0056: ldc.i4.0 + IL_0057: bge.s IL_005b + + IL_0059: br.s IL_005d + + IL_005b: br.s IL_005f .line 100001,100001 : 0,0 '' - IL_0047: ldloc.3 - IL_0048: ret + IL_005d: ldloc.3 + IL_005e: ret .line 100001,100001 : 0,0 '' - IL_0049: ldloc.3 - IL_004a: ldc.i4.0 - IL_004b: ble.s IL_004f + IL_005f: ldloc.3 + IL_0060: ldc.i4.0 + IL_0061: ble.s IL_0065 + + IL_0063: br.s IL_0067 + + IL_0065: br.s IL_0069 .line 100001,100001 : 0,0 '' - IL_004d: ldloc.3 - IL_004e: ret + IL_0067: ldloc.3 + IL_0068: ret .line 100001,100001 : 0,0 '' - IL_004f: ldarg.2 - IL_0050: stloc.s V_7 - IL_0052: ldloc.1 - IL_0053: ldfld int32 TestFunction21/U::item2 - IL_0058: stloc.s V_8 - IL_005a: ldloc.2 - IL_005b: ldfld int32 TestFunction21/U::item2 - IL_0060: stloc.s V_9 - IL_0062: ldloc.s V_8 - IL_0064: ldloc.s V_9 - IL_0066: bge.s IL_006a + IL_0069: ldarg.2 + IL_006a: stloc.s V_7 + IL_006c: ldloc.1 + IL_006d: ldfld int32 TestFunction21/U::item2 + IL_0072: stloc.s V_8 + IL_0074: ldloc.2 + IL_0075: ldfld int32 TestFunction21/U::item2 + IL_007a: stloc.s V_9 + IL_007c: ldloc.s V_8 + IL_007e: ldloc.s V_9 + IL_0080: bge.s IL_0084 + + IL_0082: br.s IL_0086 + + IL_0084: br.s IL_0088 .line 100001,100001 : 0,0 '' - IL_0068: ldc.i4.m1 - IL_0069: ret + IL_0086: ldc.i4.m1 + IL_0087: ret .line 100001,100001 : 0,0 '' - IL_006a: ldloc.s V_8 - IL_006c: ldloc.s V_9 - IL_006e: cgt - IL_0070: ret + IL_0088: ldloc.s V_8 + IL_008a: ldloc.s V_9 + IL_008c: cgt + IL_008e: ret .line 100001,100001 : 0,0 '' - IL_0071: ldc.i4.1 - IL_0072: ret + IL_008f: ldc.i4.1 + IL_0090: ret .line 100001,100001 : 0,0 '' - IL_0073: ldarg.1 - IL_0074: unbox.any TestFunction21/U - IL_0079: ldnull - IL_007a: cgt.un - IL_007c: brfalse.s IL_0080 + IL_0091: ldarg.1 + IL_0092: unbox.any TestFunction21/U + IL_0097: ldnull + IL_0098: cgt.un + IL_009a: brfalse.s IL_009e + + IL_009c: br.s IL_00a0 + + IL_009e: br.s IL_00a2 .line 100001,100001 : 0,0 '' - IL_007e: ldc.i4.m1 - IL_007f: ret + IL_00a0: ldc.i4.m1 + IL_00a1: ret .line 100001,100001 : 0,0 '' - IL_0080: ldc.i4.0 - IL_0081: ret + IL_00a2: ldc.i4.0 + IL_00a3: 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 64 (0x40) + // Code size 68 (0x44) .maxstack 7 .locals init ([0] int32 V_0, [1] class TestFunction21/U V_1, @@ -446,54 +502,58 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_003e - - .line 100001,100001 : 0,0 '' - IL_0006: ldc.i4.0 - IL_0007: stloc.0 - IL_0008: ldarg.0 - IL_0009: pop - .line 100001,100001 : 0,0 '' - IL_000a: ldarg.0 - IL_000b: stloc.1 - IL_000c: ldc.i4.0 - IL_000d: stloc.0 - IL_000e: ldc.i4 0x9e3779b9 - IL_0013: ldarg.1 - IL_0014: stloc.2 - IL_0015: ldloc.1 - IL_0016: ldfld int32 TestFunction21/U::item2 - IL_001b: ldloc.0 - IL_001c: ldc.i4.6 - IL_001d: shl - IL_001e: ldloc.0 - IL_001f: ldc.i4.2 - IL_0020: shr - IL_0021: add - IL_0022: add - IL_0023: add - IL_0024: stloc.0 - IL_0025: ldc.i4 0x9e3779b9 - IL_002a: ldarg.1 - IL_002b: stloc.3 - IL_002c: ldloc.1 - IL_002d: ldfld int32 TestFunction21/U::item1 - IL_0032: ldloc.0 - IL_0033: ldc.i4.6 - IL_0034: shl - IL_0035: ldloc.0 - IL_0036: ldc.i4.2 - IL_0037: shr - IL_0038: add - IL_0039: add - IL_003a: add - IL_003b: stloc.0 - IL_003c: ldloc.0 - IL_003d: ret - - .line 100001,100001 : 0,0 '' - IL_003e: ldc.i4.0 - IL_003f: ret + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_0042 + + .line 100001,100001 : 0,0 '' + IL_000a: ldc.i4.0 + IL_000b: stloc.0 + IL_000c: ldarg.0 + IL_000d: pop + .line 100001,100001 : 0,0 '' + IL_000e: ldarg.0 + IL_000f: stloc.1 + IL_0010: ldc.i4.0 + IL_0011: stloc.0 + IL_0012: ldc.i4 0x9e3779b9 + IL_0017: ldarg.1 + IL_0018: stloc.2 + IL_0019: ldloc.1 + IL_001a: ldfld int32 TestFunction21/U::item2 + IL_001f: ldloc.0 + IL_0020: ldc.i4.6 + IL_0021: shl + IL_0022: ldloc.0 + IL_0023: ldc.i4.2 + IL_0024: shr + IL_0025: add + IL_0026: add + IL_0027: add + IL_0028: stloc.0 + IL_0029: ldc.i4 0x9e3779b9 + IL_002e: ldarg.1 + IL_002f: stloc.3 + IL_0030: ldloc.1 + IL_0031: ldfld int32 TestFunction21/U::item1 + IL_0036: ldloc.0 + IL_0037: ldc.i4.6 + IL_0038: shl + IL_0039: ldloc.0 + IL_003a: ldc.i4.2 + IL_003b: shr + IL_003c: add + IL_003d: add + IL_003e: add + IL_003f: stloc.0 + IL_0040: ldloc.0 + IL_0041: ret + + .line 100001,100001 : 0,0 '' + IL_0042: ldc.i4.0 + IL_0043: ret } // end of method U::GetHashCode .method public hidebysig virtual final @@ -514,7 +574,7 @@ class [mscorlib]System.Collections.IEqualityComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 73 (0x49) + // Code size 85 (0x55) .maxstack 4 .locals init ([0] class TestFunction21/U V_0, [1] class TestFunction21/U V_1, @@ -526,66 +586,78 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0041 + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_004d .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: isinst TestFunction21/U - IL_000c: stloc.0 - IL_000d: ldloc.0 - IL_000e: brfalse.s IL_003f + IL_000a: ldarg.1 + IL_000b: isinst TestFunction21/U + IL_0010: stloc.0 + IL_0011: ldloc.0 + IL_0012: brfalse.s IL_0016 + + IL_0014: br.s IL_0018 + + IL_0016: br.s IL_004b .line 100001,100001 : 0,0 '' - IL_0010: ldloc.0 - IL_0011: stloc.1 - IL_0012: ldarg.0 - IL_0013: pop + IL_0018: ldloc.0 + IL_0019: stloc.1 + IL_001a: ldarg.0 + IL_001b: pop .line 100001,100001 : 0,0 '' - IL_0014: ldarg.0 - IL_0015: stloc.2 - IL_0016: ldloc.1 - IL_0017: stloc.3 - IL_0018: ldarg.2 - IL_0019: stloc.s V_4 - IL_001b: ldloc.2 - IL_001c: ldfld int32 TestFunction21/U::item1 - IL_0021: ldloc.3 - IL_0022: ldfld int32 TestFunction21/U::item1 - IL_0027: ceq - IL_0029: brfalse.s IL_003d - - .line 100001,100001 : 0,0 '' - IL_002b: ldarg.2 - IL_002c: stloc.s V_5 - IL_002e: ldloc.2 - IL_002f: ldfld int32 TestFunction21/U::item2 - IL_0034: ldloc.3 - IL_0035: ldfld int32 TestFunction21/U::item2 - IL_003a: ceq - IL_003c: ret + IL_001c: ldarg.0 + IL_001d: stloc.2 + IL_001e: ldloc.1 + IL_001f: stloc.3 + IL_0020: ldarg.2 + IL_0021: stloc.s V_4 + IL_0023: ldloc.2 + IL_0024: ldfld int32 TestFunction21/U::item1 + IL_0029: ldloc.3 + IL_002a: ldfld int32 TestFunction21/U::item1 + IL_002f: ceq + IL_0031: brfalse.s IL_0035 - .line 100001,100001 : 0,0 '' - IL_003d: ldc.i4.0 - IL_003e: ret + IL_0033: br.s IL_0037 - .line 100001,100001 : 0,0 '' - IL_003f: ldc.i4.0 - IL_0040: ret + IL_0035: br.s IL_0049 .line 100001,100001 : 0,0 '' - IL_0041: ldarg.1 - IL_0042: ldnull - IL_0043: cgt.un - IL_0045: ldc.i4.0 + IL_0037: ldarg.2 + IL_0038: stloc.s V_5 + IL_003a: ldloc.2 + IL_003b: ldfld int32 TestFunction21/U::item2 + IL_0040: ldloc.3 + IL_0041: ldfld int32 TestFunction21/U::item2 IL_0046: ceq IL_0048: ret + + .line 100001,100001 : 0,0 '' + IL_0049: ldc.i4.0 + IL_004a: ret + + .line 100001,100001 : 0,0 '' + IL_004b: ldc.i4.0 + IL_004c: ret + + .line 100001,100001 : 0,0 '' + IL_004d: ldarg.1 + IL_004e: ldnull + IL_004f: cgt.un + IL_0051: ldc.i4.0 + IL_0052: ceq + IL_0054: 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 59 (0x3b) + // Code size 71 (0x47) .maxstack 4 .locals init ([0] class TestFunction21/U V_0, [1] class TestFunction21/U V_1) @@ -593,58 +665,70 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0033 + IL_0004: brfalse.s IL_0008 - .line 100001,100001 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: ldnull - IL_0008: cgt.un - IL_000a: brfalse.s IL_0031 + IL_0006: br.s IL_000a + + IL_0008: br.s IL_003f .line 100001,100001 : 0,0 '' - IL_000c: ldarg.0 - IL_000d: pop + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: brfalse.s IL_0012 + + IL_0010: br.s IL_0014 + + IL_0012: br.s IL_003d + .line 100001,100001 : 0,0 '' - IL_000e: ldarg.0 - IL_000f: stloc.0 - IL_0010: ldarg.1 - IL_0011: stloc.1 - IL_0012: ldloc.0 - IL_0013: ldfld int32 TestFunction21/U::item1 - IL_0018: ldloc.1 - IL_0019: ldfld int32 TestFunction21/U::item1 - IL_001e: bne.un.s IL_002f + IL_0014: ldarg.0 + IL_0015: pop + .line 100001,100001 : 0,0 '' + IL_0016: ldarg.0 + IL_0017: stloc.0 + IL_0018: ldarg.1 + IL_0019: stloc.1 + IL_001a: ldloc.0 + IL_001b: ldfld int32 TestFunction21/U::item1 + IL_0020: ldloc.1 + IL_0021: ldfld int32 TestFunction21/U::item1 + IL_0026: bne.un.s IL_002a + + IL_0028: br.s IL_002c + + IL_002a: br.s IL_003b .line 100001,100001 : 0,0 '' - IL_0020: ldloc.0 - IL_0021: ldfld int32 TestFunction21/U::item2 - IL_0026: ldloc.1 - IL_0027: ldfld int32 TestFunction21/U::item2 - IL_002c: ceq - IL_002e: ret + IL_002c: ldloc.0 + IL_002d: ldfld int32 TestFunction21/U::item2 + IL_0032: ldloc.1 + IL_0033: ldfld int32 TestFunction21/U::item2 + IL_0038: ceq + IL_003a: ret .line 100001,100001 : 0,0 '' - IL_002f: ldc.i4.0 - IL_0030: ret + IL_003b: ldc.i4.0 + IL_003c: ret .line 100001,100001 : 0,0 '' - IL_0031: ldc.i4.0 - IL_0032: ret + IL_003d: ldc.i4.0 + IL_003e: ret .line 100001,100001 : 0,0 '' - IL_0033: ldarg.1 - IL_0034: ldnull - IL_0035: cgt.un - IL_0037: ldc.i4.0 - IL_0038: ceq - IL_003a: ret + IL_003f: ldarg.1 + IL_0040: ldnull + IL_0041: cgt.un + IL_0043: ldc.i4.0 + IL_0044: ceq + IL_0046: 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 20 (0x14) + // Code size 24 (0x18) .maxstack 4 .locals init ([0] class TestFunction21/U V_0) .line 4,4 : 6,7 '' @@ -652,17 +736,21 @@ IL_0001: isinst TestFunction21/U IL_0006: stloc.0 IL_0007: ldloc.0 - IL_0008: brfalse.s IL_0012 + IL_0008: brfalse.s IL_000c + + IL_000a: br.s IL_000e + + IL_000c: br.s IL_0016 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.0 - IL_000b: ldloc.0 - IL_000c: callvirt instance bool TestFunction21/U::Equals(class TestFunction21/U) - IL_0011: ret + IL_000e: ldarg.0 + IL_000f: ldloc.0 + IL_0010: callvirt instance bool TestFunction21/U::Equals(class TestFunction21/U) + IL_0015: ret .line 100001,100001 : 0,0 '' - IL_0012: ldc.i4.0 - IL_0013: ret + IL_0016: ldc.i4.0 + IL_0017: ret } // end of method U::Equals .property instance int32 Tag() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction23.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction23.il.bsl index 7f88a4908a9..c222b9759e1 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction23.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction23.il.bsl @@ -36,13 +36,13 @@ // Offset: 0x00000340 Length: 0x000000E3 } .module TestFunction23.exe -// MVID: {60B68B97-A643-451C-A745-0383978BB660} +// MVID: {5FCFFD21-A643-451C-A745-038321FDCF5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07240000 +// Image base: 0x07570000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction24.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction24.il.bsl index 1063152863a..bdbd5f41fc7 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction24.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction24.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction24 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction24 { - // Offset: 0x00000000 Length: 0x00000742 + // Offset: 0x00000000 Length: 0x0000075B } .mresource public FSharpOptimizationData.TestFunction24 { - // Offset: 0x00000748 Length: 0x00000228 + // Offset: 0x00000760 Length: 0x00000228 } .module TestFunction24.exe -// MVID: {60B68B97-A643-4587-A745-0383978BB660} +// MVID: {59B19208-A643-4587-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06EA0000 +// Image base: 0x01080000 // =============== CLASS MEMBERS DECLARATION =================== @@ -141,7 +141,7 @@ instance int32 CompareTo(class TestFunction24/Point obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 108 (0x6c) + // Code size 142 (0x8e) .maxstack 4 .locals init ([0] int32 V_0, [1] class [mscorlib]System.Collections.IComparer V_1, @@ -151,102 +151,130 @@ [5] int32 V_5, [6] int32 V_6) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 16707566,16707566 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction24.fs' + .line 16707566,16707566 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction24.fs' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0062 + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000d + + IL_0008: br IL_0080 .line 16707566,16707566 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: ldnull - IL_0008: cgt.un - IL_000a: brfalse.s IL_0060 + IL_000d: ldarg.1 + IL_000e: ldnull + IL_000f: cgt.un + IL_0011: brfalse.s IL_0015 + + IL_0013: br.s IL_001a + + IL_0015: br IL_007e .line 16707566,16707566 : 0,0 '' - IL_000c: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0011: stloc.1 - IL_0012: ldarg.0 - IL_0013: ldfld int32 TestFunction24/Point::x@ - IL_0018: stloc.2 - IL_0019: ldarg.1 - IL_001a: ldfld int32 TestFunction24/Point::x@ - IL_001f: stloc.3 - IL_0020: ldloc.2 - IL_0021: ldloc.3 - IL_0022: bge.s IL_0028 + IL_001a: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_001f: stloc.1 + IL_0020: ldarg.0 + IL_0021: ldfld int32 TestFunction24/Point::x@ + IL_0026: stloc.2 + IL_0027: ldarg.1 + IL_0028: ldfld int32 TestFunction24/Point::x@ + IL_002d: stloc.3 + IL_002e: ldloc.2 + IL_002f: ldloc.3 + IL_0030: bge.s IL_0034 + + IL_0032: br.s IL_0036 + + IL_0034: br.s IL_003a .line 16707566,16707566 : 0,0 '' - IL_0024: ldc.i4.m1 + IL_0036: ldc.i4.m1 .line 16707566,16707566 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_002d + IL_0037: nop + IL_0038: br.s IL_003f .line 16707566,16707566 : 0,0 '' - IL_0028: ldloc.2 - IL_0029: ldloc.3 - IL_002a: cgt + IL_003a: ldloc.2 + IL_003b: ldloc.3 + IL_003c: cgt .line 16707566,16707566 : 0,0 '' - IL_002c: nop + IL_003e: nop .line 16707566,16707566 : 0,0 '' - IL_002d: stloc.0 - IL_002e: ldloc.0 - IL_002f: ldc.i4.0 - IL_0030: bge.s IL_0034 + IL_003f: stloc.0 + IL_0040: ldloc.0 + IL_0041: ldc.i4.0 + IL_0042: bge.s IL_0046 + + IL_0044: br.s IL_0048 + + IL_0046: br.s IL_004a .line 16707566,16707566 : 0,0 '' - IL_0032: ldloc.0 - IL_0033: ret + IL_0048: ldloc.0 + IL_0049: ret .line 16707566,16707566 : 0,0 '' - IL_0034: ldloc.0 - IL_0035: ldc.i4.0 - IL_0036: ble.s IL_003a + IL_004a: ldloc.0 + IL_004b: ldc.i4.0 + IL_004c: ble.s IL_0050 + + IL_004e: br.s IL_0052 + + IL_0050: br.s IL_0054 .line 16707566,16707566 : 0,0 '' - IL_0038: ldloc.0 - IL_0039: ret + IL_0052: ldloc.0 + IL_0053: ret .line 16707566,16707566 : 0,0 '' - IL_003a: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_003f: stloc.s V_4 - IL_0041: ldarg.0 - IL_0042: ldfld int32 TestFunction24/Point::y@ - IL_0047: stloc.s V_5 - IL_0049: ldarg.1 - IL_004a: ldfld int32 TestFunction24/Point::y@ - IL_004f: stloc.s V_6 - IL_0051: ldloc.s V_5 - IL_0053: ldloc.s V_6 - IL_0055: bge.s IL_0059 + IL_0054: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0059: stloc.s V_4 + IL_005b: ldarg.0 + IL_005c: ldfld int32 TestFunction24/Point::y@ + IL_0061: stloc.s V_5 + IL_0063: ldarg.1 + IL_0064: ldfld int32 TestFunction24/Point::y@ + IL_0069: stloc.s V_6 + IL_006b: ldloc.s V_5 + IL_006d: ldloc.s V_6 + IL_006f: bge.s IL_0073 + + IL_0071: br.s IL_0075 + + IL_0073: br.s IL_0077 .line 16707566,16707566 : 0,0 '' - IL_0057: ldc.i4.m1 - IL_0058: ret + IL_0075: ldc.i4.m1 + IL_0076: ret .line 16707566,16707566 : 0,0 '' - IL_0059: ldloc.s V_5 - IL_005b: ldloc.s V_6 - IL_005d: cgt - IL_005f: ret + IL_0077: ldloc.s V_5 + IL_0079: ldloc.s V_6 + IL_007b: cgt + IL_007d: ret .line 16707566,16707566 : 0,0 '' - IL_0060: ldc.i4.1 - IL_0061: ret + IL_007e: ldc.i4.1 + IL_007f: ret .line 16707566,16707566 : 0,0 '' - IL_0062: ldarg.1 - IL_0063: ldnull - IL_0064: cgt.un - IL_0066: brfalse.s IL_006a + IL_0080: ldarg.1 + IL_0081: ldnull + IL_0082: cgt.un + IL_0084: brfalse.s IL_0088 + + IL_0086: br.s IL_008a + + IL_0088: br.s IL_008c .line 16707566,16707566 : 0,0 '' - IL_0068: ldc.i4.m1 - IL_0069: ret + IL_008a: ldc.i4.m1 + IL_008b: ret .line 16707566,16707566 : 0,0 '' - IL_006a: ldc.i4.0 - IL_006b: ret + IL_008c: ldc.i4.0 + IL_008d: ret } // end of method Point::CompareTo .method public hidebysig virtual final @@ -268,7 +296,7 @@ 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) + // Code size 159 (0x9f) .maxstack 4 .locals init ([0] class TestFunction24/Point V_0, [1] class TestFunction24/Point V_1, @@ -288,107 +316,135 @@ IL_0009: ldarg.0 IL_000a: ldnull IL_000b: cgt.un - IL_000d: brfalse.s IL_006e + IL_000d: brfalse.s IL_0011 + + IL_000f: br.s IL_0016 + + IL_0011: br IL_008c .line 16707566,16707566 : 0,0 '' - IL_000f: ldarg.1 - IL_0010: unbox.any TestFunction24/Point - IL_0015: ldnull - IL_0016: cgt.un - IL_0018: brfalse.s IL_006c + IL_0016: ldarg.1 + IL_0017: unbox.any TestFunction24/Point + IL_001c: ldnull + IL_001d: cgt.un + IL_001f: brfalse.s IL_0023 + + IL_0021: br.s IL_0028 + + IL_0023: br IL_008a .line 16707566,16707566 : 0,0 '' - IL_001a: ldarg.2 - IL_001b: stloc.3 - IL_001c: ldarg.0 - IL_001d: ldfld int32 TestFunction24/Point::x@ - IL_0022: stloc.s V_4 - IL_0024: ldloc.1 - IL_0025: ldfld int32 TestFunction24/Point::x@ - IL_002a: stloc.s V_5 - IL_002c: ldloc.s V_4 - IL_002e: ldloc.s V_5 - IL_0030: bge.s IL_0036 + IL_0028: ldarg.2 + IL_0029: stloc.3 + IL_002a: ldarg.0 + IL_002b: ldfld int32 TestFunction24/Point::x@ + IL_0030: stloc.s V_4 + IL_0032: ldloc.1 + IL_0033: ldfld int32 TestFunction24/Point::x@ + IL_0038: stloc.s V_5 + IL_003a: ldloc.s V_4 + IL_003c: ldloc.s V_5 + IL_003e: bge.s IL_0042 + + IL_0040: br.s IL_0044 + + IL_0042: br.s IL_0048 .line 16707566,16707566 : 0,0 '' - IL_0032: ldc.i4.m1 + IL_0044: ldc.i4.m1 .line 16707566,16707566 : 0,0 '' - IL_0033: nop - IL_0034: br.s IL_003d + IL_0045: nop + IL_0046: br.s IL_004f .line 16707566,16707566 : 0,0 '' - IL_0036: ldloc.s V_4 - IL_0038: ldloc.s V_5 - IL_003a: cgt + IL_0048: ldloc.s V_4 + IL_004a: ldloc.s V_5 + IL_004c: cgt .line 16707566,16707566 : 0,0 '' - IL_003c: nop + IL_004e: nop .line 16707566,16707566 : 0,0 '' - IL_003d: stloc.2 - IL_003e: ldloc.2 - IL_003f: ldc.i4.0 - IL_0040: bge.s IL_0044 + IL_004f: stloc.2 + IL_0050: ldloc.2 + IL_0051: ldc.i4.0 + IL_0052: bge.s IL_0056 + + IL_0054: br.s IL_0058 + + IL_0056: br.s IL_005a .line 16707566,16707566 : 0,0 '' - IL_0042: ldloc.2 - IL_0043: ret + IL_0058: ldloc.2 + IL_0059: ret .line 16707566,16707566 : 0,0 '' - IL_0044: ldloc.2 - IL_0045: ldc.i4.0 - IL_0046: ble.s IL_004a + IL_005a: ldloc.2 + IL_005b: ldc.i4.0 + IL_005c: ble.s IL_0060 + + IL_005e: br.s IL_0062 + + IL_0060: br.s IL_0064 .line 16707566,16707566 : 0,0 '' - IL_0048: ldloc.2 - IL_0049: ret + IL_0062: ldloc.2 + IL_0063: ret .line 16707566,16707566 : 0,0 '' - IL_004a: ldarg.2 - IL_004b: stloc.s V_6 - IL_004d: ldarg.0 - IL_004e: ldfld int32 TestFunction24/Point::y@ - IL_0053: stloc.s V_7 - IL_0055: ldloc.1 - IL_0056: ldfld int32 TestFunction24/Point::y@ - IL_005b: stloc.s V_8 - IL_005d: ldloc.s V_7 - IL_005f: ldloc.s V_8 - IL_0061: bge.s IL_0065 + IL_0064: ldarg.2 + IL_0065: stloc.s V_6 + IL_0067: ldarg.0 + IL_0068: ldfld int32 TestFunction24/Point::y@ + IL_006d: stloc.s V_7 + IL_006f: ldloc.1 + IL_0070: ldfld int32 TestFunction24/Point::y@ + IL_0075: stloc.s V_8 + IL_0077: ldloc.s V_7 + IL_0079: ldloc.s V_8 + IL_007b: bge.s IL_007f + + IL_007d: br.s IL_0081 + + IL_007f: br.s IL_0083 .line 16707566,16707566 : 0,0 '' - IL_0063: ldc.i4.m1 - IL_0064: ret + IL_0081: ldc.i4.m1 + IL_0082: ret .line 16707566,16707566 : 0,0 '' - IL_0065: ldloc.s V_7 - IL_0067: ldloc.s V_8 - IL_0069: cgt - IL_006b: ret + IL_0083: ldloc.s V_7 + IL_0085: ldloc.s V_8 + IL_0087: cgt + IL_0089: ret .line 16707566,16707566 : 0,0 '' - IL_006c: ldc.i4.1 - IL_006d: ret + IL_008a: ldc.i4.1 + IL_008b: ret .line 16707566,16707566 : 0,0 '' - IL_006e: ldarg.1 - IL_006f: unbox.any TestFunction24/Point - IL_0074: ldnull - IL_0075: cgt.un - IL_0077: brfalse.s IL_007b + IL_008c: ldarg.1 + IL_008d: unbox.any TestFunction24/Point + IL_0092: ldnull + IL_0093: cgt.un + IL_0095: brfalse.s IL_0099 + + IL_0097: br.s IL_009b + + IL_0099: br.s IL_009d .line 16707566,16707566 : 0,0 '' - IL_0079: ldc.i4.m1 - IL_007a: ret + IL_009b: ldc.i4.m1 + IL_009c: ret .line 16707566,16707566 : 0,0 '' - IL_007b: ldc.i4.0 - IL_007c: ret + IL_009d: ldc.i4.0 + IL_009e: ret } // end of method Point::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 58 (0x3a) + // Code size 62 (0x3e) .maxstack 7 .locals init ([0] int32 V_0, [1] class [mscorlib]System.Collections.IEqualityComparer V_1, @@ -397,47 +453,51 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0038 + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_003c .line 16707566,16707566 : 0,0 '' - IL_0006: ldc.i4.0 - IL_0007: stloc.0 - IL_0008: ldc.i4 0x9e3779b9 - IL_000d: ldarg.1 - IL_000e: stloc.1 - IL_000f: ldarg.0 - IL_0010: ldfld int32 TestFunction24/Point::y@ - IL_0015: ldloc.0 - IL_0016: ldc.i4.6 - IL_0017: shl - IL_0018: ldloc.0 - IL_0019: ldc.i4.2 - IL_001a: shr - IL_001b: add - IL_001c: add - IL_001d: add - IL_001e: stloc.0 - IL_001f: ldc.i4 0x9e3779b9 - IL_0024: ldarg.1 - IL_0025: stloc.2 - IL_0026: ldarg.0 - IL_0027: ldfld int32 TestFunction24/Point::x@ - IL_002c: ldloc.0 - IL_002d: ldc.i4.6 - IL_002e: shl - IL_002f: ldloc.0 - IL_0030: ldc.i4.2 - IL_0031: shr - IL_0032: add - IL_0033: add - IL_0034: add - IL_0035: stloc.0 - IL_0036: ldloc.0 - IL_0037: ret - - .line 16707566,16707566 : 0,0 '' - IL_0038: ldc.i4.0 - IL_0039: ret + IL_000a: ldc.i4.0 + IL_000b: stloc.0 + IL_000c: ldc.i4 0x9e3779b9 + IL_0011: ldarg.1 + IL_0012: stloc.1 + IL_0013: ldarg.0 + IL_0014: ldfld int32 TestFunction24/Point::y@ + IL_0019: ldloc.0 + IL_001a: ldc.i4.6 + IL_001b: shl + IL_001c: ldloc.0 + IL_001d: ldc.i4.2 + IL_001e: shr + IL_001f: add + IL_0020: add + IL_0021: add + IL_0022: stloc.0 + IL_0023: ldc.i4 0x9e3779b9 + IL_0028: ldarg.1 + IL_0029: stloc.2 + IL_002a: ldarg.0 + IL_002b: ldfld int32 TestFunction24/Point::x@ + IL_0030: ldloc.0 + IL_0031: ldc.i4.6 + IL_0032: shl + IL_0033: ldloc.0 + IL_0034: ldc.i4.2 + IL_0035: shr + IL_0036: add + IL_0037: add + IL_0038: add + IL_0039: stloc.0 + IL_003a: ldloc.0 + IL_003b: ret + + .line 16707566,16707566 : 0,0 '' + IL_003c: ldc.i4.0 + IL_003d: ret } // end of method Point::GetHashCode .method public hidebysig virtual final @@ -458,7 +518,7 @@ class [mscorlib]System.Collections.IEqualityComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 65 (0x41) + // Code size 77 (0x4d) .maxstack 4 .locals init ([0] class TestFunction24/Point V_0, [1] class TestFunction24/Point V_1, @@ -468,109 +528,133 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0039 + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_0045 .line 16707566,16707566 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: isinst TestFunction24/Point - IL_000c: stloc.0 - IL_000d: ldloc.0 - IL_000e: brfalse.s IL_0037 + IL_000a: ldarg.1 + IL_000b: isinst TestFunction24/Point + IL_0010: stloc.0 + IL_0011: ldloc.0 + IL_0012: brfalse.s IL_0016 + + IL_0014: br.s IL_0018 + + IL_0016: br.s IL_0043 .line 16707566,16707566 : 0,0 '' - IL_0010: ldloc.0 - IL_0011: stloc.1 - IL_0012: ldarg.2 - IL_0013: stloc.2 - IL_0014: ldarg.0 - IL_0015: ldfld int32 TestFunction24/Point::x@ - IL_001a: ldloc.1 - IL_001b: ldfld int32 TestFunction24/Point::x@ - IL_0020: ceq - IL_0022: brfalse.s IL_0035 + IL_0018: ldloc.0 + IL_0019: stloc.1 + IL_001a: ldarg.2 + IL_001b: stloc.2 + IL_001c: ldarg.0 + IL_001d: ldfld int32 TestFunction24/Point::x@ + IL_0022: ldloc.1 + IL_0023: ldfld int32 TestFunction24/Point::x@ + IL_0028: ceq + IL_002a: brfalse.s IL_002e + + IL_002c: br.s IL_0030 + + IL_002e: br.s IL_0041 .line 16707566,16707566 : 0,0 '' - IL_0024: ldarg.2 - IL_0025: stloc.3 - IL_0026: ldarg.0 - IL_0027: ldfld int32 TestFunction24/Point::y@ - IL_002c: ldloc.1 - IL_002d: ldfld int32 TestFunction24/Point::y@ - IL_0032: ceq - IL_0034: ret + IL_0030: ldarg.2 + IL_0031: stloc.3 + IL_0032: ldarg.0 + IL_0033: ldfld int32 TestFunction24/Point::y@ + IL_0038: ldloc.1 + IL_0039: ldfld int32 TestFunction24/Point::y@ + IL_003e: ceq + IL_0040: ret .line 16707566,16707566 : 0,0 '' - IL_0035: ldc.i4.0 - IL_0036: ret + IL_0041: ldc.i4.0 + IL_0042: ret .line 16707566,16707566 : 0,0 '' - IL_0037: ldc.i4.0 - IL_0038: ret + IL_0043: ldc.i4.0 + IL_0044: ret .line 16707566,16707566 : 0,0 '' - IL_0039: ldarg.1 - IL_003a: ldnull - IL_003b: cgt.un - IL_003d: ldc.i4.0 - IL_003e: ceq - IL_0040: ret + IL_0045: ldarg.1 + IL_0046: ldnull + IL_0047: cgt.un + IL_0049: ldc.i4.0 + IL_004a: ceq + IL_004c: ret } // end of method Point::Equals .method public hidebysig virtual final instance bool Equals(class TestFunction24/Point obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 53 (0x35) - .maxstack 8 + // Code size 65 (0x41) + .maxstack 4 .line 16707566,16707566 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_002d + IL_0004: brfalse.s IL_0008 + + IL_0006: br.s IL_000a + + IL_0008: br.s IL_0039 .line 16707566,16707566 : 0,0 '' - IL_0006: ldarg.1 - IL_0007: ldnull - IL_0008: cgt.un - IL_000a: brfalse.s IL_002b + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: brfalse.s IL_0012 + + IL_0010: br.s IL_0014 + + IL_0012: br.s IL_0037 .line 16707566,16707566 : 0,0 '' - IL_000c: ldarg.0 - IL_000d: ldfld int32 TestFunction24/Point::x@ - IL_0012: ldarg.1 - IL_0013: ldfld int32 TestFunction24/Point::x@ - IL_0018: bne.un.s IL_0029 + IL_0014: ldarg.0 + IL_0015: ldfld int32 TestFunction24/Point::x@ + IL_001a: ldarg.1 + IL_001b: ldfld int32 TestFunction24/Point::x@ + IL_0020: bne.un.s IL_0024 + + IL_0022: br.s IL_0026 + + IL_0024: br.s IL_0035 .line 16707566,16707566 : 0,0 '' - IL_001a: ldarg.0 - IL_001b: ldfld int32 TestFunction24/Point::y@ - IL_0020: ldarg.1 - IL_0021: ldfld int32 TestFunction24/Point::y@ - IL_0026: ceq - IL_0028: ret + IL_0026: ldarg.0 + IL_0027: ldfld int32 TestFunction24/Point::y@ + IL_002c: ldarg.1 + IL_002d: ldfld int32 TestFunction24/Point::y@ + IL_0032: ceq + IL_0034: ret .line 16707566,16707566 : 0,0 '' - IL_0029: ldc.i4.0 - IL_002a: ret + IL_0035: ldc.i4.0 + IL_0036: ret .line 16707566,16707566 : 0,0 '' - IL_002b: ldc.i4.0 - IL_002c: ret + IL_0037: ldc.i4.0 + IL_0038: ret .line 16707566,16707566 : 0,0 '' - IL_002d: ldarg.1 - IL_002e: ldnull - IL_002f: cgt.un - IL_0031: ldc.i4.0 - IL_0032: ceq - IL_0034: ret + IL_0039: ldarg.1 + IL_003a: ldnull + IL_003b: cgt.un + IL_003d: ldc.i4.0 + IL_003e: ceq + IL_0040: ret } // end of method Point::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 20 (0x14) + // Code size 24 (0x18) .maxstack 4 .locals init ([0] class TestFunction24/Point V_0) .line 4,4 : 6,11 '' @@ -578,17 +662,21 @@ IL_0001: isinst TestFunction24/Point IL_0006: stloc.0 IL_0007: ldloc.0 - IL_0008: brfalse.s IL_0012 + IL_0008: brfalse.s IL_000c + + IL_000a: br.s IL_000e + + IL_000c: br.s IL_0016 .line 16707566,16707566 : 0,0 '' - IL_000a: ldarg.0 - IL_000b: ldloc.0 - IL_000c: callvirt instance bool TestFunction24/Point::Equals(class TestFunction24/Point) - IL_0011: ret + IL_000e: ldarg.0 + IL_000f: ldloc.0 + IL_0010: callvirt instance bool TestFunction24/Point::Equals(class TestFunction24/Point) + IL_0015: ret .line 16707566,16707566 : 0,0 '' - IL_0012: ldc.i4.0 - IL_0013: ret + IL_0016: ldc.i4.0 + IL_0017: ret } // end of method Point::Equals .property instance int32 x() @@ -687,7 +775,7 @@ .method public static float64 pinArray1() cil managed { - // Code size 188 (0xbc) + // Code size 196 (0xc4) .maxstack 6 .locals init ([0] float64[] arr, [1] native int p1, @@ -729,63 +817,71 @@ IL_0067: ldloc.0 IL_0068: stloc.2 IL_0069: ldloc.2 - IL_006a: brfalse.s IL_0086 + IL_006a: brfalse.s IL_006e + + IL_006c: br.s IL_0070 + + IL_006e: br.s IL_008e .line 16707566,16707566 : 0,0 '' - IL_006c: ldloc.2 - IL_006d: call int32 [FSharp.Core]Microsoft.FSharp.Collections.ArrayModule::Length(!!0[]) - IL_0072: brfalse.s IL_0081 + IL_0070: ldloc.2 + IL_0071: call int32 [FSharp.Core]Microsoft.FSharp.Collections.ArrayModule::Length(!!0[]) + IL_0076: brfalse.s IL_007a + + IL_0078: br.s IL_007c + + IL_007a: br.s IL_0089 .line 16707566,16707566 : 0,0 '' - IL_0074: ldloc.2 - IL_0075: ldc.i4.0 - IL_0076: ldelema [mscorlib]System.Double - IL_007b: stloc.3 - IL_007c: ldloc.3 - IL_007d: conv.i + IL_007c: ldloc.2 + IL_007d: ldc.i4.0 + IL_007e: ldelema [mscorlib]System.Double + IL_0083: stloc.3 + IL_0084: ldloc.3 + IL_0085: conv.i .line 16707566,16707566 : 0,0 '' - IL_007e: nop - IL_007f: br.s IL_0089 + IL_0086: nop + IL_0087: br.s IL_0091 .line 16707566,16707566 : 0,0 '' - IL_0081: ldc.i4.0 - IL_0082: conv.i + IL_0089: ldc.i4.0 + IL_008a: conv.i .line 16707566,16707566 : 0,0 '' - IL_0083: nop - IL_0084: br.s IL_0089 + IL_008b: nop + IL_008c: br.s IL_0091 .line 16707566,16707566 : 0,0 '' - IL_0086: ldc.i4.0 - IL_0087: conv.i + IL_008e: ldc.i4.0 + IL_008f: conv.i .line 16707566,16707566 : 0,0 '' - IL_0088: nop + IL_0090: nop .line 16707566,16707566 : 0,0 '' - IL_0089: stloc.1 + IL_0091: stloc.1 .line 19,19 : 5,44 '' - IL_008a: ldloc.1 - IL_008b: stloc.s V_4 - IL_008d: ldc.i4.0 - IL_008e: stloc.s V_5 - IL_0090: ldloc.s V_4 - IL_0092: ldloc.s V_5 - IL_0094: conv.i - IL_0095: sizeof [mscorlib]System.Double - IL_009b: mul - IL_009c: add - IL_009d: ldobj [mscorlib]System.Double - IL_00a2: ldloc.1 - IL_00a3: stloc.s V_6 - IL_00a5: ldc.i4.1 - IL_00a6: stloc.s V_7 - IL_00a8: ldloc.s V_6 - IL_00aa: ldloc.s V_7 - IL_00ac: conv.i - IL_00ad: sizeof [mscorlib]System.Double - IL_00b3: mul - IL_00b4: add - IL_00b5: ldobj [mscorlib]System.Double - IL_00ba: add - IL_00bb: ret + IL_0092: ldloc.1 + IL_0093: stloc.s V_4 + IL_0095: ldc.i4.0 + IL_0096: stloc.s V_5 + IL_0098: ldloc.s V_4 + IL_009a: ldloc.s V_5 + IL_009c: conv.i + IL_009d: sizeof [mscorlib]System.Double + IL_00a3: mul + IL_00a4: add + IL_00a5: ldobj [mscorlib]System.Double + IL_00aa: ldloc.1 + IL_00ab: stloc.s V_6 + IL_00ad: ldc.i4.1 + IL_00ae: stloc.s V_7 + IL_00b0: ldloc.s V_6 + IL_00b2: ldloc.s V_7 + IL_00b4: conv.i + IL_00b5: sizeof [mscorlib]System.Double + IL_00bb: mul + IL_00bc: add + IL_00bd: ldobj [mscorlib]System.Double + IL_00c2: add + IL_00c3: ret } // end of method TestFunction24::pinArray1 .method public static float64 pinArray2() cil managed @@ -865,7 +961,7 @@ .method public static class [mscorlib]System.Tuple`2 pinString() cil managed { - // Code size 77 (0x4d) + // Code size 81 (0x51) .maxstack 6 .locals init ([0] string str, [1] native int pChar, @@ -881,49 +977,53 @@ IL_0006: ldloc.0 IL_0007: stloc.2 IL_0008: ldloc.2 - IL_0009: brfalse.s IL_0016 + IL_0009: brfalse.s IL_000d + + IL_000b: br.s IL_000f + + IL_000d: br.s IL_001a .line 16707566,16707566 : 0,0 '' - IL_000b: ldloc.2 - IL_000c: conv.i - IL_000d: call int32 [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::get_OffsetToStringData() - IL_0012: add + IL_000f: ldloc.2 + IL_0010: conv.i + IL_0011: call int32 [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::get_OffsetToStringData() + IL_0016: add .line 16707566,16707566 : 0,0 '' - IL_0013: nop - IL_0014: br.s IL_0018 + IL_0017: nop + IL_0018: br.s IL_001c .line 16707566,16707566 : 0,0 '' - IL_0016: ldloc.2 + IL_001a: ldloc.2 .line 16707566,16707566 : 0,0 '' - IL_0017: nop + IL_001b: nop .line 16707566,16707566 : 0,0 '' - IL_0018: stloc.1 + IL_001c: stloc.1 .line 31,31 : 5,50 '' - IL_0019: ldloc.1 - IL_001a: stloc.3 - IL_001b: ldc.i4.0 - IL_001c: stloc.s V_4 - IL_001e: ldloc.3 - IL_001f: ldloc.s V_4 - IL_0021: conv.i - IL_0022: sizeof [mscorlib]System.Char - IL_0028: mul - IL_0029: add - IL_002a: ldobj [mscorlib]System.Char - IL_002f: ldloc.1 - IL_0030: stloc.s V_5 - IL_0032: ldc.i4.1 - IL_0033: stloc.s V_6 - IL_0035: ldloc.s V_5 - IL_0037: ldloc.s V_6 - IL_0039: conv.i - IL_003a: sizeof [mscorlib]System.Char - IL_0040: mul - IL_0041: add - IL_0042: ldobj [mscorlib]System.Char - IL_0047: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, + IL_001d: ldloc.1 + IL_001e: stloc.3 + IL_001f: ldc.i4.0 + IL_0020: stloc.s V_4 + IL_0022: ldloc.3 + IL_0023: ldloc.s V_4 + IL_0025: conv.i + IL_0026: sizeof [mscorlib]System.Char + IL_002c: mul + IL_002d: add + IL_002e: ldobj [mscorlib]System.Char + IL_0033: ldloc.1 + IL_0034: stloc.s V_5 + IL_0036: ldc.i4.1 + IL_0037: stloc.s V_6 + IL_0039: ldloc.s V_5 + IL_003b: ldloc.s V_6 + IL_003d: conv.i + IL_003e: sizeof [mscorlib]System.Char + IL_0044: mul + IL_0045: add + IL_0046: ldobj [mscorlib]System.Char + IL_004b: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, !1) - IL_004c: ret + IL_0050: ret } // end of method TestFunction24::pinString } // end of class TestFunction24 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3b.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3b.il.bsl index 80497c1223d..d543e2e48bb 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3b.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3b.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction3b { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction3b { - // Offset: 0x00000000 Length: 0x000001FC + // Offset: 0x00000000 Length: 0x00000200 } .mresource public FSharpOptimizationData.TestFunction3b { - // Offset: 0x00000200 Length: 0x0000008A + // Offset: 0x00000208 Length: 0x0000008A } .module TestFunction3b.exe -// MVID: {60B68B97-A662-4FC9-A745-0383978BB660} +// MVID: {59B19208-A662-4FC9-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x090C0000 +// Image base: 0x00BB0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -56,7 +56,7 @@ // Code size 36 (0x24) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction3b.fs' + .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction3b.fs' IL_0000: ldstr "Hello" IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) @@ -75,7 +75,7 @@ .method public static void TestFunction3b() cil managed { - // Code size 69 (0x45) + // Code size 73 (0x49) .maxstack 3 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_0, [1] int32 x, @@ -104,27 +104,31 @@ IL_001a: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::FailurePattern(class [mscorlib]System.Exception) IL_001f: stloc.s V_4 IL_0021: ldloc.s V_4 - IL_0023: brfalse.s IL_0037 + IL_0023: brfalse.s IL_0027 + + IL_0025: br.s IL_0029 + + IL_0027: br.s IL_003b .line 14,14 : 8,23 '' - IL_0025: ldstr "World" - IL_002a: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_002f: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0034: stloc.0 - IL_0035: leave.s IL_0042 + 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 '' - IL_0037: rethrow - IL_0039: ldnull - IL_003a: unbox.any [FSharp.Core]Microsoft.FSharp.Core.Unit - IL_003f: stloc.0 - IL_0040: leave.s IL_0042 + 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 '' } // end handler - IL_0042: ldloc.0 - IL_0043: pop - IL_0044: ret + IL_0046: ldloc.0 + IL_0047: pop + IL_0048: ret } // end of method TestFunction3b::TestFunction3b } // end of class TestFunction3b diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3c.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3c.il.bsl index aa5d2e75dc1..25c89fbbc87 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3c.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3c.il.bsl @@ -34,20 +34,20 @@ } .mresource public FSharpSignatureData.TestFunction3c { - // Offset: 0x00000000 Length: 0x000001FC + // Offset: 0x00000000 Length: 0x000001FA } .mresource public FSharpOptimizationData.TestFunction3c { // Offset: 0x00000200 Length: 0x0000008A } .module TestFunction3c.exe -// MVID: {60B68B97-A662-4FAC-A745-0383978BB660} +// MVID: {5F1FA088-A662-4FAC-A745-038388A01F5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06B00000 +// Image base: 0x06AD0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -61,7 +61,7 @@ // Code size 36 (0x24) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction3c.fs' + .line 5,5 : 5,20 'C:\\kevinransom\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction3c.fs' IL_0000: ldstr "Hello" IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) @@ -80,7 +80,7 @@ .method public static void TestFunction3c() cil managed { - // Code size 101 (0x65) + // Code size 105 (0x69) .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_0, [1] int32 x, @@ -111,7 +111,7 @@ IL_001a: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::FailurePattern(class [mscorlib]System.Exception) IL_001f: stloc.s V_4 IL_0021: ldloc.s V_4 - IL_0023: brfalse.s IL_0057 + IL_0023: brfalse.s IL_005b IL_0025: ldloc.s V_4 IL_0027: call instance !0 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::get_Value() @@ -120,30 +120,34 @@ IL_0030: ldstr "hello" IL_0035: call bool [netstandard]System.String::Equals(string, string) - IL_003a: brfalse.s IL_0057 + IL_003a: brfalse.s IL_003e - IL_003c: ldloc.s V_4 - IL_003e: call instance !0 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::get_Value() - IL_0043: stloc.s V_6 + IL_003c: br.s IL_0040 + + IL_003e: br.s IL_005b + + IL_0040: ldloc.s V_4 + IL_0042: call instance !0 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::get_Value() + IL_0047: stloc.s V_6 .line 14,14 : 8,23 '' - IL_0045: ldstr "World" - IL_004a: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_004f: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0054: stloc.0 - IL_0055: leave.s IL_0062 + IL_0049: ldstr "World" + IL_004e: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0053: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_0058: stloc.0 + IL_0059: leave.s IL_0066 .line 100001,100001 : 0,0 '' - IL_0057: rethrow - IL_0059: ldnull - IL_005a: unbox.any [FSharp.Core]Microsoft.FSharp.Core.Unit - IL_005f: stloc.0 - IL_0060: leave.s IL_0062 + IL_005b: rethrow + IL_005d: ldnull + IL_005e: unbox.any [FSharp.Core]Microsoft.FSharp.Core.Unit + IL_0063: stloc.0 + IL_0064: leave.s IL_0066 .line 100001,100001 : 0,0 '' } // end handler - IL_0062: ldloc.0 - IL_0063: pop - IL_0064: ret + IL_0066: ldloc.0 + IL_0067: pop + IL_0068: ret } // end of method TestFunction3c::TestFunction3c } // end of class TestFunction3c diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction9b4.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction9b4.il.bsl index 3c3c35b89af..a92010a91c4 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction9b4.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction9b4.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:3:0 } .assembly TestFunction9b4 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction9b4 { - // Offset: 0x00000000 Length: 0x00000240 + // Offset: 0x00000000 Length: 0x0000024C } .mresource public FSharpOptimizationData.TestFunction9b4 { - // Offset: 0x00000248 Length: 0x00000085 + // Offset: 0x00000250 Length: 0x00000085 } .module TestFunction9b4.exe -// MVID: {60B68B97-A091-56C1-A745-0383978BB660} +// MVID: {5B17FC67-A091-56C1-A745-038367FC175B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06CC0000 +// Image base: 0x026C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -58,7 +58,7 @@ .maxstack 3 .locals init ([0] !!a V_0) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 8,8 : 12,16 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9b4.fs' + .line 8,8 : 12,16 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9b4.fs' IL_0000: ldloc.0 IL_0001: ret } // end of method TestFunction9b4::Null diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction11.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction11.il.bsl index 98835e2b7b8..5fc9397c162 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction11.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction11.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction11 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction11 { - // Offset: 0x00000000 Length: 0x000001E4 + // Offset: 0x00000000 Length: 0x000001E8 } .mresource public FSharpOptimizationData.TestFunction11 { - // Offset: 0x000001E8 Length: 0x00000072 + // Offset: 0x000001F0 Length: 0x00000072 } .module TestFunction11.exe -// MVID: {60B68B97-A624-45E6-A745-0383978BB660} +// MVID: {59B19208-A624-45E6-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x064D0000 +// Image base: 0x01080000 // =============== CLASS MEMBERS DECLARATION =================== @@ -57,7 +57,7 @@ // Code size 30 (0x1e) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,27 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction11.fs' + .line 5,5 : 5,27 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction11.fs' IL_0000: ldarg.0 IL_0001: ldarg.0 IL_0002: ldarg.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction12.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction12.il.bsl index 2a841ada06d..2f7b3efff8e 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction12.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction12.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction12 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction12 { - // Offset: 0x00000000 Length: 0x000001D7 + // Offset: 0x00000000 Length: 0x000001DB } .mresource public FSharpOptimizationData.TestFunction12 { // Offset: 0x000001E0 Length: 0x00000072 } .module TestFunction12.exe -// MVID: {60B68B97-A624-4539-A745-0383978BB660} +// MVID: {59B19208-A624-4539-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x070C0000 +// Image base: 0x002D0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -57,7 +57,7 @@ // Code size 9 (0x9) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,23 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction12.fs' + .line 5,5 : 5,23 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction12.fs' IL_0000: ldarg.0 IL_0001: ldarg.0 IL_0002: add diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction15.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction15.il.bsl index 71b2315034b..b71973b19e4 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction15.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction15.il.bsl @@ -36,13 +36,13 @@ // Offset: 0x000001F0 Length: 0x00000072 } .module TestFunction15.exe -// MVID: {60B68B97-A624-4662-A745-0383978BB660} +// MVID: {5FCFFD21-A624-4662-A745-038321FDCF5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06B30000 +// Image base: 0x06690000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction18.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction18.il.bsl index 17e117dad82..80848608547 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction18.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction18.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction18 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction18 { - // Offset: 0x00000000 Length: 0x000001E1 + // Offset: 0x00000000 Length: 0x000001ED } .mresource public FSharpOptimizationData.TestFunction18 { - // Offset: 0x000001E8 Length: 0x00000072 + // Offset: 0x000001F8 Length: 0x00000072 } .module TestFunction18.exe -// MVID: {60B68B97-A624-4603-A745-0383978BB660} +// MVID: {59B19208-A624-4603-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x09850000 +// Image base: 0x019B0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -56,7 +56,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 : 5,38 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction18.fs' + .line 5,5 : 5,38 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction18.fs' IL_0000: ldstr "hello" IL_0005: call void [mscorlib]System.Console::WriteLine(string) IL_000a: ret diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction2.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction2.il.bsl index 21e84cf567b..92ec82161db 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction2.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction2.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction2 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction2 { - // Offset: 0x00000000 Length: 0x000001F9 + // Offset: 0x00000000 Length: 0x000001FD } .mresource public FSharpOptimizationData.TestFunction2 { - // Offset: 0x00000200 Length: 0x00000088 + // Offset: 0x00000208 Length: 0x00000088 } .module TestFunction2.exe -// MVID: {60B68B97-661D-8929-A745-0383978BB660} +// MVID: {59B19208-661D-8929-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x071A0000 +// Image base: 0x002E0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -56,7 +56,7 @@ // Code size 36 (0x24) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction2.fs' + .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction2.fs' IL_0000: ldstr "Hello" IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22.il.bsl index 23600d9913f..3c7a947a3b4 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly Testfunction22 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Testfunction22 { - // Offset: 0x00000000 Length: 0x00000157 + // Offset: 0x00000000 Length: 0x0000015B } .mresource public FSharpOptimizationData.Testfunction22 { // Offset: 0x00000160 Length: 0x00000055 } .module Testfunction22.exe -// MVID: {60B68B97-5AA3-4518-A745-0383978BB660} +// MVID: {59B199CC-5AA3-4518-A745-0383CC99B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05220000 +// Image base: 0x002E0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 6 (0x6) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 1,27 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22.fs' + .line 3,3 : 1,27 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22.fs' IL_0000: call void [mscorlib]System.Console::WriteLine() IL_0005: ret } // end of method $Testfunction22::main@ diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22b.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22b.il.bsl index aea4e753718..ac3e76f8f2e 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22b.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22b.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly Testfunction22b { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Testfunction22b { - // Offset: 0x00000000 Length: 0x00000159 + // Offset: 0x00000000 Length: 0x0000015D } .mresource public FSharpOptimizationData.Testfunction22b { - // Offset: 0x00000160 Length: 0x00000056 + // Offset: 0x00000168 Length: 0x00000056 } .module Testfunction22b.exe -// MVID: {60B68B97-8504-18B7-A745-0383978BB660} +// MVID: {59B19208-8504-18B7-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00AF0000 +// Image base: 0x002D0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 6 (0x6) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,35 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22b.fs' + .line 3,3 : 9,35 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22b.fs' IL_0000: call void [mscorlib]System.Console::WriteLine() IL_0005: ret } // end of method $Testfunction22b::main@ diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22c.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22c.il.bsl index 19f08efe5bf..e5640da7b20 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22c.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22c.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly Testfunction22c { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Testfunction22c { - // Offset: 0x00000000 Length: 0x00000159 + // Offset: 0x00000000 Length: 0x0000015D } .mresource public FSharpOptimizationData.Testfunction22c { - // Offset: 0x00000160 Length: 0x00000056 + // Offset: 0x00000168 Length: 0x00000056 } .module Testfunction22c.exe -// MVID: {60B68B97-459D-3DF8-A745-0383978BB660} +// MVID: {59B19208-459D-3DF8-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00F10000 +// Image base: 0x03000000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 6 (0x6) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 10,36 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22c.fs' + .line 3,3 : 10,36 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22c.fs' IL_0000: call void [mscorlib]System.Console::WriteLine() IL_0005: ret } // end of method $Testfunction22c::main@ diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22d.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22d.il.bsl index 1621b79b127..06dc2c7b954 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22d.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22d.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly Testfunction22d { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Testfunction22d { - // Offset: 0x00000000 Length: 0x00000159 + // Offset: 0x00000000 Length: 0x0000015D } .mresource public FSharpOptimizationData.Testfunction22d { - // Offset: 0x00000160 Length: 0x00000056 + // Offset: 0x00000168 Length: 0x00000056 } .module Testfunction22d.exe -// MVID: {60B68B97-FDCA-89B1-A745-0383978BB660} +// MVID: {59B19208-FDCA-89B1-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00E60000 +// Image base: 0x00720000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 6 (0x6) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 4,30 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22d.fs' + .line 3,3 : 4,30 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22d.fs' IL_0000: call void [mscorlib]System.Console::WriteLine() IL_0005: ret } // end of method $Testfunction22d::main@ diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22e.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22e.il.bsl index d3e72f97117..ed2dae30740 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22e.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22e.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly Testfunction22e { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Testfunction22e { - // Offset: 0x00000000 Length: 0x00000159 + // Offset: 0x00000000 Length: 0x0000015D } .mresource public FSharpOptimizationData.Testfunction22e { - // Offset: 0x00000160 Length: 0x00000056 + // Offset: 0x00000168 Length: 0x00000056 } .module Testfunction22e.exe -// MVID: {60B68B97-C83B-1CB9-A745-0383978BB660} +// MVID: {59B19208-C83B-1CB9-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05440000 +// Image base: 0x002D0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 12 (0xc) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 1,11 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22e.fs' + .line 3,3 : 1,11 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22e.fs' IL_0000: ldc.i4.1 IL_0001: brfalse.s IL_000b diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22f.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22f.il.bsl index 1e52b731760..a3761172da8 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22f.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22f.il.bsl @@ -34,20 +34,20 @@ } .mresource public FSharpSignatureData.Testfunction22f { - // Offset: 0x00000000 Length: 0x00000159 + // Offset: 0x00000000 Length: 0x00000157 } .mresource public FSharpOptimizationData.Testfunction22f { // Offset: 0x00000160 Length: 0x00000056 } .module Testfunction22f.exe -// MVID: {60B68B97-C040-2523-A745-0383978BB660} +// MVID: {5F1FA088-C040-2523-A745-038388A01F5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06DC0000 +// Image base: 0x067F0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -68,30 +68,34 @@ .method public static void main@() cil managed { .entrypoint - // Code size 34 (0x22) + // Code size 38 (0x26) .maxstack 4 .locals init ([0] string V_0) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 1,15 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22f.fs' + .line 3,3 : 1,15 'C:\\kevinransom\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22f.fs' IL_0000: ldstr "A" IL_0005: stloc.0 IL_0006: ldloc.0 IL_0007: ldstr "A" IL_000c: call bool [netstandard]System.String::Equals(string, string) - IL_0011: brfalse.s IL_001b + IL_0011: brfalse.s IL_0015 + + IL_0013: br.s IL_0017 + + IL_0015: br.s IL_001f .line 4,4 : 12,38 '' - IL_0013: call void [mscorlib]System.Console::WriteLine() + IL_0017: call void [mscorlib]System.Console::WriteLine() .line 100001,100001 : 0,0 '' - IL_0018: nop - IL_0019: br.s IL_0021 + IL_001c: nop + IL_001d: br.s IL_0025 .line 5,5 : 10,36 '' - IL_001b: call void [mscorlib]System.Console::WriteLine() + IL_001f: call void [mscorlib]System.Console::WriteLine() .line 100001,100001 : 0,0 '' - IL_0020: nop - IL_0021: ret + IL_0024: nop + IL_0025: ret } // end of method $Testfunction22f::main@ } // end of class ''.$Testfunction22f diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22g.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22g.il.bsl index 9553805a4c2..629593f6e0a 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22g.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22g.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly Testfunction22g { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Testfunction22g { - // Offset: 0x00000000 Length: 0x00000159 + // Offset: 0x00000000 Length: 0x0000015D } .mresource public FSharpOptimizationData.Testfunction22g { - // Offset: 0x00000160 Length: 0x00000056 + // Offset: 0x00000168 Length: 0x00000056 } .module Testfunction22g.exe -// MVID: {60B68B97-CA89-74DB-A745-0383978BB660} +// MVID: {59B19208-CA89-74DB-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06FA0000 +// Image base: 0x012F0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -63,24 +63,28 @@ .method public static void main@() cil managed { .entrypoint - // Code size 18 (0x12) + // Code size 22 (0x16) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 1,13 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22g.fs' + .line 3,3 : 1,13 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22g.fs' IL_0000: ldc.i4.1 - IL_0001: brfalse.s IL_000b + IL_0001: brfalse.s IL_0005 + + IL_0003: br.s IL_0007 + + IL_0005: br.s IL_000f .line 3,3 : 14,40 '' - IL_0003: call void [mscorlib]System.Console::WriteLine() + IL_0007: call void [mscorlib]System.Console::WriteLine() .line 100001,100001 : 0,0 '' - IL_0008: nop - IL_0009: br.s IL_0011 + IL_000c: nop + IL_000d: br.s IL_0015 .line 3,3 : 46,72 '' - IL_000b: call void [mscorlib]System.Console::WriteLine() + IL_000f: call void [mscorlib]System.Console::WriteLine() .line 100001,100001 : 0,0 '' - IL_0010: nop - IL_0011: ret + IL_0014: nop + IL_0015: ret } // end of method $Testfunction22g::main@ } // end of class ''.$Testfunction22g diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22h.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22h.il.bsl index 192a1d04752..7fcae895abd 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22h.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22h.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly Testfunction22h { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Testfunction22h { - // Offset: 0x00000000 Length: 0x00000159 + // Offset: 0x00000000 Length: 0x0000015D } .mresource public FSharpOptimizationData.Testfunction22h { - // Offset: 0x00000160 Length: 0x00000056 + // Offset: 0x00000168 Length: 0x00000056 } .module Testfunction22h.exe -// MVID: {60B68B97-0266-39F6-A745-0383978BB660} +// MVID: {59B19208-0266-39F6-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00C90000 +// Image base: 0x00370000 // =============== CLASS MEMBERS DECLARATION =================== @@ -68,7 +68,7 @@ .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_0, [1] class [mscorlib]System.Exception V_1) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 4,30 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22h.fs' + .line 4,4 : 4,30 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22h.fs' .try { IL_0000: call void [mscorlib]System.Console::WriteLine() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction3.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction3.il.bsl index 31cb50e6a6b..2a64c727d05 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction3.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction3.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction3 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction3 { - // Offset: 0x00000000 Length: 0x000001F9 + // Offset: 0x00000000 Length: 0x000001FD } .mresource public FSharpOptimizationData.TestFunction3 { - // Offset: 0x00000200 Length: 0x00000088 + // Offset: 0x00000208 Length: 0x00000088 } .module TestFunction3.exe -// MVID: {60B68B97-663A-8929-A745-0383978BB660} +// MVID: {59B19208-663A-8929-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06F20000 +// Image base: 0x013E0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -56,7 +56,7 @@ // Code size 36 (0x24) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction3.fs' + .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction3.fs' IL_0000: ldstr "Hello" IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction4.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction4.il.bsl index 9089ec85b99..0b9818bebb3 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction4.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction4.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction4 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction4 { - // Offset: 0x00000000 Length: 0x000001F9 + // Offset: 0x00000000 Length: 0x000001FD } .mresource public FSharpOptimizationData.TestFunction4 { - // Offset: 0x00000200 Length: 0x00000088 + // Offset: 0x00000208 Length: 0x00000088 } .module TestFunction4.exe -// MVID: {60B68B97-665B-8929-A745-0383978BB660} +// MVID: {59B19208-665B-8929-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00F10000 +// Image base: 0x026C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -56,7 +56,7 @@ // Code size 36 (0x24) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction4.fs' + .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction4.fs' IL_0000: ldstr "Hello" IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction5.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction5.il.bsl index f03b113a1f8..fb983f1af1e 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.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction5 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction5 { - // Offset: 0x00000000 Length: 0x000001F9 + // Offset: 0x00000000 Length: 0x000001FD } .mresource public FSharpOptimizationData.TestFunction5 { - // Offset: 0x00000200 Length: 0x00000088 + // Offset: 0x00000208 Length: 0x00000088 } .module TestFunction5.exe -// MVID: {60B68B97-6570-8929-A745-0383978BB660} +// MVID: {59B19208-6570-8929-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00AB0000 +// Image base: 0x010A0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -56,7 +56,7 @@ // Code size 36 (0x24) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction5.fs' + .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction5.fs' IL_0000: ldstr "Hello" IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction6.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction6.il.bsl index 90d8b294ee0..88bcb600fc8 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction6.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction6.il.bsl @@ -36,13 +36,13 @@ // Offset: 0x00000200 Length: 0x00000088 } .module TestFunction6.exe -// MVID: {60B68B97-6591-8929-A745-0383978BB660} +// MVID: {5FCFFD21-6591-8929-A745-038321FDCF5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x072D0000 +// Image base: 0x05A30000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction7.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction7.il.bsl index be6eb321a0b..a9af9b236e4 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction7.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction7.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction7 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction7 { - // Offset: 0x00000000 Length: 0x000001BB + // Offset: 0x00000000 Length: 0x000001BF } .mresource public FSharpOptimizationData.TestFunction7 { - // Offset: 0x000001C0 Length: 0x00000070 + // Offset: 0x000001C8 Length: 0x00000070 } .module TestFunction7.exe -// MVID: {60B68B97-65AE-8929-A745-0383978BB660} +// MVID: {59B19208-65AE-8929-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x051F0000 +// Image base: 0x00E30000 // =============== CLASS MEMBERS DECLARATION =================== @@ -57,7 +57,7 @@ .maxstack 4 .locals init ([0] int32 r) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,22 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction7.fs' + .line 5,5 : 5,22 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction7.fs' IL_0000: ldc.i4.0 IL_0001: stloc.0 .line 6,6 : 5,16 '' diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction8.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction8.il.bsl index 75cd37c6650..328e4809402 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction8.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction8.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction8 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction8 { - // Offset: 0x00000000 Length: 0x000001C4 + // Offset: 0x00000000 Length: 0x000001C8 } .mresource public FSharpOptimizationData.TestFunction8 { - // Offset: 0x000001C8 Length: 0x00000070 + // Offset: 0x000001D0 Length: 0x00000070 } .module TestFunction8.exe -// MVID: {60B68B97-65CF-8929-A745-0383978BB660} +// MVID: {59B19208-65CF-8929-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07330000 +// Image base: 0x01010000 // =============== CLASS MEMBERS DECLARATION =================== @@ -53,25 +53,29 @@ .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 int32 TestFunction8(int32 x) cil managed { - // Code size 12 (0xc) + // Code size 16 (0x10) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,18 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction8.fs' + .line 5,5 : 5,18 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction8.fs' IL_0000: ldarg.0 IL_0001: ldc.i4.3 - IL_0002: ble.s IL_0008 + IL_0002: ble.s IL_0006 - .line 6,6 : 9,12 '' - IL_0004: ldarg.0 - IL_0005: ldc.i4.4 - IL_0006: add - IL_0007: ret + IL_0004: br.s IL_0008 - .line 7,7 : 10,13 '' + IL_0006: br.s IL_000c + + .line 6,6 : 9,12 '' IL_0008: ldarg.0 IL_0009: ldc.i4.4 - IL_000a: sub + IL_000a: add IL_000b: ret + + .line 7,7 : 10,13 '' + IL_000c: ldarg.0 + IL_000d: ldc.i4.4 + IL_000e: sub + IL_000f: ret } // end of method TestFunction8::TestFunction8 } // end of class TestFunction8 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9.il.bsl index aa1372d9a4d..b7e4921fdc3 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction9 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction9 { - // Offset: 0x00000000 Length: 0x000001D2 + // Offset: 0x00000000 Length: 0x000001D6 } .mresource public FSharpOptimizationData.TestFunction9 { - // Offset: 0x000001D8 Length: 0x00000070 + // Offset: 0x000001E0 Length: 0x00000070 } .module TestFunction9.exe -// MVID: {60B68B97-64F4-8929-A745-0383978BB660} +// MVID: {59B19208-64F4-8929-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06B70000 +// Image base: 0x016E0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -53,29 +53,33 @@ .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 string TestFunction9(int32 x) cil managed { - // Code size 36 (0x24) + // Code size 40 (0x28) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,17 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9.fs' + .line 5,5 : 5,17 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9.fs' IL_0000: ldarg.0 IL_0001: ldc.i4.3 IL_0002: sub IL_0003: switch ( IL_0012, - IL_0018) - IL_0010: br.s IL_001e + IL_0014) + IL_0010: br.s IL_0022 + + IL_0012: br.s IL_0016 + + IL_0014: br.s IL_001c .line 6,6 : 12,19 '' - IL_0012: ldstr "three" - IL_0017: ret + IL_0016: ldstr "three" + IL_001b: ret .line 7,7 : 12,18 '' - IL_0018: ldstr "four" - IL_001d: ret + IL_001c: ldstr "four" + IL_0021: ret .line 8,8 : 12,18 '' - IL_001e: ldstr "five" - IL_0023: ret + IL_0022: ldstr "five" + IL_0027: ret } // end of method TestFunction9::TestFunction9 } // end of class TestFunction9 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b.il.bsl index 49d2757735a..a4168bde720 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction9b { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction9b { - // Offset: 0x00000000 Length: 0x000001F2 + // Offset: 0x00000000 Length: 0x000001F6 } .mresource public FSharpOptimizationData.TestFunction9b { - // Offset: 0x000001F8 Length: 0x00000072 + // Offset: 0x00000200 Length: 0x00000072 } .module TestFunction9b.exe -// MVID: {60B68B97-A52C-4FC9-A745-0383978BB660} +// MVID: {59B19208-A52C-4FC9-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00DB0000 +// Image base: 0x01AA0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -53,7 +53,7 @@ .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 string TestFunction9b(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 x) cil managed { - // Code size 409 (0x199) + // Code size 411 (0x19b) .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_0, [1] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_1, @@ -69,12 +69,12 @@ [11] int32 V_11, [12] int32 V_12) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,17 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9b.fs' + .line 5,5 : 5,17 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9b.fs' IL_0000: ldarg.0 IL_0001: stloc.0 IL_0002: ldloc.0 IL_0003: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0008: brfalse IL_0193 + IL_0008: brfalse IL_0195 IL_000d: ldloc.0 IL_000e: stloc.1 @@ -83,17 +83,17 @@ IL_0015: ldc.i4.1 IL_0016: sub IL_0017: switch ( - IL_00fd) + IL_00ff) IL_0020: ldloc.1 IL_0021: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() IL_0026: ldc.i4.3 IL_0027: sub IL_0028: switch ( - IL_0078) + IL_007a) IL_0031: ldloc.1 IL_0032: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_0037: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_003c: brfalse IL_0193 + IL_003c: brfalse IL_0195 IL_0041: ldloc.1 IL_0042: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() @@ -101,7 +101,7 @@ IL_0048: ldloc.2 IL_0049: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_004e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0053: brtrue IL_0193 + IL_0053: brtrue IL_0195 IL_0058: ldloc.2 IL_0059: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() @@ -114,124 +114,126 @@ IL_006a: add IL_006b: ldc.i4.4 IL_006c: ceq - IL_006e: brfalse IL_0193 - - IL_0073: br IL_017d - - IL_0078: ldloc.1 - IL_0079: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_007e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0083: brfalse IL_0193 - - IL_0088: ldloc.1 - IL_0089: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_008e: stloc.s V_7 - IL_0090: ldloc.s V_7 - IL_0092: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0097: ldc.i4.4 - IL_0098: sub - IL_0099: switch ( - IL_00e7) - IL_00a2: ldloc.s V_7 - IL_00a4: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00a9: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00ae: brtrue IL_0193 - - IL_00b3: ldloc.s V_7 - IL_00b5: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00ba: stloc.s V_8 - IL_00bc: ldloc.1 - IL_00bd: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00c2: stloc.s V_9 - IL_00c4: ldloc.s V_9 - IL_00c6: ldloc.s V_8 - IL_00c8: add - IL_00c9: ldc.i4.4 - IL_00ca: ceq - IL_00cc: brfalse IL_0193 - - IL_00d1: ldloc.s V_7 - IL_00d3: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00d8: ldloc.1 - IL_00d9: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00de: stloc.s V_6 - IL_00e0: stloc.s V_5 - IL_00e2: br IL_018d - - IL_00e7: ldloc.s V_7 - IL_00e9: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00ee: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00f3: brtrue IL_0193 - - IL_00f8: br IL_0177 - - IL_00fd: ldloc.1 - IL_00fe: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0103: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0108: brfalse IL_0193 - - IL_010d: ldloc.1 - IL_010e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0113: stloc.s V_10 - IL_0115: ldloc.s V_10 - IL_0117: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_011c: ldc.i4.2 - IL_011d: sub - IL_011e: switch ( - IL_0163) - IL_0127: ldloc.s V_10 - IL_0129: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_012e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0133: brtrue.s IL_0193 - - IL_0135: ldloc.s V_10 - IL_0137: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_013c: stloc.s V_11 - IL_013e: ldloc.1 - IL_013f: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0144: stloc.s V_12 - IL_0146: ldloc.s V_12 - IL_0148: ldloc.s V_11 - IL_014a: add - IL_014b: ldc.i4.4 - IL_014c: ceq - IL_014e: brfalse.s IL_0193 - - IL_0150: ldloc.s V_10 - IL_0152: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0157: ldloc.1 - IL_0158: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_015d: stloc.s V_6 - IL_015f: stloc.s V_5 - IL_0161: br.s IL_018d - - IL_0163: ldloc.s V_10 - IL_0165: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_016a: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_016f: brtrue.s IL_0193 + IL_006e: brfalse.s IL_0075 + + IL_0070: br IL_017f + + IL_0075: br IL_0195 + + IL_007a: ldloc.1 + IL_007b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0080: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0085: brfalse IL_0195 + + IL_008a: ldloc.1 + IL_008b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0090: stloc.s V_7 + IL_0092: ldloc.s V_7 + IL_0094: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0099: ldc.i4.4 + IL_009a: sub + IL_009b: switch ( + IL_00e9) + IL_00a4: ldloc.s V_7 + IL_00a6: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00ab: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00b0: brtrue IL_0195 + + IL_00b5: ldloc.s V_7 + IL_00b7: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00bc: stloc.s V_8 + IL_00be: ldloc.1 + IL_00bf: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00c4: stloc.s V_9 + IL_00c6: ldloc.s V_9 + IL_00c8: ldloc.s V_8 + IL_00ca: add + IL_00cb: ldc.i4.4 + IL_00cc: ceq + IL_00ce: brfalse IL_0195 + + IL_00d3: ldloc.s V_7 + IL_00d5: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00da: ldloc.1 + IL_00db: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00e0: stloc.s V_6 + IL_00e2: stloc.s V_5 + IL_00e4: br IL_018f + + IL_00e9: ldloc.s V_7 + IL_00eb: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00f0: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00f5: brtrue IL_0195 + + IL_00fa: br IL_0179 + + IL_00ff: ldloc.1 + IL_0100: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0105: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_010a: brfalse IL_0195 + + IL_010f: ldloc.1 + IL_0110: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0115: stloc.s V_10 + IL_0117: ldloc.s V_10 + IL_0119: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_011e: ldc.i4.2 + IL_011f: sub + IL_0120: switch ( + IL_0165) + IL_0129: ldloc.s V_10 + IL_012b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0130: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0135: brtrue.s IL_0195 + + IL_0137: ldloc.s V_10 + IL_0139: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_013e: stloc.s V_11 + IL_0140: ldloc.1 + IL_0141: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0146: stloc.s V_12 + IL_0148: ldloc.s V_12 + IL_014a: ldloc.s V_11 + IL_014c: add + IL_014d: ldc.i4.4 + IL_014e: ceq + IL_0150: brfalse.s IL_0195 + + IL_0152: ldloc.s V_10 + IL_0154: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0159: ldloc.1 + IL_015a: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_015f: stloc.s V_6 + IL_0161: stloc.s V_5 + IL_0163: br.s IL_018f + + IL_0165: ldloc.s V_10 + IL_0167: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_016c: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0171: brtrue.s IL_0195 .line 6,6 : 16,23 '' - IL_0171: ldstr "three" - IL_0176: ret + IL_0173: ldstr "three" + IL_0178: ret .line 7,7 : 16,23 '' - IL_0177: ldstr "seven" - IL_017c: ret + IL_0179: ldstr "seven" + IL_017e: ret .line 5,5 : 5,17 '' - IL_017d: ldloc.2 - IL_017e: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0183: stloc.s V_5 - IL_0185: ldloc.1 - IL_0186: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_018b: stloc.s V_6 + IL_017f: ldloc.2 + IL_0180: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0185: stloc.s V_5 + IL_0187: ldloc.1 + IL_0188: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_018d: stloc.s V_6 .line 8,8 : 29,35 '' - IL_018d: ldstr "four" - IL_0192: ret + IL_018f: ldstr "four" + IL_0194: ret .line 9,9 : 12,17 '' - IL_0193: ldstr "big" - IL_0198: ret + IL_0195: ldstr "big" + IL_019a: ret } // end of method TestFunction9b::TestFunction9b } // end of class TestFunction9b diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b1.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b1.il.bsl index 03e2dd29718..28857893620 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b1.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b1.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction9b1 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction9b1 { - // Offset: 0x00000000 Length: 0x00000204 + // Offset: 0x00000000 Length: 0x00000208 } .mresource public FSharpOptimizationData.TestFunction9b1 { - // Offset: 0x00000208 Length: 0x00000083 + // Offset: 0x00000210 Length: 0x00000083 } .module TestFunction9b1.exe -// MVID: {60B68B97-A406-DAF4-A745-0383978BB660} +// MVID: {59B19208-A406-DAF4-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x072C0000 +// Image base: 0x02730000 // =============== CLASS MEMBERS DECLARATION =================== @@ -53,7 +53,7 @@ .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 string TestFunction9b(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 x) cil managed { - // Code size 409 (0x199) + // Code size 411 (0x19b) .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_0, [1] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_1, @@ -69,12 +69,12 @@ [11] int32 V_11, [12] int32 V_12) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,17 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9b1.fs' + .line 5,5 : 5,17 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9b1.fs' IL_0000: ldarg.0 IL_0001: stloc.0 IL_0002: ldloc.0 IL_0003: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0008: brfalse IL_0193 + IL_0008: brfalse IL_0195 IL_000d: ldloc.0 IL_000e: stloc.1 @@ -83,17 +83,17 @@ IL_0015: ldc.i4.1 IL_0016: sub IL_0017: switch ( - IL_00fd) + IL_00ff) IL_0020: ldloc.1 IL_0021: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() IL_0026: ldc.i4.3 IL_0027: sub IL_0028: switch ( - IL_0078) + IL_007a) IL_0031: ldloc.1 IL_0032: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_0037: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_003c: brfalse IL_0193 + IL_003c: brfalse IL_0195 IL_0041: ldloc.1 IL_0042: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() @@ -101,7 +101,7 @@ IL_0048: ldloc.2 IL_0049: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_004e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0053: brtrue IL_0193 + IL_0053: brtrue IL_0195 IL_0058: ldloc.2 IL_0059: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() @@ -114,124 +114,126 @@ IL_006a: add IL_006b: ldc.i4.4 IL_006c: ceq - IL_006e: brfalse IL_0193 - - IL_0073: br IL_017d - - IL_0078: ldloc.1 - IL_0079: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_007e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0083: brfalse IL_0193 - - IL_0088: ldloc.1 - IL_0089: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_008e: stloc.s V_7 - IL_0090: ldloc.s V_7 - IL_0092: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0097: ldc.i4.4 - IL_0098: sub - IL_0099: switch ( - IL_00e7) - IL_00a2: ldloc.s V_7 - IL_00a4: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00a9: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00ae: brtrue IL_0193 - - IL_00b3: ldloc.s V_7 - IL_00b5: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00ba: stloc.s V_8 - IL_00bc: ldloc.1 - IL_00bd: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00c2: stloc.s V_9 - IL_00c4: ldloc.s V_9 - IL_00c6: ldloc.s V_8 - IL_00c8: add - IL_00c9: ldc.i4.4 - IL_00ca: ceq - IL_00cc: brfalse IL_0193 - - IL_00d1: ldloc.s V_7 - IL_00d3: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00d8: ldloc.1 - IL_00d9: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00de: stloc.s V_6 - IL_00e0: stloc.s V_5 - IL_00e2: br IL_018d - - IL_00e7: ldloc.s V_7 - IL_00e9: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00ee: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00f3: brtrue IL_0193 - - IL_00f8: br IL_0177 - - IL_00fd: ldloc.1 - IL_00fe: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0103: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0108: brfalse IL_0193 - - IL_010d: ldloc.1 - IL_010e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0113: stloc.s V_10 - IL_0115: ldloc.s V_10 - IL_0117: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_011c: ldc.i4.2 - IL_011d: sub - IL_011e: switch ( - IL_0163) - IL_0127: ldloc.s V_10 - IL_0129: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_012e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0133: brtrue.s IL_0193 - - IL_0135: ldloc.s V_10 - IL_0137: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_013c: stloc.s V_11 - IL_013e: ldloc.1 - IL_013f: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0144: stloc.s V_12 - IL_0146: ldloc.s V_12 - IL_0148: ldloc.s V_11 - IL_014a: add - IL_014b: ldc.i4.4 - IL_014c: ceq - IL_014e: brfalse.s IL_0193 - - IL_0150: ldloc.s V_10 - IL_0152: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0157: ldloc.1 - IL_0158: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_015d: stloc.s V_6 - IL_015f: stloc.s V_5 - IL_0161: br.s IL_018d - - IL_0163: ldloc.s V_10 - IL_0165: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_016a: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_016f: brtrue.s IL_0193 + IL_006e: brfalse.s IL_0075 + + IL_0070: br IL_017f + + IL_0075: br IL_0195 + + IL_007a: ldloc.1 + IL_007b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0080: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0085: brfalse IL_0195 + + IL_008a: ldloc.1 + IL_008b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0090: stloc.s V_7 + IL_0092: ldloc.s V_7 + IL_0094: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0099: ldc.i4.4 + IL_009a: sub + IL_009b: switch ( + IL_00e9) + IL_00a4: ldloc.s V_7 + IL_00a6: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00ab: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00b0: brtrue IL_0195 + + IL_00b5: ldloc.s V_7 + IL_00b7: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00bc: stloc.s V_8 + IL_00be: ldloc.1 + IL_00bf: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00c4: stloc.s V_9 + IL_00c6: ldloc.s V_9 + IL_00c8: ldloc.s V_8 + IL_00ca: add + IL_00cb: ldc.i4.4 + IL_00cc: ceq + IL_00ce: brfalse IL_0195 + + IL_00d3: ldloc.s V_7 + IL_00d5: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00da: ldloc.1 + IL_00db: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00e0: stloc.s V_6 + IL_00e2: stloc.s V_5 + IL_00e4: br IL_018f + + IL_00e9: ldloc.s V_7 + IL_00eb: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00f0: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00f5: brtrue IL_0195 + + IL_00fa: br IL_0179 + + IL_00ff: ldloc.1 + IL_0100: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0105: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_010a: brfalse IL_0195 + + IL_010f: ldloc.1 + IL_0110: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0115: stloc.s V_10 + IL_0117: ldloc.s V_10 + IL_0119: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_011e: ldc.i4.2 + IL_011f: sub + IL_0120: switch ( + IL_0165) + IL_0129: ldloc.s V_10 + IL_012b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0130: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0135: brtrue.s IL_0195 + + IL_0137: ldloc.s V_10 + IL_0139: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_013e: stloc.s V_11 + IL_0140: ldloc.1 + IL_0141: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0146: stloc.s V_12 + IL_0148: ldloc.s V_12 + IL_014a: ldloc.s V_11 + IL_014c: add + IL_014d: ldc.i4.4 + IL_014e: ceq + IL_0150: brfalse.s IL_0195 + + IL_0152: ldloc.s V_10 + IL_0154: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0159: ldloc.1 + IL_015a: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_015f: stloc.s V_6 + IL_0161: stloc.s V_5 + IL_0163: br.s IL_018f + + IL_0165: ldloc.s V_10 + IL_0167: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_016c: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0171: brtrue.s IL_0195 .line 6,6 : 16,23 '' - IL_0171: ldstr "three" - IL_0176: ret + IL_0173: ldstr "three" + IL_0178: ret .line 7,7 : 16,23 '' - IL_0177: ldstr "seven" - IL_017c: ret + IL_0179: ldstr "seven" + IL_017e: ret .line 5,5 : 5,17 '' - IL_017d: ldloc.2 - IL_017e: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0183: stloc.s V_5 - IL_0185: ldloc.1 - IL_0186: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_018b: stloc.s V_6 + IL_017f: ldloc.2 + IL_0180: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0185: stloc.s V_5 + IL_0187: ldloc.1 + IL_0188: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_018d: stloc.s V_6 .line 8,8 : 29,35 '' - IL_018d: ldstr "four" - IL_0192: ret + IL_018f: ldstr "four" + IL_0194: ret .line 9,9 : 12,17 '' - IL_0193: ldstr "big" - IL_0198: ret + IL_0195: ldstr "big" + IL_019a: ret } // end of method TestFunction9b1::TestFunction9b } // end of class TestFunction9b1 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b2.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b2.il.bsl index 1fa79b615e8..005b49c3081 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b2.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b2.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction9b2 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction9b2 { - // Offset: 0x00000000 Length: 0x00000204 + // Offset: 0x00000000 Length: 0x00000208 } .mresource public FSharpOptimizationData.TestFunction9b2 { - // Offset: 0x00000208 Length: 0x00000083 + // Offset: 0x00000210 Length: 0x00000083 } .module TestFunction9b2.exe -// MVID: {60B68B97-9C0B-E35E-A745-0383978BB660} +// MVID: {59B19208-9C0B-E35E-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07220000 +// Image base: 0x00730000 // =============== CLASS MEMBERS DECLARATION =================== @@ -53,7 +53,7 @@ .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 string TestFunction9b(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 x) cil managed { - // Code size 409 (0x199) + // Code size 411 (0x19b) .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_0, [1] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_1, @@ -69,12 +69,12 @@ [11] int32 V_11, [12] int32 V_12) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,17 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9b2.fs' + .line 5,5 : 5,17 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9b2.fs' IL_0000: ldarg.0 IL_0001: stloc.0 IL_0002: ldloc.0 IL_0003: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0008: brfalse IL_0193 + IL_0008: brfalse IL_0195 IL_000d: ldloc.0 IL_000e: stloc.1 @@ -83,17 +83,17 @@ IL_0015: ldc.i4.1 IL_0016: sub IL_0017: switch ( - IL_00fd) + IL_00ff) IL_0020: ldloc.1 IL_0021: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() IL_0026: ldc.i4.3 IL_0027: sub IL_0028: switch ( - IL_0078) + IL_007a) IL_0031: ldloc.1 IL_0032: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_0037: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_003c: brfalse IL_0193 + IL_003c: brfalse IL_0195 IL_0041: ldloc.1 IL_0042: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() @@ -101,7 +101,7 @@ IL_0048: ldloc.2 IL_0049: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_004e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0053: brtrue IL_0193 + IL_0053: brtrue IL_0195 IL_0058: ldloc.2 IL_0059: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() @@ -114,124 +114,126 @@ IL_006a: add IL_006b: ldc.i4.4 IL_006c: ceq - IL_006e: brfalse IL_0193 - - IL_0073: br IL_017d - - IL_0078: ldloc.1 - IL_0079: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_007e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0083: brfalse IL_0193 - - IL_0088: ldloc.1 - IL_0089: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_008e: stloc.s V_7 - IL_0090: ldloc.s V_7 - IL_0092: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0097: ldc.i4.4 - IL_0098: sub - IL_0099: switch ( - IL_00e7) - IL_00a2: ldloc.s V_7 - IL_00a4: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00a9: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00ae: brtrue IL_0193 - - IL_00b3: ldloc.s V_7 - IL_00b5: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00ba: stloc.s V_8 - IL_00bc: ldloc.1 - IL_00bd: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00c2: stloc.s V_9 - IL_00c4: ldloc.s V_9 - IL_00c6: ldloc.s V_8 - IL_00c8: add - IL_00c9: ldc.i4.4 - IL_00ca: ceq - IL_00cc: brfalse IL_0193 - - IL_00d1: ldloc.s V_7 - IL_00d3: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00d8: ldloc.1 - IL_00d9: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00de: stloc.s V_6 - IL_00e0: stloc.s V_5 - IL_00e2: br IL_018d - - IL_00e7: ldloc.s V_7 - IL_00e9: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00ee: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00f3: brtrue IL_0193 - - IL_00f8: br IL_0177 - - IL_00fd: ldloc.1 - IL_00fe: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0103: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0108: brfalse IL_0193 - - IL_010d: ldloc.1 - IL_010e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0113: stloc.s V_10 - IL_0115: ldloc.s V_10 - IL_0117: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_011c: ldc.i4.2 - IL_011d: sub - IL_011e: switch ( - IL_0163) - IL_0127: ldloc.s V_10 - IL_0129: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_012e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0133: brtrue.s IL_0193 - - IL_0135: ldloc.s V_10 - IL_0137: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_013c: stloc.s V_11 - IL_013e: ldloc.1 - IL_013f: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0144: stloc.s V_12 - IL_0146: ldloc.s V_12 - IL_0148: ldloc.s V_11 - IL_014a: add - IL_014b: ldc.i4.4 - IL_014c: ceq - IL_014e: brfalse.s IL_0193 - - IL_0150: ldloc.s V_10 - IL_0152: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0157: ldloc.1 - IL_0158: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_015d: stloc.s V_6 - IL_015f: stloc.s V_5 - IL_0161: br.s IL_018d - - IL_0163: ldloc.s V_10 - IL_0165: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_016a: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_016f: brtrue.s IL_0193 + IL_006e: brfalse.s IL_0075 + + IL_0070: br IL_017f + + IL_0075: br IL_0195 + + IL_007a: ldloc.1 + IL_007b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0080: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0085: brfalse IL_0195 + + IL_008a: ldloc.1 + IL_008b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0090: stloc.s V_7 + IL_0092: ldloc.s V_7 + IL_0094: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0099: ldc.i4.4 + IL_009a: sub + IL_009b: switch ( + IL_00e9) + IL_00a4: ldloc.s V_7 + IL_00a6: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00ab: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00b0: brtrue IL_0195 + + IL_00b5: ldloc.s V_7 + IL_00b7: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00bc: stloc.s V_8 + IL_00be: ldloc.1 + IL_00bf: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00c4: stloc.s V_9 + IL_00c6: ldloc.s V_9 + IL_00c8: ldloc.s V_8 + IL_00ca: add + IL_00cb: ldc.i4.4 + IL_00cc: ceq + IL_00ce: brfalse IL_0195 + + IL_00d3: ldloc.s V_7 + IL_00d5: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00da: ldloc.1 + IL_00db: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00e0: stloc.s V_6 + IL_00e2: stloc.s V_5 + IL_00e4: br IL_018f + + IL_00e9: ldloc.s V_7 + IL_00eb: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00f0: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00f5: brtrue IL_0195 + + IL_00fa: br IL_0179 + + IL_00ff: ldloc.1 + IL_0100: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0105: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_010a: brfalse IL_0195 + + IL_010f: ldloc.1 + IL_0110: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0115: stloc.s V_10 + IL_0117: ldloc.s V_10 + IL_0119: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_011e: ldc.i4.2 + IL_011f: sub + IL_0120: switch ( + IL_0165) + IL_0129: ldloc.s V_10 + IL_012b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0130: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0135: brtrue.s IL_0195 + + IL_0137: ldloc.s V_10 + IL_0139: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_013e: stloc.s V_11 + IL_0140: ldloc.1 + IL_0141: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0146: stloc.s V_12 + IL_0148: ldloc.s V_12 + IL_014a: ldloc.s V_11 + IL_014c: add + IL_014d: ldc.i4.4 + IL_014e: ceq + IL_0150: brfalse.s IL_0195 + + IL_0152: ldloc.s V_10 + IL_0154: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0159: ldloc.1 + IL_015a: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_015f: stloc.s V_6 + IL_0161: stloc.s V_5 + IL_0163: br.s IL_018f + + IL_0165: ldloc.s V_10 + IL_0167: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_016c: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0171: brtrue.s IL_0195 .line 6,6 : 16,23 '' - IL_0171: ldstr "three" - IL_0176: ret + IL_0173: ldstr "three" + IL_0178: ret .line 7,7 : 16,23 '' - IL_0177: ldstr "seven" - IL_017c: ret + IL_0179: ldstr "seven" + IL_017e: ret .line 5,5 : 5,17 '' - IL_017d: ldloc.2 - IL_017e: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0183: stloc.s V_5 - IL_0185: ldloc.1 - IL_0186: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_018b: stloc.s V_6 + IL_017f: ldloc.2 + IL_0180: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0185: stloc.s V_5 + IL_0187: ldloc.1 + IL_0188: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_018d: stloc.s V_6 .line 8,8 : 29,35 '' - IL_018d: ldstr "four" - IL_0192: ret + IL_018f: ldstr "four" + IL_0194: ret .line 9,9 : 12,17 '' - IL_0193: ldstr "big" - IL_0198: ret + IL_0195: ldstr "big" + IL_019a: ret } // end of method TestFunction9b2::TestFunction9b } // end of class TestFunction9b2 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b3.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b3.il.bsl index 855fe60eaf0..dc4f68ffb80 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b3.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b3.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TestFunction9b3 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction9b3 { - // Offset: 0x00000000 Length: 0x00000204 + // Offset: 0x00000000 Length: 0x00000208 } .mresource public FSharpOptimizationData.TestFunction9b3 { - // Offset: 0x00000208 Length: 0x00000083 + // Offset: 0x00000210 Length: 0x00000083 } .module TestFunction9b3.exe -// MVID: {60B68B97-C1A4-612A-A745-0383978BB660} +// MVID: {59B19208-C1A4-612A-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x068C0000 +// Image base: 0x00680000 // =============== CLASS MEMBERS DECLARATION =================== @@ -53,7 +53,7 @@ .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 string TestFunction9b(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 x) cil managed { - // Code size 409 (0x199) + // Code size 411 (0x19b) .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_0, [1] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_1, @@ -69,12 +69,12 @@ [11] int32 V_11, [12] int32 V_12) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,17 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9b3.fs' + .line 5,5 : 5,17 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9b3.fs' IL_0000: ldarg.0 IL_0001: stloc.0 IL_0002: ldloc.0 IL_0003: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0008: brfalse IL_0193 + IL_0008: brfalse IL_0195 IL_000d: ldloc.0 IL_000e: stloc.1 @@ -83,17 +83,17 @@ IL_0015: ldc.i4.1 IL_0016: sub IL_0017: switch ( - IL_00fd) + IL_00ff) IL_0020: ldloc.1 IL_0021: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() IL_0026: ldc.i4.3 IL_0027: sub IL_0028: switch ( - IL_0078) + IL_007a) IL_0031: ldloc.1 IL_0032: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_0037: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_003c: brfalse IL_0193 + IL_003c: brfalse IL_0195 IL_0041: ldloc.1 IL_0042: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() @@ -101,7 +101,7 @@ IL_0048: ldloc.2 IL_0049: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_004e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0053: brtrue IL_0193 + IL_0053: brtrue IL_0195 IL_0058: ldloc.2 IL_0059: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() @@ -114,124 +114,126 @@ IL_006a: add IL_006b: ldc.i4.4 IL_006c: ceq - IL_006e: brfalse IL_0193 - - IL_0073: br IL_017d - - IL_0078: ldloc.1 - IL_0079: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_007e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0083: brfalse IL_0193 - - IL_0088: ldloc.1 - IL_0089: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_008e: stloc.s V_7 - IL_0090: ldloc.s V_7 - IL_0092: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0097: ldc.i4.4 - IL_0098: sub - IL_0099: switch ( - IL_00e7) - IL_00a2: ldloc.s V_7 - IL_00a4: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00a9: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00ae: brtrue IL_0193 - - IL_00b3: ldloc.s V_7 - IL_00b5: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00ba: stloc.s V_8 - IL_00bc: ldloc.1 - IL_00bd: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00c2: stloc.s V_9 - IL_00c4: ldloc.s V_9 - IL_00c6: ldloc.s V_8 - IL_00c8: add - IL_00c9: ldc.i4.4 - IL_00ca: ceq - IL_00cc: brfalse IL_0193 - - IL_00d1: ldloc.s V_7 - IL_00d3: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00d8: ldloc.1 - IL_00d9: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00de: stloc.s V_6 - IL_00e0: stloc.s V_5 - IL_00e2: br IL_018d - - IL_00e7: ldloc.s V_7 - IL_00e9: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00ee: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00f3: brtrue IL_0193 - - IL_00f8: br IL_0177 - - IL_00fd: ldloc.1 - IL_00fe: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0103: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0108: brfalse IL_0193 - - IL_010d: ldloc.1 - IL_010e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0113: stloc.s V_10 - IL_0115: ldloc.s V_10 - IL_0117: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_011c: ldc.i4.2 - IL_011d: sub - IL_011e: switch ( - IL_0163) - IL_0127: ldloc.s V_10 - IL_0129: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_012e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0133: brtrue.s IL_0193 - - IL_0135: ldloc.s V_10 - IL_0137: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_013c: stloc.s V_11 - IL_013e: ldloc.1 - IL_013f: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0144: stloc.s V_12 - IL_0146: ldloc.s V_12 - IL_0148: ldloc.s V_11 - IL_014a: add - IL_014b: ldc.i4.4 - IL_014c: ceq - IL_014e: brfalse.s IL_0193 - - IL_0150: ldloc.s V_10 - IL_0152: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0157: ldloc.1 - IL_0158: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_015d: stloc.s V_6 - IL_015f: stloc.s V_5 - IL_0161: br.s IL_018d - - IL_0163: ldloc.s V_10 - IL_0165: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_016a: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_016f: brtrue.s IL_0193 + IL_006e: brfalse.s IL_0075 + + IL_0070: br IL_017f + + IL_0075: br IL_0195 + + IL_007a: ldloc.1 + IL_007b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0080: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0085: brfalse IL_0195 + + IL_008a: ldloc.1 + IL_008b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0090: stloc.s V_7 + IL_0092: ldloc.s V_7 + IL_0094: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0099: ldc.i4.4 + IL_009a: sub + IL_009b: switch ( + IL_00e9) + IL_00a4: ldloc.s V_7 + IL_00a6: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00ab: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00b0: brtrue IL_0195 + + IL_00b5: ldloc.s V_7 + IL_00b7: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00bc: stloc.s V_8 + IL_00be: ldloc.1 + IL_00bf: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00c4: stloc.s V_9 + IL_00c6: ldloc.s V_9 + IL_00c8: ldloc.s V_8 + IL_00ca: add + IL_00cb: ldc.i4.4 + IL_00cc: ceq + IL_00ce: brfalse IL_0195 + + IL_00d3: ldloc.s V_7 + IL_00d5: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00da: ldloc.1 + IL_00db: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00e0: stloc.s V_6 + IL_00e2: stloc.s V_5 + IL_00e4: br IL_018f + + IL_00e9: ldloc.s V_7 + IL_00eb: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00f0: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00f5: brtrue IL_0195 + + IL_00fa: br IL_0179 + + IL_00ff: ldloc.1 + IL_0100: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0105: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_010a: brfalse IL_0195 + + IL_010f: ldloc.1 + IL_0110: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0115: stloc.s V_10 + IL_0117: ldloc.s V_10 + IL_0119: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_011e: ldc.i4.2 + IL_011f: sub + IL_0120: switch ( + IL_0165) + IL_0129: ldloc.s V_10 + IL_012b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0130: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0135: brtrue.s IL_0195 + + IL_0137: ldloc.s V_10 + IL_0139: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_013e: stloc.s V_11 + IL_0140: ldloc.1 + IL_0141: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0146: stloc.s V_12 + IL_0148: ldloc.s V_12 + IL_014a: ldloc.s V_11 + IL_014c: add + IL_014d: ldc.i4.4 + IL_014e: ceq + IL_0150: brfalse.s IL_0195 + + IL_0152: ldloc.s V_10 + IL_0154: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0159: ldloc.1 + IL_015a: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_015f: stloc.s V_6 + IL_0161: stloc.s V_5 + IL_0163: br.s IL_018f + + IL_0165: ldloc.s V_10 + IL_0167: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_016c: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0171: brtrue.s IL_0195 .line 6,6 : 16,23 '' - IL_0171: ldstr "three" - IL_0176: ret + IL_0173: ldstr "three" + IL_0178: ret .line 7,7 : 16,23 '' - IL_0177: ldstr "seven" - IL_017c: ret + IL_0179: ldstr "seven" + IL_017e: ret .line 5,5 : 5,17 '' - IL_017d: ldloc.2 - IL_017e: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0183: stloc.s V_5 - IL_0185: ldloc.1 - IL_0186: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_018b: stloc.s V_6 + IL_017f: ldloc.2 + IL_0180: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0185: stloc.s V_5 + IL_0187: ldloc.1 + IL_0188: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_018d: stloc.s V_6 .line 8,8 : 29,35 '' - IL_018d: ldstr "four" - IL_0192: ret + IL_018f: ldstr "four" + IL_0194: ret .line 9,9 : 12,17 '' - IL_0193: ldstr "big" - IL_0198: ret + IL_0195: ldstr "big" + IL_019a: ret } // end of method TestFunction9b3::TestFunction9b } // end of class TestFunction9b3 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/OptionalArg01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/OptionalArg01.il.bsl index 92b9f88d01f..4474ab67ae3 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/OptionalArg01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/OptionalArg01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.7.3081.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 5:0:0:0 + .ver 4:6:0:0 } .assembly OptionalArg01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.OptionalArg01 { - // Offset: 0x00000000 Length: 0x0000045A + // Offset: 0x00000000 Length: 0x00000466 } .mresource public FSharpOptimizationData.OptionalArg01 { - // Offset: 0x00000460 Length: 0x00000445 + // Offset: 0x00000470 Length: 0x00000445 } .module OptionalArg01.exe -// MVID: {60B68B97-4F48-B5AF-A745-0383978BB660} +// MVID: {5CB489E1-4F48-B5AF-A745-0383E189B45C} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05C20000 +// Image base: 0x067B0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -61,7 +61,7 @@ // Code size 9 (0x9) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 16707566,16707566 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\OptionalArg01.fs' + .line 16707566,16707566 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\OptionalArg01.fs' IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 @@ -98,7 +98,7 @@ .custom instance void [FSharp.Core]Microsoft.FSharp.Core.OptionalArgumentAttribute::.ctor() = ( 01 00 00 00 ) .param [2] .custom instance void [FSharp.Core]Microsoft.FSharp.Core.OptionalArgumentAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 91 (0x5b) + // Code size 83 (0x53) .maxstack 4 .locals init ([0] int32 count, [1] int32 V_1, @@ -107,95 +107,85 @@ [4] class OptionalArg01/A v2) .line 10,10 : 9,44 '' IL_0000: ldarg.0 - IL_0001: brfalse.s IL_0005 + IL_0001: brfalse.s IL_0007 - IL_0003: br.s IL_0009 - - .line 8,8 : 43,48 '' - IL_0005: ldc.i4.0 + .line 8,8 : 61,70 '' + IL_0003: ldc.i4.1 .line 16707566,16707566 : 0,0 '' - IL_0006: nop - IL_0007: br.s IL_000b + IL_0004: nop + IL_0005: br.s IL_0009 - .line 8,8 : 61,70 '' - IL_0009: ldc.i4.1 + .line 8,8 : 43,48 '' + IL_0007: ldc.i4.0 .line 16707566,16707566 : 0,0 '' - IL_000a: nop + IL_0008: nop .line 16707566,16707566 : 0,0 '' - IL_000b: stloc.0 + IL_0009: stloc.0 .line 10,10 : 9,44 '' - IL_000c: ldarg.1 - IL_000d: brfalse.s IL_0011 - - IL_000f: br.s IL_0015 + IL_000a: ldarg.1 + IL_000b: brfalse.s IL_0013 - .line 9,9 : 43,48 '' - IL_0011: ldloc.0 + .line 9,9 : 61,70 '' + IL_000d: ldloc.0 + IL_000e: ldc.i4.1 + IL_000f: add .line 16707566,16707566 : 0,0 '' - IL_0012: nop - IL_0013: br.s IL_0019 + IL_0010: nop + IL_0011: br.s IL_0015 - .line 9,9 : 61,70 '' - IL_0015: ldloc.0 - IL_0016: ldc.i4.1 - IL_0017: add + .line 9,9 : 43,48 '' + IL_0013: ldloc.0 .line 16707566,16707566 : 0,0 '' - IL_0018: nop + IL_0014: nop .line 16707566,16707566 : 0,0 '' - IL_0019: stloc.1 + IL_0015: stloc.1 .line 10,10 : 9,44 '' - IL_001a: ldloc.1 - IL_001b: newobj instance void class [mscorlib]System.Collections.Generic.List`1::.ctor(int32) - IL_0020: stloc.2 - IL_0021: ldarg.0 - IL_0022: brfalse.s IL_0026 - - IL_0024: br.s IL_002a + IL_0016: ldloc.1 + IL_0017: newobj instance void class [mscorlib]System.Collections.Generic.List`1::.ctor(int32) + IL_001c: stloc.2 + IL_001d: ldarg.0 + IL_001e: brfalse.s IL_0035 + + IL_0020: ldarg.0 + IL_0021: stloc.3 + IL_0022: ldloc.3 + IL_0023: call instance !0 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::get_Value() + IL_0028: stloc.s v2 + .line 11,11 : 47,62 '' + IL_002a: ldloc.2 + IL_002b: ldloc.s v2 + IL_002d: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + .line 16707566,16707566 : 0,0 '' + IL_0032: nop + IL_0033: br.s IL_0037 .line 11,11 : 31,33 '' - IL_0026: nop + IL_0035: nop .line 16707566,16707566 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_003d - - .line 10,10 : 9,44 '' - IL_002a: ldarg.0 - IL_002b: stloc.3 - IL_002c: ldloc.3 - IL_002d: call instance !0 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::get_Value() - IL_0032: stloc.s v2 - .line 11,11 : 47,62 '' - IL_0034: ldloc.2 - IL_0035: ldloc.s v2 - IL_0037: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_0036: nop + IL_0037: ldarg.1 + IL_0038: brfalse.s IL_004f + + IL_003a: ldarg.1 + IL_003b: stloc.3 + IL_003c: ldloc.3 + IL_003d: call instance !0 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::get_Value() + IL_0042: stloc.s v2 + .line 12,12 : 47,62 '' + IL_0044: ldloc.2 + IL_0045: ldloc.s v2 + IL_0047: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) .line 16707566,16707566 : 0,0 '' - IL_003c: nop - IL_003d: ldarg.1 - IL_003e: brfalse.s IL_0042 - - IL_0040: br.s IL_0046 + IL_004c: nop + IL_004d: br.s IL_0051 .line 12,12 : 31,33 '' - IL_0042: nop - .line 16707566,16707566 : 0,0 '' - IL_0043: nop - IL_0044: br.s IL_0059 - - .line 11,11 : 47,62 '' - IL_0046: ldarg.1 - IL_0047: stloc.3 - IL_0048: ldloc.3 - IL_0049: call instance !0 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::get_Value() - IL_004e: stloc.s v2 - .line 12,12 : 47,62 '' - IL_0050: ldloc.2 - IL_0051: ldloc.s v2 - IL_0053: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_004f: nop .line 16707566,16707566 : 0,0 '' - IL_0058: nop + IL_0050: nop .line 13,13 : 9,16 '' - IL_0059: ldloc.2 - IL_005a: ret + IL_0051: ldloc.2 + IL_0052: ret } // end of method C::F } // end of class C diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple01.il.bsl index 6b7cc9c8d49..36d04a11dc5 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly Tuple01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Tuple01 { - // Offset: 0x00000000 Length: 0x0000013B + // Offset: 0x00000000 Length: 0x0000013F } .mresource public FSharpOptimizationData.Tuple01 { - // Offset: 0x00000140 Length: 0x0000004E + // Offset: 0x00000148 Length: 0x0000004E } .module Tuple01.exe -// MVID: {60B68B97-6FDB-3E0B-A745-0383978BB660} +// MVID: {59B19208-6FDB-3E0B-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07270000 +// Image base: 0x002E0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -62,7 +62,7 @@ // Code size 1 (0x1) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,10 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\Tuple01.fs' + .line 3,3 : 9,10 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Tuples\\Tuple01.fs' IL_0000: ret } // end of method $Tuple01::main@ diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple02.il.bsl index 3f0835a20bc..a668638daa3 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple02.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly Tuple02 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Tuple02 { - // Offset: 0x00000000 Length: 0x0000013B + // Offset: 0x00000000 Length: 0x0000013F } .mresource public FSharpOptimizationData.Tuple02 { - // Offset: 0x00000140 Length: 0x0000004E + // Offset: 0x00000148 Length: 0x0000004E } .module Tuple02.exe -// MVID: {60B68B97-ECCC-7D58-A745-0383978BB660} +// MVID: {59B19208-ECCC-7D58-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x070F0000 +// Image base: 0x02C00000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 9 (0x9) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,12 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\Tuple02.fs' + .line 3,3 : 9,12 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Tuples\\Tuple02.fs' IL_0000: ldc.i4.1 IL_0001: ldc.i4.2 IL_0002: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple03.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple03.il.bsl index 694e959cf21..db8af4b0cfa 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple03.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple03.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly Tuple03 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Tuple03 { - // Offset: 0x00000000 Length: 0x0000013B + // Offset: 0x00000000 Length: 0x0000013F } .mresource public FSharpOptimizationData.Tuple03 { - // Offset: 0x00000140 Length: 0x0000004E + // Offset: 0x00000148 Length: 0x0000004E } .module Tuple03.exe -// MVID: {60B68B97-AD65-A299-A745-0383978BB660} +// MVID: {59B19208-AD65-A299-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05690000 +// Image base: 0x00AF0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 10 (0xa) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,14 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\Tuple03.fs' + .line 3,3 : 9,14 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Tuples\\Tuple03.fs' IL_0000: ldc.i4.1 IL_0001: ldc.i4.2 IL_0002: ldc.i4.3 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple04.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple04.il.bsl index 67ffcf00724..a35c62c665d 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple04.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple04.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly Tuple04 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Tuple04 { - // Offset: 0x00000000 Length: 0x0000013B + // Offset: 0x00000000 Length: 0x0000013F } .mresource public FSharpOptimizationData.Tuple04 { - // Offset: 0x00000140 Length: 0x0000004E + // Offset: 0x00000148 Length: 0x0000004E } .module Tuple04.exe -// MVID: {60B68B97-6A2E-9E97-A745-0383978BB660} +// MVID: {59B19208-6A2E-9E97-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06E90000 +// Image base: 0x001E0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 11 (0xb) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,16 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\Tuple04.fs' + .line 3,3 : 9,16 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Tuples\\Tuple04.fs' IL_0000: ldc.i4.1 IL_0001: ldc.i4.2 IL_0002: ldc.i4.3 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple05.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple05.il.bsl index 0626f63d7be..07388eb7f39 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple05.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple05.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly Tuple05 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Tuple05 { - // Offset: 0x00000000 Length: 0x0000013B + // Offset: 0x00000000 Length: 0x0000013F } .mresource public FSharpOptimizationData.Tuple05 { - // Offset: 0x00000140 Length: 0x0000004E + // Offset: 0x00000148 Length: 0x0000004E } .module Tuple05.exe -// MVID: {60B68B97-349F-319F-A745-0383978BB660} +// MVID: {59B19208-349F-319F-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06BA0000 +// Image base: 0x00730000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 12 (0xc) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,18 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\Tuple05.fs' + .line 3,3 : 9,18 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Tuples\\Tuple05.fs' IL_0000: ldc.i4.1 IL_0001: ldc.i4.2 IL_0002: ldc.i4.3 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple06.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple06.il.bsl index 26e99d88dca..adbe519a887 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple06.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple06.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly Tuple06 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Tuple06 { - // Offset: 0x00000000 Length: 0x0000013B + // Offset: 0x00000000 Length: 0x0000013F } .mresource public FSharpOptimizationData.Tuple06 { - // Offset: 0x00000140 Length: 0x0000004E + // Offset: 0x00000148 Length: 0x0000004E } .module Tuple06.exe -// MVID: {60B68B97-67E0-4675-A745-0383978BB660} +// MVID: {59B19208-67E0-4675-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06A80000 +// Image base: 0x02A20000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 13 (0xd) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,20 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\Tuple06.fs' + .line 3,3 : 9,20 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Tuples\\Tuple06.fs' IL_0000: ldc.i4.1 IL_0001: ldc.i4.2 IL_0002: ldc.i4.3 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple07.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple07.il.bsl index c4d97daf2ef..e42f75990a8 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple07.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple07.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly Tuple07 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Tuple07 { - // Offset: 0x00000000 Length: 0x0000013B + // Offset: 0x00000000 Length: 0x0000013F } .mresource public FSharpOptimizationData.Tuple07 { - // Offset: 0x00000140 Length: 0x0000004E + // Offset: 0x00000148 Length: 0x0000004E } .module Tuple07.exe -// MVID: {60B68B97-7229-962D-A745-0383978BB660} +// MVID: {59B19208-7229-962D-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00F10000 +// Image base: 0x017A0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 14 (0xe) .maxstack 9 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,22 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\Tuple07.fs' + .line 3,3 : 9,22 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Tuples\\Tuple07.fs' IL_0000: ldc.i4.1 IL_0001: ldc.i4.2 IL_0002: ldc.i4.3 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple08.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple08.il.bsl index 72e7d3feed7..d029623cf32 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple08.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple08.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly Tuple08 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Tuple08 { - // Offset: 0x00000000 Length: 0x0000013B + // Offset: 0x00000000 Length: 0x0000013F } .mresource public FSharpOptimizationData.Tuple08 { - // Offset: 0x00000140 Length: 0x0000004E + // Offset: 0x00000148 Length: 0x0000004E } .module Tuple08.exe -// MVID: {60B68B97-E542-67B3-A745-0383978BB660} +// MVID: {59B19208-E542-67B3-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00E80000 +// Image base: 0x00390000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 20 (0x14) .maxstack 10 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,24 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\Tuple08.fs' + .line 3,3 : 9,24 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Tuples\\Tuple08.fs' IL_0000: ldc.i4.1 IL_0001: ldc.i4.2 IL_0002: ldc.i4.3 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleElimination.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleElimination.il.bsl index c7180964946..40147b5627c 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleElimination.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleElimination.il.bsl @@ -34,20 +34,20 @@ } .mresource public FSharpSignatureData.TupleElimination { - // Offset: 0x00000000 Length: 0x0000022A + // Offset: 0x00000000 Length: 0x00000228 } .mresource public FSharpOptimizationData.TupleElimination { // Offset: 0x00000230 Length: 0x0000007B } .module TupleElimination.exe -// MVID: {60CB69C6-DFDD-92DF-A745-0383C669CB60} +// MVID: {5F1FA088-DFDD-92DF-A745-038388A01F5F} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06AF0000 +// Image base: 0x07100000 // =============== CLASS MEMBERS DECLARATION =================== @@ -62,7 +62,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 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\TupleElimination.fs' + .line 5,5 : 15,27 'C:\\kevinransom\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\TupleElimination.fs' IL_0000: ldstr "%A" IL_0005: 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) IL_000a: stloc.0 @@ -83,9 +83,9 @@ // Code size 79 (0x4f) .maxstack 5 .locals init ([0] class [mscorlib]System.Collections.Generic.Dictionary`2 dic, - [1] int32 i, - [2] bool b, - [3] int64 l, + [1] int32 V_1, + [2] bool V_2, + [3] int64 V_3, [4] bool V_4, [5] class [mscorlib]System.Tuple`2 t) .line 7,7 : 5,64 '' @@ -94,7 +94,7 @@ .line 9,9 : 31,48 '' IL_0006: ldloc.0 IL_0007: ldc.i4.1 - IL_0008: ldloca.s i + IL_0008: ldloca.s V_1 IL_000a: callvirt instance bool class [mscorlib]System.Collections.Generic.Dictionary`2::TryGetValue(!0, !1&) IL_000f: stloc.2 @@ -108,7 +108,7 @@ IL_001d: nop .line 14,14 : 38,65 '' IL_001e: ldstr "123" - IL_0023: ldloca.s l + IL_0023: ldloca.s V_3 IL_0025: call bool [mscorlib]System.Int64::TryParse(string, int64&) IL_002a: stloc.s V_4 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleMonster.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleMonster.il.bsl index 0a2af12cc38..1626f867b9d 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleMonster.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleMonster.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:1:0 } .assembly TupleMonster { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TupleMonster { - // Offset: 0x00000000 Length: 0x00000145 + // Offset: 0x00000000 Length: 0x00000149 } .mresource public FSharpOptimizationData.TupleMonster { // Offset: 0x00000150 Length: 0x00000053 } .module TupleMonster.exe -// MVID: {60B68B97-1552-41D8-A745-0383978BB660} +// MVID: {59B19208-1552-41D8-A745-03830892B159} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07110000 +// Image base: 0x010B0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 74 (0x4a) .maxstack 28 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,137 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\TupleMonster.fs' + .line 3,3 : 9,137 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Tuples\\TupleMonster.fs' IL_0000: ldc.i4.s 97 IL_0002: ldc.i4.s 98 IL_0004: ldc.i4.s 99 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/ValueTupleAliasConstructor.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/ValueTupleAliasConstructor.il.bsl index 7682c8bfd4f..768deb722a1 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/ValueTupleAliasConstructor.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/ValueTupleAliasConstructor.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,7 +13,12 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 5:0:0:0 + .ver 4:5:0:0 +} +.assembly extern System.ValueTuple +{ + .publickeytoken = (CC 7B 13 FF CD 2D DD 51 ) // .{...-.Q + .ver 4:0:1:0 } .assembly ValueTupleAliasConstructor { @@ -29,20 +34,20 @@ } .mresource public FSharpSignatureData.ValueTupleAliasConstructor { - // Offset: 0x00000000 Length: 0x000001E0 + // Offset: 0x00000000 Length: 0x000001EA } .mresource public FSharpOptimizationData.ValueTupleAliasConstructor { - // Offset: 0x000001E8 Length: 0x00000061 + // Offset: 0x000001F0 Length: 0x00000061 } .module ValueTupleAliasConstructor.exe -// MVID: {60B68B97-A8CF-BB34-A745-0383978BB660} +// MVID: {5B9C53DD-A8CF-BB34-A745-0383DD539C5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00B60000 +// Image base: 0x01B00000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,11 +71,11 @@ // Code size 9 (0x9) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,22 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\ValueTupleAliasConstructor.fs' + .line 3,3 : 9,22 'c:\\kevinransom\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Tuples\\ValueTupleAliasConstructor.fs' IL_0000: ldc.i4.2 IL_0001: ldc.i4.2 - IL_0002: newobj instance void valuetype [mscorlib]System.ValueTuple`2::.ctor(!0, - !1) + IL_0002: newobj instance void valuetype [System.ValueTuple]System.ValueTuple`2::.ctor(!0, + !1) IL_0007: pop IL_0008: ret } // end of method $ValueTupleAliasConstructor::main@ diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fs b/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fs index 324a05b273f..0c3c619c33e 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fs +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fs @@ -7,6 +7,7 @@ //section='- OUTPUT FILES - ' ! option=delaysign kind=OptionSwitch //section='- OUTPUT FILES - ' ! option=doc kind=OptionString //section='- OUTPUT FILES - ' ! option=keyfile kind=OptionString +//section='- OUTPUT FILES - ' ! option=keycontainer kind=OptionString //section='- OUTPUT FILES - ' ! option=platform kind=OptionString //section='- OUTPUT FILES - ' ! option=nooptimizationdata kind=OptionUnit //section='- OUTPUT FILES - ' ! option=nointerfacedata kind=OptionUnit diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fsx b/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fsx index bfc350a2b86..e0d7d42cc87 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fsx +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fsx @@ -107,6 +107,7 @@ //section='- OUTPUT FILES - ' ! option=delaysign kind=OptionSwitch //section='- OUTPUT FILES - ' ! option=doc kind=OptionString //section='- OUTPUT FILES - ' ! option=keyfile kind=OptionString +//section='- OUTPUT FILES - ' ! option=keycontainer kind=OptionString //section='- OUTPUT FILES - ' ! option=platform kind=OptionString //section='- OUTPUT FILES - ' ! option=nooptimizationdata kind=OptionUnit //section='- OUTPUT FILES - ' ! option=nointerfacedata kind=OptionUnit 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 853541eca4d..eb506e9147f 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl @@ -20,6 +20,7 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. --doc: Write the xmldoc of the assembly to the given file --keyfile: Specify a strong name key file +--keycontainer: Specify a strong name key container --platform: Limit which platforms this code can run on: x86, Itanium, x64, anycpu32bitpreferred, or anycpu. The @@ -34,9 +35,6 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. F#-specific metadata --sig: Print the inferred interface of the assembly to a file ---allsigs Print the inferred interfaces of all - compilation files to associated - signature files --nocopyfsharpcore Don't copy FSharp.Core.dll along the produced binaries @@ -50,7 +48,6 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. - RESOURCES - ---win32icon: Specify a Win32 icon file (.ico) --win32res: Specify a Win32 resource file (.res) --win32manifest: Specify a Win32 manifest file --nowin32manifest Do not include the default Win32 diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/warnaserror/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/warnaserror/env.lst index 815335d76d3..c43a82a48dd 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/warnaserror/env.lst +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/warnaserror/env.lst @@ -9,11 +9,9 @@ SOURCE=t6.fs SCFLAGS="--warnaserror+ --warnaserror+:25" # t6.fs enabled, incl list with one warning, list with 1 element SOURCE=t7.fs SCFLAGS="--warnaserror- --warnaserror-:25,26,988" # t7.fs disabled, excl list with all warnings, list with >1 element - SOURCE=t8.fs SCFLAGS="--warnaserror- --warnaserror-:25,26" # t8.fs disabled, excl list with some warning, list with >1 element - SOURCE=t9.fs SCFLAGS="--warnaserror- --warnaserror-:25" # t9.fs disabled, excl list with one warning, list with 1 element + SOURCE=t8.fs SCFLAGS="--warnaserror- --warnaserror-:25,26" # t8.fs disabled, excl list with some warning, list with >1 element + SOURCE=t9.fs SCFLAGS="--warnaserror- --warnaserror-:25" # t9.fs disabled, excl list with one warning, list with 1 element SOURCE=t10.fs SCFLAGS="--warnaserror- --warnaserror+:25,26,988" # t10.fs disabled, incl list with all warnings, list with >1 element - SOURCE=t11.fs SCFLAGS="--warnaserror- --warnaserror+:25,26" # t11.fs disabled, incl list with some warning, list with >1 element + SOURCE=t11.fs SCFLAGS="--warnaserror- --warnaserror+:25,26" # t11.fs disabled, incl list with some warning, list with >1 element SOURCE=t12.fs SCFLAGS="--warnaserror- --warnaserror+:25" # t12.fs disabled, incl list with one warning, list with 1 element - - SOURCE=t12.fs SCFLAGS="--warnaserror- --warnaserror+:25,nu0001,fs0001" # t12a.fs disabled, incl list with one warning, list with 1 element diff --git a/tests/fsharpqa/Source/Conformance/BasicTypeAndModuleDefinitions/UnionTypes/W_UnionCaseProduction01.fsx b/tests/fsharpqa/Source/Conformance/BasicTypeAndModuleDefinitions/UnionTypes/W_UnionCaseProduction01.fsx index 9b9226b076e..2efcd15a035 100644 --- a/tests/fsharpqa/Source/Conformance/BasicTypeAndModuleDefinitions/UnionTypes/W_UnionCaseProduction01.fsx +++ b/tests/fsharpqa/Source/Conformance/BasicTypeAndModuleDefinitions/UnionTypes/W_UnionCaseProduction01.fsx @@ -4,8 +4,7 @@ // | id -- nullary union case // | id of type * ... * type -- n-ary union case // | id : sig-spec -- n-ary union case -//This construct is deprecated: it is only for use in the F# library -//This construct is deprecated: it is only for use in the F# library +//This construct is deprecated: it is only for use in the F# library #light type T = | D : int -> T diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/CustomAttributes/Basic/E_StructLayout.fs b/tests/fsharpqa/Source/Conformance/DeclarationElements/CustomAttributes/Basic/E_StructLayout.fs index 3a3c7a5419a..7a31a7e5a4d 100644 --- a/tests/fsharpqa/Source/Conformance/DeclarationElements/CustomAttributes/Basic/E_StructLayout.fs +++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/CustomAttributes/Basic/E_StructLayout.fs @@ -1,8 +1,8 @@ // #Regression #Conformance #DeclarationElements #Attributes // Tests to ensure that you can't use StructLayout inappropriately // Regression tests for FSHARP1.0:5931 -//The type 'SExplicitBroken' has been marked as having an Explicit layout, but the field 'v2' has not been marked with the 'FieldOffset' attribute$ -//The FieldOffset attribute can only be placed on members of types marked with the StructLayout\(LayoutKind\.Explicit\)$ +//The type 'SExplicitBroken' has been marked as having an Explicit layout, but the field 'v2' has not been marked with the 'FieldOffset' attribute$ +//The FieldOffset attribute can only be placed on members of types marked with the StructLayout\(LayoutKind\.Explicit\)$ module M diff --git a/tests/fsharpqa/Source/Conformance/ImplementationFilesAndSignatureFiles/SignatureFiles/E_MissingSourceFile01.fsi b/tests/fsharpqa/Source/Conformance/ImplementationFilesAndSignatureFiles/SignatureFiles/E_MissingSourceFile01.fsi index efa1bd825eb..f5f53a17593 100644 --- a/tests/fsharpqa/Source/Conformance/ImplementationFilesAndSignatureFiles/SignatureFiles/E_MissingSourceFile01.fsi +++ b/tests/fsharpqa/Source/Conformance/ImplementationFilesAndSignatureFiles/SignatureFiles/E_MissingSourceFile01.fsi @@ -1,7 +1,7 @@ // #Regression #Conformance #SignatureFiles // Test you get an error if you specify an .fsi file but not the corresponding .fs file. -//The signature file 'E_MissingSourceFile01' does not have a corresponding implementation file\. If an implementation file exists then check the 'module' and 'namespace' declarations in the signature and implementation files match +//The signature file 'E_MissingSourceFile01' does not have a corresponding implementation file\. If an implementation file exists then check the 'module' and 'namespace' declarations in the signature and implementation files match namespace FSharp.Testing.MissingSourceFile01 diff --git a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/ConditionalCompilation/E_MustBeIdent02.fs b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/ConditionalCompilation/E_MustBeIdent02.fs index 09dee4fbf57..8e204947133 100644 --- a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/ConditionalCompilation/E_MustBeIdent02.fs +++ b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/ConditionalCompilation/E_MustBeIdent02.fs @@ -1,9 +1,10 @@ -// #Regression #Conformance #LexicalAnalysis +// #Regression #Conformance #LexicalAnalysis // Regression test for FSHARP1.0:1419 -//The type 'if_' is not defined. -//The type 'endif_' is not defined. +//#if directive should be immediately followed by an identifier +//#endif has no matching #if in pattern +//Unmatched '\(' #light let t8 (x : #if_) = () let t7 (x : #endif_) = () -exit 1 \ No newline at end of file +exit 1 diff --git a/tests/fsharpqa/Source/Conformance/SpecialAttributesAndTypes/Imported/System.ThreadStatic/W_Deprecated01.fs b/tests/fsharpqa/Source/Conformance/SpecialAttributesAndTypes/Imported/System.ThreadStatic/W_Deprecated01.fs index 60f29755a2a..fab0d7f9e46 100644 --- a/tests/fsharpqa/Source/Conformance/SpecialAttributesAndTypes/Imported/System.ThreadStatic/W_Deprecated01.fs +++ b/tests/fsharpqa/Source/Conformance/SpecialAttributesAndTypes/Imported/System.ThreadStatic/W_Deprecated01.fs @@ -1,7 +1,7 @@ // #Regression #Conformance #Attributes // Regression test for FSHARP1.0:4226 // We want to make sure the warning emits the correct suggestion (val and mutable were swapped) -//Thread static and context static 'let' bindings are deprecated\. Instead use a declaration of the form 'static val mutable : ' in a class\. Add the 'DefaultValue' attribute to this declaration to indicate that the value is initialized to the default value on each new thread\.$ +//Thread static and context static 'let' bindings are deprecated\. Instead use a declaration of the form 'static val mutable : ' in a class\. Add the 'DefaultValue' attribute to this declaration to indicate that the value is initialized to the default value on each new thread\.$ module M module Foo = [] diff --git a/tests/fsharpqa/Source/Conformance/TypesAndTypeConstraints/TypeParameterDefinitions/HashConstraint02.fs b/tests/fsharpqa/Source/Conformance/TypesAndTypeConstraints/TypeParameterDefinitions/HashConstraint02.fs index fe215d60f9e..24f94f08d3e 100644 --- a/tests/fsharpqa/Source/Conformance/TypesAndTypeConstraints/TypeParameterDefinitions/HashConstraint02.fs +++ b/tests/fsharpqa/Source/Conformance/TypesAndTypeConstraints/TypeParameterDefinitions/HashConstraint02.fs @@ -1,7 +1,8 @@ // #Regression #Conformance #TypeConstraints // Regression test for FSHARP1.0:1419 // Tokens beginning with # should not match greedily with directives -//The type 'float' is not compatible with the type 'light_' +// The only case where we are still a bit confused is #light: for this reason the code +// below compiles just fine (it would not work if I replace #light with #r for example) #light type light_() = class diff --git a/tests/fsharpqa/Source/Diagnostics/General/W_LowercaseLiteralNotIgnored.fs b/tests/fsharpqa/Source/Diagnostics/General/W_LowercaseLiteralNotIgnored.fs index 7e77c8228be..6e45e9cff04 100644 --- a/tests/fsharpqa/Source/Diagnostics/General/W_LowercaseLiteralNotIgnored.fs +++ b/tests/fsharpqa/Source/Diagnostics/General/W_LowercaseLiteralNotIgnored.fs @@ -1,5 +1,5 @@ // #Regression #Diagnostics -//This rule will never be matched$ +//This rule will never be matched$ module M0 module m1 = diff --git a/tests/fsharpqa/Source/EntryPoint/E_twoentrypoints001.fs b/tests/fsharpqa/Source/EntryPoint/E_twoentrypoints001.fs index ab5028ccc8a..2570a557776 100644 --- a/tests/fsharpqa/Source/EntryPoint/E_twoentrypoints001.fs +++ b/tests/fsharpqa/Source/EntryPoint/E_twoentrypoints001.fs @@ -3,7 +3,7 @@ // Explicit program entry point: [] // attribute on multiple functions //Hello -//A function labeled with the 'EntryPointAttribute' attribute must be the last declaration in the last file in the compilation sequence. +//A function labeled with the 'EntryPointAttribute' attribute must be the last declaration in the last file in the compilation sequence. #light module M = diff --git a/tests/fsharpqa/Source/InteractiveSession/Misc/UnknownDependencyManager/script1.fsx b/tests/fsharpqa/Source/InteractiveSession/Misc/UnknownDependencyManager/script1.fsx index 2c30ed8ff15..b5365a617af 100644 --- a/tests/fsharpqa/Source/InteractiveSession/Misc/UnknownDependencyManager/script1.fsx +++ b/tests/fsharpqa/Source/InteractiveSession/Misc/UnknownDependencyManager/script1.fsx @@ -1,5 +1,5 @@ -//Package manager key 'unk' was not registered -//Processing of a script fragment has stopped because an exception has been raised +//Package manager key 'unk' was not registered +//Processing of a script fragment has stopped because an exception has been raised #r "unk: blubblub" diff --git a/tests/fsharpqa/Source/Optimizations/Inlining/StructUnion01.il.bsl b/tests/fsharpqa/Source/Optimizations/Inlining/StructUnion01.il.bsl index 164a3ee6567..7e07ff48ffd 100644 --- a/tests/fsharpqa/Source/Optimizations/Inlining/StructUnion01.il.bsl +++ b/tests/fsharpqa/Source/Optimizations/Inlining/StructUnion01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 +// 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 5:0:0:0 + .ver 4:4:3:0 } .assembly StructUnion01 { @@ -25,20 +25,20 @@ } .mresource public FSharpSignatureData.StructUnion01 { - // Offset: 0x00000000 Length: 0x0000087A + // Offset: 0x00000000 Length: 0x0000087E } .mresource public FSharpOptimizationData.StructUnion01 { - // Offset: 0x00000880 Length: 0x00000421 + // Offset: 0x00000888 Length: 0x00000421 } .module StructUnion01.dll -// MVID: {60B6A4C9-D3E9-6B24-A745-0383C9A4B660} +// MVID: {5B1ED843-D3E9-6B24-A745-038343D81E5B} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06CE0000 +// Image base: 0x017F0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -374,14 +374,15 @@ class [mscorlib]System.Collections.IEqualityComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 54 (0x36) + // Code size 52 (0x34) .maxstack 4 .locals init (valuetype StructUnion01/U V_0) IL_0000: ldarg.1 IL_0001: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::TypeTestGeneric(object) IL_0006: brtrue.s IL_000a - IL_0008: br.s IL_0034 + IL_0008: ldc.i4.0 + IL_0009: ret IL_000a: ldarg.1 IL_000b: unbox.any StructUnion01/U @@ -403,9 +404,6 @@ IL_0032: ldc.i4.0 IL_0033: ret - - IL_0034: ldc.i4.0 - IL_0035: ret } // end of method U::Equals .method public hidebysig virtual final @@ -437,22 +435,20 @@ instance bool Equals(object obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 25 (0x19) + // Code size 23 (0x17) .maxstack 8 IL_0000: ldarg.1 IL_0001: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::TypeTestGeneric(object) IL_0006: brtrue.s IL_000a - IL_0008: br.s IL_0017 + IL_0008: ldc.i4.0 + IL_0009: ret IL_000a: ldarg.0 IL_000b: ldarg.1 IL_000c: unbox.any StructUnion01/U IL_0011: call instance bool StructUnion01/U::Equals(valuetype StructUnion01/U) IL_0016: ret - - IL_0017: ldc.i4.0 - IL_0018: ret } // end of method U::Equals .property instance int32 Tag() @@ -508,33 +504,31 @@ .method public static int32 g3(valuetype StructUnion01/U x) cil managed { - // Code size 44 (0x2c) + // Code size 42 (0x2a) .maxstack 8 IL_0000: ldarga.s x IL_0002: ldfld int32 StructUnion01/U::item1 IL_0007: ldc.i4.3 IL_0008: sub IL_0009: switch ( - IL_0014) - IL_0012: br.s IL_001c - - IL_0014: ldarga.s x - IL_0016: ldfld int32 StructUnion01/U::item2 - IL_001b: ret - - IL_001c: ldarga.s x - IL_001e: ldfld int32 StructUnion01/U::item1 - IL_0023: ldarga.s x - IL_0025: ldfld int32 StructUnion01/U::item2 - IL_002a: add - IL_002b: ret + IL_0022) + IL_0012: ldarga.s x + IL_0014: ldfld int32 StructUnion01/U::item1 + IL_0019: ldarga.s x + IL_001b: ldfld int32 StructUnion01/U::item2 + IL_0020: add + IL_0021: ret + + IL_0022: ldarga.s x + IL_0024: ldfld int32 StructUnion01/U::item2 + IL_0029: ret } // end of method StructUnion01::g3 .method public static int32 g4(valuetype StructUnion01/U x, valuetype StructUnion01/U y) 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 128 (0x80) + // Code size 126 (0x7e) .maxstack 6 .locals init (int32 V_0, int32 V_1, @@ -545,56 +539,54 @@ IL_0007: ldc.i4.3 IL_0008: sub IL_0009: switch ( - IL_0014) - IL_0012: br.s IL_0058 - - IL_0014: ldarga.s y - IL_0016: ldfld int32 StructUnion01/U::item1 - IL_001b: ldc.i4.5 - IL_001c: sub - IL_001d: switch ( - IL_0048) - IL_0026: ldarga.s y - IL_0028: ldfld int32 StructUnion01/U::item2 - IL_002d: ldarga.s y - IL_002f: ldfld int32 StructUnion01/U::item1 - IL_0034: ldarga.s x - IL_0036: ldfld int32 StructUnion01/U::item2 - IL_003b: ldarga.s x - IL_003d: ldfld int32 StructUnion01/U::item1 - IL_0042: stloc.3 - IL_0043: stloc.2 - IL_0044: stloc.1 - IL_0045: stloc.0 - IL_0046: br.s IL_0078 - - IL_0048: ldarga.s x - IL_004a: ldfld int32 StructUnion01/U::item2 - IL_004f: ldarga.s y - IL_0051: ldfld int32 StructUnion01/U::item2 - IL_0056: add - IL_0057: ret - - IL_0058: ldarga.s y - IL_005a: ldfld int32 StructUnion01/U::item2 - IL_005f: stloc.0 - IL_0060: ldarga.s y - IL_0062: ldfld int32 StructUnion01/U::item1 - IL_0067: stloc.1 - IL_0068: ldarga.s x - IL_006a: ldfld int32 StructUnion01/U::item2 - IL_006f: stloc.2 - IL_0070: ldarga.s x - IL_0072: ldfld int32 StructUnion01/U::item1 - IL_0077: stloc.3 - IL_0078: ldloc.3 - IL_0079: ldloc.2 - IL_007a: add - IL_007b: ldloc.1 + IL_003a) + IL_0012: ldarga.s y + IL_0014: ldfld int32 StructUnion01/U::item2 + IL_0019: stloc.0 + IL_001a: ldarga.s y + IL_001c: ldfld int32 StructUnion01/U::item1 + IL_0021: stloc.1 + IL_0022: ldarga.s x + IL_0024: ldfld int32 StructUnion01/U::item2 + IL_0029: stloc.2 + IL_002a: ldarga.s x + IL_002c: ldfld int32 StructUnion01/U::item1 + IL_0031: stloc.3 + IL_0032: ldloc.3 + IL_0033: ldloc.2 + IL_0034: add + IL_0035: ldloc.1 + IL_0036: add + IL_0037: ldloc.0 + IL_0038: add + IL_0039: ret + + IL_003a: ldarga.s y + IL_003c: ldfld int32 StructUnion01/U::item1 + IL_0041: ldc.i4.5 + IL_0042: sub + IL_0043: switch ( + IL_006e) + IL_004c: ldarga.s y + IL_004e: ldfld int32 StructUnion01/U::item2 + IL_0053: ldarga.s y + IL_0055: ldfld int32 StructUnion01/U::item1 + IL_005a: ldarga.s x + IL_005c: ldfld int32 StructUnion01/U::item2 + IL_0061: ldarga.s x + IL_0063: ldfld int32 StructUnion01/U::item1 + IL_0068: stloc.3 + IL_0069: stloc.2 + IL_006a: stloc.1 + IL_006b: stloc.0 + IL_006c: br.s IL_0032 + + IL_006e: ldarga.s x + IL_0070: ldfld int32 StructUnion01/U::item2 + IL_0075: ldarga.s y + IL_0077: ldfld int32 StructUnion01/U::item2 IL_007c: add - IL_007d: ldloc.0 - IL_007e: add - IL_007f: ret + IL_007d: ret } // end of method StructUnion01::g4 .method public static int32 f1(valuetype StructUnion01/U& x) cil managed @@ -623,33 +615,31 @@ .method public static int32 f3(valuetype StructUnion01/U& x) cil managed { - // Code size 40 (0x28) + // Code size 38 (0x26) .maxstack 8 IL_0000: ldarg.0 IL_0001: ldfld int32 StructUnion01/U::item1 IL_0006: ldc.i4.3 IL_0007: sub IL_0008: switch ( - IL_0013) - IL_0011: br.s IL_001a - - IL_0013: ldarg.0 - IL_0014: ldfld int32 StructUnion01/U::item2 - IL_0019: ret - - IL_001a: ldarg.0 - IL_001b: ldfld int32 StructUnion01/U::item1 - IL_0020: ldarg.0 - IL_0021: ldfld int32 StructUnion01/U::item2 - IL_0026: add - IL_0027: ret + IL_001f) + IL_0011: ldarg.0 + IL_0012: ldfld int32 StructUnion01/U::item1 + IL_0017: ldarg.0 + IL_0018: ldfld int32 StructUnion01/U::item2 + IL_001d: add + IL_001e: ret + + IL_001f: ldarg.0 + IL_0020: ldfld int32 StructUnion01/U::item2 + IL_0025: ret } // end of method StructUnion01::f3 .method public static int32 f4(valuetype StructUnion01/U& x, valuetype StructUnion01/U& y) 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 148 (0x94) + // Code size 146 (0x92) .maxstack 6 .locals init (valuetype StructUnion01/U V_0, valuetype StructUnion01/U V_1, @@ -668,56 +658,54 @@ IL_0015: ldc.i4.3 IL_0016: sub IL_0017: switch ( - IL_0022) - IL_0020: br.s IL_0068 - - IL_0022: ldloca.s V_1 - IL_0024: ldfld int32 StructUnion01/U::item1 - IL_0029: ldc.i4.5 - IL_002a: sub - IL_002b: switch ( - IL_0058) - IL_0034: ldloca.s V_1 - IL_0036: ldfld int32 StructUnion01/U::item2 - IL_003b: ldloca.s V_1 - IL_003d: ldfld int32 StructUnion01/U::item1 - IL_0042: ldloca.s V_0 - IL_0044: ldfld int32 StructUnion01/U::item2 - IL_0049: ldloca.s V_0 - IL_004b: ldfld int32 StructUnion01/U::item1 - IL_0050: stloc.s V_5 - IL_0052: stloc.s V_4 - IL_0054: stloc.3 - IL_0055: stloc.2 - IL_0056: br.s IL_008a - - IL_0058: ldloca.s V_0 - IL_005a: ldfld int32 StructUnion01/U::item2 - IL_005f: ldloca.s V_1 - IL_0061: ldfld int32 StructUnion01/U::item2 - IL_0066: add - IL_0067: ret - - IL_0068: ldloca.s V_1 - IL_006a: ldfld int32 StructUnion01/U::item2 - IL_006f: stloc.2 - IL_0070: ldloca.s V_1 - IL_0072: ldfld int32 StructUnion01/U::item1 - IL_0077: stloc.3 - IL_0078: ldloca.s V_0 - IL_007a: ldfld int32 StructUnion01/U::item2 - IL_007f: stloc.s V_4 - IL_0081: ldloca.s V_0 - IL_0083: ldfld int32 StructUnion01/U::item1 - IL_0088: stloc.s V_5 - IL_008a: ldloc.s V_5 - IL_008c: ldloc.s V_4 - IL_008e: add - IL_008f: ldloc.3 + IL_004c) + IL_0020: ldloca.s V_1 + IL_0022: ldfld int32 StructUnion01/U::item2 + IL_0027: stloc.2 + IL_0028: ldloca.s V_1 + IL_002a: ldfld int32 StructUnion01/U::item1 + IL_002f: stloc.3 + IL_0030: ldloca.s V_0 + IL_0032: ldfld int32 StructUnion01/U::item2 + IL_0037: stloc.s V_4 + IL_0039: ldloca.s V_0 + IL_003b: ldfld int32 StructUnion01/U::item1 + IL_0040: stloc.s V_5 + IL_0042: ldloc.s V_5 + IL_0044: ldloc.s V_4 + IL_0046: add + IL_0047: ldloc.3 + IL_0048: add + IL_0049: ldloc.2 + IL_004a: add + IL_004b: ret + + IL_004c: ldloca.s V_1 + IL_004e: ldfld int32 StructUnion01/U::item1 + IL_0053: ldc.i4.5 + IL_0054: sub + IL_0055: switch ( + IL_0082) + IL_005e: ldloca.s V_1 + IL_0060: ldfld int32 StructUnion01/U::item2 + IL_0065: ldloca.s V_1 + IL_0067: ldfld int32 StructUnion01/U::item1 + IL_006c: ldloca.s V_0 + IL_006e: ldfld int32 StructUnion01/U::item2 + IL_0073: ldloca.s V_0 + IL_0075: ldfld int32 StructUnion01/U::item1 + IL_007a: stloc.s V_5 + IL_007c: stloc.s V_4 + IL_007e: stloc.3 + IL_007f: stloc.2 + IL_0080: br.s IL_0042 + + IL_0082: ldloca.s V_0 + IL_0084: ldfld int32 StructUnion01/U::item2 + IL_0089: ldloca.s V_1 + IL_008b: ldfld int32 StructUnion01/U::item2 IL_0090: add - IL_0091: ldloc.2 - IL_0092: add - IL_0093: ret + IL_0091: ret } // end of method StructUnion01::f4 } // end of class StructUnion01 diff --git a/tests/fsharpqa/testenv/bin/KnownFailRewriter.fsx b/tests/fsharpqa/testenv/bin/KnownFailRewriter.fsx index e2a5ebfb331..df8ec8f2ad8 100644 --- a/tests/fsharpqa/testenv/bin/KnownFailRewriter.fsx +++ b/tests/fsharpqa/testenv/bin/KnownFailRewriter.fsx @@ -102,7 +102,7 @@ module FSharpInfo = let IsFSharpCompilerDebug () = let o = Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FSharp\4.1\Runtime\v4.0", null, null) if o <> null then - let path = System.IO.Path.Combine( o :?> string, "FSharp.Compiler.Service.dll") + let path = System.IO.Path.Combine( o :?> string, "FSharp.Compiler.Private.dll") let asm = System.Reflection.Assembly.LoadFrom(path) match asm.GetCustomAttributes(typeof, false) with diff --git a/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj b/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj index eb1bde254d8..f89e94f3e05 100644 --- a/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj +++ b/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj @@ -8,10 +8,8 @@ true false $(RepoRoot)tests\fsharpqa\testenv\bin - $(NoWarn);44 AnyCPU true - true @@ -21,7 +19,7 @@ - + diff --git a/tests/fsharpqa/testenv/src/HostedCompilerServer/Program.fs b/tests/fsharpqa/testenv/src/HostedCompilerServer/Program.fs index 775e3897901..858382b9f26 100644 --- a/tests/fsharpqa/testenv/src/HostedCompilerServer/Program.fs +++ b/tests/fsharpqa/testenv/src/HostedCompilerServer/Program.fs @@ -1,11 +1,14 @@ namespace MLang.Test open System +open System.IO open System.Net open System.Net.Sockets open System.Text -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.CodeAnalysis.Hosted +open System.Threading +open System.Linq +open FSharp.Compiler +open Legacy.FSharp.Compiler.Hosted [] module Log = diff --git a/tests/fsharpqa/testenv/src/PEVerify/PEVerify.csproj b/tests/fsharpqa/testenv/src/PEVerify/PEVerify.csproj index affe87d5293..2a136927b32 100644 --- a/tests/fsharpqa/testenv/src/PEVerify/PEVerify.csproj +++ b/tests/fsharpqa/testenv/src/PEVerify/PEVerify.csproj @@ -2,8 +2,8 @@ Exe - net472;net5.0 - net5.0 + net472;netcoreapp3.1 + netcoreapp3.1 $(NoWarn);1591 diff --git a/tests/service/AssemblyContentProviderTests.fs b/tests/service/AssemblyContentProviderTests.fs index e3fe4d556a6..c80842d9f87 100644 --- a/tests/service/AssemblyContentProviderTests.fs +++ b/tests/service/AssemblyContentProviderTests.fs @@ -11,8 +11,7 @@ open System open System.IO open System.Text open NUnit.Framework -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices +open FSharp.Compiler.SourceCodeServices let private filePath = "C:\\test.fs" @@ -27,6 +26,7 @@ let private projectOptions : FSharpProjectOptions = LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None + ExtraProjectInfo = None Stamp = None } let private checker = FSharpChecker.Create() @@ -51,7 +51,7 @@ let (=>) (source: string) (expected: string list) = | FSharpCheckFileAnswer.Succeeded(checkFileResults) -> checkFileResults let actual = - AssemblyContent.GetAssemblySignatureContent AssemblyContentType.Full checkFileResults.PartialAssemblySignature + AssemblyContentProvider.getAssemblySignatureContent AssemblyContentType.Full checkFileResults.PartialAssemblySignature |> List.map (fun x -> x.CleanedIdents |> String.concat ".") |> List.sort diff --git a/tests/service/AssemblyReaderShim.fs b/tests/service/AssemblyReaderShim.fs index 8e8d18efe2a..71ad67809db 100644 --- a/tests/service/AssemblyReaderShim.fs +++ b/tests/service/AssemblyReaderShim.fs @@ -8,7 +8,6 @@ module FSharp.Compiler.Service.Tests.AssemblyReaderShim #endif open FsUnit -open FSharp.Compiler.Text open FSharp.Compiler.AbstractIL.ILBinaryReader open NUnit.Framework @@ -29,5 +28,5 @@ let x = 123 """ let fileName, options = Common.mkTestFileAndOptions source [| |] - Common.checker.ParseAndCheckFileInProject(fileName, 0, SourceText.ofString source, options) |> Async.RunSynchronously |> ignore + Common.checker.ParseAndCheckFileInProject(fileName, 0, FSharp.Compiler.Text.SourceText.ofString source, options) |> Async.RunSynchronously |> ignore gotRequest |> should be True diff --git a/tests/service/CSharpProjectAnalysis.fs b/tests/service/CSharpProjectAnalysis.fs index 27d01a80128..10fd567ad39 100644 --- a/tests/service/CSharpProjectAnalysis.fs +++ b/tests/service/CSharpProjectAnalysis.fs @@ -9,34 +9,32 @@ module FSharp.Compiler.Service.Tests.CSharpProjectAnalysis #endif + open NUnit.Framework open FsUnit open System.IO -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.IO +open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Service.Tests.Common -open FSharp.Compiler.Symbols -let internal getProjectReferences (content: string, dllFiles, libDirs, otherFlags) = +let internal getProjectReferences (content, dllFiles, libDirs, otherFlags) = let otherFlags = defaultArg otherFlags [] let libDirs = defaultArg libDirs [] let base1 = Path.GetTempFileName() let dllName = Path.ChangeExtension(base1, ".dll") let fileName1 = Path.ChangeExtension(base1, ".fs") let projFileName = Path.ChangeExtension(base1, ".fsproj") - FileSystem.OpenFileForWriteShim(fileName1).Write(content) + File.WriteAllText(fileName1, content) let options = checker.GetProjectOptionsFromCommandLineArgs(projFileName, - [| yield "--debug:full" - yield "--define:DEBUG" - yield "--optimize-" + [| yield "--debug:full" + yield "--define:DEBUG" + yield "--optimize-" yield "--out:" + dllName - yield "--doc:test.xml" - yield "--warn:3" - yield "--fullpaths" - yield "--flaterrors" - yield "--target:library" + yield "--doc:test.xml" + yield "--warn:3" + yield "--fullpaths" + yield "--flaterrors" + yield "--target:library" for dllFile in dllFiles do yield "-r:"+dllFile for libDir in libDirs do @@ -46,8 +44,8 @@ let internal getProjectReferences (content: string, dllFiles, libDirs, otherFlag let results = checker.ParseAndCheckProject(options) |> Async.RunSynchronously if results.HasCriticalErrors then let builder = new System.Text.StringBuilder() - for err in results.Diagnostics do - builder.AppendLine(sprintf "**** %s: %s" (if err.Severity = FSharpDiagnosticSeverity.Error then "error" else "warning") err.Message) + for err in results.Errors do + builder.AppendLine(sprintf "**** %s: %s" (if err.Severity = FSharpErrorSeverity.Error then "error" else "warning") err.Message) |> ignore failwith (builder.ToString()) let assemblies = @@ -57,17 +55,19 @@ let internal getProjectReferences (content: string, dllFiles, libDirs, otherFlag results, assemblies [] +#if NETCOREAPP [] -let ``Test that csharp references are recognized as such`` () = +#endif +let ``Test that csharp references are recognized as such`` () = let csharpAssembly = PathRelativeToTestAssembly "CSharp_Analysis.dll" let _, table = getProjectReferences("""module M""", [csharpAssembly], None, None) let assembly = table.["CSharp_Analysis"] - let search = assembly.Contents.Entities |> Seq.tryFind (fun e -> e.DisplayName = "CSharpClass") + let search = assembly.Contents.Entities |> Seq.tryFind (fun e -> e.DisplayName = "CSharpClass") Assert.True search.IsSome let found = search.Value // this is no F# thing found.IsFSharp |> shouldEqual false - + // Check that we have members let members = found.MembersFunctionsAndValues |> Seq.map (fun e -> e.CompiledName, e) |> dict members.ContainsKey ".ctor" |> shouldEqual true @@ -93,8 +93,10 @@ let ``Test that csharp references are recognized as such`` () = members.["InterfaceEvent"].XmlDocSig |> shouldEqual "E:FSharp.Compiler.Service.Tests.CSharpClass.InterfaceEvent" [] +#if NETCOREAPP [] -let ``Test that symbols of csharp inner classes/enums are reported`` () = +#endif +let ``Test that symbols of csharp inner classes/enums are reported`` () = let csharpAssembly = PathRelativeToTestAssembly "CSharp_Analysis.dll" let content = """ module NestedEnumClass @@ -107,13 +109,15 @@ let _ = CSharpOuterClass.InnerClass.StaticMember() let results, _ = getProjectReferences(content, [csharpAssembly], None, None) results.GetAllUsesOfAllSymbols() |> Array.map (fun su -> su.Symbol.ToString()) - |> shouldEqual + |> shouldEqual [|"FSharp"; "Compiler"; "Service"; "Tests"; "FSharp"; "InnerEnum"; "CSharpOuterClass"; "field Case1"; "InnerClass"; "CSharpOuterClass"; "member StaticMember"; "NestedEnumClass"|] [] +#if NETCOREAPP [] +#endif let ``Ctor test`` () = let csharpAssembly = PathRelativeToTestAssembly "CSharp_Analysis.dll" let content = """ @@ -127,7 +131,7 @@ let _ = CSharpClass(0) results.GetAllUsesOfAllSymbols() |> Seq.map (fun su -> su.Symbol) |> Seq.find (function :? FSharpMemberOrFunctionOrValue as mfv -> mfv.IsConstructor | _ -> false) - match (ctor :?> FSharpMemberOrFunctionOrValue).DeclaringEntity with + match (ctor :?> FSharpMemberOrFunctionOrValue).DeclaringEntity with | Some e -> let members = e.MembersFunctionsAndValues Seq.exists (fun (mfv : FSharpMemberOrFunctionOrValue) -> mfv.IsConstructor) members |> should be True @@ -145,7 +149,9 @@ let getEntitiesUses source = |> List.ofSeq [] +#if NETCOREAPP [] +#endif let ``Different types with the same short name equality check`` () = let source = """ module CtorTest @@ -163,7 +169,9 @@ let (s2: FSharp.Compiler.Service.Tests.String) = null | _ -> sprintf "Expecting two symbols, got %A" stringSymbols |> failwith [] +#if NETCOREAPP [] +#endif let ``Different namespaces with the same short name equality check`` () = let source = """ module CtorTest diff --git a/tests/service/Common.fs b/tests/service/Common.fs index 12f12e1c1eb..6e6d8e46269 100644 --- a/tests/service/Common.fs +++ b/tests/service/Common.fs @@ -5,15 +5,10 @@ open System open System.Diagnostics open System.IO open System.Collections.Generic -open System.Collections.Immutable -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.IO -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.Symbols -open FSharp.Compiler.Symbols.FSharpExprPatterns -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Text +open FSharp.Compiler +open FSharp.Compiler.Range +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.SyntaxTree open FsUnit open NUnit.Framework @@ -53,48 +48,47 @@ let readRefs (folder : string) (projectFile: string) = // Create one global interactive checker instance let checker = FSharpChecker.Create() -type TempFile(ext, contents: string) = +type TempFile(ext, contents) = let tmpFile = Path.ChangeExtension(System.IO.Path.GetTempFileName() , ext) - do FileSystem.OpenFileForWriteShim(tmpFile).Write(contents) - - interface System.IDisposable with - member x.Dispose() = try FileSystem.FileDeleteShim tmpFile with _ -> () + do File.WriteAllText(tmpFile, contents) + interface System.IDisposable with + member x.Dispose() = try File.Delete tmpFile with _ -> () member x.Name = tmpFile #nowarn "57" -let getBackgroundParseResultsForScriptText (input: string) = +let getBackgroundParseResultsForScriptText (input) = use file = new TempFile("fsx", input) - let checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(file.Name, SourceText.ofString input) |> Async.RunSynchronously + let checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(file.Name, FSharp.Compiler.Text.SourceText.ofString input) |> Async.RunSynchronously checker.GetBackgroundParseResultsForFileInProject(file.Name, checkOptions) |> Async.RunSynchronously -let getBackgroundCheckResultsForScriptText (input: string) = +let getBackgroundCheckResultsForScriptText (input) = use file = new TempFile("fsx", input) - let checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(file.Name, SourceText.ofString input) |> Async.RunSynchronously + let checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(file.Name, FSharp.Compiler.Text.SourceText.ofString input) |> Async.RunSynchronously checker.GetBackgroundCheckResultsForFileInProject(file.Name, checkOptions) |> Async.RunSynchronously -let sysLib nm = +let sysLib nm = #if !NETCOREAPP - if System.Environment.OSVersion.Platform = System.PlatformID.Win32NT then // file references only valid on Windows + if System.Environment.OSVersion.Platform = System.PlatformID.Win32NT then // file references only valid on Windows let programFilesx86Folder = System.Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") programFilesx86Folder + @"\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\" + nm + ".dll" else #endif let sysDir = System.AppContext.BaseDirectory let (++) a b = System.IO.Path.Combine(a,b) - sysDir ++ nm + ".dll" + sysDir ++ nm + ".dll" [] -module Helpers = +module Helpers = type DummyType = A | B - let PathRelativeToTestAssembly p = Path.Combine(Path.GetDirectoryName(Uri(typeof.Assembly.Location).LocalPath), p) + let PathRelativeToTestAssembly p = Path.Combine(Path.GetDirectoryName(Uri(typeof.Assembly.CodeBase).LocalPath), p) -let fsCoreDefaultReference() = +let fsCoreDefaultReference() = PathRelativeToTestAssembly "FSharp.Core.dll" -let mkStandardProjectReferences () = +let mkStandardProjectReferences () = #if NETCOREAPP let file = "Sample_NETCoreSDK_FSharp_Library_netstandard2_0.fsproj" let projDir = Path.Combine(__SOURCE_DIRECTORY__, "../projects/Sample_NETCoreSDK_FSharp_Library_netstandard2_0") @@ -105,26 +99,26 @@ let mkStandardProjectReferences () = yield sysLib "System.Core" yield sysLib "System.Numerics" yield fsCoreDefaultReference() ] -#endif - -let mkProjectCommandLineArgsSilent (dllName, fileNames) = - let args = - [| yield "--simpleresolution" - yield "--noframework" - yield "--debug:full" - yield "--define:DEBUG" +#endif + +let mkProjectCommandLineArgsSilent (dllName, fileNames) = + let args = + [| yield "--simpleresolution" + yield "--noframework" + yield "--debug:full" + yield "--define:DEBUG" #if NETCOREAPP - yield "--targetprofile:netcore" - yield "--langversion:preview" + yield "--targetprofile:netcore" + yield "--langversion:preview" #endif - yield "--optimize-" + yield "--optimize-" yield "--out:" + dllName - yield "--doc:test.xml" - yield "--warn:3" - yield "--fullpaths" - yield "--flaterrors" - yield "--target:library" - for x in fileNames do + yield "--doc:test.xml" + yield "--warn:3" + yield "--fullpaths" + yield "--flaterrors" + yield "--target:library" + for x in fileNames do yield x let references = mkStandardProjectReferences () for r in references do @@ -132,26 +126,26 @@ let mkProjectCommandLineArgsSilent (dllName, fileNames) = |] args -let mkProjectCommandLineArgs (dllName, fileNames) = +let mkProjectCommandLineArgs (dllName, fileNames) = let args = mkProjectCommandLineArgsSilent (dllName, fileNames) printfn "dllName = %A, args = %A" dllName args args #if NETCOREAPP -let mkProjectCommandLineArgsForScript (dllName, fileNames) = - [| yield "--simpleresolution" - yield "--noframework" - yield "--debug:full" - yield "--define:DEBUG" - yield "--targetprofile:netcore" - yield "--optimize-" +let mkProjectCommandLineArgsForScript (dllName, fileNames) = + [| yield "--simpleresolution" + yield "--noframework" + yield "--debug:full" + yield "--define:DEBUG" + yield "--targetprofile:netcore" + yield "--optimize-" yield "--out:" + dllName - yield "--doc:test.xml" - yield "--warn:3" - yield "--fullpaths" - yield "--flaterrors" - yield "--target:library" - for x in fileNames do + yield "--doc:test.xml" + yield "--warn:3" + yield "--fullpaths" + yield "--flaterrors" + yield "--target:library" + for x in fileNames do yield x let references = mkStandardProjectReferences () for r in references do @@ -165,21 +159,21 @@ let mkTestFileAndOptions source additionalArgs = let dllName = Path.ChangeExtension(project, ".dll") let projFileName = Path.ChangeExtension(project, ".fsproj") let fileSource1 = "module M" - FileSystem.OpenFileForWriteShim(fileName).Write(fileSource1) + File.WriteAllText(fileName, fileSource1) let args = Array.append (mkProjectCommandLineArgs (dllName, [fileName])) additionalArgs let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) fileName, options let parseAndCheckFile fileName source options = - match checker.ParseAndCheckFileInProject(fileName, 0, SourceText.ofString source, options) |> Async.RunSynchronously with + match checker.ParseAndCheckFileInProject(fileName, 0, FSharp.Compiler.Text.SourceText.ofString source, options) |> Async.RunSynchronously with | parseResults, FSharpCheckFileAnswer.Succeeded(checkResults) -> parseResults, checkResults | _ -> failwithf "Parsing aborted unexpectedly..." -let parseAndCheckScriptWithOptions (file:string, input, opts) = +let parseAndCheckScriptWithOptions (file:string, input, opts) = #if NETCOREAPP - let projectOptions = + let projectOptions = let path = Path.Combine(Path.GetTempPath(), "tests", Process.GetCurrentProcess().Id.ToString() + "--"+ Guid.NewGuid().ToString()) try if not (Directory.Exists(path)) then @@ -196,14 +190,14 @@ let parseAndCheckScriptWithOptions (file:string, input, opts) = if Directory.Exists(path) then Directory.Delete(path, true) -#else - let projectOptions, _diagnostics = checker.GetProjectOptionsFromScript(file, SourceText.ofString input) |> Async.RunSynchronously +#else + let projectOptions, _diagnostics = checker.GetProjectOptionsFromScript(file, FSharp.Compiler.Text.SourceText.ofString input) |> Async.RunSynchronously //printfn "projectOptions = %A" projectOptions #endif let projectOptions = { projectOptions with OtherOptions = Array.append opts projectOptions.OtherOptions } - let parseResult, typedRes = checker.ParseAndCheckFileInProject(file, 0, SourceText.ofString input, projectOptions) |> Async.RunSynchronously - + let parseResult, typedRes = checker.ParseAndCheckFileInProject(file, 0, FSharp.Compiler.Text.SourceText.ofString input, projectOptions) |> Async.RunSynchronously + // if parseResult.Errors.Length > 0 then // printfn "---> Parse Input = %A" input // printfn "---> Parse Error = %A" parseResult.Errors @@ -213,16 +207,15 @@ let parseAndCheckScriptWithOptions (file:string, input, opts) = | res -> failwithf "Parsing did not finish... (%A)" res let parseAndCheckScript (file, input) = parseAndCheckScriptWithOptions (file, input, [| |]) -let parseAndCheckScriptPreview (file, input) = parseAndCheckScriptWithOptions (file, input, [| "--langversion:preview" |]) let parseSourceCode (name: string, code: string) = let location = Path.Combine(Path.GetTempPath(),"test"+string(hash (name, code))) try Directory.CreateDirectory(location) |> ignore with _ -> () - let filePath = Path.Combine(location, name) + let filePath = Path.Combine(location, name + ".fs") let dllPath = Path.Combine(location, name + ".dll") let args = mkProjectCommandLineArgs(dllPath, [filePath]) let options, errors = checker.GetParsingOptionsFromCommandLineArgs(List.ofArray args) - let parseResults = checker.ParseFile(filePath, SourceText.ofString code, options) |> Async.RunSynchronously + let parseResults = checker.ParseFile(filePath, FSharp.Compiler.Text.SourceText.ofString code, options) |> Async.RunSynchronously parseResults.ParseTree let matchBraces (name: string, code: string) = @@ -232,35 +225,36 @@ let matchBraces (name: string, code: string) = let dllPath = Path.Combine(location, name + ".dll") let args = mkProjectCommandLineArgs(dllPath, [filePath]) let options, errors = checker.GetParsingOptionsFromCommandLineArgs(List.ofArray args) - let braces = checker.MatchBraces(filePath, SourceText.ofString code, options) |> Async.RunSynchronously + let braces = checker.MatchBraces(filePath, FSharp.Compiler.Text.SourceText.ofString code, options) |> Async.RunSynchronously braces -let getSingleModuleLikeDecl (input: ParsedInput) = +let getSingleModuleLikeDecl (input: ParsedInput option) = match input with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ decl ])) -> decl + | Some (ParsedInput.ImplFile (ParsedImplFileInput (modules = [ decl ]))) -> decl | _ -> failwith "Could not get module decls" - + let parseSourceCodeAndGetModule (source: string) = - parseSourceCode ("test.fsx", source) |> getSingleModuleLikeDecl + parseSourceCode ("test", source) |> getSingleModuleLikeDecl + -/// Extract range info -let tups (m: range) = (m.StartLine, m.StartColumn), (m.EndLine, m.EndColumn) +/// Extract range info +let tups (m:Range.range) = (m.StartLine, m.StartColumn), (m.EndLine, m.EndColumn) /// Extract range info and convert to zero-based line - please don't use this one any more -let tupsZ (m: range) = (m.StartLine-1, m.StartColumn), (m.EndLine-1, m.EndColumn) +let tupsZ (m:Range.range) = (m.StartLine-1, m.StartColumn), (m.EndLine-1, m.EndColumn) -let attribsOfSymbolUse (s:FSharpSymbolUse) = - [ if s.IsFromDefinition then yield "defn" +let attribsOfSymbolUse (s:FSharpSymbolUse) = + [ if s.IsFromDefinition then yield "defn" if s.IsFromType then yield "type" if s.IsFromAttribute then yield "attribute" if s.IsFromDispatchSlotImplementation then yield "override" - if s.IsFromPattern then yield "pattern" - if s.IsFromComputationExpression then yield "compexpr" ] + if s.IsFromPattern then yield "pattern" + if s.IsFromComputationExpression then yield "compexpr" ] -let attribsOfSymbol (s:FSharpSymbol) = - [ match s with - | :? FSharpField as v -> +let attribsOfSymbol (s:FSharpSymbol) = + [ match s with + | :? FSharpField as v -> yield "field" if v.IsCompilerGenerated then yield "compgen" if v.IsDefaultValue then yield "default" @@ -268,12 +262,12 @@ let attribsOfSymbol (s:FSharpSymbol) = if v.IsVolatile then yield "volatile" if v.IsStatic then yield "static" if v.IsLiteral then yield sprintf "%A" v.LiteralValue.Value - if v.IsAnonRecordField then + if v.IsAnonRecordField then let info, tys, i = v.AnonRecordFieldDetails yield "anon(" + string i + ", [" + info.Assembly.QualifiedName + "/" + String.concat "+" info.EnclosingCompiledTypeNames + "/" + info.CompiledName + "]" + String.concat "," info.SortedFieldNames + ")" - | :? FSharpEntity as v -> + | :? FSharpEntity as v -> v.TryFullName |> ignore // check there is no failure here if v.IsNamespace then yield "namespace" if v.IsFSharpModule then yield "module" @@ -296,7 +290,7 @@ let attribsOfSymbol (s:FSharpSymbol) = if v.IsUnresolved then yield "unresolved" if v.IsValueType then yield "valuetype" - | :? FSharpMemberOrFunctionOrValue as v -> + | :? FSharpMemberOrFunctionOrValue as v -> if v.IsActivePattern then yield "apat" if v.IsDispatchSlot then yield "slot" if v.IsModuleValueOrMember && not v.IsMember then yield "val" @@ -312,7 +306,7 @@ let attribsOfSymbol (s:FSharpSymbol) = if v.IsTypeFunction then yield "typefun" if v.IsCompilerGenerated then yield "compgen" if v.IsImplicitConstructor then yield "ctor" - if v.IsMutable then yield "mutable" + if v.IsMutable then yield "mutable" if v.IsOverrideOrExplicitInterfaceImplementation then yield "overridemem" if v.IsInstanceMember && not v.IsInstanceMemberInCompiledCode && not v.IsExtensionMember then yield "funky" if v.IsExplicitInterfaceImplementation then yield "intfmem" @@ -321,25 +315,25 @@ let attribsOfSymbol (s:FSharpSymbol) = // if v.LiteralValue.IsSome then yield "literal" | _ -> () ] -let rec allSymbolsInEntities compGen (entities: IList) = - [ for e in entities do - yield (e :> FSharpSymbol) - for gp in e.GenericParameters do - if compGen || not gp.IsCompilerGenerated then +let rec allSymbolsInEntities compGen (entities: IList) = + [ for e in entities do + yield (e :> FSharpSymbol) + for gp in e.GenericParameters do + if compGen || not gp.IsCompilerGenerated then yield (gp :> FSharpSymbol) for x in e.MembersFunctionsAndValues do - if compGen || not x.IsCompilerGenerated then + if compGen || not x.IsCompilerGenerated then yield (x :> FSharpSymbol) - for gp in x.GenericParameters do - if compGen || not gp.IsCompilerGenerated then + for gp in x.GenericParameters do + if compGen || not gp.IsCompilerGenerated then yield (gp :> FSharpSymbol) for x in e.UnionCases do yield (x :> FSharpSymbol) - for f in x.Fields do - if compGen || not f.IsCompilerGenerated then + for f in x.UnionCaseFields do + if compGen || not f.IsCompilerGenerated then yield (f :> FSharpSymbol) for x in e.FSharpFields do - if compGen || not x.IsCompilerGenerated then + if compGen || not x.IsCompilerGenerated then yield (x :> FSharpSymbol) yield! allSymbolsInEntities compGen e.NestedEntities ] @@ -347,17 +341,12 @@ let rec allSymbolsInEntities compGen (entities: IList) = let getParseResults (source: string) = parseSourceCode("/home/user/Test.fsx", source) -let getParseResultsOfSignatureFile (source: string) = - parseSourceCode("/home/user/Test.fsi", source) - let getParseAndCheckResults (source: string) = parseAndCheckScript("/home/user/Test.fsx", source) -let getParseAndCheckResultsPreview (source: string) = - parseAndCheckScriptPreview("/home/user/Test.fsx", source) let inline dumpErrors results = - (^TResults: (member Diagnostics: FSharpDiagnostic[]) results) + (^TResults: (member Errors: FSharpErrorInfo[]) results) |> Array.map (fun e -> let message = e.Message.Split('\n') @@ -366,11 +355,12 @@ let inline dumpErrors results = sprintf "%s: %s" (e.Range.ToShortString()) message) |> List.ofArray + let getSymbolUses (results: FSharpCheckFileResults) = results.GetAllUsesOfAllSymbolsInFile() let getSymbolUsesFromSource (source: string) = - let _, typeCheckResults = getParseAndCheckResults source + let _, typeCheckResults = getParseAndCheckResults source typeCheckResults.GetAllUsesOfAllSymbolsInFile() let getSymbols (symbolUses: seq) = @@ -427,8 +417,6 @@ let findSymbolByName (name: string) (results: FSharpCheckFileResults) = let symbolUse = findSymbolUseByName name results symbolUse.Symbol -let taggedTextToString (tts: TaggedText[]) = - tts |> Array.map (fun tt -> tt.Text) |> String.concat "" let getRangeCoords (r: range) = (r.StartLine, r.StartColumn), (r.EndLine, r.EndColumn) @@ -440,10 +428,3 @@ let coreLibAssemblyName = "mscorlib" #endif -let assertRange - (expectedStartLine: int, expectedStartColumn: int) - (expectedEndLine: int, expectedEndColumn: int) - (actualRange: range) - : unit = - Assert.AreEqual(Position.mkPos expectedStartLine expectedStartColumn, actualRange.Start) - Assert.AreEqual(Position.mkPos expectedEndLine expectedEndColumn, actualRange.End) diff --git a/tests/service/EditorTests.fs b/tests/service/EditorTests.fs index ab3a1f8e492..0c43499b396 100644 --- a/tests/service/EditorTests.fs +++ b/tests/service/EditorTests.fs @@ -5,17 +5,17 @@ // // Technique 2: // -// Enable some tests in the #if EXE section at the end of the file, +// Enable some tests in the #if EXE section at the end of the file, // then compile this file as an EXE that has InternalsVisibleTo access into the // appropriate DLLs. This can be the quickest way to get turnaround on updating the tests // and capturing large amounts of structured output. (* cd Debug\net40\bin - .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.LanguageService.Compiler.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\tests\service\EditorTests.fs - .\VisualFSharp.UnitTests.exe + .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.LanguageService.Compiler.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\tests\service\EditorTests.fs + .\VisualFSharp.UnitTests.exe *) -// Technique 3: -// +// Technique 3: +// // Use F# Interactive. This only works for FSHarp.Compiler.Service.dll which has a public API #if INTERACTIVE @@ -30,16 +30,11 @@ module Tests.Service.Editor open NUnit.Framework open FsUnit open System -open System.IO -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.IO +open FSharp.Compiler +open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Service.Tests.Common -open FSharp.Compiler.Symbols -open FSharp.Compiler.Text -open FSharp.Compiler.Tokenization -let stringMethods = +let stringMethods = ["Chars"; "Clone"; "CompareTo"; "Contains"; "CopyTo"; "EndsWith"; "Equals"; "GetEnumerator"; "GetHashCode"; "GetReverseIndex"; "GetType"; "GetTypeCode"; "IndexOf"; "IndexOfAny"; "Insert"; "IsNormalized"; "LastIndexOf"; "LastIndexOfAny"; @@ -47,13 +42,13 @@ let stringMethods = "StartsWith"; "Substring"; "ToCharArray"; "ToLower"; "ToLowerInvariant"; "ToString"; "ToUpper"; "ToUpperInvariant"; "Trim"; "TrimEnd"; "TrimStart"] -let input = +let input = """ open System - - let foo() = + + let foo() = let msg = String.Concat("Hello"," ","world") - if true then + if true then printfn "%s" msg. """ @@ -61,34 +56,34 @@ let input = #if COMPILED [] #endif -let ``Intro test`` () = +let ``Intro test`` () = // Split the input & define file name let inputLines = input.Split('\n') let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let identToken = FSharpTokenTag.IDENT // let projectOptions = checker.GetProjectOptionsFromScript(file, input) |> Async.RunSynchronously // So we check that the messages are the same - for msg in typeCheckResults.Diagnostics do + for msg in typeCheckResults.Errors do printfn "Got an error, hopefully with the right text: %A" msg - printfn "typeCheckResults.Diagnostics.Length = %d" typeCheckResults.Diagnostics.Length + printfn "typeCheckResults.Errors.Length = %d" typeCheckResults.Errors.Length // We only expect one reported error. However, // on Unix, using filenames like /home/user/Test.fsx gives a second copy of all parse errors due to the // way the load closure for scripts is generated. So this returns two identical errors - (match typeCheckResults.Diagnostics.Length with 1 | 2 -> true | _ -> false) |> shouldEqual true + (match typeCheckResults.Errors.Length with 1 | 2 -> true | _ -> false) |> shouldEqual true // So we check that the messages are the same - for msg in typeCheckResults.Diagnostics do + for msg in typeCheckResults.Errors do printfn "Good! got an error, hopefully with the right text: %A" msg msg.Message.Contains("Missing qualification after '.'") |> shouldEqual true // Get tool tip at the specified location - let tip = typeCheckResults.GetToolTip(4, 7, inputLines.[1], ["foo"], identToken) - // (sprintf "%A" tip).Replace("\n","") |> shouldEqual """ToolTipText [Single ("val foo : unit -> unitFull name: Test.foo",None)]""" + let tip = typeCheckResults.GetToolTipText(4, 7, inputLines.[1], ["foo"], identToken) + // (sprintf "%A" tip).Replace("\n","") |> shouldEqual """FSharpToolTipText [Single ("val foo : unit -> unitFull name: Test.foo",None)]""" // Get declarations (autocomplete) for a location let partialName = { QualifyingIdents = []; PartialIdent = "msg"; EndColumn = 22; LastDotPos = None } let decls = typeCheckResults.GetDeclarationListInfo(Some parseResult, 7, inputLines.[6], partialName, (fun _ -> [])) @@ -100,7 +95,7 @@ let ``Intro test`` () = // Print concatenated parameter lists [ for mi in methods.Methods do - yield methods.MethodName , [ for p in mi.Parameters do yield p.Display |> taggedTextToString ] ] + yield methods.MethodName , [ for p in mi.Parameters do yield p.Display ] ] |> shouldEqual [("Concat", ["[] args: obj []"]); ("Concat", ["[] values: string []"]); @@ -112,30 +107,30 @@ let ``Intro test`` () = ("Concat", ["str0: string"; "str1: string"; "str2: string"]); #if !NETCOREAPP // TODO: check why this is needed for .NET Core testing of FSharp.Compiler.Service ("Concat", ["arg0: obj"; "arg1: obj"; "arg2: obj"; "arg3: obj"]); -#endif +#endif ("Concat", ["str0: string"; "str1: string"; "str2: string"; "str3: string"])] // TODO: check if this can be enabled in .NET Core testing of FSharp.Compiler.Service -#if !INTERACTIVE // InternalsVisibleTo on IncrementalBuild.LocallyInjectCancellationFault not working for some reason? -//[] -//let ``Basic cancellation test`` () = -// try -// printfn "locally injecting a cancellation condition in incremental building" -// use _holder = IncrementalBuild.LocallyInjectCancellationFault() -// -// // Split the input & define file name -// let inputLines = input.Split('\n') -// let file = "/home/user/Test.fsx" -// async { -// checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() -// let! checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(file, SourceText.ofString input) -// let! parseResult, typedRes = checker.ParseAndCheckFileInProject(file, 0, SourceText.ofString input, checkOptions) -// return parseResult, typedRes -// } |> Async.RunSynchronously -// |> ignore -// Assert.Fail("expected a cancellation") -// with :? OperationCanceledException -> () +#if !INTERACTIVE && !NETCOREAPP // InternalsVisibleTo on IncrementalBuild.LocallyInjectCancellationFault not working for some reason? +[] +let ``Basic cancellation test`` () = + try + printfn "locally injecting a cancellation condition in incremental building" + use _holder = IncrementalBuild.LocallyInjectCancellationFault() + + // Split the input & define file name + let inputLines = input.Split('\n') + let file = "/home/user/Test.fsx" + async { + checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() + let! checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(file, FSharp.Compiler.Text.SourceText.ofString input) + let! parseResult, typedRes = checker.ParseAndCheckFileInProject(file, 0, FSharp.Compiler.Text.SourceText.ofString input, checkOptions) + return parseResult, typedRes + } |> Async.RunSynchronously + |> ignore + Assert.Fail("expected a cancellation") + with :? OperationCanceledException -> () #endif [] @@ -144,8 +139,8 @@ let ``GetMethodsAsSymbols should return all overloads of a method as FSharpSymbo let extractCurriedParams (symbol:FSharpSymbolUse) = match symbol.Symbol with | :? FSharpMemberOrFunctionOrValue as mvf -> - [for pg in mvf.CurriedParameterGroups do - for (p:FSharpParameter) in pg do + [for pg in mvf.CurriedParameterGroups do + for (p:FSharpParameter) in pg do yield p.DisplayName, p.Type.Format (symbol.DisplayContext)] | _ -> [] @@ -176,37 +171,37 @@ let ``GetMethodsAsSymbols should return all overloads of a method as FSharpSymbo | None -> failwith "No symbols returned" -let input2 = +let input2 = """ [] -let foo(x, y) = +let foo(x, y) = let msg = String.Concat("Hello"," ","world") - if true then - printfn "x = %d, y = %d" x y + if true then + printfn "x = %d, y = %d" x y printfn "%s" msg -type C() = +type C() = member x.P = 1 """ [] -let ``Symbols basic test`` () = +let ``Symbols basic test`` () = let file = "/home/user/Test.fsx" let untyped2, typeCheckResults2 = parseAndCheckScript(file, input2) let partialAssemblySignature = typeCheckResults2.PartialAssemblySignature - + partialAssemblySignature.Entities.Count |> shouldEqual 1 // one entity [] -let ``Symbols many tests`` () = +let ``Symbols many tests`` () = let file = "/home/user/Test.fsx" let untyped2, typeCheckResults2 = parseAndCheckScript(file, input2) let partialAssemblySignature = typeCheckResults2.PartialAssemblySignature - + partialAssemblySignature.Entities.Count |> shouldEqual 1 // one entity let moduleEntity = partialAssemblySignature.Entities.[0] @@ -244,7 +239,7 @@ let ``Symbols many tests`` () = fnVal.IsTypeFunction |> shouldEqual false fnVal.FullType.IsFunctionType |> shouldEqual true // int * int -> unit - fnVal.FullType.GenericArguments.[0].IsTupleType |> shouldEqual true // int * int + fnVal.FullType.GenericArguments.[0].IsTupleType |> shouldEqual true // int * int let argTy1 = fnVal.FullType.GenericArguments.[0].GenericArguments.[0] argTy1.TypeDefinition.DisplayName |> shouldEqual "int" // int @@ -254,18 +249,18 @@ let ``Symbols many tests`` () = let argTy1b = argTy1.TypeDefinition.AbbreviatedType argTy1b.TypeDefinition.Namespace |> shouldEqual (Some "Microsoft.FSharp.Core") - argTy1b.TypeDefinition.CompiledName |> shouldEqual "int32" + argTy1b.TypeDefinition.CompiledName |> shouldEqual "int32" let argTy1c = argTy1b.TypeDefinition.AbbreviatedType argTy1c.TypeDefinition.Namespace |> shouldEqual (Some "System") - argTy1c.TypeDefinition.CompiledName |> shouldEqual "Int32" + argTy1c.TypeDefinition.CompiledName |> shouldEqual "Int32" let typeCheckContext = typeCheckResults2.ProjectContext - + typeCheckContext.GetReferencedAssemblies() |> List.exists (fun s -> s.FileName.Value.Contains(coreLibAssemblyName)) |> shouldEqual true + - -let input3 = +let input3 = """ let date = System.DateTime.Now.ToString().PadRight(25) """ @@ -274,100 +269,100 @@ let date = System.DateTime.Now.ToString().PadRight(25) #if COMPILED [] #endif -let ``Expression typing test`` () = +let ``Expression typing test`` () = printfn "------ Expression typing test -----------------" // Split the input & define file name let inputLines = input3.Split('\n') let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input3) + let parseResult, typeCheckResults = parseAndCheckScript(file, input3) let identToken = FSharpTokenTag.IDENT - for msg in typeCheckResults.Diagnostics do + for msg in typeCheckResults.Errors do printfn "***Expression typing test: Unexpected error: %A" msg.Message - typeCheckResults.Diagnostics.Length |> shouldEqual 0 + typeCheckResults.Errors.Length |> shouldEqual 0 // Get declarations (autocomplete) for a location // - // Getting the declarations at columns 42 to 43 with [], "" for the names and residue - // gives the results for the string type. - // - for col in 42..43 do + // Getting the declarations at columns 42 to 43 with [], "" for the names and residue + // gives the results for the string type. + // + for col in 42..43 do let decls = typeCheckResults.GetDeclarationListInfo(Some parseResult, 2, inputLines.[1], PartialLongName.Empty(col), (fun _ -> [])) let autoCompleteSet = set [ for item in decls.Items -> item.Name ] autoCompleteSet |> shouldEqual (set stringMethods) // The underlying problem is that the parser error recovery doesn't include _any_ information for // the incomplete member: -// member x.Test = +// member x.Test = [] -let ``Find function from member 1`` () = - let input = +let ``Find function from member 1`` () = + let input = """ -type Test() = +type Test() = let abc a b c = a + b + c - member x.Test = """ + member x.Test = """ // Split the input & define file name let inputLines = input.Split('\n') let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let decls = typeCheckResults.GetDeclarationListInfo(Some parseResult, 4, inputLines.[3], PartialLongName.Empty(20), (fun _ -> [])) let item = decls.Items |> Array.tryFind (fun d -> d.Name = "abc") decls.Items |> Seq.exists (fun d -> d.Name = "abc") |> shouldEqual true [] -let ``Find function from member 2`` () = - let input = +let ``Find function from member 2`` () = + let input = """ -type Test() = +type Test() = let abc a b c = a + b + c - member x.Test = a""" + member x.Test = a""" // Split the input & define file name let inputLines = input.Split('\n') let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let decls = typeCheckResults.GetDeclarationListInfo(Some parseResult, 4, inputLines.[3], PartialLongName.Empty(21), (fun _ -> [])) let item = decls.Items |> Array.tryFind (fun d -> d.Name = "abc") decls.Items |> Seq.exists (fun d -> d.Name = "abc") |> shouldEqual true - + [] -let ``Find function from var`` () = - let input = +let ``Find function from var`` () = + let input = """ -type Test() = +type Test() = let abc a b c = a + b + c - let test = """ + let test = """ // Split the input & define file name let inputLines = input.Split('\n') let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let decls = typeCheckResults.GetDeclarationListInfo(Some parseResult, 4, inputLines.[3], PartialLongName.Empty(14), (fun _ -> [])) decls.Items |> Seq.exists (fun d -> d.Name = "abc") |> shouldEqual true [] -let ``Completion in base constructor`` () = - let input = +let ``Completion in base constructor`` () = + let input = """ type A(foo) = class end type B(bar) = - inherit A(bar)""" + inherit A(bar)""" // Split the input & define file name let inputLines = input.Split('\n') let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let decls = typeCheckResults.GetDeclarationListInfo(Some parseResult, 7, inputLines.[6], PartialLongName.Empty(17), (fun _ -> [])) decls.Items |> Seq.exists (fun d -> d.Name = "bar") |> shouldEqual true @@ -375,8 +370,8 @@ type B(bar) = [] -let ``Completion in do in base constructor`` () = - let input = +let ``Completion in do in base constructor`` () = + let input = """ type A() = class @@ -384,72 +379,72 @@ type A() = type B(bar) = inherit A() - - do bar""" + + do bar""" // Split the input & define file name let inputLines = input.Split('\n') let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let decls = typeCheckResults.GetDeclarationListInfo(Some parseResult, 9, inputLines.[8], PartialLongName.Empty(7), (fun _ -> [])) decls.Items |> Seq.exists (fun d -> d.Name = "bar") |> shouldEqual true [] -let ``Symbol based find function from member 1`` () = - let input = +let ``Symbol based find function from member 1`` () = + let input = """ -type Test() = +type Test() = let abc a b c = a + b + c - member x.Test = """ + member x.Test = """ // Split the input & define file name let inputLines = input.Split('\n') let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let decls = typeCheckResults.GetDeclarationListSymbols(Some parseResult, 4, inputLines.[3], PartialLongName.Empty(20), (fun () -> [])) //decls |> List.map (fun d -> d.Head.Symbol.DisplayName) |> printfn "---> decls = %A" decls |> Seq.exists (fun d -> d.Head.Symbol.DisplayName = "abc") |> shouldEqual true [] -let ``Symbol based find function from member 2`` () = - let input = +let ``Symbol based find function from member 2`` () = + let input = """ -type Test() = +type Test() = let abc a b c = a + b + c - member x.Test = a""" + member x.Test = a""" // Split the input & define file name let inputLines = input.Split('\n') let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let decls = typeCheckResults.GetDeclarationListSymbols(Some parseResult, 4, inputLines.[3], PartialLongName.Empty(21), (fun () -> [])) //decls |> List.map (fun d -> d.Head.Symbol.DisplayName) |> printfn "---> decls = %A" decls |> Seq.exists (fun d -> d.Head.Symbol.DisplayName = "abc") |> shouldEqual true [] -let ``Symbol based find function from var`` () = - let input = +let ``Symbol based find function from var`` () = + let input = """ -type Test() = +type Test() = let abc a b c = a + b + c - let test = """ + let test = """ // Split the input & define file name let inputLines = input.Split('\n') let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let decls = typeCheckResults.GetDeclarationListSymbols(Some parseResult, 4, inputLines.[3], PartialLongName.Empty(14), (fun () -> [])) //decls |> List.map (fun d -> d.Head.Symbol.DisplayName) |> printfn "---> decls = %A" decls |> Seq.exists (fun d -> d.Head.Symbol.DisplayName = "abc") |> shouldEqual true [] -let ``Printf specifiers for regular and verbatim strings`` () = - let input = +let ``Printf specifiers for regular and verbatim strings`` () = + let input = """let os = System.Text.StringBuilder() let _ = Microsoft.FSharp.Core.Printf.printf "%A" 0 let _ = Printf.printf "%A" 0 @@ -470,7 +465,7 @@ let _ = List.map (sprintf @"%A let _ = (10, 12) ||> sprintf "%A %O" let _ = sprintf "\n%-8.1e+567" 1.0 -let _ = sprintf @"%O\n%-5s" "1" "2" +let _ = sprintf @"%O\n%-5s" "1" "2" let _ = sprintf "%%" let _ = sprintf " %*%" 2 let _ = sprintf " %.*%" 2 @@ -487,10 +482,10 @@ let _ = printf " %*a" 3 (fun _ _ -> ()) 2 """ let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) - typeCheckResults.Diagnostics |> shouldEqual [||] - typeCheckResults.GetFormatSpecifierLocationsAndArity() + typeCheckResults.Errors |> shouldEqual [||] + typeCheckResults.GetFormatSpecifierLocationsAndArity() |> Array.map (fun (range,numArgs) -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn, numArgs) |> shouldEqual [|(2, 45, 2, 47, 1); (3, 23, 3, 25, 1); (4, 38, 4, 40, 1); (5, 27, 5, 29, 1); @@ -505,8 +500,8 @@ let _ = printf " %*a" 3 (fun _ _ -> ()) 2 (34, 29, 34, 32, 3)|] [] -let ``Printf specifiers for triple-quote strings`` () = - let input = +let ``Printf specifiers for triple-quote strings`` () = + let input = " let _ = sprintf \"\"\"%-A\"\"\" -10 let _ = printfn \"\"\" @@ -517,20 +512,20 @@ let _ = List.iter(printfn \"\"\"%-A \"\"\" 1 2)" let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) - typeCheckResults.Diagnostics |> shouldEqual [||] - typeCheckResults.GetFormatSpecifierLocationsAndArity() + typeCheckResults.Errors |> shouldEqual [||] + typeCheckResults.GetFormatSpecifierLocationsAndArity() |> Array.map (fun (range,numArgs) -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn, numArgs) |> shouldEqual [|(2, 19, 2, 22, 1); (4, 12, 4, 15, 1); (6, 29, 6, 32, 1); - (7, 29, 7, 31, 1); + (7, 29, 7, 31, 1); (7, 33, 7, 35,1 )|] - + [] -let ``Printf specifiers for user-defined functions`` () = - let input = +let ``Printf specifiers for user-defined functions`` () = + let input = """ let debug msg = Printf.kprintf System.Diagnostics.Debug.WriteLine msg let _ = debug "Message: %i - %O" 1 "Ok" @@ -538,22 +533,22 @@ let _ = debug "[LanguageService] Type checking fails for '%s' with content=%A an """ let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) - typeCheckResults.Diagnostics |> shouldEqual [||] - typeCheckResults.GetFormatSpecifierLocationsAndArity() + typeCheckResults.Errors |> shouldEqual [||] + typeCheckResults.GetFormatSpecifierLocationsAndArity() |> Array.map (fun (range, numArgs) -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn, numArgs) - |> shouldEqual [|(3, 24, 3, 26, 1); + |> shouldEqual [|(3, 24, 3, 26, 1); (3, 29, 3, 31, 1); - (4, 58, 4, 60, 1); - (4, 75, 4, 77, 1); - (4, 82, 4, 84, 1); + (4, 58, 4, 60, 1); + (4, 75, 4, 77, 1); + (4, 82, 4, 84, 1); (4, 108, 4, 110, 1)|] #if ASSUME_PREVIEW_FSHARP_CORE [] -let ``Printf specifiers for regular and verbatim interpolated strings`` () = - let input = +let ``Printf specifiers for regular and verbatim interpolated strings`` () = + let input = """let os = System.Text.StringBuilder() // line 1 let _ = $"{0}" // line 2 let _ = $"%A{0}" // line 3 @@ -573,15 +568,15 @@ let _ = $"\n%-8.1e{1.0}+567" // line 16 let _ = $@"%O{1}\n%-5s{s}" // line 17 let _ = $"%%" // line 18 let s2 = $"abc %d{s.Length} and %d{s.Length}def" // line 19 -let s3 = $"abc %d{s.Length} +let s3 = $"abc %d{s.Length} and %d{s.Length}def" // line 21 """ let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScriptWithOptions(file, input, [| "/langversion:preview" |]) + let parseResult, typeCheckResults = parseAndCheckScriptWithOptions(file, input, [| "/langversion:preview" |]) - typeCheckResults.Diagnostics |> shouldEqual [||] - typeCheckResults.GetFormatSpecifierLocationsAndArity() + typeCheckResults.Errors |> shouldEqual [||] + typeCheckResults.GetFormatSpecifierLocationsAndArity() |> Array.map (fun (range,numArgs) -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn, numArgs) |> shouldEqual [|(3, 10, 3, 12, 1); (4, 10, 4, 15, 1); (5, 10, 5, 16, 1); (7, 11, 7, 15, 1); @@ -591,15 +586,15 @@ let s3 = $"abc %d{s.Length} (19, 32, 19, 34, 1); (20, 15, 20, 17, 1); (21, 20, 21, 22, 1)|] [] -let ``Printf specifiers for triple quote interpolated strings`` () = - let input = +let ``Printf specifiers for triple quote interpolated strings`` () = + let input = "let _ = $\"\"\"abc %d{1} and %d{2+3}def\"\"\" " let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScriptWithOptions(file, input, [| "/langversion:preview" |]) + let parseResult, typeCheckResults = parseAndCheckScriptWithOptions(file, input, [| "/langversion:preview" |]) - typeCheckResults.Diagnostics |> shouldEqual [||] - typeCheckResults.GetFormatSpecifierLocationsAndArity() + typeCheckResults.Errors |> shouldEqual [||] + typeCheckResults.GetFormatSpecifierLocationsAndArity() |> Array.map (fun (range,numArgs) -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn, numArgs) |> shouldEqual [|(1, 16, 1, 18, 1); (1, 26, 1, 28, 1)|] @@ -607,38 +602,38 @@ let ``Printf specifiers for triple quote interpolated strings`` () = [] -let ``should not report format specifiers for illformed format strings`` () = - let input = +let ``should not report format specifiers for illformed format strings`` () = + let input = """ let _ = sprintf "%.7f %7.1A %7.f %--8.1f" let _ = sprintf "ABCDE" """ let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) - typeCheckResults.GetFormatSpecifierLocationsAndArity() + let parseResult, typeCheckResults = parseAndCheckScript(file, input) + typeCheckResults.GetFormatSpecifierLocationsAndArity() |> Array.map (fun (range, numArgs) -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn, numArgs) |> shouldEqual [||] [] -let ``Single case discreminated union type definition`` () = - let input = +let ``Single case discreminated union type definition`` () = + let input = """ type DU = Case1 """ let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) typeCheckResults.GetAllUsesOfAllSymbolsInFile() |> Array.ofSeq - |> Array.map (fun su -> - let r = su.Range + |> Array.map (fun su -> + let r = su.RangeAlternate r.StartLine, r.StartColumn, r.EndLine, r.EndColumn) |> shouldEqual [|(2, 10, 2, 15); (2, 5, 2, 7); (1, 0, 1, 0)|] [] -let ``Synthetic symbols should not be reported`` () = - let input = +let ``Synthetic symbols should not be reported`` () = + let input = """ let arr = [|1|] let number1, number2 = 1, 2 @@ -647,13 +642,13 @@ let _ = arr.[..number2] """ let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) typeCheckResults.GetAllUsesOfAllSymbolsInFile() |> Array.ofSeq - |> Array.map (fun su -> - let r = su.Range + |> Array.map (fun su -> + let r = su.RangeAlternate su.Symbol.ToString(), (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn)) - |> shouldEqual + |> shouldEqual [|("val arr", (2, 4, 2, 7)) ("val number2", (3, 13, 3, 20)) ("val number1", (3, 4, 3, 11)) @@ -669,7 +664,7 @@ let _ = arr.[..number2] ("OperatorIntrinsics", (5, 11, 5, 12)) ("Operators", (5, 11, 5, 12)) ("Core", (5, 11, 5, 12)) - ("FSharp", (5, 11, 5, 12)) + ("FSharp", (5, 11, 5, 12)) ("val number2", (5, 15, 5, 22)) ("Test", (1, 0, 1, 0))|] @@ -682,8 +677,8 @@ let test2 = System.StringComparison.CurrentCulture let test3 = System.Text.RegularExpressions.RegexOptions.Compiled """ let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) - let allSymbols = typeCheckResults.GetAllUsesOfAllSymbolsInFile() + let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let allSymbols = typeCheckResults.GetAllUsesOfAllSymbolsInFile() let enums = allSymbols |> Array.ofSeq @@ -723,8 +718,8 @@ let test3 = System.Text.RegularExpressions.RegexOptions.Compiled |] [] -let ``IL enum fields should be reported`` () = - let input = +let ``IL enum fields should be reported`` () = + let input = """ open System @@ -735,29 +730,29 @@ let _ = """ let file = "/home/user/Test.fsx" - let _, typeCheckResults = parseAndCheckScript(file, input) + let _, typeCheckResults = parseAndCheckScript(file, input) typeCheckResults.GetAllUsesOfAllSymbolsInFile() |> Array.ofSeq - |> Array.map (fun su -> - let r = su.Range + |> Array.map (fun su -> + let r = su.RangeAlternate su.Symbol.ToString(), (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn)) |> Array.distinct - |> shouldEqual + |> shouldEqual // note: these "System" sysbol uses are not duplications because each of them corresponts to different namespaces [|("System", (2, 5, 2, 11)) ("ConsoleKey", (5, 10, 5, 20)); - ("field Tab", (5, 10, 5, 24)); + ("field Tab", (5, 10, 5, 24)); ("ConsoleKey", (6, 6, 6, 16)); - ("field OemClear", (6, 6, 6, 25)); + ("field OemClear", (6, 6, 6, 25)); ("ConsoleKey", (6, 29, 6, 39)); - ("field A", (6, 29, 6, 41)); + ("field A", (6, 29, 6, 41)); ("ConsoleKey", (7, 11, 7, 21)); - ("field B", (7, 11, 7, 23)); + ("field B", (7, 11, 7, 23)); ("Test", (1, 0, 1, 0))|] [] -let ``Literal values should be reported`` () = - let input = +let ``Literal values should be reported`` () = + let input = """ module Module1 = let [] ModuleValue = 1 @@ -770,7 +765,7 @@ module Module1 = type Class1() = let [] ClassValue = 1 static let [] StaticClassValue = 2 - + let _ = ClassValue let _ = StaticClassValue @@ -782,13 +777,13 @@ type Class1() = """ let file = "/home/user/Test.fsx" - let _, typeCheckResults = parseAndCheckScript(file, input) + let _, typeCheckResults = parseAndCheckScript(file, input) typeCheckResults.GetAllUsesOfAllSymbolsInFile() |> Array.ofSeq - |> Array.map (fun su -> - let r = su.Range + |> Array.map (fun su -> + let r = su.RangeAlternate su.Symbol.ToString(), (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn)) - |> shouldEqual + |> shouldEqual [|("LiteralAttribute", (3, 10, 3, 17)) ("LiteralAttribute", (3, 10, 3, 17)) ("member .ctor", (3, 10, 3, 17)) @@ -824,26 +819,26 @@ type Class1() = ("Test", (1, 0, 1, 0))|] [] -let ``IsConstructor property should return true for constructors`` () = - let input = +let ``IsConstructor property should return true for constructors`` () = + let input = """ type T(x: int) = new() = T(0) let x: T() """ let file = "/home/user/Test.fsx" - let _, typeCheckResults = parseAndCheckScript(file, input) + let _, typeCheckResults = parseAndCheckScript(file, input) typeCheckResults.GetAllUsesOfAllSymbolsInFile() |> Array.ofSeq - |> Array.map (fun su -> - let r = su.Range + |> Array.map (fun su -> + let r = su.RangeAlternate let isConstructor = match su.Symbol with | :? FSharpMemberOrFunctionOrValue as f -> f.IsConstructor | _ -> false su.Symbol.ToString(), (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn), isConstructor) |> Array.distinct - |> shouldEqual + |> shouldEqual [|("T", (2, 5, 2, 6), false) ("int", (2, 10, 2, 13), false) ("val x", (2, 7, 2, 8), false) @@ -855,22 +850,22 @@ let x: T() ("Test", (1, 0, 1, 0), false)|] [] -let ``ValidateBreakpointLocation tests A`` () = - let input = +let ``ValidateBreakpointLocation tests A`` () = + let input = """ -let f x = +let f x = let y = z + 1 y + y )""" let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let lines = input.Replace("\r", "").Split( [| '\n' |]) - let positions = [ for (i,line) in Seq.indexed lines do for (j, c) in Seq.indexed line do yield Position.mkPos (Line.fromZ i) j, line ] - let results = [ for pos, line in positions do - match parseResult.ValidateBreakpointLocation pos with - | Some r -> yield ((line, pos.Line, pos.Column), (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn)) + let positions = [ for (i,line) in Seq.indexed lines do for (j, c) in Seq.indexed line do yield Range.mkPos (Range.Line.fromZ i) j, line ] + let results = [ for pos, line in positions do + match parseResult.ValidateBreakpointLocation pos with + | Some r -> yield ((line, pos.Line, pos.Column), (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn)) | None -> ()] - results |> shouldEqual + results |> shouldEqual [((" let y = z + 1", 3, 0), (3, 4, 3, 17)); ((" let y = z + 1", 3, 1), (3, 4, 4, 9)); ((" let y = z + 1", 3, 2), (3, 4, 4, 9)); @@ -896,9 +891,9 @@ let f x = [] -let ``ValidateBreakpointLocation tests for object expressions`` () = +let ``ValidateBreakpointLocation tests for object expressions`` () = // fsi.PrintLength <- 1000 - let input = + let input = """ type IFoo = abstract member Foo: int -> int @@ -917,14 +912,14 @@ type FooImpl() = } )""" let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let lines = input.Replace("\r", "").Split( [| '\n' |]) - let positions = [ for (i,line) in Seq.indexed lines do for (j, c) in Seq.indexed line do yield Position.mkPos (Line.fromZ i) j, line ] - let results = [ for pos, line in positions do - match parseResult.ValidateBreakpointLocation pos with - | Some r -> yield ((line, pos.Line, pos.Column), (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn)) + let positions = [ for (i,line) in Seq.indexed lines do for (j, c) in Seq.indexed line do yield Range.mkPos (Range.Line.fromZ i) j, line ] + let results = [ for pos, line in positions do + match parseResult.ValidateBreakpointLocation pos with + | Some r -> yield ((line, pos.Line, pos.Column), (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn)) | None -> ()] - results |> shouldEqual + results |> shouldEqual [(("type FooBase(foo:IFoo) =", 5, 5), (5, 5, 5, 12)); (("type FooBase(foo:IFoo) =", 5, 6), (5, 5, 5, 12)); (("type FooBase(foo:IFoo) =", 5, 7), (5, 5, 5, 12)); @@ -1135,8 +1130,8 @@ type FooImpl() = ((" )", 17, 8), (10, 8, 17, 9))] [] -let ``Partially valid namespaces should be reported`` () = - let input = +let ``Partially valid namespaces should be reported`` () = + let input = """ open System.Threading.Foo open System @@ -1146,14 +1141,14 @@ let _ = Threading.Buzz = null """ let file = "/home/user/Test.fsx" - let _, typeCheckResults = parseAndCheckScript(file, input) + let _, typeCheckResults = parseAndCheckScript(file, input) typeCheckResults.GetAllUsesOfAllSymbolsInFile() |> Array.ofSeq - |> Array.map (fun su -> - let r = su.Range + |> Array.map (fun su -> + let r = su.RangeAlternate su.Symbol.ToString(), (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn)) |> Array.distinct - |> shouldEqual + |> shouldEqual // note: these "System" sysbol uses are not duplications because each of them corresponts to different namespaces [|("System", (2, 5, 2, 11)) ("Threading", (2, 12, 2, 21)) @@ -1166,21 +1161,22 @@ let _ = Threading.Buzz = null ("Test", (1, 0, 1, 0))|] [] -let ``GetDeclarationLocation should not require physical file`` () = +let ``GetDeclarationLocation should not require physical file`` () = let input = "let abc = 1\nlet xyz = abc" let file = "/home/user/Test.fsx" - let _, typeCheckResults = parseAndCheckScript(file, input) + let _, typeCheckResults = parseAndCheckScript(file, input) let location = typeCheckResults.GetDeclarationLocation(2, 13, "let xyz = abc", ["abc"]) match location with - | FindDeclResult.DeclFound r -> Some (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn, "<=== Found here." ) + | FSharpFindDeclResult.DeclFound r -> Some (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn, "<=== Found here." ) | _ -> Some (0 , 0 , 0 , 0 , "Not Found. Should not require physical file." ) |> shouldEqual (Some (1 , 4 , 1 , 7 , "<=== Found here." )) //------------------------------------------------------------------------------- + #if TEST_TP_PROJECTS -module internal TPProject = +module internal TPProject = open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") @@ -1205,20 +1201,19 @@ let _ = RegexTypedStatic.IsMatch<"ABC", (*$ *) >( ) // TEST: param info on Ctrl let _ = RegexTypedStatic.IsMatch<"ABC" >( (*$*) ) // TEST: no assert on Ctrl-space at $ """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) - let fileLines1 = FileSystem.OpenFileForReadShim(fileName1).AsStream().ReadLines() - + File.WriteAllText(fileName1, fileSource1) + let fileLines1 = File.ReadAllLines(fileName1) let fileNames = [fileName1] let args = Array.append (mkProjectCommandLineArgs (dllName, fileNames)) [| "-r:" + PathRelativeToTestAssembly(@"DummyProviderForLanguageServiceTesting.dll") |] let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) let cleanFileName a = if a = fileName1 then "file1" else "??" [] -let ``Test TPProject all symbols`` () = +let ``Test TPProject all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(TPProject.options) |> Async.RunSynchronously - let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() - let allSymbolUsesInfo = [ for s in allSymbolUses -> s.Symbol.DisplayName, tups s.Range, attribsOfSymbol s.Symbol ] + let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() + let allSymbolUsesInfo = [ for s in allSymbolUses -> s.Symbol.DisplayName, tups s.RangeAlternate, attribsOfSymbol s.Symbol ] //printfn "allSymbolUsesInfo = \n----\n%A\n----" allSymbolUsesInfo allSymbolUsesInfo |> shouldEqual @@ -1253,15 +1248,15 @@ let ``Test TPProject all symbols`` () = [] -let ``Test TPProject errors`` () = +let ``Test TPProject errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(TPProject.options) |> Async.RunSynchronously let parseResult, typeCheckAnswer = checker.ParseAndCheckFileInProject(TPProject.fileName1, 0, TPProject.fileSource1, TPProject.options) |> Async.RunSynchronously - let typeCheckResults = + let typeCheckResults = match typeCheckAnswer with | FSharpCheckFileAnswer.Succeeded(res) -> res | res -> failwithf "Parsing did not finish... (%A)" res - let errorMessages = [ for msg in typeCheckResults.Diagnostics -> msg.StartLine, msg.StartColumn, msg.EndLine, msg.EndColumn, msg.Message.Replace("\r","").Replace("\n","") ] + let errorMessages = [ for msg in typeCheckResults.Errors -> msg.StartLineAlternate, msg.StartColumn, msg.EndLineAlternate, msg.EndColumn, msg.Message.Replace("\r","").Replace("\n","") ] //printfn "errorMessages = \n----\n%A\n----" errorMessages errorMessages |> shouldEqual @@ -1276,26 +1271,26 @@ let ``Test TPProject errors`` () = (15, 33, 15, 38, "No static parameter exists with name ''"); (16, 40, 16, 50, "This expression was expected to have type 'string' but here has type 'unit' ")] -let internal extractToolTipText (ToolTipText(els)) = - [ for e in els do +let internal extractToolTipText (FSharpToolTipText(els)) = + [ for e in els do match e with - | ToolTipElement.Group txts -> for item in txts do yield item.MainDescription - | ToolTipElement.CompositionError err -> yield err - | ToolTipElement.None -> yield "NONE!" ] + | FSharpToolTipElement.Group txts -> for item in txts do yield item.MainDescription + | FSharpToolTipElement.CompositionError err -> yield err + | FSharpToolTipElement.None -> yield "NONE!" ] [] -let ``Test TPProject quick info`` () = +let ``Test TPProject quick info`` () = let wholeProjectResults = checker.ParseAndCheckProject(TPProject.options) |> Async.RunSynchronously let parseResult, typeCheckAnswer = checker.ParseAndCheckFileInProject(TPProject.fileName1, 0, TPProject.fileSource1, TPProject.options) |> Async.RunSynchronously - let typeCheckResults = + let typeCheckResults = match typeCheckAnswer with | FSharpCheckFileAnswer.Succeeded(res) -> res | res -> failwithf "Parsing did not finish... (%A)" res let toolTips = - [ for lineNum in 0 .. TPProject.fileLines1.Length - 1 do + [ for lineNum in 0 .. TPProject.fileLines1.Length - 1 do let lineText = TPProject.fileLines1.[lineNum] - if lineText.Contains(".IsMatch") then + if lineText.Contains(".IsMatch") then let colAtEndOfNames = lineText.IndexOf(".IsMatch") + ".IsMatch".Length let res = typeCheckResults.GetToolTipTextAlternate(lineNum, colAtEndOfNames, lineText, ["RegexTypedStatic";"IsMatch"], FSharpTokenTag.IDENT) yield lineNum, extractToolTipText res ] @@ -1318,25 +1313,25 @@ let ``Test TPProject quick info`` () = [] -let ``Test TPProject param info`` () = +let ``Test TPProject param info`` () = let wholeProjectResults = checker.ParseAndCheckProject(TPProject.options) |> Async.RunSynchronously let parseResult, typeCheckAnswer = checker.ParseAndCheckFileInProject(TPProject.fileName1, 0, TPProject.fileSource1, TPProject.options) |> Async.RunSynchronously - let typeCheckResults = + let typeCheckResults = match typeCheckAnswer with | FSharpCheckFileAnswer.Succeeded(res) -> res | res -> failwithf "Parsing did not finish... (%A)" res let paramInfos = - [ for lineNum in 0 .. TPProject.fileLines1.Length - 1 do + [ for lineNum in 0 .. TPProject.fileLines1.Length - 1 do let lineText = TPProject.fileLines1.[lineNum] - if lineText.Contains(".IsMatch") then + if lineText.Contains(".IsMatch") then let colAtEndOfNames = lineText.IndexOf(".IsMatch") + ".IsMatch".Length - let meths = typeCheckResults.GetMethodsAlternate(lineNum, colAtEndOfNames, lineText, Some ["RegexTypedStatic";"IsMatch"]) - let elems = - [ for meth in meths.Methods do + let meths = typeCheckResults.GetMethodsAlternate(lineNum, colAtEndOfNames, lineText, Some ["RegexTypedStatic";"IsMatch"]) + let elems = + [ for meth in meths.Methods do yield extractToolTipText meth.Description, meth.HasParameters, [ for p in meth.Parameters -> p.ParameterName ], [ for p in meth.StaticParameters -> p.ParameterName ] ] yield lineNum, elems] - //printfn "paramInfos = \n----\n%A\n----" paramInfos + //printfn "paramInfos = \n----\n%A\n----" paramInfos // This tests that properly statically-instantiated methods have the right method lists and parameter info paramInfos |> shouldEqual @@ -1360,7 +1355,7 @@ let ``Test TPProject param info`` () = let ``FSharpField.IsNameGenerated`` () = let checkFields source = let file = "/home/user/Test.fsx" - let _, typeCheckResults = parseAndCheckScript(file, source) + let _, typeCheckResults = parseAndCheckScript(file, source) let symbols = typeCheckResults.GetAllUsesOfAllSymbolsInFile() symbols @@ -1368,18 +1363,18 @@ let ``FSharpField.IsNameGenerated`` () = |> Array.choose (fun su -> match su.Symbol with | :? FSharpEntity as entity -> Some entity.FSharpFields - | :? FSharpUnionCase as unionCase -> Some unionCase.Fields + | :? FSharpUnionCase as unionCase -> Some unionCase.UnionCaseFields | _ -> None) |> Seq.concat |> Seq.map (fun (field: FSharpField) -> field.Name, field.IsNameGenerated) |> List.ofSeq - + ["exception E of string", ["Data0", true] "exception E of Data0: string", ["Data0", false] "exception E of Name: string", ["Name", false] "exception E of string * Data2: string * Data1: string * Name: string * Data4: string", ["Data0", true; "Data2", false; "Data1", false; "Name", false; "Data4", false] - + "type U = Case of string", ["Item", true] "type U = Case of Item: string", ["Item", false] "type U = Case of Name: string", ["Name", false] @@ -1436,17 +1431,8 @@ let ``Inherit ctor arg recovery`` () = assertHasSymbolUsages ["x"] checkResults [] -let ``Missing this recovery`` () = - let _, checkResults = getParseAndCheckResults """ - type T() = - member M() = - let x = 1 in () - """ - assertHasSymbolUsages ["x"] checkResults - -[] -let ``Brace matching smoke test`` () = - let input = +let ``Brace matching smoke test`` () = + let input = """ let x1 = { contents = 1 } let x2 = {| contents = 1 |} @@ -1455,11 +1441,11 @@ let x4 = [| 1 |] let x5 = $"abc{1}def" """ let file = "/home/user/Test.fsx" - let braces = matchBraces(file, input) + let braces = matchBraces(file, input) braces - |> Array.map (fun (r1,r2) -> - (r1.StartLine, r1.StartColumn, r1.EndLine, r1.EndColumn), + |> Array.map (fun (r1,r2) -> + (r1.StartLine, r1.StartColumn, r1.EndLine, r1.EndColumn), (r2.StartLine, r2.StartColumn, r2.EndLine, r2.EndColumn)) |> shouldEqual [|((2, 9, 2, 10), (2, 24, 2, 25)); @@ -1467,11 +1453,11 @@ let x5 = $"abc{1}def" ((4, 9, 4, 10), (4, 13, 4, 14)); ((5, 9, 5, 11), (5, 14, 5, 16)); ((6, 14, 6, 15), (6, 16, 6, 17))|] - + [] -let ``Brace matching in interpolated strings`` () = - let input = +let ``Brace matching in interpolated strings`` () = + let input = " let x5 = $\"abc{1}def\" let x6 = $\"abc{1}def{2}hij\" @@ -1479,14 +1465,16 @@ let x7 = $\"\"\"abc{1}def{2}hij\"\"\" let x8 = $\"\"\"abc{ {contents=1} }def{2}hij\"\"\" " let file = "/home/user/Test.fsx" - let braces = matchBraces(file, input) + let braces = matchBraces(file, input) braces - |> Array.map (fun (r1,r2) -> - (r1.StartLine, r1.StartColumn, r1.EndLine, r1.EndColumn), + |> Array.map (fun (r1,r2) -> + (r1.StartLine, r1.StartColumn, r1.EndLine, r1.EndColumn), (r2.StartLine, r2.StartColumn, r2.EndLine, r2.EndColumn)) |> shouldEqual [|((2, 14, 2, 15), (2, 16, 2, 17)); ((3, 14, 3, 15), (3, 16, 3, 17)); ((3, 20, 3, 21), (3, 22, 3, 23)); ((4, 16, 4, 17), (4, 18, 4, 19)); ((4, 22, 4, 23), (4, 24, 4, 25)); ((5, 19, 5, 20), (5, 30, 5, 31)); ((5, 16, 5, 17), (5, 32, 5, 33)); ((5, 36, 5, 37), (5, 38, 5, 39))|] + + diff --git a/tests/service/ExprTests.fs b/tests/service/ExprTests.fs index e0f5e827b4b..8ff672213a8 100644 --- a/tests/service/ExprTests.fs +++ b/tests/service/ExprTests.fs @@ -16,17 +16,12 @@ open System.Text open System.Collections.Generic open System.Diagnostics open System.Threading -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.EditorServices -open FSharp.Compiler.IO +open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Service.Tests.Common -open FSharp.Compiler.Symbols -open FSharp.Compiler.Symbols.FSharpExprPatterns -type FSharpCore = - | FC45 - | FC46 +type FSharpCore = + | FC45 + | FC46 | FC47 | FC50 @@ -39,18 +34,18 @@ type FSharpCore = [] -module internal Utils = - let getTempPath() = +module internal Utils = + let getTempPath() = Path.Combine(Path.GetTempPath(), "ExprTests") /// If it doesn't exists, create a folder 'ExprTests' in local user's %TEMP% folder - let createTempDir() = + let createTempDir() = let tempPath = getTempPath() - do + do if Directory.Exists tempPath then () else Directory.CreateDirectory tempPath |> ignore - /// Returns the filename part of a temp file name created with Path.GetTempFileName() + /// Returns the filename part of a temp file name created with Path.GetTempFileName() /// and an added process id and thread id to ensure uniqueness between threads. let getTempFileName() = let tempFileName = Path.GetTempFileName() @@ -59,20 +54,20 @@ module internal Utils = let procId, threadId = Process.GetCurrentProcess().Id, Thread.CurrentThread.ManagedThreadId String.concat "" [tempFile; "_"; string procId; "_"; string threadId; tempExt] // ext includes dot finally - try + try // Since Path.GetTempFileName() creates a *.tmp file in the %TEMP% folder, we want to clean it up. // This also prevents a system to run out of available randomized temp files (the pool is only 64k large). - FileSystem.FileDeleteShim tempFileName + File.Delete tempFileName with _ -> () /// Clean up after a test is run. If you need to inspect the create *.fs files, change this function to do nothing, or just break here. let cleanupTempFiles files = - { new System.IDisposable with - member _.Dispose() = - for fileName in files do + { new System.IDisposable with + member _.Dispose() = + for fileName in files do try // cleanup: only the source file is written to the temp dir. - FileSystem.FileDeleteShim fileName + File.Delete fileName with _ -> () try @@ -89,8 +84,8 @@ module internal Utils = // This behaves slightly differently on Mono versions, 'null' is printed somethimes, 'None' other times // Presumably this is very small differences in Mono reflection causing F# printing to change behaviour // For now just disabling this test. See https://github.com/fsharp/FSharp.Compiler.Service/pull/766 - let filterHack l = - l |> List.map (fun (s:string) -> + let filterHack l = + l |> List.map (fun (s:string) -> // potential difference on Mono s.Replace("ILArrayShape [(Some 0, None)]", "ILArrayShape [(Some 0, null)]") // spacing difference when run locally in VS @@ -98,64 +93,64 @@ module internal Utils = // local VS IDE vs CI env difference .Replace("Operators.Hash (x)", "x.GetHashCode()")) - let rec printExpr low (e:FSharpExpr) = - match e with - | AddressOf(e1) -> "&"+printExpr 0 e1 - | AddressSet(e1,e2) -> printExpr 0 e1 + " <- " + printExpr 0 e2 - | Application(f,tyargs,args) -> quote low (printExpr 10 f + printTyargs tyargs + " " + printCurriedArgs args) - | BaseValue(_) -> "base" - | CallWithWitnesses(Some obj,v,tyargs1,tyargs2,witnessL,argsL) -> printObjOpt (Some obj) + v.CompiledName + printTyargs tyargs2 + printTupledArgs (witnessL @ argsL) - | CallWithWitnesses(None,v,tyargs1,tyargs2,witnessL,argsL) -> v.DeclaringEntity.Value.CompiledName + printTyargs tyargs1 + "." + v.CompiledName + printTyargs tyargs2 + " " + printTupledArgs (witnessL @ argsL) - | Call(Some obj,v,tyargs1,tyargs2,argsL) -> printObjOpt (Some obj) + v.CompiledName + printTyargs tyargs2 + printTupledArgs argsL - | Call(None,v,tyargs1,tyargs2,argsL) -> v.DeclaringEntity.Value.CompiledName + printTyargs tyargs1 + "." + v.CompiledName + printTyargs tyargs2 + " " + printTupledArgs argsL - | Coerce(ty1,e1) -> quote low (printExpr 10 e1 + " :> " + printTy ty1) - | DefaultValue(ty1) -> "dflt" - | FastIntegerForLoop _ -> "for-loop" - | ILAsm(s,tyargs,args) -> s + printTupledArgs args - | ILFieldGet _ -> "ILFieldGet" - | ILFieldSet _ -> "ILFieldSet" - | IfThenElse (a,b,c) -> "(if " + printExpr 0 a + " then " + printExpr 0 b + " else " + printExpr 0 c + ")" - | Lambda(v,e1) -> "fun " + v.CompiledName + " -> " + printExpr 0 e1 - | Let((v,e1),b) -> "let " + (if v.IsMutable then "mutable " else "") + v.CompiledName + ": " + printTy v.FullType + " = " + printExpr 0 e1 + " in " + printExpr 0 b - | LetRec(vse,b) -> "let rec ... in " + printExpr 0 b - | NewArray(ty,es) -> "[|" + (es |> Seq.map (printExpr 0) |> String.concat "; ") + "|]" - | NewDelegate(ty,es) -> "new-delegate" - | NewObject(v,tys,args) -> "new " + v.DeclaringEntity.Value.CompiledName + printTupledArgs args - | NewRecord(v,args) -> + let rec printExpr low (e:FSharpExpr) = + match e with + | BasicPatterns.AddressOf(e1) -> "&"+printExpr 0 e1 + | BasicPatterns.AddressSet(e1,e2) -> printExpr 0 e1 + " <- " + printExpr 0 e2 + | BasicPatterns.Application(f,tyargs,args) -> quote low (printExpr 10 f + printTyargs tyargs + " " + printCurriedArgs args) + | BasicPatterns.BaseValue(_) -> "base" + | BasicPatterns.CallWithWitnesses(Some obj,v,tyargs1,tyargs2,witnessL,argsL) -> printObjOpt (Some obj) + v.CompiledName + printTyargs tyargs2 + printTupledArgs (witnessL @ argsL) + | BasicPatterns.CallWithWitnesses(None,v,tyargs1,tyargs2,witnessL,argsL) -> v.DeclaringEntity.Value.CompiledName + printTyargs tyargs1 + "." + v.CompiledName + printTyargs tyargs2 + " " + printTupledArgs (witnessL @ argsL) + | BasicPatterns.Call(Some obj,v,tyargs1,tyargs2,argsL) -> printObjOpt (Some obj) + v.CompiledName + printTyargs tyargs2 + printTupledArgs argsL + | BasicPatterns.Call(None,v,tyargs1,tyargs2,argsL) -> v.DeclaringEntity.Value.CompiledName + printTyargs tyargs1 + "." + v.CompiledName + printTyargs tyargs2 + " " + printTupledArgs argsL + | BasicPatterns.Coerce(ty1,e1) -> quote low (printExpr 10 e1 + " :> " + printTy ty1) + | BasicPatterns.DefaultValue(ty1) -> "dflt" + | BasicPatterns.FastIntegerForLoop _ -> "for-loop" + | BasicPatterns.ILAsm(s,tyargs,args) -> s + printTupledArgs args + | BasicPatterns.ILFieldGet _ -> "ILFieldGet" + | BasicPatterns.ILFieldSet _ -> "ILFieldSet" + | BasicPatterns.IfThenElse (a,b,c) -> "(if " + printExpr 0 a + " then " + printExpr 0 b + " else " + printExpr 0 c + ")" + | BasicPatterns.Lambda(v,e1) -> "fun " + v.CompiledName + " -> " + printExpr 0 e1 + | BasicPatterns.Let((v,e1),b) -> "let " + (if v.IsMutable then "mutable " else "") + v.CompiledName + ": " + printTy v.FullType + " = " + printExpr 0 e1 + " in " + printExpr 0 b + | BasicPatterns.LetRec(vse,b) -> "let rec ... in " + printExpr 0 b + | BasicPatterns.NewArray(ty,es) -> "[|" + (es |> Seq.map (printExpr 0) |> String.concat "; ") + "|]" + | BasicPatterns.NewDelegate(ty,es) -> "new-delegate" + | BasicPatterns.NewObject(v,tys,args) -> "new " + v.DeclaringEntity.Value.CompiledName + printTupledArgs args + | BasicPatterns.NewRecord(v,args) -> let fields = v.TypeDefinition.FSharpFields - "{" + ((fields, args) ||> Seq.map2 (fun f a -> f.Name + " = " + printExpr 0 a) |> String.concat "; ") + "}" - | NewAnonRecord(v,args) -> - let fields = v.AnonRecordTypeDetails.SortedFieldNames - "{" + ((fields, args) ||> Seq.map2 (fun f a -> f+ " = " + printExpr 0 a) |> String.concat "; ") + "}" - | NewTuple(v,args) -> printTupledArgs args - | NewUnionCase(ty,uc,args) -> uc.CompiledName + printTupledArgs args - | Quote(e1) -> "quote" + printTupledArgs [e1] - | FSharpFieldGet(obj, ty,f) -> printObjOpt obj + f.Name - | AnonRecordGet(obj, ty, n) -> printExpr 0 obj + "." + ty.AnonRecordTypeDetails.SortedFieldNames.[n] - | FSharpFieldSet(obj, ty,f,arg) -> printObjOpt obj + f.Name + " <- " + printExpr 0 arg - | Sequential(e1,e2) -> "(" + printExpr 0 e1 + "; " + printExpr 0 e2 + ")" - | ThisValue _ -> "this" - | TryFinally(e1,e2) -> "try " + printExpr 0 e1 + " finally " + printExpr 0 e2 - | TryWith(e1,_,_,vC,eC) -> "try " + printExpr 0 e1 + " with " + vC.CompiledName + " -> " + printExpr 0 eC - | TupleGet(ty,n,e1) -> printExpr 10 e1 + ".Item" + string n - | DecisionTree(dtree,targets) -> "match " + printExpr 10 dtree + " targets ..." - | DecisionTreeSuccess (tg,es) -> "$" + string tg - | TypeLambda(gp1,e1) -> "FUN ... -> " + printExpr 0 e1 - | TypeTest(ty,e1) -> printExpr 10 e1 + " :? " + printTy ty - | UnionCaseSet(obj,ty,uc,f1,e1) -> printExpr 10 obj + "." + f1.Name + " <- " + printExpr 0 e1 - | UnionCaseGet(obj,ty,uc,f1) -> printExpr 10 obj + "." + f1.Name - | UnionCaseTest(obj,ty,f1) -> printExpr 10 obj + ".Is" + f1.Name - | UnionCaseTag(obj,ty) -> printExpr 10 obj + ".Tag" - | ObjectExpr(ty,basecall,overrides,iimpls) -> "{ " + printExpr 10 basecall + " with " + printOverrides overrides + " " + printIimpls iimpls + " }" - | TraitCall(tys,nm,_,argtys,tinst,args) -> "trait call " + nm + printTupledArgs args - | Const(obj,ty) -> - match obj with + "{" + ((fields, args) ||> Seq.map2 (fun f a -> f.Name + " = " + printExpr 0 a) |> String.concat "; ") + "}" + | BasicPatterns.NewAnonRecord(v,args) -> + let fields = v.AnonRecordTypeDetails.SortedFieldNames + "{" + ((fields, args) ||> Seq.map2 (fun f a -> f+ " = " + printExpr 0 a) |> String.concat "; ") + "}" + | BasicPatterns.NewTuple(v,args) -> printTupledArgs args + | BasicPatterns.NewUnionCase(ty,uc,args) -> uc.CompiledName + printTupledArgs args + | BasicPatterns.Quote(e1) -> "quote" + printTupledArgs [e1] + | BasicPatterns.FSharpFieldGet(obj, ty,f) -> printObjOpt obj + f.Name + | BasicPatterns.AnonRecordGet(obj, ty, n) -> printExpr 0 obj + "." + ty.AnonRecordTypeDetails.SortedFieldNames.[n] + | BasicPatterns.FSharpFieldSet(obj, ty,f,arg) -> printObjOpt obj + f.Name + " <- " + printExpr 0 arg + | BasicPatterns.Sequential(e1,e2) -> "(" + printExpr 0 e1 + "; " + printExpr 0 e2 + ")" + | BasicPatterns.ThisValue _ -> "this" + | BasicPatterns.TryFinally(e1,e2) -> "try " + printExpr 0 e1 + " finally " + printExpr 0 e2 + | BasicPatterns.TryWith(e1,_,_,vC,eC) -> "try " + printExpr 0 e1 + " with " + vC.CompiledName + " -> " + printExpr 0 eC + | BasicPatterns.TupleGet(ty,n,e1) -> printExpr 10 e1 + ".Item" + string n + | BasicPatterns.DecisionTree(dtree,targets) -> "match " + printExpr 10 dtree + " targets ..." + | BasicPatterns.DecisionTreeSuccess (tg,es) -> "$" + string tg + | BasicPatterns.TypeLambda(gp1,e1) -> "FUN ... -> " + printExpr 0 e1 + | BasicPatterns.TypeTest(ty,e1) -> printExpr 10 e1 + " :? " + printTy ty + | BasicPatterns.UnionCaseSet(obj,ty,uc,f1,e1) -> printExpr 10 obj + "." + f1.Name + " <- " + printExpr 0 e1 + | BasicPatterns.UnionCaseGet(obj,ty,uc,f1) -> printExpr 10 obj + "." + f1.Name + | BasicPatterns.UnionCaseTest(obj,ty,f1) -> printExpr 10 obj + ".Is" + f1.Name + | BasicPatterns.UnionCaseTag(obj,ty) -> printExpr 10 obj + ".Tag" + | BasicPatterns.ObjectExpr(ty,basecall,overrides,iimpls) -> "{ " + printExpr 10 basecall + " with " + printOverrides overrides + " " + printIimpls iimpls + " }" + | BasicPatterns.TraitCall(tys,nm,_,argtys,tinst,args) -> "trait call " + nm + printTupledArgs args + | BasicPatterns.Const(obj,ty) -> + match obj with | :? string as s -> "\"" + s + "\"" | null -> "()" | _ -> string obj - | Value(v) -> v.CompiledName - | ValueSet(v,e1) -> quote low (v.CompiledName + " <- " + printExpr 0 e1) - | WhileLoop(e1,e2) -> "while " + printExpr 0 e1 + " do " + printExpr 0 e2 + " done" + | BasicPatterns.Value(v) -> v.CompiledName + | BasicPatterns.ValueSet(v,e1) -> quote low (v.CompiledName + " <- " + printExpr 0 e1) + | BasicPatterns.WhileLoop(e1,e2) -> "while " + printExpr 0 e1 + " do " + printExpr 0 e2 + " done" | _ -> failwith (sprintf "unrecognized %+A" e) and quote low s = if low > 0 then "(" + s + ")" else s @@ -167,7 +162,7 @@ module internal Utils = and printTy ty = ty.Format(FSharpDisplayContext.Empty) and printTyargs tyargs = match tyargs with [] -> "" | args -> "<" + String.concat "," (List.map printTy tyargs) + ">" and printOverrides ors = String.concat ";" (List.map printOverride ors) - and printOverride o = + and printOverride o = match o.CurriedParameterGroups with | [t] :: a -> "member " + t.CompiledName + "." + o.Signature.Name + printCurriedParams a + " = " + printExpr 10 o.Body @@ -202,37 +197,37 @@ module internal Utils = yield "" } - let rec printDeclaration (excludes:HashSet<_> option) (d: FSharpImplementationFileDeclaration) = + let rec printDeclaration (excludes:HashSet<_> option) (d: FSharpImplementationFileDeclaration) = seq { - match d with + match d with | FSharpImplementationFileDeclaration.Entity(e,ds) -> yield sprintf "type %s" e.LogicalName yield! printDeclarations excludes ds | FSharpImplementationFileDeclaration.MemberOrFunctionOrValue(v,vs,e) -> - - if not v.IsCompilerGenerated && + + if not v.IsCompilerGenerated && not (match excludes with None -> false | Some t -> t.Contains v.CompiledName) then - let text = + let text = //printfn "%s" v.CompiledName // try - if v.IsMember then + if v.IsMember then sprintf "member %s%s = %s @ %s" v.CompiledName (printCurriedParams vs) (printExpr 0 e) (e.Range.ToShortString()) - else + else sprintf "let %s%s = %s @ %s" v.CompiledName (printCurriedParams vs) (printExpr 0 e) (e.Range.ToShortString()) -// with e -> +// with e -> // printfn "FAILURE STACK: %A" e // sprintf "!!!!!!!!!! FAILED on %s @ %s, message: %s" v.CompiledName (v.DeclarationLocation.ToString()) e.Message yield text | FSharpImplementationFileDeclaration.InitAction(e) -> yield sprintf "do %s" (printExpr 0 e) } - and printDeclarations excludes ds = - seq { for d in ds do + and printDeclarations excludes ds = + seq { for d in ds do yield! printDeclaration excludes d } - let rec exprsOfDecl (d: FSharpImplementationFileDeclaration) = + let rec exprsOfDecl (d: FSharpImplementationFileDeclaration) = seq { - match d with + match d with | FSharpImplementationFileDeclaration.Entity(e,ds) -> yield! exprsOfDecls ds | FSharpImplementationFileDeclaration.MemberOrFunctionOrValue(v,vs,e) -> @@ -240,14 +235,14 @@ module internal Utils = yield e, e.Range | FSharpImplementationFileDeclaration.InitAction(e) -> yield e, e.Range } - and exprsOfDecls ds = - seq { for d in ds do + and exprsOfDecls ds = + seq { for d in ds do yield! exprsOfDecl d } let printGenericConstraint name (p: FSharpGenericParameterConstraint) = if p.IsCoercesToConstraint then - Some <| name + " :> " + printTy p.CoercesToTarget - elif p.IsComparisonConstraint then + Some <| name + " :> " + printTy p.CoercesToTarget + elif p.IsComparisonConstraint then Some <| name + " : comparison" elif p.IsEqualityConstraint then Some <| name + " : equality" @@ -262,69 +257,69 @@ module internal Utils = else None let printGenericParameter (p: FSharpGenericParameter) = - let name = + let name = if p.Name.StartsWith("?", StringComparison.Ordinal) then "_" - elif p.IsSolveAtCompileTime then "^" + p.Name + elif p.IsSolveAtCompileTime then "^" + p.Name else "'" + p.Name let constraints = p.Constraints |> Seq.choose (printGenericConstraint name) |> List.ofSeq name, constraints - + let printMemberSignature (v: FSharpMemberOrFunctionOrValue) = let genParams = let ps = v.GenericParameters |> Seq.map printGenericParameter |> List.ofSeq if List.isEmpty ps then "" else let constraints = ps |> List.collect snd - "<" + (ps |> Seq.map fst |> String.concat ", ") + + "<" + (ps |> Seq.map fst |> String.concat ", ") + (if List.isEmpty constraints then "" else " when " + String.concat " and " constraints) + ">" v.CompiledName + genParams + ": " + printTy v.FullType - let rec collectMembers (e:FSharpExpr) = - match e with - | AddressOf(e) -> collectMembers e - | AddressSet(e1,e2) -> Seq.append (collectMembers e1) (collectMembers e2) - | Application(f,_,args) -> Seq.append (collectMembers f) (Seq.collect collectMembers args) - | BaseValue(_) -> Seq.empty - | Call(Some obj,v,_,_,argsL) -> Seq.concat [ collectMembers obj; Seq.singleton v; Seq.collect collectMembers argsL ] - | Call(None,v,_,_,argsL) -> Seq.concat [ Seq.singleton v; Seq.collect collectMembers argsL ] - | Coerce(_,e) -> collectMembers e - | DefaultValue(_) -> Seq.empty - | FastIntegerForLoop (fromArg, toArg, body, _) -> Seq.collect collectMembers [ fromArg; toArg; body ] - | ILAsm(_,_,args) -> Seq.collect collectMembers args - | ILFieldGet (Some e,_,_) -> collectMembers e - | ILFieldGet _ -> Seq.empty - | ILFieldSet (Some e,_,_,v) -> Seq.append (collectMembers e) (collectMembers v) - | ILFieldSet _ -> Seq.empty - | IfThenElse (a,b,c) -> Seq.collect collectMembers [ a; b; c ] - | Lambda(v,e1) -> collectMembers e1 - | Let((v,e1),b) -> Seq.append (collectMembers e1) (collectMembers b) - | LetRec(vse,b) -> Seq.append (vse |> Seq.collect (snd >> collectMembers)) (collectMembers b) - | NewArray(_,es) -> Seq.collect collectMembers es - | NewDelegate(ty,es) -> collectMembers es - | NewObject(v,tys,args) -> Seq.append (Seq.singleton v) (Seq.collect collectMembers args) - | NewRecord(v,args) -> Seq.collect collectMembers args - | NewTuple(v,args) -> Seq.collect collectMembers args - | NewUnionCase(ty,uc,args) -> Seq.collect collectMembers args - | Quote(e1) -> collectMembers e1 - | FSharpFieldGet(Some obj, _,_) -> collectMembers obj - | FSharpFieldGet _ -> Seq.empty - | FSharpFieldSet(Some obj,_,_,arg) -> Seq.append (collectMembers obj) (collectMembers arg) - | FSharpFieldSet(None,_,_,arg) -> collectMembers arg - | Sequential(e1,e2) -> Seq.append (collectMembers e1) (collectMembers e2) - | ThisValue _ -> Seq.empty - | TryFinally(e1,e2) -> Seq.append (collectMembers e1) (collectMembers e2) - | TryWith(e1,_,f,_,eC) -> Seq.collect collectMembers [ e1; f; eC ] - | TupleGet(ty,n,e1) -> collectMembers e1 - | DecisionTree(dtree,targets) -> Seq.append (collectMembers dtree) (targets |> Seq.collect (snd >> collectMembers)) - | DecisionTreeSuccess (tg,es) -> Seq.collect collectMembers es - | TypeLambda(gp1,e1) -> collectMembers e1 - | TypeTest(ty,e1) -> collectMembers e1 - | UnionCaseSet(obj,ty,uc,f1,e1) -> Seq.append (collectMembers obj) (collectMembers e1) - | UnionCaseGet(obj,ty,uc,f1) -> collectMembers obj - | UnionCaseTest(obj,ty,f1) -> collectMembers obj - | UnionCaseTag(obj,ty) -> collectMembers obj - | ObjectExpr(ty,basecall,overrides,iimpls) -> + let rec collectMembers (e:FSharpExpr) = + match e with + | BasicPatterns.AddressOf(e) -> collectMembers e + | BasicPatterns.AddressSet(e1,e2) -> Seq.append (collectMembers e1) (collectMembers e2) + | BasicPatterns.Application(f,_,args) -> Seq.append (collectMembers f) (Seq.collect collectMembers args) + | BasicPatterns.BaseValue(_) -> Seq.empty + | BasicPatterns.Call(Some obj,v,_,_,argsL) -> Seq.concat [ collectMembers obj; Seq.singleton v; Seq.collect collectMembers argsL ] + | BasicPatterns.Call(None,v,_,_,argsL) -> Seq.concat [ Seq.singleton v; Seq.collect collectMembers argsL ] + | BasicPatterns.Coerce(_,e) -> collectMembers e + | BasicPatterns.DefaultValue(_) -> Seq.empty + | BasicPatterns.FastIntegerForLoop (fromArg, toArg, body, _) -> Seq.collect collectMembers [ fromArg; toArg; body ] + | BasicPatterns.ILAsm(_,_,args) -> Seq.collect collectMembers args + | BasicPatterns.ILFieldGet (Some e,_,_) -> collectMembers e + | BasicPatterns.ILFieldGet _ -> Seq.empty + | BasicPatterns.ILFieldSet (Some e,_,_,v) -> Seq.append (collectMembers e) (collectMembers v) + | BasicPatterns.ILFieldSet _ -> Seq.empty + | BasicPatterns.IfThenElse (a,b,c) -> Seq.collect collectMembers [ a; b; c ] + | BasicPatterns.Lambda(v,e1) -> collectMembers e1 + | BasicPatterns.Let((v,e1),b) -> Seq.append (collectMembers e1) (collectMembers b) + | BasicPatterns.LetRec(vse,b) -> Seq.append (vse |> Seq.collect (snd >> collectMembers)) (collectMembers b) + | BasicPatterns.NewArray(_,es) -> Seq.collect collectMembers es + | BasicPatterns.NewDelegate(ty,es) -> collectMembers es + | BasicPatterns.NewObject(v,tys,args) -> Seq.append (Seq.singleton v) (Seq.collect collectMembers args) + | BasicPatterns.NewRecord(v,args) -> Seq.collect collectMembers args + | BasicPatterns.NewTuple(v,args) -> Seq.collect collectMembers args + | BasicPatterns.NewUnionCase(ty,uc,args) -> Seq.collect collectMembers args + | BasicPatterns.Quote(e1) -> collectMembers e1 + | BasicPatterns.FSharpFieldGet(Some obj, _,_) -> collectMembers obj + | BasicPatterns.FSharpFieldGet _ -> Seq.empty + | BasicPatterns.FSharpFieldSet(Some obj,_,_,arg) -> Seq.append (collectMembers obj) (collectMembers arg) + | BasicPatterns.FSharpFieldSet(None,_,_,arg) -> collectMembers arg + | BasicPatterns.Sequential(e1,e2) -> Seq.append (collectMembers e1) (collectMembers e2) + | BasicPatterns.ThisValue _ -> Seq.empty + | BasicPatterns.TryFinally(e1,e2) -> Seq.append (collectMembers e1) (collectMembers e2) + | BasicPatterns.TryWith(e1,_,f,_,eC) -> Seq.collect collectMembers [ e1; f; eC ] + | BasicPatterns.TupleGet(ty,n,e1) -> collectMembers e1 + | BasicPatterns.DecisionTree(dtree,targets) -> Seq.append (collectMembers dtree) (targets |> Seq.collect (snd >> collectMembers)) + | BasicPatterns.DecisionTreeSuccess (tg,es) -> Seq.collect collectMembers es + | BasicPatterns.TypeLambda(gp1,e1) -> collectMembers e1 + | BasicPatterns.TypeTest(ty,e1) -> collectMembers e1 + | BasicPatterns.UnionCaseSet(obj,ty,uc,f1,e1) -> Seq.append (collectMembers obj) (collectMembers e1) + | BasicPatterns.UnionCaseGet(obj,ty,uc,f1) -> collectMembers obj + | BasicPatterns.UnionCaseTest(obj,ty,f1) -> collectMembers obj + | BasicPatterns.UnionCaseTag(obj,ty) -> collectMembers obj + | BasicPatterns.ObjectExpr(ty,basecall,overrides,iimpls) -> seq { yield! collectMembers basecall for o in overrides do @@ -333,17 +328,17 @@ module internal Utils = for o in i do yield! collectMembers o.Body } - | TraitCall(tys,nm,_,argtys,tinst,args) -> Seq.collect collectMembers args - | Const(obj,ty) -> Seq.empty - | Value(v) -> Seq.singleton v - | ValueSet(v,e1) -> Seq.append (Seq.singleton v) (collectMembers e1) - | WhileLoop(e1,e2) -> Seq.append (collectMembers e1) (collectMembers e2) + | BasicPatterns.TraitCall(tys,nm,_,argtys,tinst,args) -> Seq.collect collectMembers args + | BasicPatterns.Const(obj,ty) -> Seq.empty + | BasicPatterns.Value(v) -> Seq.singleton v + | BasicPatterns.ValueSet(v,e1) -> Seq.append (Seq.singleton v) (collectMembers e1) + | BasicPatterns.WhileLoop(e1,e2) -> Seq.append (collectMembers e1) (collectMembers e2) | _ -> failwith (sprintf "unrecognized %+A" e) - let rec printMembersOfDeclatations ds = - seq { - for d in ds do - match d with + let rec printMembersOfDeclatations ds = + seq { + for d in ds do + match d with | FSharpImplementationFileDeclaration.Entity(_,ds) -> yield! printMembersOfDeclatations ds | FSharpImplementationFileDeclaration.MemberOrFunctionOrValue(v,vs,e) -> @@ -358,12 +353,12 @@ let createOptionsAux fileSources extraArgs = let fileNames = fileSources |> List.map (fun _ -> Utils.getTempFileName()) let temp2 = Utils.getTempFileName() let fileNames = fileNames |> List.map (fun temp1 -> Utils.getTempFilePathChangeExt temp1 ".fs") - let dllName = Utils.getTempFilePathChangeExt temp2 ".dll" - let projFileName = Utils.getTempFilePathChangeExt temp2 ".fsproj" + let dllName = Utils.getTempFilePathChangeExt temp2 ".dll" + let projFileName = Utils.getTempFilePathChangeExt temp2 ".fsproj" Utils.createTempDir() - for (fileSource: string, fileName) in List.zip fileSources fileNames do - FileSystem.OpenFileForWriteShim(fileName).Write(fileSource) + for (fileSource, fileName) in List.zip fileSources fileNames do + File.WriteAllText(fileName, fileSource) let args = [| yield! extraArgs; yield! mkProjectCommandLineArgs (dllName, fileNames) |] let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) @@ -372,7 +367,7 @@ let createOptionsAux fileSources extraArgs = //--------------------------------------------------------------------------------------------------------- // This project is a smoke test for a whole range of standard and obscure expressions -module internal Project1 = +module internal Project1 = let fileSource1 = """ module M @@ -386,12 +381,12 @@ let tupleEx1 = (1, 1L) let tupleEx2 = (1, 1L, 1u) let tupleEx3 = (1, 1L, 1u, 1s) -let localExample = +let localExample = let y = 1 let z = 1 y, z -let localGenericFunctionExample() = +let localGenericFunctionExample() = let y = 1 let compiledAsLocalGenericFunction x = x compiledAsLocalGenericFunction y, compiledAsLocalGenericFunction 1.0 @@ -407,14 +402,14 @@ let testILCall2 = System.Console.WriteLine("176") let rec recValNeverUsedAtRuntime = recFuncIgnoresFirstArg (fun _ -> recValNeverUsedAtRuntime) 1 and recFuncIgnoresFirstArg g v = v -let testFun4() = +let testFun4() = // Test recursive values in expression position let rec recValNeverUsedAtRuntime = recFuncIgnoresFirstArg (fun _ -> recValNeverUsedAtRuntime) 1 and recFuncIgnoresFirstArg g v = v recValNeverUsedAtRuntime -type ClassWithImplicitConstructor(compiledAsArg: int) = +type ClassWithImplicitConstructor(compiledAsArg: int) = inherit obj() let compiledAsField = 1 let compiledAsLocal = 1 @@ -430,9 +425,9 @@ type ClassWithImplicitConstructor(compiledAsArg: int) = member __.M1() = compiledAsField + compiledAsGenericInstanceMethod compiledAsField + compiledAsArg member __.M2() = compiledAsInstanceMethod() - static member SM1() = compiledAsStaticField + compiledAsGenericStaticMethod compiledAsStaticField + static member SM1() = compiledAsStaticField + compiledAsGenericStaticMethod compiledAsStaticField static member SM2() = compiledAsStaticMethod() - //override _.ToString() = base.ToString() + string 999 + //override __.ToString() = base.ToString() + string 999 member this.TestCallinToString() = this.ToString() exception Error of int * int @@ -441,17 +436,17 @@ let err = Error(3,4) let matchOnException err = match err with Error(a,b) -> 3 | e -> raise e -let upwardForLoop () = +let upwardForLoop () = let mutable a = 1 for i in 0 .. 10 do a <- a + 1 a -let upwardForLoop2 () = +let upwardForLoop2 () = let mutable a = 1 for i = 0 to 10 do a <- a + 1 a -let downwardForLoop () = +let downwardForLoop () = let mutable a = 1 for i = 10 downto 1 do a <- a + 1 a @@ -460,9 +455,9 @@ let quotationTest1() = <@ 1 + 1 @> let quotationTest2 v = <@ %v + 1 @> type RecdType = { Field1: int; Field2: int } -type UnionType = Case1 of int | Case2 | Case3 of int * string +type UnionType = Case1 of int | Case2 | Case3 of int * string -type ClassWithEventsAndProperties() = +type ClassWithEventsAndProperties() = let ev = new Event<_>() static let sev = new Event<_>() member x.InstanceProperty = ev.Trigger(1); 1 @@ -478,26 +473,26 @@ System.Console.WriteLine("777") // do a top-levl action let functionWithSubmsumption(x:obj) = x :?> string //let functionWithCoercion(x:string) = (x :> obj) :?> string |> functionWithSubmsumption |> functionWithSubmsumption -type MultiArgMethods(c:int,d:int) = +type MultiArgMethods(c:int,d:int) = member x.Method(a:int, b : int) = 1 member x.CurriedMethod(a1:int, b1: int) (a2:int, b2:int) = 1 -let testFunctionThatCallsMultiArgMethods() = +let testFunctionThatCallsMultiArgMethods() = let m = MultiArgMethods(3,4) (m.Method(7,8) + m.CurriedMethod (9,10) (11,12)) -//let functionThatUsesObjectExpression() = -// { new obj() with member x.ToString() = string 888 } +//let functionThatUsesObjectExpression() = +// { new obj() with member x.ToString() = string 888 } // -//let functionThatUsesObjectExpressionWithInterfaceImpl() = -// { new obj() with -// member x.ToString() = string 888 -// interface System.IComparable with -// member x.CompareTo(y:obj) = 0 } +//let functionThatUsesObjectExpressionWithInterfaceImpl() = +// { new obj() with +// member x.ToString() = string 888 +// interface System.IComparable with +// member x.CompareTo(y:obj) = 0 } let testFunctionThatUsesUnitsOfMeasure (x : float<_>) (y: float<_>) = x + y -let testFunctionThatUsesAddressesAndByrefs (x: byref) = +let testFunctionThatUsesAddressesAndByrefs (x: byref) = let mutable w = 4 let y1 = &x // address-of let y2 = &w // address-of @@ -505,7 +500,7 @@ let testFunctionThatUsesAddressesAndByrefs (x: byref) = let r = ref 3 // address-of let y3 = &arr.[0] // address-of array let y4 = &r.contents // address-of field - let z = x + y1 + y2 + y3 // dereference + let z = x + y1 + y2 + y3 // dereference w <- 3 // assign to pointer x <- 4 // assign to byref y2 <- 4 // assign to byref @@ -514,7 +509,7 @@ let testFunctionThatUsesAddressesAndByrefs (x: byref) = let testFunctionThatUsesStructs1 (dt:System.DateTime) = dt.AddDays(3.0) -let testFunctionThatUsesStructs2 () = +let testFunctionThatUsesStructs2 () = let dt1 = System.DateTime.Now let mutable dt2 = System.DateTime.Now let dt3 = dt1 - dt2 @@ -524,20 +519,20 @@ let testFunctionThatUsesStructs2 () = let dt7 = dt6 - dt4 dt7 -let testFunctionThatUsesWhileLoop() = +let testFunctionThatUsesWhileLoop() = let mutable x = 1 while x < 100 do x <- x + 1 x -let testFunctionThatUsesTryWith() = - try +let testFunctionThatUsesTryWith() = + try testFunctionThatUsesWhileLoop() with :? System.ArgumentException as e -> e.Message.Length -let testFunctionThatUsesTryFinally() = - try +let testFunctionThatUsesTryFinally() = + try testFunctionThatUsesWhileLoop() finally System.Console.WriteLine("8888") @@ -548,36 +543,36 @@ type System.Console with type System.DateTime with member x.TwoMinute = x.Minute + x.Minute -let testFunctionThatUsesExtensionMembers() = +let testFunctionThatUsesExtensionMembers() = System.Console.WriteTwoLines() let v = System.DateTime.Now.TwoMinute System.Console.WriteTwoLines() -let testFunctionThatUsesOptionMembers() = +let testFunctionThatUsesOptionMembers() = let x = Some(3) (x.IsSome, x.IsNone) -let testFunctionThatUsesOverAppliedFunction() = +let testFunctionThatUsesOverAppliedFunction() = id id 3 -let testFunctionThatUsesPatternMatchingOnLists(x) = - match x with +let testFunctionThatUsesPatternMatchingOnLists(x) = + match x with | [] -> 1 | [h] -> 2 | [h;h2] -> 3 | _ -> 4 -let testFunctionThatUsesPatternMatchingOnOptions(x) = - match x with +let testFunctionThatUsesPatternMatchingOnOptions(x) = + match x with | None -> 1 | Some h -> 2 + h -let testFunctionThatUsesPatternMatchingOnOptions2(x) = - match x with +let testFunctionThatUsesPatternMatchingOnOptions2(x) = + match x with | None -> 1 | Some _ -> 2 -let testFunctionThatUsesConditionalOnOptions2(x: int option) = +let testFunctionThatUsesConditionalOnOptions2(x: int option) = if x.IsSome then 1 else 2 let f x y = x+y @@ -615,14 +610,14 @@ let test11(s:string) = let rec badLoop : (int -> int) = () // so that it is a function value - fun x -> badLoop (x + 1) + fun x -> badLoop (x + 1) module LetLambda = let f = () // so that it is a function value fun a b -> a + b -let letLambdaRes = [ 1, 2 ] |> List.map (fun (a, b) -> LetLambda.f a b) +let letLambdaRes = [ 1, 2 ] |> List.map (fun (a, b) -> LetLambda.f a b) let anonRecd = {| X = 1; Y = 2 |} let anonRecdGet = (anonRecd.X, anonRecd.Y) @@ -730,13 +725,13 @@ let ``Test Unoptimized Declarations Project1`` () = let exprChecker = FSharpChecker.Create(keepAssemblyContents=true) let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project1 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 3 // recursive value warning - wholeProjectResults.Diagnostics.[0].Severity |> shouldEqual FSharpDiagnosticSeverity.Warning - wholeProjectResults.Diagnostics.[1].Severity |> shouldEqual FSharpDiagnosticSeverity.Warning - wholeProjectResults.Diagnostics.[2].Severity |> shouldEqual FSharpDiagnosticSeverity.Warning + wholeProjectResults.Errors.Length |> shouldEqual 3 // recursive value warning + wholeProjectResults.Errors.[0].Severity |> shouldEqual FSharpErrorSeverity.Warning + wholeProjectResults.Errors.[1].Severity |> shouldEqual FSharpErrorSeverity.Warning + wholeProjectResults.Errors.[2].Severity |> shouldEqual FSharpErrorSeverity.Warning wholeProjectResults.AssemblyContents.ImplementationFiles.Length |> shouldEqual 2 let file1 = wholeProjectResults.AssemblyContents.ImplementationFiles.[0] @@ -846,13 +841,13 @@ let ``Test Unoptimized Declarations Project1`` () = printfn "// unoptimized" printfn "let expected =\n%A" (printDeclarations None (List.ofSeq file1.Declarations) |> Seq.toList) printfn "let expected2 =\n%A" (printDeclarations None (List.ofSeq file2.Declarations) |> Seq.toList) - printDeclarations None (List.ofSeq file1.Declarations) - |> Seq.toList + printDeclarations None (List.ofSeq file1.Declarations) + |> Seq.toList |> Utils.filterHack |> shouldPairwiseEqual (Utils.filterHack expected) - printDeclarations None (List.ofSeq file2.Declarations) - |> Seq.toList + printDeclarations None (List.ofSeq file2.Declarations) + |> Seq.toList |> Utils.filterHack |> shouldPairwiseEqual (Utils.filterHack expected2) @@ -865,13 +860,13 @@ let ``Test Optimized Declarations Project1`` () = let exprChecker = FSharpChecker.Create(keepAssemblyContents=true) let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project1 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 3 // recursive value warning - wholeProjectResults.Diagnostics.[0].Severity |> shouldEqual FSharpDiagnosticSeverity.Warning - wholeProjectResults.Diagnostics.[1].Severity |> shouldEqual FSharpDiagnosticSeverity.Warning - wholeProjectResults.Diagnostics.[2].Severity |> shouldEqual FSharpDiagnosticSeverity.Warning + wholeProjectResults.Errors.Length |> shouldEqual 3 // recursive value warning + wholeProjectResults.Errors.[0].Severity |> shouldEqual FSharpErrorSeverity.Warning + wholeProjectResults.Errors.[1].Severity |> shouldEqual FSharpErrorSeverity.Warning + wholeProjectResults.Errors.[2].Severity |> shouldEqual FSharpErrorSeverity.Warning wholeProjectResults.GetOptimizedAssemblyContents().ImplementationFiles.Length |> shouldEqual 2 let file1 = wholeProjectResults.GetOptimizedAssemblyContents().ImplementationFiles.[0] @@ -982,13 +977,13 @@ let ``Test Optimized Declarations Project1`` () = printfn "// optimized" printfn "let expected =\n%A" (printDeclarations None (List.ofSeq file1.Declarations) |> Seq.toList) printfn "let expected2 =\n%A" (printDeclarations None (List.ofSeq file2.Declarations) |> Seq.toList) - printDeclarations None (List.ofSeq file1.Declarations) - |> Seq.toList + printDeclarations None (List.ofSeq file1.Declarations) + |> Seq.toList |> Utils.filterHack |> shouldPairwiseEqual (Utils.filterHack expected) - printDeclarations None (List.ofSeq file2.Declarations) - |> Seq.toList + printDeclarations None (List.ofSeq file2.Declarations) + |> Seq.toList |> Utils.filterHack |> shouldPairwiseEqual (Utils.filterHack expected2) @@ -1008,7 +1003,7 @@ let testOperators dnName fsName excludedTests expectedUnoptimized expectedOptimi let source = System.String.Format(Project1.operatorTests, dnName, fsName) let replace (s:string) r = s.Replace("let " + r, "// let " + r) let fileSource = excludedTests |> List.fold replace source - FileSystem.OpenFileForWriteShim(filePath).Write(fileSource) + File.WriteAllText(filePath, fileSource) let args = mkProjectCommandLineArgsSilent (dllPath, [filePath]) @@ -1019,7 +1014,7 @@ let testOperators dnName fsName excludedTests expectedUnoptimized expectedOptimi let currentAssemblyToken = let fsCore = referencedAssemblies |> List.tryFind (fun asm -> asm.SimpleName = "FSharp.Core") match fsCore with - | Some core -> + | Some core -> if core.QualifiedName.StartsWith("FSharp.Core, Version=5.0") then FC50 elif core.QualifiedName.StartsWith("FSharp.Core, Version=4.7") then FC47 elif core.QualifiedName.StartsWith("FSharp.Core, Version=4.6") then FC46 @@ -1030,20 +1025,20 @@ let testOperators dnName fsName excludedTests expectedUnoptimized expectedOptimi printfn "Referenced assembly %s: %O" r.QualifiedName r.FileName let errors = StringBuilder() - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "%s Operator Tests error: <<<%s>>>" dnName e.Message errors.AppendLine e.Message |> ignore errors.ToString() |> shouldEqual "" - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 - let resultUnoptimized = - wholeProjectResults.AssemblyContents.ImplementationFiles.[0].Declarations + let resultUnoptimized = + wholeProjectResults.AssemblyContents.ImplementationFiles.[0].Declarations |> printDeclarations None |> Seq.toList - let resultOptimized = - wholeProjectResults.GetOptimizedAssemblyContents().ImplementationFiles.[0].Declarations + let resultOptimized = + wholeProjectResults.GetOptimizedAssemblyContents().ImplementationFiles.[0].Declarations |> printDeclarations None |> Seq.toList @@ -1066,7 +1061,7 @@ let testOperators dnName fsName excludedTests expectedUnoptimized expectedOptimi let filterTests result expected = List.zip result expected |> List.choose (fun (result, (when', s)) -> - if List.isEmpty when' then + if List.isEmpty when' then countFC45 <- countFC45 + 1 countFC46 <- countFC46 + 1 countFC47 <- countFC47 + 1 @@ -1079,7 +1074,7 @@ let testOperators dnName fsName excludedTests expectedUnoptimized expectedOptimi if when' |> List.contains FC50 then countFC50 <- countFC50 + 1 if when' |> List.contains currentAssemblyToken then Some(result, s) - else + else None) |> List.unzip @@ -1113,7 +1108,7 @@ let ``Test Operator Declarations for Byte`` () = "testByteUnaryNegOperator"; "testByteUnaryNegChecked"; ] - + let expectedUnoptimized = [ [], "type OperatorTestsByte" [], "let testByteEqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,63--4,72)" @@ -1220,7 +1215,7 @@ let ``Test Operator Declarations for Byte`` () = [] let ``Test Operator Declarations for SByte`` () = let excludedTests = [ ] - + let expectedUnoptimized = [ [], "type OperatorTestsSByte" [], "let testSByteEqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,66--4,75)" @@ -1329,7 +1324,7 @@ let ``Test Operator Declarations for SByte`` () = [] let ``Test Operator Declarations for Int16`` () = let excludedTests = [ ] - + let expectedUnoptimized = [ [], "type OperatorTestsInt16" [], "let testInt16EqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,66--4,75)" @@ -1441,7 +1436,7 @@ let ``Test Operator Declarations for UInt16`` () = "testUInt16UnaryNegOperator"; "testUInt16UnaryNegChecked"; ] - + let expectedUnoptimized = [ [], "type OperatorTestsUInt16" [], "let testUInt16EqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,69--4,78)" @@ -1546,7 +1541,7 @@ let ``Test Operator Declarations for UInt16`` () = [] let ``Test Operator Declarations for Int`` () = let excludedTests = [ ] - + let expectedUnoptimized = [ [], "type OperatorTestsInt" [], "let testIntEqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,60--4,69)" @@ -1655,7 +1650,7 @@ let ``Test Operator Declarations for Int`` () = [] let ``Test Operator Declarations for Int32`` () = let excludedTests = [ ] - + let expectedUnoptimized = [ [], "type OperatorTestsInt32" [], "let testInt32EqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,66--4,75)" @@ -1768,7 +1763,7 @@ let ``Test Operator Declarations for UInt32`` () = "testUInt32UnaryNegOperator"; "testUInt32UnaryNegChecked"; ] - + let expectedUnoptimized = [ [], "type OperatorTestsUInt32" [], "let testUInt32EqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,69--4,78)" @@ -1873,7 +1868,7 @@ let ``Test Operator Declarations for UInt32`` () = [] let ``Test Operator Declarations for Int64`` () = let excludedTests = [ ] - + let expectedUnoptimized = [ [], "type OperatorTestsInt64" [], "let testInt64EqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,66--4,75)" @@ -1986,7 +1981,7 @@ let ``Test Operator Declarations for UInt64`` () = "testUInt64UnaryNegOperator"; "testUInt64UnaryNegChecked"; ] - + let expectedUnoptimized = [ [], "type OperatorTestsUInt64" [], "let testUInt64EqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,69--4,78)" @@ -2091,7 +2086,7 @@ let ``Test Operator Declarations for UInt64`` () = [] let ``Test Operator Declarations for IntPtr`` () = let excludedTests = [ ] - + let expectedUnoptimized = [ [], "type OperatorTestsIntPtr" [], "let testIntPtrEqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,75--4,84)" @@ -2203,7 +2198,7 @@ let ``Test Operator Declarations for UIntPtr`` () = "testUIntPtrUnaryNegOperator"; "testUIntPtrUnaryNegChecked"; ] - + let expectedUnoptimized = [ [], "type OperatorTestsUIntPtr" [], "let testUIntPtrEqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,78--4,87)" @@ -2512,7 +2507,7 @@ let ``Test Operator Declarations for Single with unit of measure`` () = [], "let testSingleUnitizedToCharOperator(e1) = Operators.ToChar> (fun arg0_0 -> LanguagePrimitives.ExplicitDynamic,Microsoft.FSharp.Core.char> (arg0_0),e1) @ (55,98--55,105)" [FC47; FC50], "let testSingleUnitizedToStringOperator(e1) = let x: Microsoft.FSharp.Core.float32 = Operators.ToSingle> (fun arg0_0 -> LanguagePrimitives.ExplicitDynamic,Microsoft.FSharp.Core.float32> (arg0_0),e1) in x.ToString(dflt,CultureInfo.get_InvariantCulture () :> System.IFormatProvider) @ (56,98--56,107)" ] - + testOperators "SingleUnitized" "float32" excludedTests expectedUnoptimized expectedOptimized [] @@ -2524,7 +2519,7 @@ let ``Test Operator Declarations for Double`` () = "testDoubleShiftLeftOperator"; "testDoubleShiftRightOperator"; ] - + let expectedUnoptimized = [ [], "type OperatorTestsDouble" [], "let testDoubleEqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,67--4,76)" @@ -2995,13 +2990,13 @@ let ``Test Operator Declarations for String`` () = //--------------------------------------------------------------------------------------------------------- // This big list expression was causing us trouble -module internal ProjectStressBigExpressions = +module internal ProjectStressBigExpressions = let fileSource1 = """ -module StressBigExpressions +module StressBigExpressions -let BigListExpression = +let BigListExpression = [("C", "M.C", "file1", ((3, 5), (3, 6)), ["class"]); ("( .ctor )", "M.C.( .ctor )", "file1", ((3, 5), (3, 6)),["member"; "ctor"]); @@ -3021,7 +3016,7 @@ let BigListExpression = ("M", "M", "file1", ((1, 7), (1, 8)), ["module"]); ("D1", "N.D1", "file2", ((5, 5), (5, 7)), ["class"]); ("( .ctor )", "N.D1.( .ctor )", "file2", ((5, 5), (5, 7)),["member"; "ctor"]); - ("SomeProperty", "N.D1.SomeProperty", "file2", ((6, 13), (6, 25)),["member"; "getter"]); + ("SomeProperty", "N.D1.SomeProperty", "file2", ((6, 13), (6, 25)),["member"; "getter"]); ("x", "x", "file2", ((6, 11), (6, 12)), []); ("M", "M", "file2", ((6, 28), (6, 29)), ["module"]); ("xxx", "M.xxx", "file2", ((6, 28), (6, 33)), ["val"]); @@ -3094,7 +3089,7 @@ let BigListExpression = ("mmmm2", "N.mmmm2", "file2", ((39, 4), (39, 9)), ["val"]); ("N", "N", "file2", ((1, 7), (1, 8)), ["module"])] -let BigSequenceExpression(outFileOpt,docFileOpt,baseAddressOpt) = +let BigSequenceExpression(outFileOpt,docFileOpt,baseAddressOpt) = [ yield "--simpleresolution" yield "--noframework" match outFileOpt with @@ -3137,7 +3132,7 @@ let BigSequenceExpression(outFileOpt,docFileOpt,baseAddressOpt) = yield "--fullpaths" yield "--flaterrors" if true then yield "--warnaserror" - yield + yield if true then "--target:library" else "--target:exe" for symbol in [] do @@ -3154,7 +3149,7 @@ let BigSequenceExpression(outFileOpt,docFileOpt,baseAddressOpt) = else "--tailcalls-" match baseAddressOpt with | None -> () - | Some debugType -> + | Some debugType -> match "" with | "NONE" -> () | "PDBONLY" -> yield "--debug:pdbonly" @@ -3177,12 +3172,12 @@ let BigSequenceExpression(outFileOpt,docFileOpt,baseAddressOpt) = for f in [] do yield "--resource:" + f for i in [] do - yield "--lib:" + yield "--lib:" for r in [] do - yield "-r:" + r + yield "-r:" + r yield! [] ] - + """ @@ -3195,8 +3190,8 @@ let ``Test expressions of declarations stress big expressions`` () = use _holder = cleanup let exprChecker = FSharpChecker.Create(keepAssemblyContents=true) let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + + wholeProjectResults.Errors.Length |> shouldEqual 0 wholeProjectResults.AssemblyContents.ImplementationFiles.Length |> shouldEqual 1 let file1 = wholeProjectResults.AssemblyContents.ImplementationFiles.[0] @@ -3211,8 +3206,8 @@ let ``Test expressions of optimized declarations stress big expressions`` () = use _holder = cleanup let exprChecker = FSharpChecker.Create(keepAssemblyContents=true) let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + + wholeProjectResults.Errors.Length |> shouldEqual 0 wholeProjectResults.GetOptimizedAssemblyContents().ImplementationFiles.Length |> shouldEqual 1 let file1 = wholeProjectResults.GetOptimizedAssemblyContents().ImplementationFiles.[0] @@ -3223,7 +3218,7 @@ let ``Test expressions of optimized declarations stress big expressions`` () = //--------------------------------------------------------------------------------------------------------- // This project is for witness arguments (CallWithWitnesses) -module internal ProjectForWitnesses1 = +module internal ProjectForWitnesses1 = let fileSource1 = """ module M @@ -3272,13 +3267,13 @@ let ``Test ProjectForWitnesses1`` () = let exprChecker = FSharpChecker.Create(keepAssemblyContents=true) let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project1 error: <<<%s>>>" e.Message wholeProjectResults.AssemblyContents.ImplementationFiles.Length |> shouldEqual 1 let file1 = wholeProjectResults.AssemblyContents.ImplementationFiles.[0] - let expected = + let expected = ["type M"; "let callX(x) (y) = trait call X(x,y) @ (5,35--5,88)"; "let callXY(x) (y) = (trait call Y1(x,y); trait call Y2(x,y)) @ (9,4--10,60)"; "type C"; "type D"; @@ -3301,9 +3296,9 @@ let ``Test ProjectForWitnesses1`` () = "let f7(unitVar0) = M.callXY (fun arg0_0 -> fun arg1_0 -> C.Y1 (arg0_0,arg1_0),fun arg0_0 -> fun arg1_0 -> C.Y2 (arg0_0,arg1_0),new C(()),new D(())) @ (35,11--35,29)"; "let f8(unitVar0) = M.callXY (fun arg0_0 -> fun arg1_0 -> D.Y1 (arg0_0,arg1_0),fun arg0_0 -> fun arg1_0 -> D.Y2 (arg0_0,arg1_0),new D(()),new C(())) @ (36,11--36,29)"] - let actual = + let actual = printDeclarations None (List.ofSeq file1.Declarations) - |> Seq.toList + |> Seq.toList printfn "actual:\n\n%A" actual actual |> shouldPairwiseEqual expected @@ -3316,11 +3311,11 @@ let ``Test ProjectForWitnesses1 GetWitnessPassingInfo`` () = let exprChecker = FSharpChecker.Create(keepAssemblyContents=true) let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "ProjectForWitnesses1 error: <<<%s>>>" e.Message begin - let symbol = + let symbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.tryFind (fun su -> su.Symbol.DisplayName = "callX") |> Option.orElseWith (fun _ -> failwith "Could not get symbol") @@ -3328,7 +3323,7 @@ let ``Test ProjectForWitnesses1 GetWitnessPassingInfo`` () = |> Option.get printfn "symbol = %s" symbol.FullName let wpi = (symbol.GetWitnessPassingInfo()) - match wpi with + match wpi with | None -> failwith "witness passing info expected" | Some (nm, argTypes) -> nm |> shouldEqual "callX$W" @@ -3339,7 +3334,7 @@ let ``Test ProjectForWitnesses1 GetWitnessPassingInfo`` () = begin - let symbol = + let symbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.tryFind (fun su -> su.Symbol.DisplayName = "callXY") |> Option.orElseWith (fun _ -> failwith "Could not get symbol") @@ -3347,7 +3342,7 @@ let ``Test ProjectForWitnesses1 GetWitnessPassingInfo`` () = |> Option.get printfn "symbol = %s" symbol.FullName let wpi = (symbol.GetWitnessPassingInfo()) - match wpi with + match wpi with | None -> failwith "witness passing info expected" | Some (nm, argTypes) -> nm |> shouldEqual "callXY$W" @@ -3364,7 +3359,7 @@ let ``Test ProjectForWitnesses1 GetWitnessPassingInfo`` () = //--------------------------------------------------------------------------------------------------------- // This project is for witness arguments (CallWithWitnesses) -module internal ProjectForWitnesses2 = +module internal ProjectForWitnesses2 = let fileSource1 = """ module M @@ -3396,14 +3391,14 @@ let ``Test ProjectForWitnesses2`` () = let exprChecker = FSharpChecker.Create(keepAssemblyContents=true) let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "ProjectForWitnesses2 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 wholeProjectResults.AssemblyContents.ImplementationFiles.Length |> shouldEqual 1 let file1 = wholeProjectResults.AssemblyContents.ImplementationFiles.[0] - let expected = + let expected = ["type M"; "type Point"; "member get_Zero(unitVar0) = {x = 0; y = 0} @ (6,25--6,37)"; "member Neg(p) = {x = Operators.op_UnaryNegation (fun arg0_0 -> LanguagePrimitives.UnaryNegationDynamic (arg0_0),p.x); y = Operators.op_UnaryNegation (fun arg0_0 -> LanguagePrimitives.UnaryNegationDynamic (arg0_0),p.y)} @ (7,34--7,56)"; @@ -3413,9 +3408,9 @@ let ``Test ProjectForWitnesses2`` () = "member DivideByInt(_arg3,i) = let x: Microsoft.FSharp.Core.int = _arg3.Item in MyNumber(Operators.op_Division (fun arg0_0 -> fun arg1_0 -> LanguagePrimitives.DivisionDynamic (arg0_0,arg1_0),x,i)) @ (15,31--15,41)"; "type MyNumberWrapper"] - let actual = + let actual = printDeclarations None (List.ofSeq file1.Declarations) - |> Seq.toList + |> Seq.toList printfn "actual:\n\n%A" actual actual |> shouldPairwiseEqual expected @@ -3423,7 +3418,7 @@ let ``Test ProjectForWitnesses2`` () = //--------------------------------------------------------------------------------------------------------- // This project is for witness arguments, testing for https://github.com/dotnet/fsharp/issues/10364 -module internal ProjectForWitnesses3 = +module internal ProjectForWitnesses3 = let fileSource1 = """ module M @@ -3443,7 +3438,7 @@ let s2 = sign p1 """ let createOptions() = createOptionsAux [fileSource1] ["--langversion:preview"] - + [] let ``Test ProjectForWitnesses3`` () = let cleanup, options = createOptionsAux [ ProjectForWitnesses3.fileSource1 ] ["--langversion:preview"] @@ -3451,14 +3446,14 @@ let ``Test ProjectForWitnesses3`` () = let exprChecker = FSharpChecker.Create(keepAssemblyContents=true) let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "ProjectForWitnesses3 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 wholeProjectResults.AssemblyContents.ImplementationFiles.Length |> shouldEqual 1 let file1 = wholeProjectResults.AssemblyContents.ImplementationFiles.[0] - let expected = + let expected = ["type M"; "type Point"; "member get_Zero(unitVar0) = {x = 0; y = 0} @ (6,25--6,37)"; "member get_Sign(p) (unitVar1) = Operators.Sign (fun arg0_0 -> Operators.Sign (arg0_0),p.x) @ (7,20--7,28)"; @@ -3468,9 +3463,9 @@ let ``Test ProjectForWitnesses3`` () = "let s = ListModule.Sum (fun arg0_0 -> Point.get_Zero (()),fun arg0_0 -> fun arg1_0 -> Point.op_Addition (arg0_0,arg1_0),Cons(M.p1 (),Cons(M.p2 (),Empty()))) @ (13,8--13,25)"; "let s2 = Operators.Sign (fun arg0_0 -> arg0_0.get_Sign(()),M.p1 ()) @ (14,9--14,16)"] - let actual = + let actual = printDeclarations None (List.ofSeq file1.Declarations) - |> Seq.toList + |> Seq.toList printfn "actual:\n\n%A" actual actual |> shouldPairwiseEqual expected @@ -3482,11 +3477,11 @@ let ``Test ProjectForWitnesses3 GetWitnessPassingInfo`` () = let exprChecker = FSharpChecker.Create(keepAssemblyContents=true) let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "ProjectForWitnesses3 error: <<<%s>>>" e.Message begin - let symbol = + let symbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.tryFind (fun su -> su.Symbol.DisplayName = "sum") |> Option.orElseWith (fun _ -> failwith "Could not get symbol") @@ -3494,7 +3489,7 @@ let ``Test ProjectForWitnesses3 GetWitnessPassingInfo`` () = |> Option.get printfn "symbol = %s" symbol.FullName let wpi = (symbol.GetWitnessPassingInfo()) - match wpi with + match wpi with | None -> failwith "witness passing info expected" | Some (nm, argTypes) -> nm |> shouldEqual "Sum$W" @@ -3509,59 +3504,3 @@ let ``Test ProjectForWitnesses3 GetWitnessPassingInfo`` () = argText2 |> shouldEqual "type ^T -> ^T -> ^T" end -//--------------------------------------------------------------------------------------------------------- -// This project is for witness arguments, testing for https://github.com/dotnet/fsharp/issues/10364 - -module internal ProjectForWitnesses4 = - - let fileSource1 = """ -module M - -let isEmptyArray x = - match x with - | [| |] -> x - | _ -> x - -let isNull (ts : 't[]) = - match ts with - | null -> true - | _ -> false - -let isNullQuoted (ts : 't[]) = - <@ - match ts with - | null -> true - | _ -> false - @> - -""" - - let createOptions() = createOptionsAux [fileSource1] ["--langversion:preview"] - -[] -let ``Test ProjectForWitnesses4 GetWitnessPassingInfo`` () = - let cleanup, options = ProjectForWitnesses4.createOptions() - use _holder = cleanup - let exprChecker = FSharpChecker.Create(keepAssemblyContents=true) - let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - - for e in wholeProjectResults.Diagnostics do - printfn "ProjectForWitnesses4 error: <<<%s>>>" e.Message - - Assert.AreEqual(wholeProjectResults.Diagnostics.Length, 0) - - wholeProjectResults.AssemblyContents.ImplementationFiles.Length |> shouldEqual 1 - let file1 = wholeProjectResults.AssemblyContents.ImplementationFiles.[0] - - let expected = - ["type M"; - "let isEmptyArray(x) = (if (if Operators.op_Inequality<'a Microsoft.FSharp.Core.[]> (x,dflt) then Operators.op_Equality (ArrayModule.Length<'a> (x),0) else False) then x else x) @ (5,10--5,11)"; - "let isNull(ts) = (if Operators.op_Equality<'t Microsoft.FSharp.Core.[]> (ts,dflt) then True else False) @ (10,10--10,12)"; - "let isNullQuoted(ts) = quote((if Operators.op_Equality<'t Microsoft.FSharp.Core.[]> (ts,dflt) then True else False)) @ (15,4--19,6)"] - - let actual = - printDeclarations None (List.ofSeq file1.Declarations) - |> Seq.toList - printfn "actual:\n\n%A" actual - actual - |> shouldPairwiseEqual expected diff --git a/tests/service/FileSystemTests.fs b/tests/service/FileSystemTests.fs index a6dd94fcc45..59bb29f0553 100644 --- a/tests/service/FileSystemTests.fs +++ b/tests/service/FileSystemTests.fs @@ -13,82 +13,107 @@ open FsUnit open System open System.IO open System.Text -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.IO +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.Service.Tests.Common - let fileName1 = @"c:\mycode\test1.fs" // note, the path doesn' exist let fileName2 = @"c:\mycode\test2.fs" // note, the path doesn' exist -#nowarn "57" - -let file1 = """ +type internal MyFileSystem(defaultFileSystem:IFileSystem) = + let file1 = """ module File1 let A = 1""" - -let file2 = """ + let file2 = """ module File2 let B = File1.A + File1.A""" + let files = dict [(fileName1, file1); (fileName2, file2)] -type internal MyFileSystem() = - inherit DefaultFileSystem() - static member FilesCache = dict [(fileName1, file1); (fileName2, file2)] + interface IFileSystem with // Implement the service to open files for reading and writing - override _.OpenFileForReadShim(filePath, ?useMemoryMappedFile: bool, ?shouldShadowCopy: bool) = - let shouldShadowCopy = defaultArg shouldShadowCopy false - let useMemoryMappedFile = defaultArg useMemoryMappedFile false - match MyFileSystem.FilesCache.TryGetValue filePath with - | true, text -> - new MemoryStream(Encoding.UTF8.GetBytes(text)) :> Stream - | _ -> base.OpenFileForReadShim(filePath, useMemoryMappedFile, shouldShadowCopy) - override _.FileExistsShim(fileName) = MyFileSystem.FilesCache.ContainsKey(fileName) || base.FileExistsShim(fileName) - -let UseMyFileSystem() = - let myFileSystem = MyFileSystem() - FileSystemAutoOpens.FileSystem <- myFileSystem - { new IDisposable with member x.Dispose() = FileSystemAutoOpens.FileSystem <- myFileSystem } + member __.FileStreamReadShim(fileName) = + match files.TryGetValue fileName with + | true, text -> new MemoryStream(Encoding.UTF8.GetBytes(text)) :> Stream + | _ -> defaultFileSystem.FileStreamReadShim(fileName) + + member __.FileStreamCreateShim(fileName) = + defaultFileSystem.FileStreamCreateShim(fileName) + + member __.IsStableFileHeuristic(fileName) = + defaultFileSystem.IsStableFileHeuristic(fileName) + + member __.FileStreamWriteExistingShim(fileName) = + defaultFileSystem.FileStreamWriteExistingShim(fileName) + + member __.ReadAllBytesShim(fileName) = + match files.TryGetValue fileName with + | true, text -> Encoding.UTF8.GetBytes(text) + | _ -> defaultFileSystem.ReadAllBytesShim(fileName) + + // Implement the service related to temporary paths and file time stamps + member __.GetTempPathShim() = defaultFileSystem.GetTempPathShim() + member __.GetLastWriteTimeShim(fileName) = defaultFileSystem.GetLastWriteTimeShim(fileName) + member __.GetFullPathShim(fileName) = defaultFileSystem.GetFullPathShim(fileName) + member __.IsInvalidPathShim(fileName) = defaultFileSystem.IsInvalidPathShim(fileName) + member __.IsPathRootedShim(fileName) = defaultFileSystem.IsPathRootedShim(fileName) + + // Implement the service related to file existence and deletion + member __.SafeExists(fileName) = files.ContainsKey(fileName) || defaultFileSystem.SafeExists(fileName) + member __.FileDelete(fileName) = defaultFileSystem.FileDelete(fileName) + + // Implement the service related to assembly loading, used to load type providers + // and for F# interactive. + member __.AssemblyLoadFrom(fileName) = defaultFileSystem.AssemblyLoadFrom fileName + member __.AssemblyLoad(assemblyName) = defaultFileSystem.AssemblyLoad assemblyName + +let UseMyFileSystem() = + let myFileSystem = MyFileSystem(Shim.FileSystem) + Shim.FileSystem <- myFileSystem + { new IDisposable with member x.Dispose() = Shim.FileSystem <- myFileSystem } + [] #if NETCOREAPP [] #endif -let ``FileSystem compilation test``() = - if System.Environment.OSVersion.Platform = System.PlatformID.Win32NT then // file references only valid on Windows +let ``FileSystem compilation test``() = + if System.Environment.OSVersion.Platform = System.PlatformID.Win32NT then // file references only valid on Windows use myFileSystem = UseMyFileSystem() let programFilesx86Folder = System.Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") - let projectOptions = - let allFlags = - [| yield "--simpleresolution"; - yield "--noframework"; - yield "--debug:full"; - yield "--define:DEBUG"; - yield "--optimize-"; - yield "--doc:test.xml"; - yield "--warn:3"; - yield "--fullpaths"; - yield "--flaterrors"; - yield "--target:library"; - for r in [ sysLib "mscorlib"; sysLib "System"; sysLib "System.Core"; fsCoreDefaultReference() ] do + let projectOptions = + let allFlags = + [| yield "--simpleresolution"; + yield "--noframework"; + yield "--debug:full"; + yield "--define:DEBUG"; + yield "--optimize-"; + yield "--doc:test.xml"; + yield "--warn:3"; + yield "--fullpaths"; + yield "--flaterrors"; + yield "--target:library"; + for r in [ sysLib "mscorlib"; sysLib "System"; sysLib "System.Core"; fsCoreDefaultReference() ] do yield "-r:" + r |] - + { ProjectFileName = @"c:\mycode\compilation.fsproj" // Make a name that is unique in this directory. ProjectId = None SourceFiles = [| fileName1; fileName2 |] - OtherOptions = allFlags + OtherOptions = allFlags ReferencedProjects = [| |]; IsIncompleteTypeCheckEnvironment = false - UseScriptResolutionRules = true + UseScriptResolutionRules = true LoadTime = System.DateTime.Now // Not 'now', we don't want to force reloading - UnresolvedReferences = None + UnresolvedReferences = None OriginalLoadReferences = [] + ExtraProjectInfo = None Stamp = None } let results = checker.ParseAndCheckProject(projectOptions) |> Async.RunSynchronously - results.Diagnostics.Length |> shouldEqual 0 + results.Errors.Length |> shouldEqual 0 results.AssemblySignature.Entities.Count |> shouldEqual 2 results.AssemblySignature.Entities.[0].MembersFunctionsAndValues.Count |> shouldEqual 1 results.AssemblySignature.Entities.[0].MembersFunctionsAndValues.[0].DisplayName |> shouldEqual "B" + diff --git a/tests/service/FsiTests.fs b/tests/service/FsiTests.fs index 58a3af852d8..39ff624fbf2 100644 --- a/tests/service/FsiTests.fs +++ b/tests/service/FsiTests.fs @@ -40,8 +40,8 @@ let evalExpression text = | Some value -> sprintf "%A" value.ReflectionValue | None -> sprintf "null or no result" -let formatErrors (errs: FSharpDiagnostic[]) = - [ for err in errs do yield sprintf "%s %d,%d - %d,%d; %s" (match err.Severity with FSharpDiagnosticSeverity.Error -> "error" | FSharpDiagnosticSeverity.Warning -> "warning") err.StartLineAlternate err.StartColumn err.EndLineAlternate err.EndColumn err.Message ] +let formatErrors (errs: FSharpErrorInfo[]) = + [ for err in errs do yield sprintf "%s %d,%d - %d,%d; %s" (match err.Severity with FSharpErrorSeverity.Error -> "error" | FSharpErrorSeverity.Warning -> "warning") err.StartLineAlternate err.StartColumn err.EndLineAlternate err.EndColumn err.Message ] let showErrorsAndResult (x, errs) = [ match x with @@ -49,7 +49,7 @@ let showErrorsAndResult (x, errs) = | Choice2Of2 (exn:exn) -> yield sprintf "exception %s" exn.Message yield! formatErrors errs ] -let showErrors (x, errs: FSharpDiagnostic[]) = +let showErrors (x, errs: FSharpErrorInfo[]) = [ match x with | Choice1Of2 () -> () | Choice2Of2 (exn:exn) -> yield sprintf "exception %s" exn.Message diff --git a/tests/service/InteractiveCheckerTests.fs b/tests/service/InteractiveCheckerTests.fs index 21852fa1434..90328a73d8f 100644 --- a/tests/service/InteractiveCheckerTests.fs +++ b/tests/service/InteractiveCheckerTests.fs @@ -11,10 +11,10 @@ module FSharp.Compiler.Service.Tests.InteractiveChecker open NUnit.Framework open FsUnit open System +open FSharp.Compiler +open FSharp.Compiler.Range open FSharp.Compiler.Service.Tests.Common -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range +open FSharp.Compiler.SyntaxTree let internal longIdentToString (longIdent: LongIdent) = String.Join(".", longIdent |> List.map (fun ident -> ident.ToString())) @@ -27,11 +27,11 @@ let internal identsAndRanges (input: ParsedInput) = let identAndRange ident (range: range) = (ident, rangeToTuple range) let extractFromComponentInfo (componentInfo: SynComponentInfo) = - let ((SynComponentInfo.SynComponentInfo(_attrs, _typarDecls, _typarConstraints, longIdent, _, _, _, range))) = componentInfo + let ((SynComponentInfo.ComponentInfo(_attrs, _typarDecls, _typarConstraints, longIdent, _, _, _, range))) = componentInfo // TODO : attrs, typarDecls and typarConstraints [identAndRange (longIdentToString longIdent) range] let extractFromTypeDefn (typeDefn: SynTypeDefn) = - let (SynTypeDefn(componentInfo, _repr, _members, _, _)) = typeDefn + let (SynTypeDefn.TypeDefn(componentInfo, _repr, _members, _)) = typeDefn // TODO : repr and members extractFromComponentInfo componentInfo let rec extractFromModuleDecl (moduleDecl: SynModuleDecl) = @@ -59,9 +59,11 @@ let internal identsAndRanges (input: ParsedInput) = | ParsedInput.SigFile _ -> [] let internal parseAndExtractRanges code = - let file = "Test.fs" + let file = "Test" let result = parseSourceCode (file, code) - result |> identsAndRanges + match result with + | Some tree -> tree |> identsAndRanges + | None -> failwith "fail to parse..." let input = """ diff --git a/tests/service/MultiProjectAnalysisTests.fs b/tests/service/MultiProjectAnalysisTests.fs index d8d41480664..a5863d15cba 100644 --- a/tests/service/MultiProjectAnalysisTests.fs +++ b/tests/service/MultiProjectAnalysisTests.fs @@ -8,26 +8,25 @@ module Tests.Service.MultiProjectAnalysisTests #endif +open FSharp.Compiler +open FSharp.Compiler.SourceCodeServices + open NUnit.Framework open FsUnit open System.IO open System.Collections.Generic -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.IO -open FSharp.Compiler.Symbols -open FSharp.Compiler.Text + open FSharp.Compiler.Service.Tests.Common let toIList (x: _ array) = x :> IList<_> let numProjectsForStressTest = 100 let internal checker = FSharpChecker.Create(projectCacheSize=numProjectsForStressTest + 10) -/// Extract range info -let internal tups (m:range) = (m.StartLine, m.StartColumn), (m.EndLine, m.EndColumn) +/// Extract range info +let internal tups (m:Range.range) = (m.StartLine, m.StartColumn), (m.EndLine, m.EndColumn) -module internal Project1A = +module internal Project1A = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName = Path.GetTempFileName() @@ -37,7 +36,7 @@ module internal Project1A = module Project1A /// This is type C -type C() = +type C() = static member M(arg1: int, arg2: int, ?arg3 : int) = arg1 + arg2 + defaultArg arg3 4 /// This is x1 @@ -54,7 +53,7 @@ let x3 ( ) = () /// This is type U -type U = +type U = /// This is Case1 | Case1 of int @@ -62,7 +61,7 @@ type U = /// This is Case2 | Case2 of string """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -73,7 +72,7 @@ type U = //----------------------------------------------------------------------------------------- -module internal Project1B = +module internal Project1B = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName = Path.GetTempFileName() @@ -85,12 +84,12 @@ module Project1B type A = B of xxx: int * yyy : int let b = B(xxx=1, yyy=2) -let x = +let x = match b with // does not find usage here | B (xxx = a; yyy = b) -> () """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -100,7 +99,7 @@ let x = // A project referencing two sub-projects -module internal MultiProject1 = +module internal MultiProject1 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName = Path.GetTempFileName() @@ -117,20 +116,20 @@ let p = (Project1A.x1, Project1B.b) let c = C() let u = Case1 3 """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) - let options = + let options = let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) - { options with + { options with OtherOptions = Array.append options.OtherOptions [| ("-r:" + Project1A.dllName); ("-r:" + Project1B.dllName) |] - ReferencedProjects = [| FSharpReferencedProject.CreateFSharp(Project1A.dllName, Project1A.options); - FSharpReferencedProject.CreateFSharp(Project1B.dllName, Project1B.options); |] } + ReferencedProjects = [| (Project1A.dllName, Project1A.options); + (Project1B.dllName, Project1B.options); |] } let cleanFileName a = if a = fileName1 then "file1" else "??" [] -let ``Test multi project 1 basic`` () = +let ``Test multi project 1 basic`` () = let wholeProjectResults = checker.ParseAndCheckProject(MultiProject1.options) |> Async.RunSynchronously @@ -139,131 +138,117 @@ let ``Test multi project 1 basic`` () = [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] |> shouldEqual [] - [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] + [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] |> shouldEqual ["p"; "c"; "u"] [] -let ``Test multi project 1 all symbols`` () = +let ``Test multi project 1 all symbols`` () = let p1A = checker.ParseAndCheckProject(Project1A.options) |> Async.RunSynchronously let p1B = checker.ParseAndCheckProject(Project1B.options) |> Async.RunSynchronously let mp = checker.ParseAndCheckProject(MultiProject1.options) |> Async.RunSynchronously - let x1FromProject1A = + let x1FromProject1A = [ for s in p1A.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = "x1" then + if s.Symbol.DisplayName = "x1" then yield s.Symbol ] |> List.head - let x1FromProjectMultiProject = + let x1FromProjectMultiProject = [ for s in mp.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = "x1" then + if s.Symbol.DisplayName = "x1" then yield s.Symbol ] |> List.head - let bFromProjectMultiProject = + let bFromProjectMultiProject = [ for s in mp.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = "b" then + if s.Symbol.DisplayName = "b" then yield s.Symbol ] |> List.head x1FromProject1A.Assembly.FileName.IsNone |> shouldEqual true // For now, the assembly being analyzed doesn't return a filename x1FromProject1A.Assembly.QualifiedName |> shouldEqual "" // For now, the assembly being analyzed doesn't return a qualified name - x1FromProject1A.Assembly.SimpleName |> shouldEqual (Path.GetFileNameWithoutExtension Project1A.dllName) + x1FromProject1A.Assembly.SimpleName |> shouldEqual (Path.GetFileNameWithoutExtension Project1A.dllName) x1FromProjectMultiProject.Assembly.FileName |> shouldEqual (Some Project1A.dllName) bFromProjectMultiProject.Assembly.FileName |> shouldEqual (Some Project1B.dllName) - let usesOfx1FromProject1AInMultiProject1 = - mp.GetUsesOfSymbol(x1FromProject1A) - |> Array.map (fun s -> s.Symbol.DisplayName, MultiProject1.cleanFileName s.FileName, tups s.Symbol.DeclarationLocation.Value) + let usesOfx1FromProject1AInMultiProject1 = + mp.GetUsesOfSymbol(x1FromProject1A) + |> Array.map (fun s -> s.Symbol.DisplayName, MultiProject1.cleanFileName s.FileName, tups s.Symbol.DeclarationLocation.Value) - let usesOfx1FromMultiProject1InMultiProject1 = - mp.GetUsesOfSymbol(x1FromProjectMultiProject) - |> Array.map (fun s -> s.Symbol.DisplayName, MultiProject1.cleanFileName s.FileName, tups s.Symbol.DeclarationLocation.Value) + let usesOfx1FromMultiProject1InMultiProject1 = + mp.GetUsesOfSymbol(x1FromProjectMultiProject) + |> Array.map (fun s -> s.Symbol.DisplayName, MultiProject1.cleanFileName s.FileName, tups s.Symbol.DeclarationLocation.Value) usesOfx1FromProject1AInMultiProject1 |> shouldEqual usesOfx1FromMultiProject1InMultiProject1 [] -let ``Test multi project 1 xmldoc`` () = +let ``Test multi project 1 xmldoc`` () = let p1A = checker.ParseAndCheckProject(Project1A.options) |> Async.RunSynchronously let p1B = checker.ParseAndCheckProject(Project1B.options) |> Async.RunSynchronously let mp = checker.ParseAndCheckProject(MultiProject1.options) |> Async.RunSynchronously - let symbolFromProject1A sym = + let symbolFromProject1A sym = [ for s in p1A.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = sym then + if s.Symbol.DisplayName = sym then yield s.Symbol ] |> List.head - + let x1FromProject1A = symbolFromProject1A "x1" let x3FromProject1A = symbolFromProject1A "x3" - let x1FromProjectMultiProject = + let x1FromProjectMultiProject = [ for s in mp.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = "x1" then + if s.Symbol.DisplayName = "x1" then yield s.Symbol ] |> List.head - let ctorFromProjectMultiProject = + let ctorFromProjectMultiProject = [ for s in mp.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = "C" then + if s.Symbol.DisplayName = "C" then yield s.Symbol ] |> List.head - let case1FromProjectMultiProject = + let case1FromProjectMultiProject = [ for s in mp.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = "Case1" then + if s.Symbol.DisplayName = "Case1" then yield s.Symbol ] |> List.head - match x1FromProject1A with - | :? FSharpMemberOrFunctionOrValue as v -> - match v.XmlDoc with - | FSharpXmlDoc.FromXmlText t -> t.UnprocessedLines.Length |> shouldEqual 1 - | _ -> failwith "wrong kind" + match x1FromProject1A with + | :? FSharpMemberOrFunctionOrValue as v -> v.XmlDoc.Count |> shouldEqual 1 + | _ -> failwith "odd symbol!" + + match x3FromProject1A with + | :? FSharpMemberOrFunctionOrValue as v -> v.XmlDoc |> shouldEqual ([|" This is"; " x3"|] |> toIList) | _ -> failwith "odd symbol!" - match x3FromProject1A with - | :? FSharpMemberOrFunctionOrValue as v -> - match v.XmlDoc with - | FSharpXmlDoc.FromXmlText t -> t.UnprocessedLines |> shouldEqual [|" This is"; " x3"|] - | _ -> failwith "wrong kind" + match x3FromProject1A with + | :? FSharpMemberOrFunctionOrValue as v -> v.ElaboratedXmlDoc |> shouldEqual ([|""; " This is"; " x3"; "" |] |> toIList) | _ -> failwith "odd symbol!" - match x3FromProject1A with - | :? FSharpMemberOrFunctionOrValue as v -> - match v.XmlDoc with - | FSharpXmlDoc.FromXmlText t -> t.GetElaboratedXmlLines() |> shouldEqual [|""; " This is"; " x3"; "" |] - | _ -> failwith "wrong kind" + match x1FromProjectMultiProject with + | :? FSharpMemberOrFunctionOrValue as v -> v.XmlDoc.Count |> shouldEqual 1 | _ -> failwith "odd symbol!" - match x1FromProjectMultiProject with - | :? FSharpMemberOrFunctionOrValue as v -> - match v.XmlDoc with - | FSharpXmlDoc.FromXmlText t -> t.UnprocessedLines.Length |> shouldEqual 1 - | _ -> failwith "wrong kind" + match ctorFromProjectMultiProject with + | :? FSharpMemberOrFunctionOrValue as c -> c.XmlDoc.Count |> shouldEqual 0 | _ -> failwith "odd symbol!" - match ctorFromProjectMultiProject with - | :? FSharpMemberOrFunctionOrValue as c -> - match c.XmlDoc with - | FSharpXmlDoc.FromXmlText t -> t.UnprocessedLines.Length |> shouldEqual 0 - | _ -> failwith "wrong kind" + match ctorFromProjectMultiProject with + | :? FSharpMemberOrFunctionOrValue as c -> c.DeclaringEntity.Value.XmlDoc.Count |> shouldEqual 1 | _ -> failwith "odd symbol!" - match case1FromProjectMultiProject with - | :? FSharpUnionCase as c -> - match c.XmlDoc with - | FSharpXmlDoc.FromXmlText t -> t.UnprocessedLines.Length |> shouldEqual 1 - | _ -> failwith "wrong kind" + match case1FromProjectMultiProject with + | :? FSharpUnionCase as c -> c.XmlDoc.Count |> shouldEqual 1 | _ -> failwith "odd symbol!" //------------------------------------------------------------------------------------ // A project referencing many sub-projects -module internal ManyProjectsStressTest = +module internal ManyProjectsStressTest = let numProjectsForStressTest = 100 - - type Project = { ModuleName: string; FileName: string; Options: FSharpProjectOptions; DllName: string } - let projects = - [ for i in 1 .. numProjectsForStressTest do + + type Project = { ModuleName: string; FileName: string; Options: FSharpProjectOptions; DllName: string } + let projects = + [ for i in 1 .. numProjectsForStressTest do let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let moduleName = "Project" + string i let fileSource1 = "module " + moduleName + """ @@ -271,15 +256,15 @@ module internal ManyProjectsStressTest = // Some random code open System -type C() = +type C() = static member Print() = System.Console.WriteLine("Hello World") - + let v = C() let p = C.Print() """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let baseName = Path.GetTempFileName() let dllName = Path.ChangeExtension(baseName, ".dll") let projFileName = Path.ChangeExtension(baseName, ".fsproj") @@ -288,42 +273,42 @@ let p = C.Print() let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) yield { ModuleName = moduleName; FileName=fileName1; Options = options; DllName=dllName } ] - let jointProject = + let jointProject = let fileName = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let dllBase = Path.GetTempFileName() let dllName = Path.ChangeExtension(dllBase, ".dll") let projFileName = Path.ChangeExtension(dllBase, ".fsproj") - let fileSource = + let fileSource = """ module JointProject """ + String.concat "\r\n" [ for p in projects -> "open " + p.ModuleName ] + """ -let p = (""" +let p = (""" + String.concat ",\r\n " [ for p in projects -> p.ModuleName + ".v" ] + ")" - FileSystem.OpenFileForWriteShim(fileName).Write(fileSource) + File.WriteAllText(fileName, fileSource) let fileNames = [fileName] let args = mkProjectCommandLineArgs (dllName, fileNames) - let options = + let options = let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) - { options with + { options with OtherOptions = Array.append options.OtherOptions [| for p in projects -> ("-r:" + p.DllName) |] - ReferencedProjects = [| for p in projects -> FSharpReferencedProject.CreateFSharp(p.DllName, p.Options); |] } - { ModuleName = "JointProject"; FileName=fileName; Options = options; DllName=dllName } + ReferencedProjects = [| for p in projects -> (p.DllName, p.Options); |] } + { ModuleName = "JointProject"; FileName=fileName; Options = options; DllName=dllName } - let cleanFileName a = + let cleanFileName a = projects |> List.tryPick (fun m -> if a = m.FileName then Some m.ModuleName else None) |> function Some x -> x | None -> if a = jointProject.FileName then "fileN" else "??" - let makeCheckerForStressTest ensureBigEnough = + let makeCheckerForStressTest ensureBigEnough = let size = (if ensureBigEnough then numProjectsForStressTest + 10 else numProjectsForStressTest / 2 ) FSharpChecker.Create(projectCacheSize=size) [] -let ``Test ManyProjectsStressTest basic`` () = +let ``Test ManyProjectsStressTest basic`` () = let checker = ManyProjectsStressTest.makeCheckerForStressTest true @@ -333,11 +318,11 @@ let ``Test ManyProjectsStressTest basic`` () = [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] |> shouldEqual [] - [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] + [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] |> shouldEqual ["p"] [] -let ``Test ManyProjectsStressTest cache too small`` () = +let ``Test ManyProjectsStressTest cache too small`` () = let checker = ManyProjectsStressTest.makeCheckerForStressTest false @@ -347,41 +332,41 @@ let ``Test ManyProjectsStressTest cache too small`` () = [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] |> shouldEqual [] - [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] + [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] |> shouldEqual ["p"] [] -let ``Test ManyProjectsStressTest all symbols`` () = +let ``Test ManyProjectsStressTest all symbols`` () = let checker = ManyProjectsStressTest.makeCheckerForStressTest true - for i in 1 .. 10 do + for i in 1 .. 10 do printfn "stress test iteration %d (first may be slow, rest fast)" i let projectsResults = [ for p in ManyProjectsStressTest.projects -> p, checker.ParseAndCheckProject(p.Options) |> Async.RunSynchronously ] let jointProjectResults = checker.ParseAndCheckProject(ManyProjectsStressTest.jointProject.Options) |> Async.RunSynchronously - let vsFromJointProject = + let vsFromJointProject = [ for s in jointProjectResults.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = "v" then - yield s.Symbol ] + if s.Symbol.DisplayName = "v" then + yield s.Symbol ] - for (p,pResults) in projectsResults do - let vFromProject = + for (p,pResults) in projectsResults do + let vFromProject = [ for s in pResults.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = "v" then - yield s.Symbol ] |> List.head + if s.Symbol.DisplayName = "v" then + yield s.Symbol ] |> List.head vFromProject.Assembly.FileName.IsNone |> shouldEqual true // For now, the assembly being analyzed doesn't return a filename vFromProject.Assembly.QualifiedName |> shouldEqual "" // For now, the assembly being analyzed doesn't return a qualified name - vFromProject.Assembly.SimpleName |> shouldEqual (Path.GetFileNameWithoutExtension p.DllName) + vFromProject.Assembly.SimpleName |> shouldEqual (Path.GetFileNameWithoutExtension p.DllName) - let usesFromJointProject = - jointProjectResults.GetUsesOfSymbol(vFromProject) - |> Array.map (fun s -> s.Symbol.DisplayName, ManyProjectsStressTest.cleanFileName s.FileName, tups s.Symbol.DeclarationLocation.Value) + let usesFromJointProject = + jointProjectResults.GetUsesOfSymbol(vFromProject) + |> Array.map (fun s -> s.Symbol.DisplayName, ManyProjectsStressTest.cleanFileName s.FileName, tups s.Symbol.DeclarationLocation.Value) usesFromJointProject.Length |> shouldEqual 1 //----------------------------------------------------------------------------------------- -module internal MultiProjectDirty1 = +module internal MultiProjectDirty1 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName = Path.GetTempFileName() @@ -390,26 +375,26 @@ module internal MultiProjectDirty1 = let content = """module Project1 let x = "F#" -""" - - FileSystem.OpenFileForWriteShim(fileName1).Write(content) +""" + + File.WriteAllText(fileName1, content) let cleanFileName a = if a = fileName1 then "Project1" else "??" let fileNames = [fileName1] - - let getOptions() = + + let getOptions() = let args = mkProjectCommandLineArgs (dllName, fileNames) checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) -module internal MultiProjectDirty2 = +module internal MultiProjectDirty2 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName = Path.GetTempFileName() let dllName = Path.ChangeExtension(baseName, ".dll") let projFileName = Path.ChangeExtension(baseName, ".fsproj") - + let content = """module Project2 open Project1 @@ -417,21 +402,21 @@ open Project1 let y = x let z = Project1.x """ - FileSystem.OpenFileForWriteShim(fileName1).Write(content) + File.WriteAllText(fileName1, content) let cleanFileName a = if a = fileName1 then "Project2" else "??" - let fileNames = [fileName1] - - let getOptions() = + let fileNames = [fileName1] + + let getOptions() = let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) - { options with + { options with OtherOptions = Array.append options.OtherOptions [| ("-r:" + MultiProjectDirty1.dllName) |] - ReferencedProjects = [| FSharpReferencedProject.CreateFSharp(MultiProjectDirty1.dllName, MultiProjectDirty1.getOptions()) |] } + ReferencedProjects = [| (MultiProjectDirty1.dllName, MultiProjectDirty1.getOptions()) |] } [] -let ``Test multi project symbols should pick up changes in dependent projects`` () = +let ``Test multi project symbols should pick up changes in dependent projects`` () = // register to count the file checks let count = ref 0 @@ -445,16 +430,16 @@ let ``Test multi project symbols should pick up changes in dependent projects`` count.Value |> shouldEqual 1 - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(MultiProjectDirty1.fileName1, proj1options) - |> Async.RunSynchronously + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(MultiProjectDirty1.fileName1, proj1options) + |> Async.RunSynchronously count.Value |> shouldEqual 1 //---------------- Get a symbol from project 1 and look up its uses in both projects -------------------- let xSymbolUse = backgroundTypedParse1.GetSymbolUseAtLocation(3, 4, "", ["x"]) - xSymbolUse.IsSome |> shouldEqual true + xSymbolUse.IsSome |> shouldEqual true let xSymbol = xSymbolUse.Value.Symbol printfn "Symbol found. Checking symbol uses in another project..." @@ -464,38 +449,38 @@ let ``Test multi project symbols should pick up changes in dependent projects`` let wholeProjectResults2 = checker.ParseAndCheckProject(proj2options) |> Async.RunSynchronously count.Value |> shouldEqual 2 - + let _ = checker.ParseAndCheckProject(proj2options) |> Async.RunSynchronously count.Value |> shouldEqual 2 // cached - let usesOfXSymbolInProject1 = - wholeProjectResults1.GetUsesOfSymbol(xSymbol) - |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty1.cleanFileName su.FileName, tups su.Range) + let usesOfXSymbolInProject1 = + wholeProjectResults1.GetUsesOfSymbol(xSymbol) + |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty1.cleanFileName su.FileName, tups su.RangeAlternate) usesOfXSymbolInProject1 - |> shouldEqual + |> shouldEqual [|("val x", "Project1", ((3, 4), (3, 5))) |] - let usesOfXSymbolInProject2 = - wholeProjectResults2.GetUsesOfSymbol(xSymbol) - |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty2.cleanFileName su.FileName, tups su.Range) + let usesOfXSymbolInProject2 = + wholeProjectResults2.GetUsesOfSymbol(xSymbol) + |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty2.cleanFileName su.FileName, tups su.RangeAlternate) - usesOfXSymbolInProject2 - |> shouldEqual + usesOfXSymbolInProject2 + |> shouldEqual [|("val x", "Project2", ((5, 8), (5, 9))); ("val x", "Project2", ((6, 8), (6, 18)))|] //---------------- Change the file by adding a line, then re-check everything -------------------- - + let wt0 = System.DateTime.UtcNow - let wt1 = FileSystem.GetLastWriteTimeShim MultiProjectDirty1.fileName1 + let wt1 = File.GetLastWriteTimeUtc MultiProjectDirty1.fileName1 printfn "Writing new content to file '%s'" MultiProjectDirty1.fileName1 System.Threading.Thread.Sleep(1000) - FileSystem.OpenFileForWriteShim(MultiProjectDirty1.fileName1).Write(System.Environment.NewLine + MultiProjectDirty1.content) + File.WriteAllText(MultiProjectDirty1.fileName1, System.Environment.NewLine + MultiProjectDirty1.content) printfn "Wrote new content to file '%s'" MultiProjectDirty1.fileName1 - let wt2 = FileSystem.GetLastWriteTimeShim MultiProjectDirty1.fileName1 + let wt2 = File.GetLastWriteTimeUtc MultiProjectDirty1.fileName1 printfn "Current time: '%A', ticks = %d" wt0 wt0.Ticks printfn "Old write time: '%A', ticks = %d" wt1 wt1.Ticks printfn "New write time: '%A', ticks = %d" wt2 wt2.Ticks @@ -503,12 +488,12 @@ let ``Test multi project symbols should pick up changes in dependent projects`` let wholeProjectResults1AfterChange1 = checker.ParseAndCheckProject(proj1options) |> Async.RunSynchronously count.Value |> shouldEqual 3 - let backgroundParseResults1AfterChange1, backgroundTypedParse1AfterChange1 = - checker.GetBackgroundCheckResultsForFileInProject(MultiProjectDirty1.fileName1, proj1options) - |> Async.RunSynchronously + let backgroundParseResults1AfterChange1, backgroundTypedParse1AfterChange1 = + checker.GetBackgroundCheckResultsForFileInProject(MultiProjectDirty1.fileName1, proj1options) + |> Async.RunSynchronously let xSymbolUseAfterChange1 = backgroundTypedParse1AfterChange1.GetSymbolUseAtLocation(4, 4, "", ["x"]) - xSymbolUseAfterChange1.IsSome |> shouldEqual true + xSymbolUseAfterChange1.IsSome |> shouldEqual true let xSymbolAfterChange1 = xSymbolUseAfterChange1.Value.Symbol @@ -518,37 +503,38 @@ let ``Test multi project symbols should pick up changes in dependent projects`` count.Value |> shouldEqual 4 - let usesOfXSymbolInProject1AfterChange1 = - wholeProjectResults1AfterChange1.GetUsesOfSymbol(xSymbolAfterChange1) - |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty1.cleanFileName su.FileName, tups su.Range) - + let usesOfXSymbolInProject1AfterChange1 = + wholeProjectResults1AfterChange1.GetUsesOfSymbol(xSymbolAfterChange1) + |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty1.cleanFileName su.FileName, tups su.RangeAlternate) + usesOfXSymbolInProject1AfterChange1 - |> shouldEqual + |> shouldEqual [|("val x", "Project1", ((4, 4), (4, 5))) |] - let usesOfXSymbolInProject2AfterChange1 = - wholeProjectResults2AfterChange1.GetUsesOfSymbol(xSymbolAfterChange1) - |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty2.cleanFileName su.FileName, tups su.Range) + let usesOfXSymbolInProject2AfterChange1 = + wholeProjectResults2AfterChange1.GetUsesOfSymbol(xSymbolAfterChange1) + |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty2.cleanFileName su.FileName, tups su.RangeAlternate) - usesOfXSymbolInProject2AfterChange1 - |> shouldEqual + usesOfXSymbolInProject2AfterChange1 + |> shouldEqual [|("val x", "Project2", ((5, 8), (5, 9))); ("val x", "Project2", ((6, 8), (6, 18)))|] //---------------- Revert the change to the file -------------------- let wt0b = System.DateTime.UtcNow - let wt1b = FileSystem.GetLastWriteTimeShim MultiProjectDirty1.fileName1 + let wt1b = File.GetLastWriteTimeUtc MultiProjectDirty1.fileName1 printfn "Writing old content to file '%s'" MultiProjectDirty1.fileName1 System.Threading.Thread.Sleep(1000) - FileSystem.OpenFileForWriteShim(MultiProjectDirty1.fileName1).Write(MultiProjectDirty1.content) + File.WriteAllText(MultiProjectDirty1.fileName1, MultiProjectDirty1.content) printfn "Wrote old content to file '%s'" MultiProjectDirty1.fileName1 - let wt2b = FileSystem.GetLastWriteTimeShim MultiProjectDirty1.fileName1 + let wt2b = File.GetLastWriteTimeUtc MultiProjectDirty1.fileName1 printfn "Current time: '%A', ticks = %d" wt0b wt0b.Ticks printfn "Old write time: '%A', ticks = %d" wt1b wt1b.Ticks printfn "New write time: '%A', ticks = %d" wt2b wt2b.Ticks count.Value |> shouldEqual 4 + let wholeProjectResults2AfterChange2 = checker.ParseAndCheckProject(proj2options) |> Async.RunSynchronously System.Threading.Thread.Sleep(1000) @@ -559,30 +545,30 @@ let ``Test multi project symbols should pick up changes in dependent projects`` count.Value |> shouldEqual 6 // the project is already checked - let backgroundParseResults1AfterChange2, backgroundTypedParse1AfterChange2 = - checker.GetBackgroundCheckResultsForFileInProject(MultiProjectDirty1.fileName1, proj1options) - |> Async.RunSynchronously + let backgroundParseResults1AfterChange2, backgroundTypedParse1AfterChange2 = + checker.GetBackgroundCheckResultsForFileInProject(MultiProjectDirty1.fileName1, proj1options) + |> Async.RunSynchronously let xSymbolUseAfterChange2 = backgroundTypedParse1AfterChange2.GetSymbolUseAtLocation(4, 4, "", ["x"]) - xSymbolUseAfterChange2.IsSome |> shouldEqual true + xSymbolUseAfterChange2.IsSome |> shouldEqual true let xSymbolAfterChange2 = xSymbolUseAfterChange2.Value.Symbol - let usesOfXSymbolInProject1AfterChange2 = - wholeProjectResults1AfterChange2.GetUsesOfSymbol(xSymbolAfterChange2) - |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty1.cleanFileName su.FileName, tups su.Range) + let usesOfXSymbolInProject1AfterChange2 = + wholeProjectResults1AfterChange2.GetUsesOfSymbol(xSymbolAfterChange2) + |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty1.cleanFileName su.FileName, tups su.RangeAlternate) usesOfXSymbolInProject1AfterChange2 - |> shouldEqual + |> shouldEqual [|("val x", "Project1", ((3, 4), (3, 5))) |] - let usesOfXSymbolInProject2AfterChange2 = - wholeProjectResults2AfterChange2.GetUsesOfSymbol(xSymbolAfterChange2) - |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty2.cleanFileName su.FileName, tups su.Range) + let usesOfXSymbolInProject2AfterChange2 = + wholeProjectResults2AfterChange2.GetUsesOfSymbol(xSymbolAfterChange2) + |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty2.cleanFileName su.FileName, tups su.RangeAlternate) usesOfXSymbolInProject2AfterChange2 - |> shouldEqual + |> shouldEqual [|("val x", "Project2", ((5, 8), (5, 9))); ("val x", "Project2", ((6, 8), (6, 18)))|] @@ -590,7 +576,7 @@ let ``Test multi project symbols should pick up changes in dependent projects`` //------------------------------------------------------------------ -module internal Project2A = +module internal Project2A = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName1 = Path.GetTempFileName() @@ -605,11 +591,11 @@ module Project2A [] do() -type C() = +type C() = member internal x.InternalMember = 1 """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -619,7 +605,7 @@ type C() = //Project2A.fileSource1 // A project referencing Project2A -module internal Project2B = +module internal Project2B = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let dllName = Path.ChangeExtension(Project2A.baseName2, ".dll") @@ -630,20 +616,20 @@ module Project2B let v = Project2A.C().InternalMember // access an internal symbol """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) - let options = + let options = let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) - { options with + { options with OtherOptions = Array.append options.OtherOptions [| ("-r:" + Project2A.dllName); |] - ReferencedProjects = [| FSharpReferencedProject.CreateFSharp(Project2A.dllName, Project2A.options); |] } + ReferencedProjects = [| (Project2A.dllName, Project2A.options); |] } let cleanFileName a = if a = fileName1 then "file1" else "??" //Project2A.fileSource1 // A project referencing Project2A but without access to the internals of A -module internal Project2C = +module internal Project2C = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let dllName = Path.ChangeExtension(Project2A.baseName3, ".dll") @@ -654,48 +640,48 @@ module Project2C let v = Project2A.C().InternalMember // access an internal symbol """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) - let options = + let options = let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) - { options with + { options with OtherOptions = Array.append options.OtherOptions [| ("-r:" + Project2A.dllName); |] - ReferencedProjects = [| FSharpReferencedProject.CreateFSharp(Project2A.dllName, Project2A.options); |] } + ReferencedProjects = [| (Project2A.dllName, Project2A.options); |] } let cleanFileName a = if a = fileName1 then "file1" else "??" [] -let ``Test multi project2 errors`` () = +let ``Test multi project2 errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project2B.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "multi project2 error: <<<%s>>>" e.Message - wholeProjectResults .Diagnostics.Length |> shouldEqual 0 + wholeProjectResults .Errors.Length |> shouldEqual 0 let wholeProjectResultsC = checker.ParseAndCheckProject(Project2C.options) |> Async.RunSynchronously - wholeProjectResultsC.Diagnostics.Length |> shouldEqual 1 + wholeProjectResultsC.Errors.Length |> shouldEqual 1 [] -let ``Test multi project 2 all symbols`` () = +let ``Test multi project 2 all symbols`` () = let mpA = checker.ParseAndCheckProject(Project2A.options) |> Async.RunSynchronously let mpB = checker.ParseAndCheckProject(Project2B.options) |> Async.RunSynchronously let mpC = checker.ParseAndCheckProject(Project2C.options) |> Async.RunSynchronously // These all get the symbol in A, but from three different project compilations/checks - let symFromA = + let symFromA = [ for s in mpA.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = "InternalMember" then + if s.Symbol.DisplayName = "InternalMember" then yield s.Symbol ] |> List.head - let symFromB = + let symFromB = [ for s in mpB.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = "InternalMember" then + if s.Symbol.DisplayName = "InternalMember" then yield s.Symbol ] |> List.head symFromA.IsAccessible(mpA.ProjectContext.AccessibilityRights) |> shouldEqual true @@ -704,10 +690,10 @@ let ``Test multi project 2 all symbols`` () = symFromB.IsAccessible(mpA.ProjectContext.AccessibilityRights) |> shouldEqual true symFromB.IsAccessible(mpB.ProjectContext.AccessibilityRights) |> shouldEqual true symFromB.IsAccessible(mpC.ProjectContext.AccessibilityRights) |> shouldEqual false - + //------------------------------------------------------------------------------------ -module internal Project3A = +module internal Project3A = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName = Path.GetTempFileName() @@ -717,10 +703,10 @@ module internal Project3A = module Project3A ///A parameterized active pattern of divisibility -let (|DivisibleBy|_|) by n = +let (|DivisibleBy|_|) by n = if n % by = 0 then Some DivisibleBy else None """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -730,7 +716,7 @@ let (|DivisibleBy|_|) by n = // A project referencing a sub-project -module internal MultiProject3 = +module internal MultiProject3 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName = Path.GetTempFileName() @@ -741,51 +727,48 @@ module MultiProject3 open Project3A -let fizzBuzz = function - | DivisibleBy 3 & DivisibleBy 5 -> "FizzBuzz" - | DivisibleBy 3 -> "Fizz" - | DivisibleBy 5 -> "Buzz" - | _ -> "" +let fizzBuzz = function + | DivisibleBy 3 & DivisibleBy 5 -> "FizzBuzz" + | DivisibleBy 3 -> "Fizz" + | DivisibleBy 5 -> "Buzz" + | _ -> "" """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) - let options = + let options = let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) - { options with + { options with OtherOptions = Array.append options.OtherOptions [| ("-r:" + Project3A.dllName) |] - ReferencedProjects = [| FSharpReferencedProject.CreateFSharp(Project3A.dllName, Project3A.options) |] } + ReferencedProjects = [| (Project3A.dllName, Project3A.options) |] } let cleanFileName a = if a = fileName1 then "file1" else "??" [] -let ``Test multi project 3 whole project errors`` () = +let ``Test multi project 3 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(MultiProject3.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "multi project 3 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] let ``Test active patterns' XmlDocSig declared in referenced projects`` () = let wholeProjectResults = checker.ParseAndCheckProject(MultiProject3.options) |> Async.RunSynchronously - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(MultiProject3.fileName1, MultiProject3.options) - |> Async.RunSynchronously + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(MultiProject3.fileName1, MultiProject3.options) + |> Async.RunSynchronously let divisibleBySymbolUse = backgroundTypedParse1.GetSymbolUseAtLocation(7,7,"",["DivisibleBy"]) - divisibleBySymbolUse.IsSome |> shouldEqual true - let divisibleBySymbol = divisibleBySymbolUse.Value.Symbol + divisibleBySymbolUse.IsSome |> shouldEqual true + let divisibleBySymbol = divisibleBySymbolUse.Value.Symbol divisibleBySymbol.ToString() |> shouldEqual "symbol DivisibleBy" let divisibleByActivePatternCase = divisibleBySymbol :?> FSharpActivePatternCase - match divisibleByActivePatternCase.XmlDoc with - | FSharpXmlDoc.FromXmlText t -> - t.UnprocessedLines |> shouldEqual [| "A parameterized active pattern of divisibility" |] - t.GetElaboratedXmlLines() |> shouldEqual [| ""; "A parameterized active pattern of divisibility"; "" |] - | _ -> failwith "wrong kind" + divisibleByActivePatternCase.XmlDoc |> Seq.toList |> shouldEqual [ "A parameterized active pattern of divisibility" ] + divisibleByActivePatternCase.ElaboratedXmlDoc |> Seq.toList |> shouldEqual [ ""; "A parameterized active pattern of divisibility"; "" ] divisibleByActivePatternCase.XmlDocSig |> shouldEqual "M:Project3A.|DivisibleBy|_|(System.Int32,System.Int32)" let divisibleByGroup = divisibleByActivePatternCase.Group divisibleByGroup.IsTotal |> shouldEqual false @@ -801,7 +784,7 @@ let ``Test active patterns' XmlDocSig declared in referenced projects`` () = [] let ``Test max memory gets triggered`` () = let checker = FSharpChecker.Create() - let reached = ref false + let reached = ref false checker.MaxMemoryReached.Add (fun () -> reached := true) let wholeProjectResults = checker.ParseAndCheckProject(MultiProject3.options) |> Async.RunSynchronously reached.Value |> shouldEqual false @@ -820,7 +803,7 @@ let ``Test max memory gets triggered`` () = [] #endif let ``Type provider project references should not throw exceptions`` () = - let options = + let options = {ProjectFileName = __SOURCE_DIRECTORY__ + @"/data/TypeProviderConsole/TypeProviderConsole.fsproj"; ProjectId = None SourceFiles = [|__SOURCE_DIRECTORY__ + @"/data/TypeProviderConsole/Program.fs"|]; @@ -830,43 +813,43 @@ let ``Type provider project references should not throw exceptions`` () = yield "--noframework"; yield "--out:" + __SOURCE_DIRECTORY__ + @"/data/TypeProviderConsole/bin/Debug/TypeProviderConsole.exe"; yield "--doc:" + __SOURCE_DIRECTORY__ + @"/data/TypeProviderConsole/bin/Debug/TypeProviderConsole.xml"; - yield "--subsystemversion:6.00"; - yield "--highentropyva+"; + yield "--subsystemversion:6.00"; + yield "--highentropyva+"; yield "--fullpaths"; - yield "--flaterrors"; - yield "--target:exe"; - yield "--define:DEBUG"; + yield "--flaterrors"; + yield "--target:exe"; + yield "--define:DEBUG"; yield "--define:TRACE"; - yield "--debug+"; - yield "--optimize-"; - yield "--tailcalls-"; + yield "--debug+"; + yield "--optimize-"; + yield "--tailcalls-"; yield "--debug:full"; yield "--platform:anycpu"; for r in mkStandardProjectReferences () do yield "-r:" + r yield "-r:" + __SOURCE_DIRECTORY__ + @"/data/TypeProviderLibrary/TypeProviderLibrary.dll"|]; ReferencedProjects = - [|FSharpReferencedProject.CreateFSharp(__SOURCE_DIRECTORY__ + @"/data/TypeProviderLibrary/TypeProviderLibrary.dll", + [|(__SOURCE_DIRECTORY__ + @"/data/TypeProviderLibrary/TypeProviderLibrary.dll", {ProjectFileName = __SOURCE_DIRECTORY__ + @"/data/TypeProviderLibrary/TypeProviderLibrary.fsproj"; ProjectId = None SourceFiles = [|__SOURCE_DIRECTORY__ + @"/data/TypeProviderLibrary/Library1.fs"|]; Stamp = None OtherOptions = - [|yield "--simpleresolution"; + [|yield "--simpleresolution"; yield "--noframework"; yield "--out:" + __SOURCE_DIRECTORY__ + @"/data/TypeProviderLibrary/TypeProviderLibrary.dll"; yield "--doc:" + __SOURCE_DIRECTORY__ + @"/data/TypeProviderLibrary/bin/Debug/TypeProviderLibrary.xml"; - yield "--subsystemversion:6.00"; - yield "--highentropyva+"; + yield "--subsystemversion:6.00"; + yield "--highentropyva+"; yield "--fullpaths"; - yield "--flaterrors"; - yield "--target:library"; + yield "--flaterrors"; + yield "--target:library"; yield "--define:DEBUG"; - yield "--define:TRACE"; - yield "--debug+"; - yield "--optimize-"; + yield "--define:TRACE"; + yield "--debug+"; + yield "--optimize-"; yield "--tailcalls-"; - yield "--debug:full"; + yield "--debug:full"; yield "--platform:anycpu"; for r in mkStandardProjectReferences () do yield "-r:" + r @@ -876,25 +859,30 @@ let ``Type provider project references should not throw exceptions`` () = UseScriptResolutionRules = false; LoadTime = System.DateTime.Now UnresolvedReferences = None; - OriginalLoadReferences = [] })|]; + OriginalLoadReferences = []; + ExtraProjectInfo = None;})|]; IsIncompleteTypeCheckEnvironment = false; UseScriptResolutionRules = false; LoadTime = System.DateTime.Now UnresolvedReferences = None; - OriginalLoadReferences = [];} + OriginalLoadReferences = []; + ExtraProjectInfo = None;} //printfn "options: %A" options - let fileName = __SOURCE_DIRECTORY__ + @"/data/TypeProviderConsole/Program.fs" - let fileSource = FileSystem.OpenFileForReadShim(fileName).ReadAllText() - let fileParseResults, fileCheckAnswer = checker.ParseAndCheckFileInProject(fileName, 0, SourceText.ofString fileSource, options) |> Async.RunSynchronously - let fileCheckResults = + let fileName = __SOURCE_DIRECTORY__ + @"/data/TypeProviderConsole/Program.fs" + let fileSource = File.ReadAllText(fileName) + let fileParseResults, fileCheckAnswer = checker.ParseAndCheckFileInProject(fileName, 0, FSharp.Compiler.Text.SourceText.ofString fileSource, options) |> Async.RunSynchronously + let fileCheckResults = match fileCheckAnswer with | FSharpCheckFileAnswer.Succeeded(res) -> res | res -> failwithf "Parsing did not finish... (%A)" res - printfn "Parse Errors: %A" fileParseResults.Diagnostics - printfn "Errors: %A" fileCheckResults.Diagnostics - fileCheckResults.Diagnostics |> Array.exists (fun error -> error.Severity = FSharpDiagnosticSeverity.Error) |> shouldEqual false + printfn "Parse Errors: %A" fileParseResults.Errors + printfn "Errors: %A" fileCheckResults.Errors + fileCheckResults.Errors |> Array.exists (fun error -> error.Severity = FSharpErrorSeverity.Error) |> shouldEqual false + + + //------------------------------------------------------------------------------------ @@ -905,7 +893,7 @@ let ``Type provider project references should not throw exceptions`` () = [] #endif let ``Projects creating generated types should not utilize cross-project-references but should still analyze oK once project is built`` () = - let options = + let options = {ProjectFileName = __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TestConsole/TestConsole.fsproj"; ProjectId = None @@ -913,20 +901,20 @@ let ``Projects creating generated types should not utilize cross-project-referen [|__SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TestConsole/AssemblyInfo.fs"; __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TestConsole/Program.fs"|]; OtherOptions = - [|yield "--simpleresolution"; + [|yield "--simpleresolution"; yield "--noframework"; yield "--out:" + __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TestConsole/bin/Debug/TestConsole.exe"; yield "--doc:" + __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TestConsole/bin/Debug/TestConsole.XML"; - yield "--subsystemversion:6.00"; - yield "--highentropyva+"; + yield "--subsystemversion:6.00"; + yield "--highentropyva+"; yield "--fullpaths"; - yield "--flaterrors"; - yield "--target:exe"; - yield "--define:DEBUG"; + yield "--flaterrors"; + yield "--target:exe"; + yield "--define:DEBUG"; yield "--define:TRACE"; - yield "--debug+"; - yield "--optimize-"; - yield "--tailcalls-"; + yield "--debug+"; + yield "--optimize-"; + yield "--tailcalls-"; yield "--debug:full"; yield "--platform:anycpu"; yield "-r:" + __SOURCE_DIRECTORY__ + @"/../../packages/FSharp.Configuration.1.3.0/lib/net45/FSharp.Configuration.dll"; @@ -934,7 +922,7 @@ let ``Projects creating generated types should not utilize cross-project-referen yield "-r:" + r yield "-r:" + __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TypeProvidersBug/bin/Debug/TypeProvidersBug.dll"|]; ReferencedProjects = - [|FSharpReferencedProject.CreateFSharp(__SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TypeProvidersBug/bin/Debug/TypeProvidersBug.dll", + [|(__SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TypeProvidersBug/bin/Debug/TypeProvidersBug.dll", {ProjectFileName = __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TypeProvidersBug/TypeProvidersBug.fsproj"; ProjectId = None @@ -942,21 +930,21 @@ let ``Projects creating generated types should not utilize cross-project-referen [|__SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TypeProvidersBug/AssemblyInfo.fs"; __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TypeProvidersBug/Library1.fs"|]; OtherOptions = - [|yield "--simpleresolution"; + [|yield "--simpleresolution"; yield "--noframework"; yield "--out:" + __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TypeProvidersBug/bin/Debug/TypeProvidersBug.dll"; yield "--doc:" + __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TypeProvidersBug/bin/Debug/TypeProvidersBug.XML"; - yield "--subsystemversion:6.00"; - yield "--highentropyva+"; + yield "--subsystemversion:6.00"; + yield "--highentropyva+"; yield "--fullpaths"; - yield "--flaterrors"; - yield "--target:library"; + yield "--flaterrors"; + yield "--target:library"; yield "--define:DEBUG"; - yield "--define:TRACE"; - yield "--debug+"; - yield "--optimize-"; + yield "--define:TRACE"; + yield "--debug+"; + yield "--optimize-"; yield "--tailcalls-"; - yield "--debug:full"; + yield "--debug:full"; yield "--platform:anycpu"; yield "-r:" + __SOURCE_DIRECTORY__ + @"/../../packages/FSharp.Configuration.1.3.0/lib/net45/FSharp.Configuration.dll"; for r in mkStandardProjectReferences () do @@ -967,25 +955,26 @@ let ``Projects creating generated types should not utilize cross-project-referen LoadTime = System.DateTime.Now UnresolvedReferences = None; OriginalLoadReferences = []; - Stamp = None})|]; + Stamp = None; + ExtraProjectInfo = None;})|]; IsIncompleteTypeCheckEnvironment = false; UseScriptResolutionRules = false; LoadTime = System.DateTime.Now UnresolvedReferences = None; Stamp = None; - OriginalLoadReferences = [] } + OriginalLoadReferences = []; + ExtraProjectInfo = None;} //printfn "options: %A" options - let fileName = __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TestConsole/Program.fs" - let fileSource = FileSystem.OpenFileForReadShim(fileName).ReadAllText() - - let fileParseResults, fileCheckAnswer = checker.ParseAndCheckFileInProject(fileName, 0, SourceText.ofString fileSource, options) |> Async.RunSynchronously - let fileCheckResults = + let fileName = __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TestConsole/Program.fs" + let fileSource = File.ReadAllText(fileName) + let fileParseResults, fileCheckAnswer = checker.ParseAndCheckFileInProject(fileName, 0, FSharp.Compiler.Text.SourceText.ofString fileSource, options) |> Async.RunSynchronously + let fileCheckResults = match fileCheckAnswer with | FSharpCheckFileAnswer.Succeeded(res) -> res | res -> failwithf "Parsing did not finish... (%A)" res - printfn "Parse Errors: %A" fileParseResults.Diagnostics - printfn "Errors: %A" fileCheckResults.Diagnostics - fileCheckResults.Diagnostics |> Array.exists (fun error -> error.Severity = FSharpDiagnosticSeverity.Error) |> shouldEqual false + printfn "Parse Errors: %A" fileParseResults.Errors + printfn "Errors: %A" fileCheckResults.Errors + fileCheckResults.Errors |> Array.exists (fun error -> error.Severity = FSharpErrorSeverity.Error) |> shouldEqual false //------------------------------------------------------------------------------------ diff --git a/tests/service/ParserTests.fs b/tests/service/ParserTests.fs index 76acd1ba6aa..177a989cfd5 100644 --- a/tests/service/ParserTests.fs +++ b/tests/service/ParserTests.fs @@ -1,7 +1,7 @@ module Tests.Parser open FSharp.Compiler.Service.Tests.Common -open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTree open NUnit.Framework module Recovery = @@ -16,31 +16,6 @@ let x = () """ let (SynModuleOrNamespace (decls = decls)) = getSingleModuleLikeDecl parseResults match decls with - | [ SynModuleDecl.Types ([ SynTypeDefn (typeRepr = SynTypeDefnRepr.ObjectModel (members = [ _; _ ])) ], _) - SynModuleDecl.Let _ ] -> () - | _ -> failwith "Unexpected tree" - - [] - let ``Union case 01 - of`` () = - let parseResults = getParseResults """ -type U1 = - | A of - -type U2 = - | B of - | C - -let x = () - """ - let (|UnionWithCases|_|) typeDefn = - match typeDefn with - | SynTypeDefn (typeRepr = SynTypeDefnRepr.Simple (SynTypeDefnSimpleRepr.Union (unionCases = cases), _)) -> - cases |> List.map (fun (SynUnionCase (ident = ident)) -> ident.idText) |> Some - | _ -> None - - let (SynModuleOrNamespace (decls = decls)) = getSingleModuleLikeDecl parseResults - match decls with - | [ SynModuleDecl.Types ([ UnionWithCases ["A"]], _) - SynModuleDecl.Types ([ UnionWithCases ["B"; "C"] ], _) + | [ SynModuleDecl.Types ([ TypeDefn (typeRepr = SynTypeDefnRepr.ObjectModel (members = [ _; _ ])) ], _) SynModuleDecl.Let _ ] -> () | _ -> failwith "Unexpected tree" diff --git a/tests/service/PatternMatchCompilationTests.fs b/tests/service/PatternMatchCompilationTests.fs index 30afbefd85d..b4261473935 100644 --- a/tests/service/PatternMatchCompilationTests.fs +++ b/tests/service/PatternMatchCompilationTests.fs @@ -2,17 +2,9 @@ module FSharp.Compiler.Service.Tests.PatternMatchCompilationTests open FsUnit open NUnit.Framework -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.EditorServices -open FSharp.Compiler.IO -open FSharp.Compiler.Syntax [] -#if !NETCOREAPP -[] -#endif let ``Wrong type 01 - Match`` () = let _, checkResults = getParseAndCheckResults """ match () with @@ -24,10 +16,8 @@ match () with "(3,2--3,4): This expression was expected to have type 'unit' but here has type 'string'" ] + [] -#if !NETCOREAPP -[] -#endif let ``Wrong type 02 - Binding`` () = let _, checkResults = getParseAndCheckResults """ let ("": unit), (x: int) = let y = () in () @@ -41,9 +31,6 @@ let ("": unit), (x: int) = let y = () in () [] -#if !NETCOREAPP -[] -#endif let ``Attributes 01 `` () = let _, checkResults = getParseAndCheckResults """ match () with @@ -57,9 +44,6 @@ match () with [] -#if !NETCOREAPP -[] -#endif let ``Optional val 01 `` () = let _, checkResults = getParseAndCheckResults """ match () with @@ -72,9 +56,6 @@ match () with [] -#if !NETCOREAPP -[] -#endif let ``Null 01`` () = let _, checkResults = getParseAndCheckResults """ match 1, 2 with @@ -88,9 +69,6 @@ match 1, 2 with [] -#if !NETCOREAPP -[] -#endif let ``Union case 01 - Missing field`` () = let _, checkResults = getParseAndCheckResults """ type U = @@ -108,9 +86,6 @@ match A with [] -#if !NETCOREAPP -[] -#endif let ``Union case 02 - Extra args`` () = let _, checkResults = getParseAndCheckResults """ type U = @@ -128,9 +103,6 @@ match A with [] -#if !NETCOREAPP -[] -#endif let ``Union case 03 - Extra args`` () = let _, checkResults = getParseAndCheckResults """ type U = @@ -147,9 +119,6 @@ match A with ] [] -#if !NETCOREAPP -[] -#endif let ``Union case 04 - Extra args`` () = let _, checkResults = getParseAndCheckResults """ type U = @@ -166,9 +135,6 @@ match A with ] [] -#if !NETCOREAPP -[] -#endif let ``Union case 05 - Single arg, no errors`` () = let _, checkResults = getParseAndCheckResults """ type U = @@ -185,9 +151,6 @@ match A with [] -#if !NETCOREAPP -[] -#endif let ``Union case 06 - Named args - Wrong field name`` () = let _, checkResults = getParseAndCheckResults """ type U = @@ -205,9 +168,6 @@ match A with [] -#if !NETCOREAPP -[] -#endif let ``Union case 07 - Named args - Name used twice`` () = let _, checkResults = getParseAndCheckResults """ type U = @@ -225,9 +185,6 @@ match A with [] -#if !NETCOREAPP -[] -#endif let ``Union case 08 - Multiple tupled args`` () = let _, checkResults = getParseAndCheckResults """ type U = @@ -257,9 +214,6 @@ match None with [] -#if !NETCOREAPP -[] -#endif let ``Active pattern 01 - Named args`` () = let _, checkResults = getParseAndCheckResults """ let (|Foo|) x = x @@ -274,9 +228,6 @@ match 1 with [] -#if !NETCOREAPP -[] -#endif let ``Literal 01 - Args - F#`` () = let _, checkResults = getParseAndCheckResults """ let [] Foo = 1 @@ -292,9 +243,6 @@ match 1 with [] -#if !NETCOREAPP -[] -#endif let ``Literal 02 - Args - IL`` () = let _, checkResults = getParseAndCheckResults """ open System.Diagnostics @@ -310,9 +258,6 @@ match TraceLevel.Off with [] -#if !NETCOREAPP -[] -#endif let ``Caseless DU`` () = let _, checkResults = getParseAndCheckResults """ type DU = Case of int @@ -340,9 +285,6 @@ match 1 with [] -#if !NETCOREAPP -[] -#endif let ``Or 02 - Different names`` () = let _, checkResults = getParseAndCheckResults """ match 1 with @@ -355,9 +297,6 @@ match 1 with [] -#if !NETCOREAPP -[] -#endif let ``Or 03 - Different names and types`` () = let _, checkResults = getParseAndCheckResults """ type U = @@ -373,905 +312,3 @@ match A with "(7,19--7,20): This expression was expected to have type 'int' but here has type 'string'" "(6,6--6,7): Incomplete pattern matches on this expression. For example, the value 'A' may indicate a case not covered by the pattern(s)." ] - -[] -let ``As 01 - names and wildcards`` () = - let _, checkResults = getParseAndCheckResultsPreview """ -match 1 with -| _ as w -> let x = w + 1 in () - -match 2 with -| y as _ -> let z = y + 1 in () - -match 3 with -| a as b -> let c = a + b in () -""" - assertHasSymbolUsages ["a"; "b"; "c"; "w"; "x"; "y"; "z"] checkResults - dumpErrors checkResults |> shouldEqual [] - - -[] -#if !NETCOREAPP -[] -#endif -let ``As 02 - type testing`` () = - let _, checkResults = getParseAndCheckResultsPreview """ -let (|Id|) = id -match box 1 with -| :? int as a -> let b = a + 1 in () -| c & d as :? uint -> let z = c + d + 2u in () // Tighten typing left-to-right: https://github.com/fsharp/fslang-design/pull/595#issuecomment-860591709 -| :? int64 as Id e -> let f = e + 3L in () -| :? uint64 as Id g & h -> let y = g + 4UL + h in () // (:? uint64 as Id h) & (i : obj) -| :? int8 as Id i as j -> let x = i + 5y + j in () // Only the first "as" will have the derived type -""" - assertHasSymbolUsages (List.map string ['a'..'j']) checkResults - dumpErrors checkResults |> shouldEqual [ - "(5,34--5,35): The type 'obj' does not support the operator '+'" - "(5,32--5,33): The type 'obj' does not support the operator '+'" - "(7,45--7,46): The type 'obj' does not match the type 'uint64'" - "(7,43--7,44): The type 'obj' does not match the type 'uint64'" - "(8,43--8,44): The type 'obj' does not match the type 'int8'" - "(8,41--8,42): The type 'obj' does not match the type 'int8'" - "(3,6--3,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - ] - -[] -#if !NETCOREAPP -[] -#endif -let ``As 03 - impossible type testing`` () = - let _, checkResults = getParseAndCheckResultsPreview """ -match Unchecked.defaultof with -| :? System.Enum as (:? System.ConsoleKey as a) -> let b = a + enum 1 in () -| :? System.Enum as (:? System.ConsoleKey as c) -> let d = c + enum 1 in () -| :? System.Enum as (:? int as x) -> let w = x + 1 in () -| :? string as y -> let z = y + "" in () -| _ -> () -""" - assertHasSymbolUsages ["a"; "b"; "c"; "d"] checkResults - dumpErrors checkResults |> shouldEqual [ - "(5,21--5,27): Type constraint mismatch. The type 'int' is not compatible with type 'System.Enum' " - ] - -[] -#if !NETCOREAPP -[] -#endif -let ``As 04 - duplicate type testing`` () = - let _, checkResults = getParseAndCheckResultsPreview """ -match Unchecked.defaultof with -| :? System.Enum as (a & b) -> let c = a = b in () -| :? System.Enum as (:? System.ConsoleKey as (d & e)) -> let f = d + e + enum 1 in () -| g -> () -""" - assertHasSymbolUsages ["a"; "b"; "c"; "d"; "e"; "f"; "g"] checkResults - dumpErrors checkResults |> shouldEqual [ - "(4,2--4,85): This rule will never be matched" - ] - -[] -#if !NETCOREAPP -[] -#endif -let ``As 05 - inferred type testing`` () = - let _, checkResults = getParseAndCheckResultsPreview """ -match Unchecked.defaultof with -| :? _ as a -> let _ = a in () - -match Unchecked.defaultof with -| :? _ as z -> let _ = z in () -""" - assertHasSymbolUsages ["a"] checkResults - dumpErrors checkResults |> shouldEqual [ - "(2,6--2,25): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(6,2--6,6): The type 'int' does not have any proper subtypes and cannot be used as the source of a type test or runtime coercion." - ] - -[] -let ``As 06 - completeness`` () = - let _, checkResults = getParseAndCheckResultsPreview """ -match Unchecked.defaultof with -| true as a -> if a then () -| b as false -> if not b then () - -match Unchecked.defaultof with -| c as true as d -> if c && d then () -| e as (f as false) -> if e || f then () - -match Unchecked.defaultof with -| (g & h) as (i as true) as (_ as j) -> if g && h && i && j then () -| k & l as (m as (false as n)) as (o as _) -> if k || l || m || n || o then () -""" - assertHasSymbolUsages (List.map string ['a'..'o']) checkResults - dumpErrors checkResults |> shouldEqual [] - -[] -let ``As 07 - syntactical precedence matrix testing right - total patterns`` () = - (* -bindingPattern: - | headBindingPattern -headBindingPattern: - | headBindingPattern AS constrPattern - | headBindingPattern BAR headBindingPattern - | headBindingPattern COLON_COLON headBindingPattern - | tuplePatternElements %prec pat_tuple - | conjPatternElements %prec pat_conj - | constrPattern -constrPattern: - | atomicPatternLongIdent explicitValTyparDecls - | atomicPatternLongIdent opt_explicitValTyparDecls2 atomicPatsOrNamePatPairs %prec pat_app - | atomicPatternLongIdent opt_explicitValTyparDecls2 HIGH_PRECEDENCE_PAREN_APP atomicPatsOrNamePatPairs - | atomicPatternLongIdent opt_explicitValTyparDecls2 HIGH_PRECEDENCE_BRACK_APP atomicPatsOrNamePatPairs - | COLON_QMARK atomTypeOrAnonRecdType %prec pat_isinst - | atomicPattern -atomicPattern: - | quoteExpr - | CHAR DOT_DOT CHAR - | LBRACE recordPatternElementsAux rbrace - | LBRACK listPatternElements RBRACK - | LBRACK_BAR listPatternElements BAR_RBRACK - | UNDERSCORE - | QMARK ident - | atomicPatternLongIdent %prec prec_atompat_pathop - | constant - | FALSE - | TRUE - | NULL - | LPAREN parenPatternBody rparen - | LPAREN parenPatternBody recover - | LPAREN error rparen - | LPAREN recover - | STRUCT LPAREN tupleParenPatternElements rparen - | STRUCT LPAREN tupleParenPatternElements recover - | STRUCT LPAREN error rparen - | STRUCT LPAREN recover -parenPatternBody: - | parenPattern - | /* EMPTY */ -parenPattern: - | parenPattern AS constrPattern - | parenPattern BAR parenPattern - | tupleParenPatternElements - | conjParenPatternElements - | parenPattern COLON typeWithTypeConstraints %prec paren_pat_colon - | attributes parenPattern %prec paren_pat_attribs - | parenPattern COLON_COLON parenPattern - | constrPattern - *) - let _, checkResults = getParseAndCheckResultsPreview $""" -let eq<'T> (x:'T option) = () // FS-1093-safe type assert function -let (|Id0|) = ignore -let (|Id1|) = id -let (|Id2|) _ = id -type AAA = {{ aaa : int }} -let a = 1 -let b as c = 2 -let d as e | d & e = 3 -let f as g, h = 4, 5 -let i as j & k = 6 -let l as Id1 m = 7 -let n as Id2 a o = 8 -let p as {{ aaa = q }} = {{ aaa = 9 }} -let r as _ = 10 -let s as Id0 = 11 -let t as (u) = 12 -let v as struct(w, x) = 13, 14 -let y as z : int = 15{set { 'a'..'x' } - set [ 'p'; 'v' ] |> Set.map (sprintf " + %c") |> System.String.Concat} -Some p |> eq -Some v |> eq -() -""" - assertHasSymbolUsages (List.map string ['a'..'z']) checkResults - dumpErrors checkResults |> shouldEqual [] - -[] -#if !NETCOREAPP -[] -#endif -let ``As 08 - syntactical precedence matrix testing right - partial patterns`` () = - let _, checkResults = getParseAndCheckResultsPreview """ -let eq<'T> (x:'T option) = () // FS-1093-safe type assert function -let (|Unit1|_|) x = if System.Random().NextDouble() < 0.5 then Some Unit1 else None -let (|Unit2|_|) _ = (|Unit1|_|) -let (|Id1|_|) x = if System.Random().NextDouble() < 0.5 then Some x else None -let (|Id2|_|) _ = (|Id1|_|) -let a = 1 -let b as c::d as e = 2::[3] -let f as Unit1 = 4 -let g as Unit2 a h = 5 -let i as Id1 j = 6 -let k as Id2 a l = 7 -box 8 |> function -| m as :? int -> -box {| aaa = 9 |} |> function -| n as :? {| aaa : int |} -> -let o as [p] = [10] -let q as [|r|] = [|11|] -let s as 12 = 12 -let t as false = false -let u as true = true -let v as null = null -let w as (null) = null -let x as y : int = 13 + a + b + c + f + g + i + j + k + l + p + r + s -Some d |> eq -Some e |> eq -Some h |> eq -Some m |> eq -Some n |> eq -Some o |> eq -Some q |> eq -Some t |> eq -Some u |> eq -Some v |> eq -Some w |> eq -() -""" - assertHasSymbolUsages (List.map string ['a'..'y']) checkResults - dumpErrors checkResults |> shouldEqual [ - "(8,4--8,18): Incomplete pattern matches on this expression. For example, the value '[]' may indicate a case not covered by the pattern(s)." - "(9,4--9,14): Incomplete pattern matches on this expression." - "(10,4--10,18): Incomplete pattern matches on this expression." - "(11,4--11,14): Incomplete pattern matches on this expression." - "(12,4--12,16): Incomplete pattern matches on this expression." - "(23,4--23,15): Incomplete pattern matches on this expression. For example, the value '( some-non-null-value )' may indicate a case not covered by the pattern(s)." - "(22,4--22,13): Incomplete pattern matches on this expression. For example, the value '( some-non-null-value )' may indicate a case not covered by the pattern(s)." - "(21,4--21,13): Incomplete pattern matches on this expression. For example, the value 'false' may indicate a case not covered by the pattern(s)." - "(20,4--20,14): Incomplete pattern matches on this expression. For example, the value 'true' may indicate a case not covered by the pattern(s)." - "(19,4--19,11): Incomplete pattern matches on this expression. For example, the value '0' may indicate a case not covered by the pattern(s)." - "(18,4--18,14): Incomplete pattern matches on this expression. For example, the value '[|_; _|]' may indicate a case not covered by the pattern(s)." - "(17,4--17,12): Incomplete pattern matches on this expression. For example, the value '[_;_]' may indicate a case not covered by the pattern(s)." - "(15,21--15,29): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(13,9--13,17): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - ] - -[] -#if !NETCOREAPP -[] -#endif -let ``As 09 - syntactical precedence matrix testing right - erroneous patterns`` () = - let _, checkResults = getParseAndCheckResultsPreview """ -let (|DefinedPattern|) = id -let a as 1 = true -let b as true = 2 -let c as :? int = box 3 -let d as :? int = 4 -let e as UndefinedPattern = 5 -let f as DefinedPattern () = 6 -let g as DefinedPattern = 7 -let h as , i = 8 -let j as : k = 9 -let l as :: m = 10 -let n as & o = 11 -let p as | q = 12 -let r as ( s = 13 -let t as ) u = 14 -let v as struct w = 15 -let x as () = y -let z as -""" - dumpErrors checkResults |> shouldEqual [ - "(10,9--10,10): Unexpected symbol ',' in binding" - "(11,9--11,10): Unexpected symbol ':' in binding" - "(12,9--12,11): Unexpected symbol '::' in binding" - "(13,9--13,10): Unexpected symbol '&' in binding" - "(14,9--14,10): Unexpected symbol '|' in binding" - "(15,13--15,14): Unexpected symbol '=' in pattern. Expected ')' or other token." - "(15,9--15,10): Unmatched '('" - "(16,0--16,3): Possible incorrect indentation: this token is offside of context started at position (15:10). Try indenting this token further or using standard formatting conventions." - "(17,16--17,17): Unexpected identifier in pattern. Expected '(' or other token." - "(20,0--20,0): Incomplete structured construct at or before this point in binding" - "(3,13--3,17): This expression was expected to have type 'int' but here has type 'bool'" - "(3,4--3,10): Incomplete pattern matches on this expression. For example, the value '0' may indicate a case not covered by the pattern(s)." - "(4,16--4,17): This expression was expected to have type 'bool' but here has type 'int'" - "(4,4--4,13): Incomplete pattern matches on this expression. For example, the value 'false' may indicate a case not covered by the pattern(s)." - "(5,9--5,15): This runtime coercion or type test from type 'a to int involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." - "(6,9--6,15): This runtime coercion or type test from type 'a to int involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." - "(8,29--8,30): This expression was expected to have type 'unit' but here has type 'int'" - "(9,26--9,27): This expression was expected to have type 'unit' but here has type 'int'" - "(18,14--18,15): The value or constructor 'y' is not defined." - ] - -[] -let ``As 10 - syntactical precedence matrix testing left - total patterns`` () = - let _, checkResults = getParseAndCheckResultsPreview $""" -let eq<'T> (x:'T option) = () // FS-1093-safe type assert function -let (|Id0|) = ignore -let (|Id1|) = id -let (|Id2|) _ = id -type AAA = {{ aaa : int }} -let a = 1 -let b as c = 2 -let d | d as e = 3 -let f, g as h = 4, 5 -let i & j as k = 6 -let Id1 l as m = 7 -let Id2 a n as o = 8 -let {{ aaa = p }} as q = {{ aaa = 9 }} -let _ as r = 10 -let Id0 as s = 11 -let (t) as u = 12 -let struct(w, v) as x = 13, 14 -let (y : int) as z = 15{set { 'a'..'v' } - set [ 'h'; 'q' ] |> Set.map (sprintf " + %c") |> System.String.Concat} -Some h |> eq -Some q |> eq -Some x |> eq -() -""" - assertHasSymbolUsages (List.map string ['a'..'z']) checkResults - dumpErrors checkResults |> shouldEqual [] - -[] -#if !NETCOREAPP -[] -#endif -let ``As 11 - syntactical precedence matrix testing left - partial patterns`` () = - let _, checkResults = getParseAndCheckResultsPreview """ -let eq<'T> (x:'T option) = () // FS-1093-safe type assert function -let (|Unit1|_|) x = if System.Random().NextDouble() < 0.5 then Some Unit1 else None -let (|Unit2|_|) _ = (|Unit1|_|) -let (|Id1|_|) x = if System.Random().NextDouble() < 0.5 then Some x else None -let (|Id2|_|) _ = (|Id1|_|) -let a = 1 -let b as (c::d as e) = 2::[3] -let Unit1 as f = 4 -let Unit2 a g as h = 5 -let Id1 i as j = 6 -let Id2 a k as l = 7 -box 8 |> function -| :? int as m -> -box {| aaa = 9 |} |> function -| :? {| aaa : int |} as n -> -let [o] as p = [10] -let [|q|] as r = [|11|] -let 12 as s = 12 -let false as t = false -let true as u = true -let null as v = null -let (null) as w = null -let (x : int) as y = 13 + a + c + f + h + i + j + k + l + m + o + q + s -Some b |> eq -Some d |> eq -Some e |> eq -Some g |> eq -Some n |> eq<{| aaa : int |}> -Some p |> eq -Some r |> eq -Some t |> eq -Some u |> eq -Some v |> eq -Some w |> eq -() -""" - assertHasSymbolUsages (List.map string ['a'..'y']) checkResults - dumpErrors checkResults |> shouldEqual [ - "(8,4--8,20): Incomplete pattern matches on this expression. For example, the value '[]' may indicate a case not covered by the pattern(s)." - "(9,4--9,14): Incomplete pattern matches on this expression." - "(10,4--10,18): Incomplete pattern matches on this expression." - "(11,4--11,14): Incomplete pattern matches on this expression." - "(12,4--12,16): Incomplete pattern matches on this expression." - "(23,4--23,15): Incomplete pattern matches on this expression. For example, the value '( some-non-null-value )' may indicate a case not covered by the pattern(s)." - "(22,4--22,13): Incomplete pattern matches on this expression. For example, the value '( some-non-null-value )' may indicate a case not covered by the pattern(s)." - "(21,4--21,13): Incomplete pattern matches on this expression. For example, the value 'false' may indicate a case not covered by the pattern(s)." - "(20,4--20,14): Incomplete pattern matches on this expression. For example, the value 'true' may indicate a case not covered by the pattern(s)." - "(19,4--19,11): Incomplete pattern matches on this expression. For example, the value '0' may indicate a case not covered by the pattern(s)." - "(18,4--18,14): Incomplete pattern matches on this expression. For example, the value '[|_; _|]' may indicate a case not covered by the pattern(s)." - "(17,4--17,12): Incomplete pattern matches on this expression. For example, the value '[_;_]' may indicate a case not covered by the pattern(s)." - "(15,21--15,29): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(13,9--13,17): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - ] - -[] -#if !NETCOREAPP -[] -#endif -let ``As 12 - syntactical precedence matrix testing left - erroneous patterns`` () = - let _, checkResults = getParseAndCheckResultsPreview """ -let (|DefinedPattern|) = id -let 1 as a = true -let true as b = 2 -let :? int as c = box 3 -let :? int as d = 4 -let UndefinedPattern as e = 5 -let DefinedPattern () as f = 6 -let DefinedPattern as g = 7 -let h, as i = 8 -let j : _ as k = 9 -let l :: as m = 10 -let n & as o = 11 -let p | as q = 12 -let r ( as s = 13 -let t ) as u = 14 -let v struct as w = 15 -let () as x = y -let z as = -""" - dumpErrors checkResults |> shouldEqual [ - "(10,7--10,9): Unexpected keyword 'as' in binding" - "(11,10--11,12): Unexpected keyword 'as' in binding. Expected '=' or other token." - "(12,9--12,11): Unexpected keyword 'as' in binding" - "(13,8--13,10): Unexpected keyword 'as' in binding" - "(14,8--14,10): Unexpected keyword 'as' in binding" - "(15,8--15,10): Unexpected keyword 'as' in pattern. Expected ')' or other token." - "(15,6--15,7): Unmatched '('" - "(16,0--16,3): Possible incorrect indentation: this token is offside of context started at position (15:7). Try indenting this token further or using standard formatting conventions." - "(16,0--16,3): Unexpected keyword 'let' or 'use' in binding. Expected incomplete structured construct at or before this point or other token." - "(15,0--15,3): Incomplete value or function definition. If this is in an expression, the body of the expression must be indented to the same column as the 'let' keyword." - "(17,0--17,3): Incomplete structured construct at or before this point in implementation file" - "(20,0--20,0): Possible incorrect indentation: this token is offside of context started at position (19:1). Try indenting this token further or using standard formatting conventions." - "(20,0--20,0): Possible incorrect indentation: this token is offside of context started at position (19:1). Try indenting this token further or using standard formatting conventions." - "(3,13--3,17): This expression was expected to have type 'int' but here has type 'bool'" - "(3,4--3,10): Incomplete pattern matches on this expression. For example, the value '0' may indicate a case not covered by the pattern(s)." - "(4,16--4,17): This expression was expected to have type 'bool' but here has type 'int'" - "(4,4--4,13): Incomplete pattern matches on this expression. For example, the value 'false' may indicate a case not covered by the pattern(s)." - "(5,4--5,10): This runtime coercion or type test from type 'a to int involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." - "(6,4--6,10): This runtime coercion or type test from type 'a to int involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." - "(8,29--8,30): This expression was expected to have type 'unit' but here has type 'int'" - "(9,26--9,27): This expression was expected to have type 'unit' but here has type 'int'" - "(15,4--15,5): The pattern discriminator 'r' is not defined." - "(15,4--15,12): Incomplete pattern matches on this expression." - ] - -[] -#if !NETCOREAPP -[] -#endif -let ``As 13 - syntactical precedence matrix testing right with type tests - total patterns`` () = - let _, checkResults = getParseAndCheckResultsPreview $""" -let eq<'T> (x:'T option) = () // FS-1093-safe type assert function -let (|Id0|) = ignore -let (|Id1|) = id -let (|Id2|) _ = id -type AAA = {{ aaa : int }} -let a = 1 -match box 2 with -| :? int as b as c -> -match box 3 with -| :? int as d | :? int & d as e -> // The left d has type 'int', the right d has type 'obj' -match box 4, 5 with -| :? int as f, g & h -> -match box 6 with -| :? int as i & j as k -> -match box 7 with -| :? int as Id1 l as m -> -match box 8 with -| :? int as Id2 a n as o -> -match box {{ aaa = 9 }} with -| :? AAA as {{ aaa = p }} as q -> -match box 10 with -| :? int as _ as r -> -match box 11 with -| :? int as Id0 as s -> -match box 12 with -| :? int as (t) as u -> -match box struct(13, 14) with -| :? struct(int * int) as struct(v, w) as x -> -let y as z : int = 15 + a + b + d + f + g + h + i + l + n + p + t + v + w -Some c |> eq -Some e |> eq -Some j |> eq -Some k |> eq -Some m |> eq -Some o |> eq -Some q |> eq -Some r |> eq -Some s |> eq -Some u |> eq -Some x |> eq -() -""" - assertHasSymbolUsages (List.map string ['a'..'z']) checkResults - dumpErrors checkResults |> shouldEqual [ - "(11,25--11,26): This expression was expected to have type 'int' but here has type 'obj'" - "(28,6--28,24): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(26,6--26,12): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(24,6--24,12): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(22,6--22,12): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(20,6--20,21): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(18,6--18,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(16,6--16,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(14,6--14,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(12,6--12,14): Incomplete pattern matches on this expression. For example, the value '(( some-other-subtype ),_)' may indicate a case not covered by the pattern(s)." - "(10,6--10,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(8,6--8,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - ] - -[] -#if !NETCOREAPP -[] -#endif -let ``As 14 - syntactical precedence matrix testing right with type tests - partial patterns`` () = - let _, checkResults = getParseAndCheckResultsPreview """ -let eq<'T> (x:'T option) = () // FS-1093-safe type assert function -let (|Unit1|_|) x = if System.Random().NextDouble() < 0.5 then Some Unit1 else None -let (|Unit2|_|) _ = (|Unit1|_|) -let (|Id1|_|) x = if System.Random().NextDouble() < 0.5 then Some x else None -let (|Id2|_|) _ = (|Id1|_|) -let a = 1 -match box 2::[box 3] with -| :? int as b as c::d as e -> -match box 4 with -| :? int as Unit1 as f -> -match box 5 with -| :? int as Unit2 a g as h -> -match box 6 with -| :? int as Id1 i as j -> -match box 7 with -| :? int as Id2 a k as l -> -match box 8 with -| :? System.ValueType as :? int as m -> -match box {| aaa = 9 |} with -| :? obj as :? {| aaa : int |} as n -> -match box [10] with -| :? (int list) as [o] as p -> -match box [|11|] with -| :? (int[]) as [|q|] as r -> -match box 12 with -| :? int as 12 as s -> -match box false with -| :? bool as false as t -> -match box true with -| :? bool as true as u -> -match box null with -| :? System.ValueType as null as v -> -match box null with -| :? System.ValueType as (null) as w -> -let x as y : int = 13 + a + b + i + k + o + q -Some c |> eq -Some d |> eq -Some e |> eq -Some f |> eq -Some g |> eq -Some h |> eq -Some j |> eq -Some l |> eq -Some m |> eq -Some n |> eq -Some p |> eq -Some r |> eq -Some s |> eq -Some t |> eq -Some u |> eq -Some v |> eq -Some w |> eq -() -""" - assertHasSymbolUsages (set ['a' .. 'y'] |> Set.remove 'n' |> Set.map string |> Set.toList) checkResults - dumpErrors checkResults |> shouldEqual [ - "(21,2--21,8): This type test or downcast will always hold" - "(34,6--34,14): Incomplete pattern matches on this expression. For example, the value '( some-non-null-value )' may indicate a case not covered by the pattern(s)." - "(32,6--32,14): Incomplete pattern matches on this expression. For example, the value '( some-non-null-value )' may indicate a case not covered by the pattern(s)." - "(30,6--30,14): Incomplete pattern matches on this expression. For example, the value 'false' may indicate a case not covered by the pattern(s)." - "(28,6--28,15): Incomplete pattern matches on this expression. For example, the value 'true' may indicate a case not covered by the pattern(s)." - "(26,6--26,12): Incomplete pattern matches on this expression. For example, the value '0' may indicate a case not covered by the pattern(s)." - "(24,6--24,16): Incomplete pattern matches on this expression. For example, the value '[|_; _|]' may indicate a case not covered by the pattern(s)." - "(22,6--22,14): Incomplete pattern matches on this expression. For example, the value '[_;_]' may indicate a case not covered by the pattern(s)." - "(20,6--20,23): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(18,6--18,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(16,6--16,11): Incomplete pattern matches on this expression." - "(14,6--14,11): Incomplete pattern matches on this expression." - "(12,6--12,11): Incomplete pattern matches on this expression." - "(10,6--10,11): Incomplete pattern matches on this expression." - "(8,6--8,20): Incomplete pattern matches on this expression. For example, the value '[( some-other-subtype )]' may indicate a case not covered by the pattern(s)." - ] - -[] -#if !NETCOREAPP -[] -#endif -let ``As 15 - syntactical precedence matrix testing right with type tests - erroneous patterns`` () = - let _, checkResults = getParseAndCheckResultsPreview """ -let (|DefinedPattern|) = id -let :? a as 1 = true -let :? b as true = 2 -let :? c as :? int = box 3 -let :? d as :? int = 4 -let :? e as UndefinedPattern = 5 -let :? f as DefinedPattern () = 6 -let :? g as DefinedPattern = 7 -let :? h as , i = 8 -let :? j as : k = 9 -let :? l as :: m = 10 -let :? n as & o = 11 -let :? p as | q = 12 -let :? r as ( s = 13 -let :? t as ) u = 14 -let :? v as struct w = 15 -let :? x as () = y -let :? z as -""" - dumpErrors checkResults |> shouldEqual [ - "(10,12--10,13): Unexpected symbol ',' in binding" - "(11,12--11,13): Unexpected symbol ':' in binding" - "(12,12--12,14): Unexpected symbol '::' in binding" - "(13,12--13,13): Unexpected symbol '&' in binding" - "(14,12--14,13): Unexpected symbol '|' in binding" - "(15,16--15,17): Unexpected symbol '=' in pattern. Expected ')' or other token." - "(15,12--15,13): Unmatched '('" - "(16,0--16,3): Possible incorrect indentation: this token is offside of context started at position (15:13). Try indenting this token further or using standard formatting conventions." - "(17,19--17,20): Unexpected identifier in pattern. Expected '(' or other token." - "(20,0--20,0): Incomplete structured construct at or before this point in binding" - "(3,7--3,8): The type 'a' is not defined." - "(3,4--3,8): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." - "(4,7--4,8): The type 'b' is not defined." - "(4,4--4,8): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." - "(5,7--5,8): The type 'c' is not defined." - "(5,4--5,8): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." - "(6,7--6,8): The type 'd' is not defined." - "(6,4--6,8): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." - "(7,7--7,8): The type 'e' is not defined." - "(7,4--7,8): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." - "(8,7--8,8): The type 'f' is not defined." - "(8,4--8,8): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." - "(9,7--9,8): The type 'g' is not defined." - "(9,4--9,8): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." - "(15,7--15,8): The type 'r' is not defined." - "(15,4--15,8): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." - "(18,7--18,8): The type 'x' is not defined." - "(18,4--18,8): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." - ] - -[] -#if !NETCOREAPP -[] -#endif -let ``As 16 - syntactical precedence matrix testing left with type tests - total patterns`` () = - let validSet = set { 'a'..'x' } - set [ 'p'; 'q' ] |> Set.map string - let _, checkResults = getParseAndCheckResultsPreview $""" -let eq<'T> (x:'T option) = () // FS-1093-safe type assert function -let (|Id0|) = ignore -let (|Id1|) = id -let (|Id2|) _ = id -type AAA = {{ aaa : int }} -let a = 1 -match box 2 with -| b as :? int as c -> -match box 3 with -| d as :? int | d & :? int as e -> -match box 4, 5 with -| f as :? int, g as h -> -match box 6 with -| i as :? int & j as k -> -match box 7 with -| Id1 l as :? int as m -> -match box 8 with -| Id2 a n as :? int as o -> -match box 10 with -| _ as :? int as r -> -match box 11 with -| Id0 as :? int as s -> -match box 12 with -| (t) as :? int as u -> -match box struct(13, 14) with -| struct(v, w) as :? struct(int * int) as x -> -Some a |> eq -Some g |> eq -Some h |> eq -{validSet - set [ "a"; "g"; "h" ] |> Set.map (sprintf "Some %s |> eq\n") |> System.String.Concat} -match box {{ aaa = 9 }} with -| {{ aaa = p }} as :? AAA as q -> -Some "" |> eq // No more type checks after the above line? -""" - assertHasSymbolUsages (Set.toList validSet) checkResults - dumpErrors checkResults |> shouldEqual [ - "(27,2--27,14): This expression was expected to have type 'obj' but here has type 'struct ('a * 'b)'" - "(52,2--52,13): This expression was expected to have type 'obj' but here has type 'AAA'" - "(26,6--26,24): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(24,6--24,12): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(22,6--22,12): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(20,6--20,12): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(18,6--18,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(16,6--16,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(14,6--14,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(12,6--12,14): Incomplete pattern matches on this expression. For example, the value '(( some-other-subtype ),_)' may indicate a case not covered by the pattern(s)." - "(10,6--10,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(8,6--8,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - ] - -[] -#if !NETCOREAPP -[] -#endif -let ``As 17 - syntactical precedence matrix testing left with type tests - partial patterns`` () = - let _, checkResults = getParseAndCheckResultsPreview """ -let eq<'T> (x:'T option) = () // FS-1093-safe type assert function -let (|Unit1|_|) x = if System.Random().NextDouble() < 0.5 then Some Unit1 else None -let (|Unit2|_|) _ = (|Unit1|_|) -let (|Id1|_|) x = if System.Random().NextDouble() < 0.5 then Some x else None -let (|Id2|_|) _ = (|Id1|_|) -let a = 1 -match box 2::[box 3] with -| b as :? int as c::d as e -> -match box 4 with -| Unit1 as :? int as f -> -match box 5 with -| Unit2 a g as :? int as h -> -match box 6 with -| Id1 i as :? int as j -> -match box 7 with -| Id2 a k as :? int as l -> -match box 12 with -| 12 as :? int as s -> -match box false with -| false as :? bool as t -> -match box true with -| true as :? bool as u -> -match box null with -| null as :? System.ValueType as v -> -match box null with -| (null) as :? System.ValueType as w -> -let x as y : int = 13 + a + b -Some a |> eq -Some b |> eq -Some c |> eq -Some d |> eq -Some e |> eq -Some f |> eq -Some g |> eq -Some h |> eq -Some i |> eq -Some j |> eq -Some k |> eq -Some l |> eq -Some m |> eq -Some n |> eq -Some o |> eq -Some p |> eq -Some q |> eq -Some r |> eq -Some s |> eq -Some t |> eq -Some u |> eq -Some v |> eq -Some w |> eq -Some x |> eq -Some y |> eq -match box 8 with -| :? int as :? System.ValueType as m -> -match box {| aaa = 9 |} with -| :? {| aaa : int |} as :? obj as n -> -match box [10] with -| [o] as :? (int list) as p -> -match box [|11|] with -| [|q|] as :? (int[]) as r -> -// No more type checking after the above 4 matches -Some "" |> eq -""" - assertHasSymbolUsages (set ['a'..'y'] - set [ 'm'..'r' ] |> Set.map string |> Set.toList) checkResults - dumpErrors checkResults |> shouldEqual [ - "(19,2--19,4): This expression was expected to have type 'obj' but here has type 'int'" - "(21,2--21,7): This expression was expected to have type 'obj' but here has type 'bool'" - "(23,2--23,6): This expression was expected to have type 'obj' but here has type 'bool'" - "(28,28--28,29): The type 'obj' does not match the type 'int'" - "(41,5--41,6): The value or constructor 'm' is not defined." - "(42,5--42,6): The value or constructor 'n' is not defined." - "(43,5--43,6): The value or constructor 'o' is not defined." - "(44,5--44,6): The value or constructor 'p' is not defined." - "(45,5--45,6): The value or constructor 'q' is not defined." - "(46,5--46,6): The value or constructor 'r' is not defined." - "(55,12--55,31): The type 'int' does not have any proper subtypes and cannot be used as the source of a type test or runtime coercion." - "(26,6--26,14): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(24,6--24,14): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(22,6--22,14): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(20,6--20,15): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(18,6--18,12): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." - "(16,6--16,11): Incomplete pattern matches on this expression." - "(14,6--14,11): Incomplete pattern matches on this expression." - "(12,6--12,11): Incomplete pattern matches on this expression." - "(10,6--10,11): Incomplete pattern matches on this expression." - "(8,6--8,20): Incomplete pattern matches on this expression. For example, the value '[( some-other-subtype )]' may indicate a case not covered by the pattern(s)." - ] - -[] -#if !NETCOREAPP -[] -#endif -let ``As 18 - syntactical precedence matrix testing left with type tests - erroneous patterns`` () = - let _, checkResults = getParseAndCheckResultsPreview """ -let (|DefinedPattern|) = id -let 1 as :? a = true -let true as :? b = 2 -let :? int as :? c = box 3 -let :? int as :? d = 4 -let UndefinedPattern as :? e = 5 -let DefinedPattern () as :? f = 6 -let DefinedPattern as :? g = 7 -let h, as :? i = 8 -let j : _ as :? k = 9 -let l :: as :? m = 10 -let n & as :? o = 11 -let p | as :? q = 12 -let r struct as :? s = 13 -let t ( as :? u = 14 -let v [ as :? w = 15 -let () as :? x = y -let as :? z = -""" - dumpErrors checkResults |> shouldEqual [ - "(10,7--10,9): Unexpected keyword 'as' in binding" - "(11,10--11,12): Unexpected keyword 'as' in binding. Expected '=' or other token." - "(12,9--12,11): Unexpected keyword 'as' in binding" - "(13,8--13,10): Unexpected keyword 'as' in binding" - "(14,8--14,10): Unexpected keyword 'as' in binding" - "(15,13--15,15): Unexpected keyword 'as' in pattern. Expected '(' or other token." - "(16,8--16,10): Unexpected keyword 'as' in pattern. Expected ')' or other token." - "(16,6--16,7): Unmatched '('" - "(17,0--17,3): Possible incorrect indentation: this token is offside of context started at position (16:7). Try indenting this token further or using standard formatting conventions." - "(17,0--17,3): Unexpected keyword 'let' or 'use' in binding. Expected incomplete structured construct at or before this point or other token." - "(16,0--16,3): Incomplete value or function definition. If this is in an expression, the body of the expression must be indented to the same column as the 'let' keyword." - "(17,8--17,10): Unexpected keyword 'as' in pattern. Expected ']' or other token." - "(18,0--18,3): Possible incorrect indentation: this token is offside of context started at position (17:7). Try indenting this token further or using standard formatting conventions." - "(19,0--19,3): Possible incorrect indentation: this token is offside of context started at position (18:1). Try indenting this token further or using standard formatting conventions." - "(20,0--20,0): Possible incorrect indentation: this token is offside of context started at position (19:1). Try indenting this token further or using standard formatting conventions." - "(20,0--20,0): Possible incorrect indentation: this token is offside of context started at position (19:1). Try indenting this token further or using standard formatting conventions." - "(3,12--3,13): The type 'a' is not defined." - "(3,9--3,13): The type 'int' does not have any proper subtypes and cannot be used as the source of a type test or runtime coercion." - "(4,15--4,16): The type 'b' is not defined." - "(4,12--4,16): The type 'bool' does not have any proper subtypes and cannot be used as the source of a type test or runtime coercion." - "(5,4--5,10): This runtime coercion or type test from type 'a to int involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." - "(6,4--6,10): This runtime coercion or type test from type 'a to int involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." - "(7,27--7,28): The type 'e' is not defined." - "(7,24--7,28): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." - "(8,28--8,29): The type 'f' is not defined." - "(8,25--8,29): The type 'unit' does not have any proper subtypes and cannot be used as the source of a type test or runtime coercion." - "(9,25--9,26): The type 'g' is not defined." - "(9,22--9,26): The type 'unit' does not have any proper subtypes and cannot be used as the source of a type test or runtime coercion." - "(16,4--16,5): The pattern discriminator 't' is not defined." - "(16,14--16,15): The type 'u' is not defined." - "(16,11--16,15): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." - ] - -[] -#if !NETCOREAPP -[] -#endif -let ``As 19 - syntactical precedence matrix testing - valid syntactic patterns that cause type errors later`` () = - let _, checkResults = getParseAndCheckResultsPreview """ -type I() = inherit System.Attribute() -type M() = inherit I() -let 'a'..'b' as c = 'd' -let e as 'f'..'g' = 'h' -let [] j as k = 1 -let l as [] n = 2 -let <@ o @> as p = 3 -let q as <@ r @> = 4 -let <@@ s @@> as t = 5 -let u as <@@ v @@> = 6 -let ?w as x = 7 -let y as ?z = 8 -() -""" - dumpErrors checkResults |> shouldEqual [ - "(7,9--7,11): Unexpected symbol '[<' in binding" - "(4,4--4,12): This construct is deprecated: Character range matches have been removed in F#. Consider using a 'when' pattern guard instead." - "(4,4--4,17): Incomplete pattern matches on this expression. For example, the value '' '' may indicate a case not covered by the pattern(s)." - "(5,9--5,17): This construct is deprecated: Character range matches have been removed in F#. Consider using a 'when' pattern guard instead." - "(5,4--5,17): Incomplete pattern matches on this expression. For example, the value '' '' may indicate a case not covered by the pattern(s)." - "(8,4--8,11): This is not a valid pattern" - "(8,4--8,16): Incomplete pattern matches on this expression." - "(9,9--9,16): This is not a valid pattern" - "(9,4--9,16): Incomplete pattern matches on this expression." - "(10,4--10,13): This is not a valid pattern" - "(10,4--10,18): Incomplete pattern matches on this expression." - "(11,9--11,18): This is not a valid pattern" - "(11,4--11,18): Incomplete pattern matches on this expression." - "(12,4--12,6): Optional arguments are only permitted on type members" - "(13,9--13,11): Optional arguments are only permitted on type members" - ] - -[] -#if !NETCOREAPP -[] -#endif -let ``As 20 - limit the right of 'as' patterns to only variable patterns in F# 5`` () = - let _, checkResults = getParseAndCheckResults """ -let f : obj -> _ = - function - | :? int as i -> i - | :? uint as _ -> 0 - | a as :? int64 -> -1 -() -""" - assertHasSymbolUsages ["i"] checkResults - dumpErrors checkResults |> shouldEqual [ - "(5,6--5,18): Feature 'non-variable patterns to the right of 'as' patterns' is not available in F# 5.0. Please use language version 'preview' or greater." - ] \ No newline at end of file diff --git a/tests/service/PerfTests.fs b/tests/service/PerfTests.fs index b947555dbb6..ffffa412a36 100644 --- a/tests/service/PerfTests.fs +++ b/tests/service/PerfTests.fs @@ -11,23 +11,23 @@ module FSharp.Compiler.Service.Tests.PerfTests open NUnit.Framework open FsUnit open System.IO -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.IO -open FSharp.Compiler.Text + +open FSharp.Compiler.SourceCodeServices + open FSharp.Compiler.Service.Tests.Common -// Create an interactive checker instance +// Create an interactive checker instance let internal checker = FSharpChecker.Create() -module internal Project1 = +module internal Project1 = let fileNamesI = [ for i in 1 .. 10 -> (i, Path.ChangeExtension(Path.GetTempFileName(), ".fs")) ] let base2 = Path.GetTempFileName() let dllName = Path.ChangeExtension(base2, ".dll") let projFileName = Path.ChangeExtension(base2, ".fsproj") let fileSources = [ for (i,f) in fileNamesI -> (f, "module M" + string i) ] - for (f,text) in fileSources do FileSystem.OpenFileForWriteShim(f).Write(text) - let fileSources2 = [ for (i,f) in fileSources -> SourceText.ofString f ] + for (f,text) in fileSources do File.WriteAllText(f, text) + let fileSources2 = [ for (i,f) in fileSources -> FSharp.Compiler.Text.SourceText.ofString f ] let fileNames = [ for (_,f) in fileNamesI -> f ] let args = mkProjectCommandLineArgs (dllName, fileNames) @@ -36,21 +36,20 @@ module internal Project1 = [] -[] -let ``Test request for parse and check doesn't check whole project`` () = +let ``Test request for parse and check doesn't check whole project`` () = printfn "starting test..." - let backgroundParseCount = ref 0 - let backgroundCheckCount = ref 0 + let backgroundParseCount = ref 0 + let backgroundCheckCount = ref 0 checker.FileChecked.Add (fun x -> incr backgroundCheckCount) checker.FileParsed.Add (fun x -> incr backgroundParseCount) checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() - let pB, tB = FSharpChecker.ActualParseFileCount, FSharpChecker.ActualCheckFileCount + let pB, tB = FSharpChecker.GlobalForegroundParseCountStatistic, FSharpChecker.GlobalForegroundTypeCheckCountStatistic printfn "ParseFile()..." let parseResults1 = checker.ParseFile(Project1.fileNames.[5], Project1.fileSources2.[5], Project1.parsingOptions) |> Async.RunSynchronously - let pC, tC = FSharpChecker.ActualParseFileCount, FSharpChecker.ActualCheckFileCount + let pC, tC = FSharpChecker.GlobalForegroundParseCountStatistic, FSharpChecker.GlobalForegroundTypeCheckCountStatistic (pC - pB) |> shouldEqual 1 (tC - tB) |> shouldEqual 0 printfn "checking backgroundParseCount.Value = %d" backgroundParseCount.Value @@ -60,7 +59,7 @@ let ``Test request for parse and check doesn't check whole project`` () = printfn "CheckFileInProject()..." let checkResults1 = checker.CheckFileInProject(parseResults1, Project1.fileNames.[5], 0, Project1.fileSources2.[5], Project1.options) |> Async.RunSynchronously - let pD, tD = FSharpChecker.ActualParseFileCount, FSharpChecker.ActualCheckFileCount + let pD, tD = FSharpChecker.GlobalForegroundParseCountStatistic, FSharpChecker.GlobalForegroundTypeCheckCountStatistic printfn "checking background parsing happened...., backgroundParseCount.Value = %d" backgroundParseCount.Value (backgroundParseCount.Value >= 5) |> shouldEqual true // but note, the project does not get reparsed @@ -79,7 +78,7 @@ let ``Test request for parse and check doesn't check whole project`` () = printfn "CheckFileInProject()..." let checkResults2 = checker.CheckFileInProject(parseResults1, Project1.fileNames.[7], 0, Project1.fileSources2.[7], Project1.options) |> Async.RunSynchronously - let pE, tE = FSharpChecker.ActualParseFileCount, FSharpChecker.ActualCheckFileCount + let pE, tE = FSharpChecker.GlobalForegroundParseCountStatistic, FSharpChecker.GlobalForegroundTypeCheckCountStatistic printfn "checking no extra foreground parsing...., (pE - pD) = %d" (pE - pD) (pE - pD) |> shouldEqual 0 printfn "checking one foreground typecheck...., tE - tD = %d" (tE - tD) @@ -92,7 +91,7 @@ let ``Test request for parse and check doesn't check whole project`` () = printfn "ParseAndCheckFileInProject()..." // A subsequent ParseAndCheck of identical source code doesn't do any more anything let checkResults2 = checker.ParseAndCheckFileInProject(Project1.fileNames.[7], 0, Project1.fileSources2.[7], Project1.options) |> Async.RunSynchronously - let pF, tF = FSharpChecker.ActualParseFileCount, FSharpChecker.ActualCheckFileCount + let pF, tF = FSharpChecker.GlobalForegroundParseCountStatistic, FSharpChecker.GlobalForegroundTypeCheckCountStatistic printfn "checking no extra foreground parsing...." (pF - pE) |> shouldEqual 0 // note, no new parse of the file printfn "checking no extra foreground typechecks...." @@ -102,3 +101,4 @@ let ``Test request for parse and check doesn't check whole project`` () = printfn "checking no extra background typechecks...., backgroundCheckCount.Value = %d" backgroundCheckCount.Value (backgroundCheckCount.Value <= 10) |> shouldEqual true // only two extra typechecks of files () + diff --git a/tests/service/ProjectAnalysisTests.fs b/tests/service/ProjectAnalysisTests.fs index 4e6503797c6..09b360b66ee 100644 --- a/tests/service/ProjectAnalysisTests.fs +++ b/tests/service/ProjectAnalysisTests.fs @@ -13,16 +13,13 @@ open NUnit.Framework open FsUnit open System open System.IO -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.EditorServices -open FSharp.Compiler.IO -open FSharp.Compiler.Text + +open FSharp.Compiler +open FSharp.Compiler.SourceCodeServices + open FSharp.Compiler.Service.Tests.Common -open FSharp.Compiler.Symbols -open FSharp.Compiler.Symbols.FSharpExprPatterns -module internal Project1 = +module internal Project1 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -32,7 +29,7 @@ module internal Project1 = let fileSource1Text = """ module M -type C() = +type C() = member x.P = 1 let xxx = 3 + 4 @@ -40,25 +37,25 @@ let fff () = xxx + xxx type CAbbrev = C """ - let fileSource1 = SourceText.ofString fileSource1Text - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1Text) + let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text + File.WriteAllText(fileName1, fileSource1Text) let fileSource2Text = """ module N open M -type D1() = +type D1() = member x.SomeProperty = M.xxx -type D2() = +type D2() = member x.SomeProperty = M.fff() + D1().P // Generate a warning let y2 = match 1 with 1 -> M.xxx // A class with some 'let' bindings -type D3(a:int) = +type D3(a:int) = let b = a + 4 [] @@ -69,14 +66,14 @@ type D3(a:int) = let pair1,pair2 = (3 + 4 + int32 System.DateTime.Now.Ticks, 5 + 6) // Check enum values -type SaveOptions = +type SaveOptions = | None = 0 | DisableFormatting = 1 let enumValue = SaveOptions.DisableFormatting let (++) x y = x + y - + let c1 = 1 ++ 2 let c2 = 1 ++ 2 @@ -85,8 +82,8 @@ let mmmm1 : M.C = new M.C() // note, these don't count as uses of CA let mmmm2 : M.CAbbrev = new M.CAbbrev() // note, these don't count as uses of C """ - let fileSource2 = SourceText.ofString fileSource2Text - FileSystem.OpenFileForWriteShim(fileName2).Write(fileSource2Text) + let fileSource2 = FSharp.Compiler.Text.SourceText.ofString fileSource2Text + File.WriteAllText(fileName2, fileSource2Text) let fileNames = [fileName1; fileName2] let args = mkProjectCommandLineArgs (dllName, fileNames) @@ -95,20 +92,20 @@ let mmmm2 : M.CAbbrev = new M.CAbbrev() // note, these don't count as uses of C let cleanFileName a = if a = fileName1 then "file1" else if a = fileName2 then "file2" else "??" [] -let ``Test project1 whole project errors`` () = +let ``Test project1 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously - wholeProjectResults .Diagnostics.Length |> shouldEqual 2 - wholeProjectResults.Diagnostics.[1].Message.Contains("Incomplete pattern matches on this expression") |> shouldEqual true // yes it does - wholeProjectResults.Diagnostics.[1].ErrorNumber |> shouldEqual 25 + wholeProjectResults .Errors.Length |> shouldEqual 2 + wholeProjectResults.Errors.[1].Message.Contains("Incomplete pattern matches on this expression") |> shouldEqual true // yes it does + wholeProjectResults.Errors.[1].ErrorNumber |> shouldEqual 25 - wholeProjectResults.Diagnostics.[0].Range.StartLine |> shouldEqual 10 - wholeProjectResults.Diagnostics.[0].Range.EndLine |> shouldEqual 10 - wholeProjectResults.Diagnostics.[0].Range.StartColumn |> shouldEqual 43 - wholeProjectResults.Diagnostics.[0].Range.EndColumn |> shouldEqual 44 + wholeProjectResults.Errors.[0].Range.StartLine |> shouldEqual 10 + wholeProjectResults.Errors.[0].Range.EndLine |> shouldEqual 10 + wholeProjectResults.Errors.[0].Range.StartColumn |> shouldEqual 43 + wholeProjectResults.Errors.[0].Range.EndColumn |> shouldEqual 44 [] -let ``Test project1 and make sure TcImports gets cleaned up`` () = +let ``Test project1 and make sure TcImports gets cleaned up`` () = let test () = let (_, checkFileAnswer) = checker.ParseAndCheckFileInProject(Project1.fileName1, 0, Project1.fileSource1, Project1.options) |> Async.RunSynchronously @@ -120,8 +117,7 @@ let ``Test project1 and make sure TcImports gets cleaned up`` () = let weakTcImports = WeakReference tcImportsOpt.Value Assert.True weakTcImports.IsAlive weakTcImports - - // Here we are only keeping a handle to weakTcImports and nothing else + let weakTcImports = test () checker.InvalidateConfiguration (Project1.options) checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() @@ -131,7 +127,7 @@ let ``Test project1 and make sure TcImports gets cleaned up`` () = [] let ``Test Project1 should have protected FullName and TryFullName return same results`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously - let rec getFullNameComparisons (entity: FSharpEntity) = + let rec getFullNameComparisons (entity: FSharpEntity) = #if !NO_EXTENSIONTYPING seq { if not entity.IsProvided && entity.Accessibility.IsPublic then #else @@ -140,7 +136,7 @@ let ``Test Project1 should have protected FullName and TryFullName return same r yield (entity.TryFullName = try Some entity.FullName with _ -> None) for e in entity.NestedEntities do yield! getFullNameComparisons e } - + wholeProjectResults.ProjectContext.GetReferencedAssemblies() |> List.map (fun asm -> asm.Contents.Entities) |> Seq.collect (Seq.collect getFullNameComparisons) @@ -163,7 +159,7 @@ let ``Test project1 should not throw exceptions on entities from referenced asse Assert.DoesNotThrow(fun () -> Seq.iter (fun _ -> ()) allBaseTypes) [] -let ``Test project1 basic`` () = +let ``Test project1 basic`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously @@ -174,27 +170,27 @@ let ``Test project1 basic`` () = [ for x in wholeProjectResults.AssemblySignature.Entities.[1].NestedEntities -> x.DisplayName ] |> shouldEqual ["C"; "CAbbrev"] - set [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] + set [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] |> shouldEqual (set ["y2"; "pair2"; "pair1"; "( ++ )"; "c1"; "c2"; "mmmm1"; "mmmm2"; "enumValue" ]) [] -let ``Test project1 all symbols`` () = +let ``Test project1 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously let allSymbols = allSymbolsInEntities true wholeProjectResults.AssemblySignature.Entities - for s in allSymbols do + for s in allSymbols do s.DeclarationLocation.IsSome |> shouldEqual true - for s in allSymbols do - match s with - | :? FSharpMemberOrFunctionOrValue as v when v.IsModuleValueOrMember -> + for s in allSymbols do + match s with + | :? FSharpMemberOrFunctionOrValue as v when v.IsModuleValueOrMember -> s.IsAccessible(wholeProjectResults.ProjectContext.AccessibilityRights) |> shouldEqual true - | :? FSharpEntity -> + | :? FSharpEntity -> s.IsAccessible(wholeProjectResults.ProjectContext.AccessibilityRights) |> shouldEqual true | _ -> () - let allDeclarationLocations = - [ for s in allSymbols do + let allDeclarationLocations = + [ for s in allSymbols do let m = s.DeclarationLocation.Value yield s.ToString(), Project1.cleanFileName m.FileName, (m.StartLine, m.StartColumn), (m.EndLine, m.EndColumn ), attribsOfSymbol s ] @@ -241,11 +237,11 @@ let ``Test project1 all symbols`` () = ("CAbbrev", "file1", (10, 5), (10, 12), ["abbrev"]); ("property P", "file1", (5, 13), (5, 14), ["member"; "prop"])] - for s in allSymbols do + for s in allSymbols do s.ImplementationLocation.IsSome |> shouldEqual true - let allImplementationLocations = - [ for s in allSymbols do + let allImplementationLocations = + [ for s in allSymbols do let m = s.ImplementationLocation.Value yield s.ToString(), Project1.cleanFileName m.FileName, (m.StartLine, m.StartColumn), (m.EndLine, m.EndColumn ), attribsOfSymbol s ] @@ -292,8 +288,8 @@ let ``Test project1 all symbols`` () = ("CAbbrev", "file1", (10, 5), (10, 12), ["abbrev"]); ("property P", "file1", (5, 13), (5, 14), ["member"; "prop"])] - [ for x in allSymbols -> x.ToString() ] - |> shouldEqual + [ for x in allSymbols -> x.ToString() ] + |> shouldEqual ["N"; "val y2"; "val pair2"; "val pair1"; "val enumValue"; "val op_PlusPlus"; "val c1"; "val c2"; "val mmmm1"; "val mmmm2"; "D1"; "member .ctor"; "member get_SomeProperty"; "property SomeProperty"; "D2"; "member .ctor"; @@ -304,12 +300,12 @@ let ``Test project1 all symbols`` () = "member get_P"; "property P"; "CAbbrev"; "property P"] [] -let ``Test project1 all symbols excluding compiler generated`` () = +let ``Test project1 all symbols excluding compiler generated`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously let allSymbolsNoCompGen = allSymbolsInEntities false wholeProjectResults.AssemblySignature.Entities - [ for x in allSymbolsNoCompGen -> x.ToString() ] - |> shouldEqual + [ for x in allSymbolsNoCompGen -> x.ToString() ] + |> shouldEqual ["N"; "val y2"; "val pair2"; "val pair1"; "val enumValue"; "val op_PlusPlus"; "val c1"; "val c2"; "val mmmm1"; "val mmmm2"; "D1"; "member .ctor"; "member get_SomeProperty"; "property SomeProperty"; "D2"; "member .ctor"; @@ -320,12 +316,12 @@ let ``Test project1 all symbols excluding compiler generated`` () = "property P"] [] -let ``Test project1 xxx symbols`` () = +let ``Test project1 xxx symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project1.fileName1, Project1.options) + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project1.fileName1, Project1.options) |> Async.RunSynchronously let xSymbolUseOpt = backgroundTypedParse1.GetSymbolUseAtLocation(9,9,"",["xxx"]) @@ -333,9 +329,9 @@ let ``Test project1 xxx symbols`` () = let xSymbol = xSymbolUse.Symbol xSymbol.ToString() |> shouldEqual "val xxx" - let usesOfXSymbol = + let usesOfXSymbol = [ for su in wholeProjectResults.GetUsesOfSymbol(xSymbol) do - yield Project1.cleanFileName su.FileName , tups su.Range, attribsOfSymbol su.Symbol ] + yield Project1.cleanFileName su.FileName , tups su.RangeAlternate, attribsOfSymbol su.Symbol ] usesOfXSymbol |> shouldEqual [("file1", ((7, 4), (7, 7)), ["val"]); @@ -345,16 +341,16 @@ let ``Test project1 xxx symbols`` () = ("file2", ((13, 27), (13, 32)), ["val"])] [] -let ``Test project1 all uses of all signature symbols`` () = +let ``Test project1 all uses of all signature symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously let allSymbols = allSymbolsInEntities true wholeProjectResults.AssemblySignature.Entities - let allUsesOfAllSymbols = - [ for s in allSymbols do - yield s.ToString(), - [ for s in wholeProjectResults.GetUsesOfSymbol(s) -> - (Project1.cleanFileName s.FileName, tupsZ s.Range) ] ] - let expected = + let allUsesOfAllSymbols = + [ for s in allSymbols do + yield s.ToString(), + [ for s in wholeProjectResults.GetUsesOfSymbol(s) -> + (Project1.cleanFileName s.FileName, tupsZ s.RangeAlternate) ] ] + let expected = [("N", [("file2", ((1, 7), (1, 8)))]); ("val y2", [("file2", ((12, 4), (12, 6)))]); ("val pair2", [("file2", ((23, 10), (23, 15)))]); @@ -413,13 +409,13 @@ let ``Test project1 all uses of all signature symbols`` () = (set expected = set allUsesOfAllSymbols) |> shouldEqual true [] -let ``Test project1 all uses of all symbols`` () = +let ``Test project1 all uses of all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = - [ for s in wholeProjectResults.GetAllUsesOfAllSymbols() -> - s.Symbol.DisplayName, s.Symbol.FullName, Project1.cleanFileName s.FileName, tupsZ s.Range, attribsOfSymbol s.Symbol ] - let expected = + let allUsesOfAllSymbols = + [ for s in wholeProjectResults.GetAllUsesOfAllSymbols() -> + s.Symbol.DisplayName, s.Symbol.FullName, Project1.cleanFileName s.FileName, tupsZ s.RangeAlternate, attribsOfSymbol s.Symbol ] + let expected = [("C", "M.C", "file1", ((3, 5), (3, 6)), ["class"]); ("( .ctor )", "M.C.( .ctor )", "file1", ((3, 5), (3, 6)), ["member"; "ctor"]); @@ -551,33 +547,33 @@ let ``Test project1 all uses of all symbols`` () = #if !NO_EXTENSIONTYPING [] -let ``Test file explicit parse symbols`` () = +let ``Test file explicit parse symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously let parseResults1 = checker.ParseFile(Project1.fileName1, Project1.fileSource1, Project1.parsingOptions) |> Async.RunSynchronously let parseResults2 = checker.ParseFile(Project1.fileName2, Project1.fileSource2, Project1.parsingOptions) |> Async.RunSynchronously - let checkResults1 = - checker.CheckFileInProject(parseResults1, Project1.fileName1, 0, Project1.fileSource1, Project1.options) + let checkResults1 = + checker.CheckFileInProject(parseResults1, Project1.fileName1, 0, Project1.fileSource1, Project1.options) |> Async.RunSynchronously |> function FSharpCheckFileAnswer.Succeeded x -> x | _ -> failwith "unexpected aborted" - let checkResults2 = + let checkResults2 = checker.CheckFileInProject(parseResults2, Project1.fileName2, 0, Project1.fileSource2, Project1.options) |> Async.RunSynchronously |> function FSharpCheckFileAnswer.Succeeded x -> x | _ -> failwith "unexpected aborted" let xSymbolUse2Opt = checkResults1.GetSymbolUseAtLocation(9,9,"",["xxx"]) let xSymbol2 = xSymbolUse2Opt.Value.Symbol - let usesOfXSymbol2 = - [| for s in wholeProjectResults.GetUsesOfSymbol(xSymbol2) -> (Project1.cleanFileName s.FileName, tupsZ s.Range) |] + let usesOfXSymbol2 = + [| for s in wholeProjectResults.GetUsesOfSymbol(xSymbol2) -> (Project1.cleanFileName s.FileName, tupsZ s.RangeAlternate) |] - let usesOfXSymbol21 = - [| for s in checkResults1.GetUsesOfSymbolInFile(xSymbol2) -> (Project1.cleanFileName s.FileName, tupsZ s.Range) |] + let usesOfXSymbol21 = + [| for s in checkResults1.GetUsesOfSymbolInFile(xSymbol2) -> (Project1.cleanFileName s.FileName, tupsZ s.RangeAlternate) |] - let usesOfXSymbol22 = - [| for s in checkResults2.GetUsesOfSymbolInFile(xSymbol2) -> (Project1.cleanFileName s.FileName, tupsZ s.Range) |] + let usesOfXSymbol22 = + [| for s in checkResults2.GetUsesOfSymbolInFile(xSymbol2) -> (Project1.cleanFileName s.FileName, tupsZ s.RangeAlternate) |] usesOfXSymbol2 |> shouldEqual [|("file1", ((6, 4), (6, 7))); @@ -597,29 +593,29 @@ let ``Test file explicit parse symbols`` () = [] -let ``Test file explicit parse all symbols`` () = +let ``Test file explicit parse all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously let parseResults1 = checker.ParseFile(Project1.fileName1, Project1.fileSource1, Project1.parsingOptions) |> Async.RunSynchronously let parseResults2 = checker.ParseFile(Project1.fileName2, Project1.fileSource2, Project1.parsingOptions) |> Async.RunSynchronously - let checkResults1 = - checker.CheckFileInProject(parseResults1, Project1.fileName1, 0, Project1.fileSource1, Project1.options) + let checkResults1 = + checker.CheckFileInProject(parseResults1, Project1.fileName1, 0, Project1.fileSource1, Project1.options) |> Async.RunSynchronously |> function FSharpCheckFileAnswer.Succeeded x -> x | _ -> failwith "unexpected aborted" - let checkResults2 = + let checkResults2 = checker.CheckFileInProject(parseResults2, Project1.fileName2, 0, Project1.fileSource2, Project1.options) |> Async.RunSynchronously |> function FSharpCheckFileAnswer.Succeeded x -> x | _ -> failwith "unexpected aborted" let usesOfSymbols = checkResults1.GetAllUsesOfAllSymbolsInFile() - let cleanedUsesOfSymbols = - [ for s in usesOfSymbols -> s.Symbol.DisplayName, Project1.cleanFileName s.FileName, tupsZ s.Range, attribsOfSymbol s.Symbol ] + let cleanedUsesOfSymbols = + [ for s in usesOfSymbols -> s.Symbol.DisplayName, Project1.cleanFileName s.FileName, tupsZ s.RangeAlternate, attribsOfSymbol s.Symbol ] - cleanedUsesOfSymbols - |> shouldEqual + cleanedUsesOfSymbols + |> shouldEqual [("C", "file1", ((3, 5), (3, 6)), ["class"]); ("( .ctor )", "file1", ((3, 5), (3, 6)), ["member"; "ctor"]); ("P", "file1", ((4, 13), (4, 14)), ["member"; "getter"]); @@ -640,7 +636,7 @@ let ``Test file explicit parse all symbols`` () = //----------------------------------------------------------------------------------------- -module internal Project2 = +module internal Project2 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -649,7 +645,7 @@ module internal Project2 = let fileSource1 = """ module M -type DUWithNormalFields = +type DUWithNormalFields = | DU1 of int * int | DU2 of int * int | D of int * int @@ -662,7 +658,7 @@ type DUWithNamedFields = DU of x : int * y : int let _ = DU(x=1, y=2) -type GenericClass<'T>() = +type GenericClass<'T>() = member x.GenericMethod<'U>(t: 'T, u: 'U) = 1 let c = GenericClass() @@ -672,7 +668,7 @@ let GenericFunction (x:'T, y: 'T) = (x,y) : ('T * 'T) let _ = GenericFunction(3, 4) """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) @@ -682,14 +678,14 @@ let _ = GenericFunction(3, 4) [] -let ``Test project2 whole project errors`` () = +let ``Test project2 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project2.options) |> Async.RunSynchronously - wholeProjectResults .Diagnostics.Length |> shouldEqual 0 + wholeProjectResults .Errors.Length |> shouldEqual 0 [] -let ``Test project2 basic`` () = +let ``Test project2 basic`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project2.options) |> Async.RunSynchronously @@ -698,16 +694,16 @@ let ``Test project2 basic`` () = [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] |> shouldEqual ["DUWithNormalFields"; "DUWithNamedFields"; "GenericClass" ] - set [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] + set [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] |> shouldEqual (set ["c"; "GenericFunction"]) [] -let ``Test project2 all symbols in signature`` () = +let ``Test project2 all symbols in signature`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project2.options) |> Async.RunSynchronously let allSymbols = allSymbolsInEntities true wholeProjectResults.AssemblySignature.Entities - [ for x in allSymbols -> x.ToString() ] - |> shouldEqual + [ for x in allSymbols -> x.ToString() ] + |> shouldEqual ["M"; "val c"; "val GenericFunction"; "generic parameter T"; "DUWithNormalFields"; "DU1"; "field Item1"; "field Item2"; "DU2"; "field Item1"; "field Item2"; "D"; "field Item1"; "field Item2"; @@ -716,14 +712,14 @@ let ``Test project2 all symbols in signature`` () = "generic parameter U"] [] -let ``Test project2 all uses of all signature symbols`` () = +let ``Test project2 all uses of all signature symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project2.options) |> Async.RunSynchronously let allSymbols = allSymbolsInEntities true wholeProjectResults.AssemblySignature.Entities - let allUsesOfAllSymbols = - [ for s in allSymbols do - let uses = [ for s in wholeProjectResults.GetUsesOfSymbol(s) -> (if s.FileName = Project2.fileName1 then "file1" else "??"), tupsZ s.Range ] + let allUsesOfAllSymbols = + [ for s in allSymbols do + let uses = [ for s in wholeProjectResults.GetUsesOfSymbol(s) -> (if s.FileName = Project2.fileName1 then "file1" else "??"), tupsZ s.RangeAlternate ] yield s.ToString(), uses ] - let expected = + let expected = [("M", [("file1", ((1, 7), (1, 8)))]); ("val c", [("file1", ((19, 4), (19, 5))); ("file1", ((20, 8), (20, 9)))]); ("val GenericFunction", @@ -755,13 +751,13 @@ let ``Test project2 all uses of all signature symbols`` () = (set expected = set allUsesOfAllSymbols) |> shouldEqual true [] -let ``Test project2 all uses of all symbols`` () = +let ``Test project2 all uses of all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project2.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = - [ for s in wholeProjectResults.GetAllUsesOfAllSymbols() -> - s.Symbol.DisplayName, (if s.FileName = Project2.fileName1 then "file1" else "???"), tupsZ s.Range, attribsOfSymbol s.Symbol ] - let expected = + let allUsesOfAllSymbols = + [ for s in wholeProjectResults.GetAllUsesOfAllSymbols() -> + s.Symbol.DisplayName, (if s.FileName = Project2.fileName1 then "file1" else "???"), tupsZ s.RangeAlternate, attribsOfSymbol s.Symbol ] + let expected = [("int", "file1", ((4, 13), (4, 16)), ["abbrev"]); ("int", "file1", ((4, 19), (4, 22)), ["abbrev"]); ("int", "file1", ((5, 13), (5, 16)), ["abbrev"]); @@ -827,7 +823,7 @@ let ``Test project2 all uses of all symbols`` () = //----------------------------------------------------------------------------------------- -module internal Project3 = +module internal Project3 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -914,7 +910,7 @@ let setP (foo: IFoo) v = foo.InterfacePropertySet <- v let getE (foo: IFoo) = foo.InterfaceEvent let getM (foo: IFoo) = foo.InterfaceMethod("d") """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) @@ -924,39 +920,39 @@ let getM (foo: IFoo) = foo.InterfaceMethod("d") [] -let ``Test project3 whole project errors`` () = +let ``Test project3 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project3.options) |> Async.RunSynchronously - wholeProjectResults .Diagnostics.Length |> shouldEqual 0 + wholeProjectResults .Errors.Length |> shouldEqual 0 [] -let ``Test project3 basic`` () = +let ``Test project3 basic`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project3.options) |> Async.RunSynchronously set [ for x in wholeProjectResults.AssemblySignature.Entities -> x.DisplayName ] |> shouldEqual (set ["M"]) - [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] + [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] |> shouldEqual ["IFoo"; "CFoo"; "CBaseFoo"; "IFooImpl"; "CFooImpl"; "CBaseFooImpl"] - [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] + [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] |> shouldEqual ["IFooImplObjectExpression"; "CFooImplObjectExpression"; "getP"; "setP"; "getE";"getM"] [] -let ``Test project3 all symbols in signature`` () = +let ``Test project3 all symbols in signature`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project3.options) |> Async.RunSynchronously let allSymbols = allSymbolsInEntities false wholeProjectResults.AssemblySignature.Entities - let results = [ for x in allSymbols -> x.ToString(), attribsOfSymbol x ] - [("M", ["module"]); + let results = [ for x in allSymbols -> x.ToString(), attribsOfSymbol x ] + [("M", ["module"]); ("val IFooImplObjectExpression", ["val"]); - ("val CFooImplObjectExpression", ["val"]); + ("val CFooImplObjectExpression", ["val"]); ("val getP", ["val"]); - ("val setP", ["val"]); ("val getE", ["val"]); + ("val setP", ["val"]); ("val getE", ["val"]); ("val getM", ["val"]); - ("IFoo", ["interface"]); + ("IFoo", ["interface"]); ("member InterfaceMethod", ["slot"; "member"]); ("member add_InterfaceEvent", ["slot"; "member"; "add"]); ("member get_InterfaceEvent", ["slot"; "member"; "getter"]); @@ -965,7 +961,7 @@ let ``Test project3 all symbols in signature`` () = ("member set_InterfacePropertySet", ["slot"; "member"; "setter"]); ("property InterfacePropertySet", ["slot"; "member"; "prop"]); ("property InterfaceProperty", ["slot"; "member"; "prop"]); - ("property InterfaceEvent", ["slot"; "member"; "prop"; "clievent"]); + ("property InterfaceEvent", ["slot"; "member"; "prop"; "clievent"]); ("CFoo", ["class"]); ("member .ctor", ["member"; "ctor"]); ("member AbstractClassMethod", ["slot"; "member"]); @@ -1029,18 +1025,18 @@ let ``Test project3 all symbols in signature`` () = ) [] -let ``Test project3 all uses of all signature symbols`` () = +let ``Test project3 all uses of all signature symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project3.options) |> Async.RunSynchronously let allSymbols = allSymbolsInEntities false wholeProjectResults.AssemblySignature.Entities - let allUsesOfAllSymbols = - [ for s in allSymbols do - let uses = [ for s in wholeProjectResults.GetUsesOfSymbol(s) -> - ((if s.FileName = Project3.fileName1 then "file1" else "??"), - tupsZ s.Range, attribsOfSymbolUse s, attribsOfSymbol s.Symbol) ] + let allUsesOfAllSymbols = + [ for s in allSymbols do + let uses = [ for s in wholeProjectResults.GetUsesOfSymbol(s) -> + ((if s.FileName = Project3.fileName1 then "file1" else "??"), + tupsZ s.RangeAlternate, attribsOfSymbolUse s, attribsOfSymbol s.Symbol) ] yield s.ToString(), uses ] - let expected = + let expected = [("M", [("file1", ((1, 7), (1, 8)), ["defn"], ["module"])]); ("val IFooImplObjectExpression", [("file1", ((58, 4), (58, 28)), ["defn"], ["val"])]); @@ -1270,7 +1266,7 @@ let ``Test project3 all uses of all signature symbols`` () = //----------------------------------------------------------------------------------------- -module internal Project4 = +module internal Project4 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -1283,7 +1279,7 @@ type Foo<'T>(x : 'T, y : Foo<'T>) = class end let inline twice(x : ^U, y : ^U) = x + y """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) @@ -1293,43 +1289,43 @@ let inline twice(x : ^U, y : ^U) = x + y [] -let ``Test project4 whole project errors`` () = +let ``Test project4 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project4.options) |> Async.RunSynchronously - wholeProjectResults .Diagnostics.Length |> shouldEqual 0 + wholeProjectResults .Errors.Length |> shouldEqual 0 [] -let ``Test project4 basic`` () = +let ``Test project4 basic`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project4.options) |> Async.RunSynchronously set [ for x in wholeProjectResults.AssemblySignature.Entities -> x.DisplayName ] |> shouldEqual (set ["M"]) - [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] + [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] |> shouldEqual ["Foo"] - [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] + [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] |> shouldEqual ["twice"] [] -let ``Test project4 all symbols in signature`` () = +let ``Test project4 all symbols in signature`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project4.options) |> Async.RunSynchronously let allSymbols = allSymbolsInEntities false wholeProjectResults.AssemblySignature.Entities - [ for x in allSymbols -> x.ToString() ] - |> shouldEqual + [ for x in allSymbols -> x.ToString() ] + |> shouldEqual ["M"; "val twice"; "generic parameter U"; "Foo`1"; "generic parameter T"; "member .ctor"] [] -let ``Test project4 all uses of all signature symbols`` () = +let ``Test project4 all uses of all signature symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project4.options) |> Async.RunSynchronously let allSymbols = allSymbolsInEntities false wholeProjectResults.AssemblySignature.Entities - let allUsesOfAllSymbols = - [ for s in allSymbols do - let uses = [ for s in wholeProjectResults.GetUsesOfSymbol(s) -> (if s.FileName = Project4.fileName1 then "file1" else "??"), tupsZ s.Range ] + let allUsesOfAllSymbols = + [ for s in allSymbols do + let uses = [ for s in wholeProjectResults.GetUsesOfSymbol(s) -> (if s.FileName = Project4.fileName1 then "file1" else "??"), tupsZ s.RangeAlternate ] yield s.ToString(), uses ] - let expected = + let expected = [("M", [("file1", ((1, 7), (1, 8)))]); ("val twice", [("file1", ((5, 11), (5, 16)))]); ("generic parameter U", @@ -1340,29 +1336,29 @@ let ``Test project4 all uses of all signature symbols`` () = ("file1", ((3, 29), (3, 31)))]); ("member .ctor", [("file1", ((3, 5), (3, 8))); ("file1", ((3, 25), (3, 28)))])] - + set allUsesOfAllSymbols - set expected |> shouldEqual Set.empty set expected - set allUsesOfAllSymbols |> shouldEqual Set.empty (set expected = set allUsesOfAllSymbols) |> shouldEqual true [] -let ``Test project4 T symbols`` () = +let ``Test project4 T symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project4.options) |> Async.RunSynchronously - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project4.fileName1, Project4.options) + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project4.fileName1, Project4.options) |> Async.RunSynchronously let tSymbolUse2 = backgroundTypedParse1.GetSymbolUseAtLocation(4,19,"",["T"]) tSymbolUse2.IsSome |> shouldEqual true - let tSymbol2 = tSymbolUse2.Value.Symbol + let tSymbol2 = tSymbolUse2.Value.Symbol tSymbol2.ToString() |> shouldEqual "generic parameter T" tSymbol2.ImplementationLocation.IsSome |> shouldEqual true let uses = backgroundTypedParse1.GetAllUsesOfAllSymbolsInFile() - let allUsesOfAllSymbols = - [ for s in uses -> s.Symbol.ToString(), (if s.FileName = Project4.fileName1 then "file1" else "??"), tupsZ s.Range ] + let allUsesOfAllSymbols = + [ for s in uses -> s.Symbol.ToString(), (if s.FileName = Project4.fileName1 then "file1" else "??"), tupsZ s.RangeAlternate ] allUsesOfAllSymbols |> shouldEqual [("generic parameter T", "file1", ((3, 9), (3, 11))); ("Foo`1", "file1", ((3, 5), (3, 8))); @@ -1389,19 +1385,19 @@ let ``Test project4 T symbols`` () = tSymbol3.ImplementationLocation.IsSome |> shouldEqual true - let usesOfTSymbol2 = + let usesOfTSymbol2 = wholeProjectResults.GetUsesOfSymbol(tSymbol2) - |> Array.map (fun su -> su.FileName , tupsZ su.Range) + |> Array.map (fun su -> su.FileName , tupsZ su.RangeAlternate) |> Array.map (fun (a,b) -> (if a = Project4.fileName1 then "file1" else "??"), b) - usesOfTSymbol2 |> shouldEqual + usesOfTSymbol2 |> shouldEqual [|("file1", ((3, 9), (3, 11))); ("file1", ((3, 17), (3, 19))); ("file1", ((3, 29), (3, 31)))|] - let usesOfTSymbol3 = - wholeProjectResults.GetUsesOfSymbol(tSymbol3) - - |> Array.map (fun su -> su.FileName , tupsZ su.Range) + let usesOfTSymbol3 = + wholeProjectResults.GetUsesOfSymbol(tSymbol3) + + |> Array.map (fun su -> su.FileName , tupsZ su.RangeAlternate) |> Array.map (fun (a,b) -> (if a = Project4.fileName1 then "file1" else "??"), b) usesOfTSymbol3 |> shouldEqual usesOfTSymbol2 @@ -1413,10 +1409,10 @@ let ``Test project4 T symbols`` () = uSymbol2.ImplementationLocation.IsSome |> shouldEqual true - let usesOfUSymbol2 = - wholeProjectResults.GetUsesOfSymbol(uSymbol2) - - |> Array.map (fun su -> su.FileName , tupsZ su.Range) + let usesOfUSymbol2 = + wholeProjectResults.GetUsesOfSymbol(uSymbol2) + + |> Array.map (fun su -> su.FileName , tupsZ su.RangeAlternate) |> Array.map (fun (a,b) -> (if a = Project4.fileName1 then "file1" else "??"), b) usesOfUSymbol2 |> shouldEqual [|("file1", ((5, 21), (5, 23))); ("file1", ((5, 29), (5, 31)))|] @@ -1424,7 +1420,7 @@ let ``Test project4 T symbols`` () = //----------------------------------------------------------------------------------------- -module internal Project5 = +module internal Project5 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") @@ -1432,7 +1428,7 @@ module internal Project5 = let dllName = Path.ChangeExtension(base2, ".dll") let projFileName = Path.ChangeExtension(base2, ".fsproj") let fileSource1 = """ -module ActivePatterns +module ActivePatterns ///Total active pattern for even/odd integers let (|Even|Odd|) input = if input % 2 = 0 then Even else Odd @@ -1455,7 +1451,7 @@ let parseNumeric str = | Float f -> printfn "%f : Floating point" f | _ -> printfn "%s : Not matched." str """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -1465,12 +1461,12 @@ let parseNumeric str = [] -let ``Test project5 whole project errors`` () = +let ``Test project5 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project5.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project5 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] @@ -1478,10 +1474,10 @@ let ``Test project 5 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project5.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.FullName, Project5.cleanFileName su.FileName, tupsZ su.Range, attribsOfSymbolUse su) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.FullName, Project5.cleanFileName su.FileName, tupsZ su.RangeAlternate, attribsOfSymbolUse su) allUsesOfAllSymbols |> shouldEqual [|("symbol ", "Even", "file1", ((4, 6), (4, 10)), ["defn"]); @@ -1544,23 +1540,19 @@ let ``Test project 5 all symbols`` () = let ``Test complete active patterns' exact ranges from uses of symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project5.options) |> Async.RunSynchronously - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project5.fileName1, Project5.options) + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project5.fileName1, Project5.options) |> Async.RunSynchronously let oddSymbolUse = backgroundTypedParse1.GetSymbolUseAtLocation(11,8,"",["Odd"]) - oddSymbolUse.IsSome |> shouldEqual true + oddSymbolUse.IsSome |> shouldEqual true let oddSymbol = oddSymbolUse.Value.Symbol oddSymbol.ToString() |> shouldEqual "symbol Odd" let oddActivePatternCase = oddSymbol :?> FSharpActivePatternCase - match oddActivePatternCase.XmlDoc with - | FSharpXmlDoc.FromXmlText t -> t.UnprocessedLines |> shouldEqual [| "Total active pattern for even/odd integers" |] - | _ -> failwith "wrong kind" - match oddActivePatternCase.XmlDoc with - | FSharpXmlDoc.FromXmlText t -> t.GetElaboratedXmlLines() |> shouldEqual [|""; "Total active pattern for even/odd integers"; "" |] - | _ -> failwith "wrong kind" - oddActivePatternCase.XmlDocSig |> shouldEqual "M:ActivePatterns.|Even|Odd|(System.Int32)" + oddActivePatternCase.XmlDoc |> Seq.toList |> shouldEqual ["Total active pattern for even/odd integers"] + oddActivePatternCase.ElaboratedXmlDoc |> Seq.toList |> shouldEqual [""; "Total active pattern for even/odd integers"; ""] + oddActivePatternCase.XmlDocSig |> shouldEqual "" let oddGroup = oddActivePatternCase.Group oddGroup.IsTotal |> shouldEqual true oddGroup.Names |> Seq.toList |> shouldEqual ["Even"; "Odd"] @@ -1569,16 +1561,13 @@ let ``Test complete active patterns' exact ranges from uses of symbols`` () = oddEntity.ToString() |> shouldEqual "ActivePatterns" let evenSymbolUse = backgroundTypedParse1.GetSymbolUseAtLocation(10,9,"",["Even"]) - evenSymbolUse.IsSome |> shouldEqual true + evenSymbolUse.IsSome |> shouldEqual true let evenSymbol = evenSymbolUse.Value.Symbol evenSymbol.ToString() |> shouldEqual "symbol Even" let evenActivePatternCase = evenSymbol :?> FSharpActivePatternCase - match evenActivePatternCase.XmlDoc with - | FSharpXmlDoc.FromXmlText t -> - t.UnprocessedLines |> shouldEqual [| "Total active pattern for even/odd integers" |] - t.GetElaboratedXmlLines() |> shouldEqual [| ""; "Total active pattern for even/odd integers"; "" |] - | _ -> failwith "wrong kind" - evenActivePatternCase.XmlDocSig |> shouldEqual "M:ActivePatterns.|Even|Odd|(System.Int32)" + evenActivePatternCase.XmlDoc |> Seq.toList |> shouldEqual ["Total active pattern for even/odd integers"] + evenActivePatternCase.ElaboratedXmlDoc |> Seq.toList |> shouldEqual [""; "Total active pattern for even/odd integers"; ""] + evenActivePatternCase.XmlDocSig |> shouldEqual "" let evenGroup = evenActivePatternCase.Group evenGroup.IsTotal |> shouldEqual true evenGroup.Names |> Seq.toList |> shouldEqual ["Even"; "Odd"] @@ -1586,22 +1575,22 @@ let ``Test complete active patterns' exact ranges from uses of symbols`` () = let evenEntity = evenGroup.DeclaringEntity.Value evenEntity.ToString() |> shouldEqual "ActivePatterns" - let usesOfEvenSymbol = - wholeProjectResults.GetUsesOfSymbol(evenSymbol) - - |> Array.map (fun su -> su.Symbol.ToString(), Project5.cleanFileName su.FileName, tupsZ su.Range) - - let usesOfOddSymbol = - wholeProjectResults.GetUsesOfSymbol(oddSymbol) + let usesOfEvenSymbol = + wholeProjectResults.GetUsesOfSymbol(evenSymbol) + + |> Array.map (fun su -> su.Symbol.ToString(), Project5.cleanFileName su.FileName, tupsZ su.RangeAlternate) - |> Array.map (fun su -> su.Symbol.ToString(), Project5.cleanFileName su.FileName, tupsZ su.Range) + let usesOfOddSymbol = + wholeProjectResults.GetUsesOfSymbol(oddSymbol) + + |> Array.map (fun su -> su.Symbol.ToString(), Project5.cleanFileName su.FileName, tupsZ su.RangeAlternate) - usesOfEvenSymbol |> shouldEqual + usesOfEvenSymbol |> shouldEqual [|("symbol Even", "file1", ((4, 6), (4, 10))); ("symbol Even", "file1", ((4, 47), (4, 51))); ("symbol Even", "file1", ((9, 5), (9, 9)))|] - usesOfOddSymbol |> shouldEqual + usesOfOddSymbol |> shouldEqual [|("symbol Odd", "file1", ((4, 11), (4, 14))); ("symbol Odd", "file1", ((4, 57), (4, 60))); ("symbol Odd", "file1", ((10, 5), (10, 8)))|] @@ -1611,22 +1600,19 @@ let ``Test complete active patterns' exact ranges from uses of symbols`` () = let ``Test partial active patterns' exact ranges from uses of symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project5.options) |> Async.RunSynchronously - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project5.fileName1, Project5.options) - |> Async.RunSynchronously + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project5.fileName1, Project5.options) + |> Async.RunSynchronously let floatSymbolUse = backgroundTypedParse1.GetSymbolUseAtLocation(22,10,"",["Float"]) - floatSymbolUse.IsSome |> shouldEqual true - let floatSymbol = floatSymbolUse.Value.Symbol + floatSymbolUse.IsSome |> shouldEqual true + let floatSymbol = floatSymbolUse.Value.Symbol floatSymbol.ToString() |> shouldEqual "symbol Float" let floatActivePatternCase = floatSymbol :?> FSharpActivePatternCase - match floatActivePatternCase.XmlDoc with - | FSharpXmlDoc.FromXmlText t -> - t.UnprocessedLines |> shouldEqual [| "Partial active pattern for floats" |] - t.GetElaboratedXmlLines() |> shouldEqual [| ""; "Partial active pattern for floats"; "" |] - | _ -> failwith "wrong kind" - floatActivePatternCase.XmlDocSig |> shouldEqual "M:ActivePatterns.|Float|_|(System.String)" + floatActivePatternCase.XmlDoc |> Seq.toList |> shouldEqual ["Partial active pattern for floats"] + floatActivePatternCase.ElaboratedXmlDoc |> Seq.toList |> shouldEqual [""; "Partial active pattern for floats"; ""] + floatActivePatternCase.XmlDocSig |> shouldEqual "" let floatGroup = floatActivePatternCase.Group floatGroup.IsTotal |> shouldEqual false floatGroup.Names |> Seq.toList |> shouldEqual ["Float"] @@ -1634,25 +1620,25 @@ let ``Test partial active patterns' exact ranges from uses of symbols`` () = let evenEntity = floatGroup.DeclaringEntity.Value evenEntity.ToString() |> shouldEqual "ActivePatterns" - let usesOfFloatSymbol = - wholeProjectResults.GetUsesOfSymbol(floatSymbol) - - |> Array.map (fun su -> su.Symbol.ToString(), Project5.cleanFileName su.FileName, tups su.Range) + let usesOfFloatSymbol = + wholeProjectResults.GetUsesOfSymbol(floatSymbol) + + |> Array.map (fun su -> su.Symbol.ToString(), Project5.cleanFileName su.FileName, tups su.RangeAlternate) - usesOfFloatSymbol |> shouldEqual + usesOfFloatSymbol |> shouldEqual [|("symbol Float", "file1", ((14, 6), (14, 11))); ("symbol Float", "file1", ((22, 5), (22, 10)))|] // Should also return its definition - let floatSymUseOpt = + let floatSymUseOpt = backgroundTypedParse1.GetSymbolUseAtLocation(14,11,"",["Float"]) - + floatSymUseOpt.IsSome |> shouldEqual true //----------------------------------------------------------------------------------------- -module internal Project6 = +module internal Project6 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -1666,7 +1652,7 @@ exception Fail of string let f () = raise (Fail "unknown") """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -1676,12 +1662,12 @@ let f () = [] -let ``Test project6 whole project errors`` () = +let ``Test project6 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project6.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project6 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] @@ -1689,10 +1675,10 @@ let ``Test project 6 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project6.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), Project6.cleanFileName su.FileName, tupsZ su.Range, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), Project6.cleanFileName su.FileName, tupsZ su.RangeAlternate, attribsOfSymbol su.Symbol) allUsesOfAllSymbols |> shouldEqual [|("string", "file1", ((3, 18), (3, 24)), ["abbrev"]); @@ -1705,7 +1691,7 @@ let ``Test project 6 all symbols`` () = //----------------------------------------------------------------------------------------- -module internal Project7 = +module internal Project7 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -1714,7 +1700,7 @@ module internal Project7 = let fileSource1 = """ module NamedArgs -type C() = +type C() = static member M(arg1: int, arg2: int, ?arg3 : int) = arg1 + arg2 + defaultArg arg3 4 let x1 = C.M(arg1 = 3, arg2 = 4, arg3 = 5) @@ -1722,7 +1708,7 @@ let x1 = C.M(arg1 = 3, arg2 = 4, arg3 = 5) let x2 = C.M(arg1 = 3, arg2 = 4, ?arg3 = Some 5) """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -1732,12 +1718,12 @@ let x2 = C.M(arg1 = 3, arg2 = 4, ?arg3 = Some 5) [] -let ``Test project7 whole project errors`` () = +let ``Test project7 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project7.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project7 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] @@ -1745,19 +1731,19 @@ let ``Test project 7 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project7.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = - wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project7.cleanFileName su.FileName, tups su.Range) - - let arg1symbol = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project7.cleanFileName su.FileName, tups su.RangeAlternate) + let arg1symbol = + wholeProjectResults.GetAllUsesOfAllSymbols() + |> Array.pick (fun x -> if x.Symbol.DisplayName = "arg1" then Some x.Symbol else None) - let arg1uses = - wholeProjectResults.GetUsesOfSymbol(arg1symbol) - - |> Array.map (fun su -> su.Symbol.ToString(), Option.map tups su.Symbol.DeclarationLocation, Project7.cleanFileName su.FileName, tups su.Range, attribsOfSymbol su.Symbol) + let arg1uses = + wholeProjectResults.GetUsesOfSymbol(arg1symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), Option.map tups su.Symbol.DeclarationLocation, Project7.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbol su.Symbol) arg1uses |> shouldEqual [|("val arg1", Some ((5, 20), (5, 24)), "file1", ((5, 20), (5, 24)), []); ("val arg1", Some ((5, 20), (5, 24)), "file1", ((5, 57), (5, 61)), []); @@ -1766,7 +1752,7 @@ let ``Test project 7 all symbols`` () = //----------------------------------------------------------------------------------------- -module internal Project8 = +module internal Project8 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -1778,12 +1764,12 @@ module NamedUnionFields type A = B of xxx: int * yyy : int let b = B(xxx=1, yyy=2) -let x = +let x = match b with // does not find usage here | B (xxx = a; yyy = b) -> () """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -1793,12 +1779,12 @@ let x = [] -let ``Test project8 whole project errors`` () = +let ``Test project8 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project8.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project8 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] @@ -1806,12 +1792,12 @@ let ``Test project 8 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project8.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project8.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project8.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) - - allUsesOfAllSymbols + allUsesOfAllSymbols |> shouldEqual [|("int", "int", "file1", ((4, 19), (4, 22)), ["type"], ["abbrev"]); ("int", "int", "file1", ((4, 31), (4, 34)), ["type"], ["abbrev"]); @@ -1835,14 +1821,14 @@ let ``Test project 8 all symbols`` () = ("NamedUnionFields", "NamedUnionFields", "file1", ((2, 7), (2, 23)), ["defn"], ["module"])|] - let arg1symbol = - wholeProjectResults.GetAllUsesOfAllSymbols() - + let arg1symbol = + wholeProjectResults.GetAllUsesOfAllSymbols() + |> Array.pick (fun x -> if x.Symbol.DisplayName = "xxx" then Some x.Symbol else None) - let arg1uses = - wholeProjectResults.GetUsesOfSymbol(arg1symbol) - - |> Array.map (fun su -> Option.map tups su.Symbol.DeclarationLocation, Project8.cleanFileName su.FileName, tups su.Range) + let arg1uses = + wholeProjectResults.GetUsesOfSymbol(arg1symbol) + + |> Array.map (fun su -> Option.map tups su.Symbol.DeclarationLocation, Project8.cleanFileName su.FileName, tups su.RangeAlternate) arg1uses |> shouldEqual [|(Some ((4, 14), (4, 17)), "file1", ((4, 14), (4, 17))); @@ -1850,7 +1836,7 @@ let ``Test project 8 all symbols`` () = (Some ((4, 14), (4, 17)), "file1", ((10, 9), (10, 12)))|] //----------------------------------------------------------------------------------------- -module internal Project9 = +module internal Project9 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -1863,7 +1849,7 @@ let inline check< ^T when ^T : (static member IsInfinity : ^T -> bool)> (num: ^T if (^T : (static member IsInfinity: ^T -> bool) (num)) then None else Some num """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -1873,12 +1859,12 @@ let inline check< ^T when ^T : (static member IsInfinity : ^T -> bool)> (num: ^T [] -let ``Test project9 whole project errors`` () = +let ``Test project9 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project9.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project9 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] @@ -1886,10 +1872,10 @@ let ``Test project 9 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project9.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project9.cleanFileName su.FileName, tups su.Range, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project9.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbol su.Symbol) allUsesOfAllSymbols |> shouldEqual [|("generic parameter T", "T", "file1", ((4, 18), (4, 20)), []); @@ -1912,14 +1898,14 @@ let ``Test project 9 all symbols`` () = ("val check", "check", "file1", ((4, 11), (4, 16)), ["val"]); ("Constraints", "Constraints", "file1", ((2, 7), (2, 18)), ["module"])|] - let arg1symbol = - wholeProjectResults.GetAllUsesOfAllSymbols() - + let arg1symbol = + wholeProjectResults.GetAllUsesOfAllSymbols() + |> Array.pick (fun x -> if x.Symbol.DisplayName = "IsInfinity" then Some x.Symbol else None) - let arg1uses = - wholeProjectResults.GetUsesOfSymbol(arg1symbol) - - |> Array.map (fun su -> Option.map tups su.Symbol.DeclarationLocation, Project9.cleanFileName su.FileName, tups su.Range) + let arg1uses = + wholeProjectResults.GetUsesOfSymbol(arg1symbol) + + |> Array.map (fun su -> Option.map tups su.Symbol.DeclarationLocation, Project9.cleanFileName su.FileName, tups su.RangeAlternate) arg1uses |> shouldEqual [|(Some ((4, 46), (4, 56)), "file1", ((4, 46), (4, 56)))|] @@ -1927,7 +1913,7 @@ let ``Test project 9 all symbols`` () = //----------------------------------------------------------------------------------------- // see https://github.com/fsharp/FSharp.Compiler.Service/issues/95 -module internal Project10 = +module internal Project10 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -1936,13 +1922,13 @@ module internal Project10 = let fileSource1 = """ module NamedArgs -type C() = +type C() = static member M(url: string, query: int) = () C.M("http://goo", query = 1) """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -1952,12 +1938,12 @@ C.M("http://goo", query = 1) [] -let ``Test Project10 whole project errors`` () = +let ``Test Project10 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project10.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project10 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] @@ -1965,10 +1951,10 @@ let ``Test Project10 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project10.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project10.cleanFileName su.FileName, tups su.Range, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project10.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbol su.Symbol) allUsesOfAllSymbols |> shouldEqual [|("C", "C", "file1", ((4, 5), (4, 6)), ["class"]); @@ -1986,21 +1972,21 @@ let ``Test Project10 all symbols`` () = ("parameter query", "query", "file1", ((7, 18), (7, 23)), []); ("NamedArgs", "NamedArgs", "file1", ((2, 7), (2, 16)), ["module"])|] - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project10.fileName1, Project10.options) + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project10.fileName1, Project10.options) |> Async.RunSynchronously - let querySymbolUseOpt = - backgroundTypedParse1.GetSymbolUseAtLocation(7,23,"",["query"]) - + let querySymbolUseOpt = + backgroundTypedParse1.GetSymbolUseAtLocation(7,23,"",["query"]) + let querySymbolUse = querySymbolUseOpt.Value let querySymbol = querySymbolUse.Symbol querySymbol.ToString() |> shouldEqual "parameter query" - let querySymbolUse2Opt = + let querySymbolUse2Opt = backgroundTypedParse1.GetSymbolUseAtLocation(7,22,"",["query"]) - + let querySymbolUse2 = querySymbolUse2Opt.Value let querySymbol2 = querySymbolUse2.Symbol @@ -2009,7 +1995,7 @@ let ``Test Project10 all symbols`` () = //----------------------------------------------------------------------------------------- // see https://github.com/fsharp/FSharp.Compiler.Service/issues/92 -module internal Project11 = +module internal Project11 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2022,7 +2008,7 @@ let enum = new System.Collections.Generic.Dictionary.Enumerator() let fff (x:System.Collections.Generic.Dictionary.Enumerator) = () """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -2032,12 +2018,12 @@ let fff (x:System.Collections.Generic.Dictionary.Enumerator) = () [] -let ``Test Project11 whole project errors`` () = +let ``Test Project11 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project11.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project11 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] @@ -2045,10 +2031,10 @@ let ``Test Project11 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project11.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project11.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project11.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) allUsesOfAllSymbols |> shouldEqual [|("System", "System", "file1", ((4, 15), (4, 21)), [], ["namespace"]); @@ -2076,7 +2062,7 @@ let ``Test Project11 all symbols`` () = //----------------------------------------------------------------------------------------- // see https://github.com/fsharp/FSharp.Compiler.Service/issues/92 -module internal Project12 = +module internal Project12 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2091,7 +2077,7 @@ let x2 = query { for i in 0 .. 100 do select (i,i) } """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -2101,12 +2087,12 @@ let x2 = query { for i in 0 .. 100 do [] -let ``Test Project12 whole project errors`` () = +let ``Test Project12 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project12.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project12 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] @@ -2114,10 +2100,10 @@ let ``Test Project12 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project12.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project12.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project12.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) allUsesOfAllSymbols |> shouldEqual [|("val seq", "seq", "file1", ((4, 9), (4, 12)), ["compexpr"], ["val"]); @@ -2144,7 +2130,7 @@ let ``Test Project12 all symbols`` () = //----------------------------------------------------------------------------------------- // Test fetching information about some external types (e.g. System.Object, System.DateTime) -module internal Project13 = +module internal Project13 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2158,7 +2144,7 @@ let x2 = new System.DateTime(1,1,1) let x3 = new System.DateTime() """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -2168,12 +2154,12 @@ let x3 = new System.DateTime() [] -let ``Test Project13 whole project errors`` () = +let ``Test Project13 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project13.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project13 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] @@ -2181,10 +2167,10 @@ let ``Test Project13 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project13.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project13.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project13.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) allUsesOfAllSymbols |> shouldEqual [|("System", "System", "file1", ((4, 14), (4, 20)), [], ["namespace"]); @@ -2206,7 +2192,7 @@ let ``Test Project13 all symbols`` () = let objEntity = objSymbol.Symbol :?> FSharpEntity let objMemberNames = [ for x in objEntity.MembersFunctionsAndValues -> x.DisplayName ] set objMemberNames |> shouldEqual (set [".ctor"; "ToString"; "Equals"; "Equals"; "ReferenceEquals"; "GetHashCode"; "GetType"; "Finalize"; "MemberwiseClone"]) - + let dtSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.Symbol.DisplayName = "DateTime") let dtEntity = dtSymbol.Symbol :?> FSharpEntity let dtPropNames = [ for x in dtEntity.MembersFunctionsAndValues do if x.IsProperty then yield x.DisplayName ] @@ -2215,7 +2201,7 @@ let ``Test Project13 all symbols`` () = set [ for i in dtType.DeclaredInterfaces -> i.ToString() ] |> shouldEqual (set - ["type System.IComparable"; + ["type System.IComparable"; "type System.IFormattable"; "type System.IConvertible"; "type System.Runtime.Serialization.ISerializable"; @@ -2223,23 +2209,23 @@ let ``Test Project13 all symbols`` () = "type System.IEquatable"]) dtType.BaseType.ToString() |> shouldEqual "Some(type System.ValueType)" - - set ["Date"; "Day"; "DayOfWeek"; "DayOfYear"; "Hour"; "Kind"; "Millisecond"; "Minute"; "Month"; "Now"; "Second"; "Ticks"; "TimeOfDay"; "Today"; "Year"] - - set dtPropNames + + set ["Date"; "Day"; "DayOfWeek"; "DayOfYear"; "Hour"; "Kind"; "Millisecond"; "Minute"; "Month"; "Now"; "Second"; "Ticks"; "TimeOfDay"; "Today"; "Year"] + - set dtPropNames |> shouldEqual (set []) let objDispatchSlotNames = [ for x in objEntity.MembersFunctionsAndValues do if x.IsDispatchSlot then yield x.DisplayName ] - + set objDispatchSlotNames |> shouldEqual (set ["ToString"; "Equals"; "GetHashCode"; "Finalize"]) // check we can get the CurriedParameterGroups - let objMethodsCurriedParameterGroups = - [ for x in objEntity.MembersFunctionsAndValues do - for pg in x.CurriedParameterGroups do - for p in pg do + let objMethodsCurriedParameterGroups = + [ for x in objEntity.MembersFunctionsAndValues do + for pg in x.CurriedParameterGroups do + for p in pg do yield x.CompiledName, p.Name, p.Type.ToString(), p.Type.Format(dtSymbol.DisplayContext) ] - objMethodsCurriedParameterGroups |> shouldEqual + objMethodsCurriedParameterGroups |> shouldEqual [("Equals", Some "obj", "type Microsoft.FSharp.Core.obj", "obj"); ("Equals", Some "objA", "type Microsoft.FSharp.Core.obj", "obj"); ("Equals", Some "objB", "type Microsoft.FSharp.Core.obj", "obj"); @@ -2247,9 +2233,9 @@ let ``Test Project13 all symbols`` () = ("ReferenceEquals", Some "objB", "type Microsoft.FSharp.Core.obj", "obj")] // check we can get the ReturnParameter - let objMethodsReturnParameter = - [ for x in objEntity.MembersFunctionsAndValues do - let p = x.ReturnParameter + let objMethodsReturnParameter = + [ for x in objEntity.MembersFunctionsAndValues do + let p = x.ReturnParameter yield x.DisplayName, p.Name, p.Type.ToString(), p.Type.Format(dtSymbol.DisplayContext) ] set objMethodsReturnParameter |> shouldEqual (set @@ -2264,20 +2250,20 @@ let ``Test Project13 all symbols`` () = ("MemberwiseClone", None, "type Microsoft.FSharp.Core.obj", "obj")]) // check we can get the CurriedParameterGroups - let dtMethodsCurriedParameterGroups = - [ for x in dtEntity.MembersFunctionsAndValues do - if x.CompiledName = "FromFileTime" || x.CompiledName = "AddMilliseconds" then - for pg in x.CurriedParameterGroups do - for p in pg do + let dtMethodsCurriedParameterGroups = + [ for x in dtEntity.MembersFunctionsAndValues do + if x.CompiledName = "FromFileTime" || x.CompiledName = "AddMilliseconds" then + for pg in x.CurriedParameterGroups do + for p in pg do yield x.CompiledName, p.Name, p.Type.ToString(), p.Type.Format(dtSymbol.DisplayContext) ] - dtMethodsCurriedParameterGroups |> shouldEqual + dtMethodsCurriedParameterGroups |> shouldEqual [("AddMilliseconds", Some "value", "type Microsoft.FSharp.Core.float","float"); ("FromFileTime", Some "fileTime", "type Microsoft.FSharp.Core.int64","int64")] let _test1 = [ for x in objEntity.MembersFunctionsAndValues -> x.FullType ] - for x in objEntity.MembersFunctionsAndValues do + for x in objEntity.MembersFunctionsAndValues do x.IsCompilerGenerated |> shouldEqual false x.IsExtensionMember |> shouldEqual false x.IsEvent |> shouldEqual false @@ -2292,7 +2278,7 @@ let ``Test Project13 all symbols`` () = //----------------------------------------------------------------------------------------- // Misc - structs -module internal Project14 = +module internal Project14 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2302,14 +2288,14 @@ module internal Project14 = module Structs [] -type S(p:int) = +type S(p:int) = member x.P = p let x1 = S() let x2 = S(3) """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -2319,12 +2305,12 @@ let x2 = S(3) [] -let ``Test Project14 whole project errors`` () = +let ``Test Project14 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project14.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project14 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] @@ -2332,10 +2318,10 @@ let ``Test Project14 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project14.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project14.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project14.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su) allUsesOfAllSymbols |> shouldEqual [|("StructAttribute", "StructAttribute", "file1", ((4, 2), (4, 8)), @@ -2360,7 +2346,7 @@ let ``Test Project14 all symbols`` () = //----------------------------------------------------------------------------------------- // Misc - union patterns -module internal Project15 = +module internal Project15 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2369,15 +2355,15 @@ module internal Project15 = let fileSource1 = """ module UnionPatterns -let f x = - match x with - | [h] - | [_; h] - | [_; _; h] -> h +let f x = + match x with + | [h] + | [_; h] + | [_; _; h] -> h | _ -> 0 """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -2387,12 +2373,12 @@ let f x = [] -let ``Test Project15 whole project errors`` () = +let ``Test Project15 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project15.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project15 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] @@ -2400,10 +2386,10 @@ let ``Test Project15 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project15.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project15.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project15.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su) allUsesOfAllSymbols |> shouldEqual [|("val x", "x", "file1", ((4, 6), (4, 7)), ["defn"]); @@ -2419,7 +2405,7 @@ let ``Test Project15 all symbols`` () = //----------------------------------------------------------------------------------------- // Misc - signature files -module internal Project16 = +module internal Project16 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let sigFileName1 = Path.ChangeExtension(fileName1, ".fsi") @@ -2429,34 +2415,34 @@ module internal Project16 = let fileSource1Text = """ module Impl -type C() = +type C() = member x.PC = 1 -and D() = +and D() = member x.PD = 1 -and E() = +and E() = member x.PE = 1 and F = { Field1 : int; Field2 : int } and G = Case1 | Case2 of int """ - let fileSource1 = SourceText.ofString fileSource1Text - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1Text) + let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text + File.WriteAllText(fileName1, fileSource1Text) let sigFileSource1Text = """ module Impl -type C = +type C = new : unit -> C member PC : int -and [] D = +and [] D = new : unit -> D member PD : int -and [] E = +and [] E = new : unit -> E member PE : int @@ -2464,8 +2450,8 @@ and F = { Field1 : int; Field2 : int } and G = Case1 | Case2 of int """ - let sigFileSource1 = SourceText.ofString sigFileSource1Text - FileSystem.OpenFileForWriteShim(sigFileName1).Write(sigFileSource1Text) + let sigFileSource1 = FSharp.Compiler.Text.SourceText.ofString sigFileSource1Text + File.WriteAllText(sigFileName1, sigFileSource1Text) let cleanFileName a = if a = fileName1 then "file1" elif a = sigFileName1 then "sig1" else "??" let fileNames = [sigFileName1; fileName1] @@ -2474,12 +2460,12 @@ and G = Case1 | Case2 of int [] -let ``Test Project16 whole project errors`` () = +let ``Test Project16 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project16.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project16 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] @@ -2487,10 +2473,10 @@ let ``Test Project16 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project16.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project16.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project16.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) allUsesOfAllSymbols |> shouldEqual [|("ClassAttribute", "ClassAttribute", "sig1", ((8, 6), (8, 11)), @@ -2581,44 +2567,44 @@ let ``Test Project16 all symbols`` () = [] let ``Test Project16 sig symbols are equal to impl symbols`` () = - let checkResultsSig = + let checkResultsSig = checker.ParseAndCheckFileInProject(Project16.sigFileName1, 0, Project16.sigFileSource1, Project16.options) |> Async.RunSynchronously - |> function + |> function | _, FSharpCheckFileAnswer.Succeeded(res) -> res - | _ -> failwithf "Parsing aborted unexpectedly..." + | _ -> failwithf "Parsing aborted unexpectedly..." - let checkResultsImpl = + let checkResultsImpl = checker.ParseAndCheckFileInProject(Project16.fileName1, 0, Project16.fileSource1, Project16.options) |> Async.RunSynchronously - |> function + |> function | _, FSharpCheckFileAnswer.Succeeded(res) -> res - | _ -> failwithf "Parsing aborted unexpectedly..." + | _ -> failwithf "Parsing aborted unexpectedly..." let symbolsSig = checkResultsSig.GetAllUsesOfAllSymbolsInFile() let symbolsImpl = checkResultsImpl.GetAllUsesOfAllSymbolsInFile() - // Test that all 'definition' symbols in the signature (or implementation) have a matching symbol in the + // Test that all 'definition' symbols in the signature (or implementation) have a matching symbol in the // implementation (or signature). - let testFind (tag1,symbols1) (tag2,symbols2) = - for (symUse1: FSharpSymbolUse) in symbols1 do + let testFind (tag1,symbols1) (tag2,symbols2) = + for (symUse1: FSharpSymbolUse) in symbols1 do - if symUse1.IsFromDefinition && - (match symUse1.Symbol with + if symUse1.IsFromDefinition && + (match symUse1.Symbol with | :? FSharpMemberOrFunctionOrValue as m -> m.IsModuleValueOrMember | :? FSharpEntity -> true | _ -> false) then - let ok = - symbols2 - |> Seq.filter (fun (symUse2:FSharpSymbolUse) -> - //if symUse2.IsFromDefinition && symUse1.Symbol.DisplayName = symUse2.Symbol.DisplayName then + let ok = + symbols2 + |> Seq.filter (fun (symUse2:FSharpSymbolUse) -> + //if symUse2.IsFromDefinition && symUse1.Symbol.DisplayName = symUse2.Symbol.DisplayName then // printfn "Comparing \n\t'%A' \n\t\t@ %A \n\t\t@@ %A and \n\t'%A' \n\t\t@ %A \n\t\t@@ %A" symUse1.Symbol symUse1.Symbol.ImplementationLocation symUse1.Symbol.SignatureLocation symUse2.Symbol symUse2.Symbol.ImplementationLocation symUse2.Symbol.SignatureLocation symUse2.Symbol.IsEffectivelySameAs(symUse1.Symbol) ) |> Seq.toList - match ok with + match ok with | [] -> failwith (sprintf "Didn't find symbol equivalent to %s symbol '%A' in %s" tag1 symUse1.Symbol tag2) - | [sym] -> () + | [sym] -> () | [sym1;sym2] when sym1.Symbol.DisplayName = sym2.Symbol.DisplayName -> () // constructor and type | syms -> failwith (sprintf "Found multiple symbols for %s '%A' in %s: '%A'" tag1 symUse1.Symbol tag2 [for sym in syms -> sym.Symbol ] ) @@ -2633,19 +2619,19 @@ let ``Test Project16 sym locations`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project16.options) |> Async.RunSynchronously - let fmtLoc (mOpt: range option) = - match mOpt with + let fmtLoc (mOpt: Range.range option) = + match mOpt with | None -> None - | Some m -> + | Some m -> let file = Project16.cleanFileName m.FileName if file = "??" then None else Some (file, (m.StartLine, m.StartColumn), (m.EndLine, m.EndColumn )) - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.choose (fun su -> - match fmtLoc su.Symbol.SignatureLocation, fmtLoc su.Symbol.DeclarationLocation, fmtLoc su.Symbol.ImplementationLocation with + + |> Array.choose (fun su -> + match fmtLoc su.Symbol.SignatureLocation, fmtLoc su.Symbol.DeclarationLocation, fmtLoc su.Symbol.ImplementationLocation with | Some a, Some b, Some c -> Some (su.Symbol.ToString(), a, b, c) | _ -> None) @@ -2696,20 +2682,20 @@ let ``Test project16 DeclaringEntity`` () = |> Async.RunSynchronously let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() for sym in allSymbolsUses do - match sym.Symbol with - | :? FSharpEntity as e when not e.IsNamespace || e.AccessPath.Contains(".") -> + match sym.Symbol with + | :? FSharpEntity as e when not e.IsNamespace || e.AccessPath.Contains(".") -> printfn "checking declaring type of entity '%s' --> '%s', assembly = '%s'" e.AccessPath e.CompiledName (e.Assembly.ToString()) shouldEqual e.DeclaringEntity.IsSome (e.AccessPath <> "global") - match e.AccessPath with - | "C" | "D" | "E" | "F" | "G" -> + match e.AccessPath with + | "C" | "D" | "E" | "F" | "G" -> shouldEqual e.AccessPath "Impl" shouldEqual e.DeclaringEntity.Value.IsFSharpModule true shouldEqual e.DeclaringEntity.Value.IsNamespace false - | "int" -> + | "int" -> shouldEqual e.AccessPath "Microsoft.FSharp.Core" shouldEqual e.DeclaringEntity.Value.AccessPath "Microsoft.FSharp" | _ -> () - | :? FSharpMemberOrFunctionOrValue as e when e.IsModuleValueOrMember -> + | :? FSharpMemberOrFunctionOrValue as e when e.IsModuleValueOrMember -> printfn "checking declaring type of value '%s', assembly = '%s'" e.CompiledName (e.Assembly.ToString()) shouldEqual e.DeclaringEntity.IsSome true | _ -> () @@ -2718,7 +2704,7 @@ let ``Test project16 DeclaringEntity`` () = //----------------------------------------------------------------------------------------- // Misc - namespace symbols -module internal Project17 = +module internal Project17 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2735,7 +2721,7 @@ let f2 (x: System.Collections.Generic.IList) = x.[3] <- 4 // check use of let f3 (x: System.Exception) = x.HelpLink <- "" // check use of .NET setter property """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] @@ -2744,12 +2730,12 @@ let f3 (x: System.Exception) = x.HelpLink <- "" // check use of .NET setter prop [] -let ``Test Project17 whole project errors`` () = +let ``Test Project17 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project17.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project17 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] @@ -2757,12 +2743,12 @@ let ``Test Project17 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project17.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project17.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project17.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) - - allUsesOfAllSymbols + allUsesOfAllSymbols |> shouldEqual [|("Microsoft", "Microsoft", "file1", ((4, 8), (4, 17)), [], ["namespace"]); ("Collections", "Collections", "file1", ((4, 25), (4, 36)), [], ["namespace"]); @@ -2810,7 +2796,7 @@ let ``Test Project17 all symbols`` () = //----------------------------------------------------------------------------------------- // Misc - generic type definnitions -module internal Project18 = +module internal Project18 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2821,7 +2807,7 @@ module Impl let _ = list<_>.Empty """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] @@ -2830,12 +2816,12 @@ let _ = list<_>.Empty [] -let ``Test Project18 whole project errors`` () = +let ``Test Project18 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project18.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project18 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] @@ -2843,10 +2829,10 @@ let ``Test Project18 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project18.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project18.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project18.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, (match su.Symbol with :? FSharpEntity as e -> e.IsNamespace | _ -> false)) allUsesOfAllSymbols |> shouldEqual @@ -2860,7 +2846,7 @@ let ``Test Project18 all symbols`` () = //----------------------------------------------------------------------------------------- // Misc - enums -module internal Project19 = +module internal Project19 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2877,7 +2863,7 @@ let f x = match x with Enum.EnumCase1 -> 1 | Enum.EnumCase2 -> 2 | _ -> 3 let s = System.DayOfWeek.Monday """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] @@ -2886,12 +2872,12 @@ let s = System.DayOfWeek.Monday [] -let ``Test Project19 whole project errors`` () = +let ``Test Project19 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project19.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project19 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] @@ -2899,10 +2885,10 @@ let ``Test Project19 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project19.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project19.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project19.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) allUsesOfAllSymbols |> shouldEqual [|("field EnumCase1", "EnumCase1", "file1", ((4, 14), (4, 23)), ["defn"], @@ -2938,7 +2924,7 @@ let ``Test Project19 all symbols`` () = //----------------------------------------------------------------------------------------- // Misc - https://github.com/fsharp/FSharp.Compiler.Service/issues/109 -module internal Project20 = +module internal Project20 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2947,11 +2933,11 @@ module internal Project20 = let fileSource1 = """ module Impl -type A<'T>() = +type A<'T>() = member x.M() : 'T = failwith "" """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] @@ -2960,12 +2946,12 @@ type A<'T>() = [] -let ``Test Project20 whole project errors`` () = +let ``Test Project20 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project20.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project20 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] @@ -2973,15 +2959,15 @@ let ``Test Project20 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project20.options) |> Async.RunSynchronously - let tSymbolUse = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.Range.StartLine = 5 && su.Symbol.ToString() = "generic parameter T") + let tSymbolUse = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.RangeAlternate.StartLine = 5 && su.Symbol.ToString() = "generic parameter T") let tSymbol = tSymbolUse.Symbol - let allUsesOfTSymbol = + let allUsesOfTSymbol = wholeProjectResults.GetUsesOfSymbol(tSymbol) - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project20.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project20.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) allUsesOfTSymbol |> shouldEqual [|("generic parameter T", "T", "file1", ((4, 7), (4, 9)), ["type"], []); @@ -2990,7 +2976,7 @@ let ``Test Project20 all symbols`` () = //----------------------------------------------------------------------------------------- // Misc - https://github.com/fsharp/FSharp.Compiler.Service/issues/137 -module internal Project21 = +module internal Project21 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2999,20 +2985,20 @@ module internal Project21 = let fileSource1 = """ module Impl -type IMyInterface<'a> = +type IMyInterface<'a> = abstract Method1: 'a -> unit abstract Method2: 'a -> unit let _ = { new IMyInterface with - member x.Method1(arg1: string): unit = + member x.Method1(arg1: string): unit = raise (System.NotImplementedException()) - member x.Method2(arg1: int): unit = + member x.Method2(arg1: int): unit = raise (System.NotImplementedException()) } """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] @@ -3021,12 +3007,12 @@ let _ = { new IMyInterface with [] -let ``Test Project21 whole project errors`` () = +let ``Test Project21 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project21.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project21 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 2 + wholeProjectResults.Errors.Length |> shouldEqual 2 [] @@ -3034,10 +3020,10 @@ let ``Test Project21 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project21.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project21.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project21.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) allUsesOfAllSymbols |> shouldEqual [|("generic parameter a", "a", "file1", ((4, 18), (4, 20)), ["type"], []); @@ -3068,7 +3054,7 @@ let ``Test Project21 all symbols`` () = //----------------------------------------------------------------------------------------- // Misc - namespace symbols -module internal Project22 = +module internal Project22 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3077,7 +3063,7 @@ module internal Project22 = let fileSource1 = """ module Impl -type AnotherMutableList() = +type AnotherMutableList() = member x.Item with get() = 3 and set (v:int) = () let f1 (x: System.Collections.Generic.IList<'T>) = () // grab the IList symbol and look into it @@ -3086,7 +3072,7 @@ let f3 (x: System.Collections.ObjectModel.ObservableCollection<'T>) = () // grab let f4 (x: int[]) = () // test a one-dimensional array let f5 (x: int[,,]) = () // test a multi-dimensional array """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] @@ -3096,12 +3082,12 @@ let f5 (x: int[,,]) = () // test a multi-dimensional array [] -let ``Test Project22 whole project errors`` () = +let ``Test Project22 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project22.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project22 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] @@ -3109,19 +3095,19 @@ let ``Test Project22 IList contents`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project22.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() + - - let ilistTypeUse = + let ilistTypeUse = allUsesOfAllSymbols |> Array.find (fun su -> su.Symbol.DisplayName = "IList") - let ocTypeUse = + let ocTypeUse = allUsesOfAllSymbols |> Array.find (fun su -> su.Symbol.DisplayName = "ObservableCollection") - let alistTypeUse = + let alistTypeUse = allUsesOfAllSymbols |> Array.find (fun su -> su.Symbol.DisplayName = "AnotherMutableList") @@ -3131,7 +3117,7 @@ let ``Test Project22 IList contents`` () = let arrayTypes = allTypes - |> Array.choose (fun t -> + |> Array.choose (fun t -> if t.HasTypeDefinition then let td = t.TypeDefinition if td.IsArrayType then Some (td.DisplayName, td.ArrayRank) else None @@ -3144,39 +3130,39 @@ let ``Test Project22 IList contents`` () = set [ for x in ilistTypeDefn.MembersFunctionsAndValues -> x.LogicalName, attribsOfSymbol x ] |> shouldEqual (set [("get_Item", ["slot"; "member"; "getter"]); - ("set_Item", ["slot"; "member"; "setter"]); + ("set_Item", ["slot"; "member"; "setter"]); ("IndexOf", ["slot"; "member"]); - ("Insert", ["slot"; "member"]); + ("Insert", ["slot"; "member"]); ("RemoveAt", ["slot"; "member"]); ("Item", ["slot"; "member"; "prop"])]) set [ for x in ocTypeDefn.MembersFunctionsAndValues -> x.LogicalName, attribsOfSymbol x ] |> shouldEqual - (set [(".ctor", ["member"]); + (set [(".ctor", ["member"]); + (".ctor", ["member"]); (".ctor", ["member"]); - (".ctor", ["member"]); - ("Move", ["member"]); + ("Move", ["member"]); ("add_CollectionChanged", ["slot"; "member"; "add"]); ("remove_CollectionChanged", ["slot"; "member"; "remove"]); - ("ClearItems", ["slot"; "member"]); + ("ClearItems", ["slot"; "member"]); ("RemoveItem", ["slot"; "member"]); - ("InsertItem", ["slot"; "member"]); + ("InsertItem", ["slot"; "member"]); ("SetItem", ["slot"; "member"]); - ("MoveItem", ["slot"; "member"]); + ("MoveItem", ["slot"; "member"]); ("OnPropertyChanged", ["slot"; "member"]); ("add_PropertyChanged", ["slot"; "member"; "add"]); ("remove_PropertyChanged", ["slot"; "member"; "remove"]); ("OnCollectionChanged", ["slot"; "member"]); - ("BlockReentrancy", ["member"]); + ("BlockReentrancy", ["member"]); ("CheckReentrancy", ["member"]); ("CollectionChanged", ["slot"; "member"; "event"]); ("PropertyChanged", ["slot"; "member"; "event"])]) set [ for x in alistTypeDefn.MembersFunctionsAndValues -> x.LogicalName, attribsOfSymbol x ] |> shouldEqual - (set [(".ctor", ["member"; "ctor"]); + (set [(".ctor", ["member"; "ctor"]); ("get_Item", ["member"; "getter"]); - ("set_Item", ["member"; "setter"]); + ("set_Item", ["member"; "setter"]); ("Item", ["member"; "prop"])]) set [ for x in ilistTypeDefn.AllInterfaces -> x.TypeDefinition.DisplayName, attribsOfSymbol x.TypeDefinition ] @@ -3191,9 +3177,9 @@ let ``Test Project22 IList properties`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project22.options) |> Async.RunSynchronously - let ilistTypeUse = + let ilistTypeUse = wholeProjectResults.GetAllUsesOfAllSymbols() - + |> Array.find (fun su -> su.Symbol.DisplayName = "IList") let ilistTypeDefn = ilistTypeUse.Symbol :?> FSharpEntity @@ -3207,7 +3193,7 @@ let ``Test Project22 IList properties`` () = //----------------------------------------------------------------------------------------- // Misc - properties -module internal Project23 = +module internal Project23 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3223,7 +3209,7 @@ type Class() = module Getter = type System.Int32 with static member Zero = 0 - member x.Value = 0 + member x.Value = 0 let _ = 0 .Value @@ -3233,7 +3219,7 @@ module Setter = 0 .Value <- 0 """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] @@ -3241,27 +3227,27 @@ module Setter = let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) [] -let ``Test Project23 whole project errors`` () = +let ``Test Project23 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project23.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project23 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] let ``Test Project23 property`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project23.options) |> Async.RunSynchronously - let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() - + let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() + let classTypeUse = allSymbolsUses |> Array.find (fun su -> su.Symbol.DisplayName = "Class") let classTypeDefn = classTypeUse.Symbol :?> FSharpEntity let results = [ for x in classTypeDefn.MembersFunctionsAndValues -> x.LogicalName, attribsOfSymbol x ] - [(".ctor", ["member"; "ctor"]); + [(".ctor", ["member"; "ctor"]); ("get_Property", ["member"; "getter"]); ("get_StaticProperty", ["member"; "getter"]); - ("StaticProperty", ["member"; "prop"]); + ("StaticProperty", ["member"; "prop"]); ("Property", ["member"; "prop"])] |> List.iter (fun x -> if results |> List.exists (fun y -> x = y) |> not then @@ -3272,16 +3258,16 @@ let ``Test Project23 property`` () = let getterModuleDefn = getterModuleUse.Symbol :?> FSharpEntity [ for x in getterModuleDefn.MembersFunctionsAndValues -> x.LogicalName, attribsOfSymbol x ] - |> shouldEqual + |> shouldEqual [("get_Zero", ["member"; "extmem"; "getter"]); ("Zero", ["member"; "prop"; "extmem"]); ("get_Value", ["member"; "extmem"; "getter"]); ("Value", ["member"; "prop"; "extmem"])] let extensionProps = getterModuleDefn.MembersFunctionsAndValues |> Seq.toArray |> Array.filter (fun su -> su.LogicalName = "Value" || su.LogicalName = "Zero" ) - let extensionPropsRelated = + let extensionPropsRelated = extensionProps - |> Array.collect (fun f -> + |> Array.collect (fun f -> [| if f.HasGetterMethod then yield (f.DeclaringEntity.Value.FullName, f.ApparentEnclosingEntity.FullName, f.GetterMethod.CompiledName, f.GetterMethod.DeclaringEntity.Value.FullName, attribsOfSymbol f) if f.HasSetterMethod then @@ -3293,56 +3279,56 @@ let ``Test Project23 property`` () = [("Impl.Getter", "System.Int32", "Int32.get_Zero.Static", "Impl.Getter", ["member"; "prop"; "extmem"]); ("Impl.Getter", "System.Int32", "Int32.get_Value", "Impl.Getter", - ["member"; "prop"; "extmem"])] + ["member"; "prop"; "extmem"])] - allSymbolsUses + allSymbolsUses |> Array.map (fun x -> x.Symbol) - |> Array.choose (function + |> Array.choose (function | :? FSharpMemberOrFunctionOrValue as f -> Some (f.LogicalName, attribsOfSymbol f) | _ -> None) |> Array.toList - |> shouldEqual - [(".ctor", ["member"; "ctor"]); + |> shouldEqual + [(".ctor", ["member"; "ctor"]); ("get_StaticProperty", ["member"; "getter"]); - ("get_Property", ["member"; "getter"]); + ("get_Property", ["member"; "getter"]); ("x", []); ("get_Zero", ["member"; "extmem"; "getter"]); - ("get_Value", ["member"; "extmem"; "getter"]); + ("get_Value", ["member"; "extmem"; "getter"]); ("x", []); ("Value", ["member"; "prop"; "extmem"]); - ("set_Value", ["member"; "extmem"; "setter"]); + ("set_Value", ["member"; "extmem"; "setter"]); ("x", []); - ("_arg1", ["compgen"]); + ("_arg1", ["compgen"]); ("Value", ["member"; "prop"; "extmem"])] [] let ``Test Project23 extension properties' getters/setters should refer to the correct declaring entities`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project23.options) |> Async.RunSynchronously - let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() + let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() let extensionMembers = allSymbolsUses |> Array.rev |> Array.filter (fun su -> su.Symbol.DisplayName = "Value") extensionMembers |> Array.collect (fun memb -> wholeProjectResults.GetUsesOfSymbol(memb.Symbol) ) - |> Array.collect (fun x -> + |> Array.collect (fun x -> [| match x.Symbol with - | :? FSharpMemberOrFunctionOrValue as f -> + | :? FSharpMemberOrFunctionOrValue as f -> if f.HasGetterMethod then yield (f.DeclaringEntity.Value.FullName, f.GetterMethod.DeclaringEntity.Value.FullName, f.ApparentEnclosingEntity.FullName, f.GetterMethod.ApparentEnclosingEntity.FullName, attribsOfSymbol f) if f.HasSetterMethod then yield (f.DeclaringEntity.Value.FullName, f.SetterMethod.DeclaringEntity.Value.FullName, f.ApparentEnclosingEntity.FullName, f.SetterMethod.ApparentEnclosingEntity.FullName, attribsOfSymbol f) - | _ -> () + | _ -> () |]) |> Array.toList - |> shouldEqual + |> shouldEqual [ ("Impl.Setter", "Impl.Setter", "System.Int32", "System.Int32", ["member"; "prop"; "extmem"]); ("Impl.Setter", "Impl.Setter", "System.Int32", "System.Int32", ["member"; "prop"; "extmem"]); ("Impl.Getter", "Impl.Getter", "System.Int32", "System.Int32", ["member"; "prop"; "extmem"]) ("Impl.Getter", "Impl.Getter", "System.Int32", "System.Int32", ["member"; "prop"; "extmem"]) ] // Misc - property symbols -module internal Project24 = +module internal Project24 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3380,21 +3366,21 @@ type TypeWithProperties() = static member val StaticAutoPropGet = 0 with get static member val StaticAutoPropGetSet = 0 with get, set -let v1 = TypeWithProperties().NameGetSet +let v1 = TypeWithProperties().NameGetSet TypeWithProperties().NameGetSet <- 3 let v2 = TypeWithProperties().NameGet TypeWithProperties().NameSet <- 3 -let v3 = TypeWithProperties.StaticNameGetSet +let v3 = TypeWithProperties.StaticNameGetSet TypeWithProperties.StaticNameGetSet <- 3 let v4 = TypeWithProperties.StaticNameGet TypeWithProperties.StaticNameSet <- 3 -let v5 = TypeWithProperties().AutoPropGet +let v5 = TypeWithProperties().AutoPropGet let v6 = TypeWithProperties().AutoPropGetSet TypeWithProperties().AutoPropGetSet <- 3 @@ -3405,33 +3391,33 @@ let v8 = TypeWithProperties.StaticAutoPropGetSet TypeWithProperties.StaticAutoPropGetSet <- 3 """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] - let args = mkProjectCommandLineArgs (dllName, fileNames) + let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) [] -let ``Test Project24 whole project errors`` () = +let ``Test Project24 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project24.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project24 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] -let ``Test Project24 all symbols`` () = +let ``Test Project24 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project24.options) |> Async.RunSynchronously - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project24.fileName1, Project24.options) - |> Async.RunSynchronously + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project24.fileName1, Project24.options) + |> Async.RunSynchronously - let allUses = - backgroundTypedParse1.GetAllUsesOfAllSymbolsInFile() + let allUses = + backgroundTypedParse1.GetAllUsesOfAllSymbolsInFile() |> Array.ofSeq - |> Array.map (fun s -> (s.Symbol.DisplayName, Project24.cleanFileName s.FileName, tups s.Range, attribsOfSymbolUse s, attribsOfSymbol s.Symbol)) + |> Array.map (fun s -> (s.Symbol.DisplayName, Project24.cleanFileName s.FileName, tups s.RangeAlternate, attribsOfSymbolUse s, attribsOfSymbol s.Symbol)) - allUses |> shouldEqual + allUses |> shouldEqual [|("TypeWithProperties", "file1", ((4, 5), (4, 23)), ["defn"], ["class"]); ("( .ctor )", "file1", ((4, 5), (4, 23)), ["defn"], ["member"; "ctor"]); ("NameGetSet", "file1", ((5, 13), (5, 23)), ["defn"], ["member"; "getter"]); @@ -3527,16 +3513,16 @@ let ``Test Project24 all symbols`` () = ("PropertyTest", "file1", ((2, 7), (2, 19)), ["defn"], ["module"])|] [] -let ``Test symbol uses of properties with both getters and setters`` () = +let ``Test symbol uses of properties with both getters and setters`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project24.options) |> Async.RunSynchronously - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project24.fileName1, Project24.options) - |> Async.RunSynchronously + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project24.fileName1, Project24.options) + |> Async.RunSynchronously - let getAllSymbolUses = - backgroundTypedParse1.GetAllUsesOfAllSymbolsInFile() + let getAllSymbolUses = + backgroundTypedParse1.GetAllUsesOfAllSymbolsInFile() |> Array.ofSeq - |> Array.map (fun s -> (s.Symbol.DisplayName, Project24.cleanFileName s.FileName, tups s.Range, attribsOfSymbol s.Symbol)) + |> Array.map (fun s -> (s.Symbol.DisplayName, Project24.cleanFileName s.FileName, tups s.RangeAlternate, attribsOfSymbol s.Symbol)) getAllSymbolUses |> shouldEqual [|("TypeWithProperties", "file1", ((4, 5), (4, 23)), ["class"]); @@ -3618,23 +3604,23 @@ let ``Test symbol uses of properties with both getters and setters`` () = ("StaticAutoPropGetSet", "file1", ((55, 0), (55, 39)), ["member"; "prop"]); ("PropertyTest", "file1", ((2, 7), (2, 19)), ["module"])|] - let getSampleSymbolUseOpt = - backgroundTypedParse1.GetSymbolUseAtLocation(9,20,"",["NameGet"]) - + let getSampleSymbolUseOpt = + backgroundTypedParse1.GetSymbolUseAtLocation(9,20,"",["NameGet"]) + let getSampleSymbol = getSampleSymbolUseOpt.Value.Symbol - - let usesOfGetSampleSymbol = - backgroundTypedParse1.GetUsesOfSymbolInFile(getSampleSymbol) - - |> Array.map (fun s -> (Project24.cleanFileName s.FileName, tups s.Range)) + + let usesOfGetSampleSymbol = + backgroundTypedParse1.GetUsesOfSymbolInFile(getSampleSymbol) + + |> Array.map (fun s -> (Project24.cleanFileName s.FileName, tups s.RangeAlternate)) usesOfGetSampleSymbol |> shouldEqual [|("file1", ((9, 13), (9, 20))); ("file1", ((36, 9), (36, 37)))|] #if NO_CHECK_USE_OF_FSHARP_DATA_DLL #endif // Misc - type provider symbols -module internal Project25 = +module internal Project25 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3651,12 +3637,12 @@ let r = { Record.Field = 1 } let _ = XmlProvider<"13">.GetSample() """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] - let args = - [| yield! mkProjectCommandLineArgs (dllName, fileNames) + let args = + [| yield! mkProjectCommandLineArgs (dllName, fileNames) yield @"-r:" + Path.Combine(__SOURCE_DIRECTORY__, Path.Combine("data", "FSharp.Data.dll")) yield @"-r:" + sysLib "System.Xml.Linq" |] let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) @@ -3665,28 +3651,28 @@ let _ = XmlProvider<"13">.GetSample() #if NETCOREAPP [] #endif -let ``Test Project25 whole project errors`` () = +let ``Test Project25 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project25.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project25 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] #if NETCOREAPP [] #endif -let ``Test Project25 symbol uses of type-provided members`` () = +let ``Test Project25 symbol uses of type-provided members`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project25.options) |> Async.RunSynchronously - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options) - |> Async.RunSynchronously + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options) + |> Async.RunSynchronously - let allUses = - backgroundTypedParse1.GetAllUsesOfAllSymbolsInFile() + let allUses = + backgroundTypedParse1.GetAllUsesOfAllSymbolsInFile() |> Array.ofSeq - |> Array.map (fun s -> (s.Symbol.FullName, Project25.cleanFileName s.FileName, tups s.Range, attribsOfSymbol s.Symbol)) + |> Array.map (fun s -> (s.Symbol.FullName, Project25.cleanFileName s.FileName, tups s.RangeAlternate, attribsOfSymbol s.Symbol)) - allUses |> shouldEqual + allUses |> shouldEqual [|("FSharp", "file1", ((3, 5), (3, 11)), ["namespace"]); ("FSharp.Data", "file1", ((3, 12), (3, 16)), ["namespace"; "provided"]); @@ -3717,16 +3703,16 @@ let ``Test Project25 symbol uses of type-provided members`` () = ["class"; "provided"; "staticinst"; "erased"]); ("FSharp.Data.XmlProvider<...>.GetSample", "file1", ((10, 8), (10, 78)), ["member"]); ("TypeProviderTests", "file1", ((2, 7), (2, 24)), ["module"])|] - let getSampleSymbolUseOpt = - backgroundTypedParse1.GetSymbolUseAtLocation(5,25,"",["GetSample"]) - + let getSampleSymbolUseOpt = + backgroundTypedParse1.GetSymbolUseAtLocation(5,25,"",["GetSample"]) + let getSampleSymbol = getSampleSymbolUseOpt.Value.Symbol - - let usesOfGetSampleSymbol = - backgroundTypedParse1.GetUsesOfSymbolInFile(getSampleSymbol) - - |> Array.map (fun s -> (Project25.cleanFileName s.FileName, tups s.Range)) + + let usesOfGetSampleSymbol = + backgroundTypedParse1.GetUsesOfSymbolInFile(getSampleSymbol) + + |> Array.map (fun s -> (Project25.cleanFileName s.FileName, tups s.RangeAlternate)) usesOfGetSampleSymbol |> shouldEqual [|("file1", ((5, 8), (5, 25))); ("file1", ((10, 8), (10, 78)))|] @@ -3734,47 +3720,47 @@ let ``Test Project25 symbol uses of type-provided members`` () = #if NETCOREAPP [] #endif -let ``Test symbol uses of type-provided types`` () = +let ``Test symbol uses of type-provided types`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project25.options) |> Async.RunSynchronously - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options) - |> Async.RunSynchronously - - let getSampleSymbolUseOpt = - backgroundTypedParse1.GetSymbolUseAtLocation(4,26,"",["XmlProvider"]) + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options) + |> Async.RunSynchronously + let getSampleSymbolUseOpt = + backgroundTypedParse1.GetSymbolUseAtLocation(4,26,"",["XmlProvider"]) + let getSampleSymbol = getSampleSymbolUseOpt.Value.Symbol - - let usesOfGetSampleSymbol = - backgroundTypedParse1.GetUsesOfSymbolInFile(getSampleSymbol) - - |> Array.map (fun s -> (Project25.cleanFileName s.FileName, tups s.Range)) + + let usesOfGetSampleSymbol = + backgroundTypedParse1.GetUsesOfSymbolInFile(getSampleSymbol) + + |> Array.map (fun s -> (Project25.cleanFileName s.FileName, tups s.RangeAlternate)) usesOfGetSampleSymbol |> shouldEqual [|("file1", ((4, 15), (4, 26))); ("file1", ((10, 8), (10, 19)))|] [] -let ``Test symbol uses of fully-qualified records`` () = +let ``Test symbol uses of fully-qualified records`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project25.options) |> Async.RunSynchronously - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options) - |> Async.RunSynchronously - - let getSampleSymbolUseOpt = - backgroundTypedParse1.GetSymbolUseAtLocation(7,11,"",["Record"]) + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options) + |> Async.RunSynchronously + let getSampleSymbolUseOpt = + backgroundTypedParse1.GetSymbolUseAtLocation(7,11,"",["Record"]) + let getSampleSymbol = getSampleSymbolUseOpt.Value.Symbol - - let usesOfGetSampleSymbol = - backgroundTypedParse1.GetUsesOfSymbolInFile(getSampleSymbol) - - |> Array.map (fun s -> (Project25.cleanFileName s.FileName, tups s.Range)) + + let usesOfGetSampleSymbol = + backgroundTypedParse1.GetUsesOfSymbolInFile(getSampleSymbol) + + |> Array.map (fun s -> (Project25.cleanFileName s.FileName, tups s.RangeAlternate)) usesOfGetSampleSymbol |> shouldEqual [|("file1", ((7, 5), (7, 11))); ("file1", ((8, 10), (8, 16)))|] -module internal Project26 = +module internal Project26 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3790,7 +3776,7 @@ type Class() = member x.M2([] arg1, [] arg2) = () member x.M3([] arg: byref) = () """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -3800,37 +3786,37 @@ type Class() = [] -let ``Test Project26 whole project errors`` () = +let ``Test Project26 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project26.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project26 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] let ``Test Project26 parameter symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project26.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project13.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project13.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) let objSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.Symbol.DisplayName = "Class") let objEntity = objSymbol.Symbol :?> FSharpEntity - - let rec isByRef (ty: FSharpType) = - if ty.IsAbbreviation then isByRef ty.AbbreviatedType + + let rec isByRef (ty: FSharpType) = + if ty.IsAbbreviation then isByRef ty.AbbreviatedType else ty.HasTypeDefinition && ty.TypeDefinition.IsByRef // check we can get the CurriedParameterGroups - let objMethodsCurriedParameterGroups = - [ for x in objEntity.MembersFunctionsAndValues do - for pg in x.CurriedParameterGroups do + let objMethodsCurriedParameterGroups = + [ for x in objEntity.MembersFunctionsAndValues do + for pg in x.CurriedParameterGroups do for p in pg do - let attributeNames = + let attributeNames = seq { if p.IsParamArrayArg then yield "params" if p.IsOutArg then yield "out" @@ -3839,7 +3825,7 @@ let ``Test Project26 parameter symbols`` () = |> String.concat "," yield x.CompiledName, p.Name, p.Type.ToString(), isByRef p.Type, attributeNames ] - objMethodsCurriedParameterGroups |> shouldEqual + objMethodsCurriedParameterGroups |> shouldEqual [("M1", Some "arg1", "type 'c", false, ""); ("M1", Some "arg2", "type 'd Microsoft.FSharp.Core.option", false, "optional"); ("M2", Some "arg1", "type 'a", false, "params"); @@ -3847,10 +3833,10 @@ let ``Test Project26 parameter symbols`` () = ("M3", Some "arg", "type Microsoft.FSharp.Core.byref", true, "out")] // check we can get the ReturnParameter - let objMethodsReturnParameter = - [ for x in objEntity.MembersFunctionsAndValues do - let p = x.ReturnParameter - let attributeNames = + let objMethodsReturnParameter = + [ for x in objEntity.MembersFunctionsAndValues do + let p = x.ReturnParameter + let attributeNames = seq { if p.IsParamArrayArg then yield "params" if p.IsOutArg then yield "out" @@ -3865,7 +3851,7 @@ let ``Test Project26 parameter symbols`` () = ("M2", None, "type Microsoft.FSharp.Core.unit", ""); ("M3", None, "type Microsoft.FSharp.Core.unit", "")]) -module internal Project27 = +module internal Project27 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3876,41 +3862,41 @@ module M type CFoo() = abstract AbstractMethod: int -> string - default _.AbstractMethod _ = "dflt" - + default __.AbstractMethod _ = "dflt" + type CFooImpl() = inherit CFoo() - override _.AbstractMethod _ = "v" + override __.AbstractMethod _ = "v" """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) - + File.WriteAllText(fileName1, fileSource1) + let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) [] -let ``Test project27 whole project errors`` () = +let ``Test project27 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project27.options) |> Async.RunSynchronously - wholeProjectResults .Diagnostics.Length |> shouldEqual 0 + wholeProjectResults .Errors.Length |> shouldEqual 0 [] -let ``Test project27 all symbols in signature`` () = +let ``Test project27 all symbols in signature`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project27.options) |> Async.RunSynchronously let allSymbols = allSymbolsInEntities true wholeProjectResults.AssemblySignature.Entities - [ for x in allSymbols -> x.ToString(), attribsOfSymbol x ] - |> shouldEqual - [("M", ["module"]); - ("CFoo", ["class"]); + [ for x in allSymbols -> x.ToString(), attribsOfSymbol x ] + |> shouldEqual + [("M", ["module"]); + ("CFoo", ["class"]); ("member .ctor", ["member"; "ctor"]); ("member AbstractMethod", ["slot"; "member"]); - ("member AbstractMethod", ["member"; "overridemem"]); + ("member AbstractMethod", ["member"; "overridemem"]); ("CFooImpl", ["class"]); ("member .ctor", ["member"; "ctor"]); ("member AbstractMethod", ["member"; "overridemem"])] -module internal Project28 = +module internal Project28 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3947,7 +3933,7 @@ type Use() = member x.Test number = TestNumber 42 """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) @@ -3980,9 +3966,9 @@ let ``Test project28 all symbols in signature`` () = [|("FSharpEntity", "M", "T:M"); ("FSharpMemberOrFunctionOrValue", "( |Even|Odd| )", "M:M.|Even|Odd|(System.Int32)"); ("FSharpMemberOrFunctionOrValue", "TestNumber", "M:M.TestNumber(System.Int32)"); - ("FSharpEntity", "DU", "T:M.DU"); + ("FSharpEntity", "DU", "T:M.DU"); ("FSharpUnionCase", "A", "T:M.DU.A"); - ("FSharpField", "Item", "T:M.DU.A"); + ("FSharpField", "Item", "T:M.DU.A"); ("FSharpUnionCase", "B", "T:M.DU.B"); ("FSharpField", "Item", "T:M.DU.B"); ("FSharpEntity", "XmlDocSigTest", "T:M.XmlDocSigTest"); @@ -4014,7 +4000,7 @@ let ``Test project28 all symbols in signature`` () = failwithf "%A does not exist in the collection." x ) #endif -module internal Project29 = +module internal Project29 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4023,9 +4009,9 @@ module internal Project29 = let fileSource1 = """ module M open System.ComponentModel -let f (x: INotifyPropertyChanged) = failwith "" +let f (x: INotifyPropertyChanged) = failwith "" """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) @@ -4033,35 +4019,35 @@ let f (x: INotifyPropertyChanged) = failwith "" [] -let ``Test project29 whole project errors`` () = +let ``Test project29 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project29.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project29 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] -let ``Test project29 event symbols`` () = +let ``Test project29 event symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project29.options) |> Async.RunSynchronously - + let objSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.Symbol.DisplayName = "INotifyPropertyChanged") let objEntity = objSymbol.Symbol :?> FSharpEntity - let objMethodsCurriedParameterGroups = - [ for x in objEntity.MembersFunctionsAndValues do - for pg in x.CurriedParameterGroups do + let objMethodsCurriedParameterGroups = + [ for x in objEntity.MembersFunctionsAndValues do + for pg in x.CurriedParameterGroups do for p in pg do yield x.CompiledName, p.Name, p.Type.Format(objSymbol.DisplayContext) ] - objMethodsCurriedParameterGroups |> shouldEqual + objMethodsCurriedParameterGroups |> shouldEqual [("add_PropertyChanged", Some "value", "PropertyChangedEventHandler"); ("remove_PropertyChanged", Some "value", "PropertyChangedEventHandler")] - + // check we can get the ReturnParameter - let objMethodsReturnParameter = - [ for x in objEntity.MembersFunctionsAndValues do - let p = x.ReturnParameter + let objMethodsReturnParameter = + [ for x in objEntity.MembersFunctionsAndValues do + let p = x.ReturnParameter yield x.DisplayName, p.Name, p.Type.Format(objSymbol.DisplayContext) ] set objMethodsReturnParameter |> shouldEqual (set @@ -4070,7 +4056,7 @@ let ``Test project29 event symbols`` () = ("remove_PropertyChanged", None, "unit")]) -module internal Project30 = +module internal Project30 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4080,57 +4066,57 @@ module internal Project30 = [] module Module open System -type T() = +type T() = [] - member _.Member = 0 + member __.Member = 0 """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) -let ``Test project30 whole project errors`` () = +let ``Test project30 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project30.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project30 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] -let ``Test project30 Format attributes`` () = +let ``Test project30 Format attributes`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project30.options) |> Async.RunSynchronously - + let moduleSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.Symbol.DisplayName = "Module") let moduleEntity = moduleSymbol.Symbol :?> FSharpEntity - - let moduleAttributes = - [ for x in moduleEntity.Attributes do + + let moduleAttributes = + [ for x in moduleEntity.Attributes do yield x.Format(moduleSymbol.DisplayContext), x.Format(FSharpDisplayContext.Empty) ] - moduleAttributes + moduleAttributes |> set - |> shouldEqual + |> shouldEqual (set - [("[ (4))>]", + [("[ (4))>]", "[ (4))>]")]) - + let memberSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.Symbol.DisplayName = "Member") let memberEntity = memberSymbol.Symbol :?> FSharpMemberOrFunctionOrValue - - let memberAttributes = - [ for x in memberEntity.Attributes do + + let memberAttributes = + [ for x in memberEntity.Attributes do yield x.Format(memberSymbol.DisplayContext), x.Format(FSharpDisplayContext.Empty) ] memberAttributes - |> set - |> shouldEqual + |> set + |> shouldEqual (set - [("""[]""", + [("""[]""", """[]""")]) -module internal Project31 = +module internal Project31 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4142,34 +4128,34 @@ open System open System.Collections.Generic open System.Diagnostics let f (x: List<'T>) = failwith "" -let g = Console.ReadKey() +let g = Console.ReadKey() """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) -let ``Test project31 whole project errors`` () = +let ``Test project31 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project31.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project31 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] #if NETCOREAPP [] #endif let ``Test project31 C# type attributes`` () = - if not runningOnMono then + if not runningOnMono then let wholeProjectResults = checker.ParseAndCheckProject(Project31.options) |> Async.RunSynchronously - + let objSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.Symbol.DisplayName = "List") let objEntity = objSymbol.Symbol :?> FSharpEntity let attributes = objEntity.Attributes |> Seq.filter (fun attrib -> attrib.AttributeType.DisplayName <> "__DynamicallyInvokableAttribute") - [ for attrib in attributes do + [ for attrib in attributes do let args = try Seq.toList attrib.ConstructorArguments with _ -> [] let namedArgs = try Seq.toList attrib.NamedArguments with _ -> [] let output = sprintf "%A" (attrib.AttributeType, args, namedArgs) @@ -4184,22 +4170,22 @@ let ``Test project31 C# type attributes`` () = [] let ``Test project31 C# method attributes`` () = - if not runningOnMono then + if not runningOnMono then let wholeProjectResults = checker.ParseAndCheckProject(Project31.options) |> Async.RunSynchronously - + let objSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.Symbol.DisplayName = "Console") let objEntity = objSymbol.Symbol :?> FSharpEntity - - let objMethodsAttributes = - [ for x in objEntity.MembersFunctionsAndValues do - for attrib in x.Attributes do + + let objMethodsAttributes = + [ for x in objEntity.MembersFunctionsAndValues do + for attrib in x.Attributes do let args = try Seq.toList attrib.ConstructorArguments with _ -> [] let namedArgs = try Seq.toList attrib.NamedArguments with _ -> [] yield sprintf "%A" (attrib.AttributeType, args, namedArgs) ] - objMethodsAttributes + objMethodsAttributes |> set - |> shouldEqual + |> shouldEqual (set [ #if !NETCOREAPP "(SecuritySafeCriticalAttribute, [], [])"; @@ -4211,9 +4197,9 @@ let ``Test project31 C# method attributes`` () = [] #endif let ``Test project31 Format C# type attributes`` () = - if not runningOnMono then + if not runningOnMono then let wholeProjectResults = checker.ParseAndCheckProject(Project31.options) |> Async.RunSynchronously - + let objSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.Symbol.DisplayName = "List") let objEntity = objSymbol.Symbol :?> FSharpEntity let attributes = objEntity.Attributes |> Seq.filter (fun attrib -> attrib.AttributeType.DisplayName <> "__DynamicallyInvokableAttribute") @@ -4228,26 +4214,26 @@ let ``Test project31 Format C# type attributes`` () = [] let ``Test project31 Format C# method attributes`` () = - if not runningOnMono then + if not runningOnMono then let wholeProjectResults = checker.ParseAndCheckProject(Project31.options) |> Async.RunSynchronously - + let objSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.Symbol.DisplayName = "Console") let objEntity = objSymbol.Symbol :?> FSharpEntity - - let objMethodsAttributes = - [ for x in objEntity.MembersFunctionsAndValues do + + let objMethodsAttributes = + [ for x in objEntity.MembersFunctionsAndValues do for attrib in x.Attributes -> attrib.Format(objSymbol.DisplayContext) ] - objMethodsAttributes + objMethodsAttributes |> set - |> shouldEqual + |> shouldEqual (set ["[]"; #if !NETCOREAPP "[]"; #endif ]) -module internal Project32 = +module internal Project32 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let sigFileName1 = Path.ChangeExtension(fileName1, ".fsi") @@ -4258,14 +4244,14 @@ module internal Project32 = module Sample let func x = x + 1 """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let sigFileSource1 = """ module Sample val func : int -> int """ - FileSystem.OpenFileForWriteShim(sigFileName1).Write(sigFileSource1) + File.WriteAllText(sigFileName1, sigFileSource1) let cleanFileName a = if a = fileName1 then "file1" elif a = sigFileName1 then "sig1" else "??" let fileNames = [sigFileName1; fileName1] @@ -4274,52 +4260,52 @@ val func : int -> int [] -let ``Test Project32 whole project errors`` () = +let ``Test Project32 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project32.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project32 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] let ``Test Project32 should be able to find sig symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project32.options) |> Async.RunSynchronously - let _sigBackgroundParseResults1, sigBackgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project32.sigFileName1, Project32.options) + let _sigBackgroundParseResults1, sigBackgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project32.sigFileName1, Project32.options) |> Async.RunSynchronously - let sigSymbolUseOpt = sigBackgroundTypedParse1.GetSymbolUseAtLocation(4,5,"",["func"]) + let sigSymbolUseOpt = sigBackgroundTypedParse1.GetSymbolUseAtLocation(4,5,"",["func"]) let sigSymbol = sigSymbolUseOpt.Value.Symbol - - let usesOfSigSymbol = + + let usesOfSigSymbol = [ for su in wholeProjectResults.GetUsesOfSymbol(sigSymbol) do - yield Project32.cleanFileName su.FileName , tups su.Range, attribsOfSymbol su.Symbol ] + yield Project32.cleanFileName su.FileName , tups su.RangeAlternate, attribsOfSymbol su.Symbol ] usesOfSigSymbol |> shouldEqual - [("sig1", ((4, 4), (4, 8)), ["val"]); + [("sig1", ((4, 4), (4, 8)), ["val"]); ("file1", ((3, 4), (3, 8)), ["val"])] [] let ``Test Project32 should be able to find impl symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project32.options) |> Async.RunSynchronously - let _implBackgroundParseResults1, implBackgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project32.fileName1, Project32.options) + let _implBackgroundParseResults1, implBackgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project32.fileName1, Project32.options) |> Async.RunSynchronously - let implSymbolUseOpt = implBackgroundTypedParse1.GetSymbolUseAtLocation(3,5,"",["func"]) + let implSymbolUseOpt = implBackgroundTypedParse1.GetSymbolUseAtLocation(3,5,"",["func"]) let implSymbol = implSymbolUseOpt.Value.Symbol - - let usesOfImplSymbol = + + let usesOfImplSymbol = [ for su in wholeProjectResults.GetUsesOfSymbol(implSymbol) do - yield Project32.cleanFileName su.FileName , tups su.Range, attribsOfSymbol su.Symbol ] + yield Project32.cleanFileName su.FileName , tups su.RangeAlternate, attribsOfSymbol su.Symbol ] usesOfImplSymbol |> shouldEqual - [("sig1", ((4, 4), (4, 8)), ["val"]); + [("sig1", ((4, 4), (4, 8)), ["val"]); ("file1", ((3, 4), (3, 8)), ["val"])] -module internal Project33 = +module internal Project33 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4333,7 +4319,7 @@ type System.Int32 with member x.SetValue (_: int) = () member x.GetValue () = x """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] @@ -4341,30 +4327,30 @@ type System.Int32 with let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) [] -let ``Test Project33 whole project errors`` () = +let ``Test Project33 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project33.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project33 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] let ``Test Project33 extension methods`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project33.options) |> Async.RunSynchronously - let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() - + let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() + let implModuleUse = allSymbolsUses |> Array.find (fun su -> su.Symbol.DisplayName = "Impl") let implModuleDefn = implModuleUse.Symbol :?> FSharpEntity - [ + [ for x in implModuleDefn.MembersFunctionsAndValues -> x.LogicalName, attribsOfSymbol x ] - |> shouldEqual - [("SetValue", ["member"; "extmem"]); + |> shouldEqual + [("SetValue", ["member"; "extmem"]); ("GetValue", ["member"; "extmem"])] -module internal Project34 = +module internal Project34 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4373,11 +4359,11 @@ module internal Project34 = let fileSource1 = """ module Dummy """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] - let args = + let args = [| yield! mkProjectCommandLineArgs (dllName, fileNames) // We use .NET-buit version of System.Data.dll since the tests depend on implementation details @@ -4387,11 +4373,11 @@ module Dummy let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) [] -let ``Test Project34 whole project errors`` () = +let ``Test Project34 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project34.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "Project34 error: <<<%s>>>" e.Message - wholeProjectResults.Diagnostics.Length |> shouldEqual 0 + wholeProjectResults.Errors.Length |> shouldEqual 0 [] #if NETCOREAPP @@ -4399,7 +4385,7 @@ let ``Test Project34 whole project errors`` () = #endif let ``Test project34 should report correct accessibility for System.Data.Listeners`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project34.options) |> Async.RunSynchronously - let rec getNestedEntities (entity: FSharpEntity) = + let rec getNestedEntities (entity: FSharpEntity) = seq { yield entity for e in entity.NestedEntities do yield! getNestedEntities e } @@ -4408,18 +4394,18 @@ let ``Test project34 should report correct accessibility for System.Data.Listene |> List.tryPick (fun asm -> if asm.SimpleName.Contains("System.Data") then Some asm.Contents.Entities else None) |> Option.get |> Seq.collect getNestedEntities - |> Seq.tryFind (fun entity -> - entity.TryFullName - |> Option.map (fun s -> s.Contains("System.Data.Listeners")) + |> Seq.tryFind (fun entity -> + entity.TryFullName + |> Option.map (fun s -> s.Contains("System.Data.Listeners")) |> fun arg -> defaultArg arg false) |> Option.get listenerEntity.Accessibility.IsPrivate |> shouldEqual true let listenerFuncEntity = listenerEntity.NestedEntities - |> Seq.tryFind (fun entity -> - entity.TryFullName - |> Option.map (fun s -> s.Contains("Func")) + |> Seq.tryFind (fun entity -> + entity.TryFullName + |> Option.map (fun s -> s.Contains("Func")) |> fun arg -> defaultArg arg false) |> Option.get @@ -4428,7 +4414,7 @@ let ``Test project34 should report correct accessibility for System.Data.Listene //------------------------------------------------------ -module internal Project35 = +module internal Project35 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4441,7 +4427,7 @@ type Test = let tupleFunction (one:int, two:float, three:string) = float32 (one + int two + int three) """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] @@ -4452,10 +4438,10 @@ type Test = [] let ``Test project35 CurriedParameterGroups should be available for nested functions`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project35.options) |> Async.RunSynchronously - let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() - let findByDisplayName name = + let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() + let findByDisplayName name = Array.find (fun (su:FSharpSymbolUse) -> su.Symbol.DisplayName = name) - + let curriedFunction = allSymbolUses |> findByDisplayName "curriedFunction" match curriedFunction.Symbol with @@ -4505,15 +4491,15 @@ let ``Test project35 CurriedParameterGroups should be available for nested funct //------------------------------------------------------ -module internal Project35b = +module internal Project35b = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fsx") let fileSource1Text = """ #r "System.dll" #r "notexist.dll" """ - let fileSource1 = SourceText.ofString fileSource1Text - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1Text) + let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text + File.WriteAllText(fileName1, fileSource1Text) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] @@ -4523,18 +4509,18 @@ module internal Project35b = let args = mkProjectCommandLineArgs(dllPath, fileNames) let args2 = Array.append args [| "-r:notexist.dll" |] let options = checker.GetProjectOptionsFromCommandLineArgs (projPath, args2) -#else +#else let options = checker.GetProjectOptionsFromScript(fileName1, fileSource1) |> Async.RunSynchronously |> fst #endif [] let ``Test project35b Dependency files for ParseAndCheckFileInProject`` () = - let checkFileResults = + let checkFileResults = checker.ParseAndCheckFileInProject(Project35b.fileName1, 0, Project35b.fileSource1, Project35b.options) |> Async.RunSynchronously - |> function + |> function | _, FSharpCheckFileAnswer.Succeeded(res) -> res - | _ -> failwithf "Parsing aborted unexpectedly..." - for d in checkFileResults.DependencyFiles do + | _ -> failwithf "Parsing aborted unexpectedly..." + for d in checkFileResults.DependencyFiles do printfn "ParseAndCheckFileInProject dependency: %s" d checkFileResults.DependencyFiles |> Array.exists (fun s -> s.Contains "notexist.dll") |> shouldEqual true // The file itself is not a dependency since it is never read from the file system when using ParseAndCheckFileInProject @@ -4543,7 +4529,7 @@ let ``Test project35b Dependency files for ParseAndCheckFileInProject`` () = [] let ``Test project35b Dependency files for GetBackgroundCheckResultsForFileInProject`` () = let _,checkFileResults = checker.GetBackgroundCheckResultsForFileInProject(Project35b.fileName1, Project35b.options) |> Async.RunSynchronously - for d in checkFileResults.DependencyFiles do + for d in checkFileResults.DependencyFiles do printfn "GetBackgroundCheckResultsForFileInProject dependency: %s" d checkFileResults.DependencyFiles |> Array.exists (fun s -> s.Contains "notexist.dll") |> shouldEqual true // The file is a dependency since it is read from the file system when using GetBackgroundCheckResultsForFileInProject @@ -4552,7 +4538,7 @@ let ``Test project35b Dependency files for GetBackgroundCheckResultsForFileInPro [] let ``Test project35b Dependency files for check of project`` () = let checkResults = checker.ParseAndCheckProject(Project35b.options) |> Async.RunSynchronously - for d in checkResults.DependencyFiles do + for d in checkResults.DependencyFiles do printfn "ParseAndCheckProject dependency: %s" d checkResults.DependencyFiles |> Array.exists (fun s -> s.Contains "notexist.dll") |> shouldEqual true checkResults.DependencyFiles |> Array.exists (fun s -> s.Contains Project35b.fileName1) |> shouldEqual true @@ -4565,7 +4551,7 @@ module internal Project36 = let base2 = Path.GetTempFileName() let dllName = Path.ChangeExtension(base2, ".dll") let projFileName = Path.ChangeExtension(base2, ".fsproj") - let fileSource1 = """module Project36 + let fileSource1 = """ type A(i:int) = member x.Value = i @@ -4580,21 +4566,31 @@ let [] lit = 1.0 let notLit = 1.0 let callToOverload = B(5).Overload(4) """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) - -[] -let ``Test project36 FSharpMemberOrFunctionOrValue.IsBaseValue`` () = let keepAssemblyContentsChecker = FSharpChecker.Create(keepAssemblyContents=true) - let options = keepAssemblyContentsChecker.GetProjectOptionsFromCommandLineArgs (Project36.projFileName, Project36.args) + let options = keepAssemblyContentsChecker.GetProjectOptionsFromCommandLineArgs (projFileName, args) let wholeProjectResults = keepAssemblyContentsChecker.ParseAndCheckProject(options) |> Async.RunSynchronously + let declarations = + let checkedFile = wholeProjectResults.AssemblyContents.ImplementationFiles.[0] + match checkedFile.Declarations.[0] with + | FSharpImplementationFileDeclaration.Entity (_, subDecls) -> subDecls + | _ -> failwith "unexpected declaration" + let getExpr exprIndex = + match declarations.[exprIndex] with + | FSharpImplementationFileDeclaration.MemberOrFunctionOrValue(_,_,e) -> e + | FSharpImplementationFileDeclaration.InitAction e -> e + | _ -> failwith "unexpected declaration" - wholeProjectResults.GetAllUsesOfAllSymbols() +[] +let ``Test project36 FSharpMemberOrFunctionOrValue.IsBaseValue`` () = + Project36.wholeProjectResults.GetAllUsesOfAllSymbols() + |> Array.pick (fun (su:FSharpSymbolUse) -> if su.Symbol.DisplayName = "base" then Some (su.Symbol :?> FSharpMemberOrFunctionOrValue) @@ -4603,9 +4599,7 @@ let ``Test project36 FSharpMemberOrFunctionOrValue.IsBaseValue`` () = [] let ``Test project36 FSharpMemberOrFunctionOrValue.IsConstructorThisValue & IsMemberThisValue`` () = - let keepAssemblyContentsChecker = FSharpChecker.Create(keepAssemblyContents=true) - let options = keepAssemblyContentsChecker.GetProjectOptionsFromCommandLineArgs (Project36.projFileName, Project36.args) - let wholeProjectResults = keepAssemblyContentsChecker.ParseAndCheckProject(options) |> Async.RunSynchronously + let wholeProjectResults = Project36.keepAssemblyContentsChecker.ParseAndCheckProject(Project36.options) |> Async.RunSynchronously let declarations = let checkedFile = wholeProjectResults.AssemblyContents.ImplementationFiles.[0] match checkedFile.Declarations.[0] with @@ -4618,31 +4612,29 @@ let ``Test project36 FSharpMemberOrFunctionOrValue.IsConstructorThisValue & IsMe | _ -> failwith "unexpected declaration" // Instead of checking the symbol uses directly, walk the typed tree to check // the correct values are also visible from there. Also note you cannot use - // ThisValue in these cases, this is only used when the symbol + // BasicPatterns.ThisValue in these cases, this is only used when the symbol // is implicit in the constructor - match getExpr 4 with - | Let((b,_),_) -> + match Project36.getExpr 4 with + | BasicPatterns.Let((b,_),_) -> b.IsConstructorThisValue && not b.IsMemberThisValue | _ -> failwith "unexpected expression" |> shouldEqual true - match getExpr 5 with - | FSharpFieldGet(Some(Value x),_,_) -> + match Project36.getExpr 5 with + | BasicPatterns.FSharpFieldGet(Some(BasicPatterns.Value x),_,_) -> x.IsMemberThisValue && not x.IsConstructorThisValue | _ -> failwith "unexpected expression" |> shouldEqual true - match getExpr 6 with - | Call(_,_,_,_,[Value s;_]) -> + match Project36.getExpr 6 with + | BasicPatterns.Call(_,_,_,_,[BasicPatterns.Value s;_]) -> not s.IsMemberThisValue && not s.IsConstructorThisValue | _ -> failwith "unexpected expression" |> shouldEqual true [] let ``Test project36 FSharpMemberOrFunctionOrValue.LiteralValue`` () = - let keepAssemblyContentsChecker = FSharpChecker.Create(keepAssemblyContents=true) - let options = keepAssemblyContentsChecker.GetProjectOptionsFromCommandLineArgs (Project36.projFileName, Project36.args) - let wholeProjectResults = keepAssemblyContentsChecker.ParseAndCheckProject(options) |> Async.RunSynchronously + let wholeProjectResults = Project36.keepAssemblyContentsChecker.ParseAndCheckProject(Project36.options) |> Async.RunSynchronously let project36Module = wholeProjectResults.AssemblySignature.Entities.[0] let lit = project36Module.MembersFunctionsAndValues.[0] shouldEqual true (lit.LiteralValue.Value |> unbox |> (=) 1.) @@ -4650,7 +4642,7 @@ let ``Test project36 FSharpMemberOrFunctionOrValue.LiteralValue`` () = let notLit = project36Module.MembersFunctionsAndValues.[1] shouldEqual true notLit.LiteralValue.IsNone -module internal Project37 = +module internal Project37 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4688,20 +4680,20 @@ module Test = let withTypeArray = 0 [] let withIntArray = 0 - module NestedModule = + module NestedModule = type NestedRecordType = { B : int } [] do () """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let fileSource2 = """ namespace AttrTests [] do () """ - FileSystem.OpenFileForWriteShim(fileName2).Write(fileSource2) + File.WriteAllText(fileName2, fileSource2) let fileNames = [fileName1; fileName2] let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) @@ -4711,13 +4703,13 @@ let ``Test project37 typeof and arrays in attribute constructor arguments`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project37.options) |> Async.RunSynchronously - let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() + let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() for su in allSymbolsUses do match su.Symbol with | :? FSharpMemberOrFunctionOrValue as funcSymbol -> let getAttrArg() = - let arg = funcSymbol.Attributes.[0].ConstructorArguments.[0] |> snd - arg :?> FSharpType + let arg = funcSymbol.Attributes.[0].ConstructorArguments.[0] |> snd + arg :?> FSharpType match funcSymbol.DisplayName with | "withType" -> let t = getAttrArg() @@ -4737,25 +4729,25 @@ let ``Test project37 typeof and arrays in attribute constructor arguments`` () = t.GenericArguments.[0].TypeDefinition.DisplayName |> shouldEqual "int" t.GenericArguments.[1].TypeDefinition.DisplayName |> shouldEqual "int" | "withTypeArray" -> - let attr = funcSymbol.Attributes.[0].ConstructorArguments.[0] |> snd + let attr = funcSymbol.Attributes.[0].ConstructorArguments.[0] |> snd let ta = attr :?> obj[] |> Array.map (fun t -> t :?> FSharpType) ta.[0].TypeDefinition.DisplayName |> shouldEqual "TestUnion" ta.[1].TypeDefinition.DisplayName |> shouldEqual "TestRecord" | "withIntArray" -> - let attr = funcSymbol.Attributes.[0].ConstructorArguments.[0] |> snd + let attr = funcSymbol.Attributes.[0].ConstructorArguments.[0] |> snd let a = attr :?> obj[] |> Array.map (fun t -> t :?> int) - a |> shouldEqual [| 0; 1; 2 |] + a |> shouldEqual [| 0; 1; 2 |] | _ -> () | _ -> () - let mscorlibAsm = - wholeProjectResults.ProjectContext.GetReferencedAssemblies() + let mscorlibAsm = + wholeProjectResults.ProjectContext.GetReferencedAssemblies() |> Seq.find (fun a -> a.SimpleName = "mscorlib") printfn "Attributes found in mscorlib: %A" mscorlibAsm.Contents.Attributes shouldEqual (mscorlibAsm.Contents.Attributes.Count > 0) true - let fsharpCoreAsm = - wholeProjectResults.ProjectContext.GetReferencedAssemblies() + let fsharpCoreAsm = + wholeProjectResults.ProjectContext.GetReferencedAssemblies() |> Seq.find (fun a -> a.SimpleName = "FSharp.Core") printfn "Attributes found in FSharp.Core: %A" fsharpCoreAsm.Contents.Attributes shouldEqual (fsharpCoreAsm.Contents.Attributes.Count > 0) true @@ -4765,35 +4757,35 @@ let ``Test project37 DeclaringEntity`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project37.options) |> Async.RunSynchronously - let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() + let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() for sym in allSymbolsUses do - match sym.Symbol with - | :? FSharpEntity as e when not e.IsNamespace || e.AccessPath.Contains(".") -> + match sym.Symbol with + | :? FSharpEntity as e when not e.IsNamespace || e.AccessPath.Contains(".") -> printfn "checking declaring type of entity '%s' --> '%s', assembly = '%s'" e.AccessPath e.CompiledName (e.Assembly.ToString()) shouldEqual e.DeclaringEntity.IsSome true - match e.CompiledName with - | "AttrTestAttribute" -> + match e.CompiledName with + | "AttrTestAttribute" -> shouldEqual e.AccessPath "AttrTests" - | "int" -> + | "int" -> shouldEqual e.AccessPath "Microsoft.FSharp.Core" shouldEqual e.DeclaringEntity.Value.AccessPath "Microsoft.FSharp" - | "list`1" -> + | "list`1" -> shouldEqual e.AccessPath "Microsoft.FSharp.Collections" shouldEqual e.DeclaringEntity.Value.AccessPath "Microsoft.FSharp" shouldEqual e.DeclaringEntity.Value.DeclaringEntity.IsSome true shouldEqual e.DeclaringEntity.Value.DeclaringEntity.Value.IsNamespace true shouldEqual e.DeclaringEntity.Value.DeclaringEntity.Value.AccessPath "Microsoft" shouldEqual e.DeclaringEntity.Value.DeclaringEntity.Value.DeclaringEntity.Value.DeclaringEntity.IsSome false - | "Attribute" -> + | "Attribute" -> shouldEqual e.AccessPath "System" shouldEqual e.DeclaringEntity.Value.AccessPath "global" - | "NestedRecordType" -> + | "NestedRecordType" -> shouldEqual e.AccessPath "AttrTests.Test.NestedModule" shouldEqual e.DeclaringEntity.Value.AccessPath "AttrTests.Test" shouldEqual e.DeclaringEntity.Value.DeclaringEntity.Value.AccessPath "AttrTests" shouldEqual e.DeclaringEntity.Value.DeclaringEntity.Value.DeclaringEntity.Value.AccessPath "global" | _ -> () - | :? FSharpMemberOrFunctionOrValue as e when e.IsModuleValueOrMember -> + | :? FSharpMemberOrFunctionOrValue as e when e.IsModuleValueOrMember -> printfn "checking declaring type of value '%s', assembly = '%s'" e.CompiledName (e.Assembly.ToString()) shouldEqual e.DeclaringEntity.IsSome true | _ -> () @@ -4814,7 +4806,7 @@ type I<'X> = abstract Method : unit -> unit abstract Generic : named:'X -> unit abstract Generic<'Y> : 'X * 'Y -> unit - abstract Property : int + abstract Property : int [] type B<'Y>() = @@ -4826,7 +4818,7 @@ type B<'Y>() = type A<'XX, 'YY>() = inherit B<'YY>() - + let ev = Event() override this.Method() = () @@ -4843,7 +4835,7 @@ type A<'XX, 'YY>() = member this.Generic<'Y> (a: 'XX, b: 'Y) = () member this.Property = 1 """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) @@ -4854,28 +4846,28 @@ let ``Test project38 abstract slot information`` () = checker.ParseAndCheckProject(Project38.options) |> Async.RunSynchronously let printAbstractSignature (s: FSharpAbstractSignature) = - let printType (t: FSharpType) = + let printType (t: FSharpType) = hash t |> ignore // smoke test to check hash code doesn't loop - (string t).[5 ..] - let args = - (s.AbstractArguments |> Seq.concat |> Seq.map (fun a -> + (string t).[5 ..] + let args = + (s.AbstractArguments |> Seq.concat |> Seq.map (fun a -> (match a.Name with Some n -> n + ":" | _ -> "") + printType a.Type) |> String.concat " * ") |> function "" -> "()" | a -> a let tgen = match s.DeclaringTypeGenericParameters |> Seq.map (fun m -> "'" + m.Name) |> String.concat "," with | "" -> "" - | g -> " original generics: <" + g + ">" + | g -> " original generics: <" + g + ">" let mgen = match s.MethodGenericParameters |> Seq.map (fun m -> "'" + m.Name) |> String.concat "," with | "" -> "" - | g -> "<" + g + ">" + | g -> "<" + g + ">" "type " + printType s.DeclaringType + tgen + " with member " + s.Name + mgen + " : " + args + " -> " + printType s.AbstractReturnType - + let results = let a2ent = wholeProjectResults.AssemblySignature.Entities |> Seq.find (fun e -> e.FullName = "OverrideTests.A`2") a2ent.MembersFunctionsAndValues |> Seq.map (fun m -> - m.CompiledName, (m.ImplementedAbstractSignatures |> Seq.map printAbstractSignature |> List.ofSeq) + m.CompiledName, (m.ImplementedAbstractSignatures |> Seq.map printAbstractSignature |> List.ofSeq) ) |> Array.ofSeq @@ -4903,7 +4895,7 @@ let ``Test project38 abstract slot information`` () = //-------------------------------------------- -module internal Project39 = +module internal Project39 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4913,42 +4905,42 @@ module internal Project39 = module M let functionWithIncompleteSignature x = System.ThisDoesntExist.SomeMethod(x) -let curriedFunctionWithIncompleteSignature (x1:'a) x2 (x3:'a,x4) = +let curriedFunctionWithIncompleteSignature (x1:'a) x2 (x3:'a,x4) = (x2 = x4) |> ignore System.ThisDoesntExist.SomeMethod(x1,x2,x3,x4) -type C() = +type C() = member x.MemberWithIncompleteSignature x = System.ThisDoesntExist.SomeMethod(x) - member x.CurriedMemberWithIncompleteSignature (x1:'a) x2 (x3:'a,x4) = + member x.CurriedMemberWithIncompleteSignature (x1:'a) x2 (x3:'a,x4) = (x2 = x4) |> ignore System.ThisDoesntExist.SomeMethod(x1,x2,x3,x4) -let uses () = +let uses () = functionWithIncompleteSignature (failwith "something") curriedFunctionWithIncompleteSignature (failwith "x1") (failwith "x2") (failwith "x3", failwith "x4") C().MemberWithIncompleteSignature (failwith "something") C().CurriedMemberWithIncompleteSignature (failwith "x1") (failwith "x2") (failwith "x3", failwith "x4") """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) let cleanFileName a = if a = fileName1 then "file1" else "??" [] -let ``Test project39 all symbols`` () = +let ``Test project39 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project39.options) |> Async.RunSynchronously - let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() - let typeTextOfAllSymbolUses = + let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() + let typeTextOfAllSymbolUses = [ for s in allSymbolUses do - match s.Symbol with - | :? FSharpMemberOrFunctionOrValue as mem -> + match s.Symbol with + | :? FSharpMemberOrFunctionOrValue as mem -> if s.Symbol.DisplayName.Contains "Incomplete" then - yield s.Symbol.DisplayName, tups s.Range, + yield s.Symbol.DisplayName, tups s.RangeAlternate, ("full", mem.FullType |> FSharpType.Prettify |> fun p -> p.Format(s.DisplayContext)), ("params", mem.CurriedParameterGroups |> FSharpType.Prettify |> Seq.toList |> List.map (Seq.toList >> List.map (fun p -> p.Type.Format(s.DisplayContext)))), - ("return", mem.ReturnParameter |> FSharpType.Prettify |> fun p -> p.Type.Format(s.DisplayContext)) + ("return", mem.ReturnParameter |> FSharpType.Prettify |> fun p -> p.Type.Format(s.DisplayContext)) | _ -> () ] typeTextOfAllSymbolUses |> shouldEqual [("functionWithIncompleteSignature", ((4, 4), (4, 35)), @@ -4983,7 +4975,7 @@ let ``Test project39 all symbols`` () = //-------------------------------------------- -module internal Project40 = +module internal Project40 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4994,28 +4986,28 @@ module M let f (x: option<_>) = x.IsSome, x.IsNone -[] -type C = - | A +[] +type C = + | A | B of string member x.IsItAnA = match x with A -> true | B _ -> false member x.IsItAnAMethod() = match x with A -> true | B _ -> false -let g (x: C) = x.IsItAnA,x.IsItAnAMethod() +let g (x: C) = x.IsItAnA,x.IsItAnAMethod() """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) let cleanFileName a = if a = fileName1 then "file1" else "??" [] -let ``Test Project40 all symbols`` () = +let ``Test Project40 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project40.options) |> Async.RunSynchronously - let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() - let allSymbolUsesInfo = [ for s in allSymbolUses -> s.Symbol.DisplayName, tups s.Range, attribsOfSymbol s.Symbol ] + let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() + let allSymbolUsesInfo = [ for s in allSymbolUses -> s.Symbol.DisplayName, tups s.RangeAlternate, attribsOfSymbol s.Symbol ] allSymbolUsesInfo |> shouldEqual [("option", ((4, 10), (4, 16)), ["abbrev"]); ("x", ((4, 7), (4, 8)), []); ("x", ((4, 23), (4, 24)), []); @@ -5047,7 +5039,7 @@ let ``Test Project40 all symbols`` () = //-------------------------------------------- -module internal Project41 = +module internal Project41 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") // We need to us a stable name to keep the hashes stable @@ -5074,24 +5066,24 @@ module M let f3 (v : {| X: {| X : int; Y : string |} |}) = v.X.X """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) let cleanFileName a = if a = fileName1 then "file1" else "??" [] -let ``Test project41 all symbols`` () = +let ``Test project41 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project41.options) |> Async.RunSynchronously - let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() - let allSymbolUsesInfo = + let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() + let allSymbolUsesInfo = [ for s in allSymbolUses do - let pos = - match s.Symbol.DeclarationLocation with + let pos = + match s.Symbol.DeclarationLocation with | Some r when r.FileName = Project41.fileName1 -> r.StartLine, r.StartColumn | _ -> (0,0) - yield (s.Symbol.DisplayName, tups s.Range, attribsOfSymbol s.Symbol, pos) ] + yield (s.Symbol.DisplayName, tups s.RangeAlternate, attribsOfSymbol s.Symbol, pos) ] allSymbolUsesInfo |> shouldEqual [("X", ((4, 19), (4, 20)), ["field"; "anon(0, [//<>f__AnonymousType1416859829`1]X)"], (4, 19)); @@ -5140,61 +5132,15 @@ let ``Test project41 all symbols`` () = ("M", ((2, 7), (2, 8)), ["module"], (2, 7))] -module internal Project42 = - - let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") - let fileName2 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") - // We need to us a stable name to keep the hashes stable - let base2 = Path.Combine(Path.GetDirectoryName(Path.GetTempFileName()), "stabletmp.tmp") - let dllName = Path.ChangeExtension(base2, ".dll") - let projFileName = Path.ChangeExtension(base2, ".fsproj") - let fileSource1 = """ -module File1 - -let test() = () - """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) - let fileSource2 = """ -module File2 - -open File1 - -let test2() = test() - """ - FileSystem.OpenFileForWriteShim(fileName2).Write(fileSource2) - let fileNames = [fileName1;fileName2] - let args = mkProjectCommandLineArgs (dllName, fileNames) - let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) - -[] -let ``Test project42 to ensure cached checked results are invalidated`` () = - let text2 = SourceText.ofString(FileSystem.OpenFileForReadShim(Project42.fileName2).ReadAllText()) - let checkedFile2 = checker.ParseAndCheckFileInProject(Project42.fileName2, text2.GetHashCode(), text2, Project42.options) |> Async.RunSynchronously - match checkedFile2 with - | _, FSharpCheckFileAnswer.Succeeded(checkedFile2Results) -> - Assert.IsEmpty(checkedFile2Results.Diagnostics) - FileSystem.OpenFileForWriteShim(Project42.fileName1).Write("""module File1""") - try - let checkedFile2Again = checker.ParseAndCheckFileInProject(Project42.fileName2, text2.GetHashCode(), text2, Project42.options) |> Async.RunSynchronously - match checkedFile2Again with - | _, FSharpCheckFileAnswer.Succeeded(checkedFile2AgainResults) -> - Assert.IsNotEmpty(checkedFile2AgainResults.Diagnostics) // this should contain errors as File1 does not contain the function `test()` - | _ -> - failwith "Project42 failed to check." - finally - FileSystem.OpenFileForWriteShim(Project42.fileName1).Write(Project42.fileSource1) // Revert to the original state of the file - | _ -> - failwith "Project42 failed to check." - -module internal ProjectBig = +module internal ProjectBig = let fileNamesI = [ for i in 1 .. 10 -> (i, Path.ChangeExtension(Path.GetTempFileName(), ".fs")) ] let base2 = Path.GetTempFileName() let dllName = Path.ChangeExtension(base2, ".dll") let projFileName = Path.ChangeExtension(base2, ".fsproj") let fileSources = [ for (i,f) in fileNamesI -> (f, "module M" + string i) ] - for (f,text) in fileSources do FileSystem.OpenFileForWriteShim(f).Write(text) - let fileSources2 = [ for (i,f) in fileSources -> SourceText.ofString f ] + for (f,text) in fileSources do File.WriteAllText(f, text) + let fileSources2 = [ for (i,f) in fileSources -> FSharp.Compiler.Text.SourceText.ofString f ] let fileNames = [ for (_,f) in fileNamesI -> f ] let args = mkProjectCommandLineArgs (dllName, fileNames) @@ -5205,7 +5151,7 @@ module internal ProjectBig = [] // Simplified repro for https://github.com/Microsoft/visualfsharp/issues/2679 -let ``add files with same name from different folders`` () = +let ``add files with same name from different folders`` () = let fileNames = [ __SOURCE_DIRECTORY__ + "/data/samename/folder1/a.fs" __SOURCE_DIRECTORY__ + "/data/samename/folder2/a.fs" ] @@ -5214,15 +5160,15 @@ let ``add files with same name from different folders`` () = let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) let wholeProjectResults = checker.ParseAndCheckProject(options) |> Async.RunSynchronously let errors = - wholeProjectResults.Diagnostics - |> Array.filter (fun x -> x.Severity = FSharpDiagnosticSeverity.Error) + wholeProjectResults.Errors + |> Array.filter (fun x -> x.Severity = FSharpErrorSeverity.Error) if errors.Length > 0 then printfn "add files with same name from different folders" for err in errors do printfn "ERROR: %s" err.Message shouldEqual 0 errors.Length -module internal ProjectStructUnions = +module internal ProjectStructUnions = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -5243,15 +5189,14 @@ let foo (a: Foo): bool = | _ -> false """ - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + File.WriteAllText(fileName1, fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) [] let ``Test typed AST for struct unions`` () = // See https://github.com/fsharp/FSharp.Compiler.Service/issues/756 - let keepAssemblyContentsChecker = FSharpChecker.Create(keepAssemblyContents=true) - let wholeProjectResults = keepAssemblyContentsChecker.ParseAndCheckProject(ProjectStructUnions.options) |> Async.RunSynchronously + let wholeProjectResults = Project36.keepAssemblyContentsChecker.ParseAndCheckProject(ProjectStructUnions.options) |> Async.RunSynchronously let declarations = let checkedFile = wholeProjectResults.AssemblyContents.ImplementationFiles.[0] match checkedFile.Declarations.[0] with @@ -5263,13 +5208,13 @@ let ``Test typed AST for struct unions`` () = // See https://github.com/fsharp/F | FSharpImplementationFileDeclaration.InitAction e -> e | _ -> failwith "unexpected declaration" match getExpr (declarations.Length - 1) with - | IfThenElse(UnionCaseTest(AddressOf(UnionCaseGet _),_,uci), - Const(trueValue, _), Const(falseValue, _)) + | BasicPatterns.IfThenElse(BasicPatterns.UnionCaseTest(BasicPatterns.AddressOf(BasicPatterns.UnionCaseGet _),_,uci), + BasicPatterns.Const(trueValue, _), BasicPatterns.Const(falseValue, _)) when uci.Name = "Ok" && obj.Equals(trueValue, true) && obj.Equals(falseValue, false) -> true | _ -> failwith "unexpected expression" |> shouldEqual true -module internal ProjectLineDirectives = +module internal ProjectLineDirectives = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -5281,8 +5226,8 @@ module M # 10 "Test.fsy" let x = (1 = 3.0) """ - let fileSource1 = SourceText.ofString fileSource1Text - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1Text) + let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text + File.WriteAllText(fileName1, fileSource1Text) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) @@ -5292,22 +5237,22 @@ let ``Test line directives in foreground analysis`` () = // see https://github.c // In background analysis and normal compiler checking, the errors are reported w.r.t. the line directives let wholeProjectResults = checker.ParseAndCheckProject(ProjectLineDirectives.options) |> Async.RunSynchronously - for e in wholeProjectResults.Diagnostics do + for e in wholeProjectResults.Errors do printfn "ProjectLineDirectives wholeProjectResults error file: <<<%s>>>" e.Range.FileName - [ for e in wholeProjectResults.Diagnostics -> e.Range.StartLine, e.Range.EndLine, e.Range.FileName ] |> shouldEqual [(10, 10, "Test.fsy")] + [ for e in wholeProjectResults.Errors -> e.Range.StartLine, e.Range.EndLine, e.Range.FileName ] |> shouldEqual [(10, 10, "Test.fsy")] // In foreground analysis routines, used by visual editing tools, the errors are reported w.r.t. the source // file, which is assumed to be in the editor, not the other files referred to by line directives. - let checkResults1 = - checker.ParseAndCheckFileInProject(ProjectLineDirectives.fileName1, 0, ProjectLineDirectives.fileSource1, ProjectLineDirectives.options) + let checkResults1 = + checker.ParseAndCheckFileInProject(ProjectLineDirectives.fileName1, 0, ProjectLineDirectives.fileSource1, ProjectLineDirectives.options) |> Async.RunSynchronously |> function (_,FSharpCheckFileAnswer.Succeeded x) -> x | _ -> failwith "unexpected aborted" - for e in checkResults1.Diagnostics do + for e in checkResults1.Errors do printfn "ProjectLineDirectives checkResults1 error file: <<<%s>>>" e.Range.FileName - [ for e in checkResults1.Diagnostics -> e.Range.StartLine, e.Range.EndLine, e.Range.FileName ] |> shouldEqual [(5, 5, ProjectLineDirectives.fileName1)] + [ for e in checkResults1.Errors -> e.Range.StartLine, e.Range.EndLine, e.Range.FileName ] |> shouldEqual [(5, 5, ProjectLineDirectives.fileName1)] //------------------------------------------------------ @@ -5322,17 +5267,17 @@ let ``ParseAndCheckFileResults contains ImplFile list if FSharpChecker is create type A(i:int) = member x.Value = i """ - let fileSource1 = SourceText.ofString fileSource1Text - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1Text) + let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text + File.WriteAllText(fileName1, fileSource1Text) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let keepAssemblyContentsChecker = FSharpChecker.Create(keepAssemblyContents=true) let options = keepAssemblyContentsChecker.GetProjectOptionsFromCommandLineArgs (projFileName, args) - - let fileCheckResults = + + let fileCheckResults = keepAssemblyContentsChecker.ParseAndCheckFileInProject(fileName1, 0, fileSource1, options) |> Async.RunSynchronously - |> function + |> function | _, FSharpCheckFileAnswer.Succeeded(res) -> res | _ -> failwithf "Parsing aborted unexpectedly..." @@ -5364,7 +5309,7 @@ let ``#4030, Incremental builder creation warnings`` (args, errorSeverities) = let fileName, options = mkTestFileAndOptions source args let _, checkResults = parseAndCheckFile fileName source options - checkResults.Diagnostics |> Array.map (fun e -> e.Severity = FSharpDiagnosticSeverity.Error) |> shouldEqual errorSeverities + checkResults.Errors |> Array.map (fun e -> e.Severity = FSharpErrorSeverity.Error) |> shouldEqual errorSeverities //------------------------------------------------------ @@ -5385,19 +5330,19 @@ open FSharp.Control // unused open FSharp.Data // unused open System.Globalization // unused -module SomeUnusedModule = +module SomeUnusedModule = let f x = x -module SomeUsedModuleContainingFunction = +module SomeUsedModuleContainingFunction = let g x = x -module SomeUsedModuleContainingActivePattern = +module SomeUsedModuleContainingActivePattern = let (|ActivePattern|) x = x -module SomeUsedModuleContainingExtensionMember = +module SomeUsedModuleContainingExtensionMember = type System.Int32 with member x.Q = 1 -module SomeUsedModuleContainingUnion = +module SomeUsedModuleContainingUnion = type Q = A | B open SomeUnusedModule @@ -5413,28 +5358,28 @@ type UseTheThings(i:int) = member x.UseSomeUsedModuleContainingExtensionMember() = (3).Q member x.UseSomeUsedModuleContainingUnion() = A """ - let fileSource1 = SourceText.ofString fileSource1Text - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1Text) + let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text + File.WriteAllText(fileName1, fileSource1Text) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let keepAssemblyContentsChecker = FSharpChecker.Create(keepAssemblyContents=true) let options = keepAssemblyContentsChecker.GetProjectOptionsFromCommandLineArgs (projFileName, args) - - let fileCheckResults = + + let fileCheckResults = keepAssemblyContentsChecker.ParseAndCheckFileInProject(fileName1, 0, fileSource1, options) |> Async.RunSynchronously - |> function + |> function | _, FSharpCheckFileAnswer.Succeeded(res) -> res | _ -> failwithf "Parsing aborted unexpectedly..." - //let symbolUses = fileCheckResults.GetAllUsesOfAllSymbolsInFile() |> Async.RunSynchronously |> Array.indexed + //let symbolUses = fileCheckResults.GetAllUsesOfAllSymbolsInFile() |> Async.RunSynchronously |> Array.indexed // Fragments used to check hash codes: //(snd symbolUses.[42]).Symbol.IsEffectivelySameAs((snd symbolUses.[37]).Symbol) //(snd symbolUses.[42]).Symbol.GetEffectivelySameAsHash() //(snd symbolUses.[37]).Symbol.GetEffectivelySameAsHash() - let lines = FileSystem.OpenFileForReadShim(fileName1).ReadAllLines() + let lines = File.ReadAllLines(fileName1) let unusedOpens = UnusedOpens.getUnusedOpens (fileCheckResults, (fun i -> lines.[i-1])) |> Async.RunSynchronously let unusedOpensData = [ for uo in unusedOpens -> tups uo, lines.[uo.StartLine-1] ] - let expected = + let expected = [(((4, 5), (4, 23)), "open System.Collections // unused"); (((6, 5), (6, 19)), "open FSharp.Control // unused"); (((7, 5), (7, 16)), "open FSharp.Data // unused"); @@ -5458,19 +5403,19 @@ open FSharp.Control // unused open FSharp.Data // unused open System.Globalization // unused -module SomeUnusedModule = +module SomeUnusedModule = let f x = x -module SomeUsedModuleContainingFunction = +module SomeUsedModuleContainingFunction = let g x = x -module SomeUsedModuleContainingActivePattern = +module SomeUsedModuleContainingActivePattern = let (|ActivePattern|) x = x -module SomeUsedModuleContainingExtensionMember = +module SomeUsedModuleContainingExtensionMember = type System.Int32 with member x.Q = 1 -module SomeUsedModuleContainingUnion = +module SomeUsedModuleContainingUnion = type Q = A | B open SomeUnusedModule @@ -5486,28 +5431,28 @@ type UseTheThings(i:int) = member x.UseSomeUsedModuleContainingExtensionMember() = (3).Q member x.UseSomeUsedModuleContainingUnion() = A """ - let fileSource1 = SourceText.ofString fileSource1Text - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1Text) + let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text + File.WriteAllText(fileName1, fileSource1Text) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let keepAssemblyContentsChecker = FSharpChecker.Create(keepAssemblyContents=true) let options = keepAssemblyContentsChecker.GetProjectOptionsFromCommandLineArgs (projFileName, args) - - let fileCheckResults = + + let fileCheckResults = keepAssemblyContentsChecker.ParseAndCheckFileInProject(fileName1, 0, fileSource1, options) |> Async.RunSynchronously - |> function + |> function | _, FSharpCheckFileAnswer.Succeeded(res) -> res | _ -> failwithf "Parsing aborted unexpectedly..." - //let symbolUses = fileCheckResults.GetAllUsesOfAllSymbolsInFile() |> Async.RunSynchronously |> Array.indexed + //let symbolUses = fileCheckResults.GetAllUsesOfAllSymbolsInFile() |> Async.RunSynchronously |> Array.indexed // Fragments used to check hash codes: //(snd symbolUses.[42]).Symbol.IsEffectivelySameAs((snd symbolUses.[37]).Symbol) //(snd symbolUses.[42]).Symbol.GetEffectivelySameAsHash() //(snd symbolUses.[37]).Symbol.GetEffectivelySameAsHash() - let lines = FileSystem.OpenFileForReadShim(fileName1).ReadAllLines() + let lines = File.ReadAllLines(fileName1) let unusedOpens = UnusedOpens.getUnusedOpens (fileCheckResults, (fun i -> lines.[i-1])) |> Async.RunSynchronously let unusedOpensData = [ for uo in unusedOpens -> tups uo, lines.[uo.StartLine-1] ] - let expected = + let expected = [(((4, 5), (4, 23)), "open System.Collections // unused"); (((6, 5), (6, 19)), "open FSharp.Control // unused"); (((7, 5), (7, 16)), "open FSharp.Data // unused"); @@ -5530,20 +5475,20 @@ open FSharp.Data // unused open System.Globalization // unused [] -module Helpers = - module SomeUnusedModule = +module Helpers = + module SomeUnusedModule = let f x = x - module SomeUsedModuleContainingFunction = + module SomeUsedModuleContainingFunction = let g x = x - module SomeUsedModuleContainingActivePattern = + module SomeUsedModuleContainingActivePattern = let (|ActivePattern|) x = x - module SomeUsedModuleContainingExtensionMember = + module SomeUsedModuleContainingExtensionMember = type System.Int32 with member x.Q = 1 - module SomeUsedModuleContainingUnion = + module SomeUsedModuleContainingUnion = type Q = A | B open SomeUnusedModule @@ -5567,23 +5512,23 @@ module M2 = let foo x = x.Field """ - let fileSource1 = SourceText.ofString fileSource1Text - FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1Text) + let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text + File.WriteAllText(fileName1, fileSource1Text) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let keepAssemblyContentsChecker = FSharpChecker.Create(keepAssemblyContents=true) let options = keepAssemblyContentsChecker.GetProjectOptionsFromCommandLineArgs (projFileName, args) - - let fileCheckResults = + + let fileCheckResults = keepAssemblyContentsChecker.ParseAndCheckFileInProject(fileName1, 0, fileSource1, options) |> Async.RunSynchronously - |> function + |> function | _, FSharpCheckFileAnswer.Succeeded(res) -> res | _ -> failwithf "Parsing aborted unexpectedly..." - let lines = FileSystem.OpenFileForReadShim(fileName1).ReadAllLines() + let lines = File.ReadAllLines(fileName1) let unusedOpens = UnusedOpens.getUnusedOpens (fileCheckResults, (fun i -> lines.[i-1])) |> Async.RunSynchronously let unusedOpensData = [ for uo in unusedOpens -> tups uo, lines.[uo.StartLine-1] ] - let expected = + let expected = [(((2, 5), (2, 23)), "open System.Collections // unused"); (((4, 5), (4, 19)), "open FSharp.Control // unused"); (((5, 5), (5, 16)), "open FSharp.Data // unused"); @@ -5643,32 +5588,3 @@ module Nested = (6, 0), (7, 15) (11, 0), (14, 15) (13, 0), (14, 15) ] - -let checkContentAsScript content = - // can't use the helper function in these tests because `getParseAndCheckResults` doesn't seem to operate in a mode - // that uses the dependency manager (possibly because `useSdkScripts` isn't set/`assumeDotNetFramework` is implicitly - // set). - // because of this we have to do it all manually - let scriptName = "test.fsx" - let tempDir = Path.GetTempPath() - let scriptFullPath = Path.Combine(tempDir, scriptName) - let sourceText = SourceText.ofString content - let projectOptions, _ = checker.GetProjectOptionsFromScript(scriptFullPath, sourceText, useSdkRefs = true, assumeDotNetFramework = false) |> Async.RunSynchronously - let parseOptions, _ = checker.GetParsingOptionsFromProjectOptions projectOptions - let parseResults = checker.ParseFile(scriptFullPath, sourceText, parseOptions) |> Async.RunSynchronously - let checkResults = checker.CheckFileInProject(parseResults, scriptFullPath, 0, sourceText, projectOptions) |> Async.RunSynchronously - match checkResults with - | FSharpCheckFileAnswer.Aborted -> failwith "no check results" - | FSharpCheckFileAnswer.Succeeded r -> r - -[] -let ``References from #r nuget are included in script project options`` () = - let checkResults = checkContentAsScript """ -#r "nuget: Dapper" -""" - let assemblyNames = - checkResults.ProjectContext.GetReferencedAssemblies() - |> Seq.choose (fun f -> f.FileName |> Option.map Path.GetFileName) - |> Seq.distinct - printfn "%s" (assemblyNames |> String.concat "\n") - assemblyNames |> should contain "Dapper.dll" diff --git a/tests/service/ScriptOptionsTests.fs b/tests/service/ScriptOptionsTests.fs index 96205ab5734..9ceae471bd4 100644 --- a/tests/service/ScriptOptionsTests.fs +++ b/tests/service/ScriptOptionsTests.fs @@ -10,9 +10,6 @@ module Tests.Service.ScriptOptions open NUnit.Framework open System.IO open FSharp.Compiler.Service.Tests.Common -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.IO -open FSharp.Compiler.Text.Range open FSharp.Compiler.Text // Add additional imports/constructs into this script text to verify that common scenarios @@ -39,58 +36,22 @@ let ``can generate options for different frameworks regardless of execution envi [] [] [] -let ``all default assembly references are system assemblies``(assumeNetFx, useSdkRefs, flags) = - let tempFile = Path.GetTempFileName() + ".fsx" +let ``all default assembly references are system assemblies``(assumeNetFx, useSdk, flags) = + let path = Path.GetTempPath() + let file = Path.GetTempFileName() + let tempFile = Path.Combine(path, file) let (options, errors) = - checker.GetProjectOptionsFromScript(tempFile, SourceText.ofString scriptSource, assumeDotNetFramework = assumeNetFx, useSdkRefs = useSdkRefs, otherFlags = flags) + checker.GetProjectOptionsFromScript(tempFile, SourceText.ofString scriptSource, assumeDotNetFramework = assumeNetFx, useSdkRefs = useSdk, otherFlags = flags) |> Async.RunSynchronously match errors with | [] -> () - | errors -> failwithf "Error while parsing script with assumeNetFx:%b, useSdkRefs:%b, and otherFlags:%A:\n%A" assumeNetFx useSdkRefs flags errors - for r in options.OtherOptions do - if r.StartsWith("-r:") then + | errors -> failwithf "Error while parsing script with assumeDotNetFramework:%b, useSdkRefs:%b, and otherFlags:%A:\n%A" assumeNetFx useSdk flags errors + for r in options.OtherOptions do + if r.StartsWith("-r:") then let ref = Path.GetFullPath(r.[3..]) let baseName = Path.GetFileNameWithoutExtension(ref) - let projectDir = System.Environment.CurrentDirectory - if not (FSharp.Compiler.FxResolver(assumeNetFx, projectDir, rangeForErrors=range0, useSdkRefs=useSdkRefs, isInteractive=false, sdkDirOverride=None).GetSystemAssemblies().Contains(baseName)) then + if not (FSharp.Compiler.DotNetFrameworkDependencies.systemAssemblies.Contains(baseName)) then printfn "Failing, printing options from GetProjectOptionsFromScript..." for opt in options.OtherOptions do printfn "option: %s" opt - failwithf "expected FSharp.Compiler.DotNetFrameworkDependencies.systemAssemblies to contain '%s' because '%s' is a default reference for a script, (assumeNetFx, useSdk, flags) = %A" baseName ref (assumeNetFx, useSdkRefs, flags) - -// This test atempts to use a bad SDK number 666.666.666 -// -// It's disabled because on CI server the SDK is still being resolved to 5.0.101 by `dotnet --version`. -// -// This must be because of some setting in the CI build scripts - e.g. an environment variable -// that allows SDK resolution to be overriden. I've tried to track this down by looking through -// https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet resolution rules -// and the F# and CI settings but can't find the setting that is causing this. -// -// Because of this the test has been manually verified by running locally. -//[] -let ``sdk dir with dodgy global json gives warning``() = - let tempFile = Path.GetTempFileName() + ".fsx" - let tempPath = Path.GetDirectoryName(tempFile) - let globalJsonPath = Path.Combine(tempPath, "global.json") - FileSystem.OpenFileForWriteShim(globalJsonPath).Write("""{ "sdk": { "version": "666.666.666" } }""") - let (options, errors) = - checker.GetProjectOptionsFromScript(tempFile, SourceText.ofString scriptSource, assumeDotNetFramework = false, useSdkRefs = true, otherFlags = [| |]) - |> Async.RunSynchronously - FileSystem.FileDeleteShim(globalJsonPath) - match errors with - | [] -> - printfn "Failure!" - printfn "tempPath = %A" tempPath - printfn "options = %A" options - let fxResolver = FSharp.Compiler.FxResolver(false, tempPath, rangeForErrors=range0, useSdkRefs=true, isInteractive=false, sdkDirOverride=None) - let result = fxResolver.TryGetDesiredDotNetSdkVersionForDirectory() - printfn "sdkVersion = %A" result - - printfn "options = %A" options - failwith "Expected error while parsing script" - | errors -> - for error in errors do - // {C:\Users\Administrator\AppData\Local\Temp\tmp6F0F.tmp.fsx (0,1)-(0,1) The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' ensure the relevant .NET SDK is installed. The output from 'C:\Program Files\dotnet\dotnet.exe --version' in the script directory was: ' 2.1.300 [C:\Program Files\dotnet\sdk] - Assert.AreEqual(3384, error.ErrorNumber) - Assert.AreEqual(tempFile, error.FileName) + failwithf "expected FSharp.Compiler.DotNetFrameworkDependencies.systemAssemblies to contain '%s' because '%s' is a default reference for a script, (assumeNetFx, useSdk, flags) = %A" baseName ref (assumeNetFx, useSdk, flags) \ No newline at end of file diff --git a/tests/service/ServiceUntypedParseTests.fs b/tests/service/ServiceUntypedParseTests.fs index c609d8d488a..472fc7e2e7f 100644 --- a/tests/service/ServiceUntypedParseTests.fs +++ b/tests/service/ServiceUntypedParseTests.fs @@ -9,14 +9,10 @@ module Tests.Service.ServiceUntypedParseTests open System.IO open FsUnit -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.EditorServices -open FSharp.Compiler.IO +open FSharp.Compiler.Range +open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Service.Tests.Common -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Position +open FSharp.Compiler.SyntaxTree open NUnit.Framework let [] private Marker = "(* marker *)" @@ -43,12 +39,14 @@ let private (=>) (source: string) (expected: CompletionContext option) = match markerPos with | None -> failwithf "Marker '%s' was not found in the source code" Marker | Some markerPos -> - let parseTree = parseSourceCode("C:\\test.fs", source) - let actual = ParsedInput.TryGetCompletionContext(markerPos, parseTree, lines.[Line.toZ markerPos.Line]) - try Assert.AreEqual(expected, actual) - with e -> - printfn "ParseTree: %A" parseTree - reraise() + match parseSourceCode("C:\\test.fs", source) with + | None -> failwith "No parse tree" + | Some parseTree -> + let actual = UntypedParseImpl.TryGetCompletionContext(markerPos, parseTree, lines.[Line.toZ markerPos.Line]) + try Assert.AreEqual(expected, actual) + with e -> + printfn "ParseTree: %A" parseTree + reraise() module AttributeCompletion = [] @@ -135,7 +133,7 @@ let foo8 = () let (SynModuleOrNamespace (decls = decls)) = parseSourceCodeAndGetModule source decls |> List.map (fun decl -> match decl with - | SynModuleDecl.Let (_, [SynBinding (attributes = attributeLists)], _) -> + | SynModuleDecl.Let (_, [Binding (attributes = attributeLists)], _) -> attributeLists |> List.map (fun list -> list.Attributes.Length, getRangeCoords list.Range) | _ -> failwith "Could not get binding") |> shouldEqual @@ -200,7 +198,7 @@ module TypeMemberRanges = let getTypeMemberRange source = let (SynModuleOrNamespace (decls = decls)) = parseSourceCodeAndGetModule source match decls with - | [ SynModuleDecl.Types ([ SynTypeDefn (_, SynTypeDefnRepr.ObjectModel (_, memberDecls, _), _, _, _) ], _) ] -> + | [ SynModuleDecl.Types ([ TypeDefn (_, SynTypeDefnRepr.ObjectModel (_, memberDecls, _), _, _) ], _) ] -> memberDecls |> List.map (fun memberDecl -> getRangeCoords memberDecl.Range) | _ -> failwith "Could not get member" @@ -672,46 +670,6 @@ add2 x y let parseFileResults, _ = getParseAndCheckResults source Assert.True(parseFileResults.IsPosContainedInApplication (mkPos 3 6), "Pos should be in application") - [] - let ``IsPosContainedInApplication - inside computation expression - no``() = - let source = """ -async { - sqrt -} -""" - let parseFileResults, _ = getParseAndCheckResults source - Assert.False(parseFileResults.IsPosContainedInApplication (mkPos 2 5), "Pos should not be in application") - - [] - let ``IsPosContainedInApplication - inside CE return - no``() = - let source = """ -async { - return sqrt -} -""" - let parseFileResults, _ = getParseAndCheckResults source - Assert.False(parseFileResults.IsPosContainedInApplication (mkPos 2 5), "Pos should not be in application") - - [] - let ``IsPosContainedInApplication - inside CE - yes``() = - let source = """ -let myAdd x y = x + y -async { - return myAdd 1 -} - """ - let parseFileResults, _ = getParseAndCheckResults source - Assert.False(parseFileResults.IsPosContainedInApplication (mkPos 3 18), "Pos should not be in application") - - [] - let ``IsPosContainedInApplication - inside type application``() = - let source = """ -let f<'x> x = () -f - """ - let parseFileResults, _ = getParseAndCheckResults source - Assert.True(parseFileResults.IsPosContainedInApplication (mkPos 3 6), "A type application is an application, expected True.") - [] let ``TryRangeOfFunctionOrMethodBeingApplied - no application``() = let source = """ @@ -828,184 +786,6 @@ add2 1 2 |> tups |> shouldEqual ((3, 17), (3, 18)) - [] - let ``TryRangeOfFunctionOrMethodBeingApplied - inside CE``() = - let source = """ -let myAdd x y = x + y -async { - return myAdd 1 -} -""" - let parseFileResults, _ = getParseAndCheckResults source - let res = parseFileResults.TryRangeOfFunctionOrMethodBeingApplied (mkPos 4 18) - match res with - | None -> Assert.Fail("Expected 'myAdd' but got nothing") - | Some range -> - range - |> tups - |> shouldEqual ((4, 11), (4, 16)) - - [] - let ``TryRangeOfFunctionOrMethodBeingApplied - inside lambda - binding``() = - let source = """ -let add n1 n2 = n1 + n2 -let lst = [1; 2; 3] -let mapped = - lst |> List.map (fun n -> - let sum = add - n.ToString() - ) -""" - let parseFileResults, _ = getParseAndCheckResults source - let res = parseFileResults.TryRangeOfFunctionOrMethodBeingApplied (mkPos 6 21) - match res with - | None -> Assert.Fail("Expected 'add' but got nothing") - | Some range -> - range - |> tups - |> shouldEqual ((6, 18), (6, 21)) - - [] - let ``TryRangeOfFunctionOrMethodBeingApplied - inside lambda - if expression``() = - let source = """ -let add n1 n2 = n1 + n2 -let lst = [1; 2; 3] -let mapped = - lst |> List.map (fun n -> - if true then - add - else - match add 1 2 with - | 0 when 0 = 0 -> add 1 2 - | _ -> add 1 2 - ) -""" - let parseFileResults, _ = getParseAndCheckResults source - let res = parseFileResults.TryRangeOfFunctionOrMethodBeingApplied (mkPos 7 15) - match res with - | None -> Assert.Fail("Expected 'add' but got nothing") - | Some range -> - range - |> tups - |> shouldEqual ((7, 12), (7, 15)) - - [] - let ``TryRangeOfFunctionOrMethodBeingApplied - inside lambda - match expression``() = - let source = """ -let add n1 n2 = n1 + n2 -let lst = [1; 2; 3] -let mapped = - lst |> List.map (fun n -> - if true then - add - else - match add 1 2 with - | 0 when 0 = 0 -> add 1 2 - | _ -> add 1 2 - ) -""" - let parseFileResults, _ = getParseAndCheckResults source - let res = parseFileResults.TryRangeOfFunctionOrMethodBeingApplied (mkPos 7 15) - match res with - | None -> Assert.Fail("Expected 'add' but got nothing") - | Some range -> - range - |> tups - |> shouldEqual ((7, 12), (7, 15)) - - [] - let ``TryRangeOfFunctionOrMethodBeingApplied - inside lambda - match expr``() = - let source = """ -let add n1 n2 = n1 + n2 -let lst = [1; 2; 3] -let mapped = - lst |> List.map (fun n -> - if true then - add - else - match add with - | 0 when 0 = 0 -> add 1 2 - | _ -> add 1 2 - ) -""" - let parseFileResults, _ = getParseAndCheckResults source - let res = parseFileResults.TryRangeOfFunctionOrMethodBeingApplied (mkPos 9 21) - match res with - | None -> Assert.Fail("Expected 'add' but got nothing") - | Some range -> - range - |> tups - |> shouldEqual ((9, 18), (9, 21)) - - [] - let ``TryRangeOfFunctionOrMethodBeingApplied - inside lambda - match case``() = - let source = """ -let add n1 n2 = n1 + n2 -let lst = [1; 2; 3] -let mapped = - lst |> List.map (fun n -> - if true then - add - else - match add 1 2 with - | 0 when 0 = 0 -> add 1 2 - | _ -> add - ) -""" - let parseFileResults, _ = getParseAndCheckResults source - let res = parseFileResults.TryRangeOfFunctionOrMethodBeingApplied (mkPos 11 22) - match res with - | None -> Assert.Fail("Expected 'add' but got nothing") - | Some range -> - range - |> tups - |> shouldEqual ((11, 19), (11, 22)) - - [] - let ``TryRangeOfFunctionOrMethodBeingApplied - inside method call``() = - let source = """ -type C() = static member Yeet(x, y, z) = () -C.Yeet(1, 2, sqrt) -""" - let parseFileResults, _ = getParseAndCheckResults source - let res = parseFileResults.TryRangeOfFunctionOrMethodBeingApplied (mkPos 3 17) - match res with - | None -> Assert.Fail("Expected 'sqrt' but got nothing") - | Some range -> - range - |> tups - |> shouldEqual ((3, 13), (3, 17)) - - [] - let ``TryRangeOfFunctionOrMethodBeingApplied - inside method call - parenthesized lambda``() = - let source = """ -type C() = static member Yeet(x, y, z) = () -C.Yeet(1, 2, (fun x -> sqrt)) -""" - let parseFileResults, _ = getParseAndCheckResults source - let res = parseFileResults.TryRangeOfFunctionOrMethodBeingApplied (mkPos 3 27) - match res with - | None -> Assert.Fail("Expected 'sqrt' but got nothing") - | Some range -> - range - |> tups - |> shouldEqual ((3, 23), (3, 27)) - - [] - let ``TryRangeOfFunctionOrMethodBeingApplied - generic-typed app``() = - let source = """ -let f<'x> x = () -f -""" - let parseFileResults, _ = getParseAndCheckResults source - let res = parseFileResults.TryRangeOfFunctionOrMethodBeingApplied (mkPos 3 6) - match res with - | None -> Assert.Fail("Expected 'f' but got nothing") - | Some range -> - range - |> tups - |> shouldEqual ((3, 0), (3, 1)) - module PipelinesAndArgs = [] let ``TryIdentOfPipelineContainingPosAndNumArgsApplied - No pipeline, no infix app``() = @@ -1068,21 +848,6 @@ let square x = x * | None -> Assert.Fail("No pipeline found") - [] - let ``TryIdentOfPipelineContainingPosAndNumArgsApplied - none when inside lambda``() = - let source = """ -let add n1 n2 = n1 + n2 -let lst = [1; 2; 3] -let mapped = - lst |> List.map (fun n -> - let sum = add 1 - n.ToString() - ) - """ - let parseFileResults, _ = getParseAndCheckResults source - let res = parseFileResults.TryIdentOfPipelineContainingPosAndNumArgsApplied (mkPos 6 22) - Assert.IsTrue(res.IsNone, "Inside a lambda but counted the pipeline outside of that lambda.") - [] let ``TryRangeOfExprInYieldOrReturn - not contained``() = let source = """ @@ -1236,245 +1001,3 @@ let f x = |> shouldEqual ((6, 8), (6, 9)) | None -> Assert.Fail("Expected to get a range back, but got none.") - -module TypeAnnotations = - [] - let ``IsTypeAnnotationGivenAtPosition - function - no annotation``() = - let source = """ -let f x = () -""" - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 6), "Expected no annotation for argument 'x'") - - [] - let ``IsTypeAnnotationGivenAtPosition - function - single arg annotation``() = - let source = """ -let f (x: int) = () -""" - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 7), "Expected annotation for argument 'x'") - - [] - let ``IsTypeAnnotationGivenAtPosition - function - first arg annotated``() = - let source = """ -let f (x: int) y = () -""" - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 7), "Expected annotation for argument 'x'") - Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 15), "Expected no annotation for argument 'x'") - - [] - let ``IsTypeAnnotationGivenAtPosition - function - second arg annotated``() = - let source = """ -let f x (y: string) = () -""" - let parseFileResults, _ = getParseAndCheckResults source - Assert.False(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 7), "Expected no annotation for argument 'x'") - Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 9), "Expected annotation for argument 'y'") - - [] - let ``IsTypeAnnotationGivenAtPosition - function - all args annotated``() = - let source = """ -let f (x: int) (y: string) = () -""" - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 7), "Expected annotation for argument 'x'") - Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 16), "Expected annotation for argument 'y'") - - [] - let ``IsTypeAnnotationGivenAtPosition - lambda function - all args annotated``() = - let source = """ -let f = fun (x: int) (y: string) -> () -""" - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 13), "Expected a annotation for argument 'x'") - Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 22), "Expected a annotation for argument 'y'") - - [] - let ``IsTypeAnnotationGivenAtPosition - constuctor - arg no annotations``() = - let source = """ -type C(x) = class end -""" - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 7), "Expected no annotation for argument 'x'") - - [] - let ``IsTypeAnnotationGivenAtPosition - constuctor - first arg unannotated``() = - let source = """ -type C(x, y: string) = class end -""" - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 7), "Expected no annotation for argument 'x'") - Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 10), "Expected annotation for argument 'y'") - - [] - let ``IsTypeAnnotationGivenAtPosition - constuctor - second arg unannotated``() = - let source = """ -type C(x: int, y) = class end - """ - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 7), "Expected annotation for argument 'x'") - Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 15), "Expected no annotation for argument 'y'") - - [] - let ``IsTypeAnnotationGivenAtPosition - constuctor - both args annotated``() = - let source = """ -type C(x: int, y: int) = class end - """ - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 7), "Expected annotation for argument 'x'") - Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 15), "Expected annotation for argument 'y'") - - [] - let ``IsTypeAnnotationGivenAtPosition - method - args no unannotions``() = - let source = """ -type C() = - member _.M(x, y) = () -""" - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 15), "Expected no annotation for argument 'x'") - Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 18), "Expected no annotation for argument 'y'") - - [] - let ``IsTypeAnnotationGivenAtPosition - method - first arg annotated``() = - let source = """ -type C() = - member _.M(x: int, y) = () - """ - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 15), "Expected annotation for argument 'x'") - Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 23), "Expected no annotation for argument 'y'") - - [] - let ``IsTypeAnnotationGivenAtPosition - method - second arg annotated``() = - let source = """ -type C() = - member _.M(x, y: int) = () - """ - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 15), "Expected no annotation for argument 'x'") - Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 18), "Expected annotation for argument 'y'") - - [] - let ``IsTypeAnnotationGivenAtPosition - method - both args annotated``() = - let source = """ -type C() = - member _.M(x: int, y: string) = () -""" - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 15), "Expected annotation for argument 'x'") - Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 23), "Expected annotation for argument 'y'") - - [] - let ``IsTypeAnnotationGivenAtPosition - method currying - args no unannotions``() = - let source = """ -type C() = - member _.M x y = () -""" - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 15), "Expected no annotation for argument 'x'") - Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 17), "Expected no annotation for argument 'y'") - - [] - let ``IsTypeAnnotationGivenAtPosition - method currying - first arg annotated``() = - let source = """ -type C() = - member _.M (x: int) y = () - """ - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 16), "Expected annotation for argument 'x'") - Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 24), "Expected no annotation for argument 'y'") - - [] - let ``IsTypeAnnotationGivenAtPosition - method currying - second arg annotated``() = - let source = """ -type C() = - member _.M x (y: int) = () - """ - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 16), "Expected no annotation for argument 'x'") - Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 18), "Expected annotation for argument 'y'") - - [] - let ``IsTypeAnnotationGivenAtPosition - method currying - both args annotated``() = - let source = """ -type C() = - member _.M (x: int) (y: string) = () -""" - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 16), "Expected annotation for argument 'x'") - Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 25), "Expected annotation for argument 'y'") - - [] - let ``IsTypeAnnotationGivenAtPosition - method - only return type annotated``() = - let source = """ -type C() = - member _.M(x): string = "hello" + x -""" - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 15), "Expected no annotation for argument 'x'") - - [] - let ``IsTypeAnnotationGivenAtPosition - tuple - no annotations``() = - let source = """ -let (x, y) = (12, "hello") -""" - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 5), "Expected no annotation for value 'x'") - Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 8), "Expected no annotation for value 'y'") - - [] - let ``IsTypeAnnotationGivenAtPosition - tuple - first value annotated``() = - let source = """ -let (x: int, y) = (12, "hello") -""" - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 5), "Expected annotation for argument 'x'") - Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 13), "Expected no annotation for argument 'y'") - - [] - let ``IsTypeAnnotationGivenAtPosition - tuple - second value annotated``() = - let source = """ -let (x, y: string) = (12, "hello") -""" - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 5), "Expected no annotation for argument 'x'") - Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 8), "Expected annotation for argument 'y'") - -module LambdaRecognition = - [] - let ``IsBindingALambdaAtPosition - recognize a lambda``() = - let source = """ -let f = fun x y -> x + y - """ - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsTrue(parseFileResults.IsBindingALambdaAtPosition (mkPos 2 4), "Expected 'f' to be a lambda expression") - - [] - let ``IsBindingALambdaAtPosition - recognize a nested lambda``() = - let source = """ -let f = - fun x -> - fun y -> - x + y - """ - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsTrue(parseFileResults.IsBindingALambdaAtPosition (mkPos 2 4), "Expected 'f' to be a lambda expression") - - [] - let ``IsBindingALambdaAtPosition - recognize a "partial" lambda``() = - let source = """ -let f x = - fun y -> - x + y - """ - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsTrue(parseFileResults.IsBindingALambdaAtPosition (mkPos 2 4), "Expected 'f' to be a lambda expression") - - [] - let ``IsBindingALambdaAtPosition - not a lambda``() = - let source = """ -let f x y = x + y - """ - let parseFileResults, _ = getParseAndCheckResults source - Assert.IsFalse(parseFileResults.IsBindingALambdaAtPosition (mkPos 2 4), "'f' is not a lambda expression'") diff --git a/tests/service/StructureTests.fs b/tests/service/StructureTests.fs index cb9f1a6d0c8..8fc1fb6dc7b 100644 --- a/tests/service/StructureTests.fs +++ b/tests/service/StructureTests.fs @@ -9,10 +9,10 @@ module Tests.Service.StructureTests open System.IO open NUnit.Framework -open FSharp.Compiler.EditorServices -open FSharp.Compiler.EditorServices.Structure +open FSharp.Compiler.Range +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.SourceCodeServices.Structure open FSharp.Compiler.Service.Tests.Common -open FSharp.Compiler.Text open System.Text let fileName = Path.Combine (__SOURCE_DIRECTORY__, __SOURCE_FILE__) @@ -42,15 +42,18 @@ let (=>) (source: string) (expectedRanges: (Range * Range) list) = let ast = parseSourceCode(fileName, source) try - let actual = - Structure.getOutliningRanges lines ast - |> Seq.filter (fun sr -> sr.Range.StartLine <> sr.Range.EndLine) - |> Seq.map (fun sr -> getRange sr.Range, getRange sr.CollapseRange) - |> Seq.sort - |> List.ofSeq - let expected = List.sort expectedRanges - if actual <> expected then - failwithf "Expected %s, but was %s" (formatList expected) (formatList actual) + match ast with + | Some tree -> + let actual = + Structure.getOutliningRanges lines tree + |> Seq.filter (fun sr -> sr.Range.StartLine <> sr.Range.EndLine) + |> Seq.map (fun sr -> getRange sr.Range, getRange sr.CollapseRange) + |> Seq.sort + |> List.ofSeq + let expected = List.sort expectedRanges + if actual <> expected then + failwithf "Expected %s, but was %s" (formatList expected) (formatList actual) + | None -> failwithf "Expected there to be a parse tree for source:\n%s" source with _ -> printfn "AST:\n%+A" ast reraise() @@ -651,11 +654,11 @@ type T() = """ => [ (2, 5, 11, 12), (2, 7, 11, 12) (3, 4, 4, 12), (3, 7, 4, 12) - (3, 4, 4, 12), (3, 10, 4, 12) + (3, 4, 4, 12), (4, 8, 4, 12) (6, 4, 7, 12), (6, 16, 7, 12) - (6, 4, 7, 12), (6, 19, 7, 12) + (6, 4, 7, 12), (7, 8, 7, 12) (9, 4, 11, 12), (10, 7, 11, 12) - (9, 4, 11, 12), (10, 10, 11, 12) ] + (9, 4, 11, 12), (11, 8, 11, 12) ] [] diff --git a/tests/service/Symbols.fs b/tests/service/Symbols.fs index 6bffb542035..4de3f1ed799 100644 --- a/tests/service/Symbols.fs +++ b/tests/service/Symbols.fs @@ -8,11 +8,8 @@ module Tests.Service.Symbols #endif open FSharp.Compiler.Service.Tests.Common -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Symbols -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.SyntaxTree open FsUnit open NUnit.Framework @@ -43,7 +40,7 @@ match "foo" with checkResults.GetAllUsesOfAllSymbolsInFile() |> Array.ofSeq - |> Array.filter (fun su -> su.Range.StartLine = line && su.Symbol :? FSharpActivePatternCase) + |> Array.filter (fun su -> su.RangeAlternate.StartLine = line && su.Symbol :? FSharpActivePatternCase) |> Array.map (fun su -> su.Symbol :?> FSharpActivePatternCase) [] @@ -77,8 +74,8 @@ extern int private c() |> List.zip decls |> List.iter (fun (actual, expected) -> match actual with - | SynModuleDecl.Let (_, [SynBinding (accessibility = access)], _) -> access |> should equal expected - | decl -> Assert.Fail (sprintf "unexpected decl: %O" decl)) + | SynModuleDecl.Let (_, [Binding (accessibility = access)], _) -> access |> should equal expected + | decl -> failwithf "unexpected decl: %O" decl) [ "a", (true, false, false, false) "b", (true, false, false, false) @@ -89,23 +86,8 @@ extern int private c() let access = mfv.Accessibility (access.IsPublic, access.IsProtected, access.IsInternal, access.IsPrivate) |> should equal expected - | _ -> Assert.Fail (sprintf "Couldn't get mfv: %s" name)) + | _ -> failwithf "Couldn't get mfv: %s" name) - [] - let ``Range of attribute should be included in SynDecl.Let and SynBinding`` () = - let parseResults = - getParseResults - """ -[] -extern int AccessibleChildren()""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.Let(false, [ SynBinding(range = mb) ] , ml) - ]) ])) -> - assertRange (2, 0) (3, 31) ml - assertRange (2, 0) (3, 31) mb - | _ -> Assert.Fail "Could not get valid AST" module XmlDocSig = @@ -209,7 +191,7 @@ type E = Ns1.Ns2.T entity.AbbreviatedType.Format(symbolUse.DisplayContext) |> should equal expectedPrintedType - | _ -> Assert.Fail (sprintf "Couldn't get entity: %s" symbolName)) + | _ -> failwithf "Couldn't get entity: %s" symbolName) [] let ``FSharpType.Format can use prefix representations`` () = @@ -227,7 +209,7 @@ let tester: int folks = Cons(1, Nil) | :? FSharpMemberOrFunctionOrValue as v -> v.FullType.Format (symbolUse.DisplayContext.WithPrefixGenericParameters()) |> should equal prefixForm - | _ -> Assert.Fail (sprintf "Couldn't get member: %s" entity) + | _ -> failwithf "Couldn't get member: %s" entity [] let ``FSharpType.Format can use suffix representations`` () = @@ -245,7 +227,7 @@ let tester: Folks = Cons(1, Nil) | :? FSharpMemberOrFunctionOrValue as v -> v.FullType.Format (symbolUse.DisplayContext.WithSuffixGenericParameters()) |> should equal suffixForm - | _ -> Assert.Fail (sprintf "Couldn't get member: %s" entity) + | _ -> failwithf "Couldn't get member: %s" entity [] let ``FSharpType.Format defaults to derived suffix representations`` () = @@ -270,959 +252,5 @@ let tester2: int Group = [] | :? FSharpMemberOrFunctionOrValue as v -> v.FullType.Format (symbolUse.DisplayContext) |> should equal expectedTypeFormat - | _ -> Assert.Fail (sprintf "Couldn't get member: %s" entityName) + | _ -> failwithf "Couldn't get member: %s" entityName ) - - [] - let ``Single SynEnumCase contains range of constant`` () = - let parseResults = - getParseResults - """ -type Foo = One = 0x00000001 -""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.Types(typeDefns = [ - SynTypeDefn.SynTypeDefn(typeRepr = - SynTypeDefnRepr.Simple(simpleRepr = SynTypeDefnSimpleRepr.Enum(cases = [ SynEnumCase.SynEnumCase(valueRange = r) ])))]) - ]) ])) -> - assertRange (2, 17) (2, 27) r - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Multiple SynEnumCase contains range of constant`` () = - let parseResults = - getParseResults - """ -type Foo = - | One = 0x00000001 - | Two = 2 -""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.Types(typeDefns = [ - SynTypeDefn.SynTypeDefn(typeRepr = - SynTypeDefnRepr.Simple(simpleRepr = SynTypeDefnSimpleRepr.Enum(cases = [ SynEnumCase.SynEnumCase(valueRange = r1) - SynEnumCase.SynEnumCase(valueRange = r2) ])))]) - ]) ])) -> - assertRange (3, 13) (3, 23) r1 - assertRange (4, 12) (4, 13) r2 - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of attribute should be included in SynTypeDefn`` () = - let parseResults = - getParseResults - """ -[] -type Bar = - class - end""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.Types(typeDefns = [t]) as types - ]) ])) -> - assertRange (2, 0) (5, 7) types.Range - assertRange (2, 0) (5, 7) t.Range - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of attributes should be included in recursive types`` () = - let parseResults = - getParseResults - """ -[] -type Foo<'context, 'a> = - | Apply of ApplyCrate<'context, 'a> - -and [] Bar<'context, 'a> = - internal { - Hash : int - Foo : Foo<'a, 'b> - }""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.Types(typeDefns = [t1;t2]) as types - ]) ])) -> - assertRange (2, 0) (10, 5) types.Range - assertRange (2, 0) (4, 39) t1.Range - assertRange (6, 4) (10, 5) t2.Range - | _ -> Assert.Fail "Could not get valid AST" - -module SyntaxExpressions = - [] - let ``SynExpr.Do contains the range of the do keyword`` () = - let ast = """let a = - do - foobar - do! - foobarBang -""" - |> getParseResults - - match ast with - | ParsedInput.ImplFile(ParsedImplFileInput(modules = [ - SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.Let(bindings = [ - SynBinding(expr = SynExpr.Sequential(expr1 = SynExpr.Do(_, doRange) ; expr2 = SynExpr.DoBang(_, doBangRange))) - ]) - ]) - ])) -> - assertRange (2, 4) (3, 14) doRange - assertRange (4, 4) (5, 18) doBangRange - | _ -> - Assert.Fail "Could not find SynExpr.Do" - -module Strings = - let getBindingExpressionValue (parseResults: ParsedInput) = - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = modules)) -> - modules |> List.tryPick (fun (SynModuleOrNamespace (decls = decls)) -> - decls |> List.tryPick (fun decl -> - match decl with - | SynModuleDecl.Let (bindings = bindings) -> - bindings |> List.tryPick (fun binding -> - match binding with - | SynBinding.SynBinding (_,_,_,_,_,_,_,(SynPat.Named _|SynPat.As(_,SynPat.Named _,_)),_,e,_,_) -> Some e - | _ -> None) - | _ -> None)) - | _ -> None - - let getBindingConstValue parseResults = - match getBindingExpressionValue parseResults with - | Some (SynExpr.Const(c,_)) -> Some c - | _ -> None - - [] - let ``SynConst.String with SynStringKind.Regular`` () = - let parseResults = - getParseResults - """ - let s = "yo" - """ - - match getBindingConstValue parseResults with - | Some (SynConst.String (_, kind, _)) -> kind |> should equal SynStringKind.Regular - | _ -> Assert.Fail "Couldn't find const" - - [] - let ``SynConst.String with SynStringKind.Verbatim`` () = - let parseResults = - getParseResults - """ - let s = @"yo" - """ - - match getBindingConstValue parseResults with - | Some (SynConst.String (_, kind, _)) -> kind |> should equal SynStringKind.Verbatim - | _ -> Assert.Fail "Couldn't find const" - - [] - let ``SynConst.String with SynStringKind.TripleQuote`` () = - let parseResults = - getParseResults - " - let s = \"\"\"yo\"\"\" - " - - match getBindingConstValue parseResults with - | Some (SynConst.String (_, kind, _)) -> kind |> should equal SynStringKind.TripleQuote - | _ -> Assert.Fail "Couldn't find const" - - [] - let ``SynConst.Bytes with SynByteStringKind.Regular`` () = - let parseResults = - getParseResults - """ -let bytes = "yo"B - """ - - match getBindingConstValue parseResults with - | Some (SynConst.Bytes (_, kind, _)) -> kind |> should equal SynByteStringKind.Regular - | _ -> Assert.Fail "Couldn't find const" - - [] - let ``SynConst.Bytes with SynByteStringKind.Verbatim`` () = - let parseResults = - getParseResults - """ -let bytes = @"yo"B - """ - - match getBindingConstValue parseResults with - | Some (SynConst.Bytes (_, kind, _)) -> kind |> should equal SynByteStringKind.Verbatim - | _ -> Assert.Fail "Couldn't find const" - - [] - let ``SynExpr.InterpolatedString with SynStringKind.TripleQuote`` () = - let parseResults = - getParseResults - " - let s = $\"\"\"yo {42}\"\"\" - " - - match getBindingExpressionValue parseResults with - | Some (SynExpr.InterpolatedString(_, kind, _)) -> kind |> should equal SynStringKind.TripleQuote - | _ -> Assert.Fail "Couldn't find const" - - [] - let ``SynExpr.InterpolatedString with SynStringKind.Regular`` () = - let parseResults = - getParseResults - """ - let s = $"yo {42}" - """ - - match getBindingExpressionValue parseResults with - | Some (SynExpr.InterpolatedString(_, kind, _)) -> kind |> should equal SynStringKind.Regular - | _ -> Assert.Fail "Couldn't find const" - - [] - let ``SynExpr.InterpolatedString with SynStringKind.Verbatim`` () = - let parseResults = - getParseResults - """ - let s = $@"Migrate notes of file ""{oldId}"" to new file ""{newId}""." - """ - - match getBindingExpressionValue parseResults with - | Some (SynExpr.InterpolatedString(_, kind, _)) -> kind |> should equal SynStringKind.Verbatim - | _ -> Assert.Fail "Couldn't find const" - -module SynModuleOrNamespace = - [] - let ``DeclaredNamespace range should start at namespace keyword`` () = - let parseResults = - getParseResults - """namespace TypeEquality - -/// A type for witnessing type equality between 'a and 'b -type Teq<'a, 'b> -""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(kind = SynModuleOrNamespaceKind.DeclaredNamespace; range = r) ])) -> - assertRange (1, 0) (4, 8) r - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Multiple DeclaredNamespaces should have a range that starts at the namespace keyword`` () = - let parseResults = - getParseResults - """namespace TypeEquality - -/// A type for witnessing type equality between 'a and 'b -type Teq = class end - -namespace Foobar - -let x = 42 -""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ - SynModuleOrNamespace.SynModuleOrNamespace(kind = SynModuleOrNamespaceKind.DeclaredNamespace; range = r1) - SynModuleOrNamespace.SynModuleOrNamespace(kind = SynModuleOrNamespaceKind.DeclaredNamespace; range = r2) ])) -> - assertRange (1, 0) (4, 20) r1 - assertRange (6, 0) (8, 10) r2 - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``GlobalNamespace should start at namespace keyword`` () = - let parseResults = - getParseResults - """// foo -// bar -namespace global - -type X = int -""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ - SynModuleOrNamespace.SynModuleOrNamespace(kind = SynModuleOrNamespaceKind.GlobalNamespace; range = r) ])) -> - assertRange (3, 0) (5, 12) r - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Module range should start at first attribute`` () = - let parseResults = - getParseResults - """ -[< Foo >] -module Bar - -let s : string = "s" -""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ - SynModuleOrNamespace.SynModuleOrNamespace(kind = SynModuleOrNamespaceKind.NamedModule; range = r) ])) -> - assertRange (2, 0) (5, 20) r - | _ -> Assert.Fail "Could not get valid AST" - -module SynConsts = - [] - let ``Measure contains the range of the constant`` () = - let parseResults = - getParseResults - """ -let n = 1.0m -let m = 7.000 -""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.Let(bindings = [ SynBinding.SynBinding(expr = SynExpr.Const(SynConst.Measure(constantRange = r1), _)) ]) - SynModuleDecl.Let(bindings = [ SynBinding.SynBinding(expr = SynExpr.Const(SynConst.Measure(constantRange = r2), _)) ]) - ]) ])) -> - assertRange (2, 8) (2, 12) r1 - assertRange (3, 8) (3, 13) r2 - | _ -> Assert.Fail "Could not get valid AST" - -module SynModuleOrNamespaceSig = - [] - let ``Range member returns range of SynModuleOrNamespaceSig`` () = - let parseResults = - getParseResultsOfSignatureFile - """ -namespace Foobar - -type Bar = | Bar of string * int -""" - - match parseResults with - | ParsedInput.SigFile(ParsedSigFileInput(modules = [ - SynModuleOrNamespaceSig(kind = SynModuleOrNamespaceKind.DeclaredNamespace) as singleModule - ])) -> - assertRange (2,0) (4,32) singleModule.Range - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``GlobalNamespace should start at namespace keyword`` () = - let parseResults = - getParseResultsOfSignatureFile - """// foo -// bar -namespace global - -type Bar = | Bar of string * int -""" - - match parseResults with - | ParsedInput.SigFile (ParsedSigFileInput (modules = [ - SynModuleOrNamespaceSig(kind = SynModuleOrNamespaceKind.GlobalNamespace; range = r) ])) -> - assertRange (3, 0) (5, 32) r - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Module range should start at first attribute`` () = - let parseResults = - getParseResultsOfSignatureFile - """ - [< Foo >] -module Bar - -val s : string -""" - - match parseResults with - | ParsedInput.SigFile (ParsedSigFileInput (modules = [ - SynModuleOrNamespaceSig.SynModuleOrNamespaceSig(kind = SynModuleOrNamespaceKind.NamedModule; range = r) ])) -> - assertRange (2, 1) (5, 14) r - | _ -> Assert.Fail "Could not get valid AST" - -module SignatureTypes = - [] - let ``Range of Type should end at end keyword`` () = - let parseResults = - getParseResultsOfSignatureFile - """namespace GreatProjectThing - -type Meh = - class - end - - -// foo""" - - match parseResults with - | ParsedInput.SigFile (ParsedSigFileInput (modules = [ - SynModuleOrNamespaceSig(decls = [SynModuleSigDecl.Types(range = r)]) ])) -> - assertRange (3, 0) (5,11) r - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of SynTypeDefnSig record should end at last member`` () = - let parseResults = - getParseResultsOfSignatureFile - """namespace X -type MyRecord = - { Level: int } - member Score : unit -> int""" - - match parseResults with - | ParsedInput.SigFile (ParsedSigFileInput (modules = [ - SynModuleOrNamespaceSig(decls = [SynModuleSigDecl.Types(types = [SynTypeDefnSig.SynTypeDefnSig(range = r)])]) ])) -> - assertRange (2, 0) (4, 30) r - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of SynTypeDefnSig object model should end at last member`` () = - let parseResults = - getParseResultsOfSignatureFile - """namespace X -type MyRecord = - class - end - member Score : unit -> int""" - - match parseResults with - | ParsedInput.SigFile (ParsedSigFileInput (modules = [ - SynModuleOrNamespaceSig(decls = [SynModuleSigDecl.Types(types = [SynTypeDefnSig.SynTypeDefnSig(range = r)])]) ])) -> - assertRange (2, 0) (5, 30) r - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of SynTypeDefnSig delegate of should start from name`` () = - let parseResults = - getParseResultsOfSignatureFile - """namespace Y -type MyFunction = - delegate of int -> string""" - - match parseResults with - | ParsedInput.SigFile (ParsedSigFileInput (modules = [ - SynModuleOrNamespaceSig(decls = [SynModuleSigDecl.Types(types = [SynTypeDefnSig.SynTypeDefnSig(range = r)])]) ])) -> - assertRange (2, 0) (3, 29) r - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of SynTypeDefnSig simple should end at last val`` () = - let parseResults = - getParseResultsOfSignatureFile - """namespace Z -type SomeCollection with - val LastIndex : int - val SomeThingElse : int -> string""" - - match parseResults with - | ParsedInput.SigFile (ParsedSigFileInput (modules = [ - SynModuleOrNamespaceSig(decls = [SynModuleSigDecl.Types(types = [SynTypeDefnSig.SynTypeDefnSig(range = r)])]) ])) -> - assertRange (2, 0) (4, 37) r - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of attribute should be included in SynTypeDefnSig`` () = - let parseResults = - getParseResultsOfSignatureFile - """ -namespace SomeNamespace - -[] -type MyType = - class - end -""" - - match parseResults with - | ParsedInput.SigFile (ParsedSigFileInput (modules = [ - SynModuleOrNamespaceSig(decls = [SynModuleSigDecl.Types(types = [SynTypeDefnSig.SynTypeDefnSig(range = r)]) as t]) ])) -> - assertRange (4, 0) (7, 7) r - assertRange (4, 0) (7, 7) t.Range - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of attributes should be included in recursive types`` () = - let parseResults = - getParseResultsOfSignatureFile - """ -namespace SomeNamespace - -type Foo = - | Bar - -and [] Bang = - internal - { - LongNameBarBarBarBarBarBarBar: int - } - override GetHashCode : unit -> int -""" - - match parseResults with - | ParsedInput.SigFile (ParsedSigFileInput (modules = [ - SynModuleOrNamespaceSig(decls = [SynModuleSigDecl.Types(types = [ - SynTypeDefnSig.SynTypeDefnSig(range = r1) - SynTypeDefnSig.SynTypeDefnSig(range = r2) - ]) as t]) ])) -> - assertRange (4, 0) (5, 9) r1 - assertRange (7, 4) (12, 42) r2 - assertRange (4, 0) (12, 42) t.Range - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of attribute should be included in SynValSpfn and Member`` () = - let parseResults = - getParseResultsOfSignatureFile - """ -namespace SomeNamespace - -type FooType = - [] // ValSpfn - abstract x : int -""" - - match parseResults with - | ParsedInput.SigFile (ParsedSigFileInput (modules = [ - SynModuleOrNamespaceSig(decls = - [ SynModuleSigDecl.Types(types = [ - SynTypeDefnSig.SynTypeDefnSig(typeRepr = - SynTypeDefnSigRepr.ObjectModel(memberSigs = [ - SynMemberSig.Member(range = mr; memberSig = SynValSig(range = mv)) ])) - ]) ]) ])) -> - assertRange (5, 4) (6, 20) mr - assertRange (5, 4) (6, 20) mv - | _ -> Assert.Fail "Could not get valid AST" - -module SynMatchClause = - [] - let ``Range of single SynMatchClause`` () = - let parseResults = - getParseResults - """ -try - let content = tryDownloadFile url - Some content -with ex -> - Infrastructure.ReportWarning ex - None""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.DoExpr(expr = SynExpr.TryWith(withCases = [ SynMatchClause(range = range) as clause ])) - ]) ])) -> - assertRange (5, 5) (7, 8) range - assertRange (5, 5) (7, 8) clause.Range - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of multiple SynMatchClause`` () = - let parseResults = - getParseResults - """ -try - let content = tryDownloadFile url - Some content -with -| ex -> - Infrastructure.ReportWarning ex - None -| exx -> - None""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.DoExpr(expr = SynExpr.TryWith(withCases = [ SynMatchClause(range = r1) as clause1 - SynMatchClause(range = r2) as clause2 ])) - ]) ])) -> - assertRange (6, 2) (8, 8) r1 - assertRange (6, 2) (8, 8) clause1.Range - - assertRange (9, 2) (10, 8) r2 - assertRange (9, 2) (10, 8) clause2.Range - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of single SynMatchClause followed by bar`` () = - let parseResults = - getParseResults - """ -try - let content = tryDownloadFile url - Some content -with -| ex -> - () -| """ - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.DoExpr(expr = SynExpr.TryWith(withCases = [ SynMatchClause(range = range) as clause ])) - ]) ])) -> - assertRange (6, 2) (7, 6) range - assertRange (6, 2) (7, 6) clause.Range - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of single SynMatchClause with missing body`` () = - let parseResults = - getParseResults - """ -try - let content = tryDownloadFile url - Some content -with -| ex ->""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.DoExpr(expr = SynExpr.TryWith(withCases = [ SynMatchClause(range = range) as clause ])) - ]) ])) -> - assertRange (6, 2) (6, 4) range - assertRange (6, 2) (6, 4) clause.Range - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of single SynMatchClause with missing body and when expr`` () = - let parseResults = - getParseResults - """ -try - let content = tryDownloadFile url - Some content -with -| ex when (isNull ex) ->""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.DoExpr(expr = SynExpr.TryWith(withCases = [ SynMatchClause(range = range) as clause ])) - ]) ])) -> - assertRange (6, 2) (6, 21) range - assertRange (6, 2) (6, 21) clause.Range - | _ -> Assert.Fail "Could not get valid AST" - -module SourceIdentifiers = - [] - let ``__LINE__`` () = - let parseResults = - getParseResults - """ -__LINE__""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.DoExpr(expr = SynExpr.Const(SynConst.SourceIdentifier("__LINE__", "2", range), _)) - ]) ])) -> - assertRange (2, 0) (2, 8) range - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``__SOURCE_DIRECTORY__`` () = - let parseResults = - getParseResults - """ -__SOURCE_DIRECTORY__""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.DoExpr(expr = SynExpr.Const(SynConst.SourceIdentifier("__SOURCE_DIRECTORY__", _, range), _)) - ]) ])) -> - assertRange (2, 0) (2, 20) range - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``__SOURCE_FILE__`` () = - let parseResults = - getParseResults - """ -__SOURCE_FILE__""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.DoExpr(expr = SynExpr.Const(SynConst.SourceIdentifier("__SOURCE_FILE__", _, range), _)) - ]) ])) -> - assertRange (2, 0) (2, 15) range - | _ -> Assert.Fail "Could not get valid AST" - -module NestedModules = - - [] - let ``Range of attribute should be included in SynModuleSigDecl.NestedModule`` () = - let parseResults = - getParseResultsOfSignatureFile - """ -namespace SomeNamespace - -[] -module Nested = - val x : int -""" - - match parseResults with - | ParsedInput.SigFile (ParsedSigFileInput (modules = [ SynModuleOrNamespaceSig(decls = [ - SynModuleSigDecl.NestedModule _ as nm - ]) as sigModule ])) -> - assertRange (4, 0) (6, 15) nm.Range - assertRange (2, 0) (6, 15) sigModule.Range - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of attribute should be included in SynModuleDecl.NestedModule`` () = - let parseResults = - getParseResults - """ -module TopLevel - -[] -module Nested = - ()""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.NestedModule _ as nm - ]) ])) -> - assertRange (4, 0) (6, 6) nm.Range - | _ -> Assert.Fail "Could not get valid AST" - -module SynBindings = - [] - let ``Range of attribute should be included in SynModuleDecl.Let`` () = - let parseResults = - getParseResults - """ -[] -let a = 0""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.Let(bindings = [SynBinding(range = mb)]) as lt - ]) ])) -> - assertRange (2, 0) (3, 5) mb - assertRange (2, 0) (3, 9) lt.Range - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of attribute between let keyword and pattern should be included in SynModuleDecl.Let`` () = - let parseResults = - getParseResults - """ -let [] (A x) = 1""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.Let(bindings = [SynBinding(range = mb)]) as lt - ]) ])) -> - assertRange (2, 4) (2, 21) mb - assertRange (2, 0) (2, 25) lt.Range - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of attribute should be included in SynMemberDefn.LetBindings`` () = - let parseResults = - getParseResults - """ -type Bar = - [] - let x = 8""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.Types(typeDefns = [SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [SynMemberDefn.LetBindings(bindings = [SynBinding(range = mb)]) as m]))]) - ]) ])) -> - assertRange (3, 4) (4, 9) mb - assertRange (3, 4) (4, 13) m.Range - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of attribute should be included in SynMemberDefn.Member`` () = - let parseResults = - getParseResults - """ -type Bar = - [] - member this.Something () = ()""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.Types(typeDefns = [SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [SynMemberDefn.Member(memberDefn = SynBinding(range = mb)) as m]))]) - ]) ])) -> - assertRange (3, 4) (4, 28) mb - assertRange (3, 4) (4, 33) m.Range - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of attribute should be included in binding of SynExpr.ObjExpr`` () = - let parseResults = - getParseResults - """ -{ new System.Object() with - [] - member x.ToString() = "F#" }""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.DoExpr(expr = SynExpr.ObjExpr(bindings = [SynBinding(range = mb)])) - ]) ])) -> - assertRange (3, 4) (4, 23) mb - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of attribute should be included in constructor SynMemberDefn.Member`` () = - let parseResults = - getParseResults - """ -type Tiger = - [] - new () = ()""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.Types(typeDefns = [SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [SynMemberDefn.Member(memberDefn = SynBinding(range = mb)) as m]))]) - ]) ])) -> - assertRange (3, 4) (4, 10) mb - assertRange (3, 4) (4, 15) m.Range - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of attribute should be included in constructor SynMemberDefn.Member, optAsSpec`` () = - let parseResults = - getParseResults - """ -type Tiger = - [] - new () as tony = ()""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.Types(typeDefns = [SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [SynMemberDefn.Member(memberDefn = SynBinding(range = mb)) as m]))]) - ]) ])) -> - assertRange (3, 4) (4, 18) mb - assertRange (3, 4) (4, 23) m.Range - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of attribute should be included in secondary constructor`` () = - let parseResults = - getParseResults - """ -type T() = - new () = - T () - - internal new () = - T () - - [] - new () = - T ()""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.Types(typeDefns = [SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ - SynMemberDefn.ImplicitCtor _ - SynMemberDefn.Member(memberDefn = SynBinding(range = mb1)) as m1 - SynMemberDefn.Member(memberDefn = SynBinding(range = mb2)) as m2 - SynMemberDefn.Member(memberDefn = SynBinding(range = mb3)) as m3 - ]))]) - ]) ])) -> - assertRange (3, 4) (3, 10) mb1 - assertRange (3, 4) (4, 12) m1.Range - assertRange (6, 4) (6, 19) mb2 - assertRange (6, 4) (7, 12) m2.Range - assertRange (9, 4) (10, 10) mb3 - assertRange (9, 4) (11, 12) m3.Range - | _ -> Assert.Fail "Could not get valid AST" - - - [] - let ``Range of attribute should be included in write only SynMemberDefn.Member property`` () = - let parseResults = - getParseResults - """ -type Crane = - [] - member this.MyWriteOnlyProperty with set (value) = myInternalValue <- value""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.Types(typeDefns = [SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [SynMemberDefn.Member(memberDefn = SynBinding(range = mb)) as m]))]) - ]) ])) -> - assertRange (3, 4) (4, 52) mb - assertRange (3, 4) (4, 79) m.Range - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Range of attribute should be included in full SynMemberDefn.Member property`` () = - let parseResults = - getParseResults - """ -type Bird = - [] - member this.TheWord - with get () = myInternalValue - and set (value) = myInternalValue <- value""" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.Types(typeDefns = [SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ - SynMemberDefn.Member(memberDefn = SynBinding(range = mb1)) as getter - SynMemberDefn.Member(memberDefn = SynBinding(range = mb2)) as setter - ]))]) - ]) ])) -> - assertRange (3, 4) (5, 19) mb1 - assertRange (3, 4) (6, 50) getter.Range - assertRange (3, 4) (6, 23) mb2 - assertRange (3, 4) (6, 50) setter.Range - | _ -> Assert.Fail "Could not get valid AST" - -module ParsedHashDirective = - [] - let ``SourceIdentifier as ParsedHashDirectiveArgument`` () = - let parseResults = - getParseResults - "#I __SOURCE_DIRECTORY__" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.HashDirective(ParsedHashDirective("I", [ ParsedHashDirectiveArgument.SourceIdentifier(c,_,m) ] , _), _) - ]) ])) -> - Assert.AreEqual("__SOURCE_DIRECTORY__", c) - assertRange (1, 3) (1, 23) m - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Regular String as ParsedHashDirectiveArgument`` () = - let parseResults = - getParseResults - "#I \"/tmp\"" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.HashDirective(ParsedHashDirective("I", [ ParsedHashDirectiveArgument.String(v, SynStringKind.Regular, m) ] , _), _) - ]) ])) -> - Assert.AreEqual("/tmp", v) - assertRange (1, 3) (1, 9) m - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Verbatim String as ParsedHashDirectiveArgument`` () = - let parseResults = - getParseResults - "#I @\"C:\\Temp\"" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.HashDirective(ParsedHashDirective("I", [ ParsedHashDirectiveArgument.String(v, SynStringKind.Verbatim, m) ] , _), _) - ]) ])) -> - Assert.AreEqual("C:\\Temp", v) - assertRange (1, 3) (1, 13) m - | _ -> Assert.Fail "Could not get valid AST" - - [] - let ``Triple quote String as ParsedHashDirectiveArgument`` () = - let parseResults = - getParseResults - "#nowarn \"\"\"40\"\"\"" - - match parseResults with - | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ - SynModuleDecl.HashDirective(ParsedHashDirective("nowarn", [ ParsedHashDirectiveArgument.String(v, SynStringKind.TripleQuote, m) ] , _), _) - ]) ])) -> - Assert.AreEqual("40", v) - assertRange (1, 8) (1, 16) m - | _ -> Assert.Fail "Could not get valid AST" \ No newline at end of file diff --git a/tests/service/TokenizerTests.fs b/tests/service/TokenizerTests.fs index 275e01edb9c..6dea4640543 100644 --- a/tests/service/TokenizerTests.fs +++ b/tests/service/TokenizerTests.fs @@ -8,11 +8,11 @@ module FSharp.Compiler.Service.Tests.TokenizerTests #endif -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Tokenization +open FSharp.Compiler.SourceCodeServices open NUnit.Framework + let sourceTok = FSharpSourceTokenizer([], Some "C:\\test.fsx") let rec parseLine(line: string, state: FSharpTokenizerLexState ref, tokenizer: FSharpLineTokenizer) = seq { diff --git a/tests/service/TreeVisitorTests.fs b/tests/service/TreeVisitorTests.fs index 206b7daaf8e..6ff20227235 100644 --- a/tests/service/TreeVisitorTests.fs +++ b/tests/service/TreeVisitorTests.fs @@ -1,22 +1,25 @@ module Tests.Service.TreeVisitorTests open FSharp.Compiler.Service.Tests.Common -open FSharp.Compiler.Text.Position -open FSharp.Compiler.Syntax +open FSharp.Compiler.Range +open FSharp.Compiler.SourceCodeServices.AstTraversal open NUnit.Framework [] let ``Visit type test`` () = let visitor = - { new SyntaxVisitorBase<_>() with + { new AstVisitorBase<_>() with member x.VisitExpr(_, _, defaultTraverse, expr) = defaultTraverse expr - member x.VisitType(_, _, _) = Some () } + member x.VisitType(_, _) = Some () } let source = "123 :? int" - let parseTree = parseSourceCode("C:\\test.fs", source) + let parseTree = + match parseSourceCode("C:\\test.fs", source) with + | None -> failwith "No parse tree" + | Some parseTree -> parseTree - SyntaxTraversal.Traverse(mkPos 1 11, parseTree, visitor) + Traverse(mkPos 1 11, parseTree, visitor) |> Option.defaultWith (fun _ -> failwith "Did not visit type") - SyntaxTraversal.Traverse(mkPos 1 3, parseTree, visitor) + Traverse(mkPos 1 3, parseTree, visitor) |> Option.iter (fun _ -> failwith "Should not visit type") diff --git a/tests/service/data/TestTP/Library.fs b/tests/service/data/TestTP/Library.fs index b97eb774e06..3d5474e50bf 100644 --- a/tests/service/data/TestTP/Library.fs +++ b/tests/service/data/TestTP/Library.fs @@ -35,17 +35,17 @@ module Helper = static member DoNothingGeneric(x:'T) = () [] static member DoNothingWithCompiledName() = () - member _.InstanceDoNothing() = () - member _.InstanceDoNothingOneArg(x:int) = () - member _.InstanceDoNothingOneArg(x:string) = () - member _.InstanceDoNothingTwoArg(c:C, x:int) = () - member _.InstanceDoNothingTwoArgCurried(c:C) (x:int) = () - member _.InstanceDoNothingGeneric(x:'T) = () + member __.InstanceDoNothing() = () + member __.InstanceDoNothingOneArg(x:int) = () + member __.InstanceDoNothingOneArg(x:string) = () + member __.InstanceDoNothingTwoArg(c:C, x:int) = () + member __.InstanceDoNothingTwoArgCurried(c:C) (x:int) = () + member __.InstanceDoNothingGeneric(x:'T) = () [] - member _.InstanceDoNothingWithCompiledName() = () - override _.VirtualDoNothing() = () + member __.InstanceDoNothingWithCompiledName() = () + override __.VirtualDoNothing() = () - member _.Property with get() = p and set v = p <- v + member __.Property with get() = p and set v = p <- v member val AutoProperty = 0 with get, set static member val StaticAutoProperty = 0 with get, set @@ -57,10 +57,10 @@ module Helper = static member DoNothingOneArg(x:int) = () static member DoNothingTwoArg(c:C, x:int) = () static member DoNothingGeneric(x:'T) = () - member _.InstanceDoNothing() = () - member _.InstanceDoNothingOneArg(x:int) = () - member _.InstanceDoNothingTwoArg(c:C, x:int) = () - member _.InstanceDoNothingGeneric(x:'U) = () + member __.InstanceDoNothing() = () + member __.InstanceDoNothingOneArg(x:int) = () + member __.InstanceDoNothingTwoArg(c:C, x:int) = () + member __.InstanceDoNothingGeneric(x:'U) = () type R = { A : int; mutable B : int } diff --git a/tests/service/data/TestTP/ProvidedTypes.fs b/tests/service/data/TestTP/ProvidedTypes.fs index 943ef8ea567..51cdb0bddd0 100644 --- a/tests/service/data/TestTP/ProvidedTypes.fs +++ b/tests/service/data/TestTP/ProvidedTypes.fs @@ -63,9 +63,9 @@ module internal Misc = #else { new CustomAttributeData() with #endif - member _.Constructor = typeof.GetConstructors().[0] - member _.ConstructorArguments = upcast [| |] - member _.NamedArguments = upcast [| |] } + member __.Constructor = typeof.GetConstructors().[0] + member __.ConstructorArguments = upcast [| |] + member __.NamedArguments = upcast [| |] } #if FX_NO_CUSTOMATTRIBUTEDATA let CustomAttributeTypedArgument(ty,v) = @@ -86,9 +86,9 @@ module internal Misc = #else { new CustomAttributeData() with #endif - member _.Constructor = typeof.GetConstructors().[0] - member _.ConstructorArguments = upcast [| |] - member _.NamedArguments = upcast [| |] } + member __.Constructor = typeof.GetConstructors().[0] + member __.ConstructorArguments = upcast [| |] + member __.NamedArguments = upcast [| |] } let mkAllowNullLiteralCustomAttributeData value = #if FX_NO_CUSTOMATTRIBUTEDATA @@ -96,9 +96,9 @@ module internal Misc = #else { new CustomAttributeData() with #endif - member _.Constructor = typeof.GetConstructors().[0] - member _.ConstructorArguments = upcast [| CustomAttributeTypedArgument(typeof, value) |] - member _.NamedArguments = upcast [| |] } + member __.Constructor = typeof.GetConstructors().[0] + member __.ConstructorArguments = upcast [| CustomAttributeTypedArgument(typeof, value) |] + member __.NamedArguments = upcast [| |] } /// This makes an xml doc attribute w.r.t. an amortized computation of an xml doc string. /// It is important that the text of the xml doc only get forced when poking on the ConstructorArguments @@ -109,9 +109,9 @@ module internal Misc = #else { new CustomAttributeData() with #endif - member _.Constructor = typeof.GetConstructors().[0] - member _.ConstructorArguments = upcast [| CustomAttributeTypedArgument(typeof, lazyText.Force()) |] - member _.NamedArguments = upcast [| |] } + member __.Constructor = typeof.GetConstructors().[0] + member __.ConstructorArguments = upcast [| CustomAttributeTypedArgument(typeof, lazyText.Force()) |] + member __.NamedArguments = upcast [| |] } let mkXmlDocCustomAttributeData(s:string) = mkXmlDocCustomAttributeDataLazy (lazy s) @@ -121,9 +121,9 @@ module internal Misc = #else { new CustomAttributeData() with #endif - member _.Constructor = typeof.GetConstructors().[0] - member _.ConstructorArguments = upcast [| |] - member _.NamedArguments = + member __.Constructor = typeof.GetConstructors().[0] + member __.ConstructorArguments = upcast [| |] + member __.NamedArguments = upcast [| CustomAttributeNamedArgument(typeof.GetProperty("FilePath"), CustomAttributeTypedArgument(typeof, filePath)); CustomAttributeNamedArgument(typeof.GetProperty("Line"), CustomAttributeTypedArgument(typeof, line)) ; CustomAttributeNamedArgument(typeof.GetProperty("Column"), CustomAttributeTypedArgument(typeof, column)) @@ -134,9 +134,9 @@ module internal Misc = #else { new CustomAttributeData() with #endif - member _.Constructor = typeof.GetConstructors() |> Array.find (fun x -> x.GetParameters().Length = 1) - member _.ConstructorArguments = upcast [|CustomAttributeTypedArgument(typeof, message) ; CustomAttributeTypedArgument(typeof, isError) |] - member _.NamedArguments = upcast [| |] } + member __.Constructor = typeof.GetConstructors() |> Array.find (fun x -> x.GetParameters().Length = 1) + member __.ConstructorArguments = upcast [|CustomAttributeTypedArgument(typeof, message) ; CustomAttributeTypedArgument(typeof, isError) |] + member __.NamedArguments = upcast [| |] } type CustomAttributesImpl() = let customAttributes = ResizeArray() @@ -163,16 +163,16 @@ module internal Misc = if hasParamArray then yield mkParamArrayCustomAttributeData() yield! customAttributes |] - member _.AddDefinitionLocation(line:int,column:int,filePath:string) = customAttributes.Add(mkDefinitionLocationAttributeCustomAttributeData(line, column, filePath)) - member _.AddObsolete(message : string, isError) = obsoleteMessage <- Some (message,isError) - member _.HasParamArray with get() = hasParamArray and set(v) = hasParamArray <- v - member _.AddXmlDocComputed xmlDocFunction = xmlDocAlwaysRecomputed <- Some xmlDocFunction - member _.AddXmlDocDelayed xmlDocFunction = xmlDocDelayed <- Some xmlDocFunction - member _.AddXmlDoc xmlDoc = xmlDocDelayed <- Some (fun () -> xmlDoc) - member _.HideObjectMethods with set v = hideObjectMethods <- v - member _.NonNullable with set v = nonNullable <- v - member _.AddCustomAttribute(attribute) = customAttributes.Add(attribute) - member _.GetCustomAttributesData() = + member __.AddDefinitionLocation(line:int,column:int,filePath:string) = customAttributes.Add(mkDefinitionLocationAttributeCustomAttributeData(line, column, filePath)) + member __.AddObsolete(message : string, isError) = obsoleteMessage <- Some (message,isError) + member __.HasParamArray with get() = hasParamArray and set(v) = hasParamArray <- v + member __.AddXmlDocComputed xmlDocFunction = xmlDocAlwaysRecomputed <- Some xmlDocFunction + member __.AddXmlDocDelayed xmlDocFunction = xmlDocDelayed <- Some xmlDocFunction + member __.AddXmlDoc xmlDoc = xmlDocDelayed <- Some (fun () -> xmlDoc) + member __.HideObjectMethods with set v = hideObjectMethods <- v + member __.NonNullable with set v = nonNullable <- v + member __.AddCustomAttribute(attribute) = customAttributes.Add(attribute) + member __.GetCustomAttributesData() = [| yield! customAttributesOnce.Force() match xmlDocAlwaysRecomputed with None -> () | Some f -> customAttributes.Add(mkXmlDocCustomAttributeData (f())) |] :> IList<_> @@ -552,34 +552,34 @@ type ProvidedStaticParameter(parameterName:string,parameterType:Type,?parameterD let customAttributesImpl = CustomAttributesImpl() - member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - override _.RawDefaultValue = defaultArg parameterDefaultValue null - override _.Attributes = if parameterDefaultValue.IsNone then enum 0 else ParameterAttributes.Optional - override _.Position = 0 - override _.ParameterType = parameterType - override _.Name = parameterName + override __.RawDefaultValue = defaultArg parameterDefaultValue null + override __.Attributes = if parameterDefaultValue.IsNone then enum 0 else ParameterAttributes.Optional + override __.Position = 0 + override __.ParameterType = parameterType + override __.Name = parameterName - override _.GetCustomAttributes(_inherit) = ignore(_inherit); notRequired "GetCustomAttributes" parameterName - override _.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" parameterName + override __.GetCustomAttributes(_inherit) = ignore(_inherit); notRequired "GetCustomAttributes" parameterName + override __.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" parameterName type ProvidedParameter(name:string,parameterType:Type,?isOut:bool,?optionalValue:obj) = inherit System.Reflection.ParameterInfo() let customAttributesImpl = CustomAttributesImpl() let isOut = defaultArg isOut false - member _.IsParamArray with get() = customAttributesImpl.HasParamArray and set(v) = customAttributesImpl.HasParamArray <- v - override _.Name = name - override _.ParameterType = parameterType - override _.Attributes = (base.Attributes ||| (if isOut then ParameterAttributes.Out else enum 0) + member __.IsParamArray with get() = customAttributesImpl.HasParamArray and set(v) = customAttributesImpl.HasParamArray <- v + override __.Name = name + override __.ParameterType = parameterType + override __.Attributes = (base.Attributes ||| (if isOut then ParameterAttributes.Out else enum 0) ||| (match optionalValue with None -> enum 0 | Some _ -> ParameterAttributes.Optional ||| ParameterAttributes.HasDefault)) - override _.RawDefaultValue = defaultArg optionalValue null - member _.HasDefaultParameterValue = Option.isSome optionalValue - member _.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() + override __.RawDefaultValue = defaultArg optionalValue null + member __.HasDefaultParameterValue = Option.isSome optionalValue + member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() #if FX_NO_CUSTOMATTRIBUTEDATA #else - override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() #endif type ProvidedConstructor(parameters : ProvidedParameter list) = @@ -595,41 +595,41 @@ type ProvidedConstructor(parameters : ProvidedParameter list) = let isStatic() = ctorAttributes.HasFlag(MethodAttributes.Static) let customAttributesImpl = CustomAttributesImpl() - member _.IsTypeInitializer + member __.IsTypeInitializer with get() = isStatic() && ctorAttributes.HasFlag(MethodAttributes.Private) and set(v) = let typeInitializerAttributes = MethodAttributes.Static ||| MethodAttributes.Private ctorAttributes <- if v then ctorAttributes ||| typeInitializerAttributes else ctorAttributes &&& ~~~typeInitializerAttributes - member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member _.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() + member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() #if FX_NO_CUSTOMATTRIBUTEDATA #else - override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() #endif - member _.DeclaringTypeImpl + member __.DeclaringTypeImpl with set x = if declaringType<>null then failwith (sprintf "ProvidedConstructor: declaringType already set on '%s'" (nameText())); declaringType <- x - member _.InvokeCode + member __.InvokeCode with set (q:Quotations.Expr list -> Quotations.Expr) = match invokeCode with | None -> invokeCode <- Some q | Some _ -> failwith (sprintf "ProvidedConstructor: code already given for '%s'" (nameText())) - member _.BaseConstructorCall + member __.BaseConstructorCall with set (d:Quotations.Expr list -> (ConstructorInfo * Quotations.Expr list)) = match baseCall with | None -> baseCall <- Some d | Some _ -> failwith (sprintf "ProvidedConstructor: base call already given for '%s'" (nameText())) - member _.GetInvokeCodeInternal isGenerated = + member __.GetInvokeCodeInternal isGenerated = match invokeCode with | Some f -> // FSharp.Data change: use the real variable names instead of indices, to improve output of Debug.fs @@ -641,26 +641,26 @@ type ProvidedConstructor(parameters : ProvidedParameter list) = transQuotationToCode isGenerated f paramNames | None -> failwith (sprintf "ProvidedConstructor: no invoker for '%s'" (nameText())) - member _.GetBaseConstructorCallInternal isGenerated = + member __.GetBaseConstructorCallInternal isGenerated = match baseCall with | Some f -> Some(fun ctorArgs -> let c,baseCtorArgExprs = f ctorArgs in c, List.map (transExpr isGenerated) baseCtorArgExprs) | None -> None - member _.IsImplicitCtor with get() = isImplicitCtor and set v = isImplicitCtor <- v + member __.IsImplicitCtor with get() = isImplicitCtor and set v = isImplicitCtor <- v // Implement overloads - override _.GetParameters() = parameters |> List.toArray - override _.Attributes = ctorAttributes - override _.Name = if isStatic() then ".cctor" else ".ctor" - override _.DeclaringType = declaringType |> nonNull "ProvidedConstructor.DeclaringType" - override _.IsDefined(_attributeType, _inherit) = true - - override _.Invoke(_invokeAttr, _binder, _parameters, _culture) = notRequired "Invoke" (nameText()) - override _.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired "Invoke" (nameText()) - override _.ReflectedType = notRequired "ReflectedType" (nameText()) - override _.GetMethodImplementationFlags() = notRequired "GetMethodImplementationFlags" (nameText()) - override _.MethodHandle = notRequired "MethodHandle" (nameText()) - override _.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" (nameText()) - override _.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" (nameText()) + override __.GetParameters() = parameters |> List.toArray + override __.Attributes = ctorAttributes + override __.Name = if isStatic() then ".cctor" else ".ctor" + override __.DeclaringType = declaringType |> nonNull "ProvidedConstructor.DeclaringType" + override __.IsDefined(_attributeType, _inherit) = true + + override __.Invoke(_invokeAttr, _binder, _parameters, _culture) = notRequired "Invoke" (nameText()) + override __.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired "Invoke" (nameText()) + override __.ReflectedType = notRequired "ReflectedType" (nameText()) + override __.GetMethodImplementationFlags() = notRequired "GetMethodImplementationFlags" (nameText()) + override __.MethodHandle = notRequired "MethodHandle" (nameText()) + override __.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" (nameText()) + override __.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" (nameText()) type ProvidedMethod(methodName: string, parameters: ProvidedParameter list, returnType: Type) = inherit System.Reflection.MethodInfo() @@ -675,27 +675,27 @@ type ProvidedMethod(methodName: string, parameters: ProvidedParameter list, retu let isStatic() = methodAttrs.HasFlag(MethodAttributes.Static) let customAttributesImpl = CustomAttributesImpl() - member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member _.AddCustomAttribute(attribute) = customAttributesImpl.AddCustomAttribute(attribute) - member _.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() + member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member __.AddCustomAttribute(attribute) = customAttributesImpl.AddCustomAttribute(attribute) + member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() #if FX_NO_CUSTOMATTRIBUTEDATA #else - override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() #endif - member _.SetMethodAttrs m = methodAttrs <- m - member _.AddMethodAttrs m = methodAttrs <- methodAttrs ||| m - member _.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice - member _.IsStaticMethod + member __.SetMethodAttrs m = methodAttrs <- m + member __.AddMethodAttrs m = methodAttrs <- methodAttrs ||| m + member __.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice + member __.IsStaticMethod with get() = isStatic() and set x = if x then methodAttrs <- methodAttrs ||| MethodAttributes.Static else methodAttrs <- methodAttrs &&& (~~~ MethodAttributes.Static) - member _.InvokeCode + member __.InvokeCode with set (q:Quotations.Expr list -> Quotations.Expr) = match invokeCode with | None -> invokeCode <- Some q @@ -703,15 +703,15 @@ type ProvidedMethod(methodName: string, parameters: ProvidedParameter list, retu /// Abstract a type to a parametric-type. Requires "formal parameters" and "instantiation function". - member _.DefineStaticParameters(staticParameters : list, apply : (string -> obj[] -> ProvidedMethod)) = + member __.DefineStaticParameters(staticParameters : list, apply : (string -> obj[] -> ProvidedMethod)) = staticParams <- staticParameters staticParamsApply <- Some apply /// Get ParameterInfo[] for the parametric type parameters (//s GetGenericParameters) - member _.GetStaticParameters() = [| for p in staticParams -> p :> ParameterInfo |] + member __.GetStaticParameters() = [| for p in staticParams -> p :> ParameterInfo |] /// Instantiate parametrics type - member _.ApplyStaticArguments(mangledName:string, args:obj[]) = + member __.ApplyStaticArguments(mangledName:string, args:obj[]) = if staticParams.Length>0 then if staticParams.Length <> args.Length then failwith (sprintf "ProvidedTypeDefinition: expecting %d static parameters but given %d for method %s" staticParams.Length args.Length methodName) @@ -721,7 +721,7 @@ type ProvidedMethod(methodName: string, parameters: ProvidedParameter list, retu else failwith (sprintf "ProvidedTypeDefinition: static parameters supplied but not expected for method %s" methodName) - member _.GetInvokeCodeInternal isGenerated = + member __.GetInvokeCodeInternal isGenerated = match invokeCode with | Some f -> // FSharp.Data change: use the real variable names instead of indices, to improve output of Debug.fs @@ -734,33 +734,33 @@ type ProvidedMethod(methodName: string, parameters: ProvidedParameter list, retu | None -> failwith (sprintf "ProvidedMethod: no invoker for %s on type %s" methodName (if declaringType=null then "" else declaringType.FullName)) // Implement overloads - override _.GetParameters() = argParams |> Array.ofList - override _.Attributes = methodAttrs - override _.Name = methodName - override _.DeclaringType = declaringType |> nonNull "ProvidedMethod.DeclaringType" - override _.IsDefined(_attributeType, _inherit) : bool = true - override _.MemberType = MemberTypes.Method - override _.CallingConvention = + override __.GetParameters() = argParams |> Array.ofList + override __.Attributes = methodAttrs + override __.Name = methodName + override __.DeclaringType = declaringType |> nonNull "ProvidedMethod.DeclaringType" + override __.IsDefined(_attributeType, _inherit) : bool = true + override __.MemberType = MemberTypes.Method + override __.CallingConvention = let cc = CallingConventions.Standard let cc = if not (isStatic()) then cc ||| CallingConventions.HasThis else cc cc - override _.ReturnType = returnType - override _.ReturnParameter = null // REVIEW: Give it a name and type? - override _.ToString() = "Method " + methodName + override __.ReturnType = returnType + override __.ReturnParameter = null // REVIEW: Give it a name and type? + override __.ToString() = "Method " + methodName // These don't have to return fully accurate results - they are used // by the F# Quotations library function SpecificCall as a pre-optimization // when comparing methods - override _.MetadataToken = hash declaringType + hash methodName - override _.MethodHandle = RuntimeMethodHandle() + override __.MetadataToken = hash declaringType + hash methodName + override __.MethodHandle = RuntimeMethodHandle() - override _.ReturnTypeCustomAttributes = notRequired "ReturnTypeCustomAttributes" methodName - override _.GetBaseDefinition() = notRequired "GetBaseDefinition" methodName - override _.GetMethodImplementationFlags() = notRequired "GetMethodImplementationFlags" methodName - override _.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired "Invoke" methodName - override _.ReflectedType = notRequired "ReflectedType" methodName - override _.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" methodName - override _.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" methodName + override __.ReturnTypeCustomAttributes = notRequired "ReturnTypeCustomAttributes" methodName + override __.GetBaseDefinition() = notRequired "GetBaseDefinition" methodName + override __.GetMethodImplementationFlags() = notRequired "GetMethodImplementationFlags" methodName + override __.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired "Invoke" methodName + override __.ReflectedType = notRequired "ReflectedType" methodName + override __.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" methodName + override __.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" methodName type ProvidedProperty(propertyName: string, propertyType: Type, ?parameters: ProvidedParameter list) = @@ -782,51 +782,51 @@ type ProvidedProperty(propertyName: string, propertyType: Type, ?parameters: Pro let setter = lazy (ProvidedMethod("set_" + propertyName,parameters @ [ProvidedParameter("value",propertyType)],typeof,IsStaticMethod=isStatic,DeclaringTypeImpl=declaringType,InvokeCode=setterCode.Value) |> markSpecialName) let customAttributesImpl = CustomAttributesImpl() - member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member _.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() - member _.AddCustomAttribute attribute = customAttributesImpl.AddCustomAttribute attribute + member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() + member __.AddCustomAttribute attribute = customAttributesImpl.AddCustomAttribute attribute #if FX_NO_CUSTOMATTRIBUTEDATA #else - override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() #endif - member _.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice + member __.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice - member _.IsStatic + member __.IsStatic with get() = isStatic and set x = isStatic <- x - member _.GetterCode + member __.GetterCode with set (q:Quotations.Expr list -> Quotations.Expr) = if not getter.IsValueCreated then getterCode <- Some q else failwith "ProvidedProperty: getter MethodInfo has already been created" - member _.SetterCode + member __.SetterCode with set (q:Quotations.Expr list -> Quotations.Expr) = if not (setter.IsValueCreated) then setterCode <- Some q else failwith "ProvidedProperty: setter MethodInfo has already been created" // Implement overloads - override _.PropertyType = propertyType - override _.SetValue(_obj, _value, _invokeAttr, _binder, _index, _culture) = notRequired "SetValue" propertyName - override _.GetAccessors _nonPublic = notRequired "nonPublic" propertyName - override _.GetGetMethod _nonPublic = if hasGetter() then getter.Force() :> MethodInfo else null - override _.GetSetMethod _nonPublic = if hasSetter() then setter.Force() :> MethodInfo else null - override _.GetIndexParameters() = [| for p in parameters -> upcast p |] - override _.Attributes = PropertyAttributes.None - override _.CanRead = hasGetter() - override _.CanWrite = hasSetter() - override _.GetValue(_obj, _invokeAttr, _binder, _index, _culture) : obj = notRequired "GetValue" propertyName - override _.Name = propertyName - override _.DeclaringType = declaringType |> nonNull "ProvidedProperty.DeclaringType" - override _.MemberType : MemberTypes = MemberTypes.Property - - override _.ReflectedType = notRequired "ReflectedType" propertyName - override _.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" propertyName - override _.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" propertyName - override _.IsDefined(_attributeType, _inherit) = notRequired "IsDefined" propertyName + override __.PropertyType = propertyType + override __.SetValue(_obj, _value, _invokeAttr, _binder, _index, _culture) = notRequired "SetValue" propertyName + override __.GetAccessors _nonPublic = notRequired "nonPublic" propertyName + override __.GetGetMethod _nonPublic = if hasGetter() then getter.Force() :> MethodInfo else null + override __.GetSetMethod _nonPublic = if hasSetter() then setter.Force() :> MethodInfo else null + override __.GetIndexParameters() = [| for p in parameters -> upcast p |] + override __.Attributes = PropertyAttributes.None + override __.CanRead = hasGetter() + override __.CanWrite = hasSetter() + override __.GetValue(_obj, _invokeAttr, _binder, _index, _culture) : obj = notRequired "GetValue" propertyName + override __.Name = propertyName + override __.DeclaringType = declaringType |> nonNull "ProvidedProperty.DeclaringType" + override __.MemberType : MemberTypes = MemberTypes.Property + + override __.ReflectedType = notRequired "ReflectedType" propertyName + override __.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" propertyName + override __.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" propertyName + override __.IsDefined(_attributeType, _inherit) = notRequired "IsDefined" propertyName type ProvidedEvent(eventName:string,eventHandlerType:Type) = inherit System.Reflection.EventInfo() @@ -843,45 +843,45 @@ type ProvidedEvent(eventName:string,eventHandlerType:Type) = let remover = lazy (ProvidedMethod("remove_" + eventName, [ProvidedParameter("handler", eventHandlerType)],typeof,IsStaticMethod=isStatic,DeclaringTypeImpl=declaringType,InvokeCode=removerCode.Value) |> markSpecialName) let customAttributesImpl = CustomAttributesImpl() - member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member _.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() + member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() #if FX_NO_CUSTOMATTRIBUTEDATA #else - override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() #endif - member _.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice - member _.IsStatic + member __.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice + member __.IsStatic with get() = isStatic and set x = isStatic <- x - member _.AdderCode + member __.AdderCode with get() = adderCode.Value and set f = if not adder.IsValueCreated then adderCode <- Some f else failwith "ProvidedEvent: Add MethodInfo has already been created" - member _.RemoverCode + member __.RemoverCode with get() = removerCode.Value and set f = if not (remover.IsValueCreated) then removerCode <- Some f else failwith "ProvidedEvent: Remove MethodInfo has already been created" // Implement overloads - override _.EventHandlerType = eventHandlerType - override _.GetAddMethod _nonPublic = adder.Force() :> MethodInfo - override _.GetRemoveMethod _nonPublic = remover.Force() :> MethodInfo - override _.Attributes = EventAttributes.None - override _.Name = eventName - override _.DeclaringType = declaringType |> nonNull "ProvidedEvent.DeclaringType" - override _.MemberType : MemberTypes = MemberTypes.Event - - override _.GetRaiseMethod _nonPublic = notRequired "GetRaiseMethod" eventName - override _.ReflectedType = notRequired "ReflectedType" eventName - override _.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" eventName - override _.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" eventName - override _.IsDefined(_attributeType, _inherit) = notRequired "IsDefined" eventName + override __.EventHandlerType = eventHandlerType + override __.GetAddMethod _nonPublic = adder.Force() :> MethodInfo + override __.GetRemoveMethod _nonPublic = remover.Force() :> MethodInfo + override __.Attributes = EventAttributes.None + override __.Name = eventName + override __.DeclaringType = declaringType |> nonNull "ProvidedEvent.DeclaringType" + override __.MemberType : MemberTypes = MemberTypes.Event + + override __.GetRaiseMethod _nonPublic = notRequired "GetRaiseMethod" eventName + override __.ReflectedType = notRequired "ReflectedType" eventName + override __.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" eventName + override __.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" eventName + override __.IsDefined(_attributeType, _inherit) = notRequired "IsDefined" eventName type ProvidedLiteralField(fieldName:string,fieldType:Type,literalValue:obj) = inherit System.Reflection.FieldInfo() @@ -890,36 +890,36 @@ type ProvidedLiteralField(fieldName:string,fieldType:Type,literalValue:obj) = let mutable declaringType = null let customAttributesImpl = CustomAttributesImpl() - member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member _.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() + member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() #if FX_NO_CUSTOMATTRIBUTEDATA #else - override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() #endif - member _.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice + member __.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice // Implement overloads - override _.FieldType = fieldType - override _.GetRawConstantValue() = literalValue - override _.Attributes = FieldAttributes.Static ||| FieldAttributes.Literal ||| FieldAttributes.Public - override _.Name = fieldName - override _.DeclaringType = declaringType |> nonNull "ProvidedLiteralField.DeclaringType" - override _.MemberType : MemberTypes = MemberTypes.Field - - override _.ReflectedType = notRequired "ReflectedType" fieldName - override _.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" fieldName - override _.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" fieldName - override _.IsDefined(_attributeType, _inherit) = notRequired "IsDefined" fieldName - - override _.SetValue(_obj, _value, _invokeAttr, _binder, _culture) = notRequired "SetValue" fieldName - override _.GetValue(_obj) : obj = notRequired "GetValue" fieldName - override _.FieldHandle = notRequired "FieldHandle" fieldName + override __.FieldType = fieldType + override __.GetRawConstantValue() = literalValue + override __.Attributes = FieldAttributes.Static ||| FieldAttributes.Literal ||| FieldAttributes.Public + override __.Name = fieldName + override __.DeclaringType = declaringType |> nonNull "ProvidedLiteralField.DeclaringType" + override __.MemberType : MemberTypes = MemberTypes.Field + + override __.ReflectedType = notRequired "ReflectedType" fieldName + override __.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" fieldName + override __.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" fieldName + override __.IsDefined(_attributeType, _inherit) = notRequired "IsDefined" fieldName + + override __.SetValue(_obj, _value, _invokeAttr, _binder, _culture) = notRequired "SetValue" fieldName + override __.GetValue(_obj) : obj = notRequired "GetValue" fieldName + override __.FieldHandle = notRequired "FieldHandle" fieldName type ProvidedField(fieldName:string,fieldType:Type) = inherit System.Reflection.FieldInfo() @@ -929,36 +929,36 @@ type ProvidedField(fieldName:string,fieldType:Type) = let customAttributesImpl = CustomAttributesImpl() let mutable fieldAttrs = FieldAttributes.Private - member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member _.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() + member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() #if FX_NO_CUSTOMATTRIBUTEDATA #else - override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() #endif - member _.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice + member __.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice - member _.SetFieldAttributes attrs = fieldAttrs <- attrs + member __.SetFieldAttributes attrs = fieldAttrs <- attrs // Implement overloads - override _.FieldType = fieldType - override _.GetRawConstantValue() = null - override _.Attributes = fieldAttrs - override _.Name = fieldName - override _.DeclaringType = declaringType |> nonNull "ProvidedField.DeclaringType" - override _.MemberType : MemberTypes = MemberTypes.Field - - override _.ReflectedType = notRequired "ReflectedType" fieldName - override _.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" fieldName - override _.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" fieldName - override _.IsDefined(_attributeType, _inherit) = notRequired "IsDefined" fieldName - - override _.SetValue(_obj, _value, _invokeAttr, _binder, _culture) = notRequired "SetValue" fieldName - override _.GetValue(_obj) : obj = notRequired "GetValue" fieldName - override _.FieldHandle = notRequired "FieldHandle" fieldName + override __.FieldType = fieldType + override __.GetRawConstantValue() = null + override __.Attributes = fieldAttrs + override __.Name = fieldName + override __.DeclaringType = declaringType |> nonNull "ProvidedField.DeclaringType" + override __.MemberType : MemberTypes = MemberTypes.Field + + override __.ReflectedType = notRequired "ReflectedType" fieldName + override __.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" fieldName + override __.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" fieldName + override __.IsDefined(_attributeType, _inherit) = notRequired "IsDefined" fieldName + + override __.SetValue(_obj, _value, _invokeAttr, _binder, _culture) = notRequired "SetValue" fieldName + override __.GetValue(_obj) : obj = notRequired "GetValue" fieldName + override __.FieldHandle = notRequired "FieldHandle" fieldName /// Represents the type constructor in a provided symbol type. [] @@ -1020,7 +1020,7 @@ type ProvidedSymbolType(kind: SymbolKind, args: Type list) = ty else ty - override _.FullName = + override __.FullName = match kind,args with | SymbolKind.SDArray,[arg] -> arg.FullName + "[]" | SymbolKind.Array _,[arg] -> arg.FullName + "[*]" @@ -1032,7 +1032,7 @@ type ProvidedSymbolType(kind: SymbolKind, args: Type list) = /// Although not strictly required by the type provider specification, this is required when doing basic operations like FullName on /// .NET symbolic types made from this type, e.g. when building Nullable.FullName - override _.DeclaringType = + override __.DeclaringType = match kind,args with | SymbolKind.SDArray,[arg] -> arg | SymbolKind.Array _,[arg] -> arg @@ -1042,7 +1042,7 @@ type ProvidedSymbolType(kind: SymbolKind, args: Type list) = | SymbolKind.FSharpTypeAbbreviation _,_ -> null | _ -> failwith "unreachable" - override _.IsAssignableFrom(otherTy) = + override __.IsAssignableFrom(otherTy) = match kind with | Generic gtd -> if otherTy.IsGenericType then @@ -1054,9 +1054,9 @@ type ProvidedSymbolType(kind: SymbolKind, args: Type list) = base.IsAssignableFrom(otherTy) | _ -> base.IsAssignableFrom(otherTy) - override _.Name = nameText() + override __.Name = nameText() - override _.BaseType = + override __.BaseType = match kind with | SymbolKind.SDArray -> typeof | SymbolKind.Array _ -> typeof @@ -1067,31 +1067,31 @@ type ProvidedSymbolType(kind: SymbolKind, args: Type list) = ProvidedSymbolType.convType args gty.BaseType | SymbolKind.FSharpTypeAbbreviation _ -> typeof - override _.GetArrayRank() = (match kind with SymbolKind.Array n -> n | SymbolKind.SDArray -> 1 | _ -> invalidOp "non-array type") - override _.IsArrayImpl() = (match kind with SymbolKind.Array _ | SymbolKind.SDArray -> true | _ -> false) - override _.IsByRefImpl() = (match kind with SymbolKind.ByRef _ -> true | _ -> false) - override _.IsPointerImpl() = (match kind with SymbolKind.Pointer _ -> true | _ -> false) - override _.IsPrimitiveImpl() = false - override _.IsGenericType = (match kind with SymbolKind.Generic _ -> true | _ -> false) - override _.GetGenericArguments() = (match kind with SymbolKind.Generic _ -> args |> List.toArray | _ -> invalidOp "non-generic type") - override _.GetGenericTypeDefinition() = (match kind with SymbolKind.Generic e -> e | _ -> invalidOp "non-generic type") - override _.IsCOMObjectImpl() = false - override _.HasElementTypeImpl() = (match kind with SymbolKind.Generic _ -> false | _ -> true) - override _.GetElementType() = (match kind,args with (SymbolKind.Array _ | SymbolKind.SDArray | SymbolKind.ByRef | SymbolKind.Pointer),[e] -> e | _ -> invalidOp "not an array, pointer or byref type") + override __.GetArrayRank() = (match kind with SymbolKind.Array n -> n | SymbolKind.SDArray -> 1 | _ -> invalidOp "non-array type") + override __.IsArrayImpl() = (match kind with SymbolKind.Array _ | SymbolKind.SDArray -> true | _ -> false) + override __.IsByRefImpl() = (match kind with SymbolKind.ByRef _ -> true | _ -> false) + override __.IsPointerImpl() = (match kind with SymbolKind.Pointer _ -> true | _ -> false) + override __.IsPrimitiveImpl() = false + override __.IsGenericType = (match kind with SymbolKind.Generic _ -> true | _ -> false) + override __.GetGenericArguments() = (match kind with SymbolKind.Generic _ -> args |> List.toArray | _ -> invalidOp "non-generic type") + override __.GetGenericTypeDefinition() = (match kind with SymbolKind.Generic e -> e | _ -> invalidOp "non-generic type") + override __.IsCOMObjectImpl() = false + override __.HasElementTypeImpl() = (match kind with SymbolKind.Generic _ -> false | _ -> true) + override __.GetElementType() = (match kind,args with (SymbolKind.Array _ | SymbolKind.SDArray | SymbolKind.ByRef | SymbolKind.Pointer),[e] -> e | _ -> invalidOp "not an array, pointer or byref type") override this.ToString() = this.FullName - override _.Assembly = + override __.Assembly = match kind with | SymbolKind.FSharpTypeAbbreviation (assembly,_nsp,_path) -> assembly | SymbolKind.Generic gty -> gty.Assembly | _ -> notRequired "Assembly" (nameText()) - override _.Namespace = + override __.Namespace = match kind with | SymbolKind.FSharpTypeAbbreviation (_assembly,nsp,_path) -> nsp | _ -> notRequired "Namespace" (nameText()) - override _.GetHashCode() = + override __.GetHashCode() = match kind,args with | SymbolKind.SDArray,[arg] -> 10 + hash arg | SymbolKind.Array _,[arg] -> 163 + hash arg @@ -1101,35 +1101,35 @@ type ProvidedSymbolType(kind: SymbolKind, args: Type list) = | SymbolKind.FSharpTypeAbbreviation _,_ -> 3092 | _ -> failwith "unreachable" - override _.Equals(other: obj) = + override __.Equals(other: obj) = match other with | :? ProvidedSymbolType as otherTy -> (kind, args) = (otherTy.Kind, otherTy.Args) | _ -> false - member _.Kind = kind - member _.Args = args + member __.Kind = kind + member __.Args = args - override _.Module : Module = notRequired "Module" (nameText()) - override _.GetConstructors _bindingAttr = notRequired "GetConstructors" (nameText()) - override _.GetMethodImpl(_name, _bindingAttr, _binderBinder, _callConvention, _types, _modifiers) = + override __.Module : Module = notRequired "Module" (nameText()) + override __.GetConstructors _bindingAttr = notRequired "GetConstructors" (nameText()) + override __.GetMethodImpl(_name, _bindingAttr, _binderBinder, _callConvention, _types, _modifiers) = match kind with | Generic gtd -> let ty = gtd.GetGenericTypeDefinition().MakeGenericType(Array.ofList args) ty.GetMethod(_name, _bindingAttr) | _ -> notRequired "GetMethodImpl" (nameText()) - override _.GetMembers _bindingAttr = notRequired "GetMembers" (nameText()) - override _.GetMethods _bindingAttr = notRequired "GetMethods" (nameText()) - override _.GetField(_name, _bindingAttr) = notRequired "GetField" (nameText()) - override _.GetFields _bindingAttr = notRequired "GetFields" (nameText()) - override _.GetInterface(_name, _ignoreCase) = notRequired "GetInterface" (nameText()) - override _.GetInterfaces() = notRequired "GetInterfaces" (nameText()) - override _.GetEvent(_name, _bindingAttr) = notRequired "GetEvent" (nameText()) - override _.GetEvents _bindingAttr = notRequired "GetEvents" (nameText()) - override _.GetProperties _bindingAttr = notRequired "GetProperties" (nameText()) - override _.GetPropertyImpl(_name, _bindingAttr, _binder, _returnType, _types, _modifiers) = notRequired "GetPropertyImpl" (nameText()) - override _.GetNestedTypes _bindingAttr = notRequired "GetNestedTypes" (nameText()) - override _.GetNestedType(_name, _bindingAttr) = notRequired "GetNestedType" (nameText()) - override _.GetAttributeFlagsImpl() = notRequired "GetAttributeFlagsImpl" (nameText()) + override __.GetMembers _bindingAttr = notRequired "GetMembers" (nameText()) + override __.GetMethods _bindingAttr = notRequired "GetMethods" (nameText()) + override __.GetField(_name, _bindingAttr) = notRequired "GetField" (nameText()) + override __.GetFields _bindingAttr = notRequired "GetFields" (nameText()) + override __.GetInterface(_name, _ignoreCase) = notRequired "GetInterface" (nameText()) + override __.GetInterfaces() = notRequired "GetInterfaces" (nameText()) + override __.GetEvent(_name, _bindingAttr) = notRequired "GetEvent" (nameText()) + override __.GetEvents _bindingAttr = notRequired "GetEvents" (nameText()) + override __.GetProperties _bindingAttr = notRequired "GetProperties" (nameText()) + override __.GetPropertyImpl(_name, _bindingAttr, _binder, _returnType, _types, _modifiers) = notRequired "GetPropertyImpl" (nameText()) + override __.GetNestedTypes _bindingAttr = notRequired "GetNestedTypes" (nameText()) + override __.GetNestedType(_name, _bindingAttr) = notRequired "GetNestedType" (nameText()) + override __.GetAttributeFlagsImpl() = notRequired "GetAttributeFlagsImpl" (nameText()) override this.UnderlyingSystemType = match kind with | SymbolKind.SDArray @@ -1140,17 +1140,17 @@ type ProvidedSymbolType(kind: SymbolKind, args: Type list) = | SymbolKind.Generic gty -> gty.UnderlyingSystemType #if FX_NO_CUSTOMATTRIBUTEDATA #else - override _.GetCustomAttributesData() = ([| |] :> IList<_>) + override __.GetCustomAttributesData() = ([| |] :> IList<_>) #endif - override _.MemberType = notRequired "MemberType" (nameText()) - override _.GetMember(_name,_mt,_bindingAttr) = notRequired "GetMember" (nameText()) - override _.GUID = notRequired "GUID" (nameText()) - override _.InvokeMember(_name, _invokeAttr, _binder, _target, _args, _modifiers, _culture, _namedParameters) = notRequired "InvokeMember" (nameText()) - override _.AssemblyQualifiedName = notRequired "AssemblyQualifiedName" (nameText()) - override _.GetConstructorImpl(_bindingAttr, _binder, _callConvention, _types, _modifiers) = notRequired "GetConstructorImpl" (nameText()) - override _.GetCustomAttributes(_inherit) = [| |] - override _.GetCustomAttributes(_attributeType, _inherit) = [| |] - override _.IsDefined(_attributeType, _inherit) = false + override __.MemberType = notRequired "MemberType" (nameText()) + override __.GetMember(_name,_mt,_bindingAttr) = notRequired "GetMember" (nameText()) + override __.GUID = notRequired "GUID" (nameText()) + override __.InvokeMember(_name, _invokeAttr, _binder, _target, _args, _modifiers, _culture, _namedParameters) = notRequired "InvokeMember" (nameText()) + override __.AssemblyQualifiedName = notRequired "AssemblyQualifiedName" (nameText()) + override __.GetConstructorImpl(_bindingAttr, _binder, _callConvention, _types, _modifiers) = notRequired "GetConstructorImpl" (nameText()) + override __.GetCustomAttributes(_inherit) = [| |] + override __.GetCustomAttributes(_attributeType, _inherit) = [| |] + override __.IsDefined(_attributeType, _inherit) = false // FSharp.Data addition: this was added to support arrays of arrays override this.MakeArrayType() = ProvidedSymbolType(SymbolKind.SDArray, [this]) :> Type override this.MakeArrayType arg = ProvidedSymbolType(SymbolKind.Array arg, [this]) :> Type @@ -1160,13 +1160,13 @@ type ProvidedSymbolMethod(genericMethodDefinition: MethodInfo, parameters: Type let convParam (p:ParameterInfo) = { new System.Reflection.ParameterInfo() with - override _.Name = p.Name - override _.ParameterType = ProvidedSymbolType.convType parameters p.ParameterType - override _.Attributes = p.Attributes - override _.RawDefaultValue = p.RawDefaultValue + override __.Name = p.Name + override __.ParameterType = ProvidedSymbolType.convType parameters p.ParameterType + override __.Attributes = p.Attributes + override __.RawDefaultValue = p.RawDefaultValue #if FX_NO_CUSTOMATTRIBUTEDATA #else - override _.GetCustomAttributesData() = p.GetCustomAttributesData() + override __.GetCustomAttributesData() = p.GetCustomAttributesData() #endif } @@ -1176,28 +1176,28 @@ type ProvidedSymbolMethod(genericMethodDefinition: MethodInfo, parameters: Type override this.GetGenericArguments() = Seq.skip (if this.DeclaringType.IsGenericType then this.DeclaringType.GetGenericArguments().Length else 0) parameters |> Seq.toArray - override _.GetGenericMethodDefinition() = genericMethodDefinition + override __.GetGenericMethodDefinition() = genericMethodDefinition - override _.DeclaringType = ProvidedSymbolType.convType parameters genericMethodDefinition.DeclaringType - override _.ToString() = "Method " + genericMethodDefinition.Name - override _.Name = genericMethodDefinition.Name - override _.MetadataToken = genericMethodDefinition.MetadataToken - override _.Attributes = genericMethodDefinition.Attributes - override _.CallingConvention = genericMethodDefinition.CallingConvention - override _.MemberType = genericMethodDefinition.MemberType + override __.DeclaringType = ProvidedSymbolType.convType parameters genericMethodDefinition.DeclaringType + override __.ToString() = "Method " + genericMethodDefinition.Name + override __.Name = genericMethodDefinition.Name + override __.MetadataToken = genericMethodDefinition.MetadataToken + override __.Attributes = genericMethodDefinition.Attributes + override __.CallingConvention = genericMethodDefinition.CallingConvention + override __.MemberType = genericMethodDefinition.MemberType - override _.IsDefined(_attributeType, _inherit) : bool = notRequired "IsDefined" genericMethodDefinition.Name - override _.ReturnType = ProvidedSymbolType.convType parameters genericMethodDefinition.ReturnType - override _.GetParameters() = genericMethodDefinition.GetParameters() |> Array.map convParam - override _.ReturnParameter = genericMethodDefinition.ReturnParameter |> convParam - override _.ReturnTypeCustomAttributes = notRequired "ReturnTypeCustomAttributes" genericMethodDefinition.Name - override _.GetBaseDefinition() = notRequired "GetBaseDefinition" genericMethodDefinition.Name - override _.GetMethodImplementationFlags() = notRequired "GetMethodImplementationFlags" genericMethodDefinition.Name - override _.MethodHandle = notRequired "MethodHandle" genericMethodDefinition.Name - override _.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired "Invoke" genericMethodDefinition.Name - override _.ReflectedType = notRequired "ReflectedType" genericMethodDefinition.Name - override _.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" genericMethodDefinition.Name - override _.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" genericMethodDefinition.Name + override __.IsDefined(_attributeType, _inherit) : bool = notRequired "IsDefined" genericMethodDefinition.Name + override __.ReturnType = ProvidedSymbolType.convType parameters genericMethodDefinition.ReturnType + override __.GetParameters() = genericMethodDefinition.GetParameters() |> Array.map convParam + override __.ReturnParameter = genericMethodDefinition.ReturnParameter |> convParam + override __.ReturnTypeCustomAttributes = notRequired "ReturnTypeCustomAttributes" genericMethodDefinition.Name + override __.GetBaseDefinition() = notRequired "GetBaseDefinition" genericMethodDefinition.Name + override __.GetMethodImplementationFlags() = notRequired "GetMethodImplementationFlags" genericMethodDefinition.Name + override __.MethodHandle = notRequired "MethodHandle" genericMethodDefinition.Name + override __.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired "Invoke" genericMethodDefinition.Name + override __.ReflectedType = notRequired "ReflectedType" genericMethodDefinition.Name + override __.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" genericMethodDefinition.Name + override __.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" genericMethodDefinition.Name @@ -1223,16 +1223,16 @@ type ProvidedMeasureBuilder() = static let theBuilder = ProvidedMeasureBuilder() static member Default = theBuilder - member _.One = typeof - member _.Product (m1,m2) = typedefof>.MakeGenericType [| m1;m2 |] - member _.Inverse m = typedefof>.MakeGenericType [| m |] + member __.One = typeof + member __.Product (m1,m2) = typedefof>.MakeGenericType [| m1;m2 |] + member __.Inverse m = typedefof>.MakeGenericType [| m |] member b.Ratio (m1, m2) = b.Product(m1, b.Inverse m2) member b.Square m = b.Product(m, m) // FSharp.Data change: if the unit is not a valid type, instead // of assuming it's a type abbreviation, which may not be the case and cause a // problem later on, check the list of valid abbreviations - member _.SI (m:string) = + member __.SI (m:string) = let mLowerCase = m.ToLowerInvariant() let abbreviation = if unitNamesTypeAbbreviations.Contains mLowerCase then @@ -1252,7 +1252,7 @@ type ProvidedMeasureBuilder() = | None -> typedefof>.Assembly.GetType("Microsoft.FSharp.Data.UnitSystems.SI.UnitNames." + mLowerCase) - member _.AnnotateType (basicType, annotation) = ProvidedSymbolType(Generic basicType, annotation) :> Type + member __.AnnotateType (basicType, annotation) = ProvidedSymbolType(Generic basicType, annotation) :> Type @@ -1369,53 +1369,53 @@ type ProvidedTypeDefinition(container:TypeContainer,className : string, baseType let customAttributesImpl = CustomAttributesImpl() - member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member _.HideObjectMethods with set v = customAttributesImpl.HideObjectMethods <- v - member _.NonNullable with set v = customAttributesImpl.NonNullable <- v - member _.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() - member _.AddCustomAttribute attribute = customAttributesImpl.AddCustomAttribute attribute + member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member __.HideObjectMethods with set v = customAttributesImpl.HideObjectMethods <- v + member __.NonNullable with set v = customAttributesImpl.NonNullable <- v + member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() + member __.AddCustomAttribute attribute = customAttributesImpl.AddCustomAttribute attribute #if FX_NO_CUSTOMATTRIBUTEDATA #else - override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() #endif - member _.ResetEnclosingType (ty) = + member __.ResetEnclosingType (ty) = container <- TypeContainer.Type ty new (assembly:Assembly,namespaceName,className,baseType) = new ProvidedTypeDefinition(TypeContainer.Namespace (assembly,namespaceName), className, baseType) new (className,baseType) = new ProvidedTypeDefinition(TypeContainer.TypeToBeDecided, className, baseType) // state ops - override _.UnderlyingSystemType = typeof + override __.UnderlyingSystemType = typeof - member _.SetEnumUnderlyingType(ty) = enumUnderlyingType <- ty + member __.SetEnumUnderlyingType(ty) = enumUnderlyingType <- ty - override _.GetEnumUnderlyingType() = if this.IsEnum then enumUnderlyingType else invalidOp "not enum type" + override __.GetEnumUnderlyingType() = if this.IsEnum then enumUnderlyingType else invalidOp "not enum type" - member _.SetBaseType t = baseType <- lazy Some t + member __.SetBaseType t = baseType <- lazy Some t - member _.SetBaseTypeDelayed baseTypeFunction = baseType <- lazy (Some (baseTypeFunction())) + member __.SetBaseTypeDelayed baseTypeFunction = baseType <- lazy (Some (baseTypeFunction())) - member _.SetAttributes x = attributes <- x + member __.SetAttributes x = attributes <- x // Add MemberInfos - member _.AddMembersDelayed(membersFunction : unit -> list<#MemberInfo>) = + member __.AddMembersDelayed(membersFunction : unit -> list<#MemberInfo>) = membersQueue.Add (fun () -> membersFunction() |> List.map (fun x -> patchUpAddedMemberInfo this x; x :> MemberInfo )) - member _.AddMembers(memberInfos:list<#MemberInfo>) = (* strict *) + member __.AddMembers(memberInfos:list<#MemberInfo>) = (* strict *) memberInfos |> List.iter (patchUpAddedMemberInfo this) // strict: patch up now membersQueue.Add (fun () -> memberInfos |> List.map (fun x -> x :> MemberInfo)) - member _.AddMember(memberInfo:MemberInfo) = + member __.AddMember(memberInfo:MemberInfo) = this.AddMembers [memberInfo] - member _.AddMemberDelayed(memberFunction : unit -> #MemberInfo) = + member __.AddMemberDelayed(memberFunction : unit -> #MemberInfo) = this.AddMembersDelayed(fun () -> [memberFunction()]) - member _.AddAssemblyTypesAsNestedTypesDelayed (assemblyf : unit -> System.Reflection.Assembly) = + member __.AddAssemblyTypesAsNestedTypesDelayed (assemblyf : unit -> System.Reflection.Assembly) = let bucketByPath nodef tipf (items: (string list * 'Value) list) = // Find all the items with an empty key list and call 'tipf' let tips = @@ -1453,15 +1453,15 @@ type ProvidedTypeDefinition(container:TypeContainer,className : string, baseType loop topTypes) /// Abstract a type to a parametric-type. Requires "formal parameters" and "instantiation function". - member _.DefineStaticParameters(staticParameters : list, apply : (string -> obj[] -> ProvidedTypeDefinition)) = + member __.DefineStaticParameters(staticParameters : list, apply : (string -> obj[] -> ProvidedTypeDefinition)) = staticParams <- staticParameters staticParamsApply <- Some apply /// Get ParameterInfo[] for the parametric type parameters (//s GetGenericParameters) - member _.GetStaticParameters() = [| for p in staticParams -> p :> ParameterInfo |] + member __.GetStaticParameters() = [| for p in staticParams -> p :> ParameterInfo |] /// Instantiate parametrics type - member _.MakeParametricType(name:string,args:obj[]) = + member __.MakeParametricType(name:string,args:obj[]) = if staticParams.Length>0 then if staticParams.Length <> args.Length then failwith (sprintf "ProvidedTypeDefinition: expecting %d static parameters but given %d for type %s" staticParams.Length args.Length (fullName.Force())) @@ -1472,31 +1472,31 @@ type ProvidedTypeDefinition(container:TypeContainer,className : string, baseType else failwith (sprintf "ProvidedTypeDefinition: static parameters supplied but not expected for %s" (fullName.Force())) - member _.DeclaringTypeImpl + member __.DeclaringTypeImpl with set x = match container with TypeContainer.TypeToBeDecided -> () | _ -> failwith (sprintf "container type for '%s' was already set to '%s'" this.FullName x.FullName); container <- TypeContainer.Type x // Implement overloads - override _.Assembly = theAssembly.Force() + override __.Assembly = theAssembly.Force() - member _.SetAssembly assembly = theAssembly <- lazy assembly + member __.SetAssembly assembly = theAssembly <- lazy assembly - member _.SetAssemblyLazy assembly = theAssembly <- assembly + member __.SetAssemblyLazy assembly = theAssembly <- assembly - override _.FullName = fullName.Force() + override __.FullName = fullName.Force() - override _.Namespace = rootNamespace.Force() + override __.Namespace = rootNamespace.Force() - override _.BaseType = match baseType.Value with Some ty -> ty | None -> null + override __.BaseType = match baseType.Value with Some ty -> ty | None -> null // Constructors - override _.GetConstructors bindingAttr = + override __.GetConstructors bindingAttr = [| for m in this.GetMembers bindingAttr do if m.MemberType = MemberTypes.Constructor then yield (m :?> ConstructorInfo) |] // Methods - override _.GetMethodImpl(name, bindingAttr, _binderBinder, _callConvention, _types, _modifiers) : MethodInfo = + override __.GetMethodImpl(name, bindingAttr, _binderBinder, _callConvention, _types, _modifiers) : MethodInfo = let membersWithName = [ for m in this.GetMembers(bindingAttr) do if m.MemberType.HasFlag(MemberTypes.Method) && m.Name = name then @@ -1506,52 +1506,52 @@ type ProvidedTypeDefinition(container:TypeContainer,className : string, baseType | [meth] -> meth :?> MethodInfo | _several -> failwith "GetMethodImpl. not support overloads" - override _.GetMethods bindingAttr = + override __.GetMethods bindingAttr = this.GetMembers bindingAttr |> Array.filter (fun m -> m.MemberType.HasFlag(MemberTypes.Method)) |> Array.map (fun m -> m :?> MethodInfo) // Fields - override _.GetField(name, bindingAttr) = + override __.GetField(name, bindingAttr) = let fields = [| for m in this.GetMembers bindingAttr do if m.MemberType.HasFlag(MemberTypes.Field) && (name = null || m.Name = name) then // REVIEW: name = null. Is that a valid query?! yield m |] if fields.Length > 0 then fields.[0] :?> FieldInfo else null - override _.GetFields bindingAttr = + override __.GetFields bindingAttr = [| for m in this.GetMembers bindingAttr do if m.MemberType.HasFlag(MemberTypes.Field) then yield m :?> FieldInfo |] - override _.GetInterface(_name, _ignoreCase) = notRequired "GetInterface" this.Name + override __.GetInterface(_name, _ignoreCase) = notRequired "GetInterface" this.Name - override _.GetInterfaces() = + override __.GetInterfaces() = [| yield! getInterfaces() |] - member _.GetInterfaceImplementations() = + member __.GetInterfaceImplementations() = [| yield! getInterfaces() |] - member _.AddInterfaceImplementation ityp = interfaceImpls.Add ityp + member __.AddInterfaceImplementation ityp = interfaceImpls.Add ityp - member _.AddInterfaceImplementationsDelayed itypf = interfaceImplsDelayed.Add itypf + member __.AddInterfaceImplementationsDelayed itypf = interfaceImplsDelayed.Add itypf - member _.GetMethodOverrides() = + member __.GetMethodOverrides() = [| yield! methodOverrides |] - member _.DefineMethodOverride (bodyMethInfo,declMethInfo) = methodOverrides.Add (bodyMethInfo, declMethInfo) + member __.DefineMethodOverride (bodyMethInfo,declMethInfo) = methodOverrides.Add (bodyMethInfo, declMethInfo) // Events - override _.GetEvent(name, bindingAttr) = + override __.GetEvent(name, bindingAttr) = let events = this.GetMembers bindingAttr |> Array.filter(fun m -> m.MemberType.HasFlag(MemberTypes.Event) && (name = null || m.Name = name)) if events.Length > 0 then events.[0] :?> EventInfo else null - override _.GetEvents bindingAttr = + override __.GetEvents bindingAttr = [| for m in this.GetMembers bindingAttr do if m.MemberType.HasFlag(MemberTypes.Event) then yield downcast m |] // Properties - override _.GetProperties bindingAttr = + override __.GetProperties bindingAttr = [| for m in this.GetMembers bindingAttr do if m.MemberType.HasFlag(MemberTypes.Property) then yield downcast m |] - override _.GetPropertyImpl(name, bindingAttr, binder, returnType, types, modifiers) = + override __.GetPropertyImpl(name, bindingAttr, binder, returnType, types, modifiers) = if returnType <> null then failwith "Need to handle specified return type in GetPropertyImpl" if types <> null then failwith "Need to handle specified parameter types in GetPropertyImpl" if modifiers <> null then failwith "Need to handle specified modifiers in GetPropertyImpl" @@ -1562,10 +1562,10 @@ type ProvidedTypeDefinition(container:TypeContainer,className : string, baseType else null // Nested Types - override _.MakeArrayType() = ProvidedSymbolType(SymbolKind.SDArray, [this]) :> Type - override _.MakeArrayType arg = ProvidedSymbolType(SymbolKind.Array arg, [this]) :> Type - override _.MakePointerType() = ProvidedSymbolType(SymbolKind.Pointer, [this]) :> Type - override _.MakeByRefType() = ProvidedSymbolType(SymbolKind.ByRef, [this]) :> Type + override __.MakeArrayType() = ProvidedSymbolType(SymbolKind.SDArray, [this]) :> Type + override __.MakeArrayType arg = ProvidedSymbolType(SymbolKind.Array arg, [this]) :> Type + override __.MakePointerType() = ProvidedSymbolType(SymbolKind.Pointer, [this]) :> Type + override __.MakeByRefType() = ProvidedSymbolType(SymbolKind.ByRef, [this]) :> Type // FSharp.Data addition: this method is used by Debug.fs and QuotationBuilder.fs // Emulate the F# type provider type erasure mechanism to get the @@ -1603,7 +1603,7 @@ type ProvidedTypeDefinition(container:TypeContainer,className : string, baseType // The binding attributes are always set to DeclaredOnly ||| Static ||| Instance ||| Public when GetMembers is called directly by the F# compiler // However, it's possible for the framework to generate other sets of flags in some corner cases (e.g. via use of `enum` with a provided type as the target) - override _.GetMembers bindingAttr = + override __.GetMembers bindingAttr = let mems = getMembers() |> Array.filter (fun mem -> @@ -1633,14 +1633,14 @@ type ProvidedTypeDefinition(container:TypeContainer,className : string, baseType let baseMems = (ProvidedTypeDefinition.EraseType this.BaseType).GetMembers bindingAttr Array.append mems baseMems - override _.GetNestedTypes bindingAttr = + override __.GetNestedTypes bindingAttr = this.GetMembers bindingAttr |> Array.filter(fun m -> m.MemberType.HasFlag(MemberTypes.NestedType) || // Allow 'fake' nested types that are actually real .NET types m.MemberType.HasFlag(MemberTypes.TypeInfo)) |> Array.map(fun m -> m :?> Type) - override _.GetMember(name,mt,_bindingAttr) = + override __.GetMember(name,mt,_bindingAttr) = let mt = if mt &&& MemberTypes.NestedType = MemberTypes.NestedType then mt ||| MemberTypes.TypeInfo @@ -1648,7 +1648,7 @@ type ProvidedTypeDefinition(container:TypeContainer,className : string, baseType mt getMembers() |> Array.filter(fun m->0<>(int(m.MemberType &&& mt)) && m.Name = name) - override _.GetNestedType(name, bindingAttr) = + override __.GetNestedType(name, bindingAttr) = let nt = this.GetMember(name, MemberTypes.NestedType ||| MemberTypes.TypeInfo, bindingAttr) match nt.Length with | 0 -> null @@ -1656,44 +1656,44 @@ type ProvidedTypeDefinition(container:TypeContainer,className : string, baseType | _ -> failwith (sprintf "There is more than one nested type called '%s' in type '%s'" name this.FullName) // Attributes, etc.. - override _.GetAttributeFlagsImpl() = adjustTypeAttributes attributes this.IsNested - override _.IsArrayImpl() = false - override _.IsByRefImpl() = false - override _.IsPointerImpl() = false - override _.IsPrimitiveImpl() = false - override _.IsCOMObjectImpl() = false - override _.HasElementTypeImpl() = false - override _.Name = className - override _.DeclaringType = declaringType.Force() - override _.MemberType = if this.IsNested then MemberTypes.NestedType else MemberTypes.TypeInfo - override _.GetHashCode() = rootNamespace.GetHashCode() ^^^ className.GetHashCode() - override _.Equals(that:obj) = + override __.GetAttributeFlagsImpl() = adjustTypeAttributes attributes this.IsNested + override __.IsArrayImpl() = false + override __.IsByRefImpl() = false + override __.IsPointerImpl() = false + override __.IsPrimitiveImpl() = false + override __.IsCOMObjectImpl() = false + override __.HasElementTypeImpl() = false + override __.Name = className + override __.DeclaringType = declaringType.Force() + override __.MemberType = if this.IsNested then MemberTypes.NestedType else MemberTypes.TypeInfo + override __.GetHashCode() = rootNamespace.GetHashCode() ^^^ className.GetHashCode() + override __.Equals(that:obj) = match that with | null -> false | :? ProvidedTypeDefinition as ti -> System.Object.ReferenceEquals(this,ti) | _ -> false - override _.GetGenericArguments() = [||] - override _.ToString() = this.Name + override __.GetGenericArguments() = [||] + override __.ToString() = this.Name - override _.Module : Module = notRequired "Module" this.Name - override _.GUID = Guid.Empty - override _.GetConstructorImpl(_bindingAttr, _binder, _callConvention, _types, _modifiers) = null - override _.GetCustomAttributes(_inherit) = [| |] - override _.GetCustomAttributes(_attributeType, _inherit) = [| |] - override _.IsDefined(_attributeType: Type, _inherit) = false - - override _.GetElementType() = notRequired "Module" this.Name - override _.InvokeMember(_name, _invokeAttr, _binder, _target, _args, _modifiers, _culture, _namedParameters) = notRequired "Module" this.Name - override _.AssemblyQualifiedName = notRequired "Module" this.Name - member _.IsErased + override __.Module : Module = notRequired "Module" this.Name + override __.GUID = Guid.Empty + override __.GetConstructorImpl(_bindingAttr, _binder, _callConvention, _types, _modifiers) = null + override __.GetCustomAttributes(_inherit) = [| |] + override __.GetCustomAttributes(_attributeType, _inherit) = [| |] + override __.IsDefined(_attributeType: Type, _inherit) = false + + override __.GetElementType() = notRequired "Module" this.Name + override __.InvokeMember(_name, _invokeAttr, _binder, _target, _args, _modifiers, _culture, _namedParameters) = notRequired "Module" this.Name + override __.AssemblyQualifiedName = notRequired "Module" this.Name + member __.IsErased with get() = (attributes &&& enum (int32 TypeProviderTypeAttributes.IsErased)) <> enum 0 and set v = if v then attributes <- attributes ||| enum (int32 TypeProviderTypeAttributes.IsErased) else attributes <- attributes &&& ~~~(enum (int32 TypeProviderTypeAttributes.IsErased)) - member _.SuppressRelocation + member __.SuppressRelocation with get() = (attributes &&& enum (int32 TypeProviderTypeAttributes.SuppressRelocate)) <> enum 0 and set v = if v then attributes <- attributes ||| enum (int32 TypeProviderTypeAttributes.SuppressRelocate) @@ -1719,11 +1719,11 @@ type AssemblyGenerator(assemblyFileName) = // lambda name should be unique across all types that all type provider might contribute in result assembly sprintf "Lambda%O" (Guid.NewGuid()) - member _.Assembly = assembly :> Assembly + member __.Assembly = assembly :> Assembly /// Emit the given provided type definitions into an assembly and adjust 'Assembly' property of all type definitions to return that /// assembly. - member _.Generate(providedTypeDefinitions:(ProvidedTypeDefinition * string list option) list) = + member __.Generate(providedTypeDefinitions:(ProvidedTypeDefinition * string list option) list) = let ALL = BindingFlags.Public ||| BindingFlags.NonPublic ||| BindingFlags.Static ||| BindingFlags.Instance // phase 1 - set assembly fields and emit type definitions begin @@ -2490,7 +2490,7 @@ type AssemblyGenerator(assemblyFileName) = #if FX_NO_LOCAL_FILESYSTEM #else - member _.GetFinalBytes() = + member __.GetFinalBytes() = let assemblyBytes = File.ReadAllBytes assemblyFileName let _assemblyLoadedInMemory = System.Reflection.Assembly.Load(assemblyBytes,null,System.Security.SecurityContextSource.CurrentAppDomain) //printfn "final bytes in '%s'" assemblyFileName @@ -2540,10 +2540,10 @@ module Local = let makeProvidedNamespace (namespaceName:string) (types:ProvidedTypeDefinition list) = let types = [| for ty in types -> ty :> Type |] {new IProvidedNamespace with - member _.GetNestedNamespaces() = [| |] - member _.NamespaceName = namespaceName - member _.GetTypes() = types |> Array.copy - member _.ResolveTypeName typeName : System.Type = + member __.GetNestedNamespaces() = [| |] + member __.NamespaceName = namespaceName + member __.GetTypes() = types |> Array.copy + member __.ResolveTypeName typeName : System.Type = match types |> Array.tryFind (fun ty -> ty.Name = typeName) with | Some ty -> ty | None -> null @@ -2578,7 +2578,7 @@ type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list] - member _.Disposing = disposing.Publish + member __.Disposing = disposing.Publish #if FX_NO_LOCAL_FILESYSTEM interface System.IDisposable with @@ -2587,7 +2587,7 @@ type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list Assembly - default _.ResolveAssembly(args) = + default __.ResolveAssembly(args) = let expectedName = (AssemblyName(args.Name)).Name + ".dll" let expectedLocationOpt = probingFolders @@ -2597,12 +2597,12 @@ type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list Assembly.LoadFrom f | None -> null - member _.RegisterProbingFolder (folder) = + member __.RegisterProbingFolder (folder) = // use GetFullPath to ensure that folder is valid ignore(IO.Path.GetFullPath folder) probingFolders.Add folder - member _.RegisterRuntimeAssemblyLocationAsProbingFolder (config : TypeProviderConfig) = + member __.RegisterRuntimeAssemblyLocationAsProbingFolder (config : TypeProviderConfig) = config.RuntimeAssembly |> IO.Path.GetDirectoryName |> this.RegisterProbingFolder @@ -2613,20 +2613,20 @@ type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list) = otherNamespaces.Add (namespaceName,types) + member __.AddNamespace (namespaceName,types:list<_>) = otherNamespaces.Add (namespaceName,types) // FSharp.Data addition: this method is used by Debug.fs - member _.Namespaces = Seq.readonly otherNamespaces + member __.Namespaces = Seq.readonly otherNamespaces member this.Invalidate() = invalidateE.Trigger(this,EventArgs()) - member _.GetStaticParametersForMethod(mb: MethodBase) = + member __.GetStaticParametersForMethod(mb: MethodBase) = printfn "In GetStaticParametersForMethod" match mb with | :? ProvidedMethod as t -> t.GetStaticParameters() | _ -> [| |] - member _.ApplyStaticArgumentsForMethod(mb: MethodBase, mangledName, objs) = + member __.ApplyStaticArgumentsForMethod(mb: MethodBase, mangledName, objs) = printfn "In ApplyStaticArgumentsForMethod" match mb with | :? ProvidedMethod as t -> t.ApplyStaticArguments(mangledName, objs) :> MethodBase @@ -2635,11 +2635,11 @@ type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list] - override _.Invalidate = invalidateE.Publish + override __.Invalidate = invalidateE.Publish - override _.GetNamespaces() = Array.copy providedNamespaces.Value + override __.GetNamespaces() = Array.copy providedNamespaces.Value - member _.GetInvokerExpression(methodBase, parameters) = + member __.GetInvokerExpression(methodBase, parameters) = let rec getInvokerExpression (methodBase : MethodBase) parameters = match methodBase with | :? ProvidedMethod as m when (match methodBase.DeclaringType with :? ProvidedTypeDefinition as pt -> pt.IsErased | _ -> true) -> @@ -2675,7 +2675,7 @@ type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list m.GetCustomAttributesDataImpl() | :? ProvidedMethod as m -> m.GetCustomAttributesDataImpl() @@ -2686,14 +2686,14 @@ type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list m.GetCustomAttributesDataImpl() | _ -> [| |] :> IList<_> - member _.GetParameterCustomAttributesData(methodBase) = + member __.GetParameterCustomAttributesData(methodBase) = match methodBase with | :? ProvidedParameter as m -> m.GetCustomAttributesDataImpl() | _ -> [| |] :> IList<_> #endif - override _.GetStaticParameters(ty) = + override __.GetStaticParameters(ty) = match ty with | :? ProvidedTypeDefinition as t -> if ty.Name = t.Name (* REVIEW: use equality? *) then @@ -2702,14 +2702,14 @@ type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list [| |] - override _.ApplyStaticArguments(ty,typePathAfterArguments:string[],objs) = + override __.ApplyStaticArguments(ty,typePathAfterArguments:string[],objs) = let typePathAfterArguments = typePathAfterArguments.[typePathAfterArguments.Length-1] match ty with | :? ProvidedTypeDefinition as t -> (t.MakeParametricType(typePathAfterArguments,objs) :> Type) | _ -> failwith (sprintf "ApplyStaticArguments: static params for type %s are unexpected" ty.FullName) #if FX_NO_LOCAL_FILESYSTEM - override _.GetGeneratedAssemblyContents(_assembly) = + override __.GetGeneratedAssemblyContents(_assembly) = // TODO: this is very fake, we rely on the fact it is never needed match System.Windows.Application.GetResourceStream(System.Uri("FSharp.Core.dll",System.UriKind.Relative)) with | null -> failwith "FSharp.Core.dll not found as Manifest Resource, we're just trying to read some random .NET assembly, ok?" @@ -2725,7 +2725,7 @@ type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list bytes.Force() diff --git a/tests/service/data/TestTP/TestTP.fsproj b/tests/service/data/TestTP/TestTP.fsproj index 442fc909f7a..4343a1d8a4a 100644 --- a/tests/service/data/TestTP/TestTP.fsproj +++ b/tests/service/data/TestTP/TestTP.fsproj @@ -5,7 +5,7 @@ net472 true nunit - $(OtherFlags) --nowarn:3390 --nowarn:3218 + --nowarn:3390 --nowarn:3218 diff --git a/tests/walkthroughs/DebugStepping/TheBigFileOfDebugStepping.fsx b/tests/walkthroughs/DebugStepping/TheBigFileOfDebugStepping.fsx index b5dcc2d6f0b..6a99c01e5e7 100644 --- a/tests/walkthroughs/DebugStepping/TheBigFileOfDebugStepping.fsx +++ b/tests/walkthroughs/DebugStepping/TheBigFileOfDebugStepping.fsx @@ -168,24 +168,6 @@ let ListExpressionSteppingTest6 () = printfn "goodbye" yield x ] -let ListExpressionSteppingTest7 () = - [ for x in 1..4 do - printfn "hello" - yield x ] - -let ListExpressionSteppingTest8 () = - [ for x in 1..4 do - match x with - | 1 -> - printfn "hello" - yield x - | 2 -> - printfn "hello" - yield x - | _ -> - yield x - ] - let SeqExpressionSteppingTest1 () = seq { yield 1 } @@ -692,8 +674,6 @@ ListExpressionSteppingTest3() ListExpressionSteppingTest4() ListExpressionSteppingTest5() ListExpressionSteppingTest6() -ListExpressionSteppingTest7() -ListExpressionSteppingTest8() SeqExpressionSteppingTest1()|> Seq.length SeqExpressionSteppingTest2()|> Seq.length SeqExpressionSteppingTest3()|> Seq.length diff --git a/tests/walkthroughs/sdk-script-manual-tests/README.md.txt b/tests/walkthroughs/sdk-script-manual-tests/README.md.txt deleted file mode 100644 index 7d0428ddc0c..00000000000 --- a/tests/walkthroughs/sdk-script-manual-tests/README.md.txt +++ /dev/null @@ -1,84 +0,0 @@ - - - -#### no warnings - -``` -artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\netcore-script.fsx -artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\netfx-script.fsx -artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\neutral-script.fsx -artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\netcore-script-reference-netcore-script.fsx -artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\netcore-script-reference-neutral-script.fsx -artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\netfx-script-reference-netfx-script.fsx -artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\netfx-script-reference-neutral-script.fsx -artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\neutral-script-reference-netcore-script.fsx -artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\neutral-script-reference-netfx-script.fsx -artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\neutral-script-reference-neutral-script.fsx -``` -#### warnings - -``` -artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\netcore-script-reference-netfx-script.fsx -artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\netfx-script-reference-netcore-script.fsx -``` - - -``` -dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\netcore-script.fsx -dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\netfx-script.fsx -dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\neutral-script.fsx -dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\netcore-script-reference-netcore-script.fsx -dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\netcore-script-reference-netfx-script.fsx -dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\netcore-script-reference-neutral-script.fsx -dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\netfx-script-reference-netcore-script.fsx -dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\netfx-script-reference-netfx-script.fsx -dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\netfx-script-reference-neutral-script.fsx -dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\neutral-script-reference-netcore-script.fsx -dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\neutral-script-reference-netfx-script.fsx -dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\neutral-script-reference-neutral-script.fsx -``` - -#### no warnings - -``` -artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\netfx-script.fsx -artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\neutral-script.fsx -artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\netfx-script-reference-netfx-script.fsx -artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\netfx-script-reference-neutral-script.fsx -artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\neutral-script-reference-netfx-script.fsx -artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\neutral-script-reference-neutral-script.fsx -``` - -#### warnings - -``` -artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\netcore-script.fsx -artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\netcore-script-reference-netcore-script.fsx -artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\netcore-script-reference-netfx-script.fsx -artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\netcore-script-reference-neutral-script.fsx -artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\netfx-script-reference-netcore-script.fsx -artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\neutral-script-reference-netcore-script.fsx -``` - -#### no warnings - -``` -dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\netcore-script.fsx -dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\neutral-script.fsx -dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\netcore-script-reference-netcore-script.fsx -dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\netcore-script-reference-netfx-script.fsx -dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\netcore-script-reference-neutral-script.fsx -``` - -#### warnings - -``` -dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\netfx-script.fsx -dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\netfx-script-reference-netcore-script.fsx -dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\netfx-script-reference-netfx-script.fsx -dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\netfx-script-reference-neutral-script.fsx -dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\neutral-script-reference-netcore-script.fsx -dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\neutral-script-reference-netfx-script.fsx -dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\neutral-script-reference-neutral-script.fsx - -``` \ No newline at end of file diff --git a/tests/walkthroughs/sdk-script-manual-tests/netcore-script-reference-netcore-script.fsx b/tests/walkthroughs/sdk-script-manual-tests/netcore-script-reference-netcore-script.fsx deleted file mode 100644 index c2dea42e0a1..00000000000 --- a/tests/walkthroughs/sdk-script-manual-tests/netcore-script-reference-netcore-script.fsx +++ /dev/null @@ -1,9 +0,0 @@ - -#r "System.dll" -//#r "nuget: FSharp.Data" -//#r "nuget: Quack" -printfn "hello from %s" __SOURCE_FILE__ -#r "netstandard.dll" - -#load "netcore-script.fsx" - diff --git a/tests/walkthroughs/sdk-script-manual-tests/netcore-script.fsx b/tests/walkthroughs/sdk-script-manual-tests/netcore-script.fsx deleted file mode 100644 index 025547c8450..00000000000 --- a/tests/walkthroughs/sdk-script-manual-tests/netcore-script.fsx +++ /dev/null @@ -1,26 +0,0 @@ - -#r "System.dll" - -printfn "hello from %s" __SOURCE_FILE__ - -System.Environment.CurrentDirectory - -#r "netstandard.dll" - -// A .netcoreapp3.1 api -let f x = System.Runtime.InteropServices.NativeLibrary.Free(x) - -1+1 - - -//#r "nuget: DiffSharp.Core,1.0.0-preview-263264614" - -//#r "nuget: Quack" - - - - -//#r "System.EnterpriseServices.dll" -//// A netfx api -//let f2 (x: System.EnterpriseServices.Activity) = () - diff --git a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-3.1.0/global.json b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-3.1.0/global.json deleted file mode 100644 index c120c8115ea..00000000000 --- a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-3.1.0/global.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "sdk": { - "version": "3.1.301" - } -} \ No newline at end of file diff --git a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-3.1.0/netcore-script-sdk-3.1.0.fsx b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-3.1.0/netcore-script-sdk-3.1.0.fsx deleted file mode 100644 index 14bc4a2334f..00000000000 --- a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-3.1.0/netcore-script-sdk-3.1.0.fsx +++ /dev/null @@ -1,26 +0,0 @@ - -#r "System.dll" - -printfn "hello from %s" __SOURCE_FILE__ - -System.Environment.CurrentDirectory - -#r "netstandard.dll" - -// A .netcoreapp3.1 api -let f x = System.Runtime.InteropServices.NativeLibrary.Free(x) - - -1+1 - -#r "nuget: DiffSharp.Core,1.0.0-preview-263264614" - -//#r "nuget: Quack" - - - - -//#r "System.EnterpriseServices.dll" -//// A netfx api -//let f2 (x: System.EnterpriseServices.Activity) = () - diff --git a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-5.0.101/global.json b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-5.0.101/global.json deleted file mode 100644 index fbb332028b9..00000000000 --- a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-5.0.101/global.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "sdk": { - "version": "5.0.101" - } -} \ No newline at end of file diff --git a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-5.0.101/netcore-script-sdk-5.0.101.fsx b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-5.0.101/netcore-script-sdk-5.0.101.fsx deleted file mode 100644 index 53ee539c4a8..00000000000 --- a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-5.0.101/netcore-script-sdk-5.0.101.fsx +++ /dev/null @@ -1,26 +0,0 @@ - -#r "System.dll" - -printfn "hello from %s" __SOURCE_FILE__ - -System.Environment.CurrentDirectory - -#r "netstandard.dll" - -// A .netcoreapp3.1 api -let f x = System.Runtime.InteropServices.NativeLibrary.Free(x) - - -1+1 - -//#r "nuget: DiffSharp.Core,1.0.0-preview-263264614" - -//#r "nuget: Quack" - - - - -//#r "System.EnterpriseServices.dll" -//// A netfx api -//let f2 (x: System.EnterpriseServices.Activity) = () - diff --git a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/global.json b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/global.json deleted file mode 100644 index 7337e805efb..00000000000 --- a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/global.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "sdk": { - "version": "666.666.666" - } -} \ No newline at end of file diff --git a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/netcore-script-sdk-666.666.666 - Copy.fsx b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/netcore-script-sdk-666.666.666 - Copy.fsx deleted file mode 100644 index 53f3881d296..00000000000 --- a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/netcore-script-sdk-666.666.666 - Copy.fsx +++ /dev/null @@ -1,13 +0,0 @@ - -#r "System.dll" - -printfn "hello from %s" __SOURCE_FILE__ - -System.Environment.CurrentDirectory - -#r "netstandard.dll" - -// A .netcoreapp3.1 api -let f x = System.Runtime.InteropServices.NativeLibrary.Free(x) - -1+1 diff --git a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/netcore-script-sdk-666.666.666.fsx b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/netcore-script-sdk-666.666.666.fsx deleted file mode 100644 index 7756ebcebbf..00000000000 --- a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/netcore-script-sdk-666.666.666.fsx +++ /dev/null @@ -1,14 +0,0 @@ - -#r "System.dll" - -printfn "hello from %s" __SOURCE_FILE__ - -System.Environment.CurrentDirectory - -#r "netstandard.dll" - -// A .netcoreapp3.1 api -let f x = System.Runtime.InteropServices.NativeLibrary.Free(x) - - -1+1 diff --git a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.667/global.json b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.667/global.json deleted file mode 100644 index 7337e805efb..00000000000 --- a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.667/global.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "sdk": { - "version": "666.666.666" - } -} \ No newline at end of file diff --git a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.667/netcore-script-sdk-666.666.666.fsx b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.667/netcore-script-sdk-666.666.666.fsx deleted file mode 100644 index 7756ebcebbf..00000000000 --- a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.667/netcore-script-sdk-666.666.666.fsx +++ /dev/null @@ -1,14 +0,0 @@ - -#r "System.dll" - -printfn "hello from %s" __SOURCE_FILE__ - -System.Environment.CurrentDirectory - -#r "netstandard.dll" - -// A .netcoreapp3.1 api -let f x = System.Runtime.InteropServices.NativeLibrary.Free(x) - - -1+1 diff --git a/vsintegration/Directory.Build.targets b/vsintegration/Directory.Build.targets index 170ace14822..3eb8d6a5df3 100644 --- a/vsintegration/Directory.Build.targets +++ b/vsintegration/Directory.Build.targets @@ -2,6 +2,10 @@ + + true + + @@ -13,8 +17,8 @@ + - diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj index ee7baed3960..889923f5f98 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj @@ -3,7 +3,6 @@ Exe $if$ ($targetframeworkversion$ == 4.5) net45$endif$$if$ ($targetframeworkversion$ == 4.6) net46 $endif$$if$ ($targetframeworkversion$ == 4.6.1) net461 $endif$$if$ ($targetframeworkversion$ == 4.6.2) net462 $endif$$if$ ($targetframeworkversion$ == 4.7) net47 $endif$$if$ ($targetframeworkversion$ == 4.7.1) net471 $endif$$if$ ($targetframeworkversion$ == 4.7.2) net472 $endif$$if$ ($targetframeworkversion$ == 4.8) net48 $endif$ $if$ ($safeprojectname$ != $projectname$) $safeprojectname$ $endif$ - 3390;$(WarnOn) diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj index 736dff548d6..2b34dbdff03 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj @@ -3,7 +3,6 @@ $if$ ($targetframeworkversion$ == 4.5) net45$endif$$if$ ($targetframeworkversion$ == 4.6) net46 $endif$$if$ ($targetframeworkversion$ == 4.6.1) net461 $endif$$if$ ($targetframeworkversion$ == 4.6.2) net462 $endif$$if$ ($targetframeworkversion$ == 4.7) net47 $endif$$if$ ($targetframeworkversion$ == 4.7.1) net471 $endif$$if$ ($targetframeworkversion$ == 4.7.2) net472 $endif$$if$ ($targetframeworkversion$ == 4.8) net48 $endif$ $if$ ($safeprojectname$ != $projectname$) $safeprojectname$ $endif$ true - 3390;$(WarnOn) diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj index 83103261b80..0b2f380c5dd 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj @@ -3,7 +3,6 @@ Exe $if$ ($targetframeworkversion$ == 4.5) net45$endif$$if$ ($targetframeworkversion$ == 4.6) net46 $endif$$if$ ($targetframeworkversion$ == 4.6.1) net461 $endif$$if$ ($targetframeworkversion$ == 4.6.2) net462 $endif$$if$ ($targetframeworkversion$ == 4.7) net47 $endif$$if$ ($targetframeworkversion$ == 4.7.1) net471 $endif$$if$ ($targetframeworkversion$ == 4.7.2) net472 $endif$$if$ ($targetframeworkversion$ == 4.8) net48 $endif$ $if$ ($safeprojectname$ != $projectname$) $safeprojectname$ $endif$ - 3390;$(WarnOn) diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsx b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsx index 741e8c5a866..52b6649ca38 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsx +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsx @@ -1,4 +1,4 @@ -// @@@SampleHeader|This sample will guide you through elements of the F# language.@@@ +// @@@SampleHeader|This sample will guide you through elements of the F# language.@@@ // // ******************************************************************************************************* // @@@Instructions-Line1|To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click@@@ @@ -986,3 +986,12 @@ module Events = // @@@TriggerEventWithArgs|Next, trigger this event (note that sender argument should be set).@@@ eventForDelegateType.Trigger(null, EventArgs.Empty) + + + +#if COMPILED +module BoilerPlateForForm = + [] + do () + do System.Windows.Forms.Application.Run() +#endif diff --git a/vsintegration/Vsix/VisualFSharpFull/Properties/launchSettings.json b/vsintegration/Vsix/VisualFSharpFull/Properties/launchSettings.json index a3e00ad6bec..18d884aa2e7 100644 --- a/vsintegration/Vsix/VisualFSharpFull/Properties/launchSettings.json +++ b/vsintegration/Vsix/VisualFSharpFull/Properties/launchSettings.json @@ -1,6 +1,6 @@ { "profiles": { - "VisualFSharpDebug": { + "VisualFSharpFull": { "commandName": "Executable", "executablePath": "$(DevEnvDir)devenv.exe", "commandLineArgs": "/rootsuffix $(VSSDKTargetPlatformRegRootSuffix) /log" diff --git a/vsintegration/Vsix/VisualFSharpFull/Source.extension.vsixmanifest b/vsintegration/Vsix/VisualFSharpFull/Source.extension.vsixmanifest index c6294c49632..ddefbd74b71 100644 --- a/vsintegration/Vsix/VisualFSharpFull/Source.extension.vsixmanifest +++ b/vsintegration/Vsix/VisualFSharpFull/Source.extension.vsixmanifest @@ -15,8 +15,7 @@ - - + @@ -30,6 +29,7 @@ + diff --git a/vsintegration/Vsix/VisualFSharpFull/VisualFSharp.Core.targets b/vsintegration/Vsix/VisualFSharpFull/VisualFSharp.Core.targets deleted file mode 100644 index 3650e6ef923..00000000000 --- a/vsintegration/Vsix/VisualFSharpFull/VisualFSharp.Core.targets +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - - Designer - - - - RegisterFsharpPackage.pkgdef - {{FSProductVersion}} - $(FSProductVersion) - {{FSLanguageVersion}} - $(FSLanguageVersion) - true - RegisterFsharpPackage.pkgdef - - - - PreserveNewest - License.txt - true - - - - - - {702A7979-BCF9-4C41-853E-3ADFC9897890} - FSharp.Build - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - TargetFramework=$(DependencyTargetFramework) - - - - {649FA588-F02E-457C-9FCF-87E46407481E} - FSharp.Compiler.Interactive.Settings - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - TargetFramework=netstandard2.0 - - - - {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06} - FSharp.Compiler.Server.Shared - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - TargetFramework=$(DependencyTargetFramework) - - - - {A59DB8AE-8044-41A5-848A-800A7FF31C93} - FSharp.Compiler.Service - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - TargetFramework=$(DependencyTargetFramework) - - - - {DED3BBD7-53F4-428A-8C9F-27968E768605} - FSharp.Core - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - TargetFramework=netstandard2.0 - - - - false - False - - - - false - False - - - - false - False - - - - {65e0e82a-eace-4787-8994-888674c2fe87} - FSharp.Editor - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - - - - {c4586a06-1402-48bc-8e35-a1b8642f895b} - FSharp.UIResources - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - True - - - - {1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF} - FSharp.LanguageService.Base - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - - - - {EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F} - FSharp.LanguageService - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - - - - {B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7} - ProjectSystem.Base - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - - - - {6196B0F8-CAEA-4CF1-AF82-1B520F77FE44} - ProjectSystem - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - - - - {FCFB214C-462E-42B3-91CA-FC557EFEE74F} - FSharp.PropertiesPages - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - - - - {991DCF75-C2EB-42B6-9A0D-AA1D2409D519} - FSharp.VS.FSI - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - - - - {6ba13aa4-c25f-480f-856b-8e8000299a72} - AppConfig - ItemTemplates - TemplateProjectOutputGroup%3b - false - True - - - - {12ac2813-e895-4aaa-ae6c-94e21da09f64} - CodeFile - ItemTemplates - TemplateProjectOutputGroup%3b - false - True - - - - {0385564F-07B4-4264-AB8A-17C393E9140C} - ResourceFile - 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 - - - - - - - - - \ No newline at end of file diff --git a/vsintegration/Vsix/VisualFSharpFull/VisualFSharpDebug.csproj b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpDebug.csproj deleted file mode 100644 index 3c667559ccb..00000000000 --- a/vsintegration/Vsix/VisualFSharpFull/VisualFSharpDebug.csproj +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - Library - Microsoft\FSharp - netcoreapp1.0 - true - net472 - - - - - - - - - - - - - - Tools/%(_XlfLanguages.Identity) - true - - - - Tools/%(_XlfLanguages.Identity) - true - - - - Tools/%(_XlfLanguages.Identity) - true - - - - Tools - true - - - - Tools - true - - - - Tools - true - - - - - diff --git a/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj index 10c18b8530e..be3261418ec 100644 --- a/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj +++ b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj @@ -8,10 +8,280 @@ netcoreapp1.0 true net472 - - false - + + + Designer + - \ No newline at end of file + + RegisterFsharpPackage.pkgdef + {{FSProductVersion}} + $(FSProductVersion) + {{FSLanguageVersion}} + $(FSLanguageVersion) + true + RegisterFsharpPackage.pkgdef + + + + PreserveNewest + License.txt + true + + + + + + {702A7979-BCF9-4C41-853E-3ADFC9897890} + FSharp.Build + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + TargetFramework=$(DependencyTargetFramework) + + + {649FA588-F02E-457C-9FCF-87E46407481E} + FSharp.Compiler.Interactive.Settings + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + TargetFramework=netstandard2.0 + + + {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06} + FSharp.Compiler.Server.Shared + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + TargetFramework=$(DependencyTargetFramework) + + + {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3} + FSharp.Compiler.Private + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + TargetFramework=$(DependencyTargetFramework) + + + FSharp.DependencyManager.Nuget + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + TargetFramework=netstandard2.0 + + + Microsoft.DotNet.DependencyManager + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + TargetFramework=net472 + + + {DED3BBD7-53F4-428A-8C9F-27968E768605} + FSharp.Core + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + TargetFramework=netstandard2.0 + + + {8B3E283D-B5FE-4055-9D80-7E3A32F3967B} + FsiAnyCpu + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3b + DebugSymbolsProjectOutputGroup%3b + true + [installDir]\Common7\IDE\CommonExtensions\Microsoft\FSharp\fsiAnyCpu.exe + X64 + 2 + True + TargetFramework=$(DependencyTargetFramework) + + + {D0E98C0D-490B-4C61-9329-0862F6E87645} + Fsi + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3b + DebugSymbolsProjectOutputGroup%3b + true + [installDir]\Common7\IDE\CommonExtensions\Microsoft\FSharp\fsi.exe + X86 + 2 + True + TargetFramework=$(DependencyTargetFramework) + + + {C94C257C-3C0A-4858-B5D8-D746498D1F08} + fsc + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3b + DebugSymbolsProjectOutputGroup%3b + true + [installDir]\Common7\IDE\CommonExtensions\Microsoft\FSharp\fsc.exe + All + 2 + True + TargetFramework=$(DependencyTargetFramework) + + + {65e0e82a-eace-4787-8994-888674c2fe87} + FSharp.Editor + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + + + {c4586a06-1402-48bc-8e35-a1b8642f895b} + FSharp.UIResources + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + True + + + {1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF} + FSharp.LanguageService.Base + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + + + {EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F} + FSharp.LanguageService + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + + + {B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7} + ProjectSystem.Base + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + + + {6196B0F8-CAEA-4CF1-AF82-1B520F77FE44} + ProjectSystem + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + + + {FCFB214C-462E-42B3-91CA-FC557EFEE74F} + FSharp.PropertiesPages + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + + + {991DCF75-C2EB-42B6-9A0D-AA1D2409D519} + FSharp.VS.FSI + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + + + + {6ba13aa4-c25f-480f-856b-8e8000299a72} + AppConfig + ItemTemplates + TemplateProjectOutputGroup%3b + false + True + + + {12ac2813-e895-4aaa-ae6c-94e21da09f64} + CodeFile + ItemTemplates + TemplateProjectOutputGroup%3b + false + True + + + {0385564F-07B4-4264-AB8A-17C393E9140C} + ResourceFile + 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 + + + + + + + + diff --git a/vsintegration/src/FSharp.Editor/AutomaticCompletion/BraceCompletionSessionProvider.fs b/vsintegration/src/FSharp.Editor/AutomaticCompletion/BraceCompletionSessionProvider.fs index 184dbcf959d..0ee68698c2e 100644 --- a/vsintegration/src/FSharp.Editor/AutomaticCompletion/BraceCompletionSessionProvider.fs +++ b/vsintegration/src/FSharp.Editor/AutomaticCompletion/BraceCompletionSessionProvider.fs @@ -76,11 +76,11 @@ type BraceCompletionSession let mutable openingPoint : ITrackingPoint = null let editorOperations = editorOperationsFactoryService.GetEditorOperations(textView) - member _.EndSession() = + member __.EndSession() = closingPoint <- null openingPoint <- null - member _.CreateUndoTransaction() = + member __.CreateUndoTransaction() = undoHistory.CreateTransaction(BraceCompletion) member this.Start (cancellationToken: CancellationToken) = @@ -148,7 +148,7 @@ type BraceCompletionSession undo.Complete() - member _.HasNoForwardTyping(caretPoint: SnapshotPoint, endPoint: SnapshotPoint) = + member __.HasNoForwardTyping(caretPoint: SnapshotPoint, endPoint: SnapshotPoint) = Debug.Assert(caretPoint.Snapshot = endPoint.Snapshot, "snapshots do not match") if caretPoint.Snapshot = endPoint.Snapshot then @@ -173,7 +173,7 @@ type BraceCompletionSession else false - member _.MoveCaretToClosingPoint() = + member __.MoveCaretToClosingPoint() = let closingSnapshotPoint = closingPoint.GetPoint(subjectBuffer.CurrentSnapshot) // find the position just after the closing brace in the view's text buffer @@ -217,7 +217,7 @@ type BraceCompletionSession undo.Complete() this.EndSession() - member _.PostBackspace() = () + member __.PostBackspace() = () member this.PreOverType handledCommand = handledCommand <- false @@ -259,7 +259,7 @@ type BraceCompletionSession undo.Complete() | _ -> () - member _.PostOverType() = () + member __.PostOverType() = () member this.PreTab handledCommand = handledCommand <- false @@ -274,7 +274,7 @@ type BraceCompletionSession editorOperations.AddAfterTextBufferChangePrimitive() undo.Complete() - member _.PreReturn handledCommand = + member __.PreReturn handledCommand = handledCommand <- false member this.PostReturn() = @@ -286,26 +286,26 @@ type BraceCompletionSession session.AfterReturn(this, CancellationToken.None) | _ -> () - member _.Finish() = () + member __.Finish() = () - member _.PostTab() = () + member __.PostTab() = () - member _.PreDelete handledCommand = + member __.PreDelete handledCommand = handledCommand <- false - member _.PostDelete() = () + member __.PostDelete() = () - member _.OpeningBrace = openingBrace + member __.OpeningBrace = openingBrace - member _.ClosingBrace = closingBrace + member __.ClosingBrace = closingBrace - member _.OpeningPoint = openingPoint + member __.OpeningPoint = openingPoint - member _.ClosingPoint = closingPoint + member __.ClosingPoint = closingPoint - member _.SubjectBuffer = subjectBuffer + member __.SubjectBuffer = subjectBuffer - member _.TextView = textView + member __.TextView = textView module Parenthesis = @@ -372,50 +372,50 @@ type ParenthesisCompletionSession() = interface IEditorBraceCompletionSession with - member _.AfterReturn(_session, _cancellationToken) = + member __.AfterReturn(_session, _cancellationToken) = () - member _.AfterStart(_session, _cancellationToken) = + member __.AfterStart(_session, _cancellationToken) = () - member _.AllowOverType(_session, _cancellationToken) = + member __.AllowOverType(_session, _cancellationToken) = true - member _.CheckOpeningPoint(_session, _cancellationToken) = + member __.CheckOpeningPoint(_session, _cancellationToken) = true type DoubleQuoteCompletionSession() = interface IEditorBraceCompletionSession with - member _.AfterReturn(_session, _cancellationToken) = + member __.AfterReturn(_session, _cancellationToken) = () - member _.AfterStart(_session, _cancellationToken) = + member __.AfterStart(_session, _cancellationToken) = () - member _.AllowOverType(_session, _cancellationToken) = + member __.AllowOverType(_session, _cancellationToken) = true - member _.CheckOpeningPoint(_session, _cancellationToken) = + member __.CheckOpeningPoint(_session, _cancellationToken) = true type VerticalBarCompletionSession() = interface IEditorBraceCompletionSession with - member _.AfterReturn(_session, _cancellationToken) = + member __.AfterReturn(_session, _cancellationToken) = () - member _.AfterStart(_session, _cancellationToken) = + member __.AfterStart(_session, _cancellationToken) = () - member _.AllowOverType(_session, _cancellationToken) = + member __.AllowOverType(_session, _cancellationToken) = true (* This is for [| |] and {| |} , since the implementation deals with chars only. We have to test if there is a { or [ before the cursor position and insert the closing '|'. *) - member _.CheckOpeningPoint(session, _cancellationToken) = + member __.CheckOpeningPoint(session, _cancellationToken) = tryInsertAdditionalBracePair session CurlyBrackets.OpenCharacter CurlyBrackets.CloseCharacter || tryInsertAdditionalBracePair session SquareBrackets.OpenCharacter SquareBrackets.CloseCharacter @@ -423,18 +423,18 @@ type AngleBracketCompletionSession() = interface IEditorBraceCompletionSession with - member _.AfterReturn(_session, _cancellationToken) = + member __.AfterReturn(_session, _cancellationToken) = () - member _.AfterStart(_session, _cancellationToken) = + member __.AfterStart(_session, _cancellationToken) = () - member _.AllowOverType(_session, _cancellationToken) = + member __.AllowOverType(_session, _cancellationToken) = true (* This is for attributes [< >] , since the implementation deals with chars only. We have to test if there is a [ before the cursor position and insert the closing '>'. *) - member _.CheckOpeningPoint(session, _cancellationToken) = + member __.CheckOpeningPoint(session, _cancellationToken) = tryInsertAdditionalBracePair session SquareBrackets.OpenCharacter SquareBrackets.CloseCharacter (* For multi-line comments, test if it is between "()" *) @@ -442,18 +442,18 @@ type AsteriskCompletionSession() = interface IEditorBraceCompletionSession with - member _.AfterReturn(_session, _cancellationToken) = + member __.AfterReturn(_session, _cancellationToken) = () - member _.AfterStart(_session, _cancellationToken) = + member __.AfterStart(_session, _cancellationToken) = () - member _.AllowOverType(_session, _cancellationToken) = + member __.AllowOverType(_session, _cancellationToken) = true (* This is for attributes [< >] , since the implementation deals with chars only. We have to test if there is a [ before the cursor position and insert the closing '>'. *) - member _.CheckOpeningPoint(session, _cancellationToken) = + member __.CheckOpeningPoint(session, _cancellationToken) = tryInsertAdditionalBracePair session Parenthesis.OpenCharacter Parenthesis.CloseCharacter [, FSharpConstants.FSharpLanguageName)>] @@ -465,14 +465,14 @@ type EditorBraceCompletionSessionFactory() = | ClassificationTypeNames.StringLiteral -> false | _ -> true - member _.IsSupportedOpeningBrace openingBrace = + member __.IsSupportedOpeningBrace openingBrace = match openingBrace with | Parenthesis.OpenCharacter | CurlyBrackets.OpenCharacter | SquareBrackets.OpenCharacter | DoubleQuote.OpenCharacter | VerticalBar.OpenCharacter | AngleBrackets.OpenCharacter | Asterisk.OpenCharacter -> true | _ -> false - member _.CheckCodeContext(document: Document, position: int, _openingBrace:char, cancellationToken) = + member __.CheckCodeContext(document: Document, position: int, _openingBrace:char, cancellationToken) = // We need to know if we are inside a F# string or comment. If we are, then don't do automatic completion. let sourceCodeTask = document.GetTextAsync(cancellationToken) sourceCodeTask.Wait(cancellationToken) @@ -504,7 +504,7 @@ type EditorBraceCompletionSessionFactory() = // classifiedSpan.TextSpan.IntersectsWith position && // not (spanIsString classifiedSpan))))) - member _.CreateEditorSession(_document, _openingPosition, openingBrace, _cancellationToken) = + member __.CreateEditorSession(_document, _openingPosition, openingBrace, _cancellationToken) = match openingBrace with | Parenthesis.OpenCharacter -> ParenthesisCompletionSession() :> IEditorBraceCompletionSession | CurlyBrackets.OpenCharacter -> ParenthesisCompletionSession() :> IEditorBraceCompletionSession @@ -541,7 +541,7 @@ type BraceCompletionSessionProvider interface IBraceCompletionSessionProvider with - member _.TryCreateSession(textView, openingPoint, openingBrace, closingBrace, session) = + member __.TryCreateSession(textView, openingPoint, openingBrace, closingBrace, session) = session <- maybe { let! document = openingPoint.Snapshot.GetOpenDocumentInCurrentContextWithChanges() |> Option.ofObj diff --git a/vsintegration/src/FSharp.Editor/Build/SetGlobalPropertiesForSdkProjects.fs b/vsintegration/src/FSharp.Editor/Build/SetGlobalPropertiesForSdkProjects.fs index 6aa643def1d..dde8fbc04bc 100644 --- a/vsintegration/src/FSharp.Editor/Build/SetGlobalPropertiesForSdkProjects.fs +++ b/vsintegration/src/FSharp.Editor/Build/SetGlobalPropertiesForSdkProjects.fs @@ -22,6 +22,6 @@ type internal SetGlobalPropertiesForSdkProjects ) = inherit StaticGlobalPropertiesProviderBase(projectService.Services) - override _.GetGlobalPropertiesAsync(_cancellationToken: CancellationToken): Task> = - let properties = Empty.PropertiesMap.Add("FSharpCompilerPath", Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Tools")) + override __.GetGlobalPropertiesAsync(_cancellationToken: CancellationToken): Task> = + let properties = Empty.PropertiesMap.Add("FSharpCompilerPath", Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)) Task.FromResult>(properties) diff --git a/vsintegration/src/FSharp.Editor/Classification/ClassificationDefinitions.fs b/vsintegration/src/FSharp.Editor/Classification/ClassificationDefinitions.fs index c3dfc687224..456e266a52f 100644 --- a/vsintegration/src/FSharp.Editor/Classification/ClassificationDefinitions.fs +++ b/vsintegration/src/FSharp.Editor/Classification/ClassificationDefinitions.fs @@ -17,8 +17,7 @@ open Microsoft.VisualStudio.Text.Classification open Microsoft.VisualStudio.Utilities open Microsoft.CodeAnalysis.Classification -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices +open FSharp.Compiler.SourceCodeServices [] module internal FSharpClassificationTypes = @@ -62,12 +61,11 @@ module internal FSharpClassificationTypes = | SemanticClassificationType.NamedArgument -> ClassificationTypeNames.LabelName | SemanticClassificationType.Event -> ClassificationTypeNames.EventName | SemanticClassificationType.Delegate -> ClassificationTypeNames.DelegateName - | SemanticClassificationType.DisposableTopLevelValue -> DisposableTopLevelValue + | SemanticClassificationType.DisposableTopLevelValue | SemanticClassificationType.Value -> ClassificationTypeNames.Identifier - | SemanticClassificationType.DisposableLocalValue -> DisposableLocalValue + | SemanticClassificationType.DisposableLocalValue | SemanticClassificationType.LocalValue -> ClassificationTypeNames.LocalName | SemanticClassificationType.Plaintext -> ClassificationTypeNames.Text - | _ -> failwith "Compiler Bug: Unknown classification type" module internal ClassificationDefinitions = diff --git a/vsintegration/src/FSharp.Editor/Classification/ClassificationService.fs b/vsintegration/src/FSharp.Editor/Classification/ClassificationService.fs index bb16634ff28..916ad1e2f29 100644 --- a/vsintegration/src/FSharp.Editor/Classification/ClassificationService.fs +++ b/vsintegration/src/FSharp.Editor/Classification/ClassificationService.fs @@ -17,10 +17,6 @@ open Microsoft.CodeAnalysis.Host.Mef open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Classification -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Tokenization - // IEditorClassificationService is marked as Obsolete, but is still supported. The replacement (IClassificationService) // is internal to Microsoft.CodeAnalysis.Workspaces which we don't have internals visible to. Rather than add yet another // IVT, we'll maintain the status quo. @@ -28,8 +24,13 @@ open FSharp.Compiler.Tokenization #nowarn "57" -type SemanticClassificationData = SemanticClassificationView -type SemanticClassificationLookup = IReadOnlyDictionary> +open Microsoft.CodeAnalysis +open FSharp.Compiler.Range +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.SourceCodeServices.Lexer + +type SemanticClassificationData = (struct(FSharp.Compiler.Range.range * SemanticClassificationType)[]) +type SemanticClassificationLookup = IReadOnlyDictionary> [] type DocumentCache<'Value when 'Value : not struct>() = @@ -68,13 +69,16 @@ type DocumentCache<'Value when 'Value : not struct>() = type internal FSharpClassificationService [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = + static let userOpName = "SemanticColorization" static let getLexicalClassifications(filePath: string, defines, text: SourceText, textSpan: TextSpan, ct) = let text = text.GetSubText(textSpan) let result = ImmutableArray.CreateBuilder() let tokenCallback = - fun (tok: FSharpToken) -> + fun (tok: FSharpSyntaxToken) -> let spanKind = if tok.IsKeyword then ClassificationTypeNames.Keyword @@ -91,21 +95,21 @@ type internal FSharpClassificationService | _ -> () let flags = FSharpLexerFlags.Default &&& ~~~FSharpLexerFlags.Compiling &&& ~~~FSharpLexerFlags.UseLexFilter - FSharpLexer.Tokenize(text.ToFSharpSourceText(), tokenCallback, filePath = filePath, conditionalCompilationDefines = defines, flags = flags, ct = ct) + FSharpLexer.Lex(text.ToFSharpSourceText(), tokenCallback, filePath = filePath, conditionalCompilationDefines = defines, flags = flags, ct = ct) result.ToImmutable() - static let addSemanticClassification sourceText (targetSpan: TextSpan) (items: seq) (outputResult: List) = - for item in items do - match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, item.Range) with + static let addSemanticClassification sourceText (targetSpan: TextSpan) items (outputResult: List) = + for struct(range, classificationType) in items do + match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, range) with | None -> () | Some span -> let span = - match item.Type with + match classificationType with | SemanticClassificationType.Printf -> span | _ -> Tokenizer.fixupSpan(sourceText, span) if targetSpan.Contains span then - outputResult.Add(ClassifiedSpan(span, FSharpClassificationTypes.getClassificationTypeName(item.Type))) + outputResult.Add(ClassifiedSpan(span, FSharpClassificationTypes.getClassificationTypeName(classificationType))) static let addSemanticClassificationByLookup sourceText (targetSpan: TextSpan) (lookup: SemanticClassificationLookup) (outputResult: List) = let r = RoslynHelpers.TextSpanToFSharpRange("", targetSpan, sourceText) @@ -114,35 +118,32 @@ type internal FSharpClassificationService | true, items -> addSemanticClassification sourceText targetSpan items outputResult | _ -> () - static let toSemanticClassificationLookup (d: SemanticClassificationData) = - let lookup = System.Collections.Generic.Dictionary>() - let f (dataItem: SemanticClassificationItem) = + static let toSemanticClassificationLookup (data: SemanticClassificationData) = + let lookup = System.Collections.Generic.Dictionary>() + for i = 0 to data.Length - 1 do + let (struct(r, _) as dataItem) = data.[i] let items = - match lookup.TryGetValue dataItem.Range.StartLine with + match lookup.TryGetValue r.StartLine with | true, items -> items | _ -> let items = ResizeArray() - lookup.[dataItem.Range.StartLine] <- items + lookup.[r.StartLine] <- items items - items.Add dataItem - - d.ForEach(f) - System.Collections.ObjectModel.ReadOnlyDictionary lookup :> IReadOnlyDictionary<_, _> let semanticClassificationCache = new DocumentCache() interface IFSharpClassificationService with // Do not perform classification if we don't have project options (#defines matter) - member _.AddLexicalClassifications(_: SourceText, _: TextSpan, _: List, _: CancellationToken) = () + member __.AddLexicalClassifications(_: SourceText, _: TextSpan, _: List, _: CancellationToken) = () - member _.AddSyntacticClassificationsAsync(document: Document, textSpan: TextSpan, result: List, cancellationToken: CancellationToken) = + member __.AddSyntacticClassificationsAsync(document: Document, textSpan: TextSpan, result: List, cancellationToken: CancellationToken) = async { use _logBlock = Logger.LogBlock(LogEditorFunctionId.Classification_Syntactic) - let defines = document.GetFSharpQuickDefines() - let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask + let defines = projectInfoManager.GetCompilationDefinesForEditingDocument(document) + let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask // For closed documents, only get classification for the text within the span. // This may be inaccurate for multi-line tokens such as string literals, but this is ok for now @@ -151,29 +152,29 @@ type internal FSharpClassificationService result.AddRange(getLexicalClassifications(document.FilePath, defines, sourceText, textSpan, cancellationToken)) else result.AddRange(Tokenizer.getClassifiedSpans(document.Id, sourceText, textSpan, Some(document.FilePath), defines, cancellationToken)) - } - |> RoslynHelpers.StartAsyncUnitAsTask cancellationToken + } |> RoslynHelpers.StartAsyncUnitAsTask cancellationToken - member this.AddSemanticClassificationsAsync(document: Document, textSpan: TextSpan, result: List, cancellationToken: CancellationToken) = - async { + member __.AddSemanticClassificationsAsync(document: Document, textSpan: TextSpan, result: List, cancellationToken: CancellationToken) = + asyncMaybe { use _logBlock = Logger.LogBlock(LogEditorFunctionId.Classification_Semantic) - let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask + let! _, _, projectOptions = projectInfoManager.TryGetOptionsForDocumentOrProject(document, cancellationToken, userOpName) + let! sourceText = document.GetTextAsync(cancellationToken) // If we are trying to get semantic classification for a document that is not open, get the results from the background and cache it. // We do this for find all references when it is populating results. // We cache it temporarily so we do not have to continously call into the checker and perform a background operation. if not (document.Project.Solution.Workspace.IsDocumentOpen document.Id) then - match! semanticClassificationCache.TryGetValueAsync document with + match! semanticClassificationCache.TryGetValueAsync document |> liftAsync with | ValueSome classificationDataLookup -> addSemanticClassificationByLookup sourceText textSpan classificationDataLookup result | _ -> - let! classificationData = document.GetFSharpSemanticClassificationAsync(nameof(FSharpClassificationService)) + let! classificationData = checkerProvider.Checker.GetBackgroundSemanticClassificationForFile(document.FilePath, projectOptions, userOpName=userOpName) |> liftAsync let classificationDataLookup = toSemanticClassificationLookup classificationData - do! semanticClassificationCache.SetAsync(document, classificationDataLookup) + do! semanticClassificationCache.SetAsync(document, classificationDataLookup) |> liftAsync addSemanticClassificationByLookup sourceText textSpan classificationDataLookup result else - let! _, checkResults = document.GetFSharpParseAndCheckResultsAsync(nameof(IFSharpClassificationService)) + let! _, _, checkResults = checkerProvider.Checker.ParseAndCheckDocument(document, projectOptions, sourceText = sourceText, allowStaleResults = false, userOpName=userOpName) let targetRange = RoslynHelpers.TextSpanToFSharpRange(document.FilePath, textSpan, sourceText) let classificationData = checkResults.GetSemanticClassification (Some targetRange) addSemanticClassification sourceText textSpan classificationData result @@ -181,6 +182,6 @@ type internal FSharpClassificationService |> Async.Ignore |> RoslynHelpers.StartAsyncUnitAsTask cancellationToken // Do not perform classification if we don't have project options (#defines matter) - member _.AdjustStaleClassification(_: SourceText, classifiedSpan: ClassifiedSpan) : ClassifiedSpan = classifiedSpan + member __.AdjustStaleClassification(_: SourceText, classifiedSpan: ClassifiedSpan) : ClassifiedSpan = classifiedSpan diff --git a/vsintegration/src/FSharp.Editor/CodeFix/AddInstanceMemberParameter.fs b/vsintegration/src/FSharp.Editor/CodeFix/AddInstanceMemberParameter.fs deleted file mode 100644 index d0845021ce0..00000000000 --- a/vsintegration/src/FSharp.Editor/CodeFix/AddInstanceMemberParameter.fs +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.VisualStudio.FSharp.Editor - -open System.Composition -open System.Threading.Tasks - -open Microsoft.CodeAnalysis.Text -open Microsoft.CodeAnalysis.CodeFixes - -[] -type internal FSharpAddInstanceMemberParameterCodeFixProvider() = - inherit CodeFixProvider() - - let fixableDiagnosticIds = set ["FS0673"] - - override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds - - override _.RegisterCodeFixesAsync context : Task = - asyncMaybe { - let diagnostics = - context.Diagnostics - |> Seq.filter (fun x -> fixableDiagnosticIds |> Set.contains x.Id) - |> Seq.toImmutableArray - - let title = SR.AddMissingInstanceMemberParameter() - - let codeFix = - CodeFixHelpers.createTextChangeCodeFix( - title, - context, - (fun () -> asyncMaybe.Return [| TextChange(TextSpan(context.Span.Start, 0), "x.") |])) - - context.RegisterCodeFix(codeFix, diagnostics) - } - |> Async.Ignore - |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/AddMissingEqualsToTypeDefinition.fs b/vsintegration/src/FSharp.Editor/CodeFix/AddMissingEqualsToTypeDefinition.fs index 5994ff7cae9..22877845814 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/AddMissingEqualsToTypeDefinition.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/AddMissingEqualsToTypeDefinition.fs @@ -33,10 +33,12 @@ type internal FSharpAddMissingEqualsToTypeDefinitionCodeFixProvider() = // This won't ever actually happen, but eh why not do! Option.guard (pos > 0) - let mutable ch = sourceText.[pos] + let mutable ch = sourceText.GetSubText(TextSpan(pos, 1)).ToString().[0] + while pos > 0 && Char.IsWhiteSpace(ch) do pos <- pos - 1 - ch <- sourceText.[pos] + let text = sourceText.GetSubText(TextSpan(pos, 1)) + ch <- text.ToString().[0] let title = SR.AddMissingEqualsToTypeDefinition() diff --git a/vsintegration/src/FSharp.Editor/CodeFix/AddMissingFunKeyword.fs b/vsintegration/src/FSharp.Editor/CodeFix/AddMissingFunKeyword.fs deleted file mode 100644 index 14149d507f1..00000000000 --- a/vsintegration/src/FSharp.Editor/CodeFix/AddMissingFunKeyword.fs +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.VisualStudio.FSharp.Editor - -open System -open System.Composition - -open Microsoft.CodeAnalysis.Text -open Microsoft.CodeAnalysis.CodeFixes - -open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis - -[] -type internal FSharpAddMissingFunKeywordCodeFixProvider - [] - ( - ) = - inherit CodeFixProvider() - - let fixableDiagnosticIds = set ["FS0010"] - - override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds - - override _.RegisterCodeFixesAsync context = - asyncMaybe { - let document = context.Document - let! sourceText = context.Document.GetTextAsync(context.CancellationToken) - let textOfError = sourceText.GetSubText(context.Span).ToString() - - // Only trigger when failing to parse `->`, which arises when `fun` is missing - do! Option.guard (textOfError = "->") - - let! defines = document.GetFSharpCompilationDefinesAsync(nameof(FSharpAddMissingFunKeywordCodeFixProvider)) |> liftAsync - - let adjustedPosition = - let rec loop ch pos = - if not (Char.IsWhiteSpace(ch)) then - pos - else - loop sourceText.[pos] (pos - 1) - - loop sourceText.[context.Span.Start - 1] context.Span.Start - - let! intendedArgLexerSymbol = Tokenizer.getSymbolAtPosition (document.Id, sourceText, adjustedPosition, document.FilePath, defines, SymbolLookupKind.Greedy, false, false) - let! intendedArgSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, intendedArgLexerSymbol.Range) - - let diagnostics = - context.Diagnostics - |> Seq.filter (fun x -> fixableDiagnosticIds |> Set.contains x.Id) - |> Seq.toImmutableArray - - let title = SR.AddMissingFunKeyword() - - let codeFix = - CodeFixHelpers.createTextChangeCodeFix( - title, - context, - (fun () -> asyncMaybe.Return [| TextChange(TextSpan(intendedArgSpan.Start, 0), "fun ") |])) - - context.RegisterCodeFix(codeFix, diagnostics) - } - |> Async.Ignore - |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/AddMissingRecToMutuallyRecFunctions.fs b/vsintegration/src/FSharp.Editor/CodeFix/AddMissingRecToMutuallyRecFunctions.fs deleted file mode 100644 index 55b73b1fee6..00000000000 --- a/vsintegration/src/FSharp.Editor/CodeFix/AddMissingRecToMutuallyRecFunctions.fs +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.VisualStudio.FSharp.Editor - -open System -open System.Collections.Immutable -open System.Composition -open System.Threading - -open Microsoft.CodeAnalysis.Text -open Microsoft.CodeAnalysis.CodeFixes - -open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis - -open Microsoft.CodeAnalysis -open Microsoft.CodeAnalysis.CodeActions - -[] -type internal FSharpAddMissingRecToMutuallyRecFunctionsCodeFixProvider - [] - ( - ) = - inherit CodeFixProvider() - - let fixableDiagnosticIds = set ["FS0576"] - - let createCodeFix (context: CodeFixContext, symbolName: string, titleFormat: string, textChange: TextChange, diagnostics: ImmutableArray) = - let title = String.Format(titleFormat, symbolName) - let codeAction = - CodeAction.Create( - title, - (fun (cancellationToken: CancellationToken) -> - async { - let cancellationToken = context.CancellationToken - let! sourceText = context.Document.GetTextAsync(cancellationToken) |> Async.AwaitTask - return context.Document.WithText(sourceText.WithChanges(textChange)) - } |> RoslynHelpers.StartAsyncAsTask(cancellationToken)), - title) - context.RegisterCodeFix(codeAction, diagnostics) - - override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds - - override _.RegisterCodeFixesAsync context = - asyncMaybe { - let! defines = context.Document.GetFSharpCompilationDefinesAsync(nameof(FSharpAddMissingRecToMutuallyRecFunctionsCodeFixProvider)) |> liftAsync - let! sourceText = context.Document.GetTextAsync(context.CancellationToken) - - let funcStartPos = - let rec loop ch pos = - if not (Char.IsWhiteSpace(ch)) then - pos - else - loop sourceText.[pos + 1] (pos + 1) - - loop sourceText.[context.Span.End + 1] (context.Span.End + 1) - - let! funcLexerSymbol = Tokenizer.getSymbolAtPosition (context.Document.Id, sourceText, funcStartPos, context.Document.FilePath, defines, SymbolLookupKind.Greedy, false, false) - let! funcNameSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, funcLexerSymbol.Range) - let funcName = sourceText.GetSubText(funcNameSpan).ToString() - - let diagnostics = - context.Diagnostics - |> Seq.filter (fun x -> fixableDiagnosticIds |> Set.contains x.Id) - |> Seq.toImmutableArray - - createCodeFix(context, funcName, SR.MakeOuterBindingRecursive(), TextChange(TextSpan(context.Span.End, 0), " rec"), diagnostics) - } - |> Async.Ignore - |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/AddOpenCodeFixProvider.fs b/vsintegration/src/FSharp.Editor/CodeFix/AddOpenCodeFixProvider.fs index 392773a637a..6932a6c6a5f 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/AddOpenCodeFixProvider.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/AddOpenCodeFixProvider.fs @@ -13,20 +13,24 @@ open Microsoft.CodeAnalysis.CodeFixes open Microsoft.CodeAnalysis.CodeActions open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Text +open FSharp.Compiler.Range +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.AbstractIL.Internal.Library [] type internal FSharpAddOpenCodeFixProvider [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager, assemblyContentProvider: AssemblyContentProvider ) = inherit CodeFixProvider() + static let userOpName = "FSharpAddOpenCodeFixProvider" let fixableDiagnosticIds = ["FS0039"; "FS0043"] + let checker = checkerProvider.Checker let fixUnderscoresInMenuText (text: string) = text.Replace("_", "__") let qualifySymbolFix (context: CodeFixContext) (fullName, qualifier) = @@ -47,10 +51,10 @@ type internal FSharpAddOpenCodeFixProvider } |> RoslynHelpers.StartAsyncAsTask(cancellationToken)), displayText) - let addSuggestionsAsCodeFixes (context: CodeFixContext) (candidates: (InsertionContextEntity * InsertionContext) list) = + let addSuggestionsAsCodeFixes (context: CodeFixContext) (candidates: (Entity * InsertContext) list) = let openNamespaceFixes = candidates - |> Seq.choose (fun (entity, ctx) -> entity.Namespace |> Option.map (fun ns -> ns, entity.FullDisplayName, ctx)) + |> Seq.choose (fun (entity, ctx) -> entity.Namespace |> Option.map (fun ns -> ns, entity.Name, ctx)) |> Seq.groupBy (fun (ns, _, _) -> ns) |> Seq.map (fun (ns, xs) -> ns, @@ -84,12 +88,12 @@ type internal FSharpAddOpenCodeFixProvider override _.RegisterCodeFixesAsync context : Task = asyncMaybe { let document = context.Document - - let! sourceText = document.GetTextAsync(context.CancellationToken) - let! parseResults, checkResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpAddOpenCodeFixProvider)) |> liftAsync + let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, context.CancellationToken, userOpName) + let! sourceText = context.Document.GetTextAsync(context.CancellationToken) + let! _, parsedInput, checkResults = checker.ParseAndCheckDocument(document, projectOptions, sourceText = sourceText, userOpName = userOpName) let line = sourceText.Lines.GetLineFromPosition(context.Span.End) let linePos = sourceText.Lines.GetLinePosition(context.Span.End) - let! defines = document.GetFSharpCompilationDefinesAsync(nameof(FSharpAddOpenCodeFixProvider)) |> liftAsync + let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions let! symbol = maybe { @@ -101,12 +105,12 @@ type internal FSharpAddOpenCodeFixProvider let unresolvedIdentRange = let startLinePos = sourceText.Lines.GetLinePosition context.Span.Start - let startPos = Position.fromZ startLinePos.Line startLinePos.Character + let startPos = Pos.fromZ startLinePos.Line startLinePos.Character let endLinePos = sourceText.Lines.GetLinePosition context.Span.End - let endPos = Position.fromZ endLinePos.Line endLinePos.Character + let endPos = Pos.fromZ endLinePos.Line endLinePos.Character Range.mkRange context.Document.FilePath startPos endPos - let isAttribute = ParsedInput.GetEntityKind(unresolvedIdentRange.Start, parseResults.ParseTree) = Some EntityKind.Attribute + let isAttribute = UntypedParseImpl.GetEntityKind(unresolvedIdentRange.Start, parsedInput) = Some EntityKind.Attribute let entities = assemblyContentProvider.GetAllEntitiesInProjectAndReferencedAssemblies checkResults @@ -122,7 +126,7 @@ type internal FSharpAddOpenCodeFixProvider s.CleanedIdents |> Array.replace (s.CleanedIdents.Length - 1) (lastIdent.Substring(0, lastIdent.Length - 9)) ]) - let longIdent = ParsedInput.GetLongIdentAt parseResults.ParseTree unresolvedIdentRange.End + let longIdent = ParsedInput.getLongIdentAt parsedInput unresolvedIdentRange.End let! maybeUnresolvedIdents = longIdent @@ -134,10 +138,10 @@ type internal FSharpAddOpenCodeFixProvider |> List.toArray) let insertionPoint = - if document.Project.IsFSharpCodeFixesAlwaysPlaceOpensAtTopLevelEnabled then OpenStatementInsertionPoint.TopLevel + if document.FSharpOptions.CodeFixes.AlwaysPlaceOpensAtTopLevel then OpenStatementInsertionPoint.TopLevel else OpenStatementInsertionPoint.Nearest - let createEntity = ParsedInput.TryFindInsertionContext unresolvedIdentRange.StartLine parseResults.ParseTree maybeUnresolvedIdents insertionPoint + let createEntity = ParsedInput.tryFindInsertionContext unresolvedIdentRange.StartLine parsedInput maybeUnresolvedIdents insertionPoint return entities |> Seq.map createEntity |> Seq.concat |> Seq.toList |> addSuggestionsAsCodeFixes context } |> Async.Ignore diff --git a/vsintegration/src/FSharp.Editor/CodeFix/AddTypeAnnotationToObjectOfIndeterminateType.fs b/vsintegration/src/FSharp.Editor/CodeFix/AddTypeAnnotationToObjectOfIndeterminateType.fs deleted file mode 100644 index 9f5c441cb83..00000000000 --- a/vsintegration/src/FSharp.Editor/CodeFix/AddTypeAnnotationToObjectOfIndeterminateType.fs +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.VisualStudio.FSharp.Editor - -open System -open System.Composition -open System.Threading -open System.Threading.Tasks - -open Microsoft.CodeAnalysis.Text -open Microsoft.CodeAnalysis.CodeFixes - -open FSharp.Compiler -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Text -open FSharp.Compiler.Symbols -open Microsoft.CodeAnalysis.CodeActions - -[] -type internal FSharpAddTypeAnnotationToObjectOfIndeterminateTypeFixProvider - [] - ( - ) = - inherit CodeFixProvider() - - let fixableDiagnosticIds = set ["FS0072"; "FS3245"] - - override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds - - override _.RegisterCodeFixesAsync context : Task = - asyncMaybe { - let diagnostics = - context.Diagnostics - |> Seq.filter (fun x -> fixableDiagnosticIds |> Set.contains x.Id) - |> Seq.toImmutableArray - - let document = context.Document - let position = context.Span.Start - - let! sourceText = document.GetTextAsync(context.CancellationToken) - let textLine = sourceText.Lines.GetLineFromPosition position - let textLinePos = sourceText.Lines.GetLinePosition position - let fcsTextLineNumber = Line.fromZ textLinePos.Line - let! lexerSymbol = document.TryFindFSharpLexerSymbolAsync(position, SymbolLookupKind.Greedy, false, false, nameof(FSharpAddTypeAnnotationToObjectOfIndeterminateTypeFixProvider)) - - let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpAddTypeAnnotationToObjectOfIndeterminateTypeFixProvider)) |> liftAsync - let decl = checkFileResults.GetDeclarationLocation (fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLine.ToString(), lexerSymbol.FullIsland, false) - - match decl with - | FindDeclResult.DeclFound declRange when declRange.FileName = document.FilePath -> - let! declSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, declRange) - let declTextLine = sourceText.Lines.GetLineFromPosition declSpan.Start - let! symbolUse = checkFileResults.GetSymbolUseAtLocation(declRange.StartLine, declRange.EndColumn, declTextLine.ToString(), lexerSymbol.FullIsland) - match symbolUse.Symbol with - | :? FSharpMemberOrFunctionOrValue as mfv -> - let typeString = mfv.FullType.FormatWithConstraints symbolUse.DisplayContext - - let alreadyWrappedInParens = - let rec leftLoop ch pos = - if not (Char.IsWhiteSpace(ch)) then - ch = '(' - else - leftLoop sourceText.[pos - 1] (pos - 1) - - let rec rightLoop ch pos = - if not (Char.IsWhiteSpace(ch)) then - ch = ')' - else - rightLoop sourceText.[pos + 1] (pos + 1) - - let hasLeftParen = leftLoop sourceText.[declSpan.Start - 1] (declSpan.Start - 1) - let hasRightParen = rightLoop sourceText.[declSpan.End] declSpan.End - hasLeftParen && hasRightParen - - let getChangedText (sourceText: SourceText) = - if alreadyWrappedInParens then - sourceText.WithChanges(TextChange(TextSpan(declSpan.End, 0), ": " + typeString)) - else - sourceText.WithChanges(TextChange(TextSpan(declSpan.Start, 0), "(")) - .WithChanges(TextChange(TextSpan(declSpan.End + 1, 0), ": " + typeString + ")")) - - let title = SR.AddTypeAnnotation() - let codeAction = - CodeAction.Create( - title, - (fun (cancellationToken: CancellationToken) -> - async { - let! sourceText = context.Document.GetTextAsync(cancellationToken) |> Async.AwaitTask - return context.Document.WithText(getChangedText sourceText) - } |> RoslynHelpers.StartAsyncAsTask(cancellationToken)), - title) - - context.RegisterCodeFix(codeAction, diagnostics) - |_ -> () - | _ -> () - } - |> Async.Ignore - |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ChangePrefixNegationToInfixSubtraction.fs b/vsintegration/src/FSharp.Editor/CodeFix/ChangePrefixNegationToInfixSubtraction.fs index 793cc92a4b1..79d41ccbf16 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/ChangePrefixNegationToInfixSubtraction.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/ChangePrefixNegationToInfixSubtraction.fs @@ -31,10 +31,12 @@ type internal FSharpChangePrefixNegationToInfixSubtractionodeFixProvider() = // This won't ever actually happen, but eh why not do! Option.guard (pos < sourceText.Length) - let mutable ch = sourceText.[pos] + let mutable ch = sourceText.GetSubText(TextSpan(pos, 1)).ToString().[0] + while pos < sourceText.Length && Char.IsWhiteSpace(ch) do pos <- pos + 1 - ch <- sourceText.[pos] + let text = sourceText.GetSubText(TextSpan(pos, 1)) + ch <- text.ToString().[0] // Bail if this isn't a negation do! Option.guard (ch = '-') diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ChangeRefCellDerefToNotExpression.fs b/vsintegration/src/FSharp.Editor/CodeFix/ChangeRefCellDerefToNotExpression.fs index f7f33d4c198..0d7b80e9d96 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/ChangeRefCellDerefToNotExpression.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/ChangeRefCellDerefToNotExpression.fs @@ -12,18 +12,22 @@ open Microsoft.CodeAnalysis.CodeFixes type internal FSharpChangeRefCellDerefToNotExpressionCodeFixProvider [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() + static let userOpName = "FSharpChangeRefCellDerefToNotExpressionCodeFix" let fixableDiagnosticIds = set ["FS0001"] - override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds + override __.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds override this.RegisterCodeFixesAsync context : Task = asyncMaybe { let document = context.Document - let! parseResults = document.GetFSharpParseResultsAsync(nameof(FSharpChangeRefCellDerefToNotExpressionCodeFixProvider)) |> liftAsync + let! parsingOptions, _ = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, context.CancellationToken, userOpName) let! sourceText = context.Document.GetTextAsync(context.CancellationToken) + let! parseResults = checkerProvider.Checker.ParseFile(document.FilePath, sourceText.ToFSharpSourceText(), parsingOptions, userOpName) |> liftAsync let errorRange = RoslynHelpers.TextSpanToFSharpRange(document.FilePath, context.Span, sourceText) let! derefRange = parseResults.TryRangeOfRefCellDereferenceContainingPos errorRange.Start diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ChangeToUpcast.fs b/vsintegration/src/FSharp.Editor/CodeFix/ChangeToUpcast.fs index cdc95a9e643..cc28cdc0a52 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/ChangeToUpcast.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/ChangeToUpcast.fs @@ -14,7 +14,7 @@ type internal FSharpChangeToUpcastCodeFixProvider() = let fixableDiagnosticIds = set ["FS3198"] - override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds + override __.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds override this.RegisterCodeFixesAsync context : Task = asyncMaybe { diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ConvertCSharpLambdaToFSharpLambda.fs b/vsintegration/src/FSharp.Editor/CodeFix/ConvertCSharpLambdaToFSharpLambda.fs index 824bc52e2a6..76d3ae60a6c 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/ConvertCSharpLambdaToFSharpLambda.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/ConvertCSharpLambdaToFSharpLambda.fs @@ -11,18 +11,22 @@ open Microsoft.CodeAnalysis.CodeFixes type internal FSharpConvertCSharpLambdaToFSharpLambdaCodeFixProvider [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() + static let userOpName = "ConvertCSharpLambdaToFSharpLambda" let fixableDiagnosticIds = set ["FS0039"; "FS0043"] override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds override _.RegisterCodeFixesAsync context = asyncMaybe { - let! parseResults = context.Document.GetFSharpParseResultsAsync(nameof(FSharpConvertCSharpLambdaToFSharpLambdaCodeFixProvider)) |> liftAsync - let! sourceText = context.Document.GetTextAsync(context.CancellationToken) + let! parsingOptions, _ = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(context.Document, context.CancellationToken, userOpName) + let! parseResults = checkerProvider.Checker.ParseFile(context.Document.FilePath, sourceText.ToFSharpSourceText(), parsingOptions, userOpName) |> liftAsync + let errorRange = RoslynHelpers.TextSpanToFSharpRange(context.Document.FilePath, context.Span, sourceText) let! fullParenRange, lambdaArgRange, lambdaBodyRange = parseResults.TryRangeOfParenEnclosingOpEqualsGreaterUsage errorRange.Start diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ConvertToAnonymousRecord.fs b/vsintegration/src/FSharp.Editor/CodeFix/ConvertToAnonymousRecord.fs index 3250e7e33f5..645ffee5ab8 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/ConvertToAnonymousRecord.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/ConvertToAnonymousRecord.fs @@ -14,9 +14,13 @@ open Microsoft.CodeAnalysis.CodeActions type internal FSharpConvertToAnonymousRecordCodeFixProvider [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() + static let userOpName = "ConvertToAnonymousRecord" + let fixableDiagnosticIds = set ["FS0039"] override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds @@ -24,9 +28,10 @@ type internal FSharpConvertToAnonymousRecordCodeFixProvider override _.RegisterCodeFixesAsync context : Task = asyncMaybe { let document = context.Document - let! parseResults = document.GetFSharpParseResultsAsync(nameof(FSharpConvertToAnonymousRecordCodeFixProvider)) |> liftAsync - + let! parsingOptions, _ = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, context.CancellationToken, userOpName) let! sourceText = context.Document.GetTextAsync(context.CancellationToken) + let! parseResults = checkerProvider.Checker.ParseFile(document.FilePath, sourceText.ToFSharpSourceText(), parsingOptions, userOpName) |> liftAsync + let errorRange = RoslynHelpers.TextSpanToFSharpRange(document.FilePath, context.Span, sourceText) let! recordRange = parseResults.TryRangeOfRecordExpressionContainingPos errorRange.Start let! recordSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, recordRange) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ConvertToNotEqualsEqualityExpression.fs b/vsintegration/src/FSharp.Editor/CodeFix/ConvertToNotEqualsEqualityExpression.fs deleted file mode 100644 index debdda8a021..00000000000 --- a/vsintegration/src/FSharp.Editor/CodeFix/ConvertToNotEqualsEqualityExpression.fs +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.VisualStudio.FSharp.Editor - -open System.Composition -open System.Threading.Tasks - -open Microsoft.CodeAnalysis.Text -open Microsoft.CodeAnalysis.CodeFixes - -[] -type internal FSharpConvertToNotEqualsEqualityExpressionCodeFixProvider() = - inherit CodeFixProvider() - - let fixableDiagnosticIds = set ["FS0043"] - - override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds - - override this.RegisterCodeFixesAsync context : Task = - asyncMaybe { - let! sourceText = context.Document.GetTextAsync(context.CancellationToken) - let text = sourceText.GetSubText(context.Span).ToString() - - // We're converting '!=' into '<>', a common new user mistake. - // If this is an FS00043 that is anything other than that, bail out - do! Option.guard (text = "!=") - - let title = SR.ConvertToNotEqualsEqualityExpression() - - let diagnostics = - context.Diagnostics - |> Seq.filter (fun x -> fixableDiagnosticIds |> Set.contains x.Id) - |> Seq.toImmutableArray - - let codeFix = - CodeFixHelpers.createTextChangeCodeFix( - title, - context, - (fun () -> asyncMaybe.Return [| TextChange(context.Span, "<>") |])) - - context.RegisterCodeFix(codeFix, diagnostics) - } - |> Async.Ignore - |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ConvertToSingleEqualsEqualityExpression.fs b/vsintegration/src/FSharp.Editor/CodeFix/ConvertToSingleEqualsEqualityExpression.fs index 18e14e6cc05..e87538d1b88 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/ConvertToSingleEqualsEqualityExpression.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/ConvertToSingleEqualsEqualityExpression.fs @@ -3,10 +3,12 @@ namespace Microsoft.VisualStudio.FSharp.Editor open System.Composition +open System.Threading open System.Threading.Tasks open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.CodeFixes +open Microsoft.CodeAnalysis.CodeActions [] type internal FSharpConvertToSingleEqualsEqualityExpressionCodeFixProvider() = @@ -14,7 +16,7 @@ type internal FSharpConvertToSingleEqualsEqualityExpressionCodeFixProvider() = let fixableDiagnosticIds = set ["FS0043"] - override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds + override __.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds override this.RegisterCodeFixesAsync context : Task = asyncMaybe { diff --git a/vsintegration/src/FSharp.Editor/CodeFix/FixIndexerAccess.fs b/vsintegration/src/FSharp.Editor/CodeFix/FixIndexerAccess.fs index b41eb1e94ad..08204e3d491 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/FixIndexerAccess.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/FixIndexerAccess.fs @@ -8,7 +8,7 @@ open System.Threading.Tasks open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.CodeFixes -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices [] type internal FSharpFixIndexerAccessCodeFixProvider() = @@ -34,8 +34,9 @@ type internal FSharpFixIndexerAccessCodeFixProvider() = let mutable span = context.Span let notStartOfBracket (span: TextSpan) = - let t = sourceText.GetSubText(TextSpan(span.Start, span.Length + 1)) - t.[t.Length-1] <> '[' + let t = TextSpan(span.Start, span.Length + 1) + let s = sourceText.GetSubText(t).ToString() + s.[s.Length-1] <> '[' // skip all braces and blanks until we find [ while span.End < sourceText.Length && notStartOfBracket span do @@ -47,7 +48,7 @@ type internal FSharpFixIndexerAccessCodeFixProvider() = let codefix = CodeFixHelpers.createTextChangeCodeFix( - CompilerDiagnostics.GetErrorMessage FSharpDiagnosticKind.AddIndexerDot, + CompilerDiagnostics.getErrorMessage AddIndexerDot, context, (fun () -> asyncMaybe.Return [| TextChange(span, replacement.TrimEnd() + ".") |])) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ImplementInterfaceCodeFixProvider.fs b/vsintegration/src/FSharp.Editor/CodeFix/ImplementInterfaceCodeFixProvider.fs index 93d2686c5c9..9bc085b325b 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/ImplementInterfaceCodeFixProvider.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/ImplementInterfaceCodeFixProvider.fs @@ -12,14 +12,9 @@ open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.CodeFixes open Microsoft.CodeAnalysis.CodeActions -open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Symbols -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Tokenization +open FSharp.Compiler.Range +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.SyntaxTree [] type internal InterfaceState = @@ -32,19 +27,23 @@ type internal InterfaceState = type internal FSharpImplementInterfaceCodeFixProvider [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() let fixableDiagnosticIds = ["FS0366"] + let checker = checkerProvider.Checker + static let userOpName = "ImplementInterfaceCodeFixProvider" let queryInterfaceState appendBracketAt (pos: pos) (tokens: Tokenizer.SavedTokenInfo[]) (ast: ParsedInput) = asyncMaybe { let line = pos.Line - 1 - let! iface = InterfaceStubGenerator.TryFindInterfaceDeclaration pos ast + let! iface = InterfaceStubGenerator.tryFindInterfaceDeclaration pos ast let endPosOfWidth = tokens |> Array.tryPick (fun (t: Tokenizer.SavedTokenInfo) -> if t.Tag = FSharpTokenTag.WITH || t.Tag = FSharpTokenTag.OWITH then - Some (Position.fromZ line (t.RightColumn + 1)) + Some (Pos.fromZ line (t.RightColumn + 1)) else None) let appendBracketAt = match iface, appendBracketAt with @@ -57,7 +56,7 @@ type internal FSharpImplementInterfaceCodeFixProvider lineStr.Length - lineStr.TrimStart(' ').Length let inferStartColumn indentSize state (sourceText: SourceText) = - match InterfaceStubGenerator.GetMemberNameAndRanges state.InterfaceData with + match InterfaceStubGenerator.getMemberNameAndRanges state.InterfaceData with | (_, range) :: _ -> let lineStr = sourceText.Lines.[range.StartLine-1].ToString() getLineIdent lineStr @@ -82,7 +81,7 @@ type internal FSharpImplementInterfaceCodeFixProvider let defaultBody = "raise (System.NotImplementedException())" let typeParams = state.InterfaceData.TypeParameters let stub = - let stub = InterfaceStubGenerator.FormatInterface + let stub = InterfaceStubGenerator.formatInterface startColumn indentSize typeParams objectIdentifier defaultBody displayContext implementedMemberSignatures entity verboseMode stub.TrimEnd(Environment.NewLine.ToCharArray()) @@ -102,12 +101,12 @@ type internal FSharpImplementInterfaceCodeFixProvider sourceText.WithChanges(stubChange) let registerSuggestions (context: CodeFixContext, results: FSharpCheckFileResults, state: InterfaceState, displayContext, entity, indentSize) = - if InterfaceStubGenerator.HasNoInterfaceMember entity then + if InterfaceStubGenerator.hasNoInterfaceMember entity then () else - let membersAndRanges = InterfaceStubGenerator.GetMemberNameAndRanges state.InterfaceData - let interfaceMembers = InterfaceStubGenerator.GetInterfaceMembers entity - let hasTypeCheckError = results.Diagnostics |> Array.exists (fun e -> e.Severity = FSharpDiagnosticSeverity.Error) + let membersAndRanges = InterfaceStubGenerator.getMemberNameAndRanges state.InterfaceData + let interfaceMembers = InterfaceStubGenerator.getInterfaceMembers entity + let hasTypeCheckError = results.Errors |> Array.exists (fun e -> e.Severity = FSharpErrorSeverity.Error) // This comparison is a bit expensive if hasTypeCheckError && List.length membersAndRanges <> Seq.length interfaceMembers then let diagnostics = context.Diagnostics |> Seq.filter (fun x -> fixableDiagnosticIds |> List.contains x.Id) |> Seq.toImmutableArray @@ -122,7 +121,7 @@ type internal FSharpImplementInterfaceCodeFixProvider let lineStr = sourceText.Lines.[range.EndLine-1].ToString() results.GetSymbolUseAtLocation(range.EndLine, range.EndColumn, lineStr, [name]) let! implementedMemberSignatures = - InterfaceStubGenerator.GetImplementedMemberSignatures getMemberByLocation displayContext state.InterfaceData + InterfaceStubGenerator.getImplementedMemberSignatures getMemberByLocation displayContext state.InterfaceData let newSourceText = applyImplementInterface sourceText state displayContext implementedMemberSignatures entity indentSize verboseMode return context.Document.WithText(newSourceText) } |> RoslynHelpers.StartAsyncAsTask(cancellationToken)), @@ -134,15 +133,15 @@ type internal FSharpImplementInterfaceCodeFixProvider else () - override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds + override __.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds - override _.RegisterCodeFixesAsync context : Task = + override __.RegisterCodeFixesAsync context : Task = asyncMaybe { - let! parseResults, checkFileResults = context.Document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpImplementInterfaceCodeFixProvider)) |> liftAsync + let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(context.Document, context.CancellationToken, userOpName) let cancellationToken = context.CancellationToken let! sourceText = context.Document.GetTextAsync(cancellationToken) + let! _, parsedInput, checkFileResults = checker.ParseAndCheckDocument(context.Document, projectOptions, sourceText = sourceText, userOpName = userOpName) let textLine = sourceText.Lines.GetLineFromPosition context.Span.Start - let! _, _, parsingOptions, _ = context.Document.GetFSharpCompilationOptionsAsync(nameof(FSharpImplementInterfaceCodeFixProvider)) |> liftAsync let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions // Notice that context.Span doesn't return reliable ranges to find tokens at exact positions. // That's why we tokenize the line and try to find the last successive identifier token @@ -161,14 +160,14 @@ type internal FSharpImplementInterfaceCodeFixProvider | _ -> acc let! token = tryFindIdentifierToken None 0 let fixupPosition = textLine.Start + token.RightColumn - let interfacePos = Position.fromZ textLine.LineNumber token.RightColumn + let interfacePos = Pos.fromZ textLine.LineNumber token.RightColumn // We rely on the observation that the lastChar of the context should be '}' if that character is present let appendBracketAt = match sourceText.[context.Span.End-1] with | '}' -> None | _ -> Some context.Span.End - let! interfaceState = queryInterfaceState appendBracketAt interfacePos tokens parseResults.ParseTree + let! interfaceState = queryInterfaceState appendBracketAt interfacePos tokens parsedInput let! symbol = Tokenizer.getSymbolAtPosition(context.Document.Id, sourceText, fixupPosition, context.Document.FilePath, defines, SymbolLookupKind.Greedy, false, false) let fcsTextLineNumber = textLine.LineNumber + 1 let lineContents = textLine.ToString() @@ -178,7 +177,7 @@ type internal FSharpImplementInterfaceCodeFixProvider let! entity, displayContext = match symbolUse.Symbol with | :? FSharpEntity as entity -> - if InterfaceStubGenerator.IsInterface entity then + if InterfaceStubGenerator.isInterface entity then Some (entity, symbolUse.DisplayContext) else None | _ -> None diff --git a/vsintegration/src/FSharp.Editor/CodeFix/MakeDeclarationMutable.fs b/vsintegration/src/FSharp.Editor/CodeFix/MakeDeclarationMutable.fs index e93e9f4db13..52287c96298 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/MakeDeclarationMutable.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/MakeDeclarationMutable.fs @@ -9,18 +9,21 @@ open System.Threading.Tasks open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.CodeFixes -open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Text +open FSharp.Compiler.Range +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.AbstractIL.Internal.Library [] type internal FSharpMakeDeclarationMutableFixProvider [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() + static let userOpName = "MakeDeclarationMutable" + let fixableDiagnosticIds = set ["FS0027"] override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds @@ -35,19 +38,21 @@ type internal FSharpMakeDeclarationMutableFixProvider let document = context.Document do! Option.guard (not(isSignatureFile document.FilePath)) let position = context.Span.Start - - let! lexerSymbol = document.TryFindFSharpLexerSymbolAsync(position, SymbolLookupKind.Greedy, false, false, nameof(FSharpMakeDeclarationMutableFixProvider)) + let checker = checkerProvider.Checker + let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, CancellationToken.None, userOpName) let! sourceText = document.GetTextAsync () |> liftTaskAsync + let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions let textLine = sourceText.Lines.GetLineFromPosition position let textLinePos = sourceText.Lines.GetLinePosition position let fcsTextLineNumber = Line.fromZ textLinePos.Line - let! parseFileResults, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpMakeDeclarationMutableFixProvider)) |> liftAsync + let! parseFileResults, _, checkFileResults = checker.ParseAndCheckDocument (document, projectOptions, sourceText=sourceText, userOpName=userOpName) + let! lexerSymbol = Tokenizer.getSymbolAtPosition (document.Id, sourceText, position, document.FilePath, defines, SymbolLookupKind.Greedy, false, false) let decl = checkFileResults.GetDeclarationLocation (fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLine.ToString(), lexerSymbol.FullIsland, false) match decl with // Only do this for symbols in the same file. That covers almost all cases anyways. // We really shouldn't encourage making values mutable outside of local scopes anyways. - | FindDeclResult.DeclFound declRange when declRange.FileName = document.FilePath -> + | FSharpFindDeclResult.DeclFound declRange when declRange.FileName = document.FilePath -> let! span = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, declRange) // Bail if it's a parameter, because like, that ain't allowed diff --git a/vsintegration/src/FSharp.Editor/CodeFix/MakeOuterBindingRecursive.fs b/vsintegration/src/FSharp.Editor/CodeFix/MakeOuterBindingRecursive.fs index 842de538108..581380d2c23 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/MakeOuterBindingRecursive.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/MakeOuterBindingRecursive.fs @@ -12,18 +12,22 @@ open Microsoft.CodeAnalysis.CodeFixes type internal FSharpMakeOuterBindingRecursiveCodeFixProvider [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() + static let userOpName = "MakeOuterBindingRecursive" let fixableDiagnosticIds = set ["FS0039"] override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds override _.RegisterCodeFixesAsync context = asyncMaybe { - let! parseResults = context.Document.GetFSharpParseResultsAsync(nameof(FSharpMakeOuterBindingRecursiveCodeFixProvider)) |> liftAsync - let! sourceText = context.Document.GetTextAsync(context.CancellationToken) + let! parsingOptions, _ = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(context.Document, context.CancellationToken, userOpName) + let! parseResults = checkerProvider.Checker.ParseFile(context.Document.FilePath, sourceText.ToFSharpSourceText(), parsingOptions, userOpName) |> liftAsync + let diagnosticRange = RoslynHelpers.TextSpanToFSharpRange(context.Document.FilePath, context.Span, sourceText) do! Option.guard (parseResults.IsPosContainedInApplication diagnosticRange.Start) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/MissingReferenceCodeFixProvider.fs b/vsintegration/src/FSharp.Editor/CodeFix/MissingReferenceCodeFixProvider.fs index 9f9ab08d51d..d44fc942075 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/MissingReferenceCodeFixProvider.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/MissingReferenceCodeFixProvider.fs @@ -46,9 +46,9 @@ type internal MissingReferenceCodeFixProvider() = ), title) - override _.FixableDiagnosticIds = Seq.toImmutableArray [fixableDiagnosticId] + override __.FixableDiagnosticIds = Seq.toImmutableArray [fixableDiagnosticId] - override _.RegisterCodeFixesAsync context : Task = + override __.RegisterCodeFixesAsync context : Task = async { let solution = context.Document.Project.Solution diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ProposeUppercaseLabel.fs b/vsintegration/src/FSharp.Editor/CodeFix/ProposeUppercaseLabel.fs index 65ebe4edb33..5dd2f303208 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/ProposeUppercaseLabel.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/ProposeUppercaseLabel.fs @@ -6,23 +6,26 @@ open System.Composition open System.Threading.Tasks open Microsoft.CodeAnalysis.CodeFixes open Microsoft.CodeAnalysis.CodeActions -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices [] type internal FSharpProposeUpperCaseLabelCodeFixProvider [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() let fixableDiagnosticIds = ["FS0053"] + static let userOpName = "ProposeUpperCaseLabel" override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds override _.RegisterCodeFixesAsync context : Task = asyncMaybe { let textChanger (originalText: string) = originalText.[0].ToString().ToUpper() + originalText.Substring(1) - let! solutionChanger, originalText = SymbolHelpers.changeAllSymbolReferences(context.Document, context.Span, textChanger) - let title = CompilerDiagnostics.GetErrorMessage (FSharpDiagnosticKind.ReplaceWithSuggestion <| textChanger originalText) + let! solutionChanger, originalText = SymbolHelpers.changeAllSymbolReferences(context.Document, context.Span, textChanger, projectInfoManager, checkerProvider.Checker, userOpName) + let title = CompilerDiagnostics.getErrorMessage (ReplaceWithSuggestion <| textChanger originalText) context.RegisterCodeFix( CodeAction.Create(title, solutionChanger, title), context.Diagnostics |> Seq.filter (fun x -> fixableDiagnosticIds |> List.contains x.Id) |> Seq.toImmutableArray) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/RemoveReturnOrYield.fs b/vsintegration/src/FSharp.Editor/CodeFix/RemoveReturnOrYield.fs index 863a9343e72..cede948661f 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/RemoveReturnOrYield.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/RemoveReturnOrYield.fs @@ -11,18 +11,22 @@ open Microsoft.CodeAnalysis.CodeFixes type internal FSharpRemoveReturnOrYieldCodeFixProvider [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() + static let userOpName = "RemoveReturnOrYield" let fixableDiagnosticIds = set ["FS0748"; "FS0747"] override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds override _.RegisterCodeFixesAsync context = asyncMaybe { - let! parseResults = context.Document.GetFSharpParseResultsAsync(nameof(FSharpRemoveReturnOrYieldCodeFixProvider)) |> liftAsync - let! sourceText = context.Document.GetTextAsync(context.CancellationToken) + let! parsingOptions, _ = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(context.Document, context.CancellationToken, userOpName) + let! parseResults = checkerProvider.Checker.ParseFile(context.Document.FilePath, sourceText.ToFSharpSourceText(), parsingOptions, userOpName) |> liftAsync + let errorRange = RoslynHelpers.TextSpanToFSharpRange(context.Document.FilePath, context.Span, sourceText) let! exprRange = parseResults.TryRangeOfExprInYieldOrReturn errorRange.Start let! exprSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, exprRange) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/RemoveUnusedBinding.fs b/vsintegration/src/FSharp.Editor/CodeFix/RemoveUnusedBinding.fs deleted file mode 100644 index fe0a4200e47..00000000000 --- a/vsintegration/src/FSharp.Editor/CodeFix/RemoveUnusedBinding.fs +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.VisualStudio.FSharp.Editor - -open System -open System.Composition -open System.Threading.Tasks - -open Microsoft.CodeAnalysis.Text -open Microsoft.CodeAnalysis.CodeFixes - -[] -type internal FSharpRemoveUnusedBindingCodeFixProvider - [] - ( - ) = - - inherit CodeFixProvider() - - let fixableDiagnosticIds = set ["FS1182"] - - override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds - - override _.RegisterCodeFixesAsync context : Task = - asyncMaybe { - // Don't show code fixes for unused values, even if they are compiler-generated. - do! Option.guard context.Document.Project.IsFSharpCodeFixesUnusedDeclarationsEnabled - - let document = context.Document - let! sourceText = document.GetTextAsync(context.CancellationToken) - - let! parseResults = context.Document.GetFSharpParseResultsAsync(nameof(FSharpRemoveUnusedBindingCodeFixProvider)) |> liftAsync - - let diagnostics = - context.Diagnostics - |> Seq.filter (fun x -> fixableDiagnosticIds |> Set.contains x.Id) - |> Seq.toImmutableArray - - let symbolRange = RoslynHelpers.TextSpanToFSharpRange(document.FilePath, context.Span, sourceText) - let! rangeOfBinding = parseResults.TryRangeOfBindingWithHeadPatternWithPos(symbolRange.Start) - let! spanOfBinding = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, rangeOfBinding) - - let keywordEndColumn = - let rec loop ch pos = - if not (Char.IsWhiteSpace(ch)) then - pos - else - loop sourceText.[pos - 1] (pos - 1) - loop sourceText.[spanOfBinding.Start - 1] (spanOfBinding.Start - 1) - - // This is safe, since we could never have gotten here unless there was a `let` or `use` - let keywordStartColumn = keywordEndColumn - 2 - let fullSpan = TextSpan(keywordStartColumn, spanOfBinding.End - keywordStartColumn) - - let prefixTitle = SR.RemoveUnusedBinding() - let removalCodeFix = - CodeFixHelpers.createTextChangeCodeFix( - prefixTitle, - context, - (fun () -> asyncMaybe.Return [| TextChange(fullSpan, "") |])) - context.RegisterCodeFix(removalCodeFix, diagnostics) - } - |> Async.Ignore - |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/RemoveUnusedOpens.fs b/vsintegration/src/FSharp.Editor/CodeFix/RemoveUnusedOpens.fs index 9bc06368210..c871c5c25f2 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/RemoveUnusedOpens.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/RemoveUnusedOpens.fs @@ -9,15 +9,17 @@ open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.CodeFixes open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Diagnostics -open FSharp.Compiler.Text +open FSharp.Compiler.Range [] type internal FSharpRemoveUnusedOpensCodeFixProvider [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() - + let userOpName = "FSharpRemoveUnusedOpensCodeFixProvider" let fixableDiagnosticIds = [FSharpIDEDiagnosticIds.RemoveUnnecessaryImportsDiagnosticId] override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds @@ -26,7 +28,9 @@ type internal FSharpRemoveUnusedOpensCodeFixProvider asyncMaybe { let document = context.Document let! sourceText = document.GetTextAsync() - let! unusedOpens = UnusedOpensDiagnosticAnalyzer.GetUnusedOpenRanges(document) + let checker = checkerProvider.Checker + let! _, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, context.CancellationToken, userOpName) + let! unusedOpens = UnusedOpensDiagnosticAnalyzer.GetUnusedOpenRanges(document, projectOptions, checker) let changes = unusedOpens |> List.map (fun m -> @@ -52,5 +56,5 @@ type internal FSharpRemoveUnusedOpensCodeFixProvider |> Async.Ignore |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) - override _.GetFixAllProvider() = WellKnownFixAllProviders.BatchFixer + override __.GetFixAllProvider() = WellKnownFixAllProviders.BatchFixer \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/CodeFix/RenameParamToMatchSignature.fs b/vsintegration/src/FSharp.Editor/CodeFix/RenameParamToMatchSignature.fs index 64632f5bbf4..ee2f2ace708 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/RenameParamToMatchSignature.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/RenameParamToMatchSignature.fs @@ -9,18 +9,20 @@ open System.Threading.Tasks open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.CodeFixes +open FSharp.Compiler.SourceCodeServices open Microsoft.VisualStudio.FSharp.Editor.SymbolHelpers -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.Tokenization.FSharpKeywords +open FSharp.Compiler.SourceCodeServices.Keywords [] type internal FSharpRenameParamToMatchSignature [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() - + static let userOpName = "RenameParamToMatchSignature" let fixableDiagnosticIds = ["FS3218"] @@ -42,17 +44,17 @@ type internal FSharpRenameParamToMatchSignature let document = context.Document let! cancellationToken = Async.CancellationToken |> liftAsync let! sourceText = document.GetTextAsync(cancellationToken) - let! symbolUses = getSymbolUsesOfSymbolAtLocationInDocument (document, context.Span.Start) + let! symbolUses = getSymbolUsesOfSymbolAtLocationInDocument (document, context.Span.Start, projectInfoManager, checkerProvider.Checker, userOpName) let changes = [| for symbolUse in symbolUses do - match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.Range) with + match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.RangeAlternate) with | None -> () | Some span -> let textSpan = Tokenizer.fixupSpan(sourceText, span) yield TextChange(textSpan, replacement) |] return changes } - let title = CompilerDiagnostics.GetErrorMessage (FSharpDiagnosticKind.ReplaceWithSuggestion suggestion) + let title = CompilerDiagnostics.getErrorMessage (ReplaceWithSuggestion suggestion) let codefix = CodeFixHelpers.createTextChangeCodeFix(title, context, computeChanges) context.RegisterCodeFix(codefix, diagnostics) | _ -> () diff --git a/vsintegration/src/FSharp.Editor/CodeFix/RenameUnusedValue.fs b/vsintegration/src/FSharp.Editor/CodeFix/RenameUnusedValue.fs index 9f44097b25b..856c3f575e5 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/RenameUnusedValue.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/RenameUnusedValue.fs @@ -4,44 +4,50 @@ namespace Microsoft.VisualStudio.FSharp.Editor open System open System.Composition +open System.Threading open System.Threading.Tasks +open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.CodeFixes +open Microsoft.CodeAnalysis.CodeActions open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Symbols -open FSharp.Compiler.Syntax +open FSharp.Compiler.SourceCodeServices [] type internal FSharpRenameUnusedValueCodeFixProvider [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() - + static let userOpName = "RenameUnusedValueCodeFix" let fixableDiagnosticIds = set ["FS1182"] + let checker = checkerProvider.Checker - override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds + override __.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds - override _.RegisterCodeFixesAsync context : Task = + override __.RegisterCodeFixesAsync context : Task = asyncMaybe { // Don't show code fixes for unused values, even if they are compiler-generated. - do! Option.guard context.Document.Project.IsFSharpCodeFixesUnusedDeclarationsEnabled + do! Option.guard context.Document.FSharpOptions.CodeFixes.UnusedDeclarations let document = context.Document - let! sourceText = document.GetTextAsync(context.CancellationToken) + let! sourceText = document.GetTextAsync() let ident = sourceText.ToString(context.Span) // Prefixing operators and backticked identifiers does not make sense. // We have to use the additional check for backtickes because `IsOperatorOrBacktickedName` operates on display names // where backtickes are replaced with parens. if not (PrettyNaming.IsOperatorOrBacktickedName ident) && not (ident.StartsWith "``") then - let! lexerSymbol = document.TryFindFSharpLexerSymbolAsync(context.Span.Start, SymbolLookupKind.Greedy, false, false, nameof(FSharpRenameUnusedValueCodeFixProvider)) + let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, context.CancellationToken, userOpName) + let! _, _, checkResults = checker.ParseAndCheckDocument(document, projectOptions, sourceText = sourceText, userOpName=userOpName) let m = RoslynHelpers.TextSpanToFSharpRange(document.FilePath, context.Span, sourceText) + let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions + let! lexerSymbol = Tokenizer.getSymbolAtPosition (document.Id, sourceText, context.Span.Start, document.FilePath, defines, SymbolLookupKind.Greedy, false, false) let lineText = (sourceText.Lines.GetLineFromPosition context.Span.Start).ToString() - let! _, checkResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpRenameUnusedValueCodeFixProvider)) |> liftAsync let! symbolUse = checkResults.GetSymbolUseAtLocation(m.StartLine, m.EndColumn, lineText, lexerSymbol.FullIsland) let symbolName = symbolUse.Symbol.DisplayName diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ReplaceWithSuggestion.fs b/vsintegration/src/FSharp.Editor/CodeFix/ReplaceWithSuggestion.fs index 8fb23402339..d235d83034c 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/ReplaceWithSuggestion.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/ReplaceWithSuggestion.fs @@ -8,20 +8,23 @@ open System.Threading.Tasks open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.CodeFixes -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Text -open FSharp.Compiler.Tokenization +open FSharp.Compiler +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Range [] type internal FSharpReplaceWithSuggestionCodeFixProvider [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager, settings: EditorOptions ) = inherit CodeFixProvider() + static let userOpName = "ReplaceWithSuggestionCodeFix" let fixableDiagnosticIds = set ["FS0039"; "FS1129"; "FS0495"] + let checker = checkerProvider.Checker override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds @@ -30,7 +33,8 @@ type internal FSharpReplaceWithSuggestionCodeFixProvider do! Option.guard settings.CodeFixes.SuggestNamesForErrors let document = context.Document - let! parseFileResults, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpReplaceWithSuggestionCodeFixProvider)) |> liftAsync + let! _, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, context.CancellationToken, userOpName) + let! parseFileResults, _, checkFileResults = checker.ParseAndCheckDocument(document, projectOptions, userOpName=userOpName) // This is all needed to get a declaration list let! sourceText = document.GetTextAsync(context.CancellationToken) @@ -39,10 +43,9 @@ type internal FSharpReplaceWithSuggestionCodeFixProvider let caretLinePos = sourceText.Lines.GetLinePosition(pos) let caretLine = sourceText.Lines.GetLineFromPosition(pos) let fcsCaretLineNumber = Line.fromZ caretLinePos.Line - let lineText = caretLine.ToString() - let partialName = QuickParse.GetPartialLongNameEx(lineText, caretLinePos.Character - 1) + let partialName = QuickParse.GetPartialLongNameEx(caretLine.ToString(), caretLinePos.Character - 1) - let declInfo = checkFileResults.GetDeclarationListInfo(Some parseFileResults, fcsCaretLineNumber, lineText, partialName) + let declInfo = checkFileResults.GetDeclarationListInfo(Some parseFileResults, fcsCaretLineNumber, caretLine.ToString(), partialName) let addNames (addToBuffer:string -> unit) = for item in declInfo.Items do addToBuffer item.Name @@ -52,11 +55,11 @@ type internal FSharpReplaceWithSuggestionCodeFixProvider |> Seq.filter (fun x -> fixableDiagnosticIds |> Set.contains x.Id) |> Seq.toImmutableArray - for suggestion in CompilerDiagnostics.GetSuggestedNames addNames unresolvedIdentifierText do - let replacement = FSharpKeywords.QuoteIdentifierIfNeeded suggestion + for suggestion in ErrorResolutionHints.getSuggestedNames addNames unresolvedIdentifierText do + let replacement = Keywords.QuoteIdentifierIfNeeded suggestion let codeFix = CodeFixHelpers.createTextChangeCodeFix( - CompilerDiagnostics.GetErrorMessage (FSharpDiagnosticKind.ReplaceWithSuggestion suggestion), + CompilerDiagnostics.getErrorMessage (ReplaceWithSuggestion suggestion), context, (fun () -> asyncMaybe.Return [| TextChange(context.Span, replacement) |])) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/UseMutationWhenValueIsMutable.fs b/vsintegration/src/FSharp.Editor/CodeFix/UseMutationWhenValueIsMutable.fs index ecf9c59708b..67003759d0a 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/UseMutationWhenValueIsMutable.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/UseMutationWhenValueIsMutable.fs @@ -2,7 +2,6 @@ namespace Microsoft.VisualStudio.FSharp.Editor -open System open System.Composition open System.Threading open System.Threading.Tasks @@ -10,18 +9,20 @@ open System.Threading.Tasks open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.CodeFixes -open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Symbols -open FSharp.Compiler.Text +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Range [] type internal FSharpUseMutationWhenValueIsMutableFixProvider [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() + static let userOpName = "UseMutationWhenValueIsMutable" + let fixableDiagnosticIds = set ["FS0020"] override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds @@ -35,36 +36,29 @@ type internal FSharpUseMutationWhenValueIsMutableFixProvider let document = context.Document do! Option.guard (not(isSignatureFile document.FilePath)) - - let! sourceText = document.GetTextAsync(context.CancellationToken) - - let adjustedPosition = - let rec loop ch pos = - if Char.IsWhiteSpace(ch) then - pos - else - loop sourceText.[pos + 1] (pos + 1) - - loop sourceText.[context.Span.Start] context.Span.Start - - let textLine = sourceText.Lines.GetLineFromPosition adjustedPosition - let textLinePos = sourceText.Lines.GetLinePosition adjustedPosition + let position = context.Span.Start + let checker = checkerProvider.Checker + let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, CancellationToken.None, userOpName) + let! sourceText = document.GetTextAsync () |> liftTaskAsync + let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions + let textLine = sourceText.Lines.GetLineFromPosition position + let textLinePos = sourceText.Lines.GetLinePosition position let fcsTextLineNumber = Line.fromZ textLinePos.Line - let! lexerSymbol = document.TryFindFSharpLexerSymbolAsync(adjustedPosition, SymbolLookupKind.Greedy, false, false, nameof(FSharpUseMutationWhenValueIsMutableFixProvider)) - let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpUseMutationWhenValueIsMutableFixProvider)) |> liftAsync + let! _, _, checkFileResults = checker.ParseAndCheckDocument (document, projectOptions, sourceText=sourceText, userOpName=userOpName) + let! lexerSymbol = Tokenizer.getSymbolAtPosition (document.Id, sourceText, position, document.FilePath, defines, SymbolLookupKind.Greedy, false, false) let! symbolUse = checkFileResults.GetSymbolUseAtLocation(fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLine.ToString(), lexerSymbol.FullIsland) match symbolUse.Symbol with - | :? FSharpMemberOrFunctionOrValue as mfv when mfv.IsMutable || mfv.HasSetterMethod -> + | :? FSharpMemberOrFunctionOrValue as mfv when mfv.IsValue && mfv.IsMutable -> let title = SR.UseMutationWhenValueIsMutable() - let! symbolSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.Range) + let! symbolSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.RangeAlternate) let mutable pos = symbolSpan.End - let mutable ch = sourceText.[pos] + let mutable ch = sourceText.GetSubText(pos).ToString() // We're looking for the possibly erroneous '=' - while pos <= context.Span.Length && ch <> '=' do + while pos <= context.Span.Length && ch <> "=" do pos <- pos + 1 - ch <- sourceText.[pos] + ch <- sourceText.GetSubText(pos).ToString() let codeFix = CodeFixHelpers.createTextChangeCodeFix( diff --git a/vsintegration/src/FSharp.Editor/CodeFix/WrapExpressionInParentheses.fs b/vsintegration/src/FSharp.Editor/CodeFix/WrapExpressionInParentheses.fs index 07ec5a24c4a..b6e41206a9c 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/WrapExpressionInParentheses.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/WrapExpressionInParentheses.fs @@ -16,7 +16,7 @@ type internal FSharpWrapExpressionInParenthesesFixProvider() = let fixableDiagnosticIds = set ["FS0597"] - override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds + override __.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds override this.RegisterCodeFixesAsync context : Task = async { @@ -24,13 +24,14 @@ type internal FSharpWrapExpressionInParenthesesFixProvider() = let getChangedText (sourceText: SourceText) = sourceText.WithChanges(TextChange(TextSpan(context.Span.Start, 0), "(")) - .WithChanges(TextChange(TextSpan(context.Span.End + 1, 0), ")")) + .WithChanges(TextChange(TextSpan(context.Span.End, 0), ")")) context.RegisterCodeFix( CodeAction.Create( title, (fun (cancellationToken: CancellationToken) -> async { + let! cancellationToken = Async.CancellationToken let! sourceText = context.Document.GetTextAsync(cancellationToken) |> Async.AwaitTask return context.Document.WithText(getChangedText sourceText) } |> RoslynHelpers.StartAsyncAsTask(cancellationToken)), diff --git a/vsintegration/src/FSharp.Editor/CodeLens/AbstractCodeLensDisplayService.fs b/vsintegration/src/FSharp.Editor/CodeLens/AbstractCodeLensDisplayService.fs index ba21dabebde..0c21690fc41 100644 --- a/vsintegration/src/FSharp.Editor/CodeLens/AbstractCodeLensDisplayService.fs +++ b/vsintegration/src/FSharp.Editor/CodeLens/AbstractCodeLensDisplayService.fs @@ -64,11 +64,11 @@ type CodeLensDisplayService (view : IWpfTextView, buffer : ITextBuffer, layerNam member val CurrentBufferSnapshot = null with get, set /// Helper method which returns the start line number of a tracking span - member _.GetTrackingSpanStartLine (snapshot:ITextSnapshot) (trackingSpan:ITrackingSpan) = + member __.GetTrackingSpanStartLine (snapshot:ITextSnapshot) (trackingSpan:ITrackingSpan) = snapshot.GetLineNumberFromPosition(trackingSpan.GetStartPoint(snapshot).Position) /// Helper method which returns the start line number of a tracking span - member _.TryGetTSpanStartLine (snapshot:ITextSnapshot) (trackingSpan:ITrackingSpan) = + member __.TryGetTSpanStartLine (snapshot:ITextSnapshot) (trackingSpan:ITrackingSpan) = let pos = trackingSpan.GetStartPoint(snapshot).Position if snapshot.Length - 1 < pos then None else pos |> snapshot.GetLineNumberFromPosition |> Some @@ -110,7 +110,7 @@ type CodeLensDisplayService (view : IWpfTextView, buffer : ITextBuffer, layerNam let mutable element = self.UiElements.[trackingSpan] element.Visibility <- Visibility.Hidden - member _.CreateDefaultStackPanel () = + member __.CreateDefaultStackPanel () = let grid = Grid(Visibility = Visibility.Hidden) Canvas.SetLeft(grid, 0.) Canvas.SetTop(grid, 0.) diff --git a/vsintegration/src/FSharp.Editor/CodeLens/CodeLensGeneralTagger.fs b/vsintegration/src/FSharp.Editor/CodeLens/CodeLensGeneralTagger.fs index fbc54c1e5fc..3702ac62878 100644 --- a/vsintegration/src/FSharp.Editor/CodeLens/CodeLensGeneralTagger.fs +++ b/vsintegration/src/FSharp.Editor/CodeLens/CodeLensGeneralTagger.fs @@ -114,11 +114,11 @@ type CodeLensGeneralTagger (view, buffer) as self = interface ITagger with [] - override _.TagsChanged = tagsChangedEvent.Publish + override __.TagsChanged = tagsChangedEvent.Publish /// Returns the tags which reserve the correct space for adornments /// Notice, it's asumed that the data in the collection is valid. - override _.GetTags spans = + override __.GetTags spans = try seq { for span in spans do diff --git a/vsintegration/src/FSharp.Editor/CodeLens/CodeLensProvider.fs b/vsintegration/src/FSharp.Editor/CodeLens/CodeLensProvider.fs index 8d3be2fcf35..eaf4b541a84 100644 --- a/vsintegration/src/FSharp.Editor/CodeLens/CodeLensProvider.fs +++ b/vsintegration/src/FSharp.Editor/CodeLens/CodeLensProvider.fs @@ -23,7 +23,8 @@ type internal CodeLensProvider ( [)>] serviceProvider: IServiceProvider, textDocumentFactory: ITextDocumentFactoryService, - metadataAsSource: FSharpMetadataAsSourceService, + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager, typeMap : FSharpClassificationTypeMap Lazy, settings: EditorOptions ) = @@ -49,7 +50,7 @@ type internal CodeLensProvider ) let tagger = CodeLensGeneralTagger(wpfView, buffer) - let service = FSharpCodeLensService(serviceProvider, workspace, documentId, buffer, metadataAsSource, componentModel.GetService(), typeMap, tagger, settings) + let service = FSharpCodeLensService(serviceProvider, workspace, documentId, buffer, checkerProvider.Checker, projectInfoManager, componentModel.GetService(), typeMap, tagger, settings) let provider = (wpfView, (tagger, service)) wpfView.Closed.Add (fun _ -> taggers.Remove provider |> ignore) taggers.Add((wpfView, (tagger, service))) @@ -68,7 +69,7 @@ type internal CodeLensProvider | _ -> None |> Option.get ) - let service = FSharpCodeLensService(serviceProvider, workspace, documentId, buffer, metadataAsSource, componentModel.GetService(), typeMap, LineLensDisplayService(wpfView, buffer), settings) + let service = FSharpCodeLensService(serviceProvider, workspace, documentId, buffer, checkerProvider.Checker, projectInfoManager, componentModel.GetService(), typeMap, LineLensDisplayService(wpfView, buffer), settings) let provider = (wpfView, service) wpfView.Closed.Add (fun _ -> lineLensProvider.Remove provider |> ignore) lineLensProvider.Add(provider) @@ -85,7 +86,7 @@ type internal CodeLensProvider member val LineLensAdornmentLayerDefinition : AdornmentLayerDefinition = null with get, set interface IViewTaggerProvider with - override _.CreateTagger(view, buffer) = + override __.CreateTagger(view, buffer) = if settings.CodeLens.Enabled && not settings.CodeLens.ReplaceWithLineLens then let wpfView = match view with @@ -97,6 +98,6 @@ type internal CodeLensProvider null interface IWpfTextViewCreationListener with - override _.TextViewCreated view = + override __.TextViewCreated view = if settings.CodeLens.Enabled && settings.CodeLens.ReplaceWithLineLens then addLineLensProviderOnce view (view.TextBuffer) |> ignore \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/CodeLens/FSharpCodeLensService.fs b/vsintegration/src/FSharp.Editor/CodeLens/FSharpCodeLensService.fs index ac322ac733f..79b0f97cfd0 100644 --- a/vsintegration/src/FSharp.Editor/CodeLens/FSharpCodeLensService.fs +++ b/vsintegration/src/FSharp.Editor/CodeLens/FSharpCodeLensService.fs @@ -16,24 +16,23 @@ open Microsoft.CodeAnalysis.Editor.Shared.Extensions open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Classification open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor.Shared.Extensions -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Symbols -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Text -open FSharp.Compiler.Tokenization +open FSharp.Compiler +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Range open Microsoft.VisualStudio.FSharp.Editor.Logging + open Microsoft.VisualStudio.Shell.Interop + open Microsoft.VisualStudio.Text open Microsoft.VisualStudio.Text.Classification +open Internal.Utilities.StructuredFormat + open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor.Shared.Utilities type internal CodeLens(taggedText, computed, fullTypeSignature, uiElement) = - member val TaggedText: Async<(ResizeArray * QuickInfoNavigation) option> = taggedText + member val TaggedText: Async<(ResizeArray * QuickInfoNavigation) option> = taggedText member val Computed: bool = computed with get, set member val FullTypeSignature: string = fullTypeSignature member val UiElement: UIElement = uiElement with get, set @@ -44,7 +43,8 @@ type internal FSharpCodeLensService workspace: Workspace, documentId: Lazy, buffer: ITextBuffer, - metadataAsSource: FSharpMetadataAsSourceService, + checker: FSharpChecker, + projectInfoManager: FSharpProjectOptionsManager, classificationFormatMapService: IClassificationFormatMapService, typeMap: Lazy, codeLens : CodeLensDisplayService, @@ -52,28 +52,29 @@ type internal FSharpCodeLensService ) as self = let lineLens = codeLens + let userOpName = "FSharpCodeLensService" let visit pos parseTree = - SyntaxTraversal.Traverse(pos, parseTree, { new SyntaxVisitorBase<_>() with - member _.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) = + AstTraversal.Traverse(pos, parseTree, { new AstTraversal.AstVisitorBase<_>() with + member __.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) = defaultTraverse(expr) - override _.VisitInheritSynMemberDefn (_, _, _, _, _, range) = Some range + override __.VisitInheritSynMemberDefn (_, _, _, _, range) = Some range - override _.VisitTypeAbbrev(_, _, range) = Some range + override __.VisitTypeAbbrev( _, range) = Some range - override _.VisitLetOrUse(_, _, _, bindings, range) = - match bindings |> Seq.tryFind (fun b -> b.RangeOfHeadPattern.StartLine = pos.Line) with + override __.VisitLetOrUse(_, _, bindings, range) = + match bindings |> Seq.tryFind (fun b -> b.RangeOfHeadPat.StartLine = pos.Line) with | Some entry -> - Some entry.RangeOfBindingWithRhs + Some entry.RangeOfBindingAndRhs | None -> // We choose to use the default range because // it wasn't possible to find the complete range // including implementation code. Some range - override _.VisitBinding (_, fn, binding) = - Some binding.RangeOfBindingWithRhs + override __.VisitBinding (fn, binding) = + Some binding.RangeOfBindingAndRhs }) let formatMap = lazy classificationFormatMapService.GetClassificationFormatMap "tooltip" @@ -83,7 +84,7 @@ type internal FSharpCodeLensService let mutable bufferChangedCts = new CancellationTokenSource() let uiContext = SynchronizationContext.Current - let layoutTagToFormatting (layoutTag: TextTag) = + let layoutTagToFormatting (layoutTag: LayoutTag) = layoutTag |> RoslynHelpers.roslynTag |> FSharpClassificationTags.GetClassificationTypeName @@ -129,7 +130,7 @@ type internal FSharpCodeLensService let inl = match text with - | :? NavigableTaggedText as nav when navigation.IsTargetValid nav.Range -> + | :? Layout.NavigableTaggedText as nav when navigation.IsTargetValid nav.Range -> let h = Documents.Hyperlink(run, ToolTip = nav.Range.FileName) h.Click.Add (fun _ -> navigation.NavigateTo nav.Range) @@ -154,8 +155,8 @@ type internal FSharpCodeLensService logInfof "Rechecking code due to buffer edit!" #endif let! document = workspace.CurrentSolution.GetDocument(documentId.Value) |> Option.ofObj - let! parseFileResults, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpUseMutationWhenValueIsMutableFixProvider)) |> liftAsync - let parsedInput = parseFileResults.ParseTree + let! _, options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, bufferChangedCts.Token, userOpName) + let! _, parsedInput, checkFileResults = checker.ParseAndCheckDocument(document, options, "LineLens", allowStaleResults=true) #if DEBUG logInfof "Getting uses of all symbols!" #endif @@ -189,9 +190,9 @@ type internal FSharpCodeLensService let displayContext = Option.defaultValue displayContext maybeContext let typeLayout = func.FormatLayout displayContext let taggedText = ResizeArray() - typeLayout |> Seq.iter taggedText.Add + Layout.renderL (Layout.taggedTextListR taggedText.Add) typeLayout |> ignore let statusBar = StatusBar(serviceProvider.GetService()) - let navigation = QuickInfoNavigation(statusBar, metadataAsSource, document, realPosition) + let navigation = QuickInfoNavigation(statusBar, checker, projectInfoManager, document, realPosition) // Because the data is available notify that this line should be updated, displaying the results return Some (taggedText, navigation) | None -> @@ -406,7 +407,7 @@ type internal FSharpCodeLensService } |> Async.Start end - member _.BufferChanged ___ = + member __.BufferChanged ___ = bufferChangedCts.Cancel() // Stop all ongoing async workflow. bufferChangedCts.Dispose() bufferChangedCts <- new CancellationTokenSource() diff --git a/vsintegration/src/FSharp.Editor/Commands/FsiCommandService.fs b/vsintegration/src/FSharp.Editor/Commands/FsiCommandService.fs index 81dccba08ed..389d50b3cba 100644 --- a/vsintegration/src/FSharp.Editor/Commands/FsiCommandService.fs +++ b/vsintegration/src/FSharp.Editor/Commands/FsiCommandService.fs @@ -82,7 +82,7 @@ type internal FsiCommandFilterProvider [] ([)>] serviceProvider: System.IServiceProvider, editorFactory: IVsEditorAdaptersFactoryService) = interface IWpfTextViewCreationListener with - member _.TextViewCreated(textView) = + member __.TextViewCreated(textView) = match editorFactory.GetViewAdapter(textView) with | null -> () | textViewAdapter -> diff --git a/vsintegration/src/FSharp.Editor/Commands/HelpContextService.fs b/vsintegration/src/FSharp.Editor/Commands/HelpContextService.fs index 3b1afa222a2..ffdb586ff57 100644 --- a/vsintegration/src/FSharp.Editor/Commands/HelpContextService.fs +++ b/vsintegration/src/FSharp.Editor/Commands/HelpContextService.fs @@ -9,23 +9,23 @@ open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.Classification open Microsoft.VisualStudio.LanguageServices.Implementation.F1Help open Microsoft.CodeAnalysis.Host.Mef -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open Microsoft.CodeAnalysis +open FSharp.Compiler +open FSharp.Compiler.Range +open FSharp.Compiler.SourceCodeServices [] [, FSharpConstants.FSharpLanguageName)>] type internal FSharpHelpContextService [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = - static member GetHelpTerm(document: Document, span: TextSpan, tokens: List) : Async = + static let userOpName = "ImplementInterfaceCodeFix" + static member GetHelpTerm(checker: FSharpChecker, sourceText : SourceText, fileName, options, span: TextSpan, tokens: List, textVersion, perfOptions) : Async = asyncMaybe { - let! _, check = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpHelpContextService)) |> liftAsync - let! sourceText = document.GetTextAsync() |> liftTaskAsync + let! _, _, check = checker.ParseAndCheckDocument(fileName, textVersion, sourceText, options, perfOptions, userOpName = userOpName) let textLines = sourceText.Lines let lineInfo = textLines.GetLineFromPosition(span.Start) let line = lineInfo.LineNumber @@ -98,11 +98,14 @@ type internal FSharpHelpContextService member this.GetHelpTermAsync(document, textSpan, cancellationToken) = asyncMaybe { + let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) let! sourceText = document.GetTextAsync(cancellationToken) - let defines = document.GetFSharpQuickDefines() + let! textVersion = document.GetTextVersionAsync(cancellationToken) + let defines = projectInfoManager.GetCompilationDefinesForEditingDocument(document) let textLine = sourceText.Lines.GetLineFromPosition(textSpan.Start) let classifiedSpans = Tokenizer.getClassifiedSpans(document.Id, sourceText, textLine.Span, Some document.Name, defines, cancellationToken) - return! FSharpHelpContextService.GetHelpTerm(document, textSpan, classifiedSpans) + let perfOptions = document.FSharpOptions.LanguageServicePerformance + return! FSharpHelpContextService.GetHelpTerm(checkerProvider.Checker, sourceText, document.FilePath, projectOptions, textSpan, classifiedSpans, textVersion.GetHashCode(), perfOptions) } |> Async.map (Option.defaultValue "") |> RoslynHelpers.StartAsyncAsTask cancellationToken diff --git a/vsintegration/src/FSharp.Editor/Commands/XmlDocCommandService.fs b/vsintegration/src/FSharp.Editor/Commands/XmlDocCommandService.fs index 0771f84d4d8..107cde020bf 100644 --- a/vsintegration/src/FSharp.Editor/Commands/XmlDocCommandService.fs +++ b/vsintegration/src/FSharp.Editor/Commands/XmlDocCommandService.fs @@ -13,17 +13,23 @@ open Microsoft.VisualStudio.OLE.Interop open Microsoft.VisualStudio.Text open Microsoft.VisualStudio.Text.Editor open Microsoft.VisualStudio.TextManager.Interop -open Microsoft.VisualStudio.LanguageServices open Microsoft.VisualStudio.Utilities -open FSharp.Compiler.EditorServices +open Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem +open FSharp.Compiler.SourceCodeServices type internal XmlDocCommandFilter ( wpfTextView: IWpfTextView, - filePath: string, - workspace: VisualStudioWorkspace + filePath: string, + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager, + workspace: VisualStudioWorkspaceImpl ) = + static let userOpName = "XmlDocCommand" + + let checker = checkerProvider.Checker + let document = // There may be multiple documents with the same file path. // However, for the purpose of generating XmlDoc comments, it is ok to keep only the first document. @@ -45,7 +51,7 @@ type internal XmlDocCommandFilter ErrorHandler.ThrowOnFailure errorCode |> ignore interface IOleCommandTarget with - member _.Exec(pguidCmdGroup: byref, nCmdID: uint32, nCmdexecopt: uint32, pvaIn: IntPtr, pvaOut: IntPtr) = + member __.Exec(pguidCmdGroup: byref, nCmdID: uint32, nCmdexecopt: uint32, pvaIn: IntPtr, pvaOut: IntPtr) = if pguidCmdGroup = VSConstants.VSStd2K && nCmdID = uint32 VSConstants.VSStd2KCmdID.TYPECHAR then match getTypedChar pvaIn with | ('/' | '<') as lastChar -> @@ -54,17 +60,17 @@ type internal XmlDocCommandFilter let curLine = wpfTextView.Caret.Position.BufferPosition.GetContainingLine().GetText() let lineWithLastCharInserted = curLine.Insert (indexOfCaret, string lastChar) - match XmlDocComment.IsBlank lineWithLastCharInserted with + match XmlDocComment.isBlank lineWithLastCharInserted with | Some i when i = indexOfCaret -> asyncMaybe { try // XmlDocable line #1 are 1-based, editor is 0-based let curLineNum = wpfTextView.Caret.Position.BufferPosition.GetContainingLine().LineNumber + 1 let! document = document.Value - let! cancellationToken = Async.CancellationToken |> liftAsync - let! sourceText = document.GetTextAsync(cancellationToken) - let! parseResults = document.GetFSharpParseResultsAsync(nameof(XmlDocCommandFilter)) |> liftAsync - let xmlDocables = XmlDocParser.GetXmlDocables (sourceText.ToFSharpSourceText(), parseResults.ParseTree) + let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, CancellationToken.None, userOpName) + let! sourceText = document.GetTextAsync(CancellationToken.None) + let! parsedInput = checker.ParseDocument(document, parsingOptions, sourceText, userOpName) + let xmlDocables = XmlDocParser.getXmlDocables (sourceText.ToFSharpSourceText(), Some parsedInput) let xmlDocablesBelowThisLine = // +1 because looking below current line for e.g. a 'member' xmlDocables |> List.filter (fun (XmlDocable(line,_indent,_paramNames)) -> line = curLineNum+1) @@ -100,29 +106,33 @@ type internal XmlDocCommandFilter else VSConstants.E_FAIL - member _.QueryStatus(pguidCmdGroup: byref, cCmds: uint32, prgCmds: OLECMD [], pCmdText: IntPtr) = + member __.QueryStatus(pguidCmdGroup: byref, cCmds: uint32, prgCmds: OLECMD [], pCmdText: IntPtr) = if not (isNull nextTarget) then nextTarget.QueryStatus(ref pguidCmdGroup, cCmds, prgCmds, pCmdText) else VSConstants.E_FAIL -[)>] -[] -[] +// Disabled: +// - https://github.com/Microsoft/visualfsharp/issues/6076 +// - The feature does not work; it should probably use an exposed Roslyn API of some sort +// - Despite not working, it is a source of UI delays +//[)>] +//[] +//[] type internal XmlDocCommandFilterProvider [] - ( - workspace: VisualStudioWorkspace, + (checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager, + workspace: VisualStudioWorkspaceImpl, textDocumentFactoryService: ITextDocumentFactoryService, - editorFactory: IVsEditorAdaptersFactoryService - ) = + editorFactory: IVsEditorAdaptersFactoryService) = interface IWpfTextViewCreationListener with - member _.TextViewCreated(textView) = + member __.TextViewCreated(textView) = match editorFactory.GetViewAdapter(textView) with | null -> () | textViewAdapter -> match textDocumentFactoryService.TryGetTextDocument(textView.TextBuffer) with | true, doc -> - let commandFilter = XmlDocCommandFilter(textView, doc.FilePath, workspace) + let commandFilter = XmlDocCommandFilter(textView, doc.FilePath, checkerProvider, projectInfoManager, workspace) commandFilter.AttachToViewAdapter textViewAdapter | _ -> () \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/Common/CodeAnalysisExtensions.fs b/vsintegration/src/FSharp.Editor/Common/CodeAnalysisExtensions.fs index 8f40f743507..21da00649ea 100644 --- a/vsintegration/src/FSharp.Editor/Common/CodeAnalysisExtensions.fs +++ b/vsintegration/src/FSharp.Editor/Common/CodeAnalysisExtensions.fs @@ -2,7 +2,7 @@ module internal Microsoft.VisualStudio.FSharp.Editor.CodeAnalysisExtensions open Microsoft.CodeAnalysis -open FSharp.Compiler.Text +open FSharp.Compiler.Range open System.IO type Project with @@ -11,29 +11,28 @@ type Project with member this.GetDependentProjectIds () = this.Solution.GetProjectDependencyGraph().GetProjectsThatDirectlyDependOnThisProject this.Id + /// Returns all projects within the same solution that directly reference this project. member this.GetDependentProjects () = this.Solution.GetProjectDependencyGraph().GetProjectsThatDirectlyDependOnThisProject this.Id |> Seq.map this.Solution.GetProject + /// Returns the ProjectIds of all of the projects that this project directly or transitively depneds on member this.GetProjectIdsOfAllProjectsThisProjectDependsOn () = let graph = this.Solution.GetProjectDependencyGraph() let transitiveDependencies = graph.GetProjectsThatThisProjectTransitivelyDependsOn this.Id let directDependencies = graph.GetProjectsThatThisProjectDirectlyDependsOn this.Id Seq.append directDependencies transitiveDependencies + /// The list all of the projects that this project directly or transitively depneds on member this.GetAllProjectsThisProjectDependsOn () = this.GetProjectIdsOfAllProjectsThisProjectDependsOn () |> Seq.map this.Solution.GetProject -type Solution with - /// Checks if the file path is associated with a document in the solution. - member self.ContainsDocumentWithFilePath filePath = - self.GetDocumentIdsWithFilePath(filePath).IsEmpty - |> not +type Solution with /// Try to get a document inside the solution using the document's name member self.TryGetDocumentNamed docName = @@ -56,19 +55,23 @@ type Solution with |> Seq.filter (fun x -> x.ProjectId = projId) |> Seq.tryHead |> Option.map (fun docId -> self.GetDocument docId) + /// Try to get a project inside the solution using the project's id member self.TryGetProject (projId:ProjectId) = if self.ContainsProject projId then Some (self.GetProject projId) else None + /// Returns the projectIds of all projects within this solution that directly reference the provided project member self.GetDependentProjects (projectId:ProjectId) = self.GetProjectDependencyGraph().GetProjectsThatDirectlyDependOnThisProject projectId |> Seq.map self.GetProject + /// Returns the projectIds of all projects within this solution that directly reference the provided project member self.GetDependentProjectIds (projectId:ProjectId) = self.GetProjectDependencyGraph().GetProjectsThatDirectlyDependOnThisProject projectId + /// Returns the ProjectIds of all of the projects that directly or transitively depends on member self.GetProjectIdsOfAllProjectReferences (projectId:ProjectId) = let graph = self.GetProjectDependencyGraph() @@ -76,11 +79,13 @@ type Solution with let directDependencies = graph.GetProjectsThatThisProjectDirectlyDependsOn projectId Seq.append directDependencies transitiveDependencies + /// Returns all of the projects that this project that directly or transitively depends on member self.GetAllProjectsThisProjectDependsOn (projectId:ProjectId) = self.GetProjectIdsOfAllProjectReferences projectId |> Seq.map self.GetProject + /// Try to retrieve the corresponding DocumentId for the range's file in the solution /// and if a projectId is provided, only try to find the document within that project /// or a project referenced by that project @@ -104,6 +109,7 @@ type Solution with self.GetDocumentIdsWithFilePath filePath |> List.ofSeq |> matchingDoc + /// Try to retrieve the corresponding Document for the range's file in the solution /// and if a projectId is provided, only try to find the document within that project /// or a project referenced by that project diff --git a/vsintegration/src/FSharp.Editor/Common/Constants.fs b/vsintegration/src/FSharp.Editor/Common/Constants.fs index 75ad88e3379..2c6e7c58fdc 100644 --- a/vsintegration/src/FSharp.Editor/Common/Constants.fs +++ b/vsintegration/src/FSharp.Editor/Common/Constants.fs @@ -51,10 +51,6 @@ module internal FSharpConstants = /// "F# Miscellaneous Files" let FSharpMiscellaneousFilesName = "F# Miscellaneous Files" - [] - /// "F# Metadata" - let FSharpMetadataName = "F# Metadata" - [] module internal FSharpProviderConstants = diff --git a/vsintegration/src/FSharp.Editor/Common/Extensions.fs b/vsintegration/src/FSharp.Editor/Common/Extensions.fs index f6f07117b52..a68ce44a226 100644 --- a/vsintegration/src/FSharp.Editor/Common/Extensions.fs +++ b/vsintegration/src/FSharp.Editor/Common/Extensions.fs @@ -11,15 +11,14 @@ open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.Host -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Syntax open FSharp.Compiler.Text +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.SyntaxTree -open Microsoft.VisualStudio.FSharp.Editor - -type private FSharpGlyph = FSharp.Compiler.EditorServices.FSharpGlyph +type private FSharpGlyph = FSharp.Compiler.SourceCodeServices.FSharpGlyph type private FSharpRoslynGlyph = Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpGlyph + type Path with static member GetFullPathSafe path = try Path.GetFullPath path @@ -38,12 +37,6 @@ type ProjectId with member this.ToFSharpProjectIdString() = this.Id.ToString("D").ToLowerInvariant() -type Project with - member this.IsFSharpMiscellaneous = this.Name = FSharpConstants.FSharpMiscellaneousFilesName - member this.IsFSharpMetadata = this.Name.StartsWith(FSharpConstants.FSharpMetadataName) - member this.IsFSharpMiscellaneousOrMetadata = this.IsFSharpMiscellaneous || this.IsFSharpMetadata - member this.IsFSharp = this.Language = LanguageNames.FSharp - type Document with member this.TryGetLanguageService<'T when 'T :> ILanguageService>() = match this.Project with @@ -55,9 +48,6 @@ type Document with languageServices.GetService<'T>() |> Some - member this.IsFSharpScript = - isScriptFile this.FilePath - module private SourceText = open System.Runtime.CompilerServices @@ -77,7 +67,7 @@ module private SourceText = let sourceText = { new Object() with - override _.GetHashCode() = + override __.GetHashCode() = let checksum = sourceText.GetChecksum() let contentsHash = if not checksum.IsDefault then Hash.combineValues checksum else 0 let encodingHash = if not (isNull sourceText.Encoding) then sourceText.Encoding.GetHashCode() else 0 @@ -89,24 +79,24 @@ module private SourceText = interface ISourceText with - member _.Item with get index = sourceText.[index] + member __.Item with get index = sourceText.[index] - member _.GetLineString(lineIndex) = + member __.GetLineString(lineIndex) = sourceText.Lines.[lineIndex].ToString() - member _.GetLineCount() = + member __.GetLineCount() = sourceText.Lines.Count - member _.GetLastCharacterPosition() = + member __.GetLastCharacterPosition() = if sourceText.Lines.Count > 0 then (sourceText.Lines.Count, sourceText.Lines.[sourceText.Lines.Count - 1].Span.Length) else (0, 0) - member _.GetSubTextString(start, length) = + member __.GetSubTextString(start, length) = sourceText.GetSubText(TextSpan(start, length)).ToString() - member _.SubTextEquals(target, startIndex) = + member __.SubTextEquals(target, startIndex) = if startIndex < 0 || startIndex >= sourceText.Length then invalidArg "startIndex" "Out of range." @@ -129,14 +119,14 @@ module private SourceText = didEqual - member _.ContentEquals(sourceText) = + member __.ContentEquals(sourceText) = match sourceText with | :? SourceText as sourceText -> sourceText.ContentEquals(sourceText) | _ -> false - member _.Length = sourceText.Length + member __.Length = sourceText.Length - member _.CopyTo(sourceIndex, destination, destinationIndex, count) = + member __.CopyTo(sourceIndex, destination, destinationIndex, count) = sourceText.CopyTo(sourceIndex, destination, destinationIndex, count) } @@ -147,7 +137,7 @@ type SourceText with member this.ToFSharpSourceText() = SourceText.weakTable.GetValue(this, Runtime.CompilerServices.ConditionalWeakTable<_,_>.CreateValueCallback(SourceText.create)) -type NavigationItem with +type FSharpNavigationDeclarationItem with member x.RoslynGlyph : FSharpRoslynGlyph = match x.Glyph with | FSharpGlyph.Class diff --git a/vsintegration/src/FSharp.Editor/Common/FSharpCodeAnalysisExtensions.fs b/vsintegration/src/FSharp.Editor/Common/FSharpCodeAnalysisExtensions.fs deleted file mode 100644 index 2ee5e4c64f2..00000000000 --- a/vsintegration/src/FSharp.Editor/Common/FSharpCodeAnalysisExtensions.fs +++ /dev/null @@ -1,49 +0,0 @@ -[] -module internal FSharpParseFileResultsExtensions - -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text - -type FSharpParseFileResults with - member this.TryRangeOfBindingWithHeadPatternWithPos pos = - let input = this.ParseTree - SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with - member _.VisitExpr(_, _, defaultTraverse, expr) = - defaultTraverse expr - - override _.VisitBinding(_path, defaultTraverse, binding) = - match binding with - | SynBinding(_, SynBindingKind.Normal, _, _, _, _, _, pat, _, _, _, _) as binding -> - if Position.posEq binding.RangeOfHeadPattern.Start pos then - Some binding.RangeOfBindingWithRhs - else - // Check if it's an operator - match pat with - | SynPat.LongIdent(LongIdentWithDots([id], _), _, _, _, _, _) when id.idText.StartsWith("op_") -> - if Position.posEq id.idRange.Start pos then - Some binding.RangeOfBindingWithRhs - else - defaultTraverse binding - | _ -> defaultTraverse binding - - | _ -> defaultTraverse binding }) - - member this.TryRangeOfTypeofWithNameAndTypeExpr pos = - SyntaxTraversal.Traverse(pos, this.ParseTree, { new SyntaxVisitorBase<_>() with - member _.VisitExpr(_path, _, defaultTraverse, expr) = - match expr with - | SynExpr.DotGet(expr, _, _, range) -> - match expr with - | SynExpr.TypeApp(SynExpr.Ident(ident), _, typeArgs, _, _, _, _) -> - let onlyOneTypeArg = - match typeArgs with - | [] -> false - | [_] -> true - | _ -> false - if ident.idText = "typeof" && onlyOneTypeArg then - Some {| NamedIdentRange = typeArgs.Head.Range; FullExpressionRange = range |} - else - defaultTraverse expr - | _ -> defaultTraverse expr - | _ -> defaultTraverse expr }) \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/Common/Logger.fs b/vsintegration/src/FSharp.Editor/Common/Logger.fs index 3488917ae4f..03a507bf74a 100644 --- a/vsintegration/src/FSharp.Editor/Common/Logger.fs +++ b/vsintegration/src/FSharp.Editor/Common/Logger.fs @@ -77,12 +77,12 @@ module Logger = let LogBlock(functionId) = FSharpEditorEventSource.Instance.BlockStart(functionId) { new IDisposable with - member _.Dispose() = + member __.Dispose() = FSharpEditorEventSource.Instance.BlockStop(functionId) } let LogBlockMessage message functionId = FSharpEditorEventSource.Instance.BlockMessageStart(message, functionId) { new IDisposable with - member _.Dispose() = + member __.Dispose() = FSharpEditorEventSource.Instance.BlockMessageStop(message, functionId) } \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/Common/Logging.fs b/vsintegration/src/FSharp.Editor/Common/Logging.fs index 67dd99f6615..cc37f948f42 100644 --- a/vsintegration/src/FSharp.Editor/Common/Logging.fs +++ b/vsintegration/src/FSharp.Editor/Common/Logging.fs @@ -20,6 +20,7 @@ type LogType = | Warn -> "Warning" | Error -> "Error" + module Config = let [] fsharpOutputGuidString = "E721F849-446C-458C-997A-99E14A04CFD3" let fsharpOutputGuid = Guid fsharpOutputGuidString @@ -49,7 +50,7 @@ type [] Logger [] with get () = globalServiceProvider |> Option.defaultValue (ServiceProvider.GlobalProvider :> IServiceProvider) and set v = globalServiceProvider <- Some v - member _.FSharpLoggingPane + member __.FSharpLoggingPane with get () = getPane () |> function diff --git a/vsintegration/src/FSharp.Editor/Common/Pervasive.fs b/vsintegration/src/FSharp.Editor/Common/Pervasive.fs index fc38c56885b..9dd525d609c 100644 --- a/vsintegration/src/FSharp.Editor/Common/Pervasive.fs +++ b/vsintegration/src/FSharp.Editor/Common/Pervasive.fs @@ -20,29 +20,29 @@ type internal ISetThemeColors = abstract member SetColors: unit -> unit type MaybeBuilder () = // 'T -> M<'T> [] - member inline _.Return value: 'T option = + member inline __.Return value: 'T option = Some value // M<'T> -> M<'T> [] - member inline _.ReturnFrom value: 'T option = + member inline __.ReturnFrom value: 'T option = value // unit -> M<'T> [] - member inline _.Zero (): unit option = + member inline __.Zero (): unit option = Some () // TODO: Should this be None? // (unit -> M<'T>) -> M<'T> [] - member _.Delay (f: unit -> 'T option): 'T option = + member __.Delay (f: unit -> 'T option): 'T option = f () // M<'T> -> M<'T> -> M<'T> // or // M -> M<'T> -> M<'T> [] - member inline _.Combine (r1, r2: 'T option): 'T option = + member inline __.Combine (r1, r2: 'T option): 'T option = match r1 with | None -> None @@ -51,12 +51,12 @@ type MaybeBuilder () = // M<'T> * ('T -> M<'U>) -> M<'U> [] - member inline _.Bind (value, f: 'T -> 'U option): 'U option = + member inline __.Bind (value, f: 'T -> 'U option): 'U option = Option.bind f value // 'T * ('T -> M<'U>) -> M<'U> when 'U :> IDisposable [] - member _.Using (resource: ('T :> System.IDisposable), body: _ -> _ option): _ option = + member __.Using (resource: ('T :> System.IDisposable), body: _ -> _ option): _ option = try body resource finally if not <| obj.ReferenceEquals (null, box resource) then @@ -88,23 +88,23 @@ let maybe = MaybeBuilder() [] type AsyncMaybeBuilder () = [] - member _.Return value : Async<'T option> = Some value |> async.Return + member __.Return value : Async<'T option> = Some value |> async.Return [] - member _.ReturnFrom value : Async<'T option> = value + member __.ReturnFrom value : Async<'T option> = value [] - member _.ReturnFrom (value: 'T option) : Async<'T option> = async.Return value + member __.ReturnFrom (value: 'T option) : Async<'T option> = async.Return value [] - member _.Zero () : Async = + member __.Zero () : Async = Some () |> async.Return [] - member _.Delay (f : unit -> Async<'T option>) : Async<'T option> = async.Delay f + member __.Delay (f : unit -> Async<'T option>) : Async<'T option> = async.Delay f [] - member _.Combine (r1, r2 : Async<'T option>) : Async<'T option> = + member __.Combine (r1, r2 : Async<'T option>) : Async<'T option> = async { let! r1' = r1 match r1' with @@ -113,7 +113,7 @@ type AsyncMaybeBuilder () = } [] - member _.Bind (value: Async<'T option>, f : 'T -> Async<'U option>) : Async<'U option> = + member __.Bind (value: Async<'T option>, f : 'T -> Async<'U option>) : Async<'U option> = async { let! value' = value match value' with @@ -122,14 +122,14 @@ type AsyncMaybeBuilder () = } [] - member _.Bind (value: System.Threading.Tasks.Task<'T>, f : 'T -> Async<'U option>) : Async<'U option> = + member __.Bind (value: System.Threading.Tasks.Task<'T>, f : 'T -> Async<'U option>) : Async<'U option> = async { let! value' = Async.AwaitTask value return! f value' } [] - member _.Bind (value: 'T option, f : 'T -> Async<'U option>) : Async<'U option> = + member __.Bind (value: 'T option, f : 'T -> Async<'U option>) : Async<'U option> = async { match value with | None -> return None @@ -137,7 +137,7 @@ type AsyncMaybeBuilder () = } [] - member _.Using (resource : ('T :> IDisposable), body : 'T -> Async<'U option>) : Async<'U option> = + member __.Using (resource : ('T :> IDisposable), body : 'T -> Async<'U option>) : Async<'U option> = async { use resource = resource return! body resource @@ -156,11 +156,11 @@ type AsyncMaybeBuilder () = x.While (enum.MoveNext, x.Delay (fun () -> body enum.Current))) [] - member inline _.TryWith (computation : Async<'T option>, catchHandler : exn -> Async<'T option>) : Async<'T option> = + member inline __.TryWith (computation : Async<'T option>, catchHandler : exn -> Async<'T option>) : Async<'T option> = async.TryWith (computation, catchHandler) [] - member inline _.TryFinally (computation : Async<'T option>, compensation : unit -> unit) : Async<'T option> = + member inline __.TryFinally (computation : Async<'T option>, compensation : unit -> unit) : Async<'T option> = async.TryFinally (computation, compensation) let asyncMaybe = AsyncMaybeBuilder() @@ -173,14 +173,6 @@ let inline liftAsync (computation : Async<'T>) : Async<'T option> = let liftTaskAsync task = task |> Async.AwaitTask |> liftAsync -module Array = - /// Returns a new array with an element replaced with a given value. - let replace index value (array: _ []) = - if index >= array.Length then raise (IndexOutOfRangeException "index") - let res = Array.copy array - res.[index] <- value - res - module Async = let map (f: 'T -> 'U) (a: Async<'T>) : Async<'U> = async { diff --git a/vsintegration/src/FSharp.Editor/Common/RoslynHelpers.fs b/vsintegration/src/FSharp.Editor/Common/RoslynHelpers.fs index b327eab0ca3..89faa387881 100644 --- a/vsintegration/src/FSharp.Editor/Common/RoslynHelpers.fs +++ b/vsintegration/src/FSharp.Editor/Common/RoslynHelpers.fs @@ -4,25 +4,21 @@ namespace Microsoft.VisualStudio.FSharp.Editor open System open System.Collections.Generic -open System.Collections.Immutable open System.Threading open System.Threading.Tasks open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Text -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Text -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Range +open FSharp.Compiler +open FSharp.Compiler.Layout +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Range open Microsoft.VisualStudio.FSharp.Editor.Logging open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Diagnostics -type RoslynTaggedText = Microsoft.CodeAnalysis.TaggedText - [] module internal RoslynHelpers = let joinWithLineBreaks segments = - let lineBreak = TaggedText.lineBreak + let lineBreak = TaggedTextOps.Literals.lineBreak match segments |> List.filter (Seq.isEmpty >> not) with | [] -> Seq.empty | xs -> xs |> List.reduce (fun acc elem -> seq { yield! acc; yield lineBreak; yield! elem }) @@ -44,8 +40,8 @@ module internal RoslynHelpers = let endLine = sourceText.Lines.GetLineFromPosition textSpan.End mkRange fileName - (Position.fromZ startLine.LineNumber (textSpan.Start - startLine.Start)) - (Position.fromZ endLine.LineNumber (textSpan.End - endLine.Start)) + (Pos.fromZ startLine.LineNumber (textSpan.Start - startLine.Start)) + (Pos.fromZ endLine.LineNumber (textSpan.End - endLine.Start)) let GetCompletedTaskResult(task: Task<'TResult>) = if task.Status = TaskStatus.RanToCompletion then @@ -54,50 +50,50 @@ module internal RoslynHelpers = Assert.Exception(task.Exception.GetBaseException()) raise(task.Exception.GetBaseException()) - /// maps from `TextTag` of the F# Compiler to Roslyn `TextTags` for use in tooltips + /// maps from `LayoutTag` of the F# Compiler to Roslyn `TextTags` for use in tooltips let roslynTag = function - | TextTag.ActivePatternCase - | TextTag.ActivePatternResult - | TextTag.UnionCase - | TextTag.Enum -> TextTags.Enum - | TextTag.Struct -> TextTags.Struct - | TextTag.TypeParameter -> TextTags.TypeParameter - | TextTag.Alias - | TextTag.Class - | TextTag.Union - | TextTag.Record - | TextTag.UnknownType // Default to class until/unless we use classification data - | TextTag.Module -> TextTags.Class - | TextTag.Interface -> TextTags.Interface - | TextTag.Keyword -> TextTags.Keyword - | TextTag.Member - | TextTag.Function - | TextTag.Method -> TextTags.Method - | TextTag.RecordField - | TextTag.Property -> TextTags.Property - | TextTag.Parameter // parameter? - | TextTag.Local -> TextTags.Local - | TextTag.Namespace -> TextTags.Namespace - | TextTag.Delegate -> TextTags.Delegate - | TextTag.Event -> TextTags.Event - | TextTag.Field -> TextTags.Field - | TextTag.LineBreak -> TextTags.LineBreak - | TextTag.Space -> TextTags.Space - | TextTag.NumericLiteral -> TextTags.NumericLiteral - | TextTag.Operator -> TextTags.Operator - | TextTag.StringLiteral -> TextTags.StringLiteral - | TextTag.Punctuation -> TextTags.Punctuation - | TextTag.Text - | TextTag.ModuleBinding // why no 'Identifier'? Does it matter? - | TextTag.UnknownEntity -> TextTags.Text - - let CollectTaggedText (list: List<_>) (t:TaggedText) = list.Add(RoslynTaggedText(roslynTag t.Tag, t.Text)) + | LayoutTag.ActivePatternCase + | LayoutTag.ActivePatternResult + | LayoutTag.UnionCase + | LayoutTag.Enum -> TextTags.Enum + | LayoutTag.Struct -> TextTags.Struct + | LayoutTag.TypeParameter -> TextTags.TypeParameter + | LayoutTag.Alias + | LayoutTag.Class + | LayoutTag.Union + | LayoutTag.Record + | LayoutTag.UnknownType // Default to class until/unless we use classification data + | LayoutTag.Module -> TextTags.Class + | LayoutTag.Interface -> TextTags.Interface + | LayoutTag.Keyword -> TextTags.Keyword + | LayoutTag.Member + | LayoutTag.Function + | LayoutTag.Method -> TextTags.Method + | LayoutTag.RecordField + | LayoutTag.Property -> TextTags.Property + | LayoutTag.Parameter // parameter? + | LayoutTag.Local -> TextTags.Local + | LayoutTag.Namespace -> TextTags.Namespace + | LayoutTag.Delegate -> TextTags.Delegate + | LayoutTag.Event -> TextTags.Event + | LayoutTag.Field -> TextTags.Field + | LayoutTag.LineBreak -> TextTags.LineBreak + | LayoutTag.Space -> TextTags.Space + | LayoutTag.NumericLiteral -> TextTags.NumericLiteral + | LayoutTag.Operator -> TextTags.Operator + | LayoutTag.StringLiteral -> TextTags.StringLiteral + | LayoutTag.Punctuation -> TextTags.Punctuation + | LayoutTag.Text + | LayoutTag.ModuleBinding // why no 'Identifier'? Does it matter? + | LayoutTag.UnknownEntity -> TextTags.Text + + let CollectTaggedText (list: List<_>) (t:TaggedText) = list.Add(TaggedText(roslynTag t.Tag, t.Text)) type VolatileBarrier() = [] let mutable isStopped = false - member _.Proceed = not isStopped - member _.Stop() = isStopped <- true + member __.Proceed = not isStopped + member __.Stop() = isStopped <- true // This is like Async.StartAsTask, but // 1. if cancellation occurs we explicitly associate the cancellation with cancellationToken @@ -110,7 +106,8 @@ module internal RoslynHelpers = let task = tcs.Task let disposeReg() = barrier.Stop(); if not task.IsCanceled then reg.Dispose() Async.StartWithContinuations( - computation, + async { do! Async.SwitchToThreadPool() + return! computation }, continuation=(fun result -> disposeReg() tcs.TrySetResult(result) |> ignore @@ -135,21 +132,16 @@ module internal RoslynHelpers = let StartAsyncUnitAsTask cancellationToken (computation:Async) = StartAsyncAsTask cancellationToken computation :> Task - let ConvertError(error: FSharpDiagnostic, location: Location) = + let ConvertError(error: FSharpErrorInfo, location: Location) = // Normalize the error message into the same format that we will receive it from the compiler. // This ensures that IntelliSense and Compiler errors in the 'Error List' are de-duplicated. // (i.e the same error does not appear twice, where the only difference is the line endings.) - let normalizedMessage = error.Message |> FSharpDiagnostic.NormalizeErrorString |> FSharpDiagnostic.NewlineifyErrorString + let normalizedMessage = error.Message |> ErrorLogger.NormalizeErrorString |> ErrorLogger.NewlineifyErrorString - let id = error.ErrorNumberText + let id = "FS" + error.ErrorNumber.ToString("0000") let emptyString = LocalizableString.op_Implicit("") let description = LocalizableString.op_Implicit(normalizedMessage) - let severity = - match error.Severity with - | FSharpDiagnosticSeverity.Error -> DiagnosticSeverity.Error - | FSharpDiagnosticSeverity.Warning -> DiagnosticSeverity.Warning - | FSharpDiagnosticSeverity.Info -> DiagnosticSeverity.Info - | FSharpDiagnosticSeverity.Hidden -> DiagnosticSeverity.Hidden + let severity = if error.Severity = FSharpErrorSeverity.Error then DiagnosticSeverity.Error else DiagnosticSeverity.Warning let customTags = match error.ErrorNumber with | 1182 -> FSharpDiagnosticCustomTags.Unnecessary @@ -181,7 +173,7 @@ module internal OpenDeclarationHelper = /// SourceText. /// Insertion context. Typically returned from tryGetInsertionContext /// Namespace to open. - let insertOpenDeclaration (sourceText: SourceText) (ctx: InsertionContext) (ns: string) : SourceText * int = + let insertOpenDeclaration (sourceText: SourceText) (ctx: InsertContext) (ns: string) : SourceText * int = let mutable minPos = None let insert line lineStr (sourceText: SourceText) : SourceText = @@ -196,7 +188,7 @@ module internal OpenDeclarationHelper = sourceText.WithChanges(TextChange(TextSpan(pos, 0), lineStr + lineBreak)) let getLineStr line = sourceText.Lines.[line].ToString().Trim() - let pos = ParsedInput.AdjustInsertionPoint getLineStr ctx + let pos = ParsedInput.adjustInsertionPoint getLineStr ctx let docLine = Line.toZ pos.Line let lineStr = (String.replicate pos.Column " ") + "open " + ns @@ -223,8 +215,3 @@ module internal OpenDeclarationHelper = else sourceText sourceText, minPos |> Option.defaultValue 0 - -[] -module internal TaggedText = - let toString (tts: TaggedText[]) = - tts |> Array.map (fun tt -> tt.Text) |> String.concat "" diff --git a/vsintegration/src/FSharp.Editor/Common/Vs.fs b/vsintegration/src/FSharp.Editor/Common/Vs.fs index 7fd2095f855..ee17ab8b381 100644 --- a/vsintegration/src/FSharp.Editor/Common/Vs.fs +++ b/vsintegration/src/FSharp.Editor/Common/Vs.fs @@ -15,19 +15,19 @@ module internal Com = ErrorHandler.ThrowOnFailure(hr) |> ignore let ThrowOnFailure1(hr,res) = - ErrorHandler.ThrowOnFailure(hr) |> ignore + ErrorHandler.ThrowOnFailure(hr) |> ignore; res let ThrowOnFailure2(hr,res1,res2) = - ErrorHandler.ThrowOnFailure(hr) |> ignore + ErrorHandler.ThrowOnFailure(hr) |> ignore; res1,res2 let ThrowOnFailure3(hr,res1,res2,res3) = - ErrorHandler.ThrowOnFailure(hr) |> ignore + ErrorHandler.ThrowOnFailure(hr) |> ignore; res1,res2,res3 let ThrowOnFailure4(hr,res1,res2,res3,res4) = - ErrorHandler.ThrowOnFailure(hr) |> ignore + ErrorHandler.ThrowOnFailure(hr) |> ignore; res1,res2,res3,res4 let Succeeded hr = diff --git a/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs b/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs index 8cf74d0d665..12e66f1ade6 100644 --- a/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs +++ b/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs @@ -16,11 +16,9 @@ open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Completion open Microsoft.VisualStudio.Shell -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Tokenization +open FSharp.Compiler +open FSharp.Compiler.Range +open FSharp.Compiler.SourceCodeServices module Logger = Microsoft.VisualStudio.FSharp.Editor.Logger @@ -28,14 +26,17 @@ type internal FSharpCompletionProvider ( workspace: Workspace, serviceProvider: SVsServiceProvider, + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager, assemblyContentProvider: AssemblyContentProvider ) = inherit CompletionProvider() + static let userOpName = "CompletionProvider" // Save the backing data in a cache, we need to save for at least the length of the completion session // See https://github.com/Microsoft/visualfsharp/issues/4714 - static let mutable declarationItems: DeclarationListItem[] = [||] + static let mutable declarationItems: FSharpDeclarationListItem[] = [||] static let [] NameInCodePropName = "NameInCode" static let [] FullNamePropName = "FullName" static let [] IsExtensionMemberPropName = "IsExtensionMember" @@ -44,7 +45,7 @@ type internal FSharpCompletionProvider static let [] KeywordDescription = "KeywordDescription" static let keywordCompletionItems = - FSharpKeywords.KeywordsWithDescription + Keywords.KeywordsWithDescription |> List.filter (fun (keyword, _) -> not (PrettyNaming.IsOperatorName keyword)) |> List.sortBy (fun (keyword, _) -> keyword) |> List.mapi (fun n (keyword, description) -> @@ -56,6 +57,8 @@ type internal FSharpCompletionProvider sortText = sprintf "%06d" (1000000 + n)) .AddProperty(KeywordDescription, description)) + let checker = checkerProvider.Checker + let settings: EditorOptions = workspace.Services.GetService() let documentationBuilder = XmlDocumentation.CreateDocumentationBuilder(serviceProvider.XMLMemberIndexService) @@ -102,23 +105,23 @@ type internal FSharpCompletionProvider (triggerChar = '.' || (intelliSenseOptions.ShowAfterCharIsTyped && CompletionUtils.isStartingNewWord(sourceText, triggerPosition))) - static member ProvideCompletionsAsyncAux(document: Document, caretPosition: int, getAllSymbols: FSharpCheckFileResults -> AssemblySymbol list, intellisenseOptions: IntelliSenseOptions) = + static member ProvideCompletionsAsyncAux(checker: FSharpChecker, sourceText: SourceText, caretPosition: int, options: FSharpProjectOptions, filePath: string, + textVersionHash: int, getAllSymbols: FSharpCheckFileResults -> AssemblySymbol list, languageServicePerformanceOptions: LanguageServicePerformanceOptions, intellisenseOptions: IntelliSenseOptions) = asyncMaybe { - let! parseResults, checkFileResults = document.GetFSharpParseAndCheckResultsAsync("ProvideCompletionsAsyncAux") |> liftAsync - let! sourceText = document.GetTextAsync() + let! parseResults, _, checkFileResults = checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, options, languageServicePerformanceOptions, userOpName = userOpName) let textLines = sourceText.Lines let caretLinePos = textLines.GetLinePosition(caretPosition) let caretLine = textLines.GetLineFromPosition(caretPosition) let fcsCaretLineNumber = Line.fromZ caretLinePos.Line // Roslyn line numbers are zero-based, FSharp.Compiler.Service line numbers are 1-based let caretLineColumn = caretLinePos.Character - let line = caretLine.ToString() - let partialName = QuickParse.GetPartialLongNameEx(line, caretLineColumn - 1) + let partialName = QuickParse.GetPartialLongNameEx(caretLine.ToString(), caretLineColumn - 1) let getAllSymbols() = getAllSymbols checkFileResults |> List.filter (fun assemblySymbol -> assemblySymbol.FullName.Contains "." && not (PrettyNaming.IsOperatorName assemblySymbol.Symbol.DisplayName)) - let declarations = checkFileResults.GetDeclarationListInfo(Some(parseResults), fcsCaretLineNumber, line, partialName, getAllSymbols) + let declarations = checkFileResults.GetDeclarationListInfo(Some(parseResults), fcsCaretLineNumber, caretLine.ToString(), + partialName, getAllSymbols) let results = List() declarationItems <- @@ -190,7 +193,12 @@ type internal FSharpCompletionProvider if results.Count > 0 && not declarations.IsForType && not declarations.IsError && List.isEmpty partialName.QualifyingIdents then - let completionContext = ParsedInput.TryGetCompletionContext(Position.fromZ caretLinePos.Line caretLinePos.Character, parseResults.ParseTree, line) + let lineStr = textLines.[caretLinePos.Line].ToString() + + let completionContext = + parseResults.ParseTree + |> Option.bind (fun parseTree -> + UntypedParseImpl.TryGetCompletionContext(Pos.fromZ caretLinePos.Line caretLinePos.Character, parseTree, lineStr)) match completionContext with | None -> results.AddRange(keywordCompletionItems) @@ -205,7 +213,7 @@ type internal FSharpCompletionProvider let getInfo() = let documentId = workspace.GetDocumentIdInCurrentContext(sourceText.Container) let document = workspace.CurrentSolution.GetDocument(documentId) - let defines = document.GetFSharpQuickDefines() + let defines = projectInfoManager.GetCompilationDefinesForEditingDocument(document) (documentId, document.FilePath, defines) FSharpCompletionProvider.ShouldTriggerCompletionAux(sourceText, caretPosition, trigger.Kind, getInfo, settings.IntelliSense) @@ -215,14 +223,17 @@ type internal FSharpCompletionProvider use _logBlock = Logger.LogBlockMessage context.Document.Name LogEditorFunctionId.Completion_ProvideCompletionsAsync let document = context.Document let! sourceText = context.Document.GetTextAsync(context.CancellationToken) - let defines = document.GetFSharpQuickDefines() + let defines = projectInfoManager.GetCompilationDefinesForEditingDocument(document) do! Option.guard (CompletionUtils.shouldProvideCompletion(document.Id, document.FilePath, defines, sourceText, context.Position)) + let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, context.CancellationToken, userOpName) + let! textVersion = context.Document.GetTextVersionAsync(context.CancellationToken) let getAllSymbols(fileCheckResults: FSharpCheckFileResults) = if settings.IntelliSense.IncludeSymbolsFromUnopenedNamespacesOrModules then assemblyContentProvider.GetAllEntitiesInProjectAndReferencedAssemblies(fileCheckResults) else [] let! results = - FSharpCompletionProvider.ProvideCompletionsAsyncAux(context.Document, context.Position, getAllSymbols, settings.IntelliSense) + FSharpCompletionProvider.ProvideCompletionsAsyncAux(checker, sourceText, context.Position, projectOptions, document.FilePath, + textVersion.GetHashCode(), getAllSymbols, settings.LanguageServicePerformance, settings.IntelliSense) context.AddItems(results) } |> Async.Ignore |> RoslynHelpers.StartAsyncUnitAsTask context.CancellationToken @@ -234,7 +245,7 @@ type internal FSharpCompletionProvider let completionItemIndex = int completionItemIndexStr if completionItemIndex < declarationItems.Length then let declarationItem = declarationItems.[completionItemIndex] - let description = declarationItem.Description + let! description = declarationItem.StructuredDescriptionTextAsync let documentation = List() let collector = RoslynHelpers.CollectTaggedText documentation // mix main description and xmldoc by using one collector @@ -283,14 +294,15 @@ type internal FSharpCompletionProvider let! sourceText = document.GetTextAsync(cancellationToken) let textWithItemCommitted = sourceText.WithChanges(TextChange(item.Span, nameInCode)) let line = sourceText.Lines.GetLineFromPosition(item.Span.Start) - let! parseResults = document.GetFSharpParseResultsAsync(nameof(FSharpCompletionProvider)) |> liftAsync + let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) + let! parsedInput = checker.ParseDocument(document, parsingOptions, sourceText, userOpName) let fullNameIdents = fullName |> Option.map (fun x -> x.Split '.') |> Option.defaultValue [||] let insertionPoint = if settings.CodeFixes.AlwaysPlaceOpensAtTopLevel then OpenStatementInsertionPoint.TopLevel else OpenStatementInsertionPoint.Nearest - let ctx = ParsedInput.FindNearestPointToInsertOpenDeclaration line.LineNumber parseResults.ParseTree fullNameIdents insertionPoint + let ctx = ParsedInput.findNearestPointToInsertOpenDeclaration line.LineNumber parsedInput fullNameIdents insertionPoint let finalSourceText, changedSpanStartPos = OpenDeclarationHelper.insertOpenDeclaration textWithItemCommitted ctx ns let fullChangingSpan = TextSpan.FromBounds(changedSpanStartPos, item.Span.End) let changedSpan = TextSpan.FromBounds(changedSpanStartPos, item.Span.End + (finalSourceText.Length - sourceText.Length)) diff --git a/vsintegration/src/FSharp.Editor/Completion/CompletionService.fs b/vsintegration/src/FSharp.Editor/Completion/CompletionService.fs index ccdadf504f7..e2c03429d55 100644 --- a/vsintegration/src/FSharp.Editor/Completion/CompletionService.fs +++ b/vsintegration/src/FSharp.Editor/Completion/CompletionService.fs @@ -17,16 +17,16 @@ type internal FSharpCompletionService ( workspace: Workspace, serviceProvider: SVsServiceProvider, + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager, assemblyContentProvider: AssemblyContentProvider, settings: EditorOptions ) = inherit CompletionServiceWithProviders(workspace) - let projectInfoManager = workspace.Services.GetRequiredService().FSharpProjectOptionsManager - let builtInProviders = ImmutableArray.Create( - FSharpCompletionProvider(workspace, serviceProvider, assemblyContentProvider), + FSharpCompletionProvider(workspace, serviceProvider, checkerProvider, projectInfoManager, assemblyContentProvider), FSharpCommonCompletionProvider.Create(HashDirectiveCompletionProvider.Create(workspace, projectInfoManager))) override _.Language = FSharpConstants.FSharpLanguageName @@ -56,11 +56,13 @@ type internal FSharpCompletionServiceFactory [] ( serviceProvider: SVsServiceProvider, + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager, assemblyContentProvider: AssemblyContentProvider, settings: EditorOptions ) = interface ILanguageServiceFactory with member _.CreateLanguageService(hostLanguageServices: HostLanguageServices) : ILanguageService = - upcast new FSharpCompletionService(hostLanguageServices.WorkspaceServices.Workspace, serviceProvider, assemblyContentProvider, settings) + upcast new FSharpCompletionService(hostLanguageServices.WorkspaceServices.Workspace, serviceProvider, checkerProvider, projectInfoManager, assemblyContentProvider, settings) diff --git a/vsintegration/src/FSharp.Editor/Completion/CompletionUtils.fs b/vsintegration/src/FSharp.Editor/Completion/CompletionUtils.fs index 48ddb9ce974..b87f7e6c6a6 100644 --- a/vsintegration/src/FSharp.Editor/Completion/CompletionUtils.fs +++ b/vsintegration/src/FSharp.Editor/Completion/CompletionUtils.fs @@ -7,10 +7,11 @@ open System.Threading open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Classification open Microsoft.CodeAnalysis.Text +open Microsoft.CodeAnalysis.Completion open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Completion open System.Globalization -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.PrettyNaming module internal CompletionUtils = diff --git a/vsintegration/src/FSharp.Editor/Completion/PathCompletionUtilities.fs b/vsintegration/src/FSharp.Editor/Completion/PathCompletionUtilities.fs index 737bffb7553..e2dc84e64e7 100644 --- a/vsintegration/src/FSharp.Editor/Completion/PathCompletionUtilities.fs +++ b/vsintegration/src/FSharp.Editor/Completion/PathCompletionUtilities.fs @@ -6,7 +6,6 @@ open System open System.IO module PathCompletionUtilities = - let GetPathThroughLastSlash(quotedPath: string, quotedPathStart: int, position: int) = let quoteLength = "\"".Length let positionInQuotedPath = position - quotedPathStart @@ -16,6 +15,5 @@ module PathCompletionUtilities = let index = path.LastIndexOf(Path.DirectorySeparatorChar, position) if index >= 0 then index + 1 else -1 if afterLastSlashIndex >= 0 then path.Substring(0, afterLastSlashIndex) else path - let EndsWithQuote(quotedPath: string) = quotedPath.Length >= 2 && quotedPath.[quotedPath.Length - 1] = '"' diff --git a/vsintegration/src/FSharp.Editor/Completion/SignatureHelp.fs b/vsintegration/src/FSharp.Editor/Completion/SignatureHelp.fs index 8bc06631418..e72bb4d05ad 100644 --- a/vsintegration/src/FSharp.Editor/Completion/SignatureHelp.fs +++ b/vsintegration/src/FSharp.Editor/Completion/SignatureHelp.fs @@ -11,63 +11,55 @@ open Microsoft.CodeAnalysis.ExternalAccess.FSharp.SignatureHelp open Microsoft.VisualStudio.Shell -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Symbols -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Position -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Tokenization +open FSharp.Compiler +open FSharp.Compiler.Layout +open FSharp.Compiler.Range +open FSharp.Compiler.SourceCodeServices type SignatureHelpParameterInfo = { ParameterName: string IsOptional: bool CanonicalTypeTextForSorting: string - Documentation: ResizeArray - DisplayParts: ResizeArray } + Documentation: ResizeArray + DisplayParts: ResizeArray } type SignatureHelpItem = { HasParamArrayArg: bool - Documentation: ResizeArray - PrefixParts: RoslynTaggedText[] - SeparatorParts: RoslynTaggedText[] - SuffixParts: RoslynTaggedText[] + Documentation: ResizeArray + PrefixParts: Microsoft.CodeAnalysis.TaggedText[] + SeparatorParts: Microsoft.CodeAnalysis.TaggedText[] + SuffixParts: Microsoft.CodeAnalysis.TaggedText[] Parameters: SignatureHelpParameterInfo[] - MainDescription: ResizeArray } - -type CurrentSignatureHelpSessionKind = - | FunctionApplication - | MethodCall + MainDescription: ResizeArray } type SignatureHelpData = { SignatureHelpItems: SignatureHelpItem[] ApplicableSpan: TextSpan ArgumentIndex: int ArgumentCount: int - ArgumentName: string option - CurrentSignatureHelpSessionKind: CurrentSignatureHelpSessionKind } + ArgumentName: string option } [] [)>] type internal FSharpSignatureHelpProvider [] ( - serviceProvider: SVsServiceProvider + serviceProvider: SVsServiceProvider, + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = + static let userOpName = "SignatureHelpProvider" let documentationBuilder = XmlDocumentation.CreateDocumentationBuilder(serviceProvider.XMLMemberIndexService) static let oneColAfter (lp: LinePosition) = LinePosition(lp.Line,lp.Character+1) static let oneColBefore (lp: LinePosition) = LinePosition(lp.Line,max 0 (lp.Character-1)) - let mutable possibleCurrentSignatureHelpSessionKind = None - static member internal ProvideMethodsAsyncAux ( caretLinePos: LinePosition, caretLineColumn: int, - paramLocations: ParameterLocations, + paramLocations: FSharpNoteworthyParamInfoLocations, checkFileResults: FSharpCheckFileResults, documentationBuilder: IDocumentationBuilder, sourceText: SourceText, @@ -86,9 +78,9 @@ type internal FSharpSignatureHelpProvider do! Option.guard (methods.Length > 0 && not(methodGroup.MethodName.EndsWith("> )"))) let isStaticArgTip = - let parenLine, parenCol = Position.toZ paramLocations.OpenParenLocation + let parenLine, parenCol = Pos.toZ paramLocations.OpenParenLocation assert (parenLine < textLines.Count) - let parenLineText = sourceText.GetSubText(textLines.[parenLine].Span) + let parenLineText = textLines.[parenLine].ToString() parenCol < parenLineText.Length && parenLineText.[parenCol] = '<' let filteredMethods = @@ -102,7 +94,7 @@ type internal FSharpSignatureHelpProvider do! Option.guard (filteredMethods.Length > 0) let posToLinePosition pos = - let (l,c) = Position.toZ pos + let (l,c) = Pos.toZ pos let result = LinePosition(l,c) let lastPosInDocument = textLines.GetLinePosition(textLines.[textLines.Count-1].End) if lastPosInDocument.CompareTo(result) > 0 then result else lastPosInDocument @@ -166,7 +158,7 @@ type internal FSharpSignatureHelpProvider | n -> n // Compute the current argument name if it is named. - let namedArgumentName = + let argumentName = if argumentIndex < paramLocations.NamedParamNames.Length then paramLocations.NamedParamNames.[argumentIndex] else @@ -181,7 +173,7 @@ type internal FSharpSignatureHelpProvider documentationBuilder, RoslynHelpers.CollectTaggedText mainDescription, RoslynHelpers.CollectTaggedText documentation, - method.Description, false) + method.StructuredDescription, false) let parameters = let parameters = if isStaticArgTip then method.StaticParameters else method.Parameters @@ -190,7 +182,7 @@ type internal FSharpSignatureHelpProvider let doc = ResizeArray() let parts = ResizeArray() XmlDocumentation.BuildMethodParamText(documentationBuilder, RoslynHelpers.CollectTaggedText doc, method.XmlDoc, p.ParameterName) - p.Display |> Seq.iter (RoslynHelpers.CollectTaggedText parts) + renderL (taggedTextListR (RoslynHelpers.CollectTaggedText parts)) p.StructuredDisplay |> ignore { ParameterName = p.ParameterName IsOptional = p.IsOptional CanonicalTypeTextForSorting = p.CanonicalTypeTextForSorting @@ -199,11 +191,11 @@ type internal FSharpSignatureHelpProvider |] let prefixParts = - [| RoslynTaggedText(TextTags.Method, methodGroup.MethodName); - RoslynTaggedText(TextTags.Punctuation, (if isStaticArgTip then "<" else "(")) |] + [| TaggedText(TextTags.Method, methodGroup.MethodName); + TaggedText(TextTags.Punctuation, (if isStaticArgTip then "<" else "(")) |] - let separatorParts = [| RoslynTaggedText(TextTags.Punctuation, ","); RoslynTaggedText(TextTags.Space, " ") |] - let suffixParts = [| RoslynTaggedText(TextTags.Punctuation, (if isStaticArgTip then ">" else ")")) |] + let separatorParts = [| TaggedText(TextTags.Punctuation, ","); TaggedText(TextTags.Space, " ") |] + let suffixParts = [| TaggedText(TextTags.Punctuation, (if isStaticArgTip then ">" else ")")) |] { HasParamArrayArg = method.HasParamArrayArg Documentation = documentation @@ -219,8 +211,7 @@ type internal FSharpSignatureHelpProvider ApplicableSpan = applicableSpan ArgumentIndex = argumentIndex ArgumentCount = argumentCount - ArgumentName = namedArgumentName - CurrentSignatureHelpSessionKind = MethodCall } + ArgumentName = argumentName } return! Some data } @@ -234,13 +225,26 @@ type internal FSharpSignatureHelpProvider documentationBuilder: IDocumentationBuilder, sourceText: SourceText, caretPosition: int, - adjustedColumnInSource: int, filePath: string ) = asyncMaybe { + // Backtrack to find a non-whitespace character to get curried arg infos (if present) and a symbol to inspect. + let adjustedColumnInSource = + let rec loop s c = + if String.IsNullOrWhiteSpace(s.ToString()) then + loop (sourceText.GetSubText(c - 1)) (c - 1) + else + c + let startText = + if caretPosition = sourceText.Length then + sourceText.GetSubText(caretPosition) + else + sourceText.GetSubText(TextSpan(caretPosition, 1)) + + loop startText caretPosition + let textLine = sourceText.Lines.GetLineFromPosition(adjustedColumnInSource) let textLinePos = sourceText.Lines.GetLinePosition(adjustedColumnInSource) - let textLineText = textLine.ToString() let pos = mkPos (Line.fromZ textLinePos.Line) textLinePos.Character let textLinePos = sourceText.Lines.GetLinePosition(adjustedColumnInSource) let fcsTextLineNumber = Line.fromZ textLinePos.Line @@ -256,7 +260,7 @@ type internal FSharpSignatureHelpProvider } let! lexerSymbol = Tokenizer.getSymbolAtPosition(documentId, sourceText, possibleApplicableSymbolEndColumn, filePath, defines, SymbolLookupKind.Greedy, false, false) - let! symbolUse = checkFileResults.GetSymbolUseAtLocation(fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLineText, lexerSymbol.FullIsland) + let! symbolUse = checkFileResults.GetSymbolUseAtLocation(fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLine.ToString(), lexerSymbol.FullIsland) let isValid (mfv: FSharpMemberOrFunctionOrValue) = not (PrettyNaming.IsOperatorName mfv.DisplayName) && @@ -265,23 +269,23 @@ type internal FSharpSignatureHelpProvider match symbolUse.Symbol with | :? FSharpMemberOrFunctionOrValue as mfv when isValid mfv -> - let tooltip = checkFileResults.GetToolTip(fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLineText, lexerSymbol.FullIsland, FSharpTokenTag.IDENT) + let tooltip = checkFileResults.GetStructuredToolTipText(fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLine.ToString(), lexerSymbol.FullIsland, FSharpTokenTag.IDENT) match tooltip with - | ToolTipText [] - | ToolTipText [ToolTipElement.None] -> return! None + | FSharpToolTipText [] + | FSharpToolTipText [FSharpStructuredToolTipElement.None] -> return! None | _ -> - let possiblePipelineIdent = parseResults.TryIdentOfPipelineContainingPosAndNumArgsApplied symbolUse.Range.Start + let possiblePipelineIdent = parseResults.TryIdentOfPipelineContainingPosAndNumArgsApplied symbolUse.RangeAlternate.Start let numArgsAlreadyApplied = match possiblePipelineIdent with | None -> 0 | Some (_, numArgsApplied) -> numArgsApplied - let definedArgs = mfv.CurriedParameterGroups |> Array.ofSeq + let definedArgs = mfv.CurriedParameterGroups |> Seq.concat |> Array.ofSeq let numDefinedArgs = definedArgs.Length let curriedArgsInSource = - parseResults.GetAllArgumentsForFunctionApplicationAtPostion symbolUse.Range.Start + parseResults.GetAllArgumentsForFunctionApplicationAtPostion symbolUse.RangeAlternate.Start |> Option.defaultValue [] |> Array.ofList @@ -321,7 +325,7 @@ type internal FSharpSignatureHelpProvider | None -> let possibleNextIndex = curriedArgsInSource - |> Array.tryFindIndex(fun argRange -> Position.posGeq argRange.Start caretPos) + |> Array.tryFindIndex(fun argRange -> Range.posGeq argRange.Start caretPos) match possibleNextIndex with | Some index -> Some index @@ -346,127 +350,62 @@ type internal FSharpSignatureHelpProvider let fsharpDocs = RoslynHelpers.joinWithLineBreaks [documentation; typeParameterMap; usage; exceptions] let docs = ResizeArray() - fsharpDocs |> Seq.iter (RoslynHelpers.CollectTaggedText docs) + for fsharpDoc in fsharpDocs do + RoslynHelpers.CollectTaggedText docs fsharpDoc let parts = ResizeArray() - mainDescription |> Seq.iter (RoslynHelpers.CollectTaggedText parts) + for part in mainDescription do + RoslynHelpers.CollectTaggedText parts part let displayArgs = ResizeArray() // Offset by 1 here until we support reverse indexes in this codebase - definedArgs.[.. definedArgs.Length - 1 - numArgsAlreadyApplied] |> Array.iteri (fun index argument -> + for argument in definedArgs.[.. definedArgs.Length - 1 - numArgsAlreadyApplied] do + let taggedText = ResizeArray() let tt = ResizeArray() - - if argument.Count = 1 then - let argument = argument.[0] - let taggedText = argument.Type.FormatLayout symbolUse.DisplayContext - taggedText |> Seq.iter (RoslynHelpers.CollectTaggedText tt) - - let name = - if String.IsNullOrWhiteSpace(argument.DisplayName) then - "arg" + string index - else - argument.DisplayName - - let display = - [| - RoslynTaggedText(TextTags.Local, name) - RoslynTaggedText(TextTags.Punctuation, ":") - RoslynTaggedText(TextTags.Space, " ") - |] - |> ResizeArray - - if argument.Type.IsFunctionType then - display.Add(RoslynTaggedText(TextTags.Punctuation, "(")) - - display.AddRange(tt) - - if argument.Type.IsFunctionType then - display.Add(RoslynTaggedText(TextTags.Punctuation, ")")) - - let info = - { ParameterName = name - IsOptional = false - CanonicalTypeTextForSorting = name - Documentation = ResizeArray() - DisplayParts = display } - - displayArgs.Add(info) - else - let display = ResizeArray() - display.Add(RoslynTaggedText(TextTags.Punctuation, "(")) - - let separatorParts = - [| - RoslynTaggedText(TextTags.Space, " ") - RoslynTaggedText(TextTags.Operator, "*") - RoslynTaggedText(TextTags.Space, " ") - |] - - let mutable first = true - argument |> Seq.iteri (fun index arg -> - if first then - first <- false - else - display.AddRange(separatorParts) - let tt = ResizeArray() - - let taggedText = arg.Type.FormatLayout symbolUse.DisplayContext - taggedText |> Seq.iter (RoslynHelpers.CollectTaggedText tt) - - let name = - if String.IsNullOrWhiteSpace(arg.DisplayName) then - "arg" + string index - else - arg.DisplayName - - let namePart = - [| - RoslynTaggedText(TextTags.Local, name) - RoslynTaggedText(TextTags.Punctuation, ":") - RoslynTaggedText(TextTags.Space, " ") - |] - - display.AddRange(namePart) - - if arg.Type.IsFunctionType then - display.Add(RoslynTaggedText(TextTags.Punctuation, "(")) - - display.AddRange(tt) - - if arg.Type.IsFunctionType then - display.Add(RoslynTaggedText(TextTags.Punctuation, ")"))) - - display.Add(RoslynTaggedText(TextTags.Punctuation, ")")) - - let info = - { ParameterName = "" // No name here, since it's a tuple of arguments has no name in the F# symbol info - IsOptional = false - CanonicalTypeTextForSorting = "" - Documentation = ResizeArray() - DisplayParts = display } - - displayArgs.Add(info)) + let layout = argument.Type.FormatLayout symbolUse.DisplayContext + Layout.renderL (Layout.taggedTextListR taggedText.Add) layout |> ignore + for part in taggedText do + RoslynHelpers.CollectTaggedText tt part + + let display = + [| + TaggedText(TextTags.Local, argument.DisplayName) + TaggedText(TextTags.Punctuation, ":") + TaggedText(TextTags.Space, " ") + |] + |> ResizeArray + + display.AddRange(tt) + + let info = + { ParameterName = argument.DisplayName + IsOptional = false + CanonicalTypeTextForSorting = argument.FullName + Documentation = ResizeArray() + DisplayParts = display } + + displayArgs.Add(info) do! Option.guard (displayArgs.Count > 0) let prefixParts = [| if mfv.IsMember then - RoslynTaggedText(TextTags.Keyword, "member") + TaggedText(TextTags.Keyword, "member") else - RoslynTaggedText(TextTags.Keyword, "val") - RoslynTaggedText(TextTags.Space, " ") - RoslynTaggedText(TextTags.Method, mfv.DisplayName) - RoslynTaggedText(TextTags.Punctuation, ":") - RoslynTaggedText(TextTags.Space, " ") + TaggedText(TextTags.Keyword, "val") + TaggedText(TextTags.Space, " ") + TaggedText(TextTags.Method, mfv.DisplayName) + TaggedText(TextTags.Punctuation, ":") + TaggedText(TextTags.Space, " ") |] let separatorParts = [| - RoslynTaggedText(TextTags.Space, " ") - RoslynTaggedText(TextTags.Operator, "->") - RoslynTaggedText(TextTags.Space, " ") + TaggedText(TextTags.Space, " ") + TaggedText(TextTags.Operator, "->") + TaggedText(TextTags.Space, " ") |] let sigHelpItem = @@ -478,15 +417,14 @@ type internal FSharpSignatureHelpProvider Parameters = displayArgs.ToArray() MainDescription = ResizeArray() } - let! symbolSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.Range) + let! symbolSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.RangeAlternate) let data = { SignatureHelpItems = [| sigHelpItem |] ApplicableSpan = TextSpan(symbolSpan.End, caretPosition - symbolSpan.End) ArgumentIndex = argumentIndex ArgumentCount = displayArgs.Count - ArgumentName = None - CurrentSignatureHelpSessionKind = FunctionApplication } + ArgumentName = None } return! Some data | _ -> @@ -497,47 +435,35 @@ type internal FSharpSignatureHelpProvider ( document: Document, defines: string list, + checker: FSharpChecker, documentationBuilder: IDocumentationBuilder, + sourceText: SourceText, caretPosition: int, - triggerTypedChar: char option, - possibleCurrentSignatureHelpSessionKind: CurrentSignatureHelpSessionKind option + options: FSharpProjectOptions, + filePath: string, + textVersionHash: int, + triggerTypedChar: char option ) = asyncMaybe { - let! parseResults, checkFileResults = document.GetFSharpParseAndCheckResultsAsync("ProvideSignatureHelp") |> liftAsync - - let! sourceText = document.GetTextAsync() |> liftTaskAsync - let textLines = sourceText.Lines let caretLinePos = textLines.GetLinePosition(caretPosition) let caretLineColumn = caretLinePos.Character + let perfOptions = document.FSharpOptions.LanguageServicePerformance - let adjustedColumnInSource = - let rec loop ch pos = - if Char.IsWhiteSpace(ch) then - loop sourceText.[pos - 1] (pos - 1) - else - pos - loop sourceText.[caretPosition - 1] (caretPosition - 1) - - let adjustedColumnChar = sourceText.[adjustedColumnInSource] - - match triggerTypedChar, possibleCurrentSignatureHelpSessionKind with - // Generally ' ' indicates a function application, but it's also used commonly after a comma in a method call. - // This means that the adjusted position relative to the caret could be a ',' or a '(' or '<', - // which would mean we're already inside of a method call - not a function argument. So we bail if that's the case. - | Some ' ', _ when adjustedColumnChar <> ',' && adjustedColumnChar <> '(' && adjustedColumnChar <> '<' -> + let! parseResults, _, checkFileResults = checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, options, perfOptions, userOpName = userOpName) + match parseResults.FindNoteworthyParamInfoLocations(Pos.fromZ caretLinePos.Line caretLineColumn) with + | Some paramInfoLocations -> return! - FSharpSignatureHelpProvider.ProvideParametersAsyncAux( - parseResults, + FSharpSignatureHelpProvider.ProvideMethodsAsyncAux( + caretLinePos, + caretLineColumn, + paramInfoLocations, checkFileResults, - document.Id, - defines, documentationBuilder, sourceText, caretPosition, - adjustedColumnInSource, - document.FilePath) - | _, Some FunctionApplication when adjustedColumnChar <> ',' && adjustedColumnChar <> '(' && adjustedColumnChar <> '<' -> + triggerTypedChar) + | None -> return! FSharpSignatureHelpProvider.ProvideParametersAsyncAux( parseResults, @@ -547,20 +473,7 @@ type internal FSharpSignatureHelpProvider documentationBuilder, sourceText, caretPosition, - adjustedColumnInSource, - document.FilePath) - | _ -> - let! paramInfoLocations = parseResults.FindParameterLocations(Position.fromZ caretLinePos.Line caretLineColumn) - return! - FSharpSignatureHelpProvider.ProvideMethodsAsyncAux( - caretLinePos, - caretLineColumn, - paramInfoLocations, - checkFileResults, - documentationBuilder, - sourceText, - caretPosition, - triggerTypedChar) + filePath) } interface IFSharpSignatureHelpProvider with @@ -569,65 +482,57 @@ type internal FSharpSignatureHelpProvider member _.GetItemsAsync(document, position, triggerInfo, cancellationToken) = asyncMaybe { - let defines = document.GetFSharpQuickDefines() + let! _, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) + let defines = projectInfoManager.GetCompilationDefinesForEditingDocument(document) + let! sourceText = document.GetTextAsync(cancellationToken) + let! textVersion = document.GetTextVersionAsync(cancellationToken) + let checker = checkerProvider.Checker let triggerTypedChar = if triggerInfo.TriggerCharacter.HasValue && triggerInfo.TriggerReason = FSharpSignatureHelpTriggerReason.TypeCharCommand then Some triggerInfo.TriggerCharacter.Value else None - let doWork () = - async { - let! signatureHelpDataOpt = - FSharpSignatureHelpProvider.ProvideSignatureHelp( - document, - defines, - documentationBuilder, - position, - triggerTypedChar, - possibleCurrentSignatureHelpSessionKind) - match signatureHelpDataOpt with - | None -> - possibleCurrentSignatureHelpSessionKind <- None - return None - | Some signatureHelpData -> - let items = - signatureHelpData.SignatureHelpItems - |> Array.map (fun item -> - let parameters = - item.Parameters - |> Array.map (fun paramInfo -> - FSharpSignatureHelpParameter( - paramInfo.ParameterName, - paramInfo.IsOptional, - documentationFactory = (fun _ -> paramInfo.Documentation :> seq<_>), - displayParts = paramInfo.DisplayParts)) + let! signatureHelpData = + FSharpSignatureHelpProvider.ProvideSignatureHelp( + document, + defines, + checker, + documentationBuilder, + sourceText, + position, + projectOptions, + document.FilePath, + textVersion.GetHashCode(), + triggerTypedChar) + let items = + signatureHelpData.SignatureHelpItems + |> Array.map (fun item -> + let parameters = + item.Parameters + |> Array.map (fun paramInfo -> + FSharpSignatureHelpParameter( + paramInfo.ParameterName, + paramInfo.IsOptional, + documentationFactory = (fun _ -> paramInfo.Documentation :> seq<_>), + displayParts = paramInfo.DisplayParts)) - FSharpSignatureHelpItem( - isVariadic=item.HasParamArrayArg, - documentationFactory=(fun _ -> item.Documentation :> seq<_>), - prefixParts=item.PrefixParts, - separatorParts=item.SeparatorParts, - suffixParts=item.SuffixParts, - parameters=parameters, - descriptionParts=item.MainDescription)) - - match signatureHelpData.CurrentSignatureHelpSessionKind with - | MethodCall -> - possibleCurrentSignatureHelpSessionKind <- Some MethodCall - | FunctionApplication -> - possibleCurrentSignatureHelpSessionKind <- Some FunctionApplication - - return - FSharpSignatureHelpItems( - items, - signatureHelpData.ApplicableSpan, - signatureHelpData.ArgumentIndex, - signatureHelpData.ArgumentCount, - Option.toObj signatureHelpData.ArgumentName) - |> Some - } - return! doWork () + FSharpSignatureHelpItem( + isVariadic=item.HasParamArrayArg, + documentationFactory=(fun _ -> item.Documentation :> seq<_>), + prefixParts=item.PrefixParts, + separatorParts=item.SeparatorParts, + suffixParts=item.SuffixParts, + parameters=parameters, + descriptionParts=item.MainDescription)) + + return + FSharpSignatureHelpItems( + items, + signatureHelpData.ApplicableSpan, + signatureHelpData.ArgumentIndex, + signatureHelpData.ArgumentCount, + Option.toObj signatureHelpData.ArgumentName) } |> Async.map Option.toObj |> RoslynHelpers.StartAsyncAsTask cancellationToken diff --git a/vsintegration/src/FSharp.Editor/Debugging/BreakpointResolutionService.fs b/vsintegration/src/FSharp.Editor/Debugging/BreakpointResolutionService.fs index f0fe54af81d..17e2724d6ee 100644 --- a/vsintegration/src/FSharp.Editor/Debugging/BreakpointResolutionService.fs +++ b/vsintegration/src/FSharp.Editor/Debugging/BreakpointResolutionService.fs @@ -10,25 +10,25 @@ open System.Threading.Tasks open System.Linq open Microsoft.CodeAnalysis +open Microsoft.CodeAnalysis.Editor.Implementation.Debugging +open Microsoft.CodeAnalysis.Host.Mef open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor.Implementation.Debugging -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Text -open FSharp.Compiler.Text.Position +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Range [)>] type internal FSharpBreakpointResolutionService [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = - static member GetBreakpointLocation(document: Document, textSpan: TextSpan) = + static let userOpName = "BreakpointResolution" + static member GetBreakpointLocation(checker: FSharpChecker, sourceText: SourceText, fileName: string, textSpan: TextSpan, parsingOptions: FSharpParsingOptions) = async { - let! ct = Async.CancellationToken - - let! sourceText = document.GetTextAsync(ct) |> Async.AwaitTask - let textLinePos = sourceText.Lines.GetLinePosition(textSpan.Start) let textInLine = sourceText.GetSubText(sourceText.Lines.[textLinePos.Line].Span).ToString() @@ -37,17 +37,16 @@ type internal FSharpBreakpointResolutionService else let textLineColumn = textLinePos.Character let fcsTextLineNumber = Line.fromZ textLinePos.Line // Roslyn line numbers are zero-based, FSharp.Compiler.Service line numbers are 1-based - let! parseResults = document.GetFSharpParseResultsAsync(nameof(FSharpBreakpointResolutionService)) |> liftAsync - match parseResults with - | Some parseResults -> return parseResults.ValidateBreakpointLocation(mkPos fcsTextLineNumber textLineColumn) - | _ -> return None + let! parseResults = checker.ParseFile(fileName, sourceText.ToFSharpSourceText(), parsingOptions, userOpName = userOpName) + return parseResults.ValidateBreakpointLocation(mkPos fcsTextLineNumber textLineColumn) } interface IFSharpBreakpointResolutionService with member this.ResolveBreakpointAsync(document: Document, textSpan: TextSpan, cancellationToken: CancellationToken): Task = asyncMaybe { - let! range = FSharpBreakpointResolutionService.GetBreakpointLocation(document, textSpan) + let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) let! sourceText = document.GetTextAsync(cancellationToken) + let! range = FSharpBreakpointResolutionService.GetBreakpointLocation(checkerProvider.Checker, sourceText, document.Name, textSpan, parsingOptions) let! span = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, range) return FSharpBreakpointResolutionResult.CreateSpanResult(document, span) } diff --git a/vsintegration/src/FSharp.Editor/Debugging/LanguageDebugInfoService.fs b/vsintegration/src/FSharp.Editor/Debugging/LanguageDebugInfoService.fs index d2b30fc01bb..cf37cf08aa6 100644 --- a/vsintegration/src/FSharp.Editor/Debugging/LanguageDebugInfoService.fs +++ b/vsintegration/src/FSharp.Editor/Debugging/LanguageDebugInfoService.fs @@ -10,12 +10,15 @@ open System.Threading.Tasks open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Classification -open FSharp.Compiler.EditorServices +open Microsoft.CodeAnalysis.Editor.Implementation.Debugging +open Microsoft.CodeAnalysis.Host.Mef open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor.Implementation.Debugging +open FSharp.Compiler + [)>] -type internal FSharpLanguageDebugInfoService []() = +type internal FSharpLanguageDebugInfoService [](projectInfoManager: FSharpProjectOptionsManager) = static member GetDataTipInformation(sourceText: SourceText, position: int, tokens: List): TextSpan option = let tokenIndex = tokens |> Seq.tryFindIndex(fun t -> t.TextSpan.Contains(position)) @@ -49,7 +52,7 @@ type internal FSharpLanguageDebugInfoService []() = member this.GetDataTipInfoAsync(document: Document, position: int, cancellationToken: CancellationToken): Task = async { - let defines = document.GetFSharpQuickDefines() + let defines = projectInfoManager.GetCompilationDefinesForEditingDocument(document) let! cancellationToken = Async.CancellationToken let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask let textSpan = TextSpan.FromBounds(0, sourceText.Length) diff --git a/vsintegration/src/FSharp.Editor/Diagnostics/DocumentDiagnosticAnalyzer.fs b/vsintegration/src/FSharp.Editor/Diagnostics/DocumentDiagnosticAnalyzer.fs index 4f8e55f23fd..43e6efec1fb 100644 --- a/vsintegration/src/FSharp.Editor/Diagnostics/DocumentDiagnosticAnalyzer.fs +++ b/vsintegration/src/FSharp.Editor/Diagnostics/DocumentDiagnosticAnalyzer.fs @@ -13,8 +13,7 @@ open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Diagnostics -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices [] type internal DiagnosticsType = @@ -25,24 +24,28 @@ type internal DiagnosticsType = type internal FSharpDocumentDiagnosticAnalyzer [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = + static let userOpName = "DocumentDiagnosticAnalyzer" + static let errorInfoEqualityComparer = - { new IEqualityComparer with - member _.Equals (x, y) = + { new IEqualityComparer with + member __.Equals (x, y) = x.FileName = y.FileName && - x.StartLine = y.StartLine && - x.EndLine = y.EndLine && + x.StartLineAlternate = y.StartLineAlternate && + x.EndLineAlternate = y.EndLineAlternate && x.StartColumn = y.StartColumn && x.EndColumn = y.EndColumn && x.Severity = y.Severity && x.Message = y.Message && x.Subcategory = y.Subcategory && x.ErrorNumber = y.ErrorNumber - member _.GetHashCode x = + member __.GetHashCode x = let mutable hash = 17 - hash <- hash * 23 + x.StartLine.GetHashCode() - hash <- hash * 23 + x.EndLine.GetHashCode() + hash <- hash * 23 + x.StartLineAlternate.GetHashCode() + hash <- hash * 23 + x.EndLineAlternate.GetHashCode() hash <- hash * 23 + x.StartColumn.GetHashCode() hash <- hash * 23 + x.EndColumn.GetHashCode() hash <- hash * 23 + x.Severity.GetHashCode() @@ -52,37 +55,35 @@ type internal FSharpDocumentDiagnosticAnalyzer hash } - static member GetDiagnostics(document: Document, diagnosticType: DiagnosticsType) = + static member GetDiagnostics(checker: FSharpChecker, filePath: string, sourceText: SourceText, textVersionHash: int, parsingOptions: FSharpParsingOptions, options: FSharpProjectOptions, diagnosticType: DiagnosticsType) = async { - let! ct = Async.CancellationToken - - let! parseResults = document.GetFSharpParseResultsAsync("GetDiagnostics") - - let! sourceText = document.GetTextAsync(ct) |> Async.AwaitTask - let filePath = document.FilePath - + let fsSourceText = sourceText.ToFSharpSourceText() + let! parseResults = checker.ParseFile(filePath, fsSourceText, parsingOptions, userOpName=userOpName) let! errors = async { match diagnosticType with | DiagnosticsType.Semantic -> - let! _, checkResults = document.GetFSharpParseAndCheckResultsAsync("GetDiagnostics") - // In order to eleminate duplicates, we should not return parse errors here because they are returned by `AnalyzeSyntaxAsync` method. - let allErrors = HashSet(checkResults.Diagnostics, errorInfoEqualityComparer) - allErrors.ExceptWith(parseResults.Diagnostics) - return Seq.toArray allErrors + let! checkResultsAnswer = checker.CheckFileInProject(parseResults, filePath, textVersionHash, fsSourceText, options, userOpName=userOpName) + match checkResultsAnswer with + | FSharpCheckFileAnswer.Aborted -> return [||] + | FSharpCheckFileAnswer.Succeeded results -> + // In order to eleminate duplicates, we should not return parse errors here because they are returned by `AnalyzeSyntaxAsync` method. + let allErrors = HashSet(results.Errors, errorInfoEqualityComparer) + allErrors.ExceptWith(parseResults.Errors) + return Seq.toArray allErrors | DiagnosticsType.Syntax -> - return parseResults.Diagnostics + return parseResults.Errors } let results = HashSet(errors, errorInfoEqualityComparer) |> Seq.choose(fun error -> - if error.StartLine = 0 || error.EndLine = 0 then + if error.StartLineAlternate = 0 || error.EndLineAlternate = 0 then // F# error line numbers are one-based. Compiler returns 0 for global errors (reported by ProjectDiagnosticAnalyzer) None else // Roslyn line numbers are zero-based - let linePositionSpan = LinePositionSpan(LinePosition(error.StartLine - 1, error.StartColumn), LinePosition(error.EndLine - 1, error.EndColumn)) + let linePositionSpan = LinePositionSpan(LinePosition(error.StartLineAlternate - 1, error.StartColumn), LinePosition(error.EndLineAlternate - 1, error.EndColumn)) let textSpan = sourceText.Lines.GetTextSpan(linePositionSpan) // F# compiler report errors at end of file if parsing fails. It should be corrected to match Roslyn boundaries @@ -105,25 +106,28 @@ type internal FSharpDocumentDiagnosticAnalyzer interface IFSharpDocumentDiagnosticAnalyzer with member this.AnalyzeSyntaxAsync(document: Document, cancellationToken: CancellationToken): Task> = - if document.Project.IsFSharpMetadata then Task.FromResult(ImmutableArray.Empty) - else - asyncMaybe { + let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) + let! sourceText = document.GetTextAsync(cancellationToken) + let! textVersion = document.GetTextVersionAsync(cancellationToken) return! - FSharpDocumentDiagnosticAnalyzer.GetDiagnostics(document, DiagnosticsType.Syntax) + FSharpDocumentDiagnosticAnalyzer.GetDiagnostics(checkerProvider.Checker, document.FilePath, sourceText, textVersion.GetHashCode(), parsingOptions, projectOptions, DiagnosticsType.Syntax) |> liftAsync } |> Async.map (Option.defaultValue ImmutableArray.Empty) |> RoslynHelpers.StartAsyncAsTask cancellationToken member this.AnalyzeSemanticsAsync(document: Document, cancellationToken: CancellationToken): Task> = - if document.Project.IsFSharpMiscellaneousOrMetadata && not document.IsFSharpScript then Task.FromResult(ImmutableArray.Empty) - else - asyncMaybe { - return! - FSharpDocumentDiagnosticAnalyzer.GetDiagnostics(document, DiagnosticsType.Semantic) - |> liftAsync + let! parsingOptions, _, projectOptions = projectInfoManager.TryGetOptionsForDocumentOrProject(document, cancellationToken, userOpName) + let! sourceText = document.GetTextAsync(cancellationToken) + let! textVersion = document.GetTextVersionAsync(cancellationToken) + if document.Project.Name <> FSharpConstants.FSharpMiscellaneousFilesName || isScriptFile document.FilePath then + return! + FSharpDocumentDiagnosticAnalyzer.GetDiagnostics(checkerProvider.Checker, document.FilePath, sourceText, textVersion.GetHashCode(), parsingOptions, projectOptions, DiagnosticsType.Semantic) + |> liftAsync + else + return ImmutableArray.Empty } |> Async.map (Option.defaultValue ImmutableArray.Empty) |> RoslynHelpers.StartAsyncAsTask cancellationToken diff --git a/vsintegration/src/FSharp.Editor/Diagnostics/SimplifyNameDiagnosticAnalyzer.fs b/vsintegration/src/FSharp.Editor/Diagnostics/SimplifyNameDiagnosticAnalyzer.fs index 0c853a404cf..50ac17d7bc4 100644 --- a/vsintegration/src/FSharp.Editor/Diagnostics/SimplifyNameDiagnosticAnalyzer.fs +++ b/vsintegration/src/FSharp.Editor/Diagnostics/SimplifyNameDiagnosticAnalyzer.fs @@ -9,10 +9,10 @@ open System.Diagnostics open System.Threading open Microsoft.CodeAnalysis +open FSharp.Compiler.Range open System.Runtime.Caching open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Diagnostics -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Text +open FSharp.Compiler.SourceCodeServices type private PerDocumentSavedData = { Hash: int; Diagnostics: ImmutableArray } @@ -20,6 +20,8 @@ type private PerDocumentSavedData = { Hash: int; Diagnostics: ImmutableArray] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = static let userOpName = "SimplifyNameDiagnosticAnalyzer" @@ -32,12 +34,11 @@ type internal SimplifyNameDiagnosticAnalyzer interface IFSharpSimplifyNameDiagnosticAnalyzer with member _.AnalyzeSemanticsAsync(descriptor, document: Document, cancellationToken: CancellationToken) = - if document.Project.IsFSharpMiscellaneousOrMetadata && not document.IsFSharpScript then Tasks.Task.FromResult(ImmutableArray.Empty) - else - asyncMaybe { - do! Option.guard document.Project.IsFSharpCodeFixesSimplifyNameEnabled + do! Option.guard document.FSharpOptions.CodeFixes.SimplifyName do Trace.TraceInformation("{0:n3} (start) SimplifyName", DateTime.Now.TimeOfDay.TotalSeconds) + do! Async.Sleep DefaultTuning.SimplifyNameInitialDelay |> liftAsync + let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) let! textVersion = document.GetTextVersionAsync(cancellationToken) let textVersionHash = textVersion.GetHashCode() let! _ = guard.WaitAsync(cancellationToken) |> Async.AwaitTask |> liftAsync @@ -47,7 +48,8 @@ type internal SimplifyNameDiagnosticAnalyzer | :? PerDocumentSavedData as data when data.Hash = textVersionHash -> return data.Diagnostics | _ -> let! sourceText = document.GetTextAsync() - let! _, checkResults = document.GetFSharpParseAndCheckResultsAsync(nameof(SimplifyNameDiagnosticAnalyzer)) |> liftAsync + let checker = checkerProvider.Checker + let! _, _, checkResults = checker.ParseAndCheckDocument(document, projectOptions, sourceText = sourceText, userOpName=userOpName) let! result = SimplifyNames.getSimplifiableNames(checkResults, fun lineNumber -> sourceText.Lines.[Line.toZ lineNumber].ToString()) |> liftAsync let mutable diag = ResizeArray() for r in result do diff --git a/vsintegration/src/FSharp.Editor/Diagnostics/UnusedDeclarationsAnalyzer.fs b/vsintegration/src/FSharp.Editor/Diagnostics/UnusedDeclarationsAnalyzer.fs index c94b193e6aa..ce979c4e0e1 100644 --- a/vsintegration/src/FSharp.Editor/Diagnostics/UnusedDeclarationsAnalyzer.fs +++ b/vsintegration/src/FSharp.Editor/Diagnostics/UnusedDeclarationsAnalyzer.fs @@ -8,32 +8,37 @@ open System.Collections.Immutable open System.Diagnostics open Microsoft.CodeAnalysis -open FSharp.Compiler.EditorServices +open FSharp.Compiler.SourceCodeServices open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Diagnostics [)>] type internal UnusedDeclarationsAnalyzer [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = + + static let userOpName = "UnusedDeclarationsAnalyzer" interface IFSharpUnusedDeclarationsDiagnosticAnalyzer with member _.AnalyzeSemanticsAsync(descriptor, document, cancellationToken) = - if document.Project.IsFSharpMiscellaneousOrMetadata && not document.IsFSharpScript then Threading.Tasks.Task.FromResult(ImmutableArray.Empty) - else - asyncMaybe { - do! Option.guard document.Project.IsFSharpCodeFixesUnusedDeclarationsEnabled + do! Option.guard document.FSharpOptions.CodeFixes.UnusedDeclarations do Trace.TraceInformation("{0:n3} (start) UnusedDeclarationsAnalyzer", DateTime.Now.TimeOfDay.TotalSeconds) - let! _, checkResults = document.GetFSharpParseAndCheckResultsAsync(nameof(UnusedDeclarationsAnalyzer)) |> liftAsync - let! unusedRanges = UnusedDeclarations.getUnusedDeclarations( checkResults, (isScriptFile document.FilePath)) |> liftAsync - let! sourceText = document.GetTextAsync() - return - unusedRanges - |> Seq.map (fun m -> Diagnostic.Create(descriptor, RoslynHelpers.RangeToLocation(m, sourceText, document.FilePath))) - |> Seq.toImmutableArray + do! Async.Sleep DefaultTuning.UnusedDeclarationsAnalyzerInitialDelay |> liftAsync // be less intrusive, give other work priority most of the time + match! projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) with + | (_parsingOptions, projectOptions) -> + let! sourceText = document.GetTextAsync() + let checker = checkerProvider.Checker + let! _, _, checkResults = checker.ParseAndCheckDocument(document, projectOptions, sourceText = sourceText, userOpName = userOpName) + let! unusedRanges = UnusedDeclarations.getUnusedDeclarations( checkResults, (isScriptFile document.FilePath)) |> liftAsync + return + unusedRanges + |> Seq.map (fun m -> Diagnostic.Create(descriptor, RoslynHelpers.RangeToLocation(m, sourceText, document.FilePath))) + |> Seq.toImmutableArray } |> Async.map (Option.defaultValue ImmutableArray.Empty) |> RoslynHelpers.StartAsyncAsTask cancellationToken diff --git a/vsintegration/src/FSharp.Editor/Diagnostics/UnusedOpensDiagnosticAnalyzer.fs b/vsintegration/src/FSharp.Editor/Diagnostics/UnusedOpensDiagnosticAnalyzer.fs index 9c75bab971e..f7ef3160b88 100644 --- a/vsintegration/src/FSharp.Editor/Diagnostics/UnusedOpensDiagnosticAnalyzer.fs +++ b/vsintegration/src/FSharp.Editor/Diagnostics/UnusedOpensDiagnosticAnalyzer.fs @@ -10,9 +10,8 @@ open System.Threading open Microsoft.CodeAnalysis -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Text +open FSharp.Compiler.Range +open FSharp.Compiler.SourceCodeServices open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Diagnostics @@ -20,27 +19,31 @@ open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Diagnostics type internal UnusedOpensDiagnosticAnalyzer [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = - static member GetUnusedOpenRanges(document: Document) : Async> = + static let userOpName = "UnusedOpensAnalyzer" + + static member GetUnusedOpenRanges(document: Document, options, checker: FSharpChecker) : Async> = asyncMaybe { - do! Option.guard document.Project.IsFSharpCodeFixesUnusedOpensEnabled + do! Option.guard document.FSharpOptions.CodeFixes.UnusedOpens let! sourceText = document.GetTextAsync() - let! _, checkResults = document.GetFSharpParseAndCheckResultsAsync(nameof(UnusedOpensDiagnosticAnalyzer)) |> liftAsync + let! _, _, checkResults = checker.ParseAndCheckDocument(document, options, sourceText = sourceText, userOpName = userOpName) let! unusedOpens = UnusedOpens.getUnusedOpens(checkResults, fun lineNumber -> sourceText.Lines.[Line.toZ lineNumber].ToString()) |> liftAsync return unusedOpens } interface IFSharpUnusedOpensDiagnosticAnalyzer with - member _.AnalyzeSemanticsAsync(descriptor, document: Document, cancellationToken: CancellationToken) = - if document.Project.IsFSharpMiscellaneousOrMetadata && not document.IsFSharpScript then Tasks.Task.FromResult(ImmutableArray.Empty) - else - + member this.AnalyzeSemanticsAsync(descriptor, document: Document, cancellationToken: CancellationToken) = asyncMaybe { do Trace.TraceInformation("{0:n3} (start) UnusedOpensAnalyzer", DateTime.Now.TimeOfDay.TotalSeconds) + do! Async.Sleep DefaultTuning.UnusedOpensAnalyzerInitialDelay |> liftAsync // be less intrusive, give other work priority most of the time + let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) let! sourceText = document.GetTextAsync() - let! unusedOpens = UnusedOpensDiagnosticAnalyzer.GetUnusedOpenRanges(document) + let checker = checkerProvider.Checker + let! unusedOpens = UnusedOpensDiagnosticAnalyzer.GetUnusedOpenRanges(document, projectOptions, checker) return unusedOpens diff --git a/vsintegration/src/FSharp.Editor/DocComments/XMLDocumentation.fs b/vsintegration/src/FSharp.Editor/DocComments/XMLDocumentation.fs index 3eddf9a3ec8..754fb99265a 100644 --- a/vsintegration/src/FSharp.Editor/DocComments/XMLDocumentation.fs +++ b/vsintegration/src/FSharp.Editor/DocComments/XMLDocumentation.fs @@ -3,17 +3,13 @@ namespace Microsoft.VisualStudio.FSharp.Editor open System -open System.Collections.Immutable open System.Runtime.CompilerServices open System.Text.RegularExpressions open Microsoft.VisualStudio.Shell open Microsoft.VisualStudio.Shell.Interop -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Symbols -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Text.TaggedText +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Layout +open FSharp.Compiler.Layout.TaggedTextOps open System.Collections.Generic type internal ITaggedTextCollector = @@ -36,7 +32,7 @@ type internal TextSanitizingCollector(collector, ?lineLimit: int) = count <- count + 1 | _ -> isEmpty <- false - endsWithLineBreak <- text.Tag = TextTag.LineBreak + endsWithLineBreak <- text.Tag = LayoutTag.LineBreak if endsWithLineBreak then count <- count + 1 collector text @@ -61,14 +57,14 @@ type internal TextSanitizingCollector(collector, ?lineLimit: int) = addTaggedTextEntry (tagText paragraph) if i < paragraphs.Length - 1 then // insert two line breaks to separate paragraphs - addTaggedTextEntry TaggedText.lineBreak - addTaggedTextEntry TaggedText.lineBreak) + addTaggedTextEntry Literals.lineBreak + addTaggedTextEntry Literals.lineBreak) interface ITaggedTextCollector with member this.Add taggedText = // TODO: bail out early if line limit is already hit match taggedText.Tag with - | TextTag.Text -> reportTextLines taggedText.Text + | LayoutTag.Text -> reportTextLines taggedText.Text | _ -> addTaggedTextEntry taggedText member this.IsEmpty = isEmpty @@ -105,7 +101,7 @@ module internal XmlDocumentation = else xml let AppendHardLine(collector: ITaggedTextCollector) = - collector.Add TaggedText.lineBreak + collector.Add Literals.lineBreak let EnsureHardLine(collector: ITaggedTextCollector) = if not collector.EndsWithLineBreak then AppendHardLine collector @@ -113,7 +109,7 @@ module internal XmlDocumentation = let AppendOnNewLine (collector: ITaggedTextCollector) (line:string) = if line.Length > 0 then EnsureHardLine collector - collector.Add(TaggedText.tagText line) + collector.Add(TaggedTextOps.tagText line) open System.Xml open System.Xml.Linq @@ -153,7 +149,7 @@ module internal XmlDocumentation = let parts = typeName.Split([|'.'|]) for i = 0 to parts.Length - 2 do collector.Add(tagNamespace parts.[i]) - collector.Add(TaggedText.dot) + collector.Add(Literals.dot) collector.Add(tagClass parts.[parts.Length - 1]) type XmlDocReader private (doc: XElement) = @@ -168,7 +164,7 @@ module internal XmlDocumentation = static member TryCreate (xml: string) = try Some (XmlDocReader(XElement.Parse(ProcessXml xml))) with _ -> None - member _.CollectSummary(collector: ITaggedTextCollector) = + member __.CollectSummary(collector: ITaggedTextCollector) = match Seq.tryHead (doc.Descendants(XName.op_Implicit "summary")) with | None -> () | Some el -> @@ -189,8 +185,8 @@ module internal XmlDocumentation = | name -> EnsureHardLine collector collector.Add(tagParameter name.Value) - collector.Add(TaggedText.colon) - collector.Add(TaggedText.space) + collector.Add(Literals.colon) + collector.Add(Literals.space) WriteNodes collector (p.Nodes()) member this.CollectExceptions(collector: ITaggedTextCollector) = @@ -207,9 +203,9 @@ module internal XmlDocumentation = collector.Add(tagSpace " ") WriteTypeName collector exnType.Value if not (Seq.isEmpty (p.Nodes())) then - collector.Add TaggedText.space - collector.Add TaggedText.minus - collector.Add TaggedText.space + collector.Add Literals.space + collector.Add Literals.minus + collector.Add Literals.space WriteNodes collector (p.Nodes()) type VsThreadToken() = class end @@ -248,7 +244,7 @@ module internal XmlDocumentation = interface IDocumentationBuilder with /// Append the given processed XML formatted into the string builder - override _.AppendDocumentationFromProcessedXML(xmlCollector, exnCollector, processedXml, showExceptions, showParameters, paramName) = + override __.AppendDocumentationFromProcessedXML(xmlCollector, exnCollector, processedXml, showExceptions, showParameters, paramName) = match XmlDocReader.TryCreate processedXml with | Some xmlDocReader -> match paramName with @@ -290,11 +286,10 @@ module internal XmlDocumentation = let AppendXmlComment(documentationProvider:IDocumentationBuilder, xmlCollector: ITaggedTextCollector, exnCollector: ITaggedTextCollector, xml, showExceptions, showParameters, paramName) = match xml with | FSharpXmlDoc.None -> () - | FSharpXmlDoc.FromXmlFile(filename,signature) -> + | FSharpXmlDoc.XmlDocFileSignature(filename,signature) -> documentationProvider.AppendDocumentation(xmlCollector, exnCollector, filename, signature, showExceptions, showParameters, paramName) - | FSharpXmlDoc.FromXmlText(xmlDoc) -> - let elaboratedXml = xmlDoc.GetElaboratedXmlLines() - let processedXml = ProcessXml("\n\n" + String.concat "\n" elaboratedXml) + | FSharpXmlDoc.Text(_rawText, processedXml) -> + let processedXml = ProcessXml("\n\n" + String.concat "\n" processedXml) documentationProvider.AppendDocumentationFromProcessedXML(xmlCollector, exnCollector, processedXml, showExceptions, showParameters, paramName) let private AddSeparator (collector: ITaggedTextCollector) = @@ -305,7 +300,7 @@ module internal XmlDocumentation = /// Build a data tip text string with xml comments injected. let BuildTipText(documentationProvider:IDocumentationBuilder, - dataTipText: ToolTipElement list, + dataTipText: FSharpStructuredToolTipElement list, textCollector, xmlCollector, typeParameterMapCollector, usageCollector, exnCollector, showText, showExceptions, showParameters) = let textCollector: ITaggedTextCollector = TextSanitizingCollector(textCollector, lineLimit = 45) :> _ @@ -319,32 +314,32 @@ module internal XmlDocumentation = AddSeparator textCollector AddSeparator xmlCollector - let ProcessGenericParameters (tps: TaggedText[] list) = + let ProcessGenericParameters (tps: Layout list) = if not tps.IsEmpty then AppendHardLine typeParameterMapCollector AppendOnNewLine typeParameterMapCollector (SR.GenericParametersHeader()) for tp in tps do AppendHardLine typeParameterMapCollector typeParameterMapCollector.Add(tagSpace " ") - tp |> Array.iter typeParameterMapCollector.Add + renderL (taggedTextListR typeParameterMapCollector.Add) tp |> ignore - let Process add (dataTipElement: ToolTipElement) = + let Process add (dataTipElement: FSharpStructuredToolTipElement) = match dataTipElement with - | ToolTipElement.None -> + | FSharpStructuredToolTipElement.None -> false - | ToolTipElement.Group (overloads) -> + | FSharpStructuredToolTipElement.Group (overloads) -> let overloads = Array.ofList overloads let len = overloads.Length if len >= 1 then addSeparatorIfNecessary add if showText then - let AppendOverload (item: ToolTipElementData) = - if TaggedText.toString item.MainDescription <> "" then + let AppendOverload (item: FSharpToolTipElementData<_>) = + if not(isEmptyL item.MainDescription) then if not textCollector.IsEmpty then AppendHardLine textCollector - item.MainDescription |> Seq.iter textCollector.Add + renderL (taggedTextListR textCollector.Add) item.MainDescription |> ignore AppendOverload(overloads.[0]) if len >= 2 then AppendOverload(overloads.[1]) @@ -358,9 +353,9 @@ module internal XmlDocumentation = let item0 = overloads.[0] item0.Remarks |> Option.iter (fun r -> - if TaggedText.toString r <> "" then + if not(isEmptyL r) then AppendHardLine usageCollector - r |> Seq.iter usageCollector.Add) + renderL (taggedTextListR usageCollector.Add) r |> ignore) AppendXmlComment(documentationProvider, xmlCollector, exnCollector, item0.XmlDoc, showExceptions, showParameters, item0.ParamName) @@ -371,16 +366,16 @@ module internal XmlDocumentation = else false - | ToolTipElement.CompositionError(errText) -> + | FSharpStructuredToolTipElement.CompositionError(errText) -> textCollector.Add(tagText errText) true List.fold Process false dataTipText |> ignore - let BuildDataTipText(documentationProvider, textCollector, xmlCollector, typeParameterMapCollector, usageCollector, exnCollector, ToolTipText(dataTipText)) = + let BuildDataTipText(documentationProvider, textCollector, xmlCollector, typeParameterMapCollector, usageCollector, exnCollector, FSharpToolTipText(dataTipText)) = BuildTipText(documentationProvider, dataTipText, textCollector, xmlCollector, typeParameterMapCollector, usageCollector, exnCollector, true, true, false) - let BuildMethodOverloadTipText(documentationProvider, textCollector, xmlCollector, ToolTipText(dataTipText), showParams) = + let BuildMethodOverloadTipText(documentationProvider, textCollector, xmlCollector, FSharpToolTipText(dataTipText), showParams) = BuildTipText(documentationProvider, dataTipText, textCollector, xmlCollector, xmlCollector, ignore, ignore, false, false, showParams) let BuildMethodParamText(documentationProvider, xmlCollector, xml, paramName) = diff --git a/vsintegration/src/FSharp.Editor/DocumentHighlights/DocumentHighlightsService.fs b/vsintegration/src/FSharp.Editor/DocumentHighlights/DocumentHighlightsService.fs index 207c1dd1e5c..bcc0bd3629b 100644 --- a/vsintegration/src/FSharp.Editor/DocumentHighlights/DocumentHighlightsService.fs +++ b/vsintegration/src/FSharp.Editor/DocumentHighlights/DocumentHighlightsService.fs @@ -8,12 +8,13 @@ open System.Collections.Immutable open System.Threading.Tasks open Microsoft.CodeAnalysis +open Microsoft.CodeAnalysis.DocumentHighlighting +open Microsoft.CodeAnalysis.Host.Mef open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.ExternalAccess.FSharp.DocumentHighlighting -open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Text +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Range type internal FSharpHighlightSpan = { IsDefinition: bool @@ -21,7 +22,9 @@ type internal FSharpHighlightSpan = override this.ToString() = sprintf "%+A" this [)>] -type internal FSharpDocumentHighlightsService [] () = +type internal FSharpDocumentHighlightsService [] (checkerProvider: FSharpCheckerProvider, projectInfoManager: FSharpProjectOptionsManager) = + + static let userOpName = "DocumentHighlights" /// Fix invalid spans if they appear to have redundant suffix and prefix. static let fixInvalidSymbolSpans (sourceText: SourceText) (lastIdent: string) (spans: FSharpHighlightSpan []) = @@ -49,22 +52,19 @@ type internal FSharpDocumentHighlightsService [] () = |> Seq.distinctBy (fun span -> span.TextSpan.Start) |> Seq.toArray - static member GetDocumentHighlights(document: Document, position: int) : Async = + static member GetDocumentHighlights(checker: FSharpChecker, documentKey: DocumentId, sourceText: SourceText, filePath: string, position: int, + defines: string list, options: FSharpProjectOptions, textVersionHash: int, languageServicePerformanceOptions: LanguageServicePerformanceOptions) : Async = asyncMaybe { - let! symbol = document.TryFindFSharpLexerSymbolAsync(position, SymbolLookupKind.Greedy, false, false, nameof(FSharpDocumentHighlightsService.GetDocumentHighlights)) - - let! ct = Async.CancellationToken |> liftAsync - let! sourceText = document.GetTextAsync(ct) let textLine = sourceText.Lines.GetLineFromPosition(position) let textLinePos = sourceText.Lines.GetLinePosition(position) let fcsTextLineNumber = Line.fromZ textLinePos.Line - - let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpDocumentHighlightsService)) |> liftAsync + let! symbol = Tokenizer.getSymbolAtPosition(documentKey, sourceText, position, filePath, defines, SymbolLookupKind.Greedy, false, false) + let! _, _, checkFileResults = checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, options, languageServicePerformanceOptions, userOpName = userOpName) let! symbolUse = checkFileResults.GetSymbolUseAtLocation(fcsTextLineNumber, symbol.Ident.idRange.EndColumn, textLine.ToString(), symbol.FullIsland) let symbolUses = checkFileResults.GetUsesOfSymbolInFile(symbolUse.Symbol) return [| for symbolUse in symbolUses do - match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.Range) with + match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.RangeAlternate) with | None -> () | Some span -> yield { IsDefinition = symbolUse.IsFromDefinition @@ -73,9 +73,15 @@ type internal FSharpDocumentHighlightsService [] () = } interface IFSharpDocumentHighlightsService with - member _.GetDocumentHighlightsAsync(document, position, _documentsToSearch, cancellationToken) : Task> = + member __.GetDocumentHighlightsAsync(document, position, _documentsToSearch, cancellationToken) : Task> = asyncMaybe { - let! spans = FSharpDocumentHighlightsService.GetDocumentHighlights(document, position) + let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) + let! sourceText = document.GetTextAsync(cancellationToken) + let! textVersion = document.GetTextVersionAsync(cancellationToken) + let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions + let perfOptions = document.FSharpOptions.LanguageServicePerformance + let! spans = FSharpDocumentHighlightsService.GetDocumentHighlights(checkerProvider.Checker, document.Id, sourceText, document.FilePath, + position, defines, projectOptions, textVersion.GetHashCode(), perfOptions) let highlightSpans = spans |> Array.map (fun span -> diff --git a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj index da325f32a96..466b15a8256 100644 --- a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj +++ b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj @@ -7,6 +7,8 @@ $(NoWarn);75 $(NoWarn);44 true + true + $(SystemValueTupleVersion) $(OtherFlags) --warnon:1182 --subsystemversion:6.00 false @@ -26,12 +28,11 @@ - + - @@ -42,16 +43,14 @@ + - + - - - @@ -89,23 +88,15 @@ - - - - - - - - @@ -114,7 +105,6 @@ - @@ -134,7 +124,7 @@ - + @@ -180,8 +170,9 @@ + - + diff --git a/vsintegration/src/FSharp.Editor/FSharp.Editor.resx b/vsintegration/src/FSharp.Editor/FSharp.Editor.resx index bb52e1a6d80..87076943ea0 100644 --- a/vsintegration/src/FSharp.Editor/FSharp.Editor.resx +++ b/vsintegration/src/FSharp.Editor/FSharp.Editor.resx @@ -217,7 +217,7 @@ F# Properties - F# Disposable Values (top-level) + F# Dispostable Values (top-level) Make declaration 'mutable' @@ -253,7 +253,7 @@ Remove 'yield' - Remove 'yield!' + Remove yield!' Convert to Anonymous Record @@ -261,31 +261,10 @@ Use '<-' to mutate value - - Add missing 'fun' keyword - Use F# lambda syntax Make '{0}' recursive - - Use '<>' for inequality check - - - Use '.Value' to dereference expression - - - Add type annotation - - - Remove unused binding - - - Add missing instance member parameter - - - Use 'nameof' - - + \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/Formatting/BraceMatchingService.fs b/vsintegration/src/FSharp.Editor/Formatting/BraceMatchingService.fs index edd3920d7c0..8b6cacb5436 100644 --- a/vsintegration/src/FSharp.Editor/Formatting/BraceMatchingService.fs +++ b/vsintegration/src/FSharp.Editor/Formatting/BraceMatchingService.fs @@ -4,7 +4,8 @@ namespace Microsoft.VisualStudio.FSharp.Editor open System.ComponentModel.Composition open Microsoft.CodeAnalysis.Text -open FSharp.Compiler.CodeAnalysis +open Microsoft.CodeAnalysis.Editor +open FSharp.Compiler.SourceCodeServices open System.Runtime.InteropServices open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor @@ -12,7 +13,11 @@ open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor type internal FSharpBraceMatchingService [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = + + static let userOpName = "BraceMatching" static member GetBraceMatchingResult(checker: FSharpChecker, sourceText: SourceText, fileName, parsingOptions: FSharpParsingOptions, position: int, userOpName: string, [] forFormatting: bool) = async { @@ -32,9 +37,9 @@ type internal FSharpBraceMatchingService interface IFSharpBraceMatcher with member this.FindBracesAsync(document, position, cancellationToken) = asyncMaybe { - let! checker, _, parsingOptions, _ = document.GetFSharpCompilationOptionsAsync(nameof(FSharpBraceMatchingService)) |> liftAsync + let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) let! sourceText = document.GetTextAsync(cancellationToken) - let! (left, right) = FSharpBraceMatchingService.GetBraceMatchingResult(checker, sourceText, document.Name, parsingOptions, position, nameof(FSharpBraceMatchingService)) + let! (left, right) = FSharpBraceMatchingService.GetBraceMatchingResult(checkerProvider.Checker, sourceText, document.Name, parsingOptions, position, userOpName) let! leftSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, left) let! rightSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, right) return FSharpBraceMatchingResult(leftSpan, rightSpan) diff --git a/vsintegration/src/FSharp.Editor/Formatting/EditorFormattingService.fs b/vsintegration/src/FSharp.Editor/Formatting/EditorFormattingService.fs index b35d122d04b..0cb8af738f6 100644 --- a/vsintegration/src/FSharp.Editor/Formatting/EditorFormattingService.fs +++ b/vsintegration/src/FSharp.Editor/Formatting/EditorFormattingService.fs @@ -6,13 +6,13 @@ open System.Composition open System.Collections.Generic open Microsoft.CodeAnalysis +open Microsoft.CodeAnalysis.Editor open Microsoft.CodeAnalysis.Formatting +open Microsoft.CodeAnalysis.Host.Mef open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor -open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Tokenization +open FSharp.Compiler.SourceCodeServices open System.Threading open System.Windows.Forms @@ -20,6 +20,8 @@ open System.Windows.Forms type internal FSharpEditorFormattingService [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager, settings: EditorOptions ) = @@ -146,23 +148,23 @@ type internal FSharpEditorFormattingService return stripIndentation removeIndentation } - member _.GetFormattingChangesAsync (document: Document, position: int, cancellationToken: CancellationToken) = + member __.GetFormattingChangesAsync (document: Document, position: int, cancellationToken: CancellationToken) = async { let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask let! options = document.GetOptionsAsync(cancellationToken) |> Async.AwaitTask let indentStyle = options.GetOption(FormattingOptions.SmartIndent, FSharpConstants.FSharpLanguageName) - let parsingOptions = document.GetFSharpQuickParsingOptions() - let! textChange = FSharpEditorFormattingService.GetFormattingChanges(document.Id, sourceText, document.FilePath, document.GetFSharpChecker(), indentStyle, parsingOptions, position) + let parsingOptions = projectInfoManager.TryGetQuickParsingOptionsForEditingDocumentOrProject(document) + let! textChange = FSharpEditorFormattingService.GetFormattingChanges(document.Id, sourceText, document.FilePath, checkerProvider.Checker, indentStyle, parsingOptions, position) return textChange |> Option.toList |> toIList } - member _.OnPasteAsync (document: Document, span: TextSpan, currentClipboard: string, cancellationToken: CancellationToken) = + member __.OnPasteAsync (document: Document, span: TextSpan, currentClipboard: string, cancellationToken: CancellationToken) = async { let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask let! options = document.GetOptionsAsync(cancellationToken) |> Async.AwaitTask let tabSize = options.GetOption(FormattingOptions.TabSize, FSharpConstants.FSharpLanguageName) - let parsingOptions = document.GetFSharpQuickParsingOptions() + let parsingOptions = projectInfoManager.TryGetQuickParsingOptionsForEditingDocumentOrProject(document) let! textChanges = FSharpEditorFormattingService.GetPasteChanges(document.Id, sourceText, document.FilePath, settings.Formatting, tabSize, parsingOptions, currentClipboard, span) return textChanges |> Option.defaultValue Seq.empty |> toIList } @@ -173,7 +175,7 @@ type internal FSharpEditorFormattingService member val SupportsFormatOnPaste = true member val SupportsFormatOnReturn = true - override _.SupportsFormattingOnTypedCharacter (document, ch) = + override __.SupportsFormattingOnTypedCharacter (document, ch) = if FSharpIndentationService.IsSmartIndentEnabled document.Project.Solution.Workspace.Options then match ch with | ')' | ']' | '}' -> true @@ -181,7 +183,7 @@ type internal FSharpEditorFormattingService else false - override _.GetFormattingChangesAsync (_document, _span, cancellationToken) = + override __.GetFormattingChangesAsync (_document, _span, cancellationToken) = async { return ResizeArray() :> IList<_> } |> RoslynHelpers.StartAsyncAsTask cancellationToken diff --git a/vsintegration/src/FSharp.Editor/Formatting/IndentationService.fs b/vsintegration/src/FSharp.Editor/Formatting/IndentationService.fs index b540e06caf4..32b06175449 100644 --- a/vsintegration/src/FSharp.Editor/Formatting/IndentationService.fs +++ b/vsintegration/src/FSharp.Editor/Formatting/IndentationService.fs @@ -13,15 +13,12 @@ open Microsoft.CodeAnalysis.Host.Mef open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor -open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Tokenization +open FSharp.Compiler.SourceCodeServices [)>] type internal FSharpIndentationService [] - () = + (projectInfoManager: FSharpProjectOptionsManager) = static member IsSmartIndentEnabled (options: Microsoft.CodeAnalysis.Options.OptionSet) = options.GetOption(FormattingOptions.SmartIndent, FSharpConstants.FSharpLanguageName) = FormattingOptions.IndentStyle.Smart @@ -101,7 +98,7 @@ type internal FSharpIndentationService let! options = document.GetOptionsAsync(cancellationToken) |> Async.AwaitTask let tabSize = options.GetOption(FormattingOptions.TabSize, FSharpConstants.FSharpLanguageName) let indentStyle = options.GetOption(FormattingOptions.SmartIndent, FSharpConstants.FSharpLanguageName) - let parsingOptions = document.GetFSharpQuickParsingOptions() + let parsingOptions = projectInfoManager.TryGetQuickParsingOptionsForEditingDocumentOrProject(document) let indent = FSharpIndentationService.GetDesiredIndentation(document.Id, sourceText, document.FilePath, lineNumber, tabSize, indentStyle, parsingOptions) return match indent with diff --git a/vsintegration/src/FSharp.Editor/InlineRename/InlineRenameService.fs b/vsintegration/src/FSharp.Editor/InlineRename/InlineRenameService.fs index 51a9efe9951..0fd8e3171f7 100644 --- a/vsintegration/src/FSharp.Editor/InlineRename/InlineRenameService.fs +++ b/vsintegration/src/FSharp.Editor/InlineRename/InlineRenameService.fs @@ -9,40 +9,40 @@ open System.Threading open System.Threading.Tasks open Microsoft.CodeAnalysis +open Microsoft.CodeAnalysis.Editor +open Microsoft.CodeAnalysis.Host.Mef open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.ExternalAccess.FSharp open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Symbols -open FSharp.Compiler.Text -open FSharp.Compiler.Tokenization +open FSharp.Compiler.Range +open FSharp.Compiler.SourceCodeServices open Symbols type internal FailureInlineRenameInfo private () = interface IFSharpInlineRenameInfo with - member _.CanRename = false - member _.LocalizedErrorMessage = FSharpEditorFeaturesResources.You_cannot_rename_this_element - member _.TriggerSpan = Unchecked.defaultof<_> - member _.HasOverloads = false - member _.ForceRenameOverloads = true - member _.DisplayName = "" - member _.FullDisplayName = "" - member _.Glyph = Glyph.MethodPublic - member _.GetFinalSymbolName _ = "" - member _.GetReferenceEditSpan(_, _) = Unchecked.defaultof<_> - member _.GetConflictEditSpan(_, _, _) = Nullable() - member _.FindRenameLocationsAsync(_, _) = Task.FromResult null - member _.TryOnBeforeGlobalSymbolRenamed(_, _, _) = false - member _.TryOnAfterGlobalSymbolRenamed(_, _, _) = false + member __.CanRename = false + member __.LocalizedErrorMessage = FSharpEditorFeaturesResources.You_cannot_rename_this_element + member __.TriggerSpan = Unchecked.defaultof<_> + member __.HasOverloads = false + member __.ForceRenameOverloads = true + member __.DisplayName = "" + member __.FullDisplayName = "" + member __.Glyph = Glyph.MethodPublic + member __.GetFinalSymbolName _ = "" + member __.GetReferenceEditSpan(_, _) = Unchecked.defaultof<_> + member __.GetConflictEditSpan(_, _, _) = Nullable() + member __.FindRenameLocationsAsync(_, _) = Task.FromResult null + member __.TryOnBeforeGlobalSymbolRenamed(_, _, _) = false + member __.TryOnAfterGlobalSymbolRenamed(_, _, _) = false static member Instance = FailureInlineRenameInfo() :> IFSharpInlineRenameInfo type internal InlineRenameLocationSet(locations: FSharpInlineRenameLocation [], originalSolution: Solution, symbolKind: LexerSymbolKind, symbol: FSharpSymbol) = interface IFSharpInlineRenameLocationSet with - member _.Locations = upcast locations.ToList() + member __.Locations = upcast locations.ToList() - member _.GetReplacementsAsync(replacementText, _optionSet, cancellationToken) : Task = + member __.GetReplacementsAsync(replacementText, _optionSet, cancellationToken) : Task = let rec applyChanges (solution: Solution) (locationsByDocument: (Document * FSharpInlineRenameLocation list) list) = async { match locationsByDocument with @@ -59,18 +59,20 @@ type internal InlineRenameLocationSet(locations: FSharpInlineRenameLocation [], match symbolKind with | LexerSymbolKind.GenericTypeParameter | LexerSymbolKind.StaticallyResolvedTypeParameter -> replacementText - | _ -> FSharpKeywords.NormalizeIdentifierBackticks replacementText + | _ -> Keywords.NormalizeIdentifierBackticks replacementText return { new IFSharpInlineRenameReplacementInfo with - member _.NewSolution = newSolution - member _.ReplacementTextValid = Tokenizer.isValidNameForSymbol(symbolKind, symbol, replacementText) - member _.DocumentIds = locations |> Seq.map (fun doc -> doc.Document.Id) |> Seq.distinct - member _.GetReplacements _ = Seq.empty } + member __.NewSolution = newSolution + member __.ReplacementTextValid = Tokenizer.isValidNameForSymbol(symbolKind, symbol, replacementText) + member __.DocumentIds = locations |> Seq.map (fun doc -> doc.Document.Id) |> Seq.distinct + member __.GetReplacements _ = Seq.empty } } |> RoslynHelpers.StartAsyncAsTask(cancellationToken) type internal InlineRenameInfo ( + checker: FSharpChecker, + projectInfoManager: FSharpProjectOptionsManager, document: Document, triggerSpan: TextSpan, lexerSymbol: LexerSymbol, @@ -79,38 +81,40 @@ type internal InlineRenameInfo checkFileResults: FSharpCheckFileResults ) = + static let userOpName = "InlineRename" + let getDocumentText (document: Document) cancellationToken = match document.TryGetText() with | true, text -> text | _ -> document.GetTextAsync(cancellationToken).Result - let symbolUses = - SymbolHelpers.getSymbolUsesInSolution(symbolUse.Symbol, declLoc, checkFileResults, document.Project.Solution) + let symbolUses = + SymbolHelpers.getSymbolUsesInSolution(symbolUse.Symbol, declLoc, checkFileResults, projectInfoManager, checker, document.Project.Solution, userOpName) |> Async.cache interface IFSharpInlineRenameInfo with - member _.CanRename = true - member _.LocalizedErrorMessage = null - member _.TriggerSpan = triggerSpan - member _.HasOverloads = false - member _.ForceRenameOverloads = false - member _.DisplayName = symbolUse.Symbol.DisplayName - member _.FullDisplayName = try symbolUse.Symbol.FullName with _ -> symbolUse.Symbol.DisplayName - member _.Glyph = Glyph.MethodPublic - member _.GetFinalSymbolName replacementText = replacementText - - member _.GetReferenceEditSpan(location, cancellationToken) = + member __.CanRename = true + member __.LocalizedErrorMessage = null + member __.TriggerSpan = triggerSpan + member __.HasOverloads = false + member __.ForceRenameOverloads = false + member __.DisplayName = symbolUse.Symbol.DisplayName + member __.FullDisplayName = try symbolUse.Symbol.FullName with _ -> symbolUse.Symbol.DisplayName + member __.Glyph = Glyph.MethodPublic + member __.GetFinalSymbolName replacementText = replacementText + + member __.GetReferenceEditSpan(location, cancellationToken) = let text = getDocumentText location.Document cancellationToken Tokenizer.fixupSpan(text, location.TextSpan) - member _.GetConflictEditSpan(location, replacementText, cancellationToken) = + member __.GetConflictEditSpan(location, replacementText, cancellationToken) = let text = getDocumentText location.Document cancellationToken let spanText = text.ToString(location.TextSpan) let position = spanText.LastIndexOf(replacementText, StringComparison.Ordinal) if position < 0 then Nullable() else Nullable(TextSpan(location.TextSpan.Start + position, replacementText.Length)) - member _.FindRenameLocationsAsync(_optionSet, cancellationToken) = + member __.FindRenameLocationsAsync(_optionSet, cancellationToken) = async { let! symbolUsesByDocumentId = symbolUses let! locations = @@ -133,38 +137,42 @@ type internal InlineRenameInfo return InlineRenameLocationSet(locations, document.Project.Solution, lexerSymbol.Kind, symbolUse.Symbol) :> IFSharpInlineRenameLocationSet } |> RoslynHelpers.StartAsyncAsTask(cancellationToken) - member _.TryOnBeforeGlobalSymbolRenamed(_workspace, _changedDocumentIDs, _replacementText) = true - member _.TryOnAfterGlobalSymbolRenamed(_workspace, _changedDocumentIDs, _replacementText) = true + member __.TryOnBeforeGlobalSymbolRenamed(_workspace, _changedDocumentIDs, _replacementText) = true + member __.TryOnAfterGlobalSymbolRenamed(_workspace, _changedDocumentIDs, _replacementText) = true [); Shared>] type internal InlineRenameService [] ( + projectInfoManager: FSharpProjectOptionsManager, + checkerProvider: FSharpCheckerProvider ) = - static member GetInlineRenameInfo(document: Document, position: int) : Async = + static let userOpName = "InlineRename" + static member GetInlineRenameInfo(checker: FSharpChecker, projectInfoManager: FSharpProjectOptionsManager, document: Document, sourceText: SourceText, position: int, + defines: string list, options: FSharpProjectOptions) : Async = asyncMaybe { - let! ct = Async.CancellationToken |> liftAsync - let! sourceText = document.GetTextAsync(ct) let textLine = sourceText.Lines.GetLineFromPosition(position) let textLinePos = sourceText.Lines.GetLinePosition(position) let fcsTextLineNumber = Line.fromZ textLinePos.Line - let! symbol = document.TryFindFSharpLexerSymbolAsync(position, SymbolLookupKind.Greedy, false, false, nameof(InlineRenameService)) - - let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(InlineRenameService)) |> liftAsync + let! symbol = Tokenizer.getSymbolAtPosition(document.Id, sourceText, position, document.FilePath, defines, SymbolLookupKind.Greedy, false, false) + let! _, _, checkFileResults = checker.ParseAndCheckDocument(document, options, userOpName = userOpName) let! symbolUse = checkFileResults.GetSymbolUseAtLocation(fcsTextLineNumber, symbol.Ident.idRange.EndColumn, textLine.Text.ToString(), symbol.FullIsland) let! declLoc = symbolUse.GetDeclarationLocation(document) - let! span = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.Range) + let! span = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.RangeAlternate) let triggerSpan = Tokenizer.fixupSpan(sourceText, span) - return InlineRenameInfo(document, triggerSpan, symbol, symbolUse, declLoc, checkFileResults) :> IFSharpInlineRenameInfo + return InlineRenameInfo(checker, projectInfoManager, document, triggerSpan, symbol, symbolUse, declLoc, checkFileResults) :> IFSharpInlineRenameInfo } interface IFSharpEditorInlineRenameService with - member _.GetRenameInfoAsync(document: Document, position: int, cancellationToken: CancellationToken) : Task = + member __.GetRenameInfoAsync(document: Document, position: int, cancellationToken: CancellationToken) : Task = asyncMaybe { - return! InlineRenameService.GetInlineRenameInfo(document, position) + let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) + let! sourceText = document.GetTextAsync(cancellationToken) + let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions + return! InlineRenameService.GetInlineRenameInfo(checkerProvider.Checker, projectInfoManager, document, sourceText, position, defines, projectOptions) } |> Async.map (Option.defaultValue FailureInlineRenameInfo.Instance) |> RoslynHelpers.StartAsyncAsTask(cancellationToken) diff --git a/vsintegration/src/FSharp.Editor/LanguageService/AssemblyContentProvider.fs b/vsintegration/src/FSharp.Editor/LanguageService/AssemblyContentProvider.fs index 871dd42287c..d6777df4720 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/AssemblyContentProvider.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/AssemblyContentProvider.fs @@ -5,15 +5,14 @@ namespace Microsoft.VisualStudio.FSharp.Editor open System open System.ComponentModel.Composition -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices +open FSharp.Compiler.SourceCodeServices [); Composition.Shared>] type internal AssemblyContentProvider () = let entityCache = EntityCache() member x.GetAllEntitiesInProjectAndReferencedAssemblies (fileCheckResults: FSharpCheckFileResults) = - [ yield! AssemblyContent.GetAssemblySignatureContent AssemblyContentType.Full fileCheckResults.PartialAssemblySignature + [ yield! AssemblyContentProvider.getAssemblySignatureContent AssemblyContentType.Full fileCheckResults.PartialAssemblySignature // FCS sometimes returns several FSharpAssembly for single referenced assembly. // For example, it returns two different ones for Swensen.Unquote; the first one // contains no useful entities, the second one does. Our cache prevents to process @@ -28,5 +27,5 @@ type internal AssemblyContentProvider () = // get Content.Entities from it. for fileName, signatures in assembliesByFileName do - let contentType = AssemblyContentType.Public // it's always Public for now since we don't support InternalsVisibleTo attribute yet - yield! AssemblyContent.GetAssemblyContent entityCache.Locking contentType fileName signatures ] + let contentType = Public // it's always Public for now since we don't support InternalsVisibleTo attribute yet + yield! AssemblyContentProvider.getAssemblyContent entityCache.Locking contentType fileName signatures ] diff --git a/vsintegration/src/FSharp.Editor/LanguageService/FSharpAnalysisSaveFileCommandHandler.fs b/vsintegration/src/FSharp.Editor/LanguageService/FSharpAnalysisSaveFileCommandHandler.fs deleted file mode 100644 index 05664377fd1..00000000000 --- a/vsintegration/src/FSharp.Editor/LanguageService/FSharpAnalysisSaveFileCommandHandler.fs +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.VisualStudio.FSharp.Editor - -open System -open System.ComponentModel.Composition -open Microsoft.CodeAnalysis -open Microsoft.CodeAnalysis.Text -open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Diagnostics -open Microsoft.VisualStudio.FSharp.Editor -open Microsoft.VisualStudio.FSharp.Editor.Logging -open Microsoft.VisualStudio.Text.Editor.Commanding.Commands -open Microsoft.VisualStudio.Commanding -open Microsoft.VisualStudio.Utilities - -// This causes re-analysis to happen when a F# document is saved. -// We do this because FCS relies on the file system and existing open documents -// need to be re-analyzed so the changes are propogated. -// We only re-analyze F# documents that are dependent on the document that was just saved. -// We ignore F# script documents here. -// REVIEW: This could be removed when Roslyn workspaces becomes the source of truth for FCS instead of the file system. -[] -[)>] -[] -[] -type internal FSharpAnalysisSaveFileCommandHandler - [] - (analyzerService: IFSharpDiagnosticAnalyzerService) = - - interface IChainedCommandHandler with - - member _.DisplayName = Constants.FSharpAnalysisSaveFileHandler - - member _.ExecuteCommand(args: SaveCommandArgs, nextCommandHandler: Action, _) = - let textContainer = args.SubjectBuffer.AsTextContainer() - match textContainer with - | null -> () - | _ -> - let mutable workspace = Unchecked.defaultof<_> - if Workspace.TryGetWorkspace(textContainer, &workspace) then - let solution = workspace.CurrentSolution - let documentId = workspace.GetDocumentIdInCurrentContext(textContainer) - match box documentId with - | null -> () - | _ -> - let document = solution.GetDocument(documentId) - async { - try - if document.Project.Language = LanguageNames.FSharp then - let openDocIds = workspace.GetOpenDocumentIds() - - let docIdsToReanalyze = - if document.IsFSharpScript then - openDocIds - |> Seq.filter (fun x -> - x <> document.Id && - ( - let doc = solution.GetDocument(x) - match doc with - | null -> false - | _ -> doc.IsFSharpScript - ) - ) - |> Array.ofSeq - else - let depProjIds = document.Project.GetDependentProjectIds().Add(document.Project.Id) - openDocIds - |> Seq.filter (fun x -> - depProjIds.Contains(x.ProjectId) && x <> document.Id && - ( - let doc = solution.GetDocument(x) - match box doc with - | null -> false - | _ -> doc.Project.Language = LanguageNames.FSharp - ) - ) - |> Array.ofSeq - - if docIdsToReanalyze.Length > 0 then - analyzerService.Reanalyze(workspace, documentIds=docIdsToReanalyze) - with - | ex -> logException ex - } - |> Async.Start // fire and forget - - nextCommandHandler.Invoke() - - member _.GetCommandState(_, nextCommandHandler: Func) = - nextCommandHandler.Invoke() \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/LanguageService/FSharpCheckerExtensions.fs b/vsintegration/src/FSharp.Editor/LanguageService/FSharpCheckerExtensions.fs new file mode 100644 index 00000000000..aaf20f5c4d6 --- /dev/null +++ b/vsintegration/src/FSharp.Editor/LanguageService/FSharpCheckerExtensions.fs @@ -0,0 +1,90 @@ +[] +module internal Microsoft.VisualStudio.FSharp.Editor.FSharpCheckerExtensions + +open System + +open Microsoft.CodeAnalysis +open Microsoft.CodeAnalysis.Text + +open FSharp.Compiler.SourceCodeServices + +type FSharpChecker with + member checker.ParseDocument(document: Document, parsingOptions: FSharpParsingOptions, sourceText: SourceText, userOpName: string) = + asyncMaybe { + let! fileParseResults = checker.ParseFile(document.FilePath, sourceText.ToFSharpSourceText(), parsingOptions, userOpName=userOpName) |> liftAsync + return! fileParseResults.ParseTree + } + + member checker.ParseAndCheckDocument(filePath: string, textVersionHash: int, sourceText: SourceText, options: FSharpProjectOptions, languageServicePerformanceOptions: LanguageServicePerformanceOptions, userOpName: string) = + async { + let parseAndCheckFile = + async { + let! parseResults, checkFileAnswer = checker.ParseAndCheckFileInProject(filePath, textVersionHash, sourceText.ToFSharpSourceText(), options, userOpName=userOpName) + return + match checkFileAnswer with + | FSharpCheckFileAnswer.Aborted -> + None + | FSharpCheckFileAnswer.Succeeded(checkFileResults) -> + Some (parseResults, checkFileResults) + } + + let tryGetFreshResultsWithTimeout() = + async { + let! worker = Async.StartChild(parseAndCheckFile, millisecondsTimeout=languageServicePerformanceOptions.TimeUntilStaleCompletion) + try + return! worker + with :? TimeoutException -> + return None // worker is cancelled at this point, we cannot return it and wait its completion anymore + } + + let bindParsedInput(results: (FSharpParseFileResults * FSharpCheckFileResults) option) = + match results with + | Some(parseResults, checkResults) -> + match parseResults.ParseTree with + | Some parsedInput -> Some (parseResults, parsedInput, checkResults) + | None -> None + | None -> None + + if languageServicePerformanceOptions.AllowStaleCompletionResults then + let! freshResults = tryGetFreshResultsWithTimeout() + + let! results = + match freshResults with + | Some x -> async.Return (Some x) + | None -> + async { + match checker.TryGetRecentCheckResultsForFile(filePath, options) with + | Some (parseResults, checkFileResults, _) -> + return Some (parseResults, checkFileResults) + | None -> + return! parseAndCheckFile + } + return bindParsedInput results + else + let! results = parseAndCheckFile + return bindParsedInput results + } + + + member checker.ParseAndCheckDocument(document: Document, options: FSharpProjectOptions, userOpName: string, ?allowStaleResults: bool, ?sourceText: SourceText) = + async { + let! cancellationToken = Async.CancellationToken + let! sourceText = + match sourceText with + | Some x -> async.Return x + | None -> document.GetTextAsync(cancellationToken) |> Async.AwaitTask + let! textVersion = document.GetTextVersionAsync(cancellationToken) |> Async.AwaitTask + let perfOpts = + match allowStaleResults with + | Some b -> { document.FSharpOptions.LanguageServicePerformance with AllowStaleCompletionResults = b } + | _ -> document.FSharpOptions.LanguageServicePerformance + return! checker.ParseAndCheckDocument(document.FilePath, textVersion.GetHashCode(), sourceText, options, perfOpts, userOpName=userOpName) + } + + + member checker.TryParseAndCheckFileInProject (projectOptions, fileName, sourceText: SourceText, userOpName) = async { + let! (parseResults, checkAnswer) = checker.ParseAndCheckFileInProject (fileName,0,sourceText.ToFSharpSourceText(),projectOptions, userOpName=userOpName) + match checkAnswer with + | FSharpCheckFileAnswer.Aborted -> return None + | FSharpCheckFileAnswer.Succeeded checkResults -> return Some (parseResults,checkResults) + } diff --git a/vsintegration/src/FSharp.Editor/LanguageService/FSharpCheckerProvider.fs b/vsintegration/src/FSharp.Editor/LanguageService/FSharpCheckerProvider.fs new file mode 100644 index 00000000000..05d7f9b1309 --- /dev/null +++ b/vsintegration/src/FSharp.Editor/LanguageService/FSharpCheckerProvider.fs @@ -0,0 +1,87 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace Microsoft.VisualStudio.FSharp.Editor + +open System +open System.ComponentModel.Composition +open System.Diagnostics +open Microsoft.CodeAnalysis +open FSharp.Compiler.SourceCodeServices +open Microsoft.VisualStudio +open Microsoft.VisualStudio.FSharp.Editor +open Microsoft.VisualStudio.LanguageServices +open FSharp.NativeInterop +open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Diagnostics + +#nowarn "9" // NativePtr.toNativeInt + +// Exposes FSharpChecker as MEF export +[); Composition.Shared>] +type internal FSharpCheckerProvider + [] + ( + analyzerService: IFSharpDiagnosticAnalyzerService, + [)>] workspace: VisualStudioWorkspace, + settings: EditorOptions + ) = + + let tryGetMetadataSnapshot (path, timeStamp) = + try + let md = Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices.FSharpVisualStudioWorkspaceExtensions.GetMetadata(workspace, path, timeStamp) + let amd = (md :?> AssemblyMetadata) + let mmd = amd.GetModules().[0] + let mmr = mmd.GetMetadataReader() + + // "lifetime is timed to Metadata you got from the GetMetadata(...). As long as you hold it strongly, raw + // memory we got from metadata reader will be alive. Once you are done, just let everything go and + // let finalizer handle resource rather than calling Dispose from Metadata directly. It is shared metadata. + // You shouldn't dispose it directly." + + let objToHold = box md + + // We don't expect any ilread WeakByteFile to be created when working in Visual Studio + Debug.Assert((FSharp.Compiler.AbstractIL.ILBinaryReader.GetStatistics().weakByteFileCount = 0), "Expected weakByteFileCount to be zero when using F# in Visual Studio. Was there a problem reading a .NET binary?") + + Some (objToHold, NativePtr.toNativeInt mmr.MetadataPointer, mmr.MetadataLength) + with ex -> + // We catch all and let the backup routines in the F# compiler find the error + Assert.Exception(ex) + None + + + let checker = + lazy + let checker = + FSharpChecker.Create( + projectCacheSize = settings.LanguageServicePerformance.ProjectCheckCacheSize, + keepAllBackgroundResolutions = false, + // Enabling this would mean that if devenv.exe goes above 2.3GB we do a one-off downsize of the F# Compiler Service caches + (* , MaxMemory = 2300 *) + legacyReferenceResolver=LegacyMSBuildReferenceResolver.getResolver(), + tryGetMetadataSnapshot = tryGetMetadataSnapshot, + keepAllBackgroundSymbolUses = false, + enableBackgroundItemKeyStoreAndSemanticClassification = true, + enablePartialTypeChecking = true) + + // This is one half of the bridge between the F# background builder and the Roslyn analysis engine. + // When the F# background builder refreshes the background semantic build context for a file, + // we request Roslyn to reanalyze that individual file. + checker.BeforeBackgroundFileCheck.Add(fun (fileName, _extraProjectInfo) -> + async { + try + let solution = workspace.CurrentSolution + let documentIds = solution.GetDocumentIdsWithFilePath(fileName) + if not documentIds.IsEmpty then + let documentIdsFiltered = documentIds |> Seq.filter workspace.IsDocumentOpen |> Seq.toArray + for documentId in documentIdsFiltered do + Trace.TraceInformation("{0:n3} Requesting Roslyn reanalysis of {1}", DateTime.Now.TimeOfDay.TotalSeconds, documentId) + if documentIdsFiltered.Length > 0 then + analyzerService.Reanalyze(workspace,documentIds=documentIdsFiltered) + with ex -> + Assert.Exception(ex) + } |> Async.StartImmediate + ) + checker + + member this.Checker = checker.Value + diff --git a/vsintegration/src/FSharp.Editor/LanguageService/FSharpEditorFactory.fs b/vsintegration/src/FSharp.Editor/LanguageService/FSharpEditorFactory.fs index d539f249e1e..cadf0d33e06 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/FSharpEditorFactory.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/FSharpEditorFactory.fs @@ -26,9 +26,6 @@ module Constants = [] let FSharpEditorFactoryPhysicalViewAttributes = 2 - [] - let FSharpAnalysisSaveFileHandler = "FSharp Analysis Save File Handler" - [] type FSharpEditorFactory(parentPackage: ShellPackage) = @@ -70,9 +67,9 @@ type FSharpEditorFactory(parentPackage: ShellPackage) = interface IVsEditorFactory with - member _.Close() = VSConstants.S_OK + member __.Close() = VSConstants.S_OK - member _.CreateEditorInstance(_grfCreateDoc, _pszMkDocument, _pszPhysicalView, _pvHier, _itemid, punkDocDataExisting, ppunkDocView, ppunkDocData, pbstrEditorCaption, pguidCmdUI, pgrfCDW) = + member __.CreateEditorInstance(_grfCreateDoc, _pszMkDocument, _pszPhysicalView, _pvHier, _itemid, punkDocDataExisting, ppunkDocView, ppunkDocData, pbstrEditorCaption, pguidCmdUI, pgrfCDW) = ppunkDocView <- IntPtr.Zero ppunkDocData <- IntPtr.Zero pbstrEditorCaption <- String.Empty @@ -102,7 +99,7 @@ type FSharpEditorFactory(parentPackage: ShellPackage) = let textBuffer = editorAdaptersFactoryService.CreateVsTextBufferAdapter(oleServiceProvider, contentType) setWindowBuffer oleServiceProvider textBuffer &ppunkDocView &ppunkDocData &pbstrEditorCaption - member _.MapLogicalView(rguidLogicalView, pbstrPhysicalView) = + member __.MapLogicalView(rguidLogicalView, pbstrPhysicalView) = pbstrPhysicalView <- null match rguidLogicalView with @@ -115,7 +112,7 @@ type FSharpEditorFactory(parentPackage: ShellPackage) = | _ -> VSConstants.E_NOTIMPL - member _.SetSite(packageServiceProvider) = + member __.SetSite(packageServiceProvider) = oleServiceProviderOpt <- Some packageServiceProvider VSConstants.S_OK \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/LanguageService/FSharpProjectOptionsManager.fs b/vsintegration/src/FSharp.Editor/LanguageService/FSharpProjectOptionsManager.fs index e30c178f5b6..2c09f05df36 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/FSharpProjectOptionsManager.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/FSharpProjectOptionsManager.fs @@ -6,15 +6,21 @@ open System open System.Collections.Generic open System.Collections.Concurrent open System.Collections.Immutable +open System.ComponentModel.Composition open System.IO open System.Linq open Microsoft.CodeAnalysis -open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.SourceCodeServices +open Microsoft.VisualStudio open Microsoft.VisualStudio.FSharp.Editor +open Microsoft.VisualStudio.LanguageServices +open Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem +open Microsoft.VisualStudio.Shell open System.Threading +open Microsoft.VisualStudio.Shell.Interop +open Microsoft.VisualStudio.LanguageServices.Implementation.TaskList +open Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices open Microsoft.VisualStudio.FSharp.Interactive.Session -open System.Runtime.CompilerServices [] module private FSharpProjectOptionsHelpers = @@ -27,59 +33,43 @@ module private FSharpProjectOptionsHelpers = let mutable errorReporter = Unchecked.defaultof<_> { new IProjectSite with - member _.Description = project.Name - member _.CompilationSourceFiles = sourcePaths - member _.CompilationOptions = + member __.Description = project.Name + member __.CompilationSourceFiles = sourcePaths + member __.CompilationOptions = Array.concat [options; referencePaths |> Array.map(fun r -> "-r:" + r)] - member _.CompilationReferences = referencePaths + member __.CompilationReferences = referencePaths member site.CompilationBinOutputPath = site.CompilationOptions |> Array.tryPick (fun s -> if s.StartsWith("-o:") then Some s.[3..] else None) - member _.ProjectFileName = project.FilePath - member _.AdviseProjectSiteChanges(_,_) = () - member _.AdviseProjectSiteCleaned(_,_) = () - member _.AdviseProjectSiteClosed(_,_) = () - member _.IsIncompleteTypeCheckEnvironment = false - member _.TargetFrameworkMoniker = "" - member _.ProjectGuid = project.Id.Id.ToString() - member _.LoadTime = System.DateTime.Now - member _.ProjectProvider = None - member _.BuildErrorReporter with get () = errorReporter and set (v) = errorReporter <- v + member __.ProjectFileName = project.FilePath + member __.AdviseProjectSiteChanges(_,_) = () + member __.AdviseProjectSiteCleaned(_,_) = () + member __.AdviseProjectSiteClosed(_,_) = () + member __.IsIncompleteTypeCheckEnvironment = false + member __.TargetFrameworkMoniker = "" + member __.ProjectGuid = project.Id.Id.ToString() + member __.LoadTime = System.DateTime.Now + member __.ProjectProvider = None + member __.BuildErrorReporter with get () = errorReporter and set (v) = errorReporter <- v } let hasProjectVersionChanged (oldProject: Project) (newProject: Project) = oldProject.Version <> newProject.Version - let hasDependentVersionChanged (oldProject: Project) (newProject: Project) (ct: CancellationToken) = - let oldProjectMetadataRefs = oldProject.MetadataReferences - let newProjectMetadataRefs = newProject.MetadataReferences - - if oldProjectMetadataRefs.Count <> newProjectMetadataRefs.Count then true - else - + let hasDependentVersionChanged (oldProject: Project) (newProject: Project) = let oldProjectRefs = oldProject.ProjectReferences let newProjectRefs = newProject.ProjectReferences - oldProjectRefs.Count() <> newProjectRefs.Count() || (oldProjectRefs, newProjectRefs) ||> Seq.exists2 (fun p1 p2 -> - ct.ThrowIfCancellationRequested() let doesProjectIdDiffer = p1.ProjectId <> p2.ProjectId let p1 = oldProject.Solution.GetProject(p1.ProjectId) let p2 = newProject.Solution.GetProject(p2.ProjectId) - doesProjectIdDiffer || - ( - if p1.IsFSharp then - p1.Version <> p2.Version - else - let v1 = p1.GetDependentVersionAsync(ct).Result - let v2 = p2.GetDependentVersionAsync(ct).Result - v1 <> v2 - ) + doesProjectIdDiffer || p1.Version <> p2.Version ) - let isProjectInvalidated (oldProject: Project) (newProject: Project) ct = + let isProjectInvalidated (oldProject: Project) (newProject: Project) (settings: EditorOptions) = let hasProjectVersionChanged = hasProjectVersionChanged oldProject newProject - if newProject.AreFSharpInMemoryCrossProjectReferencesEnabled then - hasProjectVersionChanged || hasDependentVersionChanged oldProject newProject ct + if settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences then + hasProjectVersionChanged || hasDependentVersionChanged oldProject newProject else hasProjectVersionChanged @@ -91,144 +81,70 @@ type private FSharpProjectOptionsMessage = | ClearSingleFileOptionsCache of DocumentId [] -type private FSharpProjectOptionsReactor (checker: FSharpChecker) = +type private FSharpProjectOptionsReactor (workspace: Workspace, settings: EditorOptions, _serviceProvider, checkerProvider: FSharpCheckerProvider) = let cancellationTokenSource = new CancellationTokenSource() - // Store command line options - let commandLineOptions = ConcurrentDictionary() + // Hack to store command line options from HandleCommandLineChanges + let cpsCommandLineOptions = ConcurrentDictionary() let legacyProjectSites = ConcurrentDictionary() let cache = ConcurrentDictionary() - let singleFileCache = ConcurrentDictionary() - - // This is used to not constantly emit the same compilation. - let weakPEReferences = ConditionalWeakTable() - let lastSuccessfulCompilations = ConcurrentDictionary() - - let scriptUpdatedEvent = Event() - - let createPEReference (referencedProject: Project) (comp: Compilation) = - let projectId = referencedProject.Id - - match weakPEReferences.TryGetValue comp with - | true, fsRefProj -> fsRefProj - | _ -> - let weakComp = WeakReference(comp) - let getStream = - fun ct -> - let tryStream (comp: Compilation) = - let ms = new MemoryStream() // do not dispose the stream as it will be owned on the reference. - let emitOptions = Emit.EmitOptions(metadataOnly = true, includePrivateMembers = false, tolerateErrors = true) - try - let result = comp.Emit(ms, options = emitOptions, cancellationToken = ct) + let singleFileCache = ConcurrentDictionary() - if result.Success then - lastSuccessfulCompilations.[projectId] <- comp - ms.Position <- 0L - ms :> Stream - |> Some - else - ms.Dispose() // it failed, dispose of stream - None - with - | _ -> - ms.Dispose() // it failed, dispose of stream - None - - let resultOpt = - match weakComp.TryGetTarget() with - | true, comp -> tryStream comp - | _ -> None - - match resultOpt with - | Some _ -> resultOpt - | _ -> - match lastSuccessfulCompilations.TryGetValue(projectId) with - | true, comp -> tryStream comp - | _ -> None - - let fsRefProj = - FSharpReferencedProject.CreatePortableExecutable( - referencedProject.OutputFilePath, - DateTime.UtcNow, - getStream - ) - weakPEReferences.Add(comp, fsRefProj) - fsRefProj - - let rec tryComputeOptionsBySingleScriptOrFile (document: Document) (ct: CancellationToken) userOpName = + let rec tryComputeOptionsByFile (document: Document) (ct: CancellationToken) userOpName = async { let! fileStamp = document.GetTextVersionAsync(ct) |> Async.AwaitTask match singleFileCache.TryGetValue(document.Id) with | false, _ -> let! sourceText = document.GetTextAsync(ct) |> Async.AwaitTask - - let! scriptProjectOptions, _ = - checker.GetProjectOptionsFromScript(document.FilePath, - sourceText.ToFSharpSourceText(), - SessionsProperties.fsiPreview, - assumeDotNetFramework=not SessionsProperties.fsiUseNetCore, - userOpName=userOpName) - - let project = document.Project - - let otherOptions = - if project.IsFSharpMetadata then - project.ProjectReferences - |> Seq.map (fun x -> "-r:" + project.Solution.GetProject(x.ProjectId).OutputFilePath) - |> Array.ofSeq - |> Array.append ( - project.MetadataReferences.OfType() - |> Seq.map (fun x -> "-r:" + x.FilePath) - |> Array.ofSeq) - else - [||] - + let! scriptProjectOptions, _ = checkerProvider.Checker.GetProjectOptionsFromScript(document.FilePath, sourceText.ToFSharpSourceText(), SessionsProperties.fsiPreview, userOpName=userOpName) let projectOptions = if isScriptFile document.FilePath then - scriptUpdatedEvent.Trigger(scriptProjectOptions) scriptProjectOptions else { ProjectFileName = document.FilePath ProjectId = None SourceFiles = [|document.FilePath|] - OtherOptions = otherOptions + OtherOptions = [||] ReferencedProjects = [||] IsIncompleteTypeCheckEnvironment = false - UseScriptResolutionRules = CompilerEnvironment.MustBeSingleFileProject (Path.GetFileName(document.FilePath)) + UseScriptResolutionRules = SourceFile.MustBeSingleFileProject (Path.GetFileName(document.FilePath)) LoadTime = DateTime.Now UnresolvedReferences = None OriginalLoadReferences = [] + ExtraProjectInfo= None Stamp = Some(int64 (fileStamp.GetHashCode())) } - let parsingOptions, _ = checker.GetParsingOptionsFromProjectOptions(projectOptions) + checkerProvider.Checker.CheckProjectInBackground(projectOptions, userOpName="checkOptions") - singleFileCache.[document.Id] <- (document.Project, fileStamp, parsingOptions, projectOptions) + let parsingOptions, _ = checkerProvider.Checker.GetParsingOptionsFromProjectOptions(projectOptions) + + singleFileCache.[document.Id] <- (fileStamp, parsingOptions, projectOptions) return Some(parsingOptions, projectOptions) - | true, (oldProject, oldFileStamp, parsingOptions, projectOptions) -> - if fileStamp <> oldFileStamp || isProjectInvalidated document.Project oldProject ct then + | true, (fileStamp2, parsingOptions, projectOptions) -> + if fileStamp <> fileStamp2 then singleFileCache.TryRemove(document.Id) |> ignore - return! tryComputeOptionsBySingleScriptOrFile document ct userOpName + return! tryComputeOptionsByFile document ct userOpName else return Some(parsingOptions, projectOptions) } let tryGetProjectSite (project: Project) = // Cps - if commandLineOptions.ContainsKey project.Id then - Some (mapCpsProjectToSite(project, commandLineOptions)) + if cpsCommandLineOptions.ContainsKey project.Id then + Some (mapCpsProjectToSite(project, cpsCommandLineOptions)) else // Legacy match legacyProjectSites.TryGetValue project.Id with | true, site -> Some site | _ -> None - let rec tryComputeOptions (project: Project) ct = + let rec tryComputeOptions (project: Project) = async { let projectId = project.Id match cache.TryGetValue(projectId) with @@ -240,17 +156,13 @@ type private FSharpProjectOptionsReactor (checker: FSharpChecker) = let referencedProjects = ResizeArray() - if project.AreFSharpInMemoryCrossProjectReferencesEnabled then + if settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences then for projectReference in project.ProjectReferences do let referencedProject = project.Solution.GetProject(projectReference.ProjectId) if referencedProject.Language = FSharpConstants.FSharpLanguageName then - match! tryComputeOptions referencedProject ct with + match! tryComputeOptions referencedProject with | None -> canBail <- true - | Some(_, projectOptions) -> referencedProjects.Add(FSharpReferencedProject.CreateFSharp(referencedProject.OutputFilePath, projectOptions)) - elif referencedProject.SupportsCompilation then - let! comp = referencedProject.GetCompilationAsync(ct) |> Async.AwaitTask - let peRef = createPEReference referencedProject comp - referencedProjects.Add(peRef) + | Some(_, projectOptions) -> referencedProjects.Add(referencedProject.OutputFilePath, projectOptions) if canBail then return None @@ -276,8 +188,6 @@ type private FSharpProjectOptionsReactor (checker: FSharpChecker) = ) ) - let! ver = project.GetDependentVersionAsync(ct) |> Async.AwaitTask - let projectOptions = { ProjectFileName = projectSite.ProjectFileName @@ -286,11 +196,12 @@ type private FSharpProjectOptionsReactor (checker: FSharpChecker) = OtherOptions = otherOptions ReferencedProjects = referencedProjects.ToArray() IsIncompleteTypeCheckEnvironment = projectSite.IsIncompleteTypeCheckEnvironment - UseScriptResolutionRules = CompilerEnvironment.MustBeSingleFileProject (Path.GetFileName(project.FilePath)) + UseScriptResolutionRules = SourceFile.MustBeSingleFileProject (Path.GetFileName(project.FilePath)) LoadTime = projectSite.LoadTime UnresolvedReferences = None OriginalLoadReferences = [] - Stamp = Some(int64 (ver.GetHashCode())) + ExtraProjectInfo= None + Stamp = Some(int64 (project.Version.GetHashCode())) } // This can happen if we didn't receive the callback from HandleCommandLineChanges yet. @@ -298,7 +209,7 @@ type private FSharpProjectOptionsReactor (checker: FSharpChecker) = return None else // Clear any caches that need clearing and invalidate the project. - let currentSolution = project.Solution.Workspace.CurrentSolution + let currentSolution = workspace.CurrentSolution let projectsToClearCache = cache |> Seq.filter (fun pair -> not (currentSolution.ContainsProject pair.Key)) @@ -311,26 +222,20 @@ type private FSharpProjectOptionsReactor (checker: FSharpChecker) = |> Seq.map (fun pair -> let _, _, projectOptions = pair.Value projectOptions) - checker.ClearCache(options, userOpName = "tryComputeOptions") + checkerProvider.Checker.ClearCache(options, userOpName = "tryComputeOptions") - lastSuccessfulCompilations.ToArray() - |> Array.iter (fun pair -> - if not (currentSolution.ContainsProject(pair.Key)) then - lastSuccessfulCompilations.TryRemove(pair.Key) |> ignore - ) + checkerProvider.Checker.InvalidateConfiguration(projectOptions, startBackgroundCompile = false, userOpName = "computeOptions") - checker.InvalidateConfiguration(projectOptions, userOpName = "tryComputeOptions") - - let parsingOptions, _ = checker.GetParsingOptionsFromProjectOptions(projectOptions) + let parsingOptions, _ = checkerProvider.Checker.GetParsingOptionsFromProjectOptions(projectOptions) cache.[projectId] <- (project, parsingOptions, projectOptions) return Some(parsingOptions, projectOptions) | true, (oldProject, parsingOptions, projectOptions) -> - if isProjectInvalidated oldProject project ct then + if isProjectInvalidated oldProject project settings then cache.TryRemove(projectId) |> ignore - return! tryComputeOptions project ct + return! tryComputeOptions project else return Some(parsingOptions, projectOptions) } @@ -347,22 +252,16 @@ type private FSharpProjectOptionsReactor (checker: FSharpChecker) = // For now, disallow miscellaneous workspace since we are using the hacky F# miscellaneous files project. if document.Project.Solution.Workspace.Kind = WorkspaceKind.MiscellaneousFiles then reply.Reply None - elif document.Project.IsFSharpMiscellaneousOrMetadata then - let! options = tryComputeOptionsBySingleScriptOrFile document ct userOpName - if ct.IsCancellationRequested then - reply.Reply None - else - reply.Reply options + elif document.Project.Name = FSharpConstants.FSharpMiscellaneousFilesName then + let! options = tryComputeOptionsByFile document ct userOpName + reply.Reply options else // We only care about the latest project in the workspace's solution. // We do this to prevent any possible cache thrashing in FCS. let project = document.Project.Solution.Workspace.CurrentSolution.GetProject(document.Project.Id) if not (isNull project) then - let! options = tryComputeOptions project ct - if ct.IsCancellationRequested then - reply.Reply None - else - reply.Reply options + let! options = tryComputeOptions project + reply.Reply options else reply.Reply None with @@ -374,18 +273,15 @@ type private FSharpProjectOptionsReactor (checker: FSharpChecker) = reply.Reply None else try - if project.Solution.Workspace.Kind = WorkspaceKind.MiscellaneousFiles || project.IsFSharpMiscellaneousOrMetadata then + if project.Solution.Workspace.Kind = WorkspaceKind.MiscellaneousFiles || project.Name = FSharpConstants.FSharpMiscellaneousFilesName then reply.Reply None else // We only care about the latest project in the workspace's solution. // We do this to prevent any possible cache thrashing in FCS. let project = project.Solution.Workspace.CurrentSolution.GetProject(project.Id) if not (isNull project) then - let! options = tryComputeOptions project ct - if ct.IsCancellationRequested then - reply.Reply None - else - reply.Reply options + let! options = tryComputeOptions project + reply.Reply options else reply.Reply None with @@ -393,70 +289,63 @@ type private FSharpProjectOptionsReactor (checker: FSharpChecker) = reply.Reply None | FSharpProjectOptionsMessage.ClearOptions(projectId) -> - match cache.TryRemove(projectId) with - | true, (_, _, projectOptions) -> - lastSuccessfulCompilations.TryRemove(projectId) |> ignore - checker.ClearCache([projectOptions]) - | _ -> - () + cache.TryRemove(projectId) |> ignore legacyProjectSites.TryRemove(projectId) |> ignore | FSharpProjectOptionsMessage.ClearSingleFileOptionsCache(documentId) -> - match singleFileCache.TryRemove(documentId) with - | true, (_, _, _, projectOptions) -> - lastSuccessfulCompilations.TryRemove(documentId.ProjectId) |> ignore - checker.ClearCache([projectOptions]) - | _ -> - () + singleFileCache.TryRemove(documentId) |> ignore } let agent = MailboxProcessor.Start((fun agent -> loop agent), cancellationToken = cancellationTokenSource.Token) - member _.TryGetOptionsByProjectAsync(project, ct) = + member __.TryGetOptionsByProjectAsync(project, ct) = agent.PostAndAsyncReply(fun reply -> FSharpProjectOptionsMessage.TryGetOptionsByProject(project, reply, ct)) - member _.TryGetOptionsByDocumentAsync(document, ct, userOpName) = + member __.TryGetOptionsByDocumentAsync(document, ct, userOpName) = agent.PostAndAsyncReply(fun reply -> FSharpProjectOptionsMessage.TryGetOptionsByDocument(document, reply, ct, userOpName)) - member _.ClearOptionsByProjectId(projectId) = + member __.ClearOptionsByProjectId(projectId) = agent.Post(FSharpProjectOptionsMessage.ClearOptions(projectId)) - member _.ClearSingleFileOptionsCache(documentId) = + member __.ClearSingleFileOptionsCache(documentId) = agent.Post(FSharpProjectOptionsMessage.ClearSingleFileOptionsCache(documentId)) - member _.SetCommandLineOptions(projectId, sourcePaths, options) = - commandLineOptions.[projectId] <- (sourcePaths, options) + member __.SetCpsCommandLineOptions(projectId, sourcePaths, options) = + cpsCommandLineOptions.[projectId] <- (sourcePaths, options) - member _.SetLegacyProjectSite (projectId, projectSite) = + member __.SetLegacyProjectSite (projectId, projectSite) = legacyProjectSites.[projectId] <- projectSite - member _.TryGetCachedOptionsByProjectId(projectId) = + member __.TryGetCachedOptionsByProjectId(projectId) = match cache.TryGetValue(projectId) with | true, result -> Some(result) | _ -> None - member _.ClearAllCaches() = - commandLineOptions.Clear() - legacyProjectSites.Clear() - cache.Clear() - singleFileCache.Clear() - lastSuccessfulCompilations.Clear() - - member _.ScriptUpdated = scriptUpdatedEvent.Publish - interface IDisposable with - member _.Dispose() = + member __.Dispose() = cancellationTokenSource.Cancel() cancellationTokenSource.Dispose() (agent :> IDisposable).Dispose() -/// Manages mappings of Roslyn workspace Projects/Documents to FCS. +/// Exposes FCS FSharpProjectOptions information management as MEF component. +// +// This service allows analyzers to get an appropriate FSharpProjectOptions value for a project or single file. +// It also allows a 'cheaper' route to get the project options relevant to parsing (e.g. the #define values). +// The main entrypoints are TryGetOptionsForDocumentOrProject and TryGetOptionsForEditingDocumentOrProject. +[); Composition.Shared>] type internal FSharpProjectOptionsManager + [] ( - checker: FSharpChecker, - workspace: Workspace + checkerProvider: FSharpCheckerProvider, + [)>] workspace: VisualStudioWorkspace, + [)>] serviceProvider: System.IServiceProvider, + settings: EditorOptions ) = - let reactor = new FSharpProjectOptionsReactor(checker) + let projectDisplayNameOf projectFileName = + if String.IsNullOrWhiteSpace projectFileName then projectFileName + else Path.GetFileNameWithoutExtension projectFileName + + let reactor = new FSharpProjectOptionsReactor(workspace, settings, serviceProvider, checkerProvider) do // We need to listen to this event for lifecycle purposes. @@ -466,16 +355,7 @@ type internal FSharpProjectOptionsManager | _ -> () ) - workspace.DocumentClosed.Add(fun args -> - let doc = args.Document - let proj = doc.Project - if proj.IsFSharp && proj.IsFSharpMiscellaneousOrMetadata then - reactor.ClearSingleFileOptionsCache(doc.Id) - ) - - member _.ScriptUpdated = reactor.ScriptUpdated - - member _.SetLegacyProjectSite (projectId, projectSite) = + member __.SetLegacyProjectSite (projectId, projectSite) = reactor.SetLegacyProjectSite (projectId, projectSite) /// Clear a project from the project table @@ -492,7 +372,7 @@ type internal FSharpProjectOptionsManager let parsingOptions = match reactor.TryGetCachedOptionsByProjectId(document.Project.Id) with | Some (_, parsingOptions, _) -> parsingOptions - | _ -> { FSharpParsingOptions.Default with IsInteractive = CompilerEnvironment.IsScriptFile document.Name } + | _ -> { FSharpParsingOptions.Default with IsInteractive = FSharpFileUtilities.isScriptFile document.Name } CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions member this.TryGetOptionsByProject(project) = @@ -520,12 +400,29 @@ type internal FSharpProjectOptionsManager member this.TryGetQuickParsingOptionsForEditingDocumentOrProject(document:Document) = match reactor.TryGetCachedOptionsByProjectId(document.Project.Id) with | Some (_, parsingOptions, _) -> parsingOptions - | _ -> { FSharpParsingOptions.Default with IsInteractive = CompilerEnvironment.IsScriptFile document.Name } + | _ -> { FSharpParsingOptions.Default with IsInteractive = FSharpFileUtilities.isScriptFile document.Name } + + [] + /// This handles commandline change notifications from the Dotnet Project-system + /// Prior to VS 15.7 path contained path to project file, post 15.7 contains target binpath + /// binpath is more accurate because a project file can have multiple in memory projects based on configuration + member __.HandleCommandLineChanges(path:string, sources:ImmutableArray, _references:ImmutableArray, options:ImmutableArray) = + use _logBlock = Logger.LogBlock(LogEditorFunctionId.LanguageService_HandleCommandLineArgs) + + let projectId = + match Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices.FSharpVisualStudioWorkspaceExtensions.TryGetProjectIdByBinPath(workspace, path) with + | true, projectId -> projectId + | false, _ -> Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices.FSharpVisualStudioWorkspaceExtensions.GetOrCreateProjectIdForPath(workspace, path, projectDisplayNameOf path) + let path = Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices.FSharpVisualStudioWorkspaceExtensions.GetProjectFilePath(workspace, projectId) + + let getFullPath p = + let p' = + if Path.IsPathRooted(p) || path = null then p + else Path.Combine(Path.GetDirectoryName(path), p) + Path.GetFullPathSafe(p') - member this.SetCommandLineOptions(projectId, sourcePaths, options: ImmutableArray) = - reactor.SetCommandLineOptions(projectId, sourcePaths, options.ToArray()) + let sourcePaths = sources |> Seq.map(fun s -> getFullPath s.Path) |> Seq.toArray - member this.ClearAllCaches() = - reactor.ClearAllCaches() + reactor.SetCpsCommandLineOptions(projectId, sourcePaths, options.ToArray()) - member _.Checker = checker + member __.Checker = checkerProvider.Checker diff --git a/vsintegration/src/FSharp.Editor/LanguageService/IFSharpWorkspaceService.fs b/vsintegration/src/FSharp.Editor/LanguageService/IFSharpWorkspaceService.fs deleted file mode 100644 index db1794308b6..00000000000 --- a/vsintegration/src/FSharp.Editor/LanguageService/IFSharpWorkspaceService.fs +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.VisualStudio.FSharp.Editor - -open FSharp.Compiler.CodeAnalysis -open Microsoft.VisualStudio.FSharp.Editor -open Microsoft.CodeAnalysis.Host - -// Used to expose FSharpChecker/ProjectInfo manager to diagnostic providers -// Diagnostic providers can be executed in environment that does not use MEF so they can rely only -// on services exposed by the workspace -type internal IFSharpWorkspaceService = - inherit IWorkspaceService - abstract Checker: FSharpChecker - abstract FSharpProjectOptionsManager: FSharpProjectOptionsManager \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs b/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs index 19b9fe30a39..f02f4e344b4 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs @@ -6,15 +6,11 @@ open System open System.ComponentModel.Design open System.Runtime.InteropServices open System.Threading -open System.IO -open System.Collections.Immutable open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Options -open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.SourceCodeServices open FSharp.NativeInterop open Microsoft.VisualStudio -open Microsoft.VisualStudio.Editor open Microsoft.VisualStudio.FSharp.Editor open Microsoft.VisualStudio.LanguageServices open Microsoft.VisualStudio.LanguageServices.Implementation.LanguageService @@ -23,16 +19,23 @@ open Microsoft.VisualStudio.LanguageServices.ProjectSystem open Microsoft.VisualStudio.Shell open Microsoft.VisualStudio.Shell.Interop open Microsoft.VisualStudio.Text.Outlining +open FSharp.NativeInterop open Microsoft.CodeAnalysis.ExternalAccess.FSharp -open Microsoft.CodeAnalysis.Host -open Microsoft.CodeAnalysis.Host.Mef #nowarn "9" // NativePtr.toNativeInt +// Used to expose FSharpChecker/ProjectInfo manager to diagnostic providers +// Diagnostic providers can be executed in environment that does not use MEF so they can rely only +// on services exposed by the workspace +type internal FSharpCheckerWorkspaceService = + inherit Microsoft.CodeAnalysis.Host.IWorkspaceService + abstract Checker: FSharpChecker + abstract FSharpProjectOptionsManager: FSharpProjectOptionsManager + type internal RoamingProfileStorageLocation(keyName: string) = inherit OptionStorageLocation() - member _.GetKeyNameForLanguage(languageName: string) = + member __.GetKeyNameForLanguage(languageName: string) = let unsubstitutedKeyName = keyName match languageName with | null -> unsubstitutedKeyName @@ -40,122 +43,52 @@ type internal RoamingProfileStorageLocation(keyName: string) = let substituteLanguageName = if languageName = FSharpConstants.FSharpLanguageName then "FSharp" else languageName unsubstitutedKeyName.Replace("%LANGUAGE%", substituteLanguageName) -[] -[, ServiceLayer.Default)>] -type internal FSharpWorkspaceServiceFactory - [] +[] +[, Microsoft.CodeAnalysis.Host.Mef.ServiceLayer.Default)>] +type internal FSharpCheckerWorkspaceServiceFactory + [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = - - // We have a lock just in case if multi-threads try to create a new IFSharpWorkspaceService - - // but we only want to have a single instance of the FSharpChecker regardless if there are multiple instances of IFSharpWorkspaceService. - // In VS, we only ever have a single IFSharpWorkspaceService, but for testing we may have mutliple; we still only want a - // single FSharpChecker instance shared across them. - static let gate = obj() - - // We only ever want to have a single FSharpChecker. - static let mutable checkerSingleton = None - - interface IWorkspaceServiceFactory with - member _.CreateService(workspaceServices) = - - let workspace = workspaceServices.Workspace - - let tryGetMetadataSnapshot (path, timeStamp) = - match workspace with - | :? VisualStudioWorkspace as workspace -> - try - let md = Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices.FSharpVisualStudioWorkspaceExtensions.GetMetadata(workspace, path, timeStamp) - let amd = (md :?> AssemblyMetadata) - let mmd = amd.GetModules().[0] - let mmr = mmd.GetMetadataReader() - - // "lifetime is timed to Metadata you got from the GetMetadata(...). As long as you hold it strongly, raw - // memory we got from metadata reader will be alive. Once you are done, just let everything go and - // let finalizer handle resource rather than calling Dispose from Metadata directly. It is shared metadata. - // You shouldn't dispose it directly." - - let objToHold = box md - - // We don't expect any ilread WeakByteFile to be created when working in Visual Studio - // Debug.Assert((FSharp.Compiler.AbstractIL.ILBinaryReader.GetStatistics().weakByteFileCount = 0), "Expected weakByteFileCount to be zero when using F# in Visual Studio. Was there a problem reading a .NET binary?") - - Some (objToHold, NativePtr.toNativeInt mmr.MetadataPointer, mmr.MetadataLength) - with ex -> - // We catch all and let the backup routines in the F# compiler find the error - Assert.Exception(ex) - None - | _ -> - None - - lock gate (fun () -> - match checkerSingleton with - | Some _ -> () - | _ -> - let checker = - lazy - let checker = - FSharpChecker.Create( - projectCacheSize = 5000, // We do not care how big the cache is. VS will actually tell FCS to clear caches, so this is fine. - keepAllBackgroundResolutions = false, - legacyReferenceResolver=LegacyMSBuildReferenceResolver.getResolver(), - tryGetMetadataSnapshot = tryGetMetadataSnapshot, - keepAllBackgroundSymbolUses = false, - enableBackgroundItemKeyStoreAndSemanticClassification = true, - enablePartialTypeChecking = true) - checker - checkerSingleton <- Some checker - ) - - let optionsManager = - lazy - match checkerSingleton with - | Some checker -> - FSharpProjectOptionsManager(checker.Value, workspaceServices.Workspace) - | _ -> - failwith "Checker not set." - - { new IFSharpWorkspaceService with - member _.Checker = - match checkerSingleton with - | Some checker -> checker.Value - | _ -> failwith "Checker not set." - member _.FSharpProjectOptionsManager = optionsManager.Value } :> _ + interface Microsoft.CodeAnalysis.Host.Mef.IWorkspaceServiceFactory with + member __.CreateService(_workspaceServices) = + upcast { new FSharpCheckerWorkspaceService with + member __.Checker = checkerProvider.Checker + member __.FSharpProjectOptionsManager = projectInfoManager } [] -type private FSharpSolutionEvents(projectManager: FSharpProjectOptionsManager, metadataAsSource: FSharpMetadataAsSourceService) = +type private FSharpSolutionEvents(projectManager: FSharpProjectOptionsManager) = interface IVsSolutionEvents with - member _.OnAfterCloseSolution(_) = + member __.OnAfterCloseSolution(_) = projectManager.Checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() - metadataAsSource.ClearGeneratedFiles() - projectManager.ClearAllCaches() VSConstants.S_OK - member _.OnAfterLoadProject(_, _) = VSConstants.E_NOTIMPL + member __.OnAfterLoadProject(_, _) = VSConstants.E_NOTIMPL - member _.OnAfterOpenProject(_, _) = VSConstants.E_NOTIMPL + member __.OnAfterOpenProject(_, _) = VSConstants.E_NOTIMPL - member _.OnAfterOpenSolution(_, _) = VSConstants.E_NOTIMPL + member __.OnAfterOpenSolution(_, _) = VSConstants.E_NOTIMPL - member _.OnBeforeCloseProject(_, _) = VSConstants.E_NOTIMPL + member __.OnBeforeCloseProject(_, _) = VSConstants.E_NOTIMPL - member _.OnBeforeCloseSolution(_) = VSConstants.E_NOTIMPL + member __.OnBeforeCloseSolution(_) = VSConstants.E_NOTIMPL - member _.OnBeforeUnloadProject(_, _) = VSConstants.E_NOTIMPL + member __.OnBeforeUnloadProject(_, _) = VSConstants.E_NOTIMPL - member _.OnQueryCloseProject(_, _, _) = VSConstants.E_NOTIMPL + member __.OnQueryCloseProject(_, _, _) = VSConstants.E_NOTIMPL - member _.OnQueryCloseSolution(_, _) = VSConstants.E_NOTIMPL + member __.OnQueryCloseSolution(_, _) = VSConstants.E_NOTIMPL - member _.OnQueryUnloadProject(_, _) = VSConstants.E_NOTIMPL + member __.OnQueryUnloadProject(_, _) = VSConstants.E_NOTIMPL [, Microsoft.CodeAnalysis.Host.Mef.ServiceLayer.Default)>] type internal FSharpSettingsFactory [] (settings: EditorOptions) = interface Microsoft.CodeAnalysis.Host.Mef.IWorkspaceServiceFactory with - member _.CreateService(_) = upcast settings + member __.CreateService(_) = upcast settings [] [, @@ -242,32 +175,21 @@ type internal FSharpPackage() as this = // FSI-LINKAGE-POINT: private method GetDialogPage forces fsi options to be loaded let _fsiPropertyPage = this.GetDialogPage(typeof) - - - let workspace = this.ComponentModel.GetService() - let _ = this.ComponentModel.DefaultExportProvider.GetExport() - let optionsManager = workspace.Services.GetService().FSharpProjectOptionsManager - let metadataAsSource = this.ComponentModel.DefaultExportProvider.GetExport().Value + let projectInfoManager = this.ComponentModel.DefaultExportProvider.GetExport().Value let solution = this.GetServiceAsync(typeof).Result let solution = solution :?> IVsSolution - let solutionEvents = FSharpSolutionEvents(optionsManager, metadataAsSource) + let solutionEvents = FSharpSolutionEvents(projectInfoManager) let rdt = this.GetServiceAsync(typeof).Result let rdt = rdt :?> IVsRunningDocumentTable solutionEventsOpt <- Some(solutionEvents) solution.AdviseSolutionEvents(solutionEvents) |> ignore - + let projectContextFactory = this.ComponentModel.GetService() + let workspace = this.ComponentModel.GetService() let miscFilesWorkspace = this.ComponentModel.GetService() - let _singleFileWorkspaceMap = - new SingleFileWorkspaceMap( - FSharpMiscellaneousFileService( - workspace, - miscFilesWorkspace, - FSharpWorkspaceProjectContextFactory(projectContextFactory) - ), - rdt) - let _legacyProjectWorkspaceMap = new LegacyProjectWorkspaceMap(solution, optionsManager, projectContextFactory) + let _singleFileWorkspaceMap = new SingleFileWorkspaceMap(workspace, miscFilesWorkspace, projectInfoManager, projectContextFactory, rdt) + let _legacyProjectWorkspaceMap = new LegacyProjectWorkspaceMap(solution, projectInfoManager, projectContextFactory) () let awaiter = this.JoinableTaskFactory.SwitchToMainThreadAsync().GetAwaiter() if awaiter.IsCompleted then @@ -304,14 +226,14 @@ type internal FSharpLanguageService(package : FSharpPackage) = let theme = package.ComponentModel.DefaultExportProvider.GetExport().Value theme.SetColors() - override _.ContentTypeName = FSharpConstants.FSharpContentTypeName - override _.LanguageName = FSharpConstants.FSharpLanguageName - override _.RoslynLanguageName = FSharpConstants.FSharpLanguageName + override __.ContentTypeName = FSharpConstants.FSharpContentTypeName + override __.LanguageName = FSharpConstants.FSharpLanguageName + override __.RoslynLanguageName = FSharpConstants.FSharpLanguageName - override _.LanguageServiceId = new Guid(FSharpConstants.languageServiceGuidString) - override _.DebuggerLanguageId = CompilerEnvironment.GetDebuggerLanguageID() + override __.LanguageServiceId = new Guid(FSharpConstants.languageServiceGuidString) + override __.DebuggerLanguageId = DebuggerEnvironment.GetLanguageID() - override _.CreateContext(_,_,_,_,_) = raise(System.NotImplementedException()) + override __.CreateContext(_,_,_,_,_) = raise(System.NotImplementedException()) override this.SetupNewTextView(textView) = base.SetupNewTextView(textView) @@ -323,39 +245,3 @@ type internal FSharpLanguageService(package : FSharpPackage) = if not (isNull outliningManager) then let settings = this.Workspace.Services.GetService() outliningManager.Enabled <- settings.Advanced.IsOutliningEnabled - -[] -[)>] -type internal HackCpsCommandLineChanges - [] - ( - [)>] workspace: VisualStudioWorkspace - ) = - - static let projectDisplayNameOf projectFileName = - if String.IsNullOrWhiteSpace projectFileName then projectFileName - else Path.GetFileNameWithoutExtension projectFileName - - [] - /// This handles commandline change notifications from the Dotnet Project-system - /// Prior to VS 15.7 path contained path to project file, post 15.7 contains target binpath - /// binpath is more accurate because a project file can have multiple in memory projects based on configuration - member _.HandleCommandLineChanges(path:string, sources:ImmutableArray, _references:ImmutableArray, options:ImmutableArray) = - use _logBlock = Logger.LogBlock(LogEditorFunctionId.LanguageService_HandleCommandLineArgs) - - let projectId = - match Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices.FSharpVisualStudioWorkspaceExtensions.TryGetProjectIdByBinPath(workspace, path) with - | true, projectId -> projectId - | false, _ -> Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices.FSharpVisualStudioWorkspaceExtensions.GetOrCreateProjectIdForPath(workspace, path, projectDisplayNameOf path) - let path = Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices.FSharpVisualStudioWorkspaceExtensions.GetProjectFilePath(workspace, projectId) - - let getFullPath p = - let p' = - if Path.IsPathRooted(p) || path = null then p - else Path.Combine(Path.GetDirectoryName(path), p) - Path.GetFullPathSafe(p') - - let sourcePaths = sources |> Seq.map(fun s -> getFullPath s.Path) |> Seq.toArray - - let workspaceService = workspace.Services.GetRequiredService() - workspaceService.FSharpProjectOptionsManager.SetCommandLineOptions(projectId, sourcePaths, options) diff --git a/vsintegration/src/FSharp.Editor/LanguageService/LegacyProjectWorkspaceMap.fs b/vsintegration/src/FSharp.Editor/LanguageService/LegacyProjectWorkspaceMap.fs index 996ce1cadf8..426ecf9a5f2 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/LegacyProjectWorkspaceMap.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/LegacyProjectWorkspaceMap.fs @@ -147,15 +147,15 @@ type internal LegacyProjectWorkspaceMap(solution: IVsSolution, interface IVsSolutionEvents with - member _.OnAfterCloseSolution(_) = + member __.OnAfterCloseSolution(_) = // Clear let mutable setup = Unchecked.defaultof<_> while setupQueue.TryDequeue(&setup) do () VSConstants.S_OK - member _.OnAfterLoadProject(_, _) = VSConstants.S_OK + member __.OnAfterLoadProject(_, _) = VSConstants.S_OK - member _.OnAfterOpenProject(hier, _) = + member __.OnAfterOpenProject(hier, _) = match hier with | :? IProvideProjectSite as siteProvider -> let setup = fun () -> this.SetupLegacyProjectFile(siteProvider) @@ -167,13 +167,13 @@ type internal LegacyProjectWorkspaceMap(solution: IVsSolution, | _ -> () VSConstants.S_OK - member _.OnAfterOpenSolution(_, _) = + member __.OnAfterOpenSolution(_, _) = let mutable setup = Unchecked.defaultof<_> while setupQueue.TryDequeue(&setup) do setup () VSConstants.S_OK - member _.OnBeforeCloseProject(hier, _) = + member __.OnBeforeCloseProject(hier, _) = match hier with | :? IProvideProjectSite as siteProvider -> let site = siteProvider.GetProjectSite() @@ -186,12 +186,12 @@ type internal LegacyProjectWorkspaceMap(solution: IVsSolution, | _ -> () VSConstants.S_OK - member _.OnBeforeCloseSolution(_) = VSConstants.S_OK + member __.OnBeforeCloseSolution(_) = VSConstants.S_OK - member _.OnBeforeUnloadProject(_, _) = VSConstants.S_OK + member __.OnBeforeUnloadProject(_, _) = VSConstants.S_OK - member _.OnQueryCloseProject(_, _, _) = VSConstants.S_OK + member __.OnQueryCloseProject(_, _, _) = VSConstants.S_OK - member _.OnQueryCloseSolution(_, _) = VSConstants.S_OK + member __.OnQueryCloseSolution(_, _) = VSConstants.S_OK - member _.OnQueryUnloadProject(_, _) = VSConstants.S_OK \ No newline at end of file + member __.OnQueryUnloadProject(_, _) = VSConstants.S_OK \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/LanguageService/MetadataAsSource.fs b/vsintegration/src/FSharp.Editor/LanguageService/MetadataAsSource.fs deleted file mode 100644 index 1121c0c8609..00000000000 --- a/vsintegration/src/FSharp.Editor/LanguageService/MetadataAsSource.fs +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.VisualStudio.FSharp.Editor - -open System -open System.Threading -open System.Collections.Immutable -open System.Diagnostics -open System.IO -open System.Linq -open System.Text -open System.Runtime.InteropServices -open System.Reflection.PortableExecutable -open System.ComponentModel.Composition - -open Microsoft.CodeAnalysis -open Microsoft.CodeAnalysis.FindSymbols -open Microsoft.CodeAnalysis.Text -open Microsoft.CodeAnalysis.Navigation -open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Navigation -open Microsoft.VisualStudio.ComponentModelHost -open Microsoft.VisualStudio.LanguageServices.ProjectSystem - -open Microsoft.VisualStudio -open Microsoft.VisualStudio.Editor -open Microsoft.VisualStudio.Threading -open Microsoft.VisualStudio.Shell -open Microsoft.VisualStudio.Shell.Interop -open Microsoft.VisualStudio.TextManager.Interop - -module internal MetadataAsSource = - - let generateTemporaryDocument (asmIdentity: AssemblyIdentity, name: string, metadataReferences) = - let rootPath = Path.Combine(Path.GetTempPath(), "MetadataAsSource") - let extension = ".fsi" - let directoryName = Guid.NewGuid().ToString("N") - let temporaryFilePath = Path.Combine(rootPath, directoryName, name + extension) - - let projectId = ProjectId.CreateNewId() - - let generatedDocumentId = DocumentId.CreateNewId(projectId) - let documentInfo = - DocumentInfo.Create( - generatedDocumentId, - Path.GetFileName(temporaryFilePath), - filePath = temporaryFilePath, - loader = FileTextLoader(temporaryFilePath, Encoding.UTF8)) - - let projectInfo = - ProjectInfo.Create( - projectId, - VersionStamp.Default, - name = FSharpConstants.FSharpMetadataName + " - " + asmIdentity.Name, - assemblyName = asmIdentity.Name, - language = LanguageNames.FSharp, - documents = [|documentInfo|], - metadataReferences = metadataReferences) - - (projectInfo, documentInfo) - - let showDocument (filePath, name, serviceProvider: IServiceProvider) = - let vsRunningDocumentTable4 = serviceProvider.GetService() - let fileAlreadyOpen = vsRunningDocumentTable4.IsMonikerValid(filePath) - - let openDocumentService = serviceProvider.GetService() - - let (_, _, _, _, windowFrame) = openDocumentService.OpenDocumentViaProject(filePath, ref VSConstants.LOGVIEWID.TextView_guid) - - let componentModel = serviceProvider.GetService() - let editorAdaptersFactory = componentModel.GetService() - let documentCookie = vsRunningDocumentTable4.GetDocumentCookie(filePath) - let vsTextBuffer = vsRunningDocumentTable4.GetDocumentData(documentCookie) :?> IVsTextBuffer - let textBuffer = editorAdaptersFactory.GetDataBuffer(vsTextBuffer) - - if not fileAlreadyOpen then - ErrorHandler.ThrowOnFailure(vsTextBuffer.SetStateFlags(uint32 BUFFERSTATEFLAGS.BSF_USER_READONLY)) |> ignore - ErrorHandler.ThrowOnFailure(windowFrame.SetProperty(int __VSFPROPID5.VSFPROPID_IsProvisional, true)) |> ignore - ErrorHandler.ThrowOnFailure(windowFrame.SetProperty(int __VSFPROPID5.VSFPROPID_OverrideCaption, name)) |> ignore - ErrorHandler.ThrowOnFailure(windowFrame.SetProperty(int __VSFPROPID5.VSFPROPID_OverrideToolTip, name)) |> ignore - - windowFrame.Show() |> ignore - - let textContainer = textBuffer.AsTextContainer() - let mutable workspace = Unchecked.defaultof<_> - if Workspace.TryGetWorkspace(textContainer, &workspace) then - let solution = workspace.CurrentSolution - let documentId = workspace.GetDocumentIdInCurrentContext(textContainer) - match box documentId with - | null -> None - | _ -> solution.GetDocument(documentId) |> Some - else - None - -[] -[); Composition.Shared>] -type internal FSharpMetadataAsSourceService [] (projectContextFactory: IWorkspaceProjectContextFactory) = - - let serviceProvider = ServiceProvider.GlobalProvider - let projs = System.Collections.Concurrent.ConcurrentDictionary() - - let createMetadataProjectContext (projInfo: ProjectInfo) (docInfo: DocumentInfo) = - let projectContext = projectContextFactory.CreateProjectContext(LanguageNames.FSharp, projInfo.Id.ToString(), projInfo.FilePath, Guid.NewGuid(), null, null) - projectContext.DisplayName <- projInfo.Name - projectContext.AddSourceFile(docInfo.FilePath, sourceCodeKind = SourceCodeKind.Regular) - - for metaRef in projInfo.MetadataReferences do - match metaRef with - | :? PortableExecutableReference as peRef -> - projectContext.AddMetadataReference(peRef.FilePath, MetadataReferenceProperties.Assembly) - | _ -> - () - - projectContext - - let clear filePath (projectContext: IWorkspaceProjectContext) = - projs.TryRemove(filePath) |> ignore - projectContext.Dispose() - try - File.Delete filePath |> ignore - with - | _ -> () - - member _.ClearGeneratedFiles() = - let projsArr = projs.ToArray() - projsArr - |> Array.iter (fun pair -> - clear pair.Key pair.Value - ) - - member _.ShowDocument(projInfo: ProjectInfo, filePath: string, text: Text.SourceText) = - match projInfo.Documents |> Seq.tryFind (fun doc -> doc.FilePath = filePath) with - | Some document -> - let _ = - let directoryName = Path.GetDirectoryName(filePath) - if Directory.Exists(directoryName) |> not then - Directory.CreateDirectory(directoryName) |> ignore - use fileStream = new FileStream(filePath, IO.FileMode.Create) - use writer = new StreamWriter(fileStream) - text.Write(writer) - - let projectContext = createMetadataProjectContext projInfo document - - projs.[filePath] <- projectContext - - MetadataAsSource.showDocument(filePath, Path.GetFileName(filePath), serviceProvider) - | _ -> - None \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/LanguageService/ProvideBraceCompletionAttribute.fs b/vsintegration/src/FSharp.Editor/LanguageService/ProvideBraceCompletionAttribute.fs index afea098da33..916a7380da1 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/ProvideBraceCompletionAttribute.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/ProvideBraceCompletionAttribute.fs @@ -10,8 +10,8 @@ open Microsoft.VisualStudio.Shell type internal ProvideBraceCompletionAttribute(languageName: string) = inherit RegistrationAttribute() - override _.Register(context) = + override __.Register(context) = use key = context.CreateKey(@"Languages\Language Services\" + languageName) key.SetValue("ShowBraceCompletion", 1) - override _.Unregister(_) = () \ No newline at end of file + override __.Unregister(_) = () \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/LanguageService/SingleFileWorkspaceMap.fs b/vsintegration/src/FSharp.Editor/LanguageService/SingleFileWorkspaceMap.fs index 637c6dd92d7..21249b80c5f 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/SingleFileWorkspaceMap.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/SingleFileWorkspaceMap.fs @@ -4,7 +4,6 @@ namespace Microsoft.VisualStudio.FSharp.Editor open System open System.Collections.Concurrent -open System.Collections.Immutable open Microsoft.CodeAnalysis open Microsoft.VisualStudio open Microsoft.VisualStudio.FSharp.Editor @@ -12,266 +11,102 @@ open Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem open Microsoft.VisualStudio.LanguageServices.ProjectSystem open Microsoft.VisualStudio.Shell.Interop open Microsoft.VisualStudio.LanguageServices -open FSharp.Compiler.CodeAnalysis -type internal IFSharpWorkspaceProjectContext = - inherit IDisposable - - abstract Id : ProjectId - - abstract FilePath : string - - abstract ProjectReferenceCount : int - - abstract HasProjectReference : filePath: string -> bool - - abstract SetProjectReferences : IFSharpWorkspaceProjectContext seq -> unit - -type internal IFSharpWorkspaceProjectContextFactory = - - abstract CreateProjectContext : filePath: string -> IFSharpWorkspaceProjectContext - -type internal FSharpWorkspaceProjectContext(vsProjectContext: IWorkspaceProjectContext) = - - let mutable refs = ImmutableDictionary.Create(StringComparer.OrdinalIgnoreCase) - - member private _.VisualStudioProjectContext = vsProjectContext - - member private _.AddProjectReference(builder: ImmutableDictionary<_, _>.Builder, projectContext: IFSharpWorkspaceProjectContext) = - match projectContext with - | :? FSharpWorkspaceProjectContext as fsProjectContext -> - vsProjectContext.AddProjectReference(fsProjectContext.VisualStudioProjectContext, MetadataReferenceProperties.Assembly) - builder.Add(projectContext.FilePath, projectContext) - | _ -> - () - - member private _.RemoveProjectReference(projectContext: IFSharpWorkspaceProjectContext) = - match projectContext with - | :? FSharpWorkspaceProjectContext as fsProjectContext -> - vsProjectContext.RemoveProjectReference(fsProjectContext.VisualStudioProjectContext) - | _ -> - () - - interface IFSharpWorkspaceProjectContext with - - member _.Id = vsProjectContext.Id - - member _.FilePath = vsProjectContext.ProjectFilePath - - member _.ProjectReferenceCount = refs.Count - - member _.HasProjectReference(filePath) = refs.ContainsKey(filePath) - - member this.SetProjectReferences(projRefs) = - let builder = ImmutableDictionary.CreateBuilder() - - refs.Values - |> Seq.iter (fun x -> - this.RemoveProjectReference(x) - ) - - projRefs - |> Seq.iter (fun x -> - this.AddProjectReference(builder, x) - ) - - refs <- builder.ToImmutable() - - member _.Dispose() = - vsProjectContext.Dispose() +[] +type internal SingleFileWorkspaceMap(workspace: VisualStudioWorkspace, + miscFilesWorkspace: MiscellaneousFilesWorkspace, + optionsManager: FSharpProjectOptionsManager, + projectContextFactory: IWorkspaceProjectContextFactory, + rdt: IVsRunningDocumentTable) as this = -type internal FSharpWorkspaceProjectContextFactory(projectContextFactory: IWorkspaceProjectContextFactory) = + let files = ConcurrentDictionary(StringComparer.OrdinalIgnoreCase) - static let createSourceCodeKind (filePath: string) = + let createSourceCodeKind (filePath: string) = if isScriptFile filePath then SourceCodeKind.Script else SourceCodeKind.Regular - interface IFSharpWorkspaceProjectContextFactory with - - member _.CreateProjectContext filePath = - let projectContext = projectContextFactory.CreateProjectContext(FSharpConstants.FSharpLanguageName, filePath, filePath, Guid.NewGuid(), null, null) - projectContext.DisplayName <- FSharpConstants.FSharpMiscellaneousFilesName - projectContext.AddSourceFile(filePath, sourceCodeKind = createSourceCodeKind filePath) - new FSharpWorkspaceProjectContext(projectContext) :> IFSharpWorkspaceProjectContext - -type internal FSharpMiscellaneousFileService(workspace: Workspace, - miscFilesWorkspace: Workspace, - projectContextFactory: IFSharpWorkspaceProjectContextFactory) = - - // We have a lock because the `ScriptUpdated` event may happen concurrently when a document opens or closes. - let gate = obj() - let files = ConcurrentDictionary(StringComparer.OrdinalIgnoreCase) - let optionsManager = workspace.Services.GetRequiredService().FSharpProjectOptionsManager - - static let mustUpdateProject (refSourceFiles: string []) (projectContext: IFSharpWorkspaceProjectContext) = - refSourceFiles.Length <> projectContext.ProjectReferenceCount || - ( - refSourceFiles - |> Seq.forall projectContext.HasProjectReference - |> not - ) - - let tryRemove (document: Document) = - let projIds = document.Project.Solution.GetDependentProjectIds(document.Project.Id) - if projIds.Count = 0 then - optionsManager.ClearSingleFileOptionsCache(document.Id) - - match files.TryRemove(document.FilePath) with - | true, projectContext -> - (projectContext :> IDisposable).Dispose() - | _ -> - () + let createProjectContext filePath = + let projectContext = projectContextFactory.CreateProjectContext(FSharpConstants.FSharpLanguageName, filePath, filePath, Guid.NewGuid(), null, null) + projectContext.DisplayName <- FSharpConstants.FSharpMiscellaneousFilesName + projectContext.AddSourceFile(filePath, sourceCodeKind = createSourceCodeKind filePath) + projectContext do - optionsManager.ScriptUpdated.Add(fun scriptProjectOptions -> - if scriptProjectOptions.SourceFiles.Length > 0 then - // The last file in the project options is the main script file. - let filePath = scriptProjectOptions.SourceFiles.[scriptProjectOptions.SourceFiles.Length - 1] - let refSourceFiles = scriptProjectOptions.SourceFiles |> Array.take (scriptProjectOptions.SourceFiles.Length - 1) - - match files.TryGetValue(filePath) with - | true, (projectContext: IFSharpWorkspaceProjectContext) -> - if mustUpdateProject refSourceFiles projectContext then - lock gate (fun () -> - let newProjRefs = - refSourceFiles - |> Array.map (fun filePath -> - match files.TryGetValue(filePath) with - | true, refProjectContext -> refProjectContext - | _ -> - let refProjectContext = projectContextFactory.CreateProjectContext(filePath) - files.[filePath] <- refProjectContext - refProjectContext - ) - - projectContext.SetProjectReferences(newProjRefs) - ) - | _ -> - () - ) - miscFilesWorkspace.DocumentOpened.Add(fun args -> let document = args.Document - - // If the file does not exist in the current solution, then we can create new project in the VisualStudioWorkspace that represents - // a F# miscellaneous project, which could be a script or not. - if document.Project.IsFSharp && workspace.CurrentSolution.GetDocumentIdsWithFilePath(document.FilePath).Length = 0 then - let filePath = document.FilePath - lock gate (fun () -> - if files.ContainsKey(filePath) |> not then - files.[filePath] <- projectContextFactory.CreateProjectContext(filePath) - ) + if document.Project.Language = FSharpConstants.FSharpLanguageName && workspace.CurrentSolution.GetDocumentIdsWithFilePath(document.FilePath).Length = 0 then + files.[document.FilePath] <- createProjectContext document.FilePath ) workspace.DocumentOpened.Add(fun args -> let document = args.Document - if not document.Project.IsFSharpMiscellaneousOrMetadata then - if files.ContainsKey(document.FilePath) then - lock gate (fun () -> - tryRemove document - ) + if document.Project.Language = FSharpConstants.FSharpLanguageName && document.Project.Name <> FSharpConstants.FSharpMiscellaneousFilesName then + match files.TryRemove(document.FilePath) with + | true, projectContext -> + optionsManager.ClearSingleFileOptionsCache(document.Id) + projectContext.Dispose() + | _ -> () ) workspace.DocumentClosed.Add(fun args -> let document = args.Document - if document.Project.IsFSharpMiscellaneousOrMetadata then - lock gate (fun () -> - tryRemove document - ) - ) - - workspace.WorkspaceChanged.Add(fun args -> - match args.Kind with - | WorkspaceChangeKind.ProjectRemoved -> - let proj = args.OldSolution.GetProject(args.ProjectId) - if proj.IsFSharpMiscellaneousOrMetadata then - let projRefs = - proj.GetAllProjectsThisProjectDependsOn() - |> Array.ofSeq - - if projRefs.Length > 0 then - lock gate (fun () -> - projRefs - |> Array.iter (fun proj -> - let proj = args.NewSolution.GetProject(proj.Id) - match proj with - | null -> () - | _ -> - if proj.IsFSharpMiscellaneousOrMetadata then - match proj.Documents |> Seq.tryExactlyOne with - | Some doc when not (workspace.IsDocumentOpen(doc.Id)) -> - tryRemove doc - | _ -> - () - ) - ) - | _ -> - () + match files.TryRemove(document.FilePath) with + | true, projectContext -> + optionsManager.ClearSingleFileOptionsCache(document.Id) + projectContext.Dispose() + | _ -> () ) - member _.Workspace = workspace - - member _.ProjectContextFactory = projectContextFactory - - member _.ContainsFile filePath = files.ContainsKey(filePath) - - member _.RenameFile(filePath, newFilePath) = - match files.TryRemove(filePath) with - | true, projectContext -> - let project = workspace.CurrentSolution.GetProject(projectContext.Id) - if project <> null then - let documentOpt = - project.Documents - |> Seq.tryFind (fun x -> String.Equals(x.FilePath, filePath, StringComparison.OrdinalIgnoreCase)) - match documentOpt with - | None -> () - | Some(document) -> - optionsManager.ClearSingleFileOptionsCache(document.Id) - projectContext.Dispose() - files.[newFilePath] <- projectContextFactory.CreateProjectContext(newFilePath) - else - projectContext.Dispose() // fallback, shouldn't happen, but in case it does let's dispose of the project context so we don't leak - | _ -> () - -[] -type internal SingleFileWorkspaceMap(miscFileService: FSharpMiscellaneousFileService, - rdt: IVsRunningDocumentTable) as this = - - do - rdt.AdviseRunningDocTableEvents(this) |> ignore + do + rdt.AdviseRunningDocTableEvents(this) |> ignore interface IVsRunningDocTableEvents with - member _.OnAfterAttributeChange(_, _) = VSConstants.E_NOTIMPL + member __.OnAfterAttributeChange(_, _) = VSConstants.E_NOTIMPL - member _.OnAfterDocumentWindowHide(_, _) = VSConstants.E_NOTIMPL + member __.OnAfterDocumentWindowHide(_, _) = VSConstants.E_NOTIMPL - member _.OnAfterFirstDocumentLock(_, _, _, _) = VSConstants.E_NOTIMPL + member __.OnAfterFirstDocumentLock(_, _, _, _) = VSConstants.E_NOTIMPL - member _.OnAfterSave(_) = VSConstants.E_NOTIMPL + member __.OnAfterSave(_) = VSConstants.E_NOTIMPL - member _.OnBeforeDocumentWindowShow(_, _, _) = VSConstants.E_NOTIMPL + member __.OnBeforeDocumentWindowShow(_, _, _) = VSConstants.E_NOTIMPL - member _.OnBeforeLastDocumentUnlock(_, _, _, _) = VSConstants.E_NOTIMPL + member __.OnBeforeLastDocumentUnlock(_, _, _, _) = VSConstants.E_NOTIMPL interface IVsRunningDocTableEvents2 with - member _.OnAfterAttributeChange(_, _) = VSConstants.E_NOTIMPL + member __.OnAfterAttributeChange(_, _) = VSConstants.E_NOTIMPL - member _.OnAfterAttributeChangeEx(_, grfAttribs, _, _, pszMkDocumentOld, _, _, pszMkDocumentNew) = + member __.OnAfterAttributeChangeEx(_, grfAttribs, _, _, pszMkDocumentOld, _, _, pszMkDocumentNew) = // Handles renaming of a misc file - if (grfAttribs &&& (uint32 __VSRDTATTRIB.RDTA_MkDocument)) <> 0u && miscFileService.ContainsFile(pszMkDocumentOld) then - miscFileService.RenameFile(pszMkDocumentOld, pszMkDocumentNew) + if (grfAttribs &&& (uint32 __VSRDTATTRIB.RDTA_MkDocument)) <> 0u && files.ContainsKey(pszMkDocumentOld) then + match files.TryRemove(pszMkDocumentOld) with + | true, projectContext -> + let project = workspace.CurrentSolution.GetProject(projectContext.Id) + if project <> null then + let documentOpt = + project.Documents + |> Seq.tryFind (fun x -> String.Equals(x.FilePath, pszMkDocumentOld, StringComparison.OrdinalIgnoreCase)) + match documentOpt with + | None -> () + | Some(document) -> + optionsManager.ClearSingleFileOptionsCache(document.Id) + projectContext.Dispose() + files.[pszMkDocumentNew] <- createProjectContext pszMkDocumentNew + else + projectContext.Dispose() // fallback, shouldn't happen, but in case it does let's dispose of the project context so we don't leak + | _ -> () VSConstants.S_OK - member _.OnAfterDocumentWindowHide(_, _) = VSConstants.E_NOTIMPL + member __.OnAfterDocumentWindowHide(_, _) = VSConstants.E_NOTIMPL - member _.OnAfterFirstDocumentLock(_, _, _, _) = VSConstants.E_NOTIMPL + member __.OnAfterFirstDocumentLock(_, _, _, _) = VSConstants.E_NOTIMPL - member _.OnAfterSave(_) = VSConstants.E_NOTIMPL + member __.OnAfterSave(_) = VSConstants.E_NOTIMPL - member _.OnBeforeDocumentWindowShow(_, _, _) = VSConstants.E_NOTIMPL + member __.OnBeforeDocumentWindowShow(_, _, _) = VSConstants.E_NOTIMPL - member _.OnBeforeLastDocumentUnlock(_, _, _, _) = VSConstants.E_NOTIMPL \ No newline at end of file + member __.OnBeforeLastDocumentUnlock(_, _, _, _) = VSConstants.E_NOTIMPL \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/LanguageService/SymbolHelpers.fs b/vsintegration/src/FSharp.Editor/LanguageService/SymbolHelpers.fs index 5a16321171a..1be896711b4 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/SymbolHelpers.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/SymbolHelpers.fs @@ -10,38 +10,59 @@ open System.Threading.Tasks open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Text -open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Symbols -open FSharp.Compiler.Text +open FSharp.Compiler.Range +open FSharp.Compiler.SourceCodeServices open Microsoft.VisualStudio.FSharp.Editor.Symbols module internal SymbolHelpers = /// Used for local code fixes in a document, e.g. to rename local parameters - let getSymbolUsesOfSymbolAtLocationInDocument (document: Document, position: int) = + let getSymbolUsesOfSymbolAtLocationInDocument (document: Document, position: int, projectInfoManager: FSharpProjectOptionsManager, checker: FSharpChecker, userOpName) = asyncMaybe { - let userOpName = "getSymbolUsesOfSymbolAtLocationInDocument" - let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(userOpName) |> liftAsync - let! defines = document.GetFSharpCompilationDefinesAsync(userOpName) |> liftAsync - let! cancellationToken = Async.CancellationToken |> liftAsync let! sourceText = document.GetTextAsync(cancellationToken) + let! textVersion = document.GetTextVersionAsync(cancellationToken) + let textVersionHash = textVersion.GetHashCode() let textLine = sourceText.Lines.GetLineFromPosition(position) let textLinePos = sourceText.Lines.GetLinePosition(position) let fcsTextLineNumber = Line.fromZ textLinePos.Line + let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) + let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions let! symbol = Tokenizer.getSymbolAtPosition(document.Id, sourceText, position, document.FilePath, defines, SymbolLookupKind.Greedy, false, false) + let settings = document.FSharpOptions + let! _, _, checkFileResults = checker.ParseAndCheckDocument(document.FilePath, textVersionHash, sourceText, projectOptions, settings.LanguageServicePerformance, userOpName = userOpName) let! symbolUse = checkFileResults.GetSymbolUseAtLocation(fcsTextLineNumber, symbol.Ident.idRange.EndColumn, textLine.ToString(), symbol.FullIsland) let! ct = Async.CancellationToken |> liftAsync let symbolUses = checkFileResults.GetUsesOfSymbolInFile(symbolUse.Symbol, cancellationToken=ct) return symbolUses } - let getSymbolUsesInProjects (symbol: FSharpSymbol, projects: Project list, onFound: Document -> TextSpan -> range -> Async) = + let getSymbolUsesInProjects (symbol: FSharpSymbol, projectInfoManager: FSharpProjectOptionsManager, checker: FSharpChecker, projects: Project list, onFound: Document -> TextSpan -> range -> Async, userOpName) = projects - |> Seq.map (fun project -> project.FindFSharpReferencesAsync(symbol, onFound, "getSymbolUsesInProjects")) + |> Seq.map (fun project -> + async { + match! projectInfoManager.TryGetOptionsByProject(project, CancellationToken.None) with + | Some (_parsingOptions, projectOptions) -> + for filePath in projectOptions.SourceFiles do + let! symbolUses = checker.FindBackgroundReferencesInFile(filePath, projectOptions, symbol, canInvalidateProject = false, userOpName = userOpName) + let documentOpt = project.Solution.TryGetDocumentFromPath(filePath, project.Id) + match documentOpt with + | Some document -> + let! ct = Async.CancellationToken + let! sourceText = document.GetTextAsync ct |> Async.AwaitTask + for symbolUse in symbolUses do + match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse) with + | Some textSpan -> + do! onFound document textSpan symbolUse + | _ -> + () + | _ -> + () + | _ -> () + }) |> Async.Sequential - let getSymbolUsesInSolution (symbol: FSharpSymbol, declLoc: SymbolDeclarationLocation, checkFileResults: FSharpCheckFileResults, solution: Solution) = + let getSymbolUsesInSolution (symbol: FSharpSymbol, declLoc: SymbolDeclarationLocation, checkFileResults: FSharpCheckFileResults, + projectInfoManager: FSharpProjectOptionsManager, checker: FSharpChecker, solution: Solution, userOpName) = async { let toDict (symbolUseRanges: range seq) = let groups = @@ -57,7 +78,7 @@ module internal SymbolHelpers = | SymbolDeclarationLocation.CurrentDocument -> let! ct = Async.CancellationToken let symbolUses = checkFileResults.GetUsesOfSymbolInFile(symbol, ct) - return toDict (symbolUses |> Seq.map (fun symbolUse -> symbolUse.Range)) + return toDict (symbolUses |> Seq.map (fun symbolUse -> symbolUse.RangeAlternate)) | SymbolDeclarationLocation.Projects (projects, isInternalToProject) -> let symbolUseRanges = ImmutableArray.CreateBuilder() @@ -73,7 +94,7 @@ module internal SymbolHelpers = fun _ _ symbolUseRange -> async { symbolUseRanges.Add symbolUseRange } - let! _ = getSymbolUsesInProjects (symbol, projects, onFound) + let! _ = getSymbolUsesInProjects (symbol, projectInfoManager, checker, projects, onFound, userOpName) // Distinct these down because each TFM will produce a new 'project'. // Unless guarded by a #if define, symbols with the same range will be added N times @@ -91,23 +112,22 @@ module internal SymbolHelpers = // A better approach is to use something like createTextChangeCodeFix below, with a delayed function to compute a set of changes to be applied // simultaneously. But that doesn't work for this case, as we want a set of changes to apply acrosss the whole solution. - let changeAllSymbolReferences (document: Document, symbolSpan: TextSpan, textChanger: string -> string) + let changeAllSymbolReferences (document: Document, symbolSpan: TextSpan, textChanger: string -> string, projectInfoManager: FSharpProjectOptionsManager, checker: FSharpChecker, userOpName) : Async<(Func> * OriginalText) option> = asyncMaybe { - let userOpName = "changeAllSymbolReferences" do! Option.guard (symbolSpan.Length > 0) let! cancellationToken = liftAsync Async.CancellationToken let! sourceText = document.GetTextAsync(cancellationToken) let originalText = sourceText.ToString(symbolSpan) do! Option.guard (originalText.Length > 0) - - let! symbol = document.TryFindFSharpLexerSymbolAsync(symbolSpan.Start, SymbolLookupKind.Greedy, false, false, userOpName) + let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) + let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions + let! symbol = Tokenizer.getSymbolAtPosition(document.Id, sourceText, symbolSpan.Start, document.FilePath, defines, SymbolLookupKind.Greedy, false, false) + let! _, _, checkFileResults = checker.ParseAndCheckDocument(document, projectOptions, userOpName = userOpName) let textLine = sourceText.Lines.GetLineFromPosition(symbolSpan.Start) let textLinePos = sourceText.Lines.GetLinePosition(symbolSpan.Start) let fcsTextLineNumber = Line.fromZ textLinePos.Line - - let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(userOpName) |> liftAsync - let! symbolUse = checkFileResults.GetSymbolUseAtLocation(fcsTextLineNumber, symbol.Ident.idRange.EndColumn, textLine.ToString(), symbol.FullIsland) + let! symbolUse = checkFileResults.GetSymbolUseAtLocation(fcsTextLineNumber, symbol.Ident.idRange.EndColumn, textLine.Text.ToString(), symbol.FullIsland) let! declLoc = symbolUse.GetDeclarationLocation(document) let newText = textChanger originalText // defer finding all symbol uses throughout the solution @@ -115,7 +135,7 @@ module internal SymbolHelpers = Func<_,_>(fun (cancellationToken: CancellationToken) -> async { let! symbolUsesByDocumentId = - getSymbolUsesInSolution(symbolUse.Symbol, declLoc, checkFileResults, document.Project.Solution) + getSymbolUsesInSolution(symbolUse.Symbol, declLoc, checkFileResults, projectInfoManager, checker, document.Project.Solution, userOpName) let mutable solution = document.Project.Solution diff --git a/vsintegration/src/FSharp.Editor/LanguageService/Symbols.fs b/vsintegration/src/FSharp.Editor/LanguageService/Symbols.fs index 5f5d7fae794..45b1eb22b30 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/Symbols.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/Symbols.fs @@ -1,22 +1,34 @@ [] module internal Microsoft.VisualStudio.FSharp.Editor.Symbols +open System +open System.Collections.Generic open System.IO +open System.Threading +open System.Threading.Tasks +open System.Runtime.CompilerServices + open Microsoft.CodeAnalysis -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Symbols +open Microsoft.CodeAnalysis.Classification +open Microsoft.CodeAnalysis.Text + +open FSharp.Compiler +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.SyntaxTree + [] type SymbolDeclarationLocation = | CurrentDocument | Projects of Project list * isLocalForProject: bool + [] type SymbolUse = { SymbolUse: FSharpSymbolUse IsUsed: bool - FullNames: ShortIdent[] } + FullNames: Idents[] } + type FSharpSymbol with member this.IsInternalToProject = diff --git a/vsintegration/src/FSharp.Editor/LanguageService/TextViewCreationListener.fs b/vsintegration/src/FSharp.Editor/LanguageService/TextViewCreationListener.fs index 4d37f1c93cd..8dae5999bbc 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/TextViewCreationListener.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/TextViewCreationListener.fs @@ -58,6 +58,6 @@ type TextViewCreationListener [] (adaptersFactory: IVsEdit interface IVsTextViewCreationListener with - member _.VsTextViewCreated(textViewAdapter) = + member __.VsTextViewCreated(textViewAdapter) = let _textView = adaptersFactory.GetWpfTextView(textViewAdapter) initKeyBindings textViewAdapter \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/LanguageService/Tokenizer.fs b/vsintegration/src/FSharp.Editor/LanguageService/Tokenizer.fs index 722360d76f2..8a39d38ec29 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/Tokenizer.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/Tokenizer.fs @@ -13,19 +13,16 @@ open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Classification open Microsoft.CodeAnalysis.Text -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Symbols -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Tokenization +open FSharp.Compiler +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.SyntaxTree open Microsoft.VisualStudio.Core.Imaging open Microsoft.VisualStudio.Imaging open Microsoft.CodeAnalysis.ExternalAccess.FSharp -type private FSharpGlyph = FSharp.Compiler.EditorServices.FSharpGlyph +type private FSharpGlyph = FSharp.Compiler.SourceCodeServices.FSharpGlyph type private Glyph = Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpGlyph [] @@ -45,7 +42,7 @@ type internal LexerSymbol = Ident: Ident /// All parts of `LongIdent` FullIsland: string list } - member x.Range: Range = x.Ident.idRange + member x.Range: Range.range = x.Ident.idRange [] type internal SymbolLookupKind = @@ -58,13 +55,16 @@ type internal SymbolLookupKind = module internal Tokenizer = - let (|Public|Internal|Protected|Private|) (a: FSharpAccessibility) = - if a.IsPublic then Public - elif a.IsInternal then Internal - elif a.IsPrivate then Private - else Protected + let (|Public|Internal|Protected|Private|) (a: FSharpAccessibility option) = + match a with + | None -> Public + | Some a -> + if a.IsPublic then Public + elif a.IsInternal then Internal + elif a.IsPrivate then Private + else Protected - let FSharpGlyphToRoslynGlyph (glyph: FSharpGlyph, accessibility: FSharpAccessibility) = + let FSharpGlyphToRoslynGlyph (glyph: FSharpGlyph, accessibility: FSharpAccessibility option) = match glyph with | FSharpGlyph.Class | FSharpGlyph.Exception @@ -158,7 +158,7 @@ module internal Tokenizer = | Some symbol -> match symbol with | :? FSharpUnionCase as x -> - match x.Accessibility with + match Some x.Accessibility with | Public -> KnownImageIds.EnumerationPublic | Internal -> KnownImageIds.EnumerationInternal | Protected -> KnownImageIds.EnumerationProtected @@ -166,13 +166,13 @@ module internal Tokenizer = | :? FSharpActivePatternCase -> KnownImageIds.EnumerationPublic | :? FSharpField as x -> if x.IsLiteral then - match x.Accessibility with + match Some x.Accessibility with | Public -> KnownImageIds.ConstantPublic | Internal -> KnownImageIds.ConstantInternal | Protected -> KnownImageIds.ConstantProtected | Private -> KnownImageIds.ConstantPrivate else - match x.Accessibility with + match Some x.Accessibility with | Public -> KnownImageIds.FieldPublic | Internal -> KnownImageIds.FieldInternal | Protected -> KnownImageIds.FieldProtected @@ -180,57 +180,57 @@ module internal Tokenizer = | :? FSharpParameter -> KnownImageIds.Parameter | :? FSharpMemberOrFunctionOrValue as x -> if x.LiteralValue.IsSome then - match x.Accessibility with + match Some x.Accessibility with | Public -> KnownImageIds.ConstantPublic | Internal -> KnownImageIds.ConstantInternal | Protected -> KnownImageIds.ConstantProtected | Private -> KnownImageIds.ConstantPrivate elif x.IsExtensionMember then KnownImageIds.ExtensionMethod elif x.IsProperty || x.IsPropertyGetterMethod || x.IsPropertySetterMethod then - match x.Accessibility with + match Some x.Accessibility with | Public -> KnownImageIds.PropertyPublic | Internal -> KnownImageIds.PropertyInternal | Protected -> KnownImageIds.PropertyProtected | Private -> KnownImageIds.PropertyPrivate elif x.IsEvent then - match x.Accessibility with + match Some x.Accessibility with | Public -> KnownImageIds.EventPublic | Internal -> KnownImageIds.EventInternal | Protected -> KnownImageIds.EventProtected | Private -> KnownImageIds.EventPrivate else - match x.Accessibility with + match Some x.Accessibility with | Public -> KnownImageIds.MethodPublic | Internal -> KnownImageIds.MethodInternal | Protected -> KnownImageIds.MethodProtected | Private -> KnownImageIds.MethodPrivate | :? FSharpEntity as x -> if x.IsValueType then - match x.Accessibility with + match Some x.Accessibility with | Public -> KnownImageIds.StructurePublic | Internal -> KnownImageIds.StructureInternal | Protected -> KnownImageIds.StructureProtected | Private -> KnownImageIds.StructurePrivate elif x.IsFSharpModule then - match x.Accessibility with + match Some x.Accessibility with | Public -> KnownImageIds.ModulePublic | Internal -> KnownImageIds.ModuleInternal | Protected -> KnownImageIds.ModuleProtected | Private -> KnownImageIds.ModulePrivate elif x.IsEnum || x.IsFSharpUnion then - match x.Accessibility with + match Some x.Accessibility with | Public -> KnownImageIds.EnumerationPublic | Internal -> KnownImageIds.EnumerationInternal | Protected -> KnownImageIds.EnumerationProtected | Private -> KnownImageIds.EnumerationPrivate elif x.IsInterface then - match x.Accessibility with + match Some x.Accessibility with | Public -> KnownImageIds.InterfacePublic | Internal -> KnownImageIds.InterfaceInternal | Protected -> KnownImageIds.InterfaceProtected | Private -> KnownImageIds.InterfacePrivate elif x.IsDelegate then - match x.Accessibility with + match Some x.Accessibility with | Public -> KnownImageIds.DelegatePublic | Internal -> KnownImageIds.DelegateInternal | Protected -> KnownImageIds.DelegateProtected @@ -238,7 +238,7 @@ module internal Tokenizer = elif x.IsNamespace then KnownImageIds.Namespace else - match x.Accessibility with + match Some x.Accessibility with | Public -> KnownImageIds.ClassPublic | Internal -> KnownImageIds.ClassInternal | Protected -> KnownImageIds.ClassProtected @@ -255,7 +255,7 @@ module internal Tokenizer = | _ -> match symbol with | :? FSharpUnionCase as x -> - match x.Accessibility with + match Some x.Accessibility with | Public -> Glyph.EnumPublic | Internal -> Glyph.EnumInternal | Protected -> Glyph.EnumProtected @@ -263,13 +263,13 @@ module internal Tokenizer = | :? FSharpActivePatternCase -> Glyph.EnumPublic | :? FSharpField as x -> if x.IsLiteral then - match x.Accessibility with + match Some x.Accessibility with | Public -> Glyph.ConstantPublic | Internal -> Glyph.ConstantInternal | Protected -> Glyph.ConstantProtected | Private -> Glyph.ConstantPrivate else - match x.Accessibility with + match Some x.Accessibility with | Public -> Glyph.FieldPublic | Internal -> Glyph.FieldInternal | Protected -> Glyph.FieldProtected @@ -277,62 +277,62 @@ module internal Tokenizer = | :? FSharpParameter -> Glyph.Parameter | :? FSharpMemberOrFunctionOrValue as x -> if x.LiteralValue.IsSome then - match x.Accessibility with + match Some x.Accessibility with | Public -> Glyph.ConstantPublic | Internal -> Glyph.ConstantInternal | Protected -> Glyph.ConstantProtected | Private -> Glyph.ConstantPrivate elif x.IsExtensionMember then - match x.Accessibility with + match Some x.Accessibility with | Public -> Glyph.ExtensionMethodPublic | Internal -> Glyph.ExtensionMethodInternal | Protected -> Glyph.ExtensionMethodProtected | Private -> Glyph.ExtensionMethodPrivate elif x.IsProperty || x.IsPropertyGetterMethod || x.IsPropertySetterMethod then - match x.Accessibility with + match Some x.Accessibility with | Public -> Glyph.PropertyPublic | Internal -> Glyph.PropertyInternal | Protected -> Glyph.PropertyProtected | Private -> Glyph.PropertyPrivate elif x.IsEvent then - match x.Accessibility with + match Some x.Accessibility with | Public -> Glyph.EventPublic | Internal -> Glyph.EventInternal | Protected -> Glyph.EventProtected | Private -> Glyph.EventPrivate else - match x.Accessibility with + match Some x.Accessibility with | Public -> Glyph.MethodPublic | Internal -> Glyph.MethodInternal | Protected -> Glyph.MethodProtected | Private -> Glyph.MethodPrivate | :? FSharpEntity as x -> if x.IsValueType then - match x.Accessibility with + match Some x.Accessibility with | Public -> Glyph.StructurePublic | Internal -> Glyph.StructureInternal | Protected -> Glyph.StructureProtected | Private -> Glyph.StructurePrivate elif x.IsFSharpModule then - match x.Accessibility with + match Some x.Accessibility with | Public -> Glyph.ModulePublic | Internal -> Glyph.ModuleInternal | Protected -> Glyph.ModuleProtected | Private -> Glyph.ModulePrivate elif x.IsEnum || x.IsFSharpUnion then - match x.Accessibility with + match Some x.Accessibility with | Public -> Glyph.EnumPublic | Internal -> Glyph.EnumInternal | Protected -> Glyph.EnumProtected | Private -> Glyph.EnumPrivate elif x.IsInterface then - match x.Accessibility with + match Some x.Accessibility with | Public -> Glyph.InterfacePublic | Internal -> Glyph.InterfaceInternal | Protected -> Glyph.InterfaceProtected | Private -> Glyph.InterfacePrivate elif x.IsDelegate then - match x.Accessibility with + match Some x.Accessibility with | Public -> Glyph.DelegatePublic | Internal -> Glyph.DelegateInternal | Protected -> Glyph.DelegateProtected @@ -340,7 +340,7 @@ module internal Tokenizer = elif x.IsNamespace then Glyph.Namespace else - match x.Accessibility with + match Some x.Accessibility with | Public -> Glyph.ClassPublic | Internal -> Glyph.ClassInternal | Protected -> Glyph.ClassProtected @@ -723,8 +723,8 @@ module internal Tokenizer = Ident(identStr, Range.mkRange fileName - (Position.mkPos (linePos.Line + 1) token.LeftColumn) - (Position.mkPos (linePos.Line + 1) (token.RightColumn + 1))) + (Range.mkPos (linePos.Line + 1) token.LeftColumn) + (Range.mkPos (linePos.Line + 1) (token.RightColumn + 1))) FullIsland = partialName.QualifyingIdents @ [identStr] }) let private getCachedSourceLineData(documentKey: DocumentId, sourceText: SourceText, position: int, fileName: string, defines: string list) = @@ -827,7 +827,7 @@ module internal Tokenizer = else PrettyNaming.IsIdentifierPartCharacter c) let isFixableIdentifier (s: string) = - not (String.IsNullOrEmpty s) && FSharpKeywords.NormalizeIdentifierBackticks s |> isIdentifier + not (String.IsNullOrEmpty s) && Keywords.NormalizeIdentifierBackticks s |> isIdentifier let forbiddenChars = [| '.'; '+'; '$'; '&'; '['; ']'; '/'; '\\'; '*'; '\"' |] diff --git a/vsintegration/src/FSharp.Editor/LanguageService/WorkspaceExtensions.fs b/vsintegration/src/FSharp.Editor/LanguageService/WorkspaceExtensions.fs deleted file mode 100644 index 11a265d3b04..00000000000 --- a/vsintegration/src/FSharp.Editor/LanguageService/WorkspaceExtensions.fs +++ /dev/null @@ -1,217 +0,0 @@ -[] -module internal Microsoft.VisualStudio.FSharp.Editor.WorkspaceExtensions - -open System -open System.Runtime.CompilerServices -open System.Threading -open Microsoft.CodeAnalysis -open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis - -[] -module private CheckerExtensions = - - type FSharpChecker with - /// Parse the source text from the Roslyn document. - member checker.ParseDocument(document: Document, parsingOptions: FSharpParsingOptions, userOpName: string) = - async { - let! ct = Async.CancellationToken - let! sourceText = document.GetTextAsync(ct) |> Async.AwaitTask - - return! checker.ParseFile(document.FilePath, sourceText.ToFSharpSourceText(), parsingOptions, userOpName=userOpName) - } - - /// Parse and check the source text from the Roslyn document with possible stale results. - member checker.ParseAndCheckDocumentWithPossibleStaleResults(document: Document, options: FSharpProjectOptions, allowStaleResults: bool, userOpName: string) = - async { - let! ct = Async.CancellationToken - - let! sourceText = document.GetTextAsync(ct) |> Async.AwaitTask - let! textVersion = document.GetTextVersionAsync(ct) |> Async.AwaitTask - - let filePath = document.FilePath - let textVersionHash = textVersion.GetHashCode() - - let parseAndCheckFile = - async { - let! (parseResults, checkFileAnswer) = checker.ParseAndCheckFileInProject(filePath, textVersionHash, sourceText.ToFSharpSourceText(), options, userOpName=userOpName) - return - match checkFileAnswer with - | FSharpCheckFileAnswer.Aborted -> - None - | FSharpCheckFileAnswer.Succeeded(checkFileResults) -> - Some (parseResults, checkFileResults) - } - - let tryGetFreshResultsWithTimeout() = - async { - let! worker = Async.StartChild(async { try return! parseAndCheckFile with | _ -> return None }, millisecondsTimeout=document.Project.FSharpTimeUntilStaleCompletion) - try - return! worker - with :? TimeoutException -> - return None // worker is cancelled at this point, we cannot return it and wait its completion anymore - } - - let bindParsedInput(results: (FSharpParseFileResults * FSharpCheckFileResults) option) = - match results with - | Some(parseResults, checkResults) -> - Some (parseResults, parseResults.ParseTree, checkResults) - | None -> None - - if allowStaleResults then - let! freshResults = tryGetFreshResultsWithTimeout() - - let! results = - match freshResults with - | Some x -> async.Return (Some x) - | None -> - async { - match checker.TryGetRecentCheckResultsForFile(filePath, options, userOpName=userOpName) with - | Some (parseResults, checkFileResults, _) -> - return Some (parseResults, checkFileResults) - | None -> - return! parseAndCheckFile - } - return bindParsedInput results - else - let! results = parseAndCheckFile - return bindParsedInput results - } - - /// Parse and check the source text from the Roslyn document. - member checker.ParseAndCheckDocument(document: Document, options: FSharpProjectOptions, userOpName: string, ?allowStaleResults: bool) = - async { - let allowStaleResults = - match allowStaleResults with - | Some b -> b - | _ -> document.Project.IsFSharpStaleCompletionResultsEnabled - return! checker.ParseAndCheckDocumentWithPossibleStaleResults(document, options, allowStaleResults, userOpName=userOpName) - } - -[] -module private ProjectCache = - - /// This is a cache to maintain FSharpParsingOptions and FSharpProjectOptions per Roslyn Project. - /// The Roslyn Project is held weakly meaning when it is cleaned up by the GC, the FSharParsingOptions and FSharpProjectOptions will be cleaned up by the GC. - /// At some point, this will be the main caching mechanism for FCS projects instead of FCS itself. - let Projects = ConditionalWeakTable() - -type Solution with - - /// Get the instance of IFSharpWorkspaceService. - member private this.GetFSharpWorkspaceService() = - this.Workspace.Services.GetRequiredService() - -type Document with - - /// Get the FSharpParsingOptions and FSharpProjectOptions from the F# project that is associated with the given F# document. - member this.GetFSharpCompilationOptionsAsync(userOpName) = - async { - if this.Project.IsFSharp then - match ProjectCache.Projects.TryGetValue(this.Project) with - | true, result -> return result - | _ -> - let service = this.Project.Solution.GetFSharpWorkspaceService() - let projectOptionsManager = service.FSharpProjectOptionsManager - let! ct = Async.CancellationToken - match! projectOptionsManager.TryGetOptionsForDocumentOrProject(this, ct, userOpName) with - | None -> return raise(System.OperationCanceledException("FSharp project options not found.")) - | Some(parsingOptions, _, projectOptions) -> - let result = (service.Checker, projectOptionsManager, parsingOptions, projectOptions) - return ProjectCache.Projects.GetValue(this.Project, Runtime.CompilerServices.ConditionalWeakTable<_,_>.CreateValueCallback(fun _ -> result)) - else - return raise(System.OperationCanceledException("Document is not a FSharp document.")) - } - - /// Get the compilation defines from F# project that is associated with the given F# document. - member this.GetFSharpCompilationDefinesAsync(userOpName) = - async { - let! _, _, parsingOptions, _ = this.GetFSharpCompilationOptionsAsync(userOpName) - return CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions - } - - /// Get the instance of the FSharpChecker from the workspace by the given F# document. - member this.GetFSharpChecker() = - let workspaceService = this.Project.Solution.GetFSharpWorkspaceService() - workspaceService.Checker - - /// A non-async call that quickly gets FSharpParsingOptions of the given F# document. - /// This tries to get the FSharpParsingOptions by looking at an internal cache; if it doesn't exist in the cache it will create an inaccurate but usable form of the FSharpParsingOptions. - member this.GetFSharpQuickParsingOptions() = - let workspaceService = this.Project.Solution.GetFSharpWorkspaceService() - workspaceService.FSharpProjectOptionsManager.TryGetQuickParsingOptionsForEditingDocumentOrProject(this) - - /// A non-async call that quickly gets the defines of the given F# document. - /// This tries to get the defines by looking at an internal cache; if it doesn't exist in the cache it will create an inaccurate but usable form of the defines. - member this.GetFSharpQuickDefines() = - let workspaceService = this.Project.Solution.GetFSharpWorkspaceService() - workspaceService.FSharpProjectOptionsManager.GetCompilationDefinesForEditingDocument(this) - - /// Parses the given F# document. - member this.GetFSharpParseResultsAsync(userOpName) = - async { - let! checker, _, parsingOptions, _ = this.GetFSharpCompilationOptionsAsync(userOpName) - return! checker.ParseDocument(this, parsingOptions, userOpName) - } - - /// Parses and checks the given F# document. - member this.GetFSharpParseAndCheckResultsAsync(userOpName) = - async { - let! checker, _, _, projectOptions = this.GetFSharpCompilationOptionsAsync(userOpName) - match! checker.ParseAndCheckDocument(this, projectOptions, userOpName, allowStaleResults = false) with - | Some(parseResults, _, checkResults) -> - return (parseResults, checkResults) - | _ -> - return raise(System.OperationCanceledException("Unable to get FSharp parse and check results.")) - } - - /// Get the semantic classifications of the given F# document. - member this.GetFSharpSemanticClassificationAsync(userOpName) = - async { - let! checker, _, _, projectOptions = this.GetFSharpCompilationOptionsAsync(userOpName) - match! checker.GetBackgroundSemanticClassificationForFile(this.FilePath, projectOptions) with - | Some results -> return results - | _ -> return raise(System.OperationCanceledException("Unable to get FSharp semantic classification.")) - } - - /// Find F# references in the given F# document. - member this.FindFSharpReferencesAsync(symbol, onFound, userOpName) = - async { - let! checker, _, _, projectOptions = this.GetFSharpCompilationOptionsAsync(userOpName) - let! symbolUses = checker.FindBackgroundReferencesInFile(this.FilePath, projectOptions, symbol, canInvalidateProject = false) - let! ct = Async.CancellationToken - let! sourceText = this.GetTextAsync ct |> Async.AwaitTask - for symbolUse in symbolUses do - match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse) with - | Some textSpan -> - do! onFound textSpan symbolUse - | _ -> - () - } - - /// Try to find a F# lexer/token symbol of the given F# document and position. - member this.TryFindFSharpLexerSymbolAsync(position, lookupKind, wholeActivePattern, allowStringToken, userOpName) = - async { - let! defines = this.GetFSharpCompilationDefinesAsync(userOpName) - let! ct = Async.CancellationToken - let! sourceText = this.GetTextAsync(ct) |> Async.AwaitTask - return Tokenizer.getSymbolAtPosition(this.Id, sourceText, position, this.FilePath, defines, lookupKind, wholeActivePattern, allowStringToken) - } - - /// This is only used for testing purposes. It sets the ProjectCache.Projects with the given FSharpProjectOptions and F# document's project. - member this.SetFSharpProjectOptionsForTesting(projectOptions: FSharpProjectOptions) = - let workspaceService = this.Project.Solution.GetFSharpWorkspaceService() - let parsingOptions, _, _ = - workspaceService.FSharpProjectOptionsManager.TryGetOptionsForDocumentOrProject(this, CancellationToken.None, nameof(this.SetFSharpProjectOptionsForTesting)) - |> Async.RunSynchronously - |> Option.get - ProjectCache.Projects.Add(this.Project, (workspaceService.Checker, workspaceService.FSharpProjectOptionsManager, parsingOptions, projectOptions)) - -type Project with - - /// Find F# references in the given project. - member this.FindFSharpReferencesAsync(symbol, onFound, userOpName) = - async { - for doc in this.Documents do - do! doc.FindFSharpReferencesAsync(symbol, (fun textSpan range -> onFound doc textSpan range), userOpName) - } diff --git a/vsintegration/src/FSharp.Editor/Navigation/FindUsagesService.fs b/vsintegration/src/FSharp.Editor/Navigation/FindUsagesService.fs index 2819eb65d38..e60aa9f4db1 100644 --- a/vsintegration/src/FSharp.Editor/Navigation/FindUsagesService.fs +++ b/vsintegration/src/FSharp.Editor/Navigation/FindUsagesService.fs @@ -2,6 +2,7 @@ namespace Microsoft.VisualStudio.FSharp.Editor +open System.Threading open System.Collections.Immutable open System.Composition @@ -10,17 +11,19 @@ open Microsoft.CodeAnalysis.ExternalAccess.FSharp open Microsoft.CodeAnalysis.ExternalAccess.FSharp.FindUsages open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor.FindUsages -open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Text +open FSharp.Compiler.Range +open FSharp.Compiler.SourceCodeServices open Microsoft.CodeAnalysis.Text [)>] type internal FSharpFindUsagesService [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = + + static let userOpName = "FindUsages" // File can be included in more than one project, hence single `range` may results with multiple `Document`s. let rangeToDocumentSpans (solution: Solution, range: range) = @@ -44,21 +47,24 @@ type internal FSharpFindUsagesService return spans |> Array.choose id |> Array.toList } - let findReferencedSymbolsAsync(document: Document, position: int, context: IFSharpFindUsagesContext, allReferences: bool) : Async = + let findReferencedSymbolsAsync(document: Document, position: int, context: IFSharpFindUsagesContext, allReferences: bool, userOpName: string) : Async = asyncMaybe { let! sourceText = document.GetTextAsync(context.CancellationToken) |> Async.AwaitTask |> liftAsync + let checker = checkerProvider.Checker + let! parsingOptions, _, projectOptions = projectInfoManager.TryGetOptionsForDocumentOrProject(document, context.CancellationToken, userOpName) + let! _, _, checkFileResults = checker.ParseAndCheckDocument(document, projectOptions, sourceText = sourceText, userOpName = userOpName) let textLine = sourceText.Lines.GetLineFromPosition(position).ToString() let lineNumber = sourceText.Lines.GetLinePosition(position).Line + 1 - let! symbol = document.TryFindFSharpLexerSymbolAsync(position, SymbolLookupKind.Greedy, false, false, "findReferencedSymbolsAsync") + let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions - let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpFindUsagesService)) |> liftAsync + let! symbol = Tokenizer.getSymbolAtPosition(document.Id, sourceText, position, document.FilePath, defines, SymbolLookupKind.Greedy, false, false) let! symbolUse = checkFileResults.GetSymbolUseAtLocation(lineNumber, symbol.Ident.idRange.EndColumn, textLine, symbol.FullIsland) let declaration = checkFileResults.GetDeclarationLocation (lineNumber, symbol.Ident.idRange.EndColumn, textLine, symbol.FullIsland, false) let tags = FSharpGlyphTags.GetTags(Tokenizer.GetGlyphForSymbol (symbolUse.Symbol, symbol.Kind)) let declarationRange = match declaration with - | FindDeclResult.DeclFound range -> Some range + | FSharpFindDeclResult.DeclFound range -> Some range | _ -> None let! declarationSpans = async { @@ -67,8 +73,8 @@ type internal FSharpFindUsagesService | None -> return! async.Return [] } |> liftAsync let isExternal = declarationSpans |> List.isEmpty - let displayParts = ImmutableArray.Create(Microsoft.CodeAnalysis.TaggedText(TextTags.Text, symbol.Ident.idText)) - let originationParts = ImmutableArray.Create(Microsoft.CodeAnalysis.TaggedText(TextTags.Assembly, symbolUse.Symbol.Assembly.SimpleName)) + let displayParts = ImmutableArray.Create(TaggedText(TextTags.Text, symbol.Ident.idText)) + let originationParts = ImmutableArray.Create(TaggedText(TextTags.Assembly, symbolUse.Symbol.Assembly.SimpleName)) let externalDefinitionItem = FSharpDefinitionItem.CreateNonNavigableItem(tags, displayParts, originationParts) let definitionItems = declarationSpans @@ -84,7 +90,7 @@ type internal FSharpFindUsagesService fun (doc: Document) (textSpan: TextSpan) (symbolUse: range) -> async { match declarationRange with - | Some declRange when Range.equals declRange symbolUse -> () + | Some declRange when FSharp.Compiler.Range.equals declRange symbolUse -> () | _ -> if allReferences then let definitionItem = @@ -104,9 +110,9 @@ type internal FSharpFindUsagesService | Some SymbolDeclarationLocation.CurrentDocument -> let symbolUses = checkFileResults.GetUsesOfSymbolInFile(symbolUse.Symbol) for symbolUse in symbolUses do - match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.Range) with + match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.RangeAlternate) with | Some textSpan -> - do! onFound document textSpan symbolUse.Range |> liftAsync + do! onFound document textSpan symbolUse.RangeAlternate |> liftAsync | _ -> () | scope -> @@ -122,15 +128,15 @@ type internal FSharpFindUsagesService // In order to find all its usages we have to check all F# projects. | _ -> Seq.toList document.Project.Solution.Projects - let! _ = SymbolHelpers.getSymbolUsesInProjects (symbolUse.Symbol, projectsToCheck, onFound) |> liftAsync + let! _ = SymbolHelpers.getSymbolUsesInProjects (symbolUse.Symbol, projectInfoManager, checker, projectsToCheck, onFound, userOpName) |> liftAsync () } |> Async.Ignore interface IFSharpFindUsagesService with - member _.FindReferencesAsync(document, position, context) = - findReferencedSymbolsAsync(document, position, context, true) + member __.FindReferencesAsync(document, position, context) = + findReferencedSymbolsAsync(document, position, context, true, userOpName) |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) - member _.FindImplementationsAsync(document, position, context) = - findReferencedSymbolsAsync(document, position, context, false) + member __.FindImplementationsAsync(document, position, context) = + findReferencedSymbolsAsync(document, position, context, false, userOpName) |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/Navigation/GoToDefinition.fs b/vsintegration/src/FSharp.Editor/Navigation/GoToDefinition.fs index 90474acfd3c..7de8934fed6 100644 --- a/vsintegration/src/FSharp.Editor/Navigation/GoToDefinition.fs +++ b/vsintegration/src/FSharp.Editor/Navigation/GoToDefinition.fs @@ -8,21 +8,18 @@ open System.Collections.Immutable open System.Diagnostics open System.IO open System.Linq +open System.Runtime.InteropServices open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.FindSymbols open Microsoft.CodeAnalysis.Text +open Microsoft.CodeAnalysis.Navigation open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Navigation -open Microsoft.VisualStudio open Microsoft.VisualStudio.Shell.Interop -open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Text -open FSharp.Compiler.Symbols - +open FSharp.Compiler.Range +open FSharp.Compiler.SourceCodeServices module private Symbol = let fullName (root: ISymbol) : string = @@ -40,40 +37,42 @@ module private Symbol = inner [] root |> String.concat "." -module private FindDeclExternalType = - let rec tryOfRoslynType (typesym: ITypeSymbol): FindDeclExternalType option = +module private ExternalType = + let rec tryOfRoslynType (typesym: ITypeSymbol): ExternalType option = match typesym with | :? IPointerTypeSymbol as ptrparam -> - tryOfRoslynType ptrparam.PointedAtType |> Option.map FindDeclExternalType.Pointer + tryOfRoslynType ptrparam.PointedAtType |> Option.map ExternalType.Pointer | :? IArrayTypeSymbol as arrparam -> - tryOfRoslynType arrparam.ElementType |> Option.map FindDeclExternalType.Array + tryOfRoslynType arrparam.ElementType |> Option.map ExternalType.Array | :? ITypeParameterSymbol as typaram -> - Some (FindDeclExternalType.TypeVar typaram.Name) + Some (ExternalType.TypeVar typaram.Name) | :? INamedTypeSymbol as namedTypeSym -> namedTypeSym.TypeArguments |> Seq.map tryOfRoslynType |> List.ofSeq |> Option.ofOptionList |> Option.map (fun genericArgs -> - FindDeclExternalType.Type (Symbol.fullName typesym, genericArgs)) + ExternalType.Type (Symbol.fullName typesym, genericArgs)) | _ -> Debug.Assert(false, sprintf "GoToDefinitionService: Unexpected Roslyn type symbol subclass: %O" (typesym.GetType())) None -module private FindDeclExternalParam = +module private ParamTypeSymbol = - let tryOfRoslynParameter (param: IParameterSymbol): FindDeclExternalParam option = - FindDeclExternalType.tryOfRoslynType param.Type - |> Option.map (fun ty -> FindDeclExternalParam.Create(ty, param.RefKind <> RefKind.None)) + let tryOfRoslynParameter (param: IParameterSymbol): ParamTypeSymbol option = + ExternalType.tryOfRoslynType param.Type + |> Option.map ( + if param.RefKind = RefKind.None then ParamTypeSymbol.Param + else ParamTypeSymbol.Byref) - let tryOfRoslynParameters (paramSyms: ImmutableArray): FindDeclExternalParam list option = + let tryOfRoslynParameters (paramSyms: ImmutableArray): ParamTypeSymbol list option = paramSyms |> Seq.map tryOfRoslynParameter |> Seq.toList |> Option.ofOptionList module private ExternalSymbol = - let rec ofRoslynSymbol (symbol: ISymbol) : (ISymbol * FindDeclExternalSymbol) list = + let rec ofRoslynSymbol (symbol: ISymbol) : (ISymbol * ExternalSymbol) list = let container = Symbol.fullName symbol.ContainingSymbol match symbol with @@ -82,28 +81,28 @@ module private ExternalSymbol = let constructors = typesym.InstanceConstructors - |> Seq.choose<_,ISymbol * FindDeclExternalSymbol> (fun methsym -> - FindDeclExternalParam.tryOfRoslynParameters methsym.Parameters - |> Option.map (fun args -> upcast methsym, FindDeclExternalSymbol.Constructor(fullTypeName, args)) + |> Seq.choose<_,ISymbol * ExternalSymbol> (fun methsym -> + ParamTypeSymbol.tryOfRoslynParameters methsym.Parameters + |> Option.map (fun args -> upcast methsym, ExternalSymbol.Constructor(fullTypeName, args)) ) |> List.ofSeq - (symbol, FindDeclExternalSymbol.Type fullTypeName) :: constructors + (symbol, ExternalSymbol.Type fullTypeName) :: constructors | :? IMethodSymbol as methsym -> - FindDeclExternalParam.tryOfRoslynParameters methsym.Parameters + ParamTypeSymbol.tryOfRoslynParameters methsym.Parameters |> Option.map (fun args -> - symbol, FindDeclExternalSymbol.Method(container, methsym.MetadataName, args, methsym.TypeParameters.Length)) + symbol, ExternalSymbol.Method(container, methsym.MetadataName, args, methsym.TypeParameters.Length)) |> Option.toList | :? IPropertySymbol as propsym -> - [upcast propsym, FindDeclExternalSymbol.Property(container, propsym.MetadataName)] + [upcast propsym, ExternalSymbol.Property(container, propsym.MetadataName)] | :? IFieldSymbol as fieldsym -> - [upcast fieldsym, FindDeclExternalSymbol.Field(container, fieldsym.MetadataName)] + [upcast fieldsym, ExternalSymbol.Field(container, fieldsym.MetadataName)] | :? IEventSymbol as eventsym -> - [upcast eventsym, FindDeclExternalSymbol.Event(container, eventsym.MetadataName)] + [upcast eventsym, ExternalSymbol.Event(container, eventsym.MetadataName)] | _ -> [] @@ -116,7 +115,7 @@ type internal StatusBar(statusBar: IVsStatusbar) = statusBar.FreezeOutput 0 |> ignore statusBar.Clear() |> ignore - member _.Message(_msg: string) = + member __.Message(_msg: string) = () //let _, frozen = statusBar.IsFrozen() //// unfreeze the status bar @@ -135,23 +134,19 @@ type internal StatusBar(statusBar: IVsStatusbar) = // | _ -> clear() //}|> Async.Start - member _.Clear() = () //clear() + member __.Clear() = () //clear() /// Animated magnifying glass that displays on the status bar while a symbol search is in progress. - member _.Animate() : IDisposable = + member __.Animate() : IDisposable = //statusBar.Animation (1, &searchIcon) |> ignore { new IDisposable with - member _.Dispose() = () } //statusBar.Animation(0, &searchIcon) |> ignore } + member __.Dispose() = () } //statusBar.Animation(0, &searchIcon) |> ignore } type internal FSharpGoToDefinitionNavigableItem(document, sourceSpan) = inherit FSharpNavigableItem(Glyph.BasicFile, ImmutableArray.Empty, document, sourceSpan) -[] -type internal FSharpGoToDefinitionResult = - | NavigableItem of FSharpNavigableItem - | ExternalAssembly of FSharpSymbolUse * MetadataReference seq - -type internal GoToDefinition(metadataAsSource: FSharpMetadataAsSourceService) = +type internal GoToDefinition(checker: FSharpChecker, projectInfoManager: FSharpProjectOptionsManager) = + let userOpName = "GoToDefinition" /// Use an origin document to provide the solution & workspace used to /// find the corresponding textSpan and INavigableItem for the range @@ -171,18 +166,20 @@ type internal GoToDefinition(metadataAsSource: FSharpMetadataAsSourceService) = } /// Helper function that is used to determine the navigation strategy to apply, can be tuned towards signatures or implementation files. - member private _.FindSymbolHelper (originDocument: Document, originRange: range, sourceText: SourceText, preferSignature: bool) = + member private __.FindSymbolHelper (originDocument: Document, originRange: range, sourceText: SourceText, preferSignature: bool) = asyncMaybe { - let userOpName = "FindSymbolHelper" + let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(originDocument, CancellationToken.None, userOpName) + let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions let! originTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (sourceText, originRange) let position = originTextSpan.Start - let! lexerSymbol = originDocument.TryFindFSharpLexerSymbolAsync(position, SymbolLookupKind.Greedy, false, false, userOpName) + let! lexerSymbol = Tokenizer.getSymbolAtPosition (originDocument.Id, sourceText, position, originDocument.FilePath, defines, SymbolLookupKind.Greedy, false, false) + let textLinePos = sourceText.Lines.GetLinePosition position let fcsTextLineNumber = Line.fromZ textLinePos.Line let lineText = (sourceText.Lines.GetLineFromPosition position).ToString() + + let! _, _, checkFileResults = checker.ParseAndCheckDocument (originDocument, projectOptions, sourceText=sourceText, userOpName=userOpName) let idRange = lexerSymbol.Ident.idRange - - let! _, checkFileResults = originDocument.GetFSharpParseAndCheckResultsAsync(nameof(GoToDefinition)) |> liftAsync let! fsSymbolUse = checkFileResults.GetSymbolUseAtLocation (fcsTextLineNumber, idRange.EndColumn, lineText, lexerSymbol.FullIsland) let symbol = fsSymbolUse.Symbol // if the tooltip was spawned in an implementation file and we have a range targeting @@ -193,132 +190,130 @@ type internal GoToDefinition(metadataAsSource: FSharpMetadataAsSourceService) = if not (File.Exists fsfilePath) then return! None else let! implDoc = originDocument.Project.Solution.TryGetDocumentFromPath fsfilePath let! implSourceText = implDoc.GetTextAsync () - let! _, checkFileResults = implDoc.GetFSharpParseAndCheckResultsAsync(userOpName) |> liftAsync + let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(implDoc, CancellationToken.None, userOpName) + let! _, _, checkFileResults = checker.ParseAndCheckDocument (implDoc, projectOptions, sourceText=implSourceText, userOpName=userOpName) let symbolUses = checkFileResults.GetUsesOfSymbolInFile symbol let! implSymbol = symbolUses |> Array.tryHead - let! implTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (implSourceText, implSymbol.Range) + let! implTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (implSourceText, implSymbol.RangeAlternate) return FSharpGoToDefinitionNavigableItem (implDoc, implTextSpan) else - let! targetDocument = originDocument.Project.Solution.TryGetDocumentFromFSharpRange fsSymbolUse.Range - return! rangeToNavigableItem (fsSymbolUse.Range, targetDocument) + let! targetDocument = originDocument.Project.Solution.TryGetDocumentFromFSharpRange fsSymbolUse.RangeAlternate + return! rangeToNavigableItem (fsSymbolUse.RangeAlternate, targetDocument) } /// if the symbol is defined in the given file, return its declaration location, otherwise use the targetSymbol to find the first /// instance of its presence in the provided source file. The first case is needed to return proper declaration location for /// recursive type definitions, where the first its usage may not be the declaration. - member _.FindSymbolDeclarationInDocument(targetSymbolUse: FSharpSymbolUse, document: Document) = + member __.FindSymbolDeclarationInFile(targetSymbolUse: FSharpSymbolUse, filePath: string, sourceText: SourceText, options: FSharpProjectOptions, fileVersion:int) = asyncMaybe { - let filePath = document.FilePath match targetSymbolUse.Symbol.DeclarationLocation with | Some decl when decl.FileName = filePath -> return decl | _ -> - let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync("FindSymbolDeclarationInDocument") |> liftAsync - let symbolUses = checkFileResults.GetUsesOfSymbolInFile targetSymbolUse.Symbol - let! implSymbol = symbolUses |> Array.tryHead - return implSymbol.Range + let! _, checkFileAnswer = checker.ParseAndCheckFileInProject (filePath, fileVersion, sourceText.ToFSharpSourceText(), options, userOpName = userOpName) |> liftAsync + match checkFileAnswer with + | FSharpCheckFileAnswer.Aborted -> return! None + | FSharpCheckFileAnswer.Succeeded checkFileResults -> + let symbolUses = checkFileResults.GetUsesOfSymbolInFile targetSymbolUse.Symbol + let! implSymbol = symbolUses |> Array.tryHead + return implSymbol.RangeAlternate } - member private this.FindDefinitionAtPosition(originDocument: Document, position: int, cancellationToken: CancellationToken) = + member private this.FindDefinitionAtPosition(originDocument: Document, position: int) = asyncMaybe { - let userOpName = "FindDefinitionAtPosition" - let! sourceText = originDocument.GetTextAsync(cancellationToken) + let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(originDocument, CancellationToken.None, userOpName) + let! sourceText = originDocument.GetTextAsync () |> liftTaskAsync + let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions let textLine = sourceText.Lines.GetLineFromPosition position let textLinePos = sourceText.Lines.GetLinePosition position - let textLineString = textLine.ToString() let fcsTextLineNumber = Line.fromZ textLinePos.Line let lineText = (sourceText.Lines.GetLineFromPosition position).ToString() let preferSignature = isSignatureFile originDocument.FilePath + + let! _, _, checkFileResults = checker.ParseAndCheckDocument (originDocument, projectOptions, sourceText=sourceText, userOpName=userOpName) - let! lexerSymbol = originDocument.TryFindFSharpLexerSymbolAsync(position, SymbolLookupKind.Greedy, false, false, userOpName) + let! lexerSymbol = Tokenizer.getSymbolAtPosition (originDocument.Id, sourceText, position,originDocument.FilePath, defines, SymbolLookupKind.Greedy, false, false) let idRange = lexerSymbol.Ident.idRange - let! _, checkFileResults = originDocument.GetFSharpParseAndCheckResultsAsync(userOpName) |> liftAsync - let declarations = checkFileResults.GetDeclarationLocation (fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLineString, lexerSymbol.FullIsland, preferSignature) + let declarations = checkFileResults.GetDeclarationLocation (fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLine.ToString(), lexerSymbol.FullIsland, preferSignature) let! targetSymbolUse = checkFileResults.GetSymbolUseAtLocation (fcsTextLineNumber, idRange.EndColumn, lineText, lexerSymbol.FullIsland) match declarations with - | FindDeclResult.ExternalDecl (assembly, targetExternalSym) -> - let projectOpt = originDocument.Project.Solution.Projects |> Seq.tryFind (fun p -> p.AssemblyName.Equals(assembly, StringComparison.OrdinalIgnoreCase)) - match projectOpt with - | Some project -> - let! symbols = SymbolFinder.FindSourceDeclarationsAsync(project, fun _ -> true) - - let roslynSymbols = - symbols - |> Seq.collect ExternalSymbol.ofRoslynSymbol - |> Array.ofSeq - - let! symbol = - roslynSymbols - |> Seq.tryPick (fun (sym, externalSym) -> - if externalSym = targetExternalSym then Some sym - else None - ) - - let! location = symbol.Locations |> Seq.tryHead - return (FSharpGoToDefinitionResult.NavigableItem(FSharpGoToDefinitionNavigableItem(project.GetDocument(location.SourceTree), location.SourceSpan)), idRange) - | _ -> - let metadataReferences = originDocument.Project.MetadataReferences - return (FSharpGoToDefinitionResult.ExternalAssembly(targetSymbolUse, metadataReferences), idRange) - - | FindDeclResult.DeclFound targetRange -> - // If the file is not associated with a document, it's considered external. - if not (originDocument.Project.Solution.ContainsDocumentWithFilePath(targetRange.FileName)) then - let metadataReferences = originDocument.Project.MetadataReferences - return (FSharpGoToDefinitionResult.ExternalAssembly(targetSymbolUse, metadataReferences), idRange) - else - // if goto definition is called at we are alread at the declaration location of a symbol in - // either a signature or an implementation file then we jump to it's respective postion in thethe - if lexerSymbol.Range = targetRange then - // jump from signature to the corresponding implementation - if isSignatureFile originDocument.FilePath then - let implFilePath = Path.ChangeExtension (originDocument.FilePath,"fs") - if not (File.Exists implFilePath) then return! None else - let! implDocument = originDocument.Project.Solution.TryGetDocumentFromPath implFilePath + | FSharpFindDeclResult.ExternalDecl (assembly, targetExternalSym) -> + let! project = originDocument.Project.Solution.Projects |> Seq.tryFind (fun p -> p.AssemblyName.Equals(assembly, StringComparison.OrdinalIgnoreCase)) + let! symbols = SymbolFinder.FindSourceDeclarationsAsync(project, fun _ -> true) + + let roslynSymbols = + symbols + |> Seq.collect ExternalSymbol.ofRoslynSymbol + |> Array.ofSeq + + let! symbol = + roslynSymbols + |> Seq.tryPick (fun (sym, externalSym) -> + if externalSym = targetExternalSym then Some sym + else None + ) + + let! location = symbol.Locations |> Seq.tryHead + return (FSharpGoToDefinitionNavigableItem(project.GetDocument(location.SourceTree), location.SourceSpan), idRange) + + | FSharpFindDeclResult.DeclFound targetRange -> + // if goto definition is called at we are alread at the declaration location of a symbol in + // either a signature or an implementation file then we jump to it's respective postion in thethe + if lexerSymbol.Range = targetRange then + // jump from signature to the corresponding implementation + if isSignatureFile originDocument.FilePath then + let implFilePath = Path.ChangeExtension (originDocument.FilePath,"fs") + if not (File.Exists implFilePath) then return! None else + let! implDocument = originDocument.Project.Solution.TryGetDocumentFromPath implFilePath + let! implSourceText = implDocument.GetTextAsync () |> liftTaskAsync + let! implVersion = implDocument.GetTextVersionAsync () |> liftTaskAsync - let! targetRange = this.FindSymbolDeclarationInDocument(targetSymbolUse, implDocument) - let! implSourceText = implDocument.GetTextAsync(cancellationToken) |> liftTaskAsync - let! implTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (implSourceText, targetRange) - let navItem = FSharpGoToDefinitionNavigableItem (implDocument, implTextSpan) - return (FSharpGoToDefinitionResult.NavigableItem(navItem), idRange) - else // jump from implementation to the corresponding signature - let declarations = checkFileResults.GetDeclarationLocation (fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLineString, lexerSymbol.FullIsland, true) - match declarations with - | FindDeclResult.DeclFound targetRange -> - let! sigDocument = originDocument.Project.Solution.TryGetDocumentFromPath targetRange.FileName - let! sigSourceText = sigDocument.GetTextAsync(cancellationToken) |> liftTaskAsync - let! sigTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (sigSourceText, targetRange) - let navItem = FSharpGoToDefinitionNavigableItem (sigDocument, sigTextSpan) - return (FSharpGoToDefinitionResult.NavigableItem(navItem), idRange) - | _ -> - return! None - // when the target range is different follow the navigation convention of - // - gotoDefn origin = signature , gotoDefn destination = signature - // - gotoDefn origin = implementation, gotoDefn destination = implementation - else - let! sigDocument = originDocument.Project.Solution.TryGetDocumentFromPath targetRange.FileName - let! sigSourceText = sigDocument.GetTextAsync(cancellationToken) |> liftTaskAsync - let! sigTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (sigSourceText, targetRange) - // if the gotodef call originated from a signature and the returned target is a signature, navigate there - if isSignatureFile targetRange.FileName && preferSignature then + let! targetRange = this.FindSymbolDeclarationInFile(targetSymbolUse, implFilePath, implSourceText, projectOptions, implVersion.GetHashCode()) + + let! implTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (implSourceText, targetRange) + let navItem = FSharpGoToDefinitionNavigableItem (implDocument, implTextSpan) + return (navItem, idRange) + else // jump from implementation to the corresponding signature + let declarations = checkFileResults.GetDeclarationLocation (fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLine.ToString(), lexerSymbol.FullIsland, true) + match declarations with + | FSharpFindDeclResult.DeclFound targetRange -> + let! sigDocument = originDocument.Project.Solution.TryGetDocumentFromPath targetRange.FileName + let! sigSourceText = sigDocument.GetTextAsync () |> liftTaskAsync + let! sigTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (sigSourceText, targetRange) let navItem = FSharpGoToDefinitionNavigableItem (sigDocument, sigTextSpan) - return (FSharpGoToDefinitionResult.NavigableItem(navItem), idRange) - else // we need to get an FSharpSymbol from the targetRange found in the signature - // that symbol will be used to find the destination in the corresponding implementation file - let implFilePath = - // Bugfix: apparently sigDocument not always is a signature file - if isSignatureFile sigDocument.FilePath then Path.ChangeExtension (sigDocument.FilePath, "fs") - else sigDocument.FilePath - - let! implDocument = originDocument.Project.Solution.TryGetDocumentFromPath implFilePath + return (navItem, idRange) + | _ -> + return! None + // when the target range is different follow the navigation convention of + // - gotoDefn origin = signature , gotoDefn destination = signature + // - gotoDefn origin = implementation, gotoDefn destination = implementation + else + let! sigDocument = originDocument.Project.Solution.TryGetDocumentFromPath targetRange.FileName + let! sigSourceText = sigDocument.GetTextAsync () |> liftTaskAsync + let! sigTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (sigSourceText, targetRange) + // if the gotodef call originated from a signature and the returned target is a signature, navigate there + if isSignatureFile targetRange.FileName && preferSignature then + let navItem = FSharpGoToDefinitionNavigableItem (sigDocument, sigTextSpan) + return (navItem, idRange) + else // we need to get an FSharpSymbol from the targetRange found in the signature + // that symbol will be used to find the destination in the corresponding implementation file + let implFilePath = + // Bugfix: apparently sigDocument not always is a signature file + if isSignatureFile sigDocument.FilePath then Path.ChangeExtension (sigDocument.FilePath, "fs") + else sigDocument.FilePath + + let! implDocument = originDocument.Project.Solution.TryGetDocumentFromPath implFilePath + let! implVersion = implDocument.GetTextVersionAsync () |> liftTaskAsync + let! implSourceText = implDocument.GetTextAsync () |> liftTaskAsync + let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(implDocument, CancellationToken.None, userOpName) - let! targetRange = this.FindSymbolDeclarationInDocument(targetSymbolUse, implDocument) + let! targetRange = this.FindSymbolDeclarationInFile(targetSymbolUse, implFilePath, implSourceText, projectOptions, implVersion.GetHashCode()) - let! implSourceText = implDocument.GetTextAsync () |> liftTaskAsync - let! implTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (implSourceText, targetRange) - let navItem = FSharpGoToDefinitionNavigableItem (implDocument, implTextSpan) - return (FSharpGoToDefinitionResult.NavigableItem(navItem), idRange) + let! implTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (implSourceText, targetRange) + let navItem = FSharpGoToDefinitionNavigableItem (implDocument, implTextSpan) + return (navItem, idRange) | _ -> return! None } @@ -332,21 +327,22 @@ type internal GoToDefinition(metadataAsSource: FSharpMetadataAsSourceService) = this.FindSymbolHelper(targetDocument, symbolRange, targetSourceText, preferSignature=false) member this.FindDefinitionsForPeekTask(originDocument: Document, position: int, cancellationToken: CancellationToken) = - this.FindDefinitionAtPosition(originDocument, position, cancellationToken) + this.FindDefinitionAtPosition(originDocument, position) |> Async.map ( - Option.toArray + Option.map (fun (navItem, _) -> navItem :> FSharpNavigableItem) + >> Option.toArray >> Array.toSeq) |> RoslynHelpers.StartAsyncAsTask cancellationToken /// Construct a task that will return a navigation target for the implementation definition of the symbol /// at the provided position in the document. member this.FindDefinitionTask(originDocument: Document, position: int, cancellationToken: CancellationToken) = - this.FindDefinitionAtPosition(originDocument, position, cancellationToken) + this.FindDefinitionAtPosition(originDocument, position) |> RoslynHelpers.StartAsyncAsTask cancellationToken /// Navigate to the positon of the textSpan in the provided document /// used by quickinfo link navigation when the tooltip contains the correct destination range. - member _.TryNavigateToTextSpan(document: Document, textSpan: Microsoft.CodeAnalysis.Text.TextSpan, statusBar: StatusBar) = + member __.TryNavigateToTextSpan(document: Document, textSpan: TextSpan, statusBar: StatusBar) = let navigableItem = FSharpGoToDefinitionNavigableItem(document, textSpan) let workspace = document.Project.Solution.Workspace let navigationService = workspace.Services.GetService() @@ -356,7 +352,7 @@ type internal GoToDefinition(metadataAsSource: FSharpMetadataAsSourceService) = if not navigationSucceeded then statusBar.TempMessage (SR.CannotNavigateUnknown()) - member _.NavigateToItem(navigableItem: FSharpNavigableItem, statusBar: StatusBar) = + member __.NavigateToItem(navigableItem: FSharpNavigableItem, statusBar: StatusBar) = use __ = statusBar.Animate() statusBar.Message (SR.NavigatingTo()) @@ -386,106 +382,3 @@ type internal GoToDefinition(metadataAsSource: FSharpMetadataAsSourceService) = let! item = this.FindDefinitionOfSymbolAtRange(targetDocument, symbolRange, targetSourceText) return this.NavigateToItem(item, statusBar) } - - member this.NavigateToExternalDeclaration(targetSymbolUse: FSharpSymbolUse, metadataReferences: seq, cancellationToken: CancellationToken, statusBar: StatusBar) = - use __ = statusBar.Animate() - statusBar.Message (SR.NavigatingTo()) - - let textOpt = - match targetSymbolUse.Symbol with - | :? FSharpEntity as symbol -> - symbol.TryGetMetadataText() - |> Option.map (fun text -> text, symbol.DisplayName) - | :? FSharpMemberOrFunctionOrValue as symbol -> - symbol.ApparentEnclosingEntity.TryGetMetadataText() - |> Option.map (fun text -> text, symbol.ApparentEnclosingEntity.DisplayName) - | _ -> - None - - let result = - match textOpt with - | Some (text, fileName) -> - let tmpProjInfo, tmpDocInfo = - MetadataAsSource.generateTemporaryDocument( - AssemblyIdentity(targetSymbolUse.Symbol.Assembly.QualifiedName), - fileName, - metadataReferences) - let tmpShownDocOpt = metadataAsSource.ShowDocument(tmpProjInfo, tmpDocInfo.FilePath, SourceText.From(text.ToString())) - match tmpShownDocOpt with - | Some tmpShownDoc -> - let goToAsync = - asyncMaybe { - let! _, checkResults = tmpShownDoc.GetFSharpParseAndCheckResultsAsync("NavigateToExternalDeclaration") |> liftAsync - let! r = - let rec areTypesEqual (ty1: FSharpType) (ty2: FSharpType) = - let ty1 = ty1.StripAbbreviations() - let ty2 = ty2.StripAbbreviations() - let generic = - ty1.IsGenericParameter && ty2.IsGenericParameter || - ( - ty1.GenericArguments.Count = ty2.GenericArguments.Count && - (ty1.GenericArguments, ty2.GenericArguments) - ||> Seq.forall2 areTypesEqual - ) - if generic then - true - else - let namesEqual = ty1.TypeDefinition.DisplayName = ty2.TypeDefinition.DisplayName - let accessPathsEqual = ty1.TypeDefinition.AccessPath = ty2.TypeDefinition.AccessPath - namesEqual && accessPathsEqual - - // This tries to find the best possible location of the target symbol's location in the metadata source. - // We really should rely on symbol equality within FCS instead of doing it here, - // but the generated metadata as source isn't perfect for symbol equality. - checkResults.GetAllUsesOfAllSymbolsInFile(cancellationToken) - |> Seq.tryFind (fun x -> - match x.Symbol, targetSymbolUse.Symbol with - | (:? FSharpEntity as symbol1), (:? FSharpEntity as symbol2) when x.IsFromDefinition -> - symbol1.DisplayName = symbol2.DisplayName - | (:? FSharpMemberOrFunctionOrValue as symbol1), (:? FSharpMemberOrFunctionOrValue as symbol2) -> - symbol1.DisplayName = symbol2.DisplayName && - symbol1.GenericParameters.Count = symbol2.GenericParameters.Count && - symbol1.CurriedParameterGroups.Count = symbol2.CurriedParameterGroups.Count && - ( - (symbol1.CurriedParameterGroups, symbol2.CurriedParameterGroups) - ||> Seq.forall2 (fun pg1 pg2 -> - pg1.Count = pg2.Count && - ( - (pg1, pg2) - ||> Seq.forall2 (fun p1 p2 -> - areTypesEqual p1.Type p2.Type - ) - ) - ) - ) && - areTypesEqual symbol1.ReturnParameter.Type symbol2.ReturnParameter.Type - | _ -> - false - ) - |> Option.map (fun x -> x.Range) - - let span = - match RoslynHelpers.TryFSharpRangeToTextSpan(tmpShownDoc.GetTextAsync(cancellationToken).Result, r) with - | Some span -> span - | _ -> TextSpan() - - return span - } - - let span = - match Async.RunSynchronously(goToAsync, cancellationToken = cancellationToken) with - | Some span -> span - | _ -> TextSpan() - - let navItem = FSharpGoToDefinitionNavigableItem(tmpShownDoc, span) - this.NavigateToItem(navItem, statusBar) - true - | _ -> - false - | _ -> - false - - if result then - statusBar.Clear() - else - statusBar.TempMessage (SR.CannotNavigateUnknown()) \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/Navigation/GoToDefinitionService.fs b/vsintegration/src/FSharp.Editor/Navigation/GoToDefinitionService.fs index 6ed309bf573..1a5b1e611ec 100644 --- a/vsintegration/src/FSharp.Editor/Navigation/GoToDefinitionService.fs +++ b/vsintegration/src/FSharp.Editor/Navigation/GoToDefinitionService.fs @@ -2,45 +2,39 @@ namespace Microsoft.VisualStudio.FSharp.Editor -open System open System.Composition open System.Threading open System.Threading.Tasks open Microsoft.CodeAnalysis +open Microsoft.CodeAnalysis.Editor +open Microsoft.CodeAnalysis.Host.Mef open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor open Microsoft.VisualStudio.Shell open Microsoft.VisualStudio.Shell.Interop +open System [)>] [)>] type internal FSharpGoToDefinitionService [] ( - metadataAsSource: FSharpMetadataAsSourceService + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = - let gtd = GoToDefinition(metadataAsSource) - let statusBar = StatusBar(ServiceProvider.GlobalProvider.GetService()) + let gtd = GoToDefinition(checkerProvider.Checker, projectInfoManager) + let statusBar = StatusBar(ServiceProvider.GlobalProvider.GetService()) interface IFSharpGoToDefinitionService with /// Invoked with Peek Definition. - member _.FindDefinitionsAsync (document: Document, position: int, cancellationToken: CancellationToken) = - let task = gtd.FindDefinitionsForPeekTask(document, position, cancellationToken) - task.Wait(cancellationToken) - let results = task.Result - results - |> Seq.choose(fun (result, _) -> - match result with - | FSharpGoToDefinitionResult.NavigableItem(navItem) -> Some navItem - | _ -> None - ) - |> Task.FromResult + member __.FindDefinitionsAsync (document: Document, position: int, cancellationToken: CancellationToken) = + gtd.FindDefinitionsForPeekTask(document, position, cancellationToken) /// Invoked with Go to Definition. /// Try to navigate to the definiton of the symbol at the symbolRange in the originDocument - member _.TryGoToDefinition(document: Document, position: int, cancellationToken: CancellationToken) = + member __.TryGoToDefinition(document: Document, position: int, cancellationToken: CancellationToken) = statusBar.Message(SR.LocatingSymbol()) use __ = statusBar.Animate() @@ -50,18 +44,13 @@ type internal FSharpGoToDefinitionService // Task.Wait throws an exception if the task is cancelled, so be sure to catch it. try // This call to Wait() is fine because we want to be able to provide the error message in the status bar. - gtdTask.Wait(cancellationToken) + gtdTask.Wait() if gtdTask.Status = TaskStatus.RanToCompletion && gtdTask.Result.IsSome then - let result, _ = gtdTask.Result.Value - match result with - | FSharpGoToDefinitionResult.NavigableItem(navItem) -> - gtd.NavigateToItem(navItem, statusBar) - // 'true' means do it, like Sheev Palpatine would want us to. - true - | FSharpGoToDefinitionResult.ExternalAssembly(targetSymbolUse, metadataReferences) -> - gtd.NavigateToExternalDeclaration(targetSymbolUse, metadataReferences, cancellationToken, statusBar) - // 'true' means do it, like Sheev Palpatine would want us to. - true + let item, _ = gtdTask.Result.Value + gtd.NavigateToItem(item, statusBar) + + // 'true' means do it, like Sheev Palpatine would want us to. + true else statusBar.TempMessage (SR.CannotDetermineSymbol()) false diff --git a/vsintegration/src/FSharp.Editor/Navigation/NavigableSymbolsService.fs b/vsintegration/src/FSharp.Editor/Navigation/NavigableSymbolsService.fs index d1af75a598a..a1022788ab6 100644 --- a/vsintegration/src/FSharp.Editor/Navigation/NavigableSymbolsService.fs +++ b/vsintegration/src/FSharp.Editor/Navigation/NavigableSymbolsService.fs @@ -21,21 +21,21 @@ open Microsoft.VisualStudio.Shell [] type internal FSharpNavigableSymbol(item: FSharpNavigableItem, span: SnapshotSpan, gtd: GoToDefinition, statusBar: StatusBar) = interface INavigableSymbol with - member _.Navigate(_: INavigableRelationship) = + member __.Navigate(_: INavigableRelationship) = gtd.NavigateToItem(item, statusBar) - member _.Relationships = seq { yield PredefinedNavigableRelationships.Definition } + member __.Relationships = seq { yield PredefinedNavigableRelationships.Definition } - member _.SymbolSpan = span + member __.SymbolSpan = span -type internal FSharpNavigableSymbolSource(metadataAsSource, serviceProvider: IServiceProvider) = +type internal FSharpNavigableSymbolSource(checkerProvider: FSharpCheckerProvider, projectInfoManager: FSharpProjectOptionsManager, serviceProvider: IServiceProvider) = let mutable disposed = false - let gtd = GoToDefinition(metadataAsSource) + let gtd = GoToDefinition(checkerProvider.Checker, projectInfoManager) let statusBar = StatusBar(serviceProvider.GetService()) interface INavigableSymbolSource with - member _.GetNavigableSymbolAsync(triggerSpan: SnapshotSpan, cancellationToken: CancellationToken) = + member __.GetNavigableSymbolAsync(triggerSpan: SnapshotSpan, cancellationToken: CancellationToken) = // Yes, this is a code smell. But this is how the editor API accepts what we would treat as None. if disposed then null else @@ -43,7 +43,7 @@ type internal FSharpNavigableSymbolSource(metadataAsSource, serviceProvider: ISe let snapshot = triggerSpan.Snapshot let position = triggerSpan.Start.Position let document = snapshot.GetOpenDocumentInCurrentContextWithChanges() - let! sourceText = document.GetTextAsync(cancellationToken) |> liftTaskAsync + let! sourceText = document.GetTextAsync() |> liftTaskAsync statusBar.Message(SR.LocatingSymbol()) use _ = statusBar.Animate() @@ -54,34 +54,17 @@ type internal FSharpNavigableSymbolSource(metadataAsSource, serviceProvider: ISe // Task.Wait throws an exception if the task is cancelled, so be sure to catch it. try // This call to Wait() is fine because we want to be able to provide the error message in the status bar. - gtdTask.Wait(cancellationToken) + gtdTask.Wait() statusBar.Clear() if gtdTask.Status = TaskStatus.RanToCompletion && gtdTask.Result.IsSome then - let result, range = gtdTask.Result.Value + let navigableItem, range = gtdTask.Result.Value let declarationTextSpan = RoslynHelpers.FSharpRangeToTextSpan(sourceText, range) let declarationSpan = Span(declarationTextSpan.Start, declarationTextSpan.Length) let symbolSpan = SnapshotSpan(snapshot, declarationSpan) - match result with - | FSharpGoToDefinitionResult.NavigableItem(navItem) -> - return FSharpNavigableSymbol(navItem, symbolSpan, gtd, statusBar) :> INavigableSymbol - - | FSharpGoToDefinitionResult.ExternalAssembly(targetSymbolUse, metadataReferences) -> - let nav = - { new INavigableSymbol with - member _.Navigate(_: INavigableRelationship) = - // Need to new up a CTS here instead of re-using the other one, since VS - // will navigate disconnected from the outer routine, leading to an - // OperationCancelledException if you use the one defined outside. - use ct = new CancellationTokenSource() - gtd.NavigateToExternalDeclaration(targetSymbolUse, metadataReferences, ct.Token, statusBar) - - member _.Relationships = seq { yield PredefinedNavigableRelationships.Definition } - - member _.SymbolSpan = symbolSpan } - return nav + return FSharpNavigableSymbol(navigableItem, symbolSpan, gtd, statusBar) :> INavigableSymbol else statusBar.TempMessage(SR.CannotDetermineSymbol()) @@ -96,7 +79,7 @@ type internal FSharpNavigableSymbolSource(metadataAsSource, serviceProvider: ISe |> Async.map Option.toObj |> RoslynHelpers.StartAsyncAsTask cancellationToken - member _.Dispose() = + member __.Dispose() = disposed <- true [)>] @@ -107,9 +90,10 @@ type internal FSharpNavigableSymbolService [] ( [)>] serviceProvider: IServiceProvider, - metadataAsSource: FSharpMetadataAsSourceService + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = interface INavigableSymbolSourceProvider with - member _.TryCreateNavigableSymbolSource(_: ITextView, _: ITextBuffer) = - new FSharpNavigableSymbolSource(metadataAsSource, serviceProvider) :> INavigableSymbolSource \ No newline at end of file + member __.TryCreateNavigableSymbolSource(_: ITextView, _: ITextBuffer) = + new FSharpNavigableSymbolSource(checkerProvider, projectInfoManager, serviceProvider) :> INavigableSymbolSource \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/Navigation/NavigateToSearchService.fs b/vsintegration/src/FSharp.Editor/Navigation/NavigateToSearchService.fs index 6fd2bf231cf..3fb063047ec 100644 --- a/vsintegration/src/FSharp.Editor/Navigation/NavigateToSearchService.fs +++ b/vsintegration/src/FSharp.Editor/Navigation/NavigateToSearchService.fs @@ -7,44 +7,50 @@ open System.IO open System.Composition open System.Collections.Generic open System.Collections.Immutable +open System.Threading open System.Threading.Tasks +open System.Runtime.CompilerServices open System.Runtime.Caching open System.Globalization open Microsoft.CodeAnalysis +open Microsoft.CodeAnalysis.Host.Mef open Microsoft.CodeAnalysis.Text +open Microsoft.CodeAnalysis.NavigateTo +open Microsoft.CodeAnalysis.Navigation open Microsoft.CodeAnalysis.PatternMatching open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Navigation open Microsoft.CodeAnalysis.ExternalAccess.FSharp.NavigateTo -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Syntax +open FSharp.Compiler +open FSharp.Compiler.SourceCodeServices type internal NavigableItem(document: Document, sourceSpan: TextSpan, glyph: Glyph, name: string, kind: string, additionalInfo: string) = inherit FSharpNavigableItem(glyph, ImmutableArray.Create (TaggedText(TextTags.Text, name)), document, sourceSpan) - member _.Name = name - member _.Kind = kind - member _.AdditionalInfo = additionalInfo + member __.Name = name + member __.Kind = kind + member __.AdditionalInfo = additionalInfo type internal NavigateToSearchResult(item: NavigableItem, matchKind: FSharpNavigateToMatchKind) = inherit FSharpNavigateToSearchResult(item.AdditionalInfo, item.Kind, matchKind, item.Name, item) module private Index = [] - type private IndexEntry(str: string, offset: int, item: NavigableItem) = - member _.String = str - member _.Offset = offset - member _.Length = str.Length - offset - member _.Item = item + type private IndexEntry(str: string, offset: int, item: NavigableItem, isOperator: bool) = + member __.String = str + member __.Offset = offset + member __.Length = str.Length - offset + member __.Item = item + member __.IsOperator = isOperator member x.StartsWith (s: string) = if s.Length > x.Length then false else CultureInfo.CurrentCulture.CompareInfo.IndexOf(str, s, offset, s.Length, CompareOptions.IgnoreCase) = offset + member private __.DebugString() = sprintf "%s (offset %d) (%s)" (str.Substring offset) offset str let private indexEntryComparer = { new IComparer with - member _.Compare(a, b) = + member __.Compare(a, b) = let res = CultureInfo.CurrentCulture.CompareInfo.Compare(a.String, a.Offset, b.String, b.Offset, CompareOptions.IgnoreCase) if res = 0 then a.Offset.CompareTo(b.Offset) else res } @@ -54,13 +60,13 @@ module private Index = let private navigateToSearchResultComparer = { new IEqualityComparer with - member _.Equals(x: FSharpNavigateToSearchResult, y: FSharpNavigateToSearchResult) = + member __.Equals(x: FSharpNavigateToSearchResult, y: FSharpNavigateToSearchResult) = match x, y with | null, _ | _, null -> false | _ -> x.NavigableItem.Document.Id = y.NavigableItem.Document.Id && x.NavigableItem.SourceSpan = y.NavigableItem.SourceSpan - member _.GetHashCode(x: FSharpNavigateToSearchResult) = + member __.GetHashCode(x: FSharpNavigateToSearchResult) = if isNull x then 0 else 23 * (17 * 23 + x.NavigableItem.Document.Id.GetHashCode()) + x.NavigableItem.SourceSpan.GetHashCode() } @@ -68,20 +74,20 @@ module private Index = let entries = ResizeArray() for item in items do - let name = + let isOperator, name = if PrettyNaming.IsMangledOpName item.Name then - PrettyNaming.DecompileOpName item.Name + true, PrettyNaming.DecompileOpName item.Name else - item.Name + false, item.Name for i = 0 to name.Length - 1 do - entries.Add(IndexEntry(name, i, item)) + entries.Add(IndexEntry(name, i, item, isOperator)) entries.Sort(indexEntryComparer) { new IIndexedNavigableItems with - member _.Find (searchValue) = + member __.Find (searchValue) = let result = HashSet(navigateToSearchResultComparer) if entries.Count > 0 then - let entryToFind = IndexEntry(searchValue, 0, Unchecked.defaultof<_>) + let entryToFind = IndexEntry(searchValue, 0, Unchecked.defaultof<_>, Unchecked.defaultof<_>) let initial = let p = entries.BinarySearch(entryToFind, indexEntryComparer) @@ -110,58 +116,51 @@ module private Index = handle pos pos <- pos + 1 Seq.toArray result - member _.AllItems = items } + member __.AllItems = items } [] module private Utils = let navigateToItemKindToRoslynKind = function - | NavigableItemKind.Module -> FSharpNavigateToItemKind.Module - | NavigableItemKind.ModuleAbbreviation -> FSharpNavigateToItemKind.Module - | NavigableItemKind.Exception -> FSharpNavigateToItemKind.Class - | NavigableItemKind.Type -> FSharpNavigateToItemKind.Class - | NavigableItemKind.ModuleValue -> FSharpNavigateToItemKind.Field - | NavigableItemKind.Field -> FSharpNavigateToItemKind.Field - | NavigableItemKind.Property -> FSharpNavigateToItemKind.Property - | NavigableItemKind.Constructor -> FSharpNavigateToItemKind.Method - | NavigableItemKind.Member -> FSharpNavigateToItemKind.Method - | NavigableItemKind.EnumCase -> FSharpNavigateToItemKind.EnumItem - | NavigableItemKind.UnionCase -> FSharpNavigateToItemKind.EnumItem + | NavigateTo.NavigableItemKind.Module -> FSharpNavigateToItemKind.Module + | NavigateTo.NavigableItemKind.ModuleAbbreviation -> FSharpNavigateToItemKind.Module + | NavigateTo.NavigableItemKind.Exception -> FSharpNavigateToItemKind.Class + | NavigateTo.NavigableItemKind.Type -> FSharpNavigateToItemKind.Class + | NavigateTo.NavigableItemKind.ModuleValue -> FSharpNavigateToItemKind.Field + | NavigateTo.NavigableItemKind.Field -> FSharpNavigateToItemKind.Field + | NavigateTo.NavigableItemKind.Property -> FSharpNavigateToItemKind.Property + | NavigateTo.NavigableItemKind.Constructor -> FSharpNavigateToItemKind.Method + | NavigateTo.NavigableItemKind.Member -> FSharpNavigateToItemKind.Method + | NavigateTo.NavigableItemKind.EnumCase -> FSharpNavigateToItemKind.EnumItem + | NavigateTo.NavigableItemKind.UnionCase -> FSharpNavigateToItemKind.EnumItem let navigateToItemKindToGlyph = function - | NavigableItemKind.Module -> Glyph.ModulePublic - | NavigableItemKind.ModuleAbbreviation -> Glyph.ModulePublic - | NavigableItemKind.Exception -> Glyph.ClassPublic - | NavigableItemKind.Type -> Glyph.ClassPublic - | NavigableItemKind.ModuleValue -> Glyph.FieldPublic - | NavigableItemKind.Field -> Glyph.FieldPublic - | NavigableItemKind.Property -> Glyph.PropertyPublic - | NavigableItemKind.Constructor -> Glyph.MethodPublic - | NavigableItemKind.Member -> Glyph.MethodPublic - | NavigableItemKind.EnumCase -> Glyph.EnumPublic - | NavigableItemKind.UnionCase -> Glyph.EnumPublic - - let containerToString (container: NavigableContainer) (document: Document) = - let project = document.Project + | NavigateTo.NavigableItemKind.Module -> Glyph.ModulePublic + | NavigateTo.NavigableItemKind.ModuleAbbreviation -> Glyph.ModulePublic + | NavigateTo.NavigableItemKind.Exception -> Glyph.ClassPublic + | NavigateTo.NavigableItemKind.Type -> Glyph.ClassPublic + | NavigateTo.NavigableItemKind.ModuleValue -> Glyph.FieldPublic + | NavigateTo.NavigableItemKind.Field -> Glyph.FieldPublic + | NavigateTo.NavigableItemKind.Property -> Glyph.PropertyPublic + | NavigateTo.NavigableItemKind.Constructor -> Glyph.MethodPublic + | NavigateTo.NavigableItemKind.Member -> Glyph.MethodPublic + | NavigateTo.NavigableItemKind.EnumCase -> Glyph.EnumPublic + | NavigateTo.NavigableItemKind.UnionCase -> Glyph.EnumPublic + + let containerToString (container: NavigateTo.Container) (project: Project) = let typeAsString = match container.Type with - | NavigableContainerType.File -> "project " - | NavigableContainerType.Namespace -> "namespace " - | NavigableContainerType.Module -> "module " - | NavigableContainerType.Exception -> "exception " - | NavigableContainerType.Type -> "type " + | NavigateTo.ContainerType.File -> "project " + | NavigateTo.ContainerType.Namespace -> "namespace " + | NavigateTo.ContainerType.Module -> "module " + | NavigateTo.ContainerType.Exception -> "exception " + | NavigateTo.ContainerType.Type -> "type " let name = match container.Type with - | NavigableContainerType.File -> + | NavigateTo.ContainerType.File -> (Path.GetFileNameWithoutExtension project.Name) + ", " + (Path.GetFileName container.Name) | _ -> container.Name - - let combined = typeAsString + name - - if isSignatureFile document.FilePath then - "signature for: " + combined - else - combined + typeAsString + name type PerDocumentSavedData = { Hash: int; Items: Index.IIndexedNavigableItems } @@ -169,43 +168,41 @@ module private Utils = type internal FSharpNavigateToSearchService [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = + let userOpName = "FSharpNavigateToSearchService" let kindsProvided = ImmutableHashSet.Create(FSharpNavigateToItemKind.Module, FSharpNavigateToItemKind.Class, FSharpNavigateToItemKind.Field, FSharpNavigateToItemKind.Property, FSharpNavigateToItemKind.Method, FSharpNavigateToItemKind.Enum, FSharpNavigateToItemKind.EnumItem) :> IImmutableSet // Save the backing navigation data in a memory cache held in a sliding window let itemsByDocumentId = new MemoryCache("FSharp.Editor.FSharpNavigateToSearchService") - let GetNavigableItems(document: Document, kinds: IImmutableSet) = + let getNavigableItems(document: Document, parsingOptions: FSharpParsingOptions, kinds: IImmutableSet) = async { let! cancellationToken = Async.CancellationToken - let! parseResults = document.GetFSharpParseResultsAsync(nameof(FSharpNavigateToSearchService)) let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask + let! parseResults = checkerProvider.Checker.ParseFile(document.FilePath, sourceText.ToFSharpSourceText(), parsingOptions) + let navItems parsedInput = - NavigateTo.GetNavigableItems parsedInput + NavigateTo.getNavigableItems parsedInput |> Array.filter (fun i -> kinds.Contains(navigateToItemKindToRoslynKind i.Kind)) - let items = parseResults.ParseTree |> navItems - let navigableItems = - [| - for item in items do - match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, item.Range) with - | None -> () - | Some sourceSpan -> - let glyph = navigateToItemKindToGlyph item.Kind - let kind = navigateToItemKindToRoslynKind item.Kind - let additionalInfo = containerToString item.Container document - let _name = - if isSignatureFile document.FilePath then - item.Name + " (signature)" - else - item.Name - yield NavigableItem(document, sourceSpan, glyph, item.Name, kind, additionalInfo) - |] - return navigableItems + return + match parseResults.ParseTree |> Option.map navItems with + | Some items -> + [| for item in items do + match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, item.Range) with + | None -> () + | Some sourceSpan -> + let glyph = navigateToItemKindToGlyph item.Kind + let kind = navigateToItemKindToRoslynKind item.Kind + let additionalInfo = containerToString item.Container document.Project + yield NavigableItem(document, sourceSpan, glyph, item.Name, kind, additionalInfo) |] + | None -> [||] } - let getCachedIndexedNavigableItems(document: Document, kinds: IImmutableSet) = + let getCachedIndexedNavigableItems(document: Document, parsingOptions: FSharpParsingOptions, kinds: IImmutableSet) = async { let! cancellationToken = Async.CancellationToken let! textVersion = document.GetTextVersionAsync(cancellationToken) |> Async.AwaitTask @@ -214,7 +211,7 @@ type internal FSharpNavigateToSearchService match itemsByDocumentId.Get(key) with | :? PerDocumentSavedData as data when data.Hash = textVersionHash -> return data.Items | _ -> - let! items = GetNavigableItems(document, kinds) + let! items = getNavigableItems(document, parsingOptions, kinds) let indexedItems = Index.build items let data = { Hash= textVersionHash; Items = indexedItems } let cacheItem = CacheItem(key, data) @@ -231,11 +228,12 @@ type internal FSharpNavigateToSearchService | _ -> FSharpNavigateToMatchKind.Regular interface IFSharpNavigateToSearchService with - member _.SearchProjectAsync(project, _priorityDocuments, searchPattern, kinds, cancellationToken) : Task> = + member __.SearchProjectAsync(project, _priorityDocuments, searchPattern, kinds, cancellationToken) : Task> = asyncMaybe { + let! parsingOptions, _options = projectInfoManager.TryGetOptionsByProject(project, cancellationToken) let! items = project.Documents - |> Seq.map (fun document -> getCachedIndexedNavigableItems(document, kinds)) + |> Seq.map (fun document -> getCachedIndexedNavigableItems(document, parsingOptions, kinds)) |> Async.Parallel |> liftAsync @@ -262,15 +260,16 @@ type internal FSharpNavigateToSearchService |> Async.map Seq.toImmutableArray |> RoslynHelpers.StartAsyncAsTask(cancellationToken) - member _.SearchDocumentAsync(document, searchPattern, kinds, cancellationToken) : Task> = + member __.SearchDocumentAsync(document, searchPattern, kinds, cancellationToken) : Task> = asyncMaybe { - let! items = getCachedIndexedNavigableItems(document, kinds) |> liftAsync + let! parsingOptions, _, _ = projectInfoManager.TryGetOptionsForDocumentOrProject(document, cancellationToken, userOpName) + let! items = getCachedIndexedNavigableItems(document, parsingOptions, kinds) |> liftAsync return items.Find(searchPattern) } |> Async.map (Option.defaultValue [||]) |> Async.map Seq.toImmutableArray |> RoslynHelpers.StartAsyncAsTask(cancellationToken) - member _.KindsProvided = kindsProvided + member __.KindsProvided = kindsProvided - member _.CanFilter = true \ No newline at end of file + member __.CanFilter = true \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/Navigation/NavigationBarItemService.fs b/vsintegration/src/FSharp.Editor/Navigation/NavigationBarItemService.fs index d09647a2396..13350004ab1 100644 --- a/vsintegration/src/FSharp.Editor/Navigation/NavigationBarItemService.fs +++ b/vsintegration/src/FSharp.Editor/Navigation/NavigationBarItemService.fs @@ -6,9 +6,14 @@ open System.Composition open System.Collections.Generic open System.Threading.Tasks +open Microsoft.CodeAnalysis.Editor +open Microsoft.CodeAnalysis.Navigation +open Microsoft.CodeAnalysis.Host.Mef +open Microsoft.CodeAnalysis.Notification open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor +open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Navigation -open FSharp.Compiler.EditorServices +open FSharp.Compiler.SourceCodeServices type internal NavigationBarSymbolItem(text, glyph, spans, childItems) = inherit FSharpNavigationBarItem(text, glyph, spans, childItems) @@ -17,16 +22,20 @@ type internal NavigationBarSymbolItem(text, glyph, spans, childItems) = type internal FSharpNavigationBarItemService [] ( + checkerProvider: FSharpCheckerProvider, + projectInfoManager: FSharpProjectOptionsManager ) = + static let userOpName = "NavigationBarItem" static let emptyResult: IList = upcast [||] interface IFSharpNavigationBarItemService with - member _.GetItemsAsync(document, cancellationToken) : Task> = + member __.GetItemsAsync(document, cancellationToken) : Task> = asyncMaybe { - let! parseResults = document.GetFSharpParseResultsAsync(nameof(FSharpNavigationBarItemService)) |> liftAsync - let navItems = Navigation.getNavigation parseResults.ParseTree + let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) let! sourceText = document.GetTextAsync(cancellationToken) + let! parsedInput = checkerProvider.Checker.ParseDocument(document, parsingOptions, sourceText=sourceText, userOpName=userOpName) + let navItems = FSharpNavigation.getNavigation parsedInput let rangeToTextSpan range = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, range) return navItems.Declarations diff --git a/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs b/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs index 578b675ae14..7485176811a 100644 --- a/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs +++ b/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs @@ -3,11 +3,17 @@ namespace Microsoft.VisualStudio.FSharp.Editor open System open System.ComponentModel.Composition open System.Runtime.InteropServices +open System.Windows +open System.Windows.Controls open Microsoft.VisualStudio.Shell open Microsoft.VisualStudio.FSharp.UIResources -open Microsoft.CodeAnalysis -module DefaultTuning = +module DefaultTuning = + let UnusedDeclarationsAnalyzerInitialDelay = 0 (* 1000 *) (* milliseconds *) + let UnusedOpensAnalyzerInitialDelay = 0 (* 2000 *) (* milliseconds *) + let SimplifyNameInitialDelay = 2000 (* milliseconds *) + let SimplifyNameEachItemDelay = 0 (* milliseconds *) + /// How long is the per-document data saved before it is eligible for eviction from the cache? 10 seconds. /// Re-tokenizing is fast so we don't need to save this data long. let PerDocumentSavedDataSlidingWindow = TimeSpan(0,0,10)(* seconds *) @@ -101,7 +107,7 @@ type FormattingOptions = type EditorOptions [] ( - [)>] serviceProvider: IServiceProvider + [)>] serviceProvider: IServiceProvider ) = let store = SettingsStore(serviceProvider) @@ -115,19 +121,26 @@ type EditorOptions store.Register CodeLensOptions.Default store.Register FormattingOptions.Default - member _.IntelliSense : IntelliSenseOptions = store.Get() - member _.QuickInfo : QuickInfoOptions = store.Get() - member _.CodeFixes : CodeFixesOptions = store.Get() - member _.LanguageServicePerformance : LanguageServicePerformanceOptions = store.Get() - member _.Advanced: AdvancedOptions = store.Get() - member _.CodeLens: CodeLensOptions = store.Get() - member _.Formatting : FormattingOptions = store.Get() + member __.IntelliSense : IntelliSenseOptions = store.Get() + member __.QuickInfo : QuickInfoOptions = store.Get() + member __.CodeFixes : CodeFixesOptions = store.Get() + member __.LanguageServicePerformance : LanguageServicePerformanceOptions = store.Get() + member __.Advanced: AdvancedOptions = store.Get() + member __.CodeLens: CodeLensOptions = store.Get() + member __.Formatting : FormattingOptions = store.Get() interface Microsoft.CodeAnalysis.Host.IWorkspaceService interface IPersistSettings with - member _.LoadSettings() = store.LoadSettings() - member _.SaveSettings(settings) = store.SaveSettings(settings) + member __.LoadSettings() = store.LoadSettings() + member __.SaveSettings(settings) = store.SaveSettings(settings) + + +[] +module internal WorkspaceSettingFromDocumentExtension = + type Microsoft.CodeAnalysis.Document with + member this.FSharpOptions = + this.Project.Solution.Workspace.Services.GetService() : EditorOptions module internal OptionsUI = @@ -180,64 +193,11 @@ module internal OptionsUI = [] type internal AdvancedSettingsOptionPage() = inherit AbstractOptionPage() - override _.CreateView() = + override __.CreateView() = upcast AdvancedOptionsControl() [] type internal FormattingOptionPage() = inherit AbstractOptionPage() - override _.CreateView() = + override __.CreateView() = upcast FormattingOptionsControl() - -[] -module EditorOptionsExtensions = - - type Project with - - member this.AreFSharpInMemoryCrossProjectReferencesEnabled = - let editorOptions = this.Solution.Workspace.Services.GetService() - match box editorOptions with - | null -> true - | _ -> editorOptions.LanguageServicePerformance.EnableInMemoryCrossProjectReferences - - member this.IsFSharpCodeFixesAlwaysPlaceOpensAtTopLevelEnabled = - let editorOptions = this.Solution.Workspace.Services.GetService() - match box editorOptions with - | null -> false - | _ -> editorOptions.CodeFixes.AlwaysPlaceOpensAtTopLevel - - member this.IsFSharpCodeFixesUnusedDeclarationsEnabled = - let editorOptions = this.Solution.Workspace.Services.GetService() - match box editorOptions with - | null -> false - | _ -> editorOptions.CodeFixes.UnusedDeclarations - - member this.IsFSharpStaleCompletionResultsEnabled = - let editorOptions = this.Solution.Workspace.Services.GetService() - match box editorOptions with - | null -> false - | _ -> editorOptions.LanguageServicePerformance.AllowStaleCompletionResults - - member this.FSharpTimeUntilStaleCompletion = - let editorOptions = this.Solution.Workspace.Services.GetService() - match box editorOptions with - | null -> 0 - | _ -> editorOptions.LanguageServicePerformance.TimeUntilStaleCompletion - - member this.IsFSharpCodeFixesSimplifyNameEnabled = - let editorOptions = this.Solution.Workspace.Services.GetService() - match box editorOptions with - | null -> false - | _ -> editorOptions.CodeFixes.SimplifyName - - member this.IsFSharpCodeFixesUnusedOpensEnabled = - let editorOptions = this.Solution.Workspace.Services.GetService() - match box editorOptions with - | null -> false - | _ -> editorOptions.CodeFixes.UnusedOpens - - member this.IsFSharpBlockStructureEnabled = - let editorOptions = this.Solution.Workspace.Services.GetService() - match box editorOptions with - | null -> false - | _ -> editorOptions.Advanced.IsBlockStructureEnabled \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/Options/SettingsPersistence.fs b/vsintegration/src/FSharp.Editor/Options/SettingsPersistence.fs index 22f726ec37d..096aebc9544 100644 --- a/vsintegration/src/FSharp.Editor/Options/SettingsPersistence.fs +++ b/vsintegration/src/FSharp.Editor/Options/SettingsPersistence.fs @@ -58,14 +58,14 @@ type SettingsStore(serviceProvider: IServiceProvider) = |> Option.iter (fun json -> try JsonConvert.PopulateObject(json, copy) with _ -> ()) copy - member _.Get() = getCached() + member __.Get() = getCached() // Used by the AbstractOptionPage to populate dialog controls. // We always have the latest value in the cache so we just return // cloned value here because it may be altered by the UI if declared with [] - member _.LoadSettings() = getCached() |> clone + member __.LoadSettings() = getCached() |> clone - member _.SaveSettings settings = + member __.SaveSettings settings = // We replace default serialization with Newtonsoft.Json for easy schema evolution. // For example, if we add a new bool field to the record, representing another checkbox in Options dialog // deserialization will still work fine. When we pass default value to JsonConvert.PopulateObject it will @@ -74,7 +74,7 @@ type SettingsStore(serviceProvider: IServiceProvider) = |> Async.AwaitTask |> Async.Start // This is the point we retrieve the initial value and subscribe to watch for changes - member _.Register (defaultSettings : 'options) = + member __.Register (defaultSettings : 'options) = defaultSettings |> updateFromStore |> keepInCache let subset = defaultSettings.GetType() |> storageKey |> settingsManager.GetSubset // this event is also raised when a setting change occurs in another VS instance, so we can keep everything in sync diff --git a/vsintegration/src/FSharp.Editor/QuickInfo/NavigableTextRun.fs b/vsintegration/src/FSharp.Editor/QuickInfo/NavigableTextRun.fs index 006041e0a92..1ebb945903f 100644 --- a/vsintegration/src/FSharp.Editor/QuickInfo/NavigableTextRun.fs +++ b/vsintegration/src/FSharp.Editor/QuickInfo/NavigableTextRun.fs @@ -4,6 +4,6 @@ namespace Microsoft.VisualStudio.FSharp.Editor [] type NavigableTextRun(classificationTypeName:string, text:string, navigateAction:unit -> unit) = - member _.ClassificationTypeName = classificationTypeName - member _.Text = text - member _.NavigateAction = navigateAction + member __.ClassificationTypeName = classificationTypeName + member __.Text = text + member __.NavigateAction = navigateAction diff --git a/vsintegration/src/FSharp.Editor/QuickInfo/Navigation.fs b/vsintegration/src/FSharp.Editor/QuickInfo/Navigation.fs index 0ea6a4a3a06..63a5041f3ea 100644 --- a/vsintegration/src/FSharp.Editor/QuickInfo/Navigation.fs +++ b/vsintegration/src/FSharp.Editor/QuickInfo/Navigation.fs @@ -6,15 +6,16 @@ open System open Microsoft.CodeAnalysis -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Text.Range -open FSharp.Compiler.Text +open FSharp.Compiler.SourceCodeServices + +open FSharp.Compiler.Range open Microsoft.VisualStudio.Shell.Interop type internal QuickInfoNavigation ( statusBar: StatusBar, - metadataAsSource: FSharpMetadataAsSourceService, + checker: FSharpChecker, + projectInfoManager: FSharpProjectOptionsManager, initialDoc: Document, thisSymbolUseRange: range ) = @@ -22,12 +23,12 @@ type internal QuickInfoNavigation let workspace = initialDoc.Project.Solution.Workspace let solution = workspace.CurrentSolution - member _.IsTargetValid (range: range) = + member __.IsTargetValid (range: range) = range <> rangeStartup && range <> thisSymbolUseRange && solution.TryGetDocumentIdFromFSharpRange (range, initialDoc.Project.Id) |> Option.isSome - member _.RelativePath (range: range) = + member __.RelativePath (range: range) = let relativePathEscaped = match solution.FilePath with | null -> range.FileName @@ -36,13 +37,13 @@ type internal QuickInfoNavigation Uri(sfp).MakeRelativeUri(targetUri).ToString() relativePathEscaped |> Uri.UnescapeDataString - member _.NavigateTo (range: range) = + member __.NavigateTo (range: range) = asyncMaybe { let targetPath = range.FileName let! targetDoc = solution.TryGetDocumentFromFSharpRange (range, initialDoc.Project.Id) let! targetSource = targetDoc.GetTextAsync() let! targetTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (targetSource, range) - let gtd = GoToDefinition(metadataAsSource) + let gtd = GoToDefinition(checker, projectInfoManager) // To ensure proper navigation decsions, we need to check the type of document the navigation call // is originating from and the target we're provided by default: diff --git a/vsintegration/src/FSharp.Editor/QuickInfo/QuickInfoProvider.fs b/vsintegration/src/FSharp.Editor/QuickInfo/QuickInfoProvider.fs index a4b37b7c908..b7a8d17925a 100644 --- a/vsintegration/src/FSharp.Editor/QuickInfo/QuickInfoProvider.fs +++ b/vsintegration/src/FSharp.Editor/QuickInfo/QuickInfoProvider.fs @@ -17,15 +17,14 @@ open Microsoft.VisualStudio.Shell.Interop open Microsoft.VisualStudio.Text open Microsoft.VisualStudio.Utilities +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Range open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Symbols -open FSharp.Compiler.Text -open FSharp.Compiler.Tokenization + +open Internal.Utilities.StructuredFormat type internal QuickInfo = - { StructuredText: ToolTipText + { StructuredText: FSharpStructuredToolTipText Span: TextSpan Symbol: FSharpSymbol option SymbolKind: LexerSymbolKind } @@ -39,6 +38,8 @@ module internal FSharpQuickInfo = // therefore we should include these doccoms in our design time quick info let getQuickInfoFromRange ( + checker: FSharpChecker, + projectInfoManager: FSharpProjectOptionsManager, document: Document, declRange: range, cancellationToken: CancellationToken @@ -46,7 +47,6 @@ module internal FSharpQuickInfo = : Async = asyncMaybe { - let userOpName = "getQuickInfoFromRange" let solution = document.Project.Solution // ascertain the location of the target declaration in the signature file let! extDocId = solution.GetDocumentIdsWithFilePath declRange.FileName |> Seq.tryHead @@ -56,16 +56,18 @@ module internal FSharpQuickInfo = let extLineText = (extSourceText.Lines.GetLineFromPosition extSpan.Start).ToString() // project options need to be retrieved because the signature file could be in another project - let! extLexerSymbol = extDocument.TryFindFSharpLexerSymbolAsync(extSpan.Start, SymbolLookupKind.Greedy, true, true, userOpName) - let! _, extCheckFileResults = extDocument.GetFSharpParseAndCheckResultsAsync(userOpName) |> liftAsync + let! extParsingOptions, extProjectOptions = projectInfoManager.TryGetOptionsByProject(document.Project, cancellationToken) + let extDefines = CompilerEnvironment.GetCompilationDefinesForEditing extParsingOptions + let! extLexerSymbol = Tokenizer.getSymbolAtPosition(extDocId, extSourceText, extSpan.Start, declRange.FileName, extDefines, SymbolLookupKind.Greedy, true, true) + let! _, _, extCheckFileResults = checker.ParseAndCheckDocument(extDocument, extProjectOptions, allowStaleResults=true, sourceText=extSourceText, userOpName = userOpName) let extQuickInfoText = - extCheckFileResults.GetToolTip + extCheckFileResults.GetStructuredToolTipText (declRange.StartLine, extLexerSymbol.Ident.idRange.EndColumn, extLineText, extLexerSymbol.FullIsland, FSharpTokenTag.IDENT) match extQuickInfoText with - | ToolTipText [] - | ToolTipText [ToolTipElement.None] -> return! None + | FSharpToolTipText [] + | FSharpToolTipText [FSharpStructuredToolTipElement.None] -> return! None | extQuickInfoText -> let! extSymbolUse = extCheckFileResults.GetSymbolUseAtLocation(declRange.StartLine, extLexerSymbol.Ident.idRange.EndColumn, extLineText, extLexerSymbol.FullIsland) @@ -80,6 +82,8 @@ module internal FSharpQuickInfo = /// Get QuickInfo combined from doccom of Signature and definition let getQuickInfo ( + checker: FSharpChecker, + projectInfoManager: FSharpProjectOptionsManager, document: Document, position: int, cancellationToken: CancellationToken @@ -87,11 +91,12 @@ module internal FSharpQuickInfo = : Async<(range * QuickInfo option * QuickInfo option) option> = asyncMaybe { - let userOpName = "getQuickInfo" - let! lexerSymbol = document.TryFindFSharpLexerSymbolAsync(position, SymbolLookupKind.Greedy, true, true, userOpName) - let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(userOpName) |> liftAsync let! sourceText = document.GetTextAsync cancellationToken + let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) + let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions + let! lexerSymbol = Tokenizer.getSymbolAtPosition(document.Id, sourceText, position, document.FilePath, defines, SymbolLookupKind.Greedy, true, true) let idRange = lexerSymbol.Ident.idRange + let! _, _, checkFileResults = checker.ParseAndCheckDocument(document, projectOptions, allowStaleResults = true, sourceText=sourceText, userOpName = userOpName) let textLinePos = sourceText.Lines.GetLinePosition position let fcsTextLineNumber = Line.fromZ textLinePos.Line let lineText = (sourceText.Lines.GetLineFromPosition position).ToString() @@ -100,12 +105,12 @@ module internal FSharpQuickInfo = let getTargetSymbolQuickInfo (symbol, tag) = asyncMaybe { let targetQuickInfo = - checkFileResults.GetToolTip + checkFileResults.GetStructuredToolTipText (fcsTextLineNumber, idRange.EndColumn, lineText, lexerSymbol.FullIsland,tag) match targetQuickInfo with - | ToolTipText [] - | ToolTipText [ToolTipElement.None] -> return! None + | FSharpToolTipText [] + | FSharpToolTipText [FSharpStructuredToolTipElement.None] -> return! None | _ -> let! targetTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (sourceText, lexerSymbol.Range) return { StructuredText = targetQuickInfo @@ -125,7 +130,7 @@ module internal FSharpQuickInfo = // if the target is in a signature file, adjusting the quick info is unnecessary if isSignatureFile document.FilePath then let! targetQuickInfo = getTargetSymbolQuickInfo (Some symbolUse.Symbol, FSharpTokenTag.IDENT) - return symbolUse.Range, None, Some targetQuickInfo + return symbolUse.RangeAlternate, None, Some targetQuickInfo else // find the declaration location of the target symbol, with a preference for signature files let findSigDeclarationResult = checkFileResults.GetDeclarationLocation (idRange.StartLine, idRange.EndColumn, lineText, lexerSymbol.FullIsland, preferFlag=true) @@ -136,9 +141,9 @@ module internal FSharpQuickInfo = let! result = match findSigDeclarationResult with - | FindDeclResult.DeclFound declRange when isSignatureFile declRange.FileName -> + | FSharpFindDeclResult.DeclFound declRange when isSignatureFile declRange.FileName -> asyncMaybe { - let! sigQuickInfo = getQuickInfoFromRange(document, declRange, cancellationToken) + let! sigQuickInfo = getQuickInfoFromRange(checker, projectInfoManager, document, declRange, cancellationToken) // if the target was declared in a signature file, and the current file // is not the corresponding module implementation file for that signature, @@ -147,44 +152,43 @@ module internal FSharpQuickInfo = let findImplDefinitionResult = checkFileResults.GetDeclarationLocation (idRange.StartLine, idRange.EndColumn, lineText, lexerSymbol.FullIsland, preferFlag=false) match findImplDefinitionResult with - | FindDeclResult.DeclNotFound _ - | FindDeclResult.ExternalDecl _ -> - return symbolUse.Range, Some sigQuickInfo, None - | FindDeclResult.DeclFound declRange -> - let! implQuickInfo = getQuickInfoFromRange(document, declRange, cancellationToken) - return symbolUse.Range, Some sigQuickInfo, Some { implQuickInfo with Span = targetQuickInfo.Span } + | FSharpFindDeclResult.DeclNotFound _ + | FSharpFindDeclResult.ExternalDecl _ -> + return symbolUse.RangeAlternate, Some sigQuickInfo, None + | FSharpFindDeclResult.DeclFound declRange -> + let! implQuickInfo = getQuickInfoFromRange(checker, projectInfoManager, document, declRange, cancellationToken) + return symbolUse.RangeAlternate, Some sigQuickInfo, Some { implQuickInfo with Span = targetQuickInfo.Span } } | _ -> async.Return None |> liftAsync - return result |> Option.defaultValue (symbolUse.Range, None, Some targetQuickInfo) + return result |> Option.defaultValue (symbolUse.RangeAlternate, None, Some targetQuickInfo) } type internal FSharpAsyncQuickInfoSource ( statusBar: StatusBar, xmlMemberIndexService: IVsXMLMemberIndexService, - metadataAsSource: FSharpMetadataAsSourceService, + checkerProvider:FSharpCheckerProvider, + projectInfoManager:FSharpProjectOptionsManager, textBuffer:ITextBuffer, _settings: EditorOptions ) = // test helper - static member ProvideQuickInfo(document: Document, position:int) = + static member ProvideQuickInfo(checker:FSharpChecker, documentId:DocumentId, sourceText:SourceText, filePath:string, position:int, parsingOptions:FSharpParsingOptions, options:FSharpProjectOptions, textVersionHash:int, languageServicePerformanceOptions: LanguageServicePerformanceOptions) = asyncMaybe { - let! sourceText = document.GetTextAsync() + let! _, _, checkFileResults = checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, options, languageServicePerformanceOptions, userOpName=FSharpQuickInfo.userOpName) let textLine = sourceText.Lines.GetLineFromPosition position let textLineNumber = textLine.LineNumber + 1 // Roslyn line numbers are zero-based - let textLineString = textLine.ToString() - let! symbol = document.TryFindFSharpLexerSymbolAsync(position, SymbolLookupKind.Precise, true, true, nameof(FSharpAsyncQuickInfoSource)) - - let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpAsyncQuickInfoSource)) |> liftAsync - let res = checkFileResults.GetToolTip (textLineNumber, symbol.Ident.idRange.EndColumn, textLineString, symbol.FullIsland, FSharpTokenTag.IDENT) + let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions + let! symbol = Tokenizer.getSymbolAtPosition (documentId, sourceText, position, filePath, defines, SymbolLookupKind.Precise, true, true) + let res = checkFileResults.GetStructuredToolTipText (textLineNumber, symbol.Ident.idRange.EndColumn, textLine.ToString(), symbol.FullIsland, FSharpTokenTag.IDENT) match res with - | ToolTipText [] - | ToolTipText [ToolTipElement.None] -> return! None + | FSharpToolTipText [] + | FSharpToolTipText [FSharpStructuredToolTipElement.None] -> return! None | _ -> - let! symbolUse = checkFileResults.GetSymbolUseAtLocation (textLineNumber, symbol.Ident.idRange.EndColumn, textLineString, symbol.FullIsland) + let! symbolUse = checkFileResults.GetSymbolUseAtLocation (textLineNumber, symbol.Ident.idRange.EndColumn, textLine.ToString(), symbol.FullIsland) let! symbolSpan = RoslynHelpers.TryFSharpRangeToTextSpan (sourceText, symbol.Range) return { StructuredText = res Span = symbolSpan @@ -199,11 +203,11 @@ type internal FSharpAsyncQuickInfoSource (mainDescription, docs) interface IAsyncQuickInfoSource with - override _.Dispose() = () // no cleanup necessary + override __.Dispose() = () // no cleanup necessary // This method can be called from the background thread. // Do not call IServiceProvider.GetService here. - override _.GetQuickInfoItemAsync(session:IAsyncQuickInfoSession, cancellationToken:CancellationToken) : Task = + override __.GetQuickInfoItemAsync(session:IAsyncQuickInfoSession, cancellationToken:CancellationToken) : Task = let triggerPoint = session.GetTriggerPoint(textBuffer.CurrentSnapshot) match triggerPoint.HasValue with | false -> Task.FromResult(null) @@ -211,7 +215,7 @@ type internal FSharpAsyncQuickInfoSource let triggerPoint = triggerPoint.GetValueOrDefault() asyncMaybe { let document = textBuffer.CurrentSnapshot.GetOpenDocumentInCurrentContextWithChanges() - let! symbolUseRange, sigQuickInfo, targetQuickInfo = FSharpQuickInfo.getQuickInfo(document, triggerPoint.Position, cancellationToken) + let! symbolUseRange, sigQuickInfo, targetQuickInfo = FSharpQuickInfo.getQuickInfo(checkerProvider.Checker, projectInfoManager, document, triggerPoint.Position, cancellationToken) let getTrackingSpan (span:TextSpan) = textBuffer.CurrentSnapshot.CreateTrackingSpan(span.Start, span.Length, SpanTrackingMode.EdgeInclusive) @@ -222,7 +226,7 @@ type internal FSharpAsyncQuickInfoSource | None, Some quickInfo -> let mainDescription, docs = FSharpAsyncQuickInfoSource.BuildSingleQuickInfoItem documentationBuilder quickInfo let imageId = Tokenizer.GetImageIdForSymbol(quickInfo.Symbol, quickInfo.SymbolKind) - let navigation = QuickInfoNavigation(statusBar, metadataAsSource, document, symbolUseRange) + let navigation = QuickInfoNavigation(statusBar, checkerProvider.Checker, projectInfoManager, document, symbolUseRange) let content = QuickInfoViewProvider.provideContent(imageId, mainDescription, docs, navigation) let span = getTrackingSpan quickInfo.Span return QuickInfoItem(span, content) @@ -232,7 +236,7 @@ type internal FSharpAsyncQuickInfoSource XmlDocumentation.BuildDataTipText(documentationBuilder, ignore, sigDocumentation.Add, ignore, ignore, ignore, sigQuickInfo.StructuredText) XmlDocumentation.BuildDataTipText(documentationBuilder, mainDescription.Add, targetDocumentation.Add, typeParameterMap.Add, exceptions.Add, usage.Add, targetQuickInfo.StructuredText) // get whitespace nomalized documentation text - let getText (tts: seq) = + let getText (tts: seq) = let text = (StringBuilder(), tts) ||> Seq.fold (fun sb tt -> @@ -248,11 +252,11 @@ type internal FSharpAsyncQuickInfoSource | Some implText, Some sigText when implText.Equals (sigText, StringComparison.OrdinalIgnoreCase) -> yield! sigDocumentation | Some _ , Some _ -> - yield! RoslynHelpers.joinWithLineBreaks [ sigDocumentation; [ TaggedText.tagText "-------------" ]; targetDocumentation ] + yield! RoslynHelpers.joinWithLineBreaks [ sigDocumentation; [ TaggedTextOps.tagText "-------------" ]; targetDocumentation ] ] |> ResizeArray let docs = RoslynHelpers.joinWithLineBreaks [documentation; typeParameterMap; usage; exceptions] let imageId = Tokenizer.GetImageIdForSymbol(targetQuickInfo.Symbol, targetQuickInfo.SymbolKind) - let navigation = QuickInfoNavigation(statusBar, metadataAsSource, document, symbolUseRange) + let navigation = QuickInfoNavigation(statusBar, checkerProvider.Checker, projectInfoManager, document, symbolUseRange) let content = QuickInfoViewProvider.provideContent(imageId, mainDescription, docs, navigation) let span = getTrackingSpan targetQuickInfo.Span return QuickInfoItem(span, content) @@ -267,14 +271,15 @@ type internal FSharpAsyncQuickInfoSourceProvider [] ( [)>] serviceProvider: IServiceProvider, - metadataAsSource: FSharpMetadataAsSourceService, + checkerProvider:FSharpCheckerProvider, + projectInfoManager:FSharpProjectOptionsManager, settings: EditorOptions ) = interface IAsyncQuickInfoSourceProvider with - override _.TryCreateQuickInfoSource(textBuffer:ITextBuffer) : IAsyncQuickInfoSource = + override __.TryCreateQuickInfoSource(textBuffer:ITextBuffer) : IAsyncQuickInfoSource = // GetService calls must be made on the UI thread // It is safe to do it here (see #4713) let statusBar = StatusBar(serviceProvider.GetService()) let xmlMemberIndexService = serviceProvider.XMLMemberIndexService - new FSharpAsyncQuickInfoSource(statusBar, xmlMemberIndexService, metadataAsSource, textBuffer, settings) :> IAsyncQuickInfoSource + new FSharpAsyncQuickInfoSource(statusBar, xmlMemberIndexService, checkerProvider, projectInfoManager, textBuffer, settings) :> IAsyncQuickInfoSource diff --git a/vsintegration/src/FSharp.Editor/QuickInfo/Views.fs b/vsintegration/src/FSharp.Editor/QuickInfo/Views.fs index abcc6bde066..f36700bb0cc 100644 --- a/vsintegration/src/FSharp.Editor/QuickInfo/Views.fs +++ b/vsintegration/src/FSharp.Editor/QuickInfo/Views.fs @@ -3,60 +3,61 @@ namespace Microsoft.VisualStudio.FSharp.Editor open System.Collections.Generic -open FSharp.Compiler.Text +open Internal.Utilities.StructuredFormat open Microsoft.CodeAnalysis.Classification +open FSharp.Compiler open Microsoft.VisualStudio.Core.Imaging open Microsoft.VisualStudio.Language.StandardClassification open Microsoft.VisualStudio.Text.Adornments module internal QuickInfoViewProvider = - let layoutTagToClassificationTag (layoutTag:TextTag) = + let layoutTagToClassificationTag (layoutTag:LayoutTag) = match layoutTag with - | TextTag.ActivePatternCase - | TextTag.ActivePatternResult - | TextTag.UnionCase - | TextTag.Enum -> ClassificationTypeNames.EnumName - | TextTag.Struct -> ClassificationTypeNames.StructName - | TextTag.TypeParameter -> ClassificationTypeNames.TypeParameterName - | TextTag.Alias - | TextTag.Class - | TextTag.Record - | TextTag.Union - | TextTag.UnknownType // Default to class until/unless we use classification data - | TextTag.Module -> ClassificationTypeNames.ClassName - | TextTag.Interface -> ClassificationTypeNames.InterfaceName - | TextTag.Keyword -> ClassificationTypeNames.Keyword - | TextTag.Member - | TextTag.Function - | TextTag.Method -> ClassificationTypeNames.MethodName - | TextTag.Property - | TextTag.RecordField -> ClassificationTypeNames.PropertyName - | TextTag.Parameter - | TextTag.Local -> ClassificationTypeNames.LocalName - | TextTag.ModuleBinding -> ClassificationTypeNames.Identifier - | TextTag.Namespace -> ClassificationTypeNames.NamespaceName - | TextTag.Delegate -> ClassificationTypeNames.DelegateName - | TextTag.Event -> ClassificationTypeNames.EventName - | TextTag.Field -> ClassificationTypeNames.FieldName - | TextTag.LineBreak - | TextTag.Space -> ClassificationTypeNames.WhiteSpace - | TextTag.NumericLiteral -> ClassificationTypeNames.NumericLiteral - | TextTag.Operator -> ClassificationTypeNames.Operator - | TextTag.StringLiteral -> ClassificationTypeNames.StringLiteral - | TextTag.Punctuation -> ClassificationTypeNames.Punctuation - | TextTag.UnknownEntity - | TextTag.Text -> ClassificationTypeNames.Text + | ActivePatternCase + | ActivePatternResult + | UnionCase + | Enum -> ClassificationTypeNames.EnumName + | Struct -> ClassificationTypeNames.StructName + | TypeParameter -> ClassificationTypeNames.TypeParameterName + | Alias + | Class + | Record + | Union + | UnknownType // Default to class until/unless we use classification data + | Module -> ClassificationTypeNames.ClassName + | Interface -> ClassificationTypeNames.InterfaceName + | Keyword -> ClassificationTypeNames.Keyword + | Member + | Function + | Method -> ClassificationTypeNames.MethodName + | Property + | RecordField -> ClassificationTypeNames.PropertyName + | Parameter + | Local -> ClassificationTypeNames.LocalName + | ModuleBinding -> ClassificationTypeNames.Identifier + | Namespace -> ClassificationTypeNames.NamespaceName + | Delegate -> ClassificationTypeNames.DelegateName + | Event -> ClassificationTypeNames.EventName + | Field -> ClassificationTypeNames.FieldName + | LineBreak + | Space -> ClassificationTypeNames.WhiteSpace + | NumericLiteral -> ClassificationTypeNames.NumericLiteral + | Operator -> ClassificationTypeNames.Operator + | StringLiteral -> ClassificationTypeNames.StringLiteral + | Punctuation -> ClassificationTypeNames.Punctuation + | UnknownEntity + | Text -> ClassificationTypeNames.Text let provideContent ( imageId:ImageId option, - description: seq, - documentation: seq, + description:#seq, + documentation:#seq, navigation:QuickInfoNavigation ) = - let buildContainerElement (itemGroup: seq) = + let buildContainerElement (itemGroup:#seq) = let finalCollection = List() let currentContainerItems = List() let runsCollection = List() @@ -73,11 +74,11 @@ module internal QuickInfoViewProvider = for item in itemGroup do let classificationTag = layoutTagToClassificationTag item.Tag match item with - | :? NavigableTaggedText as nav when navigation.IsTargetValid nav.Range -> + | :? Layout.NavigableTaggedText as nav when navigation.IsTargetValid nav.Range -> flushRuns() let navigableTextRun = NavigableTextRun(classificationTag, item.Text, fun () -> navigation.NavigateTo nav.Range) currentContainerItems.Add(navigableTextRun :> obj) - | _ when item.Tag = TextTag.LineBreak -> + | _ when item.Tag = LineBreak -> flushRuns() // preserve succesive linebreaks if currentContainerItems.Count = 0 then diff --git a/vsintegration/src/FSharp.Editor/QuickInfo/WpfNagivableTextRunViewElementFactory.fs b/vsintegration/src/FSharp.Editor/QuickInfo/WpfNagivableTextRunViewElementFactory.fs index 134105e9ef8..f560382b34a 100644 --- a/vsintegration/src/FSharp.Editor/QuickInfo/WpfNagivableTextRunViewElementFactory.fs +++ b/vsintegration/src/FSharp.Editor/QuickInfo/WpfNagivableTextRunViewElementFactory.fs @@ -23,7 +23,7 @@ type WpfNavigableTextRunViewElementFactory ) = let styles = Microsoft.VisualStudio.FSharp.UIResources.NavStyles() interface IViewElementFactory with - override _.CreateViewElement<'TView when 'TView: not struct>(textView:ITextView, model:obj) : 'TView = + override __.CreateViewElement<'TView when 'TView: not struct>(textView:ITextView, model:obj) : 'TView = if not (model :? NavigableTextRun) || typeof<'TView> <> typeof then failwith <| sprintf "Invalid type conversion. Supported conversion is `%s` to `%s`." typeof.Name typeof.Name diff --git a/vsintegration/src/FSharp.Editor/Refactor/AddExplicitTypeToParameter.fs b/vsintegration/src/FSharp.Editor/Refactor/AddExplicitTypeToParameter.fs deleted file mode 100644 index 6eea90f188d..00000000000 --- a/vsintegration/src/FSharp.Editor/Refactor/AddExplicitTypeToParameter.fs +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.VisualStudio.FSharp.Editor - -open System -open System.Composition -open System.Threading - -open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Symbols -open FSharp.Compiler.Text -open FSharp.Compiler.Syntax - -open Microsoft.CodeAnalysis.Text -open Microsoft.CodeAnalysis.CodeRefactorings -open Microsoft.CodeAnalysis.CodeActions - -[] -type internal FSharpAddExplicitTypeToParameterRefactoring - [] - ( - ) = - inherit CodeRefactoringProvider() - - override _.ComputeRefactoringsAsync context = - asyncMaybe { - let document = context.Document - let position = context.Span.Start - let! sourceText = document.GetTextAsync () |> liftTaskAsync - let textLine = sourceText.Lines.GetLineFromPosition position - let textLinePos = sourceText.Lines.GetLinePosition position - let fcsTextLineNumber = Line.fromZ textLinePos.Line - let! lexerSymbol = document.TryFindFSharpLexerSymbolAsync(position, SymbolLookupKind.Greedy, false, false, nameof(FSharpAddExplicitTypeToParameterRefactoring)) - - let! parseFileResults, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpAddExplicitTypeToParameterRefactoring)) |> liftAsync - let! symbolUse = checkFileResults.GetSymbolUseAtLocation(fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLine.ToString(), lexerSymbol.FullIsland) - - let isValidParameterWithoutTypeAnnotation (funcOrValue: FSharpMemberOrFunctionOrValue) (symbolUse: FSharpSymbolUse) = - let isLambdaIfFunction = - funcOrValue.IsFunction && - parseFileResults.IsBindingALambdaAtPosition symbolUse.Range.Start - - (funcOrValue.IsValue || isLambdaIfFunction) && - parseFileResults.IsPositionContainedInACurriedParameter symbolUse.Range.Start && - not (parseFileResults.IsTypeAnnotationGivenAtPosition symbolUse.Range.Start) && - not funcOrValue.IsMember && - not funcOrValue.IsMemberThisValue && - not funcOrValue.IsConstructorThisValue && - not (PrettyNaming.IsOperatorName funcOrValue.DisplayName) - - match symbolUse.Symbol with - | :? FSharpMemberOrFunctionOrValue as v when isValidParameterWithoutTypeAnnotation v symbolUse -> - let typeString = v.FullType.FormatWithConstraints symbolUse.DisplayContext - let title = SR.AddTypeAnnotation() - - let! symbolSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.Range) - - let alreadyWrappedInParens = - let rec leftLoop ch pos = - if not (Char.IsWhiteSpace(ch)) then - ch = '(' - else - leftLoop sourceText.[pos - 1] (pos - 1) - - let rec rightLoop ch pos = - if not (Char.IsWhiteSpace(ch)) then - ch = ')' - else - rightLoop sourceText.[pos + 1] (pos + 1) - - let hasLeftParen = leftLoop sourceText.[symbolSpan.Start - 1] (symbolSpan.Start - 1) - let hasRightParen = rightLoop sourceText.[symbolSpan.End] symbolSpan.End - hasLeftParen && hasRightParen - - let getChangedText (sourceText: SourceText) = - if alreadyWrappedInParens then - sourceText.WithChanges(TextChange(TextSpan(symbolSpan.End, 0), ": " + typeString)) - else - sourceText.WithChanges(TextChange(TextSpan(symbolSpan.Start, 0), "(")) - .WithChanges(TextChange(TextSpan(symbolSpan.End + 1, 0), ": " + typeString + ")")) - - let codeAction = - CodeAction.Create( - title, - (fun (cancellationToken: CancellationToken) -> - async { - let! sourceText = context.Document.GetTextAsync(cancellationToken) |> Async.AwaitTask - return context.Document.WithText(getChangedText sourceText) - } |> RoslynHelpers.StartAsyncAsTask(cancellationToken)), - title) - context.RegisterRefactoring(codeAction) - | _ -> () - } - |> Async.Ignore - |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) diff --git a/vsintegration/src/FSharp.Editor/Refactor/ChangeDerefToValueRefactoring.fs b/vsintegration/src/FSharp.Editor/Refactor/ChangeDerefToValueRefactoring.fs deleted file mode 100644 index ab0a748276d..00000000000 --- a/vsintegration/src/FSharp.Editor/Refactor/ChangeDerefToValueRefactoring.fs +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.VisualStudio.FSharp.Editor - -open System -open System.Composition -open System.Threading - -open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Symbols -open FSharp.Compiler.Text -open FSharp.Compiler.Syntax - -open Microsoft.CodeAnalysis.Text -open Microsoft.CodeAnalysis.CodeRefactorings -open Microsoft.CodeAnalysis.CodeActions - -[] -type internal FSharpChangeDerefToValueRefactoring - [] - ( - ) = - inherit CodeRefactoringProvider() - - override _.ComputeRefactoringsAsync context = - asyncMaybe { - let document = context.Document - let! sourceText = context.Document.GetTextAsync(context.CancellationToken) - let! parseResults = document.GetFSharpParseResultsAsync(nameof(FSharpChangeDerefToValueRefactoring)) |> liftAsync - - let selectionRange = RoslynHelpers.TextSpanToFSharpRange(document.FilePath, context.Span, sourceText) - let! derefRange = parseResults.TryRangeOfRefCellDereferenceContainingPos selectionRange.Start - let! exprRange = parseResults.TryRangeOfExpressionBeingDereferencedContainingPos selectionRange.Start - - let combinedRange = Range.unionRanges derefRange exprRange - let! combinedSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, combinedRange) - let replacementString = - // Trim off the `!` - sourceText.GetSubText(combinedSpan).ToString().[1..] + ".Value" - - let title = SR.UseValueInsteadOfDeref() - - let getChangedText (sourceText: SourceText) = - sourceText.WithChanges(TextChange(combinedSpan, replacementString)) - - let codeAction = - CodeAction.Create( - title, - (fun (cancellationToken: CancellationToken) -> - async { - let! sourceText = context.Document.GetTextAsync(cancellationToken) |> Async.AwaitTask - return context.Document.WithText(getChangedText sourceText) - } |> RoslynHelpers.StartAsyncAsTask(cancellationToken)), - title) - context.RegisterRefactoring(codeAction) - } - |> Async.Ignore - |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) diff --git a/vsintegration/src/FSharp.Editor/Refactor/ChangeTypeofWithNameToNameofExpression.fs b/vsintegration/src/FSharp.Editor/Refactor/ChangeTypeofWithNameToNameofExpression.fs deleted file mode 100644 index 5fd447fcc24..00000000000 --- a/vsintegration/src/FSharp.Editor/Refactor/ChangeTypeofWithNameToNameofExpression.fs +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.VisualStudio.FSharp.Editor - -open System -open System.Composition -open System.Threading - -open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Symbols -open FSharp.Compiler.Text -open FSharp.Compiler.Syntax - -open Microsoft.CodeAnalysis.Text -open Microsoft.CodeAnalysis.CodeRefactorings -open Microsoft.CodeAnalysis.CodeActions - -[] -type internal FSharpChangeTypeofWithNameToNameofExpressionRefactoring - [] - ( - ) = - inherit CodeRefactoringProvider() - - override _.ComputeRefactoringsAsync context = - asyncMaybe { - let document = context.Document - let! sourceText = context.Document.GetTextAsync(context.CancellationToken) - let! parseResults = document.GetFSharpParseResultsAsync(nameof(FSharpChangeTypeofWithNameToNameofExpressionRefactoring)) |> liftAsync - - let selectionRange = RoslynHelpers.TextSpanToFSharpRange(document.FilePath, context.Span, sourceText) - let! namedTypeOfResults = parseResults.TryRangeOfTypeofWithNameAndTypeExpr(selectionRange.Start) - - let! namedTypeSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, namedTypeOfResults.NamedIdentRange) - let! typeofAndNameSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText,namedTypeOfResults.FullExpressionRange) - let namedTypeName = sourceText.GetSubText(namedTypeSpan) - let replacementString = $"nameof({namedTypeName})" - - let title = SR.UseNameof() - - let getChangedText (sourceText: SourceText) = - sourceText.WithChanges(TextChange(typeofAndNameSpan, replacementString)) - - let codeAction = - CodeAction.Create( - title, - (fun (cancellationToken: CancellationToken) -> - async { - let! sourceText = context.Document.GetTextAsync(cancellationToken) |> Async.AwaitTask - return context.Document.WithText(getChangedText sourceText) - } |> RoslynHelpers.StartAsyncAsTask(cancellationToken)), - title) - context.RegisterRefactoring(codeAction) - } - |> Async.Ignore - |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) diff --git a/vsintegration/src/FSharp.Editor/Structure/BlockStructureService.fs b/vsintegration/src/FSharp.Editor/Structure/BlockStructureService.fs index 8211b8f4bc2..13c74ef0f53 100644 --- a/vsintegration/src/FSharp.Editor/Structure/BlockStructureService.fs +++ b/vsintegration/src/FSharp.Editor/Structure/BlockStructureService.fs @@ -7,12 +7,15 @@ open System.Collections.Immutable open System.Threading.Tasks open Microsoft.CodeAnalysis +open Microsoft.CodeAnalysis.Host.Mef open Microsoft.CodeAnalysis.Text +open Microsoft.CodeAnalysis.Structure open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Structure -open FSharp.Compiler.EditorServices -open FSharp.Compiler.EditorServices.Structure -open FSharp.Compiler.Syntax +open FSharp.Compiler +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.SourceCodeServices.Structure +open FSharp.Compiler.SyntaxTree module internal BlockStructure = let scopeToBlockType = function @@ -141,15 +144,18 @@ module internal BlockStructure = open BlockStructure [)>] -type internal FSharpBlockStructureService [] () = +type internal FSharpBlockStructureService [] (checkerProvider: FSharpCheckerProvider, projectInfoManager: FSharpProjectOptionsManager) = + + static let userOpName = "FSharpBlockStructure" interface IFSharpBlockStructureService with - member _.GetBlockStructureAsync(document, cancellationToken) : Task = + member __.GetBlockStructureAsync(document, cancellationToken) : Task = asyncMaybe { + let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) let! sourceText = document.GetTextAsync(cancellationToken) - let! parseResults = document.GetFSharpParseResultsAsync(nameof(FSharpBlockStructureService)) |> liftAsync - return createBlockSpans document.Project.IsFSharpBlockStructureEnabled sourceText parseResults.ParseTree |> Seq.toImmutableArray + let! parsedInput = checkerProvider.Checker.ParseDocument(document, parsingOptions, sourceText, userOpName) + return createBlockSpans document.FSharpOptions.Advanced.IsBlockStructureEnabled sourceText parsedInput |> Seq.toImmutableArray } |> Async.map (Option.defaultValue ImmutableArray<_>.Empty) |> Async.map FSharpBlockStructure diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf index 415992efdff..5c069ffbd7e 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf @@ -7,36 +7,16 @@ Přidejte do definice typu chybějící =. - - Add missing 'fun' keyword - Přidat chybějící klíčové slovo fun - - - - Add missing instance member parameter - Add missing instance member parameter - - Add 'new' keyword Přidejte klíčové slovo new. - - Add type annotation - Přidat anotaci typu - - Convert to Anonymous Record Převést na anonymní záznam - - Use '<>' for inequality check - Pro kontrolu nerovnosti použijte <>. - - Use '=' for equality check Pro kontrolu rovnosti použijte =. @@ -53,7 +33,7 @@ - F# Disposable Values (top-level) + F# Dispostable Values (top-level) Uvolnitelné hodnoty jazyka F# (nejvyšší úroveň) @@ -84,7 +64,7 @@ Make '{0}' recursive - Nastavit {0} jako rekurzivní + Make '{0}' recursive @@ -94,27 +74,22 @@ Remove 'return' - Odebrat return + Remove 'return' Remove 'return!' - Odebrat return! - - - - Remove unused binding - Odebrat nepoužívanou vazbu + Remove 'return!' Remove 'yield' - Odebrat yield + Remove 'yield' - Remove 'yield!' - Odebrat yield! + Remove yield!' + Remove yield!' @@ -249,7 +224,7 @@ Use F# lambda syntax - Použít syntaxi lambda jazyka F# + Use F# lambda syntax @@ -257,11 +232,6 @@ Pokud chcete změnit hodnotu, použijte <-. - - Use 'nameof' - Use 'nameof' - - Use 'upcast' Použijte upcast @@ -277,11 +247,6 @@ Negovat výraz pomocí not - - Use '.Value' to dereference expression - Pokud chcete k výrazu přistupovat přes ukazatel, použijte .Value. - - Wrap expression in parentheses Uzavřít výraz do závorek diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf index bd944dcaa24..e538846342d 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf @@ -7,36 +7,16 @@ Fehlende "=" zur Typdefinition hinzufügen - - Add missing 'fun' keyword - Fehlendes Schlüsselwort "fun" hinzufügen - - - - Add missing instance member parameter - Add missing instance member parameter - - Add 'new' keyword Schlüsselwort "new" hinzufügen - - Add type annotation - Typanmerkung hinzufügen - - Convert to Anonymous Record In anonymen Datensatz konvertieren - - Use '<>' for inequality check - "<>" für die Überprüfung auf Ungleichheit verwenden - - Use '=' for equality check "=" für Gleichheitsüberprüfung verwenden @@ -53,8 +33,8 @@ - F# Disposable Values (top-level) - F# Verfügbare Werte (oberste Ebene) + F# Dispostable Values (top-level) + Disposable-Werte in F# (oberste Ebene) @@ -84,7 +64,7 @@ Make '{0}' recursive - "{0}" als rekursiv festlegen + Make '{0}' recursive @@ -94,27 +74,22 @@ Remove 'return' - "return" entfernen + Remove 'return' Remove 'return!' - "return!" entfernen - - - - Remove unused binding - Nicht verwendete Bindung entfernen + Remove 'return!' Remove 'yield' - "yield" entfernen + Remove 'yield' - Remove 'yield!' - "yield!" entfernen + Remove yield!' + Remove yield!' @@ -249,7 +224,7 @@ Use F# lambda syntax - F#-Lambdasyntax verwenden + Use F# lambda syntax @@ -257,11 +232,6 @@ "<-" zum Ändern des Werts verwenden - - Use 'nameof' - Use 'nameof' - - Use 'upcast' "upcast" verwenden @@ -277,11 +247,6 @@ "not" zum Negieren eines Ausdruck verwenden - - Use '.Value' to dereference expression - ".Value" zum Dereferenzieren eines Ausdrucks verwenden - - Wrap expression in parentheses Ausdruck in Klammern einschließen diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf index 94b05697af1..c0b21f5978a 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf @@ -7,36 +7,16 @@ Agregar el carácter "=" que falta a la definición de tipo - - Add missing 'fun' keyword - Agregar la palabra clave "fun" que falta - - - - Add missing instance member parameter - Agregar parámetro de miembro de instancia que falta - - Add 'new' keyword Agregar "nueva" palabra clave - - Add type annotation - Agregar una anotación de tipo - - Convert to Anonymous Record Convertir en registro anónimo - - Use '<>' for inequality check - Usar "<>" para la comprobación de desigualdad - - Use '=' for equality check Usar "=" para la comprobación de igualdad @@ -53,8 +33,8 @@ - F# Disposable Values (top-level) - Valores desechables en F# (nivel superior) + F# Dispostable Values (top-level) + Valores descartables de F # (nivel superior) @@ -84,7 +64,7 @@ Make '{0}' recursive - Convertir el elemento "{0}" en recursivo + Make '{0}' recursive @@ -94,27 +74,22 @@ Remove 'return' - Quitar "return" + Remove 'return' Remove 'return!' - Quitar "return!" - - - - Remove unused binding - Quitar el enlace no usado + Remove 'return!' Remove 'yield' - Quitar "yield" + Remove 'yield' - Remove 'yield!' - Quitar "yield!" + Remove yield!' + Remove yield!' @@ -249,7 +224,7 @@ Use F# lambda syntax - Usar la sintaxis lambda de F# + Use F# lambda syntax @@ -257,11 +232,6 @@ Usar "<-" para mutar el valor - - Use 'nameof' - Usar 'nameof' - - Use 'upcast' Usar "upcast" @@ -277,11 +247,6 @@ Usar "not" para negar la expresión - - Use '.Value' to dereference expression - Usar ".Value" para desreferenciar la expresión - - Wrap expression in parentheses Encapsular la expresión entre paréntesis diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf index 411291f3107..c3279ecdcc3 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf @@ -7,36 +7,16 @@ Ajouter un '=' manquant à la définition de type - - Add missing 'fun' keyword - Ajouter le mot clé 'fun' manquant - - - - Add missing instance member parameter - Ajouter un paramètre de membre d’instance manquant - - Add 'new' keyword Ajouter le mot clé 'new' - - Add type annotation - Ajouter une annotation de type - - Convert to Anonymous Record Convertir en enregistrement anonyme - - Use '<>' for inequality check - Utiliser '<>' pour vérifier l'inégalité - - Use '=' for equality check Utiliser '=' pour vérifier l'égalité @@ -53,7 +33,7 @@ - F# Disposable Values (top-level) + F# Dispostable Values (top-level) Valeurs F# pouvant être supprimées (niveau supérieur) @@ -84,7 +64,7 @@ Make '{0}' recursive - Rendre '{0}' récursif + Make '{0}' recursive @@ -94,27 +74,22 @@ Remove 'return' - Supprimer 'return' + Remove 'return' Remove 'return!' - Supprimer 'return!' - - - - Remove unused binding - Supprimer la liaison inutilisée + Remove 'return!' Remove 'yield' - Supprimer 'yield' + Remove 'yield' - Remove 'yield!' - Supprimer 'yield!' + Remove yield!' + Remove yield!' @@ -249,7 +224,7 @@ Use F# lambda syntax - Utiliser la syntaxe lambda F# + Use F# lambda syntax @@ -257,11 +232,6 @@ Utiliser '<-' pour muter la valeur - - Use 'nameof' - Utiliser « nameof » - - Use 'upcast' Utiliser 'upcast' @@ -277,11 +247,6 @@ Utiliser 'not' pour annuler l'expression - - Use '.Value' to dereference expression - Utilisez '.Value' pour déréférencer l'expression - - Wrap expression in parentheses Mettre l'expression entre parenthèses diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf index 0135663e689..4eb00f6e453 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf @@ -7,36 +7,16 @@ Aggiungere il carattere '=' mancante alla definizione di tipo - - Add missing 'fun' keyword - Aggiungi la parola chiave mancante 'fun' - - - - Add missing instance member parameter - Aggiungi parametro membro di istanza mancante - - Add 'new' keyword Aggiungi la parola chiave 'new' - - Add type annotation - Aggiungere l'annotazione di tipo - - Convert to Anonymous Record Converti in record anonimo - - Use '<>' for inequality check - Usare '<>' per il controllo di disuguaglianza - - Use '=' for equality check Usare '=' per il controllo di uguaglianza @@ -53,7 +33,7 @@ - F# Disposable Values (top-level) + F# Dispostable Values (top-level) Valori eliminabili F# (primo livello) @@ -84,7 +64,7 @@ Make '{0}' recursive - Imposta '{0}' come ricorsivo + Make '{0}' recursive @@ -94,27 +74,22 @@ Remove 'return' - Rimuovi 'return' + Remove 'return' Remove 'return!' - Rimuovi 'return!' - - - - Remove unused binding - Rimuovi il binding inutilizzato + Remove 'return!' Remove 'yield' - Rimuovi 'yield' + Remove 'yield' - Remove 'yield!' - Rimuovi 'yield!' + Remove yield!' + Remove yield!' @@ -249,7 +224,7 @@ Use F# lambda syntax - Usa la sintassi lambda di F# + Use F# lambda syntax @@ -257,11 +232,6 @@ Usare '<-' per modificare il valore - - Use 'nameof' - Usa 'nameof' - - Use 'upcast' Usare 'upcast' @@ -277,11 +247,6 @@ Usare 'not' per negare l'espressione - - Use '.Value' to dereference expression - Usa '.Value' per dereferenziare l'espressione - - Wrap expression in parentheses Racchiudere l'espressione tra parentesi diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf index 4d2eee45eda..997fdbb34c2 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf @@ -7,36 +7,16 @@ 不足している '=' を型定義に追加します - - Add missing 'fun' keyword - 不足している 'fun' キーワードを追加する - - - - Add missing instance member parameter - 見つからないインスタンス メンバー パラメーターを追加する - - Add 'new' keyword 'new' キーワードを追加する - - Add type annotation - 型の注釈の追加 - - Convert to Anonymous Record 匿名レコードに変換 - - Use '<>' for inequality check - 非等値のチェックには '<>' を使用します - - Use '=' for equality check 等値性のチェックには '=' を使用します @@ -53,7 +33,7 @@ - F# Disposable Values (top-level) + F# Dispostable Values (top-level) F# の破棄可能な値 (トップレベル) @@ -84,7 +64,7 @@ Make '{0}' recursive - '{0}' を再帰的にする + Make '{0}' recursive @@ -94,27 +74,22 @@ Remove 'return' - 'return' の削除 + Remove 'return' Remove 'return!' - 'return!' の削除 - - - - Remove unused binding - 使用されていないバインドの削除 + Remove 'return!' Remove 'yield' - 'yield' の削除 + Remove 'yield' - Remove 'yield!' - 'yield!' の削除 + Remove yield!' + Remove yield!' @@ -249,7 +224,7 @@ Use F# lambda syntax - F# のラムダ構文を使用する + Use F# lambda syntax @@ -257,11 +232,6 @@ '<-' を使用して値を変換する - - Use 'nameof' - 'nameof' を使用する - - Use 'upcast' 'upcast' を使用する @@ -277,11 +247,6 @@ 式を否定するには 'not' を使用する - - Use '.Value' to dereference expression - '.Value' を使用して式を逆参照する - - Wrap expression in parentheses 式をかっこで囲む diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf index 62e94f8675a..296fdd04ce7 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf @@ -7,36 +7,16 @@ 형식 정의에 누락된 '=' 추가 - - Add missing 'fun' keyword - 누락된 'fun' 키워드 추가 - - - - Add missing instance member parameter - 누락된 인스턴스 멤버 매개 변수 추가 - - Add 'new' keyword 'new' 키워드 추가 - - Add type annotation - 형식 주석 추가 - - Convert to Anonymous Record 익명 레코드로 변환 - - Use '<>' for inequality check - 같지 않음 검사에 '<>' 사용 - - Use '=' for equality check 같음 검사에 '=' 사용 @@ -53,8 +33,8 @@ - F# Disposable Values (top-level) - F# 삭제 가능한 값(최상위 수준) + F# Dispostable Values (top-level) + F# 삭제 가능한 값(최상위) @@ -84,7 +64,7 @@ Make '{0}' recursive - '{0}'을(를) 재귀적으로 만들기 + Make '{0}' recursive @@ -94,27 +74,22 @@ Remove 'return' - 'return' 제거 + Remove 'return' Remove 'return!' - 'return!' 제거 - - - - Remove unused binding - 사용되지 않는 바인딩 제거 + Remove 'return!' Remove 'yield' - 'yield' 제거 + Remove 'yield' - Remove 'yield!' - 'yield!' 제거 + Remove yield!' + Remove yield!' @@ -249,7 +224,7 @@ Use F# lambda syntax - F# 람다 구문 사용 + Use F# lambda syntax @@ -257,11 +232,6 @@ '<-'를 사용하여 값 변경 - - Use 'nameof' - 'nameof' 사용 - - Use 'upcast' 'upcast' 사용 @@ -277,11 +247,6 @@ 식을 부정하려면 'not' 사용 - - Use '.Value' to dereference expression - 식을 역참조하려면 '.Value' 사용 - - Wrap expression in parentheses 식을 괄호로 래핑 diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf index 083e7e538dc..0422c21b5bc 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf @@ -7,36 +7,16 @@ Dodaj brakujący element znak „=” do definicji typu - - Add missing 'fun' keyword - Dodaj brakujące słowo kluczowe „fun” - - - - Add missing instance member parameter - Add missing instance member parameter - - Add 'new' keyword Dodaj słowo kluczowe „new” - - Add type annotation - Dodaj adnotację typu - - Convert to Anonymous Record Konwertuj na rekord anonimowy - - Use '<>' for inequality check - Użyj operatora „<>” do sprawdzenia nierówności - - Use '=' for equality check Użyj znaku „=” w celu sprawdzenia równości @@ -53,7 +33,7 @@ - F# Disposable Values (top-level) + F# Dispostable Values (top-level) Wartości możliwe do likwidacji języka F# (najwyższy poziom) @@ -84,7 +64,7 @@ Make '{0}' recursive - Zmień element „{0}” w cykliczny + Make '{0}' recursive @@ -94,27 +74,22 @@ Remove 'return' - Usuń element „return” + Remove 'return' Remove 'return!' - Usuń element „return!” - - - - Remove unused binding - Usuń nieużywane powiązanie + Remove 'return!' Remove 'yield' - Usuń element „yield” + Remove 'yield' - Remove 'yield!' - Usuń element „yield!” + Remove yield!' + Remove yield!' @@ -249,7 +224,7 @@ Use F# lambda syntax - Użyj składni wyrażenia lambda języka F# + Use F# lambda syntax @@ -257,11 +232,6 @@ Użyj znaku „<-” w celu zmodyfikowania wartości - - Use 'nameof' - Use 'nameof' - - Use 'upcast' Użyj operatora „upcast” @@ -277,11 +247,6 @@ Użyj operatora „not”, aby zanegować wyrażenie - - Use '.Value' to dereference expression - Użyj elementu „.Value”, aby wyłuskać wyrażenie - - Wrap expression in parentheses Ujmij wyrażenie w nawiasy diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf index 621923126a9..6085b32124d 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf @@ -7,36 +7,16 @@ Adicionar o '=' ausente à definição de tipo - - Add missing 'fun' keyword - Adicionar palavra-chave 'fun' ausente - - - - Add missing instance member parameter - Add missing instance member parameter - - Add 'new' keyword Adicionar a palavra-chave 'new' - - Add type annotation - Adicionar uma anotação de tipo - - Convert to Anonymous Record Converter em Registro Anônimo - - Use '<>' for inequality check - Usar '<>' para a verificação de desigualdade - - Use '=' for equality check Usar '=' para verificação de igualdade @@ -53,7 +33,7 @@ - F# Disposable Values (top-level) + F# Dispostable Values (top-level) Valores F# Descartáveis (nível superior) @@ -84,7 +64,7 @@ Make '{0}' recursive - Tornar '{0}' recursiva + Make '{0}' recursive @@ -94,27 +74,22 @@ Remove 'return' - Remover 'return' + Remove 'return' Remove 'return!' - Remover 'return!' - - - - Remove unused binding - Remover associação não usada + Remove 'return!' Remove 'yield' - Remover 'yield' + Remove 'yield' - Remove 'yield!' - Remover 'yield!' + Remove yield!' + Remove yield!' @@ -249,7 +224,7 @@ Use F# lambda syntax - Usar a sintaxe lambda F# + Use F# lambda syntax @@ -257,11 +232,6 @@ Usar '<-' para modificar o valor - - Use 'nameof' - Use 'nameof' - - Use 'upcast' Usar 'upcast' @@ -277,11 +247,6 @@ Use 'not' para negar a expressão - - Use '.Value' to dereference expression - Use '.Value' para desreferenciar a expressão - - Wrap expression in parentheses Coloque a expressão entre parênteses diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf index fd61cbdc2eb..f6dd2c6f6ad 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf @@ -7,36 +7,16 @@ Добавьте недостающий символ "=" к определению типа. - - Add missing 'fun' keyword - Добавить отсутствующее ключевое слово "fun" - - - - Add missing instance member parameter - Добавить отсутствующий параметр экземплярного элемента - - Add 'new' keyword Добавить ключевое слово "new" - - Add type annotation - Добавить заметку типа - - Convert to Anonymous Record Преобразовать в анонимную запись - - Use '<>' for inequality check - Используйте "<>" для проверки на неравенство - - Use '=' for equality check Используйте "=" для проверки равенства @@ -53,7 +33,7 @@ - F# Disposable Values (top-level) + F# Dispostable Values (top-level) Освобождаемые значения F# (верхний уровень) @@ -84,7 +64,7 @@ Make '{0}' recursive - Сделать "{0}" рекурсивным + Make '{0}' recursive @@ -94,27 +74,22 @@ Remove 'return' - Удалить "return" + Remove 'return' Remove 'return!' - Удалить "return!" - - - - Remove unused binding - Удалить неиспользуемую привязку + Remove 'return!' Remove 'yield' - Удалить "yield" + Remove 'yield' - Remove 'yield!' - Удалить "yield!" + Remove yield!' + Remove yield!' @@ -249,7 +224,7 @@ Use F# lambda syntax - Использовать синтаксис лямбда F# + Use F# lambda syntax @@ -257,11 +232,6 @@ Используйте "<-", чтобы изменить значение - - Use 'nameof' - Использовать "nameof" - - Use 'upcast' Используйте "upcast" @@ -277,11 +247,6 @@ Используйте "not" для отрицания выражения. - - Use '.Value' to dereference expression - Использовать синтаксис ".значение" для разыменования выражения - - Wrap expression in parentheses Заключите выражение в круглые скобки. diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf index 2a80615d4b5..e78dffc69a7 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf @@ -7,36 +7,16 @@ Tür tanımına eksik '=' işaretini ekle - - Add missing 'fun' keyword - Eksik 'fun' anahtar sözcüğünü ekle - - - - Add missing instance member parameter - Add missing instance member parameter - - Add 'new' keyword 'new' anahtar sözcüğünü ekleme - - Add type annotation - Tür ek açıklaması ekle - - Convert to Anonymous Record Anonim Kayda Dönüştür - - Use '<>' for inequality check - Eşitsizlik denetimi için '<>' kullanın - - Use '=' for equality check Eşitlik denetimi için '=' kullan @@ -53,7 +33,7 @@ - F# Disposable Values (top-level) + F# Dispostable Values (top-level) F# Atılabilir Değerleri (üst düzey) @@ -84,7 +64,7 @@ Make '{0}' recursive - '{0}' bağlamasını özyinelemeli yap + Make '{0}' recursive @@ -94,27 +74,22 @@ Remove 'return' - 'return' öğesini kaldır + Remove 'return' Remove 'return!' - 'return!' öğesini kaldır - - - - Remove unused binding - Kullanılmayan bağlamayı kaldır + Remove 'return!' Remove 'yield' - 'yield' öğesini kaldır + Remove 'yield' - Remove 'yield!' - 'yield!' ifadesini kaldır + Remove yield!' + Remove yield!' @@ -249,7 +224,7 @@ Use F# lambda syntax - F# lambda söz dizimini kullan + Use F# lambda syntax @@ -257,11 +232,6 @@ Değeri değiştirmek için '<-' kullan - - Use 'nameof' - Use 'nameof' - - Use 'upcast' 'upcast' kullan @@ -277,11 +247,6 @@ İfadeyi negatif yapmak için 'not' kullanın - - Use '.Value' to dereference expression - İfadeye başvurmak için '.Value' kullanın - - Wrap expression in parentheses İfadeyi parantez içinde sarmalayın diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf index 70449e9bd87..ce0669b423a 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf @@ -7,36 +7,16 @@ 将缺少的 "=" 添加到类型定义 - - Add missing 'fun' keyword - 添加缺少的 "fun" 关键字 - - - - Add missing instance member parameter - Add missing instance member parameter - - Add 'new' keyword 添加“新”关键字 - - Add type annotation - 添加类型注释 - - Convert to Anonymous Record 转换为匿名记录 - - Use '<>' for inequality check - 使用 "<>" 进行不相等检查 - - Use '=' for equality check 使用 "=" 进行同等性检查 @@ -53,7 +33,7 @@ - F# Disposable Values (top-level) + F# Dispostable Values (top-level) F# 可释放值(顶级) @@ -84,7 +64,7 @@ Make '{0}' recursive - 使 "{0}" 递归 + Make '{0}' recursive @@ -94,27 +74,22 @@ Remove 'return' - 删除 "return" + Remove 'return' Remove 'return!' - 删除 "return!" - - - - Remove unused binding - 删除未使用的绑定 + Remove 'return!' Remove 'yield' - 删除 "yield" + Remove 'yield' - Remove 'yield!' - 删除 "yield!" + Remove yield!' + Remove yield!' @@ -249,7 +224,7 @@ Use F# lambda syntax - 使用 F# lambda 语法 + Use F# lambda syntax @@ -257,11 +232,6 @@ 使用 "<-" 来更改值 - - Use 'nameof' - Use 'nameof' - - Use 'upcast' 使用“向上转换” @@ -277,11 +247,6 @@ 使用 "not" 对表达式求反 - - Use '.Value' to dereference expression - 对取消引用表达式使用 ".Value" - - Wrap expression in parentheses 将表达式用括号括起来 diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf index 43c5ce4f127..063176df13e 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf @@ -7,36 +7,16 @@ 將缺少的 '=' 新增至類型定義 - - Add missing 'fun' keyword - 新增缺少的 'fun' 關鍵字 - - - - Add missing instance member parameter - 新增缺少的執行個體成員參數 - - Add 'new' keyword 新增 'new' 關鍵字 - - Add type annotation - 新增型別註解 - - Convert to Anonymous Record 轉換為匿名記錄 - - Use '<>' for inequality check - 使用 '<>' 進行不等式檢查 - - Use '=' for equality check 使用 '=' 檢查是否相等 @@ -53,7 +33,7 @@ - F# Disposable Values (top-level) + F# Dispostable Values (top-level) F# 可處置的值 (最上層) @@ -84,7 +64,7 @@ Make '{0}' recursive - 將 '{0}' 設為遞迴 + Make '{0}' recursive @@ -94,27 +74,22 @@ Remove 'return' - 移除 'return' + Remove 'return' Remove 'return!' - 移除 'return!' - - - - Remove unused binding - 移除未使用的繫結 + Remove 'return!' Remove 'yield' - 移除 'yield' + Remove 'yield' - Remove 'yield!' - 移除 'yield!' + Remove yield!' + Remove yield!' @@ -249,7 +224,7 @@ Use F# lambda syntax - 使用 F# lambda 語法 + Use F# lambda syntax @@ -257,11 +232,6 @@ 使用 '<-' 來變動值 - - Use 'nameof' - 使用 'nameof' - - Use 'upcast' 使用「向上轉型」 @@ -277,11 +247,6 @@ 使用 'not' 來否定運算式 - - Use '.Value' to dereference expression - 使用 '.Value' 擷取運算式的值 - - Wrap expression in parentheses 使用括弧包裝運算式 diff --git a/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj b/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj index 74fccb35d7b..9396c8c41b7 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj +++ b/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj @@ -41,7 +41,7 @@ - + @@ -58,6 +58,7 @@ + diff --git a/vsintegration/src/FSharp.LanguageService.Base/LanguageService.cs b/vsintegration/src/FSharp.LanguageService.Base/LanguageService.cs index 0b832a7d609..257f638cb45 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/LanguageService.cs +++ b/vsintegration/src/FSharp.LanguageService.Base/LanguageService.cs @@ -1453,7 +1453,7 @@ internal abstract class MethodListForAMethodTip_DEPRECATED internal abstract bool IsThereACloseParen(); // false if either this is a call without parens "f x" or the parser recovered as in "f(x,y" - internal abstract Tuple[] GetParameterLocations(); // 0-based: longId start, longId end, open paren, (see below) - relative to the ITextSnapshot this was created against + internal abstract Tuple[] GetNoteworthyParamInfoLocations(); // 0-based: longId start, longId end, open paren, (see below) - relative to the ITextSnapshot this was created against // let resultVal = some.functionOrMethod.call ( arg1 , arg2 ) // ^ ^ ^ ^ ^ // start of call identifier ^ ^ ^ ^ ^ @@ -1465,7 +1465,7 @@ internal abstract class MethodListForAMethodTip_DEPRECATED // and thus arg ranges are e.g. computed to be: |--------|-------| // and so when in those regions, we bold that param - internal abstract ITrackingSpan[] GetParameterRanges(); // GetParameterLocations above is for unit testing; VS uses GetParameterRanges instead, to track changes as user types // TODO can we remove GetParameterLocations and move unit tests to GetParameterRanges? + internal abstract ITrackingSpan[] GetParameterRanges(); // GetNoteworthyParamInfoLocations above is for unit testing; VS uses GetParameterRanges instead, to track changes as user types // TODO can we remove GetNoteworthyParamInfoLocations and move unit tests to GetParameterRanges? internal abstract string[] GetParameterNames(); // an entry for each actual parameter, either null, or the parameter name if this is a named parameter (e.g. "f(0,y=4)" has [|null;"y"|] ) diff --git a/vsintegration/src/FSharp.LanguageService.Base/Source.cs b/vsintegration/src/FSharp.LanguageService.Base/Source.cs index 2bc5ac3f801..5053c4d21f3 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/Source.cs +++ b/vsintegration/src/FSharp.LanguageService.Base/Source.cs @@ -1248,8 +1248,8 @@ private void HandleMethodTipResponse(BackgroundRequest_DEPRECATED req) if (methods != null) { TextSpan spanNotToObscureWithTipPopup = new TextSpan(); - spanNotToObscureWithTipPopup.iStartLine = methods.GetParameterLocations()[0].Item1; - spanNotToObscureWithTipPopup.iStartIndex = methods.GetParameterLocations()[0].Item2; + spanNotToObscureWithTipPopup.iStartLine = methods.GetNoteworthyParamInfoLocations()[0].Item1; + spanNotToObscureWithTipPopup.iStartIndex = methods.GetNoteworthyParamInfoLocations()[0].Item2; spanNotToObscureWithTipPopup.iEndLine = req.Line; spanNotToObscureWithTipPopup.iEndIndex = req.Col; this.methodData.Refresh(req.View, methods, spanNotToObscureWithTipPopup, req.MethodTipMiscellany); @@ -2328,7 +2328,7 @@ private static bool MethodsSeemToDiffer(MethodListForAMethodTip_DEPRECATED a, Me // this is an approximate test, that is good enough in practice return (a.GetName(0) != b.GetName(0)) || (a.GetCount() != b.GetCount()) - || (!(a.GetParameterLocations()[0].Equals(b.GetParameterLocations()[0]))); + || (!(a.GetNoteworthyParamInfoLocations()[0].Equals(b.GetNoteworthyParamInfoLocations()[0]))); } private static HashSet FormalParamNames(MethodListForAMethodTip_DEPRECATED m, int index) @@ -2448,7 +2448,7 @@ public void Refresh(MethodTipMiscellany_DEPRECATED methodTipMiscellany) var actualParamNames = System.Linq.Enumerable.ToList(System.Linq.Enumerable.Where(this.methods.GetParameterNames(), s => null != s)); - int numOfParamsUserHasSoFar = methods.GetParameterLocations().Length - 3; // -3 because first 3 ranges are [LID.start, LID.end, Paren], rest are params + int numOfParamsUserHasSoFar = methods.GetNoteworthyParamInfoLocations().Length - 3; // -3 because first 3 ranges are [LID.start, LID.end, Paren], rest are params // however note that this is never zero, "foo(" and "foo(x" both report 1 int curMeth = this.currentMethod; // start wherever the user already is. the methods are already ordered in increasing order-of-params; only can increase of user has longer param list. diff --git a/vsintegration/src/FSharp.LanguageService/BackgroundRequests.fs b/vsintegration/src/FSharp.LanguageService/BackgroundRequests.fs index 5c2aa632f3c..c7549282ed0 100644 --- a/vsintegration/src/FSharp.LanguageService/BackgroundRequests.fs +++ b/vsintegration/src/FSharp.LanguageService/BackgroundRequests.fs @@ -9,10 +9,7 @@ namespace Microsoft.VisualStudio.FSharp.LanguageService open System open Microsoft.VisualStudio.TextManager.Interop open Microsoft.VisualStudio.Text -open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.EditorServices +open FSharp.Compiler.SourceCodeServices open Microsoft.VisualStudio.FSharp.LanguageService.SiteProvider open Microsoft.VisualStudio.FSharp.Interactive.Session @@ -93,7 +90,7 @@ type internal FSharpLanguageServiceBackgroundRequests_DEPRECATED | _ -> // For scripts, GetProjectOptionsFromScript involves parsing and sync op, so is run on the language service thread later // For projects, we need to access RDT on UI thread, so do it on the GUI thread now - if CompilerEnvironment.MustBeSingleFileProject(fileName) then + if SourceFile.MustBeSingleFileProject(fileName) then let data = lazy // This portion is executed on the language service thread let timestamp = if source=null then System.DateTime(2000,1,1) else source.OpenedTime // source is null in unit tests @@ -112,7 +109,7 @@ type internal FSharpLanguageServiceBackgroundRequests_DEPRECATED let rdt = getServiceProvider().RunningDocumentTable let projectSite = getProjectSitesAndFiles().FindOwningProject_DEPRECATED(rdt,fileName) let enableInMemoryCrossProjectReferences = true - let _, checkOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, (fun _ -> None), projectSite, getServiceProvider(), fileName, false) + let _, checkOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, (fun _ -> None), projectSite, getServiceProvider(), None(*projectId*), fileName, None(*extraProjectInfo*), None(*FSharpProjectOptionsTable*), false) let projectFileName = projectSite.ProjectFileName let data = { ProjectSite = projectSite @@ -195,14 +192,15 @@ type internal FSharpLanguageServiceBackgroundRequests_DEPRECATED // Type-checking let typedResults,aborted = - match interactiveChecker.CheckFileInProject(parseResults,req.FileName,req.Timestamp,FSharp.Compiler.Text.SourceText.ofString(req.Text),checkOptions) |> Async.RunSynchronously with - | FSharpCheckFileAnswer.Aborted -> + match interactiveChecker.CheckFileInProjectAllowingStaleCachedResults(parseResults,req.FileName,req.Timestamp,req.Text,checkOptions) |> Async.RunSynchronously with + | None -> None,false + | Some FSharpCheckFileAnswer.Aborted -> // isResultObsolete returned true during the type check. None,true - | FSharpCheckFileAnswer.Succeeded results -> Some results, false + | Some (FSharpCheckFileAnswer.Succeeded results) -> Some results, false sr := None - parseResults,typedResults,true,aborted,int64 req.Timestamp + parseResults,typedResults,true,aborted,req.Timestamp // Now that we have the parseResults, we can SetDependencyFiles(). // @@ -218,9 +216,7 @@ type internal FSharpLanguageServiceBackgroundRequests_DEPRECATED // Furthermore, if the project is out-of-date behave just as if we were notified dependency files changed. if outOfDateProjectFileNames.Contains(projectFileName) then interactiveChecker.InvalidateConfiguration(checkOptions) - interactiveChecker.ParseAndCheckProject(checkOptions) - |> Async.RunSynchronously - |> ignore + interactiveChecker.CheckProjectInBackground(checkOptions) outOfDateProjectFileNames.Remove(projectFileName) |> ignore else @@ -235,21 +231,17 @@ type internal FSharpLanguageServiceBackgroundRequests_DEPRECATED req.IsAborted <- aborted // On 'FullTypeCheck', send a message to the reactor to start the background compile for this project, just in case if req.Reason = BackgroundRequestReason.FullTypeCheck then - interactiveChecker.ParseAndCheckProject(checkOptions) - |> Async.RunSynchronously - |> ignore + interactiveChecker.CheckProjectInBackground(checkOptions) | Some typedResults -> // Post the parse errors. if containsFreshFullTypeCheck then - for error in typedResults.Diagnostics do - let span = new TextSpan(iStartLine=error.StartLine-1,iStartIndex=error.StartColumn,iEndLine=error.EndLine-1,iEndIndex=error.EndColumn) + for error in typedResults.Errors do + let span = new TextSpan(iStartLine=error.StartLineAlternate-1,iStartIndex=error.StartColumn,iEndLine=error.EndLineAlternate-1,iEndIndex=error.EndColumn) let sev = match error.Severity with - | FSharpDiagnosticSeverity.Hidden -> Microsoft.VisualStudio.FSharp.LanguageService.Severity.Hint - | FSharpDiagnosticSeverity.Info -> Microsoft.VisualStudio.FSharp.LanguageService.Severity.Hint - | FSharpDiagnosticSeverity.Warning -> Microsoft.VisualStudio.FSharp.LanguageService.Severity.Warning - | FSharpDiagnosticSeverity.Error -> Microsoft.VisualStudio.FSharp.LanguageService.Severity.Error + | FSharpErrorSeverity.Warning -> Microsoft.VisualStudio.FSharp.LanguageService.Severity.Warning + | FSharpErrorSeverity.Error -> Microsoft.VisualStudio.FSharp.LanguageService.Severity.Error req.ResultSink.AddError(req.FileName, error.Subcategory, error.Message, span, sev) @@ -258,15 +250,13 @@ type internal FSharpLanguageServiceBackgroundRequests_DEPRECATED let scope = new FSharpIntellisenseInfo_DEPRECATED(parseResults, req.Line, req.Col, req.Snapshot, typedResults, projectSite, req.View, colorizer, getDocumentationBuilder(), provideMethodList) req.ResultIntellisenseInfo <- scope - req.ResultTimestamp <- int resultTimestamp // This will be different from req.Timestamp when we're using stale results. + req.ResultTimestamp <- resultTimestamp // This will be different from req.Timestamp when we're using stale results. req.ResultClearsDirtinessOfFile <- containsFreshFullTypeCheck // On 'FullTypeCheck', send a message to the reactor to start the background compile for this project, just in case if req.Reason = BackgroundRequestReason.FullTypeCheck then - interactiveChecker.ParseAndCheckProject(checkOptions) - |> Async.RunSynchronously - |> ignore + interactiveChecker.CheckProjectInBackground(checkOptions) // On 'QuickInfo', get the text for the quick info while we're off the UI thread, instead of doing it later if req.Reason = BackgroundRequestReason.QuickInfo then @@ -301,7 +291,7 @@ type internal FSharpLanguageServiceBackgroundRequests_DEPRECATED // OK, the last request is still active, so try to wait again lastParseFileRequest.Result.TryWaitForBackgroundRequestCompletion(millisecondsTimeout) - member _.OnActiveViewChanged(_textView: IVsTextView) = + member __.OnActiveViewChanged(_textView: IVsTextView) = parseFileResults <- None lastParseFileRequest <- null // abandon any request for untyped parse information, without cancellation @@ -310,7 +300,7 @@ type internal FSharpLanguageServiceBackgroundRequests_DEPRECATED // // THIS MUST ONLY RETURN TRUE IF ---> ExecuteBackgroundRequest is equivalent to fetching a recent, // perhaps out-of-date scope. - member _.IsRecentScopeSufficientForBackgroundRequest(reason:BackgroundRequestReason) = + member __.IsRecentScopeSufficientForBackgroundRequest(reason:BackgroundRequestReason) = match reason with | BackgroundRequestReason.MatchBraces diff --git a/vsintegration/src/FSharp.LanguageService/Colorize.fs b/vsintegration/src/FSharp.LanguageService/Colorize.fs index fd6c8dd6b46..235e52b98cc 100644 --- a/vsintegration/src/FSharp.LanguageService/Colorize.fs +++ b/vsintegration/src/FSharp.LanguageService/Colorize.fs @@ -13,10 +13,9 @@ open Microsoft.VisualStudio.FSharp.LanguageService open Microsoft.VisualStudio.TextManager.Interop open Microsoft.VisualStudio open Microsoft.VisualStudio.Text -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Text -open FSharp.Compiler.Tokenization +open FSharp.Compiler +open FSharp.Compiler.Range +open FSharp.Compiler.SourceCodeServices #nowarn "45" // This method will be made public in the underlying IL because it may implement an interface or override a method @@ -88,7 +87,7 @@ module internal ColorStateLookup_DEPRECATED = type internal FSharpScanner_DEPRECATED(makeLineTokenizer : string -> FSharpLineTokenizer) = let mutable lineTokenizer = makeLineTokenizer "" - let mutable extraColorizations : IDictionary option = None + let mutable extraColorizations : IDictionary option = None /// Decode compiler FSharpTokenColorKind into VS TokenColor. let lookupTokenColor colorKind = @@ -149,11 +148,11 @@ type internal FSharpScanner_DEPRECATED(makeLineTokenizer : string -> FSharpLineT lineTokenizer <- makeLineTokenizer lineText /// Adjust the set of extra colorizations and return a sorted list of affected lines. - member _.SetExtraColorizations (tokens: SemanticClassificationItem[]) = + member __.SetExtraColorizations (tokens: struct (Range.range * SemanticClassificationType)[]) = if tokens.Length = 0 && extraColorizations.IsNone then [| |] else - let newExtraColorizationsKeyed = dict (tokens |> Array.groupBy (fun item -> Line.toZ item.Range.StartLine)) + let newExtraColorizationsKeyed = dict (tokens |> Array.groupBy (fun struct (r, _) -> Range.Line.toZ r.StartLine)) let oldExtraColorizationsKeyedOpt = extraColorizations extraColorizations <- Some newExtraColorizationsKeyed let changedLines = @@ -353,7 +352,7 @@ type internal FSharpColorizer_DEPRECATED member c.Buffer = buffer - member _.SetExtraColorizations tokens = scanner.SetExtraColorizations tokens + member __.SetExtraColorizations tokens = scanner.SetExtraColorizations tokens /// Implements IVsColorableItem and IVsMergeableUIItem, for colored text items diff --git a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj index 20cfe642326..7692f24fcb1 100644 --- a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj +++ b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj @@ -7,6 +7,8 @@ $(NoWarn);75 $(NoWarn);44 true + true + $(SystemValueTupleVersion) $(OtherFlags) --warnon:1182 --subsystemversion:6.00 false @@ -45,7 +47,7 @@ - + @@ -76,9 +78,10 @@ + - + diff --git a/vsintegration/src/FSharp.LanguageService/FSharpSource.fs b/vsintegration/src/FSharp.LanguageService/FSharpSource.fs index b311983e6b4..446fcfffb77 100644 --- a/vsintegration/src/FSharp.LanguageService/FSharpSource.fs +++ b/vsintegration/src/FSharp.LanguageService/FSharpSource.fs @@ -20,10 +20,8 @@ open Microsoft.VisualStudio.Text.Editor open Microsoft.VisualStudio.Text.Formatting open Microsoft.VisualStudio.TextManager.Interop open Microsoft.VisualStudio.OLE.Interop -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Diagnostics -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Text +open FSharp.Compiler +open FSharp.Compiler.SourceCodeServices #nowarn "45" // This method will be made public in the underlying IL because it may implement an interface or override a method @@ -336,12 +334,12 @@ type internal FSharpSource_DEPRECATED(service:LanguageService_DEPRECATED, textLi let iSource = new FSharpSourceTestable_DEPRECATED(recolorizeWholeFile,recolorizeLine,(fun () -> VsTextLines.GetFilename textLines),(fun () -> source.IsClosed),vsFileWatch, depFileChange) :> IFSharpSource_DEPRECATED - override source.NormalizeErrorString(message) = FSharpDiagnostic.NormalizeErrorString message - override source.NewlineifyErrorString(message) = FSharpDiagnostic.NewlineifyErrorString message + override source.NormalizeErrorString(message) = ErrorLogger.NormalizeErrorString message + override source.NewlineifyErrorString(message) = ErrorLogger.NewlineifyErrorString message override source.GetExpressionAtPosition(line, col) = let upi = source.GetParseTree() - match ParsedInput.TryFindExpressionIslandInPosition(Position.fromZ line col, upi.ParseTree) with + match UntypedParseImpl.TryFindExpressionIslandInPosition(Range.Pos.fromZ line col, upi.ParseTree) with | Some islandToEvaluate -> islandToEvaluate | None -> null @@ -355,7 +353,6 @@ type internal FSharpSource_DEPRECATED(service:LanguageService_DEPRECATED, textLi yield! pi.CompilationOptions |> Array.filter(fun flag -> flag.StartsWith("--define:")) | None -> () yield "--noframework" - yield "--define:COMPILED" |] // get a sync parse of the file @@ -370,6 +367,7 @@ type internal FSharpSource_DEPRECATED(service:LanguageService_DEPRECATED, textLi LoadTime = new System.DateTime(2000,1,1) // dummy data, just enough to get a parse UnresolvedReferences = None OriginalLoadReferences = [] + ExtraProjectInfo=None Stamp = None } |> ic.GetParsingOptionsFromProjectOptions @@ -447,7 +445,7 @@ type internal FSharpSource_DEPRECATED(service:LanguageService_DEPRECATED, textLi if reason = BackgroundRequestReason.CompleteWord then let upi = source.GetParseTree() let isBetweenDotAndIdent = - match ParsedInput.TryFindExpressionASTLeftOfDotLeftOfCursor(Position.fromZ !line !idx, upi.ParseTree) with + match FSharp.Compiler.SourceCodeServices.UntypedParseImpl.TryFindExpressionASTLeftOfDotLeftOfCursor(Range.Pos.fromZ !line !idx, upi.ParseTree) with | Some(_,isBetweenDotAndIdent) -> isBetweenDotAndIdent | None -> false if isBetweenDotAndIdent then diff --git a/vsintegration/src/FSharp.LanguageService/GotoDefinition.fs b/vsintegration/src/FSharp.LanguageService/GotoDefinition.fs index 8f575af130a..0506ed63abe 100644 --- a/vsintegration/src/FSharp.LanguageService/GotoDefinition.fs +++ b/vsintegration/src/FSharp.LanguageService/GotoDefinition.fs @@ -8,9 +8,8 @@ open System open System.Diagnostics open Microsoft.VisualStudio open Microsoft.VisualStudio.TextManager.Interop -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Tokenization +open FSharp.Compiler +open FSharp.Compiler.SourceCodeServices module internal OperatorToken = @@ -74,23 +73,23 @@ module internal GotoDefinition = |> GotoDefinitionResult_DEPRECATED.MakeError else match typedResults.GetDeclarationLocation (line+1, colIdent, lineStr, qualId, false) with - | FindDeclResult.DeclNotFound(reason) -> + | FSharpFindDeclResult.DeclNotFound(reason) -> if makeAnotherAttempt then gotoDefinition true else Trace.Write("LanguageService", sprintf "Goto definition failed: Reason %+A" reason) let text = match reason with - | FindDeclFailureReason.Unknown _message -> Strings.GotoDefinitionFailed_Generic() - | FindDeclFailureReason.NoSourceCode -> Strings.GotoDefinitionFailed_NotSourceCode() - | FindDeclFailureReason.ProvidedType(typeName) -> String.Format(Strings.GotoDefinitionFailed_ProvidedType(), typeName) - | FindDeclFailureReason.ProvidedMember(name) -> String.Format(Strings.GotoDefinitionFailed_ProvidedMember(), name) + | FSharpFindDeclFailureReason.Unknown _message -> Strings.GotoDefinitionFailed_Generic() + | FSharpFindDeclFailureReason.NoSourceCode -> Strings.GotoDefinitionFailed_NotSourceCode() + | FSharpFindDeclFailureReason.ProvidedType(typeName) -> String.Format(Strings.GotoDefinitionFailed_ProvidedType(), typeName) + | FSharpFindDeclFailureReason.ProvidedMember(name) -> String.Format(Strings.GotoDefinitionFailed_ProvidedMember(), name) GotoDefinitionResult_DEPRECATED.MakeError text - | FindDeclResult.DeclFound m when System.IO.File.Exists m.FileName -> + | FSharpFindDeclResult.DeclFound m when System.IO.File.Exists m.FileName -> let span = TextSpan (iStartLine = m.StartLine-1, iEndLine = m.StartLine-1, iStartIndex = m.StartColumn, iEndIndex = m.StartColumn) GotoDefinitionResult_DEPRECATED.MakeSuccess(m.FileName, span) - | FindDeclResult.DeclFound _ (* File does not exist *) -> + | FSharpFindDeclResult.DeclFound _ (* File does not exist *) -> GotoDefinitionResult_DEPRECATED.MakeError(Strings.GotoDefinitionFailed_NotSourceCode()) - | FindDeclResult.ExternalDecl _ -> + | FSharpFindDeclResult.ExternalDecl _ -> GotoDefinitionResult_DEPRECATED.MakeError(Strings.GotoDefinitionFailed_NotSourceCode()) else Trace.Write("LanguageService", "Goto definition: No 'TypeCheckInfo' available") diff --git a/vsintegration/src/FSharp.LanguageService/Intellisense.fs b/vsintegration/src/FSharp.LanguageService/Intellisense.fs index 6eeffd1695d..76b3c7b36d0 100644 --- a/vsintegration/src/FSharp.LanguageService/Intellisense.fs +++ b/vsintegration/src/FSharp.LanguageService/Intellisense.fs @@ -8,24 +8,18 @@ namespace Microsoft.VisualStudio.FSharp.LanguageService open System open System.Collections.Generic -open System.Collections.Immutable open Microsoft.VisualStudio open Microsoft.VisualStudio.Shell.Interop open Microsoft.VisualStudio.TextManager.Interop open Microsoft.VisualStudio.Text open Microsoft.VisualStudio.OLE.Interop open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Text -open FSharp.Compiler.Tokenization +open FSharp.Compiler.Range +open FSharp.Compiler.SourceCodeServices + module internal TaggedText = - let appendTo (sb: System.Text.StringBuilder) (t: TaggedText) = sb.Append t.Text |> ignore - let toString (tts: TaggedText[]) = - tts |> Array.map (fun tt -> tt.Text) |> String.concat "" + let appendTo (sb: System.Text.StringBuilder) (t: Layout.TaggedText) = sb.Append t.Text |> ignore // Note: DEPRECATED CODE ONLY ACTIVE IN UNIT TESTING VIA "UNROSLYNIZED" UNIT TESTS. // @@ -34,19 +28,19 @@ module internal TaggedText = // functionality and thus have considerable value, they should ony be deleted if we are sure this // is not the case. // -type internal FSharpMethodListForAMethodTip_DEPRECATED(documentationBuilder: IDocumentationBuilder_DEPRECATED, methodsName, methods: MethodGroupItem[], nwpl: ParameterLocations, snapshot: ITextSnapshot, isThisAStaticArgumentsTip: bool) = +type internal FSharpMethodListForAMethodTip_DEPRECATED(documentationBuilder: IDocumentationBuilder_DEPRECATED, methodsName, methods: FSharpMethodGroupItem[], nwpl: FSharpNoteworthyParamInfoLocations, snapshot: ITextSnapshot, isThisAStaticArgumentsTip: bool) = inherit MethodListForAMethodTip_DEPRECATED() // Compute the tuple end points let tupleEnds = - let oneColAfter ((l,c): Position01) = (l,c+1) - let oneColBefore ((l,c): Position01) = (l,c-1) - [| yield Position.toZ nwpl.LongIdStartLocation - yield Position.toZ nwpl.LongIdEndLocation - yield oneColAfter (Position.toZ nwpl.OpenParenLocation) + let oneColAfter ((l,c): Pos01) = (l,c+1) + let oneColBefore ((l,c): Pos01) = (l,c-1) + [| yield Pos.toZ nwpl.LongIdStartLocation + yield Pos.toZ nwpl.LongIdEndLocation + yield oneColAfter (Pos.toZ nwpl.OpenParenLocation) for i in 0..nwpl.TupleEndLocations.Length-2 do - yield Position.toZ nwpl.TupleEndLocations.[i] - let last = Position.toZ nwpl.TupleEndLocations.[nwpl.TupleEndLocations.Length-1] + yield Pos.toZ nwpl.TupleEndLocations.[i] + let last = Pos.toZ nwpl.TupleEndLocations.[nwpl.TupleEndLocations.Length-1] yield if nwpl.IsThereACloseParen then oneColBefore last else last |] let safe i dflt f = if 0 <= i && i < methods.Length then f methods.[i] else dflt @@ -58,7 +52,7 @@ type internal FSharpMethodListForAMethodTip_DEPRECATED(documentationBuilder: IDo let span = ss.CreateTrackingSpan(MakeSpan(ss,sl,sc,el,ec), SpanTrackingMode.EdgeInclusive) yield span |] - let getParameters (m : MethodGroupItem) = if isThisAStaticArgumentsTip then m.StaticParameters else m.Parameters + let getParameters (m : FSharpMethodGroupItem) = if isThisAStaticArgumentsTip then m.StaticParameters else m.Parameters do assert(methods.Length > 0) @@ -66,7 +60,7 @@ type internal FSharpMethodListForAMethodTip_DEPRECATED(documentationBuilder: IDo override x.IsThereACloseParen() = nwpl.IsThereACloseParen - override x.GetParameterLocations() = tupleEnds + override x.GetNoteworthyParamInfoLocations() = tupleEnds override x.GetParameterNames() = nwpl.NamedParamNames |> Array.map Option.toObj @@ -76,16 +70,16 @@ type internal FSharpMethodListForAMethodTip_DEPRECATED(documentationBuilder: IDo override x.GetDescription(methodIndex) = safe methodIndex "" (fun m -> let buf = Text.StringBuilder() - XmlDocumentation.BuildMethodOverloadTipText_DEPRECATED(documentationBuilder, TaggedText.appendTo buf, TaggedText.appendTo buf, m.Description, true) + XmlDocumentation.BuildMethodOverloadTipText_DEPRECATED(documentationBuilder, TaggedText.appendTo buf, TaggedText.appendTo buf, m.StructuredDescription, true) buf.ToString() ) - override x.GetReturnTypeText(methodIndex) = safe methodIndex "" (fun m -> m.ReturnTypeText |> TaggedText.toString) + override x.GetReturnTypeText(methodIndex) = safe methodIndex "" (fun m -> m.ReturnTypeText) override x.GetParameterCount(methodIndex) = safe methodIndex 0 (fun m -> getParameters(m).Length) override x.GetParameterInfo(methodIndex, parameterIndex, nameOut, displayOut, descriptionOut) = - let name,display = safe methodIndex ("","") (fun m -> let p = getParameters(m).[parameterIndex] in p.ParameterName, TaggedText.toString p.Display ) + let name,display = safe methodIndex ("","") (fun m -> let p = getParameters(m).[parameterIndex] in p.ParameterName, p.Display ) nameOut <- name displayOut <- display @@ -122,7 +116,7 @@ type internal ObsoleteGlyph = // functionality and thus have considerable value, they should ony be deleted if we are sure this // is not the case. // -type internal FSharpDeclarations_DEPRECATED(documentationBuilder, declarations: DeclarationListItem[], reason: BackgroundRequestReason) = +type internal FSharpDeclarations_DEPRECATED(documentationBuilder, declarations: FSharpDeclarationListItem[], reason: BackgroundRequestReason) = inherit Declarations_DEPRECATED() @@ -131,7 +125,7 @@ type internal FSharpDeclarations_DEPRECATED(documentationBuilder, declarations: let mutable lastBestMatch = "" let isEmpty = (declarations.Length = 0) - let tab = Dictionary() + let tab = Dictionary() // Given a prefix, narrow the items to the include the ones containing that prefix, and store in a lookaside table // attached to this declaration set. @@ -189,7 +183,7 @@ type internal FSharpDeclarations_DEPRECATED(documentationBuilder, declarations: let decls = trimmedDeclarations filterText if (index >= 0 && index < decls.Length) then let buf = Text.StringBuilder() - XmlDocumentation.BuildDataTipText_DEPRECATED(documentationBuilder, TaggedText.appendTo buf, TaggedText.appendTo buf, decls.[index].Description) + XmlDocumentation.BuildDataTipText_DEPRECATED(documentationBuilder, TaggedText.appendTo buf, TaggedText.appendTo buf, decls.[index].StructuredDescriptionTextAsync |> Async.RunSynchronously) buf.ToString() else "" @@ -230,7 +224,7 @@ type internal FSharpDeclarations_DEPRECATED(documentationBuilder, declarations: // We intercept this call only to get the initial extent // of what was committed to the source buffer. let result = decl.GetName(filterText, index) - FSharpKeywords.QuoteIdentifierIfNeeded result + Keywords.QuoteIdentifierIfNeeded result override decl.IsCommitChar(commitCharacter) = // Usual language identifier rules... @@ -320,7 +314,7 @@ type internal FSharpIntellisenseInfo_DEPRECATED if provideMethodList then try // go ahead and compute this now, on this background thread, so will have info ready when UI thread asks - let noteworthyParamInfoLocations = untypedResults.FindParameterLocations(Position.fromZ brLine brCol) + let noteworthyParamInfoLocations = untypedResults.FindNoteworthyParamInfoLocations(Range.Pos.fromZ brLine brCol) // we need some typecheck info, even if stale, in order to look up e.g. method overload types/xmldocs if typedResults.HasFullTypeCheckInfo then @@ -350,7 +344,7 @@ type internal FSharpIntellisenseInfo_DEPRECATED // both point to the same longId. However we can look at the character at the 'OpenParen' location and see if it is a '(' or a '<' and then // filter the "methods" list accordingly. let isThisAStaticArgumentsTip = - let parenLine, parenCol = Position.toZ nwpl.OpenParenLocation + let parenLine, parenCol = Pos.toZ nwpl.OpenParenLocation let textAtOpenParenLocation = if brSnapshot=null then // we are unit testing, use the view @@ -424,10 +418,10 @@ type internal FSharpIntellisenseInfo_DEPRECATED // Correct the identifier (e.g. to correctly handle active pattern names that end with "BAR" token) let tokenTag = QuickParse.CorrectIdentifierToken s tokenTag - let dataTip = typedResults.GetToolTip(Line.fromZ line, colAtEndOfNames, lineText, qualId, tokenTag) + let dataTip = typedResults.GetStructuredToolTipText(Range.Line.fromZ line, colAtEndOfNames, lineText, qualId, tokenTag) match dataTip with - | ToolTipText.ToolTipText [] when makeSecondAttempt -> getDataTip true + | FSharpStructuredToolTipText.FSharpToolTipText [] when makeSecondAttempt -> getDataTip true | _ -> let buf = Text.StringBuilder() XmlDocumentation.BuildDataTipText_DEPRECATED(documentationBuilder, TaggedText.appendTo buf, TaggedText.appendTo buf, dataTip) @@ -455,7 +449,7 @@ type internal FSharpIntellisenseInfo_DEPRECATED | BackgroundRequestReason.MethodTip // param info... | BackgroundRequestReason.MatchBracesAndMethodTip // param info... | BackgroundRequestReason.CompleteWord | BackgroundRequestReason.MemberSelect | BackgroundRequestReason.DisplayMemberList // and intellisense-completion... - -> true // ...require a sync parse (so as to call FindParameterLocations and GetRangeOfExprLeftOfDot, respectively) + -> true // ...require a sync parse (so as to call FindNoteworthyParamInfoLocations and GetRangeOfExprLeftOfDot, respectively) | _ -> false /// Implements the corresponding abstract member from IntellisenseInfo in MPF. @@ -502,7 +496,7 @@ type internal FSharpIntellisenseInfo_DEPRECATED let pname = QuickParse.GetPartialLongNameEx(lineText, col-1) let _x = 1 // for breakpoint - let decls = typedResults.GetDeclarationListInfo(untypedParseInfoOpt, Line.fromZ line, lineText, pname, (fun() -> [])) + let decls = typedResults.GetDeclarationListInfo(untypedParseInfoOpt, Range.Line.fromZ line, lineText, pname, (fun() -> [])) return (new FSharpDeclarations_DEPRECATED(documentationBuilder, decls.Items, reason) :> Declarations_DEPRECATED) else // no TypeCheckInfo in ParseResult. @@ -562,7 +556,7 @@ type internal FSharpIntellisenseInfo_DEPRECATED | Some(s,colAtEndOfNames, _) -> if typedResults.HasFullTypeCheckInfo then let qualId = PrettyNaming.GetLongNameFromString s - match typedResults.GetF1Keyword(Line.fromZ line,colAtEndOfNames, lineText, qualId) with + match typedResults.GetF1Keyword(Range.Line.fromZ line,colAtEndOfNames, lineText, qualId) with | Some s -> Some s | None -> None else None diff --git a/vsintegration/src/FSharp.LanguageService/ProjectSitesAndFiles.fs b/vsintegration/src/FSharp.LanguageService/ProjectSitesAndFiles.fs index 5200249efab..9909aaefa57 100644 --- a/vsintegration/src/FSharp.LanguageService/ProjectSitesAndFiles.fs +++ b/vsintegration/src/FSharp.LanguageService/ProjectSitesAndFiles.fs @@ -40,12 +40,17 @@ open System.Diagnostics open Microsoft.VisualStudio open Microsoft.VisualStudio.TextManager.Interop open Microsoft.VisualStudio.Shell.Interop -open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.SourceCodeServices open Microsoft.CodeAnalysis +open Microsoft.VisualStudio.LanguageServices open Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem open Microsoft.VisualStudio.LanguageServices.Implementation.TaskList +open VSLangProj +open System.ComponentModel.Composition.Primitives +open Microsoft.VisualStudio.Shell +open System.Collections.Immutable + /// An additional interface that an IProjectSite object can implement to indicate it has an FSharpProjectOptions /// already available, so we don't have to recreate it @@ -136,7 +141,7 @@ type internal FSharpProjectOptionsTable () = projectTable.[otherProjectId] <- (refresh true, refresh) /// Add or update a project in the project table - member _.AddOrUpdateProject(projectId:ProjectId, refresh) = + member __.AddOrUpdateProject(projectId:ProjectId, refresh) = projectTable.[projectId] <- (refresh false, refresh) refreshInfoForProjectsThatReferenceThisProject(projectId) @@ -152,7 +157,7 @@ type internal FSharpProjectOptionsTable () = | _ -> None /// Given a projectId return the most recent set of command line options for it - member _.GetCommandLineOptionsWithProjectId(projectId:ProjectId) = + member __.GetCommandLineOptionsWithProjectId(projectId:ProjectId) = match commandLineOptions.TryGetValue projectId with | true, (sources, references, options) -> sources, references, options | _ -> [||], [||], [||] @@ -179,45 +184,45 @@ let internal provideProjectSiteProvider(workspace:VisualStudioWorkspaceImpl, pro { new IProjectSite with - member _.Description = project.Name - member _.CompilationSourceFiles = getCommandLineOptionsWithProjectId(project.Id) |> fst - member _.CompilationOptions = + member __.Description = project.Name + member __.CompilationSourceFiles = getCommandLineOptionsWithProjectId(project.Id) |> fst + member __.CompilationOptions = let _,references,options = getCommandLineOptionsWithProjectId(project.Id) Array.concat [options; references |> Array.map(fun r -> "-r:" + r)] - member _.CompilationReferences = getCommandLineOptionsWithProjectId(project.Id) |> snd + member __.CompilationReferences = getCommandLineOptionsWithProjectId(project.Id) |> snd member site.CompilationBinOutputPath = site.CompilationOptions |> Array.tryPick (fun s -> if s.StartsWith("-o:") then Some s.[3..] else None) - member _.ProjectFileName = project.FilePath - member _.AdviseProjectSiteChanges(_,_) = () - member _.AdviseProjectSiteCleaned(_,_) = () - member _.AdviseProjectSiteClosed(_,_) = () - member _.IsIncompleteTypeCheckEnvironment = false - member _.TargetFrameworkMoniker = "" - member _.ProjectGuid = project.Id.Id.ToString() - member _.LoadTime = System.DateTime.Now - member _.ProjectProvider = Some (x) - member _.BuildErrorReporter with get () = errorReporter and set (v) = errorReporter <- v + member __.ProjectFileName = project.FilePath + member __.AdviseProjectSiteChanges(_,_) = () + member __.AdviseProjectSiteCleaned(_,_) = () + member __.AdviseProjectSiteClosed(_,_) = () + member __.IsIncompleteTypeCheckEnvironment = false + member __.TargetFrameworkMoniker = "" + member __.ProjectGuid = project.Id.Id.ToString() + member __.LoadTime = System.DateTime.Now + member __.ProjectProvider = Some (x) + member __.BuildErrorReporter with get () = errorReporter and set (v) = errorReporter <- v } interface IVsHierarchy with - member _.SetSite(psp) = hier.SetSite(psp) - member _.GetSite(psp) = hier.GetSite(ref psp) - member _.QueryClose(pfCanClose) = hier.QueryClose(ref pfCanClose) - member _.Close() = hier.Close() - member _.GetGuidProperty(itemid, propid, pguid) = hier.GetGuidProperty(itemid, propid, ref pguid) - member _.SetGuidProperty(itemid, propid, rguid) = hier.SetGuidProperty(itemid, propid, ref rguid) - member _.GetProperty(itemid, propid, pvar) = hier.GetProperty(itemid, propid, ref pvar) - member _.SetProperty(itemid, propid, var) = hier.SetProperty(itemid, propid, var) - member _.GetNestedHierarchy(itemid, iidHierarchyNested, ppHierarchyNested, pitemidNested) = + member __.SetSite(psp) = hier.SetSite(psp) + member __.GetSite(psp) = hier.GetSite(ref psp) + member __.QueryClose(pfCanClose) = hier.QueryClose(ref pfCanClose) + member __.Close() = hier.Close() + member __.GetGuidProperty(itemid, propid, pguid) = hier.GetGuidProperty(itemid, propid, ref pguid) + member __.SetGuidProperty(itemid, propid, rguid) = hier.SetGuidProperty(itemid, propid, ref rguid) + member __.GetProperty(itemid, propid, pvar) = hier.GetProperty(itemid, propid, ref pvar) + member __.SetProperty(itemid, propid, var) = hier.SetProperty(itemid, propid, var) + member __.GetNestedHierarchy(itemid, iidHierarchyNested, ppHierarchyNested, pitemidNested) = hier.GetNestedHierarchy(itemid, ref iidHierarchyNested, ref ppHierarchyNested, ref pitemidNested) - member _.GetCanonicalName(itemid, pbstrName) = hier.GetCanonicalName(itemid, ref pbstrName) - member _.ParseCanonicalName(pszName, pitemid) = hier.ParseCanonicalName(pszName, ref pitemid) - member _.Unused0() = hier.Unused0() - member _.AdviseHierarchyEvents(pEventSink, pdwCookie) = hier.AdviseHierarchyEvents(pEventSink, ref pdwCookie) - member _.UnadviseHierarchyEvents(dwCookie) = hier.UnadviseHierarchyEvents(dwCookie) - member _.Unused1() = hier.Unused1() - member _.Unused2() = hier.Unused2() - member _.Unused3() = hier.Unused3() - member _.Unused4() = hier.Unused4() + member __.GetCanonicalName(itemid, pbstrName) = hier.GetCanonicalName(itemid, ref pbstrName) + member __.ParseCanonicalName(pszName, pitemid) = hier.ParseCanonicalName(pszName, ref pitemid) + member __.Unused0() = hier.Unused0() + member __.AdviseHierarchyEvents(pEventSink, pdwCookie) = hier.AdviseHierarchyEvents(pEventSink, ref pdwCookie) + member __.UnadviseHierarchyEvents(dwCookie) = hier.UnadviseHierarchyEvents(dwCookie) + member __.Unused1() = hier.Unused1() + member __.Unused2() = hier.Unused2() + member __.Unused3() = hier.Unused3() + member __.Unused4() = hier.Unused4() } /// Information about projects, open files and other active artifacts in visual studio. @@ -257,16 +262,29 @@ type internal ProjectSitesAndFiles() = | _ -> None | Some _ -> None - static let rec referencedProvideProjectSites(projectSite:IProjectSite, serviceProvider:System.IServiceProvider) = + static let rec referencedProvideProjectSites(projectSite:IProjectSite, serviceProvider:System.IServiceProvider, extraProjectInfo:obj option, projectOptionsTable:FSharpProjectOptionsTable option) = let getReferencesForSolutionService (solutionService:IVsSolution) = [| - match referencedProjects projectSite, None with + match referencedProjects projectSite, extraProjectInfo with + | None, Some (:? VisualStudioWorkspaceImpl as workspace) when not (isNull workspace.CurrentSolution)-> + let path = projectSite.ProjectFileName + if not (String.IsNullOrWhiteSpace(path)) then + let projectId = workspace.ProjectTracker.GetOrCreateProjectIdForPath(path, projectDisplayNameOf path) + let project = workspace.CurrentSolution.GetProject(projectId) + if not (isNull project) then + for reference in project.ProjectReferences do + let project = workspace.CurrentSolution.GetProject(reference.ProjectId) + if not (isNull project) && project.Language = LanguageServiceConstants.FSharpLanguageName then + let siteProvider = provideProjectSiteProvider (workspace, project, serviceProvider, projectOptionsTable) + let referenceProject = workspace.ProjectTracker.GetProject(reference.ProjectId) + let outputPath = referenceProject.BinOutputPath + yield Some projectId, project.FilePath, outputPath, siteProvider | (Some references), _ -> for p in references do match solutionService.GetProjectOfUniqueName(p.UniqueName) with | VSConstants.S_OK, (:? IProvideProjectSite as ps) -> - yield p.FileName, (fullOutputAssemblyPath p) |> Option.defaultValue "", ps + yield None, p.FileName, (fullOutputAssemblyPath p) |> Option.defaultValue "", ps | _ -> () | None, _ -> () |] @@ -278,48 +296,62 @@ type internal ProjectSitesAndFiles() = | None -> () } - static let rec referencedProjectsOf(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSite, serviceProvider, useUniqueStamp) = - [| for (projectFileName, outputPath, projectSiteProvider) in referencedProvideProjectSites (projectSite, serviceProvider) do + static let rec referencedProjectsOf(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSite, serviceProvider, extraProjectInfo, projectOptionsTable, useUniqueStamp) = + [| for (projectId, projectFileName, outputPath, projectSiteProvider) in referencedProvideProjectSites (projectSite, serviceProvider, extraProjectInfo, projectOptionsTable) do let referencedProjectOptions = // Lookup may not succeed if the project has not been established yet // In this case we go and compute the options recursively. match tryGetOptionsForReferencedProject projectFileName with - | None -> getProjectOptionsForProjectSite (enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSiteProvider.GetProjectSite(), serviceProvider, projectFileName, useUniqueStamp) |> snd + | None -> getProjectOptionsForProjectSite (enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSiteProvider.GetProjectSite(), serviceProvider, projectId, projectFileName, extraProjectInfo, projectOptionsTable, useUniqueStamp) |> snd | Some options -> options - yield projectFileName, FSharpReferencedProject.CreateFSharp(outputPath, referencedProjectOptions) |] + yield projectFileName, (outputPath, referencedProjectOptions) |] - and getProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSite, serviceProvider, fileName, useUniqueStamp) = + and getProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSite, serviceProvider, projectId, fileName, extraProjectInfo, projectOptionsTable, useUniqueStamp) = let referencedProjectFileNames, referencedProjectOptions = if enableInMemoryCrossProjectReferences then - referencedProjectsOf(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSite, serviceProvider, useUniqueStamp) + referencedProjectsOf(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSite, serviceProvider, extraProjectInfo, projectOptionsTable, useUniqueStamp) |> Array.unzip else [| |], [| |] let option = - { + let newOption () = { ProjectFileName = projectSite.ProjectFileName ProjectId = None SourceFiles = projectSite.CompilationSourceFiles OtherOptions = projectSite.CompilationOptions ReferencedProjects = referencedProjectOptions IsIncompleteTypeCheckEnvironment = projectSite.IsIncompleteTypeCheckEnvironment - UseScriptResolutionRules = CompilerEnvironment.MustBeSingleFileProject fileName + UseScriptResolutionRules = SourceFile.MustBeSingleFileProject fileName LoadTime = projectSite.LoadTime UnresolvedReferences = None OriginalLoadReferences = [] + ExtraProjectInfo=extraProjectInfo Stamp = if useUniqueStamp then (stamp <- stamp + 1L; Some stamp) else None } + match projectId, projectOptionsTable with + | Some id, Some optionsTable -> + // Get options from cache + match optionsTable.TryGetOptionsForProject(id) with + | Some (_parsingOptions, _site, projectOptions) -> + if projectSite.CompilationSourceFiles <> projectOptions.SourceFiles || + projectSite.CompilationOptions <> projectOptions.OtherOptions || + referencedProjectOptions <> projectOptions.ReferencedProjects then + newOption() + else + projectOptions + | _ -> newOption() + | _ -> newOption() referencedProjectFileNames, option /// Construct a project site for a single file. May be a single file project (for scripts) or an orphan project site (for everything else). static member ProjectSiteOfSingleFile(filename:string) : IProjectSite = - if CompilerEnvironment.MustBeSingleFileProject(filename) then + if SourceFile.MustBeSingleFileProject(filename) then Debug.Assert(false, ".fsx or .fsscript should have been treated as implicit project") failwith ".fsx or .fsscript should have been treated as implicit project" new ProjectSiteOfSingleFile(filename) :> IProjectSite - static member GetReferencedProjectSites(projectSite:IProjectSite, serviceProvider:System.IServiceProvider) = - referencedProvideProjectSites (projectSite, serviceProvider) - |> Seq.map (fun (_, _, ps) -> ps.GetProjectSite()) + static member GetReferencedProjectSites(projectSite:IProjectSite, serviceProvider:System.IServiceProvider, extraProjectInfo, projectOptions) = + referencedProvideProjectSites (projectSite, serviceProvider, extraProjectInfo, projectOptions) + |> Seq.map (fun (_, _, _, ps) -> ps.GetProjectSite()) |> Seq.toArray member art.SetSource_DEPRECATED(buffer:IVsTextLines, source:IFSharpSource_DEPRECATED) : unit = @@ -327,10 +359,10 @@ type internal ProjectSitesAndFiles() = (buffer :?> IVsUserData).SetData(&guid, source) |> ErrorHandler.ThrowOnFailure |> ignore /// Create project options for this project site. - static member GetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSite:IProjectSite, serviceProvider, filename, useUniqueStamp) = + static member GetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSite:IProjectSite, serviceProvider, projectId, filename, extraProjectInfo, projectOptionsTable, useUniqueStamp) = match projectSite with | :? IHaveCheckOptions as hco -> hco.OriginalCheckOptions() - | _ -> getProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSite, serviceProvider, filename, useUniqueStamp) + | _ -> getProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSite, serviceProvider, projectId, filename, extraProjectInfo, projectOptionsTable, useUniqueStamp) /// Create project site for these project options static member CreateProjectSiteForScript (filename, referencedProjectFileNames, checkOptions) = @@ -354,7 +386,7 @@ type internal ProjectSitesAndFiles() = member art.GetDefinesForFile_DEPRECATED(rdt:IVsRunningDocumentTable, filename : string, checker:FSharpChecker) = // The only caller of this function calls it each time it needs to colorize a line, so this call must execute very fast. - if CompilerEnvironment.MustBeSingleFileProject(filename) then + if SourceFile.MustBeSingleFileProject(filename) then let parsingOptions = { FSharpParsingOptions.Default with IsInteractive = true} CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions else @@ -372,7 +404,7 @@ type internal ProjectSitesAndFiles() = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions member art.TryFindOwningProject_DEPRECATED(rdt:IVsRunningDocumentTable, filename) = - if CompilerEnvironment.MustBeSingleFileProject(filename) then None + if SourceFile.MustBeSingleFileProject(filename) then None else match VsRunningDocumentTable.FindDocumentWithoutLocking(rdt,filename) with | Some(hier, _textLines) -> diff --git a/vsintegration/src/FSharp.LanguageService/Vs.fs b/vsintegration/src/FSharp.LanguageService/Vs.fs index 95fae820b59..5ce30d677bd 100644 --- a/vsintegration/src/FSharp.LanguageService/Vs.fs +++ b/vsintegration/src/FSharp.LanguageService/Vs.fs @@ -3,12 +3,18 @@ namespace Microsoft.VisualStudio.FSharp.LanguageService open System +open System.IO +open System.Collections +open System.Collections.Generic +open System.Reflection open Microsoft.VisualStudio open Microsoft.VisualStudio.Editor +open Microsoft.VisualStudio.Shell open Microsoft.VisualStudio.Shell.Interop open Microsoft.VisualStudio.Text open Microsoft.VisualStudio.TextManager.Interop -open FSharp.Compiler.Text +open Microsoft.VisualStudio.OLE.Interop +open FSharp.Compiler.Range open System.Runtime.InteropServices /// Helper methods for interoperating with COM diff --git a/vsintegration/src/FSharp.LanguageService/XmlDocumentation.fs b/vsintegration/src/FSharp.LanguageService/XmlDocumentation.fs index d6871052665..49e54e41ee5 100644 --- a/vsintegration/src/FSharp.LanguageService/XmlDocumentation.fs +++ b/vsintegration/src/FSharp.LanguageService/XmlDocumentation.fs @@ -6,19 +6,10 @@ namespace Microsoft.VisualStudio.FSharp.LanguageService open System -open System.Collections.Immutable open System.Text.RegularExpressions -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Symbols -open FSharp.Compiler.Syntax -open FSharp.Compiler.Text -open FSharp.Compiler.Text.TaggedText - -[] -module internal Utils2 = - let taggedTextToString (tts: TaggedText[]) = - tts |> Array.map (fun tt -> tt.Text) |> String.concat "" +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Layout +open FSharp.Compiler.Layout.TaggedTextOps type internal ITaggedTextCollector_DEPRECATED = abstract Add: text: TaggedText -> unit @@ -40,7 +31,7 @@ type internal TextSanitizingCollector_DEPRECATED(collector, ?lineLimit: int) = count <- count + 1 | _ -> isEmpty <- false - endsWithLineBreak <- text.Tag = TextTag.LineBreak + endsWithLineBreak <- text.Tag = LayoutTag.LineBreak if endsWithLineBreak then count <- count + 1 collector text @@ -65,14 +56,14 @@ type internal TextSanitizingCollector_DEPRECATED(collector, ?lineLimit: int) = addTaggedTextEntry (tagText paragraph) if i < paragraphs.Length - 1 then // insert two line breaks to separate paragraphs - addTaggedTextEntry TaggedText.lineBreak - addTaggedTextEntry TaggedText.lineBreak) + addTaggedTextEntry Literals.lineBreak + addTaggedTextEntry Literals.lineBreak) interface ITaggedTextCollector_DEPRECATED with member this.Add taggedText = // TODO: bail out early if line limit is already hit match taggedText.Tag with - | TextTag.Text -> reportTextLines taggedText.Text + | LayoutTag.Text -> reportTextLines taggedText.Text | _ -> addTaggedTextEntry taggedText member this.IsEmpty = isEmpty @@ -108,7 +99,7 @@ module internal XmlDocumentation = else xml let AppendHardLine(collector: ITaggedTextCollector_DEPRECATED) = - collector.Add TaggedText.lineBreak + collector.Add Literals.lineBreak let EnsureHardLine(collector: ITaggedTextCollector_DEPRECATED) = if not collector.EndsWithLineBreak then AppendHardLine collector @@ -116,17 +107,17 @@ module internal XmlDocumentation = let AppendOnNewLine (collector: ITaggedTextCollector_DEPRECATED) (line:string) = if line.Length > 0 then EnsureHardLine collector - collector.Add(TaggedText.tagText line) + collector.Add(TaggedTextOps.tagText line) /// Append an XmlCommnet to the segment. let AppendXmlComment_DEPRECATED(documentationProvider:IDocumentationBuilder_DEPRECATED, sink: ITaggedTextCollector_DEPRECATED, xml, showExceptions, showParameters, paramName) = match xml with | FSharpXmlDoc.None -> () - | FSharpXmlDoc.FromXmlFile(filename,signature) -> + | FSharpXmlDoc.XmlDocFileSignature(filename,signature) -> documentationProvider.AppendDocumentation(sink, filename, signature, showExceptions, showParameters, paramName) - | FSharpXmlDoc.FromXmlText(xmlDoc) -> - let processedXml = ProcessXml("\n\n" + String.concat "\n" xmlDoc.UnprocessedLines) + | FSharpXmlDoc.Text(rawText, _) -> + let processedXml = ProcessXml("\n\n" + String.concat "\n" rawText) documentationProvider.AppendDocumentationFromProcessedXML(sink, processedXml, showExceptions, showParameters, paramName) let private AddSeparator (collector: ITaggedTextCollector_DEPRECATED) = @@ -136,7 +127,7 @@ module internal XmlDocumentation = AppendHardLine collector /// Build a data tip text string with xml comments injected. - let BuildTipText_DEPRECATED(documentationProvider:IDocumentationBuilder_DEPRECATED, dataTipText: ToolTipElement list, textCollector, xmlCollector, showText, showExceptions, showParameters) = + let BuildTipText_DEPRECATED(documentationProvider:IDocumentationBuilder_DEPRECATED, dataTipText: FSharpStructuredToolTipElement list, textCollector, xmlCollector, showText, showExceptions, showParameters) = let textCollector: ITaggedTextCollector_DEPRECATED = TextSanitizingCollector_DEPRECATED(textCollector, lineLimit = 45) :> _ let xmlCollector: ITaggedTextCollector_DEPRECATED = TextSanitizingCollector_DEPRECATED(xmlCollector, lineLimit = 45) :> _ @@ -145,21 +136,21 @@ module internal XmlDocumentation = AddSeparator textCollector AddSeparator xmlCollector - let Process add (dataTipElement: ToolTipElement) = + let Process add (dataTipElement: FSharpStructuredToolTipElement) = match dataTipElement with - | ToolTipElement.None -> false + | FSharpStructuredToolTipElement.None -> false - | ToolTipElement.Group (overloads) -> + | FSharpStructuredToolTipElement.Group (overloads) -> let overloads = Array.ofList overloads let len = overloads.Length if len >= 1 then addSeparatorIfNecessary add if showText then - let AppendOverload (item :ToolTipElementData) = - if taggedTextToString item.MainDescription <> "" then - if not textCollector.IsEmpty then textCollector.Add TaggedText.lineBreak - item.MainDescription |> Seq.iter textCollector.Add + let AppendOverload (item :FSharpToolTipElementData<_>) = + if not(FSharp.Compiler.Layout.isEmptyL item.MainDescription) then + if not textCollector.IsEmpty then textCollector.Add Literals.lineBreak + renderL (taggedTextListR textCollector.Add) item.MainDescription |> ignore AppendOverload(overloads.[0]) if len >= 2 then AppendOverload(overloads.[1]) @@ -167,14 +158,14 @@ module internal XmlDocumentation = if len >= 4 then AppendOverload(overloads.[3]) if len >= 5 then AppendOverload(overloads.[4]) if len >= 6 then - textCollector.Add TaggedText.lineBreak + textCollector.Add Literals.lineBreak textCollector.Add (tagText(PrettyNaming.FormatAndOtherOverloadsString(len-5))) let item0 = overloads.[0] item0.Remarks |> Option.iter (fun r -> - textCollector.Add TaggedText.lineBreak - r |> Seq.iter textCollector.Add |> ignore) + textCollector.Add Literals.lineBreak + renderL (taggedTextListR textCollector.Add) r |> ignore) AppendXmlComment_DEPRECATED(documentationProvider, xmlCollector, item0.XmlDoc, showExceptions, showParameters, item0.ParamName) @@ -182,16 +173,16 @@ module internal XmlDocumentation = else false - | ToolTipElement.CompositionError(errText) -> + | FSharpStructuredToolTipElement.CompositionError(errText) -> textCollector.Add(tagText errText) true List.fold Process false dataTipText |> ignore - let BuildDataTipText_DEPRECATED(documentationProvider, textCollector, xmlCollector, ToolTipText(dataTipText)) = + let BuildDataTipText_DEPRECATED(documentationProvider, textCollector, xmlCollector, FSharpToolTipText(dataTipText)) = BuildTipText_DEPRECATED(documentationProvider, dataTipText, textCollector, xmlCollector, true, true, false) - let BuildMethodOverloadTipText_DEPRECATED(documentationProvider, textCollector, xmlCollector, ToolTipText(dataTipText), showParams) = + let BuildMethodOverloadTipText_DEPRECATED(documentationProvider, textCollector, xmlCollector, FSharpToolTipText(dataTipText), showParams) = BuildTipText_DEPRECATED(documentationProvider, dataTipText, textCollector, xmlCollector, false, false, showParams) diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/AssemblyInfo.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/AssemblyInfo.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/AssemblyInfo.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/AssemblyInfo.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/AssemblyReferenceNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/AssemblyReferenceNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/AssemblyReferenceNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/AssemblyReferenceNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Attributes.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Attributes.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Attributes.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Attributes.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAFileItem.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAFileItem.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAFileItem.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAFileItem.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAFolderItem.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAFolderItem.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAFolderItem.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAFolderItem.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OANavigableProjectItems.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OANavigableProjectItems.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Automation/OANavigableProjectItems.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OANavigableProjectItems.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OANullProperty.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OANullProperty.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Automation/OANullProperty.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OANullProperty.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAProject.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAProject.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAProject.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAProject.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAProjectItem.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAProjectItem.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAProjectItem.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAProjectItem.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAProjectItems.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAProjectItems.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAProjectItems.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAProjectItems.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAProperties.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAProperties.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAProperties.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAProperties.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAProperty.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAProperty.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAProperty.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAProperty.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAReferenceFolderItem.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAReferenceFolderItem.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAReferenceFolderItem.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAReferenceFolderItem.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAReferenceItem.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAReferenceItem.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAReferenceItem.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAReferenceItem.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAAssemblyReference.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAAssemblyReference.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAAssemblyReference.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAAssemblyReference.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OABuildManager.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OABuildManager.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OABuildManager.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OABuildManager.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAComReference.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAComReference.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAComReference.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAComReference.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAProjectReference.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAProjectReference.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAProjectReference.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAProjectReference.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAReferenceBase.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAReferenceBase.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAReferenceBase.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAReferenceBase.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAReferences.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAReferences.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAReferences.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAReferences.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAVSProject.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAVSProject.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAVSProject.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAVSProject.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAVSProjectItem.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAVSProjectItem.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAVSProjectItem.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAVSProjectItem.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/BuildDependency.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/BuildDependency.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/BuildDependency.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/BuildDependency.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/BuildPropertyPage.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/BuildPropertyPage.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/BuildPropertyPage.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/BuildPropertyPage.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/ComReferenceNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ComReferenceNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/ComReferenceNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/ComReferenceNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/ConfigProvider.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ConfigProvider.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/ConfigProvider.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/ConfigProvider.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/ConfigurationProperties.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ConfigurationProperties.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/ConfigurationProperties.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/ConfigurationProperties.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/DataObject.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/DataObject.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/DataObject.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/DataObject.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/DesignPropertyDescriptor.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/DesignPropertyDescriptor.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/DesignPropertyDescriptor.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/DesignPropertyDescriptor.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/DocumentManager.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/DocumentManager.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/DocumentManager.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/DocumentManager.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/EnumDependencies.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/EnumDependencies.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/EnumDependencies.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/EnumDependencies.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.ruleset b/vsintegration/src/FSharp.ProjectSystem.Base/Project/FSharp.ProjectSystem.Base.ruleset similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.ruleset rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/FSharp.ProjectSystem.Base.ruleset diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/FileChangeManager.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/FileChangeManager.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/FileChangeManager.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/FileChangeManager.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/FileDocumentManager.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/FileDocumentManager.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/FileDocumentManager.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/FileDocumentManager.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/FileNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/FileNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/FileNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/FileNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/FolderNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/FolderNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/FolderNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/FolderNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/GlobalSuppressions.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/GlobalSuppressions.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/GlobalSuppressions.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/GlobalSuppressions.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/GroupingReferenceNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/GroupingReferenceNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/GroupingReferenceNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/GroupingReferenceNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/HierarchyNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/HierarchyNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/HierarchyNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/HierarchyNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/IDEBuildLogger.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/IDEBuildLogger.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/IDEBuildLogger.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/IDEBuildLogger.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/ImageHandler.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ImageHandler.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/ImageHandler.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/ImageHandler.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Interfaces.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Interfaces.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Interfaces.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Interfaces.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/LinkedFileNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/LinkedFileNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/LinkedFileNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/LinkedFileNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/LocalizableProperties.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/LocalizableProperties.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/LocalizableProperties.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/LocalizableProperties.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Microsoft.VisualStudio.Package.Project.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Microsoft.VisualStudio.Package.Project.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Microsoft.VisualStudio.Package.Project.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Microsoft.VisualStudio.Package.Project.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Microsoft.VisualStudio.Package.Project.resx b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Microsoft.VisualStudio.Package.Project.resx similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Microsoft.VisualStudio.Package.Project.resx rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Microsoft.VisualStudio.Package.Project.resx diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Misc/AutomationExtenderManager.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Misc/AutomationExtenderManager.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Misc/AutomationExtenderManager.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Misc/AutomationExtenderManager.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Misc/ConnectionPointContainer.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Misc/ConnectionPointContainer.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Misc/ConnectionPointContainer.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Misc/ConnectionPointContainer.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Misc/ExternDll.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Misc/ExternDll.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Misc/ExternDll.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Misc/ExternDll.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Misc/NativeMethods.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Misc/NativeMethods.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Misc/NativeMethods.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Misc/NativeMethods.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Misc/UnsafeNativeMethods.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Misc/UnsafeNativeMethods.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Misc/UnsafeNativeMethods.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Misc/UnsafeNativeMethods.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/NodeProperties.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/NodeProperties.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/NodeProperties.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/NodeProperties.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/OleServiceProvider.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/OleServiceProvider.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/OleServiceProvider.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/OleServiceProvider.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Output.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Output.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Output.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Output.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/OutputGroup.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/OutputGroup.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/OutputGroup.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/OutputGroup.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/ProjectBase.files b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectBase.files similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/ProjectBase.files rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectBase.files diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/ProjectConfig.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectConfig.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/ProjectConfig.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectConfig.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/ProjectDesignerDocumentManager.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectDesignerDocumentManager.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/ProjectDesignerDocumentManager.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectDesignerDocumentManager.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/ProjectElement.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectElement.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/ProjectElement.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectElement.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/ProjectFactory.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectFactory.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/ProjectFactory.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectFactory.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/ProjectFileConstants.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectFileConstants.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/ProjectFileConstants.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectFileConstants.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/ProjectNode.CopyPaste.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectNode.CopyPaste.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/ProjectNode.CopyPaste.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectNode.CopyPaste.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/ProjectNode.Events.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectNode.Events.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/ProjectNode.Events.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectNode.Events.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/ProjectNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/ProjectNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/ProjectOptions.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectOptions.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/ProjectOptions.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectOptions.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/ProjectPackage.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectPackage.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/ProjectPackage.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectPackage.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/ProjectReferenceNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectReferenceNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/ProjectReferenceNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectReferenceNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectSystem.Base.csproj similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectSystem.Base.csproj diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/PropertiesEditorLauncher.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/PropertiesEditorLauncher.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/PropertiesEditorLauncher.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/PropertiesEditorLauncher.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/ReferenceContainerNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ReferenceContainerNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/ReferenceContainerNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/ReferenceContainerNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/ReferenceNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/ReferenceNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/ReferenceNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/ReferenceNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Resources/imagelis.bmp b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Resources/imagelis.bmp similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Resources/imagelis.bmp rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Resources/imagelis.bmp diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/SelectionListener.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/SelectionListener.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/SelectionListener.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/SelectionListener.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/SolutionListener.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/SolutionListener.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/SolutionListener.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/SolutionListener.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/SolutionListenerForProjectEvents.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/SolutionListenerForProjectEvents.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/SolutionListenerForProjectEvents.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/SolutionListenerForProjectEvents.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/SolutionListenerForProjectOpen.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/SolutionListenerForProjectOpen.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/SolutionListenerForProjectOpen.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/SolutionListenerForProjectOpen.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/SolutionListenerForProjectReferenceUpdate.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/SolutionListenerForProjectReferenceUpdate.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/SolutionListenerForProjectReferenceUpdate.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/SolutionListenerForProjectReferenceUpdate.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/StructuresEnums.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/StructuresEnums.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/StructuresEnums.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/StructuresEnums.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/SuspendFileChanges.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/SuspendFileChanges.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/SuspendFileChanges.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/SuspendFileChanges.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Tracing.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Tracing.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Tracing.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Tracing.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/TrackDocumentsHelper.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/TrackDocumentsHelper.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/TrackDocumentsHelper.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/TrackDocumentsHelper.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/TypeConverters.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/TypeConverters.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/TypeConverters.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/TypeConverters.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/UIThread.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/UIThread.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/UIThread.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/UIThread.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/UpdateSolutionEventsListener.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/UpdateSolutionEventsListener.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/UpdateSolutionEventsListener.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/UpdateSolutionEventsListener.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Utilities.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Utilities.cs similarity index 99% rename from vsintegration/src/FSharp.ProjectSystem.Base/Utilities.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/Utilities.cs index 00cf273f321..b638c4c69fb 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Utilities.cs +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/Utilities.cs @@ -740,7 +740,7 @@ public static Microsoft.Build.Evaluation.Project InitializeMsBuildProject(Micros { var lclGlobalProperties = (null == globalProperties) ? new Dictionary() : new Dictionary(globalProperties) { - { "FSharpCompilerPath", Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Tools") } + { "FSharpCompilerPath", Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) } }; buildProject = buildEngine.LoadProject(fullProjectPath, lclGlobalProperties, null); buildProject.IsBuildEnabled = true; diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/VSMDCodeDomProvider.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/VSMDCodeDomProvider.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/VSMDCodeDomProvider.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/VSMDCodeDomProvider.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/VSProjectConstants.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/VSProjectConstants.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/VSProjectConstants.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/VSProjectConstants.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/VSShellUtilities.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/VSShellUtilities.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/VSShellUtilities.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/VSShellUtilities.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/VsCommands.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Project/VsCommands.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/VsCommands.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/VsCommands.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.cs.xlf similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.cs.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.cs.xlf diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.de.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.de.xlf similarity index 99% rename from vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.de.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.de.xlf index 500919c1429..d5de79f0e5c 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.de.xlf @@ -612,7 +612,7 @@ A 'UsingTask' tag which registers the '{1}' task was found in the project file '{0}'. 'UsingTask' tags in the project file take precedence over those in the imported .TARGETS files, and therefore could be used to execute arbitrary code during an otherwise unmodified build process. - In der Projektdatei "{1}" wurde ein <UsingTask>-Tag gefunden, das die Aufgabe "{0}" registriert. <UsingTask>-Tags in der Projektdatei haben Vorrang gegenüber denen in importierten TARGETS-Dateien. Daher könnten sie dazu verwendet werden, willkürlichen Code während eines sonst unveränderten Buildprozesses auszuführen. + In der Projektdatei "{0}" wurde ein <UsingTask>-Tag gefunden, das die Aufgabe "{1}" registriert. <UsingTask>-Tags in der Projektdatei haben Vorrang gegenüber denen in importierten TARGETS-Dateien. Daher könnten sie dazu verwendet werden, willkürlichen Code während eines sonst unveränderten Buildprozesses auszuführen. diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.es.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.es.xlf similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.es.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.es.xlf diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf similarity index 99% rename from vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf index 61528d55d61..98538c729e1 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf @@ -131,8 +131,8 @@ Les noms de fichiers et de dossiers ne peuvent pas : - être des chaînes vides ; - être des noms réservés au système, notamment 'CON', 'AUX', PRN', 'COM1' ou 'LPT2' ; -- contenir uniquement '.' -- comporter les caractères suivants : / ? : & \ * " < > | # % +- contenir uniquement '.' ; +- comporter les caractères suivants : / ? : & \ * " < > | # % diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.it.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.it.xlf similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.it.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.it.xlf diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ja.xlf similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.ja.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ja.xlf diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ko.xlf similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.ko.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ko.xlf diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pl.xlf similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.pl.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pl.xlf diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pt-BR.xlf similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.pt-BR.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pt-BR.xlf diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf similarity index 98% rename from vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf index 88d0087541f..d279159cd7d 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf @@ -592,12 +592,12 @@ An 'Import' of the file '{1}' was found in the project file '{0}'. This file is not registered as a safe file to import, and could contain targets and tasks that are harmful. If this imported file is indeed considered safe, then it can be registered by writing to the registry key {2}. - В файле проекта "{1}" найден импорт файла "{0}". Этот файл не зарегистрирован как безопасный для импорта и может содержать уязвимые места или злонамеренные задачи. Если этот файл в самом деле безопасен, его можно зарегистрировать при помощи записи в раздел реестра {2}. + В файле проекта "{0}" найден <Import> файла "{1}". Этот файл не зарегистрирован как безопасный для импорта, и может содержать опасные цели и задания. Если файл является безопасным, он может быть зарегистрирован при помощи записи в раздел реестра {2}. An 'Import' of the file '{1}' was found in the user project file '{0}'. All imports in user project files are considered unsafe. - В файле проекта пользователя "{0}" найден импорт файла "{1}". Весь импорт в пользовательских файлах проекта считается небезопасным. + В файле проекта пользователя "{0}" найден <Import> файла "{1}". Весь импорт в пользовательских файлах проекта считается небезопасным. diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.tr.xlf similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.tr.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.tr.xlf diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hans.xlf similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.zh-Hans.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hans.xlf diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hant.xlf similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.zh-Hant.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hant.xlf diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/CodeGeneratorRegistrationAttribute.cs b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/CodeGeneratorRegistrationAttribute.cs new file mode 100644 index 00000000000..83e17e61b8e --- /dev/null +++ b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/CodeGeneratorRegistrationAttribute.cs @@ -0,0 +1,149 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +using System; +using System.Globalization; + +namespace Microsoft.VisualStudio.Shell +{ + /// + /// This attribute adds a custom file generator registry entry for specific file + /// type. + /// For Example: + /// [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Generators\ + /// {fae04ec1-301f-11d3-bf4b-00c04f79efbc}\MyGenerator] + /// "CLSID"="{AAAA53CC-3D4F-40a2-BD4D-4F3419755476}" + /// "GeneratesDesignTimeSource" = d'1' + /// + /// + [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] + public sealed class CodeGeneratorRegistrationAttribute : RegistrationAttribute + { + private string _contextGuid; + private Type _generatorType; + private Guid _generatorGuid; + private string _generatorName; + private string _generatorRegKeyName; + private bool _generatesDesignTimeSource = false; + private bool _generatesSharedDesignTimeSource = false; + /// + /// Creates a new CodeGeneratorRegistrationAttribute attribute to register a custom + /// code generator for the provided context. + /// + /// The type of Code generator. Type that implements IVsSingleFileGenerator + /// The generator name + /// The context GUID this code generator would appear under. + public CodeGeneratorRegistrationAttribute(Type generatorType, string generatorName, string contextGuid) + { + if (generatorType == null) + throw new ArgumentNullException("generatorType"); + if (generatorName == null) + throw new ArgumentNullException("generatorName"); + if (contextGuid == null) + throw new ArgumentNullException("contextGuid"); + + _contextGuid = contextGuid; + _generatorType = generatorType; + _generatorName = generatorName; + _generatorRegKeyName = generatorType.Name; + _generatorGuid = generatorType.GUID; + } + + /// + /// Get the generator Type + /// + public Type GeneratorType + { + get { return _generatorType; } + } + + /// + /// Get the Guid representing the project type + /// + public string ContextGuid + { + get { return _contextGuid; } + } + + /// + /// Get the Guid representing the generator type + /// + public Guid GeneratorGuid + { + get { return _generatorGuid; } + } + + /// + /// Get or Set the GeneratesDesignTimeSource value + /// + public bool GeneratesDesignTimeSource + { + get { return _generatesDesignTimeSource; } + set { _generatesDesignTimeSource = value; } + } + + /// + /// Get or Set the GeneratesSharedDesignTimeSource value + /// + public bool GeneratesSharedDesignTimeSource + { + get { return _generatesSharedDesignTimeSource; } + set { _generatesSharedDesignTimeSource = value; } + } + + + /// + /// Gets the Generator name + /// + public string GeneratorName + { + get { return _generatorName; } + } + + /// + /// Gets the Generator reg key name under + /// + public string GeneratorRegKeyName + { + get { return _generatorRegKeyName; } + set { _generatorRegKeyName = value; } + } + + /// + /// Property that gets the generator base key name + /// + private string GeneratorRegKey + { + get { return string.Format(CultureInfo.InvariantCulture, @"Generators\{0}\{1}", ContextGuid, GeneratorRegKeyName); } + } + /// + /// Called to register this attribute with the given context. The context + /// contains the location where the registration inforomation should be placed. + /// It also contains other information such as the type being registered and path information. + /// + public override void Register(RegistrationContext context) + { + using (Key childKey = context.CreateKey(GeneratorRegKey)) + { + childKey.SetValue(string.Empty, GeneratorName); + childKey.SetValue("CLSID", GeneratorGuid.ToString("B")); + + if (GeneratesDesignTimeSource) + childKey.SetValue("GeneratesDesignTimeSource", 1); + + if (GeneratesSharedDesignTimeSource) + childKey.SetValue("GeneratesSharedDesignTimeSource", 1); + + } + + } + + /// + /// Unregister this file extension. + /// + /// + public override void Unregister(RegistrationContext context) + { + context.RemoveKey(GeneratorRegKey); + } + } +} diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/ComponentPickerPropertyPageAttribute.cs b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/ComponentPickerPropertyPageAttribute.cs new file mode 100644 index 00000000000..0ab49e00e03 --- /dev/null +++ b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/ComponentPickerPropertyPageAttribute.cs @@ -0,0 +1,152 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +using System; +using System.Globalization; + +namespace Microsoft.VisualStudio.Shell +{ + /// + /// This attribute adds the property page registration for Component picker + /// For Example: + /// [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0Exp\ComponentPickerPages\My Component Page] + /// @="#13925" + /// "Package"="{B0002DC2-56EE-4931-93F7-70D6E9863940}" + /// "Page"="{0A9F3920-3881-4f50-8986-9EDEC7B33566}" + /// "Sort"=dword:00000014 + /// "AddToMru"=dword:00000000 + /// "ComponentType"=".Net Assembly" + /// + [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] + public sealed class ComponentPickerPropertyPageAttribute : RegistrationAttribute + { + private string _packageGuid; + private string _pageGuid; + private string _pageRegKeyName; + + private string _componentType = null; + private int _sortOrder = -1; + private bool _addToMRU = false; + private string _defaultPageNameValue = ""; + + /// + /// Creates a new ComponentPicker page registration attribute to register a custom + /// component picker property page. + /// + /// The type of pacakge that provides the page + /// The page type that needs to be registered + /// Registry key name for the page. + public ComponentPickerPropertyPageAttribute(Type packageType, Type pageType, string pageRegKeyName) + { + if (packageType == null) + throw new ArgumentNullException("packageType"); + if (pageType == null) + throw new ArgumentNullException("pageType"); + if (pageRegKeyName == null) + throw new ArgumentNullException("pageName"); + + _packageGuid = packageType.GUID.ToString("B"); + _pageGuid = pageType.GUID.ToString("B"); + _pageRegKeyName = pageRegKeyName; + } + + /// + /// Get the pacakge Guid + /// + public string PacakgeGuid + { + get { return _packageGuid; } + } + + /// + /// Get the Guid representing the property page + /// + public string PageGuid + { + get { return _pageGuid; } + } + + /// + /// Get the property page reg key name. + /// + public string PageRegKeyName + { + get { return _pageRegKeyName; } + } + + /// + /// Get or Set the AddToMru value + /// + public bool AddToMru + { + get { return _addToMRU; } + set { _addToMRU = value; } + } + + /// + /// Get or set the Component Type value. + /// + public string ComponentType + { + get{ return _componentType; } + set{ _componentType = value; } + } + + /// + /// Get or Set the Sort reg value + /// + public int SortOrder + { + get { return _sortOrder; } + set { _sortOrder = value; } + } + + /// + /// get / sets default page name value + /// + public string DefaultPageNameValue + { + get { return _defaultPageNameValue; } + set { _defaultPageNameValue = value; } + } + + /// + /// Property that gets the page reg key name + /// + private string PageRegKey + { + get { return string.Format(CultureInfo.InvariantCulture, @"ComponentPickerPages\{0}", PageRegKeyName); } + } + /// + /// Called to register this attribute with the given context. The context + /// contains the location where the registration inforomation should be placed. + /// It also contains other information such as the type being registered and path information. + /// + public override void Register(RegistrationContext context) + { + using (Key childKey = context.CreateKey(PageRegKey)) + { + childKey.SetValue(string.Empty, DefaultPageNameValue); + childKey.SetValue("Package", PacakgeGuid); + childKey.SetValue("Page", PageGuid); + + if (SortOrder != -1) + childKey.SetValue("Sort", SortOrder); + if (AddToMru) + childKey.SetValue("AddToMru", Convert.ToInt32(AddToMru)); + if (ComponentType != null) + childKey.SetValue("ComponentType", ComponentType); + + } + + } + + /// + /// Unregister property page + /// + /// + public override void Unregister(RegistrationContext context) + { + context.RemoveKey(PageRegKey); + } + } +} diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/EditorFactoryNotifyForProjectAttribute.cs b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/EditorFactoryNotifyForProjectAttribute.cs new file mode 100644 index 00000000000..ba43e3de099 --- /dev/null +++ b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/EditorFactoryNotifyForProjectAttribute.cs @@ -0,0 +1,161 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +using System; +using System.Globalization; + +namespace Microsoft.VisualStudio.Shell +{ + /// + /// This attribute adds a File Extension for a Project System so that the Project + /// will call IVsEditorFactoryNotify methods when an item of this type is added + /// or renamed. + /// + /// + /// For example: + /// [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Projects\ + /// {F184B08F-C81C-45F6-A57F-5ABD9991F28F}\FileExtensions\.addin] + /// "EditorFactoryNotify"="{FA3CD31E-987B-443A-9B81-186104E8DAC1}" + /// + [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] + [System.Runtime.InteropServices.ComVisibleAttribute(false)] + public sealed class EditorFactoryNotifyForProjectAttribute : RegistrationAttribute + { + #region Fields + private Guid projectType; + private Guid factoryType; + private string fileExtension; + #endregion + + #region Constructors + /// + /// Creates a new ProvideEditorFactoryNotifyForProject attribute to register a + /// file extension with a project. + /// + /// The type of project; can be a Type, a GUID or a string representation of a GUID + /// The type of factory; can be a Type, a GUID or a string representation of a GUID + /// The file extension the EditorFactoryNotify wants to handle + public EditorFactoryNotifyForProjectAttribute(object projectType, string fileExtension, object factoryType) + { + if (factoryType == null) + { + throw new ArgumentNullException("factoryType", "Factory type can not be null."); + } + if (projectType == null) + { + throw new ArgumentNullException("projectType", "Project type can not be null."); + } + + this.fileExtension = fileExtension; + + // figure out what type of object they passed in and get the GUID from it + if (factoryType is string) + { + this.factoryType = new Guid(factoryType.ToString()); + } + else if (factoryType is Type) + { + this.factoryType = ((Type)factoryType).GUID; + } + else if (factoryType is Guid) + { + this.factoryType = (Guid)factoryType; + } + else + { + throw new ArgumentException( "Parameter is expected to be an instance of the type 'Type' or 'Guid'.", "factoryType"); + } + + // figure out what type of object they passed in and get the GUID from it + if (projectType is string) + { + this.projectType = new Guid(projectType.ToString()); + } + else if (projectType is Type) + { + this.projectType = ((Type)projectType).GUID; + } + else if (projectType is Guid) + { + this.projectType = (Guid)projectType; + } + else + { + throw new ArgumentException("Parameter is expected to be an instance of the type 'Type' or 'Guid'.", "projectType"); + } + } + #endregion + + #region Properties + /// + /// Get the Guid representing the type of the editor factory + /// + //public Guid FactoryType + public object FactoryType + { + get { return factoryType; } + } + + /// + /// Get the Guid representing the project type + /// + public object ProjectType + { + get { return projectType; } + } + + /// + /// Get or Set the extension of the XML files that support this view + /// + public string FileExtension + { + get { return fileExtension; } + } + + /// + /// Extention path within the registration context + /// + private string ProjectFileExtensionPath + { + get + { + return string.Format(CultureInfo.InvariantCulture, "Projects\\{0}\\FileExtensions\\{1}", projectType.ToString("B"), fileExtension); + } + } + #endregion + + #region Methods + /// + /// Called to register this attribute with the given context. The context + /// contains the location where the registration information should be placed. + /// It also contains other information such as the type being registered and path information. + /// + /// Given context to register in + public override void Register(RegistrationContext context) + { + if (context == null) + { + throw new ArgumentNullException("context"); + } + + context.Log.WriteLine(String.Format(CultureInfo.CurrentCulture, "EditorFactoryNoftifyForProject: {0} Extension = {1}\n", projectType.ToString(), fileExtension)); + + using (Key childKey = context.CreateKey(ProjectFileExtensionPath)) + { + childKey.SetValue("EditorFactoryNotify", factoryType.ToString("B")); + } + } + + /// + /// Unregister this file extension. + /// + /// Given context to unregister from + public override void Unregister(RegistrationContext context) + { + if (context != null) + { + context.RemoveKey(ProjectFileExtensionPath); + } + } + #endregion + } +} diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/ProvideAppCommandLineAttribute.cs b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/ProvideAppCommandLineAttribute.cs new file mode 100644 index 00000000000..e6b95483994 --- /dev/null +++ b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/ProvideAppCommandLineAttribute.cs @@ -0,0 +1,146 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +using System; +using System.ComponentModel.Design; +using System.Globalization; + +namespace Microsoft.VisualStudio.Shell +{ + /// + /// This attribute adds a commandline option to devenv for a specfic package + /// type. + /// For Example: + /// [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\AppCommandLine\MyAppCommand + /// "Arguments"="*" + /// "DemandLoad"=dword:1 + /// "Package"="{5C48C732-5C7F-40f0-87A7-05C4F15BC8C3}" + /// "HelpString"="#200" + /// + /// + [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] + public sealed class ProvideAppCommandLineAttribute : RegistrationAttribute + { + #region fields + private string _name = null; + private string _args = null; + private int _demandLoad = 0; + private Guid _pkgGuid = Guid.Empty; + private string _helpString = null; + #endregion + + #region ctors + /// + /// Constructor + /// + /// Name of new command line option + /// package type + public ProvideAppCommandLineAttribute(string name, Type packageType) + { + if (string.IsNullOrEmpty(name)) + throw new ArgumentNullException("Name is null"); + + if (packageType == null) + throw new ArgumentNullException("Package Type is null."); + + _name = name; + _pkgGuid = packageType.GUID; + } + #endregion + + #region Properties + /// + /// Name of the command line + /// + public string Name + { + get { return _name; } + set { _name = value; } + } + + /// + /// Default arguments for the command line + /// + public string Arguments + { + get { return _args; } + set { _args = value; } + } + + /// + /// Should the package be demand loaded. + /// + public int DemandLoad + { + get { return _demandLoad; } + set { _demandLoad = value; } + } + + /// + /// Guid of the package providing the command line + /// + public string PackageGuid + { + get { return _pkgGuid.ToString("B"); } + set { _pkgGuid = new Guid(value.ToString()); } + } + + /// + /// Help string to show for the command. Can be a resource id + /// + public string HelpString + { + get { return _helpString; } + set { _helpString = value; } + } + + #endregion + + #region overridden methods + /// + /// Called to register this attribute with the given context. The context + /// contains the location where the registration information should be placed. + /// it also contains such as the type being registered, and path information. + /// + public override void Register(RegistrationContext context) + { + + if (context == null) + { + throw new ArgumentNullException("context"); + } + + context.Log.WriteLine(String.Format(CultureInfo.CurrentCulture, "AppCommandLineKey: {0} \n", AppCommandLineRegKeyName)); + + using (Key childKey = context.CreateKey(AppCommandLineRegKeyName)) + { + childKey.SetValue("Arguments", Arguments); + childKey.SetValue("DemandLoad", DemandLoad); + childKey.SetValue("Package", PackageGuid); + childKey.SetValue("HelpString", HelpString); + } + } + + /// + /// Unregister this App command line + /// + public override void Unregister(RegistrationContext context) + { + context.RemoveKey(AppCommandLineRegKeyName); + } + #endregion + + #region helpers + /// + /// The reg key name of this AppCommandLine. + /// + private string AppCommandLineRegKeyName + { + get + { + return string.Format(CultureInfo.InvariantCulture, @"AppCommandLine\{0}", Name); + } + } + #endregion + } +} + diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/SolutionPersistenceRegistrationAttribute.cs b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/SolutionPersistenceRegistrationAttribute.cs new file mode 100644 index 00000000000..a5847ef6ab3 --- /dev/null +++ b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/SolutionPersistenceRegistrationAttribute.cs @@ -0,0 +1,79 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +using System; +using System.Globalization; + +namespace Microsoft.VisualStudio.Shell +{ + /// + /// This attribute adds a solution persistence property name and related Guid + /// type. + /// For Example: + /// [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0Exp\SolutionPersistence\MyProperty] + /// "Default"="{AAAA53CC-3D4F-40a2-BD4D-4F3419755476}" + /// + [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] + internal sealed class SolutionPersistenceRegistrationAttribute : RegistrationAttribute + { + /// + /// Property name + /// + private string _propName; + + /// + /// Creates a new SolutionPersistenceRegistrationAttribute attribute to register a solution persistence attribute + /// for the provided context. + /// + /// Name of the property + public SolutionPersistenceRegistrationAttribute(string propName) + { + _propName = propName; + } + + /// + /// Get the property name + /// + public string PropName + { + get { return _propName; } + } + + /// + /// Property that gets the SolutionPersistence base key name + /// + private string SolutionPersistenceRegKey + { + get { return "SolutionPersistence"; } + } + + /// + /// Called to register this attribute with the given context. The context + /// contains the location where the registration inforomation should be placed. + /// It also contains other information such as the type being registered and path information. + /// + public override void Register(RegistrationContext context) + { + context.Log.WriteLine(string.Format(CultureInfo.InvariantCulture, "ProvideSolutionProps: ({0} = {1})", context.ComponentType.GUID.ToString("B"), PropName)); + Key childKey = null; + + try + { + childKey = context.CreateKey(string.Format(CultureInfo.InvariantCulture, "{0}\\{1}", SolutionPersistenceRegKey, PropName)); + childKey.SetValue(string.Empty, context.ComponentType.GUID.ToString("B")); + } + finally + { + if (childKey != null) childKey.Close(); + } + } + + /// + /// Unregister this property. + /// + /// + public override void Unregister(RegistrationContext context) + { + context.RemoveKey(string.Format(CultureInfo.InvariantCulture, "{0}\\{1}", SolutionPersistenceRegKey, PropName)); + } + } +} diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideLanguagePropertyAttribute.cs b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideLanguagePropertyAttribute.cs new file mode 100644 index 00000000000..046d45609cd --- /dev/null +++ b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideLanguagePropertyAttribute.cs @@ -0,0 +1,114 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + + +using System; +using System.IO; +using System.ComponentModel; +using System.Globalization; +using Microsoft.Win32; + +namespace Microsoft.VisualStudio.Shell +{ + /// + /// This class can be used for registering a Web Application Property for a project + /// + [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] + internal sealed class WAProvideLanguagePropertyAttribute : RegistrationAttribute + { + private Type _languageTemplateFactoryType; + private string _propertyName; + private string _propertyValueString; + private int _propertyValueInt; + + + public WAProvideLanguagePropertyAttribute(Type languageTemplateFactoryType, string propertyName, string propertyValue) + { + _languageTemplateFactoryType = languageTemplateFactoryType; + _propertyName = propertyName; + _propertyValueString = propertyValue; + _propertyValueInt = 0; + } + + public WAProvideLanguagePropertyAttribute(Type languageTemplateFactoryType, string propertyName, int propertyValue) + { + _languageTemplateFactoryType = languageTemplateFactoryType; + _propertyName = propertyName; + _propertyValueString = null; + _propertyValueInt = propertyValue; + } + + public WAProvideLanguagePropertyAttribute(Type languageTemplateFactoryType, string propertyName, bool propertyValue) + { + _languageTemplateFactoryType = languageTemplateFactoryType; + _propertyName = propertyName; + _propertyValueString = null; + _propertyValueInt = propertyValue ? 1 : 0; + } + + public WAProvideLanguagePropertyAttribute(Type languageTemplateFactoryType, string propertyName, Type propertyValue) + { + _languageTemplateFactoryType = languageTemplateFactoryType; + _propertyName = propertyName; + _propertyValueString = propertyValue.GUID.ToString("B"); + _propertyValueInt = 0; + } + + public Type LanguageTemplateFactoryType + { + get + { + return _languageTemplateFactoryType; + } + } + + public string PropertyName + { + get + { + return _propertyName; + } + } + + public string PropertyValueString + { + get + { + return _propertyValueString; + } + } + + public int PropertyValueInt + { + get + { + return _propertyValueInt; + } + } + + private string LanguagePropertyKey + { + get { return string.Format(CultureInfo.InvariantCulture, "Projects\\{0}\\WebApplicationProperties", LanguageTemplateFactoryType.GUID.ToString("B")); } + } + + + public override void Register(RegistrationContext context) + { + using (Key propertyKey = context.CreateKey(LanguagePropertyKey)) + { + if (PropertyValueString != null) + { + propertyKey.SetValue(PropertyName, PropertyValueString); + } + else + { + propertyKey.SetValue(PropertyName, PropertyValueInt); + } + } + } + + public override void Unregister(RegistrationContext context) + { + context.RemoveKey(LanguagePropertyKey); + } + } +} diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideProjectFactoryAttribute.cs b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideProjectFactoryAttribute.cs new file mode 100644 index 00000000000..3979abce9b3 --- /dev/null +++ b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideProjectFactoryAttribute.cs @@ -0,0 +1,243 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. +extern alias ImmutableShell; + +using System; +using System.IO; +using System.ComponentModel; +using System.Globalization; +using Microsoft.Win32; + + + +namespace Microsoft.VisualStudio.Shell +{ + /// + /// This attribute can be used to register information about a project system that supports + /// the WAP flavor/sub-type. + /// + [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] + internal class WAProvideProjectFactoryAttribute : ImmutableShell::Microsoft.VisualStudio.Shell.RegistrationAttribute + { + private Type _factoryType; + private string _displayProjectFileExtensions = null; + private string _name; + private string _displayName = null; + private string _defaultProjectExtension = null; + private string _possibleProjectExtensions = null; + private string _projectTemplatesDirectory; + private int _sortPriority = 100; + private Guid _folderGuid = Guid.Empty; + private string _languageVsTemplate; + private string _templateGroupIDsVsTemplate; + private string _templateIDsVsTemplate; + private string _displayProjectTypeVsTemplate; + private string _projectSubTypeVsTemplate; + private bool _newProjectRequireNewFolderVsTemplate = false; + private bool _showOnlySpecifiedTemplatesVsTemplate = false; + + public WAProvideProjectFactoryAttribute(Type factoryType, string name) + { + if (factoryType == null) + { + throw new ArgumentNullException("factoryType"); + } + + _factoryType = factoryType; + _name = name; + } + + public WAProvideProjectFactoryAttribute(Type factoryType, + string name, + string languageVsTemplate, + bool showOnlySpecifiedTemplatesVsTemplate, + string templateGroupIDsVsTemplate, + string templateIDsVsTemplate) + { + if (factoryType == null) + { + throw new ArgumentNullException("factoryType"); + } + + _factoryType = factoryType; + _name = name; + _languageVsTemplate = languageVsTemplate; + _templateGroupIDsVsTemplate = templateGroupIDsVsTemplate; + _templateIDsVsTemplate = templateIDsVsTemplate; + _showOnlySpecifiedTemplatesVsTemplate = showOnlySpecifiedTemplatesVsTemplate; + } + + public string Name + { + get { return _name; } + } + + public string DisplayName + { + get { return _displayName; } + } + + public int SortPriority + { + get { return _sortPriority; } + set { _sortPriority = value; } + } + + public Type FactoryType + { + get + { + return _factoryType; + } + } + + public string DisplayProjectFileExtensions + { + get + { + return _displayProjectFileExtensions; + } + } + + public string DefaultProjectExtension + { + get + { + return _defaultProjectExtension; + } + } + + public string PossibleProjectExtensions + { + get + { + return _possibleProjectExtensions; + } + } + + public string ProjectTemplatesDirectory + { + get + { + return _projectTemplatesDirectory; + } + } + + public string FolderGuid + { + get { return _folderGuid.ToString("B"); } + set { _folderGuid = new Guid(value); } + } + + public string LanguageVsTemplate + { + get { return _languageVsTemplate; } + set { _languageVsTemplate = value; } + } + + public string DisplayProjectTypeVsTemplate + { + get { return _displayProjectTypeVsTemplate; } + set { _displayProjectTypeVsTemplate = value; } + } + + public string ProjectSubTypeVsTemplate + { + get { return _projectSubTypeVsTemplate; } + set { _projectSubTypeVsTemplate = value; } + } + + public bool NewProjectRequireNewFolderVsTemplate + { + get { return _newProjectRequireNewFolderVsTemplate; } + set { _newProjectRequireNewFolderVsTemplate = value; } + } + + public bool ShowOnlySpecifiedTemplatesVsTemplate + { + get { return _showOnlySpecifiedTemplatesVsTemplate; } + set { _showOnlySpecifiedTemplatesVsTemplate = value; } + } + + public string TemplateGroupIDsVsTemplate + { + get { return _templateGroupIDsVsTemplate; } + set { _templateGroupIDsVsTemplate = value; } + } + + public string TemplateIDsVsTemplate + { + get { return _templateIDsVsTemplate; } + set { _templateIDsVsTemplate = value; } + } + + private string ProjectRegKey + { + get { return string.Format(CultureInfo.InvariantCulture, "Projects\\{0}", FactoryType.GUID.ToString("B")); } + } + + private string NewPrjTemplateRegKey(RegistrationContext context) + { + return string.Format(CultureInfo.InvariantCulture, "NewProjectTemplates\\TemplateDirs\\{0}\\/1", context.ComponentType.GUID.ToString("B")); + } + + public override void Register(RegistrationContext context) + { + //context.Log.WriteLine(SR.GetString(SR.Reg_NotifyProjectFactory, FactoryType.Name)); + + using (Key projectKey = context.CreateKey(ProjectRegKey)) + { + projectKey.SetValue(string.Empty, Name); + if (_displayName != null) + projectKey.SetValue("DisplayName", _displayName); + if (_displayProjectFileExtensions != null) + projectKey.SetValue("DisplayProjectFileExtensions", _displayProjectFileExtensions); + projectKey.SetValue("Package", context.ComponentType.GUID.ToString("B")); + if (_defaultProjectExtension != null) + projectKey.SetValue("DefaultProjectExtension", _defaultProjectExtension); + if (_possibleProjectExtensions != null) + projectKey.SetValue("PossibleProjectExtensions", _possibleProjectExtensions); + if (_projectTemplatesDirectory != null) + { + if (!System.IO.Path.IsPathRooted(_projectTemplatesDirectory)) + { + // If path is not rooted, make it relative to package path + _projectTemplatesDirectory = System.IO.Path.Combine(context.ComponentPath, _projectTemplatesDirectory); + } + projectKey.SetValue("ProjectTemplatesDir", context.EscapePath(_projectTemplatesDirectory)); + } + + // VsTemplate Specific Keys + // + if (_languageVsTemplate != null) + projectKey.SetValue("Language(VsTemplate)", _languageVsTemplate); + + if (_showOnlySpecifiedTemplatesVsTemplate || _templateGroupIDsVsTemplate != null || _templateIDsVsTemplate != null) + { + int showOnlySpecifiedTemplatesVsTemplate = _showOnlySpecifiedTemplatesVsTemplate ? 1 : 0; + projectKey.SetValue("ShowOnlySpecifiedTemplates(VsTemplate)", showOnlySpecifiedTemplatesVsTemplate); + } + + if (_templateGroupIDsVsTemplate != null) + projectKey.SetValue("TemplateGroupIDs(VsTemplate)", _templateGroupIDsVsTemplate); + + if (_templateIDsVsTemplate != null) + projectKey.SetValue("TemplateIDs(VsTemplate)", _templateIDsVsTemplate); + + if (_displayProjectTypeVsTemplate != null) + projectKey.SetValue("DisplayProjectType(VsTemplate)", _displayProjectTypeVsTemplate); + + if (_projectSubTypeVsTemplate != null) + projectKey.SetValue("ProjectSubType(VsTemplate)", _projectSubTypeVsTemplate); + + if (_newProjectRequireNewFolderVsTemplate) + projectKey.SetValue("NewProjectRequireNewFolder(VsTemplate)", (int)1); + } + } + + public override void Unregister(RegistrationContext context) + { + context.RemoveKey(ProjectRegKey); + context.RemoveKey(NewPrjTemplateRegKey(context)); + } + } +} diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideProjectFactoryTemplateMappingAttribute.cs b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideProjectFactoryTemplateMappingAttribute.cs new file mode 100644 index 00000000000..e6f9f64707a --- /dev/null +++ b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideProjectFactoryTemplateMappingAttribute.cs @@ -0,0 +1,64 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + + +using Microsoft.VisualStudio.Shell; +using System; +using System.ComponentModel; +using System.Globalization; + +namespace Microsoft.VisualStudio.Shell +{ + /// + /// This attribute is used to declare a new project system that supports Web Application Projects + /// and define a mapping between the real project system and the 'fake' one that is defined only + /// to store some WAP specific properties in the registry. + /// + [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] + internal sealed class WAProvideProjectFactoryTemplateMappingAttribute : RegistrationAttribute + { + private const string WAPFactoryGuid = "{349c5851-65df-11da-9384-00065b846f21}"; + private string _flavoredFactoryGuid; + private Type _languageTemplateFactoryType; + + public WAProvideProjectFactoryTemplateMappingAttribute(string flavoredFactoryGuid, Type languageTemplateFactoryType) + { + _flavoredFactoryGuid = flavoredFactoryGuid; + _languageTemplateFactoryType = languageTemplateFactoryType; + } + + public string FlavoredFactoryGuid + { + get + { + return _flavoredFactoryGuid; + } + } + + public Type LanguageTemplateFactoryType + { + get + { + return _languageTemplateFactoryType; + } + } + + private string LanguageTemplatesKey + { + get { return string.Format(CultureInfo.InvariantCulture, "Projects\\{0}\\LanguageTemplates", WAPFactoryGuid); } + } + + + public override void Register(RegistrationContext context) + { + using (Key languageTemplatesKey = context.CreateKey(LanguageTemplatesKey)) + { + languageTemplatesKey.SetValue(FlavoredFactoryGuid, LanguageTemplateFactoryType.GUID.ToString("B")); + } + } + + public override void Unregister(RegistrationContext context) + { + context.RemoveKey(LanguageTemplatesKey); + } + } +} diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/MenusAndCommands.vsct b/vsintegration/src/FSharp.ProjectSystem.FSharp/MenusAndCommands.vsct index b1e215a3db9..4a95e4cfcfc 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/MenusAndCommands.vsct +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/MenusAndCommands.vsct @@ -47,9 +47,6 @@ - - - @@ -129,14 +126,6 @@ DynamicVisibility | DefaultInvisible - - - - - - @@ -390,7 +375,6 @@ - diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/Overview.xml b/vsintegration/src/FSharp.ProjectSystem.FSharp/Overview.xml new file mode 100644 index 00000000000..c2837d0a6d5 --- /dev/null +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/Overview.xml @@ -0,0 +1,257 @@ + + + + + ../../../Common + + true + false + true + true + true + true + true + true + true + true + true + + + + C# Example.FSharpProject + FSharp Project + Integrating a project type for FSharp. + + + + This sample is a component of FSharp integration inside Visual Studio and it demostrates how to create a project type and a winforms designer. + The sample is based on the Project Framework and references the source code installed with the VSSDK. + Support is also included for the WPF designer. + The main goals of this sample are: + + Creating a Visual Studio project type for building Windows Forms applications using Iron FSharp + Creating a Visual Studio project type for building Web Application Projects using Iron FSharp + Creating a Visual Studio project type for building Web Site Projects using Iron FSharp + Creating a Visual Studio project type for building WPF Applications using Iron FSharp + Project.jpg + + + + + Example + 3 + Project.jpg + Iron FSharp + C# + VisualStudioIntegration\Samples\FSharpIntegration\ + Project\FSharpProject.sln + VisualStudioIntegration\Samples\FSharpIntegration\Project\TDD\ + FSharpProject.UnitTest.sln + + + Iron FSharp + Project + + + + + Open the FSharpProject.sln solution. + + + Press F5 to build the sample, register it in the experimental hive, and launch Visual Studio from the experimental hive. + + + + + + To see the sample's functionality... + + + On the File menu, click New Project to display the New Project dialog box. + + + Create a new FSharpProject Console Application. + The new solution appears in Solution Explorer, the file Program.py appears in the code editor, and the project + properties appear in the Properties Browser. + + + Right-click the project node and click Properties. + + + The Property Pages dialog box appears and displays the common and configuration properties. + + + Close the dialog box. Press F5 to build and run the FSharp program Program.py. + A console window opens, displays "Hello VSIP!", and closes. + + + + + + Visual Studio SDK Website + http://msdn.microsoft.com/vstudio/extend + + + + + Create an instance and make sure the instance implements IVsPackage. + + + Make sure that the project can add a reference. + + + + + Make sure that the project can add new FSharp items. + + + Make sure that the project can add a reference. + + + + + Automation.cs + + Contains a number of classes that enables automation of the FSharp project and py files in the Iron FSharp Project. Especially the project object enables the CodeModel + + + + ConfigurationPropertyPages.cs + + Contains a definition for the build property page in the Project Designer. + + + + EditorFactory.cs + + Contains a definition for the editor factory that creates the editor for editting iron python code files in code/design view + + + + Enums.cs + + Contains enumerations defined for the Iron FSharp Project. + + + + Guids.cs + + Defines the Package and Project guids. + + + + PkgCmd.vsct + + Defines the layout for Iron FSharp specific commands. + + + + ProjectDocumentsListenerForMainFileUpdates.cs + Implements a project listener that updates the mainfile project property in the iron python project whenever files are renamed/added/deleted + + + PropertyPages.cs + Contains the implementation for the General Tab in the Projct Designer + + + FSharpConfigProvider.cs + Enables the Any CPU Platform name for Iron FSharp Projects + + + FSharpFileNode.cs + Contains Iron FSharp specific implementation details of FileNode + + + FSharpFileNodeProperties.cs + Contains a definition of the Iron FSharp specific Node properties. The class derives from SingleFileNodeProperties which means that a Custom Tool can be associated with a py file. + + + FSharpMenus.cs + + Defines CommandIDs matching the commands defined symbols in PkgCmd.vsct. + + + + FSharpProjectFactory.cs + + Defines the Iron FSharp project factory. + + + + FSharpProjectFileConstants.cs + + Defines constants used by the Iron FSharp project file. + + + + FSharpProjectNode.cs + + Contains the implementation for the project node in the Iron FSharp Project. + + + + FSharpProjectNodeProperties.cs + Defines Iron FSharp specific Node Properties for the ProjectNode object + + + FSharpPrjectPackage.cs + + Defines the package object for Iron FSharp project package. + + + + FSharpProjectReferenceNode.cs + + Defines Iron FSharp Project specific requirements for project to project references. + + + + FSharpReferenceContainerNode.cs + + Defines the reference container node for Iron FSharp projects. + + + + SelectionElementValueChangedListener.cs + Defines a Selection changed listener that enables the RunGenerator on a python file node to be triggered when focus is removed from an active iron python document window + + + VSMDFSharpProvider.cs + Contains the definition of the FSharp CodeDOM Provider. The provider listen for reference event in order to stay in sync with list of references in the FSharp project + + + WPFProviders\FSharpEventBindingProvider.cs + Contains the FSharpEventBindingProvider which provides the communication between the WPF designer and the associated code file for adding and navigating to event handlers. + + + WPFProviders\FSharpRuntimeNameProvider.cs + Contains the FSharpRuntimeNameFactory which contains logic to generate uniquely named code fields for WPF designer scenarios. + + + WPFProviders\FSharpWPFFlavor.cs + + Contains the definition of the Iron FSharp project flavor of the WPFFlavor. + + + + WPFProviders\FSharpWPFProjectFactory.cs + + Defines the factory object for the Iron FSharp project flavor of the WPFFlavor. + + + + + + 2005-11-21 + Created this sample for the Visual Studio SDK. + + + 2007-07-19 + Added support for WPF Applications. + + + 2007-10-10 + Fixed bugs related to references. + + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs b/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs index 38ad605c2bc..3ec5d637660 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs @@ -88,21 +88,21 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem // This interface is thread-safe, assuming "inner" is thread-safe interface Microsoft.VisualStudio.FSharp.Editor.IProjectSite with - member _.Description = inner.Description - member _.CompilationSourceFiles = inner.CompilationSourceFiles - member _.CompilationOptions = inner.CompilationOptions - member _.CompilationReferences = inner.CompilationReferences - member _.CompilationBinOutputPath = inner.CompilationBinOutputPath - member _.ProjectFileName = inner.ProjectFileName - member _.AdviseProjectSiteChanges(callbackOwnerKey,callback) = inner.AdviseProjectSiteChanges(callbackOwnerKey, callback) - member _.AdviseProjectSiteCleaned(callbackOwnerKey,callback) = inner.AdviseProjectSiteCleaned(callbackOwnerKey, callback) - member _.AdviseProjectSiteClosed(callbackOwnerKey,callback) = inner.AdviseProjectSiteClosed(callbackOwnerKey, callback) - member _.BuildErrorReporter with get() = inner.BuildErrorReporter and set v = inner.BuildErrorReporter <- v - member _.TargetFrameworkMoniker = inner.TargetFrameworkMoniker - member _.ProjectGuid = inner.ProjectGuid - member _.IsIncompleteTypeCheckEnvironment = false - member _.LoadTime = inner.LoadTime - member _.ProjectProvider = inner.ProjectProvider + member __.Description = inner.Description + member __.CompilationSourceFiles = inner.CompilationSourceFiles + member __.CompilationOptions = inner.CompilationOptions + member __.CompilationReferences = inner.CompilationReferences + member __.CompilationBinOutputPath = inner.CompilationBinOutputPath + member __.ProjectFileName = inner.ProjectFileName + member __.AdviseProjectSiteChanges(callbackOwnerKey,callback) = inner.AdviseProjectSiteChanges(callbackOwnerKey, callback) + member __.AdviseProjectSiteCleaned(callbackOwnerKey,callback) = inner.AdviseProjectSiteCleaned(callbackOwnerKey, callback) + member __.AdviseProjectSiteClosed(callbackOwnerKey,callback) = inner.AdviseProjectSiteClosed(callbackOwnerKey, callback) + member __.BuildErrorReporter with get() = inner.BuildErrorReporter and set v = inner.BuildErrorReporter <- v + member __.TargetFrameworkMoniker = inner.TargetFrameworkMoniker + member __.ProjectGuid = inner.ProjectGuid + member __.IsIncompleteTypeCheckEnvironment = false + member __.LoadTime = inner.LoadTime + member __.ProjectProvider = inner.ProjectProvider override x.ToString() = inner.ProjectFileName type internal ProjectSiteOptionLifetimeState = @@ -792,7 +792,7 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem /// Full path to template file /// Full path to destination file override x.AddFileFromTemplate(source:string, target:string ) = - if not (File.Exists(source)) then + if not (FSharp.Compiler.AbstractIL.Internal.Library.Shim.FileSystem.SafeExists(source)) then raise <| new FileNotFoundException(String.Format(FSharpSR.TemplateNotFound(), source)) // We assume that there is no token inside the file because the only @@ -1265,9 +1265,9 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem else 0 - member _.CompilationSourceFiles = match sourcesAndFlags with None -> [| |] | Some (sources,_) -> sources - member _.CompilationOptions = match sourcesAndFlags with None -> [| |] | Some (_,flags) -> flags - member _.CompilationReferences = match normalizedRefs with None -> [| |] | Some refs -> refs + member __.CompilationSourceFiles = match sourcesAndFlags with None -> [| |] | Some (sources,_) -> sources + member __.CompilationOptions = match sourcesAndFlags with None -> [| |] | Some (_,flags) -> flags + member __.CompilationReferences = match normalizedRefs with None -> [| |] | Some refs -> refs override x.ComputeSourcesAndFlags() = @@ -1386,32 +1386,32 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem let creationTime = System.DateTime.UtcNow { new Microsoft.VisualStudio.FSharp.Editor.IProjectSite with - member _.CompilationSourceFiles = x.CompilationSourceFiles - member _.CompilationOptions = x.CompilationOptions - member _.CompilationReferences = x.CompilationReferences - member _.CompilationBinOutputPath = + member __.CompilationSourceFiles = x.CompilationSourceFiles + member __.CompilationOptions = x.CompilationOptions + member __.CompilationReferences = x.CompilationReferences + member __.CompilationBinOutputPath = let outputPath = x.GetCurrentOutputAssembly() if String.IsNullOrWhiteSpace(outputPath) then None else Some(outputPath) - member _.Description = + member __.Description = match sourcesAndFlags with | Some (sources,flags) -> sprintf "Project System: flags(%A) sources:\n%A" flags sources | None -> sprintf "Project System, no flags available" - member _.ProjectFileName = MSBuildProject.GetFullPath(x.BuildProject) + member __.ProjectFileName = MSBuildProject.GetFullPath(x.BuildProject) - member _.BuildErrorReporter + member __.BuildErrorReporter with get() = buildErrorReporter and set v = buildErrorReporter <- v - member _.AdviseProjectSiteChanges(callbackOwnerKey,callback) = sourcesAndFlagsNotifier.Advise(callbackOwnerKey,callback) - member _.AdviseProjectSiteCleaned(callbackOwnerKey,callback) = cleanNotifier.Advise(callbackOwnerKey,callback) - member _.AdviseProjectSiteClosed(callbackOwnerKey,callback) = closeNotifier.Advise(callbackOwnerKey,callback) - member _.IsIncompleteTypeCheckEnvironment = false - member _.TargetFrameworkMoniker = x.GetTargetFrameworkMoniker() - member _.ProjectGuid = x.GetProjectGuid() - member _.LoadTime = creationTime - member _.ProjectProvider = Some (x :> Microsoft.VisualStudio.FSharp.Editor.IProvideProjectSite) + member __.AdviseProjectSiteChanges(callbackOwnerKey,callback) = sourcesAndFlagsNotifier.Advise(callbackOwnerKey,callback) + member __.AdviseProjectSiteCleaned(callbackOwnerKey,callback) = cleanNotifier.Advise(callbackOwnerKey,callback) + member __.AdviseProjectSiteClosed(callbackOwnerKey,callback) = closeNotifier.Advise(callbackOwnerKey,callback) + member __.IsIncompleteTypeCheckEnvironment = false + member __.TargetFrameworkMoniker = x.GetTargetFrameworkMoniker() + member __.ProjectGuid = x.GetProjectGuid() + member __.LoadTime = creationTime + member __.ProjectProvider = Some (x :> Microsoft.VisualStudio.FSharp.Editor.IProvideProjectSite) } // Snapshot-capture relevent values from "this", and returns an IProjectSite @@ -1430,23 +1430,23 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem // This object is thread-safe { new Microsoft.VisualStudio.FSharp.Editor.IProjectSite with - member _.Description = description - member _.CompilationSourceFiles = sourceFiles - member _.CompilationOptions = options - member _.CompilationReferences = refs - member _.CompilationBinOutputPath = if String.IsNullOrWhiteSpace(outputPath) then None else Some(outputPath) - member _.ProjectFileName = projFileName - member _.BuildErrorReporter + member __.Description = description + member __.CompilationSourceFiles = sourceFiles + member __.CompilationOptions = options + member __.CompilationReferences = refs + member __.CompilationBinOutputPath = if String.IsNullOrWhiteSpace(outputPath) then None else Some(outputPath) + member __.ProjectFileName = projFileName + member __.BuildErrorReporter with get() = staticBuildErrorReporter and set v = staticBuildErrorReporter <- v - member _.AdviseProjectSiteChanges(_,_) = () - member _.AdviseProjectSiteCleaned(_,_) = () - member _.AdviseProjectSiteClosed(_,_) = () - member _.IsIncompleteTypeCheckEnvironment = false - member _.TargetFrameworkMoniker = targetFrameworkMoniker - member _.ProjectGuid = x.GetProjectGuid() - member _.LoadTime = creationTime - member _.ProjectProvider = Some (x :> Microsoft.VisualStudio.FSharp.Editor.IProvideProjectSite) + member __.AdviseProjectSiteChanges(_,_) = () + member __.AdviseProjectSiteCleaned(_,_) = () + member __.AdviseProjectSiteClosed(_,_) = () + member __.IsIncompleteTypeCheckEnvironment = false + member __.TargetFrameworkMoniker = targetFrameworkMoniker + member __.ProjectGuid = x.GetProjectGuid() + member __.LoadTime = creationTime + member __.ProjectProvider = Some (x :> Microsoft.VisualStudio.FSharp.Editor.IProvideProjectSite) } // let the language service ask us questions diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj b/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj similarity index 91% rename from vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj rename to vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj index 0ab10a03ae5..8408b7a2989 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj @@ -7,6 +7,8 @@ FSharp.ProjectSystem.FSharp $(NoWarn);52;62;75 true + true + $(SystemValueTupleVersion) $(OtherFlags) --warnon:1182 --subsystemversion:6.00 false @@ -77,9 +79,9 @@ $PackageFolder$\FSharp.ProjectSystem.FSharp.dll - FSharp.Compiler.Service - $(FSharpCompilerServiceVersion) - $PackageFolder$\FSharp.Compiler.Service.dll + FSharp.Compiler.Private + $(FSProductVersion) + $PackageFolder$\FSharp.Compiler.Private.dll FSharp.Compiler.Server.Shared @@ -102,10 +104,10 @@ - + - - + + @@ -124,8 +126,6 @@ - - diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/WaitDialog.fs b/vsintegration/src/FSharp.ProjectSystem.FSharp/WaitDialog.fs index bd6451ef6d5..08b9de7f1d3 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/WaitDialog.fs +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/WaitDialog.fs @@ -38,7 +38,7 @@ module internal WaitDialog = |> Marshal.ThrowExceptionForHR { new IDisposable with - override _.Dispose () = + override __.Dispose () = let cancelled = ref 0 waitDialog.Value.EndWaitDialog cancelled |> Marshal.ThrowExceptionForHR } \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.cs.xlf index 80284f91346..02128b8f00d 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.cs.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.cs.xlf @@ -247,16 +247,6 @@ Nová &složka - - Quit F# Interactive Process - Ukončit proces F# Interactive - - - - FSharp.Interactive.QuitProcess - FSharp.Interactive.QuitProcess - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.de.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.de.xlf index 2024bc7ac4c..74b69acd487 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.de.xlf @@ -247,16 +247,6 @@ &Neuer Ordner - - Quit F# Interactive Process - F# Interactive-Prozess beenden - - - - FSharp.Interactive.QuitProcess - FSharp.Interactive.QuitProcess - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.es.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.es.xlf index c58ac1a46fb..5f286a95698 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.es.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.es.xlf @@ -247,16 +247,6 @@ N&ueva carpeta - - Quit F# Interactive Process - Salir del proceso de F# interactivo - - - - FSharp.Interactive.QuitProcess - FSharp.Interactive.QuitProcess - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.fr.xlf index 4647c7fdbda..2e8a0c00453 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.fr.xlf @@ -247,16 +247,6 @@ Nouveau &dossier - - Quit F# Interactive Process - Quitter le processus F# Interactive - - - - FSharp.Interactive.QuitProcess - FSharp.Interactive.QuitProcess - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.it.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.it.xlf index 231db14c05f..5b59a67af85 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.it.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.it.xlf @@ -247,16 +247,6 @@ &Nuova cartella - - Quit F# Interactive Process - Chiudi il processo di F# Interactive - - - - FSharp.Interactive.QuitProcess - FSharp.Interactive.QuitProcess - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ja.xlf index 27e442fa473..4266774b23c 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ja.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ja.xlf @@ -247,16 +247,6 @@ 新しいフォルダー(&D) - - Quit F# Interactive Process - F# インタラクティブ プロセスの終了 - - - - FSharp.Interactive.QuitProcess - FSharp.Interactive.QuitProcess - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ko.xlf index bd79a9f866b..1d311984cab 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ko.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ko.xlf @@ -247,16 +247,6 @@ 새 폴더(&D) - - Quit F# Interactive Process - F# 대화형 프로세스 종료 - - - - FSharp.Interactive.QuitProcess - FSharp.Interactive.QuitProcess - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pl.xlf index 265075d7f28..0b59a2dd7d2 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pl.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pl.xlf @@ -247,16 +247,6 @@ Nowy fol&der - - Quit F# Interactive Process - Zakończ proces narzędzia F# Interactive - - - - FSharp.Interactive.QuitProcess - FSharp.Interactive.QuitProcess - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pt-BR.xlf index e7c689e5c64..e2a2158cf9e 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pt-BR.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pt-BR.xlf @@ -247,16 +247,6 @@ Nova pa&sta - - Quit F# Interactive Process - Encerrar processo de F# Interativo - - - - FSharp.Interactive.QuitProcess - FSharp.Interactive.QuitProcess - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ru.xlf index c130a83a65e..77e44dc54ee 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ru.xlf @@ -247,16 +247,6 @@ &Создать папку - - Quit F# Interactive Process - Выйти из процесса F# Interactive - - - - FSharp.Interactive.QuitProcess - FSharp.Interactive.QuitProcess - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.tr.xlf index 988963a34e1..4ac66f5451d 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.tr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.tr.xlf @@ -247,16 +247,6 @@ Yeni &Klasör - - Quit F# Interactive Process - F# Etkileşimli İşleminden Çık - - - - FSharp.Interactive.QuitProcess - FSharp.Interactive.QuitProcess - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hans.xlf index 676a80ada28..853138f9a59 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hans.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hans.xlf @@ -247,16 +247,6 @@ 新建文件夹(&D) - - Quit F# Interactive Process - 退出 F# 交互进程 - - - - FSharp.Interactive.QuitProcess - FSharp.Interactive.QuitProcess - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hant.xlf index 16e68bcc367..918c8824296 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hant.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hant.xlf @@ -247,16 +247,6 @@ 新增資料夾(&D) - - Quit F# Interactive Process - 結束 F# 互動處理序 - - - - FSharp.Interactive.QuitProcess - FSharp.Interactive.QuitProcess - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj similarity index 99% rename from vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj rename to vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj index 81fedfa6003..855ef4c5c21 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj @@ -59,7 +59,7 @@ - + {B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7} ProjectSystem.Base diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf index 0f2031ab4b6..4184f3edc59 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf @@ -940,7 +940,7 @@ Fehler: The URL is invalid. Please enter a valid URL like "http://www.microsoft.com/" - Die URL ist ungültig. Geben Sie eine gültige URL (beispielsweise "http://www.microsoft.com/") ein. + Die URL ist ungültig. Geben Sie eine gültige URL (beispielsweise "http://www.microsoft.com/de/de/default.aspx") ein. diff --git a/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj b/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj index a3ce5bb52e2..7df8e60ebd3 100644 --- a/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj +++ b/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj @@ -6,6 +6,8 @@ Library $(NoWarn);47;75 true + true + $(SystemValueTupleVersion) $(OtherFlags) --subsystemversion:6.00 false @@ -43,8 +45,8 @@ - - + + @@ -69,10 +71,11 @@ + - + diff --git a/vsintegration/src/FSharp.VS.FSI/Properties.resx b/vsintegration/src/FSharp.VS.FSI/Properties.resx index ca594efbb3e..bf0ca9896ef 100644 --- a/vsintegration/src/FSharp.VS.FSI/Properties.resx +++ b/vsintegration/src/FSharp.VS.FSI/Properties.resx @@ -157,11 +157,5 @@ Enable preview language features - - Use .NET Core Scripting - - - Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window - \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/VFSIstrings.txt b/vsintegration/src/FSharp.VS.FSI/VFSIstrings.txt index 0e1e7979c8d..59f9615fffa 100644 --- a/vsintegration/src/FSharp.VS.FSI/VFSIstrings.txt +++ b/vsintegration/src/FSharp.VS.FSI/VFSIstrings.txt @@ -4,10 +4,9 @@ cannotCreateToolWindow,"Cannot create window F# Interactive ToolWindow" exceptionRaisedWhenCreatingRemotingClient,"Exception raised when creating remoting client for launched fsi.exe\n%s" exceptionRaisedWhenRequestingToolWindow,"Exception raised when requesting FSI ToolWindow.\n%s" couldNotObtainFSharpLS,"Could not load F# language service" -sessionTerminationDetected,"Session termination detected." +sessionTerminationDetected,"Session termination detected. Press Enter to restart." fsharpInteractive,"F# Interactive" couldNotFindFsiExe,"Could not find fsi.exe, the F# Interactive executable.\nThis file does not exist:\n\n%s\n" killingProcessRaisedException,"Killing process raised exception:\n%s" sessionIsNotDebugFriendly,"The current F# Interactive session is not configured for debugging. For the best experience, enable debugging in F# Interactive settings, then reset the session.\n\nAttempt debugging with current settings?" doNotShowWarningInFuture,"Don't show this warning again" -sessionInitialMessageNetCore,"Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings." diff --git a/vsintegration/src/FSharp.VS.FSI/fsiBasis.fs b/vsintegration/src/FSharp.VS.FSI/fsiBasis.fs index 8e4d3974761..c0ef2546c6a 100644 --- a/vsintegration/src/FSharp.VS.FSI/fsiBasis.fs +++ b/vsintegration/src/FSharp.VS.FSI/fsiBasis.fs @@ -1,12 +1,36 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. namespace Microsoft.VisualStudio.FSharp.Interactive +#if DESIGNER +#r "FSharp.Compiler.Server.Shared.dll" +#I @"C:\Program Files\Microsoft Visual Studio 2008 SDK\VisualStudioIntegration\Common\Assemblies" +#I @"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5" +#r "System.Core.dll" +#r "system.windows.forms.dll" +#r "Microsoft.VisualStudio.OLE.Interop.dll" +#r "Microsoft.VisualStudio.Package.LanguageService.9.0.dll" +#r "Microsoft.VisualStudio.Shell.9.0.dll" +#r "Microsoft.VisualStudio.Shell.Interop.dll" +#r "Microsoft.VisualStudio.Shell.Interop.8.0.dll" +#r "Microsoft.VisualStudio.Shell.Interop.9.0.dll" +#r "Microsoft.VisualStudio.TextManager.Interop.dll" +#r "Microsoft.VisualStudio.TextManager.Interop.8.0.dll" +#endif + open System +open System.IO +open System.Diagnostics +open System.Globalization open System.Text.RegularExpressions +open System.Windows.Forms open System.Runtime.InteropServices +open System.ComponentModel.Design open Microsoft.Win32 +open Microsoft.VisualStudio open Microsoft.VisualStudio.Shell.Interop open Microsoft.VisualStudio.OLE.Interop +open Microsoft.VisualStudio.Shell +open Microsoft.VisualStudio.TextManager.Interop module internal AssemblyAttributes = [] diff --git a/vsintegration/src/FSharp.VS.FSI/fsiLanguageService.fs b/vsintegration/src/FSharp.VS.FSI/fsiLanguageService.fs index 160b7a204fa..581eafdd28e 100644 --- a/vsintegration/src/FSharp.VS.FSI/fsiLanguageService.fs +++ b/vsintegration/src/FSharp.VS.FSI/fsiLanguageService.fs @@ -3,11 +3,18 @@ namespace Microsoft.VisualStudio.FSharp.Interactive open System +open System.IO +open System.Diagnostics +open System.Globalization +open System.Windows.Forms open System.Runtime.InteropServices +open System.ComponentModel.Design +open Microsoft.Win32 open Microsoft.VisualStudio open Microsoft.VisualStudio.FSharp.Interactive open Microsoft.VisualStudio.OLE.Interop open Microsoft.VisualStudio.Shell +open Microsoft.VisualStudio.Shell.Interop open Microsoft.VisualStudio.Package open Microsoft.VisualStudio.TextManager.Interop open System.ComponentModel.Composition @@ -56,11 +63,6 @@ type FsiPropertyPage() = [] member this.FsiPreview with get() = SessionsProperties.fsiPreview and set (x:bool) = SessionsProperties.fsiPreview <- x - [] - [] - [] - member this.FsiUseNetCore with get() = SessionsProperties.fsiUseNetCore and set (x:bool) = SessionsProperties.fsiUseNetCore <- x - // CompletionSet type internal FsiCompletionSet(imageList,source:Source) = inherit CompletionSet(imageList, source) diff --git a/vsintegration/src/FSharp.VS.FSI/fsiPackageHooks.fs b/vsintegration/src/FSharp.VS.FSI/fsiPackageHooks.fs index 446c425a9c4..bbe816faf91 100644 --- a/vsintegration/src/FSharp.VS.FSI/fsiPackageHooks.fs +++ b/vsintegration/src/FSharp.VS.FSI/fsiPackageHooks.fs @@ -3,12 +3,18 @@ namespace Microsoft.VisualStudio.FSharp.Interactive open System +open System.Diagnostics +open System.Globalization +open System.Runtime.InteropServices open System.ComponentModel.Design +open Microsoft.Win32 open Microsoft.VisualStudio open Microsoft.VisualStudio.Shell.Interop +open Microsoft.VisualStudio.OLE.Interop open Microsoft.VisualStudio.Shell open Microsoft.VisualStudio.TextManager.Interop open Util +open EnvDTE module internal Hooks = let fsiServiceCreatorCallback(package:Package) = diff --git a/vsintegration/src/FSharp.VS.FSI/fsiSessionToolWindow.fs b/vsintegration/src/FSharp.VS.FSI/fsiSessionToolWindow.fs index 61ff177fd3b..eae479ef9e2 100644 --- a/vsintegration/src/FSharp.VS.FSI/fsiSessionToolWindow.fs +++ b/vsintegration/src/FSharp.VS.FSI/fsiSessionToolWindow.fs @@ -4,8 +4,10 @@ namespace Microsoft.VisualStudio.FSharp.Interactive open System open System.Diagnostics +open System.Globalization open System.Runtime.InteropServices open System.ComponentModel.Design +open Microsoft.Win32 open Microsoft.VisualStudio open Microsoft.VisualStudio.Shell.Interop open Microsoft.VisualStudio.OLE.Interop @@ -17,6 +19,7 @@ open EnvDTE open Microsoft.VisualStudio.ComponentModelHost open Microsoft.VisualStudio.Editor open Microsoft.VisualStudio.Text.Editor +open Microsoft.VisualStudio.Text open Microsoft.VisualStudio.Utilities type VSStd2KCmdID = VSConstants.VSStd2KCmdID // nested type @@ -36,12 +39,12 @@ module internal Locals = let defaultVSRegistryRoot = @"Software\Microsoft\VisualStudio\15.0" let settingsRegistrySubKey = @"General" let debugPromptRegistryValue = "FSharpHideScriptDebugWarning" - // Prompts come through as "SERVER-PROMPT>\n" (when in "server mode"). - // In fsi.exe, the newline is needed to get the output send through to VS. - // Here the reverse mapping is applied. - let prompt = "SERVER-PROMPT>" let fixServerPrompt (str:string) = + // Prompts come through as "SERVER-PROMPT>\n" (when in "server mode"). + // In fsi.exe, the newline is needed to get the output send through to VS. + // Here the reverse mapping is applied. + let prompt = "SERVER-PROMPT>" in (* Replace 'prompt' by ">" throughout string, add newline, unless ending in prompt *) let str = if str.EndsWith(prompt) then str + " " else str + Environment.NewLine let str = str.Replace(prompt,">") @@ -194,18 +197,14 @@ type internal FsiToolWindow() as this = let history = HistoryBuffer() let sessions = Session.FsiSessions() do fsiLangService.Sessions <- sessions - - let writeText scroll (str:string) = + let writeTextAndScroll (str:string) = if str <> null && textLines <> null then lock textLines (fun () -> textStream.DirectWrite(fixServerPrompt str) - if scroll then - setScrollToEndOfBuffer() - ) - - let writeTextAndScroll (str:string) = writeText true str - - let writeTextNoScroll (str:string) = writeText false str + setScrollToEndOfBuffer() // I'm not convinced that users want jump to end on output. + ) // IP sample did it. Previously, VFSI did not. + // What if there is scrolling output on a timer and a user wants to look over it?? + // Maybe, if already at the end, then stay at the end? // Merge stdout/stderr events prior to buffering. Paired with StdOut/StdErr keys so we can split them afterwards. let responseE = Observable.merge (Observable.map (pair StdOut) sessions.Output) (Observable.map (pair StdErr) sessions.Error) @@ -223,27 +222,19 @@ type internal FsiToolWindow() as this = | StdErr,strs -> writeTextAndScroll (String.concat Environment.NewLine strs) // later: hence keep them split. do responseBufferE.Add(fun keyStrings -> let keyChunks : (Response * string list) list = chunkKeyValues keyStrings List.iter writeKeyChunk keyChunks) - let showInitialMessageNetCore scroll = - if Session.SessionsProperties.fsiUseNetCore then - writeText scroll ((VFSIstrings.SR.sessionInitialMessageNetCore()+Environment.NewLine+prompt)) // Write message on a session termination. Should be called on Gui thread. let recordTermination () = if not sessions.Alive then // check is likely redundant synchronizationContext.Post( System.Threading.SendOrPostCallback( - fun _ -> - writeTextAndScroll ((VFSIstrings.SR.sessionTerminationDetected())+Environment.NewLine) - showInitialMessageNetCore true + fun _ -> writeTextAndScroll ((VFSIstrings.SR.sessionTerminationDetected())+Environment.NewLine) ), null) do sessions.Exited.Add(fun _ -> recordTermination()) - - // For .NET Core the session doesn't start automatically. Rather it may optionally be started by an Alt-Enter from a script, - // or else by pressing Enter in the REPL window. - do showInitialMessageNetCore false - if not Session.SessionsProperties.fsiUseNetCore then - sessions.Restart(null) + + // finally, start the session + do sessions.Restart() let clearUndoStack (textLines:IVsTextLines) = // Clear the UNDO stack. let undoManager = textLines.GetUndoManager() |> throwOnFailure1 @@ -300,15 +291,19 @@ type internal FsiToolWindow() as this = strHandle.Free() ) - let executeTextNoHistory sourceFile (text:string) = - sessions.Ensure(sourceFile) + let executeTextNoHistory (text:string) = textStream.DirectWriteLine() sessions.SendInput(text) setCursorAtEndOfBuffer() + let executeText (text:string) = + textStream.DirectWriteLine() + history.Add(text) + sessions.SendInput(text) + setCursorAtEndOfBuffer() + let executeUserInput() = if isCurrentPositionInInputArea() then - sessions.Ensure(null) let text = getInputAreaText() textStream.ExtendReadOnlyMarker() textStream.DirectWriteLine() @@ -322,8 +317,7 @@ type internal FsiToolWindow() as this = let supportWhenInInputArea (sender:obj) (args:EventArgs) = let command = sender :?> MenuCommand if null <> command then // are these null checks needed? - let enabled = not source.IsCompletorActive && isCurrentPositionInInputArea() - command.Supported <- enabled + command.Supported <- not source.IsCompletorActive && isCurrentPositionInInputArea() /// Support command except when completion is active. let supportUnlessCompleting (sender:obj) (args:EventArgs) = @@ -339,13 +333,13 @@ type internal FsiToolWindow() as this = let supportWhenAtStartOfInputArea (sender:obj) (e:EventArgs) = let command = sender :?> MenuCommand if command <> null then - command.Supported <- not source.IsCompletorActive && isCurrentPositionAtStartOfInputArea() + command.Supported <- isCurrentPositionAtStartOfInputArea() /// Support when at the start of the input area AND no-selection (e.g. to enable NoAction on BACKSPACE). let supportWhenAtStartOfInputAreaAndNoSelection (sender:obj) (e:EventArgs) = let command = sender :?> MenuCommand if command <> null then - command.Supported <- isCurrentPositionAtStartOfInputArea() + command.Supported <- isCurrentPositionAtStartOfInputArea() && not (haveTextViewSelection()) let supportWhenSelectionIntersectsWithReadonlyOrNoSelection (sender:obj) (_:EventArgs) = let command = sender :?> MenuCommand @@ -420,15 +414,13 @@ type internal FsiToolWindow() as this = textLines.ReplaceLines(0, 0, lastLine, lastColumn, IntPtr.Zero, 0, null) |> throwOnFailure0 ) clearUndoStack textLines // The reset clear should not be undoable. - showInitialMessageNetCore true - if not Session.SessionsProperties.fsiUseNetCore then - sessions.Restart(null) + sessions.Restart() /// Handle RETURN, unless Intelisense completion is in progress. let onReturn (sender:obj) (e:EventArgs) = lock textLines (fun () -> if not sessions.Alive then - sessions.Restart(null) + sessions.Restart() else if isCurrentPositionInInputArea() then executeUserInput() @@ -528,10 +520,10 @@ type internal FsiToolWindow() as this = showNoActivate() let directiveC = sprintf "# 1 \"stdin\"" (* stdin line number reset code *) let text = "\n" + text + "\n" + directiveC + "\n;;\n" - executeTextNoHistory null text + executeTextNoHistory text with _ -> () - let executeInteraction dbgBreak dir (filename: string) topLine text = + let executeInteraction dbgBreak dir filename topLine text = // Preserving previous functionality, including the #directives... let interaction = "\n" @@ -542,7 +534,7 @@ type internal FsiToolWindow() as this = + "# 1 \"stdin\"" + "\n" (* stdin line number reset code *) + ";;" + "\n" - executeTextNoHistory filename interaction + executeTextNoHistory interaction let sendSelectionToFSI action = let dbgBreak,selectLine = @@ -675,7 +667,7 @@ type internal FsiToolWindow() as this = else new OleMenuCommandService(this, originalFilter) - let addCommand guid cmdId handler guard = + let addCommand guid cmdId handler guard= let id = new CommandID(guid,cmdId) let cmd = new OleMenuCommand(new EventHandler(handler),id) match guard with @@ -721,7 +713,7 @@ type internal FsiToolWindow() as this = context.AddAttribute(VSUSERCONTEXTATTRIBUTEUSAGE.VSUC_Usage_LookupF1, "Keyword", "VS.FSharpInteractive") |> ignore | _ -> Debug.Assert(false) - member _.QueryCommandStatus(guidCmdGroup:Guid, nCmdId:uint32) = + member __.QueryCommandStatus(guidCmdGroup:Guid, nCmdId:uint32) = match () with | _ when guidCmdGroup = Guids.guidFsiConsoleCmdSet && nCmdId = uint32 Guids.cmdIDAttachDebugger -> if debuggerIsRunning () then Some(OLECMDF.OLECMDF_INVISIBLE) diff --git a/vsintegration/src/FSharp.VS.FSI/fsiTextBufferStream.fs b/vsintegration/src/FSharp.VS.FSI/fsiTextBufferStream.fs index a5e3128e872..6bcac8c608e 100644 --- a/vsintegration/src/FSharp.VS.FSI/fsiTextBufferStream.fs +++ b/vsintegration/src/FSharp.VS.FSI/fsiTextBufferStream.fs @@ -3,8 +3,22 @@ namespace Microsoft.VisualStudio.FSharp.Interactive open System +open System.IO +open System.Diagnostics +open System.Globalization +open System.Windows.Forms +open System.Runtime.InteropServices +open System.ComponentModel.Design +open Microsoft.Win32 +open Microsoft.VisualStudio +open Microsoft.VisualStudio.Shell.Interop +open Microsoft.VisualStudio.OLE.Interop +open Microsoft.VisualStudio.Shell open Microsoft.VisualStudio.TextManager.Interop +open Util +open Microsoft.VisualStudio.Editor open Microsoft.VisualStudio.Text +open Microsoft.VisualStudio.Text.Editor open Microsoft.VisualStudio.Utilities // This type wraps the IVsTextLines which contains the FSI session (output and input). diff --git a/vsintegration/src/FSharp.VS.FSI/sessions.fs b/vsintegration/src/FSharp.VS.FSI/sessions.fs index b7fea42c484..c91b9ef66a2 100644 --- a/vsintegration/src/FSharp.VS.FSI/sessions.fs +++ b/vsintegration/src/FSharp.VS.FSI/sessions.fs @@ -2,12 +2,15 @@ module internal Microsoft.VisualStudio.FSharp.Interactive.Session +open FSharp.Compiler open System open System.IO open System.Text open System.Diagnostics open System.Runtime.Remoting open System.Runtime.Remoting.Lifetime +open System.Windows.Forms +open Internal.Utilities #nowarn "52" // The value has been copied to ensure the original is not mutated by this operation @@ -64,7 +67,6 @@ let timeoutApp descr timeoutMS (f : 'a -> 'b) (arg:'a) = module SessionsProperties = let mutable useAnyCpuVersion = true // 64-bit by default - let mutable fsiUseNetCore = false let mutable fsiArgs = "--optimize" let mutable fsiShadowCopy = true let mutable fsiDebugMode = false @@ -128,48 +130,37 @@ let catchAll trigger x = try trigger x with err -> System.Windows.Forms.MessageBox.Show(err.ToString()) |> ignore +let fsiExeName () = + if SessionsProperties.useAnyCpuVersion then "fsiAnyCpu.exe" else "fsi.exe" + +// Use the VS-extension-installed development path if available, relative to the location of this assembly +let determineFsiRelativePath1 () = + let thisAssemblyDirectory = typeof.Assembly.Location |> Path.GetDirectoryName + Path.Combine(thisAssemblyDirectory,fsiExeName() ) + +// This path is relative to the location of "FSharp.Compiler.Interactive.Settings.dll" +let determineFsiRelativePath2 () = + let thisAssembly : System.Reflection.Assembly = typeof.Assembly + let thisAssemblyDirectory = thisAssembly.Location |> Path.GetDirectoryName + // Use the quick-development path if available + Path.Combine(thisAssemblyDirectory,fsiExeName() ) + let determineFsiPath () = - if SessionsProperties.fsiUseNetCore then - let pf = Environment.GetEnvironmentVariable("ProgramW6432") - let pf = if String.IsNullOrEmpty(pf) then Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) else pf - let exe = Path.Combine(pf,"dotnet","dotnet.exe") - let arg = "fsi" - if not (File.Exists exe) then - raise (SessionError (VFSIstrings.SR.couldNotFindFsiExe exe)) - exe, arg, false, false - else - let fsiExeName () = - if SessionsProperties.useAnyCpuVersion then "fsiAnyCpu.exe" else "fsi.exe" - - // Use the VS-extension-installed development path if available, relative to the location of this assembly - let determineFsiRelativePath1 () = - let thisAssemblyDirectory = typeof.Assembly.Location |> Path.GetDirectoryName - Path.Combine(thisAssemblyDirectory,fsiExeName() ) - - // This path is relative to the location of "FSharp.Compiler.Interactive.Settings.dll" - let determineFsiRelativePath2 () = - let thisAssembly : System.Reflection.Assembly = typeof.Assembly - let thisAssemblyDirectory = thisAssembly.Location |> Path.GetDirectoryName - // Use the quick-development path if available - Path.Combine(thisAssemblyDirectory, "Tools", fsiExeName() ) - - let fsiExe = - // Choose VS extension path, if it exists (for developers) - let fsiRelativePath1 = determineFsiRelativePath1() - if File.Exists fsiRelativePath1 then fsiRelativePath1 else - - // Choose relative path, if it exists (for developers), otherwise, the installed path. - let fsiRelativePath2 = determineFsiRelativePath2() - if File.Exists fsiRelativePath2 then fsiRelativePath2 else - - // Try the registry key - let fsbin = match Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(None) with Some(s) -> s | None -> "" - let fsiRegistryPath = Path.Combine(fsbin, "Tools", fsiExeName() ) - if File.Exists(fsiRegistryPath) then fsiRegistryPath else - - // Otherwise give up - raise (SessionError (VFSIstrings.SR.couldNotFindFsiExe fsiRegistryPath)) - fsiExe, "", true, true + // Choose VS extension path, if it exists (for developers) + let fsiRelativePath1 = determineFsiRelativePath1() + if File.Exists fsiRelativePath1 then fsiRelativePath1 else + + // Choose relative path, if it exists (for developers), otherwise, the installed path. + let fsiRelativePath2 = determineFsiRelativePath2() + if File.Exists fsiRelativePath2 then fsiRelativePath2 else + + // Try the registry key + let fsbin = match Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(None) with Some(s) -> s | None -> "" + let fsiRegistryPath = Path.Combine(fsbin, fsiExeName() ) + if File.Exists(fsiRegistryPath) then fsiRegistryPath else + + // Otherwise give up + raise (SessionError (VFSIstrings.SR.couldNotFindFsiExe fsiRegistryPath)) let readLinesAsync (reader: StreamReader) trigger = let buffer = StringBuilder(1024) @@ -215,9 +206,9 @@ let readLinesAsync (reader: StreamReader) trigger = } Async.StartImmediate (read 0) -let fsiStartInfo channelName sourceFile = +let fsiStartInfo channelName = let procInfo = new ProcessStartInfo() - let fsiPath, fsiFirstArgs, fsiSupportsServer, fsiSupportsShadowcopy = determineFsiPath () + let fsiPath = determineFsiPath () procInfo.FileName <- fsiPath // Mismatched encoding on I/O streams between VS addin and it's FSI session. @@ -226,23 +217,29 @@ let fsiStartInfo channelName sourceFile = // We also need to send fsi.exe the locale of the VS process let inCP,outCP = Encoding.UTF8.CodePage,Encoding.UTF8.CodePage - let addBoolOption b name value args = if b then sprintf "%s --%s%s" args name (if value then "+" else "-") else args - let addStringOption b name value args = if b then sprintf "%s --%s:%O" args name value else args + let addBoolOption name value args = sprintf "%s --%s%s" args name (if value then "+" else "-") + let addStringOption name value args = sprintf "%s --%s:%O" args name value let procArgs = - fsiFirstArgs - |> addStringOption true "fsi-server-output-codepage" outCP - |> addStringOption true "fsi-server-input-codepage" inCP - |> addStringOption true "fsi-server-lcid" System.Threading.Thread.CurrentThread.CurrentUICulture.LCID - //|> addStringOption true "fsi-server-association-file" sourceFile - |> addStringOption true "fsi-server" channelName + "" + |> addStringOption "fsi-server-output-codepage" outCP + |> addStringOption "fsi-server-input-codepage" inCP + |> addStringOption "fsi-server-lcid" System.Threading.Thread.CurrentThread.CurrentUICulture.LCID + |> addStringOption "fsi-server" channelName |> (fun s -> s + sprintf " %s" SessionsProperties.fsiArgs) - |> addBoolOption fsiSupportsShadowcopy "shadowcopyreferences" SessionsProperties.fsiShadowCopy - // For best debug experience, need optimizations OFF and debug info ON - // tack these on the the end, they will override whatever comes earlier - |> addBoolOption SessionsProperties.fsiDebugMode "optimize" false - |> addBoolOption SessionsProperties.fsiDebugMode "debug" true - |> addStringOption SessionsProperties.fsiPreview "langversion" "preview" + |> addBoolOption "shadowcopyreferences" SessionsProperties.fsiShadowCopy + |> (fun args -> + // for best debug experience, need optimizations OFF and debug info ON + // tack these on the the end, they will override whatever comes earlier + if SessionsProperties.fsiDebugMode then + args |> addBoolOption "optimize" false |> addBoolOption "debug" true + else + args) + |> (fun args -> + if SessionsProperties.fsiPreview then + args |> addStringOption "langversion" "preview" + else + args) procInfo.Arguments <- procArgs procInfo.CreateNoWindow <- true @@ -252,20 +249,16 @@ let fsiStartInfo channelName sourceFile = procInfo.RedirectStandardOutput <- true procInfo.StandardOutputEncoding <- Encoding.UTF8 procInfo.StandardErrorEncoding <- Encoding.UTF8 - - let initialPath = - match sourceFile with - | path when path <> null && Directory.Exists(Path.GetDirectoryName(path)) -> Path.GetDirectoryName(path) - | _ -> Path.GetTempPath() - if Directory.Exists(initialPath) then - procInfo.WorkingDirectory <- initialPath - procInfo, fsiSupportsServer + let tmpPath = Path.GetTempPath() + if Directory.Exists(tmpPath) then + procInfo.WorkingDirectory <- tmpPath + procInfo let nonNull = function null -> false | (s:string) -> true /// Represents an active F# Interactive process to which Visual Studio is connected via stdin/stdout/stderr and a remoting channel -type FsiSession(sourceFile: string) = +type FsiSession() = let randomSalt = System.Random() let channelName = let pid = System.Diagnostics.Process.GetCurrentProcess().Id @@ -273,7 +266,7 @@ type FsiSession(sourceFile: string) = let salt = randomSalt.Next() sprintf "FSIChannel_%d_%d_%d" pid tick salt - let procInfo, fsiSupportsServer = fsiStartInfo channelName sourceFile + let procInfo = fsiStartInfo channelName let cmdProcess = new Process(StartInfo=procInfo) let fsiOutput = Event<_>() let fsiError = Event<_>() @@ -300,12 +293,9 @@ type FsiSession(sourceFile: string) = do cmdProcess.EnableRaisingEvents <- true - let clientConnection = - if fsiSupportsServer then - try Some (FSharp.Compiler.Server.Shared.FSharpInteractiveServer.StartClient(channelName)) - with e -> raise (SessionError (VFSIstrings.SR.exceptionRaisedWhenCreatingRemotingClient(e.ToString()))) - else - None + let client = + try FSharp.Compiler.Server.Shared.FSharpInteractiveServer.StartClient(channelName) + with e -> raise (SessionError (VFSIstrings.SR.exceptionRaisedWhenCreatingRemotingClient(e.ToString()))) /// interrupt timeout in miliseconds let interruptTimeoutMS = 1000 @@ -326,13 +316,10 @@ type FsiSession(sourceFile: string) = // Create session object member x.Interrupt() = - match clientConnection with - | None -> false - | Some client -> - checkLeaseStatus client - match timeoutApp "VFSI interrupt" interruptTimeoutMS (fun () -> client.Interrupt()) () with - | Some () -> true - | None -> false + checkLeaseStatus client + match timeoutApp "VFSI interrupt" interruptTimeoutMS (fun () -> client.Interrupt()) () with + | Some () -> true + | None -> false member x.SendInput (str: string) = inputQueue.Post(str) @@ -344,8 +331,6 @@ type FsiSession(sourceFile: string) = member x.Alive = not cmdProcess.HasExited - member x.SupportsInterrupt = not cmdProcess.HasExited && clientConnection.IsSome // clientConnection not on .NET Core - member x.ProcessID = cmdProcess.Id member x.ProcessArgs = procInfo.Arguments @@ -382,10 +367,10 @@ type FsiSessions() = // clearing sessionR before kill() means session.Exited is ignored below session.Kill()) - let restart(sourceFile) = + let restart() = kill() try - let session = FsiSession(sourceFile) + let session = FsiSession() sessionR <- Some session // All response callbacks are guarded by checks that "session" is still THE ACTIVE session. session.Output.Add(fun s -> if isCurrentSession session then fsiOut.Trigger s) @@ -394,9 +379,6 @@ type FsiSessions() = with SessionError text -> fsiError.Trigger text - let ensure(sourceFile) = - if sessionR.IsNone then restart(sourceFile) - member x.Interrupt() = sessionR |> Option.forall (fun session -> session.Interrupt()) @@ -410,9 +392,6 @@ type FsiSessions() = member x.Alive = sessionR |> Option.exists (fun session -> session.Alive) - member x.SupportsInterrupt = - sessionR |> Option.exists (fun session -> session.SupportsInterrupt) - member x.ProcessID = match sessionR with | None -> -1 (* -1 assumed to never be a valid process ID *) @@ -424,9 +403,5 @@ type FsiSessions() = | Some session -> session.ProcessArgs member x.Kill() = kill() - - member x.Ensure(sourceFile) = ensure(sourceFile) - - member x.Restart(sourceFile) = restart(sourceFile) - + member x.Restart() = restart() member x.Exited = fsiExited.Publish diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.cs.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.cs.xlf index ef9d28d48ae..e639f36873f 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.cs.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.cs.xlf @@ -12,11 +12,6 @@ V případě nastavení na true a za předpokladu, že aktuální počítač je 64bitový, se F# Interactive spustí jako 64bitový proces. (V opačném případě je F# Interactive 32bitový proces.) - - Misc - Různé - - F# Interactive options Možnost F# Interactive @@ -27,6 +22,11 @@ Další argumenty příkazového řádku předané F# Interactive a spustitelné v sadě Visual Studio. (Pokud se povolí ladění skriptů, ignorují se příznaky optimalizace a ladění.) + + Misc + Různé + + FSI Preview FSI Preview @@ -67,16 +67,6 @@ Ladění - - Use .NET Core Scripting - Použít skriptování .NET Core - - - - Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window - Povolit úpravy a provádění skriptů .NET Core pro všechny skripty F # a okno F# Interactive - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.de.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.de.xlf index 0f547bc7453..76d0e5a44be 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.de.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.de.xlf @@ -12,11 +12,6 @@ Wenn diese Einstellung auf "True" gesetzt ist und der aktuelle Computer eine 64-Bit-Version ist, müssen Sie F# Interactive als einen 64-Bit-Prozess ausführen (Andernfalls ist F# Interactive ein 32-Bit-Prozess). - - Misc - Verschiedene - - F# Interactive options F# Interactive-Optionen @@ -27,6 +22,11 @@ Die an die ausführbare F# Interactive-Datei von Visual Studio übergebenen zusätzlichen Befehlszeilenargumente. (Optimierungs- und Debugflags werden bei aktiviertem Skriptdebuggen ignoriert.) + + Misc + Verschiedene + + FSI Preview FSI-Vorschau @@ -67,16 +67,6 @@ Debuggen - - Use .NET Core Scripting - .NET Core-Skripts verwenden - - - - Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window - .NET Core-Skriptbearbeitung und -ausführung für alle F#-Skripts und das F# Interactive-Fenster aktivieren - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.es.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.es.xlf index 84099f2ddc8..8ac14c069ad 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.es.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.es.xlf @@ -12,11 +12,6 @@ Si se establece en True y la máquina actual es de 64 bits, F# interactivo se ejecuta como proceso de 64 bits; de lo contrario, se ejecuta como proceso de 32 bits. - - Misc - Varios - - F# Interactive options Opciones de F# interactivo @@ -27,6 +22,11 @@ Argumentos de la línea de comandos adicional pasados al archivo ejecutable de F# interactivo por Visual Studio. (se prescinde de las marcas de optimización y depuración si la depuración de scripts está habilitada) + + Misc + Varios + + FSI Preview Versión preliminar de FSI @@ -67,16 +67,6 @@ Depuración - - Use .NET Core Scripting - Usar scripting de .NET Core - - - - Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window - Habilita la ejecución y la edición de scripts de .NET Core para todos los scripts de F # y la ventana de F# interactivo. - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.fr.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.fr.xlf index 922cb52f629..30b049287c4 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.fr.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.fr.xlf @@ -12,11 +12,6 @@ Si la valeur est true et que l'ordinateur actuel est de type 64 bits, exécutez F# Interactive en tant que processus 64 bits. (Sinon, F# Interactive est un processus 32 bits.) - - Misc - Divers - - F# Interactive options Options de F# Interactive @@ -27,6 +22,11 @@ Arguments supplémentaires de la ligne de commande passés à l'exécutable F# Interactive par Visual Studio. (les indicateurs d'optimisation et de débogage sont ignorés si le débogage de script est activé) + + Misc + Divers + + FSI Preview Préversion FSI @@ -67,16 +67,6 @@ Débogage - - Use .NET Core Scripting - Utiliser les scripts .NET Core - - - - Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window - Activer l'édition et l'exécution de scripts .NET Core pour tous les scripts F# et la fenêtre F# Interactive - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.it.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.it.xlf index 0870d4eecbb..dda750479da 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.it.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.it.xlf @@ -12,11 +12,6 @@ Se impostato su true, e il computer corrente è a 64 bit, eseguire F# Interactive come processo a 64 bit. In caso contrario, F# Interactive è un processo a 32 bit. - - Misc - Varie - - F# Interactive options Opzioni di F# Interactive @@ -27,6 +22,11 @@ Argomenti aggiuntivi della riga di comando passati all'eseguibile F# Interactive da Visual Studio. Se è abilitato il debug di script, i flag di ottimizzazione e debug vengono ignorati. + + Misc + Varie + + FSI Preview Anteprima FSI @@ -67,16 +67,6 @@ Debug - - Use .NET Core Scripting - Usa script di .NET Core - - - - Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window - Abilita la modifica e l'esecuzione di script .NET Core per tutti gli script F# e la finestra F# Interactive - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ja.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ja.xlf index 0ff78720e9f..292872a5ee0 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ja.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ja.xlf @@ -12,11 +12,6 @@ true に設定されていて、現在のコンピューターが 64 ビットである場合は、F# インタラクティブを 64 ビット プロセスで実行してください (そうしないと、F# インタラクティブは 32 ビット プロセスになります)。 - - Misc - その他 - - F# Interactive options F# インタラクティブ オプション @@ -27,6 +22,11 @@ 追加のコマンド ライン引数が Visual Studio によって F# インタラクティブ実行可能ファイルに渡されました。(スクリプト デバッグが有効な場合、最適化とデバッグのフラグは無視されます) + + Misc + その他 + + FSI Preview FSI プレビュー @@ -67,16 +67,6 @@ デバッグ中 - - Use .NET Core Scripting - .Net Core スクリプトの使用 - - - - Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window - すべての F# スクリプトと F# インタラクティブ ウィンドウで、.NET Core スクリプトの編集と実行を有効にします - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ko.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ko.xlf index aa8ebcfefb7..beb4244148f 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ko.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ko.xlf @@ -12,11 +12,6 @@ true로 설정하는 경우 현재 컴퓨터가 64비트이면 F# 대화형을 64비트 프로세스로 실행하고, 그렇지 않으면 F# 대화형이 32비트 프로세스로 실행됩니다. - - Misc - 기타 - - F# Interactive options F# 대화형 옵션 @@ -27,6 +22,11 @@ Visual Studio에서 F# 대화형 실행 파일로 전달되는 추가 명령줄 인수입니다. 스크립트 디버깅을 사용하도록 설정한 경우 최적화 및 디버그 플래그는 무시됩니다. + + Misc + 기타 + + FSI Preview FSI 미리 보기 @@ -67,16 +67,6 @@ 디버깅 - - Use .NET Core Scripting - .NET Core 스크립팅 사용 - - - - Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window - 모든 F# 스크립트 및 F# 대화형 창에 대해 .NET Core 스크립트 편집 및 실행을 사용하도록 설정합니다. - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pl.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pl.xlf index 8730043dc07..7d4a0e10460 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pl.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pl.xlf @@ -12,11 +12,6 @@ Jeśli ustawiono wartość true i obecnie jest używany komputer 64-bitowy, należy uruchomić narzędzie F# Interactive jako proces 64-bitowy. W przeciwnym razie narzędzie F# Interactive zostanie uruchomione jako proces 32-bitowy. - - Misc - Różne - - F# Interactive options Opcje narzędzia F# Interactive @@ -27,6 +22,11 @@ Argumenty wiersza polecenia przekazywane do pliku wykonywalnego narzędzia F# Interactive przez program Visual Studio. (Flagi optymalizacji i debugowania są ignorowane, jeśli włączone jest debugowanie skryptów). + + Misc + Różne + + FSI Preview FSI (wersja zapoznawcza) @@ -67,16 +67,6 @@ Debugowanie - - Use .NET Core Scripting - Użyj wykonywania skryptów .NET Core - - - - Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window - Włącz edycję i wykonywanie skryptów .NET Core dla wszystkich skryptów języka F# i okna narzędzia F# Interactive - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pt-BR.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pt-BR.xlf index 406a9f20545..cc7367e86e9 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pt-BR.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pt-BR.xlf @@ -12,11 +12,6 @@ Se estiver definido como true, e o computador atual for 64 bits, execute o F# Interativo como um processo de 64 bits. (Caso contrário, o F# Interactive será um processo de 32 bits.) - - Misc - Diversos - - F# Interactive options Opções do F# Interativo @@ -27,6 +22,11 @@ Argumentos da linha de comando adicionais passados para o executável do F# Interativo pelo Visual Studio (sinalizadores de depuração e otimização são ignorados se a depuração do script estiver habilitada) + + Misc + Diversos + + FSI Preview Versão prévia do FSI @@ -67,16 +67,6 @@ Depurando - - Use .NET Core Scripting - Usar o script do .NET Core - - - - Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window - Habilitar a edição e a execução de scripts do .NET Core para todos os scripts F# e a janela do F# Interativo - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ru.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ru.xlf index 4d25a0ea143..10a8b7753dd 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ru.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ru.xlf @@ -12,11 +12,6 @@ Если задано значение true и текущий компьютер является 64-разрядным, F# Interactive запускается как 64-разрядный процесс. (В остальных случая F# Interactive является 32-разрядным процессом.) - - Misc - Прочее - - F# Interactive options Параметры F# Interactive @@ -27,6 +22,11 @@ Дополнительные аргументы командной строки, передаваемые исполняемому файлу F# Interactive из Visual Studio. Оптимизация и флаги отладки игнорируются, если включена отладка скриптов. + + Misc + Прочее + + FSI Preview Предварительная версия FSI @@ -67,16 +67,6 @@ Отладка - - Use .NET Core Scripting - Использовать сценарии .NET Core - - - - Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window - Включить редактирование и выполнение скриптов в .NET Core для всех скриптов F# и окна F# Interactive - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.tr.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.tr.xlf index 232fdbe676d..85078fa5e22 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.tr.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.tr.xlf @@ -12,11 +12,6 @@ True olarak ayarlanırsa ve geçerli makine 64 bit ise F# Etkileşimli'yi 64 bit işlem olarak çalıştırın. (Aksi takdirde F# Etkileşimli 32 bit işlemdir.) - - Misc - Çeşitli - - F# Interactive options F# Etkileşimli seçenekleri @@ -27,6 +22,11 @@ Visual Studio tarafından çalıştırılabilen F# Etkileşimli'ye geçirilmiş ek komut satırı bağımsız değişkenleri. (Betik hata ayıklaması etkinleştirilmişse en iyi duruma getirme ve hata ayıklama bayrakları yok sayılır.) + + Misc + Çeşitli + + FSI Preview FSI Önizleme @@ -67,16 +67,6 @@ Hata Ayıklama - - Use .NET Core Scripting - .NET Core Betiği Kullan - - - - Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window - Tüm F# betikleri ile F# Etkileşimli penceresi için .NET Core betik düzenlemeyi ve yürütmeyi etkinleştirin - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hans.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hans.xlf index 50328a7aabd..f1759dcf7c3 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hans.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hans.xlf @@ -12,11 +12,6 @@ 如果设为 true,且当前计算机是 64 位的,则将 F# 交互窗口作为 64 位进程运行。(否则,F# 交互为 32 位进程。) - - Misc - 杂项 - - F# Interactive options F# 交互窗口选项 @@ -27,6 +22,11 @@ 其他命令行参数传递到 Visual Studio 执行的 F# 交互窗口可执行文件。(若已启动脚本调试,则忽略优化和调试标志) + + Misc + 杂项 + + FSI Preview FSI 预览 @@ -67,16 +67,6 @@ 正在调试 - - Use .NET Core Scripting - 使用 .NET Core 脚本 - - - - Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window - 对所有 F# 脚本和 F# 交互窗口启用 .NET Core 脚本编辑和执行 - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hant.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hant.xlf index 01303e69aa0..ed8368b0bcb 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hant.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hant.xlf @@ -12,11 +12,6 @@ 如果設為 true,並且目前電腦為 64 位元,則 F# 互動會當做 64 位元處理序來執行 (反之,F# 互動則為 32 位元處理序)。 - - Misc - 其他 - - F# Interactive options F# 互動選項 @@ -27,6 +22,11 @@ 由 Visual Studio 額外傳遞給 F# 互動可執行檔的命令列引數。(若啟用指令碼偵錯,則會忽略最佳化及偵錯旗標) + + Misc + 其他 + + FSI Preview FSI 預覽 @@ -67,16 +67,6 @@ 偵錯 - - Use .NET Core Scripting - 使用 .NET Core 指令碼 - - - - Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window - 為所有 F# 指令碼及 F# 互動視窗啟用 .NET Core 指令碼編輯與執行 - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.cs.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.cs.xlf index 1d790e879b1..b79b747fad9 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.cs.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.cs.xlf @@ -22,14 +22,9 @@ Nepovedlo se načíst službu jazyka F#. - - Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. - Vítá vás F# Interactive pro .NET Core v sadě Visual Studio. Kód spustíte těmito způsoby:\n 1. Ve skriptu F # použijte možnost Odeslat do interaktivního okna (Alt-Enter nebo kliknutí pravým tlačítkem).\n Proces F# Interactive použije případné nastavení global.js přidružené k tomuto skriptu.\n 2. Začněte tím, že stisknete Enter. Proces F# Interactive použije výchozí nastavení. - - - Session termination detected. - Zjistilo se ukončení relace. + Session termination detected. Press Enter to restart. + Zjistilo se ukončení relace. Pokračovat můžete stisknutím klávesy Enter. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.de.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.de.xlf index 7e2462013ed..e8dabd63d6b 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.de.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.de.xlf @@ -22,14 +22,9 @@ Der F#-Sprachendienst konnte nicht geladen werden. - - Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. - Willkommen bei F# Interactive für .NET Core in Visual Studio. Führen Sie einen der folgenden Schritte durch, um Code auszuführen:\n 1. Verwenden Sie in einem F#-Skript "An Interactive senden" (ALT-EINGABETASTE oder Klick mit der rechten Maustaste). Der F# Interactive-Prozess\n verwendet keine global.json-Einstellungen, die diesem Skript zugeordnet sind.\n 2. Drücken Sie zum Starten die EINGABETASTE. Der F# Interactive-Prozess verwendet Standardeinstellungen. - - - Session termination detected. - Es wurde eine Beendigung der Sitzung erkannt. + Session termination detected. Press Enter to restart. + Es wurde eine Beendigung der Sitzung erkannt. Drücken Sie die EINGABETASTE, um neu zu starten. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.es.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.es.xlf index 9a12087f57c..8fafdfe73df 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.es.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.es.xlf @@ -22,14 +22,9 @@ No se pudo cargar el servicio del lenguaje F#. - - Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. - Esto es F# interactivo para .NET Core en Visual Studio. Para ejecutar el código, puede realizar una de las acciones siguientes:\n 1. Use "Enviar a interactivo" (Alt-Entrar o hacer clic con el botón derecho) desde un script de F #. El proceso de F# interactivo\n usará cualquier configuración de global.json asociada a ese script.\n 2. Presione "Entrar" para empezar. El proceso de F# interactivo usará la configuración predeterminada. - - - Session termination detected. - Se detectó una terminación de sesión. + Session termination detected. Press Enter to restart. + Se detectó una terminación de sesión. Presione Entrar para reiniciar. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.fr.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.fr.xlf index 8ef997c62c7..14025011c11 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.fr.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.fr.xlf @@ -22,14 +22,9 @@ Impossible de charger le service de langage F# - - Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. - Bienvenue dans F# Interactive pour .NET Core dans Visual Studio. Pour exécuter du code, vous disposez de plusieurs possibilités\n 1. Utilisez 'Envoyer vers Interactive' (Alt-Entrée ou clic droit) à partir d'un script F#. Le processus F# Interactive va\n utiliser les paramètres global.json associés au script.\n 2. Appuyez sur 'Entrée' pour démarrer. Le processus F# Interactive va utiliser les paramètres par défaut. - - - Session termination detected. - Arrêt de session détectée. + Session termination detected. Press Enter to restart. + Fin de session détectée. Appuyez sur Entrée pour redémarrer. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.it.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.it.xlf index f9fdb9f3c6a..5f2b1b679c9 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.it.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.it.xlf @@ -22,14 +22,9 @@ Non è stato possibile caricare il servizio di linguaggio F# - - Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. - Benvenuti in F# Interactive per .NET Core in Visual Studio. Per eseguire il codice:\n 1. Usare 'Invia a Interactive' (ALT-INVIO o clic con il pulsante destro del mouse) da uno script F#. Il processo di F# Interactive\n userà le eventuali impostazioni di global.json associate allo script.\n 2. Premere 'INVIO' per iniziare. Il processo di F# Interactive userà le impostazioni predefinite. - - - Session termination detected. - È stata rilevata la terminazione della sessione. + Session termination detected. Press Enter to restart. + Rilevata terminazione di sessione. Premere INVIO per riavviare. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ja.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ja.xlf index 568834e7f23..34c5ae7317f 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ja.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ja.xlf @@ -22,14 +22,9 @@ F# 言語サービスを読み込めませんでした - - Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. - Visual Studio の .NET Core の F# インタラクティブへようこそ。コードを実行するには、\n 1. F# スクリプトから [Interactive に送信] (Alt+Enter または右クリック) を使用します。F# インタラクティブ プロセスでは、\n そのスクリプトに関連付けられている任意の global.json 設定が使用されます。\n 2. 開始するには、Enter キーを押します。F# インタラクティブ プロセスでは、既定の設定が使用されます。 - - - Session termination detected. - セッションの終了が検出されました。 + Session termination detected. Press Enter to restart. + セッションの終了が検出されました。再開する場合は Enter キーを押してください。 diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ko.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ko.xlf index ca0309e1962..a4aa68732a3 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ko.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ko.xlf @@ -22,14 +22,9 @@ F# 언어 서비스를 로드할 수 없습니다. - - Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. - Visual Studio의 .NET Core용 F# 대화형을 시작합니다. 코드를 실행하려면 다음 중 한 가지를 수행합니다.\n 1. F# 스크립트에서 '대화형으로 보내기'(Alt-Enter 또는 마우스 오른쪽 단추 클릭)를 사용합니다. F# 대화형 프로세스에서\n 해당 스크립트와 연결된 모든 global.json 설정을 사용합니다.\n 2. 'Enter' 키를 눌러 시작합니다. F# 대화형 프로세스에서 기본 설정을 사용합니다. - - - Session termination detected. - 세션 종료가 감지되었습니다. + Session termination detected. Press Enter to restart. + 세션 종료가 검색되었습니다. 다시 시작하려면 <Enter> 키를 누르세요. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pl.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pl.xlf index 00f73c99b22..34a64865416 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pl.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pl.xlf @@ -22,14 +22,9 @@ Nie można załadować usługi języka F# - - Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. - F# Interactive dla platformy .NET Core w programie Visual Studio — Zapraszamy! Aby wykonać kod, wykonaj jedną z następujących akcji:\n 1. Użyj polecenia „Wyślij do interaktywnego” (Alt+Enter lub kliknij prawym przyciskiem myszy) z poziomu skryptu języka F#. Proces narzędzia F# Interactive\n użyje dowolnych ustawień global.json skojarzonych z tym skryptem.\n 2. Naciśnij klawisz „Enter”, aby rozpocząć. Proces narzędzia F# Interactive użyje ustawień domyślnych. - - - Session termination detected. - Wykryto zakończenie sesji. + Session termination detected. Press Enter to restart. + Wykryto zakończenie sesji. Naciśnij klawisz Enter, aby uruchomić ją ponownie. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pt-BR.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pt-BR.xlf index 5fdb3152e34..a3d2f3edb35 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pt-BR.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pt-BR.xlf @@ -22,14 +22,9 @@ Não foi possível carregar o serviço de linguagem F# - - Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. - Bem-vindo(a) ao F# Interativo para .NET Core no Visual Studio. Para executar o código, ou\n 1. Use 'Enviar para Interativo' (Alt-Enter ou clique com o botão direito do mouse) de um script F#. O processo de F# Interativo\n usará quaisquer configurações global.json associadas a esse script.\n 2. Pressione 'Enter' para começar. O processo de F# Interativo usará as configurações padrão. - - - Session termination detected. - Encerramento da sessão detectado. + Session termination detected. Press Enter to restart. + Encerramento da sessão detectado. Pressione a tecla Enter para reiniciar. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ru.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ru.xlf index 2b699562cab..c0b711f3b86 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ru.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ru.xlf @@ -22,14 +22,9 @@ Не удалось загрузить службу языка F# - - Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. - Добро пожаловать в F# Interactive для .NET Core в Visual Studio. Для выполнения кода используйте любой из двух следующих вариантов: \n 1. Используйте команду "Отправить в Interactive" для сценария F# (чтобы получить доступ к этой команде, нажмите ALT+ВВОД или правую кнопку мыши). Процесс F# Interactive \n будет использовать все параметры global.json, связанные с этим сценарием.\n 2. Нажмите клавишу ВВОД для запуска сценария. Процесс F# Interactive будет использовать параметры по умолчанию. - - - Session termination detected. - Обнаружено прекращение сеанса. + Session termination detected. Press Enter to restart. + Обнаружено прекращение сеанса. Нажмите клавишу ВВОД для перезапуска. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.tr.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.tr.xlf index 972fae6d8e4..6d80fb6bee6 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.tr.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.tr.xlf @@ -22,14 +22,9 @@ F# dil hizmeti yüklenemedi - - Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. - Visual Studio'daki .NET Core için F# Etkileşimli'ye hoş geldiniz. Kodu yürütmek için şunlardan birini yapın:\n 1. Bir F# betiğinden 'Etkileşimliye Gönder' (Alt+Enter veya sağ tıklama) seçeneğini kullanın. F# Etkileşimli işlemi\n bu betikle ilişkili tüm global.json ayarlarını kullanır.\n 2. Başlatmak için 'Enter' tuşuna basın. F# Etkileşimli işlemi varsayılan ayarları kullanır. - - - Session termination detected. - Oturumun sonlandırıldığı algılandı. + Session termination detected. Press Enter to restart. + Oturum sonlandırma algılandı. Yeniden başlatmak için Enter'a basın. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hans.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hans.xlf index c8f65fa5dce..f4789a477c4 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hans.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hans.xlf @@ -22,14 +22,9 @@ 未能加载 F# 语言服务 - - Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. - 欢迎使用 Visual Studio 中 .NET Core 的 F# 交互窗口。若要执行代码,请\n 1. 从 F# 脚本中使用“发送到交互”(Alt-Enter 或右键单击)。F# 交互进程将\n 使用与该脚本关联的任何 global.json 设置。\n 2. 按 "Enter" 开始。F# 交互进程将使用默认设置。 - - - Session termination detected. - 检测到会话已终止。 + Session termination detected. Press Enter to restart. + 检测到会话已终止。请按 Enter 重新启动会话。 diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hant.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hant.xlf index 5eac45e87cb..ba06ff32813 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hant.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hant.xlf @@ -22,14 +22,9 @@ 無法載入 F# 語言服務 - - Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. - 歡迎使用 Visual Studio 中 .NET Core 的 F# 互動。若要執行程式碼,請選用其中一種方式:\n 1. 從 F# 指令碼使用 [傳送到互動] (按 Alt-Enter 鍵或滑鼠右鍵)。F# 互動處理序將會\n 使用任何與該指令碼相關的 global.json 設定。\n 2. 按下 'Enter' 鍵即可開始。F# 互動處理序將使用預設設定。 - - - Session termination detected. - 偵測到工作階段終止。 + Session termination detected. Press Enter to restart. + 偵測到工作階段終止。請按 Enter 重新啟動。 diff --git a/vsintegration/tests/GetTypesVS.UnitTests/GetTypesVS.UnitTests.fsproj b/vsintegration/tests/GetTypesVS.UnitTests/GetTypesVS.UnitTests.fsproj index 4fa4549e645..911e5e9a944 100644 --- a/vsintegration/tests/GetTypesVS.UnitTests/GetTypesVS.UnitTests.fsproj +++ b/vsintegration/tests/GetTypesVS.UnitTests/GetTypesVS.UnitTests.fsproj @@ -23,7 +23,6 @@ - diff --git a/vsintegration/tests/MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fsproj b/vsintegration/tests/MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fsproj index 84b50e8a6a7..5bdfd8af56f 100644 --- a/vsintegration/tests/MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fsproj +++ b/vsintegration/tests/MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fsproj @@ -5,7 +5,7 @@ net472 true - $(OtherFlags) --nowarn:3390 --nowarn:3218 + --nowarn:3390 --nowarn:3218 diff --git a/vsintegration/tests/MockTypeProviders/DummyProviderForLanguageServiceTesting/ProvidedTypes.fs b/vsintegration/tests/MockTypeProviders/DummyProviderForLanguageServiceTesting/ProvidedTypes.fs index 70203708ee9..f3ab2e871c3 100644 --- a/vsintegration/tests/MockTypeProviders/DummyProviderForLanguageServiceTesting/ProvidedTypes.fs +++ b/vsintegration/tests/MockTypeProviders/DummyProviderForLanguageServiceTesting/ProvidedTypes.fs @@ -33,10 +33,10 @@ namespace ProviderImplementation.ProvidedTypes [] type StructOption<'T> (hasValue: bool, value: 'T) = - member _.IsNone = not hasValue - member _.HasValue = hasValue - member _.Value = value - override _.ToString() = if hasValue then match box value with null -> "null" | x -> x.ToString() else "" + member __.IsNone = not hasValue + member __.HasValue = hasValue + member __.Value = value + override __.ToString() = if hasValue then match box value with null -> "null" | x -> x.ToString() else "" type uoption<'T> = StructOption<'T> @@ -503,7 +503,7 @@ namespace ProviderImplementation.ProvidedTypes do this.typeImpl <- this /// Substitute types for type variables. - override _.FullName = + override __.FullName = match kind,typeArgs with | ProvidedTypeSymbolKind.SDArray,[| arg |] -> arg.FullName + "[]" | ProvidedTypeSymbolKind.Array _,[| arg |] -> arg.FullName + "[*]" @@ -515,7 +515,7 @@ namespace ProviderImplementation.ProvidedTypes /// Although not strictly required by the type provider specification, this is required when doing basic operations like FullName on /// .NET symbolic types made from this type, e.g. when building Nullable.FullName - override _.DeclaringType = + override __.DeclaringType = match kind with | ProvidedTypeSymbolKind.SDArray -> null | ProvidedTypeSymbolKind.Array _ -> null @@ -524,7 +524,7 @@ namespace ProviderImplementation.ProvidedTypes | ProvidedTypeSymbolKind.Generic gty -> gty.DeclaringType | ProvidedTypeSymbolKind.FSharpTypeAbbreviation _ -> null - override _.Name = + override __.Name = match kind,typeArgs with | ProvidedTypeSymbolKind.SDArray,[| arg |] -> arg.Name + "[]" | ProvidedTypeSymbolKind.Array _,[| arg |] -> arg.Name + "[*]" @@ -534,7 +534,7 @@ namespace ProviderImplementation.ProvidedTypes | ProvidedTypeSymbolKind.FSharpTypeAbbreviation (_,_,path),_ -> path.[path.Length-1] | _ -> failwith "unreachable" - override _.BaseType = + override __.BaseType = match kind with | ProvidedTypeSymbolKind.SDArray -> typeof | ProvidedTypeSymbolKind.Array _ -> typeof @@ -545,18 +545,18 @@ namespace ProviderImplementation.ProvidedTypes instType (typeArgs, [| |]) gty.BaseType | ProvidedTypeSymbolKind.FSharpTypeAbbreviation _ -> typeof - override _.GetArrayRank() = (match kind with ProvidedTypeSymbolKind.Array n -> n | ProvidedTypeSymbolKind.SDArray -> 1 | _ -> failwithf "non-array type '%O'" this) - override _.IsValueTypeImpl() = (match kind with ProvidedTypeSymbolKind.Generic gtd -> gtd.IsValueType | _ -> false) - override _.IsArrayImpl() = (match kind with ProvidedTypeSymbolKind.Array _ | ProvidedTypeSymbolKind.SDArray -> true | _ -> false) - override _.IsByRefImpl() = (match kind with ProvidedTypeSymbolKind.ByRef _ -> true | _ -> false) - override _.IsPointerImpl() = (match kind with ProvidedTypeSymbolKind.Pointer _ -> true | _ -> false) - override _.IsPrimitiveImpl() = false - override _.IsGenericType = (match kind with ProvidedTypeSymbolKind.Generic _ -> true | _ -> false) + override __.GetArrayRank() = (match kind with ProvidedTypeSymbolKind.Array n -> n | ProvidedTypeSymbolKind.SDArray -> 1 | _ -> failwithf "non-array type '%O'" this) + override __.IsValueTypeImpl() = (match kind with ProvidedTypeSymbolKind.Generic gtd -> gtd.IsValueType | _ -> false) + override __.IsArrayImpl() = (match kind with ProvidedTypeSymbolKind.Array _ | ProvidedTypeSymbolKind.SDArray -> true | _ -> false) + override __.IsByRefImpl() = (match kind with ProvidedTypeSymbolKind.ByRef _ -> true | _ -> false) + override __.IsPointerImpl() = (match kind with ProvidedTypeSymbolKind.Pointer _ -> true | _ -> false) + override __.IsPrimitiveImpl() = false + override __.IsGenericType = (match kind with ProvidedTypeSymbolKind.Generic _ -> true | _ -> false) override this.GetGenericArguments() = (match kind with ProvidedTypeSymbolKind.Generic _ -> typeArgs | _ -> failwithf "non-generic type '%O'" this) override this.GetGenericTypeDefinition() = (match kind with ProvidedTypeSymbolKind.Generic e -> e | _ -> failwithf "non-generic type '%O'" this) - override _.IsCOMObjectImpl() = false - override _.HasElementTypeImpl() = (match kind with ProvidedTypeSymbolKind.Generic _ -> false | _ -> true) - override _.GetElementType() = (match kind,typeArgs with (ProvidedTypeSymbolKind.Array _ | ProvidedTypeSymbolKind.SDArray | ProvidedTypeSymbolKind.ByRef | ProvidedTypeSymbolKind.Pointer),[| e |] -> e | _ -> failwithf "not an array, pointer or byref type") + override __.IsCOMObjectImpl() = false + override __.HasElementTypeImpl() = (match kind with ProvidedTypeSymbolKind.Generic _ -> false | _ -> true) + override __.GetElementType() = (match kind,typeArgs with (ProvidedTypeSymbolKind.Array _ | ProvidedTypeSymbolKind.SDArray | ProvidedTypeSymbolKind.ByRef | ProvidedTypeSymbolKind.Pointer),[| e |] -> e | _ -> failwithf "not an array, pointer or byref type") override this.Assembly = match kind, typeArgs with @@ -580,7 +580,7 @@ namespace ProviderImplementation.ProvidedTypes override x.Module = x.Assembly.ManifestModule - override _.GetHashCode() = + override __.GetHashCode() = match kind,typeArgs with | ProvidedTypeSymbolKind.SDArray,[| arg |] -> 10 + hash arg | ProvidedTypeSymbolKind.Array _,[| arg |] -> 163 + hash arg @@ -598,16 +598,16 @@ namespace ProviderImplementation.ProvidedTypes override this.IsSubclassOf(otherTy: Type) = isSubclassOf this otherTy - member _.Kind = kind + member __.Kind = kind - member _.Args = typeArgs + member __.Args = typeArgs - member _.IsFSharpTypeAbbreviation = match kind with FSharpTypeAbbreviation _ -> true | _ -> false + member __.IsFSharpTypeAbbreviation = match kind with FSharpTypeAbbreviation _ -> true | _ -> false // For example, int - member _.IsFSharpUnitAnnotated = match kind with ProvidedTypeSymbolKind.Generic gtd -> not gtd.IsGenericTypeDefinition | _ -> false + member __.IsFSharpUnitAnnotated = match kind with ProvidedTypeSymbolKind.Generic gtd -> not gtd.IsGenericTypeDefinition | _ -> false - override _.GetConstructorImpl(_bindingFlags, _binder, _callConventions, _types, _modifiers) = null + override __.GetConstructorImpl(_bindingFlags, _binder, _callConventions, _types, _modifiers) = null override this.GetMethodImpl(name, bindingFlags, _binderBinder, _callConvention, _types, _modifiers) = match kind with @@ -654,7 +654,7 @@ namespace ProviderImplementation.ProvidedTypes | ProvidedTypeSymbolKind.ByRef -> upcast this | ProvidedTypeSymbolKind.Generic gty -> gty.UnderlyingSystemType - override _.GetCustomAttributesData() = ([| |] :> IList<_>) + override __.GetCustomAttributesData() = ([| |] :> IList<_>) override this.MemberType = notRequired this "MemberType" this.FullName @@ -666,17 +666,17 @@ namespace ProviderImplementation.ProvidedTypes override this.AssemblyQualifiedName = notRequired this "AssemblyQualifiedName" this.FullName - override _.GetCustomAttributes(_inherit) = emptyAttributes + override __.GetCustomAttributes(_inherit) = emptyAttributes - override _.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes + override __.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes - override _.IsDefined(_attributeType, _inherit) = false + override __.IsDefined(_attributeType, _inherit) = false override this.MakeArrayType() = ProvidedTypeSymbol(ProvidedTypeSymbolKind.SDArray, [this]) :> Type override this.MakeArrayType arg = ProvidedTypeSymbol(ProvidedTypeSymbolKind.Array arg, [this]) :> Type - override _.MetadataToken = + override __.MetadataToken = match kind with | ProvidedTypeSymbolKind.SDArray -> typeof.MetadataToken | ProvidedTypeSymbolKind.Array _ -> typeof.MetadataToken @@ -694,11 +694,11 @@ namespace ProviderImplementation.ProvidedTypes let convParam (p:ParameterInfo) = { new ParameterInfo() with - override _.Name = p.Name - override _.ParameterType = instType (parameters, [| |]) p.ParameterType - override _.Attributes = p.Attributes - override _.RawDefaultValue = p.RawDefaultValue - override _.GetCustomAttributesData() = p.GetCustomAttributesData() + override __.Name = p.Name + override __.ParameterType = instType (parameters, [| |]) p.ParameterType + override __.Attributes = p.Attributes + override __.RawDefaultValue = p.RawDefaultValue + override __.GetCustomAttributesData() = p.GetCustomAttributesData() } override this.IsGenericMethod = @@ -707,28 +707,28 @@ namespace ProviderImplementation.ProvidedTypes override this.GetGenericArguments() = Seq.skip (if this.DeclaringType.IsGenericType then this.DeclaringType.GetGenericArguments().Length else 0) parameters |> Seq.toArray - override _.GetGenericMethodDefinition() = genericMethodDefinition + override __.GetGenericMethodDefinition() = genericMethodDefinition - override _.DeclaringType = instType (parameters, [| |]) genericMethodDefinition.DeclaringType - override _.ToString() = "Method " + genericMethodDefinition.Name - override _.Name = genericMethodDefinition.Name - override _.MetadataToken = genericMethodDefinition.MetadataToken - override _.Attributes = genericMethodDefinition.Attributes - override _.CallingConvention = genericMethodDefinition.CallingConvention - override _.MemberType = genericMethodDefinition.MemberType + override __.DeclaringType = instType (parameters, [| |]) genericMethodDefinition.DeclaringType + override __.ToString() = "Method " + genericMethodDefinition.Name + override __.Name = genericMethodDefinition.Name + override __.MetadataToken = genericMethodDefinition.MetadataToken + override __.Attributes = genericMethodDefinition.Attributes + override __.CallingConvention = genericMethodDefinition.CallingConvention + override __.MemberType = genericMethodDefinition.MemberType override this.IsDefined(_attributeType, _inherit): bool = notRequired this "IsDefined" genericMethodDefinition.Name - override _.ReturnType = instType (parameters, [| |]) genericMethodDefinition.ReturnType - override _.GetParameters() = genericMethodDefinition.GetParameters() |> Array.map convParam - override _.ReturnParameter = genericMethodDefinition.ReturnParameter |> convParam + override __.ReturnType = instType (parameters, [| |]) genericMethodDefinition.ReturnType + override __.GetParameters() = genericMethodDefinition.GetParameters() |> Array.map convParam + override __.ReturnParameter = genericMethodDefinition.ReturnParameter |> convParam override this.ReturnTypeCustomAttributes = notRequired this "ReturnTypeCustomAttributes" genericMethodDefinition.Name override this.GetBaseDefinition() = notRequired this "GetBaseDefinition" genericMethodDefinition.Name override this.GetMethodImplementationFlags() = notRequired this "GetMethodImplementationFlags" genericMethodDefinition.Name override this.MethodHandle = notRequired this "MethodHandle" genericMethodDefinition.Name override this.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired this "Invoke" genericMethodDefinition.Name override this.ReflectedType = notRequired this "ReflectedType" genericMethodDefinition.Name - override _.GetCustomAttributes(_inherit) = emptyAttributes - override _.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes + override __.GetCustomAttributes(_inherit) = emptyAttributes + override __.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes //-------------------------------------------------------------------------------- // ProvidedMethod, ProvidedConstructor, ProvidedTypeDefinition and other provided objects @@ -740,53 +740,53 @@ namespace ProviderImplementation.ProvidedTypes let mkParamArrayCustomAttributeData() = { new CustomAttributeData() with - member _.Constructor = typeof.GetConstructors().[0] - member _.ConstructorArguments = upcast [| |] - member _.NamedArguments = upcast [| |] } + member __.Constructor = typeof.GetConstructors().[0] + member __.ConstructorArguments = upcast [| |] + member __.NamedArguments = upcast [| |] } let mkEditorHideMethodsCustomAttributeData() = { new CustomAttributeData() with - member _.Constructor = typeof.GetConstructors().[0] - member _.ConstructorArguments = upcast [| |] - member _.NamedArguments = upcast [| |] } + member __.Constructor = typeof.GetConstructors().[0] + member __.ConstructorArguments = upcast [| |] + member __.NamedArguments = upcast [| |] } let mkAllowNullLiteralCustomAttributeData value = { new CustomAttributeData() with - member _.Constructor = typeof.GetConstructors().[0] - member _.ConstructorArguments = upcast [| CustomAttributeTypedArgument(typeof, value) |] - member _.NamedArguments = upcast [| |] } + member __.Constructor = typeof.GetConstructors().[0] + member __.ConstructorArguments = upcast [| CustomAttributeTypedArgument(typeof, value) |] + member __.NamedArguments = upcast [| |] } /// This makes an xml doc attribute w.r.t. an amortized computation of an xml doc string. /// It is important that the text of the xml doc only get forced when poking on the ConstructorArguments /// for the CustomAttributeData object. let mkXmlDocCustomAttributeDataLazy(lazyText: Lazy) = { new CustomAttributeData() with - member _.Constructor = typeof.GetConstructors().[0] - member _.ConstructorArguments = upcast [| CustomAttributeTypedArgument(typeof, lazyText.Force()) |] - member _.NamedArguments = upcast [| |] } + member __.Constructor = typeof.GetConstructors().[0] + member __.ConstructorArguments = upcast [| CustomAttributeTypedArgument(typeof, lazyText.Force()) |] + member __.NamedArguments = upcast [| |] } let mkXmlDocCustomAttributeData(s:string) = mkXmlDocCustomAttributeDataLazy (lazy s) let mkDefinitionLocationAttributeCustomAttributeData(line:int,column:int,filePath:string) = { new CustomAttributeData() with - member _.Constructor = typeof.GetConstructors().[0] - member _.ConstructorArguments = upcast [| |] - member _.NamedArguments = + member __.Constructor = typeof.GetConstructors().[0] + member __.ConstructorArguments = upcast [| |] + member __.NamedArguments = upcast [| CustomAttributeNamedArgument(typeof.GetProperty("FilePath"), CustomAttributeTypedArgument(typeof, filePath)); CustomAttributeNamedArgument(typeof.GetProperty("Line"), CustomAttributeTypedArgument(typeof, line)) ; CustomAttributeNamedArgument(typeof.GetProperty("Column"), CustomAttributeTypedArgument(typeof, column)) |] } let mkObsoleteAttributeCustomAttributeData(message:string, isError: bool) = { new CustomAttributeData() with - member _.Constructor = typeof.GetConstructors() |> Array.find (fun x -> x.GetParameters().Length = 2) - member _.ConstructorArguments = upcast [|CustomAttributeTypedArgument(typeof, message) ; CustomAttributeTypedArgument(typeof, isError) |] - member _.NamedArguments = upcast [| |] } + member __.Constructor = typeof.GetConstructors() |> Array.find (fun x -> x.GetParameters().Length = 2) + member __.ConstructorArguments = upcast [|CustomAttributeTypedArgument(typeof, message) ; CustomAttributeTypedArgument(typeof, isError) |] + member __.NamedArguments = upcast [| |] } let mkReflectedDefinitionCustomAttributeData() = { new CustomAttributeData() with - member _.Constructor = typeof.GetConstructors().[0] - member _.ConstructorArguments = upcast [| |] - member _.NamedArguments = upcast [| |] } + member __.Constructor = typeof.GetConstructors().[0] + member __.ConstructorArguments = upcast [| |] + member __.NamedArguments = upcast [| |] } type CustomAttributesImpl(customAttributesData) = let customAttributes = ResizeArray() @@ -816,17 +816,17 @@ namespace ProviderImplementation.ProvidedTypes yield! customAttributesData() yield! customAttributes |] - member _.AddDefinitionLocation(line:int,column:int,filePath:string) = customAttributes.Add(mkDefinitionLocationAttributeCustomAttributeData(line, column, filePath)) - member _.AddObsolete(message: string, isError) = obsoleteMessage <- Some (message,isError) - member _.HasParamArray with get() = hasParamArray and set(v) = hasParamArray <- v - member _.HasReflectedDefinition with get() = hasReflectedDefinition and set(v) = hasReflectedDefinition <- v - member _.AddXmlDocComputed xmlDocFunction = xmlDocAlwaysRecomputed <- Some xmlDocFunction - member _.AddXmlDocDelayed xmlDocFunction = xmlDocDelayed <- Some xmlDocFunction - member _.AddXmlDoc xmlDoc = xmlDocDelayed <- Some (K xmlDoc) - member _.HideObjectMethods with get() = hideObjectMethods and set v = hideObjectMethods <- v - member _.NonNullable with get () = nonNullable and set v = nonNullable <- v - member _.AddCustomAttribute(attribute) = customAttributes.Add(attribute) - member _.GetCustomAttributesData() = + member __.AddDefinitionLocation(line:int,column:int,filePath:string) = customAttributes.Add(mkDefinitionLocationAttributeCustomAttributeData(line, column, filePath)) + member __.AddObsolete(message: string, isError) = obsoleteMessage <- Some (message,isError) + member __.HasParamArray with get() = hasParamArray and set(v) = hasParamArray <- v + member __.HasReflectedDefinition with get() = hasReflectedDefinition and set(v) = hasReflectedDefinition <- v + member __.AddXmlDocComputed xmlDocFunction = xmlDocAlwaysRecomputed <- Some xmlDocFunction + member __.AddXmlDocDelayed xmlDocFunction = xmlDocDelayed <- Some xmlDocFunction + member __.AddXmlDoc xmlDoc = xmlDocDelayed <- Some (K xmlDoc) + member __.HideObjectMethods with get() = hideObjectMethods and set v = hideObjectMethods <- v + member __.NonNullable with get () = nonNullable and set v = nonNullable <- v + member __.AddCustomAttribute(attribute) = customAttributes.Add(attribute) + member __.GetCustomAttributesData() = [| yield! customAttributesOnce.Force() // Recomputed XML doc is evaluated on every call to GetCustomAttributesData() match xmlDocAlwaysRecomputed with None -> () | Some f -> yield mkXmlDocCustomAttributeData (f()) |] @@ -841,21 +841,21 @@ namespace ProviderImplementation.ProvidedTypes new (parameterName:string, parameterType:Type, ?parameterDefaultValue:obj) = ProvidedStaticParameter(false, parameterName, parameterType, parameterDefaultValue, (K [| |])) - member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member _.ParameterDefaultValue = parameterDefaultValue - member _.BelongsToTargetModel = isTgt + member __.ParameterDefaultValue = parameterDefaultValue + member __.BelongsToTargetModel = isTgt - override _.RawDefaultValue = defaultArg parameterDefaultValue null - override _.Attributes = if parameterDefaultValue.IsNone then enum 0 else ParameterAttributes.Optional - override _.Position = 0 - override _.ParameterType = parameterType - override _.Name = parameterName - override _.GetCustomAttributes(_inherit) = emptyAttributes - override _.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes - override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override __.RawDefaultValue = defaultArg parameterDefaultValue null + override __.Attributes = if parameterDefaultValue.IsNone then enum 0 else ParameterAttributes.Optional + override __.Position = 0 + override __.ParameterType = parameterType + override __.Name = parameterName + override __.GetCustomAttributes(_inherit) = emptyAttributes + override __.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes + override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() type ProvidedParameter(isTgt: bool, parameterName:string, attrs, parameterType:Type, optionalValue:obj option, customAttributesData) = @@ -872,18 +872,18 @@ namespace ProviderImplementation.ProvidedTypes (match optionalValue with None -> enum 0 | Some _ -> ParameterAttributes.Optional ||| ParameterAttributes.HasDefault) ProvidedParameter(false, parameterName, attrs, parameterType, optionalValue, K [| |]) - member _.IsParamArray with set(v) = customAttributesImpl.HasParamArray <- v - member _.IsReflectedDefinition with set(v) = customAttributesImpl.HasReflectedDefinition <- v - member _.OptionalValue = optionalValue - member _.HasDefaultParameterValue = Option.isSome optionalValue - member _.BelongsToTargetModel = isTgt - member _.AddCustomAttribute(attribute) = customAttributesImpl.AddCustomAttribute(attribute) + member __.IsParamArray with set(v) = customAttributesImpl.HasParamArray <- v + member __.IsReflectedDefinition with set(v) = customAttributesImpl.HasReflectedDefinition <- v + member __.OptionalValue = optionalValue + member __.HasDefaultParameterValue = Option.isSome optionalValue + member __.BelongsToTargetModel = isTgt + member __.AddCustomAttribute(attribute) = customAttributesImpl.AddCustomAttribute(attribute) - override _.Name = parameterName - override _.ParameterType = parameterType - override _.Attributes = attrs - override _.RawDefaultValue = defaultArg optionalValue null - override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override __.Name = parameterName + override __.ParameterType = parameterType + override __.Attributes = attrs + override __.RawDefaultValue = defaultArg optionalValue null + override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() and ProvidedConstructor(isTgt: bool, attrs: MethodAttributes, parameters: ProvidedParameter[], invokeCode: (Expr list -> Expr), baseCall, isImplicitCtor, customAttributesData) = @@ -900,48 +900,48 @@ namespace ProviderImplementation.ProvidedTypes new (parameters, invokeCode) = ProvidedConstructor(false, MethodAttributes.Public ||| MethodAttributes.RTSpecialName, Array.ofList parameters, invokeCode, None, false, K [| |]) - member _.IsTypeInitializer + member __.IsTypeInitializer with get() = isStatic() && attrs.HasFlag(MethodAttributes.Private) and set(v) = let typeInitializerAttributes = MethodAttributes.Static ||| MethodAttributes.Private attrs <- if v then attrs ||| typeInitializerAttributes else attrs &&& ~~~typeInitializerAttributes - member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member _.PatchDeclaringType x = patchOption declaringType (fun () -> declaringType <- Some x) + member __.PatchDeclaringType x = patchOption declaringType (fun () -> declaringType <- Some x) member this.BaseConstructorCall with set (d:Expr list -> (ConstructorInfo * Expr list)) = match baseCall with | None -> baseCall <- Some d | Some _ -> failwithf "ProvidedConstructor: base call already given for '%s'" this.Name - member _.IsImplicitConstructor with get() = isImplicitCtor and set v = isImplicitCtor <- v - member _.BaseCall = baseCall - member _.Parameters = parameters - member _.GetInvokeCode args = invokeCode args - member _.BelongsToTargetModel = isTgt - member _.DeclaringProvidedType = declaringType + member __.IsImplicitConstructor with get() = isImplicitCtor and set v = isImplicitCtor <- v + member __.BaseCall = baseCall + member __.Parameters = parameters + member __.GetInvokeCode args = invokeCode args + member __.BelongsToTargetModel = isTgt + member __.DeclaringProvidedType = declaringType member this.IsErased = (nonNone "DeclaringType" this.DeclaringProvidedType).IsErased // Implement overloads - override _.GetParameters() = parameterInfos - override _.Attributes = attrs - override _.Name = if isStatic() then ".cctor" else ".ctor" - override _.DeclaringType = declaringType |> nonNone "DeclaringType" :> Type - override _.IsDefined(_attributeType, _inherit) = true + override __.GetParameters() = parameterInfos + override __.Attributes = attrs + override __.Name = if isStatic() then ".cctor" else ".ctor" + override __.DeclaringType = declaringType |> nonNone "DeclaringType" :> Type + override __.IsDefined(_attributeType, _inherit) = true override this.Invoke(_invokeAttr, _binder, _parameters, _culture) = notRequired this "Invoke" this.Name override this.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired this "Invoke" this.Name override this.ReflectedType = notRequired this "ReflectedType" this.Name override this.GetMethodImplementationFlags() = notRequired this "GetMethodImplementationFlags" this.Name override this.MethodHandle = notRequired this "MethodHandle" this.Name - override _.GetCustomAttributes(_inherit) = emptyAttributes - override _.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes - override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override __.GetCustomAttributes(_inherit) = emptyAttributes + override __.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes + override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() and ProvidedMethod(isTgt: bool, methodName: string, attrs: MethodAttributes, parameters: ProvidedParameter[], returnType: Type, invokeCode: (Expr list -> Expr), staticParams, staticParamsApply, customAttributesData) = inherit MethodInfo() @@ -959,24 +959,24 @@ namespace ProviderImplementation.ProvidedTypes let attrs = if isStatic then MethodAttributes.Public ||| MethodAttributes.Static else MethodAttributes.Public ProvidedMethod(false, methodName, attrs, Array.ofList parameters, returnType, invokeCode, [], None, K [| |]) - member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member _.AddCustomAttribute(attribute) = customAttributesImpl.AddCustomAttribute(attribute) + member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member __.AddCustomAttribute(attribute) = customAttributesImpl.AddCustomAttribute(attribute) - member _.SetMethodAttrs attributes = attrs <- attributes - member _.AddMethodAttrs attributes = attrs <- attrs ||| attributes - member _.PatchDeclaringType x = patchOption declaringType (fun () -> declaringType <- Some x) + member __.SetMethodAttrs attributes = attrs <- attributes + member __.AddMethodAttrs attributes = attrs <- attrs ||| attributes + member __.PatchDeclaringType x = patchOption declaringType (fun () -> declaringType <- Some x) /// Abstract a type to a parametric-type. Requires "formal parameters" and "instantiation function". - member _.DefineStaticParameters(parameters: ProvidedStaticParameter list, instantiationFunction: (string -> obj[] -> ProvidedMethod)) = + member __.DefineStaticParameters(parameters: ProvidedStaticParameter list, instantiationFunction: (string -> obj[] -> ProvidedMethod)) = staticParams <- parameters staticParamsApply <- Some instantiationFunction /// Get ParameterInfo[] for the parametric type parameters - member _.GetStaticParametersInternal() = [| for p in staticParams -> p :> ParameterInfo |] + member __.GetStaticParametersInternal() = [| for p in staticParams -> p :> ParameterInfo |] /// Instantiate parametric method member this.ApplyStaticArguments(mangledName:string, args:obj[]) = @@ -989,43 +989,43 @@ namespace ProviderImplementation.ProvidedTypes else this - member _.Parameters = parameters - member _.GetInvokeCode args = invokeCode args - member _.StaticParams = staticParams - member _.StaticParamsApply = staticParamsApply - member _.BelongsToTargetModel = isTgt - member _.DeclaringProvidedType = declaringType + member __.Parameters = parameters + member __.GetInvokeCode args = invokeCode args + member __.StaticParams = staticParams + member __.StaticParamsApply = staticParamsApply + member __.BelongsToTargetModel = isTgt + member __.DeclaringProvidedType = declaringType member this.IsErased = (nonNone "DeclaringType" this.DeclaringProvidedType).IsErased // Implement overloads - override _.GetParameters() = parameterInfos - override _.Attributes = attrs - override _.Name = methodName - override _.DeclaringType = declaringType |> nonNone "DeclaringType" :> Type - override _.IsDefined(_attributeType, _inherit): bool = true - override _.MemberType = MemberTypes.Method + override __.GetParameters() = parameterInfos + override __.Attributes = attrs + override __.Name = methodName + override __.DeclaringType = declaringType |> nonNone "DeclaringType" :> Type + override __.IsDefined(_attributeType, _inherit): bool = true + override __.MemberType = MemberTypes.Method override x.CallingConvention = let cc = CallingConventions.Standard let cc = if not x.IsStatic then cc ||| CallingConventions.HasThis else cc cc - override _.ReturnType = returnType - override _.ReturnParameter = null // REVIEW: Give it a name and type? - override _.ToString() = "Method " + methodName + override __.ReturnType = returnType + override __.ReturnParameter = null // REVIEW: Give it a name and type? + override __.ToString() = "Method " + methodName // These don't have to return fully accurate results - they are used // by the F# Quotations library function SpecificCall as a pre-optimization // when comparing methods - override _.MetadataToken = genToken() - override _.MethodHandle = RuntimeMethodHandle() + override __.MetadataToken = genToken() + override __.MethodHandle = RuntimeMethodHandle() override this.ReturnTypeCustomAttributes = notRequired this "ReturnTypeCustomAttributes" methodName override this.GetBaseDefinition() = notRequired this "GetBaseDefinition" methodName override this.GetMethodImplementationFlags() = notRequired this "GetMethodImplementationFlags" methodName override this.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired this "Invoke" methodName override this.ReflectedType = notRequired this "ReflectedType" methodName - override _.GetCustomAttributes(_inherit) = emptyAttributes - override _.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes - override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override __.GetCustomAttributes(_inherit) = emptyAttributes + override __.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes + override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() and ProvidedProperty(isTgt: bool, propertyName: string, attrs: PropertyAttributes, propertyType: Type, isStatic: bool, getter: (unit -> MethodInfo) option, setter: (unit -> MethodInfo) option, indexParameters: ProvidedParameter[], customAttributesData) = @@ -1044,43 +1044,43 @@ namespace ProviderImplementation.ProvidedTypes let setter = setterCode |> Option.map (fun code -> ProvidedMethod(false, "set_" + propertyName, pattrs, [| yield! indexParameters; yield ProvidedParameter(false, "value",propertyType,isOut=Some false,optionalValue=None) |], typeof,code, [], None, K [| |]) :> MethodInfo) ProvidedProperty(false, propertyName, PropertyAttributes.None, propertyType, isStatic, Option.map K getter, Option.map K setter, Array.ofList indexParameters, K [| |]) - member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member _.AddCustomAttribute attribute = customAttributesImpl.AddCustomAttribute attribute - override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member __.AddCustomAttribute attribute = customAttributesImpl.AddCustomAttribute attribute + override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() - member _.PatchDeclaringType x = + member __.PatchDeclaringType x = if not isTgt then match getter with Some f -> (match f() with (:? ProvidedMethod as g) -> g.PatchDeclaringType x | _ -> ()) | _ -> () match setter with Some f -> (match f() with (:? ProvidedMethod as s) -> s.PatchDeclaringType x | _ -> ()) | _ -> () patchOption declaringType (fun () -> declaringType <- Some x) - member _.IsStatic = isStatic - member _.IndexParameters = indexParameters - member _.BelongsToTargetModel = isTgt - member _.Getter = getter - member _.Setter = setter + member __.IsStatic = isStatic + member __.IndexParameters = indexParameters + member __.BelongsToTargetModel = isTgt + member __.Getter = getter + member __.Setter = setter - override _.PropertyType = propertyType + override __.PropertyType = propertyType override this.SetValue(_obj, _value, _invokeAttr, _binder, _index, _culture) = notRequired this "SetValue" propertyName override this.GetAccessors _nonPublic = notRequired this "nonPublic" propertyName - override _.GetGetMethod _nonPublic = match getter with None -> null | Some g -> g() - override _.GetSetMethod _nonPublic = match setter with None -> null | Some s -> s() - override _.GetIndexParameters() = [| for p in indexParameters -> upcast p |] - override _.Attributes = attrs - override _.CanRead = getter.IsSome - override _.CanWrite = setter.IsSome + override __.GetGetMethod _nonPublic = match getter with None -> null | Some g -> g() + override __.GetSetMethod _nonPublic = match setter with None -> null | Some s -> s() + override __.GetIndexParameters() = [| for p in indexParameters -> upcast p |] + override __.Attributes = attrs + override __.CanRead = getter.IsSome + override __.CanWrite = setter.IsSome override this.GetValue(_obj, _invokeAttr, _binder, _index, _culture): obj = notRequired this "GetValue" propertyName - override _.Name = propertyName - override _.DeclaringType = declaringType |> nonNone "DeclaringType":> Type - override _.MemberType: MemberTypes = MemberTypes.Property + override __.Name = propertyName + override __.DeclaringType = declaringType |> nonNone "DeclaringType":> Type + override __.MemberType: MemberTypes = MemberTypes.Property override this.ReflectedType = notRequired this "ReflectedType" propertyName - override _.GetCustomAttributes(_inherit) = emptyAttributes - override _.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes + override __.GetCustomAttributes(_inherit) = emptyAttributes + override __.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes override this.IsDefined(_attributeType, _inherit) = notRequired this "IsDefined" propertyName and ProvidedEvent(isTgt: bool, eventName:string, attrs: EventAttributes, eventHandlerType:Type, isStatic: bool, adder: (unit -> MethodInfo), remover: (unit -> MethodInfo), customAttributesData) = @@ -1097,36 +1097,36 @@ namespace ProviderImplementation.ProvidedTypes let remover = ProvidedMethod(false, "remove_" + eventName, pattrs, [| ProvidedParameter(false, "handler", eventHandlerType, isOut=Some false, optionalValue=None) |], typeof, removerCode, [], None, K [| |]) :> MethodInfo ProvidedEvent(false, eventName, EventAttributes.None, eventHandlerType, isStatic, K adder, K remover, K [| |]) - member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member _.PatchDeclaringType x = + member __.PatchDeclaringType x = if not isTgt then match adder() with :? ProvidedMethod as a -> a.PatchDeclaringType x | _ -> () match remover() with :? ProvidedMethod as r -> r.PatchDeclaringType x | _ -> () patchOption declaringType (fun () -> declaringType <- Some x) - member _.IsStatic = isStatic - member _.Adder = adder() - member _.Remover = remover() - member _.BelongsToTargetModel = isTgt + member __.IsStatic = isStatic + member __.Adder = adder() + member __.Remover = remover() + member __.BelongsToTargetModel = isTgt - override _.EventHandlerType = eventHandlerType - override _.GetAddMethod _nonPublic = adder() - override _.GetRemoveMethod _nonPublic = remover() - override _.Attributes = attrs - override _.Name = eventName - override _.DeclaringType = declaringType |> nonNone "DeclaringType":> Type - override _.MemberType: MemberTypes = MemberTypes.Event + override __.EventHandlerType = eventHandlerType + override __.GetAddMethod _nonPublic = adder() + override __.GetRemoveMethod _nonPublic = remover() + override __.Attributes = attrs + override __.Name = eventName + override __.DeclaringType = declaringType |> nonNone "DeclaringType":> Type + override __.MemberType: MemberTypes = MemberTypes.Event override this.GetRaiseMethod _nonPublic = notRequired this "GetRaiseMethod" eventName override this.ReflectedType = notRequired this "ReflectedType" eventName - override _.GetCustomAttributes(_inherit) = emptyAttributes - override _.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes + override __.GetCustomAttributes(_inherit) = emptyAttributes + override __.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes override this.IsDefined(_attributeType, _inherit) = notRequired this "IsDefined" eventName - override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() and ProvidedField(isTgt: bool, fieldName:string, attrs, fieldType:Type, rawConstantValue: obj, customAttributesData) = inherit FieldInfo() @@ -1139,30 +1139,30 @@ namespace ProviderImplementation.ProvidedTypes new (fieldName:string, fieldType:Type, value:obj) = ProvidedField(false, fieldName, FieldAttributes.Private, fieldType, value, (K [| |])) new (fieldName:string, fieldType:Type) = ProvidedField(fieldName, fieldType, null) - member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member _.SetFieldAttributes attributes = attrs <- attributes - member _.BelongsToTargetModel = isTgt + member __.SetFieldAttributes attributes = attrs <- attributes + member __.BelongsToTargetModel = isTgt - member _.PatchDeclaringType x = patchOption declaringType (fun () -> declaringType <- Some x) + member __.PatchDeclaringType x = patchOption declaringType (fun () -> declaringType <- Some x) - override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() // Implement overloads - override _.FieldType = fieldType - override _.GetRawConstantValue() = rawConstantValue - override _.Attributes = attrs - override _.Name = fieldName - override _.DeclaringType = declaringType |> nonNone "DeclaringType":> Type - override _.MemberType: MemberTypes = MemberTypes.Field + override __.FieldType = fieldType + override __.GetRawConstantValue() = rawConstantValue + override __.Attributes = attrs + override __.Name = fieldName + override __.DeclaringType = declaringType |> nonNone "DeclaringType":> Type + override __.MemberType: MemberTypes = MemberTypes.Field override this.ReflectedType = notRequired this "ReflectedType" fieldName - override _.GetCustomAttributes(_inherit) = emptyAttributes - override _.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes + override __.GetCustomAttributes(_inherit) = emptyAttributes + override __.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes override this.IsDefined(_attributeType, _inherit) = notRequired this "IsDefined" fieldName override this.SetValue(_obj, _value, _invokeAttr, _binder, _culture) = notRequired this "SetValue" fieldName @@ -1330,7 +1330,7 @@ namespace ProviderImplementation.ProvidedTypes do if hideObjectMethods then customAttributesImpl.HideObjectMethods <- true do this.typeImpl <- this - override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() new (assembly:Assembly, namespaceName, className, baseType, ?hideObjectMethods, ?nonNullable, ?isErased) = let isErased = defaultArg isErased true @@ -1349,16 +1349,16 @@ namespace ProviderImplementation.ProvidedTypes // state ops - override _.UnderlyingSystemType = typeof + override __.UnderlyingSystemType = typeof // Implement overloads - override _.Assembly = + override __.Assembly = match container with | TypeContainer.Namespace (theAssembly,_) -> theAssembly() | TypeContainer.Type t -> t.Assembly | TypeContainer.TypeToBeDecided -> failwithf "type '%s' was not yet added as a member to a declaring type, stacktrace = %s" className Environment.StackTrace - override _.FullName = + override __.FullName = match container with | TypeContainer.Type declaringType -> declaringType.FullName + "+" + className | TypeContainer.Namespace (_,namespaceName) -> @@ -1368,15 +1368,15 @@ namespace ProviderImplementation.ProvidedTypes | _ -> namespaceName + "." + className | TypeContainer.TypeToBeDecided -> failwithf "type '%s' was not added as a member to a declaring type" className - override _.Namespace = + override __.Namespace = match container with | TypeContainer.Namespace (_,nsp) -> nsp | TypeContainer.Type t -> t.Namespace | TypeContainer.TypeToBeDecided -> failwithf "type '%s' was not added as a member to a declaring type" className - override _.BaseType = match baseType.Value with Some ty -> ty | None -> null + override __.BaseType = match baseType.Value with Some ty -> ty | None -> null - override _.GetConstructors bindingFlags = + override __.GetConstructors bindingFlags = getMembers() |> Array.choose (function :? ConstructorInfo as c when memberBinds false bindingFlags c.IsStatic c.IsPublic -> Some c | _ -> None) @@ -1400,7 +1400,7 @@ namespace ProviderImplementation.ProvidedTypes |> Array.choose (function :? EventInfo as m when memberBinds false bindingFlags m.IsStatic m.IsPublic -> Some m | _ -> None) |> (if bindingFlags.HasFlag(BindingFlags.DeclaredOnly) || this.BaseType = null then id else (fun mems -> Array.append mems (this.ErasedBaseType.GetEvents(bindingFlags)))) - override _.GetNestedTypes bindingFlags = + override __.GetNestedTypes bindingFlags = getMembers() |> Array.choose (function :? Type as m when memberBinds true bindingFlags false m.IsPublic || m.IsNestedPublic -> Some m | _ -> None) |> (if bindingFlags.HasFlag(BindingFlags.DeclaredOnly) || this.BaseType = null then id else (fun mems -> Array.append mems (this.ErasedBaseType.GetNestedTypes(bindingFlags)))) @@ -1410,7 +1410,7 @@ namespace ProviderImplementation.ProvidedTypes if xs.Length > 1 then failwith "GetConstructorImpl. not support overloads" if xs.Length > 0 then xs.[0] else null - override _.GetMethodImpl(name, bindingFlags, _binderBinder, _callConvention, _types, _modifiers): MethodInfo = + override __.GetMethodImpl(name, bindingFlags, _binderBinder, _callConvention, _types, _modifiers): MethodInfo = let xs = this.GetMethods bindingFlags |> Array.filter (fun m -> m.Name = name) if xs.Length > 1 then failwithf "GetMethodImpl. not support overloads, name = '%s', methods - '%A', callstack = '%A'" name xs Environment.StackTrace if xs.Length > 0 then xs.[0] else null @@ -1419,34 +1419,34 @@ namespace ProviderImplementation.ProvidedTypes let xs = this.GetFields bindingFlags |> Array.filter (fun m -> m.Name = name) if xs.Length > 0 then xs.[0] else null - override _.GetPropertyImpl(name, bindingFlags, _binder, _returnType, _types, _modifiers) = + override __.GetPropertyImpl(name, bindingFlags, _binder, _returnType, _types, _modifiers) = let xs = this.GetProperties bindingFlags |> Array.filter (fun m -> m.Name = name) if xs.Length > 0 then xs.[0] else null - override _.GetEvent(name, bindingFlags) = + override __.GetEvent(name, bindingFlags) = let xs = this.GetEvents bindingFlags |> Array.filter (fun m -> m.Name = name) if xs.Length > 0 then xs.[0] else null - override _.GetNestedType(name, bindingFlags) = + override __.GetNestedType(name, bindingFlags) = let xs = this.GetNestedTypes bindingFlags |> Array.filter (fun m -> m.Name = name) if xs.Length > 0 then xs.[0] else null - override _.GetInterface(_name, _ignoreCase) = notRequired this "GetInterface" this.Name + override __.GetInterface(_name, _ignoreCase) = notRequired this "GetInterface" this.Name - override _.GetInterfaces() = getInterfaces() + override __.GetInterfaces() = getInterfaces() - override _.MakeArrayType() = ProvidedTypeSymbol(ProvidedTypeSymbolKind.SDArray, [this]) :> Type + override __.MakeArrayType() = ProvidedTypeSymbol(ProvidedTypeSymbolKind.SDArray, [this]) :> Type - override _.MakeArrayType arg = ProvidedTypeSymbol(ProvidedTypeSymbolKind.Array arg, [this]) :> Type + override __.MakeArrayType arg = ProvidedTypeSymbol(ProvidedTypeSymbolKind.Array arg, [this]) :> Type - override _.MakePointerType() = ProvidedTypeSymbol(ProvidedTypeSymbolKind.Pointer, [this]) :> Type + override __.MakePointerType() = ProvidedTypeSymbol(ProvidedTypeSymbolKind.Pointer, [this]) :> Type - override _.MakeByRefType() = ProvidedTypeSymbol(ProvidedTypeSymbolKind.ByRef, [this]) :> Type + override __.MakeByRefType() = ProvidedTypeSymbol(ProvidedTypeSymbolKind.ByRef, [this]) :> Type // The binding attributes are always set to DeclaredOnly ||| Static ||| Instance ||| Public when GetMembers is called directly by the F# compiler // However, it's possible for the framework to generate other sets of flags in some corner cases (e.g. via use of `enum` with a provided type as the target) - override _.GetMembers bindingFlags = + override __.GetMembers bindingFlags = [| for m in getMembers() do match m with | :? ConstructorInfo as c when memberBinds false bindingFlags c.IsStatic c.IsPublic -> yield (c :> MemberInfo) @@ -1462,40 +1462,40 @@ namespace ProviderImplementation.ProvidedTypes this.GetMembers() |> Array.filter (fun m -> 0 <> int(m.MemberType &&& mt) && m.Name = name) // Attributes, etc.. - override _.GetAttributeFlagsImpl() = adjustTypeAttributes this.IsNested attrs + override __.GetAttributeFlagsImpl() = adjustTypeAttributes this.IsNested attrs override this.IsValueTypeImpl() = match this.BaseType with | null -> false | bt -> bt.FullName = "System.Enum" || bt.FullName = "System.ValueType" || bt.IsValueType - override _.IsEnum = + override __.IsEnum = match this.BaseType with | null -> false | bt -> bt.FullName = "System.Enum" || bt.IsEnum - override _.GetEnumUnderlyingType() = + override __.GetEnumUnderlyingType() = if this.IsEnum then match enumUnderlyingType.Force() with | None -> typeof | Some ty -> ty else failwithf "not enum type" - override _.IsArrayImpl() = false - override _.IsByRefImpl() = false - override _.IsPointerImpl() = false - override _.IsPrimitiveImpl() = false - override _.IsCOMObjectImpl() = false - override _.HasElementTypeImpl() = false - override _.Name = className + override __.IsArrayImpl() = false + override __.IsByRefImpl() = false + override __.IsPointerImpl() = false + override __.IsPrimitiveImpl() = false + override __.IsCOMObjectImpl() = false + override __.HasElementTypeImpl() = false + override __.Name = className - override _.DeclaringType = + override __.DeclaringType = match container with | TypeContainer.Namespace _ -> null | TypeContainer.Type enclosingTyp -> (enclosingTyp :> Type) | TypeContainer.TypeToBeDecided -> failwithf "type '%s' was not added as a member to a declaring type" className - override _.MemberType = if this.IsNested then MemberTypes.NestedType else MemberTypes.TypeInfo + override __.MemberType = if this.IsNested then MemberTypes.NestedType else MemberTypes.TypeInfo override x.GetHashCode() = x.Namespace.GetHashCode() ^^^ className.GetHashCode() override this.Equals(that: obj) = Object.ReferenceEquals(this, that) @@ -1505,79 +1505,79 @@ namespace ProviderImplementation.ProvidedTypes override this.IsSubclassOf(otherTy: Type) = isSubclassOf this otherTy - override _.GetGenericArguments() = [||] + override __.GetGenericArguments() = [||] - override _.ToString() = this.Name + override __.ToString() = this.Name override x.Module = x.Assembly.ManifestModule - override _.GUID = Guid.Empty - override _.GetCustomAttributes(_inherit) = emptyAttributes - override _.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes - override _.IsDefined(_attributeType: Type, _inherit) = false + override __.GUID = Guid.Empty + override __.GetCustomAttributes(_inherit) = emptyAttributes + override __.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes + override __.IsDefined(_attributeType: Type, _inherit) = false - override _.GetElementType() = notRequired this "Module" this.Name - override _.InvokeMember(_name, _invokeAttr, _binder, _target, _args, _modifiers, _culture, _namedParameters) = notRequired this "Module" this.Name - override _.AssemblyQualifiedName = notRequired this "Module" this.Name + override __.GetElementType() = notRequired this "Module" this.Name + override __.InvokeMember(_name, _invokeAttr, _binder, _target, _args, _modifiers, _culture, _namedParameters) = notRequired this "Module" this.Name + override __.AssemblyQualifiedName = notRequired this "Module" this.Name // Needed because TypeDelegator.cs provides a delegting implementation of this, and we are self-delegating override this.GetEvents() = this.GetEvents(BindingFlags.Public ||| BindingFlags.Instance ||| BindingFlags.Static) // Needed because TypeDelegator.cs provides a delegting implementation of this, and we are self-delegating // Get the model - member _.BelongsToTargetModel = isTgt - member _.AttributesRaw = attrs - member _.EnumUnderlyingTypeRaw() = enumUnderlyingType.Force() - member _.Container = container - member _.BaseTypeRaw() = baseType.Force() - member _.StaticParams = staticParams - member _.StaticParamsApply = staticParamsApply + member __.BelongsToTargetModel = isTgt + member __.AttributesRaw = attrs + member __.EnumUnderlyingTypeRaw() = enumUnderlyingType.Force() + member __.Container = container + member __.BaseTypeRaw() = baseType.Force() + member __.StaticParams = staticParams + member __.StaticParamsApply = staticParamsApply // Fetch the members declared since the indicated position in the members list. This allows the target model to observe // incremental additions made to the source model - member _.GetMembersFromCursor(idx: int) = evalMembers(); members.GetRange(idx, members.Count - idx).ToArray(), members.Count + member __.GetMembersFromCursor(idx: int) = evalMembers(); members.GetRange(idx, members.Count - idx).ToArray(), members.Count // Fetch the interfaces declared since the indicated position in the interfaces list - member _.GetInterfaceImplsFromCursor(idx: int) = evalInterfaces(); interfaceImpls.GetRange(idx, interfaceImpls.Count - idx).ToArray(), interfaceImpls.Count + member __.GetInterfaceImplsFromCursor(idx: int) = evalInterfaces(); interfaceImpls.GetRange(idx, interfaceImpls.Count - idx).ToArray(), interfaceImpls.Count // Fetch the method overrides declared since the indicated position in the list - member _.GetMethodOverridesFromCursor(idx: int) = evalMethodOverrides(); methodOverrides.GetRange(idx, methodOverrides.Count - idx).ToArray(), methodOverrides.Count + member __.GetMethodOverridesFromCursor(idx: int) = evalMethodOverrides(); methodOverrides.GetRange(idx, methodOverrides.Count - idx).ToArray(), methodOverrides.Count // Fetch the method overrides - member _.GetMethodOverrides() = getMethodOverrides() + member __.GetMethodOverrides() = getMethodOverrides() member this.ErasedBaseType : Type = ProvidedTypeDefinition.EraseType(this.BaseType) - member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member _.HideObjectMethods with get() = customAttributesImpl.HideObjectMethods and set v = customAttributesImpl.HideObjectMethods <- v - member _.NonNullable with get() = customAttributesImpl.NonNullable and set v = customAttributesImpl.NonNullable <- v - member _.AddCustomAttribute attribute = customAttributesImpl.AddCustomAttribute attribute - - member _.SetEnumUnderlyingType(ty) = enumUnderlyingType <- lazy Some ty - member _.SetBaseType t = + member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member __.HideObjectMethods with get() = customAttributesImpl.HideObjectMethods and set v = customAttributesImpl.HideObjectMethods <- v + member __.NonNullable with get() = customAttributesImpl.NonNullable and set v = customAttributesImpl.NonNullable <- v + member __.AddCustomAttribute attribute = customAttributesImpl.AddCustomAttribute attribute + + member __.SetEnumUnderlyingType(ty) = enumUnderlyingType <- lazy Some ty + member __.SetBaseType t = if baseType.IsValueCreated then failwithf "The base type has already been evaluated for this type. Please call SetBaseType before any operations which traverse the type hierarchy. stacktrace = %A" Environment.StackTrace baseType <- lazy Some t - member _.SetBaseTypeDelayed baseTypeFunction = + member __.SetBaseTypeDelayed baseTypeFunction = if baseType.IsValueCreated then failwithf "The base type has already been evaluated for this type. Please call SetBaseType before any operations which traverse the type hierarchy. stacktrace = %A" Environment.StackTrace baseType <- lazy (Some (baseTypeFunction())) - member _.SetAttributes x = attrs <- x + member __.SetAttributes x = attrs <- x member this.AddMembers(memberInfos:list<#MemberInfo>) = memberInfos |> List.iter this.PatchDeclaringTypeOfMember membersQueue.Add (fun () -> memberInfos |> List.toArray |> Array.map (fun x -> x :> MemberInfo )) - member _.AddMember(memberInfo:MemberInfo) = + member __.AddMember(memberInfo:MemberInfo) = this.AddMembers [memberInfo] - member _.AddMembersDelayed(membersFunction: unit -> list<#MemberInfo>) = + member __.AddMembersDelayed(membersFunction: unit -> list<#MemberInfo>) = membersQueue.Add (fun () -> membersFunction() |> List.toArray |> Array.map (fun x -> this.PatchDeclaringTypeOfMember x; x :> MemberInfo )) - member _.AddMemberDelayed(memberFunction: unit -> #MemberInfo) = + member __.AddMemberDelayed(memberFunction: unit -> #MemberInfo) = this.AddMembersDelayed(fun () -> [memberFunction()]) - member _.AddAssemblyTypesAsNestedTypesDelayed (assemblyFunction: unit -> Assembly) = + member __.AddAssemblyTypesAsNestedTypesDelayed (assemblyFunction: unit -> Assembly) = let bucketByPath nodef tipf (items: (string list * 'Value) list) = // Find all the items with an empty key list and call 'tipf' let tips = @@ -1615,14 +1615,14 @@ namespace ProviderImplementation.ProvidedTypes loop topTypes) /// Abstract a type to a parametric-type. Requires "formal parameters" and "instantiation function". - member _.DefineStaticParameters(parameters: ProvidedStaticParameter list, instantiationFunction: (string -> obj[] -> ProvidedTypeDefinition)) = + member __.DefineStaticParameters(parameters: ProvidedStaticParameter list, instantiationFunction: (string -> obj[] -> ProvidedTypeDefinition)) = if staticParamsDefined then failwithf "Static parameters have already been defined for this type. stacktrace = %A" Environment.StackTrace staticParamsDefined <- true staticParams <- parameters staticParamsApply <- Some instantiationFunction /// Get ParameterInfo[] for the parametric type parameters - member _.GetStaticParametersInternal() = [| for p in staticParams -> p :> ParameterInfo |] + member __.GetStaticParametersInternal() = [| for p in staticParams -> p :> ParameterInfo |] /// Instantiate parametric type member this.ApplyStaticArguments(name:string, args:obj[]) = @@ -1635,32 +1635,32 @@ namespace ProviderImplementation.ProvidedTypes else this - member _.PatchDeclaringType x = container <- TypeContainer.Type x + member __.PatchDeclaringType x = container <- TypeContainer.Type x - member _.IsErased + member __.IsErased with get() = (attrs &&& enum (int32 TypeProviderTypeAttributes.IsErased)) <> enum 0 and set v = if v then attrs <- attrs ||| enum (int32 TypeProviderTypeAttributes.IsErased) else attrs <- attrs &&& ~~~(enum (int32 TypeProviderTypeAttributes.IsErased)) - member _.SuppressRelocation + member __.SuppressRelocation with get() = (attrs &&& enum (int32 TypeProviderTypeAttributes.SuppressRelocate)) <> enum 0 and set v = if v then attrs <- attrs ||| enum (int32 TypeProviderTypeAttributes.SuppressRelocate) else attrs <- attrs &&& ~~~(enum (int32 TypeProviderTypeAttributes.SuppressRelocate)) - member _.AddInterfaceImplementation interfaceType = interfaceImpls.Add interfaceType + member __.AddInterfaceImplementation interfaceType = interfaceImpls.Add interfaceType - member _.AddInterfaceImplementationsDelayed interfacesFunction = interfacesQueue.Add (interfacesFunction >> Array.ofList) + member __.AddInterfaceImplementationsDelayed interfacesFunction = interfacesQueue.Add (interfacesFunction >> Array.ofList) - member _.SetAssemblyInternal (assembly: unit -> Assembly) = + member __.SetAssemblyInternal (assembly: unit -> Assembly) = match container with | TypeContainer.Namespace (_, ns) -> container <- TypeContainer.Namespace (assembly, ns) | TypeContainer.Type _ -> failwithf "can't set assembly of nested type '%s'" className | TypeContainer.TypeToBeDecided -> failwithf "type '%s' was not added as a member to a declaring type" className - member _.DefineMethodOverride (methodInfoBody,methodInfoDeclaration) = methodOverrides.Add (methodInfoBody, methodInfoDeclaration) - member _.DefineMethodOverridesDelayed f = methodOverridesQueue.Add (f >> Array.ofList) + member __.DefineMethodOverride (methodInfoBody,methodInfoDeclaration) = methodOverrides.Add (methodInfoBody, methodInfoDeclaration) + member __.DefineMethodOverridesDelayed f = methodOverridesQueue.Add (f >> Array.ofList) // This method is used by Debug.fs and QuotationBuilder.fs. // Emulate the F# type provider type erasure mechanism to get the @@ -1862,12 +1862,12 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader [] type ILAssemblyRef(name: string, hash: byte[] uoption, publicKey: PublicKey uoption, retargetable: bool, version: Version uoption, locale: string uoption) = - member _.Name=name - member _.Hash=hash - member _.PublicKey=publicKey - member _.Retargetable=retargetable - member _.Version=version - member _.Locale=locale + member __.Name=name + member __.Hash=hash + member __.PublicKey=publicKey + member __.Retargetable=retargetable + member __.Version=version + member __.Locale=locale member x.ToAssemblyName() = let asmName = AssemblyName(Name=x.Name) @@ -1947,10 +1947,10 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader type ILModuleRef(name:string, hasMetadata: bool, hash: byte[] uoption) = - member _.Name=name - member _.HasMetadata=hasMetadata - member _.Hash=hash - override _.ToString() = "module " + name + member __.Name=name + member __.HasMetadata=hasMetadata + member __.Hash=hash + override __.ToString() = "module " + name [] @@ -2042,9 +2042,9 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader // IL type references have a pre-computed hash code to enable quick lookup tables during binary generation. and ILTypeRef(enc: ILTypeRefScope, nsp: string uoption, name: string) = - member _.Scope = enc - member _.Name = name - member _.Namespace = nsp + member __.Scope = enc + member __.Name = name + member __.Namespace = nsp member tref.FullName = match enc with @@ -2056,7 +2056,7 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader | ILTypeRefScope.Top _ -> joinILTypeName tref.Namespace tref.Name | ILTypeRefScope.Nested enc -> enc.BasicQualifiedName + "+" + tref.Name - member _.QualifiedNameExtension = enc.QualifiedNameExtension + member __.QualifiedNameExtension = enc.QualifiedNameExtension member tref.QualifiedName = tref.BasicQualifiedName + enc.QualifiedNameExtension @@ -2064,11 +2064,11 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader and ILTypeSpec(typeRef: ILTypeRef, inst: ILGenericArgs) = - member _.TypeRef = typeRef + member __.TypeRef = typeRef member x.Scope = x.TypeRef.Scope member x.Name = x.TypeRef.Name member x.Namespace = x.TypeRef.Namespace - member _.GenericArgs = inst + member __.GenericArgs = inst member x.BasicQualifiedName = let tc = x.TypeRef.BasicQualifiedName if x.GenericArgs.Length = 0 then @@ -2153,37 +2153,37 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader override x.ToString() = x.QualifiedName and ILCallingSignature(callingConv: ILCallingConv, argTypes: ILTypes, returnType: ILType) = - member _.CallingConv = callingConv - member _.ArgTypes = argTypes - member _.ReturnType = returnType + member __.CallingConv = callingConv + member __.ArgTypes = argTypes + member __.ReturnType = returnType and ILGenericArgs = ILType[] and ILTypes = ILType[] type ILMethodRef(parent: ILTypeRef, callconv: ILCallingConv, genericArity: int, name: string, args: ILTypes, ret: ILType) = - member _.EnclosingTypeRef = parent - member _.CallingConv = callconv - member _.Name = name - member _.GenericArity = genericArity - member _.ArgCount = args.Length - member _.ArgTypes = args - member _.ReturnType = ret + member __.EnclosingTypeRef = parent + member __.CallingConv = callconv + member __.Name = name + member __.GenericArity = genericArity + member __.ArgCount = args.Length + member __.ArgTypes = args + member __.ReturnType = ret member x.CallingSignature = ILCallingSignature (x.CallingConv,x.ArgTypes,x.ReturnType) override x.ToString() = x.EnclosingTypeRef.ToString() + "::" + x.Name + "(...)" type ILFieldRef(enclosingTypeRef: ILTypeRef, name: string, typ: ILType) = - member _.EnclosingTypeRef = enclosingTypeRef - member _.Name = name - member _.Type = typ + member __.EnclosingTypeRef = enclosingTypeRef + member __.Name = name + member __.Type = typ override x.ToString() = x.EnclosingTypeRef.ToString() + "::" + x.Name type ILMethodSpec(methodRef: ILMethodRef, enclosingType: ILType, methodInst: ILGenericArgs) = - member _.MethodRef = methodRef - member _.EnclosingType = enclosingType - member _.GenericArgs = methodInst + member __.MethodRef = methodRef + member __.EnclosingType = enclosingType + member __.GenericArgs = methodInst member x.Name = x.MethodRef.Name member x.CallingConv = x.MethodRef.CallingConv member x.GenericArity = x.MethodRef.GenericArity @@ -2192,11 +2192,11 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader override x.ToString() = x.MethodRef.ToString() + "(...)" type ILFieldSpec(fieldRef: ILFieldRef, enclosingType: ILType) = - member _.FieldRef = fieldRef - member _.EnclosingType = enclosingType - member _.FormalType = fieldRef.Type - member _.Name = fieldRef.Name - member _.EnclosingTypeRef = fieldRef.EnclosingTypeRef + member __.FieldRef = fieldRef + member __.EnclosingType = enclosingType + member __.FormalType = fieldRef.Type + member __.Name = fieldRef.Name + member __.EnclosingTypeRef = fieldRef.EnclosingTypeRef override x.ToString() = x.FieldRef.ToString() type ILCodeLabel = int @@ -2471,7 +2471,7 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader abstract Entries: ILCustomAttribute[] type ILCustomAttrsStatics() = - static let empty = { new ILCustomAttrs with member _.Entries = [| |] } + static let empty = { new ILCustomAttrs with member __.Entries = [| |] } static member Empty = empty [] @@ -2595,8 +2595,8 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader lmap.[key] <- [| y |] lmap - member _.Entries = larr.Force() - member _.FindByName nm = getmap().[nm] + member __.Entries = larr.Force() + member __.FindByName nm = getmap().[nm] member x.FindByNameAndArity (nm,arity) = x.FindByName nm |> Array.filter (fun x -> x.Parameters.Length = arity) member x.TryFindUniqueByName name = match x.FindByName(name) with @@ -2808,10 +2808,10 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader lmap.[key] <- ltd lmap - member _.Entries = + member __.Entries = [| for (_,_,td) in larr.Force() -> td.Force() |] - member _.TryFindByName (nsp,nm) = + member __.TryFindByName (nsp,nm) = let tdefs = getmap() let key = (nsp,nm) if tdefs.ContainsKey key then @@ -2828,8 +2828,8 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader and ILNestedExportedTypesAndForwarders(larr:Lazy) = let lmap = lazy ((Map.empty, larr.Force()) ||> Array.fold (fun m x -> m.Add(x.Name,x))) - member _.Entries = larr.Force() - member _.TryFindByName nm = lmap.Force().TryFind nm + member __.Entries = larr.Force() + member __.TryFindByName nm = lmap.Force().TryFind nm and [] ILExportedTypeOrForwarder = @@ -2851,8 +2851,8 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader let key = ltd.Namespace, ltd.Name lmap.[key] <- ltd lmap - member _.Entries = larr.Force() - member _.TryFindByName (nsp,nm) = match getmap().TryGetValue ((nsp,nm)) with true,v -> Some v | false, _ -> None + member __.Entries = larr.Force() + member __.TryFindByName (nsp,nm) = match getmap().TryGetValue ((nsp,nm)) with true,v -> Some v | false, _ -> None [] type ILResourceAccess = @@ -2873,7 +2873,7 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader override x.ToString() = "resource " + x.Name type ILResources(larr: Lazy) = - member _.Entries = larr.Force() + member __.Entries = larr.Force() type ILAssemblyManifest = { Name: string @@ -2961,13 +2961,13 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader typ_IntPtr: ILType typ_UIntPtr: ILType systemRuntimeScopeRef: ILScopeRef } - override _.ToString() = "" + override __.ToString() = "" [] [] type ILTableName(idx: int) = - member _.Index = idx + member __.Index = idx static member FromIndex n = ILTableName n module ILTableNames = @@ -3042,21 +3042,21 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader [] type TypeDefOrRefOrSpecTag(tag: int32) = - member _.Tag = tag + member __.Tag = tag static member TypeDef = TypeDefOrRefOrSpecTag 0x00 static member TypeRef = TypeDefOrRefOrSpecTag 0x01 static member TypeSpec = TypeDefOrRefOrSpecTag 0x2 [] type HasConstantTag(tag: int32) = - member _.Tag = tag + member __.Tag = tag static member FieldDef = HasConstantTag 0x0 static member ParamDef = HasConstantTag 0x1 static member Property = HasConstantTag 0x2 [] type HasCustomAttributeTag(tag: int32) = - member _.Tag = tag + member __.Tag = tag static member MethodDef = HasCustomAttributeTag 0x0 static member FieldDef = HasCustomAttributeTag 0x1 static member TypeRef = HasCustomAttributeTag 0x2 @@ -3082,20 +3082,20 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader [] type HasFieldMarshalTag(tag: int32) = - member _.Tag = tag + member __.Tag = tag static member FieldDef = HasFieldMarshalTag 0x00 static member ParamDef = HasFieldMarshalTag 0x01 [] type HasDeclSecurityTag(tag: int32) = - member _.Tag = tag + member __.Tag = tag static member TypeDef = HasDeclSecurityTag 0x00 static member MethodDef = HasDeclSecurityTag 0x01 static member Assembly = HasDeclSecurityTag 0x02 [] type MemberRefParentTag(tag: int32) = - member _.Tag = tag + member __.Tag = tag static member TypeRef = MemberRefParentTag 0x01 static member ModuleRef = MemberRefParentTag 0x02 static member MethodDef = MemberRefParentTag 0x03 @@ -3103,39 +3103,39 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader [] type HasSemanticsTag(tag: int32) = - member _.Tag = tag + member __.Tag = tag static member Event = HasSemanticsTag 0x00 static member Property = HasSemanticsTag 0x01 [] type MethodDefOrRefTag(tag: int32) = - member _.Tag = tag + member __.Tag = tag static member MethodDef = MethodDefOrRefTag 0x00 static member MemberRef = MethodDefOrRefTag 0x01 static member MethodSpec = MethodDefOrRefTag 0x02 [] type MemberForwardedTag(tag: int32) = - member _.Tag = tag + member __.Tag = tag static member FieldDef = MemberForwardedTag 0x00 static member MethodDef = MemberForwardedTag 0x01 [] type ImplementationTag(tag: int32) = - member _.Tag = tag + member __.Tag = tag static member File = ImplementationTag 0x00 static member AssemblyRef = ImplementationTag 0x01 static member ExportedType = ImplementationTag 0x02 [] type CustomAttributeTypeTag(tag: int32) = - member _.Tag = tag + member __.Tag = tag static member MethodDef = CustomAttributeTypeTag 0x02 static member MemberRef = CustomAttributeTypeTag 0x03 [] type ResolutionScopeTag(tag: int32) = - member _.Tag = tag + member __.Tag = tag static member Module = ResolutionScopeTag 0x00 static member ModuleRef = ResolutionScopeTag 0x01 static member AssemblyRef = ResolutionScopeTag 0x02 @@ -3143,7 +3143,7 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader [] type TypeOrMethodDefTag(tag: int32) = - member _.Tag = tag + member __.Tag = tag static member TypeDef = TypeOrMethodDefTag 0x00 static member MethodDef = TypeOrMethodDefTag 0x01 @@ -4046,10 +4046,10 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader type ByteFile(bytes:byte[]) = - member _.Bytes = bytes - member _.ReadByte addr = bytes.[addr] - member _.ReadBytes addr len = Array.sub bytes addr len - member _.CountUtf8String addr = + member __.Bytes = bytes + member __.ReadByte addr = bytes.[addr] + member __.ReadBytes addr len = Array.sub bytes addr len + member __.CountUtf8String addr = let mutable p = addr while bytes.[p] <> 0uy do p <- p + 1 @@ -4399,14 +4399,14 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader let td = ltd.Force() (td.Name,ltd) - let emptyILEvents = { new ILEventDefs with member _.Entries = [| |] } - let emptyILProperties = { new ILPropertyDefs with member _.Entries = [| |] } + let emptyILEvents = { new ILEventDefs with member __.Entries = [| |] } + let emptyILProperties = { new ILPropertyDefs with member __.Entries = [| |] } let emptyILTypeDefs = ILTypeDefs (lazy [| |]) - let emptyILCustomAttrs = { new ILCustomAttrs with member _.Entries = [| |] } - let mkILCustomAttrs x = { new ILCustomAttrs with member _.Entries = x } - let emptyILMethodImpls = { new ILMethodImplDefs with member _.Entries = [| |] } + let emptyILCustomAttrs = { new ILCustomAttrs with member __.Entries = [| |] } + let mkILCustomAttrs x = { new ILCustomAttrs with member __.Entries = x } + let emptyILMethodImpls = { new ILMethodImplDefs with member __.Entries = [| |] } let emptyILMethods = ILMethodDefs (lazy [| |]) - let emptyILFields = { new ILFieldDefs with member _.Entries = [| |] } + let emptyILFields = { new ILFieldDefs with member __.Entries = [| |] } let mkILTy boxed tspec = match boxed with @@ -5469,7 +5469,7 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader and seekReadFields (numtypars, hasLayout) fidx1 fidx2 = { new ILFieldDefs with - member _.Entries = + member __.Entries = [| for i = fidx1 to fidx2 - 1 do yield seekReadField (numtypars, hasLayout) i |] } @@ -5749,7 +5749,7 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader and seekReadMethodImpls numtypars tidx = { new ILMethodImplDefs with - member _.Entries = + member __.Entries = let mimpls = seekReadIndexedRows (getNumRows ILTableNames.MethodImpl,seekReadMethodImplRow,(fun (a,_,_) -> a),simpleIndexCompare tidx,isSorted ILTableNames.MethodImpl,(fun (_,b,c) -> b,c)) mimpls |> Array.map (fun (b,c) -> { OverrideBy= @@ -5798,7 +5798,7 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader and seekReadEvents numtypars tidx = { new ILEventDefs with - member _.Entries = + member __.Entries = match seekReadOptionalIndexedRow (getNumRows ILTableNames.EventMap,(fun i -> i, seekReadEventMapRow i),(fun (_,row) -> fst row),compare tidx,false,(fun (i,row) -> (i,snd row))) with | None -> [| |] | Some (rowNum,beginEventIdx) -> @@ -5837,7 +5837,7 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader and seekReadProperties numtypars tidx = { new ILPropertyDefs with - member _.Entries = + member __.Entries = match seekReadOptionalIndexedRow (getNumRows ILTableNames.PropertyMap,(fun i -> i, seekReadPropertyMapRow i),(fun (_,row) -> fst row),compare tidx,false,(fun (i,row) -> (i,snd row))) with | None -> [| |] | Some (rowNum,beginPropIdx) -> @@ -5853,7 +5853,7 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader and seekReadCustomAttrs idx = { new ILCustomAttrs with - member _.Entries = + member __.Entries = seekReadIndexedRows (getNumRows ILTableNames.CustomAttribute, seekReadCustomAttributeRow,(fun (a,_,_) -> a), hcaCompare idx, @@ -5981,10 +5981,10 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader let ilModule = seekReadModule (subsys, (subsysMajor, subsysMinor), useHighEntropyVA, ilOnly, only32, is32bitpreferred, only64, platform, isDll, alignVirt, alignPhys, imageBaseReal, ilMetadataVersion) 1 let ilAssemblyRefs = [ for i in 1 .. getNumRows ILTableNames.AssemblyRef do yield seekReadAssemblyRef i ] - member _.Bytes = is.Bytes - member _.ILGlobals = ilg - member _.ILModuleDef = ilModule - member _.ILAssemblyRefs = ilAssemblyRefs + member __.Bytes = is.Bytes + member __.ILGlobals = ilg + member __.ILModuleDef = ilModule + member __.ILAssemblyRefs = ilAssemblyRefs let sigptr_get_byte (bytes: byte[]) sigptr = int bytes.[sigptr], sigptr + 1 @@ -6617,7 +6617,7 @@ namespace ProviderImplementation.ProvidedTypes // on object identity. type TxTable<'T2>() = let tab = Dictionary() - member _.Get inp f = + member __.Get inp f = if tab.ContainsKey inp then tab.[inp] else @@ -6625,17 +6625,17 @@ namespace ProviderImplementation.ProvidedTypes tab.[inp] <- res res - member _.ContainsKey inp = tab.ContainsKey inp + member __.ContainsKey inp = tab.ContainsKey inp let instParameterInfo inst (inp: ParameterInfo) = { new ParameterInfo() with - override _.Name = inp.Name - override _.ParameterType = inp.ParameterType |> instType inst - override _.Attributes = inp.Attributes - override _.RawDefaultValue = inp.RawDefaultValue - override _.GetCustomAttributesData() = inp.GetCustomAttributesData() - override _.ToString() = inp.ToString() + "@inst" } + override __.Name = inp.Name + override __.ParameterType = inp.ParameterType |> instType inst + override __.Attributes = inp.Attributes + override __.RawDefaultValue = inp.RawDefaultValue + override __.GetCustomAttributesData() = inp.GetCustomAttributesData() + override __.ToString() = inp.ToString() + "@inst" } let hashILParameterTypes (ps: ILParameters) = // This hash code doesn't need to be very good as hashing by name is sufficient to give decent hash granularity @@ -6717,22 +6717,22 @@ namespace ProviderImplementation.ProvidedTypes let dty = gmd.DeclaringType let dinst = (if dty.IsGenericType then dty.GetGenericArguments() else [| |]) - override _.Attributes = gmd.Attributes - override _.Name = gmd.Name - override _.DeclaringType = dty - override _.MemberType = gmd.MemberType - - override _.GetParameters() = gmd.GetParameters() |> Array.map (instParameterInfo (dinst, gargs)) - override _.CallingConvention = gmd.CallingConvention - override _.ReturnType = gmd.ReturnType |> instType (dinst, gargs) - override _.GetGenericMethodDefinition() = gmd - override _.IsGenericMethod = gmd.IsGenericMethod - override _.GetGenericArguments() = gargs - override _.MetadataToken = gmd.MetadataToken - - override _.GetCustomAttributesData() = gmd.GetCustomAttributesData() - override _.MakeGenericMethod(typeArgs) = MethodSymbol2(gmd, typeArgs) :> MethodInfo - override _.GetHashCode() = gmd.MetadataToken + override __.Attributes = gmd.Attributes + override __.Name = gmd.Name + override __.DeclaringType = dty + override __.MemberType = gmd.MemberType + + override __.GetParameters() = gmd.GetParameters() |> Array.map (instParameterInfo (dinst, gargs)) + override __.CallingConvention = gmd.CallingConvention + override __.ReturnType = gmd.ReturnType |> instType (dinst, gargs) + override __.GetGenericMethodDefinition() = gmd + override __.IsGenericMethod = gmd.IsGenericMethod + override __.GetGenericArguments() = gargs + override __.MetadataToken = gmd.MetadataToken + + override __.GetCustomAttributesData() = gmd.GetCustomAttributesData() + override __.MakeGenericMethod(typeArgs) = MethodSymbol2(gmd, typeArgs) :> MethodInfo + override __.GetHashCode() = gmd.MetadataToken override this.Equals(that:obj) = match that with | :? MethodInfo as that -> this.MetadataToken = that.MetadataToken && eqTypes dty that.DeclaringType && lengthsEqAndForall2 (gmd.GetGenericArguments()) (that.GetGenericArguments()) (=) @@ -6747,10 +6747,10 @@ namespace ProviderImplementation.ProvidedTypes override this.GetMethodImplementationFlags() = notRequired this "GetMethodImplementationFlags" this.Name override this.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired this "Invoke" this.Name override this.ReflectedType = notRequired this "ReflectedType" this.Name - override _.GetCustomAttributes(_inherited) = emptyAttributes - override _.GetCustomAttributes(_attributeType, _inherited) = emptyAttributes + override __.GetCustomAttributes(_inherited) = emptyAttributes + override __.GetCustomAttributes(_attributeType, _inherited) = emptyAttributes - override _.ToString() = gmd.ToString() + "@inst" + override __.ToString() = gmd.ToString() + "@inst" /// Represents a constructor in an instantiated type @@ -6758,16 +6758,16 @@ namespace ProviderImplementation.ProvidedTypes inherit ConstructorInfo() let gps = ((if declTy.IsGenericType then declTy.GetGenericArguments() else [| |]), [| |]) - override _.Name = ".ctor" - override _.Attributes = inp.Attributes - override _.MemberType = MemberTypes.Constructor - override _.DeclaringType = declTy + override __.Name = ".ctor" + override __.Attributes = inp.Attributes + override __.MemberType = MemberTypes.Constructor + override __.DeclaringType = declTy - override _.GetParameters() = inp.GetParameters() |> Array.map (instParameterInfo gps) - override _.GetCustomAttributesData() = inp.GetCustomAttributesData() - override _.MetadataToken = inp.MetadataToken + override __.GetParameters() = inp.GetParameters() |> Array.map (instParameterInfo gps) + override __.GetCustomAttributesData() = inp.GetCustomAttributesData() + override __.MetadataToken = inp.MetadataToken - override _.GetHashCode() = inp.GetHashCode() + override __.GetHashCode() = inp.GetHashCode() override this.Equals(that:obj) = match that with | :? ConstructorInfo as that -> this.MetadataToken = that.MetadataToken && eqTypes declTy that.DeclaringType @@ -6782,7 +6782,7 @@ namespace ProviderImplementation.ProvidedTypes override this.GetCustomAttributes(_inherited) = notRequired this "GetCustomAttributes" this.Name override this.GetCustomAttributes(_attributeType, _inherited) = notRequired this "GetCustomAttributes" this.Name - override _.ToString() = sprintf "tgt constructor(...) in type %s" declTy.FullName + override __.ToString() = sprintf "tgt constructor(...) in type %s" declTy.FullName static member Make (declTy: Type) md = ConstructorSymbol (declTy, md) :> ConstructorInfo /// Represents a method in an instantiated type @@ -6792,19 +6792,19 @@ namespace ProviderImplementation.ProvidedTypes let gps2 = inp.GetGenericArguments() let gps = (gps1, gps2) - override _.Name = inp.Name - override _.DeclaringType = declTy - override _.MemberType = inp.MemberType - override _.Attributes = inp.Attributes - override _.GetParameters() = inp.GetParameters() |> Array.map (instParameterInfo gps) - override _.CallingConvention = inp.CallingConvention - override _.ReturnType = inp.ReturnType |> instType gps - override _.GetCustomAttributesData() = inp.GetCustomAttributesData() - override _.GetGenericArguments() = gps2 - override _.IsGenericMethod = (gps2.Length <> 0) - override t.IsGenericMethodDefinition = t.IsGenericMethod - - override _.GetHashCode() = inp.GetHashCode() + override __.Name = inp.Name + override __.DeclaringType = declTy + override __.MemberType = inp.MemberType + override __.Attributes = inp.Attributes + override __.GetParameters() = inp.GetParameters() |> Array.map (instParameterInfo gps) + override __.CallingConvention = inp.CallingConvention + override __.ReturnType = inp.ReturnType |> instType gps + override __.GetCustomAttributesData() = inp.GetCustomAttributesData() + override __.GetGenericArguments() = gps2 + override __.IsGenericMethod = (gps2.Length <> 0) + override __.IsGenericMethodDefinition = __.IsGenericMethod + + override __.GetHashCode() = inp.GetHashCode() override this.Equals(that:obj) = match that with | :? MethodInfo as that -> this.MetadataToken = that.MetadataToken && eqTypes this.DeclaringType that.DeclaringType @@ -6812,7 +6812,7 @@ namespace ProviderImplementation.ProvidedTypes override this.MakeGenericMethod(args) = MethodSymbol2(this, args) :> MethodInfo - override _.MetadataToken = inp.MetadataToken + override __.MetadataToken = inp.MetadataToken override this.MethodHandle = notRequired this "MethodHandle" this.Name override this.ReturnParameter = notRequired this "ReturnParameter" this.Name @@ -6825,7 +6825,7 @@ namespace ProviderImplementation.ProvidedTypes override this.GetCustomAttributes(_inherited) = notRequired this "GetCustomAttributes" this.Name override this.GetCustomAttributes(_attributeType, _inherited) = notRequired this "GetCustomAttributes" this.Name - override _.ToString() = sprintf "tgt method %s(...) in type %s" inp.Name declTy.FullName + override __.ToString() = sprintf "tgt method %s(...) in type %s" inp.Name declTy.FullName static member Make (declTy: Type) md = MethodSymbol (declTy, md) :> MethodInfo @@ -6834,21 +6834,21 @@ namespace ProviderImplementation.ProvidedTypes inherit PropertyInfo() let gps = ((if declTy.IsGenericType then declTy.GetGenericArguments() else [| |]), [| |]) - override _.Name = inp.Name - override _.Attributes = inp.Attributes - override _.MemberType = MemberTypes.Property - override _.DeclaringType = declTy - - override _.PropertyType = inp.PropertyType |> instType gps - override _.GetGetMethod(nonPublic) = inp.GetGetMethod(nonPublic) |> Option.ofObj |> Option.map (MethodSymbol.Make declTy) |> Option.toObj - override _.GetSetMethod(nonPublic) = inp.GetSetMethod(nonPublic) |> Option.ofObj |> Option.map (MethodSymbol.Make declTy) |> Option.toObj - override _.GetIndexParameters() = inp.GetIndexParameters() |> Array.map (instParameterInfo gps) - override _.CanRead = inp.GetGetMethod(false) |> isNull |> not - override _.CanWrite = inp.GetSetMethod(false) |> isNull |> not - override _.GetCustomAttributesData() = inp.GetCustomAttributesData() - override _.MetadataToken = inp.MetadataToken - - override _.GetHashCode() = inp.GetHashCode() + override __.Name = inp.Name + override __.Attributes = inp.Attributes + override __.MemberType = MemberTypes.Property + override __.DeclaringType = declTy + + override __.PropertyType = inp.PropertyType |> instType gps + override __.GetGetMethod(nonPublic) = inp.GetGetMethod(nonPublic) |> Option.ofObj |> Option.map (MethodSymbol.Make declTy) |> Option.toObj + override __.GetSetMethod(nonPublic) = inp.GetSetMethod(nonPublic) |> Option.ofObj |> Option.map (MethodSymbol.Make declTy) |> Option.toObj + override __.GetIndexParameters() = inp.GetIndexParameters() |> Array.map (instParameterInfo gps) + override __.CanRead = inp.GetGetMethod(false) |> isNull |> not + override __.CanWrite = inp.GetSetMethod(false) |> isNull |> not + override __.GetCustomAttributesData() = inp.GetCustomAttributesData() + override __.MetadataToken = inp.MetadataToken + + override __.GetHashCode() = inp.GetHashCode() override this.Equals(that:obj) = match that with | :? PropertyInfo as that -> this.MetadataToken = that.MetadataToken && eqTypes this.DeclaringType that.DeclaringType @@ -6862,7 +6862,7 @@ namespace ProviderImplementation.ProvidedTypes override this.GetCustomAttributes(_attributeType, _inherited) = notRequired this "GetCustomAttributes" this.Name override this.IsDefined(_attributeType, _inherited) = notRequired this "IsDefined" this.Name - override _.ToString() = sprintf "tgt property %s(...) in type %s" inp.Name declTy.Name + override __.ToString() = sprintf "tgt property %s(...) in type %s" inp.Name declTy.Name static member Make (declTy: Type) md = PropertySymbol (declTy, md) :> PropertyInfo @@ -6871,18 +6871,18 @@ namespace ProviderImplementation.ProvidedTypes inherit EventInfo() let gps = if declTy.IsGenericType then declTy.GetGenericArguments() else [| |] - override _.Name = inp.Name - override _.Attributes = inp.Attributes - override _.MemberType = MemberTypes.Event - override _.DeclaringType = declTy + override __.Name = inp.Name + override __.Attributes = inp.Attributes + override __.MemberType = MemberTypes.Event + override __.DeclaringType = declTy - override _.EventHandlerType = inp.EventHandlerType |> instType (gps, [| |]) - override _.GetAddMethod(nonPublic) = inp.GetAddMethod(nonPublic) |> Option.ofObj |> Option.map (MethodSymbol.Make declTy) |> Option.toObj - override _.GetRemoveMethod(nonPublic) = inp.GetRemoveMethod(nonPublic) |> Option.ofObj |> Option.map (MethodSymbol.Make declTy) |> Option.toObj - override _.GetCustomAttributesData() = inp.GetCustomAttributesData() - override _.MetadataToken = inp.MetadataToken + override __.EventHandlerType = inp.EventHandlerType |> instType (gps, [| |]) + override __.GetAddMethod(nonPublic) = inp.GetAddMethod(nonPublic) |> Option.ofObj |> Option.map (MethodSymbol.Make declTy) |> Option.toObj + override __.GetRemoveMethod(nonPublic) = inp.GetRemoveMethod(nonPublic) |> Option.ofObj |> Option.map (MethodSymbol.Make declTy) |> Option.toObj + override __.GetCustomAttributesData() = inp.GetCustomAttributesData() + override __.MetadataToken = inp.MetadataToken - override _.GetHashCode() = inp.GetHashCode() + override __.GetHashCode() = inp.GetHashCode() override this.Equals(that:obj) = match that with | :? EventInfo as that -> this.MetadataToken = that.MetadataToken && eqTypes this.DeclaringType that.DeclaringType @@ -6894,7 +6894,7 @@ namespace ProviderImplementation.ProvidedTypes override this.GetCustomAttributes(_attributeType, _inherited) = notRequired this "GetCustomAttributes" this.Name override this.IsDefined(_attributeType, _inherited) = notRequired this "IsDefined" this.Name - override _.ToString() = sprintf "tgt event %s(...) in type %s" inp.Name declTy.FullName + override __.ToString() = sprintf "tgt event %s(...) in type %s" inp.Name declTy.FullName static member Make (declTy: Type) md = EventSymbol (declTy, md) :> EventInfo @@ -6903,17 +6903,17 @@ namespace ProviderImplementation.ProvidedTypes inherit FieldInfo() let gps = if declTy.IsGenericType then declTy.GetGenericArguments() else [| |] - override _.Name = inp.Name - override _.Attributes = inp.Attributes - override _.MemberType = MemberTypes.Field - override _.DeclaringType = declTy + override __.Name = inp.Name + override __.Attributes = inp.Attributes + override __.MemberType = MemberTypes.Field + override __.DeclaringType = declTy - override _.FieldType = inp.FieldType |> instType (gps, [| |]) - override _.GetRawConstantValue() = inp.GetRawConstantValue() - override _.GetCustomAttributesData() = inp.GetCustomAttributesData() - override _.MetadataToken = inp.MetadataToken + override __.FieldType = inp.FieldType |> instType (gps, [| |]) + override __.GetRawConstantValue() = inp.GetRawConstantValue() + override __.GetCustomAttributesData() = inp.GetCustomAttributesData() + override __.MetadataToken = inp.MetadataToken - override _.GetHashCode() = inp.GetHashCode() + override __.GetHashCode() = inp.GetHashCode() override this.Equals(that:obj) = match that with | :? FieldInfo as that -> this.MetadataToken = that.MetadataToken && eqTypes this.DeclaringType that.DeclaringType @@ -6927,7 +6927,7 @@ namespace ProviderImplementation.ProvidedTypes override this.GetValue(_obj) = notRequired this "GetValue" this.Name override this.FieldHandle = notRequired this "FieldHandle" this.Name - override _.ToString() = sprintf "tgt literal field %s(...) in type %s" inp.Name declTy.FullName + override __.ToString() = sprintf "tgt literal field %s(...) in type %s" inp.Name declTy.FullName static member Make (declTy: Type) md = FieldSymbol (declTy, md) :> FieldInfo @@ -6992,18 +6992,18 @@ namespace ProviderImplementation.ProvidedTypes elif this.IsGenericType then this.GetGenericTypeDefinition().Namespace else failwithf "unreachable, stack trace = %A" Environment.StackTrace - override _.GetArrayRank() = (match kind with TypeSymbolKind.Array n -> n | TypeSymbolKind.SDArray -> 1 | _ -> failwithf "non-array type") - override _.IsValueTypeImpl() = this.IsGenericType && this.GetGenericTypeDefinition().IsValueType - override _.IsArrayImpl() = (match kind with TypeSymbolKind.Array _ | TypeSymbolKind.SDArray -> true | _ -> false) - override _.IsByRefImpl() = (match kind with TypeSymbolKind.ByRef _ -> true | _ -> false) - override _.IsPointerImpl() = (match kind with TypeSymbolKind.Pointer _ -> true | _ -> false) - override _.IsPrimitiveImpl() = false - override _.IsGenericType = (match kind with TypeSymbolKind.TargetGeneric _ | TypeSymbolKind.OtherGeneric _ -> true | _ -> false) - override _.GetGenericArguments() = (match kind with TypeSymbolKind.TargetGeneric _ | TypeSymbolKind.OtherGeneric _ -> typeArgs | _ -> [| |]) - override _.GetGenericTypeDefinition() = (match kind with TypeSymbolKind.TargetGeneric e -> (e :> Type) | TypeSymbolKind.OtherGeneric gtd -> gtd | _ -> failwithf "non-generic type") - override _.IsCOMObjectImpl() = false - override _.HasElementTypeImpl() = (match kind with TypeSymbolKind.TargetGeneric _ | TypeSymbolKind.OtherGeneric _ -> false | _ -> true) - override _.GetElementType() = (match kind,typeArgs with (TypeSymbolKind.Array _ | TypeSymbolKind.SDArray | TypeSymbolKind.ByRef | TypeSymbolKind.Pointer),[| e |] -> e | _ -> failwithf "%A, %A: not an array, pointer or byref type" kind typeArgs) + override __.GetArrayRank() = (match kind with TypeSymbolKind.Array n -> n | TypeSymbolKind.SDArray -> 1 | _ -> failwithf "non-array type") + override __.IsValueTypeImpl() = this.IsGenericType && this.GetGenericTypeDefinition().IsValueType + override __.IsArrayImpl() = (match kind with TypeSymbolKind.Array _ | TypeSymbolKind.SDArray -> true | _ -> false) + override __.IsByRefImpl() = (match kind with TypeSymbolKind.ByRef _ -> true | _ -> false) + override __.IsPointerImpl() = (match kind with TypeSymbolKind.Pointer _ -> true | _ -> false) + override __.IsPrimitiveImpl() = false + override __.IsGenericType = (match kind with TypeSymbolKind.TargetGeneric _ | TypeSymbolKind.OtherGeneric _ -> true | _ -> false) + override __.GetGenericArguments() = (match kind with TypeSymbolKind.TargetGeneric _ | TypeSymbolKind.OtherGeneric _ -> typeArgs | _ -> [| |]) + override __.GetGenericTypeDefinition() = (match kind with TypeSymbolKind.TargetGeneric e -> (e :> Type) | TypeSymbolKind.OtherGeneric gtd -> gtd | _ -> failwithf "non-generic type") + override __.IsCOMObjectImpl() = false + override __.HasElementTypeImpl() = (match kind with TypeSymbolKind.TargetGeneric _ | TypeSymbolKind.OtherGeneric _ -> false | _ -> true) + override __.GetElementType() = (match kind,typeArgs with (TypeSymbolKind.Array _ | TypeSymbolKind.SDArray | TypeSymbolKind.ByRef | TypeSymbolKind.Pointer),[| e |] -> e | _ -> failwithf "%A, %A: not an array, pointer or byref type" kind typeArgs) override x.Module = x.Assembly.ManifestModule @@ -7021,8 +7021,8 @@ namespace ProviderImplementation.ProvidedTypes override this.IsSubclassOf(otherTy: Type) = isSubclassOf this otherTy - member _.Kind = kind - member _.Args = typeArgs + member __.Kind = kind + member __.Args = typeArgs override this.GetConstructors bindingFlags = match kind with @@ -7169,14 +7169,14 @@ namespace ProviderImplementation.ProvidedTypes override this.UnderlyingSystemType = (this :> Type) - override _.GetCustomAttributesData() = ([| |] :> IList<_>) + override __.GetCustomAttributesData() = ([| |] :> IList<_>) override this.GetMembers _bindingFlags = notRequired this "GetMembers" this.Name override this.GetInterface(_name, _ignoreCase) = notRequired this "GetInterface" this.Name override this.GetInterfaces() = notRequired this "GetInterfaces" this.Name - override _.GetCustomAttributes(_inherit) = emptyAttributes - override _.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes - override _.IsDefined(_attributeType, _inherit) = false + override __.GetCustomAttributes(_inherit) = emptyAttributes + override __.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes + override __.IsDefined(_attributeType, _inherit) = false override this.MemberType = notRequired this "MemberType" this.Name override this.GetMember(_name,_mt,_bindingFlags) = notRequired this "GetMember" this.Name @@ -7204,10 +7204,10 @@ namespace ProviderImplementation.ProvidedTypes and txCustomAttributesDatum (inp: ILCustomAttribute) = let args, namedArgs = decodeILCustomAttribData ilGlobals inp { new CustomAttributeData () with - member _.Constructor = txILConstructorRef inp.Method.MethodRef - member _.ConstructorArguments = [| for arg in args -> txCustomAttributesArg arg |] :> IList<_> + member __.Constructor = txILConstructorRef inp.Method.MethodRef + member __.ConstructorArguments = [| for arg in args -> txCustomAttributesArg arg |] :> IList<_> // Note, named arguments of custom attributes are not required by F# compiler on binding context elements. - member _.NamedArguments = [| |] :> IList<_> + member __.NamedArguments = [| |] :> IList<_> } and txCustomAttributesData (inp: ILCustomAttrs) = @@ -7219,11 +7219,11 @@ namespace ProviderImplementation.ProvidedTypes and txILParameter gps (inp: ILParameter) = { new ParameterInfo() with - override _.Name = StructOption.toObj inp.Name - override _.ParameterType = inp.ParameterType |> txILType gps - override _.RawDefaultValue = (match inp.Default with UNone -> null | USome v -> v) - override _.Attributes = inp.Attributes - override _.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData + override __.Name = StructOption.toObj inp.Name + override __.ParameterType = inp.ParameterType |> txILType gps + override __.RawDefaultValue = (match inp.Default with UNone -> null | USome v -> v) + override __.Attributes = inp.Attributes + override __.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData override x.ToString() = sprintf "tgt parameter %s" x.Name } @@ -7232,16 +7232,16 @@ namespace ProviderImplementation.ProvidedTypes let gps = if declTy.IsGenericType then declTy.GetGenericArguments() else [| |] { new ConstructorInfo() with - override _.Name = ".ctor" - override _.Attributes = inp.Attributes - override _.MemberType = MemberTypes.Constructor - override _.DeclaringType = declTy + override __.Name = ".ctor" + override __.Attributes = inp.Attributes + override __.MemberType = MemberTypes.Constructor + override __.DeclaringType = declTy - override _.GetParameters() = inp.Parameters |> Array.map (txILParameter (gps, [| |])) - override _.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData - override _.MetadataToken = inp.Token + override __.GetParameters() = inp.Parameters |> Array.map (txILParameter (gps, [| |])) + override __.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData + override __.MetadataToken = inp.Token - override _.GetHashCode() = inp.Token + override __.GetHashCode() = inp.Token override this.Equals(that:obj) = match that with @@ -7257,7 +7257,7 @@ namespace ProviderImplementation.ProvidedTypes override this.GetCustomAttributes(_inherited) = notRequired this "GetCustomAttributes" this.Name override this.GetCustomAttributes(_attributeType, _inherited) = notRequired this "GetCustomAttributes" this.Name - override _.ToString() = sprintf "tgt constructor(...) in type %s" declTy.FullName } + override __.ToString() = sprintf "tgt constructor(...) in type %s" declTy.FullName } /// Makes a method definition read from a binary available as a MethodInfo. Not all methods are implemented. and txILMethodDef (declTy: Type) (inp: ILMethodDef) = @@ -7265,19 +7265,19 @@ namespace ProviderImplementation.ProvidedTypes let rec gps2 = inp.GenericParams |> Array.mapi (fun i gp -> txILGenericParam (fun () -> gps, gps2) (i + gps.Length) gp) { new MethodInfo() with - override _.Name = inp.Name - override _.DeclaringType = declTy - override _.MemberType = MemberTypes.Method - override _.Attributes = inp.Attributes - override _.GetParameters() = inp.Parameters |> Array.map (txILParameter (gps, gps2)) - override _.CallingConvention = if inp.IsStatic then CallingConventions.Standard else CallingConventions.HasThis ||| CallingConventions.Standard - override _.ReturnType = inp.Return.Type |> txILType (gps, gps2) - override _.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData - override _.GetGenericArguments() = gps2 - override _.IsGenericMethod = (gps2.Length <> 0) - override t.IsGenericMethodDefinition = t.IsGenericMethod + override __.Name = inp.Name + override __.DeclaringType = declTy + override __.MemberType = MemberTypes.Method + override __.Attributes = inp.Attributes + override __.GetParameters() = inp.Parameters |> Array.map (txILParameter (gps, gps2)) + override __.CallingConvention = if inp.IsStatic then CallingConventions.Standard else CallingConventions.HasThis ||| CallingConventions.Standard + override __.ReturnType = inp.Return.Type |> txILType (gps, gps2) + override __.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData + override __.GetGenericArguments() = gps2 + override __.IsGenericMethod = (gps2.Length <> 0) + override __.IsGenericMethodDefinition = __.IsGenericMethod - override _.GetHashCode() = inp.Token + override __.GetHashCode() = inp.Token override this.Equals(that:obj) = match that with @@ -7286,7 +7286,7 @@ namespace ProviderImplementation.ProvidedTypes override this.MakeGenericMethod(args) = MethodSymbol2(this, args) :> MethodInfo - override _.MetadataToken = inp.Token + override __.MetadataToken = inp.Token // unused override this.MethodHandle = notRequired this "MethodHandle" this.Name @@ -7300,28 +7300,28 @@ namespace ProviderImplementation.ProvidedTypes override this.GetCustomAttributes(_inherited) = notRequired this "GetCustomAttributes" this.Name override this.GetCustomAttributes(_attributeType, _inherited) = notRequired this "GetCustomAttributes" this.Name - override _.ToString() = sprintf "tgt method %s(...) in type %s" inp.Name declTy.FullName } + override __.ToString() = sprintf "tgt method %s(...) in type %s" inp.Name declTy.FullName } /// Makes a property definition read from a binary available as a PropertyInfo. Not all methods are implemented. and txILPropertyDef (declTy: Type) (inp: ILPropertyDef) = let gps = if declTy.IsGenericType then declTy.GetGenericArguments() else [| |] { new PropertyInfo() with - override _.Name = inp.Name - override _.Attributes = inp.Attributes - override _.MemberType = MemberTypes.Property - override _.DeclaringType = declTy + override __.Name = inp.Name + override __.Attributes = inp.Attributes + override __.MemberType = MemberTypes.Property + override __.DeclaringType = declTy - override _.PropertyType = inp.PropertyType |> txILType (gps, [| |]) - override _.GetGetMethod(_nonPublic) = inp.GetMethod |> Option.map (txILMethodRef declTy) |> Option.toObj - override _.GetSetMethod(_nonPublic) = inp.SetMethod |> Option.map (txILMethodRef declTy) |> Option.toObj - override _.GetIndexParameters() = inp.IndexParameters |> Array.map (txILParameter (gps, [| |])) - override _.CanRead = inp.GetMethod.IsSome - override _.CanWrite = inp.SetMethod.IsSome - override _.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData - override _.MetadataToken = inp.Token + override __.PropertyType = inp.PropertyType |> txILType (gps, [| |]) + override __.GetGetMethod(_nonPublic) = inp.GetMethod |> Option.map (txILMethodRef declTy) |> Option.toObj + override __.GetSetMethod(_nonPublic) = inp.SetMethod |> Option.map (txILMethodRef declTy) |> Option.toObj + override __.GetIndexParameters() = inp.IndexParameters |> Array.map (txILParameter (gps, [| |])) + override __.CanRead = inp.GetMethod.IsSome + override __.CanWrite = inp.SetMethod.IsSome + override __.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData + override __.MetadataToken = inp.Token - override _.GetHashCode() = inp.Token + override __.GetHashCode() = inp.Token override this.Equals(that:obj) = match that with @@ -7336,25 +7336,25 @@ namespace ProviderImplementation.ProvidedTypes override this.GetCustomAttributes(_attributeType, _inherited) = notRequired this "GetCustomAttributes" this.Name override this.IsDefined(_attributeType, _inherited) = notRequired this "IsDefined" this.Name - override _.ToString() = sprintf "tgt property %s(...) in type %s" inp.Name declTy.Name } + override __.ToString() = sprintf "tgt property %s(...) in type %s" inp.Name declTy.Name } /// Make an event definition read from a binary available as an EventInfo. Not all methods are implemented. and txILEventDef (declTy: Type) (inp: ILEventDef) = let gps = if declTy.IsGenericType then declTy.GetGenericArguments() else [| |] { new EventInfo() with - override _.Name = inp.Name - override _.Attributes = inp.Attributes - override _.MemberType = MemberTypes.Event - override _.DeclaringType = declTy + override __.Name = inp.Name + override __.Attributes = inp.Attributes + override __.MemberType = MemberTypes.Event + override __.DeclaringType = declTy - override _.EventHandlerType = inp.EventHandlerType |> txILType (gps, [| |]) - override _.GetAddMethod(_nonPublic) = inp.AddMethod |> txILMethodRef declTy - override _.GetRemoveMethod(_nonPublic) = inp.RemoveMethod |> txILMethodRef declTy - override _.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData - override _.MetadataToken = inp.Token + override __.EventHandlerType = inp.EventHandlerType |> txILType (gps, [| |]) + override __.GetAddMethod(_nonPublic) = inp.AddMethod |> txILMethodRef declTy + override __.GetRemoveMethod(_nonPublic) = inp.RemoveMethod |> txILMethodRef declTy + override __.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData + override __.MetadataToken = inp.Token - override _.GetHashCode() = inp.Token + override __.GetHashCode() = inp.Token override this.Equals(that:obj) = match that with @@ -7367,24 +7367,24 @@ namespace ProviderImplementation.ProvidedTypes override this.GetCustomAttributes(_attributeType, _inherited) = notRequired this "GetCustomAttributes" this.Name override this.IsDefined(_attributeType, _inherited) = notRequired this "IsDefined" this.Name - override _.ToString() = sprintf "tgt event %s(...) in type %s" inp.Name declTy.FullName } + override __.ToString() = sprintf "tgt event %s(...) in type %s" inp.Name declTy.FullName } /// Makes a field definition read from a binary available as a FieldInfo. Not all methods are implemented. and txILFieldDef (declTy: Type) (inp: ILFieldDef) = let gps = if declTy.IsGenericType then declTy.GetGenericArguments() else [| |] { new FieldInfo() with - override _.Name = inp.Name - override _.Attributes = inp.Attributes - override _.MemberType = MemberTypes.Field - override _.DeclaringType = declTy + override __.Name = inp.Name + override __.Attributes = inp.Attributes + override __.MemberType = MemberTypes.Field + override __.DeclaringType = declTy - override _.FieldType = inp.FieldType |> txILType (gps, [| |]) - override _.GetRawConstantValue() = match inp.LiteralValue with None -> null | Some v -> v - override _.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData - override _.MetadataToken = inp.Token + override __.FieldType = inp.FieldType |> txILType (gps, [| |]) + override __.GetRawConstantValue() = match inp.LiteralValue with None -> null | Some v -> v + override __.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData + override __.MetadataToken = inp.Token - override _.GetHashCode() = inp.Token + override __.GetHashCode() = inp.Token override this.Equals(that:obj) = match that with @@ -7399,7 +7399,7 @@ namespace ProviderImplementation.ProvidedTypes override this.GetValue(_obj) = notRequired this "GetValue" this.Name override this.FieldHandle = notRequired this "FieldHandle" this.Name - override _.ToString() = sprintf "tgt literal field %s(...) in type %s" inp.Name declTy.FullName } + override __.ToString() = sprintf "tgt literal field %s(...) in type %s" inp.Name declTy.FullName } /// Bind a reference to an assembly and txScopeRef(sref: ILScopeRef) = @@ -7459,19 +7459,19 @@ namespace ProviderImplementation.ProvidedTypes /// Convert an ILGenericParameterDef read from a binary to a System.Type. and txILGenericParam gpsf pos (inp: ILGenericParameterDef) = { new Type() with - override _.Name = inp.Name - override _.Assembly = (asm :> Assembly) - override _.FullName = inp.Name - override _.IsGenericParameter = true - override _.GenericParameterPosition = pos - override _.GetGenericParameterConstraints() = inp.Constraints |> Array.map (txILType (gpsf())) + override __.Name = inp.Name + override __.Assembly = (asm :> Assembly) + override __.FullName = inp.Name + override __.IsGenericParameter = true + override __.GenericParameterPosition = pos + override __.GetGenericParameterConstraints() = inp.Constraints |> Array.map (txILType (gpsf())) - override _.MemberType = enum 0 - override _.MetadataToken = inp.Token + override __.MemberType = enum 0 + override __.MetadataToken = inp.Token - override _.Namespace = null //notRequired this "Namespace" + override __.Namespace = null //notRequired this "Namespace" override this.DeclaringType = notRequired this "DeclaringType" this.Name - override _.BaseType = null //notRequired this "BaseType" this.Name + override __.BaseType = null //notRequired this "BaseType" this.Name override this.GetInterfaces() = notRequired this "GetInterfaces" this.Name override this.GetConstructors(_bindingFlags) = notRequired this "GetConstructors" this.Name @@ -7496,24 +7496,24 @@ namespace ProviderImplementation.ProvidedTypes override this.MakePointerType() = TypeSymbol(TypeSymbolKind.Pointer, [| this |]) :> Type override this.MakeByRefType() = TypeSymbol(TypeSymbolKind.ByRef, [| this |]) :> Type - override _.GetAttributeFlagsImpl() = TypeAttributes.Public ||| TypeAttributes.Class ||| TypeAttributes.Sealed + override __.GetAttributeFlagsImpl() = TypeAttributes.Public ||| TypeAttributes.Class ||| TypeAttributes.Sealed - override _.IsArrayImpl() = false - override _.IsByRefImpl() = false - override _.IsPointerImpl() = false - override _.IsPrimitiveImpl() = false - override _.IsCOMObjectImpl() = false - override _.IsGenericType = false - override _.IsGenericTypeDefinition = false + override __.IsArrayImpl() = false + override __.IsByRefImpl() = false + override __.IsPointerImpl() = false + override __.IsPrimitiveImpl() = false + override __.IsCOMObjectImpl() = false + override __.IsGenericType = false + override __.IsGenericTypeDefinition = false - override _.HasElementTypeImpl() = false + override __.HasElementTypeImpl() = false override this.UnderlyingSystemType = this - override _.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData + override __.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData override this.Equals(that:obj) = System.Object.ReferenceEquals (this, that) - override _.ToString() = sprintf "tgt generic param %s" inp.Name + override __.ToString() = sprintf "tgt generic param %s" inp.Name override this.AssemblyQualifiedName = "[" + this.Assembly.FullName + "]" + this.FullName @@ -7536,13 +7536,13 @@ namespace ProviderImplementation.ProvidedTypes let isNested = declTyOpt.IsSome do this.typeImpl <- this - override _.Name = inp.Name - override _.Assembly = (asm :> Assembly) - override _.DeclaringType = declTyOpt |> Option.toObj - override _.MemberType = if isNested then MemberTypes.NestedType else MemberTypes.TypeInfo - override _.MetadataToken = inp.Token + override __.Name = inp.Name + override __.Assembly = (asm :> Assembly) + override __.DeclaringType = declTyOpt |> Option.toObj + override __.MemberType = if isNested then MemberTypes.NestedType else MemberTypes.TypeInfo + override __.MetadataToken = inp.Token - override _.FullName = + override __.FullName = match declTyOpt with | None -> match inp.Namespace with @@ -7551,9 +7551,9 @@ namespace ProviderImplementation.ProvidedTypes | Some declTy -> declTy.FullName + "+" + inp.Name - override _.Namespace = inp.Namespace |> StructOption.toObj - override _.BaseType = inp.Extends |> Option.map (txILType (gps, [| |])) |> Option.toObj - override _.GetInterfaces() = inp.Implements |> Array.map (txILType (gps, [| |])) + override __.Namespace = inp.Namespace |> StructOption.toObj + override __.BaseType = inp.Extends |> Option.map (txILType (gps, [| |])) |> Option.toObj + override __.GetInterfaces() = inp.Implements |> Array.map (txILType (gps, [| |])) override this.GetConstructors(bindingFlags) = inp.Methods.Entries @@ -7640,40 +7640,40 @@ namespace ProviderImplementation.ProvidedTypes override this.MakePointerType() = TypeSymbol(TypeSymbolKind.Pointer, [| this |]) :> Type override this.MakeByRefType() = TypeSymbol(TypeSymbolKind.ByRef, [| this |]) :> Type - override _.GetAttributeFlagsImpl() = + override __.GetAttributeFlagsImpl() = let attr = TypeAttributes.Public ||| TypeAttributes.Class let attr = if inp.IsSealed then attr ||| TypeAttributes.Sealed else attr let attr = if inp.IsInterface then attr ||| TypeAttributes.Interface else attr let attr = if inp.IsSerializable then attr ||| TypeAttributes.Serializable else attr if isNested then adjustTypeAttributes isNested attr else attr - override _.IsValueTypeImpl() = inp.IsStructOrEnum + override __.IsValueTypeImpl() = inp.IsStructOrEnum - override _.IsEnum = + override __.IsEnum = match this.BaseType with | null -> false | bt -> bt.FullName = "System.Enum" || bt.IsEnum - override _.GetEnumUnderlyingType() = + override __.GetEnumUnderlyingType() = if this.IsEnum then txILType ([| |], [| |]) ilGlobals.typ_Int32 // TODO: in theory the assumption of "Int32" is not accurate for all enums, howver in practice .NET only uses enums with backing field Int32 else failwithf "not enum type" - override _.IsArrayImpl() = false - override _.IsByRefImpl() = false - override _.IsPointerImpl() = false - override _.IsPrimitiveImpl() = false - override _.IsCOMObjectImpl() = false - override _.IsGenericType = (gps.Length <> 0) - override _.IsGenericTypeDefinition = (gps.Length <> 0) - override _.HasElementTypeImpl() = false + override __.IsArrayImpl() = false + override __.IsByRefImpl() = false + override __.IsPointerImpl() = false + override __.IsPrimitiveImpl() = false + override __.IsCOMObjectImpl() = false + override __.IsGenericType = (gps.Length <> 0) + override __.IsGenericTypeDefinition = (gps.Length <> 0) + override __.HasElementTypeImpl() = false override this.UnderlyingSystemType = (this :> Type) - override _.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData + override __.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData override this.Equals(that:obj) = System.Object.ReferenceEquals (this, that) override this.Equals(that:Type) = System.Object.ReferenceEquals (this, that) - override _.GetHashCode() = inp.Token + override __.GetHashCode() = inp.Token override this.IsAssignableFrom(otherTy: Type) = isAssignableFrom this otherTy @@ -7683,7 +7683,7 @@ namespace ProviderImplementation.ProvidedTypes override this.ToString() = sprintf "tgt type %s" this.FullName - override _.GetGenericArguments() = gps + override __.GetGenericArguments() = gps override this.GetGenericTypeDefinition() = (this :> Type) override x.Module = x.Assembly.ManifestModule @@ -7697,18 +7697,18 @@ namespace ProviderImplementation.ProvidedTypes override this.GetElementType() = notRequired this "GetElementType" inp.Name override this.InvokeMember(_name, _invokeAttr, _binder, _target, _args, _modifiers, _culture, _namedParameters) = notRequired this "InvokeMember" inp.Name - member _.Metadata: ILTypeDef = inp - member _.MakeMethodInfo (declTy: Type) md = txILMethodDef declTy md - member _.MakeConstructorInfo (declTy: Type) md = txILConstructorDef declTy md - member _.MakePropertyInfo (declTy: Type) md = txILPropertyDef declTy md - member _.MakeEventInfo (declTy: Type) md = txILEventDef declTy md - member _.MakeFieldInfo (declTy: Type) md = txILFieldDef declTy md - member _.MakeNestedTypeInfo (declTy: Type) md = asm.TxILTypeDef (Some declTy) md + member __.Metadata: ILTypeDef = inp + member __.MakeMethodInfo (declTy: Type) md = txILMethodDef declTy md + member __.MakeConstructorInfo (declTy: Type) md = txILConstructorDef declTy md + member __.MakePropertyInfo (declTy: Type) md = txILPropertyDef declTy md + member __.MakeEventInfo (declTy: Type) md = txILEventDef declTy md + member __.MakeFieldInfo (declTy: Type) md = txILFieldDef declTy md + member __.MakeNestedTypeInfo (declTy: Type) md = asm.TxILTypeDef (Some declTy) md override this.GetEvents() = this.GetEvents(BindingFlags.Public ||| BindingFlags.Instance ||| BindingFlags.Static) // Needed because TypeDelegator.cs provides a delegting implementation of this, and we are self-delegating and TargetModule(location: string) = inherit Module() - override _.MetadataToken = hash location + override __.MetadataToken = hash location /// Implements System.Reflection.Assembly backed by .NET metadata provided by an ILModuleReader and TargetAssembly(ilGlobals, tryBindAssembly: ILAssemblyRef -> Choice, reader: ILModuleReader option, location: string) as asm = @@ -7753,9 +7753,9 @@ namespace ProviderImplementation.ProvidedTypes let types = lazy [| for td in getReader().ILModuleDef.TypeDefs.Entries -> txILTypeDef None td |] - override _.GetReferencedAssemblies() = [| for aref in getReader().ILAssemblyRefs -> aref.ToAssemblyName() |] + override __.GetReferencedAssemblies() = [| for aref in getReader().ILAssemblyRefs -> aref.ToAssemblyName() |] - override _.GetTypes () = types.Force() + override __.GetTypes () = types.Force() override x.GetType (nm:string) = if nm.Contains("+") then @@ -7771,14 +7771,14 @@ namespace ProviderImplementation.ProvidedTypes else x.TryBindType(UNone, nm) |> Option.toObj - override _.GetName() = getReader().ILModuleDef.ManifestOfAssembly.GetName() + override __.GetName() = getReader().ILModuleDef.ManifestOfAssembly.GetName() override x.FullName = x.GetName().ToString() - override _.Location = location - override _.ManifestModule = (manifestModule :> Module) + override __.Location = location + override __.ManifestModule = (manifestModule :> Module) - override _.ReflectionOnly = true + override __.ReflectionOnly = true override x.GetManifestResourceStream(resourceName:string) = let r = getReader().ILModuleDef.Resources.Entries |> Seq.find (fun r -> r.Name = resourceName) @@ -7786,11 +7786,11 @@ namespace ProviderImplementation.ProvidedTypes | ILResourceLocation.Local f -> new MemoryStream(f()) :> Stream | _ -> notRequired x "reading manifest resource %s from non-embedded location" resourceName - member _.TxILTypeDef declTyOpt inp = txILTypeDef declTyOpt inp + member __.TxILTypeDef declTyOpt inp = txILTypeDef declTyOpt inp - member _.Reader with get() = reader and set v = (if reader.IsSome then failwith "reader on TargetAssembly already set"); reader <- v + member __.Reader with get() = reader and set v = (if reader.IsSome then failwith "reader on TargetAssembly already set"); reader <- v - member _.TryBindType(nsp:string uoption, nm:string): Type option = + member __.TryBindType(nsp:string uoption, nm:string): Type option = match getReader().ILModuleDef.TypeDefs.TryFindByName(nsp, nm) with | Some td -> asm.TxILTypeDef None td |> Some | None -> @@ -7833,17 +7833,17 @@ namespace ProviderImplementation.ProvidedTypes let theTypesArray = lazy (theTypes.ToArray() |> Array.collect (function (ptds, None) -> Array.map (fun ptd -> (ptd :> Type)) ptds | _ -> [| |])) - override _.GetReferencedAssemblies() = [| |] //notRequired x "GetReferencedAssemblies" (assemblyName.ToString()) + override __.GetReferencedAssemblies() = [| |] //notRequired x "GetReferencedAssemblies" (assemblyName.ToString()) - override _.GetName() = assemblyName + override __.GetName() = assemblyName - override _.FullName = assemblyName.ToString() + override __.FullName = assemblyName.ToString() - override _.Location = assemblyFileName + override __.Location = assemblyFileName - override _.ReflectionOnly = true + override __.ReflectionOnly = true - override _.GetTypes () = theTypesArray.Force() + override __.GetTypes () = theTypesArray.Force() override x.GetType (nm: string) = if nm.Contains("+") then @@ -7867,18 +7867,18 @@ namespace ProviderImplementation.ProvidedTypes new (assemblyName, assemblyFileName) = ProvidedAssembly(false, assemblyName, assemblyFileName) - member _.BelongsToTargetModel = isTgt + member __.BelongsToTargetModel = isTgt - member _.AddNestedTypes (types, enclosingGeneratedTypeNames) = + member __.AddNestedTypes (types, enclosingGeneratedTypeNames) = addTypes (Array.ofList types, Some enclosingGeneratedTypeNames) - member _.AddTypes (types) = + member __.AddTypes (types) = addTypes (Array.ofList types, None) - member _.AddTheTypes (types, enclosingGeneratedTypeNames) = + member __.AddTheTypes (types, enclosingGeneratedTypeNames) = addTypes (types, enclosingGeneratedTypeNames) - member _.GetTheTypes () = theTypes.ToArray() + member __.GetTheTypes () = theTypes.ToArray() //==================================================================================================== // ProvidedTypesContext @@ -8353,9 +8353,9 @@ namespace ProviderImplementation.ProvidedTypes loop expr #endif - member _.TranslateExpression q = simplifyExpr q + member __.TranslateExpression q = simplifyExpr q - member _.TranslateQuotationToCode qexprf (paramNames: string[]) (argExprs: Expr[]) = + member __.TranslateQuotationToCode qexprf (paramNames: string[]) (argExprs: Expr[]) = // Use the real variable names instead of indices, to improve output of Debug.fs // Add let bindings for arguments to ensure that arguments will be evaluated let varDecisions = argExprs |> Array.mapi (fun i e -> match e with Var v when v.Name = paramNames.[i] -> false, v | _ -> true, Var(paramNames.[i], e.Type)) @@ -8919,35 +8919,35 @@ namespace ProviderImplementation.ProvidedTypes let rec convNamespaceToTgt (x: IProvidedNamespace) = { new IProvidedNamespace with - member _.GetNestedNamespaces() = Array.map convNamespaceToTgt (x.GetNestedNamespaces()) - member _.NamespaceName = x.NamespaceName - member _.GetTypes() = Array.map convTypeDefToTgt (x.GetTypes()) - member _.ResolveTypeName typeName = convTypeDefToTgt (x.ResolveTypeName typeName) } + member __.GetNestedNamespaces() = Array.map convNamespaceToTgt (x.GetNestedNamespaces()) + member __.NamespaceName = x.NamespaceName + member __.GetTypes() = Array.map convTypeDefToTgt (x.GetTypes()) + member __.ResolveTypeName typeName = convTypeDefToTgt (x.ResolveTypeName typeName) } /// Gets the equivalent target type - member _.ConvertSourceTypeToTarget t = convTypeToTgt t + member __.ConvertSourceTypeToTarget t = convTypeToTgt t - member _.ConvertTargetTypeToSource t = convTypeToSrc t + member __.ConvertTargetTypeToSource t = convTypeToSrc t - member _.ConvertSourceExprToTarget e = convExprToTgt e + member __.ConvertSourceExprToTarget e = convExprToTgt e - member _.ConvertSourceNamespaceToTarget ns = convNamespaceToTgt ns - member _.ConvertSourceProvidedTypeDefinitionToTarget ptd = convProvidedTypeDefToTgt ptd - member _.TryBindILAssemblyRefToTgt(aref: ILAssemblyRef): Choice = tryBindTargetAssemblySimple(aref.Name) + member __.ConvertSourceNamespaceToTarget ns = convNamespaceToTgt ns + member __.ConvertSourceProvidedTypeDefinitionToTarget ptd = convProvidedTypeDefToTgt ptd + member __.TryBindILAssemblyRefToTgt(aref: ILAssemblyRef): Choice = tryBindTargetAssemblySimple(aref.Name) - member _.TryBindAssemblyNameToTarget(aref: AssemblyName): Choice = tryBindTargetAssemblySimple(aref.Name) + member __.TryBindAssemblyNameToTarget(aref: AssemblyName): Choice = tryBindTargetAssemblySimple(aref.Name) - member _.TryBindSimpleAssemblyNameToTarget(assemblyName: string) = tryBindTargetAssemblySimple(assemblyName) + member __.TryBindSimpleAssemblyNameToTarget(assemblyName: string) = tryBindTargetAssemblySimple(assemblyName) - member _.ILGlobals = ilGlobals.Value + member __.ILGlobals = ilGlobals.Value - member _.ReferencedAssemblyPaths = referencedAssemblyPaths + member __.ReferencedAssemblyPaths = referencedAssemblyPaths - member _.GetTargetAssemblies() = getTargetAssemblies().ToArray() + member __.GetTargetAssemblies() = getTargetAssemblies().ToArray() - member _.GetSourceAssemblies() = getSourceAssemblies().ToArray() + member __.GetSourceAssemblies() = getSourceAssemblies().ToArray() - member _.FSharpCoreAssemblyVersion = fsharpCoreRefVersion.Force() + member __.FSharpCoreAssemblyVersion = fsharpCoreRefVersion.Force() member this.ReadRelatedAssembly(fileName) = let ilg = ilGlobals.Force() @@ -8960,10 +8960,10 @@ namespace ProviderImplementation.ProvidedTypes let reader = ILModuleReader(fileName, ByteFile(bytes), ilg, true) TargetAssembly(ilg, this.TryBindILAssemblyRefToTgt, Some reader, fileName) :> Assembly - member _.AddSourceAssembly(asm: Assembly) = + member __.AddSourceAssembly(asm: Assembly) = sourceAssembliesQueue.Add (fun () -> [| asm |]) - member _.AddTargetAssembly(asmName: AssemblyName, asm: Assembly) = + member __.AddTargetAssembly(asmName: AssemblyName, asm: Assembly) = targetAssembliesQueue.Add (fun () -> targetAssembliesTable_.[asmName.Name] <- Choice1Of2 asm targetAssemblies_.Add asm) @@ -9182,8 +9182,8 @@ namespace ProviderImplementation.ProvidedTypes [] type RowElement(tag:int32, idx: int32) = - member _.Tag = tag - member _.Val = idx + member __.Tag = tag + member __.Val = idx // These create RowElements let UShort (x:uint16) = RowElement(RowElementTags.UShort, int32 x) @@ -9245,9 +9245,9 @@ namespace ProviderImplementation.ProvidedTypes /// representations. [] type SharedRow(elems: RowElement[], hashCode: int) = - member _.GenericRow = elems - override _.GetHashCode() = hashCode - override _.Equals(obj:obj) = + member __.GenericRow = elems + override __.GetHashCode() = hashCode + override __.Equals(obj:obj) = match obj with | :? SharedRow as y -> equalRows elems y.GenericRow | _ -> false @@ -9271,9 +9271,9 @@ namespace ProviderImplementation.ProvidedTypes /// hash code for these rows, and indeed the GetHashCode and Equals should not be needed. [] type UnsharedRow(elems: RowElement[]) = - member _.GenericRow = elems - override _.GetHashCode() = hashRow elems - override _.Equals(obj:obj) = + member __.GenericRow = elems + override __.GetHashCode() = hashRow elems + override __.Equals(obj:obj) = match obj with | :? UnsharedRow as y -> equalRows elems y.GenericRow | _ -> false @@ -9363,15 +9363,15 @@ namespace ProviderImplementation.ProvidedTypes |> combineHash (hash nm) |> combineHash (hash argtys.Length) |> combineHash (hash isStatic) - member _.TypeIdx = tidx - member _.GenericArity = garity - member _.Name = nm - member _.ReturnType = rty - member _.ArgTypes = argtys - member _.IsStatic = isStatic - override _.ToString() = sprintf "%A" (tidx, garity, nm, rty, argtys, isStatic) - override _.GetHashCode() = hashCode - override _.Equals(obj:obj) = + member __.TypeIdx = tidx + member __.GenericArity = garity + member __.Name = nm + member __.ReturnType = rty + member __.ArgTypes = argtys + member __.IsStatic = isStatic + override __.ToString() = sprintf "%A" (tidx, garity, nm, rty, argtys, isStatic) + override __.GetHashCode() = hashCode + override __.Equals(obj:obj) = match obj with | :? MethodDefKey as y -> tidx = y.TypeIdx && @@ -9387,11 +9387,11 @@ namespace ProviderImplementation.ProvidedTypes type FieldDefKey(tidx:int, nm:string, ty:ILType) = // precompute the hash. hash doesn't include the type let hashCode = hash tidx |> combineHash (hash nm) - member _.TypeIdx = tidx - member _.Name = nm - member _.Type = ty - override _.GetHashCode() = hashCode - override _.Equals(obj:obj) = + member __.TypeIdx = tidx + member __.Name = nm + member __.Type = ty + override __.GetHashCode() = hashCode + override __.Equals(obj:obj) = match obj with | :? FieldDefKey as y -> tidx = y.TypeIdx && @@ -13066,7 +13066,7 @@ namespace ProviderImplementation.ProvidedTypes type ILLocalBuilder(i: int) = - member _.LocalIndex = i + member __.LocalIndex = i type ILGenerator(methodName) = let mutable locals = ResizeArray() @@ -13074,7 +13074,7 @@ namespace ProviderImplementation.ProvidedTypes let mutable labelCount = 0 let mutable labels = Dictionary() - member _.Content = + member __.Content = { IsZeroInit = true MaxStack = instrs.Count Locals = locals.ToArray() @@ -13085,16 +13085,16 @@ namespace ProviderImplementation.ProvidedTypes Locals = [| |] (* TODO ILLocalDebugInfo *) } } - member _.DeclareLocal(ty: ILType) = + member __.DeclareLocal(ty: ILType) = let idx = locals.Count let local = { Type = ty; IsPinned = false; DebugInfo = None } locals.Add(local) ILLocalBuilder(idx) - member _.DefineLabel() = labelCount <- labelCount + 1; labelCount - member _.MarkLabel(label) = labels.[label] <- instrs.Count - member _.Emit(opcode) = instrs.Add(opcode) - override _.ToString() = "generator for " + methodName + member __.DefineLabel() = labelCount <- labelCount + 1; labelCount + member __.MarkLabel(label) = labels.[label] <- instrs.Count + member __.Emit(opcode) = instrs.Add(opcode) + override __.ToString() = "generator for " + methodName type ILFieldBuilder(enclosing: ILType, nm: string, fty: ILType, attrs: FieldAttributes) = @@ -13102,13 +13102,13 @@ namespace ProviderImplementation.ProvidedTypes let mutable lit = None let cattrs = ResizeArray() - member _.SetConstant(lit2) = (lit <- Some lit2) - member _.SetCustomAttribute(ca) = cattrs.Add(ca) - member _.FormalFieldRef = ILFieldRef(enclosing.TypeRef, nm, fty) + member __.SetConstant(lit2) = (lit <- Some lit2) + member __.SetCustomAttribute(ca) = cattrs.Add(ca) + member __.FormalFieldRef = ILFieldRef(enclosing.TypeRef, nm, fty) member this.FormalFieldSpec = ILFieldSpec(this.FormalFieldRef, enclosing) - member _.Name = nm + member __.Name = nm - member _.Content = + member __.Content = { Name = nm FieldType = fty LiteralValue = lit @@ -13116,23 +13116,23 @@ namespace ProviderImplementation.ProvidedTypes Offset = None CustomAttrs = mkILCustomAttrs (cattrs.ToArray()) Token = genToken() } - override _.ToString() = "builder for " + nm + override __.ToString() = "builder for " + nm type ILGenericParameterBuilder(nm, attrs: GenericParameterAttributes) = let mutable constraints = ResizeArray() let cattrs = ResizeArray() - member _.AddConstraint(ty) = constraints.Add(ty) - member _.SetCustomAttribute(ca) = cattrs.Add(ca) + member __.AddConstraint(ty) = constraints.Add(ty) + member __.SetCustomAttribute(ca) = cattrs.Add(ca) - member _.Content = + member __.Content = { Name=nm Constraints= constraints.ToArray() Attributes = attrs CustomAttrs = mkILCustomAttrs (cattrs.ToArray()) Token = genToken() } - override _.ToString() = "builder for " + nm + override __.ToString() = "builder for " + nm type ILParameterBuilder(ty: ILType) = @@ -13141,11 +13141,11 @@ namespace ProviderImplementation.ProvidedTypes let mutable dflt = UNone let cattrs = ResizeArray() - member _.SetData(attrs2,nm2) = attrs <- attrs2; nm <- USome nm2 - member _.SetConstant(obj) = dflt <- USome obj - member _.SetCustomAttribute(ca) = cattrs.Add(ca) + member __.SetData(attrs2,nm2) = attrs <- attrs2; nm <- USome nm2 + member __.SetConstant(obj) = dflt <- USome obj + member __.SetCustomAttribute(ca) = cattrs.Add(ca) - member _.Content = + member __.Content = { Name=nm ParameterType=ty Default=dflt @@ -13160,17 +13160,17 @@ namespace ProviderImplementation.ProvidedTypes let cattrs = ResizeArray() let mutable body = None - member _.DefineGenericParameter(name, attrs) = let eb = ILGenericParameterBuilder(name, attrs) in gparams.Add eb; eb - member _.DefineParameter(i, attrs, parameterName) = ilParams.[i].SetData(attrs, parameterName) ; ilParams.[i] - member _.SetCustomAttribute(ca) = cattrs.Add(ca) - member _.GetILGenerator() = let ilg = ILGenerator(methodName) in body <- Some ilg; ilg - member _.FormalMethodRef = + member __.DefineGenericParameter(name, attrs) = let eb = ILGenericParameterBuilder(name, attrs) in gparams.Add eb; eb + member __.DefineParameter(i, attrs, parameterName) = ilParams.[i].SetData(attrs, parameterName) ; ilParams.[i] + member __.SetCustomAttribute(ca) = cattrs.Add(ca) + member __.GetILGenerator() = let ilg = ILGenerator(methodName) in body <- Some ilg; ilg + member __.FormalMethodRef = let cc = (if ILMethodDef.ComputeIsStatic attrs then ILCallingConv.Static else ILCallingConv.Instance) ILMethodRef (enclosing.TypeRef, cc, gparams.Count, methodName, argtys, retty) member this.FormalMethodSpec = ILMethodSpec(this.FormalMethodRef, enclosing, mkILFormalGenericArgs enclosing.TypeSpec.GenericArgs.Length gparams.Count) - member _.Content = + member __.Content = { Token = genToken() Name = methodName Attributes = attrs @@ -13182,7 +13182,7 @@ namespace ProviderImplementation.ProvidedTypes Return = (let p = ilParams.[0].Content in { Type = p.ParameterType; CustomAttrs = p.CustomAttrs }) Body = body |> Option.map (fun b -> b.Content) IsEntryPoint = false } - override _.ToString() = "builder for " + methodName + override __.ToString() = "builder for " + methodName type ILPropertyBuilder(nm, attrs: PropertyAttributes, retty: ILType, argtys: ILType[]) = @@ -13190,11 +13190,11 @@ namespace ProviderImplementation.ProvidedTypes let mutable getMethod = None let cattrs = ResizeArray() - member _.SetGetMethod(mb: ILMethodBuilder) = getMethod <- Some mb - member _.SetSetMethod(mb: ILMethodBuilder) = setMethod <- Some mb - member _.SetCustomAttribute(ca) = cattrs.Add(ca) + member __.SetGetMethod(mb: ILMethodBuilder) = getMethod <- Some mb + member __.SetSetMethod(mb: ILMethodBuilder) = setMethod <- Some mb + member __.SetCustomAttribute(ca) = cattrs.Add(ca) - member _.Content = + member __.Content = { Name=nm CallingConv = (if (getMethod.IsSome && getMethod.Value.Content.IsStatic) || @@ -13209,7 +13209,7 @@ namespace ProviderImplementation.ProvidedTypes Init= None // TODO if (attrs &&& PropertyAttributes.HasDefault) = 0 then None else IndexParameterTypes=argtys Token = genToken() } - override _.ToString() = "builder for " + nm + override __.ToString() = "builder for " + nm type ILEventBuilder(nm, attrs: EventAttributes) = @@ -13217,17 +13217,17 @@ namespace ProviderImplementation.ProvidedTypes let mutable removeMethod = None let cattrs = ResizeArray() - member _.SetAddOnMethod(mb: ILMethodBuilder) = addMethod <- Some mb - member _.SetRemoveOnMethod(mb: ILMethodBuilder) = removeMethod <- Some mb - member _.SetCustomAttribute(ca) = cattrs.Add(ca) - member _.Content = + member __.SetAddOnMethod(mb: ILMethodBuilder) = addMethod <- Some mb + member __.SetRemoveOnMethod(mb: ILMethodBuilder) = removeMethod <- Some mb + member __.SetCustomAttribute(ca) = cattrs.Add(ca) + member __.Content = { Name = nm Attributes = attrs AddMethod = addMethod.Value.FormalMethodRef RemoveMethod = removeMethod.Value.FormalMethodRef CustomAttrs = mkILCustomAttrs (cattrs.ToArray()) Token = genToken()} - override _.ToString() = "builder for " + nm + override __.ToString() = "builder for " + nm type ILTypeBuilder(scoref, nsp: string uoption, nm: string, attrs: TypeAttributes) = @@ -13242,7 +13242,7 @@ namespace ProviderImplementation.ProvidedTypes let methodImpls = ResizeArray() let cattrs = ResizeArray() - member _.ILTypeRef = ILTypeRef(scoref, nsp, nm) + member __.ILTypeRef = ILTypeRef(scoref, nsp, nm) member this.ILTypeSpec = ILTypeSpec(this.ILTypeRef, mkILFormalGenericArgs 0 gparams.Count) member this.ILType = match ILTypeDef.ComputeKind (int attrs) extends nsp nm with @@ -13254,14 +13254,14 @@ namespace ProviderImplementation.ProvidedTypes member this.DefineField(name, retty, attrs) = let fb = ILFieldBuilder(this.ILType, name, retty, attrs) in fields.Add fb; fb member this.DefineMethod(name, attrs, retty, argtys) = let mb = ILMethodBuilder(this.ILType, name, attrs, retty, argtys) in methods.Add mb; mb member this.DefineConstructor(attrs, argtys) = let mb = ILMethodBuilder(this.ILType, ".ctor", attrs ||| MethodAttributes.SpecialName ||| MethodAttributes.RTSpecialName, ILType.Void, argtys) in methods.Add mb; mb - member _.DefineProperty(name, attrs, propty, argtys) = let pb = ILPropertyBuilder(name, attrs, propty, argtys) in props.Add pb; pb - member _.DefineEvent(name, attrs) = let eb = ILEventBuilder(name, attrs) in events.Add eb; eb - member _.DefineMethodOverride(mimpl) = methodImpls.Add (mimpl) - member _.DefineGenericParameter(name, attrs) = let eb = ILGenericParameterBuilder(name, attrs) in gparams.Add eb; eb - member _.SetCustomAttribute(ca) = cattrs.Add(ca) - member _.AddInterfaceImplementation(ty) = implements.Add(ty) + member __.DefineProperty(name, attrs, propty, argtys) = let pb = ILPropertyBuilder(name, attrs, propty, argtys) in props.Add pb; pb + member __.DefineEvent(name, attrs) = let eb = ILEventBuilder(name, attrs) in events.Add eb; eb + member __.DefineMethodOverride(mimpl) = methodImpls.Add (mimpl) + member __.DefineGenericParameter(name, attrs) = let eb = ILGenericParameterBuilder(name, attrs) in gparams.Add eb; eb + member __.SetCustomAttribute(ca) = cattrs.Add(ca) + member __.AddInterfaceImplementation(ty) = implements.Add(ty) member this.DefineTypeInitializer () = let mb = ILMethodBuilder(this.ILType, ".cctor", MethodAttributes.Static ||| MethodAttributes.SpecialName, ILType.Void, [| |]) in methods.Add mb; mb - member _.SetParent ty = (extends <- Some ty) + member __.SetParent ty = (extends <- Some ty) member this.DefineDefaultConstructor(attrs, baseCtor: ILMethodSpec) = let ctor = this.DefineConstructor(attrs, [| |]) let ilg = ctor.GetILGenerator() @@ -13271,7 +13271,7 @@ namespace ProviderImplementation.ProvidedTypes ctor - member _.Content = + member __.Content = { Namespace=nsp Name=nm GenericParams= [| for x in gparams -> x.Content |] @@ -13283,23 +13283,23 @@ namespace ProviderImplementation.ProvidedTypes //SecurityDecls=emptyILSecurityDecls; //HasSecurity=false; NestedTypes = ILTypeDefs( lazy [| for x in nestedTypes -> let td = x.Content in td.Namespace, td.Name, lazy td |] ) - Fields = { new ILFieldDefs with member _.Entries = [| for x in fields -> x.Content |] } - Properties = { new ILPropertyDefs with member _.Entries = [| for x in props -> x.Content |] } - Events = { new ILEventDefs with member _.Entries = [| for x in events -> x.Content |] } + Fields = { new ILFieldDefs with member __.Entries = [| for x in fields -> x.Content |] } + Properties = { new ILPropertyDefs with member __.Entries = [| for x in props -> x.Content |] } + Events = { new ILEventDefs with member __.Entries = [| for x in events -> x.Content |] } Methods = ILMethodDefs (lazy [| for x in methods -> x.Content |]) - MethodImpls = { new ILMethodImplDefs with member _.Entries = methodImpls.ToArray() } + MethodImpls = { new ILMethodImplDefs with member __.Entries = methodImpls.ToArray() } CustomAttrs = mkILCustomAttrs (cattrs.ToArray()) } - override _.ToString() = "builder for " + joinILTypeName nsp nm + override __.ToString() = "builder for " + joinILTypeName nsp nm type ILModuleBuilder(scoref, moduleName, manifest) = let typeDefs = ResizeArray() let cattrs = ResizeArray() - member _.DefineType(nsp, name, attrs) = let tb = ILTypeBuilder(ILTypeRefScope.Top scoref, nsp, name, attrs) in typeDefs.Add tb; tb - member _.SetCustomAttribute(ca) = cattrs.Add(ca) + member __.DefineType(nsp, name, attrs) = let tb = ILTypeBuilder(ILTypeRefScope.Top scoref, nsp, name, attrs) in typeDefs.Add tb; tb + member __.SetCustomAttribute(ca) = cattrs.Add(ca) - member _.Content = + member __.Content = { Manifest=manifest Name=moduleName SubsystemVersion = (4, 0) @@ -13318,9 +13318,9 @@ namespace ProviderImplementation.ProvidedTypes MetadataVersion="" Resources=ILResources (lazy [| |]) TypeDefs = ILTypeDefs( lazy [| for x in typeDefs-> let td = x.Content in td.Namespace, td.Name, lazy td |] ) - CustomAttrs = { new ILCustomAttrs with member _.Entries = cattrs.ToArray() } + CustomAttrs = { new ILCustomAttrs with member __.Entries = cattrs.ToArray() } } - override _.ToString() = "builder for " + moduleName + override __.ToString() = "builder for " + moduleName type ILAssemblyBuilder(assemblyName: AssemblyName, fileName, ilg) = let manifest = @@ -13338,12 +13338,12 @@ namespace ProviderImplementation.ProvidedTypes ExportedTypes = ILExportedTypesAndForwarders (lazy [| |]) EntrypointElsewhere=None } let mb = ILModuleBuilder(ILScopeRef.Local, "MainModule", Some manifest) - member _.MainModule = mb - member _.Save() = + member __.MainModule = mb + member __.Save() = let il = mb.Content let options: BinaryWriter.options = { ilg = ilg; pdbfile = None; portablePDB = false; embeddedPDB = false; embedAllSource = false; embedSourceList = []; sourceLink = ""; emitTailcalls = true; deterministic = false; showTimes = false; dumpDebugInfo = false } BinaryWriter.WriteILBinary (fileName, options, il) - override _.ToString() = "builder for " + (assemblyName.ToString()) + override __.ToString() = "builder for " + (assemblyName.ToString()) type ExpectedStackState = @@ -13751,7 +13751,7 @@ namespace ProviderImplementation.ProvidedTypes | n -> failwithf "unknown expression '%A' in generated method" n - member _.EmitExpr (expectedState, expr) = emitExpr expectedState expr + member __.EmitExpr (expectedState, expr) = emitExpr expectedState expr //------------------------------------------------------------------------------------------------- // AssemblyCompiler: the assembly compiler for generative type providers. @@ -13902,7 +13902,7 @@ namespace ProviderImplementation.ProvidedTypes let ca = mkILCustomAttribMethRef (transCtorSpec attr.Constructor, constructorArgs, namedProps, namedFields) f ca - member _.Compile(isHostedExecution) = + member __.Compile(isHostedExecution) = let providedTypeDefinitionsT = targetAssembly.GetTheTypes() |> Array.collect (fun (tds,nsps) -> Array.map (fun td -> (td,nsps)) tds) let ilg = context.ILGlobals let assemblyName = targetAssembly.GetName() @@ -14250,10 +14250,10 @@ namespace ProviderImplementation.ProvidedTypes let typesSrc = [| for ty in typesSrc -> ty :> Type |] let nsSrc = { new IProvidedNamespace with - member _.GetNestedNamespaces() = [| |] - member _.NamespaceName = namespaceName - member _.GetTypes() = typesSrc |> Array.map ensureCompiled - member _.ResolveTypeName typeName = typesSrc |> Array.tryFind (fun ty -> ty.Name = typeName) |> Option.map ensureCompiled |> Option.toObj } + member __.GetNestedNamespaces() = [| |] + member __.NamespaceName = namespaceName + member __.GetTypes() = typesSrc |> Array.map ensureCompiled + member __.ResolveTypeName typeName = typesSrc |> Array.tryFind (fun ty -> ty.Name = typeName) |> Option.map ensureCompiled |> Option.toObj } let nsT = ctxt.ConvertSourceNamespaceToTarget nsSrc nsT @@ -14283,10 +14283,10 @@ namespace ProviderImplementation.ProvidedTypes let assemblyReplacementMap = defaultArg assemblyReplacementMap [] new TypeProviderForNamespaces(config, [], assemblyReplacementMap=assemblyReplacementMap, sourceAssemblies=sourceAssemblies) - member _.TargetContext = ctxt + member __.TargetContext = ctxt [] - member _.Disposing = disposing.Publish + member __.Disposing = disposing.Publish #if FX_NO_LOCAL_FILESYSTEM @@ -14298,7 +14298,7 @@ namespace ProviderImplementation.ProvidedTypes abstract member ResolveAssembly: args: ResolveEventArgs -> Assembly - default _.ResolveAssembly(args) = + default __.ResolveAssembly(args) = let expectedName = (AssemblyName(args.Name)).Name + ".dll" let expectedLocationOpt = probingFolders @@ -14308,12 +14308,12 @@ namespace ProviderImplementation.ProvidedTypes | Some f -> Assembly.LoadFrom f | None -> null - member _.RegisterProbingFolder (folder) = + member __.RegisterProbingFolder (folder) = // use GetFullPath to ensure that folder is valid ignore(Path.GetFullPath folder) probingFolders.Add folder - member _.RegisterRuntimeAssemblyLocationAsProbingFolder (config: TypeProviderConfig) = + member __.RegisterRuntimeAssemblyLocationAsProbingFolder (config: TypeProviderConfig) = config.RuntimeAssembly |> Path.GetDirectoryName |> this.RegisterProbingFolder @@ -14324,18 +14324,18 @@ namespace ProviderImplementation.ProvidedTypes AppDomain.CurrentDomain.remove_AssemblyResolve handler #endif - member _.AddNamespace (namespaceName, types) = namespacesT.Add (makeProvidedNamespace namespaceName types) + member __.AddNamespace (namespaceName, types) = namespacesT.Add (makeProvidedNamespace namespaceName types) - member _.Namespaces = namespacesT.ToArray() + member __.Namespaces = namespacesT.ToArray() member this.Invalidate() = invalidateE.Trigger(this,EventArgs()) - member _.GetStaticParametersForMethod(mb: MethodBase) = + member __.GetStaticParametersForMethod(mb: MethodBase) = match mb with | :? ProvidedMethod as t -> t.GetStaticParametersInternal() | _ -> [| |] - member _.ApplyStaticArgumentsForMethod(mb: MethodBase, mangledName, objs) = + member __.ApplyStaticArgumentsForMethod(mb: MethodBase, mangledName, objs) = match mb with | :? ProvidedMethod as t -> t.ApplyStaticArguments(mangledName, objs) :> MethodBase | _ -> failwithf "ApplyStaticArguments: static parameters for method %s are unexpected. Please report this bug to https://github.com/fsprojects/FSharp.TypeProviders.SDK/issues" mb.Name @@ -14343,11 +14343,11 @@ namespace ProviderImplementation.ProvidedTypes interface ITypeProvider with [] - member _.Invalidate = invalidateE.Publish + member __.Invalidate = invalidateE.Publish - member _.GetNamespaces() = namespacesT.ToArray() + member __.GetNamespaces() = namespacesT.ToArray() - member _.GetInvokerExpression(methodBaseT, parametersT) = + member __.GetInvokerExpression(methodBaseT, parametersT) = /// This checks that the GetInvokeCodeInternal doesn't return things containing calls to other provided methods or constructors. let rec check expr = @@ -14379,7 +14379,7 @@ namespace ProviderImplementation.ProvidedTypes | _ -> failwith ("TypeProviderForNamespaces.GetInvokerExpression: not a ProvidedMethod/ProvidedConstructor/ConstructorInfo/MethodInfo, name=" + methodBaseT.Name + " class=" + methodBaseT.GetType().FullName) - member _.GetStaticParameters(ty) = + member __.GetStaticParameters(ty) = match ty with | :? ProvidedTypeDefinition as t -> if ty.Name = t.Name then @@ -14388,7 +14388,7 @@ namespace ProviderImplementation.ProvidedTypes [| |] | _ -> [| |] - member _.ApplyStaticArguments(ty, typePathAfterArguments:string[], objs) = + member __.ApplyStaticArguments(ty, typePathAfterArguments:string[], objs) = let typePathAfterArguments = typePathAfterArguments.[typePathAfterArguments.Length-1] match ty with | :? ProvidedTypeDefinition as t -> @@ -14397,7 +14397,7 @@ namespace ProviderImplementation.ProvidedTypes | _ -> failwithf "ApplyStaticArguments: static params for type %s are unexpected, it is not a provided type definition. Please report this bug to https://github.com/fsprojects/FSharp.TypeProviders.SDK/issues" ty.FullName - member _.GetGeneratedAssemblyContents(assembly:Assembly) = + member __.GetGeneratedAssemblyContents(assembly:Assembly) = #if NO_GENERATIVE ignore assembly; failwith "no generative assemblies" #else @@ -14414,7 +14414,7 @@ namespace ProviderImplementation.ProvidedTypes bytes #if !NO_GENERATIVE - member _.RegisterGeneratedTargetAssembly (fileName:string) = + member __.RegisterGeneratedTargetAssembly (fileName:string) = let assemblyBytes = File.ReadAllBytes fileName //printfn "registering assembly in '%s'" fileName let assembly = diff --git a/vsintegration/tests/Salsa/FSharpLanguageServiceTestable.fs b/vsintegration/tests/Salsa/FSharpLanguageServiceTestable.fs index cddffc15c0a..a31777b9435 100644 --- a/vsintegration/tests/Salsa/FSharpLanguageServiceTestable.fs +++ b/vsintegration/tests/Salsa/FSharpLanguageServiceTestable.fs @@ -15,9 +15,7 @@ open Microsoft.VisualStudio.TextManager.Interop open Microsoft.VisualStudio.Text open Microsoft.VisualStudio.OLE.Interop open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Tokenization +open FSharp.Compiler.SourceCodeServices open Microsoft.VisualStudio.FSharp.LanguageService open Microsoft.VisualStudio.FSharp.LanguageService.SiteProvider @@ -101,6 +99,7 @@ type internal FSharpLanguageServiceTestable() as this = match checkerContainerOpt with | Some container -> let checker = container + checker.StopBackgroundCompile() checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() | None -> () @@ -128,7 +127,7 @@ type internal FSharpLanguageServiceTestable() as this = /// Respond to project being cleaned/rebuilt (any live type providers in the project should be refreshed) member this.OnProjectCleaned(projectSite:IProjectSite) = let enableInMemoryCrossProjectReferences = true - let _, checkOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, (fun _ -> None), projectSite, serviceProvider.Value, "" , false) + let _, checkOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, (fun _ -> None), projectSite, serviceProvider.Value, None(*projectId*), "" ,None, None, false) this.FSharpChecker.NotifyProjectCleaned(checkOptions) |> Async.RunSynchronously member this.OnActiveViewChanged(textView) = @@ -171,7 +170,7 @@ type internal FSharpLanguageServiceTestable() as this = member this.DependencyFileCreated projectSite = let enableInMemoryCrossProjectReferences = true // Invalidate the configuration if we notice any add for any DependencyFiles - let _, checkOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, (fun _ -> None), projectSite, serviceProvider.Value, "" , false) + let _, checkOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, (fun _ -> None), projectSite, serviceProvider.Value, None(*projectId*),"" ,None, None, false) this.FSharpChecker.InvalidateConfiguration(checkOptions) member this.DependencyFileChanged (filename) = @@ -224,4 +223,4 @@ type internal FSharpLanguageServiceTestable() as this = // // This is for unit testing only member this.WaitForBackgroundCompile() = - () + this.FSharpChecker.WaitForBackgroundCompile() diff --git a/vsintegration/tests/Salsa/SalsaUtils.fs b/vsintegration/tests/Salsa/SalsaUtils.fs index 7d9e386a274..a4c42200ce3 100644 --- a/vsintegration/tests/Salsa/SalsaUtils.fs +++ b/vsintegration/tests/Salsa/SalsaUtils.fs @@ -7,8 +7,7 @@ open System.IO open Microsoft.VisualStudio.FSharp.ProjectSystem open Microsoft.VisualStudio.FSharp.LanguageService open Microsoft.VisualStudio.TextManager.Interop -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices +open FSharp.Compiler.SourceCodeServices open NUnit.Framework open Salsa.Salsa diff --git a/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj b/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj index 2cbefb3b41f..c3473e7b184 100644 --- a/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj +++ b/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj @@ -4,8 +4,10 @@ Library - $(NoWarn);44;45;47;52;58;75 + $(NoWarn);45;47;52;58;75 true + true + $(SystemValueTupleVersion) true false @@ -31,12 +33,12 @@ - + - - + + diff --git a/vsintegration/tests/Salsa/VsMocks.fs b/vsintegration/tests/Salsa/VsMocks.fs index 5986949069f..b97fd6a1e40 100644 --- a/vsintegration/tests/Salsa/VsMocks.fs +++ b/vsintegration/tests/Salsa/VsMocks.fs @@ -1642,7 +1642,7 @@ module internal VsActual = static let jtc = new JoinableTaskContext() [)>] - member public _.JoinableTaskContext : JoinableTaskContext = jtc + member public __.JoinableTaskContext : JoinableTaskContext = jtc let vsInstallDir = // use the environment variable to find the VS installdir diff --git a/vsintegration/tests/Salsa/salsa.fs b/vsintegration/tests/Salsa/salsa.fs index c0dfd0e18e2..b4ca688c171 100644 --- a/vsintegration/tests/Salsa/salsa.fs +++ b/vsintegration/tests/Salsa/salsa.fs @@ -25,8 +25,8 @@ open Microsoft.VisualStudio.FSharp.LanguageService open Microsoft.VisualStudio.TextManager.Interop open UnitTests.TestLib.Utils.FilesystemHelpers open Microsoft.Build.Framework -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices +open FSharp.Compiler +open FSharp.Compiler.SourceCodeServices open Microsoft.Build.Evaluation @@ -1443,21 +1443,21 @@ module internal Salsa = let documentationProvider = { new IDocumentationBuilder_DEPRECATED with override doc.AppendDocumentationFromProcessedXML(appendTo,processedXml:string,showExceptions, showReturns, paramName) = - appendTo.Add(FSharp.Compiler.Text.TaggedText.tagText processedXml) - appendTo.Add(FSharp.Compiler.Text.TaggedText.lineBreak) + appendTo.Add(FSharp.Compiler.Layout.TaggedTextOps.tagText processedXml) + appendTo.Add(FSharp.Compiler.Layout.TaggedTextOps.Literals.lineBreak) override doc.AppendDocumentation(appendTo,filename:string,signature:string, showExceptions, showReturns, paramName) = - appendTo.Add(FSharp.Compiler.Text.TaggedText.tagText (sprintf "[Filename:%s]" filename)) - appendTo.Add(FSharp.Compiler.Text.TaggedText.lineBreak) - appendTo.Add(FSharp.Compiler.Text.TaggedText.tagText (sprintf "[Signature:%s]" signature)) - appendTo.Add(FSharp.Compiler.Text.TaggedText.lineBreak) + appendTo.Add(FSharp.Compiler.Layout.TaggedTextOps.tagText (sprintf "[Filename:%s]" filename)) + appendTo.Add(FSharp.Compiler.Layout.TaggedTextOps.Literals.lineBreak) + appendTo.Add(FSharp.Compiler.Layout.TaggedTextOps.tagText (sprintf "[Signature:%s]" signature)) + appendTo.Add(FSharp.Compiler.Layout.TaggedTextOps.Literals.lineBreak) if paramName.IsSome then - appendTo.Add(FSharp.Compiler.Text.TaggedText.tagText (sprintf "[ParamName: %s]" paramName.Value)) - appendTo.Add(FSharp.Compiler.Text.TaggedText.lineBreak) + appendTo.Add(FSharp.Compiler.Layout.TaggedTextOps.tagText (sprintf "[ParamName: %s]" paramName.Value)) + appendTo.Add(FSharp.Compiler.Layout.TaggedTextOps.Literals.lineBreak) } let sp2 = { new System.IServiceProvider with - member _.GetService(serviceType:Type) : obj = + member __.GetService(serviceType:Type) : obj = if serviceType = typeof then rdt else if serviceType = typeof then tm else raise (new Exception(sprintf "Salsa did not create service %A" serviceType)) } @@ -1546,8 +1546,8 @@ module internal Salsa = member ops.CleanUp vs = VsImpl(vs).CleanUp() member ops.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients vs = VsImpl(vs).ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() member ops.AutoCompleteMemberDataTipsThrowsScope message = - DeclarationListHelpers.ToolTipFault <- Some message - { new System.IDisposable with member x.Dispose() = DeclarationListHelpers.ToolTipFault <- None } + SymbolHelpers.ToolTipFault <- Some message + { new System.IDisposable with member x.Dispose() = SymbolHelpers.ToolTipFault <- None } member ops.OutOfConeFilesAreAddedAsLinks = false member ops.SupportsOutputWindowPane = false member ops.CleanInvisibleProject vs = VsImpl(vs).CleanInvisibleProject() diff --git a/vsintegration/tests/UnitTests/AssemblyResolver.fs b/vsintegration/tests/UnitTests/AssemblyResolver.fs index a118adfd97f..229650849fa 100644 --- a/vsintegration/tests/UnitTests/AssemblyResolver.fs +++ b/vsintegration/tests/UnitTests/AssemblyResolver.fs @@ -51,4 +51,4 @@ module AssemblyResolver = type public AssemblyResolverTestFixture () = [] - member public _.Init () = AssemblyResolver.addResolver () + member public __.Init () = AssemblyResolver.addResolver () diff --git a/vsintegration/tests/UnitTests/BraceMatchingServiceTests.fs b/vsintegration/tests/UnitTests/BraceMatchingServiceTests.fs index 1e05ea76bd8..67d8f88b882 100644 --- a/vsintegration/tests/UnitTests/BraceMatchingServiceTests.fs +++ b/vsintegration/tests/UnitTests/BraceMatchingServiceTests.fs @@ -9,7 +9,7 @@ open NUnit.Framework open Microsoft.CodeAnalysis.Classification open Microsoft.CodeAnalysis.Editor open Microsoft.CodeAnalysis.Text -open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.SourceCodeServices open Microsoft.VisualStudio.FSharp.Editor open Microsoft.VisualStudio.FSharp.LanguageService open UnitTests.TestLib.LanguageService @@ -28,6 +28,7 @@ type BraceMatchingServiceTests() = LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None + ExtraProjectInfo = None Stamp = None } diff --git a/vsintegration/tests/UnitTests/BreakpointResolutionService.fs b/vsintegration/tests/UnitTests/BreakpointResolutionService.fs index 09b5e105857..8ccf2c69441 100644 --- a/vsintegration/tests/UnitTests/BreakpointResolutionService.fs +++ b/vsintegration/tests/UnitTests/BreakpointResolutionService.fs @@ -13,8 +13,8 @@ open Microsoft.CodeAnalysis.Text open Microsoft.VisualStudio.FSharp.Editor open Microsoft.VisualStudio.FSharp.LanguageService -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Text +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Range open UnitTests.TestLib.LanguageService @@ -33,6 +33,7 @@ type BreakpointResolutionServiceTests() = LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None + ExtraProjectInfo = None Stamp = None } let code = " @@ -72,10 +73,10 @@ let main argv = let searchPosition = code.IndexOf(searchToken) Assert.IsTrue(searchPosition >= 0, "SearchToken '{0}' is not found in code", searchToken) - let document, sourceText = RoslynTestHelpers.CreateDocument(fileName, code) + let sourceText = SourceText.From(code) let searchSpan = TextSpan.FromBounds(searchPosition, searchPosition + searchToken.Length) - - let actualResolutionOption = FSharpBreakpointResolutionService.GetBreakpointLocation(document, searchSpan) |> Async.RunSynchronously + let parsingOptions, _ = checker.GetParsingOptionsFromProjectOptions projectOptions + let actualResolutionOption = FSharpBreakpointResolutionService.GetBreakpointLocation(checker, sourceText, fileName, searchSpan, parsingOptions) |> Async.RunSynchronously match actualResolutionOption with | None -> Assert.IsTrue(expectedResolution.IsNone, "BreakpointResolutionService failed to resolve breakpoint position") diff --git a/vsintegration/tests/UnitTests/CompletionProviderTests.fs b/vsintegration/tests/UnitTests/CompletionProviderTests.fs index 9003031df00..8b7f1ad24f7 100644 --- a/vsintegration/tests/UnitTests/CompletionProviderTests.fs +++ b/vsintegration/tests/UnitTests/CompletionProviderTests.fs @@ -11,7 +11,7 @@ // and capturing large amounts of structured output. (* cd Debug\net40\bin - .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Service.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\CompletionProviderTests.fs + .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Private.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\CompletionProviderTests.fs .\VisualFSharp.UnitTests.exe *) // Technique 3: @@ -31,7 +31,7 @@ open Microsoft.CodeAnalysis.Completion open Microsoft.CodeAnalysis.Text open Microsoft.VisualStudio.FSharp.Editor -open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.SourceCodeServices open UnitTests.TestLib.LanguageService let filePath = "C:\\test.fs" @@ -46,6 +46,7 @@ let internal projectOptions opts = { LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None + ExtraProjectInfo = None Stamp = None } @@ -54,9 +55,8 @@ let formatCompletions(completions : string seq) = let VerifyCompletionListWithOptions(fileContents: string, marker: string, expected: string list, unexpected: string list, opts) = let caretPosition = fileContents.IndexOf(marker) + marker.Length - let document, _ = RoslynTestHelpers.CreateDocument(filePath, fileContents) let results = - FSharpCompletionProvider.ProvideCompletionsAsyncAux(document, caretPosition, (fun _ -> []), IntelliSenseOptions.Default) + FSharpCompletionProvider.ProvideCompletionsAsyncAux(checker, SourceText.From(fileContents), caretPosition, projectOptions opts, filePath, 0, (fun _ -> []), LanguageServicePerformanceOptions.Default, IntelliSenseOptions.Default) |> Async.RunSynchronously |> Option.defaultValue (ResizeArray()) |> Seq.map(fun result -> result.DisplayText) @@ -105,9 +105,9 @@ let VerifyCompletionList(fileContents, marker, expected, unexpected) = let VerifyCompletionListExactly(fileContents: string, marker: string, expected: string list) = let caretPosition = fileContents.IndexOf(marker) + marker.Length - let document, _ = RoslynTestHelpers.CreateDocument(filePath, fileContents) + let actual = - FSharpCompletionProvider.ProvideCompletionsAsyncAux(document, caretPosition, (fun _ -> []), IntelliSenseOptions.Default) + FSharpCompletionProvider.ProvideCompletionsAsyncAux(checker, SourceText.From(fileContents), caretPosition, projectOptions [| |], filePath, 0, (fun _ -> []), LanguageServicePerformanceOptions.Default, IntelliSenseOptions.Default) |> Async.RunSynchronously |> Option.defaultValue (ResizeArray()) |> Seq.toList @@ -356,8 +356,8 @@ let x = $"1 not the same as {System.Int32.MaxValue} is it" let ``Class instance members are ordered according to their kind and where they are defined (simple case, by a variable)``() = let fileContents = """ type Base() = - member _.BaseMethod() = 1 - member _.BaseProp = 1 + member __.BaseMethod() = 1 + member __.BaseProp = 1 type Class() = inherit Base() @@ -374,8 +374,8 @@ x. let ``Class instance members are ordered according to their kind and where they are defined (simple case, by a constructor)``() = let fileContents = """ type Base() = - member _.BaseMethod() = 1 - member _.BaseProp = 1 + member __.BaseMethod() = 1 + member __.BaseProp = 1 type Class() = inherit Base() @@ -410,8 +410,8 @@ let ``Class instance members are ordered according to their kind and where they let fileContents = """ type Base() = inherit System.Collections.Generic.List - member _.BaseMethod() = 1 - member _.BaseProp = 1 + member __.BaseMethod() = 1 + member __.BaseProp = 1 type Class() = inherit Base() @@ -479,8 +479,8 @@ let ``Extension methods go after everything else, extension properties are treat open System.Collections.Generic type List<'a> with - member _.ExtensionProp = 1 - member _.ExtensionMeth() = 1 + member __.ExtensionProp = 1 + member __.ExtensionMeth() = 1 List(). """ diff --git a/vsintegration/tests/UnitTests/DocumentDiagnosticAnalyzerTests.fs b/vsintegration/tests/UnitTests/DocumentDiagnosticAnalyzerTests.fs index 2f3b76b2965..6fb3909079a 100644 --- a/vsintegration/tests/UnitTests/DocumentDiagnosticAnalyzerTests.fs +++ b/vsintegration/tests/UnitTests/DocumentDiagnosticAnalyzerTests.fs @@ -14,8 +14,8 @@ open Microsoft.CodeAnalysis.Text open Microsoft.VisualStudio.FSharp.Editor open Microsoft.VisualStudio.FSharp.LanguageService -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Text +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Range open UnitTests.TestLib.LanguageService @@ -35,14 +35,15 @@ type DocumentDiagnosticAnalyzerTests() = LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None + ExtraProjectInfo = None Stamp = None } let getDiagnostics (fileContents: string) = async { - let document, _ = RoslynTestHelpers.CreateDocument(filePath, fileContents) - let! syntacticDiagnostics = FSharpDocumentDiagnosticAnalyzer.GetDiagnostics(document, DiagnosticsType.Syntax) - let! semanticDiagnostics = FSharpDocumentDiagnosticAnalyzer.GetDiagnostics(document, DiagnosticsType.Semantic) + let parsingOptions, _ = checker.GetParsingOptionsFromProjectOptions projectOptions + let! syntacticDiagnostics = FSharpDocumentDiagnosticAnalyzer.GetDiagnostics(checker, filePath, SourceText.From(fileContents), 0, parsingOptions, projectOptions, DiagnosticsType.Syntax) + let! semanticDiagnostics = FSharpDocumentDiagnosticAnalyzer.GetDiagnostics(checker, filePath, SourceText.From(fileContents), 0, parsingOptions, projectOptions, DiagnosticsType.Semantic) return syntacticDiagnostics.AddRange(semanticDiagnostics) } |> Async.RunSynchronously @@ -53,8 +54,7 @@ type DocumentDiagnosticAnalyzerTests() = | Some(flags) -> {projectOptions with OtherOptions = Array.append projectOptions.OtherOptions flags} let errors = getDiagnostics fileContents - if not errors.IsEmpty then - Assert.Fail("There should be no errors generated", errors) + Assert.AreEqual(0, errors.Length, "There should be no errors generated") member private this.VerifyErrorAtMarker(fileContents: string, expectedMarker: string, ?expectedMessage: string) = let errors = getDiagnostics fileContents |> Seq.filter(fun e -> e.Severity = DiagnosticSeverity.Error) |> Seq.toArray diff --git a/vsintegration/tests/UnitTests/DocumentHighlightsServiceTests.fs b/vsintegration/tests/UnitTests/DocumentHighlightsServiceTests.fs index f7074122dd5..07d4eed0756 100644 --- a/vsintegration/tests/UnitTests/DocumentHighlightsServiceTests.fs +++ b/vsintegration/tests/UnitTests/DocumentHighlightsServiceTests.fs @@ -11,12 +11,12 @@ // and capturing large amounts of structured output. (* cd Debug\net40\bin - .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Service.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\CompletionProviderTests.fs + .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Private.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\CompletionProviderTests.fs .\VisualFSharp.UnitTests.exe *) // Technique 3: // -// Use F# Interactive. This only works for FSharp.Compiler.Service.dll which has a public API +// Use F# Interactive. This only works for FSharp.Compiler.Private.dll which has a public API // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. [] @@ -31,8 +31,8 @@ open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Text open Microsoft.VisualStudio.FSharp.Editor -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Text +open FSharp.Compiler +open FSharp.Compiler.SourceCodeServices open UnitTests.TestLib.LanguageService let filePath = "C:\\test.fs" @@ -48,17 +48,18 @@ let internal projectOptions = { LoadTime = DateTime.MaxValue UnresolvedReferences = None OriginalLoadReferences = [] + ExtraProjectInfo = None Stamp = None } let private getSpans (sourceText: SourceText) (caretPosition: int) = - let document = RoslynTestHelpers.CreateDocument(filePath, sourceText) - FSharpDocumentHighlightsService.GetDocumentHighlights(document, caretPosition) + let documentId = DocumentId.CreateNewId(ProjectId.CreateNewId()) + FSharpDocumentHighlightsService.GetDocumentHighlights(checker, documentId, sourceText, filePath, caretPosition, [], projectOptions, 0, LanguageServicePerformanceOptions.Default) |> Async.RunSynchronously |> Option.defaultValue [||] let private span sourceText isDefinition (startLine, startCol) (endLine, endCol) = - let range = Range.mkRange filePath (Position.mkPos startLine startCol) (Position.mkPos endLine endCol) + let range = Range.mkRange filePath (Range.mkPos startLine startCol) (Range.mkPos endLine endCol) { IsDefinition = isDefinition TextSpan = RoslynHelpers.FSharpRangeToTextSpan(sourceText, range) } diff --git a/vsintegration/tests/UnitTests/EditorFormattingServiceTests.fs b/vsintegration/tests/UnitTests/EditorFormattingServiceTests.fs index 583e52e59ba..3a5b70f2051 100644 --- a/vsintegration/tests/UnitTests/EditorFormattingServiceTests.fs +++ b/vsintegration/tests/UnitTests/EditorFormattingServiceTests.fs @@ -8,7 +8,7 @@ open NUnit.Framework open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Text open Microsoft.VisualStudio.FSharp.Editor -open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.SourceCodeServices open Microsoft.CodeAnalysis.Formatting [] @@ -26,6 +26,7 @@ type EditorFormattingServiceTests() = LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None + ExtraProjectInfo = None Stamp = None } @@ -94,7 +95,7 @@ marker4""" let clipboard = prefix + """[] type SomeNameHere () = - member _.Test ()""" + member __.Test ()""" let start = """ @@ -111,7 +112,7 @@ let foo = printfn "Something here" [] type SomeNameHere () = - member _.Test () + member __.Test () somethingElseHere """ @@ -143,7 +144,7 @@ somethingElseHere let clipboard = prefix + """[] type SomeNameHere () = - member _.Test ()""" + member __.Test ()""" let start = """ $ @@ -157,7 +158,7 @@ somethingElseHere let expected = """ [] type SomeNameHere () = - member _.Test () + member __.Test () let foo = printfn "Something here" @@ -188,7 +189,7 @@ somethingElseHere let clipboard = """[] type SomeNameHere () = - member _.Test ()""" + member __.Test ()""" let start = """ @@ -205,7 +206,7 @@ let foo = printfn "Something here" [] type SomeNameHere () = - member _.Test () + member __.Test () somethingElseHere """ diff --git a/vsintegration/tests/UnitTests/FsxCompletionProviderTests.fs b/vsintegration/tests/UnitTests/FsxCompletionProviderTests.fs index 7441639316f..daaec566c8e 100644 --- a/vsintegration/tests/UnitTests/FsxCompletionProviderTests.fs +++ b/vsintegration/tests/UnitTests/FsxCompletionProviderTests.fs @@ -10,7 +10,7 @@ // and capturing large amounts of structured output. (* cd Debug\net40\bin - .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Service.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\FsxCompletionProviderTests.fs + .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Private.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\FsxCompletionProviderTests.fs .\VisualFSharp.UnitTests.exe *) // Technique 3: @@ -33,11 +33,12 @@ open Microsoft.CodeAnalysis.Completion open Microsoft.CodeAnalysis.Text open Microsoft.VisualStudio.FSharp.Editor -open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.SourceCodeServices open UnitTests.TestLib.LanguageService // AppDomain helper type Worker () = + inherit MarshalByRefObject() let filePath = "C:\\test.fsx" let projectOptions = { @@ -51,15 +52,66 @@ type Worker () = LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None + ExtraProjectInfo = None Stamp = None } - member _.VerifyCompletionListExactly(fileContents: string, marker: string, expected: List) = + let formatCompletions(completions : string seq) = + "\n\t" + String.Join("\n\t", completions) + + let VerifyCompletionList(fileContents: string, marker: string, expected: string list, unexpected: string list) = + let caretPosition = fileContents.IndexOf(marker) + marker.Length + let results = + FSharpCompletionProvider.ProvideCompletionsAsyncAux(checker, SourceText.From(fileContents), caretPosition, projectOptions, filePath, 0, (fun _ -> []), LanguageServicePerformanceOptions.Default, IntelliSenseOptions.Default) + |> Async.RunSynchronously + |> Option.defaultValue (ResizeArray()) + |> Seq.map(fun result -> result.DisplayText) + + let expectedFound = + expected + |> Seq.filter results.Contains + + let expectedNotFound = + expected + |> Seq.filter (expectedFound.Contains >> not) + + let unexpectedNotFound = + unexpected + |> Seq.filter (results.Contains >> not) + + let unexpectedFound = + unexpected + |> Seq.filter (unexpectedNotFound.Contains >> not) + + // If either of these are true, then the test fails. + let hasExpectedNotFound = not (Seq.isEmpty expectedNotFound) + let hasUnexpectedFound = not (Seq.isEmpty unexpectedFound) + + if hasExpectedNotFound || hasUnexpectedFound then + let expectedNotFoundMsg = + if hasExpectedNotFound then + sprintf "\nExpected completions not found:%s\n" (formatCompletions expectedNotFound) + else + String.Empty + + let unexpectedFoundMsg = + if hasUnexpectedFound then + sprintf "\nUnexpected completions found:%s\n" (formatCompletions unexpectedFound) + else + String.Empty + + let completionsMsg = sprintf "\nin Completions:%s" (formatCompletions results) + + let msg = sprintf "%s%s%s" expectedNotFoundMsg unexpectedFoundMsg completionsMsg + + Assert.Fail(msg) + + member __.VerifyCompletionListExactly(fileContents: string, marker: string, expected: List) = + let caretPosition = fileContents.IndexOf(marker) + marker.Length - let document = RoslynTestHelpers.CreateDocument(filePath, SourceText.From(fileContents), options = projectOptions) let expected = expected |> Seq.toList let actual = - let x = FSharpCompletionProvider.ProvideCompletionsAsyncAux(document, caretPosition, (fun _ -> []), IntelliSenseOptions.Default) + let x = FSharpCompletionProvider.ProvideCompletionsAsyncAux(checker, SourceText.From(fileContents), caretPosition, projectOptions, filePath, 0, (fun _ -> []), LanguageServicePerformanceOptions.Default, IntelliSenseOptions.Default) |> Async.RunSynchronously x |> Option.defaultValue (ResizeArray()) |> Seq.toList @@ -76,7 +128,17 @@ type Worker () = module FsxCompletionProviderTests = - let getWorker () = Worker() + let pathToThisDll = Assembly.GetExecutingAssembly().CodeBase + + let getWorker () = + + let adSetup = + let setup = new System.AppDomainSetup () + setup.PrivateBinPath <- pathToThisDll + setup + + let ad = AppDomain.CreateDomain((Guid()).ToString(), null, adSetup) + (ad.CreateInstanceFromAndUnwrap(pathToThisDll, typeof.FullName)) :?> Worker [] let fsiShouldTriggerCompletionInFsxFile() = diff --git a/vsintegration/tests/UnitTests/GoToDefinitionServiceTests.fs b/vsintegration/tests/UnitTests/GoToDefinitionServiceTests.fs index 49527630ff6..31cdd24a75f 100644 --- a/vsintegration/tests/UnitTests/GoToDefinitionServiceTests.fs +++ b/vsintegration/tests/UnitTests/GoToDefinitionServiceTests.fs @@ -12,12 +12,12 @@ // and capturing large amounts of structured output. (* cd Debug\net40\bin - .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Service.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\GoToDefinitionServiceTests.fs + .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Private.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\GoToDefinitionServiceTests.fs .\VisualFSharp.UnitTests.exe *) // Technique 3: // -// Use F# Interactive. This only works for FSharp.Compiler.Service.dll which has a public API +// Use F# Interactive. This only works for FSharp.Compiler.Private.dll which has a public API namespace Microsoft.VisualStudio.FSharp.Editor.Tests.Roslyn @@ -28,10 +28,8 @@ open NUnit.Framework open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Text open Microsoft.VisualStudio.FSharp.Editor -open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Text +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Range open UnitTests.TestLib.LanguageService [][] @@ -41,22 +39,26 @@ module GoToDefinitionServiceTests = let private findDefinition ( - document: Document, - sourceText: SourceText, + checker: FSharpChecker, + documentKey: DocumentId, + sourceText: SourceText, + filePath: string, position: int, - defines: string list + defines: string list, + options: FSharpProjectOptions, + textVersionHash: int ) : range option = maybe { let textLine = sourceText.Lines.GetLineFromPosition position let textLinePos = sourceText.Lines.GetLinePosition position let fcsTextLineNumber = Line.fromZ textLinePos.Line - let! lexerSymbol = Tokenizer.getSymbolAtPosition(document.Id, sourceText, position, document.FilePath, defines, SymbolLookupKind.Greedy, false, false) - let _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(userOpName)) |> Async.RunSynchronously + let! lexerSymbol = Tokenizer.getSymbolAtPosition(documentKey, sourceText, position, filePath, defines, SymbolLookupKind.Greedy, false, false) + let! _, _, checkFileResults = checker.ParseAndCheckDocument (filePath, textVersionHash, sourceText, options, LanguageServicePerformanceOptions.Default, userOpName=userOpName) |> Async.RunSynchronously let declarations = checkFileResults.GetDeclarationLocation (fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLine.ToString(), lexerSymbol.FullIsland, false) match declarations with - | FindDeclResult.DeclFound range -> return range + | FSharpFindDeclResult.DeclFound range -> return range | _ -> return! None } @@ -72,18 +74,20 @@ module GoToDefinitionServiceTests = LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None + ExtraProjectInfo = None Stamp = None } let GoToDefinitionTest (fileContents: string, caretMarker: string, expected) = let filePath = Path.GetTempFileName() + ".fs" + let options = makeOptions filePath [| |] File.WriteAllText(filePath, fileContents) let caretPosition = fileContents.IndexOf(caretMarker) + caretMarker.Length - 1 // inside the marker - let document, sourceText = RoslynTestHelpers.CreateDocument(filePath, fileContents) + let documentId = DocumentId.CreateNewId(ProjectId.CreateNewId()) let actual = - findDefinition(document, sourceText, caretPosition, []) + findDefinition(checker, documentId, SourceText.From(fileContents), filePath, caretPosition, [], options, 0) |> Option.map (fun range -> (range.StartLine, range.EndLine, range.StartColumn, range.EndColumn)) if actual <> expected then diff --git a/vsintegration/tests/UnitTests/IndentationServiceTests.fs b/vsintegration/tests/UnitTests/IndentationServiceTests.fs index 7c535ccdff9..a1a8cb0943f 100644 --- a/vsintegration/tests/UnitTests/IndentationServiceTests.fs +++ b/vsintegration/tests/UnitTests/IndentationServiceTests.fs @@ -11,7 +11,7 @@ open Microsoft.CodeAnalysis.Classification open Microsoft.CodeAnalysis.Editor open Microsoft.CodeAnalysis.Text open Microsoft.VisualStudio.FSharp.Editor -open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.SourceCodeServices open Microsoft.CodeAnalysis.Formatting open UnitTests.TestLib.LanguageService @@ -30,6 +30,7 @@ type IndentationServiceTests() = LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None + ExtraProjectInfo = None Stamp = None } diff --git a/vsintegration/tests/UnitTests/LanguageDebugInfoServiceTests.fs b/vsintegration/tests/UnitTests/LanguageDebugInfoServiceTests.fs index 6c2968a16ca..189f0d05027 100644 --- a/vsintegration/tests/UnitTests/LanguageDebugInfoServiceTests.fs +++ b/vsintegration/tests/UnitTests/LanguageDebugInfoServiceTests.fs @@ -6,12 +6,16 @@ open System.Threading open NUnit.Framework +open Microsoft.CodeAnalysis.Classification +open Microsoft.CodeAnalysis.Editor open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis open Microsoft.VisualStudio.FSharp.Editor +open Microsoft.VisualStudio.FSharp.LanguageService -open FSharp.Compiler.Text +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Range [][] type LanguageDebugInfoServiceTests() = diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Completion.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Completion.fs index 118339a2d82..2ae86637bc1 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Completion.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Completion.fs @@ -346,22 +346,22 @@ a. [ [ "type A() =" - " member _.X = ()" + " member __.X = ()" " member this." ] [ "type A() =" - " member _.X = ()" + " member __.X = ()" " member private this." ] [ "type A() =" - " member _.X = ()" + " member __.X = ()" " member public this." ] [ "type A() =" - " member _.X = ()" + " member __.X = ()" " member internal this." ] @@ -519,10 +519,10 @@ a. [ "type Foo = Foo" " with" - " member _.Bar = 1" - " member _.PublicMethodForIntellisense() = 2" - " member internal _.InternalMethod() = 3" - " member private _.PrivateProperty = 4" + " member __.Bar = 1" + " member __.PublicMethodForIntellisense() = 2" + " member internal __.InternalMethod() = 3" + " member private __.PrivateProperty = 4" "" "let u: Unit =" " [ Foo ]" @@ -3864,7 +3864,7 @@ let x = query { for bbbb in abbbbc(*D0*) do [ @" type C() = let someValue = ""abc"" - member _.M() = + member __.M() = let x = 1 match someValue. with let x = 1 @@ -4526,8 +4526,7 @@ let x = query { for bbbb in abbbbc(*D0*) do // Save file2 ReplaceFileInMemory file2 [""] - SaveFileToDisk file2 - let file3 = OpenFile(project,"File3.fs") + SaveFileToDisk file2 TakeCoffeeBreak(this.VS) gpatcc.AssertExactly(notAA[file2; file3], notAA[file2;file3]) @@ -5125,7 +5124,6 @@ let x = query { for bbbb in abbbbc(*D0*) do Assert.IsTrue(completions.Length>0) [] - [] member this.``BadCompletionAfterQuicklyTyping.Bug72561``() = let code = [ " " ] let (_, _, file) = this.CreateSingleFileProject(code) @@ -5548,8 +5546,8 @@ let x = query { for bbbb in abbbbc(*D0*) do this.VerifyDotCompListContainAllAtStartOfMarker( fileContents = """ type T() = - member _.P with get() = new T() - member _.M() = [|1..2|] + member __.P with get() = new T() + member __.M() = [|1..2|] let t = new T() t.P.M()(*marker*) """, marker = "(*marker*)", @@ -5560,7 +5558,7 @@ let x = query { for bbbb in abbbbc(*D0*) do this.VerifyDotCompListContainAllAtStartOfMarker( fileContents = """ type T() = - member _.M() = [|1..2|] + member __.M() = [|1..2|] type R = { P : T } @@ -7150,6 +7148,7 @@ let rec f l = let (_, _, file) = this.CreateSingleFileProject(code) TakeCoffeeBreak(this.VS) + let gpatcc = GlobalParseAndTypeCheckCounter.StartNew(this.VS) // In this case, we quickly type "." and then get dot-completions // For "level <- Module" this shows completions from the "Module" (e.g. "Module.Other") @@ -7162,6 +7161,7 @@ let rec f l = let completions = AutoCompleteAtCursor file AssertCompListContainsAll(completions, ["Length"]) AssertCompListDoesNotContainAny(completions, ["AbstractClassAttribute"]) + gpatcc.AssertExactly(0,0) [] member this.``SelfParameter.InDoKeywordScope``() = diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.ErrorList.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.ErrorList.fs index aff227acd96..25068fc33d6 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.ErrorList.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.ErrorList.fs @@ -17,7 +17,7 @@ open UnitTests.TestLib.ProjectSystem type public AssemblyResolverTestFixture () = [] - member public _.Init () = AssemblyResolver.addResolver () + member public __.Init () = AssemblyResolver.addResolver () [] [] diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.General.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.General.fs index b5a3aeaee1b..7bf26561c21 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.General.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.General.fs @@ -8,10 +8,7 @@ open System.IO open System.Reflection open System.Runtime.InteropServices open FSharp.Compiler -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Syntax -open FSharp.Compiler.Tokenization +open FSharp.Compiler.SourceCodeServices open Microsoft.VisualStudio.FSharp.LanguageService open Salsa.Salsa open Salsa @@ -265,7 +262,7 @@ type UsingMSBuild() = [ "type C() = " " member this.F() = ()" " interface System.IComparable with " - " member _.CompareTo(v:obj) = 1" ] + " member __.CompareTo(v:obj) = 1" ] ) [] diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.GotoDefinition.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.GotoDefinition.fs index 2e398ab682e..95b52add9ea 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.GotoDefinition.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.GotoDefinition.fs @@ -13,8 +13,6 @@ open System.Collections.Generic open System.Text.RegularExpressions open UnitTests.TestLib.LanguageService open UnitTests.TestLib.ProjectSystem -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices [] [] @@ -1345,7 +1343,7 @@ type UsingMSBuild() = member this.GetCompleteIdTest tolerate (s : string)(exp : string option) : unit = let n = s.IndexOf '$' let s = s.Remove (n, 1) - match (QuickParse.GetCompleteIdentifierIsland tolerate s n, exp) with + match (FSharp.Compiler.QuickParse.GetCompleteIdentifierIsland tolerate s n, exp) with | (Some (s1, _, _), Some s2) -> printfn "%s" "Received result, as expected." Assert.AreEqual (s1, s2) diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.ParameterInfo.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.ParameterInfo.fs index 2ff85f4b0b3..5b05e438935 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.ParameterInfo.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.ParameterInfo.fs @@ -903,7 +903,7 @@ type UsingMSBuild() = let info = info.Value AssertEqual("f1", info.GetName(0)) // note about (5,0): service.fs adds three lines of empty text to the end of every file, so it reports the location of 'end of file' as first the char, 3 lines past the last line of the file - AssertEqual([|(2,10);(2,12);(2,13);(3,0)|], info.GetParameterLocations()) + AssertEqual([|(2,10);(2,12);(2,13);(3,0)|], info.GetNoteworthyParamInfoLocations()) [] [] @@ -926,7 +926,7 @@ type UsingMSBuild() = let info = info.Value AssertEqual("Foo", info.GetName(0)) // note about (4,0): service.fs adds three lines of empty text to the end of every file, so it reports the location of 'end of file' as first the char, 3 lines past the last line of the file - AssertEqual([|(1,14);(1,17);(1,18);(2,0)|], info.GetParameterLocations()) + AssertEqual([|(1,14);(1,17);(1,18);(2,0)|], info.GetNoteworthyParamInfoLocations()) (* @@ -953,7 +953,7 @@ We really need to rewrite some code paths here to use the real parse tree rather let info = GetParameterInfoAtCursor file // this will fall back to using the name environment, which is stale, but sufficient to look up the call to 'f1' AssertEqual("Foo", info.GetName(0)) // note about (4,0): service.fs adds three lines of empty text to the end of every file, so it reports the location of 'end of file' as first the char, 3 lines past the last line of the file - AssertEqual([|(1,14);(1,21);(1,21);(4,0)|], info.GetParameterLocations()) + AssertEqual([|(1,14);(1,21);(1,21);(4,0)|], info.GetNoteworthyParamInfoLocations()) *) [] @@ -1003,7 +1003,7 @@ We really need to rewrite some code paths here to use the real parse tree rather let info = GetParameterInfoAtCursor file Assert.IsTrue(info.IsSome, "expected parameter info") let info = info.Value - AssertEqual(expectedLocs, info.GetParameterLocations()) + AssertEqual(expectedLocs, info.GetNoteworthyParamInfoLocations()) // These pin down known failing cases member public this.TestNoParameterInfo (testLine, ?additionalReferenceAssemblies) = @@ -1153,7 +1153,7 @@ We really need to rewrite some code paths here to use the real parse tree rather [] member public this.``LocationOfParams.InsideObjectExpression``() = this.TestParameterInfoLocationOfParams(""" - let _ = { new ^System.Object^(^$^) with member _.GetHashCode() = 2}""") + let _ = { new ^System.Object^(^$^) with member __.GetHashCode() = 2}""") [] member public this.``LocationOfParams.Nested1``() = @@ -1653,7 +1653,7 @@ We really need to rewrite some code paths here to use the real parse tree rather [] member public this.``Multi.Constructor.WithinObjectExpression``() = - let fileContents = "let _ = { new System.Object((*Mark*)) with member _.GetHashCode() = 2}" + let fileContents = "let _ = { new System.Object((*Mark*)) with member __.GetHashCode() = 2}" this.VerifyParameterInfoContainedAtStartOfMarker(fileContents,"(*Mark*)",[]) [] diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.QuickInfo.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.QuickInfo.fs index d501e84ce83..200db7b2727 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.QuickInfo.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.QuickInfo.fs @@ -352,7 +352,6 @@ Full name: Microsoft.FSharp.Control.Async""".TrimStart().Replace("\r\n", "\n") [] [] [] - [] //This is to test when the message is null in the TypeProviderXmlDocAttribute for TypeProvider Type member public this.``TypeProvider.XmlDocAttribute.Type.WithNullComment``() = @@ -360,13 +359,12 @@ Full name: Microsoft.FSharp.Control.Async""".TrimStart().Replace("\r\n", "\n") let a = typeof """ this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "T(*Marker*)", - "type T =\n new : unit -> T\n static member M : unit -> int []\n static member StaticProp : decimal\n member Event1 : EventHandler", + "type T =\n new : unit -> T\n static member M : unit -> int []\n static member StaticProp : decimal\n event Event1 : EventHandler", addtlRefAssy = [PathRelativeToTestAssembly( @"XmlDocAttributeWithNullComment.dll")]) [] [] [] - [] //This is to test when there is empty message from the TypeProviderXmlDocAttribute for TypeProvider Type member public this.``TypeProvider.XmlDocAttribute.Type.WithEmptyComment``() = @@ -374,7 +372,7 @@ Full name: Microsoft.FSharp.Control.Async""".TrimStart().Replace("\r\n", "\n") let a = typeof """ this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "T(*Marker*)", - "type T =\n new : unit -> T\n static member M : unit -> int []\n static member StaticProp : decimal\n member Event1 : EventHandler", + "type T =\n new : unit -> T\n static member M : unit -> int []\n static member StaticProp : decimal\n event Event1 : EventHandler", addtlRefAssy = [PathRelativeToTestAssembly( @"XmlDocAttributeWithEmptyComment.dll")]) @@ -511,7 +509,6 @@ Full name: Microsoft.FSharp.Control.Async""".TrimStart().Replace("\r\n", "\n") [] [] [] - [] //This is to test when the message is null in the TypeProviderXmlDocAttribute for TypeProvider Event member public this.``TypeProvider.XmlDocAttribute.Event.WithNullComment``() = @@ -520,13 +517,12 @@ Full name: Microsoft.FSharp.Control.Async""".TrimStart().Replace("\r\n", "\n") t.Event1(*Marker*)""" this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "Event1(*Marker*)", - "member N.T.Event1: IEvent", + "event N.T.Event1: IEvent", addtlRefAssy = [PathRelativeToTestAssembly( @"XmlDocAttributeWithNullComment.dll")]) [] [] [] - [] //This is to test when there is empty message from the TypeProviderXmlDocAttribute for TypeProvider Event member public this.``TypeProvider.XmlDocAttribute.Event.WithEmptyComment``() = @@ -535,7 +531,7 @@ Full name: Microsoft.FSharp.Control.Async""".TrimStart().Replace("\r\n", "\n") t.Event1(*Marker*)""" this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "Event1(*Marker*)", - "member N.T.Event1: IEvent", + "event N.T.Event1: IEvent", addtlRefAssy = [PathRelativeToTestAssembly( @"XmlDocAttributeWithEmptyComment.dll")]) @@ -1038,7 +1034,6 @@ let f (tp:ITypeProvider(*$$$*)) = tp.Invalidate "Generic.LinkedList" "System.Collections.ICollection.ISynchronized" // Bug 5092: A framework class contained a private method impl [] - [] member public this.``Regression.ModulesFromExternalLibrariesBug5785``() = use _guard = this.UsingNewVS() let solution = this.CreateSolution() @@ -1949,7 +1944,8 @@ let f (tp:ITypeProvider(*$$$*)) = tp.Invalidate [ "type KeyCollection<"; "member CopyTo"; - """Represents the collection of keys in a . This class cannot be inherited.""" + "[Filename:"; "mscorlib.dll]"; + "[Signature:T:System.Collections.Generic.Dictionary`2.KeyCollection]" ] ) @@ -1968,7 +1964,8 @@ let f (tp:ITypeProvider(*$$$*)) = tp.Invalidate [ "type ArgumentException"; "member Message"; - "The exception that is thrown when one of the arguments provided to a method is not valid.Gets the current application domain for the current .""" + "[Filename"; "mscorlib.dll]"; + "[Signature:P:System.AppDomain.CurrentDomain]" ] ) @@ -2049,7 +2047,8 @@ query." "AcceptButton", (* expect to see in order... *) [ - "Gets or sets the button on the form that is clicked when the user presses the ENTER key." + "[Filename:"; "System.Windows.Forms.dll]" + "[Signature:P:System.Windows.Forms.Form.AcceptButton]" ] ) @@ -2880,7 +2879,7 @@ query." this.AssertQuickInfoContainsAtStartOfMarker (fileContent, "(*Marker0*)", "Test for members") this.AssertQuickInfoContainsAtStartOfMarker (fileContent, "(*Marker1*)", "x1 param!") - this.AssertQuickInfoContainsAtStartOfMarker (fileContent, "(*Marker2*)", "Concatenates the string representations of two specified objects.") + this.AssertQuickInfoContainsAtStartOfMarker (fileContent, "(*Marker2*)", "[ParamName: arg1]") this.AssertQuickInfoContainsAtStartOfMarker (fileContent, "(*Marker3*)", "str of case1") this.AssertQuickInfoContainsAtStartOfMarker (fileContent, "(*Marker4*)", "str of case1") this.AssertQuickInfoContainsAtStartOfMarker (fileContent, "(*Marker5*)", "value param") @@ -3244,7 +3243,7 @@ query." }""" this.AssertQuickInfoInQuery (fileContent, "(*Mark*)", "custom operation: minBy ('Value)") - [] + [] [] // QuickInfo works in a large query (using many operators) member public this.``Query.WithinLargeQuery``() = @@ -3366,19 +3365,19 @@ query." open Microsoft.FSharp.Quotations type EventBuilder() = - member _.For(ev:IObservable<'T>, loop:('T -> #IObservable<'U>)) : IObservable<'U> = failwith "" - member _.Yield(v:'T) : IObservable<'T> = failwith "" - member _.Quote(v:Quotations.Expr<'T>) : Expr<'T> = v - member _.Run(x:Expr<'T>) = Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.EvaluateQuotation x :?> 'T + member __.For(ev:IObservable<'T>, loop:('T -> #IObservable<'U>)) : IObservable<'U> = failwith "" + member __.Yield(v:'T) : IObservable<'T> = failwith "" + member __.Quote(v:Quotations.Expr<'T>) : Expr<'T> = v + member __.Run(x:Expr<'T>) = Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.EvaluateQuotation x :?> 'T [] - member _.Where (x, [] f) = Observable.filter f x + member __.Where (x, [] f) = Observable.filter f x [] - member _.Select (x, [] f) = Observable.map f x + member __.Select (x, [] f) = Observable.map f x [] - member inline _.ScanSumBy (source, [] f : 'T -> 'U) : IObservable<'U> = Observable.scan (fun a b -> a + f b) LanguagePrimitives.GenericZero<'U> source + member inline __.ScanSumBy (source, [] f : 'T -> 'U) : IObservable<'U> = Observable.scan (fun a b -> a + f b) LanguagePrimitives.GenericZero<'U> source let myquery = EventBuilder() let f = new Event() diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.QuickParse.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.QuickParse.fs index 4f2297a74e4..36fe51370d0 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.QuickParse.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.QuickParse.fs @@ -4,7 +4,7 @@ namespace Tests.LanguageService open System open NUnit.Framework -open FSharp.Compiler.EditorServices +open FSharp.Compiler [] [] diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Script.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Script.fs index ea2d28ad606..ec5f5f29188 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Script.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Script.fs @@ -907,7 +907,9 @@ type UsingMSBuild() as this = let (project, file) = createSingleFileFsxFromLines code MoveCursorToEndOfMarker(file, "System.ConsoleModifiers.Sh") let tooltip = GetQuickInfoAtCursor file - AssertContains(tooltip, @"The left or right SHIFT modifier key.") + AssertContains(tooltip, @"[Signature:F:System.ConsoleModifiers.Shift]") // A message from the mock IDocumentationBuilder + AssertContains(tooltip, @"[Filename:") + AssertContains(tooltip, @"mscorlib.dll]") // The assembly we expect the documentation to get taken from MoveCursorToEndOfMarker(file, "(3).ToString().Len") let tooltip = GetQuickInfoAtCursor file @@ -1343,8 +1345,8 @@ type UsingMSBuild() as this = %s\\FSharp.Compiler.Interactive.Settings.dll - - %s\\FSharp.Compiler.Service.dll + + %s\\FSharp.Compiler.Private.dll " binariesFolder binariesFolder) @@ -1658,10 +1660,10 @@ type UsingMSBuild() as this = Assert.IsTrue((countInvaldiationHandlersAdded() = countInvaldiationHandlersRemoved()), "Check6b2, at end, all invalidation handlers removed after explicit cleraring") checkConfigsDisposed() - [] + [] member public this.``TypeProvider.Disposal.SmokeTest1``() = this.TypeProviderDisposalSmokeTest(true) - [] + [] member public this.``TypeProvider.Disposal.SmokeTest2``() = this.TypeProviderDisposalSmokeTest(false) diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.TimeStamp.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.TimeStamp.fs index f3f72deacf8..4fdf86bca8d 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.TimeStamp.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.TimeStamp.fs @@ -46,7 +46,6 @@ type UsingMSBuild() = // In this bug, if you clean the dependent project, the dependee started getting errors again about the unresolved assembly. // The desired behavior is like C#, which is if the assembly disappears from disk, we use cached results of last time it was there. [] - [] member public this.``Regression.NoError.Timestamps.Bug3368b``() = use _guard = this.UsingNewVS() let solution = this.CreateSolution() diff --git a/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.Configs.fs b/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.Configs.fs index 74a0178e312..ff06f80bac6 100644 --- a/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.Configs.fs +++ b/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.Configs.fs @@ -27,7 +27,7 @@ open UnitTests.TestLib.ProjectSystem type public AssemblyResolverTestFixture () = [] - member public _.Init () = AssemblyResolver.addResolver () + member public __.Init () = AssemblyResolver.addResolver () [][] type Config() = diff --git a/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.Miscellaneous.fs b/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.Miscellaneous.fs index b390100ded5..1f5dfff2054 100644 --- a/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.Miscellaneous.fs +++ b/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.Miscellaneous.fs @@ -266,7 +266,8 @@ type Miscellaneous() = this.MSBuildProjectBoilerplate "Library", (fun project ccn projFileName -> let fooPath = Path.Combine(project.ProjectFolder, "foo.fs") - File.AppendAllLines(fooPath, ["#light"; "module Foo"]) + File.AppendAllText(fooPath, "#light") + File.AppendAllText(fooPath, "module Foo") //ccn((project :> IVsHierarchy), "Debug|Any CPU") let configName = "Debug" @@ -277,7 +278,6 @@ type Miscellaneous() = let buildableCfg = vsBuildableCfg :?> BuildableProjectConfig AssertEqual VSConstants.S_OK hr - let mutable isCleaning = false let success = ref false use event = new System.Threading.ManualResetEvent(false) let (hr, cookie) = @@ -286,8 +286,6 @@ type Miscellaneous() = member this.BuildBegin pfContinue = pfContinue <- 1; VSConstants.S_OK member this.BuildEnd fSuccess = success := fSuccess <> 0 - printfn "Build %s, code %i, phase: %s." (if !success then "succeeded" else "failed") fSuccess (if isCleaning then "Cleaning" else "Build") - event.Set() |> Assert.IsTrue VSConstants.S_OK member this.Tick pfContinue = pfContinue <- 1; VSConstants.S_OK @@ -303,19 +301,14 @@ type Miscellaneous() = buildableCfg.Build(0u, output, target) event.WaitOne() |> Assert.IsTrue buildMgrAccessor.EndDesignTimeBuild() |> ValidateOK // this is not a design-time build, but our mock does all the right initialization of the build manager for us, similar to what the system would do in VS for real - AssertEqual true !success - - printfn "Building..." - doBuild "Build" + AssertEqual true !success + printfn "building..." + doBuild "Build" AssertEqual true (File.Exists (Path.Combine(project.ProjectFolder, "bin\\Debug\\Blah.dll"))) - printfn "Output files present." - isCleaning <- true - printfn "Cleaning..." + printfn "cleaning..." doBuild "Clean" - printfn "Finished build-then-clean." AssertEqual false (File.Exists (Path.Combine(project.ProjectFolder, "bin\\Debug\\Blah.dll"))) - printfn "Files were cleaned." finally buildableCfg.UnadviseBuildStatusCallback(cookie) |> AssertEqual VSConstants.S_OK )) diff --git a/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.UpToDate.fs b/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.UpToDate.fs index a8775d777a0..41b596fcfac 100644 --- a/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.UpToDate.fs +++ b/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.UpToDate.fs @@ -29,7 +29,7 @@ type UpToDate() = inherit TheTests() [] - member public _.Init () = AssemblyResolver.addResolver () + member public __.Init () = AssemblyResolver.addResolver () [] member public this.ItemInputs () = diff --git a/vsintegration/tests/UnitTests/ProjectOptionsBuilder.fs b/vsintegration/tests/UnitTests/ProjectOptionsBuilder.fs index 847adf617b2..106b7602a56 100644 --- a/vsintegration/tests/UnitTests/ProjectOptionsBuilder.fs +++ b/vsintegration/tests/UnitTests/ProjectOptionsBuilder.fs @@ -3,7 +3,7 @@ open System open System.IO open System.Xml.Linq -open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.SourceCodeServices module FileSystemHelpers = let safeDeleteFile (path: string) = @@ -81,6 +81,7 @@ module internal ProjectOptionsBuilder = LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None + ExtraProjectInfo = None Stamp = None } { @@ -124,7 +125,7 @@ module internal ProjectOptionsBuilder = let otherOptions = Array.append projectOptions.Options.OtherOptions binaryRefs { projectOptions with Options = { projectOptions.Options with - ReferencedProjects = referenceList |> Array.map FSharpReferencedProject.CreateFSharp + ReferencedProjects = referenceList OtherOptions = otherOptions } }) diff --git a/vsintegration/tests/UnitTests/QuickInfoProviderTests.fs b/vsintegration/tests/UnitTests/QuickInfoProviderTests.fs index 8c4eabc9b66..e412029cf26 100644 --- a/vsintegration/tests/UnitTests/QuickInfoProviderTests.fs +++ b/vsintegration/tests/UnitTests/QuickInfoProviderTests.fs @@ -14,12 +14,12 @@ // and capturing large amounts of structured output. (* cd Debug\net40\bin - .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Service.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\CompletionProviderTests.fs + .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Private.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\CompletionProviderTests.fs .\VisualFSharp.UnitTests.exe *) // Technique 3: // -// Use F# Interactive. This only works for FSharp.Compiler.Service.dll which has a public API +// Use F# Interactive. This only works for FSharp.Compiler.Private.dll which has a public API // // ------------------------------------------------------------------------------------------------------------------------ @@ -74,7 +74,7 @@ let private getQuickInfoText (FSharpToolTipText elements) : string = let remarksText = (match remarks with [] -> "" | _ -> "\n" + String.concat "\n" remarks) text + remarksText + tpText | FSharpToolTipElement.CompositionError(error) -> error - elements |> List.map (FSharpToolTip.ToFSharpToolTipElement >> parseElement) |> String.concat "\n" |> normalizeLineEnds + elements |> List.map (Tooltips.ToFSharpToolTipElement >> parseElement) |> String.concat "\n" |> normalizeLineEnds [] let ShouldShowQuickInfoAtCorrectPositions() = diff --git a/vsintegration/tests/UnitTests/QuickInfoTests.fs b/vsintegration/tests/UnitTests/QuickInfoTests.fs index b53905f57df..415079942e7 100644 --- a/vsintegration/tests/UnitTests/QuickInfoTests.fs +++ b/vsintegration/tests/UnitTests/QuickInfoTests.fs @@ -1,7 +1,7 @@ namespace Microsoft.VisualStudio.FSharp.Editor.Tests.Roslyn open System.IO -open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.SourceCodeServices open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Text open Microsoft.VisualStudio.FSharp.Editor @@ -15,8 +15,9 @@ module QuickInfo = let internal GetQuickInfo (project:FSharpProject) (fileName:string) (caretPosition:int) = async { let code = File.ReadAllText(fileName) - let document, _ = RoslynTestHelpers.CreateDocument(fileName, code) - return! FSharpAsyncQuickInfoSource.ProvideQuickInfo(document, caretPosition) + let sourceText = SourceText.From(code) + let documentId = DocumentId.CreateNewId(ProjectId.CreateNewId()) // only used for caching purposes + return! FSharpAsyncQuickInfoSource.ProvideQuickInfo(checker, documentId, sourceText, fileName, caretPosition, FSharpParsingOptions.Default, project.Options, 0, LanguageServicePerformanceOptions.Default) } |> Async.RunSynchronously let GetQuickInfoText (project:FSharpProject) (fileName:string) (caretPosition:int) = @@ -25,8 +26,8 @@ let GetQuickInfoText (project:FSharpProject) (fileName:string) (caretPosition:in | Some (quickInfo) -> let documentationBuilder = { new IDocumentationBuilder with - override _.AppendDocumentationFromProcessedXML(_, _, _, _, _, _) = () - override _.AppendDocumentation(_, _, _, _, _, _, _) = () + override __.AppendDocumentationFromProcessedXML(_, _, _, _, _, _) = () + override __.AppendDocumentation(_, _, _, _, _, _, _) = () } let mainDescription, docs = FSharpAsyncQuickInfoSource.BuildSingleQuickInfoItem documentationBuilder quickInfo let mainTextItems = diff --git a/vsintegration/tests/UnitTests/RoslynSourceTextTests.fs b/vsintegration/tests/UnitTests/RoslynSourceTextTests.fs index 54a92f3cd0b..9a817df9771 100644 --- a/vsintegration/tests/UnitTests/RoslynSourceTextTests.fs +++ b/vsintegration/tests/UnitTests/RoslynSourceTextTests.fs @@ -6,7 +6,7 @@ open System open NUnit.Framework open Microsoft.VisualStudio.FSharp.Editor -open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Text open Microsoft.CodeAnalysis.Text [] diff --git a/vsintegration/tests/UnitTests/SemanticColorizationServiceTests.fs b/vsintegration/tests/UnitTests/SemanticColorizationServiceTests.fs index 78d0732493b..e1591ed0cb1 100644 --- a/vsintegration/tests/UnitTests/SemanticColorizationServiceTests.fs +++ b/vsintegration/tests/UnitTests/SemanticColorizationServiceTests.fs @@ -4,9 +4,8 @@ namespace Microsoft.VisualStudio.FSharp.Editor.Tests.Roslyn open System open NUnit.Framework open Microsoft.VisualStudio.FSharp.Editor -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Text +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.Classification @@ -25,16 +24,17 @@ type SemanticClassificationServiceTests() = LoadTime = DateTime.MaxValue UnresolvedReferences = None OriginalLoadReferences = [] + ExtraProjectInfo = None Stamp = None } let checker = FSharpChecker.Create() let perfOptions = { LanguageServicePerformanceOptions.Default with AllowStaleCompletionResults = false } - let getRanges (source: string) : SemanticClassificationItem list = + let getRanges (source: string) : struct (Range.range * SemanticClassificationType) list = asyncMaybe { - let document, _ = RoslynTestHelpers.CreateDocument(filePath, source) - let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync("SemanticClassificationServiceTests") |> liftAsync + + let! _, _, checkFileResults = checker.ParseAndCheckDocument(filePath, 0, SourceText.From(source), projectOptions, perfOptions, "") return checkFileResults.GetSemanticClassification(None) } |> Async.RunSynchronously @@ -45,17 +45,17 @@ type SemanticClassificationServiceTests() = let text = SourceText.From(fileContents) let ranges = getRanges fileContents let line = text.Lines.GetLinePosition (fileContents.IndexOf(marker) + marker.Length - 1) - let markerPos = Position.mkPos (Line.fromZ line.Line) (line.Character + marker.Length - 1) - match ranges |> List.tryFind (fun item -> Range.rangeContainsPos item.Range markerPos) with + let markerPos = Range.mkPos (Range.Line.fromZ line.Line) (line.Character + marker.Length - 1) + match ranges |> List.tryFind (fun struct (range, _) -> Range.rangeContainsPos range markerPos) with | None -> Assert.Fail("Cannot find colorization data for end of marker") - | Some item -> Assert.AreEqual(classificationType, FSharpClassificationTypes.getClassificationTypeName item.Type, "Classification data doesn't match for end of marker") + | Some(_, ty) -> Assert.AreEqual(classificationType, FSharpClassificationTypes.getClassificationTypeName ty, "Classification data doesn't match for end of marker") let verifyNoClassificationDataAtEndOfMarker(fileContents: string, marker: string, classificationType: string) = let text = SourceText.From(fileContents) let ranges = getRanges fileContents let line = text.Lines.GetLinePosition (fileContents.IndexOf(marker) + marker.Length - 1) - let markerPos = Position.mkPos (Line.fromZ line.Line) (line.Character + marker.Length - 1) - let anyData = ranges |> List.exists (fun item -> Range.rangeContainsPos item.Range markerPos && ((FSharpClassificationTypes.getClassificationTypeName item.Type) = classificationType)) + let markerPos = Range.mkPos (Range.Line.fromZ line.Line) (line.Character + marker.Length - 1) + let anyData = ranges |> List.exists (fun struct (range, sct) -> Range.rangeContainsPos range markerPos && ((FSharpClassificationTypes.getClassificationTypeName sct) = classificationType)) Assert.False(anyData, "Classification data was found when it wasn't expected.") [] @@ -65,7 +65,7 @@ type SemanticClassificationServiceTests() = [] [] [] - member _.Measured_Types(marker: string, classificationType: string) = + member __.Measured_Types(marker: string, classificationType: string) = verifyClassificationAtEndOfMarker( """#light (*Light*) open System @@ -99,7 +99,7 @@ type SemanticClassificationServiceTests() = [] [] [] - member _.MutableValues(marker: string, classificationType: string) = + member __.MutableValues(marker: string, classificationType: string) = let sourceText =""" type R1 = { mutable (*1*)Doop: int} let r1 = { (*2*)Doop = 12 } @@ -123,30 +123,6 @@ r.MutableField := 3 """ verifyClassificationAtEndOfMarker(sourceText, marker, classificationType) - [] - [] - [] - [] - [] - [] - [] - member _.Disposables(marker: string, classificationType: string) = - let sourceText = """ -open System - -type (*1*)Disposable() = - interface IDisposable with - member _.Dispose() = () - -let (*2*)topLevel1 = new (*3*)Disposable() -let (*4*)topLevel2 = { new IDisposable with member _.Dispose() = () } - -let f() = - let (*5*)local1 = new (*6*)Disposable() - let (*7*)local2 = { new IDisposable with member _.Dispose() = () } - () -""" - verifyClassificationAtEndOfMarker(sourceText, marker, classificationType) [] [] @@ -154,7 +130,7 @@ let f() = [] [] [] - member _.NoInrefsExpected(marker: string, classificationType: string) = + member __.NoInrefsExpected(marker: string, classificationType: string) = let sourceText = """ let f (item: (*1*)inref) = printfn "%d" (*2*)item let g() = diff --git a/vsintegration/tests/UnitTests/SignatureHelpProviderTests.fs b/vsintegration/tests/UnitTests/SignatureHelpProviderTests.fs index 77b8038e98c..02252928b39 100644 --- a/vsintegration/tests/UnitTests/SignatureHelpProviderTests.fs +++ b/vsintegration/tests/UnitTests/SignatureHelpProviderTests.fs @@ -1,22 +1,37 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. +// +// To run the tests in this file: +// +// Technique 1: Compile VisualFSharp.UnitTests.dll and run it as a set of unit tests +// +// Technique 2: +// +// Enable some tests in the #if EXE section at the end of the file, +// then compile this file as an EXE that has InternalsVisibleTo access into the +// appropriate DLLs. This can be the quickest way to get turnaround on updating the tests +// and capturing large amounts of structured output. +(* + cd Debug\net40\bin + .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Private.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\SignatureHelpProviderTests.fs + .\VisualFSharp.UnitTests.exe +*) +// Technique 3: +// +// Use F# Interactive. This only works for FSharp.Compiler.Private.dll which has a public API [] module Microsoft.VisualStudio.FSharp.Editor.Tests.Roslyn.SignatureHelpProvider open System open System.IO - +open System.Text open NUnit.Framework - -open Microsoft.VisualStudio.FSharp.Editor - +open Microsoft.CodeAnalysis.Text open VisualFSharp.UnitTests.Roslyn - +open Microsoft.VisualStudio.FSharp.Editor +open FSharp.Compiler.SourceCodeServices open UnitTests.TestLib.LanguageService - -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Text - +open FSharp.Compiler.Range open Microsoft.CodeAnalysis -open Microsoft.CodeAnalysis.Text let filePath = "C:\\test.fs" @@ -33,6 +48,7 @@ let internal projectOptions = { LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None + ExtraProjectInfo = None Stamp = None } @@ -53,13 +69,16 @@ let GetSignatureHelp (project:FSharpProject) (fileName:string) (caretPosition:in let textLines = sourceText.Lines let caretLinePos = textLines.GetLinePosition(caretPosition) let caretLineColumn = caretLinePos.Character + let perfOptions = LanguageServicePerformanceOptions.Default + let textVersionHash = 1 - let document = RoslynTestHelpers.CreateDocument(fileName, sourceText, options = project.Options) - let parseResults, checkFileResults = - document.GetFSharpParseAndCheckResultsAsync("GetSignatureHelp") - |> Async.RunSynchronously + let parseResults, _, checkFileResults = + let x = + checker.ParseAndCheckDocument(fileName, textVersionHash, sourceText, project.Options, perfOptions, "TestSignatureHelpProvider") + |> Async.RunSynchronously + x.Value - let paramInfoLocations = parseResults.FindParameterLocations(Position.fromZ caretLinePos.Line caretLineColumn).Value + let paramInfoLocations = parseResults.FindNoteworthyParamInfoLocations(Pos.fromZ caretLinePos.Line caretLineColumn).Value let triggered = FSharpSignatureHelpProvider.ProvideMethodsAsyncAux( caretLinePos, @@ -93,236 +112,34 @@ let GetCompletionTypeNamesFromXmlString (xml:string) = use project = CreateProject xml GetCompletionTypeNamesFromCursorPosition project -let assertSignatureHelpForMethodCalls (fileContents: string) (marker: string) (expected: (string * int * int * string option) option) = - let caretPosition = fileContents.IndexOf(marker) + marker.Length - let triggerChar = if marker ="," then Some ',' elif marker = "(" then Some '(' elif marker = "<" then Some '<' else None - let sourceText = SourceText.From(fileContents) - let textLines = sourceText.Lines - let caretLinePos = textLines.GetLinePosition(caretPosition) - let caretLineColumn = caretLinePos.Character - - let document = RoslynTestHelpers.CreateDocument(filePath, sourceText, options = projectOptions) - let parseResults, checkFileResults = - document.GetFSharpParseAndCheckResultsAsync("assertSignatureHelpForMethodCalls") - |> Async.RunSynchronously - - let actual = - let paramInfoLocations = parseResults.FindParameterLocations(Position.fromZ caretLinePos.Line caretLineColumn) - match paramInfoLocations with - | None -> None - | Some paramInfoLocations -> - let triggered = - FSharpSignatureHelpProvider.ProvideMethodsAsyncAux( - caretLinePos, - caretLineColumn, - paramInfoLocations, - checkFileResults, - DefaultDocumentationProvider, - sourceText, - caretPosition, - triggerChar) - |> Async.RunSynchronously - - checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() - match triggered with - | None -> None - | Some data -> Some (data.ApplicableSpan.ToString(),data.ArgumentIndex,data.ArgumentCount,data.ArgumentName) - - Assert.AreEqual(expected, actual) - -let assertSignatureHelpForFunctionApplication (fileContents: string) (marker: string) expectedArgumentCount expectedArgumentIndex = - let caretPosition = fileContents.LastIndexOf(marker) + marker.Length - let document, sourceText = RoslynTestHelpers.CreateDocument(filePath, fileContents) - - let parseResults, checkFileResults = - document.GetFSharpParseAndCheckResultsAsync("assertSignatureHelpForFunctionApplication") - |> Async.RunSynchronously - - let adjustedColumnInSource = - let rec loop ch pos = - if Char.IsWhiteSpace(ch) then - loop sourceText.[pos - 1] (pos - 1) - else - pos - loop sourceText.[caretPosition - 1] (caretPosition - 1) - - let sigHelp = - FSharpSignatureHelpProvider.ProvideParametersAsyncAux( - parseResults, - checkFileResults, - document.Id, - [], - DefaultDocumentationProvider, - sourceText, - caretPosition, - adjustedColumnInSource, - filePath) - |> Async.RunSynchronously - - checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() - - match sigHelp with - | None -> Assert.Fail("Expected signature help") - | Some sigHelp -> - Assert.AreEqual(expectedArgumentCount, sigHelp.ArgumentCount) - Assert.AreEqual(expectedArgumentIndex, sigHelp.ArgumentIndex) - -[] -module ``Gives signature help in method calls`` = - - [] - let ``dot``() = - let fileContents = """ -//1 -System.Console.WriteLine(format="Hello, {0}",arg0="World") -""" - let marker = "." - assertSignatureHelpForMethodCalls fileContents marker None - - [] - let ``System``() = - let fileContents = """ -//1 -System.Console.WriteLine(format="Hello, {0}",arg0="World") -""" - let marker = "System" - assertSignatureHelpForMethodCalls fileContents marker None - - [] - let ``WriteLine``() = - let fileContents = """ -//1 -System.Console.WriteLine(format="Hello, {0}",arg0="World") -""" - let marker = "WriteLine" - assertSignatureHelpForMethodCalls fileContents marker None - - [] - let ``open paren``() = - let fileContents = """ -//1 -System.Console.WriteLine(format="Hello, {0}",arg0="World") -""" - let marker = "(" - assertSignatureHelpForMethodCalls fileContents marker (Some ("[7..64)", 0, 2, Some "format")) - - [] - let ``named arg``() = - let fileContents = """ -//1 -System.Console.WriteLine(format="Hello, {0}",arg0="World") -""" - let marker = "format" - assertSignatureHelpForMethodCalls fileContents marker (Some ("[7..64)", 0, 2, Some "format")) - - [] - let ``comma``() = - let fileContents = """ -//1 -System.Console.WriteLine(format="Hello, {0}",arg0="World") -""" - let marker = "," - assertSignatureHelpForMethodCalls fileContents marker None - - [] - let ``second comma``() = - let fileContents = """ -//1 -System.Console.WriteLine(format="Hello, {0}",arg0="World") -""" - assertSignatureHelpForMethodCalls fileContents """",""" (Some ("[7..64)", 1, 2, Some "arg0")) - - [] - let ``second named arg``() = - let fileContents = """ -//1 -System.Console.WriteLine(format="Hello, {0}",arg0="World") -""" - let marker = "arg0" - assertSignatureHelpForMethodCalls fileContents marker (Some ("[7..64)", 1, 2, Some "arg0")) - - [] - let ``second named arg equals``() = - let fileContents = """ -//1 -System.Console.WriteLine(format="Hello, {0}",arg0="World") -""" - let marker = "arg0=" - assertSignatureHelpForMethodCalls fileContents marker (Some ("[7..64)", 1, 2, Some "arg0")) - - [] - let ``World``() = - let fileContents = """ -//1 -System.Console.WriteLine(format="Hello, {0}",arg0="World") -""" - let marker = "World" - assertSignatureHelpForMethodCalls fileContents marker (Some ("[7..64)", 1, 2, Some "arg0")) - - [] - let ``end paren``() = - let fileContents = """ +[] +let ShouldGiveSignatureHelpAtCorrectMarkers() = + let manyTestCases = + [ (""" //1 System.Console.WriteLine(format="Hello, {0}",arg0="World") - """ - let marker = ")" - assertSignatureHelpForMethodCalls fileContents marker (Some("[7..64)", 0, 2, Some "format")) - -[] -module ``Signature help with list literals, parens, etc`` = - [] - let ``Open paren``() = - let fileContents = """ -//2 -open System -Console.WriteLine([(1,2)]) -""" - let marker = "WriteLine(" - assertSignatureHelpForMethodCalls fileContents marker (Some ("[20..45)", 0, 0, None)) - - [] - let ``comma``() = - let fileContents = """ -//2 -open System -Console.WriteLine([(1,2)]) -""" - let marker = "," - assertSignatureHelpForMethodCalls fileContents marker None - - [] - let ``list and tuple bracket pair start``() = - let fileContents = """ +""", + [(".", None); + ("System", None); + ("WriteLine", None); + ("(", Some ("[7..64)", 0, 2, Some "format")); + ("format", Some ("[7..64)", 0, 2, Some "format")); + (",", None); + ("""",""", Some ("[7..64)", 1, 2, Some "arg0")); + ("arg0", Some ("[7..64)", 1, 2, Some "arg0")); + ("arg0=", Some ("[7..64)", 1, 2, Some "arg0")); + ("World", Some ("[7..64)", 1, 2, Some "arg0")); + (")", Some("[7..64)", 0, 2, Some "format"))]); + ( """ //2 open System Console.WriteLine([(1,2)]) -""" - let marker = "[(" - assertSignatureHelpForMethodCalls fileContents marker (Some ("[20..45)", 0, 1, None)) - -[] -module ``Unfinished parentheses`` = - [] - let ``Unfinished parentheses``() = - let fileContents = """ -let _ = System.DateTime( -""" - let marker = "let _ = System.DateTime(" - assertSignatureHelpForMethodCalls fileContents marker (Some ("[10..26)", 0, 0, None)) - - [] - let ``Unfinished parentheses with comma``() = - let fileContents = """ -let _ = System.DateTime(1L, -""" - let marker = "let _ = System.DateTime(1L," - assertSignatureHelpForMethodCalls fileContents marker (Some ("[10..31)", 1, 2, None )) - -[] -let ``type provider static parameter tests``() = - // This is old code and I'm too lazy to move it all out. - Phillip Carter - let manyTestCases = - [ +""", + [ + ("WriteLine(", Some ("[20..45)", 0, 0, None)); + (",", None); + ("[(", Some ("[20..45)", 0, 1, None)) + ]); ( """ //3 type foo = N1.T< @@ -370,106 +187,317 @@ type foo5 = N1.T ("type foo5 = N1.T] -module ``Function argument applications`` = - [] - let ``single argument function application``() = - let fileContents = """ + printfn "Test case: fileContents = %s..." fileContents.[2..4] + + let actual = + [ for (marker, expected) in testCases do + printfn "Test case: marker = %s" marker + let caretPosition = fileContents.IndexOf(marker) + marker.Length + let triggerChar = if marker ="," then Some ',' elif marker = "(" then Some '(' elif marker = "<" then Some '<' else None + let sourceText = SourceText.From(fileContents) + let textLines = sourceText.Lines + let caretLinePos = textLines.GetLinePosition(caretPosition) + let caretLineColumn = caretLinePos.Character + let perfOptions = LanguageServicePerformanceOptions.Default + let textVersionHash = 0 + + let parseResults, _, checkFileResults = + let x = + checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, projectOptions, perfOptions, "TestSignatureHelpProvider") + |> Async.RunSynchronously + + if x.IsNone then + Assert.Fail("Could not parse and check document.") + x.Value + + let actual = + let paramInfoLocations = parseResults.FindNoteworthyParamInfoLocations(Pos.fromZ caretLinePos.Line caretLineColumn) + match paramInfoLocations with + | None -> None + | Some paramInfoLocations -> + let triggered = + FSharpSignatureHelpProvider.ProvideMethodsAsyncAux( + caretLinePos, + caretLineColumn, + paramInfoLocations, + checkFileResults, + DefaultDocumentationProvider, + sourceText, + caretPosition, + triggerChar) + |> Async.RunSynchronously + + checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() + match triggered with + | None -> None + | Some data -> Some (data.ApplicableSpan.ToString(),data.ArgumentIndex,data.ArgumentCount,data.ArgumentName) + + if expected <> actual then + sb.AppendLine(sprintf "FSharpCompletionProvider.ProvideMethodsAsyncAux() gave unexpected results, expected %A, got %A" expected actual) |> ignore + yield (marker, actual) ] + + printfn "(\"\"\"%s\n\"\"\",\n%s)" fileContents ((sprintf "%A" actual).Replace("null","None")) + + + match sb.ToString() with + | "" -> () + | errorText -> Assert.Fail errorText + +[] +let ``single argument function application``() = + let fileContents = """ sqrt - """ - let marker = "sqrt " - assertSignatureHelpForFunctionApplication fileContents marker 1 0 +""" + let marker = "sqrt " + let caretPosition = fileContents.IndexOf(marker) + marker.Length + let sourceText = SourceText.From(fileContents) + let perfOptions = LanguageServicePerformanceOptions.Default + let textVersionHash = 0 + let documentId = DocumentId.CreateNewId(ProjectId.CreateNewId()) + + let parseResults, _, checkFileResults = + let x = + checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, projectOptions, perfOptions, "TestSignatureHelpProvider") + |> Async.RunSynchronously + + if x.IsNone then + Assert.Fail("Could not parse and check document.") + x.Value + + let sigHelp = + FSharpSignatureHelpProvider.ProvideParametersAsyncAux( + parseResults, + checkFileResults, + documentId, + [], + DefaultDocumentationProvider, + sourceText, + caretPosition, + filePath) + |> Async.RunSynchronously - [] - let ``multi-argument function application``() = - let fileContents = """ + checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() + + match sigHelp with + | None -> Assert.Fail("Expected signature help") + | Some sigHelp -> + Assert.AreEqual(1, sigHelp.ArgumentCount) + Assert.AreEqual(0, sigHelp.ArgumentIndex) + +[] +let ``multi-argument function application``() = + let fileContents = """ let add2 x y = x + y add2 1 - """ - let marker = "add2 1 " - assertSignatureHelpForFunctionApplication fileContents marker 2 1 +""" + let marker = "add2 1 " + let caretPosition = fileContents.IndexOf(marker) + marker.Length + let sourceText = SourceText.From(fileContents) + let perfOptions = LanguageServicePerformanceOptions.Default + let textVersionHash = 0 + let documentId = DocumentId.CreateNewId(ProjectId.CreateNewId()) + + let parseResults, _, checkFileResults = + let x = + checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, projectOptions, perfOptions, "TestSignatureHelpProvider") + |> Async.RunSynchronously - [] - let ``qualified function application``() = - let fileContents = """ + if x.IsNone then + Assert.Fail("Could not parse and check document.") + x.Value + + let sigHelp = + FSharpSignatureHelpProvider.ProvideParametersAsyncAux( + parseResults, + checkFileResults, + documentId, + [], + DefaultDocumentationProvider, + sourceText, + caretPosition, + filePath) + |> Async.RunSynchronously + + checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() + + match sigHelp with + | None -> Assert.Fail("Expected signature help") + | Some sigHelp -> + Assert.AreEqual(2, sigHelp.ArgumentCount) + Assert.AreEqual(1, sigHelp.ArgumentIndex) + +[] +let ``qualified function application``() = + let fileContents = """ module M = let f x = x M.f - """ - let marker = "M.f " - assertSignatureHelpForFunctionApplication fileContents marker 1 0 +""" + let marker = "M.f " + let caretPosition = fileContents.IndexOf(marker) + marker.Length + let sourceText = SourceText.From(fileContents) + let perfOptions = LanguageServicePerformanceOptions.Default + let textVersionHash = 0 + let documentId = DocumentId.CreateNewId(ProjectId.CreateNewId()) + + let parseResults, _, checkFileResults = + let x = + checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, projectOptions, perfOptions, "TestSignatureHelpProvider") + |> Async.RunSynchronously - [] - let ``function application in single pipeline with no additional args``() = - let fileContents = """ -[1..10] |> id - """ - let marker = "id " - let caretPosition = fileContents.IndexOf(marker) + marker.Length + if x.IsNone then + Assert.Fail("Could not parse and check document.") + x.Value + + let sigHelp = + FSharpSignatureHelpProvider.ProvideParametersAsyncAux( + parseResults, + checkFileResults, + documentId, + [], + DefaultDocumentationProvider, + sourceText, + caretPosition, + filePath) + |> Async.RunSynchronously + + checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() + + match sigHelp with + | None -> Assert.Fail("Expected signature help") + | Some sigHelp -> + Assert.AreEqual(1, sigHelp.ArgumentCount) + Assert.AreEqual(0, sigHelp.ArgumentIndex) - let document, sourceText = RoslynTestHelpers.CreateDocument(filePath, fileContents) +[] +let ``function application in single pipeline with no additional args``() = + let fileContents = """ +[1..10] |> id +""" + let marker = "id " + let caretPosition = fileContents.IndexOf(marker) + marker.Length + let sourceText = SourceText.From(fileContents) + let perfOptions = LanguageServicePerformanceOptions.Default + let textVersionHash = 0 + let documentId = DocumentId.CreateNewId(ProjectId.CreateNewId()) - let parseResults, checkFileResults = - document.GetFSharpParseAndCheckResultsAsync("function application in single pipeline with no additional args") + let parseResults, _, checkFileResults = + let x = + checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, projectOptions, perfOptions, "TestSignatureHelpProvider") |> Async.RunSynchronously + + if x.IsNone then + Assert.Fail("Could not parse and check document.") + x.Value - let adjustedColumnInSource = - let rec loop ch pos = - if Char.IsWhiteSpace(ch) then - loop sourceText.[pos - 1] (pos - 1) - else - pos - loop sourceText.[caretPosition - 1] (caretPosition - 1) - - let sigHelp = - FSharpSignatureHelpProvider.ProvideParametersAsyncAux( - parseResults, - checkFileResults, - document.Id, - [], - DefaultDocumentationProvider, - sourceText, - caretPosition, - adjustedColumnInSource, - filePath) - |> Async.RunSynchronously + let sigHelp = + FSharpSignatureHelpProvider.ProvideParametersAsyncAux( + parseResults, + checkFileResults, + documentId, + [], + DefaultDocumentationProvider, + sourceText, + caretPosition, + filePath) + |> Async.RunSynchronously - checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() + checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() - Assert.True(sigHelp.IsNone, "No signature help is expected because there are no additional args to apply.") + Assert.True(sigHelp.IsNone, "No signature help is expected because there are no additional args to apply.") - [] - let ``function application in single pipeline with an additional argument``() = - let fileContents = """ +[] +let ``function application in single pipeline with an additional argument``() = + let fileContents = """ [1..10] |> List.map - """ - let marker = "List.map " - assertSignatureHelpForFunctionApplication fileContents marker 1 0 +""" + let marker = "List.map " + let caretPosition = fileContents.IndexOf(marker) + marker.Length + let sourceText = SourceText.From(fileContents) + let perfOptions = LanguageServicePerformanceOptions.Default + let textVersionHash = 0 + let documentId = DocumentId.CreateNewId(ProjectId.CreateNewId()) + + let parseResults, _, checkFileResults = + let x = + checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, projectOptions, perfOptions, "TestSignatureHelpProvider") + |> Async.RunSynchronously - [] - let ``function application in middle of pipeline with an additional argument``() = - let fileContents = """ + if x.IsNone then + Assert.Fail("Could not parse and check document.") + x.Value + + let sigHelp = + FSharpSignatureHelpProvider.ProvideParametersAsyncAux( + parseResults, + checkFileResults, + documentId, + [], + DefaultDocumentationProvider, + sourceText, + caretPosition, + filePath) + |> Async.RunSynchronously + + checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() + + match sigHelp with + | None -> Assert.Fail("Expected signature help") + | Some sigHelp -> + Assert.AreEqual(1, sigHelp.ArgumentCount) + Assert.AreEqual(0, sigHelp.ArgumentIndex) + +[] +let ``function application in middle of pipeline with an additional argument``() = + let fileContents = """ [1..10] |> List.map |> List.filer (fun x -> x > 3) - """ - let marker = "List.map " - assertSignatureHelpForFunctionApplication fileContents marker 1 0 - - [] - let ``function application with function as parameter``() = - let fileContents = """ -let derp (f: int -> int -> int) x = f x 1 -derp """ - let marker = "derp " - assertSignatureHelpForFunctionApplication fileContents marker 2 0 + let marker = "List.map " + let caretPosition = fileContents.IndexOf(marker) + marker.Length + let sourceText = SourceText.From(fileContents) + let perfOptions = LanguageServicePerformanceOptions.Default + let textVersionHash = 0 + let documentId = DocumentId.CreateNewId(ProjectId.CreateNewId()) + + let parseResults, _, checkFileResults = + let x = + checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, projectOptions, perfOptions, "TestSignatureHelpProvider") + |> Async.RunSynchronously + + if x.IsNone then + Assert.Fail("Could not parse and check document.") + x.Value + + let sigHelp = + FSharpSignatureHelpProvider.ProvideParametersAsyncAux( + parseResults, + checkFileResults, + documentId, + [], + DefaultDocumentationProvider, + sourceText, + caretPosition, + filePath) + |> Async.RunSynchronously + + checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() + + match sigHelp with + | None -> Assert.Fail("Expected signature help") + | Some sigHelp -> + Assert.AreEqual(1, sigHelp.ArgumentCount) + Assert.AreEqual(0, sigHelp.ArgumentIndex) // migrated from legacy test [] diff --git a/vsintegration/tests/UnitTests/TestLib.LanguageService.fs b/vsintegration/tests/UnitTests/TestLib.LanguageService.fs index c33223c6ff0..fbd950480f9 100644 --- a/vsintegration/tests/UnitTests/TestLib.LanguageService.fs +++ b/vsintegration/tests/UnitTests/TestLib.LanguageService.fs @@ -12,9 +12,9 @@ open Salsa.VsOpsUtils open Salsa.VsMocks open UnitTests.TestLib.Salsa open UnitTests.TestLib.Utils +open FSharp.Compiler open System.Text.RegularExpressions -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.Diagnostics +open FSharp.Compiler.SourceCodeServices open Microsoft.VisualStudio.FSharp #nowarn "52" // The value has been copied to ensure the original is not mutated @@ -159,7 +159,7 @@ type internal GlobalParseAndTypeCheckCounter private(initialParseCount:int, init static member StartNew(vs) = TakeCoffeeBreak(vs) let n = IncrementalBuilderEventTesting.GetCurrentIncrementalBuildEventNum() - new GlobalParseAndTypeCheckCounter(FSharpChecker.ActualParseFileCount, FSharpChecker.ActualCheckFileCount, n, vs) + new GlobalParseAndTypeCheckCounter(FSharpChecker.GlobalForegroundParseCountStatistic, FSharpChecker.GlobalForegroundTypeCheckCountStatistic, n, vs) member private this.GetEvents() = TakeCoffeeBreak(vs) let n = IncrementalBuilderEventTesting.GetCurrentIncrementalBuildEventNum() @@ -422,7 +422,7 @@ type LanguageServiceBaseTests() = failwith "LanguageServiceBaseTests.UsingNewVS was called when 'active' instance of VS is not 'default' one - this may denote that tests contains errors" currentVS <- ops.CreateVisualStudio() { new System.IDisposable with - member _.Dispose() = + member __.Dispose() = if box currentVS = box defaultVS then failwith "At this moment 'current' instance of VS cannot be the same as the 'default' one. This may denote that tests contains errors." GlobalFunctions.Cleanup(currentVS) diff --git a/vsintegration/tests/UnitTests/Tests.Build.fs b/vsintegration/tests/UnitTests/Tests.Build.fs index 19f4bffd569..c011dcfe260 100644 --- a/vsintegration/tests/UnitTests/Tests.Build.fs +++ b/vsintegration/tests/UnitTests/Tests.Build.fs @@ -79,6 +79,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--codepage:65001" + Environment.NewLine + "--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -94,6 +95,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("-g" + Environment.NewLine + "--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -109,6 +111,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--debug:pdbonly" + Environment.NewLine + "--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -126,6 +129,7 @@ type Build() = 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 + @@ -141,6 +145,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + "--nowarn:52,109" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -155,6 +160,7 @@ type Build() = 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 + @@ -169,6 +175,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--warnaserror-:52,109" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -185,6 +192,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + "--versionfile:src/version" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -200,6 +208,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--doc:foo.xml" + Environment.NewLine + "--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -215,6 +224,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--sig:foo.fsi" + Environment.NewLine + "--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -230,6 +240,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--keyfile:key.txt" + Environment.NewLine + "--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -245,6 +256,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--noframework" + Environment.NewLine + "--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -259,6 +271,7 @@ type Build() = 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 + @@ -274,6 +287,7 @@ type Build() = printfn "cmd=\"%s\"" cmd // REVIEW we don't put the default, is that desired? AssertEqual ("--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -288,6 +302,7 @@ type Build() = 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 + @@ -305,6 +320,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("-o:oUt.dll" + Environment.NewLine + "--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -320,6 +336,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + "--pdb:out.pdb" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -335,6 +352,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + "--platform:x64" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -350,6 +368,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + "--platform:x86" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -366,6 +385,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + "-r:" + dll + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -382,6 +402,7 @@ type Build() = printfn "cmd=\"%s\"" 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 + @@ -398,6 +419,7 @@ type Build() = printfn "cmd=\"%s\"" 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 + @@ -413,6 +435,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + "--resource:Foo.resources" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -429,6 +452,7 @@ type Build() = 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 + @@ -447,6 +471,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + "--target:library" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -462,6 +487,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + "--target:winexe" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -477,6 +503,7 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + "--target:module" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -490,6 +517,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--utf8output" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -504,6 +532,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--win32res:foo.res" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -518,6 +547,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--win32manifest:foo.manifest" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -532,6 +562,7 @@ type Build() = 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 + @@ -545,6 +576,7 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + + "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--subsystemversion:6.02" + Environment.NewLine + @@ -560,7 +592,7 @@ type Build() = tool.DebugType <- "full" tool.DefineConstants <- [| MakeTaskItem "FOO=3" MakeTaskItem "BAR=4" |] - tool.DisabledWarnings <- "52,109" + tool.DisabledWarnings <- "52 109" tool.VersionFile <- "src/version" tool.DocumentationFile <- "foo.xml" tool.GenerateInterfaceFile <- "foo.fsi" @@ -611,6 +643,7 @@ type Build() = "--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 + @@ -654,6 +687,7 @@ type Build() = "--nowarn:52,109" "--warn:4" "--warnaserror" + "--warnaserror:76" "--vserrors" "--utf8output" "--fullpaths" @@ -667,29 +701,3 @@ type Build() = AssertEqual expectedFlags hostObject.Flags let expectedSources = [| "foo.fs"; "C:\\Program Files\\spaces.fs" |] AssertEqual expectedSources hostObject.Sources - - [] - member public this.``DisabledWarnings build property``() = - let tool = new FSharp.Build.Fsc() - tool.DisabledWarnings <- " - - \n52,,\n,,,109,110;\r73 - - , - - ; - 85; - " - let cmd = tool.InternalGenerateResponseFileCommands() - printfn "cmd=\"%s\"" cmd - - let expected = - "--optimize+" + Environment.NewLine + - "--nowarn:52,109,110,73,85" + Environment.NewLine + - "--fullpaths" + Environment.NewLine + - "--flaterrors" + Environment.NewLine + - "--highentropyva-" + Environment.NewLine + - "--nocopyfsharpcore" - - AssertEqual expected cmd - diff --git a/vsintegration/tests/UnitTests/Tests.RoslynHelpers.fs b/vsintegration/tests/UnitTests/Tests.RoslynHelpers.fs deleted file mode 100644 index 4387329518f..00000000000 --- a/vsintegration/tests/UnitTests/Tests.RoslynHelpers.fs +++ /dev/null @@ -1,278 +0,0 @@ -namespace rec Microsoft.VisualStudio.FSharp.Editor.Tests.Roslyn - -open System -open System.IO -open System.Text -open System.Reflection -open System.Linq -open System.Composition.Hosting -open System.Collections.Generic -open System.Collections.Immutable -open Microsoft.VisualStudio.Composition -open Microsoft.CodeAnalysis -open Microsoft.CodeAnalysis.Host -open Microsoft.CodeAnalysis.Text -open Microsoft.VisualStudio.FSharp.Editor -open Microsoft.CodeAnalysis.Host.Mef -open Microsoft.VisualStudio.LanguageServices -open Microsoft.VisualStudio.Shell - -[] -module MefHelpers = - - let getAssemblies() = - let self = Assembly.GetExecutingAssembly() - let here = AppContext.BaseDirectory - - let imports = [| - "Microsoft.CodeAnalysis.Workspaces.dll" - "Microsoft.VisualStudio.Shell.15.0.dll" - "FSharp.Editor.dll" - |] - - let resolvedImports = imports.Select(fun name -> Path.Combine(here, name)).ToList() - let missingDlls = resolvedImports.Where(fun path -> not(File.Exists(path))).ToList() - if (missingDlls.Any()) then - failwith "Missing imports" - - let loadedImports = resolvedImports.Select(fun p -> Assembly.LoadFrom(p)).ToList() - - let result = loadedImports.ToDictionary(fun k -> Path.GetFileNameWithoutExtension(k.Location)) - result.Values - |> Seq.append [|self|] - |> Seq.append MefHostServices.DefaultAssemblies - |> Array.ofSeq - - let createExportProvider() = - let resolver = Resolver.DefaultInstance - let catalog = - let asms = getAssemblies() - let partDiscovery = PartDiscovery.Combine(new AttributedPartDiscoveryV1(resolver), new AttributedPartDiscovery(resolver, isNonPublicSupported = true)); - let parts = partDiscovery.CreatePartsAsync(asms).Result - let catalog = ComposableCatalog.Create(resolver) - catalog.AddParts(parts) - - let configuration = CompositionConfiguration.Create(catalog.WithCompositionService()) - let runtimeComposition = RuntimeComposition.CreateRuntimeComposition(configuration) - let exportProviderFactory = runtimeComposition.CreateExportProviderFactory() - exportProviderFactory.CreateExportProvider() - -type TestWorkspaceServiceMetadata(serviceType: string, layer: string) = - - member _.ServiceType = serviceType - member _.Layer = layer - - new(data: IDictionary) = - let serviceType = - match data.TryGetValue("ServiceType") with - | true, result -> result :?> string - | _ -> Unchecked.defaultof<_> - - let layer = - match data.TryGetValue("Layer") with - | true, result -> result :?> string - | _ -> Unchecked.defaultof<_> - TestWorkspaceServiceMetadata(serviceType, layer) - - new(serviceType: Type, layer: string) = - TestWorkspaceServiceMetadata(serviceType.AssemblyQualifiedName, layer) - -type TestLanguageServiceMetadata(language: string, serviceType: string, layer: string, data: IDictionary) = - - member _.Language = language - member _.ServiceType = serviceType - member _.Layer = layer - member _.Data = data - - new(data: IDictionary) = - let language = - match data.TryGetValue("Language") with - | true, result -> result :?> string - | _ -> Unchecked.defaultof<_> - - let serviceType = - match data.TryGetValue("ServiceType") with - | true, result -> result :?> string - | _ -> Unchecked.defaultof<_> - - let layer = - match data.TryGetValue("Layer") with - | true, result -> result :?> string - | _ -> Unchecked.defaultof<_> - TestLanguageServiceMetadata(language, serviceType, layer, data) - -type TestHostLanguageServices(workspaceServices: HostWorkspaceServices, language: string, exportProvider: ExportProvider) as this = - inherit HostLanguageServices() - - let services1 = - exportProvider.GetExports() - |> Seq.filter (fun x -> x.Metadata.Language = language) - - let factories1 = - exportProvider.GetExports() - |> Seq.filter (fun x -> x.Metadata.Language = language) - |> Seq.map (fun x -> - Lazy<_, _>((fun () -> x.Value.CreateLanguageService(this)), x.Metadata) - ) - - let otherServices1 = Seq.append factories1 services1 - - let otherServicesMap1 = - otherServices1 - |> Seq.map (fun x -> - KeyValuePair(x.Metadata.ServiceType, x) - ) - |> Seq.distinctBy (fun x -> x.Key) - |> System.Collections.Concurrent.ConcurrentDictionary - - override this.WorkspaceServices = workspaceServices - - override this.Language = language - - override this.GetService<'T when 'T :> ILanguageService>() : 'T = - match otherServicesMap1.TryGetValue(typeof<'T>.AssemblyQualifiedName) with - | true, otherService -> - otherService.Value :?> 'T - | _ -> - try - exportProvider.GetExport<'T>().Value - with - | _ -> - Unchecked.defaultof<'T> - -type TestHostWorkspaceServices(hostServices: HostServices, workspace: Workspace) as this = - inherit HostWorkspaceServices() - - let exportProvider = createExportProvider() - - let services1 = - exportProvider.GetExports() - - let factories1 = - exportProvider.GetExports() - |> Seq.map (fun x -> - Lazy<_, _>((fun () -> x.Value.CreateService(this)), x.Metadata) - ) - - let otherServices1 = - Seq.append factories1 services1 - - let otherServicesMap1 = - otherServices1 - |> Seq.map (fun x -> - KeyValuePair(x.Metadata.ServiceType, x) - ) - |> Seq.distinctBy (fun x -> x.Key) - |> System.Collections.Concurrent.ConcurrentDictionary - - let langServices = TestHostLanguageServices(this, LanguageNames.FSharp, exportProvider) - - override _.Workspace = workspace - - override this.GetService<'T when 'T :> IWorkspaceService>() : 'T = - let ty = typeof<'T> - match otherServicesMap1.TryGetValue(ty.AssemblyQualifiedName) with - | true, otherService -> - otherService.Value :?> 'T - | _ -> - try - exportProvider.GetExport<'T>().Value - with - | _ -> - Unchecked.defaultof<'T> - - override _.FindLanguageServices(filter) = Seq.empty - - override _.GetLanguageServices(languageName) = - match languageName with - | LanguageNames.FSharp -> - langServices :> HostLanguageServices - | _ -> - raise(NotSupportedException(sprintf "Language '%s' not supported in FSharp VS tests." languageName)) - - override _.HostServices = hostServices - -type TestHostServices() = - inherit HostServices() - - override this.CreateWorkspaceServices(workspace) = - TestHostWorkspaceServices(this, workspace) :> HostWorkspaceServices - -[] -type RoslynTestHelpers private () = - - static member CreateProjectInfoWithSingleDocument(projName, docFilePath) = - let isScript = String.Equals(Path.GetExtension(docFilePath), ".fsx", StringComparison.OrdinalIgnoreCase) - - let projId = ProjectId.CreateNewId() - let docId = DocumentId.CreateNewId(projId) - - let docInfo = - DocumentInfo.Create( - docId, - docFilePath, - filePath=docFilePath, - loader = new FileTextLoader(docFilePath, Encoding.Default), - sourceCodeKind= if isScript then SourceCodeKind.Script else SourceCodeKind.Regular) - - let projFilePath = "C:\\test.fsproj" - ProjectInfo.Create( - projId, - VersionStamp.Create(DateTime.UtcNow), - projName, - "test.dll", - LanguageNames.FSharp, - documents = [docInfo], - filePath = projFilePath - ) - - static member CreateDocument (filePath, text: SourceText, ?options: FSharp.Compiler.CodeAnalysis.FSharpProjectOptions) = - let isScript = String.Equals(Path.GetExtension(filePath), ".fsx", StringComparison.OrdinalIgnoreCase) - - let workspace = new AdhocWorkspace(TestHostServices()) - - let projId = ProjectId.CreateNewId() - let docId = DocumentId.CreateNewId(projId) - - let docInfo = - DocumentInfo.Create( - docId, - filePath, - loader=TextLoader.From(text.Container, VersionStamp.Create(DateTime.UtcNow)), - filePath=filePath, - sourceCodeKind= if isScript then SourceCodeKind.Script else SourceCodeKind.Regular) - - let projFilePath = "C:\\test.fsproj" - let projInfo = - ProjectInfo.Create( - projId, - VersionStamp.Create(DateTime.UtcNow), - projFilePath, - "test.dll", - LanguageNames.FSharp, - documents = [docInfo], - filePath = projFilePath - ) - - let solutionInfo = SolutionInfo.Create(SolutionId.CreateNewId(), VersionStamp.Create(DateTime.UtcNow), "test.sln", [projInfo]) - - let solution = workspace.AddSolution(solutionInfo) - - let workspaceService = workspace.Services.GetService() - - let document = solution.GetProject(projId).GetDocument(docId) - - match options with - | Some options -> - let options = { options with ProjectId = Some(Guid.NewGuid().ToString()) } - workspaceService.FSharpProjectOptionsManager.SetCommandLineOptions(projId, options.SourceFiles, options.OtherOptions |> ImmutableArray.CreateRange) - document.SetFSharpProjectOptionsForTesting(options) - | _ -> - workspaceService.FSharpProjectOptionsManager.SetCommandLineOptions(projId, [|filePath|], ImmutableArray.Empty) - - document - - static member CreateDocument (filePath, code: string) = - let text = SourceText.From(code) - RoslynTestHelpers.CreateDocument(filePath, text), text - diff --git a/vsintegration/tests/UnitTests/Tests.Watson.fs b/vsintegration/tests/UnitTests/Tests.Watson.fs index d579acf3ac7..f6643eded89 100644 --- a/vsintegration/tests/UnitTests/Tests.Watson.fs +++ b/vsintegration/tests/UnitTests/Tests.Watson.fs @@ -4,10 +4,8 @@ namespace Tests.Compiler.Watson #nowarn "52" // The value has been copied to ensure the original is not mutated -open FSharp.Compiler open FSharp.Compiler.AbstractIL.ILBinaryReader -open FSharp.Compiler.CodeAnalysis -open Internal.Utilities.Library +open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CompilerConfig open FSharp.Compiler.Driver open NUnit.Framework diff --git a/vsintegration/tests/UnitTests/UnusedOpensTests.fs b/vsintegration/tests/UnitTests/UnusedOpensTests.fs index 36eb71e6a21..58ba173e4ca 100644 --- a/vsintegration/tests/UnitTests/UnusedOpensTests.fs +++ b/vsintegration/tests/UnitTests/UnusedOpensTests.fs @@ -4,10 +4,9 @@ module Tests.ServiceAnalysis.UnusedOpens open System open NUnit.Framework -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.CodeAnalysis -open FSharp.Compiler.EditorServices -open FSharp.Compiler.Text +open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Range + /// like "should equal", but validates same-type let shouldEqual (x: 'a) (y: 'a) = Assert.AreEqual(x, y, sprintf "Expected: %A\nActual: %A" x y) @@ -25,6 +24,7 @@ let private projectOptions : FSharpProjectOptions = LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None + ExtraProjectInfo = None Stamp = None } let private checker = FSharpChecker.Create() @@ -221,7 +221,7 @@ let ``open declaration is not marked as unused if an extension property is used` """ module Module = type System.String with - member _.ExtensionProperty = () + member __.ExtensionProperty = () open Module let _ = "a long string".ExtensionProperty """ @@ -232,7 +232,7 @@ let ``open declaration is marked as unused if an extension property is not used` """ module Module = type System.String with - member _.ExtensionProperty = () + member __.ExtensionProperty = () open Module let _ = "a long string".Trim() """ @@ -244,7 +244,7 @@ let ``open declaration is not marked as unused if an extension method is used``( type Class() = class end module Module = type Class with - member _.ExtensionMethod() = () + member __.ExtensionMethod() = () open Module let x = Class() let _ = x.ExtensionMethod() @@ -257,7 +257,7 @@ let ``open declaration is marked as unused if an extension method is not used``( type Class() = class end module Module = type Class with - member _.ExtensionMethod() = () + member __.ExtensionMethod() = () open Module let x = Class() """ @@ -582,7 +582,7 @@ let ``open declaration is not marked as unused if a related type extension is us module Module = open System type String with - member _.Method() = () + member __.Method() = () """ => [] @@ -593,7 +593,7 @@ open System.IO.Compression type OutliningHint() as self = do self.E.Add (fun (e: GZipStream) -> ()) - member _.E: IEvent<_> = Unchecked.defaultof<_> + member __.E: IEvent<_> = Unchecked.defaultof<_> """ => [] @@ -636,7 +636,7 @@ type IInterface = type IClass() = interface IInterface with - member _.Property = 0 + member __.Property = 0 let f (x: IClass) = (x :> IInterface).Property """ diff --git a/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj b/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj index d4a67482ad2..9ffc92b6f09 100644 --- a/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj +++ b/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj @@ -8,6 +8,8 @@ Library $(NoWarn);44;58;75;3005 true + true + $(SystemValueTupleVersion) true true false @@ -36,8 +38,6 @@ - - @@ -124,11 +124,11 @@ - + - + @@ -197,12 +197,11 @@ - - + - + diff --git a/vsintegration/tests/UnitTests/Workspace/WorkspaceTests.fs b/vsintegration/tests/UnitTests/Workspace/WorkspaceTests.fs deleted file mode 100644 index e9c2bfe5fee..00000000000 --- a/vsintegration/tests/UnitTests/Workspace/WorkspaceTests.fs +++ /dev/null @@ -1,317 +0,0 @@ -namespace VisualFSharp.UnitTests - -open System -open System.IO -open System.Reflection -open System.Linq -open System.Composition.Hosting -open System.Collections.Generic -open System.Collections.Immutable -open System.Threading -open Microsoft.VisualStudio.Composition -open Microsoft.CodeAnalysis -open Microsoft.CodeAnalysis.Host -open Microsoft.CodeAnalysis.Text -open Microsoft.VisualStudio.FSharp.Editor -open Microsoft.CodeAnalysis.Host.Mef -open Microsoft.VisualStudio.LanguageServices -open Microsoft.VisualStudio.Shell -open Microsoft.VisualStudio.FSharp.Editor.Tests.Roslyn -open NUnit.Framework - -[] -module WorkspaceTests = - - let createOnDiskScript src = - let tmpFilePath = Path.GetTempFileName() - let tmpRealFilePath = Path.ChangeExtension(tmpFilePath, ".fsx") - try File.Delete(tmpFilePath) with | _ -> () - File.WriteAllText(tmpRealFilePath, src) - tmpRealFilePath - - let createWorkspace() = - new AdhocWorkspace(TestHostServices()) - - let createMiscFileWorkspace() = - createWorkspace() - - let openDocument (workspace: Workspace) (docId: DocumentId) = - use waitHandle = new ManualResetEventSlim(false) - use _sub = workspace.DocumentOpened.Subscribe(fun _ -> - waitHandle.Set() - ) - workspace.OpenDocument(docId) - waitHandle.Wait() - - let getDocument (workspace: Workspace) filePath = - let solution = workspace.CurrentSolution - solution.GetDocumentIdsWithFilePath(filePath) - |> Seq.exactlyOne - |> solution.GetDocument - - let addProject (workspace: Workspace) projInfo = - if not (workspace.TryApplyChanges(workspace.CurrentSolution.AddProject(projInfo))) then - failwith "Unable to apply workspace changes." - - let removeProject (workspace: Workspace) projId = - if not (workspace.TryApplyChanges(workspace.CurrentSolution.RemoveProject(projId))) then - failwith "Unable to apply workspace changes." - - let assertEmptyDocumentDiagnostics (doc: Document) = - let parseResults, checkResults = doc.GetFSharpParseAndCheckResultsAsync("assertEmptyDocumentDiagnostics") |> Async.RunSynchronously - - Assert.IsEmpty(parseResults.Diagnostics) - Assert.IsEmpty(checkResults.Diagnostics) - - let assertHasDocumentDiagnostics (doc: Document) = - let parseResults, checkResults = doc.GetFSharpParseAndCheckResultsAsync("assertHasDocumentDiagnostics") |> Async.RunSynchronously - - Assert.IsEmpty(parseResults.Diagnostics) - Assert.IsNotEmpty(checkResults.Diagnostics) - - type TestFSharpWorkspaceProjectContext(mainProj: Project) = - - let mutable mainProj = mainProj - - interface IFSharpWorkspaceProjectContext with - - member this.Dispose(): unit = () - - member this.FilePath: string = mainProj.FilePath - - member this.HasProjectReference(filePath: string): bool = - mainProj.ProjectReferences - |> Seq.exists (fun x -> - let projRef = mainProj.Solution.GetProject(x.ProjectId) - if projRef <> null then - String.Equals(filePath, projRef.FilePath, StringComparison.OrdinalIgnoreCase) - else - false - ) - - member this.Id: ProjectId = mainProj.Id - - member this.ProjectReferenceCount: int = mainProj.ProjectReferences.Count() - - member this.SetProjectReferences(projRefs: seq): unit = - let currentProj = mainProj - let mutable solution = currentProj.Solution - - mainProj.ProjectReferences - |> Seq.iter (fun projRef -> - solution <- solution.RemoveProjectReference(currentProj.Id, projRef) - ) - - projRefs - |> Seq.iter (fun projRef -> - solution <- - solution.AddProjectReference( - currentProj.Id, - ProjectReference(projRef.Id) - ) - ) - - not (solution.Workspace.TryApplyChanges(solution)) |> ignore - - mainProj <- solution.GetProject(currentProj.Id) - - type TestFSharpWorkspaceProjectContextFactory(workspace: Workspace, miscFilesWorkspace: Workspace) = - - interface IFSharpWorkspaceProjectContextFactory with - member this.CreateProjectContext(filePath: string): IFSharpWorkspaceProjectContext = - match miscFilesWorkspace.CurrentSolution.GetDocumentIdsWithFilePath(filePath) |> Seq.tryExactlyOne with - | Some docId -> - let doc = miscFilesWorkspace.CurrentSolution.GetDocument(docId) - removeProject miscFilesWorkspace doc.Project.Id - | _ -> - () - - let projInfo = RoslynTestHelpers.CreateProjectInfoWithSingleDocument(FSharpConstants.FSharpMiscellaneousFilesName, filePath) - addProject workspace projInfo - - let proj = workspace.CurrentSolution.GetProject(projInfo.Id) - new TestFSharpWorkspaceProjectContext(proj) :> IFSharpWorkspaceProjectContext - - [] - let ``Script file opened in misc files workspace will get transferred to normal workspace``() = - let workspace = createWorkspace() - let miscFilesWorkspace = createMiscFileWorkspace() - let projectContextFactory = TestFSharpWorkspaceProjectContextFactory(workspace, miscFilesWorkspace) - - let _miscFileService = FSharpMiscellaneousFileService(workspace, miscFilesWorkspace, projectContextFactory) - - let filePath = - createOnDiskScript - """ -module Script1 - -let x = 1 - """ - - try - let projInfo = RoslynTestHelpers.CreateProjectInfoWithSingleDocument(filePath, filePath) - addProject miscFilesWorkspace projInfo - - let doc = getDocument miscFilesWorkspace filePath - - Assert.IsFalse(miscFilesWorkspace.IsDocumentOpen(doc.Id)) - Assert.AreEqual(0, workspace.CurrentSolution.GetDocumentIdsWithFilePath(filePath).Length) - - openDocument miscFilesWorkspace doc.Id - // Although we opened the document, this is false as it has been transferred to the other workspace. - Assert.IsFalse(miscFilesWorkspace.IsDocumentOpen(doc.Id)) - - Assert.AreEqual(0, miscFilesWorkspace.CurrentSolution.GetDocumentIdsWithFilePath(filePath).Length) - Assert.AreEqual(1, workspace.CurrentSolution.GetDocumentIdsWithFilePath(filePath).Length) - - let doc = getDocument workspace filePath - - Assert.IsFalse(workspace.IsDocumentOpen(doc.Id)) - - assertEmptyDocumentDiagnostics doc - - finally - try File.Delete(filePath) with | _ -> () - - [] - let ``Script file referencing another script should have no diagnostics``() = - let workspace = createWorkspace() - let miscFilesWorkspace = createMiscFileWorkspace() - let projectContextFactory = TestFSharpWorkspaceProjectContextFactory(workspace, miscFilesWorkspace) - - let _miscFileService = FSharpMiscellaneousFileService(workspace, miscFilesWorkspace, projectContextFactory) - - let filePath1 = - createOnDiskScript - """ -module Script1 - -let x = 1 - """ - - let filePath2 = - createOnDiskScript - $""" -module Script2 -#load "{ Path.GetFileName(filePath1) }" - -let x = Script1.x - """ - - try - let projInfo2 = RoslynTestHelpers.CreateProjectInfoWithSingleDocument(filePath2, filePath2) - - addProject miscFilesWorkspace projInfo2 - - openDocument miscFilesWorkspace (getDocument miscFilesWorkspace filePath2).Id - - let doc2 = getDocument workspace filePath2 - assertEmptyDocumentDiagnostics doc2 - - finally - try File.Delete(filePath1) with | _ -> () - try File.Delete(filePath2) with | _ -> () - - [] - let ``Script file referencing another script will correct update when the referenced script file changes``() = - let workspace = createWorkspace() - let miscFilesWorkspace = createMiscFileWorkspace() - let projectContextFactory = TestFSharpWorkspaceProjectContextFactory(workspace, miscFilesWorkspace) - - let _miscFileService = FSharpMiscellaneousFileService(workspace, miscFilesWorkspace, projectContextFactory) - - let filePath1 = - createOnDiskScript - """ -module Script1 - """ - - let filePath2 = - createOnDiskScript - $""" -module Script2 -#load "{ Path.GetFileName(filePath1) }" - -let x = Script1.x - """ - - try - let projInfo1 = RoslynTestHelpers.CreateProjectInfoWithSingleDocument(filePath1, filePath1) - let projInfo2 = RoslynTestHelpers.CreateProjectInfoWithSingleDocument(filePath2, filePath2) - - addProject miscFilesWorkspace projInfo1 - addProject miscFilesWorkspace projInfo2 - - openDocument miscFilesWorkspace (getDocument miscFilesWorkspace filePath1).Id - openDocument miscFilesWorkspace (getDocument miscFilesWorkspace filePath2).Id - - let doc1 = getDocument workspace filePath1 - assertEmptyDocumentDiagnostics doc1 - - let doc2 = getDocument workspace filePath2 - assertHasDocumentDiagnostics doc2 - - File.WriteAllText(filePath1, - """ -module Script1 - -let x = 1 - """) - - assertEmptyDocumentDiagnostics doc2 - - finally - try File.Delete(filePath1) with | _ -> () - try File.Delete(filePath2) with | _ -> () - - [] - let ``Script file referencing another script will correct update when the referenced script file changes with opening in reverse order``() = - let workspace = createWorkspace() - let miscFilesWorkspace = createMiscFileWorkspace() - let projectContextFactory = TestFSharpWorkspaceProjectContextFactory(workspace, miscFilesWorkspace) - - let _miscFileService = FSharpMiscellaneousFileService(workspace, miscFilesWorkspace, projectContextFactory) - - let filePath1 = - createOnDiskScript - """ -module Script1 - """ - - let filePath2 = - createOnDiskScript - $""" -module Script2 -#load "{ Path.GetFileName(filePath1) }" - -let x = Script1.x - """ - - try - let projInfo1 = RoslynTestHelpers.CreateProjectInfoWithSingleDocument(filePath1, filePath1) - let projInfo2 = RoslynTestHelpers.CreateProjectInfoWithSingleDocument(filePath2, filePath2) - - addProject miscFilesWorkspace projInfo1 - addProject miscFilesWorkspace projInfo2 - - openDocument miscFilesWorkspace (getDocument miscFilesWorkspace filePath2).Id - openDocument miscFilesWorkspace (getDocument miscFilesWorkspace filePath1).Id - - let doc2 = getDocument workspace filePath2 - assertHasDocumentDiagnostics doc2 - - let doc1 = getDocument workspace filePath1 - assertEmptyDocumentDiagnostics doc1 - - File.WriteAllText(filePath1, - """ -module Script1 - -let x = 1 - """) - - assertEmptyDocumentDiagnostics doc2 - - finally - try File.Delete(filePath1) with | _ -> () - try File.Delete(filePath2) with | _ -> () diff --git a/vsintegration/update-vsintegration.cmd b/vsintegration/update-vsintegration.cmd index 3a7da14f77d..c4a4471e109 100644 --- a/vsintegration/update-vsintegration.cmd +++ b/vsintegration/update-vsintegration.cmd @@ -216,7 +216,7 @@ if "!BIN_AVAILABLE!" == "true" ( CALL :backupAndOrCopy fsc.exe "!COMPILERSDKPATH!" CALL :backupAndOrCopy fsc.exe.config "%COMPILERSDKPATH%" CALL :backupAndOrCopy FSharp.Build.dll "%COMPILERSDKPATH%" - CALL :backupAndOrCopy FSharp.Compiler.Service.dll "%COMPILERSDKPATH%" + CALL :backupAndOrCopy FSharp.Compiler.Private.dll "%COMPILERSDKPATH%" CALL :backupAndOrCopy FSharp.Compiler.Interactive.Settings.dll "%COMPILERSDKPATH%" CALL :backupAndOrCopy fsi.exe "%COMPILERSDKPATH%" CALL :backupAndOrCopy fsi.exe.config "%COMPILERSDKPATH%" From 07b4e18cd4f28f99d72c83f41c06196ec98962ad Mon Sep 17 00:00:00 2001 From: Vlad Zarytovskii Date: Tue, 29 Jun 2021 10:43:19 +0200 Subject: [PATCH 3/5] Revert "Revert "Merge branch 'main' into unfiltered-tokenize"" This reverts commit 4080ff801c18db9c7cf3a6766b754f79b1cc3e47. --- .github/ISSUE_TEMPLATE/feature_request.md | 8 + .gitignore | 32 +- DEVGUIDE.md | 15 +- FSharp.Profiles.props | 1 - FSharp.sln | 47 +- FSharpBuild.Directory.Build.props | 6 + FSharpTests.Directory.Build.props | 6 +- INTERNAL.md | 4 + NuGet.config | 3 +- README.md | 13 - VisualFSharp.sln | 118 +- azure-pipelines.yml | 97 +- docs/compiler-guide.md | 115 +- docs/fcs/compiler.fsx | 2 +- docs/fcs/corelib.fsx | 46 +- docs/fcs/editor.fsx | 13 +- docs/fcs/filesystem.fsx | 12 +- docs/fcs/interactive.fsx | 13 +- docs/fcs/ja/compiler.fsx | 2 +- docs/fcs/ja/corelib.fsx | 21 - docs/fcs/ja/editor.fsx | 12 +- docs/fcs/ja/filesystem.fsx | 14 +- docs/fcs/ja/interactive.fsx | 15 +- docs/fcs/ja/project.fsx | 16 +- docs/fcs/ja/symbols.fsx | 3 +- docs/fcs/ja/tokenizer.fsx | 6 +- docs/fcs/ja/untypedtree.fsx | 14 +- docs/fcs/project.fsx | 15 +- docs/fcs/queue.fsx | 71 +- docs/fcs/symbols.fsx | 3 +- docs/fcs/tokenizer.fsx | 4 +- docs/fcs/typedtree.fsx | 99 +- docs/fcs/untypedtree.fsx | 15 +- docs/fsharp-core-notes.md | 162 +- eng/Build.ps1 | 114 +- eng/DumpPackageRoot/DumpPackageRoot.csproj | 2 +- eng/Signing.props | 3 + eng/SourceBuild.props | 47 + eng/SourceBuildPrebuiltBaseline.xml | 5 + eng/Version.Details.xml | 10 +- eng/Versions.props | 21 +- eng/build-utils.ps1 | 8 +- eng/build.sh | 55 +- eng/common/build.ps1 | 2 + eng/common/build.sh | 2 +- eng/common/cross/arm64/tizen-fetch.sh | 2 +- eng/common/cross/armel/tizen-fetch.sh | 2 +- eng/common/cross/build-android-rootfs.sh | 2 +- eng/common/cross/build-rootfs.sh | 42 +- eng/common/darc-init.sh | 2 +- eng/common/dotnet-install.sh | 13 +- eng/common/generate-locproject.ps1 | 117 + eng/common/init-tools-native.sh | 113 +- eng/common/internal-feed-operations.ps1 | 8 +- eng/common/internal-feed-operations.sh | 6 +- eng/common/msbuild.ps1 | 1 + eng/common/msbuild.sh | 2 +- eng/common/native/install-cmake-test.sh | 6 +- eng/common/native/install-cmake.sh | 6 +- eng/common/native/install-tool.ps1 | 2 +- eng/common/performance/blazor_perf.proj | 30 - eng/common/performance/crossgen_perf.proj | 110 - eng/common/performance/microbenchmarks.proj | 144 - eng/common/performance/performance-setup.ps1 | 149 - eng/common/performance/performance-setup.sh | 298 - eng/common/pipeline-logging-functions.sh | 10 +- eng/common/post-build/publish-using-darc.ps1 | 10 +- .../post-build/sourcelink-validation.ps1 | 80 +- eng/common/post-build/symbols-validation.ps1 | 124 +- eng/common/sdk-task.ps1 | 8 +- eng/common/sdl/execute-all-sdl-tools.ps1 | 6 +- eng/common/sdl/init-sdl.ps1 | 16 +- eng/common/sdl/packages.config | 2 +- eng/common/sdl/push-gdn.ps1 | 69 - eng/common/sdl/run-sdl.ps1 | 2 +- eng/common/templates/job/execute-sdl.yml | 4 +- eng/common/templates/job/onelocbuild.yml | 93 + eng/common/templates/job/performance.yml | 95 - .../templates/job/publish-build-assets.yml | 8 + eng/common/templates/job/source-build.yml | 11 + .../templates/job/source-index-stage1.yml | 62 + eng/common/templates/jobs/jobs.yml | 29 +- eng/common/templates/jobs/source-build.yml | 12 +- .../templates/phases/publish-build-assets.yml | 1 + .../channels/generic-internal-channel.yml | 8 + .../channels/generic-public-channel.yml | 8 + .../templates/post-build/post-build.yml | 46 +- .../post-build/setup-maestro-vars.yml | 1 + .../templates/steps/perf-send-to-helix.yml | 50 - eng/common/templates/steps/send-to-helix.yml | 4 +- eng/common/templates/steps/source-build.yml | 7 +- eng/common/tools.ps1 | 128 +- eng/common/tools.sh | 56 +- eng/release/insert-into-vs.yml | 18 +- .../0005-Fix-package-downgrade-warning.patch | 56 + eng/tests/UpToDate.ps1 | 3 +- .../EditorService/EditorService.fsproj | 2 +- fcs-samples/FscExe/FscMain.fs | 4 +- fcs-samples/UntypedTree/Program.fs | 2 +- global.json | 6 +- proto.proj | 4 +- release-notes.md | 436 +- .../Microsoft.FSharp.Compiler.MSBuild.csproj | 89 +- .../Microsoft.FSharp.Dependencies/fsharp.bat | 2 +- .../Microsoft.FSharp.IDE.csproj | 8 +- setup/Swix/Microsoft.FSharp.IDE/Package.swr | 6 +- .../shims/Microsoft.FSharp.NetSdk.Shim.props | 2 +- .../Microsoft.FSharp.NetSdk.Shim.targets | 2 +- ...osoft.FSharp.Overrides.NetSdk.Shim.targets | 2 +- setup/shims/Microsoft.FSharp.Shim.targets | 2 +- .../Microsoft.Portable.FSharp.Shim.targets | 2 +- src/buildtools/AssemblyCheck/AssemblyCheck.fs | 71 +- .../AssemblyCheck/AssemblyCheck.fsproj | 2 +- src/buildtools/fslex/Arg.fs | 28 +- src/buildtools/fslex/Parsing.fsi | 2 +- src/buildtools/fslex/fslex.fsproj | 2 +- src/buildtools/fsyacc/Arg.fs | 28 +- src/buildtools/fsyacc/Parsing.fsi | 2 +- src/buildtools/fsyacc/fsyacc.fsproj | 2 +- src/fsharp/AccessibilityLogic.fs | 2 +- src/fsharp/AccessibilityLogic.fsi | 4 +- src/fsharp/AttributeChecking.fs | 23 +- src/fsharp/AttributeChecking.fsi | 5 +- src/fsharp/AugmentWithHashCompare.fs | 38 +- src/fsharp/AugmentWithHashCompare.fsi | 26 +- src/fsharp/BinaryResourceFormats.fs | 282 +- src/fsharp/BuildGraph.fs | 393 + src/fsharp/BuildGraph.fsi | 120 + src/fsharp/CheckComputationExpressions.fs | 198 +- src/fsharp/CheckComputationExpressions.fsi | 5 +- src/fsharp/CheckDeclarations.fs | 335 +- src/fsharp/CheckDeclarations.fsi | 14 +- src/fsharp/CheckExpressions.fs | 7227 +-- src/fsharp/CheckExpressions.fsi | 32 +- src/fsharp/CheckFormatStrings.fs | 18 +- src/fsharp/CheckFormatStrings.fsi | 5 +- src/fsharp/CompilerConfig.fs | 519 +- src/fsharp/CompilerConfig.fsi | 180 +- src/fsharp/CompilerDiagnostics.fs | 802 +- src/fsharp/CompilerDiagnostics.fsi | 17 +- src/fsharp/CompilerGlobalState.fs | 10 +- src/fsharp/CompilerGlobalState.fsi | 4 +- src/fsharp/CompilerImports.fs | 1332 +- src/fsharp/CompilerImports.fsi | 64 +- src/fsharp/CompilerOptions.fs | 513 +- src/fsharp/CompilerOptions.fsi | 65 +- src/fsharp/ConstraintSolver.fs | 53 +- src/fsharp/ConstraintSolver.fsi | 6 +- src/fsharp/CreateILModule.fs | 330 +- src/fsharp/CreateILModule.fsi | 5 +- .../AssemblyResolveHandler.fs | 42 +- .../AssemblyResolveHandler.fsi | 3 +- .../DependencyProvider.fs | 31 +- .../DependencyProvider.fsi | 8 +- .../NativeDllResolveHandler.fs | 75 +- .../NativeDllResolveHandler.fsi | 4 +- .../xlf/DependencyManager.txt.cs.xlf | 0 .../xlf/DependencyManager.txt.de.xlf | 0 .../xlf/DependencyManager.txt.es.xlf | 0 .../xlf/DependencyManager.txt.fr.xlf | 0 .../xlf/DependencyManager.txt.it.xlf | 0 .../xlf/DependencyManager.txt.ja.xlf | 0 .../xlf/DependencyManager.txt.ko.xlf | 0 .../xlf/DependencyManager.txt.pl.xlf | 0 .../xlf/DependencyManager.txt.pt-BR.xlf | 0 .../xlf/DependencyManager.txt.ru.xlf | 0 .../xlf/DependencyManager.txt.tr.xlf | 0 .../xlf/DependencyManager.txt.zh-Hans.xlf | 0 .../xlf/DependencyManager.txt.zh-Hant.xlf | 0 src/fsharp/DetupleArgs.fs | 18 +- src/fsharp/DetupleArgs.fsi | 5 +- src/fsharp/Diagnostics.fs | 33 + src/fsharp/Diagnostics.fsi | 25 + src/fsharp/Directory.Build.props | 1 - src/fsharp/DotNetFrameworkDependencies.fs | 562 - src/fsharp/ErrorLogger.fs | 146 +- src/fsharp/ErrorLogger.fsi | 38 +- src/fsharp/ErrorResolutionHints.fs | 21 +- src/fsharp/ErrorResolutionHints.fsi | 9 - src/fsharp/ExtensionTyping.fs | 369 +- src/fsharp/ExtensionTyping.fsi | 14 +- src/fsharp/FSComp.txt | 17 +- src/fsharp/FSharp.Build/FSharp.Build.fsproj | 2 - .../FSharp.Build/FSharpEmbedResourceText.fs | 34 +- src/fsharp/FSharp.Build/Fsc.fs | 63 +- src/fsharp/FSharp.Build/Fsi.fs | 6 +- .../Microsoft.FSharp.NetSdk.props | 20 +- .../Microsoft.FSharp.NetSdk.targets | 2 +- .../FSharp.Build/Microsoft.FSharp.Targets | 2 + ...Sharp.Compiler.Interactive.Settings.fsproj | 1 - .../Directory.Build.props | 9 - .../FSharp.Compiler.Private.Scripting.fsproj | 34 - .../FSharp.Compiler.Private.Scripting.nuspec | 30 - .../FSharpScript.fs | 71 - .../Directory.Build.props | 9 - .../FSharp.Compiler.Private.fsproj | 939 - .../FSharp.Compiler.Server.Shared.fsproj | 1 - .../FSharp.Compiler.Service.fsproj | 191 +- .../FSharp.Compiler.Service.nuspec | 1 + src/fsharp/FSharp.Core/Query.fs | 102 +- src/fsharp/FSharp.Core/async.fs | 94 +- src/fsharp/FSharp.Core/async.fsi | 22 + src/fsharp/FSharp.Core/collections.fs | 16 +- src/fsharp/FSharp.Core/event.fs | 31 +- src/fsharp/FSharp.Core/event.fsi | 2 +- .../FSharp.Core/fslib-extra-pervasives.fs | 24 +- src/fsharp/FSharp.Core/list.fs | 24 +- src/fsharp/FSharp.Core/local.fs | 38 +- src/fsharp/FSharp.Core/mailbox.fs | 28 +- src/fsharp/FSharp.Core/map.fs | 280 +- src/fsharp/FSharp.Core/option.fsi | 212 +- src/fsharp/FSharp.Core/prim-types.fs | 30 +- src/fsharp/FSharp.Core/prim-types.fsi | 2 +- src/fsharp/FSharp.Core/printf.fs | 24 +- src/fsharp/FSharp.Core/quotations.fs | 6 +- src/fsharp/FSharp.Core/reflect.fs | 118 +- src/fsharp/FSharp.Core/seq.fs | 82 +- src/fsharp/FSharp.Core/seqcore.fs | 210 +- src/fsharp/FSharp.Core/seqcore.fsi | 46 + src/fsharp/FSharp.Core/set.fs | 301 +- src/fsharp/FSharp.Core/string.fs | 2 +- .../FSharp.DependencyManager.Nuget.fsproj | 3 + .../FSharp.DependencyManager.ProjectFile.fs | 9 +- .../FSharp.DependencyManager.Utilities.fs | 131 +- .../FSharp.DependencyManager.fs | 35 +- .../FSharp.DependencyManager.fsi | 4 +- .../FSharp.DependencyManager.Nuget/README.md | 2 - .../xlf/FSDependencyManager.txt.cs.xlf | 6 +- .../xlf/FSDependencyManager.txt.de.xlf | 6 +- .../xlf/FSDependencyManager.txt.es.xlf | 6 +- .../xlf/FSDependencyManager.txt.fr.xlf | 6 +- .../xlf/FSDependencyManager.txt.it.xlf | 6 +- .../xlf/FSDependencyManager.txt.ja.xlf | 6 +- .../xlf/FSDependencyManager.txt.ko.xlf | 6 +- .../xlf/FSDependencyManager.txt.pl.xlf | 6 +- .../xlf/FSDependencyManager.txt.pt-BR.xlf | 6 +- .../xlf/FSDependencyManager.txt.ru.xlf | 6 +- .../xlf/FSDependencyManager.txt.tr.xlf | 6 +- .../xlf/FSDependencyManager.txt.zh-Hans.xlf | 6 +- .../xlf/FSDependencyManager.txt.zh-Hant.xlf | 6 +- src/fsharp/FindUnsolved.fs | 6 +- src/fsharp/FindUnsolved.fsi | 1 - src/fsharp/FxResolver.fs | 892 + src/fsharp/IlxGen.fs | 1684 +- src/fsharp/IlxGen.fsi | 1 - src/fsharp/InfoReader.fs | 165 +- src/fsharp/InfoReader.fsi | 31 +- src/fsharp/InnerLambdasToTopLevelFuncs.fs | 23 +- src/fsharp/InternalCollections.fsi | 32 +- src/fsharp/LanguageFeatures.fs | 12 + src/fsharp/LanguageFeatures.fsi | 4 + src/fsharp/LegacyHostedCompilerForTesting.fs | 13 +- src/fsharp/LegacyMSBuildReferenceResolver.fs | 56 +- src/fsharp/LegacyMSBuildReferenceResolver.fsi | 6 +- src/fsharp/LexFilter.fs | 13 +- src/fsharp/Logger.fs | 6 +- src/fsharp/Logger.fsi | 2 +- src/fsharp/LowerCallsAndSeqs.fs | 463 +- src/fsharp/LowerCallsAndSeqs.fsi | 9 +- src/fsharp/MethodCalls.fs | 30 +- src/fsharp/MethodCalls.fsi | 16 +- src/fsharp/MethodOverrides.fs | 30 +- src/fsharp/MethodOverrides.fsi | 10 +- .../DependencyManager.txt | 4 - .../Directory.Build.props | 9 - .../Microsoft.DotNet.DependencyManager.fsproj | 67 - .../README.md | 44 - .../Microsoft.FSharp.Compiler.csproj | 6 +- .../Microsoft.FSharp.Compiler.nuspec | 38 +- src/fsharp/NameResolution.fs | 91 +- src/fsharp/NameResolution.fsi | 218 +- src/fsharp/NicePrint.fs | 712 +- src/fsharp/NicePrint.fsi | 44 +- src/fsharp/OptimizeInputs.fs | 144 +- src/fsharp/OptimizeInputs.fsi | 5 +- src/fsharp/Optimizer.fs | 210 +- src/fsharp/Optimizer.fsi | 16 +- src/fsharp/ParseAndCheckInputs.fs | 653 +- src/fsharp/ParseAndCheckInputs.fsi | 38 +- src/fsharp/ParseHelpers.fs | 60 +- src/fsharp/ParseHelpers.fsi | 46 +- src/fsharp/PatternMatchCompilation.fs | 112 +- src/fsharp/PatternMatchCompilation.fsi | 13 +- src/fsharp/PostInferenceChecks.fs | 39 +- src/fsharp/PrettyNaming.fs | 105 +- src/fsharp/PrettyNaming.fsi | 118 +- src/fsharp/QueueList.fs | 13 +- src/fsharp/QueueList.fsi | 2 +- src/fsharp/QuotationPickler.fs | 332 +- src/fsharp/QuotationPickler.fsi | 32 +- src/fsharp/QuotationTranslator.fs | 19 +- src/fsharp/QuotationTranslator.fsi | 4 +- src/fsharp/ReferenceResolver.fs | 101 +- src/fsharp/ReferenceResolver.fsi | 98 +- src/fsharp/ScriptClosure.fs | 351 +- src/fsharp/ScriptClosure.fsi | 37 +- src/fsharp/SignatureConformance.fs | 125 +- src/fsharp/SignatureConformance.fsi | 17 +- .../SimulatedMSBuildReferenceResolver.fs | 45 +- .../SimulatedMSBuildReferenceResolver.fsi | 7 +- src/fsharp/StaticLinking.fs | 345 +- src/fsharp/StaticLinking.fsi | 2 +- src/fsharp/SyntaxTree.fs | 883 +- src/fsharp/SyntaxTree.fsi | 2160 + src/fsharp/SyntaxTreeOps.fs | 112 +- src/fsharp/SyntaxTreeOps.fsi | 41 +- src/fsharp/TcGlobals.fs | 1251 +- src/fsharp/TextLayoutRender.fs | 173 + src/fsharp/TextLayoutRender.fsi | 117 + src/fsharp/TypeRelations.fs | 8 +- src/fsharp/TypeRelations.fsi | 4 +- src/fsharp/TypedTree.fs | 289 +- src/fsharp/TypedTreeBasics.fs | 7 +- src/fsharp/TypedTreeBasics.fsi | 30 +- src/fsharp/TypedTreeOps.fs | 267 +- src/fsharp/TypedTreeOps.fsi | 1668 +- src/fsharp/TypedTreePickle.fs | 116 +- src/fsharp/TypedTreePickle.fsi | 27 +- src/fsharp/UnicodeLexing.fs | 21 +- src/fsharp/UnicodeLexing.fsi | 10 +- src/fsharp/XmlAdapters.fs | 2 +- src/fsharp/XmlAdapters.fsi | 2 +- src/fsharp/XmlDoc.fs | 140 +- src/fsharp/XmlDoc.fsi | 40 +- src/fsharp/XmlDocFileWriter.fs | 62 +- src/fsharp/XmlDocFileWriter.fsi | 6 + src/fsharp/absil/bytes.fs | 560 +- src/fsharp/absil/bytes.fsi | 36 +- src/fsharp/absil/il.fs | 407 +- src/fsharp/absil/il.fsi | 1486 +- src/fsharp/absil/ilascii.fs | 5 +- src/fsharp/absil/ilascii.fsi | 7 +- src/fsharp/absil/ilbinary.fs | 4 +- src/fsharp/absil/ilbinary.fsi | 6 +- src/fsharp/absil/illex.fsl | 12 +- src/fsharp/absil/illib.fs | 593 +- src/fsharp/absil/illib.fsi | 379 +- src/fsharp/absil/ilmorph.fs | 108 +- src/fsharp/absil/ilmorph.fsi | 5 +- src/fsharp/absil/ilnativeres.fs | 2 +- src/fsharp/absil/ilnativeres.fsi | 4 +- src/fsharp/absil/ilpars.fsy | 8 +- src/fsharp/absil/ilprint.fs | 63 +- src/fsharp/absil/ilprint.fsi | 2 - src/fsharp/absil/ilread.fs | 2295 +- src/fsharp/absil/ilread.fsi | 28 +- src/fsharp/absil/ilreflect.fs | 1027 +- src/fsharp/absil/ilreflect.fsi | 6 +- src/fsharp/absil/ilsign.fs | 60 +- src/fsharp/absil/ilsign.fsi | 2 +- src/fsharp/absil/ilsupp.fs | 61 +- src/fsharp/absil/ilsupp.fsi | 26 +- src/fsharp/absil/ilwrite.fs | 3006 +- src/fsharp/absil/ilwrite.fsi | 8 +- src/fsharp/absil/ilwritepdb.fs | 222 +- src/fsharp/absil/ilwritepdb.fsi | 6 +- src/fsharp/absil/ilx.fs | 25 +- src/fsharp/absil/ilx.fsi | 36 +- src/fsharp/absil/zmap.fs | 3 +- src/fsharp/absil/zmap.fsi | 6 +- src/fsharp/absil/zset.fs | 5 +- src/fsharp/absil/zset.fsi | 6 +- src/fsharp/autobox.fs | 13 +- src/fsharp/autobox.fsi | 4 +- src/fsharp/fsc.fs | 613 +- src/fsharp/fsc.fsi | 22 +- src/fsharp/fsc/fsc.fsproj | 11 +- src/fsharp/fscmain.fs | 16 +- src/fsharp/fsi/FSIstrings.txt | 2 +- src/fsharp/fsi/console.fs | 38 +- src/fsharp/fsi/fsi.fs | 1716 +- src/fsharp/fsi/fsi.fsi | 154 +- src/fsharp/fsi/fsi.fsproj | 19 +- src/fsharp/fsi/fsimain.fs | 41 +- src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf | 4 +- src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf | 4 +- src/fsharp/fsiAnyCpu/fsiAnyCpu.fsproj | 4 +- src/fsharp/fsiaux.fs | 6 +- src/fsharp/ilx/EraseClosures.fs | 46 +- src/fsharp/ilx/EraseClosures.fsi | 10 +- src/fsharp/ilx/EraseUnions.fs | 68 +- src/fsharp/ilx/EraseUnions.fsi | 4 +- src/fsharp/ilx/ilxsettings.fs | 37 - src/fsharp/import.fs | 26 +- src/fsharp/import.fsi | 9 +- src/fsharp/infos.fs | 78 +- src/fsharp/infos.fsi | 16 +- src/fsharp/layout.fs | 337 - src/fsharp/layout.fsi | 233 - src/fsharp/lex.fsl | 1018 +- src/fsharp/lexhelp.fs | 95 +- src/fsharp/lexhelp.fsi | 33 +- src/fsharp/lib.fs | 255 +- src/fsharp/lib.fsi | 49 +- src/fsharp/pars.fsy | 641 +- src/fsharp/pplex.fsl | 2 +- src/fsharp/pppars.fsy | 2 +- src/fsharp/range.fs | 400 +- src/fsharp/range.fsi | 235 +- src/fsharp/rational.fs | 2 +- src/fsharp/rational.fsi | 2 +- src/fsharp/service/ExternalSymbol.fs | 89 +- src/fsharp/service/ExternalSymbol.fsi | 79 +- src/fsharp/service/FSharpCheckerResults.fs | 1771 +- src/fsharp/service/FSharpCheckerResults.fsi | 239 +- src/fsharp/service/FSharpParseFileResults.fs | 757 + src/fsharp/service/FSharpParseFileResults.fsi | 83 + src/fsharp/service/IncrementalBuild.fs | 1895 +- src/fsharp/service/IncrementalBuild.fsi | 131 +- src/fsharp/service/ItemKey.fs | 102 +- src/fsharp/service/ItemKey.fsi | 7 +- src/fsharp/service/QuickParse.fs | 10 +- src/fsharp/service/QuickParse.fsi | 4 +- src/fsharp/service/Reactor.fs | 204 - src/fsharp/service/Reactor.fsi | 56 - src/fsharp/service/SemanticClassification.fs | 106 +- src/fsharp/service/SemanticClassification.fsi | 89 +- .../service/SemanticClassificationKey.fs | 82 + .../service/SemanticClassificationKey.fsi | 33 + src/fsharp/service/ServiceAnalysis.fs | 63 +- src/fsharp/service/ServiceAnalysis.fsi | 5 +- src/fsharp/service/ServiceAssemblyContent.fs | 825 +- src/fsharp/service/ServiceAssemblyContent.fsi | 134 +- .../service/ServiceCompilerDiagnostics.fs | 22 +- .../service/ServiceCompilerDiagnostics.fsi | 12 +- src/fsharp/service/ServiceConstants.fs | 2 +- src/fsharp/service/ServiceDeclarationLists.fs | 587 +- .../service/ServiceDeclarationLists.fsi | 190 +- .../service/ServiceErrorResolutionHints.fs | 9 +- .../service/ServiceErrorResolutionHints.fsi | 4 +- .../service/ServiceInterfaceStubGenerator.fs | 114 +- .../service/ServiceInterfaceStubGenerator.fsi | 40 +- src/fsharp/service/ServiceLexing.fs | 1294 +- src/fsharp/service/ServiceLexing.fsi | 544 +- src/fsharp/service/ServiceNavigation.fs | 389 +- src/fsharp/service/ServiceNavigation.fsi | 145 +- .../service/ServiceParamInfoLocations.fs | 52 +- .../service/ServiceParamInfoLocations.fsi | 10 +- src/fsharp/service/ServiceParseTreeWalk.fs | 351 +- src/fsharp/service/ServiceParseTreeWalk.fsi | 92 + ...typedParse.fs => ServiceParsedInputOps.fs} | 1470 +- src/fsharp/service/ServiceParsedInputOps.fsi | 150 + src/fsharp/service/ServiceStructure.fs | 80 +- src/fsharp/service/ServiceStructure.fsi | 8 +- src/fsharp/service/ServiceUntypedParse.fsi | 157 - src/fsharp/service/ServiceXmlDocParser.fs | 51 +- src/fsharp/service/ServiceXmlDocParser.fsi | 8 +- src/fsharp/service/service.fs | 1437 +- src/fsharp/service/service.fsi | 285 +- src/fsharp/symbols/Exprs.fs | 99 +- src/fsharp/symbols/Exprs.fsi | 134 +- src/fsharp/symbols/SymbolHelpers.fs | 787 +- src/fsharp/symbols/SymbolHelpers.fsi | 302 +- src/fsharp/symbols/SymbolPatterns.fs | 46 +- src/fsharp/symbols/SymbolPatterns.fsi | 98 +- src/fsharp/symbols/Symbols.fs | 417 +- src/fsharp/symbols/Symbols.fsi | 223 +- src/fsharp/tainted.fs | 48 +- src/fsharp/tainted.fsi | 10 +- src/fsharp/utils/CompilerLocationUtils.fs | 179 +- src/fsharp/utils/CompilerLocationUtils.fsi | 28 +- src/fsharp/utils/FileSystem.fs | 949 + src/fsharp/utils/FileSystem.fsi | 405 + src/fsharp/utils/HashMultiMap.fs | 1 - src/fsharp/utils/HashMultiMap.fsi | 2 - src/fsharp/utils/PathMap.fs | 4 +- src/fsharp/utils/PathMap.fsi | 2 +- src/fsharp/utils/ResizeArray.fs | 4 +- src/fsharp/utils/ResizeArray.fsi | 6 - src/fsharp/utils/TaggedCollections.fs | 17 - src/fsharp/utils/filename.fs | 53 - src/fsharp/utils/filename.fsi | 30 - src/fsharp/utils/prim-lexing.fs | 65 +- src/fsharp/utils/prim-lexing.fsi | 73 +- src/fsharp/utils/sformat.fs | 247 +- src/fsharp/utils/sformat.fsi | 275 +- src/fsharp/xlf/FSComp.txt.cs.xlf | 69 +- src/fsharp/xlf/FSComp.txt.de.xlf | 71 +- src/fsharp/xlf/FSComp.txt.es.xlf | 69 +- src/fsharp/xlf/FSComp.txt.fr.xlf | 69 +- src/fsharp/xlf/FSComp.txt.it.xlf | 69 +- src/fsharp/xlf/FSComp.txt.ja.xlf | 69 +- src/fsharp/xlf/FSComp.txt.ko.xlf | 69 +- src/fsharp/xlf/FSComp.txt.pl.xlf | 67 +- src/fsharp/xlf/FSComp.txt.pt-BR.xlf | 69 +- src/fsharp/xlf/FSComp.txt.ru.xlf | 69 +- src/fsharp/xlf/FSComp.txt.tr.xlf | 69 +- src/fsharp/xlf/FSComp.txt.zh-Hans.xlf | 69 +- src/fsharp/xlf/FSComp.txt.zh-Hant.xlf | 69 +- src/scripts/scriptlib.fsx | 2 +- .../BasicProvider.DesignTime.fsproj | 2 +- .../BasicProvider.Tests.fsproj | 2 +- .../BasicProvider.Tests/NuGet.config | 2 +- .../BasicProvider/BasicProvider.fsproj | 2 +- .../BasicProvider/TestBasicProvider.cmd | 8 +- .../ComboProvider.Tests.fsproj | 2 +- .../ComboProvider.Tests/NuGet.config | 2 +- .../ComboProvider/ComboProvider.fsproj | 4 +- .../ComboProvider/TestComboProvider.cmd | 8 +- .../FSharp.Build.UnitTests.fsproj | 4 +- .../LetBindings/UseBindings.fs | 62 + .../Conformance/PatternMatching/Simple.fs | 13 + .../EmittedIL/Misc.fs | 32 + .../EmittedIL/SkipLocalsInit.fs | 133 + .../EmittedIL/TupleElimination.fs | 799 + .../AccessOfTypeAbbreviationTests.fs | 2 +- .../ErrorMessages/InvalidLiteralTests.fs | 18 + .../InvalidNumericLiteralTests.fs | 6 +- .../ErrorMessages/TypeEqualsMissingTests.fs | 4 +- .../FSharp.Compiler.ComponentTests.fsproj | 15 +- .../Language/AttributeCheckingTests.fs | 44 + .../Language/CastingTests.fs | 113 + .../Language/ComputationExpressionTests.fs | 32 +- .../Language/XmlComments.fs | 51 +- .../LetBindings/UseBindingDiscard01.fs | 6 + .../CompletionTests.fs | 2 +- .../ConsoleHelpers.fs | 64 - .../DependencyManagerInteractiveTests.fs | 101 +- .../DependencyManagerLineParserTests.fs | 52 +- ...ompiler.Private.Scripting.UnitTests.fsproj | 11 +- .../FSharpScriptTests.fs | 45 +- .../TestHelpers.fs | 32 - .../FSharp.Compiler.Service.Tests.fsproj | 4 +- .../LibraryTestFx.fs | 36 +- .../SurfaceArea.netstandard.fs | 48891 +++------------- .../AssemblySigningAttributes.fs | 88 + .../BuildGraphTests.fs | 273 + .../ByteMemoryTests.fs | 5 +- .../CompilerTestHelpers.fs | 1 - .../FSharp.Compiler.UnitTests.fsproj | 11 +- .../HashIfExpression.fs | 7 +- .../ManglingNameOfProvidedTypes.fs | 3 +- .../ProductVersion.fs | 4 +- .../FSharp.Core.UnitTests.fsproj | 7 +- .../FSharp.Core/ComparersRegression.fs | 8398 +-- ...UnionType.fs => DiscriminatedUnionType.fs} | 0 .../Microsoft.FSharp.Control/AsyncModule.fs | 15 +- .../Microsoft.FSharp.Control/AsyncType.fs | 168 +- .../Microsoft.FSharp.Control/EventTypes.fs | 77 + .../MailboxProcessorType.fs | 109 +- .../Microsoft.FSharp.Core/PrintfTests.fs | 46 +- .../FSharpReflection.fs | 176 +- .../FSharp.Core/PrimTypes.fs | 22 +- tests/FSharp.Core.UnitTests/SurfaceArea.fs | 8 + tests/FSharp.Test.Utilities/Compiler.fs | 62 +- tests/FSharp.Test.Utilities/CompilerAssert.fs | 431 +- .../FSharp.Test.Utilities.fsproj | 24 +- tests/FSharp.Test.Utilities/ScriptHelpers.fs | 158 + tests/FSharp.Test.Utilities/TestFramework.fs | 105 +- tests/FSharp.Test.Utilities/Utilities.fs | 121 +- .../Xunit/Attributes/DirectoryAttribute.fs | 23 +- tests/benchmarks/Benchmarks.sln | 44 - .../CompilerServiceBenchmarks.fsproj | 16 +- .../CompilerServiceBenchmarks/Program.fs | 46 +- tests/benchmarks/MicroPerf/Benchmarks.fs | 49 + .../MicroPerf/CS/MicroPerfCSharp.cs | 17 + .../MicroPerf/CS/MicroPerfCSharp.csproj | 13 + tests/benchmarks/MicroPerf/MicroPerf.fsproj | 31 + .../CodeGen/EmittedIL/BooleanLogic.fs | 55 + .../EmittedIL/ComputedListExpressions.fs | 407 + .../Compiler/CodeGen/EmittedIL/Mutation.fs | 66 +- .../BasicGrammarElements/BasicConstants.fs | 2 +- .../DataExpressions/ComputationExpressions.fs | 20 +- .../Compiler/Language/AnonRecordTests.fs | 6 +- tests/fsharp/Compiler/Language/ByrefTests.fs | 22 +- .../Language/CompilerDirectiveTests.fs | 6 +- .../Language/ComputationExpressionTests.fs | 36 +- .../Language/CustomCollectionTests.fs | 10 +- .../Language/DefaultInterfaceMemberTests.fs | 278 +- .../Compiler/Language/FixedIndexSliceTests.fs | 80 +- .../Compiler/Language/HatDesugaringTests.fs | 20 +- .../InitOnlyPropertyConsumptionTests.fs | 57 + .../Compiler/Language/InterfaceTests.fs | 6 +- .../Language/OpenTypeDeclarationTests.fs | 4 +- .../Compiler/Language/OptionalInteropTests.fs | 3 +- .../Language/SlicingQuotationTests.fs | 2 +- .../Language/SpanOptimizationTests.fs | 296 +- tests/fsharp/Compiler/Language/SpanTests.fs | 71 +- .../Compiler/Language/StringInterpolation.fs | 144 +- .../Language/StructActivePatternTests.fs | 205 + .../Compiler/Language/TypeAttributeTests.fs | 6 +- .../Core/Collections/IEnumerableTests.fs | 10 +- .../Libraries/Core/Collections/ListTests.fs | 6 +- .../Core/NativeInterop/StackallocTests.fs | 16 +- .../Libraries/Core/Operators/AbsTests.fs | 16 +- .../Libraries/Core/Operators/HashTests.fs | 4 +- .../Libraries/Core/Operators/SignTests.fs | 10 +- .../Libraries/Core/Operators/StringTests.fs | 2 +- .../PreComputedTupleConstructorTests.fs | 2 +- .../NullableOptionalRegressionTests.fs | 63 + .../Compiler/Service/MultiProjectTests.fs | 87 + .../Service/SignatureGenerationTests.fs | 109 + tests/fsharp/Compiler/SourceTextTests.fs | 1 + .../fsharp/Compiler/Stress/LargeExprTests.fs | 61 +- .../Warnings/AssignmentWarningTests.fs | 12 +- .../Warnings/ExperimentalAttributeTests.fs | 4 +- .../Warnings/PatternMatchingWarningTests.fs | 2 +- tests/fsharp/FSharpSuite.Tests.fsproj | 12 +- tests/fsharp/NUnitHelpers.fs | 3 + tests/fsharp/TypeProviderTests.fs | 41 +- tests/fsharp/core/innerpoly/test.fsx | 50 + .../fsharp/core/printf-interpolated/test.fsx | 25 +- tests/fsharp/core/printf/test.fsx | 37 +- .../printing/z.output.test.1000.stderr.bsl | 2 +- .../printing/z.output.test.200.stderr.bsl | 2 +- .../printing/z.output.test.default.stderr.bsl | 2 +- .../printing/z.output.test.off.stderr.bsl | 2 +- .../printing/z.output.test.quiet.stderr.bsl | 2 +- tests/fsharp/core/quotes/test.fsx | 396 +- tests/fsharp/readme.md | 2 +- tests/fsharp/single-test.fs | 63 +- tests/fsharp/tests.fs | 862 +- .../tools/fsharp41/net45/providerDesigner.dll | Bin 0 -> 75264 bytes .../fsharp41/net461/providerDesigner.dll | Bin 0 -> 75264 bytes .../netstandard2.0/providerDesigner.dll | Bin 0 -> 75264 bytes .../fsharp41/net45/providerDesigner.dll | Bin 0 -> 75264 bytes .../fsharp41/net461/providerDesigner.dll | Bin 0 -> 75264 bytes .../netstandard2.0/providerDesigner.dll | Bin 0 -> 75264 bytes .../fsharp/typeProviders/helloWorld/test.fsx | 3 + tests/fsharp/typecheck/sigs/neg03.bsl | 6 +- tests/fsharp/typecheck/sigs/neg07.bsl | 4 +- tests/fsharp/typecheck/sigs/neg10.bsl | 6 +- tests/fsharp/typecheck/sigs/neg16.bsl | 18 +- tests/fsharp/typecheck/sigs/neg20.bsl | 2 +- tests/fsharp/typecheck/sigs/neg47.bsl | 6 +- .../CCtorDUWithMember01.il.bsl | 336 +- .../CCtorDUWithMember02.il.bsl | 16 +- .../CCtorDUWithMember03.il.bsl | 24 +- .../CCtorDUWithMember04.il.bsl | 16 +- .../GeneratedIterators/GenIter01.il.bsl | 414 +- .../GeneratedIterators/GenIter02.il.bsl | 424 +- .../GeneratedIterators/GenIter03.il.bsl | 414 +- .../GeneratedIterators/GenIter04.il.bsl | 432 +- .../InequalityComparison01.il.bsl | 14 +- .../InequalityComparison02.il.bsl | 14 +- .../InequalityComparison03.il.bsl | 14 +- .../InequalityComparison04.il.bsl | 14 +- .../InequalityComparison05.il.bsl | 28 +- .../ListExpressionSteppingTest1.il.bsl | 192 +- .../ListExpressionSteppingTest2.il.bsl | 244 +- .../ListExpressionSteppingTest3.il.bsl | 249 +- .../ListExpressionSteppingTest4.il.bsl | 308 +- .../ListExpressionSteppingTest5.il.bsl | 471 +- .../ListExpressionSteppingTest6.il.bsl | 593 +- .../EmittedIL/Misc/AbstractClass.il.bsl | 14 +- .../CodeGen/EmittedIL/Misc/AnonRecd.il.bsl | 482 +- .../Misc/ArgumentNamesInClosures01.il.bsl | 4 +- .../EmittedIL/Misc/CodeGenRenamings01.il.bsl | 146 +- .../CustomAttributeGenericParameter01.il.bsl | 12 +- .../CodeGen/EmittedIL/Misc/Decimal01.il.bsl | 8 +- .../EmittedIL/Misc/EntryPoint01.il.bsl | 36 +- .../EmittedIL/Misc/EqualsOnUnions01.il.bsl | 746 +- .../CodeGen/EmittedIL/Misc/ForLoop01.il.bsl | 14 +- .../CodeGen/EmittedIL/Misc/ForLoop02.il.bsl | 14 +- .../CodeGen/EmittedIL/Misc/ForLoop03.il.bsl | 12 +- .../Misc/GeneralizationOnUnions01.il.bsl | 230 +- .../Misc/GenericTypeStaticField01.il.bsl | 4 +- .../EmittedIL/Misc/IfThenElse01.il.bsl | 18 +- .../EmittedIL/Misc/LetIfThenElse01.il.bsl | 130 +- .../CodeGen/EmittedIL/Misc/Lock01.il.bsl | 36 +- .../CodeGen/EmittedIL/Misc/Marshal.il.bsl | 10 +- .../EmittedIL/Misc/MethodImplNoInline.il.bsl | 6 +- .../Misc/MethodImplNoInline02.il.bsl | 6 +- .../Misc/ModuleWithExpression01.il.bsl | 14 +- .../EmittedIL/Misc/NoBoxingOnDispose01.il.bsl | 12 +- .../Misc/NonEscapingArguments02.il.bsl | 14 +- .../CodeGen/EmittedIL/Misc/PreserveSig.il.bsl | 12 +- .../EmittedIL/Misc/Seq_for_all01.il.bsl | 24 +- .../CodeGen/EmittedIL/Misc/Structs01.il.bsl | 50 +- .../CodeGen/EmittedIL/Misc/Structs02.il.bsl | 50 +- .../Misc/StructsAsArrayElements01.il.bsl | 50 +- .../Misc/TryWith_NoFilterBlocks01.il.bsl | 46 +- .../Source/CodeGen/EmittedIL/Misc/cas.il.bsl | 14 +- .../Linq101Aggregates01.il.bsl | 5476 +- .../Linq101ElementOperators01.il.bsl | 1184 +- .../Linq101Grouping01.il.bsl | 4 +- .../Linq101Joins01.il.bsl | 50 +- .../Linq101Ordering01.il.bsl | 1188 +- .../Linq101Partitioning01.il.bsl | 1180 +- .../Linq101Quantifiers01.il.bsl | 582 +- .../Linq101Select01.il.bsl | 2082 +- .../Linq101SetOperators01.il.bsl | 1190 +- .../Linq101Where01.il.bsl | 344 +- .../SeqExpressionSteppingTest1.il.bsl | 106 +- .../SeqExpressionSteppingTest2.il.bsl | 152 +- .../SeqExpressionSteppingTest3.il.bsl | 138 +- .../SeqExpressionSteppingTest4.il.bsl | 200 +- .../SeqExpressionSteppingTest5.il.bsl | 376 +- .../SeqExpressionSteppingTest6.il.bsl | 452 +- .../SeqExpressionSteppingTest7.il.bsl | 308 +- .../SeqExpressionTailCalls01.il.bsl | 150 +- .../SeqExpressionTailCalls02.il.bsl | 286 +- .../EmittedIL/StaticInit/LetBinding01.il.bsl | 12 +- .../StaticInit/StaticInit_Class01.il.bsl | 48 +- .../StaticInit/StaticInit_Module01.il.bsl | 20 +- .../StaticInit/StaticInit_Struct01.il.bsl | 36 +- .../SteppingMatch/SteppingMatch01.il.bsl | 14 +- .../SteppingMatch/SteppingMatch02.il.bsl | 14 +- .../SteppingMatch/SteppingMatch03.il.bsl | 62 +- .../SteppingMatch/SteppingMatch04.il.bsl | 62 +- .../SteppingMatch/SteppingMatch05.il.bsl | 62 +- .../SteppingMatch/SteppingMatch06.il.bsl | 334 +- .../SteppingMatch/SteppingMatch07.il.bsl | 334 +- .../SteppingMatch/SteppingMatch08.il.bsl | 14 +- .../SteppingMatch/SteppingMatch09.il.bsl | 74 +- .../TestFunctions/TestFunction1.il.bsl | 12 +- .../TestFunctions/TestFunction10.il.bsl | 12 +- .../TestFunctions/TestFunction13.il.bsl | 14 +- .../TestFunctions/TestFunction14.il.bsl | 4 +- .../TestFunctions/TestFunction16.il.bsl | 646 +- .../TestFunctions/TestFunction17.il.bsl | 580 +- .../TestFunctions/TestFunction19.il.bsl | 12 +- .../TestFunctions/TestFunction20.il.bsl | 12 +- .../TestFunctions/TestFunction21.il.bsl | 646 +- .../TestFunctions/TestFunction23.il.bsl | 4 +- .../TestFunctions/TestFunction24.il.bsl | 748 +- .../TestFunctions/TestFunction3b.il.bsl | 48 +- .../TestFunctions/TestFunction3c.il.bsl | 50 +- .../TestFunctions/TestFunction9b4.il.bsl | 14 +- .../TestFunctions/Testfunction11.il.bsl | 14 +- .../TestFunctions/Testfunction12.il.bsl | 12 +- .../TestFunctions/Testfunction15.il.bsl | 4 +- .../TestFunctions/Testfunction18.il.bsl | 14 +- .../TestFunctions/Testfunction2.il.bsl | 14 +- .../TestFunctions/Testfunction22.il.bsl | 12 +- .../TestFunctions/Testfunction22b.il.bsl | 14 +- .../TestFunctions/Testfunction22c.il.bsl | 14 +- .../TestFunctions/Testfunction22d.il.bsl | 14 +- .../TestFunctions/Testfunction22e.il.bsl | 14 +- .../TestFunctions/Testfunction22f.il.bsl | 28 +- .../TestFunctions/Testfunction22g.il.bsl | 34 +- .../TestFunctions/Testfunction22h.il.bsl | 14 +- .../TestFunctions/Testfunction3.il.bsl | 14 +- .../TestFunctions/Testfunction4.il.bsl | 14 +- .../TestFunctions/Testfunction5.il.bsl | 14 +- .../TestFunctions/Testfunction6.il.bsl | 4 +- .../TestFunctions/Testfunction7.il.bsl | 14 +- .../TestFunctions/Testfunction8.il.bsl | 36 +- .../TestFunctions/Testfunction9.il.bsl | 36 +- .../TestFunctions/Testfunction9b.il.bsl | 246 +- .../TestFunctions/Testfunction9b1.il.bsl | 246 +- .../TestFunctions/Testfunction9b2.il.bsl | 246 +- .../TestFunctions/Testfunction9b3.il.bsl | 246 +- .../EmittedIL/Tuples/OptionalArg01.il.bsl | 144 +- .../CodeGen/EmittedIL/Tuples/Tuple01.il.bsl | 14 +- .../CodeGen/EmittedIL/Tuples/Tuple02.il.bsl | 14 +- .../CodeGen/EmittedIL/Tuples/Tuple03.il.bsl | 14 +- .../CodeGen/EmittedIL/Tuples/Tuple04.il.bsl | 14 +- .../CodeGen/EmittedIL/Tuples/Tuple05.il.bsl | 14 +- .../CodeGen/EmittedIL/Tuples/Tuple06.il.bsl | 14 +- .../CodeGen/EmittedIL/Tuples/Tuple07.il.bsl | 14 +- .../CodeGen/EmittedIL/Tuples/Tuple08.il.bsl | 14 +- .../EmittedIL/Tuples/TupleElimination.il.bsl | 18 +- .../EmittedIL/Tuples/TupleMonster.il.bsl | 12 +- .../Tuples/ValueTupleAliasConstructor.il.bsl | 23 +- .../fsc/dumpAllCommandLineOptions/dummy.fs | 1 - .../fsc/dumpAllCommandLineOptions/dummy.fsx | 1 - .../fsc/help/help40.437.1033.bsl | 5 +- .../CompilerOptions/fsc/warnaserror/env.lst | 8 +- .../UnionTypes/W_UnionCaseProduction01.fsx | 3 +- .../CustomAttributes/Basic/E_StructLayout.fs | 4 +- .../SignatureFiles/E_MissingSourceFile01.fsi | 2 +- .../ConditionalCompilation/E_MustBeIdent02.fs | 9 +- .../System.ThreadStatic/W_Deprecated01.fs | 2 +- .../HashConstraint02.fs | 3 +- .../General/W_LowercaseLiteralNotIgnored.fs | 2 +- .../Source/EntryPoint/E_twoentrypoints001.fs | 2 +- .../Misc/UnknownDependencyManager/script1.fsx | 4 +- .../Inlining/StructUnion01.il.bsl | 276 +- .../testenv/bin/KnownFailRewriter.fsx | 2 +- .../HostedCompilerServer.fsproj | 4 +- .../src/HostedCompilerServer/Program.fs | 7 +- .../testenv/src/PEVerify/PEVerify.csproj | 4 +- tests/service/AssemblyContentProviderTests.fs | 6 +- tests/service/AssemblyReaderShim.fs | 3 +- tests/service/CSharpProjectAnalysis.fs | 52 +- tests/service/Common.fs | 207 +- tests/service/EditorTests.fs | 514 +- tests/service/ExprTests.fs | 605 +- tests/service/FileSystemTests.fs | 113 +- tests/service/FsiTests.fs | 6 +- tests/service/InteractiveCheckerTests.fs | 16 +- tests/service/MultiProjectAnalysisTests.fs | 551 +- tests/service/ParserTests.fs | 29 +- tests/service/PatternMatchCompilationTests.fs | 965 +- tests/service/PerfTests.fs | 32 +- tests/service/ProjectAnalysisTests.fs | 1840 +- tests/service/ScriptOptionsTests.fs | 59 +- tests/service/ServiceUntypedParseTests.fs | 503 +- tests/service/StructureTests.fs | 33 +- tests/service/Symbols.fs | 992 +- tests/service/TokenizerTests.fs | 4 +- tests/service/TreeVisitorTests.fs | 17 +- tests/service/data/TestTP/Library.fs | 26 +- tests/service/data/TestTP/ProvidedTypes.fs | 786 +- tests/service/data/TestTP/TestTP.fsproj | 2 +- .../TheBigFileOfDebugStepping.fsx | 20 + .../sdk-script-manual-tests/README.md.txt | 84 + ...etcore-script-reference-netcore-script.fsx | 9 + .../netcore-script.fsx | 26 + .../with-sdk-3.1.0/global.json | 5 + .../netcore-script-sdk-3.1.0.fsx | 26 + .../with-sdk-5.0.101/global.json | 5 + .../netcore-script-sdk-5.0.101.fsx | 26 + .../with-sdk-666.666.666/global.json | 5 + .../netcore-script-sdk-666.666.666 - Copy.fsx | 13 + .../netcore-script-sdk-666.666.666.fsx | 14 + .../with-sdk-666.666.667/global.json | 5 + .../netcore-script-sdk-666.666.666.fsx | 14 + vsintegration/Directory.Build.targets | 6 +- .../Template/ConsoleApplication.fsproj | 1 + .../LibraryProject/Template/Library.fsproj | 1 + .../TutorialProject/Template/Tutorial.fsproj | 1 + .../TutorialProject/Template/Tutorial.fsx | 11 +- .../Properties/launchSettings.json | 2 +- .../Source.extension.vsixmanifest | 4 +- .../VisualFSharp.Core.targets | 256 + .../VisualFSharpFull/VisualFSharpDebug.csproj | 55 + .../VisualFSharpFull/VisualFSharpFull.csproj | 278 +- .../BraceCompletionSessionProvider.fs | 82 +- .../SetGlobalPropertiesForSdkProjects.fs | 4 +- .../ClassificationDefinitions.fs | 8 +- .../Classification/ClassificationService.fs | 73 +- .../CodeFix/AddInstanceMemberParameter.fs | 37 + .../AddMissingEqualsToTypeDefinition.fs | 6 +- .../CodeFix/AddMissingFunKeyword.fs | 64 + .../AddMissingRecToMutuallyRecFunctions.fs | 70 + .../CodeFix/AddOpenCodeFixProvider.fs | 34 +- ...peAnnotationToObjectOfIndeterminateType.fs | 98 + .../ChangePrefixNegationToInfixSubtraction.fs | 6 +- .../ChangeRefCellDerefToNotExpression.fs | 8 +- .../FSharp.Editor/CodeFix/ChangeToUpcast.fs | 2 +- .../ConvertCSharpLambdaToFSharpLambda.fs | 8 +- .../CodeFix/ConvertToAnonymousRecord.fs | 9 +- .../ConvertToNotEqualsEqualityExpression.fs | 44 + ...ConvertToSingleEqualsEqualityExpression.fs | 4 +- .../FSharp.Editor/CodeFix/FixIndexerAccess.fs | 9 +- .../ImplementInterfaceCodeFixProvider.fs | 47 +- .../CodeFix/MakeDeclarationMutable.fs | 21 +- .../CodeFix/MakeOuterBindingRecursive.fs | 8 +- .../MissingReferenceCodeFixProvider.fs | 4 +- .../CodeFix/ProposeUppercaseLabel.fs | 9 +- .../CodeFix/RemoveReturnOrYield.fs | 8 +- .../CodeFix/RemoveUnusedBinding.fs | 64 + .../CodeFix/RemoveUnusedOpens.fs | 12 +- .../CodeFix/RenameParamToMatchSignature.fs | 14 +- .../CodeFix/RenameUnusedValue.fs | 26 +- .../CodeFix/ReplaceWithSuggestion.fs | 25 +- .../CodeFix/UseMutationWhenValueIsMutable.fs | 46 +- .../CodeFix/WrapExpressionInParentheses.fs | 5 +- .../AbstractCodeLensDisplayService.fs | 6 +- .../CodeLens/CodeLensGeneralTagger.fs | 4 +- .../CodeLens/CodeLensProvider.fs | 11 +- .../CodeLens/FSharpCodeLensService.fs | 53 +- .../Commands/FsiCommandService.fs | 2 +- .../Commands/HelpContextService.fs | 23 +- .../Commands/XmlDocCommandService.fs | 50 +- .../Common/CodeAnalysisExtensions.fs | 18 +- .../src/FSharp.Editor/Common/Constants.fs | 4 + .../src/FSharp.Editor/Common/Extensions.fs | 40 +- .../Common/FSharpCodeAnalysisExtensions.fs | 49 + .../src/FSharp.Editor/Common/Logger.fs | 4 +- .../src/FSharp.Editor/Common/Logging.fs | 3 +- .../src/FSharp.Editor/Common/Pervasive.fs | 46 +- .../src/FSharp.Editor/Common/RoslynHelpers.fs | 121 +- vsintegration/src/FSharp.Editor/Common/Vs.fs | 8 +- .../Completion/CompletionProvider.fs | 52 +- .../Completion/CompletionService.fs | 10 +- .../Completion/CompletionUtils.fs | 5 +- .../Completion/PathCompletionUtilities.fs | 2 + .../FSharp.Editor/Completion/SignatureHelp.fs | 399 +- .../Debugging/BreakpointResolutionService.fs | 25 +- .../Debugging/LanguageDebugInfoService.fs | 9 +- .../Diagnostics/DocumentDiagnosticAnalyzer.fs | 74 +- .../SimplifyNameDiagnosticAnalyzer.fs | 16 +- .../Diagnostics/UnusedDeclarationsAnalyzer.fs | 29 +- .../UnusedOpensDiagnosticAnalyzer.fs | 25 +- .../DocComments/XMLDocumentation.fs | 73 +- .../DocumentHighlightsService.fs | 34 +- .../src/FSharp.Editor/FSharp.Editor.fsproj | 25 +- .../src/FSharp.Editor/FSharp.Editor.resx | 27 +- .../Formatting/BraceMatchingService.fs | 11 +- .../Formatting/EditorFormattingService.fs | 22 +- .../Formatting/IndentationService.fs | 9 +- .../InlineRename/InlineRenameService.fs | 112 +- .../AssemblyContentProvider.fs | 9 +- .../FSharpAnalysisSaveFileCommandHandler.fs | 89 + .../FSharpCheckerExtensions.fs | 90 - .../LanguageService/FSharpCheckerProvider.fs | 87 - .../LanguageService/FSharpEditorFactory.fs | 11 +- .../FSharpProjectOptionsManager.fs | 341 +- .../IFSharpWorkspaceService.fs | 15 + .../LanguageService/LanguageService.fs | 206 +- .../LegacyProjectWorkspaceMap.fs | 20 +- .../LanguageService/MetadataAsSource.fs | 147 + .../ProvideBraceCompletionAttribute.fs | 4 +- .../LanguageService/SingleFileWorkspaceMap.fs | 281 +- .../LanguageService/SymbolHelpers.fs | 64 +- .../FSharp.Editor/LanguageService/Symbols.fs | 20 +- .../TextViewCreationListener.fs | 2 +- .../LanguageService/Tokenizer.fs | 88 +- .../LanguageService/WorkspaceExtensions.fs | 217 + .../Navigation/FindUsagesService.fs | 42 +- .../Navigation/GoToDefinition.fs | 383 +- .../Navigation/GoToDefinitionService.fs | 43 +- .../Navigation/NavigableSymbolsService.fs | 46 +- .../Navigation/NavigateToSearchService.fs | 175 +- .../Navigation/NavigationBarItemService.fs | 17 +- .../FSharp.Editor/Options/EditorOptions.fs | 94 +- .../Options/SettingsPersistence.fs | 8 +- .../QuickInfo/NavigableTextRun.fs | 6 +- .../src/FSharp.Editor/QuickInfo/Navigation.fs | 17 +- .../QuickInfo/QuickInfoProvider.fs | 103 +- .../src/FSharp.Editor/QuickInfo/Views.fs | 83 +- .../WpfNagivableTextRunViewElementFactory.fs | 2 +- .../Refactor/AddExplicitTypeToParameter.fs | 96 + .../Refactor/ChangeDerefToValueRefactoring.fs | 59 + .../ChangeTypeofWithNameToNameofExpression.fs | 57 + .../Structure/BlockStructureService.fs | 20 +- .../FSharp.Editor/xlf/FSharp.Editor.cs.xlf | 51 +- .../FSharp.Editor/xlf/FSharp.Editor.de.xlf | 53 +- .../FSharp.Editor/xlf/FSharp.Editor.es.xlf | 53 +- .../FSharp.Editor/xlf/FSharp.Editor.fr.xlf | 51 +- .../FSharp.Editor/xlf/FSharp.Editor.it.xlf | 51 +- .../FSharp.Editor/xlf/FSharp.Editor.ja.xlf | 51 +- .../FSharp.Editor/xlf/FSharp.Editor.ko.xlf | 53 +- .../FSharp.Editor/xlf/FSharp.Editor.pl.xlf | 51 +- .../FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf | 51 +- .../FSharp.Editor/xlf/FSharp.Editor.ru.xlf | 51 +- .../FSharp.Editor/xlf/FSharp.Editor.tr.xlf | 51 +- .../xlf/FSharp.Editor.zh-Hans.xlf | 51 +- .../xlf/FSharp.Editor.zh-Hant.xlf | 51 +- .../FSharp.LanguageService.Base.csproj | 3 +- .../LanguageService.cs | 4 +- .../src/FSharp.LanguageService.Base/Source.cs | 8 +- .../BackgroundRequests.fs | 46 +- .../src/FSharp.LanguageService/Colorize.fs | 15 +- .../FSharp.LanguageService.fsproj | 7 +- .../FSharp.LanguageService/FSharpSource.fs | 16 +- .../FSharp.LanguageService/GotoDefinition.fs | 21 +- .../FSharp.LanguageService/Intellisense.fs | 62 +- .../ProjectSitesAndFiles.fs | 142 +- .../src/FSharp.LanguageService/Vs.fs | 8 +- .../XmlDocumentation.fs | 61 +- .../{Project => }/AssemblyInfo.cs | 0 .../{Project => }/AssemblyReferenceNode.cs | 0 .../{Project => }/Attributes.cs | 0 .../{Project => }/Automation/OAFileItem.cs | 0 .../{Project => }/Automation/OAFolderItem.cs | 0 .../Automation/OANavigableProjectItems.cs | 0 .../Automation/OANullProperty.cs | 0 .../{Project => }/Automation/OAProject.cs | 0 .../{Project => }/Automation/OAProjectItem.cs | 0 .../Automation/OAProjectItems.cs | 0 .../{Project => }/Automation/OAProperties.cs | 0 .../{Project => }/Automation/OAProperty.cs | 0 .../Automation/OAReferenceFolderItem.cs | 0 .../Automation/OAReferenceItem.cs | 0 .../VSProject/OAAssemblyReference.cs | 0 .../Automation/VSProject/OABuildManager.cs | 0 .../Automation/VSProject/OAComReference.cs | 0 .../VSProject/OAProjectReference.cs | 0 .../Automation/VSProject/OAReferenceBase.cs | 0 .../Automation/VSProject/OAReferences.cs | 0 .../Automation/VSProject/OAVSProject.cs | 0 .../Automation/VSProject/OAVSProjectItem.cs | 0 .../{Project => }/BuildDependency.cs | 0 .../{Project => }/BuildPropertyPage.cs | 0 .../{Project => }/ComReferenceNode.cs | 0 .../{Project => }/ConfigProvider.cs | 0 .../{Project => }/ConfigurationProperties.cs | 0 .../{Project => }/DataObject.cs | 0 .../{Project => }/DesignPropertyDescriptor.cs | 0 .../{Project => }/DocumentManager.cs | 0 .../{Project => }/EnumDependencies.cs | 0 ...sproj => FSharp.ProjectSystem.Base.csproj} | 0 .../FSharp.ProjectSystem.Base.ruleset | 0 .../{Project => }/FileChangeManager.cs | 0 .../{Project => }/FileDocumentManager.cs | 0 .../{Project => }/FileNode.cs | 0 .../{Project => }/FolderNode.cs | 0 .../{Project => }/GlobalSuppressions.cs | 0 .../{Project => }/GroupingReferenceNode.cs | 0 .../{Project => }/HierarchyNode.cs | 0 .../{Project => }/IDEBuildLogger.cs | 0 .../{Project => }/ImageHandler.cs | 0 .../{Project => }/Interfaces.cs | 0 .../{Project => }/LinkedFileNode.cs | 0 .../{Project => }/LocalizableProperties.cs | 0 .../Microsoft.VisualStudio.Package.Project.cs | 0 ...icrosoft.VisualStudio.Package.Project.resx | 0 .../Misc/AutomationExtenderManager.cs | 0 .../Misc/ConnectionPointContainer.cs | 0 .../{Project => }/Misc/ExternDll.cs | 0 .../{Project => }/Misc/NativeMethods.cs | 0 .../{Project => }/Misc/UnsafeNativeMethods.cs | 0 .../{Project => }/NodeProperties.cs | 0 .../{Project => }/OleServiceProvider.cs | 0 .../{Project => }/Output.cs | 0 .../{Project => }/OutputGroup.cs | 0 .../{Project => }/ProjectBase.files | 0 .../{Project => }/ProjectConfig.cs | 0 .../ProjectDesignerDocumentManager.cs | 0 .../{Project => }/ProjectElement.cs | 0 .../{Project => }/ProjectFactory.cs | 0 .../{Project => }/ProjectFileConstants.cs | 0 .../{Project => }/ProjectNode.CopyPaste.cs | 0 .../{Project => }/ProjectNode.Events.cs | 0 .../{Project => }/ProjectNode.cs | 0 .../{Project => }/ProjectOptions.cs | 0 .../{Project => }/ProjectPackage.cs | 0 .../{Project => }/ProjectReferenceNode.cs | 0 .../{Project => }/PropertiesEditorLauncher.cs | 0 .../{Project => }/ReferenceContainerNode.cs | 0 .../{Project => }/ReferenceNode.cs | 0 .../CodeGeneratorRegistrationAttribute.cs | 149 - .../ComponentPickerPropertyPageAttribute.cs | 152 - .../EditorFactoryNotifyForProjectAttribute.cs | 161 - .../ProvideAppCommandLineAttribute.cs | 146 - ...olutionPersistenceRegistrationAttribute.cs | 79 - .../WAProvideLanguagePropertyAttribute.cs | 114 - .../WAProvideProjectFactoryAttribute.cs | 243 - ...eProjectFactoryTemplateMappingAttribute.cs | 64 - .../{Project => }/Resources/imagelis.bmp | Bin .../{Project => }/SelectionListener.cs | 0 .../{Project => }/SolutionListener.cs | 0 .../SolutionListenerForProjectEvents.cs | 0 .../SolutionListenerForProjectOpen.cs | 0 ...lutionListenerForProjectReferenceUpdate.cs | 0 .../{Project => }/StructuresEnums.cs | 0 .../{Project => }/SuspendFileChanges.cs | 0 .../{Project => }/Tracing.cs | 0 .../{Project => }/TrackDocumentsHelper.cs | 0 .../{Project => }/TypeConverters.cs | 0 .../{Project => }/UIThread.cs | 0 .../UpdateSolutionEventsListener.cs | 0 .../{Project => }/Utilities.cs | 2 +- .../{Project => }/VSMDCodeDomProvider.cs | 0 .../{Project => }/VSProjectConstants.cs | 0 .../{Project => }/VSShellUtilities.cs | 0 .../{Project => }/VsCommands.cs | 0 ...rosoft.VisualStudio.Package.Project.cs.xlf | 0 ...rosoft.VisualStudio.Package.Project.de.xlf | 2 +- ...rosoft.VisualStudio.Package.Project.es.xlf | 0 ...rosoft.VisualStudio.Package.Project.fr.xlf | 4 +- ...rosoft.VisualStudio.Package.Project.it.xlf | 0 ...rosoft.VisualStudio.Package.Project.ja.xlf | 0 ...rosoft.VisualStudio.Package.Project.ko.xlf | 0 ...rosoft.VisualStudio.Package.Project.pl.xlf | 0 ...oft.VisualStudio.Package.Project.pt-BR.xlf | 0 ...rosoft.VisualStudio.Package.Project.ru.xlf | 4 +- ...rosoft.VisualStudio.Package.Project.tr.xlf | 0 ...t.VisualStudio.Package.Project.zh-Hans.xlf | 0 ...t.VisualStudio.Package.Project.zh-Hant.xlf | 0 ...roj => FSharp.ProjectSystem.FSharp.fsproj} | 16 +- .../MenusAndCommands.vsct | 16 + .../FSharp.ProjectSystem.FSharp/Overview.xml | 257 - .../FSharp.ProjectSystem.FSharp/Project.fs | 98 +- .../FSharp.ProjectSystem.FSharp/WaitDialog.fs | 2 +- .../xlf/MenusAndCommands.vsct.cs.xlf | 10 + .../xlf/MenusAndCommands.vsct.de.xlf | 10 + .../xlf/MenusAndCommands.vsct.es.xlf | 10 + .../xlf/MenusAndCommands.vsct.fr.xlf | 10 + .../xlf/MenusAndCommands.vsct.it.xlf | 10 + .../xlf/MenusAndCommands.vsct.ja.xlf | 10 + .../xlf/MenusAndCommands.vsct.ko.xlf | 10 + .../xlf/MenusAndCommands.vsct.pl.xlf | 10 + .../xlf/MenusAndCommands.vsct.pt-BR.xlf | 10 + .../xlf/MenusAndCommands.vsct.ru.xlf | 10 + .../xlf/MenusAndCommands.vsct.tr.xlf | 10 + .../xlf/MenusAndCommands.vsct.zh-Hans.xlf | 10 + .../xlf/MenusAndCommands.vsct.zh-Hant.xlf | 10 + ...FSharp.ProjectSystem.PropertyPages.vbproj} | 2 +- ...osoft.VisualStudio.Editors.Designer.de.xlf | 2 +- .../src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj | 9 +- .../src/FSharp.VS.FSI/Properties.resx | 6 + .../src/FSharp.VS.FSI/VFSIstrings.txt | 3 +- vsintegration/src/FSharp.VS.FSI/fsiBasis.fs | 24 - .../src/FSharp.VS.FSI/fsiLanguageService.fs | 12 +- .../src/FSharp.VS.FSI/fsiPackageHooks.fs | 6 - .../src/FSharp.VS.FSI/fsiSessionToolWindow.fs | 74 +- .../src/FSharp.VS.FSI/fsiTextBufferStream.fs | 14 - vsintegration/src/FSharp.VS.FSI/sessions.fs | 167 +- .../src/FSharp.VS.FSI/xlf/Properties.cs.xlf | 20 +- .../src/FSharp.VS.FSI/xlf/Properties.de.xlf | 20 +- .../src/FSharp.VS.FSI/xlf/Properties.es.xlf | 20 +- .../src/FSharp.VS.FSI/xlf/Properties.fr.xlf | 20 +- .../src/FSharp.VS.FSI/xlf/Properties.it.xlf | 20 +- .../src/FSharp.VS.FSI/xlf/Properties.ja.xlf | 20 +- .../src/FSharp.VS.FSI/xlf/Properties.ko.xlf | 20 +- .../src/FSharp.VS.FSI/xlf/Properties.pl.xlf | 20 +- .../FSharp.VS.FSI/xlf/Properties.pt-BR.xlf | 20 +- .../src/FSharp.VS.FSI/xlf/Properties.ru.xlf | 20 +- .../src/FSharp.VS.FSI/xlf/Properties.tr.xlf | 20 +- .../FSharp.VS.FSI/xlf/Properties.zh-Hans.xlf | 20 +- .../FSharp.VS.FSI/xlf/Properties.zh-Hant.xlf | 20 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.cs.xlf | 9 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.de.xlf | 9 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.es.xlf | 9 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.fr.xlf | 9 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.it.xlf | 9 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.ja.xlf | 9 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.ko.xlf | 9 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.pl.xlf | 9 +- .../xlf/VFSIstrings.txt.pt-BR.xlf | 9 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.ru.xlf | 9 +- .../FSharp.VS.FSI/xlf/VFSIstrings.txt.tr.xlf | 9 +- .../xlf/VFSIstrings.txt.zh-Hans.xlf | 9 +- .../xlf/VFSIstrings.txt.zh-Hant.xlf | 9 +- .../GetTypesVS.UnitTests.fsproj | 1 + ...myProviderForLanguageServiceTesting.fsproj | 2 +- .../ProvidedTypes.fs | 1490 +- .../Salsa/FSharpLanguageServiceTestable.fs | 11 +- vsintegration/tests/Salsa/SalsaUtils.fs | 3 +- .../tests/Salsa/VisualFSharp.Salsa.fsproj | 10 +- vsintegration/tests/Salsa/VsMocks.fs | 2 +- vsintegration/tests/Salsa/salsa.fs | 26 +- .../tests/UnitTests/AssemblyResolver.fs | 2 +- .../UnitTests/BraceMatchingServiceTests.fs | 3 +- .../UnitTests/BreakpointResolutionService.fs | 11 +- .../UnitTests/CompletionProviderTests.fs | 28 +- .../DocumentDiagnosticAnalyzerTests.fs | 14 +- .../DocumentHighlightsServiceTests.fs | 15 +- .../UnitTests/EditorFormattingServiceTests.fs | 15 +- .../UnitTests/FsxCompletionProviderTests.fs | 74 +- .../UnitTests/GoToDefinitionServiceTests.fs | 32 +- .../UnitTests/IndentationServiceTests.fs | 3 +- .../LanguageDebugInfoServiceTests.fs | 6 +- .../Tests.LanguageService.Completion.fs | 30 +- .../Tests.LanguageService.ErrorList.fs | 2 +- .../Tests.LanguageService.General.fs | 7 +- .../Tests.LanguageService.GotoDefinition.fs | 4 +- .../Tests.LanguageService.ParameterInfo.fs | 12 +- .../Tests.LanguageService.QuickInfo.fs | 43 +- .../Tests.LanguageService.QuickParse.fs | 2 +- .../Tests.LanguageService.Script.fs | 12 +- .../Tests.LanguageService.TimeStamp.fs | 1 + .../Tests.ProjectSystem.Configs.fs | 2 +- .../Tests.ProjectSystem.Miscellaneous.fs | 19 +- .../Tests.ProjectSystem.UpToDate.fs | 2 +- .../tests/UnitTests/ProjectOptionsBuilder.fs | 5 +- .../tests/UnitTests/QuickInfoProviderTests.fs | 6 +- .../tests/UnitTests/QuickInfoTests.fs | 11 +- .../tests/UnitTests/RoslynSourceTextTests.fs | 2 +- .../SemanticColorizationServiceTests.fs | 52 +- .../UnitTests/SignatureHelpProviderTests.fs | 658 +- .../UnitTests/TestLib.LanguageService.fs | 8 +- vsintegration/tests/UnitTests/Tests.Build.fs | 62 +- .../tests/UnitTests/Tests.RoslynHelpers.fs | 278 + vsintegration/tests/UnitTests/Tests.Watson.fs | 4 +- .../tests/UnitTests/UnusedOpensTests.fs | 22 +- .../UnitTests/VisualFSharp.UnitTests.fsproj | 13 +- .../UnitTests/Workspace/WorkspaceTests.fs | 317 + vsintegration/update-vsintegration.cmd | 2 +- 1165 files changed, 81357 insertions(+), 104694 deletions(-) create mode 100644 eng/SourceBuild.props create mode 100644 eng/SourceBuildPrebuiltBaseline.xml create mode 100644 eng/common/generate-locproject.ps1 delete mode 100644 eng/common/performance/blazor_perf.proj delete mode 100644 eng/common/performance/crossgen_perf.proj delete mode 100644 eng/common/performance/microbenchmarks.proj delete mode 100644 eng/common/performance/performance-setup.ps1 delete mode 100755 eng/common/performance/performance-setup.sh delete mode 100644 eng/common/sdl/push-gdn.ps1 create mode 100644 eng/common/templates/job/onelocbuild.yml delete mode 100644 eng/common/templates/job/performance.yml create mode 100644 eng/common/templates/job/source-index-stage1.yml delete mode 100644 eng/common/templates/steps/perf-send-to-helix.yml create mode 100644 eng/source-build-patches/0005-Fix-package-downgrade-warning.patch create mode 100644 src/fsharp/BuildGraph.fs create mode 100644 src/fsharp/BuildGraph.fsi rename src/fsharp/{Microsoft.DotNet.DependencyManager => DependencyManager}/AssemblyResolveHandler.fs (70%) rename src/fsharp/{Microsoft.DotNet.DependencyManager => DependencyManager}/AssemblyResolveHandler.fsi (88%) rename src/fsharp/{Microsoft.DotNet.DependencyManager => DependencyManager}/DependencyProvider.fs (92%) rename src/fsharp/{Microsoft.DotNet.DependencyManager => DependencyManager}/DependencyProvider.fsi (97%) rename src/fsharp/{Microsoft.DotNet.DependencyManager => DependencyManager}/NativeDllResolveHandler.fs (70%) rename src/fsharp/{Microsoft.DotNet.DependencyManager => DependencyManager}/NativeDllResolveHandler.fsi (83%) rename src/fsharp/{Microsoft.DotNet.DependencyManager => DependencyManager}/xlf/DependencyManager.txt.cs.xlf (100%) rename src/fsharp/{Microsoft.DotNet.DependencyManager => DependencyManager}/xlf/DependencyManager.txt.de.xlf (100%) rename src/fsharp/{Microsoft.DotNet.DependencyManager => DependencyManager}/xlf/DependencyManager.txt.es.xlf (100%) rename src/fsharp/{Microsoft.DotNet.DependencyManager => DependencyManager}/xlf/DependencyManager.txt.fr.xlf (100%) rename src/fsharp/{Microsoft.DotNet.DependencyManager => DependencyManager}/xlf/DependencyManager.txt.it.xlf (100%) rename src/fsharp/{Microsoft.DotNet.DependencyManager => DependencyManager}/xlf/DependencyManager.txt.ja.xlf (100%) rename src/fsharp/{Microsoft.DotNet.DependencyManager => DependencyManager}/xlf/DependencyManager.txt.ko.xlf (100%) rename src/fsharp/{Microsoft.DotNet.DependencyManager => DependencyManager}/xlf/DependencyManager.txt.pl.xlf (100%) rename src/fsharp/{Microsoft.DotNet.DependencyManager => DependencyManager}/xlf/DependencyManager.txt.pt-BR.xlf (100%) rename src/fsharp/{Microsoft.DotNet.DependencyManager => DependencyManager}/xlf/DependencyManager.txt.ru.xlf (100%) rename src/fsharp/{Microsoft.DotNet.DependencyManager => DependencyManager}/xlf/DependencyManager.txt.tr.xlf (100%) rename src/fsharp/{Microsoft.DotNet.DependencyManager => DependencyManager}/xlf/DependencyManager.txt.zh-Hans.xlf (100%) rename src/fsharp/{Microsoft.DotNet.DependencyManager => DependencyManager}/xlf/DependencyManager.txt.zh-Hant.xlf (100%) create mode 100644 src/fsharp/Diagnostics.fs create mode 100644 src/fsharp/Diagnostics.fsi delete mode 100644 src/fsharp/DotNetFrameworkDependencies.fs delete mode 100644 src/fsharp/FSharp.Compiler.Private.Scripting/Directory.Build.props delete mode 100644 src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj delete mode 100644 src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec delete mode 100644 src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs delete mode 100644 src/fsharp/FSharp.Compiler.Private/Directory.Build.props delete mode 100644 src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj create mode 100644 src/fsharp/FxResolver.fs delete mode 100644 src/fsharp/Microsoft.DotNet.DependencyManager/DependencyManager.txt delete mode 100644 src/fsharp/Microsoft.DotNet.DependencyManager/Directory.Build.props delete mode 100644 src/fsharp/Microsoft.DotNet.DependencyManager/Microsoft.DotNet.DependencyManager.fsproj delete mode 100644 src/fsharp/Microsoft.DotNet.DependencyManager/README.md create mode 100644 src/fsharp/SyntaxTree.fsi create mode 100644 src/fsharp/TextLayoutRender.fs create mode 100644 src/fsharp/TextLayoutRender.fsi delete mode 100644 src/fsharp/ilx/ilxsettings.fs delete mode 100644 src/fsharp/layout.fs delete mode 100644 src/fsharp/layout.fsi create mode 100644 src/fsharp/service/FSharpParseFileResults.fs create mode 100644 src/fsharp/service/FSharpParseFileResults.fsi mode change 100755 => 100644 src/fsharp/service/IncrementalBuild.fs delete mode 100755 src/fsharp/service/Reactor.fs delete mode 100755 src/fsharp/service/Reactor.fsi create mode 100644 src/fsharp/service/SemanticClassificationKey.fs create mode 100644 src/fsharp/service/SemanticClassificationKey.fsi mode change 100755 => 100644 src/fsharp/service/ServiceLexing.fs create mode 100644 src/fsharp/service/ServiceParseTreeWalk.fsi rename src/fsharp/service/{ServiceUntypedParse.fs => ServiceParsedInputOps.fs} (56%) mode change 100755 => 100644 create mode 100644 src/fsharp/service/ServiceParsedInputOps.fsi delete mode 100755 src/fsharp/service/ServiceUntypedParse.fsi mode change 100755 => 100644 src/fsharp/service/service.fsi create mode 100644 src/fsharp/utils/FileSystem.fs create mode 100644 src/fsharp/utils/FileSystem.fsi delete mode 100644 src/fsharp/utils/filename.fs delete mode 100644 src/fsharp/utils/filename.fsi create mode 100644 tests/FSharp.Compiler.ComponentTests/Conformance/DeclarationElements/LetBindings/UseBindings.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Misc.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/SkipLocalsInit.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/TupleElimination.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/ErrorMessages/InvalidLiteralTests.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/Language/AttributeCheckingTests.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/Language/CastingTests.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/resources/tests/Conformance/DeclarationElements/LetBindings/UseBindingDiscard01.fs delete mode 100644 tests/FSharp.Compiler.Private.Scripting.UnitTests/ConsoleHelpers.fs delete mode 100644 tests/FSharp.Compiler.Private.Scripting.UnitTests/TestHelpers.fs create mode 100644 tests/FSharp.Compiler.UnitTests/AssemblySigningAttributes.fs create mode 100644 tests/FSharp.Compiler.UnitTests/BuildGraphTests.fs rename tests/FSharp.Core.UnitTests/FSharp.Core/{DiscrimantedUnionType.fs => DiscriminatedUnionType.fs} (100%) create mode 100644 tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/EventTypes.fs create mode 100644 tests/FSharp.Test.Utilities/ScriptHelpers.fs delete mode 100644 tests/benchmarks/Benchmarks.sln create mode 100644 tests/benchmarks/MicroPerf/Benchmarks.fs create mode 100644 tests/benchmarks/MicroPerf/CS/MicroPerfCSharp.cs create mode 100644 tests/benchmarks/MicroPerf/CS/MicroPerfCSharp.csproj create mode 100644 tests/benchmarks/MicroPerf/MicroPerf.fsproj create mode 100644 tests/fsharp/Compiler/CodeGen/EmittedIL/BooleanLogic.fs create mode 100644 tests/fsharp/Compiler/CodeGen/EmittedIL/ComputedListExpressions.fs create mode 100644 tests/fsharp/Compiler/Language/InitOnlyPropertyConsumptionTests.fs create mode 100644 tests/fsharp/Compiler/Language/StructActivePatternTests.fs create mode 100644 tests/fsharp/Compiler/Service/MultiProjectTests.fs create mode 100644 tests/fsharp/Compiler/Service/SignatureGenerationTests.fs create mode 100644 tests/fsharp/tools/fsharp41/net45/providerDesigner.dll create mode 100644 tests/fsharp/tools/fsharp41/net461/providerDesigner.dll create mode 100644 tests/fsharp/tools/fsharp41/netstandard2.0/providerDesigner.dll create mode 100644 tests/fsharp/typeProviders/fsharp41/net45/providerDesigner.dll create mode 100644 tests/fsharp/typeProviders/fsharp41/net461/providerDesigner.dll create mode 100644 tests/fsharp/typeProviders/fsharp41/netstandard2.0/providerDesigner.dll create mode 100644 tests/walkthroughs/sdk-script-manual-tests/README.md.txt create mode 100644 tests/walkthroughs/sdk-script-manual-tests/netcore-script-reference-netcore-script.fsx create mode 100644 tests/walkthroughs/sdk-script-manual-tests/netcore-script.fsx create mode 100644 tests/walkthroughs/sdk-script-manual-tests/with-sdk-3.1.0/global.json create mode 100644 tests/walkthroughs/sdk-script-manual-tests/with-sdk-3.1.0/netcore-script-sdk-3.1.0.fsx create mode 100644 tests/walkthroughs/sdk-script-manual-tests/with-sdk-5.0.101/global.json create mode 100644 tests/walkthroughs/sdk-script-manual-tests/with-sdk-5.0.101/netcore-script-sdk-5.0.101.fsx create mode 100644 tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/global.json create mode 100644 tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/netcore-script-sdk-666.666.666 - Copy.fsx create mode 100644 tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/netcore-script-sdk-666.666.666.fsx create mode 100644 tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.667/global.json create mode 100644 tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.667/netcore-script-sdk-666.666.666.fsx create mode 100644 vsintegration/Vsix/VisualFSharpFull/VisualFSharp.Core.targets create mode 100644 vsintegration/Vsix/VisualFSharpFull/VisualFSharpDebug.csproj create mode 100644 vsintegration/src/FSharp.Editor/CodeFix/AddInstanceMemberParameter.fs create mode 100644 vsintegration/src/FSharp.Editor/CodeFix/AddMissingFunKeyword.fs create mode 100644 vsintegration/src/FSharp.Editor/CodeFix/AddMissingRecToMutuallyRecFunctions.fs create mode 100644 vsintegration/src/FSharp.Editor/CodeFix/AddTypeAnnotationToObjectOfIndeterminateType.fs create mode 100644 vsintegration/src/FSharp.Editor/CodeFix/ConvertToNotEqualsEqualityExpression.fs create mode 100644 vsintegration/src/FSharp.Editor/CodeFix/RemoveUnusedBinding.fs create mode 100644 vsintegration/src/FSharp.Editor/Common/FSharpCodeAnalysisExtensions.fs create mode 100644 vsintegration/src/FSharp.Editor/LanguageService/FSharpAnalysisSaveFileCommandHandler.fs delete mode 100644 vsintegration/src/FSharp.Editor/LanguageService/FSharpCheckerExtensions.fs delete mode 100644 vsintegration/src/FSharp.Editor/LanguageService/FSharpCheckerProvider.fs create mode 100644 vsintegration/src/FSharp.Editor/LanguageService/IFSharpWorkspaceService.fs create mode 100644 vsintegration/src/FSharp.Editor/LanguageService/MetadataAsSource.fs create mode 100644 vsintegration/src/FSharp.Editor/LanguageService/WorkspaceExtensions.fs create mode 100644 vsintegration/src/FSharp.Editor/Refactor/AddExplicitTypeToParameter.fs create mode 100644 vsintegration/src/FSharp.Editor/Refactor/ChangeDerefToValueRefactoring.fs create mode 100644 vsintegration/src/FSharp.Editor/Refactor/ChangeTypeofWithNameToNameofExpression.fs rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/AssemblyInfo.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/AssemblyReferenceNode.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Attributes.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Automation/OAFileItem.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Automation/OAFolderItem.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Automation/OANavigableProjectItems.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Automation/OANullProperty.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Automation/OAProject.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Automation/OAProjectItem.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Automation/OAProjectItems.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Automation/OAProperties.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Automation/OAProperty.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Automation/OAReferenceFolderItem.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Automation/OAReferenceItem.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Automation/VSProject/OAAssemblyReference.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Automation/VSProject/OABuildManager.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Automation/VSProject/OAComReference.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Automation/VSProject/OAProjectReference.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Automation/VSProject/OAReferenceBase.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Automation/VSProject/OAReferences.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Automation/VSProject/OAVSProject.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Automation/VSProject/OAVSProjectItem.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/BuildDependency.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/BuildPropertyPage.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/ComReferenceNode.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/ConfigProvider.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/ConfigurationProperties.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/DataObject.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/DesignPropertyDescriptor.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/DocumentManager.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/EnumDependencies.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project/ProjectSystem.Base.csproj => FSharp.ProjectSystem.Base.csproj} (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/FSharp.ProjectSystem.Base.ruleset (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/FileChangeManager.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/FileDocumentManager.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/FileNode.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/FolderNode.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/GlobalSuppressions.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/GroupingReferenceNode.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/HierarchyNode.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/IDEBuildLogger.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/ImageHandler.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Interfaces.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/LinkedFileNode.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/LocalizableProperties.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Microsoft.VisualStudio.Package.Project.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Microsoft.VisualStudio.Package.Project.resx (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Misc/AutomationExtenderManager.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Misc/ConnectionPointContainer.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Misc/ExternDll.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Misc/NativeMethods.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Misc/UnsafeNativeMethods.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/NodeProperties.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/OleServiceProvider.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Output.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/OutputGroup.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/ProjectBase.files (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/ProjectConfig.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/ProjectDesignerDocumentManager.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/ProjectElement.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/ProjectFactory.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/ProjectFileConstants.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/ProjectNode.CopyPaste.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/ProjectNode.Events.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/ProjectNode.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/ProjectOptions.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/ProjectPackage.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/ProjectReferenceNode.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/PropertiesEditorLauncher.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/ReferenceContainerNode.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/ReferenceNode.cs (100%) delete mode 100644 vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/CodeGeneratorRegistrationAttribute.cs delete mode 100644 vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/ComponentPickerPropertyPageAttribute.cs delete mode 100644 vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/EditorFactoryNotifyForProjectAttribute.cs delete mode 100644 vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/ProvideAppCommandLineAttribute.cs delete mode 100644 vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/SolutionPersistenceRegistrationAttribute.cs delete mode 100644 vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideLanguagePropertyAttribute.cs delete mode 100644 vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideProjectFactoryAttribute.cs delete mode 100644 vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideProjectFactoryTemplateMappingAttribute.cs rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Resources/imagelis.bmp (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/SelectionListener.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/SolutionListener.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/SolutionListenerForProjectEvents.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/SolutionListenerForProjectOpen.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/SolutionListenerForProjectReferenceUpdate.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/StructuresEnums.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/SuspendFileChanges.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Tracing.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/TrackDocumentsHelper.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/TypeConverters.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/UIThread.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/UpdateSolutionEventsListener.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/Utilities.cs (99%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/VSMDCodeDomProvider.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/VSProjectConstants.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/VSShellUtilities.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/VsCommands.cs (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/xlf/Microsoft.VisualStudio.Package.Project.cs.xlf (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/xlf/Microsoft.VisualStudio.Package.Project.de.xlf (99%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/xlf/Microsoft.VisualStudio.Package.Project.es.xlf (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf (99%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/xlf/Microsoft.VisualStudio.Package.Project.it.xlf (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/xlf/Microsoft.VisualStudio.Package.Project.ja.xlf (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/xlf/Microsoft.VisualStudio.Package.Project.ko.xlf (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/xlf/Microsoft.VisualStudio.Package.Project.pl.xlf (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/xlf/Microsoft.VisualStudio.Package.Project.pt-BR.xlf (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf (98%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/xlf/Microsoft.VisualStudio.Package.Project.tr.xlf (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/xlf/Microsoft.VisualStudio.Package.Project.zh-Hans.xlf (100%) rename vsintegration/src/FSharp.ProjectSystem.Base/{Project => }/xlf/Microsoft.VisualStudio.Package.Project.zh-Hant.xlf (100%) rename vsintegration/src/FSharp.ProjectSystem.FSharp/{ProjectSystem.fsproj => FSharp.ProjectSystem.FSharp.fsproj} (91%) delete mode 100644 vsintegration/src/FSharp.ProjectSystem.FSharp/Overview.xml rename vsintegration/src/FSharp.ProjectSystem.PropertyPages/{FSharp.PropertiesPages.vbproj => FSharp.ProjectSystem.PropertyPages.vbproj} (99%) create mode 100644 vsintegration/tests/UnitTests/Tests.RoslynHelpers.fs create mode 100644 vsintegration/tests/UnitTests/Workspace/WorkspaceTests.fs diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 0a66fd8d385..1397683d28c 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -8,13 +8,21 @@ assignees: '' --- **Is your feature request related to a problem? Please describe.** + A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** + A clear and concise description of what you want to happen. **Describe alternatives you've considered** + A clear and concise description of any alternative solutions or features you've considered. **Additional context** + +If the issue is about: +* improving a compiler error message, please mention "related: #1103" +* improving/adjusting the parser, please mention "related: #11481" + Add any other context or screenshots about the feature request here. diff --git a/.gitignore b/.gitignore index 89681ee5a61..3345325f7a6 100644 --- a/.gitignore +++ b/.gitignore @@ -9,43 +9,19 @@ artifacts/ # Patches that may have been generated by scripts. # (These aren't generally useful to commit directly; if anything, they should be applied.) scripts/*.patch -/fcs/FSharp.Compiler.Service/illex.fs -/fcs/FSharp.Compiler.Service/ilpars.fs -/fcs/FSharp.Compiler.Service/ilpars.fsi -/fcs/FSharp.Compiler.Service/lex.fs -/fcs/FSharp.Compiler.Service/pars.fs -/fcs/FSharp.Compiler.Service/pars.fsi -/fcs/FSharp.Compiler.Service/pplex.fs -/fcs/FSharp.Compiler.Service/pppars.fs -/fcs/FSharp.Compiler.Service/pppars.fsi /src/*.userprefs /src/fsharp/FSStrings.resources /src/fsharp/FSharp.Build/*.resx -/src/fsharp/FSharp.Build-proto/*.resx -/src/fsharp/FSharp.Build-proto/*.resources -/src/fsharp/FSharp.Compiler-proto/*.resx -/src/fsharp/FSharp.Compiler-proto/*.resources -/src/fsharp/FSharp.Compiler-proto/*.sln -/src/fsharp/FSharp.Compiler-proto/*.userprefs /src/fsharp/fsi/*.resx /src/fsharp/FSharp.Compiler.Interactive.Settings/*.resx /src/fsharp/FSharp.Compiler.Server.Shared/*.resx /src/fsharp/fsi/Fsi.sln /src/fsharp/FSharp.Build/*.resources -/src/fsharp/FSharp.Compiler.Private/*.resx -/src/fsharp/FSharp.Compiler.Private/*.resources -/src/fsharp/FSharp.Compiler.Private/*.sln -/src/fsharp/FSharp.Compiler.Private/*.userprefs +/src/fsharp/FSharp.Compiler.Service/*.resx +/src/fsharp/FSharp.Compiler.Service/*.resources +/src/fsharp/FSharp.Compiler.Service/*.sln +/src/fsharp/FSharp.Compiler.Service/*.userprefs /src/*.log -/src/fsharp/Fsc-proto/illex.fs -/src/fsharp/Fsc-proto/ilpars.fs -/src/fsharp/Fsc-proto/ilpars.fsi -/src/fsharp/Fsc-proto/lex.fs -/src/fsharp/Fsc-proto/pars.fs -/src/fsharp/Fsc-proto/pars.fsi -/src/fsharp/Fsc-proto/pplex.fs -/src/fsharp/Fsc-proto/pppars.fs -/src/fsharp/Fsc-proto/pppars.fsi /src/fsharp/FSharp.LanguageService.Compiler/illex.* /src/fsharp/FSharp.LanguageService.Compiler/ilpars.* /src/fsharp/FSharp.LanguageService.Compiler/lex.* diff --git a/DEVGUIDE.md b/DEVGUIDE.md index cc8c7e84a6e..a5e92c63e6d 100644 --- a/DEVGUIDE.md +++ b/DEVGUIDE.md @@ -108,8 +108,8 @@ Running any of the above will build the latest changes and run tests against the If your changes involve modifying the list of language keywords in any way, (e.g. when implementing a new keyword), the XLF localization files need to be synced with the corresponding resx files. This can be done automatically by running - pushd src\fsharp\FSharp.Compiler.Private - msbuild FSharp.Compiler.Private.fsproj /t:UpdateXlf + pushd src\fsharp\FSharp.Compiler.Service + msbuild FSharp.Compiler.Service.fsproj /t:UpdateXlf popd This only works on Windows/.NETStandard framework, so changing this from any other platform requires editing and syncing all of the XLF files manually. @@ -122,7 +122,7 @@ See (DEVGUIDE.md#Developing on Windows) for instructions to install what is need ### Quickly see your changes locally -First, ensure that `VisualFSharpFull` is the startup project. +First, ensure that `VisualFSharpDebug` is the startup project. Then, use the **f5** or **ctrl+f5** keyboard shortcuts to test your tooling changes. The former will debug a new instance of Visual Studio. The latter will launch a new instance of Visual Studio, but with your changes installed. @@ -136,7 +136,7 @@ If you'd like to "run with your changes", you can produce a VSIX and install it ``` VSIXInstaller.exe /u:"VisualFSharp" -VSIXInstaller.exe artifacts\VSSetup\Release\VisualFSharpFull.vsix +VSIXInstaller.exe artifacts\VSSetup\Release\VisualFSharpDebug.vsix ``` It's important to use `Release` if you want to see if your changes have had a noticeable performance impact. @@ -170,9 +170,4 @@ See the "Debugging The Compiler" section of this [article](https://medium.com/@w If you are behind a proxy server, NuGet client tool must be configured to use it: -``` -.nuget\nuget.exe config -set http_proxy=proxy.domain.com:8080 -ConfigFile NuGet.Config -.nuget\nuget.exe config -set http_proxy.user=user_name -ConfigFile NuGet.Config -.nuget\nuget.exe config -set http_proxy.password=user_password -ConfigFile NuGet.Config -``` -Where you should set proper proxy address, user name and password. +See the Nuget config file documention for use with a proxy server [https://docs.microsoft.com/en-us/nuget/reference/nuget-config-file](https://docs.microsoft.com/en-us/nuget/reference/nuget-config-file) diff --git a/FSharp.Profiles.props b/FSharp.Profiles.props index 993512bde43..260bccd3bf9 100644 --- a/FSharp.Profiles.props +++ b/FSharp.Profiles.props @@ -20,7 +20,6 @@ $(DefineConstants);FX_NO_SYSTEM_CONFIGURATION $(DefineConstants);FX_NO_WIN_REGISTRY $(DefineConstants);FX_NO_WINFORMS - $(DefineConstants);FX_NO_INDENTED_TEXT_WRITER $(DefineConstants);FX_RESHAPED_REFEMIT $(OtherFlags) --simpleresolution diff --git a/FSharp.sln b/FSharp.sln index 210dac21ef6..da837f9b04f 100644 --- a/FSharp.sln +++ b/FSharp.sln @@ -3,8 +3,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.28729.10 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private", "src\fsharp\FSharp.Compiler.Private\FSharp.Compiler.Private.fsproj", "{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}" -EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Server.Shared", "src\fsharp\FSharp.Compiler.Server.Shared\FSharp.Compiler.Server.Shared.fsproj", "{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Core", "src\fsharp\FSharp.Core\FSharp.Core.fsproj", "{DED3BBD7-53F4-428A-8C9F-27968E768605}" @@ -46,12 +44,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.FSharp.Compiler", EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.DependencyManager.Nuget", "src\fsharp\FSharp.DependencyManager.Nuget\FSharp.DependencyManager.Nuget.fsproj", "{8B7BF62E-7D8C-4928-BE40-4E392A9EE851}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting", "src\fsharp\FSharp.Compiler.Private.Scripting\FSharp.Compiler.Private.Scripting.fsproj", "{6771860A-614D-4FDD-A655-4C70EBCC91B0}" -EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting.UnitTests", "tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj", "{4FEDF286-0252-4EBC-9E75-879CCA3B85DC}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Microsoft.DotNet.DependencyManager", "src\fsharp\Microsoft.DotNet.DependencyManager\Microsoft.DotNet.DependencyManager.fsproj", "{B5A043F8-6D7F-4D4E-B8AD-5880070180B6}" -EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.ComponentTests", "tests\FSharp.Compiler.ComponentTests\FSharp.Compiler.ComponentTests.fsproj", "{FAC5A3BF-C0D6-437A-868A-E962AA00B418}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "fsharpqa", "fsharpqa", "{292C4F92-A313-4CAF-9552-731F39C6C21F}" @@ -76,18 +70,6 @@ Global Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Debug|x86.ActiveCfg = Debug|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Debug|x86.Build.0 = Debug|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Proto|Any CPU.ActiveCfg = Release|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Proto|Any CPU.Build.0 = Release|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Proto|x86.ActiveCfg = Release|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Proto|x86.Build.0 = Release|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Release|Any CPU.Build.0 = Release|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Release|x86.ActiveCfg = Release|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Release|x86.Build.0 = Release|Any CPU {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Debug|Any CPU.Build.0 = Debug|Any CPU {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -256,18 +238,6 @@ Global {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Release|Any CPU.Build.0 = Release|Any CPU {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Release|x86.ActiveCfg = Release|Any CPU {8B7BF62E-7D8C-4928-BE40-4E392A9EE851}.Release|x86.Build.0 = Release|Any CPU - {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Debug|x86.ActiveCfg = Debug|Any CPU - {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Debug|x86.Build.0 = Debug|Any CPU - {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Proto|Any CPU.ActiveCfg = Debug|Any CPU - {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Proto|Any CPU.Build.0 = Debug|Any CPU - {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Proto|x86.ActiveCfg = Debug|Any CPU - {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Proto|x86.Build.0 = Debug|Any CPU - {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Release|Any CPU.Build.0 = Release|Any CPU - {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Release|x86.ActiveCfg = Release|Any CPU - {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Release|x86.Build.0 = Release|Any CPU {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Debug|Any CPU.Build.0 = Debug|Any CPU {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -280,18 +250,6 @@ Global {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Release|Any CPU.Build.0 = Release|Any CPU {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Release|x86.ActiveCfg = Release|Any CPU {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Release|x86.Build.0 = Release|Any CPU - {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Debug|x86.ActiveCfg = Debug|Any CPU - {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Debug|x86.Build.0 = Debug|Any CPU - {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Proto|Any CPU.ActiveCfg = Debug|Any CPU - {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Proto|Any CPU.Build.0 = Debug|Any CPU - {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Proto|x86.ActiveCfg = Debug|Any CPU - {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Proto|x86.Build.0 = Debug|Any CPU - {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Release|Any CPU.Build.0 = Release|Any CPU - {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Release|x86.ActiveCfg = Release|Any CPU - {B5A043F8-6D7F-4D4E-B8AD-5880070180B6}.Release|x86.Build.0 = Release|Any CPU {FAC5A3BF-C0D6-437A-868A-E962AA00B418}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FAC5A3BF-C0D6-437A-868A-E962AA00B418}.Debug|Any CPU.Build.0 = Debug|Any CPU {FAC5A3BF-C0D6-437A-868A-E962AA00B418}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -345,7 +303,6 @@ Global HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} {DED3BBD7-53F4-428A-8C9F-27968E768605} = {3058BC79-8E79-4645-B05D-48CC182FA8A6} {702A7979-BCF9-4C41-853E-3ADFC9897890} = {B8DDA694-7939-42E3-95E5-265C2217C142} {C94C257C-3C0A-4858-B5D8-D746498D1F08} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} @@ -359,16 +316,14 @@ Global {53C0DAAD-158C-4658-8EC7-D7341530239F} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} {81B9FE26-C976-4FC7-B6CC-C7DB5903CAA7} = {3840F2E7-3898-45F7-8CF7-1E6829E56DB8} {8B7BF62E-7D8C-4928-BE40-4E392A9EE851} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} - {6771860A-614D-4FDD-A655-4C70EBCC91B0} = {B8DDA694-7939-42E3-95E5-265C2217C142} {4FEDF286-0252-4EBC-9E75-879CCA3B85DC} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {B5A043F8-6D7F-4D4E-B8AD-5880070180B6} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} {FAC5A3BF-C0D6-437A-868A-E962AA00B418} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} {292C4F92-A313-4CAF-9552-731F39C6C21F} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} {FF76050A-415A-4FB4-A0E5-13CBF38D83E0} = {292C4F92-A313-4CAF-9552-731F39C6C21F} {07482B5E-4980-4285-B732-820F15870284} = {FF76050A-415A-4FB4-A0E5-13CBF38D83E0} {25568CD2-E654-4C8F-BE5B-59BABFC5BD20} = {07482B5E-4980-4285-B732-820F15870284} {DDFD06DC-D7F2-417F-9177-107764EEBCD8} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {9B4CF83C-C215-4EA0-9F8B-B5A77090F634} = {3058BC79-8E79-4645-B05D-48CC182FA8A6} + {9B4CF83C-C215-4EA0-9F8B-B5A77090F634} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BD5177C7-1380-40E7-94D2-7768E1A8B1B8} diff --git a/FSharpBuild.Directory.Build.props b/FSharpBuild.Directory.Build.props index ff7a1b670da..767e0da6ebc 100644 --- a/FSharpBuild.Directory.Build.props +++ b/FSharpBuild.Directory.Build.props @@ -8,6 +8,11 @@ + + + true + + $(RepoRoot)src $(RepoRoot)tests @@ -15,6 +20,7 @@ $(ArtifactsDir)\Bootstrap 4.4.0 1182;0025;$(WarningsAsErrors) + $(OtherFlags) --nowarn:3384 diff --git a/FSharpTests.Directory.Build.props b/FSharpTests.Directory.Build.props index 90d73761408..9d9983693af 100644 --- a/FSharpTests.Directory.Build.props +++ b/FSharpTests.Directory.Build.props @@ -22,18 +22,18 @@ $([System.IO.Path]::GetDirectoryName('$(DOTNET_HOST_PATH)')) dotnet.exe dotnet - $(MSBuildThisFileDirectory)artifacts\bin\fsc\$(Configuration)\netcoreapp3.1\fsc.exe + $(MSBuildThisFileDirectory)artifacts\bin\fsc\$(Configuration)\net5.0\fsc.dll $([System.IO.Path]::GetDirectoryName('$(DOTNET_HOST_PATH)')) dotnet.exe dotnet - $(MSBuildThisFileDirectory)artifacts\bin\fsi\$(Configuration)\netcoreapp3.1\fsi.exe + $(MSBuildThisFileDirectory)artifacts\bin\fsi\$(Configuration)\net5.0\fsi.dll <_FSharpBuildTargetFramework Condition="'$(MSBuildRuntimeType)'!='Core'">net472 - <_FSharpBuildTargetFramework Condition="'$(MSBuildRuntimeType)'=='Core'">netcoreapp3.1 + <_FSharpBuildTargetFramework Condition="'$(MSBuildRuntimeType)'=='Core'">net5.0 <_FSharpBuildBinPath>$(MSBuildThisFileDirectory)artifacts\bin\fsc\$(Configuration)\$(_FSharpBuildTargetFramework) $(_FSharpBuildBinPath)\FSharp.Build.dll diff --git a/INTERNAL.md b/INTERNAL.md index 2d91080f4a6..2dbfdcd20e0 100644 --- a/INTERNAL.md +++ b/INTERNAL.md @@ -7,6 +7,10 @@ Note that usually only the most recent link in each section is interesting. Old The PR build definition can be found [here](https://dev.azure.com/dnceng/public/_build?definitionId=496) or by navigating through an existing PR. +There is also a duplicate scouting PR build that is identical to the normal PR build _except_ that it uses a different Windows +machine queue that always has the next preview build of Visual Studio installed. This is to hopefully get ahead of any breaking +API changes. That build definition is [here](https://dev.azure.com/dnceng/public/_build?definitionId=961). + ## Signed Build Definitions [VS 16.4 to current](https://dev.azure.com/dnceng/internal/_build?definitionId=499&_a=summary) diff --git a/NuGet.config b/NuGet.config index 5b537e8b233..7e6ce303990 100644 --- a/NuGet.config +++ b/NuGet.config @@ -6,12 +6,11 @@ - - + diff --git a/README.md b/README.md index 1eb6e1c3b78..1f3ee92dfcf 100644 --- a/README.md +++ b/README.md @@ -60,19 +60,6 @@ Even if you find a single-character typo, we're happy to take the change! Althou |:------:|:------:| |main|[![Build Status](https://dev.azure.com/dnceng/public/_apis/build/status/dotnet/fsharp/fsharp-ci?branchName=main)](https://dev.azure.com/dnceng/public/_build/latest?definitionId=496&branchName=main)| -## Using nightly releases in Visual Studio - -You can use the latest `main` build of the F# compiler and tools for Visual Studio via our nightly releases if you are a Visual Studio user. See details on setup here: - -https://blogs.msdn.microsoft.com/dotnet/2017/03/14/announcing-nightly-releases-for-the-visual-f-tools/ - -### Even more nightly than the nightly - -Alternatively, if you _really_ want to live on the bleeding edge, you can set up a nightly feed for the Visual Studio preview releases, which use the latest commit in the preview branch. To do so, follow the same instructions as the above blog post, but instead with these links: - -* Set your feed to the preview feed: https://dotnet.myget.org/F/fsharp-preview/vsix -* Install a VSIX manually from the preview feed: https://dotnet.myget.org/feed/fsharp-preview/package/vsix/VisualFSharp - ## Per-build NuGet packages Per-build verions of our NuGet packages are available via this URL: `https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json ` diff --git a/VisualFSharp.sln b/VisualFSharp.sln index 629673b8574..4ab8ee853dc 100644 --- a/VisualFSharp.sln +++ b/VisualFSharp.sln @@ -28,8 +28,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Legacy", "Legacy", "{CCAB6E EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.VS.FSI", "vsintegration\src\FSharp.VS.FSI\FSharp.VS.FSI.fsproj", "{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private", "src\fsharp\FSharp.Compiler.Private\FSharp.Compiler.Private.fsproj", "{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VisualFSharpFull", "vsintegration\Vsix\VisualFSharpFull\VisualFSharpFull.csproj", "{59ADCE46-9740-4079-834D-9A03A3494EBC}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Server.Shared", "src\fsharp\FSharp.Compiler.Server.Shared\FSharp.Compiler.Server.Shared.fsproj", "{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}" @@ -42,11 +40,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FSharp.LanguageService.Base EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Editor", "vsintegration\src\FSharp.Editor\FSharp.Editor.fsproj", "{65E0E82A-EACE-4787-8994-888674C2FE87}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProjectSystem.Base", "vsintegration\src\FSharp.ProjectSystem.Base\Project\ProjectSystem.Base.csproj", "{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FSharp.ProjectSystem.Base", "vsintegration\src\FSharp.ProjectSystem.Base\FSharp.ProjectSystem.Base.csproj", "{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}" EndProject -Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "FSharp.PropertiesPages", "vsintegration\src\FSharp.ProjectSystem.PropertyPages\FSharp.PropertiesPages.vbproj", "{FCFB214C-462E-42B3-91CA-FC557EFEE74F}" +Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "FSharp.ProjectSystem.PropertyPages", "vsintegration\src\FSharp.ProjectSystem.PropertyPages\FSharp.ProjectSystem.PropertyPages.vbproj", "{FCFB214C-462E-42B3-91CA-FC557EFEE74F}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "ProjectSystem", "vsintegration\src\FSharp.ProjectSystem.FSharp\ProjectSystem.fsproj", "{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.ProjectSystem.FSharp", "vsintegration\src\FSharp.ProjectSystem.FSharp\FSharp.ProjectSystem.FSharp.fsproj", "{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "VisualFSharp.Salsa", "vsintegration\tests\Salsa\VisualFSharp.Salsa.fsproj", "{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}" EndProject @@ -140,8 +138,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NuGet", "NuGet", "{647810D0 EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.FSharp.Compiler", "src\fsharp\Microsoft.FSharp.Compiler\Microsoft.FSharp.Compiler.csproj", "{04C59F6E-1C76-4F6A-AC21-2EA7F296A1B8}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting", "src\fsharp\FSharp.Compiler.Private.Scripting\FSharp.Compiler.Private.Scripting.fsproj", "{20B7BC36-CF51-4D75-9E13-66681C07977F}" -EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting.UnitTests", "tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj", "{09F56540-AFA5-4694-B7A6-0DBF6D4618C2}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.DependencyManager.Nuget", "src\fsharp\FSharp.DependencyManager.Nuget\FSharp.DependencyManager.Nuget.fsproj", "{DFA30881-C0B1-4813-B087-C21B5AF9B77F}" @@ -156,14 +152,24 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibraryProject", "vsintegra EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TutorialProject", "vsintegration\ProjectTemplates\TutorialProject\TutorialProject.csproj", "{2937CBEC-262D-4C94-BE1D-291FAB72E3E8}" EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Microsoft.DotNet.DependencyManager", "src\fsharp\Microsoft.DotNet.DependencyManager\Microsoft.DotNet.DependencyManager.fsproj", "{C2F38485-5F87-4986-985B-55D7ED96D5CE}" -EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.ComponentTests", "tests\FSharp.Compiler.ComponentTests\FSharp.Compiler.ComponentTests.fsproj", "{0610FB97-7C15-422A-86FD-32335C6DF14D}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Service", "src\fsharp\FSharp.Compiler.Service\FSharp.Compiler.Service.fsproj", "{B5A9BBD9-2F45-4722-A6CA-BAE3C64CD4E2}" EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Service.Tests", "tests\FSharp.Compiler.Service.Tests\FSharp.Compiler.Service.Tests.fsproj", "{14F3D3D6-5C8E-43C2-98A2-17EA704D4DEA}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VisualFSharpDebug", "vsintegration\Vsix\VisualFSharpFull\VisualFSharpDebug.csproj", "{A422D673-8E3B-4924-821B-DD3174173426}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Benchmarks", "Benchmarks", "{DFB6ADD7-3149-43D9-AFA0-FC4A818B472B}" +EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "CompilerServiceBenchmarks", "tests\benchmarks\CompilerServiceBenchmarks\CompilerServiceBenchmarks.fsproj", "{564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MicroPerfCSharp", "tests\benchmarks\MicroPerf\CS\MicroPerfCSharp.csproj", "{208E36EE-665C-42D2-B767-C6DB03C4FEB2}" +EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "MicroPerf", "tests\benchmarks\MicroPerf\MicroPerf.fsproj", "{EE08E954-AE91-4EFA-8595-10931D29E628}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MicroPerf", "MicroPerf", "{47112E07-9FF1-43E7-8021-F2A21D6A19A0}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -186,18 +192,6 @@ Global {991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.Release|Any CPU.Build.0 = Release|Any CPU {991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.Release|x86.ActiveCfg = Release|Any CPU {991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.Release|x86.Build.0 = Release|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Debug|x86.ActiveCfg = Debug|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Debug|x86.Build.0 = Debug|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Proto|Any CPU.ActiveCfg = Release|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Proto|Any CPU.Build.0 = Release|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Proto|x86.ActiveCfg = Release|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Proto|x86.Build.0 = Release|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Release|Any CPU.Build.0 = Release|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Release|x86.ActiveCfg = Release|Any CPU - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.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 @@ -834,18 +828,6 @@ Global {04C59F6E-1C76-4F6A-AC21-2EA7F296A1B8}.Release|Any CPU.Build.0 = Release|Any CPU {04C59F6E-1C76-4F6A-AC21-2EA7F296A1B8}.Release|x86.ActiveCfg = Release|Any CPU {04C59F6E-1C76-4F6A-AC21-2EA7F296A1B8}.Release|x86.Build.0 = Release|Any CPU - {20B7BC36-CF51-4D75-9E13-66681C07977F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {20B7BC36-CF51-4D75-9E13-66681C07977F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {20B7BC36-CF51-4D75-9E13-66681C07977F}.Debug|x86.ActiveCfg = Debug|Any CPU - {20B7BC36-CF51-4D75-9E13-66681C07977F}.Debug|x86.Build.0 = Debug|Any CPU - {20B7BC36-CF51-4D75-9E13-66681C07977F}.Proto|Any CPU.ActiveCfg = Debug|Any CPU - {20B7BC36-CF51-4D75-9E13-66681C07977F}.Proto|Any CPU.Build.0 = Debug|Any CPU - {20B7BC36-CF51-4D75-9E13-66681C07977F}.Proto|x86.ActiveCfg = Debug|Any CPU - {20B7BC36-CF51-4D75-9E13-66681C07977F}.Proto|x86.Build.0 = Debug|Any CPU - {20B7BC36-CF51-4D75-9E13-66681C07977F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {20B7BC36-CF51-4D75-9E13-66681C07977F}.Release|Any CPU.Build.0 = Release|Any CPU - {20B7BC36-CF51-4D75-9E13-66681C07977F}.Release|x86.ActiveCfg = Release|Any CPU - {20B7BC36-CF51-4D75-9E13-66681C07977F}.Release|x86.Build.0 = Release|Any CPU {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Debug|Any CPU.Build.0 = Debug|Any CPU {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -918,18 +900,6 @@ Global {2937CBEC-262D-4C94-BE1D-291FAB72E3E8}.Release|Any CPU.Build.0 = Release|Any CPU {2937CBEC-262D-4C94-BE1D-291FAB72E3E8}.Release|x86.ActiveCfg = Release|Any CPU {2937CBEC-262D-4C94-BE1D-291FAB72E3E8}.Release|x86.Build.0 = Release|Any CPU - {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Debug|x86.ActiveCfg = Debug|Any CPU - {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Debug|x86.Build.0 = Debug|Any CPU - {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Proto|Any CPU.ActiveCfg = Debug|Any CPU - {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Proto|Any CPU.Build.0 = Debug|Any CPU - {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Proto|x86.ActiveCfg = Debug|Any CPU - {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Proto|x86.Build.0 = Debug|Any CPU - {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Release|Any CPU.Build.0 = Release|Any CPU - {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Release|x86.ActiveCfg = Release|Any CPU - {C2F38485-5F87-4986-985B-55D7ED96D5CE}.Release|x86.Build.0 = Release|Any CPU {0610FB97-7C15-422A-86FD-32335C6DF14D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0610FB97-7C15-422A-86FD-32335C6DF14D}.Debug|Any CPU.Build.0 = Debug|Any CPU {0610FB97-7C15-422A-86FD-32335C6DF14D}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -966,6 +936,54 @@ Global {14F3D3D6-5C8E-43C2-98A2-17EA704D4DEA}.Release|Any CPU.Build.0 = Release|Any CPU {14F3D3D6-5C8E-43C2-98A2-17EA704D4DEA}.Release|x86.ActiveCfg = Release|Any CPU {14F3D3D6-5C8E-43C2-98A2-17EA704D4DEA}.Release|x86.Build.0 = Release|Any CPU + {A422D673-8E3B-4924-821B-DD3174173426}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A422D673-8E3B-4924-821B-DD3174173426}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A422D673-8E3B-4924-821B-DD3174173426}.Debug|x86.ActiveCfg = Debug|Any CPU + {A422D673-8E3B-4924-821B-DD3174173426}.Debug|x86.Build.0 = Debug|Any CPU + {A422D673-8E3B-4924-821B-DD3174173426}.Proto|Any CPU.ActiveCfg = Debug|Any CPU + {A422D673-8E3B-4924-821B-DD3174173426}.Proto|Any CPU.Build.0 = Debug|Any CPU + {A422D673-8E3B-4924-821B-DD3174173426}.Proto|x86.ActiveCfg = Debug|Any CPU + {A422D673-8E3B-4924-821B-DD3174173426}.Proto|x86.Build.0 = Debug|Any CPU + {A422D673-8E3B-4924-821B-DD3174173426}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A422D673-8E3B-4924-821B-DD3174173426}.Release|Any CPU.Build.0 = Release|Any CPU + {A422D673-8E3B-4924-821B-DD3174173426}.Release|x86.ActiveCfg = Release|Any CPU + {A422D673-8E3B-4924-821B-DD3174173426}.Release|x86.Build.0 = Release|Any CPU + {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Debug|Any CPU.Build.0 = Debug|Any CPU + {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Debug|x86.ActiveCfg = Debug|Any CPU + {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Debug|x86.Build.0 = Debug|Any CPU + {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Proto|Any CPU.ActiveCfg = Debug|Any CPU + {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Proto|Any CPU.Build.0 = Debug|Any CPU + {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Proto|x86.ActiveCfg = Debug|Any CPU + {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Proto|x86.Build.0 = Debug|Any CPU + {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Release|Any CPU.ActiveCfg = Release|Any CPU + {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Release|Any CPU.Build.0 = Release|Any CPU + {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Release|x86.ActiveCfg = Release|Any CPU + {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61}.Release|x86.Build.0 = Release|Any CPU + {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Debug|x86.ActiveCfg = Debug|Any CPU + {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Debug|x86.Build.0 = Debug|Any CPU + {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Proto|Any CPU.ActiveCfg = Debug|Any CPU + {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Proto|Any CPU.Build.0 = Debug|Any CPU + {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Proto|x86.ActiveCfg = Debug|Any CPU + {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Proto|x86.Build.0 = Debug|Any CPU + {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Release|Any CPU.Build.0 = Release|Any CPU + {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Release|x86.ActiveCfg = Release|Any CPU + {208E36EE-665C-42D2-B767-C6DB03C4FEB2}.Release|x86.Build.0 = Release|Any CPU + {EE08E954-AE91-4EFA-8595-10931D29E628}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EE08E954-AE91-4EFA-8595-10931D29E628}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EE08E954-AE91-4EFA-8595-10931D29E628}.Debug|x86.ActiveCfg = Debug|Any CPU + {EE08E954-AE91-4EFA-8595-10931D29E628}.Debug|x86.Build.0 = Debug|Any CPU + {EE08E954-AE91-4EFA-8595-10931D29E628}.Proto|Any CPU.ActiveCfg = Debug|Any CPU + {EE08E954-AE91-4EFA-8595-10931D29E628}.Proto|Any CPU.Build.0 = Debug|Any CPU + {EE08E954-AE91-4EFA-8595-10931D29E628}.Proto|x86.ActiveCfg = Debug|Any CPU + {EE08E954-AE91-4EFA-8595-10931D29E628}.Proto|x86.Build.0 = Debug|Any CPU + {EE08E954-AE91-4EFA-8595-10931D29E628}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EE08E954-AE91-4EFA-8595-10931D29E628}.Release|Any CPU.Build.0 = Release|Any CPU + {EE08E954-AE91-4EFA-8595-10931D29E628}.Release|x86.ActiveCfg = Release|Any CPU + {EE08E954-AE91-4EFA-8595-10931D29E628}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -977,7 +995,6 @@ Global {35636A82-401A-4C3A-B2AB-EB7DC5E9C268} = {F7876C9B-FB6A-4EFB-B058-D6967DB75FB2} {CCAB6E50-34C6-42AF-A6B0-567C29FCD91B} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} {991DCF75-C2EB-42B6-9A0D-AA1D2409D519} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} {59ADCE46-9740-4079-834D-9A03A3494EBC} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06} = {B8DDA694-7939-42E3-95E5-265C2217C142} {DED3BBD7-53F4-428A-8C9F-27968E768605} = {3058BC79-8E79-4645-B05D-48CC182FA8A6} @@ -1031,7 +1048,6 @@ Global {E93E7D28-1C6B-4E04-BE83-68428CF7E039} = {6235B3AF-774D-4EA1-8F37-789E767F6368} {9482211E-23D0-4BD0-9893-E4AA5559F67A} = {6235B3AF-774D-4EA1-8F37-789E767F6368} {04C59F6E-1C76-4F6A-AC21-2EA7F296A1B8} = {647810D0-5307-448F-99A2-E83917010DAE} - {20B7BC36-CF51-4D75-9E13-66681C07977F} = {B8DDA694-7939-42E3-95E5-265C2217C142} {09F56540-AFA5-4694-B7A6-0DBF6D4618C2} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} {DFA30881-C0B1-4813-B087-C21B5AF9B77F} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} {AA259A37-418F-4E18-87B2-C7D5F8C26CC4} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} @@ -1039,10 +1055,14 @@ Global {44155269-9B30-43DA-B97F-4F36F887B211} = {12EF27FD-A34B-4373-860A-F9FCE9651859} {B53D9D05-8EF7-43A6-9A5B-0B113CBC54F8} = {12EF27FD-A34B-4373-860A-F9FCE9651859} {2937CBEC-262D-4C94-BE1D-291FAB72E3E8} = {12EF27FD-A34B-4373-860A-F9FCE9651859} - {C2F38485-5F87-4986-985B-55D7ED96D5CE} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} {0610FB97-7C15-422A-86FD-32335C6DF14D} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} - {B5A9BBD9-2F45-4722-A6CA-BAE3C64CD4E2} = {3058BC79-8E79-4645-B05D-48CC182FA8A6} + {B5A9BBD9-2F45-4722-A6CA-BAE3C64CD4E2} = {3881429D-A97A-49EB-B7AE-A82BA5FE9C77} {14F3D3D6-5C8E-43C2-98A2-17EA704D4DEA} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} + {A422D673-8E3B-4924-821B-DD3174173426} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} + {564E7DC5-11CB-4FCF-ABDD-23AD93AF3A61} = {DFB6ADD7-3149-43D9-AFA0-FC4A818B472B} + {208E36EE-665C-42D2-B767-C6DB03C4FEB2} = {47112E07-9FF1-43E7-8021-F2A21D6A19A0} + {EE08E954-AE91-4EFA-8595-10931D29E628} = {47112E07-9FF1-43E7-8021-F2A21D6A19A0} + {47112E07-9FF1-43E7-8021-F2A21D6A19A0} = {DFB6ADD7-3149-43D9-AFA0-FC4A818B472B} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {48EDBBBE-C8EE-4E3C-8B19-97184A487B37} diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 37979ac6b9c..609d388714f 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -57,7 +57,7 @@ variables: - name: VisualStudioDropName value: Products/$(System.TeamProject)/$(Build.Repository.Name)/$(Build.SourceBranchName)/$(Build.BuildNumber) - name: DotNetSdkVersion - value: '5.0.100' + value: '5.0.300' - ${{ if and(eq(variables['System.TeamProject'], 'public'), eq(variables['Build.Reason'], 'PullRequest')) }}: - name: RunningAsPullRequest value: true @@ -77,6 +77,12 @@ stages: # Signed build # #-------------------------------------------------------------------------------------------------------------------# - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/main') }}: + - template: /eng/common/templates/job/onelocbuild.yml + parameters: + MirrorRepo: fsharp + LclSource: lclFilesfromPackage + LclPackageId: 'LCL-JUNO-PROD-FSHARP' - template: /eng/common/templates/jobs/jobs.yml parameters: enableMicrobuild: true @@ -84,6 +90,7 @@ stages: enablePublishTestResults: false enablePublishBuildAssets: true enablePublishUsingPipelines: $(_PublishUsingPipelines) + enableSourceBuild: true enableTelemetry: true helixRepo: dotnet/fsharp jobs: @@ -156,7 +163,7 @@ stages: - task: PublishBuildArtifacts@1 displayName: Publish Artifact Nightly inputs: - PathtoPublish: '$(Build.SourcesDirectory)\artifacts\VSSetup\$(_BuildConfig)\VisualFSharpFull.vsix' + PathtoPublish: '$(Build.SourcesDirectory)\artifacts\VSSetup\$(_BuildConfig)\VisualFSharpDebug.vsix' ArtifactName: 'Nightly' condition: succeeded() - task: PublishBuildArtifacts@1 @@ -184,6 +191,7 @@ stages: enablePublishTestResults: false enablePublishBuildAssets: true enablePublishUsingPipelines: $(_PublishUsingPipelines) + enableSourceBuild: true enableTelemetry: true helixRepo: dotnet/fsharp jobs: @@ -191,7 +199,12 @@ stages: # Windows - job: Windows pool: - vmImage: windows-latest + # The PR build definition sets this variable: + # WindowsMachineQueueName=BuildPool.Windows.10.Amd64.VS2019.Open + # and there is an alternate build definition that sets this to a queue that is always scouting the + # next preview of Visual Studio. + name: NetCorePublic-Pool + queue: $(WindowsMachineQueueName) timeoutInMinutes: 120 strategy: maxParallel: 4 @@ -228,7 +241,7 @@ stages: ArtifactName: 'Windows $(_configuration) $(_testKind) test logs' publishLocation: Container continueOnError: true - condition: eq(variables['_testKind'], 'testFSharpQA') + condition: failed() - script: dotnet build $(Build.SourcesDirectory)/eng/DumpPackageRoot/DumpPackageRoot.csproj displayName: Dump NuGet cache contents condition: failed() @@ -271,6 +284,14 @@ stages: searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' continueOnError: true condition: always() + - task: PublishBuildArtifacts@1 + displayName: Publish Test Logs + inputs: + PathtoPublish: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' + ArtifactName: 'Linux $(_BuildConfig) test logs' + publishLocation: Container + continueOnError: true + condition: failed() - script: dotnet build $(Build.SourcesDirectory)/eng/DumpPackageRoot/DumpPackageRoot.csproj displayName: Dump NuGet cache contents condition: failed() @@ -303,6 +324,14 @@ stages: searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' continueOnError: true condition: always() + - task: PublishBuildArtifacts@1 + displayName: Publish Test Logs + inputs: + PathtoPublish: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' + ArtifactName: 'MacOS $(_BuildConfig) test logs' + publishLocation: Container + continueOnError: true + condition: failed() - script: dotnet build $(Build.SourcesDirectory)/eng/DumpPackageRoot/DumpPackageRoot.csproj displayName: Dump NuGet cache contents condition: failed() @@ -326,32 +355,6 @@ stages: - script: .\tests\EndToEndBuildTests\EndToEndBuildTests.cmd -c Release displayName: End to end build tests - # Source Build Windows - - ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: - - job: SourceBuild_Windows - pool: - vmImage: windows-latest - steps: - - checkout: self - clean: true - - script: eng\CIBuild.cmd -configuration Release -noSign -prepareMachine -sourceBuild - displayName: Build - - task: PublishPipelineArtifact@1 - displayName: Publish Logs - inputs: - targetPath: '$(Build.SourcesDirectory)/artifacts/log/Release' - artifactName: 'SourceBuild_Windows Logs' - continueOnError: true - condition: not(succeeded()) - - task: PublishBuildArtifacts@1 - displayName: Publish Logs - inputs: - PathtoPublish: '$(Build.SourcesDirectory)/artifacts/log/Release' - ArtifactName: 'SourceBuild_Windows_Test' - publishLocation: Container - continueOnError: true - condition: not(succeeded()) - # Up-to-date - disabled due to it being flaky #- job: UpToDate_Windows # pool: @@ -365,35 +368,6 @@ stages: # filePath: eng\tests\UpToDate.ps1 # arguments: -configuration $(_BuildConfig) -ci -binaryLog - # Source Build Semi-Official - - ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: - - job: SourceBuild_Official - # used until https://github.com/dotnet/source-build/issues/1795 is fixed - pool: - name: NetCorePublic-Pool - queue: BuildPool.Ubuntu.1604.amd64.Open - timeoutInMinutes: 90 - steps: - - checkout: self - clean: true - - script: ./eng/cibuild.sh --configuration Release --prepareMachine --docker --sourceBuild - displayName: Build - - task: PublishPipelineArtifact@1 - displayName: Publish Logs - inputs: - targetPath: '$(Build.SourcesDirectory)/artifacts/log/Release' - artifactName: 'SourceBuild_Official Logs' - continueOnError: true - condition: not(succeeded()) - - task: PublishBuildArtifacts@1 - displayName: Publish Logs - inputs: - PathtoPublish: '$(Build.SourcesDirectory)/artifacts/log/Release' - ArtifactName: 'SourceBuild_Official_Test' - publishLocation: Container - continueOnError: true - condition: not(succeeded()) - # Plain build Windows # Disabled until the Windows Proto compiler is coreclr # - job: Plain_Build_Windows @@ -497,7 +471,8 @@ stages: - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - template: eng/release/insert-into-vs.yml parameters: - componentBranchName: release/dev16.8 - insertTargetBranch: master + componentBranchName: refs/heads/release/dev16.9 + insertTargetBranch: rel/d16.9 insertTeamEmail: fsharpteam@microsoft.com insertTeamName: 'F#' + completeInsertion: 'auto' diff --git a/docs/compiler-guide.md b/docs/compiler-guide.md index 3bf86f8f600..86e23265268 100644 --- a/docs/compiler-guide.md +++ b/docs/compiler-guide.md @@ -6,17 +6,15 @@ This guide discusses the F# compiler source code and implementation from a techn There are several artifacts involved in the development of F#: -* The [F# compiler library](https://github.com/dotnet/fsharp/tree/master/src/fsharp/FSharp.Compiler.Private), called `FSharp.Compiler.Private`. Contains all logic for F# compilation - including parsing, syntax tree processing, typechecking, constraint solving, optimizations, IL importing, IL writing, pretty printing of F# constructs, and F# metadata format processing - and the F# compiler APIs for tooling. +* The [F# compiler library](https://github.com/dotnet/fsharp/tree/main/src/fsharp/FSharp.Compiler.Service), called `FSharp.Compiler.Service`. Contains all logic for F# compilation - including parsing, syntax tree processing, typechecking, constraint solving, optimizations, IL importing, IL writing, pretty printing of F# constructs, and F# metadata format processing - and the F# compiler APIs for tooling. -* The [F# compiler executable](https://github.com/dotnet/fsharp/tree/master/src/fsharp/fsc), called `fsc`, which is called as a console app. It sets the .NET GC into batch mode and then invokes `FSharp.Compiler.Private` with command-line arguments. +* The [F# compiler executable](https://github.com/dotnet/fsharp/tree/main/src/fsharp/fsc), called `fsc`, which is called as a console app. It sets the .NET GC into batch mode and then invokes `FSharp.Compiler.Service` with command-line arguments. -* The [F# Core Library](https://github.com/dotnet/fsharp/tree/master/src/fsharp/FSharp.Core), called `FSharp.Core`. Contains all primitive F# types and logic for how they interact, core data structures and library functions for operating on them, structured printing logic, units of measure for scientific programming, core numeric functionality, F# quotations, F# type reflection logic, and asynchronous programming types and logic. +* The [F# Core Library](https://github.com/dotnet/fsharp/tree/main/src/fsharp/FSharp.Core), called `FSharp.Core`. Contains all primitive F# types and logic for how they interact, core data structures and library functions for operating on them, structured printing logic, units of measure for scientific programming, core numeric functionality, F# quotations, F# type reflection logic, and asynchronous programming types and logic. -* The [F# Interactive tool](https://github.com/dotnet/fsharp/tree/master/src/fsharp/fsi), called `fsi`. A REPL for F# that supports execution and pretty-printing of F# code and results, loading F# script files, referencing assemblies, and referencing packages from NuGet. +* The [F# Interactive tool](https://github.com/dotnet/fsharp/tree/main/src/fsharp/fsi), called `fsi`. A REPL for F# that supports execution and pretty-printing of F# code and results, loading F# script files, referencing assemblies, and referencing packages from NuGet. -* The [F# Compiler Service](https://github.com/dotnet/fsharp/tree/master/fcs), called `FSharp.Compiler.Service` or abbreviated to FCS. It is mostly identical to `FSharp.Compiler.Private`, but critically contains the "Expression API" that allows other environments to inspect and operate on type-checked F# expressions (such as transpiling F# code to a different runtime target). - -The `FSharp.Compiler.Private` is by far the largest of these components and contains nearly all logic that `fsc` and `fsi` use. It is the primary subject of this guide. +The `FSharp.Compiler.Service` is by far the largest of these components and contains nearly all logic that `fsc` and `fsi` use. It is the primary subject of this guide. ## Resources for learning @@ -30,21 +28,21 @@ The following are the key data formats and internal data representations of the * _Input source files_ Read as Unicode text, or binary for referenced assemblies. -* _Input command-line arguments_ See [CompileOptions.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/CompileOptions.fs) for the full code implementing the arguments table. Command-line arguments are also accepted by the F# Compiler Service API in project specifications, and as optional input to F# Interactive. +* _Input command-line arguments_ See [CompilerOptions.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/CompilerOptions.fs) for the full code implementing the arguments table. Command-line arguments are also accepted by the F# Compiler Service API in project specifications, and as optional input to F# Interactive. -* _Tokens_, see [pars.fsy](https://github.com/dotnet/fsharp/blob/master/src/fsharp/pars.fsy), [lex.fsl](https://github.com/dotnet/fsharp/blob/master/src/fsharp/lex.fsl), [lexhelp.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/lexhelp.fs) and related files. +* _Tokens_, see [pars.fsy](https://github.com/dotnet/fsharp/blob/main/src/fsharp/pars.fsy), [lex.fsl](https://github.com/dotnet/fsharp/blob/main/src/fsharp/lex.fsl), [lexhelp.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/lexhelp.fs) and related files. -* _Abstract Syntax Tree (AST)_, see [SyntaxTree.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/SyntaxTree.fs), the untyped syntax tree resulting from parsing. +* _Abstract Syntax Tree (AST)_, see [SyntaxTree.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/SyntaxTree.fs), the untyped syntax tree resulting from parsing. -* _Typed Abstract Syntax Tree (Typed Tree)_, see [TypedTree.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/TypedTree.fs), [TypedTreeBasics.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/TypedTree.fs), [TypedTreeOps.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/TypedTreeOps.fs), and related files. The typed, bound syntax tree including both type/module definitions and their backing expressions, resulting from type checking and the subject of successive phases of optimization and representation change. +* _Typed Abstract Syntax Tree (Typed Tree)_, see [TypedTree.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/TypedTree.fs), [TypedTreeBasics.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/TypedTree.fs), [TypedTreeOps.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/TypedTreeOps.fs), and related files. The typed, bound syntax tree including both type/module definitions and their backing expressions, resulting from type checking and the subject of successive phases of optimization and representation change. -* _Type checking context/state_, see for example [`TcState` in CompileOps.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/CompileOps.fsi) and its constituent parts, particularly `TcEnv` in [CheckExpressions.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/CheckExpressions.fsi) and `NameResolutionEnv` in [NameResolution.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/NameResolution.fsi). A set of tables representing the available names, assemblies etc. in scope during type checking, plus associated information. +* _Type checking context/state_, see for example [`TcState` in ParseAndCheckInputs.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/ParseAndCheckInputs.fsi) and its constituent parts, particularly `TcEnv` in [CheckExpressions.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/CheckExpressions.fsi) and `NameResolutionEnv` in [NameResolution.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/NameResolution.fsi). A set of tables representing the available names, assemblies etc. in scope during type checking, plus associated information. -* _Abstract IL_, the output of code generation, then used for binary generation, and the input format when reading .NET assemblies, see [`ILModuleDef` in il.fs](https://github.com/dotnet/fsharp/blob/master/src/absil/il.fsi). +* _Abstract IL_, the output of code generation, then used for binary generation, and the input format when reading .NET assemblies, see [`ILModuleDef` in il.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/absil/il.fsi). -* _The .NET Binary format_ (with added "pickled" F# Metadata resource), the final output of fsc.exe, see the ECMA 335 specification and the [ilread.fs](https://github.com/dotnet/fsharp/blob/master/src/absil/ilread.fs) and [ilwrite.fs](https://github.com/dotnet/fsharp/blob/master/src/absil/ilwrite.fs) binary reader/generator implementations. The added F# metadata is stored in a binary resource, see [TypedTreePickle.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/TypedTreePickle.fs). +* _The .NET Binary format_ (with added "pickled" F# Metadata resource), the final output of fsc.exe, see the ECMA 335 specification and the [ilread.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/absil/ilread.fs) and [ilwrite.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/absil/ilwrite.fs) binary reader/generator implementations. The added F# metadata is stored in a binary resource, see [TypedTreePickle.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/TypedTreePickle.fs). -* _The incrementally emitted .NET reflection assembly,_ the incremental output of fsi.exe. See [ilreflect.fs](https://github.com/dotnet/fsharp/blob/master/src/absil/ilreflect.fs). +* _The incrementally emitted .NET reflection assembly,_ the incremental output of fsi.exe. See [ilreflect.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/absil/ilreflect.fs). ## Key constructs and APIs for F# tooling @@ -52,11 +50,11 @@ The following are the most relevant parts of the F# compiler tooling, making up * The incremental project build engine state in [IncrementalBuild.fsi](https://github.com/fsharp/FSharp.Compiler.Service/tree/master/src/fsharp/service/IncrementalBuild.fsi)/[IncrementalBuild.fs](https://github.com/fsharp/FSharp.Compiler.Service/tree/master/src/fsharp/service/IncrementalBuild.fs), a part of the F# Compiler Service API. -* The corresponding APIs wrapping and accessing these structures in the public-facing [`FSharp.Compiler.Service` API](https://github.com/dotnet/fsharp/tree/master/src/fsharp/service) and [Symbol API](https://github.com/dotnet/fsharp/tree/master/src/fsharp/symbols). +* The corresponding APIs wrapping and accessing these structures in the public-facing [`FSharp.Compiler.Service` API](https://github.com/dotnet/fsharp/tree/main/src/fsharp/service) and [Symbol API](https://github.com/dotnet/fsharp/tree/main/src/fsharp/symbols). -* The [F# Compiler Service Operations Queue](fsharp-compiler-service-queue.md), the mechanism used to sequentially process requests that require semantic information. +* The [F# Compiler Service Operations Queue](https://fsharp.github.io/FSharp.Compiler.Service/queue.html), the mechanism used to sequentially process requests that require semantic information. -* The [F# Compiler Service Caches](fsharp-compiler-service-caches.md), the various caches maintained by an instance of an `FSharpChecker`. +* The [F# Compiler Service Caches](https://fsharp.github.io/FSharp.Compiler.Service/caches.html), the various caches maintained by an instance of an `FSharpChecker`. ## Key compiler phases @@ -72,43 +70,46 @@ The following are the key phases and high-level logical operations of the F# com * _Parsing_. Accepts a token stream and produces an AST per the grammar in the F# Language Specification. -* _Resolving references_. See [ReferenceResolver.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/ReferenceResolver.fs) for the abstract definition of compiler reference resolution. See [LegacyMSBuildReferenceResolver.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/LegacyMSBuildReferenceResolver.fs) for reference resolution used by the .NET Framework F# compiler when running on .NET Framework. See [SimulatedMSBuildReferenceResolver.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/SimulatedMSBuildReferenceResolver.fs) when not using the .NET Framework F# compiler. See [Microsoft.DotNet.DependencyManager](https://github.com/dotnet/fsharp/tree/master/src/fsharp/Microsoft.DotNet.DependencyManager) for reference resolution and package management used in `fsi`. +* _Resolving references_. For .NET SDK generally references are resolved explicitly by external tooling. + There is a legacy aspect to this if references use old .NET Framework references including for + scripting. See [ReferenceResolver.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/ReferenceResolver.fs) for the abstract definition of compiler reference resolution. See [LegacyMSBuildReferenceResolver.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/LegacyMSBuildReferenceResolver.fs) for reference resolution used by the .NET Framework F# compiler when running on .NET Framework. See [SimulatedMSBuildReferenceResolver.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/SimulatedMSBuildReferenceResolver.fs) when not using the .NET Framework F# compiler. + See [DependencyManager](https://github.com/dotnet/fsharp/tree/main/src/fsharp/DependencyManager) for reference resolution and package management used in `fsi`. -* _Importing referenced .NET binaries_, see [import.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/import.fsi)/[import.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/import.fs). Accepts file references and produces a Typed Tree node for each referenced assembly, including information about its type definitions (and type forwarders if any). +* _Importing referenced .NET binaries_, see [import.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/import.fsi)/[import.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/import.fs). Accepts file references and produces a Typed Tree node for each referenced assembly, including information about its type definitions (and type forwarders if any). -* _Importing referenced F# binaries and optimization information as Typed Tree data structures_, see [TypedTreePickle.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/TypedTreePickle.fs). Accepts binary data and produces Typed Tree nodes for each referenced assembly, including information about its type/module/function/member definitions. +* _Importing referenced F# binaries and optimization information as Typed Tree data structures_, see [TypedTreePickle.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/TypedTreePickle.fs). Accepts binary data and produces Typed Tree nodes for each referenced assembly, including information about its type/module/function/member definitions. -* _Sequentially type checking files_, see [CheckDeclarations.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/CheckDeclarations.fsi)/[CheckDeclarations.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/CheckDeclarations.fs). Accepts an AST plus a type checking context/state and produces new Typed Tree nodes +* _Sequentially type checking files_, see [CheckDeclarations.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/CheckDeclarations.fsi)/[CheckDeclarations.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/CheckDeclarations.fs). Accepts an AST plus a type checking context/state and produces new Typed Tree nodes incorporated into an updated type checking state, plus additional Typed Tree Expression nodes used during code generation. A key part of this is - checking syntactic types and expressions, see [CheckExpressions.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/CheckDeclarations.fsi)/[CheckExpressions.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/CheckDeclarations.fs) including the state held across the checking of a file (see `TcFileState`) and the + checking syntactic types and expressions, see [CheckExpressions.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/CheckDeclarations.fsi)/[CheckExpressions.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/CheckDeclarations.fs) including the state held across the checking of a file (see `TcFileState`) and the environment active as we traverse declarations and expressions (see `TcEnv`). -* _Pattern match compilation_, see [PatternMatchCompilation.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/PatternMatchCompilation.fsi)/[PatternMatchCompilation.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/PatternMatchCompilation.fs). Accepts a subset of checked Typed Tree nodes representing F# pattern matching and produces Typed Tree expressions implementing the pattern matching. Called during type checking as each construct involving pattern matching is processed. +* _Pattern match compilation_, see [PatternMatchCompilation.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/PatternMatchCompilation.fsi)/[PatternMatchCompilation.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/PatternMatchCompilation.fs). Accepts a subset of checked Typed Tree nodes representing F# pattern matching and produces Typed Tree expressions implementing the pattern matching. Called during type checking as each construct involving pattern matching is processed. -* _Constraint solving_, see [ConstraintSolver.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/ConstraintSolver.fsi)/[ConstraintSolver.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/ConstraintSolver.fs).A constraint solver state is maintained during type checking of a single file, and constraints are progressively asserted (i.e. added to this state). Fresh inference variables are generated and variables are eliminated (solved). Variables are also generalized at various language constructs, or explicitly declared, making them "rigid". Called during type checking as each construct is processed. +* _Constraint solving_, see [ConstraintSolver.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/ConstraintSolver.fsi)/[ConstraintSolver.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/ConstraintSolver.fs).A constraint solver state is maintained during type checking of a single file, and constraints are progressively asserted (i.e. added to this state). Fresh inference variables are generated and variables are eliminated (solved). Variables are also generalized at various language constructs, or explicitly declared, making them "rigid". Called during type checking as each construct is processed. -* _Post-inference type checks_, see [PostInferenceChecks.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/PostInferenceChecks.fsi)/[PostInferenceChecks.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/PostInferenceChecks.fs). Called at the end of type checking/inference for each file. A range of checks that can only be enforced after type checking on a file is complete, such as analysis when using `byref<'T>` or other `IsByRefLike` structs. +* _Post-inference type checks_, see [PostInferenceChecks.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/PostInferenceChecks.fsi)/[PostInferenceChecks.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/PostInferenceChecks.fs). Called at the end of type checking/inference for each file. A range of checks that can only be enforced after type checking on a file is complete, such as analysis when using `byref<'T>` or other `IsByRefLike` structs. -* _Quotation translation_, see [QuotationTranslator.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/QuotationTranslator.fsi)/[QuotationTranslator.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/QuotationTranslator.fs)/[QuotationPickler.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/QuotationPickler.fsi)/[QuotationPickler.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/QuotationPickler.fs). Generates the stored information for F# quotation nodes, generated from the Typed Tree expression structures of the F# compiler. Quotations are ultimately stored as binary data plus some added type references. "ReflectedDefinition" quotations are collected and stored in a single blob. +* _Quotation translation_, see [QuotationTranslator.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/QuotationTranslator.fsi)/[QuotationTranslator.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/QuotationTranslator.fs)/[QuotationPickler.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/QuotationPickler.fsi)/[QuotationPickler.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/QuotationPickler.fs). Generates the stored information for F# quotation nodes, generated from the Typed Tree expression structures of the F# compiler. Quotations are ultimately stored as binary data plus some added type references. "ReflectedDefinition" quotations are collected and stored in a single blob. -* _Optimization phases_, primarily the "Optimize" (peephole/inlining) and "Top Level Representation" (lambda lifting) phases, see [Optimizer.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/Optimizer.fsi)/[Optimizer.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/Optimizer.fs) and [InnerLambdasToTopLevelFuncs.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/InnerLambdasToTopLevelFuncs.fsi)/[InnerLambdasToTopLevelFuncs.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/InnerLambdasToTopLevelFuncs.fs) and [LowerCallsAndSeqs.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/LowerCallsAndSeqs.fs). Each of these takes Typed Tree nodes for types and expressions and either modifies the nodes in place or produces new Typed Tree nodes. These phases are orchestrated in [CompileOptions.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/CompileOptions.fs) +* _Optimization phases_, primarily the "Optimize" (peephole/inlining) and "Top Level Representation" (lambda lifting) phases, see [Optimizer.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/Optimizer.fsi)/[Optimizer.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/Optimizer.fs) and [InnerLambdasToTopLevelFuncs.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/InnerLambdasToTopLevelFuncs.fsi)/[InnerLambdasToTopLevelFuncs.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/InnerLambdasToTopLevelFuncs.fs) and [LowerCallsAndSeqs.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/LowerCallsAndSeqs.fs). Each of these takes Typed Tree nodes for types and expressions and either modifies the nodes in place or produces new Typed Tree nodes. These phases are orchestrated in [CompilerOptions.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/CompilerOptions.fs) -* _Code generation_, see [IlxGen.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/IlxGen.fsi)/[IlxGen.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/IlxGen.fs). Accepts Typed Tree nodes and produces Abstract IL nodes, sometimes applying optimizations. +* _Code generation_, see [IlxGen.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/IlxGen.fsi)/[IlxGen.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/IlxGen.fs). Accepts Typed Tree nodes and produces Abstract IL nodes, sometimes applying optimizations. -* _Abstract IL code rewriting_, see [EraseClosures.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/ilx/EraseClosures.fs) and - [EraseUnions.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/ilx/EraseUnions.fs). Eliminates some constructs by rewriting Abstract IL nodes. +* _Abstract IL code rewriting_, see [EraseClosures.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/ilx/EraseClosures.fs) and + [EraseUnions.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/ilx/EraseUnions.fs). Eliminates some constructs by rewriting Abstract IL nodes. -* _Binary emit_, see [ilwrite.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/absil/ilwrite.fsi)/[ilwrite.fs](https://github.com/dotnet/fsharp/blob/master/src/absil/ilwrite.fs). +* _Binary emit_, see [ilwrite.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/absil/ilwrite.fsi)/[ilwrite.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/absil/ilwrite.fs). -* _Reflection-Emit_, see [ilreflect.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/absil/ilreflect.fs). +* _Reflection-Emit_, see [ilreflect.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/absil/ilreflect.fs). These and transformations used to build the following: -* _The F# Compiler Service API_, see the [Symbol API](https://github.com/dotnet/fsharp/tree/master/src/fsharp/symbols) and [Service API](https://github.com/dotnet/fsharp/tree/master/src/fsharp/service) +* _The F# Compiler Service API_, see the [Symbol API](https://github.com/dotnet/fsharp/tree/main/src/fsharp/symbols) and [Service API](https://github.com/dotnet/fsharp/tree/main/src/fsharp/service) -* _The F# Interactive Shell_, see [fsi.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/fsi/fsi.fs). +* _The F# Interactive Shell_, see [fsi.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/fsi/fsi.fs). -* _The F# Compiler Shell_, see [fsc.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/fsc.fs) and [fscmain.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/fscmain.fs). +* _The F# Compiler Shell_, see [fsc.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/fsc.fs) and [fscmain.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/fscmain.fs). ## Tools to help work with the compiler @@ -281,9 +282,9 @@ The previous example is considered incomplete, because arbitrary _combinations_ ## Code Optimizations -Code optimizations are performed in [`Optimizer.fs`](https://github.com/dotnet/fsharp/blob/master/src/fsharp/Optimizer.fs), [`DetupleArgs.fs`](https://github.com/dotnet/fsharp/blob/master/src/fsharp/DetupleArgs.fs), [`InnerLambdasToTopLevelFuncs.fs`](https://github.com/dotnet/fsharp/blob/master/src/fsharp/InnerLambdasToTopLevelFuncs.fs) and [`LowerCallsAndSeqs.fs`](https://github.com/dotnet/fsharp/blob/master/src/fsharp/LowerCallsAndSeqs.fs). +Code optimizations are performed in [`Optimizer.fs`](https://github.com/dotnet/fsharp/blob/main/src/fsharp/Optimizer.fs), [`DetupleArgs.fs`](https://github.com/dotnet/fsharp/blob/main/src/fsharp/DetupleArgs.fs), [`InnerLambdasToTopLevelFuncs.fs`](https://github.com/dotnet/fsharp/blob/main/src/fsharp/InnerLambdasToTopLevelFuncs.fs) and [`LowerCallsAndSeqs.fs`](https://github.com/dotnet/fsharp/blob/main/src/fsharp/LowerCallsAndSeqs.fs). -Some of the optimizations performed in [`Optimizer.fs`](https://github.com/dotnet/fsharp/blob/master/src/fsharp/Optimizer.fs) are: +Some of the optimizations performed in [`Optimizer.fs`](https://github.com/dotnet/fsharp/blob/main/src/fsharp/Optimizer.fs) are: * Propagation of known values (constants, x = y, lambdas, tuples/records/union-cases of known values) * Inlining of known lambda values @@ -295,7 +296,7 @@ Some of the optimizations performed in [`Optimizer.fs`](https://github.com/dotne * Splitting large functions into multiple methods, especially at match cases, to avoid massive methods that take a long time to JIT * Removing tailcalls when it is determined that no code in the transitive closure does a tailcall nor recurses -In [`DetupleArgs.fs`](https://github.com/dotnet/fsharp/blob/master/src/fsharp/DetupleArgs.fs), tuples at call sites are eliminated if possible. Concretely, functions that accept a tuple at all call sites are replaced by functions that accept each of the tuple's arguments individually. This may require inlining to activate. +In [`DetupleArgs.fs`](https://github.com/dotnet/fsharp/blob/main/src/fsharp/DetupleArgs.fs), tuples at call sites are eliminated if possible. Concretely, functions that accept a tuple at all call sites are replaced by functions that accept each of the tuple's arguments individually. This may require inlining to activate. Considering the following example: @@ -327,7 +328,7 @@ The inner function `offsetValues` will allocate a new tuple when called. However Currently, these optimizations are not applied to `struct` tuples or explicit `ValueTuple`s passed to a function. In most cases, this doesn't matter because the handling of `ValueTuple` is well-optimized and may be erased at runtime. However, in the previous `runWithTuple` function, the overhead of allocating a `ValueTuple` each call ends up being higher than the previous example with `inline` applied to `offsetValues`. This may be addressed in the future. -In [`InnerLambdasToTopLevelFuncs.fs`](https://github.com/dotnet/fsharp/blob/master/src/fsharp/InnerLambdasToTopLevelFuncs.fs), inner functions and lambdas are analyzed and, if possible, rewritten into separate methods that do not require an `FSharpFunc` allocation. +In [`InnerLambdasToTopLevelFuncs.fs`](https://github.com/dotnet/fsharp/blob/main/src/fsharp/InnerLambdasToTopLevelFuncs.fs), inner functions and lambdas are analyzed and, if possible, rewritten into separate methods that do not require an `FSharpFunc` allocation. Consider the following implementation of `sumBy` on an F# list: @@ -342,7 +343,7 @@ let sumBy f xs = The inner `loop` function is emitted as a separate static method named `loop@2` and incurs no overhead involved with allocatin an `FSharpFunc` at runtime. -In [`LowerCallsAndSeqs.fs`](https://github.com/dotnet/fsharp/blob/master/src/fsharp/LowerCallsAndSeqs.fs), a few optimizations are performed: +In [`LowerCallsAndSeqs.fs`](https://github.com/dotnet/fsharp/blob/main/src/fsharp/LowerCallsAndSeqs.fs), a few optimizations are performed: * Performs eta-expansion on under-applied values applied to lambda expressions and does a beta-reduction to bind any known arguments * Analyzes a sequence expression and translates it into a state machine so that operating on sequences doesn't incur significant closure overhead @@ -472,7 +473,7 @@ For example, commands like Find All References and Rename can be cheap if a code In contrast, actions like highlighting all symbols in a document aren't terribly expensive even for very large file files. That's because the symbols to be inspected are ultimately only in a single document. -Operations that use typecheck data execute on a single background thread (see [Reactor.fsi](https://github.com/dotnet/fsharp/blob/master/src/fsharp/service/Reactor.fsi)/[Reactor.fs](https://github.com/dotnet/fsharp/blob/master/src/fsharp/service/Reactor.fs)). Each operation is cancellable - for example, if you run an expensive Find All References but decide to do something else, the next action you take that requires semantic data will cancel the Find All References operation and start the one you requested. +Operations that use typecheck data execute on a single background thread (see [Reactor.fsi](https://github.com/dotnet/fsharp/blob/main/src/fsharp/service/Reactor.fsi)/[Reactor.fs](https://github.com/dotnet/fsharp/blob/main/src/fsharp/service/Reactor.fs)). Each operation is cancellable - for example, if you run an expensive Find All References but decide to do something else, the next action you take that requires semantic data will cancel the Find All References operation and start the one you requested. TODO for don --> why single-threaded? why no priority queue if can't be multithreaded? @@ -527,7 +528,7 @@ Some key things to understand are: The biggest question is: could the compiler share this data across projects? In theory, yes. In practice, it's very tricky business. -From a correctness point of view: the process of generating this blob (TypedTreePickle `p_XYZ`) and resurrecting it (TypedTreePickle `u_*`) does some transformations to the Typed Tree that are necessary for correctness of compilation, for example, [in `TypedTreePickle`](https://github.com/dotnet/fsharp/blob/master/src/fsharp/TypedTreePickle.fs#L737). Basically, the Typed Tree nodes from the compilation of one assembly are _not_ valid when compiling a different assembly. +From a correctness point of view: the process of generating this blob (TypedTreePickle `p_XYZ`) and resurrecting it (TypedTreePickle `u_*`) does some transformations to the Typed Tree that are necessary for correctness of compilation, for example, [in `TypedTreePickle`](https://github.com/dotnet/fsharp/blob/main/src/fsharp/TypedTreePickle.fs#L738). Basically, the Typed Tree nodes from the compilation of one assembly are _not_ valid when compiling a different assembly. The Typed Tree nodes include `CcuData` nodes, which have access to a number of callbacks into the `TcImports` compilation context for the assembly being compiled. TypedTree nodes are effectively tied to a particular compilation of a particular assembly due to this. @@ -539,7 +540,7 @@ From a lifetime point of view: the Typed Tree nodes are tied together in a graph Some parts of the F# codebase (specifically, the type checker) are written using `eventually` computation expressions. These define resumption-like computations which can be time-sliced, suspended or discarded at "bind" points. -This is done to ensure that long-running type-checking and other computations in the F# Compiler Service can be interrupted and cancelled. The documentation of the [F# Compiler Service Operations Queue](fsharp-compiler-service-queue.md) covers some aspects of this. +This is done to ensure that long-running type-checking and other computations in the F# Compiler Service can be interrupted and cancelled. The documentation of the [F# Compiler Service Operations Queue](https://fsharp.github.io/FSharp.Compiler.Service/queue.html) covers some aspects of this. When compiling code with `fsc` or executing code with `fsi`, these computations are not time-sliced and simply run synchronously and without interruption (unless the user requests it). @@ -556,17 +557,35 @@ decide not to bother continuing with the computation (it drops it on the floor) The second can be interrupted via having `isResultObsolete` to the F# Compiler Service API return true. +### The F# Compiler Service Public Surface Area + +The "intended" FCS API is the parts under the namespaces + +* FSharp.Compiler.SourceCodeServices.* (analysis, compilation, tooling, lexing) +* FSharp.Compiler.Interactive.Shell.* (scripting support) +* FSharp.Compiler.AbstractIL.* (for ILAssemblyReader hook for Rider) +* FSharp.Compiler.Syntax.* (direct access to full untyped tree) + +These sections are generally designed with F#/.NET design conventions (e.g. types in namespaces, not modules, no nesting of modules etc.) +and we will continue to iterate to make this so. + +In contrast, the public parts of the compiler directly under `FSharp.Compiler.*` and `FSharp.AbstractIL.*` are +"incidental" and not really designed for public use apart from the hook for JetBrains Rider +(Aside: In theory all these other parts could be renamed to FSharp.Compiler though there's no need to do that right now). +These internal parts tend to be implemented with the "module containing lots of stuff in one big file" approach for layers of the compiler. + + ### The F# Compiler Service Operations Queue -See [F# Compiler Service Queue](fsharp-compiler-service-queue.md). +See [F# Compiler Service Queue](https://fsharp.github.io/FSharp.Compiler.Service/queue.html). ### The F# Compiler Service Caches -See [F# Compiler Service Caches](fsharp-compiler-service-caches.md). +See [F# Compiler Service Caches](https://fsharp.github.io/FSharp.Compiler.Service/caches.html). ## Bootstrapping -The F# compiler is boostrapped. That is, an existing F# compiler is used to build a "proto" compiler from the current source code. That "proto" compiler is then used to compile itself, producing a "final" compiler. This ensures the final compiler is compiled with all relevant optimizations and fixes. +The F# compiler is bootstrapped. That is, an existing F# compiler is used to build a "proto" compiler from the current source code. That "proto" compiler is then used to compile itself, producing a "final" compiler. This ensures the final compiler is compiled with all relevant optimizations and fixes. ## FSharp.Build @@ -574,4 +593,4 @@ The F# compiler is boostrapped. That is, an existing F# compiler is used to buil ### Attribution -This document is based heavily on an [original document](http://fsharp.github.io/2015/09/29/fsharp-compiler-guide.html) published in 2015 by the [F# Software Foundation](http://fsharp.org). +This document is based on an original document published in 2015 by the [F# Software Foundation](http://fsharp.org). It has since been updated substantially. diff --git a/docs/fcs/compiler.fsx b/docs/fcs/compiler.fsx index d4c48325408..e880ed57f1a 100644 --- a/docs/fcs/compiler.fsx +++ b/docs/fcs/compiler.fsx @@ -29,7 +29,7 @@ First, we need to reference the libraries that contain F# interactive service: #r "FSharp.Compiler.Service.dll" open System.IO -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis // Create an interactive checker instance let checker = FSharpChecker.Create() diff --git a/docs/fcs/corelib.fsx b/docs/fcs/corelib.fsx index e2aaf41a7db..cfcdba13557 100644 --- a/docs/fcs/corelib.fsx +++ b/docs/fcs/corelib.fsx @@ -4,6 +4,25 @@ Compiler Services: Notes on FSharp.Core.dll ================================================= +Versions of FSharp.Core involved in the operation of FSharp.Compiler.Service +--------------------------------------------- + +There are three versions of FSharp.Core relevant to the operation of FSharp.Compiler.Service: + +1. **The FSharp.Compiler.Service.dll static reference to FSharp.Core** - The FCS DLL and nuget have a static minbound dependency on FSharp.Core. + + This is just a normal .NET dependency like any other, it expresses the minimum surface area of FSharp.Core that the implementation of FSharp.Compiler.Service (and any components that depend on it) needs. It could be a reference to a reference assembly if we supported that. In theory this could be very low and all is cool - if we could implement FCS in terms of FSharp.Core 2.0.0.0 then that could be the minbound (indeed in theory we could implement FCS pretty almost without any use of FSharp.Core functionality at all, though obviously we don't) + + In practice this is 0-2 versions behind latest FSharp.Core. + +2. **The runtime reference to FSharp.Core in a tool, application or test suite that includes FSharp.Compiler.Service** - This is the actual version of FSharp.Core used when, say, fsc.exe or devenv.exe or fsi.exe or fsdocs.exe runs. + + This must be at least as high as (1) and is usually the very latest FSharp.Core available (in or out of repo tree). This is important to the operation of the FCS-based tool because it is used for execution of scripts, and the default compilation reference for scripts. If scripts are going to use a particular language feature then this must be sufficient to support the language feature + +3. **The FSharp.Core reference in a compilation or analysis being processed by FSharp.Compiler.Service**. + + This can be anything - 2.0.0.0, 4.0.0.0 or 5.0.0 or whatever. For script compilation and execution is is the same as (2). It must be sufficient to support language features used in the compilation. + Shipping an FSharp.Core with your application --------------------------------------------- @@ -13,32 +32,6 @@ include a copy of FSharp.Core.dll as part of your application. For example, if you build a ``HostedCompiler.exe``, you will normally place an FSharp.Core.dll (say 4.3.1.0) alongside your ``HostedCompiler.exe``. -Binding redirects for your application --------------------------------------- - -The FSharp.Compiler.Service.dll component depends on FSharp.Core 4.4.0.0. Normally your application will target -a later version of FSharp.Core, and you may need a [binding redirect](https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/redirect-assembly-versions) to ensure -that other versions of FSharp.Core forward to the final version of FSharp.Core.dll your application uses. -Binding redirect files are normally generated automatically by build tools. If not, you can use one like this -(if your tool is called ``HostedCompiler.exe``, the binding redirect file is called ``HostedCompiler.exe.config``) - -Some other dependencies may also need to be reconciled and forwarded. - - - - - - - - - - - - - - - - Which FSharp.Core and .NET Framework gets referenced in compilation? -------------------------------------- @@ -89,6 +82,7 @@ Summary In this design note we have discussed three things: +- the versions of FSharp.Core relevant to the operation of FSharp.Compiler.Service.dll - which FSharp.Core.dll is used to run your compilation tools - how to configure binding redirects for the FSharp.Core.dll used to run your compilation tools - which FSharp.Core.dll and/or framework assemblies are referenced during the checking and compilations performed by your tools. diff --git a/docs/fcs/editor.fsx b/docs/fcs/editor.fsx index 144d6e74374..b707663c01b 100644 --- a/docs/fcs/editor.fsx +++ b/docs/fcs/editor.fsx @@ -26,8 +26,10 @@ of `InteractiveChecker`: #r "FSharp.Compiler.Service.dll" open System -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices open FSharp.Compiler.Text +open FSharp.Compiler.Tokenization // Create an interactive checker instance let checker = FSharpChecker.Create() @@ -118,7 +120,7 @@ this is the type that lets you implement most of the interesting F# source code ### Getting a tool tip -To get a tool tip, you can use `GetToolTipTextAlternate` method. The method takes a line number and character +To get a tool tip, you can use `GetToolTip` method. The method takes a line number and character offset. Both of the numbers are zero-based. In the sample code, we want to get tooltip for the `foo` function that is defined on line 3 (line 0 is blank) and the letter `f` starts at index 7 (the tooltip would work anywhere inside the identifier). @@ -128,17 +130,14 @@ identifier (the other option lets you get tooltip with full assembly location wh *) // Get tag of the IDENT token to be used as the last argument -open FSharp.Compiler let identToken = FSharpTokenTag.Identifier // Get tool tip at the specified location -let tip = checkFileResults.GetToolTipText(4, 7, inputLines.[1], ["foo"], identToken) +let tip = checkFileResults.GetToolTip(4, 7, inputLines.[1], ["foo"], identToken) printfn "%A" tip (** -> **NOTE:** `GetToolTipTextAlternate` is an alternative name for the old `GetToolTipText`. The old `GetToolTipText` was -deprecated because it accepted zero-based line numbers. At some point it will be removed, and `GetToolTipTextAlternate` will be renamed back to `GetToolTipText`. *) (** @@ -201,7 +200,7 @@ let methods = // Print concatenated parameter lists for mi in methods.Methods do - [ for p in mi.Parameters -> p.Display ] + [ for p in mi.Parameters do for tt in p.Display do yield tt.Text ] |> String.concat ", " |> printfn "%s(%s)" methods.MethodName (** diff --git a/docs/fcs/filesystem.fsx b/docs/fcs/filesystem.fsx index b70174de514..503a18ea9f1 100644 --- a/docs/fcs/filesystem.fsx +++ b/docs/fcs/filesystem.fsx @@ -21,9 +21,11 @@ open System open System.IO open System.Collections.Generic open System.Text -open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.IO +open FSharp.Compiler.Text -let defaultFileSystem = Shim.FileSystem +let defaultFileSystem = FileSystem let fileName1 = @"c:\mycode\test1.fs" // note, the path doesn't exist let fileName2 = @"c:\mycode\test2.fs" // note, the path doesn't exist @@ -91,7 +93,7 @@ let B = File1.A + File1.A""" defaultFileSystem.AssemblyLoad assemblyName let myFileSystem = MyFileSystem() -Shim.FileSystem <- MyFileSystem() +FileSystem <- MyFileSystem() (** @@ -99,7 +101,6 @@ Doing a compilation with the FileSystem --------------------------------------- *) -open FSharp.Compiler.SourceCodeServices let checker = FSharpChecker.Create() @@ -143,7 +144,6 @@ let projectOptions = ProjectId = None SourceFiles = [| fileName1; fileName2 |] OriginalLoadReferences = [] - ExtraProjectInfo=None Stamp = None OtherOptions = allFlags ReferencedProjects = [| |] @@ -154,7 +154,7 @@ let projectOptions = let results = checker.ParseAndCheckProject(projectOptions) |> Async.RunSynchronously -results.Errors +results.Diagnostics results.AssemblySignature.Entities.Count //2 results.AssemblySignature.Entities.[0].MembersFunctionsAndValues.Count //1 results.AssemblySignature.Entities.[0].MembersFunctionsAndValues.[0].DisplayName // "B" diff --git a/docs/fcs/interactive.fsx b/docs/fcs/interactive.fsx index 4dd10119f3d..e455e7283c4 100644 --- a/docs/fcs/interactive.fsx +++ b/docs/fcs/interactive.fsx @@ -31,8 +31,8 @@ First, we need to reference the libraries that contain F# interactive service: *) #r "FSharp.Compiler.Service.dll" -open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Interactive.Shell +open FSharp.Compiler.Tokenization (** To communicate with F# interactive, we need to create streams that represent input and @@ -115,7 +115,7 @@ Catching errors ``EvalExpression``, ``EvalInteraction`` and ``EvalScript`` are awkward if the code has type checking warnings or errors, or if evaluation fails with an exception. In these cases you can use ``EvalExpressionNonThrowing``, ``EvalInteractionNonThrowing`` -and ``EvalScriptNonThrowing``. These return a tuple of a result and an array of ``FSharpErrorInfo`` values. +and ``EvalScriptNonThrowing``. These return a tuple of a result and an array of ``FSharpDiagnostic`` values. These represent the errors and warnings. The result part is a ``Choice<_,_>`` between an actual result and an exception. @@ -142,7 +142,7 @@ Gives: // show the errors and warnings for w in warnings do - printfn "Warning %s at %d,%d" w.Message w.StartLineAlternate w.StartColumn + printfn "Warning %s at %d,%d" w.Message w.StartLine w.StartColumn (** Gives: @@ -157,7 +157,7 @@ For expressions: let evalExpressionTyped2<'T> text = let res, warnings = fsiSession.EvalExpressionNonThrowing(text) for w in warnings do - printfn "Warning %s at %d,%d" w.Message w.StartLineAlternate w.StartColumn + printfn "Warning %s at %d,%d" w.Message w.StartLine w.StartColumn match res with | Choice1Of2 (Some value) -> value.ReflectionValue |> unbox<'T> | Choice1Of2 None -> failwith "null or no result" @@ -219,7 +219,7 @@ let parseResults, checkResults, checkProjectResults = The `parseResults` and `checkResults` have types `ParseFileResults` and `CheckFileResults` explained in [Editor](editor.html). You can, for example, look at the type errors in the code: *) -checkResults.Errors.Length // 1 +checkResults.Diagnostics.Length // 1 (** The code is checked with respect to the logical type context available in the F# interactive session @@ -227,10 +227,9 @@ based on the declarations executed so far. You can also request declaration list information, tooltip text and symbol resolution: *) -open FSharp.Compiler // get a tooltip -checkResults.GetToolTipText(1, 2, "xxx + xx", ["xxx"], FSharpTokenTag.IDENT) +checkResults.GetToolTip(1, 2, "xxx + xx", ["xxx"], FSharpTokenTag.IDENT) checkResults.GetSymbolUseAtLocation(1, 2, "xxx + xx", ["xxx"]) // symbol xxx diff --git a/docs/fcs/ja/compiler.fsx b/docs/fcs/ja/compiler.fsx index 8b14ea3f007..a795d8b2d39 100644 --- a/docs/fcs/ja/compiler.fsx +++ b/docs/fcs/ja/compiler.fsx @@ -18,7 +18,7 @@ *) #r "FSharp.Compiler.Service.dll" -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis open System.IO let scs = FSharpChecker.Create() diff --git a/docs/fcs/ja/corelib.fsx b/docs/fcs/ja/corelib.fsx index aa5acd33689..f5a7bbd2890 100644 --- a/docs/fcs/ja/corelib.fsx +++ b/docs/fcs/ja/corelib.fsx @@ -13,27 +13,6 @@ FSharp.Compiler.Service.dll を利用するアプリケーションまたはプ 動的コンパイルや動的実行を行う場合、FSharp.Core.optdata と FSharp.Core.sigdata も含める必要があるかもしれませんが、これらについては下記の指針をご覧ください。 -あなたのアプリケーションにリダイレクトをバインドする ----------------------------------------------------- - -FSharp.Compiler.Service.dll コンポーネントは FSharp.Core 4.3.0.0 に依存しています。通例、あなたのアプリケーションはこれより後のバージョンの FSharp.Core をターゲットにしており、FSharp.Core 4.3.0.0 をあなたのアプリケーションで用いる FSharp.Core.dll の最終バージョンにちゃんと転送させるように[バインド リダイレクト](https://msdn.microsoft.com/ja-jp/library/7wd6ex19(v=vs.110).aspx)が必要になるでしょう。バインド リダイレクト ファイルは通常ビルドツールによって自動的に生成されます。そうでない場合、下記のようなファイル(あなたのツールが ``HostedCompiler.exe`` という名前で、バインド リダイレクト ファイルが ``HostedCompiler.exe.config`` という名前の場合)を使うことが出来ます。 - - - - - - - - - - - - - - - - - どの FSharp.Core と .NET フレームワークがコンパイル時に参照される? -------------------------------------- diff --git a/docs/fcs/ja/editor.fsx b/docs/fcs/ja/editor.fsx index efbd5936ede..d5543eefdee 100644 --- a/docs/fcs/ja/editor.fsx +++ b/docs/fcs/ja/editor.fsx @@ -28,8 +28,10 @@ #r "FSharp.Compiler.Service.dll" open System -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices open FSharp.Compiler.Text +open FSharp.Compiler.Tokenization // インタラクティブチェッカーのインスタンスを作成 let checker = FSharpChecker.Create() @@ -138,17 +140,13 @@ let checkFileResults = *) // 最後の引数に指定する、IDENTトークンのタグを取得 -open FSharp.Compiler // 特定の位置におけるツールチップを取得 -let tip = checkFileResults.GetToolTipText(4, 7, inputLines.[1], ["foo"], FSharpTokenTag.Identifier) +let tip = checkFileResults.GetToolTip(4, 7, inputLines.[1], ["foo"], FSharpTokenTag.Identifier) printfn "%A" tip (** -> **注意:** `GetToolTipTextAlternate` は古い関数 `GetToolTipText` に代わるものです。 -`GetToolTipText` は0から始まる行番号を受け取るようになっていたため、非推奨になりました。 - この関数には位置とトークンの種類の他にも、 (ソースコードの変更時に役立つように)特定行の現在の内容と、 現時点における完全修飾された `名前` を表す文字列のリストを指定する必要があります。 @@ -217,7 +215,7 @@ let methods = // 連結された引数リストを表示 for mi in methods.Methods do - [ for p in mi.Parameters -> p.Display ] + [ for p in mi.Parameters do for tt in p.Display do yield tt.Text ] |> String.concat ", " |> printfn "%s(%s)" methods.MethodName (** diff --git a/docs/fcs/ja/filesystem.fsx b/docs/fcs/ja/filesystem.fsx index 5b0db49b294..c012596a73b 100644 --- a/docs/fcs/ja/filesystem.fsx +++ b/docs/fcs/ja/filesystem.fsx @@ -17,13 +17,12 @@ FileSystemの設定 以下の例ではディスクからの読み取りを行うような実装をファイルシステムに設定しています: *) #r "FSharp.Compiler.Service.dll" -open System open System.IO -open System.Collections.Generic open System.Text -open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.IO -let defaultFileSystem = Shim.FileSystem +let defaultFileSystem = FileSystem let fileName1 = @"c:\mycode\test1.fs" // 注意: 実際には存在しないファイルのパス let fileName2 = @"c:\mycode\test2.fs" // 注意: 実際には存在しないファイルのパス @@ -91,7 +90,7 @@ let B = File1.A + File1.A""" defaultFileSystem.AssemblyLoad assemblyName let myFileSystem = MyFileSystem() -Shim.FileSystem <- MyFileSystem() +FileSystem <- MyFileSystem() (** @@ -99,7 +98,7 @@ FileSystemによるコンパイルの実行 -------------------------------- *) -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis let checker = FSharpChecker.Create() let projectOptions = @@ -126,7 +125,6 @@ let projectOptions = ProjectId = None SourceFiles = [| fileName1; fileName2 |] OriginalLoadReferences = [] - ExtraProjectInfo=None Stamp = None OtherOptions = allFlags ReferencedProjects=[| |] @@ -137,7 +135,7 @@ let projectOptions = let results = checker.ParseAndCheckProject(projectOptions) |> Async.RunSynchronously -results.Errors +results.Diagnostics results.AssemblySignature.Entities.Count //2 results.AssemblySignature.Entities.[0].MembersFunctionsAndValues.Count //1 results.AssemblySignature.Entities.[0].MembersFunctionsAndValues.[0].DisplayName // "B" diff --git a/docs/fcs/ja/interactive.fsx b/docs/fcs/ja/interactive.fsx index b2a27e02760..9f7fb2109f4 100644 --- a/docs/fcs/ja/interactive.fsx +++ b/docs/fcs/ja/interactive.fsx @@ -42,7 +42,7 @@ F# Interactiveの開始 *) #r "FSharp.Compiler.Service.dll" -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Tokenization open FSharp.Compiler.Interactive.Shell (** @@ -127,7 +127,7 @@ fsiSession.EvalScript "sample.fsx" `EvalExpression` 、 `EvalInteraction` そして `EvalScript` ではあまりうまく処理されません。 これらのケースでは、 `EvalExpressionNonThrowing` 、 `EvalInteractionNonThrowing` そして `EvalScriptNonThrowing` を使うことが出来ます。 -これらは結果と `FSharpErrorInfo` 値の配列の組を返します。 +これらは結果と `FSharpDiagnostic` 値の配列の組を返します。 これらはエラーと警告を表します。結果の部分は実際の結果と例外のいずれかを表す `Choice<_,_>` です。 @@ -156,7 +156,7 @@ match result with // エラーと警告を表示する for w in warnings do - printfn "警告 %s 場所 %d,%d" w.Message w.StartLineAlternate w.StartColumn + printfn "警告 %s 場所 %d,%d" w.Message w.StartLine w.StartColumn (** は次のようになります: @@ -171,7 +171,7 @@ for w in warnings do let evalExpressionTyped2<'T> text = let res, warnings = fsiSession.EvalExpressionNonThrowing(text) for w in warnings do - printfn "警告 %s 場所 %d,%d" w.Message w.StartLineAlternate w.StartColumn + printfn "警告 %s 場所 %d,%d" w.Message w.StartLine w.StartColumn match res with | Choice1Of2 (Some value) -> value.ReflectionValue |> unbox<'T> | Choice1Of2 None -> failwith "null または結果がありません" @@ -231,10 +231,10 @@ let parseResults, checkResults, checkProjectResults = (** `parseResults` と `checkResults` はそれぞれ [エディタ](editor.html) -のページで説明している `ParseFileResults` と `CheckFileResults` 型です。 +のページで説明している `FSharpParseFileResults` と `FSharpCheckFileResults` 型です。 たとえば以下のようなコードでエラーを確認出来ます: *) -checkResults.Errors.Length // 1 +checkResults.Diagnostics.Length // 1 (** コードはF# Interactiveセッション内において、その時点までに実行された @@ -244,10 +244,9 @@ checkResults.Errors.Length // 1 要求することもできます: *) -open FSharp.Compiler // ツールチップを取得する -checkResults.GetToolTipText(1, 2, "xxx + xx", ["xxx"], FSharpTokenTag.IDENT) +checkResults.GetToolTip(1, 2, "xxx + xx", ["xxx"], FSharpTokenTag.IDENT) checkResults.GetSymbolUseAtLocation(1, 2, "xxx + xx", ["xxx"]) // シンボル xxx diff --git a/docs/fcs/ja/project.fsx b/docs/fcs/ja/project.fsx index 4f59e11da94..bdb658a0452 100644 --- a/docs/fcs/ja/project.fsx +++ b/docs/fcs/ja/project.fsx @@ -22,9 +22,9 @@ // F#コンパイラAPIへの参照 #r "FSharp.Compiler.Service.dll" -open System open System.Collections.Generic -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Symbols open FSharp.Compiler.Text // インタラクティブチェッカーのインスタンスを作成 @@ -110,13 +110,13 @@ let wholeProjectResults = checker.ParseAndCheckProject(projectOptions) |> Async. (** 発生したエラーと警告は以下のようにしてチェックできます: *) -wholeProjectResults.Errors.Length // 1 -wholeProjectResults.Errors.[0].Message.Contains("Incomplete pattern matches on this expression") // true +wholeProjectResults.Diagnostics.Length // 1 +wholeProjectResults.Diagnostics.[0].Message.Contains("Incomplete pattern matches on this expression") // true -wholeProjectResults.Errors.[0].StartLineAlternate // 13 -wholeProjectResults.Errors.[0].EndLineAlternate // 13 -wholeProjectResults.Errors.[0].StartColumn // 15 -wholeProjectResults.Errors.[0].EndColumn // 16 +wholeProjectResults.Diagnostics.[0].StartLine // 13 +wholeProjectResults.Diagnostics.[0].EndLine // 13 +wholeProjectResults.Diagnostics.[0].StartColumn // 15 +wholeProjectResults.Diagnostics.[0].EndColumn // 16 (** 推測されたプロジェクトのシグネチャをチェックします: diff --git a/docs/fcs/ja/symbols.fsx b/docs/fcs/ja/symbols.fsx index bc5994c612d..02e2ee48602 100644 --- a/docs/fcs/ja/symbols.fsx +++ b/docs/fcs/ja/symbols.fsx @@ -19,9 +19,8 @@ // F#コンパイラAPIへの参照 #r "FSharp.Compiler.Service.dll" -open System open System.IO -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis open FSharp.Compiler.Text // インタラクティブチェッカーのインスタンスを作成 diff --git a/docs/fcs/ja/tokenizer.fsx b/docs/fcs/ja/tokenizer.fsx index a1aa9080aea..46548bbd74e 100644 --- a/docs/fcs/ja/tokenizer.fsx +++ b/docs/fcs/ja/tokenizer.fsx @@ -18,10 +18,10 @@ F#のソースコードに対して、トークナイザは ------------------ トークナイザを使用するには、 `FSharp.Compiler.Service.dll` への参照を追加した後に -`SourceCodeServices` 名前空間をオープンします: +`Tokenization` 名前空間をオープンします: *) #r "FSharp.Compiler.Service.dll" -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Tokenization (** すると `FSharpSourceTokenizer` のインスタンスを作成できるようになります。 このクラスには2つの引数を指定します。 @@ -32,7 +32,7 @@ open FSharp.Compiler.SourceCodeServices ファイル名はソースコードの位置を特定する場合にのみ指定する必要があります (存在しないファイル名でも指定できます): *) -let sourceTok = FSharpSourceTokenizer([], "C:\\test.fsx") +let sourceTok = FSharpSourceTokenizer([], Some "C:\\test.fsx") (** `sourceTok` オブジェクトを使用することでF#ソースコードの各行を (繰り返し)トークン化することができます。 diff --git a/docs/fcs/ja/untypedtree.fsx b/docs/fcs/ja/untypedtree.fsx index f4050109d2c..6504431959f 100644 --- a/docs/fcs/ja/untypedtree.fsx +++ b/docs/fcs/ja/untypedtree.fsx @@ -37,11 +37,11 @@ インタラクティブチェッカーを使用するには、 `FSharp.Compiler.Service.dll` への参照を追加した後、 -`SourceCodeServices` 名前空間をオープンします: +`CodeAnalysis` 名前空間をオープンします: *) #r "FSharp.Compiler.Service.dll" open System -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis open FSharp.Compiler.Text (** @@ -102,7 +102,7 @@ ASTを理解するには ASTに関連する要素は以下の名前空間に含まれています: *) -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax (** ASTを処理する場合、異なる文法的要素に対するパターンマッチを行うような @@ -164,8 +164,8 @@ let rec visitExpression = function // ('let .. = .. and .. = .. in ...' に対しては複数回走査されることがある) printfn "以下のバインディングを含むLetOrUse:" for binding in bindings do - let (Binding(access, kind, inlin, mutabl, attrs, xmlDoc, - data, pat, retInfo, init, m, sp)) = binding + let (SynBinding(access, kind, inlin, mutabl, attrs, xmlDoc, + data, pat, retInfo, init, m, sp)) = binding visitPattern pat visitExpression init // 本体の式を走査 @@ -199,8 +199,8 @@ let visitDeclarations decls = // (visitExpressionで処理したような)式としてのletバインディングと // 似ているが、本体を持たない for binding in bindings do - let (Binding(access, kind, inlin, mutabl, attrs, xmlDoc, - data, pat, retInfo, body, m, sp)) = binding + let (SynBinding(access, kind, inlin, mutabl, attrs, xmlDoc, + data, pat, retInfo, body, m, sp)) = binding visitPattern pat visitExpression body | _ -> printfn " - サポート対象外の宣言: %A" declaration diff --git a/docs/fcs/project.fsx b/docs/fcs/project.fsx index 7988face34e..2c01f7f3379 100644 --- a/docs/fcs/project.fsx +++ b/docs/fcs/project.fsx @@ -26,7 +26,8 @@ of `InteractiveChecker`: open System open System.Collections.Generic -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Symbols open FSharp.Compiler.Text // Create an interactive checker instance @@ -128,13 +129,13 @@ let wholeProjectResults = checker.ParseAndCheckProject(projectOptions) |> Async. (** Now look at the errors and warnings: *) -wholeProjectResults .Errors.Length // 1 -wholeProjectResults.Errors.[0].Message.Contains("Incomplete pattern matches on this expression") // yes it does +wholeProjectResults.Diagnostics.Length // 1 +wholeProjectResults.Diagnostics.[0].Message.Contains("Incomplete pattern matches on this expression") // yes it does -wholeProjectResults.Errors.[0].StartLineAlternate // 13 -wholeProjectResults.Errors.[0].EndLineAlternate // 13 -wholeProjectResults.Errors.[0].StartColumn // 15 -wholeProjectResults.Errors.[0].EndColumn // 16 +wholeProjectResults.Diagnostics.[0].StartLine // 13 +wholeProjectResults.Diagnostics.[0].EndLine // 13 +wholeProjectResults.Diagnostics.[0].StartColumn // 15 +wholeProjectResults.Diagnostics.[0].EndColumn // 16 (** Now look at the inferred signature for the project: diff --git a/docs/fcs/queue.fsx b/docs/fcs/queue.fsx index 88a5af258ec..bc9e8595b5d 100644 --- a/docs/fcs/queue.fsx +++ b/docs/fcs/queue.fsx @@ -9,47 +9,66 @@ This is a design note on the FSharpChecker component and its operations queue. FSharpChecker maintains an operations queue. Items from the FSharpChecker operations queue are processed sequentially and in order. -The thread processing these requests can also run a low-priority, interleaved background operation when the -queue is empty. This can be used to implicitly bring the background check of a project "up-to-date". -When the operations queue has been empty for 1 second, -this background work is run in small incremental fragments. This work is cooperatively time-sliced to be approximately <50ms, (see `maxTimeShareMilliseconds` in -IncrementalBuild.fs). The project to be checked in the background is set implicitly -by calls to ``CheckFileInProject`` and ``ParseAndCheckFileInProject``. -To disable implicit background checking completely, set ``checker.ImplicitlyStartBackgroundWork`` to false. -To change the time before background work starts, set ``checker.PauseBeforeBackgroundWork`` to the required number of milliseconds. - -Most calls to the FSharpChecker API enqueue an operation in the FSharpChecker compiler queue. These correspond to the -calls to EnqueueAndAwaitOpAsync in [service.fs](https://github.com/fsharp/FSharp.Compiler.Service/blob/master/src/fsharp/service/service.fs). - -* For example, calling `ParseAndCheckProject` enqueues a `ParseAndCheckProjectImpl` operation. The time taken for the +This means the FCS API has three kinds of operations: + +* "Runs on caller thread (runs on caller thread)" - Some requests from FSharp.Editor are + serviced concurrently without using the queue at all. Everything without an Async return type + is in this category. + +* "Queued-at-high-priority (runs on reactor thread)" - These are requests made via the FCS API + (e.g. from FSharp.Editor) and anything with "Async" return type is in this category. The + originating calls are not typically on the UI thread and are associated with active actions + by the user (editing a file etc.). + + These correspond to the calls to EnqueueAndAwaitOpAsync in [service.fs](https://github.com/fsharp/FSharp.Compiler.Service/blob/master/src/fsharp/service/service.fs). + For example, calling `ParseAndCheckProject` enqueues a `ParseAndCheckProjectImpl` operation. The time taken for the operation will depend on how much work is required to bring the project analysis up-to-date. + The length of the operation will vary - many will be very fast - but they won't + be processed until other operations already in the queue are complete. -* Likewise, calling any of `GetUsesOfSymbol`, `GetAllUsesOfAllSymbols`, `ParseFileInProject`, - `GetBackgroundParseResultsForFileInProject`, `MatchBraces`, `CheckFileInProjectIfReady`, `ParseAndCheckFileInProject`, `GetBackgroundCheckResultsForFileInProject`, - `ParseAndCheckProject`, `GetProjectOptionsFromScript`, `InvalidateConfiguration`, `InvaidateAll` and operations - on FSharpCheckResults will cause an operation to be enqueued. The length of the operation will - vary - many will be very fast - but they won't be processed until other operations already in the queue are complete. +* "Queued and interleaved at lower priority (runs on reactor thread)" - This is reserved + for a "background" job (CheckProjectInBackground) used for to prepare the project builder + state of the current project being worked on. The "background" work is intended to be + divided into little chunks so it can always be interrupted in order to service the higher-priority work. -Some operations do not enqueue anything on the FSharpChecker operations queue - notably any accesses to the Symbol APIs. -These use cross-threaded access to the TAST data produced by other FSharpChecker operations. + This operation runs when the queue is empty. When the operations queue has been empty for 1 second, + this work is run in small incremental fragments. The overall work may get cancelled if replaced + by an alternative project build. This work is cooperatively + time-sliced to be approximately <50ms, (see `maxTimeShareMilliseconds` in + IncrementalBuild.fs). The project to be checked in the background is set implicitly + by calls to ``CheckFileInProject`` and ``ParseAndCheckFileInProject``. + To disable implicit background checking completely, set ``checker.ImplicitlyStartBackgroundWork`` to false. + To change the time before background work starts, set ``checker.PauseBeforeBackgroundWork`` to the required + number of milliseconds. -Some tools throw a lot of interactive work at the FSharpChecker operations queue. +Some tools throw a lot of "Queued-at-high-priority" work at the FSharpChecker operations queue. If you are writing such a component, consider running your project against a debug build of FSharp.Compiler.Service.dll to see the Trace.WriteInformation messages indicating the length of the operations queue and the time to process requests. For those writing interactive editors which use FCS, you -should be cautious about operations that request a check of the entire project. +should be cautious about long running "Queued-at-high-priority" operations - these +will run in preference to other similar operations and must be both asynchronous +and cancelled if the results will no longer be needed. For example, be careful about requesting the check of an entire project on operations like "Highlight Symbol" or "Find Unused Declarations" (which run automatically when the user opens a file or moves the cursor). as opposed to operations like "Find All References" (which a user explicitly triggers). -Project checking can cause long and contention on the FSharpChecker operations queue. +Project checking can cause long and contention on the FSharpChecker operations queue. You *must* +cancel such operations if the results will be out-of-date, in order for your editing tools to be performant. -Requests to FCS can be cancelled by cancelling the async operation. (Some requests also +Requests can be cancelled via the cancellation token of the async operation. (Some requests also include additional callbacks which can be used to indicate a cancellation condition). -This cancellation will be effective if the cancellation is performed before the operation -is executed in the operations queue. +If the operation has not yet started it will remain in the queue and be discarded when it reaches the front. + +The long term intent of FCS is to eventually remove the reactor thread and the operations queue. However the queue +has several operational impacts we need to be mindful of + +1. It acts as a brake on the overall resource usage (if 1000 requests get made from FSharp.Editor they are serviced one at a time, and the work is not generally repeated as it get cached). + +2. It potentially acts as a data-lock on the project builder compilation state. + +3. It runs the low-priority project build. Summary ------- diff --git a/docs/fcs/symbols.fsx b/docs/fcs/symbols.fsx index 16607beb122..c38e23b9943 100644 --- a/docs/fcs/symbols.fsx +++ b/docs/fcs/symbols.fsx @@ -18,7 +18,8 @@ of `FSharpChecker`: open System open System.IO -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Symbols open FSharp.Compiler.Text // Create an interactive checker instance diff --git a/docs/fcs/tokenizer.fsx b/docs/fcs/tokenizer.fsx index 7994379d6f7..ba584446170 100644 --- a/docs/fcs/tokenizer.fsx +++ b/docs/fcs/tokenizer.fsx @@ -17,10 +17,10 @@ Creating the tokenizer --------------------- To use the tokenizer, reference `FSharp.Compiler.Service.dll` and open the -`SourceCodeServices` namespace: +`FSharp.Compiler.Tokenization` namespace: *) #r "FSharp.Compiler.Service.dll" -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Tokenization (** Now you can create an instance of `FSharpSourceTokenizer`. The class takes two arguments - the first is the list of defined symbols and the second is the diff --git a/docs/fcs/typedtree.fsx b/docs/fcs/typedtree.fsx index f5fbf1d7ab9..ad392d38776 100644 --- a/docs/fcs/typedtree.fsx +++ b/docs/fcs/typedtree.fsx @@ -20,12 +20,14 @@ Getting checked expressions To access the type-checked, resolved expressions, you need to create an instance of `InteractiveChecker`. To use the interactive checker, reference `FSharp.Compiler.Service.dll` and open the -`SourceCodeServices` namespace: +relevant namespaces: *) #r "FSharp.Compiler.Service.dll" open System open System.IO -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Symbols open FSharp.Compiler.Text (** @@ -75,8 +77,7 @@ type MyClass() = let checkProjectResults = parseAndCheckSingleFile(input2) -checkProjectResults.Errors // should be empty - +checkProjectResults.Diagnostics // should be empty (** @@ -170,93 +171,93 @@ Here is a generic expression visitor: let rec visitExpr f (e:FSharpExpr) = f e match e with - | BasicPatterns.AddressOf(lvalueExpr) -> + | FSharpExprPatterns.AddressOf(lvalueExpr) -> visitExpr f lvalueExpr - | BasicPatterns.AddressSet(lvalueExpr, rvalueExpr) -> + | FSharpExprPatterns.AddressSet(lvalueExpr, rvalueExpr) -> visitExpr f lvalueExpr; visitExpr f rvalueExpr - | BasicPatterns.Application(funcExpr, typeArgs, argExprs) -> + | FSharpExprPatterns.Application(funcExpr, typeArgs, argExprs) -> visitExpr f funcExpr; visitExprs f argExprs - | BasicPatterns.Call(objExprOpt, memberOrFunc, typeArgs1, typeArgs2, argExprs) -> + | FSharpExprPatterns.Call(objExprOpt, memberOrFunc, typeArgs1, typeArgs2, argExprs) -> visitObjArg f objExprOpt; visitExprs f argExprs - | BasicPatterns.Coerce(targetType, inpExpr) -> + | FSharpExprPatterns.Coerce(targetType, inpExpr) -> visitExpr f inpExpr - | BasicPatterns.FastIntegerForLoop(startExpr, limitExpr, consumeExpr, isUp) -> + | FSharpExprPatterns.FastIntegerForLoop(startExpr, limitExpr, consumeExpr, isUp) -> visitExpr f startExpr; visitExpr f limitExpr; visitExpr f consumeExpr - | BasicPatterns.ILAsm(asmCode, typeArgs, argExprs) -> + | FSharpExprPatterns.ILAsm(asmCode, typeArgs, argExprs) -> visitExprs f argExprs - | BasicPatterns.ILFieldGet (objExprOpt, fieldType, fieldName) -> + | FSharpExprPatterns.ILFieldGet (objExprOpt, fieldType, fieldName) -> visitObjArg f objExprOpt - | BasicPatterns.ILFieldSet (objExprOpt, fieldType, fieldName, valueExpr) -> + | FSharpExprPatterns.ILFieldSet (objExprOpt, fieldType, fieldName, valueExpr) -> visitObjArg f objExprOpt - | BasicPatterns.IfThenElse (guardExpr, thenExpr, elseExpr) -> + | FSharpExprPatterns.IfThenElse (guardExpr, thenExpr, elseExpr) -> visitExpr f guardExpr; visitExpr f thenExpr; visitExpr f elseExpr - | BasicPatterns.Lambda(lambdaVar, bodyExpr) -> + | FSharpExprPatterns.Lambda(lambdaVar, bodyExpr) -> visitExpr f bodyExpr - | BasicPatterns.Let((bindingVar, bindingExpr), bodyExpr) -> + | FSharpExprPatterns.Let((bindingVar, bindingExpr), bodyExpr) -> visitExpr f bindingExpr; visitExpr f bodyExpr - | BasicPatterns.LetRec(recursiveBindings, bodyExpr) -> + | FSharpExprPatterns.LetRec(recursiveBindings, bodyExpr) -> List.iter (snd >> visitExpr f) recursiveBindings; visitExpr f bodyExpr - | BasicPatterns.NewArray(arrayType, argExprs) -> + | FSharpExprPatterns.NewArray(arrayType, argExprs) -> visitExprs f argExprs - | BasicPatterns.NewDelegate(delegateType, delegateBodyExpr) -> + | FSharpExprPatterns.NewDelegate(delegateType, delegateBodyExpr) -> visitExpr f delegateBodyExpr - | BasicPatterns.NewObject(objType, typeArgs, argExprs) -> + | FSharpExprPatterns.NewObject(objType, typeArgs, argExprs) -> visitExprs f argExprs - | BasicPatterns.NewRecord(recordType, argExprs) -> + | FSharpExprPatterns.NewRecord(recordType, argExprs) -> visitExprs f argExprs - | BasicPatterns.NewAnonRecord(recordType, argExprs) -> + | FSharpExprPatterns.NewAnonRecord(recordType, argExprs) -> visitExprs f argExprs - | BasicPatterns.NewTuple(tupleType, argExprs) -> + | FSharpExprPatterns.NewTuple(tupleType, argExprs) -> visitExprs f argExprs - | BasicPatterns.NewUnionCase(unionType, unionCase, argExprs) -> + | FSharpExprPatterns.NewUnionCase(unionType, unionCase, argExprs) -> visitExprs f argExprs - | BasicPatterns.Quote(quotedExpr) -> + | FSharpExprPatterns.Quote(quotedExpr) -> visitExpr f quotedExpr - | BasicPatterns.FSharpFieldGet(objExprOpt, recordOrClassType, fieldInfo) -> + | FSharpExprPatterns.FSharpFieldGet(objExprOpt, recordOrClassType, fieldInfo) -> visitObjArg f objExprOpt - | BasicPatterns.AnonRecordGet(objExpr, recordOrClassType, fieldInfo) -> + | FSharpExprPatterns.AnonRecordGet(objExpr, recordOrClassType, fieldInfo) -> visitExpr f objExpr - | BasicPatterns.FSharpFieldSet(objExprOpt, recordOrClassType, fieldInfo, argExpr) -> + | FSharpExprPatterns.FSharpFieldSet(objExprOpt, recordOrClassType, fieldInfo, argExpr) -> visitObjArg f objExprOpt; visitExpr f argExpr - | BasicPatterns.Sequential(firstExpr, secondExpr) -> + | FSharpExprPatterns.Sequential(firstExpr, secondExpr) -> visitExpr f firstExpr; visitExpr f secondExpr - | BasicPatterns.TryFinally(bodyExpr, finalizeExpr) -> + | FSharpExprPatterns.TryFinally(bodyExpr, finalizeExpr) -> visitExpr f bodyExpr; visitExpr f finalizeExpr - | BasicPatterns.TryWith(bodyExpr, _, _, catchVar, catchExpr) -> + | FSharpExprPatterns.TryWith(bodyExpr, _, _, catchVar, catchExpr) -> visitExpr f bodyExpr; visitExpr f catchExpr - | BasicPatterns.TupleGet(tupleType, tupleElemIndex, tupleExpr) -> + | FSharpExprPatterns.TupleGet(tupleType, tupleElemIndex, tupleExpr) -> visitExpr f tupleExpr - | BasicPatterns.DecisionTree(decisionExpr, decisionTargets) -> + | FSharpExprPatterns.DecisionTree(decisionExpr, decisionTargets) -> visitExpr f decisionExpr; List.iter (snd >> visitExpr f) decisionTargets - | BasicPatterns.DecisionTreeSuccess (decisionTargetIdx, decisionTargetExprs) -> + | FSharpExprPatterns.DecisionTreeSuccess (decisionTargetIdx, decisionTargetExprs) -> visitExprs f decisionTargetExprs - | BasicPatterns.TypeLambda(genericParam, bodyExpr) -> + | FSharpExprPatterns.TypeLambda(genericParam, bodyExpr) -> visitExpr f bodyExpr - | BasicPatterns.TypeTest(ty, inpExpr) -> + | FSharpExprPatterns.TypeTest(ty, inpExpr) -> visitExpr f inpExpr - | BasicPatterns.UnionCaseSet(unionExpr, unionType, unionCase, unionCaseField, valueExpr) -> + | FSharpExprPatterns.UnionCaseSet(unionExpr, unionType, unionCase, unionCaseField, valueExpr) -> visitExpr f unionExpr; visitExpr f valueExpr - | BasicPatterns.UnionCaseGet(unionExpr, unionType, unionCase, unionCaseField) -> + | FSharpExprPatterns.UnionCaseGet(unionExpr, unionType, unionCase, unionCaseField) -> visitExpr f unionExpr - | BasicPatterns.UnionCaseTest(unionExpr, unionType, unionCase) -> + | FSharpExprPatterns.UnionCaseTest(unionExpr, unionType, unionCase) -> visitExpr f unionExpr - | BasicPatterns.UnionCaseTag(unionExpr, unionType) -> + | FSharpExprPatterns.UnionCaseTag(unionExpr, unionType) -> visitExpr f unionExpr - | BasicPatterns.ObjectExpr(objType, baseCallExpr, overrides, interfaceImplementations) -> + | FSharpExprPatterns.ObjectExpr(objType, baseCallExpr, overrides, interfaceImplementations) -> visitExpr f baseCallExpr List.iter (visitObjMember f) overrides List.iter (snd >> List.iter (visitObjMember f)) interfaceImplementations - | BasicPatterns.TraitCall(sourceTypes, traitName, typeArgs, typeInstantiation, argTypes, argExprs) -> + | FSharpExprPatterns.TraitCall(sourceTypes, traitName, typeArgs, typeInstantiation, argTypes, argExprs) -> visitExprs f argExprs - | BasicPatterns.ValueSet(valToSet, valueExpr) -> + | FSharpExprPatterns.ValueSet(valToSet, valueExpr) -> visitExpr f valueExpr - | BasicPatterns.WhileLoop(guardExpr, bodyExpr) -> + | FSharpExprPatterns.WhileLoop(guardExpr, bodyExpr) -> visitExpr f guardExpr; visitExpr f bodyExpr - | BasicPatterns.BaseValue baseType -> () - | BasicPatterns.DefaultValue defaultType -> () - | BasicPatterns.ThisValue thisType -> () - | BasicPatterns.Const(constValueObj, constType) -> () - | BasicPatterns.Value(valueToGet) -> () + | FSharpExprPatterns.BaseValue baseType -> () + | FSharpExprPatterns.DefaultValue defaultType -> () + | FSharpExprPatterns.ThisValue thisType -> () + | FSharpExprPatterns.Const(constValueObj, constType) -> () + | FSharpExprPatterns.Value(valueToGet) -> () | _ -> failwith (sprintf "unrecognized %+A" e) and visitExprs f exprs = diff --git a/docs/fcs/untypedtree.fsx b/docs/fcs/untypedtree.fsx index 61e97709836..4dd5c369a57 100644 --- a/docs/fcs/untypedtree.fsx +++ b/docs/fcs/untypedtree.fsx @@ -30,7 +30,7 @@ To use the interactive checker, reference `FSharp.Compiler.Service.dll` and open *) #r "FSharp.Compiler.Service.dll" open System -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis open FSharp.Compiler.Text (** @@ -84,7 +84,7 @@ code](https://github.com/fsharp/fsharp/blob/master/src/fsharp/ast.fs#L464). The relevant parts are in the following namespace: *) -open FSharp.Compiler.Ast +open FSharp.Compiler.Syntax (** When processing the AST, you will typically write a number of mutually recursive functions @@ -126,7 +126,8 @@ options). In the following, we only show how to handle `if .. then ..` and `let /// Walk over an expression - if expression contains two or three /// sub-expressions (two if the 'else' branch is missing), let expression /// contains pattern and two sub-expressions -let rec visitExpression = function +let rec visitExpression e = + match e with | SynExpr.IfThenElse(cond, trueBranch, falseBranchOpt, _, _, _, _) -> // Visit all sub-expressions printfn "Conditional:" @@ -139,8 +140,8 @@ let rec visitExpression = function // for 'let .. = .. and .. = .. in ...' printfn "LetOrUse with the following bindings:" for binding in bindings do - let (Binding(access, kind, inlin, mutabl, attrs, xmlDoc, - data, pat, retInfo, init, m, sp)) = binding + let (SynBinding(access, kind, inlin, mutabl, attrs, xmlDoc, + data, pat, retInfo, init, m, sp)) = binding visitPattern pat visitExpression init // Visit the body expression @@ -170,8 +171,8 @@ let visitDeclarations decls = // Let binding as a declaration is similar to let binding // as an expression (in visitExpression), but has no body for binding in bindings do - let (Binding(access, kind, inlin, mutabl, attrs, xmlDoc, - data, pat, retInfo, body, m, sp)) = binding + let (SynBinding(access, kind, inlin, mutabl, attrs, xmlDoc, + data, pat, retInfo, body, m, sp)) = binding visitPattern pat visitExpression body | _ -> printfn " - not supported declaration: %A" declaration diff --git a/docs/fsharp-core-notes.md b/docs/fsharp-core-notes.md index e98354bd181..1b0b1f1c5ee 100644 --- a/docs/fsharp-core-notes.md +++ b/docs/fsharp-core-notes.md @@ -1,126 +1,120 @@ ---- -layout: default -title: Notes on FSharp.Core -subtitle: This technical guide discusses the FSharp.Core library. ---- - # Notes and Guidance on FSharp.Core -{:.no_toc} -This technical guide discusses the FSharp.Core library. Please help improve this guide by editing it and submitting a pull-request. +This technical guide discusses the FSharp.Core library. + +Reference documentation for FSharp.Core can be found here: https://fsharp.github.io/fsharp-core-docs/ Much of the guidance below applies to any .NET library respecting binary compatibility. -### FSharp.Core is binary compatible +## FSharp.Core is binary compatible -FSharp.Core is binary compatible across versions of the F# language. For example, FSharp.Core `5.0.0.0` (F# 5.0) is binary compatible with -`4.7.0.0` (F# 4.7), `4.6.0.0` (F# 3.6), `4.4.0.0` (F# 4.0) , `4.4.1.0` (F# 4.1), , `4.4.3.0` (F# 4.1+) and so on. +FSharp.Core is binary compatible across versions of the F# language. For example, this means you can create a newer project with a newer FSharp.Core in an older codebase and things should generally "just work". -Likewise, FSharp.Core is binary compatible from "netstandard" profiles to actual runtime implementations. -For example, FSharp.Core for `netstandard2.0` is binary compatible with the runtime implementation assembly `4.7.0.0` and so on. +**Binary compatibility means that a component built for X can bind to Y at runtime. It doesn't mean that Y behaves 100% the same as X, though.** For example, an older compiler that doesn't know how to understand `inref<'T>` referencing a newer FSharp.Core that has `inref<'T>` defined may not behave correctly if `inref<'T>` is used in source. -Binary compatibility means that a component built for X can instead bind to Y at runtime. -It doesn't mean that Y behaves 100% the same as X (some bug fixes may have been made, and Y may have more functionality than X). +## FSharp.Core and F# scripts -### Application v. Library v. Script -{:.no_toc} +F# scripts, executed by F# interactive, execute against the FSharp.Core deployed with the .NET SDK you are using. If you're expecting to use a more modern library feature and find that it's missing, it's likely because you have an older .NET SDK and thus an older F# Interactive. Upgrade your .NET SDK. -Each project is either an *application* or a *library*. +## Guidance for package authors -* Examples of application are `.exe` project or a `.dll` project that is a test project, addin, website, or an app. +If you are authoring a NuGet package for consumption in the F# and .NET ecosystem, you already have to make a decision about functionality vs. reach by deciding what target framework(s) you support. -* Libraries are just ordinary `.dll` components (excluding those above which are applications). +As an F# package author, you also need to make this decision with respect to FSharp.Core: -* Scripts are not projects, just `.fsx` files, possibly referring to other files using `#load` and Libraries using `#r` +* Targeting an earlier version of FSharp.Core increases your reach because older codebases can use it without issue +* Targeting a newer version of FSharp.Core lets you use and extend newer features -### Do *not* bundle FSharp.Core with a library +This decision is critical, because it can have a network effect. If you choose a higher FSharp.Core version, then that also becomes a dependency for any other package that may depend on your package. -Do _not_ include a copy of FSharp.Core with your library or package. If you do, you will create havoc for users of -your library. +### Package authors should pin their FSharp.Core reference -The decision about which `FSharp.Core` a library binds to is up to the application hosting of the library. -The library and/or library package can place constraints on this, but it doesn't decide it. +The default templates for F# projects carry an implicit reference to FSharp.Core. This is ideal for application developers, since applications almost always want to be referencing the highest FSharp.Core available to them. As you upgrade your .NET SDK, the FSharp.Core package referenced implicitly will also be upgraded over time, since FSharp.Core is also distributed with the .NET SDK. -Especially, do _not_ include FSharp.Core in the ``lib`` folder of a NuGet package. +However, as a package author this means that unless you reference FSharp.Core explicitly, you will default to the latest possible version and thus eliminate any hope of reaching older projects in older environments. -### Always deploy FSharp.Core as part of a compiled application +### How to explicitly reference FSharp.Core -For applications, FSharp.Core is normally part of the application itself (so-called "xcopy deploy" of FSharp.Core). +It's a simple gesture in your project file that pins to FSharp.Core 4.7.2: -For modern templates, this is the default. For older templates, you may need to use ``true`` in your project file. In Visual Studio this is equivalent to setting the `CopyLocal` property to `true` properties for the `FSharp.Core` reference. +```xml + + + +``` -FSharp.Core.dll will normally appear in the `bin` output folder for your application. For example: +Or if you're using Paket: ``` - Directory of ...\ConsoleApplication3\bin\Debug\netcoreapp3.1 - - 18/04/2020 13:20 5,632 ConsoleApplication3.exe - 14/10/2020 12:12 1,400,472 FSharp.Core.dll +nuget FSharp.Core >= 4.7.2 ``` -### Always reference FSharp.Core via the NuGet package. +And that's it! -FSharp.Core is now always referenced via [the NuGet package](http://www.nuget.org/packages/FSharp.Core). +### Compatibility table -### Make your FSharp.Core references explicit +The following table can help you decide the minimum language/package version you want to support: -Templates for F# libraries use an **implicit** FSharp.Core package reference where the .NET SDK chooses one. Consider -using an **explicit** reference, especially when creating libraries. +|Minimum F# language version|Minimum FSharp.Core package version| +|------------------------------|------------------------------| +|F# 4.1|4.3.4| +|F# 4.5|4.5.2| +|F# 4.6|4.6.2| +|F# 4.7|4.7.2| +|F# 5.0|5.0.0| -To select a particular FSharp.Core use `Update`: +If you want to be compatible with much older projects using an F# 4.0 compiler or earlier, you can still do that but it's not recommended. People using those codebases should upgrade instead. - +### Do *not* bundle FSharp.Core directly with a library -In C# projects use: +Do _not_ include a copy of FSharp.Core with your library or package, such in the `lib` folder of a package. If you do this, you will create havoc for users of your library. - +The decision about which `FSharp.Core` a library binds to is up to the application hosting of the library. -If you make your FSharp.Core dependency explicit, you will have to explicitly upgrade your FSharp.Core reference in order to use -new F# language or library features should those features depend on a particular minimal FSharp.Core version. +## Guidance for everyone else -### Libraries should target lower versions of FSharp.Core +If you're not authoring packages for distribution, you have a lot less to worry about. -F# ecosystem libraries should generally target the *earliest, most portable* profile of FSharp.Core feasible, within reason. +If you are distributing library code across a private organization as if it were a NuGet package, please see the above guidance, as it likely still applies. Otherwise, the below guidance applies. -If your library is part of an ecosystem, it can be helpful to target the _earliest, most widespread language version_ -and the _earliest_ and _most supported_ profiles of the .NET Framework feasible. +### Application authors don't have to explicitly reference FSharp.Core -The version you choose should be based on the minimum F# language version you want to support. The minimum FSharp.Core version for each language version is listed below: +In general, applications can always just use the latest FSharp.Core bundled in the SDK they are built with. -|Minimum F# language version|Minimum FSharp.Core version| -|------------------------------|------------------------------| -|F# 4.1|4.3.4| -|F# 4.5|4.5.2| -|F# 4.6|4.6.2| -|F# 4.7|4.7.2| -|F# 5.0|5.0.0| +### C# projects referencing F# projects may need to pin FSharp.Core + +You can reference an F# project just fine without needing to be explicit about an FSharp.Core reference when using C# projects based on the .NET SDK. References flow transitively for SDK-style projects, so even if you need to use types directly from FSharp.Core (which you probably shouldn't do anyways) it will pick up the right types from the right assembly. -A good choice for libraries is to target `netstandard2.0` and FSharp.Core 4.7.2. +If you do have an explicit FSharp.Core reference in your C# project that you **need**, you should pin your FSharp.Core reference across your entire codebase. Being in a mixed pinned/non-pinned world is difficult to keep straight over a long period of time. - +## Guidance for older projects, compilers, and tools -For "libraries" that are effectively part of an application, you can just target -the latest language version and the framework you're using in your application. +Modern .NET development, including F#, uses SDK-style projects. You can read about that here: https://docs.microsoft.com/dotnet/core/project-sdk/overview -### Applications should target higher versions of FSharp.Core +If you are not using SDK-style projects F# projects and/or have an older toolset, the following guidance applies. -F# applications should generally use the *highest* language version and the most *platform-specific* version of FSharp.Core. +### Consider upgrading -Generally, when writing an application, you want to use the highest version of FSharp.Core available for the platform -you are targeting. +Yes, really. The old project system that manages legacy projects is not that good, the compiler is older and unoptimized for supporting larger codebases, tooling is not as responsive, etc. You will really have a much better life if you upgrade. Try out the `try-convert` tool to do that: https://github.com/dotnet/try-convert -If your application in being developed by people using multiple versions of F# tooling (common -in open source working) you may need to target a lower version of the language and a correspondingly earlier version -of FSharp.Core. +If you cannot upgrade for some reason, the rest of the guidance applies. -### The FSharp.Core used by a script depends on the tool processing the script +### Always deploy FSharp.Core as part of a compiled application -If you run a script with `dotnet fsi` then the tool will decide which FSharp.Core is used, and which implementation assemblies are used. +For applications, FSharp.Core is normally part of the application itself (so-called "xcopy deploy" of FSharp.Core). -When editing a script, the editing tools will decide which FSharp.Core is referenced. +For older project files, you may need to use ``true`` in your project file. In Visual Studio this is equivalent to setting the `CopyLocal` property to `true` properties for the `FSharp.Core` reference. + +FSharp.Core.dll will normally appear in the `bin` output folder for your application. For example: + +``` + Directory of ...\ConsoleApplication3\bin\Debug\net5.0 + + 18/04/2020 13:20 5,632 ConsoleApplication3.exe + 14/10/2020 12:12 1,400,472 FSharp.Core.dll +``` ### FSharp.Core and static linking -{:.no_toc} The ILMerge tool and the F# compiler both allow static linking of assemblies including static linking of FSharp.Core. This can be useful to build a single standalone file for a tool. @@ -131,28 +125,6 @@ However, these options must be used with caution. Searching on stackoverflow reveals further guidance on this topic. -### FSharp.Core in components using FSharp.Compiler.Service -{:.no_toc} - -If your application of component uses FSharp.Compiler.Service, -see [this guide](http://fsharp.github.io/FSharp.Compiler.Service/corelib.html). This scenario is more complicated -because FSharp.Core is used both to run your script or application, and is referenced during compilation. - -Likewise, if you have a script or library using FSharp.Formatting, then beware that is using FSharp.Compiler.Service. -For scripts that is normally OK because they are processed using F# Interactive, and the default FSharp.Core is used. -If you have an application using FSharp.Formatting as a component then see the guide linked above. - -### FSharp.Core and new language features -{:.no_toc} - -New versions of FSharp.Core must generally be consumable by previous generations of F# compiler tooling. There is nothing stopping -older tooling from adding a reference to the new nuget package. - -This sometimes limits the new language features that can be used in FSharp.Core or requires careful coding in the serializing/deserializing of -F# metadata stored in the FSharp.Core.dll binary as resources. - ## Reference: FSharp.Core version and NuGet package numbers See [the F# version information RFC](https://github.com/fsharp/fslang-design/blob/master/tooling/FST-1004-versioning-plan.md). - - diff --git a/eng/Build.ps1 b/eng/Build.ps1 index 18987e6488c..5a6a1342f26 100644 --- a/eng/Build.ps1 +++ b/eng/Build.ps1 @@ -14,7 +14,7 @@ # it's fine to call `build.ps1 -build -testDesktop` followed by repeated calls to # `.\build.ps1 -testDesktop`. -[CmdletBinding(PositionalBinding=$false)] +[CmdletBinding(PositionalBinding = $false)] param ( [string][Alias('c')]$configuration = "Debug", [string][Alias('v')]$verbosity = "m", @@ -61,7 +61,7 @@ param ( [switch]$noVisualStudio, [switch]$sourceBuild, - [parameter(ValueFromRemainingArguments=$true)][string[]]$properties) + [parameter(ValueFromRemainingArguments = $true)][string[]]$properties) Set-StrictMode -version 2.0 $ErrorActionPreference = "Stop" @@ -120,8 +120,8 @@ function Print-Usage() { # specified. function Process-Arguments() { if ($help -or (($properties -ne $null) -and ($properties.Contains("/help") -or $properties.Contains("/?")))) { - Print-Usage - exit 0 + Print-Usage + exit 0 } $script:nodeReuse = $False; @@ -177,34 +177,32 @@ function Process-Arguments() { function Update-Arguments() { if ($script:noVisualStudio) { - $script:bootstrapTfm = "netcoreapp3.1" + $script:bootstrapTfm = "net5.0" $script:msbuildEngine = "dotnet" } - if ($bootstrapTfm -eq "netcoreapp3.1") { + if ($bootstrapTfm -eq "net5.0") { if (-Not (Test-Path "$ArtifactsDir\Bootstrap\fsc\fsc.runtimeconfig.json")) { $script:bootstrap = $True } - } else { + } + else { if (-Not (Test-Path "$ArtifactsDir\Bootstrap\fsc\fsc.exe") -or (Test-Path "$ArtifactsDir\Bootstrap\fsc\fsc.runtimeconfig.json")) { $script:bootstrap = $True } } } -function BuildSolution() { - # VisualFSharp.sln can't be built with dotnet due to WPF, WinForms and VSIX build task dependencies - $solution = "VisualFSharp.sln" - - Write-Host "$($solution):" +function BuildSolution([string] $solutionName) { + Write-Host "${solutionName}:" $bl = if ($binaryLog) { "/bl:" + (Join-Path $LogDir "Build.binlog") } else { "" } - $projects = Join-Path $RepoRoot $solution + $projects = Join-Path $RepoRoot $solutionName $officialBuildId = if ($official) { $env:BUILD_BUILDNUMBER } else { "" } $toolsetBuildProj = InitializeToolset $quietRestore = !$ci - $testTargetFrameworks = if ($testCoreClr) { "netcoreapp3.1" } else { "" } + $testTargetFrameworks = if ($testCoreClr) { "net5.0" } else { "" } # Do not set the property to true explicitly, since that would override value projects might set. $suppressExtensionDeployment = if (!$deployExtensions) { "/p:DeployExtension=false" } else { "" } @@ -274,6 +272,7 @@ function TestUsingMSBuild([string] $testProject, [string] $targetFramework, [str $testLogPath = "$ArtifactsDir\TestResults\$configuration\${projectName}_$targetFramework.xml" $testBinLogPath = "$LogDir\${projectName}_$targetFramework.binlog" $args = "test $testProject -c $configuration -f $targetFramework -v n --test-adapter-path $testadapterpath --logger ""nunit;LogFilePath=$testLogPath"" /bl:$testBinLogPath" + $args += " --blame --results-directory $ArtifactsDir\TestResults\$configuration" if (-not $noVisualStudio -or $norestore) { $args += " --no-restore" @@ -299,32 +298,6 @@ function TestUsingNUnit([string] $testProject, [string] $targetFramework, [strin TestUsingMsBuild -testProject $testProject -targetFramework $targetFramework -testadapterpath $testadapterpath -noTestFilter $false } -function BuildCompiler() { - if ($bootstrapTfm -eq "netcoreapp3.1") { - $dotnetPath = InitializeDotNetCli - $dotnetExe = Join-Path $dotnetPath "dotnet.exe" - $fscProject = "`"$RepoRoot\src\fsharp\fsc\fsc.fsproj`"" - $fsiProject = "`"$RepoRoot\src\fsharp\fsi\fsi.fsproj`"" - - $argNoRestore = if ($norestore) { " --no-restore" } else { "" } - $argNoIncremental = if ($rebuild) { " --no-incremental" } else { "" } - - if ($binaryLog) { - $logFilePath = Join-Path $LogDir "fscBootstrapLog.binlog" - $args += " /bl:$logFilePath" - } - $args = "build $fscProject -c $configuration -v $verbosity -f netcoreapp3.1" + $argNoRestore + $argNoIncremental - Exec-Console $dotnetExe $args - - if ($binaryLog) { - $logFilePath = Join-Path $LogDir "fsiBootstrapLog.binlog" - $args += " /bl:$logFilePath" - } - $args = "build $fsiProject -c $configuration -v $verbosity -f netcoreapp3.1" + $argNoRestore + $argNoIncremental - Exec-Console $dotnetExe $args - } -} - function Prepare-TempDir() { Copy-Item (Join-Path $RepoRoot "tests\Resources\Directory.Build.props") $TempDir Copy-Item (Join-Path $RepoRoot "tests\Resources\Directory.Build.targets") $TempDir @@ -352,8 +325,7 @@ function TryDownloadDotnetFrameworkSdk() { # If we are not running as admin user, don't bother grabbing ndp sdk -- since we don't need sn.exe $isAdmin = Test-IsAdmin Write-Host "TryDownloadDotnetFrameworkSdk -- Test-IsAdmin = '$isAdmin'" - if ($isAdmin -eq $true) - { + if ($isAdmin -eq $true) { # Get program files(x86) location if (${env:ProgramFiles(x86)} -eq $null) { $programFiles = $env:ProgramFiles @@ -405,7 +377,7 @@ function TryDownloadDotnetFrameworkSdk() { $windowsSDK_ExecutablePath_x86 = $newWindowsSDK_ExecutablePath_x86 # x86 environment variable Write-Host "set WindowsSDK_ExecutablePath_x86=$WindowsSDK_ExecutablePath_x86" - [System.Environment]::SetEnvironmentVariable("WindowsSDK_ExecutablePath_x86","$newWindowsSDK_ExecutablePath_x86",[System.EnvironmentVariableTarget]::Machine) + [System.Environment]::SetEnvironmentVariable("WindowsSDK_ExecutablePath_x86", "$newWindowsSDK_ExecutablePath_x86", [System.EnvironmentVariableTarget]::Machine) $env:WindowsSDK_ExecutablePath_x86 = $newWindowsSDK_ExecutablePath_x86 } } @@ -417,7 +389,7 @@ function TryDownloadDotnetFrameworkSdk() { $windowsSDK_ExecutablePath_x64 = $newWindowsSDK_ExecutablePath_x64 # x64 environment variable Write-Host "set WindowsSDK_ExecutablePath_x64=$WindowsSDK_ExecutablePath_x64" - [System.Environment]::SetEnvironmentVariable("WindowsSDK_ExecutablePath_x64","$newWindowsSDK_ExecutablePath_x64",[System.EnvironmentVariableTarget]::Machine) + [System.Environment]::SetEnvironmentVariable("WindowsSDK_ExecutablePath_x64", "$newWindowsSDK_ExecutablePath_x64", [System.EnvironmentVariableTarget]::Machine) $env:WindowsSDK_ExecutablePath_x64 = $newWindowsSDK_ExecutablePath_x64 } } @@ -425,22 +397,22 @@ function TryDownloadDotnetFrameworkSdk() { } function EnablePreviewSdks() { - if (Test-Path variable:global:_MSBuildExe) { - return - } - $vsInfo = LocateVisualStudio - if ($vsInfo -eq $null) { - # Preview SDKs are allowed when no Visual Studio instance is installed - return - } - - $vsId = $vsInfo.instanceId - $vsMajorVersion = $vsInfo.installationVersion.Split('.')[0] - - $instanceDir = Join-Path ${env:USERPROFILE} "AppData\Local\Microsoft\VisualStudio\$vsMajorVersion.0_$vsId" - Create-Directory $instanceDir - $sdkFile = Join-Path $instanceDir "sdk.txt" - 'UsePreviews=True' | Set-Content $sdkFile + if (Test-Path variable:global:_MSBuildExe) { + return + } + $vsInfo = LocateVisualStudio + if ($vsInfo -eq $null) { + # Preview SDKs are allowed when no Visual Studio instance is installed + return + } + + $vsId = $vsInfo.instanceId + $vsMajorVersion = $vsInfo.installationVersion.Split('.')[0] + + $instanceDir = Join-Path ${env:USERPROFILE} "AppData\Local\Microsoft\VisualStudio\$vsMajorVersion.0_$vsId" + Create-Directory $instanceDir + $sdkFile = Join-Path $instanceDir "sdk.txt" + 'UsePreviews=True' | Set-Content $sdkFile } try { @@ -466,6 +438,11 @@ try { $buildTool = InitializeBuildTool $toolsetBuildProj = InitializeToolset TryDownloadDotnetFrameworkSdk + + $dotnetPath = InitializeDotNetCli + $env:DOTNET_ROOT = "$dotnetPath" + Get-Item -Path Env: + if ($bootstrap) { $script:BuildMessage = "Failure building bootstrap compiler" $bootstrapDir = Make-BootstrapBuild @@ -474,9 +451,10 @@ try { $script:BuildMessage = "Failure building product" if ($restore -or $build -or $rebuild -or $pack -or $sign -or $publish) { if ($noVisualStudio) { - BuildCompiler - } else { - BuildSolution + BuildSolution "FSharp.sln" + } + else { + BuildSolution "VisualFSharp.sln" } } @@ -487,11 +465,12 @@ try { $script:BuildCategory = "Test" $script:BuildMessage = "Failure running tests" $desktopTargetFramework = "net472" - $coreclrTargetFramework = "netcoreapp3.1" + $coreclrTargetFramework = "net5.0" if ($testDesktop) { TestUsingXUnit -testProject "$RepoRoot\tests\FSharp.Compiler.ComponentTests\FSharp.Compiler.ComponentTests.fsproj" -targetFramework $desktopTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.ComponentTests\" -noTestFilter $true TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.UnitTests\FSharp.Compiler.UnitTests.fsproj" -targetFramework $desktopTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.UnitTests\" + TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Service.Tests\FSharp.Compiler.Service.Tests.fsproj" -targetFramework $desktopTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.Service.Tests\" TestUsingXUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj" -targetFramework $desktopTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.Private.Scripting.UnitTests\" TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Build.UnitTests\FSharp.Build.UnitTests.fsproj" -targetFramework $desktopTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Build.UnitTests\" TestUsingXUnit -testProject "$RepoRoot\tests\FSharp.Core.UnitTests\FSharp.Core.UnitTests.fsproj" -targetFramework $desktopTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Core.UnitTests\" @@ -542,6 +521,7 @@ try { } if ($testCompilerService) { + TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Service.Tests\FSharp.Compiler.Service.Tests.fsproj" -targetFramework $desktopTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.Service.Tests\" TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Service.Tests\FSharp.Compiler.Service.Tests.fsproj" -targetFramework $coreclrTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.Service.Tests\" } @@ -550,7 +530,7 @@ try { TestUsingNUnit -testProject "$RepoRoot\tests\fsharp\FSharpSuite.Tests.fsproj" -targetFramework $coreclrTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharpSuite.Tests\" } ` - if ($testScripting) { + if ($testScripting) { TestUsingXUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj" -targetFramework $desktopTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.Private.Scripting.UnitTests\" TestUsingXUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj" -targetFramework $coreclrTargetFramework -testadapterpath "$ArtifactsDir\bin\FSharp.Compiler.Private.Scripting.UnitTests\" } @@ -579,11 +559,11 @@ try { $nupkgs = @(Get-ChildItem "$artifactsDir\packages\$configuration\Shipping\*.nupkg" -recurse) $nupkgs | Foreach { Exec-Console """$sourcelink"" test ""$_""" - if (-not $?) { $nupkgtestFailed = $true} + if (-not $?) { $nupkgtestFailed = $true } } } if ($nupkgtestFailed) { - throw "Error Verifying nupkgs have access to the source code" + throw "Error Verifying nupkgs have access to the source code" } ExitWithExitCode 0 diff --git a/eng/DumpPackageRoot/DumpPackageRoot.csproj b/eng/DumpPackageRoot/DumpPackageRoot.csproj index c3b2cedf8f6..0c94f0a999c 100644 --- a/eng/DumpPackageRoot/DumpPackageRoot.csproj +++ b/eng/DumpPackageRoot/DumpPackageRoot.csproj @@ -3,7 +3,7 @@ - netcoreapp3.1 + net5.0 diff --git a/eng/Signing.props b/eng/Signing.props index da17d32fa4d..222ad3dc47a 100644 --- a/eng/Signing.props +++ b/eng/Signing.props @@ -5,4 +5,7 @@ + + true + diff --git a/eng/SourceBuild.props b/eng/SourceBuild.props new file mode 100644 index 00000000000..22c929f286c --- /dev/null +++ b/eng/SourceBuild.props @@ -0,0 +1,47 @@ + + + + fsharp + true + + + + + + + + + + + + + + $(InnerBuildArgs) /p:Projects="$(InnerSourceBuildRepoRoot)\FSharp.sln" + + + + + + + + + + diff --git a/eng/SourceBuildPrebuiltBaseline.xml b/eng/SourceBuildPrebuiltBaseline.xml new file mode 100644 index 00000000000..c1b6dfbf053 --- /dev/null +++ b/eng/SourceBuildPrebuiltBaseline.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 1b319dbab93..f1c9aeec802 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,11 +1,17 @@ + + https://github.com/dotnet/xliff-tasks + 7e80445ee82adbf9a8e6ae601ac5e239d982afaa + + - + https://github.com/dotnet/arcade - 26b005488dd7ddf6356873cb01a7b763a82a9622 + 28a6403ee97077256fcdc60f599f0ad9e38e3cfa + diff --git a/eng/Versions.props b/eng/Versions.props index c80ce227ee3..21424130395 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -15,7 +15,7 @@ 5 0 - 0 + 3 0 $(FSMajorVersion).$(FSMinorVersion) @@ -27,18 +27,19 @@ $(FSMajorVersion).$(FSMinorVersion).$(FSBuildVersion) $(FSMajorVersion).$(FSMinorVersion).0.0 - 39 + 40 0 - 0 + 1 $(FSRevisionVersion) $(FCSMajorVersion).$(FCSMinorVersion).$(FCSBuildVersion) + $(FCSMajorVersion).$(FCSMinorVersion).$(FCSBuildVersion).$(FCSRevisionVersion) $(FCSMajorVersion)$(FCSMinorVersion)$(FCSBuildVersion) - 4.7.2 + 5.0.2 $(FSCorePackageVersion)-$(PreReleaseVersionLabel).* 11 - $(FSMinorVersion) + 3 $(FSBuildVersion) $(FSRevisionVersion) $(FSToolsMajorVersion).$(FSToolsMinorVersion).$(FSToolsBuildVersion) @@ -47,7 +48,7 @@ 16 - 8 + 10 $(VSMajorVersion).0 $(VSMajorVersion).$(VSMinorVersion).0 $(VSAssemblyVersionPrefix).0 @@ -69,10 +70,10 @@ $(RestoreSources); - https://api.nuget.org/v3/index.json; + https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json; https://pkgs.dev.azure.com/azure-public/vside/_packaging/vssdk/nuget/v3/index.json; https://pkgs.dev.azure.com/azure-public/vside/_packaging/vs-impl/nuget/v3/index.json; - + 4.5.1 5.0.0 @@ -102,7 +103,7 @@ 4.11.1 4.3.0 4.3.0 - 4.5.0 + 4.7.1 3.8.0-5.20570.14 $(RoslynVersion) @@ -114,7 +115,7 @@ 2.0.28 $(RoslynVersion) - 16.6 + 16.9 $(MicrosoftBuildOverallPackagesVersion) $(MicrosoftBuildOverallPackagesVersion) $(MicrosoftBuildOverallPackagesVersion) diff --git a/eng/build-utils.ps1 b/eng/build-utils.ps1 index c601896faf1..ffc4498fb85 100644 --- a/eng/build-utils.ps1 +++ b/eng/build-utils.ps1 @@ -244,16 +244,16 @@ function Make-BootstrapBuild() { $argNoRestore = if ($norestore) { " --no-restore" } else { "" } $argNoIncremental = if ($rebuild) { " --no-incremental" } else { "" } - $args = "build $buildToolsProject -c $bootstrapConfiguration -v $verbosity -f netcoreapp3.1" + $argNoRestore + $argNoIncremental + $args = "build $buildToolsProject -c $bootstrapConfiguration -v $verbosity" + $argNoRestore + $argNoIncremental if ($binaryLog) { $logFilePath = Join-Path $LogDir "toolsBootstrapLog.binlog" $args += " /bl:$logFilePath" } Exec-Console $dotnetExe $args - Copy-Item "$ArtifactsDir\bin\fslex\$bootstrapConfiguration\netcoreapp3.1" -Destination "$dir\fslex" -Force -Recurse - Copy-Item "$ArtifactsDir\bin\fsyacc\$bootstrapConfiguration\netcoreapp3.1" -Destination "$dir\fsyacc" -Force -Recurse - Copy-Item "$ArtifactsDir\bin\AssemblyCheck\$bootstrapConfiguration\netcoreapp3.1" -Destination "$dir\AssemblyCheck" -Force -Recurse + Copy-Item "$ArtifactsDir\bin\fslex\$bootstrapConfiguration\net5.0" -Destination "$dir\fslex" -Force -Recurse + Copy-Item "$ArtifactsDir\bin\fsyacc\$bootstrapConfiguration\net5.0" -Destination "$dir\fsyacc" -Force -Recurse + Copy-Item "$ArtifactsDir\bin\AssemblyCheck\$bootstrapConfiguration\net5.0" -Destination "$dir\AssemblyCheck" -Force -Recurse # prepare compiler $protoProject = "`"$RepoRoot\proto.proj`"" diff --git a/eng/build.sh b/eng/build.sh index e741ff85495..9a2aa0083f3 100755 --- a/eng/build.sh +++ b/eng/build.sh @@ -29,6 +29,7 @@ usage() echo " --ci Building in CI" echo " --docker Run in a docker container if applicable" echo " --skipAnalyzers Do not run analyzers during build operations" + echo " --skipBuild Do not run the build" echo " --prepareMachine Prepare machine for CI run, clean up processes after build" echo " --sourceBuild Simulate building for source-build" echo "" @@ -60,6 +61,7 @@ binary_log=false force_bootstrap=false ci=false skip_analyzers=false +skip_build=false prepare_machine=false source_build=false properties="" @@ -126,6 +128,9 @@ while [[ $# > 0 ]]; do --skipanalyzers) skip_analyzers=true ;; + --skipbuild) + skip_build=true + ;; --preparemachine) prepare_machine=true ;; @@ -193,7 +198,7 @@ function TestUsingNUnit() { projectname=$(basename -- "$testproject") projectname="${projectname%.*}" testlogpath="$artifacts_dir/TestResults/$configuration/${projectname}_$targetframework.xml" - args="test \"$testproject\" --no-restore --no-build -c $configuration -f $targetframework --test-adapter-path . --logger \"nunit;LogFilePath=$testlogpath\"$filterArgs" + args="test \"$testproject\" --no-restore --no-build -c $configuration -f $targetframework --test-adapter-path . --logger \"nunit;LogFilePath=$testlogpath\"$filterArgs --blame --results-directory $artifacts_dir/TestResults/$configuration" "$DOTNET_INSTALL_DIR/dotnet" $args || exit $? } @@ -247,8 +252,8 @@ function BuildSolution { /p:Configuration=$bootstrap_config mkdir -p "$bootstrap_dir" - cp -pr $artifacts_dir/bin/fslex/$bootstrap_config/netcoreapp3.1 $bootstrap_dir/fslex - cp -pr $artifacts_dir/bin/fsyacc/$bootstrap_config/netcoreapp3.1 $bootstrap_dir/fsyacc + cp -pr $artifacts_dir/bin/fslex/$bootstrap_config/net5.0 $bootstrap_dir/fslex + cp -pr $artifacts_dir/bin/fsyacc/$bootstrap_config/net5.0 $bootstrap_dir/fsyacc fi if [ ! -f "$bootstrap_dir/fsc.exe" ]; then BuildMessage="Error building bootstrap" @@ -257,28 +262,30 @@ function BuildSolution { /p:Configuration=$bootstrap_config \ - cp -pr $artifacts_dir/bin/fsc/$bootstrap_config/netcoreapp3.1 $bootstrap_dir/fsc + cp -pr $artifacts_dir/bin/fsc/$bootstrap_config/net5.0 $bootstrap_dir/fsc fi - # do real build - BuildMessage="Error building solution" - MSBuild $toolset_build_proj \ - $bl \ - /v:$verbosity \ - /p:Configuration=$configuration \ - /p:Projects="$projects" \ - /p:RepoRoot="$repo_root" \ - /p:Restore=$restore \ - /p:Build=$build \ - /p:Rebuild=$rebuild \ - /p:Pack=$pack \ - /p:Publish=$publish \ - /p:UseRoslynAnalyzers=$enable_analyzers \ - /p:ContinuousIntegrationBuild=$ci \ - /p:QuietRestore=$quiet_restore \ - /p:QuietRestoreBinaryLog="$binary_log" \ - /p:DotNetBuildFromSource=$source_build \ - $properties + if [[ "$skip_build" != true ]]; then + # do real build + BuildMessage="Error building solution" + MSBuild $toolset_build_proj \ + $bl \ + /v:$verbosity \ + /p:Configuration=$configuration \ + /p:Projects="$projects" \ + /p:RepoRoot="$repo_root" \ + /p:Restore=$restore \ + /p:Build=$build \ + /p:Rebuild=$rebuild \ + /p:Pack=$pack \ + /p:Publish=$publish \ + /p:UseRoslynAnalyzers=$enable_analyzers \ + /p:ContinuousIntegrationBuild=$ci \ + /p:QuietRestore=$quiet_restore \ + /p:QuietRestoreBinaryLog="$binary_log" \ + /p:ArcadeBuildFromSource=$source_build \ + $properties + fi } function TrapAndReportError { @@ -297,7 +304,7 @@ InitializeDotNetCli $restore BuildSolution if [[ "$test_core_clr" == true ]]; then - coreclrtestframework=netcoreapp3.1 + coreclrtestframework=net5.0 TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj" --targetframework $coreclrtestframework --notestfilter TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj" --targetframework $coreclrtestframework --notestfilter TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj" --targetframework $coreclrtestframework diff --git a/eng/common/build.ps1 b/eng/common/build.ps1 index 94a91c0817e..8943da242f6 100644 --- a/eng/common/build.ps1 +++ b/eng/common/build.ps1 @@ -25,6 +25,7 @@ Param( [switch] $prepareMachine, [string] $runtimeSourceFeed = '', [string] $runtimeSourceFeedKey = '', + [switch] $excludePrereleaseVS, [switch] $help, [Parameter(ValueFromRemainingArguments=$true)][String[]]$properties ) @@ -65,6 +66,7 @@ function Print-Usage() { Write-Host " -prepareMachine Prepare machine for CI run, clean up processes after build" Write-Host " -warnAsError Sets warnaserror msbuild parameter ('true' or 'false')" Write-Host " -msbuildEngine Msbuild engine to use to run build ('dotnet', 'vs', or unspecified)." + Write-Host " -excludePrereleaseVS Set to exclude build engines in prerelease versions of Visual Studio" Write-Host "" Write-Host "Command line arguments not listed above are passed thru to msbuild." diff --git a/eng/common/build.sh b/eng/common/build.sh index 252b63604e6..55b298f16cc 100755 --- a/eng/common/build.sh +++ b/eng/common/build.sh @@ -81,7 +81,7 @@ runtime_source_feed_key='' properties='' while [[ $# > 0 ]]; do - opt="$(echo "${1/#--/-}" | awk '{print tolower($0)}')" + opt="$(echo "${1/#--/-}" | tr "[:upper:]" "[:lower:]")" case "$opt" in -help|-h) usage diff --git a/eng/common/cross/arm64/tizen-fetch.sh b/eng/common/cross/arm64/tizen-fetch.sh index a48a6f51c49..16d1301f21e 100644 --- a/eng/common/cross/arm64/tizen-fetch.sh +++ b/eng/common/cross/arm64/tizen-fetch.sh @@ -157,7 +157,7 @@ fetch_tizen_pkgs() Inform "Initialize arm base" fetch_tizen_pkgs_init standard base Inform "fetch common packages" -fetch_tizen_pkgs aarch64 gcc glibc glibc-devel libicu libicu-devel libatomic linux-glibc-devel +fetch_tizen_pkgs aarch64 gcc glibc glibc-devel libicu libicu-devel libatomic linux-glibc-devel keyutils keyutils-devel libkeyutils Inform "fetch coreclr packages" fetch_tizen_pkgs aarch64 lldb lldb-devel libgcc libstdc++ libstdc++-devel libunwind libunwind-devel lttng-ust-devel lttng-ust userspace-rcu-devel userspace-rcu Inform "fetch corefx packages" diff --git a/eng/common/cross/armel/tizen-fetch.sh b/eng/common/cross/armel/tizen-fetch.sh index 2776cbba4e4..64f0187e5aa 100755 --- a/eng/common/cross/armel/tizen-fetch.sh +++ b/eng/common/cross/armel/tizen-fetch.sh @@ -157,7 +157,7 @@ fetch_tizen_pkgs() Inform "Initialize arm base" fetch_tizen_pkgs_init standard base Inform "fetch common packages" -fetch_tizen_pkgs armv7l gcc glibc glibc-devel libicu libicu-devel libatomic linux-glibc-devel +fetch_tizen_pkgs armv7l gcc gcc-devel-static glibc glibc-devel libicu libicu-devel libatomic linux-glibc-devel keyutils keyutils-devel libkeyutils Inform "fetch coreclr packages" fetch_tizen_pkgs armv7l lldb lldb-devel libgcc libstdc++ libstdc++-devel libunwind libunwind-devel lttng-ust-devel lttng-ust userspace-rcu-devel userspace-rcu Inform "fetch corefx packages" diff --git a/eng/common/cross/build-android-rootfs.sh b/eng/common/cross/build-android-rootfs.sh index e7f12edb565..42516bbeebc 100755 --- a/eng/common/cross/build-android-rootfs.sh +++ b/eng/common/cross/build-android-rootfs.sh @@ -27,7 +27,7 @@ __AndroidToolchain=aarch64-linux-android for i in "$@" do - lowerI="$(echo $i | awk '{print tolower($0)}')" + lowerI="$(echo $i | tr "[:upper:]" "[:lower:]")" case $lowerI in -?|-h|--help) usage diff --git a/eng/common/cross/build-rootfs.sh b/eng/common/cross/build-rootfs.sh index 6d59e181c8f..591d8666a84 100755 --- a/eng/common/cross/build-rootfs.sh +++ b/eng/common/cross/build-rootfs.sh @@ -6,7 +6,7 @@ usage() { echo "Usage: $0 [BuildArch] [CodeName] [lldbx.y] [--skipunmount] --rootfsdir ]" echo "BuildArch can be: arm(default), armel, arm64, x86" - echo "CodeName - optional, Code name for Linux, can be: trusty, xenial(default), zesty, bionic, alpine. If BuildArch is armel, LinuxCodeName is jessie(default) or tizen." + echo "CodeName - optional, Code name for Linux, can be: trusty, xenial(default), zesty, bionic, alpine, alpine3.9 or alpine3.13. If BuildArch is armel, LinuxCodeName is jessie(default) or tizen." echo " for FreeBSD can be: freebsd11 or freebsd12." echo " for illumos can be: illumos." echo "lldbx.y - optional, LLDB version, can be: lldb3.9(default), lldb4.0, lldb5.0, lldb6.0 no-lldb. Ignored for alpine and FReeBSD" @@ -74,6 +74,10 @@ __IllumosPackages+=" mit-krb5-1.16.2nb4" __IllumosPackages+=" openssl-1.1.1e" __IllumosPackages+=" zlib-1.2.11" +# ML.NET dependencies +__UbuntuPackages+=" libomp5" +__UbuntuPackages+=" libomp-dev" + __UseMirror=0 __UnprocessedBuildArgs= @@ -82,7 +86,7 @@ while :; do break fi - lowerI="$(echo $1 | awk '{print tolower($0)}')" + lowerI="$(echo $1 | tr "[:upper:]" "[:lower:]")" case $lowerI in -?|-h|--help) usage @@ -183,9 +187,20 @@ while :; do __UbuntuRepo= __Tizen=tizen ;; - alpine) + alpine|alpine3.9) __CodeName=alpine __UbuntuRepo= + __AlpineVersion=3.9 + ;; + alpine3.13) + __CodeName=alpine + __UbuntuRepo= + __AlpineVersion=3.13 + # Alpine 3.13 has all the packages we need in the 3.13 repository + __AlpinePackages+=$__AlpinePackagesEdgeCommunity + __AlpinePackagesEdgeCommunity= + __AlpinePackages+=$__AlpinePackagesEdgeMain + __AlpinePackagesEdgeMain= ;; freebsd11) __FreeBSDBase="11.3-RELEASE" @@ -243,7 +258,6 @@ __RootfsDir="$( cd "$__RootfsDir" && pwd )" if [[ "$__CodeName" == "alpine" ]]; then __ApkToolsVersion=2.9.1 - __AlpineVersion=3.9 __ApkToolsDir=$(mktemp -d) wget https://github.com/alpinelinux/apk-tools/releases/download/v$__ApkToolsVersion/apk-tools-$__ApkToolsVersion-x86_64-linux.tar.gz -P $__ApkToolsDir tar -xf $__ApkToolsDir/apk-tools-$__ApkToolsVersion-x86_64-linux.tar.gz -C $__ApkToolsDir @@ -256,15 +270,19 @@ if [[ "$__CodeName" == "alpine" ]]; then -U --allow-untrusted --root $__RootfsDir --arch $__AlpineArch --initdb \ add $__AlpinePackages - $__ApkToolsDir/apk-tools-$__ApkToolsVersion/apk \ - -X http://dl-cdn.alpinelinux.org/alpine/edge/main \ - -U --allow-untrusted --root $__RootfsDir --arch $__AlpineArch --initdb \ - add $__AlpinePackagesEdgeMain + if [[ -n "$__AlpinePackagesEdgeMain" ]]; then + $__ApkToolsDir/apk-tools-$__ApkToolsVersion/apk \ + -X http://dl-cdn.alpinelinux.org/alpine/edge/main \ + -U --allow-untrusted --root $__RootfsDir --arch $__AlpineArch --initdb \ + add $__AlpinePackagesEdgeMain + fi - $__ApkToolsDir/apk-tools-$__ApkToolsVersion/apk \ - -X http://dl-cdn.alpinelinux.org/alpine/edge/community \ - -U --allow-untrusted --root $__RootfsDir --arch $__AlpineArch --initdb \ - add $__AlpinePackagesEdgeCommunity + if [[ -n "$__AlpinePackagesEdgeCommunity" ]]; then + $__ApkToolsDir/apk-tools-$__ApkToolsVersion/apk \ + -X http://dl-cdn.alpinelinux.org/alpine/edge/community \ + -U --allow-untrusted --root $__RootfsDir --arch $__AlpineArch --initdb \ + add $__AlpinePackagesEdgeCommunity + fi rm -r $__ApkToolsDir elif [[ "$__CodeName" == "freebsd" ]]; then diff --git a/eng/common/darc-init.sh b/eng/common/darc-init.sh index d981d7bbf38..39abdbecdcf 100755 --- a/eng/common/darc-init.sh +++ b/eng/common/darc-init.sh @@ -6,7 +6,7 @@ versionEndpoint='https://maestro-prod.westus2.cloudapp.azure.com/api/assets/darc verbosity='minimal' while [[ $# > 0 ]]; do - opt="$(echo "$1" | awk '{print tolower($0)}')" + opt="$(echo "$1" | tr "[:upper:]" "[:lower:]")" case "$opt" in --darcversion) darcVersion=$2 diff --git a/eng/common/dotnet-install.sh b/eng/common/dotnet-install.sh index ead6a1d9a24..fdfeea66e7d 100755 --- a/eng/common/dotnet-install.sh +++ b/eng/common/dotnet-install.sh @@ -19,7 +19,7 @@ runtime='dotnet' runtimeSourceFeed='' runtimeSourceFeedKey='' while [[ $# > 0 ]]; do - opt="$(echo "$1" | awk '{print tolower($0)}')" + opt="$(echo "$1" | tr "[:upper:]" "[:lower:]")" case "$opt" in -version|-v) shift @@ -49,13 +49,8 @@ while [[ $# > 0 ]]; do shift done -# Use uname to determine what the CPU is. -cpuname=$(uname -p) -# Some Linux platforms report unknown for platform, but the arch for machine. -if [[ "$cpuname" == "unknown" ]]; then - cpuname=$(uname -m) -fi - +# Use uname to determine what the CPU is, see https://en.wikipedia.org/wiki/Uname#Examples +cpuname=$(uname -m) case $cpuname in aarch64) buildarch=arm64 @@ -75,7 +70,7 @@ case $cpuname in ;; esac -dotnetRoot="$repo_root/.dotnet" +dotnetRoot="${repo_root}.dotnet" if [[ $architecture != "" ]] && [[ $architecture != $buildarch ]]; then dotnetRoot="$dotnetRoot/$architecture" fi diff --git a/eng/common/generate-locproject.ps1 b/eng/common/generate-locproject.ps1 new file mode 100644 index 00000000000..25e97ac0077 --- /dev/null +++ b/eng/common/generate-locproject.ps1 @@ -0,0 +1,117 @@ +Param( + [Parameter(Mandatory=$true)][string] $SourcesDirectory, # Directory where source files live; if using a Localize directory it should live in here + [string] $LanguageSet = 'VS_Main_Languages', # Language set to be used in the LocProject.json + [switch] $UseCheckedInLocProjectJson, # When set, generates a LocProject.json and compares it to one that already exists in the repo; otherwise just generates one + [switch] $CreateNeutralXlfs # Creates neutral xlf files. Only set to false when running locally +) + +# Generates LocProject.json files for the OneLocBuild task. OneLocBuildTask is described here: +# https://ceapex.visualstudio.com/CEINTL/_wiki/wikis/CEINTL.wiki/107/Localization-with-OneLocBuild-Task + +Set-StrictMode -Version 2.0 +$ErrorActionPreference = "Stop" +. $PSScriptRoot\tools.ps1 + +Import-Module -Name (Join-Path $PSScriptRoot 'native\CommonLibrary.psm1') + +$exclusionsFilePath = "$SourcesDirectory\eng\Localize\LocExclusions.json" +$exclusions = @{ Exclusions = @() } +if (Test-Path -Path $exclusionsFilePath) +{ + $exclusions = Get-Content "$exclusionsFilePath" | ConvertFrom-Json +} + +Push-Location "$SourcesDirectory" # push location for Resolve-Path -Relative to work + +# Template files +$jsonFiles = @() +$jsonTemplateFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\.template\.config\\localize\\.+\.en\.json" } # .NET templating pattern +$jsonTemplateFiles | ForEach-Object { + $null = $_.Name -Match "(.+)\.[\w-]+\.json" # matches '[filename].[langcode].json + + $destinationFile = "$($_.Directory.FullName)\$($Matches.1).json" + $jsonFiles += Copy-Item "$($_.FullName)" -Destination $destinationFile -PassThru +} + +$jsonWinformsTemplateFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "en\\strings\.json" } # current winforms pattern + +$xlfFiles = @() + +$allXlfFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory\*\*.xlf" +$langXlfFiles = @() +if ($allXlfFiles) { + $null = $allXlfFiles[0].FullName -Match "\.([\w-]+)\.xlf" # matches '[langcode].xlf' + $firstLangCode = $Matches.1 + $langXlfFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory\*\*.$firstLangCode.xlf" +} +$langXlfFiles | ForEach-Object { + $null = $_.Name -Match "(.+)\.[\w-]+\.xlf" # matches '[filename].[langcode].xlf + + $destinationFile = "$($_.Directory.FullName)\$($Matches.1).xlf" + $xlfFiles += Copy-Item "$($_.FullName)" -Destination $destinationFile -PassThru +} + +$locFiles = $jsonFiles + $jsonWinformsTemplateFiles + $xlfFiles + +$locJson = @{ + Projects = @( + @{ + LanguageSet = $LanguageSet + LocItems = @( + $locFiles | ForEach-Object { + $outputPath = "$(($_.DirectoryName | Resolve-Path -Relative) + "\")" + $continue = $true + foreach ($exclusion in $exclusions.Exclusions) { + if ($outputPath.Contains($exclusion)) + { + $continue = $false + } + } + $sourceFile = ($_.FullName | Resolve-Path -Relative) + if (!$CreateNeutralXlfs -and $_.Extension -eq '.xlf') { + Remove-Item -Path $sourceFile + } + if ($continue) + { + if ($_.Directory.Name -eq 'en' -and $_.Extension -eq '.json') { + return @{ + SourceFile = $sourceFile + CopyOption = "LangIDOnPath" + OutputPath = "$($_.Directory.Parent.FullName | Resolve-Path -Relative)\" + } + } + else { + return @{ + SourceFile = $sourceFile + CopyOption = "LangIDOnName" + OutputPath = $outputPath + } + } + } + } + ) + } + ) +} + +$json = ConvertTo-Json $locJson -Depth 5 +Write-Host "LocProject.json generated:`n`n$json`n`n" +Pop-Location + +if (!$UseCheckedInLocProjectJson) { + New-Item "$SourcesDirectory\eng\Localize\LocProject.json" -Force # Need this to make sure the Localize directory is created + Set-Content "$SourcesDirectory\eng\Localize\LocProject.json" $json +} +else { + New-Item "$SourcesDirectory\eng\Localize\LocProject-generated.json" -Force # Need this to make sure the Localize directory is created + Set-Content "$SourcesDirectory\eng\Localize\LocProject-generated.json" $json + + if ((Get-FileHash "$SourcesDirectory\eng\Localize\LocProject-generated.json").Hash -ne (Get-FileHash "$SourcesDirectory\eng\Localize\LocProject.json").Hash) { + Write-PipelineTelemetryError -Category "OneLocBuild" -Message "Existing LocProject.json differs from generated LocProject.json. Download LocProject-generated.json and compare them." + + exit 1 + } + else { + Write-Host "Generated LocProject.json and current LocProject.json are identical." + } +} \ No newline at end of file diff --git a/eng/common/init-tools-native.sh b/eng/common/init-tools-native.sh index 29fc5db8ae0..5bd205b5da3 100755 --- a/eng/common/init-tools-native.sh +++ b/eng/common/init-tools-native.sh @@ -16,7 +16,7 @@ declare -A native_assets . $scriptroot/native/common-library.sh while (($# > 0)); do - lowerI="$(echo $1 | awk '{print tolower($0)}')" + lowerI="$(echo $1 | tr "[:upper:]" "[:lower:]")" case $lowerI in --baseuri) base_uri=$2 @@ -76,24 +76,89 @@ while (($# > 0)); do done function ReadGlobalJsonNativeTools { - # Get the native-tools section from the global.json. - local native_tools_section=$(cat $global_json_file | awk '/"native-tools"/,/}/') - # Only extract the contents of the object. - local native_tools_list=$(echo $native_tools_section | awk -F"[{}]" '{print $2}') - native_tools_list=${native_tools_list//[\" ]/} - native_tools_list=$( echo "$native_tools_list" | sed 's/\s//g' | sed 's/,/\n/g' ) - - local old_IFS=$IFS - while read -r line; do - # Lines are of the form: 'tool:version' - IFS=: - while read -r key value; do - native_assets[$key]=$value - done <<< "$line" - done <<< "$native_tools_list" - IFS=$old_IFS - - return 0; + # happy path: we have a proper JSON parsing tool `jq(1)` in PATH! + if command -v jq &> /dev/null; then + + # jq: read each key/value pair under "native-tools" entry and emit: + # KEY="" VALUE="" + # followed by a null byte. + # + # bash: read line with null byte delimeter and push to array (for later `eval`uation). + + while IFS= read -rd '' line; do + native_assets+=("$line") + done < <(jq -r '. | + select(has("native-tools")) | + ."native-tools" | + keys[] as $k | + @sh "KEY=\($k) VALUE=\(.[$k])\u0000"' "$global_json_file") + + return + fi + + # Warning: falling back to manually parsing JSON, which is not recommended. + + # Following routine matches the output and escaping logic of jq(1)'s @sh formatter used above. + # It has been tested with several weird strings with escaped characters in entries (key and value) + # and results were compared with the output of jq(1) in binary representation using xxd(1); + # just before the assignment to 'native_assets' array (above and below). + + # try to capture the section under "native-tools". + if [[ ! "$(cat "$global_json_file")" =~ \"native-tools\"[[:space:]\:\{]*([^\}]+) ]]; then + return + fi + + section="${BASH_REMATCH[1]}" + + parseStarted=0 + possibleEnd=0 + escaping=0 + escaped=0 + isKey=1 + + for (( i=0; i<${#section}; i++ )); do + char="${section:$i:1}" + if ! ((parseStarted)) && [[ "$char" =~ [[:space:],:] ]]; then continue; fi + + if ! ((escaping)) && [[ "$char" == "\\" ]]; then + escaping=1 + elif ((escaping)) && ! ((escaped)); then + escaped=1 + fi + + if ! ((parseStarted)) && [[ "$char" == "\"" ]]; then + parseStarted=1 + possibleEnd=0 + elif [[ "$char" == "'" ]]; then + token="$token'\\\''" + possibleEnd=0 + elif ((escaping)) || [[ "$char" != "\"" ]]; then + token="$token$char" + possibleEnd=1 + fi + + if ((possibleEnd)) && ! ((escaping)) && [[ "$char" == "\"" ]]; then + # Use printf to unescape token to match jq(1)'s @sh formatting rules. + # do not use 'token="$(printf "$token")"' syntax, as $() eats the trailing linefeed. + printf -v token "'$token'" + + if ((isKey)); then + KEY="$token" + isKey=0 + else + line="KEY=$KEY VALUE=$token" + native_assets+=("$line") + isKey=1 + fi + + # reset for next token + parseStarted=0 + token= + elif ((escaping)) && ((escaped)); then + escaping=0 + escaped=0 + fi + done } native_base_dir=$install_directory @@ -111,14 +176,14 @@ if [[ ${#native_assets[@]} -eq 0 ]]; then exit 0; else native_installer_dir="$scriptroot/native" - for tool in "${!native_assets[@]}" - do - tool_version=${native_assets[$tool]} - installer_path="$native_installer_dir/install-$tool.sh" + for index in "${!native_assets[@]}"; do + eval "${native_assets["$index"]}" + + installer_path="$native_installer_dir/install-$KEY.sh" installer_command="$installer_path" installer_command+=" --baseuri $base_uri" installer_command+=" --installpath $install_bin" - installer_command+=" --version $tool_version" + installer_command+=" --version $VALUE" echo $installer_command if [[ $force = true ]]; then diff --git a/eng/common/internal-feed-operations.ps1 b/eng/common/internal-feed-operations.ps1 index b8f6529fdc8..92b77347d99 100644 --- a/eng/common/internal-feed-operations.ps1 +++ b/eng/common/internal-feed-operations.ps1 @@ -45,11 +45,11 @@ function SetupCredProvider { # Then, we set the 'VSS_NUGET_EXTERNAL_FEED_ENDPOINTS' environment variable to restore from the stable # feeds successfully - $nugetConfigPath = "$RepoRoot\NuGet.config" + $nugetConfigPath = Join-Path $RepoRoot "NuGet.config" if (-Not (Test-Path -Path $nugetConfigPath)) { Write-PipelineTelemetryError -Category 'Build' -Message 'NuGet.config file not found in repo root!' - ExitWithExitCode 1 + ExitWithExitCode 1 } $endpoints = New-Object System.Collections.ArrayList @@ -63,8 +63,6 @@ function SetupCredProvider { } if (($endpoints | Measure-Object).Count -gt 0) { - # [SuppressMessage("Microsoft.Security", "CS002:SecretInNextLine", Justification="Endpoint code example with no real credentials.")] - # Create the JSON object. It should look like '{"endpointCredentials": [{"endpoint":"http://example.index.json", "username":"optional", "password":"accesstoken"}]}' $endpointCredentials = @{endpointCredentials=$endpoints} | ConvertTo-Json -Compress # Create the environment variables the AzDo way @@ -87,7 +85,7 @@ function SetupCredProvider { #Workaround for https://github.com/microsoft/msbuild/issues/4430 function InstallDotNetSdkAndRestoreArcade { - $dotnetTempDir = "$RepoRoot\dotnet" + $dotnetTempDir = Join-Path $RepoRoot "dotnet" $dotnetSdkVersion="2.1.507" # After experimentation we know this version works when restoring the SDK (compared to 3.0.*) $dotnet = "$dotnetTempDir\dotnet.exe" $restoreProjPath = "$PSScriptRoot\restore.proj" diff --git a/eng/common/internal-feed-operations.sh b/eng/common/internal-feed-operations.sh index 9ed225e7e55..9378223ba09 100755 --- a/eng/common/internal-feed-operations.sh +++ b/eng/common/internal-feed-operations.sh @@ -39,7 +39,7 @@ function SetupCredProvider { # Then, we set the 'VSS_NUGET_EXTERNAL_FEED_ENDPOINTS' environment variable to restore from the stable # feeds successfully - local nugetConfigPath="$repo_root/NuGet.config" + local nugetConfigPath="{$repo_root}NuGet.config" if [ ! "$nugetConfigPath" ]; then Write-PipelineTelemetryError -category 'Build' "NuGet.config file not found in repo's root!" @@ -62,8 +62,6 @@ function SetupCredProvider { endpoints+=']' if [ ${#endpoints} -gt 2 ]; then - # [SuppressMessage("Microsoft.Security", "CS002:SecretInNextLine", Justification="Endpoint code example with no real credentials.")] - # Create the JSON object. It should look like '{"endpointCredentials": [{"endpoint":"http://example.index.json", "username":"optional", "password":"accesstoken"}]}' local endpointCredentials="{\"endpointCredentials\": "$endpoints"}" echo "##vso[task.setvariable variable=VSS_NUGET_EXTERNAL_FEED_ENDPOINTS]$endpointCredentials" @@ -103,7 +101,7 @@ authToken='' repoName='' while [[ $# > 0 ]]; do - opt="$(echo "$1" | awk '{print tolower($0)}')" + opt="$(echo "$1" | tr "[:upper:]" "[:lower:]")" case "$opt" in --operation) operation=$2 diff --git a/eng/common/msbuild.ps1 b/eng/common/msbuild.ps1 index c6401230002..eea19cd8452 100644 --- a/eng/common/msbuild.ps1 +++ b/eng/common/msbuild.ps1 @@ -5,6 +5,7 @@ Param( [bool] $nodeReuse = $true, [switch] $ci, [switch] $prepareMachine, + [switch] $excludePrereleaseVS, [Parameter(ValueFromRemainingArguments=$true)][String[]]$extraArgs ) diff --git a/eng/common/msbuild.sh b/eng/common/msbuild.sh index 8160cd5a59d..20d3dad5435 100755 --- a/eng/common/msbuild.sh +++ b/eng/common/msbuild.sh @@ -19,7 +19,7 @@ prepare_machine=false extra_args='' while (($# > 0)); do - lowerI="$(echo $1 | awk '{print tolower($0)}')" + lowerI="$(echo $1 | tr "[:upper:]" "[:lower:]")" case $lowerI in --verbosity) verbosity=$2 diff --git a/eng/common/native/install-cmake-test.sh b/eng/common/native/install-cmake-test.sh index 12339a40761..8a5e7cf0db5 100755 --- a/eng/common/native/install-cmake-test.sh +++ b/eng/common/native/install-cmake-test.sh @@ -14,7 +14,7 @@ download_retries=5 retry_wait_time_seconds=30 while (($# > 0)); do - lowerI="$(echo $1 | awk '{print tolower($0)}')" + lowerI="$(echo $1 | tr "[:upper:]" "[:lower:]")" case $lowerI in --baseuri) base_uri=$2 @@ -63,7 +63,7 @@ done tool_name="cmake-test" tool_os=$(GetCurrentOS) -tool_folder=$(echo $tool_os | awk '{print tolower($0)}') +tool_folder="$(echo $tool_os | tr "[:upper:]" "[:lower:]")" tool_arch="x86_64" tool_name_moniker="$tool_name-$version-$tool_os-$tool_arch" tool_install_directory="$install_path/$tool_name/$version" @@ -114,4 +114,4 @@ if [[ $? != 0 ]]; then exit 1 fi -exit 0 \ No newline at end of file +exit 0 diff --git a/eng/common/native/install-cmake.sh b/eng/common/native/install-cmake.sh index 18041be8763..de496beebc5 100755 --- a/eng/common/native/install-cmake.sh +++ b/eng/common/native/install-cmake.sh @@ -14,7 +14,7 @@ download_retries=5 retry_wait_time_seconds=30 while (($# > 0)); do - lowerI="$(echo $1 | awk '{print tolower($0)}')" + lowerI="$(echo $1 | tr "[:upper:]" "[:lower:]")" case $lowerI in --baseuri) base_uri=$2 @@ -63,7 +63,7 @@ done tool_name="cmake" tool_os=$(GetCurrentOS) -tool_folder=$(echo $tool_os | awk '{print tolower($0)}') +tool_folder="$(echo $tool_os | tr "[:upper:]" "[:lower:]")" tool_arch="x86_64" tool_name_moniker="$tool_name-$version-$tool_os-$tool_arch" tool_install_directory="$install_path/$tool_name/$version" @@ -114,4 +114,4 @@ if [[ $? != 0 ]]; then exit 1 fi -exit 0 \ No newline at end of file +exit 0 diff --git a/eng/common/native/install-tool.ps1 b/eng/common/native/install-tool.ps1 index f397e1c75d4..78f2d84a4e4 100644 --- a/eng/common/native/install-tool.ps1 +++ b/eng/common/native/install-tool.ps1 @@ -105,7 +105,7 @@ try { Write-Error "There are multiple copies of $ToolName in $($ToolInstallDirectory): `n$(@($ToolFilePath | out-string))" exit 1 } elseif (@($ToolFilePath).Length -Lt 1) { - Write-Host "$ToolName was not found in $ToolFilePath." + Write-Host "$ToolName was not found in $ToolInstallDirectory." exit 1 } diff --git a/eng/common/performance/blazor_perf.proj b/eng/common/performance/blazor_perf.proj deleted file mode 100644 index 3b25359c438..00000000000 --- a/eng/common/performance/blazor_perf.proj +++ /dev/null @@ -1,30 +0,0 @@ - - - python3 - $(HelixPreCommands);chmod +x $HELIX_WORKITEM_PAYLOAD/SOD/SizeOnDisk - - - - - %(Identity) - - - - - %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\ - $(ScenarioDirectory)blazor\ - - - $HELIX_CORRELATION_PAYLOAD/performance/src/scenarios/ - $(ScenarioDirectory)blazor/ - - - - - $(WorkItemDirectory) - cd $(BlazorDirectory);$(Python) pre.py publish --msbuild %27/p:_TrimmerDumpDependencies=true%27 --msbuild-static AdditionalMonoLinkerOptions=%27"%24(AdditionalMonoLinkerOptions) --dump-dependencies"%27 --binlog %27./traces/blazor_publish.binlog%27 - $(Python) test.py sod --scenario-name "%(Identity)" - $(Python) post.py - - - \ No newline at end of file diff --git a/eng/common/performance/crossgen_perf.proj b/eng/common/performance/crossgen_perf.proj deleted file mode 100644 index eb8bdd9c440..00000000000 --- a/eng/common/performance/crossgen_perf.proj +++ /dev/null @@ -1,110 +0,0 @@ - - - - - %(Identity) - - - - - - py -3 - $(HelixPreCommands) - %HELIX_CORRELATION_PAYLOAD%\Core_Root - %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\ - $(ScenarioDirectory)crossgen\ - $(ScenarioDirectory)crossgen2\ - - - python3 - $(HelixPreCommands);chmod +x $HELIX_WORKITEM_PAYLOAD/startup/Startup;chmod +x $HELIX_WORKITEM_PAYLOAD/startup/perfcollect;sudo apt update;chmod +x $HELIX_WORKITEM_PAYLOAD/SOD/SizeOnDisk - $HELIX_CORRELATION_PAYLOAD/Core_Root - $HELIX_CORRELATION_PAYLOAD/performance/src/scenarios/ - $(ScenarioDirectory)crossgen/ - $(ScenarioDirectory)crossgen2/ - - - - - - - - - - - - - - - - - - - - - - - $(WorkItemDirectory) - $(Python) $(CrossgenDirectory)test.py crossgen --core-root $(CoreRoot) --test-name %(Identity) - - - - - - $(WorkItemDirectory) - $(Python) $(Crossgen2Directory)test.py crossgen2 --core-root $(CoreRoot) --single %(Identity) - - - - - - $(WorkItemDirectory) - $(Python) $(Crossgen2Directory)test.py crossgen2 --core-root $(CoreRoot) --single %(Identity) --singlethreaded True - - - - - - $(WorkItemDirectory) - $(Python) $(CrossgenDirectory)pre.py crossgen --core-root $(CoreRoot) --single %(Identity) - $(Python) $(CrossgenDirectory)test.py sod --scenario-name "Crossgen %(Identity) Size" --dirs ./crossgen.out/ - $(Python) $(CrossgenDirectory)post.py - - - - - - $(WorkItemDirectory) - $(Python) $(Crossgen2Directory)pre.py crossgen2 --core-root $(CoreRoot) --single %(Identity) - $(Python) $(Crossgen2Directory)test.py sod --scenario-name "Crossgen2 %(Identity) Size" --dirs ./crossgen.out/ - $(Python) $(Crossgen2Directory)post.py - - - - - - - 4:00 - - - - 4:00 - - - 4:00 - - - $(WorkItemDirectory) - $(Python) $(Crossgen2Directory)test.py crossgen2 --core-root $(CoreRoot) --composite $(Crossgen2Directory)framework-r2r.dll.rsp - 1:00 - - - 4:00 - - - 4:00 - - - \ No newline at end of file diff --git a/eng/common/performance/microbenchmarks.proj b/eng/common/performance/microbenchmarks.proj deleted file mode 100644 index 318ca5f1b8d..00000000000 --- a/eng/common/performance/microbenchmarks.proj +++ /dev/null @@ -1,144 +0,0 @@ - - - - %HELIX_CORRELATION_PAYLOAD%\performance\scripts\benchmarks_ci.py --csproj %HELIX_CORRELATION_PAYLOAD%\performance\$(TargetCsproj) - --dotnet-versions %DOTNET_VERSION% --cli-source-info args --cli-branch %PERFLAB_BRANCH% --cli-commit-sha %PERFLAB_HASH% --cli-repository https://github.com/%PERFLAB_REPO% --cli-source-timestamp %PERFLAB_BUILDTIMESTAMP% - py -3 - %HELIX_CORRELATION_PAYLOAD%\Core_Root\CoreRun.exe - %HELIX_CORRELATION_PAYLOAD%\Baseline_Core_Root\CoreRun.exe - - $(HelixPreCommands);call %HELIX_CORRELATION_PAYLOAD%\performance\tools\machine-setup.cmd;set PYTHONPATH=%HELIX_WORKITEM_PAYLOAD%\scripts%3B%HELIX_WORKITEM_PAYLOAD% - %HELIX_CORRELATION_PAYLOAD%\artifacts\BenchmarkDotNet.Artifacts - %HELIX_CORRELATION_PAYLOAD%\artifacts\BenchmarkDotNet.Artifacts_Baseline - %HELIX_CORRELATION_PAYLOAD%\performance\src\tools\ResultsComparer\ResultsComparer.csproj - %HELIX_CORRELATION_PAYLOAD%\performance\tools\dotnet\$(Architecture)\dotnet.exe - %25%25 - %HELIX_WORKITEM_ROOT%\testResults.xml - - - - $HELIX_CORRELATION_PAYLOAD - $(BaseDirectory)/performance - - - - $HELIX_WORKITEM_PAYLOAD - $(BaseDirectory) - - - - $(PerformanceDirectory)/scripts/benchmarks_ci.py --csproj $(PerformanceDirectory)/$(TargetCsproj) - --dotnet-versions $DOTNET_VERSION --cli-source-info args --cli-branch $PERFLAB_BRANCH --cli-commit-sha $PERFLAB_HASH --cli-repository https://github.com/$PERFLAB_REPO --cli-source-timestamp $PERFLAB_BUILDTIMESTAMP - python3 - $(BaseDirectory)/Core_Root/corerun - $(BaseDirectory)/Baseline_Core_Root/corerun - $(HelixPreCommands);chmod +x $(PerformanceDirectory)/tools/machine-setup.sh;. $(PerformanceDirectory)/tools/machine-setup.sh - $(BaseDirectory)/artifacts/BenchmarkDotNet.Artifacts - $(BaseDirectory)/artifacts/BenchmarkDotNet.Artifacts_Baseline - $(PerformanceDirectory)/src/tools/ResultsComparer/ResultsComparer.csproj - $(PerformanceDirectory)/tools/dotnet/$(Architecture)/dotnet - %25 - $HELIX_WORKITEM_ROOT/testResults.xml - - - - $(CliArguments) --wasm - - - - --corerun %HELIX_CORRELATION_PAYLOAD%\dotnet-mono\shared\Microsoft.NETCore.App\6.0.0\corerun.exe - - - --corerun $(BaseDirectory)/dotnet-mono/shared/Microsoft.NETCore.App/6.0.0/corerun - - - - --corerun $(CoreRun) - - - - --corerun $(BaselineCoreRun) - - - - $(Python) $(WorkItemCommand) --incremental no --architecture $(Architecture) -f $(_Framework) $(PerfLabArguments) - - - - $(WorkItemCommand) $(CliArguments) - - - - 2:30 - 0:15 - - - - - %(Identity) - - - - - 30 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - - - $(WorkItemDirectory) - $(WorkItemCommand) --bdn-artifacts $(BaselineArtifactsDirectory) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(BaselineCoreRunArgument) --partition-count $(PartitionCount) --partition-index %(HelixWorkItem.Index)" - $(WorkItemCommand) --bdn-artifacts $(ArtifactsDirectory) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(CoreRunArgument) --partition-count $(PartitionCount) --partition-index %(HelixWorkItem.Index)" - $(DotnetExe) run -f $(_Framework) -p $(ResultsComparer) --base $(BaselineArtifactsDirectory) --diff $(ArtifactsDirectory) --threshold 2$(Percent) --xml $(XMLResults);$(FinalCommand) - $(WorkItemTimeout) - - - - - - $(WorkItemDirectory) - $(WorkItemCommand) --bdn-artifacts $(BaselineArtifactsDirectory) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(BaselineCoreRunArgument)" - $(WorkItemCommand) --bdn-artifacts $(ArtifactsDirectory) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(CoreRunArgument)" - $(DotnetExe) run -f $(_Framework) -p $(ResultsComparer) --base $(BaselineArtifactsDirectory) --diff $(ArtifactsDirectory) --threshold 2$(Percent) --xml $(XMLResults) - 4:00 - - - diff --git a/eng/common/performance/performance-setup.ps1 b/eng/common/performance/performance-setup.ps1 deleted file mode 100644 index 0edb2ae276e..00000000000 --- a/eng/common/performance/performance-setup.ps1 +++ /dev/null @@ -1,149 +0,0 @@ -Param( - [string] $SourceDirectory=$env:BUILD_SOURCESDIRECTORY, - [string] $CoreRootDirectory, - [string] $BaselineCoreRootDirectory, - [string] $Architecture="x64", - [string] $Framework="net5.0", - [string] $CompilationMode="Tiered", - [string] $Repository=$env:BUILD_REPOSITORY_NAME, - [string] $Branch=$env:BUILD_SOURCEBRANCH, - [string] $CommitSha=$env:BUILD_SOURCEVERSION, - [string] $BuildNumber=$env:BUILD_BUILDNUMBER, - [string] $RunCategories="Libraries Runtime", - [string] $Csproj="src\benchmarks\micro\MicroBenchmarks.csproj", - [string] $Kind="micro", - [switch] $LLVM, - [switch] $MonoInterpreter, - [switch] $MonoAOT, - [switch] $Internal, - [switch] $Compare, - [string] $MonoDotnet="", - [string] $Configurations="CompilationMode=$CompilationMode RunKind=$Kind" -) - -$RunFromPerformanceRepo = ($Repository -eq "dotnet/performance") -or ($Repository -eq "dotnet-performance") -$UseCoreRun = ($CoreRootDirectory -ne [string]::Empty) -$UseBaselineCoreRun = ($BaselineCoreRootDirectory -ne [string]::Empty) - -$PayloadDirectory = (Join-Path $SourceDirectory "Payload") -$PerformanceDirectory = (Join-Path $PayloadDirectory "performance") -$WorkItemDirectory = (Join-Path $SourceDirectory "workitem") -$ExtraBenchmarkDotNetArguments = "--iterationCount 1 --warmupCount 0 --invocationCount 1 --unrollFactor 1 --strategy ColdStart --stopOnFirstError true" -$Creator = $env:BUILD_DEFINITIONNAME -$PerfLabArguments = "" -$HelixSourcePrefix = "pr" - -$Queue = "Windows.10.Amd64.ClientRS4.DevEx.15.8.Open" - -# TODO: Implement a better logic to determine if Framework is .NET Core or >= .NET 5. -if ($Framework.StartsWith("netcoreapp") -or ($Framework -eq "net5.0")) { - $Queue = "Windows.10.Amd64.ClientRS5.Open" -} - -if ($Compare) { - $Queue = "Windows.10.Amd64.19H1.Tiger.Perf.Open" - $PerfLabArguments = "" - $ExtraBenchmarkDotNetArguments = "" -} - -if ($Internal) { - $Queue = "Windows.10.Amd64.19H1.Tiger.Perf" - $PerfLabArguments = "--upload-to-perflab-container" - $ExtraBenchmarkDotNetArguments = "" - $Creator = "" - $HelixSourcePrefix = "official" -} - -if($MonoInterpreter) -{ - $ExtraBenchmarkDotNetArguments = "--category-exclusion-filter NoInterpreter" -} - -if($MonoDotnet -ne "") -{ - $Configurations += " LLVM=$LLVM MonoInterpreter=$MonoInterpreter MonoAOT=$MonoAOT" - if($ExtraBenchmarkDotNetArguments -eq "") - { - #FIX ME: We need to block these tests as they don't run on mono for now - $ExtraBenchmarkDotNetArguments = "--exclusion-filter *Perf_Image* *Perf_NamedPipeStream*" - } - else - { - #FIX ME: We need to block these tests as they don't run on mono for now - $ExtraBenchmarkDotNetArguments += " --exclusion-filter *Perf_Image* *Perf_NamedPipeStream*" - } -} - -# FIX ME: This is a workaround until we get this from the actual pipeline -$CommonSetupArguments="--channel master --queue $Queue --build-number $BuildNumber --build-configs $Configurations --architecture $Architecture" -$SetupArguments = "--repository https://github.com/$Repository --branch $Branch --get-perf-hash --commit-sha $CommitSha $CommonSetupArguments" - - -#This grabs the LKG version number of dotnet and passes it to our scripts -$VersionJSON = Get-Content global.json | ConvertFrom-Json -$DotNetVersion = $VersionJSON.tools.dotnet -# TODO: Change this back to parsing when we have a good story for dealing with TFM changes or when the LKG in runtime gets updated to include net6.0 -# $SetupArguments = "--dotnet-versions $DotNetVersion $SetupArguments" -$SetupArguments = "--dotnet-versions 6.0.100-alpha.1.20553.6 $SetupArguments" - - -if ($RunFromPerformanceRepo) { - $SetupArguments = "--perf-hash $CommitSha $CommonSetupArguments" - - robocopy $SourceDirectory $PerformanceDirectory /E /XD $PayloadDirectory $SourceDirectory\artifacts $SourceDirectory\.git -} -else { - git clone --branch master --depth 1 --quiet https://github.com/dotnet/performance $PerformanceDirectory -} - -if($MonoDotnet -ne "") -{ - $UsingMono = "true" - $MonoDotnetPath = (Join-Path $PayloadDirectory "dotnet-mono") - Move-Item -Path $MonoDotnet -Destination $MonoDotnetPath -} - -if ($UseCoreRun) { - $NewCoreRoot = (Join-Path $PayloadDirectory "Core_Root") - Move-Item -Path $CoreRootDirectory -Destination $NewCoreRoot -} -if ($UseBaselineCoreRun) { - $NewBaselineCoreRoot = (Join-Path $PayloadDirectory "Baseline_Core_Root") - Move-Item -Path $BaselineCoreRootDirectory -Destination $NewBaselineCoreRoot -} - -$DocsDir = (Join-Path $PerformanceDirectory "docs") -robocopy $DocsDir $WorkItemDirectory - -# Set variables that we will need to have in future steps -$ci = $true - -. "$PSScriptRoot\..\pipeline-logging-functions.ps1" - -# Directories -Write-PipelineSetVariable -Name 'PayloadDirectory' -Value "$PayloadDirectory" -IsMultiJobVariable $false -Write-PipelineSetVariable -Name 'PerformanceDirectory' -Value "$PerformanceDirectory" -IsMultiJobVariable $false -Write-PipelineSetVariable -Name 'WorkItemDirectory' -Value "$WorkItemDirectory" -IsMultiJobVariable $false - -# Script Arguments -Write-PipelineSetVariable -Name 'Python' -Value "py -3" -IsMultiJobVariable $false -Write-PipelineSetVariable -Name 'ExtraBenchmarkDotNetArguments' -Value "$ExtraBenchmarkDotNetArguments" -IsMultiJobVariable $false -Write-PipelineSetVariable -Name 'SetupArguments' -Value "$SetupArguments" -IsMultiJobVariable $false -Write-PipelineSetVariable -Name 'PerfLabArguments' -Value "$PerfLabArguments" -IsMultiJobVariable $false -Write-PipelineSetVariable -Name 'BDNCategories' -Value "$RunCategories" -IsMultiJobVariable $false -Write-PipelineSetVariable -Name 'TargetCsproj' -Value "$Csproj" -IsMultiJobVariable $false -Write-PipelineSetVariable -Name 'Kind' -Value "$Kind" -IsMultiJobVariable $false -Write-PipelineSetVariable -Name 'Architecture' -Value "$Architecture" -IsMultiJobVariable $false -Write-PipelineSetVariable -Name 'UseCoreRun' -Value "$UseCoreRun" -IsMultiJobVariable $false -Write-PipelineSetVariable -Name 'UseBaselineCoreRun' -Value "$UseBaselineCoreRun" -IsMultiJobVariable $false -Write-PipelineSetVariable -Name 'RunFromPerfRepo' -Value "$RunFromPerformanceRepo" -IsMultiJobVariable $false -Write-PipelineSetVariable -Name 'Compare' -Value "$Compare" -IsMultiJobVariable $false -Write-PipelineSetVariable -Name 'MonoDotnet' -Value "$UsingMono" -IsMultiJobVariable $false - -# Helix Arguments -Write-PipelineSetVariable -Name 'Creator' -Value "$Creator" -IsMultiJobVariable $false -Write-PipelineSetVariable -Name 'Queue' -Value "$Queue" -IsMultiJobVariable $false -Write-PipelineSetVariable -Name 'HelixSourcePrefix' -Value "$HelixSourcePrefix" -IsMultiJobVariable $false -Write-PipelineSetVariable -Name '_BuildConfig' -Value "$Architecture.$Kind.$Framework" -IsMultiJobVariable $false - -exit 0 \ No newline at end of file diff --git a/eng/common/performance/performance-setup.sh b/eng/common/performance/performance-setup.sh deleted file mode 100755 index c8e211bcb1b..00000000000 --- a/eng/common/performance/performance-setup.sh +++ /dev/null @@ -1,298 +0,0 @@ -#!/usr/bin/env bash - -source_directory=$BUILD_SOURCESDIRECTORY -core_root_directory= -baseline_core_root_directory= -architecture=x64 -framework=net5.0 -compilation_mode=tiered -repository=$BUILD_REPOSITORY_NAME -branch=$BUILD_SOURCEBRANCH -commit_sha=$BUILD_SOURCEVERSION -build_number=$BUILD_BUILDNUMBER -internal=false -compare=false -mono_dotnet= -kind="micro" -llvm=false -monointerpreter=false -monoaot=false -run_categories="Libraries Runtime" -csproj="src\benchmarks\micro\MicroBenchmarks.csproj" -configurations="CompliationMode=$compilation_mode RunKind=$kind" -run_from_perf_repo=false -use_core_run=true -use_baseline_core_run=true -using_mono=false -wasm_runtime_loc= -using_wasm=false -use_latest_dotnet=false - -while (($# > 0)); do - lowerI="$(echo $1 | awk '{print tolower($0)}')" - case $lowerI in - --sourcedirectory) - source_directory=$2 - shift 2 - ;; - --corerootdirectory) - core_root_directory=$2 - shift 2 - ;; - --baselinecorerootdirectory) - baseline_core_root_directory=$2 - shift 2 - ;; - --architecture) - architecture=$2 - shift 2 - ;; - --framework) - framework=$2 - shift 2 - ;; - --compilationmode) - compilation_mode=$2 - shift 2 - ;; - --repository) - repository=$2 - shift 2 - ;; - --branch) - branch=$2 - shift 2 - ;; - --commitsha) - commit_sha=$2 - shift 2 - ;; - --buildnumber) - build_number=$2 - shift 2 - ;; - --kind) - kind=$2 - configurations="CompilationMode=$compilation_mode RunKind=$kind" - shift 2 - ;; - --runcategories) - run_categories=$2 - shift 2 - ;; - --csproj) - csproj=$2 - shift 2 - ;; - --internal) - internal=true - shift 1 - ;; - --llvm) - llvm=true - shift 1 - ;; - --monointerpreter) - monointerpreter=true - shift 1 - ;; - --monoaot) - monoaot=true - shift 1 - ;; - --monodotnet) - mono_dotnet=$2 - shift 2 - ;; - --wasm) - wasm_runtime_loc=$2 - shift 2 - ;; - --compare) - compare=true - shift 1 - ;; - --configurations) - configurations=$2 - shift 2 - ;; - --latestdotnet) - use_latest_dotnet=true - shift 1 - ;; - *) - echo "Common settings:" - echo " --corerootdirectory Directory where Core_Root exists, if running perf testing with --corerun" - echo " --architecture Architecture of the testing being run" - echo " --configurations List of key=value pairs that will be passed to perf testing infrastructure." - echo " ex: --configurations \"CompilationMode=Tiered OptimzationLevel=PGO\"" - echo " --help Print help and exit" - echo "" - echo "Advanced settings:" - echo " --framework The framework to run, if not running in master" - echo " --compliationmode The compilation mode if not passing --configurations" - echo " --sourcedirectory The directory of the sources. Defaults to env:BUILD_SOURCESDIRECTORY" - echo " --repository The name of the repository in the / format. Defaults to env:BUILD_REPOSITORY_NAME" - echo " --branch The name of the branch. Defaults to env:BUILD_SOURCEBRANCH" - echo " --commitsha The commit sha1 to run against. Defaults to env:BUILD_SOURCEVERSION" - echo " --buildnumber The build number currently running. Defaults to env:BUILD_BUILDNUMBER" - echo " --csproj The relative path to the benchmark csproj whose tests should be run. Defaults to src\benchmarks\micro\MicroBenchmarks.csproj" - echo " --kind Related to csproj. The kind of benchmarks that should be run. Defaults to micro" - echo " --runcategories Related to csproj. Categories of benchmarks to run. Defaults to \"coreclr corefx\"" - echo " --internal If the benchmarks are running as an official job." - echo " --monodotnet Pass the path to the mono dotnet for mono performance testing." - echo " --wasm Path to the unpacked wasm runtime pack." - echo " --latestdotnet --dotnet-versions will not be specified. --dotnet-versions defaults to LKG version in global.json " - echo "" - exit 0 - ;; - esac -done - -if [ "$repository" == "dotnet/performance" ] || [ "$repository" == "dotnet-performance" ]; then - run_from_perf_repo=true -fi - -if [ -z "$configurations" ]; then - configurations="CompilationMode=$compilation_mode" -fi - -if [ -z "$core_root_directory" ]; then - use_core_run=false -fi - -if [ -z "$baseline_core_root_directory" ]; then - use_baseline_core_run=false -fi - -payload_directory=$source_directory/Payload -performance_directory=$payload_directory/performance -workitem_directory=$source_directory/workitem -extra_benchmark_dotnet_arguments="--iterationCount 1 --warmupCount 0 --invocationCount 1 --unrollFactor 1 --strategy ColdStart --stopOnFirstError true" -perflab_arguments= -queue=Ubuntu.1804.Amd64.Open -creator=$BUILD_DEFINITIONNAME -helix_source_prefix="pr" - -if [[ "$compare" == true ]]; then - extra_benchmark_dotnet_arguments= - perflab_arguments= - - # No open queues for arm64 - if [[ "$architecture" = "arm64" ]]; then - echo "Compare not available for arm64" - exit 1 - fi - - queue=Ubuntu.1804.Amd64.Tiger.Perf.Open -fi - -if [[ "$internal" == true ]]; then - perflab_arguments="--upload-to-perflab-container" - helix_source_prefix="official" - creator= - extra_benchmark_dotnet_arguments= - - if [[ "$architecture" = "arm64" ]]; then - queue=Ubuntu.1804.Arm64.Perf - else - queue=Ubuntu.1804.Amd64.Tiger.Perf - fi -else - if [[ "$architecture" = "arm64" ]]; then - queue=ubuntu.1804.armarch.open - else - queue=Ubuntu.1804.Amd64.Open - fi -fi - -if [[ "$mono_dotnet" != "" ]] && [[ "$monointerpreter" == "false" ]]; then - configurations="$configurations LLVM=$llvm MonoInterpreter=$monointerpreter MonoAOT=$monoaot" - extra_benchmark_dotnet_arguments="$extra_benchmark_dotnet_arguments --category-exclusion-filter NoMono" -fi - -if [[ "$wasm_runtime_loc" != "" ]]; then - configurations="CompilationMode=wasm RunKind=$kind" - extra_benchmark_dotnet_arguments="$extra_benchmark_dotnet_arguments --category-exclusion-filter NoInterpreter NoWASM NoMono" -fi - -if [[ "$mono_dotnet" != "" ]] && [[ "$monointerpreter" == "true" ]]; then - configurations="$configurations LLVM=$llvm MonoInterpreter=$monointerpreter MonoAOT=$monoaot" - extra_benchmark_dotnet_arguments="$extra_benchmark_dotnet_arguments --category-exclusion-filter NoInterpreter NoMono" -fi - -common_setup_arguments="--channel master --queue $queue --build-number $build_number --build-configs $configurations --architecture $architecture" -setup_arguments="--repository https://github.com/$repository --branch $branch --get-perf-hash --commit-sha $commit_sha $common_setup_arguments" - - -if [[ "$use_latest_dotnet" = false ]]; then - # Get the tools section from the global.json. - # This grabs the LKG version number of dotnet and passes it to our scripts - dotnet_version=`cat global.json | python3 -c 'import json,sys;obj=json.load(sys.stdin);print(obj["tools"]["dotnet"])'` - # TODO: Change this back to parsing when we have a good story for dealing with TFM changes or when the LKG in runtime gets updated to include net6.0 - # setup_arguments="--dotnet-versions $dotnet_version $setup_arguments" - setup_arguments="--dotnet-versions 6.0.100-alpha.1.20553.6 $setup_arguments" -fi - -if [[ "$run_from_perf_repo" = true ]]; then - payload_directory= - workitem_directory=$source_directory - performance_directory=$workitem_directory - setup_arguments="--perf-hash $commit_sha $common_setup_arguments" -else - git clone --branch master --depth 1 --quiet https://github.com/dotnet/performance $performance_directory - - docs_directory=$performance_directory/docs - mv $docs_directory $workitem_directory -fi - -if [[ "$wasm_runtime_loc" != "" ]]; then - using_wasm=true - wasm_dotnet_path=$payload_directory/dotnet-wasm - mv $wasm_runtime_loc $wasm_dotnet_path - extra_benchmark_dotnet_arguments="$extra_benchmark_dotnet_arguments --wasmMainJS \$HELIX_CORRELATION_PAYLOAD/dotnet-wasm/runtime-test.js --wasmEngine /home/helixbot/.jsvu/v8 --customRuntimePack \$HELIX_CORRELATION_PAYLOAD/dotnet-wasm" -fi - -if [[ "$mono_dotnet" != "" ]]; then - using_mono=true - mono_dotnet_path=$payload_directory/dotnet-mono - mv $mono_dotnet $mono_dotnet_path -fi - -if [[ "$use_core_run" = true ]]; then - new_core_root=$payload_directory/Core_Root - mv $core_root_directory $new_core_root -fi - -if [[ "$use_baseline_core_run" = true ]]; then - new_baseline_core_root=$payload_directory/Baseline_Core_Root - mv $baseline_core_root_directory $new_baseline_core_root -fi - -ci=true - -_script_dir=$(pwd)/eng/common -. "$_script_dir/pipeline-logging-functions.sh" - -# Make sure all of our variables are available for future steps -Write-PipelineSetVariable -name "UseCoreRun" -value "$use_core_run" -is_multi_job_variable false -Write-PipelineSetVariable -name "UseBaselineCoreRun" -value "$use_baseline_core_run" -is_multi_job_variable false -Write-PipelineSetVariable -name "Architecture" -value "$architecture" -is_multi_job_variable false -Write-PipelineSetVariable -name "PayloadDirectory" -value "$payload_directory" -is_multi_job_variable false -Write-PipelineSetVariable -name "PerformanceDirectory" -value "$performance_directory" -is_multi_job_variable false -Write-PipelineSetVariable -name "WorkItemDirectory" -value "$workitem_directory" -is_multi_job_variable false -Write-PipelineSetVariable -name "Queue" -value "$queue" -is_multi_job_variable false -Write-PipelineSetVariable -name "SetupArguments" -value "$setup_arguments" -is_multi_job_variable false -Write-PipelineSetVariable -name "Python" -value "python3" -is_multi_job_variable false -Write-PipelineSetVariable -name "PerfLabArguments" -value "$perflab_arguments" -is_multi_job_variable false -Write-PipelineSetVariable -name "ExtraBenchmarkDotNetArguments" -value "$extra_benchmark_dotnet_arguments" -is_multi_job_variable false -Write-PipelineSetVariable -name "BDNCategories" -value "$run_categories" -is_multi_job_variable false -Write-PipelineSetVariable -name "TargetCsproj" -value "$csproj" -is_multi_job_variable false -Write-PipelineSetVariable -name "RunFromPerfRepo" -value "$run_from_perf_repo" -is_multi_job_variable false -Write-PipelineSetVariable -name "Creator" -value "$creator" -is_multi_job_variable false -Write-PipelineSetVariable -name "HelixSourcePrefix" -value "$helix_source_prefix" -is_multi_job_variable false -Write-PipelineSetVariable -name "Kind" -value "$kind" -is_multi_job_variable false -Write-PipelineSetVariable -name "_BuildConfig" -value "$architecture.$kind.$framework" -is_multi_job_variable false -Write-PipelineSetVariable -name "Compare" -value "$compare" -is_multi_job_variable false -Write-PipelineSetVariable -name "MonoDotnet" -value "$using_mono" -is_multi_job_variable false -Write-PipelineSetVariable -name "WasmDotnet" -value "$using_wasm" -is_multi_job_variable false diff --git a/eng/common/pipeline-logging-functions.sh b/eng/common/pipeline-logging-functions.sh index da5a7e6129e..6a0b2255e91 100755 --- a/eng/common/pipeline-logging-functions.sh +++ b/eng/common/pipeline-logging-functions.sh @@ -6,7 +6,7 @@ function Write-PipelineTelemetryError { local function_args=() local message='' while [[ $# -gt 0 ]]; do - opt="$(echo "${1/#--/-}" | awk '{print tolower($0)}')" + opt="$(echo "${1/#--/-}" | tr "[:upper:]" "[:lower:]")" case "$opt" in -category|-c) telemetry_category=$2 @@ -48,7 +48,7 @@ function Write-PipelineTaskError { local force=false while [[ $# -gt 0 ]]; do - opt="$(echo "${1/#--/-}" | awk '{print tolower($0)}')" + opt="$(echo "${1/#--/-}" | tr "[:upper:]" "[:lower:]")" case "$opt" in -type|-t) message_type=$2 @@ -122,7 +122,7 @@ function Write-PipelineSetVariable { local is_multi_job_variable=true while [[ $# -gt 0 ]]; do - opt="$(echo "${1/#--/-}" | awk '{print tolower($0)}')" + opt="$(echo "${1/#--/-}" | tr "[:upper:]" "[:lower:]")" case "$opt" in -name|-n) name=$2 @@ -164,7 +164,7 @@ function Write-PipelinePrependPath { local prepend_path='' while [[ $# -gt 0 ]]; do - opt="$(echo "${1/#--/-}" | awk '{print tolower($0)}')" + opt="$(echo "${1/#--/-}" | tr "[:upper:]" "[:lower:]")" case "$opt" in -path|-p) prepend_path=$2 @@ -186,7 +186,7 @@ function Write-PipelineSetResult { local message='' while [[ $# -gt 0 ]]; do - opt="$(echo "${1/#--/-}" | awk '{print tolower($0)}')" + opt="$(echo "${1/#--/-}" | tr "[:upper:]" "[:lower:]")" case "$opt" in -result|-r) result=$2 diff --git a/eng/common/post-build/publish-using-darc.ps1 b/eng/common/post-build/publish-using-darc.ps1 index 31cf2767417..2427ca6b6ae 100644 --- a/eng/common/post-build/publish-using-darc.ps1 +++ b/eng/common/post-build/publish-using-darc.ps1 @@ -16,18 +16,18 @@ param( try { . $PSScriptRoot\post-build-utils.ps1 - # Hard coding darc version till the next arcade-services roll out, cos this version has required API changes for darc add-build-to-channel - $darc = Get-Darc "1.1.0-beta.20418.1" + + $darc = Get-Darc $optionalParams = [System.Collections.ArrayList]::new() if ("" -ne $ArtifactsPublishingAdditionalParameters) { - $optionalParams.Add("artifact-publishing-parameters") | Out-Null + $optionalParams.Add("--artifact-publishing-parameters") | Out-Null $optionalParams.Add($ArtifactsPublishingAdditionalParameters) | Out-Null } if ("" -ne $SymbolPublishingAdditionalParameters) { - $optionalParams.Add("symbol-publishing-parameters") | Out-Null + $optionalParams.Add("--symbol-publishing-parameters") | Out-Null $optionalParams.Add($SymbolPublishingAdditionalParameters) | Out-Null } @@ -60,7 +60,7 @@ try { --id $buildId ` --publishing-infra-version $PublishingInfraVersion ` --default-channels ` - --source-branch master ` + --source-branch main ` --azdev-pat $AzdoToken ` --bar-uri $MaestroApiEndPoint ` --password $MaestroToken ` diff --git a/eng/common/post-build/sourcelink-validation.ps1 b/eng/common/post-build/sourcelink-validation.ps1 index 1c46f7b6341..85c89861719 100644 --- a/eng/common/post-build/sourcelink-validation.ps1 +++ b/eng/common/post-build/sourcelink-validation.ps1 @@ -14,7 +14,9 @@ param( $global:RepoFiles = @{} # Maximum number of jobs to run in parallel -$MaxParallelJobs = 6 +$MaxParallelJobs = 16 + +$MaxRetries = 5 # Wait time between check for system load $SecondsBetweenLoadChecks = 10 @@ -29,7 +31,10 @@ $ValidatePackage = { # Ensure input file exist if (!(Test-Path $PackagePath)) { Write-Host "Input file does not exist: $PackagePath" - return 1 + return [pscustomobject]@{ + result = 1 + packagePath = $PackagePath + } } # Extensions for which we'll look for SourceLink information @@ -59,7 +64,10 @@ $ValidatePackage = { # We ignore resource DLLs if ($FileName.EndsWith('.resources.dll')) { - return + return [pscustomobject]@{ + result = 0 + packagePath = $PackagePath + } } [System.IO.Compression.ZipFileExtensions]::ExtractToFile($_, $TargetFile, $true) @@ -91,36 +99,49 @@ $ValidatePackage = { $Status = 200 $Cache = $using:RepoFiles - if ( !($Cache.ContainsKey($FilePath)) ) { - try { - $Uri = $Link -as [System.URI] - - # Only GitHub links are valid - if ($Uri.AbsoluteURI -ne $null -and ($Uri.Host -match 'github' -or $Uri.Host -match 'githubusercontent')) { - $Status = (Invoke-WebRequest -Uri $Link -UseBasicParsing -Method HEAD -TimeoutSec 5).StatusCode + $totalRetries = 0 + + while ($totalRetries -lt $using:MaxRetries) { + if ( !($Cache.ContainsKey($FilePath)) ) { + try { + $Uri = $Link -as [System.URI] + + # Only GitHub links are valid + if ($Uri.AbsoluteURI -ne $null -and ($Uri.Host -match 'github' -or $Uri.Host -match 'githubusercontent')) { + $Status = (Invoke-WebRequest -Uri $Link -UseBasicParsing -Method HEAD -TimeoutSec 5).StatusCode + } + else { + # If it's not a github link, we want to break out of the loop and not retry. + $Status = 0 + $totalRetries = $using:MaxRetries + } } - else { + catch { + Write-Host $_ $Status = 0 } } - catch { - write-host $_ - $Status = 0 - } - } - if ($Status -ne 200) { - if ($NumFailedLinks -eq 0) { - if ($FailedFiles.Value -eq 0) { - Write-Host + if ($Status -ne 200) { + $totalRetries++ + + if ($totalRetries -ge $using:MaxRetries) { + if ($NumFailedLinks -eq 0) { + if ($FailedFiles.Value -eq 0) { + Write-Host + } + + Write-Host "`tFile $RealPath has broken links:" + } + + Write-Host "`t`tFailed to retrieve $Link" + + $NumFailedLinks++ } - - Write-Host "`tFile $RealPath has broken links:" } - - Write-Host "`t`tFailed to retrieve $Link" - - $NumFailedLinks++ + else { + break + } } } } @@ -136,7 +157,7 @@ $ValidatePackage = { } } catch { - + Write-Host $_ } finally { $zip.Dispose() @@ -220,6 +241,7 @@ function ValidateSourceLinkLinks { # Process each NuGet package in parallel Get-ChildItem "$InputPath\*.symbols.nupkg" | ForEach-Object { + Write-Host "Starting $($_.FullName)" Start-Job -ScriptBlock $ValidatePackage -ArgumentList $_.FullName | Out-Null $NumJobs = @(Get-Job -State 'Running').Count @@ -267,6 +289,10 @@ function InstallSourcelinkCli { try { InstallSourcelinkCli + foreach ($Job in @(Get-Job)) { + Remove-Job -Id $Job.Id + } + ValidateSourceLinkLinks } catch { diff --git a/eng/common/post-build/symbols-validation.ps1 b/eng/common/post-build/symbols-validation.ps1 index 99bf28cd5c1..a5af041ba77 100644 --- a/eng/common/post-build/symbols-validation.ps1 +++ b/eng/common/post-build/symbols-validation.ps1 @@ -1,13 +1,14 @@ param( - [Parameter(Mandatory=$true)][string] $InputPath, # Full path to directory where NuGet packages to be checked are stored - [Parameter(Mandatory=$true)][string] $ExtractPath, # Full path to directory where the packages will be extracted during validation - [Parameter(Mandatory=$true)][string] $DotnetSymbolVersion, # Version of dotnet symbol to use - [Parameter(Mandatory=$false)][switch] $ContinueOnError, # If we should keep checking symbols after an error - [Parameter(Mandatory=$false)][switch] $Clean # Clean extracted symbols directory after checking symbols + [Parameter(Mandatory = $true)][string] $InputPath, # Full path to directory where NuGet packages to be checked are stored + [Parameter(Mandatory = $true)][string] $ExtractPath, # Full path to directory where the packages will be extracted during validation + [Parameter(Mandatory = $true)][string] $DotnetSymbolVersion, # Version of dotnet symbol to use + [Parameter(Mandatory = $false)][switch] $CheckForWindowsPdbs, # If we should check for the existence of windows pdbs in addition to portable PDBs + [Parameter(Mandatory = $false)][switch] $ContinueOnError, # If we should keep checking symbols after an error + [Parameter(Mandatory = $false)][switch] $Clean # Clean extracted symbols directory after checking symbols ) # Maximum number of jobs to run in parallel -$MaxParallelJobs = 6 +$MaxParallelJobs = 16 # Max number of retries $MaxRetry = 5 @@ -19,9 +20,15 @@ $SecondsBetweenLoadChecks = 10 Set-Variable -Name "ERROR_BADEXTRACT" -Option Constant -Value -1 Set-Variable -Name "ERROR_FILEDOESNOTEXIST" -Option Constant -Value -2 +$WindowsPdbVerificationParam = "" +if ($CheckForWindowsPdbs) { + $WindowsPdbVerificationParam = "--windows-pdbs" +} + $CountMissingSymbols = { param( - [string] $PackagePath # Path to a NuGet package + [string] $PackagePath, # Path to a NuGet package + [string] $WindowsPdbVerificationParam # If we should check for the existence of windows pdbs in addition to portable PDBs ) . $using:PSScriptRoot\..\tools.ps1 @@ -34,7 +41,7 @@ $CountMissingSymbols = { if (!(Test-Path $PackagePath)) { Write-PipelineTaskError "Input file does not exist: $PackagePath" return [pscustomobject]@{ - result = $using:ERROR_FILEDOESNOTEXIST + result = $using:ERROR_FILEDOESNOTEXIST packagePath = $PackagePath } } @@ -57,24 +64,25 @@ $CountMissingSymbols = { Write-Host "Something went wrong extracting $PackagePath" Write-Host $_ return [pscustomobject]@{ - result = $using:ERROR_BADEXTRACT + result = $using:ERROR_BADEXTRACT packagePath = $PackagePath } } Get-ChildItem -Recurse $ExtractPath | - Where-Object {$RelevantExtensions -contains $_.Extension} | - ForEach-Object { - $FileName = $_.FullName - if ($FileName -Match '\\ref\\') { - Write-Host "`t Ignoring reference assembly file " $FileName - return - } + Where-Object { $RelevantExtensions -contains $_.Extension } | + ForEach-Object { + $FileName = $_.FullName + if ($FileName -Match '\\ref\\') { + Write-Host "`t Ignoring reference assembly file " $FileName + return + } - $FirstMatchingSymbolDescriptionOrDefault = { + $FirstMatchingSymbolDescriptionOrDefault = { param( - [string] $FullPath, # Full path to the module that has to be checked - [string] $TargetServerParam, # Parameter to pass to `Symbol Tool` indicating the server to lookup for symbols + [string] $FullPath, # Full path to the module that has to be checked + [string] $TargetServerParam, # Parameter to pass to `Symbol Tool` indicating the server to lookup for symbols + [string] $WindowsPdbVerificationParam, # Parameter to pass to potential check for windows-pdbs. [string] $SymbolsPath ) @@ -99,15 +107,16 @@ $CountMissingSymbols = { # DWARF file for a .dylib $DylibDwarf = $SymbolPath.Replace($Extension, '.dylib.dwarf') - + $dotnetSymbolExe = "$env:USERPROFILE\.dotnet\tools" $dotnetSymbolExe = Resolve-Path "$dotnetSymbolExe\dotnet-symbol.exe" $totalRetries = 0 while ($totalRetries -lt $using:MaxRetry) { + # Save the output and get diagnostic output - $output = & $dotnetSymbolExe --symbols --modules --windows-pdbs $TargetServerParam $FullPath -o $SymbolsPath --diagnostics | Out-String + $output = & $dotnetSymbolExe --symbols --modules $WindowsPdbVerificationParam $TargetServerParam $FullPath -o $SymbolsPath --diagnostics | Out-String if (Test-Path $PdbPath) { return 'PDB' @@ -124,42 +133,50 @@ $CountMissingSymbols = { elseif (Test-Path $SymbolPath) { return 'Module' } - elseif ($output.Contains("503 Service Unavailable")) { - # If we got a 503 error, we should retry. + else + { $totalRetries++ } - else { - return $null - } } return $null } - $SymbolsOnMSDL = & $FirstMatchingSymbolDescriptionOrDefault $FileName '--microsoft-symbol-server' $SymbolsPath - $SymbolsOnSymWeb = & $FirstMatchingSymbolDescriptionOrDefault $FileName '--internal-server' $SymbolsPath - - Write-Host -NoNewLine "`t Checking file " $FileName "... " + $FileGuid = New-Guid + $ExpandedSymbolsPath = Join-Path -Path $SymbolsPath -ChildPath $FileGuid + + $SymbolsOnMSDL = & $FirstMatchingSymbolDescriptionOrDefault ` + -FullPath $FileName ` + -TargetServerParam '--microsoft-symbol-server' ` + -SymbolsPath "$ExpandedSymbolsPath-msdl" ` + -WindowsPdbVerificationParam $WindowsPdbVerificationParam + $SymbolsOnSymWeb = & $FirstMatchingSymbolDescriptionOrDefault ` + -FullPath $FileName ` + -TargetServerParam '--internal-server' ` + -SymbolsPath "$ExpandedSymbolsPath-symweb" ` + -WindowsPdbVerificationParam $WindowsPdbVerificationParam + + Write-Host -NoNewLine "`t Checking file " $FileName "... " - if ($SymbolsOnMSDL -ne $null -and $SymbolsOnSymWeb -ne $null) { - Write-Host "Symbols found on MSDL ($SymbolsOnMSDL) and SymWeb ($SymbolsOnSymWeb)" + if ($SymbolsOnMSDL -ne $null -and $SymbolsOnSymWeb -ne $null) { + Write-Host "Symbols found on MSDL ($SymbolsOnMSDL) and SymWeb ($SymbolsOnSymWeb)" + } + else { + $MissingSymbols++ + + if ($SymbolsOnMSDL -eq $null -and $SymbolsOnSymWeb -eq $null) { + Write-Host 'No symbols found on MSDL or SymWeb!' } else { - $MissingSymbols++ - - if ($SymbolsOnMSDL -eq $null -and $SymbolsOnSymWeb -eq $null) { - Write-Host 'No symbols found on MSDL or SymWeb!' + if ($SymbolsOnMSDL -eq $null) { + Write-Host 'No symbols found on MSDL!' } else { - if ($SymbolsOnMSDL -eq $null) { - Write-Host 'No symbols found on MSDL!' - } - else { - Write-Host 'No symbols found on SymWeb!' - } + Write-Host 'No symbols found on SymWeb!' } } } + } if ($using:Clean) { Remove-Item $ExtractPath -Recurse -Force @@ -168,16 +185,16 @@ $CountMissingSymbols = { Pop-Location return [pscustomobject]@{ - result = $MissingSymbols - packagePath = $PackagePath - } + result = $MissingSymbols + packagePath = $PackagePath + } } function CheckJobResult( - $result, - $packagePath, - [ref]$DupedSymbols, - [ref]$TotalFailures) { + $result, + $packagePath, + [ref]$DupedSymbols, + [ref]$TotalFailures) { if ($result -eq $ERROR_BADEXTRACT) { Write-PipelineTelemetryError -Category 'CheckSymbols' -Message "$packagePath has duplicated symbol files" $DupedSymbols.Value++ @@ -200,6 +217,7 @@ function CheckSymbolsAvailable { Remove-Item $ExtractPath -Force -Recurse -ErrorAction SilentlyContinue } + $TotalPackages = 0 $TotalFailures = 0 $DupedSymbols = 0 @@ -222,7 +240,9 @@ function CheckSymbolsAvailable { return } - Start-Job -ScriptBlock $CountMissingSymbols -ArgumentList $FullName | Out-Null + $TotalPackages++ + + Start-Job -ScriptBlock $CountMissingSymbols -ArgumentList @($FullName,$WindowsPdbVerificationParam) | Out-Null $NumJobs = @(Get-Job -State 'Running').Count @@ -247,11 +267,11 @@ function CheckSymbolsAvailable { if ($TotalFailures -gt 0 -or $DupedSymbols -gt 0) { if ($TotalFailures -gt 0) { - Write-PipelineTelemetryError -Category 'CheckSymbols' -Message "Symbols missing for $TotalFailures packages" + Write-PipelineTelemetryError -Category 'CheckSymbols' -Message "Symbols missing for $TotalFailures/$TotalPackages packages" } if ($DupedSymbols -gt 0) { - Write-PipelineTelemetryError -Category 'CheckSymbols' -Message "$DupedSymbols packages had duplicated symbol files" + Write-PipelineTelemetryError -Category 'CheckSymbols' -Message "$DupedSymbols/$TotalPackages packages had duplicated symbol files and could not be extracted" } ExitWithExitCode 1 diff --git a/eng/common/sdk-task.ps1 b/eng/common/sdk-task.ps1 index f55c43c6f47..b1bca63ab1d 100644 --- a/eng/common/sdk-task.ps1 +++ b/eng/common/sdk-task.ps1 @@ -34,7 +34,7 @@ function Print-Usage() { function Build([string]$target) { $logSuffix = if ($target -eq 'Execute') { '' } else { ".$target" } $log = Join-Path $LogDir "$task$logSuffix.binlog" - $outputPath = Join-Path $ToolsetDir "$task\\" + $outputPath = Join-Path $ToolsetDir "$task\" MSBuild $taskProject ` /bl:$log ` @@ -53,7 +53,7 @@ try { } if ($task -eq "") { - Write-PipelineTelemetryError -Category 'Build' -Message "Missing required parameter '-task '" -ForegroundColor Red + Write-PipelineTelemetryError -Category 'Build' -Message "Missing required parameter '-task '" Print-Usage ExitWithExitCode 1 } @@ -64,7 +64,7 @@ try { $GlobalJson.tools | Add-Member -Name "vs" -Value (ConvertFrom-Json "{ `"version`": `"16.5`" }") -MemberType NoteProperty } if( -not ($GlobalJson.tools.PSObject.Properties.Name -match "xcopy-msbuild" )) { - $GlobalJson.tools | Add-Member -Name "xcopy-msbuild" -Value "16.8.0-preview3" -MemberType NoteProperty + $GlobalJson.tools | Add-Member -Name "xcopy-msbuild" -Value "16.10.0-preview2" -MemberType NoteProperty } if ($GlobalJson.tools."xcopy-msbuild".Trim() -ine "none") { $xcopyMSBuildToolsFolder = InitializeXCopyMSBuild $GlobalJson.tools."xcopy-msbuild" -install $true @@ -78,7 +78,7 @@ try { $taskProject = GetSdkTaskProject $task if (!(Test-Path $taskProject)) { - Write-PipelineTelemetryError -Category 'Build' -Message "Unknown task: $task" -ForegroundColor Red + Write-PipelineTelemetryError -Category 'Build' -Message "Unknown task: $task" ExitWithExitCode 1 } diff --git a/eng/common/sdl/execute-all-sdl-tools.ps1 b/eng/common/sdl/execute-all-sdl-tools.ps1 index b681d797cda..2881a56083c 100644 --- a/eng/common/sdl/execute-all-sdl-tools.ps1 +++ b/eng/common/sdl/execute-all-sdl-tools.ps1 @@ -32,7 +32,7 @@ try { $ErrorActionPreference = 'Stop' Set-StrictMode -Version 2.0 $disableConfigureToolsetImport = $true - $LASTEXITCODE = 0 + $global:LASTEXITCODE = 0 # `tools.ps1` checks $ci to perform some actions. Since the SDL # scripts don't necessarily execute in the same agent that run the @@ -87,10 +87,6 @@ try { & $(Join-Path $PSScriptRoot 'run-sdl.ps1') -GuardianCliLocation $guardianCliLocation -WorkingDirectory $workingDirectory -TargetDirectory $SourceDirectory -GdnFolder $gdnFolder -ToolsList $SourceToolsList -AzureDevOpsAccessToken $AzureDevOpsAccessToken -UpdateBaseline $UpdateBaseline -GuardianLoggerLevel $GuardianLoggerLevel -CrScanAdditionalRunConfigParams $CrScanAdditionalRunConfigParams -PoliCheckAdditionalRunConfigParams $PoliCheckAdditionalRunConfigParams } - if ($UpdateBaseline) { - & (Join-Path $PSScriptRoot 'push-gdn.ps1') -Repository $RepoName -BranchName $BranchName -GdnFolder $GdnFolder -AzureDevOpsAccessToken $AzureDevOpsAccessToken -PushReason 'Update baseline' - } - if ($TsaPublish) { if ($TsaBranchName -and $BuildNumber) { if (-not $TsaRepositoryName) { diff --git a/eng/common/sdl/init-sdl.ps1 b/eng/common/sdl/init-sdl.ps1 index a68bf0b88ea..3ac1d92b370 100644 --- a/eng/common/sdl/init-sdl.ps1 +++ b/eng/common/sdl/init-sdl.ps1 @@ -10,7 +10,7 @@ Param( $ErrorActionPreference = 'Stop' Set-StrictMode -Version 2.0 $disableConfigureToolsetImport = $true -$LASTEXITCODE = 0 +$global:LASTEXITCODE = 0 # `tools.ps1` checks $ci to perform some actions. Since the SDL # scripts don't necessarily execute in the same agent that run the @@ -29,18 +29,7 @@ $zipFile = "$WorkingDirectory/gdn.zip" Add-Type -AssemblyName System.IO.Compression.FileSystem $gdnFolder = (Join-Path $WorkingDirectory '.gdn') -try { - # We try to download the zip; if the request fails (e.g. the file doesn't exist), we catch it and init guardian instead - Write-Host 'Downloading gdn folder from internal config repostiory...' - Invoke-WebRequest -Headers @{ "Accept"="application/zip"; "Authorization"="Basic $encodedPat" } -Uri $uri -OutFile $zipFile - if (Test-Path $gdnFolder) { - # Remove the gdn folder if it exists (it shouldn't unless there's too much caching; this is just in case) - Remove-Item -Force -Recurse $gdnFolder - } - [System.IO.Compression.ZipFile]::ExtractToDirectory($zipFile, $WorkingDirectory) - Write-Host $gdnFolder - ExitWithExitCode 0 -} catch [System.Net.WebException] { } # Catch and ignore webexception + try { # if the folder does not exist, we'll do a guardian init and push it to the remote repository Write-Host 'Initializing Guardian...' @@ -57,7 +46,6 @@ try { Write-PipelineTelemetryError -Force -Category 'Build' -Message "Guardian baseline failed with exit code $LASTEXITCODE." ExitWithExitCode $LASTEXITCODE } - & $(Join-Path $PSScriptRoot 'push-gdn.ps1') -Repository $Repository -BranchName $BranchName -GdnFolder $gdnFolder -AzureDevOpsAccessToken $AzureDevOpsAccessToken -PushReason 'Initialize gdn folder' ExitWithExitCode 0 } catch { diff --git a/eng/common/sdl/packages.config b/eng/common/sdl/packages.config index 968b39bef5f..3bd8b29ebd7 100644 --- a/eng/common/sdl/packages.config +++ b/eng/common/sdl/packages.config @@ -1,4 +1,4 @@ - + diff --git a/eng/common/sdl/push-gdn.ps1 b/eng/common/sdl/push-gdn.ps1 deleted file mode 100644 index d8fd2d82a68..00000000000 --- a/eng/common/sdl/push-gdn.ps1 +++ /dev/null @@ -1,69 +0,0 @@ -Param( - [string] $Repository, - [string] $BranchName='master', - [string] $GdnFolder, - [string] $AzureDevOpsAccessToken, - [string] $PushReason -) - -$ErrorActionPreference = 'Stop' -Set-StrictMode -Version 2.0 -$disableConfigureToolsetImport = $true -$LASTEXITCODE = 0 - -try { - # `tools.ps1` checks $ci to perform some actions. Since the SDL - # scripts don't necessarily execute in the same agent that run the - # build.ps1/sh script this variable isn't automatically set. - $ci = $true - . $PSScriptRoot\..\tools.ps1 - - # We create the temp directory where we'll store the sdl-config repository - $sdlDir = Join-Path $env:TEMP 'sdl' - if (Test-Path $sdlDir) { - Remove-Item -Force -Recurse $sdlDir - } - - Write-Host "git clone https://dnceng:`$AzureDevOpsAccessToken@dev.azure.com/dnceng/internal/_git/sdl-tool-cfg $sdlDir" - git clone https://dnceng:$AzureDevOpsAccessToken@dev.azure.com/dnceng/internal/_git/sdl-tool-cfg $sdlDir - if ($LASTEXITCODE -ne 0) { - Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Git clone failed with exit code $LASTEXITCODE." - ExitWithExitCode $LASTEXITCODE - } - # We copy the .gdn folder from our local run into the git repository so it can be committed - $sdlRepositoryFolder = Join-Path (Join-Path (Join-Path $sdlDir $Repository) $BranchName) '.gdn' - if (Get-Command Robocopy) { - Robocopy /S $GdnFolder $sdlRepositoryFolder - } else { - rsync -r $GdnFolder $sdlRepositoryFolder - } - # cd to the sdl-config directory so we can run git there - Push-Location $sdlDir - # git add . --> git commit --> git push - Write-Host 'git add .' - git add . - if ($LASTEXITCODE -ne 0) { - Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Git add failed with exit code $LASTEXITCODE." - ExitWithExitCode $LASTEXITCODE - } - Write-Host "git -c user.email=`"dn-bot@microsoft.com`" -c user.name=`"Dotnet Bot`" commit -m `"$PushReason for $Repository/$BranchName`"" - git -c user.email="dn-bot@microsoft.com" -c user.name="Dotnet Bot" commit -m "$PushReason for $Repository/$BranchName" - if ($LASTEXITCODE -ne 0) { - Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Git commit failed with exit code $LASTEXITCODE." - ExitWithExitCode $LASTEXITCODE - } - Write-Host 'git push' - git push - if ($LASTEXITCODE -ne 0) { - Write-PipelineTelemetryError -Force -Category 'Sdl' -Message "Git push failed with exit code $LASTEXITCODE." - ExitWithExitCode $LASTEXITCODE - } - - # Return to the original directory - Pop-Location -} -catch { - Write-Host $_.ScriptStackTrace - Write-PipelineTelemetryError -Category 'Sdl' -Message $_ - ExitWithExitCode 1 -} diff --git a/eng/common/sdl/run-sdl.ps1 b/eng/common/sdl/run-sdl.ps1 index fe95ab35aa5..3d9c87aba6a 100644 --- a/eng/common/sdl/run-sdl.ps1 +++ b/eng/common/sdl/run-sdl.ps1 @@ -13,7 +13,7 @@ Param( $ErrorActionPreference = 'Stop' Set-StrictMode -Version 2.0 $disableConfigureToolsetImport = $true -$LASTEXITCODE = 0 +$global:LASTEXITCODE = 0 try { # `tools.ps1` checks $ci to perform some actions. Since the SDL diff --git a/eng/common/templates/job/execute-sdl.yml b/eng/common/templates/job/execute-sdl.yml index c64c4f5686c..4a32181fd8f 100644 --- a/eng/common/templates/job/execute-sdl.yml +++ b/eng/common/templates/job/execute-sdl.yml @@ -45,6 +45,7 @@ jobs: buildId: $(AzDOBuildId) artifactName: ${{ artifactName }} downloadPath: $(Build.ArtifactStagingDirectory)\artifacts + checkDownloadedFiles: true - ${{ if eq(parameters.artifactNames, '') }}: - task: DownloadBuildArtifacts@0 displayName: Download Build Artifacts @@ -57,6 +58,7 @@ jobs: downloadType: specific files itemPattern: "**" downloadPath: $(Build.ArtifactStagingDirectory)\artifacts + checkDownloadedFiles: true - powershell: eng/common/sdl/extract-artifact-packages.ps1 -InputPath $(Build.ArtifactStagingDirectory)\artifacts\BlobArtifacts -ExtractPath $(Build.ArtifactStagingDirectory)\artifacts\BlobArtifacts @@ -83,7 +85,7 @@ jobs: continueOnError: ${{ parameters.sdlContinueOnError }} - ${{ if eq(parameters.overrideParameters, '') }}: - powershell: eng/common/sdl/execute-all-sdl-tools.ps1 - -GuardianPackageName Microsoft.Guardian.Cli.win10-x64.0.20.1 + -GuardianPackageName Microsoft.Guardian.Cli.0.53.3 -NugetPackageDirectory $(Build.SourcesDirectory)\.packages -AzureDevOpsAccessToken $(dn-bot-dotnet-build-rw-code-rw) ${{ parameters.additionalParameters }} diff --git a/eng/common/templates/job/onelocbuild.yml b/eng/common/templates/job/onelocbuild.yml new file mode 100644 index 00000000000..e8bc77d2ebb --- /dev/null +++ b/eng/common/templates/job/onelocbuild.yml @@ -0,0 +1,93 @@ +parameters: + # Optional: dependencies of the job + dependsOn: '' + + # Optional: A defined YAML pool - https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=vsts&tabs=schema#pool + pool: + vmImage: vs2017-win2016 + + CeapexPat: $(dn-bot-ceapex-package-r) # PAT for the loc AzDO instance https://dev.azure.com/ceapex + GithubPat: $(BotAccount-dotnet-bot-repo-PAT) + + SourcesDirectory: $(Build.SourcesDirectory) + CreatePr: true + AutoCompletePr: false + UseLfLineEndings: true + UseCheckedInLocProjectJson: false + LanguageSet: VS_Main_Languages + LclSource: lclFilesInRepo + LclPackageId: '' + RepoType: gitHub + GitHubOrg: dotnet + MirrorRepo: '' + MirrorBranch: main + condition: '' + +jobs: +- job: OneLocBuild + + dependsOn: ${{ parameters.dependsOn }} + + displayName: OneLocBuild + + pool: ${{ parameters.pool }} + + variables: + - group: OneLocBuildVariables # Contains the CeapexPat and GithubPat + - name: _GenerateLocProjectArguments + value: -SourcesDirectory ${{ parameters.SourcesDirectory }} + -LanguageSet "${{ parameters.LanguageSet }}" + -CreateNeutralXlfs + - ${{ if eq(parameters.UseCheckedInLocProjectJson, 'true') }}: + - name: _GenerateLocProjectArguments + value: ${{ variables._GenerateLocProjectArguments }} -UseCheckedInLocProjectJson + + + steps: + - task: Powershell@2 + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/generate-locproject.ps1 + arguments: $(_GenerateLocProjectArguments) + displayName: Generate LocProject.json + condition: ${{ parameters.condition }} + + - task: OneLocBuild@2 + displayName: OneLocBuild + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + inputs: + locProj: eng/Localize/LocProject.json + outDir: $(Build.ArtifactStagingDirectory) + lclSource: ${{ parameters.LclSource }} + lclPackageId: ${{ parameters.LclPackageId }} + isCreatePrSelected: ${{ parameters.CreatePr }} + ${{ if eq(parameters.CreatePr, true) }}: + isAutoCompletePrSelected: ${{ parameters.AutoCompletePr }} + isUseLfLineEndingsSelected: ${{ parameters.UseLfLineEndings }} + packageSourceAuth: patAuth + patVariable: ${{ parameters.CeapexPat }} + ${{ if eq(parameters.RepoType, 'gitHub') }}: + repoType: ${{ parameters.RepoType }} + gitHubPatVariable: "${{ parameters.GithubPat }}" + ${{ if ne(parameters.MirrorRepo, '') }}: + isMirrorRepoSelected: true + gitHubOrganization: ${{ parameters.GitHubOrg }} + mirrorRepo: ${{ parameters.MirrorRepo }} + mirrorBranch: ${{ parameters.MirrorBranch }} + condition: ${{ parameters.condition }} + + - task: PublishBuildArtifacts@1 + displayName: Publish Localization Files + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)/loc' + PublishLocation: Container + ArtifactName: Loc + condition: ${{ parameters.condition }} + + - task: PublishBuildArtifacts@1 + displayName: Publish LocProject.json + inputs: + PathtoPublish: '$(Build.SourcesDirectory)/eng/Localize/' + PublishLocation: Container + ArtifactName: Loc + condition: ${{ parameters.condition }} \ No newline at end of file diff --git a/eng/common/templates/job/performance.yml b/eng/common/templates/job/performance.yml deleted file mode 100644 index f877fd7a898..00000000000 --- a/eng/common/templates/job/performance.yml +++ /dev/null @@ -1,95 +0,0 @@ -parameters: - steps: [] # optional -- any additional steps that need to happen before pulling down the performance repo and sending the performance benchmarks to helix (ie building your repo) - variables: [] # optional -- list of additional variables to send to the template - jobName: '' # required -- job name - displayName: '' # optional -- display name for the job. Will use jobName if not passed - pool: '' # required -- name of the Build pool - container: '' # required -- name of the container - osGroup: '' # required -- operating system for the job - extraSetupParameters: '' # optional -- extra arguments to pass to the setup script - frameworks: ['netcoreapp3.0'] # optional -- list of frameworks to run against - continueOnError: 'false' # optional -- determines whether to continue the build if the step errors - dependsOn: '' # optional -- dependencies of the job - timeoutInMinutes: 320 # optional -- timeout for the job - enableTelemetry: false # optional -- enable for telemetry - -jobs: -- template: ../jobs/jobs.yml - parameters: - dependsOn: ${{ parameters.dependsOn }} - enableTelemetry: ${{ parameters.enableTelemetry }} - enablePublishBuildArtifacts: true - continueOnError: ${{ parameters.continueOnError }} - - jobs: - - job: '${{ parameters.jobName }}' - - ${{ if ne(parameters.displayName, '') }}: - displayName: '${{ parameters.displayName }}' - ${{ if eq(parameters.displayName, '') }}: - displayName: '${{ parameters.jobName }}' - - timeoutInMinutes: ${{ parameters.timeoutInMinutes }} - - variables: - - - ${{ each variable in parameters.variables }}: - - ${{ if ne(variable.name, '') }}: - - name: ${{ variable.name }} - value: ${{ variable.value }} - - ${{ if ne(variable.group, '') }}: - - group: ${{ variable.group }} - - - IsInternal: '' - - HelixApiAccessToken: '' - - HelixPreCommand: '' - - - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - ${{ if eq( parameters.osGroup, 'Windows_NT') }}: - - HelixPreCommand: 'set "PERFLAB_UPLOAD_TOKEN=$(PerfCommandUploadToken)"' - - IsInternal: -Internal - - ${{ if ne(parameters.osGroup, 'Windows_NT') }}: - - HelixPreCommand: 'export PERFLAB_UPLOAD_TOKEN="$(PerfCommandUploadTokenLinux)"' - - IsInternal: --internal - - - group: DotNet-HelixApi-Access - - group: dotnet-benchview - - workspace: - clean: all - pool: - ${{ parameters.pool }} - container: ${{ parameters.container }} - strategy: - matrix: - ${{ each framework in parameters.frameworks }}: - ${{ framework }}: - _Framework: ${{ framework }} - steps: - - checkout: self - clean: true - # Run all of the steps to setup repo - - ${{ each step in parameters.steps }}: - - ${{ step }} - - powershell: $(Build.SourcesDirectory)\eng\common\performance\performance-setup.ps1 $(IsInternal) -Framework $(_Framework) ${{ parameters.extraSetupParameters }} - displayName: Performance Setup (Windows) - condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT')) - continueOnError: ${{ parameters.continueOnError }} - - script: $(Build.SourcesDirectory)/eng/common/performance/performance-setup.sh $(IsInternal) --framework $(_Framework) ${{ parameters.extraSetupParameters }} - displayName: Performance Setup (Unix) - condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) - continueOnError: ${{ parameters.continueOnError }} - - script: $(Python) $(PerformanceDirectory)/scripts/ci_setup.py $(SetupArguments) - displayName: Run ci setup script - # Run perf testing in helix - - template: /eng/common/templates/steps/perf-send-to-helix.yml - parameters: - HelixSource: '$(HelixSourcePrefix)/$(Build.Repository.Name)/$(Build.SourceBranch)' # sources must start with pr/, official/, prodcon/, or agent/ - HelixType: 'test/performance/$(Kind)/$(_Framework)/$(Architecture)' - HelixAccessToken: $(HelixApiAccessToken) - HelixTargetQueues: $(Queue) - HelixPreCommands: $(HelixPreCommand) - Creator: $(Creator) - WorkItemTimeout: 4:00 # 4 hours - WorkItemDirectory: '$(WorkItemDirectory)' # WorkItemDirectory can not be empty, so we send it some docs to keep it happy - CorrelationPayloadDirectory: '$(PayloadDirectory)' # it gets checked out to a folder with shorter path than WorkItemDirectory so we can avoid file name too long exceptions \ No newline at end of file diff --git a/eng/common/templates/job/publish-build-assets.yml b/eng/common/templates/job/publish-build-assets.yml index d0c3cc2b3ba..3b9e2524ff3 100644 --- a/eng/common/templates/job/publish-build-assets.yml +++ b/eng/common/templates/job/publish-build-assets.yml @@ -37,6 +37,7 @@ jobs: - name: _BuildConfig value: ${{ parameters.configuration }} - group: Publish-Build-Assets + - group: AzureDevOps-Artifact-Feeds-Pats # Skip component governance and codesign validation for SDL. These jobs # create no content. - name: skipComponentGovernanceDetection @@ -51,12 +52,19 @@ jobs: inputs: artifactName: AssetManifests downloadPath: '$(Build.StagingDirectory)/Download' + checkDownloadedFiles: true condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - task: NuGetAuthenticate@0 + - task: PowerShell@2 + displayName: Enable cross-org NuGet feed authentication + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/enable-cross-org-publishing.ps1 + arguments: -token $(dn-bot-all-orgs-artifact-feeds-rw) + - task: PowerShell@2 displayName: Publish Build Assets inputs: diff --git a/eng/common/templates/job/source-build.yml b/eng/common/templates/job/source-build.yml index 9332f5ecc38..5023d36dcb3 100644 --- a/eng/common/templates/job/source-build.yml +++ b/eng/common/templates/job/source-build.yml @@ -15,6 +15,9 @@ parameters: # nonPortable: false # Enables non-portable mode. This means a more specific RID (e.g. fedora.32-x64 rather than # linux-x64), and compiling against distro-provided packages rather than portable ones. + # skipPublishValidation: false + # Disables publishing validation. By default, a check is performed to ensure no packages are + # published by source-build. # container: '' # A container to use. Runs in docker. # pool: {} @@ -28,6 +31,11 @@ parameters: # container and pool. platform: {} + # The default VM host AzDO pool. This should be capable of running Docker containers: almost all + # source-build builds run in Docker, including the default managed platform. + defaultContainerHostPool: + vmImage: ubuntu-20.04 + jobs: - job: ${{ parameters.jobNamePrefix }}_${{ parameters.platform.name }} displayName: Source-Build (${{ parameters.platform.name }}) @@ -37,6 +45,9 @@ jobs: ${{ if ne(parameters.platform.container, '') }}: container: ${{ parameters.platform.container }} + + ${{ if eq(parameters.platform.pool, '') }}: + pool: ${{ parameters.defaultContainerHostPool }} ${{ if ne(parameters.platform.pool, '') }}: pool: ${{ parameters.platform.pool }} diff --git a/eng/common/templates/job/source-index-stage1.yml b/eng/common/templates/job/source-index-stage1.yml new file mode 100644 index 00000000000..b58d42364b9 --- /dev/null +++ b/eng/common/templates/job/source-index-stage1.yml @@ -0,0 +1,62 @@ +parameters: + runAsPublic: false + sourceIndexPackageVersion: 1.0.1-20210614.1 + sourceIndexPackageSource: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json + sourceIndexBuildCommand: powershell -NoLogo -NoProfile -ExecutionPolicy Bypass -Command "eng/common/build.ps1 -restore -build -binarylog -ci" + preSteps: [] + binlogPath: artifacts/log/Debug/Build.binlog + pool: + vmImage: vs2017-win2016 + condition: '' + dependsOn: '' + +jobs: +- job: SourceIndexStage1 + dependsOn: ${{ parameters.dependsOn }} + condition: ${{ parameters.condition }} + variables: + - name: SourceIndexPackageVersion + value: ${{ parameters.sourceIndexPackageVersion }} + - name: SourceIndexPackageSource + value: ${{ parameters.sourceIndexPackageSource }} + - name: BinlogPath + value: ${{ parameters.binlogPath }} + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - group: source-dot-net stage1 variables + + pool: ${{ parameters.pool }} + steps: + - ${{ each preStep in parameters.preSteps }}: + - ${{ preStep }} + + - task: UseDotNet@2 + displayName: Use .NET Core sdk 3.1 + inputs: + packageType: sdk + version: 3.1.x + + - task: UseDotNet@2 + displayName: Use .NET Core sdk + inputs: + useGlobalJson: true + + - script: | + dotnet tool install BinLogToSln --version $(SourceIndexPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path .source-index/tools + dotnet tool install UploadIndexStage1 --version $(SourceIndexPackageVersion) --add-source $(SourceIndexPackageSource) --tool-path .source-index/tools + echo ##vso[task.prependpath]$(Build.SourcesDirectory)/.source-index/tools + displayName: Download Tools + + - script: ${{ parameters.sourceIndexBuildCommand }} + displayName: Build Repository + + - script: BinLogToSln -i $(BinlogPath) -r $(Build.SourcesDirectory) -n $(Build.Repository.Name) -o .source-index/stage1output + displayName: Process Binlog into indexable sln + env: + DOTNET_ROLL_FORWARD_ON_NO_CANDIDATE_FX: 2 + + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - script: UploadIndexStage1 -i .source-index/stage1output -n $(Build.Repository.Name) + displayName: Upload stage1 artifacts to source index + env: + BLOB_CONTAINER_URL: $(source-dot-net-stage1-blob-container-url) + DOTNET_ROLL_FORWARD_ON_NO_CANDIDATE_FX: 2 diff --git a/eng/common/templates/jobs/jobs.yml b/eng/common/templates/jobs/jobs.yml index 08845950f44..a1f8fce96ca 100644 --- a/eng/common/templates/jobs/jobs.yml +++ b/eng/common/templates/jobs/jobs.yml @@ -7,7 +7,14 @@ parameters: # Optional: Enable publishing using release pipelines enablePublishUsingPipelines: false - + + # Optional: Enable running the source-build jobs to build repo from source + enableSourceBuild: false + + # Optional: Parameters for source-build template. + # See /eng/common/templates/jobs/source-build.yml for options + sourceBuildParameters: [] + graphFileGeneration: # Optional: Enable generating the graph files at the end of the build enabled: false @@ -24,12 +31,8 @@ parameters: # if 'true', the build won't run any of the internal only steps, even if it is running in non-public projects. runAsPublic: false - # Optional: Enable running the source-build jobs to build repo from source - runSourceBuild: false - - # Optional: Parameters for source-build template. - # See /eng/common/templates/jobs/source-build.yml for options - sourceBuildParameters: [] + enableSourceIndex: false + sourceIndexParams: {} # Internal resources (telemetry, microbuild) can only be accessed from non-public projects, # and some (Microbuild) should only be applied to non-PR cases for internal builds. @@ -50,14 +53,22 @@ jobs: name: ${{ job.job }} -- ${{ if eq(parameters.runSourceBuild, true) }}: +- ${{ if eq(parameters.enableSourceBuild, true) }}: - template: /eng/common/templates/jobs/source-build.yml parameters: allCompletedJobId: Source_Build_Complete ${{ each parameter in parameters.sourceBuildParameters }}: ${{ parameter.key }}: ${{ parameter.value }} +- ${{ if eq(parameters.enableSourceIndex, 'true') }}: + - template: ../job/source-index-stage1.yml + parameters: + runAsPublic: ${{ parameters.runAsPublic }} + ${{ each parameter in parameters.sourceIndexParams }}: + ${{ parameter.key }}: ${{ parameter.value }} + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - ${{ if or(eq(parameters.enablePublishBuildAssets, true), eq(parameters.artifacts.publish.manifests, 'true'), ne(parameters.artifacts.publish.manifests, '')) }}: - template: ../job/publish-build-assets.yml parameters: @@ -69,7 +80,7 @@ jobs: - ${{ if eq(parameters.publishBuildAssetsDependsOn, '') }}: - ${{ each job in parameters.jobs }}: - ${{ job.job }} - - ${{ if eq(parameters.runSourceBuild, true) }}: + - ${{ if eq(parameters.enableSourceBuild, true) }}: - Source_Build_Complete pool: vmImage: vs2017-win2016 diff --git a/eng/common/templates/jobs/source-build.yml b/eng/common/templates/jobs/source-build.yml index f463011e793..00aa98eb3bf 100644 --- a/eng/common/templates/jobs/source-build.yml +++ b/eng/common/templates/jobs/source-build.yml @@ -11,16 +11,14 @@ parameters: # See /eng/common/templates/job/source-build.yml jobNamePrefix: 'Source_Build' - # If changed to true, causes this template to include the default platform for a managed-only - # repo. The exact Docker image used for this build will be provided by Arcade. This has some risk, - # but since the repo is supposed to be managed-only, the risk should be very low. - includeDefaultManagedPlatform: false + # This is the default platform provided by Arcade, intended for use by a managed-only repo. defaultManagedPlatform: name: 'Managed' container: 'mcr.microsoft.com/dotnet-buildtools/prereqs:centos-7-3e800f1-20190501005343' # Defines the platforms on which to run build jobs. One job is created for each platform, and the - # object in this array is sent to the job template as 'platform'. + # object in this array is sent to the job template as 'platform'. If no platforms are specified, + # one job runs on 'defaultManagedPlatform'. platforms: [] jobs: @@ -32,7 +30,7 @@ jobs: dependsOn: - ${{ each platform in parameters.platforms }}: - ${{ parameters.jobNamePrefix }}_${{ platform.name }} - - ${{ if eq(parameters.includeDefaultManagedPlatform, true) }}: + - ${{ if eq(length(parameters.platforms), 0) }}: - ${{ parameters.jobNamePrefix }}_${{ parameters.defaultManagedPlatform.name }} - ${{ each platform in parameters.platforms }}: @@ -41,7 +39,7 @@ jobs: jobNamePrefix: ${{ parameters.jobNamePrefix }} platform: ${{ platform }} -- ${{ if eq(parameters.includeDefaultManagedPlatform, true) }}: +- ${{ if eq(length(parameters.platforms), 0) }}: - template: /eng/common/templates/job/source-build.yml parameters: jobNamePrefix: ${{ parameters.jobNamePrefix }} diff --git a/eng/common/templates/phases/publish-build-assets.yml b/eng/common/templates/phases/publish-build-assets.yml index a0a8074282a..4e51e472e2b 100644 --- a/eng/common/templates/phases/publish-build-assets.yml +++ b/eng/common/templates/phases/publish-build-assets.yml @@ -20,6 +20,7 @@ phases: inputs: artifactName: AssetManifests downloadPath: '$(Build.StagingDirectory)/Download' + checkDownloadedFiles: true condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} - task: AzureKeyVault@1 diff --git a/eng/common/templates/post-build/channels/generic-internal-channel.yml b/eng/common/templates/post-build/channels/generic-internal-channel.yml index 7ae5255921a..8990dfc8c87 100644 --- a/eng/common/templates/post-build/channels/generic-internal-channel.yml +++ b/eng/common/templates/post-build/channels/generic-internal-channel.yml @@ -40,6 +40,9 @@ stages: pool: vmImage: 'windows-2019' steps: + - script: echo "##vso[task.logissue type=warning]Going forward, v2 Arcade publishing is no longer supported. Please read https://github.com/dotnet/arcade/blob/main/Documentation/CorePackages/Publishing.md for details, then contact dnceng if you have further questions." + displayName: Warn about v2 Arcade Publishing Usage + # This is necessary whenever we want to publish/restore to an AzDO private feed - task: NuGetAuthenticate@0 displayName: 'Authenticate to AzDO Feeds' @@ -58,6 +61,7 @@ stages: PdbArtifacts/** BlobArtifacts/** downloadPath: '$(Build.ArtifactStagingDirectory)' + checkDownloadedFiles: true # This is necessary whenever we want to publish/restore to an AzDO private feed # Since sdk-task.ps1 tries to restore packages we need to do this authentication here @@ -109,6 +113,9 @@ stages: pool: vmImage: 'windows-2019' steps: + - script: echo "##vso[task.logissue type=warning]Going forward, v2 Arcade publishing is no longer supported. Please read https://github.com/dotnet/arcade/blob/main/Documentation/CorePackages/Publishing.md for details, then contact dnceng if you have further questions." + displayName: Warn about v2 Arcade Publishing Usage + - task: DownloadBuildArtifacts@0 displayName: Download Build Assets continueOnError: true @@ -124,6 +131,7 @@ stages: BlobArtifacts/** AssetManifests/** downloadPath: '$(Build.ArtifactStagingDirectory)' + checkDownloadedFiles: true - task: NuGetToolInstaller@1 displayName: 'Install NuGet.exe' diff --git a/eng/common/templates/post-build/channels/generic-public-channel.yml b/eng/common/templates/post-build/channels/generic-public-channel.yml index 6cf39dbb290..3220c6a4f92 100644 --- a/eng/common/templates/post-build/channels/generic-public-channel.yml +++ b/eng/common/templates/post-build/channels/generic-public-channel.yml @@ -42,6 +42,9 @@ stages: pool: vmImage: 'windows-2019' steps: + - script: echo "##vso[task.logissue type=warning]Going forward, v2 Arcade publishing is no longer supported. Please read https://github.com/dotnet/arcade/blob/main/Documentation/CorePackages/Publishing.md for details, then contact dnceng if you have further questions." + displayName: Warn about v2 Arcade Publishing Usage + - task: DownloadBuildArtifacts@0 displayName: Download Build Assets continueOnError: true @@ -56,6 +59,7 @@ stages: PdbArtifacts/** BlobArtifacts/** downloadPath: '$(Build.ArtifactStagingDirectory)' + checkDownloadedFiles: true # This is necessary whenever we want to publish/restore to an AzDO private feed # Since sdk-task.ps1 tries to restore packages we need to do this authentication here @@ -108,6 +112,9 @@ stages: pool: vmImage: 'windows-2019' steps: + - script: echo "##vso[task.logissue type=warning]Going forward, v2 Arcade publishing is no longer supported. Please read https://github.com/dotnet/arcade/blob/main/Documentation/CorePackages/Publishing.md for details, then contact dnceng if you have further questions." + displayName: Warn about v2 Arcade Publishing Usage + - task: DownloadBuildArtifacts@0 displayName: Download Build Assets continueOnError: true @@ -123,6 +130,7 @@ stages: BlobArtifacts/** AssetManifests/** downloadPath: '$(Build.ArtifactStagingDirectory)' + checkDownloadedFiles: true - task: NuGetToolInstaller@1 displayName: 'Install NuGet.exe' diff --git a/eng/common/templates/post-build/post-build.yml b/eng/common/templates/post-build/post-build.yml index 41f2d96a608..4f79cf0f337 100644 --- a/eng/common/templates/post-build/post-build.yml +++ b/eng/common/templates/post-build/post-build.yml @@ -61,7 +61,9 @@ parameters: VS167ChannelId: 1011 VS168ChannelId: 1154 VSMasterChannelId: 1012 - + VS169ChannelId: 1473 + VS1610ChannelId: 1692 + stages: - ${{ if or(and(le(parameters.publishingInfraVersion, 2), eq(parameters.inline, 'true')), eq( parameters.enableNugetValidation, 'true'), eq(parameters.enableSigningValidation, 'true'), eq(parameters.enableSourceLinkValidation, 'true'), eq(parameters.SDLValidationParameters.enable, 'true')) }}: - stage: Validate @@ -90,7 +92,7 @@ stages: inputs: filePath: $(Build.SourcesDirectory)/eng/common/post-build/check-channel-consistency.ps1 arguments: -PromoteToChannels "$(TargetChannels)" - -AvailableChannelIds ${{parameters.NetEngLatestChannelId}},${{parameters.NetEngValidationChannelId}},${{parameters.NetDev5ChannelId}},${{parameters.NetDev6ChannelId}},${{parameters.GeneralTestingChannelId}},${{parameters.NETCoreToolingDevChannelId}},${{parameters.NETCoreToolingReleaseChannelId}},${{parameters.NETInternalToolingChannelId}},${{parameters.NETCoreExperimentalChannelId}},${{parameters.NetEngServicesIntChannelId}},${{parameters.NetEngServicesProdChannelId}},${{parameters.NetCoreSDK313xxChannelId}},${{parameters.NetCoreSDK313xxInternalChannelId}},${{parameters.NetCoreSDK314xxChannelId}},${{parameters.NetCoreSDK314xxInternalChannelId}},${{parameters.VS166ChannelId}},${{parameters.VS167ChannelId}},${{parameters.VS168ChannelId}},${{parameters.VSMasterChannelId}} + -AvailableChannelIds ${{parameters.NetEngLatestChannelId}},${{parameters.NetEngValidationChannelId}},${{parameters.NetDev5ChannelId}},${{parameters.NetDev6ChannelId}},${{parameters.GeneralTestingChannelId}},${{parameters.NETCoreToolingDevChannelId}},${{parameters.NETCoreToolingReleaseChannelId}},${{parameters.NETInternalToolingChannelId}},${{parameters.NETCoreExperimentalChannelId}},${{parameters.NetEngServicesIntChannelId}},${{parameters.NetEngServicesProdChannelId}},${{parameters.NetCoreSDK313xxChannelId}},${{parameters.NetCoreSDK313xxInternalChannelId}},${{parameters.NetCoreSDK314xxChannelId}},${{parameters.NetCoreSDK314xxInternalChannelId}},${{parameters.VS166ChannelId}},${{parameters.VS167ChannelId}},${{parameters.VS168ChannelId}},${{parameters.VSMasterChannelId}},${{parameters.VS169ChannelId}},${{parameters.VS1610ChannelId}} - job: displayName: NuGet Validation @@ -115,6 +117,7 @@ stages: pipeline: $(AzDOPipelineId) buildId: $(AzDOBuildId) artifactName: PackageArtifacts + checkDownloadedFiles: true - task: PowerShell@2 displayName: Validate @@ -126,7 +129,7 @@ stages: - job: displayName: Signing Validation dependsOn: setupMaestroVars - condition: eq( ${{ parameters.enableSigningValidation }}, 'true') + condition: and( eq( ${{ parameters.enableSigningValidation }}, 'true'), ne( variables['PostBuildSign'], 'true')) variables: - template: common-variables.yml - name: AzDOProjectName @@ -147,6 +150,10 @@ stages: pipeline: $(AzDOPipelineId) buildId: $(AzDOBuildId) artifactName: PackageArtifacts + checkDownloadedFiles: true + itemPattern: | + ** + !**/Microsoft.SourceBuild.Intermediate.*.nupkg # This is necessary whenever we want to publish/restore to an AzDO private feed # Since sdk-task.ps1 tries to restore packages we need to do this authentication here @@ -200,6 +207,7 @@ stages: pipeline: $(AzDOPipelineId) buildId: $(AzDOBuildId) artifactName: BlobArtifacts + checkDownloadedFiles: true - task: PowerShell@2 displayName: Validate @@ -224,7 +232,7 @@ stages: - ${{ if or(ge(parameters.publishingInfraVersion, 3), eq(parameters.inline, 'false')) }}: - stage: publish_using_darc ${{ if or(eq(parameters.enableNugetValidation, 'true'), eq(parameters.enableSigningValidation, 'true'), eq(parameters.enableSourceLinkValidation, 'true'), eq(parameters.SDLValidationParameters.enable, 'true')) }}: - dependsOn: Validate + dependsOn: ${{ parameters.publishDependsOn }} ${{ if and(ne(parameters.enableNugetValidation, 'true'), ne(parameters.enableSigningValidation, 'true'), ne(parameters.enableSourceLinkValidation, 'true'), ne(parameters.SDLValidationParameters.enable, 'true')) }}: dependsOn: ${{ parameters.validateDependsOn }} displayName: Publish using Darc @@ -549,3 +557,33 @@ stages: transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-transport/nuget/v3/index.json' shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-symbols/nuget/v3/index.json' + + - template: \eng\common\templates\post-build\channels\generic-public-channel.yml + parameters: + BARBuildId: ${{ parameters.BARBuildId }} + PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + dependsOn: ${{ parameters.publishDependsOn }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'VS_16_9_Publishing' + channelName: 'VS 16.9' + channelId: ${{ parameters.VS169ChannelId }} + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-symbols/nuget/v3/index.json' + + - template: \eng\common\templates\post-build\channels\generic-public-channel.yml + parameters: + BARBuildId: ${{ parameters.BARBuildId }} + PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }} + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + dependsOn: ${{ parameters.publishDependsOn }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + stageName: 'VS_16_10_Publishing' + channelName: 'VS 16.10' + channelId: ${{ parameters.VS1610ChannelId }} + transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-transport/nuget/v3/index.json' + shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' + symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-symbols/nuget/v3/index.json' diff --git a/eng/common/templates/post-build/setup-maestro-vars.yml b/eng/common/templates/post-build/setup-maestro-vars.yml index d0cbfb6c6ff..4a22b2e6f6d 100644 --- a/eng/common/templates/post-build/setup-maestro-vars.yml +++ b/eng/common/templates/post-build/setup-maestro-vars.yml @@ -18,6 +18,7 @@ jobs: inputs: buildType: current artifactName: ReleaseConfigs + checkDownloadedFiles: true - task: PowerShell@2 name: setReleaseVars diff --git a/eng/common/templates/steps/perf-send-to-helix.yml b/eng/common/templates/steps/perf-send-to-helix.yml deleted file mode 100644 index a468e92ce44..00000000000 --- a/eng/common/templates/steps/perf-send-to-helix.yml +++ /dev/null @@ -1,50 +0,0 @@ -# Please remember to update the documentation if you make changes to these parameters! -parameters: - ProjectFile: '' # required -- project file that specifies the helix workitems - HelixSource: 'pr/default' # required -- sources must start with pr/, official/, prodcon/, or agent/ - HelixType: 'tests/default/' # required -- Helix telemetry which identifies what type of data this is; should include "test" for clarity and must end in '/' - HelixBuild: $(Build.BuildNumber) # required -- the build number Helix will use to identify this -- automatically set to the AzDO build number - HelixTargetQueues: '' # required -- semicolon delimited list of Helix queues to test on; see https://helix.dot.net/ for a list of queues - HelixAccessToken: '' # required -- access token to make Helix API requests; should be provided by the appropriate variable group - HelixPreCommands: '' # optional -- commands to run before Helix work item execution - HelixPostCommands: '' # optional -- commands to run after Helix work item execution - WorkItemDirectory: '' # optional -- a payload directory to zip up and send to Helix; requires WorkItemCommand; incompatible with XUnitProjects - CorrelationPayloadDirectory: '' # optional -- a directory to zip up and send to Helix as a correlation payload - IncludeDotNetCli: false # optional -- true will download a version of the .NET CLI onto the Helix machine as a correlation payload; requires DotNetCliPackageType and DotNetCliVersion - DotNetCliPackageType: '' # optional -- either 'sdk', 'runtime' or 'aspnetcore-runtime'; determines whether the sdk or runtime will be sent to Helix; see https://raw.githubusercontent.com/dotnet/core/master/release-notes/releases.json - DotNetCliVersion: '' # optional -- version of the CLI to send to Helix; based on this: https://raw.githubusercontent.com/dotnet/core/master/release-notes/releases.json - EnableXUnitReporter: false # optional -- true enables XUnit result reporting to Mission Control - WaitForWorkItemCompletion: true # optional -- true will make the task wait until work items have been completed and fail the build if work items fail. False is "fire and forget." - Creator: '' # optional -- if the build is external, use this to specify who is sending the job - DisplayNamePrefix: 'Send job to Helix' # optional -- rename the beginning of the displayName of the steps in AzDO - condition: succeeded() # optional -- condition for step to execute; defaults to succeeded() - continueOnError: false # optional -- determines whether to continue the build if the step errors; defaults to false - osGroup: '' # required -- operating system for the job - - -steps: -- template: /eng/pipelines/common/templates/runtimes/send-to-helix-inner-step.yml - parameters: - osGroup: ${{ parameters.osGroup }} - sendParams: $(Build.SourcesDirectory)/eng/common/performance/${{ parameters.ProjectFile }} /restore /t:Test /bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/SendToHelix.binlog - displayName: ${{ parameters.DisplayNamePrefix }} - condition: ${{ parameters.condition }} - continueOnError: ${{ parameters.continueOnError }} - environment: - BuildConfig: $(_BuildConfig) - HelixSource: ${{ parameters.HelixSource }} - HelixType: ${{ parameters.HelixType }} - HelixBuild: ${{ parameters.HelixBuild }} - HelixTargetQueues: ${{ parameters.HelixTargetQueues }} - HelixAccessToken: ${{ parameters.HelixAccessToken }} - HelixPreCommands: ${{ parameters.HelixPreCommands }} - HelixPostCommands: ${{ parameters.HelixPostCommands }} - WorkItemDirectory: ${{ parameters.WorkItemDirectory }} - CorrelationPayloadDirectory: ${{ parameters.CorrelationPayloadDirectory }} - IncludeDotNetCli: ${{ parameters.IncludeDotNetCli }} - DotNetCliPackageType: ${{ parameters.DotNetCliPackageType }} - DotNetCliVersion: ${{ parameters.DotNetCliVersion }} - EnableXUnitReporter: ${{ parameters.EnableXUnitReporter }} - WaitForWorkItemCompletion: ${{ parameters.WaitForWorkItemCompletion }} - Creator: ${{ parameters.Creator }} - SYSTEM_ACCESSTOKEN: $(System.AccessToken) diff --git a/eng/common/templates/steps/send-to-helix.yml b/eng/common/templates/steps/send-to-helix.yml index bb5f1a92938..cd02ae1607f 100644 --- a/eng/common/templates/steps/send-to-helix.yml +++ b/eng/common/templates/steps/send-to-helix.yml @@ -18,8 +18,8 @@ parameters: XUnitRuntimeTargetFramework: '' # optional -- framework to use for the xUnit console runner XUnitRunnerVersion: '' # optional -- version of the xUnit nuget package you wish to use on Helix; required for XUnitProjects IncludeDotNetCli: false # optional -- true will download a version of the .NET CLI onto the Helix machine as a correlation payload; requires DotNetCliPackageType and DotNetCliVersion - DotNetCliPackageType: '' # optional -- either 'sdk', 'runtime' or 'aspnetcore-runtime'; determines whether the sdk or runtime will be sent to Helix; see https://raw.githubusercontent.com/dotnet/core/master/release-notes/releases-index.json - DotNetCliVersion: '' # optional -- version of the CLI to send to Helix; based on this: https://raw.githubusercontent.com/dotnet/core/master/release-notes/releases-index.json + DotNetCliPackageType: '' # optional -- either 'sdk', 'runtime' or 'aspnetcore-runtime'; determines whether the sdk or runtime will be sent to Helix; see https://raw.githubusercontent.com/dotnet/core/main/release-notes/releases-index.json + DotNetCliVersion: '' # optional -- version of the CLI to send to Helix; based on this: https://raw.githubusercontent.com/dotnet/core/main/release-notes/releases-index.json EnableXUnitReporter: false # optional -- true enables XUnit result reporting to Mission Control WaitForWorkItemCompletion: true # optional -- true will make the task wait until work items have been completed and fail the build if work items fail. False is "fire and forget." IsExternal: false # [DEPRECATED] -- doesn't do anything, jobs are external if HelixAccessToken is empty and Creator is set diff --git a/eng/common/templates/steps/source-build.yml b/eng/common/templates/steps/source-build.yml index 8e336b7d16b..e20637ed6a1 100644 --- a/eng/common/templates/steps/source-build.yml +++ b/eng/common/templates/steps/source-build.yml @@ -34,9 +34,14 @@ steps: targetRidArgs='/p:TargetRid=${{ parameters.platform.targetRID }}' fi + publishArgs= + if [ '${{ parameters.platform.skipPublishValidation }}' != 'true' ]; then + publishArgs='--publish' + fi + ${{ coalesce(parameters.platform.buildScript, './build.sh') }} --ci \ --configuration $buildConfig \ - --restore --build --pack --publish \ + --restore --build --pack $publishArgs -bl \ $officialBuildArgs \ $targetRidArgs \ /p:SourceBuildNonPortable=${{ parameters.platform.nonPortable }} \ diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index bc8b66e2943..5619c7aaee1 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -48,6 +48,9 @@ # True to use global NuGet cache instead of restoring packages to repository-local directory. [bool]$useGlobalNuGetCache = if (Test-Path variable:useGlobalNuGetCache) { $useGlobalNuGetCache } else { !$ci } +# True to exclude prerelease versions Visual Studio during build +[bool]$excludePrereleaseVS = if (Test-Path variable:excludePrereleaseVS) { $excludePrereleaseVS } else { $false } + # An array of names of processes to stop on script exit if prepareMachine is true. $processesToStopOnExit = if (Test-Path variable:processesToStopOnExit) { $processesToStopOnExit } else { @('msbuild', 'dotnet', 'vbcscompiler') } @@ -141,7 +144,7 @@ function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) { # Use dotnet installation specified in DOTNET_INSTALL_DIR if it contains the required SDK version, # otherwise install the dotnet CLI and SDK to repo local .dotnet directory to avoid potential permission issues. - if ((-not $globalJsonHasRuntimes) -and ($env:DOTNET_INSTALL_DIR -ne $null) -and (Test-Path(Join-Path $env:DOTNET_INSTALL_DIR "sdk\$dotnetSdkVersion"))) { + if ((-not $globalJsonHasRuntimes) -and (-not [string]::IsNullOrEmpty($env:DOTNET_INSTALL_DIR)) -and (Test-Path(Join-Path $env:DOTNET_INSTALL_DIR "sdk\$dotnetSdkVersion"))) { $dotnetRoot = $env:DOTNET_INSTALL_DIR } else { $dotnetRoot = Join-Path $RepoRoot '.dotnet' @@ -169,7 +172,7 @@ function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) { Set-Content -Path $sdkCacheFileTemp -Value $dotnetRoot try { - Rename-Item -Force -Path $sdkCacheFileTemp 'sdk.txt' + Move-Item -Force $sdkCacheFileTemp (Join-Path $ToolsetDir 'sdk.txt') } catch { # Somebody beat us Remove-Item -Path $sdkCacheFileTemp @@ -190,38 +193,42 @@ function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) { return $global:_DotNetInstallDir = $dotnetRoot } +function Retry($downloadBlock, $maxRetries = 5) { + $retries = 1 + + while($true) { + try { + & $downloadBlock + break + } + catch { + Write-PipelineTelemetryError -Category 'InitializeToolset' -Message $_ + } + + if (++$retries -le $maxRetries) { + $delayInSeconds = [math]::Pow(2, $retries) - 1 # Exponential backoff + Write-Host "Retrying. Waiting for $delayInSeconds seconds before next attempt ($retries of $maxRetries)." + Start-Sleep -Seconds $delayInSeconds + } + else { + Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Unable to download file in $maxRetries attempts." + break + } + + } +} + function GetDotNetInstallScript([string] $dotnetRoot) { $installScript = Join-Path $dotnetRoot 'dotnet-install.ps1' if (!(Test-Path $installScript)) { Create-Directory $dotnetRoot $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit - - $maxRetries = 5 - $retries = 1 - $uri = "https://dot.net/$dotnetInstallScriptVersion/dotnet-install.ps1" - while($true) { - try { - Write-Host "GET $uri" - Invoke-WebRequest $uri -OutFile $installScript - break - } - catch { - Write-Host "Failed to download '$uri'" - Write-Error $_.Exception.Message -ErrorAction Continue - } - - if (++$retries -le $maxRetries) { - $delayInSeconds = [math]::Pow(2, $retries) - 1 # Exponential backoff - Write-Host "Retrying. Waiting for $delayInSeconds seconds before next attempt ($retries of $maxRetries)." - Start-Sleep -Seconds $delayInSeconds - } - else { - throw "Unable to download file in $maxRetries attempts." - } - - } + Retry({ + Write-Host "GET $uri" + Invoke-WebRequest $uri -OutFile $installScript + }) } return $installScript @@ -305,8 +312,8 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements = # If the version of msbuild is going to be xcopied, # use this version. Version matches a package here: - # https://dev.azure.com/dnceng/public/_packaging?_a=package&feed=dotnet-eng&package=RoslynTools.MSBuild&protocolType=NuGet&version=16.8.0-preview3&view=overview - $defaultXCopyMSBuildVersion = '16.8.0-preview3' + # https://dev.azure.com/dnceng/public/_packaging?_a=package&feed=dotnet-eng&package=RoslynTools.MSBuild&protocolType=NuGet&version=16.10.0-preview2&view=overview + $defaultXCopyMSBuildVersion = '16.10.0-preview2' if (!$vsRequirements) { $vsRequirements = $GlobalJson.tools.vs } $vsMinVersionStr = if ($vsRequirements.version) { $vsRequirements.version } else { $vsMinVersionReqdStr } @@ -400,9 +407,13 @@ function InitializeXCopyMSBuild([string]$packageVersion, [bool]$install) { } Create-Directory $packageDir + Write-Host "Downloading $packageName $packageVersion" $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit - Invoke-WebRequest "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/flat2/$packageName/$packageVersion/$packageName.$packageVersion.nupkg" -OutFile $packagePath + Retry({ + Invoke-WebRequest "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/flat2/$packageName/$packageVersion/$packageName.$packageVersion.nupkg" -OutFile $packagePath + }) + Unzip $packagePath $packageDir } @@ -439,16 +450,17 @@ function LocateVisualStudio([object]$vsRequirements = $null){ if (!(Test-Path $vsWhereExe)) { Create-Directory $vsWhereDir Write-Host 'Downloading vswhere' - try { + Retry({ Invoke-WebRequest "https://netcorenativeassets.blob.core.windows.net/resource-packages/external/windows/vswhere/$vswhereVersion/vswhere.exe" -OutFile $vswhereExe - } - catch { - Write-PipelineTelemetryError -Category 'InitializeToolset' -Message $_ - } + }) } if (!$vsRequirements) { $vsRequirements = $GlobalJson.tools.vs } - $args = @('-latest', '-prerelease', '-format', 'json', '-requires', 'Microsoft.Component.MSBuild', '-products', '*') + $args = @('-latest', '-format', 'json', '-requires', 'Microsoft.Component.MSBuild', '-products', '*') + + if (!$excludePrereleaseVS) { + $args += '-prerelease' + } if (Get-Member -InputObject $vsRequirements -Name 'version') { $args += '-version' @@ -474,7 +486,13 @@ function LocateVisualStudio([object]$vsRequirements = $null){ function InitializeBuildTool() { if (Test-Path variable:global:_BuildTool) { - return $global:_BuildTool + # If the requested msbuild parameters do not match, clear the cached variables. + if($global:_BuildTool.Contains('ExcludePrereleaseVS') -and $global:_BuildTool.ExcludePrereleaseVS -ne $excludePrereleaseVS) { + Remove-Item variable:global:_BuildTool + Remove-Item variable:global:_MSBuildExe + } else { + return $global:_BuildTool + } } if (-not $msbuildEngine) { @@ -493,7 +511,7 @@ function InitializeBuildTool() { ExitWithExitCode 1 } $dotnetPath = Join-Path $dotnetRoot (GetExecutableFileName 'dotnet') - $buildTool = @{ Path = $dotnetPath; Command = 'msbuild'; Tool = 'dotnet'; Framework = 'netcoreapp2.1' } + $buildTool = @{ Path = $dotnetPath; Command = 'msbuild'; Tool = 'dotnet'; Framework = 'netcoreapp3.1' } } elseif ($msbuildEngine -eq "vs") { try { $msbuildPath = InitializeVisualStudioMSBuild -install:$restore @@ -502,7 +520,7 @@ function InitializeBuildTool() { ExitWithExitCode 1 } - $buildTool = @{ Path = $msbuildPath; Command = ""; Tool = "vs"; Framework = "net472" } + $buildTool = @{ Path = $msbuildPath; Command = ""; Tool = "vs"; Framework = "net472"; ExcludePrereleaseVS = $excludePrereleaseVS } } else { Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Unexpected value of -msbuildEngine: '$msbuildEngine'." ExitWithExitCode 1 @@ -527,7 +545,7 @@ function GetDefaultMSBuildEngine() { function GetNuGetPackageCachePath() { if ($env:NUGET_PACKAGES -eq $null) { - # Use local cache on CI to ensure deterministic build. + # Use local cache on CI to ensure deterministic build. # Avoid using the http cache as workaround for https://github.com/NuGet/Home/issues/3116 # use global cache in dev builds to avoid cost of downloading packages. # For directory normalization, see also: https://github.com/NuGet/Home/issues/7968 @@ -629,9 +647,26 @@ function MSBuild() { } $toolsetBuildProject = InitializeToolset - $path = Split-Path -parent $toolsetBuildProject - $path = Join-Path $path (Join-Path $buildTool.Framework 'Microsoft.DotNet.Arcade.Sdk.dll') - $args += "/logger:$path" + $basePath = Split-Path -parent $toolsetBuildProject + $possiblePaths = @( + # new scripts need to work with old packages, so we need to look for the old names/versions + (Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.ArcadeLogging.dll')), + (Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.Arcade.Sdk.dll')), + (Join-Path $basePath (Join-Path netcoreapp2.1 'Microsoft.DotNet.ArcadeLogging.dll')), + (Join-Path $basePath (Join-Path netcoreapp2.1 'Microsoft.DotNet.Arcade.Sdk.dll')) + ) + $selectedPath = $null + foreach ($path in $possiblePaths) { + if (Test-Path $path -PathType Leaf) { + $selectedPath = $path + break + } + } + if (-not $selectedPath) { + Write-PipelineTelemetryError -Category 'Build' -Message 'Unable to find arcade sdk logger assembly.' + ExitWithExitCode 1 + } + $args += "/logger:$selectedPath" } MSBuild-Core @args @@ -667,7 +702,10 @@ function MSBuild-Core() { } foreach ($arg in $args) { - if ($arg -ne $null -and $arg.Trim() -ne "") { + if ($null -ne $arg -and $arg.Trim() -ne "") { + if ($arg.EndsWith('\')) { + $arg = $arg + "\" + } $cmdArgs += " `"$arg`"" } } @@ -739,7 +777,7 @@ function Get-Darc($version) { . $PSScriptRoot\pipeline-logging-functions.ps1 -$RepoRoot = Resolve-Path (Join-Path $PSScriptRoot '..\..') +$RepoRoot = Resolve-Path (Join-Path $PSScriptRoot '..\..\') $EngRoot = Resolve-Path (Join-Path $PSScriptRoot '..') $ArtifactsDir = Join-Path $RepoRoot 'artifacts' $ToolsetDir = Join-Path $ArtifactsDir 'toolset' diff --git a/eng/common/tools.sh b/eng/common/tools.sh index 0295dd9ff63..05ca99c6b28 100755 --- a/eng/common/tools.sh +++ b/eng/common/tools.sh @@ -89,16 +89,16 @@ function ResolvePath { function ReadGlobalVersion { local key=$1 - local line=$(awk "/$key/ {print; exit}" "$global_json_file") - local pattern="\"$key\" *: *\"(.*)\"" + if command -v jq &> /dev/null; then + _ReadGlobalVersion="$(jq -r ".[] | select(has(\"$key\")) | .\"$key\"" "$global_json_file")" + elif [[ "$(cat "$global_json_file")" =~ \"$key\"[[:space:]\:]*\"([^\"]+) ]]; then + _ReadGlobalVersion=${BASH_REMATCH[1]} + fi - if [[ ! $line =~ $pattern ]]; then + if [[ -z "$_ReadGlobalVersion" ]]; then Write-PipelineTelemetryError -category 'Build' "Error: Cannot find \"$key\" in $global_json_file" ExitWithExitCode 1 fi - - # return value - _ReadGlobalVersion=${BASH_REMATCH[1]} } function InitializeDotNetCli { @@ -273,7 +273,11 @@ function GetDotNetInstallScript { if command -v curl > /dev/null; then # first, try directly, if this fails we will retry with verbose logging curl "$install_script_url" -sSL --retry 10 --create-dirs -o "$install_script" || { - echo "curl failed; will now retry with verbose logging." + if command -v openssl &> /dev/null; then + echo "Curl failed; dumping some information about dotnet.microsoft.com for later investigation" + echo | openssl s_client -showcerts -servername dotnet.microsoft.com -connect dotnet.microsoft.com:443 + fi + echo "Will now retry the same URL with verbose logging." with_retries curl "$install_script_url" -sSL --verbose --retry 10 --create-dirs -o "$install_script" || { local exit_code=$? Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to acquire dotnet install script (exit code '$exit_code')." @@ -302,7 +306,7 @@ function InitializeBuildTool { # return values _InitializeBuildTool="$_InitializeDotNetCli/dotnet" _InitializeBuildToolCommand="msbuild" - _InitializeBuildToolFramework="netcoreapp2.1" + _InitializeBuildToolFramework="netcoreapp3.1" } # Set RestoreNoCache as a workaround for https://github.com/NuGet/Home/issues/3116 @@ -409,8 +413,24 @@ function MSBuild { fi local toolset_dir="${_InitializeToolset%/*}" - local logger_path="$toolset_dir/$_InitializeBuildToolFramework/Microsoft.DotNet.Arcade.Sdk.dll" - args=( "${args[@]}" "-logger:$logger_path" ) + # new scripts need to work with old packages, so we need to look for the old names/versions + local selectedPath= + local possiblePaths=() + possiblePaths+=( "$toolset_dir/$_InitializeBuildToolFramework/Microsoft.DotNet.ArcadeLogging.dll" ) + possiblePaths+=( "$toolset_dir/$_InitializeBuildToolFramework/Microsoft.DotNet.Arcade.Sdk.dll" ) + possiblePaths+=( "$toolset_dir/netcoreapp2.1/Microsoft.DotNet.ArcadeLogging.dll" ) + possiblePaths+=( "$toolset_dir/netcoreapp2.1/Microsoft.DotNet.Arcade.Sdk.dll" ) + for path in "${possiblePaths[@]}"; do + if [[ -f $path ]]; then + selectedPath=$path + break + fi + done + if [[ -z "$selectedPath" ]]; then + Write-PipelineTelemetryError -category 'Build' "Unable to find arcade sdk logger assembly." + ExitWithExitCode 1 + fi + args+=( "-logger:$selectedPath" ) fi MSBuild-Core ${args[@]} @@ -465,23 +485,27 @@ _script_dir=`dirname "$_ResolvePath"` eng_root=`cd -P "$_script_dir/.." && pwd` repo_root=`cd -P "$_script_dir/../.." && pwd` -artifacts_dir="$repo_root/artifacts" +repo_root="${repo_root}/" +artifacts_dir="${repo_root}artifacts" toolset_dir="$artifacts_dir/toolset" -tools_dir="$repo_root/.tools" +tools_dir="${repo_root}.tools" log_dir="$artifacts_dir/log/$configuration" temp_dir="$artifacts_dir/tmp/$configuration" -global_json_file="$repo_root/global.json" +global_json_file="${repo_root}global.json" # determine if global.json contains a "runtimes" entry global_json_has_runtimes=false -dotnetlocal_key=$(awk "/runtimes/ {print; exit}" "$global_json_file") || true -if [[ -n "$dotnetlocal_key" ]]; then +if command -v jq &> /dev/null; then + if jq -er '. | select(has("runtimes"))' "$global_json_file" &> /dev/null; then + global_json_has_runtimes=true + fi +elif [[ "$(cat "$global_json_file")" =~ \"runtimes\"[[:space:]\:]*\{ ]]; then global_json_has_runtimes=true fi # HOME may not be defined in some scenarios, but it is required by NuGet if [[ -z $HOME ]]; then - export HOME="$repo_root/artifacts/.home/" + export HOME="${repo_root}artifacts/.home/" mkdir -p "$HOME" fi diff --git a/eng/release/insert-into-vs.yml b/eng/release/insert-into-vs.yml index e61143ca239..b1048ad2e04 100644 --- a/eng/release/insert-into-vs.yml +++ b/eng/release/insert-into-vs.yml @@ -4,6 +4,7 @@ parameters: insertTargetBranch: '' insertTeamEmail: '' insertTeamName: '' + completeInsertion: 'false' # 'true', 'false', 'auto' dependsOn: [build] stages: @@ -49,10 +50,23 @@ stages: inputs: filePath: $(Build.SourcesDirectory)/eng/release/scripts/GetAssemblyVersions.ps1 arguments: -assemblyVersionsPath $(Build.ArtifactStagingDirectory)\VSSetup\DevDivPackages\DependentAssemblyVersions.csv + - task: PowerShell@2 + displayName: Calculate autocompletion state + inputs: + targetType: 'inline' + pwsh: true + script: | + # mark the insertion for auto-completion if: + # `parameters.completeInsertion` == `true` + # OR + # `parameters.completeInsertion` == `auto` AND `parameters.insertTargetBranch` does not contain 'rel/' + $completeInsertion = '${{ parameters.completeInsertion }}' + $autoComplete = ($completeInsertion -Eq 'true') -Or (($completeInsertion -Eq 'auto') -And (-Not ($env:INSERTTARGETBRANCH.Contains('rel/')))) + $autoCompleteStr = if ($autoComplete) { 'true' } else { 'false' } + Write-Host "Setting InsertAutoComplete to '$autoCompleteStr'" + Write-Host "##vso[task.setvariable variable=InsertAutoComplete]$autoCompleteStr" - task: ms-vseng.MicroBuildShipTasks.55100717-a81d-45ea-a363-b8fe3ec375ad.MicroBuildInsertVsPayload@3 displayName: 'Insert VS Payload' inputs: - # only auto-complete if the target branch is not `rel/*` - AutoCompletePR: ${{ not(contains(parameters.insertTargetBranch, 'rel/')) }} LinkWorkItemsToPR: false condition: and(succeeded(), or(eq(variables['Build.SourceBranch'], '${{ parameters.componentBranchName }}'), eq(variables['Build.SourceBranch'], 'refs/heads/${{ parameters.componentBranchName }}'))) diff --git a/eng/source-build-patches/0005-Fix-package-downgrade-warning.patch b/eng/source-build-patches/0005-Fix-package-downgrade-warning.patch new file mode 100644 index 00000000000..e13b98068f9 --- /dev/null +++ b/eng/source-build-patches/0005-Fix-package-downgrade-warning.patch @@ -0,0 +1,56 @@ +From 7f0d25bfaa9a38da2097c9420461232a08951165 Mon Sep 17 00:00:00 2001 +From: Chris Rummel +Date: Thu, 3 Sep 2020 19:02:07 -0500 +Subject: [PATCH 5/5] Fix package downgrade warning + +--- + .../FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj | 4 ++-- + .../Microsoft.FSharp.Compiler.nuspec | 4 ++-- + src/fsharp/fsc/fsc.fsproj | 1 + + 3 files changed, 7 insertions(+), 6 deletions(-) + +diff --git a/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj b/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj +index aced6e1b4..fcdacc30b 100644 +--- a/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj ++++ b/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj +@@ -770,8 +770,8 @@ + + + +- +- ++ ++ + + + +diff --git a/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.nuspec b/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.nuspec +index b96f90d2a..366488b47 100644 +--- a/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.nuspec ++++ b/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.nuspec +@@ -22,8 +22,8 @@ + + + +- +- ++ ++ + + + +diff --git a/src/fsharp/fsc/fsc.fsproj b/src/fsharp/fsc/fsc.fsproj +index 776cddc78..df16c1554 100644 +--- a/src/fsharp/fsc/fsc.fsproj ++++ b/src/fsharp/fsc/fsc.fsproj +@@ -45,6 +45,7 @@ + + + ++ + + + +-- +2.18.0 + diff --git a/eng/tests/UpToDate.ps1 b/eng/tests/UpToDate.ps1 index 545e149069a..0a730ac48f3 100644 --- a/eng/tests/UpToDate.ps1 +++ b/eng/tests/UpToDate.ps1 @@ -26,9 +26,8 @@ try { $FscAssemblyDir = Get-ChildItem -Path $ArtifactsBinDir -Filter "fsc" $FsiAssemblyDir = Get-ChildItem -Path $ArtifactsBinDir -Filter "fsi" $FsiAnyCpuAssemblyDir = Get-ChildItem -Path $ArtifactsBinDir -Filter "fsiAnyCpu" - $DmAssemblyDir = Get-ChildItem -Path $ArtifactsBinDir -Filter "Microsoft.DotNet.DependencyManager" $ProjectSystemAssemblyDirs = Get-ChildItem -Path $ArtifactsBinDir -Filter "ProjectSystem*" - $FSharpDirs = @($FSharpAssemblyDirs) + @($FscAssemblyDir) + @($FsiAssemblyDir) + @($FsiAnyCpuAssemblyDir) + @($DmAssemblyDir) + @($ProjectSystemAssemblyDirs) + $FSharpDirs = @($FSharpAssemblyDirs) + @($FscAssemblyDir) + @($FsiAssemblyDir) + @($FsiAnyCpuAssemblyDir) + @($ProjectSystemAssemblyDirs) $FSharpDllPaths = $FSharpDirs | ForEach-Object { Get-ChildItem -Path (Join-Path $ArtifactsBinDir $_) -Recurse -Filter "*.dll" } | ForEach-Object { $_.FullName } $FSharpExePaths = $FSharpDirs | ForEach-Object { Get-ChildItem -Path (Join-Path $ArtifactsBinDir $_) -Recurse -Filter "*.exe" } | ForEach-Object { $_.FullName } $FSharpAssemblyPaths = @($FSharpDllPaths) + @($FSharpExePaths) diff --git a/fcs-samples/EditorService/EditorService.fsproj b/fcs-samples/EditorService/EditorService.fsproj index 5ce569ffaac..27bdbef249c 100644 --- a/fcs-samples/EditorService/EditorService.fsproj +++ b/fcs-samples/EditorService/EditorService.fsproj @@ -1,7 +1,7 @@  - $(FcsTargetNetFxFramework);netcoreapp3.1 + $(FcsTargetNetFxFramework);net5.0 true Exe false diff --git a/fcs-samples/FscExe/FscMain.fs b/fcs-samples/FscExe/FscMain.fs index 36b980cbbb3..4b465cb2ab5 100644 --- a/fcs-samples/FscExe/FscMain.fs +++ b/fcs-samples/FscExe/FscMain.fs @@ -8,8 +8,8 @@ open System.IO open System.Reflection open System.Runtime.CompilerServices open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.AbstractIL.Internal.Utils // runningOnMono -open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Utils // runningOnMono +open FSharp.Compiler.AbstractIL.Library open FSharp.Compiler.ErrorLogger #if RESIDENT_COMPILER diff --git a/fcs-samples/UntypedTree/Program.fs b/fcs-samples/UntypedTree/Program.fs index c3c0ac538a1..7203195a173 100644 --- a/fcs-samples/UntypedTree/Program.fs +++ b/fcs-samples/UntypedTree/Program.fs @@ -1,6 +1,6 @@ // Open the namespace with InteractiveChecker type open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax // Create a checker instance (ignore notifications) let checker = FSharpChecker.Create() diff --git a/global.json b/global.json index 56a962b9389..0884f406b36 100644 --- a/global.json +++ b/global.json @@ -1,10 +1,10 @@ { "sdk": { - "version": "5.0.100", + "version": "5.0.300", "rollForward": "minor" }, "tools": { - "dotnet": "5.0.100", + "dotnet": "5.0.300", "vs": { "version": "16.8", "components": [ @@ -13,7 +13,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "6.0.0-beta.20616.18", + "Microsoft.DotNet.Arcade.Sdk": "6.0.0-beta.21321.2", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } diff --git a/proto.proj b/proto.proj index bb2f9727045..bb077834555 100644 --- a/proto.proj +++ b/proto.proj @@ -10,10 +10,10 @@ TargetFramework=netstandard2.0 - TargetFramework=netcoreapp3.1 + TargetFramework=net5.0 - TargetFramework=netcoreapp3.1 + TargetFramework=net5.0 diff --git a/release-notes.md b/release-notes.md index 3b618ecf344..75b9a19c444 100644 --- a/release-notes.md +++ b/release-notes.md @@ -14,6 +14,404 @@ This document contains current and historical release notes information. They ar These release notes track our current efforts to document changes to the F# project over time. They are split into the language, core library, compiler/tools, and compiler service. +### F# 5 / Visual Studio 16.9 + +### FSharp.Core 5.0.1 + +* [Performance improvement](https://github.com/dotnet/fsharp/pull/10188) to core collections Map by [Victor Baybekov](https://github.com/buybackoff) + +### FSharp tools 11.0.1 + +* Significant improvements to the performance of code making heavy use of closures at runtime +* Warnings for mismatched parameter names between signature and implementation files +* Warnings for incorrect XML documentation files are turned on by default +* Big performance gains in tools for codebases with F# signature files +* Improved responsiveness for most IDE features +* Signature Help for F# function calls +* .NET 5 scripting for Visual Studio +* Add ConvertToAnonymousRecord quick fix [#10493](https://github.com/dotnet/fsharp/pull/10493) +* Add UseMutationWhenValueIsMutable code fix [#10488](https://github.com/dotnet/fsharp/pull/10488) +* Add MakeDeclarationMutable code fix [#10480](https://github.com/dotnet/fsharp/pull/10480) +* Add ChangeToUpcast code fix [#10463](https://github.com/dotnet/fsharp/pull/10463) +* Add AddMissingEqualsToTypeDefinition code fixer [#10470](https://github.com/dotnet/fsharp/pull/10470) +* Tag items in tooltips consistenly with respect to document classification. [#9563](https://github.com/dotnet/fsharp/pull/9563) +* Add ConvertToSingleEqualsEqualityExpression code fix [#10462](https://github.com/dotnet/fsharp/pull/10462) +* Turn XML doc and Sig<->Impl mismatch warnings on by default [#10457](https://github.com/dotnet/fsharp/pull/10457) +* Add ChangeRefCellDerefToNotExpression code fixer [#10469](https://github.com/dotnet/fsharp/pull/10469) +* Add WrapExpressionInParentheses code fix [#10460](https://github.com/dotnet/fsharp/pull/10460) +* Add ChangePrefixNegationToInfixSubtraction code fixeroo [#10471](https://github.com/dotnet/fsharp/pull/10471) +* Fix generic overloads with nullable [#10582](https://github.com/dotnet/fsharp/pull/10582) +* Resolve issue with implicit yields requiring Zero [#10556](https://github.com/dotnet/fsharp/pull/10556), by [Ryan Coy](https://github.com/laenas) +* Fix issue10550 FSI accessing System.Configuration. [#10572](https://github.com/dotnet/fsharp/pull/10572) +* Add field names to ILNativeType.Custom. [#10567](https://github.com/dotnet/fsharp/pull/10567), by [Scott Hutchinson](https://github.com/ScottHutchinson) +* Add field names to the ILExceptionClause.FilterCatch constructor. [#10559](https://github.com/dotnet/fsharp/pull/10559), by [Scott Hutchinson](https://github.com/ScottHutchinson) +* Fix completion with backticks, underscores, numbers [#10500](https://github.com/dotnet/fsharp/pull/10500), by [zanaptak](https://github.com/zanaptak) +* Emitting IsReadOnly/In attributes on abstract properties [#10542](https://github.com/dotnet/fsharp/pull/10542) +* Disable partial type checking when getting full results for a file [#10448](https://github.com/dotnet/fsharp/pull/10448) +* Fix unused open type declaration detection [#10510](https://github.com/dotnet/fsharp/pull/10510), by [André Slupik](https://github.com/asik) + +### FSharp Compiler Service 40.0.0 + +This is a second big update to FCS. There are significant trimmings and renamings of the API and gets +it close to a more permanent form: + +The primary namespaces are now: + +``` +FSharp.Compiler.IO // FileSystem +FSharp.Compiler.CodeAnalysis // FSharpChecker, FSharpCheckFileResults, FSharpChecProjectResults and friends +FSharp.Compiler.Diagnostics // FSharpDiagnostic and friends +FSharp.Compiler.EditorServices // Misc functionality for editors, e.g. interface stub generation +FSharp.Compiler.Interactive.Shell // F# Interactive +FSharp.Compiler.Symbols // FSharpEntity etc +FSharp.Compiler.Syntax // SyntaxTree, XmlDoc, PrettyNaming +FSharp.Compiler.Text // ISourceFile, Range, TaggedText and other things +FSharp.Compiler.Tokenization // FSharpLineTokenizer etc. +``` + +##### Changes in `FSharp.Compiler.Diagnostics` + +* `ErrorHelpers` --> `DiagnosticHelpers` + +* `ErrorResolutionHints.getSuggestedNames` --> `ErrorResolutionHints.GetSuggestedNames` + +##### Changes in `FSharp.Compiler.SourceCodeServices` + +* Everything is moved to one of the other namespaces + +* The `FSharp` prefix is used for things in `FSharp.Compiler.Symbols` but not `FSharp.Compiler.EditorServices` + +* `AssemblyContentProvider` --> `AssemblyContent` in EditorServices + +* `AstVisitorBase` --> moved to `SyntaxVisitorBase` in FSharp.Compiler.Syntax + +* `AstVisitorBase.*` --> `SyntaxVisitorBase.*` and methods now all take `path` parameters consistently + +* `AstTraversal.Traverse` --> `SyntaxTraversal.Traverse` + +* `BasicPatterns` --> `FSharpExprPatterns` in FSharp.Compiler.Symbols + +* `DebuggerEnvironment.*` merged into `CompilerEnvironment` in FSharp.Compiler + +* `ExternalType` --> `FindDeclExternalType` in EditorServices + +* `FSharpChecker.ParseFileNoCache` --> removed in favour of optional `cache=false` argument on `FSharpChecker.ParseFile` + +* `FSharpChecker.BeforeBackgroundFileCheck` event now takes FSharpProjectOptions arg + +* `FSharpChecker.FileChecked` event now takes FSharpProjectOptions arg + +* `FSharpChecker.FileParsed` event now takes FSharpProjectOptions arg + +* `FSharpChecker.ProjectChecked` event now takes FSharpProjectOptions arg + +* `FSharpCheckFileResults.Errors` --> `FSharpCheckFileResults.Diagnostics` + +* `FSharpCheckProjectResults.Errors` --> `FSharpCheckProjectResults.Diagnostics` + +* `FSharpDeclarationListInfo` --> `DeclarationListInfo` in EditorServices + +* `FSharpEnclosingEntityKind` --> `NavigationEntityKind` in EditorServices + +* `FSharpExternalSymbol` --> `FindDeclExternalSymbol` in EditorServices + +* `FSharpFileUtilities.*` merged into `CompilerEnvironment` in FSharp.Compiler + +* `FSharpFindDeclResult` --> `FindDeclResult` in EditorServices + +* `FSharpLexer.Lex` --> `FSharpLexer.Tokenize` in FSharp.Compiler.Tokenization + +* `FSharpMethodGroup` --> `MethodGroup` in EditorServices + +* `FSharpMethodGroupItem` --> `MethodGroupItem` in EditorServices + +* `FSharpMethodGroupItemParameter` --> `MethodGroupItemParameter` in EditorServices + +* `FSharpMethodGroupItemParameter.StructuredDisplay` ---> `MethodGroupItemParameter.Display` + +* `FSharpMethodGroupItemParameter.StructuredReturnTypeText` ---> `MethodGroupItemParameter.ReturnTypeText` + +* `FSharpNavigationDeclarationItem` --> `NavigationItem` in EditorServices + +* `FSharpNavigationTopLevelDeclaration` --> `NavigationTopLevelDeclaration` in EditorServices + +* `FSharpNavigationItems` --> `NavigationItems` in EditorServices + +* `FSharpNavigation` --> `Navigation` in EditorServices + +* `FSharpNavigationDeclarationItemKind` --> `NavigationItemKind` in EditorServices + +* `FSharpNoteworthyParamInfoLocations` --> `ParameterLocations` + +* `FSharpProjectOptions.ExtraProjectInfo` is removed + +* `FSharpSemanticClassificationItem` --> `SemanticClassificationItem` in EditorServices + +* `FSharpSemanticClassificationView ` --> `SemanticClassificationView` in EditorServices + +* `FSharpStructuredToolTipText` --> `ToolTipText` in EditorServices + +* `FSharpStructuredToolTipElementData` --> `ToolTipElementData` in EditorServices + +* `FSharpStructuredToolTipElement` --> `ToolTipElement` in EditorServices + +* `FSharpSymbol.Accessibility` is now non-optional. Will return "public" in cases it previously returned "None" + +* `FSharpSymbol.XmlDoc` now returns `FSharpXmlDoc` with cases for internal and external XML doc. Use `match symbol.XmlDoc with FSharpXmlDoc.FromText doc -> doc.UnprocessedLines` to get unprocessed XML lines + +* `FSharpSymbol.ElaboratedXmlDoc` now removed. Use `match symbol.XmlDoc with FSharpXmlDoc.FromText doc -> doc.GetElaboratedLine()` + +* `FSharpToolTipText` --> `ToolTipText` in EditorServices + +* `FSharpToolTipElementData` --> `ToolTipElementData` in EditorServices + +* `FSharpToolTipElement` --> `ToolTipElement` in EditorServices + +* `FSharpType.FormatLayout` now returns `TaggedText[]` + +* `FSharpType.FormatLayout` now returns `TaggedText[]` + +* `FSharpUnresolvedSymbol` --> `UnresolvedSymbol` in EditorServices + +* `InterfaceStubGenerator.*` are all capitalized + +* `Idents` --> `ShortIdents` in EditorServices + +* `LongIdent` abbreviation removed and replaced by `string` + +* `NavigateTo.NavigableItemKind ` --> now directly in EditorServices + +* `NavigateTo.ContainerType` --> `NavigableContainerType` now directly in EditorServices + +* `NavigateTo.NavigableItem` --> `NavigableItem` now directly in EditorServices + +* `NavigateTo.getNavigableItems` --> NavigateTo.GetNavigableItems in EditorServices + +* `ParamTypeSymbol` --> `FindDeclExternalParam in EditorServices` + +* `ParsedInput.tryFindInsertionContext` --> `ParsedInput.TryFindInsertionContext` + +* `ParsedInput.findNearestPointToInsertOpenDeclaration ` --> `ParsedInput.FindNearestPointToInsertOpenDeclaration ` + +* `ParsedInput.getLongIdentAt` --> `ParsedInput.GetLongIdentAt` + +* `ParsedInput.adjustInsertionPoint` --> `ParsedInput.AdjustInsertionPoint` + +* `Symbol` --> `FSharpSymbolPatterns` in FSharp.Compiler.Symbols and marked experimental + +* `Symbol.isAttribute` --> now `attrib.IsAttribute<'T>()` + +* `Symbol.getAbbreviatedType` --> now `symbol.StripAbbreviations()` + +* `Symbol.hasAttribute` --> now `symbol.HasAttribute<'T>()` + +* `Symbol.tryGetAttribute` --> now `symbol.TryGetAttribute<'T>()` + +* `TraverseStep` --> `SyntaxNode` in FSharp.Compiler.Syntax + +* ToolTips now only return the structured (TaggedText) tooltips. You can iterate to get the text tooltips + +##### Changes in `FSharp.Compiler.Text` + +* `Pos` --> `Position` + +##### Changes in `FSharp.Compiler.TextLayout` + +* Everything moves to `FSharp.Compiler.Text` + +* `LayoutTag` --> `TextTag` + +* `Layout` is now internal and replaced by `TaggedText[]` + +* `LayoutOps` is now internal + +##### Changes in `FSharp.Compiler.SyntaxTree` + +* Everything moves to namespace `FSharp.Compiler.Syntax` + +* `DebugPointAtBinding` is now RequireQualifiedAccess + +* `NoDebugPointAtStickyBinding` --> `DebugPointAtBinding.NoneAtSticky` + +* `Clause` --> `SynMatchClause` + +* `NormalBinding` -> `SynBindingKind.Normal` + +* `Binding` --> `SynBinding` + +* `Field` --> `SynField` + +* `UnionCase` --> `SynUnionCase` + +* `UnionCaseFullType` --> `SynUnionCaseKind.FullType` + +* `UnionCaseFields` --> `SynUnionCaseKind.Fields` + +* `MemberKind` --> `SynMemberKind` + +* `MemberFlags` --> `SynMemberFlags` + +* `TyconUnspecified` --> `SynTypeDefnKind.Unspecified` + +* `TyconClass` --> `SynTypeDefnKind.Class` + +* `TyconInterface` --> `SynTypeDefnKind.Interface` + +* `TyconStruct` --> `SynTypeDefnKind.Struct` + +* `TyconHiddenRepr` --> `SynTypeDefnKind.Opaque` + +* `TyconUnion` --> `SynTypeDefnKind.Union` + +* `TyconDelegate ` --> `SynTypeDefnKind.Delegate` + +* `ComponentInfo` --> `SynComponentInfo` + +* `TyconAugmentation` --> `SynTypeDefnKind.Augmentation` + +* `TypeDefnSig` --> `SynTypeDefnSig` + +* `HeadTypeStaticReq` --> `TyparStaticReq.HeadType` + +* `NoStaticReq` --> `TyparStaticReq.None` + +* `SynTypeConstraint` is now RequiresQualifiedAccess + +* `ValSpfn` --> `SynValSpfn` + +* `TyparDecl` --> `SynTyparDecl` + +* `Typar` --> `SynTypar` + +* `SynSimplePatAlternativeIdInfo` is now RequiresQualifiedAccess + +* `InterfaceImpl` --> `SynInterfaceImpl` + +* `SynBindingKind` is now RequiresQualifiedAccess + +* `DoBinding` --> `SynBindingKind.Do` + +* `StandaloneExpression` --> `SynBindingKind.StandaloneExpression` + +* `SynModuleOrNamespaceKind` is now RequiresQualifiedAccess + +* `IDefns` --> `ParsedScriptInteraction.Definitions` + +* `IHash ` --> `ParsedScriptInteraction.HashDirective` + +##### Other changes + +* `LegacyReferenceResolver` now marked obsolete + +### FSharp Compiler Service 39.0.0 + +This is a big update to FCS. There are significant trimmings and renamings of the API as a first step towards getting it under control with aims to eventually have a stable, sane public API surface area. + +Renamings: + +```diff +-type FSharp.Compiler.AbstractIL.Internal.Library.IFileSystem ++type FSharp.Compiler.SourceCodeServices.IFileSystem + +-module FSharp.Compiler.AbstractIL.Internal.Library.Shim ++FSharp.Compiler.SourceCodeServices.FileSystemAutoOpens + +-type FSharp.Compiler.AbstractIL.Layout ++type FSharp.Compiler.TextLayout.Layout + +-type FSharp.Compiler.AbstractIL.Internal.TaggedText ++type FSharp.Compiler.TextLayout.TaggedText + +-type FSharp.Compiler.Layout.layout ++type FSharp.Compiler.TextLayout.layout + +-type FSharp.Compiler.Layout.Layout ++FSharp.Compiler.TextLayout.Layout + +-module FSharp.Compiler.Layout ++module FSharp.Compiler.TextLayout.LayoutRender + +-module FSharp.Compiler.LayoutOps ++module FSharp.Compiler.TextLayout.Layout + +-module FSharp.Compiler.Layout.TaggedText ++module FSharp.Compiler.TextLayout.TaggedText + +-module FSharp.Compiler.Layout.TaggedTextOps ++FSharp.Compiler.TextLayout.TaggedText + +-module FSharp.Compiler.Layout.TaggedTextOps.Literals ++FSharp.Compiler.TextLayout.TaggedText + +-type FSharp.Compiler.Range.range ++FSharp.Compiler.Text.Range + +-type FSharp.Compiler.Range.pos ++FSharp.Compiler.Text.Pos + +-module FSharp.Compiler.Range.Range ++module FSharp.Compiler.Text.Pos ++module FSharp.Compiler.Text.Range + +-module FSharp.Compiler.QuickParse ++module FSharp.Compiler.SourceCodeServices.QuickParse + +-module FSharp.Compiler.PrettyNaming ++FSharp.Compiler.SourceCodeServices.PrettyNaming + +-val FSharpKeywords.PrettyNaming.KeywordNames ++FSharp.Compiler.SourceCodeServices.FSharpKeywords.KeywordNames + +-val FSharpKeywords.PrettyNaming.QuoteIdentifierIfNeeded ++FSharp.Compiler.SourceCodeServices.FSharpKeywords.QuoteIdentifierIfNeeded + +-val FSharpKeywords.PrettyNaming.FormatAndOtherOverloadsString ++FSharp.Compiler.SourceCodeServices.FSharpKeywords.FormatAndOtherOverloadsString +``` + +Renamings in `FSharp.Compiler.SourceCodeServices`: + +```diff +-Lexer.* ++FSharp.Compiler.SourceCodeServices.* + +-FSharpSyntaxToken* ++FSharpToken* + +-FSharpErrorInfo ++FSharpDiagnostic + +-FSharpErrorSeverity ++FSharpDiagnosticSeverity + +-ExternalSymbol ++FSharpExternalSymbol + +-UnresolvedSymbol ++FSharpUnresolvedSymbol + +-CompletionKind ++FSharpCompletionKind + +-module Keywords ++module FSharpKeywords + +``` + +* Extension methods in `ServiceAssemblyContent.fsi` are now now intrinsic methods on the symbol types themselves. +* `SemanticClassificationType` is now an enum instead of a discriminated union. +* `GetBackgroundSemanticClassificationForFile` now returns `Async` instead of `Async`. The `SemanticClassificationView` provides a read-only view over the semantic classification contents via the `ForEach (FSharpSemanticClassificationItem -> unit) -> unit` function. + +The following namespaces have been made internal + +* `FSharp.Compiler.AbstractIL.*`, aside from a small hook for JetBrains Rider +* `FSharp.Compiler.ErrorLogger.*` + +New functions in the `SourceCodeServices` API: + +* `FSharpDiagnostic.NewlineifyErrorString` +* `FSharpDiagnostic.NormalizeErrorString` + ### F# 5 / Visual Studio 16.8 / .NET 5 This release covers three important milestones: F# 5, Visual Studio 16.8, and .NET 5. @@ -32,7 +430,7 @@ This release covers three important milestones: F# 5, Visual Studio 16.8, and .N ### FSharp Core 5.0.0 -* [Performance improvement](https://github.com/dotnet/fsharp/pull/10188) to core collections Set and Map by [Victor Baybekov](https://github.com/buybackoff) + * Consistent behavior for empty/non-existent slices for lists, strings, arrays, 2D arrays, 3D arrays, and 4D arrays * Support for fixed-index slices in 3D and 4D arrays * Support for negative indexes (in preview) @@ -65,32 +463,14 @@ This release covers three important milestones: F# 5, Visual Studio 16.8, and .N * Prevent assignment to `const` fields, by [Chet Husk](https://github.com/baronfel) * Compiler message improvements (especially for overload resolution) by [Gauthier Segay](https://github.com/smoothdeveloper), [Vladimir Shchur](https://github.com/Lanayx), and Microsoft -### FSharp Compiler Service 39.0.0 -* Add ConvertToAnonymousRecord quick fixeroony [#10493](https://github.com/dotnet/fsharp/pull/10493) -* Add UseMutationWhenValueIsMutable code fix [#10488](https://github.com/dotnet/fsharp/pull/10488) -* Add MakeDeclarationMutable code fix [#10480](https://github.com/dotnet/fsharp/pull/10480) -* Add ChangeToUpcast code fix [#10463](https://github.com/dotnet/fsharp/pull/10463) -* Add AddMissingEqualsToTypeDefinition code fixer [#10470](https://github.com/dotnet/fsharp/pull/10470) -* Tag items in tooltips consistenly with respect to document classification. [#9563](https://github.com/dotnet/fsharp/pull/9563) -* Add ConvertToSingleEqualsEqualityExpression code fix [#10462](https://github.com/dotnet/fsharp/pull/10462) -* Turn XML doc and Sig<->Impl mismatch warnings on by default [#10457](https://github.com/dotnet/fsharp/pull/10457) -* Add ChangeRefCellDerefToNotExpression code fixer [#10469](https://github.com/dotnet/fsharp/pull/10469) -* Add WrapExpressionInParentheses code fix [#10460](https://github.com/dotnet/fsharp/pull/10460) -* Add ChangePrefixNegationToInfixSubtraction code fixeroo [#10471](https://github.com/dotnet/fsharp/pull/10471) -* Fix generic overloads with nullable [#10582](https://github.com/dotnet/fsharp/pull/10582) -* Resolve issue with implicit yields requiring Zero [#10556](https://github.com/dotnet/fsharp/pull/10556), by [Ryan Coy](https://github.com/laenas) -* Fix issue10550 FSI accessing System.Configuration. [#10572](https://github.com/dotnet/fsharp/pull/10572) -* Add field names to ILNativeType.Custom. [#10567](https://github.com/dotnet/fsharp/pull/10567), by [Scott Hutchinson](https://github.com/ScottHutchinson) -* Add field names to the ILExceptionClause.FilterCatch constructor. [#10559](https://github.com/dotnet/fsharp/pull/10559), by [Scott Hutchinson](https://github.com/ScottHutchinson) -* Fix completion with backticks, underscores, numbers [#10500](https://github.com/dotnet/fsharp/pull/10500), by [zanaptak](https://github.com/zanaptak) -* Emitting IsReadOnly/In attributes on abstract properties [#10542](https://github.com/dotnet/fsharp/pull/10542) -* Disable partial type checking when getting full results for a file [#10448](https://github.com/dotnet/fsharp/pull/10448) -* Fix unused open type declaration detection [#10510](https://github.com/dotnet/fsharp/pull/10510), by [André Slupik](https://github.com/asik) +### FSharp Compiler Service 38.0.2 + +* Add FSharp.DependencyManager.Nuget as a project reference and ensure it is in the package, allowing other editors to consume `#r "nuget:..."` references at design-time [#10784](https://github.com/dotnet/fsharp/pull/10784) ### FSharp Compiler Service 38.0.1 -* add check for system assemblies completion [#10575](https://github.com/dotnet/fsharp/pull/10575) +* Add check for system assemblies completion [#10575](https://github.com/dotnet/fsharp/pull/10575) * Fix net sdk references discovery [#10569](https://github.com/dotnet/fsharp/pull/10569) -* Fix FSC nuget package dependencies. [#10588](https://github.com/dotnet/fsharp/pull/10588) +* Fix FSC nuget package dependencies [#10588](https://github.com/dotnet/fsharp/pull/10588) ### FSharp Compiler Service 38.0.0 @@ -101,7 +481,7 @@ The most notable change for FSharp.Compiler.Service is that it is now built and * Improvements to the F# syntax tree represtation by [Eugene Auduchinok](https://github.com/auduchinok) * Support for `const` in keyword completion info by [Alex Berezhnykh](https://github.com/DedSec256) * Support for passing in a `PrimaryAssembly` for AST compilation routines by [Eirik Tsarpalis](https://github.com/eiriktsarpalis) -* Support for `ToString` in `FSharp.Compiler.Text.StringText` by [Asti](https://github.com/deviousasti) +* Support for `ToString` in `FSharp.Compiler.SourceCodeServices.StringText` by [Asti](https://github.com/deviousasti) * Fix an issue with equality comparisons for `StringText` by [Asti](https://github.com/deviousasti) Significant changes for consumers: @@ -479,7 +859,7 @@ Significant improvements in the F# tools, such as performance enhancements and s There is now an experimental CodeLens implementation, contributed by [Victor Peter Rouven Müller](https://github.com/realvictorprm). You can turn it on in **Options > Text Editor > F# > Code Lens**. * A bug where the F# compiler service would incorrectly elide the module names in XML documentation has been fixed by [Sebastian Urban](https://github.com/surban). * Code that uses `Dictionary` with `ContainsKey` and subsequent `Item` calls has been changed to use `TryGetValue`, by [Eugene Auduchinok](https://github.com/auduchinok). -* [Jakob Majoka](https://github.com/majocha) also contributed in the process of consuming a different API for Tooltips. +* [Jakob Majoka](https://github.com/majocha) also contributed in the process of consuming a different API for FSharpToolTip. #### Infrastructure, Packaging, and Open Source Improvements @@ -743,7 +1123,7 @@ Integrate dotnet/fsharp from 48f932cf8 to 085985140. Notable changes include: * Integrate dotnet/fsharp from 5a8f454a1 to 05c558a61 * Notable changes include: * Removal of the `Microsoft.FSharp.Compiler.SourceCodeServices` namespace - * A new API for determining if an identifier needs to be quoted is available: `FSharp.Compiler.LexHelp.Keywords.DoesIdentifierNeedQuotation` + * A new API for determining if an identifier needs to be quoted is available: `FSharp.Compiler.LexHelp.FSharpKeywords.DoesIdentifierNeedQuotation` * Enhancements to the correctness of PDBs * Better string formatting of records and values * More stack overflow fixes in the compiler @@ -1053,7 +1433,7 @@ Integrate dotnet/fsharp from 48f932cf8 to 085985140. Notable changes include: * Integrate visualfsharp/master and fsharp/master --> master * Expose QualifiedName and FileName of FSharpImplementationFileContents -* Add FSharpErrorInfo.ErrorNumber +* Add FSharpDiagnostic.ErrorNumber ### 2.0.0.1-beta diff --git a/setup/Swix/Microsoft.FSharp.Compiler.MSBuild/Microsoft.FSharp.Compiler.MSBuild.csproj b/setup/Swix/Microsoft.FSharp.Compiler.MSBuild/Microsoft.FSharp.Compiler.MSBuild.csproj index 53580c811cb..5ebc1fe5ea4 100644 --- a/setup/Swix/Microsoft.FSharp.Compiler.MSBuild/Microsoft.FSharp.Compiler.MSBuild.csproj +++ b/setup/Swix/Microsoft.FSharp.Compiler.MSBuild/Microsoft.FSharp.Compiler.MSBuild.csproj @@ -8,11 +8,12 @@ + - + - + - + <_Line> @@ -63,11 +62,7 @@ folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\%(_XlfLanguages - + <_Lines> @@ -81,36 +76,40 @@ vs.dependencies version=$(VsixVersion) type=Required -folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp" - file source="$(BinariesFolder)\fsc\$(Configuration)\$(TargetFramework)\fsc.exe" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 vs.file.ngenApplication="[installDir]\Common7\IDE\CommonExtensions\Microsoft\FSharp\fsc.exe" - file source="$(BinariesFolder)\fsc\$(Configuration)\$(TargetFramework)\fsc.exe.config" - file source="$(BinariesFolder)\fsi\$(Configuration)\$(TargetFramework)\fsi.exe" vs.file.ngen=yes vs.file.ngenArchitecture=X86 vs.file.ngenPriority=2 vs.file.ngenApplication="[installDir]\Common7\IDE\CommonExtensions\Microsoft\FSharp\fsi.exe" - file source="$(BinariesFolder)\fsi\$(Configuration)\$(TargetFramework)\fsi.exe.config" - file source="$(BinariesFolder)\fsiAnyCpu\$(Configuration)\$(TargetFramework)\fsiAnyCpu.exe" vs.file.ngen=yes vs.file.ngenArchitecture=X64 vs.file.ngenPriority=2 vs.file.ngenApplication="[installDir]\Common7\IDE\CommonExtensions\Microsoft\FSharp\fsiAnyCpu.exe" - file source="$(BinariesFolder)\fsiAnyCpu\$(Configuration)\$(TargetFramework)\fsiAnyCpu.exe.config" - file source="$(BinariesFolder)\FSharp.Compiler.Interactive.Settings\$(Configuration)\netstandard2.0\FSharp.Compiler.Interactive.Settings.dll" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 - file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\FSharp.Compiler.Private.dll" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 - file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\System.Buffers.dll" - file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\System.Collections.Immutable.dll" - file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\System.Memory.dll" - file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\System.Numerics.Vectors.dll" - file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\System.Reflection.Metadata.dll" - file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\System.Resources.Extensions.dll" - file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\System.Runtime.CompilerServices.Unsafe.dll" - file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\System.Threading.Tasks.Dataflow.dll" - file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\Microsoft.Build.Framework.dll" - file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\Microsoft.Build.Tasks.Core.dll" - file source="$(BinariesFolder)\FSharp.Compiler.Private\$(Configuration)\$(TargetFramework)\Microsoft.Build.Utilities.Core.dll" - file source="$(BinariesFolder)\FSharp.Compiler.Server.Shared\$(Configuration)\$(TargetFramework)\FSharp.Compiler.Server.Shared.dll" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 - file source="$(BinariesFolder)\FSharp.Core\$(Configuration)\netstandard2.0\FSharp.Core.dll" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 - file source="$(BinariesFolder)\FSharp.Core\$(Configuration)\netstandard2.0\FSharp.Core.xml" - file source="$(BinariesFolder)\FSharp.Build\$(Configuration)\netstandard2.0\FSharp.Build.dll" vs.file.ngen=no vs.file.ngenArchitecture=All vs.file.ngenPriority=2 - file source="$(BinariesFolder)\FSharp.Build\$(Configuration)\netstandard2.0\Microsoft.Portable.FSharp.Targets" - file source="$(BinariesFolder)\FSharp.Build\$(Configuration)\netstandard2.0\Microsoft.FSharp.NetSdk.props" - file source="$(BinariesFolder)\FSharp.Build\$(Configuration)\netstandard2.0\Microsoft.FSharp.NetSdk.targets" - file source="$(BinariesFolder)\FSharp.Build\$(Configuration)\netstandard2.0\Microsoft.FSharp.Overrides.NetSdk.targets" - file source="$(BinariesFolder)\FSharp.Build\$(Configuration)\netstandard2.0\Microsoft.FSharp.Targets" - file source="$(BinariesFolder)\Microsoft.DotNet.DependencyManager\$(Configuration)\net472\Microsoft.DotNet.DependencyManager.dll" vs.file.ngen=no vs.file.ngenArchitecture=All vs.file.ngenPriority=2 +folder "InstallDir:Common7\IDE\CommonExtensions\Microsoft\FSharp\Tools" + file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\fsc.exe" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 vs.file.ngenApplication="[installDir]\Common7\IDE\CommonExtensions\Microsoft\FSharp\Tools\fsc.exe" + file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\fsc.exe.config" + file source="$(BinariesFolder)fsi\$(Configuration)\$(TargetFramework)\fsi.exe" vs.file.ngen=yes vs.file.ngenArchitecture=X86 vs.file.ngenPriority=2 vs.file.ngenApplication="[installDir]\Common7\IDE\CommonExtensions\Microsoft\FSharp\Tools\fsi.exe" + file source="$(BinariesFolder)fsi\$(Configuration)\$(TargetFramework)\fsi.exe.config" + file source="$(BinariesFolder)fsiAnyCpu\$(Configuration)\$(TargetFramework)\fsiAnyCpu.exe" vs.file.ngen=yes vs.file.ngenArchitecture=X64 vs.file.ngenPriority=2 vs.file.ngenApplication="[installDir]\Common7\IDE\CommonExtensions\Microsoft\FSharp\Tools\fsiAnyCpu.exe" + file source="$(BinariesFolder)fsiAnyCpu\$(Configuration)\$(TargetFramework)\fsiAnyCpu.exe.config" + file source="$(BinariesFolder)FSharp.Compiler.Interactive.Settings\$(Configuration)\netstandard2.0\FSharp.Compiler.Interactive.Settings.dll" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 + file source="$(BinariesFolder)FSharp.Compiler.Interactive.Settings\$(Configuration)\netstandard2.0\FSharp.Compiler.Interactive.Settings.xml" + file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\FSharp.Compiler.Service.dll" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 + file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\FSharp.Compiler.Service.xml" + file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\System.Buffers.dll" + file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\System.Collections.Immutable.dll" + file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\System.Memory.dll" + file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\System.Numerics.Vectors.dll" + file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\System.Reflection.Metadata.dll" + file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\System.Resources.Extensions.dll" + file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\System.Runtime.CompilerServices.Unsafe.dll" + file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\System.Threading.Tasks.Dataflow.dll" + file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\Microsoft.Build.Framework.dll" + file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\Microsoft.Build.Tasks.Core.dll" + file source="$(BinariesFolder)fsc\$(Configuration)\$(TargetFramework)\Microsoft.Build.Utilities.Core.dll" + file source="$(BinariesFolder)FSharp.Compiler.Server.Shared\$(Configuration)\$(TargetFramework)\FSharp.Compiler.Server.Shared.dll" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 + file source="$(BinariesFolder)FSharp.Core\$(Configuration)\netstandard2.0\FSharp.Core.dll" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 + file source="$(BinariesFolder)FSharp.Core\$(Configuration)\netstandard2.0\FSharp.Core.xml" + file source="$(BinariesFolder)FSharp.Build\$(Configuration)\netstandard2.0\FSharp.Build.dll" vs.file.ngen=no vs.file.ngenArchitecture=All vs.file.ngenPriority=2 + file source="$(BinariesFolder)FSharp.Build\$(Configuration)\netstandard2.0\FSharp.Build.xml" + file source="$(BinariesFolder)FSharp.DependencyManager.Nuget\$(Configuration)\netstandard2.0\FSharp.DependencyManager.Nuget.dll" vs.file.ngen=yes vs.file.ngenArchitecture=All vs.file.ngenPriority=2 + file source="$(BinariesFolder)FSharp.DependencyManager.Nuget\$(Configuration)\netstandard2.0\FSharp.DependencyManager.Nuget.xml" + file source="$(BinariesFolder)FSharp.Build\$(Configuration)\netstandard2.0\Microsoft.Portable.FSharp.Targets" + file source="$(BinariesFolder)FSharp.Build\$(Configuration)\netstandard2.0\Microsoft.FSharp.NetSdk.props" + file source="$(BinariesFolder)FSharp.Build\$(Configuration)\netstandard2.0\Microsoft.FSharp.NetSdk.targets" + file source="$(BinariesFolder)FSharp.Build\$(Configuration)\netstandard2.0\Microsoft.FSharp.Overrides.NetSdk.targets" + file source="$(BinariesFolder)FSharp.Build\$(Configuration)\netstandard2.0\Microsoft.FSharp.Targets" @(_BuiltSwrLines) ]]> diff --git a/setup/Swix/Microsoft.FSharp.Dependencies/fsharp.bat b/setup/Swix/Microsoft.FSharp.Dependencies/fsharp.bat index adbadf3f819..0090e8ce5fc 100644 --- a/setup/Swix/Microsoft.FSharp.Dependencies/fsharp.bat +++ b/setup/Swix/Microsoft.FSharp.Dependencies/fsharp.bat @@ -1,7 +1,7 @@ if "%VSCMD_TEST%" NEQ "" goto :test if "%VSCMD_ARG_CLEAN_ENV%" NEQ "" goto :clean_env -set FSHARPINSTALLDIR=%VSINSTALLDIR%Common7\IDE\CommonExtensions\Microsoft\FSharp\ +set FSHARPINSTALLDIR=%VSINSTALLDIR%Common7\IDE\CommonExtensions\Microsoft\FSharp\Tools set "PATH=%FSHARPINSTALLDIR%;%PATH%" goto :end diff --git a/setup/Swix/Microsoft.FSharp.IDE/Microsoft.FSharp.IDE.csproj b/setup/Swix/Microsoft.FSharp.IDE/Microsoft.FSharp.IDE.csproj index 88cc12d66fd..834d95d3bf1 100644 --- a/setup/Swix/Microsoft.FSharp.IDE/Microsoft.FSharp.IDE.csproj +++ b/setup/Swix/Microsoft.FSharp.IDE/Microsoft.FSharp.IDE.csproj @@ -16,8 +16,7 @@ <_Dependency Include="FSharp.Build" Version="$(FSProductVersion)" /> <_Dependency Include="FSharp.Compiler.Interactive.Settings" Version="$(FSProductVersion)" /> - <_Dependency Include="FSharp.Compiler.Private" Version="$(FSProductVersion)" /> - <_Dependency Include="Microsoft.DotNet.DependencyManager" Version="$(FSProductVersion)" /> + <_Dependency Include="FSharp.Compiler.Service" Version="$(FSharpCompilerServiceVersion)" /> <_Dependency Include="FSharp.DependencyManager.Nuget" Version="$(FSProductVersion)" /> <_Dependency Include="FSharp.Compiler.Server.Shared" Version="$(FSProductVersion)" /> <_Dependency Include="FSharp.Core" Version="$(FSCoreVersion)" /> @@ -32,8 +31,7 @@ <_Dependency Include="FSharp.VS.FSI" Version="$(VSAssemblyVersion)" /> - + $(InsertionDir)\DevDivPackages $(DevDivPackagesDir)\DependentAssemblyVersions.csv @@ -47,4 +45,4 @@ - + \ No newline at end of file diff --git a/setup/Swix/Microsoft.FSharp.IDE/Package.swr b/setup/Swix/Microsoft.FSharp.IDE/Package.swr index 8184815f837..ea75aebf1da 100644 --- a/setup/Swix/Microsoft.FSharp.IDE/Package.swr +++ b/setup/Swix/Microsoft.FSharp.IDE/Package.swr @@ -8,6 +8,10 @@ vs.dependencies version=$(VsixVersion) type=Required + vs.dependency id=Microsoft.FSharp.Compiler + version=$(VsixVersion) + type=Required + vs.dependency id=Microsoft.FSharp.VSIX.Full.Core version=$(VsixVersion) type=Required @@ -20,4 +24,4 @@ folder "InstallDir:Common7\IDE\NewScriptItems" folder "InstallDir:Common7\IDE\NewFileItems" file source="$(SetupResourcesDir)\NewFileDialog\General\NewFSharpFileItems.vsdir" file source="$(SetupResourcesDir)\NewFileDialog\General\File.fs" - file source="$(SetupResourcesDir)\NewFileDialog\General\Script.fsx" + file source="$(SetupResourcesDir)\NewFileDialog\General\Script.fsx" \ No newline at end of file diff --git a/setup/shims/Microsoft.FSharp.NetSdk.Shim.props b/setup/shims/Microsoft.FSharp.NetSdk.Shim.props index 203b37e5734..28907c3c23c 100644 --- a/setup/shims/Microsoft.FSharp.NetSdk.Shim.props +++ b/setup/shims/Microsoft.FSharp.NetSdk.Shim.props @@ -1,6 +1,6 @@ - + diff --git a/setup/shims/Microsoft.FSharp.NetSdk.Shim.targets b/setup/shims/Microsoft.FSharp.NetSdk.Shim.targets index f5212ec914a..b9e0ea907e3 100644 --- a/setup/shims/Microsoft.FSharp.NetSdk.Shim.targets +++ b/setup/shims/Microsoft.FSharp.NetSdk.Shim.targets @@ -1,6 +1,6 @@ - + diff --git a/setup/shims/Microsoft.FSharp.Overrides.NetSdk.Shim.targets b/setup/shims/Microsoft.FSharp.Overrides.NetSdk.Shim.targets index c7c7b8a477b..cfd530eefd4 100644 --- a/setup/shims/Microsoft.FSharp.Overrides.NetSdk.Shim.targets +++ b/setup/shims/Microsoft.FSharp.Overrides.NetSdk.Shim.targets @@ -1,6 +1,6 @@ - + diff --git a/setup/shims/Microsoft.FSharp.Shim.targets b/setup/shims/Microsoft.FSharp.Shim.targets index 62b798f5e78..53acced723e 100644 --- a/setup/shims/Microsoft.FSharp.Shim.targets +++ b/setup/shims/Microsoft.FSharp.Shim.targets @@ -1,6 +1,6 @@ - + diff --git a/setup/shims/Microsoft.Portable.FSharp.Shim.targets b/setup/shims/Microsoft.Portable.FSharp.Shim.targets index 5aecfd384fa..f24c26561d8 100644 --- a/setup/shims/Microsoft.Portable.FSharp.Shim.targets +++ b/setup/shims/Microsoft.Portable.FSharp.Shim.targets @@ -1,6 +1,6 @@ - + diff --git a/src/buildtools/AssemblyCheck/AssemblyCheck.fs b/src/buildtools/AssemblyCheck/AssemblyCheck.fs index 9eb04a3087d..a4f916e2f49 100644 --- a/src/buildtools/AssemblyCheck/AssemblyCheck.fs +++ b/src/buildtools/AssemblyCheck/AssemblyCheck.fs @@ -15,35 +15,52 @@ module AssemblyCheck = let private devVersionPattern = new Regex(@"-(ci|dev)", RegexOptions.Compiled) let verifyEmbeddedPdb (filename:string) = - use fileStream = File.OpenRead(filename) - let reader = new PEReader(fileStream) - let mutable hasEmbeddedPdb = false - - try - for entry in reader.ReadDebugDirectory() do - match entry.Type with - | DebugDirectoryEntryType.CodeView -> - let _ = reader.ReadCodeViewDebugDirectoryData(entry) - () - - | DebugDirectoryEntryType.EmbeddedPortablePdb -> - let _ = reader.ReadEmbeddedPortablePdbDebugDirectoryData(entry) - hasEmbeddedPdb <- true - () - - | DebugDirectoryEntryType.PdbChecksum -> - let _ = reader.ReadPdbChecksumDebugDirectoryData(entry) - () - - | _ -> () - with | e -> printfn "Error validating assembly %s\nMessage: %s" filename (e.ToString()) - hasEmbeddedPdb + let isManagedDll = + try + // Is il assembly? throws if not + let _ = AssemblyName.GetAssemblyName(filename).Version + true + with + | :? System.BadImageFormatException -> false // uninterested in embedded pdbs for native dlls + + if isManagedDll then + use fileStream = File.OpenRead(filename) + let reader = new PEReader(fileStream) + let mutable hasEmbeddedPdb = false + + try + for entry in reader.ReadDebugDirectory() do + match entry.Type with + | DebugDirectoryEntryType.CodeView -> + let _ = reader.ReadCodeViewDebugDirectoryData(entry) + () + + | DebugDirectoryEntryType.EmbeddedPortablePdb -> + let _ = reader.ReadEmbeddedPortablePdbDebugDirectoryData(entry) + hasEmbeddedPdb <- true + () + + | DebugDirectoryEntryType.PdbChecksum -> + let _ = reader.ReadPdbChecksumDebugDirectoryData(entry) + () + + | _ -> () + with + | e -> printfn "Error validating assembly %s\nMessage: %s" filename (e.ToString()) + + hasEmbeddedPdb + else + true let verifyAssemblies (binariesPath:string) = let excludedAssemblies = [ ] |> Set.ofList + let maybeNativeExe = + [ "fsi.exe" + "fsc.exe" ] |> Set.ofList + let fsharpAssemblies = [ "FSharp*.dll" "fsc.exe" @@ -63,8 +80,12 @@ module AssemblyCheck = let failedVersionCheck = fsharpAssemblies |> List.filter (fun a -> - let assemblyVersion = AssemblyName.GetAssemblyName(a).Version - assemblyVersion = versionZero || assemblyVersion = versionOne) + try + let assemblyVersion = AssemblyName.GetAssemblyName(a).Version + assemblyVersion = versionZero || assemblyVersion = versionOne + with | :? System.BadImageFormatException -> + // fsc.exe and fsi.exe are il on the desktop and native on the coreclr + Set.contains (Path.GetFileName(a)) maybeNativeExe |> not) if failedVersionCheck.Length > 0 then printfn "The following assemblies had a version of %A or %A" versionZero versionOne diff --git a/src/buildtools/AssemblyCheck/AssemblyCheck.fsproj b/src/buildtools/AssemblyCheck/AssemblyCheck.fsproj index be43696d78c..464b6ef78c8 100644 --- a/src/buildtools/AssemblyCheck/AssemblyCheck.fsproj +++ b/src/buildtools/AssemblyCheck/AssemblyCheck.fsproj @@ -2,7 +2,7 @@ Exe - netcoreapp3.1 + net5.0 true diff --git a/src/buildtools/fslex/Arg.fs b/src/buildtools/fslex/Arg.fs index a1f63bd9638..b1131625cf3 100644 --- a/src/buildtools/fslex/Arg.fs +++ b/src/buildtools/fslex/Arg.fs @@ -52,13 +52,13 @@ type ArgParser() = sbuf.ToString() - static member ParsePartial(cursor,argv,argSpecs:seq,?other,?usageText) = - let other = defaultArg other (fun _ -> ()) + static member ParsePartial(cursor,argv,arguments:seq,?otherArgs,?usageText) = + let otherArgs = defaultArg otherArgs (fun _ -> ()) let usageText = defaultArg usageText "" let nargs = Array.length argv incr cursor; - let argSpecs = argSpecs |> Seq.toList - let specs = argSpecs |> List.map (fun (arg:ArgInfo) -> arg.Name, arg.ArgType) + let arguments = arguments |> Seq.toList + let specs = arguments |> List.map (fun (arg:ArgInfo) -> arg.Name, arg.ArgType) while !cursor < nargs do let arg = argv.[!cursor] let rec findMatchingArg args = @@ -66,7 +66,7 @@ type ArgParser() = | ((s, action) :: _) when s = arg -> let getSecondArg () = if !cursor + 1 >= nargs then - raise(Bad("option "+s+" needs an argument.\n"+getUsage argSpecs usageText)); + raise(Bad("option "+s+" needs an argument.\n"+getUsage arguments usageText)); argv.[!cursor+1] match action with @@ -85,12 +85,12 @@ type ArgParser() = cursor := !cursor + 2 | IntArg f -> let arg2 = getSecondArg () - let arg2 = try int32 arg2 with _ -> raise(Bad(getUsage argSpecs usageText)) in + let arg2 = try int32 arg2 with _ -> raise(Bad(getUsage arguments usageText)) in f arg2; cursor := !cursor + 2; | FloatArg f -> let arg2 = getSecondArg() - let arg2 = try float arg2 with _ -> raise(Bad(getUsage argSpecs usageText)) in + let arg2 = try float arg2 with _ -> raise(Bad(getUsage arguments usageText)) in f arg2; cursor := !cursor + 2; | RestArg f -> @@ -102,26 +102,26 @@ type ArgParser() = | (_ :: more) -> findMatchingArg more | [] -> if arg = "-help" || arg = "--help" || arg = "/help" || arg = "/help" || arg = "/?" then - raise (HelpText (getUsage argSpecs usageText)) + raise (HelpText (getUsage arguments usageText)) // Note: for '/abc/def' does not count as an argument // Note: '/abc' does elif arg.Length>0 && (arg.[0] = '-' || (arg.[0] = '/' && not (arg.Length > 1 && arg.[1..].Contains ("/")))) then - raise (Bad ("unrecognized argument: "+ arg + "\n" + getUsage argSpecs usageText)) + raise (Bad ("unrecognized argument: "+ arg + "\n" + getUsage arguments usageText)) else - other arg; + otherArgs arg; incr cursor findMatchingArg specs - static member Usage (specs,?usage) = + static member Usage (arguments,?usage) = let usage = defaultArg usage "" - System.Console.Error.WriteLine (getUsage (Seq.toList specs) usage) + System.Console.Error.WriteLine (getUsage (Seq.toList arguments) usage) #if FX_NO_COMMAND_LINE_ARGS #else - static member Parse (specs,?other,?usageText) = + static member Parse (arguments,?otherArgs,?usageText) = let current = ref 0 let argv = System.Environment.GetCommandLineArgs() - try ArgParser.ParsePartial (current, argv, specs, ?other=other, ?usageText=usageText) + try ArgParser.ParsePartial (current, argv, arguments, ?otherArgs=otherArgs, ?usageText=usageText) with | Bad h | HelpText h -> diff --git a/src/buildtools/fslex/Parsing.fsi b/src/buildtools/fslex/Parsing.fsi index 2fef45975a8..f4d12606462 100644 --- a/src/buildtools/fslex/Parsing.fsi +++ b/src/buildtools/fslex/Parsing.fsi @@ -100,7 +100,7 @@ type Tables<'tok> = /// Interpret the parser table taking input from the given lexer, using the given lex buffer, and the given start state. /// Returns an object indicating the final synthesized value for the parse. - member Interpret : lexer:(LexBuffer<'char> -> 'tok) * lexbuf:LexBuffer<'char> * startState:int -> obj + member Interpret : lexer:(LexBuffer<'char> -> 'tok) * lexbuf:LexBuffer<'char> * initialState:int -> obj #if INTERNALIZED_FSLEXYACC_RUNTIME exception internal Accept of obj diff --git a/src/buildtools/fslex/fslex.fsproj b/src/buildtools/fslex/fslex.fsproj index da7c52ba13e..1959ce59c00 100644 --- a/src/buildtools/fslex/fslex.fsproj +++ b/src/buildtools/fslex/fslex.fsproj @@ -2,7 +2,7 @@ Exe - netcoreapp3.1 + net5.0 INTERNALIZED_FSLEXYACC_RUNTIME;$(DefineConstants) true diff --git a/src/buildtools/fsyacc/Arg.fs b/src/buildtools/fsyacc/Arg.fs index a1f63bd9638..b1131625cf3 100644 --- a/src/buildtools/fsyacc/Arg.fs +++ b/src/buildtools/fsyacc/Arg.fs @@ -52,13 +52,13 @@ type ArgParser() = sbuf.ToString() - static member ParsePartial(cursor,argv,argSpecs:seq,?other,?usageText) = - let other = defaultArg other (fun _ -> ()) + static member ParsePartial(cursor,argv,arguments:seq,?otherArgs,?usageText) = + let otherArgs = defaultArg otherArgs (fun _ -> ()) let usageText = defaultArg usageText "" let nargs = Array.length argv incr cursor; - let argSpecs = argSpecs |> Seq.toList - let specs = argSpecs |> List.map (fun (arg:ArgInfo) -> arg.Name, arg.ArgType) + let arguments = arguments |> Seq.toList + let specs = arguments |> List.map (fun (arg:ArgInfo) -> arg.Name, arg.ArgType) while !cursor < nargs do let arg = argv.[!cursor] let rec findMatchingArg args = @@ -66,7 +66,7 @@ type ArgParser() = | ((s, action) :: _) when s = arg -> let getSecondArg () = if !cursor + 1 >= nargs then - raise(Bad("option "+s+" needs an argument.\n"+getUsage argSpecs usageText)); + raise(Bad("option "+s+" needs an argument.\n"+getUsage arguments usageText)); argv.[!cursor+1] match action with @@ -85,12 +85,12 @@ type ArgParser() = cursor := !cursor + 2 | IntArg f -> let arg2 = getSecondArg () - let arg2 = try int32 arg2 with _ -> raise(Bad(getUsage argSpecs usageText)) in + let arg2 = try int32 arg2 with _ -> raise(Bad(getUsage arguments usageText)) in f arg2; cursor := !cursor + 2; | FloatArg f -> let arg2 = getSecondArg() - let arg2 = try float arg2 with _ -> raise(Bad(getUsage argSpecs usageText)) in + let arg2 = try float arg2 with _ -> raise(Bad(getUsage arguments usageText)) in f arg2; cursor := !cursor + 2; | RestArg f -> @@ -102,26 +102,26 @@ type ArgParser() = | (_ :: more) -> findMatchingArg more | [] -> if arg = "-help" || arg = "--help" || arg = "/help" || arg = "/help" || arg = "/?" then - raise (HelpText (getUsage argSpecs usageText)) + raise (HelpText (getUsage arguments usageText)) // Note: for '/abc/def' does not count as an argument // Note: '/abc' does elif arg.Length>0 && (arg.[0] = '-' || (arg.[0] = '/' && not (arg.Length > 1 && arg.[1..].Contains ("/")))) then - raise (Bad ("unrecognized argument: "+ arg + "\n" + getUsage argSpecs usageText)) + raise (Bad ("unrecognized argument: "+ arg + "\n" + getUsage arguments usageText)) else - other arg; + otherArgs arg; incr cursor findMatchingArg specs - static member Usage (specs,?usage) = + static member Usage (arguments,?usage) = let usage = defaultArg usage "" - System.Console.Error.WriteLine (getUsage (Seq.toList specs) usage) + System.Console.Error.WriteLine (getUsage (Seq.toList arguments) usage) #if FX_NO_COMMAND_LINE_ARGS #else - static member Parse (specs,?other,?usageText) = + static member Parse (arguments,?otherArgs,?usageText) = let current = ref 0 let argv = System.Environment.GetCommandLineArgs() - try ArgParser.ParsePartial (current, argv, specs, ?other=other, ?usageText=usageText) + try ArgParser.ParsePartial (current, argv, arguments, ?otherArgs=otherArgs, ?usageText=usageText) with | Bad h | HelpText h -> diff --git a/src/buildtools/fsyacc/Parsing.fsi b/src/buildtools/fsyacc/Parsing.fsi index 2fef45975a8..f4d12606462 100644 --- a/src/buildtools/fsyacc/Parsing.fsi +++ b/src/buildtools/fsyacc/Parsing.fsi @@ -100,7 +100,7 @@ type Tables<'tok> = /// Interpret the parser table taking input from the given lexer, using the given lex buffer, and the given start state. /// Returns an object indicating the final synthesized value for the parse. - member Interpret : lexer:(LexBuffer<'char> -> 'tok) * lexbuf:LexBuffer<'char> * startState:int -> obj + member Interpret : lexer:(LexBuffer<'char> -> 'tok) * lexbuf:LexBuffer<'char> * initialState:int -> obj #if INTERNALIZED_FSLEXYACC_RUNTIME exception internal Accept of obj diff --git a/src/buildtools/fsyacc/fsyacc.fsproj b/src/buildtools/fsyacc/fsyacc.fsproj index a2b8cb3844e..5d1b7141f47 100644 --- a/src/buildtools/fsyacc/fsyacc.fsproj +++ b/src/buildtools/fsyacc/fsyacc.fsproj @@ -2,7 +2,7 @@ Exe - netcoreapp3.1 + net5.0 INTERNALIZED_FSLEXYACC_RUNTIME;$(DefineConstants) true diff --git a/src/fsharp/AccessibilityLogic.fs b/src/fsharp/AccessibilityLogic.fs index 2a031949e7d..bda68abc118 100644 --- a/src/fsharp/AccessibilityLogic.fs +++ b/src/fsharp/AccessibilityLogic.fs @@ -7,10 +7,10 @@ open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Infos +open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.TcGlobals #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping diff --git a/src/fsharp/AccessibilityLogic.fsi b/src/fsharp/AccessibilityLogic.fsi index 55fa500f1b2..7169ce9774e 100644 --- a/src/fsharp/AccessibilityLogic.fsi +++ b/src/fsharp/AccessibilityLogic.fsi @@ -7,9 +7,9 @@ open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler open FSharp.Compiler.Import open FSharp.Compiler.Infos -open FSharp.Compiler.TypedTree -open FSharp.Compiler.Range open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.TypedTree /// Represents the 'keys' a particular piece of code can use to access other constructs?. [] diff --git a/src/fsharp/AttributeChecking.fs b/src/fsharp/AttributeChecking.fs index 58c69ef404e..f8a3f4f34dd 100644 --- a/src/fsharp/AttributeChecking.fs +++ b/src/fsharp/AttributeChecking.fs @@ -6,20 +6,19 @@ module internal FSharp.Compiler.AttributeChecking open System open System.Collections.Generic +open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library - open FSharp.Compiler -open FSharp.Compiler.Range open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Infos +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.TcGlobals #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping -open Microsoft.FSharp.Core.CompilerServices +open FSharp.Core.CompilerServices #endif exception ObsoleteWarning of string * range @@ -99,8 +98,8 @@ type AttribInfo = let ty = tyOfExpr g origExpr let obj = evalFSharpAttribArg g evaluatedExpr ty, obj) - | ILAttribInfo (g, amap, scoref, cattr, m) -> - let parms, _args = decodeILAttribData g.ilg cattr + | ILAttribInfo (_g, amap, scoref, cattr, m) -> + let parms, _args = decodeILAttribData cattr [ for (argty, argval) in Seq.zip cattr.Method.FormalArgTypes parms -> let ty = ImportILType scoref amap m [] argty let obj = evalILAttribElem argval @@ -114,8 +113,8 @@ type AttribInfo = let ty = tyOfExpr g origExpr let obj = evalFSharpAttribArg g evaluatedExpr ty, nm, isField, obj) - | ILAttribInfo (g, amap, scoref, cattr, m) -> - let _parms, namedArgs = decodeILAttribData g.ilg cattr + | ILAttribInfo (_g, amap, scoref, cattr, m) -> + let _parms, namedArgs = decodeILAttribData cattr [ for (nm, argty, isProp, argval) in namedArgs -> let ty = ImportILType scoref amap m [] argty let obj = evalILAttribElem argval @@ -199,7 +198,7 @@ let TryBindMethInfoAttribute g (m: range) (AttribInfo(atref, _) as attribSpec) m ignore f3 #endif BindMethInfoAttributes m minfo - (fun ilAttribs -> TryDecodeILAttribute g atref ilAttribs |> Option.bind f1) + (fun ilAttribs -> TryDecodeILAttribute atref ilAttribs |> Option.bind f1) (fun fsAttribs -> TryFindFSharpAttribute g attribSpec fsAttribs |> Option.bind f2) #if !NO_EXTENSIONTYPING (fun provAttribs -> @@ -231,7 +230,7 @@ let MethInfoHasAttribute g m attribSpec minfo = /// Check IL attributes for 'ObsoleteAttribute', returning errors and warnings as data let private CheckILAttributes (g: TcGlobals) isByrefLikeTyconRef cattrs m = let (AttribInfo(tref,_)) = g.attrib_SystemObsolete - match TryDecodeILAttribute g tref cattrs with + match TryDecodeILAttribute tref cattrs with | Some ([ILAttribElem.String (Some msg) ], _) when not isByrefLikeTyconRef -> WarnD(ObsoleteWarning(msg, m)) | Some ([ILAttribElem.String (Some msg); ILAttribElem.Bool isError ], _) when not isByrefLikeTyconRef -> @@ -330,7 +329,7 @@ let private CheckProvidedAttributes (g: TcGlobals) m (provAttribs: Tainted List.foldBack (fun e acc -> let nv, ne = mkCompGenLocal m "n" g.int_ty mkCompGenLet m nv e - (mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m g.int_ty + (mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m g.int_ty (mkClt g m ne (mkZero g m)) ne - (mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m g.int_ty + (mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m g.int_ty (mkCgt g m ne (mkZero g m)) ne acc))) @@ -172,7 +172,7 @@ let mkEqualsTestConjuncts g m exprs = | [h] -> h | l -> let a, b = List.frontAndBack l - List.foldBack (fun e acc -> mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m g.bool_ty e acc (mkFalse g m)) a b + List.foldBack (fun e acc -> mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m g.bool_ty e acc (mkFalse g m)) a b let mkMinimalTy (g: TcGlobals) (tcref: TyconRef) = if tcref.Deref.IsExceptionDecl then [], g.exn_ty @@ -301,7 +301,7 @@ let mkExnEquality (g: TcGlobals) exnref (exnc: Tycon) = (mkExnCaseFieldGet(thate, exnref, i, m)) let expr = mkEqualsTestConjuncts g m (List.mapi mkTest exnc.AllInstanceFieldsAsList) let expr = - let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m ) + let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m ) let cases = [ mkCase(DecisionTreeTest.IsInst(g.exn_ty, mkAppTy exnref []), mbuilder.AddResultTarget(expr, DebugPointForTarget.No)) ] @@ -324,7 +324,7 @@ let mkExnEqualityWithComparer g exnref (exnc: Tycon) (_thisv, thise) thatobje (t (mkExnCaseFieldGet(thataddre, exnref, i, m)) let expr = mkEqualsTestConjuncts g m (List.mapi mkTest exnc.AllInstanceFieldsAsList) let expr = - let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m ) + let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m ) let cases = [ mkCase(DecisionTreeTest.IsInst(g.exn_ty, mkAppTy exnref []), mbuilder.AddResultTarget(expr, DebugPointForTarget.No)) ] @@ -347,7 +347,7 @@ let mkUnionCompare g tcref (tycon: Tycon) = let compe = mkILCallGetComparer g m let expr = - let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m ) + let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m ) let mkCase ucase = let cref = tcref.MakeNestedUnionCaseRef ucase let m = cref.Range @@ -379,7 +379,7 @@ let mkUnionCompare g tcref (tycon: Tycon) = let expr = if ucases.Length = 1 then expr else let tagsEqTested = - mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m g.int_ty + mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m g.int_ty (mkILAsmCeq g m thistage thattage) expr (mkAsmExpr ([ IL.AI_sub ], [], [thistage; thattage], [g.int_ty], m))in @@ -405,7 +405,7 @@ let mkUnionCompareWithComparer g tcref (tycon: Tycon) (_thisv, thise) (_thatobjv let thattagv, thattage = mkCompGenLocal m "thatTag" g.int_ty let expr = - let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m ) + let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m ) let mkCase ucase = let cref = tcref.MakeNestedUnionCaseRef ucase let m = cref.Range @@ -440,7 +440,7 @@ let mkUnionCompareWithComparer g tcref (tycon: Tycon) (_thisv, thise) (_thatobjv let expr = if ucases.Length = 1 then expr else let tagsEqTested = - mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m g.int_ty + mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m g.int_ty (mkILAsmCeq g m thistage thattage) expr (mkAsmExpr ([ IL.AI_sub ], [], [thistage; thattage], [g.int_ty], m)) @@ -466,7 +466,7 @@ let mkUnionEquality g tcref (tycon: Tycon) = let thattagv, thattage = mkCompGenLocal m "thatTag" g.int_ty let expr = - let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m ) + let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m ) let mkCase ucase = let cref = tcref.MakeNestedUnionCaseRef ucase let m = cref.Range @@ -500,7 +500,7 @@ let mkUnionEquality g tcref (tycon: Tycon) = let expr = if ucases.Length = 1 then expr else let tagsEqTested = - mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m g.bool_ty + mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m g.bool_ty (mkILAsmCeq g m thistage thattage) expr (mkFalse g m) @@ -525,7 +525,7 @@ let mkUnionEqualityWithComparer g tcref (tycon: Tycon) (_thisv, thise) thatobje let thataddrv, thataddre = mkThatAddrLocal g m ty let expr = - let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m ) + let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m ) let mkCase ucase = let cref = tcref.MakeNestedUnionCaseRef ucase let m = cref.Range @@ -562,7 +562,7 @@ let mkUnionEqualityWithComparer g tcref (tycon: Tycon) (_thisv, thise) thatobje let expr = if ucases.Length = 1 then expr else let tagsEqTested = - mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m g.bool_ty + mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m g.bool_ty (mkILAsmCeq g m thistage thattage) expr (mkFalse g m) @@ -625,7 +625,7 @@ let mkUnionHashWithComparer g tcref (tycon: Tycon) compe = let ucases = tycon.UnionCasesAsList let tinst, ty = mkMinimalTy g tcref let thisv, thise = mkThisVar g m ty - let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m ) + let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m ) let accv, acce = mkMutableCompGenLocal m "i" g.int_ty let mkCase i ucase1 = let c1ref = tcref.MakeNestedUnionCaseRef ucase1 @@ -864,7 +864,7 @@ let slotImplMethod (final, c, slotsig) : ValMemberInfo = IsDispatchSlot=false IsFinal=final IsOverrideOrExplicitImpl=true - MemberKind=MemberKind.Member} + MemberKind=SynMemberKind.Member} IsImplemented=false ApparentEnclosingEntity=c} @@ -874,7 +874,7 @@ let nonVirtualMethod c : ValMemberInfo = IsDispatchSlot=false IsFinal=false IsOverrideOrExplicitImpl=false - MemberKind=MemberKind.Member} + MemberKind=SynMemberKind.Member} IsImplemented=false ApparentEnclosingEntity=c} diff --git a/src/fsharp/AugmentWithHashCompare.fsi b/src/fsharp/AugmentWithHashCompare.fsi index da5b50018fe..4e3acc47ab7 100644 --- a/src/fsharp/AugmentWithHashCompare.fsi +++ b/src/fsharp/AugmentWithHashCompare.fsi @@ -7,31 +7,31 @@ open FSharp.Compiler open FSharp.Compiler.TypedTree open FSharp.Compiler.TcGlobals -val CheckAugmentationAttribs : bool -> TcGlobals -> Import.ImportMap -> Tycon -> unit +val CheckAugmentationAttribs: bool -> TcGlobals -> Import.ImportMap -> Tycon -> unit -val TyconIsCandidateForAugmentationWithCompare : TcGlobals -> Tycon -> bool +val TyconIsCandidateForAugmentationWithCompare: TcGlobals -> Tycon -> bool -val TyconIsCandidateForAugmentationWithEquals : TcGlobals -> Tycon -> bool +val TyconIsCandidateForAugmentationWithEquals: TcGlobals -> Tycon -> bool -val TyconIsCandidateForAugmentationWithHash : TcGlobals -> Tycon -> bool +val TyconIsCandidateForAugmentationWithHash: TcGlobals -> Tycon -> bool -val MakeValsForCompareAugmentation : TcGlobals -> TyconRef -> Val * Val +val MakeValsForCompareAugmentation: TcGlobals -> TyconRef -> Val * Val -val MakeValsForCompareWithComparerAugmentation : TcGlobals -> TyconRef -> Val +val MakeValsForCompareWithComparerAugmentation: TcGlobals -> TyconRef -> Val -val MakeValsForEqualsAugmentation : TcGlobals -> TyconRef -> Val * Val +val MakeValsForEqualsAugmentation: TcGlobals -> TyconRef -> Val * Val -val MakeValsForEqualityWithComparerAugmentation : TcGlobals -> TyconRef -> Val * Val * Val +val MakeValsForEqualityWithComparerAugmentation: TcGlobals -> TyconRef -> Val * Val * Val -val MakeBindingsForCompareAugmentation : TcGlobals -> Tycon -> Binding list +val MakeBindingsForCompareAugmentation: TcGlobals -> Tycon -> Binding list -val MakeBindingsForCompareWithComparerAugmentation : TcGlobals -> Tycon -> Binding list +val MakeBindingsForCompareWithComparerAugmentation: TcGlobals -> Tycon -> Binding list -val MakeBindingsForEqualsAugmentation : TcGlobals -> Tycon -> Binding list +val MakeBindingsForEqualsAugmentation: TcGlobals -> Tycon -> Binding list -val MakeBindingsForEqualityWithComparerAugmentation : TcGlobals -> Tycon -> Binding list +val MakeBindingsForEqualityWithComparerAugmentation: TcGlobals -> Tycon -> Binding list /// This predicate can be used once type inference is complete, before then it is an approximation /// that doesn't assert any new constraints -val TypeDefinitelyHasEquality : TcGlobals -> TType -> bool +val TypeDefinitelyHasEquality: TcGlobals -> TType -> bool diff --git a/src/fsharp/BinaryResourceFormats.fs b/src/fsharp/BinaryResourceFormats.fs index 82c134eeb11..03f83869e13 100644 --- a/src/fsharp/BinaryResourceFormats.fs +++ b/src/fsharp/BinaryResourceFormats.fs @@ -1,13 +1,14 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.BinaryResourceFormats +module internal FSharp.Compiler.BinaryResourceFormats +open FSharp.Compiler.IO +open Internal.Utilities open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal // Helpers for generating binary blobs -module BinaryGenerationUtilities = - // Little-endian encoding of int32 +module BinaryGenerationUtilities = + // Little-endian encoding of int32 let b0 n = byte (n &&& 0xFF) let b1 n = byte ((n >>> 8) &&& 0xFF) let b2 n = byte ((n >>> 16) &&& 0xFF) @@ -17,7 +18,7 @@ module BinaryGenerationUtilities = let i32 (i: int32) = [| b0 i; b1 i; b2 i; b3 i |] // Emit the bytes and pad to a 32-bit alignment - let Padded initialAlignment (v: byte[]) = + let Padded initialAlignment (v: byte[]) = [| yield! v for _ in 1..(4 - (initialAlignment + v.Length) % 4) % 4 do yield 0x0uy |] @@ -38,195 +39,194 @@ module ResFileFormat = yield! i32 0x00000000 // DWORD dwCharacteristics yield! Padded 0 data |] - let ResFileHeader() = ResFileNode(0x0, 0x0, 0x0, 0x0, [| |]) + let ResFileHeader() = ResFileNode(0x0, 0x0, 0x0, 0x0, [| |]) // Generate the VS_VERSION_INFO structure held in a Win32 Version Resource in a PE file // // Web reference: http://www.piclist.com/tecHREF/os/win/api/win32/struc/src/str24_5.htm -module VersionResourceFormat = +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. + [| yield! i16 (data.Length + 2) // wLength : int16 // Specifies the length, in bytes, of the VS_VERSION_INFO structure. yield! data |] let VersionInfoElement(wType, szKey, valueOpt: byte[] option, children: byte[][], isString) = // for String structs, wValueLength represents the word count, not the byte count 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. - yield! i16 wType // wType : int16 Specifies the type of data in the version resource. - yield! Padded 2 szKey - match valueOpt with + [| yield! i16 wValueLength // wValueLength: int16. Specifies the length, in words, of the Value member. + yield! i16 wType // wType : int16 Specifies the type of data in the version resource. + yield! Padded 2 szKey + match valueOpt with | None -> yield! [] - | Some value -> yield! Padded 0 value - for child in children do + | Some value -> yield! Padded 0 value + for child in children do yield! child |] - let Version(version: ILVersionInfo) = + let Version(version: ILVersionInfo) = [| // 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 version.Major <<< 16 ||| int32 version.Minor) - - // 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 version.Build <<< 16 ||| int32 version.Revision) + // 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 version.Major <<< 16 ||| int32 version.Minor) + + // 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 version.Build <<< 16 ||| int32 version.Revision) |] - let String(string, value) = - let wType = 0x1 // Specifies the type of data in the version resource. + let String(string, value) = + let wType = 0x1 // Specifies the type of data in the version resource. let szKey = Bytes.stringAsUnicodeNullTerminated string VersionInfoElement(wType, szKey, Some (Bytes.stringAsUnicodeNullTerminated value), [| |], true) - let StringTable(language, strings) = - let wType = 0x1 // Specifies the type of data in the version resource. + let StringTable(language, strings) = + let wType = 0x1 // Specifies the type of data in the version resource. let szKey = Bytes.stringAsUnicodeNullTerminated language - // Specifies an 8-digit hexadecimal number stored as a Unicode string. - - let children = + // Specifies an 8-digit hexadecimal number stored as a Unicode string. + + let children = [| for string in strings do - yield String string |] + yield String string |] VersionInfoElement(wType, szKey, None, children, false) - let StringFileInfo(stringTables: #seq >) = - let wType = 0x1 // Specifies the type of data in the version resource. + let StringFileInfo(stringTables: #seq >) = + let wType = 0x1 // Specifies the type of data in the version resource. let szKey = Bytes.stringAsUnicodeNullTerminated "StringFileInfo" // Contains the Unicode string StringFileInfo - // Contains an array of one or more StringTable structures. - let children = + // Contains an array of one or more StringTable structures. + let children = [| for stringTable in stringTables do - yield StringTable stringTable |] + yield StringTable stringTable |] VersionInfoElement(wType, szKey, None, children, false) - let VarFileInfo(vars: #seq) = - let wType = 0x1 // Specifies the type of data in the version resource. + let VarFileInfo(vars: #seq) = + let wType = 0x1 // Specifies the type of data in the version resource. let szKey = Bytes.stringAsUnicodeNullTerminated "VarFileInfo" // Contains the Unicode string StringFileInfo - // Contains an array of one or more StringTable structures. - let children = + // Contains an array of one or more StringTable structures. + let children = [| for (lang, codePage) in vars do let szKey = Bytes.stringAsUnicodeNullTerminated "Translation" yield VersionInfoElement(0x0, szKey, Some([| yield! i16 lang - yield! i16 codePage |]), [| |], false) |] + yield! i16 codePage |]), [| |], false) |] VersionInfoElement(wType, szKey, None, children, false) - let VS_FIXEDFILEINFO(fileVersion: ILVersionInfo, - productVersion: ILVersionInfo, - dwFileFlagsMask, - dwFileFlags, dwFileOS, - dwFileType, dwFileSubtype, - lwFileDate: int64) = + let VS_FIXEDFILEINFO(fileVersion: ILVersionInfo, + productVersion: ILVersionInfo, + dwFileFlagsMask, + dwFileFlags, dwFileOS, + dwFileType, dwFileSubtype, + lwFileDate: int64) = let dwStrucVersion = 0x00010000 - [| // DWORD dwSignature // Contains the value 0xFEEFO4BD. - yield! i32 0xFEEF04BD - - // DWORD dwStrucVersion // Specifies the binary version number of this structure. - yield! i32 dwStrucVersion - - // DWORD dwFileVersionMS, dwFileVersionLS // Specifies the most/least significant 32 bits of the file's binary version number. - yield! Version fileVersion - - // DWORD dwProductVersionMS, dwProductVersionLS // Specifies the most/least significant 32 bits of the file's binary version number. - yield! Version productVersion - - // DWORD dwFileFlagsMask // Contains a bitmask that specifies the valid bits in dwFileFlags. - yield! i32 dwFileFlagsMask - - // DWORD dwFileFlags // Contains a bitmask that specifies the Boolean attributes of the file. - yield! i32 dwFileFlags - // 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. - // VS_FF_PRERELEASE The file is a development version, not a commercially released product. - // VS_FF_PRIVATEBUILD The file was not built using standard release procedures. If this flag is - // set, the StringFileInfo structure should contain a PrivateBuild entry. - // VS_FF_SPECIALBUILD The file was built by the original company using standard release procedures - // but is a variation of the normal file of the same version number. If this - // flag is set, the StringFileInfo structure should contain a SpecialBuild entry. - - //Specifies the operating system for which this file was designed. This member can be one of the following values: Flag - yield! i32 dwFileOS - //VOS_DOS 0x0001L The file was designed for MS-DOS. - //VOS_NT 0x0004L The file was designed for Windows NT. - //VOS__WINDOWS16 The file was designed for 16-bit Windows. - //VOS__WINDOWS32 The file was designed for the Win32 API. - //VOS_OS216 0x00020000L The file was designed for 16-bit OS/2. - //VOS_OS232 0x00030000L The file was designed for 32-bit OS/2. - //VOS__PM16 The file was designed for 16-bit Presentation Manager. - //VOS__PM32 The file was designed for 32-bit Presentation Manager. - //VOS_UNKNOWN The operating system for which the file was designed is unknown to Windows. - - // Specifies the general type of file. This member can be one of the following values: - yield! i32 dwFileType - - //VFT_UNKNOWN The file type is unknown to Windows. - //VFT_APP The file contains an application. - //VFT_DLL The file contains a dynamic-link library (DLL). - //VFT_DRV The file contains a device driver. If dwFileType is VFT_DRV, dwFileSubtype contains a more specific description of the driver. - //VFT_FONT The file contains a font. If dwFileType is VFT_FONT, dwFileSubtype contains a more specific description of the font file. - //VFT_VXD The file contains a virtual device. - //VFT_STATIC_LIB The file contains a static-link library. - - // Specifies the function of the file. The possible values depend on the value of - // dwFileType. For all values of dwFileType not described in the following list, - // dwFileSubtype is zero. If dwFileType is VFT_DRV, dwFileSubtype can be one of the following values: - yield! i32 dwFileSubtype - //VFT2_UNKNOWN The driver type is unknown by Windows. - //VFT2_DRV_COMM The file contains a communications driver. - //VFT2_DRV_PRINTER The file contains a printer driver. - //VFT2_DRV_KEYBOARD The file contains a keyboard driver. - //VFT2_DRV_LANGUAGE The file contains a language driver. - //VFT2_DRV_DISPLAY The file contains a display driver. - //VFT2_DRV_MOUSE The file contains a mouse driver. - //VFT2_DRV_NETWORK The file contains a network driver. - //VFT2_DRV_SYSTEM The file contains a system driver. - //VFT2_DRV_INSTALLABLE The file contains an installable driver. - //VFT2_DRV_SOUND The file contains a sound driver. + [| // DWORD dwSignature // Contains the value 0xFEEFO4BD. + yield! i32 0xFEEF04BD + + // DWORD dwStrucVersion // Specifies the binary version number of this structure. + yield! i32 dwStrucVersion + + // DWORD dwFileVersionMS, dwFileVersionLS // Specifies the most/least significant 32 bits of the file's binary version number. + yield! Version fileVersion + + // DWORD dwProductVersionMS, dwProductVersionLS // Specifies the most/least significant 32 bits of the file's binary version number. + yield! Version productVersion + + // DWORD dwFileFlagsMask // Contains a bitmask that specifies the valid bits in dwFileFlags. + yield! i32 dwFileFlagsMask + + // DWORD dwFileFlags // Contains a bitmask that specifies the Boolean attributes of the file. + yield! i32 dwFileFlags + // 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. + // VS_FF_PRERELEASE The file is a development version, not a commercially released product. + // VS_FF_PRIVATEBUILD The file was not built using standard release procedures. If this flag is + // set, the StringFileInfo structure should contain a PrivateBuild entry. + // VS_FF_SPECIALBUILD The file was built by the original company using standard release procedures + // but is a variation of the normal file of the same version number. If this + // flag is set, the StringFileInfo structure should contain a SpecialBuild entry. + + //Specifies the operating system for which this file was designed. This member can be one of the following values: Flag + yield! i32 dwFileOS + //VOS_DOS 0x0001L The file was designed for MS-DOS. + //VOS_NT 0x0004L The file was designed for Windows NT. + //VOS__WINDOWS16 The file was designed for 16-bit Windows. + //VOS__WINDOWS32 The file was designed for the Win32 API. + //VOS_OS216 0x00020000L The file was designed for 16-bit OS/2. + //VOS_OS232 0x00030000L The file was designed for 32-bit OS/2. + //VOS__PM16 The file was designed for 16-bit Presentation Manager. + //VOS__PM32 The file was designed for 32-bit Presentation Manager. + //VOS_UNKNOWN The operating system for which the file was designed is unknown to Windows. + + // Specifies the general type of file. This member can be one of the following values: + yield! i32 dwFileType + + //VFT_UNKNOWN The file type is unknown to Windows. + //VFT_APP The file contains an application. + //VFT_DLL The file contains a dynamic-link library (DLL). + //VFT_DRV The file contains a device driver. If dwFileType is VFT_DRV, dwFileSubtype contains a more specific description of the driver. + //VFT_FONT The file contains a font. If dwFileType is VFT_FONT, dwFileSubtype contains a more specific description of the font file. + //VFT_VXD The file contains a virtual device. + //VFT_STATIC_LIB The file contains a static-link library. + + // Specifies the function of the file. The possible values depend on the value of + // dwFileType. For all values of dwFileType not described in the following list, + // dwFileSubtype is zero. If dwFileType is VFT_DRV, dwFileSubtype can be one of the following values: + yield! i32 dwFileSubtype + //VFT2_UNKNOWN The driver type is unknown by Windows. + //VFT2_DRV_COMM The file contains a communications driver. + //VFT2_DRV_PRINTER The file contains a printer driver. + //VFT2_DRV_KEYBOARD The file contains a keyboard driver. + //VFT2_DRV_LANGUAGE The file contains a language driver. + //VFT2_DRV_DISPLAY The file contains a display driver. + //VFT2_DRV_MOUSE The file contains a mouse driver. + //VFT2_DRV_NETWORK The file contains a network driver. + //VFT2_DRV_SYSTEM The file contains a system driver. + //VFT2_DRV_INSTALLABLE The file contains an installable driver. + //VFT2_DRV_SOUND The file contains a sound driver. + // + //If dwFileType is VFT_FONT, dwFileSubtype can be one of the following values: // - //If dwFileType is VFT_FONT, dwFileSubtype can be one of the following values: - // - //VFT2_UNKNOWN The font type is unknown by Windows. - //VFT2_FONT_RASTER The file contains a raster font. - //VFT2_FONT_VECTOR The file contains a vector font. - //VFT2_FONT_TRUETYPE The file contains a TrueType font. + //VFT2_UNKNOWN The font type is unknown by Windows. + //VFT2_FONT_RASTER The file contains a raster font. + //VFT2_FONT_VECTOR The file contains a vector font. + //VFT2_FONT_TRUETYPE The file contains a TrueType font. // - //If dwFileType is VFT_VXD, dwFileSubtype contains the virtual device identifier included in the virtual device control block. - - // Specifies the most significant 32 bits of the file's 64-bit binary creation date and time stamp. - yield! i32 (int32 (lwFileDate >>> 32)) - - //Specifies the least significant 32 bits of the file's 64-bit binary creation date and time stamp. - yield! i32 (int32 lwFileDate) - |] + //If dwFileType is VFT_VXD, dwFileSubtype contains the virtual device identifier included in the virtual device control block. + + // Specifies the most significant 32 bits of the file's 64-bit binary creation date and time stamp. + yield! i32 (int32 (lwFileDate >>> 32)) + + //Specifies the least significant 32 bits of the file's 64-bit binary creation date and time stamp. + yield! i32 (int32 lwFileDate) + |] let VS_VERSION_INFO(fixedFileInfo, stringFileInfo, varFileInfo) = - let wType = 0x0 + let wType = 0x0 let szKey = Bytes.stringAsUnicodeNullTerminated "VS_VERSION_INFO" // Contains the Unicode string VS_VERSION_INFO let value = VS_FIXEDFILEINFO (fixedFileInfo) - let children = - [| yield StringFileInfo stringFileInfo - yield VarFileInfo varFileInfo - |] + let children = + [| yield StringFileInfo stringFileInfo + yield VarFileInfo varFileInfo + |] VersionInfoElement(wType, szKey, Some value, children, false) - - let VS_VERSION_INFO_RESOURCE data = + + let VS_VERSION_INFO_RESOURCE data = let dwTypeID = 0x0010 let dwNameID = 0x0001 let wMemFlags = 0x0030 // REVIEW: HARDWIRED TO ENGLISH let wLangID = 0x0 ResFileFormat.ResFileNode(dwTypeID, dwNameID, wMemFlags, wLangID, VS_VERSION_INFO data) - + module ManifestResourceFormat = - + let VS_MANIFEST_RESOURCE(data, isLibrary) = let dwTypeID = 0x0018 let dwNameID = if isLibrary then 0x2 else 0x1 let wMemFlags = 0x0 let wLangID = 0x0 ResFileFormat.ResFileNode(dwTypeID, dwNameID, wMemFlags, wLangID, data) - diff --git a/src/fsharp/BuildGraph.fs b/src/fsharp/BuildGraph.fs new file mode 100644 index 00000000000..d8fe2d14832 --- /dev/null +++ b/src/fsharp/BuildGraph.fs @@ -0,0 +1,393 @@ +// 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. + +module FSharp.Compiler.BuildGraph + +open System +open System.Threading +open System.Threading.Tasks +open System.Diagnostics +open System.Globalization +open FSharp.Compiler.ErrorLogger +open Internal.Utilities.Library + +/// This represents the thread-local state established as each task function runs as part of the build. +/// +/// Use to reset error and warning handlers. +type CompilationGlobalsScope(errorLogger: ErrorLogger, phase: BuildPhase) = + let unwindEL = PushErrorLoggerPhaseUntilUnwind(fun _ -> errorLogger) + let unwindBP = PushThreadBuildPhaseUntilUnwind phase + + member _.ErrorLogger = errorLogger + member _.Phase = phase + + // Return the disposable object that cleans up + interface IDisposable with + member d.Dispose() = + unwindBP.Dispose() + unwindEL.Dispose() + +[] +type NodeCode<'T> = Node of Async<'T> + +let wrapThreadStaticInfo computation = + async { + let errorLogger = CompileThreadStatic.ErrorLogger + let phase = CompileThreadStatic.BuildPhase + try + return! computation + finally + CompileThreadStatic.ErrorLogger <- errorLogger + CompileThreadStatic.BuildPhase <- phase + } + +type Async<'T> with + + static member AwaitNodeCode(node: NodeCode<'T>) = + match node with + | Node(computation) -> wrapThreadStaticInfo computation + +[] +type NodeCodeBuilder() = + + static let zero = Node(async.Zero()) + + [] + member _.Zero () : NodeCode = zero + + [] + member _.Delay (f: unit -> NodeCode<'T>) = + Node(async.Delay(fun () -> match f() with Node(p) -> p)) + + [] + member _.Return value = Node(async.Return(value)) + + [] + member _.ReturnFrom (computation: NodeCode<_>) = computation + + [] + member _.Bind (Node(p): NodeCode<'a>, binder: 'a -> NodeCode<'b>) : NodeCode<'b> = + Node(async.Bind(p, fun x -> match binder x with Node p -> p)) + + [] + member _.TryWith(Node(p): NodeCode<'T>, binder: exn -> NodeCode<'T>) : NodeCode<'T> = + Node(async.TryWith(p, fun ex -> match binder ex with Node p -> p)) + + [] + member _.TryFinally(Node(p): NodeCode<'T>, binder: unit -> unit) : NodeCode<'T> = + Node(async.TryFinally(p, binder)) + + [] + member _.For(xs: 'T seq, binder: 'T -> NodeCode) : NodeCode = + Node(async.For(xs, fun x -> match binder x with Node p -> p)) + + [] + member _.Combine(Node(p1): NodeCode, Node(p2): NodeCode<'T>) : NodeCode<'T> = + Node(async.Combine(p1, p2)) + + [] + member _.Using(value: CompilationGlobalsScope, binder: CompilationGlobalsScope -> NodeCode<'U>) = + Node( + async { + CompileThreadStatic.ErrorLogger <- value.ErrorLogger + CompileThreadStatic.BuildPhase <- value.Phase + try + return! binder value |> Async.AwaitNodeCode + finally + (value :> IDisposable).Dispose() + } + ) + +let node = NodeCodeBuilder() + +[] +type NodeCode private () = + + static let cancellationToken = + Node(wrapThreadStaticInfo Async.CancellationToken) + + static member RunImmediate (computation: NodeCode<'T>, ct: CancellationToken) = + let errorLogger = CompileThreadStatic.ErrorLogger + let phase = CompileThreadStatic.BuildPhase + try + try + let work = + async { + CompileThreadStatic.ErrorLogger <- errorLogger + CompileThreadStatic.BuildPhase <- phase + return! computation |> Async.AwaitNodeCode + } + Async.StartImmediateAsTask(work, cancellationToken=ct).Result + finally + CompileThreadStatic.ErrorLogger <- errorLogger + CompileThreadStatic.BuildPhase <- phase + with + | :? AggregateException as ex when ex.InnerExceptions.Count = 1 -> + raise(ex.InnerExceptions.[0]) + + static member RunImmediateWithoutCancellation (computation: NodeCode<'T>) = + NodeCode.RunImmediate(computation, CancellationToken.None) + + static member StartAsTask_ForTesting (computation: NodeCode<'T>, ?ct: CancellationToken) = + let errorLogger = CompileThreadStatic.ErrorLogger + let phase = CompileThreadStatic.BuildPhase + try + let work = + async { + CompileThreadStatic.ErrorLogger <- errorLogger + CompileThreadStatic.BuildPhase <- phase + return! computation |> Async.AwaitNodeCode + } + Async.StartAsTask(work, cancellationToken=defaultArg ct CancellationToken.None) + finally + CompileThreadStatic.ErrorLogger <- errorLogger + CompileThreadStatic.BuildPhase <- phase + + static member CancellationToken = cancellationToken + + static member FromCancellable(computation: Cancellable<'T>) = + Node(wrapThreadStaticInfo (Cancellable.toAsync computation)) + + static member AwaitAsync(computation: Async<'T>) = + Node(wrapThreadStaticInfo computation) + + static member AwaitTask(task: Task<'T>) = + Node(wrapThreadStaticInfo(Async.AwaitTask task)) + + static member AwaitTask(task: Task) = + Node(wrapThreadStaticInfo(Async.AwaitTask task)) + + static member AwaitWaitHandle_ForTesting(waitHandle: WaitHandle) = + Node(wrapThreadStaticInfo (Async.AwaitWaitHandle(waitHandle))) + + static member Sleep(ms: int) = + Node(wrapThreadStaticInfo (Async.Sleep(ms))) + + static member Sequential(computations: NodeCode<'T> seq) = + node { + let results = ResizeArray() + for computation in computations do + let! res = computation + results.Add(res) + return results.ToArray() + } + +type private AgentMessage<'T> = + | GetValue of AsyncReplyChannel> * callerCancellationToken: CancellationToken + +type private Agent<'T> = (MailboxProcessor> * CancellationTokenSource) + +[] +type private GraphNodeAction<'T> = + | GetValueByAgent + | GetValue + | CachedValue of 'T + +[] +module GraphNode = + + // We need to store the culture for the VS thread that is executing now, + // so that when the agent in the async lazy object picks up thread from the thread pool we can set the culture + let mutable culture = CultureInfo(CultureInfo.CurrentUICulture.Name) + + let SetPreferredUILang (preferredUiLang: string option) = + match preferredUiLang with + | Some s -> + culture <- CultureInfo s +#if FX_RESHAPED_GLOBALIZATION + CultureInfo.CurrentUICulture <- culture +#else + Thread.CurrentThread.CurrentUICulture <- culture +#endif + | None -> () + +[] +type GraphNode<'T> (retryCompute: bool, computation: NodeCode<'T>) = + + let gate = obj () + let mutable computation = computation + let mutable requestCount = 0 + let mutable cachedResult: Task<'T> = Unchecked.defaultof<_> + let mutable cachedResultNode: NodeCode<'T> = Unchecked.defaultof<_> + + let isCachedResultNodeNotNull() = + not (obj.ReferenceEquals(cachedResultNode, null)) + + let isCachedResultNotNull() = + cachedResult <> null + + // retryCompute indicates that we abandon computations when the originator is + // cancelled. + // + // If retryCompute is 'true', the computation is run directly in the originating requestor's + // thread. If cancelled, other awaiting computations must restart the computation from scratch. + // + // If retryCompute is 'false', a MailboxProcessor is used to allow the cancelled originator + // to detach from the computation, while other awaiting computations continue to wait on the result. + // + // Currently, 'retryCompute' = true for all graph nodes. However, the code for we include the + // code to allow 'retryCompute' = false in case it's needed in the future, and ensure it is under independent + // unit test. + let loop (agent: MailboxProcessor>) = + async { + assert (not retryCompute) + try + while true do + match! agent.Receive() with + | GetValue (replyChannel, callerCancellationToken) -> + + Thread.CurrentThread.CurrentUICulture <- GraphNode.culture + try + use _reg = + // When a cancellation has occured, notify the reply channel to let the requester stop waiting for a response. + callerCancellationToken.Register (fun () -> + let ex = OperationCanceledException() :> exn + replyChannel.Reply (Result.Error ex) + ) + + callerCancellationToken.ThrowIfCancellationRequested () + + if isCachedResultNotNull() then + replyChannel.Reply(Ok cachedResult.Result) + else + // This computation can only be canceled if the requestCount reaches zero. + let! result = computation |> Async.AwaitNodeCode + cachedResult <- Task.FromResult(result) + cachedResultNode <- node { return result } + computation <- Unchecked.defaultof<_> + if not callerCancellationToken.IsCancellationRequested then + replyChannel.Reply(Ok result) + with + | ex -> + if not callerCancellationToken.IsCancellationRequested then + replyChannel.Reply(Result.Error ex) + with + | _ -> + () + } + + let mutable agent: Agent<'T> = Unchecked.defaultof<_> + + let semaphore: SemaphoreSlim = + if retryCompute then + new SemaphoreSlim(1, 1) + else + Unchecked.defaultof<_> + + member _.GetOrComputeValue() = + // fast path + if isCachedResultNodeNotNull() then + cachedResultNode + else + node { + if isCachedResultNodeNotNull() then + return! cachedResult |> NodeCode.AwaitTask + else + let action = + lock gate <| fun () -> + // We try to get the cached result after the lock so we don't spin up a new mailbox processor. + if isCachedResultNodeNotNull() then + GraphNodeAction<'T>.CachedValue cachedResult.Result + else + requestCount <- requestCount + 1 + if retryCompute then + GraphNodeAction<'T>.GetValue + else + match box agent with + | null -> + try + let cts = new CancellationTokenSource() + let mbp = new MailboxProcessor<_>(loop, cancellationToken = cts.Token) + let newAgent = (mbp, cts) + agent <- newAgent + mbp.Start() + GraphNodeAction<'T>.GetValueByAgent + with + | ex -> + agent <- Unchecked.defaultof<_> + raise ex + | _ -> + GraphNodeAction<'T>.GetValueByAgent + + match action with + | GraphNodeAction.CachedValue result -> return result + | GraphNodeAction.GetValue -> + try + let! ct = NodeCode.CancellationToken + + // We must set 'taken' before any implicit cancellation checks + // occur, making sure we are under the protection of the 'try'. + // For example, NodeCode's 'try/finally' (TryFinally) uses async.TryFinally which does + // implicit cancellation checks even before the try is entered, as do the + // de-sugaring of 'do!' and other CodeCode constructs. + let mutable taken = false + try + do! + semaphore.WaitAsync(ct) + .ContinueWith( + (fun _ -> taken <- true), + (TaskContinuationOptions.NotOnCanceled ||| TaskContinuationOptions.NotOnFaulted ||| TaskContinuationOptions.ExecuteSynchronously) + ) + |> NodeCode.AwaitTask + + if isCachedResultNotNull() then + return cachedResult.Result + else + let tcs = TaskCompletionSource<'T>() + let (Node(p)) = computation + Async.StartWithContinuations( + async { + Thread.CurrentThread.CurrentUICulture <- GraphNode.culture + return! p + }, + (fun res -> + cachedResult <- Task.FromResult(res) + cachedResultNode <- node { return res } + computation <- Unchecked.defaultof<_> + tcs.SetResult(res) + ), + (fun ex -> + tcs.SetException(ex) + ), + (fun _ -> + tcs.SetCanceled() + ), + ct + ) + return! tcs.Task |> NodeCode.AwaitTask + finally + if taken then + semaphore.Release() |> ignore + finally + lock gate <| fun () -> + requestCount <- requestCount - 1 + + | GraphNodeAction.GetValueByAgent -> + assert (not retryCompute) + let mbp, cts = agent + try + let! ct = NodeCode.CancellationToken + let! res = mbp.PostAndAsyncReply(fun replyChannel -> GetValue(replyChannel, ct)) |> NodeCode.AwaitAsync + match res with + | Ok result -> return result + | Result.Error ex -> return raise ex + finally + lock gate <| fun () -> + requestCount <- requestCount - 1 + if requestCount = 0 then + cts.Cancel() // cancel computation when all requests are cancelled + try (mbp :> IDisposable).Dispose () with | _ -> () + cts.Dispose() + agent <- Unchecked.defaultof<_> + } + + member _.TryPeekValue() = + match cachedResult with + | null -> ValueNone + | _ -> ValueSome cachedResult.Result + + member _.HasValue = cachedResult <> null + + member _.IsComputing = requestCount > 0 + + new(computation) = + GraphNode(retryCompute=true, computation=computation) \ No newline at end of file diff --git a/src/fsharp/BuildGraph.fsi b/src/fsharp/BuildGraph.fsi new file mode 100644 index 00000000000..cf1d750c3e0 --- /dev/null +++ b/src/fsharp/BuildGraph.fsi @@ -0,0 +1,120 @@ +// 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. + +module internal FSharp.Compiler.BuildGraph + +open System +open System.Threading +open System.Threading.Tasks +open FSharp.Compiler.ErrorLogger +open Internal.Utilities.Library + +/// This represents the global state established as each task function runs as part of the build. +/// +/// Use to reset error and warning handlers. +type CompilationGlobalsScope = + new : ErrorLogger * BuildPhase -> CompilationGlobalsScope + interface IDisposable + +/// Represents code that can be run as part of the build graph. +/// +/// This is essentially cancellable async code where the only asynchronous waits are on nodes. +/// When a node is evaluated the evaluation is run synchronously on the thread of the +/// first requestor. +[] +type NodeCode<'T> + +type Async<'T> with + + /// Asynchronously await code in the build graph + static member AwaitNodeCode: node: NodeCode<'T> -> Async<'T> + +/// A standard builder for node code. +[] +type NodeCodeBuilder = + + member Bind : NodeCode<'T> * ('T -> NodeCode<'U>) -> NodeCode<'U> + + member Zero : unit -> NodeCode + + member Delay : (unit -> NodeCode<'T>) -> NodeCode<'T> + + member Return : 'T -> NodeCode<'T> + + member ReturnFrom : NodeCode<'T> -> NodeCode<'T> + + member TryWith : NodeCode<'T> * (exn -> NodeCode<'T>) -> NodeCode<'T> + + member TryFinally : NodeCode<'T> * (unit -> unit) -> NodeCode<'T> + + member For : xs: 'T seq * binder: ('T -> NodeCode) -> NodeCode + + member Combine : x1: NodeCode * x2: NodeCode<'T> -> NodeCode<'T> + + /// A limited form 'use' for establishing the compilation globals. (Note + /// that a proper generic 'use' could be implemented but has not currently been necessary) + member Using : CompilationGlobalsScope * (CompilationGlobalsScope -> NodeCode<'T>) -> NodeCode<'T> + +/// Specifies code that can be run as part of the build graph. +val node : NodeCodeBuilder + +/// Contains helpers to specify code that can be run as part of the build graph. +[] +type NodeCode = + + /// Only used for testing, do not use + static member RunImmediate: computation: NodeCode<'T> * ct: CancellationToken -> 'T + + /// Used in places where we don't care about cancellation, e.g. the command line compiler + /// and F# Interactive + static member RunImmediateWithoutCancellation: computation: NodeCode<'T> -> 'T + + static member CancellationToken: NodeCode + + static member Sequential: computations: NodeCode<'T> seq -> NodeCode<'T []> + + /// Execute the cancellable computation synchronously using the ambient cancellation token of + /// the NodeCode. + static member FromCancellable: computation: Cancellable<'T> -> NodeCode<'T> + + /// Only used for testing, do not use + static member StartAsTask_ForTesting: computation: NodeCode<'T> * ?ct: CancellationToken -> Task<'T> + + /// Only used for testing, do not use + static member AwaitWaitHandle_ForTesting: waitHandle: WaitHandle -> NodeCode + +/// Contains helpers related to the build graph +[] +module internal GraphNode = + + /// Allows to specify the language for error messages + val SetPreferredUILang: preferredUiLang: string option -> unit + +/// Evaluate the computation, allowing asynchronous waits on existing ongoing evaluations of the +/// same node, and strongly cache the result. +/// +/// Once the result has been cached, the computation function will also be removed, or 'null'ed out, +/// as to prevent any references captured by the computation from being strongly held. +[] +type internal GraphNode<'T> = + + /// - retryCompute - When set to 'true', subsequent requesters will retry the computation if the first-in request cancels. Retrying computations will have better callstacks. + /// - computation - The computation code to run. + new: retryCompute: bool * computation: NodeCode<'T> -> GraphNode<'T> + + /// By default, 'retryCompute' is 'true'. + new : computation: NodeCode<'T> -> GraphNode<'T> + + /// Return NodeCode which, when executed, will get the value of the computation if already computed, or + /// await an existing in-progress computation for the node if one exists, or else will synchronously + /// start the computation on the current thread. + member GetOrComputeValue: unit -> NodeCode<'T> + + /// Return 'Some' if the computation has already been computed, else None if + /// the computation is in-progress or has not yet been started. + member TryPeekValue: unit -> 'T voption + + /// Return 'true' if the computation has already been computed. + member HasValue: bool + + /// Return 'true' if the computation is in-progress. + member IsComputing: bool \ No newline at end of file diff --git a/src/fsharp/CheckComputationExpressions.fs b/src/fsharp/CheckComputationExpressions.fs index fa413a52a02..fc3d9ace548 100644 --- a/src/fsharp/CheckComputationExpressions.fs +++ b/src/fsharp/CheckComputationExpressions.fs @@ -4,8 +4,7 @@ /// with generalization at appropriate points. module internal FSharp.Compiler.CheckComputationExpressions -open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.AttributeChecking open FSharp.Compiler.CheckExpressions @@ -16,10 +15,11 @@ open FSharp.Compiler.Infos open FSharp.Compiler.InfoReader open FSharp.Compiler.NameResolution open FSharp.Compiler.PatternMatchCompilation -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.Syntax open FSharp.Compiler.SyntaxTreeOps +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps @@ -99,10 +99,10 @@ let YieldFree (cenv: cenv) expr = YieldFree e2 && Option.forall YieldFree e3opt | SynExpr.TryWith (e1, _, clauses, _, _, _, _) -> - YieldFree e1 && clauses |> List.forall (fun (Clause(_, _, e, _, _)) -> YieldFree e) + YieldFree e1 && clauses |> List.forall (fun (SynMatchClause(_, _, e, _, _)) -> YieldFree e) | (SynExpr.Match (_, _, clauses, _) | SynExpr.MatchBang (_, _, clauses, _)) -> - clauses |> List.forall (fun (Clause(_, _, e, _, _)) -> YieldFree e) + clauses |> List.forall (fun (SynMatchClause(_, _, e, _, _)) -> YieldFree e) | SynExpr.For (_, _, _, _, _, body, _) | SynExpr.TryFinally (body, _, _, _, _) @@ -130,10 +130,10 @@ let YieldFree (cenv: cenv) expr = YieldFree e2 && Option.forall YieldFree e3opt | SynExpr.TryWith (e1, _, clauses, _, _, _, _) -> - YieldFree e1 && clauses |> List.forall (fun (Clause(_, _, e, _, _)) -> YieldFree e) + YieldFree e1 && clauses |> List.forall (fun (SynMatchClause(_, _, e, _, _)) -> YieldFree e) | (SynExpr.Match (_, _, clauses, _) | SynExpr.MatchBang (_, _, clauses, _)) -> - clauses |> List.forall (fun (Clause(_, _, e, _, _)) -> YieldFree e) + clauses |> List.forall (fun (SynMatchClause(_, _, e, _, _)) -> YieldFree e) | SynExpr.For (_, _, _, _, _, body, _) | SynExpr.TryFinally (body, _, _, _, _) @@ -423,27 +423,52 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, // Environment is needed for completions CallEnvSink cenv.tcSink (comp.Range, env.NameEnv, ad) - // Check for the [] attribute on an argument position + let tryGetArgAttribsForCustomOperator (nm: Ident) = + match tryGetDataForCustomOperation nm with + | Some argInfos -> + argInfos + |> List.map (fun (_nm, __maintainsVarSpaceUsingBind, _maintainsVarSpace, _allowInto, _isLikeZip, _isLikeJoin, _isLikeGroupJoin, _joinConditionWord, methInfo) -> + match methInfo.GetParamAttribs(cenv.amap, mWhole) with + | [curriedArgInfo] -> Some curriedArgInfo // one for the actual argument group + | _ -> None) + |> Some + | _ -> None + let tryGetArgInfosForCustomOperator (nm: Ident) = match tryGetDataForCustomOperation nm with | Some argInfos -> argInfos |> List.map (fun (_nm, __maintainsVarSpaceUsingBind, _maintainsVarSpace, _allowInto, _isLikeZip, _isLikeJoin, _isLikeGroupJoin, _joinConditionWord, methInfo) -> - match methInfo with - | FSMeth(_, _, vref, _) -> + match methInfo with + | FSMeth(_, _, vref, _) -> match ArgInfosOfMember cenv.g vref with - | [curriedArgInfo] -> Some curriedArgInfo // one for the actual argument group + | [curriedArgInfo] -> Some curriedArgInfo | _ -> None | _ -> None) |> Some | _ -> None let tryExpectedArgCountForCustomOperator (nm: Ident) = - match tryGetArgInfosForCustomOperator nm with + match tryGetArgAttribsForCustomOperator nm with | None -> None | Some argInfosForOverloads -> let nums = argInfosForOverloads |> List.map (function None -> -1 | Some argInfos -> List.length argInfos) - if nums |> List.forall (fun v -> v >= 0 && v = nums.[0]) then + + // Prior to 'OverloadsForCustomOperations' we count exact arguments. + // + // With 'OverloadsForCustomOperations' we don't compute an exact expected argument count + // if any arguments are optional, out or ParamArray. + let isSpecial = + if cenv.g.langVersion.SupportsFeature LanguageFeature.OverloadsForCustomOperations then + argInfosForOverloads |> List.exists (fun info -> + match info with + | None -> false + | Some args -> + args |> List.exists (fun (isParamArrayArg, _isInArg, isOutArg, optArgInfo, _callerInfo, _reflArgInfo) -> isParamArrayArg || isOutArg || optArgInfo.IsOptional)) + else + false + + if not isSpecial && nums |> List.forall (fun v -> v >= 0 && v = nums.[0]) then Some (max (nums.[0] - 1) 0) // drop the computation context argument else None @@ -601,7 +626,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, | _ -> None - let (|ForEachThenJoinOrGroupJoinOrZipClause|_|) e = + let (|ForEachThenJoinOrGroupJoinOrZipClause|_|) strict e = match e with | ForEachThen (isFromSource, firstSourcePat, firstSource, JoinOrGroupJoinOrZipClause(nm, secondSourcePat, secondSource, keySelectorsOpt, pat3opt, mOpCore), innerComp) when @@ -612,7 +637,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, -> Some (isFromSource, firstSourcePat, firstSource, nm, secondSourcePat, secondSource, keySelectorsOpt, pat3opt, mOpCore, innerComp) - | JoinOrGroupJoinOrZipClause(nm, pat2, expr2, expr3, pat3opt, mOpCore) -> + | JoinOrGroupJoinOrZipClause(nm, pat2, expr2, expr3, pat3opt, mOpCore) when strict -> errorR(Error(FSComp.SR.tcBinaryOperatorRequiresBody(nm.idText, Option.get (customOpUsageText nm)), nm.idRange)) Some (true, arbPat e.Range, arbExpr("_outerSource", e.Range), nm, pat2, expr2, expr3, pat3opt, mOpCore, arbExpr("_innerComp", e.Range)) @@ -683,7 +708,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, let rangeForCombine innerComp1 = match innerComp1 with | SynExpr.IfThenElse (_, _, _, _, _, mIfToThen, _m) -> mIfToThen - | SynExpr.Match (DebugPointAtBinding mMatch, _, _, _) -> mMatch + | SynExpr.Match (DebugPointAtBinding.Yes mMatch, _, _, _) -> mMatch | SynExpr.TryWith (_, _, _, _, _, DebugPointAtTry.Yes mTry, _) -> mTry | SynExpr.TryFinally (_, _, _, DebugPointAtTry.Yes mTry, _) -> mTry | SynExpr.For (DebugPointAtFor.Yes mBind, _, _, _, _, _, _) -> mBind @@ -695,7 +720,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, let checkForBinaryApp comp = match comp with | StripApps(SingleIdent nm, [StripApps(SingleIdent nm2, args); arg2]) when - PrettyNaming.IsInfixOperator nm.idText && + IsInfixOperator nm.idText && (match tryExpectedArgCountForCustomOperator nm2 with Some n -> n > 0 | _ -> false) && not (List.isEmpty args) -> let estimatedRangeOfIntendedLeftAndRightArguments = unionRanges (List.last args).Range arg2.Range @@ -754,7 +779,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, // ... // --> // zip expr1 expr2 (fun pat1 pat3 -> ...) - | ForEachThenJoinOrGroupJoinOrZipClause (isFromSource, firstSourcePat, firstSource, nm, secondSourcePat, secondSource, keySelectorsOpt, secondResultPatOpt, mOpCore, innerComp) -> + | ForEachThenJoinOrGroupJoinOrZipClause true (isFromSource, firstSourcePat, firstSource, nm, secondSourcePat, secondSource, keySelectorsOpt, secondResultPatOpt, mOpCore, innerComp) -> if q = CustomOperationsMode.Denied then error(Error(FSComp.SR.tcCustomOperationMayNotBeUsedHere(), nm.idRange)) @@ -906,7 +931,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, let wrappedSourceExpr = mkSourceExprConditional isFromSource sourceExpr let mFor = match spForLoop with DebugPointAtFor.Yes m -> m | _ -> pat.Range let mPat = pat.Range - let spBind = match spForLoop with DebugPointAtFor.Yes m -> DebugPointAtBinding m | DebugPointAtFor.No -> NoDebugPointAtStickyBinding + let spBind = match spForLoop with DebugPointAtFor.Yes m -> DebugPointAtBinding.Yes m | DebugPointAtFor.No -> DebugPointAtBinding.NoneAtSticky if isNil (TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AtMostOneResult cenv env mFor ad "For" builderTy) then error(Error(FSComp.SR.tcRequireBuilderMethod("For"), mFor)) @@ -919,7 +944,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, Some (trans CompExprTranslationPass.Initial q varSpace innerComp (fun holeFill -> - translatedCtxt (mkSynCall "For" mFor [wrappedSourceExpr; SynExpr.MatchLambda (false, sourceExpr.Range, [Clause(pat, None, holeFill, mPat, DebugPointForTarget.Yes)], spBind, mFor) ])) ) + translatedCtxt (mkSynCall "For" mFor [wrappedSourceExpr; SynExpr.MatchLambda (false, sourceExpr.Range, [SynMatchClause(pat, None, holeFill, mPat, DebugPointForTarget.Yes)], spBind, mFor) ])) ) | SynExpr.For (spBind, id, start, dir, finish, innerComp, m) -> let mFor = match spBind with DebugPointAtFor.Yes m -> m | _ -> m @@ -1023,9 +1048,9 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, | SynExpr.DoBang (rhsExpr, m) -> let sp = match sp with - | DebugPointAtSequential.ExprOnly -> DebugPointAtBinding m - | DebugPointAtSequential.StmtOnly -> NoDebugPointAtDoBinding - | DebugPointAtSequential.Both -> DebugPointAtBinding m + | DebugPointAtSequential.ExprOnly -> DebugPointAtBinding.Yes m + | DebugPointAtSequential.StmtOnly -> DebugPointAtBinding.NoneAtDo + | DebugPointAtSequential.Both -> DebugPointAtBinding.Yes m Some(trans CompExprTranslationPass.Initial q varSpace (SynExpr.LetOrUseBang (sp, false, true, SynPat.Const(SynConst.Unit, rhsExpr.Range), rhsExpr, [], innerComp2, m)) translatedCtxt) // "expr; cexpr" is treated as sequential execution @@ -1063,7 +1088,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, // For 'query' check immediately if isQuery then match (List.map (BindingNormalization.NormalizeBinding ValOrMemberBinding cenv env) binds) with - | [NormalizedBinding(_, NormalBinding, (*inline*)false, (*mutable*)false, _, _, _, _, _, _, _, _)] when not isRec -> + | [NormalizedBinding(_, SynBindingKind.Normal, (*inline*)false, (*mutable*)false, _, _, _, _, _, _, _, _)] when not isRec -> () | normalizedBindings -> let failAt m = error(Error(FSComp.SR.tcNonSimpleLetBindingInQuery(), m)) @@ -1076,7 +1101,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, addVarsToVarSpace varSpace (fun mQueryOp env -> // Normalize the bindings before detecting the bound variables match (List.map (BindingNormalization.NormalizeBinding ValOrMemberBinding cenv env) binds) with - | [NormalizedBinding(_vis, NormalBinding, false, false, _, _, _, _, pat, _, _, _)] -> + | [NormalizedBinding(_vis, SynBindingKind.Normal, false, false, _, _, _, _, pat, _, _, _)] -> // successful case use _holder = TemporarilySuspendReportingTypecheckResultsToSink cenv.tcSink let _, _, vspecs, envinner, _ = TcMatchPattern cenv (NewInferenceType()) env tpenv (pat, None) @@ -1088,11 +1113,11 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, Some (trans CompExprTranslationPass.Initial q varSpace innerComp (fun holeFill -> translatedCtxt (SynExpr.LetOrUse (isRec, false, binds, holeFill, m)))) // 'use x = expr in expr' - | SynExpr.LetOrUse (_, true, [Binding (_, NormalBinding, _, _, _, _, _, pat, _, rhsExpr, _, spBind)], innerComp, _) -> - let bindRange = match spBind with DebugPointAtBinding m -> m | _ -> rhsExpr.Range + | SynExpr.LetOrUse (_, true, [SynBinding (_, SynBindingKind.Normal, _, _, _, _, _, pat, _, rhsExpr, _, spBind)], innerComp, _) -> + let bindRange = match spBind with DebugPointAtBinding.Yes m -> m | _ -> rhsExpr.Range if isQuery then error(Error(FSComp.SR.tcUseMayNotBeUsedInQueries(), bindRange)) let innerCompRange = innerComp.Range - let consumeExpr = SynExpr.MatchLambda(false, innerCompRange, [Clause(pat, None, transNoQueryOps innerComp, innerCompRange, DebugPointForTarget.Yes)], spBind, innerCompRange) + let consumeExpr = SynExpr.MatchLambda(false, innerCompRange, [SynMatchClause(pat, None, transNoQueryOps innerComp, innerCompRange, DebugPointForTarget.Yes)], spBind, innerCompRange) if isNil (TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AtMostOneResult cenv env bindRange ad "Using" builderTy) then error(Error(FSComp.SR.tcRequireBuilderMethod("Using"), bindRange)) Some (translatedCtxt (mkSynCall "Using" bindRange [rhsExpr; consumeExpr ])) @@ -1103,7 +1128,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, // --> build.BindReturn(e1, (fun _argN -> match _argN with pat -> expr-without-return)) | SynExpr.LetOrUseBang (spBind, false, isFromSource, pat, rhsExpr, [], innerComp, _) -> - let bindRange = match spBind with DebugPointAtBinding m -> m | _ -> rhsExpr.Range + let bindRange = match spBind with DebugPointAtBinding.Yes m -> m | _ -> rhsExpr.Range if isQuery then error(Error(FSComp.SR.tcBindMayNotBeUsedInQueries(), bindRange)) // Add the variables to the query variable space, on demand @@ -1117,10 +1142,10 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, Some (transBind q varSpace bindRange "Bind" [rhsExpr] pat spBind innerComp translatedCtxt) // 'use! pat = e1 in e2' --> build.Bind(e1, (function _argN -> match _argN with pat -> build.Using(x, (fun _argN -> match _argN with pat -> e2)))) - | SynExpr.LetOrUseBang (spBind, true, isFromSource, (SynPat.Named (SynPat.Wild _, id, false, _, _) as pat) , rhsExpr, [], innerComp, _) + | SynExpr.LetOrUseBang (spBind, true, isFromSource, (SynPat.Named (id, false, _, _) as pat) , rhsExpr, [], innerComp, _) | SynExpr.LetOrUseBang (spBind, true, isFromSource, (SynPat.LongIdent (longDotId=LongIdentWithDots([id], _)) as pat), rhsExpr, [], innerComp, _) -> - let bindRange = match spBind with DebugPointAtBinding m -> m | _ -> rhsExpr.Range + let bindRange = match spBind with DebugPointAtBinding.Yes m -> m | _ -> rhsExpr.Range if isQuery then error(Error(FSComp.SR.tcBindMayNotBeUsedInQueries(), bindRange)) if isNil (TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AtMostOneResult cenv env bindRange ad "Using" builderTy) then @@ -1128,9 +1153,9 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, if isNil (TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AtMostOneResult cenv env bindRange ad "Bind" builderTy) then error(Error(FSComp.SR.tcRequireBuilderMethod("Bind"), bindRange)) - let consumeExpr = SynExpr.MatchLambda(false, bindRange, [Clause(pat, None, transNoQueryOps innerComp, innerComp.Range, DebugPointForTarget.Yes)], spBind, bindRange) + let consumeExpr = SynExpr.MatchLambda(false, bindRange, [SynMatchClause(pat, None, transNoQueryOps innerComp, innerComp.Range, DebugPointForTarget.Yes)], spBind, bindRange) let consumeExpr = mkSynCall "Using" bindRange [SynExpr.Ident(id); consumeExpr ] - let consumeExpr = SynExpr.MatchLambda(false, bindRange, [Clause(pat, None, consumeExpr, id.idRange, DebugPointForTarget.Yes)], spBind, bindRange) + let consumeExpr = SynExpr.MatchLambda(false, bindRange, [SynMatchClause(pat, None, consumeExpr, id.idRange, DebugPointForTarget.Yes)], spBind, bindRange) let rhsExpr = mkSourceExprConditional isFromSource rhsExpr // TODO: consider allowing translation to BindReturn Some(translatedCtxt (mkSynCall "Bind" bindRange [rhsExpr; consumeExpr])) @@ -1151,7 +1176,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, | SynExpr.LetOrUseBang(letSpBind, false, isFromSource, letPat, letRhsExpr, andBangBindings, innerComp, letBindRange) -> if cenv.g.langVersion.SupportsFeature LanguageFeature.AndBang then if isQuery then error(Error(FSComp.SR.tcBindMayNotBeUsedInQueries(), letBindRange)) - let bindRange = match letSpBind with DebugPointAtBinding m -> m | _ -> letRhsExpr.Range + let bindRange = match letSpBind with DebugPointAtBinding.Yes m -> m | _ -> letRhsExpr.Range let sources = (letRhsExpr :: [for (_, _, _, _, andExpr, _) in andBangBindings -> andExpr ]) |> List.map (mkSourceExprConditional isFromSource) let pats = letPat :: [for (_, _, _, andPat, _, _) in andBangBindings -> andPat ] let sourcesRange = sources |> List.map (fun e -> e.Range) |> List.reduce unionRanges @@ -1252,21 +1277,21 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, error(Error(FSComp.SR.tcAndBangNotSupported(), comp.Range)) | SynExpr.Match (spMatch, expr, clauses, m) -> - let mMatch = match spMatch with DebugPointAtBinding mMatch -> mMatch | _ -> m + let mMatch = match spMatch with DebugPointAtBinding.Yes mMatch -> mMatch | _ -> m if isQuery then error(Error(FSComp.SR.tcMatchMayNotBeUsedWithQuery(), mMatch)) - let clauses = clauses |> List.map (fun (Clause(pat, cond, innerComp, patm, sp)) -> Clause(pat, cond, transNoQueryOps innerComp, patm, sp)) + let clauses = clauses |> List.map (fun (SynMatchClause(pat, cond, innerComp, patm, sp)) -> SynMatchClause(pat, cond, transNoQueryOps innerComp, patm, sp)) Some(translatedCtxt (SynExpr.Match (spMatch, expr, clauses, m))) // 'match! expr with pats ...' --> build.Bind(e1, (function pats ...)) | SynExpr.MatchBang (spMatch, expr, clauses, m) -> let matchExpr = mkSourceExpr expr - let mMatch = match spMatch with DebugPointAtBinding mMatch -> mMatch | _ -> m + let mMatch = match spMatch with DebugPointAtBinding.Yes mMatch -> mMatch | _ -> m if isQuery then error(Error(FSComp.SR.tcMatchMayNotBeUsedWithQuery(), mMatch)) if isNil (TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AtMostOneResult cenv env mMatch ad "Bind" builderTy) then error(Error(FSComp.SR.tcRequireBuilderMethod("Bind"), mMatch)) - let clauses = clauses |> List.map (fun (Clause(pat, cond, innerComp, patm, sp)) -> Clause(pat, cond, transNoQueryOps innerComp, patm, sp)) + let clauses = clauses |> List.map (fun (SynMatchClause(pat, cond, innerComp, patm, sp)) -> SynMatchClause(pat, cond, transNoQueryOps innerComp, patm, sp)) let consumeExpr = SynExpr.MatchLambda (false, mMatch, clauses, spMatch, mMatch) // TODO: consider allowing translation to BindReturn @@ -1276,8 +1301,8 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, let mTry = match spTry with DebugPointAtTry.Yes m -> m | _ -> mTryToLast if isQuery then error(Error(FSComp.SR.tcTryWithMayNotBeUsedInQueries(), mTry)) - let clauses = clauses |> List.map (fun (Clause(pat, cond, clauseComp, patm, sp)) -> Clause(pat, cond, transNoQueryOps clauseComp, patm, sp)) - let consumeExpr = SynExpr.MatchLambda(true, mTryToLast, clauses, NoDebugPointAtStickyBinding, mTryToLast) + let clauses = clauses |> List.map (fun (SynMatchClause(pat, cond, clauseComp, patm, sp)) -> SynMatchClause(pat, cond, transNoQueryOps clauseComp, patm, sp)) + let consumeExpr = SynExpr.MatchLambda(true, mTryToLast, clauses, DebugPointAtBinding.NoneAtSticky, mTryToLast) if isNil (TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AtMostOneResult cenv env mTry ad "TryWith" builderTy) then error(Error(FSComp.SR.tcRequireBuilderMethod("TryWith"), mTry)) @@ -1395,7 +1420,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, // Rebind using either for ... or let!.... let rebind = if maintainsVarSpaceUsingBind then - SynExpr.LetOrUseBang (NoDebugPointAtLetBinding, false, false, intoPat, dataCompAfterOp, [], contExpr, intoPat.Range) + SynExpr.LetOrUseBang (DebugPointAtBinding.NoneAtLet, false, false, intoPat, dataCompAfterOp, [], contExpr, intoPat.Range) else SynExpr.ForEach (DebugPointAtFor.No, SeqExprOnly false, false, intoPat, dataCompAfterOp, contExpr, intoPat.Range) @@ -1417,7 +1442,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, // Rebind using either for ... or let!.... let rebind = if lastUsesBind then - SynExpr.LetOrUseBang (NoDebugPointAtLetBinding, false, false, varSpacePat, dataCompPrior, [], compClausesExpr, compClausesExpr.Range) + SynExpr.LetOrUseBang (DebugPointAtBinding.NoneAtLet, false, false, varSpacePat, dataCompPrior, [], compClausesExpr, compClausesExpr.Range) else SynExpr.ForEach (DebugPointAtFor.No, SeqExprOnly false, false, varSpacePat, dataCompPrior, compClausesExpr, compClausesExpr.Range) @@ -1441,7 +1466,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, SynExpr.ImplicitZero m else SynExpr.YieldOrReturn((false, true), SynExpr.Const(SynConst.Unit, m), m) - trans CompExprTranslationPass.Initial q varSpace (SynExpr.LetOrUseBang (NoDebugPointAtDoBinding, false, false, SynPat.Const(SynConst.Unit, mUnit), rhsExpr, [], bodyExpr, m)) translatedCtxt + trans CompExprTranslationPass.Initial q varSpace (SynExpr.LetOrUseBang (DebugPointAtBinding.NoneAtDo, false, false, SynPat.Const(SynConst.Unit, mUnit), rhsExpr, [], bodyExpr, m)) translatedCtxt // "expr;" in final position is treated as { expr; zero } // Suppress the sequence point on the "zero" @@ -1481,7 +1506,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, // Build the `BindReturn` call let dataCompPriorToOp = - let consumeExpr = SynExpr.MatchLambda(false, consumePat.Range, [Clause(consumePat, None, innerExpr, innerRange, DebugPointForTarget.Yes)], spBind, innerRange) + let consumeExpr = SynExpr.MatchLambda(false, consumePat.Range, [SynMatchClause(consumePat, None, innerExpr, innerRange, DebugPointForTarget.Yes)], spBind, innerRange) translatedCtxt (mkSynCall bindName bindRange (bindArgs @ [consumeExpr])) match customOpInfo with @@ -1497,7 +1522,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, // Build the `Bind` call trans CompExprTranslationPass.Initial q varSpace innerComp (fun holeFill -> - let consumeExpr = SynExpr.MatchLambda(false, consumePat.Range, [Clause(consumePat, None, holeFill, innerRange, DebugPointForTarget.Yes)], spBind, innerRange) + let consumeExpr = SynExpr.MatchLambda(false, consumePat.Range, [SynMatchClause(consumePat, None, holeFill, innerRange, DebugPointForTarget.Yes)], spBind, innerRange) translatedCtxt (mkSynCall bindName bindRange (bindArgs @ [consumeExpr]))) and convertSimpleReturnToExpr varSpace innerComp = @@ -1505,11 +1530,11 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, | SynExpr.YieldOrReturn ((false, _), returnExpr, _) -> Some (returnExpr, None) | SynExpr.Match (spMatch, expr, clauses, m) -> let clauses = - clauses |> List.map (fun (Clause(pat, cond, innerComp2, patm, sp)) -> + clauses |> List.map (fun (SynMatchClause(pat, cond, innerComp2, patm, sp)) -> match convertSimpleReturnToExpr varSpace innerComp2 with | None -> None // failure | Some (_, Some _) -> None // custom op on branch = failure - | Some (innerExpr2, None) -> Some (Clause(pat, cond, innerExpr2, patm, sp))) + | Some (innerExpr2, None) -> Some (SynMatchClause(pat, cond, innerExpr2, patm, sp))) if clauses |> List.forall Option.isSome then Some (SynExpr.Match (spMatch, expr, (clauses |> List.map Option.get), m), None) else @@ -1562,7 +1587,7 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, and isSimpleExpr comp = match comp with - | ForEachThenJoinOrGroupJoinOrZipClause _ -> false + | ForEachThenJoinOrGroupJoinOrZipClause false _ -> false | SynExpr.ForEach _ -> false | SynExpr.For _ -> false | SynExpr.While _ -> false @@ -1576,11 +1601,11 @@ let TcComputationExpression cenv env overallTy tpenv (mWhole, interpExpr: Expr, | SynExpr.LetOrUse (_, _, _, innerComp, _) -> isSimpleExpr innerComp | SynExpr.LetOrUseBang _ -> false | SynExpr.Match (_, _, clauses, _) -> - clauses |> List.forall (fun (Clause(_, _, innerComp, _, _)) -> isSimpleExpr innerComp) + clauses |> List.forall (fun (SynMatchClause(_, _, innerComp, _, _)) -> isSimpleExpr innerComp) | SynExpr.MatchBang _ -> false | SynExpr.TryWith (innerComp, _, clauses, _, _, _, _) -> isSimpleExpr innerComp && - clauses |> List.forall (fun (Clause(_, _, clauseComp, _, _)) -> isSimpleExpr clauseComp) + clauses |> List.forall (fun (SynMatchClause(_, _, clauseComp, _, _)) -> isSimpleExpr clauseComp) | SynExpr.YieldOrReturnFrom _ -> false | SynExpr.YieldOrReturn _ -> false | SynExpr.DoBang _ -> false @@ -1643,7 +1668,6 @@ let mkSeqDelay (cenv: cenv) env m genTy lam = UnifyTypes cenv env m genTy (mkSeqTy cenv.g genResultTy) mkCallSeqDelay cenv.g m genResultTy (mkUnitDelayLambda cenv.g m lam) - let mkSeqAppend (cenv: cenv) env m genTy e1 e2 = let genResultTy = NewInferenceType () UnifyTypes cenv env m genTy (mkSeqTy cenv.g genResultTy) @@ -1692,20 +1716,26 @@ let TcSequenceExpression (cenv: cenv) env tpenv comp overallTy m = cenv.g.langVersion.SupportsFeature LanguageFeature.ImplicitYield && (YieldFree cenv comp) - let mkDelayedExpr (coreExpr: Expr) = - let m = coreExpr.Range + let mkDelayedExpr m (coreExpr: Expr) = let overallTy = tyOfExpr cenv.g coreExpr mkSeqDelay cenv env m overallTy coreExpr let rec tryTcSequenceExprBody env genOuterTy tpenv comp = match comp with - | SynExpr.ForEach (_spBind, SeqExprOnly _seqExprOnly, _isFromSource, pat, pseudoEnumExpr, innerComp, m) -> + | SynExpr.ForEach (spFor, SeqExprOnly _seqExprOnly, _isFromSource, pat, pseudoEnumExpr, innerComp, m) -> // This expression is not checked with the knowledge it is an IEnumerable, since we permit other enumerable types with GetEnumerator/MoveNext methods, as does C# let pseudoEnumExpr, arb_ty, tpenv = TcExprOfUnknownType cenv env tpenv pseudoEnumExpr - let (enumExpr: Expr), enumElemTy = ConvertArbitraryExprToEnumerable cenv arb_ty env pseudoEnumExpr + let enumExpr, enumElemTy = ConvertArbitraryExprToEnumerable cenv arb_ty env pseudoEnumExpr let pat', _, (vspecs: Val list), envinner, tpenv = TcMatchPattern cenv enumElemTy env tpenv (pat, None) let innerExpr, tpenv = tcSequenceExprBody envinner genOuterTy tpenv innerComp + let enumExprMark = enumExpr.Range + // We attach the debug point to the lambda expression so we can fetch it out again in LowerComputedListOrArraySeqExpr + let mFor = + match spFor with + | DebugPointAtFor.Yes m -> m + | _ -> enumExprMark + match pat', vspecs, innerExpr with // peephole optimization: "for x in e1 -> e2" == "e1 |> List.map (fun x -> e2)" *) | (TPat_as (TPat_wild _, PBind (v, _), _), @@ -1713,8 +1743,7 @@ let TcSequenceExpression (cenv: cenv) env tpenv comp overallTy m = Expr.App (Expr.Val (vf, _, _), _, [genEnumElemTy], [yexpr], _)) when vs.Length = 1 && valRefEq cenv.g vf cenv.g.seq_singleton_vref -> - let enumExprMark = enumExpr.Range - let lam = mkLambda enumExprMark v (yexpr, genEnumElemTy) + let lam = mkLambda mFor v (yexpr, genEnumElemTy) // SEQUENCE POINTS: need to build a let here consuming spBind let enumExpr = mkCoerceIfNeeded cenv.g (mkSeqTy cenv.g enumElemTy) (tyOfExpr cenv.g enumExpr) enumExpr @@ -1726,31 +1755,47 @@ let TcSequenceExpression (cenv: cenv) env tpenv comp overallTy m = // SEQUENCE POINTS: need to build a let here consuming spBind let matchv, matchExpr = compileSeqExprMatchClauses cenv env enumExprMark (pat', vspecs) innerExpr None enumElemTy genOuterTy - let lam = mkLambda enumExprMark matchv (matchExpr, tyOfExpr cenv.g matchExpr) + let lam = mkLambda mFor matchv (matchExpr, tyOfExpr cenv.g matchExpr) Some(mkSeqCollect cenv env m enumElemTy genOuterTy lam enumExpr, tpenv) | SynExpr.For (spBind, id, start, dir, finish, innerComp, m) -> Some(tcSequenceExprBody env genOuterTy tpenv (elimFastIntegerForLoop (spBind, id, start, dir, finish, innerComp, m))) - | SynExpr.While (_spWhile, guardExpr, innerComp, _m) -> + | SynExpr.While (spWhile, guardExpr, innerComp, _m) -> let guardExpr, tpenv = TcExpr cenv cenv.g.bool_ty env tpenv guardExpr let innerExpr, tpenv = tcSequenceExprBody env genOuterTy tpenv innerComp let guardExprMark = guardExpr.Range let guardExpr = mkUnitDelayLambda cenv.g guardExprMark guardExpr - let innerExpr = mkDelayedExpr innerExpr + + // We attach the debug point to the lambda expression so we can fetch it out again in LowerComputedListOrArraySeqExpr + let mWhile = + match spWhile with + | DebugPointAtWhile.Yes m -> m + | _ -> guardExprMark + + let innerExpr = mkDelayedExpr mWhile innerExpr Some(mkSeqFromFunctions cenv env guardExprMark genOuterTy guardExpr innerExpr, tpenv) - | SynExpr.TryFinally (innerComp, unwindExpr, _mTryToLast, _spTry, _spFinally) -> + | SynExpr.TryFinally (innerComp, unwindExpr, mTryToLast, spTry, spFinally) -> let innerExpr, tpenv = tcSequenceExprBody env genOuterTy tpenv innerComp let (unwindExpr: Expr), tpenv = TcExpr cenv cenv.g.unit_ty env tpenv unwindExpr - let unwindExprMark = unwindExpr.Range - let unwindExpr = mkUnitDelayLambda cenv.g unwindExprMark unwindExpr - let innerExpr = mkDelayedExpr innerExpr - let innerExprMark = innerExpr.Range + // We attach the debug points to the lambda expressions so we can fetch it out again in LowerComputedListOrArraySeqExpr + let mTry = + match spTry with + | DebugPointAtTry.Yes m -> m + | _ -> unwindExpr.Range + + let mFinally = + match spFinally with + | DebugPointAtFinally.Yes m -> m + | _ -> unwindExpr.Range + + let innerExpr = mkDelayedExpr mTry innerExpr + let unwindExpr = mkUnitDelayLambda cenv.g mFinally unwindExpr - Some(mkSeqFinally cenv env innerExprMark genOuterTy innerExpr unwindExpr, tpenv) + Some(mkSeqFinally cenv env mTryToLast genOuterTy innerExpr unwindExpr, tpenv) | SynExpr.Paren (_, _, _, m) when not (cenv.g.langVersion.SupportsFeature LanguageFeature.ImplicitYield)-> error(Error(FSComp.SR.tcConstructIsAmbiguousInSequenceExpression(), m)) @@ -1768,7 +1813,7 @@ let TcSequenceExpression (cenv: cenv) env tpenv comp overallTy m = match res with | Choice1Of2 innerExpr1 -> let innerExpr2, tpenv = tcSequenceExprBody env genOuterTy tpenv innerComp2 - let innerExpr2 = mkDelayedExpr innerExpr2 + let innerExpr2 = mkDelayedExpr innerExpr2.Range innerExpr2 Some(mkSeqAppend cenv env innerComp1.Range genOuterTy innerExpr1 innerExpr2, tpenv) | Choice2Of2 stmt1 -> let innerExpr2, tpenv = tcSequenceExprBody env genOuterTy tpenv innerComp2 @@ -1792,7 +1837,7 @@ let TcSequenceExpression (cenv: cenv) env tpenv comp overallTy m = (fun x -> x) |> Some // 'use x = expr in expr' - | SynExpr.LetOrUse (_isRec, true, [Binding (_vis, NormalBinding, _, _, _, _, _, pat, _, rhsExpr, _, _spBind)], innerComp, wholeExprMark) -> + | SynExpr.LetOrUse (_isRec, true, [SynBinding (_vis, SynBindingKind.Normal, _, _, _, _, _, pat, _, rhsExpr, _, spBind)], innerComp, wholeExprMark) -> let bindPatTy = NewInferenceType () let inputExprTy = NewInferenceType () @@ -1800,9 +1845,13 @@ let TcSequenceExpression (cenv: cenv) env tpenv comp overallTy m = UnifyTypes cenv env m inputExprTy bindPatTy let (inputExpr: Expr), tpenv = TcExpr cenv inputExprTy env tpenv rhsExpr let innerExpr, tpenv = tcSequenceExprBody envinner genOuterTy tpenv innerComp + let mBind = + match spBind with + | DebugPointAtBinding.Yes m -> m + | _ -> inputExpr.Range let inputExprMark = inputExpr.Range let matchv, matchExpr = compileSeqExprMatchClauses cenv env inputExprMark (pat', vspecs) innerExpr (Some inputExpr) bindPatTy genOuterTy - let consumeExpr = mkLambda wholeExprMark matchv (matchExpr, genOuterTy) + let consumeExpr = mkLambda mBind matchv (matchExpr, genOuterTy) //SEQPOINT NEEDED - we must consume spBind on this path Some(mkSeqUsing cenv env wholeExprMark bindPatTy genOuterTy inputExpr consumeExpr, tpenv) @@ -1813,7 +1862,7 @@ let TcSequenceExpression (cenv: cenv) env tpenv comp overallTy m = let inputExpr, matchty, tpenv = TcExprOfUnknownType cenv env tpenv expr let tclauses, tpenv = List.mapFold - (fun tpenv (Clause(pat, cond, innerComp, _, sp)) -> + (fun tpenv (SynMatchClause(pat, cond, innerComp, _, sp)) -> let pat', cond', vspecs, envinner, tpenv = TcMatchPattern cenv matchty env tpenv (pat, cond) let innerExpr, tpenv = tcSequenceExprBody envinner genOuterTy tpenv innerComp TClause(pat', cond', TTarget(vspecs, innerExpr, sp), pat'.Range), tpenv) @@ -1876,7 +1925,7 @@ let TcSequenceExpression (cenv: cenv) env tpenv comp overallTy m = Choice2Of2 stmt, tpenv let coreExpr, tpenv = tcSequenceExprBody env overallTy tpenv comp - let delayedExpr = mkDelayedExpr coreExpr + let delayedExpr = mkDelayedExpr coreExpr.Range coreExpr delayedExpr, tpenv let TcSequenceExpressionEntry (cenv: cenv) env overallTy tpenv (isArrayOrList, isNotNakedRefCell, comp) m = @@ -1915,7 +1964,7 @@ let TcArrayOrListSequenceExpression (cenv: cenv) env overallTy tpenv (isArray, c if nelems > 0 && List.forall (function SynExpr.Const (SynConst.UInt16 _, _) -> true | _ -> false) elems then SynExpr.Const (SynConst.UInt16s (Array.ofList (List.map (function SynExpr.Const (SynConst.UInt16 x, _) -> x | _ -> failwith "unreachable") elems)), m) elif nelems > 0 && List.forall (function SynExpr.Const (SynConst.Byte _, _) -> true | _ -> false) elems - then SynExpr.Const (SynConst.Bytes (Array.ofList (List.map (function SynExpr.Const (SynConst.Byte x, _) -> x | _ -> failwith "unreachable") elems), m), m) + then SynExpr.Const (SynConst.Bytes (Array.ofList (List.map (function SynExpr.Const (SynConst.Byte x, _) -> x | _ -> failwith "unreachable") elems), SynByteStringKind.Regular, m), m) else SynExpr.ArrayOrList (isArray, elems, m) else if elems.Length > 500 then @@ -1940,6 +1989,7 @@ let TcArrayOrListSequenceExpression (cenv: cenv) env overallTy tpenv (isArray, c let expr = if cenv.g.compilingFslib then + //warning(Error(FSComp.SR.fslibUsingComputedListOrArray(), expr.Range)) expr else // We add a call to 'seq ... ' to make sure sequence expression compilation gets applied to the contents of the diff --git a/src/fsharp/CheckComputationExpressions.fsi b/src/fsharp/CheckComputationExpressions.fsi index f7843840cc1..a40f898e712 100644 --- a/src/fsharp/CheckComputationExpressions.fsi +++ b/src/fsharp/CheckComputationExpressions.fsi @@ -3,8 +3,9 @@ module internal FSharp.Compiler.CheckComputationExpressions open FSharp.Compiler.CheckExpressions -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range open FSharp.Compiler.TypedTree val TcSequenceExpressionEntry: cenv:TcFileState -> env:TcEnv -> overallTy:TType -> tpenv:UnscopedTyparEnv -> isArrayOrList:bool * isNotNakedRefCell:bool ref * comp:SynExpr -> m:range -> Expr * UnscopedTyparEnv diff --git a/src/fsharp/CheckDeclarations.fs b/src/fsharp/CheckDeclarations.fs index abfe10f7015..8b47a983b8c 100644 --- a/src/fsharp/CheckDeclarations.fs +++ b/src/fsharp/CheckDeclarations.fs @@ -5,14 +5,13 @@ module internal FSharp.Compiler.CheckDeclarations open System open System.Collections.Generic -open Internal.Utilities - +open Internal.Utilities.Collections +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras +open Internal.Utilities.Library.ResultOrException open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Internal.Library.ResultOrException open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.AttributeChecking @@ -24,22 +23,19 @@ open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features open FSharp.Compiler.Infos open FSharp.Compiler.InfoReader -open FSharp.Compiler.Lib -open FSharp.Compiler.MethodCalls open FSharp.Compiler.MethodOverrides open FSharp.Compiler.NameResolution -open FSharp.Compiler.PatternMatchCompilation -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Range -open FSharp.Compiler.Rational -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming open FSharp.Compiler.SyntaxTreeOps +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Xml open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TypeRelations -open FSharp.Compiler.XmlDoc #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping @@ -429,12 +425,12 @@ module TcRecdUnionAndEnumDeclarations = | _ -> () rfspec - let TcAnonFieldDecl cenv env parent tpenv nm (Field(Attributes attribs, isStatic, idOpt, ty, isMutable, xmldoc, vis, m)) = + let TcAnonFieldDecl cenv env parent tpenv nm (SynField(Attributes attribs, isStatic, idOpt, ty, isMutable, xmldoc, vis, m)) = let id = (match idOpt with None -> mkSynId m nm | Some id -> id) let doc = xmldoc.ToXmlDoc(true, Some []) TcFieldDecl cenv env parent false tpenv (isStatic, attribs, id, idOpt.IsNone, ty, isMutable, doc, vis, m) - let TcNamedFieldDecl cenv env parent isIncrClass tpenv (Field(Attributes attribs, isStatic, id, ty, isMutable, xmldoc, vis, m)) = + let TcNamedFieldDecl cenv env parent isIncrClass tpenv (SynField(Attributes attribs, isStatic, id, ty, isMutable, xmldoc, vis, m)) = match id with | None -> error (Error(FSComp.SR.tcFieldRequiresName(), m)) | Some id -> @@ -459,20 +455,20 @@ module TcRecdUnionAndEnumDeclarations = let ValidateFieldNames (synFields: SynField list, tastFields: RecdField list) = let seen = Dictionary() - for (sf, f) in List.zip synFields tastFields do + (synFields, tastFields) ||> List.iter2 (fun sf f -> match seen.TryGetValue f.Name with | true, synField -> match sf, synField with - | Field(_, _, Some id, _, _, _, _, _), Field(_, _, Some(_), _, _, _, _, _) -> + | SynField(_, _, Some id, _, _, _, _, _), SynField(_, _, Some(_), _, _, _, _, _) -> error(Error(FSComp.SR.tcFieldNameIsUsedModeThanOnce(id.idText), id.idRange)) - | Field(_, _, Some id, _, _, _, _, _), Field(_, _, None, _, _, _, _, _) - | Field(_, _, None, _, _, _, _, _), Field(_, _, Some id, _, _, _, _, _) -> + | SynField(_, _, Some id, _, _, _, _, _), SynField(_, _, None, _, _, _, _, _) + | SynField(_, _, None, _, _, _, _, _), SynField(_, _, Some id, _, _, _, _, _) -> error(Error(FSComp.SR.tcFieldNameConflictsWithGeneratedNameForAnonymousField(id.idText), id.idRange)) | _ -> assert false | _ -> - seen.Add(f.Name, sf) + seen.Add(f.Name, sf)) - let TcUnionCaseDecl cenv env parent thisTy thisTyInst tpenv (UnionCase(Attributes synAttrs, id, args, xmldoc, vis, m)) = + let TcUnionCaseDecl cenv env parent thisTy thisTyInst tpenv (SynUnionCase(Attributes synAttrs, id, args, xmldoc, vis, m)) = let attrs = TcAttributes cenv env AttributeTargets.UnionCaseDecl synAttrs // the attributes of a union case decl get attached to the generated "static factory" method let vis, _ = ComputeAccessAndCompPath env None m vis None parent let vis = CombineReprAccess parent vis @@ -481,9 +477,9 @@ module TcRecdUnionAndEnumDeclarations = let rfields, recordTy = match args with - | UnionCaseFields flds -> + | SynUnionCaseKind.Fields flds -> let nFields = flds.Length - let rfields = flds |> List.mapi (fun i (Field (idOpt = idOpt) as fld) -> + let rfields = flds |> List.mapi (fun i (SynField (idOpt = idOpt) as fld) -> match idOpt, parent with | Some fieldId, Parent tcref -> let item = Item.UnionCaseField (UnionCaseInfo (thisTyInst, UnionCaseRef (tcref, id.idText)), i) @@ -494,7 +490,7 @@ module TcRecdUnionAndEnumDeclarations = ValidateFieldNames(flds, rfields) rfields, thisTy - | UnionCaseFullType (ty, arity) -> + | SynUnionCaseKind.FullType (ty, arity) -> let ty', _ = TcTypeAndRecover cenv NoNewTypars CheckCxs ItemOccurence.UseInType env tpenv ty let curriedArgTys, recordTy = GetTopTauTypeInFSharpForm cenv.g (arity |> TranslateTopValSynInfo m (TcAttributes cenv env) |> TranslatePartialArity []).ArgInfos ty' m if curriedArgTys.Length > 1 then @@ -516,7 +512,7 @@ module TcRecdUnionAndEnumDeclarations = let unionCases' = unionCases |> List.map (TcUnionCaseDecl cenv env parent thisTy thisTyInst tpenv) unionCases' |> CheckDuplicates (fun uc -> uc.Id) "union case" - let TcEnumDecl cenv env parent thisTy fieldTy (EnumCase(Attributes synAttrs, id, v, xmldoc, m)) = + let TcEnumDecl cenv env parent thisTy fieldTy (SynEnumCase(Attributes synAttrs, id, v, _, xmldoc, m)) = let attrs = TcAttributes cenv env AttributeTargets.Field synAttrs match v with | SynConst.Bytes _ @@ -947,7 +943,7 @@ module IncrClassChecking = let tps, _, argInfos, _, _ = GetTopValTypeInCompiledForm g topValInfo 0 v.Type v.Range let valSynInfo = SynValInfo(argInfos |> List.mapSquared (fun (_, argInfo) -> SynArgInfo([], false, argInfo.Name)), SynInfo.unnamedRetVal) - let memberFlags = (if isStatic then StaticMemberFlags else NonVirtualMemberFlags) MemberKind.Member + let memberFlags = (if isStatic then StaticMemberFlags else NonVirtualMemberFlags) SynMemberKind.Member let id = mkSynId v.Range name let memberInfo = MakeMemberDataAndMangledNameForMemberVal(g, tcref, false, [], [], memberFlags, valSynInfo, mkSynId v.Range name, true) @@ -1286,7 +1282,7 @@ module IncrClassChecking = match spBind, rhsExpr with // Don't generate big sequence points for functions in classes | _, (Expr.Lambda _ | Expr.TyLambda _) -> v.Range - | DebugPointAtBinding m, _ -> m + | DebugPointAtBinding.Yes m, _ -> m | _ -> v.Range let assignExpr = reps.MakeValueAssign (Some thisVal) thisTyInst NoSafeInitInfo v rhsExpr m let adjustSafeInitFieldExprOpt = @@ -1647,7 +1643,7 @@ module MutRecBindingChecking = | _ -> () if not isStatic && tcref.IsStructOrEnumTycon then - let allDo = letBinds |> List.forall (function (Binding(_, DoBinding, _, _, _, _, _, _, _, _, _, _)) -> true | _ -> false) + let allDo = letBinds |> List.forall (function (SynBinding(_, SynBindingKind.Do, _, _, _, _, _, _, _, _, _, _)) -> true | _ -> false) // Code for potential future design change to allow functions-compiled-as-members in structs if allDo then errorR(Deprecated(FSComp.SR.tcStructsMayNotContainDoBindings(), (trimRangeToLine m))) @@ -1674,7 +1670,7 @@ module MutRecBindingChecking = | Some memberFlags -> if memberFlags.IsInstance then error(Error(FSComp.SR.tcMeasureDeclarationsRequireStaticMembers(), m)) match memberFlags.MemberKind with - | MemberKind.Constructor -> error(Error(FSComp.SR.tcMeasureDeclarationsRequireStaticMembersNotConstructors(), m)) + | SynMemberKind.Constructor -> error(Error(FSComp.SR.tcMeasureDeclarationsRequireStaticMembersNotConstructors(), m)) | _ -> () let rbind = NormalizedRecBindingDefn(containerInfo, newslotsOK, declKind, bind) let overridesOK = DeclKind.CanOverrideOrImplement declKind @@ -1710,7 +1706,7 @@ module MutRecBindingChecking = | Phase2AOpen _ #endif | Phase2AIncrClassCtor _ | Phase2AInherit _ | Phase2AIncrClassCtorJustAfterSuperInit -> false - | Phase2AIncrClassBindings (_, binds, _, _, _) -> binds |> List.exists (function (Binding (_, DoBinding, _, _, _, _, _, _, _, _, _, _)) -> true | _ -> false) + | Phase2AIncrClassBindings (_, binds, _, _, _) -> binds |> List.exists (function (SynBinding (_, SynBindingKind.Do, _, _, _, _, _, _, _, _, _, _)) -> true | _ -> false) | Phase2AIncrClassCtorJustAfterLastLet | Phase2AMember _ -> true let restRev = List.rev rest @@ -1820,10 +1816,10 @@ module MutRecBindingChecking = let envInstance = AddDeclaredTypars CheckForDuplicateTypars incrClassCtorLhs.InstanceCtorDeclaredTypars envInstance let envStatic = AddDeclaredTypars CheckForDuplicateTypars incrClassCtorLhs.InstanceCtorDeclaredTypars envStatic - let envInstance = match incrClassCtorLhs.InstanceCtorSafeThisValOpt with Some v -> AddLocalVal cenv.tcSink scopem v envInstance | None -> envInstance - let envInstance = List.foldBack AddLocalValPrimitive incrClassCtorLhs.InstanceCtorArgs envInstance - let envNonRec = match incrClassCtorLhs.InstanceCtorSafeThisValOpt with Some v -> AddLocalVal cenv.tcSink scopem v envNonRec | None -> envNonRec - let envNonRec = List.foldBack AddLocalValPrimitive incrClassCtorLhs.InstanceCtorArgs envNonRec + let envInstance = match incrClassCtorLhs.InstanceCtorSafeThisValOpt with Some v -> AddLocalVal g cenv.tcSink scopem v envInstance | None -> envInstance + let envInstance = List.foldBack (AddLocalValPrimitive cenv.g) incrClassCtorLhs.InstanceCtorArgs envInstance + let envNonRec = match incrClassCtorLhs.InstanceCtorSafeThisValOpt with Some v -> AddLocalVal g cenv.tcSink scopem v envNonRec | None -> envNonRec + let envNonRec = List.foldBack (AddLocalValPrimitive cenv.g) incrClassCtorLhs.InstanceCtorArgs envNonRec let safeThisValBindOpt = TcLetrecComputeCtorSafeThisValBind cenv incrClassCtorLhs.InstanceCtorSafeThisValOpt let innerState = (tpenv, envInstance, envStatic, envNonRec, generalizedRecBinds, preGeneralizationRecBinds, uncheckedRecBindsTable) @@ -1839,8 +1835,8 @@ module MutRecBindingChecking = with e -> errorRecovery e m mkUnit g m, tpenv - let envInstance = match baseValOpt with Some baseVal -> AddLocalVal cenv.tcSink scopem baseVal envInstance | None -> envInstance - let envNonRec = match baseValOpt with Some baseVal -> AddLocalVal cenv.tcSink scopem baseVal envNonRec | None -> envNonRec + let envInstance = match baseValOpt with Some baseVal -> AddLocalVal g cenv.tcSink scopem baseVal envInstance | None -> envInstance + let envNonRec = match baseValOpt with Some baseVal -> AddLocalVal g cenv.tcSink scopem baseVal envNonRec | None -> envNonRec let innerState = (tpenv, envInstance, envStatic, envNonRec, generalizedRecBinds, preGeneralizationRecBinds, uncheckedRecBindsTable) Phase2BInherit (inheritsExpr, baseValOpt), innerState @@ -1868,7 +1864,7 @@ module MutRecBindingChecking = |> List.unzip List.concat binds, bindRs, env, tpenv - let envNonRec = (envNonRec, binds) ||> List.fold (fun acc bind -> AddLocalValPrimitive bind.Var acc) + let envNonRec = (envNonRec, binds) ||> List.fold (fun acc bind -> AddLocalValPrimitive g bind.Var acc) // Check to see that local bindings and members don't have the same name and check some other adhoc conditions for bind in binds do @@ -1884,7 +1880,7 @@ module MutRecBindingChecking = | _ -> errorR (Error(FSComp.SR.tcMemberAndLocalClassBindingHaveSameName nm, bind.Var.Range)) // Also add static entries to the envInstance if necessary - let envInstance = (if isStatic then (binds, envInstance) ||> List.foldBack (fun b e -> AddLocalVal cenv.tcSink scopem b.Var e) else env) + let envInstance = (if isStatic then (binds, envInstance) ||> List.foldBack (fun b e -> AddLocalVal cenv.g cenv.tcSink scopem b.Var e) else env) let envStatic = (if isStatic then env else envStatic) let innerState = (tpenv, envInstance, envStatic, envNonRec, generalizedRecBinds, preGeneralizationRecBinds, uncheckedRecBindsTable) Phase2BIncrClassBindings bindRs, innerState @@ -2101,7 +2097,7 @@ module MutRecBindingChecking = // Generate the (value, expr) pairs for the implicit // object constructor and implicit static initializer let ctorValueExprBindings = - [ (let ctorValueExprBinding = TBind(incrClassCtorLhs.InstanceCtorVal, ctorBodyLambdaExpr, NoDebugPointAtStickyBinding) + [ (let ctorValueExprBinding = TBind(incrClassCtorLhs.InstanceCtorVal, ctorBodyLambdaExpr, DebugPointAtBinding.NoneAtSticky) let rbind = { ValScheme = incrClassCtorLhs.InstanceCtorValScheme ; Binding = ctorValueExprBinding } FixupLetrecBind cenv envForDecls.DisplayEnv generalizedTyparsForRecursiveBlock rbind) ] @ @@ -2109,7 +2105,7 @@ module MutRecBindingChecking = | None -> [] | Some cctorBodyLambdaExpr -> [ (let _, cctorVal, cctorValScheme = incrClassCtorLhs.StaticCtorValInfo.Force() - let cctorValueExprBinding = TBind(cctorVal, cctorBodyLambdaExpr, NoDebugPointAtStickyBinding) + let cctorValueExprBinding = TBind(cctorVal, cctorBodyLambdaExpr, DebugPointAtBinding.NoneAtSticky) let rbind = { ValScheme = cctorValScheme; Binding = cctorValueExprBinding } FixupLetrecBind cenv envForDecls.DisplayEnv generalizedTyparsForRecursiveBlock rbind) ] ) @@ -2218,7 +2214,7 @@ module MutRecBindingChecking = // Add the module abbreviations let envForDecls = (envForDecls, moduleAbbrevs) ||> List.fold (TcModuleAbbrevDecl cenv scopem) // Add the values and members - let envForDecls = AddLocalVals cenv.tcSink scopem lets envForDecls + let envForDecls = AddLocalVals cenv.g cenv.tcSink scopem lets envForDecls envForDecls) /// Phase 2: Check the members and 'let' definitions in a mutually recursive group of definitions. @@ -2262,8 +2258,8 @@ module MutRecBindingChecking = let envForDeclsUpdated = envForDecls - |> AddLocalVals cenv.tcSink scopem prelimRecValues - |> AddLocalVals cenv.tcSink scopem ctorVals + |> AddLocalVals cenv.g cenv.tcSink scopem prelimRecValues + |> AddLocalVals cenv.g cenv.tcSink scopem ctorVals envForDeclsUpdated) @@ -2370,8 +2366,7 @@ let TcMutRecDefns_Phase2 (cenv: cenv) envInitial bindsm scopem mutRecNSInfo (env let ity' = let envinner = AddDeclaredTypars CheckForDuplicateTypars declaredTyconTypars envForTycon TcTypeAndRecover cenv NoNewTypars CheckCxs ItemOccurence.UseInType envinner emptyUnscopedTyparEnv ity |> fst - if not (isInterfaceTy g ity') then errorR(Error(FSComp.SR.tcTypeIsNotInterfaceType0(), ity.Range)) - + if not (tcref.HasInterface g ity') then error(Error(FSComp.SR.tcAllImplementedInterfacesShouldBeDeclared(), ity.Range)) @@ -2888,7 +2883,7 @@ let CheckForDuplicateModule env nm m = /// Check 'exception' declarations in implementations and signatures module TcExceptionDeclarations = - let TcExnDefnCore_Phase1A cenv env parent (SynExceptionDefnRepr(Attributes synAttrs, UnionCase(_, id, _, _, _, _), _, doc, vis, m)) = + let TcExnDefnCore_Phase1A cenv env parent (SynExceptionDefnRepr(Attributes synAttrs, SynUnionCase(_, id, _, _, _, _), _, doc, vis, m)) = let attrs = TcAttributes cenv env AttributeTargets.ExnDecl synAttrs if not (String.isLeadingIdentifierCharacterUpperCase id.idText) then errorR(NotUpperCaseConstructor m) let vis, cpath = ComputeAccessAndCompPath env None m vis None parent @@ -2899,14 +2894,14 @@ module TcExceptionDeclarations = let doc = doc.ToXmlDoc(true, Some []) Construct.NewExn cpath id vis repr attrs doc - let TcExnDefnCore_Phase1G_EstablishRepresentation (cenv: cenv) (env: TcEnv) parent (exnc: Entity) (SynExceptionDefnRepr(_, UnionCase(_, _, args, _, _, _), reprIdOpt, _, _, m)) = + let TcExnDefnCore_Phase1G_EstablishRepresentation (cenv: cenv) (env: TcEnv) parent (exnc: Entity) (SynExceptionDefnRepr(_, SynUnionCase(_, _, args, _, _, _), reprIdOpt, _, _, m)) = let g = cenv.g - let args = match args with (UnionCaseFields args) -> args | _ -> error(Error(FSComp.SR.tcExplicitTypeSpecificationCannotBeUsedForExceptionConstructors(), m)) + let args = match args with (SynUnionCaseKind.Fields args) -> args | _ -> error(Error(FSComp.SR.tcExplicitTypeSpecificationCannotBeUsedForExceptionConstructors(), m)) let ad = env.AccessRights let id = exnc.Id let args' = - args |> List.mapi (fun i (Field (idOpt = idOpt) as fdef) -> + args |> List.mapi (fun i (SynField (idOpt = idOpt) as fdef) -> match idOpt with | Some fieldId -> let tcref = mkLocalTyconRef exnc @@ -3050,18 +3045,18 @@ module EstablishTypeDefinitionCores = error(Error(FSComp.SR.tcAttributesOfTypeSpecifyMultipleKindsForType(), m)) match kind with - | TyconUnspecified -> - if hasClassAttr || hasAbstractClassAttr || hasMeasureAttr then TyconClass - elif hasInterfaceAttr then TyconInterface - elif hasStructAttr then TyconStruct - elif isConcrete || not (isNil fields) then TyconClass - elif isNil slotsigs && inSig then TyconHiddenRepr - else TyconInterface + | SynTypeDefnKind.Unspecified -> + if hasClassAttr || hasAbstractClassAttr || hasMeasureAttr then SynTypeDefnKind.Class + elif hasInterfaceAttr then SynTypeDefnKind.Interface + elif hasStructAttr then SynTypeDefnKind.Struct + elif isConcrete || not (isNil fields) then SynTypeDefnKind.Class + elif isNil slotsigs && inSig then SynTypeDefnKind.Opaque + else SynTypeDefnKind.Interface | k -> - if hasClassAttr && not (match k with TyconClass -> true | _ -> false) || - hasMeasureAttr && not (match k with TyconClass | TyconAbbrev | TyconHiddenRepr -> true | _ -> false) || - hasInterfaceAttr && not (match k with TyconInterface -> true | _ -> false) || - hasStructAttr && not (match k with TyconStruct | TyconRecord | TyconUnion -> true | _ -> false) then + if hasClassAttr && not (match k with SynTypeDefnKind.Class -> true | _ -> false) || + hasMeasureAttr && not (match k with SynTypeDefnKind.Class | SynTypeDefnKind.Abbrev | SynTypeDefnKind.Opaque -> true | _ -> false) || + hasInterfaceAttr && not (match k with SynTypeDefnKind.Interface -> true | _ -> false) || + hasStructAttr && not (match k with SynTypeDefnKind.Struct | SynTypeDefnKind.Record | SynTypeDefnKind.Union -> true | _ -> false) then error(Error(FSComp.SR.tcKindOfTypeSpecifiedDoesNotMatchDefinition(), m)) k @@ -3088,13 +3083,13 @@ module EstablishTypeDefinitionCores = | SynTypeDefnSimpleRepr.None _ -> () | SynTypeDefnSimpleRepr.Union (_, unionCases, _) -> - for (UnionCase (_, _, args, _, _, m)) in unionCases do + for (SynUnionCase (_, _, args, _, _, m)) in unionCases do match args with - | UnionCaseFields flds -> - for (Field(_, _, _, ty, _, _, _, m)) in flds do + | SynUnionCaseKind.Fields flds -> + for (SynField(_, _, _, ty, _, _, _, m)) in flds do let ty', _ = TcTypeAndRecover cenv NoNewTypars NoCheckCxs ItemOccurence.UseInType env tpenv ty yield (ty', m) - | UnionCaseFullType (ty, arity) -> + | SynUnionCaseKind.FullType (ty, arity) -> let ty', _ = TcTypeAndRecover cenv NoNewTypars NoCheckCxs ItemOccurence.UseInType env tpenv ty let curriedArgTys, _ = GetTopTauTypeInFSharpForm cenv.g (arity |> TranslateTopValSynInfo m (TcAttributes cenv env) |> TranslatePartialArity []).ArgInfos ty' m if curriedArgTys.Length > 1 then @@ -3104,7 +3099,7 @@ module EstablishTypeDefinitionCores = yield (argty, m) | SynTypeDefnSimpleRepr.General (_, _, _, fields, _, _, implicitCtorSynPats, _) when tycon.IsFSharpStructOrEnumTycon -> // for structs - for (Field(_, isStatic, _, ty, _, _, _, m)) in fields do + for (SynField(_, isStatic, _, ty, _, _, _, m)) in fields do if not isStatic then let ty', _ = TcTypeAndRecover cenv NoNewTypars NoCheckCxs ItemOccurence.UseInType env tpenv ty yield (ty', m) @@ -3121,7 +3116,7 @@ module EstablishTypeDefinitionCores = yield (ty, m) | SynTypeDefnSimpleRepr.Record (_, fields, _) -> - for (Field(_, _, _, ty, _, _, _, m)) in fields do + for (SynField(_, _, _, ty, _, _, _, m)) in fields do let ty', _ = TcTypeAndRecover cenv NoNewTypars NoCheckCxs ItemOccurence.UseInType env tpenv ty yield (ty', m) @@ -3157,7 +3152,7 @@ module EstablishTypeDefinitionCores = let TypeNamesInMutRecDecls cenv env (compDecls: MutRecShapes) = [ for d in compDecls do match d with - | MutRecShape.Tycon (MutRecDefnsPhase1DataForTycon(ComponentInfo(_, typars, _, ids, _, _, _, _), _, _, _, _, isAtOriginalTyconDefn), _) -> + | MutRecShape.Tycon (MutRecDefnsPhase1DataForTycon(SynComponentInfo(_, TyparDecls typars, _, ids, _, _, _, _), _, _, _, _, isAtOriginalTyconDefn), _) -> if isAtOriginalTyconDefn && (TcTyparDecls cenv env typars |> List.forall (fun p -> p.Kind = TyparKind.Measure)) then yield (List.last ids).idText | _ -> () ] @@ -3167,10 +3162,10 @@ module EstablishTypeDefinitionCores = [ for def in defs do match def with | SynModuleDecl.Types (typeSpecs, _) -> - for (TypeDefn(ComponentInfo(_, typars, _, ids, _, _, _, _), trepr, _, _)) in typeSpecs do + for (SynTypeDefn(SynComponentInfo(_, TyparDecls typars, _, ids, _, _, _, _), trepr, _, _, _)) in typeSpecs do if isNil typars then match trepr with - | SynTypeDefnRepr.ObjectModel(TyconAugmentation, _, _) -> () + | SynTypeDefnRepr.ObjectModel(SynTypeDefnKind.Augmentation, _, _) -> () | _ -> yield (List.last ids).idText | _ -> () ] |> set @@ -3180,7 +3175,7 @@ module EstablishTypeDefinitionCores = [ for def in defs do match def with | SynModuleSigDecl.Types (typeSpecs, _) -> - for (TypeDefnSig(ComponentInfo(_, typars, _, ids, _, _, _, _), trepr, extraMembers, _)) in typeSpecs do + for (SynTypeDefnSig(SynComponentInfo(_, TyparDecls typars, _, ids, _, _, _, _), trepr, extraMembers, _)) in typeSpecs do if isNil typars then match trepr with | SynTypeDefnSigRepr.Simple((SynTypeDefnSimpleRepr.None _), _) when not (isNil extraMembers) -> () @@ -3189,7 +3184,7 @@ module EstablishTypeDefinitionCores = |> set let TcTyconDefnCore_Phase1A_BuildInitialModule cenv envInitial parent typeNames compInfo decls = - let (ComponentInfo(Attributes attribs, _parms, _constraints, longPath, xml, _, vis, im)) = compInfo + let (SynComponentInfo(Attributes attribs, _, _, longPath, xml, _, vis, im)) = compInfo let id = ComputeModuleName longPath let modAttrs = TcAttributes cenv envInitial AttributeTargets.ModuleDecl attribs let modKind = ComputeModuleOrNamespaceKind cenv.g true typeNames modAttrs id.idText @@ -3215,7 +3210,7 @@ module EstablishTypeDefinitionCores = /// but /// - we don't yet 'properly' establish constraints on type parameters let private TcTyconDefnCore_Phase1A_BuildInitialTycon (cenv: cenv) env parent (MutRecDefnsPhase1DataForTycon(synTyconInfo, synTyconRepr, _, preEstablishedHasDefaultCtor, hasSelfReferentialCtor, _)) = - let (ComponentInfo (_, synTypars, _, id, doc, preferPostfix, synVis, _)) = synTyconInfo + let (SynComponentInfo (_, TyparDecls synTypars, _, id, doc, preferPostfix, synVis, _)) = synTyconInfo let checkedTypars = TcTyparDecls cenv env synTypars id |> List.iter (CheckNamespaceModuleOrTypeName cenv.g) match synTyconRepr with @@ -3251,7 +3246,24 @@ module EstablishTypeDefinitionCores = // '' documentation is allowed for delegates let paramNames = match synTyconRepr with - | SynTypeDefnSimpleRepr.General (TyconDelegate (_ty, arity), _, _, _, _, _, _, _) -> arity.ArgNames + | SynTypeDefnSimpleRepr.General (SynTypeDefnKind.Delegate (_ty, arity), _, _, _, _, _, _, _) -> arity.ArgNames + | SynTypeDefnSimpleRepr.General (SynTypeDefnKind.Unspecified, _, _, _, _, _, Some synPats, _) -> + let rec patName (p: SynSimplePat) = + match p with + | SynSimplePat.Id (id, _, _, _, _, _) -> id.idText + | SynSimplePat.Typed(pat, _, _) -> patName pat + | SynSimplePat.Attrib(pat, _, _) -> patName pat + + let rec pats (p: SynSimplePats) = + match p with + | SynSimplePats.SimplePats (ps, _) -> ps + | SynSimplePats.Typed (ps, _, _) -> pats ps + + let patNames = + pats synPats + |> List.map patName + + patNames | _ -> [] let doc = doc.ToXmlDoc(true, Some paramNames ) Construct.NewTycon @@ -3270,7 +3282,7 @@ module EstablishTypeDefinitionCores = /// synTyconInfo: Syntactic AST for the name, attributes etc. of the type constructor /// synTyconRepr: Syntactic AST for the RHS of the type definition let private TcTyconDefnCore_Phase1B_EstablishBasicKind (cenv: cenv) inSig envinner (MutRecDefnsPhase1DataForTycon(synTyconInfo, synTyconRepr, _, _, _, _)) (tycon: Tycon) = - let (ComponentInfo(Attributes synAttrs, typars, _, _, _, _, _, _)) = synTyconInfo + let (SynComponentInfo(Attributes synAttrs, TyparDecls typars, _, _, _, _, _, _)) = synTyconInfo let m = tycon.Range let id = tycon.Id @@ -3302,7 +3314,7 @@ module EstablishTypeDefinitionCores = | SynTypeDefnSimpleRepr.Exception _ -> TNoRepr | SynTypeDefnSimpleRepr.None m -> // Run InferTyconKind to raise errors on inconsistent attribute sets - InferTyconKind cenv.g (TyconHiddenRepr, attrs, [], [], inSig, true, m) |> ignore + InferTyconKind cenv.g (SynTypeDefnKind.Opaque, attrs, [], [], inSig, true, m) |> ignore if not inSig && not hasMeasureAttr then errorR(Error(FSComp.SR.tcTypeRequiresDefinition(), m)) if hasMeasureAttr then @@ -3316,25 +3328,26 @@ module EstablishTypeDefinitionCores = | SynTypeDefnSimpleRepr.Union (_, _, m) -> // Run InferTyconKind to raise errors on inconsistent attribute sets - InferTyconKind cenv.g (TyconUnion, attrs, [], [], inSig, true, m) |> ignore + InferTyconKind cenv.g (SynTypeDefnKind.Union, attrs, [], [], inSig, true, m) |> ignore // Note: the table of union cases is initially empty Construct.MakeUnionRepr [] | SynTypeDefnSimpleRepr.TypeAbbrev _ -> // Run InferTyconKind to raise errors on inconsistent attribute sets - InferTyconKind cenv.g (TyconAbbrev, attrs, [], [], inSig, true, m) |> ignore + InferTyconKind cenv.g (SynTypeDefnKind.Abbrev, attrs, [], [], inSig, true, m) |> ignore TNoRepr | SynTypeDefnSimpleRepr.LibraryOnlyILAssembly (s, m) -> + let s = (s :?> ILType) // Run InferTyconKind to raise errors on inconsistent attribute sets - InferTyconKind cenv.g (TyconILAssemblyCode, attrs, [], [], inSig, true, m) |> ignore + InferTyconKind cenv.g (SynTypeDefnKind.IL, attrs, [], [], inSig, true, m) |> ignore TAsmRepr s | SynTypeDefnSimpleRepr.Record (_, _, m) -> // Run InferTyconKind to raise errors on inconsistent attribute sets - InferTyconKind cenv.g (TyconRecord, attrs, [], [], inSig, true, m) |> ignore + InferTyconKind cenv.g (SynTypeDefnKind.Record, attrs, [], [], inSig, true, m) |> ignore // Note: the table of record fields is initially empty TRecdRepr (Construct.MakeRecdFieldsTable []) @@ -3342,15 +3355,15 @@ module EstablishTypeDefinitionCores = | SynTypeDefnSimpleRepr.General (kind, _, slotsigs, fields, isConcrete, _, _, _) -> let kind = InferTyconKind cenv.g (kind, attrs, slotsigs, fields, inSig, isConcrete, m) match kind with - | TyconHiddenRepr -> + | SynTypeDefnKind.Opaque -> TNoRepr | _ -> let kind = match kind with - | TyconClass -> TTyconClass - | TyconInterface -> TTyconInterface - | TyconDelegate _ -> TTyconDelegate (MakeSlotSig("Invoke", cenv.g.unit_ty, [], [], [], None)) - | TyconStruct -> TTyconStruct + | SynTypeDefnKind.Class -> TTyconClass + | SynTypeDefnKind.Interface -> TTyconInterface + | SynTypeDefnKind.Delegate _ -> TTyconDelegate (MakeSlotSig("Invoke", cenv.g.unit_ty, [], [], [], None)) + | SynTypeDefnKind.Struct -> TTyconStruct | _ -> error(InternalError("should have inferred tycon kind", m)) let repr = @@ -3663,7 +3676,7 @@ module EstablishTypeDefinitionCores = let inheritedTys = fst (List.mapFold (mapFoldFst (TcTypeAndRecover cenv NoNewTypars checkCxs ItemOccurence.UseInType envinner)) tpenv inherits) let implementedTys, inheritedTys = match kind with - | TyconInterface -> + | SynTypeDefnKind.Interface -> explicitImplements |> List.iter (fun (_, m) -> errorR(Error(FSComp.SR.tcInterfacesShouldUseInheritNotInterface(), m))) (implementedTys @ inheritedTys), [] | _ -> implementedTys, inheritedTys @@ -3706,13 +3719,13 @@ module EstablishTypeDefinitionCores = match inheritedTys with | [] -> match kind with - | TyconStruct -> Some(cenv.g.system_Value_ty) - | TyconDelegate _ -> Some(cenv.g.system_MulticastDelegate_ty ) - | TyconHiddenRepr | TyconClass | TyconInterface -> None + | SynTypeDefnKind.Struct -> Some(cenv.g.system_Value_ty) + | SynTypeDefnKind.Delegate _ -> Some(cenv.g.system_MulticastDelegate_ty ) + | SynTypeDefnKind.Opaque | SynTypeDefnKind.Class | SynTypeDefnKind.Interface -> None | _ -> error(InternalError("should have inferred tycon kind", m)) | [(ty, m)] -> - if not firstPass && not (match kind with TyconClass -> true | _ -> false) then + if not firstPass && not (match kind with SynTypeDefnKind.Class -> true | _ -> false) then errorR (Error(FSComp.SR.tcStructsInterfacesEnumsDelegatesMayNotInheritFromOtherTypes(), m)) CheckSuperType cenv ty m if isTyparTy cenv.g ty then @@ -3931,6 +3944,7 @@ module EstablishTypeDefinitionCores = TRecdRepr (Construct.MakeRecdFieldsTable recdFields), None, NoSafeInitInfo | SynTypeDefnSimpleRepr.LibraryOnlyILAssembly (s, _) -> + let s = (s :?> ILType) noCLIMutableAttributeCheck() noMeasureAttributeCheck() noSealedAttributeCheck FSComp.SR.tcTypesAreAlwaysSealedAssemblyCode @@ -3962,7 +3976,7 @@ module EstablishTypeDefinitionCores = let containerInfo = TyconContainerInfo(innerParent, thisTyconRef, thisTyconRef.Typars m, NoSafeInitInfo) let kind = InferTyconKind g (kind, attrs, slotsigs, fields, inSig, isConcrete, m) match kind with - | TyconHiddenRepr -> + | SynTypeDefnKind.Opaque -> hiddenReprChecks true noAllowNullLiteralAttributeCheck() TNoRepr, None, NoSafeInitInfo @@ -3979,7 +3993,7 @@ module EstablishTypeDefinitionCores = let kind = match kind with - | TyconStruct -> + | SynTypeDefnKind.Struct -> noCLIMutableAttributeCheck() noSealedAttributeCheck FSComp.SR.tcTypesAreAlwaysSealedStruct noAbstractClassAttributeCheck() @@ -3989,7 +4003,7 @@ module EstablishTypeDefinitionCores = structLayoutAttributeCheck true TTyconStruct - | TyconInterface -> + | SynTypeDefnKind.Interface -> if hasSealedAttr = Some true then errorR (Error(FSComp.SR.tcInterfaceTypesCannotBeSealed(), m)) noCLIMutableAttributeCheck() structLayoutAttributeCheck false @@ -3997,12 +4011,12 @@ module EstablishTypeDefinitionCores = allowNullLiteralAttributeCheck() noFieldsCheck userFields TTyconInterface - | TyconClass -> + | SynTypeDefnKind.Class -> noCLIMutableAttributeCheck() structLayoutAttributeCheck(not isIncrClass) allowNullLiteralAttributeCheck() TTyconClass - | TyconDelegate (ty, arity) -> + | SynTypeDefnKind.Delegate (ty, arity) -> noCLIMutableAttributeCheck() noSealedAttributeCheck FSComp.SR.tcTypesAreAlwaysSealedDelegate structLayoutAttributeCheck false @@ -4039,7 +4053,7 @@ module EstablishTypeDefinitionCores = let abstractSlots = [ for (valSpfn, memberFlags) in slotsigs do - let (ValSpfn(_, _, _, _, _valSynData, _, _, _, _, _, m)) = valSpfn + let (SynValSig(_, _, _, _, _valSynData, _, _, _, _, _, m)) = valSpfn CheckMemberFlags None NewSlotsOK OverridesOK memberFlags m @@ -4306,7 +4320,8 @@ module EstablishTypeDefinitionCores = match origInfo, tyconOpt with | (typeDefCore, _, _), Some (tycon: Tycon) -> let (MutRecDefnsPhase1DataForTycon(synTyconInfo, _, _, _, _, _)) = typeDefCore - let (ComponentInfo(_, _, synTyconConstraints, _, _, _, _, _)) = synTyconInfo + let (SynComponentInfo(_, TyparsAndConstraints (_, cs1), cs2, _, _, _, _, _)) = synTyconInfo + let synTyconConstraints = cs1 @ cs2 let envForTycon = AddDeclaredTypars CheckForDuplicateTypars (tycon.Typars m) envForDecls let thisTyconRef = mkLocalTyconRef tycon let envForTycon = MakeInnerEnvForTyconRef envForTycon thisTyconRef false @@ -4550,7 +4565,7 @@ module TcDeclarations = declKind, tcref, typars - let private isAugmentationTyconDefnRepr = function (SynTypeDefnSimpleRepr.General(TyconAugmentation, _, _, _, _, _, _, _)) -> true | _ -> false + let private isAugmentationTyconDefnRepr = function (SynTypeDefnSimpleRepr.General(SynTypeDefnKind.Augmentation, _, _, _, _, _, _, _)) -> true | _ -> false let private isAutoProperty = function SynMemberDefn.AutoProperty _ -> true | _ -> false let private isMember = function SynMemberDefn.Member _ -> true | _ -> false let private isImplicitCtor = function SynMemberDefn.ImplicitCtor _ -> true | _ -> false @@ -4625,7 +4640,7 @@ module TcDeclarations = /// where simpleRepr can contain inherit type, declared fields and virtual slots. /// body = members /// where members contain methods/overrides, also implicit ctor, inheritCall and local definitions. - let rec private SplitTyconDefn (TypeDefn(synTyconInfo, trepr, extraMembers, _)) = + let rec private SplitTyconDefn (SynTypeDefn(synTyconInfo, trepr, extraMembers, _, _)) = let implements1 = List.choose (function SynMemberDefn.Interface (ty, _, _) -> Some(ty, ty.Range) | _ -> None) extraMembers match trepr with | SynTypeDefnRepr.ObjectModel(kind, cspec, m) -> @@ -4669,11 +4684,11 @@ module TcDeclarations = let retInfo = match tyOpt with None -> None | Some ty -> Some (SynReturnInfo((ty, SynInfo.unnamedRetVal), ty.Range)) let isMutable = match propKind with - | MemberKind.PropertySet - | MemberKind.PropertyGetSet -> true + | SynMemberKind.PropertySet + | SynMemberKind.PropertyGetSet -> true | _ -> false let attribs = mkAttributeList attribs mWholeAutoProp - let binding = mkSynBinding (xmlDoc, headPat) (None, false, isMutable, mLetPortion, NoDebugPointAtInvisibleBinding, retInfo, synExpr, synExpr.Range, [], attribs, None) + let binding = mkSynBinding (xmlDoc, headPat) (None, false, isMutable, mLetPortion, DebugPointAtBinding.NoneAtInvisible, retInfo, synExpr, synExpr.Range, [], attribs, None) [(SynMemberDefn.LetBindings ([binding], isStatic, false, mWholeAutoProp))] @@ -4696,32 +4711,32 @@ module TcDeclarations = let headPat = SynPat.LongIdent (LongIdentWithDots(headPatIds, []), None, Some noInferredTypars, SynArgPats.Pats [], None, mMemberPortion) match propKind, mGetSetOpt with - | MemberKind.PropertySet, Some m -> errorR(Error(FSComp.SR.parsMutableOnAutoPropertyShouldBeGetSetNotJustSet(), m)) + | SynMemberKind.PropertySet, Some m -> errorR(Error(FSComp.SR.parsMutableOnAutoPropertyShouldBeGetSetNotJustSet(), m)) | _ -> () [ match propKind with - | MemberKind.Member - | MemberKind.PropertyGet - | MemberKind.PropertyGetSet -> + | SynMemberKind.Member + | SynMemberKind.PropertyGet + | SynMemberKind.PropertyGetSet -> let getter = let rhsExpr = SynExpr.Ident fldId let retInfo = match tyOpt with None -> None | Some ty -> Some (SynReturnInfo((ty, SynInfo.unnamedRetVal), ty.Range)) let attribs = mkAttributeList attribs mMemberPortion - let binding = mkSynBinding (xmlDoc, headPat) (access, false, false, mMemberPortion, NoDebugPointAtInvisibleBinding, retInfo, rhsExpr, rhsExpr.Range, [], attribs, Some (memberFlags MemberKind.Member)) + let binding = mkSynBinding (xmlDoc, headPat) (access, false, false, mMemberPortion, DebugPointAtBinding.NoneAtInvisible, retInfo, rhsExpr, rhsExpr.Range, [], attribs, Some (memberFlags SynMemberKind.Member)) SynMemberDefn.Member (binding, mMemberPortion) yield getter | _ -> () match propKind with - | MemberKind.PropertySet - | MemberKind.PropertyGetSet -> + | SynMemberKind.PropertySet + | SynMemberKind.PropertyGetSet -> let setter = let vId = ident("v", mMemberPortion) let headPat = SynPat.LongIdent (LongIdentWithDots(headPatIds, []), None, Some noInferredTypars, SynArgPats.Pats [mkSynPatVar None vId], None, mMemberPortion) let rhsExpr = mkSynAssign (SynExpr.Ident fldId) (SynExpr.Ident vId) //let retInfo = match tyOpt with None -> None | Some ty -> Some (SynReturnInfo((ty, SynInfo.unnamedRetVal), ty.Range)) - let binding = mkSynBinding (xmlDoc, headPat) (access, false, false, mMemberPortion, NoDebugPointAtInvisibleBinding, None, rhsExpr, rhsExpr.Range, [], [], Some (memberFlags MemberKind.PropertySet)) + let binding = mkSynBinding (xmlDoc, headPat) (access, false, false, mMemberPortion, DebugPointAtBinding.NoneAtInvisible, None, rhsExpr, rhsExpr.Range, [], [], Some (memberFlags SynMemberKind.PropertySet)) SynMemberDefn.Member (binding, mMemberPortion) yield setter | _ -> ()] @@ -4741,7 +4756,7 @@ module TcDeclarations = let isConcrete = members |> List.exists (function - | SynMemberDefn.Member(Binding(_, _, _, _, _, _, SynValData(Some memberFlags, _, _), _, _, _, _, _), _) -> not memberFlags.IsDispatchSlot + | SynMemberDefn.Member(SynBinding(_, _, _, _, _, _, SynValData(Some memberFlags, _, _), _, _, _, _, _), _) -> not memberFlags.IsDispatchSlot | SynMemberDefn.Interface (_, defOpt, _) -> Option.isSome defOpt | SynMemberDefn.LetBindings _ -> true | SynMemberDefn.ImplicitCtor _ -> true @@ -4756,7 +4771,7 @@ module TcDeclarations = let hasSelfReferentialCtor = members |> List.exists (function | SynMemberDefn.ImplicitCtor (_, _, _, thisIdOpt, _, _) - | SynMemberDefn.Member(Binding(_, _, _, _, _, _, SynValData(_, _, thisIdOpt), _, _, _, _, _), _) -> thisIdOpt.IsSome + | SynMemberDefn.Member(SynBinding(_, _, _, _, _, _, SynValData(_, _, thisIdOpt), _, _, _, _, _), _) -> thisIdOpt.IsSome | _ -> false) let implicitCtorSynPats = @@ -4768,8 +4783,8 @@ module TcDeclarations = // members of the type let preEstablishedHasDefaultCtor = members |> List.exists (function - | SynMemberDefn.Member(Binding(_, _, _, _, _, _, SynValData(Some memberFlags, _, _), SynPatForConstructorDecl SynPatForNullaryArgs, _, _, _, _), _) -> - memberFlags.MemberKind=MemberKind.Constructor + | SynMemberDefn.Member(SynBinding(_, _, _, _, _, _, SynValData(Some memberFlags, _, _), SynPatForConstructorDecl SynPatForNullaryArgs, _, _, _, _), _) -> + memberFlags.MemberKind=SynMemberKind.Constructor | SynMemberDefn.ImplicitCtor (_, _, SynSimplePats.SimplePats(spats, _), _, _, _) -> isNil spats | _ -> false) let repr = SynTypeDefnSimpleRepr.General(kind, inherits, slotsigs, fields, isConcrete, isIncrClass, implicitCtorSynPats, m) @@ -4810,7 +4825,8 @@ module TcDeclarations = ||> MutRecShapes.mapTyconsWithEnv (fun envForDecls ((typeDefnCore, members, innerParent), tyconOpt, fixupFinalAttrs, (baseValOpt, safeInitInfo)) -> let (MutRecDefnsPhase1DataForTycon(synTyconInfo, _, _, _, _, isAtOriginalTyconDefn)) = typeDefnCore let tyDeclRange = synTyconInfo.Range - let (ComponentInfo(_, typars, cs, longPath, _, _, _, _)) = synTyconInfo + let (SynComponentInfo(_, TyparsAndConstraints (typars, cs1), cs2, longPath, _, _, _, _)) = synTyconInfo + let cs = cs1 @ cs2 let declKind, tcref, declaredTyconTypars = ComputeTyconDeclKind cenv envForDecls tyconOpt isAtOriginalTyconDefn false tyDeclRange typars cs longPath let newslotsOK = (if isAtOriginalTyconDefn && tcref.IsFSharpObjectModelTycon then NewSlotsOK else NoNewSlots) @@ -4820,7 +4836,7 @@ module TcDeclarations = if not (isNil members) && tcref.IsTypeAbbrev then errorR(Error(FSComp.SR.tcTypeAbbreviationsCannotHaveAugmentations(), tyDeclRange)) - let (ComponentInfo (attributes, _, _, _, _, _, _, _)) = synTyconInfo + let (SynComponentInfo (attributes, _, _, _, _, _, _, _)) = synTyconInfo if not (List.isEmpty attributes) && (declKind = ExtrinsicExtensionBinding || declKind = IntrinsicExtensionBinding) then let attributeRange = (List.head attributes).Range error(Error(FSComp.SR.tcAugmentationsCannotHaveAttributes(), attributeRange)) @@ -4870,7 +4886,7 @@ module TcDeclarations = //------------------------------------------------------------------------- /// Separates the signature declaration into core (shape) and body. - let rec private SplitTyconSignature (TypeDefnSig(synTyconInfo, trepr, extraMembers, _)) = + let rec private SplitTyconSignature (SynTypeDefnSig(synTyconInfo, trepr, extraMembers, _)) = let implements1 = extraMembers |> List.choose (function SynMemberSig.Interface (f, m) -> Some(f, m) | _ -> None) @@ -4889,7 +4905,7 @@ module TcDeclarations = | _ -> false) let isConcrete = members |> List.exists (function - | SynMemberSig.Member (_, memberFlags, _) -> memberFlags.MemberKind=MemberKind.Constructor + | SynMemberSig.Member (_, memberFlags, _) -> memberFlags.MemberKind=SynMemberKind.Constructor | _ -> false) // An ugly bit of code to pre-determine if a type has a nullary constructor, prior to establishing the @@ -4897,7 +4913,7 @@ module TcDeclarations = let preEstablishedHasDefaultCtor = members |> List.exists (function | SynMemberSig.Member (valSpfn, memberFlags, _) -> - memberFlags.MemberKind=MemberKind.Constructor && + memberFlags.MemberKind=SynMemberKind.Constructor && // REVIEW: This is a syntactic approximation (match valSpfn.SynType, valSpfn.SynInfo.CurriedArgInfos with | StripParenTypes (SynType.Fun (StripParenTypes (SynType.LongIdent (LongIdentWithDots([id], _))), _, _)), [[_]] when id.idText = "unit" -> true @@ -4936,7 +4952,8 @@ module TcDeclarations = (fun envForDecls ((tyconCore, (synTyconInfo, members), innerParent), tyconOpt, _fixupFinalAttrs, _) -> let tpenv = emptyUnscopedTyparEnv let (MutRecDefnsPhase1DataForTycon (_, _, _, _, _, isAtOriginalTyconDefn)) = tyconCore - let (ComponentInfo(_, typars, cs, longPath, _, _, _, m)) = synTyconInfo + let (SynComponentInfo(_, TyparsAndConstraints (typars, cs1), cs2, longPath, _, _, _, m)) = synTyconInfo + let cs = cs1 @ cs2 let declKind, tcref, declaredTyconTypars = ComputeTyconDeclKind cenv envForDecls tyconOpt isAtOriginalTyconDefn true m typars cs longPath let envForTycon = AddDeclaredTypars CheckForDuplicateTypars declaredTyconTypars envForDecls @@ -4948,7 +4965,7 @@ module TcDeclarations = (fun envForDecls (containerInfo, valSpec) -> let tpenv = emptyUnscopedTyparEnv let idvs, _ = TcAndPublishValSpec (cenv, envForDecls, containerInfo, ModuleOrMemberBinding, None, tpenv, valSpec) - let env = List.foldBack (AddLocalVal cenv.tcSink scopem) idvs envForDecls + let env = List.foldBack (AddLocalVal cenv.g cenv.tcSink scopem) idvs envForDecls env) @@ -4989,8 +5006,8 @@ module TcDeclarations = // Bind module types //------------------------------------------------------------------------- -let rec TcSignatureElementNonMutRec cenv parent typeNames endm (env: TcEnv) synSigDecl: Eventually = - eventually { +let rec TcSignatureElementNonMutRec cenv parent typeNames endm (env: TcEnv) synSigDecl: Cancellable = + cancellable { try match synSigDecl with | SynModuleSigDecl.Exception (edef, m) -> @@ -5012,15 +5029,15 @@ let rec TcSignatureElementNonMutRec cenv parent typeNames endm (env: TcEnv) synS | SynModuleSigDecl.Val (vspec, m) -> let parentModule = match parent with - | ParentNone -> error(NumberedError(FSComp.SR.tcNamespaceCannotContainValues(), vspec.RangeOfId)) + | ParentNone -> error(Error(FSComp.SR.tcNamespaceCannotContainValues(), vspec.RangeOfId)) | Parent p -> p let containerInfo = ModuleOrNamespaceContainerInfo parentModule let idvs, _ = TcAndPublishValSpec (cenv, env, containerInfo, ModuleOrMemberBinding, None, emptyUnscopedTyparEnv, vspec) let scopem = unionRanges m endm - let env = List.foldBack (AddLocalVal cenv.tcSink scopem) idvs env + let env = List.foldBack (AddLocalVal cenv.g cenv.tcSink scopem) idvs env return env - | SynModuleSigDecl.NestedModule(ComponentInfo(Attributes attribs, _parms, _constraints, longPath, xml, _, vis, im) as compInfo, isRec, mdefs, m) -> + | SynModuleSigDecl.NestedModule(SynComponentInfo(Attributes attribs, _, _, longPath, xml, _, vis, im) as compInfo, isRec, mdefs, m) -> if isRec then // Treat 'module rec M = ...' as a single mutually recursive definition group 'module M = ...' let modDecl = SynModuleSigDecl.NestedModule(compInfo, false, mdefs, m) @@ -5089,7 +5106,7 @@ let rec TcSignatureElementNonMutRec cenv parent typeNames endm (env: TcEnv) synS let enclosingNamespacePath, defs = if kind.IsModule then let nsp, modName = List.frontAndBack longId - let modDecl = [SynModuleSigDecl.NestedModule(ComponentInfo(attribs, [], [], [modName], xml, false, vis, m), false, defs, m)] + let modDecl = [SynModuleSigDecl.NestedModule(SynComponentInfo(attribs, None, [], [modName], xml, false, vis, m), false, defs, m)] nsp, modDecl else longId, defs @@ -5141,7 +5158,7 @@ let rec TcSignatureElementNonMutRec cenv parent typeNames endm (env: TcEnv) synS and TcSignatureElements cenv parent endm env xml mutRecNSInfo defs = - eventually { + cancellable { // Ensure the .Deref call in UpdateAccModuleOrNamespaceType succeeds if cenv.compilingCanonicalFslibModuleType then let doc = xml.ToXmlDoc(true, Some []) @@ -5156,10 +5173,10 @@ and TcSignatureElements cenv parent endm env xml mutRecNSInfo defs = } and TcSignatureElementsNonMutRec cenv parent typeNames endm env defs = - Eventually.fold (TcSignatureElementNonMutRec cenv parent typeNames endm) env defs + Cancellable.fold (TcSignatureElementNonMutRec cenv parent typeNames endm) env defs and TcSignatureElementsMutRec cenv parent typeNames m mutRecNSInfo envInitial (defs: SynModuleSigDecl list) = - eventually { + cancellable { let m = match defs with [] -> m | _ -> defs |> List.map (fun d -> d.Range) |> List.reduce unionRanges let scopem = (defs, m) ||> List.foldBack (fun h m -> unionRanges h.Range m) @@ -5177,13 +5194,13 @@ and TcSignatureElementsMutRec cenv parent typeNames m mutRecNSInfo envInitial (d decls, (openOk, moduleAbbrevOk) | SynModuleSigDecl.Exception (SynExceptionSig(exnRepr, members, _), _) -> - let ( SynExceptionDefnRepr(synAttrs, UnionCase(_, id, _args, _, _, _), _, doc, vis, m)) = exnRepr - let compInfo = ComponentInfo(synAttrs, [], [], [id], doc, false, vis, id.idRange) - let decls = [ MutRecShape.Tycon(SynTypeDefnSig.TypeDefnSig(compInfo, SynTypeDefnSigRepr.Exception exnRepr, members, m)) ] + let ( SynExceptionDefnRepr(synAttrs, SynUnionCase(_, id, _args, _, _, _), _, doc, vis, m)) = exnRepr + let compInfo = SynComponentInfo(synAttrs, None, [], [id], doc, false, vis, id.idRange) + let decls = [ MutRecShape.Tycon(SynTypeDefnSig.SynTypeDefnSig(compInfo, SynTypeDefnSigRepr.Exception exnRepr, members, m)) ] decls, (false, false) | SynModuleSigDecl.Val (vspec, _) -> - if isNamespace then error(NumberedError(FSComp.SR.tcNamespaceCannotContainValues(), vspec.RangeOfId)) + if isNamespace then error(Error(FSComp.SR.tcNamespaceCannotContainValues(), vspec.RangeOfId)) let decls = [ MutRecShape.Lets vspec ] decls, (false, false) @@ -5213,7 +5230,7 @@ and TcSignatureElementsMutRec cenv parent typeNames m mutRecNSInfo envInitial (d and TcModuleOrNamespaceSignatureElementsNonMutRec cenv parent env (id, modKind, defs, m: range, xml) = - eventually { + cancellable { let endm = m.EndRange // use end of range for errors // Create the module type that will hold the results of type checking.... @@ -5234,7 +5251,7 @@ and TcModuleOrNamespaceSignatureElementsNonMutRec cenv parent env (id, modKind, let ElimModuleDoBinding bind = match bind with | SynModuleDecl.DoExpr (spExpr, expr, m) -> - let bind2 = Binding (None, StandaloneExpression, false, false, [], PreXmlDoc.Empty, SynInfo.emptySynValData, SynPat.Wild m, None, expr, m, spExpr) + let bind2 = SynBinding (None, SynBindingKind.StandaloneExpression, false, false, [], PreXmlDoc.Empty, SynInfo.emptySynValData, SynPat.Wild m, None, expr, m, spExpr) SynModuleDecl.Let(false, [bind2], m) | _ -> bind @@ -5264,16 +5281,16 @@ let TcMutRecDefnsEscapeCheck (binds: MutRecShapes<_, _, _>) env = let CheckLetOrDoInNamespace binds m = match binds with - | [ Binding (None, (StandaloneExpression | DoBinding), false, false, [], _, _, _, None, (SynExpr.Do (SynExpr.Const (SynConst.Unit, _), _) | SynExpr.Const (SynConst.Unit, _)), _, _) ] -> + | [ SynBinding (None, (SynBindingKind.StandaloneExpression | SynBindingKind.Do), false, false, [], _, _, _, None, (SynExpr.Do (SynExpr.Const (SynConst.Unit, _), _) | SynExpr.Const (SynConst.Unit, _)), _, _) ] -> () | [] -> - error(NumberedError(FSComp.SR.tcNamespaceCannotContainValues(), m)) + error(Error(FSComp.SR.tcNamespaceCannotContainValues(), m)) | _ -> - error(NumberedError(FSComp.SR.tcNamespaceCannotContainValues(), binds.Head.RangeOfHeadPat)) + error(Error(FSComp.SR.tcNamespaceCannotContainValues(), binds.Head.RangeOfHeadPattern)) /// The non-mutually recursive case for a declaration let rec TcModuleOrNamespaceElementNonMutRec (cenv: cenv) parent typeNames scopem env synDecl = - eventually { + cancellable { cenv.synArgNameGenerator.Reset() let tpenv = emptyUnscopedTyparEnv @@ -5340,7 +5357,7 @@ let rec TcModuleOrNamespaceElementNonMutRec (cenv: cenv) parent typeNames scopem let modDecl = SynModuleDecl.NestedModule(compInfo, false, mdefs, isContinuingModule, m) return! TcModuleOrNamespaceElementsMutRec cenv parent typeNames m env None [modDecl] else - let (ComponentInfo(Attributes attribs, _parms, _constraints, longPath, xml, _, vis, im)) = compInfo + let (SynComponentInfo(Attributes attribs, _, _, longPath, xml, _, vis, im)) = compInfo let id = ComputeModuleName longPath let modAttrs = TcAttributes cenv env AttributeTargets.ModuleDecl attribs @@ -5401,7 +5418,7 @@ let rec TcModuleOrNamespaceElementNonMutRec (cenv: cenv) parent typeNames scopem let enclosingNamespacePath, defs = if kind.IsModule then let nsp, modName = List.frontAndBack longId - let modDecl = [SynModuleDecl.NestedModule(ComponentInfo(attribs, [], [], [modName], xml, false, vis, m), false, defs, true, m)] + let modDecl = [SynModuleDecl.NestedModule(SynComponentInfo(attribs, None, [], [modName], xml, false, vis, m), false, defs, true, m)] nsp, modDecl else longId, defs @@ -5454,7 +5471,7 @@ let rec TcModuleOrNamespaceElementNonMutRec (cenv: cenv) parent typeNames scopem /// The non-mutually recursive case for a sequence of declarations and TcModuleOrNamespaceElementsNonMutRec cenv parent typeNames endm (defsSoFar, env, envAtEnd) (moreDefs: SynModuleDecl list) = - eventually { + cancellable { match moreDefs with | (firstDef :: otherDefs) -> // Lookahead one to find out the scope of the next declaration. @@ -5474,7 +5491,7 @@ and TcModuleOrNamespaceElementsNonMutRec cenv parent typeNames endm (defsSoFar, /// The mutually recursive case for a sequence of declarations (and nested modules) and TcModuleOrNamespaceElementsMutRec (cenv: cenv) parent typeNames m envInitial mutRecNSInfo (defs: SynModuleDecl list) = - eventually { + cancellable { let m = match defs with [] -> m | _ -> defs |> List.map (fun d -> d.Range) |> List.reduce unionRanges let scopem = (defs, m) ||> List.foldBack (fun h m -> unionRanges h.Range m) @@ -5509,9 +5526,9 @@ and TcModuleOrNamespaceElementsMutRec (cenv: cenv) parent typeNames m envInitial decls, (openOk, moduleAbbrevOk, attrs) | SynModuleDecl.Exception (SynExceptionDefn(repr, members, _), _m) -> - let (SynExceptionDefnRepr(synAttrs, UnionCase(_, id, _args, _, _, _), _repr, doc, vis, m)) = repr - let compInfo = ComponentInfo(synAttrs, [], [], [id], doc, false, vis, id.idRange) - let decls = [ MutRecShape.Tycon(SynTypeDefn.TypeDefn(compInfo, SynTypeDefnRepr.Exception repr, members, m)) ] + let (SynExceptionDefnRepr(synAttrs, SynUnionCase(_, id, _args, _, _, _), _repr, doc, vis, m)) = repr + let compInfo = SynComponentInfo(synAttrs, None, [], [id], doc, false, vis, id.idRange) + let decls = [ MutRecShape.Tycon(SynTypeDefn(compInfo, SynTypeDefnRepr.Exception repr, members, None, m)) ] decls, (false, false, attrs) | SynModuleDecl.HashDirective _ -> @@ -5564,7 +5581,7 @@ and TcMutRecDefsFinish cenv defs m = TMDefRec(true, tycons, binds, m) and TcModuleOrNamespaceElements cenv parent endm env xml mutRecNSInfo defs = - eventually { + cancellable { // Ensure the deref_nlpath call in UpdateAccModuleOrNamespaceType succeeds if cenv.compilingCanonicalFslibModuleType then let doc = xml.ToXmlDoc(true, Some []) @@ -5697,14 +5714,14 @@ let ApplyDefaults (cenv: cenv) g denvAtEnd m mexpr extraAttribs = // the defaults will be propagated to the new type variable. ConstraintSolver.ApplyTyparDefaultAtPriority denvAtEnd cenv.css priority tp) - // OK, now apply defaults for any unsolved HeadTypeStaticReq + // OK, now apply defaults for any unsolved TyparStaticReq.HeadType unsolved |> List.iter (fun tp -> if not tp.IsSolved then - if (tp.StaticReq <> NoStaticReq) then + if (tp.StaticReq <> TyparStaticReq.None) then ConstraintSolver.ChooseTyparSolutionAndSolve cenv.css denvAtEnd tp) with e -> errorRecovery e m -let CheckValueRestriction denvAtEnd rootSigOpt implFileTypePriorToSig m = +let CheckValueRestriction denvAtEnd infoReader rootSigOpt implFileTypePriorToSig m = if Option.isNone rootSigOpt then let rec check (mty: ModuleOrNamespaceType) = for v in mty.AllValsAndMembers do @@ -5718,7 +5735,7 @@ let CheckValueRestriction denvAtEnd rootSigOpt implFileTypePriorToSig m = // for example FSharp 1.0 3661. (match v.ValReprInfo with None -> true | Some tvi -> tvi.HasNoArgs)) then match ftyvs with - | tp :: _ -> errorR (ValueRestriction(denvAtEnd, false, v, tp, v.Range)) + | tp :: _ -> errorR (ValueRestriction(denvAtEnd, infoReader, false, v, tp, v.Range)) | _ -> () mty.ModuleAndNamespaceDefinitions |> List.iter (fun v -> check v.ModuleOrNamespaceType) try check implFileTypePriorToSig with e -> errorRecovery e m @@ -5749,7 +5766,7 @@ let CheckModuleSignature g (cenv: cenv) m denvAtEnd rootSigOpt implFileTypePrior // As typechecked the signature and implementation use different tycons etc. // Here we (a) check there are enough names, (b) match them up to build a renaming and // (c) check signature conformance up to this renaming. - if not (SignatureConformance.CheckNamesOfModuleOrNamespace denv (mkLocalTyconRef implFileSpecPriorToSig) sigFileType) then + if not (SignatureConformance.CheckNamesOfModuleOrNamespace denv cenv.infoReader (mkLocalTyconRef implFileSpecPriorToSig) sigFileType) then raise (ReportedError None) // Compute the remapping from implementation to signature @@ -5757,7 +5774,7 @@ let CheckModuleSignature g (cenv: cenv) m denvAtEnd rootSigOpt implFileTypePrior let aenv = { TypeEquivEnv.Empty with EquivTycons = TyconRefMap.OfList remapInfo.RepackagedEntities } - if not (SignatureConformance.Checker(cenv.g, cenv.amap, denv, remapInfo, true).CheckSignature aenv (mkLocalModRef implFileSpecPriorToSig) sigFileType) then ( + if not (SignatureConformance.Checker(cenv.g, cenv.amap, denv, remapInfo, true).CheckSignature aenv cenv.infoReader (mkLocalModRef implFileSpecPriorToSig) sigFileType) then ( // We can just raise 'ReportedError' since CheckModuleOrNamespace raises its own error raise (ReportedError None) ) @@ -5782,7 +5799,9 @@ let TypeCheckOneImplFile (rootSigOpt: ModuleOrNamespaceType option) (ParsedImplFileInput (_, isScript, qualNameOfFile, scopedPragmas, _, implFileFrags, isLastCompiland)) = - eventually { + let infoReader = InfoReader(g, amap) + + cancellable { let cenv = cenv.Create (g, isScript, niceNameGen, amap, topCcu, false, Option.isSome rootSigOpt, conditionalDefines, tcSink, (LightweightTcValForUsingInBuildMethodCall g), isInternalTestSpanStackReferring, @@ -5793,7 +5812,7 @@ let TypeCheckOneImplFile let envinner, mtypeAcc = MakeInitialEnv env let defs = [ for x in implFileFrags -> SynModuleDecl.NamespaceFragment x ] - let! mexpr, topAttrs, envAtEnd = TcModuleOrNamespaceElements cenv ParentNone qualNameOfFile.Range envinner PreXmlDocEmpty None defs + let! mexpr, topAttrs, envAtEnd = TcModuleOrNamespaceElements cenv ParentNone qualNameOfFile.Range envinner PreXmlDoc.Empty None defs let implFileTypePriorToSig = !mtypeAcc @@ -5825,7 +5844,7 @@ let TypeCheckOneImplFile // Check the value restriction. Only checked if there is no signature. conditionallySuppressErrorReporting (checkForErrors()) (fun () -> - CheckValueRestriction denvAtEnd rootSigOpt implFileTypePriorToSig m) + CheckValueRestriction denvAtEnd infoReader rootSigOpt implFileTypePriorToSig m) // Solve unsolved internal type variables conditionallySuppressErrorReporting (checkForErrors()) (fun () -> @@ -5888,7 +5907,7 @@ let TypeCheckOneImplFile /// Check an entire signature file let TypeCheckOneSigFile (g, niceNameGen, amap, topCcu, checkForErrors, conditionalDefines, tcSink, isInternalTestSpanStackReferring) tcEnv (ParsedSigFileInput (_, qualNameOfFile, _, _, sigFileFrags)) = - eventually { + cancellable { let cenv = cenv.Create (g, false, niceNameGen, amap, topCcu, true, false, conditionalDefines, tcSink, @@ -5900,7 +5919,7 @@ let TypeCheckOneSigFile (g, niceNameGen, amap, topCcu, checkForErrors, condition let envinner, mtypeAcc = MakeInitialEnv tcEnv let specs = [ for x in sigFileFrags -> SynModuleSigDecl.NamespaceFragment x ] - let! tcEnv = TcSignatureElements cenv ParentNone qualNameOfFile.Range envinner PreXmlDocEmpty None specs + let! tcEnv = TcSignatureElements cenv ParentNone qualNameOfFile.Range envinner PreXmlDoc.Empty None specs let sigFileType = !mtypeAcc diff --git a/src/fsharp/CheckDeclarations.fsi b/src/fsharp/CheckDeclarations.fsi index bce9bed6422..ccfc873fd7f 100644 --- a/src/fsharp/CheckDeclarations.fsi +++ b/src/fsharp/CheckDeclarations.fsi @@ -3,18 +3,20 @@ module internal FSharp.Compiler.CheckDeclarations open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Library open FSharp.Compiler.CheckExpressions open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.NameResolution -open FSharp.Compiler.Range open FSharp.Compiler.Import -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text open FSharp.Compiler.TypedTree val AddLocalRootModuleOrNamespace : NameResolution.TcResultsSink -> TcGlobals -> ImportMap -> range -> TcEnv -> ModuleOrNamespaceType -> TcEnv + val CreateInitialTcEnv : TcGlobals * ImportMap * range * assemblyName: string * (CcuThunk * string list * string list) list -> TcEnv + val AddCcuToTcEnv: TcGlobals * ImportMap * range * TcEnv * assemblyName: string * ccu: CcuThunk * autoOpens: string list * internalsVisibleToAttributes: string list -> TcEnv type TopAttribs = @@ -25,6 +27,7 @@ type TopAttribs = type ConditionalDefines = string list val EmptyTopAttrs : TopAttribs + val CombineTopAttrs : TopAttribs -> TopAttribs -> TopAttribs val TcOpenModuleOrNamespaceDecl: TcResultsSink -> TcGlobals -> ImportMap -> range -> TcEnv -> (LongIdent * range) -> TcEnv @@ -36,13 +39,14 @@ val TypeCheckOneImplFile : -> TcEnv -> ModuleOrNamespaceType option -> ParsedImplFileInput - -> Eventually + -> Cancellable val TypeCheckOneSigFile : TcGlobals * NiceNameGenerator * ImportMap * CcuThunk * (unit -> bool) * ConditionalDefines option * NameResolution.TcResultsSink * bool -> TcEnv -> ParsedSigFileInput - -> Eventually + -> Cancellable exception ParameterlessStructCtor of range + exception NotUpperCaseConstructor of range diff --git a/src/fsharp/CheckExpressions.fs b/src/fsharp/CheckExpressions.fs index 5de2ff1d4b9..390f4409574 100644 --- a/src/fsharp/CheckExpressions.fs +++ b/src/fsharp/CheckExpressions.fs @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -/// The typechecker. Left-to-right constrained type checking +/// The typechecker. Left-to-right constrained type checking /// with generalization at appropriate points. module internal FSharp.Compiler.CheckExpressions @@ -8,12 +8,14 @@ open System open System.Collections.Generic open Internal.Utilities - -open FSharp.Compiler -open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Internal.Library.ResultOrException +open Internal.Utilities.Collections +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras +open Internal.Utilities.Library.ResultOrException +open Internal.Utilities.Rational +open FSharp.Compiler +open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.AttributeChecking open FSharp.Compiler.CompilerGlobalState @@ -22,22 +24,22 @@ open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features open FSharp.Compiler.Infos open FSharp.Compiler.InfoReader -open FSharp.Compiler.Lib open FSharp.Compiler.MethodCalls open FSharp.Compiler.MethodOverrides open FSharp.Compiler.NameResolution open FSharp.Compiler.PatternMatchCompilation -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Range -open FSharp.Compiler.Rational -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming open FSharp.Compiler.SyntaxTreeOps open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Position +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TypeRelations -open FSharp.Compiler.XmlDoc #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping @@ -45,14 +47,15 @@ open FSharp.Compiler.ExtensionTyping //------------------------------------------------------------------------- // Helpers that should be elsewhere -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- let mkNilListPat (g: TcGlobals) m ty = TPat_unioncase(g.nil_ucref, [ty], [], m) + let mkConsListPat (g: TcGlobals) ty ph pt = TPat_unioncase(g.cons_ucref, [ty], [ph;pt], unionRanges ph.Range pt.Range) //------------------------------------------------------------------------- // Errors. -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- exception BakedInMemberConstraintName of string * range exception FunctionExpected of DisplayEnv * TType * range @@ -76,7 +79,7 @@ exception UnitTypeExpectedWithPossibleAssignment of DisplayEnv * TType * bool * exception UnitTypeExpectedWithPossiblePropertySetter of DisplayEnv * TType * string * string * range exception UnionPatternsBindDifferentNames of range exception VarBoundTwice of Ident -exception ValueRestriction of DisplayEnv * bool * Val * Typar * range +exception ValueRestriction of DisplayEnv * InfoReader * bool * Val * Typar * range exception ValNotMutable of DisplayEnv * ValRef * range exception ValNotLocal of DisplayEnv * ValRef * range exception InvalidRuntimeCoercion of DisplayEnv * TType * TType * range @@ -102,39 +105,39 @@ exception InvalidInternalsVisibleToAssemblyName of (*badName*)string * (*fileNam /// Represents information about the initialization field used to check that object constructors /// have completed before fields are accessed. -type SafeInitData = +type SafeInitData = | SafeInitField of RecdFieldRef * RecdField - | NoSafeInitInfo - + | NoSafeInitInfo + /// Represents information about object constructors -type CtorInfo = +type CtorInfo = { /// Object model constructors have a very specific form to satisfy .NET limitations. - /// For "new = \arg. { new C with ... }" - /// ctor = 3 indicates about to type check "\arg. (body)", - /// ctor = 2 indicates about to type check "body" - /// ctor = 1 indicates actually type checking the body expression - /// 0 indicates everywhere else, including auxiliary expressions such e1 in "let x = e1 in { new ... }" - /// REVIEW: clean up this rather odd approach ... + /// For "new = \arg. { new C with ... }" + /// ctor = 3 indicates about to type check "\arg. (body)", + /// ctor = 2 indicates about to type check "body" + /// ctor = 1 indicates actually type checking the body expression + /// 0 indicates everywhere else, including auxiliary expressions such e1 in "let x = e1 in { new ... }" + /// REVIEW: clean up this rather odd approach ... ctorShapeCounter: int /// A handle to the ref cell to hold results of 'this' for 'type X() as x = ...' and 'new() as x = ...' constructs /// in case 'x' is used in the arguments to the 'inherits' call. - safeThisValOpt: Val option + safeThisValOpt: Val option - /// A handle to the boolean ref cell to hold success of initialized 'this' for 'type X() as x = ...' constructs - safeInitInfo: SafeInitData + /// A handle to the boolean ref cell to hold success of initialized 'this' for 'type X() as x = ...' constructs + safeInitInfo: SafeInitData /// Is the an implicit constructor or an explicit one? - ctorIsImplicit: bool + ctorIsImplicit: bool } - + /// Represents an item in the environment that may restrict the automatic generalization of later /// declarations because it refers to type inference variables. As type inference progresses /// these type inference variables may get solved. [] -type UngeneralizableItem(computeFreeTyvars: (unit -> FreeTyvars)) = +type UngeneralizableItem(computeFreeTyvars: (unit -> FreeTyvars)) = - // Flag is for: have we determined that this item definitely has + // Flag is for: have we determined that this item definitely has // no free type inference variables? This implies that // (a) it will _never_ have any free type inference variables as further constraints are added to the system. // (b) its set of FreeTycons will not change as further constraints are added to the system @@ -146,73 +149,73 @@ type UngeneralizableItem(computeFreeTyvars: (unit -> FreeTyvars)) = // If WillNeverHaveFreeTypars then we can cache the computation of FreeTraitSolutions, since they are invariant. let mutable cachedFreeTraitSolutions = emptyFreeLocals - member item.GetFreeTyvars() = + member item.GetFreeTyvars() = let fvs = computeFreeTyvars() - if fvs.FreeTypars.IsEmpty then - willNeverHaveFreeTypars <- true + if fvs.FreeTypars.IsEmpty then + willNeverHaveFreeTypars <- true cachedFreeLocalTycons <- fvs.FreeTycons cachedFreeTraitSolutions <- fvs.FreeTraitSolutions fvs member item.WillNeverHaveFreeTypars = willNeverHaveFreeTypars - member item.CachedFreeLocalTycons = cachedFreeLocalTycons + member item.CachedFreeLocalTycons = cachedFreeLocalTycons member item.CachedFreeTraitSolutions = cachedFreeTraitSolutions - + /// Represents the type environment at a particular scope. Includes the name /// resolution environment, the ungeneralizable items from earlier in the scope /// and other information about the scope. [] type TcEnv = - { /// Name resolution information - eNameResEnv: NameResolutionEnv + { /// Name resolution information + eNameResEnv: NameResolutionEnv - /// The list of items in the environment that may contain free inference - /// variables (which may not be generalized). The relevant types may - /// change as a result of inference equations being asserted, hence may need to - /// be recomputed. + /// The list of items in the environment that may contain free inference + /// variables (which may not be generalized). The relevant types may + /// change as a result of inference equations being asserted, hence may need to + /// be recomputed. eUngeneralizableItems: UngeneralizableItem list - - // Two (!) versions of the current module path - // These are used to: - // - Look up the appropriate point in the corresponding signature - // see if an item is public or not - // - Change fslib canonical module type to allow compiler references to these items - // - Record the cpath for concrete modul_specs, tycon_specs and excon_specs so they can cache their generated IL representation where necessary - // - Record the pubpath of public, concrete {val, tycon, modul, excon}_specs. - // This information is used mainly when building non-local references - // to public items. - // - // Of the two, 'ePath' is the one that's barely used. It's only + + // Two (!) versions of the current module path + // These are used to: + // - Look up the appropriate point in the corresponding signature + // see if an item is public or not + // - Change fslib canonical module type to allow compiler references to these items + // - Record the cpath for concrete modul_specs, tycon_specs and excon_specs so they can cache their generated IL representation where necessary + // - Record the pubpath of public, concrete {val, tycon, modul, excon}_specs. + // This information is used mainly when building non-local references + // to public items. + // + // Of the two, 'ePath' is the one that's barely used. It's only // used by UpdateAccModuleOrNamespaceType to modify the CCU while compiling FSharp.Core - ePath: Ident list + ePath: Ident list - eCompPath: CompilationPath + eCompPath: CompilationPath - eAccessPath: CompilationPath + eAccessPath: CompilationPath /// This field is computed from other fields, but we amortize the cost of computing it. - eAccessRights: AccessorDomain + eAccessRights: AccessorDomain /// Internals under these should be accessible - eInternalsVisibleCompPaths: CompilationPath list + eInternalsVisibleCompPaths: CompilationPath list - /// Mutable accumulator for the current module type + /// Mutable accumulator for the current module type eModuleOrNamespaceTypeAccumulator: ModuleOrNamespaceType ref /// Context information for type checker - eContextInfo: ContextInfo + eContextInfo: ContextInfo - /// Here Some tcref indicates we can access protected members in all super types - eFamilyType: TyconRef option + /// Here Some tcref indicates we can access protected members in all super types + eFamilyType: TyconRef option - // Information to enforce special restrictions on valid expressions - // for .NET constructors. + // Information to enforce special restrictions on valid expressions + // for .NET constructors. eCtorInfo: CtorInfo option eCallerMemberName: string option - } + } member tenv.DisplayEnv = tenv.eNameResEnv.DisplayEnv @@ -223,38 +226,38 @@ type TcEnv = override tenv.ToString() = "TcEnv(...)" /// Compute the available access rights from a particular location in code -let ComputeAccessRights eAccessPath eInternalsVisibleCompPaths eFamilyType = +let ComputeAccessRights eAccessPath eInternalsVisibleCompPaths eFamilyType = AccessibleFrom (eAccessPath :: eInternalsVisibleCompPaths, eFamilyType) //------------------------------------------------------------------------- // Helpers related to determining if we're in a constructor and/or a class // that may be able to access "protected" members. -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- let InitialExplicitCtorInfo (safeThisValOpt, safeInitInfo) = - { ctorShapeCounter = 3 + { ctorShapeCounter = 3 safeThisValOpt = safeThisValOpt safeInitInfo = safeInitInfo - ctorIsImplicit = false} + ctorIsImplicit = false} let InitialImplicitCtorInfo () = - { ctorShapeCounter = 0 - safeThisValOpt = None + { ctorShapeCounter = 0 + safeThisValOpt = None safeInitInfo = NoSafeInitInfo ctorIsImplicit = true } - -let EnterFamilyRegion tcref env = + +let EnterFamilyRegion tcref env = let eFamilyType = Some tcref - { env with + { env with eAccessRights = ComputeAccessRights env.eAccessPath env.eInternalsVisibleCompPaths eFamilyType // update this computed field eFamilyType = eFamilyType } -let ExitFamilyRegion env = +let ExitFamilyRegion env = let eFamilyType = None - match env.eFamilyType with - | None -> env // optimization to avoid reallocation - | _ -> - { env with + match env.eFamilyType with + | None -> env // optimization to avoid reallocation + | _ -> + { env with eAccessRights = ComputeAccessRights env.eAccessPath env.eInternalsVisibleCompPaths eFamilyType // update this computed field eFamilyType = eFamilyType } @@ -267,60 +270,60 @@ let AdjustCtorShapeCounter f env = {env with eCtorInfo = Option.map (fun ctorInf let ExitCtorShapeRegion env = AdjustCtorShapeCounter (fun _ -> 0) env /// Add a type to the TcEnv, i.e. register it as ungeneralizable. -let addFreeItemOfTy ty eUngeneralizableItems = +let addFreeItemOfTy ty eUngeneralizableItems = let fvs = freeInType CollectAllNoCaching ty - if isEmptyFreeTyvars fvs then eUngeneralizableItems + if isEmptyFreeTyvars fvs then eUngeneralizableItems else UngeneralizableItem(fun () -> freeInType CollectAllNoCaching ty) :: eUngeneralizableItems /// Add the contents of a module type to the TcEnv, i.e. register the contents as ungeneralizable. /// Add a module type to the TcEnv, i.e. register it as ungeneralizable. -let addFreeItemOfModuleTy mtyp eUngeneralizableItems = +let addFreeItemOfModuleTy mtyp eUngeneralizableItems = let fvs = freeInModuleTy mtyp - if isEmptyFreeTyvars fvs then eUngeneralizableItems + if isEmptyFreeTyvars fvs then eUngeneralizableItems else UngeneralizableItem(fun () -> freeInModuleTy mtyp) :: eUngeneralizableItems /// Add a table of values to the name resolution environment. -let AddValMapToNameEnv vs nenv = - NameMap.foldBackRange (fun v nenv -> AddValRefToNameEnv nenv (mkLocalValRef v)) vs nenv +let AddValMapToNameEnv g vs nenv = + NameMap.foldBackRange (fun v nenv -> AddValRefToNameEnv g nenv (mkLocalValRef v)) vs nenv /// Add a list of values to the name resolution environment. -let AddValListToNameEnv vs nenv = - List.foldBack (fun v nenv -> AddValRefToNameEnv nenv (mkLocalValRef v)) vs nenv - -/// Add a local value to TcEnv -let AddLocalValPrimitive (v: Val) env = +let AddValListToNameEnv g vs nenv = + List.foldBack (fun v nenv -> AddValRefToNameEnv g nenv (mkLocalValRef v)) vs nenv + +/// Add a local value to TcEnv +let AddLocalValPrimitive g (v: Val) env = { env with - eNameResEnv = AddValRefToNameEnv env.eNameResEnv (mkLocalValRef v) - eUngeneralizableItems = addFreeItemOfTy v.Type env.eUngeneralizableItems } + eNameResEnv = AddValRefToNameEnv g env.eNameResEnv (mkLocalValRef v) + eUngeneralizableItems = addFreeItemOfTy v.Type env.eUngeneralizableItems } -/// Add a table of local values to TcEnv -let AddLocalValMap tcSink scopem (vals: Val NameMap) env = - let env = - if vals.IsEmpty then +/// Add a table of local values to TcEnv +let AddLocalValMap g tcSink scopem (vals: Val NameMap) env = + let env = + if vals.IsEmpty then env else { env with - eNameResEnv = AddValMapToNameEnv vals env.eNameResEnv + eNameResEnv = AddValMapToNameEnv g vals env.eNameResEnv eUngeneralizableItems = NameMap.foldBackRange (typeOfVal >> addFreeItemOfTy) vals env.eUngeneralizableItems } CallEnvSink tcSink (scopem, env.NameEnv, env.AccessRights) env /// Add a list of local values to TcEnv and report them to the sink -let AddLocalVals tcSink scopem (vals: Val list) env = - let env = - if isNil vals then +let AddLocalVals g tcSink scopem (vals: Val list) env = + let env = + if isNil vals then env else { env with - eNameResEnv = AddValListToNameEnv vals env.eNameResEnv + eNameResEnv = AddValListToNameEnv g vals env.eNameResEnv eUngeneralizableItems = List.foldBack (typeOfVal >> addFreeItemOfTy) vals env.eUngeneralizableItems } CallEnvSink tcSink (scopem, env.NameEnv, env.AccessRights) env /// Add a local value to TcEnv and report it to the sink -let AddLocalVal tcSink scopem v env = +let AddLocalVal g tcSink scopem v env = let env = { env with - eNameResEnv = AddValRefToNameEnv env.eNameResEnv (mkLocalValRef v) + eNameResEnv = AddValRefToNameEnv g env.eNameResEnv (mkLocalValRef v) eUngeneralizableItems = addFreeItemOfTy v.Type env.eUngeneralizableItems } CallEnvSink tcSink (scopem, env.NameEnv, env.eAccessRights) env @@ -341,44 +344,44 @@ let AddUnscopedTypar n p (UnscopedTyparEnv tab) = UnscopedTyparEnv (Map.add n p let TryFindUnscopedTypar n (UnscopedTyparEnv tab) = Map.tryFind n tab -let HideUnscopedTypars typars (UnscopedTyparEnv tab) = +let HideUnscopedTypars typars (UnscopedTyparEnv tab) = UnscopedTyparEnv (List.fold (fun acc (tp: Typar) -> Map.remove tp.Name acc) tab typars) -/// Represents the compilation environment for typechecking a single file in an assembly. +/// Represents the compilation environment for typechecking a single file in an assembly. [] -type TcFileState = +type TcFileState = { g: TcGlobals - /// Push an entry every time a recursive value binding is used, - /// in order to be able to fix up recursive type applications as - /// we infer type parameters + /// Push an entry every time a recursive value binding is used, + /// in order to be able to fix up recursive type applications as + /// we infer type parameters mutable recUses: ValMultiMap<(Expr ref * range * bool)> - - /// Checks to run after all inference is complete. + + /// Checks to run after all inference is complete. mutable postInferenceChecks: ResizeArray unit> /// Set to true if this file causes the creation of generated provided types. mutable createsGeneratedProvidedTypes: bool /// Are we in a script? if so relax the reporting of discarded-expression warnings at the top level - isScript: bool + isScript: bool - /// Environment needed to convert IL types to F# types in the importer. - amap: Import.ImportMap + /// Environment needed to convert IL types to F# types in the importer. + amap: Import.ImportMap /// Used to generate new syntactic argument names in post-parse syntactic processing synArgNameGenerator: SynArgNameGenerator tcSink: TcResultsSink - /// Holds a reference to the component being compiled. - /// This field is very rarely used (mainly when fixing up forward references to fslib. - topCcu: CcuThunk - - /// Holds the current inference constraints + /// Holds a reference to the component being compiled. + /// This field is very rarely used (mainly when fixing up forward references to fslib. + topCcu: CcuThunk + + /// Holds the current inference constraints css: ConstraintSolverState - - /// Are we compiling the signature of a module from fslib? + + /// Are we compiling the signature of a module from fslib? compilingCanonicalFslibModuleType: bool /// Is this a .fsi file? @@ -386,7 +389,7 @@ type TcFileState = /// Does this .fs file have a .fsi file? haveSig: bool - + /// Used to generate names niceNameGen: NiceNameGenerator @@ -395,21 +398,21 @@ type TcFileState = /// Used to resolve names nameResolver: NameResolver - + /// The set of active conditional defines. The value is None when conditional erasure is disabled in tooling. conditionalDefines: string list option - + isInternalTestSpanStackReferring: bool - // forward call + // forward call TcSequenceExpressionEntry: TcFileState -> TcEnv -> TType -> UnscopedTyparEnv -> bool * bool ref * SynExpr -> range -> Expr * UnscopedTyparEnv - // forward call + // forward call TcArrayOrListSequenceExpression: TcFileState -> TcEnv -> TType -> UnscopedTyparEnv -> bool * SynExpr -> range -> Expr * UnscopedTyparEnv - // forward call + // forward call TcComputationExpression: TcFileState -> TcEnv -> TType -> UnscopedTyparEnv -> range * Expr * TType * SynExpr -> Expr * UnscopedTyparEnv - } + } /// Create a new compilation environment - static member Create + static member Create (g, isScript, niceNameGen, amap, topCcu, isSig, haveSig, conditionalDefines, tcSink, tcVal, isInternalTestSpanStackReferring, tcSequenceExpressionEntry, tcArrayOrListSequenceExpression, tcComputationExpression) = let infoReader = new InfoReader(g, amap) @@ -438,22 +441,22 @@ type TcFileState = TcComputationExpression = tcComputationExpression } - override __.ToString() = "" + override _.ToString() = "" type cenv = TcFileState -let CopyAndFixupTypars m rigid tpsorig = +let CopyAndFixupTypars m rigid tpsorig = ConstraintSolver.FreshenAndFixupTypars m rigid [] [] tpsorig -let UnifyTypes cenv (env: TcEnv) m actualTy expectedTy = +let UnifyTypes cenv (env: TcEnv) m actualTy expectedTy = ConstraintSolver.AddCxTypeEqualsType env.eContextInfo env.DisplayEnv cenv.css m (tryNormalizeMeasureInType cenv.g actualTy) (tryNormalizeMeasureInType cenv.g expectedTy) /// Make an environment suitable for a module or namespace. Does not create a new accumulator but uses one we already have/ -let MakeInnerEnvWithAcc addOpenToNameEnv env nm mtypeAcc modKind = +let MakeInnerEnvWithAcc addOpenToNameEnv env nm mtypeAcc modKind = let path = env.ePath @ [nm] let cpath = env.eCompPath.NestedCompPath nm.idText modKind - { env with - ePath = path + { env with + ePath = path eCompPath = cpath eAccessPath = cpath eAccessRights = ComputeAccessRights cpath env.eInternalsVisibleCompPaths env.eFamilyType // update this computed field @@ -465,33 +468,33 @@ let MakeInnerEnvWithAcc addOpenToNameEnv env nm mtypeAcc modKind = eModuleOrNamespaceTypeAccumulator = mtypeAcc } /// Make an environment suitable for a module or namespace, creating a new accumulator. -let MakeInnerEnv addOpenToNameEnv env nm modKind = - // Note: here we allocate a new module type accumulator +let MakeInnerEnv addOpenToNameEnv env nm modKind = + // Note: here we allocate a new module type accumulator let mtypeAcc = ref (Construct.NewEmptyModuleOrNamespaceType modKind) MakeInnerEnvWithAcc addOpenToNameEnv env nm mtypeAcc modKind, mtypeAcc /// Make an environment suitable for processing inside a type definition -let MakeInnerEnvForTyconRef env tcref isExtrinsicExtension = - if isExtrinsicExtension then - // Extension members don't get access to protected stuff - env +let MakeInnerEnvForTyconRef env tcref isExtrinsicExtension = + if isExtrinsicExtension then + // Extension members don't get access to protected stuff + env else - // Regular members get access to protected stuff + // Regular members get access to protected stuff let env = EnterFamilyRegion tcref env - // Note: assumes no nesting + // Note: assumes no nesting let eAccessPath = env.eCompPath.NestedCompPath tcref.LogicalName ModuleOrType - { env with + { env with eAccessRights = ComputeAccessRights eAccessPath env.eInternalsVisibleCompPaths env.eFamilyType // update this computed field eAccessPath = eAccessPath } /// Make an environment suitable for processing inside a member definition -let MakeInnerEnvForMember env (v: Val) = - match v.MemberInfo with +let MakeInnerEnvForMember env (v: Val) = + match v.MemberInfo with | None -> env - | Some _ -> MakeInnerEnvForTyconRef env v.MemberApparentEntity v.IsExtensionMember + | Some _ -> MakeInnerEnvForTyconRef env v.MemberApparentEntity v.IsExtensionMember /// Get the current accumulator for the namespace/module we're in -let GetCurrAccumulatedModuleOrNamespaceType env = !(env.eModuleOrNamespaceTypeAccumulator) +let GetCurrAccumulatedModuleOrNamespaceType env = !(env.eModuleOrNamespaceTypeAccumulator) /// Set the current accumulator for the namespace/module we're in, updating the inferred contents let SetCurrAccumulatedModuleOrNamespaceType env x = env.eModuleOrNamespaceTypeAccumulator := x @@ -499,11 +502,11 @@ let SetCurrAccumulatedModuleOrNamespaceType env x = env.eModuleOrNamespaceTypeAc /// Set up the initial environment accounting for the enclosing "namespace X.Y.Z" definition let LocateEnv ccu env enclosingNamespacePath = let cpath = compPathOfCcu ccu - let env = - {env with + let env = + {env with ePath = [] - eCompPath = cpath - eAccessPath = cpath + eCompPath = cpath + eAccessPath = cpath // update this computed field eAccessRights = ComputeAccessRights cpath env.eInternalsVisibleCompPaths env.eFamilyType } let env = List.fold (fun env id -> MakeInnerEnv false env id Namespace |> fst) env enclosingNamespacePath @@ -513,7 +516,7 @@ let LocateEnv ccu env enclosingNamespacePath = //------------------------------------------------------------------------- // Helpers for unification -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- /// When the context is matching the oldRange then this function shrinks it to newRange. /// This can be used to change context over no-op expressions like parens. @@ -525,35 +528,35 @@ let ShrinkContext env oldRange newRange = | ContextInfo.ReturnInComputationExpression | ContextInfo.YieldInComputationExpression | ContextInfo.RuntimeTypeTest _ - | ContextInfo.DowncastUsedInsteadOfUpcast _ + | ContextInfo.DowncastUsedInsteadOfUpcast _ | ContextInfo.SequenceExpression _ -> env | ContextInfo.CollectionElement (b,m) -> if not (Range.equals m oldRange) then env else { env with eContextInfo = ContextInfo.CollectionElement(b,newRange) } - | ContextInfo.FollowingPatternMatchClause m -> + | ContextInfo.FollowingPatternMatchClause m -> if not (Range.equals m oldRange) then env else { env with eContextInfo = ContextInfo.FollowingPatternMatchClause newRange } - | ContextInfo.PatternMatchGuard m -> + | ContextInfo.PatternMatchGuard m -> if not (Range.equals m oldRange) then env else { env with eContextInfo = ContextInfo.PatternMatchGuard newRange } - | ContextInfo.IfExpression m -> + | ContextInfo.IfExpression m -> if not (Range.equals m oldRange) then env else { env with eContextInfo = ContextInfo.IfExpression newRange } - | ContextInfo.OmittedElseBranch m -> + | ContextInfo.OmittedElseBranch m -> if not (Range.equals m oldRange) then env else { env with eContextInfo = ContextInfo.OmittedElseBranch newRange } - | ContextInfo.ElseBranchResult m -> + | ContextInfo.ElseBranchResult m -> if not (Range.equals m oldRange) then env else { env with eContextInfo = ContextInfo.ElseBranchResult newRange } -/// Optimized unification routine that avoids creating new inference +/// Optimized unification routine that avoids creating new inference /// variables unnecessarily -let UnifyRefTupleType contextInfo cenv denv m ty ps = - let ptys = - if isRefTupleTy cenv.g ty then +let UnifyRefTupleType contextInfo cenv denv m ty ps = + let ptys = + if isRefTupleTy cenv.g ty then let ptys = destRefTupleTy cenv.g ty - if List.length ps = List.length ptys then ptys + if List.length ps = List.length ptys then ptys else NewInferenceTypes ps else NewInferenceTypes ps @@ -567,13 +570,13 @@ let UnifyRefTupleType contextInfo cenv denv m ty ps = /// Allow the inference of structness from the known type, e.g. /// let (x: struct (int * int)) = (3,4) -let UnifyTupleTypeAndInferCharacteristics contextInfo cenv denv m knownTy isExplicitStruct ps = - let tupInfo, ptys = - if isAnyTupleTy cenv.g knownTy then - let tupInfo, ptys = destAnyTupleTy cenv.g knownTy +let UnifyTupleTypeAndInferCharacteristics contextInfo cenv denv m knownTy isExplicitStruct ps = + let tupInfo, ptys = + if isAnyTupleTy cenv.g knownTy then + let tupInfo, ptys = destAnyTupleTy cenv.g knownTy let tupInfo = (if isExplicitStruct then tupInfoStruct else tupInfo) - let ptys = - if List.length ps = List.length ptys then ptys + let ptys = + if List.length ps = List.length ptys then ptys else NewInferenceTypes ps tupInfo, ptys else @@ -590,20 +593,20 @@ let UnifyTupleTypeAndInferCharacteristics contextInfo cenv denv m knownTy isExpl // Allow inference of assembly-affinity and structness from the known type - even from another assembly. This is a rule of // the language design and allows effective cross-assembly use of anonymous types in some limited circumstances. -let UnifyAnonRecdTypeAndInferCharacteristics contextInfo cenv denv m ty isExplicitStruct unsortedNames = - let anonInfo, ptys = - match tryDestAnonRecdTy cenv.g ty with - | ValueSome (anonInfo, ptys) -> +let UnifyAnonRecdTypeAndInferCharacteristics contextInfo cenv denv m ty isExplicitStruct unsortedNames = + let anonInfo, ptys = + match tryDestAnonRecdTy cenv.g ty with + | ValueSome (anonInfo, ptys) -> // Note: use the assembly of the known type, not the current assembly // Note: use the structness of the known type, unless explicit // Note: use the names of our type, since they are always explicit let tupInfo = (if isExplicitStruct then tupInfoStruct else anonInfo.TupInfo) let anonInfo = AnonRecdTypeInfo.Create(anonInfo.Assembly, tupInfo, unsortedNames) - let ptys = + let ptys = if List.length ptys = Array.length unsortedNames then ptys else NewInferenceTypes (Array.toList anonInfo.SortedNames) anonInfo, ptys - | ValueNone -> + | ValueNone -> // Note: no known anonymous record type - use our assembly let anonInfo = AnonRecdTypeInfo.Create(cenv.topCcu, mkTupInfo isExplicitStruct, unsortedNames) anonInfo, NewInferenceTypes (Array.toList anonInfo.SortedNames) @@ -612,34 +615,34 @@ let UnifyAnonRecdTypeAndInferCharacteristics contextInfo cenv denv m ty isExplic anonInfo, ptys -/// Optimized unification routine that avoids creating new inference +/// Optimized unification routine that avoids creating new inference /// variables unnecessarily let UnifyFunctionTypeUndoIfFailed cenv denv m ty = match tryDestFunTy cenv.g ty with | ValueNone -> let domainTy = NewInferenceType () let resultTy = NewInferenceType () - if AddCxTypeEqualsTypeUndoIfFailed denv cenv.css m ty (domainTy --> resultTy) then + if AddCxTypeEqualsTypeUndoIfFailed denv cenv.css m ty (domainTy --> resultTy) then ValueSome(domainTy, resultTy) - else + else ValueNone | r -> r -/// Optimized unification routine that avoids creating new inference +/// Optimized unification routine that avoids creating new inference /// variables unnecessarily let UnifyFunctionType extraInfo cenv denv mFunExpr ty = match UnifyFunctionTypeUndoIfFailed cenv denv mFunExpr ty with | ValueSome res -> res - | ValueNone -> - match extraInfo with + | ValueNone -> + match extraInfo with | Some argm -> error (NotAFunction(denv, ty, mFunExpr, argm)) | None -> error (FunctionExpected(denv, ty, mFunExpr)) let ReportImplicitlyIgnoredBoolExpression denv m ty expr = let checkExpr m expr = - match expr with + match expr with | Expr.App (Expr.Val (vf, _, _), _, _, exprs, _) when vf.LogicalName = opNameEquals -> - match exprs with + match exprs with | Expr.App (Expr.Val (propRef, _, _), _, _, Expr.Val (vf, _, _) :: _, _) :: _ -> if propRef.IsPropertyGetterMethod then let propertyName = propRef.PropertyName @@ -658,12 +661,12 @@ let ReportImplicitlyIgnoredBoolExpression denv m ty expr = UnitTypeExpectedWithEquality (denv, ty, m) | Expr.Op (TOp.ILCall (_, _, _, _, _, _, _, ilMethRef, _, _, _), _, Expr.Val (vf, _, _) :: _, _) :: _ when ilMethRef.Name.StartsWithOrdinal("get_") -> UnitTypeExpectedWithPossiblePropertySetter (denv, ty, vf.DisplayName, PrettyNaming.ChopPropertyName(ilMethRef.Name), m) - | Expr.Val (vf, _, _) :: _ -> + | Expr.Val (vf, _, _) :: _ -> UnitTypeExpectedWithPossibleAssignment (denv, ty, vf.IsMutable, vf.DisplayName, m) | _ -> UnitTypeExpectedWithEquality (denv, ty, m) | _ -> UnitTypeExpected (denv, ty, m) - match expr with + match expr with | Expr.Let (_, Expr.Sequential (_, inner, _, _, _), _, _) | Expr.Sequential (_, inner, _, _, _) -> let rec extractNext expr = @@ -675,16 +678,16 @@ let ReportImplicitlyIgnoredBoolExpression denv m ty expr = let UnifyUnitType cenv (env: TcEnv) m ty expr = let denv = env.DisplayEnv - if AddCxTypeEqualsTypeUndoIfFailed denv cenv.css m ty cenv.g.unit_ty then + if AddCxTypeEqualsTypeUndoIfFailed denv cenv.css m ty cenv.g.unit_ty then true else let domainTy = NewInferenceType () let resultTy = NewInferenceType () - if AddCxTypeEqualsTypeUndoIfFailed denv cenv.css m ty (domainTy --> resultTy) then + if AddCxTypeEqualsTypeUndoIfFailed denv cenv.css m ty (domainTy --> resultTy) then warning (FunctionValueUnexpected(denv, ty, m)) else let reportImplicitlyDiscardError() = - if typeEquiv cenv.g cenv.g.bool_ty ty then + if typeEquiv cenv.g cenv.g.bool_ty ty then warning (ReportImplicitlyIgnoredBoolExpression denv m ty expr) else warning (UnitTypeExpected (denv, ty, m)) @@ -698,7 +701,7 @@ let UnifyUnitType cenv (env: TcEnv) m ty expr = if isListTy cenv.g ty || isArrayTy cenv.g ty || typeEquiv cenv.g seqTy ty then warning (Error (FSComp.SR.implicitlyDiscardedSequenceInSequenceExpression(NicePrint.prettyStringOfTy denv ty), m)) else - reportImplicitlyDiscardError() + reportImplicitlyDiscardError() | _ -> reportImplicitlyDiscardError() @@ -706,7 +709,7 @@ let UnifyUnitType cenv (env: TcEnv) m ty expr = let TryUnifyUnitTypeWithoutWarning cenv (env:TcEnv) m ty = let denv = env.DisplayEnv - AddCxTypeEqualsTypeUndoIfFailedOrWarnings denv cenv.css m ty cenv.g.unit_ty + AddCxTypeEqualsTypeUndoIfFailedOrWarnings denv cenv.css m ty cenv.g.unit_ty // Logically extends System.AttributeTargets module AttributeTargets = @@ -723,12 +726,12 @@ let ForNewConstructors tcSink (env: TcEnv) mObjTy methodName meths = let callSink (item, minst) = CallMethodGroupNameResolutionSink tcSink (mObjTy, env.NameEnv, item, origItem, minst, ItemOccurence.Use, env.AccessRights) let sendToSink minst refinedMeths = callSink (Item.CtorGroup(methodName, refinedMeths), minst) match meths with - | [] -> + | [] -> AfterResolution.DoNothing - | [_] -> + | [_] -> sendToSink emptyTyparInst meths AfterResolution.DoNothing - | _ -> + | _ -> AfterResolution.RecordResolution (None, (fun tpinst -> callSink (origItem, tpinst)), (fun (minfo, _, minst) -> sendToSink minst [minfo]), (fun () -> callSink (origItem, emptyTyparInst))) @@ -743,7 +746,7 @@ let rec TcSynRationalConst c = let TcConst cenv ty m env c = let rec tcMeasure ms = match ms with - | SynMeasure.One -> Measure.One + | 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) @@ -752,37 +755,37 @@ let TcConst cenv ty m env c = | TyparKind.Measure -> Measure.Con tcref | 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) -> + | SynMeasure.Product(ms1, ms2, _) -> Measure.Prod(tcMeasure ms1, tcMeasure ms2) + | SynMeasure.Divide(ms1, ((SynMeasure.Seq (_ :: (_ :: _), _)) as ms2), m) -> warning(Error(FSComp.SR.tcImplicitMeasureFollowingSlash(), m)) Measure.Prod(tcMeasure ms1, Measure.Inv (tcMeasure ms2)) - | SynMeasure.Divide(ms1, ms2, _) -> + | SynMeasure.Divide(ms1, 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)) - + let unif expected = UnifyTypes cenv env m ty expected let unifyMeasureArg iszero tcr c = - let measureTy = - match c with - | SynConst.Measure(_, SynMeasure.Anon _) -> - (mkAppTy tcr [TType_measure (Measure.Var (NewAnonTypar (TyparKind.Measure, m, TyparRigidity.Anon, (if iszero then NoStaticReq else HeadTypeStaticReq), TyparDynamicReq.No)))]) + let measureTy = + match c with + | SynConst.Measure(_, _, SynMeasure.Anon _) -> + (mkAppTy tcr [TType_measure (Measure.Var (NewAnonTypar (TyparKind.Measure, m, TyparRigidity.Anon, (if iszero then TyparStaticReq.None else TyparStaticReq.HeadType), TyparDynamicReq.No)))]) - | SynConst.Measure(_, ms) -> mkAppTy tcr [TType_measure (tcMeasure ms)] + | SynConst.Measure(_, _, ms) -> mkAppTy tcr [TType_measure (tcMeasure ms)] | _ -> mkAppTy tcr [TType_measure Measure.One] unif measureTy let expandedMeasurablesEnabled = cenv.g.langVersion.SupportsFeature LanguageFeature.ExpandedMeasurables - match c with + match c with | SynConst.Unit -> unif cenv.g.unit_ty; Const.Unit | SynConst.Bool i -> unif cenv.g.bool_ty; Const.Bool i | SynConst.Single f -> unif cenv.g.float32_ty; Const.Single f - | SynConst.Double f -> unif cenv.g.float_ty; Const.Double f - | SynConst.Decimal f -> unif (mkAppTy cenv.g.decimal_tcr []); Const.Decimal f + | SynConst.Double f -> unif cenv.g.float_ty; Const.Double f + | SynConst.Decimal f -> unif (mkAppTy cenv.g.decimal_tcr []); Const.Decimal f | SynConst.SByte i -> unif cenv.g.sbyte_ty; Const.SByte i | SynConst.Int16 i -> unif cenv.g.int16_ty; Const.Int16 i | SynConst.Int32 i -> unif cenv.g.int_ty; Const.Int32 i @@ -793,135 +796,136 @@ let TcConst cenv ty m env c = | SynConst.UInt32 i -> unif cenv.g.uint32_ty; Const.UInt32 i | SynConst.UInt64 i -> unif cenv.g.uint64_ty; Const.UInt64 i | SynConst.UIntPtr i -> unif cenv.g.unativeint_ty; Const.UIntPtr i - | SynConst.Measure(SynConst.Single f, _) -> unifyMeasureArg (f=0.0f) cenv.g.pfloat32_tcr c; Const.Single f - | SynConst.Measure(SynConst.Double f, _) -> unifyMeasureArg (f=0.0) cenv.g.pfloat_tcr c; Const.Double f - | SynConst.Measure(SynConst.Decimal f, _) -> unifyMeasureArg false cenv.g.pdecimal_tcr c; Const.Decimal f - | SynConst.Measure(SynConst.SByte i, _) -> unifyMeasureArg (i=0y) cenv.g.pint8_tcr c; Const.SByte i - | SynConst.Measure(SynConst.Int16 i, _) -> unifyMeasureArg (i=0s) cenv.g.pint16_tcr c; Const.Int16 i - | SynConst.Measure(SynConst.Int32 i, _) -> unifyMeasureArg (i=0) cenv.g.pint_tcr c; Const.Int32 i - | SynConst.Measure(SynConst.Int64 i, _) -> unifyMeasureArg (i=0L) cenv.g.pint64_tcr c; Const.Int64 i - | SynConst.Measure(SynConst.IntPtr i, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0L) cenv.g.pnativeint_tcr c; Const.IntPtr i - | SynConst.Measure(SynConst.Byte i, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0uy) cenv.g.puint8_tcr c; Const.Byte i - | SynConst.Measure(SynConst.UInt16 i, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0us) cenv.g.puint16_tcr c; Const.UInt16 i - | SynConst.Measure(SynConst.UInt32 i, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0u) cenv.g.puint_tcr c; Const.UInt32 i - | SynConst.Measure(SynConst.UInt64 i, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0UL) cenv.g.puint64_tcr c; Const.UInt64 i - | SynConst.Measure(SynConst.UIntPtr i, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0UL) cenv.g.punativeint_tcr c; Const.UIntPtr i + | SynConst.Measure(SynConst.Single f, _, _) -> unifyMeasureArg (f=0.0f) cenv.g.pfloat32_tcr c; Const.Single f + | SynConst.Measure(SynConst.Double f, _, _) -> unifyMeasureArg (f=0.0) cenv.g.pfloat_tcr c; Const.Double f + | SynConst.Measure(SynConst.Decimal f, _, _) -> unifyMeasureArg false cenv.g.pdecimal_tcr c; Const.Decimal f + | SynConst.Measure(SynConst.SByte i, _, _) -> unifyMeasureArg (i=0y) cenv.g.pint8_tcr c; Const.SByte i + | SynConst.Measure(SynConst.Int16 i, _, _) -> unifyMeasureArg (i=0s) cenv.g.pint16_tcr c; Const.Int16 i + | SynConst.Measure(SynConst.Int32 i, _, _) -> unifyMeasureArg (i=0) cenv.g.pint_tcr c; Const.Int32 i + | SynConst.Measure(SynConst.Int64 i, _, _) -> unifyMeasureArg (i=0L) cenv.g.pint64_tcr c; Const.Int64 i + | SynConst.Measure(SynConst.IntPtr i, _, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0L) cenv.g.pnativeint_tcr c; Const.IntPtr i + | SynConst.Measure(SynConst.Byte i, _, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0uy) cenv.g.puint8_tcr c; Const.Byte i + | SynConst.Measure(SynConst.UInt16 i, _, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0us) cenv.g.puint16_tcr c; Const.UInt16 i + | SynConst.Measure(SynConst.UInt32 i, _, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0u) cenv.g.puint_tcr c; Const.UInt32 i + | SynConst.Measure(SynConst.UInt64 i, _, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0UL) cenv.g.puint64_tcr c; Const.UInt64 i + | SynConst.Measure(SynConst.UIntPtr i, _, _) when expandedMeasurablesEnabled -> unifyMeasureArg (i=0UL) cenv.g.punativeint_tcr c; Const.UIntPtr i | SynConst.Char c -> unif cenv.g.char_ty; Const.Char c - | SynConst.String (s, _) -> unif cenv.g.string_ty; Const.String s + | SynConst.String (s, _, _) + | SynConst.SourceIdentifier (_, s, _) -> unif cenv.g.string_ty; Const.String s | SynConst.UserNum _ -> error (InternalError(FSComp.SR.tcUnexpectedBigRationalConstant(), m)) | SynConst.Measure _ -> error (Error(FSComp.SR.tcInvalidTypeForUnitsOfMeasure(), m)) | SynConst.UInt16s _ -> error (InternalError(FSComp.SR.tcUnexpectedConstUint16Array(), m)) | SynConst.Bytes _ -> error (InternalError(FSComp.SR.tcUnexpectedConstByteArray(), m)) - + /// Convert an Abstract IL ILFieldInit value read from .NET metadata to a TAST constant let TcFieldInit (_m: range) lit = PatternMatchCompilation.ilFieldToTastConst lit //------------------------------------------------------------------------- -// Arities. These serve two roles in the system: +// Arities. These serve two roles in the system: // 1. syntactic arities come from the syntactic forms found // signature files and the syntactic forms of function and member definitions. // 2. compiled arities representing representation choices w.r.t. internal representations of // functions and members. -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -// Adjust the arities that came from the parsing of the toptyp (arities) to be a valSynData. +// Adjust the arities that came from the parsing of the toptyp (arities) to be a valSynData. // This means replacing the "[unitArg]" arising from a "unit -> ty" with a "[]". -let AdjustValSynInfoInSignature g ty (SynValInfo(argsData, retData) as sigMD) = - if argsData.Length = 1 && argsData.Head.Length = 1 && isFunTy g ty && typeEquiv g g.unit_ty (domainOfFunTy g ty) then +let AdjustValSynInfoInSignature g ty (SynValInfo(argsData, retData) as sigMD) = + if argsData.Length = 1 && argsData.Head.Length = 1 && isFunTy g ty && typeEquiv g g.unit_ty (domainOfFunTy g ty) then SynValInfo(argsData.Head.Tail :: argsData.Tail, retData) - else - sigMD + else + sigMD -/// The ValReprInfo for a value, except the number of typars is not yet inferred +/// The ValReprInfo for a value, except the number of typars is not yet inferred type PartialValReprInfo = | PartialValReprInfo of curriedArgInfos: ArgReprInfo list list * - returnInfo: ArgReprInfo + returnInfo: ArgReprInfo -let TranslateTopArgSynInfo isArg m tcAttributes (SynArgInfo(Attributes attrs, isOpt, nm)) = +let TranslateTopArgSynInfo isArg m tcAttributes (SynArgInfo(Attributes attrs, isOpt, nm)) = // Synthesize an artificial "OptionalArgument" attribute for the parameter - let optAttrs = - if isOpt then - [ ( { TypeName=LongIdentWithDots(pathToSynLid m ["Microsoft";"FSharp";"Core";"OptionalArgument"], []) - ArgExpr=mkSynUnit m - Target=None - AppliesToGetterAndSetter=false - Range=m} : SynAttribute) ] - else + let optAttrs = + if isOpt then + [ ( { TypeName=LongIdentWithDots(pathToSynLid m ["Microsoft";"FSharp";"Core";"OptionalArgument"], []) + ArgExpr=mkSynUnit m + Target=None + AppliesToGetterAndSetter=false + Range=m} : SynAttribute) ] + else [] - if isArg && not (isNil attrs) && Option.isNone nm then + if isArg && not (isNil attrs) && Option.isNone nm then errorR(Error(FSComp.SR.tcParameterRequiresName(), m)) - if not isArg && Option.isSome nm then + if not isArg && Option.isSome nm then errorR(Error(FSComp.SR.tcReturnValuesCannotHaveNames(), m)) - - // Call the attribute checking function + + // Call the attribute checking function let attribs = tcAttributes (optAttrs@attrs) ({ Attribs = attribs; Name = nm } : ArgReprInfo) -/// Members have an arity inferred from their syntax. This "valSynData" is not quite the same as the arities -/// used in the middle and backends of the compiler ("topValInfo"). -/// "0" in a valSynData (see arity_of_pat) means a "unit" arg in a topValInfo -/// Hence remove all "zeros" from arity and replace them with 1 here. -/// Note we currently use the compiled form for choosing unique names, to distinguish overloads because this must match up -/// between signature and implementation, and the signature just has "unit". -let TranslateTopValSynInfo m tcAttributes (SynValInfo(argsData, retData)) = - PartialValReprInfo (argsData |> List.mapSquared (TranslateTopArgSynInfo true m (tcAttributes AttributeTargets.Parameter)), +/// Members have an arity inferred from their syntax. This "valSynData" is not quite the same as the arities +/// used in the middle and backends of the compiler ("topValInfo"). +/// "0" in a valSynData (see arity_of_pat) means a "unit" arg in a topValInfo +/// Hence remove all "zeros" from arity and replace them with 1 here. +/// Note we currently use the compiled form for choosing unique names, to distinguish overloads because this must match up +/// between signature and implementation, and the signature just has "unit". +let TranslateTopValSynInfo m tcAttributes (SynValInfo(argsData, retData)) = + PartialValReprInfo (argsData |> List.mapSquared (TranslateTopArgSynInfo true m (tcAttributes AttributeTargets.Parameter)), retData |> TranslateTopArgSynInfo false m (tcAttributes AttributeTargets.ReturnValue)) -let TranslatePartialArity tps (PartialValReprInfo (argsData, retData)) = +let TranslatePartialArity tps (PartialValReprInfo (argsData, retData)) = ValReprInfo(ValReprInfo.InferTyparInfo tps, argsData, retData) //------------------------------------------------------------------------- // Members -//------------------------------------------------------------------------- - -let ComputeLogicalName (id: Ident) memberFlags = - match memberFlags.MemberKind with - | MemberKind.ClassConstructor -> ".cctor" - | MemberKind.Constructor -> ".ctor" - | MemberKind.Member -> - match id.idText with +//------------------------------------------------------------------------- + +let ComputeLogicalName (id: Ident) (memberFlags: SynMemberFlags) = + match memberFlags.MemberKind with + | SynMemberKind.ClassConstructor -> ".cctor" + | SynMemberKind.Constructor -> ".ctor" + | SynMemberKind.Member -> + match id.idText with | (".ctor" | ".cctor") as r -> errorR(Error(FSComp.SR.tcInvalidMemberNameCtor(), id.idRange)); r | r -> r - | MemberKind.PropertyGetSet -> error(InternalError(FSComp.SR.tcMemberKindPropertyGetSetNotExpected(), id.idRange)) - | MemberKind.PropertyGet -> "get_" + id.idText - | MemberKind.PropertySet -> "set_" + id.idText + | SynMemberKind.PropertyGetSet -> error(InternalError(FSComp.SR.tcMemberKindPropertyGetSetNotExpected(), id.idRange)) + | SynMemberKind.PropertyGet -> "get_" + id.idText + | SynMemberKind.PropertySet -> "set_" + id.idText type PreValMemberInfo = | PreValMemberInfo of memberInfo: ValMemberInfo * logicalName: string * - compiledName: string + compiledName: string /// Make the unique "name" for a member. // -// optImplSlotTy = None (for classes) or Some ty (when implementing interface type ty) +// optImplSlotTy = None (for classes) or Some ty (when implementing interface type ty) let MakeMemberDataAndMangledNameForMemberVal(g, tcref, isExtrinsic, attrs, optImplSlotTys, memberFlags, valSynData, id, isCompGen) = let logicalName = ComputeLogicalName id memberFlags let optIntfSlotTys = if optImplSlotTys |> List.forall (isInterfaceTy g) then optImplSlotTys else [] - let memberInfo: ValMemberInfo = - { ApparentEnclosingEntity=tcref - MemberFlags=memberFlags + let memberInfo: ValMemberInfo = + { ApparentEnclosingEntity=tcref + MemberFlags=memberFlags IsImplemented=false - // NOTE: This value is initially only set for interface implementations and those overrides - // where we manage to pre-infer which abstract is overridden by the method. It is filled in - // properly when we check the allImplemented implementation checks at the end of the inference scope. + // NOTE: This value is initially only set for interface implementations and those overrides + // where we manage to pre-infer which abstract is overridden by the method. It is filled in + // properly when we check the allImplemented implementation checks at the end of the inference scope. ImplementedSlotSigs=optImplSlotTys |> List.map (fun ity -> TSlotSig(logicalName, ity, [], [], [], None)) } let isInstance = MemberIsCompiledAsInstance g tcref isExtrinsic memberInfo attrs - if (memberFlags.IsDispatchSlot || not (isNil optIntfSlotTys)) then + if (memberFlags.IsDispatchSlot || not (isNil optIntfSlotTys)) then if not isInstance then errorR(VirtualAugmentationOnNullValuedType(id.idRange)) - elif not memberFlags.IsOverrideOrExplicitImpl && memberFlags.IsInstance then + elif not memberFlags.IsOverrideOrExplicitImpl && memberFlags.IsInstance then if not isExtrinsic && not isInstance then warning(NonVirtualAugmentationOnNullValuedType(id.idRange)) - let compiledName = - if isExtrinsic then + let compiledName = + if isExtrinsic then let tname = tcref.LogicalName let text = tname + "." + logicalName - let text = if memberFlags.MemberKind <> MemberKind.Constructor && memberFlags.MemberKind <> MemberKind.ClassConstructor && not memberFlags.IsInstance then text + ".Static" else text + let text = if memberFlags.MemberKind <> SynMemberKind.Constructor && memberFlags.MemberKind <> SynMemberKind.ClassConstructor && not memberFlags.IsInstance then text + ".Static" else text let text = if memberFlags.IsOverrideOrExplicitImpl then text + ".Override" else text text else if not optIntfSlotTys.IsEmpty then @@ -931,8 +935,8 @@ let MakeMemberDataAndMangledNameForMemberVal(g, tcref, isExtrinsic, attrs, optIm qualifiedInterfaceImplementationName g optIntfSlotTys.Head logicalName else List.foldBack (fun x -> qualifiedMangledNameOfTyconRef (tcrefOfAppTy g x)) optIntfSlotTys logicalName - - if not isCompGen && IsMangledOpName id.idText && IsInfixOperator id.idText then + + if not isCompGen && IsMangledOpName id.idText && IsInfixOperator id.idText then let m = id.idRange let name = DecompileOpName id.idText // Check symbolic members. Expect valSynData implied arity to be [[2]]. @@ -949,21 +953,21 @@ let MakeMemberDataAndMangledNameForMemberVal(g, tcref, isExtrinsic, attrs, optIm PreValMemberInfo(memberInfo, logicalName, compiledName) -type OverridesOK = - | OverridesOK +type OverridesOK = + | OverridesOK | WarnOnOverrides | ErrorOnOverrides /// A type to represent information associated with values to indicate what explicit (declared) type parameters /// are given and what additional type parameters can be inferred, if any. /// -/// The declared type parameters, e.g. let f<'a> (x:'a) = x, plus an indication -/// of whether additional polymorphism may be inferred, e.g. let f<'a, ..> (x:'a) y = x +/// The declared type parameters, e.g. let f<'a> (x:'a) = x, plus an indication +/// of whether additional polymorphism may be inferred, e.g. let f<'a, ..> (x:'a) y = x type ExplicitTyparInfo = | ExplicitTyparInfo of rigidCopyOfDeclaredTypars: Typars * declaredTypars: Typars * - infer: bool + infer: bool let permitInferTypars = ExplicitTyparInfo ([], [], true) let dontInferTypars = ExplicitTyparInfo ([], [], false) @@ -972,29 +976,29 @@ type ArgAndRetAttribs = ArgAndRetAttribs of Attribs list list * Attribs let noArgOrRetAttribs = ArgAndRetAttribs ([], []) /// A flag to represent the sort of bindings are we processing. -/// Processing "declaration" and "class" bindings that make up a module (such as "let x = 1 let y = 2") -/// shares the same code paths (e.g. TcLetBinding and TcLetrec) as processing expression bindings (such as "let x = 1 in ...") -/// Member bindings also use this path. +/// Processing "declaration" and "class" bindings that make up a module (such as "let x = 1 let y = 2") +/// shares the same code paths (e.g. TcLetBinding and TcLetrec) as processing expression bindings (such as "let x = 1 in ...") +/// Member bindings also use this path. // -/// However there are differences in how different bindings get processed, -/// i.e. module bindings get published to the implicitly accumulated module type, but expression 'let' bindings don't. -type DeclKind = - | ModuleOrMemberBinding +/// However there are differences in how different bindings get processed, +/// i.e. module bindings get published to the implicitly accumulated module type, but expression 'let' bindings don't. +type DeclKind = + | ModuleOrMemberBinding /// Extensions to a type within the same assembly - | IntrinsicExtensionBinding + | IntrinsicExtensionBinding /// Extensions to a type in a different assembly - | ExtrinsicExtensionBinding + | ExtrinsicExtensionBinding | ClassLetBinding of isStatic: bool | ObjectExpressionOverrideBinding - | ExpressionBinding + | ExpressionBinding - static member IsModuleOrMemberOrExtensionBinding x = - match x with + static member IsModuleOrMemberOrExtensionBinding x = + match x with | ModuleOrMemberBinding -> true | IntrinsicExtensionBinding -> true | ExtrinsicExtensionBinding -> true @@ -1004,8 +1008,8 @@ type DeclKind = static member MustHaveArity x = DeclKind.IsModuleOrMemberOrExtensionBinding x - member x.CanBeDllImport = - match x with + member x.CanBeDllImport = + match x with | ModuleOrMemberBinding -> true | IntrinsicExtensionBinding -> true | ExtrinsicExtensionBinding -> true @@ -1017,102 +1021,102 @@ type DeclKind = static member ImplicitlyStatic x = DeclKind.IsModuleOrMemberOrExtensionBinding x - static member AllowedAttribTargets memberFlagsOpt x = - match x with - | ModuleOrMemberBinding | ObjectExpressionOverrideBinding -> + static member AllowedAttribTargets (memberFlagsOpt: SynMemberFlags option) x = + match x with + | ModuleOrMemberBinding | ObjectExpressionOverrideBinding -> match memberFlagsOpt with - | Some flags when flags.MemberKind = MemberKind.Constructor -> AttributeTargets.Constructor - | Some flags when flags.MemberKind = MemberKind.PropertyGetSet -> AttributeTargets.Event ||| AttributeTargets.Property - | Some flags when flags.MemberKind = MemberKind.PropertyGet -> AttributeTargets.Event ||| AttributeTargets.Property - | Some flags when flags.MemberKind = MemberKind.PropertySet -> AttributeTargets.Property - | Some _ -> AttributeTargets.Method - | None -> AttributeTargets.Field ||| AttributeTargets.Method ||| AttributeTargets.Property - | IntrinsicExtensionBinding -> AttributeTargets.Method ||| AttributeTargets.Property - | ExtrinsicExtensionBinding -> AttributeTargets.Method ||| AttributeTargets.Property - | ClassLetBinding _ -> AttributeTargets.Field ||| AttributeTargets.Method + | Some flags when flags.MemberKind = SynMemberKind.Constructor -> AttributeTargets.Constructor + | Some flags when flags.MemberKind = SynMemberKind.PropertyGetSet -> AttributeTargets.Event ||| AttributeTargets.Property + | Some flags when flags.MemberKind = SynMemberKind.PropertyGet -> AttributeTargets.Event ||| AttributeTargets.Property ||| AttributeTargets.ReturnValue + | Some flags when flags.MemberKind = SynMemberKind.PropertySet -> AttributeTargets.Property + | Some _ -> AttributeTargets.Method ||| AttributeTargets.ReturnValue + | None -> AttributeTargets.Field ||| AttributeTargets.Method ||| AttributeTargets.Property ||| AttributeTargets.ReturnValue + | IntrinsicExtensionBinding -> AttributeTargets.Method ||| AttributeTargets.Property ||| AttributeTargets.ReturnValue + | ExtrinsicExtensionBinding -> AttributeTargets.Method ||| AttributeTargets.Property ||| AttributeTargets.ReturnValue + | ClassLetBinding _ -> AttributeTargets.Field ||| AttributeTargets.Method ||| AttributeTargets.ReturnValue | ExpressionBinding -> enum 0 // indicates attributes not allowed on expression 'let' bindings // Note: now always true - static member CanGeneralizeConstrainedTypars x = - match x with + static member CanGeneralizeConstrainedTypars x = + match x with | ModuleOrMemberBinding -> true | IntrinsicExtensionBinding -> true | ExtrinsicExtensionBinding -> true | ClassLetBinding _ -> true | ObjectExpressionOverrideBinding -> true | ExpressionBinding -> true - - static member ConvertToLinearBindings x = - match x with + + static member ConvertToLinearBindings x = + match x with | ModuleOrMemberBinding -> true | IntrinsicExtensionBinding -> true | ExtrinsicExtensionBinding -> true | ClassLetBinding _ -> true | ObjectExpressionOverrideBinding -> true - | ExpressionBinding -> false + | ExpressionBinding -> false - static member CanOverrideOrImplement x = - match x with + static member CanOverrideOrImplement x = + match x with | ModuleOrMemberBinding -> OverridesOK | IntrinsicExtensionBinding -> WarnOnOverrides | ExtrinsicExtensionBinding -> ErrorOnOverrides - | ClassLetBinding _ -> ErrorOnOverrides + | ClassLetBinding _ -> ErrorOnOverrides | ObjectExpressionOverrideBinding -> OverridesOK - | ExpressionBinding -> ErrorOnOverrides + | ExpressionBinding -> ErrorOnOverrides //------------------------------------------------------------------------- // Data structures that track the gradual accumulation of information // about values and members during inference. -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- /// The results of preliminary pass over patterns to extract variables being declared. // We should make this a record for cleaner code -type PrelimValScheme1 = - | PrelimValScheme1 of - id: Ident * - explicitTyparInfo: ExplicitTyparInfo * - TType * +type PrelimValScheme1 = + | PrelimValScheme1 of + id: Ident * + explicitTyparInfo: ExplicitTyparInfo * + TType * PartialValReprInfo option * - PreValMemberInfo option * - bool * - ValInline * - ValBaseOrThisInfo * - ArgAndRetAttribs * - SynAccess option * + PreValMemberInfo option * + bool * + ValInline * + ValBaseOrThisInfo * + ArgAndRetAttribs * + SynAccess option * bool member x.Type = let (PrelimValScheme1(_, _, ty, _, _, _, _, _, _, _, _)) = x in ty member x.Ident = let (PrelimValScheme1(id, _, _, _, _, _, _, _, _, _, _)) = x in id - -/// The results of applying let-style generalization after type checking. + +/// The results of applying let-style generalization after type checking. // We should make this a record for cleaner code -type PrelimValScheme2 = - PrelimValScheme2 of - Ident * - TypeScheme * +type PrelimValScheme2 = + PrelimValScheme2 of + Ident * + TypeScheme * PartialValReprInfo option * - PreValMemberInfo option * - bool * - ValInline * - ValBaseOrThisInfo * - ArgAndRetAttribs * - SynAccess option * + PreValMemberInfo option * bool * - bool (* hasDeclaredTypars *) - + ValInline * + ValBaseOrThisInfo * + ArgAndRetAttribs * + SynAccess option * + bool * + bool (* hasDeclaredTypars *) -/// The results of applying arity inference to PrelimValScheme2 -type ValScheme = - | ValScheme of - id: Ident * - typeScheme: TypeScheme * - topValInfo: ValReprInfo option * - memberInfo: PreValMemberInfo option * + +/// The results of applying arity inference to PrelimValScheme2 +type ValScheme = + | ValScheme of + id: Ident * + typeScheme: TypeScheme * + topValInfo: ValReprInfo option * + memberInfo: PreValMemberInfo option * isMutable: bool * - inlineInfo: ValInline * - baseOrThisInfo: ValBaseOrThisInfo * - visibility: SynAccess option * + inlineInfo: ValInline * + baseOrThisInfo: ValBaseOrThisInfo * + visibility: SynAccess option * compgen: bool * isIncrClass: bool * isTyFunc: bool * @@ -1123,33 +1127,33 @@ type ValScheme = member x.TypeScheme = let (ValScheme(_, ts, _, _, _, _, _, _, _, _, _, _)) = x in ts member x.ValReprInfo = let (ValScheme(_, _, topValInfo, _, _, _, _, _, _, _, _, _)) = x in topValInfo - -/// Translation of patterns is split into three phases. The first collects names. -/// The second is run after val_specs have been created for those names and inference -/// has been resolved. The second phase is run by applying a function returned by the -/// first phase. The input to the second phase is a List.map that gives the Val and type scheme -/// for each value bound by the pattern. -type TcPatPhase2Input = + +/// Translation of patterns is split into three phases. The first collects names. +/// The second is run after val_specs have been created for those names and inference +/// has been resolved. The second phase is run by applying a function returned by the +/// first phase. The input to the second phase is a List.map that gives the Val and type scheme +/// for each value bound by the pattern. +type TcPatPhase2Input = | TcPatPhase2Input of (Val * TypeScheme) NameMap * bool // Get an input indicating we are no longer on the left-most path through a disjunctive "or" pattern member x.RightPath = (let (TcPatPhase2Input(a, _)) = x in TcPatPhase2Input(a, false)) -/// The first phase of checking and elaborating a binding leaves a goop of information. -/// This is a bit of a mess: much of this information is also carried on a per-value basis by the -/// "NameMap". -type CheckedBindingInfo = - | CheckedBindingInfo of - inlineFlag: ValInline * - valAttribs: Attribs * - xmlDoc: XmlDoc * - tcPatPhase2: (TcPatPhase2Input -> PatternMatchCompilation.Pattern) * - exlicitTyparInfo: ExplicitTyparInfo * - nameToPrelimValSchemeMap: NameMap * - rhsExprChecked: Expr * - argAndRetAttribs: ArgAndRetAttribs * - overallPatTy: TType * +/// The first phase of checking and elaborating a binding leaves a goop of information. +/// This is a bit of a mess: much of this information is also carried on a per-value basis by the +/// "NameMap". +type CheckedBindingInfo = + | CheckedBindingInfo of + inlineFlag: ValInline * + valAttribs: Attribs * + xmlDoc: XmlDoc * + tcPatPhase2: (TcPatPhase2Input -> PatternMatchCompilation.Pattern) * + exlicitTyparInfo: ExplicitTyparInfo * + nameToPrelimValSchemeMap: NameMap * + rhsExprChecked: Expr * + argAndRetAttribs: ArgAndRetAttribs * + overallPatTy: TType * mBinding: range * - spBind: DebugPointForBinding * + spBind: DebugPointAtBinding * isCompilerGenerated: bool * literalValue: Const option * isFixed: bool @@ -1157,7 +1161,7 @@ type CheckedBindingInfo = member x.SeqPoint = let (CheckedBindingInfo(_, _, _, _, _, _, _, _, _, _, spBind, _, _, _)) = x in spBind /// Return the generalized type for a type scheme -let GeneralizedTypeForTypeScheme typeScheme = +let GeneralizedTypeForTypeScheme typeScheme = let (TypeScheme(generalizedTypars, tau)) = typeScheme mkForallTyIfNeeded generalizedTypars tau @@ -1167,97 +1171,97 @@ let NonGenericTypeScheme ty = TypeScheme([], ty) //------------------------------------------------------------------------- // Helpers related to publishing values, types and members into the // elaborated representation. -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -let UpdateAccModuleOrNamespaceType cenv env f = - // When compiling FSharp.Core, modify the fslib CCU to ensure forward stable references used by - // the compiler can be resolved ASAP. Not at all pretty but it's hard to +let UpdateAccModuleOrNamespaceType cenv env f = + // When compiling FSharp.Core, modify the fslib CCU to ensure forward stable references used by + // the compiler can be resolved ASAP. Not at all pretty but it's hard to // find good ways to do references from the compiler into a term graph. - if cenv.compilingCanonicalFslibModuleType then + if cenv.compilingCanonicalFslibModuleType then let nleref = mkNonLocalEntityRef cenv.topCcu (arrPathOfLid env.ePath) let modul = nleref.Deref modul.entity_modul_contents <- MaybeLazy.Strict (f true modul.ModuleOrNamespaceType) SetCurrAccumulatedModuleOrNamespaceType env (f false (GetCurrAccumulatedModuleOrNamespaceType env)) - -let PublishModuleDefn cenv env mspec = - UpdateAccModuleOrNamespaceType cenv env (fun intoFslibCcu mty -> + +let PublishModuleDefn cenv env mspec = + UpdateAccModuleOrNamespaceType cenv env (fun intoFslibCcu mty -> if intoFslibCcu then mty else mty.AddEntity mspec) let item = Item.ModuleOrNamespaces([mkLocalModRef mspec]) CallNameResolutionSink cenv.tcSink (mspec.Range, env.NameEnv, item, emptyTyparInst, ItemOccurence.Binding, env.AccessRights) -let PublishTypeDefn cenv env mspec = - UpdateAccModuleOrNamespaceType cenv env (fun _ mty -> +let PublishTypeDefn cenv env mspec = + UpdateAccModuleOrNamespaceType cenv env (fun _ mty -> mty.AddEntity mspec) -let PublishValueDefnPrim cenv env (vspec: Val) = - UpdateAccModuleOrNamespaceType cenv env (fun _ mty -> +let PublishValueDefnPrim cenv env (vspec: Val) = + UpdateAccModuleOrNamespaceType cenv env (fun _ mty -> mty.AddVal vspec) let PublishValueDefn cenv env declKind (vspec: Val) = - if (declKind = ModuleOrMemberBinding) && - ((GetCurrAccumulatedModuleOrNamespaceType env).ModuleOrNamespaceKind = Namespace) && - (Option.isNone vspec.MemberInfo) then - errorR(NumberedError(FSComp.SR.tcNamespaceCannotContainValues(), vspec.Range)) + if (declKind = ModuleOrMemberBinding) && + ((GetCurrAccumulatedModuleOrNamespaceType env).ModuleOrNamespaceKind = Namespace) && + (Option.isNone vspec.MemberInfo) then + errorR(Error(FSComp.SR.tcNamespaceCannotContainValues(), vspec.Range)) - if (declKind = ExtrinsicExtensionBinding) && - ((GetCurrAccumulatedModuleOrNamespaceType env).ModuleOrNamespaceKind = Namespace) then + if (declKind = ExtrinsicExtensionBinding) && + ((GetCurrAccumulatedModuleOrNamespaceType env).ModuleOrNamespaceKind = Namespace) then errorR(Error(FSComp.SR.tcNamespaceCannotContainExtensionMembers(), vspec.Range)) - // Publish the value to the module type being generated. - match declKind with + // Publish the value to the module type being generated. + match declKind with | ModuleOrMemberBinding | ExtrinsicExtensionBinding | IntrinsicExtensionBinding -> PublishValueDefnPrim cenv env vspec | _ -> () - match vspec.MemberInfo with - | Some _ when - (not vspec.IsCompilerGenerated && + match vspec.MemberInfo with + | Some _ when + (not vspec.IsCompilerGenerated && // Extrinsic extensions don't get added to the tcaug - not (declKind = ExtrinsicExtensionBinding)) -> - // // Static initializers don't get published to the tcaug - // not (memberInfo.MemberFlags.MemberKind = MemberKind.ClassConstructor)) -> - + not (declKind = ExtrinsicExtensionBinding)) -> + // // Static initializers don't get published to the tcaug + // not (memberInfo.MemberFlags.MemberKind = SynMemberKind.ClassConstructor)) -> + let tcaug = vspec.MemberApparentEntity.TypeContents let vref = mkLocalValRef vspec tcaug.tcaug_adhoc <- NameMultiMap.add vspec.LogicalName vref tcaug.tcaug_adhoc tcaug.tcaug_adhoc_list.Add (ValRefIsExplicitImpl cenv.g vref, vref) | _ -> () -let CombineVisibilityAttribs vis1 vis2 m = +let CombineVisibilityAttribs vis1 vis2 m = match vis1 with | Some _ -> - if Option.isSome vis2 then + if Option.isSome vis2 then errorR(Error(FSComp.SR.tcMultipleVisibilityAttributes(), m)) vis1 | _ -> vis2 -let ComputeAccessAndCompPath env declKindOpt m vis overrideVis actualParent = +let ComputeAccessAndCompPath env declKindOpt m vis overrideVis actualParent = let accessPath = env.eAccessPath - let accessModPermitted = - match declKindOpt with + let accessModPermitted = + match declKindOpt with | None -> true | Some declKind -> DeclKind.IsAccessModifierPermitted declKind - if Option.isSome vis && not accessModPermitted then + if Option.isSome vis && not accessModPermitted then errorR(Error(FSComp.SR.tcMultipleVisibilityAttributesWithLet(), m)) - let vis = - match overrideVis, vis with + let vis = + match overrideVis, vis with | Some v, _ -> v | _, None -> taccessPublic (* a module or member binding defaults to "public" *) | _, Some SynAccess.Public -> taccessPublic | _, Some SynAccess.Private -> taccessPrivate accessPath - | _, Some SynAccess.Internal -> taccessInternal + | _, Some SynAccess.Internal -> taccessInternal - let vis = - match actualParent with - | ParentNone -> vis + let vis = + match actualParent with + | ParentNone -> vis | Parent tcref -> combineAccess vis tcref.Accessibility - + let cpath = if accessModPermitted then Some env.eCompPath else None - vis, cpath + vis, cpath let CheckForAbnormalOperatorNames cenv (idRange: range) coreDisplayName (memberInfoOpt: ValMemberInfo option) = if (idRange.EndColumn - idRange.StartColumn <= 5) && @@ -1271,20 +1275,20 @@ let CheckForAbnormalOperatorNames cenv (idRange: range) coreDisplayName (memberI warning(StandardOperatorRedefinitionWarning(FSComp.SR.tcInvalidMethodNameForRelationalOperator(opName, coreDisplayName), idRange)) else warning(StandardOperatorRedefinitionWarning(FSComp.SR.tcInvalidOperatorDefinitionRelational opName, idRange)) - | PrettyNaming.Equality -> + | PrettyNaming.Equality -> if isMember then warning(StandardOperatorRedefinitionWarning(FSComp.SR.tcInvalidMethodNameForEquality(opName, coreDisplayName), idRange)) else warning(StandardOperatorRedefinitionWarning(FSComp.SR.tcInvalidOperatorDefinitionEquality opName, idRange)) - | PrettyNaming.Control -> + | PrettyNaming.Control -> if isMember then warning(StandardOperatorRedefinitionWarning(FSComp.SR.tcInvalidMemberName(opName, coreDisplayName), idRange)) else warning(StandardOperatorRedefinitionWarning(FSComp.SR.tcInvalidOperatorDefinition opName, idRange)) - | PrettyNaming.Indexer -> + | PrettyNaming.Indexer -> if not isMember then error(StandardOperatorRedefinitionWarning(FSComp.SR.tcInvalidIndexOperatorDefinition opName, idRange)) - | PrettyNaming.FixedTypes -> + | PrettyNaming.FixedTypes -> if isMember then warning(StandardOperatorRedefinitionWarning(FSComp.SR.tcInvalidMemberNameFixedTypes opName, idRange)) | PrettyNaming.Other -> () @@ -1297,8 +1301,8 @@ let MakeAndPublishVal cenv env (altActualParent, inSig, declKind, vrec, vscheme, let m = id.idRange - let isTopBinding = - match declKind with + let isTopBinding = + match declKind with | ModuleOrMemberBinding -> true | ExtrinsicExtensionBinding -> true | IntrinsicExtensionBinding -> true @@ -1306,12 +1310,12 @@ let MakeAndPublishVal cenv env (altActualParent, inSig, declKind, vrec, vscheme, let isExtrinsic = (declKind = ExtrinsicExtensionBinding) - let actualParent, overrideVis = - // Use the parent of the member if it's available + let actualParent, overrideVis = + // Use the parent of the member if it's available // If it's an extrinsic extension member or not a member then use the containing module. - match memberInfoOpt with - | Some (PreValMemberInfo(memberInfo, _, _)) when not isExtrinsic -> - if memberInfo.ApparentEnclosingEntity.IsModuleOrNamespace then + match memberInfoOpt with + | Some (PreValMemberInfo(memberInfo, _, _)) when not isExtrinsic -> + if memberInfo.ApparentEnclosingEntity.IsModuleOrNamespace then errorR(InternalError(FSComp.SR.tcExpectModuleOrNamespaceParent(id.idText), m)) // Members of interface implementations have the accessibility of the interface @@ -1326,16 +1330,16 @@ let MakeAndPublishVal cenv env (altActualParent, inSig, declKind, vrec, vscheme, None Parent(memberInfo.ApparentEnclosingEntity), vis | _ -> altActualParent, None - + let vis, _ = ComputeAccessAndCompPath env (Some declKind) id.idRange vis overrideVis actualParent - let inlineFlag = - if HasFSharpAttributeOpt cenv.g cenv.g.attrib_DllImportAttribute attrs then - if inlineFlag = ValInline.PseudoVal || inlineFlag = ValInline.Always then - errorR(Error(FSComp.SR.tcDllImportStubsCannotBeInlined(), m)) - ValInline.Never - else - let implflags = + let inlineFlag = + if HasFSharpAttributeOpt cenv.g cenv.g.attrib_DllImportAttribute attrs then + if inlineFlag = ValInline.PseudoVal || inlineFlag = ValInline.Always then + errorR(Error(FSComp.SR.tcDllImportStubsCannotBeInlined(), m)) + ValInline.Never + else + let implflags = match TryFindFSharpAttribute cenv.g cenv.g.attrib_MethodImplAttribute attrs with | Some (Attrib(_, _, [ AttribInt32Arg flags ], _, _, _, _)) -> flags | _ -> 0x0 @@ -1346,60 +1350,60 @@ let MakeAndPublishVal cenv env (altActualParent, inSig, declKind, vrec, vscheme, else inlineFlag - // CompiledName not allowed on virtual/abstract/override members + // CompiledName not allowed on virtual/abstract/override members let compiledNameAttrib = TryFindFSharpStringAttribute cenv.g cenv.g.attrib_CompiledNameAttribute attrs if Option.isSome compiledNameAttrib then - match memberInfoOpt with - | Some (PreValMemberInfo(memberInfo, _, _)) -> + match memberInfoOpt with + | Some (PreValMemberInfo(memberInfo, _, _)) -> if memberInfo.MemberFlags.IsDispatchSlot || memberInfo.MemberFlags.IsOverrideOrExplicitImpl then errorR(Error(FSComp.SR.tcCompiledNameAttributeMisused(), m)) - | None -> + | None -> match altActualParent with - | ParentNone -> errorR(Error(FSComp.SR.tcCompiledNameAttributeMisused(), m)) + | ParentNone -> errorR(Error(FSComp.SR.tcCompiledNameAttributeMisused(), m)) | _ -> () let compiledNameIsOnProp = match memberInfoOpt with | Some (PreValMemberInfo(memberInfo, _, _)) -> - memberInfo.MemberFlags.MemberKind = MemberKind.PropertyGet || - memberInfo.MemberFlags.MemberKind = MemberKind.PropertySet || - memberInfo.MemberFlags.MemberKind = MemberKind.PropertyGetSet + memberInfo.MemberFlags.MemberKind = SynMemberKind.PropertyGet || + memberInfo.MemberFlags.MemberKind = SynMemberKind.PropertySet || + memberInfo.MemberFlags.MemberKind = SynMemberKind.PropertyGetSet | _ -> false - let compiledName = - match compiledNameAttrib with + let compiledName = + match compiledNameAttrib with // We fix up CompiledName on properties during codegen - | Some _ when not compiledNameIsOnProp -> compiledNameAttrib - | _ -> - match memberInfoOpt with - | Some (PreValMemberInfo(_, _, compiledName)) -> + | Some _ when not compiledNameIsOnProp -> compiledNameAttrib + | _ -> + match memberInfoOpt with + | Some (PreValMemberInfo(_, _, compiledName)) -> Some compiledName - | None -> + | None -> None - let logicalName = - match memberInfoOpt with - | Some (PreValMemberInfo(_, logicalName, _)) -> + let logicalName = + match memberInfoOpt with + | Some (PreValMemberInfo(_, logicalName, _)) -> logicalName - | None -> + | None -> id.idText - let memberInfoOpt = - match memberInfoOpt with - | Some (PreValMemberInfo(memberInfo, _, _)) -> + let memberInfoOpt = + match memberInfoOpt with + | Some (PreValMemberInfo(memberInfo, _, _)) -> Some memberInfo - | None -> + | None -> None let mut = if isMutable then Mutable else Immutable - let vspec = + let vspec = Construct.NewVal (logicalName, id.idRange, compiledName, ty, mut, compgen, topValData, vis, vrec, memberInfoOpt, baseOrThis, attrs, inlineFlag, - doc, isTopBinding, isExtrinsic, isIncrClass, isTyFunc, + doc, isTopBinding, isExtrinsic, isIncrClass, isTyFunc, (hasDeclaredTypars || inSig), isGeneratedEventVal, konst, actualParent) - + CheckForAbnormalOperatorNames cenv id.idRange vspec.CoreDisplayName memberInfoOpt PublishValueDefn cenv env declKind vspec @@ -1407,8 +1411,8 @@ let MakeAndPublishVal cenv env (altActualParent, inSig, declKind, vrec, vscheme, let shouldNotifySink (vspec: Val) = match vspec.MemberInfo with // `this` reference named `__`. It's either: - // * generated by compiler for auto properties or - // * provided by source code (i.e. `member __.Method = ...`) + // * generated by compiler for auto properties or + // * provided by source code (i.e. `member _.Method = ...`) // We don't notify sink about it to prevent generating `FSharpSymbol` for it and appearing in completion list. | None when let baseOrThisInfo = vspec.BaseOrThisInfo @@ -1417,8 +1421,8 @@ let MakeAndPublishVal cenv env (altActualParent, inSig, declKind, vrec, vscheme, | _ -> true match cenv.tcSink.CurrentSink with - | Some _ when not vspec.IsCompilerGenerated && shouldNotifySink vspec -> - let nenv = AddFakeNamedValRefToNameEnv vspec.DisplayName env.NameEnv (mkLocalValRef vspec) + | Some _ when not vspec.IsCompilerGenerated && shouldNotifySink vspec -> + let nenv = AddFakeNamedValRefToNameEnv vspec.DisplayName env.NameEnv (mkLocalValRef vspec) CallEnvSink cenv.tcSink (vspec.Range, nenv, env.eAccessRights) let item = Item.Value(mkLocalValRef vspec) CallNameResolutionSink cenv.tcSink (vspec.Range, nenv, item, emptyTyparInst, ItemOccurence.Binding, env.eAccessRights) @@ -1428,12 +1432,12 @@ let MakeAndPublishVal cenv env (altActualParent, inSig, declKind, vrec, vscheme, let MakeAndPublishVals cenv env (altActualParent, inSig, declKind, vrec, valSchemes, attrs, doc, literalValue) = Map.foldBack - (fun name (valscheme: ValScheme) values -> + (fun name (valscheme: ValScheme) values -> Map.add name (MakeAndPublishVal cenv env (altActualParent, inSig, declKind, vrec, valscheme, attrs, doc, literalValue, false), valscheme.TypeScheme) values) valSchemes Map.empty -let MakeAndPublishBaseVal cenv env baseIdOpt ty = +let MakeAndPublishBaseVal cenv env baseIdOpt ty = baseIdOpt |> Option.map (fun (id: Ident) -> let valscheme = ValScheme(id, NonGenericTypeScheme ty, None, None, false, ValInline.Never, BaseVal, None, false, false, false, false) @@ -1441,23 +1445,23 @@ let MakeAndPublishBaseVal cenv env baseIdOpt ty = // Make the "delayed reference" value where the this pointer will reside after calling the base class constructor // Make the value for the 'this' pointer for use within a constructor -let MakeAndPublishSafeThisVal cenv env (thisIdOpt: Ident option) thisTy = - match thisIdOpt with - | Some thisId -> - // for structs, thisTy is a byref - if not (isFSharpObjModelTy cenv.g thisTy) then +let MakeAndPublishSafeThisVal cenv env (thisIdOpt: Ident option) thisTy = + match thisIdOpt with + | Some thisId -> + // for structs, thisTy is a byref + if not (isFSharpObjModelTy cenv.g thisTy) then errorR(Error(FSComp.SR.tcStructsCanOnlyBindThisAtMemberDeclaration(), thisId.idRange)) let valScheme = ValScheme(thisId, NonGenericTypeScheme(mkRefCellTy cenv.g thisTy), None, None, false, ValInline.Never, CtorThisVal, None, false, false, false, false) Some(MakeAndPublishVal cenv env (ParentNone, false, ExpressionBinding, ValNotInRecScope, valScheme, [], XmlDoc.Empty, None, false)) - | None -> - None + | None -> + None //------------------------------------------------------------------------- // Helpers for type inference for recursive bindings -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- /// Fixup the type instantiation at recursive references. Used after the bindings have been /// checked. The fixups are applied by using mutation. @@ -1465,70 +1469,70 @@ let AdjustAndForgetUsesOfRecValue cenv (vrefTgt: ValRef) (valScheme: ValScheme) let (TypeScheme(generalizedTypars, _)) = valScheme.TypeScheme let fty = GeneralizedTypeForTypeScheme valScheme.TypeScheme let lvrefTgt = vrefTgt.Deref - if not (isNil generalizedTypars) then - // Find all the uses of this recursive binding and use mutation to adjust the expressions - // at those points in order to record the inferred type parameters. + if not (isNil generalizedTypars) then + // Find all the uses of this recursive binding and use mutation to adjust the expressions + // at those points in order to record the inferred type parameters. let recUses = cenv.recUses.Find lvrefTgt - recUses - |> List.iter (fun (fixupPoint, m, isComplete) -> - if not isComplete then - // Keep any values for explicit type arguments - let fixedUpExpr = - let vrefFlags, tyargs0 = - match fixupPoint.Value with + recUses + |> List.iter (fun (fixupPoint, m, isComplete) -> + if not isComplete then + // Keep any values for explicit type arguments + let fixedUpExpr = + let vrefFlags, tyargs0 = + match fixupPoint.Value with | Expr.App (Expr.Val (_, vrefFlags, _), _, tyargs0, [], _) -> vrefFlags, tyargs0 - | Expr.Val (_, vrefFlags, _) -> vrefFlags, [] - | _ -> - errorR(Error(FSComp.SR.tcUnexpectedExprAtRecInfPoint(), m)) + | Expr.Val (_, vrefFlags, _) -> vrefFlags, [] + | _ -> + errorR(Error(FSComp.SR.tcUnexpectedExprAtRecInfPoint(), m)) NormalValUse, [] - + let ityargs = generalizeTypars (List.skip (List.length tyargs0) generalizedTypars) primMkApp (Expr.Val (vrefTgt, vrefFlags, m), fty) (tyargs0 @ ityargs) [] m fixupPoint.Value <- fixedUpExpr) vrefTgt.Deref.SetValRec ValNotInRecScope - cenv.recUses <- cenv.recUses.Remove vrefTgt.Deref - + cenv.recUses <- cenv.recUses.Remove vrefTgt.Deref -/// Set the properties of recursive values that are only fully known after inference is complete + +/// Set the properties of recursive values that are only fully known after inference is complete let AdjustRecType (vspec: Val) (ValScheme(_, typeScheme, topValData, _, _, _, _, _, _, _, _, _)) = let fty = GeneralizedTypeForTypeScheme typeScheme vspec.SetType fty vspec.SetValReprInfo topValData vspec.SetValRec (ValInRecScope true) - -/// Record the generated value expression as a place where we will have to -/// adjust using AdjustAndForgetUsesOfRecValue at a letrec point. Every use of a value -/// under a letrec gets used at the _same_ type instantiation. -let RecordUseOfRecValue cenv vrec (vrefTgt: ValRef) vexp m = - match vrec with - | ValInRecScope isComplete -> + +/// Record the generated value expression as a place where we will have to +/// adjust using AdjustAndForgetUsesOfRecValue at a letrec point. Every use of a value +/// under a letrec gets used at the _same_ type instantiation. +let RecordUseOfRecValue cenv vrec (vrefTgt: ValRef) vexp m = + match vrec with + | ValInRecScope isComplete -> let fixupPoint = ref vexp - cenv.recUses <- cenv.recUses.Add (vrefTgt.Deref, (fixupPoint, m, isComplete)) + cenv.recUses <- cenv.recUses.Add (vrefTgt.Deref, (fixupPoint, m, isComplete)) Expr.Link fixupPoint - | ValNotInRecScope -> + | ValNotInRecScope -> vexp type RecursiveUseFixupPoints = RecursiveUseFixupPoints of (Expr ref * range) list -/// Get all recursive references, for fixing up delayed recursion using laziness -let GetAllUsesOfRecValue cenv vrefTgt = +/// Get all recursive references, for fixing up delayed recursion using laziness +let GetAllUsesOfRecValue cenv vrefTgt = RecursiveUseFixupPoints (cenv.recUses.Find vrefTgt |> List.map (fun (fixupPoint, m, _) -> (fixupPoint, m))) //------------------------------------------------------------------------- // Helpers for Generalization -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- let ChooseCanonicalDeclaredTyparsAfterInference g denv declaredTypars m = - declaredTypars |> List.iter (fun tp -> + declaredTypars |> List.iter (fun tp -> let ty = mkTyparTy tp - if not (isAnyParTy g ty) then + if not (isAnyParTy g ty) then error(Error(FSComp.SR.tcLessGenericBecauseOfAnnotation(tp.Name, NicePrint.prettyStringOfTy denv ty), tp.Range))) - + let declaredTypars = NormalizeDeclaredTyparsForEquiRecursiveInference g declaredTypars - if ListSet.hasDuplicates typarEq declaredTypars then + if ListSet.hasDuplicates typarEq declaredTypars then errorR(Error(FSComp.SR.tcConstrainedTypeVariableCannotBeGeneralized(), m)) declaredTypars @@ -1544,18 +1548,18 @@ let ChooseCanonicalValSchemeAfterInference g denv vscheme m = let PlaceTyparsInDeclarationOrder declaredTypars generalizedTypars = declaredTypars @ (generalizedTypars |> List.filter (fun tp -> not (ListSet.contains typarEq tp declaredTypars))) -let SetTyparRigid denv m (tp: Typar) = - match tp.Solution with +let SetTyparRigid denv m (tp: Typar) = + match tp.Solution with | None -> () - | Some ty -> - if tp.IsCompilerGenerated then + | Some ty -> + if tp.IsCompilerGenerated then errorR(Error(FSComp.SR.tcGenericParameterHasBeenConstrained(NicePrint.prettyStringOfTy denv ty), m)) - else + else errorR(Error(FSComp.SR.tcTypeParameterHasBeenConstrained(NicePrint.prettyStringOfTy denv ty), tp.Range)) tp.SetRigidity TyparRigidity.Rigid -let GeneralizeVal cenv denv enclosingDeclaredTypars generalizedTyparsForThisBinding - (PrelimValScheme1(id, explicitTyparInfo, ty, partialValReprInfo, memberInfoOpt, isMutable, inlineFlag, baseOrThis, argAttribs, vis, compgen)) = +let GeneralizeVal cenv denv enclosingDeclaredTypars generalizedTyparsForThisBinding + (PrelimValScheme1(id, explicitTyparInfo, ty, partialValReprInfo, memberInfoOpt, isMutable, inlineFlag, baseOrThis, argAttribs, vis, compgen)) = let (ExplicitTyparInfo(_rigidCopyOfDeclaredTypars, declaredTypars, _)) = explicitTyparInfo @@ -1564,67 +1568,67 @@ let GeneralizeVal cenv denv enclosingDeclaredTypars generalizedTyparsForThisBind let allDeclaredTypars = enclosingDeclaredTypars@declaredTypars let allDeclaredTypars = ChooseCanonicalDeclaredTyparsAfterInference cenv.g denv allDeclaredTypars m - // Trim out anything not in type of the value (as opposed to the type of the r.h.s) - // This is important when a single declaration binds - // multiple generic items, where each item does not use all the polymorphism - // of the r.h.s., e.g. let x, y = None, [] - let computeRelevantTypars thruFlag = + // Trim out anything not in type of the value (as opposed to the type of the r.h.s) + // This is important when a single declaration binds + // multiple generic items, where each item does not use all the polymorphism + // of the r.h.s., e.g. let x, y = None, [] + let computeRelevantTypars thruFlag = let ftps = freeInTypeLeftToRight cenv.g thruFlag ty let generalizedTypars = generalizedTyparsForThisBinding |> List.filter (fun tp -> ListSet.contains typarEq tp ftps) - // Put declared typars first - let generalizedTypars = PlaceTyparsInDeclarationOrder allDeclaredTypars generalizedTypars + // Put declared typars first + let generalizedTypars = PlaceTyparsInDeclarationOrder allDeclaredTypars generalizedTypars generalizedTypars let generalizedTypars = computeRelevantTypars false // Check stability of existence and ordering of type parameters under erasure of type abbreviations let generalizedTyparsLookingThroughTypeAbbreviations = computeRelevantTypars true - if not (generalizedTypars.Length = generalizedTyparsLookingThroughTypeAbbreviations.Length && + if not (generalizedTypars.Length = generalizedTyparsLookingThroughTypeAbbreviations.Length && List.forall2 typarEq generalizedTypars generalizedTyparsLookingThroughTypeAbbreviations) then warning(Error(FSComp.SR.tcTypeParametersInferredAreNotStable(), m)) let hasDeclaredTypars = not (isNil declaredTypars) - // This is just about the only place we form a TypeScheme + // This is just about the only place we form a TypeScheme let tyScheme = TypeScheme(generalizedTypars, ty) PrelimValScheme2(id, tyScheme, partialValReprInfo, memberInfoOpt, isMutable, inlineFlag, baseOrThis, argAttribs, vis, compgen, hasDeclaredTypars) -let GeneralizeVals cenv denv enclosingDeclaredTypars generalizedTypars types = +let GeneralizeVals cenv denv enclosingDeclaredTypars generalizedTypars types = NameMap.map (GeneralizeVal cenv denv enclosingDeclaredTypars generalizedTypars) types -let DontGeneralizeVals types = - let dontGeneralizeVal (PrelimValScheme1(id, _, ty, partialValReprInfoOpt, memberInfoOpt, isMutable, inlineFlag, baseOrThis, argAttribs, vis, compgen)) = +let DontGeneralizeVals types = + let dontGeneralizeVal (PrelimValScheme1(id, _, ty, partialValReprInfoOpt, memberInfoOpt, isMutable, inlineFlag, baseOrThis, argAttribs, vis, compgen)) = PrelimValScheme2(id, NonGenericTypeScheme ty, partialValReprInfoOpt, memberInfoOpt, isMutable, inlineFlag, baseOrThis, argAttribs, vis, compgen, false) NameMap.map dontGeneralizeVal types let InferGenericArityFromTyScheme (TypeScheme(generalizedTypars, _)) partialValReprInfo = TranslatePartialArity generalizedTypars partialValReprInfo -let ComputeIsTyFunc(id: Ident, hasDeclaredTypars, arityInfo: ValReprInfo option) = - hasDeclaredTypars && - (match arityInfo with - | None -> error(Error(FSComp.SR.tcExplicitTypeParameterInvalid(), id.idRange)) - | Some info -> info.NumCurriedArgs = 0) +let ComputeIsTyFunc(id: Ident, hasDeclaredTypars, arityInfo: ValReprInfo option) = + hasDeclaredTypars && + (match arityInfo with + | None -> error(Error(FSComp.SR.tcExplicitTypeParameterInvalid(), id.idRange)) + | Some info -> info.NumCurriedArgs = 0) -let UseSyntacticArity declKind typeScheme partialValReprInfo = - if DeclKind.MustHaveArity declKind then +let UseSyntacticArity declKind typeScheme partialValReprInfo = + if DeclKind.MustHaveArity declKind then Some(InferGenericArityFromTyScheme typeScheme partialValReprInfo) - else + else None -/// Combine the results of InferSynValData and InferArityOfExpr. +/// Combine the results of InferSynValData and InferArityOfExpr. // // The F# spec says that we infer arities from declaration forms and types. // // For example -// let f (a, b) c = 1 // gets arity [2;1] +// let f (a, b) c = 1 // gets arity [2;1] // let f (a: int*int) = 1 // gets arity [2], based on type // let f () = 1 // gets arity [0] // let f = (fun (x: int) (y: int) -> 1) // gets arity [1;1] // let f = (fun (x: int*int) y -> 1) // gets arity [2;1] // // Some of this arity inference is purely syntax directed and done in InferSynValData in ast.fs -// Some is done by InferArityOfExpr. +// Some is done by InferArityOfExpr. // // However, there are some corner cases in this specification. In particular, consider // let f () () = 1 // [0;1] or [0;0]? Answer: [0;1] @@ -1633,40 +1637,40 @@ let UseSyntacticArity declKind typeScheme partialValReprInfo = // let f = (fun (a: unit) -> 1) // [0] or [1]? Answer: [1] // // The particular choice of [1] for -// let f (a: unit) = 1 -// is intended to give a disambiguating form for members that override methods taking a single argument +// let f (a: unit) = 1 +// is intended to give a disambiguating form for members that override methods taking a single argument // instantiated to type "unit", e.g. -// type Base<'a> = +// type Base<'a> = // abstract M: 'a -> unit // -// { new Base with +// { new Base with // member x.M(v: int) = () } // -// { new Base with +// { new Base with // member x.M(v: unit) = () } // -let CombineSyntacticAndInferredArities g declKind rhsExpr prelimScheme = +let CombineSyntacticAndInferredArities g declKind rhsExpr prelimScheme = let (PrelimValScheme2(_, typeScheme, partialValReprInfoOpt, memberInfoOpt, isMutable, _, _, ArgAndRetAttribs(argAttribs, retAttribs), _, _, _)) = prelimScheme match partialValReprInfoOpt, DeclKind.MustHaveArity declKind with | _, false -> None | None, true -> Some(PartialValReprInfo([], ValReprInfo.unnamedRetVal)) // Don't use any expression information for members, where syntax dictates the arity completely - | _ when memberInfoOpt.IsSome -> + | _ when memberInfoOpt.IsSome -> partialValReprInfoOpt - | Some partialValReprInfoFromSyntax, true -> + | Some partialValReprInfoFromSyntax, true -> let (PartialValReprInfo(curriedArgInfosFromSyntax, retInfoFromSyntax)) = partialValReprInfoFromSyntax - let partialArityInfo = - if isMutable then + let partialArityInfo = + if isMutable then PartialValReprInfo ([], retInfoFromSyntax) else - - let (ValReprInfo (_, curriedArgInfosFromExpression, _)) = + + let (ValReprInfo (_, curriedArgInfosFromExpression, _)) = InferArityOfExpr g AllowTypeDirectedDetupling.Yes (GeneralizedTypeForTypeScheme typeScheme) argAttribs retAttribs rhsExpr // Choose between the syntactic arity and the expression-inferred arity // If the syntax specifies an eliminated unit arg, then use that - let choose ai1 ai2 = - match ai1, ai2 with + let choose ai1 ai2 = + match ai1, ai2 with | [], _ -> [] // Dont infer eliminated unit args from the expression if they don't occur syntactically. | ai, [] -> ai @@ -1674,7 +1678,7 @@ let CombineSyntacticAndInferredArities g declKind rhsExpr prelimScheme = | _ when ai1.Length < ai2.Length -> ai2 | _ -> ai1 let rec loop ais1 ais2 = - match ais1, ais2 with + match ais1, ais2 with // If the expression infers additional arguments then use those (this shouldn't happen, since the // arity inference done on the syntactic form should give identical results) | [], ais | ais, [] -> ais @@ -1684,31 +1688,31 @@ let CombineSyntacticAndInferredArities g declKind rhsExpr prelimScheme = Some partialArityInfo -let BuildValScheme declKind partialArityInfoOpt prelimScheme = +let BuildValScheme declKind partialArityInfoOpt prelimScheme = let (PrelimValScheme2(id, typeScheme, _, memberInfoOpt, isMutable, inlineFlag, baseOrThis, _, vis, compgen, hasDeclaredTypars)) = prelimScheme - let topValInfo = - if DeclKind.MustHaveArity declKind then + let topValInfo = + if DeclKind.MustHaveArity declKind then Option.map (InferGenericArityFromTyScheme typeScheme) partialArityInfoOpt else None let isTyFunc = ComputeIsTyFunc(id, hasDeclaredTypars, topValInfo) ValScheme(id, typeScheme, topValInfo, memberInfoOpt, isMutable, inlineFlag, baseOrThis, vis, compgen, false, isTyFunc, hasDeclaredTypars) -let UseCombinedArity g declKind rhsExpr prelimScheme = - let partialArityInfoOpt = CombineSyntacticAndInferredArities g declKind rhsExpr prelimScheme +let UseCombinedArity g declKind rhsExpr prelimScheme = + let partialArityInfoOpt = CombineSyntacticAndInferredArities g declKind rhsExpr prelimScheme BuildValScheme declKind partialArityInfoOpt prelimScheme - -let UseNoArity prelimScheme = + +let UseNoArity prelimScheme = BuildValScheme ExpressionBinding None prelimScheme -/// Make and publish the Val nodes for a collection of simple (non-generic) value specifications +/// Make and publish the Val nodes for a collection of simple (non-generic) value specifications let MakeAndPublishSimpleVals cenv env names = let tyschemes = DontGeneralizeVals names let valSchemes = NameMap.map UseNoArity tyschemes let values = MakeAndPublishVals cenv env (ParentNone, false, ExpressionBinding, ValNotInRecScope, valSchemes, [], XmlDoc.Empty, None) let vspecMap = NameMap.map fst values values, vspecMap - + /// Make and publish the Val nodes for a collection of value specifications at Lambda and Match positions /// /// We merge the additions to the name resolution environment into one using a merged range so all values are brought @@ -1716,8 +1720,8 @@ let MakeAndPublishSimpleVals cenv env names = /// intercepts `NotifyNameResolution` calls being emitted by `MakeAndPublishSimpleVals` let MakeAndPublishSimpleValsForMergedScope cenv env m (names: NameMap<_>) = - let values, vspecMap = - if names.Count <= 1 then + let values, vspecMap = + if names.Count <= 1 then MakeAndPublishSimpleVals cenv env names else let nameResolutions = ResizeArray() @@ -1726,12 +1730,12 @@ let MakeAndPublishSimpleValsForMergedScope cenv env m (names: NameMap<_>) = if not m.IsSynthetic then nameResolutions.Add(pos, item, itemGroup, itemTyparInst, occurence, nenv, ad, m, replacing) - let values, vspecMap = + let values, vspecMap = let sink = { new ITypecheckResultsSink with member this.NotifyEnvWithScope(_, _, _) = () // ignore EnvWithScope reports - member this.NotifyNameResolution(pos, item, itemTyparInst, occurence, nenv, ad, m, replacing) = + member this.NotifyNameResolution(pos, item, itemTyparInst, occurence, nenv, ad, m, replacing) = notifyNameResolution (pos, item, item, itemTyparInst, occurence, nenv, ad, m, replacing) member this.NotifyMethodGroupNameResolution(pos, item, itemGroup, itemTyparInst, occurence, nenv, ad, m, replacing) = @@ -1740,17 +1744,17 @@ let MakeAndPublishSimpleValsForMergedScope cenv env m (names: NameMap<_>) = member this.NotifyExprHasType(_, _, _, _) = assert false // no expr typings in MakeAndPublishSimpleVals member this.NotifyFormatSpecifierLocation(_, _) = () member this.NotifyOpenDeclaration(_) = () - member this.CurrentSourceText = None - member this.FormatStringCheckContext = None } + member this.CurrentSourceText = None + member this.FormatStringCheckContext = None } use _h = WithNewTypecheckResultsSink(sink, cenv.tcSink) MakeAndPublishSimpleVals cenv env names - - if nameResolutions.Count <> 0 then + + if nameResolutions.Count <> 0 then let (_, _, _, _, _, _, ad, m1, _replacing) = nameResolutions.[0] // mergedNameEnv - name resolution env that contains all names // mergedRange - union of ranges of names - let mergedNameEnv, mergedRange = + let mergedNameEnv, mergedRange = ((env.NameEnv, m1), nameResolutions) ||> Seq.fold (fun (nenv, merged) (_, item, _, _, _, _, _, m, _) -> // MakeAndPublishVal creates only Item.Value let item = match item with Item.Value item -> item | _ -> failwith "impossible" @@ -1764,111 +1768,111 @@ let MakeAndPublishSimpleValsForMergedScope cenv env m (names: NameMap<_>) = values, vspecMap - let envinner = AddLocalValMap cenv.tcSink m vspecMap env + let envinner = AddLocalValMap cenv.g cenv.tcSink m vspecMap env envinner, values, vspecMap //------------------------------------------------------------------------- // Helpers to freshen existing types and values, i.e. when a reference // to C<_> occurs then generate C for a fresh type inference variable ?ty. -//------------------------------------------------------------------------- - -let FreshenTyconRef m rigid (tcref: TyconRef) declaredTyconTypars = +//------------------------------------------------------------------------- + +let FreshenTyconRef m rigid (tcref: TyconRef) declaredTyconTypars = let tpsorig = declaredTyconTypars let tps = copyTypars tpsorig - if rigid <> TyparRigidity.Rigid then - tps |> List.iter (fun tp -> tp.SetRigidity rigid) - + if rigid <> TyparRigidity.Rigid then + tps |> List.iter (fun tp -> tp.SetRigidity rigid) + let renaming, tinst = FixupNewTypars m [] [] tpsorig tps (TType_app(tcref, List.map mkTyparTy tpsorig), tps, renaming, TType_app(tcref, tinst)) - -let FreshenPossibleForallTy g m rigid ty = + +let FreshenPossibleForallTy g m rigid ty = let tpsorig, tau = tryDestForallTy g ty - if isNil tpsorig then + if isNil tpsorig then [], [], [], tau else - // tps may be have been equated to other tps in equi-recursive type inference and units-of-measure type inference. Normalize them here + // tps may be have been equated to other tps in equi-recursive type inference and units-of-measure type inference. Normalize them here let tpsorig = NormalizeDeclaredTyparsForEquiRecursiveInference g tpsorig let tps, renaming, tinst = CopyAndFixupTypars m rigid tpsorig tpsorig, tps, tinst, instType renaming tau -let FreshenTyconRef2 m (tcref: TyconRef) = +let FreshenTyconRef2 m (tcref: TyconRef) = let tps, renaming, tinst = FreshenTypeInst m (tcref.Typars m) tps, renaming, tinst, TType_app (tcref, tinst) -/// Given a abstract method, which may be a generic method, freshen the type in preparation -/// to apply it as a constraint to the method that implements the abstract slot -let FreshenAbstractSlot g amap m synTyparDecls absMethInfo = +/// Given a abstract method, which may be a generic method, freshen the type in preparation +/// to apply it as a constraint to the method that implements the abstract slot +let FreshenAbstractSlot g amap m synTyparDecls absMethInfo = - // Work out if an explicit instantiation has been given. If so then the explicit type - // parameters will be made rigid and checked for generalization. If not then auto-generalize - // by making the copy of the type parameters on the virtual being overridden rigid. + // Work out if an explicit instantiation has been given. If so then the explicit type + // parameters will be made rigid and checked for generalization. If not then auto-generalize + // by making the copy of the type parameters on the virtual being overridden rigid. - let typarsFromAbsSlotAreRigid = - - match synTyparDecls with - | SynValTyparDecls(synTypars, infer, _) -> - if infer && not (isNil synTypars) then + let typarsFromAbsSlotAreRigid = + + match synTyparDecls with + | ValTyparDecls(synTypars, _, infer) -> + if infer && not (isNil synTypars) then errorR(Error(FSComp.SR.tcOverridingMethodRequiresAllOrNoTypeParameters(), m)) isNil synTypars - + let (CompiledSig (argTys, retTy, fmtps, _)) = CompiledSigOfMeth g amap m absMethInfo - - // If the virtual method is a generic method then copy its type parameters - let typarsFromAbsSlot, typarInstFromAbsSlot, _ = - let ttps = absMethInfo.GetFormalTyparsOfDeclaringType m + + // If the virtual method is a generic method then copy its type parameters + let typarsFromAbsSlot, typarInstFromAbsSlot, _ = + let ttps = absMethInfo.GetFormalTyparsOfDeclaringType m let ttinst = argsOfAppTy g absMethInfo.ApparentEnclosingType let rigid = if typarsFromAbsSlotAreRigid then TyparRigidity.Rigid else TyparRigidity.Flexible ConstraintSolver.FreshenAndFixupTypars m rigid ttps ttinst fmtps - // Work out the required type of the member - let argTysFromAbsSlot = argTys |> List.mapSquared (instType typarInstFromAbsSlot) - let retTyFromAbsSlot = retTy |> GetFSharpViewOfReturnType g |> instType typarInstFromAbsSlot + // Work out the required type of the member + let argTysFromAbsSlot = argTys |> List.mapSquared (instType typarInstFromAbsSlot) + let retTyFromAbsSlot = retTy |> GetFSharpViewOfReturnType g |> instType typarInstFromAbsSlot typarsFromAbsSlotAreRigid, typarsFromAbsSlot, argTysFromAbsSlot, retTyFromAbsSlot //------------------------------------------------------------------------- // Helpers to typecheck expressions and patterns -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -let BuildFieldMap cenv env isPartial ty flds m = +let BuildFieldMap cenv env isPartial ty flds m = let ad = env.eAccessRights if isNil flds then invalidArg "flds" "BuildFieldMap" let fldCount = flds.Length - - let frefSets = + + let frefSets = let allFields = flds |> List.map (fun ((_, ident), _) -> ident) - flds + flds |> List.map (fun (fld, fldExpr) -> let frefSet = ResolveField cenv.tcSink cenv.nameResolver env.eNameResEnv ad ty fld allFields fld, frefSet, fldExpr) - let relevantTypeSets = + let relevantTypeSets = frefSets |> List.map (fun (_, frefSet, _) -> frefSet |> List.map (fun (FieldResolution(rfinfo, _)) -> rfinfo.TypeInst, rfinfo.TyconRef)) - - let tinst, tcref = + + let tinst, tcref = match List.fold (ListSet.intersect (fun (_, tcref1) (_, tcref2) -> tyconRefEq cenv.g tcref1 tcref2)) (List.head relevantTypeSets) (List.tail relevantTypeSets) with | [tinst, tcref] -> tinst, tcref - | tcrefs -> - if isPartial then + | tcrefs -> + if isPartial then warning (Error(FSComp.SR.tcFieldsDoNotDetermineUniqueRecordType(), m)) // try finding a record type with the same number of fields as the ones that are given. match tcrefs |> List.tryFind (fun (_, tc) -> tc.TrueFieldsAsList.Length = fldCount) with - | Some (tinst, tcref) -> tinst, tcref - | _ -> - // OK, there isn't a unique, good type dictated by the intersection for the field refs. - // We're going to get an error of some kind below. - // Just choose one field ref and let the error come later + | Some (tinst, tcref) -> tinst, tcref + | _ -> + // OK, there isn't a unique, good type dictated by the intersection for the field refs. + // We're going to get an error of some kind below. + // Just choose one field ref and let the error come later let (_, frefSet1, _) = List.head frefSets let (FieldResolution(rfinfo1, _)) = List.head frefSet1 rfinfo1.TypeInst, rfinfo1.TyconRef - - let fldsmap, rfldsList = - ((Map.empty, []), frefSets) ||> List.fold (fun (fs, rfldsList) (fld, frefs, fldExpr) -> + + let fldsmap, rfldsList = + ((Map.empty, []), frefSets) ||> List.fold (fun (fs, rfldsList) (fld, frefs, fldExpr) -> match frefs |> List.filter (fun (FieldResolution(rfinfo2, _)) -> tyconRefEq cenv.g tcref rfinfo2.TyconRef) with - | [FieldResolution(rfinfo2, showDeprecated)] -> + | [FieldResolution(rfinfo2, showDeprecated)] -> // Record the precise resolution of the field for intellisense let item = Item.RecdField(rfinfo2) @@ -1877,12 +1881,12 @@ let BuildFieldMap cenv env isPartial ty flds m = let fref2 = rfinfo2.RecdFieldRef CheckRecdFieldAccessible cenv.amap m env.eAccessRights fref2 |> ignore CheckFSharpAttributes cenv.g fref2.PropertyAttribs m |> CommitOperationResult - if Map.containsKey fref2.FieldName fs then + if Map.containsKey fref2.FieldName fs then errorR (Error(FSComp.SR.tcFieldAppearsTwiceInRecord(fref2.FieldName), m)) if showDeprecated then warning(Deprecated(FSComp.SR.nrRecordTypeNeedsQualifiedAccess(fref2.FieldName, fref2.Tycon.DisplayName) |> snd, m)) - - if not (tyconRefEq cenv.g tcref fref2.TyconRef) then + + if not (tyconRefEq cenv.g tcref fref2.TyconRef) then let (_, frefSet1, _) = List.head frefSets let (FieldResolution(rfinfo1, _)) = List.head frefSet1 errorR (FieldsFromDifferentTypes(env.DisplayEnv, rfinfo1.RecdFieldRef, fref2, m)) @@ -1895,8 +1899,8 @@ let BuildFieldMap cenv env isPartial ty flds m = let rec ApplyUnionCaseOrExn (makerForUnionCase, makerForExnTag) m cenv env overallTy item = let ad = env.eAccessRights - match item with - | Item.ExnCase ecref -> + match item with + | Item.ExnCase ecref -> CheckEntityAttributes cenv.g ecref m |> CommitOperationResult UnifyTypes cenv env m overallTy cenv.g.exn_ty CheckTyconAccessible cenv.amap m ad ecref |> ignore @@ -1906,23 +1910,23 @@ let rec ApplyUnionCaseOrExn (makerForUnionCase, makerForExnTag) m cenv env overa | Item.UnionCase(ucinfo, showDeprecated) -> if showDeprecated then warning(Deprecated(FSComp.SR.nrUnionTypeNeedsQualifiedAccess(ucinfo.Name, ucinfo.Tycon.DisplayName) |> snd, m)) - - let ucref = ucinfo.UnionCaseRef + + let ucref = ucinfo.UnionCaseRef CheckUnionCaseAttributes cenv.g ucref m |> CommitOperationResult CheckUnionCaseAccessible cenv.amap m ad ucref |> ignore - let gtyp2 = actualResultTyOfUnionCase ucinfo.TypeInst ucref + let gtyp2 = actualResultTyOfUnionCase ucinfo.TypeInst ucref let inst = mkTyparInst ucref.TyconRef.TyparsNoRange ucinfo.TypeInst UnifyTypes cenv env m overallTy gtyp2 let mkf = makerForUnionCase(ucref, ucinfo.TypeInst) mkf, actualTysOfUnionCaseFields inst ucref, [ for f in ucref.AllFieldsAsList -> f.Id ] | _ -> invalidArg "item" "not a union case or exception reference" -let ApplyUnionCaseOrExnTypes m cenv env overallTy c = - ApplyUnionCaseOrExn ((fun (a, b) mArgs args -> mkUnionCaseExpr(a, b, args, unionRanges m mArgs)), +let ApplyUnionCaseOrExnTypes m cenv env overallTy c = + ApplyUnionCaseOrExn ((fun (a, b) mArgs args -> mkUnionCaseExpr(a, b, args, unionRanges m mArgs)), (fun a mArgs args -> mkExnExpr (a, args, unionRanges m mArgs))) m cenv env overallTy c - -let ApplyUnionCaseOrExnTypesForPat m cenv env overallTy c = - ApplyUnionCaseOrExn ((fun (a, b) mArgs args -> TPat_unioncase(a, b, args, unionRanges m mArgs)), + +let ApplyUnionCaseOrExnTypesForPat m cenv env overallTy c = + ApplyUnionCaseOrExn ((fun (a, b) mArgs args -> TPat_unioncase(a, b, args, unionRanges m mArgs)), (fun a mArgs args -> TPat_exnconstr(a, args, unionRanges m mArgs))) m cenv env overallTy c let UnionCaseOrExnCheck (env: TcEnv) numArgTys numArgs m = @@ -1930,7 +1934,7 @@ let UnionCaseOrExnCheck (env: TcEnv) numArgTys numArgs m = let TcUnionCaseOrExnField cenv (env: TcEnv) ty1 m c n funcs = let ad = env.eAccessRights - let mkf, argTys, _argNames = + let mkf, argTys, _argNames = match ResolvePatternLongIdent cenv.tcSink cenv.nameResolver AllIdsOK false m ad env.eNameResEnv TypeNameResolutionInfo.Default c with | (Item.UnionCase _ | Item.ExnCase _) as item -> ApplyUnionCaseOrExn funcs m cenv env ty1 item @@ -1943,16 +1947,16 @@ let TcUnionCaseOrExnField cenv (env: TcEnv) ty1 m c n funcs = //------------------------------------------------------------------------- // Helpers for generalizing type variables -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -type GeneralizeConstrainedTyparOptions = - | CanGeneralizeConstrainedTypars +type GeneralizeConstrainedTyparOptions = + | CanGeneralizeConstrainedTypars | DoNotGeneralizeConstrainedTypars -module GeneralizationHelpers = - let ComputeUngeneralizableTypars env = - +module GeneralizationHelpers = + let ComputeUngeneralizableTypars env = + let acc = Collections.Generic.List() for item in env.eUngeneralizableItems do if not item.WillNeverHaveFreeTypars then @@ -1960,49 +1964,49 @@ module GeneralizationHelpers = if not ftps.IsEmpty then for ftp in ftps do acc.Add ftp - + Zset.Create(typarOrder, acc) - let ComputeUnabstractableTycons env = - let accInFreeItem acc (item: UngeneralizableItem) = - let ftycs = - if item.WillNeverHaveFreeTypars then item.CachedFreeLocalTycons else + let ComputeUnabstractableTycons env = + let accInFreeItem acc (item: UngeneralizableItem) = + let ftycs = + if item.WillNeverHaveFreeTypars then item.CachedFreeLocalTycons else let ftyvs = item.GetFreeTyvars() ftyvs.FreeTycons if ftycs.IsEmpty then acc else unionFreeTycons ftycs acc - List.fold accInFreeItem emptyFreeTycons env.eUngeneralizableItems + List.fold accInFreeItem emptyFreeTycons env.eUngeneralizableItems - let ComputeUnabstractableTraitSolutions env = - let accInFreeItem acc (item: UngeneralizableItem) = - let ftycs = - if item.WillNeverHaveFreeTypars then item.CachedFreeTraitSolutions else + let ComputeUnabstractableTraitSolutions env = + let accInFreeItem acc (item: UngeneralizableItem) = + let ftycs = + if item.WillNeverHaveFreeTypars then item.CachedFreeTraitSolutions else let ftyvs = item.GetFreeTyvars() ftyvs.FreeTraitSolutions if ftycs.IsEmpty then acc else unionFreeLocals ftycs acc - List.fold accInFreeItem emptyFreeLocals env.eUngeneralizableItems + List.fold accInFreeItem emptyFreeLocals env.eUngeneralizableItems - let rec IsGeneralizableValue g t = - match t with + let rec IsGeneralizableValue g t = + match t with | Expr.Lambda _ | Expr.TyLambda _ | Expr.Const _ -> true // let f(x: byref) = let v = &x in ... shouldn't generalize "v" - | Expr.Val (vref, _, m) -> not (isByrefLikeTy g m vref.Type) + | Expr.Val (vref, _, m) -> not (isByrefLikeTy g m vref.Type) - // Look through coercion nodes corresponding to introduction of subsumption - | Expr.Op (TOp.Coerce, [inputTy;actualTy], [e1], _) when isFunTy g actualTy && isFunTy g inputTy -> + // Look through coercion nodes corresponding to introduction of subsumption + | Expr.Op (TOp.Coerce, [inputTy;actualTy], [e1], _) when isFunTy g actualTy && isFunTy g inputTy -> IsGeneralizableValue g e1 | Expr.Op (op, _, args, _) -> - let canGeneralizeOp = - match op with + let canGeneralizeOp = + match op with | TOp.Tuple _ -> true | TOp.UnionCase uc -> not (isUnionCaseRefDefinitelyMutable uc) - | TOp.Recd (ctorInfo, tcref) -> - match ctorInfo with + | TOp.Recd (ctorInfo, tcref) -> + match ctorInfo with | RecdExpr -> not (isRecdOrUnionOrStructTyconRefDefinitelyMutable tcref) | RecdExprIsObjInit -> false | TOp.Array -> isNil args @@ -2017,60 +2021,60 @@ module GeneralizationHelpers = binds |> List.forall (fun b -> IsGeneralizableValue g b.Expr) && IsGeneralizableValue g body - | Expr.Let (bind, body, _, _) -> + | Expr.Let (bind, body, _, _) -> not bind.Var.IsMutable && IsGeneralizableValue g bind.Expr && IsGeneralizableValue g body - // Applications of type functions are _not_ normally generalizable unless explicitly marked so - | Expr.App (Expr.Val (vref, _, _), _, _, [], _) when vref.IsTypeFunction -> + // Applications of type functions are _not_ normally generalizable unless explicitly marked so + | Expr.App (Expr.Val (vref, _, _), _, _, [], _) when vref.IsTypeFunction -> HasFSharpAttribute g g.attrib_GeneralizableValueAttribute vref.Attribs - + | Expr.App (e1, _, _, [], _) -> IsGeneralizableValue g e1 | Expr.TyChoose (_, b, _) -> IsGeneralizableValue g b | Expr.Obj (_, ty, _, _, _, _, _) -> isInterfaceTy g ty || isDelegateTy g ty | Expr.Link eref -> IsGeneralizableValue g !eref - | _ -> false + | _ -> false - let CanGeneralizeConstrainedTyparsForDecl declKind = - if DeclKind.CanGeneralizeConstrainedTypars declKind - then CanGeneralizeConstrainedTypars + let CanGeneralizeConstrainedTyparsForDecl declKind = + if DeclKind.CanGeneralizeConstrainedTypars declKind + then CanGeneralizeConstrainedTypars else DoNotGeneralizeConstrainedTypars - - /// Recursively knock out typars we can't generalize. - /// For non-generalized type variables be careful to iteratively knock out + + /// Recursively knock out typars we can't generalize. + /// For non-generalized type variables be careful to iteratively knock out /// both the typars and any typars free in the constraints of the typars - /// into the set that are considered free in the environment. - let rec TrimUngeneralizableTypars genConstrainedTyparFlag inlineFlag (generalizedTypars: Typar list) freeInEnv = - // Do not generalize type variables with a static requirement unless function is marked 'inline' - let generalizedTypars, ungeneralizableTypars1 = + /// into the set that are considered free in the environment. + let rec TrimUngeneralizableTypars genConstrainedTyparFlag inlineFlag (generalizedTypars: Typar list) freeInEnv = + // Do not generalize type variables with a static requirement unless function is marked 'inline' + let generalizedTypars, ungeneralizableTypars1 = if inlineFlag = ValInline.PseudoVal then generalizedTypars, [] - else generalizedTypars |> List.partition (fun tp -> tp.StaticReq = NoStaticReq) + else generalizedTypars |> List.partition (fun tp -> tp.StaticReq = TyparStaticReq.None) - // Do not generalize type variables which would escape their scope - // because they are free in the environment - let generalizedTypars, ungeneralizableTypars2 = + // Do not generalize type variables which would escape their scope + // because they are free in the environment + let generalizedTypars, ungeneralizableTypars2 = List.partition (fun x -> not (Zset.contains x freeInEnv)) generalizedTypars - // Some situations, e.g. implicit class constructions that represent functions as fields, + // Some situations, e.g. implicit class constructions that represent functions as fields, // do not allow generalisation over constrained typars. (since they can not be represented as fields) // // Don't generalize IsCompatFlex type parameters to avoid changing inferred types. - let generalizedTypars, ungeneralizableTypars3 = - generalizedTypars - |> List.partition (fun tp -> + let generalizedTypars, ungeneralizableTypars3 = + generalizedTypars + |> List.partition (fun tp -> (genConstrainedTyparFlag = CanGeneralizeConstrainedTypars || tp.Constraints.IsEmpty) && - not tp.IsCompatFlex) + not tp.IsCompatFlex) if isNil ungeneralizableTypars1 && isNil ungeneralizableTypars2 && isNil ungeneralizableTypars3 then generalizedTypars, freeInEnv - else - let freeInEnv = - unionFreeTypars - (accFreeInTypars CollectAllNoCaching ungeneralizableTypars1 - (accFreeInTypars CollectAllNoCaching ungeneralizableTypars2 - (accFreeInTypars CollectAllNoCaching ungeneralizableTypars3 emptyFreeTyvars))).FreeTypars + else + let freeInEnv = + unionFreeTypars + (accFreeInTypars CollectAllNoCaching ungeneralizableTypars1 + (accFreeInTypars CollectAllNoCaching ungeneralizableTypars2 + (accFreeInTypars CollectAllNoCaching ungeneralizableTypars3 emptyFreeTyvars))).FreeTypars freeInEnv TrimUngeneralizableTypars genConstrainedTyparFlag inlineFlag generalizedTypars freeInEnv @@ -2086,32 +2090,32 @@ module GeneralizationHelpers = let returnTypeFreeTypars = freeInTypeLeftToRight cenv.g false retTy let allUntupledArgTysWithFreeVars = allUntupledArgTys |> List.map (fun ty -> (ty, freeInTypeLeftToRight cenv.g false ty)) - let relevantUniqueSubtypeConstraint (tp: Typar) = + let relevantUniqueSubtypeConstraint (tp: Typar) = // Find a single subtype constraint - match tp.Constraints |> List.partition (function (TyparConstraint.CoercesTo _) -> true | _ -> false) with - | [TyparConstraint.CoercesTo(cxty, _)], others -> - // Throw away null constraints if they are implied - if others |> List.exists (function (TyparConstraint.SupportsNull(_)) -> not (TypeSatisfiesNullConstraint cenv.g m cxty) | _ -> true) + match tp.Constraints |> List.partition (function (TyparConstraint.CoercesTo _) -> true | _ -> false) with + | [TyparConstraint.CoercesTo(cxty, _)], others -> + // Throw away null constraints if they are implied + if others |> List.exists (function (TyparConstraint.SupportsNull(_)) -> not (TypeSatisfiesNullConstraint cenv.g m cxty) | _ -> true) then None else Some cxty | _ -> None - + // Condensation typars can't be used in the constraints of any candidate condensation typars. So compute all the // typars free in the constraints of tyIJ - let lhsConstraintTypars = - allUntupledArgTys |> List.collect (fun ty -> + let lhsConstraintTypars = + allUntupledArgTys |> List.collect (fun ty -> match tryDestTyparTy cenv.g ty with | ValueSome tp -> - match relevantUniqueSubtypeConstraint tp with + match relevantUniqueSubtypeConstraint tp with | Some cxty -> freeInTypeLeftToRight cenv.g false cxty | None -> [] | _ -> []) - let IsCondensationTypar (tp: Typar) = + let IsCondensationTypar (tp: Typar) = // A condensation typar may not a user-generated type variable nor has it been unified with any user type variable - (tp.DynamicReq = TyparDynamicReq.No) && + (tp.DynamicReq = TyparDynamicReq.No) && // A condensation typar must have a single constraint "'a :> A" (Option.isSome (relevantUniqueSubtypeConstraint tp)) && // This is type variable is not used on the r.h.s. of the type @@ -2122,11 +2126,11 @@ module GeneralizationHelpers = (match allUntupledArgTysWithFreeVars |> List.partition (fun (ty, _) -> match tryDestTyparTy cenv.g ty with ValueSome destTypar -> typarEq destTypar tp | _ -> false) with | [_], rest -> not (rest |> List.exists (fun (_, fvs) -> ListSet.contains typarEq tp fvs)) | _ -> false) - + let condensationTypars, generalizedTypars = generalizedTypars |> List.partition IsCondensationTypar - // Condensation solves type variables eagerly and removes them from the generalization set - condensationTypars |> List.iter (fun tp -> + // Condensation solves type variables eagerly and removes them from the generalization set + condensationTypars |> List.iter (fun tp -> ConstraintSolver.ChooseTyparSolutionAndSolve cenv.css denv tp) generalizedTypars @@ -2144,97 +2148,97 @@ module GeneralizationHelpers = resultFirst) = let allDeclaredTypars = NormalizeDeclaredTyparsForEquiRecursiveInference cenv.g allDeclaredTypars - let typarsToAttemptToGeneralize = - if (match exprOpt with None -> true | Some e -> IsGeneralizableValue cenv.g e) + let typarsToAttemptToGeneralize = + if (match exprOpt with None -> true | Some e -> IsGeneralizableValue cenv.g e) then (ListSet.unionFavourLeft typarEq allDeclaredTypars maxInferredTypars) else allDeclaredTypars - let generalizedTypars, freeInEnv = + let generalizedTypars, freeInEnv = TrimUngeneralizableTypars genConstrainedTyparFlag inlineFlag typarsToAttemptToGeneralize freeInEnv - allDeclaredTypars - |> List.iter (fun tp -> + allDeclaredTypars + |> List.iter (fun tp -> if Zset.memberOf freeInEnv tp then let ty = mkTyparTy tp error(Error(FSComp.SR.tcNotSufficientlyGenericBecauseOfScope(NicePrint.prettyStringOfTy denv ty), m))) - - let generalizedTypars = CondenseTypars(cenv, denv, generalizedTypars, tauTy, m) - let generalizedTypars = - if canInferTypars then generalizedTypars + let generalizedTypars = CondenseTypars(cenv, denv, generalizedTypars, tauTy, m) + + let generalizedTypars = + if canInferTypars then generalizedTypars else generalizedTypars |> List.filter (fun tp -> ListSet.contains typarEq tp allDeclaredTypars) - let allConstraints = List.collect (fun (tp: Typar) -> tp.Constraints) generalizedTypars + let allConstraints = List.collect (fun (tp: Typar) -> tp.Constraints) generalizedTypars let generalizedTypars = ConstraintSolver.SimplifyMeasuresInTypeScheme cenv.g resultFirst generalizedTypars tauTy allConstraints - // Generalization turns inference type variables into rigid, quantified type variables, + // Generalization turns inference type variables into rigid, quantified type variables, // (they may be rigid already) generalizedTypars |> List.iter (SetTyparRigid denv m) - + // Generalization removes constraints related to generalized type variables EliminateConstraintsForGeneralizedTypars denv cenv.css m NoTrace generalizedTypars - + generalizedTypars //------------------------------------------------------------------------- // Helpers to freshen existing types and values, i.e. when a reference // to C<_> occurs then generate C for a fresh type inference variable ?ty. - //------------------------------------------------------------------------- + //------------------------------------------------------------------------- - let CheckDeclaredTyparsPermitted (memFlagsOpt, declaredTypars, m) = - match memFlagsOpt with + let CheckDeclaredTyparsPermitted (memFlagsOpt: SynMemberFlags option, declaredTypars, m) = + match memFlagsOpt with | None -> () - | Some memberFlags -> - match memberFlags.MemberKind with - // can't infer extra polymorphism for properties - | MemberKind.PropertyGet - | MemberKind.PropertySet -> - if not (isNil declaredTypars) then + | Some memberFlags -> + match memberFlags.MemberKind with + // can't infer extra polymorphism for properties + | SynMemberKind.PropertyGet + | SynMemberKind.PropertySet -> + if not (isNil declaredTypars) then errorR(Error(FSComp.SR.tcPropertyRequiresExplicitTypeParameters(), m)) - | MemberKind.Constructor -> - if not (isNil declaredTypars) then + | SynMemberKind.Constructor -> + if not (isNil declaredTypars) then errorR(Error(FSComp.SR.tcConstructorCannotHaveTypeParameters(), m)) | _ -> () - /// Properties and Constructors may only generalize the variables associated with the containing class (retrieved from the 'this' pointer) - /// Also check they don't declare explicit typars. - let ComputeCanInferExtraGeneralizableTypars (parentRef, canInferTypars, memFlagsOpt) = + /// Properties and Constructors may only generalize the variables associated with the containing class (retrieved from the 'this' pointer) + /// Also check they don't declare explicit typars. + let ComputeCanInferExtraGeneralizableTypars (parentRef, canInferTypars, memFlagsOpt: SynMemberFlags option) = canInferTypars && - (match memFlagsOpt with + (match memFlagsOpt with | None -> true - | Some memberFlags -> - match memberFlags.MemberKind with - // can't infer extra polymorphism for properties - | MemberKind.PropertyGet | MemberKind.PropertySet -> false - // can't infer extra polymorphism for class constructors - | MemberKind.ClassConstructor -> false - // can't infer extra polymorphism for constructors - | MemberKind.Constructor -> false - // feasible to infer extra polymorphism + | Some memberFlags -> + match memberFlags.MemberKind with + // can't infer extra polymorphism for properties + | SynMemberKind.PropertyGet | SynMemberKind.PropertySet -> false + // can't infer extra polymorphism for class constructors + | SynMemberKind.ClassConstructor -> false + // can't infer extra polymorphism for constructors + | SynMemberKind.Constructor -> false + // feasible to infer extra polymorphism | _ -> true) && - (match parentRef with - | Parent tcref -> not tcref.IsFSharpDelegateTycon + (match parentRef with + | Parent tcref -> not tcref.IsFSharpDelegateTycon | _ -> true) // no generic parameters inferred for 'Invoke' method - + //------------------------------------------------------------------------- -// ComputeInlineFlag +// ComputeInlineFlag //------------------------------------------------------------------------- -let ComputeInlineFlag memFlagsOption isInline isMutable m = - let inlineFlag = - // Mutable values may never be inlined - // Constructors may never be inlined - // Calls to virtual/abstract slots may never be inlined - if isMutable || - (match memFlagsOption with +let ComputeInlineFlag (memFlagsOption: SynMemberFlags option) isInline isMutable m = + let inlineFlag = + // Mutable values may never be inlined + // Constructors may never be inlined + // Calls to virtual/abstract slots may never be inlined + if isMutable || + (match memFlagsOption with | None -> false - | Some x -> (x.MemberKind = MemberKind.Constructor) || x.IsDispatchSlot || x.IsOverrideOrExplicitImpl) - then ValInline.Never - elif isInline then ValInline.PseudoVal + | Some x -> (x.MemberKind = SynMemberKind.Constructor) || x.IsDispatchSlot || x.IsOverrideOrExplicitImpl) + then ValInline.Never + elif isInline then ValInline.PseudoVal else ValInline.Optional - if isInline && (inlineFlag <> ValInline.PseudoVal) then + if isInline && (inlineFlag <> ValInline.PseudoVal) then errorR(Error(FSComp.SR.tcThisValueMayNotBeInlined(), m)) inlineFlag @@ -2246,185 +2250,192 @@ let ComputeInlineFlag memFlagsOption isInline isMutable m = // member, normal function, static member etc.) and make some // name-resolution-sensitive adjustments to the syntax tree. // -// One part of this "normalization" ensures: -// "let SynPat.LongIdent(f) = e" when f not a datatype constructor --> let Pat_var(f) = e" -// "let SynPat.LongIdent(f) pat = e" when f not a datatype constructor --> let Pat_var(f) = \pat. e" -// "let (SynPat.LongIdent(f) : ty) = e" when f not a datatype constructor --> let (Pat_var(f) : ty) = e" -// "let (SynPat.LongIdent(f) : ty) pat = e" when f not a datatype constructor --> let (Pat_var(f) : ty) = \pat. e" -// -// This is because the first lambda in a function definition "let F x = e" -// now looks like a constructor application, i.e. let (F x) = e ... -// also let A.F x = e ... -// also let f x = e ... +// One part of this "normalization" ensures: +// "let SynPat.LongIdent(f) = e" when f not a datatype constructor --> let Pat_var(f) = e" +// "let SynPat.LongIdent(f) pat = e" when f not a datatype constructor --> let Pat_var(f) = \pat. e" +// "let (SynPat.LongIdent(f) : ty) = e" when f not a datatype constructor --> let (Pat_var(f) : ty) = e" +// "let (SynPat.LongIdent(f) : ty) pat = e" when f not a datatype constructor --> let (Pat_var(f) : ty) = \pat. e" +// +// This is because the first lambda in a function definition "let F x = e" +// now looks like a constructor application, i.e. let (F x) = e ... +// also let A.F x = e ... +// also let f x = e ... // // The other parts turn property definitions into method definitions. -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- + - // NormalizedBindingRhs records the r.h.s. of a binding after some munging just before type checking. -// NOTE: This is a bit of a mess. In the early implementation of F# we decided -// to have the parser convert "let f x = e" into -// "let f = fun x -> e". This is called "pushing" a pattern across to the right hand side. Complex -// patterns (e.g. non-tuple patterns) result in a computation on the right. -// However, this approach really isn't that great - especially since -// the language is now considerably more complex, e.g. we use -// type information from the first (but not the second) form in -// type inference for recursive bindings, and the first form -// may specify .NET attributes for arguments. There are still many -// relics of this approach around, e.g. the expression in BindingRhs -// below is of the second form. However, to extract relevant information -// we keep a record of the pats and optional explicit return type already pushed -// into expression so we can use any user-given type information from these -type NormalizedBindingRhs = +// NOTE: This is a bit of a mess. In the early implementation of F# we decided +// to have the parser convert "let f x = e" into +// "let f = fun x -> e". This is called "pushing" a pattern across to the right hand side. Complex +// patterns (e.g. non-tuple patterns) result in a computation on the right. +// However, this approach really isn't that great - especially since +// the language is now considerably more complex, e.g. we use +// type information from the first (but not the second) form in +// type inference for recursive bindings, and the first form +// may specify .NET attributes for arguments. There are still many +// relics of this approach around, e.g. the expression in BindingRhs +// below is of the second form. However, to extract relevant information +// we keep a record of the pats and optional explicit return type already pushed +// into expression so we can use any user-given type information from these +type NormalizedBindingRhs = | NormalizedBindingRhs of simplePats: SynSimplePats list * returnTyOpt: SynBindingReturnInfo option * - rhsExpr: SynExpr + rhsExpr: SynExpr -let PushOnePatternToRhs (cenv: cenv) isMember p (NormalizedBindingRhs(spatsL, rtyOpt, rhsExpr)) = +let PushOnePatternToRhs (cenv: cenv) isMember p (NormalizedBindingRhs(spatsL, rtyOpt, rhsExpr)) = let spats, rhsExpr = PushPatternToExpr cenv.synArgNameGenerator isMember p rhsExpr NormalizedBindingRhs(spats :: spatsL, rtyOpt, rhsExpr) -type NormalizedBindingPatternInfo = - NormalizedBindingPat of SynPat * NormalizedBindingRhs * SynValData * SynValTyparDecls +type NormalizedBindingPatternInfo = + NormalizedBindingPat of SynPat * NormalizedBindingRhs * SynValData * SynValTyparDecls /// Represents a syntactic, unchecked binding after the resolution of the name resolution status of pattern /// constructors and after "pushing" all complex patterns to the right hand side. -type NormalizedBinding = - | NormalizedBinding of +type NormalizedBinding = + | NormalizedBinding of visibility: SynAccess option * kind: SynBindingKind * mustInline: bool * isMutable: bool * - attribs: SynAttribute list * + attribs: SynAttribute list * xmlDoc: XmlDoc * - typars: SynValTyparDecls * - valSynData: SynValData * - pat: SynPat * + typars: SynValTyparDecls * + valSynData: SynValData * + pat: SynPat * rhsExpr: NormalizedBindingRhs * mBinding: range * - spBinding: DebugPointForBinding + spBinding: DebugPointAtBinding -type IsObjExprBinding = - | ObjExprBinding +type IsObjExprBinding = + | ObjExprBinding | ValOrMemberBinding module BindingNormalization = - /// Push a bunch of pats at once. They may contain patterns, e.g. let f (A x) (B y) = ... - /// In this case the semantics is let f a b = let A x = a in let B y = b - let private PushMultiplePatternsToRhs (cenv: cenv) isMember ps (NormalizedBindingRhs(spatsL, rtyOpt, rhsExpr)) = + /// Push a bunch of pats at once. They may contain patterns, e.g. let f (A x) (B y) = ... + /// In this case the semantics is let f a b = let A x = a in let B y = b + let private PushMultiplePatternsToRhs (cenv: cenv) isMember ps (NormalizedBindingRhs(spatsL, rtyOpt, rhsExpr)) = let spatsL2, rhsExpr = PushCurriedPatternsToExpr cenv.synArgNameGenerator rhsExpr.Range isMember ps rhsExpr NormalizedBindingRhs(spatsL2@spatsL, rtyOpt, rhsExpr) - let private MakeNormalizedStaticOrValBinding cenv isObjExprBinding id vis typars args rhsExpr valSynData = - let (SynValData(memberFlagsOpt, _, _)) = valSynData + let private MakeNormalizedStaticOrValBinding cenv isObjExprBinding id vis typars args rhsExpr valSynData = + let (SynValData(memberFlagsOpt, _, _)) = valSynData NormalizedBindingPat(mkSynPatVar vis id, PushMultiplePatternsToRhs cenv ((isObjExprBinding = ObjExprBinding) || Option.isSome memberFlagsOpt) args rhsExpr, valSynData, typars) - let private MakeNormalizedInstanceMemberBinding cenv thisId memberId toolId vis m typars args rhsExpr valSynData = + let private MakeNormalizedInstanceMemberBinding cenv thisId memberId toolId vis m typars args rhsExpr valSynData = NormalizedBindingPat(SynPat.InstanceMember(thisId, memberId, toolId, vis, m), PushMultiplePatternsToRhs cenv true args rhsExpr, valSynData, typars) - let private NormalizeStaticMemberBinding cenv memberFlags valSynData id vis typars args m rhsExpr = - let (SynValData(_, valSynInfo, thisIdOpt)) = valSynData - if memberFlags.IsInstance then - // instance method without adhoc "this" argument + let private NormalizeStaticMemberBinding cenv (memberFlags: SynMemberFlags) valSynData id vis typars args m rhsExpr = + let (SynValData(_, valSynInfo, thisIdOpt)) = valSynData + if memberFlags.IsInstance then + // instance method without adhoc "this" argument error(Error(FSComp.SR.tcInstanceMemberRequiresTarget(), m)) - match args, memberFlags.MemberKind with - | _, MemberKind.PropertyGetSet -> error(Error(FSComp.SR.tcUnexpectedPropertyInSyntaxTree(), m)) - | [], MemberKind.ClassConstructor -> error(Error(FSComp.SR.tcStaticInitializerRequiresArgument(), m)) - | [], MemberKind.Constructor -> error(Error(FSComp.SR.tcObjectConstructorRequiresArgument(), m)) - | [_], MemberKind.ClassConstructor - | [_], MemberKind.Constructor -> MakeNormalizedStaticOrValBinding cenv ValOrMemberBinding id vis typars args rhsExpr valSynData - // Static property declared using 'static member P = expr': transformed to a method taking a "unit" argument - // static property: these transformed into methods taking one "unit" argument - | [], MemberKind.Member -> - let memberFlags = {memberFlags with MemberKind = MemberKind.PropertyGet} + match args, memberFlags.MemberKind with + | _, SynMemberKind.PropertyGetSet -> error(Error(FSComp.SR.tcUnexpectedPropertyInSyntaxTree(), m)) + | [], SynMemberKind.ClassConstructor -> error(Error(FSComp.SR.tcStaticInitializerRequiresArgument(), m)) + | [], SynMemberKind.Constructor -> error(Error(FSComp.SR.tcObjectConstructorRequiresArgument(), m)) + | [_], SynMemberKind.ClassConstructor + | [_], SynMemberKind.Constructor -> MakeNormalizedStaticOrValBinding cenv ValOrMemberBinding id vis typars args rhsExpr valSynData + // Static property declared using 'static member P = expr': transformed to a method taking a "unit" argument + // static property: these transformed into methods taking one "unit" argument + | [], SynMemberKind.Member -> + let memberFlags = {memberFlags with MemberKind = SynMemberKind.PropertyGet} let valSynData = SynValData(Some memberFlags, valSynInfo, thisIdOpt) - NormalizedBindingPat(mkSynPatVar vis id, - PushOnePatternToRhs cenv true (SynPat.Const(SynConst.Unit, m)) rhsExpr, - valSynData, + NormalizedBindingPat(mkSynPatVar vis id, + PushOnePatternToRhs cenv true (SynPat.Const(SynConst.Unit, m)) rhsExpr, + valSynData, typars) | _ -> MakeNormalizedStaticOrValBinding cenv ValOrMemberBinding id vis typars args rhsExpr valSynData - let private NormalizeInstanceMemberBinding cenv memberFlags valSynData thisId memberId (toolId: Ident option) vis typars args m rhsExpr = - let (SynValData(_, valSynInfo, thisIdOpt)) = valSynData - if not memberFlags.IsInstance then - // static method with adhoc "this" argument + let private NormalizeInstanceMemberBinding cenv (memberFlags: SynMemberFlags) valSynData thisId memberId (toolId: Ident option) vis typars args m rhsExpr = + let (SynValData(_, valSynInfo, thisIdOpt)) = valSynData + if not memberFlags.IsInstance then + // static method with adhoc "this" argument error(Error(FSComp.SR.tcStaticMemberShouldNotHaveThis(), m)) - match args, memberFlags.MemberKind with - | _, MemberKind.ClassConstructor -> error(Error(FSComp.SR.tcExplicitStaticInitializerSyntax(), m)) - | _, MemberKind.Constructor -> error(Error(FSComp.SR.tcExplicitObjectConstructorSyntax(), m)) - | _, MemberKind.PropertyGetSet -> error(Error(FSComp.SR.tcUnexpectedPropertySpec(), m)) - // Instance property declared using 'x.Member': transformed to methods taking a "this" and a "unit" argument - // We push across the 'this' arg in mk_rec_binds - | [], MemberKind.Member -> - let memberFlags = {memberFlags with MemberKind = MemberKind.PropertyGet} + match args, memberFlags.MemberKind with + | _, SynMemberKind.ClassConstructor -> error(Error(FSComp.SR.tcExplicitStaticInitializerSyntax(), m)) + | _, SynMemberKind.Constructor -> error(Error(FSComp.SR.tcExplicitObjectConstructorSyntax(), m)) + | _, SynMemberKind.PropertyGetSet -> error(Error(FSComp.SR.tcUnexpectedPropertySpec(), m)) + // Instance property declared using 'x.Member': transformed to methods taking a "this" and a "unit" argument + // We push across the 'this' arg in mk_rec_binds + | [], SynMemberKind.Member -> + let memberFlags = {memberFlags with MemberKind = SynMemberKind.PropertyGet} NormalizedBindingPat - (SynPat.InstanceMember(thisId, memberId, toolId, vis, m), - PushOnePatternToRhs cenv true (SynPat.Const(SynConst.Unit, m)) rhsExpr, - // Update the member info to record that this is a MemberKind.PropertyGet - SynValData(Some memberFlags, valSynInfo, thisIdOpt), + (SynPat.InstanceMember(thisId, memberId, toolId, vis, m), + PushOnePatternToRhs cenv true (SynPat.Const(SynConst.Unit, m)) rhsExpr, + // Update the member info to record that this is a SynMemberKind.PropertyGet + SynValData(Some memberFlags, valSynInfo, thisIdOpt), typars) | _ -> MakeNormalizedInstanceMemberBinding cenv thisId memberId toolId vis m typars args rhsExpr valSynData let private NormalizeBindingPattern cenv nameResolver isObjExprBinding (env: TcEnv) valSynData pat rhsExpr = let ad = env.AccessRights - let (SynValData(memberFlagsOpt, _, _)) = valSynData - let rec normPattern pat = - // One major problem with versions of F# prior to 1.9.x was that data constructors easily 'pollute' the namespace - // of available items, to the point that you can't even define a function with the same name as an existing union case. - match pat with + let (SynValData(memberFlagsOpt, _, _)) = valSynData + let rec normPattern pat = + // One major problem with versions of F# prior to 1.9.x was that data constructors easily 'pollute' the namespace + // of available items, to the point that you can't even define a function with the same name as an existing union case. + match pat with | SynPat.FromParseError(p, _) -> normPattern p | SynPat.LongIdent (LongIdentWithDots(longId, _), toolId, tyargs, SynArgPats.Pats args, vis, m) -> let typars = match tyargs with None -> inferredTyparDecls | Some typars -> typars - match memberFlagsOpt with - | None -> + match memberFlagsOpt with + | None -> match ResolvePatternLongIdent cenv.tcSink nameResolver AllIdsOK true m ad env.NameEnv TypeNameResolutionInfo.Default longId with - | Item.NewDef id -> + | Item.NewDef id -> if id.idText = opNameCons then NormalizedBindingPat(pat, rhsExpr, valSynData, typars) else - if isObjExprBinding = ObjExprBinding then + if isObjExprBinding = ObjExprBinding then errorR(Deprecated(FSComp.SR.tcObjectExpressionFormDeprecated(), m)) MakeNormalizedStaticOrValBinding cenv isObjExprBinding id vis typars args rhsExpr valSynData - | _ -> + | _ -> error(Error(FSComp.SR.tcInvalidDeclaration(), m)) - | Some memberFlags -> - match longId with - // x.Member in member binding patterns. - | [thisId;memberId] -> NormalizeInstanceMemberBinding cenv memberFlags valSynData thisId memberId toolId vis typars args m rhsExpr - | [memberId] -> NormalizeStaticMemberBinding cenv memberFlags valSynData memberId vis typars args m rhsExpr + | Some memberFlags -> + match longId with + // x.Member in member binding patterns. + | [thisId;memberId] -> NormalizeInstanceMemberBinding cenv memberFlags valSynData thisId memberId toolId vis typars args m rhsExpr + | [memberId] -> + if memberFlags.IsInstance then + // instance method without adhoc "this" argument + errorR(Error(FSComp.SR.tcInstanceMemberRequiresTarget(), memberId.idRange)) + let thisId = ident ("_", m) + NormalizeInstanceMemberBinding cenv memberFlags valSynData thisId memberId toolId vis typars args m rhsExpr + else + NormalizeStaticMemberBinding cenv memberFlags valSynData memberId vis typars args m rhsExpr | _ -> NormalizedBindingPat(pat, rhsExpr, valSynData, typars) - // Object constructors are normalized in TcLetrec - // Here we are normalizing member definitions with simple (not long) ids, - // e.g. "static member x = 3" and "member x = 3" (instance with missing "this." comes through here. It is trapped and generates a warning) - | SynPat.Named (SynPat.Wild _, id, false, vis, m) - when - (match memberFlagsOpt with - | None -> false - | Some memberFlags -> - memberFlags.MemberKind <> MemberKind.Constructor && - memberFlags.MemberKind <> MemberKind.ClassConstructor) -> - NormalizeStaticMemberBinding cenv (Option.get memberFlagsOpt) valSynData id vis inferredTyparDecls [] m rhsExpr - - | SynPat.Typed(pat', x, y) -> + // Object constructors are normalized in TcLetrec + // Here we are normalizing member definitions with simple (not long) ids, + // e.g. "static member x = 3" and "member x = 3" (instance with missing "this." comes through here. It is trapped and generates a warning) + | SynPat.Named(id, false, vis, m) + when + (match memberFlagsOpt with + | None -> false + | Some memberFlags -> + memberFlags.MemberKind <> SynMemberKind.Constructor && + memberFlags.MemberKind <> SynMemberKind.ClassConstructor) -> + NormalizeStaticMemberBinding cenv (Option.get memberFlagsOpt) valSynData id vis inferredTyparDecls [] m rhsExpr + + | SynPat.Typed(pat', x, y) -> let (NormalizedBindingPat(pat'', e'', valSynData, typars)) = normPattern pat' NormalizedBindingPat(SynPat.Typed(pat'', x, y), e'', valSynData, typars) - | SynPat.Attrib(_, _, m) -> + | SynPat.Attrib(_, _, m) -> error(Error(FSComp.SR.tcAttributesInvalidInPatterns(), m)) | _ -> - NormalizedBindingPat(pat, rhsExpr, valSynData, inferredTyparDecls) + NormalizedBindingPat(pat, rhsExpr, valSynData, inferredTyparDecls) normPattern pat - let NormalizeBinding isObjExprBinding cenv (env: TcEnv) binding = - match binding with - | Binding (vis, bkind, isInline, isMutable, Attributes attrs, doc, valSynData, p, retInfo, rhsExpr, mBinding, spBind) -> - let (NormalizedBindingPat(pat, rhsExpr, valSynData, typars)) = + let NormalizeBinding isObjExprBinding cenv (env: TcEnv) binding = + match binding with + | SynBinding (vis, bkind, isInline, isMutable, Attributes attrs, doc, valSynData, p, retInfo, rhsExpr, mBinding, spBind) -> + let (NormalizedBindingPat(pat, rhsExpr, valSynData, typars)) = NormalizeBindingPattern cenv cenv.nameResolver isObjExprBinding env valSynData p (NormalizedBindingRhs ([], retInfo, rhsExpr)) let paramNames = Some valSynData.SynValInfo.ArgNames let doc = doc.ToXmlDoc(true, paramNames) @@ -2434,15 +2445,15 @@ module BindingNormalization = // input is: // [] // member x.P with get = fun () -> e -// --> +// --> // member x.add_P< >(argName) = (e).AddHandler(argName) // member x.remove_P< >(argName) = (e).RemoveHandler(argName) -module EventDeclarationNormalization = - let ConvertSynInfo m (SynValInfo(argInfos, retInfo)) = +module EventDeclarationNormalization = + let ConvertSynInfo m (SynValInfo(argInfos, retInfo)) = // reconstitute valSynInfo by adding the argument - let argInfos = - match argInfos with + let argInfos = + match argInfos with | [[thisArgInfo];[]] -> [[thisArgInfo];SynInfo.unnamedTopArg] // instance property getter | [[]] -> [SynInfo.unnamedTopArg] // static property getter | _ -> error(BadEventTransformation m) @@ -2451,24 +2462,24 @@ module EventDeclarationNormalization = SynValInfo(argInfos, retInfo) // The property x.P becomes methods x.add_P and x.remove_P - let ConvertMemberFlags memberFlags = { memberFlags with MemberKind = MemberKind.Member } + let ConvertMemberFlags (memberFlags: SynMemberFlags) = { memberFlags with MemberKind = SynMemberKind.Member } let private ConvertMemberFlagsOpt m memberFlagsOpt = - match memberFlagsOpt with + match memberFlagsOpt with | Some memberFlags -> Some (ConvertMemberFlags memberFlags) | _ -> error(BadEventTransformation m) let private ConvertSynData m valSynData = - let (SynValData(memberFlagsOpt, valSynInfo, thisIdOpt)) = valSynData + let (SynValData(memberFlagsOpt, valSynInfo, thisIdOpt)) = valSynData let memberFlagsOpt = ConvertMemberFlagsOpt m memberFlagsOpt let valSynInfo = ConvertSynInfo m valSynInfo SynValData(memberFlagsOpt, valSynInfo, thisIdOpt) - - let rec private RenameBindingPattern f declPattern = - match declPattern with + + let rec private RenameBindingPattern f declPattern = + match declPattern with | SynPat.FromParseError(p, _) -> RenameBindingPattern f p | SynPat.Typed(pat', _, _) -> RenameBindingPattern f pat' - | SynPat.Named (SynPat.Wild m1, id, x2, vis2, m) -> SynPat.Named (SynPat.Wild m1, ident(f id.idText, id.idRange), x2, vis2, m) + | SynPat.Named (id, x2, vis2, m) -> SynPat.Named (ident(f id.idText, id.idRange), x2, vis2, m) | SynPat.InstanceMember(thisId, id, toolId, vis2, m) -> SynPat.InstanceMember(thisId, ident(f id.idText, id.idRange), toolId, vis2, m) | _ -> error(Error(FSComp.SR.tcOnlySimplePatternsInLetRec(), declPattern.Range)) @@ -2476,108 +2487,108 @@ module EventDeclarationNormalization = /// annotated with [] let GenerateExtraBindings cenv (bindingAttribs, binding) = let (NormalizedBinding(vis1, bindingKind, isInline, isMutable, _, bindingXmlDoc, _synTyparDecls, valSynData, declPattern, bindingRhs, mBinding, spBind)) = binding - if CompileAsEvent cenv.g bindingAttribs then + if CompileAsEvent cenv.g bindingAttribs then - let MakeOne (prefix, target) = + let MakeOne (prefix, target) = let declPattern = RenameBindingPattern (fun s -> prefix + s) declPattern let argName = "handler" // modify the rhs and argument data - let bindingRhs, valSynData = + let bindingRhs, valSynData = let (NormalizedBindingRhs(_, _, rhsExpr)) = bindingRhs let m = rhsExpr.Range // reconstitute valSynInfo by adding the argument let valSynData = ConvertSynData m valSynData - match rhsExpr with + match rhsExpr with // Detect 'fun () -> e' which results from the compilation of a property getter | SynExpr.Lambda (_, _, SynSimplePats.SimplePats([], _), trueRhsExpr, _, m) -> let rhsExpr = mkSynApp1 (SynExpr.DotGet (SynExpr.Paren (trueRhsExpr, range0, None, m), range0, LongIdentWithDots([ident(target, m)], []), m)) (SynExpr.Ident (ident(argName, m))) m - + // reconstitute rhsExpr let bindingRhs = NormalizedBindingRhs([], None, rhsExpr) - // add the argument to the expression - let bindingRhs = PushOnePatternToRhs cenv true (mkSynPatVar None (ident (argName, mBinding))) bindingRhs - + // add the argument to the expression + let bindingRhs = PushOnePatternToRhs cenv true (mkSynPatVar None (ident (argName, mBinding))) bindingRhs + bindingRhs, valSynData - | _ -> + | _ -> error(BadEventTransformation m) // reconstitute the binding - NormalizedBinding(vis1, bindingKind, isInline, isMutable, [], bindingXmlDoc, noInferredTypars, valSynData, declPattern, bindingRhs, mBinding, spBind) + NormalizedBinding(vis1, bindingKind, isInline, isMutable, [], bindingXmlDoc, noInferredTypars, valSynData, declPattern, bindingRhs, mBinding, spBind) [ MakeOne ("add_", "AddHandler"); MakeOne ("remove_", "RemoveHandler") ] - else + else [] /// Make a copy of the "this" type for a generic object type, e.g. List<'T> --> List<'?> for a fresh inference variable. /// Also adjust the "this" type to take into account whether the type is a struct. -let FreshenObjectArgType cenv m rigid tcref isExtrinsic declaredTyconTypars = +let FreshenObjectArgType cenv m rigid tcref isExtrinsic declaredTyconTypars = #if EXTENDED_EXTENSION_MEMBERS // indicates if extension members can add additional constraints to type parameters let tcrefObjTy, enclosingDeclaredTypars, renaming, objTy = FreshenTyconRef m (if isExtrinsic then TyparRigidity.Flexible else rigid) tcref declaredTyconTypars #else let tcrefObjTy, enclosingDeclaredTypars, renaming, objTy = FreshenTyconRef m rigid tcref declaredTyconTypars #endif // Struct members have a byref 'this' type (unless they are extrinsic extension members) - let thisTy = - if not isExtrinsic && tcref.IsStructOrEnumTycon then - if isRecdOrStructTyReadOnly cenv.g m objTy then - mkInByrefTy cenv.g objTy + let thisTy = + if not isExtrinsic && tcref.IsStructOrEnumTycon then + if isRecdOrStructTyReadOnly cenv.g m objTy then + mkInByrefTy cenv.g objTy else - mkByrefTy cenv.g objTy - else + mkByrefTy cenv.g objTy + else objTy tcrefObjTy, enclosingDeclaredTypars, renaming, objTy, thisTy // The early generalization rule of F# 2.0 can be unsound for members in generic types (Bug DevDiv2 10649). -// It gives rise to types like "Forall T. ?X -> ?Y" where ?X and ?Y are later discovered to involve T. +// It gives rise to types like "Forall T. ?X -> ?Y" where ?X and ?Y are later discovered to involve T. // // For example: -// type C<'T>() = +// type C<'T>() = // let mutable x = Unchecked.defaultof<_> // unknown inference variable ?X -// static member A() = x +// static member A() = x // // At this point A is generalized early to "Forall T. unit -> ?X" -// static member B1() = C.A() +// static member B1() = C.A() // // At this point during type inference, the return type of C.A() is '?X' // // After type inference, the return type of C.A() is 'string' -// static member B2() = C.A() +// static member B2() = C.A() // // At this point during type inference, the return type of C.A() is '?X' // // After type inference, the return type of C.A() is 'int' // member this.C() = (x: 'T) // // At this point during type inference the type of 'x' is inferred to be 'T' // -// Here "A" is generalized too early. +// Here "A" is generalized too early. // // Ideally we would simply generalize "A" later, when it is known to be // sound. However, that can lead to other problems (e.g. some programs that typecheck today would no longer // be accepted). As a result, we deal with this unsoundness by an adhoc post-type-checking -// consistency check for recursive uses of "A" with explicit instantiations within the recursive +// consistency check for recursive uses of "A" with explicit instantiations within the recursive // scope of "A". let TcValEarlyGeneralizationConsistencyCheck cenv (env: TcEnv) (v: Val, vrec, tinst, vty, tau, m) = - match vrec with + match vrec with | ValInRecScope isComplete when isComplete && not (isNil tinst) -> //printfn "pushing post-inference check for '%s', vty = '%s'" v.DisplayName (DebugPrint.showType vty) - cenv.postInferenceChecks.Add (fun () -> + cenv.postInferenceChecks.Add (fun () -> //printfn "running post-inference check for '%s'" v.DisplayName //printfn "tau = '%s'" (DebugPrint.showType tau) //printfn "vty = '%s'" (DebugPrint.showType vty) let tpsorig, tau2 = tryDestForallTy cenv.g vty //printfn "tau2 = '%s'" (DebugPrint.showType tau2) - if not (isNil tpsorig) then + if not (isNil tpsorig) then let tpsorig = NormalizeDeclaredTyparsForEquiRecursiveInference cenv.g tpsorig let tau3 = instType (mkTyparInst tpsorig tinst) tau2 //printfn "tau3 = '%s'" (DebugPrint.showType tau3) if not (AddCxTypeEqualsTypeUndoIfFailed env.DisplayEnv cenv.css m tau tau3) then - let txt = bufs (fun buf -> NicePrint.outputQualifiedValSpec env.DisplayEnv buf v) + let txt = bufs (fun buf -> NicePrint.outputQualifiedValSpec env.DisplayEnv cenv.infoReader buf (mkLocalValRef v)) error(Error(FSComp.SR.tcInferredGenericTypeGivesRiseToInconsistency(v.DisplayName, txt), m))) | _ -> () /// TcVal. "Use" a value, normally at a fresh type instance (unless optInst is -/// given). optInst is set when an explicit type instantiation is given, e.g. +/// given). optInst is set when an explicit type instantiation is given, e.g. /// Seq.empty /// In this case the vrefFlags inside optInst are just NormalValUse. /// @@ -2589,167 +2600,167 @@ let TcValEarlyGeneralizationConsistencyCheck cenv (env: TcEnv) (v: Val, vrec, ti /// | CtorValUsedAsSelfInit "new() = new OwnType(3)" /// | VSlotDirectCall "base.OnClick(eventArgs)" let TcVal checkAttributes cenv env tpenv (vref: ValRef) optInst optAfterResolution m = - let (tpsorig, _, _, _, tinst, _) as res = + let (tpsorig, _, _, _, tinst, _) as res = let v = vref.Deref let vrec = v.RecursiveValInfo - v.SetHasBeenReferenced() + v.SetHasBeenReferenced() CheckValAccessible m env.eAccessRights vref - if checkAttributes then + if checkAttributes then CheckValAttributes cenv.g vref m |> CommitOperationResult let vty = vref.Type - // byref-typed values get dereferenced - if isByrefTy cenv.g vty then + // byref-typed values get dereferenced + if isByrefTy cenv.g vty then let isSpecial = true [], mkAddrGet m vref, isSpecial, destByrefTy cenv.g vty, [], tpenv - else - match v.LiteralValue with - | Some c -> - // Literal values go to constants + else + match v.LiteralValue with + | Some c -> + // Literal values go to constants let isSpecial = true - // The value may still be generic, e.g. + // The value may still be generic, e.g. // [] // let Null = null - let tpsorig, _, tinst, tau = FreshenPossibleForallTy cenv.g m TyparRigidity.Flexible vty + let tpsorig, _, tinst, tau = FreshenPossibleForallTy cenv.g m TyparRigidity.Flexible vty tpsorig, Expr.Const (c, m, tau), isSpecial, tau, tinst, tpenv - | None -> + | None -> // References to 'this' in classes get dereferenced from their implicit reference cell and poked - if v.BaseOrThisInfo = CtorThisVal && isRefCellTy cenv.g vty then + if v.BaseOrThisInfo = CtorThisVal && isRefCellTy cenv.g vty then let exprForVal = exprForValRef m vref - //if AreWithinCtorPreConstruct env then + //if AreWithinCtorPreConstruct env then // warning(SelfRefObjCtor(AreWithinImplicitCtor env, m)) let ty = destRefCellTy cenv.g vty let isSpecial = true [], mkCallCheckThis cenv.g m ty (mkRefCellGet cenv.g m ty exprForVal), isSpecial, ty, [], tpenv - else - // Instantiate the value - let tpsorig, vrefFlags, tinst, tau, tpenv = - // Have we got an explicit instantiation? - match optInst with + else + // Instantiate the value + let tpsorig, vrefFlags, tinst, tau, tpenv = + // Have we got an explicit instantiation? + match optInst with // No explicit instantiation (the normal case) - | None -> + | None -> if HasFSharpAttribute cenv.g cenv.g.attrib_RequiresExplicitTypeArgumentsAttribute v.Attribs then errorR(Error(FSComp.SR.tcFunctionRequiresExplicitTypeArguments(v.DisplayName), m)) - - match vrec with - | ValInRecScope false -> + + match vrec with + | ValInRecScope false -> let tpsorig, tau = vref.TypeScheme let tinst = tpsorig |> List.map mkTyparTy tpsorig, NormalValUse, tinst, tau, tpenv - | ValInRecScope true + | ValInRecScope true | ValNotInRecScope -> - let tpsorig, _, tinst, tau = FreshenPossibleForallTy cenv.g m TyparRigidity.Flexible vty + let tpsorig, _, tinst, tau = FreshenPossibleForallTy cenv.g m TyparRigidity.Flexible vty tpsorig, NormalValUse, tinst, tau, tpenv - // If we have got an explicit instantiation then use that - | Some(vrefFlags, checkTys) -> - let checkInst (tinst: TypeInst) = - if not v.IsMember && not v.PermitsExplicitTypeInstantiation && not (List.isEmpty tinst) && not (List.isEmpty v.Typars) then + // If we have got an explicit instantiation then use that + | Some(vrefFlags, checkTys) -> + let checkInst (tinst: TypeInst) = + if not v.IsMember && not v.PermitsExplicitTypeInstantiation && not (List.isEmpty tinst) && not (List.isEmpty v.Typars) then warning(Error(FSComp.SR.tcDoesNotAllowExplicitTypeArguments(v.DisplayName), m)) - match vrec with - | ValInRecScope false -> + match vrec with + | ValInRecScope false -> let tpsorig, tau = vref.TypeScheme let (tinst: TypeInst), tpenv = checkTys tpenv (tpsorig |> List.map (fun tp -> tp.Kind)) checkInst tinst if tpsorig.Length <> tinst.Length then error(Error(FSComp.SR.tcTypeParameterArityMismatch(tpsorig.Length, tinst.Length), m)) let tau2 = instType (mkTyparInst tpsorig tinst) tau - (tpsorig, tinst) ||> List.iter2 (fun tp ty -> + (tpsorig, tinst) ||> List.iter2 (fun tp ty -> try UnifyTypes cenv env m (mkTyparTy tp) ty - with _ -> error (Recursion(env.DisplayEnv, v.Id, tau2, tau, m))) - tpsorig, vrefFlags, tinst, tau2, tpenv - | ValInRecScope true + with _ -> error (Recursion(env.DisplayEnv, v.Id, tau2, tau, m))) + tpsorig, vrefFlags, tinst, tau2, tpenv + | ValInRecScope true | ValNotInRecScope -> - let tpsorig, tps, tptys, tau = FreshenPossibleForallTy cenv.g m TyparRigidity.Flexible vty - //dprintfn "After Freshen: tau = %s" (Layout.showL (typeL tau)) + let tpsorig, tps, tptys, tau = FreshenPossibleForallTy cenv.g m TyparRigidity.Flexible vty + //dprintfn "After Freshen: tau = %s" (LayoutRender.showL (typeL tau)) let (tinst: TypeInst), tpenv = checkTys tpenv (tps |> List.map (fun tp -> tp.Kind)) checkInst tinst - //dprintfn "After Check: tau = %s" (Layout.showL (typeL tau)) + //dprintfn "After Check: tau = %s" (LayoutRender.showL (typeL tau)) if tptys.Length <> tinst.Length then error(Error(FSComp.SR.tcTypeParameterArityMismatch(tps.Length, tinst.Length), m)) List.iter2 (UnifyTypes cenv env m) tptys tinst TcValEarlyGeneralizationConsistencyCheck cenv env (v, vrec, tinst, vty, tau, m) - //dprintfn "After Unify: tau = %s" (Layout.showL (typeL tau)) - tpsorig, vrefFlags, tinst, tau, tpenv - + //dprintfn "After Unify: tau = %s" (LayoutRender.showL (typeL tau)) + tpsorig, vrefFlags, tinst, tau, tpenv + let exprForVal = Expr.Val (vref, vrefFlags, m) let exprForVal = mkTyAppExpr m (exprForVal, vty) tinst - let isSpecial = - (match vrefFlags with NormalValUse | PossibleConstrainedCall _ -> false | _ -> true) || - valRefEq cenv.g vref cenv.g.splice_expr_vref || - valRefEq cenv.g vref cenv.g.splice_raw_expr_vref - + let isSpecial = + (match vrefFlags with NormalValUse | PossibleConstrainedCall _ -> false | _ -> true) || + valRefEq cenv.g vref cenv.g.splice_expr_vref || + valRefEq cenv.g vref cenv.g.splice_raw_expr_vref + let exprForVal = RecordUseOfRecValue cenv vrec vref exprForVal m tpsorig, exprForVal, isSpecial, tau, tinst, tpenv - match optAfterResolution with + match optAfterResolution with | Some (AfterResolution.RecordResolution(_, callSink, _, _)) -> callSink (mkTyparInst tpsorig tinst) | Some AfterResolution.DoNothing | None -> () res /// simplified version of TcVal used in calls to BuildMethodCall (typrelns.fs) /// this function is used on typechecking step for making calls to provided methods and on optimization step (for the same purpose). -let LightweightTcValForUsingInBuildMethodCall g (vref: ValRef) vrefFlags (vrefTypeInst: TTypes) m = - let v = vref.Deref - let vty = vref.Type - // byref-typed values get dereferenced - if isByrefTy g vty then - mkAddrGet m vref, destByrefTy g vty - else - match v.LiteralValue with - | Some c -> - let _, _, _, tau = FreshenPossibleForallTy g m TyparRigidity.Flexible vty +let LightweightTcValForUsingInBuildMethodCall g (vref: ValRef) vrefFlags (vrefTypeInst: TTypes) m = + let v = vref.Deref + let vty = vref.Type + // byref-typed values get dereferenced + if isByrefTy g vty then + mkAddrGet m vref, destByrefTy g vty + else + match v.LiteralValue with + | Some c -> + let _, _, _, tau = FreshenPossibleForallTy g m TyparRigidity.Flexible vty Expr.Const (c, m, tau), tau - | None -> - // Instantiate the value - let tau = - // If we have got an explicit instantiation then use that - let _, tps, tptys, tau = FreshenPossibleForallTy g m TyparRigidity.Flexible vty + | None -> + // Instantiate the value + let tau = + // If we have got an explicit instantiation then use that + let _, tps, tptys, tau = FreshenPossibleForallTy g m TyparRigidity.Flexible vty if tptys.Length <> vrefTypeInst.Length then error(Error(FSComp.SR.tcTypeParameterArityMismatch(tps.Length, vrefTypeInst.Length), m)) - instType (mkTyparInst tps vrefTypeInst) tau - - let exprForVal = Expr.Val (vref, vrefFlags, m) - let exprForVal = mkTyAppExpr m (exprForVal, vty) vrefTypeInst + instType (mkTyparInst tps vrefTypeInst) tau + + let exprForVal = Expr.Val (vref, vrefFlags, m) + let exprForVal = mkTyAppExpr m (exprForVal, vty) vrefTypeInst exprForVal, tau /// Mark points where we decide whether an expression will support automatic /// decondensation or not. This is somewhat a relic of a previous implementation of decondensation and could /// be removed -type ApplicableExpr = - | ApplicableExpr of +type ApplicableExpr = + | ApplicableExpr of // context - cenv * + cenv * // the function-valued expression Expr * // is this the first in an application series - bool + bool - member x.Range = - match x with + member x.Range = + match x with | ApplicableExpr (_, e, _) -> e.Range - member x.Type = - match x with - | ApplicableExpr (cenv, e, _) -> tyOfExpr cenv.g e + member x.Type = + match x with + | ApplicableExpr (cenv, e, _) -> tyOfExpr cenv.g e member x.SupplyArgument(e2, m) = - let (ApplicableExpr (cenv, fe, first)) = x - let combinedExpr = - match fe with - | Expr.App (e1, e1ty, tyargs1, args1, e1m) when + let (ApplicableExpr (cenv, fe, first)) = x + let combinedExpr = + match fe with + | Expr.App (e1, e1ty, tyargs1, args1, e1m) when (not first || isNil args1) && - (not (isForallTy cenv.g e1ty) || isFunTy cenv.g (applyTys cenv.g e1ty (tyargs1, args1))) -> + (not (isForallTy cenv.g e1ty) || isFunTy cenv.g (applyTys cenv.g e1ty (tyargs1, args1))) -> Expr.App (e1, e1ty, tyargs1, args1@[e2], unionRanges e1m m) - | _ -> - Expr.App (fe, tyOfExpr cenv.g fe, [], [e2], m) + | _ -> + Expr.App (fe, tyOfExpr cenv.g fe, [], [e2], m) ApplicableExpr(cenv, combinedExpr, false) member x.Expr = - match x with + match x with | ApplicableExpr(_, e, _) -> e - + let MakeApplicableExprNoFlex cenv expr = ApplicableExpr (cenv, expr, true) @@ -2772,38 +2783,38 @@ let MakeApplicableExprNoFlex cenv expr = /// will type check but /// /// Sealed types and 'obj' do not introduce generic flexibility when functions are used as first class -/// values. +/// values. /// -/// For 'obj' this is because introducing this flexibility would NOT be the reverse of condensation, -/// since we don't condense +/// For 'obj' this is because introducing this flexibility would NOT be the reverse of condensation, +/// since we don't condense /// f: 'a -> unit /// to /// f: obj -> unit /// /// We represent the flexibility in the TAST by leaving a function-to-function coercion node in the tree -/// This "special" node is immediately eliminated by the use of IteratedFlexibleAdjustArityOfLambdaBody as soon as we +/// This "special" node is immediately eliminated by the use of IteratedFlexibleAdjustArityOfLambdaBody as soon as we /// first transform the tree (currently in optimization) let MakeApplicableExprWithFlex cenv (env: TcEnv) expr = let g = cenv.g let exprTy = tyOfExpr g expr let m = expr.Range - - let isNonFlexibleType ty = isSealedTy g ty - + + let isNonFlexibleType ty = isSealedTy g ty + let argTys, retTy = stripFunTy g exprTy let curriedActualTypes = argTys |> List.map (tryDestRefTupleTy g) if (curriedActualTypes.IsEmpty || curriedActualTypes |> List.exists (List.exists (isByrefTy g)) || - curriedActualTypes |> List.forall (List.forall isNonFlexibleType)) then - + curriedActualTypes |> List.forall (List.forall isNonFlexibleType)) then + ApplicableExpr (cenv, expr, true) else - let curriedFlexibleTypes = - curriedActualTypes |> List.mapSquared (fun actualType -> - if isNonFlexibleType actualType - then actualType - else + let curriedFlexibleTypes = + curriedActualTypes |> List.mapSquared (fun actualType -> + if isNonFlexibleType actualType + then actualType + else let flexibleType = NewInferenceType () AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css m NoTrace actualType flexibleType flexibleType) @@ -2813,19 +2824,19 @@ let MakeApplicableExprWithFlex cenv (env: TcEnv) expr = ApplicableExpr (cenv, expr, true) -/// Checks, warnings and constraint assertions for downcasts +/// Checks, warnings and constraint assertions for downcasts let TcRuntimeTypeTest isCast isOperator cenv denv m tgtTy srcTy = let g = cenv.g - if TypeDefinitelySubsumesTypeNoCoercion 0 g cenv.amap m tgtTy srcTy then + if TypeDefinitelySubsumesTypeNoCoercion 0 g cenv.amap m tgtTy srcTy then warning(TypeTestUnnecessary m) - if isTyparTy g srcTy && not (destTyparTy g srcTy).IsCompatFlex then + if isTyparTy g srcTy && not (destTyparTy g srcTy).IsCompatFlex then error(IndeterminateRuntimeCoercion(denv, srcTy, tgtTy, m)) - if isSealedTy g srcTy then + if isSealedTy g srcTy then error(RuntimeCoercionSourceSealed(denv, srcTy, m)) - if isSealedTy g tgtTy || isTyparTy g tgtTy || not (isInterfaceTy g srcTy) then + if isSealedTy g tgtTy || isTyparTy g tgtTy || not (isInterfaceTy g srcTy) then if isCast then AddCxTypeMustSubsumeType (ContextInfo.RuntimeTypeTest isOperator) denv cenv.css m NoTrace srcTy tgtTy else @@ -2837,57 +2848,57 @@ let TcRuntimeTypeTest isCast isOperator cenv denv m tgtTy srcTy = else error(Error(FSComp.SR.tcTypeTestErased(NicePrint.minimalStringOfType denv tgtTy, NicePrint.minimalStringOfType denv (stripTyEqnsWrtErasure EraseAll g tgtTy)), m)) else - getErasedTypes g tgtTy |> - List.iter (fun ety -> if isMeasureTy g ety + getErasedTypes g tgtTy |> + List.iter (fun ety -> if isMeasureTy g ety then warning(Error(FSComp.SR.tcTypeTestLosesMeasures(NicePrint.minimalStringOfType denv ety), m)) else warning(Error(FSComp.SR.tcTypeTestLossy(NicePrint.minimalStringOfType denv ety, NicePrint.minimalStringOfType denv (stripTyEqnsWrtErasure EraseAll g ety)), m))) -/// Checks, warnings and constraint assertions for upcasts +/// Checks, warnings and constraint assertions for upcasts let TcStaticUpcast cenv denv m tgtTy srcTy = - if isTyparTy cenv.g tgtTy then - if not (destTyparTy cenv.g tgtTy).IsCompatFlex then - error(IndeterminateStaticCoercion(denv, srcTy, tgtTy, m)) + if isTyparTy cenv.g tgtTy then + if not (destTyparTy cenv.g tgtTy).IsCompatFlex then + error(IndeterminateStaticCoercion(denv, srcTy, tgtTy, m)) //else warning(UpcastUnnecessary m) - if isSealedTy cenv.g tgtTy && not (isTyparTy cenv.g tgtTy) then + if isSealedTy cenv.g tgtTy && not (isTyparTy cenv.g tgtTy) then warning(CoercionTargetSealed(denv, tgtTy, m)) - if typeEquiv cenv.g srcTy tgtTy then - warning(UpcastUnnecessary m) + if typeEquiv cenv.g srcTy tgtTy then + warning(UpcastUnnecessary m) AddCxTypeMustSubsumeType ContextInfo.NoContext denv cenv.css m NoTrace tgtTy srcTy let BuildPossiblyConditionalMethodCall cenv env isMutable m isProp minfo valUseFlags minst objArgs args = - let conditionalCallDefineOpt = TryFindMethInfoStringAttribute cenv.g m cenv.g.attrib_ConditionalAttribute minfo + let conditionalCallDefineOpt = TryFindMethInfoStringAttribute cenv.g m cenv.g.attrib_ConditionalAttribute minfo - match conditionalCallDefineOpt, cenv.conditionalDefines with - | Some d, Some defines when not (List.contains d defines) -> + match conditionalCallDefineOpt, cenv.conditionalDefines with + | Some d, Some defines when not (List.contains d defines) -> - // Methods marked with 'Conditional' must return 'unit' + // Methods marked with 'Conditional' must return 'unit' UnifyTypes cenv env m cenv.g.unit_ty (minfo.GetFSharpReturnTy(cenv.amap, m, minst)) mkUnit cenv.g m, cenv.g.unit_ty - | _ -> + | _ -> #if !NO_EXTENSIONTYPING match minfo with - | ProvidedMeth(_, mi, _, _) -> + | ProvidedMeth(_, mi, _, _) -> // BuildInvokerExpressionForProvidedMethodCall converts references to F# intrinsics back to values - // and uses TcVal to do this. However we don't want to check attributes again for provided references to values, + // and uses TcVal to do this. However we don't want to check attributes again for provided references to values, // so we pass 'false' for 'checkAttributes'. let tcVal = LightweightTcValForUsingInBuildMethodCall cenv.g let _, retExpt, retTy = ProvidedMethodCalls.BuildInvokerExpressionForProvidedMethodCall tcVal (cenv.g, cenv.amap, mi, objArgs, isMutable, isProp, valUseFlags, args, m) retExpt, retTy - | _ -> -#endif - let tcVal valref valUse ttypes m = + | _ -> +#endif + let tcVal valref valUse ttypes m = let _, a, _, b, _, _ = TcVal true cenv env emptyUnscopedTyparEnv valref (Some (valUse, (fun x _ -> ttypes, x))) None m a, b BuildMethodCall tcVal cenv.g cenv.amap isMutable m isProp minfo valUseFlags minst objArgs args -let TryFindIntrinsicOrExtensionMethInfo collectionSettings (cenv: cenv) (env: TcEnv) m ad nm ty = +let TryFindIntrinsicOrExtensionMethInfo collectionSettings (cenv: cenv) (env: TcEnv) m ad nm ty = AllMethInfosOfTypeInScope collectionSettings cenv.infoReader env.NameEnv (Some nm) ad IgnoreOverrides m ty let TryFindFSharpSignatureInstanceGetterProperty (cenv: cenv) (env: TcEnv) m nm ty (sigTys: TType list) = @@ -2898,33 +2909,33 @@ let TryFindFSharpSignatureInstanceGetterProperty (cenv: cenv) (env: TcEnv) m nm match propInfo.GetterMethod.GetParamTypes(cenv.amap, m, []) with | [] -> false | argTysList -> - + let argTys = (argTysList |> List.reduce (@)) @ [ propInfo.GetterMethod.GetFSharpReturnTy(cenv.amap, m, []) ] in - if argTys.Length <> sigTys.Length then - false + if argTys.Length <> sigTys.Length then + false else (argTys, sigTys) ||> List.forall2 (typeEquiv cenv.g) ) ) -/// Build the 'test and dispose' part of a 'use' statement -let BuildDisposableCleanup cenv env m (v: Val) = - v.SetHasBeenReferenced() +/// Build the 'test and dispose' part of a 'use' statement +let BuildDisposableCleanup cenv env m (v: Val) = + v.SetHasBeenReferenced() let ad = env.eAccessRights - let disposeMethod = - match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AllResults cenv env m ad "Dispose" cenv.g.system_IDisposable_ty with - | [x] -> x - | _ -> error(InternalError(FSComp.SR.tcCouldNotFindIDisposable(), m)) + let disposeMethod = + match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AllResults cenv env m ad "Dispose" cenv.g.system_IDisposable_ty with + | [x] -> x + | _ -> error(InternalError(FSComp.SR.tcCouldNotFindIDisposable(), m)) - // For struct types the test is simpler: we can determine if IDisposable is supported, and even when it is, we can avoid doing the type test + // For struct types the test is simpler: we can determine if IDisposable is supported, and even when it is, we can avoid doing the type test // Note this affects the elaborated form seen by quotations etc. - if isStructTy cenv.g v.Type then + if isStructTy cenv.g v.Type then if TypeFeasiblySubsumesType 0 cenv.g cenv.amap m cenv.g.system_IDisposable_ty CanCoerce v.Type then // We can use NeverMutates here because the variable is going out of scope, there is no need to take a defensive // copy of it. - let disposeExpr, _ = BuildPossiblyConditionalMethodCall cenv env NeverMutates m false disposeMethod NormalValUse [] [exprForVal v.Range v] [] + let disposeExpr, _ = BuildPossiblyConditionalMethodCall cenv env NeverMutates m false disposeMethod NormalValUse [] [exprForVal v.Range v] [] disposeExpr else mkUnit cenv.g m @@ -2932,20 +2943,20 @@ let BuildDisposableCleanup cenv env m (v: Val) = let disposeObjVar, disposeObjExpr = mkCompGenLocal m "objectToDispose" cenv.g.system_IDisposable_ty let disposeExpr, _ = BuildPossiblyConditionalMethodCall cenv env PossiblyMutates m false disposeMethod NormalValUse [] [disposeObjExpr] [] let inpe = mkCoerceExpr(exprForVal v.Range v, cenv.g.obj_ty, m, v.Type) - mkIsInstConditional cenv.g m cenv.g.system_IDisposable_ty inpe disposeObjVar disposeExpr (mkUnit cenv.g m) + mkIsInstConditional cenv.g m cenv.g.system_IDisposable_ty inpe disposeObjVar disposeExpr (mkUnit cenv.g m) /// Build call to get_OffsetToStringData as part of 'fixed' -let BuildOffsetToStringData cenv env m = +let BuildOffsetToStringData cenv env m = let ad = env.eAccessRights - let offsetToStringDataMethod = - match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AllResults cenv env m ad "get_OffsetToStringData" cenv.g.system_RuntimeHelpers_ty with + let offsetToStringDataMethod = + match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AllResults cenv env m ad "get_OffsetToStringData" cenv.g.system_RuntimeHelpers_ty with | [x] -> x - | _ -> error(Error(FSComp.SR.tcCouldNotFindOffsetToStringData(), m)) + | _ -> error(Error(FSComp.SR.tcCouldNotFindOffsetToStringData(), m)) - let offsetExpr, _ = BuildPossiblyConditionalMethodCall cenv env NeverMutates m false offsetToStringDataMethod NormalValUse [] [] [] + let offsetExpr, _ = BuildPossiblyConditionalMethodCall cenv env NeverMutates m false offsetToStringDataMethod NormalValUse [] [] [] offsetExpr -let BuildILFieldGet g amap m objExpr (finfo: ILFieldInfo) = +let BuildILFieldGet g amap m objExpr (finfo: ILFieldInfo) = let fref = finfo.ILFieldRef let isValueType = finfo.IsValueType let valu = if isValueType then AsValue else AsObject @@ -2956,20 +2967,20 @@ let BuildILFieldGet g amap m objExpr (finfo: ILFieldInfo) = match finfo with | ProvidedField _ when (isErasedType g ty) -> // we know it's accessible, and there are no attributes to check for now... - match finfo.LiteralValue with - | None -> + match finfo.LiteralValue with + | None -> error (Error(FSComp.SR.tcTPFieldMustBeLiteral(), m)) - | Some lit -> + | Some lit -> Expr.Const (TcFieldInit m lit, m, fieldType) | _ -> #endif let wrap, objExpr, _readonly, _writeonly = mkExprAddrOfExpr g isValueType false NeverMutates objExpr None m - // The empty instantiation on the AbstractIL fspec is OK, since we make the correct fspec in IlxGen.GenAsm - // This ensures we always get the type instantiation right when doing this from + // The empty instantiation on the AbstractIL fspec is OK, since we make the correct fspec in IlxGen.GenAsm + // This ensures we always get the type instantiation right when doing this from // polymorphic code, after inlining etc. * let fspec = mkILFieldSpec(fref, mkILNamedTy valu fref.DeclaringTypeRef []) - // Add an I_nop if this is an initonly field to make sure we never recognize it as an lvalue. See mkExprAddrOfExpr. - wrap (mkAsmExpr (([ mkNormalLdfld fspec ] @ (if finfo.IsInitOnly then [ AI_nop ] else [])), tinst, [objExpr], [fieldType], m)) + // Add an I_nop if this is an initonly field to make sure we never recognize it as an lvalue. See mkExprAddrOfExpr. + wrap (mkAsmExpr (([ mkNormalLdfld fspec ] @ (if finfo.IsInitOnly then [ AI_nop ] else [])), tinst, [objExpr], [fieldType], m)) /// Checks that setting a field value does not set a literal or initonly field let private CheckFieldLiteralArg (finfo: ILFieldInfo) argExpr m = @@ -2983,137 +2994,137 @@ let private CheckFieldLiteralArg (finfo: ILFieldInfo) argExpr m = ) if finfo.IsInitOnly then error (Error (FSComp.SR.tcFieldIsReadonly(), m)) -let BuildILFieldSet g m objExpr (finfo: ILFieldInfo) argExpr = +let BuildILFieldSet g m objExpr (finfo: ILFieldInfo) argExpr = let fref = finfo.ILFieldRef let isValueType = finfo.IsValueType let valu = if isValueType then AsValue else AsObject let tinst = finfo.TypeInst - // The empty instantiation on the AbstractIL fspec is OK, since we make the correct fspec in IlxGen.GenAsm - // This ensures we always get the type instantiation right when doing this from + // The empty instantiation on the AbstractIL fspec is OK, since we make the correct fspec in IlxGen.GenAsm + // This ensures we always get the type instantiation right when doing this from // polymorphic code, after inlining etc. * let fspec = mkILFieldSpec(fref, mkILNamedTy valu fref.DeclaringTypeRef []) CheckFieldLiteralArg finfo argExpr m - let wrap, objExpr, _readonly, _writeonly = mkExprAddrOfExpr g isValueType false DefinitelyMutates objExpr None m - wrap (mkAsmExpr ([ mkNormalStfld fspec ], tinst, [objExpr; argExpr], [], m)) + let wrap, objExpr, _readonly, _writeonly = mkExprAddrOfExpr g isValueType false DefinitelyMutates objExpr None m + wrap (mkAsmExpr ([ mkNormalStfld fspec ], tinst, [objExpr; argExpr], [], m)) -let BuildILStaticFieldSet m (finfo: ILFieldInfo) argExpr = +let BuildILStaticFieldSet m (finfo: ILFieldInfo) argExpr = let fref = finfo.ILFieldRef let isValueType = finfo.IsValueType let valu = if isValueType then AsValue else AsObject let tinst = finfo.TypeInst - // The empty instantiation on the AbstractIL fspec is OK, since we make the correct fspec in IlxGen.GenAsm - // This ensures we always get the type instantiation right when doing this from - // polymorphic code, after inlining etc. + // The empty instantiation on the AbstractIL fspec is OK, since we make the correct fspec in IlxGen.GenAsm + // This ensures we always get the type instantiation right when doing this from + // polymorphic code, after inlining etc. let fspec = mkILFieldSpec(fref, mkILNamedTy valu fref.DeclaringTypeRef []) CheckFieldLiteralArg finfo argExpr m mkAsmExpr ([ mkNormalStsfld fspec ], tinst, [argExpr], [], m) -let BuildRecdFieldSet g m objExpr (rfinfo: RecdFieldInfo) argExpr = +let BuildRecdFieldSet g m objExpr (rfinfo: RecdFieldInfo) argExpr = let tgtTy = rfinfo.DeclaringType let valu = isStructTy g tgtTy let objExpr = if valu then objExpr else mkCoerceExpr(objExpr, tgtTy, m, tyOfExpr g objExpr) let wrap, objExpr, _readonly, _writeonly = mkExprAddrOfExpr g valu false DefinitelyMutates objExpr None m wrap (mkRecdFieldSetViaExprAddr (objExpr, rfinfo.RecdFieldRef, rfinfo.TypeInst, argExpr, m) ) - + //------------------------------------------------------------------------- // Helpers dealing with named and optional args at callsites -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -let (|BinOpExpr|_|) e = - match e with +let (|BinOpExpr|_|) e = + match e with | SynExpr.App (_, _, SynExpr.App (_, _, SingleIdent opId, a, _), b, _) -> Some (opId, a, b) | _ -> None -let (|SimpleEqualsExpr|_|) e = - match e with +let (|SimpleEqualsExpr|_|) e = + match e with | BinOpExpr(opId, a, b) when opId.idText = opNameEquals -> Some (a, b) | _ -> None /// Detect a named argument at a callsite -let TryGetNamedArg e = - match e with +let TryGetNamedArg e = + match e with | SimpleEqualsExpr(LongOrSingleIdent(isOpt, LongIdentWithDots([a], _), None, _), b) -> Some(isOpt, a, b) - | _ -> None + | _ -> None -let inline IsNamedArg e = - match e with +let inline IsNamedArg e = + match e with | SimpleEqualsExpr(LongOrSingleIdent(_, LongIdentWithDots([_], _), None, _), _) -> true | _ -> false /// Get the method arguments at a callsite, taking into account named and optional arguments let GetMethodArgs arg = - let args = - match arg with + let args = + match arg with | SynExpr.Const (SynConst.Unit, _) -> [] | SynExprParen(SynExpr.Tuple (false, args, _, _), _, _, _) | SynExpr.Tuple (false, args, _, _) -> args | SynExprParen(arg, _, _, _) | arg -> [arg] - let unnamedCallerArgs, namedCallerArgs = + let unnamedCallerArgs, namedCallerArgs = args |> List.takeUntil IsNamedArg - let namedCallerArgs = - namedCallerArgs - |> List.choose (fun e -> + let namedCallerArgs = + namedCallerArgs + |> List.choose (fun e -> match TryGetNamedArg e with | None -> - // ignore errors to avoid confusing error messages in cases like foo(a = 1, ) + // ignore errors to avoid confusing error messages in cases like foo(a = 1, ) // do not abort overload resolution in case if named arguments are mixed with errors match e with | SynExpr.ArbitraryAfterError _ -> None - | _ -> error(Error(FSComp.SR.tcNameArgumentsMustAppearLast(), e.Range)) + | _ -> error(Error(FSComp.SR.tcNameArgumentsMustAppearLast(), e.Range)) | namedArg -> namedArg) unnamedCallerArgs, namedCallerArgs //------------------------------------------------------------------------- // Helpers dealing with pattern match compilation -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- let CompilePatternForMatch cenv (env: TcEnv) mExpr matchm warnOnUnused actionOnFailure (inputVal, generalizedTypars, inputExprOpt) clauses inputTy resultTy = let dtree, targets = CompilePattern cenv.g env.DisplayEnv cenv.amap (LightweightTcValForUsingInBuildMethodCall cenv.g) cenv.infoReader mExpr matchm warnOnUnused actionOnFailure (inputVal, generalizedTypars, inputExprOpt) clauses inputTy resultTy - mkAndSimplifyMatch NoDebugPointAtInvisibleBinding mExpr matchm resultTy dtree targets + mkAndSimplifyMatch DebugPointAtBinding.NoneAtInvisible mExpr matchm resultTy dtree targets /// Compile a pattern -let CompilePatternForMatchClauses cenv env mExpr matchm warnOnUnused actionOnFailure inputExprOpt inputTy resultTy tclauses = - // Avoid creating a dummy in the common cases where we are about to bind a name for the expression - // CLEANUP: avoid code duplication with code further below, i.e.all callers should call CompilePatternForMatch - match tclauses with +let CompilePatternForMatchClauses cenv env mExpr matchm warnOnUnused actionOnFailure inputExprOpt inputTy resultTy tclauses = + // Avoid creating a dummy in the common cases where we are about to bind a name for the expression + // CLEANUP: avoid code duplication with code further below, i.e.all callers should call CompilePatternForMatch + match tclauses with | [TClause(TPat_as (pat1, PBind (asVal, TypeScheme(generalizedTypars, _)), _), None, TTarget(vs, e, spTarget), m2)] -> let expr = CompilePatternForMatch cenv env mExpr matchm warnOnUnused actionOnFailure (asVal, generalizedTypars, None) [TClause(pat1, None, TTarget(ListSet.remove valEq asVal vs, e, spTarget), m2)] inputTy resultTy asVal, expr - | _ -> + | _ -> let matchValueTmp, _ = mkCompGenLocal mExpr "matchValue" inputTy let expr = CompilePatternForMatch cenv env mExpr matchm warnOnUnused actionOnFailure (matchValueTmp, [], inputExprOpt) tclauses inputTy resultTy matchValueTmp, expr //------------------------------------------------------------------------- // Helpers dealing with sequence expressions -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -/// Get the fragmentary expressions resulting from turning -/// an expression into an enumerable value, e.g. at 'for' loops +/// Get the fragmentary expressions resulting from turning +/// an expression into an enumerable value, e.g. at 'for' loops -// localAlloc is relevant if the enumerator is a mutable struct and indicates -// if the enumerator can be allocated as a mutable local variable +// localAlloc is relevant if the enumerator is a mutable struct and indicates +// if the enumerator can be allocated as a mutable local variable let AnalyzeArbitraryExprAsEnumerable cenv (env: TcEnv) localAlloc m exprty expr = let ad = env.AccessRights - let err k ty = + let err k ty = let txt = NicePrint.minimalStringOfType env.DisplayEnv ty let msg = if k then FSComp.SR.tcTypeCannotBeEnumerated txt else FSComp.SR.tcEnumTypeCannotBeEnumerated txt Exception(Error(msg, m)) - let findMethInfo k m nm ty = - match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AtMostOneResult cenv env m ad nm ty with + let findMethInfo k m nm ty = + match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AtMostOneResult cenv env m ad nm ty with | [] -> err k ty | res :: _ -> Result res - + // Ensure there are no curried arguments, and indeed no arguments at all - let hasArgs (minfo: MethInfo) minst = - match minfo.GetParamTypes(cenv.amap, m, minst) with + let hasArgs (minfo: MethInfo) minst = + match minfo.GetParamTypes(cenv.amap, m, minst) with | [[]] -> false | _ -> true - let tryType (exprToSearchForGetEnumeratorAndItem, tyToSearchForGetEnumeratorAndItem) = - match findMethInfo true m "GetEnumerator" tyToSearchForGetEnumeratorAndItem with + let tryType (exprToSearchForGetEnumeratorAndItem, tyToSearchForGetEnumeratorAndItem) = + match findMethInfo true m "GetEnumerator" tyToSearchForGetEnumeratorAndItem with | Exception e -> Exception e | Result getEnumerator_minfo -> @@ -3121,86 +3132,86 @@ let AnalyzeArbitraryExprAsEnumerable cenv (env: TcEnv) localAlloc m exprty expr let retTypeOfGetEnumerator = getEnumerator_minfo.GetFSharpReturnTy(cenv.amap, m, getEnumerator_minst) if hasArgs getEnumerator_minfo getEnumerator_minst then err true tyToSearchForGetEnumeratorAndItem else - match findMethInfo false m "MoveNext" retTypeOfGetEnumerator with + match findMethInfo false m "MoveNext" retTypeOfGetEnumerator with | Exception e -> Exception e | Result moveNext_minfo -> let moveNext_minst = FreshenMethInfo m moveNext_minfo let retTypeOfMoveNext = moveNext_minfo.GetFSharpReturnTy(cenv.amap, m, moveNext_minst) - if not (typeEquiv cenv.g cenv.g.bool_ty retTypeOfMoveNext) then err false retTypeOfGetEnumerator else + if not (typeEquiv cenv.g cenv.g.bool_ty retTypeOfMoveNext) then err false retTypeOfGetEnumerator else if hasArgs moveNext_minfo moveNext_minst then err false retTypeOfGetEnumerator else - match findMethInfo false m "get_Current" retTypeOfGetEnumerator with + match findMethInfo false m "get_Current" retTypeOfGetEnumerator with | Exception e -> Exception e | Result get_Current_minfo -> let get_Current_minst = FreshenMethInfo m get_Current_minfo if hasArgs get_Current_minfo get_Current_minst then err false retTypeOfGetEnumerator else let enumElemTy = get_Current_minfo.GetFSharpReturnTy(cenv.amap, m, get_Current_minst) - + // Compute the element type of the strongly typed enumerator // - // Like C#, we detect the 'GetEnumerator' pattern for .NET version 1.x abstractions that don't + // Like C#, we detect the 'GetEnumerator' pattern for .NET version 1.x abstractions that don't // support the correct generic interface. However unlike C# we also go looking for a 'get_Item' or 'Item' method // with a single integer indexer argument to try to get a strong type for the enumeration should the Enumerator - // not provide anything useful. To enable interop with some legacy COM APIs, + // not provide anything useful. To enable interop with some legacy COM APIs, // the single integer indexer argument is allowed to have type 'object'. - let enumElemTy = + let enumElemTy = if isObjTy cenv.g enumElemTy then - // Look for an 'Item' property, or a set of these with consistent return types - let allEquivReturnTypes (minfo: MethInfo) (others: MethInfo list) = + // Look for an 'Item' property, or a set of these with consistent return types + let allEquivReturnTypes (minfo: MethInfo) (others: MethInfo list) = let returnTy = minfo.GetFSharpReturnTy(cenv.amap, m, []) others |> List.forall (fun other -> typeEquiv cenv.g (other.GetFSharpReturnTy(cenv.amap, m, [])) returnTy) - - let isInt32OrObjectIndexer (minfo: MethInfo) = + + let isInt32OrObjectIndexer (minfo: MethInfo) = match minfo.GetParamTypes(cenv.amap, m, []) with - | [[ty]] -> + | [[ty]] -> // e.g. MatchCollection - typeEquiv cenv.g cenv.g.int32_ty ty || + typeEquiv cenv.g cenv.g.int32_ty ty || // e.g. EnvDTE.Documents.Item typeEquiv cenv.g cenv.g.obj_ty ty | _ -> false - + match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AllResults cenv env m ad "get_Item" tyToSearchForGetEnumeratorAndItem with | (minfo :: others) when (allEquivReturnTypes minfo others && - List.exists isInt32OrObjectIndexer (minfo :: others)) -> + List.exists isInt32OrObjectIndexer (minfo :: others)) -> minfo.GetFSharpReturnTy(cenv.amap, m, []) - - | _ -> - - // Some types such as XmlNodeList have only an Item method + + | _ -> + + // Some types such as XmlNodeList have only an Item method match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AllResults cenv env m ad "Item" tyToSearchForGetEnumeratorAndItem with | (minfo :: others) when (allEquivReturnTypes minfo others && - List.exists isInt32OrObjectIndexer (minfo :: others)) -> + List.exists isInt32OrObjectIndexer (minfo :: others)) -> minfo.GetFSharpReturnTy(cenv.amap, m, []) - + | _ -> enumElemTy - else + else enumElemTy let isEnumeratorTypeStruct = isStructTy cenv.g retTypeOfGetEnumerator let originalRetTypeOfGetEnumerator = retTypeOfGetEnumerator - let (enumeratorVar, enumeratorExpr), retTypeOfGetEnumerator = - if isEnumeratorTypeStruct then - if localAlloc then + let (enumeratorVar, enumeratorExpr), retTypeOfGetEnumerator = + if isEnumeratorTypeStruct then + if localAlloc then mkMutableCompGenLocal m "enumerator" retTypeOfGetEnumerator, retTypeOfGetEnumerator else let refCellTyForRetTypeOfGetEnumerator = mkRefCellTy cenv.g retTypeOfGetEnumerator let v, e = mkMutableCompGenLocal m "enumerator" refCellTyForRetTypeOfGetEnumerator (v, mkRefCellGet cenv.g m retTypeOfGetEnumerator e), refCellTyForRetTypeOfGetEnumerator - + else mkCompGenLocal m "enumerator" retTypeOfGetEnumerator, retTypeOfGetEnumerator - - let getEnumExpr, getEnumTy = + + let getEnumExpr, getEnumTy = let (getEnumExpr, getEnumTy) as res = BuildPossiblyConditionalMethodCall cenv env PossiblyMutates m false getEnumerator_minfo NormalValUse getEnumerator_minst [exprToSearchForGetEnumeratorAndItem] [] - if not isEnumeratorTypeStruct || localAlloc then res - else - // wrap enumerators that are represented as mutable structs into ref cells - let getEnumExpr = mkRefCell cenv.g m originalRetTypeOfGetEnumerator getEnumExpr + if not isEnumeratorTypeStruct || localAlloc then res + else + // wrap enumerators that are represented as mutable structs into ref cells + let getEnumExpr = mkRefCell cenv.g m originalRetTypeOfGetEnumerator getEnumExpr let getEnumTy = mkRefCellTy cenv.g getEnumTy getEnumExpr, getEnumTy @@ -3218,15 +3229,15 @@ let AnalyzeArbitraryExprAsEnumerable cenv (env: TcEnv) localAlloc m exprty expr Result(enumeratorVar, enumeratorExpr, retTypeOfGetEnumerator, enumElemTy, getEnumExpr, getEnumTy, guardExpr, guardTy, currentExpr) // First try the original known static type - match (if isArray1DTy cenv.g exprty then Exception (Failure "") else tryType (expr, exprty)) with + match (if isArray1DTy cenv.g exprty then Exception (Failure "") else tryType (expr, exprty)) with | Result res -> res - | Exception e -> + | Exception e -> let probe ty = - if (AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m ty exprty) then - match tryType (mkCoerceExpr(expr, ty, expr.Range, exprty), ty) with + if (AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m ty exprty) then + match tryType (mkCoerceExpr(expr, ty, expr.Range, exprty), ty) with | Result res -> Some res - | Exception e -> + | Exception e -> PreserveStackTrace e raise e else None @@ -3234,7 +3245,7 @@ let AnalyzeArbitraryExprAsEnumerable cenv (env: TcEnv) localAlloc m exprty expr // Next try to typecheck the thing as a sequence let enumElemTy = NewInferenceType () let exprTyAsSeq = mkSeqTy cenv.g enumElemTy - + match probe exprTyAsSeq with | Some res -> res | None -> @@ -3249,49 +3260,49 @@ let AnalyzeArbitraryExprAsEnumerable cenv (env: TcEnv) localAlloc m exprty expr let ConvertArbitraryExprToEnumerable (cenv: cenv) ty (env: TcEnv) (expr: Expr) = let m = expr.Range let enumElemTy = NewInferenceType () - if AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m ( mkSeqTy cenv.g enumElemTy) ty then + if AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m ( mkSeqTy cenv.g enumElemTy) ty then expr, enumElemTy - else + else let enumerableVar, enumerableExpr = mkCompGenLocal m "inputSequence" ty - let enumeratorVar, _, retTypeOfGetEnumerator, enumElemTy, getEnumExpr, _, guardExpr, guardTy, betterCurrentExpr = + let enumeratorVar, _, retTypeOfGetEnumerator, enumElemTy, getEnumExpr, _, guardExpr, guardTy, betterCurrentExpr = AnalyzeArbitraryExprAsEnumerable cenv env false m ty enumerableExpr - - let expr = - mkCompGenLet m enumerableVar expr + + let expr = + mkCompGenLet m enumerableVar expr (mkCallSeqOfFunctions cenv.g m retTypeOfGetEnumerator enumElemTy (mkUnitDelayLambda cenv.g m getEnumExpr) - (mkLambda m enumeratorVar (guardExpr, guardTy)) + (mkLambda m enumeratorVar (guardExpr, guardTy)) (mkLambda m enumeratorVar (betterCurrentExpr, enumElemTy))) - expr, enumElemTy + expr, enumElemTy //------------------------------------------------------------------------- // Post-transform initialization graphs using the 'lazy' interpretation. // See ML workshop paper. -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -type InitializationGraphAnalysisState = +type InitializationGraphAnalysisState = | Top | InnerTop | DefinitelyStrict | MaybeLazy | DefinitelyLazy -type PreInitializationGraphEliminationBinding = +type PreInitializationGraphEliminationBinding = { FixupPoints: RecursiveUseFixupPoints Binding: Binding } -/// Check for safety and determine if we need to insert lazy thunks -let EliminateInitializationGraphs - g +/// Check for safety and determine if we need to insert lazy thunks +let EliminateInitializationGraphs + g mustHaveArity - denv - (bindings: 'Bindings list) + denv + (bindings: 'Bindings list) (iterBindings: ((PreInitializationGraphEliminationBinding list -> unit) -> 'Bindings list -> unit)) (buildLets: Binding list -> 'Result) (mapBindings: (PreInitializationGraphEliminationBinding list -> Binding list) -> 'Bindings list -> 'Result list) bindsm = - let recursiveVals = + let recursiveVals = let hash = ValHash.Create() let add (pgrbind: PreInitializationGraphEliminationBinding) = let c = pgrbind.Binding.Var in hash.Add(c, c) bindings |> iterBindings (List.iter add) @@ -3304,29 +3315,29 @@ let EliminateInitializationGraphs let mutable reportedEager = false let mutable definiteDependencies = [] - let rec stripChooseAndExpr e = - match stripExpr e with + let rec stripChooseAndExpr e = + match stripExpr e with | Expr.TyChoose (_, b, _) -> stripChooseAndExpr b | e -> e let availIfInOrder = ValHash<_>.Create() - let check boundv expr = + let check boundv expr = let strict = function | MaybeLazy -> MaybeLazy | DefinitelyLazy -> DefinitelyLazy | Top | DefinitelyStrict | InnerTop -> DefinitelyStrict - let lzy = function - | Top | InnerTop | DefinitelyLazy -> DefinitelyLazy + let lzy = function + | Top | InnerTop | DefinitelyLazy -> DefinitelyLazy | MaybeLazy | DefinitelyStrict -> MaybeLazy - let fixable = function + let fixable = function | Top | InnerTop -> InnerTop | DefinitelyStrict -> DefinitelyStrict | MaybeLazy -> MaybeLazy | DefinitelyLazy -> DefinitelyLazy - let rec CheckExpr st e = - match stripChooseAndExpr e with - // Expressions with some lazy parts + let rec CheckExpr st e = + match stripChooseAndExpr e with + // Expressions with some lazy parts | Expr.Lambda (_, _, _, _, b, _, _) -> checkDelayed st b // Type-lambdas are analyzed as if they are strict. @@ -3339,133 +3350,133 @@ let EliminateInitializationGraphs | Expr.TyLambda (_, _, b, _, _) -> CheckExpr st b | Expr.Obj (_, ty, _, e, overrides, extraImpls, _) -> - // NOTE: we can't fixup recursive references inside delegates since the closure delegee of a delegate is not accessible - // from outside. Object expressions implementing interfaces can, on the other hand, be fixed up. See FSharp 1.0 bug 1469 - if isInterfaceTy g ty then + // NOTE: we can't fixup recursive references inside delegates since the closure delegee of a delegate is not accessible + // from outside. Object expressions implementing interfaces can, on the other hand, be fixed up. See FSharp 1.0 bug 1469 + if isInterfaceTy g ty then List.iter (fun (TObjExprMethod(_, _, _, _, e, _)) -> checkDelayed st e) overrides List.iter (snd >> List.iter (fun (TObjExprMethod(_, _, _, _, e, _)) -> checkDelayed st e)) extraImpls - else + else CheckExpr (strict st) e List.iter (fun (TObjExprMethod(_, _, _, _, e, _)) -> CheckExpr (lzy (strict st)) e) overrides List.iter (snd >> List.iter (fun (TObjExprMethod(_, _, _, _, e, _)) -> CheckExpr (lzy (strict st)) e)) extraImpls - - // Expressions where fixups may be needed + + // Expressions where fixups may be needed | Expr.Val (v, _, m) -> CheckValRef st v m - // Expressions where subparts may be fixable - | Expr.Op ((TOp.Tuple _ | TOp.UnionCase _ | TOp.Recd _), _, args, _) -> + // Expressions where subparts may be fixable + | Expr.Op ((TOp.Tuple _ | TOp.UnionCase _ | TOp.Recd _), _, args, _) -> List.iter (CheckExpr (fixable st)) args - // Composite expressions + // Composite expressions | Expr.Const _ -> () | Expr.LetRec (binds, e, _, _) -> - binds |> List.iter (CheckBinding (strict st)) + binds |> List.iter (CheckBinding (strict st)) CheckExpr (strict st) e - | Expr.Let (bind, e, _, _) -> - CheckBinding (strict st) bind + | Expr.Let (bind, e, _, _) -> + CheckBinding (strict st) bind CheckExpr (strict st) e - | Expr.Match (_, _, pt, targets, _, _) -> - CheckDecisionTree (strict st) pt - Array.iter (CheckDecisionTreeTarget (strict st)) targets - | Expr.App (e1, _, _, args, _) -> - CheckExpr (strict st) e1 - List.iter (CheckExpr (strict st)) args - // Binary expressions + | Expr.Match (_, _, pt, targets, _, _) -> + CheckDecisionTree (strict st) pt + Array.iter (CheckDecisionTreeTarget (strict st)) targets + | Expr.App (e1, _, _, args, _) -> + CheckExpr (strict st) e1 + List.iter (CheckExpr (strict st)) args + // Binary expressions | Expr.Sequential (e1, e2, _, _, _) | Expr.StaticOptimization (_, e1, e2, _) -> CheckExpr (strict st) e1; CheckExpr (strict st) e2 - // n-ary expressions + // n-ary expressions | Expr.Op (op, _, args, m) -> CheckExprOp st op m; List.iter (CheckExpr (strict st)) args - // misc + // misc | Expr.Link eref -> CheckExpr st !eref | Expr.TyChoose (_, b, _) -> CheckExpr st b | Expr.Quote _ -> () | Expr.WitnessArg (_witnessInfo, _m) -> () - and CheckBinding st (TBind(_, e, _)) = CheckExpr st e + and CheckBinding st (TBind(_, e, _)) = CheckExpr st e and CheckDecisionTree st = function | TDSwitch(e1, csl, dflt, _) -> CheckExpr st e1; List.iter (fun (TCase(_, d)) -> CheckDecisionTree st d) csl; Option.iter (CheckDecisionTree st) dflt - | TDSuccess (es, _) -> es |> List.iter (CheckExpr st) + | TDSuccess (es, _) -> es |> List.iter (CheckExpr st) | TDBind(bind, e) -> CheckBinding st bind; CheckDecisionTree st e and CheckDecisionTreeTarget st (TTarget(_, e, _)) = CheckExpr st e - and CheckExprOp st op m = - match op with + and CheckExprOp st op m = + match op with | TOp.LValueOp (_, lvr) -> CheckValRef (strict st) lvr m | _ -> () - - and CheckValRef st (v: ValRef) m = - match st with - | MaybeLazy -> - if recursiveVals.TryFind v.Deref |> Option.isSome then - warning (RecursiveUseCheckedAtRuntime (denv, v, m)) - if not reportedEager then + + and CheckValRef st (v: ValRef) m = + match st with + | MaybeLazy -> + if recursiveVals.TryFind v.Deref |> Option.isSome then + warning (RecursiveUseCheckedAtRuntime (denv, v, m)) + if not reportedEager then (warning (LetRecCheckedAtRuntime m); reportedEager <- true) runtimeChecks <- true | Top | DefinitelyStrict -> - if recursiveVals.TryFind v.Deref |> Option.isSome then - if availIfInOrder.TryFind v.Deref |> Option.isNone then - warning (LetRecEvaluatedOutOfOrder (denv, boundv, v, m)) + if recursiveVals.TryFind v.Deref |> Option.isSome then + if availIfInOrder.TryFind v.Deref |> Option.isNone then + warning (LetRecEvaluatedOutOfOrder (denv, boundv, v, m)) outOfOrder <- true - if not reportedEager then + if not reportedEager then (warning (LetRecCheckedAtRuntime m); reportedEager <- true) definiteDependencies <- (boundv, v) :: definiteDependencies - | InnerTop -> - if recursiveVals.TryFind v.Deref |> Option.isSome then + | InnerTop -> + if recursiveVals.TryFind v.Deref |> Option.isSome then directRecursiveData <- true - | DefinitelyLazy -> () - and checkDelayed st b = - match st with + | DefinitelyLazy -> () + and checkDelayed st b = + match st with | MaybeLazy | DefinitelyStrict -> CheckExpr MaybeLazy b - | DefinitelyLazy | Top | InnerTop -> () - - + | DefinitelyLazy | Top | InnerTop -> () + + CheckExpr Top expr - + // Check the bindings one by one, each w.r.t. the previously available set of binding begin - let checkBind (pgrbind: PreInitializationGraphEliminationBinding) = + let checkBind (pgrbind: PreInitializationGraphEliminationBinding) = let (TBind(v, e, _)) = pgrbind.Binding - check (mkLocalValRef v) e + check (mkLocalValRef v) e availIfInOrder.Add(v, 1) bindings |> iterBindings (List.iter checkBind) end - - // ddg = definiteDependencyGraph + + // ddg = definiteDependencyGraph let ddgNodes = recursiveVals.Values |> Seq.toList |> List.map mkLocalValRef let ddg = Graph((fun v -> v.Stamp), ddgNodes, definiteDependencies ) - ddg.IterateCycles (fun path -> error (LetRecUnsound (denv, path, path.Head.Range))) + ddg.IterateCycles (fun path -> error (LetRecUnsound (denv, path, path.Head.Range))) let requiresLazyBindings = runtimeChecks || outOfOrder - if directRecursiveData && requiresLazyBindings then + if directRecursiveData && requiresLazyBindings then error(Error(FSComp.SR.tcInvalidMixtureOfRecursiveForms(), bindsm)) - if requiresLazyBindings then + if requiresLazyBindings then let morphBinding (pgrbind: PreInitializationGraphEliminationBinding) = let (RecursiveUseFixupPoints fixupPoints) = pgrbind.FixupPoints let (TBind(v, e, seqPtOpt)) = pgrbind.Binding match stripChooseAndExpr e with - | Expr.Lambda _ | Expr.TyLambda _ -> - [], [mkInvisibleBind v e] - | _ -> + | Expr.Lambda _ | Expr.TyLambda _ -> + [], [mkInvisibleBind v e] + | _ -> let ty = v.Type let m = v.Range let vty = (mkLazyTy g ty) let fty = (g.unit_ty --> ty) - let flazy, felazy = mkCompGenLocal m v.LogicalName fty + let flazy, felazy = mkCompGenLocal m v.LogicalName fty let frhs = mkUnitDelayLambda g m e if mustHaveArity then flazy.SetValReprInfo (Some(InferArityOfExpr g AllowTypeDirectedDetupling.Yes fty [] [] frhs)) - let vlazy, velazy = mkCompGenLocal m v.LogicalName vty + let vlazy, velazy = mkCompGenLocal m v.LogicalName vty let vrhs = (mkLazyDelayed g m ty felazy) - + if mustHaveArity then vlazy.SetValReprInfo (Some(InferArityOfExpr g AllowTypeDirectedDetupling.Yes vty [] [] vrhs)) fixupPoints |> List.iter (fun (fp, _) -> fp := mkLazyForce g (!fp).Range ty velazy) - [mkInvisibleBind flazy frhs; mkInvisibleBind vlazy vrhs], + [mkInvisibleBind flazy frhs; mkInvisibleBind vlazy vrhs], [mkBind seqPtOpt v (mkLazyForce g m ty velazy)] let newTopBinds = ResizeArray<_>() @@ -3475,164 +3486,164 @@ let EliminateInitializationGraphs if newTopBinds.Count = 0 then res else buildLets (List.concat newTopBinds) :: res else - let noMorph (pgrbinds: PreInitializationGraphEliminationBinding list) = pgrbinds |> List.map (fun pgrbind -> pgrbind.Binding) + let noMorph (pgrbinds: PreInitializationGraphEliminationBinding list) = pgrbinds |> List.map (fun pgrbind -> pgrbind.Binding) bindings |> mapBindings noMorph //------------------------------------------------------------------------- -// Check the shape of an object constructor and rewrite calls -//------------------------------------------------------------------------- +// Check the shape of an object constructor and rewrite calls +//------------------------------------------------------------------------- let CheckAndRewriteObjectCtor g env (ctorLambdaExpr: Expr) = let m = ctorLambdaExpr.Range let tps, vsl, body, returnTy = stripTopLambda (ctorLambdaExpr, tyOfExpr g ctorLambdaExpr) - // Rewrite legitimate self-construction calls to CtorValUsedAsSelfInit - let error (expr: Expr) = + // Rewrite legitimate self-construction calls to CtorValUsedAsSelfInit + let error (expr: Expr) = errorR(Error(FSComp.SR.tcInvalidObjectConstructionExpression(), expr.Range)) expr - // Build an assignment into the safeThisValOpt mutable reference cell that holds recursive references to 'this' + // Build an assignment into the safeThisValOpt mutable reference cell that holds recursive references to 'this' // Build an assignment into the safeInitInfo mutable field that indicates that partial initialization is successful - let rewriteConstruction recdExpr = - match env.eCtorInfo with + let rewriteConstruction recdExpr = + match env.eCtorInfo with | None -> recdExpr - | Some ctorInfo -> - let recdExpr = - match ctorInfo.safeThisValOpt with + | Some ctorInfo -> + let recdExpr = + match ctorInfo.safeThisValOpt with | None -> recdExpr - | Some safeInitVal -> + | Some safeInitVal -> let ty = tyOfExpr g recdExpr let thisExpr = mkGetArg0 m ty let setExpr = mkRefCellSet g m ty (exprForValRef m (mkLocalValRef safeInitVal)) thisExpr Expr.Sequential (recdExpr, setExpr, ThenDoSeq, DebugPointAtSequential.StmtOnly, m) - let recdExpr = - match ctorInfo.safeInitInfo with + let recdExpr = + match ctorInfo.safeInitInfo with | NoSafeInitInfo -> recdExpr - | SafeInitField (rfref, _) -> + | SafeInitField (rfref, _) -> let thisTy = tyOfExpr g recdExpr let thisExpr = mkGetArg0 m thisTy let thisTyInst = argsOfAppTy g thisTy let setExpr = mkRecdFieldSetViaExprAddr (thisExpr, rfref, thisTyInst, mkOne g m, m) Expr.Sequential (recdExpr, setExpr, ThenDoSeq, DebugPointAtSequential.StmtOnly, m) recdExpr - - let rec checkAndRewrite (expr: Expr) = - match expr with - // = { fields } - // The constructor ends in an object initialization expression - good + + let rec checkAndRewrite (expr: Expr) = + match expr with + // = { fields } + // The constructor ends in an object initialization expression - good | Expr.Op (TOp.Recd (RecdExprIsObjInit, _), _, _, _) -> rewriteConstruction expr - // = "a; " - | Expr.Sequential (a, body, NormalSeq, spSeq, b) -> Expr.Sequential (a, checkAndRewrite body, NormalSeq, spSeq, b) + // = "a; " + | Expr.Sequential (a, body, NormalSeq, spSeq, b) -> Expr.Sequential (a, checkAndRewrite body, NormalSeq, spSeq, b) - // = " then " + // = " then " | Expr.Sequential (body, a, ThenDoSeq, spSeq, b) -> Expr.Sequential (checkAndRewrite body, a, ThenDoSeq, spSeq, b) - // = "let pat = expr in " + // = "let pat = expr in " | Expr.Let (bind, body, m, _) -> mkLetBind m bind (checkAndRewrite body) - // The constructor is a sequence "let pat = expr in " + // The constructor is a sequence "let pat = expr in " | Expr.Match (spBind, a, b, targets, c, d) -> Expr.Match (spBind, a, b, (targets |> Array.map (fun (TTarget(vs, body, spTarget)) -> TTarget(vs, checkAndRewrite body, spTarget))), c, d) - // = "let rec binds in " + // = "let rec binds in " | Expr.LetRec (a, body, _, _) -> Expr.LetRec (a, checkAndRewrite body, m, Construct.NewFreeVarsCache()) - // = "new C(...)" - | Expr.App (f, b, c, d, m) -> - // The application had better be an application of a ctor + // = "new C(...)" + | Expr.App (f, b, c, d, m) -> + // The application had better be an application of a ctor let f = checkAndRewriteCtorUsage f let expr = Expr.App (f, b, c, d, m) - rewriteConstruction expr + rewriteConstruction expr - | _ -> + | _ -> error expr - and checkAndRewriteCtorUsage expr = - match expr with - | Expr.Link eref -> + and checkAndRewriteCtorUsage expr = + match expr with + | Expr.Link eref -> let e = checkAndRewriteCtorUsage !eref eref := e expr - - // Type applications are ok, e.g. - // type C<'a>(x: int) = - // new() = C<'a>(3) - | Expr.App (f, fty, tyargs, [], m) -> + + // Type applications are ok, e.g. + // type C<'a>(x: int) = + // new() = C<'a>(3) + | Expr.App (f, fty, tyargs, [], m) -> let f = checkAndRewriteCtorUsage f Expr.App (f, fty, tyargs, [], m) - // Self-calls are OK and get rewritten. + // Self-calls are OK and get rewritten. | Expr.Val (vref, NormalValUse, a) -> - let isCtor = - match vref.MemberInfo with + let isCtor = + match vref.MemberInfo with | None -> false - | Some memberInfo -> memberInfo.MemberFlags.MemberKind = MemberKind.Constructor + | Some memberInfo -> memberInfo.MemberFlags.MemberKind = SynMemberKind.Constructor - if not isCtor then - error expr + if not isCtor then + error expr else Expr.Val (vref, CtorValUsedAsSelfInit, a) - | _ -> + | _ -> error expr - + let body = checkAndRewrite body - mkMultiLambdas m tps vsl (body, returnTy) - + mkMultiLambdas m tps vsl (body, returnTy) + /// Post-typechecking normalizations to enforce semantic constraints /// lazy and, lazy or, rethrow, address-of -let buildApp cenv expr resultTy arg m = +let buildApp cenv expr resultTy arg m = let g = cenv.g - match expr, arg with + match expr, arg with // Special rule for building applications of the 'x && y' operator - | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [x0], _), _), _ - when valRefEq g vf g.and_vref - || valRefEq g vf g.and2_vref -> + | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [x0], _), _), _ + when valRefEq g vf g.and_vref + || valRefEq g vf g.and2_vref -> MakeApplicableExprNoFlex cenv (mkLazyAnd g m x0 arg), resultTy // Special rule for building applications of the 'x || y' operator - | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [x0], _), _), _ + | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [x0], _), _), _ when valRefEq g vf g.or_vref - || valRefEq g vf g.or2_vref -> + || valRefEq g vf g.or2_vref -> MakeApplicableExprNoFlex cenv (mkLazyOr g m x0 arg ), resultTy // Special rule for building applications of the 'reraise' operator - | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [], _), _), _ - when valRefEq g vf g.reraise_vref -> + | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [], _), _), _ + when valRefEq g vf g.reraise_vref -> - // exprty is of type: "unit -> 'a". Break it and store the 'a type here, used later as return type. + // exprty is of type: "unit -> 'a". Break it and store the 'a type here, used later as return type. MakeApplicableExprNoFlex cenv (mkCompGenSequential m arg (mkReraise m resultTy)), resultTy // Special rules for NativePtr.ofByRef to generalize result. // See RFC FS-1053.md - | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [], _), _), _ - when (valRefEq g vf g.nativeptr_tobyref_vref) -> + | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [], _), _), _ + when (valRefEq g vf g.nativeptr_tobyref_vref) -> let argty = NewInferenceType() let resultTy = mkByrefTyWithInference g argty (NewByRefKindInferenceType g m) - expr.SupplyArgument (arg, m), resultTy + expr.SupplyArgument (arg, m), resultTy // Special rules for building applications of the '&expr' operator, which gets the // address of an expression. // // See also RFC FS-1053.md - | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [], _), _), _ - when valRefEq g vf g.addrof_vref -> + | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [], _), _), _ + when valRefEq g vf g.addrof_vref -> let wrap, e1a', readonly, _writeonly = mkExprAddrOfExpr g true false AddressOfOp arg (Some vf) m // Assert the result type to be readonly if we couldn't take the address - let resultTy = + let resultTy = let argTy = tyOfExpr g arg if readonly then mkInByrefTy g argTy // "`outref<'T>` types are never introduced implicitly by F#.", see rationale in RFC FS-1053 // - // We do _not_ introduce outref here, e.g. '&x' where 'x' is outref<_> is _not_ outref. + // We do _not_ introduce outref here, e.g. '&x' where 'x' is outref<_> is _not_ outref. // This effectively makes 'outref<_>' documentation-only. There is frequently a need to pass outref // pointers to .NET library functions whose signatures are not tagged with [] //elif writeonly then @@ -3645,34 +3656,34 @@ let buildApp cenv expr resultTy arg m = // Special rules for building applications of the &&expr' operators, which gets the // address of an expression. - | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [], _), _), _ - when valRefEq g vf g.addrof2_vref -> + | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [], _), _), _ + when valRefEq g vf g.addrof2_vref -> warning(UseOfAddressOfOperator m) let wrap, e1a', _readonly, _writeonly = mkExprAddrOfExpr g true false AddressOfOp arg (Some vf) m MakeApplicableExprNoFlex cenv (wrap(e1a')), resultTy | _ when isByrefTy g resultTy -> - // Handle byref returns, byref-typed returns get implicitly dereferenced + // Handle byref returns, byref-typed returns get implicitly dereferenced let expr = expr.SupplyArgument (arg, m) let expr = mkDerefAddrExpr m expr.Expr m resultTy let resultTy = destByrefTy g resultTy MakeApplicableExprNoFlex cenv expr, resultTy - | _ -> - expr.SupplyArgument (arg, m), resultTy + | _ -> + expr.SupplyArgument (arg, m), resultTy //------------------------------------------------------------------------- // Additional data structures used by type checking -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -type DelayedItem = +type DelayedItem = /// DelayedTypeApp (typeArgs, mTypeArgs, mExprAndTypeArgs) /// /// Represents the in "item" | DelayedTypeApp of SynType list * range * range - /// DelayedApp (isAtomic, argExpr, mFuncAndArg) + /// DelayedApp (isAtomic, argExpr, mFuncAndArg) /// /// Represents the args in "item args", or "item.[args]". | DelayedApp of ExprAtomicFlag * SynExpr * range @@ -3682,34 +3693,34 @@ type DelayedItem = /// Represents an incomplete "item." | DelayedDot - + /// Represents the valueExpr in "item <- valueExpr", also "item.[indexerArgs] <- valueExpr" etc. | DelayedSet of SynExpr * range -let MakeDelayedSet(e: SynExpr, m) = - // We have longId <- e. Wrap 'e' in another pair of parentheses to ensure it's never interpreted as - // a named argument, e.g. for "el.Checked <- (el = el2)" +let MakeDelayedSet(e: SynExpr, m) = + // We have longId <- e. Wrap 'e' in another pair of parentheses to ensure it's never interpreted as + // a named argument, e.g. for "el.Checked <- (el = el2)" DelayedSet (SynExpr.Paren (e, range0, None, e.Range), m) /// Indicates if member declarations are allowed to be abstract members. -type NewSlotsOK = - | NewSlotsOK +type NewSlotsOK = + | NewSlotsOK | NoNewSlots /// Indicates whether a syntactic type is allowed to include new type variables /// not declared anywhere, e.g. `let f (x: 'T option) = x.Value` -type ImplicitlyBoundTyparsAllowed = - | NewTyparsOKButWarnIfNotRigid - | NewTyparsOK +type ImplicitlyBoundTyparsAllowed = + | NewTyparsOKButWarnIfNotRigid + | NewTyparsOK | NoNewTypars /// Indicates whether constraints should be checked when checking syntactic types -type CheckConstraints = - | CheckCxs +type CheckConstraints = + | CheckCxs | NoCheckCxs /// Represents information about the module or type in which a member or value is declared. -type MemberOrValContainerInfo = +type MemberOrValContainerInfo = | MemberOrValContainerInfo of tcref: TyconRef * optIntfSlotTy: (TType * SlotImplSet) option * @@ -3717,18 +3728,18 @@ type MemberOrValContainerInfo = safeInitInfo: SafeInitData * declaredTyconTypars: Typars -/// Provides information about the context for a value or member definition -type ContainerInfo = - | ContainerInfo of - // The nearest containing module. Used as the 'actual' parent for extension members and values - ParentRef * +/// Provides information about the context for a value or member definition +type ContainerInfo = + | ContainerInfo of + // The nearest containing module. Used as the 'actual' parent for extension members and values + ParentRef * // For members: MemberOrValContainerInfo option member x.ParentRef = - let (ContainerInfo(v, _)) = x + let (ContainerInfo(v, _)) = x v - -/// Indicates a declaration is contained in an expression + +/// Indicates a declaration is contained in an expression let ExprContainerInfo = ContainerInfo(ParentNone, None) type NormalizedRecBindingDefn = @@ -3747,35 +3758,35 @@ type ValSpecResult = declaredTypars: Typars * ty: TType * partialValReprInfo: PartialValReprInfo * - declKind: DeclKind + declKind: DeclKind //------------------------------------------------------------------------- // Additional data structures used by checking recursive bindings -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- type RecDefnBindingInfo = - | RecDefnBindingInfo of + | RecDefnBindingInfo of containerInfo: ContainerInfo * newslotsOk: NewSlotsOK * declKind: DeclKind * synBinding: SynBinding -/// RecursiveBindingInfo - flows through initial steps of TcLetrec +/// RecursiveBindingInfo - flows through initial steps of TcLetrec type RecursiveBindingInfo = | RecursiveBindingInfo of recBindIndex: int * // index of the binding in the recursive group - containerInfo: ContainerInfo * - enclosingDeclaredTypars: Typars * - inlineFlag: ValInline * - vspec: Val * - explicitTyparInfo: ExplicitTyparInfo * - partialValReprInfo: PartialValReprInfo * - memberInfoOpt: PreValMemberInfo option * - baseValOpt: Val option * - safeThisValOpt: Val option * - safeInitInfo: SafeInitData * - visibility: SynAccess option * - ty: TType * + containerInfo: ContainerInfo * + enclosingDeclaredTypars: Typars * + inlineFlag: ValInline * + vspec: Val * + explicitTyparInfo: ExplicitTyparInfo * + partialValReprInfo: PartialValReprInfo * + memberInfoOpt: PreValMemberInfo option * + baseValOpt: Val option * + safeThisValOpt: Val option * + safeInitInfo: SafeInitData * + visibility: SynAccess option * + ty: TType * declKind: DeclKind member x.EnclosingDeclaredTypars = let (RecursiveBindingInfo(_, _, enclosingDeclaredTypars, _, _, _, _, _, _, _, _, _, _, _)) = x in enclosingDeclaredTypars @@ -3786,35 +3797,35 @@ type RecursiveBindingInfo = member x.ContainerInfo = let (RecursiveBindingInfo(_, c, _, _, _, _, _, _, _, _, _, _, _, _)) = x in c member x.DeclKind = let (RecursiveBindingInfo(_, _, _, _, _, _, _, _, _, _, _, _, _, declKind)) = x in declKind -type PreCheckingRecursiveBinding = - { SyntacticBinding: NormalizedBinding +type PreCheckingRecursiveBinding = + { SyntacticBinding: NormalizedBinding RecBindingInfo: RecursiveBindingInfo } -type PreGeneralizationRecursiveBinding = +type PreGeneralizationRecursiveBinding = { ExtraGeneralizableTypars: Typars CheckedBinding: CheckedBindingInfo RecBindingInfo: RecursiveBindingInfo } -type PostGeneralizationRecursiveBinding = +type PostGeneralizationRecursiveBinding = { ValScheme: ValScheme CheckedBinding: CheckedBindingInfo RecBindingInfo: RecursiveBindingInfo } member x.GeneralizedTypars = x.ValScheme.GeneralizedTypars -type PostSpecialValsRecursiveBinding = +type PostSpecialValsRecursiveBinding = { ValScheme: ValScheme Binding: Binding } -let CanInferExtraGeneralizedTyparsForRecBinding (pgrbind: PreGeneralizationRecursiveBinding) = +let CanInferExtraGeneralizedTyparsForRecBinding (pgrbind: PreGeneralizationRecursiveBinding) = let explicitTyparInfo = pgrbind.RecBindingInfo.ExplicitTyparInfo let (ExplicitTyparInfo(_, _, canInferTypars)) = explicitTyparInfo let memFlagsOpt = pgrbind.RecBindingInfo.Val.MemberInfo |> Option.map (fun memInfo -> memInfo.MemberFlags) let canInferTypars = GeneralizationHelpers.ComputeCanInferExtraGeneralizableTypars (pgrbind.RecBindingInfo.ContainerInfo.ParentRef, canInferTypars, memFlagsOpt) - canInferTypars + canInferTypars /// Get the "this" variable from an instance member binding let GetInstanceMemberThisVariable (vspec: Val, expr) = - // Skip over LAM tps. Choose 'a. + // Skip over LAM tps. Choose 'a. if vspec.IsInstanceMember then let rec firstArg e = match e with @@ -3822,101 +3833,101 @@ let GetInstanceMemberThisVariable (vspec: Val, expr) = | Expr.TyChoose (_, b, _) -> firstArg b | Expr.Lambda (_, _, _, [v], _, _, _) -> Some v | _ -> failwith "GetInstanceMemberThisVariable: instance member did not have expected internal form" - + firstArg expr else None //------------------------------------------------------------------------- // Checking types and type constraints -//------------------------------------------------------------------------- -/// Check specifications of constraints on type parameters -let rec TcTyparConstraint ridx cenv newOk checkCxs occ (env: TcEnv) tpenv c = +//------------------------------------------------------------------------- +/// Check specifications of constraints on type parameters +let rec TcTyparConstraint ridx cenv newOk checkCxs occ (env: TcEnv) tpenv c = let checkSimpleConstraint tp m constraintAdder = let tp', tpenv = TcTypar cenv env newOk tpenv tp - constraintAdder env.DisplayEnv cenv.css m NoTrace (mkTyparTy tp') - tpenv + constraintAdder env.DisplayEnv cenv.css m NoTrace (mkTyparTy tp') + tpenv - match c with - | WhereTyparDefaultsToType(tp, ty, m) -> + match c with + | SynTypeConstraint.WhereTyparDefaultsToType(tp, ty, m) -> let ty', tpenv = TcTypeAndRecover cenv newOk checkCxs occ env tpenv ty let tp', tpenv = TcTypar cenv env newOk tpenv tp AddCxTyparDefaultsTo env.DisplayEnv cenv.css m env.eContextInfo tp' ridx ty' tpenv - | WhereTyparSubtypeOfType(tp, ty, m) -> + | SynTypeConstraint.WhereTyparSubtypeOfType(tp, ty, m) -> let ty', tpenv = TcTypeAndRecover cenv newOk checkCxs ItemOccurence.UseInType env tpenv ty let tp', tpenv = TcTypar cenv env newOk tpenv tp - if newOk = NoNewTypars && isSealedTy cenv.g ty' then + if newOk = NoNewTypars && isSealedTy cenv.g ty' then errorR(Error(FSComp.SR.tcInvalidConstraintTypeSealed(), m)) - AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css m NoTrace ty' (mkTyparTy tp') + AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css m NoTrace ty' (mkTyparTy tp') tpenv - | WhereTyparSupportsNull(tp, m) -> checkSimpleConstraint tp m AddCxTypeMustSupportNull + | SynTypeConstraint.WhereTyparSupportsNull(tp, m) -> checkSimpleConstraint tp m AddCxTypeMustSupportNull + + | SynTypeConstraint.WhereTyparIsComparable(tp, m) -> checkSimpleConstraint tp m AddCxTypeMustSupportComparison - | WhereTyparIsComparable(tp, m) -> checkSimpleConstraint tp m AddCxTypeMustSupportComparison + | SynTypeConstraint.WhereTyparIsEquatable(tp, m) -> checkSimpleConstraint tp m AddCxTypeMustSupportEquality - | WhereTyparIsEquatable(tp, m) -> checkSimpleConstraint tp m AddCxTypeMustSupportEquality + | SynTypeConstraint.WhereTyparIsReferenceType(tp, m) -> checkSimpleConstraint tp m AddCxTypeIsReferenceType - | WhereTyparIsReferenceType(tp, m) -> checkSimpleConstraint tp m AddCxTypeIsReferenceType + | SynTypeConstraint.WhereTyparIsValueType(tp, m) -> checkSimpleConstraint tp m AddCxTypeIsValueType - | WhereTyparIsValueType(tp, m) -> checkSimpleConstraint tp m AddCxTypeIsValueType - - | WhereTyparIsUnmanaged(tp, m) -> checkSimpleConstraint tp m AddCxTypeIsUnmanaged + | SynTypeConstraint.WhereTyparIsUnmanaged(tp, m) -> checkSimpleConstraint tp m AddCxTypeIsUnmanaged - | WhereTyparIsEnum(tp, tyargs, m) -> + | SynTypeConstraint.WhereTyparIsEnum(tp, tyargs, m) -> let tp', tpenv = TcTypar cenv env newOk tpenv tp - let tpenv = - match tyargs with - | [underlying] -> + let tpenv = + match tyargs with + | [underlying] -> let underlying', tpenv = TcTypeAndRecover cenv newOk checkCxs ItemOccurence.UseInType env tpenv underlying AddCxTypeIsEnum env.DisplayEnv cenv.css m NoTrace (mkTyparTy tp') underlying' tpenv - | _ -> + | _ -> errorR(Error(FSComp.SR.tcInvalidEnumConstraint(), m)) tpenv tpenv - | WhereTyparIsDelegate(tp, tyargs, m) -> + | SynTypeConstraint.WhereTyparIsDelegate(tp, tyargs, m) -> let tp', tpenv = TcTypar cenv env newOk tpenv tp - match tyargs with - | [a;b] -> + match tyargs with + | [a;b] -> let a', tpenv = TcTypeAndRecover cenv newOk checkCxs occ env tpenv a let b', tpenv = TcTypeAndRecover cenv newOk checkCxs occ env tpenv b AddCxTypeIsDelegate env.DisplayEnv cenv.css m NoTrace (mkTyparTy tp') a' b' tpenv - | _ -> + | _ -> errorR(Error(FSComp.SR.tcInvalidEnumConstraint(), m)) tpenv - | WhereTyparSupportsMember(tps, memSpfn, m) -> + | SynTypeConstraint.WhereTyparSupportsMember(tps, memSpfn, m) -> let traitInfo, tpenv = TcPseudoMemberSpec cenv newOk env tps tpenv memSpfn m - match traitInfo with - | TTrait(objtys, ".ctor", memberFlags, argTys, returnTy, _) when memberFlags.MemberKind = MemberKind.Constructor -> - match objtys, argTys with + match traitInfo with + | TTrait(objtys, ".ctor", memberFlags, argTys, returnTy, _) when memberFlags.MemberKind = SynMemberKind.Constructor -> + match objtys, argTys with | [ty], [] when typeEquiv cenv.g ty (GetFSharpViewOfReturnType cenv.g returnTy) -> - AddCxTypeMustSupportDefaultCtor env.DisplayEnv cenv.css m NoTrace ty + AddCxTypeMustSupportDefaultCtor env.DisplayEnv cenv.css m NoTrace ty tpenv - | _ -> + | _ -> errorR(Error(FSComp.SR.tcInvalidNewConstraint(), m)) tpenv - | _ -> + | _ -> AddCxMethodConstraint env.DisplayEnv cenv.css m NoTrace traitInfo tpenv - -and TcPseudoMemberSpec cenv newOk env synTypes 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 tys, tpenv = List.mapFold (TcTypeAndRecover cenv newOk CheckCxs ItemOccurence.UseInType env) tpenv synTypes #endif - match memSpfn with + match memSpfn with | SynMemberSig.Member (valSpfn, memberFlags, m) -> // REVIEW: Test pseudo constraints cannot refer to polymorphic methods. - // REVIEW: Test pseudo constraints cannot be curried. + // REVIEW: Test pseudo constraints cannot be curried. let members, tpenv = TcValSpec cenv env ModuleOrMemberBinding newOk ExprContainerInfo (Some memberFlags) (Some (List.head tys)) tpenv valSpfn [] - match members with - | [ValSpecResult(_, _, id, _, _, memberConstraintTy, partialValReprInfo, _)] -> + match members with + | [ValSpecResult(_, _, id, _, _, memberConstraintTy, partialValReprInfo, _)] -> let memberConstraintTypars, _ = tryDestForallTy cenv.g memberConstraintTy let topValInfo = TranslatePartialArity memberConstraintTypars partialValReprInfo let _, _, curriedArgInfos, returnTy, _ = GetTopValTypeInCompiledForm cenv.g topValInfo 0 memberConstraintTy m @@ -3935,166 +3946,166 @@ and TcPseudoMemberSpec cenv newOk env synTypes tpenv memSpfn m = /// Check a value specification, e.g. in a signature, interface declaration or a constraint and TcValSpec cenv env declKind newOk containerInfo memFlagsOpt thisTyOpt tpenv valSpfn attrs = - let (ValSpfn(_, id, SynValTyparDecls(synTypars, _, synTyparConstraints), ty, valSynInfo, _, _, _, _, _, m)) = valSpfn + let (SynValSig(_, id, ValTyparDecls (synTypars, synTyparConstraints, _), ty, valSynInfo, _, _, _, _, _, m)) = valSpfn let declaredTypars = TcTyparDecls cenv env synTypars let (ContainerInfo(altActualParent, tcrefContainerInfo)) = containerInfo - let enclosingDeclaredTypars, memberContainerInfo, thisTyOpt, declKind = - match tcrefContainerInfo with - | Some(MemberOrValContainerInfo(tcref, _, _, _, declaredTyconTypars)) -> + let enclosingDeclaredTypars, memberContainerInfo, thisTyOpt, declKind = + match tcrefContainerInfo with + | Some(MemberOrValContainerInfo(tcref, _, _, _, declaredTyconTypars)) -> let isExtrinsic = (declKind = ExtrinsicExtensionBinding) let _, enclosingDeclaredTypars, _, _, thisTy = FreshenObjectArgType cenv m TyparRigidity.Rigid tcref isExtrinsic declaredTyconTypars - // An implemented interface type is in terms of the type's type parameters. - // We need a signature in terms of the values' type parameters. - // let optIntfSlotTy = Option.map (instType renaming) optIntfSlotTy in + // An implemented interface type is in terms of the type's type parameters. + // We need a signature in terms of the values' type parameters. + // let optIntfSlotTy = Option.map (instType renaming) optIntfSlotTy in enclosingDeclaredTypars, Some tcref, Some thisTy, declKind - | None -> + | None -> [], None, thisTyOpt, ModuleOrMemberBinding let allDeclaredTypars = enclosingDeclaredTypars @ declaredTypars let envinner = AddDeclaredTypars NoCheckForDuplicateTypars allDeclaredTypars env let checkCxs = CheckCxs let tpenv = TcTyparConstraints cenv newOk checkCxs ItemOccurence.UseInType envinner tpenv synTyparConstraints - + // Treat constraints at the "end" of the type as if they are declared. // This is by far the most convenient place to locate the constraints. - // e.g. - // val FastGenericComparer<'T>: IComparer<'T> when 'T: comparison - let tpenv = - match ty with + // e.g. + // val FastGenericComparer<'T>: IComparer<'T> when 'T: comparison + let tpenv = + match ty with | SynType.WithGlobalConstraints(_, wcs, _) -> TcTyparConstraints cenv newOk checkCxs ItemOccurence.UseInType envinner tpenv wcs - | _ -> + | _ -> tpenv // Enforce "no undeclared constraints allowed on declared typars" allDeclaredTypars |> List.iter (SetTyparRigid env.DisplayEnv m) - // Process the type, including any constraints - let declaredTy, tpenv = TcTypeAndRecover cenv newOk checkCxs ItemOccurence.UseInType envinner tpenv ty + // Process the type, including any constraints + let declaredTy, tpenv = TcTypeAndRecover cenv newOk checkCxs ItemOccurence.UseInType envinner tpenv ty + + match memFlagsOpt, thisTyOpt with + | Some memberFlags, Some thisTy -> + let generateOneMember (memberFlags: SynMemberFlags) = - match memFlagsOpt, thisTyOpt with - | Some memberFlags, Some thisTy -> - let generateOneMember memberFlags = - // Decode members in the signature - let ty', valSynInfo = - match memberFlags.MemberKind with - | MemberKind.ClassConstructor - | MemberKind.Constructor - | MemberKind.Member -> + let ty', valSynInfo = + match memberFlags.MemberKind with + | SynMemberKind.ClassConstructor + | SynMemberKind.Constructor + | SynMemberKind.Member -> declaredTy, valSynInfo - | MemberKind.PropertyGet - | MemberKind.PropertySet -> + | SynMemberKind.PropertyGet + | SynMemberKind.PropertySet -> let fakeArgReprInfos = [ for n in SynInfo.AritiesOfArgs valSynInfo do yield [ for _ in 1 .. n do yield ValReprInfo.unnamedTopArg1 ] ] let arginfos, returnTy = GetTopTauTypeInFSharpForm cenv.g fakeArgReprInfos declaredTy m if arginfos.Length > 1 then error(Error(FSComp.SR.tcInvalidPropertyType(), m)) - match memberFlags.MemberKind with - | MemberKind.PropertyGet -> - if SynInfo.HasNoArgs valSynInfo then + match memberFlags.MemberKind with + | SynMemberKind.PropertyGet -> + if SynInfo.HasNoArgs valSynInfo then (cenv.g.unit_ty --> declaredTy), (SynInfo.IncorporateEmptyTupledArgForPropertyGetter valSynInfo) else declaredTy, valSynInfo - | _ -> + | _ -> 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 -> - error(InternalError("Unexpected MemberKind.PropertyGetSet from signature parsing", m)) + | SynMemberKind.PropertyGetSet -> + error(InternalError("Unexpected SynMemberKind.PropertyGetSet from signature parsing", m)) // Take "unit" into account in the signature let valSynInfo = AdjustValSynInfoInSignature cenv.g ty' valSynInfo - let ty', valSynInfo = - if memberFlags.IsInstance then + let ty', valSynInfo = + if memberFlags.IsInstance then (thisTy --> ty'), (SynInfo.IncorporateSelfArg valSynInfo) else ty', valSynInfo - let reallyGenerateOneMember(id: Ident, valSynInfo, ty', memberFlags) = - let (PartialValReprInfo(argsData, _)) as partialValReprInfo = + let reallyGenerateOneMember(id: Ident, valSynInfo, ty', memberFlags) = + let (PartialValReprInfo(argsData, _)) as partialValReprInfo = TranslateTopValSynInfo id.idRange (TcAttributes cenv env) valSynInfo - // Fold in the optional argument information - // Resort to using the syntactic argument information since that is what tells us - // what is optional and what is not. - let ty' = + // Fold in the optional argument information + // Resort to using the syntactic argument information since that is what tells us + // what is optional and what is not. + let ty' = - if SynInfo.HasOptionalArgs valSynInfo then + if SynInfo.HasOptionalArgs valSynInfo then let curriedArgTys, returnTy = GetTopTauTypeInFSharpForm cenv.g argsData ty' m - let curriedArgTys = - (List.zip (List.mapSquared fst curriedArgTys) valSynInfo.CurriedArgInfos) - |> List.map (fun (argTys, argInfos) -> - (List.zip argTys argInfos) - |> List.map (fun (argty, argInfo) -> + let curriedArgTys = + ((List.mapSquared fst curriedArgTys), valSynInfo.CurriedArgInfos) + ||> List.map2 (fun argTys argInfos -> + (argTys, argInfos) + ||> List.map2 (fun argty argInfo -> if SynInfo.IsOptionalArg argInfo then mkOptionTy cenv.g argty else argty)) mkIteratedFunTy (List.map (mkRefTupledTy cenv.g) curriedArgTys) returnTy - else ty' - - let memberInfoOpt = - match memberContainerInfo with - | Some tcref -> + else ty' + + let memberInfoOpt = + match memberContainerInfo with + | Some tcref -> let isExtrinsic = (declKind = ExtrinsicExtensionBinding) let memberInfoTransient = MakeMemberDataAndMangledNameForMemberVal(cenv.g, tcref, isExtrinsic, attrs, [], memberFlags, valSynInfo, id, false) Some memberInfoTransient - | None -> + | None -> None - + ValSpecResult(altActualParent, memberInfoOpt, id, enclosingDeclaredTypars, declaredTypars, ty', partialValReprInfo, declKind) [ yield reallyGenerateOneMember(id, valSynInfo, ty', memberFlags) - if CompileAsEvent cenv.g attrs then + if CompileAsEvent cenv.g attrs then let valSynInfo = EventDeclarationNormalization.ConvertSynInfo id.idRange valSynInfo let memberFlags = EventDeclarationNormalization.ConvertMemberFlags memberFlags - let delTy = FindDelegateTypeOfPropertyEvent cenv.g cenv.amap id.idText id.idRange declaredTy - let ty = - if memberFlags.IsInstance then + let delTy = FindDelegateTypeOfPropertyEvent cenv.g cenv.amap id.idText id.idRange declaredTy + let ty = + if memberFlags.IsInstance then thisTy --> (delTy --> cenv.g.unit_ty) - else + else (delTy --> cenv.g.unit_ty) yield reallyGenerateOneMember(ident("add_" + id.idText, id.idRange), valSynInfo, ty, memberFlags) yield reallyGenerateOneMember(ident("remove_" + id.idText, id.idRange), valSynInfo, ty, memberFlags) ] - - - - match memberFlags.MemberKind with - | MemberKind.ClassConstructor - | MemberKind.Constructor - | MemberKind.Member - | MemberKind.PropertyGet - | MemberKind.PropertySet -> + + + + match memberFlags.MemberKind with + | SynMemberKind.ClassConstructor + | SynMemberKind.Constructor + | SynMemberKind.Member + | SynMemberKind.PropertyGet + | SynMemberKind.PropertySet -> generateOneMember memberFlags, tpenv - | MemberKind.PropertyGetSet -> - [ yield! generateOneMember({memberFlags with MemberKind=MemberKind.PropertyGet}) - yield! generateOneMember({memberFlags with MemberKind=MemberKind.PropertySet}) ], tpenv + | SynMemberKind.PropertyGetSet -> + [ yield! generateOneMember({memberFlags with MemberKind=SynMemberKind.PropertyGet}) + yield! generateOneMember({memberFlags with MemberKind=SynMemberKind.PropertySet}) ], tpenv | _ -> let valSynInfo = AdjustValSynInfoInSignature cenv.g declaredTy valSynInfo let partialValReprInfo = TranslateTopValSynInfo id.idRange (TcAttributes cenv env) valSynInfo [ ValSpecResult(altActualParent, None, id, enclosingDeclaredTypars, declaredTypars, declaredTy, partialValReprInfo, declKind) ], tpenv //------------------------------------------------------------------------- -// Bind types -//------------------------------------------------------------------------- +// Bind types +//------------------------------------------------------------------------- /// Check and elaborate a type or measure parameter occurrence /// If optKind=Some kind, then this is the kind we're expecting (we're in *analysis* mode) /// If optKind=None, we need to determine the kind (we're in *synthesis* mode) /// -and TcTyparOrMeasurePar optKind cenv (env: TcEnv) newOk tpenv (Typar(id, _, _) as tp) = +and TcTyparOrMeasurePar optKind cenv (env: TcEnv) newOk tpenv (SynTypar(id, _, _) as tp) = let checkRes (res: Typar) = match optKind, res.Kind with | Some TyparKind.Measure, TyparKind.Type -> error (Error(FSComp.SR.tcExpectedUnitOfMeasureMarkWithAttribute(), id.idRange)); res, tpenv | Some TyparKind.Type, TyparKind.Measure -> error (Error(FSComp.SR.tcExpectedTypeParameter(), id.idRange)); res, tpenv - | _, _ -> + | _, _ -> let item = Item.TypeVar(id.idText, res) CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.UseInType, env.AccessRights) res, tpenv let key = id.idText match env.eNameResEnv.eTypars.TryGetValue key with | true, res -> checkRes res - | _ -> + | _ -> match TryFindUnscopedTypar key tpenv with | Some res -> checkRes res - | None -> + | None -> if newOk = NoNewTypars then let suggestTypeParameters (addToBuffer: string -> unit) = for p in env.eNameResEnv.eTypars do @@ -4107,8 +4118,8 @@ and TcTyparOrMeasurePar optKind cenv (env: TcEnv) newOk tpenv (Typar(id, _, _) a let reportedId = Ident("'" + id.idText, id.idRange) error (UndefinedName(0, FSComp.SR.undefinedNameTypeParameter, reportedId, suggestTypeParameters)) - - // OK, this is an implicit declaration of a type parameter + + // OK, this is an implicit declaration of a type parameter // The kind defaults to Type let kind = match optKind with None -> TyparKind.Type | Some kind -> kind let tp' = Construct.NewTypar (kind, TyparRigidity.WarnIfNotRigid, tp, false, TyparDynamicReq.Yes, [], false, false) @@ -4119,7 +4130,7 @@ and TcTyparOrMeasurePar optKind cenv (env: TcEnv) newOk tpenv (Typar(id, _, _) a and TcTypar cenv env newOk tpenv tp = TcTyparOrMeasurePar (Some TyparKind.Type) cenv env newOk tpenv tp -and TcTyparDecl cenv env (TyparDecl(Attributes synAttrs, (Typar(id, _, _) as stp))) = +and TcTyparDecl cenv env (SynTyparDecl(Attributes synAttrs, (SynTypar(id, _, _) as stp))) = let attrs = TcAttributes cenv env AttributeTargets.GenericParameter synAttrs let hasMeasureAttr = HasFSharpAttribute cenv.g cenv.g.attrib_MeasureAttribute attrs let hasEqDepAttr = HasFSharpAttribute cenv.g cenv.g.attrib_EqualityConditionalOnAttribute attrs @@ -4127,15 +4138,15 @@ and TcTyparDecl cenv env (TyparDecl(Attributes synAttrs, (Typar(id, _, _) as stp let attrs = attrs |> List.filter (IsMatchingFSharpAttribute cenv.g cenv.g.attrib_MeasureAttribute >> not) let kind = if hasMeasureAttr then TyparKind.Measure else TyparKind.Type let tp = Construct.NewTypar (kind, TyparRigidity.WarnIfNotRigid, stp, false, TyparDynamicReq.Yes, attrs, hasEqDepAttr, hasCompDepAttr) - match TryFindFSharpStringAttribute cenv.g cenv.g.attrib_CompiledNameAttribute attrs with - | Some compiledName -> + match TryFindFSharpStringAttribute cenv.g cenv.g.attrib_CompiledNameAttribute attrs with + | Some compiledName -> tp.SetILName (Some compiledName) - | None -> + | None -> () let item = Item.TypeVar(id.idText, tp) CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.UseInType, env.eAccessRights) tp - + and TcTyparDecls cenv env synTypars = List.map (TcTyparDecl cenv env) synTypars @@ -4146,70 +4157,70 @@ and TcTyparDecls cenv env synTypars = List.map (TcTyparDecl cenv env) synTypars and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv) ty = let g = cenv.g - match ty with - | SynType.LongIdent(LongIdentWithDots([], _)) -> + match ty with + | SynType.LongIdent(LongIdentWithDots([], _)) -> // special case when type name is absent - i.e. empty inherit part in type declaration g.obj_ty, tpenv - | SynType.LongIdent(LongIdentWithDots(tc, _) as lidwd) -> + | SynType.LongIdent(LongIdentWithDots(tc, _) as lidwd) -> let m = lidwd.Range let ad = env.eAccessRights let tinstEnclosing, tcref = ForceRaise(ResolveTypeLongIdent cenv.tcSink cenv.nameResolver occ OpenQualified env.NameEnv ad tc TypeNameResolutionStaticArgsInfo.DefiniteEmpty PermitDirectReferenceToGeneratedType.No) match optKind, tcref.TypeOrMeasureKind with | Some TyparKind.Type, TyparKind.Measure -> - error(Error(FSComp.SR.tcExpectedTypeNotUnitOfMeasure(), m)) + error(Error(FSComp.SR.tcExpectedTypeNotUnitOfMeasure(), m)) NewErrorType (), tpenv | Some TyparKind.Measure, TyparKind.Type -> - error(Error(FSComp.SR.tcExpectedUnitOfMeasureNotType(), m)) + error(Error(FSComp.SR.tcExpectedUnitOfMeasureNotType(), m)) TType_measure (NewErrorMeasure ()), tpenv | _, TyparKind.Measure -> TType_measure (Measure.Con tcref), tpenv | _, TyparKind.Type -> TcTypeApp cenv newOk checkCxs occ env tpenv m tcref tinstEnclosing [] - | SynType.App (StripParenTypes (SynType.LongIdent(LongIdentWithDots(tc, _))), _, args, _commas, _, postfix, m) -> + | SynType.App (StripParenTypes (SynType.LongIdent(LongIdentWithDots(tc, _))), _, args, _commas, _, postfix, m) -> let ad = env.eAccessRights - let tinstEnclosing, tcref = + let tinstEnclosing, tcref = let tyResInfo = TypeNameResolutionStaticArgsInfo.FromTyArgs args.Length ResolveTypeLongIdent cenv.tcSink cenv.nameResolver ItemOccurence.UseInType OpenQualified env.eNameResEnv ad tc tyResInfo PermitDirectReferenceToGeneratedType.No |> ForceRaise match optKind, tcref.TypeOrMeasureKind with | Some TyparKind.Type, TyparKind.Measure -> - error(Error(FSComp.SR.tcExpectedTypeNotUnitOfMeasure(), m)) + error(Error(FSComp.SR.tcExpectedTypeNotUnitOfMeasure(), m)) NewErrorType (), tpenv | Some TyparKind.Measure, TyparKind.Type -> - error(Error(FSComp.SR.tcExpectedUnitOfMeasureNotType(), m)) + error(Error(FSComp.SR.tcExpectedUnitOfMeasureNotType(), m)) TType_measure (NewErrorMeasure ()), tpenv | _, TyparKind.Type -> - if postfix && tcref.Typars m |> List.exists (fun tp -> match tp.Kind with TyparKind.Measure -> true | _ -> false) + if postfix && tcref.Typars m |> List.exists (fun tp -> match tp.Kind with TyparKind.Measure -> true | _ -> false) then error(Error(FSComp.SR.tcInvalidUnitsOfMeasurePrefix(), m)) - TcTypeApp cenv newOk checkCxs occ env tpenv m tcref tinstEnclosing args + TcTypeApp cenv newOk checkCxs occ env tpenv m tcref tinstEnclosing args | _, TyparKind.Measure -> match args, postfix with | [arg], true -> let ms, tpenv = TcMeasure cenv newOk checkCxs occ env tpenv arg m TType_measure (Measure.Prod(Measure.Con tcref, ms)), tpenv - + | _, _ -> errorR(Error(FSComp.SR.tcUnitsOfMeasureInvalidInTypeConstructor(), m)) - NewErrorType (), tpenv + NewErrorType (), tpenv - | SynType.LongIdentApp (ltyp, LongIdentWithDots(longId, _), _, args, _commas, _, m) -> + | SynType.LongIdentApp (ltyp, LongIdentWithDots(longId, _), _, args, _commas, _, m) -> let ad = env.eAccessRights let ltyp, tpenv = TcType cenv newOk checkCxs occ env tpenv ltyp match ltyp with | AppTy g (tcref, tinst) -> - let tcref = ResolveTypeLongIdentInTyconRef cenv.tcSink cenv.nameResolver env.eNameResEnv (TypeNameResolutionInfo.ResolveToTypeRefs (TypeNameResolutionStaticArgsInfo.FromTyArgs args.Length)) ad m tcref longId - TcTypeApp cenv newOk checkCxs occ env tpenv m tcref tinst args + let tcref = ResolveTypeLongIdentInTyconRef cenv.tcSink cenv.nameResolver env.eNameResEnv (TypeNameResolutionInfo.ResolveToTypeRefs (TypeNameResolutionStaticArgsInfo.FromTyArgs args.Length)) ad m tcref longId + TcTypeApp cenv newOk checkCxs occ env tpenv m tcref tinst args | _ -> error(Error(FSComp.SR.tcTypeHasNoNestedTypes(), m)) - | SynType.Tuple(isStruct, args, m) -> + | SynType.Tuple(isStruct, args, m) -> let tupInfo = mkTupInfo isStruct - if isStruct then + if isStruct then let args',tpenv = TcTypesAsTuple cenv newOk checkCxs occ env tpenv args m TType_tuple(tupInfo,args'),tpenv else @@ -4221,38 +4232,38 @@ and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv let args',tpenv = TcTypesAsTuple cenv newOk checkCxs occ env tpenv args m TType_tuple(tupInfo,args'),tpenv - | SynType.AnonRecd(_, [],m) -> + | SynType.AnonRecd(_, [],m) -> error(Error((FSComp.SR.tcAnonymousTypeInvalidInDeclaration()), m)) - | SynType.AnonRecd(isStruct, args,m) -> + | SynType.AnonRecd(isStruct, args,m) -> let tupInfo = mkTupInfo isStruct let args',tpenv = TcTypesAsTuple cenv newOk checkCxs occ env tpenv (args |> List.map snd |> List.map (fun x -> (false,x))) m let unsortedFieldIds = args |> List.map fst |> List.toArray let anonInfo = AnonRecdTypeInfo.Create(cenv.topCcu, tupInfo, unsortedFieldIds) // Sort into canonical order let sortedFieldTys, sortedCheckedArgTys = List.zip args args' |> List.indexed |> List.sortBy (fun (i,_) -> unsortedFieldIds.[i].idText) |> List.map snd |> List.unzip - sortedFieldTys |> List.iteri (fun i (x,_) -> + sortedFieldTys |> List.iteri (fun i (x,_) -> let item = Item.AnonRecdField(anonInfo, sortedCheckedArgTys, i, x.idRange) CallNameResolutionSink cenv.tcSink (x.idRange,env.NameEnv,item,emptyTyparInst,ItemOccurence.UseInType,env.eAccessRights)) TType_anon(anonInfo, sortedCheckedArgTys),tpenv - | SynType.Fun(domainTy, resultTy, _) -> + | SynType.Fun(domainTy, resultTy, _) -> let domainTy', tpenv = TcTypeAndRecover cenv newOk checkCxs occ env tpenv domainTy let resultTy', tpenv = TcTypeAndRecover cenv newOk checkCxs occ env tpenv resultTy (domainTy' --> resultTy'), tpenv - | SynType.Array (n, elemTy, m) -> + | SynType.Array (n, elemTy, m) -> let elemTy, tpenv = TcTypeAndRecover cenv newOk checkCxs occ env tpenv elemTy mkArrayTy g n elemTy m, tpenv - | SynType.Var (tp, _) -> + | SynType.Var (tp, _) -> let tp', tpenv = TcTyparOrMeasurePar optKind cenv env newOk tpenv tp match tp'.Kind with | TyparKind.Measure -> TType_measure (Measure.Var tp'), tpenv | TyparKind.Type -> mkTyparTy tp', tpenv // _ types - | SynType.Anon m -> + | SynType.Anon m -> let tp: Typar = TcAnonTypeOrMeasure optKind cenv TyparRigidity.Anon TyparDynamicReq.No newOk m match tp.Kind with | TyparKind.Measure -> TType_measure (Measure.Var tp), tpenv @@ -4263,43 +4274,43 @@ and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv let tpenv = TcTyparConstraints cenv newOk checkCxs occ env tpenv wcs cty, tpenv - // #typ - | SynType.HashConstraint(ty, m) -> + // #typ + | SynType.HashConstraint(ty, m) -> let tp = TcAnonTypeOrMeasure (Some TyparKind.Type) cenv TyparRigidity.WarnIfNotRigid TyparDynamicReq.Yes newOk m let ty', tpenv = TcTypeAndRecover cenv newOk checkCxs occ env tpenv ty - AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css m NoTrace ty' (mkTyparTy tp) + AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css m NoTrace ty' (mkTyparTy tp) tp.AsType, tpenv | SynType.StaticConstant (c, m) -> match c, optKind with - | _, Some TyparKind.Type -> - errorR(Error(FSComp.SR.parsInvalidLiteralInType(), m)) + | _, Some TyparKind.Type -> + errorR(Error(FSComp.SR.parsInvalidLiteralInType(), m)) NewErrorType (), tpenv - | SynConst.Int32 1, _ -> + | SynConst.Int32 1, _ -> TType_measure Measure.One, tpenv - | _ -> - errorR(Error(FSComp.SR.parsInvalidLiteralInType(), m)) + | _ -> + errorR(Error(FSComp.SR.parsInvalidLiteralInType(), m)) NewErrorType (), tpenv | SynType.StaticConstantNamed (_, _, m) | SynType.StaticConstantExpr (_, m) -> - errorR(Error(FSComp.SR.parsInvalidLiteralInType(), m)) + errorR(Error(FSComp.SR.parsInvalidLiteralInType(), m)) NewErrorType (), tpenv | SynType.MeasurePower(ty, exponent, m) -> match optKind with - | Some TyparKind.Type -> - errorR(Error(FSComp.SR.tcUnexpectedSymbolInTypeExpression("^"), m)) + | Some TyparKind.Type -> + errorR(Error(FSComp.SR.tcUnexpectedSymbolInTypeExpression("^"), m)) NewErrorType (), tpenv - | _ -> + | _ -> let ms, tpenv = TcMeasure cenv newOk checkCxs occ env tpenv ty m TType_measure (Measure.RationalPower (ms, TcSynRationalConst exponent)), tpenv - | SynType.MeasureDivide(typ1, typ2, m) -> + | SynType.MeasureDivide(typ1, typ2, m) -> match optKind with - | Some TyparKind.Type -> - errorR(Error(FSComp.SR.tcUnexpectedSymbolInTypeExpression("/"), m)) + | Some TyparKind.Type -> + errorR(Error(FSComp.SR.tcUnexpectedSymbolInTypeExpression("/"), m)) NewErrorType (), tpenv | _ -> let ms1, tpenv = TcMeasure cenv newOk checkCxs occ env tpenv typ1 m @@ -4314,7 +4325,7 @@ and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv TType_measure (Measure.Prod(ms1, ms2)), tpenv | _ -> - errorR(Error(FSComp.SR.tcTypeParameterInvalidAsTypeConstructor(), m)) + errorR(Error(FSComp.SR.tcTypeParameterInvalidAsTypeConstructor(), m)) NewErrorType (), tpenv | SynType.App(_, _, _, _, _, _, m) -> @@ -4324,10 +4335,10 @@ and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv | SynType.Paren(innerType, _) -> TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv) innerType -and TcType cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv) ty = +and TcType cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv) ty = TcTypeOrMeasure (Some TyparKind.Type) cenv newOk checkCxs occ env tpenv ty -and TcMeasure cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv) (StripParenTypes ty) m = +and TcMeasure cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv) (StripParenTypes ty) m = match ty with | SynType.Anon m -> error(Error(FSComp.SR.tcAnonymousUnitsOfMeasureCannotBeNested(), m)) @@ -4335,35 +4346,35 @@ and TcMeasure cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv) (StripParenT | _ -> match TcTypeOrMeasure (Some TyparKind.Measure) cenv newOk checkCxs occ env tpenv ty with | TType_measure ms, tpenv -> ms, tpenv - | _ -> - error(Error(FSComp.SR.tcExpectedUnitOfMeasureNotType(), m)) + | _ -> + error(Error(FSComp.SR.tcExpectedUnitOfMeasureNotType(), m)) NewErrorMeasure (), tpenv and TcAnonTypeOrMeasure optKind _cenv rigid dyn newOk m = if newOk = NoNewTypars then errorR (Error(FSComp.SR.tcAnonymousTypeInvalidInDeclaration(), m)) let rigid = (if rigid = TyparRigidity.Anon && newOk = NewTyparsOKButWarnIfNotRigid then TyparRigidity.WarnIfNotRigid else rigid) let kind = match optKind with Some TyparKind.Measure -> TyparKind.Measure | _ -> TyparKind.Type - NewAnonTypar (kind, m, rigid, NoStaticReq, dyn) - + NewAnonTypar (kind, m, rigid, TyparStaticReq.None, dyn) + and TcTypes cenv newOk checkCxs occ env tpenv args = - List.mapFold (TcTypeAndRecover cenv newOk checkCxs occ env) tpenv args + List.mapFold (TcTypeAndRecover cenv newOk checkCxs occ env) tpenv args -and TcTypesAsTuple cenv newOk checkCxs occ env tpenv args m = +and TcTypesAsTuple cenv newOk checkCxs occ env tpenv args m = match args with | [] -> error(InternalError("empty tuple type", m)) | [(_, ty)] -> let ty, tpenv = TcTypeAndRecover cenv newOk checkCxs occ env tpenv ty in [ty], tpenv - | (isquot, ty) :: args -> + | (isquot, ty) :: args -> let ty, tpenv = TcTypeAndRecover cenv newOk checkCxs occ env tpenv ty let tys, tpenv = TcTypesAsTuple cenv newOk checkCxs occ env tpenv args m if isquot then errorR(Error(FSComp.SR.tcUnexpectedSlashInType(), m)) ty :: tys, tpenv // Type-check a list of measures separated by juxtaposition, * or / -and TcMeasuresAsTuple cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv) args m = +and TcMeasuresAsTuple cenv newOk checkCxs occ env (tpenv: UnscopedTyparEnv) args m = let rec gather args tpenv isquot acc = match args with | [] -> acc, tpenv - | (nextisquot, ty) :: args -> + | (nextisquot, ty) :: args -> let ms1, tpenv = TcMeasure cenv newOk checkCxs occ env tpenv ty m gather args tpenv nextisquot (if isquot then Measure.Prod(acc, Measure.Inv ms1) else Measure.Prod(acc, ms1)) gather args tpenv false Measure.One @@ -4373,21 +4384,21 @@ and TcTypesOrMeasures optKinds cenv newOk checkCxs occ env tpenv args m = | None -> List.mapFold (TcTypeOrMeasure None cenv newOk checkCxs occ env) tpenv args | Some kinds -> - if List.length kinds = List.length args then + if List.length kinds = List.length args then List.mapFold (fun tpenv (arg, kind) -> TcTypeOrMeasure (Some kind) cenv newOk checkCxs occ env tpenv arg) tpenv (List.zip args kinds) elif isNil kinds then error(Error(FSComp.SR.tcUnexpectedTypeArguments(), m)) else error(Error(FSComp.SR.tcTypeParameterArityMismatch((List.length kinds), (List.length args)), m)) and TcTyparConstraints cenv newOk checkCxs occ env tpenv synConstraints = - // Mark up default constraints with a priority in reverse order: last gets 0, second - // last gets 1 etc. See comment on TyparConstraint.DefaultsTo + // Mark up default constraints with a priority in reverse order: last gets 0, second + // last gets 1 etc. See comment on TyparConstraint.DefaultsTo let _, tpenv = List.fold (fun (ridx, tpenv) tc -> ridx - 1, TcTyparConstraint ridx cenv newOk checkCxs occ env tpenv tc) (List.length synConstraints - 1, tpenv) synConstraints tpenv #if !NO_EXTENSIONTYPING and TcStaticConstantParameter cenv (env: TcEnv) tpenv kind (StripParenTypes v) idOpt container = let g = cenv.g - let fail() = error(Error(FSComp.SR.etInvalidStaticArgument(NicePrint.minimalStringOfType env.DisplayEnv kind), v.Range)) + let fail() = error(Error(FSComp.SR.etInvalidStaticArgument(NicePrint.minimalStringOfType env.DisplayEnv kind), v.Range)) let record ttype = match idOpt with | Some id -> @@ -4395,7 +4406,7 @@ and TcStaticConstantParameter cenv (env: TcEnv) tpenv kind (StripParenTypes v) i CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.Use, env.AccessRights) | _ -> () - match v with + match v with | SynType.StaticConstant(sc, _) -> let v = match sc with @@ -4411,7 +4422,8 @@ and TcStaticConstantParameter cenv (env: TcEnv) tpenv kind (StripParenTypes v) i | SynConst.Single n when typeEquiv g g.float32_ty kind -> record(g.float32_ty); box (n: single) | SynConst.Double n when typeEquiv g g.float_ty kind -> record(g.float_ty); box (n: double) | SynConst.Char n when typeEquiv g g.char_ty kind -> record(g.char_ty); box (n: char) - | SynConst.String (s, _) when s <> null && typeEquiv g g.string_ty kind -> record(g.string_ty); box (s: string) + | SynConst.String (s, _, _) + | SynConst.SourceIdentifier (_, s, _) when s <> null && typeEquiv g g.string_ty kind -> record(g.string_ty); box (s: string) | SynConst.Bool b when typeEquiv g g.bool_ty kind -> record(g.bool_ty); box (b: bool) | _ -> fail() v, tpenv @@ -4422,10 +4434,10 @@ and TcStaticConstantParameter cenv (env: TcEnv) tpenv kind (StripParenTypes v) i // Evaluate the constant expression using static attribute argument rules let te = EvalLiteralExprOrAttribArg g te - let v = - match stripExpr te with + let v = + match stripExpr te with // Check we have a residue constant. We know the type was correct because we checked the expression with this type. - | Expr.Const (c, _, _) -> + | Expr.Const (c, _, _) -> match c with | Const.Byte n -> record(g.byte_ty); box (n: byte) | Const.Int16 n -> record(g.int16_ty); box (n: int16) @@ -4439,7 +4451,7 @@ and TcStaticConstantParameter cenv (env: TcEnv) tpenv kind (StripParenTypes v) i | Const.Single n -> record(g.float32_ty); box (n: single) | Const.Double n -> record(g.float_ty); box (n: double) | Const.Char n -> record(g.char_ty); box (n: char) - | Const.String null -> fail() + | Const.String null -> fail() | Const.String s -> record(g.string_ty); box (s: string) | Const.Bool b -> record(g.bool_ty); box (b: bool) | _ -> fail() @@ -4448,12 +4460,12 @@ and TcStaticConstantParameter cenv (env: TcEnv) tpenv kind (StripParenTypes v) i | SynType.LongIdent lidwd -> let m = lidwd.Range TcStaticConstantParameter cenv env tpenv kind (SynType.StaticConstantExpr(SynExpr.LongIdent (false, lidwd, None, m), m)) idOpt container - | _ -> + | _ -> fail() and CrackStaticConstantArgs cenv env tpenv (staticParameters: Tainted[], args: SynType list, container, containerName, m) = - let args = - args |> List.map (function + let args = + args |> List.map (function | StripParenTypes (SynType.StaticConstantNamed(StripParenTypes (SynType.LongIdent(LongIdentWithDots([id], _))), v, _)) -> Some id, v | v -> None, v) @@ -4461,73 +4473,73 @@ and CrackStaticConstantArgs cenv env tpenv (staticParameters: Tainted List.skipWhile (fst >> Option.isNone) let namedArgs = otherArgs |> List.takeWhile (fst >> Option.isSome) |> List.map (map1Of2 Option.get) let otherArgs = otherArgs |> List.skipWhile (fst >> Option.isSome) - if not otherArgs.IsEmpty then + if not otherArgs.IsEmpty then error (Error(FSComp.SR.etBadUnnamedStaticArgs(), m)) let indexedStaticParameters = staticParameters |> Array.toList |> List.indexed for (n, _) in namedArgs do match indexedStaticParameters |> List.filter (fun (j, sp) -> j >= unnamedArgs.Length && n.idText = sp.PUntaint((fun sp -> sp.Name), m)) with - | [] -> - if staticParameters |> Array.exists (fun sp -> n.idText = sp.PUntaint((fun sp -> sp.Name), n.idRange)) then + | [] -> + if staticParameters |> Array.exists (fun sp -> n.idText = sp.PUntaint((fun sp -> sp.Name), n.idRange)) then error (Error(FSComp.SR.etStaticParameterAlreadyHasValue n.idText, n.idRange)) else error (Error(FSComp.SR.etNoStaticParameterWithName n.idText, n.idRange)) | [_] -> () | _ -> error (Error(FSComp.SR.etMultipleStaticParameterWithName n.idText, n.idRange)) - if staticParameters.Length < namedArgs.Length + unnamedArgs.Length then + if staticParameters.Length < namedArgs.Length + unnamedArgs.Length then error (Error(FSComp.SR.etTooManyStaticParameters(staticParameters.Length, unnamedArgs.Length, namedArgs.Length), m)) - let argsInStaticParameterOrderIncludingDefaults = - staticParameters |> Array.mapi (fun i sp -> + let argsInStaticParameterOrderIncludingDefaults = + staticParameters |> Array.mapi (fun i sp -> let spKind = Import.ImportProvidedType cenv.amap m (sp.PApply((fun x -> x.ParameterType), m)) let spName = sp.PUntaint((fun sp -> sp.Name), m) - if i < unnamedArgs.Length then + if i < unnamedArgs.Length then let v = unnamedArgs.[i] let v, _tpenv = TcStaticConstantParameter cenv env tpenv spKind v None container v else - match namedArgs |> List.filter (fun (n, _) -> n.idText = spName) with - | [(n, v)] -> + match namedArgs |> List.filter (fun (n, _) -> n.idText = spName) with + | [(n, v)] -> let v, _tpenv = TcStaticConstantParameter cenv env tpenv spKind v (Some n) container v - | [] -> + | [] -> if sp.PUntaint((fun sp -> sp.IsOptional), m) then match sp.PUntaint((fun sp -> sp.RawDefaultValue), m) with | null -> error (Error(FSComp.SR.etStaticParameterRequiresAValue (spName, containerName, containerName, spName), m)) | v -> v else error (Error(FSComp.SR.etStaticParameterRequiresAValue (spName, containerName, containerName, spName), m)) - | ps -> + | ps -> error (Error(FSComp.SR.etMultipleStaticParameterWithName spName, (fst (List.last ps)).idRange))) argsInStaticParameterOrderIncludingDefaults and TcProvidedTypeAppToStaticConstantArgs cenv env optGeneratedTypePath tpenv (tcref: TyconRef) (args: SynType list) m = - let typeBeforeArguments = - match tcref.TypeReprInfo with + let typeBeforeArguments = + match tcref.TypeReprInfo with | TProvidedTypeExtensionPoint info -> info.ProvidedType | _ -> failwith "unreachable" - let staticParameters = typeBeforeArguments.PApplyWithProvider((fun (typeBeforeArguments, provider) -> typeBeforeArguments.GetStaticParameters provider), range=m) + let staticParameters = typeBeforeArguments.PApplyWithProvider((fun (typeBeforeArguments, provider) -> typeBeforeArguments.GetStaticParameters provider), range=m) let staticParameters = staticParameters.PApplyArray(id, "GetStaticParameters", m) let argsInStaticParameterOrderIncludingDefaults = CrackStaticConstantArgs cenv env tpenv (staticParameters, args, ArgumentContainer.Type tcref, tcref.DisplayName, m) - + // Take the static arguments (as SynType's) and convert them to objects of the appropriate type, based on the expected kind. - let providedTypeAfterStaticArguments, checkTypeName = - match ExtensionTyping.TryApplyProvidedType(typeBeforeArguments, optGeneratedTypePath, argsInStaticParameterOrderIncludingDefaults, m) with + let providedTypeAfterStaticArguments, checkTypeName = + match ExtensionTyping.TryApplyProvidedType(typeBeforeArguments, optGeneratedTypePath, argsInStaticParameterOrderIncludingDefaults, m) with | None -> error(Error(FSComp.SR.etErrorApplyingStaticArgumentsToType(), m)) | Some (ty, checkTypeName) -> (ty, checkTypeName) let hasNoArgs = (argsInStaticParameterOrderIncludingDefaults.Length = 0) - hasNoArgs, providedTypeAfterStaticArguments, checkTypeName + hasNoArgs, providedTypeAfterStaticArguments, checkTypeName and TryTcMethodAppToStaticConstantArgs cenv env tpenv (minfos: MethInfo list, argsOpt, mExprAndArg, mItem) = - match minfos, argsOpt with - | [minfo], Some (args, _) -> - match minfo.ProvidedStaticParameterInfo with - | Some (methBeforeArguments, staticParams) -> + match minfos, argsOpt with + | [minfo], Some (args, _) -> + match minfo.ProvidedStaticParameterInfo with + | Some (methBeforeArguments, staticParams) -> let providedMethAfterStaticArguments = TcProvidedMethodAppToStaticConstantArgs cenv env tpenv (minfo, methBeforeArguments, staticParams, args, mExprAndArg) let minfoAfterStaticArguments = ProvidedMeth(cenv.amap, providedMethAfterStaticArguments, minfo.ExtensionMemberPriorityOption, mItem) Some minfoAfterStaticArguments @@ -4537,60 +4549,60 @@ and TryTcMethodAppToStaticConstantArgs cenv env tpenv (minfos: MethInfo list, ar and TcProvidedMethodAppToStaticConstantArgs cenv env tpenv (minfo, methBeforeArguments, staticParams, args, m) = let argsInStaticParameterOrderIncludingDefaults = CrackStaticConstantArgs cenv env tpenv (staticParams, args, ArgumentContainer.Method minfo, minfo.DisplayName, m) - - let providedMethAfterStaticArguments = - match ExtensionTyping.TryApplyProvidedMethod(methBeforeArguments, argsInStaticParameterOrderIncludingDefaults, m) with + + let providedMethAfterStaticArguments = + match ExtensionTyping.TryApplyProvidedMethod(methBeforeArguments, argsInStaticParameterOrderIncludingDefaults, m) with | None -> error(Error(FSComp.SR.etErrorApplyingStaticArgumentsToMethod(), m)) | Some meth -> meth - providedMethAfterStaticArguments + providedMethAfterStaticArguments -and TcProvidedTypeApp cenv env tpenv tcref args m = +and TcProvidedTypeApp cenv env tpenv tcref args m = let hasNoArgs, providedTypeAfterStaticArguments, checkTypeName = TcProvidedTypeAppToStaticConstantArgs cenv env None tpenv tcref args m let isGenerated = providedTypeAfterStaticArguments.PUntaint((fun st -> not st.IsErased), m) //printfn "adding entity for provided type '%s', isDirectReferenceToGenerated = %b, isGenerated = %b" (st.PUntaint((fun st -> st.Name), m)) isDirectReferenceToGenerated isGenerated let isDirectReferenceToGenerated = isGenerated && ExtensionTyping.IsGeneratedTypeDirectReference (providedTypeAfterStaticArguments, m) - if isDirectReferenceToGenerated then + if isDirectReferenceToGenerated then error(Error(FSComp.SR.etDirectReferenceToGeneratedTypeNotAllowed(tcref.DisplayName), m)) // We put the type name check after the 'isDirectReferenceToGenerated' check because we need the 'isDirectReferenceToGenerated' error to be shown for generated types - checkTypeName() - if hasNoArgs then + checkTypeName() + if hasNoArgs then mkAppTy tcref [], tpenv else let ty = Import.ImportProvidedType cenv.amap m providedTypeAfterStaticArguments - ty, tpenv + ty, tpenv #endif /// Typecheck an application of a generic type to type arguments. /// /// Note that the generic type may be a nested generic type List.ListEnumerator. /// In this case, 'args' is only the instantiation of the suffix type arguments, and pathTypeArgs gives -/// the prefix of type arguments. +/// the prefix of type arguments. and TcTypeApp cenv newOk checkCxs occ env tpenv m tcref pathTypeArgs (synArgTys: SynType list) = let g = cenv.g CheckTyconAccessible cenv.amap m env.AccessRights tcref |> ignore CheckEntityAttributes g tcref m |> CommitOperationResult - + #if !NO_EXTENSIONTYPING - // Provided types are (currently) always non-generic. Their names may include mangled + // Provided types are (currently) always non-generic. Their names may include mangled // static parameters, which are passed by the provider. if tcref.Deref.IsProvided then TcProvidedTypeApp cenv env tpenv tcref synArgTys m else #endif let tps, _, tinst, _ = FreshenTyconRef2 m tcref - // If we're not checking constraints, i.e. when we first assert the super/interfaces of a type definition, then just - // clear the constraint lists of the freshly generated type variables. A little ugly but fairly localized. + // If we're not checking constraints, i.e. when we first assert the super/interfaces of a type definition, then just + // clear the constraint lists of the freshly generated type variables. A little ugly but fairly localized. if checkCxs = NoCheckCxs then tps |> List.iter (fun tp -> tp.SetConstraints []) let synArgTysLength = synArgTys.Length let pathTypeArgsLength = pathTypeArgs.Length - if tinst.Length <> pathTypeArgsLength + synArgTysLength then + if tinst.Length <> pathTypeArgsLength + synArgTysLength then error (TyconBadArgs(env.DisplayEnv, tcref, pathTypeArgsLength + synArgTysLength, m)) - let argTys, tpenv = + let argTys, tpenv = // Get the suffix of typars let tpsForArgs = List.skip (tps.Length - synArgTysLength) tps let kindsForArgs = tpsForArgs |> List.map (fun tp -> tp.Kind) @@ -4608,16 +4620,16 @@ and TcTypeApp cenv newOk checkCxs occ env tpenv m tcref pathTypeArgs (synArgTys: ty, tpenv and TcTypeOrMeasureAndRecover optKind cenv newOk checkCxs occ env tpenv ty = - try TcTypeOrMeasure optKind cenv newOk checkCxs occ env tpenv ty - with e -> - errorRecovery e ty.Range - let rty = - match optKind, newOk with + try TcTypeOrMeasure optKind cenv newOk checkCxs occ env tpenv ty + with e -> + errorRecovery e ty.Range + let rty = + match optKind, newOk with | Some TyparKind.Measure, NoNewTypars -> TType_measure Measure.One | Some TyparKind.Measure, _ -> TType_measure (NewErrorMeasure ()) | _, NoNewTypars -> cenv.g.obj_ty - | _ -> NewErrorType () - rty, tpenv + | _ -> NewErrorType () + rty, tpenv and TcTypeAndRecover cenv newOk checkCxs occ env tpenv ty = @@ -4626,44 +4638,44 @@ and TcTypeAndRecover cenv newOk checkCxs occ env tpenv ty = and TcNestedTypeApplication cenv newOk checkCxs occ env tpenv mWholeTypeApp ty pathTypeArgs tyargs = let ty = convertToTypeWithMetadataIfPossible cenv.g ty if not (isAppTy cenv.g ty) then error(Error(FSComp.SR.tcTypeHasNoNestedTypes(), mWholeTypeApp)) - match ty with - | TType_app(tcref, _) -> - TcTypeApp cenv newOk checkCxs occ env tpenv mWholeTypeApp tcref pathTypeArgs tyargs + match ty with + | TType_app(tcref, _) -> + TcTypeApp cenv newOk checkCxs occ env tpenv mWholeTypeApp tcref pathTypeArgs tyargs | _ -> error(InternalError("TcNestedTypeApplication: expected type application", mWholeTypeApp)) and TryAdjustHiddenVarNameToCompGenName cenv env (id: Ident) altNameRefCellOpt = - match altNameRefCellOpt with - | Some ({contents = Undecided altId } as altNameRefCell) -> - match ResolvePatternLongIdent cenv.tcSink cenv.nameResolver AllIdsOK false id.idRange env.eAccessRights env.eNameResEnv TypeNameResolutionInfo.Default [id] with + match altNameRefCellOpt with + | Some ({contents = SynSimplePatAlternativeIdInfo.Undecided altId } as altNameRefCell) -> + match ResolvePatternLongIdent cenv.tcSink cenv.nameResolver AllIdsOK false id.idRange env.eAccessRights env.eNameResEnv TypeNameResolutionInfo.Default [id] with | Item.NewDef _ -> None // the name is not in scope as a pattern identifier (e.g. union case), so do not use the alternate ID - | _ -> altNameRefCell := Decided altId; Some altId // the name is in scope as a pattern identifier, so use the alternate ID - | Some ({contents = Decided altId }) -> Some altId + | _ -> altNameRefCell := SynSimplePatAlternativeIdInfo.Decided altId; Some altId // the name is in scope as a pattern identifier, so use the alternate ID + | Some ({contents = SynSimplePatAlternativeIdInfo.Decided altId }) -> Some altId | None -> None /// Bind the patterns used in a lambda. Not clear why we don't use TcPat. -and TcSimplePat optArgsOK checkCxs cenv ty env (tpenv, names, takenNames) p = - match p with - | SynSimplePat.Id (id, altNameRefCellOpt, compgen, isMemberThis, isOpt, m) -> +and TcSimplePat optArgsOK checkCxs cenv ty env (tpenv, names, takenNames) p = + match p with + | SynSimplePat.Id (id, altNameRefCellOpt, compgen, isMemberThis, isOpt, m) -> // Check to see if pattern translation decides to use an alternative identifier. - match TryAdjustHiddenVarNameToCompGenName cenv env id altNameRefCellOpt with + match TryAdjustHiddenVarNameToCompGenName cenv env id altNameRefCellOpt with | Some altId -> TcSimplePat optArgsOK checkCxs cenv ty env (tpenv, names, takenNames) (SynSimplePat.Id (altId, None, compgen, isMemberThis, isOpt, m) ) - | None -> - if isOpt then - if not optArgsOK then + | None -> + if isOpt then + if not optArgsOK then errorR(Error(FSComp.SR.tcOptionalArgsOnlyOnMembers(), m)) let tyarg = NewInferenceType () UnifyTypes cenv env m ty (mkOptionTy cenv.g tyarg) - + let _, names, takenNames = TcPatBindingName cenv env id ty isMemberThis None None (ValInline.Optional, permitInferTypars, noArgOrRetAttribs, false, None, compgen) (names, takenNames) - id.idText, + id.idText, (tpenv, names, takenNames) | SynSimplePat.Typed (p, cty, m) -> let cty', tpenv = TcTypeAndRecover cenv NewTyparsOK checkCxs ItemOccurence.UseInType env tpenv cty - match p with - // Optional arguments on members + match p with + // Optional arguments on members | SynSimplePat.Id(_, _, _, _, true, _) -> UnifyTypes cenv env m ty (mkOptionTy cenv.g cty') | _ -> UnifyTypes cenv env m ty cty' @@ -4672,35 +4684,35 @@ and TcSimplePat optArgsOK checkCxs cenv ty env (tpenv, names, takenNames) p = | SynSimplePat.Attrib (p, _, _) -> TcSimplePat optArgsOK checkCxs cenv ty env (tpenv, names, takenNames) p -// raise an error if any optional args precede any non-optional args +// raise an error if any optional args precede any non-optional args and ValidateOptArgOrder (spats: SynSimplePats) = let rec getPats spats = match spats with | SynSimplePats.SimplePats(p, m) -> p, m | SynSimplePats.Typed(p, _, _) -> getPats p - + let rec isOptArg pat = match pat with | SynSimplePat.Id (_, _, _, _, isOpt, _) -> isOpt | SynSimplePat.Typed (p, _, _) -> isOptArg p - | SynSimplePat.Attrib (p, _, _) -> isOptArg p - - let pats, m = getPats spats - + | SynSimplePat.Attrib (p, _, _) -> isOptArg p + + let pats, m = getPats spats + let mutable hitOptArg = false - + List.iter (fun pat -> if isOptArg pat then hitOptArg <- true elif hitOptArg then error(Error(FSComp.SR.tcOptionalArgsMustComeAfterNonOptionalArgs(), m))) pats - - -/// Bind the patterns used in argument position for a function, method or lambda. -and TcSimplePats cenv optArgsOK checkCxs ty env (tpenv, names, takenNames: Set<_>) p = - + + +/// Bind the patterns used in argument position for a function, method or lambda. +and TcSimplePats cenv optArgsOK checkCxs ty env (tpenv, names, takenNames: Set<_>) p = + // validate optional argument declaration ValidateOptArgOrder p - - match p with - | SynSimplePats.SimplePats ([], m) -> + + match p with + | SynSimplePats.SimplePats ([], m) -> // Unit "()" patterns in argument position become SynSimplePats.SimplePats([], _) in the // syntactic translation when building bindings. This is done because the // use of "()" has special significance for arity analysis and argument counting. @@ -4714,11 +4726,11 @@ and TcSimplePats cenv optArgsOK checkCxs ty env (tpenv, names, takenNames: Set<_ let _, names, takenNames = TcPatBindingName cenv env id ty false None None (ValInline.Optional, permitInferTypars, noArgOrRetAttribs, false, None, true) (names, takenNames) [id.idText], (tpenv, names, takenNames) - | SynSimplePats.SimplePats ([p], _) -> + | SynSimplePats.SimplePats ([p], _) -> let v, (tpenv, names, takenNames) = TcSimplePat optArgsOK checkCxs cenv ty env (tpenv, names, takenNames) p [v], (tpenv, names, takenNames) - | SynSimplePats.SimplePats (ps, m) -> + | SynSimplePats.SimplePats (ps, m) -> 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) @@ -4726,8 +4738,8 @@ and TcSimplePats cenv optArgsOK checkCxs ty env (tpenv, names, takenNames: Set<_ | SynSimplePats.Typed (p, cty, m) -> let cty', tpenv = TcTypeAndRecover cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv cty - match p with - // Solitary optional arguments on members + match p with + // Solitary optional arguments on members | SynSimplePats.SimplePats([SynSimplePat.Id(_, _, _, _, true, _)], _) -> UnifyTypes cenv env m ty (mkOptionTy cenv.g cty') | _ -> UnifyTypes cenv env m ty cty' @@ -4737,14 +4749,14 @@ and TcSimplePatsOfUnknownType cenv optArgsOK checkCxs env tpenv spats = let argty = NewInferenceType () TcSimplePats cenv optArgsOK checkCxs argty env (tpenv, NameMap.empty, Set.empty) spats -and TcPatBindingName cenv env id ty isMemberThis vis1 topValData (inlineFlag, declaredTypars, argAttribs, isMutable, vis2, compgen) (names, takenNames: Set) = +and TcPatBindingName cenv env id ty isMemberThis vis1 topValData (inlineFlag, declaredTypars, argAttribs, isMutable, vis2, compgen) (names, takenNames: Set) = let vis = if Option.isSome vis1 then vis1 else vis2 if takenNames.Contains id.idText then errorR (VarBoundTwice id) let compgen = compgen || IsCompilerGeneratedName id.idText let baseOrThis = if isMemberThis then MemberThisVal else NormalVal let names = Map.add id.idText (PrelimValScheme1(id, declaredTypars, ty, topValData, None, isMutable, inlineFlag, baseOrThis, argAttribs, vis, compgen)) names let takenNames = Set.add id.idText takenNames - (fun (TcPatPhase2Input (values, isLeftMost)) -> + (fun (TcPatPhase2Input (values, isLeftMost)) -> let (vspec, typeScheme) = let name = id.idText match values.TryGetValue name with @@ -4760,42 +4772,46 @@ and TcPatBindingName cenv env id ty isMemberThis vis1 topValData (inlineFlag, de // isLeftMost indicates we are processing the left-most path through a disjunctive or pattern. // For those binding locations, CallNameResolutionSink is called in MakeAndPublishValue, like all other bindings // For non-left-most paths, we register the name resolutions here - if not isLeftMost && not vspec.IsCompilerGenerated && not (vspec.LogicalName.StartsWithOrdinal("_")) then + if not isLeftMost && not vspec.IsCompilerGenerated && not (vspec.LogicalName.StartsWithOrdinal("_")) then let item = Item.Value(mkLocalValRef vspec) CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.Binding, env.AccessRights) - PBind(vspec, typeScheme)), + PBind(vspec, typeScheme)), names, takenNames -and TcPatAndRecover warnOnUpper cenv (env: TcEnv) topValInfo vFlags (tpenv, names, takenNames) ty (pat: SynPat) = - try +and TcPatAndRecover warnOnUpper cenv (env: TcEnv) topValInfo vFlags (tpenv, names, takenNames) ty (pat: SynPat) = + try TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty pat with e -> - // Error recovery - return some rubbish expression, but replace/annotate - // the type of the current expression with a type variable that indicates an error - let m = pat.Range + // Error recovery - return some rubbish expression, but replace/annotate + // the type of the current expression with a type variable that indicates an error + let m = pat.Range errorRecovery e m //solveTypAsError cenv env.DisplayEnv m ty (fun _ -> TPat_error m), (tpenv, names, takenNames) -/// Typecheck a pattern. Patterns are type-checked in three phases: -/// 1. TcPat builds a List.map from simple variable names to inferred types for +/// Typecheck a pattern. Patterns are type-checked in three phases: +/// 1. TcPat builds a List.map from simple variable names to inferred types for /// those variables. It also returns a function to perform the second phase. -/// 2. The second phase assumes the caller has built the actual value_spec's -/// for the values being defined, and has decided if the types of these +/// 2. The second phase assumes the caller has built the actual value_spec's +/// for the values being defined, and has decided if the types of these /// variables are to be generalized. The caller hands this information to /// the second-phase function in terms of a List.map from names to actual -/// value specifications. -and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty pat = +/// value specifications. +and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty pat = let ad = env.AccessRights - match pat with - | SynPat.Const (c, m) -> - match c with - | SynConst.Bytes (bytes, m) -> - UnifyTypes cenv env m ty (mkByteArrayTy cenv.g) + match pat with + | SynPat.As(_, SynPat.Named _, _) -> () + | SynPat.As (_, _, m) -> checkLanguageFeatureError cenv.g.langVersion LanguageFeature.NonVariablePatternsToRightOfAsPatterns m + | _ -> () + match pat with + | SynPat.Const (c, m) -> + match c with + | SynConst.Bytes (bytes, _, m) -> + UnifyTypes cenv env m ty (mkByteArrayTy cenv.g) TcPat warnOnUpper cenv env None vFlags (tpenv, names, takenNames) ty (SynPat.ArrayOrList (true, [ for b in bytes -> SynPat.Const(SynConst.Byte b, m) ], m)) - | SynConst.UserNum _ -> + | SynConst.UserNum _ -> errorR (Error (FSComp.SR.tcInvalidNonPrimitiveLiteralInPatternMatch (), m)) (fun _ -> TPat_error m), (tpenv, names, takenNames) @@ -4810,31 +4826,42 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p | SynPat.Wild m -> (fun _ -> TPat_wild m), (tpenv, names, takenNames) - | SynPat.IsInst(cty, m) - | SynPat.Named (SynPat.IsInst(cty, m), _, _, _, _) -> + | SynPat.IsInst(cty, m) + | SynPat.As (SynPat.IsInst(cty, m), _, _) -> let srcTy = ty let tgtTy, tpenv = TcTypeAndRecover cenv NewTyparsOKButWarnIfNotRigid CheckCxs ItemOccurence.UseInType env tpenv cty TcRuntimeTypeTest (*isCast*)false (*isOperator*)true cenv env.DisplayEnv m tgtTy srcTy - match pat with + match pat with | SynPat.IsInst(_, m) -> (fun _ -> TPat_isinst (srcTy, tgtTy, None, m)), (tpenv, names, takenNames) - | SynPat.Named (SynPat.IsInst _, id, isMemberThis, vis, m) -> - let bindf, names, takenNames = TcPatBindingName cenv env id tgtTy isMemberThis vis None vFlags (names, takenNames) - (fun values -> TPat_isinst (srcTy, tgtTy, Some(bindf values), m)), - (tpenv, names, takenNames) + | SynPat.As (SynPat.IsInst _, p, m) -> + let pat, acc = TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) tgtTy p + (fun values -> TPat_isinst (srcTy, tgtTy, Some (pat values), m)), acc | _ -> failwith "TcPat" - | SynPat.OptionalVal (id, m) -> - errorR (Error (FSComp.SR.tcOptionalArgsOnlyOnMembers (), m)) - let bindf, names, takenNames = TcPatBindingName cenv env id ty false None topValInfo vFlags (names, takenNames) - (fun values -> TPat_as (TPat_wild m, bindf values, m)), (tpenv, names, takenNames) - - | SynPat.Named (p, id, isMemberThis, vis, m) -> + | SynPat.As (p, SynPat.Named (id, isMemberThis, vis, m), _) + | SynPat.As (SynPat.Named (id, isMemberThis, vis, m), p, _) -> let bindf, names, takenNames = TcPatBindingName cenv env id ty isMemberThis vis topValInfo vFlags (names, takenNames) let pat', acc = TcPat warnOnUpper cenv env None vFlags (tpenv, names, takenNames) ty p - (fun values -> TPat_as (pat' values, bindf values, m)), + (fun values -> TPat_as (pat' values, bindf values, m)), + acc + + | SynPat.As (pat1, pat2, m) -> + let pats = [pat1; pat2] + let pats', acc = TcPatterns warnOnUpper cenv env vFlags (tpenv, names, takenNames) (List.map (fun _ -> ty) pats) pats + (fun values -> TPat_conjs(List.map (fun f -> f values) pats', m)), acc + + | SynPat.Named (id, isMemberThis, vis, m) -> + let bindf, names, takenNames = TcPatBindingName cenv env id ty isMemberThis vis topValInfo vFlags (names, takenNames) + let pat', acc = TcPat warnOnUpper cenv env None vFlags (tpenv, names, takenNames) ty (SynPat.Wild m) + (fun values -> TPat_as (pat' values, bindf values, m)), acc + | SynPat.OptionalVal (id, m) -> + errorR (Error (FSComp.SR.tcOptionalArgsOnlyOnMembers (), m)) + let bindf, names, takenNames = TcPatBindingName cenv env id ty false None topValInfo vFlags (names, takenNames) + (fun values -> TPat_as (TPat_wild m, bindf values, m)), (tpenv, names, takenNames) + | SynPat.Typed (p, cty, m) -> let cty', tpenv = TcTypeAndRecover cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv cty UnifyTypes cenv env m ty cty' @@ -4843,7 +4870,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p | SynPat.Attrib (p, attrs, _) -> errorR (Error (FSComp.SR.tcAttributesInvalidInPatterns (), rangeOfNonNilAttrs attrs)) for attrList in attrs do - TcAttributes cenv env Unchecked.defaultof<_> attrList.Attributes |> ignore + TcAttributes cenv env Unchecked.defaultof<_> attrList.Attributes |> ignore TcPat warnOnUpper cenv env None vFlags (tpenv, names, takenNames) ty p | SynPat.Or (pat1, pat2, m) -> @@ -4852,8 +4879,8 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p if not (takenNames1 = takenNames2) then errorR (UnionPatternsBindDifferentNames m) - names1 |> Map.iter (fun _ (PrelimValScheme1 (id1, _, ty1, _, _, _, _, _, _, _, _)) -> - match names2.TryGetValue id1.idText with + names1 |> Map.iter (fun _ (PrelimValScheme1 (id1, _, ty1, _, _, _, _, _, _, _, _)) -> + match names2.TryGetValue id1.idText with | true, PrelimValScheme1 (id2, _, ty2, _, _, _, _, _, _, _, _) -> try UnifyTypes cenv env id2.idRange ty1 ty2 with e -> errorRecovery e m @@ -4869,18 +4896,18 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p | SynPat.LongIdent (LongIdentWithDots(longId, _), _, tyargs, args, vis, m) -> if Option.isSome tyargs then errorR(Error(FSComp.SR.tcInvalidTypeArgumentUsage(), m)) - let warnOnUpperForId = + let warnOnUpperForId = match args with | SynArgPats.Pats [] -> warnOnUpper | _ -> AllIdsOK let lidRange = rangeOfLid longId - let checkNoArgsForLiteral () = + let checkNoArgsForLiteral () = match args with | SynArgPats.Pats [] | SynArgPats.NamePatPairs ([], _) -> () - | _ -> errorR (Error (FSComp.SR.tcLiteralDoesNotTakeArguments (), m)) + | _ -> errorR (Error (FSComp.SR.tcLiteralDoesNotTakeArguments (), m)) let getArgPatterns () = match args with @@ -4897,7 +4924,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p match x with | SynPat.FromParseError(p, _) -> convSynPatToSynExpr p | SynPat.Const (c, m) -> SynExpr.Const (c, m) - | SynPat.Named (SynPat.Wild _, id, _, None, _) -> SynExpr.Ident id + | SynPat.Named (id, _, None, _) -> SynExpr.Ident id | SynPat.Typed (p, cty, m) -> SynExpr.Typed (convSynPatToSynExpr p, cty, m) | SynPat.LongIdent (LongIdentWithDots(longId, dotms) as lidwd, _, _tyargs, args, None, m) -> let args = match args with SynArgPats.Pats args -> args | _ -> failwith "impossible: active patterns can be used only with SynConstructorArgs.Pats" @@ -4923,7 +4950,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p with _ -> false match ResolvePatternLongIdent cenv.tcSink cenv.nameResolver warnOnUpperForId false m ad env.NameEnv TypeNameResolutionInfo.Default longId with - | Item.NewDef id -> + | Item.NewDef id -> match getArgPatterns () with | [] -> TcPat warnOnUpperForId cenv env topValInfo vFlags (tpenv, names, takenNames) ty (mkSynPatVar vis id) @@ -4938,7 +4965,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p errorR (UndefinedName (0, FSComp.SR.undefinedNamePatternDiscriminator, id, NoSuggestions)) (fun _ -> TPat_error m), acc - | Item.ActivePatternCase (APElemRef (apinfo, vref, idx)) as item -> + | Item.ActivePatternCase (APElemRef (apinfo, vref, idx, isStructRetTy)) as item -> // Report information about the 'active recognizer' occurrence to IDE CallNameResolutionSink cenv.tcSink (rangeOfLid longId, env.NameEnv, item, emptyTyparInst, ItemOccurence.Pattern, env.eAccessRights) @@ -4948,45 +4975,45 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p let args = getArgPatterns () - // TOTAL/PARTIAL ACTIVE PATTERNS + // TOTAL/PARTIAL ACTIVE PATTERNS let _, vexp, _, _, tinst, _ = TcVal true cenv env tpenv vref None None m let vexp = MakeApplicableExprWithFlex cenv env vexp let vexpty = vexp.Type - let activePatArgsAsSynPats, patarg = - match args with - | [] -> [], SynPat.Const(SynConst.Unit, m) - | _ -> + let activePatArgsAsSynPats, patarg = + match args with + | [] -> [], SynPat.Const(SynConst.Unit, m) + | _ -> // This bit of type-directed analysis ensures that parameterized partial active patterns returning unit do not need to take an argument // See FSharp 1.0 3502 let dtys, rty = stripFunTy cenv.g vexpty - - if dtys.Length = args.Length + 1 && isOptionTy cenv.g rty && isUnitTy cenv.g (destOptionTy cenv.g rty) then - args, SynPat.Const(SynConst.Unit, m) - else + + if dtys.Length = args.Length + 1 && isOptionTy cenv.g rty && isUnitTy cenv.g (destOptionTy cenv.g rty) then + args, SynPat.Const(SynConst.Unit, m) + else List.frontAndBack args - if not (isNil activePatArgsAsSynPats) && apinfo.ActiveTags.Length <> 1 then + if not (isNil activePatArgsAsSynPats) && apinfo.ActiveTags.Length <> 1 then errorR (Error (FSComp.SR.tcRequireActivePatternWithOneResult (), m)) let activePatArgsAsSynExprs = List.map convSynPatToSynExpr activePatArgsAsSynPats let activePatResTys = NewInferenceTypes apinfo.Names - let activePatType = apinfo.OverallType cenv.g m ty activePatResTys + let activePatType = apinfo.OverallType cenv.g m ty activePatResTys isStructRetTy - let delayed = activePatArgsAsSynExprs |> List.map (fun arg -> DelayedApp(ExprAtomicFlag.NonAtomic, arg, unionRanges (rangeOfLid longId) arg.Range)) + let delayed = activePatArgsAsSynExprs |> List.map (fun arg -> DelayedApp(ExprAtomicFlag.NonAtomic, arg, unionRanges (rangeOfLid longId) arg.Range)) let activePatExpr, tpenv = PropagateThenTcDelayed cenv activePatType env tpenv m vexp vexpty ExprAtomicFlag.NonAtomic delayed if idx >= activePatResTys.Length then error(Error(FSComp.SR.tcInvalidIndexIntoActivePatternArray(), m)) let argty = List.item idx activePatResTys - + let arg', acc = TcPat warnOnUpper cenv env None vFlags (tpenv, names, takenNames) argty patarg // The identity of an active pattern consists of its value and the types it is applied to. - // If there are any expression args then we've lost identity. + // If there are any expression args then we've lost identity. let activePatIdentity = if isNil activePatArgsAsSynExprs then Some (vref, tinst) else None - (fun values -> - TPat_query((activePatExpr, activePatResTys, activePatIdentity, idx, apinfo), arg' values, m)), acc + (fun values -> + TPat_query((activePatExpr, activePatResTys, isStructRetTy, activePatIdentity, idx, apinfo), arg' values, m)), acc | (Item.UnionCase _ | Item.ExnCase _) as item -> // Report information about the case occurrence to IDE @@ -5009,12 +5036,12 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p for (id, pat) in pairs do match argNames |> List.tryFindIndex (fun id2 -> id.idText = id2.idText) with - | None -> + | None -> extraPatterns.Add pat match item with | Item.UnionCase(uci, _) -> errorR (Error (FSComp.SR.tcUnionCaseConstructorDoesNotHaveFieldWithGivenName (uci.Name, id.idText), id.idRange)) - | Item.ExnCase tcref -> + | Item.ExnCase tcref -> errorR (Error (FSComp.SR.tcExceptionConstructorDoesNotHaveFieldWithGivenName (tcref.DisplayName, id.idText), id.idRange)) | _ -> errorR (Error (FSComp.SR.tcConstructorDoesNotHaveFieldWithGivenName (id.idText), id.idRange)) @@ -5045,14 +5072,14 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p if result.Length = 1 then args, extraPatterns else [ SynPat.Tuple(false, args, m) ], extraPatterns - let args, extraPatterns = - match args with + let args, extraPatterns = + match args with | [] -> [], [] - // note: the next will always be parenthesized + // note: the next will always be parenthesized | [SynPatErrorSkip(SynPat.Tuple (false, args, _)) | SynPatErrorSkip(SynPat.Paren(SynPatErrorSkip(SynPat.Tuple (false, args, _)), _))] when numArgTys > 1 -> args, [] - // note: we allow both 'C _' and 'C (_)' regardless of number of argument of the pattern + // note: we allow both 'C _' and 'C (_)' regardless of number of argument of the pattern | [SynPatErrorSkip(SynPat.Wild _ as e) | SynPatErrorSkip(SynPat.Paren(SynPatErrorSkip(SynPat.Wild _ as e), _))] -> List.replicate numArgTys e, [] @@ -5078,7 +5105,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p if numArgTys > 1 then // Expects tuple without enough args errorR (Error (FSComp.SR.tcUnionCaseExpectsTupledArguments numArgTys, m)) - else + else errorR (UnionCaseWrongArguments (env.DisplayEnv, numArgTys, numArgs, m)) args @ (List.init (numArgTys - numArgs) (fun _ -> SynPat.Wild (m.MakeSynthetic()))), extraPatterns else @@ -5091,15 +5118,15 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p let args', acc = TcPatterns warnOnUpper cenv env vFlags (tpenv, names, takenNames) argTys args let _, acc = TcPatterns warnOnUpper cenv env vFlags acc (NewInferenceTypes extraPatterns) extraPatterns (fun values -> mkf m (List.map (fun f -> f values) args')), acc - + | Item.ILField finfo -> CheckILFieldInfoAccessible cenv.g cenv.amap lidRange env.AccessRights finfo if not finfo.IsStatic then errorR (Error (FSComp.SR.tcFieldIsNotStatic (finfo.FieldName), lidRange)) CheckILFieldAttributes cenv.g finfo m - match finfo.LiteralValue with + match finfo.LiteralValue with | None -> error (Error (FSComp.SR.tcFieldNotLiteralCannotBeUsedInPattern (), lidRange)) - | Some lit -> + | Some lit -> checkNoArgsForLiteral () let _, acc = tcArgPatterns () @@ -5107,15 +5134,15 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p let c' = TcFieldInit lidRange lit let item = Item.ILField finfo CallNameResolutionSink cenv.tcSink (lidRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.Pattern, env.AccessRights) - (fun _ -> TPat_const (c', m)), acc + (fun _ -> TPat_const (c', m)), acc | Item.RecdField rfinfo -> CheckRecdFieldInfoAccessible cenv.amap lidRange env.AccessRights rfinfo if not rfinfo.IsStatic then errorR (Error (FSComp.SR.tcFieldIsNotStatic(rfinfo.Name), lidRange)) - CheckRecdFieldInfoAttributes cenv.g rfinfo lidRange |> CommitOperationResult - match rfinfo.LiteralValue with + CheckRecdFieldInfoAttributes cenv.g rfinfo lidRange |> CommitOperationResult + match rfinfo.LiteralValue with | None -> error (Error(FSComp.SR.tcFieldNotLiteralCannotBeUsedInPattern(), lidRange)) - | Some lit -> + | Some lit -> checkNoArgsForLiteral() let _, acc = tcArgPatterns () @@ -5124,12 +5151,12 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p // FUTURE: can we do better than emptyTyparInst here, in order to display instantiations // of type variables in the quick info provided in the IDE. CallNameResolutionSink cenv.tcSink (lidRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.Pattern, env.AccessRights) - (fun _ -> TPat_const (lit, m)), acc + (fun _ -> TPat_const (lit, m)), acc | Item.Value vref -> - match vref.LiteralValue with + match vref.LiteralValue with | None -> error (Error(FSComp.SR.tcNonLiteralCannotBeUsedInPattern(), m)) - | Some lit -> + | Some lit -> let _, _, _, vexpty, _, _ = TcVal true cenv env tpenv vref None None lidRange CheckValAccessible lidRange env.AccessRights vref CheckFSharpAttributes cenv.g vref.Attribs lidRange |> CommitOperationResult @@ -5139,7 +5166,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p UnifyTypes cenv env m ty vexpty let item = Item.Value vref CallNameResolutionSink cenv.tcSink (lidRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.Pattern, env.AccessRights) - (fun _ -> TPat_const (lit, m)), acc + (fun _ -> TPat_const (lit, m)), acc | _ -> error (Error(FSComp.SR.tcRequireVarConstRecogOrLiteral(), m)) @@ -5164,45 +5191,45 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) ty p let argty = NewInferenceType () UnifyTypes cenv env m ty (if isArray then mkArrayType cenv.g argty else mkListTy cenv.g argty) let args', acc = TcPatterns warnOnUpper cenv env vFlags (tpenv, names, takenNames) (List.map (fun _ -> argty) args) args - (fun values -> + (fun values -> let args' = List.map (fun f -> f values) args' if isArray then TPat_array(args', argty, m) else List.foldBack (mkConsListPat cenv.g argty) args' (mkNilListPat cenv.g m argty)), acc | SynPat.Record (flds, m) -> let tinst, tcref, fldsmap, _fldsList = BuildFieldMap cenv env true ty flds m - // REVIEW: use _fldsList to type check pattern in code order not field defn order + // REVIEW: use _fldsList to type check pattern in code order not field defn order let gtyp = mkAppTy tcref tinst let inst = List.zip (tcref.Typars m) tinst UnifyTypes cenv env m ty gtyp let fields = tcref.TrueInstanceFieldsAsList - let ftys = fields |> List.map (fun fsp -> actualTyOfRecdField inst fsp, fsp) - let fldsmap', acc = - ((tpenv, names, takenNames), ftys) ||> List.mapFold (fun s (ty, fsp) -> + let ftys = fields |> List.map (fun fsp -> actualTyOfRecdField inst fsp, fsp) + let fldsmap', acc = + ((tpenv, names, takenNames), ftys) ||> List.mapFold (fun s (ty, fsp) -> match fldsmap.TryGetValue fsp.rfield_id.idText with | true, v -> TcPat warnOnUpper cenv env None vFlags s ty v | _ -> (fun _ -> TPat_wild m), s) - (fun values -> TPat_recd (tcref, tinst, List.map (fun f -> f values) fldsmap', m)), + (fun values -> TPat_recd (tcref, tinst, List.map (fun f -> f values) fldsmap', m)), acc - | SynPat.DeprecatedCharRange (c1, c2, m) -> + | SynPat.DeprecatedCharRange (c1, c2, m) -> errorR(Deprecated(FSComp.SR.tcUseWhenPatternGuard(), m)) UnifyTypes cenv env m ty (cenv.g.char_ty) (fun _ -> TPat_range(c1, c2, m)), (tpenv, names, takenNames) - | SynPat.Null m -> + | SynPat.Null m -> try AddCxTypeMustSupportNull env.DisplayEnv cenv.css m NoTrace ty with e -> errorRecovery e m (fun _ -> TPat_null m), (tpenv, names, takenNames) - | SynPat.InstanceMember (_, _, _, _, m) -> + | SynPat.InstanceMember (_, _, _, _, m) -> errorR(Error(FSComp.SR.tcIllegalPattern(), pat.Range)) (fun _ -> TPat_wild m), (tpenv, names, takenNames) | SynPat.FromParseError (pat, _) -> suppressErrorReporting (fun () -> TcPatAndRecover warnOnUpper cenv env topValInfo vFlags (tpenv, names, takenNames) (NewErrorType()) pat) -and TcPatterns warnOnUpper cenv env vFlags s argTys args = +and TcPatterns warnOnUpper cenv env vFlags s argTys args = assert (List.length args = List.length argTys) List.mapFold (fun s (ty, pat) -> TcPat warnOnUpper cenv env None vFlags s ty pat) s (List.zip argTys args) @@ -5212,26 +5239,26 @@ and RecordNameAndTypeResolutions_IdeallyWithoutHavingOtherEffects cenv env tpenv // This function is motivated by cases like // query { for ... join(for x in f(). } // where there is incomplete code in a query, and we are current just dropping a piece of the AST on the floor (above, the bit inside the 'join'). - // + // // The problem with dropping the AST on the floor is that we get no captured resolutions, which means no Intellisense/QuickInfo/ParamHelp. // // The idea behind the fix is to semi-typecheck this AST-fragment, just to get resolutions captured. // - // The tricky bit is to not also have any other effects from typechecking, namely producing error diagnostics (which may be spurious) or having + // The tricky bit is to not also have any other effects from typechecking, namely producing error diagnostics (which may be spurious) or having // side-effects on the typecheck environment. // - // REVIEW: We are yet to deal with the tricky bit. As it stands, we turn off error logging, but still have typechecking environment effects. As a result, - // at the very least, you cannot call this function unless you're already reported a typechecking error (the 'worst' possible outcome would be - // to incorrectly solve typecheck constraints as a result of effects in this function, and then have the code compile successfully and behave + // REVIEW: We are yet to deal with the tricky bit. As it stands, we turn off error logging, but still have typechecking environment effects. As a result, + // at the very least, you cannot call this function unless you're already reported a typechecking error (the 'worst' possible outcome would be + // to incorrectly solve typecheck constraints as a result of effects in this function, and then have the code compile successfully and behave // in some weird way; so ensure the code can't possibly compile before calling this function as an expedient way to get better IntelliSense). - suppressErrorReporting (fun () -> + suppressErrorReporting (fun () -> try ignore(TcExprOfUnknownType cenv env tpenv expr) with e -> ()) and RecordNameAndTypeResolutions_IdeallyWithoutHavingOtherEffects_Delayed cenv env tpenv delayed = let rec dummyCheckedDelayed delayed = - match delayed with + match delayed with | DelayedApp (_hpa, arg, _mExprAndArg) :: otherDelayed -> RecordNameAndTypeResolutions_IdeallyWithoutHavingOtherEffects cenv env tpenv arg dummyCheckedDelayed otherDelayed @@ -5254,36 +5281,36 @@ and TcExprOfUnknownType cenv env tpenv expr = and TcExprFlex cenv flex compat ty (env: TcEnv) tpenv (e: SynExpr) = if flex then let argty = NewInferenceType () - if compat then + if compat then (destTyparTy cenv.g argty).SetIsCompatFlex(true) - AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css e.Range NoTrace ty argty - let e', tpenv = TcExpr cenv argty env tpenv e + AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css e.Range NoTrace ty argty + let e', tpenv = TcExpr cenv argty env tpenv e let e' = mkCoerceIfNeeded cenv.g ty argty e' e', tpenv else TcExpr cenv ty env tpenv e - + and TcExpr cenv ty (env: TcEnv) tpenv (expr: SynExpr) = - // Start an error recovery handler + // Start an error recovery handler // Note the try/with can lead to tail-recursion problems for iterated constructs, e.g. let... in... - // So be careful! - try - TcExprNoRecover cenv ty env tpenv expr - with e -> + // So be careful! + try + TcExprNoRecover cenv ty env tpenv expr + with e -> let m = expr.Range - // Error recovery - return some rubbish expression, but replace/annotate - // the type of the current expression with a type variable that indicates an error - errorRecovery e m + // Error recovery - return some rubbish expression, but replace/annotate + // the type of the current expression with a type variable that indicates an error + errorRecovery e m solveTypAsError cenv env.DisplayEnv m ty mkThrow m ty (mkOne cenv.g m), tpenv and TcExprNoRecover cenv ty (env: TcEnv) tpenv (expr: SynExpr) = - // Count our way through the expression shape that makes up an object constructor - // See notes at definition of "ctor" re. object model constructors. - let env = - if GetCtorShapeCounter env > 0 then AdjustCtorShapeCounter (fun x -> x - 1) env + // Count our way through the expression shape that makes up an object constructor + // See notes at definition of "ctor" re. object model constructors. + let env = + if GetCtorShapeCounter env > 0 then AdjustCtorShapeCounter (fun x -> x - 1) env else env TcExprThen cenv ty env tpenv expr [] @@ -5294,35 +5321,35 @@ and TcExprNoRecover cenv ty (env: TcEnv) tpenv (expr: SynExpr) = // through TcExprOfUnknownType, TcExpr and TcExprNoRecover and TcExprOfUnknownTypeThen cenv env tpenv expr delayed = let exprty = NewInferenceType () - let expr', tpenv = + let expr', tpenv = try TcExprThen cenv exprty env tpenv expr delayed - with e -> + with e -> let m = expr.Range - errorRecovery e m + errorRecovery e m solveTypAsError cenv env.DisplayEnv m exprty mkThrow m exprty (mkOne cenv.g m), tpenv expr', exprty, tpenv -/// This is used to typecheck legitimate 'main body of constructor' expressions +/// This is used to typecheck legitimate 'main body of constructor' expressions and TcExprThatIsCtorBody safeInitInfo cenv overallTy env tpenv expr = let env = {env with eCtorInfo = Some (InitialExplicitCtorInfo safeInitInfo) } let expr, tpenv = TcExpr cenv overallTy env tpenv expr let expr = CheckAndRewriteObjectCtor cenv.g env expr expr, tpenv -/// This is used to typecheck all ordinary expressions including constituent -/// parts of ctor. +/// This is used to typecheck all ordinary expressions including constituent +/// parts of ctor. and TcExprThatCanBeCtorBody cenv overallTy env tpenv expr = let env = if AreWithinCtorShape env then AdjustCtorShapeCounter (fun x -> x + 1) env else env TcExpr cenv overallTy env tpenv expr -/// This is used to typecheck legitimate 'non-main body of object constructor' expressions +/// This is used to typecheck legitimate 'non-main body of object constructor' expressions and TcExprThatCantBeCtorBody cenv overallTy env tpenv expr = let env = if AreWithinCtorShape env then ExitCtorShapeRegion env else env TcExpr cenv overallTy env tpenv expr -/// This is used to typecheck legitimate 'non-main body of object constructor' expressions +/// This is used to typecheck legitimate 'non-main body of object constructor' expressions and TcStmtThatCantBeCtorBody cenv env tpenv expr = let env = if AreWithinCtorShape env then ExitCtorShapeRegion env else env TcStmt cenv env tpenv expr @@ -5342,17 +5369,17 @@ and TryTcStmt cenv env tpenv synExpr = let hasTypeUnit = TryUnifyUnitTypeWithoutWarning cenv env m ty hasTypeUnit, expr, tpenv -/// During checking of expressions of the form (x(y)).z(w1, w2) -/// keep a stack of things on the right. This lets us recognize -/// method applications and other item-based syntax. +/// During checking of expressions of the form (x(y)).z(w1, w2) +/// keep a stack of things on the right. This lets us recognize +/// method applications and other item-based syntax. and TcExprThen cenv overallTy env tpenv synExpr delayed = - match synExpr with + match synExpr with | LongOrSingleIdent (isOpt, longId, altNameRefCellOpt, mLongId) -> if isOpt then errorR(Error(FSComp.SR.tcSyntaxErrorUnexpectedQMark(), mLongId)) // Check to see if pattern translation decided to use an alternative identifier. - match altNameRefCellOpt with - | Some {contents = Decided altId} -> TcExprThen cenv overallTy env tpenv (SynExpr.LongIdent (isOpt, LongIdentWithDots([altId], []), None, mLongId)) delayed + match altNameRefCellOpt with + | Some {contents = SynSimplePatAlternativeIdInfo.Decided altId} -> TcExprThen cenv overallTy env tpenv (SynExpr.LongIdent (isOpt, LongIdentWithDots([altId], []), None, mLongId)) delayed | _ -> TcLongIdentThen cenv overallTy env tpenv longId delayed // f x @@ -5367,8 +5394,8 @@ and TcExprThen cenv overallTy env tpenv synExpr delayed = // e1.id1.id2 // etc. | SynExpr.DotGet (e1, _, LongIdentWithDots(longId, _), _) -> - TcExprThen cenv overallTy env tpenv e1 ((DelayedDotLookup (longId, synExpr.RangeSansAnyExtraDot)) :: delayed) - + TcExprThen cenv overallTy env tpenv e1 ((DelayedDotLookup (longId, synExpr.RangeWithoutAnyExtraDot)) :: delayed) + // e1.[e2] // e1.[e21, ..., e2n] // etc. @@ -5380,17 +5407,17 @@ and TcExprThen cenv overallTy env tpenv synExpr delayed = // etc. | SynExpr.DotIndexedSet (e1, e2, _, _, mDot, mWholeExpr) -> TcIndexerThen cenv env overallTy mWholeExpr mDot tpenv synExpr e1 e2 delayed - + | _ -> - match delayed with + match delayed with | [] -> TcExprUndelayed cenv overallTy env tpenv synExpr - | _ -> + | _ -> let expr, exprty, tpenv = TcExprUndelayedNoType cenv env tpenv synExpr PropagateThenTcDelayed cenv overallTy env tpenv synExpr.Range (MakeApplicableExprNoFlex cenv expr) exprty ExprAtomicFlag.NonAtomic delayed -and TcExprs cenv env m tpenv flexes argTys args = +and TcExprs cenv env m tpenv flexes argTys args = if List.length args <> List.length argTys then error(Error(FSComp.SR.tcExpressionCountMisMatch((List.length argTys), (List.length args)), m)) - (tpenv, List.zip3 flexes argTys args) ||> List.mapFold (fun tpenv (flex, ty, e) -> + (tpenv, List.zip3 flexes argTys args) ||> List.mapFold (fun tpenv (flex, ty, e) -> TcExprFlex cenv flex false ty env tpenv e) and CheckSuperInit cenv objTy m = @@ -5402,7 +5429,7 @@ and CheckSuperInit cenv objTy m = //------------------------------------------------------------------------- // TcExprUndelayed -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- and TcExprUndelayedNoType cenv env tpenv synExpr: Expr * TType * _ = let overallTy = NewInferenceType () @@ -5411,10 +5438,10 @@ and TcExprUndelayedNoType cenv env tpenv synExpr: Expr * TType * _ = and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = - match synExpr with - | SynExpr.Paren (expr2, _, _, mWholeExprIncludingParentheses) -> - // We invoke CallExprHasTypeSink for every construct which is atomic in the syntax, i.e. where a '.' immediately following the - // construct is a dot-lookup for the result of the construct. + match synExpr with + | SynExpr.Paren (expr2, _, _, mWholeExprIncludingParentheses) -> + // We invoke CallExprHasTypeSink for every construct which is atomic in the syntax, i.e. where a '.' immediately following the + // construct is a dot-lookup for the result of the construct. CallExprHasTypeSink cenv.tcSink (mWholeExprIncludingParentheses, env.NameEnv, overallTy, env.AccessRights) let env = ShrinkContext env mWholeExprIncludingParentheses expr2.Range TcExpr cenv overallTy env tpenv expr2 @@ -5422,22 +5449,22 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = | SynExpr.DotIndexedGet _ | SynExpr.DotIndexedSet _ | SynExpr.TypeApp _ | SynExpr.Ident _ | SynExpr.LongIdent _ | SynExpr.App _ | SynExpr.DotGet _ -> error(Error(FSComp.SR.tcExprUndelayed(), synExpr.Range)) - | SynExpr.Const (SynConst.String (s, m), _) -> + | SynExpr.Const (SynConst.String (s, _, m), _) -> CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.AccessRights) TcConstStringExpr cenv overallTy env m tpenv s - | SynExpr.InterpolatedString (parts, m) -> + | SynExpr.InterpolatedString (parts, _, m) -> checkLanguageFeatureError cenv.g.langVersion LanguageFeature.StringInterpolation m CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.AccessRights) TcInterpolatedStringExpr cenv overallTy env m tpenv parts - | SynExpr.Const (synConst, m) -> + | SynExpr.Const (synConst, m) -> CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.AccessRights) TcConstExpr cenv overallTy env m tpenv synConst - | SynExpr.Lambda _ -> + | SynExpr.Lambda _ -> TcIteratedLambdas cenv true env overallTy Set.empty tpenv synExpr | SynExpr.Match (spMatch, synInputExpr, synClauses, _m) -> @@ -5450,14 +5477,14 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = // (function[spMatch] pat1 -> expr1 ... | patN -> exprN) // - // --> + // --> // (fun anonArg -> let[spMatch] anonVal = anonArg in pat1 -> expr1 ... | patN -> exprN) // - // Note the presence of the "let" is visible in quotations regardless of the presence of sequence points, so + // Note the presence of the "let" is visible in quotations regardless of the presence of sequence points, so // <@ function x -> (x: int) @> // is // Lambda (_arg2, Let (x, _arg2, x)) - + | SynExpr.MatchLambda (isExnMatch, mArg, clauses, spMatch, m) -> let domainTy, resultTy = UnifyFunctionType None cenv env.DisplayEnv m overallTy @@ -5477,44 +5504,44 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = | SynExpr.Typed (synBodyExpr, synType, m) -> let tgtTy, tpenv = TcTypeAndRecover cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv synType UnifyTypes cenv env m overallTy tgtTy - let expr, tpenv = TcExpr cenv overallTy env tpenv synBodyExpr + let expr, tpenv = TcExpr cenv overallTy env tpenv synBodyExpr expr, tpenv // e :? ty | SynExpr.TypeTest (synInnerExpr, tgtTy, m) -> - let innerExpr, srcTy, tpenv = TcExprOfUnknownType cenv env tpenv synInnerExpr + let innerExpr, srcTy, tpenv = TcExprOfUnknownType cenv env tpenv synInnerExpr UnifyTypes cenv env m overallTy cenv.g.bool_ty let tgtTy, tpenv = TcType cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv tgtTy - TcRuntimeTypeTest (*isCast*)false (*isOperator*)true cenv env.DisplayEnv m tgtTy srcTy + TcRuntimeTypeTest (*isCast*)false (*isOperator*)true cenv env.DisplayEnv m tgtTy srcTy let expr = mkCallTypeTest cenv.g m tgtTy innerExpr expr, tpenv - - // SynExpr.AddressOf is noted in the syntax ast in order to recognize it as concrete type information - // during type checking, in particular prior to resolving overloads. This helps distinguish - // its use at method calls from the use of the conflicting 'ref' mechanism for passing byref parameters - | SynExpr.AddressOf (byref, synInnerExpr, opm, m) -> - TcExpr cenv overallTy env tpenv (mkSynPrefixPrim opm m (if byref then "~&" else "~&&") synInnerExpr) - - | SynExpr.Upcast (synInnerExpr, _, m) | SynExpr.InferredUpcast (synInnerExpr, m) -> - let innerExpr, srcTy, tpenv = TcExprOfUnknownType cenv env tpenv synInnerExpr - let tgtTy, tpenv = + + // SynExpr.AddressOf is noted in the syntax ast in order to recognize it as concrete type information + // during type checking, in particular prior to resolving overloads. This helps distinguish + // its use at method calls from the use of the conflicting 'ref' mechanism for passing byref parameters + | SynExpr.AddressOf (byref, synInnerExpr, opm, m) -> + TcExpr cenv overallTy env tpenv (mkSynPrefixPrim opm m (if byref then "~&" else "~&&") synInnerExpr) + + | SynExpr.Upcast (synInnerExpr, _, m) | SynExpr.InferredUpcast (synInnerExpr, m) -> + let innerExpr, srcTy, tpenv = TcExprOfUnknownType cenv env tpenv synInnerExpr + let tgtTy, tpenv = match synExpr with - | SynExpr.Upcast (_, tgtTy, m) -> + | SynExpr.Upcast (_, tgtTy, m) -> let tgtTy, tpenv = TcType cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv tgtTy UnifyTypes cenv env m tgtTy overallTy tgtTy, tpenv - | SynExpr.InferredUpcast _ -> - overallTy, tpenv + | SynExpr.InferredUpcast _ -> + overallTy, tpenv | _ -> failwith "upcast" TcStaticUpcast cenv env.DisplayEnv m tgtTy srcTy let expr = mkCoerceExpr(innerExpr, tgtTy, m, srcTy) expr, tpenv | SynExpr.Downcast (synInnerExpr, _, m) | SynExpr.InferredDowncast (synInnerExpr, m) -> - let innerExpr, srcTy, tpenv = TcExprOfUnknownType cenv env tpenv synInnerExpr - let tgtTy, tpenv, isOperator = + let innerExpr, srcTy, tpenv = TcExprOfUnknownType cenv env tpenv synInnerExpr + let tgtTy, tpenv, isOperator = match synExpr with - | SynExpr.Downcast (_, tgtTy, m) -> + | SynExpr.Downcast (_, tgtTy, m) -> let tgtTy, tpenv = TcType cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv tgtTy UnifyTypes cenv env m tgtTy overallTy tgtTy, tpenv, true @@ -5522,8 +5549,8 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = | _ -> failwith "downcast" TcRuntimeTypeTest (*isCast*)true isOperator cenv env.DisplayEnv m tgtTy srcTy - // TcRuntimeTypeTest ensures tgtTy is a nominal type. Hence we can insert a check here - // based on the nullness semantics of the nominal type. + // TcRuntimeTypeTest ensures tgtTy is a nominal type. Hence we can insert a check here + // based on the nullness semantics of the nominal type. let expr = mkCallUnbox cenv.g m tgtTy innerExpr expr, tpenv @@ -5534,22 +5561,22 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = | SynExpr.Lazy (synInnerExpr, m) -> let innerTy = NewInferenceType () UnifyTypes cenv env m overallTy (mkLazyTy cenv.g innerTy) - let innerExpr, tpenv = TcExpr cenv innerTy env tpenv synInnerExpr + let innerExpr, tpenv = TcExpr cenv innerTy env tpenv synInnerExpr let expr = mkLazyDelayed cenv.g m innerTy (mkUnitDelayLambda cenv.g m innerExpr) expr, tpenv - | SynExpr.Tuple (isExplicitStruct, args, _, m) -> + | SynExpr.Tuple (isExplicitStruct, args, _, m) -> let tupInfo, argTys = UnifyTupleTypeAndInferCharacteristics env.eContextInfo cenv env.DisplayEnv m overallTy isExplicitStruct args // No subsumption at tuple construction let flexes = argTys |> List.map (fun _ -> false) let args', tpenv = TcExprs cenv env m tpenv flexes argTys args - let expr = mkAnyTupled cenv.g m tupInfo args' argTys + let expr = mkAnyTupled cenv.g m tupInfo args' argTys expr, tpenv - | SynExpr.AnonRecd (isStruct, optOrigExpr, unsortedFieldExprs, mWholeExpr) -> + | SynExpr.AnonRecd (isStruct, optOrigExpr, unsortedFieldExprs, mWholeExpr) -> TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigExpr, unsortedFieldExprs, mWholeExpr) - | SynExpr.ArrayOrList (isArray, args, m) -> + | SynExpr.ArrayOrList (isArray, args, m) -> CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.AccessRights) let argty = NewInferenceType () @@ -5558,30 +5585,30 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = // Always allow subsumption if a nominal type is known prior to type checking any arguments let flex = not (isTyparTy cenv.g argty) let mutable first = true - let getInitEnv m = - if first then + let getInitEnv m = + if first then first <- false env else { env with eContextInfo = ContextInfo.CollectionElement (isArray, m) } let args', tpenv = List.mapFold (fun tpenv (x: SynExpr) -> TcExprFlex cenv flex false argty (getInitEnv x.Range) tpenv x) tpenv args - - let expr = + + let expr = if isArray then Expr.Op (TOp.Array, [argty], args', m) else List.foldBack (mkCons cenv.g argty) args' (mkNil cenv.g m argty) expr, tpenv - | SynExpr.New (superInit, synObjTy, arg, mNewExpr) -> + | SynExpr.New (superInit, synObjTy, arg, mNewExpr) -> let objTy, tpenv = TcType cenv NewTyparsOK CheckCxs ItemOccurence.Use env tpenv synObjTy - UnifyTypes cenv env mNewExpr overallTy objTy + UnifyTypes cenv env mNewExpr overallTy objTy TcNewExpr cenv env tpenv objTy (Some synObjTy.Range) superInit arg mNewExpr | SynExpr.ObjExpr (objTy, argopt, binds, extraImpls, mNewExpr, m) -> CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.eAccessRights) TcObjectExpr cenv overallTy env tpenv (objTy, argopt, binds, extraImpls, mNewExpr, m) - - | SynExpr.Record (inherits, optOrigExpr, flds, mWholeExpr) -> + + | SynExpr.Record (inherits, optOrigExpr, flds, mWholeExpr) -> CallExprHasTypeSink cenv.tcSink (mWholeExpr, env.NameEnv, overallTy, env.AccessRights) TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr) @@ -5596,15 +5623,15 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = let startExpr, tpenv = TcExpr cenv cenv.g.int_ty env tpenv start let finishExpr, tpenv = TcExpr cenv cenv.g.int_ty env tpenv finish let idv, _ = mkLocal id.idRange id.idText cenv.g.int_ty - let envinner = AddLocalVal cenv.tcSink m idv env + let envinner = AddLocalVal cenv.g cenv.tcSink m idv env // notify name resolution sink about loop variable let item = Item.Value(mkLocalValRef idv) CallNameResolutionSink cenv.tcSink (idv.Range, env.NameEnv, item, emptyTyparInst, ItemOccurence.Binding, env.AccessRights) - + let bodyExpr, tpenv = TcStmt cenv envinner tpenv body mkFastForLoop cenv.g (spBind, m, idv, startExpr, dir, finishExpr, bodyExpr), tpenv - + | SynExpr.ForEach (spForLoop, SeqExprOnly seqExprOnly, isFromSource, pat, enumSynExpr, bodySynExpr, m) -> assert isFromSource if seqExprOnly then warning (Error(FSComp.SR.tcExpressionRequiresSequence(), m)) @@ -5613,18 +5640,18 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = | SynExpr.CompExpr (isArrayOrList, isNotNakedRefCell, comp, m) -> let env = ExitFamilyRegion env cenv.TcSequenceExpressionEntry cenv env overallTy tpenv (isArrayOrList, isNotNakedRefCell, comp) m - + | SynExpr.ArrayOrListOfSeqExpr (isArray, comp, m) -> CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.eAccessRights) cenv.TcArrayOrListSequenceExpression cenv env overallTy tpenv (isArray, comp) m | SynExpr.LetOrUse _ -> - TcLinearExprs (TcExprThatCanBeCtorBody cenv) cenv env overallTy tpenv false synExpr (fun x -> x) + TcLinearExprs (TcExprThatCanBeCtorBody cenv) cenv env overallTy tpenv false synExpr (fun x -> x) | SynExpr.TryWith (synBodyExpr, _mTryToWith, synWithClauses, mWithToLast, mTryToLast, spTry, spWith) -> let bodyExpr, tpenv = TcExpr cenv overallTy env tpenv synBodyExpr - // Compile the pattern twice, once as a List.filter with all succeeding targets returning "1", and once as a proper catch block. - let filterClauses = synWithClauses |> List.map (function (Clause(pat, optWhenExpr, _, m, _)) -> Clause(pat, optWhenExpr, (SynExpr.Const (SynConst.Int32 1, m)), m, DebugPointForTarget.No)) + // Compile the pattern twice, once as a List.filter with all succeeding targets returning "1", and once as a proper catch block. + let filterClauses = synWithClauses |> List.map (function (SynMatchClause(pat, optWhenExpr, _, m, _)) -> SynMatchClause(pat, optWhenExpr, (SynExpr.Const (SynConst.Int32 1, m)), m, DebugPointForTarget.No)) let checkedFilterClauses, tpenv = TcMatchClauses cenv cenv.g.exn_ty cenv.g.int_ty env tpenv filterClauses let checkedHandlerClauses, tpenv = TcMatchClauses cenv cenv.g.exn_ty overallTy env tpenv synWithClauses let v1, filterExpr = CompilePatternForMatchClauses cenv env mWithToLast mWithToLast true FailFilter None cenv.g.exn_ty cenv.g.int_ty checkedFilterClauses @@ -5636,13 +5663,13 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = let finallyExpr, tpenv = TcStmt cenv env tpenv synFinallyExpr mkTryFinally cenv.g (bodyExpr, finallyExpr, mTryToLast, overallTy, spTry, spFinally), tpenv - | SynExpr.JoinIn (e1, mInToken, e2, mAll) -> + | SynExpr.JoinIn (e1, mInToken, e2, mAll) -> errorR(Error(FSComp.SR.parsUnfinishedExpression("in"), mInToken)) - let _, _, tpenv = suppressErrorReporting (fun () -> TcExprOfUnknownType cenv env tpenv e1) - let _, _, tpenv = suppressErrorReporting (fun () -> TcExprOfUnknownType cenv env tpenv e2) + let _, _, tpenv = suppressErrorReporting (fun () -> TcExprOfUnknownType cenv env tpenv e1) + let _, _, tpenv = suppressErrorReporting (fun () -> TcExprOfUnknownType cenv env tpenv e2) mkDefault(mAll, overallTy), tpenv - | SynExpr.ArbitraryAfterError (_debugStr, m) -> + | SynExpr.ArbitraryAfterError (_debugStr, m) -> //solveTypAsError cenv env.DisplayEnv m overallTy mkDefault(m, overallTy), tpenv @@ -5651,18 +5678,18 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = let _, _, tpenv = suppressErrorReporting (fun () -> TcExprOfUnknownTypeThen cenv env tpenv e1 [DelayedDot]) mkDefault(m, overallTy), tpenv - | SynExpr.FromParseError (e1, m) -> + | SynExpr.FromParseError (e1, m) -> //solveTypAsError cenv env.DisplayEnv m overallTy let _, tpenv = suppressErrorReporting (fun () -> TcExpr cenv overallTy env tpenv e1) mkDefault(m, overallTy), tpenv | SynExpr.Sequential (sp, dir, synExpr1, synExpr2, m) -> - if dir then - TcLinearExprs (TcExprThatCanBeCtorBody cenv) cenv env overallTy tpenv false synExpr (fun x -> x) - else - // Constructors using "new (...) = then " + if dir then + TcLinearExprs (TcExprThatCanBeCtorBody cenv) cenv env overallTy tpenv false synExpr (fun x -> x) + else + // Constructors using "new (...) = then " let expr1, tpenv = TcExprThatCanBeCtorBody cenv overallTy env tpenv synExpr1 - if (GetCtorShapeCounter env) <> 1 then + if (GetCtorShapeCounter env) <> 1 then errorR(Error(FSComp.SR.tcExpressionFormRequiresObjectConstructor(), m)) let expr2, tpenv = TcStmtThatCantBeCtorBody cenv env tpenv synExpr2 Expr.Sequential (expr1, expr2, ThenDoSeq, sp, m), tpenv @@ -5670,9 +5697,9 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = // Used to implement the type-directed 'implicit yield' rule for computation expressions | SynExpr.SequentialOrImplicitYield (sp, synExpr1, synExpr2, otherExpr, m) -> let isStmt, expr1, tpenv = TryTcStmt cenv env tpenv synExpr1 - if isStmt then + if isStmt then let env = ShrinkContext env m synExpr2.Range - let expr2, tpenv = TcExprThatCanBeCtorBody cenv overallTy env tpenv synExpr2 + let expr2, tpenv = TcExprThatCanBeCtorBody cenv overallTy env tpenv synExpr2 Expr.Sequential(expr1, expr2, NormalSeq, sp, m), tpenv else // The first expression wasn't unit-typed, so proceed to the alternative interpretation @@ -5684,13 +5711,13 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = UnifyTypes cenv env m overallTy cenv.g.unit_ty TcStmtThatCantBeCtorBody cenv env tpenv synInnerExpr - | SynExpr.IfThenElse _ -> - TcLinearExprs (TcExprThatCanBeCtorBody cenv) cenv env overallTy tpenv false synExpr (fun x -> x) + | SynExpr.IfThenElse _ -> + TcLinearExprs (TcExprThatCanBeCtorBody cenv) cenv env overallTy tpenv false synExpr (fun x -> x) - // This is for internal use in the libraries only + // This is for internal use in the libraries only | SynExpr.LibraryOnlyStaticOptimization (constraints, e2, e3, m) -> let constraints', tpenv = List.mapFold (TcStaticOptimizationConstraint cenv env) tpenv constraints - // Do not force the types of the two expressions to be equal + // Do not force the types of the two expressions to be equal // This means uses of this construct have to be very carefully written let e2', _, tpenv = TcExprOfUnknownType cenv env tpenv e2 let e3', tpenv = TcExpr cenv overallTy env tpenv e3 @@ -5720,14 +5747,14 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = let mExprAndDotLookup = unionRanges e1.Range (rangeOfLid longId) TcExprThen cenv overallTy env tpenv e1 [DelayedDotLookup(longId, mExprAndDotLookup); DelayedApp(ExprAtomicFlag.Atomic, e2, mStmt); MakeDelayedSet(e3, mStmt)] - | SynExpr.LongIdentSet (lidwd, e2, m) -> + | SynExpr.LongIdentSet (lidwd, e2, m) -> if lidwd.ThereIsAnExtraDotAtTheEnd then // just drop rhs on the floor TcLongIdentThen cenv overallTy env tpenv lidwd [ ] else TcLongIdentThen cenv overallTy env tpenv lidwd [ MakeDelayedSet(e2, m) ] - - // Type.Items(e1) <- e2 + + // Type.Items(e1) <- e2 | SynExpr.NamedIndexedPropertySet (lidwd, e1, e2, mStmt) -> if lidwd.ThereIsAnExtraDotAtTheEnd then // just drop rhs on the floor @@ -5738,24 +5765,24 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = | SynExpr.TraitCall (tps, memSpfn, arg, m) -> let synTypes = tps |> List.map (fun tp -> SynType.Var(tp, m)) let traitInfo, tpenv = TcPseudoMemberSpec cenv NewTyparsOK env synTypes tpenv memSpfn m - if BakedInTraitConstraintNames.Contains traitInfo.MemberName then + if BakedInTraitConstraintNames.Contains traitInfo.MemberName then warning(BakedInMemberConstraintName(traitInfo.MemberName, m)) - + let argTys = traitInfo.ArgumentTypes let returnTy = GetFSharpViewOfReturnType cenv.g traitInfo.ReturnType - let args, namedCallerArgs = GetMethodArgs arg + let args, namedCallerArgs = GetMethodArgs arg if not (isNil namedCallerArgs) then errorR(Error(FSComp.SR.tcNamedArgumentsCannotBeUsedInMemberTraits(), m)) // Subsumption at trait calls if arguments have nominal type prior to unification of any arguments or return type let flexes = argTys |> List.map (isTyparTy cenv.g >> not) let args', tpenv = TcExprs cenv env m tpenv flexes argTys args AddCxMethodConstraint env.DisplayEnv cenv.css m NoTrace traitInfo - UnifyTypes cenv env m overallTy returnTy + UnifyTypes cenv env m overallTy returnTy Expr.Op (TOp.TraitCall traitInfo, [], args', m), tpenv - + | SynExpr.LibraryOnlyUnionCaseFieldGet (e1, c, n, m) -> let e1', ty1, tpenv = TcExprOfUnknownType cenv env tpenv e1 - let mkf, ty2 = TcUnionCaseOrExnField cenv env ty1 m c n - ((fun (a, b) n -> mkUnionCaseFieldGetUnproven cenv.g (e1', a, b, n, m)), + let mkf, ty2 = TcUnionCaseOrExnField cenv env ty1 m c n + ((fun (a, b) n -> mkUnionCaseFieldGetUnproven cenv.g (e1', a, b, n, m)), (fun a n -> mkExnCaseFieldGet(e1', a, n, m))) UnifyTypes cenv env m overallTy ty2 mkf n, tpenv @@ -5764,24 +5791,25 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = UnifyTypes cenv env m overallTy cenv.g.unit_ty let e1', ty1, tpenv = TcExprOfUnknownType cenv env tpenv e1 let mkf, ty2 = TcUnionCaseOrExnField cenv env ty1 m c n - ((fun (a, b) n e2' -> + ((fun (a, b) n e2' -> if not (isUnionCaseFieldMutable cenv.g a n) then errorR(Error(FSComp.SR.tcFieldIsNotMutable(), m)) - mkUnionCaseFieldSet(e1', a, b, n, e2', m)), - (fun a n e2' -> + mkUnionCaseFieldSet(e1', a, b, n, e2', m)), + (fun a n e2' -> if not (isExnFieldMutable a n) then errorR(Error(FSComp.SR.tcFieldIsNotMutable(), m)) mkExnCaseFieldSet(e1', a, n, e2', m))) let e2', tpenv = TcExpr cenv ty2 env tpenv e2 mkf n e2', tpenv | SynExpr.LibraryOnlyILAssembly (s, tyargs, args, rtys, m) -> + let s = (s :?> ILInstr[]) let argTys = NewInferenceTypes args let tyargs', tpenv = TcTypes cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv tyargs // No subsumption at uses of IL assembly code let flexes = argTys |> List.map (fun _ -> false) let args', tpenv = TcExprs cenv env m tpenv flexes argTys args let rtys', tpenv = TcTypes cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv rtys - let returnTy = - match rtys' with + let returnTy = + match rtys' with | [] -> cenv.g.unit_ty | [ returnTy ] -> returnTy | _ -> error(InternalError("Only zero or one pushed items are permitted in IL assembly code", m)) @@ -5790,92 +5818,92 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = | SynExpr.Quote (oper, raw, ast, isFromQueryExpression, m) -> CallExprHasTypeSink cenv.tcSink (m, env.NameEnv, overallTy, env.AccessRights) - TcQuotationExpr cenv overallTy env tpenv (oper, raw, ast, isFromQueryExpression, m) + TcQuotationExpr cenv overallTy env tpenv (oper, raw, ast, isFromQueryExpression, m) | SynExpr.YieldOrReturn ((isTrueYield, _), _, m) - | SynExpr.YieldOrReturnFrom ((isTrueYield, _), _, m) when isTrueYield -> + | SynExpr.YieldOrReturnFrom ((isTrueYield, _), _, m) when isTrueYield -> error(Error(FSComp.SR.tcConstructRequiresListArrayOrSequence(), m)) | SynExpr.YieldOrReturn ((_, isTrueReturn), _, m) - | SynExpr.YieldOrReturnFrom ((_, isTrueReturn), _, m) when isTrueReturn -> + | SynExpr.YieldOrReturnFrom ((_, isTrueReturn), _, m) when isTrueReturn -> error(Error(FSComp.SR.tcConstructRequiresComputationExpressions(), m)) | SynExpr.YieldOrReturn (_, _, m) - | SynExpr.YieldOrReturnFrom (_, _, m) + | SynExpr.YieldOrReturnFrom (_, _, m) | SynExpr.ImplicitZero m -> error(Error(FSComp.SR.tcConstructRequiresSequenceOrComputations(), m)) - | SynExpr.DoBang (_, m) - | SynExpr.LetOrUseBang (range=m) -> + | SynExpr.DoBang (_, m) + | SynExpr.LetOrUseBang (range=m) -> error(Error(FSComp.SR.tcConstructRequiresComputationExpression(), m)) | SynExpr.MatchBang (_, _, _, m) -> error(Error(FSComp.SR.tcConstructRequiresComputationExpression(), m)) /// Check lambdas as a group, to catch duplicate names in patterns -and TcIteratedLambdas cenv isFirst (env: TcEnv) overallTy takenNames tpenv e = - match e with +and TcIteratedLambdas cenv isFirst (env: TcEnv) overallTy takenNames tpenv e = + match e with | SynExpr.Lambda (isMember, isSubsequent, spats, bodyExpr, _, m) when isMember || isFirst || isSubsequent -> let domainTy, resultTy = UnifyFunctionType None cenv env.DisplayEnv m overallTy let vs, (tpenv, names, takenNames) = TcSimplePats cenv isMember CheckCxs domainTy env (tpenv, Map.empty, takenNames) spats - let envinner, _, vspecMap = MakeAndPublishSimpleValsForMergedScope cenv env m names + let envinner, _, vspecMap = MakeAndPublishSimpleValsForMergedScope cenv env m names let byrefs = vspecMap |> Map.map (fun _ v -> isByrefTy cenv.g v.Type, v) let envinner = if isMember then envinner else ExitFamilyRegion envinner let bodyExpr, tpenv = TcIteratedLambdas cenv false envinner resultTy takenNames tpenv bodyExpr // See bug 5758: Non-monotonicity in inference: need to ensure that parameters are never inferred to have byref type, instead it is always declared - byrefs |> Map.iter (fun _ (orig, v) -> + byrefs |> Map.iter (fun _ (orig, v) -> if not orig && isByrefTy cenv.g v.Type then errorR(Error(FSComp.SR.tcParameterInferredByref v.DisplayName, v.Range))) - mkMultiLambda m (List.map (fun nm -> NameMap.find nm vspecMap) vs) (bodyExpr, resultTy), tpenv - | e -> + mkMultiLambda m (List.map (fun nm -> NameMap.find nm vspecMap) vs) (bodyExpr, resultTy), tpenv + | e -> // Dive into the expression to check for syntax errors and suppress them if they show. conditionallySuppressErrorReporting (not isFirst && synExprContainsError e) (fun () -> //TcExprFlex cenv true true overallTy env tpenv e) TcExpr cenv overallTy env tpenv e) - -// Check expr.[idx] -// This is a little over complicated for my liking. Basically we want to interpret e1.[idx] as e1.Item(idx). -// However it's not so simple as all that. First "Item" can have a different name according to an attribute in -// .NET metadata. This means we manually typecheck 'e1' and look to see if it has a nominal type. We then -// do the right thing in each case. -and TcIndexerThen cenv env overallTy mWholeExpr mDot tpenv wholeExpr e1 indexArgs delayed = + +// Check expr.[idx] +// This is a little over complicated for my liking. Basically we want to interpret e1.[idx] as e1.Item(idx). +// However it's not so simple as all that. First "Item" can have a different name according to an attribute in +// .NET metadata. This means we manually typecheck 'e1' and look to see if it has a nominal type. We then +// do the right thing in each case. +and TcIndexerThen cenv env overallTy mWholeExpr mDot tpenv wholeExpr e1 indexArgs delayed = let ad = env.AccessRights let e1', e1ty, tpenv = TcExprOfUnknownType cenv env tpenv e1 - - // Find the first type in the effective hierarchy that either has a DefaultMember attribute OR - // has a member called 'Item' + + // Find the first type in the effective hierarchy that either has a DefaultMember attribute OR + // has a member called 'Item' let isIndex = indexArgs |> List.forall( fun x -> match x with SynIndexerArg.One _ -> true | _ -> false) - let propName = + let propName = if isIndex then - FoldPrimaryHierarchyOfType (fun ty acc -> + FoldPrimaryHierarchyOfType (fun ty acc -> match acc with | None -> match tryTcrefOfAppTy cenv.g ty with | ValueSome tcref -> - TryFindTyconRefStringAttribute cenv.g mWholeExpr cenv.g.attrib_DefaultMemberAttribute tcref + TryFindTyconRefStringAttribute cenv.g mWholeExpr cenv.g.attrib_DefaultMemberAttribute tcref | _ -> let item = Some "Item" match AllPropInfosOfTypeInScope ResultCollectionSettings.AtMostOneResult cenv.infoReader env.NameEnv item ad IgnoreOverrides mWholeExpr ty with | [] -> None | _ -> item | _ -> acc) - cenv.g - cenv.amap - mWholeExpr + cenv.g + cenv.amap + mWholeExpr AllowMultiIntfInstantiations.Yes e1ty None else Some "GetSlice" let isNominal = isAppTy cenv.g e1ty - - let isArray = isArrayTy cenv.g e1ty - let isString = typeEquiv cenv.g cenv.g.string_ty e1ty - let idxRange = indexArgs |> List.map (fun e -> e.Range) |> List.reduce unionRanges + let isArray = isArrayTy cenv.g e1ty + let isString = typeEquiv cenv.g cenv.g.string_ty e1ty + + let idxRange = indexArgs |> List.map (fun e -> e.Range) |> List.reduce unionRanges // xs.GetReverseIndex rank offset - 1 - let rewriteReverseExpr (rank: int) (offset: SynExpr) (range: range) = + let rewriteReverseExpr (rank: int) (offset: SynExpr) (range: range) = let rankExpr = SynExpr.Const(SynConst.Int32(rank), range) let sliceArgs = SynExpr.Paren(SynExpr.Tuple(false, [rankExpr; offset], [], range), range, Some range, range) let xsId = e1 @@ -5885,16 +5913,16 @@ and TcIndexerThen cenv env overallTy mWholeExpr mDot tpenv wholeExpr e1 indexArg sliceArgs range - let rewriteReverseOption (app: SynExpr) (rank: int) (range: range) = + let rewriteReverseOption (app: SynExpr) (rank: int) (range: range) = match app with | SynExpr.App(atomicFlag, isInfix, funcExpr, e1, outerRange) -> SynExpr.App(atomicFlag, isInfix, funcExpr, rewriteReverseExpr rank e1 range, outerRange) | _ -> app - let expandedIndexArgs = - indexArgs + let expandedIndexArgs = + indexArgs |> List.mapi ( fun pos indexerArg -> match indexerArg with - | SynIndexerArg.One(expr, fromEnd, range) -> + | SynIndexerArg.One(expr, fromEnd, range) -> [ if fromEnd then rewriteReverseExpr pos expr range else expr ] | SynIndexerArg.Two ( @@ -5903,25 +5931,25 @@ and TcIndexerThen cenv env overallTy mWholeExpr mDot tpenv wholeExpr e1 indexArg a2, fromEnd2, range1, - range2) -> + range2) -> [ if fromEnd1 then rewriteReverseOption a1 pos range1 else a1 ; if fromEnd2 then rewriteReverseOption a2 pos range2 else a2 ] ) |> List.collect (id) - - let MakeIndexParam setSliceArrayOption = - match indexArgs with + + let MakeIndexParam setSliceArrayOption = + match indexArgs with | [] -> failwith "unexpected empty index list" | [SynIndexerArg.One _] -> SynExpr.Paren (expandedIndexArgs.Head, range0, None, idxRange) | _ -> SynExpr.Paren (SynExpr.Tuple (false, expandedIndexArgs @ Option.toList setSliceArrayOption, [], idxRange), range0, None, idxRange) - let attemptArrayString = + let attemptArrayString = let indexOpPath = ["Microsoft";"FSharp";"Core";"LanguagePrimitives";"IntrinsicFunctions"] let sliceOpPath = ["Microsoft";"FSharp";"Core";"Operators";"OperatorIntrinsics"] - let info = + let info = if isArray then let fixedIndex3d4dEnabled = cenv.g.langVersion.SupportsFeature LanguageFeature.FixedIndexSlice3d4d match wholeExpr with @@ -5997,77 +6025,77 @@ and TcIndexerThen cenv env overallTy mWholeExpr mDot tpenv wholeExpr e1 indexArg | _ -> None else None - - match info with + + match info with | None -> None - | Some (path, functionName, indexArgs) -> + | Some (path, functionName, indexArgs) -> let operPath = mkSynLidGet mDot path (CompileOpName functionName) let f, fty, tpenv = TcExprOfUnknownType cenv env tpenv operPath let domainTy, resultTy = UnifyFunctionType (Some mWholeExpr) cenv env.DisplayEnv mWholeExpr fty - UnifyTypes cenv env mWholeExpr domainTy e1ty + UnifyTypes cenv env mWholeExpr domainTy e1ty let f', resultTy = buildApp cenv (MakeApplicableExprNoFlex cenv f) resultTy e1' mWholeExpr let delayed = List.foldBack (fun idx acc -> DelayedApp(ExprAtomicFlag.Atomic, idx, mWholeExpr) :: acc) indexArgs delayed // atomic, otherwise no ar.[1] <- xyz Some (PropagateThenTcDelayed cenv overallTy env tpenv mWholeExpr f' resultTy ExprAtomicFlag.Atomic delayed ) - match attemptArrayString with + match attemptArrayString with | Some res -> res - | None -> + | None -> if isNominal || Option.isSome propName then - let nm = - match propName with + let nm = + match propName with | None -> "Item" | Some nm -> nm - let delayed = - match wholeExpr with - // e1.[e2] - | SynExpr.DotIndexedGet _ -> + let delayed = + match wholeExpr with + // e1.[e2] + | SynExpr.DotIndexedGet _ -> DelayedDotLookup([ident(nm, mWholeExpr)], mWholeExpr) :: DelayedApp(ExprAtomicFlag.Atomic, MakeIndexParam None, mWholeExpr) :: delayed // e1.[e2] <- e3 - | SynExpr.DotIndexedSet (_, _, e3, mOfLeftOfSet, _, _) -> - match isIndex with + | SynExpr.DotIndexedSet (_, _, e3, mOfLeftOfSet, _, _) -> + match isIndex with | true -> DelayedDotLookup([ident(nm, mOfLeftOfSet)], mOfLeftOfSet) :: DelayedApp(ExprAtomicFlag.Atomic, MakeIndexParam None, mOfLeftOfSet) :: MakeDelayedSet(e3, mWholeExpr) :: delayed | false -> DelayedDotLookup([ident("SetSlice", mOfLeftOfSet)], mOfLeftOfSet) :: DelayedApp(ExprAtomicFlag.Atomic, MakeIndexParam (Some e3), mWholeExpr) :: delayed - + | _ -> error(InternalError("unreachable", mWholeExpr)) - PropagateThenTcDelayed cenv overallTy env tpenv mDot (MakeApplicableExprNoFlex cenv e1') e1ty ExprAtomicFlag.Atomic delayed + PropagateThenTcDelayed cenv overallTy env tpenv mDot (MakeApplicableExprNoFlex cenv e1') e1ty ExprAtomicFlag.Atomic delayed - else - // deprecated constrained lookup + else + // deprecated constrained lookup error(Error(FSComp.SR.tcObjectOfIndeterminateTypeUsedRequireTypeConstraint(), mWholeExpr)) -/// Check a 'new Type(args)' expression, also an 'inheritedTys declaration in an implicit or explicit class +/// Check a 'new Type(args)' expression, also an 'inheritedTys declaration in an implicit or explicit class /// For 'new Type(args)', mWholeExprOrObjTy is the whole expression /// For 'inherit Type(args)', mWholeExprOrObjTy is the whole expression /// For an implicit inherit from System.Object or a default constructor, mWholeExprOrObjTy is the type name of the type being defined and TcNewExpr cenv env tpenv objTy mObjTyOpt superInit arg mWholeExprOrObjTy = let ad = env.AccessRights - // Handle the case 'new 'a()' - if (isTyparTy cenv.g objTy) then + // Handle the case 'new 'a()' + if (isTyparTy cenv.g objTy) then if superInit then error(Error(FSComp.SR.tcCannotInheritFromVariableType(), mWholeExprOrObjTy)) AddCxTypeMustSupportDefaultCtor env.DisplayEnv cenv.css mWholeExprOrObjTy NoTrace objTy - - match arg with + + match arg with | SynExpr.Const (SynConst.Unit, _) -> () | _ -> errorR(Error(FSComp.SR.tcObjectConstructorsOnTypeParametersCannotTakeArguments(), mWholeExprOrObjTy)) - + mkCallCreateInstance cenv.g mWholeExprOrObjTy objTy, tpenv - else + else if not (isAppTy cenv.g objTy) && not (isAnyTupleTy cenv.g objTy) then error(Error(FSComp.SR.tcNamedTypeRequired(if superInit then "inherit" else "new"), mWholeExprOrObjTy)) let item = ForceRaise (ResolveObjectConstructor cenv.nameResolver env.DisplayEnv mWholeExprOrObjTy ad objTy) - + TcCtorCall false cenv env tpenv objTy objTy mObjTyOpt item superInit [arg] mWholeExprOrObjTy [] None -/// Check an 'inheritedTys declaration in an implicit or explicit class +/// Check an 'inheritedTys declaration in an implicit or explicit class and TcCtorCall isNaked cenv env tpenv overallTy objTy mObjTyOpt item superInit args mWholeCall delayed afterTcOverloadResolutionOpt = let ad = env.AccessRights let isSuperInit = (if superInit then CtorValUsedAsSuperInit else NormalValUse) let mItem = match mObjTyOpt with Some m -> m | None -> mWholeCall - if isInterfaceTy cenv.g objTy then + if isInterfaceTy cenv.g objTy then error(Error((if superInit then FSComp.SR.tcInheritCannotBeUsedOnInterfaceType() else FSComp.SR.tcNewCannotBeUsedOnInterfaceType()), mWholeCall)) - match item, args with + match item, args with | Item.CtorGroup(methodName, minfos), _ -> let meths = List.map (fun minfo -> minfo, None) minfos if isNaked && TypeFeasiblySubsumesType 0 cenv.g cenv.amap mWholeCall cenv.g.system_IDisposable_ty NoCoerce objTy then @@ -6081,71 +6109,71 @@ and TcCtorCall isNaked cenv env tpenv overallTy objTy mObjTyOpt item superInit a let afterResolution = match mObjTyOpt, afterTcOverloadResolutionOpt with | _, Some action -> action - | Some mObjTy, None -> ForNewConstructors cenv.tcSink env mObjTy methodName minfos + | Some mObjTy, None -> ForNewConstructors cenv.tcSink env mObjTy methodName minfos | None, _ -> AfterResolution.DoNothing - TcMethodApplicationThen cenv env overallTy (Some objTy) tpenv None [] mWholeCall mItem methodName ad PossiblyMutates false meths afterResolution isSuperInit args ExprAtomicFlag.NonAtomic delayed + TcMethodApplicationThen cenv env overallTy (Some objTy) tpenv None [] mWholeCall mItem methodName ad PossiblyMutates false meths afterResolution isSuperInit args ExprAtomicFlag.NonAtomic delayed | Item.DelegateCtor ty, [arg] -> // Re-record the name resolution since we now know it's a constructor call - match mObjTyOpt with + match mObjTyOpt with | Some mObjTy -> CallNameResolutionSink cenv.tcSink (mObjTy, env.NameEnv, item, emptyTyparInst, ItemOccurence.Use, env.AccessRights) | None -> () TcNewDelegateThen cenv objTy env tpenv mItem mWholeCall ty arg ExprAtomicFlag.NonAtomic delayed - | _ -> + | _ -> error(Error(FSComp.SR.tcSyntaxCanOnlyBeUsedToCreateObjectTypes(if superInit then "inherit" else "new"), mWholeCall)) -// Check a record construction expression +// Check a record construction expression and TcRecordConstruction cenv overallTy env tpenv optOrigExprInfo objTy fldsList m = let tcref, tinst = destAppTy cenv.g objTy let tycon = tcref.Deref UnifyTypes cenv env m overallTy objTy - // Types with implicit constructors can't use record or object syntax: all constructions must go through the implicit constructor - if tycon.MembersOfFSharpTyconByName |> NameMultiMap.existsInRange (fun v -> v.IsIncrClassConstructor) then + // Types with implicit constructors can't use record or object syntax: all constructions must go through the implicit constructor + if tycon.MembersOfFSharpTyconByName |> NameMultiMap.existsInRange (fun v -> v.IsIncrClassConstructor) then errorR(Error(FSComp.SR.tcConstructorRequiresCall(tycon.DisplayName), m)) - + let fspecs = tycon.TrueInstanceFieldsAsList // Freshen types and work out their subtype flexibility - let fldsList = - [ for (fname, fexpr) in fldsList do - let fspec = - try - fspecs |> List.find (fun fspec -> fspec.Name = fname) - with :? KeyNotFoundException -> + let fldsList = + [ for (fname, fexpr) in fldsList do + let fspec = + try + fspecs |> List.find (fun fspec -> fspec.Name = fname) + with :? KeyNotFoundException -> error (Error(FSComp.SR.tcUndefinedField(fname, NicePrint.minimalStringOfType env.DisplayEnv objTy), m)) let fty = actualTyOfRecdFieldForTycon tycon tinst fspec let flex = not (isTyparTy cenv.g fty) yield (fname, fexpr, fty, flex) ] - // Type check and generalize the supplied bindings - let fldsList, tpenv = + // Type check and generalize the supplied bindings + let fldsList, tpenv = let env = { env with eContextInfo = ContextInfo.RecordFields } (tpenv, fldsList) ||> List.mapFold (fun tpenv (fname, fexpr, fty, flex) -> let fieldExpr, tpenv = TcExprFlex cenv flex false fty env tpenv fexpr (fname, fieldExpr), tpenv) - - // Add rebindings for unbound field when an "old value" is available - // Effect order: mutable fields may get modified by other bindings... - let oldFldsList = + + // Add rebindings for unbound field when an "old value" is available + // Effect order: mutable fields may get modified by other bindings... + let oldFldsList = match optOrigExprInfo with | None -> [] - | Some (_, _, oldvaddre) -> + | Some (_, _, oldvaddre) -> let fieldNameUnbound nom = List.forall (fun (name, _) -> name <> nom) fldsList - let flds = - fspecs |> List.choose (fun rfld -> - if fieldNameUnbound rfld.Name && not rfld.IsZeroInit + let flds = + fspecs |> List.choose (fun rfld -> + if fieldNameUnbound rfld.Name && not rfld.IsZeroInit then Some(rfld.Name, mkRecdFieldGetViaExprAddr (oldvaddre, tcref.MakeNestedRecdFieldRef rfld, tinst, m)) else None) flds let fldsList = fldsList @ oldFldsList - // From now on only interested in fspecs that truly need values. + // From now on only interested in fspecs that truly need values. let fspecs = fspecs |> List.filter (fun f -> not f.IsZeroInit) - + // Check all fields are bound fspecs |> List.iter (fun fspec -> if not (fldsList |> List.exists (fun (fname, _) -> fname = fspec.Name)) then @@ -6154,35 +6182,35 @@ and TcRecordConstruction cenv overallTy env tpenv optOrigExprInfo objTy fldsList // Other checks (overlap with above check now clear) let ns1 = NameSet.ofList (List.map fst fldsList) let ns2 = NameSet.ofList (List.map (fun x -> x.rfield_id.idText) fspecs) - + if optOrigExprInfo.IsNone && not (Zset.subset ns2 ns1) then error (MissingFields(Zset.elements (Zset.diff ns2 ns1), m)) - - if not (Zset.subset ns1 ns2) then + + if not (Zset.subset ns1 ns2) then error (Error(FSComp.SR.tcExtraneousFieldsGivenValues(), m)) - - // Build record + + // Build record let rfrefs = List.map (fst >> mkRecdFieldRef tcref) fldsList - // Check accessibility: this is also done in BuildFieldMap, but also need to check - // for fields in { new R with a=1 and b=2 } constructions and { r with a=1 } copy-and-update expressions - rfrefs |> List.iter (fun rfref -> + // Check accessibility: this is also done in BuildFieldMap, but also need to check + // for fields in { new R with a=1 and b=2 } constructions and { r with a=1 } copy-and-update expressions + rfrefs |> List.iter (fun rfref -> CheckRecdFieldAccessible cenv.amap m env.eAccessRights rfref |> ignore - CheckFSharpAttributes cenv.g rfref.PropertyAttribs m |> CommitOperationResult) + CheckFSharpAttributes cenv.g rfref.PropertyAttribs m |> CommitOperationResult) let args = List.map snd fldsList - + let expr = mkRecordExpr cenv.g (GetRecdInfo env, tcref, tinst, rfrefs, args, m) - let expr = - match optOrigExprInfo with + let expr = + match optOrigExprInfo with | None -> // '{ recd fields }'. // expr - - | Some (old, oldvaddr, _) -> - // '{ recd with fields }'. - // Assign the first object to a tmp and then construct + + | Some (old, oldvaddr, _) -> + // '{ recd with fields }'. + // Assign the first object to a tmp and then construct let wrap, oldaddr, _readonly, _writeonly = mkExprAddrOfExpr cenv.g tycon.IsStructOrEnumTycon false NeverMutates old None m wrap (mkCompGenLet m oldvaddr oldaddr expr) @@ -6190,60 +6218,60 @@ and TcRecordConstruction cenv overallTy env tpenv optOrigExprInfo objTy fldsList //------------------------------------------------------------------------- // TcObjectExpr -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- and GetNameAndArityOfObjExprBinding _cenv _env b = let (NormalizedBinding (_, _, _, _, _, _, _, valSynData, pat, rhsExpr, mBinding, _)) = b - let (SynValData(memberFlagsOpt, valSynInfo, _)) = valSynData - match pat, memberFlagsOpt with + let (SynValData(memberFlagsOpt, valSynInfo, _)) = valSynData + match pat, memberFlagsOpt with // This is the normal case for F# 'with member x.M(...) = ...' | SynPat.InstanceMember(_thisId, memberId, _, None, _), Some memberFlags -> let logicalMethId = ident (ComputeLogicalName memberId memberFlags, memberId.idRange) logicalMethId.idText, valSynInfo - | _ -> + | _ -> // This is for the deprecated form 'with M(...) = ...' let rec lookPat pat = - match pat with + match pat with | SynPat.Typed(pat, _, _) -> lookPat pat | SynPat.FromParseError(pat, _) -> lookPat pat - | SynPat.Named (SynPat.Wild _, id, _, None, _) -> + | SynPat.Named (id, _, None, _) -> let (NormalizedBindingRhs(pushedPats, _, _)) = rhsExpr let infosForExplicitArgs = pushedPats |> List.map SynInfo.InferSynArgInfoFromSimplePats - let infosForExplicitArgs = SynInfo.AdjustMemberArgs MemberKind.Member infosForExplicitArgs - let infosForExplicitArgs = SynInfo.AdjustArgsForUnitElimination infosForExplicitArgs + let infosForExplicitArgs = SynInfo.AdjustMemberArgs SynMemberKind.Member infosForExplicitArgs + let infosForExplicitArgs = SynInfo.AdjustArgsForUnitElimination infosForExplicitArgs let argInfos = [SynInfo.selfMetadata] @ infosForExplicitArgs let retInfo = SynInfo.unnamedRetVal //SynInfo.InferSynReturnData pushedRetInfoOpt let valSynData = SynValInfo(argInfos, retInfo) (id.idText, valSynData) - | _ -> error(Error(FSComp.SR.tcObjectExpressionsCanOnlyOverrideAbstractOrVirtual(), mBinding)) + | _ -> error(Error(FSComp.SR.tcObjectExpressionsCanOnlyOverrideAbstractOrVirtual(), mBinding)) lookPat pat -and FreshenObjExprAbstractSlot cenv (env: TcEnv) (implty: TType) virtNameAndArityPairs (bind, bindAttribs, bindName, absSlots:(_ * MethInfo) list) = +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) -> + 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) = + let getSignature absSlot = (NicePrint.stringOfMethInfo cenv.infoReader 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 + let arity = + match SynInfo.AritiesOfArgs synValInfo with | _ :: x :: _ -> x | _ -> 0 - - match absSlotsByName with + + match absSlotsByName with | [] -> let tcref = tcrefOfAppTy cenv.g implty - let containsNonAbstractMemberWithSameName = + let containsNonAbstractMemberWithSameName = tcref.MembersOfFSharpTyconByName |> Seq.exists (fun kv -> kv.Value |> List.exists (fun valRef -> valRef.DisplayName = bindName)) @@ -6259,73 +6287,73 @@ and FreshenObjExprAbstractSlot cenv (env: TcEnv) (implty: TType) virtNameAndArit 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 - - | [(_, absSlot)] -> - + + | [(_, absSlot)] -> + let typarsFromAbsSlotAreRigid, typarsFromAbsSlot, argTysFromAbsSlot, retTyFromAbsSlot = FreshenAbstractSlot cenv.g cenv.amap mBinding synTyparDecls absSlot - // Work out the required type of the member - let bindingTy = implty --> (mkMethodTy cenv.g argTysFromAbsSlot retTyFromAbsSlot) - + // Work out the required type of the member + let bindingTy = implty --> (mkMethodTy cenv.g argTysFromAbsSlot retTyFromAbsSlot) + Some(typarsFromAbsSlotAreRigid, typarsFromAbsSlot, bindingTy) - - | _ -> + + | _ -> None and TcObjectExprBinding cenv (env: TcEnv) implty tpenv (absSlotInfo, bind) = - // 4a1. normalize the binding (note: needlessly repeating what we've done above) + // 4a1. normalize the binding (note: needlessly repeating what we've done above) let (NormalizedBinding(vis, bkind, isInline, isMutable, attrs, doc, synTyparDecls, valSynData, p, bindingRhs, mBinding, spBind)) = bind - let (SynValData(memberFlagsOpt, _, _)) = valSynData - // 4a2. adjust the binding, especially in the "member" case, a subset of the logic of AnalyzeAndMakeAndPublishRecursiveValue - let bindingRhs, logicalMethId, memberFlags = - let rec lookPat p = - match p, memberFlagsOpt with + let (SynValData(memberFlagsOpt, _, _)) = valSynData + // 4a2. adjust the binding, especially in the "member" case, a subset of the logic of AnalyzeAndMakeAndPublishRecursiveValue + let bindingRhs, logicalMethId, memberFlags = + let rec lookPat p = + match p, memberFlagsOpt with | SynPat.FromParseError(pat, _), _ -> lookPat pat - | SynPat.Named (SynPat.Wild _, id, _, _, _), None -> - let bindingRhs = PushOnePatternToRhs cenv true (mkSynThisPatVar (ident (CompilerGeneratedName "this", id.idRange))) bindingRhs + | SynPat.Named (id, _, _, _), None -> + let bindingRhs = PushOnePatternToRhs cenv true (mkSynThisPatVar (ident (CompilerGeneratedName "this", id.idRange))) bindingRhs let logicalMethId = id - let memberFlags = OverrideMemberFlags MemberKind.Member + let memberFlags = OverrideMemberFlags SynMemberKind.Member bindingRhs, logicalMethId, memberFlags - | SynPat.InstanceMember(thisId, memberId, _, _, _), Some memberFlags -> + | SynPat.InstanceMember(thisId, memberId, _, _, _), Some memberFlags -> CheckMemberFlags None NewSlotsOK OverridesOK memberFlags mBinding let bindingRhs = PushOnePatternToRhs cenv true (mkSynThisPatVar thisId) bindingRhs let logicalMethId = ident (ComputeLogicalName memberId memberFlags, memberId.idRange) bindingRhs, logicalMethId, memberFlags - | _ -> + | _ -> error(InternalError("unexpected member binding", mBinding)) lookPat p - let bind = NormalizedBinding (vis, bkind, isInline, isMutable, attrs, doc, synTyparDecls, valSynData, mkSynPatVar vis logicalMethId, bindingRhs, mBinding, spBind) - - // 4b. typecheck the binding - let bindingTy = + let bind = NormalizedBinding (vis, bkind, isInline, isMutable, attrs, doc, synTyparDecls, valSynData, mkSynPatVar vis logicalMethId, bindingRhs, mBinding, spBind) + + // 4b. typecheck the binding + let bindingTy = match absSlotInfo with - | Some(_, _, memberTyFromAbsSlot) -> + | Some(_, _, memberTyFromAbsSlot) -> memberTyFromAbsSlot - | _ -> + | _ -> implty --> NewInferenceType () - let (CheckedBindingInfo(inlineFlag, bindingAttribs, _, _, ExplicitTyparInfo(_, declaredTypars, _), nameToPrelimValSchemeMap, rhsExpr, _, _, m, _, _, _, _), tpenv) = + let (CheckedBindingInfo(inlineFlag, bindingAttribs, _, _, ExplicitTyparInfo(_, declaredTypars, _), nameToPrelimValSchemeMap, rhsExpr, _, _, m, _, _, _, _), tpenv) = let explicitTyparInfo, tpenv = TcNonrecBindingTyparDecls cenv env tpenv bind TcNormalizedBinding ObjectExpressionOverrideBinding cenv env tpenv bindingTy None NoSafeInitInfo ([], explicitTyparInfo) bind - // 4c. generalize the binding - only relevant when implementing a generic virtual method - - match NameMap.range nameToPrelimValSchemeMap with - | [PrelimValScheme1(id, _, _, _, _, _, _, _, _, _, _)] -> + // 4c. generalize the binding - only relevant when implementing a generic virtual method + + match NameMap.range nameToPrelimValSchemeMap with + | [PrelimValScheme1(id, _, _, _, _, _, _, _, _, _, _)] -> let denv = env.DisplayEnv - let declaredTypars = + let declaredTypars = match absSlotInfo with - | Some(typarsFromAbsSlotAreRigid, typarsFromAbsSlot, _) -> + | Some(typarsFromAbsSlotAreRigid, typarsFromAbsSlot, _) -> if typarsFromAbsSlotAreRigid then typarsFromAbsSlot else declaredTypars - | _ -> + | _ -> declaredTypars - // Canonicalize constraints prior to generalization + // Canonicalize constraints prior to generalization ConstraintSolver.CanonicalizePartialInferenceProblem cenv.css denv m declaredTypars let freeInEnv = GeneralizationHelpers.ComputeUngeneralizableTypars env @@ -6333,66 +6361,66 @@ and TcObjectExprBinding cenv (env: TcEnv) implty tpenv (absSlotInfo, bind) = 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 + let generalizedTypars = PlaceTyparsInDeclarationOrder declaredTypars generalizedTypars (id, memberFlags, (generalizedTypars +-> bindingTy), bindingAttribs, rhsExpr), tpenv - | _ -> + | _ -> error(Error(FSComp.SR.tcSimpleMethodNameRequired(), m)) - + and ComputeObjectExprOverrides cenv (env: TcEnv) tpenv impls = // Compute the method sets each implemented type needs to implement let slotImplSets = DispatchSlotChecking.GetSlotImplSets cenv.infoReader env.DisplayEnv env.AccessRights true (impls |> List.map (fun (m, ty, _) -> ty, m)) - let allImpls = - (impls, slotImplSets) ||> List.map2 (fun (m, ty, binds) implTySet -> + let allImpls = + (impls, slotImplSets) ||> List.map2 (fun (m, ty, binds) implTySet -> let binds = binds |> List.map (BindingNormalization.NormalizeBinding ObjExprBinding cenv env) - m, ty, binds, implTySet) + m, ty, binds, implTySet) - let overridesAndVirts, tpenv = + let overridesAndVirts, tpenv = (tpenv, allImpls) ||> List.mapFold (fun tpenv (m, implty, binds, SlotImplSet(reqdSlots, dispatchSlotsKeyed, availPriorOverrides, _) ) -> - + // Generate extra bindings fo object expressions with bindings using the CLIEvent attribute - let binds, bindsAttributes = + let binds, bindsAttributes = [ for binding in binds do let (NormalizedBinding(_, _, _, _, bindingSynAttribs, _, _, valSynData, _, _, _, _)) = binding - let (SynValData(memberFlagsOpt, _, _)) = valSynData + let (SynValData(memberFlagsOpt, _, _)) = valSynData let attrTgt = DeclKind.AllowedAttribTargets memberFlagsOpt ObjectExpressionOverrideBinding let bindingAttribs = TcAttributes cenv env attrTgt bindingSynAttribs yield binding, bindingAttribs for extraBinding in EventDeclarationNormalization.GenerateExtraBindings cenv (bindingAttribs, binding) do yield extraBinding, [] ] |> List.unzip - - // 2. collect all name/arity of all overrides + + // 2. collect all name/arity of all overrides let dispatchSlots = reqdSlots |> List.map (fun reqdSlot -> reqdSlot.MethodInfo) - let virtNameAndArityPairs = dispatchSlots |> List.map (fun virt -> - let vkey = (virt.LogicalName, virt.NumArgs) + let virtNameAndArityPairs = dispatchSlots |> List.map (fun virt -> + let vkey = (virt.LogicalName, virt.NumArgs) //dprintfn "vkey = %A" vkey - (vkey, virt)) - let bindNameAndSynInfoPairs = binds |> List.map (GetNameAndArityOfObjExprBinding cenv env) + (vkey, virt)) + let bindNameAndSynInfoPairs = binds |> List.map (GetNameAndArityOfObjExprBinding cenv env) let bindNames = bindNameAndSynInfoPairs |> List.map fst - let bindKeys = - bindNameAndSynInfoPairs |> List.map (fun (name, valSynData) -> + let bindKeys = + bindNameAndSynInfoPairs |> List.map (fun (name, valSynData) -> // Compute the argument counts of the member arguments let argCounts = (SynInfo.AritiesOfArgs valSynData).Tail //dprintfn "name = %A, argCounts = %A" name argCounts (name, argCounts)) - // 3. infer must-have types by name/arity - let preAssignedVirtsPerBinding = - bindKeys |> List.map (fun bkey -> List.filter (fst >> (=) bkey) virtNameAndArityPairs) + // 3. infer must-have types by name/arity + let preAssignedVirtsPerBinding = + bindKeys |> List.map (fun bkey -> List.filter (fst >> (=) bkey) virtNameAndArityPairs) - let absSlotInfo = - (List.zip4 binds bindsAttributes bindNames preAssignedVirtsPerBinding) + let absSlotInfo = + (List.zip4 binds bindsAttributes bindNames preAssignedVirtsPerBinding) |> List.map (FreshenObjExprAbstractSlot cenv env implty virtNameAndArityPairs) - // 4. typecheck/typeinfer/generalizer overrides using this information + // 4. typecheck/typeinfer/generalizer overrides using this information let overrides, tpenv = (tpenv, List.zip absSlotInfo binds) ||> List.mapFold (TcObjectExprBinding cenv env implty) - // Convert the syntactic info to actual info - let overrides = - (overrides, bindNameAndSynInfoPairs) ||> List.map2 (fun (id: Ident, memberFlags, ty, bindingAttribs, bindingBody) (_, valSynData) -> + // Convert the syntactic info to actual info + let overrides = + (overrides, bindNameAndSynInfoPairs) ||> List.map2 (fun (id: Ident, memberFlags, ty, bindingAttribs, bindingBody) (_, valSynData) -> let partialValInfo = TranslateTopValSynInfo id.idRange (TcAttributes cenv env) valSynData let tps, _ = tryDestForallTy cenv.g ty let valInfo = TranslatePartialArity tps partialValInfo @@ -6402,18 +6430,18 @@ and ComputeObjectExprOverrides cenv (env: TcEnv) tpenv impls = overridesAndVirts, tpenv -and CheckSuperType cenv ty m = +and CheckSuperType cenv ty m = if typeEquiv cenv.g ty cenv.g.system_Value_ty || typeEquiv cenv.g ty cenv.g.system_Enum_ty || typeEquiv cenv.g ty cenv.g.system_Array_ty || typeEquiv cenv.g ty cenv.g.system_MulticastDelegate_ty || - typeEquiv cenv.g ty cenv.g.system_Delegate_ty then + typeEquiv cenv.g ty cenv.g.system_Delegate_ty then error(Error(FSComp.SR.tcPredefinedTypeCannotBeUsedAsSuperType(), m)) if isErasedType cenv.g ty then errorR(Error(FSComp.SR.tcCannotInheritFromErasedType(), m)) - - -and TcObjectExpr cenv overallTy env tpenv (synObjTy, argopt, binds, extraImpls, mNewExpr, mWholeExpr) = + + +and TcObjectExpr cenv overallTy env tpenv (synObjTy, argopt, binds, extraImpls, mNewExpr, mWholeExpr) = let mObjTy = synObjTy.Range let objTy, tpenv = TcType cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv synObjTy @@ -6422,41 +6450,41 @@ and TcObjectExpr cenv overallTy env tpenv (synObjTy, argopt, binds, extraImpls, | ValueSome tcref -> let isRecordTy = tcref.IsRecordTycon if not isRecordTy && not (isInterfaceTy cenv.g objTy) && isSealedTy cenv.g objTy then errorR(Error(FSComp.SR.tcCannotCreateExtensionOfSealedType(), mNewExpr)) - - CheckSuperType cenv objTy synObjTy.Range - // Add the object type to the ungeneralizable items - let env = {env with eUngeneralizableItems = addFreeItemOfTy objTy env.eUngeneralizableItems } - - // Object expression members can access protected members of the implemented type + CheckSuperType cenv objTy synObjTy.Range + + // Add the object type to the ungeneralizable items + let env = {env with eUngeneralizableItems = addFreeItemOfTy objTy env.eUngeneralizableItems } + + // Object expression members can access protected members of the implemented type let env = EnterFamilyRegion tcref env let ad = env.AccessRights - + if // record construction ? - isRecordTy || + isRecordTy || // object construction? - (isFSharpObjModelTy cenv.g objTy && not (isInterfaceTy cenv.g objTy) && argopt.IsNone) then + (isFSharpObjModelTy cenv.g objTy && not (isInterfaceTy cenv.g objTy) && argopt.IsNone) then if argopt.IsSome then error(Error(FSComp.SR.tcNoArgumentsForRecordValue(), mWholeExpr)) if not (isNil extraImpls) then error(Error(FSComp.SR.tcNoInterfaceImplementationForConstructionExpression(), mNewExpr)) - if isFSharpObjModelTy cenv.g objTy && GetCtorShapeCounter env <> 1 then + if isFSharpObjModelTy cenv.g objTy && GetCtorShapeCounter env <> 1 then error(Error(FSComp.SR.tcObjectConstructionCanOnlyBeUsedInClassTypes(), mNewExpr)) - let fldsList = - binds |> List.map (fun b -> - match BindingNormalization.NormalizeBinding ObjExprBinding cenv env b with - | NormalizedBinding (_, _, _, _, [], _, _, _, SynPat.Named(SynPat.Wild _, id, _, _, _), NormalizedBindingRhs(_, _, rhsExpr), _, _) -> id.idText, rhsExpr - | _ -> error(Error(FSComp.SR.tcOnlySimpleBindingsCanBeUsedInConstructionExpressions(), b.RangeOfBindingSansRhs))) - + let fldsList = + binds |> List.map (fun b -> + match BindingNormalization.NormalizeBinding ObjExprBinding cenv env b with + | NormalizedBinding (_, _, _, _, [], _, _, _, SynPat.Named(id, _, _, _), NormalizedBindingRhs(_, _, rhsExpr), _, _) -> id.idText, rhsExpr + | _ -> error(Error(FSComp.SR.tcOnlySimpleBindingsCanBeUsedInConstructionExpressions(), b.RangeOfBindingWithoutRhs))) + TcRecordConstruction cenv overallTy env tpenv None objTy fldsList mWholeExpr else let item = ForceRaise (ResolveObjectConstructor cenv.nameResolver env.DisplayEnv mObjTy ad objTy) - if isFSharpObjModelTy cenv.g objTy && GetCtorShapeCounter env = 1 then + if isFSharpObjModelTy cenv.g objTy && GetCtorShapeCounter env = 1 then error(Error(FSComp.SR.tcObjectsMustBeInitializedWithObjectExpression(), mNewExpr)) - // Work out the type of any interfaces to implement - let extraImpls, tpenv = - (tpenv, extraImpls) ||> List.mapFold (fun tpenv (InterfaceImpl(synIntfTy, overrides, m)) -> + // Work out the type of any interfaces to implement + let extraImpls, tpenv = + (tpenv, extraImpls) ||> List.mapFold (fun tpenv (SynInterfaceImpl(synIntfTy, overrides, m)) -> let intfTy, tpenv = TcType cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv synIntfTy if not (isInterfaceTy cenv.g intfTy) then error(Error(FSComp.SR.tcExpectedInterfaceType(), m)) @@ -6468,74 +6496,70 @@ and TcObjectExpr cenv overallTy env tpenv (synObjTy, argopt, binds, extraImpls, UnifyTypes cenv env mWholeExpr overallTy realObjTy let ctorCall, baseIdOpt, tpenv = - match item, argopt with - | Item.CtorGroup(methodName, minfos), Some (arg, baseIdOpt) -> - let meths = minfos |> List.map (fun minfo -> minfo, None) + match item, argopt with + | Item.CtorGroup(methodName, minfos), Some (arg, baseIdOpt) -> + let meths = minfos |> List.map (fun minfo -> minfo, None) let afterResolution = ForNewConstructors cenv.tcSink env synObjTy.Range methodName minfos let ad = env.AccessRights - let expr, tpenv = TcMethodApplicationThen cenv env objTy None tpenv None [] mWholeExpr mObjTy methodName ad PossiblyMutates false meths afterResolution CtorValUsedAsSuperInit [arg] ExprAtomicFlag.Atomic [] + let expr, tpenv = TcMethodApplicationThen cenv env objTy None tpenv None [] mWholeExpr mObjTy methodName ad PossiblyMutates false meths afterResolution CtorValUsedAsSuperInit [arg] ExprAtomicFlag.Atomic [] // The 'base' value is always bound let baseIdOpt = (match baseIdOpt with None -> Some(ident("base", mObjTy)) | Some id -> Some id) expr, baseIdOpt, tpenv - | Item.FakeInterfaceCtor intfTy, None -> + | Item.FakeInterfaceCtor intfTy, None -> UnifyTypes cenv env mWholeExpr objTy intfTy let expr = BuildObjCtorCall cenv.g mWholeExpr expr, None, tpenv - | Item.FakeInterfaceCtor _, Some _ -> + | Item.FakeInterfaceCtor _, Some _ -> error(Error(FSComp.SR.tcConstructorForInterfacesDoNotTakeArguments(), mNewExpr)) - | Item.CtorGroup _, None -> + | Item.CtorGroup _, None -> error(Error(FSComp.SR.tcConstructorRequiresArguments(), mNewExpr)) | _ -> error(Error(FSComp.SR.tcNewRequiresObjectConstructor(), mNewExpr)) let baseValOpt = MakeAndPublishBaseVal cenv env baseIdOpt objTy - let env = Option.foldBack (AddLocalVal cenv.tcSink mNewExpr) baseValOpt env - - + let env = Option.foldBack (AddLocalVal cenv.g cenv.tcSink mNewExpr) baseValOpt env let impls = (mWholeExpr, objTy, binds) :: extraImpls - - - // 1. collect all the relevant abstract slots for each type we have to implement - + + // 1. collect all the relevant abstract slots for each type we have to implement + let overridesAndVirts, tpenv = ComputeObjectExprOverrides cenv env tpenv impls - - overridesAndVirts |> List.iter (fun (m, implty, dispatchSlots, dispatchSlotsKeyed, availPriorOverrides, overrides) -> + overridesAndVirts |> List.iter (fun (m, implty, dispatchSlots, dispatchSlotsKeyed, availPriorOverrides, overrides) -> let overrideSpecs = overrides |> List.map fst - DispatchSlotChecking.CheckOverridesAreAllUsedOnce (env.DisplayEnv, cenv.g, cenv.amap, true, implty, dispatchSlotsKeyed, availPriorOverrides, overrideSpecs) + DispatchSlotChecking.CheckOverridesAreAllUsedOnce (env.DisplayEnv, cenv.g, cenv.infoReader, true, implty, dispatchSlotsKeyed, availPriorOverrides, overrideSpecs) DispatchSlotChecking.CheckDispatchSlotsAreImplemented (env.DisplayEnv, cenv.infoReader, m, env.NameEnv, cenv.tcSink, false, implty, dispatchSlots, availPriorOverrides, overrideSpecs) |> ignore) - - // 6c. create the specs of overrides - let allTypeImpls = - overridesAndVirts |> List.map (fun (m, implty, _, dispatchSlotsKeyed, _, overrides) -> - let overrides' = - [ for overrideMeth in overrides do + + // 6c. create the specs of overrides + let allTypeImpls = + overridesAndVirts |> List.map (fun (m, implty, _, dispatchSlotsKeyed, _, overrides) -> + let overrides' = + [ for overrideMeth in overrides do let (Override(_, _, id, (mtps, _), _, _, isFakeEventProperty, _) as ovinfo), (_, thisVal, methodVars, bindingAttribs, bindingBody) = overrideMeth - if not isFakeEventProperty then - let searchForOverride = - dispatchSlotsKeyed - |> NameMultiMap.find id.idText - |> List.tryPick (fun reqdSlot -> + if not isFakeEventProperty then + let searchForOverride = + dispatchSlotsKeyed + |> NameMultiMap.find id.idText + |> List.tryPick (fun reqdSlot -> let virt = reqdSlot.MethodInfo - if DispatchSlotChecking.IsExactMatch cenv.g cenv.amap m virt ovinfo then - Some virt - else + if DispatchSlotChecking.IsExactMatch cenv.g cenv.amap m virt ovinfo then + Some virt + else None) - let overridden = - match searchForOverride with + let overridden = + match searchForOverride with | Some x -> x | None -> error(Error(FSComp.SR.tcAtLeastOneOverrideIsInvalid(), synObjTy.Range)) yield TObjExprMethod(overridden.GetSlotSig(cenv.amap, m), bindingAttribs, mtps, [thisVal] :: methodVars, bindingBody, id.idRange) ] (implty, overrides')) - + let (objTy', overrides') = allTypeImpls.Head let extraImpls = allTypeImpls.Tail - - // 7. Build the implementation + + // 7. Build the implementation let expr = mkObjExpr(objTy', baseValOpt, ctorCall, overrides', extraImpls, mWholeExpr) let expr = mkCoerceIfNeeded cenv.g realObjTy objTy' expr expr, tpenv @@ -6544,14 +6568,14 @@ and TcObjectExpr cenv overallTy env tpenv (synObjTy, argopt, binds, extraImpls, //------------------------------------------------------------------------- // TcConstStringExpr -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -/// Check a constant string expression. It might be a 'printf' format string +/// Check a constant string expression. It might be a 'printf' format string and TcConstStringExpr cenv overallTy env m tpenv s = - if (AddCxTypeEqualsTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy cenv.g.string_ty) then + if (AddCxTypeEqualsTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy cenv.g.string_ty) then mkString cenv.g m s, tpenv - else + else TcFormatStringExpr cenv overallTy env m tpenv s and TcFormatStringExpr cenv overallTy env m tpenv (fmtString: string) = @@ -6567,26 +6591,26 @@ and TcFormatStringExpr cenv overallTy env m tpenv (fmtString: string) = let ok = not (isObjTy g overallTy) && AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy formatTy if ok then - // Parse the format string to work out the phantom types + // Parse the format string to work out the phantom types let formatStringCheckContext = match cenv.tcSink.CurrentSink with None -> None | Some sink -> sink.FormatStringCheckContext let normalizedString = (fmtString.Replace("\r\n", "\n").Replace("\r", "\n")) - + let _argTys, atyRequired, etyRequired, _percentATys, specifierLocations, _dotnetFormatString = try CheckFormatStrings.ParseFormatString m [m] g false false formatStringCheckContext normalizedString bty cty dty with Failure errString -> error (Error(FSComp.SR.tcUnableToParseFormatString errString, m)) - match cenv.tcSink.CurrentSink with - | None -> () - | Some sink -> + match cenv.tcSink.CurrentSink with + | None -> () + | Some sink -> for specifierLocation, numArgs in specifierLocations do sink.NotifyFormatSpecifierLocation(specifierLocation, numArgs) UnifyTypes cenv env m aty atyRequired UnifyTypes cenv env m ety etyRequired let fmtExpr = mkCallNewFormat g m aty bty cty dty ety (mkString g m fmtString) - fmtExpr, tpenv + fmtExpr, tpenv - else + else UnifyTypes cenv env m overallTy g.string_ty mkString g m fmtString, tpenv @@ -6595,17 +6619,17 @@ and TcInterpolatedStringExpr cenv overallTy env m tpenv (parts: SynInterpolatedS let g = cenv.g let synFillExprs = - parts + parts |> List.choose (function | SynInterpolatedStringPart.String _ -> None | SynInterpolatedStringPart.FillExpr (fillExpr, _) -> - match fillExpr with + match fillExpr with // Detect "x" part of "...{x,3}..." | SynExpr.Tuple (false, [e; SynExpr.Const (SynConst.Int32 _align, _)], _, _) -> Some e | e -> Some e) let stringFragmentRanges = - parts + parts |> List.choose (function | SynInterpolatedStringPart.String (_,m) -> Some m | SynInterpolatedStringPart.FillExpr _ -> None) @@ -6623,9 +6647,9 @@ and TcInterpolatedStringExpr cenv overallTy env m tpenv (parts: SynInterpolatedS | [ctorInfo] -> ctorInfo | _ -> languageFeatureNotSupportedInLibraryError cenv.g.langVersion LanguageFeature.StringInterpolation m - let stringKind = + let stringKind = // If this is an interpolated string then try to force the result to be a string - if (AddCxTypeEqualsTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy g.string_ty) then + if (AddCxTypeEqualsTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy g.string_ty) then // And if that succeeds, the result of printing is a string UnifyTypes cenv env m printerArgTy g.unit_ty @@ -6633,14 +6657,14 @@ and TcInterpolatedStringExpr cenv overallTy env m tpenv (parts: SynInterpolatedS UnifyTypes cenv env m printerResultTy overallTy // And if that succeeds, the printerTy and printerResultTy must be the same (there are no curried arguments) - UnifyTypes cenv env m printerTy printerResultTy + UnifyTypes cenv env m printerTy printerResultTy Choice1Of2 (true, newFormatMethod) // ... or if that fails then may be a FormattableString by a type-directed rule.... - elif (not (isObjTy g overallTy) && - ((g.system_FormattableString_tcref.CanDeref && AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy g.system_FormattableString_ty) - || (g.system_IFormattable_tcref.CanDeref && AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy g.system_IFormattable_ty))) then + elif (not (isObjTy g overallTy) && + ((g.system_FormattableString_tcref.CanDeref && AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy g.system_FormattableString_ty) + || (g.system_IFormattable_tcref.CanDeref && AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy g.system_IFormattable_ty))) then // And if that succeeds, the result of printing is a string UnifyTypes cenv env m printerArgTy g.unit_ty @@ -6649,20 +6673,20 @@ and TcInterpolatedStringExpr cenv overallTy env m tpenv (parts: SynInterpolatedS // Find the FormattableStringFactor.Create method in the .NET libraries let ad = env.eAccessRights - let createMethodOpt = - match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AllResults cenv env m ad "Create" g.system_FormattableStringFactory_ty with - | [x] -> Some x + let createMethodOpt = + match TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AllResults cenv env m ad "Create" g.system_FormattableStringFactory_ty with + | [x] -> Some x | _ -> None - match createMethodOpt with + match createMethodOpt with | Some createMethod -> Choice2Of2 createMethod | None -> languageFeatureNotSupportedInLibraryError cenv.g.langVersion LanguageFeature.StringInterpolation m // ... or if that fails then may be a PrintfFormat by a type-directed rule.... - elif not (isObjTy g overallTy) && AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy formatTy then + elif not (isObjTy g overallTy) && AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy formatTy then // And if that succeeds, the printerTy and printerResultTy must be the same (there are no curried arguments) - UnifyTypes cenv env m printerTy printerResultTy + UnifyTypes cenv env m printerTy printerResultTy Choice1Of2 (false, newFormatMethod) else @@ -6673,16 +6697,16 @@ and TcInterpolatedStringExpr cenv overallTy env m tpenv (parts: SynInterpolatedS let isFormattableString = (match stringKind with Choice2Of2 _ -> true | _ -> false) // The format string used for checking in CheckFormatStrings. This replaces interpolation holes with %P - let printfFormatString = + let printfFormatString = parts - |> List.map (function + |> List.map (function | SynInterpolatedStringPart.String (s, _) -> s - | SynInterpolatedStringPart.FillExpr (fillExpr, format) -> - let alignText = - match fillExpr with + | SynInterpolatedStringPart.FillExpr (fillExpr, format) -> + let alignText = + match fillExpr with // Validate and detect ",3" part of "...{x,3}..." - | SynExpr.Tuple (false, args, _, _) -> - match args with + | SynExpr.Tuple (false, args, _, _) -> + match args with | [_; SynExpr.Const (SynConst.Int32 align, _)] -> string align | _ -> errorR(Error(FSComp.SR.tcInvalidAlignmentInInterpolatedString(), m)); "" | _ -> "" @@ -6695,36 +6719,36 @@ and TcInterpolatedStringExpr cenv overallTy env m tpenv (parts: SynInterpolatedS // If FormatStringCheckContext is set (i.e. we are doing foreground checking in the IDE) // then we check the string twice, once to collect % positions and once to get errors. // The process of getting % positions doesn't process the string in a semantically accurate way - // (but is enough to report % locations correctly), as it fetched the pieces from the + // (but is enough to report % locations correctly), as it fetched the pieces from the // original source and this may include some additional characters, // and also doesn't raise all necessary errors match cenv.tcSink.CurrentSink with - | Some sink when sink.FormatStringCheckContext.IsSome -> - try + | Some sink when sink.FormatStringCheckContext.IsSome -> + try let _argTys, _printerTy, _printerTupleTyRequired, _percentATys, specifierLocations, _dotnetFormatString = CheckFormatStrings.ParseFormatString m stringFragmentRanges g true isFormattableString sink.FormatStringCheckContext printfFormatString printerArgTy printerResidueTy printerResultTy for specifierLocation, numArgs in specifierLocations do sink.NotifyFormatSpecifierLocation(specifierLocation, numArgs) - with _err-> + with _err-> () | _ -> () let argTys, _printerTy, printerTupleTyRequired, percentATys, _specifierLocations, dotnetFormatString = - try + try CheckFormatStrings.ParseFormatString m stringFragmentRanges g true isFormattableString None printfFormatString printerArgTy printerResidueTy printerResultTy - with Failure errString -> + with Failure errString -> error (Error(FSComp.SR.tcUnableToParseInterpolatedString errString, m)) // Check the expressions filling the holes - if argTys.Length <> synFillExprs.Length then + if argTys.Length <> synFillExprs.Length then error (Error(FSComp.SR.tcInterpolationMixedWithPercent(), m)) - match stringKind with + match stringKind with // The case for $"..." used as type string and $"...%d{x}..." used as type PrintfFormat - create a PrintfFormat that captures // is arguments - | Choice1Of2 (isString, newFormatMethod) -> - + | Choice1Of2 (isString, newFormatMethod) -> + UnifyTypes cenv env m printerTupleTy printerTupleTyRequired // Type check the expressions filling the holes @@ -6734,23 +6758,23 @@ and TcInterpolatedStringExpr cenv overallTy env m tpenv (parts: SynInterpolatedS let fillExprsBoxed = (argTys, fillExprs) ||> List.map2 (mkCallBox g m) let argsExpr = mkArray (g.obj_ty, fillExprsBoxed, m) - let percentATysExpr = + let percentATysExpr = if percentATys.Length = 0 then mkNull m (mkArrayType g g.system_Type_ty) - else + else let tyExprs = percentATys |> Array.map (mkCallTypeOf g m) |> Array.toList mkArray (g.system_Type_ty, tyExprs, m) let fmtExpr = MakeMethInfoCall cenv.amap m newFormatMethod [] [mkString g m printfFormatString; argsExpr; percentATysExpr] - if isString then + if isString then // Make the call to sprintf mkCall_sprintf g m printerTy fmtExpr [], tpenv else - fmtExpr, tpenv + fmtExpr, tpenv // The case for $"..." used as type FormattableString or IFormattable - | Choice2Of2 createFormattableStringMethod -> + | Choice2Of2 createFormattableStringMethod -> // Type check the expressions filling the holes let flexes = argTys |> List.map (fun _ -> false) @@ -6762,9 +6786,9 @@ and TcInterpolatedStringExpr cenv overallTy env m tpenv (parts: SynInterpolatedS let argsExpr = mkArray (g.obj_ty, fillExprsBoxed, m) // FormattableString are *always* turned into FormattableStringFactory.Create calls, boxing each argument - let createExpr, _ = BuildPossiblyConditionalMethodCall cenv env NeverMutates m false createFormattableStringMethod NormalValUse [] [dotnetFormatStringExpr; argsExpr] [] + let createExpr, _ = BuildPossiblyConditionalMethodCall cenv env NeverMutates m false createFormattableStringMethod NormalValUse [] [dotnetFormatStringExpr; argsExpr] [] - let resultExpr = + let resultExpr = if typeEquiv g overallTy g.system_IFormattable_ty then mkCoerceIfNeeded g g.system_IFormattable_ty g.system_FormattableString_ty createExpr else @@ -6773,44 +6797,44 @@ and TcInterpolatedStringExpr cenv overallTy env m tpenv (parts: SynInterpolatedS //------------------------------------------------------------------------- // TcConstExpr -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -/// Check a constant expression. +/// Check a constant expression. and TcConstExpr cenv overallTy env m tpenv c = - match c with + match c with - // NOTE: these aren't "really" constants - | SynConst.Bytes (bytes, m) -> - UnifyTypes cenv env m overallTy (mkByteArrayTy cenv.g) + // NOTE: these aren't "really" constants + | SynConst.Bytes (bytes, _, m) -> + UnifyTypes cenv env m overallTy (mkByteArrayTy cenv.g) Expr.Op (TOp.Bytes bytes, [], [], m), tpenv - | SynConst.UInt16s arr -> + | SynConst.UInt16s arr -> UnifyTypes cenv env m overallTy (mkArrayType cenv.g cenv.g.uint16_ty); Expr.Op (TOp.UInt16s arr, [], [], m), tpenv - | SynConst.UserNum (s, suffix) -> - let expr = + | SynConst.UserNum (s, suffix) -> + let expr = let modName = "NumericLiteral" + suffix let ad = env.eAccessRights - match ResolveLongIdentAsModuleOrNamespace cenv.tcSink ResultCollectionSettings.AtMostOneResult cenv.amap m true OpenQualified env.eNameResEnv ad (ident (modName, m)) [] false with + match ResolveLongIdentAsModuleOrNamespace cenv.tcSink ResultCollectionSettings.AtMostOneResult cenv.amap m true OpenQualified env.eNameResEnv ad (ident (modName, m)) [] false with | Result [] | Exception _ -> error(Error(FSComp.SR.tcNumericLiteralRequiresModule modName, m)) - | Result ((_, mref, _) :: _) -> - let expr = - try + | Result ((_, mref, _) :: _) -> + let expr = + try match int32 s with | 0 -> SynExpr.App (ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromZero", SynExpr.Const (SynConst.Unit, m), m) | 1 -> SynExpr.App (ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromOne", SynExpr.Const (SynConst.Unit, m), m) | i32 -> SynExpr.App (ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromInt32", SynExpr.Const (SynConst.Int32 i32, m), m) - with _ -> - try - let i64 = int64 s + with _ -> + try + let i64 = int64 s SynExpr.App (ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromInt64", SynExpr.Const (SynConst.Int64 i64, m), m) - with _ -> - SynExpr.App (ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromString", SynExpr.Const (SynConst.String (s, m), m), m) - + with _ -> + SynExpr.App (ExprAtomicFlag.Atomic, false, mkSynLidGet m [modName] "FromString", SynExpr.Const (SynConst.String (s, SynStringKind.Regular, m), m), m) + if suffix <> "I" then expr - else + else match ccuOfTyconRef mref with | Some ccu when ccuEq ccu cenv.g.fslibCcu -> SynExpr.Typed (expr, SynType.LongIdent(LongIdentWithDots(pathToSynLid m ["System";"Numerics";"BigInteger"], [])), m) @@ -6819,20 +6843,20 @@ and TcConstExpr cenv overallTy env m tpenv c = TcExpr cenv overallTy env tpenv expr - | _ -> + | _ -> let c' = TcConst cenv overallTy m env c Expr.Const (c', m, overallTy), tpenv //------------------------------------------------------------------------- // TcAssertExpr -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -// Check an 'assert x' expression. +// Check an 'assert x' expression. and TcAssertExpr cenv overallTy env (m: range) tpenv x = let synm = m.MakeSynthetic() // Mark as synthetic so the language service won't pick it up. - let callDiagnosticsExpr = SynExpr.App (ExprAtomicFlag.Atomic, false, mkSynLidGet synm ["System";"Diagnostics";"Debug"] "Assert", - // wrap an extra parentheses so 'assert(x=1) isn't considered a named argument to a method call + let callDiagnosticsExpr = SynExpr.App (ExprAtomicFlag.Atomic, false, mkSynLidGet synm ["System";"Diagnostics";"Debug"] "Assert", + // wrap an extra parentheses so 'assert(x=1) isn't considered a named argument to a method call SynExpr.Paren (x, range0, None, synm), synm) TcExpr cenv overallTy env tpenv callDiagnosticsExpr @@ -6840,23 +6864,23 @@ and TcAssertExpr cenv overallTy env (m: range) tpenv x = and TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr) = - let requiresCtor = (GetCtorShapeCounter env = 1) // Get special expression forms for constructors + let requiresCtor = (GetCtorShapeCounter env = 1) // Get special expression forms for constructors let haveCtor = Option.isSome inherits - let optOrigExpr, tpenv = - match optOrigExpr with - | None -> None, tpenv - | Some (origExpr, _) -> - match inherits with + let optOrigExpr, tpenv = + match optOrigExpr with + | None -> None, tpenv + | Some (origExpr, _) -> + match inherits with | Some (_, _, mInherits, _, _) -> error(Error(FSComp.SR.tcInvalidRecordConstruction(), mInherits)) - | None -> + | None -> let olde, tpenv = TcExpr cenv overallTy env tpenv origExpr Some (olde), tpenv let hasOrigExpr = optOrigExpr.IsSome - let fldsList = - let flds = + let fldsList = + let flds = [ // if we met at least one field that is not syntactically correct - raise ReportedError to transfer control to the recovery routine for ((lidwd, isOk), v, _) in flds do @@ -6867,8 +6891,8 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr yield (List.frontAndBack lidwd.Lid, v) ] - - match flds with + + match flds with | [] -> [] | _ -> let tinst, tcref, _, fldsList = BuildFieldMap cenv env hasOrigExpr overallTy flds mWholeExpr @@ -6887,43 +6911,43 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr let oldvaddr, oldvaddre = mkCompGenLocal mWholeExpr "inputRecord" (if isStructTy cenv.g overallTy then mkByrefTy cenv.g overallTy else overallTy) Some(olde, oldvaddr, oldvaddre) - if hasOrigExpr && not (isRecdTy cenv.g overallTy) then + if hasOrigExpr && not (isRecdTy cenv.g overallTy) then errorR(Error(FSComp.SR.tcExpressionFormRequiresRecordTypes(), mWholeExpr)) - if requiresCtor || haveCtor then - if not (isFSharpObjModelTy cenv.g overallTy) then + if requiresCtor || haveCtor then + if not (isFSharpObjModelTy cenv.g overallTy) then // Deliberate no-recovery failure here to prevent cascading internal errors error(Error(FSComp.SR.tcInheritedTypeIsNotObjectModelType(), mWholeExpr)) - if not requiresCtor then + if not requiresCtor then errorR(Error(FSComp.SR.tcObjectConstructionExpressionCanOnlyImplementConstructorsInObjectModelTypes(), mWholeExpr)) else - if isNil flds then + if isNil flds then let errorInfo = if hasOrigExpr then FSComp.SR.tcEmptyCopyAndUpdateRecordInvalid() else FSComp.SR.tcEmptyRecordInvalid() error(Error(errorInfo, mWholeExpr)) if isFSharpObjModelTy cenv.g overallTy then errorR(Error(FSComp.SR.tcTypeIsNotARecordTypeNeedConstructor(), mWholeExpr)) elif not (isRecdTy cenv.g overallTy) then errorR(Error(FSComp.SR.tcTypeIsNotARecordType(), mWholeExpr)) - let superTy, tpenv = - match inherits, GetSuperTypeOfType cenv.g cenv.amap mWholeExpr overallTy with + let superTy, tpenv = + match inherits, GetSuperTypeOfType cenv.g cenv.amap mWholeExpr overallTy with | Some (superTy, arg, m, _, _), Some realSuperTy -> - // Constructor expression, with an explicit 'inheritedTys clause. Check the inherits clause. + // Constructor expression, with an explicit 'inheritedTys clause. Check the inherits clause. let e, tpenv = TcExpr cenv realSuperTy env tpenv (SynExpr.New (true, superTy, arg, m)) Some e, tpenv - | None, Some realSuperTy when requiresCtor -> - // Constructor expression, No 'inherited' clause, hence look for a default constructor + | None, Some realSuperTy when requiresCtor -> + // Constructor expression, No 'inherited' clause, hence look for a default constructor let e, tpenv = TcNewExpr cenv env tpenv realSuperTy None true (SynExpr.Const (SynConst.Unit, mWholeExpr)) mWholeExpr Some e, tpenv - | None, _ -> + | None, _ -> None, tpenv - | _, None -> + | _, None -> errorR(InternalError("Unexpected failure in getting super type", mWholeExpr)) None, tpenv let expr, tpenv = TcRecordConstruction cenv overallTy env tpenv optOrigExprInfo overallTy fldsList mWholeExpr - let expr = - match superTy with + let expr = + match superTy with | _ when isStructTy cenv.g overallTy -> expr | Some e -> mkCompGenSequential mWholeExpr e expr | None -> expr @@ -6934,8 +6958,8 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, optOrigExpr, flds, mWholeExpr and TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigSynExpr, unsortedFieldIdsAndSynExprsGiven, mWholeExpr) = let unsortedFieldSynExprsGiven = List.map snd unsortedFieldIdsAndSynExprsGiven - match optOrigSynExpr with - | None -> + match optOrigSynExpr with + | None -> let unsortedFieldIds = unsortedFieldIdsAndSynExprsGiven |> List.map fst |> List.toArray let anonInfo, sortedFieldTys = UnifyAnonRecdTypeAndInferCharacteristics env.eContextInfo cenv env.DisplayEnv mWholeExpr overallTy isStruct unsortedFieldIds @@ -6943,13 +6967,13 @@ and TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigSynExpr, unsortedF let sortedIndexedArgs = unsortedFieldIdsAndSynExprsGiven |> List.indexed - |> List.sortBy (fun (i,_) -> unsortedFieldIds.[i].idText) + |> List.sortBy (fun (i,_) -> unsortedFieldIds.[i].idText) // Map from sorted indexes to unsorted indexes let sigma = List.map fst sortedIndexedArgs |> List.toArray let sortedFieldExprs = List.map snd sortedIndexedArgs - sortedFieldExprs |> List.iteri (fun j (x, _) -> + sortedFieldExprs |> List.iteri (fun j (x, _) -> let item = Item.AnonRecdField(anonInfo, sortedFieldTys, j, x.idRange) CallNameResolutionSink cenv.tcSink (x.idRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.Use, env.eAccessRights)) @@ -6965,7 +6989,7 @@ and TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigSynExpr, unsortedF mkAnonRecd cenv.g mWholeExpr anonInfo unsortedFieldIds unsortedCheckedArgs unsortedFieldTys, tpenv - | Some (origExpr, _) -> + | Some (origExpr, _) -> // The fairly complex case '{| origExpr with X = 1; Y = 2 |}' // The origExpr may be either a record or anonymous record. // The origExpr may be either a struct or not. @@ -6980,13 +7004,13 @@ and TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigSynExpr, unsortedF let oldv, oldve = mkCompGenLocal mWholeExpr "inputRecord" origExprTy let mOrigExpr = origExpr.Range - if not (isAppTy cenv.g origExprTy || isAnonRecdTy cenv.g origExprTy) then + if not (isAppTy cenv.g origExprTy || isAnonRecdTy cenv.g origExprTy) then error (Error (FSComp.SR.tcCopyAndUpdateNeedsRecordType(), mOrigExpr)) - let origExprIsStruct = + let origExprIsStruct = match tryDestAnonRecdTy cenv.g origExprTy with | ValueSome (anonInfo, _) -> evalTupInfoIsStruct anonInfo.TupInfo - | ValueNone -> + | ValueNone -> let tcref, _ = destAppTy cenv.g origExprTy tcref.IsStructOrEnumTycon @@ -6995,19 +7019,19 @@ and TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigSynExpr, unsortedF // Put all the expressions in unsorted order. The new bindings come first. The origin of each is tracked using /// - Choice1Of2 for a new binding /// - Choice2Of2 for a binding coming from the original expression - let unsortedIdAndExprsAll = + let unsortedIdAndExprsAll = [| for (id, e) in unsortedFieldIdsAndSynExprsGiven do yield (id, Choice1Of2 e) match tryDestAnonRecdTy cenv.g origExprTy with - | ValueSome (anonInfo, tinst) -> - for (i, id) in Array.indexed anonInfo.SortedIds do + | ValueSome (anonInfo, tinst) -> + for (i, id) in Array.indexed anonInfo.SortedIds do yield id, Choice2Of2 (mkAnonRecdFieldGetViaExprAddr (anonInfo, oldveaddr, tinst, i, mOrigExpr)) - | ValueNone -> + | ValueNone -> match tryAppTy cenv.g origExprTy with | ValueSome(tcref, tinst) when tcref.IsRecordTycon -> let fspecs = tcref.Deref.TrueInstanceFieldsAsList for fspec in fspecs do - yield fspec.Id, Choice2Of2 (mkRecdFieldGetViaExprAddr (oldveaddr, tcref.MakeNestedRecdFieldRef fspec, tinst, mOrigExpr)) + yield fspec.Id, Choice2Of2 (mkRecdFieldGetViaExprAddr (oldveaddr, tcref.MakeNestedRecdFieldRef fspec, tinst, mOrigExpr)) | _ -> error (Error (FSComp.SR.tcCopyAndUpdateNeedsRecordType(), mOrigExpr)) |] |> Array.distinctBy (fst >> textOfId) @@ -7016,7 +7040,7 @@ and TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigSynExpr, unsortedF let anonInfo, sortedFieldTysAll = UnifyAnonRecdTypeAndInferCharacteristics env.eContextInfo cenv env.DisplayEnv mWholeExpr overallTy isStruct unsortedFieldIdsAll - let sortedIndexedFieldsAll = unsortedIdAndExprsAll |> Array.indexed |> Array.sortBy (snd >> fst >> textOfId) + let sortedIndexedFieldsAll = unsortedIdAndExprsAll |> Array.indexed |> Array.sortBy (snd >> fst >> textOfId) // map from sorted indexes to unsorted indexes let sigma = Array.map fst sortedIndexedFieldsAll @@ -7025,9 +7049,9 @@ and TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigSynExpr, unsortedF // Report _all_ identifiers to name resolution. We should likely just report the ones // that are explicit in source code. - sortedFieldsAll |> Array.iteri (fun j (x, expr) -> - match expr with - | Choice1Of2 _ -> + sortedFieldsAll |> Array.iteri (fun j (x, expr) -> + match expr with + | Choice1Of2 _ -> let item = Item.AnonRecdField(anonInfo, sortedFieldTysAll, j, x.idRange) CallNameResolutionSink cenv.tcSink (x.idRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.Use, env.eAccessRights) | Choice2Of2 _ -> ()) @@ -7054,10 +7078,10 @@ and TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigSynExpr, unsortedF unsortedIdAndExprsAll |> Array.map fst - let unsortedFieldExprs = + let unsortedFieldExprs = unsortedIdAndExprsAll - |> Array.mapi (fun unsortedIdx (_, expr) -> - match expr with + |> Array.mapi (fun unsortedIdx (_, expr) -> + match expr with | Choice1Of2 _ -> unsortedFieldExprsGiven.[unsortedIdx] | Choice2Of2 subExpr -> UnifyTypes cenv env mOrigExpr (tyOfExpr cenv.g subExpr) unsortedFieldTysAll.[unsortedIdx]; subExpr) |> List.ofArray @@ -7070,16 +7094,16 @@ and TcAnonRecdExpr cenv overallTy env tpenv (isStruct, optOrigSynExpr, unsortedF let expr = mkCompGenLet mOrigExpr oldv origExprChecked expr expr, tpenv - + and TcForEachExpr cenv overallTy env tpenv (pat, enumSynExpr, bodySynExpr, mWholeExpr, spForLoop) = let tryGetOptimizeSpanMethodsAux g m ty isReadOnlySpan = match (if isReadOnlySpan then tryDestReadOnlySpanTy g m ty else tryDestSpanTy g m ty) with | ValueSome(struct(_, destTy)) -> - match TryFindFSharpSignatureInstanceGetterProperty cenv env m "Item" ty [ g.int32_ty; (if isReadOnlySpan then mkInByrefTy g destTy else mkByrefTy g destTy) ], + match TryFindFSharpSignatureInstanceGetterProperty cenv env m "Item" ty [ g.int32_ty; (if isReadOnlySpan then mkInByrefTy g destTy else mkByrefTy g destTy) ], TryFindFSharpSignatureInstanceGetterProperty cenv env m "Length" ty [ g.int32_ty ] with - | Some(itemPropInfo), Some(lengthPropInfo) -> + | Some(itemPropInfo), Some(lengthPropInfo) -> ValueSome(struct(itemPropInfo.GetterMethod, lengthPropInfo.GetterMethod, isReadOnlySpan)) - | _ -> + | _ -> ValueNone | _ -> ValueNone @@ -7102,16 +7126,16 @@ and TcForEachExpr cenv overallTy env tpenv (pat, enumSynExpr, bodySynExpr, mWhol 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 + let enumElemTy, bodyExprFixup, overallExprFixup, iterationTechnique = + match enumExpr with - // optimize 'for i in n .. m do' - | Expr.App (Expr.Val (vf, _, _), _, [tyarg], [startExpr;finishExpr], _) - when valRefEq cenv.g vf cenv.g.range_op_vref && typeEquiv cenv.g tyarg cenv.g.int_ty -> + // optimize 'for i in n .. m do' + | Expr.App (Expr.Val (vf, _, _), _, [tyarg], [startExpr;finishExpr], _) + when valRefEq cenv.g vf cenv.g.range_op_vref && typeEquiv cenv.g tyarg cenv.g.int_ty -> (cenv.g.int32_ty, (fun _ x -> x), id, Choice1Of3 (startExpr, finishExpr)) - // optimize 'for i in arr do' - | _ when isArray1DTy cenv.g enumExprTy -> + // optimize 'for i in arr do' + | _ when isArray1DTy cenv.g enumExprTy -> let arrVar, arrExpr = mkCompGenLocal mEnumExpr "arr" enumExprTy let idxVar, idxExpr = mkCompGenLocal mPat "idx" cenv.g.int32_ty let elemTy = destArrayTy cenv.g enumExprTy @@ -7124,8 +7148,8 @@ and TcForEachExpr cenv overallTy env tpenv (pat, enumSynExpr, bodySynExpr, mWhol // Ask for a loop over integers for the given range (elemTy, bodyExprFixup, overallExprFixup, Choice2Of3 (idxVar, mkZero cenv.g mForLoopStart, mkDecr cenv.g mForLoopStart (mkLdlen cenv.g mForLoopStart arrExpr))) - - | _ -> + + | _ -> // try optimize 'for i in span do' for span or readonlyspan match tryGetOptimizeSpanMethods cenv.g mWholeExpr enumExprTy with | ValueSome(struct(getItemMethInfo, getLengthMethInfo, isReadOnlySpan)) -> @@ -7152,17 +7176,17 @@ and TcForEachExpr cenv overallTy env tpenv (pat, enumSynExpr, bodySynExpr, mWhol | _ -> let enumerableVar, enumerableExprInVar = mkCompGenLocal mEnumExpr "inputSequence" enumExprTy - let enumeratorVar, enumeratorExpr, _, enumElemTy, getEnumExpr, getEnumTy, guardExpr, _, currentExpr = + let enumeratorVar, enumeratorExpr, _, enumElemTy, getEnumExpr, getEnumTy, guardExpr, _, currentExpr = 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) - let elemVar, pat = - // nice: don't introduce awful temporary for r.h.s. in the 99% case where we know what we're binding it to + let elemVar, pat = + // nice: don't introduce awful temporary for r.h.s. in the 99% case where we know what we're binding it to match pat with - | TPat_as (pat1, PBind(v, TypeScheme([], _)), _) -> + | TPat_as (pat1, PBind(v, TypeScheme([], _)), _) -> v, pat1 - | _ -> + | _ -> let tmp, _ = mkCompGenLocal pat.Range "forLoopVar" enumElemTy tmp, pat @@ -7170,44 +7194,44 @@ and TcForEachExpr cenv overallTy env tpenv (pat, enumSynExpr, bodySynExpr, mWhol let bodyExpr, tpenv = TcStmt cenv envinner tpenv bodySynExpr // Add the pattern match compilation - let bodyExpr = + let bodyExpr = let valsDefinedByMatching = ListSet.remove valEq elemVar vspecs - CompilePatternForMatch - cenv env enumSynExpr.Range pat.Range false IgnoreWithWarning (elemVar, [], None) - [TClause(pat, None, TTarget(valsDefinedByMatching, bodyExpr, DebugPointForTarget.Yes), mForLoopStart)] - enumElemTy + CompilePatternForMatch + cenv env enumSynExpr.Range pat.Range false IgnoreWithWarning (elemVar, [], None) + [TClause(pat, None, TTarget(valsDefinedByMatching, bodyExpr, DebugPointForTarget.Yes), mForLoopStart)] + enumElemTy overallTy // Apply the fixup to bind the elemVar if needed let bodyExpr = bodyExprFixup elemVar bodyExpr - + // Build the overall loop - let overallExpr = + let overallExpr = - match iterationTechnique with + match iterationTechnique with // Build iteration as a for loop - | Choice1Of3(startExpr, finishExpr) -> + | Choice1Of3(startExpr, finishExpr) -> 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) -> + | Choice2Of3(idxVar, startExpr, finishExpr) -> 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) -> + | Choice3Of3(enumerableVar, enumeratorVar, _, getEnumExpr, _, guardExpr, currentExpr) -> // This compiled for must be matched EXACTLY by CompiledForEachExpr in opt.fs and creflect.fs mkCompGenLet mForLoopStart enumerableVar enumExpr (let cleanupE = BuildDisposableCleanup cenv env mWholeExpr enumeratorVar - let spBind = match spForLoop with DebugPointAtFor.Yes spStart -> DebugPointAtBinding spStart | DebugPointAtFor.No -> NoDebugPointAtStickyBinding + let spBind = match spForLoop with DebugPointAtFor.Yes spStart -> DebugPointAtBinding.Yes spStart | DebugPointAtFor.No -> DebugPointAtBinding.NoneAtSticky (mkLet spBind mForLoopStart enumeratorVar getEnumExpr - (mkTryFinally cenv.g - (mkWhile cenv.g - (DebugPointAtWhile.No, - WhileLoopForCompiledForEachExprMarker, guardExpr, - mkCompGenLet mForLoopStart elemVar currentExpr bodyExpr, - mForLoopStart), + (mkTryFinally cenv.g + (mkWhile cenv.g + (DebugPointAtWhile.No, + WhileLoopForCompiledForEachExprMarker, guardExpr, + mkCompGenLet mForLoopStart elemVar currentExpr bodyExpr, + mForLoopStart), cleanupE, mForLoopStart, cenv.g.unit_ty, DebugPointAtTry.No, DebugPointAtFinally.No)))) let overallExpr = overallExprFixup overallExpr @@ -7215,55 +7239,55 @@ and TcForEachExpr cenv overallTy env tpenv (pat, enumSynExpr, bodySynExpr, mWhol //------------------------------------------------------------------------- // TcQuotationExpr -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- and TcQuotationExpr cenv overallTy env tpenv (_oper, raw, ast, isFromQueryExpression, m) = let astTy = NewInferenceType () // Assert the overall type for the domain of the quotation template - UnifyTypes cenv env m overallTy (if raw then mkRawQuotedExprTy cenv.g else mkQuotedExprTy cenv.g astTy) + UnifyTypes cenv env m overallTy (if raw then mkRawQuotedExprTy cenv.g else mkQuotedExprTy cenv.g astTy) + + // Check the expression + let expr, tpenv = TcExpr cenv astTy env tpenv ast - // Check the expression - let expr, tpenv = TcExpr cenv astTy env tpenv ast - // Wrap the expression let expr = Expr.Quote (expr, ref None, isFromQueryExpression, m, overallTy) // Coerce it if needed let expr = if raw then mkCoerceExpr(expr, (mkRawQuotedExprTy cenv.g), m, (tyOfExpr cenv.g expr)) else expr - // We serialize the quoted expression to bytes in IlxGen after type inference etc. is complete. + // We serialize the quoted expression to bytes in IlxGen after type inference etc. is complete. expr, tpenv -/// When checking sequence of function applications, +/// When checking sequence of function applications, /// type applications and dot-notation projections, first extract known /// type information from the applications. /// /// 'overallTy' is the type expected for the entire chain of expr + lookups. /// 'exprty' is the type of the expression on the left of the lookup chain. /// -/// We propagate information from the expected overall type 'overallTy'. The use +/// We propagate information from the expected overall type 'overallTy'. The use /// of function application syntax unambiguously implies that 'overallTy' is a function type. -and Propagate cenv overallTy env tpenv (expr: ApplicableExpr) exprty delayed = - - let rec propagate isAddrOf delayedList mExpr exprty = - match delayedList with - | [] -> +and Propagate cenv overallTy env tpenv (expr: ApplicableExpr) exprty delayed = - if not (isNil delayed) then + let rec propagate isAddrOf delayedList mExpr exprty = + match delayedList with + | [] -> + + if not (isNil delayed) then // We generate a tag inference parameter to the return type for "&x" and 'NativePtr.toByRef' // See RFC FS-1053.md - let exprty = - if isAddrOf && isByrefTy cenv.g exprty then - mkByrefTyWithInference cenv.g (destByrefTy cenv.g exprty) (NewByRefKindInferenceType cenv.g mExpr) - elif isByrefTy cenv.g exprty then + let exprty = + if isAddrOf && isByrefTy cenv.g exprty then + mkByrefTyWithInference cenv.g (destByrefTy cenv.g exprty) (NewByRefKindInferenceType cenv.g mExpr) + elif isByrefTy cenv.g exprty then // Implicit dereference on byref on return - if isByrefTy cenv.g overallTy then + if isByrefTy cenv.g overallTy then errorR(Error(FSComp.SR.tcByrefReturnImplicitlyDereferenced(), mExpr)) destByrefTy cenv.g exprty - else + else exprty UnifyTypesAndRecover cenv env mExpr overallTy exprty @@ -7272,26 +7296,26 @@ and Propagate cenv overallTy env tpenv (expr: ApplicableExpr) exprty delayed = | DelayedSet _ :: _ | DelayedDotLookup _ :: _ -> () | DelayedTypeApp (_, _mTypeArgs, mExprAndTypeArgs) :: delayedList' -> - // Note this case should not occur: would eventually give an "Unexpected type application" error in TcDelayed - propagate isAddrOf delayedList' mExprAndTypeArgs exprty + // Note this case should not occur: would eventually give an "Unexpected type application" error in TcDelayed + propagate isAddrOf delayedList' mExprAndTypeArgs exprty | DelayedApp (_, arg, mExprAndArg) :: delayedList' -> let denv = env.DisplayEnv match UnifyFunctionTypeUndoIfFailed cenv denv mExpr exprty with - | ValueSome (_, resultTy) -> - + | ValueSome (_, resultTy) -> + // We add tag parameter to the return type for "&x" and 'NativePtr.toByRef' // See RFC FS-1053.md - let isAddrOf = - match expr with - | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [], _), _) - when (valRefEq cenv.g vf cenv.g.addrof_vref || + let isAddrOf = + match expr with + | ApplicableExpr(_, Expr.App (Expr.Val (vf, _, _), _, _, [], _), _) + when (valRefEq cenv.g vf cenv.g.addrof_vref || valRefEq cenv.g vf cenv.g.nativeptr_tobyref_vref) -> true | _ -> false - propagate isAddrOf delayedList' mExprAndArg resultTy + propagate isAddrOf delayedList' mExprAndArg resultTy - | _ -> + | _ -> let mArg = arg.Range match arg with | SynExpr.CompExpr _ -> () @@ -7313,37 +7337,37 @@ and Propagate cenv overallTy env tpenv (expr: ApplicableExpr) exprty delayed = propagate false delayed expr.Range exprty -and PropagateThenTcDelayed cenv overallTy env tpenv mExpr expr exprty (atomicFlag: ExprAtomicFlag) delayed = +and PropagateThenTcDelayed cenv overallTy env tpenv mExpr expr exprty (atomicFlag: ExprAtomicFlag) delayed = Propagate cenv overallTy env tpenv expr exprty delayed TcDelayed cenv overallTy env tpenv mExpr expr exprty atomicFlag delayed -/// Typecheck "expr ... " constructs where "..." is a sequence of applications, +/// Typecheck "expr ... " constructs where "..." is a sequence of applications, /// type applications and dot-notation projections. -and TcDelayed cenv overallTy env tpenv mExpr expr exprty (atomicFlag: ExprAtomicFlag) delayed = +and TcDelayed cenv overallTy env tpenv mExpr expr exprty (atomicFlag: ExprAtomicFlag) delayed = - // OK, we've typechecked the thing on the left of the delayed lookup chain. - // We can now record for posterity the type of this expression and the location of the expression. + // OK, we've typechecked the thing on the left of the delayed lookup chain. + // We can now record for posterity the type of this expression and the location of the expression. if (atomicFlag = ExprAtomicFlag.Atomic) then CallExprHasTypeSink cenv.tcSink (mExpr, env.NameEnv, exprty, env.eAccessRights) - match delayed with - | [] - | DelayedDot :: _ -> + match delayed with + | [] + | DelayedDot :: _ -> UnifyTypes cenv env mExpr overallTy exprty expr.Expr, tpenv - // Expr.M (args) where x.M is a .NET method or index property - // expr.M(args) where x.M is a .NET method or index property - // expr.M where x.M is a .NET method or index property + // Expr.M (args) where x.M is a .NET method or index property + // expr.M(args) where x.M is a .NET method or index property + // expr.M where x.M is a .NET method or index property | DelayedDotLookup (longId, mDotLookup) :: otherDelayed -> TcLookupThen cenv overallTy env tpenv mExpr expr.Expr exprty longId otherDelayed mDotLookup - // f x + // f x | DelayedApp (hpa, arg, mExprAndArg) :: otherDelayed -> TcFunctionApplicationThen cenv overallTy env tpenv mExprAndArg expr exprty arg hpa otherDelayed - // f + // f | DelayedTypeApp (_, mTypeArgs, _mExprAndTypeArgs) :: _ -> error(Error(FSComp.SR.tcUnexpectedTypeArguments(), mTypeArgs)) - | DelayedSet (synExpr2, mStmt) :: otherDelayed -> + | DelayedSet (synExpr2, mStmt) :: otherDelayed -> if not (isNil otherDelayed) then error(Error(FSComp.SR.tcInvalidAssignment(), mExpr)) UnifyTypes cenv env mExpr overallTy cenv.g.unit_ty let expr = expr.Expr @@ -7357,17 +7381,17 @@ and TcDelayed cenv overallTy env tpenv mExpr expr exprty (atomicFlag: ExprAtomic /// Convert the delayed identifiers to a dot-lookup. /// -/// TcItemThen: For StaticItem [.Lookup], mPrior is the range of StaticItem +/// TcItemThen: For StaticItem [.Lookup], mPrior is the range of StaticItem /// TcLookupThen: For expr.InstanceItem [.Lookup], mPrior is the range of expr.InstanceItem -and delayRest rest mPrior delayed = - match rest with - | [] -> delayed - | longId -> +and delayRest rest mPrior delayed = + match rest with + | [] -> delayed + | longId -> let mPriorAndLongId = unionRanges mPrior (rangeOfLid longId) DelayedDotLookup (rest, mPriorAndLongId) :: delayed /// Typecheck "nameof" expressions -and TcNameOfExpr cenv env tpenv (synArg: SynExpr) = +and TcNameOfExpr cenv env tpenv (synArg: SynExpr) = let rec stripParens expr = match expr with @@ -7376,20 +7400,20 @@ and TcNameOfExpr cenv env tpenv (synArg: SynExpr) = let cleanSynArg = stripParens synArg let m = cleanSynArg.Range - let rec check overallTyOpt resultOpt expr (delayed: DelayedItem list) = + let rec check overallTyOpt resultOpt expr (delayed: DelayedItem list) = match expr with | LongOrSingleIdent (false, (LongIdentWithDots(longId, _)), _, _) -> let ad = env.eAccessRights let result = defaultArg resultOpt (List.last longId) - + // Demangle back to source operator name if the lengths in the ranges indicate the // original source range matches exactly let result = if IsMangledOpName result.idText then let demangled = DecompileOpName result.idText if demangled.Length = result.idRange.EndColumn - result.idRange.StartColumn then - ident(demangled, result.idRange) + ident(demangled, result.idRange) else result else result @@ -7403,16 +7427,16 @@ and TcNameOfExpr cenv env tpenv (synArg: SynExpr) = let typeNameResInfo = GetLongIdentTypeNameInfo delayed let nameResolutionResult = ResolveLongIdentAsExprAndComputeRange cenv.tcSink cenv.nameResolver (rangeOfLid longId) ad env.eNameResEnv typeNameResInfo longId let resolvesAsExpr = - match nameResolutionResult with - | Result ((_, item, _, _, _) as res) - when - (match item with - | Item.Types _ + match nameResolutionResult with + | Result ((_, item, _, _, _) as res) + when + (match item with + | Item.Types _ | Item.DelegateCtor _ | Item.CtorGroup _ | Item.FakeInterfaceCtor _ -> false - | _ -> true) -> - let overallTy = match overallTyOpt with None -> NewInferenceType() | Some t -> t + | _ -> true) -> + let overallTy = match overallTyOpt with None -> NewInferenceType() | Some t -> t let _, _ = TcItemThen cenv overallTy env tpenv res delayed true | _ -> @@ -7420,17 +7444,17 @@ and TcNameOfExpr cenv env tpenv (synArg: SynExpr) = if resolvesAsExpr then result else // If it's not an expression then try to resolve it as a type name - let resolvedToTypeName = + let resolvedToTypeName = if (match delayed with [DelayedTypeApp _] | [] -> true | _ -> false) then let (TypeNameResolutionInfo(_, staticArgsInfo)) = GetLongIdentTypeNameInfo delayed match ResolveTypeLongIdent cenv.tcSink cenv.nameResolver ItemOccurence.UseInAttribute OpenQualified env.eNameResEnv ad longId staticArgsInfo PermitDirectReferenceToGeneratedType.No with - | Result (tinstEnclosing, tcref) when IsEntityAccessible cenv.amap m ad tcref -> - match delayed with - | [DelayedTypeApp (tyargs, _, mExprAndTypeArgs)] -> + | Result (tinstEnclosing, tcref) when IsEntityAccessible cenv.amap m ad tcref -> + match delayed with + | [DelayedTypeApp (tyargs, _, mExprAndTypeArgs)] -> TcTypeApp cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv mExprAndTypeArgs tcref tinstEnclosing tyargs |> ignore | _ -> () true // resolved to a type name, done with checks - | _ -> + | _ -> false else false @@ -7440,10 +7464,10 @@ and TcNameOfExpr cenv env tpenv (synArg: SynExpr) = let resolvedToModuleOrNamespaceName = if delayed.IsEmpty then let id,rest = List.headAndTail longId - match ResolveLongIdentAsModuleOrNamespace cenv.tcSink ResultCollectionSettings.AllResults cenv.amap m true OpenQualified env.eNameResEnv ad id rest true with - | Result modref when delayed.IsEmpty && modref |> List.exists (p23 >> IsEntityAccessible cenv.amap m ad) -> + match ResolveLongIdentAsModuleOrNamespace cenv.tcSink ResultCollectionSettings.AllResults cenv.amap m true OpenQualified env.eNameResEnv ad id rest true with + | Result modref when delayed.IsEmpty && modref |> List.exists (p23 >> IsEntityAccessible cenv.amap m ad) -> true // resolved to a module or namespace, done with checks - | _ -> + | _ -> false else false @@ -7452,18 +7476,18 @@ and TcNameOfExpr cenv env tpenv (synArg: SynExpr) = ForceRaise nameResolutionResult |> ignore // If that didn't give aan exception then raise a generic error error (Error(FSComp.SR.expressionHasNoName(), m)) - - // expr allowed, even with qualifications + + // expr allowed, even with qualifications | SynExpr.TypeApp (hd, _, types, _, _, _, m) -> check overallTyOpt resultOpt hd (DelayedTypeApp(types, m, m) :: delayed) - // expr.ID allowed + // expr.ID allowed | SynExpr.DotGet (hd, _, LongIdentWithDots(longId, _), _) -> let result = defaultArg resultOpt (List.last longId) - check overallTyOpt (Some result) hd ((DelayedDotLookup (longId, expr.RangeSansAnyExtraDot)) :: delayed) + check overallTyOpt (Some result) hd ((DelayedDotLookup (longId, expr.RangeWithoutAnyExtraDot)) :: delayed) // "(expr)" allowed with no subsequent qualifications - | SynExpr.Paren(expr, _, _, _) when delayed.IsEmpty && overallTyOpt.IsNone -> + | SynExpr.Paren(expr, _, _, _) when delayed.IsEmpty && overallTyOpt.IsNone -> check overallTyOpt resultOpt expr delayed // expr : type" allowed with no subsequent qualifications @@ -7471,21 +7495,21 @@ and TcNameOfExpr cenv env tpenv (synArg: SynExpr) = let tgtTy, _tpenv = TcTypeAndRecover cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv synType check (Some tgtTy) resultOpt synBodyExpr delayed - | _ -> + | _ -> error (Error(FSComp.SR.expressionHasNoName(), m)) - let lastIdent = check None None cleanSynArg [] + let lastIdent = check None None cleanSynArg [] TcNameOfExprResult cenv lastIdent m -and TcNameOfExprResult cenv (lastIdent: Ident) m = +and TcNameOfExprResult cenv (lastIdent: Ident) m = let constRange = mkRange m.FileName m.Start (mkPos m.StartLine (m.StartColumn + lastIdent.idText.Length + 2)) // `2` are for quotes Expr.Const(Const.String(lastIdent.idText), constRange, cenv.g.string_ty) - + //------------------------------------------------------------------------- // TcFunctionApplicationThen: Typecheck "expr x" + projections -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -and TcFunctionApplicationThen cenv overallTy env tpenv mExprAndArg expr exprty (synArg: SynExpr) atomicFlag delayed = +and TcFunctionApplicationThen cenv overallTy env tpenv mExprAndArg expr exprty (synArg: SynExpr) atomicFlag delayed = let denv = env.DisplayEnv let mArg = synArg.Range let mFunExpr = expr.Range @@ -7501,47 +7525,47 @@ and TcFunctionApplicationThen cenv overallTy env tpenv mExprAndArg expr exprty ( | _ -> // Notice the special case 'seq { ... }'. In this case 'seq' is actually a function in the F# library. // Set a flag in the syntax tree to say we noticed a leading 'seq' - match synArg with - | SynExpr.CompExpr (false, isNotNakedRefCell, _comp, _m) -> - isNotNakedRefCell := + match synArg with + | SynExpr.CompExpr (false, isNotNakedRefCell, _comp, _m) -> + isNotNakedRefCell := !isNotNakedRefCell - || - (match expr with - | ApplicableExpr(_, Expr.Op(TOp.Coerce, _, [SeqExpr cenv.g], _), _) -> true + || + (match expr with + | ApplicableExpr(_, Expr.Op(TOp.Coerce, _, [SeqExpr cenv.g], _), _) -> true | _ -> false) | _ -> () - + let arg, tpenv = TcExpr cenv domainTy env tpenv synArg let exprAndArg, resultTy = buildApp cenv expr resultTy arg mExprAndArg TcDelayed cenv overallTy env tpenv mExprAndArg exprAndArg resultTy atomicFlag delayed - - | ValueNone -> - // OK, 'expr' doesn't have function type, but perhaps 'expr' is a computation expression builder, and 'arg' is '{ ... }' - match synArg with - | SynExpr.CompExpr (false, _isNotNakedRefCell, comp, _m) -> + + | ValueNone -> + // OK, 'expr' doesn't have function type, but perhaps 'expr' is a computation expression builder, and 'arg' is '{ ... }' + match synArg with + | SynExpr.CompExpr (false, _isNotNakedRefCell, comp, _m) -> let bodyOfCompExpr, tpenv = cenv.TcComputationExpression cenv env overallTy tpenv (mFunExpr, expr.Expr, exprty, comp) - TcDelayed cenv overallTy env tpenv mExprAndArg (MakeApplicableExprNoFlex cenv bodyOfCompExpr) (tyOfExpr cenv.g bodyOfCompExpr) ExprAtomicFlag.NonAtomic delayed - | _ -> - error (NotAFunction(denv, overallTy, mFunExpr, mArg)) + TcDelayed cenv overallTy env tpenv mExprAndArg (MakeApplicableExprNoFlex cenv bodyOfCompExpr) (tyOfExpr cenv.g bodyOfCompExpr) ExprAtomicFlag.NonAtomic delayed + | _ -> + error (NotAFunction(denv, overallTy, mFunExpr, mArg)) //------------------------------------------------------------------------- // TcLongIdentThen: Typecheck "A.B.C.E.F ... " constructs -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- and GetLongIdentTypeNameInfo delayed = - // Given 'MyOverloadedType.MySubType...' use the number of given type arguments to help - // resolve type name lookup of 'MyOverloadedType' - // Also determine if type names should resolve to Item.Types or Item.CtorGroup - match delayed with - | DelayedTypeApp (tyargs, _, _) :: (DelayedDot | DelayedDotLookup _) :: _ -> - // cases like 'MyType.Sth' + // Given 'MyOverloadedType.MySubType...' use the number of given type arguments to help + // resolve type name lookup of 'MyOverloadedType' + // Also determine if type names should resolve to Item.Types or Item.CtorGroup + match delayed with + | DelayedTypeApp (tyargs, _, _) :: (DelayedDot | DelayedDotLookup _) :: _ -> + // cases like 'MyType.Sth' TypeNameResolutionInfo(ResolveTypeNamesToTypeRefs, TypeNameResolutionStaticArgsInfo.FromTyArgs tyargs.Length) - | DelayedTypeApp (tyargs, _, _) :: _ -> + | DelayedTypeApp (tyargs, _, _) :: _ -> // Note, this also covers the case 'MyType.' (without LValue_get), which is needed for VS (when typing) TypeNameResolutionInfo(ResolveTypeNamesToCtors, TypeNameResolutionStaticArgsInfo.FromTyArgs tyargs.Length) - | _ -> + | _ -> TypeNameResolutionInfo.Default and TcLongIdentThen cenv overallTy env tpenv (LongIdentWithDots(longId, _)) delayed = @@ -7554,24 +7578,24 @@ and TcLongIdentThen cenv overallTy env tpenv (LongIdentWithDots(longId, _)) dela TcItemThen cenv overallTy env tpenv nameResolutionResult delayed //------------------------------------------------------------------------- -// Typecheck "item+projections" +// Typecheck "item+projections" //------------------------------------------------------------------------- *) // mItem is the textual range covered by the long identifiers that make up the item and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afterResolution) delayed = let g = cenv.g let delayed = delayRest rest mItem delayed let ad = env.eAccessRights - match item with - // x where x is a union case or active pattern result tag. - | (Item.UnionCase _ | Item.ExnCase _ | Item.ActivePatternResult _) as item -> - // ucaseAppTy is the type of the union constructor applied to its (optional) argument + match item with + // x where x is a union case or active pattern result tag. + | (Item.UnionCase _ | Item.ExnCase _ | Item.ActivePatternResult _) as item -> + // ucaseAppTy is the type of the union constructor applied to its (optional) argument let ucaseAppTy = NewInferenceType () - let mkConstrApp, argTys, argNames = - match item with - | Item.ActivePatternResult(apinfo, _, n, _) -> + let mkConstrApp, argTys, argNames = + match item with + | Item.ActivePatternResult(apinfo, _apOverallTy, n, _) -> let aparity = apinfo.Names.Length - match aparity with - | 0 | 1 -> + match aparity with + | 0 | 1 -> let mkConstrApp _mArgs = function [arg] -> arg | _ -> error(InternalError("ApplyUnionCaseOrExn", mItem)) mkConstrApp, [ucaseAppTy], [ for (s, m) in apinfo.ActiveTagsWithRanges -> mkSynId m s ] | _ -> @@ -7579,41 +7603,41 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte let _, _, tinst, _ = FreshenTyconRef2 mItem ucref.TyconRef let ucinfo = UnionCaseInfo (tinst, ucref) ApplyUnionCaseOrExnTypes mItem cenv env ucaseAppTy (Item.UnionCase(ucinfo, false)) - | _ -> + | _ -> ApplyUnionCaseOrExnTypes mItem cenv env ucaseAppTy item let numArgTys = List.length argTys // Subsumption at data constructions if argument type is nominal prior to equations for any arguments or return types let flexes = argTys |> List.map (isTyparTy g >> not) - - let (|FittedArgs|_|) arg = - match arg with + + let (|FittedArgs|_|) arg = + match arg with | SynExprParen(SynExpr.Tuple (false, args, _, _), _, _, _) | SynExpr.Tuple (false, args, _, _) when numArgTys > 1 -> Some args | SynExprParen(arg, _, _, _) | arg when numArgTys = 1 -> Some [arg] | _ -> None - match delayed with - // This is where the constructor is applied to an argument + match delayed with + // This is where the constructor is applied to an argument | ((DelayedApp (atomicFlag, (FittedArgs args as origArg), mExprAndArg)) :: otherDelayed) -> // assert the overall result type if possible - if isNil otherDelayed then - UnifyTypes cenv env mExprAndArg overallTy ucaseAppTy + if isNil otherDelayed then + UnifyTypes cenv env mExprAndArg overallTy ucaseAppTy let numArgs = List.length args UnionCaseOrExnCheck env numArgTys numArgs mExprAndArg - + // if we manage to get here - number of formal arguments = number of actual arguments // apply named parameters let args = // GetMethodArgs checks that no named parameters are located before positional let unnamedArgs, namedCallerArgs = GetMethodArgs origArg match namedCallerArgs with - | [] -> + | [] -> args | _ -> let fittedArgs = Array.zeroCreate numArgTys - + // first: put all positional arguments let mutable currentIndex = 0 for arg in unnamedArgs do @@ -7625,28 +7649,28 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte // dealing with named arguments is a bit tricky since prior to these changes we have an ambiguous situation: // regular notation for named parameters Some(Value = 5) can mean either 1) create option with value - result of equality operation or 2) create option using named arg syntax. // so far we've used 1) so we cannot immediately switch to 2) since it will be a definite breaking change. - + for (_, id, arg) in namedCallerArgs do match argNames |> List.tryFindIndex (fun id2 -> id.idText = id2.idText) with - | Some i -> + | Some i -> if isNull(box fittedArgs.[i]) then fittedArgs.[i] <- arg let argItem = match item with | Item.UnionCase (uci, _) -> Item.UnionCaseField (uci, i) | Item.ExnCase tref -> Item.RecdField (RecdFieldInfo ([], RecdFieldRef (tref, id.idText))) - | _ -> failwithf "Expecting union case or exception item, got: %O" item + | _ -> failwithf "Expecting union case or exception item, got: %O" item CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, argItem, emptyTyparInst, ItemOccurence.Use, ad) else error(Error(FSComp.SR.tcUnionCaseFieldCannotBeUsedMoreThanOnce(id.idText), id.idRange)) currentIndex <- SEEN_NAMED_ARGUMENT | None -> // 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 + // 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 = + let isSpecialCaseForBackwardCompatibility = (currentIndex <> SEEN_NAMED_ARGUMENT) && (currentIndex < numArgTys) && match stripTyEqns g argTys.[currentIndex] with @@ -7658,7 +7682,7 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte assert (isNull(box fittedArgs.[currentIndex])) fittedArgs.[currentIndex] <- List.item currentIndex args // grab original argument, not item from the list of named parameters currentIndex <- currentIndex + 1 - else + else match item with | Item.UnionCase(uci, _) -> error(Error(FSComp.SR.tcUnionCaseConstructorDoesNotHaveFieldWithGivenName(uci.Name, id.idText), id.idRange)) @@ -7666,7 +7690,7 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte error(Error(FSComp.SR.tcExceptionConstructorDoesNotHaveFieldWithGivenName(tcref.DisplayName, id.idText), id.idRange)) | Item.ActivePatternResult(_,_,_,_) -> error(Error(FSComp.SR.tcActivePatternsDoNotHaveFields(), id.idRange)) - | _ -> + | _ -> error(Error(FSComp.SR.tcConstructorDoesNotHaveFieldWithGivenName(id.idText), id.idRange)) assert (Seq.forall (box >> ((<>) null) ) fittedArgs) @@ -7677,26 +7701,26 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte | DelayedTypeApp (_x, mTypeArgs, _mExprAndTypeArgs) :: _delayed' -> error(Error(FSComp.SR.tcUnexpectedTypeArguments(), mTypeArgs)) - | _ -> - // Work out how many syntactic arguments we really expect. Also return a function that builds the overall - // expression, but don't apply this function until after we've checked that the number of arguments is OK - // (or else we would be building an invalid expression) - - // Unit-taking active pattern result can be applied to no args - let numArgs, mkExpr = - // This is where the constructor is an active pattern result applied to no argument - // Unit-taking active pattern result can be applied to no args - if (numArgTys = 1 && match item with Item.ActivePatternResult _ -> true | _ -> false) then + | _ -> + // Work out how many syntactic arguments we really expect. Also return a function that builds the overall + // expression, but don't apply this function until after we've checked that the number of arguments is OK + // (or else we would be building an invalid expression) + + // Unit-taking active pattern result can be applied to no args + let numArgs, mkExpr = + // This is where the constructor is an active pattern result applied to no argument + // Unit-taking active pattern result can be applied to no args + if (numArgTys = 1 && match item with Item.ActivePatternResult _ -> true | _ -> false) then UnifyTypes cenv env mItem (List.head argTys) g.unit_ty 1, (fun () -> mkConstrApp mItem [mkUnit g mItem]) - // This is where the constructor expects no arguments and is applied to no argument - elif numArgTys = 0 then - 0, (fun () -> mkConstrApp mItem []) - else - // This is where the constructor expects arguments but is not applied to arguments, hence build a lambda - numArgTys, - (fun () -> + // This is where the constructor expects no arguments and is applied to no argument + elif numArgTys = 0 then + 0, (fun () -> mkConstrApp mItem []) + else + // This is where the constructor expects arguments but is not applied to arguments, hence build a lambda + numArgTys, + (fun () -> let vs, args = argTys |> List.mapi (fun i ty -> mkCompGenLocal mItem ("arg" + string i) ty) |> List.unzip let constrApp = mkConstrApp mItem args let lam = mkMultiLambda mItem vs (constrApp, tyOfExpr g constrApp) @@ -7704,15 +7728,15 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte UnionCaseOrExnCheck env numArgTys numArgs mItem let expr = mkExpr() let exprTy = tyOfExpr g expr - PropagateThenTcDelayed cenv overallTy env tpenv mItem (MakeApplicableExprNoFlex cenv expr) exprTy ExprAtomicFlag.Atomic delayed + PropagateThenTcDelayed cenv overallTy env tpenv mItem (MakeApplicableExprNoFlex cenv expr) exprTy ExprAtomicFlag.Atomic delayed + + | Item.Types(nm, (ty :: _)) -> - | Item.Types(nm, (ty :: _)) -> - - match delayed with + match delayed with | ((DelayedTypeApp(tyargs, _mTypeArgs, mExprAndTypeArgs)) :: (DelayedDotLookup (longId, mLongId)) :: otherDelayed) -> - // If Item.Types is returned then the ty will be of the form TType_app(tcref, genericTyargs) where tyargs - // is a fresh instantiation for tcref. TcNestedTypeApplication will chop off precisely #genericTyargs args - // and replace them by 'tyargs' + // If Item.Types is returned then the ty will be of the form TType_app(tcref, genericTyargs) where tyargs + // is a fresh instantiation for tcref. TcNestedTypeApplication will chop off precisely #genericTyargs args + // and replace them by 'tyargs' let ty, tpenv = TcNestedTypeApplication cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv mExprAndTypeArgs ty tinstEnclosing tyargs // Report information about the whole expression including type arguments to VS @@ -7721,74 +7745,74 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte let typeNameResInfo = GetLongIdentTypeNameInfo otherDelayed let item, mItem, rest, afterResolution = ResolveExprDotLongIdentAndComputeRange cenv.tcSink cenv.nameResolver (unionRanges mExprAndTypeArgs mLongId) ad env.eNameResEnv ty longId typeNameResInfo IgnoreOverrides true TcItemThen cenv overallTy env tpenv ((argsOfAppTy g ty), item, mItem, rest, afterResolution) otherDelayed - + | ((DelayedTypeApp(tyargs, _mTypeArgs, mExprAndTypeArgs)) :: _delayed') -> // A case where we have an incomplete name e.g. 'Foo.' - we still want to report it to VS! let ty, _ = TcNestedTypeApplication cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv mExprAndTypeArgs ty tinstEnclosing tyargs let item = Item.Types(nm, [ty]) CallNameResolutionSink cenv.tcSink (mExprAndTypeArgs, env.NameEnv, item, emptyTyparInst, ItemOccurence.Use, env.eAccessRights) - + // Same error as in the following case error(Error(FSComp.SR.tcInvalidUseOfTypeName(), mItem)) - - | _ -> - // In this case the type is not generic, and indeed we should never have returned Item.Types. - // That's because ResolveTypeNamesToCtors should have been set at the original - // call to ResolveLongIdentAsExprAndComputeRange + + | _ -> + // In this case the type is not generic, and indeed we should never have returned Item.Types. + // That's because ResolveTypeNamesToCtors should have been set at the original + // call to ResolveLongIdentAsExprAndComputeRange error(Error(FSComp.SR.tcInvalidUseOfTypeName(), mItem)) - | Item.MethodGroup (methodName, minfos, _) -> - // Static method calls Type.Foo(arg1, ..., argn) + | Item.MethodGroup (methodName, minfos, _) -> + // Static method calls Type.Foo(arg1, ..., argn) let meths = List.map (fun minfo -> minfo, None) minfos - match delayed with + match delayed with | (DelayedApp (atomicFlag, arg, mExprAndArg) :: otherDelayed) -> TcMethodApplicationThen cenv env overallTy None tpenv None [] mExprAndArg mItem methodName ad NeverMutates false meths afterResolution NormalValUse [arg] atomicFlag otherDelayed | (DelayedTypeApp(tys, mTypeArgs, mExprAndTypeArgs) :: otherDelayed) -> #if !NO_EXTENSIONTYPING - match TryTcMethodAppToStaticConstantArgs cenv env tpenv (minfos, Some (tys, mTypeArgs), mExprAndTypeArgs, mItem) with + match TryTcMethodAppToStaticConstantArgs cenv env tpenv (minfos, Some (tys, mTypeArgs), mExprAndTypeArgs, mItem) with | Some minfoAfterStaticArguments -> // Replace the resolution including the static parameters, plus the extra information about the original method info let item = Item.MethodGroup(methodName, [minfoAfterStaticArguments], Some minfos.[0]) - CallNameResolutionSinkReplacing cenv.tcSink (mItem, env.NameEnv, item, [], ItemOccurence.Use, env.eAccessRights) + CallNameResolutionSinkReplacing cenv.tcSink (mItem, env.NameEnv, item, [], ItemOccurence.Use, env.eAccessRights) - match otherDelayed with - | DelayedApp(atomicFlag, arg, mExprAndArg) :: otherDelayed -> + match otherDelayed with + | DelayedApp(atomicFlag, arg, mExprAndArg) :: otherDelayed -> TcMethodApplicationThen cenv env overallTy None tpenv None [] mExprAndArg mItem methodName ad NeverMutates false [(minfoAfterStaticArguments, None)] afterResolution NormalValUse [arg] atomicFlag otherDelayed - | _ -> + | _ -> TcMethodApplicationThen cenv env overallTy None tpenv None [] mExprAndTypeArgs mItem methodName ad NeverMutates false [(minfoAfterStaticArguments, None)] afterResolution NormalValUse [] ExprAtomicFlag.Atomic otherDelayed | None -> #endif let tyargs, tpenv = TcTypesOrMeasures None cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv tys mTypeArgs - + // FUTURE: can we do better than emptyTyparInst here, in order to display instantiations // of type variables in the quick info provided in the IDE? But note we haven't yet even checked if the // number of type arguments is correct... - CallNameResolutionSink cenv.tcSink (mExprAndTypeArgs, env.NameEnv, item, emptyTyparInst, ItemOccurence.Use, env.eAccessRights) + CallNameResolutionSink cenv.tcSink (mExprAndTypeArgs, env.NameEnv, item, emptyTyparInst, ItemOccurence.Use, env.eAccessRights) - match otherDelayed with - | DelayedApp(atomicFlag, arg, mExprAndArg) :: otherDelayed -> + match otherDelayed with + | DelayedApp(atomicFlag, arg, mExprAndArg) :: otherDelayed -> TcMethodApplicationThen cenv env overallTy None tpenv (Some tyargs) [] mExprAndArg mItem methodName ad NeverMutates false meths afterResolution NormalValUse [arg] atomicFlag otherDelayed - | _ -> + | _ -> TcMethodApplicationThen cenv env overallTy None tpenv (Some tyargs) [] mExprAndTypeArgs mItem methodName ad NeverMutates false meths afterResolution NormalValUse [] ExprAtomicFlag.Atomic otherDelayed - | _ -> + | _ -> #if !NO_EXTENSIONTYPING - if not minfos.IsEmpty && minfos.[0].ProvidedStaticParameterInfo.IsSome then + if not minfos.IsEmpty && minfos.[0].ProvidedStaticParameterInfo.IsSome then error(Error(FSComp.SR.etMissingStaticArgumentsToMethod(), mItem)) #endif - TcMethodApplicationThen cenv env overallTy None tpenv None [] mItem mItem methodName ad NeverMutates false meths afterResolution NormalValUse [] ExprAtomicFlag.Atomic delayed + TcMethodApplicationThen cenv env overallTy None tpenv None [] mItem mItem methodName ad NeverMutates false meths afterResolution NormalValUse [] ExprAtomicFlag.Atomic delayed | Item.CtorGroup(nm, minfos) -> - let objTy = - match minfos with + let objTy = + match minfos with | (minfo :: _) -> minfo.ApparentEnclosingType | [] -> error(Error(FSComp.SR.tcTypeHasNoAccessibleConstructor(), mItem)) - match delayed with + match delayed with | ((DelayedApp (_, arg, mExprAndArg)) :: otherDelayed) -> CallExprHasTypeSink cenv.tcSink (mExprAndArg, env.NameEnv, objTy, env.eAccessRights) @@ -7798,14 +7822,14 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte let objTyAfterTyArgs, tpenv = TcNestedTypeApplication cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv mExprAndTypeArgs objTy tinstEnclosing tyargs CallExprHasTypeSink cenv.tcSink (mExprAndArg, env.NameEnv, objTyAfterTyArgs, env.eAccessRights) - let itemAfterTyArgs, minfosAfterTyArgs = + let itemAfterTyArgs, minfosAfterTyArgs = #if !NO_EXTENSIONTYPING // If the type is provided and took static arguments then the constructor will have changed // to a provided constructor on the statically instantiated type. Re-resolve that constructor. - match objTyAfterTyArgs with + match objTyAfterTyArgs with | AppTy g (tcref, _) when tcref.Deref.IsProvided -> let newItem = ForceRaise (ResolveObjectConstructor cenv.nameResolver env.DisplayEnv mExprAndArg ad objTyAfterTyArgs) - match newItem with + match newItem with | Item.CtorGroup(_, newMinfos) -> newItem, newMinfos | _ -> item, minfos | _ -> @@ -7838,26 +7862,26 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte let isPrefix = PrettyNaming.IsPrefixOperator id.idText let isTernary = PrettyNaming.IsTernaryOperator id.idText - let argData = - if isPrefix then - [ Typar(mkSynId mItem (cenv.synArgNameGenerator.New()), HeadTypeStaticReq, true) ] - elif isTernary then - [ Typar(mkSynId mItem (cenv.synArgNameGenerator.New()), HeadTypeStaticReq, true) - Typar(mkSynId mItem (cenv.synArgNameGenerator.New()), HeadTypeStaticReq, true) - Typar(mkSynId mItem (cenv.synArgNameGenerator.New()), HeadTypeStaticReq, true) ] + let argData = + if isPrefix then + [ SynTypar(mkSynId mItem (cenv.synArgNameGenerator.New()), TyparStaticReq.HeadType, true) ] + elif isTernary then + [ SynTypar(mkSynId mItem (cenv.synArgNameGenerator.New()), TyparStaticReq.HeadType, true) + SynTypar(mkSynId mItem (cenv.synArgNameGenerator.New()), TyparStaticReq.HeadType, true) + SynTypar(mkSynId mItem (cenv.synArgNameGenerator.New()), TyparStaticReq.HeadType, true) ] else - [ Typar(mkSynId mItem (cenv.synArgNameGenerator.New()), HeadTypeStaticReq, true) - Typar(mkSynId mItem (cenv.synArgNameGenerator.New()), HeadTypeStaticReq, true) ] - - let retTyData = Typar(mkSynId mItem (cenv.synArgNameGenerator.New()), HeadTypeStaticReq, true) + [ SynTypar(mkSynId mItem (cenv.synArgNameGenerator.New()), TyparStaticReq.HeadType, true) + SynTypar(mkSynId mItem (cenv.synArgNameGenerator.New()), TyparStaticReq.HeadType, true) ] + + let retTyData = SynTypar(mkSynId mItem (cenv.synArgNameGenerator.New()), TyparStaticReq.HeadType, true) let argTypars = argData |> List.map (fun d -> Construct.NewTypar (TyparKind.Type, TyparRigidity.Flexible, d, false, TyparDynamicReq.Yes, [], false, false)) let retTypar = Construct.NewTypar (TyparKind.Type, TyparRigidity.Flexible, retTyData, false, TyparDynamicReq.Yes, [], false, false) - let argTys = argTypars |> List.map mkTyparTy + let argTys = argTypars |> List.map mkTyparTy let retTy = mkTyparTy retTypar let vs, ves = argTys |> List.mapi (fun i ty -> mkCompGenLocal mItem ("arg" + string i) ty) |> List.unzip - let memberFlags = StaticMemberFlags MemberKind.Member + let memberFlags = StaticMemberFlags SynMemberKind.Member let logicalCompiledName = ComputeLogicalName id memberFlags let traitInfo = TTrait(argTys, logicalCompiledName, memberFlags, argTys, Some retTy, sln) @@ -7866,71 +7890,71 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte let rec isSimpleArgument e = match e with - | SynExpr.New (_, _, synExpr, _) - | SynExpr.Paren (synExpr, _, _, _) - | SynExpr.Typed (synExpr, _, _) - | SynExpr.TypeApp (synExpr, _, _, _, _, _, _) - | SynExpr.TypeTest (synExpr, _, _) - | SynExpr.Upcast (synExpr, _, _) - | SynExpr.DotGet (synExpr, _, _, _) - | SynExpr.Downcast (synExpr, _, _) - | SynExpr.InferredUpcast (synExpr, _) - | SynExpr.InferredDowncast (synExpr, _) - | SynExpr.AddressOf (_, synExpr, _, _) + | SynExpr.New (_, _, synExpr, _) + | SynExpr.Paren (synExpr, _, _, _) + | SynExpr.Typed (synExpr, _, _) + | SynExpr.TypeApp (synExpr, _, _, _, _, _, _) + | SynExpr.TypeTest (synExpr, _, _) + | SynExpr.Upcast (synExpr, _, _) + | SynExpr.DotGet (synExpr, _, _, _) + | SynExpr.Downcast (synExpr, _, _) + | SynExpr.InferredUpcast (synExpr, _) + | SynExpr.InferredDowncast (synExpr, _) + | SynExpr.AddressOf (_, synExpr, _, _) | SynExpr.Quote (_, _, synExpr, _, _) -> isSimpleArgument synExpr | SynExpr.InterpolatedString _ | SynExpr.Null _ - | SynExpr.Ident _ - | SynExpr.Const _ + | SynExpr.Ident _ + | SynExpr.Const _ | SynExpr.LongIdent _ -> true - | SynExpr.Tuple (_, synExprs, _, _) + | SynExpr.Tuple (_, synExprs, _, _) | SynExpr.ArrayOrList (_, synExprs, _) -> synExprs |> List.forall isSimpleArgument - | SynExpr.Record (_, copyOpt, fields, _) -> copyOpt |> Option.forall (fst >> isSimpleArgument) && fields |> List.forall (p23 >> Option.forall isSimpleArgument) + | SynExpr.Record (_, copyOpt, fields, _) -> copyOpt |> Option.forall (fst >> isSimpleArgument) && fields |> List.forall (p23 >> Option.forall isSimpleArgument) | SynExpr.App (_, _, synExpr, synExpr2, _) -> isSimpleArgument synExpr && isSimpleArgument synExpr2 | SynExpr.IfThenElse (synExpr, synExpr2, synExprOpt, _, _, _, _) -> isSimpleArgument synExpr && isSimpleArgument synExpr2 && Option.forall isSimpleArgument synExprOpt - | SynExpr.DotIndexedGet (synExpr, _, _, _) -> isSimpleArgument synExpr - | SynExpr.ObjExpr _ + | SynExpr.DotIndexedGet (synExpr, _, _, _) -> isSimpleArgument synExpr + | SynExpr.ObjExpr _ | SynExpr.AnonRecd _ - | SynExpr.While _ - | SynExpr.For _ - | SynExpr.ForEach _ - | SynExpr.ArrayOrListOfSeqExpr _ - | SynExpr.CompExpr _ + | SynExpr.While _ + | SynExpr.For _ + | SynExpr.ForEach _ + | SynExpr.ArrayOrListOfSeqExpr _ + | SynExpr.CompExpr _ | SynExpr.Lambda _ - | SynExpr.MatchLambda _ - | SynExpr.Match _ - | SynExpr.Do _ - | SynExpr.Assert _ - | SynExpr.Fixed _ + | SynExpr.MatchLambda _ + | SynExpr.Match _ + | SynExpr.Do _ + | SynExpr.Assert _ + | SynExpr.Fixed _ | SynExpr.TryWith _ | SynExpr.TryFinally _ | SynExpr.Lazy _ | SynExpr.Sequential _ | SynExpr.SequentialOrImplicitYield _ - | SynExpr.LetOrUse _ - | SynExpr.DotSet _ - | SynExpr.DotIndexedSet _ - | SynExpr.LongIdentSet _ - | SynExpr.Set _ + | SynExpr.LetOrUse _ + | SynExpr.DotSet _ + | SynExpr.DotIndexedSet _ + | SynExpr.LongIdentSet _ + | SynExpr.Set _ | SynExpr.JoinIn _ - | SynExpr.NamedIndexedPropertySet _ + | SynExpr.NamedIndexedPropertySet _ | SynExpr.DotNamedIndexedPropertySet _ - | SynExpr.LibraryOnlyILAssembly _ - | SynExpr.LibraryOnlyStaticOptimization _ - | SynExpr.LibraryOnlyUnionCaseFieldGet _ - | SynExpr.LibraryOnlyUnionCaseFieldSet _ - | SynExpr.ArbitraryAfterError (_, _) - | SynExpr.FromParseError (_, _) - | SynExpr.DiscardAfterMissingQualificationAfterDot (_, _) + | SynExpr.LibraryOnlyILAssembly _ + | SynExpr.LibraryOnlyStaticOptimization _ + | SynExpr.LibraryOnlyUnionCaseFieldGet _ + | SynExpr.LibraryOnlyUnionCaseFieldSet _ + | SynExpr.ArbitraryAfterError (_, _) + | SynExpr.FromParseError (_, _) + | SynExpr.DiscardAfterMissingQualificationAfterDot (_, _) | SynExpr.ImplicitZero _ | SynExpr.YieldOrReturn _ | SynExpr.YieldOrReturnFrom _ | SynExpr.MatchBang _ | SynExpr.LetOrUseBang _ - | SynExpr.DoBang _ - | SynExpr.TraitCall _ + | SynExpr.DoBang _ + | SynExpr.TraitCall _ -> false @@ -7938,7 +7962,7 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte Propagate cenv overallTy env tpenv (MakeApplicableExprNoFlex cenv expr) (tyOfExpr g expr) delayed // Take all simple arguments and process them before applying the constraint. - let delayed1, delayed2 = + let delayed1, delayed2 = let pred = (function (DelayedApp (_, arg, _)) -> isSimpleArgument arg | _ -> false) List.takeWhile pred delayed, List.skipWhile pred delayed let intermediateTy = if isNil delayed2 then overallTy else NewInferenceType () @@ -7951,26 +7975,26 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte // Process all remaining arguments after the constraint is asserted let resultExpr2, tpenv2 = TcDelayed cenv overallTy env tpenv mItem (MakeApplicableExprNoFlex cenv resultExpr) intermediateTy ExprAtomicFlag.NonAtomic delayed2 resultExpr2, tpenv2 - - + + | Item.DelegateCtor ty -> - match delayed with + match delayed with | ((DelayedApp (atomicFlag, arg, mItemAndArg)) :: otherDelayed) -> TcNewDelegateThen cenv overallTy env tpenv mItem mItemAndArg ty arg atomicFlag otherDelayed | ((DelayedTypeApp(tyargs, _mTypeArgs, mItemAndTypeArgs)) :: (DelayedApp (atomicFlag, arg, mItemAndArg)) :: otherDelayed) -> let ty, tpenv = TcNestedTypeApplication cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv mItemAndTypeArgs ty tinstEnclosing tyargs - + // Report information about the whole expression including type arguments to VS let item = Item.DelegateCtor ty - CallNameResolutionSink cenv.tcSink (mItemAndTypeArgs, env.NameEnv, item, emptyTyparInst, ItemOccurence.Use, env.eAccessRights) + CallNameResolutionSink cenv.tcSink (mItemAndTypeArgs, env.NameEnv, item, emptyTyparInst, ItemOccurence.Use, env.eAccessRights) TcNewDelegateThen cenv overallTy env tpenv mItem mItemAndArg ty arg atomicFlag otherDelayed - | _ -> + | _ -> error(Error(FSComp.SR.tcInvalidUseOfDelegate(), mItem)) - | Item.Value vref -> + | Item.Value vref -> - match delayed with - // Mutable value set: 'v <- e' + match delayed with + // Mutable value set: 'v <- e' | DelayedSet(e2, mStmt) :: otherDelayed -> if not (isNil otherDelayed) then error(Error(FSComp.SR.tcInvalidAssignment(), mStmt)) UnifyTypes cenv env mStmt overallTy g.unit_ty @@ -7978,75 +8002,75 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte CheckValAccessible mItem env.AccessRights vref CheckValAttributes g vref mItem |> CommitOperationResult let vty = vref.Type - let vty2 = - if isByrefTy g vty then - destByrefTy g vty - else + let vty2 = + if isByrefTy g vty then + destByrefTy g vty + else if not vref.IsMutable then errorR (ValNotMutable (env.DisplayEnv, vref, mStmt)) - vty + vty // Always allow subsumption on assignment to fields let e2', tpenv = TcExprFlex cenv true false vty2 env tpenv e2 - let vexp = - if isInByrefTy g vty then + let vexp = + if isInByrefTy g vty then errorR(Error(FSComp.SR.writeToReadOnlyByref(), mStmt)) mkAddrSet mStmt vref e2' - elif isByrefTy g vty then + elif isByrefTy g vty then mkAddrSet mStmt vref e2' - else + else mkValSet mStmt vref e2' - + PropagateThenTcDelayed cenv overallTy env tpenv mStmt (MakeApplicableExprNoFlex cenv vexp) (tyOfExpr g vexp) ExprAtomicFlag.NonAtomic otherDelayed - // Value instantiation: v ... + // Value instantiation: v ... | (DelayedTypeApp(tys, _mTypeArgs, mExprAndTypeArgs) :: otherDelayed) -> - // Note: we know this is a NormalValUse or PossibleConstrainedCall because: - // - it isn't a CtorValUsedAsSuperInit - // - it isn't a CtorValUsedAsSelfInit - // - it isn't a VSlotDirectCall (uses of base values do not take type arguments + // Note: we know this is a NormalValUse or PossibleConstrainedCall because: + // - it isn't a CtorValUsedAsSuperInit + // - it isn't a CtorValUsedAsSelfInit + // - it isn't a VSlotDirectCall (uses of base values do not take type arguments // Allow `nameof<'T>` for a generic parameter match vref with | _ when isNameOfValRef cenv.g vref && cenv.g.langVersion.SupportsFeature LanguageFeature.NameOf -> - match tys with - | [SynType.Var((Typar(id, _, false) as tp), _m)] -> + match tys with + | [SynType.Var((SynTypar(id, _, false) as tp), _m)] -> let _tp', tpenv = TcTyparOrMeasurePar None cenv env ImplicitlyBoundTyparsAllowed.NoNewTypars tpenv tp let vexp = TcNameOfExprResult cenv id mExprAndTypeArgs let vexpFlex = MakeApplicableExprNoFlex cenv vexp PropagateThenTcDelayed cenv overallTy env tpenv mExprAndTypeArgs vexpFlex cenv.g.string_ty ExprAtomicFlag.Atomic otherDelayed | _ -> error (Error(FSComp.SR.expressionHasNoName(), mExprAndTypeArgs)) - | _ -> + | _ -> let checkTys tpenv kinds = TcTypesOrMeasures (Some kinds) cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv tys mItem let _, vexp, isSpecial, _, _, tpenv = TcVal true cenv env tpenv vref (Some (NormalValUse, checkTys)) (Some afterResolution) mItem - + let vexpFlex = (if isSpecial then MakeApplicableExprNoFlex cenv vexp else MakeApplicableExprWithFlex cenv env vexp) // We need to eventually record the type resolution for an expression, but this is done - // inside PropagateThenTcDelayed, so we don't have to explicitly call 'CallExprHasTypeSink' here + // inside PropagateThenTcDelayed, so we don't have to explicitly call 'CallExprHasTypeSink' here PropagateThenTcDelayed cenv overallTy env tpenv mExprAndTypeArgs vexpFlex vexpFlex.Type ExprAtomicFlag.Atomic otherDelayed - // Value get - | _ -> + // Value get + | _ -> let _, vexp, isSpecial, _, _, tpenv = TcVal true cenv env tpenv vref None (Some afterResolution) mItem let vexpFlex = (if isSpecial then MakeApplicableExprNoFlex cenv vexp else MakeApplicableExprWithFlex cenv env vexp) PropagateThenTcDelayed cenv overallTy env tpenv mItem vexpFlex vexpFlex.Type ExprAtomicFlag.Atomic delayed - + | Item.Property (nm, pinfos) -> if isNil pinfos then error (InternalError ("Unexpected error: empty property list", mItem)) // if there are both intrinsics and extensions in pinfos, intrinsics will be listed first. // by looking at List.Head we are letting the intrinsics determine indexed/non-indexed let pinfo = List.head pinfos - let _, tyargsOpt, args, delayed, tpenv = - if pinfo.IsIndexer - then GetMemberApplicationArgs delayed cenv env tpenv + let _, tyargsOpt, args, delayed, tpenv = + if pinfo.IsIndexer + then GetMemberApplicationArgs delayed cenv env tpenv else ExprAtomicFlag.Atomic, None, [mkSynUnit mItem], delayed, tpenv if not pinfo.IsStatic then error (Error (FSComp.SR.tcPropertyIsNotStatic nm, mItem)) - match delayed with + match delayed with | DelayedSet(e2, mStmt) :: otherDelayed -> if not (isNil otherDelayed) then error(Error(FSComp.SR.tcInvalidAssignment(), mStmt)) - // Static Property Set (possibly indexer) + // Static Property Set (possibly indexer) UnifyTypes cenv env mStmt overallTy g.unit_ty let meths = pinfos |> SettersOfPropInfos - if meths.IsEmpty then + if meths.IsEmpty then let meths = pinfos |> GettersOfPropInfos let isByrefMethReturnSetter = meths |> List.exists (function (_,Some pinfo) -> isByrefTy g (pinfo.GetPropertyType(cenv.amap,mItem)) | _ -> false) if not isByrefMethReturnSetter then @@ -8060,56 +8084,56 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte errorR (Error (FSComp.SR.tcPropertyCannotBeSet1 nm, mItem)) // Note: static calls never mutate a struct object argument TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt [] mStmt mItem nm ad NeverMutates true meths afterResolution NormalValUse (args@[e2]) ExprAtomicFlag.NonAtomic otherDelayed - | _ -> - // Static Property Get (possibly indexer) + | _ -> + // Static Property Get (possibly indexer) let meths = pinfos |> GettersOfPropInfos if isNil meths then error (Error (FSComp.SR.tcPropertyIsNotReadable nm, mItem)) // Note: static calls never mutate a struct object argument TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt [] mItem mItem nm ad NeverMutates true meths afterResolution NormalValUse args ExprAtomicFlag.Atomic delayed - | Item.ILField finfo -> + | Item.ILField finfo -> ILFieldStaticChecks g cenv.amap cenv.infoReader ad mItem finfo let fref = finfo.ILFieldRef let exprty = finfo.FieldType(cenv.amap, mItem) - match delayed with + match delayed with | DelayedSet(e2, mStmt) :: _delayed' -> UnifyTypes cenv env mStmt overallTy g.unit_ty // Always allow subsumption on assignment to fields let e2', tpenv = TcExprFlex cenv true false exprty env tpenv e2 let expr = BuildILStaticFieldSet mStmt finfo e2' expr, tpenv - | _ -> - // Get static IL field - let expr = - match finfo.LiteralValue with - | Some lit -> - Expr.Const (TcFieldInit mItem lit, mItem, exprty) - | None -> + | _ -> + // Get static IL field + let expr = + match finfo.LiteralValue with + | Some lit -> + Expr.Const (TcFieldInit mItem lit, mItem, exprty) + | None -> let isValueType = finfo.IsValueType let valu = if isValueType then AsValue else AsObject - // The empty instantiation on the fspec is OK, since we make the correct fspec in IlxGen.GenAsm - // This ensures we always get the type instantiation right when doing this from - // polymorphic code, after inlining etc. + // The empty instantiation on the fspec is OK, since we make the correct fspec in IlxGen.GenAsm + // This ensures we always get the type instantiation right when doing this from + // polymorphic code, after inlining etc. let fspec = mkILFieldSpec(fref, mkILNamedTy valu fref.DeclaringTypeRef []) - // Add an I_nop if this is an initonly field to make sure we never recognize it as an lvalue. See mkExprAddrOfExpr. + // Add an I_nop if this is an initonly field to make sure we never recognize it as an lvalue. See mkExprAddrOfExpr. mkAsmExpr ([ mkNormalLdsfld fspec ] @ (if finfo.IsInitOnly then [ AI_nop ] else []), finfo.TypeInst, [], [exprty], mItem) PropagateThenTcDelayed cenv overallTy env tpenv mItem (MakeApplicableExprWithFlex cenv env expr) exprty ExprAtomicFlag.Atomic delayed - | Item.RecdField rfinfo -> - // Get static F# field or literal + | Item.RecdField rfinfo -> + // Get static F# field or literal CheckRecdFieldInfoAccessible cenv.amap mItem ad rfinfo if not rfinfo.IsStatic then error (Error (FSComp.SR.tcFieldIsNotStatic(rfinfo.Name), mItem)) - CheckRecdFieldInfoAttributes g rfinfo mItem |> CommitOperationResult + CheckRecdFieldInfoAttributes g rfinfo mItem |> CommitOperationResult let fref = rfinfo.RecdFieldRef let fieldTy = rfinfo.FieldType - match delayed with + match delayed with | DelayedSet(e2, mStmt) :: otherDelayed -> if not (isNil otherDelayed) then error(Error(FSComp.SR.tcInvalidAssignment(), mStmt)) - - // Set static F# field + + // Set static F# field CheckRecdFieldMutation mItem env.DisplayEnv rfinfo UnifyTypes cenv env mStmt overallTy g.unit_ty let fieldTy = rfinfo.FieldType @@ -8119,20 +8143,20 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte expr, tpenv | _ -> let exprty = fieldTy - let expr = - match rfinfo.LiteralValue with - // Get literal F# field + let expr = + match rfinfo.LiteralValue with + // Get literal F# field | Some lit -> Expr.Const (lit, mItem, exprty) - // Get static F# field - | None -> mkStaticRecdFieldGet (fref, rfinfo.TypeInst, mItem) + // Get static F# field + | None -> mkStaticRecdFieldGet (fref, rfinfo.TypeInst, mItem) PropagateThenTcDelayed cenv overallTy env tpenv mItem (MakeApplicableExprWithFlex cenv env expr) exprty ExprAtomicFlag.Atomic delayed - | Item.Event einfo -> - // Instance IL event (fake up event-as-value) + | Item.Event einfo -> + // Instance IL event (fake up event-as-value) TcEventValueThen cenv overallTy env tpenv mItem mItem None einfo delayed - - | Item.CustomOperation (nm, usageTextOpt, _) -> - // 'delayed' is about to be dropped on the floor, first do rudimentary checking to get name resolutions in its body + + | Item.CustomOperation (nm, usageTextOpt, _) -> + // 'delayed' is about to be dropped on the floor, first do rudimentary checking to get name resolutions in its body RecordNameAndTypeResolutions_IdeallyWithoutHavingOtherEffects_Delayed cenv env tpenv delayed match usageTextOpt() with | None -> error(Error(FSComp.SR.tcCustomOperationNotUsedCorrectly nm, mItem)) @@ -8142,11 +8166,11 @@ and TcItemThen cenv overallTy env tpenv (tinstEnclosing, item, mItem, rest, afte //------------------------------------------------------------------------- // Typecheck "expr.A.B.C ... " constructs -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- and GetSynMemberApplicationArgs delayed tpenv = - match delayed with - | DelayedApp (atomicFlag, arg, _) :: otherDelayed -> + match delayed with + | DelayedApp (atomicFlag, arg, _) :: otherDelayed -> atomicFlag, None, [arg], otherDelayed, tpenv | DelayedTypeApp(tyargs, mTypeArgs, _) :: DelayedApp (atomicFlag, arg, _mExprAndArg) :: otherDelayed -> (atomicFlag, Some (tyargs, mTypeArgs), [arg], otherDelayed, tpenv) @@ -8157,107 +8181,107 @@ and GetSynMemberApplicationArgs delayed tpenv = and TcMemberTyArgsOpt cenv env tpenv tyargsOpt = - match tyargsOpt with + match tyargsOpt with | None -> None, tpenv - | Some (tyargs, mTypeArgs) -> + | Some (tyargs, mTypeArgs) -> let tyargsChecked, tpenv = TcTypesOrMeasures None cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv tyargs mTypeArgs Some tyargsChecked, tpenv and GetMemberApplicationArgs delayed cenv env tpenv = - let atomicFlag, tyargsOpt, args, delayed, tpenv = GetSynMemberApplicationArgs delayed tpenv + let atomicFlag, tyargsOpt, args, delayed, tpenv = GetSynMemberApplicationArgs delayed tpenv let tyArgsOptChecked, tpenv = TcMemberTyArgsOpt cenv env tpenv tyargsOpt - atomicFlag, tyArgsOptChecked, args, delayed, tpenv + atomicFlag, tyArgsOptChecked, args, delayed, tpenv and TcLookupThen cenv overallTy env tpenv mObjExpr objExpr objExprTy longId delayed mExprAndLongId = let objArgs = [objExpr] let ad = env.eAccessRights - // 'base' calls use a different resolution strategy when finding methods. - let findFlag = + // 'base' calls use a different resolution strategy when finding methods. + let findFlag = let baseCall = IsBaseCall objArgs (if baseCall then PreferOverrides else IgnoreOverrides) - - // Canonicalize inference problem prior to '.' lookup on variable types - if isTyparTy cenv.g objExprTy then + + // Canonicalize inference problem prior to '.' lookup on variable types + if isTyparTy cenv.g objExprTy then ConstraintSolver.CanonicalizePartialInferenceProblem cenv.css env.DisplayEnv mExprAndLongId (freeInTypeLeftToRight cenv.g false objExprTy) - + let item, mItem, rest, afterResolution = ResolveExprDotLongIdentAndComputeRange cenv.tcSink cenv.nameResolver mExprAndLongId ad env.NameEnv objExprTy longId TypeNameResolutionInfo.Default findFlag false let mExprAndItem = unionRanges mObjExpr mItem let delayed = delayRest rest mExprAndItem delayed match item with - | Item.MethodGroup (methodName, minfos, _) -> - let atomicFlag, tyargsOpt, args, delayed, tpenv = GetSynMemberApplicationArgs delayed tpenv - // We pass PossiblyMutates here because these may actually mutate a value type object - // To get better warnings we special case some of the few known mutate-a-struct method names + | Item.MethodGroup (methodName, minfos, _) -> + let atomicFlag, tyargsOpt, args, delayed, tpenv = GetSynMemberApplicationArgs delayed tpenv + // We pass PossiblyMutates here because these may actually mutate a value type object + // To get better warnings we special case some of the few known mutate-a-struct method names let mutates = (if methodName = "MoveNext" || methodName = "GetNextArg" then DefinitelyMutates else PossiblyMutates) #if !NO_EXTENSIONTYPING - match TryTcMethodAppToStaticConstantArgs cenv env tpenv (minfos, tyargsOpt, mExprAndItem, mItem) with - | Some minfoAfterStaticArguments -> + match TryTcMethodAppToStaticConstantArgs cenv env tpenv (minfos, tyargsOpt, mExprAndItem, mItem) with + | Some minfoAfterStaticArguments -> // Replace the resolution including the static parameters, plus the extra information about the original method info let item = Item.MethodGroup(methodName, [minfoAfterStaticArguments], Some minfos.[0]) - CallNameResolutionSinkReplacing cenv.tcSink (mExprAndItem, env.NameEnv, item, [], ItemOccurence.Use, env.eAccessRights) + CallNameResolutionSinkReplacing cenv.tcSink (mExprAndItem, env.NameEnv, item, [], ItemOccurence.Use, env.eAccessRights) - TcMethodApplicationThen cenv env overallTy None tpenv None objArgs mExprAndItem mItem methodName ad mutates false [(minfoAfterStaticArguments, None)] afterResolution NormalValUse args atomicFlag delayed - | None -> - if not minfos.IsEmpty && minfos.[0].ProvidedStaticParameterInfo.IsSome then + TcMethodApplicationThen cenv env overallTy None tpenv None objArgs mExprAndItem mItem methodName ad mutates false [(minfoAfterStaticArguments, None)] afterResolution NormalValUse args atomicFlag delayed + | None -> + if not minfos.IsEmpty && minfos.[0].ProvidedStaticParameterInfo.IsSome then error(Error(FSComp.SR.etMissingStaticArgumentsToMethod(), mItem)) #endif let tyargsOpt, tpenv = TcMemberTyArgsOpt cenv env tpenv tyargsOpt - let meths = minfos |> List.map (fun minfo -> minfo, None) + let meths = minfos |> List.map (fun minfo -> minfo, None) - TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mExprAndItem mItem methodName ad mutates false meths afterResolution NormalValUse args atomicFlag delayed + TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mExprAndItem mItem methodName ad mutates false meths afterResolution NormalValUse args atomicFlag delayed | Item.Property (nm, pinfos) -> - // Instance property + // Instance property if isNil pinfos then error (InternalError ("Unexpected error: empty property list", mItem)) // if there are both intrinsics and extensions in pinfos, intrinsics will be listed first. // by looking at List.Head we are letting the intrinsics determine indexed/non-indexed let pinfo = List.head pinfos - let atomicFlag, tyargsOpt, args, delayed, tpenv = + let atomicFlag, tyargsOpt, args, delayed, tpenv = if pinfo.IsIndexer - then GetMemberApplicationArgs delayed cenv env tpenv + then GetMemberApplicationArgs delayed cenv env tpenv else ExprAtomicFlag.Atomic, None, [mkSynUnit mItem], delayed, tpenv if pinfo.IsStatic then error (Error (FSComp.SR.tcPropertyIsStatic nm, mItem)) - - match delayed with + + match delayed with | DelayedSet(e2, mStmt) :: otherDelayed -> if not (isNil otherDelayed) then error(Error(FSComp.SR.tcInvalidAssignment(), mStmt)) - // Instance property setter + // Instance property setter UnifyTypes cenv env mStmt overallTy cenv.g.unit_ty let meths = SettersOfPropInfos pinfos - if meths.IsEmpty then + if meths.IsEmpty then let meths = pinfos |> GettersOfPropInfos let isByrefMethReturnSetter = meths |> List.exists (function (_,Some pinfo) -> isByrefTy cenv.g (pinfo.GetPropertyType(cenv.amap,mItem)) | _ -> false) if not isByrefMethReturnSetter then errorR (Error (FSComp.SR.tcPropertyCannotBeSet1 nm, mItem)) // x.P <- ... byref setter if isNil meths then error (Error (FSComp.SR.tcPropertyIsNotReadable nm, mItem)) - TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mExprAndItem mItem nm ad PossiblyMutates true meths afterResolution NormalValUse args atomicFlag delayed + TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mExprAndItem mItem nm ad PossiblyMutates true meths afterResolution NormalValUse args atomicFlag delayed else let args = if pinfo.IsIndexer then args else [] let mut = (if isStructTy cenv.g (tyOfExpr cenv.g objExpr) then DefinitelyMutates else PossiblyMutates) - TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mStmt mItem nm ad mut true meths afterResolution NormalValUse (args @ [e2]) atomicFlag [] - | _ -> + TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mStmt mItem nm ad mut true meths afterResolution NormalValUse (args @ [e2]) atomicFlag [] + | _ -> // Instance property getter let meths = GettersOfPropInfos pinfos if isNil meths then error (Error (FSComp.SR.tcPropertyIsNotReadable nm, mItem)) - TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mExprAndItem mItem nm ad PossiblyMutates true meths afterResolution NormalValUse args atomicFlag delayed - + TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mExprAndItem mItem nm ad PossiblyMutates true meths afterResolution NormalValUse args atomicFlag delayed + | Item.RecdField rfinfo -> - // Get or set instance F# field or literal + // Get or set instance F# field or literal RecdFieldInstanceChecks cenv.g cenv.amap ad mItem rfinfo let tgtTy = rfinfo.DeclaringType let valu = isStructTy cenv.g tgtTy - AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css mItem NoTrace tgtTy objExprTy + AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css mItem NoTrace tgtTy objExprTy let objExpr = if valu then objExpr else mkCoerceExpr(objExpr, tgtTy, mExprAndItem, objExprTy) let fieldTy = rfinfo.FieldType - match delayed with + match delayed with | DelayedSet(e2, mStmt) :: otherDelayed -> - // Mutable value set: 'v <- e' + // Mutable value set: 'v <- e' if not (isNil otherDelayed) then error(Error(FSComp.SR.tcInvalidAssignment(), mItem)) CheckRecdFieldMutation mItem env.DisplayEnv rfinfo UnifyTypes cenv env mStmt overallTy cenv.g.unit_ty @@ -8267,51 +8291,51 @@ and TcLookupThen cenv overallTy env tpenv mObjExpr objExpr objExprTy longId dela | _ -> - // Instance F# Record or Class field + // Instance F# Record or Class field let objExpr' = mkRecdFieldGet cenv.g (objExpr, rfinfo.RecdFieldRef, rfinfo.TypeInst, mExprAndItem) - PropagateThenTcDelayed cenv overallTy env tpenv mExprAndItem (MakeApplicableExprWithFlex cenv env objExpr') fieldTy ExprAtomicFlag.Atomic delayed - + PropagateThenTcDelayed cenv overallTy env tpenv mExprAndItem (MakeApplicableExprWithFlex cenv env objExpr') fieldTy ExprAtomicFlag.Atomic delayed + | Item.AnonRecdField (anonInfo, tinst, n, _) -> let tgty = TType_anon (anonInfo, tinst) - AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css mItem NoTrace tgty objExprTy + AddCxTypeMustSubsumeType ContextInfo.NoContext env.DisplayEnv cenv.css mItem NoTrace tgty objExprTy let fieldTy = List.item n tinst - match delayed with + match delayed with | DelayedSet _ :: _otherDelayed -> error(Error(FSComp.SR.tcInvalidAssignment(),mItem)) | _ -> - // Instance F# Anonymous Record + // Instance F# Anonymous Record let objExpr' = mkAnonRecdFieldGet cenv.g (anonInfo,objExpr,tinst,n,mExprAndItem) - PropagateThenTcDelayed cenv overallTy env tpenv mExprAndItem (MakeApplicableExprWithFlex cenv env objExpr') fieldTy ExprAtomicFlag.Atomic delayed - - | Item.ILField finfo -> - // Get or set instance IL field + PropagateThenTcDelayed cenv overallTy env tpenv mExprAndItem (MakeApplicableExprWithFlex cenv env objExpr') fieldTy ExprAtomicFlag.Atomic delayed + + | Item.ILField finfo -> + // Get or set instance IL field ILFieldInstanceChecks cenv.g cenv.amap ad mItem finfo let exprty = finfo.FieldType(cenv.amap, mItem) - - match delayed with - // Set instance IL field + + match delayed with + // Set instance IL field | DelayedSet(e2, mStmt) :: _delayed' -> UnifyTypes cenv env mStmt overallTy cenv.g.unit_ty // Always allow subsumption on assignment to fields let e2', tpenv = TcExprFlex cenv true false exprty env tpenv e2 let expr = BuildILFieldSet cenv.g mStmt objExpr finfo e2' expr, tpenv - | _ -> - let expr = BuildILFieldGet cenv.g cenv.amap mExprAndItem objExpr finfo - PropagateThenTcDelayed cenv overallTy env tpenv mExprAndItem (MakeApplicableExprWithFlex cenv env expr) exprty ExprAtomicFlag.Atomic delayed + | _ -> + let expr = BuildILFieldGet cenv.g cenv.amap mExprAndItem objExpr finfo + PropagateThenTcDelayed cenv overallTy env tpenv mExprAndItem (MakeApplicableExprWithFlex cenv env expr) exprty ExprAtomicFlag.Atomic delayed - | Item.Event einfo -> - // Instance IL event (fake up event-as-value) + | Item.Event einfo -> + // Instance IL event (fake up event-as-value) TcEventValueThen cenv overallTy env tpenv mItem mExprAndItem (Some(objExpr, objExprTy)) einfo delayed - + | (Item.FakeInterfaceCtor _ | Item.DelegateCtor _) -> error (Error (FSComp.SR.tcConstructorsCannotBeFirstClassValues(), mItem)) | _ -> error (Error (FSComp.SR.tcSyntaxFormUsedOnlyWithRecordLabelsPropertiesAndFields(), mItem)) -and TcEventValueThen cenv overallTy env tpenv mItem mExprAndItem objDetails (einfo: EventInfo) delayed = - // Instance IL event (fake up event-as-value) +and TcEventValueThen cenv overallTy env tpenv mItem mExprAndItem objDetails (einfo: EventInfo) delayed = + // Instance IL event (fake up event-as-value) let nm = einfo.EventName let ad = env.eAccessRights - match objDetails, einfo.IsStatic with + match objDetails, einfo.IsStatic with | Some _, true -> error (Error (FSComp.SR.tcEventIsStatic nm, mItem)) | None, false -> error (Error (FSComp.SR.tcEventIsNotStatic nm, mItem)) | _ -> () @@ -8320,21 +8344,21 @@ and TcEventValueThen cenv overallTy env tpenv mItem mExprAndItem objDetails (ein let (SigOfFunctionForDelegate(invokeMethInfo, compiledViewOfDelArgTys, _, _)) = GetSigOfFunctionForDelegate cenv.infoReader delegateType mItem ad let objArgs = Option.toList (Option.map fst objDetails) MethInfoChecks cenv.g cenv.amap true None objArgs env.eAccessRights mItem invokeMethInfo - - // This checks for and drops the 'object' sender + + // This checks for and drops the 'object' sender let argsTy = ArgsTypOfEventInfo cenv.infoReader mItem ad einfo if not (slotSigHasVoidReturnTy (invokeMethInfo.GetSlotSig(cenv.amap, mItem))) then errorR (nonStandardEventError einfo.EventName mItem) let delEventTy = mkIEventType cenv.g delegateType argsTy let bindObjArgs f = - match objDetails with + match objDetails with | None -> f [] - | Some (objExpr, objExprTy) -> mkCompGenLetIn mItem "eventTarget" objExprTy objExpr (fun (_, ve) -> f [ve]) + | Some (objExpr, objExprTy) -> mkCompGenLetIn mItem "eventTarget" objExprTy objExpr (fun (_, ve) -> f [ve]) - // Bind the object target expression to make sure we only run its side effects once, and to make - // sure if it's a mutable reference then we dereference it - see FSharp 1.0 bug 942 - let expr = - bindObjArgs (fun objVars -> + // Bind the object target expression to make sure we only run its side effects once, and to make + // sure if it's a mutable reference then we dereference it - see FSharp 1.0 bug 942 + let expr = + bindObjArgs (fun objVars -> // EventHelper ((fun d -> e.add_X(d)), (fun d -> e.remove_X(d)), (fun f -> new 'Delegate(f))) mkCallCreateEvent cenv.g mItem delegateType argsTy (let dv, de = mkCompGenLocal mItem "eventDelegate" delegateType @@ -8349,175 +8373,175 @@ and TcEventValueThen cenv overallTy env tpenv mItem mExprAndItem objDetails (ein mkLambda mItem fv (createExpr, delegateType))) let exprty = delEventTy - PropagateThenTcDelayed cenv overallTy env tpenv mExprAndItem (MakeApplicableExprNoFlex cenv expr) exprty ExprAtomicFlag.Atomic delayed - + PropagateThenTcDelayed cenv overallTy env tpenv mExprAndItem (MakeApplicableExprNoFlex cenv expr) exprty ExprAtomicFlag.Atomic delayed + //------------------------------------------------------------------------- // Method uses can calls -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- /// Typecheck method/member calls and uses of members as first-class values. -and TcMethodApplicationThen - cenv +and TcMethodApplicationThen + cenv env - overallTy // The type of the overall expression including "delayed". The method "application" may actually be a use of a member as - // a first-class function value, when this would be a function type. + overallTy // The type of the overall expression including "delayed". The method "application" may actually be a use of a member as + // a first-class function value, when this would be a function type. objTyOpt // methodType - tpenv - callerTyArgs // The return type of the overall expression including "delayed" - objArgs // The 'obj' arguments in obj.M(...) and obj.M, if any + tpenv + callerTyArgs // The return type of the overall expression including "delayed" + objArgs // The 'obj' arguments in obj.M(...) and obj.M, if any m // The range of the object argument or whole application. We immediately union this with the range of the arguments mItem // The range of the item that resolved to the method name - methodName // string, name of the method - ad // accessibility rights of the caller - mut // what do we know/assume about whether this method will mutate or not? - isProp // is this a property call? Used for better error messages and passed to BuildMethodCall - meths // the set of methods we may be calling + methodName // string, name of the method + ad // accessibility rights of the caller + mut // what do we know/assume about whether this method will mutate or not? + isProp // is this a property call? Used for better error messages and passed to BuildMethodCall + meths // the set of methods we may be calling afterResolution // do we need to notify sink after overload resolution - isSuperInit // is this a special invocation, e.g. a super-class constructor call. Passed through to BuildMethodCall - args // the _syntactic_ method arguments, not yet type checked. - atomicFlag // is the expression atomic or not? - delayed // further lookups and applications that follow this + isSuperInit // is this a special invocation, e.g. a super-class constructor call. Passed through to BuildMethodCall + args // the _syntactic_ method arguments, not yet type checked. + atomicFlag // is the expression atomic or not? + delayed // further lookups and applications that follow this = - // Nb. args is always of List.length <= 1 except for indexed setters, when it is 2 - let mWholeExpr = (m, args) ||> List.fold (fun m arg -> unionRanges m arg.Range) + // Nb. args is always of List.length <= 1 except for indexed setters, when it is 2 + let mWholeExpr = (m, args) ||> List.fold (fun m arg -> unionRanges m arg.Range) - // Work out if we know anything about the return type of the overall expression. If there are any delayed - // lookups then we don't know anything. + // Work out if we know anything about the return type of the overall expression. If there are any delayed + // lookups then we don't know anything. let exprTy = if isNil delayed then overallTy else NewInferenceType () - // Call the helper below to do the real checking - let (expr, attributeAssignedNamedItems, delayed), tpenv = + // Call the helper below to do the real checking + let (expr, attributeAssignedNamedItems, delayed), tpenv = TcMethodApplication false cenv env tpenv callerTyArgs objArgs mWholeExpr mItem methodName objTyOpt ad mut isProp meths afterResolution isSuperInit args exprTy delayed - // Give errors if some things couldn't be assigned - if not (isNil attributeAssignedNamedItems) then + // Give errors if some things couldn't be assigned + if not (isNil attributeAssignedNamedItems) then let (CallerNamedArg(id, _)) = List.head attributeAssignedNamedItems errorR(Error(FSComp.SR.tcNamedArgumentDidNotMatch(id.idText), id.idRange)) - // Resolve the "delayed" lookups + // Resolve the "delayed" lookups let exprty = (tyOfExpr cenv.g expr) - PropagateThenTcDelayed cenv overallTy env tpenv mWholeExpr (MakeApplicableExprNoFlex cenv expr) exprty atomicFlag delayed + PropagateThenTcDelayed cenv overallTy env tpenv mWholeExpr (MakeApplicableExprNoFlex cenv expr) exprty atomicFlag delayed /// Infer initial type information at the callsite from the syntax of an argument, prior to overload resolution. and GetNewInferenceTypeForMethodArg cenv env tpenv x = - match x with + match x with | SynExprParen(a, _, _, _) -> GetNewInferenceTypeForMethodArg cenv env tpenv a | SynExpr.AddressOf (true, a, _, m) -> mkByrefTyWithInference cenv.g (GetNewInferenceTypeForMethodArg cenv env tpenv a) (NewByRefKindInferenceType cenv.g m) | SynExpr.Lambda (_, _, _, a, _, _) -> mkFunTy (NewInferenceType ()) (GetNewInferenceTypeForMethodArg cenv env tpenv a) - | SynExpr.Quote (_, raw, a, _, _) -> + | SynExpr.Quote (_, raw, a, _, _) -> if raw then mkRawQuotedExprTy cenv.g else mkQuotedExprTy cenv.g (GetNewInferenceTypeForMethodArg cenv env tpenv a) | _ -> NewInferenceType () -/// Method calls, property lookups, attribute constructions etc. get checked through here -and TcMethodApplication - isCheckingAttributeCall - cenv - env - tpenv +/// Method calls, property lookups, attribute constructions etc. get checked through here +and TcMethodApplication + isCheckingAttributeCall + cenv + env + tpenv tyargsOpt - objArgs - mMethExpr // range of the entire method expression + objArgs + mMethExpr // range of the entire method expression mItem - methodName + methodName (objTyOpt: TType option) - ad - mut - isProp - calledMethsAndProps + ad + mut + isProp + calledMethsAndProps afterResolution - isSuperInit - curriedCallerArgs - exprTy + isSuperInit + curriedCallerArgs + exprTy delayed = let denv = env.DisplayEnv - let isSimpleFormalArg (isParamArrayArg, _isInArg, isOutArg, optArgInfo: OptionalArgInfo, callerInfo: CallerInfo, _reflArgInfo: ReflectedArgInfo) = + let isSimpleFormalArg (isParamArrayArg, _isInArg, isOutArg, optArgInfo: OptionalArgInfo, callerInfo: CallerInfo, _reflArgInfo: ReflectedArgInfo) = not isParamArrayArg && not isOutArg && not optArgInfo.IsOptional && callerInfo = NoCallerInfo - + let callerObjArgTys = objArgs |> List.map (tyOfExpr cenv.g) let calledMeths = calledMethsAndProps |> List.map fst - // Uses of curried members are ALWAYS treated as if they are first class uses of members. + // Uses of curried members are ALWAYS treated as if they are first class uses of members. // Curried members may not be overloaded (checked at use-site for curried members brought into scope through extension members) - let curriedCallerArgs, exprTy, delayed = - match calledMeths with + let curriedCallerArgs, exprTy, delayed = + match calledMeths with | [calledMeth] when not isProp && calledMeth.NumArgs.Length > 1 -> [], NewInferenceType (), [ for x in curriedCallerArgs -> DelayedApp(ExprAtomicFlag.NonAtomic, x, x.Range) ] @ delayed | _ when not isProp && calledMeths |> List.exists (fun calledMeth -> calledMeth.NumArgs.Length > 1) -> // This condition should only apply when multiple conflicting curried extension members are brought into scope error(Error(FSComp.SR.tcOverloadsCannotHaveCurriedArguments(), mMethExpr)) - | _ -> + | _ -> curriedCallerArgs, exprTy, delayed - let candidateMethsAndProps = - match calledMethsAndProps |> List.filter (fun (meth, _prop) -> IsMethInfoAccessible cenv.amap mItem ad meth) with - | [] -> calledMethsAndProps - | accessibleMeths -> accessibleMeths + let candidateMethsAndProps = + match calledMethsAndProps |> List.filter (fun (meth, _prop) -> IsMethInfoAccessible cenv.amap mItem ad meth) with + | [] -> calledMethsAndProps + | accessibleMeths -> accessibleMeths let candidates = candidateMethsAndProps |> List.map fst - // Split the syntactic arguments (if any) into named and unnamed parameters + // Split the syntactic arguments (if any) into named and unnamed parameters // // In one case (the second "single named item" rule) we delay the application of a // argument until we've produced a lambda that detuples an input tuple - let curriedCallerArgsOpt, unnamedDelayedCallerArgExprOpt, exprTy = - match curriedCallerArgs with - | [] -> + let curriedCallerArgsOpt, unnamedDelayedCallerArgExprOpt, exprTy = + match curriedCallerArgs with + | [] -> None, None, exprTy - | _ -> - let unnamedCurriedCallerArgs, namedCurriedCallerArgs = curriedCallerArgs |> List.map GetMethodArgs |> List.unzip - - // There is an mismatch when _uses_ of indexed property setters in the tc.fs code that calls this function. + | _ -> + let unnamedCurriedCallerArgs, namedCurriedCallerArgs = curriedCallerArgs |> List.map GetMethodArgs |> List.unzip + + // There is an mismatch when _uses_ of indexed property setters in the tc.fs code that calls this function. // The arguments are passed as if they are curried with arity [numberOfIndexParameters;1], however in the TAST, indexed property setters // are uncurried and have arity [numberOfIndexParameters+1]. // - // Here we work around this mismatch by crunching all property argument lists to uncurried form. + // Here we work around this mismatch by crunching all property argument lists to uncurried form. // Ideally the problem needs to be solved at its root cause at the callsites to this function - let unnamedCurriedCallerArgs, namedCurriedCallerArgs = - if isProp then + let unnamedCurriedCallerArgs, namedCurriedCallerArgs = + if isProp then [List.concat unnamedCurriedCallerArgs], [List.concat namedCurriedCallerArgs] - else + else unnamedCurriedCallerArgs, namedCurriedCallerArgs - + let MakeUnnamedCallerArgInfo x = (x, GetNewInferenceTypeForMethodArg cenv env tpenv x, x.Range) - // "single named item" rule. This is where we have a single accessible method - // member x.M(arg1) - // being used with - // x.M (x, y) - // Without this rule this requires - // x.M ((x, y)) - match candidates with - | [calledMeth] - when (namedCurriedCallerArgs |> List.forall isNil && + // "single named item" rule. This is where we have a single accessible method + // member x.M(arg1) + // being used with + // x.M (x, y) + // Without this rule this requires + // x.M ((x, y)) + match candidates with + | [calledMeth] + when (namedCurriedCallerArgs |> List.forall isNil && let curriedCalledArgs = calledMeth.GetParamAttribs(cenv.amap, mItem) curriedCalledArgs.Length = 1 && - curriedCalledArgs.Head.Length = 1 && + curriedCalledArgs.Head.Length = 1 && curriedCalledArgs.Head.Head |> isSimpleFormalArg) -> let unnamedCurriedCallerArgs = curriedCallerArgs |> List.map (MakeUnnamedCallerArgInfo >> List.singleton) let namedCurriedCallerArgs = namedCurriedCallerArgs |> List.map (fun _ -> []) (Some (unnamedCurriedCallerArgs, namedCurriedCallerArgs), None, exprTy) - // "single named item" rule. This is where we have a single accessible method - // member x.M(arg1, arg2) - // being used with + // "single named item" rule. This is where we have a single accessible method + // member x.M(arg1, arg2) + // being used with // x.M p - // We typecheck this as if it has been written "(fun (v1, v2) -> x.M(v1, v2)) p" - // Without this rule this requires - // x.M (fst p, snd p) - | [calledMeth] - when (namedCurriedCallerArgs |> List.forall isNil && + // We typecheck this as if it has been written "(fun (v1, v2) -> x.M(v1, v2)) p" + // Without this rule this requires + // x.M (fst p, snd p) + | [calledMeth] + when (namedCurriedCallerArgs |> List.forall isNil && unnamedCurriedCallerArgs.Length = 1 && - unnamedCurriedCallerArgs.Head.Length = 1 && + unnamedCurriedCallerArgs.Head.Length = 1 && let curriedCalledArgs = calledMeth.GetParamAttribs(cenv.amap, mItem) curriedCalledArgs.Length = 1 && curriedCalledArgs.Head.Length > 1 && @@ -8525,12 +8549,12 @@ and TcMethodApplication // The call lambda has function type let exprTy = mkFunTy (NewInferenceType ()) exprTy - + (None, Some unnamedCurriedCallerArgs.Head.Head, exprTy) | _ -> let unnamedCurriedCallerArgs = unnamedCurriedCallerArgs |> List.mapSquared MakeUnnamedCallerArgInfo - let namedCurriedCallerArgs = namedCurriedCallerArgs |> List.mapSquared (fun (isOpt, nm, x) -> + let namedCurriedCallerArgs = namedCurriedCallerArgs |> List.mapSquared (fun (isOpt, nm, x) -> let ty = GetNewInferenceTypeForMethodArg cenv env tpenv x // #435263: compiler crash with .net optional parameters and F# optional syntax // named optional arguments should always have option type @@ -8543,7 +8567,7 @@ and TcMethodApplication let CalledMethHasSingleArgumentGroupOfThisLength n (calledMeth: MethInfo) = let curriedMethodArgAttribs = calledMeth.GetParamAttribs(cenv.amap, mItem) - curriedMethodArgAttribs.Length = 1 && + curriedMethodArgAttribs.Length = 1 && curriedMethodArgAttribs.Head.Length = n let GenerateMatchingSimpleArgumentTypes (calledMeth: MethInfo) = @@ -8553,8 +8577,8 @@ and TcMethodApplication let UnifyMatchingSimpleArgumentTypes exprTy (calledMeth: MethInfo) = let curriedArgTys = GenerateMatchingSimpleArgumentTypes calledMeth - let returnTy = - (exprTy, curriedArgTys) ||> List.fold (fun exprTy argTys -> + let returnTy = + (exprTy, curriedArgTys) ||> List.fold (fun exprTy argTys -> let domainTy, resultTy = UnifyFunctionType None cenv denv mMethExpr exprTy UnifyTypes cenv env mMethExpr domainTy (mkRefTupledTy cenv.g argTys) resultTy) @@ -8563,71 +8587,71 @@ and TcMethodApplication if isProp && Option.isNone curriedCallerArgsOpt then error(Error(FSComp.SR.parsIndexerPropertyRequiresAtLeastOneArgument(), mItem)) - // STEP 1. UnifyUniqueOverloading. This happens BEFORE we type check the arguments. - // Extract what we know about the caller arguments, either type-directed if - // no arguments are given or else based on the syntax of the arguments. - let uniquelyResolved, preArgumentTypeCheckingCalledMethGroup = + // STEP 1. UnifyUniqueOverloading. This happens BEFORE we type check the arguments. + // Extract what we know about the caller arguments, either type-directed if + // no arguments are given or else based on the syntax of the arguments. + let uniquelyResolved, preArgumentTypeCheckingCalledMethGroup = let dummyExpr = mkSynUnit mItem - - // Build the CallerArg values for the caller's arguments. - // Fake up some arguments if this is the use of a method as a first class function - let unnamedCurriedCallerArgs, namedCurriedCallerArgs, returnTy = - - match curriedCallerArgsOpt, candidates with - // "single named item" rule. This is where we have a single accessible method - // member x.M(arg1, ..., argN) - // being used in a first-class way, i.e. - // x.M - // Because there is only one accessible method info available based on the name of the item - // being accessed we know the number of arguments the first class use of this - // method will take. Optional and out args are _not_ included, which means they will be resolved - // to their default values (for optionals) and be part of the return tuple (for out args). - | None, [calledMeth] -> + + // Build the CallerArg values for the caller's arguments. + // Fake up some arguments if this is the use of a method as a first class function + let unnamedCurriedCallerArgs, namedCurriedCallerArgs, returnTy = + + match curriedCallerArgsOpt, candidates with + // "single named item" rule. This is where we have a single accessible method + // member x.M(arg1, ..., argN) + // being used in a first-class way, i.e. + // x.M + // Because there is only one accessible method info available based on the name of the item + // being accessed we know the number of arguments the first class use of this + // method will take. Optional and out args are _not_ included, which means they will be resolved + // to their default values (for optionals) and be part of the return tuple (for out args). + | None, [calledMeth] -> let curriedArgTys, returnTy = UnifyMatchingSimpleArgumentTypes exprTy calledMeth - let unnamedCurriedCallerArgs = curriedArgTys |> List.mapSquared (fun ty -> CallerArg(ty, mMethExpr, false, dummyExpr)) + let unnamedCurriedCallerArgs = curriedArgTys |> List.mapSquared (fun ty -> CallerArg(ty, mMethExpr, false, dummyExpr)) let namedCurriedCallerArgs = unnamedCurriedCallerArgs |> List.map (fun _ -> []) unnamedCurriedCallerArgs, namedCurriedCallerArgs, returnTy - - // "type directed" rule for first-class uses of ambiguous methods. - // By context we know a type for the input argument. If it's a tuple - // this gives us the a potential number of arguments expected. Indeed even if it's a variable - // type we assume the number of arguments is just "1". + + // "type directed" rule for first-class uses of ambiguous methods. + // By context we know a type for the input argument. If it's a tuple + // this gives us the a potential number of arguments expected. Indeed even if it's a variable + // type we assume the number of arguments is just "1". | None, _ -> - + let domainTy, returnTy = UnifyFunctionType None cenv denv mMethExpr exprTy 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 + let argTys = + if candidates |> List.exists (CalledMethHasSingleArgumentGroupOfThisLength argTys.Length) then argTys - else + else [domainTy] let unnamedCurriedCallerArgs = [argTys |> List.map (fun ty -> CallerArg(ty, mMethExpr, false, dummyExpr)) ] let namedCurriedCallerArgs = unnamedCurriedCallerArgs |> List.map (fun _ -> []) unnamedCurriedCallerArgs, namedCurriedCallerArgs, returnTy - | Some (unnamedCurriedCallerArgs, namedCurriedCallerArgs), _ -> + | Some (unnamedCurriedCallerArgs, namedCurriedCallerArgs), _ -> let unnamedCurriedCallerArgs = unnamedCurriedCallerArgs |> List.mapSquared (fun (argExpr, argTy, mArg) -> CallerArg(argTy, mArg, false, argExpr)) - let namedCurriedCallerArgs = namedCurriedCallerArgs |> List.mapSquared (fun (id, isOpt, argExpr, argTy, mArg) -> CallerNamedArg(id, CallerArg(argTy, mArg, isOpt, argExpr))) + let namedCurriedCallerArgs = namedCurriedCallerArgs |> List.mapSquared (fun (id, isOpt, argExpr, argTy, mArg) -> CallerNamedArg(id, CallerArg(argTy, mArg, isOpt, argExpr))) unnamedCurriedCallerArgs, namedCurriedCallerArgs, exprTy let callerArgCounts = (List.sumBy List.length unnamedCurriedCallerArgs, List.sumBy List.length namedCurriedCallerArgs) let callerArgs = { Unnamed = unnamedCurriedCallerArgs; Named = namedCurriedCallerArgs } - let makeOneCalledMeth (minfo, pinfoOpt, usesParamArrayConversion) = + let makeOneCalledMeth (minfo, pinfoOpt, usesParamArrayConversion) = let minst = FreshenMethInfo mItem minfo - let callerTyArgs = - match tyargsOpt with + let callerTyArgs = + match tyargsOpt with | Some tyargs -> minfo.AdjustUserTypeInstForFSharpStyleIndexedExtensionMembers tyargs | None -> minst CalledMeth(cenv.infoReader, Some(env.NameEnv), isCheckingAttributeCall, FreshenMethInfo, mMethExpr, ad, minfo, minst, callerTyArgs, pinfoOpt, callerObjArgTys, callerArgs, usesParamArrayConversion, true, objTyOpt) - let preArgumentTypeCheckingCalledMethGroup = + let preArgumentTypeCheckingCalledMethGroup = [ for (minfo, pinfoOpt) in candidateMethsAndProps do - let meth = makeOneCalledMeth (minfo, pinfoOpt, true) + let meth = makeOneCalledMeth (minfo, pinfoOpt, true) yield meth - if meth.UsesParamArrayConversion then + if meth.UsesParamArrayConversion then yield makeOneCalledMeth (minfo, pinfoOpt, false) ] let uniquelyResolved = @@ -8635,36 +8659,36 @@ and TcMethodApplication uniquelyResolved, preArgumentTypeCheckingCalledMethGroup - // STEP 2. Type check arguments - let unnamedCurriedCallerArgs, namedCurriedCallerArgs, lambdaVars, returnTy, tpenv = + // STEP 2. Type check arguments + let unnamedCurriedCallerArgs, namedCurriedCallerArgs, lambdaVars, returnTy, tpenv = - // STEP 2a. First extract what we know about the caller arguments, either type-directed if - // no arguments are given or else based on the syntax of the arguments. - match curriedCallerArgsOpt with + // STEP 2a. First extract what we know about the caller arguments, either type-directed if + // no arguments are given or else based on the syntax of the arguments. + match curriedCallerArgsOpt with | None -> - let curriedArgTys, returnTy = - match candidates with - // "single named item" rule. This is where we have a single accessible method - // member x.M(arg1, ..., argN) - // being used in a first-class way, i.e. - // x.M - // Because there is only one accessible method info available based on the name of the item - // being accessed we know the number of arguments the first class use of this - // method will take. Optional and out args are _not_ included, which means they will be resolved - // to their default values (for optionals) and be part of the return tuple (for out args). - | [calledMeth] -> + let curriedArgTys, returnTy = + match candidates with + // "single named item" rule. This is where we have a single accessible method + // member x.M(arg1, ..., argN) + // being used in a first-class way, i.e. + // x.M + // Because there is only one accessible method info available based on the name of the item + // being accessed we know the number of arguments the first class use of this + // method will take. Optional and out args are _not_ included, which means they will be resolved + // to their default values (for optionals) and be part of the return tuple (for out args). + | [calledMeth] -> UnifyMatchingSimpleArgumentTypes exprTy calledMeth - | _ -> + | _ -> let domainTy, returnTy = UnifyFunctionType None cenv denv mMethExpr exprTy 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 - argTys + let argTys = + if candidates |> List.exists (CalledMethHasSingleArgumentGroupOfThisLength argTys.Length) then + argTys else [domainTy] [argTys], returnTy - + let lambdaVarsAndExprs = curriedArgTys |> List.mapiSquared (fun i j ty -> mkCompGenLocal mMethExpr ("arg"+string i+string j) ty) let unnamedCurriedCallerArgs = lambdaVarsAndExprs |> List.mapSquared (fun (_, e) -> CallerArg(tyOfExpr cenv.g e, e.Range, false, e)) let namedCurriedCallerArgs = lambdaVarsAndExprs |> List.map (fun _ -> []) @@ -8674,13 +8698,13 @@ and TcMethodApplication | Some (unnamedCurriedCallerArgs, namedCurriedCallerArgs) -> // This is the case where some explicit arguments have been given. - let unnamedCurriedCallerArgs = unnamedCurriedCallerArgs |> List.mapSquared (fun (argExpr, argTy, mArg) -> CallerArg(argTy, mArg, false, argExpr)) - let namedCurriedCallerArgs = namedCurriedCallerArgs |> List.mapSquared (fun (id, isOpt, argExpr, argTy, mArg) -> CallerNamedArg(id, CallerArg(argTy, mArg, isOpt, argExpr))) + let unnamedCurriedCallerArgs = unnamedCurriedCallerArgs |> List.mapSquared (fun (argExpr, argTy, mArg) -> CallerArg(argTy, mArg, false, argExpr)) + let namedCurriedCallerArgs = namedCurriedCallerArgs |> List.mapSquared (fun (id, isOpt, argExpr, argTy, mArg) -> CallerNamedArg(id, CallerArg(argTy, mArg, isOpt, argExpr))) // Collect the information for F# 3.1 lambda propagation rule, and apply the caller's object type to the method's object type if the rule is relevant. - let lambdaPropagationInfo = - if preArgumentTypeCheckingCalledMethGroup.Length > 1 then - [| for meth in preArgumentTypeCheckingCalledMethGroup do + let lambdaPropagationInfo = + if preArgumentTypeCheckingCalledMethGroup.Length > 1 then + [| for meth in preArgumentTypeCheckingCalledMethGroup do match ExamineMethodForLambdaPropagation meth with | Some (unnamedInfo, namedInfo) -> let calledObjArgTys = meth.CalledObjArgTys mMethExpr @@ -8691,60 +8715,60 @@ and TcMethodApplication [| |] // Now typecheck the argument expressions - let unnamedCurriedCallerArgs, (lambdaPropagationInfo, tpenv) = TcUnnamedMethodArgs cenv env lambdaPropagationInfo tpenv unnamedCurriedCallerArgs - let namedCurriedCallerArgs, (_, tpenv) = TcMethodNamedArgs cenv env lambdaPropagationInfo tpenv namedCurriedCallerArgs + let unnamedCurriedCallerArgs, (lambdaPropagationInfo, tpenv) = TcUnnamedMethodArgs cenv env lambdaPropagationInfo tpenv unnamedCurriedCallerArgs + let namedCurriedCallerArgs, (_, tpenv) = TcMethodNamedArgs cenv env lambdaPropagationInfo tpenv namedCurriedCallerArgs unnamedCurriedCallerArgs, namedCurriedCallerArgs, None, exprTy, tpenv - let preArgumentTypeCheckingCalledMethGroup = + let preArgumentTypeCheckingCalledMethGroup = preArgumentTypeCheckingCalledMethGroup |> List.map (fun cmeth -> (cmeth.Method, cmeth.CalledTyArgs, cmeth.AssociatedPropertyInfo, cmeth.UsesParamArrayConversion)) - + let uniquelyResolved = match uniquelyResolved with - | ErrorResult _ -> + | ErrorResult _ -> match afterResolution with | AfterResolution.DoNothing -> () | AfterResolution.RecordResolution(_, _, _, onFailure) -> onFailure() | _ -> () uniquelyResolved |> CommitOperationResult - - // STEP 3. Resolve overloading + + // STEP 3. Resolve overloading /// Select the called method that's the result of overload resolution - let finalCalledMeth = + let finalCalledMeth = let callerArgs = { Unnamed = unnamedCurriedCallerArgs ; Named = namedCurriedCallerArgs } - let postArgumentTypeCheckingCalledMethGroup = + let postArgumentTypeCheckingCalledMethGroup = preArgumentTypeCheckingCalledMethGroup |> List.map (fun (minfo: MethInfo, minst, pinfoOpt, usesParamArrayConversion) -> - let callerTyArgs = - match tyargsOpt with + let callerTyArgs = + match tyargsOpt with | Some tyargs -> minfo.AdjustUserTypeInstForFSharpStyleIndexedExtensionMembers tyargs | None -> minst CalledMeth(cenv.infoReader, Some(env.NameEnv), isCheckingAttributeCall, FreshenMethInfo, mMethExpr, ad, minfo, minst, callerTyArgs, pinfoOpt, callerObjArgTys, callerArgs, usesParamArrayConversion, true, objTyOpt)) - - // Commit unassociated constraints prior to member overload resolution where there is ambiguity - // about the possible target of the call. - if not uniquelyResolved then + + // Commit unassociated constraints prior to member overload resolution where there is ambiguity + // about the possible target of the call. + if not uniquelyResolved then ConstraintSolver.CanonicalizePartialInferenceProblem cenv.css denv mItem (//freeInTypeLeftToRight cenv.g false returnTy @ (unnamedCurriedCallerArgs |> List.collectSquared (fun callerArg -> freeInTypeLeftToRight cenv.g false callerArg.CallerArgumentType))) - let result, errors = ResolveOverloadingForCall denv cenv.css mMethExpr methodName 0 None callerArgs ad postArgumentTypeCheckingCalledMethGroup true (Some returnTy) + let result, errors = ResolveOverloadingForCall denv cenv.css mMethExpr methodName 0 None callerArgs ad postArgumentTypeCheckingCalledMethGroup true (Some returnTy) match afterResolution, result with | AfterResolution.DoNothing, _ -> () // Record the precise override resolution - | AfterResolution.RecordResolution(Some unrefinedItem, _, callSink, _), Some result + | AfterResolution.RecordResolution(Some unrefinedItem, _, callSink, _), Some result when result.Method.IsVirtual -> - let overriding = - match unrefinedItem with + let overriding = + match unrefinedItem with | Item.MethodGroup(_, overridenMeths, _) -> overridenMeths |> List.map (fun minfo -> minfo, None) - | Item.Property(_, pinfos) -> - if result.Method.LogicalName.StartsWithOrdinal("set_") then + | Item.Property(_, pinfos) -> + if result.Method.LogicalName.StartsWithOrdinal("set_") then SettersOfPropInfos pinfos - else + else GettersOfPropInfos pinfos | _ -> [] @@ -8753,12 +8777,12 @@ and TcMethodApplication |> List.tryFind (fun (minfo, _) -> minfo.IsVirtual && MethInfosEquivByNameAndSig EraseNone true cenv.g cenv.amap range0 result.Method minfo) match overridingInfo with - | Some (minfo, pinfoOpt) -> - let tps = minfo.FormalMethodTypars + | Some (minfo, pinfoOpt) -> + let tps = minfo.FormalMethodTypars let tyargs = result.CalledTyArgs let tpinst = if tps.Length = tyargs.Length then mkTyparInst tps tyargs else [] (minfo, pinfoOpt, tpinst) |> callSink - | None -> + | None -> (result.Method, result.AssociatedPropertyInfo, result.CalledTyparInst) |> callSink // Record the precise overload resolution and the type instantiation @@ -8769,9 +8793,9 @@ and TcMethodApplication onFailure() - // Raise the errors from the constraint solving + // Raise the errors from the constraint solving RaiseOperationResult errors - match result with + match result with | None -> error(InternalError("at least one error should be returned by failed method overloading", mItem)) | Some res -> res @@ -8780,33 +8804,33 @@ and TcMethodApplication let finalAssignedItemSetters = finalCalledMeth.AssignedItemSetters let finalAttributeAssignedNamedItems = finalCalledMeth.AttributeAssignedNamedArgs - // STEP 4. Check the attributes on the method and the corresponding event/property, if any + // STEP 4. Check the attributes on the method and the corresponding event/property, if any - finalCalledMeth.AssociatedPropertyInfo |> Option.iter (fun pinfo -> CheckPropInfoAttributes pinfo mItem |> CommitOperationResult) + finalCalledMeth.AssociatedPropertyInfo |> Option.iter (fun pinfo -> CheckPropInfoAttributes pinfo mItem |> CommitOperationResult) let isInstance = not (isNil objArgs) MethInfoChecks cenv.g cenv.amap isInstance tyargsOpt objArgs ad mItem finalCalledMethInfo // Adhoc constraints on use of .NET methods - begin + begin // Uses of Object.GetHashCode and Object.Equals imply an equality constraint on the object argument // - if (isInstance && + if (isInstance && finalCalledMethInfo.IsInstance && - typeEquiv cenv.g finalCalledMethInfo.ApparentEnclosingType cenv.g.obj_ty && - (finalCalledMethInfo.LogicalName = "GetHashCode" || finalCalledMethInfo.LogicalName = "Equals")) then - + typeEquiv cenv.g finalCalledMethInfo.ApparentEnclosingType cenv.g.obj_ty && + (finalCalledMethInfo.LogicalName = "GetHashCode" || finalCalledMethInfo.LogicalName = "Equals")) then + objArgs |> List.iter (fun expr -> ConstraintSolver.AddCxTypeMustSupportEquality env.DisplayEnv cenv.css mMethExpr NoTrace (tyOfExpr cenv.g expr)) - // Uses of a Dictionary() constructor without an IEqualityComparer argument imply an equality constraint + // Uses of a Dictionary() constructor without an IEqualityComparer argument imply an equality constraint // on the first type argument. if HasHeadType cenv.g cenv.g.tcref_System_Collections_Generic_Dictionary finalCalledMethInfo.ApparentEnclosingType && finalCalledMethInfo.IsConstructor && - not (finalCalledMethInfo.GetParamDatas(cenv.amap, mItem, finalCalledMeth.CalledTyArgs) - |> List.existsSquared (fun (ParamData(_, _, _, _, _, _, _, ty)) -> - HasHeadType cenv.g cenv.g.tcref_System_Collections_Generic_IEqualityComparer ty)) then - - match argsOfAppTy cenv.g finalCalledMethInfo.ApparentEnclosingType with + not (finalCalledMethInfo.GetParamDatas(cenv.amap, mItem, finalCalledMeth.CalledTyArgs) + |> List.existsSquared (fun (ParamData(_, _, _, _, _, _, _, ty)) -> + HasHeadType cenv.g cenv.g.tcref_System_Collections_Generic_IEqualityComparer ty)) then + + match argsOfAppTy cenv.g finalCalledMethInfo.ApparentEnclosingType with | [dty; _] -> ConstraintSolver.AddCxTypeMustSupportEquality env.DisplayEnv cenv.css mMethExpr NoTrace dty | _ -> () end @@ -8821,33 +8845,33 @@ and TcMethodApplication // Record the resolution of the named argument for the Language Service allArgs |> List.iter (fun assignedArg -> - match assignedArg.NamedArgIdOpt with + match assignedArg.NamedArgIdOpt with | None -> () - | Some id -> + | Some id -> let item = Item.ArgName (defaultArg assignedArg.CalledArg.NameOpt id, assignedArg.CalledArg.CalledArgumentType, Some(ArgumentContainer.Method finalCalledMethInfo)) CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.Use, ad)) /// STEP 6. Build the call expression, then adjust for byref-returns, out-parameters-as-tuples, post-hoc property assignments, methods-as-first-class-value, - /// + /// - let callExpr0, exprty = + let callExpr0, exprty = BuildPossiblyConditionalMethodCall cenv env mut mMethExpr isProp finalCalledMethInfo isSuperInit finalCalledMethInst objArgs allArgsCoerced - + // Handle byref returns - let callExpr1 = - // byref-typed returns get implicitly dereferenced + let callExpr1 = + // byref-typed returns get implicitly dereferenced let vty = tyOfExpr cenv.g callExpr0 - if isByrefTy cenv.g vty then + if isByrefTy cenv.g vty then mkDerefAddrExpr mMethExpr callExpr0 mMethExpr vty - else + else callExpr0 - // Bind "out" parameters as part of the result tuple - let callExpr2, exprty = + // Bind "out" parameters as part of the result tuple + let callExpr2, exprty = let expr = callExpr1 if isNil outArgTmpBinds then expr, exprty - else + else let outArgTys = outArgExprs |> List.map (tyOfExpr cenv.g) let expr = if isUnitTy cenv.g exprty then @@ -8857,92 +8881,92 @@ and TcMethodApplication let expr = mkLetsBind mMethExpr outArgTmpBinds expr expr, tyOfExpr cenv.g expr - // Handle post-hoc property assignments - let setterExprPrebinders, callExpr3 = + // Handle post-hoc property assignments + let setterExprPrebinders, callExpr3 = let expr = callExpr2 - if isCheckingAttributeCall then - [], expr - elif isNil finalAssignedItemSetters then - [], expr - else - // This holds the result of the call - let objv, objExpr = mkMutableCompGenLocal mMethExpr "returnVal" exprty // mutable in case it's a struct + if isCheckingAttributeCall then + [], expr + elif isNil finalAssignedItemSetters then + [], expr + else + // This holds the result of the call + let objv, objExpr = mkMutableCompGenLocal mMethExpr "returnVal" exprty // mutable in case it's a struct // Build the expression that mutates the properties on the result of the call - let setterExprPrebinders, propSetExpr = + let setterExprPrebinders, propSetExpr = (mkUnit cenv.g mMethExpr, finalAssignedItemSetters) ||> List.mapFold (fun acc assignedItemSetter -> let argExprPrebinder, action, m = TcSetterArgExpr cenv env denv objExpr ad assignedItemSetter argExprPrebinder, mkCompGenSequential m acc action) - // now put them together + // now put them together let expr = mkCompGenLet mMethExpr objv expr (mkCompGenSequential mMethExpr propSetExpr objExpr) setterExprPrebinders, expr // Build the lambda expression if any, if the method is used as a first-class value - let callExpr4 = + let callExpr4 = let expr = callExpr3 - match lambdaVars with + match lambdaVars with | None -> expr - | Some curriedLambdaVars -> - let mkLambda vs expr = - match vs with - | [] -> mkUnitDelayLambda cenv.g mMethExpr expr + | Some curriedLambdaVars -> + let mkLambda vs expr = + match vs with + | [] -> mkUnitDelayLambda cenv.g mMethExpr expr | _ -> mkMultiLambda mMethExpr vs (expr, tyOfExpr cenv.g expr) List.foldBack mkLambda curriedLambdaVars expr - let callExpr5, tpenv = + let callExpr5, tpenv = let expr = callExpr4 - match unnamedDelayedCallerArgExprOpt with - | Some synArgExpr -> - match lambdaVars with - | Some [lambdaVars] -> - let argExpr, tpenv = TcExpr cenv (mkRefTupledVarsTy cenv.g lambdaVars) env tpenv synArgExpr + match unnamedDelayedCallerArgExprOpt with + | Some synArgExpr -> + match lambdaVars with + | Some [lambdaVars] -> + 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)) - | None -> + | None -> expr, tpenv - // Apply the PreBinders, if any - let callExpr6 = + // Apply the PreBinders, if any + let callExpr6 = let expr = callExpr5 let expr = (expr, setterExprPrebinders) ||> List.fold (fun expr argPreBinder -> match argPreBinder with None -> expr | Some f -> f expr) let expr = (expr, paramArrayPreBinders) ||> List.fold (fun expr argPreBinder -> match argPreBinder with None -> expr | Some f -> f expr) let expr = (expr, allArgsPreBinders) ||> List.fold (fun expr argPreBinder -> match argPreBinder with None -> expr | Some f -> f expr) - + let expr = optArgPreBinder expr let expr = objArgPreBinder expr expr - + (callExpr6, finalAttributeAssignedNamedItems, delayed), tpenv - + and TcSetterArgExpr cenv env denv objExpr ad (AssignedItemSetter(id, setter, CallerArg(callerArgTy, m, isOptCallerArg, argExpr))) = if isOptCallerArg then error(Error(FSComp.SR.tcInvalidOptionalAssignmentToPropertyOrField(), m)) - - let argExprPrebinder, action, defnItem = - match setter with - | AssignedPropSetter (pinfo, pminfo, pminst) -> + + let argExprPrebinder, action, defnItem = + match setter with + | AssignedPropSetter (pinfo, pminfo, pminst) -> MethInfoChecks cenv.g cenv.amap true None [objExpr] ad m pminfo let calledArgTy = List.head (List.head (pminfo.GetParamTypes(cenv.amap, m, pminst))) let argExprPrebinder, argExpr = MethodCalls.AdjustCallerArgExprForCoercions cenv.g cenv.amap cenv.infoReader ad false calledArgTy ReflectedArgInfo.None callerArgTy m argExpr let mut = (if isStructTy cenv.g (tyOfExpr cenv.g objExpr) then DefinitelyMutates else PossiblyMutates) - let action = BuildPossiblyConditionalMethodCall cenv env mut m true pminfo NormalValUse pminst [objExpr] [argExpr] |> fst + let action = BuildPossiblyConditionalMethodCall cenv env mut m true pminfo NormalValUse pminst [objExpr] [argExpr] |> fst argExprPrebinder, action, Item.Property (pinfo.PropertyName, [pinfo]) | AssignedILFieldSetter finfo -> - // Get or set instance IL field + // Get or set instance IL field ILFieldInstanceChecks cenv.g cenv.amap ad m finfo let calledArgTy = finfo.FieldType (cenv.amap, m) let argExprPrebinder, argExpr = MethodCalls.AdjustCallerArgExprForCoercions cenv.g cenv.amap cenv.infoReader ad false calledArgTy ReflectedArgInfo.None callerArgTy m argExpr - let action = BuildILFieldSet cenv.g m objExpr finfo argExpr + let action = BuildILFieldSet cenv.g m objExpr finfo argExpr argExprPrebinder, action, Item.ILField finfo - + | AssignedRecdFieldSetter rfinfo -> - RecdFieldInstanceChecks cenv.g cenv.amap ad m rfinfo + RecdFieldInstanceChecks cenv.g cenv.amap ad m rfinfo let calledArgTy = rfinfo.FieldType CheckRecdFieldMutation m denv rfinfo let argExprPrebinder, argExpr = MethodCalls.AdjustCallerArgExprForCoercions cenv.g cenv.amap cenv.infoReader ad false calledArgTy ReflectedArgInfo.None callerArgTy m argExpr - let action = BuildRecdFieldSet cenv.g m objExpr rfinfo argExpr + let action = BuildRecdFieldSet cenv.g m objExpr rfinfo argExpr argExprPrebinder, action, Item.RecdField rfinfo // Record the resolution for the Language Service @@ -8951,81 +8975,81 @@ and TcSetterArgExpr cenv env denv objExpr ad (AssignedItemSetter(id, setter, Cal argExprPrebinder, action, m -and TcUnnamedMethodArgs cenv env lambdaPropagationInfo tpenv args = - List.mapiFoldSquared (TcUnnamedMethodArg cenv env) (lambdaPropagationInfo, tpenv) args +and TcUnnamedMethodArgs cenv env lambdaPropagationInfo tpenv args = + List.mapiFoldSquared (TcUnnamedMethodArg cenv env) (lambdaPropagationInfo, tpenv) args -and TcUnnamedMethodArg cenv env (lambdaPropagationInfo, tpenv) (i, j, CallerArg(argTy, mArg, isOpt, argExpr)) = +and TcUnnamedMethodArg cenv env (lambdaPropagationInfo, tpenv) (i, j, CallerArg(argTy, mArg, isOpt, argExpr)) = // Try to find the lambda propagation info for the corresponding unnamed argument at this position - let lambdaPropagationInfoForArg = - [| for (unnamedInfo, _) in lambdaPropagationInfo -> - if i < unnamedInfo.Length && j < unnamedInfo.[i].Length then unnamedInfo.[i].[j] else NoInfo |] + let lambdaPropagationInfoForArg = + [| for (unnamedInfo, _) in lambdaPropagationInfo -> + if i < unnamedInfo.Length && j < unnamedInfo.[i].Length then unnamedInfo.[i].[j] else NoInfo |] TcMethodArg cenv env (lambdaPropagationInfo, tpenv) (lambdaPropagationInfoForArg, CallerArg(argTy, mArg, isOpt, argExpr)) -and TcMethodNamedArgs cenv env lambdaPropagationInfo tpenv args = +and TcMethodNamedArgs cenv env lambdaPropagationInfo tpenv args = List.mapFoldSquared (TcMethodNamedArg cenv env) (lambdaPropagationInfo, tpenv) args -and TcMethodNamedArg cenv env (lambdaPropagationInfo, tpenv) (CallerNamedArg(id, arg)) = +and TcMethodNamedArg cenv env (lambdaPropagationInfo, tpenv) (CallerNamedArg(id, arg)) = // Try to find the lambda propagation info for the corresponding named argument - let lambdaPropagationInfoForArg = - [| for (_, namedInfo) in lambdaPropagationInfo -> - namedInfo |> Array.tryPick (fun namedInfoForArgSet -> - namedInfoForArgSet |> Array.tryPick (fun (nm, info) -> + let lambdaPropagationInfoForArg = + [| for (_, namedInfo) in lambdaPropagationInfo -> + namedInfo |> Array.tryPick (fun namedInfoForArgSet -> + namedInfoForArgSet |> Array.tryPick (fun (nm, info) -> if nm.idText = id.idText then Some info else None)) |] |> Array.map (fun x -> defaultArg x NoInfo) let arg', (lambdaPropagationInfo, tpenv) = TcMethodArg cenv env (lambdaPropagationInfo, tpenv) (lambdaPropagationInfoForArg, arg) CallerNamedArg(id, arg'), (lambdaPropagationInfo, tpenv) -and TcMethodArg cenv env (lambdaPropagationInfo, tpenv) (lambdaPropagationInfoForArg, CallerArg(argTy, mArg, isOpt, argExpr)) = +and TcMethodArg cenv env (lambdaPropagationInfo, tpenv) (lambdaPropagationInfoForArg, CallerArg(argTy, mArg, isOpt, argExpr)) = // Apply the F# 3.1 rule for extracting information for lambdas // // Before we check the argument, check to see if we can propagate info from a called lambda expression into the arguments of a received lambda - if lambdaPropagationInfoForArg.Length > 0 then - let allOverloadsAreNotCalledArgMatchesForThisArg = - lambdaPropagationInfoForArg + if lambdaPropagationInfoForArg.Length > 0 then + let allOverloadsAreNotCalledArgMatchesForThisArg = + lambdaPropagationInfoForArg |> Array.forall (function ArgDoesNotMatch | CallerLambdaHasArgTypes _ | NoInfo -> true | CalledArgMatchesType _ -> false) - if allOverloadsAreNotCalledArgMatchesForThisArg then + if allOverloadsAreNotCalledArgMatchesForThisArg then let overloadsWhichAreFuncAtThisPosition = lambdaPropagationInfoForArg |> Array.choose (function CallerLambdaHasArgTypes r -> Some (List.toArray r) | _ -> None) - if overloadsWhichAreFuncAtThisPosition.Length > 0 then + if overloadsWhichAreFuncAtThisPosition.Length > 0 then let minFuncArity = overloadsWhichAreFuncAtThisPosition |> Array.minBy Array.length |> Array.length let prefixOfLambdaArgsForEachOverload = overloadsWhichAreFuncAtThisPosition |> Array.map (Array.take minFuncArity) - - if prefixOfLambdaArgsForEachOverload.Length > 0 then + + if prefixOfLambdaArgsForEachOverload.Length > 0 then let numLambdaVars = prefixOfLambdaArgsForEachOverload.[0].Length // Fold across the lambda var positions checking if all method overloads imply the same argument type for a lambda variable. // If so, force the caller to have a function type that looks like the calledLambdaArgTy. // The loop variable callerLambdaTyOpt becomes None if something failed. - let rec loop callerLambdaTy lambdaVarNum = + let rec loop callerLambdaTy lambdaVarNum = if lambdaVarNum < numLambdaVars then let calledLambdaArgTy = prefixOfLambdaArgsForEachOverload.[0].[lambdaVarNum] let allRowsGiveSameArgumentType = prefixOfLambdaArgsForEachOverload - |> Array.forall (fun row -> typeEquiv cenv.g calledLambdaArgTy row.[lambdaVarNum]) + |> Array.forall (fun row -> typeEquiv cenv.g calledLambdaArgTy row.[lambdaVarNum]) if allRowsGiveSameArgumentType then // Force the caller to be a function type. - match UnifyFunctionTypeUndoIfFailed cenv env.DisplayEnv mArg callerLambdaTy with + match UnifyFunctionTypeUndoIfFailed cenv env.DisplayEnv mArg callerLambdaTy with | ValueSome (callerLambdaDomainTy, callerLambdaRangeTy) -> - if AddCxTypeEqualsTypeUndoIfFailed env.DisplayEnv cenv.css mArg calledLambdaArgTy callerLambdaDomainTy then + if AddCxTypeEqualsTypeUndoIfFailed env.DisplayEnv cenv.css mArg calledLambdaArgTy callerLambdaDomainTy then loop callerLambdaRangeTy (lambdaVarNum + 1) | _ -> () loop argTy 0 let e', tpenv = TcExpr cenv argTy env tpenv argExpr - // After we have checked, propagate the info from argument into the overloads that receive it. + // After we have checked, propagate the info from argument into the overloads that receive it. // - // Filter out methods where an argument doesn't match. This just filters them from lambda propagation but not from + // Filter out methods where an argument doesn't match. This just filters them from lambda propagation but not from // later method overload resolution. - let lambdaPropagationInfo = - [| for (info, argInfo) in Array.zip lambdaPropagationInfo lambdaPropagationInfoForArg do - match argInfo with + let lambdaPropagationInfo = + [| for (info, argInfo) in Array.zip lambdaPropagationInfo lambdaPropagationInfoForArg do + match argInfo with | ArgDoesNotMatch _ -> () - | NoInfo | CallerLambdaHasArgTypes _ -> + | NoInfo | CallerLambdaHasArgTypes _ -> yield info - | CalledArgMatchesType adjustedCalledTy -> + | CalledArgMatchesType adjustedCalledTy -> if AddCxTypeMustSubsumeTypeMatchingOnlyUndoIfFailed env.DisplayEnv cenv.css mArg adjustedCalledTy argTy then yield info |] @@ -9039,63 +9063,64 @@ and TcNewDelegateThen cenv overallTy env tpenv mDelTy mExprAndArg delegateTy arg // We pass isInstance = true here because we're checking the rights to access the "Invoke" method MethInfoChecks cenv.g cenv.amap true None [] env.eAccessRights mExprAndArg invokeMethInfo let args = GetMethodArgs arg - match args with - | [farg], [] -> + match args with + | [farg], [] -> let m = arg.Range let callerArg, (_, tpenv) = TcMethodArg cenv env (Array.empty, tpenv) (Array.empty, CallerArg(fty, m, false, farg)) let expr = BuildNewDelegateExpr (None, cenv.g, cenv.amap, delegateTy, invokeMethInfo, delArgTys, callerArg.Expr, fty, m) - PropagateThenTcDelayed cenv overallTy env tpenv m (MakeApplicableExprNoFlex cenv expr) delegateTy atomicFlag delayed - | _ -> + PropagateThenTcDelayed cenv overallTy env tpenv m (MakeApplicableExprNoFlex cenv expr) delegateTy atomicFlag delayed + | _ -> error(Error(FSComp.SR.tcDelegateConstructorMustBePassed(), mExprAndArg)) -and bindLetRec (binds: Bindings) m e = - if isNil binds then - e - else - Expr.LetRec (binds, e, m, Construct.NewFreeVarsCache()) +and bindLetRec (binds: Bindings) m e = + if isNil binds then + e + else + Expr.LetRec (binds, e, m, Construct.NewFreeVarsCache()) /// Check for duplicate bindings in simple recursive patterns and CheckRecursiveBindingIds binds = let hashOfBinds = new HashSet() - - for (SynBinding.Binding(_, _, _, _, _, _, _, b, _, _, m, _)) in binds do + + for (SynBinding.SynBinding(_, _, _, _, _, _, _, b, _, _, m, _)) in binds do let nm = match b with - | SynPat.Named(_, id, _, _, _) -> id.idText + | SynPat.Named(id, _, _, _) + | SynPat.As(_, SynPat.Named(id, _, _, _), _) | SynPat.LongIdent(LongIdentWithDots([id], _), _, _, _, _, _) -> id.idText | _ -> "" if nm <> "" && not (hashOfBinds.Add nm) then error(Duplicate("value", nm, m)) -/// Process a sequence of sequentials mixed with iterated lets "let ... in let ... in ..." in a tail recursive way +/// Process a sequence of sequentials 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 +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 let env = ShrinkContext env m e2.Range // tailcall - TcLinearExprs bodyChecker cenv env overallTy tpenv isCompExpr e2 (fun (e2', tpenv) -> + 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 + 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 + let bodyExpr, tpenv = bodyChecker overallTy envinner tpenv body let bodyExpr = bindLetRec binds m bodyExpr cont (bodyExpr, tpenv) - else + 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) let envinner = ShrinkContext envinner m body.Range // tailcall - TcLinearExprs bodyChecker cenv envinner overallTy tpenv isCompExpr body (fun (x, tpenv) -> + TcLinearExprs bodyChecker cenv envinner overallTy tpenv isCompExpr body (fun (x, tpenv) -> cont (fst (mkf (x, overallTy)), tpenv)) | SynExpr.IfThenElse (synBoolExpr, synThenExpr, synElseExprOpt, spIfToThen, isRecovery, mIfToThen, m) when not isCompExpr -> @@ -9104,7 +9129,7 @@ and TcLinearExprs bodyChecker cenv env overallTy tpenv isCompExpr expr cont = let env = match env.eContextInfo with | ContextInfo.ElseBranchResult _ -> { env with eContextInfo = ContextInfo.ElseBranchResult synThenExpr.Range } - | _ -> + | _ -> match synElseExprOpt with | None -> { env with eContextInfo = ContextInfo.OmittedElseBranch synThenExpr.Range } | _ -> { env with eContextInfo = ContextInfo.IfExpression synThenExpr.Range } @@ -9114,7 +9139,7 @@ and TcLinearExprs bodyChecker cenv env overallTy tpenv isCompExpr expr cont = TcExprThatCanBeCtorBody cenv overallTy env tpenv synThenExpr - match synElseExprOpt with + match synElseExprOpt with | None -> let elseExpr = mkUnit cenv.g mIfToThen let spElse = DebugPointForTarget.No // the fake 'unit' value gets exactly the same range as spIfToThen @@ -9124,11 +9149,11 @@ and TcLinearExprs bodyChecker cenv env overallTy tpenv isCompExpr expr cont = | Some synElseExpr -> let env = { env with eContextInfo = ContextInfo.ElseBranchResult synElseExpr.Range } // tailcall - TcLinearExprs bodyChecker cenv env overallTy tpenv isCompExpr synElseExpr (fun (elseExpr, tpenv) -> + TcLinearExprs bodyChecker cenv env overallTy tpenv isCompExpr synElseExpr (fun (elseExpr, tpenv) -> let resExpr = primMkCond spIfToThen DebugPointForTarget.Yes DebugPointForTarget.Yes m overallTy boolExpr thenExpr elseExpr cont (resExpr, tpenv)) - | _ -> + | _ -> cont (bodyChecker overallTy env tpenv expr) /// Typecheck and compile pattern-matching constructs @@ -9140,8 +9165,8 @@ and TcAndPatternCompileMatchClauses mExpr matchm actionOnFailure cenv inputExprO and TcMatchPattern cenv inputTy env tpenv (pat: SynPat, optWhenExpr: SynExpr option) = let m = pat.Range let patf', (tpenv, names, _) = TcPat WarnOnUpperCase cenv env None (ValInline.Optional, permitInferTypars, noArgOrRetAttribs, false, None, false) (tpenv, Map.empty, Set.empty) inputTy pat - let envinner, values, vspecMap = MakeAndPublishSimpleValsForMergedScope cenv env m names - let optWhenExpr', tpenv = + let envinner, values, vspecMap = MakeAndPublishSimpleValsForMergedScope cenv env m names + let optWhenExpr', tpenv = match optWhenExpr with | Some whenExpr -> let guardEnv = { envinner with eContextInfo = ContextInfo.PatternMatchGuard whenExpr.Range } @@ -9155,22 +9180,22 @@ and TcMatchClauses cenv inputTy resultTy env tpenv clauses = let isFirst() = if first then first <- false; true else false List.mapFold (fun clause -> TcMatchClause cenv inputTy resultTy env (isFirst()) clause) tpenv clauses -and TcMatchClause cenv inputTy resultTy env isFirst tpenv (Clause(pat, optWhenExpr, e, patm, spTgt)) = +and TcMatchClause cenv inputTy resultTy env isFirst tpenv (SynMatchClause(pat, optWhenExpr, e, patm, spTgt)) = let pat', optWhenExpr', vspecs, envinner, tpenv = TcMatchPattern cenv inputTy env tpenv (pat, optWhenExpr) let resultEnv = if isFirst then envinner else { envinner with eContextInfo = ContextInfo.FollowingPatternMatchClause e.Range } let e', tpenv = TcExprThatCanBeCtorBody cenv resultTy resultEnv tpenv e TClause(pat', optWhenExpr', TTarget(vspecs, e', spTgt), patm), tpenv -and TcStaticOptimizationConstraint cenv env tpenv c = - match c with - | WhenTyparTyconEqualsTycon(tp, ty, m) -> - if not cenv.g.compilingFslib then +and TcStaticOptimizationConstraint cenv env tpenv c = + match c with + | SynStaticOptimizationConstraint.WhenTyparTyconEqualsTycon(tp, ty, m) -> + if not cenv.g.compilingFslib then errorR(Error(FSComp.SR.tcStaticOptimizationConditionalsOnlyForFSharpLibrary(), m)) let ty', tpenv = TcType cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv ty let tp', tpenv = TcTypar cenv env NewTyparsOK tpenv tp TTyconEqualsTycon(mkTyparTy tp', ty'), tpenv - | WhenTyparIsStruct(tp, m) -> - if not cenv.g.compilingFslib then + | SynStaticOptimizationConstraint.WhenTyparIsStruct(tp, m) -> + if not cenv.g.compilingFslib then errorR(Error(FSComp.SR.tcStaticOptimizationConditionalsOnlyForFSharpLibrary(), m)) let tp', tpenv = TcTypar cenv env NewTyparsOK tpenv tp TTyconIsStruct(mkTyparTy tp'), tpenv @@ -9178,39 +9203,39 @@ and TcStaticOptimizationConstraint cenv env tpenv c = /// Emit a conv.i instruction and mkConvToNativeInt (g: TcGlobals) e m = Expr.Op (TOp.ILAsm ([ AI_conv ILBasicType.DT_I], [ g.nativeint_ty ]), [], [e], m) -/// Fix up the r.h.s. of a 'use x = fixed expr' +/// Fix up the r.h.s. of a 'use x = fixed expr' and TcAndBuildFixedExpr cenv env (overallPatTy, fixedExpr, overallExprTy, mBinding) = warning(PossibleUnverifiableCode mBinding) - match overallExprTy with - | ty when isByrefTy cenv.g ty -> - let okByRef = - match stripExpr fixedExpr with + match overallExprTy with + | ty when isByrefTy cenv.g ty -> + let okByRef = + match stripExpr fixedExpr with | Expr.Op (op, tyargs, args, _) -> - match op, tyargs, args with + match op, tyargs, args with | TOp.ValFieldGetAddr (rfref, _), _, [_] -> not rfref.Tycon.IsStructOrEnumTycon | TOp.ILAsm ([ I_ldflda fspec], _), _, _ -> fspec.DeclaringType.Boxity = ILBoxity.AsObject | TOp.ILAsm ([ I_ldelema _], _), _, _ -> true | TOp.RefAddrGet _, _, _ -> true | _ -> false | _ -> false - if not okByRef then + if not okByRef then error(Error(FSComp.SR.tcFixedNotAllowed(), mBinding)) let elemTy = destByrefTy cenv.g overallExprTy UnifyTypes cenv env mBinding (mkNativePtrTy cenv.g elemTy) overallPatTy - mkCompGenLetIn mBinding "pinnedByref" ty fixedExpr (fun (v, ve) -> + mkCompGenLetIn mBinding "pinnedByref" ty fixedExpr (fun (v, ve) -> v.SetIsFixed() mkConvToNativeInt cenv.g ve mBinding) - - | ty when isStringTy cenv.g ty -> + + | ty when isStringTy cenv.g ty -> let charPtrTy = mkNativePtrTy cenv.g cenv.g.char_ty UnifyTypes cenv env mBinding charPtrTy overallPatTy // - // let ptr: nativeptr = + // let ptr: nativeptr = // let pinned s = str // (nativeptr)s + get_OffsettoStringData() - mkCompGenLetIn mBinding "pinnedString" cenv.g.string_ty fixedExpr (fun (v, ve) -> + mkCompGenLetIn mBinding "pinnedString" cenv.g.string_ty fixedExpr (fun (v, ve) -> v.SetIsFixed() let addrOffset = BuildOffsetToStringData cenv env mBinding let stringAsNativeInt = mkConvToNativeInt cenv.g ve mBinding @@ -9218,125 +9243,150 @@ and TcAndBuildFixedExpr cenv env (overallPatTy, fixedExpr, overallExprTy, mBindi // check for non-null mkNullTest cenv.g mBinding ve plusOffset ve) - | ty when isArray1DTy cenv.g ty -> + | ty when isArray1DTy cenv.g ty -> let elemTy = destArrayTy cenv.g overallExprTy let elemPtrTy = mkNativePtrTy cenv.g elemTy UnifyTypes cenv env mBinding elemPtrTy overallPatTy - // let ptr: nativeptr = + // let ptr: nativeptr = // let tmpArray: elem[] = arr // if nonNull tmpArray then // if tmpArray.Length <> 0 then // let pinned tmpArrayByref: byref = &arr.[0] // (nativeint) tmpArrayByref - // else + // else // (nativeint) 0 - // else + // else // (nativeint) 0 // - mkCompGenLetIn mBinding "tmpArray" overallExprTy fixedExpr (fun (_, ve) -> + mkCompGenLetIn mBinding "tmpArray" overallExprTy fixedExpr (fun (_, ve) -> // This is &arr.[0] let elemZeroAddress = mkArrayElemAddress cenv.g (false, ILReadonly.NormalAddress, false, ILArrayShape.SingleDimensional, elemTy, [ve; mkInt32 cenv.g mBinding 0], mBinding) // check for non-null and non-empty - let zero = mkConvToNativeInt cenv.g (mkInt32 cenv.g mBinding 0) mBinding + let zero = mkConvToNativeInt cenv.g (mkInt32 cenv.g mBinding 0) mBinding // This is arr.Length - let arrayLengthExpr = mkCallArrayLength cenv.g mBinding elemTy ve - mkNullTest cenv.g mBinding ve - (mkNullTest cenv.g mBinding arrayLengthExpr - (mkCompGenLetIn mBinding "pinnedByref" (mkByrefTy cenv.g elemTy) elemZeroAddress (fun (v, ve) -> + let arrayLengthExpr = mkCallArrayLength cenv.g mBinding elemTy ve + mkNullTest cenv.g mBinding ve + (mkNullTest cenv.g mBinding arrayLengthExpr + (mkCompGenLetIn mBinding "pinnedByref" (mkByrefTy cenv.g elemTy) elemZeroAddress (fun (v, ve) -> v.SetIsFixed() (mkConvToNativeInt cenv.g ve mBinding))) - zero) + zero) zero) | _ -> error(Error(FSComp.SR.tcFixedNotAllowed(), mBinding)) -/// Binding checking code, for all bindings including let bindings, let-rec bindings, member bindings and object-expression bindings and +/// 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 overallTy safeThisValOpt safeInitInfo (enclosingDeclaredTypars, (ExplicitTyparInfo(_, declaredTypars, _) as explicitTyparInfo)) bind = let envinner = AddDeclaredTypars NoCheckForDuplicateTypars (enclosingDeclaredTypars@declaredTypars) env - match bind with + match bind with | NormalizedBinding(vis, bkind, isInline, isMutable, attrs, doc, _, valSynData, pat, NormalizedBindingRhs(spatsL, rtyOpt, rhsExpr), mBinding, spBind) -> - let (SynValData(memberFlagsOpt, valSynInfo, _)) = valSynData + let (SynValData(memberFlagsOpt, _, _)) = valSynData - let callerName = + let callerName = match declKind, bkind, pat with | ExpressionBinding, _, _ -> envinner.eCallerMemberName - | _, _, SynPat.Named(_, name, _, _, _) -> + | _, _, (SynPat.Named(name, _, _, _) | SynPat.As(_, SynPat.Named(name, _, _, _), _)) -> match memberFlagsOpt with | Some memberFlags -> match memberFlags.MemberKind with - | MemberKind.PropertyGet | MemberKind.PropertySet | MemberKind.PropertyGetSet -> Some(name.idText.Substring 4) - | MemberKind.ClassConstructor -> Some(".ctor") - | MemberKind.Constructor -> Some(".ctor") + | SynMemberKind.PropertyGet | SynMemberKind.PropertySet | SynMemberKind.PropertyGetSet -> Some(name.idText.Substring 4) + | SynMemberKind.ClassConstructor -> Some(".ctor") + | SynMemberKind.Constructor -> Some(".ctor") | _ -> Some(name.idText) | _ -> Some(name.idText) - | ClassLetBinding false, DoBinding, _ -> Some(".ctor") - | ClassLetBinding true, DoBinding, _ -> Some(".cctor") - | ModuleOrMemberBinding, StandaloneExpression, _ -> Some(".cctor") + | ClassLetBinding false, SynBindingKind.Do, _ -> Some(".ctor") + | ClassLetBinding true, SynBindingKind.Do, _ -> Some(".cctor") + | ModuleOrMemberBinding, SynBindingKind.StandaloneExpression, _ -> Some(".cctor") | _, _, _ -> envinner.eCallerMemberName let envinner = {envinner with eCallerMemberName = callerName } - let attrTgt = DeclKind.AllowedAttribTargets memberFlagsOpt declKind + let attrTgt = DeclKind.AllowedAttribTargets memberFlagsOpt declKind - let isFixed, rhsExpr, overallPatTy, overallExprTy = - match rhsExpr with + let isFixed, rhsExpr, overallPatTy, overallExprTy = + match rhsExpr with | SynExpr.Fixed (e, _) -> true, e, NewInferenceType(), overallTy | e -> false, e, overallTy, overallTy // Check the attributes of the binding, parameters or return value - let TcAttrs tgt attrs = - let attrs = TcAttributes cenv envinner tgt attrs - if attrTgt = enum 0 && not (isNil attrs) then + let TcAttrs tgt isRet attrs = + // For all but attributes positioned at the return value, disallow implicitly + // targeting the return value. + let tgtEx = if isRet then enum 0 else AttributeTargets.ReturnValue + let attrs, _ = TcAttributesMaybeFailEx false cenv envinner tgt tgtEx attrs + if attrTgt = enum 0 && not (isNil attrs) then errorR(Error(FSComp.SR.tcAttributesAreNotPermittedOnLetBindings(), mBinding)) attrs - - let valAttribs = TcAttrs attrTgt attrs + + // Rotate [] from binding to return value + // Also patch the syntactic representation + let retAttribs, valAttribs, valSynData = + let attribs = TcAttrs attrTgt false attrs + let rotRetSynAttrs, rotRetAttribs, valAttribs = + // Do not rotate if some attrs fail to typecheck... + if attribs.Length <> attrs.Length then [], [], attribs + else attribs + |> List.zip attrs + |> List.partition(function | (_, Attrib(_, _, _, _, _, Some ts, _)) -> ts &&& AttributeTargets.ReturnValue <> enum 0 | _ -> false) + |> fun (r, v) -> (List.map fst r, List.map snd r, List.map snd v) + let retAttribs = + match rtyOpt with + | Some (SynBindingReturnInfo(_, _, Attributes retAttrs)) -> + rotRetAttribs @ TcAttrs AttributeTargets.ReturnValue true retAttrs + | None -> rotRetAttribs + let valSynData = + match rotRetSynAttrs with + | [] -> valSynData + | {Range=mHead} :: _ -> + let (SynValData(valMf, SynValInfo(args, SynArgInfo(attrs, opt, retId)), valId)) = valSynData + in SynValData(valMf, SynValInfo(args, SynArgInfo({Attributes=rotRetSynAttrs; Range=mHead} :: attrs, opt, retId)), valId) + retAttribs, valAttribs, valSynData + let isVolatile = HasFSharpAttribute cenv.g cenv.g.attrib_VolatileFieldAttribute valAttribs - + let inlineFlag = ComputeInlineFlag memberFlagsOpt isInline isMutable mBinding let argAttribs = - spatsL |> List.map (SynInfo.InferSynArgInfoFromSimplePats >> List.map (SynInfo.AttribsOfArgData >> TcAttrs AttributeTargets.Parameter)) - let retAttribs = - match rtyOpt with - | Some (SynBindingReturnInfo(_, _, Attributes retAttrs)) -> TcAttrs AttributeTargets.ReturnValue retAttrs - | None -> [] + spatsL |> List.map (SynInfo.InferSynArgInfoFromSimplePats >> List.map (SynInfo.AttribsOfArgData >> TcAttrs AttributeTargets.Parameter false)) + + // Assert the return type of an active pattern. A [] attribute may be used on a partial active pattern. + let isStructRetTy = HasFSharpAttribute cenv.g cenv.g.attrib_StructAttribute retAttribs let argAndRetAttribs = ArgAndRetAttribs(argAttribs, retAttribs) - if HasFSharpAttribute cenv.g cenv.g.attrib_DefaultValueAttribute valAttribs then + if HasFSharpAttribute cenv.g cenv.g.attrib_DefaultValueAttribute valAttribs then errorR(Error(FSComp.SR.tcDefaultValueAttributeRequiresVal(), mBinding)) - + let isThreadStatic = isThreadOrContextStatic cenv.g valAttribs if isThreadStatic then errorR(DeprecatedThreadStaticBindingWarning mBinding) - if isVolatile then + if isVolatile then match declKind with | ClassLetBinding(_) -> () | _ -> errorR(Error(FSComp.SR.tcVolatileOnlyOnClassLetBindings(), mBinding)) - if (not isMutable || isThreadStatic) then + if (not isMutable || isThreadStatic) then errorR(Error(FSComp.SR.tcVolatileFieldsMustBeMutable(), mBinding)) if isFixed && (declKind <> ExpressionBinding || isInline || isMutable) then errorR(Error(FSComp.SR.tcFixedNotAllowed(), mBinding)) if (not declKind.CanBeDllImport || (match memberFlagsOpt with Some memberFlags -> memberFlags.IsInstance | _ -> false)) && - HasFSharpAttributeOpt cenv.g cenv.g.attrib_DllImportAttribute valAttribs - then + HasFSharpAttributeOpt cenv.g cenv.g.attrib_DllImportAttribute valAttribs + then errorR(Error(FSComp.SR.tcDllImportNotAllowed(), mBinding)) - - if Option.isNone memberFlagsOpt && HasFSharpAttribute cenv.g cenv.g.attrib_ConditionalAttribute valAttribs then + + if Option.isNone memberFlagsOpt && HasFSharpAttribute cenv.g cenv.g.attrib_ConditionalAttribute valAttribs then errorR(Error(FSComp.SR.tcConditionalAttributeRequiresMembers(), mBinding)) - if HasFSharpAttribute cenv.g cenv.g.attrib_EntryPointAttribute valAttribs then - if Option.isSome memberFlagsOpt then + if HasFSharpAttribute cenv.g cenv.g.attrib_EntryPointAttribute valAttribs then + if Option.isSome memberFlagsOpt then errorR(Error(FSComp.SR.tcEntryPointAttributeRequiresFunctionInModule(), mBinding)) - else + else UnifyTypes cenv env mBinding overallPatTy (mkArrayType cenv.g cenv.g.string_ty --> cenv.g.int_ty) if isMutable && isInline then errorR(Error(FSComp.SR.tcMutableValuesCannotBeInline(), mBinding)) @@ -9347,64 +9397,65 @@ and TcNormalizedBinding declKind (cenv: cenv) env tpenv overallTy safeThisValOpt if isMutable && not (isNil spatsL) then errorR(Error(FSComp.SR.tcMutableValuesSyntax(), mBinding)) - let isInline = - if isInline && isNil spatsL && isNil declaredTypars then + let isInline = + if isInline && isNil spatsL && isNil declaredTypars then errorR(Error(FSComp.SR.tcOnlyFunctionsCanBeInline(), mBinding)) false - else - isInline + else + isInline let compgen = false - - // Use the syntactic arity if we're defining a function + + // Use the syntactic arity if we're defining a function + let (SynValData(_, valSynInfo, _)) = valSynData let partialValReprInfo = TranslateTopValSynInfo mBinding (TcAttributes cenv env) valSynInfo - // Check the pattern of the l.h.s. of the binding - let tcPatPhase2, (tpenv, nameToPrelimValSchemeMap, _) = + // Check the pattern of the l.h.s. of the binding + let tcPatPhase2, (tpenv, nameToPrelimValSchemeMap, _) = TcPat AllIdsOK cenv envinner (Some partialValReprInfo) (inlineFlag, explicitTyparInfo, argAndRetAttribs, isMutable, vis, compgen) (tpenv, NameMap.empty, Set.empty) overallPatTy pat - // Add active pattern result names to the environment - let apinfoOpt = - match NameMap.range nameToPrelimValSchemeMap with - | [PrelimValScheme1(id, _, ty, _, _, _, _, _, _, _, _) ] -> - match ActivePatternInfoOfValName id.idText id.idRange with + // Add active pattern result names to the environment + let apinfoOpt = + match NameMap.range nameToPrelimValSchemeMap with + | [PrelimValScheme1(id, _, ty, _, _, _, _, _, _, _, _) ] -> + match ActivePatternInfoOfValName id.idText id.idRange with | Some apinfo -> Some (apinfo, ty, id.idRange) | None -> None | _ -> None - // Add active pattern result names to the environment - let envinner = - match apinfoOpt with - | Some (apinfo, ty, m) -> - if Option.isSome memberFlagsOpt || (not apinfo.IsTotal && apinfo.ActiveTags.Length > 1) then + // Add active pattern result names to the environment + let envinner = + match apinfoOpt with + | Some (apinfo, apOverallTy, m) -> + if Option.isSome memberFlagsOpt || (not apinfo.IsTotal && apinfo.ActiveTags.Length > 1) then error(Error(FSComp.SR.tcInvalidActivePatternName(), mBinding)) apinfo.ActiveTagsWithRanges |> List.iteri (fun i (_tag, tagRange) -> - let item = Item.ActivePatternResult(apinfo, cenv.g.unit_ty, i, tagRange) + let item = Item.ActivePatternResult(apinfo, apOverallTy, i, tagRange) CallNameResolutionSink cenv.tcSink (tagRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.Binding, env.AccessRights)) - { envinner with eNameResEnv = AddActivePatternResultTagsToNameEnv apinfo envinner.eNameResEnv ty m } - | None -> + { envinner with eNameResEnv = AddActivePatternResultTagsToNameEnv apinfo envinner.eNameResEnv apOverallTy m } + | None -> envinner - - // Now tc the r.h.s. - // If binding a ctor then set the ugly counter that permits us to write ctor expressions on the r.h.s. - let isCtor = (match memberFlagsOpt with Some memberFlags -> memberFlags.MemberKind = MemberKind.Constructor | _ -> false) + + // Now tc the r.h.s. + // If binding a ctor then set the ugly counter that permits us to write ctor expressions on the r.h.s. + let isCtor = (match memberFlagsOpt with Some memberFlags -> memberFlags.MemberKind = SynMemberKind.Constructor | _ -> false) // At each module binding, dive into the expression to check for syntax errors and suppress them if they show. // Don't do this for lambdas, because we always check for suppression for all lambda bodies in TcIteratedLambdas - let rhsExprChecked, tpenv = - let atTopNonLambdaDefn = - DeclKind.IsModuleOrMemberOrExtensionBinding declKind && - (match rhsExpr with SynExpr.Lambda _ -> false | _ -> true) && + let rhsExprChecked, tpenv = + let atTopNonLambdaDefn = + DeclKind.IsModuleOrMemberOrExtensionBinding declKind && + (match rhsExpr with SynExpr.Lambda _ -> false | _ -> true) && synExprContainsError rhsExpr - conditionallySuppressErrorReporting atTopNonLambdaDefn (fun () -> + conditionallySuppressErrorReporting atTopNonLambdaDefn (fun () -> if isCtor then TcExprThatIsCtorBody (safeThisValOpt, safeInitInfo) cenv overallExprTy envinner tpenv rhsExpr else TcExprThatCantBeCtorBody cenv overallExprTy envinner tpenv rhsExpr) - if bkind = StandaloneExpression && not cenv.isScript then + if bkind = SynBindingKind.StandaloneExpression && not cenv.isScript then UnifyUnitType cenv env mBinding overallPatTy rhsExprChecked |> ignore // Fix up the r.h.s. expression for 'fixed' @@ -9412,54 +9463,58 @@ and TcNormalizedBinding declKind (cenv: cenv) env tpenv overallTy safeThisValOpt if isFixed then TcAndBuildFixedExpr cenv env (overallPatTy, rhsExprChecked, overallExprTy, mBinding) else rhsExprChecked - // Assert the return type of an active pattern - match apinfoOpt with - | Some (apinfo, ty, _) -> + match apinfoOpt with + | Some (apinfo, apOverallTy, _) -> let activePatResTys = NewInferenceTypes apinfo.ActiveTags - let _, rty = stripFunTy cenv.g ty - UnifyTypes cenv env mBinding (apinfo.ResultType cenv.g rhsExpr.Range activePatResTys) rty - | None -> - () + let _, apReturnTy = stripFunTy cenv.g apOverallTy + if isStructRetTy && apinfo.IsTotal then + errorR(Error(FSComp.SR.tcInvalidStructReturn(), mBinding)) + if isStructRetTy then + checkLanguageFeatureError cenv.g.langVersion LanguageFeature.StructActivePattern mBinding + UnifyTypes cenv env mBinding (apinfo.ResultType cenv.g rhsExpr.Range activePatResTys isStructRetTy) apReturnTy + | None -> + if isStructRetTy then + errorR(Error(FSComp.SR.tcInvalidStructReturn(), mBinding)) // Check other attributes let hasLiteralAttr, literalValue = TcLiteral cenv overallExprTy env tpenv (valAttribs, rhsExpr) if hasLiteralAttr then - if isThreadStatic then + if isThreadStatic then errorR(Error(FSComp.SR.tcIllegalAttributesForLiteral(), mBinding)) - if isMutable then + if isMutable then errorR(Error(FSComp.SR.tcLiteralCannotBeMutable(), mBinding)) - if isInline then + if isInline then errorR(Error(FSComp.SR.tcLiteralCannotBeInline(), mBinding)) - if not (isNil declaredTypars) then + if not (isNil declaredTypars) then errorR(Error(FSComp.SR.tcLiteralCannotHaveGenericParameters(), mBinding)) CheckedBindingInfo(inlineFlag, valAttribs, doc, tcPatPhase2, explicitTyparInfo, nameToPrelimValSchemeMap, rhsExprChecked, argAndRetAttribs, overallPatTy, mBinding, spBind, compgen, literalValue, isFixed), tpenv -and TcLiteral cenv overallTy env tpenv (attrs, synLiteralValExpr) = +and TcLiteral cenv overallTy env tpenv (attrs, synLiteralValExpr) = let hasLiteralAttr = HasFSharpAttribute cenv.g cenv.g.attrib_LiteralAttribute attrs - if hasLiteralAttr then + if hasLiteralAttr then let literalValExpr, _ = TcExpr cenv overallTy env tpenv synLiteralValExpr - match EvalLiteralExprOrAttribArg cenv.g literalValExpr with - | Expr.Const (c, _, ty) -> + match EvalLiteralExprOrAttribArg cenv.g literalValExpr with + | Expr.Const (c, _, ty) -> if c = Const.Zero && isStructTy cenv.g ty then warning(Error(FSComp.SR.tcIllegalStructTypeForConstantExpression(), synLiteralValExpr.Range)) false, None else true, Some c - | _ -> + | _ -> errorR(Error(FSComp.SR.tcInvalidConstantExpression(), synLiteralValExpr.Range)) true, Some Const.Unit - - else hasLiteralAttr, None - -and TcBindingTyparDecls alwaysRigid cenv env tpenv (SynValTyparDecls(synTypars, infer, synTyparConstraints)) = + + else hasLiteralAttr, None + +and TcBindingTyparDecls alwaysRigid cenv env tpenv (ValTyparDecls(synTypars, synTyparConstraints, infer)) = let declaredTypars = TcTyparDecls cenv env synTypars let envinner = AddDeclaredTypars CheckForDuplicateTypars declaredTypars env let tpenv = TcTyparConstraints cenv NoNewTypars CheckCxs ItemOccurence.UseInType envinner tpenv synTyparConstraints - let rigidCopyOfDeclaredTypars = - if alwaysRigid then + let rigidCopyOfDeclaredTypars = + if alwaysRigid then declaredTypars |> List.iter (fun tp -> SetTyparRigid env.DisplayEnv tp.Range tp) declaredTypars else @@ -9469,23 +9524,24 @@ and TcBindingTyparDecls alwaysRigid cenv env tpenv (SynValTyparDecls(synTypars, // The type parameters using during inference will be marked rigid after inference declaredTypars |> List.iter (fun tp -> tp.SetRigidity TyparRigidity.WillBeRigid) rigidCopyOfDeclaredTypars - + ExplicitTyparInfo(rigidCopyOfDeclaredTypars, declaredTypars, infer), tpenv -and TcNonrecBindingTyparDecls cenv env tpenv bind = +and TcNonrecBindingTyparDecls cenv env tpenv bind = let (NormalizedBinding(_, _, _, _, _, _, synTyparDecls, _, _, _, _, _)) = bind TcBindingTyparDecls true cenv env tpenv synTyparDecls and TcNonRecursiveBinding declKind cenv env tpenv ty b = let b = BindingNormalization.NormalizeBinding ValOrMemberBinding cenv env b let explicitTyparInfo, tpenv = TcNonrecBindingTyparDecls cenv env tpenv b - TcNormalizedBinding declKind cenv env tpenv ty None NoSafeInitInfo ([], explicitTyparInfo) b + TcNormalizedBinding declKind cenv env tpenv ty None NoSafeInitInfo ([], explicitTyparInfo) b //------------------------------------------------------------------------- // TcAttribute* +// *Ex means the function accepts attribute targets that must be explicit //------------------------------------------------------------------------ -and TcAttribute canFail cenv (env: TcEnv) attrTgt (synAttr: SynAttribute) = +and TcAttributeEx canFail cenv (env: TcEnv) attrTgt attrEx (synAttr: SynAttribute) = let (LongIdentWithDots(tycon, _)) = synAttr.TypeName let arg = synAttr.ArgExpr let targetIndicator = synAttr.Target @@ -9497,8 +9553,8 @@ and TcAttribute canFail cenv (env: TcEnv) attrTgt (synAttr: SynAttribute) = // if we're checking an attribute that was applied directly to a getter or a setter, then // what we're really checking against is a method, not a property let attrTgt = if isAppliedToGetterOrSetter then ((attrTgt ^^^ AttributeTargets.Property) ||| AttributeTargets.Method) else attrTgt - let ty, tpenv = - let try1 n = + let ty, tpenv = + let try1 n = let tyid = mkSynId tyid.idRange n let tycon = (typath @ [tyid]) let ad = env.eAccessRights @@ -9513,30 +9569,30 @@ and TcAttribute canFail cenv (env: TcEnv) attrTgt (synAttr: SynAttribute) = let tcref = tcrefOfAppTy cenv.g ty - let conditionalCallDefineOpt = TryFindTyconRefStringAttribute cenv.g mAttr cenv.g.attrib_ConditionalAttribute tcref + let conditionalCallDefineOpt = TryFindTyconRefStringAttribute cenv.g mAttr cenv.g.attrib_ConditionalAttribute tcref - match conditionalCallDefineOpt, cenv.conditionalDefines with - | Some d, Some defines when not (List.contains d defines) -> + match conditionalCallDefineOpt, cenv.conditionalDefines with + | Some d, Some defines when not (List.contains d defines) -> [], false | _ -> - // REVIEW: take notice of inherited? - let validOn, _inherited = + // REVIEW: take notice of inherited? + let validOn, _inherited = let validOnDefault = 0x7fff let inheritedDefault = true - if tcref.IsILTycon then + if tcref.IsILTycon then let tdef = tcref.ILTyconRawMetadata let tref = cenv.g.attrib_AttributeUsageAttribute.TypeRef - - match TryDecodeILAttribute cenv.g tref tdef.CustomAttrs with - | Some ([ILAttribElem.Int32 validOn ], named) -> - let inherited = - match List.tryPick (function ("Inherited", _, _, ILAttribElem.Bool res) -> Some res | _ -> None) named with + + match TryDecodeILAttribute tref tdef.CustomAttrs with + | Some ([ILAttribElem.Int32 validOn ], named) -> + let inherited = + match List.tryPick (function ("Inherited", _, _, ILAttribElem.Bool res) -> Some res | _ -> None) named with | None -> inheritedDefault | Some x -> x (validOn, inherited) - | Some ([ILAttribElem.Int32 validOn; ILAttribElem.Bool _allowMultiple; ILAttribElem.Bool inherited ], _) -> + | Some ([ILAttribElem.Int32 validOn; ILAttribElem.Bool _allowMultiple; ILAttribElem.Bool inherited ], _) -> (validOn, inherited) - | _ -> + | _ -> (validOnDefault, inheritedDefault) else match (TryFindFSharpAttribute cenv.g cenv.g.attrib_AttributeUsageAttribute tcref.Attribs) with @@ -9548,11 +9604,11 @@ and TcAttribute canFail cenv (env: TcEnv) attrTgt (synAttr: SynAttribute) = (validOn, inherited) | Some _ -> warning(Error(FSComp.SR.tcUnexpectedConditionInImportedAssembly(), mAttr)) - (validOnDefault, inheritedDefault) - | _ -> + (validOnDefault, inheritedDefault) + | _ -> (validOnDefault, inheritedDefault) let possibleTgts = enum validOn &&& attrTgt - let directedTgts = + let directedTgts = match targetIndicator with | Some id when id.idText = "assembly" -> AttributeTargets.Assembly | Some id when id.idText = "module" -> AttributeTargets.Module @@ -9564,58 +9620,59 @@ and TcAttribute canFail cenv (env: TcEnv) attrTgt (synAttr: SynAttribute) = | Some id when id.idText = "type" -> AttributeTargets.TyconDecl | Some id when id.idText = "constructor" -> AttributeTargets.Constructor | Some id when id.idText = "event" -> AttributeTargets.Event - | Some id -> - errorR(Error(FSComp.SR.tcUnrecognizedAttributeTarget(), id.idRange)) + | Some id -> + errorR(Error(FSComp.SR.tcUnrecognizedAttributeTarget(), id.idRange)) possibleTgts - | _ -> possibleTgts + // mask explicit targets + | _ -> possibleTgts &&& ~~~ attrEx let constrainedTgts = possibleTgts &&& directedTgts - if constrainedTgts = enum 0 then - if (directedTgts = AttributeTargets.Assembly || directedTgts = AttributeTargets.Module) then + if constrainedTgts = enum 0 then + if (directedTgts = AttributeTargets.Assembly || directedTgts = AttributeTargets.Module) then error(Error(FSComp.SR.tcAttributeIsNotValidForLanguageElementUseDo(), mAttr)) else error(Error(FSComp.SR.tcAttributeIsNotValidForLanguageElement(), mAttr)) - match ResolveObjectConstructor cenv.nameResolver env.DisplayEnv mAttr ad ty with + match ResolveObjectConstructor cenv.nameResolver env.DisplayEnv mAttr ad ty with | Exception _ when canFail -> [ ], true - | res -> + | res -> let item = ForceRaise res if not (ExistsHeadTypeInEntireHierarchy cenv.g cenv.amap mAttr ty cenv.g.tcref_System_Attribute) then warning(Error(FSComp.SR.tcTypeDoesNotInheritAttribute(), mAttr)) - let attrib = - match item with + let attrib = + match item with | Item.CtorGroup(methodName, minfos) -> - let meths = minfos |> List.map (fun minfo -> minfo, None) + let meths = minfos |> List.map (fun minfo -> minfo, None) let afterResolution = ForNewConstructors cenv.tcSink env tyid.idRange methodName minfos - let (expr, attributeAssignedNamedItems, _), _ = + let (expr, attributeAssignedNamedItems, _), _ = TcMethodApplication true cenv env tpenv None [] mAttr mAttr methodName None ad PossiblyMutates false meths afterResolution NormalValUse [arg] (NewInferenceType ()) [] UnifyTypes cenv env mAttr ty (tyOfExpr cenv.g expr) - - let mkAttribExpr e = + + let mkAttribExpr e = AttribExpr(e, EvalLiteralExprOrAttribArg cenv.g e) - let namedAttribArgMap = + let namedAttribArgMap = attributeAssignedNamedItems |> List.map (fun (CallerNamedArg(id, CallerArg(argtyv, m, isOpt, callerArgExpr))) -> if isOpt then error(Error(FSComp.SR.tcOptionalArgumentsCannotBeUsedInCustomAttribute(), m)) let m = callerArgExpr.Range let setterItem, _ = ResolveLongIdentInType cenv.tcSink cenv.nameResolver env.NameEnv LookupKind.Expr m ad id IgnoreOverrides TypeNameResolutionInfo.Default ty - let nm, isProp, argty = - match setterItem with - | Item.Property (_, [pinfo]) -> - if not pinfo.HasSetter then + let nm, isProp, argty = + match setterItem with + | Item.Property (_, [pinfo]) -> + if not pinfo.HasSetter then errorR(Error(FSComp.SR.tcPropertyCannotBeSet0(), m)) id.idText, true, pinfo.GetPropertyType(cenv.amap, m) - | Item.ILField finfo -> + | Item.ILField finfo -> CheckILFieldInfoAccessible cenv.g cenv.amap m ad finfo CheckILFieldAttributes cenv.g finfo m id.idText, false, finfo.FieldType(cenv.amap, m) - | Item.RecdField rfinfo when not rfinfo.IsStatic -> - CheckRecdFieldInfoAttributes cenv.g rfinfo m |> CommitOperationResult + | Item.RecdField rfinfo when not rfinfo.IsStatic -> + CheckRecdFieldInfoAttributes cenv.g rfinfo m |> CommitOperationResult CheckRecdFieldInfoAccessible cenv.amap m ad rfinfo - // This uses the F# backend name mangling of fields.... + // This uses the F# backend name mangling of fields.... let nm = ComputeFieldName rfinfo.Tycon rfinfo.RecdField nm, false, rfinfo.FieldType - | _ -> - errorR(Error(FSComp.SR.tcPropertyOrFieldNotFoundInAttribute(), m)) + | _ -> + errorR(Error(FSComp.SR.tcPropertyOrFieldNotFoundInAttribute(), m)) id.idText, false, cenv.g.unit_ty let propNameItem = Item.SetterArg(id, setterItem) CallNameResolutionSink cenv.tcSink (id.idRange, env.NameEnv, propNameItem, emptyTyparInst, ItemOccurence.Use, ad) @@ -9624,54 +9681,63 @@ and TcAttribute canFail cenv (env: TcEnv) attrTgt (synAttr: SynAttribute) = AttribNamedArg(nm, argty, isProp, mkAttribExpr callerArgExpr)) - match expr with - | Expr.Op (TOp.ILCall (_, _, isStruct, _, _, _, _, ilMethRef, [], [], _), [], args, m) -> + match expr with + | Expr.Op (TOp.ILCall (_, _, isStruct, _, _, _, _, ilMethRef, [], [], _), [], args, m) -> if isStruct then error (Error(FSComp.SR.tcCustomAttributeMustBeReferenceType(), m)) if args.Length <> ilMethRef.ArgTypes.Length then error (Error(FSComp.SR.tcCustomAttributeArgumentMismatch(), m)) let args = args |> List.map mkAttribExpr Attrib(tcref, ILAttrib ilMethRef, args, namedAttribArgMap, isAppliedToGetterOrSetter, Some constrainedTgts, m) - | Expr.App ((InnerExprPat(ExprValWithPossibleTypeInst(vref, _, _, _))), _, _, args, _) -> + | Expr.App ((InnerExprPat(ExprValWithPossibleTypeInst(vref, _, _, _))), _, _, args, _) -> 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) - | _ -> + | _ -> error (Error(FSComp.SR.tcCustomAttributeMustInvokeConstructor(), mAttr)) - | _ -> + | _ -> error(Error(FSComp.SR.tcAttributeExpressionsMustBeConstructorCalls(), mAttr)) [ (constrainedTgts, attrib) ], false -and TcAttributesWithPossibleTargets canFail cenv env attrTgt synAttribs = +and TcAttributesWithPossibleTargetsEx canFail cenv env attrTgt attrEx synAttribs = - (false, synAttribs) ||> List.collectFold (fun didFail synAttrib -> - try - let attribsAndTargets, didFail2 = TcAttribute canFail cenv env attrTgt synAttrib - - // This is where we place any checks that completely exclude the use of some particular + (false, synAttribs) ||> List.collectFold (fun didFail synAttrib -> + try + let attribsAndTargets, didFail2 = TcAttributeEx canFail cenv env attrTgt attrEx synAttrib + + // This is where we place any checks that completely exclude the use of some particular // attributes from F#. let attribs = List.map snd attribsAndTargets if HasFSharpAttribute cenv.g cenv.g.attrib_TypeForwardedToAttribute attribs || HasFSharpAttribute cenv.g cenv.g.attrib_CompilationArgumentCountsAttribute attribs || - HasFSharpAttribute cenv.g cenv.g.attrib_CompilationMappingAttribute attribs then + HasFSharpAttribute cenv.g cenv.g.attrib_CompilationMappingAttribute attribs then errorR(Error(FSComp.SR.tcUnsupportedAttribute(), synAttrib.Range)) attribsAndTargets, didFail || didFail2 - with e -> - errorRecovery e synAttrib.Range - [], false) + with e -> + errorRecovery e synAttrib.Range + [], false) -and TcAttributesMaybeFail canFail cenv env attrTgt synAttribs = - let attribsAndTargets, didFail = TcAttributesWithPossibleTargets canFail cenv env attrTgt synAttribs +and TcAttributesMaybeFailEx canFail cenv env attrTgt attrEx synAttribs = + let attribsAndTargets, didFail = TcAttributesWithPossibleTargetsEx canFail cenv env attrTgt attrEx synAttribs attribsAndTargets |> List.map snd, didFail -and TcAttributesCanFail cenv env attrTgt synAttribs = +and TcAttributesWithPossibleTargets canFail cenv env attrTgt synAttribs = + TcAttributesWithPossibleTargetsEx canFail cenv env attrTgt (enum 0) synAttribs + +and TcAttribute canFail cenv (env: TcEnv) attrTgt (synAttr: SynAttribute) = + TcAttributeEx canFail cenv env attrTgt (enum 0) synAttr + +and TcAttributesMaybeFail canFail cenv env attrTgt synAttribs = + TcAttributesMaybeFailEx canFail cenv env attrTgt (enum 0) synAttribs + +and TcAttributesCanFail cenv env attrTgt synAttribs = let attrs, didFail = TcAttributesMaybeFail true cenv env attrTgt synAttribs attrs, (fun () -> if didFail then TcAttributes cenv env attrTgt synAttribs else attrs) -and TcAttributes cenv env attrTgt synAttribs = +and TcAttributes cenv env attrTgt synAttribs = TcAttributesMaybeFail false cenv env attrTgt synAttribs |> fst //------------------------------------------------------------------------- @@ -9683,11 +9749,11 @@ and TcLetBinding cenv isUse env containerInfo declKind tpenv (synBinds, synBinds // Typecheck all the bindings... let checkedBinds, tpenv = List.mapFold (fun tpenv b -> TcNonRecursiveBinding declKind cenv env tpenv (NewInferenceType ()) b) tpenv synBinds let (ContainerInfo(altActualParent, _)) = containerInfo - - // Canonicalize constraints prior to generalization + + // Canonicalize constraints prior to generalization let denv = env.DisplayEnv ConstraintSolver.CanonicalizePartialInferenceProblem cenv.css denv synBindsRange - (checkedBinds |> List.collect (fun tbinfo -> + (checkedBinds |> List.collect (fun tbinfo -> let (CheckedBindingInfo(_, _, _, _, explicitTyparInfo, _, _, _, tauTy, _, _, _, _, _)) = tbinfo let (ExplicitTyparInfo(_, declaredTypars, _)) = explicitTyparInfo let maxInferredTypars = (freeInTypeLeftToRight cenv.g false tauTy) @@ -9696,20 +9762,20 @@ and TcLetBinding cenv isUse env containerInfo declKind tpenv (synBinds, synBinds let lazyFreeInEnv = lazy (GeneralizationHelpers.ComputeUngeneralizableTypars env) // Generalize the bindings... - (((fun x -> x), env, tpenv), checkedBinds) ||> List.fold (fun (buildExpr, env, tpenv) tbinfo -> + (((fun x -> x), env, tpenv), checkedBinds) ||> List.fold (fun (buildExpr, env, tpenv) tbinfo -> let (CheckedBindingInfo(inlineFlag, attrs, doc, tcPatPhase2, explicitTyparInfo, nameToPrelimValSchemeMap, rhsExpr, _, tauTy, m, spBind, _, literalValue, isFixed)) = tbinfo let enclosingDeclaredTypars = [] let (ExplicitTyparInfo(_, declaredTypars, canInferTypars)) = explicitTyparInfo let allDeclaredTypars = enclosingDeclaredTypars @ declaredTypars - let generalizedTypars, prelimValSchemes2 = + let generalizedTypars, prelimValSchemes2 = let canInferTypars = GeneralizationHelpers. ComputeCanInferExtraGeneralizableTypars (containerInfo.ParentRef, canInferTypars, None) let maxInferredTypars = freeInTypeLeftToRight cenv.g false tauTy - let generalizedTypars = - if isNil maxInferredTypars && isNil allDeclaredTypars then - [] - else + let generalizedTypars = + if isNil maxInferredTypars && isNil allDeclaredTypars then + [] + else let freeInEnv = lazyFreeInEnv.Force() let canConstrain = GeneralizationHelpers.CanGeneralizeConstrainedTyparsForDecl declKind GeneralizationHelpers.ComputeAndGeneralizeGenericTypars @@ -9719,54 +9785,64 @@ and TcLetBinding cenv isUse env containerInfo declKind tpenv (synBinds, synBinds generalizedTypars, prelimValSchemes2 - // REVIEW: this scopes generalized type variables. Ensure this is handled properly - // on all other paths. + // REVIEW: this scopes generalized type variables. Ensure this is handled properly + // on all other paths. let tpenv = HideUnscopedTypars generalizedTypars tpenv let valSchemes = NameMap.map (UseCombinedArity cenv.g declKind rhsExpr) prelimValSchemes2 let values = MakeAndPublishVals cenv env (altActualParent, false, declKind, ValNotInRecScope, valSchemes, attrs, doc, literalValue) let checkedPat = tcPatPhase2 (TcPatPhase2Input (values, true)) let prelimRecValues = NameMap.map fst values - - // Now bind the r.h.s. to the l.h.s. + + // Now bind the r.h.s. to the l.h.s. let rhsExpr = mkTypeLambda m generalizedTypars (rhsExpr, tauTy) - match checkedPat with - // Don't introduce temporary or 'let' for 'match against wild' or 'match against unit' + match checkedPat with + // Don't introduce temporary or 'let' for 'match against wild' or 'match against unit' | (TPat_wild _ | TPat_const (Const.Unit, _)) when not isUse && not isFixed && isNil generalizedTypars -> let mkSequentialBind (tm, tmty) = (mkSequential DebugPointAtSequential.Both m rhsExpr tm, tmty) (buildExpr >> mkSequentialBind, env, tpenv) - | _ -> - - // nice: don't introduce awful temporary for r.h.s. in the 99% case where we know what we're binding it to - let patternInputTmp, checkedPat2 = - match checkedPat with - // nice: don't introduce awful temporary for r.h.s. in the 99% case where we know what we're binding it to - | TPat_as (pat, PBind(v, TypeScheme(generalizedTypars', _)), _) - when List.lengthsEqAndForall2 typarRefEq generalizedTypars generalizedTypars' -> - + | _ -> + + // nice: don't introduce awful temporary for r.h.s. in the 99% case where we know what we're binding it to + let patternInputTmp, checkedPat2 = + match checkedPat with + // nice: don't introduce awful temporary for r.h.s. in the 99% case where we know what we're binding it to + | TPat_as (pat, PBind(v, TypeScheme(generalizedTypars', _)), _) + when List.lengthsEqAndForall2 typarRefEq generalizedTypars generalizedTypars' -> + v, pat //Op (LValueOp (LByrefGet,x),[],[],C:\GitHub\dsyme\visualfsharp\a.fs (15,42--15,43) IsSynthetic=false) - | _ when inlineFlag.MustInline -> + | _ when inlineFlag.MustInline -> error(Error(FSComp.SR.tcInvalidInlineSpecification(), m)) - | _ -> + | TPat_query _ when HasFSharpAttribute cenv.g cenv.g.attrib_LiteralAttribute attrs -> + error(Error(FSComp.SR.tcLiteralAttributeCannotUseActivePattern(), m)) + + | _ -> let tmp, _ = mkCompGenLocal m "patternInput" (generalizedTypars +-> tauTy) - if isUse || isFixed then + if isUse then + let isDiscarded = match checkedPat with TPat_wild _ -> true | _ -> false + if not isDiscarded then + errorR(Error(FSComp.SR.tcInvalidUseBinding(), m)) + else + ErrorLogger.checkLanguageFeatureError cenv.g.langVersion Features.LanguageFeature.UseBindingValueDiscard checkedPat.Range + + elif isFixed then errorR(Error(FSComp.SR.tcInvalidUseBinding(), m)) - - // If the overall declaration is declaring statics or a module value, then force the patternInputTmp to also + + // If the overall declaration is declaring statics or a module value, then force the patternInputTmp to also // have representation as module value. - if (DeclKind.MustHaveArity declKind) then + if (DeclKind.MustHaveArity declKind) then AdjustValToTopVal tmp altActualParent (InferArityOfExprBinding cenv.g AllowTypeDirectedDetupling.Yes tmp rhsExpr) tmp, checkedPat // Add the bind "let patternInputTmp = rhsExpr" to the bodyExpr we get from mkPatBind - let mkRhsBind (bodyExpr, bodyExprTy) = + let mkRhsBind (bodyExpr, bodyExprTy) = let letExpr = mkLet spBind m patternInputTmp rhsExpr bodyExpr letExpr, bodyExprTy @@ -9780,17 +9856,19 @@ and TcLetBinding cenv isUse env containerInfo declKind tpenv (synBinds, synBinds let matchx = if (DeclKind.ConvertToLinearBindings declKind) then LinearizeTopMatch cenv.g altActualParent matchx else matchx matchx, bodyExprTy - // Add the dispose of any "use x = ..." to bodyExpr + // Add the dispose of any "use x = ..." to bodyExpr let mkCleanup (bodyExpr, bodyExprTy) = - if isUse && not isFixed then + if isUse && not isFixed then + let isDiscarded = match checkedPat2 with TPat_wild _ -> true | _ -> false + let allValsDefinedByPattern = if isDiscarded then [patternInputTmp] else allValsDefinedByPattern (allValsDefinedByPattern, (bodyExpr, bodyExprTy)) ||> List.foldBack (fun v (bodyExpr, bodyExprTy) -> AddCxTypeMustSubsumeType ContextInfo.NoContext denv cenv.css v.Range NoTrace cenv.g.system_IDisposable_ty v.Type let cleanupE = BuildDisposableCleanup cenv env m v mkTryFinally cenv.g (bodyExpr, cleanupE, m, bodyExprTy, DebugPointAtTry.Body, DebugPointAtFinally.No), bodyExprTy) - else + else (bodyExpr, bodyExprTy) - let envInner = AddLocalValMap cenv.tcSink scopem prelimRecValues env + let envInner = AddLocalValMap cenv.g cenv.tcSink scopem prelimRecValues env ((buildExpr >> mkCleanup >> mkPatBind >> mkRhsBind), envInner, tpenv)) @@ -9815,112 +9893,112 @@ and TcLetBindings cenv env containerInfo declKind tpenv (binds, bindsm, scopem) let binds = stripLets [] expr binds, env, tpenv -and CheckMemberFlags optIntfSlotTy newslotsOK overridesOK memberFlags m = - if newslotsOK = NoNewSlots && memberFlags.IsDispatchSlot then +and CheckMemberFlags optIntfSlotTy newslotsOK overridesOK memberFlags m = + if newslotsOK = NoNewSlots && memberFlags.IsDispatchSlot then errorR(Error(FSComp.SR.tcAbstractMembersIllegalInAugmentation(), m)) - if overridesOK = ErrorOnOverrides && memberFlags.MemberKind = MemberKind.Constructor then + if overridesOK = ErrorOnOverrides && memberFlags.MemberKind = SynMemberKind.Constructor then errorR(Error(FSComp.SR.tcConstructorsIllegalInAugmentation(), m)) - if overridesOK = WarnOnOverrides && memberFlags.IsOverrideOrExplicitImpl && Option.isNone optIntfSlotTy then + if overridesOK = WarnOnOverrides && memberFlags.IsOverrideOrExplicitImpl && Option.isNone optIntfSlotTy then warning(OverrideInIntrinsicAugmentation m) - if overridesOK = ErrorOnOverrides && memberFlags.IsOverrideOrExplicitImpl then + if overridesOK = ErrorOnOverrides && memberFlags.IsOverrideOrExplicitImpl then error(Error(FSComp.SR.tcMethodOverridesIllegalHere(), m)) - -/// Apply the pre-assumed knowledge available to type inference prior to looking at -/// the _body_ of the binding. For example, in a letrec we may assume this knowledge -/// for each binding in the letrec prior to any type inference. This might, for example, -/// tell us the type of the arguments to a recursive function. -and ApplyTypesFromArgumentPatterns (cenv, env, optArgsOK, ty, m, tpenv, NormalizedBindingRhs (pushedPats, retInfoOpt, e), memberFlagsOpt: MemberFlags option) = + +/// Apply the pre-assumed knowledge available to type inference prior to looking at +/// the _body_ of the binding. For example, in a letrec we may assume this knowledge +/// for each binding in the letrec prior to any type inference. This might, for example, +/// tell us the type of the arguments to a recursive function. +and ApplyTypesFromArgumentPatterns (cenv, env, optArgsOK, ty, m, tpenv, NormalizedBindingRhs (pushedPats, retInfoOpt, e), memberFlagsOpt: SynMemberFlags option) = match pushedPats with | [] -> - match retInfoOpt with + match retInfoOpt with | None -> () - | Some (SynBindingReturnInfo (retInfoTy, m, _)) -> + | Some (SynBindingReturnInfo (retInfoTy, m, _)) -> let retInfoTy, _ = TcTypeAndRecover cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv retInfoTy UnifyTypes cenv env m ty retInfoTy // Property setters always have "unit" return type - match memberFlagsOpt with - | Some memFlags when memFlags.MemberKind = MemberKind.PropertySet -> + match memberFlagsOpt with + | Some memFlags when memFlags.MemberKind = SynMemberKind.PropertySet -> UnifyTypes cenv env m ty cenv.g.unit_ty | _ -> () - - | pushedPat :: morePushedPats -> + + | pushedPat :: morePushedPats -> let domainTy, resultTy = UnifyFunctionType None cenv env.DisplayEnv m ty // We apply the type information from the patterns by type checking the - // "simple" patterns against 'domainTy'. They get re-typechecked later. + // "simple" patterns against 'domainTy'. They get re-typechecked later. ignore (TcSimplePats cenv optArgsOK CheckCxs domainTy env (tpenv, Map.empty, Set.empty) pushedPat) ApplyTypesFromArgumentPatterns (cenv, env, optArgsOK, resultTy, m, tpenv, NormalizedBindingRhs (morePushedPats, retInfoOpt, e), memberFlagsOpt) /// Check if the type annotations and inferred type information in a value give a /// full and complete generic type for a value. If so, enable generic recursion. -and ComputeIsComplete enclosingDeclaredTypars declaredTypars ty = - Zset.isEmpty (List.fold (fun acc v -> Zset.remove v acc) - (freeInType CollectAllNoCaching ty).FreeTypars - (enclosingDeclaredTypars@declaredTypars)) +and ComputeIsComplete enclosingDeclaredTypars declaredTypars ty = + Zset.isEmpty (List.fold (fun acc v -> Zset.remove v acc) + (freeInType CollectAllNoCaching ty).FreeTypars + (enclosingDeclaredTypars@declaredTypars)) -/// Determine if a uniquely-identified-abstract-slot exists for an override member (or interface member implementation) based on the information available -/// at the syntactic definition of the member (i.e. prior to type inference). If so, we know the expected signature of the override, and the full slotsig -/// it implements. Apply the inferred slotsig. -and ApplyAbstractSlotInference (cenv: cenv) (envinner: TcEnv) (bindingTy, m, synTyparDecls, declaredTypars, memberId, tcrefObjTy, renaming, _objTy, optIntfSlotTy, valSynData, memberFlags, attribs) = +/// Determine if a uniquely-identified-abstract-slot exists for an override member (or interface member implementation) based on the information available +/// at the syntactic definition of the member (i.e. prior to type inference). If so, we know the expected signature of the override, and the full slotsig +/// it implements. Apply the inferred slotsig. +and ApplyAbstractSlotInference (cenv: cenv) (envinner: TcEnv) (bindingTy, m, synTyparDecls, declaredTypars, memberId, tcrefObjTy, renaming, _objTy, optIntfSlotTy, valSynData, memberFlags: SynMemberFlags, attribs) = let ad = envinner.eAccessRights - let typToSearchForAbstractMembers = - match optIntfSlotTy with - | Some (ty, abstractSlots) -> - // The interface type is in terms of the type's type parameters. - // We need a signature in terms of the values' type parameters. - ty, Some abstractSlots - | None -> + let typToSearchForAbstractMembers = + match optIntfSlotTy with + | Some (ty, abstractSlots) -> + // The interface type is in terms of the type's type parameters. + // We need a signature in terms of the values' type parameters. + ty, Some abstractSlots + | None -> tcrefObjTy, None - // Determine if a uniquely-identified-override exists based on the information - // at the member signature. If so, we know the type of this member, and the full slotsig - // it implements. Apply the inferred slotsig. - if memberFlags.IsOverrideOrExplicitImpl then - + // Determine if a uniquely-identified-override exists based on the information + // at the member signature. If so, we know the type of this member, and the full slotsig + // it implements. Apply the inferred slotsig. + if memberFlags.IsOverrideOrExplicitImpl then + // for error detection, we want to compare finality when testing for equivalence - let methInfosEquivByNameAndSig meths = + let methInfosEquivByNameAndSig meths = match meths with | [] -> false | head :: tail -> tail |> List.forall (MethInfosEquivByNameAndSig EraseNone false cenv.g cenv.amap m head) - - match memberFlags.MemberKind with - | MemberKind.Member -> - let dispatchSlots, dispatchSlotsArityMatch = + + match memberFlags.MemberKind with + | SynMemberKind.Member -> + let dispatchSlots, dispatchSlotsArityMatch = GetAbstractMethInfosForSynMethodDecl(cenv.infoReader, ad, memberId, m, typToSearchForAbstractMembers, valSynData) - let uniqueAbstractMethSigs = - match dispatchSlots with - | [] -> + let uniqueAbstractMethSigs = + match dispatchSlots with + | [] -> errorR(Error(FSComp.SR.tcNoMemberFoundForOverride(), memberId.idRange)) [] - | slots -> - match dispatchSlotsArityMatch with + | slots -> + match dispatchSlotsArityMatch with | meths when methInfosEquivByNameAndSig meths -> meths - | [] -> + | [] -> let details = slots - |> Seq.map (NicePrint.stringOfMethInfo cenv.amap m envinner.DisplayEnv) + |> Seq.map (NicePrint.stringOfMethInfo cenv.infoReader m envinner.DisplayEnv) |> Seq.map (sprintf "%s %s" System.Environment.NewLine) |> String.concat "" errorR(Error(FSComp.SR.tcOverrideArityMismatch details, memberId.idRange)) [] | _ -> [] // check that method to override is sealed is located at CheckOverridesAreAllUsedOnce (typrelns.fs) - // We hit this case when it is ambiguous which abstract method is being implemented. + // We hit this case when it is ambiguous which abstract method is being implemented. + + - - - // If we determined a unique member then utilize the type information from the slotsig - let declaredTypars = - match uniqueAbstractMethSigs with - | uniqueAbstractMeth :: _ -> + // If we determined a unique member then utilize the type information from the slotsig + let declaredTypars = + match uniqueAbstractMethSigs with + | uniqueAbstractMeth :: _ -> let uniqueAbstractMeth = uniqueAbstractMeth.Instantiate(cenv.amap, m, renaming) - - let typarsFromAbsSlotAreRigid, typarsFromAbsSlot, argTysFromAbsSlot, retTyFromAbsSlot = + + let typarsFromAbsSlotAreRigid, typarsFromAbsSlot, argTysFromAbsSlot, retTyFromAbsSlot = FreshenAbstractSlot cenv.g cenv.amap m synTyparDecls uniqueAbstractMeth let declaredTypars = (if typarsFromAbsSlotAreRigid then typarsFromAbsSlot else declaredTypars) @@ -9929,98 +10007,98 @@ and ApplyAbstractSlotInference (cenv: cenv) (envinner: TcEnv) (bindingTy, m, syn UnifyTypes cenv envinner m bindingTy absSlotTy declaredTypars - | _ -> declaredTypars + | _ -> declaredTypars // Retained to ensure use of an FSComp.txt entry, can be removed at a later date: errorR(Error(FSComp.SR.tcDefaultAmbiguous(), memberId.idRange)) - // What's the type containing the abstract slot we're implementing? Used later on in MakeMemberDataAndMangledNameForMemberVal. - // This type must be in terms of the enclosing type's formal type parameters, hence the application of revRenaming + // What's the type containing the abstract slot we're implementing? Used later on in MakeMemberDataAndMangledNameForMemberVal. + // This type must be in terms of the enclosing type's formal type parameters, hence the application of revRenaming - let optInferredImplSlotTys = - match optIntfSlotTy with + let optInferredImplSlotTys = + match optIntfSlotTy with | Some (x, _) -> [x] | None -> uniqueAbstractMethSigs |> List.map (fun x -> x.ApparentEnclosingType) optInferredImplSlotTys, declaredTypars - | MemberKind.PropertyGet - | MemberKind.PropertySet as k -> + | SynMemberKind.PropertyGet + | SynMemberKind.PropertySet as k -> let dispatchSlots = GetAbstractPropInfosForSynPropertyDecl(cenv.infoReader, ad, memberId, m, typToSearchForAbstractMembers, k, valSynData) - // Only consider those abstract slots where the get/set flags match the value we're defining - let dispatchSlots = - dispatchSlots - |> List.filter (fun pinfo -> - (pinfo.HasGetter && k=MemberKind.PropertyGet) || - (pinfo.HasSetter && k=MemberKind.PropertySet)) - - // Find the unique abstract slot if it exists - let uniqueAbstractPropSigs = - match dispatchSlots with - | [] when not (CompileAsEvent cenv.g attribs) -> - errorR(Error(FSComp.SR.tcNoPropertyFoundForOverride(), memberId.idRange)) + // Only consider those abstract slots where the get/set flags match the value we're defining + let dispatchSlots = + dispatchSlots + |> List.filter (fun pinfo -> + (pinfo.HasGetter && k=SynMemberKind.PropertyGet) || + (pinfo.HasSetter && k=SynMemberKind.PropertySet)) + + // Find the unique abstract slot if it exists + let uniqueAbstractPropSigs = + match dispatchSlots with + | [] when not (CompileAsEvent cenv.g attribs) -> + errorR(Error(FSComp.SR.tcNoPropertyFoundForOverride(), memberId.idRange)) [] | [uniqueAbstractProp] -> [uniqueAbstractProp] - | _ -> - // We hit this case when it is ambiguous which abstract property is being implemented. + | _ -> + // We hit this case when it is ambiguous which abstract property is being implemented. [] - // If we determined a unique member then utilize the type information from the slotsig - uniqueAbstractPropSigs |> List.iter (fun uniqueAbstractProp -> + // If we determined a unique member then utilize the type information from the slotsig + uniqueAbstractPropSigs |> List.iter (fun uniqueAbstractProp -> - let kIsGet = (k = MemberKind.PropertyGet) + let kIsGet = (k = SynMemberKind.PropertyGet) - if not (if kIsGet then uniqueAbstractProp.HasGetter else uniqueAbstractProp.HasSetter) then + if not (if kIsGet then uniqueAbstractProp.HasGetter else uniqueAbstractProp.HasSetter) then error(Error(FSComp.SR.tcAbstractPropertyMissingGetOrSet(if kIsGet then "getter" else "setter"), memberId.idRange)) let uniqueAbstractMeth = if kIsGet then uniqueAbstractProp.GetterMethod else uniqueAbstractProp.SetterMethod let uniqueAbstractMeth = uniqueAbstractMeth.Instantiate(cenv.amap, m, renaming) - let _, typarsFromAbsSlot, argTysFromAbsSlot, retTyFromAbsSlot = + let _, typarsFromAbsSlot, argTysFromAbsSlot, retTyFromAbsSlot = FreshenAbstractSlot cenv.g cenv.amap m synTyparDecls uniqueAbstractMeth - if not (isNil typarsFromAbsSlot) then + if not (isNil typarsFromAbsSlot) then errorR(InternalError("Unexpected generic property", memberId.idRange)) - let absSlotTy = - if (memberFlags.MemberKind = MemberKind.PropertyGet) - then mkMethodTy cenv.g argTysFromAbsSlot retTyFromAbsSlot - else - match argTysFromAbsSlot with + let absSlotTy = + if (memberFlags.MemberKind = SynMemberKind.PropertyGet) + then mkMethodTy cenv.g argTysFromAbsSlot retTyFromAbsSlot + else + match argTysFromAbsSlot with | [argTysFromAbsSlot] -> mkRefTupledTy cenv.g argTysFromAbsSlot --> cenv.g.unit_ty - | _ -> - error(Error(FSComp.SR.tcInvalidSignatureForSet(), memberId.idRange)) + | _ -> + error(Error(FSComp.SR.tcInvalidSignatureForSet(), memberId.idRange)) retTyFromAbsSlot --> cenv.g.unit_ty UnifyTypes cenv envinner m bindingTy absSlotTy) - - // What's the type containing the abstract slot we're implementing? Used later on in MakeMemberDataAndMangledNameForMemberVal. + + // What's the type containing the abstract slot we're implementing? Used later on in MakeMemberDataAndMangledNameForMemberVal. // This type must be in terms of the enclosing type's formal type parameters, hence the application of revRenaming. - - let optInferredImplSlotTys = - match optIntfSlotTy with + + let optInferredImplSlotTys = + match optIntfSlotTy with | Some (x, _) -> [ x ] - | None -> uniqueAbstractPropSigs |> List.map (fun pinfo -> pinfo.ApparentEnclosingType) + | None -> uniqueAbstractPropSigs |> List.map (fun pinfo -> pinfo.ApparentEnclosingType) optInferredImplSlotTys, declaredTypars - | _ -> - match optIntfSlotTy with - | Some (x, _) -> [x], declaredTypars + | _ -> + match optIntfSlotTy with + | Some (x, _) -> [x], declaredTypars | None -> [], declaredTypars else - [], declaredTypars + [], declaredTypars -and CheckForNonAbstractInterface declKind tcref memberFlags m = - if isInterfaceTyconRef tcref then - if memberFlags.MemberKind = MemberKind.ClassConstructor then +and CheckForNonAbstractInterface declKind tcref (memberFlags: SynMemberFlags) m = + if isInterfaceTyconRef tcref then + if memberFlags.MemberKind = SynMemberKind.ClassConstructor then error(Error(FSComp.SR.tcStaticInitializersIllegalInInterface(), m)) - elif memberFlags.MemberKind = MemberKind.Constructor then + elif memberFlags.MemberKind = SynMemberKind.Constructor then error(Error(FSComp.SR.tcObjectConstructorsIllegalInInterface(), m)) - elif memberFlags.IsOverrideOrExplicitImpl then + elif memberFlags.IsOverrideOrExplicitImpl then error(Error(FSComp.SR.tcMemberOverridesIllegalInInterface(), m)) elif not (declKind=ExtrinsicExtensionBinding || memberFlags.IsDispatchSlot ) then error(Error(FSComp.SR.tcConcreteMembersIllegalInInterface(), m)) @@ -10029,107 +10107,107 @@ and CheckForNonAbstractInterface declKind tcref memberFlags m = // TcLetrec - AnalyzeAndMakeAndPublishRecursiveValue s //------------------------------------------------------------------------ -and AnalyzeRecursiveStaticMemberOrValDecl +and AnalyzeRecursiveStaticMemberOrValDecl (cenv, - envinner: TcEnv, + envinner: TcEnv, tpenv, - declKind, + declKind, newslotsOK, overridesOK, tcrefContainerInfo, vis1, id: Ident, vis2, - declaredTypars, + declaredTypars, memberFlagsOpt, - thisIdOpt, + thisIdOpt, bindingAttribs, valSynInfo, - ty, + ty, bindingRhs, mBinding, explicitTyparInfo) = let vis = CombineVisibilityAttribs vis1 vis2 mBinding - // Check if we're defining a member, in which case generate the internal unique - // name for the member and the information about which type it is augmenting - - match tcrefContainerInfo, memberFlagsOpt with - | (Some(MemberOrValContainerInfo(tcref, optIntfSlotTy, baseValOpt, _safeInitInfo, declaredTyconTypars)), Some memberFlags) -> + // Check if we're defining a member, in which case generate the internal unique + // name for the member and the information about which type it is augmenting + + match tcrefContainerInfo, memberFlagsOpt with + | (Some(MemberOrValContainerInfo(tcref, optIntfSlotTy, baseValOpt, _safeInitInfo, declaredTyconTypars)), Some memberFlags) -> assert (Option.isNone optIntfSlotTy) - + CheckMemberFlags None newslotsOK overridesOK memberFlags id.idRange CheckForNonAbstractInterface declKind tcref memberFlags id.idRange - if memberFlags.MemberKind = MemberKind.Constructor && tcref.Deref.IsExceptionDecl then - error(Error(FSComp.SR.tcConstructorsDisallowedInExceptionAugmentation(), id.idRange)) + if memberFlags.MemberKind = SynMemberKind.Constructor && tcref.Deref.IsExceptionDecl then + error(Error(FSComp.SR.tcConstructorsDisallowedInExceptionAugmentation(), id.idRange)) let isExtrinsic = (declKind = ExtrinsicExtensionBinding) let _, enclosingDeclaredTypars, _, objTy, thisTy = FreshenObjectArgType cenv mBinding TyparRigidity.WillBeRigid tcref isExtrinsic declaredTyconTypars let envinner = AddDeclaredTypars CheckForDuplicateTypars enclosingDeclaredTypars envinner - let envinner = MakeInnerEnvForTyconRef envinner tcref isExtrinsic + let envinner = MakeInnerEnvForTyconRef envinner tcref isExtrinsic + + let safeThisValOpt, baseValOpt = + match memberFlags.MemberKind with - let safeThisValOpt, baseValOpt = - match memberFlags.MemberKind with - // Explicit struct or class constructor - | MemberKind.Constructor -> - // A fairly adhoc place to put this check + | SynMemberKind.Constructor -> + // A fairly adhoc place to put this check if tcref.IsStructOrEnumTycon && (match valSynInfo with SynValInfo([[]], _) -> true | _ -> false) then errorR(Error(FSComp.SR.tcStructsCannotHaveConstructorWithNoArguments(), mBinding)) - if not tcref.IsFSharpObjectModelTycon then + if not tcref.IsFSharpObjectModelTycon then errorR(Error(FSComp.SR.tcConstructorsIllegalForThisType(), id.idRange)) let safeThisValOpt = MakeAndPublishSafeThisVal cenv envinner thisIdOpt thisTy - - // baseValOpt is the 'base' variable associated with the inherited portion of a class - // It is declared once on the 'inheritedTys clause, but a fresh binding is made for - // each member that may use it. - let baseValOpt = - match GetSuperTypeOfType cenv.g cenv.amap mBinding objTy with - | Some superTy -> MakeAndPublishBaseVal cenv envinner (match baseValOpt with None -> None | Some v -> Some v.Id) superTy + + // baseValOpt is the 'base' variable associated with the inherited portion of a class + // It is declared once on the 'inheritedTys clause, but a fresh binding is made for + // each member that may use it. + let baseValOpt = + match GetSuperTypeOfType cenv.g cenv.amap mBinding objTy with + | Some superTy -> MakeAndPublishBaseVal cenv envinner (match baseValOpt with None -> None | Some v -> Some v.Id) superTy | None -> None let domainTy = NewInferenceType () - // This is the type we pretend a constructor has, because its implementation must ultimately appear to return a value of the given type - // This is somewhat awkward later in codegen etc. + // This is the type we pretend a constructor has, because its implementation must ultimately appear to return a value of the given type + // This is somewhat awkward later in codegen etc. UnifyTypes cenv envinner mBinding ty (domainTy --> objTy) safeThisValOpt, baseValOpt - - | _ -> + + | _ -> None, None - - let memberInfo = + + let memberInfo = let isExtrinsic = (declKind = ExtrinsicExtensionBinding) MakeMemberDataAndMangledNameForMemberVal(cenv.g, tcref, isExtrinsic, bindingAttribs, [], memberFlags, valSynInfo, id, false) envinner, tpenv, id, None, Some memberInfo, vis, vis2, safeThisValOpt, enclosingDeclaredTypars, baseValOpt, explicitTyparInfo, bindingRhs, declaredTypars - - // non-member bindings. How easy. - | _ -> + + // non-member bindings. How easy. + | _ -> envinner, tpenv, id, None, None, vis, vis2, None, [], None, explicitTyparInfo, bindingRhs, declaredTypars - -and AnalyzeRecursiveInstanceMemberDecl + +and AnalyzeRecursiveInstanceMemberDecl (cenv, envinner: TcEnv, tpenv, declKind, synTyparDecls, - valSynInfo, + valSynInfo, explicitTyparInfo: ExplicitTyparInfo, newslotsOK, overridesOK, vis1, - thisId, + thisId, memberId: Ident, toolId: Ident option, bindingAttribs, - vis2, + vis2, tcrefContainerInfo, memberFlagsOpt, ty, @@ -10138,50 +10216,50 @@ and AnalyzeRecursiveInstanceMemberDecl let vis = CombineVisibilityAttribs vis1 vis2 mBinding let (ExplicitTyparInfo(_, declaredTypars, infer)) = explicitTyparInfo - match tcrefContainerInfo, memberFlagsOpt with - // Normal instance members. - | Some(MemberOrValContainerInfo(tcref, optIntfSlotTy, baseValOpt, _safeInitInfo, declaredTyconTypars)), Some memberFlags -> - + match tcrefContainerInfo, memberFlagsOpt with + // Normal instance members. + | Some(MemberOrValContainerInfo(tcref, optIntfSlotTy, baseValOpt, _safeInitInfo, declaredTyconTypars)), Some memberFlags -> + CheckMemberFlags optIntfSlotTy newslotsOK overridesOK memberFlags mBinding - if Option.isSome vis && memberFlags.IsOverrideOrExplicitImpl then + if Option.isSome vis && memberFlags.IsOverrideOrExplicitImpl then errorR(Error(FSComp.SR.tcOverridesCannotHaveVisibilityDeclarations(), memberId.idRange)) - // Syntactically push the "this" variable across to be a lambda on the right + // Syntactically push the "this" variable across to be a lambda on the right let bindingRhs = PushOnePatternToRhs cenv true (mkSynThisPatVar thisId) bindingRhs - - // The type being augmented tells us the type of 'this' + + // The type being augmented tells us the type of 'this' let isExtrinsic = (declKind = ExtrinsicExtensionBinding) let tcrefObjTy, enclosingDeclaredTypars, renaming, objTy, thisTy = FreshenObjectArgType cenv mBinding TyparRigidity.WillBeRigid tcref isExtrinsic declaredTyconTypars let envinner = AddDeclaredTypars CheckForDuplicateTypars enclosingDeclaredTypars envinner - // If private, the member's accessibility is related to 'tcref' - let envinner = MakeInnerEnvForTyconRef envinner tcref isExtrinsic + // If private, the member's accessibility is related to 'tcref' + let envinner = MakeInnerEnvForTyconRef envinner tcref isExtrinsic let baseValOpt = if tcref.IsFSharpObjectModelTycon then baseValOpt else None - // Apply the known type of 'this' + // Apply the known type of 'this' let bindingTy = NewInferenceType () UnifyTypes cenv envinner mBinding ty (thisTy --> bindingTy) - CheckForNonAbstractInterface declKind tcref memberFlags memberId.idRange - - // Determine if a uniquely-identified-override List.exists based on the information - // at the member signature. If so, we know the type of this member, and the full slotsig - // it implements. Apply the inferred slotsig. - let optInferredImplSlotTys, declaredTypars = + CheckForNonAbstractInterface declKind tcref memberFlags memberId.idRange + + // Determine if a uniquely-identified-override List.exists based on the information + // at the member signature. If so, we know the type of this member, and the full slotsig + // it implements. Apply the inferred slotsig. + let optInferredImplSlotTys, declaredTypars = ApplyAbstractSlotInference cenv envinner (bindingTy, mBinding, synTyparDecls, declaredTypars, memberId, tcrefObjTy, renaming, objTy, optIntfSlotTy, valSynInfo, memberFlags, bindingAttribs) - // Update the ExplicitTyparInfo to reflect the declaredTypars inferred from the abstract slot + // Update the ExplicitTyparInfo to reflect the declaredTypars inferred from the abstract slot let explicitTyparInfo = ExplicitTyparInfo(declaredTypars, declaredTypars, infer) - // baseValOpt is the 'base' variable associated with the inherited portion of a class - // It is declared once on the 'inheritedTys clause, but a fresh binding is made for - // each member that may use it. - let baseValOpt = - match GetSuperTypeOfType cenv.g cenv.amap mBinding objTy with - | Some superTy -> MakeAndPublishBaseVal cenv envinner (match baseValOpt with None -> None | Some v -> Some v.Id) superTy + // baseValOpt is the 'base' variable associated with the inherited portion of a class + // It is declared once on the 'inheritedTys clause, but a fresh binding is made for + // each member that may use it. + let baseValOpt = + match GetSuperTypeOfType cenv.g cenv.amap mBinding objTy with + | Some superTy -> MakeAndPublishBaseVal cenv envinner (match baseValOpt with None -> None | Some v -> Some v.Id) superTy | None -> None let memberInfo = MakeMemberDataAndMangledNameForMemberVal(cenv.g, tcref, isExtrinsic, bindingAttribs, optInferredImplSlotTys, memberFlags, valSynInfo, memberId, false) @@ -10194,11 +10272,11 @@ and AnalyzeRecursiveInstanceMemberDecl //ignore toolId envinner, tpenv, memberId, toolId, Some memberInfo, vis, vis2, None, enclosingDeclaredTypars, baseValOpt, explicitTyparInfo, bindingRhs, declaredTypars - | _ -> - error(Error(FSComp.SR.tcRecursiveBindingsWithMembersMustBeDirectAugmentation(), mBinding)) + | _ -> + error(Error(FSComp.SR.tcRecursiveBindingsWithMembersMustBeDirectAugmentation(), mBinding)) and AnalyzeRecursiveDecl - (cenv, + (cenv, envinner, tpenv, declKind, @@ -10218,41 +10296,41 @@ and AnalyzeRecursiveDecl bindingRhs, mBinding) = - let rec analyzeRecursiveDeclPat tpenv p = - match p with + let rec analyzeRecursiveDeclPat tpenv p = + match p with | SynPat.FromParseError(pat', _) -> analyzeRecursiveDeclPat tpenv pat' - | SynPat.Typed(pat', cty, _) -> + | SynPat.Typed(pat', cty, _) -> let cty', tpenv = TcTypeAndRecover cenv NewTyparsOK CheckCxs ItemOccurence.UseInType envinner tpenv cty UnifyTypes cenv envinner mBinding ty cty' - analyzeRecursiveDeclPat tpenv pat' - | SynPat.Attrib(_pat', _attribs, m) -> + analyzeRecursiveDeclPat tpenv pat' + | SynPat.Attrib(_pat', _attribs, m) -> error(Error(FSComp.SR.tcAttributesInvalidInPatterns(), m)) - //analyzeRecursiveDeclPat pat' + //analyzeRecursiveDeclPat pat' // This is for the construct 'let rec x = ... and do ... and y = ...' (DEPRECATED IN pars.mly ) // - // Also for - // module rec M = + // Also for + // module rec M = // printfn "hello" // side effects in recursive modules // let x = 1 - | SynPat.Const (SynConst.Unit, m) | SynPat.Wild m -> + | SynPat.Const (SynConst.Unit, m) | SynPat.Wild m -> let id = ident (cenv.niceNameGen.FreshCompilerGeneratedName("doval", m), m) - analyzeRecursiveDeclPat tpenv (SynPat.Named (SynPat.Wild m, id, false, None, m)) - - | SynPat.Named (SynPat.Wild _, id, _, vis2, _) -> - AnalyzeRecursiveStaticMemberOrValDecl - (cenv, envinner, tpenv, declKind, - newslotsOK, overridesOK, tcrefContainerInfo, - vis1, id, vis2, declaredTypars, - memberFlagsOpt, thisIdOpt, bindingAttribs, + analyzeRecursiveDeclPat tpenv (SynPat.Named (id, false, None, m)) + + | SynPat.Named (id, _, vis2, _) -> + AnalyzeRecursiveStaticMemberOrValDecl + (cenv, envinner, tpenv, declKind, + newslotsOK, overridesOK, tcrefContainerInfo, + vis1, id, vis2, declaredTypars, + memberFlagsOpt, thisIdOpt, bindingAttribs, valSynInfo, ty, bindingRhs, mBinding, explicitTyparInfo) - - | SynPat.InstanceMember(thisId, memberId, toolId, vis2, _) -> - AnalyzeRecursiveInstanceMemberDecl - (cenv, envinner, tpenv, declKind, - synTyparDecls, valSynInfo, explicitTyparInfo, newslotsOK, - overridesOK, vis1, thisId, memberId, toolId, - bindingAttribs, vis2, tcrefContainerInfo, + + | SynPat.InstanceMember(thisId, memberId, toolId, vis2, _) -> + AnalyzeRecursiveInstanceMemberDecl + (cenv, envinner, tpenv, declKind, + synTyparDecls, valSynInfo, explicitTyparInfo, newslotsOK, + overridesOK, vis1, thisId, memberId, toolId, + bindingAttribs, vis2, tcrefContainerInfo, memberFlagsOpt, ty, bindingRhs, mBinding) | _ -> error(Error(FSComp.SR.tcOnlySimplePatternsInLetRec(), mBinding)) @@ -10260,7 +10338,7 @@ and AnalyzeRecursiveDecl analyzeRecursiveDeclPat tpenv declPattern -/// This is a major routine that generates the Val for a recursive binding +/// This is a major routine that generates the Val for a recursive binding /// prior to the analysis of the definition of the binding. This includes /// members of all flavours (including properties, implicit class constructors /// and overrides). At this point we perform override inference, to infer @@ -10277,18 +10355,18 @@ and AnalyzeAndMakeAndPublishRecursiveValue // Pull apart the inputs let (NormalizedBinding(vis1, bindingKind, isInline, isMutable, bindingSynAttribs, bindingXmlDoc, synTyparDecls, valSynData, declPattern, bindingRhs, mBinding, spBind)) = binding let (NormalizedBindingRhs(_, _, bindingExpr)) = bindingRhs - let (SynValData(memberFlagsOpt, valSynInfo, thisIdOpt)) = valSynData + let (SynValData(memberFlagsOpt, valSynInfo, thisIdOpt)) = valSynData let (ContainerInfo(altActualParent, tcrefContainerInfo)) = containerInfo - - let attrTgt = DeclKind.AllowedAttribTargets memberFlagsOpt declKind + + let attrTgt = DeclKind.AllowedAttribTargets memberFlagsOpt declKind // Check the attributes on the declaration let bindingAttribs = TcAttributes cenv env attrTgt bindingSynAttribs // Allocate the type inference variable for the inferred type - let ty = NewInferenceType () - - + let ty = NewInferenceType () + + let inlineFlag = ComputeInlineFlag memberFlagsOpt isInline isMutable mBinding if isMutable then errorR(Error(FSComp.SR.tcOnlyRecordFieldsAndSimpleLetCanBeMutable(), mBinding)) @@ -10297,12 +10375,12 @@ and AnalyzeAndMakeAndPublishRecursiveValue let explicitTyparInfo, tpenv = TcBindingTyparDecls false cenv env tpenv synTyparDecls let (ExplicitTyparInfo(_, declaredTypars, _)) = explicitTyparInfo let envinner = AddDeclaredTypars CheckForDuplicateTypars declaredTypars env - + // OK, analyze the declaration and return lots of information about it - let envinner, tpenv, bindingId, toolIdOpt, memberInfoOpt, vis, vis2, safeThisValOpt, enclosingDeclaredTypars, baseValOpt, explicitTyparInfo, bindingRhs, declaredTypars = + let envinner, tpenv, bindingId, toolIdOpt, memberInfoOpt, vis, vis2, safeThisValOpt, enclosingDeclaredTypars, baseValOpt, explicitTyparInfo, bindingRhs, declaredTypars = - AnalyzeRecursiveDecl (cenv, envinner, tpenv, declKind, synTyparDecls, declaredTypars, thisIdOpt, valSynInfo, explicitTyparInfo, - newslotsOK, overridesOK, vis1, declPattern, bindingAttribs, tcrefContainerInfo, + AnalyzeRecursiveDecl (cenv, envinner, tpenv, declKind, synTyparDecls, declaredTypars, thisIdOpt, valSynInfo, explicitTyparInfo, + newslotsOK, overridesOK, vis1, declPattern, bindingAttribs, tcrefContainerInfo, memberFlagsOpt, ty, bindingRhs, mBinding) let optArgsOK = Option.isSome memberFlagsOpt @@ -10310,12 +10388,12 @@ and AnalyzeAndMakeAndPublishRecursiveValue // Assert the types given in the argument patterns ApplyTypesFromArgumentPatterns(cenv, envinner, optArgsOK, ty, mBinding, tpenv, bindingRhs, memberFlagsOpt) - // Do the type annotations give the full and complete generic type? - // If so, generic recursion can be used when using this type. + // Do the type annotations give the full and complete generic type? + // If so, generic recursion can be used when using this type. let isComplete = ComputeIsComplete enclosingDeclaredTypars declaredTypars ty - - // NOTE: The type scheme here is normally not 'complete'!!!! The type is more or less just a type variable at this point. - // NOTE: top arity, type and typars get fixed-up after inference + + // NOTE: The type scheme here is normally not 'complete'!!!! The type is more or less just a type variable at this point. + // NOTE: top arity, type and typars get fixed-up after inference let prelimTyscheme = TypeScheme(enclosingDeclaredTypars@declaredTypars, ty) let partialValReprInfo = TranslateTopValSynInfo mBinding (TcAttributes cenv envinner) valSynInfo let topValInfo = UseSyntacticArity declKind prelimTyscheme partialValReprInfo @@ -10325,47 +10403,47 @@ and AnalyzeAndMakeAndPublishRecursiveValue // Check the literal r.h.s., if any let _, literalValue = TcLiteral cenv ty envinner tpenv (bindingAttribs, bindingExpr) - let extraBindings, extraValues, tpenv, recBindIdx = - let extraBindings = + let extraBindings, extraValues, tpenv, recBindIdx = + let extraBindings = [ for extraBinding in EventDeclarationNormalization.GenerateExtraBindings cenv (bindingAttribs, binding) do yield (NormalizedRecBindingDefn(containerInfo, newslotsOK, declKind, extraBinding)) ] let res, (tpenv, recBindIdx) = List.mapFold (AnalyzeAndMakeAndPublishRecursiveValue overridesOK true cenv env) (tpenv, recBindIdx) extraBindings let extraBindings, extraValues = List.unzip res List.concat extraBindings, List.concat extraValues, tpenv, recBindIdx - - // Create the value + + // Create the value let vspec = MakeAndPublishVal cenv envinner (altActualParent, false, declKind, ValInRecScope isComplete, prelimValScheme, bindingAttribs, bindingXmlDoc, literalValue, isGeneratedEventVal) // Suppress hover tip for "get" and "set" at property definitions, where toolId <> bindingId - match toolIdOpt with + match toolIdOpt with | Some tid when not tid.idRange.IsSynthetic && not (Range.equals tid.idRange bindingId.idRange) -> let item = Item.Value (mkLocalValRef vspec) CallNameResolutionSink cenv.tcSink (tid.idRange, env.NameEnv, item, emptyTyparInst, ItemOccurence.RelatedText, env.eAccessRights) | _ -> () - + let mangledId = ident(vspec.LogicalName, vspec.Range) // Reconstitute the binding with the unique name let revisedBinding = NormalizedBinding (vis1, bindingKind, isInline, isMutable, bindingSynAttribs, bindingXmlDoc, synTyparDecls, valSynData, mkSynPatVar vis2 mangledId, bindingRhs, mBinding, spBind) // Create the RecursiveBindingInfo to use in later phases - let rbinfo = - let safeInitInfo = - match tcrefContainerInfo with + let rbinfo = + let safeInitInfo = + match tcrefContainerInfo with | Some(MemberOrValContainerInfo(_, _, _, safeInitInfo, _)) -> safeInitInfo | _ -> NoSafeInitInfo - + RecursiveBindingInfo(recBindIdx, containerInfo, enclosingDeclaredTypars, inlineFlag, vspec, explicitTyparInfo, partialValReprInfo, memberInfoOpt, baseValOpt, safeThisValOpt, safeInitInfo, vis, ty, declKind) let recBindIdx = recBindIdx + 1 - // Done - add the declared name to the List.map and return the bundle for use by TcLetrec - let primaryBinding: PreCheckingRecursiveBinding = + // Done - add the declared name to the List.map and return the bundle for use by TcLetrec + let primaryBinding: PreCheckingRecursiveBinding = { SyntacticBinding = revisedBinding RecBindingInfo = rbinfo } ((primaryBinding :: extraBindings), (vspec :: extraValues)), (tpenv, recBindIdx) -and AnalyzeAndMakeAndPublishRecursiveValues overridesOK cenv env tpenv binds = +and AnalyzeAndMakeAndPublishRecursiveValues overridesOK cenv env tpenv binds = let recBindIdx = 0 let res, tpenv = List.mapFold (AnalyzeAndMakeAndPublishRecursiveValue overridesOK false cenv env) (tpenv, recBindIdx) binds let bindings, values = List.unzip res @@ -10376,27 +10454,27 @@ and AnalyzeAndMakeAndPublishRecursiveValues overridesOK cenv env tpenv binds = // TcLetrecBinding //------------------------------------------------------------------------- -and TcLetrecBinding +and TcLetrecBinding (cenv, envRec: TcEnv, scopem, extraGeneralizableTypars: Typars, reqdThisValTyOpt: TType option) - + // The state of the left-to-right iteration through the bindings - (envNonRec: TcEnv, - generalizedRecBinds: PostGeneralizationRecursiveBinding list, - preGeneralizationRecBinds: PreGeneralizationRecursiveBinding list, - tpenv, - uncheckedRecBindsTable: Map) - + (envNonRec: TcEnv, + generalizedRecBinds: PostGeneralizationRecursiveBinding list, + preGeneralizationRecBinds: PreGeneralizationRecursiveBinding list, + tpenv, + uncheckedRecBindsTable: Map) + // This is the actual binding to check - (rbind: PreCheckingRecursiveBinding) = + (rbind: PreCheckingRecursiveBinding) = let (RecursiveBindingInfo(_, _, enclosingDeclaredTypars, _, vspec, explicitTyparInfo, _, _, baseValOpt, safeThisValOpt, safeInitInfo, _, tau, declKind)) = rbind.RecBindingInfo - + let allDeclaredTypars = enclosingDeclaredTypars @ rbind.RecBindingInfo.DeclaredTypars // Notes on FSharp 1.0, 3187: // - Progressively collect the "eligible for early generalization" set of bindings -- DONE // - After checking each binding, check this set to find generalizable bindings - // - The only reason we can't generalize is if a binding refers to type variables to which + // - The only reason we can't generalize is if a binding refers to type variables to which // additional constraints may be applied as part of checking a later binding // - Compute the set by iteratively knocking out bindings that refer to type variables free in later bindings // - Implementation notes: @@ -10404,69 +10482,69 @@ and TcLetrecBinding // - Pass in "free in later bindings" by passing in the set of inference variables for the bindings, i.e. the binding types // - For classes the bindings will include all members in a recursive group of types // - - // Example 1: + + // Example 1: // let f() = g() f: unit -> ?b // and g() = 1 f: unit -> int, can generalize (though now monomorphic) - // Example 2: + // Example 2: // let f() = g() f: unit -> ?b // and g() = [] f: unit -> ?c list, can generalize - - // Example 3: + + // Example 3: // let f() = [] f: unit -> ?b, can generalize immediately // and g() = [] - let envRec = Option.foldBack (AddLocalVal cenv.tcSink scopem) baseValOpt envRec - let envRec = Option.foldBack (AddLocalVal cenv.tcSink scopem) safeThisValOpt envRec + let envRec = Option.foldBack (AddLocalVal cenv.g cenv.tcSink scopem) baseValOpt envRec + let envRec = Option.foldBack (AddLocalVal cenv.g cenv.tcSink scopem) safeThisValOpt envRec - // Members can access protected members of parents of the type, and private members in the type - let envRec = MakeInnerEnvForMember envRec vspec + // Members can access protected members of parents of the type, and private members in the type + let envRec = MakeInnerEnvForMember envRec vspec - let checkedBind, tpenv = + let checkedBind, tpenv = TcNormalizedBinding declKind cenv envRec tpenv tau safeThisValOpt safeInitInfo (enclosingDeclaredTypars, explicitTyparInfo) rbind.SyntacticBinding - (try UnifyTypes cenv envRec vspec.Range (allDeclaredTypars +-> tau) vspec.Type + (try UnifyTypes cenv envRec vspec.Range (allDeclaredTypars +-> tau) vspec.Type with e -> error (Recursion(envRec.DisplayEnv, vspec.Id, tau, vspec.Type, vspec.Range))) - // Inside the incremental class syntax we assert the type of the 'this' variable to be precisely the same type as the + // Inside the incremental class syntax we assert the type of the 'this' variable to be precisely the same type as the // this variable for the implicit class constructor. For static members, we assert the type variables associated // for the class to be identical to those used for the implicit class constructor and the static class constructor. - match reqdThisValTyOpt with - | None -> () - | Some reqdThisValTy -> + match reqdThisValTyOpt with + | None -> () + | Some reqdThisValTy -> let reqdThisValTy, actualThisValTy, rangeForCheck = match GetInstanceMemberThisVariable (vspec, checkedBind.Expr) with - | None -> + | None -> let reqdThisValTy = if isByrefTy cenv.g reqdThisValTy then destByrefTy cenv.g reqdThisValTy else reqdThisValTy let enclosingTyconRef = tcrefOfAppTy cenv.g reqdThisValTy reqdThisValTy, (mkAppTy enclosingTyconRef (List.map mkTyparTy enclosingDeclaredTypars)), vspec.Range - | Some thisVal -> + | Some thisVal -> reqdThisValTy, thisVal.Type, thisVal.Range - if not (AddCxTypeEqualsTypeUndoIfFailed envRec.DisplayEnv cenv.css rangeForCheck actualThisValTy reqdThisValTy) then + if not (AddCxTypeEqualsTypeUndoIfFailed envRec.DisplayEnv cenv.css rangeForCheck actualThisValTy reqdThisValTy) then errorR (Error(FSComp.SR.tcNonUniformMemberUse vspec.DisplayName, vspec.Range)) - let preGeneralizationRecBind = - { RecBindingInfo = rbind.RecBindingInfo + let preGeneralizationRecBind = + { RecBindingInfo = rbind.RecBindingInfo CheckedBinding= checkedBind ExtraGeneralizableTypars= extraGeneralizableTypars } // Remove one binding from the unchecked list - let uncheckedRecBindsTable = + let uncheckedRecBindsTable = assert (uncheckedRecBindsTable.ContainsKey rbind.RecBindingInfo.Val.Stamp) uncheckedRecBindsTable.Remove rbind.RecBindingInfo.Val.Stamp - + // Add one binding to the candidates eligible for generalization let preGeneralizationRecBinds = (preGeneralizationRecBind :: preGeneralizationRecBinds) // Incrementally generalize as many bindings as we can - TcIncrementalLetRecGeneralization cenv scopem (envNonRec, generalizedRecBinds, preGeneralizationRecBinds, tpenv, uncheckedRecBindsTable) + TcIncrementalLetRecGeneralization cenv scopem (envNonRec, generalizedRecBinds, preGeneralizationRecBinds, tpenv, uncheckedRecBindsTable) and TcIncrementalLetRecGeneralization cenv scopem // The state of the left-to-right iteration through the bindings - (envNonRec: TcEnv, - generalizedRecBinds: PostGeneralizationRecursiveBinding list, - preGeneralizationRecBinds: PreGeneralizationRecursiveBinding list, - tpenv, + (envNonRec: TcEnv, + generalizedRecBinds: PostGeneralizationRecursiveBinding list, + preGeneralizationRecBinds: PreGeneralizationRecursiveBinding list, + tpenv, uncheckedRecBindsTable: Map) = let denv = envNonRec.DisplayEnv @@ -10475,23 +10553,23 @@ and TcIncrementalLetRecGeneralization cenv scopem // Attempt to actually generalize some of the candidates eligible for generalization. // Compute which bindings are now eligible for early generalization. - // Do this by computing a greatest fixed point by iteratively knocking out bindings that refer + // Do this by computing a greatest fixed point by iteratively knocking out bindings that refer // to type variables free in later bindings. Look for ones whose type doesn't involve any of the other types - let newGeneralizedRecBinds, preGeneralizationRecBinds, tpenv = + let newGeneralizedRecBinds, preGeneralizationRecBinds, tpenv = //printfn "\n---------------------\nConsidering early generalization after type checking binding %s" vspec.DisplayName // Get the type variables free in bindings that have not yet been checked. - // + // // The naive implementation of this is to iterate all the forward bindings, but this is quadratic. // - // It turns out we can remove the quadratic behaviour as follows. - // - During type checking we already keep a table of recursive uses of values, indexed by target value. - // - This table is usually much smaller than the number of remaining forward declarations ? e.g. in the pathological case you mentioned below this table is size 1. - // - If a forward declaration does not have an entry in this table then its type can't involve any inference variables from the declarations we have already checked. - // - So by scanning the domain of this table we can reduce the complexity down to something like O(n * average-number-of-forward-calls). + // It turns out we can remove the quadratic behaviour as follows. + // - During type checking we already keep a table of recursive uses of values, indexed by target value. + // - This table is usually much smaller than the number of remaining forward declarations ? e.g. in the pathological case you mentioned below this table is size 1. + // - If a forward declaration does not have an entry in this table then its type can't involve any inference variables from the declarations we have already checked. + // - So by scanning the domain of this table we can reduce the complexity down to something like O(n * average-number-of-forward-calls). // - For a fully connected programs or programs where every forward declaration is subject to a forward call, this would be quadratic. However we do not expect call graphs to be like this in practice - // + // // Hence we use the recursive-uses table to guide the process of scraping forward references for frozen types // If the is no entry in the recursive use table then a forward binding has never been used and // the type of a binding will not contain any inference variables. @@ -10501,26 +10579,26 @@ and TcIncrementalLetRecGeneralization cenv scopem // // The forward uses table will always be smaller than the number of potential forward bindings except in extremely // pathological situations - let freeInUncheckedRecBinds = - lazy ((emptyFreeTyvars, cenv.recUses.Contents) ||> Map.fold (fun acc vStamp _ -> + let freeInUncheckedRecBinds = + lazy ((emptyFreeTyvars, cenv.recUses.Contents) ||> Map.fold (fun acc vStamp _ -> match uncheckedRecBindsTable.TryGetValue vStamp with | true, fwdBind -> accFreeInType CollectAllNoCaching fwdBind.RecBindingInfo.Val.Type acc | _ -> acc)) - let rec loop (preGeneralizationRecBinds: PreGeneralizationRecursiveBinding list, - frozenBindings: PreGeneralizationRecursiveBinding list) = + let rec loop (preGeneralizationRecBinds: PreGeneralizationRecursiveBinding list, + frozenBindings: PreGeneralizationRecursiveBinding list) = - let frozenBindingTypes = frozenBindings |> List.map (fun pgrbind -> pgrbind.RecBindingInfo.Val.Type) + let frozenBindingTypes = frozenBindings |> List.map (fun pgrbind -> pgrbind.RecBindingInfo.Val.Type) - let freeInFrozenAndLaterBindings = - if frozenBindingTypes.IsEmpty then + let freeInFrozenAndLaterBindings = + if frozenBindingTypes.IsEmpty then freeInUncheckedRecBinds - else + else lazy (accFreeInTypes CollectAllNoCaching frozenBindingTypes (freeInUncheckedRecBinds.Force())) - let preGeneralizationRecBinds, newFrozenBindings = + let preGeneralizationRecBinds, newFrozenBindings = preGeneralizationRecBinds |> List.partition (fun pgrbind -> @@ -10529,11 +10607,11 @@ and TcIncrementalLetRecGeneralization cenv scopem // Get the free type variables in the binding // // We use the TauType here because the binding may already have been pre-generalized because it has - // a fully type-annotated type signature. We effectively want to generalize the binding + // a fully type-annotated type signature. We effectively want to generalize the binding // again here, properly - for example this means adjusting the expression for the binding to include // a Expr_tlambda. If we use Val.Type then the type will appear closed. let freeInBinding = (freeInType CollectAllNoCaching pgrbind.RecBindingInfo.Val.TauType).FreeTypars - + // Is the binding free of type inference variables? If so, it can be generalized immediately if freeInBinding.IsEmpty then true else @@ -10552,7 +10630,7 @@ and TcIncrementalLetRecGeneralization cenv scopem //printfn "(failed generalization test 3 for binding for %s)" pgrbind.RecBindingInfo.Val.DisplayName - // Type variables free in the non-recursive environment do not stop us generalizing the binding, + // Type variables free in the non-recursive environment do not stop us generalizing the binding, // since they can't be generalized anyway let freeInBinding = Zset.diff freeInBinding freeInEnv @@ -10566,67 +10644,67 @@ and TcIncrementalLetRecGeneralization cenv scopem if freeInBinding.IsEmpty then true else //printfn "(failed generalization test 5 for binding for %s)" pgrbind.RecBindingInfo.Val.DisplayName - + false) - //if canGeneralize then + //if canGeneralize then // printfn "YES: binding for %s can be generalized early" pgrbind.RecBindingInfo.Val.DisplayName - //else + //else // printfn "NO: binding for %s can't be generalized early" pgrbind.RecBindingInfo.Val.DisplayName // Have we reached a fixed point? - if newFrozenBindings.IsEmpty then + if newFrozenBindings.IsEmpty then preGeneralizationRecBinds, frozenBindings else // if not, then repeat loop(preGeneralizationRecBinds, newFrozenBindings@frozenBindings) - + // start with no frozen bindings let newGeneralizableBindings, preGeneralizationRecBinds = loop(preGeneralizationRecBinds, []) - + // Some of the bindings may now have been marked as 'generalizable' (which means they now transition - // from PreGeneralization --> PostGeneralization, since we won't get any more information on - // these bindings by processing later bindings). But this doesn't mean we - // actually generalize all the individual type variables occuring in these bindings - for example, some + // from PreGeneralization --> PostGeneralization, since we won't get any more information on + // these bindings by processing later bindings). But this doesn't mean we + // actually generalize all the individual type variables occuring in these bindings - for example, some // type variables may be free in the environment, and some definitions - // may be value definitions which can't be generalized, e.g. - // let rec f x = g x - // and g = id f + // may be value definitions which can't be generalized, e.g. + // let rec f x = g x + // and g = id f // Here the type variables in 'g' can't be generalized because it's a computation on the right. // - // Note that in the normal case each binding passes IsGeneralizableValue. Properties and + // Note that in the normal case each binding passes IsGeneralizableValue. Properties and // constructors do not pass CanInferExtraGeneralizedTyparsForRecBinding. let freeInEnv = - (freeInEnv, newGeneralizableBindings) ||> List.fold (fun freeInEnv pgrbind -> - if GeneralizationHelpers.IsGeneralizableValue cenv.g pgrbind.CheckedBinding.Expr then - freeInEnv - else + (freeInEnv, newGeneralizableBindings) ||> List.fold (fun freeInEnv pgrbind -> + if GeneralizationHelpers.IsGeneralizableValue cenv.g pgrbind.CheckedBinding.Expr then + freeInEnv + else let freeInBinding = (freeInType CollectAllNoCaching pgrbind.RecBindingInfo.Val.TauType).FreeTypars let freeInBinding = Zset.diff freeInBinding (Zset.ofList typarOrder (NormalizeDeclaredTyparsForEquiRecursiveInference cenv.g pgrbind.ExtraGeneralizableTypars)) let freeInBinding = Zset.diff freeInBinding (Zset.ofList typarOrder (NormalizeDeclaredTyparsForEquiRecursiveInference cenv.g pgrbind.RecBindingInfo.DeclaredTypars)) Zset.union freeInBinding freeInEnv) // Process the bindings marked for transition from PreGeneralization --> PostGeneralization - let newGeneralizedRecBinds, tpenv = - if newGeneralizableBindings.IsEmpty then + let newGeneralizedRecBinds, tpenv = + if newGeneralizableBindings.IsEmpty then [], tpenv else - + let supportForBindings = newGeneralizableBindings |> List.collect (TcLetrecComputeSupportForBinding cenv) - ConstraintSolver.CanonicalizePartialInferenceProblem cenv.css denv scopem supportForBindings - - let generalizedTyparsL = newGeneralizableBindings |> List.map (TcLetrecComputeAndGeneralizeGenericTyparsForBinding cenv denv freeInEnv) - - // Generalize the bindings. - let newGeneralizedRecBinds = (generalizedTyparsL, newGeneralizableBindings) ||> List.map2 (TcLetrecGeneralizeBinding cenv denv ) + ConstraintSolver.CanonicalizePartialInferenceProblem cenv.css denv scopem supportForBindings + + let generalizedTyparsL = newGeneralizableBindings |> List.map (TcLetrecComputeAndGeneralizeGenericTyparsForBinding cenv denv freeInEnv) + + // Generalize the bindings. + let newGeneralizedRecBinds = (generalizedTyparsL, newGeneralizableBindings) ||> List.map2 (TcLetrecGeneralizeBinding cenv denv ) let tpenv = HideUnscopedTypars (List.concat generalizedTyparsL) tpenv newGeneralizedRecBinds, tpenv - - + + newGeneralizedRecBinds, preGeneralizationRecBinds, tpenv - let envNonRec = envNonRec |> AddLocalVals cenv.tcSink scopem (newGeneralizedRecBinds |> List.map (fun b -> b.RecBindingInfo.Val)) - let generalizedRecBinds = newGeneralizedRecBinds @ generalizedRecBinds + let envNonRec = envNonRec |> AddLocalVals cenv.g cenv.tcSink scopem (newGeneralizedRecBinds |> List.map (fun b -> b.RecBindingInfo.Val)) + let generalizedRecBinds = newGeneralizedRecBinds @ generalizedRecBinds (envNonRec, generalizedRecBinds, preGeneralizationRecBinds, tpenv, uncheckedRecBindsTable) @@ -10634,7 +10712,7 @@ and TcIncrementalLetRecGeneralization cenv scopem // TcLetrecComputeAndGeneralizeGenericTyparsForBinding //------------------------------------------------------------------------- -/// Compute the type variables which may be generalized and perform the generalization +/// Compute the type variables which may be generalized and perform the generalization and TcLetrecComputeAndGeneralizeGenericTyparsForBinding cenv denv freeInEnv (pgrbind: PreGeneralizationRecursiveBinding) = let freeInEnv = Zset.diff freeInEnv (Zset.ofList typarOrder (NormalizeDeclaredTyparsForEquiRecursiveInference cenv.g pgrbind.ExtraGeneralizableTypars)) @@ -10644,15 +10722,15 @@ and TcLetrecComputeAndGeneralizeGenericTyparsForBinding cenv denv freeInEnv (pgr let (CheckedBindingInfo(inlineFlag, _, _, _, _, _, expr, _, _, m, _, _, _, _)) = pgrbind.CheckedBinding let (ExplicitTyparInfo(rigidCopyOfDeclaredTypars, declaredTypars, _)) = rbinfo.ExplicitTyparInfo let allDeclaredTypars = rbinfo.EnclosingDeclaredTypars @ declaredTypars - + // The declared typars were not marked rigid to allow equi-recursive type inference to unify // two declared type variables. So we now check that, for each binding, the declared // type variables can be unified with a rigid version of the same and undo the results // of this unification. - ConstraintSolver.CheckDeclaredTypars denv cenv.css m rigidCopyOfDeclaredTypars declaredTypars + ConstraintSolver.CheckDeclaredTypars denv cenv.css m rigidCopyOfDeclaredTypars declaredTypars let memFlagsOpt = vspec.MemberInfo |> Option.map (fun memInfo -> memInfo.MemberFlags) - let isCtor = (match memFlagsOpt with None -> false | Some memberFlags -> memberFlags.MemberKind = MemberKind.Constructor) + let isCtor = (match memFlagsOpt with None -> false | Some memberFlags -> memberFlags.MemberKind = SynMemberKind.Constructor) GeneralizationHelpers.CheckDeclaredTyparsPermitted(memFlagsOpt, declaredTypars, m) let canInferTypars = CanInferExtraGeneralizedTyparsForRecBinding pgrbind @@ -10664,7 +10742,7 @@ and TcLetrecComputeAndGeneralizeGenericTyparsForBinding cenv denv freeInEnv (pgr 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 +/// Compute the type variables which may have member constraints that need to be canonicalized prior to generalization and TcLetrecComputeSupportForBinding cenv (pgrbind: PreGeneralizationRecursiveBinding) = let rbinfo = pgrbind.RecBindingInfo let allDeclaredTypars = rbinfo.EnclosingDeclaredTypars @ rbinfo.DeclaredTypars @@ -10680,8 +10758,8 @@ and TcLetrecGeneralizeBinding cenv denv generalizedTypars (pgrbind: PreGeneraliz let (RecursiveBindingInfo(_, _, enclosingDeclaredTypars, _, vspec, explicitTyparInfo, partialValReprInfo, memberInfoOpt, _, _, _, vis, _, declKind)) = pgrbind.RecBindingInfo let (CheckedBindingInfo(inlineFlag, _, _, _, _, _, expr, argAttribs, _, _, _, compgen, _, isFixed)) = pgrbind.CheckedBinding - - if isFixed then + + if isFixed then errorR(Error(FSComp.SR.tcFixedNotAllowed(), expr.Range)) let _, tau = vspec.TypeScheme @@ -10689,7 +10767,7 @@ and TcLetrecGeneralizeBinding cenv denv generalizedTypars (pgrbind: PreGeneraliz let pvalscheme1 = PrelimValScheme1(vspec.Id, explicitTyparInfo, tau, Some partialValReprInfo, memberInfoOpt, false, inlineFlag, NormalVal, argAttribs, vis, compgen) let pvalscheme2 = GeneralizeVal cenv denv enclosingDeclaredTypars generalizedTypars pvalscheme1 - let valscheme = UseCombinedArity cenv.g declKind expr pvalscheme2 + let valscheme = UseCombinedArity cenv.g declKind expr pvalscheme2 AdjustRecType vspec valscheme { ValScheme = valscheme @@ -10698,9 +10776,9 @@ and TcLetrecGeneralizeBinding cenv denv generalizedTypars (pgrbind: PreGeneraliz and TcLetrecComputeCtorSafeThisValBind cenv safeThisValOpt = - match safeThisValOpt with + match safeThisValOpt with | None -> None - | Some (v: Val) -> + | Some (v: Val) -> let m = v.Range let ty = destRefCellTy cenv.g v.Type Some (mkCompGenBind v (mkRefCell cenv.g m ty (mkNull m ty))) @@ -10708,55 +10786,55 @@ and TcLetrecComputeCtorSafeThisValBind cenv safeThisValOpt = and MakeCheckSafeInitField g tinst thisValOpt rfref reqExpr (expr: Expr) = let m = expr.Range let availExpr = - match thisValOpt with + match thisValOpt with | None -> mkStaticRecdFieldGet (rfref, tinst, m) - | Some thisVar -> + | Some thisVar -> // This is an instance method, it must have a 'this' var mkRecdFieldGetViaExprAddr (exprForVal m thisVar, rfref, tinst, m) let failureExpr = match thisValOpt with None -> mkCallFailStaticInit g m | Some _ -> mkCallFailInit g m mkCompGenSequential m (mkIfThen g m (mkILAsmClt g m availExpr reqExpr) failureExpr) expr and MakeCheckSafeInit g tinst safeInitInfo reqExpr expr = - match safeInitInfo with + match safeInitInfo with | SafeInitField (rfref, _) -> MakeCheckSafeInitField g tinst None rfref reqExpr expr | NoSafeInitInfo -> expr // Given a method binding (after generalization) // // method M = (fun -> ) -// +// // wrap the following around it if needed // -// method M = (fun baseVal -> -// check ctorSafeInitInfo +// method M = (fun baseVal -> +// check ctorSafeInitInfo // let ctorSafeThisVal = ref null // ) // -// The "check ctorSafeInitInfo" is only added for non-constructor instance members in a class where at least one type in the +// The "check ctorSafeInitInfo" is only added for non-constructor instance members in a class where at least one type in the // hierarchy has HasSelfReferentialConstructor // // The "let ctorSafeThisVal = ref null" is only added for explicit constructors with a self-reference parameter (Note: check later code for exact conditions) // For implicit constructors the binding is added to the bindings of the implicit constructor and TcLetrecAdjustMemberForSpecialVals cenv (pgrbind: PostGeneralizationRecursiveBinding) : PostSpecialValsRecursiveBinding = - + let (RecursiveBindingInfo(_, _, _, _, vspec, _, _, _, baseValOpt, safeThisValOpt, safeInitInfo, _, _, _)) = pgrbind.RecBindingInfo let expr = pgrbind.CheckedBinding.Expr let spBind = pgrbind.CheckedBinding.SeqPoint - - let expr = - match TcLetrecComputeCtorSafeThisValBind cenv safeThisValOpt with + + let expr = + match TcLetrecComputeCtorSafeThisValBind cenv safeThisValOpt with | None -> expr - | Some bind -> + | Some bind -> let m = expr.Range let tps, vsl, body, returnTy = stripTopLambda (expr, vspec.Type) mkMultiLambdas m tps vsl (mkLetBind m bind body, returnTy) // Add a call to CheckInit if necessary for instance members - let expr = + let expr = if vspec.IsInstanceMember && not vspec.IsExtensionMember && not vspec.IsConstructor then - match safeInitInfo with - | SafeInitField (rfref, _) -> + match safeInitInfo with + | SafeInitField (rfref, _) -> let m = expr.Range let tps, vsl, body, returnTy = stripTopLambda (expr, vspec.Type) // This is an instance member, it must have a 'this' @@ -10764,41 +10842,41 @@ and TcLetrecAdjustMemberForSpecialVals cenv (pgrbind: PostGeneralizationRecursiv let thisTypeInst = argsOfAppTy cenv.g thisVar.Type let newBody = MakeCheckSafeInitField cenv.g thisTypeInst (Some thisVar) rfref (mkOne cenv.g m) body mkMultiLambdas m tps vsl (newBody, returnTy) - | NoSafeInitInfo -> + | NoSafeInitInfo -> expr - + else expr - let expr = - match baseValOpt with + let expr = + match baseValOpt with | None -> expr - | _ -> + | _ -> let m = expr.Range let tps, vsl, body, returnTy = stripTopLambda (expr, vspec.Type) mkMemberLambdas m tps None baseValOpt vsl (body, returnTy) - + { ValScheme = pgrbind.ValScheme Binding = TBind(vspec, expr, spBind) } -and FixupLetrecBind cenv denv generalizedTyparsForRecursiveBlock (bind: PostSpecialValsRecursiveBinding) = +and FixupLetrecBind cenv denv generalizedTyparsForRecursiveBlock (bind: PostSpecialValsRecursiveBinding) = let (TBind(vspec, expr, spBind)) = bind.Binding - // Check coherence of generalization of variables for memberInfo members in generic classes - match vspec.MemberInfo with + // Check coherence of generalization of variables for memberInfo members in generic classes + match vspec.MemberInfo with #if EXTENDED_EXTENSION_MEMBERS // indicates if extension members can add additional constraints to type parameters - | Some _ when not vspec.IsExtensionMember -> + | Some _ when not vspec.IsExtensionMember -> #else - | Some _ -> + | Some _ -> #endif match PartitionValTyparsForApparentEnclosingType cenv.g vspec with - | Some(parentTypars, memberParentTypars, _, _, _) -> + | Some(parentTypars, memberParentTypars, _, _, _) -> ignore(SignatureConformance.Checker(cenv.g, cenv.amap, denv, SignatureRepackageInfo.Empty, false).CheckTypars vspec.Range TypeEquivEnv.Empty memberParentTypars parentTypars) - | None -> + | None -> errorR(Error(FSComp.SR.tcMemberIsNotSufficientlyGeneric(), vspec.Range)) | _ -> () - // Fixup recursive references... + // Fixup recursive references... let fixupPoints = GetAllUsesOfRecValue cenv vspec AdjustAndForgetUsesOfRecValue cenv (mkLocalValRef vspec) bind.ValScheme @@ -10807,12 +10885,12 @@ and FixupLetrecBind cenv denv generalizedTyparsForRecursiveBlock (bind: PostSpec { FixupPoints = fixupPoints Binding = TBind(vspec, expr, spBind) } - + //------------------------------------------------------------------------- // TcLetrec - for both expressions and class-let-rec-declarations //------------------------------------------------------------------------ -and unionGeneralizedTypars typarSets = List.foldBack (ListSet.unionFavourRight typarEq) typarSets [] +and unionGeneralizedTypars typarSets = List.foldBack (ListSet.unionFavourRight typarEq) typarSets [] and TcLetrec overridesOK cenv env tpenv (binds, bindsm, scopem) = @@ -10820,114 +10898,114 @@ and TcLetrec overridesOK cenv env tpenv (binds, bindsm, scopem) = let binds = binds |> List.map (fun (RecDefnBindingInfo(a, b, c, bind)) -> NormalizedRecBindingDefn(a, b, c, BindingNormalization.NormalizeBinding ValOrMemberBinding cenv env bind)) let uncheckedRecBinds, prelimRecValues, (tpenv, _) = AnalyzeAndMakeAndPublishRecursiveValues overridesOK cenv env tpenv binds - let envRec = AddLocalVals cenv.tcSink scopem prelimRecValues env - - // Typecheck bindings - let uncheckedRecBindsTable = uncheckedRecBinds |> List.map (fun rbind -> rbind.RecBindingInfo.Val.Stamp, rbind) |> Map.ofList + let envRec = AddLocalVals cenv.g cenv.tcSink scopem prelimRecValues env + + // Typecheck bindings + let uncheckedRecBindsTable = uncheckedRecBinds |> List.map (fun rbind -> rbind.RecBindingInfo.Val.Stamp, rbind) |> Map.ofList - let (_, generalizedRecBinds, preGeneralizationRecBinds, tpenv, _) = - ((env, [], [], tpenv, uncheckedRecBindsTable), uncheckedRecBinds) ||> List.fold (TcLetrecBinding (cenv, envRec, scopem, [], None)) + let (_, generalizedRecBinds, preGeneralizationRecBinds, tpenv, _) = + ((env, [], [], tpenv, uncheckedRecBindsTable), uncheckedRecBinds) ||> List.fold (TcLetrecBinding (cenv, envRec, scopem, [], None)) // There should be no bindings that have not been generalized since checking the vary last binding always // results in the generalization of all remaining ungeneralized bindings, since there are no remaining unchecked bindings - // to prevent the generalization + // to prevent the generalization assert preGeneralizationRecBinds.IsEmpty - + let generalizedRecBinds = generalizedRecBinds |> List.sortBy (fun pgrbind -> pgrbind.RecBindingInfo.Index) - let generalizedTyparsForRecursiveBlock = - generalizedRecBinds + let generalizedTyparsForRecursiveBlock = + generalizedRecBinds |> List.map (fun pgrbind -> pgrbind.GeneralizedTypars) |> unionGeneralizedTypars - let vxbinds = generalizedRecBinds |> List.map (TcLetrecAdjustMemberForSpecialVals cenv) + let vxbinds = generalizedRecBinds |> List.map (TcLetrecAdjustMemberForSpecialVals cenv) - // Now that we know what we've generalized we can adjust the recursive references - let vxbinds = vxbinds |> List.map (FixupLetrecBind cenv env.DisplayEnv generalizedTyparsForRecursiveBlock) - - // Now eliminate any initialization graphs - let binds = + // Now that we know what we've generalized we can adjust the recursive references + let vxbinds = vxbinds |> List.map (FixupLetrecBind cenv env.DisplayEnv generalizedTyparsForRecursiveBlock) + + // Now eliminate any initialization graphs + let binds = let bindsWithoutLaziness = vxbinds - let mustHaveArity = - match uncheckedRecBinds with + let mustHaveArity = + match uncheckedRecBinds with | [] -> false | (rbind :: _) -> DeclKind.MustHaveArity rbind.RecBindingInfo.DeclKind - - let results = - EliminateInitializationGraphs - cenv.g mustHaveArity env.DisplayEnv + + let results = + EliminateInitializationGraphs + cenv.g mustHaveArity env.DisplayEnv bindsWithoutLaziness - //(fun + //(fun (fun doBindings bindings -> doBindings bindings) (fun bindings -> bindings) (fun doBindings bindings -> [doBindings bindings]) bindsm List.concat results - - // Post letrec env - let envbody = AddLocalVals cenv.tcSink scopem prelimRecValues env + + // Post letrec env + let envbody = AddLocalVals cenv.g cenv.tcSink scopem prelimRecValues env binds, envbody, tpenv //------------------------------------------------------------------------- // Bind specifications of values -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -let TcAndPublishValSpec (cenv, env, containerInfo: ContainerInfo, declKind, memFlagsOpt, tpenv, valSpfn) = +let TcAndPublishValSpec (cenv, env, containerInfo: ContainerInfo, declKind, memFlagsOpt, tpenv, valSpfn) = - let (ValSpfn (Attributes synAttrs, _, SynValTyparDecls (synTypars, synCanInferTypars, _), _, _, isInline, mutableFlag, doc, vis, literalExprOpt, m)) = valSpfn + let (SynValSig (Attributes synAttrs, _, ValTyparDecls (synTypars, _, synCanInferTypars), _, _, isInline, mutableFlag, doc, vis, literalExprOpt, m)) = valSpfn GeneralizationHelpers.CheckDeclaredTyparsPermitted(memFlagsOpt, synTypars, m) let canInferTypars = GeneralizationHelpers.ComputeCanInferExtraGeneralizableTypars (containerInfo.ParentRef, synCanInferTypars, memFlagsOpt) - - let attrTgt = DeclKind.AllowedAttribTargets memFlagsOpt declKind + + let attrTgt = DeclKind.AllowedAttribTargets memFlagsOpt declKind let attrs = TcAttributes cenv env attrTgt synAttrs let newOk = if canInferTypars then NewTyparsOK else NoNewTypars let valinfos, tpenv = TcValSpec cenv env declKind newOk containerInfo memFlagsOpt None tpenv valSpfn attrs let denv = env.DisplayEnv - - (tpenv, valinfos) ||> List.mapFold (fun tpenv valSpecResult -> + + (tpenv, valinfos) ||> List.mapFold (fun tpenv valSpecResult -> let (ValSpecResult (altActualParent, memberInfoOpt, id, enclosingDeclaredTypars, declaredTypars, ty, partialValReprInfo, declKind)) = valSpecResult - + let inlineFlag = ComputeInlineFlag (memberInfoOpt |> Option.map (fun (PreValMemberInfo(memberInfo, _, _)) -> memberInfo.MemberFlags)) isInline mutableFlag m - + let freeInType = freeInTypeLeftToRight cenv.g false ty let allDeclaredTypars = enclosingDeclaredTypars @ declaredTypars let explicitTyparInfo = ExplicitTyparInfo(declaredTypars, declaredTypars, synCanInferTypars) - + let generalizedTypars = GeneralizationHelpers.ComputeAndGeneralizeGenericTypars(cenv, denv, id.idRange, emptyFreeTypars, canInferTypars, CanGeneralizeConstrainedTypars, inlineFlag, None, allDeclaredTypars, freeInType, ty, false) - + let valscheme1 = PrelimValScheme1(id, explicitTyparInfo, ty, Some partialValReprInfo, memberInfoOpt, mutableFlag, inlineFlag, NormalVal, noArgOrRetAttribs, vis, false) let valscheme2 = GeneralizeVal cenv denv enclosingDeclaredTypars generalizedTypars valscheme1 let tpenv = HideUnscopedTypars generalizedTypars tpenv - let valscheme = BuildValScheme declKind (Some partialValReprInfo) valscheme2 + let valscheme = BuildValScheme declKind (Some partialValReprInfo) valscheme2 - let literalValue = - match literalExprOpt with - | None -> + let literalValue = + match literalExprOpt with + | None -> let hasLiteralAttr = HasFSharpAttribute cenv.g cenv.g.attrib_LiteralAttribute attrs - if hasLiteralAttr then + if hasLiteralAttr then errorR(Error(FSComp.SR.tcLiteralAttributeRequiresConstantValue(), m)) None - - | Some e -> + + | Some e -> let hasLiteralAttr, literalValue = TcLiteral cenv ty env tpenv (attrs, e) - if not hasLiteralAttr then + if not hasLiteralAttr then errorR(Error(FSComp.SR.tcValueInSignatureRequiresLiteralAttribute(), e.Range)) literalValue - let paramNames = - match valscheme.ValReprInfo with + let paramNames = + match valscheme.ValReprInfo with | None -> None | Some topValInfo -> topValInfo.ArgNames @@ -10936,4 +11014,3 @@ let TcAndPublishValSpec (cenv, env, containerInfo: ContainerInfo, declKind, memF assert(vspec.InlineInfo = inlineFlag) vspec, tpenv) - diff --git a/src/fsharp/CheckExpressions.fsi b/src/fsharp/CheckExpressions.fsi index e208ee42a81..fa33a268406 100644 --- a/src/fsharp/CheckExpressions.fsi +++ b/src/fsharp/CheckExpressions.fsi @@ -3,10 +3,10 @@ module internal FSharp.Compiler.CheckExpressions open System +open Internal.Utilities.Collections +open Internal.Utilities.Library open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.ConstraintSolver @@ -16,11 +16,11 @@ open FSharp.Compiler.Infos open FSharp.Compiler.MethodOverrides open FSharp.Compiler.NameResolution open FSharp.Compiler.PatternMatchCompilation -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.XmlDoc open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps @@ -131,7 +131,7 @@ exception UnitTypeExpectedWithPossibleAssignment of DisplayEnv * TType * bool * exception FunctionValueUnexpected of DisplayEnv * TType * range exception UnionPatternsBindDifferentNames of range exception VarBoundTwice of Ident -exception ValueRestriction of DisplayEnv * bool * Val * Typar * range +exception ValueRestriction of DisplayEnv * InfoReader * bool * Val * Typar * range exception ValNotMutable of DisplayEnv * ValRef * range exception ValNotLocal of DisplayEnv * ValRef * range exception InvalidRuntimeCoercion of DisplayEnv * TType * TType * range @@ -309,7 +309,7 @@ type DeclKind = static member ImplicitlyStatic: DeclKind -> bool - static member AllowedAttribTargets: MemberFlags option -> DeclKind -> AttributeTargets + static member AllowedAttribTargets: SynMemberFlags option -> DeclKind -> AttributeTargets // Note: now always true static member CanGeneralizeConstrainedTypars: DeclKind -> bool @@ -404,7 +404,7 @@ type NormalizedBinding = pat: SynPat * rhsExpr: NormalizedBindingRhs * mBinding: range * - spBinding: DebugPointForBinding + spBinding: DebugPointAtBinding /// RecursiveBindingInfo - flows through initial steps of TcLetrec type RecursiveBindingInfo = @@ -508,13 +508,13 @@ val unionGeneralizedTypars: typarSets:Typar list list -> Typar list val AddDeclaredTypars: check: CheckForDuplicateTyparFlag -> typars: Typar list -> env: TcEnv -> TcEnv /// Add a value to the environment, producing a new environment. Report to the sink. -val AddLocalVal: NameResolution.TcResultsSink -> scopem: range -> v: Val -> TcEnv -> TcEnv +val AddLocalVal: g: TcGlobals -> NameResolution.TcResultsSink -> scopem: range -> v: Val -> TcEnv -> TcEnv /// Add a value to the environment, producing a new environment -val AddLocalValPrimitive: v: Val -> TcEnv -> TcEnv +val AddLocalValPrimitive: g: TcGlobals -> v: Val -> TcEnv -> TcEnv /// Add a list of values to the environment, producing a new environment. Report to the sink. -val AddLocalVals: tcSink: TcResultsSink -> scopem: range -> vals: Val list -> env: TcEnv -> TcEnv +val AddLocalVals: g: TcGlobals -> tcSink: TcResultsSink -> scopem: range -> vals: Val list -> env: TcEnv -> TcEnv /// Set the type of a 'Val' after it has been fully inferred. val AdjustRecType: vspec: Val -> vscheme: ValScheme -> unit @@ -523,10 +523,10 @@ val AdjustRecType: vspec: Val -> vscheme: ValScheme -> unit val AnalyzeAndMakeAndPublishRecursiveValue: overridesOK:OverridesOK -> isGeneratedEventVal:bool -> cenv:TcFileState -> env:TcEnv -> tpenv:UnscopedTyparEnv * recBindIdx:int -> NormalizedRecBindingDefn -> (PreCheckingRecursiveBinding list * Val list) * (UnscopedTyparEnv * int) /// Check that a member can be included in an interface -val CheckForNonAbstractInterface: declKind:DeclKind -> tcref:TyconRef -> memberFlags:MemberFlags -> m:range -> unit +val CheckForNonAbstractInterface: declKind:DeclKind -> tcref:TyconRef -> memberFlags:SynMemberFlags -> m:range -> unit /// Check the flags on a member definition for consistency -val CheckMemberFlags: optIntfSlotTy:'a option -> newslotsOK:NewSlotsOK -> overridesOK:OverridesOK -> memberFlags:MemberFlags -> m:range -> unit +val CheckMemberFlags: optIntfSlotTy:'a option -> newslotsOK:NewSlotsOK -> overridesOK:OverridesOK -> memberFlags:SynMemberFlags -> m:range -> unit /// Check a super type is valid val CheckSuperType: cenv:TcFileState -> ty:TType -> m:range -> unit @@ -603,7 +603,7 @@ val MakeAndPublishSimpleVals: cenv: TcFileState -> env: TcEnv -> names: NameMap< val MakeAndPublishSafeThisVal: cenv: TcFileState -> env: TcEnv -> thisIdOpt: Ident option -> thisTy: TType -> Val option /// Make initial information for a member value -val MakeMemberDataAndMangledNameForMemberVal: g: TcGlobals * tcref: TyconRef * isExtrinsic: bool * attrs: Attribs * optImplSlotTys: TType list * memberFlags: MemberFlags * valSynData: SynValInfo * id: Ident * isCompGen: bool -> PreValMemberInfo +val MakeMemberDataAndMangledNameForMemberVal: g: TcGlobals * tcref: TyconRef * isExtrinsic: bool * attrs: Attribs * optImplSlotTys: TType list * memberFlags: SynMemberFlags * valSynData: SynValInfo * id: Ident * isCompGen: bool -> PreValMemberInfo /// Return a new environment suitable for processing declarations in the interior of a type definition val MakeInnerEnvForTyconRef: env: TcEnv -> tcref: TyconRef -> isExtrinsicExtension: bool -> TcEnv @@ -635,7 +635,7 @@ val SetTyparRigid: DisplayEnv -> range -> Typar -> unit /// Check and publish a value specification (in a signature or 'abstract' member) to the /// module/namespace type accumulator and return the resulting Val(s). Normally only one /// 'Val' results but CLI events may produce both and add_Event and _remove_Event Val. -val TcAndPublishValSpec: cenv: TcFileState * env: TcEnv * containerInfo: ContainerInfo * declKind: DeclKind * memFlagsOpt: MemberFlags option * tpenv: UnscopedTyparEnv * valSpfn: SynValSig -> Val list * UnscopedTyparEnv +val TcAndPublishValSpec: cenv: TcFileState * env: TcEnv * containerInfo: ContainerInfo * declKind: DeclKind * memFlagsOpt: SynMemberFlags option * tpenv: UnscopedTyparEnv * valSpfn: SynValSig -> Val list * UnscopedTyparEnv /// Check a set of attributes val TcAttributes: cenv: TcFileState -> env: TcEnv -> attrTgt: AttributeTargets -> synAttribs: SynAttribute list -> Attrib list @@ -722,7 +722,7 @@ val TcTypeOrMeasureAndRecover: optKind: TyparKind option -> cenv: TcFileState -> val TcTypeAndRecover: cenv: TcFileState -> newOk: ImplicitlyBoundTyparsAllowed -> checkCxs: CheckConstraints -> occ: ItemOccurence -> env: TcEnv -> tpenv: UnscopedTyparEnv -> ty: SynType -> TType * UnscopedTyparEnv /// Check a specification of a value or member in a signature or an abstract member -val TcValSpec: cenv: TcFileState -> TcEnv -> DeclKind -> ImplicitlyBoundTyparsAllowed -> ContainerInfo -> MemberFlags option -> thisTyOpt: TType option -> UnscopedTyparEnv -> SynValSig -> Attrib list -> ValSpecResult list * UnscopedTyparEnv +val TcValSpec: cenv: TcFileState -> TcEnv -> DeclKind -> ImplicitlyBoundTyparsAllowed -> ContainerInfo -> SynMemberFlags option -> thisTyOpt: TType option -> UnscopedTyparEnv -> SynValSig -> Attrib list -> ValSpecResult list * UnscopedTyparEnv /// Given the declaration of a function or member, process it to produce the ValReprInfo /// giving the names and attributes relevant to arguments and return, but before type diff --git a/src/fsharp/CheckFormatStrings.fs b/src/fsharp/CheckFormatStrings.fs index ced6b33b0fd..4556a9190f3 100644 --- a/src/fsharp/CheckFormatStrings.fs +++ b/src/fsharp/CheckFormatStrings.fs @@ -3,14 +3,13 @@ module internal FSharp.Compiler.CheckFormatStrings open System.Text -open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler.ConstraintSolver -open FSharp.Compiler.Lib open FSharp.Compiler.NameResolution -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax open FSharp.Compiler.SyntaxTreeOps +open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TcGlobals @@ -24,7 +23,7 @@ let copyAndFixupFormatTypar m tp = let lowestDefaultPriority = 0 (* See comment on TyparConstraint.DefaultsTo *) let mkFlexibleFormatTypar m tys dflt = - let tp = Construct.NewTypar (TyparKind.Type,TyparRigidity.Rigid,Typar(mkSynId m "fmt",HeadTypeStaticReq,true),false,TyparDynamicReq.Yes,[],false,false) + let tp = Construct.NewTypar (TyparKind.Type, TyparRigidity.Rigid, SynTypar(mkSynId m "fmt",TyparStaticReq.HeadType,true),false,TyparDynamicReq.Yes,[],false,false) tp.SetConstraints [ TyparConstraint.SimpleChoice (tys,m); TyparConstraint.DefaultsTo (lowestDefaultPriority,dflt,m)] copyAndFixupFormatTypar m tp @@ -356,8 +355,8 @@ let parseFormatStringInternal (m: range) (fragRanges: range list) (g: TcGlobals) numStdArgs + (if widthArg then 1 else 0) + (if precisionArg then 1 else 0) specifierLocations.Add( (Range.mkFileIndexRange m.FileIndex - (Range.mkPos fragLine startFragCol) - (Range.mkPos fragLine (fragCol + 1))), numArgsForSpecifier) + (Position.mkPos fragLine startFragCol) + (Position.mkPos fragLine (fragCol + 1))), numArgsForSpecifier) | None -> () let ch = fmt.[i] @@ -367,7 +366,8 @@ let parseFormatStringInternal (m: range) (fragRanges: range list) (g: TcGlobals) appendToDotnetFormatString "%" parseLoop acc (i+1, fragLine, fragCol+1) fragments - | ('d' | 'i' | 'o' | 'u' | 'x' | 'X') -> + | ('d' | 'i' | 'u' | 'B' | 'o' | 'x' | 'X') -> + if ch = 'B' then ErrorLogger.checkLanguageFeatureError g.langVersion Features.LanguageFeature.PrintfBinaryFormat m if info.precision then failwithf "%s" <| FSComp.SR.forFormatDoesntSupportPrecision(ch.ToString()) collectSpecifierLocation fragLine fragCol 1 let i = skipPossibleInterpolationHole (i+1) diff --git a/src/fsharp/CheckFormatStrings.fsi b/src/fsharp/CheckFormatStrings.fsi index 13b28964aed..ffafb37d6c0 100644 --- a/src/fsharp/CheckFormatStrings.fsi +++ b/src/fsharp/CheckFormatStrings.fsi @@ -7,11 +7,10 @@ module internal FSharp.Compiler.CheckFormatStrings -open FSharp.Compiler open FSharp.Compiler.NameResolution -open FSharp.Compiler.Range -open FSharp.Compiler.TypedTree open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.TypedTree val ParseFormatString : m: range -> fragmentRanges: range list -> g: TcGlobals -> isInterpolated: bool -> isFormattableString: bool -> formatStringCheckContext: FormatStringCheckContext option -> fmt: string -> printerArgTy: TType -> printerResidueTy: TType -> printerResultTy: TType -> TType list * TType * TType * TType[] * (range * int) list * string diff --git a/src/fsharp/CompilerConfig.fs b/src/fsharp/CompilerConfig.fs index 812ea5d9dd8..0bdc81698c5 100644 --- a/src/fsharp/CompilerConfig.fs +++ b/src/fsharp/CompilerConfig.fs @@ -4,36 +4,32 @@ module internal FSharp.Compiler.CompilerConfig open System -open System.Collections.Generic open System.Collections.Concurrent -open System.Diagnostics open System.IO -open System.Text - open Internal.Utilities -open Internal.Utilities.Filename - +open Internal.Utilities.FSharpEnvironment +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILBinaryReader open FSharp.Compiler.AbstractIL.ILPdbWriter -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Internal.Utils -open FSharp.Compiler.DotNetFrameworkDependencies +open FSharp.Compiler.DependencyManager +open FSharp.Compiler.Diagnostics open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features -open FSharp.Compiler.Lib -open FSharp.Compiler.Range -open FSharp.Compiler.ReferenceResolver +open FSharp.Compiler.IO +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree - -open Microsoft.DotNet.DependencyManager +open FSharp.Compiler.BuildGraph #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping -open Microsoft.FSharp.Core.CompilerServices +open FSharp.Core.CompilerServices #endif let (++) x s = x @ [s] @@ -43,10 +39,15 @@ let (++) x s = x @ [s] //-------------------------------------------------------------------------- let FSharpSigFileSuffixes = [".mli";".fsi"] + let mlCompatSuffixes = [".mli";".ml"] + let FSharpImplFileSuffixes = [".ml";".fs";".fsscript";".fsx"] + let FSharpScriptFileSuffixes = [".fsscript";".fsx"] + let doNotRequireNamespaceOrModuleSuffixes = [".mli";".ml"] @ FSharpScriptFileSuffixes + let FSharpLightSyntaxFileSuffixes: string list = [ ".fs";".fsscript";".fsx";".fsi" ] //-------------------------------------------------------------------------- @@ -58,15 +59,15 @@ exception LoadedSourceNotFoundIgnoring of (*filename*) string * range /// Will return None if the filename is not found. let TryResolveFileUsingPaths(paths, m, name) = - let () = - try FileSystem.IsPathRootedShim name |> ignore - with :? System.ArgumentException as e -> error(Error(FSComp.SR.buildProblemWithFilename(name, e.Message), m)) - if FileSystem.IsPathRootedShim name && FileSystem.SafeExists name - then Some name + let () = + try FileSystem.IsPathRootedShim name |> ignore + with :? ArgumentException as e -> error(Error(FSComp.SR.buildProblemWithFilename(name, e.Message), m)) + if FileSystem.IsPathRootedShim name && FileSystem.FileExistsShim name + then Some name else - let res = paths |> List.tryPick (fun path -> + let res = paths |> List.tryPick (fun path -> let n = Path.Combine (path, name) - if FileSystem.SafeExists n then Some n + if FileSystem.FileExistsShim n then Some n else None) res @@ -76,7 +77,7 @@ let ResolveFileUsingPaths(paths, m, name) = | Some res -> res | None -> let searchMessage = String.concat "\n " paths - raise (FileNameNotResolved(name, searchMessage, m)) + raise (FileNameNotResolved(name, searchMessage, m)) let GetWarningNumber(m, warningNumber: string) = try @@ -91,25 +92,25 @@ let GetWarningNumber(m, warningNumber: string) = warning(Error(FSComp.SR.buildInvalidWarningNumber warningNumber, m)) None -let ComputeMakePathAbsolute implicitIncludeDir (path: string) = - try +let ComputeMakePathAbsolute implicitIncludeDir (path: string) = + try // remove any quotation marks from the path first let path = path.Replace("\"", "") - if not (FileSystem.IsPathRootedShim path) + if not (FileSystem.IsPathRootedShim path) then Path.Combine (implicitIncludeDir, path) - else path - with - :? System.ArgumentException -> path + else path + with + :? System.ArgumentException -> path //---------------------------------------------------------------------------- // Configuration //---------------------------------------------------------------------------- [] -type CompilerTarget = - | WinExe - | ConsoleExe - | Dll +type CompilerTarget = + | WinExe + | ConsoleExe + | Dll | Module member x.IsExe = (match x with ConsoleExe | WinExe -> true | _ -> false) @@ -120,37 +121,38 @@ type ResolveAssemblyReferenceMode = Speculative | ReportErrors type CopyFSharpCoreFlag = Yes | No /// Represents the file or string used for the --version flag -type VersionFlag = +type VersionFlag = | VersionString of string | VersionFile of string | VersionNone member x.GetVersionInfo implicitIncludeDir = let vstr = x.GetVersionString implicitIncludeDir - try + try IL.parseILVersion vstr with _ -> errorR(Error(FSComp.SR.buildInvalidVersionString vstr, rangeStartup)); IL.parseILVersion "0.0.0.0" - member x.GetVersionString implicitIncludeDir = - match x with + 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 + if not(FileSystem.FileExistsShim s) then errorR(Error(FSComp.SR.buildInvalidVersionFile s, rangeStartup)); "0.0.0.0" else - use is = System.IO.File.OpenText s + use fs = FileSystem.OpenFileForReadShim(s) + use is = new StreamReader(fs) 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. -type IRawFSharpAssemblyData = +type IRawFSharpAssemblyData = /// The raw list AutoOpenAttribute attributes in the assembly - abstract GetAutoOpenAttributes: ILGlobals -> string list + abstract GetAutoOpenAttributes: unit -> string list /// The raw list InternalsVisibleToAttribute attributes in the assembly - abstract GetInternalsVisibleToAttributes: ILGlobals -> string list + abstract GetInternalsVisibleToAttributes: unit -> string list /// The raw IL module definition in the assembly, if any. This is not present for cross-project references /// in the language service @@ -174,49 +176,49 @@ type IRawFSharpAssemblyData = abstract HasAnyFSharpSignatureDataAttribute: bool - abstract HasMatchingFSharpSignatureDataAttribute: ILGlobals -> bool + abstract HasMatchingFSharpSignatureDataAttribute: bool /// Cache of time stamps as we traverse a project description -type TimeStampCache(defaultTimeStamp: DateTime) = +type TimeStampCache(defaultTimeStamp: DateTime) = let files = ConcurrentDictionary() let projects = ConcurrentDictionary(HashIdentity.Reference) - member cache.GetFileTimeStamp fileName = + member cache.GetFileTimeStamp fileName = let ok, v = files.TryGetValue fileName if ok then v else - let v = - try + let v = + try FileSystem.GetLastWriteTimeShim fileName - with + with | :? FileNotFoundException -> - defaultTimeStamp + defaultTimeStamp files.[fileName] <- v v - member cache.GetProjectReferenceTimeStamp (pr: IProjectReference, ctok) = + member cache.GetProjectReferenceTimeStamp (pr: IProjectReference) = let ok, v = projects.TryGetValue pr - if ok then v else - let v = defaultArg (pr.TryGetLogicalTimeStamp (cache, ctok)) defaultTimeStamp + if ok then v else + let v = defaultArg (pr.TryGetLogicalTimeStamp (cache)) defaultTimeStamp projects.[pr] <- v v -and IProjectReference = +and IProjectReference = /// The name of the assembly file generated by the project - abstract FileName: string + abstract FileName: string /// Evaluate raw contents of the assembly file generated by the project - abstract EvaluateRawContents: CompilationThreadToken -> Cancellable + abstract EvaluateRawContents: unit -> NodeCode /// Get the logical timestamp that would be the timestamp of the assembly file generated by the project /// /// For project references this is maximum of the timestamps of all dependent files. - /// The project is not actually built, nor are any assemblies read, but the timestamps for each dependent file + /// The project is not actually built, nor are any assemblies read, but the timestamps for each dependent file /// are read via the FileSystem. If the files don't exist, then a default timestamp is used. /// /// The operation returns None only if it is not possible to create an IncrementalBuilder for the project at all, e.g. if there /// are fatal errors in the options for the project. - abstract TryGetLogicalTimeStamp: TimeStampCache * CompilationThreadToken -> System.DateTime option + abstract TryGetLogicalTimeStamp: TimeStampCache -> System.DateTime option -type AssemblyReference = +type AssemblyReference = | AssemblyReference of range * string * IProjectReference option member x.Range = (let (AssemblyReference(m, _, _)) = x in m) @@ -225,12 +227,14 @@ type AssemblyReference = member x.ProjectReference = (let (AssemblyReference(_, _, contents)) = x in contents) - member x.SimpleAssemblyNameIs name = - (String.Compare(fileNameWithoutExtensionWithValidate false x.Text, name, StringComparison.OrdinalIgnoreCase) = 0) || - (let text = x.Text.ToLowerInvariant() - not (text.Contains "/") && not (text.Contains "\\") && not (text.Contains ".dll") && not (text.Contains ".exe") && - try let aname = System.Reflection.AssemblyName x.Text in aname.Name = name - with _ -> false) + member x.SimpleAssemblyNameIs name = + (String.Compare(FileSystemUtils.fileNameWithoutExtensionWithValidate false x.Text, name, StringComparison.OrdinalIgnoreCase) = 0) || + not (x.Text.Contains "/") && + not (x.Text.Contains "\\") && + not (x.Text.EndsWith(".dll", StringComparison.InvariantCultureIgnoreCase)) && + not (x.Text.EndsWith(".exe", StringComparison.InvariantCultureIgnoreCase)) && + (try let aname = System.Reflection.AssemblyName x.Text in aname.Name = name + with _ -> false) override x.ToString() = sprintf "AssemblyReference(%s)" x.Text @@ -240,7 +244,7 @@ type ResolvedExtensionReference = ResolvedExtensionReference of string * Assembl #endif type ImportedAssembly = - { ILScopeRef: ILScopeRef + { ILScopeRef: ILScopeRef FSharpViewOfMetadata: CcuThunk AssemblyAutoOpenAttributes: string list AssemblyInternalsVisibleToAttributes: string list @@ -307,7 +311,7 @@ type PackageManagerLine = static member SetLinesAsProcessed (packageKey:string) (packageManagerLines: Map): Map = let map = - packageManagerLines + packageManagerLines |> Map.map(fun key lines -> if key = packageKey then lines |> List.map(fun line -> {line with LineStatus = LStatus.Processed;}) @@ -320,7 +324,8 @@ type PackageManagerLine = [] type TcConfigBuilder = - { mutable primaryAssembly: PrimaryAssembly + { + mutable primaryAssembly: PrimaryAssembly mutable noFeedback: bool mutable stackReserveSize: int32 option mutable implicitIncludeDir: string (* normally "." *) @@ -332,7 +337,7 @@ type TcConfigBuilder = mutable implicitOpens: string list mutable useFsiAuxLib: bool mutable framework: bool - mutable resolutionEnvironment: ReferenceResolver.ResolutionEnvironment + mutable resolutionEnvironment: LegacyResolutionEnvironment mutable implicitlyResolveAssemblies: bool mutable light: bool option mutable conditionalCompilationDefines: string list @@ -347,7 +352,7 @@ type TcConfigBuilder = mutable useHighEntropyVA: bool mutable inputCodePage: int option mutable embedResources: string list - mutable errorSeverityOptions: FSharpErrorSeverityOptions + mutable errorSeverityOptions: FSharpDiagnosticOptions mutable mlCompatibility: bool mutable checkOverflow: bool mutable showReferenceResolutions: bool @@ -372,6 +377,7 @@ type TcConfigBuilder = mutable reportNumDecls: bool mutable printSignature: bool mutable printSignatureFile: string + mutable printAllSignatureFiles: bool mutable xmlDocOutputFile: string option mutable stats: bool mutable generateFilterBlocks: bool (* don't generate filter blocks due to bugs on Mono *) @@ -381,10 +387,10 @@ type TcConfigBuilder = mutable delaysign: bool mutable publicsign: bool - mutable version: VersionFlag + mutable version: VersionFlag mutable metadataVersion: string option mutable standalone: bool - mutable extraStaticLinkRoots: string list + mutable extraStaticLinkRoots: string list mutable noSignatureData: bool mutable onlyEssentialOptimizationData: bool mutable useOptimizationDataFile: bool @@ -392,18 +398,19 @@ type TcConfigBuilder = mutable portablePDB: bool mutable embeddedPDB: bool mutable embedAllSource: bool - mutable embedSourceList: string list + mutable embedSourceList: string list mutable sourceLink: string mutable ignoreSymbolStoreSequencePoints: bool mutable internConstantStrings: bool mutable extraOptimizationIterations: int - mutable win32res: string + mutable win32icon: string + mutable win32res: string mutable win32manifest: string mutable includewin32manifest: bool mutable linkResources: string list - mutable legacyReferenceResolver: ReferenceResolver.Resolver + mutable legacyReferenceResolver: LegacyReferenceResolver mutable showFullPaths: bool mutable errorStyle: ErrorStyle @@ -423,16 +430,17 @@ type TcConfigBuilder = mutable doTLR: bool (* run TLR pass? *) mutable doFinalSimplify: bool (* do final simplification pass *) mutable optsOn: bool (* optimizations are turned on *) - mutable optSettings: Optimizer.OptimizationSettings + mutable optSettings: Optimizer.OptimizationSettings mutable emitTailcalls: bool mutable deterministic: bool + mutable concurrentBuild: bool mutable preferredUiLang: string option mutable lcid: int option mutable productNameForBannerText: string - /// show the MS (c) notice, e.g. with help or fsi? + /// show the MS (c) notice, e.g. with help or fsi? mutable showBanner: bool - /// show times between passes? + /// show times between passes? mutable showTimes: bool mutable showLoadedAssemblies: bool mutable continueAfterParseFailure: bool @@ -441,7 +449,7 @@ type TcConfigBuilder = mutable showExtensionTypeMessages: bool #endif - /// pause between passes? + /// pause between passes? mutable pause: bool /// whenever possible, emit callvirt instead of call mutable alwaysCallVirt: bool @@ -467,6 +475,13 @@ type TcConfigBuilder = /// When false FSI will lock referenced assemblies requiring process restart, false = disable Shadow Copy false (*default*) mutable shadowCopyReferences: bool mutable useSdkRefs: bool + mutable fxResolver: FxResolver option + + /// specify the error range for FxResolver + rangeForErrors: range + + /// Override the SDK directory used by FxResolver, used for FCS only + sdkDirOverride: string option /// A function to call to try to get an object that acts as a snapshot of the metadata section of a .NET binary, /// and from which we can read the metadata. Only used when metadataOnly=true. @@ -479,24 +494,57 @@ type TcConfigBuilder = mutable pathMap: PathMap mutable langVersion: LanguageVersion + + mutable xmlDocInfoLoader: IXmlDocumentationInfoLoader option } - static member Initial = + + // Directories to start probing in + // Algorithm: + // Search for native libraries using: + // 1. Include directories + // 2. compilerToolPath directories + // 3. reference dll's + // 4. The implicit include directory + // + // NOTE: it is important this is a delayed IEnumerable sequence. It is recomputed + // each time a resolution happens and additional paths may be added as a result. + member tcConfigB.GetNativeProbingRoots () = + seq { + yield! tcConfigB.includes + yield! tcConfigB.compilerToolPaths + yield! (tcConfigB.referencedDLLs |> Seq.map(fun ref -> Path.GetDirectoryName(ref.Text))) + yield tcConfigB.implicitIncludeDir + } + |> Seq.distinct + + static member CreateNew(legacyReferenceResolver, + defaultFSharpBinariesDir, + reduceMemoryUsage, + implicitIncludeDir, + isInteractive, + isInvalidationSupported, + defaultCopyFSharpCore, + tryGetMetadataSnapshot, + sdkDirOverride, + rangeForErrors) = + + if (String.IsNullOrEmpty defaultFSharpBinariesDir) then + failwith "Expected a valid defaultFSharpBinariesDir" + + // These are all default values, many can be overridden using the command line switch { - primaryAssembly = PrimaryAssembly.Mscorlib // default value, can be overridden using the command line switch + primaryAssembly = PrimaryAssembly.Mscorlib light = None noFeedback = false stackReserveSize = None conditionalCompilationDefines = [] - implicitIncludeDir = String.Empty openDebugInformationForLaterStaticLinking = false - defaultFSharpBinariesDir = String.Empty compilingFslib = false useIncrementalBuilder = false - useFsiAuxLib = false implicitOpens = [] includes = [] - resolutionEnvironment = ResolutionEnvironment.EditingOrCompilation false + resolutionEnvironment = LegacyResolutionEnvironment.EditingOrCompilation false framework = true implicitlyResolveAssemblies = true compilerToolPaths = [] @@ -505,10 +553,9 @@ type TcConfigBuilder = projectReferences = [] knownUnresolvedReferences = [] loadedSources = [] - errorSeverityOptions = FSharpErrorSeverityOptions.Default + errorSeverityOptions = FSharpDiagnosticOptions.Default embedResources = [] inputCodePage = None - reduceMemoryUsage = ReduceMemoryFlag.Yes // always gets set explicitly subsystemVersion = 4, 0 // per spec for 357994 useHighEntropyVA = false mlCompatibility = false @@ -536,6 +583,7 @@ type TcConfigBuilder = reportNumDecls = false printSignature = false printSignatureFile = "" + printAllSignatureFiles = false xmlDocOutputFile = None stats = false generateFilterBlocks = false (* don't generate filter blocks *) @@ -566,11 +614,11 @@ type TcConfigBuilder = internConstantStrings = true extraOptimizationIterations = 0 + win32icon = "" win32res = "" win32manifest = "" includewin32manifest = true linkResources = [] - legacyReferenceResolver = null showFullPaths = false errorStyle = ErrorStyle.DefaultErrors @@ -590,9 +638,10 @@ type TcConfigBuilder = optSettings = Optimizer.OptimizationSettings.Defaults emitTailcalls = true deterministic = false + concurrentBuild = true preferredUiLang = None lcid = None - productNameForBannerText = FSharpEnvironment.FSharpProductName + productNameForBannerText = FSharpProductName showBanner = true showTimes = false showLoadedAssemblies = false @@ -600,65 +649,52 @@ type TcConfigBuilder = #if !NO_EXTENSIONTYPING showExtensionTypeMessages = false #endif - pause = false + pause = false alwaysCallVirt = true noDebugData = false - isInteractive = false - isInvalidationSupported = false emitDebugInfoInQuotations = false exename = None - copyFSharpCore = CopyFSharpCoreFlag.No shadowCopyReferences = false useSdkRefs = true - tryGetMetadataSnapshot = (fun _ -> None) + fxResolver = None internalTestSpanStackReferring = false noConditionalErasure = false pathMap = PathMap.empty langVersion = LanguageVersion("default") + implicitIncludeDir = implicitIncludeDir + defaultFSharpBinariesDir = defaultFSharpBinariesDir + reduceMemoryUsage = reduceMemoryUsage + legacyReferenceResolver = legacyReferenceResolver + isInteractive = isInteractive + isInvalidationSupported = isInvalidationSupported + copyFSharpCore = defaultCopyFSharpCore + tryGetMetadataSnapshot = tryGetMetadataSnapshot + useFsiAuxLib = isInteractive + rangeForErrors = rangeForErrors + sdkDirOverride = sdkDirOverride + xmlDocInfoLoader = None } - // Directories to start probing in - // Algorithm: - // Search for native libraries using: - // 1. Include directories - // 2. compilerToolPath directories - // 3. reference dll's - // 4. The implicit include directory - // - // NOTE: it is important this is a delayed IEnumerable sequence. It is recomputed - // each time a resolution happens and additional paths may be added as a result. - member tcConfigB.GetNativeProbingRoots () = - seq { - yield! tcConfigB.includes - yield! tcConfigB.compilerToolPaths - yield! (tcConfigB.referencedDLLs |> Seq.map(fun ref -> Path.GetDirectoryName(ref.Text))) - yield tcConfigB.implicitIncludeDir - } - |> Seq.distinct - - static member CreateNew(legacyReferenceResolver, defaultFSharpBinariesDir, reduceMemoryUsage, implicitIncludeDir, - isInteractive, isInvalidationSupported, defaultCopyFSharpCore, tryGetMetadataSnapshot) = + member tcConfigB.FxResolver = + // We compute the FxResolver on-demand. It depends on some configuration parameters + // which may be later adjusted. + match tcConfigB.fxResolver with + | None -> + let useDotNetFramework = (tcConfigB.primaryAssembly = PrimaryAssembly.Mscorlib) + let fxResolver = FxResolver(useDotNetFramework, tcConfigB.implicitIncludeDir, rangeForErrors=tcConfigB.rangeForErrors, useSdkRefs=tcConfigB.useSdkRefs, isInteractive=tcConfigB.isInteractive, sdkDirOverride=tcConfigB.sdkDirOverride) + tcConfigB.fxResolver <- Some fxResolver + fxResolver + | Some fxResolver -> fxResolver - Debug.Assert(FileSystem.IsPathRootedShim implicitIncludeDir, sprintf "implicitIncludeDir should be absolute: '%s'" implicitIncludeDir) + member tcConfigB.SetPrimaryAssembly primaryAssembly = + tcConfigB.primaryAssembly <- primaryAssembly + tcConfigB.fxResolver <- None // this needs to be recreated when the primary assembly changes - if (String.IsNullOrEmpty defaultFSharpBinariesDir) then - failwith "Expected a valid defaultFSharpBinariesDir" + member tcConfigB.SetUseSdkRefs useSdkRefs = + tcConfigB.useSdkRefs <- useSdkRefs + tcConfigB.fxResolver <- None // this needs to be recreated when the primary assembly changes - let tcConfigBuilder = - { TcConfigBuilder.Initial with - implicitIncludeDir = implicitIncludeDir - defaultFSharpBinariesDir = defaultFSharpBinariesDir - reduceMemoryUsage = reduceMemoryUsage - legacyReferenceResolver = legacyReferenceResolver - isInteractive = isInteractive - isInvalidationSupported = isInvalidationSupported - copyFSharpCore = defaultCopyFSharpCore - tryGetMetadataSnapshot = tryGetMetadataSnapshot - useFsiAuxLib = isInteractive - } - tcConfigBuilder - - member tcConfigB.ResolveSourceFile(m, nm, pathLoadedFrom) = + member tcConfigB.ResolveSourceFile(m, nm, pathLoadedFrom) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter ResolveFileUsingPaths(tcConfigB.includes @ [pathLoadedFrom], m, nm) @@ -667,22 +703,22 @@ type TcConfigBuilder = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter if sourceFiles = [] then errorR(Error(FSComp.SR.buildNoInputsSpecified(), rangeCmdArgs)) let ext() = match tcConfigB.target with CompilerTarget.Dll -> ".dll" | CompilerTarget.Module -> ".netmodule" | CompilerTarget.ConsoleExe | CompilerTarget.WinExe -> ".exe" - let implFiles = sourceFiles |> List.filter (fun lower -> List.exists (Filename.checkSuffix (String.lowercase lower)) FSharpImplFileSuffixes) - let outfile = - match tcConfigB.outputFile, List.rev implFiles with + let implFiles = sourceFiles |> List.filter (fun lower -> List.exists (FileSystemUtils.checkSuffix (String.lowercase lower)) FSharpImplFileSuffixes) + let outfile = + match tcConfigB.outputFile, List.rev implFiles with | None, [] -> "out" + ext() - | None, h :: _ -> - let basic = fileNameOfPath h - let modname = try Filename.chopExtension basic with _ -> basic + | None, h :: _ -> + let basic = FileSystemUtils.fileNameOfPath h + let modname = try FileSystemUtils.chopExtension basic with _ -> basic modname+(ext()) | Some f, _ -> f - let assemblyName = - let baseName = fileNameOfPath outfile - (fileNameWithoutExtension baseName) + let assemblyName = + let baseName = FileSystemUtils.fileNameOfPath outfile + (FileSystemUtils.fileNameWithoutExtension baseName) - let pdbfile = + let pdbfile = if tcConfigB.debuginfo then - Some (match tcConfigB.debugSymbolFile with + Some (match tcConfigB.debugSymbolFile with | None -> FSharp.Compiler.AbstractIL.ILPdbWriter.getDebugFileName outfile tcConfigB.portablePDB #if ENABLE_MONO_SUPPORT | Some _ when runningOnMono -> @@ -690,9 +726,9 @@ type TcConfigBuilder = warning(Error(FSComp.SR.ilwriteMDBFileNameCannotBeChangedWarning(), rangeCmdArgs)) FSharp.Compiler.AbstractIL.ILPdbWriter.getDebugFileName outfile tcConfigB.portablePDB #endif - | Some f -> f) + | Some f -> f) elif (tcConfigB.debugSymbolFile <> None) && (not (tcConfigB.debuginfo)) then - error(Error(FSComp.SR.buildPdbRequiresDebug(), rangeStartup)) + error(Error(FSComp.SR.buildPdbRequiresDebug(), rangeStartup)) else None tcConfigB.outputFile <- Some outfile @@ -700,9 +736,9 @@ type TcConfigBuilder = member tcConfigB.TurnWarningOff(m, s: string) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter - match GetWarningNumber(m, s) with + match GetWarningNumber(m, s) with | None -> () - | Some n -> + | Some n -> // nowarn:62 turns on mlCompatibility, e.g. shows ML compat items in intellisense menus if n = 62 then tcConfigB.mlCompatibility <- true tcConfigB.errorSeverityOptions <- @@ -710,33 +746,33 @@ type TcConfigBuilder = member tcConfigB.TurnWarningOn(m, s: string) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter - match GetWarningNumber(m, s) with + match GetWarningNumber(m, s) with | None -> () - | Some n -> + | Some n -> // warnon 62 turns on mlCompatibility, e.g. shows ML compat items in intellisense menus if n = 62 then tcConfigB.mlCompatibility <- false tcConfigB.errorSeverityOptions <- { tcConfigB.errorSeverityOptions with WarnOn = ListSet.insert (=) n tcConfigB.errorSeverityOptions.WarnOn } - member tcConfigB.AddIncludePath (m, path, pathIncludedFrom) = + member tcConfigB.AddIncludePath (m, path, pathIncludedFrom) = let absolutePath = ComputeMakePathAbsolute pathIncludedFrom path - let ok = - let existsOpt = - try Some(Directory.Exists absolutePath) + let ok = + let existsOpt = + try Some(FileSystem.DirectoryExistsShim absolutePath) 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)) + match existsOpt with + | Some exists -> + if not exists then warning(Error(FSComp.SR.buildSearchDirectoryNotFound absolutePath, m)) exists | None -> false - if ok && not (List.contains absolutePath tcConfigB.includes) then + if ok && not (List.contains absolutePath tcConfigB.includes) then tcConfigB.includes <- tcConfigB.includes ++ absolutePath member tcConfigB.AddLoadedSource(m, originalPath, pathLoadedFrom) = if FileSystem.IsInvalidPathShim originalPath then warning(Error(FSComp.SR.buildInvalidFilename originalPath, m)) - else - let path = + else + let path = match TryResolveFileUsingPaths(tcConfigB.includes @ [pathLoadedFrom], m, originalPath) with | Some path -> path | None -> @@ -745,19 +781,19 @@ type TcConfigBuilder = if not (List.contains path (List.map (fun (_, _, path) -> path) tcConfigB.loadedSources)) then tcConfigB.loadedSources <- tcConfigB.loadedSources ++ (m, originalPath, path) - member tcConfigB.AddEmbeddedSourceFile (file) = + member tcConfigB.AddEmbeddedSourceFile (file) = tcConfigB.embedSourceList <- tcConfigB.embedSourceList ++ file member tcConfigB.AddEmbeddedResource filename = tcConfigB.embedResources <- tcConfigB.embedResources ++ filename - member tcConfigB.AddCompilerToolsByPath (path) = + member tcConfigB.AddCompilerToolsByPath (path) = if not (tcConfigB.compilerToolPaths |> List.exists (fun text -> path = text)) then // NOTE: We keep same paths if range is different. let compilerToolPath = tcConfigB.compilerToolPaths |> List.tryPick (fun text -> if text = path then Some text else None) if compilerToolPath.IsNone then tcConfigB.compilerToolPaths <- tcConfigB.compilerToolPaths ++ path - member tcConfigB.AddReferencedAssemblyByPath (m, path) = + member tcConfigB.AddReferencedAssemblyByPath (m, path) = if FileSystem.IsInvalidPathShim path then warning(Error(FSComp.SR.buildInvalidAssemblyName(path), m)) elif not (tcConfigB.referencedDLLs |> List.exists (fun ar2 -> Range.equals m ar2.Range && path=ar2.Text)) then // NOTE: We keep same paths if range is different. @@ -798,27 +834,27 @@ type TcConfigBuilder = member tcConfigB.AddPathMapping (oldPrefix, newPrefix) = tcConfigB.pathMap <- tcConfigB.pathMap |> PathMap.addMapping oldPrefix newPrefix - + static member SplitCommandLineResourceInfo (ri: string) = let p = ri.IndexOf ',' if p <> -1 then - let file = String.sub ri 0 p - let rest = String.sub ri (p+1) (String.length ri - p - 1) - let p = rest.IndexOf ',' + let file = String.sub ri 0 p + let rest = String.sub ri (p+1) (String.length ri - p - 1) + let p = rest.IndexOf ',' if p <> -1 then - let name = String.sub rest 0 p+".resources" - let pubpri = String.sub rest (p+1) (rest.Length - p - 1) - if pubpri = "public" then file, name, ILResourceAccess.Public + let name = String.sub rest 0 p+".resources" + let pubpri = String.sub rest (p+1) (rest.Length - p - 1) + if pubpri = "public" then file, name, ILResourceAccess.Public elif pubpri = "private" then file, name, ILResourceAccess.Private else error(Error(FSComp.SR.buildInvalidPrivacy pubpri, rangeStartup)) - else + else file, rest, ILResourceAccess.Public - else - ri, fileNameOfPath ri, ILResourceAccess.Public + else + ri, FileSystemUtils.fileNameOfPath ri, ILResourceAccess.Public //---------------------------------------------------------------------------- -// TcConfig +// TcConfig //-------------------------------------------------------------------------- [] @@ -827,16 +863,16 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = // Validate the inputs - this helps ensure errors in options are shown in visual studio rather than only when built // However we only validate a minimal number of options at the moment - do if validate then try data.version.GetVersionInfo(data.implicitIncludeDir) |> ignore with e -> errorR e + do if validate then try data.version.GetVersionInfo(data.implicitIncludeDir) |> ignore with e -> errorR e // clone the input builder to ensure nobody messes with it. let data = { data with pause = data.pause } - let computeKnownDllReference libraryName = + let computeKnownDllReference libraryName = let defaultCoreLibraryReference = AssemblyReference(range0, libraryName+".dll", None) - let nameOfDll(r: AssemblyReference) = + let nameOfDll(r: AssemblyReference) = let filename = ComputeMakePathAbsolute data.implicitIncludeDir r.Text - if FileSystem.SafeExists filename then + if FileSystem.FileExistsShim filename then r, Some filename else // If the file doesn't exist, let reference resolution logic report the error later... @@ -853,7 +889,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = let dllReference, fileNameOpt = computeKnownDllReference getFSharpCoreLibraryName match fileNameOpt with | Some _ -> dllReference - | None -> AssemblyReference(range0, getDefaultFSharpCoreLocation, None) + | None -> AssemblyReference(range0, getDefaultFSharpCoreLocation(), None) // clrRoot: the location of the primary assembly (mscorlib.dll or netstandard.dll or System.Runtime.dll) // @@ -863,13 +899,13 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = // targetFrameworkVersion shouldn't matter since resolution has already happened. // In those cases where it does matter (e.g. --noframework is not being used or we are processing further // resolutions for a script) then it is correct to just use HighestInstalledNetFrameworkVersion(). - let clrRootValue, targetFrameworkVersionValue = + let clrRootValue, targetFrameworkVersionValue = match primaryAssemblyExplicitFilenameOpt with | Some primaryAssemblyFilename -> let filename = ComputeMakePathAbsolute data.implicitIncludeDir primaryAssemblyFilename - try + try let clrRoot = Some(Path.GetDirectoryName(FileSystem.GetFullPathShim filename)) - clrRoot, data.legacyReferenceResolver.HighestInstalledNetFrameworkVersion() + clrRoot, data.legacyReferenceResolver.Impl.HighestInstalledNetFrameworkVersion() with e -> // We no longer expect the above to fail but leaving this just in case error(Error(FSComp.SR.buildErrorOpeningBinaryFile(filename, e.Message), rangeStartup)) @@ -880,11 +916,12 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = None, "" else #endif - None, data.legacyReferenceResolver.HighestInstalledNetFrameworkVersion() + None, data.legacyReferenceResolver.Impl.HighestInstalledNetFrameworkVersion() + member x.FxResolver = data.FxResolver member x.primaryAssembly = data.primaryAssembly member x.noFeedback = data.noFeedback - member x.stackReserveSize = data.stackReserveSize + member x.stackReserveSize = data.stackReserveSize member x.implicitIncludeDir = data.implicitIncludeDir member x.openDebugInformationForLaterStaticLinking = data.openDebugInformationForLaterStaticLinking member x.fsharpBinariesDir = data.defaultFSharpBinariesDir @@ -933,6 +970,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = member x.reportNumDecls = data.reportNumDecls member x.printSignature = data.printSignature member x.printSignatureFile = data.printSignatureFile + member x.printAllSignatureFiles = data.printAllSignatureFiles member x.xmlDocOutputFile = data.xmlDocOutputFile member x.stats = data.stats member x.generateFilterBlocks = data.generateFilterBlocks @@ -957,6 +995,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = member x.ignoreSymbolStoreSequencePoints = data.ignoreSymbolStoreSequencePoints member x.internConstantStrings = data.internConstantStrings member x.extraOptimizationIterations = data.extraOptimizationIterations + member x.win32icon = data.win32icon member x.win32res = data.win32res member x.win32manifest = data.win32manifest member x.includewin32manifest = data.includewin32manifest @@ -979,6 +1018,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = member x.optSettings = data.optSettings member x.emitTailcalls = data.emitTailcalls member x.deterministic = data.deterministic + member x.concurrentBuild = data.concurrentBuild member x.pathMap = data.pathMap member x.langVersion = data.langVersion member x.preferredUiLang = data.preferredUiLang @@ -1001,37 +1041,39 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = member x.copyFSharpCore = data.copyFSharpCore member x.shadowCopyReferences = data.shadowCopyReferences member x.useSdkRefs = data.useSdkRefs + member x.sdkDirOverride = data.sdkDirOverride member x.tryGetMetadataSnapshot = data.tryGetMetadataSnapshot member x.internalTestSpanStackReferring = data.internalTestSpanStackReferring member x.noConditionalErasure = data.noConditionalErasure + member x.xmlDocInfoLoader = data.xmlDocInfoLoader - static member Create(builder, validate) = + static member Create(builder, validate) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter TcConfig(builder, validate) member x.legacyReferenceResolver = data.legacyReferenceResolver - member tcConfig.CloneToBuilder() = + member tcConfig.CloneToBuilder() = { data with conditionalCompilationDefines=data.conditionalCompilationDefines } - member tcConfig.ComputeCanContainEntryPoint(sourceFiles: string list) = - let n = sourceFiles.Length in + member tcConfig.ComputeCanContainEntryPoint(sourceFiles: string list) = + let n = sourceFiles.Length in (sourceFiles |> List.mapi (fun i _ -> (i = n-1)), tcConfig.target.IsExe) - + // This call can fail if no CLR is found (this is the path to mscorlib) - member tcConfig.GetTargetFrameworkDirectories() = + member tcConfig.GetTargetFrameworkDirectories() = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter - try - [ + try + [ // Check if we are given an explicit framework root - if so, use that - match tcConfig.clrRoot with + match tcConfig.clrRoot with | Some x -> let clrRoot = tcConfig.MakePathAbsolute x yield clrRoot let clrFacades = Path.Combine(clrRoot, "Facades") - if Directory.Exists(clrFacades) then yield clrFacades + if FileSystem.DirectoryExistsShim(clrFacades) then yield clrFacades - | None -> + | None -> // "there is no really good notion of runtime directory on .NETCore" #if NETSTANDARD let runtimeRoot = Path.GetDirectoryName(typeof.Assembly.Location) @@ -1043,75 +1085,75 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = let runtimeRootWPF = Path.Combine(runtimeRootWithoutSlash, "WPF") match tcConfig.resolutionEnvironment with - | ResolutionEnvironment.CompilationAndEvaluation -> + | LegacyResolutionEnvironment.CompilationAndEvaluation -> // Default compilation-and-execution-time references on .NET Framework and Mono, e.g. for F# Interactive // // In the current way of doing things, F# Interactive refers to implementation assemblies. yield runtimeRoot - if Directory.Exists runtimeRootFacades then + if FileSystem.DirectoryExistsShim runtimeRootFacades then yield runtimeRootFacades // System.Runtime.dll is in /usr/lib/mono/4.5/Facades - if Directory.Exists runtimeRootWPF then + if FileSystem.DirectoryExistsShim runtimeRootWPF then yield runtimeRootWPF // PresentationCore.dll is in C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF - match frameworkRefsPackDirectory with - | Some path when Directory.Exists(path) -> + match tcConfig.FxResolver.GetFrameworkRefsPackDirectory() with + | Some path when FileSystem.DirectoryExistsShim(path) -> yield path | _ -> () - | ResolutionEnvironment.EditingOrCompilation _ -> + | LegacyResolutionEnvironment.EditingOrCompilation _ -> #if ENABLE_MONO_SUPPORT - if runningOnMono then + if runningOnMono then // Default compilation-time references on Mono // // On Mono, the default references come from the implementation assemblies. // This is because we have had trouble reliably using MSBuild APIs to compute DotNetFrameworkReferenceAssembliesRootDirectory on Mono. yield runtimeRoot - if Directory.Exists runtimeRootFacades then + if FileSystem.DirectoryExistsShim runtimeRootFacades then yield runtimeRootFacades // System.Runtime.dll is in /usr/lib/mono/4.5/Facades - if Directory.Exists runtimeRootWPF then + if FileSystem.DirectoryExistsShim runtimeRootWPF then yield runtimeRootWPF // PresentationCore.dll is in C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF - // On Mono we also add a default reference to the 4.5-api and 4.5-api/Facades directories. + // On Mono we also add a default reference to the 4.5-api and 4.5-api/Facades directories. let runtimeRootApi = runtimeRootWithoutSlash + "-api" let runtimeRootApiFacades = Path.Combine(runtimeRootApi, "Facades") - if Directory.Exists runtimeRootApi then + if FileSystem.DirectoryExistsShim runtimeRootApi then yield runtimeRootApi - if Directory.Exists runtimeRootApiFacades then + if FileSystem.DirectoryExistsShim runtimeRootApiFacades then yield runtimeRootApiFacades - else + else #endif // Default compilation-time references on .NET Framework // // This is the normal case for "fsc.exe a.fs". We refer to the reference assemblies folder. - let frameworkRoot = tcConfig.legacyReferenceResolver.DotNetFrameworkReferenceAssembliesRootDirectory + let frameworkRoot = tcConfig.legacyReferenceResolver.Impl.DotNetFrameworkReferenceAssembliesRootDirectory let frameworkRootVersion = Path.Combine(frameworkRoot, tcConfig.targetFrameworkVersion) yield frameworkRootVersion let facades = Path.Combine(frameworkRootVersion, "Facades") - if Directory.Exists facades then + if FileSystem.DirectoryExistsShim facades then yield facades - match frameworkRefsPackDirectory with - | Some path when Directory.Exists(path) -> + match tcConfig.FxResolver.GetFrameworkRefsPackDirectory() with + | Some path when FileSystem.DirectoryExistsShim(path) -> yield path | _ -> () ] - with e -> - errorRecovery e range0; [] + with e -> + errorRecovery e range0; [] - member tcConfig.ComputeLightSyntaxInitialStatus filename = + member tcConfig.ComputeLightSyntaxInitialStatus filename = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter let lower = String.lowercase filename - let lightOnByDefault = List.exists (Filename.checkSuffix lower) FSharpLightSyntaxFileSuffixes + let lightOnByDefault = List.exists (FileSystemUtils.checkSuffix lower) FSharpLightSyntaxFileSuffixes if lightOnByDefault then (tcConfig.light <> Some false) else (tcConfig.light = Some true ) member tcConfig.GetAvailableLoadedSources() = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter let resolveLoadedSource (m, originalPath, path) = try - if not(FileSystem.SafeExists(path)) then - let secondTrial = + if not(FileSystem.FileExistsShim(path)) then + let secondTrial = tcConfig.includes |> List.tryPick (fun root -> let path = ComputeMakePathAbsolute root originalPath - if FileSystem.SafeExists(path) then Some path else None) + if FileSystem.FileExistsShim(path) then Some path else None) match secondTrial with | Some path -> Some(m,path) @@ -1121,23 +1163,23 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = else Some(m,path) with e -> errorRecovery e m; None - tcConfig.loadedSources - |> List.choose resolveLoadedSource - |> List.distinct + tcConfig.loadedSources + |> List.choose resolveLoadedSource + |> List.distinct - // This is not the complete set of search paths, it is just the set + // 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.GetSearchPathsForLibraryFiles() = + member tcConfig.GetSearchPathsForLibraryFiles() = [ yield! tcConfig.GetTargetFrameworkDirectories() yield! List.map (tcConfig.MakePathAbsolute) tcConfig.includes - yield tcConfig.implicitIncludeDir + yield tcConfig.implicitIncludeDir yield tcConfig.fsharpBinariesDir ] - member tcConfig.MakePathAbsolute path = + member tcConfig.MakePathAbsolute path = let result = ComputeMakePathAbsolute tcConfig.implicitIncludeDir path result - member _.ResolveSourceFile(m, filename, pathLoadedFrom) = + member _.ResolveSourceFile(m, filename, pathLoadedFrom) = data.ResolveSourceFile(m, filename, pathLoadedFrom) member _.PrimaryAssemblyDllReference() = primaryAssemblyReference @@ -1147,7 +1189,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = member _.GetNativeProbingRoots() = data.GetNativeProbingRoots() /// A closed set of assemblies where, for any subset S: - /// - the TcImports object built for S (and thus the F# Compiler CCUs for the assemblies in S) + /// - the TcImports object built for S (and thus the F# Compiler CCUs for the assemblies in S) /// is a resource that can be shared between any two IncrementalBuild objects that reference /// precisely S /// @@ -1157,22 +1199,25 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = /// 'framework' reference set that is potentially shared across multiple compilations. member tcConfig.IsSystemAssembly (filename: string) = try - FileSystem.SafeExists filename && + FileSystem.FileExistsShim filename && ((tcConfig.GetTargetFrameworkDirectories() |> List.exists (fun clrRoot -> clrRoot = Path.GetDirectoryName filename)) || - (systemAssemblies.Contains (fileNameWithoutExtension filename)) || - isInReferenceAssemblyPackDirectory filename) + (tcConfig.FxResolver.GetSystemAssemblies().Contains (FileSystemUtils.fileNameWithoutExtension filename)) || + tcConfig.FxResolver.IsInReferenceAssemblyPackDirectory filename) with _ -> false - member tcConfig.GenerateSignatureData = - not tcConfig.standalone && not tcConfig.noSignatureData + member tcConfig.GenerateSignatureData = + not tcConfig.standalone && not tcConfig.noSignatureData - member tcConfig.GenerateOptimizationData = + member tcConfig.GenerateOptimizationData = tcConfig.GenerateSignatureData -/// Represents a computation to return a TcConfig. Normally this is just a constant immutable TcConfig, + member tcConfig.assumeDotNetFramework = + tcConfig.primaryAssembly = PrimaryAssembly.Mscorlib + +/// Represents a computation to return a TcConfig. Normally this is just a constant immutable TcConfig, /// but for F# Interactive it may be based on an underlying mutable TcConfigBuilder. -type TcConfigProvider = +type TcConfigProvider = | TcConfigProvider of (CompilationThreadToken -> TcConfig) member x.Get ctok = (let (TcConfigProvider f) = x in f ctok) @@ -1182,5 +1227,5 @@ type TcConfigProvider = /// Get a TcConfigProvider which will continue to respect changes in the underlying /// TcConfigBuilder rather than delivering snapshots. static member BasedOnMutableBuilder tcConfigB = TcConfigProvider(fun _ctok -> TcConfig.Create(tcConfigB, validate=false)) - + let GetFSharpCoreLibraryName () = getFSharpCoreLibraryName diff --git a/src/fsharp/CompilerConfig.fsi b/src/fsharp/CompilerConfig.fsi index ae0aed70338..acb5f140b3d 100644 --- a/src/fsharp/CompilerConfig.fsi +++ b/src/fsharp/CompilerConfig.fsi @@ -4,33 +4,35 @@ module internal FSharp.Compiler.CompilerConfig open System - +open FSharp.Compiler.IO open Internal.Utilities - +open Internal.Utilities.Library open FSharp.Compiler +open FSharp.Compiler.Xml +open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILBinaryReader open FSharp.Compiler.AbstractIL.ILPdbWriter -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.DependencyManager +open FSharp.Compiler.Diagnostics open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features -open FSharp.Compiler.Range - -open Microsoft.DotNet.DependencyManager +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Text +open FSharp.Compiler.BuildGraph exception FileNameNotResolved of (*filename*) string * (*description of searched locations*) string * range exception LoadedSourceNotFoundIgnoring of (*filename*) string * range /// Represents a reference to an F# assembly. May be backed by a real assembly on disk (read by Abstract IL), or a cross-project /// reference in FSharp.Compiler.Service. -type IRawFSharpAssemblyData = +type IRawFSharpAssemblyData = /// The raw list AutoOpenAttribute attributes in the assembly - abstract GetAutoOpenAttributes: ILGlobals -> string list + abstract GetAutoOpenAttributes: unit -> string list /// The raw list InternalsVisibleToAttribute attributes in the assembly - abstract GetInternalsVisibleToAttributes: ILGlobals -> string list + abstract GetInternalsVisibleToAttributes: unit -> string list /// The raw IL module definition in the assembly, if any. This is not present for cross-project references /// in the language service @@ -38,7 +40,7 @@ type IRawFSharpAssemblyData = abstract HasAnyFSharpSignatureDataAttribute: bool - abstract HasMatchingFSharpSignatureDataAttribute: ILGlobals -> bool + abstract HasMatchingFSharpSignatureDataAttribute: bool /// The raw F# signature data in the assembly, if any abstract GetRawFSharpSignatureData: range * ilShortAssemName: string * fileName: string -> (string * (unit -> ReadOnlyByteMemory)) list @@ -56,36 +58,36 @@ type IRawFSharpAssemblyData = abstract ShortAssemblyName: string -type TimeStampCache = +type TimeStampCache = new: defaultTimeStamp: DateTime -> TimeStampCache member GetFileTimeStamp: string -> DateTime - member GetProjectReferenceTimeStamp: IProjectReference * CompilationThreadToken -> DateTime + member GetProjectReferenceTimeStamp: IProjectReference -> DateTime -and IProjectReference = +and IProjectReference = /// The name of the assembly file generated by the project - abstract FileName: string + abstract FileName: string /// Evaluate raw contents of the assembly file generated by the project - abstract EvaluateRawContents: CompilationThreadToken -> Cancellable + abstract EvaluateRawContents: unit -> NodeCode /// Get the logical timestamp that would be the timestamp of the assembly file generated by the project. /// /// For project references this is maximum of the timestamps of all dependent files. - /// The project is not actually built, nor are any assemblies read, but the timestamps for each dependent file + /// The project is not actually built, nor are any assemblies read, but the timestamps for each dependent file /// are read via the FileSystem. If the files don't exist, then a default timestamp is used. /// /// The operation returns None only if it is not possible to create an IncrementalBuilder for the project at all, e.g. if there /// are fatal errors in the options for the project. - abstract TryGetLogicalTimeStamp: TimeStampCache * CompilationThreadToken -> System.DateTime option + abstract TryGetLogicalTimeStamp: TimeStampCache -> System.DateTime option -type AssemblyReference = +type AssemblyReference = | AssemblyReference of range * string * IProjectReference option - + member Range: range - + member Text: string - + member ProjectReference: IProjectReference option member SimpleAssemblyNameIs: string -> bool @@ -93,18 +95,18 @@ type AssemblyReference = type UnresolvedAssemblyReference = UnresolvedAssemblyReference of string * AssemblyReference list [] -type CompilerTarget = - | WinExe - | ConsoleExe - | Dll +type CompilerTarget = + | WinExe + | ConsoleExe + | Dll | Module member IsExe: bool - + [] type CopyFSharpCoreFlag = Yes | No /// Represents the file or string used for the --version flag -type VersionFlag = +type VersionFlag = | VersionString of string | VersionFile of string | VersionNone @@ -149,7 +151,7 @@ type TcConfigBuilder = mutable implicitOpens: string list mutable useFsiAuxLib: bool mutable framework: bool - mutable resolutionEnvironment: ReferenceResolver.ResolutionEnvironment + mutable resolutionEnvironment: LegacyResolutionEnvironment mutable implicitlyResolveAssemblies: bool /// Set if the user has explicitly turned indentation-aware syntax on/off mutable light: bool option @@ -166,7 +168,7 @@ type TcConfigBuilder = mutable useHighEntropyVA: bool mutable inputCodePage: int option mutable embedResources: string list - mutable errorSeverityOptions: FSharpErrorSeverityOptions + mutable errorSeverityOptions: FSharpDiagnosticOptions mutable mlCompatibility:bool mutable checkOverflow:bool mutable showReferenceResolutions:bool @@ -190,17 +192,18 @@ type TcConfigBuilder = mutable reportNumDecls: bool mutable printSignature: bool mutable printSignatureFile: string + mutable printAllSignatureFiles: bool mutable xmlDocOutputFile: string option mutable stats: bool - mutable generateFilterBlocks: bool + mutable generateFilterBlocks: bool mutable signer: string option mutable container: string option mutable delaysign: bool mutable publicsign: bool - mutable version: VersionFlag + mutable version: VersionFlag mutable metadataVersion: string option mutable standalone: bool - mutable extraStaticLinkRoots: string list + mutable extraStaticLinkRoots: string list mutable noSignatureData: bool mutable onlyEssentialOptimizationData: bool mutable useOptimizationDataFile: bool @@ -213,11 +216,12 @@ type TcConfigBuilder = mutable ignoreSymbolStoreSequencePoints: bool mutable internConstantStrings: bool mutable extraOptimizationIterations: int - mutable win32res: string + mutable win32icon: string + mutable win32res: string mutable win32manifest: string mutable includewin32manifest: bool mutable linkResources: string list - mutable legacyReferenceResolver: ReferenceResolver.Resolver + mutable legacyReferenceResolver: LegacyReferenceResolver mutable showFullPaths: bool mutable errorStyle: ErrorStyle mutable utf8output: bool @@ -229,15 +233,16 @@ type TcConfigBuilder = #if DEBUG mutable showOptimizationData: bool #endif - mutable showTerms : bool - mutable writeTermsToFiles: bool - mutable doDetuple : bool - mutable doTLR : bool + mutable showTerms : bool + mutable writeTermsToFiles: bool + mutable doDetuple : bool + mutable doTLR : bool mutable doFinalSimplify: bool - mutable optsOn : bool - mutable optSettings : Optimizer.OptimizationSettings + mutable optsOn : bool + mutable optSettings : Optimizer.OptimizationSettings mutable emitTailcalls: bool mutable deterministic: bool + mutable concurrentBuild: bool mutable preferredUiLang: string option mutable lcid : int option mutable productNameForBannerText: string @@ -248,18 +253,21 @@ type TcConfigBuilder = #if !NO_EXTENSIONTYPING mutable showExtensionTypeMessages: bool #endif - mutable pause: bool + mutable pause: bool mutable alwaysCallVirt: bool mutable noDebugData: bool /// If true, indicates all type checking and code generation is in the context of fsi.exe - isInteractive: bool - isInvalidationSupported: bool + isInteractive: bool + isInvalidationSupported: bool mutable emitDebugInfoInQuotations: bool - mutable exename: string option + mutable exename: string option mutable copyFSharpCore: CopyFSharpCoreFlag mutable shadowCopyReferences: bool mutable useSdkRefs: bool + mutable fxResolver: FxResolver option + rangeForErrors: range + sdkDirOverride: string option /// A function to call to try to get an object that acts as a snapshot of the metadata section of a .NET binary, /// and from which we can read the metadata. Only used when metadataOnly=true. @@ -274,22 +282,24 @@ type TcConfigBuilder = mutable pathMap : PathMap mutable langVersion : LanguageVersion - } - static member Initial: TcConfigBuilder + mutable xmlDocInfoLoader : IXmlDocumentationInfoLoader option + } - static member CreateNew: - legacyReferenceResolver: ReferenceResolver.Resolver * - defaultFSharpBinariesDir: string * - reduceMemoryUsage: ReduceMemoryFlag * - implicitIncludeDir: string * - isInteractive: bool * + static member CreateNew: + legacyReferenceResolver: LegacyReferenceResolver * + defaultFSharpBinariesDir: string * + reduceMemoryUsage: ReduceMemoryFlag * + implicitIncludeDir: string * + isInteractive: bool * isInvalidationSupported: bool * defaultCopyFSharpCore: CopyFSharpCoreFlag * - tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot + tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot * + sdkDirOverride: string option * + rangeForErrors: range -> TcConfigBuilder - member DecideNames: string list -> outfile: string * pdbfile: string option * assemblyName: string + member DecideNames: string list -> outfile: string * pdbfile: string option * assemblyName: string member TurnWarningOff: range * string -> unit @@ -318,6 +328,12 @@ type TcConfigBuilder = member AddLoadedSource: m: range * originalPath: string * pathLoadedFrom: string -> unit + member FxResolver: FxResolver + + member SetUseSdkRefs: useSdkRefs: bool -> unit + + member SetPrimaryAssembly: primaryAssembly: PrimaryAssembly -> unit + /// Immutable TcConfig, modifications are made via a TcConfigBuilder [] type TcConfig = @@ -344,7 +360,7 @@ type TcConfig = member reduceMemoryUsage: ReduceMemoryFlag member inputCodePage: int option member embedResources: string list - member errorSeverityOptions: FSharpErrorSeverityOptions + member errorSeverityOptions: FSharpDiagnosticOptions member mlCompatibility:bool member checkOverflow:bool member showReferenceResolutions:bool @@ -368,17 +384,18 @@ type TcConfig = member reportNumDecls: bool member printSignature: bool member printSignatureFile: string + member printAllSignatureFiles: bool member xmlDocOutputFile: string option member stats: bool - member generateFilterBlocks: bool + member generateFilterBlocks: bool member signer: string option member container: string option member delaysign: bool member publicsign: bool - member version: VersionFlag + member version: VersionFlag member metadataVersion: string option member standalone: bool - member extraStaticLinkRoots: string list + member extraStaticLinkRoots: string list member noSignatureData: bool member onlyEssentialOptimizationData: bool member useOptimizationDataFile: bool @@ -391,7 +408,8 @@ type TcConfig = member ignoreSymbolStoreSequencePoints: bool member internConstantStrings: bool member extraOptimizationIterations: int - member win32res: string + member win32icon: string + member win32res: string member win32manifest: string member includewin32manifest: bool member linkResources: string list @@ -406,17 +424,18 @@ type TcConfig = #if DEBUG member showOptimizationData: bool #endif - member showTerms : bool - member writeTermsToFiles: bool - member doDetuple : bool - member doTLR : bool + member showTerms : bool + member writeTermsToFiles: bool + member doDetuple : bool + member doTLR : bool member doFinalSimplify: bool - member optSettings : Optimizer.OptimizationSettings + member optSettings : Optimizer.OptimizationSettings member emitTailcalls: bool member deterministic: bool + member concurrentBuild: bool member pathMap: PathMap member preferredUiLang: string option - member optsOn : bool + member optsOn : bool member productNameForBannerText: string member showBanner : bool member showTimes: bool @@ -425,22 +444,26 @@ type TcConfig = #if !NO_EXTENSIONTYPING member showExtensionTypeMessages: bool #endif - member pause: bool + member pause: bool member alwaysCallVirt: bool member noDebugData: bool /// If true, indicates all type checking and code generation is in the context of fsi.exe member isInteractive: bool - member isInvalidationSupported: bool + member isInvalidationSupported: bool + + member xmlDocInfoLoader: IXmlDocumentationInfoLoader option + + member FxResolver: FxResolver member ComputeLightSyntaxInitialStatus: string -> bool member GetTargetFrameworkDirectories: unit -> string list - + /// Get the loaded sources that exist and issue a warning for the ones that don't member GetAvailableLoadedSources: unit -> (range*string) list - - member ComputeCanContainEntryPoint: sourceFiles:string list -> bool list *bool + + member ComputeCanContainEntryPoint: sourceFiles:string list -> bool list *bool /// File system query based on TcConfig settings member ResolveSourceFile: range * filename: string * pathLoadedFrom: string -> string @@ -448,7 +471,7 @@ type TcConfig = /// File system query based on TcConfig settings member MakePathAbsolute: string -> string - member resolutionEnvironment: ReferenceResolver.ResolutionEnvironment + member resolutionEnvironment: LegacyResolutionEnvironment member copyFSharpCore: CopyFSharpCoreFlag @@ -456,7 +479,9 @@ type TcConfig = member useSdkRefs: bool - member legacyReferenceResolver: ReferenceResolver.Resolver + member sdkDirOverride: string option + + member legacyReferenceResolver: LegacyReferenceResolver member emitDebugInfoInQuotations: bool @@ -492,15 +517,18 @@ type TcConfig = member CloneToBuilder: unit -> TcConfigBuilder /// Indicates if the compilation will result in F# signature data resource in the generated binary - member GenerateSignatureData: bool + member GenerateSignatureData: bool /// Indicates if the compilation will result in an F# optimization data resource in the generated binary member GenerateOptimizationData: bool + /// Check if the primary assembly is mscorlib + member assumeDotNetFramework: bool + /// Represents a computation to return a TcConfig. Normally this is just a constant immutable TcConfig, /// but for F# Interactive it may be based on an underlying mutable TcConfigBuilder. [] -type TcConfigProvider = +type TcConfigProvider = member Get: CompilationThreadToken -> TcConfig @@ -534,4 +562,4 @@ val FSharpLightSyntaxFileSuffixes: string list val doNotRequireNamespaceOrModuleSuffixes: string list -val mlCompatSuffixes: string list \ No newline at end of file +val mlCompatSuffixes: string list diff --git a/src/fsharp/CompilerDiagnostics.fs b/src/fsharp/CompilerDiagnostics.fs index 6cda66e36a9..bcbe770d69b 100644 --- a/src/fsharp/CompilerDiagnostics.fs +++ b/src/fsharp/CompilerDiagnostics.fs @@ -8,12 +8,11 @@ open System.Diagnostics open System.IO open System.Text -open Internal.Utilities -open Internal.Utilities.Filename +open Internal.Utilities.Library.Extras +open Internal.Utilities.Library open Internal.Utilities.Text open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AttributeChecking open FSharp.Compiler.CheckExpressions open FSharp.Compiler.CheckDeclarations @@ -21,18 +20,21 @@ open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerImports open FSharp.Compiler.ConstraintSolver open FSharp.Compiler.DiagnosticMessage +open FSharp.Compiler.Diagnostics open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Infos +open FSharp.Compiler.IO open FSharp.Compiler.Lexhelp -open FSharp.Compiler.Lib open FSharp.Compiler.MethodCalls open FSharp.Compiler.MethodOverrides open FSharp.Compiler.NameResolution open FSharp.Compiler.ParseHelpers -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.SyntaxTree -open FSharp.Compiler.Range open FSharp.Compiler.SignatureConformance +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Position +open FSharp.Compiler.Text.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps @@ -42,7 +44,7 @@ open FSharp.Compiler.TypedTreeOps module internal CompilerService = let showAssertForUnexpectedException = ref true #endif // DEBUG - + /// This exception is an old-style way of reporting a diagnostic exception HashIncludeNotAllowedInNonScript of range @@ -73,150 +75,149 @@ exception DeprecatedCommandLineOptionNoDescription of string * range /// This exception is an old-style way of reporting a diagnostic exception InternalCommandLineOption of string * range -let GetRangeOfDiagnostic(err: PhasedDiagnostic) = +let GetRangeOfDiagnostic(err: PhasedDiagnostic) = let rec RangeFromException = function - | ErrorFromAddingConstraint(_, err2, _) -> RangeFromException err2 + | ErrorFromAddingConstraint(_, err2, _) -> RangeFromException err2 #if !NO_EXTENSIONTYPING | ExtensionTyping.ProvidedTypeResolutionNoRange e -> RangeFromException e | ExtensionTyping.ProvidedTypeResolution(m, _) #endif | ReservedKeyword(_, m) | IndentationProblem(_, m) - | ErrorFromAddingTypeEquation(_, _, _, _, _, m) - | ErrorFromApplyingDefault(_, _, _, _, _, m) + | ErrorFromAddingTypeEquation(_, _, _, _, _, m) + | ErrorFromApplyingDefault(_, _, _, _, _, m) | ErrorsFromAddingSubsumptionConstraint(_, _, _, _, _, _, m) | FunctionExpected(_, _, m) | BakedInMemberConstraintName(_, m) | StandardOperatorRedefinitionWarning(_, m) | BadEventTransformation m | ParameterlessStructCtor m - | FieldNotMutable (_, _, m) - | Recursion (_, _, _, _, m) - | InvalidRuntimeCoercion(_, _, _, m) + | FieldNotMutable (_, _, m) + | Recursion (_, _, _, _, m) + | InvalidRuntimeCoercion(_, _, _, m) | IndeterminateRuntimeCoercion(_, _, _, m) | IndeterminateStaticCoercion (_, _, _, m) | StaticCoercionShouldUseBox (_, _, _, m) | CoercionTargetSealed(_, _, m) | UpcastUnnecessary m - | QuotationTranslator.IgnoringPartOfQuotedTermWarning (_, m) - + | QuotationTranslator.IgnoringPartOfQuotedTermWarning (_, m) + | TypeTestUnnecessary m | RuntimeCoercionSourceSealed(_, _, m) | OverrideDoesntOverride(_, _, _, _, _, m) - | UnionPatternsBindDifferentNames m - | UnionCaseWrongArguments (_, _, _, m) - | TypeIsImplicitlyAbstract m - | RequiredButNotSpecified (_, _, _, _, m) + | UnionPatternsBindDifferentNames m + | UnionCaseWrongArguments (_, _, _, m) + | TypeIsImplicitlyAbstract m + | RequiredButNotSpecified (_, _, _, _, m) | FunctionValueUnexpected (_, _, m) | UnitTypeExpected (_, _, m) | UnitTypeExpectedWithEquality (_, _, m) | UnitTypeExpectedWithPossiblePropertySetter (_, _, _, _, m) | UnitTypeExpectedWithPossibleAssignment (_, _, _, _, m) - | UseOfAddressOfOperator m - | DeprecatedThreadStaticBindingWarning m - | NonUniqueInferredAbstractSlot (_, _, _, _, _, m) + | UseOfAddressOfOperator m + | DeprecatedThreadStaticBindingWarning m + | NonUniqueInferredAbstractSlot (_, _, _, _, _, m) | DefensiveCopyWarning (_, m) - | LetRecCheckedAtRuntime m + | LetRecCheckedAtRuntime m | UpperCaseIdentifierInPattern m | NotUpperCaseConstructor m - | RecursiveUseCheckedAtRuntime (_, _, m) - | LetRecEvaluatedOutOfOrder (_, _, _, m) + | RecursiveUseCheckedAtRuntime (_, _, m) + | LetRecEvaluatedOutOfOrder (_, _, _, m) | Error (_, m) | ErrorWithSuggestions (_, m, _, _) - | NumberedError (_, m) - | SyntaxError (_, m) + | SyntaxError (_, m) | InternalError (_, m) - | InterfaceNotRevealed(_, _, m) + | InterfaceNotRevealed(_, _, m) | WrappedError (_, m) | PatternMatchCompilation.MatchIncomplete (_, _, m) | PatternMatchCompilation.EnumMatchIncomplete (_, _, m) - | PatternMatchCompilation.RuleNeverMatched m + | PatternMatchCompilation.RuleNeverMatched m | ValNotMutable(_, _, m) - | ValNotLocal(_, _, m) - | MissingFields(_, m) + | ValNotLocal(_, _, m) + | MissingFields(_, m) | OverrideInIntrinsicAugmentation m - | IntfImplInIntrinsicAugmentation m + | IntfImplInIntrinsicAugmentation m | OverrideInExtrinsicAugmentation m - | IntfImplInExtrinsicAugmentation m - | ValueRestriction(_, _, _, _, m) - | LetRecUnsound (_, _, m) - | ObsoleteError (_, m) - | ObsoleteWarning (_, m) - | Experimental (_, m) + | IntfImplInExtrinsicAugmentation m + | ValueRestriction(_, _, _, _, _, m) + | LetRecUnsound (_, _, m) + | ObsoleteError (_, m) + | ObsoleteWarning (_, m) + | Experimental (_, m) | PossibleUnverifiableCode m - | UserCompilerMessage (_, _, m) - | Deprecated(_, m) - | LibraryUseOnly m - | FieldsFromDifferentTypes (_, _, _, m) + | UserCompilerMessage (_, _, m) + | Deprecated(_, m) + | LibraryUseOnly m + | FieldsFromDifferentTypes (_, _, _, m) | IndeterminateType m - | TyconBadArgs(_, _, _, m) -> + | TyconBadArgs(_, _, _, m) -> Some m - | FieldNotContained(_, arf, _, _) -> Some arf.Range - | ValueNotContained(_, _, aval, _, _) -> Some aval.Range - | ConstrNotContained(_, aval, _, _) -> Some aval.Id.idRange - | ExnconstrNotContained(_, aexnc, _, _) -> Some aexnc.Range + | FieldNotContained(_, _, _, arf, _, _) -> Some arf.Range + | ValueNotContained(_, _, _, aval, _, _) -> Some aval.Range + | ConstrNotContained(_, _, _, aval, _, _) -> Some aval.Id.idRange + | ExnconstrNotContained(_, _, aexnc, _, _) -> Some aexnc.Range - | VarBoundTwice id - | UndefinedName(_, _, id, _) -> - Some id.idRange + | VarBoundTwice id + | UndefinedName(_, _, id, _) -> + Some id.idRange - | Duplicate(_, _, m) - | NameClash(_, _, _, m, _, _, _) - | UnresolvedOverloading(_, _, _, m) + | Duplicate(_, _, m) + | NameClash(_, _, _, m, _, _, _) + | UnresolvedOverloading(_, _, _, m) | UnresolvedConversionOperator (_, _, _, m) | VirtualAugmentationOnNullValuedType m | NonVirtualAugmentationOnNullValuedType m | NonRigidTypar(_, _, _, _, _, m) - | ConstraintSolverTupleDiffLengths(_, _, _, m, _) - | ConstraintSolverInfiniteTypes(_, _, _, _, m, _) - | ConstraintSolverMissingConstraint(_, _, _, m, _) + | ConstraintSolverTupleDiffLengths(_, _, _, m, _) + | ConstraintSolverInfiniteTypes(_, _, _, _, m, _) + | ConstraintSolverMissingConstraint(_, _, _, m, _) | ConstraintSolverTypesNotInEqualityRelation(_, _, _, m, _, _) - | ConstraintSolverError(_, m, _) - | ConstraintSolverTypesNotInSubsumptionRelation(_, _, _, m, _) - | ConstraintSolverRelatedInformation(_, m, _) - | SelfRefObjCtor(_, m) -> + | ConstraintSolverError(_, m, _) + | ConstraintSolverTypesNotInSubsumptionRelation(_, _, _, m, _) + | ConstraintSolverRelatedInformation(_, m, _) + | SelfRefObjCtor(_, m) -> Some m - | NotAFunction(_, _, mfun, _) -> + | NotAFunction(_, _, mfun, _) -> Some mfun - - | NotAFunctionButIndexer(_, _, _, mfun, _) -> + + | NotAFunctionButIndexer(_, _, _, mfun, _) -> Some mfun | IllegalFileNameChar(_) -> Some rangeCmdArgs - | UnresolvedReferenceError(_, m) - | UnresolvedPathReference(_, _, m) - | DeprecatedCommandLineOptionFull(_, m) - | DeprecatedCommandLineOptionForHtmlDoc(_, m) - | DeprecatedCommandLineOptionSuggestAlternative(_, _, m) - | DeprecatedCommandLineOptionNoDescription(_, m) + | UnresolvedReferenceError(_, m) + | UnresolvedPathReference(_, _, m) + | DeprecatedCommandLineOptionFull(_, m) + | DeprecatedCommandLineOptionForHtmlDoc(_, m) + | DeprecatedCommandLineOptionSuggestAlternative(_, _, m) + | DeprecatedCommandLineOptionNoDescription(_, m) | InternalCommandLineOption(_, m) | HashIncludeNotAllowedInNonScript m - | HashReferenceNotAllowedInNonScript m - | HashDirectiveNotAllowedInNonScript m - | FileNameNotResolved(_, _, m) - | LoadedSourceNotFoundIgnoring(_, m) - | MSBuildReferenceResolutionWarning(_, _, m) - | MSBuildReferenceResolutionError(_, _, m) - | AssemblyNotResolved(_, m) - | HashLoadedSourceHasIssues(_, _, m) - | HashLoadedScriptConsideredSource m -> + | HashReferenceNotAllowedInNonScript m + | HashDirectiveNotAllowedInNonScript m + | FileNameNotResolved(_, _, m) + | LoadedSourceNotFoundIgnoring(_, m) + | MSBuildReferenceResolutionWarning(_, _, m) + | MSBuildReferenceResolutionError(_, _, m) + | AssemblyNotResolved(_, m) + | HashLoadedSourceHasIssues(_, _, m) + | HashLoadedScriptConsideredSource m -> Some m // Strip TargetInvocationException wrappers - | :? System.Reflection.TargetInvocationException as e -> + | :? System.Reflection.TargetInvocationException as e -> RangeFromException e.InnerException #if !NO_EXTENSIONTYPING | :? TypeProviderError as e -> e.Range |> Some #endif - + | _ -> None - + RangeFromException err.Exception -let GetDiagnosticNumber(err: PhasedDiagnostic) = - let rec GetFromException(e: exn) = +let GetDiagnosticNumber(err: PhasedDiagnostic) = + let rec GetFromException(e: exn) = match e with (* DO NOT CHANGE THESE NUMBERS *) | ErrorFromAddingTypeEquation _ -> 1 @@ -234,7 +235,7 @@ let GetDiagnosticNumber(err: PhasedDiagnostic) = | IndeterminateStaticCoercion _ -> 13 | StaticCoercionShouldUseBox _ -> 14 // 15 cannot be reused - | RuntimeCoercionSourceSealed _ -> 16 + | RuntimeCoercionSourceSealed _ -> 16 | OverrideDoesntOverride _ -> 17 | UnionPatternsBindDifferentNames _ -> 18 | UnionCaseWrongArguments _ -> 19 @@ -279,7 +280,7 @@ let GetDiagnosticNumber(err: PhasedDiagnostic) = | DeprecatedThreadStaticBindingWarning _ -> 56 | Experimental _ -> 57 | IndentationProblem _ -> 58 - | CoercionTargetSealed _ -> 59 + | CoercionTargetSealed _ -> 59 | OverrideInIntrinsicAugmentation _ -> 60 | NonVirtualAugmentationOnNullValuedType _ -> 61 | UserCompilerMessage (_, n, _) -> n @@ -295,19 +296,19 @@ let GetDiagnosticNumber(err: PhasedDiagnostic) = | IndeterminateType _ -> 72 | InternalError _ -> 73 | UnresolvedReferenceNoRange _ - | UnresolvedReferenceError _ - | UnresolvedPathReferenceNoRange _ + | UnresolvedReferenceError _ + | UnresolvedPathReferenceNoRange _ | UnresolvedPathReference _ -> 74 | DeprecatedCommandLineOptionFull _ | DeprecatedCommandLineOptionForHtmlDoc _ | DeprecatedCommandLineOptionSuggestAlternative _ - | DeprecatedCommandLineOptionNoDescription _ + | DeprecatedCommandLineOptionNoDescription _ | InternalCommandLineOption _ -> 75 - | HashIncludeNotAllowedInNonScript _ - | HashReferenceNotAllowedInNonScript _ + | HashIncludeNotAllowedInNonScript _ + | HashReferenceNotAllowedInNonScript _ | HashDirectiveNotAllowedInNonScript _ -> 76 | BakedInMemberConstraintName _ -> 77 - | FileNameNotResolved _ -> 78 + | FileNameNotResolved _ -> 78 | LoadedSourceNotFoundIgnoring _ -> 79 // 80 cannot be reused | ParameterlessStructCtor _ -> 81 @@ -333,15 +334,14 @@ let GetDiagnosticNumber(err: PhasedDiagnostic) = (* DO NOT CHANGE THE NUMBERS *) // Strip TargetInvocationException wrappers - | :? System.Reflection.TargetInvocationException as e -> + | :? System.Reflection.TargetInvocationException as e -> GetFromException e.InnerException - - | WrappedError(e, _) -> GetFromException e + + | WrappedError(e, _) -> GetFromException e | Error ((n, _), _) -> n | ErrorWithSuggestions ((n, _), _, _, _) -> n | Failure _ -> 192 - | NumberedError((n, _), _) -> n | IllegalFileNameChar(fileName, invalidChar) -> fst (FSComp.SR.buildUnexpectedFileNameCharacter(fileName, string invalidChar)) #if !NO_EXTENSIONTYPING | :? TypeProviderError as e -> e.Number @@ -349,59 +349,58 @@ let GetDiagnosticNumber(err: PhasedDiagnostic) = | ErrorsFromAddingSubsumptionConstraint (_, _, _, _, _, ContextInfo.DowncastUsedInsteadOfUpcast _, _) -> fst (FSComp.SR.considerUpcast("", "")) | _ -> 193 GetFromException err.Exception - -let GetWarningLevel err = - match err.Exception with + +let GetWarningLevel err = + match err.Exception with // Level 5 warnings | RecursiveUseCheckedAtRuntime _ | LetRecEvaluatedOutOfOrder _ | DefensiveCopyWarning _ -> 5 - | NumberedError((n, _), _) - | ErrorWithSuggestions((n, _), _, _, _) - | Error((n, _), _) -> + | Error((n, _), _) + | ErrorWithSuggestions((n, _), _, _, _) -> // 1178, tcNoComparisonNeeded1, "The struct, record or union type '%s' is not structurally comparable because the type parameter %s does not satisfy the 'comparison' constraint..." // 1178, tcNoComparisonNeeded2, "The struct, record or union type '%s' is not structurally comparable because the type '%s' does not satisfy the 'comparison' constraint...." // 1178, tcNoEqualityNeeded1, "The struct, record or union type '%s' does not support structural equality because the type parameter %s does not satisfy the 'equality' constraint..." // 1178, tcNoEqualityNeeded2, "The struct, record or union type '%s' does not support structural equality because the type '%s' does not satisfy the 'equality' constraint...." if (n = 1178) then 5 else 2 - // Level 2 + // Level 2 | _ -> 2 -let warningOn err level specificWarnOn = +let warningOn err level specificWarnOn = let n = GetDiagnosticNumber err List.contains n specificWarnOn || // Some specific warnings are never on by default, i.e. unused variable warnings - match n with + match n with | 1182 -> false // chkUnusedValue - off by default | 3180 -> false // abImplicitHeapAllocation - off by default - | _ -> level >= GetWarningLevel err + | _ -> level >= GetWarningLevel err -let SplitRelatedDiagnostics(err: PhasedDiagnostic) : PhasedDiagnostic * PhasedDiagnostic list = +let SplitRelatedDiagnostics(err: PhasedDiagnostic) : PhasedDiagnostic * PhasedDiagnostic list = let ToPhased e = {Exception=e; Phase = err.Phase} let rec SplitRelatedException = function - | ConstraintSolverRelatedInformation(fopt, m2, e) -> + | ConstraintSolverRelatedInformation(fopt, m2, e) -> let e, related = SplitRelatedException e ConstraintSolverRelatedInformation(fopt, m2, e.Exception)|>ToPhased, related | ErrorFromAddingTypeEquation(g, denv, t1, t2, e, m) -> let e, related = SplitRelatedException e ErrorFromAddingTypeEquation(g, denv, t1, t2, e.Exception, m)|>ToPhased, related - | ErrorFromApplyingDefault(g, denv, tp, defaultType, e, m) -> + | ErrorFromApplyingDefault(g, denv, tp, defaultType, e, m) -> let e, related = SplitRelatedException e ErrorFromApplyingDefault(g, denv, tp, defaultType, e.Exception, m)|>ToPhased, related - | ErrorsFromAddingSubsumptionConstraint(g, denv, t1, t2, e, contextInfo, m) -> + | ErrorsFromAddingSubsumptionConstraint(g, denv, t1, t2, e, contextInfo, m) -> let e, related = SplitRelatedException e ErrorsFromAddingSubsumptionConstraint(g, denv, t1, t2, e.Exception, contextInfo, m)|>ToPhased, related - | ErrorFromAddingConstraint(x, e, m) -> + | ErrorFromAddingConstraint(x, e, m) -> let e, related = SplitRelatedException e ErrorFromAddingConstraint(x, e.Exception, m)|>ToPhased, related - | WrappedError (e, m) -> + | WrappedError (e, m) -> let e, related = SplitRelatedException e WrappedError(e.Exception, m)|>ToPhased, related // Strip TargetInvocationException wrappers - | :? System.Reflection.TargetInvocationException as e -> + | :? System.Reflection.TargetInvocationException as e -> SplitRelatedException e.InnerException - | e -> + | e -> ToPhased e, [] SplitRelatedException err.Exception @@ -560,7 +559,7 @@ let FileNameNotResolvedE() = DeclareResourceString("FileNameNotResolved", "%s%s" let AssemblyNotResolvedE() = DeclareResourceString("AssemblyNotResolved", "%s") let HashLoadedSourceHasIssues1E() = DeclareResourceString("HashLoadedSourceHasIssues1", "") let HashLoadedSourceHasIssues2E() = DeclareResourceString("HashLoadedSourceHasIssues2", "") -let HashLoadedScriptConsideredSourceE() = DeclareResourceString("HashLoadedScriptConsideredSource", "") +let HashLoadedScriptConsideredSourceE() = DeclareResourceString("HashLoadedScriptConsideredSource", "") let InvalidInternalsVisibleToAssemblyName1E() = DeclareResourceString("InvalidInternalsVisibleToAssemblyName1", "%s%s") let InvalidInternalsVisibleToAssemblyName2E() = DeclareResourceString("InvalidInternalsVisibleToAssemblyName2", "%s") let LoadedSourceNotFoundIgnoringE() = DeclareResourceString("LoadedSourceNotFoundIgnoring", "%s") @@ -590,12 +589,12 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa os.Append " " |> ignore os.Append(DecompileOpName value) |> ignore - let rec OutputExceptionR (os: StringBuilder) error = + let rec OutputExceptionR (os: StringBuilder) error = match error with - | ConstraintSolverTupleDiffLengths(_, tl1, tl2, m, m2) -> + | ConstraintSolverTupleDiffLengths(_, tl1, tl2, m, m2) -> os.Append(ConstraintSolverTupleDiffLengthsE().Format tl1.Length tl2.Length) |> ignore - if m.StartLine <> m2.StartLine then + if m.StartLine <> m2.StartLine then os.Append(SeeAlsoE().Format (stringOfRange m)) |> ignore | ConstraintSolverInfiniteTypes(denv, contextInfo, t1, t2, m, m2) -> @@ -610,30 +609,30 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa os.Append(" " + FSComp.SR.yieldUsedInsteadOfYieldBang()) |> ignore | _ -> () - if m.StartLine <> m2.StartLine then + if m.StartLine <> m2.StartLine then os.Append(SeeAlsoE().Format (stringOfRange m)) |> ignore - | ConstraintSolverMissingConstraint(denv, tpr, tpc, m, m2) -> + | ConstraintSolverMissingConstraint(denv, tpr, tpc, m, m2) -> os.Append(ConstraintSolverMissingConstraintE().Format (NicePrint.stringOfTyparConstraint denv (tpr, tpc))) |> ignore - if m.StartLine <> m2.StartLine then + if m.StartLine <> m2.StartLine then os.Append(SeeAlsoE().Format (stringOfRange m)) |> ignore - | ConstraintSolverTypesNotInEqualityRelation(denv, (TType_measure _ as t1), (TType_measure _ as t2), m, m2, _) -> + | ConstraintSolverTypesNotInEqualityRelation(denv, (TType_measure _ as t1), (TType_measure _ as t2), m, m2, _) -> // REVIEW: consider if we need to show _cxs (the type parameter constraints) let t1, t2, _cxs = NicePrint.minimalStringsOfTwoTypes denv t1 t2 - + os.Append(ConstraintSolverTypesNotInEqualityRelation1E().Format t1 t2 ) |> ignore - + if m.StartLine <> m2.StartLine then os.Append(SeeAlsoE().Format (stringOfRange m)) |> ignore - | ConstraintSolverTypesNotInEqualityRelation(denv, t1, t2, m, m2, contextInfo) -> + | ConstraintSolverTypesNotInEqualityRelation(denv, t1, t2, m, m2, contextInfo) -> // REVIEW: consider if we need to show _cxs (the type parameter constraints) let t1, t2, _cxs = NicePrint.minimalStringsOfTwoTypes denv t1 t2 - + match contextInfo with | ContextInfo.IfExpression range when Range.equals range m -> os.Append(FSComp.SR.ifExpression(t1, t2)) |> ignore - | ContextInfo.CollectionElement (isArray, range) when Range.equals range m -> + | ContextInfo.CollectionElement (isArray, range) when Range.equals range m -> if isArray then os.Append(FSComp.SR.arrayElementHasWrongType(t1, t2)) |> ignore else @@ -643,34 +642,34 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | ContextInfo.FollowingPatternMatchClause range when Range.equals range m -> os.Append(FSComp.SR.followingPatternMatchClauseHasWrongType(t1, t2)) |> ignore | ContextInfo.PatternMatchGuard range when Range.equals range m -> os.Append(FSComp.SR.patternMatchGuardIsNotBool(t2)) |> ignore | _ -> os.Append(ConstraintSolverTypesNotInEqualityRelation2E().Format t1 t2) |> ignore - if m.StartLine <> m2.StartLine then + if m.StartLine <> m2.StartLine then os.Append(SeeAlsoE().Format (stringOfRange m)) |> ignore - | ConstraintSolverTypesNotInSubsumptionRelation(denv, t1, t2, m, m2) -> + | ConstraintSolverTypesNotInSubsumptionRelation(denv, t1, t2, m, m2) -> // REVIEW: consider if we need to show _cxs (the type parameter constraints) let t1, t2, cxs = NicePrint.minimalStringsOfTwoTypes denv t1 t2 os.Append(ConstraintSolverTypesNotInSubsumptionRelationE().Format t2 t1 cxs) |> ignore - if m.StartLine <> m2.StartLine then + if m.StartLine <> m2.StartLine then os.Append(SeeAlsoE().Format (stringOfRange m2)) |> ignore - | ConstraintSolverError(msg, m, m2) -> + | ConstraintSolverError(msg, m, m2) -> os.Append msg |> ignore - if m.StartLine <> m2.StartLine then + if m.StartLine <> m2.StartLine then os.Append(SeeAlsoE().Format (stringOfRange m2)) |> ignore - | ConstraintSolverRelatedInformation(fopt, _, e) -> - match e with + | ConstraintSolverRelatedInformation(fopt, _, e) -> + match e with | ConstraintSolverError _ -> OutputExceptionR os e | _ -> () fopt |> Option.iter (Printf.bprintf os " %s") - | ErrorFromAddingTypeEquation(g, denv, t1, t2, ConstraintSolverTypesNotInEqualityRelation(_, t1', t2', m, _, contextInfo), _) + | ErrorFromAddingTypeEquation(g, denv, t1, t2, ConstraintSolverTypesNotInEqualityRelation(_, t1', t2', m, _, contextInfo), _) when typeEquiv g t1 t1' && typeEquiv g t2 t2' -> let t1, t2, tpcs = NicePrint.minimalStringsOfTwoTypes denv t1 t2 match contextInfo with | ContextInfo.IfExpression range when Range.equals range m -> os.Append(FSComp.SR.ifExpression(t1, t2)) |> ignore - | ContextInfo.CollectionElement (isArray, range) when Range.equals range m -> + | ContextInfo.CollectionElement (isArray, range) when Range.equals range m -> if isArray then os.Append(FSComp.SR.arrayElementHasWrongType(t1, t2)) |> ignore else @@ -688,10 +687,10 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | _ -> os.Append(ErrorFromAddingTypeEquation1E().Format t2 t1 tpcs) |> ignore | ErrorFromAddingTypeEquation(_, _, _, _, ((ConstraintSolverTypesNotInEqualityRelation (_, _, _, _, _, contextInfo) ) as e), _) - when (match contextInfo with ContextInfo.NoContext -> false | _ -> true) -> + when (match contextInfo with ContextInfo.NoContext -> false | _ -> true) -> OutputExceptionR os e - | ErrorFromAddingTypeEquation(_, _, _, _, ((ConstraintSolverTypesNotInSubsumptionRelation _ | ConstraintSolverError _ ) as e), _) -> + | ErrorFromAddingTypeEquation(_, _, _, _, ((ConstraintSolverTypesNotInSubsumptionRelation _ | ConstraintSolverError _ ) as e), _) -> OutputExceptionR os e | ErrorFromAddingTypeEquation(g, denv, t1, t2, e, _) -> @@ -701,7 +700,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa OutputExceptionR os e - | ErrorFromApplyingDefault(_, denv, _, defaultType, e, _) -> + | ErrorFromApplyingDefault(_, denv, _, defaultType, e, _) -> let defaultType = NicePrint.minimalStringOfType denv defaultType os.Append(ErrorFromApplyingDefault1E().Format defaultType) |> ignore OutputExceptionR os e @@ -709,7 +708,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | ErrorsFromAddingSubsumptionConstraint(g, denv, t1, t2, e, contextInfo, _) -> match contextInfo with - | ContextInfo.DowncastUsedInsteadOfUpcast isOperator -> + | ContextInfo.DowncastUsedInsteadOfUpcast isOperator -> let t1, t2, _ = NicePrint.minimalStringsOfTwoTypes denv t1 t2 if isOperator then os.Append(FSComp.SR.considerUpcastOperator(t1, t2) |> snd) |> ignore @@ -718,26 +717,26 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | _ -> if not (typeEquiv g t1 t2) then let t1, t2, tpcs = NicePrint.minimalStringsOfTwoTypes denv t1 t2 - if t1 <> (t2 + tpcs) then + if t1 <> (t2 + tpcs) then os.Append(ErrorsFromAddingSubsumptionConstraintE().Format t2 t1 tpcs) |> ignore else OutputExceptionR os e else OutputExceptionR os e - | UpperCaseIdentifierInPattern(_) -> + | UpperCaseIdentifierInPattern(_) -> os.Append(UpperCaseIdentifierInPatternE().Format) |> ignore - | NotUpperCaseConstructor(_) -> + | NotUpperCaseConstructor(_) -> os.Append(NotUpperCaseConstructorE().Format) |> ignore - | ErrorFromAddingConstraint(_, e, _) -> + | ErrorFromAddingConstraint(_, e, _) -> OutputExceptionR os e #if !NO_EXTENSIONTYPING | ExtensionTyping.ProvidedTypeResolutionNoRange e - | ExtensionTyping.ProvidedTypeResolution(_, e) -> + | ExtensionTyping.ProvidedTypeResolution(_, e) -> OutputExceptionR os e | :? TypeProviderError as e -> @@ -745,7 +744,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa #endif | UnresolvedOverloading(denv, callerArgs, failure, m) -> - + // extract eventual information (return type and type parameters) // from ConstraintTraitInfo let knownReturnType, genericParameterTypes = @@ -753,31 +752,31 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | NoOverloadsFound (cx=Some cx) | PossibleCandidates (cx=Some cx) -> cx.ReturnType, cx.ArgumentTypes | _ -> None, [] - + // prepare message parts (known arguments, known return type, known generic parameters) let argsMessage, returnType, genericParametersMessage = - + let retTy = knownReturnType |> Option.defaultValue (TType.TType_var (Typar.NewUnlinked())) - - let argRepr = + + let argRepr = callerArgs.ArgumentNamesAndTypes |> List.map (fun (name,tTy) -> tTy, {ArgReprInfo.Name = name |> Option.map (fun name -> Ident(name, range.Zero)); ArgReprInfo.Attribs = []}) - + let argsL,retTyL,genParamTysL = NicePrint.prettyLayoutsOfUnresolvedOverloading denv argRepr retTy genericParameterTypes - + match callerArgs.ArgumentNamesAndTypes with - | [] -> None, Layout.showL retTyL, Layout.showL genParamTysL + | [] -> None, LayoutRender.showL retTyL, LayoutRender.showL genParamTysL | items -> - let args = Layout.showL argsL + let args = LayoutRender.showL argsL let prefixMessage = match items with | [_] -> FSComp.SR.csNoOverloadsFoundArgumentsPrefixSingular | _ -> FSComp.SR.csNoOverloadsFoundArgumentsPrefixPlural Some (prefixMessage args) - , Layout.showL retTyL - , Layout.showL genParamTysL + , LayoutRender.showL retTyL + , LayoutRender.showL genParamTysL let knownReturnType = match knownReturnType with @@ -797,12 +796,12 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa let nameOrOneBasedIndexMessage = x.calledArg.NameOpt |> Option.map (fun n -> FSComp.SR.csOverloadCandidateNamedArgumentTypeMismatch n.idText) - |> Option.defaultValue (FSComp.SR.csOverloadCandidateIndexedArgumentTypeMismatch ((Lib.vsnd x.calledArg.Position) + 1)) //snd + |> Option.defaultValue (FSComp.SR.csOverloadCandidateIndexedArgumentTypeMismatch ((vsnd x.calledArg.Position) + 1)) //snd sprintf " // %s" nameOrOneBasedIndexMessage | _ -> "" - - (NicePrint.stringOfMethInfo x.amap m displayEnv x.methodSlot.Method) + paramInfo - + + (NicePrint.stringOfMethInfo x.infoReader m displayEnv x.methodSlot.Method) + paramInfo + let nl = System.Environment.NewLine let formatOverloads (overloads: OverloadInformation list) = overloads @@ -810,7 +809,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa |> List.sort |> List.map FSComp.SR.formatDashItem |> String.concat nl - + // assemble final message composing the parts let msg = let optionalParts = @@ -819,11 +818,11 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa |> String.concat (nl + nl) |> function | "" -> nl | result -> nl + nl + result + nl + nl - + match failure with | NoOverloadsFound (methodName, overloads, _) -> FSComp.SR.csNoOverloadsFound methodName - + optionalParts + + optionalParts + (FSComp.SR.csAvailableOverloads (formatOverloads overloads)) | PossibleCandidates (methodName, [], _) -> FSComp.SR.csMethodIsOverloaded methodName @@ -831,10 +830,10 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa FSComp.SR.csMethodIsOverloaded methodName + optionalParts + FSComp.SR.csCandidates (formatOverloads overloads) - + os.Append msg |> ignore - | UnresolvedConversionOperator(denv, fromTy, toTy, _) -> + | UnresolvedConversionOperator(denv, fromTy, toTy, _) -> let t1, t2, _tpcs = NicePrint.minimalStringsOfTwoTypes denv fromTy toTy os.Append(FSComp.SR.csTypeDoesNotSupportConversion(t1, t2)) |> ignore @@ -844,7 +843,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | BakedInMemberConstraintName(nm, _) -> os.Append(BakedInMemberConstraintNameE().Format nm) |> ignore - | StandardOperatorRedefinitionWarning(msg, _) -> + | StandardOperatorRedefinitionWarning(msg, _) -> os.Append msg |> ignore | BadEventTransformation(_) -> @@ -867,58 +866,58 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa else os.Append(FSComp.SR.notAFunction()) |> ignore - | TyconBadArgs(_, tcref, d, _) -> + | TyconBadArgs(_, tcref, d, _) -> let exp = tcref.TyparsNoRange.Length if exp = 0 then os.Append(FSComp.SR.buildUnexpectedTypeArgs(fullDisplayTextOfTyconRef tcref, d)) |> ignore else os.Append(TyconBadArgsE().Format (fullDisplayTextOfTyconRef tcref) exp d) |> ignore - | IndeterminateType(_) -> + | IndeterminateType(_) -> os.Append(IndeterminateTypeE().Format) |> ignore - | NameClash(nm, k1, nm1, _, k2, nm2, _) -> - if nm = nm1 && nm1 = nm2 && k1 = k2 then + | NameClash(nm, k1, nm1, _, k2, nm2, _) -> + if nm = nm1 && nm1 = nm2 && k1 = k2 then os.Append(NameClash1E().Format k1 nm1) |> ignore else os.Append(NameClash2E().Format k1 nm1 nm k2 nm2) |> ignore - | Duplicate(k, s, _) -> - if k = "member" then + | Duplicate(k, s, _) -> + if k = "member" then os.Append(Duplicate1E().Format (DecompileOpName s)) |> ignore - else + else os.Append(Duplicate2E().Format k (DecompileOpName s)) |> ignore | UndefinedName(_, k, id, suggestionsF) -> os.Append(k (DecompileOpName id.idText)) |> ignore suggestNames suggestionsF id.idText - | InternalUndefinedItemRef(f, smr, ccuName, s) -> + | InternalUndefinedItemRef(f, smr, ccuName, s) -> let _, errs = f(smr, ccuName, s) - os.Append errs |> ignore + os.Append errs |> ignore - | FieldNotMutable _ -> + | FieldNotMutable _ -> os.Append(FieldNotMutableE().Format) |> ignore - | FieldsFromDifferentTypes (_, fref1, fref2, _) -> + | FieldsFromDifferentTypes (_, fref1, fref2, _) -> os.Append(FieldsFromDifferentTypesE().Format fref1.FieldName fref2.FieldName) |> ignore - | VarBoundTwice id -> + | VarBoundTwice id -> os.Append(VarBoundTwiceE().Format (DecompileOpName id.idText)) |> ignore - | Recursion (denv, id, ty1, ty2, _) -> + | Recursion (denv, id, ty1, ty2, _) -> let t1, t2, tpcs = NicePrint.minimalStringsOfTwoTypes denv ty1 ty2 os.Append(RecursionE().Format (DecompileOpName id.idText) t1 t2 tpcs) |> ignore - | InvalidRuntimeCoercion(denv, ty1, ty2, _) -> + | InvalidRuntimeCoercion(denv, ty1, ty2, _) -> let t1, t2, tpcs = NicePrint.minimalStringsOfTwoTypes denv ty1 ty2 os.Append(InvalidRuntimeCoercionE().Format t1 t2 tpcs) |> ignore - | IndeterminateRuntimeCoercion(denv, ty1, ty2, _) -> + | IndeterminateRuntimeCoercion(denv, ty1, ty2, _) -> let t1, t2, _cxs = NicePrint.minimalStringsOfTwoTypes denv ty1 ty2 os.Append(IndeterminateRuntimeCoercionE().Format t1 t2) |> ignore - | IndeterminateStaticCoercion(denv, ty1, ty2, _) -> + | IndeterminateStaticCoercion(denv, ty1, ty2, _) -> // REVIEW: consider if we need to show _cxs (the type parameter constraints) let t1, t2, _cxs = NicePrint.minimalStringsOfTwoTypes denv ty1 ty2 os.Append(IndeterminateStaticCoercionE().Format t1 t2) |> ignore @@ -928,59 +927,59 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa let t1, t2, _cxs = NicePrint.minimalStringsOfTwoTypes denv ty1 ty2 os.Append(StaticCoercionShouldUseBoxE().Format t1 t2) |> ignore - | TypeIsImplicitlyAbstract(_) -> + | TypeIsImplicitlyAbstract(_) -> os.Append(TypeIsImplicitlyAbstractE().Format) |> ignore - | NonRigidTypar(denv, tpnmOpt, typarRange, ty1, ty, _) -> + | NonRigidTypar(denv, tpnmOpt, typarRange, ty1, ty, _) -> // REVIEW: consider if we need to show _cxs (the type parameter constraints) let (ty1, ty), _cxs = PrettyTypes.PrettifyTypePair denv.g (ty1, ty) - match tpnmOpt with - | None -> + match tpnmOpt with + | None -> os.Append(NonRigidTypar1E().Format (stringOfRange typarRange) (NicePrint.stringOfTy denv ty)) |> ignore - | Some tpnm -> - match ty1 with - | TType_measure _ -> + | Some tpnm -> + match ty1 with + | TType_measure _ -> os.Append(NonRigidTypar2E().Format tpnm (NicePrint.stringOfTy denv ty)) |> ignore - | _ -> + | _ -> os.Append(NonRigidTypar3E().Format tpnm (NicePrint.stringOfTy denv ty)) |> ignore - | SyntaxError (ctxt, _) -> + | SyntaxError (ctxt, _) -> let ctxt = unbox>(ctxt) - - let (|EndOfStructuredConstructToken|_|) token = + + let (|EndOfStructuredConstructToken|_|) token = match token with - | Parser.TOKEN_ODECLEND - | Parser.TOKEN_OBLOCKSEP - | Parser.TOKEN_OEND - | Parser.TOKEN_ORIGHT_BLOCK_END + | Parser.TOKEN_ODECLEND + | Parser.TOKEN_OBLOCKSEP + | Parser.TOKEN_OEND + | Parser.TOKEN_ORIGHT_BLOCK_END | Parser.TOKEN_OBLOCKEND | Parser.TOKEN_OBLOCKEND_COMING_SOON | Parser.TOKEN_OBLOCKEND_IS_HERE -> Some() | _ -> None - let tokenIdToText tid = - match tid with + let tokenIdToText tid = + match tid with | Parser.TOKEN_IDENT -> getErrorString("Parser.TOKEN.IDENT") - | Parser.TOKEN_BIGNUM - | Parser.TOKEN_INT8 - | Parser.TOKEN_UINT8 - | Parser.TOKEN_INT16 - | Parser.TOKEN_UINT16 - | Parser.TOKEN_INT32 - | Parser.TOKEN_UINT32 - | Parser.TOKEN_INT64 - | Parser.TOKEN_UINT64 - | Parser.TOKEN_UNATIVEINT + | Parser.TOKEN_BIGNUM + | Parser.TOKEN_INT8 + | Parser.TOKEN_UINT8 + | Parser.TOKEN_INT16 + | Parser.TOKEN_UINT16 + | Parser.TOKEN_INT32 + | Parser.TOKEN_UINT32 + | Parser.TOKEN_INT64 + | Parser.TOKEN_UINT64 + | Parser.TOKEN_UNATIVEINT | Parser.TOKEN_NATIVEINT -> getErrorString("Parser.TOKEN.INT") - | Parser.TOKEN_IEEE32 + | Parser.TOKEN_IEEE32 | Parser.TOKEN_IEEE64 -> getErrorString("Parser.TOKEN.FLOAT") | Parser.TOKEN_DECIMAL -> getErrorString("Parser.TOKEN.DECIMAL") | Parser.TOKEN_CHAR -> getErrorString("Parser.TOKEN.CHAR") - + | Parser.TOKEN_BASE -> getErrorString("Parser.TOKEN.BASE") | Parser.TOKEN_LPAREN_STAR_RPAREN -> getErrorString("Parser.TOKEN.LPAREN.STAR.RPAREN") | Parser.TOKEN_DOLLAR -> getErrorString("Parser.TOKEN.DOLLAR") | Parser.TOKEN_INFIX_STAR_STAR_OP -> getErrorString("Parser.TOKEN.INFIX.STAR.STAR.OP") | Parser.TOKEN_INFIX_COMPARE_OP -> getErrorString("Parser.TOKEN.INFIX.COMPARE.OP") - | Parser.TOKEN_COLON_GREATER -> getErrorString("Parser.TOKEN.COLON.GREATER") + | Parser.TOKEN_COLON_GREATER -> getErrorString("Parser.TOKEN.COLON.GREATER") | Parser.TOKEN_COLON_COLON ->getErrorString("Parser.TOKEN.COLON.COLON") | Parser.TOKEN_PERCENT_OP -> getErrorString("Parser.TOKEN.PERCENT.OP") | Parser.TOKEN_INFIX_AT_HAT_OP -> getErrorString("Parser.TOKEN.INFIX.AT.HAT.OP") @@ -1011,7 +1010,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | Parser.TOKEN_GREATER_BAR_RBRACK -> getErrorString("Parser.TOKEN.GREATER.BAR.RBRACK") | Parser.TOKEN_MINUS -> getErrorString("Parser.TOKEN.MINUS") | Parser.TOKEN_ADJACENT_PREFIX_OP -> getErrorString("Parser.TOKEN.ADJACENT.PREFIX.OP") - | Parser.TOKEN_FUNKY_OPERATOR_NAME -> getErrorString("Parser.TOKEN.FUNKY.OPERATOR.NAME") + | Parser.TOKEN_FUNKY_OPERATOR_NAME -> getErrorString("Parser.TOKEN.FUNKY.OPERATOR.NAME") | Parser.TOKEN_COMMA-> getErrorString("Parser.TOKEN.COMMA") | Parser.TOKEN_DOT -> getErrorString("Parser.TOKEN.DOT") | Parser.TOKEN_BAR-> getErrorString("Parser.TOKEN.BAR") @@ -1030,7 +1029,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | Parser.TOKEN_BAR_RBRACK -> getErrorString("Parser.TOKEN.BAR.RBRACK") | Parser.TOKEN_BAR_RBRACE -> getErrorString("Parser.TOKEN.BAR.RBRACE") | Parser.TOKEN_GREATER_RBRACK -> getErrorString("Parser.TOKEN.GREATER.RBRACK") - | Parser.TOKEN_RQUOTE_DOT _ + | Parser.TOKEN_RQUOTE_DOT _ | Parser.TOKEN_RQUOTE -> getErrorString("Parser.TOKEN.RQUOTE") | Parser.TOKEN_RBRACK -> getErrorString("Parser.TOKEN.RBRACK") | Parser.TOKEN_RBRACE | Parser.TOKEN_RBRACE_COMING_SOON | Parser.TOKEN_RBRACE_IS_HERE -> getErrorString("Parser.TOKEN.RBRACE") @@ -1049,17 +1048,17 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | Parser.TOKEN_MEMBER -> getErrorString("Parser.TOKEN.MEMBER") | Parser.TOKEN_STATIC -> getErrorString("Parser.TOKEN.STATIC") | Parser.TOKEN_NAMESPACE-> getErrorString("Parser.TOKEN.NAMESPACE") - | Parser.TOKEN_OBLOCKBEGIN -> getErrorString("Parser.TOKEN.OBLOCKBEGIN") - | EndOfStructuredConstructToken -> getErrorString("Parser.TOKEN.OBLOCKEND") - | Parser.TOKEN_THEN + | Parser.TOKEN_OBLOCKBEGIN -> getErrorString("Parser.TOKEN.OBLOCKBEGIN") + | EndOfStructuredConstructToken -> getErrorString("Parser.TOKEN.OBLOCKEND") + | Parser.TOKEN_THEN | Parser.TOKEN_OTHEN -> getErrorString("Parser.TOKEN.OTHEN") | Parser.TOKEN_ELSE | Parser.TOKEN_OELSE -> getErrorString("Parser.TOKEN.OELSE") - | Parser.TOKEN_LET(_) + | Parser.TOKEN_LET(_) | Parser.TOKEN_OLET(_) -> getErrorString("Parser.TOKEN.OLET") - | Parser.TOKEN_OBINDER + | Parser.TOKEN_OBINDER | Parser.TOKEN_BINDER -> getErrorString("Parser.TOKEN.BINDER") - | Parser.TOKEN_OAND_BANG + | Parser.TOKEN_OAND_BANG | Parser.TOKEN_AND_BANG -> getErrorString("Parser.TOKEN.AND.BANG") | Parser.TOKEN_ODO -> getErrorString("Parser.TOKEN.ODO") | Parser.TOKEN_OWITH -> getErrorString("Parser.TOKEN.OWITH") @@ -1067,7 +1066,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | Parser.TOKEN_OFUN -> getErrorString("Parser.TOKEN.OFUN") | Parser.TOKEN_ORESET -> getErrorString("Parser.TOKEN.ORESET") | Parser.TOKEN_ODUMMY -> getErrorString("Parser.TOKEN.ODUMMY") - | Parser.TOKEN_DO_BANG + | Parser.TOKEN_DO_BANG | Parser.TOKEN_ODO_BANG -> getErrorString("Parser.TOKEN.ODO.BANG") | Parser.TOKEN_YIELD -> getErrorString("Parser.TOKEN.YIELD") | Parser.TOKEN_YIELD_BANG -> getErrorString("Parser.TOKEN.YIELD.BANG") @@ -1125,9 +1124,9 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | Parser.TOKEN_BEGIN -> getErrorString("Parser.TOKEN.BEGIN") | Parser.TOKEN_END -> getErrorString("Parser.TOKEN.END") | Parser.TOKEN_HASH_LIGHT - | Parser.TOKEN_HASH_LINE - | Parser.TOKEN_HASH_IF - | Parser.TOKEN_HASH_ELSE + | Parser.TOKEN_HASH_LINE + | Parser.TOKEN_HASH_IF + | Parser.TOKEN_HASH_ELSE | Parser.TOKEN_HASH_ENDIF -> getErrorString("Parser.TOKEN.HASH.ENDIF") | Parser.TOKEN_INACTIVECODE -> getErrorString("Parser.TOKEN.INACTIVECODE") | Parser.TOKEN_LEX_FAILURE-> getErrorString("Parser.TOKEN.LEX.FAILURE") @@ -1145,7 +1144,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | Parser.TOKEN_INTERP_STRING_BEGIN_PART -> getErrorString("Parser.TOKEN.INTERP.STRING.BEGIN.PART") | Parser.TOKEN_INTERP_STRING_PART -> getErrorString("Parser.TOKEN.INTERP.STRING.PART") | Parser.TOKEN_INTERP_STRING_END -> getErrorString("Parser.TOKEN.INTERP.STRING.END") - | unknown -> + | unknown -> Debug.Assert(false, "unknown token tag") let result = sprintf "%+A" unknown Debug.Assert(false, result) @@ -1153,25 +1152,25 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa #if DEBUG if showParserStackOnParseError then - printfn "parser stack:" - for rps in ctxt.ReducibleProductions do - printfn " ----" + printfn "parser stack:" + for rps in ctxt.ReducibleProductions do + printfn " ----" //printfn " state %d" state for rp in rps do printfn " non-terminal %+A: ... " (Parser.prodIdxToNonTerminal rp) #endif - match ctxt.CurrentToken with + match ctxt.CurrentToken with | None -> os.Append(UnexpectedEndOfInputE().Format) |> ignore - | Some token -> - match (token |> Parser.tagOfToken |> Parser.tokenTagToTokenId), token with + | Some token -> + match (token |> Parser.tagOfToken |> Parser.tokenTagToTokenId), token with | EndOfStructuredConstructToken, _ -> os.Append(OBlockEndSentenceE().Format) |> ignore | Parser.TOKEN_LEX_FAILURE, Parser.LEX_FAILURE str -> Printf.bprintf os "%s" str (* Fix bug://2431 *) | token, _ -> os.Append(UnexpectedE().Format (token |> tokenIdToText)) |> ignore (* Search for a state producing a single recognized non-terminal in the states on the stack *) let foundInContext = - + (* Merge a bunch of expression non terminals *) let (|NONTERM_Category_Expr|_|) = function | Parser.NONTERM_argExpr|Parser.NONTERM_minusExpr|Parser.NONTERM_parenExpr|Parser.NONTERM_atomicExpr @@ -1179,17 +1178,17 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | Parser.NONTERM_typedSeqExprBlock | Parser.NONTERM_interactiveExpr -> Some() | _ -> None - + (* Merge a bunch of pattern non terminals *) - let (|NONTERM_Category_Pattern|_|) = function - | Parser.NONTERM_constrPattern|Parser.NONTERM_parenPattern|Parser.NONTERM_atomicPattern -> Some() + let (|NONTERM_Category_Pattern|_|) = function + | Parser.NONTERM_constrPattern|Parser.NONTERM_parenPattern|Parser.NONTERM_atomicPattern -> Some() | _ -> None - + (* Merge a bunch of if/then/else non terminals *) let (|NONTERM_Category_IfThenElse|_|) = function | Parser.NONTERM_ifExprThen|Parser.NONTERM_ifExprElifs|Parser.NONTERM_ifExprCases -> Some() | _ -> None - + (* Merge a bunch of non terminals *) let (|NONTERM_Category_SignatureFile|_|) = function | Parser.NONTERM_signatureFile|Parser.NONTERM_moduleSpfn|Parser.NONTERM_moduleSpfns -> Some() @@ -1201,7 +1200,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | Parser.NONTERM_fileModuleImpl|Parser.NONTERM_moduleDefn|Parser.NONTERM_interactiveDefns |Parser.NONTERM_moduleDefns|Parser.NONTERM_moduleDefnsOrExpr -> Some() | _ -> None - + let (|NONTERM_Category_Type|_|) = function | Parser.NONTERM_typ|Parser.NONTERM_tupleType -> Some() | _ -> None @@ -1209,24 +1208,24 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa let (|NONTERM_Category_Interaction|_|) = function | Parser.NONTERM_interactiveItemsTerminator|Parser.NONTERM_interaction|Parser.NONTERM__startinteraction -> Some() | _ -> None - - + + // Canonicalize the categories and check for a unique category - ctxt.ReducibleProductions |> List.exists (fun prods -> - match prods - |> List.map Parser.prodIdxToNonTerminal - |> List.map (function + ctxt.ReducibleProductions |> List.exists (fun prods -> + match prods + |> List.map Parser.prodIdxToNonTerminal + |> List.map (function | NONTERM_Category_Type -> Parser.NONTERM_typ - | NONTERM_Category_Expr -> Parser.NONTERM_declExpr - | NONTERM_Category_Pattern -> Parser.NONTERM_atomicPattern + | NONTERM_Category_Expr -> Parser.NONTERM_declExpr + | NONTERM_Category_Pattern -> Parser.NONTERM_atomicPattern | NONTERM_Category_IfThenElse -> Parser.NONTERM_ifExprThen | NONTERM_Category_SignatureFile -> Parser.NONTERM_signatureFile | NONTERM_Category_ImplementationFile -> Parser.NONTERM_implementationFile | NONTERM_Category_Definition -> Parser.NONTERM_moduleDefn | NONTERM_Category_Interaction -> Parser.NONTERM_interaction | nt -> nt) - |> Set.ofList - |> Set.toList with + |> Set.ofList + |> Set.toList with | [Parser.NONTERM_interaction] -> os.Append(NONTERM_interactionE().Format) |> ignore; true | [Parser.NONTERM_hashDirective] -> os.Append(NONTERM_hashDirectiveE().Format) |> ignore; true | [Parser.NONTERM_fieldDecl] -> os.Append(NONTERM_fieldDeclE().Format) |> ignore; true @@ -1261,9 +1260,9 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | [NONTERM_Category_Expr] -> os.Append(NONTERM_Category_ExprE().Format) |> ignore; true | [NONTERM_Category_Type] -> os.Append(NONTERM_Category_TypeE().Format) |> ignore; true | [Parser.NONTERM_typeArgsActual] -> os.Append(NONTERM_typeArgsActualE().Format) |> ignore; true - | _ -> + | _ -> false) - + #if DEBUG if not foundInContext then Printf.bprintf os ". (no 'in' context found: %+A)" (List.map (List.map Parser.prodIdxToNonTerminal) ctxt.ReducibleProductions) @@ -1271,18 +1270,18 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa foundInContext |> ignore // suppress unused variable warning in RELEASE #endif let fix (s: string) = s.Replace(SR.GetString("FixKeyword"), "").Replace(SR.GetString("FixSymbol"), "").Replace(SR.GetString("FixReplace"), "") - match (ctxt.ShiftTokens - |> List.map Parser.tokenTagToTokenId - |> List.filter (function Parser.TOKEN_error | Parser.TOKEN_EOF -> false | _ -> true) - |> List.map tokenIdToText - |> Set.ofList - |> Set.toList) with + match (ctxt.ShiftTokens + |> List.map Parser.tokenTagToTokenId + |> List.filter (function Parser.TOKEN_error | Parser.TOKEN_EOF -> false | _ -> true) + |> List.map tokenIdToText + |> Set.ofList + |> Set.toList) with | [tokenName1] -> os.Append(TokenName1E().Format (fix tokenName1)) |> ignore | [tokenName1;tokenName2] -> os.Append(TokenName1TokenName2E().Format (fix tokenName1) (fix tokenName2)) |> ignore | [tokenName1;tokenName2;tokenName3] -> os.Append(TokenName1TokenName2TokenName3E().Format (fix tokenName1) (fix tokenName2) (fix tokenName3)) |> ignore | _ -> () (* - Printf.bprintf os ".\n\n state = %A\n token = %A\n expect (shift) %A\n expect (reduce) %A\n prods=%A\n non terminals: %A" + Printf.bprintf os ".\n\n state = %A\n token = %A\n expect (shift) %A\n expect (reduce) %A\n prods=%A\n non terminals: %A" ctxt.StateStack ctxt.CurrentToken (List.map Parser.tokenTagToTokenId ctxt.ShiftTokens) @@ -1291,39 +1290,39 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa (List.mapSquared Parser.prodIdxToNonTerminal ctxt.ReducibleProductions) *) - | RuntimeCoercionSourceSealed(denv, ty, _) -> + | RuntimeCoercionSourceSealed(denv, ty, _) -> // REVIEW: consider if we need to show _cxs (the type parameter constraints) let ty, _cxs = PrettyTypes.PrettifyType denv.g ty - if isTyparTy denv.g ty + if isTyparTy denv.g ty then os.Append(RuntimeCoercionSourceSealed1E().Format (NicePrint.stringOfTy denv ty)) |> ignore else os.Append(RuntimeCoercionSourceSealed2E().Format (NicePrint.stringOfTy denv ty)) |> ignore - | CoercionTargetSealed(denv, ty, _) -> + | CoercionTargetSealed(denv, ty, _) -> // REVIEW: consider if we need to show _cxs (the type parameter constraints) let ty, _cxs= PrettyTypes.PrettifyType denv.g ty os.Append(CoercionTargetSealedE().Format (NicePrint.stringOfTy denv ty)) |> ignore - | UpcastUnnecessary(_) -> + | UpcastUnnecessary(_) -> os.Append(UpcastUnnecessaryE().Format) |> ignore - | TypeTestUnnecessary(_) -> + | TypeTestUnnecessary(_) -> os.Append(TypeTestUnnecessaryE().Format) |> ignore - | QuotationTranslator.IgnoringPartOfQuotedTermWarning (msg, _) -> + | QuotationTranslator.IgnoringPartOfQuotedTermWarning (msg, _) -> Printf.bprintf os "%s" msg | OverrideDoesntOverride(denv, impl, minfoVirtOpt, g, amap, m) -> let sig1 = DispatchSlotChecking.FormatOverride denv impl - match minfoVirtOpt with - | None -> + match minfoVirtOpt with + | None -> os.Append(OverrideDoesntOverride1E().Format sig1) |> ignore | Some minfoVirt -> - // https://github.com/Microsoft/visualfsharp/issues/35 + // https://github.com/Microsoft/visualfsharp/issues/35 // Improve error message when attempting to override generic return type with unit: // we need to check if unit was used as a type argument let rec hasUnitTType_app (types: TType list) = match types with - | TType_app (maybeUnit, []) :: ts -> + | TType_app (maybeUnit, []) :: ts -> match maybeUnit.TypeAbbrev with | Some ttype when isUnitTy g ttype -> true | _ -> hasUnitTType_app ts @@ -1334,42 +1333,44 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | TType_app (t, types) when t.IsFSharpInterfaceTycon && hasUnitTType_app types -> // match abstract member with 'unit' passed as generic argument os.Append(OverrideDoesntOverride4E().Format sig1) |> ignore - | _ -> + | _ -> os.Append(OverrideDoesntOverride2E().Format sig1) |> ignore let sig2 = DispatchSlotChecking.FormatMethInfoSig g amap m denv minfoVirt - if sig1 <> sig2 then + if sig1 <> sig2 then os.Append(OverrideDoesntOverride3E().Format sig2) |> ignore | UnionCaseWrongArguments (_, n1, n2, _) -> os.Append(UnionCaseWrongArgumentsE().Format n2 n1) |> ignore - | UnionPatternsBindDifferentNames _ -> + | UnionPatternsBindDifferentNames _ -> os.Append(UnionPatternsBindDifferentNamesE().Format) |> ignore - | ValueNotContained (denv, mref, implVal, sigVal, f) -> - let text1, text2 = NicePrint.minimalStringsOfTwoValues denv implVal sigVal + | ValueNotContained (denv, infoReader, mref, implVal, sigVal, f) -> + let text1, text2 = NicePrint.minimalStringsOfTwoValues denv infoReader (mkLocalValRef implVal) (mkLocalValRef sigVal) os.Append(f((fullDisplayTextOfModRef mref), text1, text2)) |> ignore - | ConstrNotContained (denv, v1, v2, f) -> - os.Append(f((NicePrint.stringOfUnionCase denv v1), (NicePrint.stringOfUnionCase denv v2))) |> ignore + | ConstrNotContained (denv, infoReader, enclosingTycon, v1, v2, f) -> + let enclosingTcref = mkLocalEntityRef enclosingTycon + os.Append(f((NicePrint.stringOfUnionCase denv infoReader enclosingTcref v1), (NicePrint.stringOfUnionCase denv infoReader enclosingTcref v2))) |> ignore - | ExnconstrNotContained (denv, v1, v2, f) -> - os.Append(f((NicePrint.stringOfExnDef denv v1), (NicePrint.stringOfExnDef denv v2))) |> ignore + | ExnconstrNotContained (denv, infoReader, v1, v2, f) -> + os.Append(f((NicePrint.stringOfExnDef denv infoReader (mkLocalEntityRef v1)), (NicePrint.stringOfExnDef denv infoReader (mkLocalEntityRef v2)))) |> ignore - | FieldNotContained (denv, v1, v2, f) -> - os.Append(f((NicePrint.stringOfRecdField denv v1), (NicePrint.stringOfRecdField denv v2))) |> ignore + | FieldNotContained (denv, infoReader, enclosingTycon, v1, v2, f) -> + let enclosingTcref = mkLocalEntityRef enclosingTycon + os.Append(f((NicePrint.stringOfRecdField denv infoReader enclosingTcref v1), (NicePrint.stringOfRecdField denv infoReader enclosingTcref v2))) |> ignore | RequiredButNotSpecified (_, mref, k, name, _) -> let nsb = new System.Text.StringBuilder() name nsb; os.Append(RequiredButNotSpecifiedE().Format (fullDisplayTextOfModRef mref) k (nsb.ToString())) |> ignore - | UseOfAddressOfOperator _ -> + | UseOfAddressOfOperator _ -> os.Append(UseOfAddressOfOperatorE().Format) |> ignore | DefensiveCopyWarning(s, _) -> os.Append(DefensiveCopyWarningE().Format s) |> ignore - | DeprecatedThreadStaticBindingWarning(_) -> + | DeprecatedThreadStaticBindingWarning(_) -> os.Append(DeprecatedThreadStaticBindingWarningE().Format) |> ignore | FunctionValueUnexpected (denv, ty, _) -> @@ -1394,34 +1395,34 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | UnitTypeExpectedWithPossibleAssignment (denv, ty, isAlreadyMutable, bindingName, _) -> let ty, _cxs = PrettyTypes.PrettifyType denv.g ty - let warningText = + let warningText = if isAlreadyMutable then UnitTypeExpectedWithPossibleAssignmentToMutableE().Format (NicePrint.stringOfTy denv ty) bindingName else UnitTypeExpectedWithPossibleAssignmentE().Format (NicePrint.stringOfTy denv ty) bindingName os.Append warningText |> ignore - | RecursiveUseCheckedAtRuntime _ -> + | RecursiveUseCheckedAtRuntime _ -> os.Append(RecursiveUseCheckedAtRuntimeE().Format) |> ignore - | LetRecUnsound (_, [v], _) -> + | LetRecUnsound (_, [v], _) -> os.Append(LetRecUnsound1E().Format v.DisplayName) |> ignore - | LetRecUnsound (_, path, _) -> + | LetRecUnsound (_, path, _) -> let bos = new System.Text.StringBuilder() - (path.Tail @ [path.Head]) |> List.iter (fun (v: ValRef) -> bos.Append(LetRecUnsoundInnerE().Format v.DisplayName) |> ignore) + (path.Tail @ [path.Head]) |> List.iter (fun (v: ValRef) -> bos.Append(LetRecUnsoundInnerE().Format v.DisplayName) |> ignore) os.Append(LetRecUnsound2E().Format (List.head path).DisplayName (bos.ToString())) |> ignore - | LetRecEvaluatedOutOfOrder (_, _, _, _) -> + | LetRecEvaluatedOutOfOrder (_, _, _, _) -> os.Append(LetRecEvaluatedOutOfOrderE().Format) |> ignore - | LetRecCheckedAtRuntime _ -> + | LetRecCheckedAtRuntime _ -> os.Append(LetRecCheckedAtRuntimeE().Format) |> ignore - | SelfRefObjCtor(false, _) -> + | SelfRefObjCtor(false, _) -> os.Append(SelfRefObjCtor1E().Format) |> ignore - | SelfRefObjCtor(true, _) -> + | SelfRefObjCtor(true, _) -> os.Append(SelfRefObjCtor2E().Format) |> ignore | VirtualAugmentationOnNullValuedType(_) -> @@ -1437,27 +1438,25 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa // REVIEW: consider if we need to show _cxs (the type parameter constraints) let t1, t2, _cxs = NicePrint.minimalStringsOfTwoTypes denv ty1 ty2 os.Append(NonUniqueInferredAbstractSlot2E().Format) |> ignore - if t1 <> t2 then + if t1 <> t2 then os.Append(NonUniqueInferredAbstractSlot3E().Format t1 t2) |> ignore os.Append(NonUniqueInferredAbstractSlot4E().Format) |> ignore | Error ((_, s), _) -> os.Append s |> ignore - | ErrorWithSuggestions ((_, s), _, idText, suggestionF) -> + | ErrorWithSuggestions ((_, s), _, idText, suggestionF) -> os.Append(DecompileOpName s) |> ignore suggestNames suggestionF idText - | NumberedError ((_, s), _) -> os.Append s |> ignore - - | InternalError (s, _) + | InternalError (s, _) - | InvalidArgument s + | InvalidArgument s | Failure s as exn -> ignore exn // use the argument, even in non DEBUG let f1 = SR.GetString("Failure1") - let f2 = SR.GetString("Failure2") - match s with + let f2 = SR.GetString("Failure2") + match s with | f when f = f1 -> os.Append(Failure3E().Format s) |> ignore | f when f = f2 -> os.Append(Failure3E().Format s) |> ignore | _ -> os.Append(Failure4E().Format s) |> ignore @@ -1468,13 +1467,13 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | WrappedError (exn, _) -> OutputExceptionR os exn - | PatternMatchCompilation.MatchIncomplete (isComp, cexOpt, _) -> + | PatternMatchCompilation.MatchIncomplete (isComp, cexOpt, _) -> os.Append(MatchIncomplete1E().Format) |> ignore - match cexOpt with + match cexOpt with | None -> () | Some (cex, false) -> os.Append(MatchIncomplete2E().Format cex) |> ignore | Some (cex, true) -> os.Append(MatchIncomplete3E().Format cex) |> ignore - if isComp then + if isComp then os.Append(MatchIncomplete4E().Format) |> ignore | PatternMatchCompilation.EnumMatchIncomplete (isComp, cexOpt, _) -> @@ -1492,9 +1491,9 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | ValNotLocal _ -> os.Append(ValNotLocalE().Format) |> ignore - | ObsoleteError (s, _) + | ObsoleteError (s, _) - | ObsoleteWarning (s, _) -> + | ObsoleteWarning (s, _) -> os.Append(Obsolete1E().Format) |> ignore if s <> "" then os.Append(Obsolete2E().Format s) |> ignore @@ -1510,42 +1509,42 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | MissingFields(sl, _) -> os.Append(MissingFieldsE().Format (String.concat "," sl + ".")) |> ignore - | ValueRestriction(denv, hassig, v, _, _) -> + | ValueRestriction(denv, infoReader, hassig, v, _, _) -> let denv = { denv with showImperativeTyparAnnotations=true } let tau = v.TauType - if hassig then - if isFunTy denv.g tau && (arityOfVal v).HasNoArgs then + if hassig then + if isFunTy denv.g tau && (arityOfVal v).HasNoArgs then os.Append(ValueRestriction1E().Format - v.DisplayName - (NicePrint.stringOfQualifiedValOrMember denv v) + v.DisplayName + (NicePrint.stringOfQualifiedValOrMember denv infoReader (mkLocalValRef v)) v.DisplayName) |> ignore else os.Append(ValueRestriction2E().Format - v.DisplayName - (NicePrint.stringOfQualifiedValOrMember denv v) + v.DisplayName + (NicePrint.stringOfQualifiedValOrMember denv infoReader (mkLocalValRef v)) v.DisplayName) |> ignore else - match v.MemberInfo with - | Some membInfo when - begin match membInfo.MemberFlags.MemberKind with - | MemberKind.PropertyGet - | MemberKind.PropertySet - | MemberKind.Constructor -> true (* can't infer extra polymorphism *) + match v.MemberInfo with + | Some membInfo when + begin match membInfo.MemberFlags.MemberKind with + | SynMemberKind.PropertyGet + | SynMemberKind.PropertySet + | SynMemberKind.Constructor -> true (* can't infer extra polymorphism *) | _ -> false (* can infer extra polymorphism *) - end -> - os.Append(ValueRestriction3E().Format (NicePrint.stringOfQualifiedValOrMember denv v)) |> ignore - | _ -> - if isFunTy denv.g tau && (arityOfVal v).HasNoArgs then + end -> + os.Append(ValueRestriction3E().Format (NicePrint.stringOfQualifiedValOrMember denv infoReader (mkLocalValRef v))) |> ignore + | _ -> + if isFunTy denv.g tau && (arityOfVal v).HasNoArgs then os.Append(ValueRestriction4E().Format v.DisplayName - (NicePrint.stringOfQualifiedValOrMember denv v) + (NicePrint.stringOfQualifiedValOrMember denv infoReader (mkLocalValRef v)) v.DisplayName) |> ignore else os.Append(ValueRestriction5E().Format v.DisplayName - (NicePrint.stringOfQualifiedValOrMember denv v) + (NicePrint.stringOfQualifiedValOrMember denv infoReader (mkLocalValRef v)) v.DisplayName) |> ignore - + | Parsing.RecoverableParseError -> os.Append(RecoverableParseErrorE().Format) |> ignore @@ -1566,7 +1565,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | UnresolvedReferenceNoRange assemblyName -> os.Append(UnresolvedReferenceNoRangeE().Format assemblyName) |> ignore - | UnresolvedPathReference(assemblyName, pathname, _) + | UnresolvedPathReference(assemblyName, pathname, _) | UnresolvedPathReferenceNoRange(assemblyName, pathname) -> os.Append(UnresolvedPathReferenceNoRangeE().Format pathname assemblyName) |> ignore @@ -1595,7 +1594,7 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | HashDirectiveNotAllowedInNonScript(_) -> os.Append(HashDirectiveNotAllowedInNonScriptE().Format) |> ignore - | FileNameNotResolved(filename, locations, _) -> + | FileNameNotResolved(filename, locations, _) -> os.Append(FileNameNotResolvedE().Format filename locations) |> ignore | AssemblyNotResolved(originalName, _) -> @@ -1604,10 +1603,10 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | IllegalFileNameChar(fileName, invalidChar) -> os.Append(FSComp.SR.buildUnexpectedFileNameCharacter(fileName, string invalidChar)|>snd) |> ignore - | HashLoadedSourceHasIssues(warnings, errors, _) -> + | HashLoadedSourceHasIssues(warnings, errors, _) -> let Emit(l: exn list) = OutputExceptionR os (List.head l) - if errors=[] then + if errors=[] then os.Append(HashLoadedSourceHasIssues1E().Format) |> ignore Emit warnings else @@ -1617,21 +1616,21 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | HashLoadedScriptConsideredSource(_) -> os.Append(HashLoadedScriptConsideredSourceE().Format) |> ignore - | InvalidInternalsVisibleToAssemblyName(badName, fileNameOption) -> - match fileNameOption with + | InvalidInternalsVisibleToAssemblyName(badName, fileNameOption) -> + match fileNameOption with | Some file -> os.Append(InvalidInternalsVisibleToAssemblyName1E().Format badName file) |> ignore | None -> os.Append(InvalidInternalsVisibleToAssemblyName2E().Format badName) |> ignore | LoadedSourceNotFoundIgnoring(filename, _) -> os.Append(LoadedSourceNotFoundIgnoringE().Format filename) |> ignore - | MSBuildReferenceResolutionWarning(code, message, _) + | MSBuildReferenceResolutionWarning(code, message, _) - | MSBuildReferenceResolutionError(code, message, _) -> + | MSBuildReferenceResolutionError(code, message, _) -> os.Append(MSBuildReferenceResolutionErrorE().Format message code) |> ignore // Strip TargetInvocationException wrappers - | :? System.Reflection.TargetInvocationException as e -> + | :? System.Reflection.TargetInvocationException as e -> OutputExceptionR os e.InnerException | :? FileNotFoundException as e -> Printf.bprintf os "%s" e.Message @@ -1646,11 +1645,11 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | :? System.UnauthorizedAccessException as e -> Printf.bprintf os "%s" e.Message - | e -> + | e -> os.Append(TargetInvocationExceptionWrapperE().Format e.Message) |> ignore #if DEBUG Printf.bprintf os "\nStack Trace\n%s\n" (e.ToString()) - if !showAssertForUnexpectedException then + if !showAssertForUnexpectedException then System.Diagnostics.Debug.Assert(false, sprintf "Unknown exception seen in compiler: %s" (e.ToString())) #endif @@ -1663,20 +1662,20 @@ let OutputPhasedDiagnostic (os: System.Text.StringBuilder) (err: PhasedDiagnosti OutputPhasedErrorR buf err suggestNames let s = if flattenErrors then ErrorLogger.NormalizeErrorString (buf.ToString()) else buf.ToString() - + os.Append s |> ignore let SanitizeFileName fileName implicitIncludeDir = // The assert below is almost ok, but it fires in two cases: // - fsi.exe sometimes passes "stdin" as a dummy filename - // - if you have a #line directive, e.g. + // - if you have a #line directive, e.g. // # 1000 "Line01.fs" // then it also asserts. But these are edge cases that can be fixed later, e.g. in bug 4651. //System.Diagnostics.Debug.Assert(FileSystem.IsPathRootedShim fileName, sprintf "filename should be absolute: '%s'" fileName) try let fullPath = FileSystem.GetFullPathShim fileName let currentDir = implicitIncludeDir - + // if the file name is not rooted in the current directory, return the full path if not(fullPath.StartsWithOrdinal currentDir) then fullPath @@ -1694,58 +1693,58 @@ type DiagnosticLocation = IsEmpty: bool } [] -type DiagnosticCanonicalInformation = +type DiagnosticCanonicalInformation = { ErrorNumber: int Subcategory: string TextRepresentation: string } [] -type DiagnosticDetailedInfo = +type DiagnosticDetailedInfo = { Location: DiagnosticLocation option Canonical: DiagnosticCanonicalInformation Message: string } [] -type Diagnostic = - | Short of bool * string - | Long of bool * DiagnosticDetailedInfo +type Diagnostic = + | Short of FSharpDiagnosticSeverity * string + | Long of FSharpDiagnosticSeverity * DiagnosticDetailedInfo /// returns sequence that contains Diagnostic for the given error + Diagnostic for all related errors -let CollectDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorStyle, isError, err: PhasedDiagnostic, suggestNames: bool) = +let CollectDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorStyle, severity: FSharpDiagnosticSeverity, err: PhasedDiagnostic, suggestNames: bool) = let outputWhere (showFullPaths, errorStyle) m: DiagnosticLocation = if Range.equals m rangeStartup || Range.equals m rangeCmdArgs then { Range = m; TextRepresentation = ""; IsEmpty = true; File = "" } else let file = m.FileName - let file = if showFullPaths then - Filename.fullpath implicitIncludeDir file - else + let file = if showFullPaths then + FileSystem.GetFullFilePathInDirectoryShim implicitIncludeDir file + else SanitizeFileName file implicitIncludeDir - let text, m, file = + let text, m, file = match errorStyle with - | ErrorStyle.EmacsErrors -> + | ErrorStyle.EmacsErrors -> let file = file.Replace("\\", "/") (sprintf "File \"%s\", line %d, characters %d-%d: " file m.StartLine m.StartColumn m.EndColumn), m, file // We're adjusting the columns here to be 1-based - both for parity with C# and for MSBuild, which assumes 1-based columns for error output - | ErrorStyle.DefaultErrors -> + | ErrorStyle.DefaultErrors -> let file = file.Replace('/', System.IO.Path.DirectorySeparatorChar) let m = mkRange m.FileName (mkPos m.StartLine (m.StartColumn + 1)) m.End (sprintf "%s(%d,%d): " file m.StartLine m.StartColumn), m, file // We may also want to change TestErrors to be 1-based - | ErrorStyle.TestErrors -> + | ErrorStyle.TestErrors -> let file = file.Replace("/", "\\") let m = mkRange m.FileName (mkPos m.StartLine (m.StartColumn + 1)) (mkPos m.EndLine (m.EndColumn + 1) ) sprintf "%s(%d,%d-%d,%d): " file m.StartLine m.StartColumn m.EndLine m.EndColumn, m, file - | ErrorStyle.GccErrors -> + | ErrorStyle.GccErrors -> let file = file.Replace('/', System.IO.Path.DirectorySeparatorChar) let m = mkRange m.FileName (mkPos m.StartLine (m.StartColumn + 1)) (mkPos m.EndLine (m.EndColumn + 1) ) sprintf "%s:%d:%d: " file m.StartLine m.StartColumn, m, file // Here, we want the complete range information so Project Systems can generate proper squiggles - | ErrorStyle.VSErrors -> + | ErrorStyle.VSErrors -> // Show prefix only for real files. Otherwise, we just want a truncated error like: // parse error FS0031: blah blah if not (Range.equals m range0) && not (Range.equals m rangeStartup) && not (Range.equals m rangeCmdArgs) then @@ -1756,59 +1755,65 @@ let CollectDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorSt "", m, file { Range = m; TextRepresentation = text; IsEmpty = false; File = file } - match err.Exception with - | ReportedError _ -> - assert ("" = "Unexpected ReportedError") // this should never happen + match err.Exception with + | ReportedError _ -> + assert ("" = "Unexpected ReportedError") // this should never happen Seq.empty - | StopProcessing -> - assert ("" = "Unexpected StopProcessing") // this should never happen + | StopProcessing -> + assert ("" = "Unexpected StopProcessing") // this should never happen Seq.empty - | _ -> + | _ -> let errors = ResizeArray() let report err = - let OutputWhere err = - match GetRangeOfDiagnostic err with + let OutputWhere err = + match GetRangeOfDiagnostic err with | Some m -> Some(outputWhere (showFullPaths, errorStyle) m) | None -> None - let OutputCanonicalInformation(subcategory, errorNumber) : DiagnosticCanonicalInformation = - let text = + let OutputCanonicalInformation(subcategory, errorNumber) : DiagnosticCanonicalInformation = + let message = + match severity with + | FSharpDiagnosticSeverity.Error -> "error" + | FSharpDiagnosticSeverity.Warning -> "warning" + | FSharpDiagnosticSeverity.Info + | FSharpDiagnosticSeverity.Hidden -> "info" + 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 isError then "error" else "warning") errorNumber - | _ -> sprintf "%s FS%04d: " (if isError then "error" else "warning") errorNumber + | ErrorStyle.VSErrors -> sprintf "%s %s FS%04d: " subcategory message errorNumber + | _ -> sprintf "%s FS%04d: " message errorNumber { ErrorNumber = errorNumber; Subcategory = subcategory; TextRepresentation = text} - + let mainError, relatedErrors = SplitRelatedDiagnostics err let where = OutputWhere mainError let canonical = OutputCanonicalInformation(err.Subcategory(), GetDiagnosticNumber mainError) - let message = + let message = let os = System.Text.StringBuilder() OutputPhasedDiagnostic os mainError flattenErrors suggestNames os.ToString() - + let entry: DiagnosticDetailedInfo = { Location = where; Canonical = canonical; Message = message } - - errors.Add ( Diagnostic.Long(isError, entry ) ) + + errors.Add ( Diagnostic.Long(severity, entry ) ) let OutputRelatedError(err: PhasedDiagnostic) = match errorStyle with // Give a canonical string when --vserror. - | ErrorStyle.VSErrors -> + | ErrorStyle.VSErrors -> let relWhere = OutputWhere mainError // mainError? let relCanonical = OutputCanonicalInformation(err.Subcategory(), GetDiagnosticNumber mainError) // Use main error for code - let relMessage = + let relMessage = let os = System.Text.StringBuilder() OutputPhasedDiagnostic os err flattenErrors suggestNames os.ToString() let entry: DiagnosticDetailedInfo = { Location = relWhere; Canonical = relCanonical; Message = relMessage} - errors.Add( Diagnostic.Long (isError, entry) ) + errors.Add( Diagnostic.Long (severity, entry) ) - | _ -> + | _ -> let os = System.Text.StringBuilder() OutputPhasedDiagnostic os err flattenErrors suggestNames - errors.Add( Diagnostic.Short(isError, os.ToString()) ) + errors.Add( Diagnostic.Short(severity, os.ToString()) ) relatedErrors |> List.iter OutputRelatedError @@ -1826,14 +1831,14 @@ let CollectDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorSt /// used by fsc.exe and fsi.exe, but not by VS /// prints error and related errors to the specified StringBuilder -let rec OutputDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorStyle, isError) os (err: PhasedDiagnostic) = - +let rec OutputDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorStyle, severity) os (err: PhasedDiagnostic) = + // 'true' for "canSuggestNames" is passed last here because we want to report suggestions in fsc.exe and fsi.exe, just not in regular IDE usage. - let errors = CollectDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorStyle, isError, err, true) + let errors = CollectDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, errorStyle, severity, err, true) for e in errors do Printf.bprintf os "\n" match e with - | Diagnostic.Short(_, txt) -> + | Diagnostic.Short(_, txt) -> os.Append txt |> ignore | Diagnostic.Long(_, details) -> match details.Location with @@ -1841,23 +1846,23 @@ let rec OutputDiagnostic (implicitIncludeDir, showFullPaths, flattenErrors, erro | _ -> () os.Append( details.Canonical.TextRepresentation ) |> ignore os.Append( details.Message ) |> ignore - + let OutputDiagnosticContext prefix fileLineFunction os err = match GetRangeOfDiagnostic err with - | None -> () - | Some m -> + | None -> () + | Some m -> let filename = m.FileName let lineA = m.StartLine let lineB = m.EndLine let line = fileLineFunction filename lineA - if line<>"" then + if line<>"" then 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%s\n" prefix (String.make iA '-') (String.make iLen '^') -let ReportWarning options err = +let ReportWarning options err = warningOn err (options.WarnLevel) (options.WarnOn) && not (List.contains (GetDiagnosticNumber err) (options.WarnOff)) let ReportWarningAsError options err = @@ -1872,34 +1877,33 @@ let ReportWarningAsError options err = /// Build an ErrorLogger that delegates to another ErrorLogger but filters warnings turned off by the given pragma declarations // -// NOTE: we allow a flag to turn of strict file checking. This is because file names sometimes don't match due to use of +// NOTE: we allow a flag to turn of strict file checking. This is because file names sometimes don't match due to use of // #line directives, e.g. for pars.fs/pars.fsy. In this case we just test by line number - in most cases this is sufficient // because we install a filtering error handler on a file-by-file basis for parsing and type-checking. -// However this is indicative of a more systematic problem where source-line +// However this is indicative of a more systematic problem where source-line // sensitive operations (lexfilter and warning filtering) do not always // interact well with #line directives. type ErrorLoggerFilteringByScopedPragmas (checkFile, scopedPragmas, errorLogger: ErrorLogger) = inherit ErrorLogger("ErrorLoggerFilteringByScopedPragmas") - override x.DiagnosticSink (phasedError, isError) = - if isError then - errorLogger.DiagnosticSink (phasedError, isError) - else - let report = + override x.DiagnosticSink (phasedError, severity) = + if severity = FSharpDiagnosticSeverity.Error then + errorLogger.DiagnosticSink (phasedError, severity) + else + let report = let warningNum = GetDiagnosticNumber phasedError - match GetRangeOfDiagnostic phasedError with - | Some m -> + match GetRangeOfDiagnostic phasedError with + | Some m -> not (scopedPragmas |> List.exists (fun pragma -> - match pragma with - | ScopedPragma.WarningOff(pragmaRange, warningNumFromPragma) -> - warningNum = warningNumFromPragma && + match pragma with + | ScopedPragma.WarningOff(pragmaRange, warningNumFromPragma) -> + warningNum = warningNumFromPragma && (not checkFile || m.FileIndex = pragmaRange.FileIndex) && - Range.posGeq m.Start pragmaRange.Start)) + Position.posGeq m.Start pragmaRange.Start)) | None -> true - if report then errorLogger.DiagnosticSink(phasedError, false) + if report then errorLogger.DiagnosticSink(phasedError, severity) override x.ErrorCount = errorLogger.ErrorCount -let GetErrorLoggerFilteringByScopedPragmas(checkFile, scopedPragmas, errorLogger) = +let GetErrorLoggerFilteringByScopedPragmas(checkFile, scopedPragmas, errorLogger) = (ErrorLoggerFilteringByScopedPragmas(checkFile, scopedPragmas, errorLogger) :> ErrorLogger) - diff --git a/src/fsharp/CompilerDiagnostics.fsi b/src/fsharp/CompilerDiagnostics.fsi index 173d5c8f509..3eb231abf97 100644 --- a/src/fsharp/CompilerDiagnostics.fsi +++ b/src/fsharp/CompilerDiagnostics.fsi @@ -4,9 +4,10 @@ module internal FSharp.Compiler.CompilerDiagnostics open System.Text +open FSharp.Compiler.Diagnostics open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text #if DEBUG module internal CompilerService = @@ -59,7 +60,7 @@ val SplitRelatedDiagnostics: PhasedDiagnostic -> PhasedDiagnostic * PhasedDiagno val OutputPhasedDiagnostic: StringBuilder -> PhasedDiagnostic -> flattenErrors: bool -> suggestNames: bool -> unit /// Output an error or warning to a buffer -val OutputDiagnostic: implicitIncludeDir:string * showFullPaths: bool * flattenErrors: bool * errorStyle: ErrorStyle * isError:bool -> StringBuilder -> PhasedDiagnostic -> unit +val OutputDiagnostic: implicitIncludeDir:string * showFullPaths: bool * flattenErrors: bool * errorStyle: ErrorStyle * severity: FSharpDiagnosticSeverity -> StringBuilder -> PhasedDiagnostic -> unit /// Output extra context information for an error or warning to a buffer val OutputDiagnosticContext: prefix:string -> fileLineFunction:(string -> int -> string) -> StringBuilder -> PhasedDiagnostic -> unit @@ -89,11 +90,11 @@ type DiagnosticDetailedInfo = /// Part of LegacyHostedCompilerForTesting [] type Diagnostic = - | Short of bool * string - | Long of bool * DiagnosticDetailedInfo + | Short of FSharpDiagnosticSeverity * string + | Long of FSharpDiagnosticSeverity * DiagnosticDetailedInfo /// Part of LegacyHostedCompilerForTesting -val CollectDiagnostic: implicitIncludeDir:string * showFullPaths: bool * flattenErrors: bool * errorStyle: ErrorStyle * isError:bool * PhasedDiagnostic * suggestNames: bool -> seq +val CollectDiagnostic: implicitIncludeDir:string * showFullPaths: bool * flattenErrors: bool * errorStyle: ErrorStyle * severity: FSharpDiagnosticSeverity * PhasedDiagnostic * suggestNames: bool -> seq /// Get an error logger that filters the reporting of warnings based on scoped pragma information val GetErrorLoggerFilteringByScopedPragmas: checkFile:bool * ScopedPragma list * ErrorLogger -> ErrorLogger @@ -101,9 +102,9 @@ val GetErrorLoggerFilteringByScopedPragmas: checkFile:bool * ScopedPragma list * val SanitizeFileName: fileName: string -> implicitIncludeDir: string -> string /// Indicates if we should report a warning -val ReportWarning: FSharpErrorSeverityOptions -> PhasedDiagnostic -> bool +val ReportWarning: FSharpDiagnosticOptions -> PhasedDiagnostic -> bool /// Indicates if we should report a warning as an error -val ReportWarningAsError: FSharpErrorSeverityOptions -> PhasedDiagnostic -> bool +val ReportWarningAsError: FSharpDiagnosticOptions -> PhasedDiagnostic -> bool diff --git a/src/fsharp/CompilerGlobalState.fs b/src/fsharp/CompilerGlobalState.fs index 589a145baf0..153111b3151 100644 --- a/src/fsharp/CompilerGlobalState.fs +++ b/src/fsharp/CompilerGlobalState.fs @@ -5,8 +5,8 @@ module FSharp.Compiler.CompilerGlobalState open System.Collections.Generic -open FSharp.Compiler.Range -open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.Text /// Generates compiler-generated names. Each name generated also includes the StartLine number of the range passed in /// at the point of first generation. @@ -82,11 +82,11 @@ type internal CompilerGlobalState () = /// A name generator used by IlxGen for static fields, some generated arguments and other things. let ilxgenGlobalNng = NiceNameGenerator () - member __.NiceNameGenerator = globalNng + member _.NiceNameGenerator = globalNng - member __.StableNameGenerator = globalStableNameGenerator + member _.StableNameGenerator = globalStableNameGenerator - member __.IlxGenNiceNameGenerator = ilxgenGlobalNng + member _.IlxGenNiceNameGenerator = ilxgenGlobalNng /// Unique name generator for stamps attached to lambdas and object expressions type Unique = int64 diff --git a/src/fsharp/CompilerGlobalState.fsi b/src/fsharp/CompilerGlobalState.fsi index 77ba46b2782..4a1e646ffc0 100644 --- a/src/fsharp/CompilerGlobalState.fsi +++ b/src/fsharp/CompilerGlobalState.fsi @@ -2,9 +2,9 @@ /// Defines the global environment for all type checking. -module FSharp.Compiler.CompilerGlobalState +module internal FSharp.Compiler.CompilerGlobalState -open FSharp.Compiler.Range +open FSharp.Compiler.Text /// Generates compiler-generated names. Each name generated also includes the StartLine number of the range passed in /// at the point of first generation. diff --git a/src/fsharp/CompilerImports.fs b/src/fsharp/CompilerImports.fs index ba78d9bdc37..82b55aaff7e 100644 --- a/src/fsharp/CompilerImports.fs +++ b/src/fsharp/CompilerImports.fs @@ -12,38 +12,38 @@ open System.IO open Internal.Utilities open Internal.Utilities.Collections +open Internal.Utilities.FSharpEnvironment +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler -open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILBinaryReader -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Extensions.ILX +open FSharp.Compiler.AbstractIL.ILX open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.CompilerConfig -open FSharp.Compiler.DotNetFrameworkDependencies +open FSharp.Compiler.DependencyManager open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Import -open FSharp.Compiler.Lib -open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.IO +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Syntax.PrettyNaming open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.Range -open FSharp.Compiler.ReferenceResolver +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Xml open FSharp.Compiler.TypedTreePickle open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.XmlDoc - -open Microsoft.DotNet.DependencyManager +open FSharp.Compiler.BuildGraph #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping -open Microsoft.FSharp.Core.CompilerServices +open FSharp.Core.CompilerServices #endif let (++) x s = x @ [s] @@ -52,32 +52,32 @@ let (++) x s = x @ [s] // Signature and optimization data blobs //-------------------------------------------------------------------------- -let IsSignatureDataResource (r: ILResource) = +let IsSignatureDataResource (r: ILResource) = r.Name.StartsWithOrdinal FSharpSignatureDataResourceName || r.Name.StartsWithOrdinal FSharpSignatureDataResourceName2 -let IsOptimizationDataResource (r: ILResource) = - r.Name.StartsWithOrdinal FSharpOptimizationDataResourceName|| +let IsOptimizationDataResource (r: ILResource) = + r.Name.StartsWithOrdinal FSharpOptimizationDataResourceName|| r.Name.StartsWithOrdinal FSharpOptimizationDataResourceName2 -let GetSignatureDataResourceName (r: ILResource) = - if r.Name.StartsWithOrdinal FSharpSignatureDataResourceName then +let GetSignatureDataResourceName (r: ILResource) = + if r.Name.StartsWithOrdinal FSharpSignatureDataResourceName then String.dropPrefix r.Name FSharpSignatureDataResourceName - elif r.Name.StartsWithOrdinal FSharpSignatureDataResourceName2 then + elif r.Name.StartsWithOrdinal FSharpSignatureDataResourceName2 then String.dropPrefix r.Name FSharpSignatureDataResourceName2 else failwith "GetSignatureDataResourceName" -let GetOptimizationDataResourceName (r: ILResource) = - if r.Name.StartsWithOrdinal FSharpOptimizationDataResourceName then +let GetOptimizationDataResourceName (r: ILResource) = + if r.Name.StartsWithOrdinal FSharpOptimizationDataResourceName then String.dropPrefix r.Name FSharpOptimizationDataResourceName - elif r.Name.StartsWithOrdinal FSharpOptimizationDataResourceName2 then + elif r.Name.StartsWithOrdinal FSharpOptimizationDataResourceName2 then String.dropPrefix r.Name FSharpOptimizationDataResourceName2 else failwith "GetOptimizationDataResourceName" let IsReflectedDefinitionsResource (r: ILResource) = r.Name.StartsWithOrdinal(QuotationPickler.SerializedReflectedDefinitionsResourceNameBase) -let MakeILResource rName bytes = +let MakeILResource rName bytes = { Name = rName Location = ILResourceLocation.Local(ByteStorage.FromByteArray(bytes)) Access = ILResourceAccess.Public @@ -90,9 +90,11 @@ let PickleToResource inMem file (g: TcGlobals) scope rName p x = let bytes = pickleObjWithDanglingCcus inMem file g scope p x let byteStorage = if inMem then - ByteStorage.FromByteArrayAndCopy(bytes, useBackingMemoryMappedFile = true) + ByteStorage.FromMemoryAndCopy(bytes.AsMemory(), useBackingMemoryMappedFile = true) else - ByteStorage.FromByteArray(bytes) + ByteStorage.FromByteArray(bytes.AsMemory().ToArray()) + + (bytes :> IDisposable).Dispose() { Name = rName Location = ILResourceLocation.Local(byteStorage) @@ -100,13 +102,13 @@ let PickleToResource inMem file (g: TcGlobals) scope rName p x = CustomAttrsStored = storeILCustomAttrs emptyILCustomAttrs MetadataIndex = NoMetadataIdx } -let GetSignatureData (file, ilScopeRef, ilModule, byteReader) : PickledDataWithReferences = +let GetSignatureData (file, ilScopeRef, ilModule, byteReader) : PickledDataWithReferences = unpickleObjWithDanglingCcus file ilScopeRef ilModule unpickleCcuInfo (byteReader()) let WriteSignatureData (tcConfig: TcConfig, tcGlobals, exportRemapping, ccu: CcuThunk, filename, inMem) : ILResource = let mspec = ccu.Contents let mspec = ApplyExportRemappingToEntity tcGlobals exportRemapping mspec - // For historical reasons, we use a different resource name for FSharp.Core, so older F# compilers + // For historical reasons, we use a different resource name for FSharp.Core, so older F# compilers // don't complain when they see the resource. let rName = if ccu.AssemblyName = getFSharpCoreLibraryName then FSharpSignatureDataResourceName2 else FSharpSignatureDataResourceName @@ -114,39 +116,82 @@ let WriteSignatureData (tcConfig: TcConfig, tcGlobals, exportRemapping, ccu: Ccu if String.IsNullOrEmpty tcConfig.implicitIncludeDir then "" else tcConfig.implicitIncludeDir - |> System.IO.Path.GetFullPath + |> FileSystem.GetFullPathShim |> PathMap.applyDir tcGlobals.pathMap - - PickleToResource inMem filename tcGlobals ccu (rName+ccu.AssemblyName) pickleCcuInfo - { mspec=mspec + + PickleToResource inMem filename tcGlobals ccu (rName+ccu.AssemblyName) pickleCcuInfo + { mspec=mspec compileTimeWorkingDir=includeDir usesQuotations = ccu.UsesFSharp20PlusQuotations } -let GetOptimizationData (file, ilScopeRef, ilModule, byteReader) = +let GetOptimizationData (file, ilScopeRef, ilModule, byteReader) = unpickleObjWithDanglingCcus file ilScopeRef ilModule Optimizer.u_CcuOptimizationInfo (byteReader()) -let WriteOptimizationData (tcGlobals, filename, inMem, ccu: CcuThunk, modulInfo) = - // For historical reasons, we use a different resource name for FSharp.Core, so older F# compilers +let WriteOptimizationData (tcGlobals, filename, inMem, ccu: CcuThunk, modulInfo) = + // For historical reasons, we use a different resource name for FSharp.Core, so older F# compilers // don't complain when they see the resource. - let rName = if ccu.AssemblyName = getFSharpCoreLibraryName then FSharpOptimizationDataResourceName2 else FSharpOptimizationDataResourceName + let rName = if ccu.AssemblyName = getFSharpCoreLibraryName then FSharpOptimizationDataResourceName2 else FSharpOptimizationDataResourceName PickleToResource inMem filename tcGlobals ccu (rName+ccu.AssemblyName) Optimizer.p_CcuOptimizationInfo modulInfo +let EncodeSignatureData(tcConfig: TcConfig, tcGlobals, exportRemapping, generatedCcu, outfile, isIncrementalBuild) = + if tcConfig.GenerateSignatureData then + let resource = WriteSignatureData (tcConfig, tcGlobals, exportRemapping, generatedCcu, outfile, isIncrementalBuild) + // The resource gets written to a file for FSharp.Core + let useDataFiles = (tcConfig.useOptimizationDataFile || tcGlobals.compilingFslib) && not isIncrementalBuild + + if useDataFiles then + let sigDataFileName = (FileSystemUtils.chopExtension outfile)+".sigdata" + let bytes = resource.GetBytes() + use fileStream = FileSystem.OpenFileForWriteShim(sigDataFileName, FileMode.Create, FileAccess.ReadWrite, FileShare.None) + + bytes.CopyTo fileStream + let resources = + [ resource ] + let sigAttr = mkSignatureDataVersionAttr tcGlobals (parseILVersion Internal.Utilities.FSharpEnvironment.FSharpBinaryMetadataFormatRevision) + [sigAttr], resources + else + [], [] + +let EncodeOptimizationData(tcGlobals, tcConfig: TcConfig, outfile, exportRemapping, data, isIncrementalBuild) = + if tcConfig.GenerateOptimizationData then + let data = map2Of2 (Optimizer.RemapOptimizationInfo tcGlobals exportRemapping) data + // As with the sigdata file, the optdata gets written to a file for FSharp.Core + let useDataFiles = (tcConfig.useOptimizationDataFile || tcGlobals.compilingFslib) && not isIncrementalBuild + + if useDataFiles then + let ccu, modulInfo = data + let bytes = TypedTreePickle.pickleObjWithDanglingCcus isIncrementalBuild outfile tcGlobals ccu Optimizer.p_CcuOptimizationInfo modulInfo + let optDataFileName = (FileSystemUtils.chopExtension outfile)+".optdata" + use fileStream = FileSystem.OpenFileForWriteShim(optDataFileName, FileMode.Create, FileAccess.ReadWrite, FileShare.None) + fileStream.Write(bytes) + + let (ccu, optData) = + if tcConfig.onlyEssentialOptimizationData then + map2Of2 Optimizer.AbstractOptimizationInfoToEssentials data + else + data + [ WriteOptimizationData (tcGlobals, outfile, isIncrementalBuild, ccu, optData) ] + else + [ ] + exception AssemblyNotResolved of (*originalName*) string * range + exception MSBuildReferenceResolutionWarning of (*MSBuild warning code*)string * (*Message*)string * range + exception MSBuildReferenceResolutionError of (*MSBuild warning code*)string * (*Message*)string * range let OpenILBinary(filename, reduceMemoryUsage, pdbDirPath, shadowCopyReferences, tryGetMetadataSnapshot) = - let opts: ILReaderOptions = + let opts: ILReaderOptions = { metadataOnly = MetadataOnlyFlag.Yes reduceMemoryUsage = reduceMemoryUsage pdbDirPath = pdbDirPath - tryGetMetadataSnapshot = tryGetMetadataSnapshot } - + tryGetMetadataSnapshot = tryGetMetadataSnapshot } + let location = #if FX_NO_APP_DOMAINS // In order to use memory mapped files on the shadow copied version of the Assembly, we `preload the assembly // We swallow all exceptions so that we do not change the exception contract of this API - if shadowCopyReferences then + if shadowCopyReferences then try System.Reflection.Assembly.ReflectionOnlyLoadFrom(filename).Location with e -> filename @@ -167,12 +212,12 @@ type ResolvedExtensionReference = ResolvedExtensionReference of string * Assembl #if DEBUG [] #endif -type AssemblyResolution = +type AssemblyResolution = { /// The original reference to the assembly. originalReference: AssemblyReference /// Path to the resolvedFile - resolvedPath: string + resolvedPath: string /// Create the tooltip text for the assembly reference prepareToolTip: unit -> string @@ -180,7 +225,7 @@ type AssemblyResolution = /// Whether or not this is an installed system assembly (for example, System.dll) sysdir: bool - /// Lazily populated ilAssemblyRef for this reference. + /// Lazily populated ilAssemblyRef for this reference. mutable ilAssemblyRef: ILAssemblyRef option } override this.ToString() = sprintf "%s%s" (if this.sysdir then "[sys]" else "") this.resolvedPath @@ -189,47 +234,30 @@ type AssemblyResolution = /// Compute the ILAssemblyRef for a resolved assembly. This is done by reading the binary if necessary. The result /// is cached. - /// - /// For project references in the language service, this would result in a build of the project. - /// This is because ``EvaluateRawContents ctok`` is used. However this path is only currently used - /// in fsi.fs, which does not use project references. - // - member this.GetILAssemblyRef(ctok, reduceMemoryUsage, tryGetMetadataSnapshot) = - cancellable { - match this.ilAssemblyRef with - | Some assemblyRef -> return assemblyRef + /// + /// Only used in F# Interactive + member this.GetILAssemblyRef(reduceMemoryUsage, tryGetMetadataSnapshot) = + match this.ilAssemblyRef with + | Some assemblyRef -> assemblyRef | None -> - let! assemblyRefOpt = - cancellable { - match this.ProjectReference with - | Some r -> - let! contents = r.EvaluateRawContents ctok - match contents with - | None -> return None - | Some contents -> - match contents.ILScopeRef with - | ILScopeRef.Assembly aref -> return Some aref - | _ -> return None - | None -> return None - } - let assemblyRef = - match assemblyRefOpt with - | Some aref -> aref - | None -> - let readerSettings: ILReaderOptions = - { pdbDirPath=None - reduceMemoryUsage = reduceMemoryUsage - metadataOnly = MetadataOnlyFlag.Yes - tryGetMetadataSnapshot = tryGetMetadataSnapshot } - use reader = OpenILModuleReader this.resolvedPath readerSettings - mkRefToILAssembly reader.ILModuleDef.ManifestOfAssembly + match this.ProjectReference with + | Some _ -> failwith "IProjectReference is not allowed to be used in GetILAssemblyRef" + | None -> () + + let assemblyRef = + let readerSettings: ILReaderOptions = + { pdbDirPath=None + reduceMemoryUsage = reduceMemoryUsage + metadataOnly = MetadataOnlyFlag.Yes + tryGetMetadataSnapshot = tryGetMetadataSnapshot } + use reader = OpenILModuleReader this.resolvedPath readerSettings + mkRefToILAssembly reader.ILModuleDef.ManifestOfAssembly this.ilAssemblyRef <- Some assemblyRef - return assemblyRef - } + assemblyRef type ImportedBinary = { FileName: string - RawMetadata: IRawFSharpAssemblyData + RawMetadata: IRawFSharpAssemblyData #if !NO_EXTENSIONTYPING ProviderGeneratedAssembly: System.Reflection.Assembly option IsProviderGenerated: bool @@ -239,7 +267,7 @@ type ImportedBinary = ILScopeRef: ILScopeRef } type ImportedAssembly = - { ILScopeRef: ILScopeRef + { ILScopeRef: ILScopeRef FSharpViewOfMetadata: CcuThunk AssemblyAutoOpenAttributes: string list AssemblyInternalsVisibleToAttributes: string list @@ -257,19 +285,26 @@ type CcuLoadFailureAction = | RaiseError | ReturnNone +type TcImportsLockToken() = + interface LockToken + +type TcImportsLock = Lock + +let RequireTcImportsLock (_tcitok: TcImportsLockToken, _thingProtected: 'T) = () + type TcConfig with - - member tcConfig.TryResolveLibWithDirectories (r: AssemblyReference) = + + member tcConfig.TryResolveLibWithDirectories (r: AssemblyReference) = let m, nm = r.Range, r.Text use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter // Only want to resolve certain extensions (otherwise, 'System.Xml' is ambiguous). // MSBuild resolution is limited to .exe and .dll so do the same here. let ext = System.IO.Path.GetExtension nm - let isNetModule = String.Compare(ext, ".netmodule", StringComparison.OrdinalIgnoreCase)=0 - + let isNetModule = String.Compare(ext, ".netmodule", StringComparison.OrdinalIgnoreCase)=0 + // See if the language service has already produced the contents of the assembly for us, virtually - match r.ProjectReference with - | Some _ -> + match r.ProjectReference with + | Some _ -> let resolved = r.Text let sysdir = tcConfig.IsSystemAssembly resolved Some @@ -278,10 +313,10 @@ type TcConfig with prepareToolTip = (fun () -> resolved) sysdir = sysdir ilAssemblyRef = None } - | None -> + | None -> - if String.Compare(ext, ".dll", StringComparison.OrdinalIgnoreCase)=0 - || String.Compare(ext, ".exe", StringComparison.OrdinalIgnoreCase)=0 + if String.Compare(ext, ".dll", StringComparison.OrdinalIgnoreCase)=0 + || String.Compare(ext, ".exe", StringComparison.OrdinalIgnoreCase)=0 || isNetModule then let searchPaths = @@ -297,17 +332,17 @@ type TcConfig with if isPoundRReference m then tcConfig.GetSearchPathsForLibraryFiles() @ [Path.GetDirectoryName(m.FileName)] - else + else tcConfig.GetSearchPathsForLibraryFiles() let resolved = TryResolveFileUsingPaths(searchPaths, m, nm) - match resolved with - | Some resolved -> + match resolved with + | Some resolved -> let sysdir = tcConfig.IsSystemAssembly resolved Some { originalReference = r resolvedPath = resolved - prepareToolTip = (fun () -> + prepareToolTip = (fun () -> let fusionName = System.Reflection.AssemblyName.GetAssemblyName(resolved).ToString() let line(append: string) = append.Trim([|' '|])+"\n" line resolved + line fusionName) @@ -325,7 +360,7 @@ type TcConfig with let isDLL = (String.Compare(ext, ".dll", StringComparison.OrdinalIgnoreCase) = 0) let isNetModule = (String.Compare(ext, ".netmodule", StringComparison.OrdinalIgnoreCase) = 0) - let rs = + let rs = if isExe || isDLL || isNetModule then [r] else @@ -341,56 +376,56 @@ type TcConfig with | CcuLoadFailureAction.ReturnNone -> None member tcConfig.MsBuildResolve (references, mode, errorAndWarningRange, showMessages) = - let logMessage showMessages = + let logMessage showMessages = if showMessages && tcConfig.showReferenceResolutions then (fun (message: string)->dprintf "%s\n" message) else ignore - let logDiagnostic showMessages = + let logDiagnostic showMessages = (fun isError code message-> - if showMessages && mode = ResolveAssemblyReferenceMode.ReportErrors then + if showMessages && mode = ResolveAssemblyReferenceMode.ReportErrors then if isError then errorR(MSBuildReferenceResolutionError(code, message, errorAndWarningRange)) else - match code with + match code with // These are warnings that mean 'not resolved' for some assembly. // Note that we don't get to know the name of the assembly that couldn't be resolved. // Ignore these and rely on the logic below to emit an error for each unresolved reference. | "MSB3246" // Resolved file has a bad image, no metadata, or is otherwise inaccessible. - | "MSB3106" + | "MSB3106" -> () - | _ -> - if code = "MSB3245" then + | _ -> + if code = "MSB3245" then errorR(MSBuildReferenceResolutionWarning(code, message, errorAndWarningRange)) else warning(MSBuildReferenceResolutionWarning(code, message, errorAndWarningRange))) - let targetProcessorArchitecture = + let targetProcessorArchitecture = match tcConfig.platform with | None -> "MSIL" | Some X86 -> "x86" | Some AMD64 -> "amd64" | Some IA64 -> "ia64" - - try - tcConfig.legacyReferenceResolver.Resolve - (tcConfig.resolutionEnvironment, - references, - tcConfig.targetFrameworkVersion, - tcConfig.GetTargetFrameworkDirectories(), - targetProcessorArchitecture, + + try + tcConfig.legacyReferenceResolver.Impl.Resolve + (tcConfig.resolutionEnvironment, + references, + tcConfig.targetFrameworkVersion, + tcConfig.GetTargetFrameworkDirectories(), + targetProcessorArchitecture, tcConfig.fsharpBinariesDir, // FSharp binaries directory tcConfig.includes, // Explicit include directories tcConfig.implicitIncludeDir, // Implicit include directory (likely the project directory) logMessage showMessages, logDiagnostic showMessages) - with - ReferenceResolver.ResolutionFailure -> error(Error(FSComp.SR.buildAssemblyResolutionFailed(), errorAndWarningRange)) + with + | LegacyResolutionFailure -> error(Error(FSComp.SR.buildAssemblyResolutionFailed(), errorAndWarningRange)) // NOTE!! if mode=Speculative then this method must not report ANY warnings or errors through 'warning' or 'error'. Instead // it must return warnings and errors as data // // NOTE!! if mode=ReportErrors then this method must not raise exceptions. It must just report the errors and recover - static member TryResolveLibsUsingMSBuildRules (tcConfig: TcConfig, + static member TryResolveLibsUsingMSBuildRules (tcConfig: TcConfig, originalReferences: AssemblyReference list, errorAndWarningRange: range, mode: ResolveAssemblyReferenceMode) : AssemblyResolution list * UnresolvedAssemblyReference list = @@ -402,7 +437,7 @@ type TcConfig with else // Group references by name with range values in the grouped value list. // In the grouped reference, store the index of the last use of the reference. - let groupedReferences = + let groupedReferences = originalReferences |> List.indexed |> Seq.groupBy(fun (_, reference) -> reference.Text) @@ -414,32 +449,32 @@ type TcConfig with |> Array.ofSeq // First, try to resolve everything as a file using simple resolution - let resolvedAsFile = - groupedReferences + let resolvedAsFile = + groupedReferences |> Array.map(fun (_filename, maxIndexOfReference, references)-> let assemblyResolution = references |> List.choose (fun r -> tcConfig.TryResolveLibWithDirectories r) - (maxIndexOfReference, assemblyResolution)) + (maxIndexOfReference, assemblyResolution)) |> Array.filter(fun (_, refs)->refs |> isNil |> not) - - let toMsBuild = [|0..groupedReferences.Length-1|] - |> Array.map(fun i->(p13 groupedReferences.[i]), (p23 groupedReferences.[i]), i) + + let toMsBuild = [|0..groupedReferences.Length-1|] + |> 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 = tcConfig.MsBuildResolve(toMsBuild, mode, errorAndWarningRange, (*showMessages*)true) + let resolutions = tcConfig.MsBuildResolve(toMsBuild, mode, errorAndWarningRange, (*showMessages*)true) // Map back to original assembly resolutions. - let resolvedByMsbuild = + let resolvedByMsbuild = resolutions - |> Array.map(fun resolvedFile -> + |> Array.map(fun resolvedFile -> let i = int resolvedFile.baggage let _, maxIndexOfReference, ms = groupedReferences.[i] let assemblyResolutions = 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 + { originalReference=originalReference + resolvedPath=canonicalItemSpec prepareToolTip = (fun () -> resolvedFile.prepareToolTip (originalReference.Text, canonicalItemSpec)) sysdir= tcConfig.IsSystemAssembly canonicalItemSpec ilAssemblyRef = None }) @@ -449,41 +484,40 @@ type TcConfig with // in the original specification and resort it to match the ordering that we had. let resultingResolutions = [resolvedByMsbuild;resolvedAsFile] - |> Array.concat + |> Array.concat |> Array.sortBy fst |> Array.map snd |> List.ofArray - |> List.concat - + |> List.concat + // O(N^2) here over a small set of referenced assemblies. let IsResolved(originalName: string) = if resultingResolutions |> List.exists(fun resolution -> resolution.originalReference.Text = originalName) then true - else + else // MSBuild resolution may have unified the result of two duplicate references. Try to re-resolve now. // If re-resolution worked then this was a removed duplicate. - tcConfig.MsBuildResolve([|originalName, ""|], mode, errorAndWarningRange, (*showMessages*)false).Length<>0 - - let unresolvedReferences = - groupedReferences + tcConfig.MsBuildResolve([|originalName, ""|], mode, errorAndWarningRange, (*showMessages*)false).Length<>0 + + let unresolvedReferences = + groupedReferences //|> Array.filter(p13 >> IsNotFileOrIsAssembly) - |> Array.filter(p13 >> IsResolved >> not) - |> List.ofArray + |> Array.filter(p13 >> IsResolved >> not) + |> List.ofArray // If mode=Speculative, then we haven't reported any errors. // We report the error condition by returning an empty list of resolutions - if mode = ResolveAssemblyReferenceMode.Speculative && (List.length unresolvedReferences) > 0 then + if mode = ResolveAssemblyReferenceMode.Speculative && (List.length unresolvedReferences) > 0 then [], (List.ofArray groupedReferences) |> List.map (fun (name, _, r) -> (name, r)) |> List.map UnresolvedAssemblyReference - else - resultingResolutions, unresolvedReferences |> List.map (fun (name, _, r) -> (name, r)) |> List.map UnresolvedAssemblyReference - + else + resultingResolutions, unresolvedReferences |> List.map (fun (name, _, r) -> (name, r)) |> List.map UnresolvedAssemblyReference -[] -type TcAssemblyResolutions(tcConfig: TcConfig, results: AssemblyResolution list, unresolved: UnresolvedAssemblyReference list) = +[] +type TcAssemblyResolutions(tcConfig: TcConfig, results: AssemblyResolution list, unresolved: UnresolvedAssemblyReference list) = let originalReferenceToResolution = results |> List.map (fun r -> r.originalReference.Text, r) |> Map.ofList let resolvedPathToResolution = results |> List.map (fun r -> r.resolvedPath, r) |> Map.ofList - /// Add some resolutions to the map of resolution results. + /// Add some resolutions to the map of resolution results. member _.AddResolutionResults newResults = TcAssemblyResolutions(tcConfig, results @ newResults, unresolved) /// Add some unresolved results. @@ -496,47 +530,47 @@ type TcAssemblyResolutions(tcConfig: TcConfig, results: AssemblyResolution list, member _.TryFindByOriginalReference(assemblyReference: AssemblyReference) = originalReferenceToResolution.TryFind assemblyReference.Text - /// This doesn't need to be cancellable, it is only used by F# Interactive - member _.TryFindByExactILAssemblyRef (ctok, assemblyRef) = + /// Only used by F# Interactive + member _.TryFindByExactILAssemblyRef (assemblyRef) = results |> List.tryFind (fun ar-> - let r = ar.GetILAssemblyRef(ctok, tcConfig.reduceMemoryUsage, tcConfig.tryGetMetadataSnapshot) |> Cancellable.runWithoutCancellation + let r = ar.GetILAssemblyRef(tcConfig.reduceMemoryUsage, tcConfig.tryGetMetadataSnapshot) r = assemblyRef) - /// This doesn't need to be cancellable, it is only used by F# Interactive - member _.TryFindBySimpleAssemblyName (ctok, simpleAssemName) = + /// Only used by F# Interactive + member _.TryFindBySimpleAssemblyName (simpleAssemName) = results |> List.tryFind (fun ar-> - let r = ar.GetILAssemblyRef(ctok, tcConfig.reduceMemoryUsage, tcConfig.tryGetMetadataSnapshot) |> Cancellable.runWithoutCancellation + let r = ar.GetILAssemblyRef(tcConfig.reduceMemoryUsage, tcConfig.tryGetMetadataSnapshot) r.Name = simpleAssemName) member _.TryFindByResolvedPath nm = resolvedPathToResolution.TryFind nm member _.TryFindByOriginalReferenceText nm = originalReferenceToResolution.TryFind nm - static member ResolveAssemblyReferences (ctok, tcConfig: TcConfig, assemblyList: AssemblyReference list, knownUnresolved: UnresolvedAssemblyReference list) : TcAssemblyResolutions = - let resolved, unresolved = - if tcConfig.useSimpleResolution then - let resolutions = - assemblyList - |> List.map (fun assemblyReference -> - try + static member ResolveAssemblyReferences (tcConfig: TcConfig, assemblyList: AssemblyReference list, knownUnresolved: UnresolvedAssemblyReference list) : TcAssemblyResolutions = + let resolved, unresolved = + if tcConfig.useSimpleResolution then + let resolutions = + assemblyList + |> List.map (fun assemblyReference -> + try Choice1Of2 (tcConfig.ResolveLibWithDirectories (CcuLoadFailureAction.RaiseError, assemblyReference) |> Option.get) - with e -> + with e -> errorRecovery e assemblyReference.Range Choice2Of2 assemblyReference) let successes = resolutions |> List.choose (function Choice1Of2 x -> Some x | _ -> None) let failures = resolutions |> List.choose (function Choice2Of2 x -> Some (UnresolvedAssemblyReference(x.Text, [x])) | _ -> None) successes, failures else - RequireCompilationThread ctok // we don't want to do assembly resolution concurrently, we assume MSBuild doesn't handle this + // we don't want to do assembly resolution concurrently, we assume MSBuild doesn't handle this TcConfig.TryResolveLibsUsingMSBuildRules (tcConfig, assemblyList, rangeStartup, ResolveAssemblyReferenceMode.ReportErrors) - TcAssemblyResolutions(tcConfig, resolved, unresolved @ knownUnresolved) + TcAssemblyResolutions(tcConfig, resolved, unresolved @ knownUnresolved) static member GetAllDllReferences (tcConfig: TcConfig) = [ let primaryReference = tcConfig.PrimaryAssemblyDllReference() let assumeDotNetFramework = primaryReference.SimpleAssemblyNameIs("mscorlib") - if not tcConfig.compilingFslib then + if not tcConfig.compilingFslib then yield tcConfig.CoreLibraryDllReference() if assumeDotNetFramework then // When building desktop then we need these additional dependencies @@ -554,155 +588,212 @@ type TcAssemblyResolutions(tcConfig: TcConfig, results: AssemblyResolution list, if found then yield asm if tcConfig.framework then - for s in defaultReferencesForScriptsAndOutOfProjectSources tcConfig.useFsiAuxLib assumeDotNetFramework tcConfig.useSdkRefs do + let references, _useDotNetFramework = tcConfig.FxResolver.GetDefaultReferences(tcConfig.useFsiAuxLib) + for s in references do yield AssemblyReference(rangeStartup, (if s.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) then s else s+".dll"), None) yield! tcConfig.referencedDLLs ] - static member SplitNonFoundationalResolutions (ctok, tcConfig: TcConfig) = + static member SplitNonFoundationalResolutions (tcConfig: TcConfig) = let assemblyList = TcAssemblyResolutions.GetAllDllReferences tcConfig - let resolutions = TcAssemblyResolutions.ResolveAssemblyReferences (ctok, tcConfig, assemblyList, tcConfig.knownUnresolvedReferences) - let frameworkDLLs, nonFrameworkReferences = resolutions.GetAssemblyResolutions() |> List.partition (fun r -> r.sysdir) + let resolutions = TcAssemblyResolutions.ResolveAssemblyReferences (tcConfig, assemblyList, tcConfig.knownUnresolvedReferences) + let frameworkDLLs, nonFrameworkReferences = resolutions.GetAssemblyResolutions() |> List.partition (fun r -> r.sysdir) let unresolved = resolutions.GetUnresolvedReferences() #if DEBUG let mutable itFailed = 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." - unresolved - |> List.iter (fun (UnresolvedAssemblyReference(referenceText, _ranges)) -> + + for (UnresolvedAssemblyReference(referenceText, _ranges)) in unresolved do if referenceText.Contains("mscorlib") then System.Diagnostics.Debug.Assert(false, sprintf "whoops, did not resolve mscorlib: '%s'%s" referenceText addedText) - itFailed <- true) - frameworkDLLs - |> List.iter (fun x -> + itFailed <- true + + for x in frameworkDLLs do if not(FileSystem.IsPathRootedShim(x.resolvedPath)) then System.Diagnostics.Debug.Assert(false, sprintf "frameworkDLL should be absolute path: '%s'%s" x.resolvedPath addedText) - itFailed <- true) - nonFrameworkReferences - |> List.iter (fun x -> + itFailed <- true + + for x in nonFrameworkReferences do if not(FileSystem.IsPathRootedShim(x.resolvedPath)) then - System.Diagnostics.Debug.Assert(false, sprintf "nonFrameworkReference should be absolute path: '%s'%s" x.resolvedPath addedText) - itFailed <- true) + System.Diagnostics.Debug.Assert(false, sprintf "nonFrameworkReference should be absolute path: '%s'%s" x.resolvedPath addedText) + itFailed <- true + if itFailed then // idea is, put a breakpoint here and then step through let assemblyList = TcAssemblyResolutions.GetAllDllReferences tcConfig - let resolutions = TcAssemblyResolutions.ResolveAssemblyReferences (ctok, tcConfig, assemblyList, []) - let _frameworkDLLs, _nonFrameworkReferences = resolutions.GetAssemblyResolutions() |> List.partition (fun r -> r.sysdir) + let resolutions = TcAssemblyResolutions.ResolveAssemblyReferences (tcConfig, assemblyList, []) + let _frameworkDLLs, _nonFrameworkReferences = resolutions.GetAssemblyResolutions() |> List.partition (fun r -> r.sysdir) () #endif frameworkDLLs, nonFrameworkReferences, unresolved - static member BuildFromPriorResolutions (ctok, tcConfig: TcConfig, resolutions, knownUnresolved) = + static member BuildFromPriorResolutions (tcConfig: TcConfig, resolutions, knownUnresolved) = let references = resolutions |> List.map (fun r -> r.originalReference) - TcAssemblyResolutions.ResolveAssemblyReferences (ctok, tcConfig, references, knownUnresolved) - - static member GetAssemblyResolutionInformation(ctok, tcConfig: TcConfig) = + TcAssemblyResolutions.ResolveAssemblyReferences (tcConfig, references, knownUnresolved) + + static member GetAssemblyResolutionInformation(tcConfig: TcConfig) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter let assemblyList = TcAssemblyResolutions.GetAllDllReferences tcConfig - let resolutions = TcAssemblyResolutions.ResolveAssemblyReferences (ctok, tcConfig, assemblyList, []) + let resolutions = TcAssemblyResolutions.ResolveAssemblyReferences (tcConfig, assemblyList, []) resolutions.GetAssemblyResolutions(), resolutions.GetUnresolvedReferences() //---------------------------------------------------------------------------- // Abstraction for project reference -let GetNameOfILModule (m: ILModuleDef) = - match m.Manifest with +let GetNameOfILModule (m: ILModuleDef) = + match m.Manifest with | Some manifest -> manifest.Name | None -> m.Name -let MakeScopeRefForILModule (ilModule: ILModuleDef) = - match ilModule.Manifest with +let MakeScopeRefForILModule (ilModule: ILModuleDef) = + match ilModule.Manifest with | Some m -> ILScopeRef.Assembly (mkRefToILAssembly m) | None -> ILScopeRef.Module (mkRefToILModule ilModule) -let GetCustomAttributesOfILModule (ilModule: ILModuleDef) = - (match ilModule.Manifest with Some m -> m.CustomAttrs | None -> ilModule.CustomAttrs).AsList +let GetCustomAttributesOfILModule (ilModule: ILModuleDef) = + (match ilModule.Manifest with Some m -> m.CustomAttrs | None -> ilModule.CustomAttrs).AsList -let GetAutoOpenAttributes ilg ilModule = - ilModule |> GetCustomAttributesOfILModule |> List.choose (TryFindAutoOpenAttr ilg) +let GetAutoOpenAttributes ilModule = + ilModule |> GetCustomAttributesOfILModule |> List.choose TryFindAutoOpenAttr -let GetInternalsVisibleToAttributes ilg ilModule = - ilModule |> GetCustomAttributesOfILModule |> List.choose (TryFindInternalsVisibleToAttr ilg) - -type RawFSharpAssemblyDataBackedByFileOnDisk (ilModule: ILModuleDef, ilAssemblyRefs) = +let GetInternalsVisibleToAttributes ilModule = + ilModule |> GetCustomAttributesOfILModule |> List.choose TryFindInternalsVisibleToAttr + +type RawFSharpAssemblyDataBackedByFileOnDisk (ilModule: ILModuleDef, ilAssemblyRefs) = let externalSigAndOptData = ["FSharp.Core"] - interface IRawFSharpAssemblyData with + interface IRawFSharpAssemblyData with - member __.GetAutoOpenAttributes ilg = GetAutoOpenAttributes ilg ilModule + member _.GetAutoOpenAttributes() = GetAutoOpenAttributes ilModule - member __.GetInternalsVisibleToAttributes ilg = GetInternalsVisibleToAttributes ilg ilModule + member _.GetInternalsVisibleToAttributes() = GetInternalsVisibleToAttributes ilModule - member __.TryGetILModuleDef() = Some ilModule + member _.TryGetILModuleDef() = Some ilModule - member __.GetRawFSharpSignatureData(m, ilShortAssemName, filename) = + member _.GetRawFSharpSignatureData(m, ilShortAssemName, filename) = let resources = ilModule.Resources.AsList - let sigDataReaders = + let sigDataReaders = [ for iresource in resources do - if IsSignatureDataResource iresource then + if IsSignatureDataResource iresource then let ccuName = GetSignatureDataResourceName iresource yield (ccuName, fun () -> iresource.GetBytes()) ] - - let sigDataReaders = - if sigDataReaders.IsEmpty && List.contains ilShortAssemName externalSigAndOptData then + + let sigDataReaders = + if sigDataReaders.IsEmpty && List.contains ilShortAssemName externalSigAndOptData then let sigFileName = Path.ChangeExtension(filename, "sigdata") - if not (FileSystem.SafeExists sigFileName) then + if not (FileSystem.FileExistsShim sigFileName) then error(Error(FSComp.SR.buildExpectedSigdataFile (FileSystem.GetFullPathShim sigFileName), m)) - [ (ilShortAssemName, fun () -> ByteMemory.FromFile(sigFileName, FileAccess.Read, canShadowCopy=true).AsReadOnly())] + [ (ilShortAssemName, fun () -> FileSystem.OpenFileForReadShim(sigFileName, useMemoryMappedFile=true, shouldShadowCopy=true).AsByteMemory().AsReadOnly())] else sigDataReaders sigDataReaders - member __.GetRawFSharpOptimizationData(m, ilShortAssemName, filename) = - let optDataReaders = + member _.GetRawFSharpOptimizationData(m, ilShortAssemName, filename) = + let optDataReaders = ilModule.Resources.AsList |> List.choose (fun r -> if IsOptimizationDataResource r then Some(GetOptimizationDataResourceName r, (fun () -> r.GetBytes())) else None) - // Look for optimization data in a file - let optDataReaders = - if optDataReaders.IsEmpty && List.contains ilShortAssemName externalSigAndOptData then + // Look for optimization data in a file + let optDataReaders = + if optDataReaders.IsEmpty && List.contains ilShortAssemName externalSigAndOptData then let optDataFile = Path.ChangeExtension(filename, "optdata") - if not (FileSystem.SafeExists optDataFile) then + if not (FileSystem.FileExistsShim optDataFile) then error(Error(FSComp.SR.buildExpectedFileAlongSideFSharpCore(optDataFile, FileSystem.GetFullPathShim optDataFile), m)) - [ (ilShortAssemName, (fun () -> ByteMemory.FromFile(optDataFile, FileAccess.Read, canShadowCopy=true).AsReadOnly()))] + [ (ilShortAssemName, (fun () -> FileSystem.OpenFileForReadShim(optDataFile, useMemoryMappedFile=true, shouldShadowCopy=true).AsByteMemory().AsReadOnly()))] else optDataReaders optDataReaders - member __.GetRawTypeForwarders() = - match ilModule.Manifest with + member _.GetRawTypeForwarders() = + match ilModule.Manifest with | Some manifest -> manifest.ExportedTypes | None -> mkILExportedTypes [] - member __.ShortAssemblyName = GetNameOfILModule ilModule + member _.ShortAssemblyName = GetNameOfILModule ilModule - member __.ILScopeRef = MakeScopeRefForILModule ilModule + member _.ILScopeRef = MakeScopeRefForILModule ilModule - member __.ILAssemblyRefs = ilAssemblyRefs + member _.ILAssemblyRefs = ilAssemblyRefs - member __.HasAnyFSharpSignatureDataAttribute = + member _.HasAnyFSharpSignatureDataAttribute = let attrs = GetCustomAttributesOfILModule ilModule List.exists IsSignatureDataVersionAttr attrs - member __.HasMatchingFSharpSignatureDataAttribute ilg = + member _.HasMatchingFSharpSignatureDataAttribute = let attrs = GetCustomAttributesOfILModule ilModule - List.exists (IsMatchingSignatureDataVersionAttr ilg (IL.parseILVersion Internal.Utilities.FSharpEnvironment.FSharpBinaryMetadataFormatRevision)) attrs + List.exists (IsMatchingSignatureDataVersionAttr (parseILVersion Internal.Utilities.FSharpEnvironment.FSharpBinaryMetadataFormatRevision)) attrs + +[] +type RawFSharpAssemblyData (ilModule: ILModuleDef, ilAssemblyRefs) = + + interface IRawFSharpAssemblyData with + + member _.GetAutoOpenAttributes() = GetAutoOpenAttributes ilModule + + member _.GetInternalsVisibleToAttributes() = GetInternalsVisibleToAttributes ilModule + + member _.TryGetILModuleDef() = Some ilModule + + member _.GetRawFSharpSignatureData(_, _, _) = + let resources = ilModule.Resources.AsList + [ for iresource in resources do + if IsSignatureDataResource iresource then + let ccuName = GetSignatureDataResourceName iresource + yield (ccuName, fun () -> iresource.GetBytes()) ] + + member _.GetRawFSharpOptimizationData(_, _, _) = + ilModule.Resources.AsList + |> List.choose (fun r -> if IsOptimizationDataResource r then Some(GetOptimizationDataResourceName r, (fun () -> r.GetBytes())) else None) + + member _.GetRawTypeForwarders() = + match ilModule.Manifest with + | Some manifest -> manifest.ExportedTypes + | None -> mkILExportedTypes [] + + member _.ShortAssemblyName = GetNameOfILModule ilModule + + member _.ILScopeRef = MakeScopeRefForILModule ilModule + + member _.ILAssemblyRefs = ilAssemblyRefs + + member _.HasAnyFSharpSignatureDataAttribute = + let attrs = GetCustomAttributesOfILModule ilModule + List.exists IsSignatureDataVersionAttr attrs + + member _.HasMatchingFSharpSignatureDataAttribute = + let attrs = GetCustomAttributesOfILModule ilModule + List.exists (IsMatchingSignatureDataVersionAttr (parseILVersion Internal.Utilities.FSharpEnvironment.FSharpBinaryMetadataFormatRevision)) attrs //---------------------------------------------------------------------------- // TcImports //-------------------------------------------------------------------------- [] -type TcImportsSafeDisposal(disposeActions: ResizeArray unit>,disposeTypeProviderActions: ResizeArray unit>) = +type TcImportsSafeDisposal(tciLock: TcImportsLock, disposeActions: ResizeArray unit>,disposeTypeProviderActions: ResizeArray unit>) = let mutable isDisposed = false let dispose () = - // disposing deliberately only closes this tcImports, not the ones up the chain - isDisposed <- true - if verbose then + tciLock.AcquireLock (fun tcitok -> + + RequireTcImportsLock (tcitok, isDisposed) + RequireTcImportsLock (tcitok, disposeTypeProviderActions) + RequireTcImportsLock (tcitok, disposeActions) + + // disposing deliberately only closes this tcImports, not the ones up the chain + isDisposed <- true + if verbose then dprintf "disposing of TcImports, %d binaries\n" disposeActions.Count - for action in disposeTypeProviderActions do action() - for action in disposeActions do action() + + let actions1 = disposeTypeProviderActions |> Seq.toArray + let actions2 = disposeActions |> Seq.toArray + + disposeTypeProviderActions.Clear() + disposeActions.Clear() + + for action in actions1 do action() + for action in actions2 do action() + ) override _.Finalize() = dispose () @@ -725,13 +816,15 @@ type TcImportsDllInfoHack = FileName: string } -and TcImportsWeakHack (tcImports: WeakReference) = +and TcImportsWeakHack (tciLock: TcImportsLock, tcImports: WeakReference) = let mutable dllInfos: TcImportsDllInfoHack list = [] - member __.SetDllInfos (value: ImportedBinary list) = + member _.SetDllInfos (value: ImportedBinary list) = + tciLock.AcquireLock <| fun tcitok -> + RequireTcImportsLock(tcitok, dllInfos) dllInfos <- value |> List.map (fun x -> { FileName = x.FileName }) - member __.Base: TcImportsWeakHack option = + member _.Base: TcImportsWeakHack option = match tcImports.TryGetTarget() with | true, strong -> match strong.Base with @@ -739,48 +832,45 @@ and TcImportsWeakHack (tcImports: WeakReference) = Some baseTcImports.Weak | _ -> None - | _ -> + | _ -> None - member __.SystemRuntimeContainsType typeName = + member _.SystemRuntimeContainsType typeName = match tcImports.TryGetTarget () with | true, strong -> strong.SystemRuntimeContainsType typeName | _ -> false -#endif +#endif /// Represents a table of imported assemblies with their resolutions. /// Is a disposable object, but it is recommended not to explicitly call Dispose unless you absolutely know nothing will be using its contents after the disposal. /// Otherwise, simply allow the GC to collect this and it will properly call Dispose from the finalizer. -and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAssemblyResolutions, importsBase: TcImports option, - ilGlobalsOpt, dependencyProviderOpt: DependencyProvider option) +and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAssemblyResolutions, importsBase: TcImports option, dependencyProviderOpt: DependencyProvider option) #if !NO_EXTENSIONTYPING - as this + as this #endif = + let tciLock = TcImportsLock() + + //---- Start protected by tciLock ------- let mutable resolutions = initialResolutions - let mutable importsBase: TcImports option = importsBase let mutable dllInfos: ImportedBinary list = [] let mutable dllTable: NameMap = NameMap.empty let mutable ccuInfos: ImportedAssembly list = [] let mutable ccuTable: NameMap = NameMap.empty - - /// ccuThunks is a ConcurrentDictionary thus threadsafe - /// the key is a ccuThunk object, the value is a (unit->unit) func that when executed - /// the func is used to fix up the func and operates on data captured at the time the func is created. - /// func() is captured during phase2() of RegisterAndPrepareToImportReferencedDll(..) and PrepareToImportReferencedFSharpAssembly ( .. ) - let mutable ccuThunks = new ConcurrentDictionary unit)>() - + let mutable ccuThunks = ResizeArray unit)>() let disposeActions = ResizeArray() - let mutable disposed = false - let mutable ilGlobalsOpt = ilGlobalsOpt - let mutable tcGlobals = None let disposeTypeProviderActions = ResizeArray() + #if !NO_EXTENSIONTYPING - let mutable generatedTypeRoots = new System.Collections.Generic.Dictionary() - let mutable tcImportsWeak = TcImportsWeakHack (WeakReference<_> this) + let mutable generatedTypeRoots = new Dictionary() + let tcImportsWeak = TcImportsWeakHack (tciLock, WeakReference<_> this) #endif - let disposal = new TcImportsSafeDisposal(disposeActions, disposeTypeProviderActions) + let disposal = new TcImportsSafeDisposal(tciLock, disposeActions, disposeTypeProviderActions) + //---- End protected by tciLock ------- + + let mutable disposed = false // this doesn't need locking, it's only for debugging + let mutable tcGlobals = None // this doesn't need locking, it's set during construction of the TcImports let CheckDisposed() = if disposed then assert false @@ -789,24 +879,22 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse CheckDisposed() (disposal :> IDisposable).Dispose() - // This is used to fixe up unresolved ccuThunks that were created during assembly import. - // the ccuThunks dictionary is a ConcurrentDictionary and thus threadsafe. - // Algorithm: // Get a snapshot of the current unFixedUp ccuThunks. // for each of those thunks, remove them from the dictionary, so any parallel threads can't do this work // If it successfully removed it from the dictionary then do the fixup // If the thunk remains unresolved add it back to the ccuThunks dictionary for further processing // If not then move on to the next thunk let fixupOrphanCcus () = - let keys = ccuThunks.Keys - for ccuThunk in keys do - match ccuThunks.TryRemove(ccuThunk) with - | true, func -> + tciLock.AcquireLock <| fun tcitok -> + RequireTcImportsLock(tcitok, ccuThunks) + let contents = ccuThunks |> Seq.toArray + let unsuccessful = + [ for (ccuThunk, func) in contents do if ccuThunk.IsUnresolvedReference then func() if ccuThunk.IsUnresolvedReference then - ccuThunks.TryAdd(ccuThunk, func) |> ignore - | _ -> () + yield (ccuThunk, func) ] + ccuThunks <- ResizeArray (unsuccessful) let availableToOptionalCcu = function | ResolvedCcu ccu -> Some ccu @@ -826,58 +914,72 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse | None -> false | None -> false - member internal tcImports.Base = - CheckDisposed() - importsBase + member internal tcImports.Base = + CheckDisposed() + importsBase member tcImports.CcuTable = - CheckDisposed() - ccuTable - + tciLock.AcquireLock <| fun tcitok -> + RequireTcImportsLock(tcitok, ccuTable) + CheckDisposed() + ccuTable + member tcImports.DllTable = - CheckDisposed() - dllTable - + tciLock.AcquireLock <| fun tcitok -> + RequireTcImportsLock(tcitok, dllTable) + CheckDisposed() + dllTable + #if !NO_EXTENSIONTYPING - member tcImports.Weak = + member tcImports.Weak = CheckDisposed() tcImportsWeak #endif member tcImports.RegisterCcu ccuInfo = + tciLock.AcquireLock <| fun tcitok -> CheckDisposed() + RequireTcImportsLock(tcitok, ccuInfos) + RequireTcImportsLock(tcitok, ccuTable) ccuInfos <- ccuInfos ++ ccuInfo // Assembly Ref Resolution: remove this use of ccu.AssemblyName ccuTable <- NameMap.add (ccuInfo.FSharpViewOfMetadata.AssemblyName) ccuInfo ccuTable member tcImports.RegisterDll dllInfo = + tciLock.AcquireLock <| fun tcitok -> CheckDisposed() + RequireTcImportsLock(tcitok, dllInfos) + RequireTcImportsLock(tcitok, dllTable) dllInfos <- dllInfos ++ dllInfo #if !NO_EXTENSIONTYPING tcImportsWeak.SetDllInfos dllInfos #endif dllTable <- NameMap.add (getNameOfScopeRef dllInfo.ILScopeRef) dllInfo dllTable - member tcImports.GetDllInfos() : ImportedBinary list = + member tcImports.GetDllInfos() : ImportedBinary list = + tciLock.AcquireLock <| fun tcitok -> CheckDisposed() - match importsBase with - | Some importsBase-> importsBase.GetDllInfos() @ dllInfos + RequireTcImportsLock(tcitok, dllInfos) + match importsBase with + | Some importsBase -> importsBase.GetDllInfos() @ dllInfos | None -> dllInfos - - member tcImports.AllAssemblyResolutions() = + + member tcImports.AllAssemblyResolutions() = + tciLock.AcquireLock <| fun tcitok -> CheckDisposed() + RequireTcImportsLock(tcitok, resolutions) let ars = resolutions.GetAssemblyResolutions() - match importsBase with + match importsBase with | Some importsBase-> importsBase.AllAssemblyResolutions() @ ars | None -> ars - + member tcImports.TryFindDllInfo (ctok: CompilationThreadToken, m, assemblyName, lookupOnly) = CheckDisposed() - let rec look (t: TcImports) = + let rec look (t: TcImports) = match NameMap.tryFind assemblyName t.DllTable with | Some res -> Some res - | None -> - match t.Base with + | None -> + match t.Base with | Some t2 -> look t2 | None -> None match look tcImports with @@ -887,40 +989,44 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse look tcImports member tcImports.FindDllInfo (ctok, m, assemblyName) = - match tcImports.TryFindDllInfo (ctok, m, assemblyName, lookupOnly=false) with + match tcImports.TryFindDllInfo (ctok, m, assemblyName, lookupOnly=false) with | Some res -> res | None -> error(Error(FSComp.SR.buildCouldNotResolveAssembly assemblyName, m)) member tcImports.GetImportedAssemblies() = + tciLock.AcquireLock <| fun tcitok -> CheckDisposed() + RequireTcImportsLock(tcitok, ccuInfos) match importsBase with - | Some importsBase-> List.append (importsBase.GetImportedAssemblies()) ccuInfos + | Some importsBase -> List.append (importsBase.GetImportedAssemblies()) ccuInfos | None -> ccuInfos member tcImports.GetCcusExcludingBase() = + tciLock.AcquireLock <| fun tcitok -> CheckDisposed() + RequireTcImportsLock(tcitok, ccuInfos) ccuInfos |> List.map (fun x -> x.FSharpViewOfMetadata) member tcImports.GetCcusInDeclOrder() = CheckDisposed() - List.map (fun x -> x.FSharpViewOfMetadata) (tcImports.GetImportedAssemblies()) + List.map (fun x -> x.FSharpViewOfMetadata) (tcImports.GetImportedAssemblies()) - // This is the main "assembly reference --> assembly" resolution routine. + // This is the main "assembly reference --> assembly" resolution routine. member tcImports.FindCcuInfo (ctok, m, assemblyName, lookupOnly) = CheckDisposed() let rec look (t: TcImports) = match NameMap.tryFind assemblyName t.CcuTable with | Some res -> Some res - | None -> - match t.Base with - | Some t2 -> look t2 + | None -> + match t.Base with + | Some t2 -> look t2 | None -> None match look tcImports with | Some res -> ResolvedImportedAssembly res | None -> tcImports.ImplicitLoadIfAllowed(ctok, m, assemblyName, lookupOnly) - match look tcImports with + match look tcImports with | Some res -> ResolvedImportedAssembly res | None -> UnresolvedImportedAssembly assemblyName @@ -930,46 +1036,59 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse | ResolvedImportedAssembly importedAssembly -> ResolvedCcu(importedAssembly.FSharpViewOfMetadata) | UnresolvedImportedAssembly assemblyName -> UnresolvedCcu assemblyName - member tcImports.FindCcuFromAssemblyRef(ctok, m, assemblyRef: ILAssemblyRef) = + member tcImports.FindCcuFromAssemblyRef(ctok, m, assemblyRef: ILAssemblyRef) = CheckDisposed() match tcImports.FindCcuInfo(ctok, m, assemblyRef.Name, lookupOnly=false) with | ResolvedImportedAssembly importedAssembly -> ResolvedCcu(importedAssembly.FSharpViewOfMetadata) | UnresolvedImportedAssembly _ -> UnresolvedCcu(assemblyRef.QualifiedName) + member tcImports.TryFindXmlDocumentationInfo(assemblyName: string) = + CheckDisposed() + let rec look (t: TcImports) = + match NameMap.tryFind assemblyName t.CcuTable with + | Some res -> Some res + | None -> + match t.Base with + | Some t2 -> look t2 + | None -> None + + match look tcImports with + | Some res -> res.FSharpViewOfMetadata.Deref.XmlDocumentationInfo + | _ -> None #if !NO_EXTENSIONTYPING - member tcImports.GetProvidedAssemblyInfo(ctok, m, assembly: Tainted) = + member tcImports.GetProvidedAssemblyInfo(ctok, m, assembly: Tainted) = let anameOpt = assembly.PUntaint((fun assembly -> match assembly with null -> None | a -> Some (a.GetName())), m) - match anameOpt with + match anameOpt with | None -> false, None - | Some aname -> + | Some aname -> let ilShortAssemName = aname.Name - match tcImports.FindCcu (ctok, m, ilShortAssemName, lookupOnly=true) with - | ResolvedCcu ccu -> - if ccu.IsProviderGenerated then + match tcImports.FindCcu (ctok, m, ilShortAssemName, lookupOnly=true) with + | ResolvedCcu ccu -> + if ccu.IsProviderGenerated then let dllinfo = tcImports.FindDllInfo(ctok, m, ilShortAssemName) true, dllinfo.ProviderGeneratedStaticLinkMap else false, None - | UnresolvedCcu _ -> + | UnresolvedCcu _ -> let g = tcImports.GetTcGlobals() let ilScopeRef = ILScopeRef.Assembly (ILAssemblyRef.FromAssemblyName aname) let fileName = aname.Name + ".dll" let bytes = assembly.PApplyWithProvider((fun (assembly, provider) -> assembly.GetManifestModuleContents provider), m).PUntaint(id, m) let tcConfig = tcConfigP.Get ctok - let ilModule, ilAssemblyRefs = - let opts: ILReaderOptions = + let ilModule, ilAssemblyRefs = + let opts: ILReaderOptions = { reduceMemoryUsage = tcConfig.reduceMemoryUsage - pdbDirPath = None + pdbDirPath = None metadataOnly = MetadataOnlyFlag.Yes tryGetMetadataSnapshot = tcConfig.tryGetMetadataSnapshot } let reader = OpenILModuleReaderFromBytes fileName bytes opts reader.ILModuleDef, reader.ILAssemblyRefs let theActualAssembly = assembly.PUntaint((fun x -> x.Handle), m) - let dllinfo = - { RawMetadata= RawFSharpAssemblyDataBackedByFileOnDisk (ilModule, ilAssemblyRefs) + let dllinfo = + { RawMetadata= RawFSharpAssemblyDataBackedByFileOnDisk (ilModule, ilAssemblyRefs) FileName=fileName ProviderGeneratedAssembly=Some theActualAssembly IsProviderGenerated=true @@ -978,9 +1097,9 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse ILAssemblyRefs = ilAssemblyRefs } tcImports.RegisterDll dllinfo - let ccuContents = Construct.NewCcuContents ilScopeRef m ilShortAssemName (Construct.NewEmptyModuleOrNamespaceType Namespace) + let ccuContents = Construct.NewCcuContents ilScopeRef m ilShortAssemName (Construct.NewEmptyModuleOrNamespaceType Namespace) - let ccuData: CcuData = + let ccuData: CcuData = { IsFSharp=false UsesFSharp20PlusQuotations=false InvalidateEvent=(new Event<_>()).Publish @@ -989,17 +1108,22 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse Contents = ccuContents ILScopeRef = ilScopeRef Stamp = newStamp() - SourceCodeDirectory = "" + SourceCodeDirectory = "" FileName = Some fileName MemberSignatureEquality = (fun ty1 ty2 -> typeEquivAux EraseAll g ty1 ty2) ImportProvidedType = (fun ty -> Import.ImportProvidedType (tcImports.GetImportMap()) m ty) TryGetILModuleDef = (fun () -> Some ilModule) - TypeForwarders = Map.empty } - + TypeForwarders = Map.empty + XmlDocumentationInfo = + match tcConfig.xmlDocInfoLoader with + | Some xmlDocInfoLoader -> xmlDocInfoLoader.TryLoad(fileName, ilModule) + | _ -> None + } + let ccu = CcuThunk.Create(ilShortAssemName, ccuData) - let ccuinfo = - { FSharpViewOfMetadata=ccu - ILScopeRef = ilScopeRef + let ccuinfo = + { FSharpViewOfMetadata=ccu + ILScopeRef = ilScopeRef AssemblyAutoOpenAttributes = [] AssemblyInternalsVisibleToAttributes = [] IsProviderGenerated = true @@ -1009,16 +1133,20 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse // Yes, it is generative true, dllinfo.ProviderGeneratedStaticLinkMap - member tcImports.RecordGeneratedTypeRoot root = - // checking if given ProviderGeneratedType was already recorded before (probably for another set of static parameters) + member tcImports.RecordGeneratedTypeRoot root = + tciLock.AcquireLock <| fun tcitok -> + // checking if given ProviderGeneratedType was already recorded before (probably for another set of static parameters) let (ProviderGeneratedType(_, ilTyRef, _)) = root - let index = + let index = + RequireTcImportsLock(tcitok, generatedTypeRoots) match generatedTypeRoots.TryGetValue ilTyRef with | true, (index, _) -> index | false, _ -> generatedTypeRoots.Count generatedTypeRoots.[ilTyRef] <- (index, root) - member tcImports.ProviderGeneratedTypeRoots = + member tcImports.ProviderGeneratedTypeRoots = + tciLock.AcquireLock <| fun tcitok -> + RequireTcImportsLock(tcitok, generatedTypeRoots) generatedTypeRoots.Values |> Seq.sortBy fst |> Seq.map snd @@ -1026,7 +1154,9 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse #endif member private tcImports.AttachDisposeAction action = + tciLock.AcquireLock <| fun tcitok -> CheckDisposed() + RequireTcImportsLock(tcitok, disposeActions) disposeActions.Add action #if !NO_EXTENSIONTYPING @@ -1034,21 +1164,21 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse CheckDisposed() disposeTypeProviderActions.Add action #endif - - // Note: the returned binary reader is associated with the tcImports, i.e. when the tcImports are closed - // then the reader is closed. - member tcImports.OpenILBinaryModule(ctok, filename, m) = + + // Note: the returned binary reader is associated with the tcImports, i.e. when the tcImports are closed + // then the reader is closed. + member tcImports.OpenILBinaryModule(ctok, filename, m) = try CheckDisposed() let tcConfig = tcConfigP.Get ctok let pdbDirPath = - // We open the pdb file if one exists parallel to the binary we - // are reading, so that --standalone will preserve debug information. - if tcConfig.openDebugInformationForLaterStaticLinking then - let pdbDir = try Filename.directoryName filename with _ -> "." - let pdbFile = (try Filename.chopExtension filename with _ -> filename) + ".pdb" + // We open the pdb file if one exists parallel to the binary we + // are reading, so that --standalone will preserve debug information. + if tcConfig.openDebugInformationForLaterStaticLinking then + let pdbDir = try FileSystem.GetDirectoryNameShim filename with _ -> "." + let pdbFile = (try FileSystemUtils.chopExtension filename with _ -> filename) + ".pdb" - if FileSystem.SafeExists pdbFile then + if FileSystem.FileExistsShim pdbFile then if verbose then dprintf "reading PDB file %s from directory %s\n" pdbFile pdbDir Some pdbDir else @@ -1069,41 +1199,45 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse CheckDisposed() let auxModTable = HashMultiMap(10, HashIdentity.Structural) fun viewedScopeRef -> - + let tcConfig = tcConfigP.Get ctok match viewedScopeRef with - | ILScopeRef.Module modref -> + | ILScopeRef.Module modref -> let key = modref.Name if not (auxModTable.ContainsKey key) then let resolution = tcConfig.ResolveLibWithDirectories (CcuLoadFailureAction.RaiseError, AssemblyReference(m, key, None)) |> Option.get let ilModule, _ = tcImports.OpenILBinaryModule(ctok, resolution.resolvedPath, m) auxModTable.[key] <- ilModule - auxModTable.[key] + auxModTable.[key] - | _ -> + | _ -> error(InternalError("Unexpected ILScopeRef.Local or ILScopeRef.Assembly in exported type table", m)) member tcImports.IsAlreadyRegistered nm = CheckDisposed() - tcImports.GetDllInfos() |> List.exists (fun dll -> - match dll.ILScopeRef with - | ILScopeRef.Assembly a -> a.Name = nm + tcImports.GetDllInfos() |> List.exists (fun dll -> + match dll.ILScopeRef with + | ILScopeRef.Assembly a -> a.Name = nm | _ -> false) - member tcImports.DependencyProvider = + member tcImports.DependencyProvider = CheckDisposed() - match dependencyProviderOpt with + match dependencyProviderOpt with | None -> Debug.Assert(false, "this should never be called on FrameworkTcImports") new DependencyProvider(null, null) | Some dependencyProvider -> dependencyProvider - member tcImports.GetImportMap() = + member tcImports.GetImportMap() = CheckDisposed() - let loaderInterface = - { new Import.AssemblyLoader with - member x.FindCcuFromAssemblyRef (ctok, m, ilAssemblyRef) = + let loaderInterface = + { new Import.AssemblyLoader with + member x.FindCcuFromAssemblyRef (ctok, m, ilAssemblyRef) = tcImports.FindCcuFromAssemblyRef (ctok, m, ilAssemblyRef) + + member x.TryFindXmlDocumentationInfo (assemblyName) = + tcImports.TryFindXmlDocumentationInfo(assemblyName) + #if !NO_EXTENSIONTYPING member x.GetProvidedAssemblyInfo (ctok, m, assembly) = tcImports.GetProvidedAssemblyInfo (ctok, m, assembly) member x.RecordGeneratedTypeRoot root = tcImports.RecordGeneratedTypeRoot root @@ -1111,7 +1245,7 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse } new Import.ImportMap (tcImports.GetTcGlobals(), loaderInterface) - // Note the tcGlobals are only available once mscorlib and fslib have been established. For TcImports, + // Note the tcGlobals are only available once mscorlib and fslib have been established. For TcImports, // they are logically only needed when converting AbsIL data structures into F# data structures, and // when converting AbsIL types in particular, since these types are normalized through the tables // in the tcGlobals (E.g. normalizing 'System.Int32' to 'int'). On the whole ImportILAssembly doesn't @@ -1121,44 +1255,40 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse // ImportILAssembly had a tcGlobals available when it really needs it. member tcImports.GetTcGlobals() : TcGlobals = CheckDisposed() - match tcGlobals with - | Some g -> g - | None -> - match importsBase with - | Some b -> b.GetTcGlobals() + match tcGlobals with + | Some g -> g + | None -> + match importsBase with + | Some b -> b.GetTcGlobals() | None -> failwith "unreachable: GetGlobals - are the references to mscorlib.dll and FSharp.Core.dll valid?" - member private tcImports.SetILGlobals ilg = - CheckDisposed() - ilGlobalsOpt <- Some ilg - member private tcImports.SetTcGlobals g = CheckDisposed() tcGlobals <- Some g #if !NO_EXTENSIONTYPING - member private tcImports.InjectProvidedNamespaceOrTypeIntoEntity - (typeProviderEnvironment, - tcConfig: TcConfig, - m, entity: Entity, - injectedNamespace, remainingNamespace, - provider, - st: Tainted option) = + member private tcImports.InjectProvidedNamespaceOrTypeIntoEntity + (typeProviderEnvironment, + tcConfig: TcConfig, + m, entity: Entity, + injectedNamespace, remainingNamespace, + provider, + st: Tainted option) = match remainingNamespace with | next :: rest -> - // Inject the namespace entity + // Inject the namespace entity match entity.ModuleOrNamespaceType.ModulesAndNamespacesByDemangledName.TryFind next with | Some childEntity -> tcImports.InjectProvidedNamespaceOrTypeIntoEntity (typeProviderEnvironment, tcConfig, m, childEntity, next :: injectedNamespace, rest, provider, st) - | None -> + | None -> // Build up the artificial namespace if there is not a real one. let cpath = CompPath(ILScopeRef.Local, injectedNamespace |> List.rev |> List.map (fun n -> (n, ModuleOrNamespaceKind.Namespace)) ) let mid = ident (next, rangeStartup) let mty = Construct.NewEmptyModuleOrNamespaceType Namespace - let newNamespace = Construct.NewModuleOrNamespace (Some cpath) taccessPublic mid XmlDoc.Empty [] (MaybeLazy.Strict mty) + let newNamespace = Construct.NewModuleOrNamespace (Some cpath) taccessPublic mid XmlDoc.Empty [] (MaybeLazy.Strict mty) entity.ModuleOrNamespaceType.AddModuleOrNamespaceByMutation newNamespace tcImports.InjectProvidedNamespaceOrTypeIntoEntity (typeProviderEnvironment, tcConfig, m, newNamespace, next :: injectedNamespace, rest, provider, st) - | [] -> + | [] -> match st with | Some st -> // Inject the wrapper type into the provider assembly. @@ -1166,73 +1296,73 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse // Generated types get properly injected into the provided (i.e. generated) assembly CCU in tc.fs let importProvidedType t = Import.ImportProvidedType (tcImports.GetImportMap()) m t - let isSuppressRelocate = tcConfig.isInteractive || st.PUntaint((fun st -> st.IsSuppressRelocate), m) - let newEntity = Construct.NewProvidedTycon(typeProviderEnvironment, st, importProvidedType, isSuppressRelocate, m) + let isSuppressRelocate = tcConfig.isInteractive || st.PUntaint((fun st -> st.IsSuppressRelocate), m) + let newEntity = Construct.NewProvidedTycon(typeProviderEnvironment, st, importProvidedType, isSuppressRelocate, m) entity.ModuleOrNamespaceType.AddProvidedTypeEntity newEntity | None -> () entity.entity_tycon_repr <- - match entity.TypeReprInfo with - // This is the first extension - | TNoRepr -> + match entity.TypeReprInfo with + // This is the first extension + | TNoRepr -> TProvidedNamespaceExtensionPoint(typeProviderEnvironment, [provider]) - + // Add to the existing list of extensions - | TProvidedNamespaceExtensionPoint(resolutionFolder, prior) as repr -> - if not(prior |> List.exists(fun r->Tainted.EqTainted r provider)) then + | TProvidedNamespaceExtensionPoint(resolutionFolder, prior) as repr -> + if not(prior |> List.exists(fun r->Tainted.EqTainted r provider)) then TProvidedNamespaceExtensionPoint(resolutionFolder, provider :: prior) - else + else repr | _ -> failwith "Unexpected representation in namespace entity referred to by a type provider" - member tcImportsStrong.ImportTypeProviderExtensions - (ctok, tcConfig: TcConfig, - fileNameOfRuntimeAssembly, - ilScopeRefOfRuntimeAssembly, - runtimeAssemblyAttributes: ILAttribute list, - entityToInjectInto, invalidateCcu: Event<_>, m) = + member tcImportsStrong.ImportTypeProviderExtensions + (ctok, tcConfig: TcConfig, + fileNameOfRuntimeAssembly, + ilScopeRefOfRuntimeAssembly, + runtimeAssemblyAttributes: ILAttribute list, + entityToInjectInto, invalidateCcu: Event<_>, m) = let startingErrorCount = CompileThreadStatic.ErrorLogger.ErrorCount - // Find assembly level TypeProviderAssemblyAttributes. These will point to the assemblies that + // Find assembly level TypeProviderAssemblyAttributes. These will point to the assemblies that // have class which implement ITypeProvider and which have TypeProviderAttribute on them. - let designTimeAssemblyNames = - runtimeAssemblyAttributes - |> List.choose (TryDecodeTypeProviderAssemblyAttr (defaultArg ilGlobalsOpt EcmaMscorlibILGlobals)) + let designTimeAssemblyNames = + runtimeAssemblyAttributes + |> List.choose (TryDecodeTypeProviderAssemblyAttr) // If no design-time assembly is specified, use the runtime assembly |> List.map (function null -> fileNameOfRuntimeAssembly | s -> s) - // For each simple name of a design-time assembly, we take the first matching one in the order they are + // For each simple name of a design-time assembly, we take the first matching one in the order they are // specified in the attributes |> List.distinctBy (fun s -> try Path.GetFileNameWithoutExtension s with _ -> s) if not (List.isEmpty designTimeAssemblyNames) then // Find the SystemRuntimeAssemblyVersion value to report in the TypeProviderConfig. - let primaryAssemblyVersion = + let primaryAssemblyVersion = let primaryAssemblyRef = tcConfig.PrimaryAssemblyDllReference() let resolution = tcConfig.ResolveLibWithDirectories (CcuLoadFailureAction.RaiseError, primaryAssemblyRef) |> Option.get // MSDN: this method causes the file to be opened and closed, but the assembly is not added to this domain let name = System.Reflection.AssemblyName.GetAssemblyName(resolution.resolvedPath) name.Version - let typeProviderEnvironment = + let typeProviderEnvironment = { resolutionFolder = tcConfig.implicitIncludeDir outputFile = tcConfig.outputFile - showResolutionMessages = tcConfig.showExtensionTypeMessages + showResolutionMessages = tcConfig.showExtensionTypeMessages referencedAssemblies = Array.distinct [| for r in tcImportsStrong.AllAssemblyResolutions() -> r.resolvedPath |] temporaryFolder = FileSystem.GetTempPathShim() } // The type provider should not hold strong references to disposed // TcImport objects. So the callbacks provided in the type provider config - // dispatch via a thunk which gets set to a non-resource-capturing - // failing function when the object is disposed. - let systemRuntimeContainsType = + // dispatch via a thunk which gets set to a non-resource-capturing + // failing function when the object is disposed. + let systemRuntimeContainsType = // NOTE: do not touch this, edit: but we did, we had no choice - TPs cannot hold a strong reference on TcImports "ever". let tcImports = tcImportsWeak let mutable systemRuntimeContainsTypeRef = fun typeName -> tcImports.SystemRuntimeContainsType typeName tcImportsStrong.AttachDisposeTypeProviderAction(fun () -> systemRuntimeContainsTypeRef <- fun _ -> raise (System.ObjectDisposedException("The type provider has been disposed"))) - fun arg -> systemRuntimeContainsTypeRef arg + fun arg -> systemRuntimeContainsTypeRef arg let providers = [ for designTimeAssemblyName in designTimeAssemblyNames do @@ -1248,16 +1378,16 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse m) ] // Note, type providers are disposable objects. The TcImports owns the provider objects - when/if it is disposed, the providers are disposed. // We ignore all exceptions from provider disposal. - for provider in providers do - tcImportsStrong.AttachDisposeTypeProviderAction(fun () -> - try + for provider in providers do + tcImportsStrong.AttachDisposeTypeProviderAction(fun () -> + try provider.PUntaintNoFailure(fun x -> x.Dispose()) - with e -> + with e -> ()) - + // Add the invalidation signal handlers to each provider - for provider in providers do - provider.PUntaint((fun tp -> + for provider in providers do + provider.PUntaint((fun tp -> // Register the type provider invalidation handler. // @@ -1265,33 +1395,33 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse // lifetime of captured objects, especially in case the type provider instance gets leaked // or keeps itself alive mistakenly, e.g. via some global state in the type provider instance. // - // The closure captures + // The closure captures // 1. an Event value, ultimately this is made available in all CCus as ccu.InvalidateEvent - // 2. any handlers registered to ccu.InvalidateEvent + // 2. any handlers registered to ccu.InvalidateEvent // 3. a message string // - // Note that the invalidation handler does not explicitly capture the TcImports. + // Note that the invalidation handler does not explicitly capture the TcImports. // The only place where handlers are registered is to ccu.InvalidateEvent is in IncrementalBuilder.fs. let capturedInvalidateCcu = invalidateCcu let capturedMessage = "The provider '" + fileNameOfRuntimeAssembly + "' reported a change" - let handler = tp.Invalidate.Subscribe(fun _ -> capturedInvalidateCcu.Trigger (capturedMessage)) + let handler = tp.Invalidate.Subscribe(fun _ -> capturedInvalidateCcu.Trigger (capturedMessage)) // When the TcImports is disposed we detach the invalidation callback - tcImportsStrong.AttachDisposeTypeProviderAction(fun () -> try handler.Dispose() with _ -> ())), m) - + tcImportsStrong.AttachDisposeTypeProviderAction(fun () -> try handler.Dispose() with _ -> ())), m) + match providers with - | [] -> - warning(Error(FSComp.SR.etHostingAssemblyFoundWithoutHosts(fileNameOfRuntimeAssembly, typeof.FullName), m)) - | _ -> + | [] -> + warning(Error(FSComp.SR.etHostingAssemblyFoundWithoutHosts(fileNameOfRuntimeAssembly, typeof.FullName), m)) + | _ -> #if DEBUG if typeProviderEnvironment.showResolutionMessages then dprintfn "Found extension type hosting hosting assembly '%s' with the following extensions:" fileNameOfRuntimeAssembly providers |> List.iter(fun provider ->dprintfn " %s" (ExtensionTyping.DisplayNameOfTypeProvider(provider.TypeProvider, m))) #endif - - for provider in providers do + + for provider in providers do try // Inject an entity for the namespace, or if one already exists, then record this as a provider // for that namespace. @@ -1299,17 +1429,17 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse let path = ExtensionTyping.GetProvidedNamespaceAsPath(m, provider, providedNamespace.PUntaint((fun r -> r.NamespaceName), m)) tcImportsStrong.InjectProvidedNamespaceOrTypeIntoEntity (typeProviderEnvironment, tcConfig, m, entityToInjectInto, [], path, provider, None) - // Inject entities for the types returned by provider.GetTypes(). + // Inject entities for the types returned by provider.GetTypes(). // // NOTE: The types provided by GetTypes() are available for name resolution // when the namespace is "opened". This is part of the specification of the language // feature. let tys = providedNamespace.PApplyArray((fun provider -> provider.GetTypes()), "GetTypes", m) let ptys = [| for ty in tys -> ty.PApply((fun ty -> ty |> ProvidedType.CreateNoContext), m) |] - for st in ptys do + for st in ptys do tcImportsStrong.InjectProvidedNamespaceOrTypeIntoEntity (typeProviderEnvironment, tcConfig, m, entityToInjectInto, [], path, provider, Some st) - for providedNestedNamespace in providedNamespace.PApplyArray((fun provider -> provider.GetNestedNamespaces()), "GetNestedNamespaces", m) do + for providedNestedNamespace in providedNamespace.PApplyArray((fun provider -> provider.GetNestedNamespaces()), "GetNestedNamespaces", m) do loop providedNestedNamespace RequireCompilationThread ctok // IProvidedType.GetNamespaces is an example of a type provider call @@ -1317,59 +1447,58 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse for providedNamespace in providedNamespaces do loop providedNamespace - with e -> + with e -> errorRecovery e m if startingErrorCount Option.isSome // Add a referenced assembly // - // Retargetable assembly refs are required for binaries that must run + // Retargetable assembly refs are required for binaries that must run // against DLLs supported by multiple publishers. For example // Compact Framework binaries must use this. However it is not // clear when else it is required, e.g. for Mono. - + member tcImports.PrepareToImportReferencedILAssembly (ctok, m, filename, dllinfo: ImportedBinary) = CheckDisposed() let tcConfig = tcConfigP.Get ctok assert dllinfo.RawMetadata.TryGetILModuleDef().IsSome let ilModule = dllinfo.RawMetadata.TryGetILModuleDef().Value let ilScopeRef = dllinfo.ILScopeRef - let aref = - match ilScopeRef with - | ILScopeRef.Assembly aref -> aref + let aref = + match ilScopeRef with + | ILScopeRef.Assembly aref -> aref | _ -> error(InternalError("PrepareToImportReferencedILAssembly: cannot reference .NET netmodules directly, reference the containing assembly instead", m)) let nm = aref.Name if verbose then dprintn ("Converting IL assembly to F# data structures "+nm) let auxModuleLoader = tcImports.MkLoaderForMultiModuleILAssemblies ctok m let invalidateCcu = new Event<_>() - let ccu = Import.ImportILAssembly(tcImports.GetImportMap, m, auxModuleLoader, ilScopeRef, tcConfig.implicitIncludeDir, Some filename, ilModule, invalidateCcu.Publish) - - let ilg = defaultArg ilGlobalsOpt EcmaMscorlibILGlobals + let ccu = Import.ImportILAssembly(tcImports.GetImportMap, m, auxModuleLoader, tcConfig.xmlDocInfoLoader, ilScopeRef, tcConfig.implicitIncludeDir, Some filename, ilModule, invalidateCcu.Publish) - let ccuinfo = - { FSharpViewOfMetadata=ccu - ILScopeRef = ilScopeRef - AssemblyAutoOpenAttributes = GetAutoOpenAttributes ilg ilModule - AssemblyInternalsVisibleToAttributes = GetInternalsVisibleToAttributes ilg ilModule + let ccuinfo = + { FSharpViewOfMetadata=ccu + ILScopeRef = ilScopeRef + AssemblyAutoOpenAttributes = GetAutoOpenAttributes ilModule + AssemblyInternalsVisibleToAttributes = GetInternalsVisibleToAttributes ilModule #if !NO_EXTENSIONTYPING - IsProviderGenerated = false + IsProviderGenerated = false TypeProviders = [] #endif FSharpOptimizationData = notlazy None } tcImports.RegisterCcu ccuinfo + let phase2 () = #if !NO_EXTENSIONTYPING ccuinfo.TypeProviders <- tcImports.ImportTypeProviderExtensions (ctok, tcConfig, filename, ilScopeRef, ilModule.ManifestOfAssembly.CustomAttrs.AsList, ccu.Contents, invalidateCcu, m) @@ -1382,36 +1511,36 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse #if !NO_EXTENSIONTYPING let tcConfig = tcConfigP.Get ctok #endif - let ilModule = dllinfo.RawMetadata - let ilScopeRef = dllinfo.ILScopeRef - let ilShortAssemName = getNameOfScopeRef ilScopeRef + let ilModule = dllinfo.RawMetadata + let ilScopeRef = dllinfo.ILScopeRef + let ilShortAssemName = getNameOfScopeRef ilScopeRef if verbose then dprintn ("Converting F# assembly to F# data structures "+(getNameOfScopeRef ilScopeRef)) if verbose then dprintn ("Relinking interface info from F# assembly "+ilShortAssemName) let optDataReaders = ilModule.GetRawFSharpOptimizationData(m, ilShortAssemName, filename) - let ccuRawDataAndInfos = + let ccuRawDataAndInfos = ilModule.GetRawFSharpSignatureData(m, ilShortAssemName, filename) - |> List.map (fun (ccuName, sigDataReader) -> + |> List.map (fun (ccuName, sigDataReader) -> let data = GetSignatureData (filename, ilScopeRef, ilModule.TryGetILModuleDef(), sigDataReader) let optDatas = Map.ofList optDataReaders - let minfo: PickledCcuInfo = data.RawData - let mspec = minfo.mspec + let minfo: PickledCcuInfo = data.RawData + let mspec = minfo.mspec #if !NO_EXTENSIONTYPING let invalidateCcu = new Event<_>() #endif let codeDir = minfo.compileTimeWorkingDir - let ccuData: CcuData = + let ccuData: CcuData = { ILScopeRef=ilScopeRef Stamp = newStamp() - FileName = Some filename + FileName = Some filename QualifiedName= Some(ilScopeRef.QualifiedName) SourceCodeDirectory = codeDir (* note: in some cases we fix up this information later *) IsFSharp=true - Contents = mspec + Contents = mspec #if !NO_EXTENSIONTYPING InvalidateEvent=invalidateCcu.Publish IsProviderGenerated = false @@ -1420,44 +1549,50 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse TryGetILModuleDef = ilModule.TryGetILModuleDef UsesFSharp20PlusQuotations = minfo.usesQuotations MemberSignatureEquality= (fun ty1 ty2 -> typeEquivAux EraseAll (tcImports.GetTcGlobals()) ty1 ty2) - TypeForwarders = ImportILAssemblyTypeForwarders(tcImports.GetImportMap, m, ilModule.GetRawTypeForwarders()) } + TypeForwarders = ImportILAssemblyTypeForwarders(tcImports.GetImportMap, m, ilModule.GetRawTypeForwarders()) + XmlDocumentationInfo = + match tcConfig.xmlDocInfoLoader, ilModule.TryGetILModuleDef() with + | Some xmlDocInfoLoader, Some ilModuleDef -> xmlDocInfoLoader.TryLoad(filename, ilModuleDef) + | _ -> None + } let ccu = CcuThunk.Create(ccuName, ccuData) - let optdata = - lazy - (match Map.tryFind ccuName optDatas with - | None -> - if verbose then dprintf "*** no optimization data for CCU %s, was DLL compiled with --no-optimization-data??\n" ccuName + let optdata = + lazy + (match Map.tryFind ccuName optDatas with + | None -> + if verbose then dprintf "*** no optimization data for CCU %s, was DLL compiled with --no-optimization-data??\n" ccuName None | Some info -> let data = GetOptimizationData (filename, ilScopeRef, ilModule.TryGetILModuleDef(), info) let fixupThunk () = data.OptionalFixup(fun nm -> availableToOptionalCcu(tcImports.FindCcu(ctok, m, nm, lookupOnly=false))) // Make a note of all ccuThunks that may still need to be fixed up when other dlls are loaded - for ccuThunk in data.FixupThunks do - if ccuThunk.IsUnresolvedReference then - ccuThunks.TryAdd(ccuThunk, fun () -> fixupThunk () |> ignore) |> ignore + tciLock.AcquireLock (fun tcitok -> + RequireTcImportsLock(tcitok, ccuThunks) + for ccuThunk in data.FixupThunks do + if ccuThunk.IsUnresolvedReference then + ccuThunks.Add(ccuThunk, fun () -> fixupThunk () |> ignore) |> ignore + ) if verbose then dprintf "found optimization data for CCU %s\n" ccuName Some (fixupThunk ())) - let ilg = defaultArg ilGlobalsOpt EcmaMscorlibILGlobals - - let ccuinfo = - { FSharpViewOfMetadata=ccu - AssemblyAutoOpenAttributes = ilModule.GetAutoOpenAttributes ilg - AssemblyInternalsVisibleToAttributes = ilModule.GetInternalsVisibleToAttributes ilg - FSharpOptimizationData=optdata + let ccuinfo = + { FSharpViewOfMetadata=ccu + AssemblyAutoOpenAttributes = ilModule.GetAutoOpenAttributes() + AssemblyInternalsVisibleToAttributes = ilModule.GetInternalsVisibleToAttributes() + FSharpOptimizationData=optdata #if !NO_EXTENSIONTYPING IsProviderGenerated = false TypeProviders = [] #endif - ILScopeRef = ilScopeRef } + ILScopeRef = ilScopeRef } - let phase2() = + let phase2() = #if !NO_EXTENSIONTYPING - match ilModule.TryGetILModuleDef() with + match ilModule.TryGetILModuleDef() with | None -> () // no type providers can be used without a real IL Module present | Some ilModule -> let tps = tcImports.ImportTypeProviderExtensions (ctok, tcConfig, filename, ilScopeRef, ilModule.ManifestOfAssembly.CustomAttrs.AsList, ccu.Contents, invalidateCcu, m) @@ -1467,7 +1602,7 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse #endif data, ccuinfo, phase2) - // Register all before relinking to cope with mutually-referential ccus + // Register all before relinking to cope with mutually-referential ccus ccuRawDataAndInfos |> List.iter (p23 >> tcImports.RegisterCcu) let phase2 () = (* Relink *) @@ -1478,7 +1613,9 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse fixupThunk() for ccuThunk in data.FixupThunks do if ccuThunk.IsUnresolvedReference then - ccuThunks.TryAdd(ccuThunk, fixupThunk) |> ignore + tciLock.AcquireLock <| fun tcitok -> + RequireTcImportsLock(tcitok, ccuThunks) + ccuThunks.Add(ccuThunk, fixupThunk) |> ignore ) #if !NO_EXTENSIONTYPING ccuRawDataAndInfos |> List.iter (fun (_, _, phase2) -> phase2()) @@ -1487,35 +1624,43 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse phase2 // NOTE: When used in the Language Service this can cause the transitive checking of projects. Hence it must be cancellable. - member tcImports.RegisterAndPrepareToImportReferencedDll (ctok, r: AssemblyResolution) : Cancellable<_ * (unit -> AvailableImportedAssembly list)> = - cancellable { + member tcImports.TryRegisterAndPrepareToImportReferencedDll (ctok, r: AssemblyResolution) : NodeCode<(_ * (unit -> AvailableImportedAssembly list)) option> = + node { CheckDisposed() let m = r.originalReference.Range let filename = r.resolvedPath - let! contentsOpt = - cancellable { - match r.ProjectReference with - | Some ilb -> return! ilb.EvaluateRawContents ctok - | None -> return None + let! contentsOpt = + node { + match r.ProjectReference with + | Some ilb -> + return! ilb.EvaluateRawContents() + | None -> + return None } - let assemblyData = - match contentsOpt with + // If we have a project reference but did not get any valid contents, + // just return None and do not attempt to read elsewhere. + if contentsOpt.IsNone && r.ProjectReference.IsSome then + return None + else + + let assemblyData = + match contentsOpt with | Some ilb -> ilb - | None -> + | None -> let ilModule, ilAssemblyRefs = tcImports.OpenILBinaryModule(ctok, filename, m) RawFSharpAssemblyDataBackedByFileOnDisk (ilModule, ilAssemblyRefs) :> IRawFSharpAssemblyData - let ilShortAssemName = assemblyData.ShortAssemblyName + let ilShortAssemName = assemblyData.ShortAssemblyName let ilScopeRef = assemblyData.ILScopeRef - if tcImports.IsAlreadyRegistered ilShortAssemName then + if tcImports.IsAlreadyRegistered ilShortAssemName then let dllinfo = tcImports.FindDllInfo(ctok, m, ilShortAssemName) - let phase2() = [tcImports.FindCcuInfo(ctok, m, ilShortAssemName, lookupOnly=true)] - return dllinfo, phase2 - else - let dllinfo = - { RawMetadata=assemblyData + let phase2() = [tcImports.FindCcuInfo(ctok, m, ilShortAssemName, lookupOnly=true)] + return Some(dllinfo, phase2) + else + let dllinfo = + { RawMetadata=assemblyData FileName=filename #if !NO_EXTENSIONTYPING ProviderGeneratedAssembly=None @@ -1525,59 +1670,63 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse ILScopeRef = ilScopeRef ILAssemblyRefs = assemblyData.ILAssemblyRefs } tcImports.RegisterDll dllinfo - let ilg = defaultArg ilGlobalsOpt EcmaMscorlibILGlobals let phase2 = - if assemblyData.HasAnyFSharpSignatureDataAttribute then - if not (assemblyData.HasMatchingFSharpSignatureDataAttribute ilg) then + if assemblyData.HasAnyFSharpSignatureDataAttribute then + if not assemblyData.HasMatchingFSharpSignatureDataAttribute then errorR(Error(FSComp.SR.buildDifferentVersionMustRecompile filename, m)) tcImports.PrepareToImportReferencedILAssembly (ctok, m, filename, dllinfo) - else + else try tcImports.PrepareToImportReferencedFSharpAssembly (ctok, m, filename, dllinfo) with e -> error(Error(FSComp.SR.buildErrorOpeningBinaryFile(filename, e.Message), m)) else tcImports.PrepareToImportReferencedILAssembly (ctok, m, filename, dllinfo) - return dllinfo, phase2 + return Some(dllinfo, phase2) } // NOTE: When used in the Language Service this can cause the transitive checking of projects. Hence it must be cancellable. member tcImports.RegisterAndImportReferencedAssemblies (ctok, nms: AssemblyResolution list) = - cancellable { + node { CheckDisposed() - let! results = - nms |> Cancellable.each (fun nm -> - cancellable { - try - let! res = tcImports.RegisterAndPrepareToImportReferencedDll (ctok, nm) - return Some res - with e -> - errorR(Error(FSComp.SR.buildProblemReadingAssembly(nm.resolvedPath, e.Message), nm.originalReference.Range)) - return None - }) - - let dllinfos, phase2s = results |> List.choose id |> List.unzip + + let! results = + nms + |> List.map (fun nm -> + node { + try + return! tcImports.TryRegisterAndPrepareToImportReferencedDll (ctok, nm) + with e -> + errorR(Error(FSComp.SR.buildProblemReadingAssembly(nm.resolvedPath, e.Message), nm.originalReference.Range)) + return None + } + ) + |> NodeCode.Sequential + + let dllinfos, phase2s = results |> Array.choose id |> List.ofArray |> List.unzip fixupOrphanCcus() - let ccuinfos = (List.collect (fun phase2 -> phase2()) phase2s) + let ccuinfos = (List.collect (fun phase2 -> phase2()) phase2s) return dllinfos, ccuinfos } - + /// Note that implicit loading is not used for compilations from MSBuild, which passes ``--noframework`` - /// Implicit loading is done in non-cancellation mode. Implicit loading is never used in the language service, so + /// Implicit loading is done in non-cancellation mode. Implicit loading is never used in the language service, so /// no cancellation is needed. - member tcImports.ImplicitLoadIfAllowed (ctok, m, assemblyName, lookupOnly) = + member tcImports.ImplicitLoadIfAllowed (ctok, m, assemblyName, lookupOnly) = CheckDisposed() // If the user is asking for the default framework then also try to resolve other implicit assemblies as they are discovered. // Using this flag to mean 'allow implicit discover of assemblies'. let tcConfig = tcConfigP.Get ctok if not lookupOnly && tcConfig.implicitlyResolveAssemblies then - let tryFile speculativeFileName = + let tryFile speculativeFileName = let foundFile = tcImports.TryResolveAssemblyReference (ctok, AssemblyReference (m, speculativeFileName, None), ResolveAssemblyReferenceMode.Speculative) - match foundFile with + match foundFile with | OkResult (warns, res) -> ReportWarnings warns - tcImports.RegisterAndImportReferencedAssemblies(ctok, res) |> Cancellable.runWithoutCancellation |> ignore + tcImports.RegisterAndImportReferencedAssemblies(ctok, res) + |> NodeCode.RunImmediateWithoutCancellation + |> ignore true - | ErrorResult (_warns, _err) -> + | ErrorResult (_warns, _err) -> // Throw away warnings and errors - this is speculative loading false @@ -1585,48 +1734,55 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse else tryFile (assemblyName + ".exe") |> ignore #if !NO_EXTENSIONTYPING - member tcImports.TryFindProviderGeneratedAssemblyByName(ctok, assemblyName: string) : System.Reflection.Assembly option = + member tcImports.TryFindProviderGeneratedAssemblyByName(ctok, assemblyName: string) : System.Reflection.Assembly option = // The assembly may not be in the resolutions, but may be in the load set including EST injected assemblies - match tcImports.TryFindDllInfo (ctok, range0, assemblyName, lookupOnly=true) with - | Some res -> + match tcImports.TryFindDllInfo (ctok, range0, assemblyName, lookupOnly=true) with + | Some res -> // Provider-generated assemblies don't necessarily have an on-disk representation we can load. - res.ProviderGeneratedAssembly + res.ProviderGeneratedAssembly | _ -> None #endif - /// This doesn't need to be cancellable, it is only used by F# Interactive - member tcImports.TryFindExistingFullyQualifiedPathBySimpleAssemblyName (ctok, simpleAssemName) : string option = - resolutions.TryFindBySimpleAssemblyName (ctok, simpleAssemName) |> Option.map (fun r -> r.resolvedPath) + /// Only used by F# Interactive + member tcImports.TryFindExistingFullyQualifiedPathBySimpleAssemblyName (simpleAssemName) : string option = + tciLock.AcquireLock <| fun tcitok -> + RequireTcImportsLock(tcitok, resolutions) + resolutions.TryFindBySimpleAssemblyName (simpleAssemName) |> Option.map (fun r -> r.resolvedPath) - /// This doesn't need to be cancellable, it is only used by F# Interactive - member tcImports.TryFindExistingFullyQualifiedPathByExactAssemblyRef(ctok, assemblyRef: ILAssemblyRef) : string option = - resolutions.TryFindByExactILAssemblyRef (ctok, assemblyRef) |> Option.map (fun r -> r.resolvedPath) + /// Only used by F# Interactive + member tcImports.TryFindExistingFullyQualifiedPathByExactAssemblyRef(assemblyRef: ILAssemblyRef) : string option = + tciLock.AcquireLock <| fun tcitok -> + RequireTcImportsLock(tcitok, resolutions) + resolutions.TryFindByExactILAssemblyRef (assemblyRef) |> Option.map (fun r -> r.resolvedPath) - member tcImports.TryResolveAssemblyReference(ctok, assemblyReference: AssemblyReference, mode: ResolveAssemblyReferenceMode) : OperationResult = + member tcImports.TryResolveAssemblyReference(ctok, assemblyReference: AssemblyReference, mode: ResolveAssemblyReferenceMode) : OperationResult = + tciLock.AcquireLock <| fun tcitok -> let tcConfig = tcConfigP.Get ctok + + RequireTcImportsLock(tcitok, resolutions) // First try to lookup via the original reference text. match resolutions.TryFindByOriginalReference assemblyReference with - | Some assemblyResolution -> + | Some assemblyResolution -> ResultD [assemblyResolution] | None -> #if NO_MSBUILD_REFERENCE_RESOLUTION try ResultD [tcConfig.ResolveLibWithDirectories assemblyReference] - with e -> + with e -> ErrorD e -#else +#else // Next try to lookup up by the exact full resolved path. - match resolutions.TryFindByResolvedPath assemblyReference.Text with - | Some assemblyResolution -> + match resolutions.TryFindByResolvedPath assemblyReference.Text with + | Some assemblyResolution -> ResultD [assemblyResolution] - | None -> + | None -> if tcConfigP.Get(ctok).useSimpleResolution then - let action = - match mode with + let action = + match mode with | ResolveAssemblyReferenceMode.ReportErrors -> CcuLoadFailureAction.RaiseError | ResolveAssemblyReferenceMode.Speculative -> CcuLoadFailureAction.ReturnNone - match tcConfig.ResolveLibWithDirectories (action, assemblyReference) with - | Some resolved -> + match tcConfig.ResolveLibWithDirectories (action, assemblyReference) with + | Some resolved -> resolutions <- resolutions.AddResolutionResults [resolved] ResultD [resolved] | None -> @@ -1636,34 +1792,34 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse // But don't cache resolution failures because the assembly may appear on the disk later. let resolved, unresolved = TcConfig.TryResolveLibsUsingMSBuildRules(tcConfig, [ assemblyReference ], assemblyReference.Range, mode) match resolved, unresolved with - | (assemblyResolution :: _, _) -> + | (assemblyResolution :: _, _) -> resolutions <- resolutions.AddResolutionResults resolved ResultD [assemblyResolution] - | (_, _ :: _) -> + | (_, _ :: _) -> resolutions <- resolutions.AddUnresolvedReferences unresolved ErrorD(AssemblyNotResolved(assemblyReference.Text, assemblyReference.Range)) - | [], [] -> + | [], [] -> // Note, if mode=ResolveAssemblyReferenceMode.Speculative and the resolution failed then TryResolveLibsUsingMSBuildRules returns // the empty list and we convert the failure into an AssemblyNotResolved here. ErrorD(AssemblyNotResolved(assemblyReference.Text, assemblyReference.Range)) #endif - member tcImports.ResolveAssemblyReference(ctok, assemblyReference, mode) : AssemblyResolution list = + member tcImports.ResolveAssemblyReference(ctok, assemblyReference, mode) : AssemblyResolution list = CommitOperationResult(tcImports.TryResolveAssemblyReference(ctok, assemblyReference, mode)) // Note: This returns a TcImports object. However, framework TcImports are not currently disposed. The only reason // we dispose TcImports is because we need to dispose type providers, and type providers are never included in the framework DLL set. // If a framework set ever includes type providers, you will not have to worry about explicitly calling Dispose as the Finalizer will handle it. - static member BuildFrameworkTcImports (ctok, tcConfigP: TcConfigProvider, frameworkDLLs, nonFrameworkDLLs) = - cancellable { - + static member BuildFrameworkTcImports (tcConfigP: TcConfigProvider, frameworkDLLs, nonFrameworkDLLs) = + node { + let ctok = CompilationThreadToken() let tcConfig = tcConfigP.Get ctok - let tcResolutions = TcAssemblyResolutions.BuildFromPriorResolutions(ctok, tcConfig, frameworkDLLs, []) - let tcAltResolutions = TcAssemblyResolutions.BuildFromPriorResolutions(ctok, tcConfig, nonFrameworkDLLs, []) + let tcResolutions = TcAssemblyResolutions.BuildFromPriorResolutions(tcConfig, frameworkDLLs, []) + let tcAltResolutions = TcAssemblyResolutions.BuildFromPriorResolutions(tcConfig, nonFrameworkDLLs, []) - let frameworkTcImports = new TcImports(tcConfigP, tcResolutions, None, None, None) + let frameworkTcImports = new TcImports(tcConfigP, tcResolutions, None, None) - // Fetch the primaryAssembly from the referenced assemblies otherwise + // Fetch the primaryAssembly from the referenced assemblies otherwise let primaryAssemblyReference = let path = frameworkDLLs |> List.tryFind(fun dll -> String.Compare(Path.GetFileNameWithoutExtension(dll.resolvedPath), tcConfig.primaryAssembly.Name, StringComparison.OrdinalIgnoreCase) = 0) match path with @@ -1672,7 +1828,7 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse let primaryAssemblyResolution = frameworkTcImports.ResolveAssemblyReference(ctok, primaryAssemblyReference, ResolveAssemblyReferenceMode.ReportErrors) let! primaryAssem = frameworkTcImports.RegisterAndImportReferencedAssemblies(ctok, primaryAssemblyResolution) - let primaryScopeRef = + let primaryScopeRef = match primaryAssem with | (_, [ResolvedImportedAssembly ccu]) -> ccu.FSharpViewOfMetadata.ILScopeRef | _ -> failwith "unexpected" @@ -1684,7 +1840,7 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse let resolvedAssemblies = tcResolutions.GetAssemblyResolutions() - let readerSettings: ILReaderOptions = + let readerSettings: ILReaderOptions = { pdbDirPath=None reduceMemoryUsage = tcConfig.reduceMemoryUsage metadataOnly = MetadataOnlyFlag.Yes @@ -1695,7 +1851,7 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse | ILScopeRef.Assembly aref1, ILScopeRef.Assembly aref2 when aref1.EqualsIgnoringVersion aref2 -> mkRefToILAssembly manifest |> Some - | _ -> + | _ -> None let tryFindAssemblyThatForwardsToPrimaryAssembly manifest = @@ -1714,8 +1870,32 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse else None) - let ilGlobals = mkILGlobals (primaryScopeRef, assembliesThatForwardToPrimaryAssembly) - frameworkTcImports.SetILGlobals ilGlobals + let! fslibCcu, fsharpCoreAssemblyScopeRef = + node { + if tcConfig.compilingFslib then + // When compiling FSharp.Core.dll, the fslibCcu reference to FSharp.Core.dll is a delayed ccu thunk fixed up during type checking + return CcuThunk.CreateDelayed getFSharpCoreLibraryName, ILScopeRef.Local + else + let coreLibraryReference = tcConfig.CoreLibraryDllReference() + + let resolvedAssemblyRef = + match tcResolutions.TryFindByOriginalReference coreLibraryReference with + | Some resolution -> Some resolution + | _ -> + // Are we using a "non-canonical" FSharp.Core? + match tcAltResolutions.TryFindByOriginalReference coreLibraryReference with + | Some resolution -> Some resolution + | _ -> tcResolutions.TryFindByOriginalReferenceText (getFSharpCoreLibraryName) // was the ".dll" elided? + + match resolvedAssemblyRef with + | Some coreLibraryResolution -> + match! frameworkTcImports.RegisterAndImportReferencedAssemblies(ctok, [coreLibraryResolution]) with + | (_, [ResolvedImportedAssembly fslibCcuInfo ]) -> return fslibCcuInfo.FSharpViewOfMetadata, fslibCcuInfo.ILScopeRef + | _ -> + return error(InternalError("BuildFrameworkTcImports: no successful import of "+coreLibraryResolution.resolvedPath, coreLibraryResolution.originalReference.Range)) + | None -> + return error(InternalError(sprintf "BuildFrameworkTcImports: no resolution of '%s'" coreLibraryReference.Text, rangeStartup)) + } // Load the rest of the framework DLLs all at once (they may be mutually recursive) let! _assemblies = frameworkTcImports.RegisterAndImportReferencedAssemblies (ctok, resolvedAssemblies) @@ -1723,47 +1903,12 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse // These are the DLLs we can search for well-known types let sysCcus = [| for ccu in frameworkTcImports.GetCcusInDeclOrder() do - //printfn "found sys ccu %s" ccu.AssemblyName yield ccu |] - //for ccu in nonFrameworkDLLs do - // printfn "found non-sys ccu %s" ccu.resolvedPath - let tryFindSysTypeCcu path typeName = - sysCcus |> Array.tryFind (fun ccu -> ccuHasType ccu path typeName) + sysCcus |> Array.tryFind (fun ccu -> ccuHasType ccu path typeName) - let fslibCcu = - if tcConfig.compilingFslib then - // When compiling FSharp.Core.dll, the fslibCcu reference to FSharp.Core.dll is a delayed ccu thunk fixed up during type checking - CcuThunk.CreateDelayed getFSharpCoreLibraryName - else - let fslibCcuInfo = - let coreLibraryReference = tcConfig.CoreLibraryDllReference() - - let resolvedAssemblyRef = - match tcResolutions.TryFindByOriginalReference coreLibraryReference with - | Some resolution -> Some resolution - | _ -> - // Are we using a "non-canonical" FSharp.Core? - match tcAltResolutions.TryFindByOriginalReference coreLibraryReference with - | Some resolution -> Some resolution - | _ -> tcResolutions.TryFindByOriginalReferenceText (getFSharpCoreLibraryName) // was the ".dll" elided? - - match resolvedAssemblyRef with - | Some coreLibraryResolution -> - match frameworkTcImports.RegisterAndImportReferencedAssemblies(ctok, [coreLibraryResolution]) |> Cancellable.runWithoutCancellation with - | (_, [ResolvedImportedAssembly fslibCcuInfo ]) -> fslibCcuInfo - | _ -> - error(InternalError("BuildFrameworkTcImports: no successful import of "+coreLibraryResolution.resolvedPath, coreLibraryResolution.originalReference.Range)) - | None -> - error(InternalError(sprintf "BuildFrameworkTcImports: no resolution of '%s'" coreLibraryReference.Text, rangeStartup)) - IlxSettings.ilxFsharpCoreLibAssemRef <- - (let scoref = fslibCcuInfo.ILScopeRef - match scoref with - | ILScopeRef.Assembly aref -> Some aref - | ILScopeRef.Local | ILScopeRef.Module _ | ILScopeRef.PrimaryAssembly -> - error(InternalError("not ILScopeRef.Assembly", rangeStartup))) - fslibCcuInfo.FSharpViewOfMetadata + let ilGlobals = mkILGlobals (primaryScopeRef, assembliesThatForwardToPrimaryAssembly, fsharpCoreAssemblyScopeRef) // OK, now we have both mscorlib.dll and FSharp.Core.dll we can create TcGlobals let tcGlobals = TcGlobals(tcConfig.compilingFslib, ilGlobals, fslibCcu, @@ -1781,49 +1926,52 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse member tcImports.ReportUnresolvedAssemblyReferences knownUnresolved = // Report that an assembly was not resolved. - let reportAssemblyNotResolved(file, originalReferences: AssemblyReference list) = + let reportAssemblyNotResolved(file, originalReferences: AssemblyReference list) = originalReferences |> List.iter(fun originalReference -> errorR(AssemblyNotResolved(file, originalReference.Range))) knownUnresolved |> List.map (function UnresolvedAssemblyReference(file, originalReferences) -> file, originalReferences) |> List.iter reportAssemblyNotResolved - - static member BuildNonFrameworkTcImports - (ctok, tcConfigP: TcConfigProvider, tcGlobals: TcGlobals, baseTcImports, - nonFrameworkReferences, knownUnresolved, dependencyProvider) = - cancellable { + static member BuildNonFrameworkTcImports + (tcConfigP: TcConfigProvider, baseTcImports, + nonFrameworkReferences, knownUnresolved, dependencyProvider) = + + node { + let ctok = CompilationThreadToken() let tcConfig = tcConfigP.Get ctok - let tcResolutions = TcAssemblyResolutions.BuildFromPriorResolutions(ctok, tcConfig, nonFrameworkReferences, knownUnresolved) + let tcResolutions = TcAssemblyResolutions.BuildFromPriorResolutions(tcConfig, nonFrameworkReferences, knownUnresolved) let references = tcResolutions.GetAssemblyResolutions() - let tcImports = new TcImports(tcConfigP, tcResolutions, Some baseTcImports, Some tcGlobals.ilg, Some dependencyProvider) + let tcImports = new TcImports(tcConfigP, tcResolutions, Some baseTcImports, Some dependencyProvider) let! _assemblies = tcImports.RegisterAndImportReferencedAssemblies(ctok, references) tcImports.ReportUnresolvedAssemblyReferences knownUnresolved return tcImports } - - static member BuildTcImports(ctok, tcConfigP: TcConfigProvider, dependencyProvider) = - cancellable { + + static member BuildTcImports(tcConfigP: TcConfigProvider, dependencyProvider) = + node { + let ctok = CompilationThreadToken() let tcConfig = tcConfigP.Get ctok - //let foundationalTcImports, tcGlobals = TcImports.BuildFoundationalTcImports tcConfigP - let frameworkDLLs, nonFrameworkReferences, knownUnresolved = TcAssemblyResolutions.SplitNonFoundationalResolutions(ctok, tcConfig) - let! tcGlobals, frameworkTcImports = TcImports.BuildFrameworkTcImports (ctok, tcConfigP, frameworkDLLs, nonFrameworkReferences) - let! tcImports = TcImports.BuildNonFrameworkTcImports(ctok, tcConfigP, tcGlobals, frameworkTcImports, nonFrameworkReferences, knownUnresolved, dependencyProvider) + let frameworkDLLs, nonFrameworkReferences, knownUnresolved = TcAssemblyResolutions.SplitNonFoundationalResolutions(tcConfig) + let! tcGlobals, frameworkTcImports = TcImports.BuildFrameworkTcImports (tcConfigP, frameworkDLLs, nonFrameworkReferences) + let! tcImports = TcImports.BuildNonFrameworkTcImports(tcConfigP, frameworkTcImports, nonFrameworkReferences, knownUnresolved, dependencyProvider) return tcGlobals, tcImports } - - interface System.IDisposable with - member tcImports.Dispose() = + + interface System.IDisposable with + member tcImports.Dispose() = dispose () override tcImports.ToString() = "TcImports(...)" - + /// Process #r in F# Interactive. /// Adds the reference to the tcImports and add the ccu to the type checking environment. let RequireDLL (ctok, tcImports: TcImports, tcEnv, thisAssemblyName, referenceRange, file) = let resolutions = CommitOperationResult(tcImports.TryResolveAssemblyReference(ctok, AssemblyReference(referenceRange, file, None), ResolveAssemblyReferenceMode.ReportErrors)) - let dllinfos, ccuinfos = tcImports.RegisterAndImportReferencedAssemblies(ctok, resolutions) |> Cancellable.runWithoutCancellation + let dllinfos, ccuinfos = + tcImports.RegisterAndImportReferencedAssemblies(ctok, resolutions) + |> NodeCode.RunImmediateWithoutCancellation - let asms = + let asms = ccuinfos |> List.map (function | ResolvedImportedAssembly asm -> asm | UnresolvedImportedAssembly assemblyName -> error(Error(FSComp.SR.buildCouldNotResolveAssemblyRequiredByFile(assemblyName, file), referenceRange))) @@ -1834,7 +1982,3 @@ let RequireDLL (ctok, tcImports: TcImports, tcEnv, thisAssemblyName, referenceRa AddCcuToTcEnv(g, amap, referenceRange, tcEnv, thisAssemblyName, asm.FSharpViewOfMetadata, asm.AssemblyAutoOpenAttributes, asm.AssemblyInternalsVisibleToAttributes) let tcEnv = (tcEnv, asms) ||> List.fold buildTcEnv tcEnv, (dllinfos, asms) - -// Existing public APIs delegate to newer implementations -let DefaultReferencesForScriptsAndOutOfProjectSources assumeDotNetFramework = - defaultReferencesForScriptsAndOutOfProjectSources (*useFsiAuxLib*)false assumeDotNetFramework (*useSdkRefs*)false diff --git a/src/fsharp/CompilerImports.fsi b/src/fsharp/CompilerImports.fsi index d6eedc6d214..5a840c368b6 100644 --- a/src/fsharp/CompilerImports.fsi +++ b/src/fsharp/CompilerImports.fsi @@ -5,25 +5,25 @@ module internal FSharp.Compiler.CompilerImports open System - +open Internal.Utilities.Library open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CheckExpressions open FSharp.Compiler.CompilerConfig +open FSharp.Compiler.DependencyManager open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Range +open FSharp.Compiler.Optimizer open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TcGlobals +open FSharp.Compiler.BuildGraph +open FSharp.Compiler.Text open FSharp.Core.CompilerServices #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping #endif -open Microsoft.DotNet.DependencyManager - /// This exception is an old-style way of reporting a diagnostic exception AssemblyNotResolved of (*originalName*) string * range @@ -41,13 +41,27 @@ val IsOptimizationDataResource: ILResource -> bool /// Determine if an IL resource attached to an F# assembly is an F# quotation data resource for reflected definitions val IsReflectedDefinitionsResource: ILResource -> bool -val GetSignatureDataResourceName: ILResource -> string -/// Write F# signature data as an IL resource -val WriteSignatureData: TcConfig * TcGlobals * Remap * CcuThunk * filename: string * inMem: bool -> ILResource +val GetSignatureDataResourceName: ILResource -> string -/// Write F# optimization data as an IL resource -val WriteOptimizationData: TcGlobals * filename: string * inMem: bool * CcuThunk * Optimizer.LazyModuleInfo -> ILResource +/// Encode the F# interface data into a set of IL attributes and resources +val EncodeSignatureData: + tcConfig:TcConfig * + tcGlobals:TcGlobals * + exportRemapping:Remap * + generatedCcu: CcuThunk * + outfile: string * + isIncrementalBuild: bool + -> ILAttribute list * ILResource list + +val EncodeOptimizationData: + tcGlobals:TcGlobals * + tcConfig:TcConfig * + outfile: string * + exportRemapping:Remap * + (CcuThunk * #CcuOptimizationInfo) * + isIncrementalBuild: bool + -> ILResource list [] type ResolveAssemblyReferenceMode = @@ -109,11 +123,18 @@ type TcAssemblyResolutions = member GetAssemblyResolutions: unit -> AssemblyResolution list - static member SplitNonFoundationalResolutions: ctok: CompilationThreadToken * tcConfig: TcConfig -> AssemblyResolution list * AssemblyResolution list * UnresolvedAssemblyReference list + static member SplitNonFoundationalResolutions: tcConfig: TcConfig -> AssemblyResolution list * AssemblyResolution list * UnresolvedAssemblyReference list - static member BuildFromPriorResolutions: ctok: CompilationThreadToken * tcConfig: TcConfig * AssemblyResolution list * UnresolvedAssemblyReference list -> TcAssemblyResolutions + static member BuildFromPriorResolutions: tcConfig: TcConfig * AssemblyResolution list * UnresolvedAssemblyReference list -> TcAssemblyResolutions - static member GetAssemblyResolutionInformation: ctok: CompilationThreadToken * tcConfig: TcConfig -> AssemblyResolution list * UnresolvedAssemblyReference list + static member GetAssemblyResolutionInformation: tcConfig: TcConfig -> AssemblyResolution list * UnresolvedAssemblyReference list + +[] +type RawFSharpAssemblyData = + + new : ilModule: ILModuleDef * ilAssemblyRefs: ILAssemblyRef list -> RawFSharpAssemblyData + + interface IRawFSharpAssemblyData /// Represents a table of imported assemblies with their resolutions. /// Is a disposable object, but it is recommended not to explicitly call Dispose unless you absolutely know nothing will be using its contents after the disposal. @@ -153,10 +174,10 @@ type TcImports = /// Try to find the given assembly reference by simple name. Used in magic assembly resolution. Effectively does implicit /// unification of assemblies by simple assembly name. - member TryFindExistingFullyQualifiedPathBySimpleAssemblyName: CompilationThreadToken * string -> string option + member TryFindExistingFullyQualifiedPathBySimpleAssemblyName: string -> string option /// Try to find the given assembly reference. - member TryFindExistingFullyQualifiedPathByExactAssemblyRef: CompilationThreadToken * ILAssemblyRef -> string option + member TryFindExistingFullyQualifiedPathByExactAssemblyRef: ILAssemblyRef -> string option #if !NO_EXTENSIONTYPING /// Try to find a provider-generated assembly @@ -170,31 +191,24 @@ type TcImports = member internal Base: TcImports option static member BuildFrameworkTcImports: - CompilationThreadToken * TcConfigProvider * AssemblyResolution list * AssemblyResolution list - -> Cancellable + -> NodeCode static member BuildNonFrameworkTcImports: - CompilationThreadToken * TcConfigProvider * - TcGlobals * TcImports * AssemblyResolution list * UnresolvedAssemblyReference list * DependencyProvider - -> Cancellable + -> NodeCode static member BuildTcImports: - ctok: CompilationThreadToken * tcConfigP: TcConfigProvider * dependencyProvider: DependencyProvider - -> Cancellable + -> NodeCode /// Process #r in F# Interactive. /// Adds the reference to the tcImports and add the ccu to the type checking environment. val RequireDLL: ctok: CompilationThreadToken * tcImports: TcImports * tcEnv: TcEnv * thisAssemblyName: string * referenceRange: range * file: string -> TcEnv * (ImportedBinary list * ImportedAssembly list) - -/// This list is the default set of references for "non-project" files. -val DefaultReferencesForScriptsAndOutOfProjectSources: bool -> string list diff --git a/src/fsharp/CompilerOptions.fs b/src/fsharp/CompilerOptions.fs index 78ad4dcc54f..51339cb8453 100644 --- a/src/fsharp/CompilerOptions.fs +++ b/src/fsharp/CompilerOptions.fs @@ -6,35 +6,32 @@ module internal FSharp.Compiler.CompilerOptions open System open System.IO - -open FSharp.Compiler +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras +open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILPdbWriter -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Internal.Utils -open FSharp.Compiler.AbstractIL.Extensions.ILX +open FSharp.Compiler.AbstractIL.ILX open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerDiagnostics -open FSharp.Compiler.CompilerImports +open FSharp.Compiler.Diagnostics open FSharp.Compiler.Features -open FSharp.Compiler.IlxGen -open FSharp.Compiler.Lib -open FSharp.Compiler.Range -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.TypedTree -open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.Syntax +open FSharp.Compiler.IO +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Text +open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.ErrorLogger open Internal.Utilities -open Internal.Utilities.StructuredFormat -module Attributes = +module Attributes = open System.Runtime.CompilerServices //[] - [] + [] do() //---------------------------------------------------------------------------- @@ -49,11 +46,11 @@ module Attributes = //-------------------------------------------------------------------------- [] -type OptionSwitch = +type OptionSwitch = | On | Off -type OptionSpec = +type OptionSpec = | OptionClear of bool ref | OptionFloat of (float -> unit) | OptionInt of (int -> unit) @@ -69,12 +66,12 @@ type OptionSpec = | OptionHelp of (CompilerOptionBlock list -> unit) // like OptionUnit, but given the "options" | OptionGeneral of (string list -> bool) * (string list -> string list) // Applies? * (ApplyReturningResidualArgs) -and CompilerOption = CompilerOption of string * string * OptionSpec * Option * string option -and CompilerOptionBlock = PublicOptions of string * CompilerOption list | PrivateOptions of CompilerOption list +and CompilerOption = CompilerOption of name: string * argumentDescriptionString: string * actionSpec: OptionSpec * deprecationError: Option * helpText: string option +and CompilerOptionBlock = PublicOptions of heading: string * options: CompilerOption list | PrivateOptions of options: CompilerOption list -let GetOptionsOfBlock block = - match block with - | PublicOptions (_, opts) -> opts +let GetOptionsOfBlock block = + match block with + | PublicOptions (_, opts) -> opts | PrivateOptions opts -> opts let FilterCompilerOptionBlock pred block = @@ -85,24 +82,24 @@ let FilterCompilerOptionBlock pred block = let compilerOptionUsage (CompilerOption(s, tag, spec, _, _)) = let s = if s="--" then "" else s (* s="flag" for "--flag" options. s="--" for "--" option. Adjust printing here for "--" case. *) match spec with - | (OptionUnit _ | OptionSet _ | OptionClear _ | OptionHelp _) -> sprintf "--%s" s + | (OptionUnit _ | OptionSet _ | OptionClear _ | OptionHelp _) -> sprintf "--%s" s | OptionStringList _ -> sprintf "--%s:%s" s tag | OptionIntList _ -> sprintf "--%s:%s" s tag - | OptionSwitch _ -> sprintf "--%s[+|-]" s + | OptionSwitch _ -> sprintf "--%s[+|-]" s | OptionStringListSwitch _ -> sprintf "--%s[+|-]:%s" s tag | OptionIntListSwitch _ -> sprintf "--%s[+|-]:%s" s tag | OptionString _ -> sprintf "--%s:%s" s tag | OptionInt _ -> sprintf "--%s:%s" s tag - | OptionFloat _ -> sprintf "--%s:%s" s tag + | OptionFloat _ -> sprintf "--%s:%s" s tag | OptionRest _ -> sprintf "--%s ..." s | 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 = 42 // fixed width for printing of flags, e.g. --debug:{full|pdbonly|portable|embedded} let defaultLineWidth = 80 // the fallback width - let lineWidth = - try - System.Console.BufferWidth + let lineWidth = + try + System.Console.BufferWidth with e -> defaultLineWidth let lineWidth = if lineWidth=0 then defaultLineWidth else lineWidth (* Have seen BufferWidth=0 on Linux/Mono *) // Lines have this form: @@ -128,7 +125,7 @@ let PrintCompilerOption (CompilerOption(_s, _tag, _spec, _, help) as compilerOpt let PrintPublicOptions (heading, opts) = if not (isNil opts) then printfn "" - printfn "" + printfn "" printfn "\t\t%s" heading List.iter PrintCompilerOption opts @@ -168,7 +165,7 @@ let dumpCompilerOptionBlock = function | PrivateOptions opts -> List.iter (dumpCompilerOption "NoSection") opts let DumpCompilerOptionBlocks blocks = List.iter dumpCompilerOptionBlock blocks -let isSlashOpt (opt:string) = +let isSlashOpt (opt:string) = opt.[0] = '/' && (opt.Length = 1 || not (opt.[1..].Contains "/")) module ResponseFile = @@ -186,8 +183,8 @@ module ResponseFile = | s -> Some (ResponseFileLine.CompilerOptionSpec (s.Trim())) try - use stream = FileSystem.FileStreamReadShim path - use reader = new System.IO.StreamReader(stream, true) + use stream = FileSystem.OpenFileForReadShim(path) + use reader = new StreamReader(stream, true) let data = seq { while not reader.EndOfStream do yield reader.ReadLine () } |> Seq.choose parseLine @@ -196,14 +193,13 @@ module ResponseFile = with e -> Choice2Of2 e - let ParseCompilerOptions (collectOtherArgument: string -> unit, blocks: CompilerOptionBlock list, args) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter - + let specs = List.collect GetOptionsOfBlock blocks - + // returns a tuple - the option token, the option argument string - let parseOption (s: string) = + let parseOption (s: string) = // grab the option token let opts = s.Split([|':'|]) let mutable opt = opts.[0] @@ -223,35 +219,35 @@ let ParseCompilerOptions (collectOtherArgument: string -> unit, blocks: Compiler else opt <- "" - // get the argument string + // get the argument string let optArgs = if opts.Length > 1 then String.Join(":", opts.[1 ..]) else "" opt, optArgs - + let getOptionArg compilerOption (argString: string) = if argString = "" then - errorR(Error(FSComp.SR.buildOptionRequiresParameter(compilerOptionUsage compilerOption), rangeCmdArgs)) + errorR(Error(FSComp.SR.buildOptionRequiresParameter(compilerOptionUsage compilerOption), rangeCmdArgs)) argString - + let getOptionArgList compilerOption (argString: string) = if argString = "" then - errorR(Error(FSComp.SR.buildOptionRequiresParameter(compilerOptionUsage compilerOption), rangeCmdArgs)) + errorR(Error(FSComp.SR.buildOptionRequiresParameter(compilerOptionUsage compilerOption), rangeCmdArgs)) [] else argString.Split([|',';';'|]) |> List.ofArray - + let getSwitchOpt (opt: string) = // if opt is a switch, strip the '+' or '-' if opt <> "--" && opt.Length > 1 && (opt.EndsWithOrdinal("+") || opt.EndsWithOrdinal("-")) then opt.[0 .. opt.Length - 2] else opt - - let getSwitch (s: string) = + + let getSwitch (s: string) = let s = (s.Split([|':'|])).[0] if s <> "--" && s.EndsWithOrdinal("-") then OptionSwitch.Off else OptionSwitch.On - let rec processArg args = - match args with + let rec processArg args = + match args with | [] -> () | ((rsp: string) :: t) when rsp.StartsWithOrdinal("@") -> let responseFileOptions = @@ -265,7 +261,7 @@ let ParseCompilerOptions (collectOtherArgument: string -> unit, blocks: Compiler | None -> errorR(Error(FSComp.SR.optsResponseFileNameInvalid rsp, rangeCmdArgs)) [] - | Some path when not (FileSystem.SafeExists path) -> + | Some path when not (FileSystem.FileExistsShim path) -> errorR(Error(FSComp.SR.optsResponseFileNotFound(rsp, path), rangeCmdArgs)) [] | Some path -> @@ -281,9 +277,7 @@ let ParseCompilerOptions (collectOtherArgument: string -> unit, blocks: Compiler rspData |> List.choose onlyOptions processArg (responseFileOptions @ t) - - | opt :: t -> - + | opt :: t -> let optToken, argString = parseOption opt let reportDeprecatedOption errOpt = @@ -291,89 +285,89 @@ let ParseCompilerOptions (collectOtherArgument: string -> unit, blocks: Compiler | Some e -> warning e | None -> () - let rec attempt l = - match l with - | (CompilerOption(s, _, OptionHelp f, d, _) :: _) when optToken = s && argString = "" -> + let rec attempt l = + match l with + | (CompilerOption(s, _, OptionHelp f, d, _) :: _) when optToken = s && argString = "" -> reportDeprecatedOption d f blocks; t - | (CompilerOption(s, _, OptionUnit f, d, _) :: _) when optToken = s && argString = "" -> + | (CompilerOption(s, _, OptionUnit f, d, _) :: _) when optToken = s && argString = "" -> reportDeprecatedOption d f (); t - | (CompilerOption(s, _, OptionSwitch f, d, _) :: _) when getSwitchOpt optToken = s && argString = "" -> + | (CompilerOption(s, _, OptionSwitch f, d, _) :: _) when getSwitchOpt optToken = s && argString = "" -> reportDeprecatedOption d f (getSwitch opt); t - | (CompilerOption(s, _, OptionSet f, d, _) :: _) when optToken = s && argString = "" -> + | (CompilerOption(s, _, OptionSet f, d, _) :: _) when optToken = s && argString = "" -> reportDeprecatedOption d f := true; t - | (CompilerOption(s, _, OptionClear f, d, _) :: _) when optToken = s && argString = "" -> + | (CompilerOption(s, _, OptionClear f, d, _) :: _) when optToken = s && argString = "" -> reportDeprecatedOption d f := false; t - | (CompilerOption(s, _, OptionString f, d, _) as compilerOption :: _) when optToken = s -> + | (CompilerOption(s, _, OptionString f, d, _) as compilerOption :: _) when optToken = s -> reportDeprecatedOption d let oa = getOptionArg compilerOption argString if oa <> "" then f (getOptionArg compilerOption oa) - t + t | (CompilerOption(s, _, OptionInt f, d, _) as compilerOption :: _) when optToken = s -> reportDeprecatedOption d let oa = getOptionArg compilerOption argString - if oa <> "" then - f (try int32 oa with _ -> + if oa <> "" then + f (try int32 oa with _ -> errorR(Error(FSComp.SR.buildArgInvalidInt(getOptionArg compilerOption argString), rangeCmdArgs)); 0) t - | (CompilerOption(s, _, OptionFloat f, d, _) as compilerOption :: _) when optToken = s -> + | (CompilerOption(s, _, OptionFloat f, d, _) as compilerOption :: _) when optToken = s -> reportDeprecatedOption d let oa = getOptionArg compilerOption argString if oa <> "" then - f (try float oa with _ -> + f (try float oa with _ -> errorR(Error(FSComp.SR.buildArgInvalidFloat(getOptionArg compilerOption argString), rangeCmdArgs)); 0.0) t - | (CompilerOption(s, _, OptionRest f, d, _) :: _) when optToken = s -> + | (CompilerOption(s, _, OptionRest f, d, _) :: _) when optToken = s -> reportDeprecatedOption d List.iter f t; [] | (CompilerOption(s, _, OptionIntList f, d, _) as compilerOption :: _) when optToken = s -> reportDeprecatedOption d let al = getOptionArgList compilerOption argString if al <> [] then - List.iter (fun i -> f (try int32 i with _ -> errorR(Error(FSComp.SR.buildArgInvalidInt i, rangeCmdArgs)); 0)) al + List.iter (fun i -> f (try int32 i with _ -> errorR(Error(FSComp.SR.buildArgInvalidInt i, rangeCmdArgs)); 0)) al t - | (CompilerOption(s, _, OptionIntListSwitch f, d, _) as compilerOption :: _) when getSwitchOpt optToken = s -> + | (CompilerOption(s, _, OptionIntListSwitch f, d, _) as compilerOption :: _) when getSwitchOpt optToken = s -> reportDeprecatedOption d let al = getOptionArgList compilerOption argString if al <> [] then let switch = getSwitch opt - List.iter (fun i -> f (try int32 i with _ -> errorR(Error(FSComp.SR.buildArgInvalidInt i, rangeCmdArgs)); 0) switch) al + List.iter (fun i -> f (try int32 i with _ -> errorR(Error(FSComp.SR.buildArgInvalidInt i, rangeCmdArgs)); 0) switch) al t // here - | (CompilerOption(s, _, OptionStringList f, d, _) as compilerOption :: _) when optToken = s -> + | (CompilerOption(s, _, OptionStringList f, d, _) as compilerOption :: _) when optToken = s -> reportDeprecatedOption d let al = getOptionArgList compilerOption argString if al <> [] then List.iter f (getOptionArgList compilerOption argString) t - | (CompilerOption(s, _, OptionStringListSwitch f, d, _) as compilerOption :: _) when getSwitchOpt optToken = s -> + | (CompilerOption(s, _, OptionStringListSwitch f, d, _) as compilerOption :: _) when getSwitchOpt optToken = s -> reportDeprecatedOption d let al = getOptionArgList compilerOption argString if al <> [] then let switch = getSwitch opt List.iter (fun s -> f s switch) (getOptionArgList compilerOption argString) t - | (CompilerOption(_, _, OptionGeneral (pred, exec), d, _) :: _) when pred args -> + | (CompilerOption(_, _, OptionGeneral (pred, exec), d, _) :: _) when pred args -> reportDeprecatedOption d let rest = exec args in rest // arguments taken, rest remaining - | (_ :: more) -> attempt more - | [] -> + | (_ :: more) -> attempt more + | [] -> if opt.Length = 0 || opt.[0] = '-' || isSlashOpt opt - then + then // want the whole opt token - delimiter and all let unrecOpt = (opt.Split([|':'|]).[0]) - errorR(Error(FSComp.SR.buildUnrecognizedOption unrecOpt, rangeCmdArgs)) + errorR(Error(FSComp.SR.buildUnrecognizedOption unrecOpt, rangeCmdArgs)) t - else + else (collectOtherArgument opt; t) - let rest = attempt specs + let rest = attempt specs processArg rest - + processArg args //---------------------------------------------------------------------------- @@ -383,13 +377,13 @@ let ParseCompilerOptions (collectOtherArgument: string -> unit, blocks: Compiler let lexFilterVerbose = false let mutable enableConsoleColoring = true // global state -let setFlag r n = - match n with +let setFlag r n = + match n with | 0 -> r false | 1 -> r true | _ -> raise (Failure "expected 0/1") -let SetOptimizeOff(tcConfigB: TcConfigBuilder) = +let SetOptimizeOff(tcConfigB: TcConfigBuilder) = tcConfigB.optSettings <- { tcConfigB.optSettings with jitOptUser = Some false } tcConfigB.optSettings <- { tcConfigB.optSettings with localOptUser = Some false } tcConfigB.optSettings <- { tcConfigB.optSettings with crossModuleOptUser = Some false } @@ -398,7 +392,7 @@ let SetOptimizeOff(tcConfigB: TcConfigBuilder) = tcConfigB.doTLR <- false tcConfigB.doFinalSimplify <- false -let SetOptimizeOn(tcConfigB: TcConfigBuilder) = +let SetOptimizeOn(tcConfigB: TcConfigBuilder) = tcConfigB.optSettings <- { tcConfigB.optSettings with jitOptUser = Some true } tcConfigB.optSettings <- { tcConfigB.optSettings with localOptUser = Some true } tcConfigB.optSettings <- { tcConfigB.optSettings with crossModuleOptUser = Some true } @@ -407,7 +401,7 @@ let SetOptimizeOn(tcConfigB: TcConfigBuilder) = tcConfigB.doTLR <- true tcConfigB.doFinalSimplify <- true -let SetOptimizeSwitch (tcConfigB: TcConfigBuilder) switch = +let SetOptimizeSwitch (tcConfigB: TcConfigBuilder) switch = if (switch = OptionSwitch.On) then SetOptimizeOn tcConfigB else SetOptimizeOff tcConfigB let SetTailcallSwitch (tcConfigB: TcConfigBuilder) switch = @@ -425,10 +419,10 @@ let AddPathMapping (tcConfigB: TcConfigBuilder) (pathPair: string) = let jitoptimizeSwitch (tcConfigB: TcConfigBuilder) switch = tcConfigB.optSettings <- { tcConfigB.optSettings with jitOptUser = Some (switch = OptionSwitch.On) } - + let localoptimizeSwitch (tcConfigB: TcConfigBuilder) switch = tcConfigB.optSettings <- { tcConfigB.optSettings with localOptUser = Some (switch = OptionSwitch.On) } - + let crossOptimizeSwitch (tcConfigB: TcConfigBuilder) switch = tcConfigB.optSettings <- { tcConfigB.optSettings with crossModuleOptUser = Some (switch = OptionSwitch.On) } @@ -436,30 +430,31 @@ let splittingSwitch (tcConfigB: TcConfigBuilder) switch = tcConfigB.optSettings <- { tcConfigB.optSettings with abstractBigTargets = switch = OptionSwitch.On } let callVirtSwitch (tcConfigB: TcConfigBuilder) switch = - tcConfigB.alwaysCallVirt <- switch = OptionSwitch.On + tcConfigB.alwaysCallVirt <- switch = OptionSwitch.On -let useHighEntropyVASwitch (tcConfigB: TcConfigBuilder) switch = +let useHighEntropyVASwitch (tcConfigB: TcConfigBuilder) switch = tcConfigB.useHighEntropyVA <- switch = OptionSwitch.On -let subSystemVersionSwitch (tcConfigB: TcConfigBuilder) (text: string) = +let subSystemVersionSwitch (tcConfigB: TcConfigBuilder) (text: string) = let fail() = error(Error(FSComp.SR.optsInvalidSubSystemVersion text, rangeCmdArgs)) // per spec for 357994: Validate input string, should be two positive integers x.y when x>=4 and y>=0 and both <= 65535 - if System.String.IsNullOrEmpty text then + if System.String.IsNullOrEmpty text then fail() else match text.Split('.') with | [| majorStr; minorStr|] -> match (Int32.TryParse majorStr), (Int32.TryParse minorStr) with - | (true, major), (true, minor) - when major >= 4 && major <= 65535 - && minor >=0 && minor <= 65535 -> + | (true, major), (true, minor) + when major >= 4 && major <= 65535 + && minor >=0 && minor <= 65535 -> tcConfigB.subsystemVersion <- (major, minor) | _ -> fail() | _ -> fail() let SetUseSdkSwitch (tcConfigB: TcConfigBuilder) switch = - tcConfigB.useSdkRefs <- (switch = OptionSwitch.On) + let useSdkRefs = (switch = OptionSwitch.On) + tcConfigB.SetUseSdkRefs useSdkRefs let (++) x s = x @ [s] @@ -474,29 +469,29 @@ let SetTarget (tcConfigB: TcConfigBuilder)(s: string) = let SetDebugSwitch (tcConfigB: TcConfigBuilder) (dtype: string option) (s: OptionSwitch) = match dtype with | Some s -> - match s with - | "portable" -> + match s with + | "portable" -> tcConfigB.portablePDB <- true tcConfigB.embeddedPDB <- false tcConfigB.jitTracking <- true tcConfigB.ignoreSymbolStoreSequencePoints <- true - | "pdbonly" -> + | "pdbonly" -> tcConfigB.portablePDB <- false tcConfigB.embeddedPDB <- false tcConfigB.jitTracking <- false - | "embedded" -> + | "embedded" -> tcConfigB.portablePDB <- true tcConfigB.embeddedPDB <- true tcConfigB.jitTracking <- true tcConfigB.ignoreSymbolStoreSequencePoints <- true #if FX_NO_PDB_WRITER // When building on the coreclr, full means portable - | "full" -> + | "full" -> tcConfigB.portablePDB <- true tcConfigB.embeddedPDB <- false tcConfigB.jitTracking <- true #else - | "full" -> + | "full" -> tcConfigB.portablePDB <- false tcConfigB.embeddedPDB <- false tcConfigB.jitTracking <- true @@ -506,7 +501,7 @@ let SetDebugSwitch (tcConfigB: TcConfigBuilder) (dtype: string option) (s: Optio | None -> tcConfigB.portablePDB <- false; tcConfigB.embeddedPDB <- false; tcConfigB.jitTracking <- s = OptionSwitch.On tcConfigB.debuginfo <- s = OptionSwitch.On -let SetEmbedAllSourceSwitch (tcConfigB: TcConfigBuilder) switch = +let SetEmbedAllSourceSwitch (tcConfigB: TcConfigBuilder) switch = if (switch = OptionSwitch.On) then tcConfigB.embedAllSource <- true else tcConfigB.embedAllSource <- false let setOutFileName tcConfigB path = @@ -514,10 +509,13 @@ let setOutFileName tcConfigB path = tcConfigB.outputDir <- Some outputDir tcConfigB.outputFile <- Some path -let setSignatureFile tcConfigB s = - tcConfigB.printSignature <- true +let setSignatureFile tcConfigB s = + tcConfigB.printSignature <- true tcConfigB.printSignatureFile <- s +let setAllSignatureFiles tcConfigB () = + tcConfigB.printAllSignatureFiles <- true + // option tags let tagString = "" let tagExe = "exe" @@ -542,7 +540,7 @@ let tagLangVersionValues = "{?|version|latest|preview}" // PrintOptionInfo //---------------- -/// Print internal "option state" information for diagnostics and regression tests. +/// Print internal "option state" information for diagnostics and regression tests. let PrintOptionInfo (tcConfigB:TcConfigBuilder) = printfn " jitOptUser . . . . . . : %+A" tcConfigB.optSettings.jitOptUser printfn " localOptUser . . . . . : %+A" tcConfigB.optSettings.localOptUser @@ -594,19 +592,17 @@ let inputFileFlagsFsi (tcConfigB: TcConfigBuilder) = // OptionBlock: Errors and warnings //--------------------------------- -let errorsAndWarningsFlags (tcConfigB: TcConfigBuilder) = +let errorsAndWarningsFlags (tcConfigB: TcConfigBuilder) = let trimFS (s:string) = if s.StartsWithOrdinal "FS" then s.Substring 2 else s let trimFStoInt (s:string) = - try - Some (int32 (trimFS s)) - with _ -> - errorR(Error(FSComp.SR.buildArgInvalidInt s, rangeCmdArgs)) - None + match Int32.TryParse (trimFS s) with + | true, n -> Some n + | false, _ -> None [ CompilerOption("warnaserror", tagNone, OptionSwitch(fun switch -> tcConfigB.errorSeverityOptions <- { tcConfigB.errorSeverityOptions with - GlobalWarnAsError = switch <> OptionSwitch.Off }), None, Some (FSComp.SR.optsWarnaserrorPM())) + GlobalWarnAsError = switch <> OptionSwitch.Off }), None, Some (FSComp.SR.optsWarnaserrorPM())) CompilerOption("warnaserror", tagWarnList, OptionStringListSwitch (fun n switch -> match trimFStoInt n with @@ -634,7 +630,7 @@ let errorsAndWarningsFlags (tcConfigB: TcConfigBuilder) = CompilerOption("warnon", tagWarnList, OptionStringList (fun n -> tcConfigB.TurnWarningOn(rangeCmdArgs, trimFS n)), None, Some (FSComp.SR.optsWarnOn())) - + CompilerOption("consolecolors", tagNone, OptionSwitch (fun switch -> enableConsoleColoring <- switch = OptionSwitch.On), None, Some (FSComp.SR.optsConsoleColors())) ] @@ -692,25 +688,20 @@ let outputFileFlagsFsc (tcConfigB: TcConfigBuilder) = OptionString (fun s -> tcConfigB.signer <- Some s), None, Some (FSComp.SR.optsStrongKeyFile())) - CompilerOption - ("keycontainer", tagString, - OptionString(fun s -> tcConfigB.container <- Some s), None, - 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" -> + OptionString (fun s -> + tcConfigB.platform <- + match s with + | "x86" -> Some X86 + | "x64" -> Some AMD64 + | "Itanium" -> Some IA64 + | "anycpu32bitpreferred" -> tcConfigB.prefer32Bit <- true - None - | "anycpu" -> None + None + | "anycpu" -> None | _ -> error(Error(FSComp.SR.optsUnknownPlatform s, rangeCmdArgs))), None, - Some(FSComp.SR.optsPlatform())) + Some(FSComp.SR.optsPlatform())) CompilerOption ("nooptimizationdata", tagNone, @@ -725,8 +716,13 @@ let outputFileFlagsFsc (tcConfigB: TcConfigBuilder) = CompilerOption ("sig", tagFile, OptionString (setSignatureFile tcConfigB), None, - Some (FSComp.SR.optsSig())) - + Some (FSComp.SR.optsSig())) + + CompilerOption + ("allsigs", tagNone, + OptionUnit (setAllSignatureFiles tcConfigB), None, + Some (FSComp.SR.optsAllSigs())) + CompilerOption ("nocopyfsharpcore", tagNone, OptionUnit (fun () -> tcConfigB.copyFSharpCore <- CopyFSharpCoreFlag.No), None, @@ -740,16 +736,20 @@ let outputFileFlagsFsc (tcConfigB: TcConfigBuilder) = let resourcesFlagsFsi (_tcConfigB: TcConfigBuilder) = [] let resourcesFlagsFsc (tcConfigB: TcConfigBuilder) = [ + CompilerOption + ("win32icon", tagFile, + OptionString (fun s -> tcConfigB.win32icon <- s), None, + Some (FSComp.SR.optsWin32icon())) CompilerOption ("win32res", tagFile, OptionString (fun s -> tcConfigB.win32res <- s), None, Some (FSComp.SR.optsWin32res())) - + CompilerOption ("win32manifest", tagFile, OptionString (fun s -> tcConfigB.win32manifest <- s), None, Some (FSComp.SR.optsWin32manifest())) - + CompilerOption ("nowin32manifest", tagNone, OptionUnit (fun () -> tcConfigB.includewin32manifest <- false), None, @@ -776,7 +776,7 @@ let codeGenerationFlags isFsi (tcConfigB: TcConfigBuilder) = ("debug", tagNone, OptionSwitch (SetDebugSwitch tcConfigB None), None, Some (FSComp.SR.optsDebugPM())) - + CompilerOption ("debug", tagFullPDBOnlyPortable, OptionString (fun s -> SetDebugSwitch tcConfigB (Some s) OptionSwitch.On), None, @@ -787,12 +787,12 @@ let codeGenerationFlags isFsi (tcConfigB: TcConfigBuilder) = ("embed", tagNone, OptionSwitch (SetEmbedAllSourceSwitch tcConfigB), None, Some (FSComp.SR.optsEmbedAllSource())) - + CompilerOption ("embed", tagFileList, OptionStringList (fun f -> tcConfigB.AddEmbeddedSourceFile f), None, Some ( FSComp.SR.optsEmbedSource())) - + CompilerOption ("sourcelink", tagFile, OptionString (fun f -> tcConfigB.sourceLink <- f), None, @@ -804,12 +804,12 @@ let codeGenerationFlags isFsi (tcConfigB: TcConfigBuilder) = ("optimize", tagNone, OptionSwitch (SetOptimizeSwitch tcConfigB), None, Some (FSComp.SR.optsOptimize())) - + CompilerOption ("tailcalls", tagNone, OptionSwitch (SetTailcallSwitch tcConfigB), None, Some (FSComp.SR.optsTailcalls())) - + CompilerOption ("deterministic", tagNone, OptionSwitch (SetDeterministicSwitch tcConfigB), None, @@ -833,7 +833,7 @@ let codeGenerationFlags isFsi (tcConfigB: TcConfigBuilder) = let defineSymbol tcConfigB s = tcConfigB.conditionalCompilationDefines <- s :: tcConfigB.conditionalCompilationDefines -let mlCompatibilityFlag (tcConfigB: TcConfigBuilder) = +let mlCompatibilityFlag (tcConfigB: TcConfigBuilder) = CompilerOption ("mlcompatibility", tagNone, OptionUnit (fun () -> tcConfigB.mlCompatibility<-true; tcConfigB.TurnWarningOff(rangeCmdArgs, "62")), None, @@ -871,50 +871,50 @@ let languageFlags tcConfigB = // OptionBlock: Advanced user options //----------------------------------- -let libFlag (tcConfigB: TcConfigBuilder) = +let libFlag (tcConfigB: TcConfigBuilder) = CompilerOption ("lib", tagDirList, OptionStringList (fun s -> tcConfigB.AddIncludePath (rangeStartup, s, tcConfigB.implicitIncludeDir)), None, Some (FSComp.SR.optsLib())) -let codePageFlag (tcConfigB: TcConfigBuilder) = +let codePageFlag (tcConfigB: TcConfigBuilder) = CompilerOption ("codepage", tagInt, - OptionInt (fun n -> - try + OptionInt (fun n -> + try System.Text.Encoding.GetEncoding n |> ignore - with :? System.ArgumentException as err -> + with :? System.ArgumentException as err -> error(Error(FSComp.SR.optsProblemWithCodepage(n, err.Message), rangeCmdArgs)) tcConfigB.inputCodePage <- Some n), None, Some (FSComp.SR.optsCodepage())) -let preferredUiLang (tcConfigB: TcConfigBuilder) = +let preferredUiLang (tcConfigB: TcConfigBuilder) = CompilerOption ("preferreduilang", tagString, OptionString (fun s -> tcConfigB.preferredUiLang <- Some s), None, Some(FSComp.SR.optsPreferredUiLang())) -let utf8OutputFlag (tcConfigB: TcConfigBuilder) = +let utf8OutputFlag (tcConfigB: TcConfigBuilder) = CompilerOption ("utf8output", tagNone, OptionUnit (fun () -> tcConfigB.utf8output <- true), None, Some (FSComp.SR.optsUtf8output())) -let fullPathsFlag (tcConfigB: TcConfigBuilder) = +let fullPathsFlag (tcConfigB: TcConfigBuilder) = CompilerOption ("fullpaths", tagNone, OptionUnit (fun () -> tcConfigB.showFullPaths <- true), None, Some (FSComp.SR.optsFullpaths())) -let cliRootFlag (_tcConfigB: TcConfigBuilder) = +let cliRootFlag (_tcConfigB: TcConfigBuilder) = CompilerOption ("cliroot", tagString, OptionString (fun _ -> ()), Some(DeprecatedCommandLineOptionFull(FSComp.SR.optsClirootDeprecatedMsg(), rangeCmdArgs)), Some(FSComp.SR.optsClirootDescription())) -let SetTargetProfile tcConfigB v = - tcConfigB.primaryAssembly <- +let SetTargetProfile (tcConfigB: TcConfigBuilder) v = + let primaryAssembly = match v with // Indicates we assume "mscorlib.dll", i.e .NET Framework, Mono and Profile 47 | "mscorlib" -> PrimaryAssembly.Mscorlib @@ -923,6 +923,7 @@ let SetTargetProfile tcConfigB v = // Indicates we assume "netstandard.dll", i.e .NET Standard 2.0 and above | "netstandard" -> PrimaryAssembly.NetStandard | _ -> error(Error(FSComp.SR.optsInvalidTargetProfile v, rangeCmdArgs)) + tcConfigB.SetPrimaryAssembly primaryAssembly let advancedFlagsBoth tcConfigB = [ @@ -943,16 +944,16 @@ let advancedFlagsBoth tcConfigB = Some(FSComp.SR.optsTargetProfile())) ] -let noFrameworkFlag isFsc tcConfigB = +let noFrameworkFlag isFsc tcConfigB = CompilerOption ("noframework", tagNone, - OptionUnit (fun () -> - tcConfigB.framework <- false - if isFsc then + OptionUnit (fun () -> + tcConfigB.framework <- false + if isFsc then tcConfigB.implicitlyResolveAssemblies <- false), None, Some (FSComp.SR.optsNoframework())) -let advancedFlagsFsi tcConfigB = +let advancedFlagsFsi tcConfigB = advancedFlagsBoth tcConfigB @ [ yield noFrameworkFlag false tcConfigB @@ -980,8 +981,8 @@ let advancedFlagsFsc tcConfigB = yield CompilerOption ("standalone", tagNone, - OptionUnit (fun _ -> - tcConfigB.openDebugInformationForLaterStaticLinking <- true + OptionUnit (fun _ -> + tcConfigB.openDebugInformationForLaterStaticLinking <- true tcConfigB.standalone <- true tcConfigB.implicitlyResolveAssemblies <- true), None, Some (FSComp.SR.optsStandalone())) @@ -994,7 +995,7 @@ let advancedFlagsFsc tcConfigB = Some (FSComp.SR.optsStaticlink())) #if ENABLE_MONO_SUPPORT - if runningOnMono then + if runningOnMono then yield CompilerOption ("resident", tagFile, OptionUnit (fun () -> ()), None, @@ -1026,14 +1027,14 @@ let advancedFlagsFsc tcConfigB = // OptionBlock: Internal options (test use only) //-------------------------------------------------- -let testFlag tcConfigB = +let testFlag tcConfigB = CompilerOption ("test", tagString, - OptionString (fun s -> + OptionString (fun s -> match s with | "StackSpan" -> tcConfigB.internalTestSpanStackReferring <- true | "ErrorRanges" -> tcConfigB.errorStyle <- ErrorStyle.TestErrors - | "Tracking" -> Lib.tracking <- true (* general purpose on/off diagnostics flag *) + | "Tracking" -> tracking <- true (* general purpose on/off diagnostics flag *) | "NoNeedToTailcall" -> tcConfigB.optSettings <- { tcConfigB.optSettings with reportNoNeedToTailcall = true } | "FunctionSizes" -> tcConfigB.optSettings <- { tcConfigB.optSettings with reportFunctionSizes = true } | "TotalSizes" -> tcConfigB.optSettings <- { tcConfigB.optSettings with reportTotalSizes = true } @@ -1043,6 +1044,7 @@ let testFlag tcConfigB = | "DumpDebugInfo" -> tcConfigB.dumpDebugInfo <- true | "ShowLoadedAssemblies" -> tcConfigB.showLoadedAssemblies <- true | "ContinueAfterParseFailure" -> tcConfigB.continueAfterParseFailure <- true + | "ParallelOff" -> tcConfigB.concurrentBuild <- false #if DEBUG | "ShowParserStackOnParseError" -> showParserStackOnParseError <- true #endif @@ -1050,13 +1052,13 @@ let testFlag tcConfigB = None) // Not shown in fsc.exe help, no warning on use, motivation is for use from tooling. -let editorSpecificFlags (tcConfigB: TcConfigBuilder) = +let editorSpecificFlags (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("LCID", tagInt, OptionInt ignore, None, None) - CompilerOption("flaterrors", tagNone, OptionUnit (fun () -> tcConfigB.flatErrors <- true), None, None) + CompilerOption("flaterrors", tagNone, OptionUnit (fun () -> tcConfigB.flatErrors <- true), None, None) CompilerOption("sqmsessionguid", tagNone, OptionString ignore, None, None) - CompilerOption("gccerrors", tagNone, OptionUnit (fun () -> tcConfigB.errorStyle <- ErrorStyle.GccErrors), 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("noconditionalerasure", tagNone, OptionUnit (fun () -> tcConfigB.noConditionalErasure <- true), None, None) ] @@ -1067,12 +1069,12 @@ let internalFlags (tcConfigB:TcConfigBuilder) = ("stamps", tagNone, OptionUnit ignore, Some(InternalCommandLineOption("--stamps", rangeCmdArgs)), None) - + CompilerOption ("ranges", tagNone, OptionSet DebugPrint.layoutRanges, - Some(InternalCommandLineOption("--ranges", rangeCmdArgs)), None) - + Some(InternalCommandLineOption("--ranges", rangeCmdArgs)), None) + CompilerOption ("terms", tagNone, OptionUnit (fun () -> tcConfigB.showTerms <- true), @@ -1089,27 +1091,27 @@ let internalFlags (tcConfigB:TcConfigBuilder) = OptionUnit (fun () -> Internal.Utilities.Text.Parsing.Flags.debug <- true), Some(InternalCommandLineOption("--debug-parse", 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") - + 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)), @@ -1124,17 +1126,17 @@ let internalFlags (tcConfigB:TcConfigBuilder) = ("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.tokenize <- TokenizeOption.Only), @@ -1149,56 +1151,56 @@ let internalFlags (tcConfigB:TcConfigBuilder) = ("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) - // "Display assembly reference resolution information") + // "Display assembly reference resolution information") CompilerOption ("resolutions", tagNone, OptionUnit (fun () -> tcConfigB.showReferenceResolutions <- true), - Some(InternalCommandLineOption("", rangeCmdArgs)), None) - + 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 ("resolutionframeworkregistrybase", tagString, OptionString (fun _ -> ()), - Some(InternalCommandLineOption("", rangeCmdArgs)), None) - + 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 _ -> ()), Some(InternalCommandLineOption("resolutionassemblyfoldersuffix", rangeCmdArgs)), None) - + // "Additional reference resolution conditions. For example \"OSVersion=5.1.2600.0, PlatformID=id") CompilerOption ("resolutionassemblyfoldersconditions", tagString, OptionString (fun _ -> ()), - Some(InternalCommandLineOption("resolutionassemblyfoldersconditions", rangeCmdArgs)), None) - + Some(InternalCommandLineOption("resolutionassemblyfoldersconditions", rangeCmdArgs)), None) + // "Resolve assembly references using MSBuild resolution rules rather than directory based (Default=true except when running fsc.exe under mono)") CompilerOption ("msbuildresolution", tagNone, @@ -1214,7 +1216,7 @@ let internalFlags (tcConfigB:TcConfigBuilder) = ("nodebugdata", tagNone, OptionUnit (fun () -> tcConfigB.noDebugData<-true), Some(InternalCommandLineOption("--nodebugdata", rangeCmdArgs)), None) - + testFlag tcConfigB ] @ editorSpecificFlags tcConfigB @ @@ -1222,17 +1224,17 @@ let internalFlags (tcConfigB:TcConfigBuilder) = ("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), @@ -1242,14 +1244,14 @@ let internalFlags (tcConfigB:TcConfigBuilder) = CompilerOption ("times", tagNone, OptionUnit (fun () -> tcConfigB.showTimes <- true), - Some(InternalCommandLineOption("times", rangeCmdArgs)), None) + Some(InternalCommandLineOption("times", rangeCmdArgs)), None) #if !NO_EXTENSIONTYPING // "Display information about extension type resolution") CompilerOption ("showextensionresolution", tagNone, OptionUnit (fun () -> tcConfigB.showExtensionTypeMessages <- true), - Some(InternalCommandLineOption("showextensionresolution", rangeCmdArgs)), None) + Some(InternalCommandLineOption("showextensionresolution", rangeCmdArgs)), None) #endif CompilerOption @@ -1261,14 +1263,12 @@ let internalFlags (tcConfigB:TcConfigBuilder) = // OptionBlock: Deprecated flags (fsc, service only) //-------------------------------------------------- -let compilingFsLibFlag (tcConfigB: TcConfigBuilder) = +let compilingFsLibFlag (tcConfigB: TcConfigBuilder) = CompilerOption ("compiling-fslib", tagNone, - OptionUnit (fun () -> - tcConfigB.compilingFslib <- true - tcConfigB.TurnWarningOff(rangeStartup, "42") - ErrorLogger.reportLibraryOnlyFeatures <- false - IlxSettings.ilxCompilingFSharpCoreLib <- true), + OptionUnit (fun () -> + tcConfigB.compilingFslib <- true + tcConfigB.TurnWarningOff(rangeStartup, "42")), Some(InternalCommandLineOption("--compiling-fslib", rangeCmdArgs)), None) let compilingFsLib20Flag = @@ -1280,13 +1280,13 @@ let compilingFsLib40Flag = let compilingFsLibNoBigIntFlag = CompilerOption ("compiling-fslib-nobigint", tagNone, OptionUnit (fun () -> () ), None, None) -let mlKeywordsFlag = +let mlKeywordsFlag = CompilerOption ("ml-keywords", tagNone, OptionUnit (fun () -> ()), Some(DeprecatedCommandLineOptionNoDescription("--ml-keywords", rangeCmdArgs)), None) -let gnuStyleErrorsFlag tcConfigB = +let gnuStyleErrorsFlag tcConfigB = CompilerOption ("gnu-style-errors", tagNone, OptionUnit (fun () -> tcConfigB.errorStyle <- ErrorStyle.EmacsErrors), @@ -1307,7 +1307,7 @@ let deprecatedFlagsBoth tcConfigB = CompilerOption ("no-indentation-syntax", tagNone, OptionUnit (fun () -> tcConfigB.light <- Some false), - Some(DeprecatedCommandLineOptionNoDescription("--no-indentation-syntax", rangeCmdArgs)), None) + Some(DeprecatedCommandLineOptionNoDescription("--no-indentation-syntax", rangeCmdArgs)), None) ] let deprecatedFlagsFsi tcConfigB = deprecatedFlagsBoth tcConfigB @@ -1370,48 +1370,58 @@ let deprecatedFlagsFsc tcConfigB = ("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) - + 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) - + // 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 + + CompilerOption + ("keycontainer", tagString, + OptionString(fun s -> + if FSharpEnvironment.isRunningOnCoreClr then error(Error(FSComp.SR.containerSigningUnsupportedOnThisPlatform(), rangeCmdArgs)) + else tcConfigB.container <- Some s), + if FSharpEnvironment.isRunningOnCoreClr then None + else Some(DeprecatedCommandLineOptionSuggestAlternative("--keycontainer", "--keyfile", rangeCmdArgs)) + ,None) + + mlKeywordsFlag gnuStyleErrorsFlag tcConfigB ] @@ -1429,16 +1439,16 @@ let displayHelpFsc tcConfigB (blocks:CompilerOptionBlock list) = DisplayBannerText tcConfigB PrintCompilerOptionBlocks blocks exit 0 - + let displayVersion tcConfigB = printfn "%s" tcConfigB.productNameForBannerText exit 0 -let miscFlagsBoth tcConfigB = +let miscFlagsBoth tcConfigB = [ CompilerOption("nologo", tagNone, OptionUnit (fun () -> tcConfigB.showBanner <- false), None, Some (FSComp.SR.optsNologo())) CompilerOption("version", tagNone, OptionUnit (fun () -> displayVersion tcConfigB), None, Some (FSComp.SR.optsVersion())) ] - + let miscFlagsFsc tcConfigB = miscFlagsBoth tcConfigB @ [ CompilerOption("help", tagNone, OptionHelp (fun blocks -> displayHelpFsc tcConfigB blocks), None, Some (FSComp.SR.optsHelp())) @@ -1449,7 +1459,7 @@ let miscFlagsFsi tcConfigB = miscFlagsBoth tcConfigB // OptionBlock: Abbreviations of existing options //----------------------------------------------- - + let abbreviatedFlagsBoth tcConfigB = [ CompilerOption("d", tagString, OptionString (defineSymbol tcConfigB), None, Some(FSComp.SR.optsShortFormOf("--define"))) @@ -1458,7 +1468,7 @@ let abbreviatedFlagsBoth tcConfigB = CompilerOption("i", tagString, OptionUnit (fun () -> tcConfigB.printSignature <- true), None, Some(FSComp.SR.optsShortFormOf("--sig"))) CompilerOption("r", tagFile, OptionString (fun s -> tcConfigB.AddReferencedAssemblyByPath (rangeStartup, s)), None, Some(FSComp.SR.optsShortFormOf("--reference"))) - CompilerOption("I", tagDirList, OptionStringList (fun s -> tcConfigB.AddIncludePath (rangeStartup, s, tcConfigB.implicitIncludeDir)), + CompilerOption("I", tagDirList, OptionStringList (fun s -> tcConfigB.AddIncludePath (rangeStartup, s, tcConfigB.implicitIncludeDir)), None, Some (FSComp.SR.optsShortFormOf("--lib"))) ] @@ -1466,34 +1476,34 @@ let abbreviatedFlagsFsi tcConfigB = abbreviatedFlagsBoth tcConfigB let abbreviatedFlagsFsc tcConfigB = abbreviatedFlagsBoth tcConfigB @ - [ // FSC only abbreviated options + [ // FSC only abbreviated options CompilerOption ("o", tagString, OptionString (setOutFileName tcConfigB), None, Some(FSComp.SR.optsShortFormOf("--out"))) - + CompilerOption ("a", tagString, OptionUnit (fun () -> tcConfigB.target <- CompilerTarget.Dll), None, Some(FSComp.SR.optsShortFormOf("--target library"))) - - // FSC help abbreviations. FSI has it's own help options... + + // 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 ("full-help", tagNone, OptionHelp (fun blocks -> displayHelpFsc tcConfigB blocks), None, Some(FSComp.SR.optsShortFormOf("--help"))) ] - + let GetAbbrevFlagSet tcConfigB isFsc = let mutable argList: string list = [] for c in ((if isFsc then abbreviatedFlagsFsc else abbreviatedFlagsFsi) tcConfigB) do @@ -1502,7 +1512,7 @@ let GetAbbrevFlagSet tcConfigB isFsc = | CompilerOption(arg, _, OptionStringList _, _, _) -> argList <- argList @ ["-"+arg;"/"+arg] | _ -> () Set.ofList argList - + // check for abbreviated options that accept spaces instead of colons, and replace the spaces // with colons when necessary let PostProcessCompilerArgs (abbrevArgs: string Set) (args: string []) = @@ -1510,10 +1520,10 @@ let PostProcessCompilerArgs (abbrevArgs: string Set) (args: string []) = let mutable idx = 0 let len = args.Length let mutable arga: string[] = Array.create len "" - + 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] @@ -1523,7 +1533,7 @@ let PostProcessCompilerArgs (abbrevArgs: string Set) (args: string []) = // OptionBlock: QA options //------------------------ - + let testingAndQAFlags _tcConfigB = [ CompilerOption @@ -1535,16 +1545,16 @@ let testingAndQAFlags _tcConfigB = // Core compiler options, overview //-------------------------------- - + (* The "core" compiler options are "the ones defined here". Currently, fsi.exe has some additional options, defined in fsi.fs. - + The compiler options are put into blocks, named as Flags. Some block options differ between fsc and fsi, in this case they split as FlagsFsc and FlagsFsi. - + The "service.fs" (language service) flags are the same as the fsc flags (except help options are removed). REVIEW: is this correct? what about fsx files in VS and fsi options? - + Block | notes ---------------------------|-------------------- outputFileFlags | @@ -1566,8 +1576,8 @@ 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) +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 false tcConfigB) @@ -1607,7 +1617,7 @@ let GetCoreFsiCompilerOptions (tcConfigB: TcConfigBuilder) = let ApplyCommandLineArgs(tcConfigB: TcConfigBuilder, sourceFiles: string list, argv) = try let sourceFilesAcc = ResizeArray sourceFiles - let collect name = if not (Filename.isDll name) then sourceFilesAcc.Add name + let collect name = if not (FileSystemUtils.isDll name) then sourceFilesAcc.Add name ParseCompilerOptions(collect, GetCoreServiceCompilerOptions tcConfigB, argv) ResizeArray.toList sourceFilesAcc with e -> @@ -1619,31 +1629,31 @@ let ApplyCommandLineArgs(tcConfigB: TcConfigBuilder, sourceFiles: string list, a // PrintWholeAssemblyImplementation //---------------------------------------------------------------------------- -let mutable showTermFileCount = 0 +let mutable showTermFileCount = 0 let PrintWholeAssemblyImplementation g (tcConfig:TcConfig) outfile header expr = if tcConfig.showTerms then - if tcConfig.writeTermsToFiles then + if tcConfig.writeTermsToFiles then let filename = outfile + ".terms" - use f = System.IO.File.CreateText (filename + "-" + string showTermFileCount + "-" + header) + use f = FileSystem.OpenFileForWriteShim(filename + "-" + string showTermFileCount + "-" + header).GetWriter() showTermFileCount <- showTermFileCount + 1 - Layout.outL f (Display.squashTo 192 (DebugPrint.implFilesL g expr)) - else + LayoutRender.outL f (Display.squashTo 192 (DebugPrint.implFilesL g expr)) + else dprintf "\n------------------\nshowTerm: %s:\n" header - Layout.outL stderr (Display.squashTo 192 (DebugPrint.implFilesL g expr)) + LayoutRender.outL stderr (Display.squashTo 192 (DebugPrint.implFilesL g expr)) dprintf "\n------------------\n" //---------------------------------------------------------------------------- -// ReportTime +// ReportTime //---------------------------------------------------------------------------- let mutable tPrev = None let mutable nPrev = None let ReportTime (tcConfig:TcConfig) descr = - + match nPrev with | None -> () | Some prevDescr -> - if tcConfig.pause then + if tcConfig.pause then 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. @@ -1672,7 +1682,7 @@ let ReportTime (tcConfig:TcConfig) descr = - if (tcConfig.showTimes || verbose) then + if (tcConfig.showTimes || verbose) then // Note that timing calls are relatively expensive on the startup path so we don't // make this call unless showTimes has been turned on. let timeNow = System.Diagnostics.Process.GetCurrentProcess().UserProcessorTime.TotalSeconds @@ -1684,10 +1694,10 @@ let ReportTime (tcConfig:TcConfig) descr = match tPrev, nPrev with | Some (timePrev, gcPrev:int []), Some prevDescr -> 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) + dprintf "TIME: %4.1f Delta: %4.1f Mem: %3d" + timeNow (timeNow - timePrev) wsNow - dprintf " G0: %3d G1: %2d G2: %2d [%s]\n" + 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 @@ -1719,11 +1729,16 @@ let DoWithColor newColor f = finally ignoreFailureOnMono1_1_16 (fun () -> Console.ForegroundColor <- c) -let DoWithErrorColor isError f = +let DoWithDiagnosticColor severity f = match foreBackColor() with | None -> f() | Some (_, backColor) -> + let infoColor = if backColor = ConsoleColor.White then ConsoleColor.Blue else ConsoleColor.Green let warnColor = if backColor = ConsoleColor.White then ConsoleColor.DarkBlue else ConsoleColor.Cyan let errorColor = ConsoleColor.Red - let color = if isError then errorColor else warnColor + let color = + match severity with + | FSharpDiagnosticSeverity.Error -> errorColor + | FSharpDiagnosticSeverity.Warning -> warnColor + | _ -> infoColor DoWithColor color f diff --git a/src/fsharp/CompilerOptions.fsi b/src/fsharp/CompilerOptions.fsi index 5c83869d87c..a2f9c8cd10c 100644 --- a/src/fsharp/CompilerOptions.fsi +++ b/src/fsharp/CompilerOptions.fsi @@ -1,21 +1,11 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. +/// Compiler Option Parser module internal FSharp.Compiler.CompilerOptions open System -open FSharp.Compiler -open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CompilerConfig -open FSharp.Compiler.CompilerImports -open FSharp.Compiler.Import -open FSharp.Compiler.Optimizer -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.TypedTree - -//---------------------------------------------------------------------------- -// Compiler Option Parser -//---------------------------------------------------------------------------- +open FSharp.Compiler.Diagnostics // For command-line options that can be suffixed with +/- [] @@ -41,56 +31,55 @@ type OptionSpec = | OptionHelp of (CompilerOptionBlock list -> unit) // like OptionUnit, but given the "options" | OptionGeneral of (string list -> bool) * (string list -> string list) // Applies? * (ApplyReturningResidualArgs) -and CompilerOption = - /// CompilerOption(name, argumentDescriptionString, actionSpec, exceptionOpt, helpTextOpt - | CompilerOption of string * string * OptionSpec * Option * string option +and CompilerOption = + | CompilerOption of name: string * argumentDescriptionString: string * actionSpec: OptionSpec * deprecationError: Option * helpText: string option -and CompilerOptionBlock = - | PublicOptions of string * CompilerOption list - | PrivateOptions of CompilerOption list +and CompilerOptionBlock = + | PublicOptions of heading: string * options: CompilerOption list + | PrivateOptions of options: CompilerOption list -val PrintCompilerOptionBlocks : CompilerOptionBlock list -> unit // for printing usage +val PrintCompilerOptionBlocks: CompilerOptionBlock list -> unit // for printing usage -val DumpCompilerOptionBlocks : CompilerOptionBlock list -> unit // for QA +val DumpCompilerOptionBlocks: CompilerOptionBlock list -> unit // for QA -val FilterCompilerOptionBlock : (CompilerOption -> bool) -> CompilerOptionBlock -> CompilerOptionBlock +val FilterCompilerOptionBlock: (CompilerOption -> bool) -> CompilerOptionBlock -> CompilerOptionBlock /// Parse and process a set of compiler options -val ParseCompilerOptions : (string -> unit) * CompilerOptionBlock list * string list -> unit +val ParseCompilerOptions: (string -> unit) * CompilerOptionBlock list * string list -> unit -val DisplayBannerText : TcConfigBuilder -> unit +val DisplayBannerText: TcConfigBuilder -> unit -val GetCoreFscCompilerOptions : TcConfigBuilder -> CompilerOptionBlock list +val GetCoreFscCompilerOptions: TcConfigBuilder -> CompilerOptionBlock list -val GetCoreFsiCompilerOptions : TcConfigBuilder -> CompilerOptionBlock list +val GetCoreFsiCompilerOptions: TcConfigBuilder -> CompilerOptionBlock list -val GetCoreServiceCompilerOptions : TcConfigBuilder -> CompilerOptionBlock list +val GetCoreServiceCompilerOptions: TcConfigBuilder -> CompilerOptionBlock list /// Apply args to TcConfigBuilder and return new list of source files val ApplyCommandLineArgs: tcConfigB: TcConfigBuilder * sourceFiles: string list * argv: string list -> string list // Expose the "setters" for some user switches, to enable setting of defaults -val SetOptimizeSwitch : TcConfigBuilder -> OptionSwitch -> unit +val SetOptimizeSwitch: TcConfigBuilder -> OptionSwitch -> unit -val SetTailcallSwitch : TcConfigBuilder -> OptionSwitch -> unit +val SetTailcallSwitch: TcConfigBuilder -> OptionSwitch -> unit -val SetDebugSwitch : TcConfigBuilder -> string option -> OptionSwitch -> unit +val SetDebugSwitch: TcConfigBuilder -> string option -> OptionSwitch -> unit -val PrintOptionInfo : TcConfigBuilder -> unit +val PrintOptionInfo: TcConfigBuilder -> unit -val SetTargetProfile : TcConfigBuilder -> string -> unit +val SetTargetProfile: TcConfigBuilder -> string -> unit // Miscellany -val ignoreFailureOnMono1_1_16 : (unit -> unit) -> unit +val ignoreFailureOnMono1_1_16: (unit -> unit) -> unit -val mutable enableConsoleColoring : bool +val mutable enableConsoleColoring: bool -val DoWithColor : ConsoleColor -> (unit -> 'a) -> 'a +val DoWithColor: ConsoleColor -> (unit -> 'a) -> 'a -val DoWithErrorColor : bool -> (unit -> 'a) -> 'a +val DoWithDiagnosticColor: FSharpDiagnosticSeverity -> (unit -> 'a) -> 'a -val ReportTime : TcConfig -> string -> unit +val ReportTime: TcConfig -> string -> unit -val GetAbbrevFlagSet : TcConfigBuilder -> bool -> Set +val GetAbbrevFlagSet: TcConfigBuilder -> bool -> Set -val PostProcessCompilerArgs : string Set -> string [] -> string list +val PostProcessCompilerArgs: string Set -> string [] -> string list diff --git a/src/fsharp/ConstraintSolver.fs b/src/fsharp/ConstraintSolver.fs index a8f2ff5d9d4..a3837ae5fc2 100644 --- a/src/fsharp/ConstraintSolver.fs +++ b/src/fsharp/ConstraintSolver.fs @@ -43,10 +43,12 @@ module internal FSharp.Compiler.ConstraintSolver open Internal.Utilities.Collections +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras +open Internal.Utilities.Rational open FSharp.Compiler open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.AttributeChecking open FSharp.Compiler.ErrorLogger @@ -54,13 +56,13 @@ open FSharp.Compiler.Features open FSharp.Compiler.Import open FSharp.Compiler.InfoReader open FSharp.Compiler.Infos -open FSharp.Compiler.Lib open FSharp.Compiler.MethodCalls -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.Range -open FSharp.Compiler.Rational +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps @@ -76,27 +78,27 @@ open FSharp.Compiler.TypeRelations let compgenId = mkSynId range0 unassignedTyparName let NewCompGenTypar (kind, rigid, staticReq, dynamicReq, error) = - Construct.NewTypar(kind, rigid, Typar(compgenId, staticReq, true), error, dynamicReq, [], false, false) + Construct.NewTypar(kind, rigid, SynTypar(compgenId, staticReq, true), error, dynamicReq, [], false, false) let AnonTyparId m = mkSynId m unassignedTyparName let NewAnonTypar (kind, m, rigid, var, dyn) = - Construct.NewTypar (kind, rigid, Typar(AnonTyparId m, var, true), false, dyn, [], false, false) + Construct.NewTypar (kind, rigid, SynTypar(AnonTyparId m, var, true), false, dyn, [], false, false) let NewNamedInferenceMeasureVar (_m, rigid, var, id) = - Construct.NewTypar(TyparKind.Measure, rigid, Typar(id, var, false), false, TyparDynamicReq.No, [], false, false) + Construct.NewTypar(TyparKind.Measure, rigid, SynTypar(id, var, false), false, TyparDynamicReq.No, [], false, false) let NewInferenceMeasurePar () = - NewCompGenTypar (TyparKind.Measure, TyparRigidity.Flexible, NoStaticReq, TyparDynamicReq.No, false) + NewCompGenTypar (TyparKind.Measure, TyparRigidity.Flexible, TyparStaticReq.None, TyparDynamicReq.No, false) let NewErrorTypar () = - NewCompGenTypar (TyparKind.Type, TyparRigidity.Flexible, NoStaticReq, TyparDynamicReq.No, true) + NewCompGenTypar (TyparKind.Type, TyparRigidity.Flexible, TyparStaticReq.None, TyparDynamicReq.No, true) let NewErrorMeasureVar () = - NewCompGenTypar (TyparKind.Measure, TyparRigidity.Flexible, NoStaticReq, TyparDynamicReq.No, true) + NewCompGenTypar (TyparKind.Measure, TyparRigidity.Flexible, TyparStaticReq.None, TyparDynamicReq.No, true) let NewInferenceType () = - mkTyparTy (Construct.NewTypar (TyparKind.Type, TyparRigidity.Flexible, Typar(compgenId, NoStaticReq, true), false, TyparDynamicReq.No, [], false, false)) + mkTyparTy (Construct.NewTypar (TyparKind.Type, TyparRigidity.Flexible, SynTypar(compgenId, TyparStaticReq.None, true), false, TyparDynamicReq.No, [], false, false)) let NewErrorType () = mkTyparTy (NewErrorTypar ()) @@ -104,7 +106,7 @@ let NewErrorType () = let NewErrorMeasure () = Measure.Var (NewErrorMeasureVar ()) let NewByRefKindInferenceType (g: TcGlobals) m = - let tp = Construct.NewTypar (TyparKind.Type, TyparRigidity.Flexible, Typar(compgenId, HeadTypeStaticReq, true), false, TyparDynamicReq.No, [], false, false) + let tp = Construct.NewTypar (TyparKind.Type, TyparRigidity.Flexible, SynTypar(compgenId, TyparStaticReq.HeadType, true), false, TyparDynamicReq.No, [], false, false) if g.byrefkind_InOut_tcr.CanDeref then tp.SetConstraints [TyparConstraint.DefaultsTo(10, TType_app(g.byrefkind_InOut_tcr, []), m)] mkTyparTy tp @@ -193,7 +195,7 @@ type ContextInfo = type OverloadInformation = { methodSlot: CalledMeth - amap : ImportMap + infoReader : InfoReader error: exn } @@ -608,8 +610,8 @@ and SolveTypStaticReqTypar (csenv: ConstraintSolverEnv) trace req (tpr: Typar) = and SolveTypStaticReq (csenv: ConstraintSolverEnv) trace req ty = match req with - | NoStaticReq -> CompleteD - | HeadTypeStaticReq -> + | TyparStaticReq.None -> CompleteD + | TyparStaticReq.HeadType -> // requires that a type constructor be known at compile time match stripTyparEqns ty with | TType_measure ms -> @@ -1235,7 +1237,7 @@ and SolveMemberConstraint (csenv: ConstraintSolverEnv) ignoreUnresolvedOverload | _ -> do! ErrorD (ConstraintSolverError(FSComp.SR.csExpectedArguments(), m, m2)) // Trait calls are only supported on pseudo type (variables) for e in tys do - do! SolveTypStaticReq csenv trace HeadTypeStaticReq e + do! SolveTypStaticReq csenv trace TyparStaticReq.HeadType e let argtys = if memFlags.IsInstance then List.tail traitObjAndArgTys else traitObjAndArgTys @@ -1699,7 +1701,7 @@ and GetRelevantMethodsForTrait (csenv: ConstraintSolverEnv) (permitWeakResolutio let m = csenv.m let minfos = match memFlags.MemberKind with - | MemberKind.Constructor -> + | SynMemberKind.Constructor -> tys |> List.map (GetIntrinsicConstructorInfosOfType csenv.SolverState.InfoReader m) | _ -> tys |> List.map (GetIntrinsicMethInfosOfType csenv.SolverState.InfoReader (Some nm) AccessibleFromSomeFSharpCode AllowMultiIntfInstantiations.Yes IgnoreOverrides m) @@ -2393,6 +2395,7 @@ and ReportNoCandidatesError (csenv: ConstraintSolverEnv) (nUnnamedCallerArgs, nN let amap = csenv.amap let m = csenv.m let denv = csenv.DisplayEnv + let infoReader = csenv.InfoReader match (calledMethGroup |> List.partition (CalledMeth.GetMethod >> IsMethInfoAccessible amap m ad)), (calledMethGroup |> List.partition (fun cmeth -> cmeth.HasCorrectObjArgs(m))), @@ -2417,7 +2420,7 @@ and ReportNoCandidatesError (csenv: ConstraintSolverEnv) (nUnnamedCallerArgs, nN // One method, incorrect name/arg assignment | _, _, _, _, ([], [cmeth]) -> let minfo = cmeth.Method - let msgNum, msgText = FSComp.SR.csRequiredSignatureIs(NicePrint.stringOfMethInfo amap m denv minfo) + let msgNum, msgText = FSComp.SR.csRequiredSignatureIs(NicePrint.stringOfMethInfo infoReader m denv minfo) match cmeth.UnassignedNamedArgs with | CallerNamedArg(id, _) :: _ -> if minfo.IsConstructor then @@ -2435,7 +2438,7 @@ and ReportNoCandidatesError (csenv: ConstraintSolverEnv) (nUnnamedCallerArgs, nN let minfo = cmeth.Method let nReqd = cmeth.TotalNumUnnamedCalledArgs let nActual = cmeth.TotalNumUnnamedCallerArgs - let signature = NicePrint.stringOfMethInfo amap m denv minfo + let signature = NicePrint.stringOfMethInfo infoReader m denv minfo if nActual = nReqd then let nreqdTyArgs = cmeth.NumCalledTyArgs let nactualTyArgs = cmeth.NumCallerTyArgs @@ -2524,7 +2527,7 @@ and ResolveOverloading reqdRetTyOpt // The expected return type, if known = let g = csenv.g - let amap = csenv.amap + let infoReader = csenv.InfoReader let m = csenv.m let denv = csenv.DisplayEnv let isOpConversion = methodName = "op_Explicit" || methodName = "op_Implicit" @@ -2619,7 +2622,7 @@ and ResolveOverloading calledMeth) with | OkResult _ -> None | ErrorResult(_warnings, exn) -> - Some {methodSlot = calledMeth; amap = amap; error = exn }) + Some {methodSlot = calledMeth; infoReader = infoReader; error = exn }) None, ErrorD (failOverloading (NoOverloadsFound (methodName, errors, cx))), NoTrace @@ -2796,8 +2799,8 @@ and ResolveOverloading let methods = let getMethodSlotsAndErrors methodSlot errors = [ match errors with - | [] -> yield { methodSlot = methodSlot; error = Unchecked.defaultof; amap = amap } - | errors -> for error in errors do yield { methodSlot = methodSlot; error = error; amap = amap } ] + | [] -> yield { methodSlot = methodSlot; error = Unchecked.defaultof; infoReader = infoReader } + | errors -> for error in errors do yield { methodSlot = methodSlot; error = error; infoReader = infoReader } ] // use the most precise set diff --git a/src/fsharp/ConstraintSolver.fsi b/src/fsharp/ConstraintSolver.fsi index 888ac4805c7..b37d4445eac 100644 --- a/src/fsharp/ConstraintSolver.fsi +++ b/src/fsharp/ConstraintSolver.fsi @@ -10,9 +10,9 @@ open FSharp.Compiler.Import open FSharp.Compiler.Infos open FSharp.Compiler.InfoReader open FSharp.Compiler.MethodCalls -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps @@ -94,7 +94,7 @@ type ContextInfo = type OverloadInformation = { methodSlot: CalledMeth - amap : ImportMap + infoReader: InfoReader error: exn } diff --git a/src/fsharp/CreateILModule.fs b/src/fsharp/CreateILModule.fs index 6c61235a878..c08b7d6b813 100644 --- a/src/fsharp/CreateILModule.fs +++ b/src/fsharp/CreateILModule.fs @@ -1,96 +1,63 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.CreateILModule +module internal FSharp.Compiler.CreateILModule open System -open System.Collections.Generic -open System.Diagnostics -open System.Globalization open System.IO open System.Reflection -open System.Text -open System.Threading open Internal.Utilities -open Internal.Utilities.Collections -open Internal.Utilities.Filename -open Internal.Utilities.StructuredFormat - +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler -open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.ILBinaryReader -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Internal.Utils -open FSharp.Compiler.AbstractIL.Diagnostics -open FSharp.Compiler.AccessibilityLogic +open FSharp.Compiler.AbstractIL.NativeRes +open FSharp.Compiler.AbstractIL.StrongNameSign open FSharp.Compiler.BinaryResourceFormats -open FSharp.Compiler.CheckExpressions open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerConfig -open FSharp.Compiler.CompilerDiagnostics open FSharp.Compiler.CompilerImports -open FSharp.Compiler.CompilerOptions open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.ErrorLogger open FSharp.Compiler.IlxGen -open FSharp.Compiler.InfoReader -open FSharp.Compiler.Lib -open FSharp.Compiler.ParseAndCheckInputs -open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.IO open FSharp.Compiler.OptimizeInputs -open FSharp.Compiler.ScriptClosure -open FSharp.Compiler.SyntaxTree -open FSharp.Compiler.Range +open FSharp.Compiler.Text.Range open FSharp.Compiler.TypedTree -open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TcGlobals -open FSharp.Compiler.XmlDocFileWriter -open FSharp.Compiler.StaticLinking -open Microsoft.DotNet.DependencyManager - -open FSharp.Compiler.AbstractIL.Internal.StrongNameSign - -#if !NO_EXTENSIONTYPING -open FSharp.Compiler.ExtensionTyping -#endif - -//---------------------------------------------------------------------------- -// Helpers for finding attributes -//---------------------------------------------------------------------------- -module AttributeHelpers = +/// Helpers for finding attributes +module AttributeHelpers = /// Try to find an attribute that takes a string argument let TryFindStringAttribute (g: TcGlobals) attrib attribs = - match g.TryFindSysAttrib attrib with + match g.TryFindSysAttrib attrib with | None -> None - | Some attribRef -> + | Some attribRef -> match TryFindFSharpAttribute g attribRef attribs with | Some (Attrib(_, _, [ AttribStringArg s ], _, _, _, _)) -> Some (s) | _ -> None - + let TryFindIntAttribute (g: TcGlobals) attrib attribs = - match g.TryFindSysAttrib attrib with + match g.TryFindSysAttrib attrib with | None -> None - | Some attribRef -> + | Some attribRef -> match TryFindFSharpAttribute g attribRef attribs with | Some (Attrib(_, _, [ AttribInt32Arg i ], _, _, _, _)) -> Some (i) | _ -> None - + let TryFindBoolAttribute (g: TcGlobals) attrib attribs = - match g.TryFindSysAttrib attrib with + match g.TryFindSysAttrib attrib with | None -> None - | Some attribRef -> + | Some attribRef -> match TryFindFSharpAttribute g attribRef attribs with | Some (Attrib(_, _, [ AttribBoolArg p ], _, _, _, _)) -> Some (p) | _ -> None let (|ILVersion|_|) (versionString: string) = - try Some (IL.parseILVersion versionString) - with e -> + try Some (parseILVersion versionString) + with e -> None //---------------------------------------------------------------------------- @@ -105,61 +72,63 @@ let ValidateKeySigningAttributes (tcConfig : TcConfig, tcGlobals, topAttrs) = let delaySignAttrib = AttributeHelpers.TryFindBoolAttribute tcGlobals "System.Reflection.AssemblyDelaySignAttribute" topAttrs.assemblyAttrs let signerAttrib = AttributeHelpers.TryFindStringAttribute tcGlobals "System.Reflection.AssemblyKeyFileAttribute" topAttrs.assemblyAttrs let containerAttrib = AttributeHelpers.TryFindStringAttribute tcGlobals "System.Reflection.AssemblyKeyNameAttribute" topAttrs.assemblyAttrs - + // if delaySign is set via an attribute, validate that it wasn't set via an option - let delaysign = - match delaySignAttrib with - | Some delaysign -> + let delaysign = + 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 | _ -> tcConfig.delaysign - + // if signer is set via an attribute, validate that it wasn't set via an option - let signer = + let signer = match signerAttrib with - | Some signer -> + | 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 | None -> tcConfig.signer - + // if container is set via an attribute, validate that it wasn't set via an option, and that they keyfile wasn't set // if keyfile was set, use that instead (silently) // REVIEW: This is C# behavior, but it seems kind of sketchy that we fail silently - let container = - match containerAttrib with - | Some container -> + let container = + match containerAttrib with + | Some container -> + if not (FSharpEnvironment.isRunningOnCoreClr) then + warning(Error(FSComp.SR.containerDeprecated(), rangeCmdArgs)) 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 | None -> tcConfig.container - + StrongNameSigningInfo (delaysign, tcConfig.publicsign, signer, container) /// Get the object used to perform strong-name signing -let GetStrongNameSigner signingInfo = +let GetStrongNameSigner signingInfo = let (StrongNameSigningInfo(delaysign, publicsign, signer, container)) = signingInfo // REVIEW: favor the container over the key file - C# appears to do this match container with | Some container -> Some (ILStrongNameSigner.OpenKeyContainer container) | None -> - match signer with + match signer with | None -> None | Some s -> - try + try if publicsign || delaysign then Some (ILStrongNameSigner.OpenPublicKeyOptions s publicsign) else - Some (ILStrongNameSigner.OpenKeyPairFile s) - with _ -> + Some (ILStrongNameSigner.OpenKeyPairFile s) + with _ -> // Note :: don't use errorR here since we really want to fail and not produce a binary error(Error(FSComp.SR.fscKeyFileCouldNotBeOpened s, rangeCmdArgs)) @@ -167,12 +136,12 @@ let GetStrongNameSigner signingInfo = // Building the contents of the finalized IL module //---------------------------------------------------------------------------- -module MainModuleBuilder = +module MainModuleBuilder = - let injectedCompatTypes = + let injectedCompatTypes = set [ "System.Tuple`1" - "System.Tuple`2" - "System.Tuple`3" + "System.Tuple`2" + "System.Tuple`3" "System.Tuple`4" "System.Tuple`5" "System.Tuple`6" @@ -183,7 +152,7 @@ module MainModuleBuilder = "System.Collections.IStructuralComparable" "System.Collections.IStructuralEquatable" ] - let typesForwardedToMscorlib = + let typesForwardedToMscorlib = set [ "System.AggregateException" "System.Threading.CancellationTokenRegistration" "System.Threading.CancellationToken" @@ -199,7 +168,7 @@ module MainModuleBuilder = // 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 -> mkTypeForwarder (tcGlobals.ilg.primaryAssemblyScopeRef) t (mkILNestedExportedTypes List.empty) (mkILCustomAttrs List.empty) ILTypeDefAccess.Public ) + Seq.map (fun t -> mkTypeForwarder (tcGlobals.ilg.primaryAssemblyScopeRef) t (mkILNestedExportedTypes List.empty) (mkILCustomAttrs List.empty) ILTypeDefAccess.Public ) |> Seq.toList let createSystemNumericsExportList (tcConfig: TcConfig) (tcImports: TcImports) = @@ -209,7 +178,7 @@ module MainModuleBuilder = let numericsAssemblyRef = match tcImports.GetImportedAssemblies() |> List.tryFind(fun a -> a.FSharpViewOfMetadata.AssemblyName = refNumericsDllName) with | Some asm -> - match asm.ILScopeRef with + match asm.ILScopeRef with | ILScopeRef.Assembly aref -> Some aref | _ -> None | None -> None @@ -242,7 +211,7 @@ module MainModuleBuilder = match findStringAttr attrName with | None | Some "" -> fileVersion |> toDotted | Some (AttributeHelpers.ILVersion v) -> v |> toDotted - | Some v -> + | Some v -> // Warning will be reported by CheckExpressions.fs v @@ -271,18 +240,18 @@ module MainModuleBuilder = | x -> failwithf "error converting product version '%s' to binary, tried '%A' " version x - let CreateMainModule - (ctok, tcConfig: TcConfig, tcGlobals, tcImports: TcImports, - pdbfile, assemblyName, outfile, topAttrs, - sigDataAttributes: ILAttribute list, sigDataResources: ILResource list, optDataResources: ILResource list, + let CreateMainModule + (ctok, tcConfig: TcConfig, tcGlobals, tcImports: TcImports, + pdbfile, assemblyName, outfile, topAttrs, + sigDataAttributes: ILAttribute list, sigDataResources: ILResource list, optDataResources: ILResource list, codegenResults, assemVerFromAttrib, metadataVersion, secDecls) = RequireCompilationThread ctok - let ilTypeDefs = + let ilTypeDefs = //let topTypeDef = mkILTypeDefForGlobalFunctions tcGlobals.ilg (mkILMethods [], emptyILFields) mkILTypeDefs codegenResults.ilTypeDefs - let mainModule = + let mainModule = let hashAlg = AttributeHelpers.TryFindIntAttribute tcGlobals "System.Reflection.AssemblyAlgorithmIdAttribute" topAttrs.assemblyAttrs let locale = AttributeHelpers.TryFindStringAttribute tcGlobals "System.Reflection.AssemblyCultureAttribute" topAttrs.assemblyAttrs let flags = match AttributeHelpers.TryFindIntAttribute tcGlobals "System.Reflection.AssemblyFlagsAttribute" topAttrs.assemblyAttrs with | Some f -> f | _ -> 0x0 @@ -306,44 +275,44 @@ module MainModuleBuilder = let tcVersion = tcConfig.version.GetVersionInfo(tcConfig.implicitIncludeDir) - let reflectedDefinitionAttrs, reflectedDefinitionResources = - codegenResults.quotationResourceInfo - |> List.map (fun (referencedTypeDefs, reflectedDefinitionBytes) -> + let reflectedDefinitionAttrs, reflectedDefinitionResources = + codegenResults.quotationResourceInfo + |> List.map (fun (referencedTypeDefs, reflectedDefinitionBytes) -> let reflectedDefinitionResourceName = QuotationPickler.SerializedReflectedDefinitionsResourceNameBase+"-"+assemblyName+"-"+string(newUnique())+"-"+string(hash reflectedDefinitionBytes) - let reflectedDefinitionAttrs = - let qf = QuotationTranslator.QuotationGenerationScope.ComputeQuotationFormat tcGlobals + let reflectedDefinitionAttrs = + let qf = QuotationTranslator.QuotationGenerationScope.ComputeQuotationFormat tcGlobals if qf.SupportsDeserializeEx then [ mkCompilationMappingAttrForQuotationResource tcGlobals (reflectedDefinitionResourceName, referencedTypeDefs) ] - else + else [ ] - let reflectedDefinitionResource = + let reflectedDefinitionResource = { Name=reflectedDefinitionResourceName Location = ILResourceLocation.Local(ByteStorage.FromByteArray(reflectedDefinitionBytes)) Access= ILResourceAccess.Public CustomAttrsStored = storeILCustomAttrs emptyILCustomAttrs MetadataIndex = NoMetadataIdx } - reflectedDefinitionAttrs, reflectedDefinitionResource) + reflectedDefinitionAttrs, reflectedDefinitionResource) |> List.unzip |> (fun (attrs, resource) -> List.concat attrs, resource) - let manifestAttrs = + let manifestAttrs = mkILCustomAttrs - [ if not tcConfig.internConstantStrings then - yield mkILCustomAttribute tcGlobals.ilg - (tcGlobals.FindSysILTypeRef "System.Runtime.CompilerServices.CompilationRelaxationsAttribute", - [tcGlobals.ilg.typ_Int32], [ILAttribElem.Int32( 8)], []) + [ if not tcConfig.internConstantStrings then + yield mkILCustomAttribute + (tcGlobals.FindSysILTypeRef "System.Runtime.CompilerServices.CompilationRelaxationsAttribute", + [tcGlobals.ilg.typ_Int32], [ILAttribElem.Int32( 8)], []) yield! sigDataAttributes yield! codegenResults.ilAssemAttrs if Option.isSome pdbfile then - yield (tcGlobals.mkDebuggableAttributeV2 (tcConfig.jitTracking, tcConfig.ignoreSymbolStoreSequencePoints, disableJitOptimizations, false (* enableEnC *) )) + yield (tcGlobals.mkDebuggableAttributeV2 (tcConfig.jitTracking, tcConfig.ignoreSymbolStoreSequencePoints, disableJitOptimizations, false (* enableEnC *) )) yield! reflectedDefinitionAttrs ] // Make the manifest of the assembly - let manifest = + let manifest = if tcConfig.target = CompilerTarget.Module then None else let man = mainModule.ManifestOfAssembly - let ver = - match assemVerFromAttrib with + let ver = + match assemVerFromAttrib with | None -> tcVersion | Some v -> v Some { man with Version= Some ver @@ -351,48 +320,49 @@ module MainModuleBuilder = DisableJitOptimizations=disableJitOptimizations JitTracking= tcConfig.jitTracking IgnoreSymbolStoreSequencePoints = tcConfig.ignoreSymbolStoreSequencePoints - SecurityDeclsStored=storeILSecurityDecls secDecls } + SecurityDeclsStored=storeILSecurityDecls secDecls } - let resources = - mkILResources + let resources = + mkILResources [ for file in tcConfig.embedResources do - let name, bytes, pub = + let name, bytes, pub = let file, name, pub = TcConfigBuilder.SplitCommandLineResourceInfo file let file = tcConfig.ResolveSourceFile(rangeStartup, file, tcConfig.implicitIncludeDir) - let bytes = FileSystem.ReadAllBytesShim file + let bytes = FileSystem.OpenFileForReadShim(file).ReadAllBytes() name, bytes, pub - yield { Name=name + yield { Name=name + // TODO: We probably can directly convert ByteMemory to ByteStorage, without reading all bytes. Location=ILResourceLocation.Local(ByteStorage.FromByteArray(bytes)) - Access=pub - CustomAttrsStored=storeILCustomAttrs emptyILCustomAttrs + Access=pub + CustomAttrsStored=storeILCustomAttrs emptyILCustomAttrs MetadataIndex = NoMetadataIdx } - + yield! reflectedDefinitionResources yield! sigDataResources yield! optDataResources - for ri in tcConfig.linkResources do + 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.OpenFileForReadShim(file).ReadAllBytes()))), 0) + Access=pub CustomAttrsStored=storeILCustomAttrs emptyILCustomAttrs MetadataIndex = NoMetadataIdx } ] - let assemblyVersion = + let assemblyVersion = match tcConfig.version with | VersionNone -> assemVerFromAttrib | _ -> Some tcVersion let findAttribute name = - AttributeHelpers.TryFindStringAttribute tcGlobals name topAttrs.assemblyAttrs + AttributeHelpers.TryFindStringAttribute tcGlobals name topAttrs.assemblyAttrs //NOTE: the culture string can be turned into a number using this: // sprintf "%04x" (CultureInfo.GetCultureInfo("en").KeyboardLayoutId ) let assemblyVersionResources assemblyVersion = - match assemblyVersion with + match assemblyVersion with | None -> [] | Some assemblyVersion -> - let FindAttribute key attrib = + let FindAttribute key attrib = match findAttribute attrib with | Some text -> [(key, text)] | _ -> [] @@ -401,13 +371,13 @@ module MainModuleBuilder = let productVersionString = productVersion findAttribute fileVersionInfo - let stringFileInfo = + let stringFileInfo = // 000004b0: - // Specifies an 8-digit hexadecimal number stored as a Unicode string. The - // four most significant digits represent the language identifier. The four least - // significant digits represent the code page for which the data is formatted. - // Each Microsoft Standard Language identifier contains two parts: the low-order 10 bits - // specify the major language, and the high-order 6 bits specify the sublanguage. + // Specifies an 8-digit hexadecimal number stored as a Unicode string. The + // four most significant digits represent the language identifier. The four least + // significant digits represent the code page for which the data is formatted. + // Each Microsoft Standard Language identifier contains two parts: the low-order 10 bits + // specify the major language, and the high-order 6 bits specify the sublanguage. // For a table of valid identifiers see Language Identifiers. // // see e.g. http://msdn.microsoft.com/en-us/library/aa912040.aspx 0000 is neutral and 04b0(hex)=1252(dec) is the code page. [ ("000004b0", [ yield ("Assembly Version", (sprintf "%d.%d.%d.%d" assemblyVersion.Major assemblyVersion.Minor assemblyVersion.Build assemblyVersion.Revision)) @@ -416,46 +386,46 @@ module MainModuleBuilder = match tcConfig.outputFile with | Some f -> yield ("OriginalFilename", Path.GetFileName f) | None -> () - yield! FindAttribute "Comments" "System.Reflection.AssemblyDescriptionAttribute" - yield! FindAttribute "FileDescription" "System.Reflection.AssemblyTitleAttribute" - yield! FindAttribute "ProductName" "System.Reflection.AssemblyProductAttribute" - yield! FindAttribute "CompanyName" "System.Reflection.AssemblyCompanyAttribute" - yield! FindAttribute "LegalCopyright" "System.Reflection.AssemblyCopyrightAttribute" + yield! FindAttribute "Comments" "System.Reflection.AssemblyDescriptionAttribute" + yield! FindAttribute "FileDescription" "System.Reflection.AssemblyTitleAttribute" + yield! FindAttribute "ProductName" "System.Reflection.AssemblyProductAttribute" + yield! FindAttribute "CompanyName" "System.Reflection.AssemblyCompanyAttribute" + yield! FindAttribute "LegalCopyright" "System.Reflection.AssemblyCopyrightAttribute" yield! FindAttribute "LegalTrademarks" "System.Reflection.AssemblyTrademarkAttribute" ]) ] // These entries listed in the MSDN documentation as "standard" string entries are not yet settable - // InternalName: - // The Value member identifies the file's internal name, if one exists. For example, this - // string could contain the module name for Windows dynamic-link libraries (DLLs), a virtual - // device name for Windows virtual devices, or a device name for MS-DOS device drivers. - // OriginalFilename: - // The Value member identifies the original name of the file, not including a path. This - // enables an application to determine whether a file has been renamed by a user. This name - // may not be MS-DOS 8.3-format if the file is specific to a non-FAT file system. - // PrivateBuild: - // The Value member describes by whom, where, and why this private version of the - // file was built. This string should only be present if the VS_FF_PRIVATEBUILD flag - // is set in the dwFileFlags member of the VS_FIXEDFILEINFO structure. For example, - // Value could be 'Built by OSCAR on \OSCAR2'. - // SpecialBuild: - // The Value member describes how this version of the file differs from the normal version. - // This entry should only be present if the VS_FF_SPECIALBUILD flag is set in the dwFileFlags - // member of the VS_FIXEDFILEINFO structure. For example, Value could be 'Private build - // for Olivetti solving mouse problems on M250 and M250E computers'. - - // "If you use the Var structure to list the languages your application - // or DLL supports instead of using multiple version resources, - // use the Value member to contain an array of DWORD values indicating the - // language and code page combinations supported by this file. The - // low-order word of each DWORD must contain a Microsoft language identifier, - // and the high-order word must contain the IBM code page number. - // Either high-order or low-order word can be zero, indicating that - // the file is language or code page independent. If the Var structure is + // InternalName: + // The Value member identifies the file's internal name, if one exists. For example, this + // string could contain the module name for Windows dynamic-link libraries (DLLs), a virtual + // device name for Windows virtual devices, or a device name for MS-DOS device drivers. + // OriginalFilename: + // The Value member identifies the original name of the file, not including a path. This + // enables an application to determine whether a file has been renamed by a user. This name + // may not be MS-DOS 8.3-format if the file is specific to a non-FAT file system. + // PrivateBuild: + // The Value member describes by whom, where, and why this private version of the + // file was built. This string should only be present if the VS_FF_PRIVATEBUILD flag + // is set in the dwFileFlags member of the VS_FIXEDFILEINFO structure. For example, + // Value could be 'Built by OSCAR on \OSCAR2'. + // SpecialBuild: + // The Value member describes how this version of the file differs from the normal version. + // This entry should only be present if the VS_FF_SPECIALBUILD flag is set in the dwFileFlags + // member of the VS_FIXEDFILEINFO structure. For example, Value could be 'Private build + // for Olivetti solving mouse problems on M250 and M250E computers'. + + // "If you use the Var structure to list the languages your application + // or DLL supports instead of using multiple version resources, + // use the Value member to contain an array of DWORD values indicating the + // language and code page combinations supported by this file. The + // low-order word of each DWORD must contain a Microsoft language identifier, + // and the high-order word must contain the IBM code page number. + // Either high-order or low-order word can be zero, indicating that + // the file is language or code page independent. If the Var structure is // omitted, the file will be interpreted as both language and code page independent. " let varFileInfo = [ (0x0, 0x04b0) ] - let fixedFileInfo = + let fixedFileInfo = let dwFileFlagsMask = 0x3f // REVIEW: HARDWIRED let dwFileFlags = 0x00 // REVIEW: HARDWIRED let dwFileOS = 0x04 // REVIEW: HARDWIRED @@ -464,10 +434,10 @@ module MainModuleBuilder = let lwFileDate = 0x00L // REVIEW: HARDWIRED (fileVersionInfo, productVersionString |> productVersionToILVersionInfo, dwFileFlagsMask, dwFileFlags, dwFileOS, dwFileType, dwFileSubtype, lwFileDate) - let vsVersionInfoResource = + let vsVersionInfoResource = VersionResourceFormat.VS_VERSION_INFO_RESOURCE(fixedFileInfo, stringFileInfo, varFileInfo) - let resource = + let resource = [| yield! ResFileFormat.ResFileHeader() yield! vsVersionInfoResource |] @@ -486,36 +456,40 @@ module MainModuleBuilder = // otherwise, include the default manifest else let path = Path.Combine(System.AppContext.BaseDirectory, @"default.win32manifest") - if File.Exists(path) then path + if FileSystem.FileExistsShim(path) then path else Path.Combine(System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory(), @"default.win32manifest") - let nativeResources = + let nativeResources = [ for av in assemblyVersionResources assemblyVersion do yield ILNativeResource.Out av if not(tcConfig.win32res = "") then - yield ILNativeResource.Out (FileSystem.ReadAllBytesShim tcConfig.win32res) + yield ILNativeResource.Out (FileSystem.OpenFileForReadShim(tcConfig.win32res).ReadAllBytes()) if tcConfig.includewin32manifest && not(win32Manifest = "") && not runningOnMono then - yield ILNativeResource.Out [| yield! ResFileFormat.ResFileHeader() - yield! (ManifestResourceFormat.VS_MANIFEST_RESOURCE((FileSystem.ReadAllBytesShim win32Manifest), tcConfig.target = CompilerTarget.Dll)) |]] - - // Add attributes, version number, resources etc. - {mainModule with + yield ILNativeResource.Out [| yield! ResFileFormat.ResFileHeader() + yield! (ManifestResourceFormat.VS_MANIFEST_RESOURCE((FileSystem.OpenFileForReadShim(win32Manifest).ReadAllBytes()), tcConfig.target = CompilerTarget.Dll)) |] + if tcConfig.win32res = "" && tcConfig.win32icon <> "" && tcConfig.target <> CompilerTarget.Dll then + use ms = new MemoryStream() + Win32ResourceConversions.AppendIconToResourceStream(ms, FileSystem.OpenFileForWriteShim(tcConfig.win32icon)) + yield ILNativeResource.Out [| yield! ResFileFormat.ResFileHeader() + yield! ms.ToArray() |] ] + + // Add attributes, version number, resources etc. + {mainModule with StackReserveSize = tcConfig.stackReserveSize - Name = (if tcConfig.target = CompilerTarget.Module then Filename.fileNameOfPath outfile else mainModule.Name) - SubSystemFlags = (if tcConfig.target = CompilerTarget.WinExe then 2 else 3) + Name = (if tcConfig.target = CompilerTarget.Module then FileSystemUtils.fileNameOfPath outfile else mainModule.Name) + SubSystemFlags = (if tcConfig.target = CompilerTarget.WinExe then 2 else 3) Resources= resources ImageBase = (match tcConfig.baseAddress with None -> 0x00400000l | Some b -> b) IsDLL=(tcConfig.target = CompilerTarget.Dll || tcConfig.target=CompilerTarget.Module) - Platform = tcConfig.platform + Platform = tcConfig.platform Is32Bit=(match tcConfig.platform with Some X86 -> true | _ -> false) - Is64Bit=(match tcConfig.platform with Some AMD64 | Some IA64 -> 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 - CustomAttrsStored= + CustomAttrsStored= storeILCustomAttrs - (mkILCustomAttrs - [ if tcConfig.target = CompilerTarget.Module then - yield! sigDataAttributes + (mkILCustomAttrs + [ if tcConfig.target = CompilerTarget.Module then + yield! sigDataAttributes yield! codegenResults.ilNetModuleAttrs ]) NativeResources=nativeResources Manifest = manifest } - diff --git a/src/fsharp/CreateILModule.fsi b/src/fsharp/CreateILModule.fsi index 26ae6596002..686f587c635 100644 --- a/src/fsharp/CreateILModule.fsi +++ b/src/fsharp/CreateILModule.fsi @@ -2,9 +2,9 @@ module internal FSharp.Compiler.CreateILModule +open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Internal.StrongNameSign +open FSharp.Compiler.AbstractIL.StrongNameSign open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerImports @@ -21,6 +21,7 @@ val ValidateKeySigningAttributes: tcConfig:TcConfig * tcGlobals:TcGlobals * TopA /// Get the object used to perform strong-name signing val GetStrongNameSigner: signingInfo: StrongNameSigningInfo -> ILStrongNameSigner option +/// Helpers for finding attributes module AttributeHelpers = val TryFindStringAttribute: g: TcGlobals -> attrib: string -> attribs: Attribs -> string option diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/AssemblyResolveHandler.fs b/src/fsharp/DependencyManager/AssemblyResolveHandler.fs similarity index 70% rename from src/fsharp/Microsoft.DotNet.DependencyManager/AssemblyResolveHandler.fs rename to src/fsharp/DependencyManager/AssemblyResolveHandler.fs index f4403c341fe..b31ef021de9 100644 --- a/src/fsharp/Microsoft.DotNet.DependencyManager/AssemblyResolveHandler.fs +++ b/src/fsharp/DependencyManager/AssemblyResolveHandler.fs @@ -1,28 +1,39 @@ // 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.DotNet.DependencyManager +namespace FSharp.Compiler.DependencyManager open System -open System.Collections.Generic open System.IO open System.Reflection +open System.Runtime.Loader open Internal.Utilities.FSharpEnvironment /// Signature for ResolutionProbe callback /// host implements this, it's job is to return a list of assembly paths to probe. type AssemblyResolutionProbe = delegate of Unit -> seq -#if NETSTANDARD +/// Type that encapsulates AssemblyResolveHandler for managed packages +type AssemblyResolveHandlerCoreclr (assemblyProbingPaths: AssemblyResolutionProbe) as this = + let assemblyLoadContextType: Type = Type.GetType("System.Runtime.Loader.AssemblyLoadContext, System.Runtime.Loader", false) -open System.Runtime.Loader + let loadFromAssemblyPathMethod = + assemblyLoadContextType.GetMethod("LoadFromAssemblyPath", [| typeof |]) -/// Type that encapsulates AssemblyResolveHandler for managed packages -type AssemblyResolveHandlerCoreclr (assemblyProbingPaths: AssemblyResolutionProbe) = + let eventInfo, handler, defaultAssemblyLoadContext = + let eventInfo = assemblyLoadContextType.GetEvent("Resolving") + let mi = + let gmi = this.GetType().GetMethod("ResolveAssemblyNetStandard", BindingFlags.Instance ||| BindingFlags.NonPublic) + gmi.MakeGenericMethod(assemblyLoadContextType) - let resolveAssemblyNetStandard (ctxt: AssemblyLoadContext) (assemblyName: AssemblyName): Assembly = + eventInfo, + Delegate.CreateDelegate(eventInfo.EventHandlerType, this, mi), + assemblyLoadContextType.GetProperty("Default", BindingFlags.Static ||| BindingFlags.Public).GetValue(null, null) + do eventInfo.AddEventHandler(defaultAssemblyLoadContext, handler) + + member _.ResolveAssemblyNetStandard (ctxt: 'T) (assemblyName: AssemblyName): Assembly = let loadAssembly path = - ctxt.LoadFromAssemblyPath(path) + loadFromAssemblyPathMethod.Invoke(ctxt, [| path |]) :?> Assembly let assemblyPaths = match assemblyProbingPaths with @@ -35,20 +46,14 @@ type AssemblyResolveHandlerCoreclr (assemblyProbingPaths: AssemblyResolutionProb let simpleName = assemblyName.Name let assemblyPathOpt = assemblyPaths |> Seq.tryFind(fun path -> Path.GetFileNameWithoutExtension(path) = simpleName) match assemblyPathOpt with - | Some path -> - loadAssembly path + | Some path -> loadAssembly path | None -> Unchecked.defaultof with | _ -> Unchecked.defaultof - let handler = Func(resolveAssemblyNetStandard) - do AssemblyLoadContext.Default.add_Resolving(handler) - interface IDisposable with member _x.Dispose() = - AssemblyLoadContext.Default.remove_Resolving(handler) - -#endif + eventInfo.RemoveEventHandler(defaultAssemblyLoadContext, handler) /// Type that encapsulates AssemblyResolveHandler for managed packages type AssemblyResolveHandlerDeskTop (assemblyProbingPaths: AssemblyResolutionProbe) = @@ -69,8 +74,7 @@ type AssemblyResolveHandlerDeskTop (assemblyProbingPaths: AssemblyResolutionProb let simpleName = assemblyName.Name let assemblyPathOpt = assemblyPaths |> Seq.tryFind(fun path -> Path.GetFileNameWithoutExtension(path) = simpleName) match assemblyPathOpt with - | Some path -> - loadAssembly path + | Some path -> loadAssembly path | None -> Unchecked.defaultof with | _ -> Unchecked.defaultof @@ -85,11 +89,9 @@ type AssemblyResolveHandlerDeskTop (assemblyProbingPaths: AssemblyResolutionProb type AssemblyResolveHandler (assemblyProbingPaths: AssemblyResolutionProbe) = let handler = -#if NETSTANDARD if isRunningOnCoreClr then new AssemblyResolveHandlerCoreclr(assemblyProbingPaths) :> IDisposable else -#endif new AssemblyResolveHandlerDeskTop(assemblyProbingPaths) :> IDisposable interface IDisposable with diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/AssemblyResolveHandler.fsi b/src/fsharp/DependencyManager/AssemblyResolveHandler.fsi similarity index 88% rename from src/fsharp/Microsoft.DotNet.DependencyManager/AssemblyResolveHandler.fsi rename to src/fsharp/DependencyManager/AssemblyResolveHandler.fsi index e30cb7839dd..9718eb9f2d4 100644 --- a/src/fsharp/Microsoft.DotNet.DependencyManager/AssemblyResolveHandler.fsi +++ b/src/fsharp/DependencyManager/AssemblyResolveHandler.fsi @@ -1,9 +1,8 @@ // 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.DotNet.DependencyManager +namespace FSharp.Compiler.DependencyManager open System -open System.Collections.Generic /// Signature for ResolutionProbe callback /// host implements this, it's job is to return a list of assembly paths to probe. diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/DependencyProvider.fs b/src/fsharp/DependencyManager/DependencyProvider.fs similarity index 92% rename from src/fsharp/Microsoft.DotNet.DependencyManager/DependencyProvider.fs rename to src/fsharp/DependencyManager/DependencyProvider.fs index cf16b8cd249..cc582e47505 100644 --- a/src/fsharp/Microsoft.DotNet.DependencyManager/DependencyProvider.fs +++ b/src/fsharp/DependencyManager/DependencyProvider.fs @@ -1,6 +1,6 @@ // 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.DotNet.DependencyManager +namespace FSharp.Compiler.DependencyManager open System open System.IO @@ -8,13 +8,13 @@ open System.Reflection open System.Runtime.InteropServices open Internal.Utilities open Internal.Utilities.FSharpEnvironment -open Microsoft.FSharp.Reflection +open FSharp.Reflection open System.Collections.Concurrent -module Option = +module Option = /// Convert string into Option string where null and String.Empty result in None - let ofString s = + let ofString s = if String.IsNullOrEmpty(s) then None else Some(s) @@ -131,6 +131,7 @@ type ReflectionDependencyManagerProvider(theType: Type, resolveDeps: MethodInfo option, resolveDepsEx: MethodInfo option, resolveDepsExWithTimeout: MethodInfo option, + resolveDepsExWithScriptInfoAndTimeout: MethodInfo option, outputDir: string option) = let instance = Activator.CreateInstance(theType, [| outputDir :> obj |]) let nameProperty = nameProperty.GetValue >> string @@ -154,12 +155,14 @@ type ReflectionDependencyManagerProvider(theType: Type, let resolveMethod = getInstanceMethod theType [| typeof; typeof; typeof; typeof; typeof |] resolveDependenciesMethodName let resolveMethodEx = getInstanceMethod theType [| typeof; typeof<(string * string) seq>; typeof; typeof |] resolveDependenciesMethodName let resolveMethodExWithTimeout = getInstanceMethod theType [| typeof; typeof<(string * string) seq>; typeof; typeof; typeof |] resolveDependenciesMethodName - Some (fun () -> new ReflectionDependencyManagerProvider(theType, nameProperty, keyProperty, None, resolveMethod, resolveMethodEx, resolveMethodExWithTimeout, outputDir) :> IDependencyManagerProvider) + let resolveDepsExWithScriptInfoAndTimeout = getInstanceMethod theType [| typeof; typeof; typeof; typeof<(string * string) seq>; typeof; typeof; typeof |] resolveDependenciesMethodName + Some (fun () -> new ReflectionDependencyManagerProvider(theType, nameProperty, keyProperty, None, resolveMethod, resolveMethodEx, resolveMethodExWithTimeout, resolveDepsExWithScriptInfoAndTimeout,outputDir) :> IDependencyManagerProvider) | Some _, Some nameProperty, Some keyProperty, Some helpMessagesProperty -> let resolveMethod = getInstanceMethod theType [| typeof; typeof; typeof; typeof; typeof |] resolveDependenciesMethodName let resolveMethodEx = getInstanceMethod theType [| typeof; typeof<(string * string) seq>; typeof; typeof |] resolveDependenciesMethodName let resolveMethodExWithTimeout = getInstanceMethod theType [| typeof; typeof<(string * string) seq>; typeof; typeof; typeof; |] resolveDependenciesMethodName - Some (fun () -> new ReflectionDependencyManagerProvider(theType, nameProperty, keyProperty, Some helpMessagesProperty, resolveMethod, resolveMethodEx, resolveMethodExWithTimeout, outputDir) :> IDependencyManagerProvider) + let resolveDepsExWithScriptInfoAndTimeout = getInstanceMethod theType [| typeof; typeof; typeof; typeof<(string * string) seq>; typeof; typeof; typeof |] resolveDependenciesMethodName + Some (fun () -> new ReflectionDependencyManagerProvider(theType, nameProperty, keyProperty, Some helpMessagesProperty, resolveMethod, resolveMethodEx, resolveMethodExWithTimeout, resolveDepsExWithScriptInfoAndTimeout, outputDir) :> IDependencyManagerProvider) static member MakeResultFromObject(result: obj) = { new IResolveDependenciesResult with @@ -241,7 +244,9 @@ type ReflectionDependencyManagerProvider(theType: Type, // (bool * string list * string list) // We use reflection to get the correct method and to determine what we got back. let method, arguments = - if resolveDepsExWithTimeout.IsSome then + if resolveDepsExWithScriptInfoAndTimeout.IsSome then + resolveDepsExWithScriptInfoAndTimeout, [| box scriptDir; box scriptName; box scriptExt; box packageManagerTextLines; box tfm; box rid; box timeout |] + elif resolveDepsExWithTimeout.IsSome then resolveDepsExWithTimeout, [| box scriptExt; box packageManagerTextLines; box tfm; box rid; box timeout |] elif resolveDepsEx.IsSome then resolveDepsEx, [| box scriptExt; box packageManagerTextLines; box tfm; box rid |] @@ -293,7 +298,7 @@ type DependencyProvider (assemblyProbingPaths: AssemblyResolutionProbe, nativePr | null -> { new IDisposable with member _.Dispose() = () } | _ -> new AssemblyResolveHandler(assemblyProbingPaths) :> IDisposable - // Resolution Path = Location of FSharp.Compiler.Private.dll + // Resolution Path = Location of FSharp.Compiler.Service.dll let assemblySearchPaths = lazy ( [ let assemblyLocation = typeof.GetTypeInfo().Assembly.Location @@ -315,7 +320,7 @@ type DependencyProvider (assemblyProbingPaths: AssemblyResolutionProbe, nativePr with | e -> let e = stripTieWrapper e - let n, m = DependencyManager.SR.couldNotLoadDependencyManagerExtension(path,e.Message) + let n, m = FSComp.SR.couldNotLoadDependencyManagerExtension(path,e.Message) reportError.Invoke(ErrorReportType.Warning, n, m) None) |> Seq.filter (fun a -> assemblyHasAttribute a dependencyManagerAttributeName) @@ -365,7 +370,7 @@ type DependencyProvider (assemblyProbingPaths: AssemblyResolutionProbe, nativePr member _.CreatePackageManagerUnknownError (compilerTools: string seq, outputDir: string, packageManagerKey: string, reportError: ResolvingErrorReport) = let registeredKeys = String.Join(", ", RegisteredDependencyManagers compilerTools (Option.ofString outputDir) reportError |> Seq.map (fun kv -> kv.Value.Key)) let searchPaths = assemblySearchPaths.Force() - DependencyManager.SR.packageManagerUnknown(packageManagerKey, String.Join(", ", searchPaths, compilerTools), registeredKeys) + FSComp.SR.packageManagerUnknown(packageManagerKey, String.Join(", ", searchPaths, compilerTools), registeredKeys) /// Fetch a dependencymanager that supports a specific key member this.TryFindDependencyManagerInPath (compilerTools: string seq, outputDir: string, reportError: ResolvingErrorReport, path: string): string * IDependencyManagerProvider = @@ -385,7 +390,7 @@ type DependencyProvider (assemblyProbingPaths: AssemblyResolutionProbe, nativePr with | e -> let e = stripTieWrapper e - let err, msg = DependencyManager.SR.packageManagerError(e.Message) + let err, msg = FSComp.SR.packageManagerError(e.Message) reportError.Invoke(ErrorReportType.Error, err, msg) null, Unchecked.defaultof @@ -399,7 +404,7 @@ type DependencyProvider (assemblyProbingPaths: AssemblyResolutionProbe, nativePr with | e -> let e = stripTieWrapper e - let err, msg = DependencyManager.SR.packageManagerError(e.Message) + let err, msg = FSComp.SR.packageManagerError(e.Message) reportError.Invoke(ErrorReportType.Error, err, msg) Unchecked.defaultof @@ -429,7 +434,7 @@ type DependencyProvider (assemblyProbingPaths: AssemblyResolutionProbe, nativePr with e -> let e = stripTieWrapper e - Error (DependencyManager.SR.packageManagerError(e.Message)) + Error (FSComp.SR.packageManagerError(e.Message)) )) match result with | Ok res -> diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/DependencyProvider.fsi b/src/fsharp/DependencyManager/DependencyProvider.fsi similarity index 97% rename from src/fsharp/Microsoft.DotNet.DependencyManager/DependencyProvider.fsi rename to src/fsharp/DependencyManager/DependencyProvider.fsi index 1195cefde53..8760c802b7c 100644 --- a/src/fsharp/Microsoft.DotNet.DependencyManager/DependencyProvider.fsi +++ b/src/fsharp/DependencyManager/DependencyProvider.fsi @@ -1,12 +1,10 @@ // 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. /// Helper members to integrate DependencyManagers into F# codebase -namespace Microsoft.DotNet.DependencyManager +namespace FSharp.Compiler.DependencyManager -open System open System.Runtime.InteropServices - /// The results of ResolveDependencies type IResolveDependenciesResult = @@ -14,10 +12,10 @@ type IResolveDependenciesResult = abstract Success: bool /// The resolution output log - abstract StdOut: string array + abstract StdOut: string[] /// The resolution error log (process stderr) - abstract StdError: string array + abstract StdError: string[] /// The resolution paths - the full paths to selected resolved dll's. /// In scripts this is equivalent to #r @"c:\somepath\to\packages\ResolvedPackage\1.1.1\lib\netstandard2.0\ResolvedAssembly.dll" diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/NativeDllResolveHandler.fs b/src/fsharp/DependencyManager/NativeDllResolveHandler.fs similarity index 70% rename from src/fsharp/Microsoft.DotNet.DependencyManager/NativeDllResolveHandler.fs rename to src/fsharp/DependencyManager/NativeDllResolveHandler.fs index 21eb3db8528..9397a04eb3e 100644 --- a/src/fsharp/Microsoft.DotNet.DependencyManager/NativeDllResolveHandler.fs +++ b/src/fsharp/DependencyManager/NativeDllResolveHandler.fs @@ -1,6 +1,6 @@ // 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.DotNet.DependencyManager +namespace FSharp.Compiler.DependencyManager open System open System.Collections.Concurrent @@ -9,28 +9,26 @@ open System.Reflection open System.Runtime.InteropServices open Internal.Utilities open Internal.Utilities.FSharpEnvironment +open FSharp.Compiler.IO /// Signature for Native library resolution probe callback /// host implements this, it's job is to return a list of package roots to probe. type NativeResolutionProbe = delegate of Unit -> seq -#if NETSTANDARD -open System.Runtime.Loader - -// Cut down AssemblyLoadContext, for loading native libraries -type NativeAssemblyLoadContext () = - inherit AssemblyLoadContext() - - member this.LoadNativeLibrary(path: string): IntPtr = - base.LoadUnmanagedDllFromPath(path) +/// Type that encapsulates Native library probing for managed packages +type NativeDllResolveHandlerCoreClr (nativeProbingRoots: NativeResolutionProbe) = - override _.Load(_path: AssemblyName): Assembly = - raise (NotImplementedException()) + let nativeLibraryTryLoad = + let nativeLibraryType: Type = Type.GetType("System.Runtime.InteropServices.NativeLibrary, System.Runtime.InteropServices", false) + nativeLibraryType.GetMethod("TryLoad", [| typeof; typeof.MakeByRefType() |]) - static member NativeLoadContext = new NativeAssemblyLoadContext() + let loadNativeLibrary path = + let arguments = [| path:>obj; IntPtr.Zero:>obj |] + if nativeLibraryTryLoad.Invoke(null, arguments) :?> bool then + arguments.[1] :?> IntPtr + else + IntPtr.Zero -/// Type that encapsulates Native library probing for managed packages -type NativeDllResolveHandlerCoreClr (nativeProbingRoots: NativeResolutionProbe) = let probingFileNames (name: string) = // coreclr native library probing algorithm: https://github.com/dotnet/coreclr/blob/9773db1e7b1acb3ec75c9cc0e36bd62dcbacd6d5/src/System.Private.CoreLib/shared/System/Runtime/Loader/LibraryNameVariation.Unix.cs let isRooted = Path.IsPathRooted name @@ -64,13 +62,13 @@ type NativeDllResolveHandlerCoreClr (nativeProbingRoots: NativeResolutionProbe) yield (sprintf "%s%s" p name) |] - let _resolveUnmanagedDll (_: Assembly) (name: string): IntPtr = + let resolveUnmanagedDll (_: Assembly) (name: string): IntPtr = // Enumerate probing roots looking for a dll that matches the probing name in the probed locations let probeForNativeLibrary root rid name = // Look for name in root probingFileNames name |> Array.tryPick(fun name -> let path = Path.Combine(root, "runtimes", rid, "native", name) - if File.Exists(path) then + if FileSystem.FileExistsShim(path) then Some path else None) @@ -83,59 +81,56 @@ type NativeDllResolveHandlerCoreClr (nativeProbingRoots: NativeResolutionProbe) |> Seq.tryPick(fun root -> probingFileNames name |> Seq.tryPick(fun name -> let path = Path.Combine(root, name) - if File.Exists(path) then + if FileSystem.FileExistsShim(path) then Some path else RidHelpers.probingRids |> Seq.tryPick(fun rid -> probeForNativeLibrary root rid name))) match probe with - | Some path -> NativeAssemblyLoadContext.NativeLoadContext.LoadNativeLibrary(path) + | Some path -> loadNativeLibrary(path) | None -> IntPtr.Zero // netstandard 2.1 has this property, unfortunately we don't build with that yet //public event Func ResolvingUnmanagedDll - let eventInfo = typeof.GetEvent("ResolvingUnmanagedDll") - let handler = Func (_resolveUnmanagedDll) + let assemblyLoadContextType: Type = Type.GetType("System.Runtime.Loader.AssemblyLoadContext, System.Runtime.Loader", false) + let eventInfo, handler, defaultAssemblyLoadContext = + assemblyLoadContextType.GetEvent("ResolvingUnmanagedDll"), + Func (resolveUnmanagedDll), + assemblyLoadContextType.GetProperty("Default", BindingFlags.Static ||| BindingFlags.Public).GetValue(null, null) - do - if not (isNull eventInfo) then - eventInfo.AddEventHandler(AssemblyLoadContext.Default, handler) + do eventInfo.AddEventHandler(defaultAssemblyLoadContext, handler) interface IDisposable with - member _x.Dispose() = - if not (isNull eventInfo) then - eventInfo.RemoveEventHandler(AssemblyLoadContext.Default, handler) - () -#endif + member _x.Dispose() = eventInfo.RemoveEventHandler(defaultAssemblyLoadContext, handler) + -type NativeDllResolveHandler (_nativeProbingRoots: NativeResolutionProbe) = +type NativeDllResolveHandler (nativeProbingRoots: NativeResolutionProbe) = let handler: IDisposable option = -#if NETSTANDARD if isRunningOnCoreClr then - Some (new NativeDllResolveHandlerCoreClr(_nativeProbingRoots) :> IDisposable) + Some (new NativeDllResolveHandlerCoreClr(nativeProbingRoots) :> IDisposable) else -#endif None - let appendSemiColon (p:string) = - if not(p.EndsWith(";", StringComparison.OrdinalIgnoreCase)) then - p + ";" + let appendPathSeparator (p: string) = + let separator = string System.IO.Path.PathSeparator + if not(p.EndsWith(separator, StringComparison.OrdinalIgnoreCase)) then + p + separator else p let addedPaths = ConcurrentBag() let addProbeToProcessPath probePath = - let probe = appendSemiColon probePath - let path = appendSemiColon (Environment.GetEnvironmentVariable("PATH")) + let probe = appendPathSeparator probePath + let path = appendPathSeparator (Environment.GetEnvironmentVariable("PATH")) if not (path.Contains(probe)) then Environment.SetEnvironmentVariable("PATH", path + probe) addedPaths.Add probe let removeProbeFromProcessPath probePath = if not(String.IsNullOrWhiteSpace(probePath)) then - let probe = appendSemiColon probePath - let path = appendSemiColon (Environment.GetEnvironmentVariable("PATH")) + let probe = appendPathSeparator probePath + let path = appendPathSeparator (Environment.GetEnvironmentVariable("PATH")) if path.Contains(probe) then Environment.SetEnvironmentVariable("PATH", path.Replace(probe, "")) member internal _.RefreshPathsInEnvironment(roots: string seq) = diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/NativeDllResolveHandler.fsi b/src/fsharp/DependencyManager/NativeDllResolveHandler.fsi similarity index 83% rename from src/fsharp/Microsoft.DotNet.DependencyManager/NativeDllResolveHandler.fsi rename to src/fsharp/DependencyManager/NativeDllResolveHandler.fsi index 7c14fa4b3ab..d0845bb94f3 100644 --- a/src/fsharp/Microsoft.DotNet.DependencyManager/NativeDllResolveHandler.fsi +++ b/src/fsharp/DependencyManager/NativeDllResolveHandler.fsi @@ -1,6 +1,6 @@ // 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.DotNet.DependencyManager +namespace FSharp.Compiler.DependencyManager open System @@ -12,7 +12,7 @@ type NativeResolutionProbe = delegate of Unit -> seq type NativeDllResolveHandler = /// Construct a new NativeDllResolveHandler - new: _nativeProbingRoots: NativeResolutionProbe -> NativeDllResolveHandler + new: nativeProbingRoots: NativeResolutionProbe -> NativeDllResolveHandler member internal RefreshPathsInEnvironment: string seq -> unit diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.cs.xlf b/src/fsharp/DependencyManager/xlf/DependencyManager.txt.cs.xlf similarity index 100% rename from src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.cs.xlf rename to src/fsharp/DependencyManager/xlf/DependencyManager.txt.cs.xlf diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.de.xlf b/src/fsharp/DependencyManager/xlf/DependencyManager.txt.de.xlf similarity index 100% rename from src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.de.xlf rename to src/fsharp/DependencyManager/xlf/DependencyManager.txt.de.xlf diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.es.xlf b/src/fsharp/DependencyManager/xlf/DependencyManager.txt.es.xlf similarity index 100% rename from src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.es.xlf rename to src/fsharp/DependencyManager/xlf/DependencyManager.txt.es.xlf diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.fr.xlf b/src/fsharp/DependencyManager/xlf/DependencyManager.txt.fr.xlf similarity index 100% rename from src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.fr.xlf rename to src/fsharp/DependencyManager/xlf/DependencyManager.txt.fr.xlf diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.it.xlf b/src/fsharp/DependencyManager/xlf/DependencyManager.txt.it.xlf similarity index 100% rename from src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.it.xlf rename to src/fsharp/DependencyManager/xlf/DependencyManager.txt.it.xlf diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.ja.xlf b/src/fsharp/DependencyManager/xlf/DependencyManager.txt.ja.xlf similarity index 100% rename from src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.ja.xlf rename to src/fsharp/DependencyManager/xlf/DependencyManager.txt.ja.xlf diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.ko.xlf b/src/fsharp/DependencyManager/xlf/DependencyManager.txt.ko.xlf similarity index 100% rename from src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.ko.xlf rename to src/fsharp/DependencyManager/xlf/DependencyManager.txt.ko.xlf diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.pl.xlf b/src/fsharp/DependencyManager/xlf/DependencyManager.txt.pl.xlf similarity index 100% rename from src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.pl.xlf rename to src/fsharp/DependencyManager/xlf/DependencyManager.txt.pl.xlf diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.pt-BR.xlf b/src/fsharp/DependencyManager/xlf/DependencyManager.txt.pt-BR.xlf similarity index 100% rename from src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.pt-BR.xlf rename to src/fsharp/DependencyManager/xlf/DependencyManager.txt.pt-BR.xlf diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.ru.xlf b/src/fsharp/DependencyManager/xlf/DependencyManager.txt.ru.xlf similarity index 100% rename from src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.ru.xlf rename to src/fsharp/DependencyManager/xlf/DependencyManager.txt.ru.xlf diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.tr.xlf b/src/fsharp/DependencyManager/xlf/DependencyManager.txt.tr.xlf similarity index 100% rename from src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.tr.xlf rename to src/fsharp/DependencyManager/xlf/DependencyManager.txt.tr.xlf diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.zh-Hans.xlf b/src/fsharp/DependencyManager/xlf/DependencyManager.txt.zh-Hans.xlf similarity index 100% rename from src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.zh-Hans.xlf rename to src/fsharp/DependencyManager/xlf/DependencyManager.txt.zh-Hans.xlf diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.zh-Hant.xlf b/src/fsharp/DependencyManager/xlf/DependencyManager.txt.zh-Hant.xlf similarity index 100% rename from src/fsharp/Microsoft.DotNet.DependencyManager/xlf/DependencyManager.txt.zh-Hant.xlf rename to src/fsharp/DependencyManager/xlf/DependencyManager.txt.zh-Hant.xlf diff --git a/src/fsharp/DetupleArgs.fs b/src/fsharp/DetupleArgs.fs index f9277e762f1..2ff48082fa5 100644 --- a/src/fsharp/DetupleArgs.fs +++ b/src/fsharp/DetupleArgs.fs @@ -2,16 +2,16 @@ module internal FSharp.Compiler.Detuple -open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.Lib +open Internal.Utilities.Collections +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler.TcGlobals -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.XmlDoc // This pass has one aim. // - to eliminate tuples allocated at call sites (due to uncurried style) @@ -631,10 +631,10 @@ type env = prefix: string - m: Range.range + m: range } - override __.ToString() = "" + override _.ToString() = "" let suffixE env s = {env with prefix = env.prefix + s} @@ -665,7 +665,7 @@ let buildProjections env bindings x xtys = xtys |> List.mapi (fun i xty -> let vi, vix = newLocalN env i xty - let bind = mkBind NoDebugPointAtInvisibleBinding vi (mkTupleFieldGet env.eg (tupInfoRef, x, xtys, i, env.m)) + let bind = mkBind DebugPointAtBinding.NoneAtInvisible vi (mkTupleFieldGet env.eg (tupInfoRef, x, xtys, i, env.m)) bind, vix) |> List.unzip diff --git a/src/fsharp/DetupleArgs.fsi b/src/fsharp/DetupleArgs.fsi index e830b97200c..f00f9c150ab 100644 --- a/src/fsharp/DetupleArgs.fsi +++ b/src/fsharp/DetupleArgs.fsi @@ -2,7 +2,7 @@ module internal FSharp.Compiler.Detuple -open FSharp.Compiler.AbstractIL.Internal +open Internal.Utilities.Collections open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypedTree @@ -13,9 +13,6 @@ module GlobalUsageAnalysis = type accessor - /// Results is "expr information". - /// This could extend to be a full graph view of the expr. - /// Later could support "safe" change operations, and optimisations could be in terms of those. type Results = { /// v -> context / APP inst args diff --git a/src/fsharp/Diagnostics.fs b/src/fsharp/Diagnostics.fs new file mode 100644 index 00000000000..350703012ed --- /dev/null +++ b/src/fsharp/Diagnostics.fs @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +// This file contains simple types related to diagnsotics that are made public in the +// FSharp.Compiler.Service API but which are also used throughout the +// F# compiler. +namespace FSharp.Compiler.Diagnostics + +[] +type FSharpDiagnosticSeverity = + | Hidden + | Info + | Warning + | Error + +type FSharpDiagnosticOptions = + { + WarnLevel: int + GlobalWarnAsError: bool + WarnOff: int list + WarnOn: int list + WarnAsError: int list + WarnAsWarn: int list + } + static member Default = + { + WarnLevel = 3 + GlobalWarnAsError = false + WarnOff = [] + WarnOn = [] + WarnAsError = [] + WarnAsWarn = [] + } + diff --git a/src/fsharp/Diagnostics.fsi b/src/fsharp/Diagnostics.fsi new file mode 100644 index 00000000000..b1dc86be20b --- /dev/null +++ b/src/fsharp/Diagnostics.fsi @@ -0,0 +1,25 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +// This file contains simple types related to diagnsotics that are made public in the +// FSharp.Compiler.Service API but which are also used throughout the +// F# compiler. + +namespace FSharp.Compiler.Diagnostics + +[] +type FSharpDiagnosticSeverity = + | Hidden + | Info + | Warning + | Error + +type FSharpDiagnosticOptions = + { WarnLevel: int + GlobalWarnAsError: bool + WarnOff: int list + WarnOn: int list + WarnAsError: int list + WarnAsWarn: int list } + + static member Default: FSharpDiagnosticOptions + diff --git a/src/fsharp/Directory.Build.props b/src/fsharp/Directory.Build.props index 5b972c79383..ba0693c81e5 100644 --- a/src/fsharp/Directory.Build.props +++ b/src/fsharp/Directory.Build.props @@ -12,7 +12,6 @@ - true true false $(ArtifactsPackagesDir)\$(Configuration) diff --git a/src/fsharp/DotNetFrameworkDependencies.fs b/src/fsharp/DotNetFrameworkDependencies.fs deleted file mode 100644 index cfff44efc81..00000000000 --- a/src/fsharp/DotNetFrameworkDependencies.fs +++ /dev/null @@ -1,562 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -// Functions to retrieve framework dependencies -module internal FSharp.Compiler.DotNetFrameworkDependencies - - open System - open System.Collections.Generic - open System.Diagnostics - open System.Globalization - open System.IO - open System.Reflection - open System.Runtime.InteropServices - open Internal.Utilities - open Internal.Utilities.FSharpEnvironment - - type private TypeInThisAssembly = class end - - let fSharpCompilerLocation = - let location = Path.GetDirectoryName(typeof.Assembly.Location) - match FSharpEnvironment.BinFolderOfDefaultFSharpCompiler (Some location) with - | Some path -> path - | None -> -#if DEBUG - Debug.Print(sprintf """FSharpEnvironment.BinFolderOfDefaultFSharpCompiler (Some '%s') returned None Location - customized incorrectly: algorithm here: https://github.com/dotnet/fsharp/blob/03f3f1c35f82af26593d025dabca57a6ef3ea9a1/src/utils/CompilerLocationUtils.fs#L171""" - location) -#endif - // Use the location of this dll - location - - let inline ifEmptyUse alternative filename = if String.IsNullOrWhiteSpace filename then alternative else filename - - let getFSharpCoreLibraryName = "FSharp.Core" - let getFsiLibraryName = "FSharp.Compiler.Interactive.Settings" - let getDefaultFSharpCoreLocation = Path.Combine(fSharpCompilerLocation, getFSharpCoreLibraryName + ".dll") - let getDefaultFsiLibraryLocation = Path.Combine(fSharpCompilerLocation, getFsiLibraryName + ".dll") - let implementationAssemblyDir = Path.GetDirectoryName(typeof.Assembly.Location) |> ifEmptyUse fSharpCompilerLocation - - // Use the ValueTuple that is executing with the compiler if it is from System.ValueTuple - // or the System.ValueTuple.dll that sits alongside the compiler. (Note we always ship one with the compiler) - let getDefaultSystemValueTupleReference () = - try - let asm = typeof>.Assembly - if asm.FullName.StartsWith("System.ValueTuple", StringComparison.OrdinalIgnoreCase) then - Some asm.Location - else - let valueTuplePath = Path.Combine(fSharpCompilerLocation, "System.ValueTuple.dll") - if File.Exists(valueTuplePath) then - Some valueTuplePath - else - None - with _ -> None - - // Algorithm: - // use implementation location of obj type, on shared frameworks it will always be in: - // - // dotnet\shared\Microsoft.NETCore.App\sdk-version\System.Private.CoreLib.dll - // - // if that changes we will need to find another way to do this. Hopefully the sdk will eventually provide an API - // use the well know location for obj to traverse the file system towards the - // - // packs\Microsoft.NETCore.App.Ref\sdk-version\netcoreappn.n - // we will rely on the sdk-version match on the two paths to ensure that we get the product that ships with the - // version of the runtime we are executing on - // Use the reference assemblies for the highest netcoreapp tfm that we find in that location that is - // lower than or equal to the implementation version. - let zeroVersion = Version("0.0.0.0") - let version, frameworkRefsPackDirectoryRoot = - try - let computeVersion version = - match Version.TryParse(version) with - | true, v -> v - | false, _ -> zeroVersion - - let version = computeVersion (DirectoryInfo(implementationAssemblyDir).Name) - let microsoftNETCoreAppRef = Path.Combine(implementationAssemblyDir, "../../../packs/Microsoft.NETCore.App.Ref") - if Directory.Exists(microsoftNETCoreAppRef) then - let directory = DirectoryInfo(microsoftNETCoreAppRef).GetDirectories() - |> Array.map (fun di -> computeVersion di.Name) - |> Array.sort - |> Array.filter(fun v -> v <= version) - |> Array.last - Some (directory.ToString()), Some microsoftNETCoreAppRef - else - None, None - with | _ -> None, None - - // Tries to figure out the tfm for the compiler instance. - // On coreclr it uses the deps.json file - let netcoreTfm = - let file = - try - let asm = Assembly.GetEntryAssembly() - match asm with - | null -> "" - | asm -> - let depsJsonPath = Path.ChangeExtension(asm.Location, "deps.json") - if File.Exists(depsJsonPath) then - File.ReadAllText(depsJsonPath) - else - "" - with _ -> "" - - let tfmPrefix=".NETCoreApp,Version=v" - let pattern = "\"name\": \"" + tfmPrefix - let startPos = - let startPos = file.IndexOf(pattern, StringComparison.OrdinalIgnoreCase) - if startPos >= 0 then startPos + (pattern.Length) else startPos - - let length = - if startPos >= 0 then - let ep = file.IndexOf("\"", startPos) - if ep >= 0 then ep - startPos else ep - else -1 - match startPos, length with - | -1, _ - | _, -1 -> - if isRunningOnCoreClr then - // Running on coreclr but no deps.json was deployed with the host so default to 3.0 - Some "netcoreapp3.1" - else - // Running on desktop - None - | pos, length -> - // use value from the deps.json file - Some ("netcoreapp" + file.Substring(pos, length)) - - // Tries to figure out the tfm for the compiler instance on the Windows desktop. - // On full clr it uses the mscorlib version number - let getWindowsDesktopTfm () = - let defaultMscorlibVersion = 4,8,3815,0 - let desktopProductVersionMonikers = [| - // major, minor, build, revision, moniker - 4, 8, 3815, 0, "net48" - 4, 8, 3761, 0, "net48" - 4, 7, 3190, 0, "net472" - 4, 7, 3062, 0, "net472" - 4, 7, 2600, 0, "net471" - 4, 7, 2558, 0, "net471" - 4, 7, 2053, 0, "net47" - 4, 7, 2046, 0, "net47" - 4, 6, 1590, 0, "net462" - 4, 6, 57, 0, "net462" - 4, 6, 1055, 0, "net461" - 4, 6, 81, 0, "net46" - 4, 0, 30319, 34209, "net452" - 4, 0, 30319, 17020, "net452" - 4, 0, 30319, 18408, "net451" - 4, 0, 30319, 17929, "net45" - 4, 0, 30319, 1, "net4" - |] - - let majorPart, minorPart, buildPart, privatePart= - try - let attrOpt = typeof.Assembly.GetCustomAttributes(typeof) |> Seq.tryHead - match attrOpt with - | Some attr -> - let fv = (downcast attr : AssemblyFileVersionAttribute).Version.Split([|'.'|]) |> Array.map(fun e -> Int32.Parse(e)) - fv.[0], fv.[1], fv.[2], fv.[3] - | _ -> defaultMscorlibVersion - with _ -> defaultMscorlibVersion - - // Get the ProductVersion of this framework compare with table yield compatible monikers - match desktopProductVersionMonikers - |> Array.tryFind (fun (major, minor, build, revision, _) -> - (majorPart >= major) && - (minorPart >= minor) && - (buildPart >= build) && - (privatePart >= revision)) with - | Some (_,_,_,_,moniker) -> - moniker - | None -> - // no TFM could be found, assume latest stable? - "net48" - - /// Gets the tfm E.g netcore3.0, net472 - let executionTfm = - match netcoreTfm with - | Some tfm -> tfm - | _ -> getWindowsDesktopTfm () - - // Computer valid dotnet-rids for this environment: - // https://docs.microsoft.com/en-us/dotnet/core/rid-catalog - // - // Where rid is: win, win-x64, win-x86, osx-x64, linux-x64 etc ... - let executionRid = - let processArchitecture = RuntimeInformation.ProcessArchitecture - let baseRid = - if RuntimeInformation.IsOSPlatform(OSPlatform.Windows) then "win" - elif RuntimeInformation.IsOSPlatform(OSPlatform.OSX) then "osx" - else "linux" - let platformRid = - match processArchitecture with - | Architecture.X64 -> baseRid + "-x64" - | Architecture.X86 -> baseRid + "-x86" - | Architecture.Arm64 -> baseRid + "-arm64" - | _ -> baseRid + "-arm" - platformRid - - let isInReferenceAssemblyPackDirectory filename = - match frameworkRefsPackDirectoryRoot with - | Some root -> - let path = Path.GetDirectoryName(filename) - path.StartsWith(root, StringComparison.OrdinalIgnoreCase) - | _ -> false - - let frameworkRefsPackDirectory = - let tfmPrefix = "netcoreapp" - let tfmCompare c1 c2 = - let deconstructTfmApp (netcoreApp: DirectoryInfo) = - let name = netcoreApp.Name - try - if name.StartsWith(tfmPrefix, StringComparison.InvariantCultureIgnoreCase) then - Some (Double.Parse(name.Substring(tfmPrefix.Length), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture)) - else - None - with _ -> None - - if c1 = c2 then 0 - else - match (deconstructTfmApp c1), (deconstructTfmApp c2) with - | Some c1, Some c2 -> int(c1 - c2) - | None, Some _ -> -1 - | Some _, None -> 1 - | _ -> 0 - - match version, frameworkRefsPackDirectoryRoot with - | Some version, Some root -> - try - let ref = Path.Combine(root, version, "ref") - let highestTfm = DirectoryInfo(ref).GetDirectories() - |> Array.sortWith tfmCompare - |> Array.tryLast - - match highestTfm with - | Some tfm -> Some (Path.Combine(ref, tfm.Name)) - | None -> None - with | _ -> None - | _ -> None - - let getDependenciesOf assemblyReferences = - let assemblies = new Dictionary() - - // Identify path to a dll in the framework directory from a simple name - let frameworkPathFromSimpleName simpleName = - let root = Path.Combine(implementationAssemblyDir, simpleName) - let pathOpt = - [| ""; ".dll"; ".exe" |] - |> Seq.tryPick(fun ext -> - let path = root + ext - if File.Exists(path) then Some path - else None) - match pathOpt with - | Some path -> path - | None -> root - - // Collect all assembly dependencies into assemblies dictionary - let rec traverseDependencies reference = - // Reference can be either path to a file on disk or a Assembly Simple Name - let referenceName, path = - try - if File.Exists(reference) then - // Reference is a path to a file on disk - Path.GetFileNameWithoutExtension(reference), reference - else - // Reference is a SimpleAssembly name - reference, frameworkPathFromSimpleName reference - - with _ -> reference, frameworkPathFromSimpleName reference - - if not (assemblies.ContainsKey(referenceName)) then - try - if File.Exists(path) then - match referenceName with - | "System.Runtime.WindowsRuntime" - | "System.Runtime.WindowsRuntime.UI.Xaml" -> - // The Windows compatibility pack included in the runtime contains a reference to - // System.Runtime.WindowsRuntime, but to properly use that type the runtime also needs a - // reference to the Windows.md meta-package, which isn't referenced by default. To avoid - // a bug where types from `Windows, Version=255.255.255.255` can't be found we're going to - // not default include this assembly. It can still be manually referenced if it's needed - // via the System.Runtime.WindowsRuntime NuGet package. - // - // In the future this branch can be removed because WinRT support is being removed from the - // .NET 5 SDK (https://github.com/dotnet/runtime/pull/36715) - () - | "System.Private.CoreLib" -> - // System.Private.CoreLib doesn't load with reflection - assemblies.Add(referenceName, path) - | _ -> - try - let asm = System.Reflection.Assembly.LoadFrom(path) - assemblies.Add(referenceName, path) - for reference in asm.GetReferencedAssemblies() do - traverseDependencies reference.Name - with e -> () - with e -> () - - assemblyReferences |> List.iter(traverseDependencies) - assemblies - - // This list is the default set of references for "non-project" files. - // - // These DLLs are - // (a) included in the environment used for all .fsx files (see service.fs) - // (b) included in environment for files 'orphaned' from a project context - // -- for orphaned files (files in VS without a project context) - let getDesktopDefaultReferences useFsiAuxLib = [ - yield "mscorlib" - yield "System" - yield "System.Xml" - yield "System.Runtime.Remoting" - yield "System.Runtime.Serialization.Formatters.Soap" - yield "System.Data" - yield "System.Drawing" - yield "System.Core" - yield "System.Configuration" - - yield getFSharpCoreLibraryName - if useFsiAuxLib then yield getFsiLibraryName - - // always include a default reference to System.ValueTuple.dll in scripts and out-of-project sources - match getDefaultSystemValueTupleReference () with - | None -> () - | Some v -> yield v - - // These are the Portable-profile and .NET Standard 1.6 dependencies of FSharp.Core.dll. These are needed - // when an F# script 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 "netstandard" - 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.Net.Requests" // System.Net.WebResponse etc. - yield "System.Collections" // System.Collections.Generic.List - yield "System.Runtime.Numerics" // BigInteger - yield "System.Threading" // OperationCanceledException - yield "System.Web" - yield "System.Web.Services" - yield "System.Windows.Forms" - yield "System.Numerics" - ] - - let fetchPathsForDefaultReferencesForScriptsAndOutOfProjectSources useFsiAuxLib useSdkRefs assumeDotNetFramework = - let results = - if assumeDotNetFramework then - getDesktopDefaultReferences useFsiAuxLib - else - let dependencies = - let getImplementationReferences () = - // Coreclr supports netstandard assemblies only for now - (getDependenciesOf [ - yield! Directory.GetFiles(implementationAssemblyDir, "*.dll") - yield getDefaultFSharpCoreLocation - if useFsiAuxLib then yield getDefaultFsiLibraryLocation - ]).Values |> Seq.toList - - if useSdkRefs then - // Go fetch references - match frameworkRefsPackDirectory with - | Some path -> - try [ yield! Directory.GetFiles(path, "*.dll") - yield getDefaultFSharpCoreLocation - if useFsiAuxLib then yield getDefaultFsiLibraryLocation - ] - with | _ -> List.empty - | None -> - getImplementationReferences () - else - getImplementationReferences () - dependencies - results - - let defaultReferencesForScriptsAndOutOfProjectSources useFsiAuxLib assumeDotNetFramework useSdkRefs = - fetchPathsForDefaultReferencesForScriptsAndOutOfProjectSources useFsiAuxLib useSdkRefs assumeDotNetFramework - - // A set of assemblies to always consider to be system assemblies. A common set of these can be used a shared - // resources between projects in the compiler services. Also all assemblies where well-known system types exist - // referenced from TcGlobals must be listed here. - let systemAssemblies = - HashSet [ - // NOTE: duplicates are ok in this list - - // .NET Framework list - yield "mscorlib" - yield "netstandard" - yield "System" - yield getFSharpCoreLibraryName - yield "FSharp.Compiler.Interactive.Settings" - yield "Microsoft.CSharp" - yield "Microsoft.VisualBasic" - yield "Microsoft.VisualBasic.Core" - yield "Microsoft.Win32.Primitives" - yield "Microsoft.Win32.Registry" - yield "System.AppContext" - yield "System.Buffers" - yield "System.Collections" - yield "System.Collections.Concurrent" - yield "System.Collections.Immutable" - yield "System.Collections.NonGeneric" - yield "System.Collections.Specialized" - yield "System.ComponentModel" - yield "System.ComponentModel.Annotations" - yield "System.ComponentModel.DataAnnotations" - yield "System.ComponentModel.EventBasedAsync" - yield "System.ComponentModel.Primitives" - yield "System.ComponentModel.TypeConverter" - yield "System.Configuration" - yield "System.Console" - yield "System.Core" - yield "System.Data" - yield "System.Data.Common" - yield "System.Data.DataSetExtensions" - yield "System.Deployment" - yield "System.Design" - yield "System.Diagnostics.Contracts" - yield "System.Diagnostics.Debug" - yield "System.Diagnostics.DiagnosticSource" - yield "System.Diagnostics.FileVersionInfo" - yield "System.Diagnostics.Process" - yield "System.Diagnostics.StackTrace" - yield "System.Diagnostics.TextWriterTraceListener" - yield "System.Diagnostics.Tools" - yield "System.Diagnostics.TraceSource" - yield "System.Diagnostics.Tracing" - yield "System.Drawing" - yield "System.Drawing.Primitives" - yield "System.Dynamic.Runtime" - yield "System.Formats.Asn1" - yield "System.Globalization" - yield "System.Globalization.Calendars" - yield "System.Globalization.Extensions" - yield "System.IO" - yield "System.IO.Compression" - yield "System.IO.Compression.Brotli" - yield "System.IO.Compression.FileSystem" - yield "System.IO.Compression.ZipFile" - yield "System.IO.FileSystem" - yield "System.IO.FileSystem.DriveInfo" - yield "System.IO.FileSystem.Primitives" - yield "System.IO.FileSystem.Watcher" - yield "System.IO.IsolatedStorage" - yield "System.IO.MemoryMappedFiles" - yield "System.IO.Pipes" - yield "System.IO.UnmanagedMemoryStream" - yield "System.Linq" - yield "System.Linq.Expressions" - yield "System.Linq.Expressions" - yield "System.Linq.Parallel" - yield "System.Linq.Queryable" - yield "System.Memory" - yield "System.Messaging" - yield "System.Net" - yield "System.Net.Http" - yield "System.Net.Http.Json" - yield "System.Net.HttpListener" - yield "System.Net.Mail" - yield "System.Net.NameResolution" - yield "System.Net.NetworkInformation" - yield "System.Net.Ping" - yield "System.Net.Primitives" - yield "System.Net.Requests" - yield "System.Net.Security" - yield "System.Net.ServicePoint" - yield "System.Net.Sockets" - yield "System.Net.WebClient" - yield "System.Net.WebHeaderCollection" - yield "System.Net.WebProxy" - yield "System.Net.WebSockets" - yield "System.Net.WebSockets.Client" - yield "System.Numerics" - yield "System.Numerics.Vectors" - yield "System.ObjectModel" - yield "System.Observable" - yield "System.Private.Uri" - yield "System.Reflection" - yield "System.Reflection.DispatchProxy" - yield "System.Reflection.Emit" - yield "System.Reflection.Emit.ILGeneration" - yield "System.Reflection.Emit.Lightweight" - yield "System.Reflection.Extensions" - yield "System.Reflection.Metadata" - yield "System.Reflection.Primitives" - yield "System.Reflection.TypeExtensions" - yield "System.Resources.Reader" - yield "System.Resources.ResourceManager" - yield "System.Resources.Writer" - yield "System.Runtime" - yield "System.Runtime.CompilerServices.Unsafe" - yield "System.Runtime.CompilerServices.VisualC" - yield "System.Runtime.Extensions" - yield "System.Runtime.Handles" - yield "System.Runtime.InteropServices" - yield "System.Runtime.InteropServices.PInvoke" - yield "System.Runtime.InteropServices.RuntimeInformation" - yield "System.Runtime.InteropServices.WindowsRuntime" - yield "System.Runtime.Intrinsics" - yield "System.Runtime.Loader" - yield "System.Runtime.Numerics" - yield "System.Runtime.Remoting" - yield "System.Runtime.Serialization" - yield "System.Runtime.Serialization.Formatters" - yield "System.Runtime.Serialization.Formatters.Soap" - yield "System.Runtime.Serialization.Json" - yield "System.Runtime.Serialization.Primitives" - yield "System.Runtime.Serialization.Xml" - yield "System.Security" - yield "System.Security.Claims" - yield "System.Security.Cryptography.Algorithms" - yield "System.Security.Cryptography.Cng" - yield "System.Security.Cryptography.Csp" - yield "System.Security.Cryptography.Encoding" - yield "System.Security.Cryptography.OpenSsl" - yield "System.Security.Cryptography.Primitives" - yield "System.Security.Cryptography.X509Certificates" - yield "System.Security.Principal" - yield "System.Security.Principal.Windows" - yield "System.Security.SecureString" - yield "System.ServiceModel.Web" - yield "System.ServiceProcess" - yield "System.Text.Encoding" - yield "System.Text.Encoding.CodePages" - yield "System.Text.Encoding.Extensions" - yield "System.Text.Encodings.Web" - yield "System.Text.Json" - yield "System.Text.RegularExpressions" - yield "System.Threading" - yield "System.Threading.Channels" - yield "System.Threading.Overlapped" - yield "System.Threading.Tasks" - yield "System.Threading.Tasks.Dataflow" - yield "System.Threading.Tasks.Extensions" - yield "System.Threading.Tasks.Parallel" - yield "System.Threading.Thread" - yield "System.Threading.ThreadPool" - yield "System.Threading.Timer" - yield "System.Transactions" - yield "System.Transactions.Local" - yield "System.ValueTuple" - yield "System.Web" - yield "System.Web.HttpUtility" - yield "System.Web.Services" - yield "System.Windows" - yield "System.Windows.Forms" - yield "System.Xml" - yield "System.Xml.Linq" - yield "System.Xml.ReaderWriter" - yield "System.Xml.Serialization" - yield "System.Xml.XDocument" - yield "System.Xml.XmlDocument" - yield "System.Xml.XmlSerializer" - yield "System.Xml.XPath" - yield "System.Xml.XPath.XDocument" - yield "WindowsBase" - ] - - // The set of references entered into the TcConfigBuilder for scripts prior to computing the load closure. - let basicReferencesForScriptLoadClosure useFsiAuxLib useSdkRefs assumeDotNetFramework = - fetchPathsForDefaultReferencesForScriptsAndOutOfProjectSources useFsiAuxLib useSdkRefs assumeDotNetFramework diff --git a/src/fsharp/ErrorLogger.fs b/src/fsharp/ErrorLogger.fs index 1e391eb2aaf..a81e048c8ce 100644 --- a/src/fsharp/ErrorLogger.fs +++ b/src/fsharp/ErrorLogger.fs @@ -1,15 +1,13 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module public FSharp.Compiler.ErrorLogger +module FSharp.Compiler.ErrorLogger -open FSharp.Compiler -open FSharp.Compiler.Range +open FSharp.Compiler.Diagnostics open FSharp.Compiler.Features +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Text open System - -//------------------------------------------------------------------------ -// General error recovery mechanism -//----------------------------------------------------------------------- +open System.Diagnostics /// Represents the style being used to format errors [] @@ -53,7 +51,7 @@ let NoSuggestions : Suggestions = ignore /// Thrown when we stop processing the F# Interactive entry or #load. exception StopProcessingExn of exn option with - override this.Message = "Processing of a script fragment has stopped because an exception has been raised" + override _.Message = "Processing of a script fragment has stopped because an exception has been raised" override this.ToString() = match this :> exn with @@ -62,21 +60,15 @@ exception StopProcessingExn of exn option with let (|StopProcessing|_|) exn = match exn with StopProcessingExn _ -> Some () | _ -> None -let StopProcessing<'T> = StopProcessingExn None -exception NumberedError of (int * string) * range with // int is e.g. 191 in FS0191 - override this.Message = - match this :> exn with - | NumberedError((_, msg), _) -> msg - | _ -> "impossible" +let StopProcessing<'T> = StopProcessingExn None -exception Error of (int * string) * range with // int is e.g. 191 in FS0191 // eventually remove this type, it is a transitional artifact of the old unnumbered error style +exception Error of (int * string) * range with // int is e.g. 191 in FS0191 override this.Message = match this :> exn with | Error((_, msg), _) -> msg | _ -> "impossible" - exception InternalError of msg: string * range with override this.Message = match this :> exn with @@ -84,13 +76,19 @@ exception InternalError of msg: string * range with | _ -> "impossible" exception UserCompilerMessage of string * int * range + exception LibraryUseOnly of range + exception Deprecated of string * range + exception Experimental of string * range + exception PossibleUnverifiableCode of range exception UnresolvedReferenceNoRange of (*assemblyName*) string + exception UnresolvedReferenceError of (*assemblyName*) string * range + exception UnresolvedPathReferenceNoRange of (*assemblyName*) string * (*path*) string with override this.Message = match this :> exn with @@ -99,8 +97,6 @@ exception UnresolvedPathReferenceNoRange of (*assemblyName*) string * (*path*) s exception UnresolvedPathReference of (*assemblyName*) string * (*path*) string * range - - exception ErrorWithSuggestions of (int * string) * range * string * Suggestions with // int is e.g. 191 in FS0191 override this.Message = match this :> exn with @@ -142,17 +138,12 @@ let rec AttachRange m (exn:exn) = | :? System.ArgumentException as exn -> InternalError(exn.Message + " (ArgumentException)", m) | notARangeDual -> notARangeDual - -//---------------------------------------------------------------------------- -// Error logger interface - type Exiter = abstract Exit : int -> 'T - let QuitProcessExiter = { new Exiter with - member __.Exit n = + member _.Exit n = try System.Environment.Exit n with _ -> @@ -197,7 +188,7 @@ module BuildPhaseSubcategory = [] let Internal = "internal" // Compiler ICE -[] +[] type PhasedDiagnostic = { Exception:exn; Phase:BuildPhase } @@ -272,23 +263,23 @@ type PhasedDiagnostic = isPhaseInCompile [] -[] +[] type ErrorLogger(nameForDebugging:string) = abstract ErrorCount: int // The 'Impl' factoring enables a developer to place a breakpoint at the non-Impl // code just below and get a breakpoint for all error logger implementations. - abstract DiagnosticSink: phasedError: PhasedDiagnostic * isError: bool -> unit - member __.DebugDisplay() = sprintf "ErrorLogger(%s)" nameForDebugging + abstract DiagnosticSink: phasedError: PhasedDiagnostic * severity: FSharpDiagnosticSeverity -> unit + member _.DebugDisplay() = sprintf "ErrorLogger(%s)" nameForDebugging let DiscardErrorsLogger = { new ErrorLogger("DiscardErrorsLogger") with - member x.DiagnosticSink(phasedError, isError) = () + member x.DiagnosticSink(phasedError, severity) = () member x.ErrorCount = 0 } let AssertFalseErrorLogger = { new ErrorLogger("AssertFalseErrorLogger") with // TODO: reenable these asserts in the compiler service - member x.DiagnosticSink(phasedError, isError) = (* assert false; *) () + member x.DiagnosticSink(phasedError, severity) = (* assert false; *) () member x.ErrorCount = (* assert false; *) 0 } @@ -296,26 +287,30 @@ type CapturingErrorLogger(nm) = inherit ErrorLogger(nm) let mutable errorCount = 0 let diagnostics = ResizeArray() - override x.DiagnosticSink(phasedError, isError) = - if isError then errorCount <- errorCount + 1 - diagnostics.Add (phasedError, isError) - override x.ErrorCount = errorCount - member x.Diagnostics = diagnostics |> Seq.toList - member x.CommitDelayedDiagnostics(errorLogger:ErrorLogger) = + + override _.DiagnosticSink(phasedError, severity) = + if severity = FSharpDiagnosticSeverity.Error then errorCount <- errorCount + 1 + diagnostics.Add (phasedError, severity) + + override _.ErrorCount = errorCount + + member _.Diagnostics = diagnostics |> Seq.toList + + member _.CommitDelayedDiagnostics(errorLogger:ErrorLogger) = // Eagerly grab all the errors and warnings from the mutable collection let errors = diagnostics.ToArray() errors |> Array.iter errorLogger.DiagnosticSink - /// Type holds thread-static globals for use by the compile. type internal CompileThreadStatic = - [] + [] static val mutable private buildPhase : BuildPhase - [] + [] static val mutable private errorLogger : ErrorLogger - static member BuildPhaseUnchecked with get() = CompileThreadStatic.buildPhase (* This can be a null value *) + static member BuildPhaseUnchecked = CompileThreadStatic.buildPhase (* This can be a null value *) + static member BuildPhase with get() = match box CompileThreadStatic.buildPhase with @@ -371,7 +366,7 @@ module ErrorLoggerExtensions = type ErrorLogger with - member x.ErrorR exn = + member x.EmitDiagnostic (exn, severity) = match exn with | InternalError (s, _) | Failure s as exn -> System.Diagnostics.Debug.Assert(false, sprintf "Unexpected exception raised in compiler: %s\n%s" s (exn.ToString())) @@ -382,22 +377,20 @@ module ErrorLoggerExtensions = | ReportedError _ -> PreserveStackTrace exn raise exn - | _ -> x.DiagnosticSink(PhasedDiagnostic.Create(exn, CompileThreadStatic.BuildPhase), true) + | _ -> x.DiagnosticSink(PhasedDiagnostic.Create(exn, CompileThreadStatic.BuildPhase), severity) + + member x.ErrorR exn = + x.EmitDiagnostic (exn, FSharpDiagnosticSeverity.Error) member x.Warning exn = - match exn with - | StopProcessing - | ReportedError _ -> - PreserveStackTrace exn - raise exn - | _ -> x.DiagnosticSink(PhasedDiagnostic.Create(exn, CompileThreadStatic.BuildPhase), false) + x.EmitDiagnostic (exn, FSharpDiagnosticSeverity.Warning) member x.Error exn = x.ErrorR exn raise (ReportedError (Some exn)) - member x.SimulateError (ph: PhasedDiagnostic) = - x.DiagnosticSink (ph, true) + member x.SimulateError (ph: PhasedDiagnostic) = + x.DiagnosticSink (ph, FSharpDiagnosticSeverity.Error) raise (ReportedError (Some ph.Exception)) member x.ErrorRecovery (exn: exn) (m: range) = @@ -450,17 +443,18 @@ let PushErrorLoggerPhaseUntilUnwind(errorLoggerTransformer : ErrorLogger -> #Err let mutable newInstalled = true let newIsInstalled() = if newInstalled then () else (assert false; (); (*failwith "error logger used after unwind"*)) // REVIEW: ok to throw? let chkErrorLogger = { new ErrorLogger("PushErrorLoggerPhaseUntilUnwind") with - member __.DiagnosticSink(phasedError, isError) = newIsInstalled(); newErrorLogger.DiagnosticSink(phasedError, isError) - member __.ErrorCount = newIsInstalled(); newErrorLogger.ErrorCount } + member _.DiagnosticSink(phasedError, isError) = newIsInstalled(); newErrorLogger.DiagnosticSink(phasedError, isError) + member _.ErrorCount = newIsInstalled(); newErrorLogger.ErrorCount } CompileThreadStatic.ErrorLogger <- chkErrorLogger { new System.IDisposable with - member __.Dispose() = + member _.Dispose() = CompileThreadStatic.ErrorLogger <- oldErrorLogger newInstalled <- false } let SetThreadBuildPhaseNoUnwind(phase:BuildPhase) = CompileThreadStatic.BuildPhase <- phase + let SetThreadErrorLoggerNoUnwind errorLogger = CompileThreadStatic.ErrorLogger <- errorLogger // Global functions are still used by parser and TAST ops. @@ -477,24 +471,29 @@ let error exn = CompileThreadStatic.ErrorLogger.Error exn /// Simulates an error. For test purposes only. let simulateError (p : PhasedDiagnostic) = CompileThreadStatic.ErrorLogger.SimulateError p -let diagnosticSink (phasedError, isError) = CompileThreadStatic.ErrorLogger.DiagnosticSink (phasedError, isError) -let errorSink pe = diagnosticSink (pe, true) -let warnSink pe = diagnosticSink (pe, false) +let diagnosticSink (phasedError, severity) = CompileThreadStatic.ErrorLogger.DiagnosticSink (phasedError, severity) + +let errorSink pe = diagnosticSink (pe, FSharpDiagnosticSeverity.Error) + +let warnSink pe = diagnosticSink (pe, FSharpDiagnosticSeverity.Warning) + let errorRecovery exn m = CompileThreadStatic.ErrorLogger.ErrorRecovery exn m + let stopProcessingRecovery exn m = CompileThreadStatic.ErrorLogger.StopProcessingRecovery exn m -let errorRecoveryNoRange exn = CompileThreadStatic.ErrorLogger.ErrorRecoveryNoRange exn +let errorRecoveryNoRange exn = CompileThreadStatic.ErrorLogger.ErrorRecoveryNoRange exn let report f = f() let deprecatedWithError s m = errorR(Deprecated(s, m)) -// Note: global state, but only for compiling FSharp.Core.dll -let mutable reportLibraryOnlyFeatures = true -let libraryOnlyError m = if reportLibraryOnlyFeatures then errorR(LibraryUseOnly m) -let libraryOnlyWarning m = if reportLibraryOnlyFeatures then warning(LibraryUseOnly m) +let libraryOnlyError m = errorR(LibraryUseOnly m) + +let libraryOnlyWarning m = warning(LibraryUseOnly m) + let deprecatedOperator m = deprecatedWithError (FSComp.SR.elDeprecatedOperator()) m + let mlCompatWarning s m = warning(UserCompilerMessage(FSComp.SR.mlCompatMessage s, 62, m)) let suppressErrorReporting f = @@ -502,8 +501,8 @@ let suppressErrorReporting f = try let errorLogger = { new ErrorLogger("suppressErrorReporting") with - member __.DiagnosticSink(_phasedError, _isError) = () - member __.ErrorCount = 0 } + member _.DiagnosticSink(_phasedError, _isError) = () + member _.ErrorCount = 0 } SetThreadErrorLoggerNoUnwind errorLogger f() finally @@ -616,8 +615,8 @@ let TryD f g = | res -> res let rec RepeatWhileD nDeep body = body nDeep ++ (fun x -> if x then RepeatWhileD (nDeep+1) body else CompleteD) -let AtLeastOneD f l = MapD f l ++ (fun res -> ResultD (List.exists id res)) +let AtLeastOneD f l = MapD f l ++ (fun res -> ResultD (List.exists id res)) [] module OperationResult = @@ -658,25 +657,6 @@ let NormalizeErrorString (text : string) = i <- i + delta buf.ToString() -type public FSharpErrorSeverityOptions = - { - WarnLevel: int - GlobalWarnAsError: bool - WarnOff: int list - WarnOn: int list - WarnAsError: int list - WarnAsWarn: int list - } - static member Default = - { - WarnLevel = 3 - GlobalWarnAsError = false - WarnOff = [] - WarnOn = [] - WarnAsError = [] - WarnAsWarn = [] - } - let private tryLanguageFeatureErrorAux (langVersion: LanguageVersion) (langFeature: LanguageFeature) (m: range) = if not (langVersion.SupportsFeature langFeature) then let featureStr = langVersion.GetFeatureString langFeature diff --git a/src/fsharp/ErrorLogger.fsi b/src/fsharp/ErrorLogger.fsi index 4a0e187b974..bded498a198 100644 --- a/src/fsharp/ErrorLogger.fsi +++ b/src/fsharp/ErrorLogger.fsi @@ -1,11 +1,11 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module public FSharp.Compiler.ErrorLogger +module internal FSharp.Compiler.ErrorLogger open System -open FSharp.Compiler -open FSharp.Compiler.Range +open FSharp.Compiler.Diagnostics open FSharp.Compiler.Features +open FSharp.Compiler.Text /// Represents the style being used to format errors [] @@ -41,8 +41,6 @@ val ( |StopProcessing|_| ): exn:exn -> unit option val StopProcessing<'T> : exn -exception NumberedError of (int * string) * range - exception Error of (int * string) * range exception InternalError of msg: string * range @@ -140,7 +138,7 @@ type ErrorLogger = member DebugDisplay: unit -> string - abstract member DiagnosticSink: phasedError:PhasedDiagnostic * isError:bool -> unit + abstract member DiagnosticSink: phasedError:PhasedDiagnostic * severity:FSharpDiagnosticSeverity -> unit abstract member ErrorCount: int @@ -155,14 +153,14 @@ type CapturingErrorLogger = member CommitDelayedDiagnostics: errorLogger:ErrorLogger -> unit - override DiagnosticSink: phasedError:PhasedDiagnostic * isError:bool -> unit + override DiagnosticSink: phasedError:PhasedDiagnostic * severity:FSharpDiagnosticSeverity -> unit - member Diagnostics: (PhasedDiagnostic * bool) list + member Diagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list override ErrorCount: int [] -type internal CompileThreadStatic = +type CompileThreadStatic = static member BuildPhase: BuildPhase with get, set @@ -208,7 +206,7 @@ val error: exn:exn -> 'a val simulateError: p:PhasedDiagnostic -> 'a -val diagnosticSink: phasedError:PhasedDiagnostic * isError:bool -> unit +val diagnosticSink: phasedError:PhasedDiagnostic * severity: FSharpDiagnosticSeverity -> unit val errorSink: pe:PhasedDiagnostic -> unit @@ -224,8 +222,6 @@ val report: f:(unit -> 'a) -> 'a val deprecatedWithError: s:string -> m:range -> unit -val mutable reportLibraryOnlyFeatures: bool - val libraryOnlyError: m:range -> unit val libraryOnlyWarning: m:range -> unit @@ -320,21 +316,11 @@ val NewlineifyErrorString: message:string -> string /// NOTE: newlines are recognized and replaced with stringThatIsAProxyForANewlineInFlatErrors (ASCII 29, the 'group separator'), /// which is decoded by the IDE with 'NewlineifyErrorString' back into newlines, so that multi-line errors can be displayed in QuickInfo val NormalizeErrorString: text:string -> string - -type FSharpErrorSeverityOptions = - { WarnLevel: int - GlobalWarnAsError: bool - WarnOff: int list - WarnOn: int list - WarnAsError: int list - WarnAsWarn: int list } - - static member Default: FSharpErrorSeverityOptions -val internal checkLanguageFeatureError: langVersion:LanguageVersion -> langFeature:LanguageFeature -> m:range -> unit +val checkLanguageFeatureError: langVersion:LanguageVersion -> langFeature:LanguageFeature -> m:range -> unit -val internal checkLanguageFeatureErrorRecover: langVersion:LanguageVersion -> langFeature:LanguageFeature -> m:range -> unit +val checkLanguageFeatureErrorRecover: langVersion:LanguageVersion -> langFeature:LanguageFeature -> m:range -> unit -val internal tryLanguageFeatureErrorOption: langVersion:LanguageVersion -> langFeature:LanguageFeature -> m:range -> exn option +val tryLanguageFeatureErrorOption: langVersion:LanguageVersion -> langFeature:LanguageFeature -> m:range -> exn option -val internal languageFeatureNotSupportedInLibraryError: langVersion:LanguageVersion -> langFeature:LanguageFeature -> m:range -> 'a +val languageFeatureNotSupportedInLibraryError: langVersion:LanguageVersion -> langFeature:LanguageFeature -> m:range -> 'a diff --git a/src/fsharp/ErrorResolutionHints.fs b/src/fsharp/ErrorResolutionHints.fs index ee80985935e..537e59146d8 100644 --- a/src/fsharp/ErrorResolutionHints.fs +++ b/src/fsharp/ErrorResolutionHints.fs @@ -4,13 +4,16 @@ module internal FSharp.Compiler.ErrorResolutionHints open Internal.Utilities -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Library open System.Collections open System.Collections.Generic let maxSuggestions = 5 + let minThresholdForSuggestions = 0.7 + let highConfidenceThreshold = 0.85 + let minStringLengthForSuggestion = 3 /// We report a candidate if its edit distance is <= the threshold. @@ -35,18 +38,18 @@ let DemangleOperator (nm: string) = type SuggestionBufferEnumerator(tail: int, data: KeyValuePair []) = let mutable current = data.Length interface IEnumerator with - member __.Current + member _.Current with get () = let kvpr = &data.[current] kvpr.Value interface System.Collections.IEnumerator with - member __.Current with get () = box data.[current].Value - member __.MoveNext() = + member _.Current with get () = box data.[current].Value + member _.MoveNext() = current <- current - 1 current > tail || (current = tail && data.[current] <> Unchecked.defaultof<_>) - member __.Reset () = current <- data.Length + member _.Reset () = current <- data.Length interface System.IDisposable with - member __.Dispose () = () + member _.Dispose () = () type SuggestionBuffer(idText: string) = let data = Array.zeroCreate>(maxSuggestions) @@ -68,7 +71,7 @@ type SuggestionBuffer(idText: string) = data.[pos - 1] <- KeyValuePair(k,v) if tail > 0 then tail <- tail - 1 - member __.Add (suggestion: string) = + member _.Add (suggestion: string) = if not disableSuggestions then if suggestion = idText then // some other parse error happened disableSuggestions <- true @@ -87,9 +90,9 @@ type SuggestionBuffer(idText: string) = then insert(similarity, suggestion) |> ignore - member __.Disabled with get () = disableSuggestions + member _.Disabled with get () = disableSuggestions - member __.IsEmpty with get () = disableSuggestions || (tail = maxSuggestions - 1) + member _.IsEmpty with get () = disableSuggestions || (tail = maxSuggestions - 1) interface IEnumerable with member this.GetEnumerator () = diff --git a/src/fsharp/ErrorResolutionHints.fsi b/src/fsharp/ErrorResolutionHints.fsi index a99b769770f..6b98f6793ab 100644 --- a/src/fsharp/ErrorResolutionHints.fsi +++ b/src/fsharp/ErrorResolutionHints.fsi @@ -3,8 +3,6 @@ /// Functions to format error message details module internal FSharp.Compiler.ErrorResolutionHints -open Internal.Utilities -open FSharp.Compiler.AbstractIL.Internal.Library open System open System.Collections open System.Collections.Generic @@ -16,13 +14,6 @@ val IsInEditDistanceProximity: idText:string -> suggestion:string -> bool /// Demangles a suggestion val DemangleOperator: nm:string -> string -type SuggestionBufferEnumerator = - - interface IDisposable - interface IEnumerator - interface IEnumerator - new: tail:int * data: KeyValuePair [] -> SuggestionBufferEnumerator - type SuggestionBuffer = interface IEnumerable diff --git a/src/fsharp/ExtensionTyping.fs b/src/fsharp/ExtensionTyping.fs index 63fdadea901..c3a0e38f952 100644 --- a/src/fsharp/ExtensionTyping.fs +++ b/src/fsharp/ExtensionTyping.fs @@ -6,17 +6,20 @@ namespace FSharp.Compiler #if !NO_EXTENSIONTYPING +open System +open System.IO +open System.Collections.Generic +open System.Reflection +open Internal.Utilities.Library +open Internal.Utilities.FSharpEnvironment +open FSharp.Core.CompilerServices +open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.ErrorLogger +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range + module internal ExtensionTyping = - open System - open System.IO - open System.Collections.Generic - open System.Reflection - open Microsoft.FSharp.Core.CompilerServices - open FSharp.Compiler.ErrorLogger - open FSharp.Compiler.Range - open FSharp.Compiler.AbstractIL.IL - open FSharp.Compiler.AbstractIL.Internal.Library // frontAndBack - open Internal.Utilities.FSharpEnvironment type TypeProviderDesignation = TypeProviderDesignation of string @@ -27,11 +30,11 @@ module internal ExtensionTyping = /// Represents some of the configuration parameters passed to type provider components type ResolutionEnvironment = - { resolutionFolder : string - outputFile : string option - showResolutionMessages : bool - referencedAssemblies : string[] - temporaryFolder : string } + { resolutionFolder: string + outputFile: string option + showResolutionMessages: bool + referencedAssemblies: string[] + temporaryFolder: string } /// Load a the design-time part of a type-provider into the host process, and look for types /// marked with the TypeProviderAttribute attribute. @@ -130,8 +133,8 @@ module internal ExtensionTyping = resolutionEnvironment: ResolutionEnvironment, isInvalidationSupported: bool, isInteractive: bool, - systemRuntimeContainsType : string -> bool, - systemRuntimeAssemblyVersion : System.Version, + systemRuntimeContainsType: string -> bool, + systemRuntimeAssemblyVersion: System.Version, compilerToolPaths: string list, m:range) = @@ -168,7 +171,7 @@ module internal ExtensionTyping = () ] with :? TypeProviderError as tpe -> - tpe.Iter(fun e -> errorR(NumberedError((e.Number, e.ContextualErrorMessage), m)) ) + tpe.Iter(fun e -> errorR(Error((e.Number, e.ContextualErrorMessage), m)) ) [] let providers = Tainted<_>.CreateAll(providerSpecs) @@ -254,8 +257,8 @@ module internal ExtensionTyping = let key (ty: ProvidedType) = (ty.Assembly.FullName, ty.FullName) static member val Instance = ProvidedTypeComparer() interface IEqualityComparer with - member __.GetHashCode(ty: ProvidedType) = hash (key ty) - member __.Equals(ty1: ProvidedType, ty2: ProvidedType) = (key ty1 = key ty2) + member _.GetHashCode(ty: ProvidedType) = hash (key ty) + member _.Equals(ty1: ProvidedType, ty2: ProvidedType) = (key ty1 = key ty2) /// The context used to interpret information in the closure of System.Type, System.MethodInfo and other /// info objects coming from the type provider. @@ -315,9 +318,9 @@ module internal ExtensionTyping = |> Seq.exists (fun a -> a.Constructor.DeclaringType.FullName = typeof.FullName) let provide () = ProvidedCustomAttributeProvider.Create (fun _provider -> x.CustomAttributes) interface IProvidedCustomAttributeProvider with - member __.GetHasTypeProviderEditorHideMethodsAttribute provider = provide().GetHasTypeProviderEditorHideMethodsAttribute provider - member __.GetDefinitionLocationAttribute provider = provide().GetDefinitionLocationAttribute provider - member __.GetXmlDocAttributes provider = provide().GetXmlDocAttributes provider + member _.GetHasTypeProviderEditorHideMethodsAttribute provider = provide().GetHasTypeProviderEditorHideMethodsAttribute provider + member _.GetDefinitionLocationAttribute provider = provide().GetDefinitionLocationAttribute provider + member _.GetXmlDocAttributes provider = provide().GetXmlDocAttributes provider // The type provider spec distinguishes between // - calls that can be made on provided types (i.e. types given by ReturnType, ParameterType, and generic argument types) @@ -326,73 +329,73 @@ module internal ExtensionTyping = // Alternatively we could use assertions to enforce this. // Suppress relocation of generated types - member __.IsSuppressRelocate = (x.Attributes &&& enum (int32 TypeProviderTypeAttributes.SuppressRelocate)) <> enum 0 - member __.IsErased = (x.Attributes &&& enum (int32 TypeProviderTypeAttributes.IsErased)) <> enum 0 - member __.IsGenericType = x.IsGenericType - member __.Namespace = x.Namespace - member __.FullName = x.FullName - member __.IsArray = x.IsArray - member __.Assembly: ProvidedAssembly = x.Assembly |> ProvidedAssembly.Create - member __.GetInterfaces() = x.GetInterfaces() |> ProvidedType.CreateArray ctxt - member __.GetMethods() = x.GetMethods bindingFlags |> ProvidedMethodInfo.CreateArray ctxt - member __.GetEvents() = x.GetEvents bindingFlags |> ProvidedEventInfo.CreateArray ctxt - member __.GetEvent nm = x.GetEvent(nm, bindingFlags) |> ProvidedEventInfo.Create ctxt - member __.GetProperties() = x.GetProperties bindingFlags |> ProvidedPropertyInfo.CreateArray ctxt - member __.GetProperty nm = x.GetProperty(nm, bindingFlags) |> ProvidedPropertyInfo.Create ctxt - member __.GetConstructors() = x.GetConstructors bindingFlags |> ProvidedConstructorInfo.CreateArray ctxt - member __.GetFields() = x.GetFields bindingFlags |> ProvidedFieldInfo.CreateArray ctxt - member __.GetField nm = x.GetField(nm, bindingFlags) |> ProvidedFieldInfo.Create ctxt - member __.GetAllNestedTypes() = x.GetNestedTypes(bindingFlags ||| BindingFlags.NonPublic) |> ProvidedType.CreateArray ctxt - member __.GetNestedTypes() = x.GetNestedTypes bindingFlags |> ProvidedType.CreateArray ctxt + member _.IsSuppressRelocate = (x.Attributes &&& enum (int32 TypeProviderTypeAttributes.SuppressRelocate)) <> enum 0 + member _.IsErased = (x.Attributes &&& enum (int32 TypeProviderTypeAttributes.IsErased)) <> enum 0 + member _.IsGenericType = x.IsGenericType + member _.Namespace = x.Namespace + member _.FullName = x.FullName + member _.IsArray = x.IsArray + member _.Assembly: ProvidedAssembly = x.Assembly |> ProvidedAssembly.Create + member _.GetInterfaces() = x.GetInterfaces() |> ProvidedType.CreateArray ctxt + member _.GetMethods() = x.GetMethods bindingFlags |> ProvidedMethodInfo.CreateArray ctxt + member _.GetEvents() = x.GetEvents bindingFlags |> ProvidedEventInfo.CreateArray ctxt + member _.GetEvent nm = x.GetEvent(nm, bindingFlags) |> ProvidedEventInfo.Create ctxt + member _.GetProperties() = x.GetProperties bindingFlags |> ProvidedPropertyInfo.CreateArray ctxt + member _.GetProperty nm = x.GetProperty(nm, bindingFlags) |> ProvidedPropertyInfo.Create ctxt + member _.GetConstructors() = x.GetConstructors bindingFlags |> ProvidedConstructorInfo.CreateArray ctxt + member _.GetFields() = x.GetFields bindingFlags |> ProvidedFieldInfo.CreateArray ctxt + member _.GetField nm = x.GetField(nm, bindingFlags) |> ProvidedFieldInfo.Create ctxt + member _.GetAllNestedTypes() = x.GetNestedTypes(bindingFlags ||| BindingFlags.NonPublic) |> ProvidedType.CreateArray ctxt + member _.GetNestedTypes() = x.GetNestedTypes bindingFlags |> ProvidedType.CreateArray ctxt /// Type.GetNestedType(string) can return null if there is no nested type with given name - member __.GetNestedType nm = x.GetNestedType (nm, bindingFlags) |> ProvidedType.Create ctxt + member _.GetNestedType nm = x.GetNestedType (nm, bindingFlags) |> ProvidedType.Create ctxt /// Type.GetGenericTypeDefinition() either returns type or throws exception, null is not permitted - member __.GetGenericTypeDefinition() = x.GetGenericTypeDefinition() |> ProvidedType.CreateWithNullCheck ctxt "GenericTypeDefinition" + member _.GetGenericTypeDefinition() = x.GetGenericTypeDefinition() |> ProvidedType.CreateWithNullCheck ctxt "GenericTypeDefinition" /// Type.BaseType can be null when Type is interface or object - member __.BaseType = x.BaseType |> ProvidedType.Create ctxt - member __.GetStaticParameters(provider: ITypeProvider) = provider.GetStaticParameters x |> ProvidedParameterInfo.CreateArray ctxt + member _.BaseType = x.BaseType |> ProvidedType.Create ctxt + member _.GetStaticParameters(provider: ITypeProvider) = provider.GetStaticParameters x |> ProvidedParameterInfo.CreateArray ctxt /// Type.GetElementType can be null if i.e. Type is not array\pointer\byref type - member __.GetElementType() = x.GetElementType() |> ProvidedType.Create ctxt - member __.GetGenericArguments() = x.GetGenericArguments() |> ProvidedType.CreateArray ctxt - member __.ApplyStaticArguments(provider: ITypeProvider, fullTypePathAfterArguments, staticArgs: obj[]) = + member _.GetElementType() = x.GetElementType() |> ProvidedType.Create ctxt + member _.GetGenericArguments() = x.GetGenericArguments() |> ProvidedType.CreateArray ctxt + member _.ApplyStaticArguments(provider: ITypeProvider, fullTypePathAfterArguments, staticArgs: obj[]) = provider.ApplyStaticArguments(x, fullTypePathAfterArguments, staticArgs) |> ProvidedType.Create ctxt - member __.IsVoid = (typeof.Equals x || (x.Namespace = "System" && x.Name = "Void")) - member __.IsGenericParameter = x.IsGenericParameter - member __.IsValueType = x.IsValueType - member __.IsByRef = x.IsByRef - member __.IsPointer = x.IsPointer - member __.IsPublic = x.IsPublic - member __.IsNestedPublic = x.IsNestedPublic - member __.IsEnum = x.IsEnum - member __.IsClass = x.IsClass - member __.IsMeasure = isMeasure.Value - member __.IsSealed = x.IsSealed - member __.IsAbstract = x.IsAbstract - member __.IsInterface = x.IsInterface - member __.GetArrayRank() = x.GetArrayRank() - member __.GenericParameterPosition = x.GenericParameterPosition - member __.RawSystemType = x + member _.IsVoid = (typeof.Equals x || (x.Namespace = "System" && x.Name = "Void")) + member _.IsGenericParameter = x.IsGenericParameter + member _.IsValueType = x.IsValueType + member _.IsByRef = x.IsByRef + member _.IsPointer = x.IsPointer + member _.IsPublic = x.IsPublic + member _.IsNestedPublic = x.IsNestedPublic + member _.IsEnum = x.IsEnum + member _.IsClass = x.IsClass + member _.IsMeasure = isMeasure.Value + member _.IsSealed = x.IsSealed + member _.IsAbstract = x.IsAbstract + member _.IsInterface = x.IsInterface + member _.GetArrayRank() = x.GetArrayRank() + member _.GenericParameterPosition = x.GenericParameterPosition + member _.RawSystemType = x /// Type.GetEnumUnderlyingType either returns type or raises exception, null is not permitted - member __.GetEnumUnderlyingType() = + member _.GetEnumUnderlyingType() = x.GetEnumUnderlyingType() |> ProvidedType.CreateWithNullCheck ctxt "EnumUnderlyingType" - member __.MakePointerType() = ProvidedType.CreateNoContext(x.MakePointerType()) - member __.MakeByRefType() = ProvidedType.CreateNoContext(x.MakeByRefType()) - member __.MakeArrayType() = ProvidedType.CreateNoContext(x.MakeArrayType()) - member __.MakeArrayType rank = ProvidedType.CreateNoContext(x.MakeArrayType(rank)) - member __.MakeGenericType (args: ProvidedType[]) = + member _.MakePointerType() = ProvidedType.CreateNoContext(x.MakePointerType()) + member _.MakeByRefType() = ProvidedType.CreateNoContext(x.MakeByRefType()) + member _.MakeArrayType() = ProvidedType.CreateNoContext(x.MakeArrayType()) + member _.MakeArrayType rank = ProvidedType.CreateNoContext(x.MakeArrayType(rank)) + member _.MakeGenericType (args: ProvidedType[]) = let argTypes = args |> Array.map (fun arg -> arg.RawSystemType) ProvidedType.CreateNoContext(x.MakeGenericType(argTypes)) - member __.AsProvidedVar name = ProvidedVar.Create ctxt (Quotations.Var(name, x)) + member _.AsProvidedVar name = ProvidedVar.Create ctxt (Quotations.Var(name, x)) static member Create ctxt x = match x with null -> null | t -> ProvidedType (t, ctxt) static member CreateWithNullCheck ctxt name x = match x with null -> nullArg name | t -> ProvidedType (t, ctxt) static member CreateArray ctxt xs = match xs with null -> null | _ -> xs |> Array.map (ProvidedType.Create ctxt) static member CreateNoContext (x: Type) = ProvidedType.Create ProvidedTypeContext.Empty x static member Void = ProvidedType.CreateNoContext typeof - member __.Handle = x - override __.Equals y = assert false; match y with :? ProvidedType as y -> x.Equals y.Handle | _ -> false - override __.GetHashCode() = assert false; x.GetHashCode() - member __.Context = ctxt + member _.Handle = x + override _.Equals y = assert false; match y with :? ProvidedType as y -> x.Equals y.Handle | _ -> false + override _.GetHashCode() = assert false; x.GetHashCode() + member _.Context = ctxt member this.TryGetILTypeRef() = this.Context.TryGetILTypeRef this member this.TryGetTyconRef() = this.Context.TryGetTyconRef this static member ApplyContext (pt: ProvidedType, ctxt) = ProvidedType(pt.Handle, ctxt) @@ -401,19 +404,19 @@ module internal ExtensionTyping = and [] IProvidedCustomAttributeProvider = - abstract GetDefinitionLocationAttribute : provider: ITypeProvider -> (string * int * int) option - abstract GetXmlDocAttributes : provider: ITypeProvider -> string[] - abstract GetHasTypeProviderEditorHideMethodsAttribute : provider: ITypeProvider -> bool + abstract GetDefinitionLocationAttribute: provider: ITypeProvider -> (string * int * int) option + abstract GetXmlDocAttributes: provider: ITypeProvider -> string[] + abstract GetHasTypeProviderEditorHideMethodsAttribute: provider: ITypeProvider -> bool abstract GetAttributeConstructorArgs: provider: ITypeProvider * attribName: string -> (obj option list * (string * obj option) list) option and ProvidedCustomAttributeProvider = - static member Create (attributes :(ITypeProvider -> seq)) : IProvidedCustomAttributeProvider = + static member Create (attributes :(ITypeProvider -> seq)): IProvidedCustomAttributeProvider = let (|Member|_|) (s: string) (x: CustomAttributeNamedArgument) = if x.MemberName = s then Some x.TypedValue else None let (|Arg|_|) (x: CustomAttributeTypedArgument) = match x.Value with null -> None | v -> Some v let findAttribByName tyFullName (a: CustomAttributeData) = (a.Constructor.DeclaringType.FullName = tyFullName) let findAttrib (ty: System.Type) a = findAttribByName ty.FullName a { new IProvidedCustomAttributeProvider with - member __.GetAttributeConstructorArgs (provider, attribName) = + member _.GetAttributeConstructorArgs (provider, attribName) = attributes provider |> Seq.tryFind (findAttribByName attribName) |> Option.map (fun a -> @@ -427,11 +430,11 @@ module internal ExtensionTyping = |> List.map (fun arg -> arg.MemberName, match arg.TypedValue with Arg null -> None | Arg obj -> Some obj | _ -> None) ctorArgs, namedArgs) - member __.GetHasTypeProviderEditorHideMethodsAttribute provider = + member _.GetHasTypeProviderEditorHideMethodsAttribute provider = attributes provider |> Seq.exists (findAttrib typeof) - member __.GetDefinitionLocationAttribute provider = + member _.GetDefinitionLocationAttribute provider = attributes provider |> Seq.tryFind (findAttrib typeof) |> Option.map (fun a -> @@ -439,7 +442,7 @@ module internal ExtensionTyping = defaultArg (a.NamedArguments |> Seq.tryPick (function Member "Line" (Arg (:? int as v)) -> Some v | _ -> None)) 0, defaultArg (a.NamedArguments |> Seq.tryPick (function Member "Column" (Arg (:? int as v)) -> Some v | _ -> None)) 0)) - member __.GetXmlDocAttributes provider = + member _.GetXmlDocAttributes provider = attributes provider |> Seq.choose (fun a -> if findAttrib typeof a then @@ -453,71 +456,71 @@ module internal ExtensionTyping = and [] ProvidedMemberInfo (x: System.Reflection.MemberInfo, ctxt) = let provide () = ProvidedCustomAttributeProvider.Create (fun _provider -> x.CustomAttributes) - member __.Name = x.Name + member _.Name = x.Name /// DeclaringType can be null if MemberInfo belongs to Module, not to Type - member __.DeclaringType = ProvidedType.Create ctxt x.DeclaringType + member _.DeclaringType = ProvidedType.Create ctxt x.DeclaringType interface IProvidedCustomAttributeProvider with - member __.GetHasTypeProviderEditorHideMethodsAttribute provider = provide().GetHasTypeProviderEditorHideMethodsAttribute provider - member __.GetDefinitionLocationAttribute provider = provide().GetDefinitionLocationAttribute provider - member __.GetXmlDocAttributes provider = provide().GetXmlDocAttributes provider - member __.GetAttributeConstructorArgs (provider, attribName) = provide().GetAttributeConstructorArgs (provider, attribName) + member _.GetHasTypeProviderEditorHideMethodsAttribute provider = provide().GetHasTypeProviderEditorHideMethodsAttribute provider + member _.GetDefinitionLocationAttribute provider = provide().GetDefinitionLocationAttribute provider + member _.GetXmlDocAttributes provider = provide().GetXmlDocAttributes provider + member _.GetAttributeConstructorArgs (provider, attribName) = provide().GetAttributeConstructorArgs (provider, attribName) and [] ProvidedParameterInfo (x: System.Reflection.ParameterInfo, ctxt) = let provide () = ProvidedCustomAttributeProvider.Create (fun _provider -> x.CustomAttributes) - member __.Name = x.Name - member __.IsOut = x.IsOut - member __.IsIn = x.IsIn - member __.IsOptional = x.IsOptional - member __.RawDefaultValue = x.RawDefaultValue - member __.HasDefaultValue = x.Attributes.HasFlag(System.Reflection.ParameterAttributes.HasDefault) + member _.Name = x.Name + member _.IsOut = x.IsOut + member _.IsIn = x.IsIn + member _.IsOptional = x.IsOptional + member _.RawDefaultValue = x.RawDefaultValue + member _.HasDefaultValue = x.Attributes.HasFlag(System.Reflection.ParameterAttributes.HasDefault) /// ParameterInfo.ParameterType cannot be null - member __.ParameterType = ProvidedType.CreateWithNullCheck ctxt "ParameterType" x.ParameterType + member _.ParameterType = ProvidedType.CreateWithNullCheck ctxt "ParameterType" x.ParameterType static member Create ctxt x = match x with null -> null | t -> ProvidedParameterInfo (t, ctxt) static member CreateArray ctxt xs = match xs with null -> null | _ -> xs |> Array.map (ProvidedParameterInfo.Create ctxt) // TODO null wrong? interface IProvidedCustomAttributeProvider with - member __.GetHasTypeProviderEditorHideMethodsAttribute provider = provide().GetHasTypeProviderEditorHideMethodsAttribute provider - member __.GetDefinitionLocationAttribute provider = provide().GetDefinitionLocationAttribute provider - member __.GetXmlDocAttributes provider = provide().GetXmlDocAttributes provider - member __.GetAttributeConstructorArgs (provider, attribName) = provide().GetAttributeConstructorArgs (provider, attribName) - member __.Handle = x - override __.Equals y = assert false; match y with :? ProvidedParameterInfo as y -> x.Equals y.Handle | _ -> false - override __.GetHashCode() = assert false; x.GetHashCode() + member _.GetHasTypeProviderEditorHideMethodsAttribute provider = provide().GetHasTypeProviderEditorHideMethodsAttribute provider + member _.GetDefinitionLocationAttribute provider = provide().GetDefinitionLocationAttribute provider + member _.GetXmlDocAttributes provider = provide().GetXmlDocAttributes provider + member _.GetAttributeConstructorArgs (provider, attribName) = provide().GetAttributeConstructorArgs (provider, attribName) + member _.Handle = x + override _.Equals y = assert false; match y with :? ProvidedParameterInfo as y -> x.Equals y.Handle | _ -> false + override _.GetHashCode() = assert false; x.GetHashCode() and [] ProvidedAssembly (x: System.Reflection.Assembly) = - member __.GetName() = x.GetName() - member __.FullName = x.FullName - member __.GetManifestModuleContents(provider: ITypeProvider) = provider.GetGeneratedAssemblyContents x + member _.GetName() = x.GetName() + member _.FullName = x.FullName + member _.GetManifestModuleContents(provider: ITypeProvider) = provider.GetGeneratedAssemblyContents x static member Create (x: System.Reflection.Assembly) = match x with null -> null | t -> ProvidedAssembly (t) - member __.Handle = x - override __.Equals y = assert false; match y with :? ProvidedAssembly as y -> x.Equals y.Handle | _ -> false - override __.GetHashCode() = assert false; x.GetHashCode() + member _.Handle = x + override _.Equals y = assert false; match y with :? ProvidedAssembly as y -> x.Equals y.Handle | _ -> false + override _.GetHashCode() = assert false; x.GetHashCode() and [] ProvidedMethodBase (x: System.Reflection.MethodBase, ctxt) = inherit ProvidedMemberInfo(x, ctxt) - member __.Context = ctxt - member __.IsGenericMethod = x.IsGenericMethod - member __.IsStatic = x.IsStatic - member __.IsFamily = x.IsFamily - member __.IsFamilyOrAssembly = x.IsFamilyOrAssembly - member __.IsFamilyAndAssembly = x.IsFamilyAndAssembly - member __.IsVirtual = x.IsVirtual - member __.IsFinal = x.IsFinal - member __.IsPublic = x.IsPublic - member __.IsAbstract = x.IsAbstract - member __.IsHideBySig = x.IsHideBySig - member __.IsConstructor = x.IsConstructor - member __.GetParameters() = x.GetParameters() |> ProvidedParameterInfo.CreateArray ctxt - member __.GetGenericArguments() = x.GetGenericArguments() |> ProvidedType.CreateArray ctxt - member __.Handle = x + member _.Context = ctxt + member _.IsGenericMethod = x.IsGenericMethod + member _.IsStatic = x.IsStatic + member _.IsFamily = x.IsFamily + member _.IsFamilyOrAssembly = x.IsFamilyOrAssembly + member _.IsFamilyAndAssembly = x.IsFamilyAndAssembly + member _.IsVirtual = x.IsVirtual + member _.IsFinal = x.IsFinal + member _.IsPublic = x.IsPublic + member _.IsAbstract = x.IsAbstract + member _.IsHideBySig = x.IsHideBySig + member _.IsConstructor = x.IsConstructor + member _.GetParameters() = x.GetParameters() |> ProvidedParameterInfo.CreateArray ctxt + member _.GetGenericArguments() = x.GetGenericArguments() |> ProvidedType.CreateArray ctxt + member _.Handle = x static member TaintedGetHashCode (x: Tainted) = Tainted.GetHashCodeTainted (x.PApplyNoFailure(fun st -> (st.Name, st.DeclaringType.Assembly.FullName, st.DeclaringType.FullName))) static member TaintedEquals (pt1: Tainted, pt2: Tainted) = Tainted.EqTainted (pt1.PApplyNoFailure(fun st -> st.Handle)) (pt2.PApplyNoFailure(fun st -> st.Handle)) - member __.GetStaticParametersForMethod(provider: ITypeProvider) = + member _.GetStaticParametersForMethod(provider: ITypeProvider) = let bindingFlags = BindingFlags.Instance ||| BindingFlags.NonPublic ||| BindingFlags.Public let staticParams = @@ -538,7 +541,7 @@ module internal ExtensionTyping = staticParams |> ProvidedParameterInfo.CreateArray ctxt - member __.ApplyStaticArgumentsForMethod(provider: ITypeProvider, fullNameAfterArguments: string, staticArgs: obj[]) = + member _.ApplyStaticArgumentsForMethod(provider: ITypeProvider, fullNameAfterArguments: string, staticArgs: obj[]) = let bindingFlags = BindingFlags.Instance ||| BindingFlags.Public ||| BindingFlags.InvokeMethod let mb = @@ -563,8 +566,8 @@ module internal ExtensionTyping = | :? System.Reflection.MethodBase as mb -> mb | _ -> failwith (FSComp.SR.estApplyStaticArgumentsForMethodNotImplemented()) match mb with - | :? System.Reflection.MethodInfo as mi -> (mi |> ProvidedMethodInfo.Create ctxt : ProvidedMethodInfo) :> ProvidedMethodBase - | :? System.Reflection.ConstructorInfo as ci -> (ci |> ProvidedConstructorInfo.Create ctxt : ProvidedConstructorInfo) :> ProvidedMethodBase + | :? System.Reflection.MethodInfo as mi -> (mi |> ProvidedMethodInfo.Create ctxt: ProvidedMethodInfo) :> ProvidedMethodBase + | :? System.Reflection.ConstructorInfo as ci -> (ci |> ProvidedConstructorInfo.Create ctxt: ProvidedConstructorInfo) :> ProvidedMethodBase | _ -> failwith (FSComp.SR.estApplyStaticArgumentsForMethodNotImplemented()) @@ -573,21 +576,21 @@ module internal ExtensionTyping = inherit ProvidedMemberInfo(x, ctxt) static member Create ctxt x = match x with null -> null | t -> ProvidedFieldInfo (t, ctxt) static member CreateArray ctxt xs = match xs with null -> null | _ -> xs |> Array.map (ProvidedFieldInfo.Create ctxt) - member __.IsInitOnly = x.IsInitOnly - member __.IsStatic = x.IsStatic - member __.IsSpecialName = x.IsSpecialName - member __.IsLiteral = x.IsLiteral - member __.GetRawConstantValue() = x.GetRawConstantValue() + member _.IsInitOnly = x.IsInitOnly + member _.IsStatic = x.IsStatic + member _.IsSpecialName = x.IsSpecialName + member _.IsLiteral = x.IsLiteral + member _.GetRawConstantValue() = x.GetRawConstantValue() /// FieldInfo.FieldType cannot be null - member __.FieldType = x.FieldType |> ProvidedType.CreateWithNullCheck ctxt "FieldType" - member __.Handle = x - member __.IsPublic = x.IsPublic - member __.IsFamily = x.IsFamily - member __.IsPrivate = x.IsPrivate - member __.IsFamilyOrAssembly = x.IsFamilyOrAssembly - member __.IsFamilyAndAssembly = x.IsFamilyAndAssembly - override __.Equals y = assert false; match y with :? ProvidedFieldInfo as y -> x.Equals y.Handle | _ -> false - override __.GetHashCode() = assert false; x.GetHashCode() + member _.FieldType = x.FieldType |> ProvidedType.CreateWithNullCheck ctxt "FieldType" + member _.Handle = x + member _.IsPublic = x.IsPublic + member _.IsFamily = x.IsFamily + member _.IsPrivate = x.IsPrivate + member _.IsFamilyOrAssembly = x.IsFamilyOrAssembly + member _.IsFamilyAndAssembly = x.IsFamilyAndAssembly + override _.Equals y = assert false; match y with :? ProvidedFieldInfo as y -> x.Equals y.Handle | _ -> false + override _.GetHashCode() = assert false; x.GetHashCode() static member TaintedEquals (pt1: Tainted, pt2: Tainted) = Tainted.EqTainted (pt1.PApplyNoFailure(fun st -> st.Handle)) (pt2.PApplyNoFailure(fun st -> st.Handle)) @@ -597,31 +600,31 @@ module internal ExtensionTyping = ProvidedMethodInfo (x: System.Reflection.MethodInfo, ctxt) = inherit ProvidedMethodBase(x, ctxt) - member __.ReturnType = x.ReturnType |> ProvidedType.CreateWithNullCheck ctxt "ReturnType" + member _.ReturnType = x.ReturnType |> ProvidedType.CreateWithNullCheck ctxt "ReturnType" static member Create ctxt x = match x with null -> null | t -> ProvidedMethodInfo (t, ctxt) static member CreateArray ctxt xs = match xs with null -> null | _ -> xs |> Array.map (ProvidedMethodInfo.Create ctxt) - member __.Handle = x - member __.MetadataToken = x.MetadataToken - override __.Equals y = assert false; match y with :? ProvidedMethodInfo as y -> x.Equals y.Handle | _ -> false - override __.GetHashCode() = assert false; x.GetHashCode() + member _.Handle = x + member _.MetadataToken = x.MetadataToken + override _.Equals y = assert false; match y with :? ProvidedMethodInfo as y -> x.Equals y.Handle | _ -> false + override _.GetHashCode() = assert false; x.GetHashCode() and [] ProvidedPropertyInfo (x: System.Reflection.PropertyInfo, ctxt) = inherit ProvidedMemberInfo(x, ctxt) - member __.GetGetMethod() = x.GetGetMethod() |> ProvidedMethodInfo.Create ctxt - member __.GetSetMethod() = x.GetSetMethod() |> ProvidedMethodInfo.Create ctxt - member __.CanRead = x.CanRead - member __.CanWrite = x.CanWrite - member __.GetIndexParameters() = x.GetIndexParameters() |> ProvidedParameterInfo.CreateArray ctxt + member _.GetGetMethod() = x.GetGetMethod() |> ProvidedMethodInfo.Create ctxt + member _.GetSetMethod() = x.GetSetMethod() |> ProvidedMethodInfo.Create ctxt + member _.CanRead = x.CanRead + member _.CanWrite = x.CanWrite + member _.GetIndexParameters() = x.GetIndexParameters() |> ProvidedParameterInfo.CreateArray ctxt /// PropertyInfo.PropertyType cannot be null - member __.PropertyType = x.PropertyType |> ProvidedType.CreateWithNullCheck ctxt "PropertyType" + member _.PropertyType = x.PropertyType |> ProvidedType.CreateWithNullCheck ctxt "PropertyType" static member Create ctxt x = match x with null -> null | t -> ProvidedPropertyInfo (t, ctxt) static member CreateArray ctxt xs = match xs with null -> null | _ -> xs |> Array.map (ProvidedPropertyInfo.Create ctxt) - member __.Handle = x - override __.Equals y = assert false; match y with :? ProvidedPropertyInfo as y -> x.Equals y.Handle | _ -> false - override __.GetHashCode() = assert false; x.GetHashCode() + member _.Handle = x + override _.Equals y = assert false; match y with :? ProvidedPropertyInfo as y -> x.Equals y.Handle | _ -> false + override _.GetHashCode() = assert false; x.GetHashCode() static member TaintedGetHashCode (x: Tainted) = Tainted.GetHashCodeTainted (x.PApplyNoFailure(fun st -> (st.Name, st.DeclaringType.Assembly.FullName, st.DeclaringType.FullName))) static member TaintedEquals (pt1: Tainted, pt2: Tainted) = @@ -630,15 +633,15 @@ module internal ExtensionTyping = and [] ProvidedEventInfo (x: System.Reflection.EventInfo, ctxt) = inherit ProvidedMemberInfo(x, ctxt) - member __.GetAddMethod() = x.GetAddMethod() |> ProvidedMethodInfo.Create ctxt - member __.GetRemoveMethod() = x.GetRemoveMethod() |> ProvidedMethodInfo.Create ctxt + member _.GetAddMethod() = x.GetAddMethod() |> ProvidedMethodInfo.Create ctxt + member _.GetRemoveMethod() = x.GetRemoveMethod() |> ProvidedMethodInfo.Create ctxt /// EventInfo.EventHandlerType cannot be null - member __.EventHandlerType = x.EventHandlerType |> ProvidedType.CreateWithNullCheck ctxt "EventHandlerType" + member _.EventHandlerType = x.EventHandlerType |> ProvidedType.CreateWithNullCheck ctxt "EventHandlerType" static member Create ctxt x = match x with null -> null | t -> ProvidedEventInfo (t, ctxt) static member CreateArray ctxt xs = match xs with null -> null | _ -> xs |> Array.map (ProvidedEventInfo.Create ctxt) - member __.Handle = x - override __.Equals y = assert false; match y with :? ProvidedEventInfo as y -> x.Equals y.Handle | _ -> false - override __.GetHashCode() = assert false; x.GetHashCode() + member _.Handle = x + override _.Equals y = assert false; match y with :? ProvidedEventInfo as y -> x.Equals y.Handle | _ -> false + override _.GetHashCode() = assert false; x.GetHashCode() static member TaintedGetHashCode (x: Tainted) = Tainted.GetHashCodeTainted (x.PApplyNoFailure(fun st -> (st.Name, st.DeclaringType.Assembly.FullName, st.DeclaringType.FullName))) static member TaintedEquals (pt1: Tainted, pt2: Tainted) = @@ -649,9 +652,9 @@ module internal ExtensionTyping = inherit ProvidedMethodBase(x, ctxt) static member Create ctxt x = match x with null -> null | t -> ProvidedConstructorInfo (t, ctxt) static member CreateArray ctxt xs = match xs with null -> null | _ -> xs |> Array.map (ProvidedConstructorInfo.Create ctxt) - member __.Handle = x - override __.Equals y = assert false; match y with :? ProvidedConstructorInfo as y -> x.Equals y.Handle | _ -> false - override __.GetHashCode() = assert false; x.GetHashCode() + member _.Handle = x + override _.Equals y = assert false; match y with :? ProvidedConstructorInfo as y -> x.Equals y.Handle | _ -> false + override _.GetHashCode() = assert false; x.GetHashCode() and ProvidedExprType = | ProvidedNewArrayExpr of ProvidedType * ProvidedExpr[] @@ -680,11 +683,11 @@ module internal ExtensionTyping = and [] ProvidedExpr (x: Quotations.Expr, ctxt) = - member __.Type = x.Type |> ProvidedType.Create ctxt - member __.Handle = x - member __.Context = ctxt - member __.UnderlyingExpressionString = x.ToString() - member __.GetExprType() = + member _.Type = x.Type |> ProvidedType.Create ctxt + member _.Handle = x + member _.Context = ctxt + member _.UnderlyingExpressionString = x.ToString() + member _.GetExprType() = match x with | Quotations.Patterns.NewObject(ctor, args) -> Some (ProvidedNewObjectExpr (ProvidedConstructorInfo.Create ctxt ctor, [| for a in args -> ProvidedExpr.Create ctxt a |])) @@ -733,20 +736,20 @@ module internal ExtensionTyping = | _ -> None static member Create ctxt t = match box t with null -> null | _ -> ProvidedExpr (t, ctxt) static member CreateArray ctxt xs = match xs with null -> null | _ -> xs |> Array.map (ProvidedExpr.Create ctxt) - override __.Equals y = match y with :? ProvidedExpr as y -> x.Equals y.Handle | _ -> false - override __.GetHashCode() = x.GetHashCode() + override _.Equals y = match y with :? ProvidedExpr as y -> x.Equals y.Handle | _ -> false + override _.GetHashCode() = x.GetHashCode() and [] ProvidedVar (x: Quotations.Var, ctxt) = - member __.Type = x.Type |> ProvidedType.Create ctxt - member __.Name = x.Name - member __.IsMutable = x.IsMutable - member __.Handle = x - member __.Context = ctxt + member _.Type = x.Type |> ProvidedType.Create ctxt + member _.Name = x.Name + member _.IsMutable = x.IsMutable + member _.Handle = x + member _.Context = ctxt static member Create ctxt t = match box t with null -> null | _ -> ProvidedVar (t, ctxt) static member CreateArray ctxt xs = match xs with null -> null | _ -> xs |> Array.map (ProvidedVar.Create ctxt) - override __.Equals y = match y with :? ProvidedVar as y -> x.Equals y.Handle | _ -> false - override __.GetHashCode() = x.GetHashCode() + override _.Equals y = match y with :? ProvidedVar as y -> x.Equals y.Handle | _ -> false + override _.GetHashCode() = x.GetHashCode() /// Get the provided invoker expression for a particular use of a method. let GetInvokerExpression (provider: ITypeProvider, methodBase: ProvidedMethodBase, paramExprs: ProvidedVar[]) = @@ -774,7 +777,7 @@ module internal ExtensionTyping = /// Verify that a provided type has the expected name - let ValidateExpectedName m expectedPath expectedName (st : Tainted) = + let ValidateExpectedName m expectedPath expectedName (st: Tainted) = let name = CheckAndComputeProvidedNameProperty(m, st, (fun st -> st.Name), "Name") if name <> expectedName then raise (TypeProviderError(FSComp.SR.etProvidedTypeHasUnexpectedName(expectedName, name), st.TypeProviderDesignation, m)) @@ -796,7 +799,7 @@ module internal ExtensionTyping = errorR(Error(FSComp.SR.etProvidedTypeHasUnexpectedPath(expectedPath, path), m)) /// Eagerly validate a range of conditions on a provided type, after static instantiation (if any) has occurred - let ValidateProvidedTypeAfterStaticInstantiation(m, st: Tainted, expectedPath : string[], expectedName : string) = + let ValidateProvidedTypeAfterStaticInstantiation(m, st: Tainted, expectedPath: string[], expectedName: string) = // Do all the calling into st up front with recovery let fullName, namespaceName, usedMembers = let name = CheckAndComputeProvidedNameProperty(m, st, (fun st -> st.Name), "Name") @@ -804,7 +807,7 @@ module internal ExtensionTyping = let fullName = TryTypeMemberNonNull(st, name, "FullName", m, FSComp.SR.invalidFullNameForProvidedType(), fun st -> st.FullName) |> unmarshal ValidateExpectedName m expectedPath expectedName st // Must be able to call (GetMethods|GetEvents|GetProperties|GetNestedTypes|GetConstructors)(bindingFlags). - let usedMembers : Tainted[] = + let usedMembers: Tainted[] = // These are the members the compiler will actually use [| for x in TryTypeMemberArray(st, fullName, "GetMethods", m, fun st -> st.GetMethods()) -> x.Coerce m for x in TryTypeMemberArray(st, fullName, "GetEvents", m, fun st -> st.GetEvents()) -> x.Coerce m @@ -901,7 +904,7 @@ module internal ExtensionTyping = | None -> errorR(Error(FSComp.SR.etUnsupportedMemberKind(memberName, fullName), m)) - let ValidateProvidedTypeDefinition(m, st: Tainted, expectedPath : string[], expectedName : string) = + let ValidateProvidedTypeDefinition(m, st: Tainted, expectedPath: string[], expectedName: string) = // Validate the Name, Namespace and FullName properties let name = CheckAndComputeProvidedNameProperty(m, st, (fun st -> st.Name), "Name") diff --git a/src/fsharp/ExtensionTyping.fsi b/src/fsharp/ExtensionTyping.fsi index 8719c09ce67..311d7959982 100755 --- a/src/fsharp/ExtensionTyping.fsi +++ b/src/fsharp/ExtensionTyping.fsi @@ -6,15 +6,13 @@ namespace FSharp.Compiler #if !NO_EXTENSIONTYPING -module internal ExtensionTyping = +open System +open System.Collections.Generic +open FSharp.Core.CompilerServices +open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.Text - open System - open System.IO - open System.Collections.Generic - open Microsoft.FSharp.Core.CompilerServices - open FSharp.Compiler.AbstractIL.IL - open FSharp.Compiler.AbstractIL.Internal.Library - open FSharp.Compiler.Range +module internal ExtensionTyping = type TypeProviderDesignation = TypeProviderDesignation of string diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index dd5488d7edc..f3fd98c6d50 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -482,7 +482,7 @@ tcUnexpectedConstUint16Array,"Unexpected Const_uint16array" tcUnexpectedConstByteArray,"Unexpected Const_bytearray" 640,tcParameterRequiresName,"A parameter with attributes must also be given a name, e.g. '[] Name : Type'" 641,tcReturnValuesCannotHaveNames,"Return values cannot have names" -tcMemberKindPropertyGetSetNotExpected,"MemberKind.PropertyGetSet only expected in parse trees" +tcMemberKindPropertyGetSetNotExpected,"SynMemberKind.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 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" @@ -851,8 +851,10 @@ optsPlatform,"Limit which platforms this code can run on: x86, Itanium, x64, any optsNoOpt,"Only include optimization information essential for implementing inlined constructs. Inhibits cross-module inlining but improves binary compatibility." optsNoInterface,"Don't add a resource to the generated assembly containing F#-specific metadata" optsSig,"Print the inferred interface of the assembly to a file" +optsAllSigs,"Print the inferred interfaces of all compilation files to associated signature files" optsReference,"Reference an assembly (Short form: -r)" optsCompilerTool,"Reference an assembly or directory containing a design time tool (Short form: -t)" +optsWin32icon,"Specify a Win32 icon file (.ico)" optsWin32res,"Specify a Win32 resource file (.res)" optsWin32manifest,"Specify a Win32 manifest file" optsNowin32manifest,"Do not include the default Win32 manifest" @@ -1228,6 +1230,9 @@ invalidFullNameForProvidedType,"invalid full name for provided type" 3087,tcCustomOperationMayNotBeOverloaded,"The custom operation '%s' refers to a method which is overloaded. The implementations of custom operations may not be overloaded." featureOverloadsForCustomOperations,"overloads for custom operations" featureExpandedMeasurables,"more types support units of measure" +featurePrintfBinaryFormat,"binary formatting for integers" +featureDiscardUseValue,"discard pattern in use binding" +featureNonVariablePatternsToRightOfAsPatterns,"non-variable patterns to the right of 'as' patterns" 3090,tcIfThenElseMayNotBeUsedWithinQueries,"An if/then/else expression may not be used within queries. Consider using either an if/then expression, or use a sequence expression instead." 3091,ilxgenUnexpectedArgumentToMethodHandleOfDuringCodegen,"Invalid argument to 'methodhandleof' during codegen" 3092,etProvidedTypeReferenceMissingArgument,"A reference to a provided type was missing a value for the static parameter '%s'. You may need to recompile one or more referenced assemblies." @@ -1521,6 +1526,7 @@ featureNullableOptionalInterop,"nullable optional interop" featureDefaultInterfaceMemberConsumption,"default interface member consumption" featureStringInterpolation,"string interpolation" featureWitnessPassing,"witness passing for trait constraints in F# quotations" +featureStructActivePattern,"struct representation for active patterns" 3353,fsiInvalidDirective,"Invalid directive '#%s %s'" 3360,typrelInterfaceWithConcreteAndVariable,"'%s' cannot implement the interface '%s' with the two instantiations '%s' and '%s' because they may unify." 3361,typrelInterfaceWithConcreteAndVariableObjectExpression,"You cannot implement the interface '%s' with the two instantiations '%s' and '%s' because they may unify." @@ -1543,6 +1549,10 @@ forFormatInvalidForInterpolated4,"Interpolated strings used as type IFormattable 3381,parsEofInInterpolatedTripleQuoteString,"Incomplete interpolated triple-quote string begun at or before here" 3382,parsEmptyFillInInterpolatedString,"Invalid interpolated string. This interpolated string expression fill is empty, an expression was expected." 3383,lexRBraceInInterpolatedString,"A '}}' character must be escaped (by doubling) in an interpolated string." +3384,scriptSdkNotDetermined,"The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '%s --version' in the directory '%s' was: '%s' and the exit code was '%d'." +3384,scriptSdkNotDeterminedUnexpected,"The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '%s'." +3384,scriptSdkNotDeterminedNoHost,"The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed." +3385,tcInvalidStructReturn,"The use of '[]' on values, functions and methods is only allowed on partial active pattern definitions" #3501 "This construct is not supported by your version of the F# compiler" CompilerMessage(ExperimentalAttributeMessages.NotSupportedYet, 3501, IsError=true) 3390,xmlDocBadlyFormed,"This XML comment is invalid: '%s'" 3390,xmlDocMissingParameterName,"This XML comment is invalid: missing 'name' attribute for parameter or parameter reference" @@ -1550,4 +1560,7 @@ forFormatInvalidForInterpolated4,"Interpolated strings used as type IFormattable 3390,xmlDocInvalidParameterName,"This XML comment is invalid: unknown parameter '%s'" 3390,xmlDocDuplicateParameter,"This XML comment is invalid: multiple documentation entries for parameter '%s'" 3390,xmlDocUnresolvedCrossReference,"This XML comment is invalid: unresolved cross-reference '%s'" -3390,xmlDocMissingParameter,"This XML comment is incomplete: no documentation for parameter '%s'" \ No newline at end of file +3390,xmlDocMissingParameter,"This XML comment is incomplete: no documentation for parameter '%s'" +3391,tcLiteralAttributeCannotUseActivePattern,"A [] declaration cannot use an active pattern for its identifier" +3392,containerDeprecated,"The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead." +3393,containerSigningUnsupportedOnThisPlatform,"Key container signing is not supported on this platform." \ No newline at end of file diff --git a/src/fsharp/FSharp.Build/FSharp.Build.fsproj b/src/fsharp/FSharp.Build/FSharp.Build.fsproj index 3d36804a7a8..72a843adc8b 100644 --- a/src/fsharp/FSharp.Build/FSharp.Build.fsproj +++ b/src/fsharp/FSharp.Build/FSharp.Build.fsproj @@ -10,7 +10,6 @@ $(NoWarn);45;55;62;75;1204 true $(OtherFlags) --maxerrors:20 --extraoptimizationloops:1 - true $(DefineConstants);LOCALIZATION_FSBUILD NU1701;FS0075 true @@ -50,7 +49,6 @@ - diff --git a/src/fsharp/FSharp.Build/FSharpEmbedResourceText.fs b/src/fsharp/FSharp.Build/FSharpEmbedResourceText.fs index 3428d60ad8f..1a8efbe5b66 100644 --- a/src/fsharp/FSharp.Build/FSharpEmbedResourceText.fs +++ b/src/fsharp/FSharp.Build/FSharpEmbedResourceText.fs @@ -29,7 +29,7 @@ type FSharpEmbedResourceText() = let xmlBoilerPlateString = @" - - - - Library - net472;netstandard2.0 - netstandard2.0 - FSharp.Compiler.Private - $(NoWarn);45;55;62;75;1204 - true - $(DefineConstants);COMPILER - $(DefineConstants);LOCALIZATION_FCOMP - $(OtherFlags) --warnon:3218 --warnon:1182 /warnon:3390 --maxerrors:20 --extraoptimizationloops:1 - true - - - - $(IntermediateOutputPath)$(TargetFramework)\ - $(IntermediateOutputPath)$(TargetFramework)\ - - - - - $(BaseOutputPath)\$(Configuration)\$(TargetFramework) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FSComp.txt - - - FSStrings.resx - - - ErrorText\sformat.fsi - - - ErrorText\sformat.fs - - - ErrorText\sr.fsi - - - ErrorText\sr.fs - - - Facilities\Logger.fsi - - - Facilities\Logger.fs - - - Facilities\LanguageFeatures.fsi - - - Facilities\LanguageFeatures.fs - - - LexYaccRuntime\prim-lexing.fsi - - - LexYaccRuntime\prim-lexing.fs - - - LexYaccRuntime\prim-parsing.fsi - - - LexYaccRuntime\prim-parsing.fs - - - Utilities\ResizeArray.fsi - - - Utilities\ResizeArray.fs - - - Utilities\HashMultiMap.fsi - - - Utilities\HashMultiMap.fs - - - Utilities\EditDistance.fsi - - - Utilities\EditDistance.fs - - - Utilities\TaggedCollections.fsi - - - Utilities\TaggedCollections.fs - - - Utilities\ildiag.fsi - - - Utilities\ildiag.fs - - - Utilities\illib.fsi - - - Utilities\illib.fs - - - Utilities\filename.fsi - - - Utilities\filename.fs - - - Utilities\zmap.fsi - - - Utilities\zmap.fs - - - Utilities\zset.fsi - - - Utilities\zset.fs - - - Utilities\bytes.fsi - - - Utilities\bytes.fs - - - Utilities\XmlAdapters.fsi - - - Utilities\XmlAdapters.fs - - - Utilities\InternalCollections.fsi - - - Utilities\InternalCollections.fs - - - Utilities\QueueList.fsi - - - Utilities\QueueList.fs - - - Utilities\lib.fsi - - - Utilities\lib.fs - - - Utilities\rational.fsi - - - Utilities\rational.fs - - - Utilities\PathMap.fsi - - - Utilities\PathMap.fs - - - ErrorLogging\range.fsi - - - ErrorLogging\range.fs - - - ErrorLogging\ErrorLogger.fsi - - - ErrorLogging\ErrorLogger.fs - - - ErrorLogging\ErrorResolutionHints.fsi - - - ErrorLogging\ErrorResolutionHints.fs - - - --unicode --lexlib Internal.Utilities.Text.Lexing - AbsIL\illex.fsl - - - AbsIL\FsLex\illex.fsl - - - --module FSharp.Compiler.AbstractIL.Internal.AsciiParser --open FSharp.Compiler.AbstractIL --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing - AbsIL\ilpars.fsy - - - AbsIL\FsYacc\ilpars.fsy - - - AbsIL\il.fsi - - - AbsIL\il.fs - - - AbsIL\ilx.fsi - - - AbsIL\ilx.fs - - - AbsIL\ilascii.fsi - - - AbsIL\ilascii.fs - - - AbsIL\FsYaccOut\ilpars.fs - - - AbsIL\FsLexOut\illex.fs - - - AbsIL\ilprint.fsi - - - AbsIL\ilprint.fs - - - AbsIL\ilmorph.fsi - - - AbsIL\ilmorph.fs - - - AbsIL\ilsign.fsi - - - AbsIL\ilsign.fs - - - AbsIL\ilnativeres.fsi - - - AbsIL\ilnativeres.fs - - - AbsIL\ilsupp.fsi - - - AbsIL\ilsupp.fs - - - AbsIL\ilbinary.fsi - - - AbsIL\ilbinary.fs - - - AbsIL\ilread.fsi - - - AbsIL\ilread.fs - - - AbsIL\ilwritepdb.fsi - - - AbsIL\ilwritepdb.fs - - - AbsIL\ilwrite.fsi - - - AbsIL\ilwrite.fs - - - AbsIL\ilreflect.fsi - - - AbsIL\ilreflect.fs - - - ReferenceResolution\ReferenceResolver.fsi - - - ReferenceResolution\ReferenceResolver.fs - - - - ReferenceResolution/LegacyMSBuildReferenceResolver.fsi - - - ReferenceResolution/LegacyMSBuildReferenceResolver.fs - - - - ReferenceResolution/SimulatedMSBuildReferenceResolver.fsi - - - ReferenceResolution/SimulatedMSBuildReferenceResolver.fs - - - - CompilerLocation\CompilerLocationUtils.fsi - - - CompilerLocation\CompilerLocationUtils.fs - - - PrettyNaming\PrettyNaming.fsi - - - PrettyNaming\PrettyNaming.fs - - - ILXErase\ilxsettings.fs - - - ILXErase\EraseClosures.fsi - - - ILXErase\EraseClosures.fs - - - ILXErase\EraseUnions.fsi - - - ILXErase\EraseUnions.fs - - - --unicode --lexlib Internal.Utilities.Text.Lexing - ParserAndUntypedAST\pplex.fsl - - - --module FSharp.Compiler.PPParser --open FSharp.Compiler --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing - ParserAndUntypedAST\pppars.fsy - - - --unicode --lexlib Internal.Utilities.Text.Lexing - ParserAndUntypedAST\lex.fsl - - - --module FSharp.Compiler.Parser --open FSharp.Compiler --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing - ParserAndUntypedAST\pars.fsy - - - ParserAndUntypedAST\FsLex\pplex.fsl - - - ParserAndUntypedAST\FsLex\lex.fsl - - - ParserAndUntypedAST\FsYacc\pppars.fsy - - - ParserAndUntypedAST\FsYacc\pars.fsy - - - ParserAndUntypedAST\UnicodeLexing.fsi - - - ParserAndUntypedAST\UnicodeLexing.fs - - - ParserAndUntypedAST\layout.fsi - - - ParserAndUntypedAST\layout.fs - - - ParserAndUntypedAST\XmlDoc.fsi - - - ParserAndUntypedAST\XmlDoc.fs - - - ParserAndUntypedAST\SyntaxTree.fs - - - ParserAndUntypedAST\SyntaxTreeOps.fsi - - - ParserAndUntypedAST\SyntaxTreeOps.fs - - - ParserAndUntypedAST\ParseHelpers.fsi - - - ParserAndUntypedAST\ParseHelpers.fs - - - ParserAndUntypedAST\FsYaccOutput\pppars.fs - - - ParserAndUntypedAST\FsYaccOutput\pars.fs - - - ParserAndUntypedAST\lexhelp.fsi - - - ParserAndUntypedAST\lexhelp.fs - - - ParserAndUntypedAST\FsLexOutput\pplex.fs - - - ParserAndUntypedAST\FsLexOutput\lex.fs - - - ParserAndUntypedAST\LexFilter.fsi - - - ParserAndUntypedAST\LexFilter.fs - - - TypedTree\tainted.fsi - - - TypedTree\tainted.fs - - - TypedTree\ExtensionTyping.fsi - - - TypedTree\ExtensionTyping.fs - - - TypedTree\QuotationPickler.fsi - - - TypedTree\QuotationPickler.fs - - - TypedTree\CompilerGlobalState.fsi - - - TypedTree\CompilerGlobalState.fs - - - TypedTree\TypedTree.fs - - - TypedTree\TypedTreeBasics.fsi - - - TypedTree\TypedTreeBasics.fs - - - TypedTree\TcGlobals.fs - - - TypedTree\TypedTreeOps.fsi - - - TypedTree\TypedTreeOps.fs - - - TypedTree\TypedTreePickle.fsi - - - TypedTree\TypedTreePickle.fs - - - Logic\import.fsi - - - Logic\import.fs - - - Logic\infos.fsi - - - Logic\infos.fs - - - Logic\AccessibilityLogic.fsi - - - Logic\AccessibilityLogic.fs - - - Logic\AttributeChecking.fsi - - - Logic\AttributeChecking.fs - - - Logic\TypeRelations.fsi - - - Logic\TypeRelations.fs - - - Logic\InfoReader.fsi - - - Logic\InfoReader.fs - - - Logic\NicePrint.fsi - - - Logic\NicePrint.fs - - - Logic\AugmentWithHashCompare.fsi - - - Logic\AugmentWithHashCompare.fs - - - Logic\NameResolution.fsi - - - Logic\NameResolution.fs - - - Logic\SignatureConformance.fsi - - - Logic\SignatureConformance.fs - - - Logic\MethodOverrides.fsi - - - Logic\MethodOverrides.fs - - - Logic\MethodCalls.fsi - - - Logic\MethodCalls.fs - - - Logic\PatternMatchCompilation.fsi - - - Logic\PatternMatchCompilation.fs - - - Logic\ConstraintSolver.fsi - - - Logic\ConstraintSolver.fs - - - Logic\CheckFormatStrings.fsi - - - Logic\CheckFormatStrings.fs - - - Logic\FindUnsolved.fsi - - - Logic\FindUnsolved.fs - - - Logic\QuotationTranslator.fsi - - - Logic\QuotationTranslator.fs - - - Logic\PostInferenceChecks.fsi - - - Logic\PostInferenceChecks.fs - - - Logic\CheckExpressions.fsi - - - Logic\CheckExpressions.fs - - - Logic\CheckComputationExpressions.fsi - - - Logic\CheckComputationExpressions.fs - - - Logic\CheckDeclarations.fsi - - - Logic\CheckDeclarations.fs - - - Optimize\Optimizer.fsi - - - Optimize\Optimizer.fs - - - Optimize\DetupleArgs.fsi - - - Optimize\DetupleArgs.fs - - - Optimize\InnerLambdasToTopLevelFuncs.fsi - - - Optimize\InnerLambdasToTopLevelFuncs.fs - - - Optimize\LowerCallsAndSeqs.fsi - - - Optimize\LowerCallsAndSeqs.fs - - - Optimize\autobox.fsi - - - Optimize\autobox.fs - - - CodeGen\IlxGen.fsi - - - CodeGen\IlxGen.fs - - - Driver\DotNetFrameworkDependencies.fs - - - Driver\CompilerConfig.fsi - - - Driver\CompilerConfig.fs - - - Driver\CompilerImports.fsi - - - Driver\CompilerImports.fs - - - Driver\CompilerDiagnostics.fsi - - - Driver\CompilerDiagnostics.fs - - - Driver\ParseAndCheckInputs.fsi - - - Driver\ParseAndCheckInputs.fs - - - Driver\ScriptClosure.fsi - - - Driver\ScriptClosure.fs - - - Driver\CompilerOptions.fsi - - - Driver\CompilerOptions.fs - - - Driver\OptimizeInputs.fsi - - - Driver\OptimizeInputs.fs - - - Driver\XmlDocFileWriter.fsi - - - Driver\XmlDocFileWriter.fs - - - Driver\BinaryResourceFormats.fsi - - - Driver\BinaryResourceFormats.fs - - - Driver\StaticLinking.fsi - - - Driver\StaticLinking.fs - - - Driver\CreateILModule.fsi - - - Driver\CreateILModule.fs - - - Driver\fsc.fsi - - - Driver\fsc.fs - - - - - Symbols/SymbolHelpers.fsi - - - Symbols/SymbolHelpers.fs - - - Symbols/Symbols.fsi - - - Symbols/Symbols.fs - - - Symbols/Exprs.fsi - - - Symbols/Exprs.fs - - - Symbols/SymbolPatterns.fsi - - - Symbols/SymbolPatterns.fs - - - Service/Reactor.fsi - - - Service/Reactor.fs - - - - - Service/SemanticClassification.fsi - - - Service/SemanticClassification.fs - - - Service/ItemKey.fsi - - - Service/ItemKey.fs - - - Service/IncrementalBuild.fsi - - - Service/IncrementalBuild.fs - - - Service/ServiceCompilerDiagnostics.fsi - - - Service/ServiceCompilerDiagnostics.fs - - - Service/ServiceConstants.fs - - - Service/ServiceDeclarationLists.fsi - - - Service/ServiceDeclarationLists.fs - - - Service/ServiceLexing.fsi - - - Service/ServiceLexing.fs - - - Service/ServiceParseTreeWalk.fs - - - Service/ServiceNavigation.fsi - - - Service/ServiceNavigation.fs - - - Service/ServiceParamInfoLocations.fsi - - - Service/ServiceParamInfoLocations.fs - - - Service/ServiceUntypedParse.fsi - - - Service/ServiceUntypedParse.fs - - - Service/ServiceAssemblyContent.fsi - - - Service/ServiceAssemblyContent.fs - - - Service/ServiceXmlDocParser.fsi - - - Service/ServiceXmlDocParser.fs - - - Service/ExternalSymbol.fsi - - - Service/ExternalSymbol.fs - - - Service/QuickParse.fsi - - - Service/QuickParse.fs - - - Service/FSharpCheckerResults.fsi - - - Service/FSharpCheckerResults.fs - - - Service/service.fsi - - - Service/service.fs - - - Service/ServiceErrorResolutionHints.fsi - - - Service/ServiceErrorResolutionHints.fs - - - Service/ServiceInterfaceStubGenerator.fsi - - - Service/ServiceInterfaceStubGenerator.fs - - - Service/ServiceStructure.fsi - - - Service/ServiceStructure.fs - - - Service/ServiceAnalysis.fsi - - - Service/ServiceAnalysis.fs - - - - - FSIstrings.txt - - - InteractiveSession/fsi.fsi - - - InteractiveSession/fsi.fs - - - - - Misc/LegacyHostedCompilerForTesting.fs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj b/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj index 75a7353bb96..8241f891960 100644 --- a/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj +++ b/src/fsharp/FSharp.Compiler.Server.Shared/FSharp.Compiler.Server.Shared.fsproj @@ -3,7 +3,6 @@ - true net472 FSharp.Compiler.Server.Shared true diff --git a/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj b/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj index 6d5c7fbb19e..dd96b7da59e 100644 --- a/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj +++ b/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj @@ -1,26 +1,32 @@ - + + - netstandard2.0 - $(NoWarn);44;62;69;65;54;61;75;62;9;2003;NU5125 + net472;netstandard2.0 + Library + $(NoWarn);44;45;54;55;57;61;62;69;65;75;1204;2003;NU5125 + FSharp.Compiler.Service true - $(DefineConstants);COMPILER_SERVICE_AS_DLL $(DefineConstants);COMPILER $(DefineConstants);ENABLE_MONO_SUPPORT - $(OtherFlags) /warnon:3218 /warnon:1182 /warnon:3390 --times - true - - true + $(OtherFlags) /warnon:3218 /warnon:1182 /warnon:3390 --maxerrors:20 --extraoptimizationloops:1 --times + true + $(IntermediateOutputPath)$(TargetFramework)\ + $(IntermediateOutputPath)$(TargetFramework)\ + + $(IntermediateOutputPath)$(TargetFramework)\ $(IntermediateOutputPath)$(TargetFramework)\ + + FSharp.Compiler.Service FSharp.Compiler.Service.nuspec true The F# Compiler Services package For F# $(FSLanguageVersion) exposes additional functionality for implementing F# language bindings, additional tools based on the compiler or refactoring tools. The package also includes F# interactive service that can be used for embedding F# scripting into your applications. Contains code from the F# Software Foundation. - https://github.com/dotnet/fsharp/blob/main/release-notes.md#FSharp-Compiler-Service-$(FSharpCompilerServiceReleaseNotesVersion) + /blob/main/release-notes.md#FSharp-Compiler-Service-$(FSharpCompilerServiceReleaseNotesVersion) F#, fsharp, interactive, compiler, editor preview $(MSBuildThisFileDirectory)logo.png @@ -53,10 +59,13 @@ + + + @@ -72,9 +81,6 @@ FSComp.txt - - DependencyManager.txt - FSIstrings.txt @@ -142,23 +148,23 @@ Utilities\TaggedCollections.fs - - Utilities\ildiag.fsi - - - Utilities\ildiag.fs - Utilities\illib.fsi Utilities\illib.fs - - Utilities\filename.fsi + + Utilities\FileSystem.fsi + + + Utilities\FileSystem.fs - - Utilities\filename.fs + + Utilities\ildiag.fsi + + + Utilities\ildiag.fs Utilities\zmap.fsi @@ -172,12 +178,6 @@ Utilities\zset.fs - - Utilities\bytes.fsi - - - Utilities\bytes.fs - Utilities\XmlAdapters.fsi @@ -223,6 +223,18 @@ ErrorLogging\range.fs + + ErrorLogging\Diagnostics.fsi + + + ErrorLogging\Diagnostics.fs + + + ErrorLogging\TextLayoutRender.fsi + + + ErrorLogging\TextLayoutRender.fs + ErrorLogging\ErrorLogger.fsi @@ -239,10 +251,16 @@ --unicode --lexlib Internal.Utilities.Text.Lexing AbsIL\illex.fsl + + AbsIL\illex.fsl + - --module FSharp.Compiler.AbstractIL.Internal.AsciiParser --open FSharp.Compiler.AbstractIL --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing + --module FSharp.Compiler.AbstractIL.AsciiParser --open FSharp.Compiler.AbstractIL --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing AbsIL\ilpars.fsy + + AbsIL\FsYacc\ilpars.fsy + AbsIL\il.fsi @@ -261,6 +279,12 @@ AbsIL\ilascii.fs + + AbsIL\FsYaccOut\ilpars.fs + + + AbsIL\FsLexOut\illex.fs + AbsIL\ilprint.fsi @@ -291,12 +315,6 @@ AbsIL\ilsupp.fs - - AbsIL\FsYaccOut\ilpars.fs - - - AbsIL\FsLexOut\illex.fs - AbsIL\ilbinary.fsi @@ -333,6 +351,13 @@ ReferenceResolution\ReferenceResolver.fs + + + ReferenceResolution/LegacyMSBuildReferenceResolver.fsi + + + ReferenceResolution/LegacyMSBuildReferenceResolver.fs + ReferenceResolution/SimulatedMSBuildReferenceResolver.fsi @@ -352,9 +377,6 @@ PrettyNaming\PrettyNaming.fs - - ILXErase\ilxsettings.fs - ILXErase\EraseClosures.fsi @@ -372,7 +394,7 @@ ParserAndUntypedAST\pplex.fsl - --module FSharp.Compiler.PPParser --open FSharp.Compiler --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing + --module FSharp.Compiler.PPParser --open FSharp.Compiler --open FSharp.Compiler.Syntax --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing ParserAndUntypedAST\pppars.fsy @@ -380,27 +402,36 @@ ParserAndUntypedAST\lex.fsl - --module FSharp.Compiler.Parser --open FSharp.Compiler --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing + --module FSharp.Compiler.Parser --open FSharp.Compiler --open FSharp.Compiler.Syntax --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing ParserAndUntypedAST\pars.fsy + + ParserAndUntypedAST\FsLex\pplex.fsl + + + ParserAndUntypedAST\FsLex\lex.fsl + + + ParserAndUntypedAST\FsYacc\pppars.fsy + + + ParserAndUntypedAST\FsYacc\pars.fsy + ParserAndUntypedAST\UnicodeLexing.fsi ParserAndUntypedAST\UnicodeLexing.fs - - ParserAndUntypedAST\layout.fsi - - - ParserAndUntypedAST\layout.fs - ParserAndUntypedAST\XmlDoc.fsi ParserAndUntypedAST\XmlDoc.fs + + ParserAndUntypedAST\SyntaxTree.fsi + ParserAndUntypedAST\SyntaxTree.fs @@ -429,9 +460,9 @@ ParserAndUntypedAST\lexhelp.fs - ParserAndUntypedAST\FsLexOutput\pplex.fsl + ParserAndUntypedAST\FsLexOutput\pplex.fs - + ParserAndUntypedAST\FsLexOutput\lex.fs @@ -650,27 +681,33 @@ CodeGen\IlxGen.fs - - Driver\DotNetFrameworkDependencies.fs + + Driver\FxResolver.fs - + Driver\AssemblyResolveHandler.fsi - + Driver\AssemblyResolveHandler.fs - + Driver\NativeDllResolveHandler.fsi - + Driver\NativeDllResolveHandler.fs - + Driver\DependencyProvider.fsi - + Driver\DependencyProvider.fs + + Driver\BuildGraph.fsi + + + Driver\BuildGraph.fs + Driver\CompilerConfig.fsi @@ -769,12 +806,6 @@ Symbols/SymbolPatterns.fs - - Service/Reactor.fsi - - - Service/Reactor.fs - @@ -789,6 +820,12 @@ Service/ItemKey.fs + + Service/SemanticClassificationKey.fsi + + + Service/SemanticClassificationKey.fs + Service/IncrementalBuild.fsi @@ -816,6 +853,9 @@ Service/ServiceLexing.fs + + Service/ServiceParseTreeWalk.fsi + Service/ServiceParseTreeWalk.fs @@ -831,11 +871,17 @@ Service/ServiceParamInfoLocations.fs - - Service/ServiceUntypedParse.fsi + + Service/FSharpParseFileResults.fsi - - Service/ServiceUntypedParse.fs + + Service/FSharpParseFileResults.fs + + + Service/ServiceParsedInputOps.fsi + + + Service/ServiceParsedInputOps.fs Service/ServiceAssemblyContent.fsi @@ -873,12 +919,6 @@ Service/service.fs - - Service/ServiceErrorResolutionHints.fsi - - - Service/ServiceErrorResolutionHints.fs - Service/ServiceInterfaceStubGenerator.fsi @@ -903,6 +943,11 @@ InteractiveSession/fsi.fs + + + + Misc/LegacyHostedCompilerForTesting.fs + @@ -943,5 +988,7 @@ + + diff --git a/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.nuspec b/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.nuspec index c7f35f65030..065f1cdb31c 100644 --- a/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.nuspec +++ b/src/fsharp/FSharp.Compiler.Service/FSharp.Compiler.Service.nuspec @@ -30,6 +30,7 @@ + diff --git a/src/fsharp/FSharp.Core/Query.fs b/src/fsharp/FSharp.Core/Query.fs index 79ffc178d05..8d54ff85228 100644 --- a/src/fsharp/FSharp.Core/Query.fs +++ b/src/fsharp/FSharp.Core/Query.fs @@ -18,7 +18,7 @@ open Microsoft.FSharp.Linq.RuntimeHelpers [] type QuerySource<'T, 'Q> (source: seq<'T>) = - member __.Source = source + member _.Source = source [] module Helpers = @@ -50,98 +50,98 @@ module ForwardDeclarations = } type QueryBuilder() = - member __.For (source: QuerySource<'T, 'Q>, body: 'T -> QuerySource<'Result, 'Q2>) : QuerySource<'Result, 'Q> = + member _.For (source: QuerySource<'T, 'Q>, body: 'T -> QuerySource<'Result, 'Q2>) : QuerySource<'Result, 'Q> = QuerySource (Seq.collect (fun x -> (body x).Source) source.Source) - member __.Zero () = + member _.Zero () = QuerySource Seq.empty - member __.Yield value = + member _.Yield value = QuerySource (Seq.singleton value) - member __.YieldFrom (computation: QuerySource<'T, 'Q>) : QuerySource<'T, 'Q> = + member _.YieldFrom (computation: QuerySource<'T, 'Q>) : QuerySource<'T, 'Q> = computation // Indicates to the F# compiler that an implicit quotation is added to use of 'query' - member __.Quote (quotation: Quotations.Expr<'T>) = + member _.Quote (quotation: Quotations.Expr<'T>) = quotation - member __.Source (source: IQueryable<'T>) = + member _.Source (source: IQueryable<'T>) = QuerySource source - member __.Source (source: IEnumerable<'T>) : QuerySource<'T, System.Collections.IEnumerable> = + member _.Source (source: IEnumerable<'T>) : QuerySource<'T, System.Collections.IEnumerable> = QuerySource source - member __.Contains (source: QuerySource<'T, 'Q>, key) = + member _.Contains (source: QuerySource<'T, 'Q>, key) = Enumerable.Contains(source.Source, key) - member __.Select (source: QuerySource<'T, 'Q>, projection) : QuerySource<'U, 'Q> = + member _.Select (source: QuerySource<'T, 'Q>, projection) : QuerySource<'U, 'Q> = QuerySource (Seq.map projection source.Source) - member __.Where (source: QuerySource<'T, 'Q>, predicate) : QuerySource<'T, 'Q> = + member _.Where (source: QuerySource<'T, 'Q>, predicate) : QuerySource<'T, 'Q> = QuerySource (Enumerable.Where (source.Source, Func<_, _>(predicate)) ) - member __.Last (source: QuerySource<'T, 'Q>) = + member _.Last (source: QuerySource<'T, 'Q>) = Enumerable.Last source.Source - member __.LastOrDefault (source: QuerySource<'T, 'Q>) = + member _.LastOrDefault (source: QuerySource<'T, 'Q>) = Enumerable.LastOrDefault source.Source - member __.ExactlyOne (source: QuerySource<'T, 'Q>) = + member _.ExactlyOne (source: QuerySource<'T, 'Q>) = Enumerable.Single source.Source - member __.ExactlyOneOrDefault (source: QuerySource<'T, 'Q>) = + member _.ExactlyOneOrDefault (source: QuerySource<'T, 'Q>) = Enumerable.SingleOrDefault source.Source - member __.Count (source: QuerySource<'T, 'Q>) = + member _.Count (source: QuerySource<'T, 'Q>) = Enumerable.Count source.Source - member __.Distinct (source: QuerySource<'T, 'Q> when 'T : equality) : QuerySource<'T, 'Q> = + member _.Distinct (source: QuerySource<'T, 'Q> when 'T : equality) : QuerySource<'T, 'Q> = QuerySource (Enumerable.Distinct source.Source) - member __.Exists(source: QuerySource<'T, 'Q>, predicate) = + member _.Exists(source: QuerySource<'T, 'Q>, predicate) = Enumerable.Any (source.Source, Func<_, _>(predicate)) - member __.All (source: QuerySource<'T, 'Q>, predicate) = + member _.All (source: QuerySource<'T, 'Q>, predicate) = Enumerable.All (source.Source, Func<_, _>(predicate)) - member __.Head (source: QuerySource<'T, 'Q>) = + member _.Head (source: QuerySource<'T, 'Q>) = Enumerable.First source.Source - member __.Nth (source: QuerySource<'T, 'Q>, index) = + member _.Nth (source: QuerySource<'T, 'Q>, index) = Enumerable.ElementAt (source.Source, index) - member __.Skip (source: QuerySource<'T, 'Q>, count) : QuerySource<'T, 'Q> = + member _.Skip (source: QuerySource<'T, 'Q>, count) : QuerySource<'T, 'Q> = QuerySource (Enumerable.Skip (source.Source, count)) - member __.SkipWhile (source: QuerySource<'T, 'Q>, predicate) : QuerySource<'T, 'Q> = + member _.SkipWhile (source: QuerySource<'T, 'Q>, predicate) : QuerySource<'T, 'Q> = QuerySource (Enumerable.SkipWhile (source.Source, Func<_, _>(predicate))) - member __.Take (source: QuerySource<'T, 'Q>, count) : QuerySource<'T, 'Q> = + member _.Take (source: QuerySource<'T, 'Q>, count) : QuerySource<'T, 'Q> = QuerySource (Enumerable.Take (source.Source, count)) - member __.TakeWhile (source: QuerySource<'T, 'Q>, predicate) : QuerySource<'T, 'Q> = + member _.TakeWhile (source: QuerySource<'T, 'Q>, predicate) : QuerySource<'T, 'Q> = QuerySource (Enumerable.TakeWhile (source.Source, Func<_, _>(predicate))) - member __.Find (source: QuerySource<'T, 'Q>, predicate) = + member _.Find (source: QuerySource<'T, 'Q>, predicate) = Enumerable.First (source.Source, Func<_, _>(predicate)) - member __.HeadOrDefault (source: QuerySource<'T, 'Q>) = + member _.HeadOrDefault (source: QuerySource<'T, 'Q>) = Enumerable.FirstOrDefault source.Source - member __.MinBy<'T, 'Q, 'Key when 'Key: equality and 'Key: comparison> (source: QuerySource<'T, 'Q>, valueSelector: 'T -> 'Key) = + member _.MinBy<'T, 'Q, 'Key when 'Key: equality and 'Key: comparison> (source: QuerySource<'T, 'Q>, valueSelector: 'T -> 'Key) = Enumerable.Min(source.Source, Func<'T, 'Key>(valueSelector)) - member __.MaxBy<'T, 'Q, 'Key when 'Key: equality and 'Key: comparison> (source: QuerySource<'T, 'Q>, valueSelector: 'T -> 'Key) = + member _.MaxBy<'T, 'Q, 'Key when 'Key: equality and 'Key: comparison> (source: QuerySource<'T, 'Q>, valueSelector: 'T -> 'Key) = Enumerable.Max(source.Source, Func<'T, 'Key>(valueSelector)) - member __.MinByNullable<'T, 'Q, 'Key when 'Key: equality and 'Key: comparison and 'Key: (new: unit -> 'Key) and 'Key: struct and 'Key:> ValueType> (source: QuerySource<'T, 'Q>, valueSelector: 'T -> Nullable<'Key>) = + member _.MinByNullable<'T, 'Q, 'Key when 'Key: equality and 'Key: comparison and 'Key: (new: unit -> 'Key) and 'Key: struct and 'Key:> ValueType> (source: QuerySource<'T, 'Q>, valueSelector: 'T -> Nullable<'Key>) = Enumerable.Min(source.Source, Func<'T, Nullable<'Key>>(valueSelector)) - member __.MaxByNullable<'T, 'Q, 'Key when 'Key: equality and 'Key: comparison and 'Key: (new: unit -> 'Key) and 'Key: struct and 'Key:> ValueType> (source: QuerySource<'T, 'Q>, valueSelector: 'T -> Nullable<'Key>) = + member _.MaxByNullable<'T, 'Q, 'Key when 'Key: equality and 'Key: comparison and 'Key: (new: unit -> 'Key) and 'Key: struct and 'Key:> ValueType> (source: QuerySource<'T, 'Q>, valueSelector: 'T -> Nullable<'Key>) = Enumerable.Max(source.Source, Func<'T, Nullable<'Key>>(valueSelector)) - member inline __.SumByNullable<'T, 'Q, ^Value + member inline _.SumByNullable<'T, 'Q, ^Value when ^Value :> ValueType and ^Value : struct and ^Value : (new : unit -> ^Value) @@ -160,7 +160,7 @@ type QueryBuilder() = acc <- plus acc (v.Value : ^Value) Nullable acc - member inline __.AverageByNullable< 'T, 'Q, ^Value + member inline _.AverageByNullable< 'T, 'Q, ^Value when ^Value :> ValueType and ^Value : struct and ^Value : (new : unit -> ^Value) @@ -183,7 +183,7 @@ type QueryBuilder() = count <- count + 1 if count = 0 then Nullable() else Nullable(LanguagePrimitives.DivideByInt< (^Value) > acc count) - member inline __.AverageBy< 'T, 'Q, ^Value + member inline _.AverageBy< 'T, 'Q, ^Value when ^Value : (static member ( + ) : ^Value * ^Value -> ^Value) and ^Value : (static member DivideByInt : ^Value * int -> ^Value) and ^Value : (static member Zero : ^Value) @@ -202,7 +202,7 @@ type QueryBuilder() = invalidOp "source" LanguagePrimitives.DivideByInt< (^U) > acc count - member inline __.SumBy< 'T, 'Q, ^Value + member inline _.SumBy< 'T, 'Q, ^Value when ^Value : (static member ( + ) : ^Value * ^Value -> ^Value) and ^Value : (static member Zero : ^Value) and default ^Value : int > @@ -210,54 +210,54 @@ type QueryBuilder() = Seq.sumBy projection source.Source - member __.GroupBy (source: QuerySource<'T, 'Q>, keySelector: _ -> 'Key) : QuerySource<_, 'Q> when 'Key : equality = + member _.GroupBy (source: QuerySource<'T, 'Q>, keySelector: _ -> 'Key) : QuerySource<_, 'Q> when 'Key : equality = QuerySource (Enumerable.GroupBy(source.Source, Func<_, _>(keySelector))) - member __.SortBy (source: QuerySource<'T, 'Q>, keySelector: 'T -> 'Key) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = + member _.SortBy (source: QuerySource<'T, 'Q>, keySelector: 'T -> 'Key) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = QuerySource (Enumerable.OrderBy(source.Source, Func<_, _>(keySelector))) - member __.SortByDescending (source: QuerySource<'T, 'Q>, keySelector: 'T -> 'Key) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = + member _.SortByDescending (source: QuerySource<'T, 'Q>, keySelector: 'T -> 'Key) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = QuerySource (Enumerable.OrderByDescending(source.Source, Func<_, _>(keySelector))) - member __.ThenBy (source: QuerySource<'T, 'Q>, keySelector: 'T -> 'Key) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = + member _.ThenBy (source: QuerySource<'T, 'Q>, keySelector: 'T -> 'Key) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = QuerySource (Enumerable.ThenBy(checkThenBySource source.Source, Func<_, _>(keySelector))) - member __.ThenByDescending (source: QuerySource<'T, 'Q>, keySelector: 'T -> 'Key) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = + member _.ThenByDescending (source: QuerySource<'T, 'Q>, keySelector: 'T -> 'Key) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = QuerySource (Enumerable.ThenByDescending(checkThenBySource source.Source, Func<_, _>(keySelector))) - member __.SortByNullable (source: QuerySource<'T, 'Q>, keySelector: 'T -> Nullable<'Key>) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = + member _.SortByNullable (source: QuerySource<'T, 'Q>, keySelector: 'T -> Nullable<'Key>) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = QuerySource (Enumerable.OrderBy(source.Source, Func<_, _>(keySelector))) - member __.SortByNullableDescending (source: QuerySource<'T, 'Q>, keySelector: 'T -> Nullable<'Key>) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = + member _.SortByNullableDescending (source: QuerySource<'T, 'Q>, keySelector: 'T -> Nullable<'Key>) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = QuerySource (Enumerable.OrderByDescending(source.Source, Func<_, _>(keySelector))) - member __.ThenByNullable (source: QuerySource<'T, 'Q>, keySelector: 'T -> Nullable<'Key>) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = + member _.ThenByNullable (source: QuerySource<'T, 'Q>, keySelector: 'T -> Nullable<'Key>) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = QuerySource (Enumerable.ThenBy(checkThenBySource source.Source, Func<_, _>(keySelector))) - member __.ThenByNullableDescending (source: QuerySource<'T, 'Q>, keySelector: 'T -> Nullable<'Key>) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = + member _.ThenByNullableDescending (source: QuerySource<'T, 'Q>, keySelector: 'T -> Nullable<'Key>) : QuerySource<'T, 'Q> when 'Key : equality and 'Key : comparison = QuerySource (Enumerable.ThenByDescending(checkThenBySource source.Source, Func<_, _>(keySelector))) - member __.GroupValBy<'T, 'Key, 'Result, 'Q when 'Key : equality > (source: QuerySource<'T, 'Q>, resultSelector: 'T -> 'Result, keySelector: 'T -> 'Key) : QuerySource, 'Q> = + member _.GroupValBy<'T, 'Key, 'Result, 'Q when 'Key : equality > (source: QuerySource<'T, 'Q>, resultSelector: 'T -> 'Result, keySelector: 'T -> 'Key) : QuerySource, 'Q> = QuerySource (Enumerable.GroupBy(source.Source, Func<'T, 'Key>(keySelector), Func<'T, 'Result>(resultSelector))) - member __.Join (outerSource: QuerySource<_, 'Q>, innerSource: QuerySource<_, 'Q>, outerKeySelector, innerKeySelector, resultSelector) : QuerySource<_, 'Q> = + member _.Join (outerSource: QuerySource<_, 'Q>, innerSource: QuerySource<_, 'Q>, outerKeySelector, innerKeySelector, resultSelector) : QuerySource<_, 'Q> = QuerySource (Enumerable.Join(outerSource.Source, innerSource.Source, Func<_, _>(outerKeySelector), Func<_, _>(innerKeySelector), Func<_, _, _>(resultSelector))) - member __.GroupJoin (outerSource: QuerySource<_, 'Q>, innerSource: QuerySource<_, 'Q>, outerKeySelector, innerKeySelector, resultSelector: _ -> seq<_> -> _) : QuerySource<_, 'Q> = + member _.GroupJoin (outerSource: QuerySource<_, 'Q>, innerSource: QuerySource<_, 'Q>, outerKeySelector, innerKeySelector, resultSelector: _ -> seq<_> -> _) : QuerySource<_, 'Q> = QuerySource (Enumerable.GroupJoin(outerSource.Source, innerSource.Source, Func<_, _>(outerKeySelector), Func<_, _>(innerKeySelector), Func<_, _, _>(fun x g -> resultSelector x g))) - member __.LeftOuterJoin (outerSource: QuerySource<_, 'Q>, innerSource: QuerySource<_, 'Q>, outerKeySelector, innerKeySelector, resultSelector: _ -> seq<_> -> _) : QuerySource<_, 'Q> = + member _.LeftOuterJoin (outerSource: QuerySource<_, 'Q>, innerSource: QuerySource<_, 'Q>, outerKeySelector, innerKeySelector, resultSelector: _ -> seq<_> -> _) : QuerySource<_, 'Q> = QuerySource (Enumerable.GroupJoin(outerSource.Source, innerSource.Source, Func<_, _>(outerKeySelector), Func<_, _>(innerKeySelector), Func<_, _, _>(fun x g -> resultSelector x (g.DefaultIfEmpty())))) - member __.RunQueryAsValue (q: Quotations.Expr<'T>) : 'T = + member _.RunQueryAsValue (q: Quotations.Expr<'T>) : 'T = ForwardDeclarations.Query.Execute q - member __.RunQueryAsEnumerable (q: Quotations.Expr>) : IEnumerable<'T> = + member _.RunQueryAsEnumerable (q: Quotations.Expr>) : IEnumerable<'T> = let queryAfterEliminatingNestedQueries = ForwardDeclarations.Query.EliminateNestedQueries q let queryAfterCleanup = Microsoft.FSharp.Linq.RuntimeHelpers.Adapters.CleanupLeaf queryAfterEliminatingNestedQueries (LeafExpressionConverter.EvaluateQuotation queryAfterCleanup :?> QuerySource<'T, IEnumerable>).Source - member __.RunQueryAsQueryable (q: Quotations.Expr>) : IQueryable<'T> = + member _.RunQueryAsQueryable (q: Quotations.Expr>) : IQueryable<'T> = ForwardDeclarations.Query.Execute q member this.Run q = this.RunQueryAsQueryable q diff --git a/src/fsharp/FSharp.Core/async.fs b/src/fsharp/FSharp.Core/async.fs index 4224440e6f1..0d5abef0333 100644 --- a/src/fsharp/FSharp.Core/async.fs +++ b/src/fsharp/FSharp.Core/async.fs @@ -92,7 +92,7 @@ namespace Microsoft.FSharp.Control /// Use this trampoline on the synchronous stack if none exists, and execute /// the given function. The function might write its continuation into the trampoline. [] - member __.Execute (firstAction: unit -> AsyncReturn) = + member _.Execute (firstAction: unit -> AsyncReturn) = let thisThreadHadTrampoline = Trampoline.thisThreadHasTrampoline Trampoline.thisThreadHasTrampoline <- true @@ -124,19 +124,19 @@ namespace Microsoft.FSharp.Control /// Increment the counter estimating the size of the synchronous stack and /// return true if time to jump on trampoline. - member __.IncrementBindCount() = + member _.IncrementBindCount() = bindCount <- bindCount + 1 bindCount >= bindLimitBeforeHijack /// Prepare to abandon the synchronous stack of the current execution and save the continuation in the trampoline. - member __.Set action = + member _.Set action = assert storedCont.IsNone bindCount <- 0 storedCont <- Some action AsyncReturn.Fake() /// Save the exception continuation during propagation of an exception, or prior to raising an exception - member __.OnExceptionRaised (action: econt) = + member _.OnExceptionRaised (action: econt) = assert storedExnCont.IsNone storedExnCont <- Some action @@ -164,7 +164,7 @@ namespace Microsoft.FSharp.Control /// Execute an async computation after installing a trampoline on its synchronous stack. [] - member __.ExecuteWithTrampoline firstAction = + member _.ExecuteWithTrampoline firstAction = trampoline <- Trampoline() trampoline.Execute firstAction @@ -183,16 +183,16 @@ namespace Microsoft.FSharp.Control | _ -> this.PostWithTrampoline syncCtxt f // This should be the only call to Thread.Start in this library. We must always install a trampoline. - member __.StartThreadWithTrampoline (f: unit -> AsyncReturn) = + member _.StartThreadWithTrampoline (f: unit -> AsyncReturn) = Thread(threadStartCallbackForStartThreadWithTrampoline, IsBackground=true).Start(f|>box) AsyncReturn.Fake() /// Save the exception continuation during propagation of an exception, or prior to raising an exception - member inline __.OnExceptionRaised econt = + member inline _.OnExceptionRaised econt = trampoline.OnExceptionRaised econt /// Call a continuation, but first check if an async computation should trampoline on its synchronous stack. - member inline __.HijackCheckThenCall (cont: 'T -> AsyncReturn) res = + member inline _.HijackCheckThenCall (cont: 'T -> AsyncReturn) res = if trampoline.IncrementBindCount() then trampoline.Set (fun () -> cont res) else @@ -643,7 +643,7 @@ namespace Microsoft.FSharp.Control let trampolineHolder = ctxt.trampolineHolder - member __.ContinueImmediate res = + member _.ContinueImmediate res = let action () = ctxt.cont res let inline executeImmediately () = trampolineHolder.ExecuteWithTrampoline action let currentSyncCtxt = SynchronizationContext.Current @@ -657,7 +657,7 @@ namespace Microsoft.FSharp.Control | _ -> trampolineHolder.PostOrQueueWithTrampoline syncCtxt action - member __.ContinueWithPostOrQueue res = + member _.ContinueWithPostOrQueue res = trampolineHolder.PostOrQueueWithTrampoline syncCtxt (fun () -> ctxt.cont res) /// A utility type to provide a synchronization point between an asynchronous computation @@ -800,7 +800,7 @@ namespace Microsoft.FSharp.Control /// Create an instance of an arbitrary delegate type delegating to the given F# function type FuncDelegate<'T>(f) = - member __.Invoke(sender:obj, a:'T) : unit = ignore sender; f a + member _.Invoke(sender:obj, a:'T) : unit = ignore sender; f a static member Create<'Delegate when 'Delegate :> Delegate>(f) = let obj = FuncDelegate<'T>(f) let invokeMeth = (typeof>).GetMethod("Invoke", BindingFlags.Public ||| BindingFlags.NonPublic ||| BindingFlags.Instance) @@ -871,11 +871,9 @@ namespace Microsoft.FSharp.Control [] let RunSynchronously cancellationToken (computation: Async<'T>) timeout = - // Reuse the current ThreadPool thread if possible. Unfortunately - // Thread.IsThreadPoolThread isn't available on all profiles so - // we approximate it by testing synchronization context for null. - match SynchronizationContext.Current, timeout with - | null, None -> RunSynchronouslyInCurrentThread (cancellationToken, computation) + // Reuse the current ThreadPool thread if possible. + match Thread.CurrentThread.IsThreadPoolThread, timeout with + | true, None -> RunSynchronouslyInCurrentThread (cancellationToken, computation) // When the timeout is given we need a dedicated thread // which cancels the computation. // Performing the cancellation in the ThreadPool eg. by using @@ -925,42 +923,44 @@ namespace Microsoft.FSharp.Control // Helper to attach continuation to the given task. [] - let taskContinueWith (task: Task<'T>) (ctxt: AsyncActivation<'T>) useCcontForTaskCancellation = + let taskContinueWith (task: Task<'T>) (ctxt: AsyncActivation<'T>) = let continuation (completedTask: Task<_>) : unit = ctxt.trampolineHolder.ExecuteWithTrampoline (fun () -> if completedTask.IsCanceled then - if useCcontForTaskCancellation then - ctxt.OnCancellation () - else - let edi = ExceptionDispatchInfo.Capture(TaskCanceledException completedTask) - ctxt.econt edi + let edi = ExceptionDispatchInfo.Capture(TaskCanceledException completedTask) + ctxt.econt edi elif completedTask.IsFaulted then let edi = ExceptionDispatchInfo.RestoreOrCapture completedTask.Exception ctxt.econt edi else ctxt.cont completedTask.Result) |> unfake - task.ContinueWith(Action>(continuation)) |> ignore |> fake + if task.IsCompleted then + continuation task |> fake + else + task.ContinueWith(Action>(continuation), TaskContinuationOptions.ExecuteSynchronously) + |> ignore |> fake [] - let taskContinueWithUnit (task: Task) (ctxt: AsyncActivation) useCcontForTaskCancellation = + let taskContinueWithUnit (task: Task) (ctxt: AsyncActivation) = let continuation (completedTask: Task) : unit = ctxt.trampolineHolder.ExecuteWithTrampoline (fun () -> if completedTask.IsCanceled then - if useCcontForTaskCancellation then - ctxt.OnCancellation () - else - let edi = ExceptionDispatchInfo.Capture(TaskCanceledException(completedTask)) - ctxt.econt edi + let edi = ExceptionDispatchInfo.Capture(TaskCanceledException(completedTask)) + ctxt.econt edi elif completedTask.IsFaulted then let edi = ExceptionDispatchInfo.RestoreOrCapture completedTask.Exception ctxt.econt edi else ctxt.cont ()) |> unfake - task.ContinueWith(Action(continuation)) |> ignore |> fake + if task.IsCompleted then + continuation task |> fake + else + task.ContinueWith(Action(continuation), TaskContinuationOptions.ExecuteSynchronously) + |> ignore |> fake [] type AsyncIAsyncResult<'T>(callback: System.AsyncCallback, state:obj) = @@ -1047,29 +1047,29 @@ namespace Microsoft.FSharp.Control [] type AsyncBuilder() = - member __.Zero () = unitAsync + member _.Zero () = unitAsync - member __.Delay generator = CreateDelayAsync generator + member _.Delay generator = CreateDelayAsync generator - member inline __.Return value = CreateReturnAsync value + member inline _.Return value = CreateReturnAsync value - member inline __.ReturnFrom (computation:Async<_>) = computation + member inline _.ReturnFrom (computation:Async<_>) = computation - member inline __.Bind (computation, binder) = CreateBindAsync computation binder + member inline _.Bind (computation, binder) = CreateBindAsync computation binder - member __.Using (resource, binder) = CreateUsingAsync resource binder + member _.Using (resource, binder) = CreateUsingAsync resource binder - member __.While (guard, computation) = CreateWhileAsync guard computation + member _.While (guard, computation) = CreateWhileAsync guard computation - member __.For (sequence, body) = CreateForLoopAsync sequence body + member _.For (sequence, body) = CreateForLoopAsync sequence body - member inline __.Combine (computation1, computation2) = CreateSequentialAsync computation1 computation2 + member inline _.Combine (computation1, computation2) = CreateSequentialAsync computation1 computation2 - member inline __.TryFinally (computation, compensation) = CreateTryFinallyAsync compensation computation + member inline _.TryFinally (computation, compensation) = CreateTryFinallyAsync compensation computation - member inline __.TryWith (computation, catchHandler) = CreateTryWithAsync catchHandler computation + member inline _.TryWith (computation, catchHandler) = CreateTryWithAsync catchHandler computation - // member inline __.TryWithFilter (computation, catchHandler) = CreateTryWithFilterAsync catchHandler computation + // member inline _.TryWithFilter (computation, catchHandler) = CreateTryWithFilterAsync catchHandler computation [] module AsyncBuilderImpl = @@ -1692,10 +1692,16 @@ namespace Microsoft.FSharp.Control CreateWhenCancelledAsync compensation computation static member AwaitTask (task:Task<'T>) : Async<'T> = - CreateDelimitedUserCodeAsync (fun ctxt -> taskContinueWith task ctxt false) + if task.IsCompleted then + CreateProtectedAsync (fun ctxt -> taskContinueWith task ctxt) + else + CreateDelimitedUserCodeAsync (fun ctxt -> taskContinueWith task ctxt) static member AwaitTask (task:Task) : Async = - CreateDelimitedUserCodeAsync (fun ctxt -> taskContinueWithUnit task ctxt false) + if task.IsCompleted then + CreateProtectedAsync (fun ctxt -> taskContinueWithUnit task ctxt) + else + CreateDelimitedUserCodeAsync (fun ctxt -> taskContinueWithUnit task ctxt) module CommonExtensions = diff --git a/src/fsharp/FSharp.Core/async.fsi b/src/fsharp/FSharp.Core/async.fsi index 0d2a1867fa5..a49c75d8ec2 100644 --- a/src/fsharp/FSharp.Core/async.fsi +++ b/src/fsharp/FSharp.Core/async.fsi @@ -365,6 +365,17 @@ namespace Microsoft.FSharp.Control /// /// The task to await. /// + /// If an exception occurs in the asynchronous computation then an exception is re-raised by this + /// function. + /// + /// If the task is cancelled then is raised. Note + /// that the task may be governed by a different cancellation token to the overall async computation + /// where the AwaitTask occurs. In practice you should normally start the task with the + /// cancellation token returned by let! ct = Async.CancellationToken, and catch + /// any at the point where the + /// overall async is started. + /// + /// /// Awaiting Results static member AwaitTask: task: Task<'T> -> Async<'T> @@ -373,6 +384,17 @@ namespace Microsoft.FSharp.Control /// /// The task to await. /// + /// If an exception occurs in the asynchronous computation then an exception is re-raised by this + /// function. + /// + /// If the task is cancelled then is raised. Note + /// that the task may be governed by a different cancellation token to the overall async computation + /// where the AwaitTask occurs. In practice you should normally start the task with the + /// cancellation token returned by let! ct = Async.CancellationToken, and catch + /// any at the point where the + /// overall async is started. + /// + /// /// Awaiting Results static member AwaitTask: task: Task -> Async diff --git a/src/fsharp/FSharp.Core/collections.fs b/src/fsharp/FSharp.Core/collections.fs index 547fe99fd54..f15cb4894a3 100644 --- a/src/fsharp/FSharp.Core/collections.fs +++ b/src/fsharp/FSharp.Core/collections.fs @@ -19,19 +19,19 @@ namespace Microsoft.FSharp.Collections let Reference<'T when 'T : not struct > : IEqualityComparer<'T> = { new IEqualityComparer<'T> with - member __.GetHashCode(x) = LanguagePrimitives.PhysicalHash(x) - member __.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 __.GetHashCode(x) = NonStructuralComparison.hash x - member __.Equals(x, y) = NonStructuralComparison.(=) x y } + member _.GetHashCode(x) = NonStructuralComparison.hash x + member _.Equals(x, y) = NonStructuralComparison.(=) x y } let inline FromFunctions hasher equality : IEqualityComparer<'T> = let eq = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(equality) { new IEqualityComparer<'T> with - member __.GetHashCode(x) = hasher x - member __.Equals(x,y) = eq.Invoke(x,y) } + member _.GetHashCode(x) = hasher x + member _.Equals(x,y) = eq.Invoke(x,y) } module ComparisonIdentity = @@ -41,10 +41,10 @@ namespace Microsoft.FSharp.Collections 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 __.Compare(x,y) = NonStructuralComparison.compare x y } + member _.Compare(x,y) = NonStructuralComparison.compare x y } let FromFunction comparer = let comparer = OptimizedClosures.FSharpFunc<'T,'T,int>.Adapt(comparer) { new IComparer<'T> with - member __.Compare(x,y) = comparer.Invoke(x,y) } + member _.Compare(x,y) = comparer.Invoke(x,y) } diff --git a/src/fsharp/FSharp.Core/event.fs b/src/fsharp/FSharp.Core/event.fs index d14eea26904..8e1d0826f33 100644 --- a/src/fsharp/FSharp.Core/event.fs +++ b/src/fsharp/FSharp.Core/event.fs @@ -10,6 +10,19 @@ namespace Microsoft.FSharp.Control open Microsoft.FSharp.Control open System.Reflection open System.Diagnostics + + module private Atomic = + open System.Threading + + let inline setWith (thunk: 'a -> 'a) (value: byref<'a>) = + let mutable exchanged = false + let mutable oldValue = value + while not exchanged do + let comparand = oldValue + let newValue = thunk comparand + oldValue <- Interlocked.CompareExchange(&value, newValue, comparand) + if obj.ReferenceEquals(comparand, oldValue) then + exchanged <- true [] type DelegateEvent<'Delegate when 'Delegate :> System.Delegate>() = @@ -21,9 +34,9 @@ namespace Microsoft.FSharp.Control member x.Publish = { new IDelegateEvent<'Delegate> with member x.AddHandler(d) = - multicast <- System.Delegate.Combine(multicast, d) - member x.RemoveHandler(d) = - multicast <- System.Delegate.Remove(multicast, d) } + Atomic.setWith (fun value -> System.Delegate.Combine(value, d)) &multicast + member x.RemoveHandler(d) = + Atomic.setWith (fun value -> System.Delegate.Remove(value, d)) &multicast } type EventDelegee<'Args>(observer: System.IObserver<'Args>) = static let makeTuple = @@ -54,7 +67,7 @@ namespace Microsoft.FSharp.Control type EventWrapper<'Delegate,'Args> = delegate of 'Delegate * obj * 'Args -> unit [] - type Event<'Delegate, 'Args when 'Delegate : delegate<'Args, unit> and 'Delegate :> System.Delegate>() = + type Event<'Delegate, 'Args when 'Delegate : delegate<'Args, unit> and 'Delegate :> System.Delegate and 'Delegate: not struct>() = let mutable multicast : 'Delegate = Unchecked.defaultof<_> @@ -85,6 +98,8 @@ namespace Microsoft.FSharp.Control mi member x.Trigger(sender:obj,args: 'Args) = + // Copy multicast value into local variable to avoid changing during member call. + let multicast = multicast match box multicast with | null -> () | _ -> @@ -102,9 +117,9 @@ namespace Microsoft.FSharp.Control member x.ToString() = "" interface IEvent<'Delegate,'Args> with member e.AddHandler(d) = - multicast <- System.Delegate.Combine(multicast, d) :?> 'Delegate + Atomic.setWith (fun value -> System.Delegate.Combine(value, d) :?> 'Delegate) &multicast member e.RemoveHandler(d) = - multicast <- System.Delegate.Remove(multicast, d) :?> 'Delegate + Atomic.setWith (fun value -> System.Delegate.Remove(value, d) :?> 'Delegate) &multicast interface System.IObservable<'Args> with member e.Subscribe(observer) = let obj = new EventDelegee<'Args>(observer) @@ -128,9 +143,9 @@ namespace Microsoft.FSharp.Control member x.ToString() = "" interface IEvent<'T> with member e.AddHandler(d) = - x.multicast <- (System.Delegate.Combine(x.multicast, d) :?> Handler<'T>) + Atomic.setWith (fun value -> System.Delegate.Combine(value, d) :?> Handler<'T>) &x.multicast member e.RemoveHandler(d) = - x.multicast <- (System.Delegate.Remove(x.multicast, d) :?> Handler<'T>) + Atomic.setWith (fun value -> System.Delegate.Remove(value, d) :?> Handler<'T>) &x.multicast interface System.IObservable<'T> with member e.Subscribe(observer) = let h = new Handler<_>(fun sender args -> observer.OnNext(args)) diff --git a/src/fsharp/FSharp.Core/event.fsi b/src/fsharp/FSharp.Core/event.fsi index 855a259121b..fd6c23e0008 100644 --- a/src/fsharp/FSharp.Core/event.fsi +++ b/src/fsharp/FSharp.Core/event.fsi @@ -26,7 +26,7 @@ namespace Microsoft.FSharp.Control /// /// Events and Observables [] - type Event<'Delegate,'Args when 'Delegate : delegate<'Args,unit> and 'Delegate :> System.Delegate > = + type Event<'Delegate,'Args when 'Delegate : delegate<'Args,unit> and 'Delegate :> System.Delegate and 'Delegate : not struct> = /// Creates an event object suitable for delegate types following the standard .NET Framework convention of a first 'sender' argument. /// The created event. new : unit -> Event<'Delegate,'Args> diff --git a/src/fsharp/FSharp.Core/fslib-extra-pervasives.fs b/src/fsharp/FSharp.Core/fslib-extra-pervasives.fs index b3fa821511a..7d05c29b497 100644 --- a/src/fsharp/FSharp.Core/fslib-extra-pervasives.fs +++ b/src/fsharp/FSharp.Core/fslib-extra-pervasives.fs @@ -81,16 +81,16 @@ module ExtraTopLevelOperators = member s.Remove(_ : 'Key) = (raise (NotSupportedException(SR.GetString(SR.thisValueCannotBeMutated))) : bool) interface IReadOnlyDictionary<'Key, 'T> with - member __.Item with get key = t.[makeSafeKey key] - member __.Keys = t.Keys |> Seq.map getKey - member __.TryGetValue(key, r) = + member _.Item with get key = t.[makeSafeKey key] + member _.Keys = t.Keys |> Seq.map getKey + member _.TryGetValue(key, r) = match t.TryGetValue (makeSafeKey key) with | false, _ -> false | true, value -> r <- value true - member __.Values = (t :> IReadOnlyDictionary<_,_>).Values - member __.ContainsKey k = t.ContainsKey (makeSafeKey k) + member _.Values = (t :> IReadOnlyDictionary<_,_>).Values + member _.ContainsKey k = t.ContainsKey (makeSafeKey k) interface ICollection> with member s.Add(_) = raise (NotSupportedException(SR.GetString(SR.thisValueCannotBeMutated))) @@ -106,7 +106,7 @@ module ExtraTopLevelOperators = member s.Count = t.Count interface IReadOnlyCollection> with - member __.Count = t.Count + member _.Count = t.Count interface IEnumerable> with member s.GetEnumerator() = @@ -128,15 +128,15 @@ module ExtraTopLevelOperators = kvps.[index] {new IEnumerator<_> with - member __.Current = current () + member _.Current = current () interface System.Collections.IEnumerator with - member __.Current = box(current()) - member __.MoveNext() = + member _.Current = box(current()) + member _.MoveNext() = if index < endIndex then index <- index + 1 index < endIndex else false - member __.Reset() = index <- -1 + member _.Reset() = index <- -1 interface System.IDisposable with member self.Dispose() = () } #endif @@ -306,12 +306,12 @@ namespace Microsoft.FSharp.Core.CompilerServices type TypeProviderAssemblyAttribute(assemblyName : string) = inherit System.Attribute() new () = TypeProviderAssemblyAttribute(null) - member __.AssemblyName = assemblyName + member _.AssemblyName = assemblyName [] type TypeProviderXmlDocAttribute(commentText: string) = inherit System.Attribute() - member __.CommentText = commentText + member _.CommentText = commentText [] type TypeProviderDefinitionLocationAttribute() = diff --git a/src/fsharp/FSharp.Core/list.fs b/src/fsharp/FSharp.Core/list.fs index 920f0f0d9ff..9f7e4dbbb8f 100644 --- a/src/fsharp/FSharp.Core/list.fs +++ b/src/fsharp/FSharp.Core/list.fs @@ -42,11 +42,7 @@ namespace Microsoft.FSharp.Collections [] let concat lists = Microsoft.FSharp.Primitives.Basics.List.concat lists - let inline countByImpl (comparer:IEqualityComparer<'SafeKey>) (projection:'T->'SafeKey) (getKey:'SafeKey->'Key) (list:'T list) = - match list with - | [] -> [] - | _ -> - + let inline countByImpl (comparer:IEqualityComparer<'SafeKey>) (projection:'T->'SafeKey) (getKey:'SafeKey->'Key) (list:'T list) = let dict = Dictionary comparer let rec loop srcList = match srcList with @@ -67,9 +63,12 @@ namespace Microsoft.FSharp.Collections [] let countBy (projection:'T->'Key) (list:'T list) = - if typeof<'Key>.IsValueType - then countByValueType projection list - else countByRefType projection list + match list with + | [] -> [] + | _ -> + if typeof<'Key>.IsValueType + then countByValueType projection list + else countByRefType projection list [] let map mapping list = Microsoft.FSharp.Primitives.Basics.List.map mapping list @@ -440,9 +439,12 @@ namespace Microsoft.FSharp.Collections [] let groupBy (projection:'T->'Key) (list:'T list) = - if typeof<'Key>.IsValueType - then groupByValueType projection list - else groupByRefType projection list + match list with + | [] -> [] + | _ -> + if typeof<'Key>.IsValueType + then groupByValueType projection list + else groupByRefType projection list [] let partition predicate list = Microsoft.FSharp.Primitives.Basics.List.partition predicate list diff --git a/src/fsharp/FSharp.Core/local.fs b/src/fsharp/FSharp.Core/local.fs index 3d812fc72c4..e02cccb7494 100644 --- a/src/fsharp/FSharp.Core/local.fs +++ b/src/fsharp/FSharp.Core/local.fs @@ -194,10 +194,6 @@ module internal List = cons let groupBy (comparer:IEqualityComparer<'SafeKey>) (keyf:'T->'SafeKey) (getKey:'SafeKey->'Key) (list: 'T list) = - match list with - | [] -> [] - | _ -> - let dict = Dictionary<_, _ list []> comparer // Build the groupings @@ -1050,7 +1046,7 @@ module internal Array = let f = OptimizedClosures.FSharpFunc<_, _, _>.Adapt(f) let mutable acc = acc let res = zeroCreateUnchecked len - for i = 0 to array.Length-1 do + for i = 0 to len-1 do let h', s' = f.Invoke(acc, array.[i]) res.[i] <- h' acc <- s' @@ -1081,22 +1077,21 @@ module internal Array = let unstableSortInPlaceBy (projection: 'T -> 'U) (array : array<'T>) = let len = array.Length - if len < 2 then () - else - let keys = zeroCreateUnchecked array.Length - for i = 0 to array.Length - 1 do + if len > 1 then + let keys = zeroCreateUnchecked len + for i = 0 to len - 1 do keys.[i] <- projection array.[i] Array.Sort<_, _>(keys, array, fastComparerForArraySort()) let unstableSortInPlace (array : array<'T>) = - let len = array.Length - if len < 2 then () - else Array.Sort<_>(array, fastComparerForArraySort()) + if array.Length > 1 then + 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 - let places = zeroCreateUnchecked array.Length - for i = 0 to array.Length - 1 do + // 'places' is an array or integers storing the permutation performed by the sort + let len = array.Length + let places = zeroCreateUnchecked len + for i = 0 to len - 1 do places.[i] <- i System.Array.Sort<_, _>(keys, places, cFast) // 'array2' is a copy of the original values @@ -1104,7 +1099,6 @@ module internal Array = // Walk through any chunks where the keys are equal let mutable i = 0 - let len = array.Length let intCompare = fastComparerForArraySort() while i < len do @@ -1126,18 +1120,16 @@ module internal Array = let stableSortInPlaceBy (projection: 'T -> 'U) (array : array<'T>) = let len = array.Length - if len < 2 then () - else + if len > 1 then // 'keys' is an array storing the projected keys - let keys = zeroCreateUnchecked array.Length - for i = 0 to array.Length - 1 do + let keys = zeroCreateUnchecked len + for i = 0 to len - 1 do keys.[i] <- projection array.[i] stableSortWithKeys array keys let stableSortInPlace (array : array<'T>) = let len = array.Length - if len < 2 then () - else + if len > 1 then let cFast = LanguagePrimitives.FastGenericComparerCanBeNull<'T> match cFast with | null -> @@ -1154,7 +1146,7 @@ module internal Array = if len > 1 then let keys = (array.Clone() :?> array<'T>) let comparer = OptimizedClosures.FSharpFunc<_, _, _>.Adapt(comparer) - let c = { new IComparer<'T> with member __.Compare(x, y) = comparer.Invoke(x, y) } + let c = { new IComparer<'T> with member _.Compare(x, y) = comparer.Invoke(x, y) } stableSortWithKeysAndComparer c c array keys let inline subUnchecked startIndex count (array : 'T[]) = diff --git a/src/fsharp/FSharp.Core/mailbox.fs b/src/fsharp/FSharp.Core/mailbox.fs index b2bec129719..96782fa1e15 100644 --- a/src/fsharp/FSharp.Core/mailbox.fs +++ b/src/fsharp/FSharp.Core/mailbox.fs @@ -103,7 +103,7 @@ namespace Microsoft.FSharp.Control else waitOneWithCancellation timeout - member __.inbox = + member _.inbox = match inboxStore with | null -> inboxStore <- new System.Collections.Generic.List<'Msg>(1) | _ -> () @@ -311,7 +311,7 @@ namespace Microsoft.FSharp.Control } interface System.IDisposable with - member __.Dispose() = + member _.Dispose() = if isNotNull pulse then (pulse :> IDisposable).Dispose() #if DEBUG @@ -337,17 +337,17 @@ namespace Microsoft.FSharp.Control let mutable started = false let errorEvent = new Event() - member __.CurrentQueueLength = mailbox.CurrentQueueLength // nb. unprotected access gives an approximation of the queue length + member _.CurrentQueueLength = mailbox.CurrentQueueLength // nb. unprotected access gives an approximation of the queue length - member __.DefaultTimeout + member _.DefaultTimeout with get() = defaultTimeout and set v = defaultTimeout <- v [] - member __.Error = errorEvent.Publish + member _.Error = errorEvent.Publish #if DEBUG - member __.UnsafeMessageQueueContents = mailbox.UnsafeContents + member _.UnsafeMessageQueueContents = mailbox.UnsafeContents #endif member x.Start() = @@ -367,9 +367,9 @@ namespace Microsoft.FSharp.Control Async.Start(computation=p, cancellationToken=cancellationToken) - member __.Post message = mailbox.Post message + member _.Post message = mailbox.Post message - member __.TryPostAndReply(buildMessage : (_ -> 'Msg), ?timeout) : 'Reply option = + member _.TryPostAndReply(buildMessage : (_ -> 'Msg), ?timeout) : 'Reply option = let timeout = defaultArg timeout defaultTimeout use resultCell = new ResultCell<_>() let msg = buildMessage (new AsyncReplyChannel<_>(fun reply -> @@ -384,7 +384,7 @@ namespace Microsoft.FSharp.Control | None -> raise (TimeoutException(SR.GetString(SR.mailboxProcessorPostAndReplyTimedOut))) | Some res -> res - member __.PostAndTryAsyncReply(buildMessage, ?timeout) : Async<'Reply option> = + member _.PostAndTryAsyncReply(buildMessage, ?timeout) : Async<'Reply option> = let timeout = defaultArg timeout defaultTimeout let resultCell = new ResultCell<_>() let msg = buildMessage (new AsyncReplyChannel<_>(fun reply -> @@ -419,20 +419,20 @@ namespace Microsoft.FSharp.Control | None -> return! raise (TimeoutException(SR.GetString(SR.mailboxProcessorPostAndAsyncReplyTimedOut))) | Some res -> return res } - member __.Receive(?timeout) = + member _.Receive(?timeout) = mailbox.Receive(timeout=defaultArg timeout defaultTimeout) - member __.TryReceive(?timeout) = + member _.TryReceive(?timeout) = mailbox.TryReceive(timeout=defaultArg timeout defaultTimeout) - member __.Scan(scanner: 'Msg -> (Async<'T>) option, ?timeout) = + member _.Scan(scanner: 'Msg -> (Async<'T>) option, ?timeout) = mailbox.Scan(scanner, timeout=defaultArg timeout defaultTimeout) - member __.TryScan(scanner: 'Msg -> (Async<'T>) option, ?timeout) = + member _.TryScan(scanner: 'Msg -> (Async<'T>) option, ?timeout) = mailbox.TryScan(scanner, timeout=defaultArg timeout defaultTimeout) interface System.IDisposable with - member __.Dispose() = (mailbox :> IDisposable).Dispose() + member _.Dispose() = (mailbox :> IDisposable).Dispose() static member Start(body, ?cancellationToken) = let mailboxProcessor = new MailboxProcessor<'Msg>(body, ?cancellationToken=cancellationToken) diff --git a/src/fsharp/FSharp.Core/map.fs b/src/fsharp/FSharp.Core/map.fs index bbe38a40140..062bb1424da 100644 --- a/src/fsharp/FSharp.Core/map.fs +++ b/src/fsharp/FSharp.Core/map.fs @@ -5,25 +5,27 @@ namespace Microsoft.FSharp.Collections open System open System.Collections.Generic open System.Diagnostics +open System.Runtime.CompilerServices open System.Text open Microsoft.FSharp.Core open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators [] [] -type internal MapTree<'Key, 'Value>(k: 'Key, v: 'Value) = +type internal MapTree<'Key, 'Value>(k: 'Key, v: 'Value, h: int) = + member _.Height = h member _.Key = k member _.Value = v - + new(k: 'Key, v: 'Value) = MapTree(k,v,1) + [] [] [] type internal MapTreeNode<'Key, 'Value>(k:'Key, v:'Value, left:MapTree<'Key, 'Value>, right: MapTree<'Key, 'Value>, h: int) = - inherit MapTree<'Key,'Value>(k, v) - + inherit MapTree<'Key,'Value>(k, v, h) member _.Left = left member _.Right = right - member _.Height = h + [] module MapTree = @@ -32,14 +34,19 @@ module MapTree = let inline isEmpty (m:MapTree<'Key, 'Value>) = isNull m + let inline private asNode(value:MapTree<'Key,'Value>) : MapTreeNode<'Key,'Value> = + value :?> MapTreeNode<'Key,'Value> + let rec sizeAux acc (m:MapTree<'Key, 'Value>) = if isEmpty m then acc else - match m with - | :? MapTreeNode<'Key, 'Value> as mn -> sizeAux (sizeAux (acc+1) mn.Left) mn.Right - | _ -> acc + 1 - + if m.Height = 1 then + acc + 1 + else + let mn = asNode m + sizeAux (sizeAux (acc+1) mn.Left) mn.Right + let size x = sizeAux 0 x #if TRACE_SETS_AND_MAPS @@ -66,11 +73,11 @@ module MapTree = (totalSizeOnMapLookup / float numLookups)) System.Console.WriteLine("#largestMapSize = {0}, largestMapStackTrace = {1}", largestMapSize, largestMapStackTrace) - let MapTree n = + let MapTree (k,v) = report() numOnes <- numOnes + 1 totalSizeOnNodeCreation <- totalSizeOnNodeCreation + 1.0 - MapTree n + MapTree (k,v) let MapTreeNode (x, l, v, r, h) = report() @@ -82,10 +89,7 @@ module MapTree = let inline height (m: MapTree<'Key, 'Value>) = if isEmpty m then 0 - else - match m with - | :? MapTreeNode<'Key, 'Value> as mn -> mn.Height - | _ -> 1 + else m.Height [] let tolerance = 2 @@ -98,9 +102,6 @@ module MapTree = MapTree(k,v) else MapTreeNode(k,v,l,r,m+1) :> MapTree<'Key, 'Value> // new map is higher by 1 than the highest - - let inline private asNode(value:MapTree<'Key,'Value>) : MapTreeNode<'Key,'Value> = - value :?> MapTreeNode<'Key,'Value> let rebalance t1 (k: 'Key) (v: 'Value) t2 : MapTree<'Key, 'Value> = let t1h = height t1 @@ -129,33 +130,37 @@ module MapTree = if isEmpty m then MapTree(k,v) else let c = comparer.Compare(k,m.Key) - match m with - | :? MapTreeNode<'Key, 'Value> as mn -> - if c < 0 then rebalance (add comparer k v mn.Left) mn.Key mn.Value mn.Right - elif c = 0 then MapTreeNode(k,v,mn.Left,mn.Right,mn.Height) :> MapTree<'Key, 'Value> - else rebalance mn.Left mn.Key mn.Value (add comparer k v mn.Right) - | _ -> + if m.Height = 1 then if c < 0 then MapTreeNode (k,v,empty,m,2) :> MapTree<'Key, 'Value> elif c = 0 then MapTree(k,v) else MapTreeNode (k,v,m,empty,2) :> MapTree<'Key, 'Value> - + else + let mn = asNode m + if c < 0 then rebalance (add comparer k v mn.Left) mn.Key mn.Value mn.Right + elif c = 0 then MapTreeNode(k,v,mn.Left,mn.Right,mn.Height) :> MapTree<'Key, 'Value> + else rebalance mn.Left mn.Key mn.Value (add comparer k v mn.Right) + let rec tryGetValue (comparer: IComparer<'Key>) k (v: byref<'Value>) (m: MapTree<'Key, 'Value>) = if isEmpty m then false else let c = comparer.Compare(k, m.Key) if c = 0 then v <- m.Value; true else - match m with - | :? MapTreeNode<'Key, 'Value> as mn -> + if m.Height = 1 then false + else + let mn = asNode m tryGetValue comparer k &v (if c < 0 then mn.Left else mn.Right) - | _ -> false - + + [] + let throwKeyNotFound() = raise (KeyNotFoundException()) + + [] let find (comparer: IComparer<'Key>) k (m: MapTree<'Key, 'Value>) = let mutable v = Unchecked.defaultof<'Value> if tryGetValue comparer k &v m then v else - raise (KeyNotFoundException()) + throwKeyNotFound() let tryFind (comparer: IComparer<'Key>) k (m: MapTree<'Key, 'Value>) = let mutable v = Unchecked.defaultof<'Value> @@ -170,13 +175,14 @@ module MapTree = let rec partitionAux (comparer: IComparer<'Key>) (f: OptimizedClosures.FSharpFunc<_, _, _>) (m: MapTree<'Key, 'Value>) acc = if isEmpty m then acc else - match m with - | :? MapTreeNode<'Key, 'Value> as mn -> + if m.Height = 1 then + partition1 comparer f m.Key m.Value acc + else + let mn = asNode m let acc = partitionAux comparer f mn.Right acc let acc = partition1 comparer f mn.Key mn.Value acc partitionAux comparer f mn.Left acc - | _ -> partition1 comparer f m.Key m.Value acc - + let partition (comparer: IComparer<'Key>) f m = partitionAux comparer (OptimizedClosures.FSharpFunc<_, _, _>.Adapt f) m (empty, empty) @@ -186,12 +192,14 @@ module MapTree = let rec filterAux (comparer: IComparer<'Key>) (f: OptimizedClosures.FSharpFunc<_, _, _>) (m: MapTree<'Key, 'Value>) acc = if isEmpty m then acc else - match m with - | :? MapTreeNode<'Key, 'Value> as mn -> + if m.Height = 1 then + filter1 comparer f m.Key m.Value acc + else + let mn = asNode m let acc = filterAux comparer f mn.Left acc let acc = filter1 comparer f mn.Key mn.Value acc filterAux comparer f mn.Right acc - | _ -> filter1 comparer f m.Key m.Value acc + let filter (comparer: IComparer<'Key>) f m = filterAux comparer (OptimizedClosures.FSharpFunc<_, _, _>.Adapt f) m empty @@ -199,18 +207,21 @@ module MapTree = let rec spliceOutSuccessor (m: MapTree<'Key, 'Value>) = if isEmpty m then failwith "internal error: Map.spliceOutSuccessor" else - match m with - | :? MapTreeNode<'Key, 'Value> as mn -> + if m.Height = 1 then + m.Key, m.Value, empty + else + let mn = asNode m if isEmpty mn.Left then mn.Key, mn.Value, mn.Right else let k3, v3, l' = spliceOutSuccessor mn.Left in k3, v3, mk l' mn.Key mn.Value mn.Right - | _ -> m.Key, m.Value, empty let rec remove (comparer: IComparer<'Key>) k (m: MapTree<'Key, 'Value>) = if isEmpty m then empty else let c = comparer.Compare(k, m.Key) - match m with - | :? MapTreeNode<'Key, 'Value> as mn -> + if m.Height = 1 then + if c = 0 then empty else m + else + let mn = asNode m if c < 0 then rebalance (remove comparer k mn.Left) mn.Key mn.Value mn.Right elif c = 0 then if isEmpty mn.Left then mn.Right @@ -219,8 +230,7 @@ module MapTree = let sk, sv, r' = spliceOutSuccessor mn.Right mk mn.Left sk sv r' else rebalance mn.Left mn.Key mn.Value (remove comparer k mn.Right) - | _ -> - if c = 0 then empty else m + let rec change (comparer: IComparer<'Key>) k (u: 'Value option -> 'Value option) (m: MapTree<'Key, 'Value>) : MapTree<'Key,'Value> = if isEmpty m then @@ -228,8 +238,22 @@ module MapTree = | None -> m | Some v -> MapTree (k, v) else - match m with - | :? MapTreeNode<'Key, 'Value> as mn -> + if m.Height = 1 then + let c = comparer.Compare(k, m.Key) + if c < 0 then + match u None with + | None -> m + | Some v -> MapTreeNode (k, v, empty, m, 2) :> MapTree<'Key,'Value> + elif c = 0 then + match u (Some m.Value) with + | None -> empty + | Some v -> MapTree (k, v) + else + match u None with + | None -> m + | Some v -> MapTreeNode (k, v, m, empty, 2) :> MapTree<'Key,'Value> + else + let mn = asNode m let c = comparer.Compare(k, mn.Key) if c < 0 then rebalance (change comparer k u mn.Left) mn.Key mn.Value mn.Right @@ -244,37 +268,28 @@ module MapTree = | Some v -> MapTreeNode (k, v, mn.Left, mn.Right, mn.Height) :> MapTree<'Key,'Value> else rebalance mn.Left mn.Key mn.Value (change comparer k u mn.Right) - | _ -> - let c = comparer.Compare(k, m.Key) - if c < 0 then - match u None with - | None -> m - | Some v -> MapTreeNode (k, v, empty, m, 2) :> MapTree<'Key,'Value> - elif c = 0 then - match u (Some m.Value) with - | None -> empty - | Some v -> MapTree (k, v) - else - match u None with - | None -> m - | Some v -> MapTreeNode (k, v, m, empty, 2) :> MapTree<'Key,'Value> let rec mem (comparer: IComparer<'Key>) k (m: MapTree<'Key, 'Value>) = if isEmpty m then false else let c = comparer.Compare(k, m.Key) - match m with - | :? MapTreeNode<'Key, 'Value> as mn -> + if m.Height = 1 then + c = 0 + else + let mn = asNode m if c < 0 then mem comparer k mn.Left else (c = 0 || mem comparer k mn.Right) - | _ -> c = 0 + let rec iterOpt (f: OptimizedClosures.FSharpFunc<_, _, _>) (m: MapTree<'Key, 'Value>) = if isEmpty m then () else - match m with - | :? MapTreeNode<'Key, 'Value> as mn -> iterOpt f mn.Left; f.Invoke (mn.Key, mn.Value); iterOpt f mn.Right - | _ -> f.Invoke (m.Key, m.Value) + if m.Height = 1 then + f.Invoke (m.Key, m.Value) + else + let mn = asNode m + iterOpt f mn.Left; f.Invoke (mn.Key, mn.Value); iterOpt f mn.Right + let iter f m = iterOpt (OptimizedClosures.FSharpFunc<_, _, _>.Adapt f) m @@ -282,8 +297,10 @@ module MapTree = let rec tryPickOpt (f: OptimizedClosures.FSharpFunc<_, _, _>) (m: MapTree<'Key, 'Value>) = if isEmpty m then None else - match m with - | :? MapTreeNode<'Key, 'Value> as mn -> + if m.Height = 1 then + f.Invoke (m.Key, m.Value) + else + let mn = asNode m match tryPickOpt f mn.Left with | Some _ as res -> res | None -> @@ -291,7 +308,7 @@ module MapTree = | Some _ as res -> res | None -> tryPickOpt f mn.Right - | _ -> f.Invoke (m.Key, m.Value) + let tryPick f m = tryPickOpt (OptimizedClosures.FSharpFunc<_, _, _>.Adapt f) m @@ -299,9 +316,12 @@ module MapTree = let rec existsOpt (f: OptimizedClosures.FSharpFunc<_, _, _>) (m: MapTree<'Key, 'Value>) = if isEmpty m then false else - match m with - | :? MapTreeNode<'Key, 'Value> as mn -> existsOpt f mn.Left || f.Invoke (mn.Key, mn.Value) || existsOpt f mn.Right - | _ -> f.Invoke (m.Key, m.Value) + if m.Height = 1 then + f.Invoke (m.Key, m.Value) + else + let mn = asNode m + existsOpt f mn.Left || f.Invoke (mn.Key, mn.Value) || existsOpt f mn.Right + let exists f m = existsOpt (OptimizedClosures.FSharpFunc<_, _, _>.Adapt f) m @@ -309,9 +329,12 @@ module MapTree = let rec forallOpt (f: OptimizedClosures.FSharpFunc<_, _, _>) (m: MapTree<'Key, 'Value>) = if isEmpty m then true else - match m with - | :? MapTreeNode<'Key, 'Value> as mn -> forallOpt f mn.Left && f.Invoke (mn.Key, mn.Value) && forallOpt f mn.Right - | _ -> f.Invoke (m.Key, m.Value) + if m.Height = 1 then + f.Invoke (m.Key, m.Value) + else + let mn = asNode m + forallOpt f mn.Left && f.Invoke (mn.Key, mn.Value) && forallOpt f mn.Right + let forall f m = @@ -320,24 +343,27 @@ module MapTree = let rec map (f:'Value -> 'Result) (m: MapTree<'Key, 'Value>) : MapTree<'Key, 'Result> = if isEmpty m then empty else - match m with - | :? MapTreeNode<'Key, 'Value> as mn -> + if m.Height = 1 then + MapTree (m.Key, f m.Value) + else + let mn = asNode m let l2 = map f mn.Left let v2 = f mn.Value let r2 = map f mn.Right MapTreeNode (mn.Key, v2, l2, r2, mn.Height) :> MapTree<'Key, 'Result> - | _ -> MapTree (m.Key, f m.Value) let rec mapiOpt (f: OptimizedClosures.FSharpFunc<'Key, 'Value, 'Result>) (m: MapTree<'Key, 'Value>) = if isEmpty m then empty else - match m with - | :? MapTreeNode<'Key, 'Value> as mn -> + if m.Height = 1 then + MapTree (m.Key, f.Invoke (m.Key, m.Value)) + else + let mn = asNode m let l2 = mapiOpt f mn.Left let v2 = f.Invoke (mn.Key, mn.Value) let r2 = mapiOpt f mn.Right MapTreeNode (mn.Key, v2, l2, r2, mn.Height) :> MapTree<'Key, 'Result> - | _ -> MapTree (m.Key, f.Invoke (m.Key, m.Value)) + let mapi f m = mapiOpt (OptimizedClosures.FSharpFunc<_, _, _>.Adapt f) m @@ -345,12 +371,14 @@ module MapTree = let rec foldBackOpt (f: OptimizedClosures.FSharpFunc<_, _, _, _>) (m: MapTree<'Key, 'Value>) x = if isEmpty m then x else - match m with - | :? MapTreeNode<'Key, 'Value> as mn -> + if m.Height = 1 then + f.Invoke (m.Key, m.Value, x) + else + let mn = asNode m let x = foldBackOpt f mn.Right x let x = f.Invoke (mn.Key, mn.Value, x) foldBackOpt f mn.Left x - | _ -> f.Invoke (m.Key, m.Value, x) + let foldBack f m x = foldBackOpt (OptimizedClosures.FSharpFunc<_, _, _, _>.Adapt f) m x @@ -358,12 +386,13 @@ module MapTree = let rec foldOpt (f: OptimizedClosures.FSharpFunc<_, _, _, _>) x (m: MapTree<'Key, 'Value>) = if isEmpty m then x else - match m with - | :? MapTreeNode<'Key, 'Value> as mn -> + if m.Height = 1 then + f.Invoke (x, m.Key, m.Value) + else + let mn = asNode m let x = foldOpt f x mn.Left let x = f.Invoke (x, mn.Key, mn.Value) foldOpt f x mn.Right - | _ -> f.Invoke (x, m.Key, m.Value) let fold f x m = foldOpt (OptimizedClosures.FSharpFunc<_, _, _, _>.Adapt f) x m @@ -372,19 +401,19 @@ module MapTree = let rec foldFromTo (f: OptimizedClosures.FSharpFunc<_, _, _, _>) (m: MapTree<'Key, 'Value>) x = if isEmpty m then x else - match m with - | :? MapTreeNode<'Key, 'Value> as mn -> + if m.Height = 1 then + let cLoKey = comparer.Compare(lo, m.Key) + let cKeyHi = comparer.Compare(m.Key, hi) + let x = if cLoKey <= 0 && cKeyHi <= 0 then f.Invoke (m.Key, m.Value, x) else x + x + else + let mn = asNode m let cLoKey = comparer.Compare(lo, mn.Key) let cKeyHi = comparer.Compare(mn.Key, hi) let x = if cLoKey < 0 then foldFromTo f mn.Left x else x let x = if cLoKey <= 0 && cKeyHi <= 0 then f.Invoke (mn.Key, mn.Value, x) else x let x = if cKeyHi < 0 then foldFromTo f mn.Right x else x x - | _ -> - let cLoKey = comparer.Compare(lo, m.Key) - let cKeyHi = comparer.Compare(m.Key, hi) - let x = if cLoKey <= 0 && cKeyHi <= 0 then f.Invoke (m.Key, m.Value, x) else x - x if comparer.Compare(lo, hi) = 1 then x else foldFromTo f m x @@ -395,9 +424,12 @@ module MapTree = let rec loop (m: MapTree<'Key, 'Value>) acc = if isEmpty m then acc else - match m with - | :? MapTreeNode<'Key, 'Value> as mn -> loop mn.Left ((mn.Key, mn.Value) :: loop mn.Right acc) - | _ -> (m.Key, m.Value) :: acc + if m.Height = 1 then + (m.Key, m.Value) :: acc + else + let mn = asNode m + loop mn.Left ((mn.Key, mn.Value) :: loop mn.Right acc) + loop m [] let toArray m = @@ -448,9 +480,11 @@ module MapTree = | m :: rest -> if isEmpty m then collapseLHS rest else - match m with - | :? MapTreeNode<'Key, 'Value> as mn -> collapseLHS (mn.Left :: MapTree (mn.Key, mn.Value) :: mn.Right :: rest) - | _ -> stack + if m.Height = 1 then + stack + else + let mn = asNode m + collapseLHS (mn.Left :: MapTree (mn.Key, mn.Value) :: mn.Right :: rest) let mkIterator m = { stack = collapseLHS [m]; started = false } @@ -460,15 +494,20 @@ module MapTree = let alreadyFinished() = raise (InvalidOperationException(SR.GetString(SR.enumerationAlreadyFinished))) + + let unexpectedStackForCurrent() = + failwith "Please report error: Map iterator, unexpected stack for current" + + let unexpectedStackForMoveNext() = + failwith "Please report error: Map iterator, unexpected stack for moveNext" let current i = if i.started then match i.stack with | [] -> alreadyFinished() | m :: _ -> - match m with - | :? MapTreeNode<'Key, 'Value> -> failwith "Please report error: Map iterator, unexpected stack for current" - | _ -> new KeyValuePair<_, _>(m.Key, m.Value) + if m.Height = 1 then KeyValuePair<_, _>(m.Key, m.Value) + else unexpectedStackForCurrent() else notStarted() @@ -477,11 +516,10 @@ module MapTree = match i.stack with | [] -> false | m :: rest -> - match m with - | :? MapTreeNode<'Key, 'Value> -> failwith "Please report error: Map iterator, unexpected stack for moveNext" - | _ -> + if m.Height = 1 then i.stack <- collapseLHS rest not i.stack.IsEmpty + else unexpectedStackForMoveNext() else i.started <- true (* The first call to MoveNext "starts" the enumeration. *) not i.stack.IsEmpty @@ -489,15 +527,15 @@ module MapTree = let mkIEnumerator m = let mutable i = mkIterator m { new IEnumerator<_> with - member __.Current = current i + member _.Current = current i interface System.Collections.IEnumerator with - member __.Current = box (current i) - member __.MoveNext() = moveNext i - member __.Reset() = i <- mkIterator m + member _.Current = box (current i) + member _.MoveNext() = moveNext i + member _.Reset() = i <- mkIterator m interface System.IDisposable with - member __.Dispose() = ()} + member _.Dispose() = ()} [>)>] [] @@ -527,17 +565,17 @@ type Map<[]'Key, [(comparer, MapTree.empty) [] - member __.OnSerializing(context: System.Runtime.Serialization.StreamingContext) = + member _.OnSerializing(context: System.Runtime.Serialization.StreamingContext) = ignore context serializedData <- MapTree.toArray tree |> Array.map (fun (k, v) -> KeyValuePair(k, v)) // Do not set this to null, since concurrent threads may also be serializing the data //[] - //member __.OnSerialized(context: System.Runtime.Serialization.StreamingContext) = + //member _.OnSerialized(context: System.Runtime.Serialization.StreamingContext) = // serializedData <- null [] - member __.OnDeserialized(context: System.Runtime.Serialization.StreamingContext) = + member _.OnDeserialized(context: System.Runtime.Serialization.StreamingContext) = ignore context comparer <- LanguagePrimitives.FastGenericComparer<'Key> tree <- serializedData |> Array.map (fun kvp -> kvp.Key, kvp.Value) |> MapTree.ofArray comparer @@ -679,10 +717,10 @@ type Map<[]'Key, [> with - member __.GetEnumerator() = MapTree.mkIEnumerator tree + member _.GetEnumerator() = MapTree.mkIEnumerator tree interface System.Collections.IEnumerable with - member __.GetEnumerator() = (MapTree.mkIEnumerator tree :> System.Collections.IEnumerator) + member _.GetEnumerator() = (MapTree.mkIEnumerator tree :> System.Collections.IEnumerator) interface IDictionary<'Key, 'Value> with member m.Item @@ -704,17 +742,17 @@ type Map<[]'Key, [> with - member __.Add 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 _.Clear() = raise (NotSupportedException(SR.GetString(SR.mapCannotBeMutated))) - member __.Remove x = ignore x; raise (NotSupportedException(SR.GetString(SR.mapCannotBeMutated))) + member _.Remove x = ignore x; raise (NotSupportedException(SR.GetString(SR.mapCannotBeMutated))) member m.Contains x = m.ContainsKey x.Key && Unchecked.equals m.[x.Key] x.Value - member __.CopyTo(arr, i) = MapTree.copyToArray tree arr i + member _.CopyTo(arr, i) = MapTree.copyToArray tree arr i - member __.IsReadOnly = true + member _.IsReadOnly = true member m.Count = m.Count diff --git a/src/fsharp/FSharp.Core/option.fsi b/src/fsharp/FSharp.Core/option.fsi index 0bb89c1468f..1c4c74f78a8 100644 --- a/src/fsharp/FSharp.Core/option.fsi +++ b/src/fsharp/FSharp.Core/option.fsi @@ -15,6 +15,13 @@ module Option = /// Returns true if the option is not None. /// The input option. /// + /// + /// + /// None |> Option.isSome // evaluates to false + /// Some 42 |> Option.isSome // evaluates to true + /// + /// + /// /// True if the option is not None. [] val inline isSome: option:'T option -> bool @@ -23,6 +30,13 @@ module Option = /// /// The input option. /// + /// + /// + /// None |> Option.isNone // evaluates to true + /// Some 42 |> Option.isNone // evaluates to false + /// + /// + /// /// True if the option is None. [] val inline isNone: option:'T option -> bool @@ -33,7 +47,15 @@ module Option = /// The input option. /// /// The option if the option is Some, else the default value. + /// /// Identical to the built-in operator, except with the arguments swapped. + /// + /// + /// + /// (99, None) ||> Option.defaultValue // evaluates to 99 + /// (99, Some 42) ||> Option.defaultValue // evaluates to 42 + /// + /// [] val defaultValue: value:'T -> option:'T option -> 'T @@ -44,6 +66,13 @@ module Option = /// /// The option if the option is Some, else the result of evaluating . /// is not evaluated unless is None. + /// + /// + /// + /// None |> Option.defaultWith (fun () -> 99) // evaluates to 99 + /// Some 42 |> Option.defaultWith (fun () -> 99) // evaluates to 42 + /// + /// [] val defaultWith: defThunk:(unit -> 'T) -> option:'T option -> 'T @@ -52,6 +81,15 @@ module Option = /// The value to use if is None. /// The input option. /// + /// + /// + /// (None, None) ||> Option.orElse // evaluates to None + /// (Some 99, None) ||> Option.orElse // evaluates to Some 99 + /// (None, Some 42) ||> Option.orElse // evaluates to Some 42 + /// (Some 99, Some 42) ||> Option.orElse // evaluates to Some 42 + /// + /// + /// /// The option if the option is Some, else the alternate option. [] val orElse: ifNone:'T option -> option:'T option -> 'T option @@ -63,6 +101,15 @@ module Option = /// /// The option if the option is Some, else the result of evaluating . /// is not evaluated unless is None. + /// + /// + /// + /// None |> Option.orElseWith (fun () -> None) // evaluates to None + /// None |> Option.orElseWith (fun () -> (Some 99)) // evaluates to Some 99 + /// Some 42 |> Option.orElseWith (fun () -> None) // evaluates to Some 42 + /// Some 42 |> Option.orElseWith (fun () -> (Some 99)) // evaluates to Some 42 + /// + /// [] val orElseWith: ifNoneThunk:(unit -> 'T option) -> option:'T option -> 'T option @@ -70,6 +117,13 @@ module Option = /// /// The input option. /// + /// + /// + /// Some 42 |> Option.get // evaluates to 42 + /// None |> Option.get // throws exception! + /// + /// + /// /// The value within the option. /// Thrown when the option is None. [] @@ -79,6 +133,13 @@ module Option = /// /// The input option. /// + /// + /// + /// None |> Option.count // evaluates to 0 + /// Some 99 |> Option.count // evaluates to 1 + /// + /// + /// /// A zero if the option is None, a one otherwise. [] val count: option:'T option -> int @@ -89,6 +150,14 @@ module Option = /// The initial state. /// The input option. /// + /// + /// + /// (0, None) ||> Option.fold (fun accum x -> accum + x * 2) // evaluates to 0 + /// (0, Some 1) ||> Option.fold (fun accum x -> accum + x * 2) // evaluates to 2 + /// (10, Some 1) ||> Option.fold (fun accum x -> accum + x * 2) // evaluates to 12 + /// + /// + /// /// The original state if the option is None, otherwise it returns the updated state with the folder /// and the option value. [] @@ -100,6 +169,14 @@ module Option = /// The input option. /// The initial state. /// + /// + /// + /// (None, 0) ||> Option.foldBack (fun x accum -> accum + x * 2) // evaluates to 0 + /// (Some 1, 0) ||> Option.foldBack (fun x accum -> accum + x * 2) // evaluates to 2 + /// (Some 1, 10) ||> Option.foldBack (fun x accum -> accum + x * 2) // evaluates to 12 + /// + /// + /// /// The original state if the option is None, otherwise it returns the updated state with the folder /// and the option value. [] @@ -110,6 +187,14 @@ module Option = /// A function that evaluates to a boolean when given a value from the option type. /// The input option. /// + /// + /// + /// None |> Option.exists (fun x -> x >= 5) // evaluates to false + /// Some 42 |> Option.exists (fun x -> x >= 5) // evaluates to true + /// Some 4 |> Option.exists (fun x -> x >= 5) // evaluates to false + /// + /// + /// /// False if the option is None, otherwise it returns the result of applying the predicate /// to the option value. [] @@ -120,6 +205,14 @@ module Option = /// A function that evaluates to a boolean when given a value from the option type. /// The input option. /// + /// + /// + /// None |> Option.forall (fun x -> x >= 5) // evaluates to true + /// Some 42 |> Option.forall (fun x -> x >= 5) // evaluates to true + /// Some 4 |> Option.forall (fun x -> x >= 5) // evaluates to false + /// + /// + /// /// True if the option is None, otherwise it returns the result of applying the predicate /// to the option value. [] @@ -130,6 +223,14 @@ module Option = /// The value to test for equality. /// The input option. /// + /// + /// + /// (99, None) ||> Option.contains // evaluates to false + /// (99, Some 99) ||> Option.contains // evaluates to true + /// (99, Some 100) ||> Option.contains // evaluates to false + /// + /// + /// /// True if the option is Some and contains a value equal to , otherwise false. [] val inline contains: value:'T -> option:'T option -> bool when 'T : equality @@ -139,6 +240,13 @@ module Option = /// A function to apply to the option value. /// The input option. /// + /// + /// + /// None |> Option.iter (printfn "%s") // does nothing + /// Some "Hello world" |> Option.iter (printfn "%s") // prints "Hello world" + /// + /// + /// /// Unit if the option is None, otherwise it returns the result of applying the predicate /// to the option value. [] @@ -149,6 +257,13 @@ module Option = /// A function to apply to the option value. /// The input option. /// + /// + /// + /// None |> Option.map (fun x -> x * 2) // evaluates to None + /// Some 42 |> Option.map (fun x -> x * 2) // evaluates to Some 84 + /// + /// + /// /// An option of the input value after applying the mapping function, or None if the input is None. [] val map: mapping:('T -> 'U) -> option:'T option -> 'U option @@ -159,6 +274,15 @@ module Option = /// The first option. /// The second option. /// + /// + /// + /// (None, None) ||> Option.map2 (fun x y -> x + y) // evaluates to None + /// (Some 5, None) ||> Option.map2 (fun x y -> x + y) // evaluates to None + /// (None, Some 10) ||> Option.map2 (fun x y -> x + y) // evaluates to None + /// (Some 5, Some 10) ||> Option.map2 (fun x y -> x + y) // evaluates to Some 15 + /// + /// + /// /// An option of the input values after applying the mapping function, or None if either input is None. [] val map2: mapping:('T1 -> 'T2 -> 'U) -> option1: 'T1 option -> option2: 'T2 option -> 'U option @@ -170,6 +294,16 @@ module Option = /// The second option. /// The third option. /// + /// + /// + /// (None, None, None) |||> Option.map3 (fun x y z -> x + y + z) // evaluates to None + /// (Some 100, None, None) |||> Option.map3 (fun x y z -> x + y + z) // evaluates to None + /// (None, Some 100, None) |||> Option.map3 (fun x y z -> x + y + z) // evaluates to None + /// (None, None, Some 100) |||> Option.map3 (fun x y z -> x + y + z) // evaluates to None + /// (Some 5, Some 100, Some 10) |||> Option.map3 (fun x y z -> x + y + z) // evaluates to Some 115 + /// + /// + /// /// An option of the input values after applying the mapping function, or None if any input is None. [] val map3: mapping:('T1 -> 'T2 -> 'T3 -> 'U) -> option1: 'T1 option -> option2: 'T2 option -> option3: 'T3 option -> 'U option @@ -180,6 +314,18 @@ module Option = /// an option containing a value of type U. /// The input option. /// + /// + /// + /// let tryParse input = + /// match System.Int32.TryParse input with + /// | true, v -> Some v + /// | false, _ -> None + /// None |> Option.bind tryParse // evaluates to None + /// Some "42" |> Option.bind tryParse // evaluates to Some 42 + /// Some "Forty-two" |> Option.bind tryParse // evaluates to None + /// + /// + /// /// An option of the output type of the binder. [] val bind: binder:('T -> 'U option) -> option:'T option -> 'U option @@ -188,8 +334,16 @@ module Option = /// /// The input option. /// - /// An option of the output type of the binder. + /// The input value if the value is Some; otherwise, None. /// flatten is equivalent to bind id. + /// + /// + /// + /// None |> Option.flatten // evaluates to None + /// (Some (None)) |> Option.flatten // evaluates to None + /// (Some (Some 42)) |> Option.flatten // evaluates to Some 42 + /// + /// [] val flatten: option:'T option option -> 'T option @@ -198,6 +352,14 @@ module Option = /// A function that evaluates whether the value contained in the option should remain, or be filtered out. /// The input option. /// + /// + /// + /// None |> Option.filter (fun x -> x >= 5) // evaluates to None + /// Some 42 |> Option.filter (fun x -> x >= 5) // evaluates to Some 42 + /// Some 4 |> Option.filter (fun x -> x >= 5) // evaluates to None + /// + /// + /// /// The input if the predicate evaluates to true; otherwise, None. [] val filter: predicate:('T -> bool) -> option:'T option -> 'T option @@ -206,6 +368,13 @@ module Option = /// /// The input option. /// + /// + /// + /// None |> Option.toArray // evaluates to [||] + /// Some 42 |> Option.toArray // evaluates to [|42|] + /// + /// + /// /// The result array. [] val toArray: option:'T option -> 'T[] @@ -214,6 +383,13 @@ module Option = /// /// The input option. /// + /// + /// + /// None |> Option.toList // evaluates to [] + /// Some 42 |> Option.toList // evaluates to [42] + /// + /// + /// /// The result list. [] val toList: option:'T option -> 'T list @@ -222,6 +398,13 @@ module Option = /// /// The input option. /// + /// + /// + /// None |> Option.toNullable // evaluates to new System.Nullable<int>() + /// Some 42 |> Option.toNullable // evaluates to new System.Nullable(42) + /// + /// + /// /// The result value. [] val toNullable: option:'T option -> Nullable<'T> @@ -230,14 +413,28 @@ module Option = /// /// The input nullable value. /// + /// + /// + /// System.Nullable<int>() |> Option.ofNullable // evaluates to None + /// System.Nullable(42) |> Option.ofNullable // evaluates to Some 42 + /// + /// + /// /// The result option. [] - val ofNullable: value:Nullable<'T> -> 'T option + val ofNullable: value:Nullable<'T> -> 'T option /// Convert a potentially null value to an option. /// /// The input value. /// + /// + /// + /// (null: string) |> Option.ofObj // evaluates to None + /// "not a null string" |> Option.ofObj // evaluates to (Some "not a null string") + /// + /// + /// /// The result option. [] val ofObj: value: 'T -> 'T option when 'T : null @@ -246,6 +443,13 @@ module Option = /// /// The input value. /// + /// + /// + /// None |> Option.toObj // evaluates to null + /// Some "not a null string" |> Option.toObj // evaluates to "not a null string" + /// + /// + /// /// The result value, which is null if the input was None. [] val toObj: value: 'T option -> 'T when 'T : null @@ -431,7 +635,7 @@ module ValueOption = /// /// The input value option. /// - /// A value option of the output type of the binder. + /// The input value if the value is Some; otherwise, ValueNone. /// flatten is equivalent to bind id. [] val flatten: voption: 'T voption voption -> 'T voption @@ -475,7 +679,7 @@ module ValueOption = /// /// The result value option. [] - val ofNullable: value:Nullable<'T> -> 'T voption + val ofNullable: value:Nullable<'T> -> 'T voption /// Convert a potentially null value to a value option. /// diff --git a/src/fsharp/FSharp.Core/prim-types.fs b/src/fsharp/FSharp.Core/prim-types.fs index 01908497136..319481c6814 100644 --- a/src/fsharp/FSharp.Core/prim-types.fs +++ b/src/fsharp/FSharp.Core/prim-types.fs @@ -177,7 +177,7 @@ namespace Microsoft.FSharp.Core inherit System.Attribute() member x.CompiledName = compiledName - [] + [] [] type StructAttribute() = inherit System.Attribute() @@ -2140,7 +2140,7 @@ namespace Microsoft.FSharp.Core let inline MakeGenericComparer<'T>() = { new System.Collections.Generic.IComparer<'T> with - member __.Compare(x,y) = GenericComparison x y } + member _.Compare(x,y) = GenericComparison x y } let CharComparer = MakeGenericComparer() let StringComparer = MakeGenericComparer() @@ -5313,20 +5313,20 @@ namespace Microsoft.FSharp.Core state.Current { new IEnumerator<'T> with - member __.Current = current () + member _.Current = current () interface System.IDisposable with - member __.Dispose () = () + member _.Dispose () = () interface IEnumerator with - member __.Current = box (current ()) + member _.Current = box (current ()) - member __.Reset () = + member _.Reset () = state.Started <- false state.Complete <- false state.Current <- Unchecked.defaultof<_> - member __.MoveNext () = + member _.MoveNext () = if not state.Started then state.Started <- true state.Current <- n @@ -5344,7 +5344,7 @@ namespace Microsoft.FSharp.Core not state.Complete} { new IEnumerable<'T> with - member __.GetEnumerator () = variableStepRangeEnumerator () + member _.GetEnumerator () = variableStepRangeEnumerator () interface IEnumerable with member this.GetEnumerator () = (variableStepRangeEnumerator ()) :> IEnumerator } @@ -5371,15 +5371,15 @@ namespace Microsoft.FSharp.Core derefValue { new IEnumerator<'T> with - member __.Current = current () + member _.Current = current () interface System.IDisposable with - member __.Dispose () = () + member _.Dispose () = () interface IEnumerator with - member __.Current = box (current ()) - member __.Reset () = value <- n - LanguagePrimitives.GenericOne - member __.MoveNext () = + member _.Current = box (current ()) + member _.Reset () = value <- n - LanguagePrimitives.GenericOne + member _.MoveNext () = let derefValue = value if derefValue < m then value <- derefValue + LanguagePrimitives.GenericOne @@ -5390,10 +5390,10 @@ namespace Microsoft.FSharp.Core else false } { new IEnumerable<'T> with - member __.GetEnumerator () = singleStepRangeEnumerator () + member _.GetEnumerator () = singleStepRangeEnumerator () interface IEnumerable with - member __.GetEnumerator () = (singleStepRangeEnumerator ()) :> IEnumerator } + member _.GetEnumerator () = (singleStepRangeEnumerator ()) :> IEnumerator } // For RangeStepGeneric, zero and add are functions representing the static resolution of GenericZero and (+) // for the particular static type. diff --git a/src/fsharp/FSharp.Core/prim-types.fsi b/src/fsharp/FSharp.Core/prim-types.fsi index 064b621e56a..2ed374eb5ce 100644 --- a/src/fsharp/FSharp.Core/prim-types.fsi +++ b/src/fsharp/FSharp.Core/prim-types.fsi @@ -199,7 +199,7 @@ namespace Microsoft.FSharp.Core /// Adding this attribute to a type causes it to be represented using a CLI struct. /// /// Attributes - [] + [] [] type StructAttribute = inherit Attribute diff --git a/src/fsharp/FSharp.Core/printf.fs b/src/fsharp/FSharp.Core/printf.fs index 05ffcce3ea6..0dbdb801c88 100644 --- a/src/fsharp/FSharp.Core/printf.fs +++ b/src/fsharp/FSharp.Core/printf.fs @@ -724,7 +724,7 @@ module internal PrintfImpl = else fun (v: obj) -> noJustificationCore (f v) true (isPositive v) prefix - /// contains functions to handle left\right and no justification case for numbers + /// contains functions to handle left/right and no justification case for numbers module Integer = let eliminateNative (v: obj) = @@ -821,21 +821,27 @@ module internal PrintfImpl = (rightJustify f prefix padChar isUnsigned) let getValueConverter (spec: FormatSpecifier) : ValueConverter = - let c = spec.TypeChar - if c = 'd' || c = 'i' then + match spec.TypeChar with + | 'd' | 'i' -> withPadding spec false toString - elif c = 'u' then + | 'u' -> withPadding spec true (toUnsigned >> toString) - elif c = 'x' then + | 'x' -> withPadding spec true (toFormattedString "x") - elif c = 'X' then + | 'X' -> withPadding spec true (toFormattedString "X") - elif c = 'o' then + | 'o' -> withPadding spec true (fun (v: obj) -> + // Convert.ToInt64 throws for uint64 with values above int64 range so cast directly match toUnsigned v with | :? uint64 as u -> Convert.ToString(int64 u, 8) | u -> Convert.ToString(Convert.ToInt64 u, 8)) - else raise (ArgumentException()) + | 'B' -> + withPadding spec true (fun (v: obj) -> + match toUnsigned v with + | :? uint64 as u -> Convert.ToString(int64 u, 2) + | u -> Convert.ToString(Convert.ToInt64 u, 2)) + | _ -> invalidArg (nameof spec) "Invalid integer format" module FloatAndDecimal = @@ -982,7 +988,7 @@ module internal PrintfImpl = Basic.withPadding spec (fun (c: obj) -> (unbox c).ToString()) | 'M' -> FloatAndDecimal.withPadding spec (fun _ -> "G") "G" // %M ignores precision - | 'd' | 'i' | 'x' | 'X' | 'u' | 'o'-> + | 'd' | 'i' | 'u' | 'B' | 'o' | 'x' | 'X' -> Integer.getValueConverter spec | 'e' | 'E' | 'f' | 'F' diff --git a/src/fsharp/FSharp.Core/quotations.fs b/src/fsharp/FSharp.Core/quotations.fs index 8c5c5c2824a..aabae7bfda5 100644 --- a/src/fsharp/FSharp.Core/quotations.fs +++ b/src/fsharp/FSharp.Core/quotations.fs @@ -15,8 +15,8 @@ open Microsoft.FSharp.Collections open Microsoft.FSharp.Reflection open Microsoft.FSharp.Core.Printf open Microsoft.FSharp.Text.StructuredPrintfImpl -open Microsoft.FSharp.Text.StructuredPrintfImpl.LayoutOps -open Microsoft.FSharp.Text.StructuredPrintfImpl.TaggedTextOps +open Microsoft.FSharp.Text.StructuredPrintfImpl.Layout +open Microsoft.FSharp.Text.StructuredPrintfImpl.TaggedText #nowarn "52" // The value has been copied to ensure the original is not mutated by this operation @@ -244,7 +244,7 @@ and [] let expr (e: Expr ) = e.GetLayout long let exprs (es: Expr list) = es |> List.map expr let parens ls = bracketL (commaListL ls) - let pairL l1 l2 = bracketL (l1 ^^ sepL Literals.comma ^^ l2) + let pairL l1 l2 = bracketL (l1 ^^ sepL comma ^^ l2) let listL ls = squareBracketL (commaListL ls) let combTaggedL nm ls = wordL nm ^^ parens ls let combL nm ls = combTaggedL (tagKeyword nm) ls diff --git a/src/fsharp/FSharp.Core/reflect.fs b/src/fsharp/FSharp.Core/reflect.fs index aad98b162f2..63b8d6d4651 100644 --- a/src/fsharp/FSharp.Core/reflect.fs +++ b/src/fsharp/FSharp.Core/reflect.fs @@ -158,6 +158,87 @@ module internal Impl = param) expr.Compile () + let compileTupleConstructor tupleEncField getTupleConstructorMethod typ = + let rec constituentTuple (typ: Type) elements startIndex = + Expression.New ( + getTupleConstructorMethod typ, + [ + let genericArgs = typ.GetGenericArguments () + + for paramIndex in 0 .. genericArgs.Length - 1 do + let genericArg = genericArgs.[paramIndex] + + if paramIndex = tupleEncField then + constituentTuple genericArg elements (startIndex + paramIndex) :> Expression + else + Expression.Convert (Expression.ArrayAccess (elements, Expression.Constant (startIndex + paramIndex)), genericArg) + ]) + + let elements = Expression.Parameter (typeof, "elements") + + let expr = + Expression.Lambda> ( + Expression.Convert ( + constituentTuple typ elements 0, + typeof + ), + elements + ) + + expr.Compile () + + let compileTupleReader tupleEncField getTupleElementAccessors typ = + let rec writeTupleIntoArray (typ: Type) (tuple: Expression) outputArray startIndex = seq { + let elements = + match getTupleElementAccessors typ with + // typ is a struct tuple and its elements are accessed via fields + | Choice1Of2 (fi: FieldInfo[]) -> fi |> Array.map (fun fi -> Expression.Field (tuple, fi), fi.FieldType) + // typ is a class tuple and its elements are accessed via properties + | Choice2Of2 (pi: PropertyInfo[]) -> pi |> Array.map (fun pi -> Expression.Property (tuple, pi), pi.PropertyType) + + for index, (element, elementType) in elements |> Array.indexed do + if index = tupleEncField then + let innerTupleParam = Expression.Parameter (elementType, "innerTuple") + Expression.Block ( + [ innerTupleParam ], + [ + yield Expression.Assign (innerTupleParam, element) :> Expression + yield! writeTupleIntoArray elementType innerTupleParam outputArray (startIndex + index) + ] + ) :> Expression + else + Expression.Assign ( + Expression.ArrayAccess (outputArray, Expression.Constant (index + startIndex)), + Expression.Convert (element, typeof) + ) :> Expression } + + let param = Expression.Parameter (typeof, "outerTuple") + let outputArray = Expression.Variable (typeof, "output") + let rec outputLength tupleEncField (typ: Type) = + let genericArgs = typ.GetGenericArguments () + + if genericArgs.Length > tupleEncField then + tupleEncField + outputLength tupleEncField genericArgs.[genericArgs.Length - 1] + else + genericArgs.Length + + let expr = + Expression.Lambda> ( + Expression.Block ( + [ outputArray ], + [ + yield Expression.Assign ( + outputArray, + Expression.NewArrayBounds (typeof, Expression.Constant (outputLength tupleEncField typ)) + ) :> Expression + yield! writeTupleIntoArray typ (Expression.Convert (param, typ)) outputArray 0 + yield outputArray :> Expression + ] + ), + param) + + expr.Compile () + //----------------------------------------------------------------- // ATTRIBUTE DECOMPILATION @@ -605,16 +686,19 @@ module internal Impl = (fun (args: obj[]) -> ctor.Invoke(BindingFlags.InvokeMethod ||| BindingFlags.Instance ||| BindingFlags.Public, null, args, null)) + let getTupleElementAccessors (typ: Type) = + if typ.IsValueType then + Choice1Of2 (typ.GetFields (instanceFieldFlags ||| BindingFlags.Public) |> orderTupleFields) + else + Choice2Of2 (typ.GetProperties (instancePropertyFlags ||| BindingFlags.Public) |> orderTupleProperties) + let rec getTupleReader (typ: Type) = let etys = typ.GetGenericArguments() // Get the reader for the outer tuple record 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)))) + match getTupleElementAccessors typ with + | Choice1Of2 fi -> fun obj -> fi |> Array.map (fun f -> f.GetValue obj) + | Choice2Of2 pi -> fun obj -> pi |> Array.map (fun p -> p.GetValue (obj, null)) if etys.Length < maxTuple then reader else @@ -777,7 +861,7 @@ type UnionCaseInfo(typ: System.Type, tag: int) = let getMethInfo() = getUnionCaseConstructorMethod (typ, tag, BindingFlags.Public ||| BindingFlags.NonPublic) - member __.Name = + member _.Name = match names with | None -> let conv = getUnionTagConverter (typ, BindingFlags.Public ||| BindingFlags.NonPublic) @@ -786,27 +870,27 @@ type UnionCaseInfo(typ: System.Type, tag: int) = | Some conv -> conv tag - member __.DeclaringType = typ + member _.DeclaringType = typ - member __.GetFields() = + member _.GetFields() = fieldsPropsOfUnionCase (typ, tag, BindingFlags.Public ||| BindingFlags.NonPublic) - member __.GetCustomAttributes() = + member _.GetCustomAttributes() = getMethInfo().GetCustomAttributes false - member __.GetCustomAttributes attributeType = + member _.GetCustomAttributes attributeType = getMethInfo().GetCustomAttributes(attributeType, false) - member __.GetCustomAttributesData() = + member _.GetCustomAttributesData() = getMethInfo().CustomAttributes |> Seq.toArray :> IList<_> - member __.Tag = tag + member _.Tag = tag override x.ToString() = typ.Name + "." + x.Name override x.GetHashCode() = typ.GetHashCode() + tag - override __.Equals(obj: obj) = + override _.Equals(obj: obj) = match obj with | :? UnionCaseInfo as uci -> uci.DeclaringType = typ && uci.Tag = tag | _ -> false @@ -898,7 +982,7 @@ type FSharpType = type DynamicFunction<'T1, 'T2>() = inherit FSharpFunc obj, obj>() - override __.Invoke(impl: obj -> obj) : obj = + override _.Invoke(impl: obj -> obj) : obj = box<('T1 -> 'T2)> (fun inp -> unbox<'T2>(impl (box<'T1>(inp)))) [] @@ -980,7 +1064,7 @@ type FSharpValue = static member PreComputeTupleReader(tupleType: Type) : (obj -> obj[]) = checkTupleType("tupleType", tupleType) - getTupleReader tupleType + (compileTupleReader tupleEncField getTupleElementAccessors tupleType).Invoke static member PreComputeTuplePropertyInfo(tupleType: Type, index: int) = checkTupleType("tupleType", tupleType) @@ -988,7 +1072,7 @@ type FSharpValue = static member PreComputeTupleConstructor(tupleType: Type) = checkTupleType("tupleType", tupleType) - getTupleConstructor tupleType + (compileTupleConstructor tupleEncField getTupleConstructorMethod tupleType).Invoke static member PreComputeTupleConstructorInfo(tupleType: Type) = checkTupleType("tupleType", tupleType) diff --git a/src/fsharp/FSharp.Core/seq.fs b/src/fsharp/FSharp.Core/seq.fs index f81e3f84aba..857eebdbd9e 100644 --- a/src/fsharp/FSharp.Core/seq.fs +++ b/src/fsharp/FSharp.Core/seq.fs @@ -66,20 +66,20 @@ namespace Microsoft.FSharp.Collections else state <- Finished false - member __.Reset() = noReset() + member _.Reset() = noReset() interface System.IDisposable with member this.Dispose() = this.Dispose() let map f (e : IEnumerator<_>) : IEnumerator<_>= upcast { new MapEnumerator<_>() with - member __.DoMoveNext (curr : byref<_>) = + member _.DoMoveNext (curr : byref<_>) = if e.MoveNext() then curr <- f e.Current true else false - member __.Dispose() = e.Dispose() + member _.Dispose() = e.Dispose() } let mapi f (e : IEnumerator<_>) : IEnumerator<_> = @@ -87,21 +87,21 @@ namespace Microsoft.FSharp.Collections let mutable i = -1 upcast { new MapEnumerator<_>() with - member __.DoMoveNext curr = + member _.DoMoveNext curr = i <- i + 1 if e.MoveNext() then curr <- f.Invoke(i, e.Current) true else false - member __.Dispose() = e.Dispose() + member _.Dispose() = e.Dispose() } let map2 f (e1 : IEnumerator<_>) (e2 : IEnumerator<_>) : IEnumerator<_>= let f = OptimizedClosures.FSharpFunc<_, _, _>.Adapt(f) upcast { new MapEnumerator<_>() with - member __.DoMoveNext curr = + member _.DoMoveNext curr = let n1 = e1.MoveNext() let n2 = e2.MoveNext() if n1 && n2 then @@ -109,7 +109,7 @@ namespace Microsoft.FSharp.Collections true else false - member __.Dispose() = + member _.Dispose() = try e1.Dispose() finally @@ -121,14 +121,14 @@ namespace Microsoft.FSharp.Collections let mutable i = -1 upcast { new MapEnumerator<_>() with - member __.DoMoveNext curr = + member _.DoMoveNext curr = i <- i + 1 if (e1.MoveNext() && e2.MoveNext()) then curr <- f.Invoke(i, e1.Current, e2.Current) true else false - member __.Dispose() = + member _.Dispose() = try e1.Dispose() finally @@ -139,7 +139,7 @@ namespace Microsoft.FSharp.Collections let f = OptimizedClosures.FSharpFunc<_, _, _, _>.Adapt(f) upcast { new MapEnumerator<_>() with - member __.DoMoveNext curr = + member _.DoMoveNext curr = let n1 = e1.MoveNext() let n2 = e2.MoveNext() let n3 = e3.MoveNext() @@ -149,7 +149,7 @@ namespace Microsoft.FSharp.Collections true else false - member __.Dispose() = + member _.Dispose() = try e1.Dispose() finally @@ -169,48 +169,48 @@ namespace Microsoft.FSharp.Collections | Some x -> x { new IEnumerator<'U> with - member __.Current = get() + member _.Current = get() interface IEnumerator with - member __.Current = box (get()) - member __.MoveNext() = + member _.Current = box (get()) + member _.MoveNext() = if not started then started <- true curr <- None while (curr.IsNone && e.MoveNext()) do curr <- f e.Current Option.isSome curr - member __.Reset() = noReset() + member _.Reset() = noReset() interface System.IDisposable with - member __.Dispose() = e.Dispose() } + member _.Dispose() = e.Dispose() } let filter f (e : IEnumerator<'T>) = let mutable started = false let this = { new IEnumerator<'T> with - member __.Current = check started; e.Current + member _.Current = check started; e.Current interface IEnumerator with - member __.Current = check started; box e.Current - member __.MoveNext() = + member _.Current = check started; box e.Current + member _.MoveNext() = let rec next() = if not started then started <- true e.MoveNext() && (f e.Current || next()) next() - member __.Reset() = noReset() + member _.Reset() = noReset() interface System.IDisposable with - member __.Dispose() = e.Dispose() } + member _.Dispose() = e.Dispose() } this let unfold f x : IEnumerator<_> = let mutable state = x upcast { new MapEnumerator<_>() with - member __.DoMoveNext curr = + member _.DoMoveNext curr = match f state with | None -> false | Some (r,s) -> curr <- r state <- s true - member __.Dispose() = () + member _.Dispose() = () } let upto lastOption f = @@ -244,10 +244,10 @@ namespace Microsoft.FSharp.Collections // forced or re-forced immediately. current.Force() { new IEnumerator<'U> with - member __.Current = getCurrent() + member _.Current = getCurrent() interface IEnumerator with - member __.Current = box (getCurrent()) - member __.MoveNext() = + member _.Current = box (getCurrent()) + member _.MoveNext() = if index = completed then false elif index = unstarted then @@ -261,15 +261,15 @@ namespace Microsoft.FSharp.Collections setIndex (index + 1) true - member __.Reset() = noReset() + member _.Reset() = noReset() interface System.IDisposable with - member __.Dispose() = () } + member _.Dispose() = () } [] type ArrayEnumerator<'T>(arr: 'T array) = let mutable curr = -1 let mutable len = arr.Length - member __.Get() = + member _.Get() = if curr >= 0 then if curr >= len then alreadyFinished() else arr.[curr] @@ -278,7 +278,7 @@ namespace Microsoft.FSharp.Collections interface IEnumerator<'T> with member x.Current = x.Get() interface System.Collections.IEnumerator with - member __.MoveNext() = + member _.MoveNext() = if curr >= len then false else curr <- curr + 1 @@ -335,10 +335,10 @@ namespace Microsoft.FSharp.Collections // yield n } type GenerateThen<'T>(g:Generator<'T>, cont : unit -> Generator<'T>) = - member __.Generator = g - member __.Cont = cont + member _.Generator = g + member _.Cont = cont interface Generator<'T> with - member __.Apply = (fun () -> + member _.Apply = (fun () -> match appG g with | Stop -> // OK, move onto the generator given by the continuation @@ -349,7 +349,7 @@ namespace Microsoft.FSharp.Collections | Goto next -> Goto(GenerateThen<_>.Bind(next, cont))) - member __.Disposer = + member _.Disposer = g.Disposer static member Bind (g:Generator<'T>, cont) = @@ -386,9 +386,9 @@ namespace Microsoft.FSharp.Collections let mutable g = g let mutable curr = None let mutable finished = false - member __.Generator = g + member _.Generator = g interface IEnumerator<'T> with - member __.Current = + member _.Current = match curr with | Some v -> v | None -> invalidOp (SR.GetString(SR.moveNextNotCalledOrFinished)) @@ -408,21 +408,21 @@ namespace Microsoft.FSharp.Collections | Goto next -> (g <- next) (x :> IEnumerator).MoveNext() - member __.Reset() = IEnumerator.noReset() + member _.Reset() = IEnumerator.noReset() interface System.IDisposable with - member __.Dispose() = + member _.Dispose() = if not finished then disposeG g // Internal type, used to optimize Enumerator/Generator chains type LazyGeneratorWrappingEnumerator<'T>(e:IEnumerator<'T>) = - member __.Enumerator = e + member _.Enumerator = e interface Generator<'T> with - member __.Apply = (fun () -> + member _.Apply = (fun () -> if e.MoveNext() then Yield e.Current else Stop) - member __.Disposer= Some e.Dispose + member _.Disposer= Some e.Dispose let EnumerateFromGenerator(g:Generator<'T>) = match g with diff --git a/src/fsharp/FSharp.Core/seqcore.fs b/src/fsharp/FSharp.Core/seqcore.fs index 663227cb4e5..5a6e8142960 100644 --- a/src/fsharp/FSharp.Core/seqcore.fs +++ b/src/fsharp/FSharp.Core/seqcore.fs @@ -23,13 +23,13 @@ namespace Microsoft.FSharp.Collections let cast (e : IEnumerator) : IEnumerator<'T> = { new IEnumerator<'T> with - member __.Current = unbox<'T> e.Current + member _.Current = unbox<'T> e.Current interface IEnumerator with - member __.Current = unbox<'T> e.Current :> obj - member __.MoveNext() = e.MoveNext() - member __.Reset() = noReset() + member _.Current = unbox<'T> e.Current :> obj + member _.MoveNext() = e.MoveNext() + member _.Reset() = noReset() interface System.IDisposable with - member __.Dispose() = + member _.Dispose() = match e with | :? System.IDisposable as e -> e.Dispose() | _ -> () } @@ -39,20 +39,20 @@ namespace Microsoft.FSharp.Collections type EmptyEnumerator<'T>() = let mutable started = false interface IEnumerator<'T> with - member __.Current = + member _.Current = check started (alreadyFinished() : 'T) interface System.Collections.IEnumerator with - member __.Current = + member _.Current = check started (alreadyFinished() : obj) - member __.MoveNext() = + member _.MoveNext() = if not started then started <- true false - member __.Reset() = noReset() + member _.Reset() = noReset() interface System.IDisposable with - member __.Dispose() = () + member _.Dispose() = () let Empty<'T> () = (new EmptyEnumerator<'T>() :> IEnumerator<'T>) @@ -60,9 +60,9 @@ namespace Microsoft.FSharp.Collections type EmptyEnumerable<'T> = | EmptyEnumerable interface IEnumerable<'T> with - member __.GetEnumerator() = Empty<'T>() + member _.GetEnumerator() = Empty<'T>() interface IEnumerable with - member __.GetEnumerator() = (Empty<'T>() :> IEnumerator) + member _.GetEnumerator() = (Empty<'T>() :> IEnumerator) let readAndClear r = lock r (fun () -> match !r with None -> None | Some _ as res -> r := None; res) @@ -79,10 +79,10 @@ namespace Microsoft.FSharp.Collections let dispose() = readAndClear state |> Option.iter closef let finish() = try dispose() finally curr <- None { new IEnumerator<'U> with - member __.Current = getCurr() + member _.Current = getCurr() interface IEnumerator with - member __.Current = box (getCurr()) - member __.MoveNext() = + member _.Current = box (getCurr()) + member _.MoveNext() = start() match !state with | None -> false (* we started, then reached the end, then got another MoveNext *) @@ -91,33 +91,33 @@ namespace Microsoft.FSharp.Collections | None -> finish(); false | Some _ as x -> curr <- x; true - member __.Reset() = noReset() + member _.Reset() = noReset() interface System.IDisposable with - member __.Dispose() = dispose() } + member _.Dispose() = dispose() } [] type Singleton<'T>(v:'T) = let mutable started = false interface IEnumerator<'T> with - member __.Current = v + member _.Current = v interface IEnumerator with - member __.Current = box v - member __.MoveNext() = if started then false else (started <- true; true) - member __.Reset() = noReset() + member _.Current = box v + member _.MoveNext() = if started then false else (started <- true; true) + member _.Reset() = noReset() interface System.IDisposable with - member __.Dispose() = () + member _.Dispose() = () let Singleton x = (new Singleton<'T>(x) :> IEnumerator<'T>) let EnumerateThenFinally f (e : IEnumerator<'T>) = { new IEnumerator<'T> with - member __.Current = e.Current + member _.Current = e.Current interface IEnumerator with - member __.Current = (e :> IEnumerator).Current - member __.MoveNext() = e.MoveNext() - member __.Reset() = noReset() + member _.Current = (e :> IEnumerator).Current + member _.MoveNext() = e.MoveNext() + member _.Reset() = noReset() interface System.IDisposable with - member __.Dispose() = + member _.Dispose() = try e.Dispose() finally @@ -130,9 +130,9 @@ namespace Microsoft.FSharp.Collections let mkSeq f = { new IEnumerable<'U> with - member __.GetEnumerator() = f() + member _.GetEnumerator() = f() interface IEnumerable with - member __.GetEnumerator() = (f() :> IEnumerator) } + member _.GetEnumerator() = (f() :> IEnumerator) } namespace Microsoft.FSharp.Core.CompilerServices @@ -156,8 +156,8 @@ namespace Microsoft.FSharp.Core.CompilerServices static member Comparer = let gcomparer = HashIdentity.Structural<'T> { new IEqualityComparer> with - member __.GetHashCode(v) = gcomparer.GetHashCode(v.Value) - member __.Equals(v1,v2) = gcomparer.Equals(v1.Value,v2.Value) } + member _.GetHashCode(v) = gcomparer.GetHashCode(v.Value) + member _.Equals(v1,v2) = gcomparer.Equals(v1.Value,v2.Value) } let Generate openf compute closef = mkSeq (fun () -> IEnumerator.generateWhileSome openf compute closef) @@ -187,7 +187,7 @@ namespace Microsoft.FSharp.Core.CompilerServices [] type FinallyEnumerable<'T>(compensation: unit -> unit, restf: unit -> seq<'T>) = interface IEnumerable<'T> with - member __.GetEnumerator() = + member _.GetEnumerator() = try let ie = restf().GetEnumerator() match ie with @@ -215,7 +215,7 @@ namespace Microsoft.FSharp.Core.CompilerServices [] // false = unchecked val mutable private currElement : 'T - member __.Finish() = + member _.Finish() = finished <- true try match currInnerEnum with @@ -250,7 +250,7 @@ namespace Microsoft.FSharp.Core.CompilerServices if finished then IEnumerator.alreadyFinished() else x.currElement interface IFinallyEnumerator with - member __.AppendFinallyAction(f) = + member _.AppendFinallyAction(f) = compensations <- f :: compensations interface IEnumerator<'T> with @@ -291,7 +291,7 @@ namespace Microsoft.FSharp.Core.CompilerServices takeOuter() takeInner () - member __.Reset() = IEnumerator.noReset() + member _.Reset() = IEnumerator.noReset() interface System.IDisposable with member x.Dispose() = @@ -347,6 +347,10 @@ namespace Microsoft.FSharp.Core.CompilerServices { new System.IDisposable with member x.Dispose() = removeHandler h } } + let inline SetFreshConsTail cons tail = cons.( :: ).1 <- tail + + [] + let inline FreshConsNoTail head = head :: (# "ldnull" : 'T list #) [] type GeneratedSequenceBase<'T>() = @@ -399,4 +403,138 @@ namespace Microsoft.FSharp.Core.CompilerServices //[] member x.MoveNext() = x.MoveNextImpl() - member __.Reset() = raise <| new System.NotSupportedException() + member _.Reset() = raise <| new System.NotSupportedException() + + [] + type ListCollector<'T> = + [] + val mutable Result : 'T list + + [] + val mutable LastCons : 'T list + + member this.Add (value: 'T) = + match box this.Result with + | null -> + let ra = RuntimeHelpers.FreshConsNoTail value + this.Result <- ra + this.LastCons <- ra + | _ -> + let ra = RuntimeHelpers.FreshConsNoTail value + RuntimeHelpers.SetFreshConsTail this.LastCons ra + this.LastCons <- ra + + member this.AddMany (values: seq<'T>) = + // cook a faster iterator for lists and arrays + match values with + | :? ('T[]) as valuesAsArray -> + for v in valuesAsArray do + this.Add v + | :? ('T list) as valuesAsList -> + for v in valuesAsList do + this.Add v + | _ -> + for v in values do + this.Add v + + // In the particular case of closing with a final add of an F# list + // we can simply stitch the list into the end of the resulting list + member this.AddManyAndClose (values: seq<'T>) = + match values with + | :? ('T list) as valuesAsList -> + let res = + match box this.Result with + | null -> + valuesAsList + | _ -> + RuntimeHelpers.SetFreshConsTail this.LastCons valuesAsList + this.Result + this.Result <- Unchecked.defaultof<_> + this.LastCons <- Unchecked.defaultof<_> + res + | _ -> + this.AddMany values + this.Close() + + member this.Close() = + match box this.Result with + | null -> [] + | _ -> + RuntimeHelpers.SetFreshConsTail this.LastCons [] + let res = this.Result + this.Result <- Unchecked.defaultof<_> + this.LastCons <- Unchecked.defaultof<_> + res + + // Optimized for 0, 1 and 2 sized arrays + [] + type ArrayCollector<'T> = + [] + val mutable ResizeArray: ResizeArray<'T> + + [] + val mutable First: 'T + + [] + val mutable Second: 'T + + [] + val mutable Count: int + + member this.Add (value: 'T) = + match this.Count with + | 0 -> + this.Count <- 1 + this.First <- value + | 1 -> + this.Count <- 2 + this.Second <- value + | 2 -> + let ra = ResizeArray<'T>() + ra.Add(this.First) + ra.Add(this.Second) + ra.Add(value) + this.Count <- 3 + this.ResizeArray <- ra + | _ -> + this.ResizeArray.Add(value) + + member this.AddMany (values: seq<'T>) = + if this.Count > 2 then + this.ResizeArray.AddRange(values) + else + // cook a faster iterator for lists and arrays + match values with + | :? ('T[]) as valuesAsArray -> + for v in valuesAsArray do + this.Add v + | :? ('T list) as valuesAsList -> + for v in valuesAsList do + this.Add v + | _ -> + for v in values do + this.Add v + + member this.AddManyAndClose (values: seq<'T>) = + this.AddMany(values) + this.Close() + + member this.Close() = + match this.Count with + | 0 -> Array.Empty<'T>() + | 1 -> + let res = [| this.First |] + this.Count <- 0 + this.First <- Unchecked.defaultof<_> + res + | 2 -> + let res = [| this.First; this.Second |] + this.Count <- 0 + this.First <- Unchecked.defaultof<_> + this.Second <- Unchecked.defaultof<_> + res + | _ -> + let res = this.ResizeArray.ToArray() + this <- ArrayCollector<'T>() + res + diff --git a/src/fsharp/FSharp.Core/seqcore.fsi b/src/fsharp/FSharp.Core/seqcore.fsi index d0eda5641fe..9a0d9bd1055 100644 --- a/src/fsharp/FSharp.Core/seqcore.fsi +++ b/src/fsharp/FSharp.Core/seqcore.fsi @@ -149,3 +149,49 @@ namespace Microsoft.FSharp.Core.CompilerServices interface IEnumerator<'T> interface IEnumerator interface IDisposable + + /// Collects elements and builds a list + [] + type ListCollector<'T> = + [] + val mutable internal Result: 'T list + + [] + val mutable internal LastCons: 'T list + + /// Add an element to the collector + member Add: value: 'T -> unit + + /// Add multiple elements to the collector + member AddMany: values: seq<'T> -> unit + + /// Add multiple elements to the collector and return the resulting list + member AddManyAndClose: values: seq<'T> -> 'T list + + /// Return the resulting list + member Close: unit -> 'T list + + /// Collects elements and builds an array + [] + type ArrayCollector<'T> = + [] + val mutable internal ResizeArray: ResizeArray<'T> + [] + val mutable internal First: 'T + [] + val mutable internal Second: 'T + [] + val mutable internal Count: int + + /// Add an element to the collector + member Add: value: 'T -> unit + + /// Add multiple elements to the collector + member AddMany: values: seq<'T> -> unit + + /// Add multiple elements to the collector and return the resulting array + member AddManyAndClose: values: seq<'T> -> 'T[] + + /// Return the resulting list + member Close: unit -> 'T[] + diff --git a/src/fsharp/FSharp.Core/set.fs b/src/fsharp/FSharp.Core/set.fs index 0724cc522c4..769da110ee2 100644 --- a/src/fsharp/FSharp.Core/set.fs +++ b/src/fsharp/FSharp.Core/set.fs @@ -16,19 +16,19 @@ open Microsoft.FSharp.Collections [] [] -type internal SetTree<'T>(k: 'T) = +type internal SetTree<'T>(k: 'T, h: int) = + member _.Height = h member _.Key = k - + new(k: 'T) = SetTree(k,1) + [] [] [] type internal SetTreeNode<'T>(v:'T, left:SetTree<'T>, right: SetTree<'T>, h: int) = - inherit SetTree<'T>(v) - + inherit SetTree<'T>(v,h) member _.Left = left member _.Right = right - member _.Height = h - + [] module internal SetTree = @@ -36,13 +36,18 @@ module internal SetTree = let inline isEmpty (t:SetTree<'T>) = isNull t + let inline private asNode(value:SetTree<'T>) : SetTreeNode<'T> = + value :?> SetTreeNode<'T> + let rec countAux (t:SetTree<'T>) acc = if isEmpty t then acc else - match t with - | :? SetTreeNode<'T> as tn -> countAux tn.Left (countAux tn.Right (acc+1)) - | _ -> acc+1 + if t.Height = 1 then + acc + 1 + else + let tn = asNode t + countAux tn.Left (countAux tn.Right (acc+1)) let count s = countAux s 0 @@ -84,23 +89,7 @@ module internal SetTree = let inline height (t:SetTree<'T>) = if isEmpty t then 0 - else - match t with - | :? SetTreeNode<'T> as tn -> tn.Height - | _ -> 1 - -#if CHECKED - let rec checkInvariant (t:SetTree<'T>) = - // A good sanity check, loss of balance can hit perf - if isEmpty t then true - else - match t with - | :? SetTreeNode<'T> as tn -> - let h1 = height tn.Left - let h2 = height tn.Right - (-2 <= (h1 - h2) && (h1 - h2) <= 2) && checkInvariant tn.Left && checkInvariant tn.Right - | _ -> true -#endif + else t.Height [] let private tolerance = 2 @@ -114,9 +103,6 @@ module internal SetTree = else SetTreeNode (k, l, r, m+1) :> SetTree<'T> - let inline private asNode(value:SetTree<'T>) : SetTreeNode<'T> = - value :?> SetTreeNode<'T> - let rebalance t1 v t2 = let t1h = height t1 let t2h = height t2 @@ -144,17 +130,16 @@ module internal SetTree = if isEmpty t then SetTree k else let c = comparer.Compare(k, t.Key) - match t with - | :? SetTreeNode<'T> as tn -> - if c < 0 then rebalance (add comparer k tn.Left) tn.Key tn.Right - elif c = 0 then t - else rebalance tn.Left tn.Key (add comparer k tn.Right) - | _ -> + if t.Height = 1 then // nb. no check for rebalance needed for small trees, also be sure to reuse node already allocated - let c = comparer.Compare(k, t.Key) if c < 0 then SetTreeNode (k, empty, t, 2) :> SetTree<'T> elif c = 0 then t else SetTreeNode (k, t, empty, 2) :> SetTree<'T> + else + let tn = asNode t + if c < 0 then rebalance (add comparer k tn.Left) tn.Key tn.Right + elif c = 0 then t + else rebalance tn.Left tn.Key (add comparer k tn.Right) let rec balance comparer (t1:SetTree<'T>) k (t2:SetTree<'T>) = // Given t1 < k < t2 where t1 and t2 are "balanced", @@ -163,10 +148,12 @@ module internal SetTree = if isEmpty t1 then add comparer k t2 // drop t1 = empty elif isEmpty t2 then add comparer k t1 // drop t2 = empty else - match t1 with - | :? SetTreeNode<'T> as t1n -> - match t2 with - | :? SetTreeNode<'T> as t2n -> + if t1.Height = 1 then add comparer k (add comparer t1.Key t2) + else + let t1n = asNode t1 + if t2.Height = 1 then add comparer k (add comparer t2.Key t1) + else + let t2n = asNode t2 // Have: (t1l < k1 < t1r) < k < (t2l < k2 < t2r) // Either (a) h1, h2 differ by at most 2 - no rebalance needed. // (b) h1 too small, i.e. h1+2 < h2 @@ -182,16 +169,19 @@ module internal SetTree = else // case: a, h1 and h2 meet balance requirement mk t1 k t2 - | _ -> add comparer k (add comparer t2.Key t1) - | _ -> add comparer k (add comparer t1.Key t2) let rec split (comparer: IComparer<'T>) pivot (t:SetTree<'T>) = // Given a pivot and a set t // Return { x in t s.t. x < pivot }, pivot in t?, { x in t s.t. x > pivot } if isEmpty t then empty, false, empty else - match t with - | :? SetTreeNode<'T> as tn -> + if t.Height = 1 then + let c = comparer.Compare(t.Key, pivot) + if c < 0 then t, false, empty // singleton under pivot + elif c = 0 then empty, true, empty // singleton is pivot + else empty, false, t // singleton over pivot + else + let tn = asNode t let c = comparer.Compare(pivot, tn.Key) if c < 0 then // pivot t1 let t11Lo, havePivot, t11Hi = split comparer pivot tn.Left @@ -201,27 +191,24 @@ module internal SetTree = else // pivot t2 let t12Lo, havePivot, t12Hi = split comparer pivot tn.Right balance comparer tn.Left tn.Key t12Lo, havePivot, t12Hi - | _ -> - let c = comparer.Compare(t.Key, pivot) - if c < 0 then t, false, empty // singleton under pivot - elif c = 0 then empty, true, empty // singleton is pivot - else empty, false, t // singleton over pivot let rec spliceOutSuccessor (t:SetTree<'T>) = if isEmpty t then failwith "internal error: Set.spliceOutSuccessor" else - match t with - | :? SetTreeNode<'T> as tn -> + if t.Height = 1 then t.Key, empty + else + let tn = asNode t if isEmpty tn.Left then tn.Key, tn.Right else let k3, l' = spliceOutSuccessor tn.Left in k3, mk l' tn.Key tn.Right - | _ -> t.Key, empty let rec remove (comparer: IComparer<'T>) k (t:SetTree<'T>) = if isEmpty t then t else let c = comparer.Compare(k, t.Key) - match t with - | :? SetTreeNode<'T> as tn -> + if t.Height = 1 then + if c = 0 then empty else t + else + let tn = asNode t if c < 0 then rebalance (remove comparer k tn.Left) tn.Key tn.Right elif c = 0 then if isEmpty tn.Left then tn.Right @@ -229,63 +216,64 @@ module internal SetTree = else let sk, r' = spliceOutSuccessor tn.Right mk tn.Left sk r' - else rebalance tn.Left tn.Key (remove comparer k tn.Right) - | _ -> - if c = 0 then empty - else t + else rebalance tn.Left tn.Key (remove comparer k tn.Right) let rec mem (comparer: IComparer<'T>) k (t:SetTree<'T>) = if isEmpty t then false else let c = comparer.Compare(k, t.Key) - match t with - | :? SetTreeNode<'T> as tn -> + if t.Height = 1 then (c = 0) + else + let tn = asNode t if c < 0 then mem comparer k tn.Left elif c = 0 then true else mem comparer k tn.Right - | _ -> (c = 0) let rec iter f (t:SetTree<'T>) = if isEmpty t then () else - match t with - | :? SetTreeNode<'T> as tn -> iter f tn.Left; f tn.Key; iter f tn.Right - | _ -> f t.Key + if t.Height = 1 then f t.Key + else + let tn = asNode t + iter f tn.Left; f tn.Key; iter f tn.Right let rec foldBackOpt (f:OptimizedClosures.FSharpFunc<_, _, _>) (t:SetTree<'T>) x = if isEmpty t then x else - match t with - | :? SetTreeNode<'T> as tn -> foldBackOpt f tn.Left (f.Invoke(tn.Key, (foldBackOpt f tn.Right x))) - | _ -> f.Invoke(t.Key, x) + if t.Height = 1 then f.Invoke(t.Key, x) + else + let tn = asNode t + foldBackOpt f tn.Left (f.Invoke(tn.Key, (foldBackOpt f tn.Right x))) let foldBack f m x = foldBackOpt (OptimizedClosures.FSharpFunc<_, _, _>.Adapt f) m x let rec foldOpt (f:OptimizedClosures.FSharpFunc<_, _, _>) x (t:SetTree<'T>) = if isEmpty t then x else - match t with - | :? SetTreeNode<'T> as tn -> + if t.Height = 1 then f.Invoke(x, t.Key) + else + let tn = asNode t let x = foldOpt f x tn.Left in let x = f.Invoke(x, tn.Key) foldOpt f x tn.Right - | _ -> f.Invoke(x, t.Key) let fold f x m = foldOpt (OptimizedClosures.FSharpFunc<_, _, _>.Adapt f) x m let rec forall f (t:SetTree<'T>) = if isEmpty t then true else - match t with - | :? SetTreeNode<'T> as tn -> f tn.Key && forall f tn.Left && forall f tn.Right - | _ -> f t.Key + if t.Height = 1 then f t.Key + else + let tn = asNode t + f tn.Key && forall f tn.Left && forall f tn.Right let rec exists f (t:SetTree<'T>) = if isEmpty t then false else - match t with - | :? SetTreeNode<'T> as tn -> f tn.Key || exists f tn.Left || exists f tn.Right - | _ -> f t.Key + if t.Height = 1 then f t.Key + else + let tn = asNode t + f tn.Key || exists f tn.Left || exists f tn.Right let subset comparer a b = forall (fun x -> mem comparer x b) a @@ -296,11 +284,12 @@ module internal SetTree = let rec filterAux comparer f (t:SetTree<'T>) acc = if isEmpty t then acc else - match t with - | :? SetTreeNode<'T> as tn -> + if t.Height = 1 then + if f t.Key then add comparer t.Key acc else acc + else + let tn = asNode t let acc = if f tn.Key then add comparer tn.Key acc else acc filterAux comparer f tn.Left (filterAux comparer f tn.Right acc) - | _ -> if f t.Key then add comparer t.Key acc else acc let filter comparer f s = filterAux comparer f s empty @@ -309,9 +298,10 @@ module internal SetTree = else if isEmpty t then acc else - match t with - | :? SetTreeNode<'T> as tn -> diffAux comparer tn.Left (diffAux comparer tn.Right (remove comparer tn.Key acc)) - | _ -> remove comparer t.Key acc + if t.Height = 1 then remove comparer t.Key acc + else + let tn = asNode t + diffAux comparer tn.Left (diffAux comparer tn.Right (remove comparer tn.Key acc)) let diff comparer a b = diffAux comparer b a @@ -320,10 +310,12 @@ module internal SetTree = if isEmpty t1 then t2 elif isEmpty t2 then t1 else - match t1 with - | :? SetTreeNode<'T> as t1n -> - match t2 with - | :? SetTreeNode<'T> as t2n -> // (t1l < k < t1r) AND (t2l < k2 < t2r) + if t1.Height = 1 then add comparer t1.Key t2 + else + if t2.Height = 1 then add comparer t2.Key t1 + else + let t1n = asNode t1 + let t2n = asNode t2 // (t1l < k < t1r) AND (t2l < k2 < t2r) // Divide and Conquer: // Suppose t1 is largest. // Split t2 using pivot k1 into lo and hi. @@ -334,19 +326,17 @@ module internal SetTree = else let lo, _, hi = split comparer t2n.Key t1 in balance comparer (union comparer t2n.Left lo) t2n.Key (union comparer t2n.Right hi) - | _ -> add comparer t2.Key t1 - | _ -> add comparer t1.Key t2 let rec intersectionAux comparer b (t:SetTree<'T>) acc = if isEmpty t then acc else - match t with - | :? SetTreeNode<'T> as tn -> + if t.Height = 1 then + if mem comparer t.Key b then add comparer t.Key acc else acc + else + let tn = asNode t let acc = intersectionAux comparer b tn.Right acc let acc = if mem comparer tn.Key b then add comparer tn.Key acc else acc intersectionAux comparer b tn.Left acc - | _ -> - if mem comparer t.Key b then add comparer t.Key acc else acc let intersection comparer a b = intersectionAux comparer b a empty @@ -355,42 +345,46 @@ module internal SetTree = let rec partitionAux comparer f (t:SetTree<'T>) acc = if isEmpty t then acc else - match t with - | :? SetTreeNode<'T> as tn -> + if t.Height = 1 then partition1 comparer f t.Key acc + else + let tn = asNode t let acc = partitionAux comparer f tn.Right acc let acc = partition1 comparer f tn.Key acc partitionAux comparer f tn.Left acc - | _ -> partition1 comparer f t.Key acc let partition comparer f s = partitionAux comparer f s (empty, empty) let rec minimumElementAux (t:SetTree<'T>) n = if isEmpty t then n else - match t with - | :? SetTreeNode<'T> as tn -> minimumElementAux tn.Left tn.Key - | _ -> t.Key + if t.Height = 1 then t.Key + else + let tn = asNode t + minimumElementAux tn.Left tn.Key and minimumElementOpt (t:SetTree<'T>) = if isEmpty t then None else - match t with - | :? SetTreeNode<'T> as tn -> Some(minimumElementAux tn.Left tn.Key) - | _ -> Some t.Key + if t.Height = 1 then Some t.Key + else + let tn = asNode t + Some(minimumElementAux tn.Left tn.Key) and maximumElementAux (t:SetTree<'T>) n = if isEmpty t then n else - match t with - | :? SetTreeNode<'T> as tn -> maximumElementAux tn.Right tn.Key - | _ -> t.Key + if t.Height = 1 then t.Key + else + let tn = asNode t + maximumElementAux tn.Right tn.Key and maximumElementOpt (t:SetTree<'T>) = if isEmpty t then None else - match t with - | :? SetTreeNode<'T> as tn -> Some(maximumElementAux tn.Right tn.Key) - | _ -> Some t.Key + if t.Height = 1 then Some t.Key + else + let tn = asNode t + Some(maximumElementAux tn.Right tn.Key) let minimumElement s = match minimumElementOpt s with @@ -418,9 +412,10 @@ module internal SetTree = | x :: rest -> if isEmpty x then collapseLHS rest else - match x with - | :? SetTreeNode<'T> as xn-> collapseLHS (xn.Left :: SetTree xn.Key :: xn.Right :: rest) - | _ -> stack + if x.Height = 1 then stack + else + let xn = asNode x + collapseLHS (xn.Left :: SetTree xn.Key :: xn.Right :: rest) let mkIterator s = { stack = collapseLHS [s]; started = false } @@ -436,16 +431,19 @@ module internal SetTree = else notStarted() + let unexpectedStackForMoveNext() = failwith "Please report error: Set iterator, unexpected stack for moveNext" + let unexpectedstateInSetTreeCompareStacks() = failwith "unexpected state in SetTree.compareStacks" + let rec moveNext i = if i.started then match i.stack with | [] -> false | t :: rest -> - match t with - | :? SetTreeNode<'T> -> failwith "Please report error: Set iterator, unexpected stack for moveNext" - | _ -> + if t.Height = 1 then i.stack <- collapseLHS rest - not i.stack.IsEmpty + not i.stack.IsEmpty + else + unexpectedStackForMoveNext() else i.started <- true; // The first call to MoveNext "starts" the enumeration. not i.stack.IsEmpty @@ -453,29 +451,31 @@ module internal SetTree = let mkIEnumerator s = let mutable i = mkIterator s { new IEnumerator<_> with - member __.Current = current i + member _.Current = current i interface IEnumerator with - member __.Current = box (current i) - member __.MoveNext() = moveNext i - member __.Reset() = i <- mkIterator s + member _.Current = box (current i) + member _.MoveNext() = moveNext i + member _.Reset() = i <- mkIterator s interface System.IDisposable with - member __.Dispose() = () } + member _.Dispose() = () } /// Set comparison. Note this can be expensive. let rec compareStacks (comparer: IComparer<'T>) (l1:SetTree<'T> list) (l2:SetTree<'T> list) : int = let cont() = match l1, l2 with | (x1 :: t1), _ when not (isEmpty x1) -> - match x1 with - | :? SetTreeNode<'T> as x1n -> + if x1.Height = 1 then + compareStacks comparer (empty :: SetTree x1.Key :: t1) l2 + else + let x1n = asNode x1 compareStacks comparer (x1n.Left :: (SetTreeNode (x1n.Key, empty, x1n.Right, 0) :> SetTree<'T>) :: t1) l2 - | _ -> compareStacks comparer (empty :: SetTree x1.Key :: t1) l2 | _, (x2 :: t2) when not (isEmpty x2) -> - match x2 with - | :? SetTreeNode<'T> as x2n -> + if x2.Height = 1 then + compareStacks comparer l1 (empty :: SetTree x2.Key :: t2) + else + let x2n = asNode x2 compareStacks comparer l1 (x2n.Left :: (SetTreeNode (x2n.Key, empty, x2n.Right, 0) :> SetTree<'T> ) :: t2) - | _ -> compareStacks comparer l1 (empty :: SetTree x2.Key :: t2) - | _ -> failwith "unexpected state in SetTree.compareStacks" + | _ -> unexpectedstateInSetTreeCompareStacks() match l1, l2 with | [], [] -> 0 @@ -487,30 +487,30 @@ module internal SetTree = else cont() elif isEmpty x2 then cont() else - match x1 with - | :? SetTreeNode<'T> as x1n -> + if x1.Height = 1 then + if x2.Height = 1 then + let c = comparer.Compare(x1.Key, x2.Key) + if c <> 0 then c else compareStacks comparer t1 t2 + else + let x2n = asNode x2 + if isEmpty x2n.Left then + let c = comparer.Compare(x1.Key, x2n.Key) + if c <> 0 then c else compareStacks comparer (empty :: t1) (x2n.Right :: t2) + else cont() + else + let x1n = asNode x1 if isEmpty x1n.Left then - match x2 with - | :? SetTreeNode<'T> as x2n -> + if x2.Height = 1 then + let c = comparer.Compare(x1n.Key, x2.Key) + if c <> 0 then c else compareStacks comparer (x1n.Right :: t1) (empty :: t2) + else + let x2n = asNode x2 if isEmpty x2n.Left then let c = comparer.Compare(x1n.Key, x2n.Key) if c <> 0 then c else compareStacks comparer (x1n.Right :: t1) (x2n.Right :: t2) else cont() - | _ -> - let c = comparer.Compare(x1n.Key, x2.Key) - if c <> 0 then c else compareStacks comparer (x1n.Right :: t1) (empty :: t2) else cont() - | _ -> - match x2 with - | :? SetTreeNode<'T> as x2n -> - if isEmpty x2n.Left then - let c = comparer.Compare(x1.Key, x2n.Key) - if c <> 0 then c else compareStacks comparer (empty :: t1) (x2n.Right :: t2) - else cont() - | _ -> - let c = comparer.Compare(x1.Key, x2.Key) - if c <> 0 then c else compareStacks comparer t1 t2 - + let compare comparer (t1:SetTree<'T>) (t2:SetTree<'T>) = if isEmpty t1 then if isEmpty t2 then 0 @@ -526,9 +526,10 @@ module internal SetTree = let rec loop (t':SetTree<'T>) acc = if isEmpty t' then acc else - match t' with - | :? SetTreeNode<'T> as tn -> loop tn.Left (tn.Key :: loop tn.Right acc) - | _ -> t'.Key :: acc + if t'.Height = 1 then t'.Key :: acc + else + let tn = asNode t' + loop tn.Left (tn.Key :: loop tn.Right acc) loop t [] let copyToArray s (arr: _[]) i = @@ -581,17 +582,17 @@ type Set<[]'T when 'T: comparison >(comparer:IComparer<'T Set<'T>(comparer, SetTree.empty) [] - member __.OnSerializing(context: System.Runtime.Serialization.StreamingContext) = + member _.OnSerializing(context: System.Runtime.Serialization.StreamingContext) = ignore context serializedData <- SetTree.toArray tree // Do not set this to null, since concurrent threads may also be serializing the data //[] - //member __.OnSerialized(context: System.Runtime.Serialization.StreamingContext) = + //member _.OnSerialized(context: System.Runtime.Serialization.StreamingContext) = // serializedData <- null [] - member __.OnDeserialized(context: System.Runtime.Serialization.StreamingContext) = + member _.OnDeserialized(context: System.Runtime.Serialization.StreamingContext) = ignore context comparer <- LanguagePrimitives.FastGenericComparer<'T> tree <- SetTree.ofArray comparer serializedData diff --git a/src/fsharp/FSharp.Core/string.fs b/src/fsharp/FSharp.Core/string.fs index 4f73f15a99d..37e8fcd7d68 100644 --- a/src/fsharp/FSharp.Core/string.fs +++ b/src/fsharp/FSharp.Core/string.fs @@ -14,7 +14,7 @@ namespace Microsoft.FSharp.Core [] module String = [] - /// LOH threshold is calculated from FSharp.Compiler.AbstractIL.Internal.Library.LOH_SIZE_THRESHOLD_BYTES, + /// LOH threshold is calculated from Internal.Utilities.Library.LOH_SIZE_THRESHOLD_BYTES, /// and is equal to 80_000 / sizeof let LOH_CHAR_THRESHOLD = 40_000 diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Nuget.fsproj b/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Nuget.fsproj index b308308aada..6c1f6fa60bd 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Nuget.fsproj +++ b/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Nuget.fsproj @@ -21,6 +21,9 @@ + + + diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.ProjectFile.fs b/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.ProjectFile.fs index b49bec94db9..315f8e91497 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.ProjectFile.fs +++ b/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.ProjectFile.fs @@ -64,7 +64,7 @@ module internal ProjectFile = let findIncludesFromResolutions (resolutions:Resolution[]) = let managedRoots = resolutions - |> Array.filter(fun r -> + |> Array.filter(fun r -> not(String.IsNullOrEmpty(r.NugetPackageId) || String.IsNullOrEmpty(r.PackageRoot)) && Directory.Exists(r.PackageRoot)) @@ -136,10 +136,11 @@ $(POUND_R) $(TARGETFRAMEWORK) $(RUNTIMEIDENTIFIER) false + <_NETCoreSdkIsPreview>false + true true - true $(MSBuildAllProjects);$(MSBuildThisFileFullPath) @@ -274,8 +275,8 @@ $(PACKAGEREFERENCES) KeepDuplicates="false" /> - diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Utilities.fs b/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Utilities.fs index 26fe0ca5151..8519a6daaff 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Utilities.fs +++ b/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.Utilities.fs @@ -6,6 +6,8 @@ open System.Diagnostics open System.IO open System.Reflection open FSDependencyManager +open System.Runtime.InteropServices +open Internal.Utilities.FSharpEnvironment [] type DependencyManagerAttribute() = inherit System.Attribute() @@ -67,94 +69,7 @@ module internal Utilities = |> List.ofSeq |> List.map (fun option -> split option) - // Path to the directory containing the fsharp compilers - let fsharpCompilerPath = Path.GetDirectoryName(typeof.GetTypeInfo().Assembly.Location) - - // We are running on dotnet core if the executing mscorlib is System.Private.CoreLib - let isRunningOnCoreClr = (typeof.Assembly).FullName.StartsWith("System.Private.CoreLib", StringComparison.InvariantCultureIgnoreCase) - - let isWindows = - match Environment.OSVersion.Platform with - | PlatformID.Unix -> false - | PlatformID.MacOSX -> false - | _ -> true - - let dotnet = - if isWindows then "dotnet.exe" else "dotnet" - - let sdks = "Sdks" - - let msbuildExePath = - // Find msbuild.exe when invoked from desktop compiler. - // 1. Look relative to F# compiler location Normal retail build - // 2. Use VSAPPDIR Nightly when started from VS, or F5 - // 3. Use VSINSTALLDIR -- When app is run outside of VS, and - // is not copied relative to a vs install. - let vsRootFromVSAPPIDDIR = - let vsappiddir = Environment.GetEnvironmentVariable("VSAPPIDDIR") - if not (String.IsNullOrEmpty(vsappiddir)) then - Path.GetFullPath(Path.Combine(vsappiddir, "../..")) - else - null - - let roots = [| - Path.GetFullPath(Path.Combine(fsharpCompilerPath, "../../../../..")) - vsRootFromVSAPPIDDIR - Environment.GetEnvironmentVariable("VSINSTALLDIR") - |] - - let msbuildPath root = Path.GetFullPath(Path.Combine(root, "MSBuild/Current/Bin/MSBuild.exe")) - - let msbuildPathExists root = - if String.IsNullOrEmpty(root) then - false - else - File.Exists(msbuildPath root) - - let msbuildOption rootOpt = - match rootOpt with - | Some root -> Some (msbuildPath root) - | _ -> None - - roots |> Array.tryFind(fun root -> msbuildPathExists root) |> msbuildOption - - let dotnetHostPath = - // How to find dotnet.exe --- woe is me; probing rules make me sad. - // Algorithm: - // 1. Look for DOTNET_HOST_PATH environment variable - // this is the main user programable override .. provided by user to find a specific dotnet.exe - // 2. Probe for are we part of an .NetSDK install - // In an sdk install we are always installed in: sdk\3.0.100-rc2-014234\FSharp - // dotnet or dotnet.exe will be found in the directory that contains the sdk directory - // 3. We are loaded in-process to some other application ... Eg. try .net - // See if the host is dotnet.exe ... from netcoreapp3.1 on this is fairly unlikely - // 4. If it's none of the above we are going to have to rely on the path containing the way to find dotnet.exe - // - if isRunningOnCoreClr then - match (Environment.GetEnvironmentVariable("DOTNET_HOST_PATH")) with - | value when not (String.IsNullOrEmpty(value)) -> - Some value // Value set externally - | _ -> - // Probe for netsdk install, dotnet. and dotnet.exe is a constant offset from the location of System.Int32 - let dotnetLocation = - let dotnetApp = - let platform = Environment.OSVersion.Platform - if platform = PlatformID.Unix then "dotnet" else "dotnet.exe" - let assemblyLocation = Path.GetDirectoryName(typeof.GetTypeInfo().Assembly.Location) - Path.GetFullPath(Path.Combine(assemblyLocation, "../../..", dotnetApp)) - - if File.Exists(dotnetLocation) then - Some dotnetLocation - else - let main = Process.GetCurrentProcess().MainModule - if main.ModuleName ="dotnet" then - Some main.FileName - else - Some dotnet - else - None - - let executeBuild pathToExe arguments workingDir timeout = + let executeTool pathToExe arguments workingDir timeout = match pathToExe with | Some path -> let errorsList = ResizeArray() @@ -192,12 +107,7 @@ module internal Utilities = // Timed out resolving throw a diagnostic. raise (new TimeoutException(SR.timedoutResolvingPackages(psi.FileName, psi.Arguments))) else - () - -#if DEBUG - File.WriteAllLines(Path.Combine(workingDir, "StandardOutput.txt"), outputList) - File.WriteAllLines(Path.Combine(workingDir, "StandardError.txt"), errorsList) -#endif + p.WaitForExit() p.ExitCode = 0, outputList.ToArray(), errorsList.ToArray() | None -> false, Array.empty, Array.empty @@ -223,12 +133,12 @@ module internal Utilities = let workingDir = Path.GetDirectoryName projectPath let success, stdOut, stdErr = - if not (isRunningOnCoreClr) then - // The Desktop build uses "msbuild" to build - executeBuild msbuildExePath (arguments "-v:quiet") workingDir timeout - else - // The coreclr uses "dotnet msbuild" to build - executeBuild dotnetHostPath (arguments "msbuild -v:quiet") workingDir timeout + executeTool (getDotnetHostPath()) (arguments "msbuild -v:quiet") workingDir timeout + +#if DEBUG + File.WriteAllLines(Path.Combine(workingDir, "build_StandardOutput.txt"), stdOut) + File.WriteAllLines(Path.Combine(workingDir, "build_StandardError.txt"), stdErr) +#endif let outputFile = projectPath + ".resolvedReferences.paths" let resolutionsFile = if success && File.Exists(outputFile) then Some outputFile else None @@ -237,3 +147,24 @@ module internal Utilities = stdOut = stdOut stdErr = stdErr resolutionsFile = resolutionsFile } + + let generateSourcesFromNugetConfigs scriptDirectory workingDir timeout = + let success, stdOut, stdErr = + executeTool (getDotnetHostPath()) "nuget list source --format short" scriptDirectory timeout +#if DEBUG + File.WriteAllLines(Path.Combine(workingDir, "nuget_StandardOutput.txt"), stdOut) + File.WriteAllLines(Path.Combine(workingDir, "nuget_StandardError.txt"), stdErr) +#else + ignore workingDir + ignore stdErr +#endif + seq { + if success then + for source in stdOut do + // String returned by dotnet nuget list source --format short + // is formatted similar to: + // E https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json + // So strip off the flags + let pos = source.IndexOf(" ") + if pos >= 0 then yield ("i", source.Substring(pos).Trim()) + } diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.fs b/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.fs index e83e7dc9ec0..7cca8c23f5c 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.fs +++ b/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.fs @@ -172,13 +172,13 @@ type ResolveDependenciesResult (success: bool, stdOut: string array, stdError: s member _.Roots = roots [] -type FSharpDependencyManager (outputDir:string option) = +type FSharpDependencyManager (outputDirectory:string option) = let key = "nuget" let name = "MsBuild Nuget DependencyManager" - let scriptsPath = + let workingDirectory = let path = Path.Combine(Path.GetTempPath(), key, Process.GetCurrentProcess().Id.ToString() + "--"+ Guid.NewGuid().ToString()) - match outputDir with + match outputDirectory with | None -> path | Some v -> Path.Combine(path, v) @@ -187,8 +187,8 @@ type FSharpDependencyManager (outputDir:string option) = let deleteScripts () = try #if !Debug - if Directory.Exists(scriptsPath) then - Directory.Delete(scriptsPath, true) + if Directory.Exists(workingDirectory) then + Directory.Delete(workingDirectory, true) #else () #endif @@ -196,8 +196,8 @@ type FSharpDependencyManager (outputDir:string option) = let deleteAtExit = try - if not (File.Exists(scriptsPath)) then - Directory.CreateDirectory(scriptsPath) |> ignore + if not (Directory.Exists(workingDirectory)) then + Directory.CreateDirectory(workingDirectory) |> ignore true with | _ -> false @@ -208,14 +208,14 @@ type FSharpDependencyManager (outputDir:string option) = sw.WriteLine(body) with | _ -> () - let prepareDependencyResolutionFiles (scriptExt: string, packageManagerTextLines: (string * string) seq, targetFrameworkMoniker: string, runtimeIdentifier: string, timeout: int): PackageBuildResolutionResult = + let prepareDependencyResolutionFiles (scriptExt: string, directiveLines: (string * string) seq, targetFrameworkMoniker: string, runtimeIdentifier: string, timeout: int): PackageBuildResolutionResult = let scriptExt = match scriptExt with | ".csx" -> csxExt | _ -> fsxExt let packageReferences, binLogPath, package_timeout = - packageManagerTextLines + directiveLines |> List.ofSeq |> FSharpDependencyManager.parsePackageDirective scriptExt @@ -226,7 +226,7 @@ type FSharpDependencyManager (outputDir:string option) = let packageReferenceText = String.Join(Environment.NewLine, packageReferenceLines) - let projectPath = Path.Combine(scriptsPath, "Project.fsproj") + let projectPath = Path.Combine(workingDirectory, "Project.fsproj") let generateAndBuildProjectArtifacts = let writeFile path body = @@ -260,24 +260,27 @@ type FSharpDependencyManager (outputDir:string option) = sprintf """ #r "nuget:FSharp.Data";; // %s 'FSharp.Data' %s""" (SR.loadNugetPackage()) (SR.highestVersion()) |] - member this.ResolveDependencies(scriptExt: string, packageManagerTextLines: (string * string) seq, targetFrameworkMoniker: string, runtimeIdentifier: string, timeout: int) : obj = + member this.ResolveDependencies(scriptDirectory: string, scriptName: string, scriptExt: string, packageManagerTextLines: (string * string) seq, targetFrameworkMoniker: string, runtimeIdentifier: string, timeout: int) : obj = + ignore scriptName let poundRprefix = match scriptExt with | ".csx" -> "#r \"" | _ -> "#r @\"" let generateAndBuildProjectArtifacts = - let resolutionResult = prepareDependencyResolutionFiles (scriptExt, packageManagerTextLines, targetFrameworkMoniker, runtimeIdentifier, timeout) + let configIncludes = generateSourcesFromNugetConfigs scriptDirectory workingDirectory timeout + let directiveLines = Seq.append packageManagerTextLines configIncludes + let resolutionResult = prepareDependencyResolutionFiles (scriptExt, directiveLines, targetFrameworkMoniker, runtimeIdentifier, timeout) match resolutionResult.resolutionsFile with | Some file -> let resolutions = getResolutionsFromFile file let references = (findReferencesFromResolutions resolutions) |> Array.toSeq let scripts = - let scriptPath = resolutionResult.projectPath + scriptExt - let scriptBody = makeScriptFromReferences references poundRprefix - emitFile scriptPath scriptBody + let generatedScriptPath = resolutionResult.projectPath + scriptExt + let generatedScriptBody = makeScriptFromReferences references poundRprefix + emitFile generatedScriptPath generatedScriptBody let loads = (findLoadsFromResolutions resolutions) |> Array.toList - List.concat [ [scriptPath]; loads] |> List.toSeq + List.concat [ [generatedScriptPath]; loads] |> List.toSeq let includes = (findIncludesFromResolutions resolutions) |> Array.toSeq ResolveDependenciesResult(resolutionResult.success, resolutionResult.stdOut, resolutionResult.stdErr, references, scripts, includes) diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.fsi b/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.fsi index db34173c7f1..1238f80882b 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.fsi +++ b/src/fsharp/FSharp.DependencyManager.Nuget/FSharp.DependencyManager.fsi @@ -41,7 +41,7 @@ type ResolveDependenciesResult = [] type FSharpDependencyManager = - new: outputDir:string option -> FSharpDependencyManager + new: outputDirectory:string option -> FSharpDependencyManager member Name: string @@ -49,4 +49,4 @@ type FSharpDependencyManager = member HelpMessages:string[] - member ResolveDependencies: scriptExt: string * packageManagerTextLines: (string * string) seq * targetFrameworkMoniker: string * runtimeIdentifier: string * timeout: int-> obj + member ResolveDependencies: scriptDirectory: string * scriptName: string * scriptExt: string * packageManagerTextLines: (string * string) seq * targetFrameworkMoniker: string * runtimeIdentifier: string * timeout: int-> obj diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/README.md b/src/fsharp/FSharp.DependencyManager.Nuget/README.md index ed6d3262313..01927f4edcb 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/README.md +++ b/src/fsharp/FSharp.DependencyManager.Nuget/README.md @@ -13,5 +13,3 @@ let o = {| X = 2; Y = "Hello" |} printfn "%s" (JsonConvert.SerializeObject o)" ``` - -There are more Dependency Manager extensions, find more about them: [Microsoft.DotNet.DependencyManager](https://github.com/dotnet/fsharp/tree/main/src/fsharp/Microsoft.DotNet.DependencyManager) diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.cs.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.cs.xlf index 6d1e714fffe..2866d233f47 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.cs.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.cs.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait + Neplatná hodnota pro časový limit {0}. Platné hodnoty: none, -1 a celočíselný počet milisekund, po které se má počkat @@ -24,7 +24,7 @@ Missing value for timeout - Missing value for timeout + Chybí hodnota pro časový limit @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Timed out resolving packages, process: '{0}' '{1}' + Při řešení balíčků vypršel časový limit. Proces: {0} {1} diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.de.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.de.xlf index 54771a9aa69..3d060a10414 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.de.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.de.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait + Ungültiger Wert für Timeout "{0}", gültige Werte: keine, -1 und ganzzahlige Millisekundenwerte für die Wartezeit @@ -24,7 +24,7 @@ Missing value for timeout - Missing value for timeout + Fehlender Wert für Timeout @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Timed out resolving packages, process: '{0}' '{1}' + Timeout beim Auflösen von Paketen, Prozess: "{0}" "{1}" diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.es.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.es.xlf index 38ae9838c49..5b8974e7605 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.es.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.es.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait + Valor de tiempo de espera "{0}" no válido. Valores válidos: ninguno, -1 y un número entero de milisegundos de espera @@ -24,7 +24,7 @@ Missing value for timeout - Missing value for timeout + Falta un valor para el tiempo de espera @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Timed out resolving packages, process: '{0}' '{1}' + Se agotó el tiempo de espera en la resolución de paquetes, proceso: "{0}" "{1}" diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.fr.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.fr.xlf index c3d489413c6..58f97bce018 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.fr.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.fr.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait + Valeur non valide pour le délai d'expiration : '{0}'. Valeurs valides : aucune valeur, -1 ou un nombre entier pour le délai d'attente en millisecondes @@ -24,7 +24,7 @@ Missing value for timeout - Missing value for timeout + Valeur manquante pour le délai d'expiration @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Timed out resolving packages, process: '{0}' '{1}' + Expiration du délai de résolution des packages. Processus : '{0}' '{1}' diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.it.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.it.xlf index bde3abd644b..e840741112b 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.it.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.it.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait + Valore non valido per il timeout '{0}'. I valori validi sono: nessuno, -1 e numeri interi per i millisecondi di attesa @@ -24,7 +24,7 @@ Missing value for timeout - Missing value for timeout + Manca il valore per il timeout @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Timed out resolving packages, process: '{0}' '{1}' + Timeout durante la risoluzione dei pacchetti. Processo: '{0}' '{1}' diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ja.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ja.xlf index 41883b2b5d0..f0437133108 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ja.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ja.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait + タイムアウト '{0}' の値が無効です。有効な値: なし、-1、および整数 (待機するミリ秒) @@ -24,7 +24,7 @@ Missing value for timeout - Missing value for timeout + タイムアウトの値がありません @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Timed out resolving packages, process: '{0}' '{1}' + パッケージの解決中にタイムアウトになりました。プロセス: '{0}' '{1}' diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ko.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ko.xlf index baa2f51913a..53d85ca1b4f 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ko.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ko.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait + 시간 제한 '{0}'의 값이 잘못되었습니다. 유효한 값: 없음, -1 및 정수 대기 시간(밀리초) @@ -24,7 +24,7 @@ Missing value for timeout - Missing value for timeout + 시간 제한 값 누락 @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Timed out resolving packages, process: '{0}' '{1}' + 패키지를 확인하는 동안 시간이 초과되었습니다. 프로세스: '{0}' '{1}' diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.pl.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.pl.xlf index d1e492e63cd..9a908307899 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.pl.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.pl.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait + Nieprawidłowa wartość limitu czasu „{0}”; prawidłowe wartości: none, -1 i liczba całkowita określająca liczbę milisekund oczekiwania @@ -24,7 +24,7 @@ Missing value for timeout - Missing value for timeout + Brak wartości limitu czasu @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Timed out resolving packages, process: '{0}' '{1}' + Przekroczono limit czasu podczas rozpoznawania pakietów, proces: „{0}” „{1}” diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.pt-BR.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.pt-BR.xlf index f4797e17455..af23785016a 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.pt-BR.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.pt-BR.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait + Valor inválido para o tempo limite '{0}'. Valores válidos: none,-1 e milissegundos inteiros de espera @@ -24,7 +24,7 @@ Missing value for timeout - Missing value for timeout + Valor ausente para o tempo limite @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Timed out resolving packages, process: '{0}' '{1}' + Tempo limite atingido ao resolver os pacotes. Processo: '{0}' '{1}' diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ru.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ru.xlf index 746afe45808..f57d66e3342 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ru.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.ru.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait + Недопустимое значение времени ожидания "{0}". Допустимые значения: none, –1 и integer, мс ожидания. @@ -24,7 +24,7 @@ Missing value for timeout - Missing value for timeout + Отсутствует значение времени ожидания @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Timed out resolving packages, process: '{0}' '{1}' + Истекло время ожидания при разрешении пакетов. Процесс: "{0}" "{1}". diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.tr.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.tr.xlf index 0716a294667..d628c815565 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.tr.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.tr.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait + Zaman aşımı için '{0}' değeri geçersiz, geçerli değerler: none, -1 ve tamsayı milisaniye cinsinden bekleme süresi @@ -24,7 +24,7 @@ Missing value for timeout - Missing value for timeout + Zaman aşımı için değer eksik @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Timed out resolving packages, process: '{0}' '{1}' + Paketler çözümlenirken zaman aşımı gerçekleşti, işlem: '{0}' '{1}' diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.zh-Hans.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.zh-Hans.xlf index 67d21ef5907..65cd28177b1 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.zh-Hans.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.zh-Hans.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait + 超时 "{0}" 的值无效,有效值: none、-1 和要等待的毫秒数(整数) @@ -24,7 +24,7 @@ Missing value for timeout - Missing value for timeout + 缺少超时值 @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Timed out resolving packages, process: '{0}' '{1}' + 解析包超时,进程: "{0}" "{1}" diff --git a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.zh-Hant.xlf b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.zh-Hant.xlf index 7a310871942..580ca08a73f 100644 --- a/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.zh-Hant.xlf +++ b/src/fsharp/FSharp.DependencyManager.Nuget/xlf/FSDependencyManager.txt.zh-Hant.xlf @@ -14,7 +14,7 @@ Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait - Invalid value for timeout '{0}', valid values: none, -1 and integer milliseconds to wait + 逾時 '{0}' 值無效,有效的值: 無、-1 和要等候的整數毫秒 @@ -24,7 +24,7 @@ Missing value for timeout - Missing value for timeout + 遺漏逾時值 @@ -44,7 +44,7 @@ Timed out resolving packages, process: '{0}' '{1}' - Timed out resolving packages, process: '{0}' '{1}' + 解析套件時發生逾時,處理序: '{0}' '{1}' diff --git a/src/fsharp/FindUnsolved.fs b/src/fsharp/FindUnsolved.fs index 9b36c3a82a5..3728ec59aa8 100644 --- a/src/fsharp/FindUnsolved.fs +++ b/src/fsharp/FindUnsolved.fs @@ -3,9 +3,9 @@ /// Find unsolved, uninstantiated type variables module internal FSharp.Compiler.FindUnsolved +open Internal.Utilities.Collections +open Internal.Utilities.Library open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps @@ -191,7 +191,7 @@ and accDiscrim cenv env d = | DecisionTreeTest.Const _ | DecisionTreeTest.IsNull -> () | DecisionTreeTest.IsInst (srcty, tgty) -> accTy cenv env srcty; accTy cenv env tgty - | DecisionTreeTest.ActivePatternCase (exp, tys, _, _, _) -> + | DecisionTreeTest.ActivePatternCase (exp, tys, _, _, _, _) -> accExpr cenv env exp accTypeInst cenv env tys | DecisionTreeTest.Error _ -> () diff --git a/src/fsharp/FindUnsolved.fsi b/src/fsharp/FindUnsolved.fsi index 48d3dc3a43b..12c5c536bb0 100644 --- a/src/fsharp/FindUnsolved.fsi +++ b/src/fsharp/FindUnsolved.fsi @@ -1,6 +1,5 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - module internal FSharp.Compiler.FindUnsolved open FSharp.Compiler.TypedTree diff --git a/src/fsharp/FxResolver.fs b/src/fsharp/FxResolver.fs new file mode 100644 index 00000000000..dc8cd59a310 --- /dev/null +++ b/src/fsharp/FxResolver.fs @@ -0,0 +1,892 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +// Functions to retrieve framework dependencies +namespace FSharp.Compiler + +open System +open System.Collections.Concurrent +open System.Collections.Generic +open System.Diagnostics +open System.Globalization +open System.IO +open System.Reflection +open System.Runtime.InteropServices +open Internal.Utilities.FSharpEnvironment +open Internal.Utilities.Library +open FSharp.Compiler.AbstractIL.ILBinaryReader +open FSharp.Compiler.ErrorLogger +open FSharp.Compiler.Text +open FSharp.Compiler.IO + +type internal FxResolverLockToken() = + interface LockToken + +type internal FxResolverLock = Lock + +/// Resolves the references for a chosen or currently-executing framework, for +/// - script execution +/// - script editing +/// - script compilation +/// - out-of-project sources editing +/// - default references for fsc.exe +/// - default references for fsi.exe +type internal FxResolver(assumeDotNetFramework: bool, projectDir: string, useSdkRefs: bool, isInteractive: bool, rangeForErrors: range, sdkDirOverride: string option) = + + let fxlock = FxResolverLock() + + static let RequireFxResolverLock (_fxtok: FxResolverLockToken, _thingProtected: 'T) = () + + /// We only try once for each directory (cleared on solution unload) to prevent conditions where + /// we repeatedly try to run dotnet.exe on every keystroke for a script + static let desiredDotNetSdkVersionForDirectoryCache = ConcurrentDictionary>() + + // Execute the process pathToExe passing the arguments: arguments with the working directory: workingDir timeout after timeout milliseconds -1 = wait forever + // returns exit code, stdio and stderr as string arrays + let executeProcess pathToExe arguments (workingDir:string option) timeout = + if not (String.IsNullOrEmpty pathToExe) then + let errorsList = ResizeArray() + let outputList = ResizeArray() + let mutable errorslock = obj + let mutable outputlock = obj + let outputDataReceived (message: string) = + if not (isNull message) then + lock outputlock (fun () -> outputList.Add(message)) + + let errorDataReceived (message: string) = + if not (isNull message) then + lock errorslock (fun () -> errorsList.Add(message)) + + let psi = ProcessStartInfo() + psi.FileName <- pathToExe + if workingDir.IsSome then + psi.WorkingDirectory <- workingDir.Value + psi.RedirectStandardOutput <- true + psi.RedirectStandardError <- true + psi.Arguments <- arguments + psi.CreateNoWindow <- true + psi.EnvironmentVariables.Remove("MSBuildSDKsPath") // Host can sometimes add this, and it can break things + psi.UseShellExecute <- false + + use p = new Process() + p.StartInfo <- psi + + p.OutputDataReceived.Add(fun a -> outputDataReceived a.Data) + p.ErrorDataReceived.Add(fun a -> errorDataReceived a.Data) + + if p.Start() then + p.BeginOutputReadLine() + p.BeginErrorReadLine() + if not(p.WaitForExit(timeout)) then + // Timed out resolving throw a diagnostic. + raise (new TimeoutException(sprintf "Timeout executing command '%s' '%s'" (psi.FileName) (psi.Arguments))) + else + p.WaitForExit() +#if DEBUG + if workingDir.IsSome then + FileSystem.OpenFileForWriteShim(Path.Combine(workingDir.Value, "StandardOutput.txt")).WriteAllLines(outputList) + FileSystem.OpenFileForWriteShim(Path.Combine(workingDir.Value, "StandardError.txt")).WriteAllLines(errorsList) +#endif + p.ExitCode, outputList.ToArray(), errorsList.ToArray() + else + -1, Array.empty, Array.empty + + /// Find the relevant sdk version by running `dotnet --version` in the script/project location, + /// taking into account any global.json + let tryGetDesiredDotNetSdkVersionForDirectoryInfo() = + desiredDotNetSdkVersionForDirectoryCache.GetOrAdd(projectDir, (fun _ -> + match getDotnetHostPath() with + | Some dotnetHostPath -> + try + let workingDir = + if FileSystem.DirectoryExistsShim(projectDir) then + Some projectDir + else + None + let exitCode, output, errors = executeProcess dotnetHostPath "--version" workingDir 30000 + if exitCode <> 0 then + Result.Error (Error(FSComp.SR.scriptSdkNotDetermined(dotnetHostPath, projectDir, (errors |> String.concat "\n"), exitCode), rangeForErrors)) + else + Result.Ok (output |> String.concat "\n") + with err -> + Result.Error (Error(FSComp.SR.scriptSdkNotDetermined(dotnetHostPath, projectDir, err.Message, 1), rangeForErrors)) + | _ -> Result.Error (Error(FSComp.SR.scriptSdkNotDeterminedNoHost(), rangeForErrors)))) + + // We need to make sure the warning gets replayed each time, despite the lazy computations + // To do this we pass it back as data and eventually replay it at the entry points to FxResolver. + let tryGetDesiredDotNetSdkVersionForDirectory() = + match tryGetDesiredDotNetSdkVersionForDirectoryInfo() with + | Result.Ok res -> Some res, [] + | Result.Error exn -> None, [exn] + + // This is used to replay the warnings generated in the function above. + // It should not be used under the lazy on-demand computations in this type, nor should the warnings be explicitly ignored + let replayWarnings (res, warnings: exn list) = + for exn in warnings do warning exn + res + + /// Compute the .NET Core SDK directory relevant to projectDir, used to infer the default target framework assemblies. + /// + /// On-demand because (a) some FxResolver are ephemeral (b) we want to avoid recomputation + let trySdkDir = + lazy + // This path shouldn't be used with reflective processes + assert not isInteractive + match assumeDotNetFramework with + | true -> None, [] + | _ when not useSdkRefs -> None, [] + | _ -> + match sdkDirOverride with + | Some sdkDir -> Some sdkDir, [] + | None -> + let sdksDir = + match getDotnetHostDirectory() with + | Some dotnetDir -> + let candidate = FileSystem.GetFullPathShim(Path.Combine(dotnetDir, "sdk")) + if FileSystem.DirectoryExistsShim(candidate) then Some candidate else None + | None -> None + + match sdksDir with + | Some sdksDir -> + // Find the sdk version by running `dotnet --version` in the script/project location + let desiredSdkVer, warnings = tryGetDesiredDotNetSdkVersionForDirectory() + + let sdkDir = + DirectoryInfo(sdksDir).GetDirectories() + // Filter to the version reported by `dotnet --version` in the location, if that succeeded + // If it didn't succeed we will revert back to implementation assemblies, but still need an SDK + // to use, so we find the SDKs by looking for dotnet.runtimeconfig.json + |> Array.filter (fun di -> + match desiredSdkVer with + | None -> FileSystem.FileExistsShim(Path.Combine(di.FullName,"dotnet.runtimeconfig.json")) + | Some v -> di.Name = v) + |> Array.sortBy (fun di -> di.FullName) + |> Array.tryLast + |> Option.map (fun di -> di.FullName) + sdkDir, warnings + | _ -> + None, [] + + let tryGetSdkDir() = trySdkDir.Force() + + /// Get the framework implementation directory of the currently running process + let getRunningImplementationAssemblyDir() = + let filename = Path.GetDirectoryName(typeof.Assembly.Location) + if String.IsNullOrWhiteSpace filename then getFSharpCompilerLocation() else filename + + // Compute the framework implementation directory, either of the selected SDK or the currently running process as a backup + // F# interactive/reflective scenarios use the implementation directory of the currently running process + // + // On-demand because (a) some FxResolver are ephemeral (b) we want to avoid recomputation + let implementationAssemblyDir = + lazy + if isInteractive then + getRunningImplementationAssemblyDir(), [] + else + let sdkDir, warnings = tryGetSdkDir() + match sdkDir with + | Some dir -> + try + let dotnetConfigFile = Path.Combine(dir, "dotnet.runtimeconfig.json") + use stream = FileSystem.OpenFileForReadShim(dotnetConfigFile) + let dotnetConfig = stream.ReadAllText() + let pattern = "\"version\": \"" + let startPos = dotnetConfig.IndexOf(pattern, StringComparison.OrdinalIgnoreCase) + pattern.Length + let endPos = dotnetConfig.IndexOf("\"", startPos) + let ver = dotnetConfig.[startPos..endPos-1] + let path = FileSystem.GetFullPathShim(Path.Combine(dir, "..", "..", "shared", "Microsoft.NETCore.App", ver)) + if FileSystem.DirectoryExistsShim(path) then + path, warnings + else + getRunningImplementationAssemblyDir(), warnings + with e -> + let warn = Error(FSComp.SR.scriptSdkNotDeterminedUnexpected(e.Message), rangeForErrors) + let path = getRunningImplementationAssemblyDir() + path, [warn] + | _ -> + let path = getRunningImplementationAssemblyDir() + path, [] + + let getImplementationAssemblyDir() = implementationAssemblyDir.Force() + + let getFSharpCoreLibraryName = "FSharp.Core" + + let getFsiLibraryName = "FSharp.Compiler.Interactive.Settings" + + // Use the FSharp.Core that is executing with the compiler as a backup reference + let getFSharpCoreImplementationReference() = Path.Combine(getFSharpCompilerLocation(), getFSharpCoreLibraryName + ".dll") + + // Use the FSharp.Compiler.Interactive.Settings executing with the compiler as a backup reference + let getFsiLibraryImplementationReference() = Path.Combine(getFSharpCompilerLocation(), getFsiLibraryName + ".dll") + + // Use the ValueTuple that is executing with the compiler if it is from System.ValueTuple + // or the System.ValueTuple.dll that sits alongside the compiler. (Note we always ship one with the compiler) + let getSystemValueTupleImplementationReference() = + let implDir = getImplementationAssemblyDir() |> replayWarnings + let probeFile = Path.Combine(implDir, "System.ValueTuple.dll") + if FileSystem.FileExistsShim(probeFile) then + Some probeFile + else + try + let asm = typeof>.Assembly + if asm.FullName.StartsWith("System.ValueTuple", StringComparison.OrdinalIgnoreCase) then + Some asm.Location + else + let valueTuplePath = Path.Combine(getFSharpCompilerLocation(), "System.ValueTuple.dll") + if FileSystem.FileExistsShim(valueTuplePath) then + Some valueTuplePath + else + None + with _ -> + // This is defensive coding, we don't expect this exception to happen + None + + // Algorithm: + // search the sdk for a versioned subdirectory of the sdk that matches or is lower than the version passed as an argument + // path is the path to the versioned directories + // it may be a subdirectory of a locally xcopied sdk or the global sdk + // version is nuget format version id e.g 5.0.1-preview-4.3 + // + let tryGetVersionedSubDirectory (path:string) (version:string) = + let zeroVersion = Version("0.0.0.0") + + // Split the version into a number + it's suffix + let computeVersion (version: string) = + let ver, suffix = + let suffixPos = version.IndexOf('-') + if suffixPos >= 0 then + version.Substring(0, suffixPos), version.Substring(suffixPos + 1) + else + version, "" + + match Version.TryParse(ver) with + | true, v -> v, suffix + | false, _ -> zeroVersion, suffix + + let compareVersion (v1:Version * string) (v2:Version * string) = + let fstCompare = (fst v1).CompareTo(fst v2) + if fstCompare <> 0 then + fstCompare + else + (snd v1).CompareTo(snd v2) + + let directories = getDotnetHostSubDirectories path + let targetVersion = computeVersion version + + if directories.Length > 0 then + directories + |> Array.map (fun di -> computeVersion di.Name, di) + |> Array.filter(fun (v, _) -> (compareVersion v targetVersion) <= 0) + |> Array.sortWith (fun (v1,_) (v2,_) -> compareVersion v1 v2) + |> Array.map (fun (_, di) -> di) + |> Array.tryLast + else + None + + // Algorithm: + // use implementation location of obj type, on shared frameworks it will always be in: + // + // dotnet\shared\Microsoft.NETCore.App\sdk-version\System.Private.CoreLib.dll + // + // if that changes we will need to find another way to do this. Hopefully the sdk will eventually provide an API + // use the well know location for obj to traverse the file system towards the + // + // packs\Microsoft.NETCore.App.Ref\sdk-version\netcoreappn.n + // we will rely on the sdk-version match on the two paths to ensure that we get the product that ships with the + // version of the runtime we are executing on + // Use the reference assemblies for the highest netcoreapp tfm that we find in that location. + // + // On-demand because (a) some FxResolver are ephemeral (b) we want to avoid recomputation + let tryNetCoreRefsPackDirectoryRoot = + lazy + try + // Use the reference assemblies for the highest netcoreapp tfm that we find in that location that is + // lower than or equal to the implementation version. + let implDir, warnings = getImplementationAssemblyDir() + let version = DirectoryInfo(implDir).Name + if version.StartsWith("x") then + // Is running on the desktop + (None, None), warnings + else + let di = tryGetVersionedSubDirectory "packs/Microsoft.NETCore.App.Ref" version + match di with + | Some di -> (Some(di.Name), Some(di.Parent.FullName)), warnings + | None -> (None, None), warnings + with e -> + let warn = Error(FSComp.SR.scriptSdkNotDeterminedUnexpected(e.Message), rangeForErrors) + // This is defensive coding, we don't expect this exception to happen + // NOTE: consider reporting this exception as a warning + (None, None), [warn] + + let tryGetNetCoreRefsPackDirectoryRoot() = tryNetCoreRefsPackDirectoryRoot.Force() + + // Tries to figure out the tfm for the compiler instance. + // On coreclr it uses the deps.json file + // + // On-demand because (a) some FxResolver are ephemeral (b) we want to avoid recomputation + let tryRunningDotNetCoreTfm = + lazy + let file = + try + let asm = Assembly.GetEntryAssembly() + match asm with + | null -> "" + | asm -> + let depsJsonPath = Path.ChangeExtension(asm.Location, "deps.json") + if FileSystem.FileExistsShim(depsJsonPath) then + use stream = FileSystem.OpenFileForReadShim(depsJsonPath) + stream.ReadAllText() + else + "" + with _ -> + // This is defensive coding, we don't expect this exception to happen + // NOTE: consider reporting this exception as a warning + "" + + let tfmPrefix=".NETCoreApp,Version=v" + let pattern = "\"name\": \"" + tfmPrefix + let startPos = + let startPos = file.IndexOf(pattern, StringComparison.OrdinalIgnoreCase) + if startPos >= 0 then startPos + (pattern.Length) else startPos + let length = + if startPos >= 0 then + let ep = file.IndexOf("\"", startPos) + if ep >= 0 then ep - startPos else ep + else -1 + match startPos, length with + | -1, _ + | _, -1 -> + if isRunningOnCoreClr then + // Running on coreclr but no deps.json was deployed with the host so default to 5.0 + Some "net5.0" + else + // Running on desktop + None + | pos, length -> + // use value from the deps.json file + let suffix = file.Substring(pos, length) + let prefix = + match Double.TryParse(suffix) with + | true, value when value < 5.0 -> "netcoreapp" + | _ -> "net" + Some (prefix + suffix) + + let tryGetRunningDotNetCoreTfm() = tryRunningDotNetCoreTfm.Force() + + // Tries to figure out the tfm for the compiler instance on the Windows desktop + // On full clr it uses the mscorlib version number + let getRunningDotNetFrameworkTfm () = + let defaultMscorlibVersion = 4,8,3815,0 + let desktopProductVersionMonikers = [| + // major, minor, build, revision, moniker + 4, 8, 3815, 0, "net48" + 4, 8, 3761, 0, "net48" + 4, 7, 3190, 0, "net472" + 4, 7, 3062, 0, "net472" + 4, 7, 2600, 0, "net471" + 4, 7, 2558, 0, "net471" + 4, 7, 2053, 0, "net47" + 4, 7, 2046, 0, "net47" + 4, 6, 1590, 0, "net462" + 4, 6, 57, 0, "net462" + 4, 6, 1055, 0, "net461" + 4, 6, 81, 0, "net46" + 4, 0, 30319, 34209, "net452" + 4, 0, 30319, 17020, "net452" + 4, 0, 30319, 18408, "net451" + 4, 0, 30319, 17929, "net45" + 4, 0, 30319, 1, "net4" + |] + + let majorPart, minorPart, buildPart, privatePart= + try + let attrOpt = typeof.Assembly.GetCustomAttributes(typeof) |> Seq.tryHead + match attrOpt with + | Some attr -> + let fv = (downcast attr : AssemblyFileVersionAttribute).Version.Split([|'.'|]) |> Array.map(fun e -> Int32.Parse(e)) + fv.[0], fv.[1], fv.[2], fv.[3] + | _ -> defaultMscorlibVersion + with _ -> defaultMscorlibVersion + + // Get the ProductVersion of this framework compare with table yield compatible monikers + match desktopProductVersionMonikers + |> Array.tryFind (fun (major, minor, build, revision, _) -> + (majorPart >= major) && + (minorPart >= minor) && + (buildPart >= build) && + (privatePart >= revision)) with + | Some (_,_,_,_,moniker) -> + moniker + | None -> + // no TFM could be found, assume latest stable? + "net48" + + let trySdkRefsPackDirectory = + lazy + let tfmPrefix = "netcoreapp" + let tfmCompare c1 c2 = + let deconstructTfmApp (netcoreApp: DirectoryInfo) = + let name = netcoreApp.Name + try + if name.StartsWith(tfmPrefix, StringComparison.InvariantCultureIgnoreCase) then + Some (Double.Parse(name.Substring(tfmPrefix.Length), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture)) + else + None + with _ -> + // This is defensive coding, we don't expect this exception to happen + // NOTE: consider reporting this exception as a warning + None + + if c1 = c2 then 0 + else + match (deconstructTfmApp c1), (deconstructTfmApp c2) with + | Some c1, Some c2 -> int(c1 - c2) + | None, Some _ -> -1 + | Some _, None -> 1 + | _ -> 0 + + match tryGetNetCoreRefsPackDirectoryRoot() with + | (Some version, Some root), warnings -> + try + let ref = Path.Combine(root, version, "ref") + let highestTfm = + DirectoryInfo(ref).GetDirectories() + |> Array.sortWith tfmCompare + |> Array.tryLast + + match highestTfm with + | Some tfm -> Some (Path.Combine(ref, tfm.Name)), warnings + | None -> None, warnings + with e -> + let warn = Error(FSComp.SR.scriptSdkNotDeterminedUnexpected(e.Message), rangeForErrors) + // This is defensive coding, we don't expect this exception to happen + // NOTE: consider reporting this exception as a warning + None, warnings @ [warn] + | _ -> None, [] + + let tryGetSdkRefsPackDirectory() = trySdkRefsPackDirectory.Force() + + let getDependenciesOf assemblyReferences = + let assemblies = new Dictionary() + + // Identify path to a dll in the framework directory from a simple name + let frameworkPathFromSimpleName simpleName = + let implDir = getImplementationAssemblyDir() |> replayWarnings + let root = Path.Combine(implDir, simpleName) + let pathOpt = + [| ""; ".dll"; ".exe" |] + |> Seq.tryPick(fun ext -> + let path = root + ext + if FileSystem.FileExistsShim(path) then Some path + else None) + match pathOpt with + | Some path -> path + | None -> root + + // Collect all assembly dependencies into assemblies dictionary + let rec traverseDependencies reference = + // Reference can be either path to a file on disk or a Assembly Simple Name + let referenceName, path = + try + if FileSystem.FileExistsShim(reference) then + // Reference is a path to a file on disk + Path.GetFileNameWithoutExtension(reference), reference + else + // Reference is a SimpleAssembly name + reference, frameworkPathFromSimpleName reference + + with _ -> + // This is defensive coding, we don't expect this exception to happen + reference, frameworkPathFromSimpleName reference + + if not (assemblies.ContainsKey(referenceName)) then + try + if FileSystem.FileExistsShim(path) then + match referenceName with + | "System.Runtime.WindowsRuntime" + | "System.Runtime.WindowsRuntime.UI.Xaml" -> + // The Windows compatibility pack included in the runtime contains a reference to + // System.Runtime.WindowsRuntime, but to properly use that type the runtime also needs a + // reference to the Windows.md meta-package, which isn't referenced by default. To avoid + // a bug where types from `Windows, Version=255.255.255.255` can't be found we're going to + // not default include this assembly. It can still be manually referenced if it's needed + // via the System.Runtime.WindowsRuntime NuGet package. + // + // In the future this branch can be removed because WinRT support is being removed from the + // .NET 5 SDK (https://github.com/dotnet/runtime/pull/36715) + () + | "System.Private.CoreLib" -> + // System.Private.CoreLib doesn't load with reflection + assemblies.Add(referenceName, path) + | _ -> + try + let opts = + { metadataOnly = MetadataOnlyFlag.Yes // turn this off here as we need the actual IL code + reduceMemoryUsage = ReduceMemoryFlag.Yes + pdbDirPath = None + tryGetMetadataSnapshot = (fun _ -> None) (* tryGetMetadataSnapshot *) } + + let reader = OpenILModuleReader path opts + assemblies.Add(referenceName, path) + for reference in reader.ILAssemblyRefs do + traverseDependencies reference.Name + + // There are many native assemblies which can't be cracked, raising exceptions + with _ -> () + with _ -> () + + assemblyReferences |> List.iter traverseDependencies + assemblies + + // This list is the default set of references for "non-project" files. + // + // These DLLs are + // (a) included in the environment used for all .fsx files (see service.fs) + // (b) included in environment for files 'orphaned' from a project context + // -- for orphaned files (files in VS without a project context) + let getDotNetFrameworkDefaultReferences useFsiAuxLib = [ + yield "mscorlib" + yield "System" + yield "System.Xml" + yield "System.Runtime.Remoting" + yield "System.Runtime.Serialization.Formatters.Soap" + yield "System.Data" + yield "System.Drawing" + yield "System.Core" + yield "System.Configuration" + + yield getFSharpCoreLibraryName + if useFsiAuxLib then yield fsiLibraryName + + // always include a default reference to System.ValueTuple.dll in scripts and out-of-project sources + match getSystemValueTupleImplementationReference () with + | None -> () + | Some v -> yield v + + // These are the Portable-profile and .NET Standard 1.6 dependencies of FSharp.Core.dll. These are needed + // when an F# script 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 "netstandard" + 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.Net.Requests" // System.Net.WebResponse etc. + yield "System.Collections" // System.Collections.Generic.List + yield "System.Runtime.Numerics" // BigInteger + yield "System.Threading" // OperationCanceledException + yield "System.Web" + yield "System.Web.Services" + yield "System.Windows.Forms" + yield "System.Numerics" + ] + + let getDotNetCoreImplementationReferences useFsiAuxLib = + let implDir = getImplementationAssemblyDir() |> replayWarnings + let roots = + [ yield! Directory.GetFiles(implDir, "*.dll") + yield getFSharpCoreImplementationReference() + if useFsiAuxLib then yield getFsiLibraryImplementationReference() ] + (getDependenciesOf roots).Values |> Seq.toList + + // A set of assemblies to always consider to be system assemblies. A common set of these can be used a shared + // resources between projects in the compiler services. Also all assemblies where well-known system types exist + // referenced from TcGlobals must be listed here. + let systemAssemblies = + HashSet [ + // NOTE: duplicates are ok in this list + + // .NET Framework list + yield "mscorlib" + yield "netstandard" + yield "System" + yield getFSharpCoreLibraryName + yield "FSharp.Compiler.Interactive.Settings" + yield "Microsoft.CSharp" + yield "Microsoft.VisualBasic" + yield "Microsoft.VisualBasic.Core" + yield "Microsoft.Win32.Primitives" + yield "Microsoft.Win32.Registry" + yield "System.AppContext" + yield "System.Buffers" + yield "System.Collections" + yield "System.Collections.Concurrent" + yield "System.Collections.Immutable" + yield "System.Collections.NonGeneric" + yield "System.Collections.Specialized" + yield "System.ComponentModel" + yield "System.ComponentModel.Annotations" + yield "System.ComponentModel.DataAnnotations" + yield "System.ComponentModel.EventBasedAsync" + yield "System.ComponentModel.Primitives" + yield "System.ComponentModel.TypeConverter" + yield "System.Configuration" + yield "System.Console" + yield "System.Core" + yield "System.Data" + yield "System.Data.Common" + yield "System.Data.DataSetExtensions" + yield "System.Deployment" + yield "System.Design" + yield "System.Diagnostics.Contracts" + yield "System.Diagnostics.Debug" + yield "System.Diagnostics.DiagnosticSource" + yield "System.Diagnostics.FileVersionInfo" + yield "System.Diagnostics.Process" + yield "System.Diagnostics.StackTrace" + yield "System.Diagnostics.TextWriterTraceListener" + yield "System.Diagnostics.Tools" + yield "System.Diagnostics.TraceSource" + yield "System.Diagnostics.Tracing" + yield "System.Drawing" + yield "System.Drawing.Primitives" + yield "System.Dynamic.Runtime" + yield "System.Formats.Asn1" + yield "System.Globalization" + yield "System.Globalization.Calendars" + yield "System.Globalization.Extensions" + yield "System.IO" + yield "System.IO.Compression" + yield "System.IO.Compression.Brotli" + yield "System.IO.Compression.FileSystem" + yield "System.IO.Compression.ZipFile" + yield "System.IO.FileSystem" + yield "System.IO.FileSystem.DriveInfo" + yield "System.IO.FileSystem.Primitives" + yield "System.IO.FileSystem.Watcher" + yield "System.IO.IsolatedStorage" + yield "System.IO.MemoryMappedFiles" + yield "System.IO.Pipes" + yield "System.IO.UnmanagedMemoryStream" + yield "System.Linq" + yield "System.Linq.Expressions" + yield "System.Linq.Expressions" + yield "System.Linq.Parallel" + yield "System.Linq.Queryable" + yield "System.Memory" + yield "System.Messaging" + yield "System.Net" + yield "System.Net.Http" + yield "System.Net.Http.Json" + yield "System.Net.HttpListener" + yield "System.Net.Mail" + yield "System.Net.NameResolution" + yield "System.Net.NetworkInformation" + yield "System.Net.Ping" + yield "System.Net.Primitives" + yield "System.Net.Requests" + yield "System.Net.Security" + yield "System.Net.ServicePoint" + yield "System.Net.Sockets" + yield "System.Net.WebClient" + yield "System.Net.WebHeaderCollection" + yield "System.Net.WebProxy" + yield "System.Net.WebSockets" + yield "System.Net.WebSockets.Client" + yield "System.Numerics" + yield "System.Numerics.Vectors" + yield "System.ObjectModel" + yield "System.Observable" + yield "System.Private.Uri" + yield "System.Reflection" + yield "System.Reflection.DispatchProxy" + yield "System.Reflection.Emit" + yield "System.Reflection.Emit.ILGeneration" + yield "System.Reflection.Emit.Lightweight" + yield "System.Reflection.Extensions" + yield "System.Reflection.Metadata" + yield "System.Reflection.Primitives" + yield "System.Reflection.TypeExtensions" + yield "System.Resources.Reader" + yield "System.Resources.ResourceManager" + yield "System.Resources.Writer" + yield "System.Runtime" + yield "System.Runtime.CompilerServices.Unsafe" + yield "System.Runtime.CompilerServices.VisualC" + yield "System.Runtime.Extensions" + yield "System.Runtime.Handles" + yield "System.Runtime.InteropServices" + yield "System.Runtime.InteropServices.PInvoke" + yield "System.Runtime.InteropServices.RuntimeInformation" + yield "System.Runtime.InteropServices.WindowsRuntime" + yield "System.Runtime.Intrinsics" + yield "System.Runtime.Loader" + yield "System.Runtime.Numerics" + yield "System.Runtime.Remoting" + yield "System.Runtime.Serialization" + yield "System.Runtime.Serialization.Formatters" + yield "System.Runtime.Serialization.Formatters.Soap" + yield "System.Runtime.Serialization.Json" + yield "System.Runtime.Serialization.Primitives" + yield "System.Runtime.Serialization.Xml" + yield "System.Security" + yield "System.Security.Claims" + yield "System.Security.Cryptography.Algorithms" + yield "System.Security.Cryptography.Cng" + yield "System.Security.Cryptography.Csp" + yield "System.Security.Cryptography.Encoding" + yield "System.Security.Cryptography.OpenSsl" + yield "System.Security.Cryptography.Primitives" + yield "System.Security.Cryptography.X509Certificates" + yield "System.Security.Principal" + yield "System.Security.Principal.Windows" + yield "System.Security.SecureString" + yield "System.ServiceModel.Web" + yield "System.ServiceProcess" + yield "System.Text.Encoding" + yield "System.Text.Encoding.CodePages" + yield "System.Text.Encoding.Extensions" + yield "System.Text.Encodings.Web" + yield "System.Text.Json" + yield "System.Text.RegularExpressions" + yield "System.Threading" + yield "System.Threading.Channels" + yield "System.Threading.Overlapped" + yield "System.Threading.Tasks" + yield "System.Threading.Tasks.Dataflow" + yield "System.Threading.Tasks.Extensions" + yield "System.Threading.Tasks.Parallel" + yield "System.Threading.Thread" + yield "System.Threading.ThreadPool" + yield "System.Threading.Timer" + yield "System.Transactions" + yield "System.Transactions.Local" + yield "System.ValueTuple" + yield "System.Web" + yield "System.Web.HttpUtility" + yield "System.Web.Services" + yield "System.Windows" + yield "System.Windows.Forms" + yield "System.Xml" + yield "System.Xml.Linq" + yield "System.Xml.ReaderWriter" + yield "System.Xml.Serialization" + yield "System.Xml.XDocument" + yield "System.Xml.XmlDocument" + yield "System.Xml.XmlSerializer" + yield "System.Xml.XPath" + yield "System.Xml.XPath.XDocument" + yield "WindowsBase" + ] + + member _.GetSystemAssemblies() = systemAssemblies + + member _.IsInReferenceAssemblyPackDirectory filename = + fxlock.AcquireLock <| fun fxtok -> + RequireFxResolverLock(fxtok, "assuming all member require lock") + + match tryGetNetCoreRefsPackDirectoryRoot() |> replayWarnings with + | _, Some root -> + let path = Path.GetDirectoryName(filename) + path.StartsWith(root, StringComparison.OrdinalIgnoreCase) + | _ -> false + + member _.TryGetSdkDir() = + fxlock.AcquireLock <| fun fxtok -> + RequireFxResolverLock(fxtok, "assuming all member require lock") + tryGetSdkDir() |> replayWarnings + + /// Gets the selected target framework moniker, e.g netcore3.0, net472, and the running rid of the current machine + member _.GetTfmAndRid() = + fxlock.AcquireLock <| fun fxtok -> + RequireFxResolverLock(fxtok, "assuming all member require lock") + // Interactive processes read their own configuration to find the running tfm + + let tfm = + if isInteractive then + match tryGetRunningDotNetCoreTfm() with + | Some tfm -> tfm + | _ -> getRunningDotNetFrameworkTfm () + else + let sdkDir = tryGetSdkDir() |> replayWarnings + match sdkDir with + | Some dir -> + let dotnetConfigFile = Path.Combine(dir, "dotnet.runtimeconfig.json") + use stream = FileSystem.OpenFileForReadShim(dotnetConfigFile) + let dotnetConfig = stream.ReadAllText() + let pattern = "\"tfm\": \"" + let startPos = dotnetConfig.IndexOf(pattern, StringComparison.OrdinalIgnoreCase) + pattern.Length + let endPos = dotnetConfig.IndexOf("\"", startPos) + let tfm = dotnetConfig.[startPos..endPos-1] + //printfn "GetTfmAndRid, tfm = '%s'" tfm + tfm + | None -> + match tryGetRunningDotNetCoreTfm() with + | Some tfm -> tfm + | _ -> getRunningDotNetFrameworkTfm () + + // Computer valid dotnet-rids for this environment: + // https://docs.microsoft.com/en-us/dotnet/core/rid-catalog + // + // Where rid is: win, win-x64, win-x86, osx-x64, linux-x64 etc ... + let runningRid = + let processArchitecture = RuntimeInformation.ProcessArchitecture + let baseRid = + if RuntimeInformation.IsOSPlatform(OSPlatform.Windows) then "win" + elif RuntimeInformation.IsOSPlatform(OSPlatform.OSX) then "osx" + else "linux" + match processArchitecture with + | Architecture.X64 -> baseRid + "-x64" + | Architecture.X86 -> baseRid + "-x86" + | Architecture.Arm64 -> baseRid + "-arm64" + | _ -> baseRid + "-arm" + + tfm, runningRid + + static member ClearStaticCaches() = + desiredDotNetSdkVersionForDirectoryCache.Clear() + + member _.GetFrameworkRefsPackDirectory() = + fxlock.AcquireLock <| fun fxtok -> + RequireFxResolverLock(fxtok, "assuming all member require lock") + tryGetSdkRefsPackDirectory() |> replayWarnings + + member _.TryGetDesiredDotNetSdkVersionForDirectory() = + fxlock.AcquireLock <| fun fxtok -> + RequireFxResolverLock(fxtok, "assuming all member require lock") + tryGetDesiredDotNetSdkVersionForDirectoryInfo() + + // The set of references entered into the TcConfigBuilder for scripts prior to computing the load closure. + member _.GetDefaultReferences (useFsiAuxLib) = + fxlock.AcquireLock <| fun fxtok -> + RequireFxResolverLock(fxtok, "assuming all member require lock") + let defaultReferences = + if assumeDotNetFramework then + getDotNetFrameworkDefaultReferences useFsiAuxLib, assumeDotNetFramework + else + if useSdkRefs then + // Go fetch references + let sdkDir = tryGetSdkRefsPackDirectory() |> replayWarnings + match sdkDir with + | Some path -> + try + let sdkReferences = + [ yield! Directory.GetFiles(path, "*.dll") + yield getFSharpCoreImplementationReference() + if useFsiAuxLib then yield getFsiLibraryImplementationReference() + ] |> List.filter(fun f -> systemAssemblies.Contains(Path.GetFileNameWithoutExtension(f))) + sdkReferences, false + with e -> + warning (Error(FSComp.SR.scriptSdkNotDeterminedUnexpected(e.Message), rangeForErrors)) + // This is defensive coding, we don't expect this exception to happen + if isRunningOnCoreClr then + // If running on .NET Core and something goes wrong with getting the + // .NET Core references then use .NET Core implementation assemblies for running process + getDotNetCoreImplementationReferences useFsiAuxLib, false + else + // If running on .NET Framework and something goes wrong with getting the + // .NET Core references then default back to .NET Framework and return a flag indicating this has been done + getDotNetFrameworkDefaultReferences useFsiAuxLib, true + | None -> + if isRunningOnCoreClr then + // If running on .NET Core and there is no Sdk refs pack directory + // then use .NET Core implementation assemblies for running process + getDotNetCoreImplementationReferences useFsiAuxLib, false + else + // If running on .NET Framework and there is no Sdk refs pack directory + // then default back to .NET Framework and return a flag indicating this has been done + getDotNetFrameworkDefaultReferences useFsiAuxLib, true + else + getDotNetCoreImplementationReferences useFsiAuxLib, assumeDotNetFramework + defaultReferences diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 1f541e4bdf5..6cefacd50c3 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -6,49 +6,50 @@ module internal FSharp.Compiler.IlxGen open System.IO open System.Reflection open System.Collections.Generic -open System.Collections.Immutable +open FSharp.Compiler.IO open Internal.Utilities open Internal.Utilities.Collections +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Extensions.ILX -open FSharp.Compiler.AbstractIL.Extensions.ILX.Types -open FSharp.Compiler.AbstractIL.Internal.BinaryConstants +open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.BinaryConstants +open FSharp.Compiler.AbstractIL.ILX +open FSharp.Compiler.AbstractIL.ILX.Types open FSharp.Compiler.AttributeChecking open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Infos open FSharp.Compiler.Import -open FSharp.Compiler.Layout -open FSharp.Compiler.Lib +open FSharp.Compiler.Infos open FSharp.Compiler.LowerCallsAndSeqs -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming open FSharp.Compiler.SyntaxTreeOps +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Text +open FSharp.Compiler.Text.LayoutRender +open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TypedTreeOps.DebugPrint -open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypeRelations -open FSharp.Compiler.XmlDoc -let IsNonErasedTypar (tp: Typar) = +let IsNonErasedTypar (tp: Typar) = not tp.IsErased let DropErasedTypars (tps: Typar list) = tps |> List.filter IsNonErasedTypar -let DropErasedTyargs tys = +let DropErasedTyargs tys = tys |> List.filter (fun ty -> match ty with TType_measure _ -> false | _ -> true) -let AddNonUserCompilerGeneratedAttribs (g: TcGlobals) (mdef: ILMethodDef) = +let AddNonUserCompilerGeneratedAttribs (g: TcGlobals) (mdef: ILMethodDef) = g.AddMethodGeneratedAttributes mdef let debugDisplayMethodName = "__DebugDisplay" @@ -115,15 +116,15 @@ type AttributeDecoder(namedArgs) = let findConst x = match NameMap.tryFind x nameMap with | Some(AttribExpr(_, Expr.Const (c, _, _))) -> Some c | _ -> None let findAppTr x = match NameMap.tryFind x nameMap with | Some(AttribExpr(_, Expr.App (_, _, [TType_app(tr, _)], _, _))) -> Some tr | _ -> None - member __.FindInt16 x dflt = match findConst x with | Some(Const.Int16 x) -> x | _ -> dflt + member _.FindInt16 x dflt = match findConst x with | Some(Const.Int16 x) -> x | _ -> dflt - member __.FindInt32 x dflt = match findConst x with | Some(Const.Int32 x) -> x | _ -> dflt + member _.FindInt32 x dflt = match findConst x with | Some(Const.Int32 x) -> x | _ -> dflt - member __.FindBool x dflt = match findConst x with | Some(Const.Bool x) -> x | _ -> dflt + member _.FindBool x dflt = match findConst x with | Some(Const.Bool x) -> x | _ -> dflt - member __.FindString x dflt = match findConst x with | Some(Const.String x) -> x | _ -> dflt + member _.FindString x dflt = match findConst x with | Some(Const.String x) -> x | _ -> dflt - member __.FindTypeName x dflt = match findAppTr x with | Some tr -> tr.DisplayName | _ -> dflt + member _.FindTypeName x dflt = match findAppTr x with | Some tr -> tr.DisplayName | _ -> dflt //-------------------------------------------------------------------------- // Statistics @@ -131,11 +132,11 @@ type AttributeDecoder(namedArgs) = let mutable reports = (fun _ -> ()) -let AddReport f = - let old = reports +let AddReport f = + let old = reports reports <- (fun oc -> old oc; f oc) -let ReportStatistics (oc: TextWriter) = +let ReportStatistics (oc: TextWriter) = reports oc let NewCounter nm = @@ -153,7 +154,7 @@ let CountCallFuncInstructions = NewCounter "callfunc instructions (indirect call /// Non-local information related to internals of code generation within an assembly type IlxGenIntraAssemblyInfo = - { + { /// A table recording the generated name of the static backing fields for each mutable top level value where /// we may need to take the address of that value, e.g. static mutable module-bound values which are structs. These are /// only accessible intra-assembly. Across assemblies, taking the address of static mutable module-bound values is not permitted. @@ -175,33 +176,33 @@ type IlxGenBackend = [] type IlxGenOptions = - { + { /// Indicates the "fragment name" for the part of the assembly we are emitting, particularly for incremental /// emit using Reflection.Emit in F# Interactive. fragName: string - + /// Indicates if we are generating filter blocks generateFilterBlocks: bool - + /// Indicates if we are working around historical Reflection.Emit bugs workAroundReflectionEmitBugs: bool - + /// Indicates if we should/shouldn't emit constant arrays as static data blobs emitConstantArraysUsingStaticDataBlobs: bool - + /// If this is set, then the last module becomes the "main" module and its toplevel bindings are executed at startup mainMethodInfo: Attribs option - + /// Indicates if local optimizations are on localOptimizationsAreOn: bool - + /// Indicates if we are generating debug symbols generateDebugSymbols: bool - - /// Indicates that FeeFee debug values should be emitted as value 100001 for + + /// Indicates that FeeFee debug values should be emitted as value 100001 for /// easier detection in debug output testFlagEmitFeeFeeAs100001: bool - + ilxBackend: IlxGenBackend /// Indicates the code is being generated in FSI.EXE and is executed immediately after code generation @@ -213,38 +214,38 @@ type IlxGenOptions = isInteractiveItExpr: bool /// Whenever possible, use callvirt instead of call - alwaysCallVirt: bool + alwaysCallVirt: bool } /// Compilation environment for compiling a fragment of an assembly [] type cenv = - { + { /// The TcGlobals for the compilation g: TcGlobals - + /// The ImportMap for reading IL amap: ImportMap - - /// A callback for TcVal in the typechecker. Used to generalize values when finding witnesses. + + /// A callback for TcVal in the typechecker. Used to generalize values when finding witnesses. /// It is unfortunate this is needed but it is until we supply witnesses through the compilation. tcVal: ConstraintSolver.TcValF - + /// The TAST for the assembly being emitted viewCcu: CcuThunk - + /// The options for ILX code generation opts: IlxGenOptions - + /// Cache the generation of the "unit" type mutable ilUnitTy: ILType option - + /// Other information from the emit of this assembly intraAssemblyInfo: IlxGenIntraAssemblyInfo - + /// Cache methods with SecurityAttribute applied to them, to prevent unnecessary calls to ExistsInEntireHierarchyOfType casApplied: Dictionary - + /// Used to apply forced inlining optimizations to witnesses generated late during codegen mutable optimizeDuringCodeGen: (bool -> Expr -> Expr) @@ -263,7 +264,7 @@ let mkTypeOfExpr cenv m ilty = mkAsmExpr ([ mkNormalCall (mspec_Type_GetTypeFromHandle g) ], [], [mkAsmExpr ([ I_ldtoken (ILToken.ILType ilty) ], [], [], [g.system_RuntimeTypeHandle_ty], m)], [g.system_Type_ty], m) - + let mkGetNameExpr cenv (ilt: ILType) m = mkAsmExpr ([I_ldstr ilt.BasicQualifiedName], [], [], [cenv.g.string_ty], m) @@ -331,7 +332,7 @@ let NestedTypeRefForCompLoc cloc n = let tyname = mkTopName cloc.Namespace n mkILTyRef(cloc.Scope, tyname) | h :: t -> mkILNestedTyRef(cloc.Scope, mkTopName cloc.Namespace h :: t, n) - + let CleanUpGeneratedTypeName (nm: string) = if nm.IndexOfAny IllegalCharactersInTypeAndNamespaceNames = -1 then nm @@ -381,7 +382,7 @@ let ComputeTypeAccess (tref: ILTypeRef) hidden = match tref.Enclosing with | [] -> if hidden then ILTypeDefAccess.Private else ComputePublicTypeAccess() | _ -> ILTypeDefAccess.Nested (ComputeMemberAccess hidden) - + //-------------------------------------------------------------------------- // TypeReprEnv //-------------------------------------------------------------------------- @@ -391,7 +392,7 @@ let ComputeTypeAccess (tref: ILTypeRef) hidden = type TypeReprEnv(reprs: Map, count: int) = /// Lookup a type parameter - member __.Item (tp: Typar, m: range) = + member _.Item (tp: Typar, m: range) = try reprs.[tp.Stamp] with :? KeyNotFoundException -> errorR(InternalError("Undefined or unsolved type variable: " + showL(typarL tp), m)) @@ -411,7 +412,7 @@ type TypeReprEnv(reprs: Map, count: int) = (tyenv, tps) ||> List.fold (fun tyenv tp -> tyenv.AddOne tp) /// Get the count of the non-erased type parameters in scope. - member __.Count = count + member _.Count = count /// Get the empty environment, where no type parameters are in scope. static member Empty = @@ -420,15 +421,14 @@ type TypeReprEnv(reprs: Map, count: int) = /// Get the environment for a fixed set of type parameters static member ForTypars tps = TypeReprEnv.Empty.Add tps - + /// Get the environment for within a type definition static member ForTycon (tycon: Tycon) = TypeReprEnv.ForTypars (tycon.TyparsNoRange) - + /// Get the environment for generating a reference to items within a type definition static member ForTyconRef (tycon: TyconRef) = TypeReprEnv.ForTycon tycon.Deref - //-------------------------------------------------------------------------- // Generate type references @@ -439,7 +439,7 @@ let GenTyconRef (tcref: TyconRef) = assert(not tcref.IsTypeAbbrev) tcref.CompiledRepresentation -type VoidNotOK = +type VoidNotOK = | VoidNotOK | VoidOK @@ -460,7 +460,7 @@ type PtrsOK = let GenReadOnlyAttributeIfNecessary (g: TcGlobals) ty = let add = isInByrefTy g ty && g.attrib_IsReadOnlyAttribute.TyconRef.CanDeref if add then - let attr = mkILCustomAttribute g.ilg (g.attrib_IsReadOnlyAttribute.TypeRef, [], [], []) + let attr = mkILCustomAttribute (g.attrib_IsReadOnlyAttribute.TypeRef, [], [], []) Some attr else None @@ -522,7 +522,7 @@ and GenTypeAux amap m (tyenv: TypeReprEnv) voidOK ptrsOK ty = #endif match stripTyEqnsAndMeasureEqns g ty with | TType_app (tcref, tinst) -> GenNamedTyAppAux amap m tyenv ptrsOK tcref tinst - + | TType_tuple (tupInfo, args) -> GenTypeAux amap m tyenv VoidNotOK ptrsOK (mkCompiledTupleTy g (evalTupInfoIsStruct tupInfo) args) @@ -555,7 +555,7 @@ and GenUnionCaseRef (amap: ImportMap) m tyenv i (fspecs: RecdField[]) = fspecs |> Array.mapi (fun j fspec -> let ilFieldDef = IL.mkILInstanceField(fspec.Name, GenType amap m tyenv fspec.FormalType, None, ILMemberAccess.Public) // These properties on the "field" of an alternative end up going on a property generated by cu_erase.fs - IlxUnionField + IlxUnionCaseField (ilFieldDef.With(customAttrs = mkILCustomAttrs [(mkCompilationMappingAttrWithVariantNumAndSeqNum g (int SourceConstructFlags.Field) i j )]))) @@ -672,25 +672,114 @@ let GenRecdFieldRef m cenv tyenv (rfref: RecdFieldRef) tyargs = GenType cenv.amap m tyenvinner rfref.RecdField.FormalType) let GenExnType amap m tyenv (ecref: TyconRef) = GenTyApp amap m tyenv ecref.CompiledRepresentation [] - + +type ArityInfo = int list + //-------------------------------------------------------------------------- // Closure summaries -//-------------------------------------------------------------------------- +// +// Function, Object, Delegate and State Machine Closures +// ===================================================== +// +// For a normal expression closure, we generate: +// +// class Implementation : FSharpFunc<...> { +// override Invoke(..) { expr } +// } +// +// Local Type Functions +// ==================== +// +// The input expression is: +// let input-val : FORALL. body-type = LAM . body-expr : body-type +// ... +// +// This is called at some point: +// +// input-val +// +// Note 'input-val' is never used without applying it to some type arguments. +// +// Basic examples - first define some functions that extract information from generic parameters, and which are constrained: +// +// type TypeInfo<'T> = TypeInfo of System.Type +// type TypeName = TypeName of string +// +// let typeinfo<'T when 'T :> System.IComparable) = TypeInfo (typeof<'T>) +// let typename<'T when 'T :> System.IComparable) = TypeName (typeof<'T>.Name) +// +// Then here are examples: +// +// LAM <'T>{addWitness}. (typeinfo<'T>, typeinfo<'T[]>, (incr{ : 'T -> 'T)) : TypeInfo<'T> * TypeInfo<'T[]> * ('T -> 'T) +// directTypars = 'T +// cloFreeTyvars = empty +// +// or +// LAM <'T>. (typeinfo<'T>, typeinfo<'U>) : TypeInfo<'T> * TypeInfo<'U> +// directTypars = 'T +// cloFreeTyvars = 'U +// +// or +// LAM <'T>. (typeinfo<'T>, typeinfo<'U>, typename<'V>) : TypeInfo<'T> * TypeInfo<'U> * TypeName +// directTypars = 'T +// cloFreeTyvars = 'U,'V +// +// or, for witnesses: +// +// let inline incr{addWitnessForT} (x: 'T) = x + GenericZero<'T> // has witness argment for '+' +// +// LAM <'T when 'T :... op_Addition ...>{addWitnessForT}. (incr<'T>{addWitnessForT}, incr<'U>{addWitnessForU}, incr<'V>{addWitnessForV}) : ('T -> 'T) * ('U -> 'U) * ('V -> 'V) +// directTypars = 'T +// cloFreeTyvars = 'U,'V +// cloFreeTyvarsWitnesses = witnesses implied by cloFreeTyvars = {addWitnessForU, addWitnessForV} +// directTyparsWitnesses = witnesses implied by directTypars = {addWitnessForT} +// +// Define the free variable sets: +// +// cloFreeTyvars = free-tyvars-of(input-expr) +// +// where IsNamedLocalTypeFuncVal is true. +// +// The directTypars may have constraints that require some witnesses. Making those explicit with "{ ... }" syntax for witnesses: +// input-expr = {LAM {directWitnessInfoArgs}. body-expr : body-type } +// +// let x : FORALL<'T ... constrained ...> ... = clo{directWitnessInfos} +// +// Given this, we generate this shape of code: +// +// type Implementation(cloFreeTyvarsWitnesses) = +// member DirectInvoke(directTyparsWitnesses) : body-type = +// body-expr +// +// local x : obj = new Implementation(cloFreeTyvarsWitnesses) +// .... +// ldloc x +// unbox Implementation +// call Implementation::DirectInvoke(directTyparsWitnesses) +// +// First-class Type Functions +// ========================== +// +// If IsNamedLocalTypeFuncVal is false, we have a "non-local" or "first-class" type function closure +// that implements FSharpTypeFunc, and we generate: +// +// class Implementation : FSharpTypeFunc { +// override Specialize : overall-type { expr } +// } +// -type ArityInfo = int list - [] type IlxClosureInfo = { /// The whole expression for the closure cloExpr: Expr - + /// The name of the generated closure class cloName: string - + /// The counts of curried arguments for the closure cloArityInfo: ArityInfo - /// The formal return type + /// The formal return type ilCloFormalReturnTy: ILType /// An immutable array of free variable descriptions for the closure @@ -715,24 +804,6 @@ type IlxClosureInfo = /// ILX view of the lambdas for the closures ilCloLambdas: IlxClosureLambdas - /// The free type parameters occuring in the type of the closure (and not just its body) - /// This is used for local type functions, whose contract class must use these types - /// type Contract<'fv> = - /// abstract DirectInvoke: ty['fv] - /// type Implementation<'fv, 'fv2> : Contract<'fv> = - /// override DirectInvoke: ty['fv] = expr['fv, 'fv2] - /// - /// At the callsite we generate - /// unbox ty['fv] - /// callvirt clo.DirectInvoke - localTypeFuncILGenericArgs: ILType list - - /// The free type parameters for the local type function as F# TAST types - localTypeFuncContractFreeTypars: Typar list - - localTypeFuncDirectILGenericParams: IL.ILGenericParameterDefs - - localTypeFuncInternalFreeTypars: Typar list } @@ -740,7 +811,7 @@ type IlxClosureInfo = // ValStorage //-------------------------------------------------------------------------- - + /// Describes the storage for a value [] type ValStorage = @@ -755,7 +826,7 @@ type ValStorage = /// Indicates the value is represented as an IL method (in a "main" class for a F# /// compilation unit, or as a member) according to its inferred or specified arity. - | Method of ValReprInfo * ValRef * ILMethodSpec * ILMethodSpec * Range.range * Typars * Typars * CurriedArgInfos * ArgReprInfo list * TraitWitnessInfos * TType list * ArgReprInfo + | Method of ValReprInfo * ValRef * ILMethodSpec * ILMethodSpec * range * Typars * Typars * CurriedArgInfos * ArgReprInfo list * TraitWitnessInfos * TType list * ArgReprInfo /// Indicates the value is stored at the given position in the closure environment accessed via "ldarg 0" | Env of ILType * ILFieldSpec * NamedLocalIlxClosureInfo ref option @@ -779,17 +850,17 @@ and NamedLocalIlxClosureInfo = | NamedLocalIlxClosureInfoGenerator of (IlxGenEnv -> IlxClosureInfo) | NamedLocalIlxClosureInfoGenerated of IlxClosureInfo - override __.ToString() = "" + override _.ToString() = "" /// Indicates the overall representation decisions for all the elements of a namespace of module and ModuleStorage = - { + { Vals: Lazy> - + SubModules: Lazy> } - override __.ToString() = "" + override _.ToString() = "" /// Indicate whether a call to the value can be implemented as /// a branch. At the moment these are only used for generating branch calls back to @@ -813,17 +884,14 @@ and BranchCallItem = // num actual args in IL int - override __.ToString() = "" - + override _.ToString() = "" + /// Represents a place we can branch to and Mark = | Mark of ILCodeLabel member x.CodeLabel = (let (Mark lab) = x in lab) -//-------------------------------------------------------------------------- -// We normally generate in the context of a "what to do next" continuation -//-------------------------------------------------------------------------- - +/// Represents "what to do next after we generate this expression" and sequel = | EndFilter @@ -833,6 +901,9 @@ and sequel = /// Branch to the given mark | Br of Mark + + /// Execute the given comparison-then-branch instructions on the result of the expression + /// If the branch isn't taken then drop through. | CmpThenBrOrContinue of Pops * ILInstr list /// Continue and leave the value on the IL computation stack @@ -858,10 +929,10 @@ and Pops = int and IlxGenEnv = { /// The representation decisions for the (non-erased) type parameters that are in scope tyenv: TypeReprEnv - + /// An ILType for some random type in this assembly someTypeInThisAssembly: ILType - + /// Indicates if we are generating code for the last file in a .EXE isFinalFile: bool @@ -896,9 +967,12 @@ and IlxGenEnv = /// Are we inside of a recursive let binding, while loop, or a for loop? isInLoop: bool + + /// Indicates that the .locals init flag should be set on a method and all its nested methods and lambdas + initLocals: bool } - override __.ToString() = "" + override _.ToString() = "" let discard = DiscardThen Continue let discardAndReturnVoid = DiscardThen ReturnVoid @@ -915,7 +989,7 @@ let AddTyparsToEnv typars (eenv: IlxGenEnv) = {eenv with tyenv = eenv.tyenv.Add let AddSignatureRemapInfo _msg (rpi, mhi) eenv = { eenv with sigToImplRemapInfo = (mkRepackageRemapping rpi, mhi) :: eenv.sigToImplRemapInfo } - + let OutputStorage (pps: TextWriter) s = match s with | StaticField _ -> pps.Write "(top)" @@ -982,8 +1056,8 @@ let StorageForValRef g m (v: ValRef) eenv = StorageForVal g m v.Deref eenv let ComputeGenerateWitnesses (g: TcGlobals) eenv = g.generateWitnesses && not eenv.witnessesInScope.IsEmpty && not eenv.suppressWitnesses -let TryStorageForWitness (_g: TcGlobals) eenv (w: TraitWitnessInfo) = - match eenv.witnessesInScope.TryGetValue w with +let TryStorageForWitness (_g: TcGlobals) eenv (w: TraitWitnessInfo) = + match eenv.witnessesInScope.TryGetValue w with | true, storage -> Some storage | _ -> None @@ -1000,8 +1074,8 @@ let GetMethodSpecForMemberVal amap g (memberInfo: ValMemberInfo) (vref: ValRef) GetTopValTypeInCompiledForm g vref.ValReprInfo.Value numEnclosingTypars vref.Type m let tyenvUnderTypars = TypeReprEnv.ForTypars tps let flatArgInfos = List.concat curriedArgInfos - let isCtor = (memberInfo.MemberFlags.MemberKind = MemberKind.Constructor) - let cctor = (memberInfo.MemberFlags.MemberKind = MemberKind.ClassConstructor) + let isCtor = (memberInfo.MemberFlags.MemberKind = SynMemberKind.Constructor) + let cctor = (memberInfo.MemberFlags.MemberKind = SynMemberKind.ClassConstructor) let parentTcref = vref.TopValDeclaringEntity let parentTypars = parentTcref.TyparsNoRange let numParentTypars = parentTypars.Length @@ -1028,8 +1102,8 @@ let GetMethodSpecForMemberVal amap g (memberInfo: ValMemberInfo) (vref: ValRef) let thisTy = if isByrefTy g thisTy then destByrefTy g thisTy else thisTy let thisArgTys = argsOfAppTy g thisTy if numParentTypars <> thisArgTys.Length then - let msg = - sprintf + let msg = + sprintf "CodeGen check: type checking did not quantify the correct number of type variables for this method, #parentTypars = %d, #mtps = %d, #thisArgTys = %d" numParentTypars mtps.Length thisArgTys.Length warning(InternalError(msg, m)) @@ -1046,14 +1120,14 @@ let GetMethodSpecForMemberVal amap g (memberInfo: ValMemberInfo) (vref: ValRef) let ilMethodArgTys = GenParamTypes amap m tyenvUnderTypars isSlotSig methodArgTys let ilMethodInst = GenTypeArgs amap m tyenvUnderTypars (List.map mkTyparTy mtps) let mspec = mkILInstanceMethSpecInTy (ilTy, nm, ilMethodArgTys, ilActualRetTy, ilMethodInst) - let mspecW = + let mspecW = if not g.generateWitnesses || witnessInfos.IsEmpty then - mspec + mspec else let ilWitnessArgTys = GenTypes amap m tyenvUnderTypars (GenWitnessTys g witnessInfos) let nmW = ExtraWitnessMethodName nm mkILInstanceMethSpecInTy (ilTy, nmW, ilWitnessArgTys @ ilMethodArgTys, ilActualRetTy, ilMethodInst) - + mspec, mspecW, ctps, mtps, curriedArgInfos, paramInfos, retInfo, witnessInfos, methodArgTys, returnTy else let methodArgTys, paramInfos = List.unzip flatArgInfos @@ -1062,12 +1136,12 @@ let GetMethodSpecForMemberVal amap g (memberInfo: ValMemberInfo) (vref: ValRef) let mspec = mkILStaticMethSpecInTy (ilTy, nm, ilMethodArgTys, ilActualRetTy, ilMethodInst) let mspecW = if not g.generateWitnesses || witnessInfos.IsEmpty then - mspec + mspec else let ilWitnessArgTys = GenTypes amap m tyenvUnderTypars (GenWitnessTys g witnessInfos) let nmW = ExtraWitnessMethodName nm mkILStaticMethSpecInTy (ilTy, nmW, ilWitnessArgTys @ ilMethodArgTys, ilActualRetTy, ilMethodInst) - + mspec, mspecW, ctps, mtps, curriedArgInfos, paramInfos, retInfo, witnessInfos, methodArgTys, returnTy /// Determine how a top-level value is represented, when representing as a field, by computing an ILFieldSpec @@ -1124,7 +1198,7 @@ let ComputeStorageForFSharpFunctionOrFSharpExtensionMember amap (g: TcGlobals) c let mspec = mkILStaticMethSpecInTy (ilLocTy, nm, ilMethodArgTys, ilRetTy, ilMethodInst) let mspecW = if not g.generateWitnesses || witnessInfos.IsEmpty then - mspec + mspec else let ilWitnessArgTys = GenTypes amap m tyenvUnderTypars (GenWitnessTys g witnessInfos) mkILStaticMethSpecInTy (ilLocTy, ExtraWitnessMethodName nm, (ilWitnessArgTys @ ilMethodArgTys), ilRetTy, ilMethodInst) @@ -1155,7 +1229,7 @@ let ComputeStorageForTopVal (amap, g, optIntraAssemblyInfo: IlxGenIntraAssemblyI match vref.ValReprInfo with | None -> error(InternalError("ComputeStorageForTopVal: no arity found for " + showL(valRefL vref), vref.Range)) | Some a -> a - + let m = vref.Range let nm = vref.CompiledName g.CompilerGlobalState @@ -1230,7 +1304,7 @@ let rec AddBindingsForLocalModuleType allocVal cloc eenv (mty: ModuleOrNamespace eenv /// Record how all the top level F#-declared values, functions and members are represented, for a set of referenced assemblies. -let AddExternalCcusToIlxGenEnv amap g eenv ccus = +let AddExternalCcusToIlxGenEnv amap g eenv ccus = List.fold (AddStorageForExternalCcu amap g) eenv ccus /// Record how all the unrealized abstract slots are represented, for a type definition. @@ -1271,7 +1345,7 @@ and AddBindingsForModule allocVal cloc x eenv = let cloc = if mspec.IsNamespace then cloc else CompLocForFixedModule cloc.QualifiedNameOfFile cloc.TopImplQualifiedName mspec - + AddBindingsForModuleDef allocVal cloc eenv mdef /// Record how constructs are represented, for the values and functions defined in a module or namespace fragment. @@ -1419,7 +1493,7 @@ and TypeDefsBuilder() = //The order we emit type definitions is not deterministic since it is using the reverse of a range from a hash table. We should use an approximation of source order. // Ideally it shouldn't matter which order we use. // However, for some tests FSI generated code appears sensitive to the order, especially for nested types. - + [ for (b, eliminateIfEmpty) in HashRangeSorted tdefs do let tdef = b.Close() // Skip the type if it is empty @@ -1448,7 +1522,7 @@ and TypeDefsBuilder() = type AnonTypeGenerationTable() = // Dictionary is safe here as it will only be used during the codegen stage - will happen on a single thread. let dict = Dictionary(HashIdentity.Structural) - member __.Table = dict + member _.Table = dict /// Assembly generation buffers type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbuf = @@ -1475,7 +1549,7 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu keyComparer=HashIdentity.Structural) let generateAnonType genToStringMethod (isStruct, ilTypeRef, nms) = - + let propTys = [ for (i, nm) in Array.indexed nms -> nm, ILType.TypeVar (uint16 i) ] // Note that this alternative below would give the same names as C#, but the generated @@ -1483,7 +1557,7 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu //let flds = [ for (i, nm) in Array.indexed nms -> (nm, "<" + nm + ">" + "i__Field", ILType.TypeVar (uint16 i)) ] let ilCtorRef = mkILMethRef(ilTypeRef, ILCallingConv.Instance, ".ctor", 0, List.map snd propTys, ILType.Void) - let ilMethodRefs = + let ilMethodRefs = [| for (propName, propTy) in propTys -> mkILMethRef (ilTypeRef, ILCallingConv.Instance, "get_" + propName, 0, [], propTy) |] @@ -1512,7 +1586,7 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu [ for (_, fldName, fldTy) in flds -> let fdef = mkILInstanceField (fldName, fldTy, None, ILMemberAccess.Private) fdef.With(customAttrs = mkILCustomAttrs [ g.DebuggerBrowsableNeverAttribute ]) ] - + // Generate property definitions for the fields compiled as properties let ilProperties = mkILProperties @@ -1526,27 +1600,27 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu init= None, args=[], customAttrs=mkILCustomAttrs [ mkCompilationMappingAttrWithSeqNum g (int SourceConstructFlags.Field) i ]) ] - + let ilMethods = [ for (propName, fldName, fldTy) in flds -> mkLdfldMethodDef ("get_" + propName, ILMemberAccess.Public, false, ilTy, fldName, fldTy) yield! genToStringMethod ilTy ] let ilBaseTy = (if isStruct then g.iltyp_ValueType else g.ilg.typ_Object) - + let ilCtorDef = mkILSimpleStorageCtorWithParamNames(None, (if isStruct then None else Some ilBaseTy.TypeSpec), ilTy, [], flds, ILMemberAccess.Public) // Create a tycon that looks exactly like a record definition, to help drive the generation of equality/comparison code let m = range0 let tps = [ for nm in nms -> - let stp = Typar(mkSynId m ("T"+nm), TyparStaticReq.NoStaticReq, true) + let stp = SynTypar(mkSynId m ("T"+nm), TyparStaticReq.None, true) Construct.NewTypar (TyparKind.Type, TyparRigidity.WarnIfNotRigid, stp, false, TyparDynamicReq.Yes, [], true, true) ] let tycon = let lmtyp = MaybeLazy.Strict (Construct.NewEmptyModuleOrNamespaceType ModuleOrType) let cpath = CompPath(ilTypeRef.Scope, []) - Construct.NewTycon(Some cpath, ilTypeRef.Name, m, taccessPublic, taccessPublic, TyparKind.Type, LazyWithContext.NotLazy tps, XmlDoc.Empty, false, false, false, lmtyp) + Construct.NewTycon(Some cpath, ilTypeRef.Name, m, taccessPublic, taccessPublic, TyparKind.Type, LazyWithContext.NotLazy tps, XmlDoc.Empty, false, false, false, lmtyp) if isStruct then tycon.SetIsStructRecordOrUnion true @@ -1554,13 +1628,13 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu tycon.entity_tycon_repr <- TRecdRepr (Construct.MakeRecdFieldsTable - [ for (tp, (propName, _fldName, _fldTy)) in (List.zip tps flds) -> - Construct.NewRecdField false None (mkSynId m propName) false (mkTyparTy tp) true false [] [] XmlDoc.Empty taccessPublic false ]) + ((tps, flds) ||> List.map2 (fun tp (propName, _fldName, _fldTy) -> + Construct.NewRecdField false None (mkSynId m propName) false (mkTyparTy tp) true false [] [] XmlDoc.Empty taccessPublic false))) let tcref = mkLocalTyconRef tycon let _, typ = generalizeTyconRef tcref let tcaug = tcref.TypeContents - + tcaug.tcaug_interfaces <- [ (g.mk_IStructuralComparable_ty, true, m) (g.mk_IComparable_ty, true, m) @@ -1589,11 +1663,11 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu mkILMethods (ilCtorDef :: ilMethods), ilFieldDefs, emptyILTypeDefs, ilProperties, mkILEvents [], ilTypeDefAttribs, ILTypeInit.BeforeField) - + let ilTypeDef = ilTypeDef.WithSealed(true).WithSerializable(true) mgbuf.AddTypeDef(ilTypeRef, ilTypeDef, false, true, None) - + let extraBindings = [ yield! AugmentWithHashCompare.MakeBindingsForCompareAugmentation g tycon yield! AugmentWithHashCompare.MakeBindingsForCompareWithComparerAugmentation g tycon @@ -1614,9 +1688,9 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu /// static init fields on script modules. let mutable scriptInitFspecs: (ILFieldSpec * range) list = [] - member __.AddScriptInitFieldSpec (fieldSpec, range) = + member _.AddScriptInitFieldSpec (fieldSpec, range) = scriptInitFspecs <- (fieldSpec, range) :: scriptInitFspecs - + /// This initializes the script in #load and fsc command-line order causing their /// side effects to be executed. member mgbuf.AddInitializeScriptsInOrderToEntryPoint () = @@ -1624,18 +1698,18 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu match explicitEntryPointInfo with | Some tref -> let InitializeCompiledScript(fspec, m) = - mgbuf.AddExplicitInitToSpecificMethodDef((fun (md: ILMethodDef) -> md.IsEntryPoint), tref, fspec, GenPossibleILSourceMarker cenv m, [], []) + mgbuf.AddExplicitInitToSpecificMethodDef((fun (md: ILMethodDef) -> md.IsEntryPoint), tref, fspec, GenPossibleILSourceMarker cenv m, [], []) scriptInitFspecs |> List.iter InitializeCompiledScript | None -> () - member __.GenerateRawDataValueType (cloc, size) = + member _.GenerateRawDataValueType (cloc, size) = // Byte array literals require a ValueType of size the required number of bytes. // With fsi.exe, S.R.Emit TypeBuilder CreateType has restrictions when a ValueType VT is nested inside a type T, and T has a field of type VT. // To avoid this situation, these ValueTypes are generated under the private implementation rather than in the current cloc. [was bug 1532]. let cloc = CompLocForPrivateImplementationDetails cloc rawDataValueTypeGenerator.Apply((cloc, size)) - member __.GenerateAnonType (genToStringMethod, anonInfo: AnonRecdTypeInfo) = + member _.GenerateAnonType (genToStringMethod, anonInfo: AnonRecdTypeInfo) = let isStruct = evalAnonInfoIsStruct anonInfo let key = anonInfo.Stamp if not (anonTypeTable.Table.ContainsKey key) then @@ -1645,39 +1719,39 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu member this.LookupAnonType (genToStringMethod, anonInfo: AnonRecdTypeInfo) = match anonTypeTable.Table.TryGetValue anonInfo.Stamp with | true, res -> res - | _ -> + | _ -> if anonInfo.ILTypeRef.Scope.IsLocalRef then failwithf "the anonymous record %A has not been generated in the pre-phase of generating this module" anonInfo.ILTypeRef this.GenerateAnonType (genToStringMethod, anonInfo) anonTypeTable.Table.[anonInfo.Stamp] - member __.GrabExtraBindingsToGenerate () = + member _.GrabExtraBindingsToGenerate () = let result = extraBindingsToGenerate extraBindingsToGenerate <- [] result - member __.AddTypeDef (tref: ILTypeRef, tdef, eliminateIfEmpty, addAtEnd, tdefDiscards) = + member _.AddTypeDef (tref: ILTypeRef, tdef, eliminateIfEmpty, addAtEnd, tdefDiscards) = gtdefs.FindNestedTypeDefsBuilder(tref.Enclosing).AddTypeDef(tdef, eliminateIfEmpty, addAtEnd, tdefDiscards) - member __.GetCurrentFields (tref: ILTypeRef) = + member _.GetCurrentFields (tref: ILTypeRef) = gtdefs.FindNestedTypeDefBuilder(tref).GetCurrentFields() - member __.AddReflectedDefinition (vspec: Val, expr) = + member _.AddReflectedDefinition (vspec: Val, expr) = // preserve order by storing index of item let n = reflectedDefinitions.Count reflectedDefinitions.Add(vspec, (vspec.CompiledName cenv.g.CompilerGlobalState, n, expr)) - member __.ReplaceNameOfReflectedDefinition (vspec, newName) = + member _.ReplaceNameOfReflectedDefinition (vspec, newName) = match reflectedDefinitions.TryGetValue vspec with | true, (name, n, expr) when name <> newName -> reflectedDefinitions.[vspec] <- (newName, n, expr) | _ -> () - member __.AddMethodDef (tref: ILTypeRef, ilMethodDef) = + member _.AddMethodDef (tref: ILTypeRef, ilMethodDef) = gtdefs.FindNestedTypeDefBuilder(tref).AddMethodDef(ilMethodDef) if ilMethodDef.IsEntryPoint then explicitEntryPointInfo <- Some tref - member __.AddExplicitInitToSpecificMethodDef (cond, tref, fspec, sourceOpt, feefee, seqpt) = + member _.AddExplicitInitToSpecificMethodDef (cond, tref, fspec, sourceOpt, feefee, seqpt) = // Authoring a .cctor with effects forces the cctor for the 'initialization' module by doing a dummy store & load of a field // Doing both a store and load keeps FxCop happier because it thinks the field is useful let instrs = @@ -1688,16 +1762,16 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu yield AI_pop] gtdefs.FindNestedTypeDefBuilder(tref).PrependInstructionsToSpecificMethodDef(cond, instrs, sourceOpt) - member __.AddEventDef (tref, edef) = + member _.AddEventDef (tref, edef) = gtdefs.FindNestedTypeDefBuilder(tref).AddEventDef(edef) - member __.AddFieldDef (tref, ilFieldDef) = + member _.AddFieldDef (tref, ilFieldDef) = gtdefs.FindNestedTypeDefBuilder(tref).AddFieldDef(ilFieldDef) - member __.AddOrMergePropertyDef (tref, pdef, m) = + member _.AddOrMergePropertyDef (tref, pdef, m) = gtdefs.FindNestedTypeDefBuilder(tref).AddOrMergePropertyDef(pdef, m) - member __.Close() = + member _.Close() = // old implementation adds new element to the head of list so result was accumulated in reversed order let orderedReflectedDefinitions = [for (KeyValue(vspec, (name, n, expr))) in reflectedDefinitions -> n, ((name, vspec), expr)] @@ -1705,9 +1779,9 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu |> List.map snd gtdefs.Close(), orderedReflectedDefinitions - member __.cenv = cenv + member _.cenv = cenv - member __.GetExplicitEntryPointInfo() = explicitEntryPointInfo + member _.GetExplicitEntryPointInfo() = explicitEntryPointInfo /// Record the types of the things on the evaluation stack. /// Used for the few times we have to flush the IL evaluation stack and to compute maxStack. @@ -1735,7 +1809,7 @@ type CodeGenBuffer(m: range, let exnSpecs = new ResizeArray(10) // Keep track of the current stack so we can spill stuff when we hit a "try" when some stuff - // is on the stack. + // is on the stack. let mutable stack: ILType list = [] let mutable nstack = 0 let mutable maxStack = 0 @@ -1759,13 +1833,13 @@ type CodeGenBuffer(m: range, let i = FeeFeeInstr mgbuf.cenv doc codebuf.Add i // for the FeeFee or a better sequence point - member cgbuf.DoPushes (pushes: Pushes) = + member _.DoPushes (pushes: Pushes) = for ty in pushes do stack <- ty :: stack nstack <- nstack + 1 maxStack <- Operators.max maxStack nstack - member cgbuf.DoPops (n: Pops) = + member _.DoPops (n: Pops) = for i = 0 to n - 1 do match stack with | [] -> @@ -1776,8 +1850,8 @@ type CodeGenBuffer(m: range, stack <- t nstack <- nstack - 1 - member cgbuf.GetCurrentStack() = stack - member cgbuf.AssertEmptyStack() = + member _.GetCurrentStack() = stack + member _.AssertEmptyStack() = if not (isNil stack) then let msg = sprintf "stack flush didn't work, or extraneous expressions left on stack before stack restore, methodName = %s, stack = %+A, m = %s" @@ -1796,17 +1870,17 @@ type CodeGenBuffer(m: range, cgbuf.DoPushes pushes is |> List.iter codebuf.Add - member cgbuf.GetLastDebugPoint() = + member _.GetLastDebugPoint() = lastSeqPoint - - member private cgbuf.EnsureNopBetweenDebugPoints() = + + member private _.EnsureNopBetweenDebugPoints() = // Always add a nop between sequence points to help .NET get the stepping right // Don't do this after a FeeFee marker for hidden code if (codebuf.Count > 0 && (match codebuf.[codebuf.Count-1] with | I_seqpoint sm when sm.Line <> FeeFee mgbuf.cenv -> true | _ -> false)) then - + codebuf.Add(AI_nop) member cgbuf.EmitSeqPoint src = @@ -1827,7 +1901,7 @@ type CodeGenBuffer(m: range, // Save the last sequence point away so we can make a decision graph look consistent (i.e. reassert the sequence point at each target) lastSeqPoint <- Some src anyDocument <- Some attr.Document - + // Emit FeeFee breakpoints for hidden code, see https://blogs.msdn.microsoft.com/jmstall/2005/06/19/line-hidden-and-0xfeefee-sequence-points/ member cgbuf.EmitStartOfHiddenCode() = if mgbuf.cenv.opts.generateDebugSymbols then @@ -1842,14 +1916,14 @@ type CodeGenBuffer(m: range, cgbuf.EnsureNopBetweenDebugPoints() codebuf.Add i - member cgbuf.EmitExceptionClause clause = + member _.EmitExceptionClause clause = exnSpecs.Add clause - member cgbuf.GenerateDelayMark(_nm) = + member _.GenerateDelayMark(_nm) = let lab = IL.generateCodeLabel() Mark lab - member cgbuf.SetCodeLabelToCodeLabel(lab1, lab2) = + member _.SetCodeLabelToCodeLabel(lab1, lab2) = #if DEBUG if codeLabelToCodeLabel.ContainsKey lab1 then let msg = sprintf "two values given for label %s, methodName = %s, m = %s" (formatCodeLabel lab1) methodName (stringOfRange m) @@ -1858,7 +1932,7 @@ type CodeGenBuffer(m: range, #endif codeLabelToCodeLabel.[lab1] <- lab2 - member cgbuf.SetCodeLabelToPC(lab, pc) = + member _.SetCodeLabelToPC(lab, pc) = #if DEBUG if codeLabelToPC.ContainsKey lab then let msg = sprintf "two values given for label %s, methodName = %s, m = %s" (formatCodeLabel lab) methodName (stringOfRange m) @@ -1869,10 +1943,20 @@ type CodeGenBuffer(m: range, member cgbuf.SetMark (mark1: Mark, mark2: Mark) = cgbuf.SetCodeLabelToCodeLabel(mark1.CodeLabel, mark2.CodeLabel) - + member cgbuf.SetMarkToHere (Mark lab) = cgbuf.SetCodeLabelToPC(lab, codebuf.Count) + member cgbuf.SetMarkToHereIfNecessary (inplabOpt: Mark option) = + match inplabOpt with + | None -> () + | Some inplab -> cgbuf.SetMarkToHere inplab + + member cgbuf.SetMarkOrEmitBranchIfNecessary (inplabOpt: Mark option, target: Mark) = + match inplabOpt with + | None -> cgbuf.EmitInstr (pop 0, Push0, I_br target.CodeLabel) + | Some inplab -> cgbuf.SetMark(inplab, target) + member cgbuf.SetStack s = stack <- s nstack <- s.Length @@ -1882,13 +1966,13 @@ type CodeGenBuffer(m: range, cgbuf.SetMarkToHere res res - member cgbuf.mgbuf = mgbuf + member _.mgbuf = mgbuf - member cgbuf.MethodName = methodName + member _.MethodName = methodName - member cgbuf.PreallocatedArgCount = alreadyUsedArgs + member _.PreallocatedArgCount = alreadyUsedArgs - member cgbuf.AllocLocal(ranges, ty, isFixed) = + member _.AllocLocal(ranges, ty, isFixed) = let j = locals.Count locals.Add((ranges, ty, isFixed)) j @@ -1902,7 +1986,7 @@ type CodeGenBuffer(m: range, | None -> cgbuf.AllocLocal(ranges, ty, isFixed), false - member cgbuf.Close() = + member _.Close() = let instrs = codebuf.ToArray() @@ -1934,8 +2018,6 @@ module CG = let SetStack (cgbuf: CodeGenBuffer) s = cgbuf.SetStack s let GenerateMark (cgbuf: CodeGenBuffer) s = cgbuf.Mark s - - //-------------------------------------------------------------------------- // Compile constants //-------------------------------------------------------------------------- @@ -1945,13 +2027,13 @@ let GenString cenv cgbuf s = let GenConstArray cenv (cgbuf: CodeGenBuffer) eenv ilElementType (data:'a[]) (write: ByteBuffer -> 'a -> unit) = let g = cenv.g - let buf = ByteBuffer.Create data.Length + use buf = ByteBuffer.Create data.Length data |> Array.iter (write buf) - let bytes = buf.Close() + let bytes = buf.AsMemory().ToArray() let ilArrayType = mkILArr1DTy ilElementType if data.Length = 0 then CG.EmitInstrs cgbuf (pop 0) (Push [ilArrayType]) [ mkLdcInt32 0; I_newarr (ILArrayShape.SingleDimensional, ilElementType); ] - else + else let vtspec = cgbuf.mgbuf.GenerateRawDataValueType(eenv.cloc, bytes.Length) let ilFieldName = CompilerGeneratedName ("field" + string(newUnique())) let fty = ILType.Value vtspec @@ -1966,7 +2048,7 @@ let GenConstArray cenv (cgbuf: CodeGenBuffer) eenv ilElementType (data:'a[]) (wr [ mkLdcInt32 data.Length I_newarr (ILArrayShape.SingleDimensional, ilElementType) AI_dup - I_ldtoken (ILToken.ILField fspec) ] + I_ldtoken (ILToken.ILField fspec) ] CG.EmitInstrs cgbuf (pop 2) Push0 @@ -2035,8 +2117,8 @@ let CodeGenMethod cenv mgbuf (entryPointInfo, methodName, eenv, alreadyUsedArgs, // The old union erasure phase increased maxstack by 2 since the code pushes some items, we do the same here let maxStack = maxStack + 2 - // Build an Abstract IL method - instrs, mkILMethodBody (true, locals, maxStack, code, sourceRange) + // Build an Abstract IL method + instrs, mkILMethodBody (eenv.initLocals, locals, maxStack, code, sourceRange) let StartDelayedLocalScope nm cgbuf = let startScope = CG.GenerateDelayMark cgbuf ("start_" + nm) @@ -2080,20 +2162,20 @@ let ComputeDebugPointForBinding g (TBind(_, e, spBind) as bind) = false, None, SPSuppress else match spBind, stripExpr e with - | NoDebugPointAtInvisibleBinding, _ -> false, None, SPSuppress - | NoDebugPointAtStickyBinding, _ -> true, None, SPSuppress - | NoDebugPointAtDoBinding, _ -> false, None, SPAlways - | NoDebugPointAtLetBinding, _ -> false, None, SPSuppress + | DebugPointAtBinding.NoneAtInvisible, _ -> false, None, SPSuppress + | DebugPointAtBinding.NoneAtSticky, _ -> true, None, SPSuppress + | DebugPointAtBinding.NoneAtDo, _ -> false, None, SPAlways + | DebugPointAtBinding.NoneAtLet, _ -> false, None, SPSuppress // Don't emit sequence points for lambdas. // SEQUENCE POINT REVIEW: don't emit for lazy either, nor any builder expressions, nor interface-implementing object expressions | _, (Expr.Lambda _ | Expr.TyLambda _) -> false, None, SPSuppress - | DebugPointAtBinding m, _ -> false, Some m, SPSuppress + | DebugPointAtBinding.Yes m, _ -> false, Some m, SPSuppress /// Determines if a sequence will be emitted when we generate the code for a binding. /// -/// False for Lambdas, BindingEmitsNoCode, NoDebugPointAtStickyBinding, NoDebugPointAtInvisibleBinding, and NoDebugPointAtLetBinding. -/// True for DebugPointAtBinding, NoDebugPointAtDoBinding. +/// False for Lambdas, BindingEmitsNoCode, DebugPointAtBinding.NoneAtSticky, DebugPointAtBinding.NoneAtInvisible, and DebugPointAtBinding.NoneAtLet. +/// True for DebugPointAtBinding.Yes, DebugPointAtBinding.NoneAtDo. let BindingEmitsDebugPoint g bind = match ComputeDebugPointForBinding g bind with | _, None, SPSuppress -> false @@ -2101,7 +2183,7 @@ let BindingEmitsDebugPoint g bind = let BindingIsInvisible (TBind(_, _, spBind)) = match spBind with - | NoDebugPointAtInvisibleBinding _ -> true + | DebugPointAtBinding.NoneAtInvisible _ -> true | _ -> false /// Determines if the code generated for a binding is to be marked as hidden, e.g. the 'newobj' for a local function definition. @@ -2129,7 +2211,7 @@ let rec FirstEmittedCodeWillBeDebugPoint g sp expr = | DebugPointAtSequential.Both -> true | DebugPointAtSequential.StmtOnly -> true | DebugPointAtSequential.ExprOnly -> false - | Expr.Match (DebugPointAtBinding _, _, _, _, _, _) -> true + | Expr.Match (DebugPointAtBinding.Yes _, _, _, _, _, _) -> true | Expr.Op ((TOp.TryWith (DebugPointAtTry.Yes _, _) | TOp.TryFinally (DebugPointAtTry.Yes _, _) | TOp.For (DebugPointAtFor.Yes _, _) @@ -2137,7 +2219,7 @@ let rec FirstEmittedCodeWillBeDebugPoint g sp expr = | _ -> false | SPSuppress -> - false + false /// Suppress sequence points for some compound expressions - though not all - even if "SPAlways" is set. /// @@ -2151,7 +2233,7 @@ let EmitDebugPointForWholeExpr g sp expr = // In some cases, we emit sequence points for the 'whole' of a 'let' expression. // Specifically, when // + SPAlways (i.e. a sequence point is required as soon as meaningful) - // + binding is NoDebugPointAtStickyBinding, or NoDebugPointAtLetBinding. + // + binding is DebugPointAtBinding.NoneAtSticky, or DebugPointAtBinding.NoneAtLet. // + not FirstEmittedCodeWillBeDebugPoint // For example if we start with // let someCode () = f x @@ -2230,7 +2312,7 @@ let DoesGenExprStartWithDebugPoint g sp expr = FirstEmittedCodeWillBeDebugPoint g sp expr || EmitDebugPointForWholeExpr g sp expr -let ProcessDebugPointForExpr (cenv: cenv) (cgbuf: CodeGenBuffer) sp expr = +let ProcessDebugPointForExpr (cenv: cenv) (cgbuf: CodeGenBuffer) sp expr = let g = cenv.g if not (FirstEmittedCodeWillBeDebugPoint g sp expr) then if EmitDebugPointForWholeExpr g sp expr then @@ -2277,6 +2359,12 @@ and GenExprPreSteps (cenv: cenv) (cgbuf: CodeGenBuffer) eenv sp expr sequel = ProcessDebugPointForExpr cenv cgbuf sp expr + match (if compileSequenceExpressions then LowerComputedListOrArrayExpr cenv.tcVal g cenv.amap expr else None) with + | Some altExpr -> + GenExpr cenv cgbuf eenv sp altExpr sequel + true + | None -> + match (if compileSequenceExpressions then ConvertSequenceExprToObject g cenv.amap expr else None) with | Some info -> GenSequenceExpr cenv cgbuf eenv info sequel @@ -2297,8 +2385,8 @@ and GenExprAux (cenv: cenv) (cgbuf: CodeGenBuffer) eenv sp expr sequel = // for large lists we have to process the linearity separately | Expr.Sequential _ | Expr.Let _ - | LinearOpExpr _ - | Expr.Match _ -> + | LinearOpExpr _ + | Expr.Match _ -> GenLinearExpr cenv cgbuf eenv sp expr sequel false id |> ignore | Expr.Const (c, m, ty) -> @@ -2321,65 +2409,65 @@ and GenExprAux (cenv: cenv) (cgbuf: CodeGenBuffer) eenv sp expr sequel = // application of local type functions with type parameters = measure types and body = local value - inline the body GenExpr cenv cgbuf eenv sp v sequel - | Expr.App (f, fty, tyargs, curriedArgs, m) -> + | Expr.App (f, fty, tyargs, curriedArgs, m) -> GenApp cenv cgbuf eenv (f, fty, tyargs, curriedArgs, m) sequel - | Expr.Val (v, _, m) -> + | Expr.Val (v, _, m) -> GenGetVal cenv cgbuf eenv (v, m) sequel - | Expr.Op (op, tyargs, args, m) -> - match op, args, tyargs with - | TOp.ExnConstr c, _, _ -> + | Expr.Op (op, tyargs, args, m) -> + match op, args, tyargs with + | TOp.ExnConstr c, _, _ -> GenAllocExn cenv cgbuf eenv (c, args, m) sequel - | TOp.UnionCase c, _, _ -> + | TOp.UnionCase c, _, _ -> GenAllocUnionCase cenv cgbuf eenv (c, tyargs, args, m) sequel - | TOp.Recd (isCtor, tycon), _, _ -> + | TOp.Recd (isCtor, tycon), _, _ -> GenAllocRecd cenv cgbuf eenv isCtor (tycon, tyargs, args, m) sequel - | TOp.AnonRecd anonInfo, _, _ -> + | TOp.AnonRecd anonInfo, _, _ -> GenAllocAnonRecd cenv cgbuf eenv (anonInfo, tyargs, args, m) sequel - | TOp.AnonRecdGet (anonInfo, n), [e], _ -> + | TOp.AnonRecdGet (anonInfo, n), [e], _ -> GenGetAnonRecdField cenv cgbuf eenv (anonInfo, e, tyargs, n, m) sequel - | TOp.TupleFieldGet (tupInfo, n), [e], _ -> + | TOp.TupleFieldGet (tupInfo, n), [e], _ -> GenGetTupleField cenv cgbuf eenv (tupInfo, e, tyargs, n, m) sequel - | TOp.ExnFieldGet (ecref, n), [e], _ -> + | TOp.ExnFieldGet (ecref, n), [e], _ -> GenGetExnField cenv cgbuf eenv (e, ecref, n, m) sequel - | TOp.UnionCaseFieldGet (ucref, n), [e], _ -> + | TOp.UnionCaseFieldGet (ucref, n), [e], _ -> GenGetUnionCaseField cenv cgbuf eenv (e, ucref, tyargs, n, m) sequel - | TOp.UnionCaseFieldGetAddr (ucref, n, _readonly), [e], _ -> + | TOp.UnionCaseFieldGetAddr (ucref, n, _readonly), [e], _ -> GenGetUnionCaseFieldAddr cenv cgbuf eenv (e, ucref, tyargs, n, m) sequel - | TOp.UnionCaseTagGet ucref, [e], _ -> + | TOp.UnionCaseTagGet ucref, [e], _ -> GenGetUnionCaseTag cenv cgbuf eenv (e, ucref, tyargs, m) sequel - | TOp.UnionCaseProof ucref, [e], _ -> + | TOp.UnionCaseProof ucref, [e], _ -> GenUnionCaseProof cenv cgbuf eenv (e, ucref, tyargs, m) sequel - | TOp.ExnFieldSet (ecref, n), [e;e2], _ -> - GenSetExnField cenv cgbuf eenv (e, ecref, n, e2, m) sequel - | TOp.UnionCaseFieldSet (ucref, n), [e;e2], _ -> + | TOp.ExnFieldSet (ecref, n), [e;e2], _ -> + GenSetExnField cenv cgbuf eenv (e, ecref, n, e2, m) sequel + | TOp.UnionCaseFieldSet (ucref, n), [e;e2], _ -> GenSetUnionCaseField cenv cgbuf eenv (e, ucref, tyargs, n, e2, m) sequel - | TOp.ValFieldGet f, [e], _ -> + | TOp.ValFieldGet f, [e], _ -> GenGetRecdField cenv cgbuf eenv (e, f, tyargs, m) sequel - | TOp.ValFieldGet f, [], _ -> + | TOp.ValFieldGet f, [], _ -> GenGetStaticField cenv cgbuf eenv (f, tyargs, m) sequel - | TOp.ValFieldGetAddr (f, _readonly), [e], _ -> + | TOp.ValFieldGetAddr (f, _readonly), [e], _ -> GenGetRecdFieldAddr cenv cgbuf eenv (e, f, tyargs, m) sequel - | TOp.ValFieldGetAddr (f, _readonly), [], _ -> + | TOp.ValFieldGetAddr (f, _readonly), [], _ -> GenGetStaticFieldAddr cenv cgbuf eenv (f, tyargs, m) sequel - | TOp.ValFieldSet f, [e1;e2], _ -> + | TOp.ValFieldSet f, [e1;e2], _ -> GenSetRecdField cenv cgbuf eenv (e1, f, tyargs, e2, m) sequel - | TOp.ValFieldSet f, [e2], _ -> + | TOp.ValFieldSet f, [e2], _ -> GenSetStaticField cenv cgbuf eenv (f, tyargs, e2, m) sequel - | TOp.Tuple tupInfo, _, _ -> + | TOp.Tuple tupInfo, _, _ -> GenAllocTuple cenv cgbuf eenv (tupInfo, args, tyargs, m) sequel - | TOp.ILAsm (instrs, retTypes), _, _ -> - GenAsmCode cenv cgbuf eenv (instrs, tyargs, args, retTypes, m) sequel - | TOp.While (sp, _), [Expr.Lambda (_, _, _, [_], e1, _, _);Expr.Lambda (_, _, _, [_], e2, _, _)], [] -> - GenWhileLoop cenv cgbuf eenv (sp, e1, e2, m) sequel - | TOp.For (spStart, dir), [Expr.Lambda (_, _, _, [_], e1, _, _);Expr.Lambda (_, _, _, [_], e2, _, _);Expr.Lambda (_, _, _, [v], e3, _, _)], [] -> + | TOp.ILAsm (instrs, retTypes), _, _ -> + GenAsmCode cenv cgbuf eenv (instrs, tyargs, args, retTypes, m) sequel + | TOp.While (sp, _), [Expr.Lambda (_, _, _, [_], e1, _, _);Expr.Lambda (_, _, _, [_], e2, _, _)], [] -> + GenWhileLoop cenv cgbuf eenv (sp, e1, e2, m) sequel + | TOp.For (spStart, dir), [Expr.Lambda (_, _, _, [_], e1, _, _);Expr.Lambda (_, _, _, [_], e2, _, _);Expr.Lambda (_, _, _, [v], e3, _, _)], [] -> GenForLoop cenv cgbuf eenv (spStart, v, e1, dir, e2, e3, m) sequel - | TOp.TryFinally (spTry, spFinally), [Expr.Lambda (_, _, _, [_], e1, _, _); Expr.Lambda (_, _, _, [_], e2, _, _)], [resty] -> + | TOp.TryFinally (spTry, spFinally), [Expr.Lambda (_, _, _, [_], e1, _, _); Expr.Lambda (_, _, _, [_], e2, _, _)], [resty] -> GenTryFinally cenv cgbuf eenv (e1, e2, m, resty, spTry, spFinally) sequel | TOp.TryWith (spTry, spWith), [Expr.Lambda (_, _, _, [_], e1, _, _); Expr.Lambda (_, _, _, [vf], ef, _, _);Expr.Lambda (_, _, _, [vh], eh, _, _)], [resty] -> GenTryWith cenv cgbuf eenv (e1, vf, ef, vh, eh, m, resty, spTry, spWith) sequel - | TOp.ILCall (isVirtual, _, isStruct, isCtor, valUseFlag, _, noTailCall, ilMethRef, enclTypeInst, methInst, returnTypes), args, [] -> + | TOp.ILCall (isVirtual, _, isStruct, isCtor, valUseFlag, _, noTailCall, ilMethRef, enclTypeInst, methInst, returnTypes), args, [] -> GenILCall cenv cgbuf eenv (isVirtual, isStruct, isCtor, valUseFlag, noTailCall, ilMethRef, enclTypeInst, methInst, args, returnTypes, m) sequel | TOp.RefAddrGet _readonly, [e], [ty] -> GenGetAddrOfRefCellField cenv cgbuf eenv (e, ty, m) sequel | TOp.Coerce, [e], [tgty;srcty] -> GenCoerce cenv cgbuf eenv (e, tgty, m, srcty) sequel @@ -2390,8 +2478,8 @@ and GenExprAux (cenv: cenv) (cgbuf: CodeGenBuffer) eenv sp expr sequel = | TOp.LValueOp (LByrefSet, v), [e], [] -> GenSetByref cenv cgbuf eenv (v, e, m) sequel | TOp.LValueOp (LAddrOf _, v), [], [] -> GenGetValAddr cenv cgbuf eenv (v, m) sequel | TOp.Array, elems, [elemTy] -> GenNewArray cenv cgbuf eenv (elems, elemTy, m) sequel - | TOp.Bytes bytes, [], [] -> - if cenv.opts.emitConstantArraysUsingStaticDataBlobs then + | TOp.Bytes bytes, [], [] -> + if cenv.opts.emitConstantArraysUsingStaticDataBlobs then GenConstArray cenv cgbuf eenv g.ilg.typ_Byte bytes (fun buf b -> buf.EmitByte b) GenSequel cenv eenv.cloc cgbuf sequel else @@ -2447,7 +2535,7 @@ and CodeGenMethodForExpr cenv mgbuf (spReq, entryPointInfo, methodName, eenv, al CodeGenMethod cenv mgbuf (entryPointInfo, methodName, eenv, alreadyUsedArgs, (fun cgbuf eenv -> GenExpr cenv cgbuf eenv spReq expr0 sequel0), expr0.Range) - code + code //-------------------------------------------------------------------------- // Generate sequels @@ -2652,7 +2740,7 @@ and GenAllocUnionCase cenv cgbuf eenv (c,tyargs,args,m) sequel = and GenLinearExpr cenv cgbuf eenv sp expr sequel preSteps (contf: FakeUnit -> FakeUnit) = let expr = stripExpr expr - match expr with + match expr with | Expr.Sequential (e1, e2, specialSeqFlag, spSeq, _) -> // Process the debug point and see if there's a replacement technique to process this expression if preSteps && GenExprPreSteps cenv cgbuf eenv sp expr sequel then contf Fake else @@ -2690,12 +2778,12 @@ and GenLinearExpr cenv cgbuf eenv sp expr sequel preSteps (contf: FakeUnit -> Fa // For sticky bindings arising from inlining we suppress any immediate sequence point in the body let spBody = match bind.DebugPoint with - | DebugPointAtBinding _ - | NoDebugPointAtLetBinding - | NoDebugPointAtDoBinding -> SPAlways - | NoDebugPointAtInvisibleBinding -> sp - | NoDebugPointAtStickyBinding -> SPSuppress - + | DebugPointAtBinding.Yes _ + | DebugPointAtBinding.NoneAtLet + | DebugPointAtBinding.NoneAtDo -> SPAlways + | DebugPointAtBinding.NoneAtInvisible -> sp + | DebugPointAtBinding.NoneAtSticky -> SPSuppress + // Generate the body GenLinearExpr cenv cgbuf eenv spBody body (EndLocalScope(sequel, endScope)) true contf @@ -2704,11 +2792,11 @@ and GenLinearExpr cenv cgbuf eenv sp expr sequel preSteps (contf: FakeUnit -> Fa if preSteps && GenExprPreSteps cenv cgbuf eenv sp expr sequel then contf Fake else match spBind with - | DebugPointAtBinding m -> CG.EmitSeqPoint cgbuf m - | NoDebugPointAtDoBinding - | NoDebugPointAtLetBinding - | NoDebugPointAtInvisibleBinding - | NoDebugPointAtStickyBinding -> () + | DebugPointAtBinding.Yes m -> CG.EmitSeqPoint cgbuf m + | DebugPointAtBinding.NoneAtDo + | DebugPointAtBinding.NoneAtLet + | DebugPointAtBinding.NoneAtInvisible + | DebugPointAtBinding.NoneAtSticky -> () // The target of branch needs a sequence point. // If we don't give it one it will get entirely the wrong sequence point depending on earlier codegen @@ -2738,7 +2826,7 @@ and GenLinearExpr cenv cgbuf eenv sp expr sequel preSteps (contf: FakeUnit -> Fa // match-testing (dtrees) should not contribute to the stack. // Each branch-RHS (targets) may contribute to the stack, leaving it in the "stackAfterJoin" state, for the join point. // Since code is branching and joining, the cgbuf stack is maintained manually. - GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequelOnBranches (contf << (fun Fake -> + GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequelOnBranches (contf << (fun Fake -> CG.SetMarkToHere cgbuf afterJoin //assert(cgbuf.GetCurrentStack() = stackAfterJoin) // REVIEW: Since gen_dtree* now sets stack, stack should be stackAfterJoin at this point... @@ -2765,12 +2853,12 @@ and GenLinearExpr cenv cgbuf eenv sp expr sequel preSteps (contf: FakeUnit -> Fa if preSteps && GenExprPreSteps cenv cgbuf eenv sp expr sequel then contf Fake else GenExprs cenv cgbuf eenv argsFront - GenLinearExpr cenv cgbuf eenv SPSuppress argLast Continue true (contf << (fun Fake -> + GenLinearExpr cenv cgbuf eenv SPSuppress argLast Continue true (contf << (fun Fake -> GenAllocUnionCaseCore cenv cgbuf eenv (c, tyargs, argsFront.Length + 1, m) GenSequel cenv eenv.cloc cgbuf sequel Fake)) - | _ -> + | _ -> GenExpr cenv cgbuf eenv sp expr sequel contf Fake @@ -2816,7 +2904,7 @@ and GenGetAnonRecdField cenv cgbuf eenv (anonInfo: AnonRecdTypeInfo, e, tyargs, let ilTypeArgs = GenTypeArgs cenv.amap m eenv.tyenv tyargs let anonMethod = anonMethods.[n] let anonFieldType = ilTypeArgs.[n] - GenExpr cenv cgbuf eenv SPSuppress e Continue + GenExpr cenv cgbuf eenv SPSuppress e Continue CG.EmitInstr cgbuf (pop 1) (Push [anonFieldType]) (mkNormalCall (mkILMethSpec(anonMethod, boxity, ilTypeArgs, []))) GenSequel cenv eenv.cloc cgbuf sequel @@ -2824,11 +2912,15 @@ and GenNewArraySimple cenv cgbuf eenv (elems, elemTy, m) sequel = let ilElemTy = GenType cenv.amap m eenv.tyenv elemTy let ilArrTy = mkILArr1DTy ilElemTy - CG.EmitInstrs cgbuf (pop 0) (Push [ilArrTy]) [ (AI_ldc (DT_I4, ILConst.I4 (elems.Length))); I_newarr (ILArrayShape.SingleDimensional, ilElemTy) ] - elems |> List.iteri (fun i e -> - CG.EmitInstrs cgbuf (pop 0) (Push [ilArrTy; cenv.g.ilg.typ_Int32]) [ AI_dup; (AI_ldc (DT_I4, ILConst.I4 i)) ] - GenExpr cenv cgbuf eenv SPSuppress e Continue - CG.EmitInstr cgbuf (pop 3) Push0 (I_stelem_any (ILArrayShape.SingleDimensional, ilElemTy))) + if List.isEmpty elems && cenv.g.isArrayEmptyAvailable then + mkNormalCall (mkILMethSpecInTy (cenv.g.ilg.typ_Array, ILCallingConv.Static, "Empty", [], mkILArr1DTy (mkILTyvarTy 0us), [ilElemTy])) + |> CG.EmitInstr cgbuf (pop 0) (Push [ilArrTy]) + else + CG.EmitInstrs cgbuf (pop 0) (Push [ilArrTy]) [ (AI_ldc (DT_I4, ILConst.I4 (elems.Length))); I_newarr (ILArrayShape.SingleDimensional, ilElemTy) ] + elems |> List.iteri (fun i e -> + CG.EmitInstrs cgbuf (pop 0) (Push [ilArrTy; cenv.g.ilg.typ_Int32]) [ AI_dup; (AI_ldc (DT_I4, ILConst.I4 i)) ] + GenExpr cenv cgbuf eenv SPSuppress e Continue + CG.EmitInstr cgbuf (pop 3) Push0 (I_stelem_any (ILArrayShape.SingleDimensional, ilElemTy))) GenSequel cenv eenv.cloc cgbuf sequel @@ -2874,7 +2966,7 @@ and GenNewArray cenv cgbuf eenv (elems: Expr list, elemTy, m) sequel = (fun buf -> function Const.Int32 b -> buf.EmitInt32 b | _ -> failwith "unreachable") | Expr.Const (Const.Int64 _, _, _) -> (function Const.Int64 _ -> true | _ -> false), - (fun buf -> function Const.Int64 b -> buf.EmitInt64 b | _ -> failwith "unreachable") + (fun buf -> function Const.Int64 b -> buf.EmitInt64 b | _ -> failwith "unreachable") | _ -> (function _ -> false), (fun _ _ -> failwith "unreachable") if elems' |> Array.forall (function Expr.Const (c, _, _) -> test c | _ -> false) then @@ -2890,7 +2982,7 @@ and GenCoerce cenv cgbuf eenv (e, tgty, m, srcty) sequel = // Is this an upcast? if TypeRelations.TypeDefinitelySubsumesTypeNoCoercion 0 g cenv.amap m tgty srcty && // Do an extra check - should not be needed - TypeRelations.TypeFeasiblySubsumesType 0 g cenv.amap m tgty TypeRelations.NoCoerce srcty + TypeRelations.TypeFeasiblySubsumesType 0 g cenv.amap m tgty TypeRelations.NoCoerce srcty then if isInterfaceTy g tgty then GenExpr cenv cgbuf eenv SPSuppress e Continue @@ -2911,7 +3003,7 @@ and GenCoerce cenv cgbuf eenv (e, tgty, m, srcty) sequel = CG.EmitInstrs cgbuf (pop 1) (Push [ilToTy]) [ I_unbox_any ilToTy ] GenSequel cenv eenv.cloc cgbuf sequel -and GenReraise cenv cgbuf eenv (rtnty, m) sequel = +and GenReraise cenv cgbuf eenv (rtnty, m) sequel = let ilReturnTy = GenType cenv.amap m eenv.tyenv rtnty CG.EmitInstrs cgbuf (pop 0) Push0 [I_rethrow] // [See comment related to I_throw]. @@ -2948,13 +3040,13 @@ and GenSetExnField cenv cgbuf eenv (e, ecref, fieldNum, e2, m) sequel = and UnionCodeGen (cgbuf: CodeGenBuffer) = { new EraseUnions.ICodeGen with - member __.CodeLabel m = m.CodeLabel - member __.GenerateDelayMark() = CG.GenerateDelayMark cgbuf "unionCodeGenMark" - member __.GenLocal ilty = cgbuf.AllocLocal([], ilty, false) |> uint16 - member __.SetMarkToHere m = CG.SetMarkToHere cgbuf m - member __.MkInvalidCastExnNewobj () = mkInvalidCastExnNewobj cgbuf.mgbuf.cenv.g - member __.EmitInstr x = CG.EmitInstr cgbuf (pop 0) (Push []) x - member __.EmitInstrs xs = CG.EmitInstrs cgbuf (pop 0) (Push []) xs } + member _.CodeLabel m = m.CodeLabel + member _.GenerateDelayMark() = CG.GenerateDelayMark cgbuf "unionCodeGenMark" + member _.GenLocal ilty = cgbuf.AllocLocal([], ilty, false) |> uint16 + member _.SetMarkToHere m = CG.SetMarkToHere cgbuf m + member _.MkInvalidCastExnNewobj () = mkInvalidCastExnNewobj cgbuf.mgbuf.cenv.g + member _.EmitInstr x = CG.EmitInstr cgbuf (pop 0) (Push []) x + member _.EmitInstrs xs = CG.EmitInstrs cgbuf (pop 0) (Push []) xs } and GenUnionCaseProof cenv cgbuf eenv (e, ucref, tyargs, m) sequel = let g = cenv.g @@ -3013,12 +3105,12 @@ and GenGetRecdFieldAddr cenv cgbuf eenv (e, f, tyargs, m) sequel = let fref = GenRecdFieldRef m cenv eenv.tyenv f tyargs CG.EmitInstrs cgbuf (pop 1) (Push [ILType.Byref fref.ActualType]) [ I_ldflda fref ] GenSequel cenv eenv.cloc cgbuf sequel - + and GenGetStaticFieldAddr cenv cgbuf eenv (f, tyargs, m) sequel = let fspec = GenRecdFieldRef m cenv eenv.tyenv f tyargs CG.EmitInstrs cgbuf (pop 0) (Push [ILType.Byref fspec.ActualType]) [ I_ldsflda fspec ] GenSequel cenv eenv.cloc cgbuf sequel - + and GenGetRecdField cenv cgbuf eenv (e, f, tyargs, m) sequel = GenExpr cenv cgbuf eenv SPSuppress e Continue GenFieldGet false cenv cgbuf eenv (f, tyargs, m) @@ -3119,10 +3211,10 @@ and GenUntupledArgExpr cenv cgbuf eenv m argInfos expr = and GenWitnessArgFromTraitInfo cenv cgbuf eenv m traitInfo = let g = cenv.g let storage = TryStorageForWitness g eenv traitInfo.TraitKey - match storage with + match storage with | None -> let witnessExpr = - ConstraintSolver.CodegenWitnessArgForTraitConstraint cenv.tcVal g cenv.amap m traitInfo + ConstraintSolver.CodegenWitnessArgForTraitConstraint cenv.tcVal g cenv.amap m traitInfo |> CommitOperationResult match witnessExpr with | Choice1Of2 _traitInfo -> @@ -3131,18 +3223,18 @@ and GenWitnessArgFromTraitInfo cenv cgbuf eenv m traitInfo = | Choice2Of2 arg -> let eenv = { eenv with suppressWitnesses = true } GenExpr cenv cgbuf eenv SPSuppress arg Continue - | Some storage -> + | Some storage -> let ty = GenWitnessTy g traitInfo.TraitKey GenGetStorageAndSequel cenv cgbuf eenv m (ty, GenType cenv.amap m eenv.tyenv ty) storage None and GenWitnessArgFromWitnessInfo cenv cgbuf eenv m witnessInfo = let g = cenv.g let storage = TryStorageForWitness g eenv witnessInfo - match storage with + match storage with | None -> System.Diagnostics.Debug.Assert(false, "expected storage for witness") failwith "unexpected non-generation of witness " - | Some storage -> + | Some storage -> let ty = GenWitnessTy g witnessInfo GenGetStorageAndSequel cenv cgbuf eenv m (ty, GenType cenv.amap m eenv.tyenv ty) storage None @@ -3150,7 +3242,7 @@ and GenWitnessArgsFromWitnessInfos cenv cgbuf eenv m witnessInfos = let g = cenv.g let generateWitnesses = ComputeGenerateWitnesses g eenv // Witness arguments are only generated in emitted 'inline' code where witness parameters are available. - if generateWitnesses then + if generateWitnesses then for witnessInfo in witnessInfos do GenWitnessArgFromWitnessInfo cenv cgbuf eenv m witnessInfo @@ -3158,13 +3250,13 @@ and GenWitnessArgs cenv cgbuf eenv m tps tyargs = let g = cenv.g let generateWitnesses = ComputeGenerateWitnesses g eenv // Witness arguments are only generated in emitted 'inline' code where witness parameters are available. - if generateWitnesses then - let mwitnesses = - ConstraintSolver.CodegenWitnessesForTyparInst cenv.tcVal g cenv.amap m tps tyargs + if generateWitnesses then + let mwitnesses = + ConstraintSolver.CodegenWitnessesForTyparInst cenv.tcVal g cenv.amap m tps tyargs |> CommitOperationResult for witnessArg in mwitnesses do - match witnessArg with + match witnessArg with | Choice1Of2 traitInfo -> GenWitnessArgFromTraitInfo cenv cgbuf eenv m traitInfo | Choice2Of2 arg -> @@ -3173,7 +3265,7 @@ and GenWitnessArgs cenv cgbuf eenv m tps tyargs = and GenApp (cenv: cenv) cgbuf eenv (f, fty, tyargs, curriedArgs, m) sequel = let g = cenv.g match (f, tyargs, curriedArgs) with - // Look for tailcall to turn into branch + // Look for tailcall to turn into branch | (Expr.Val (v, _, _), _, _) when match ListAssoc.tryFind g.valRefEq v eenv.innerVals with | Some (kind, _) -> @@ -3222,12 +3314,12 @@ and GenApp (cenv: cenv) cgbuf eenv (f, fty, tyargs, curriedArgs, m) sequel = // Extension methods with empty arguments are evidently not quite in sufficiently normalized form, // so apply a fixup here. This feels like a mistake associated with BindUnitVars, where that is not triggering // in this case. - let numArgs = + let numArgs = if v.IsExtensionMember then match curriedArgInfos, curriedArgs with - // static extension method with empty arguments. + // static extension method with empty arguments. | [[]], [_] when numObjArgs = 0 -> 0 - // instance extension method with empty arguments. + // instance extension method with empty arguments. | [[_];[]], [_;_] when numObjArgs = 0 -> 1 | _ -> numMethodArgs else numMethodArgs @@ -3243,14 +3335,14 @@ and GenApp (cenv: cenv) cgbuf eenv (f, fty, tyargs, curriedArgs, m) sequel = CG.EmitInstrs cgbuf (pop 0) Push0 [ I_br mark.CodeLabel ] GenSequelEndScopes cgbuf sequel - + // PhysicalEquality becomes cheap reference equality once // a nominal type is known. We can't replace it for variable types since // a "ceq" instruction can't be applied to variable type values. | (Expr.Val (v, _, _), [ty], [arg1;arg2]) when (valRefEq g v g.reference_equality_inner_vref) && isAppTy g ty -> - + GenExpr cenv cgbuf eenv SPSuppress arg1 Continue GenExpr cenv cgbuf eenv SPSuppress arg2 Continue CG.EmitInstr cgbuf (pop 2) (Push [g.ilg.typ_Bool]) AI_ceq @@ -3266,18 +3358,18 @@ and GenApp (cenv: cenv) cgbuf eenv (f, fty, tyargs, curriedArgs, m) sequel = // Generate ldtoken instruction for "methodhandleof(fun (a, b, c) -> f(a, b, c))" // where f is an F# function value or F# method | Expr.Lambda (_, _, _, _, Expr.App (OptionalCoerce(OptionalTyapp(Expr.Val (vref, _, _))), _, _, _, _), _, _) -> - + let storage = StorageForValRef g m vref eenv match storage with | Method (_, _, mspec, _, _, _, _, _, _, _, _, _) -> CG.EmitInstr cgbuf (pop 0) (Push [g.iltyp_RuntimeMethodHandle]) (I_ldtoken (ILToken.ILMethod mspec)) | _ -> errorR(Error(FSComp.SR.ilxgenUnexpectedArgumentToMethodHandleOfDuringCodegen(), m)) - + // Generate ldtoken instruction for "methodhandleof(fun (a, b, c) -> obj.M(a, b, c))" // where M is an IL method. | Expr.Lambda (_, _, _, _, Expr.Op (TOp.ILCall (_, _, isStruct, _, _, _, _, ilMethRef, enclTypeInst, methInst, _), _, _, _), _, _) -> - + let boxity = (if isStruct then AsValue else AsObject) let mkFormalParams gparams = gparams |> DropErasedTyargs |> List.mapi (fun n _gf -> mkILTyvarTy (uint16 n)) let ilGenericMethodSpec = IL.mkILMethSpec (ilMethRef, boxity, mkFormalParams enclTypeInst, mkFormalParams methInst) @@ -3312,11 +3404,11 @@ and GenApp (cenv: cenv) cgbuf eenv (f, fty, tyargs, curriedArgs, m) sequel = let _, witnessInfos, curriedArgInfos, returnTy, _ = GetTopValTypeInCompiledForm cenv.g topValInfo ctps.Length vref.Type m - let mspec = + let mspec = let generateWitnesses = ComputeGenerateWitnesses g eenv if not generateWitnesses || witnessInfos.IsEmpty then - mspec - else + mspec + else mspecW let ilTyArgs = GenTypeArgs cenv.amap m eenv.tyenv tyargs @@ -3339,15 +3431,15 @@ and GenApp (cenv: cenv) cgbuf eenv (f, fty, tyargs, curriedArgs, m) sequel = let boxity = mspec.DeclaringType.Boxity let mspec = mkILMethSpec (mspec.MethodRef, boxity, ilEnclArgTys, ilMethArgTys) - + // "Unit" return types on static methods become "void" let mustGenerateUnitAfterCall = Option.isNone returnTy - + let ccallInfo = match valUseFlags with | PossibleConstrainedCall ty -> Some ty | _ -> None - + let isBaseCall = match valUseFlags with VSlotDirectCall -> true | _ -> false let isTailCall = @@ -3358,9 +3450,9 @@ and GenApp (cenv: cenv) cgbuf eenv (f, fty, tyargs, curriedArgs, m) sequel = CanTailcall((boxity=AsValue), ccallInfo, eenv.withinSEH, hasByrefArg, mustGenerateUnitAfterCall, isDllImport, isSelfInit, makesNoCriticalTailcalls, sequel) else Normalcall - + let useICallVirt = virtualCall || useCallVirt cenv boxity mspec isBaseCall - + let callInstr = match valUseFlags with | PossibleConstrainedCall ty -> @@ -3423,21 +3515,21 @@ and GenApp (cenv: cenv) cgbuf eenv (f, fty, tyargs, curriedArgs, m) sequel = | Choice1Of2 (ilTy, loc) -> EmitGetLocal cgbuf ilTy loc | Choice2Of2 expr -> GenExpr cenv cgbuf eenv SPSuppress expr Continue) GenIndirectCall cenv cgbuf eenv (actualRetTy, [], laterArgs, m) sequel) - + | _ -> failwith "??" - + // This case is for getting/calling a value, when we can't call it directly. // However, we know the type instantiation for the value. // In this case we can often generate a type-specific local expression for the value. // This reduces the number of dynamic type applications. | (Expr.Val (vref, _, _), _, _) -> GenGetValRefAndSequel cenv cgbuf eenv m vref (Some (tyargs, curriedArgs, m, sequel)) - + | _ -> (* worst case: generate a first-class function value and call *) GenExpr cenv cgbuf eenv SPSuppress f Continue GenCurriedArgsAndIndirectCall cenv cgbuf eenv (fty, tyargs, curriedArgs, m) sequel - + and CanTailcall (hasStructObjArg, ccallInfo, withinSEH, hasByrefArg, mustGenerateUnitAfterCall, isDllImport, isSelfInit, makesNoCriticalTailcalls, sequel) = // Can't tailcall with a struct object arg since it involves a byref @@ -3453,35 +3545,107 @@ and CanTailcall (hasStructObjArg, ccallInfo, withinSEH, hasByrefArg, mustGenerat | _ -> false) then Tailcall else Normalcall - + +/// Choose the names for TraitWitnessInfo representations in arguments and free variables +and ChooseWitnessInfoNames takenNames (witnessInfos: TraitWitnessInfo list) = + witnessInfos + |> List.map (fun w -> String.uncapitalize w.MemberName) + |> ChooseFreeVarNames takenNames + +/// Represent the TraitWitnessInfos as arguments, e.g. in local type functions +and ArgStorageForWitnessInfos (cenv: cenv) (eenv: IlxGenEnv) takenNames pretakenArgs m (witnessInfos: TraitWitnessInfo list) = + let names = ChooseWitnessInfoNames takenNames witnessInfos + (witnessInfos, List.indexed names) + ||> List.map2 (fun w (i, nm) -> + let ty = GenWitnessTy cenv.g w + let ilTy = GenType cenv.amap m eenv.tyenv ty + let ilParam = mkILParam (Some nm, ilTy) + let storage = Arg (i+pretakenArgs) + ilParam, (w, storage)) + |> List.unzip + +/// Represent the TraitWitnessInfos as free variables, e.g. in closures +and FreeVarStorageForWitnessInfos (cenv: cenv) (eenv: IlxGenEnv) takenNames ilCloTyInner m (witnessInfos: TraitWitnessInfo list) = + let names = ChooseWitnessInfoNames takenNames witnessInfos + (witnessInfos, names) + ||> List.map2 (fun w nm -> + let ty = GenWitnessTy cenv.g w + let ilTy = GenType cenv.amap m eenv.tyenv ty + let ilFv = mkILFreeVar (nm, true, ilTy) + let storage = + let ilField = mkILFieldSpecInTy (ilCloTyInner, ilFv.fvName, ilFv.fvType) + Env(ilCloTyInner, ilField, None) + ilFv, (w, storage)) + |> List.unzip + +//-------------------------------------------------------------------------- +// Named local type functions +//-------------------------------------------------------------------------- + +and IsNamedLocalTypeFuncVal g (v: Val) expr = + not v.IsCompiledAsTopLevel && + IsGenericValWithGenericConstraints g v && + (match stripExpr expr with Expr.TyLambda _ -> true | _ -> false) + +and AddDirectTyparWitnessParams cenv eenv cloinfo m = + let directTypars = + match cloinfo.cloExpr with + | Expr.TyLambda (_, tvs, _, _, _) -> tvs + | _ -> [] + + let directWitnessInfos = + let generateWitnesses = ComputeGenerateWitnesses cenv.g eenv + if generateWitnesses then + // The 0 here represents that a closure doesn't reside within a generic class - there are no "enclosing class type parameters" to lop off. + GetTraitWitnessInfosOfTypars cenv.g 0 directTypars + else + [] + + // Direct witnesses get passed as arguments to DirectInvoke + let ilDirectWitnessParams, ilDirectWitnessParamsStorage = + let pretakenArgs = 1 + ArgStorageForWitnessInfos cenv eenv [] pretakenArgs m directWitnessInfos + let eenv = eenv |> AddStorageForLocalWitnesses ilDirectWitnessParamsStorage + + directTypars, ilDirectWitnessParams, directWitnessInfos, eenv + and GenNamedLocalTyFuncCall cenv (cgbuf: CodeGenBuffer) eenv ty cloinfo tyargs m = let g = cenv.g - let ilContractClassTyargs = - cloinfo.localTypeFuncContractFreeTypars - |> List.map mkTyparTy - |> GenTypeArgs cenv.amap m eenv.tyenv let ilTyArgs = tyargs |> GenTypeArgs cenv.amap m eenv.tyenv - let _, (ilContractMethTyargs: ILGenericParameterDefs), (ilContractCloTySpec: ILTypeSpec), ilContractFormalRetTy = - GenNamedLocalTypeFuncContractInfo cenv eenv m cloinfo + let ilCloTy = cloinfo.cloSpec.ILType + let ilDirectGenericParams, ilDirectWitnessParams, directWitnessInfos = + let eenvinner = EnvForTypars cloinfo.cloFreeTyvars eenv + let directTypars = + match cloinfo.cloExpr with + | Expr.TyLambda (_, tvs, _, _, _) -> tvs + | _ -> [] - let ilContractTy = mkILBoxedTy ilContractCloTySpec.TypeRef ilContractClassTyargs + let eenvinner = AddTyparsToEnv directTypars eenvinner - if not (ilContractMethTyargs.Length = ilTyArgs.Length) then errorR(Error(FSComp.SR.ilIncorrectNumberOfTypeArguments(), m)) + let ilDirectGenericParams = GenGenericParams cenv eenvinner directTypars + let _directTypars, ilDirectWitnessParams, directWitnessInfos, _eenv = AddDirectTyparWitnessParams cenv eenvinner cloinfo m + ilDirectGenericParams, ilDirectWitnessParams, directWitnessInfos + + if not (List.length ilDirectGenericParams = ilTyArgs.Length) then errorR(Error(FSComp.SR.ilIncorrectNumberOfTypeArguments(), m)) - // Local TyFunc are represented as a $contract type. they currently get stored in a value of type object // Recover result (value or reference types) via unbox_any. - CG.EmitInstrs cgbuf (pop 1) (Push [ilContractTy]) [I_unbox_any ilContractTy] + CG.EmitInstrs cgbuf (pop 1) (Push [ilCloTy]) [I_unbox_any ilCloTy] + let actualRetTy = applyTys g ty (tyargs, []) - let ilDirectInvokeMethSpec = mkILInstanceMethSpecInTy(ilContractTy, "DirectInvoke", [], ilContractFormalRetTy, ilTyArgs) + let ilDirectWitnessParamsTys = ilDirectWitnessParams |> List.map (fun p -> p.Type) + let ilDirectInvokeMethSpec = mkILInstanceMethSpecInTy(ilCloTy, "DirectInvoke", ilDirectWitnessParamsTys, cloinfo.ilCloFormalReturnTy, ilTyArgs) + + GenWitnessArgsFromWitnessInfos cenv cgbuf eenv m directWitnessInfos + let ilActualRetTy = GenType cenv.amap m eenv.tyenv actualRetTy CountCallFuncInstructions() - CG.EmitInstr cgbuf (pop 1) (Push [ilActualRetTy]) (mkNormalCallvirt ilDirectInvokeMethSpec) + CG.EmitInstr cgbuf (pop (1+ilDirectWitnessParamsTys.Length)) (Push [ilActualRetTy]) (mkNormalCall ilDirectInvokeMethSpec) actualRetTy - + /// Generate an indirect call, converting to an ILX callfunc instruction and GenCurriedArgsAndIndirectCall cenv cgbuf eenv (functy, tyargs, curriedArgs, m) sequel = @@ -3523,7 +3687,7 @@ and GenIndirectCall cenv cgbuf eenv (functy, tyargs, curriedArgs, m) sequel = | Apps_app(arg, apps) -> IsILTypeByref arg || check apps | _ -> false check ilxClosureApps - + let isTailCall = CanTailcall(false, None, eenv.withinSEH, hasByrefArg, false, false, false, false, sequel) CountCallFuncInstructions() @@ -3612,20 +3776,20 @@ and GenTryWith cenv cgbuf eenv (e1, vf: Val, ef, vh: Val, eh, m, resty, spTry, s CG.SetMarkToHere cgbuf afterFilter let startOfHandler = CG.GenerateMark cgbuf "startOfHandler" - + CG.SetStack cgbuf [g.ilg.typ_Object] let _, eenvinner = AllocLocalVal cenv cgbuf vh eenvinner None (startOfHandler, afterHandler) CG.EmitInstr cgbuf (pop 1) (Push [g.iltyp_Exception]) (I_castclass g.iltyp_Exception) GenStoreVal cenv cgbuf eenvinner vh.Range vh GenExpr cenv cgbuf eenvinner SPAlways eh (LeaveHandler (false, whereToSave, afterHandler)) - + let endOfHandler = CG.GenerateMark cgbuf "endOfHandler" let handlerMarks = (startOfHandler.CodeLabel, endOfHandler.CodeLabel) ILExceptionClause.FilterCatch(filterMarks, handlerMarks) else let startOfHandler = CG.GenerateMark cgbuf "startOfHandler" - + match spWith with | DebugPointAtWith.Yes m -> CG.EmitSeqPoint cgbuf m | DebugPointAtWith.No -> () @@ -3637,7 +3801,7 @@ and GenTryWith cenv cgbuf eenv (e1, vf: Val, ef, vh: Val, eh, m, resty, spTry, s GenStoreVal cenv cgbuf eenvinner m vh GenExpr cenv cgbuf eenvinner SPAlways eh (LeaveHandler (false, whereToSave, afterHandler)) - + let endOfHandler = CG.GenerateMark cgbuf "endOfHandler" let handlerMarks = (startOfHandler.CodeLabel, endOfHandler.CodeLabel) ILExceptionClause.TypeCatch(g.ilg.typ_Object, handlerMarks) @@ -3669,10 +3833,11 @@ and GenTryFinally cenv cgbuf eenv (bodyExpr, handlerExpr, m, resty, spTry, spFin // Now the catch/finally block let startOfHandler = CG.GenerateMark cgbuf "startOfHandler" CG.SetStack cgbuf [] - + let sp = match spFinally with | DebugPointAtFinally.Yes m -> CG.EmitSeqPoint cgbuf m; SPAlways + | DebugPointAtFinally.Body -> SPAlways | DebugPointAtFinally.No -> SPSuppress GenExpr cenv cgbuf eenvinner sp handlerExpr (LeaveHandler (true, whereToSave, afterHandler)) @@ -3738,7 +3903,7 @@ and GenForLoop cenv cgbuf eenv (spFor, v, e1, dir, e2, loopBody, m) sequel = GenExpr cenv cgbuf eenvinner SPSuppress e2 Continue EmitSetLocal cgbuf finishIdx EmitGetLocal cgbuf g.ilg.typ_Int32 finishIdx - GenGetLocalVal cenv cgbuf eenvinner e2.Range v None + GenGetLocalVal cenv cgbuf eenvinner e2.Range v None CG.EmitInstr cgbuf (pop 2) Push0 (I_brcmp ((if isUp then BI_blt else BI_bgt), finish.CodeLabel)) else @@ -3794,12 +3959,13 @@ and GenWhileLoop cenv cgbuf eenv (spWhile, e1, e2, m) sequel = let finish = CG.GenerateDelayMark cgbuf "while_finish" let startTest = CG.GenerateMark cgbuf "startTest" - match spWhile with - | DebugPointAtWhile.Yes spStart -> CG.EmitSeqPoint cgbuf spStart - | DebugPointAtWhile.No -> () + let spCondition = + match spWhile with + | DebugPointAtWhile.Yes spStart -> CG.EmitSeqPoint cgbuf spStart; SPSuppress + | DebugPointAtWhile.No -> SPSuppress // SEQUENCE POINTS: Emit a sequence point to cover all of 'while e do' - GenExpr cenv cgbuf eenv SPSuppress e1 (CmpThenBrOrContinue (pop 1, [ I_brcmp(BI_brfalse, finish.CodeLabel) ])) + GenExpr cenv cgbuf eenv spCondition e1 (CmpThenBrOrContinue (pop 1, [ I_brcmp(BI_brfalse, finish.CodeLabel) ])) GenExpr cenv cgbuf eenv SPAlways e2 (DiscardThen (Br startTest)) CG.SetMarkToHere cgbuf finish @@ -3831,7 +3997,7 @@ and GenAsmCode cenv cgbuf eenv (il, tyargs, args, returnTys, m) sequel = {fspec with DeclaringType= let ty = fspec.DeclaringType let tspec = ty.TypeSpec - mkILTy ty.Boxity (mkILTySpec(tspec.TypeRef, ilTyArgs)) } + mkILTy ty.Boxity (mkILTySpec(tspec.TypeRef, ilTyArgs)) } match i, ilTyArgs with | I_unbox_any (ILType.TypeVar _), [tyarg] -> I_unbox_any tyarg | I_box (ILType.TypeVar _), [tyarg] -> I_box tyarg @@ -3846,8 +4012,8 @@ and GenAsmCode cenv cgbuf eenv (il, tyargs, args, returnTys, m) sequel = | I_ldtoken (ILToken.ILType (ILType.TypeVar _)), [tyarg] -> I_ldtoken (ILToken.ILType tyarg) | I_sizeof (ILType.TypeVar _), [tyarg] -> I_sizeof tyarg // currently unused, added for forward compat, see https://visualfsharp.codeplex.com/SourceControl/network/forks/jackpappas/fsharpcontrib/contribution/7134 - | I_cpobj (ILType.TypeVar _), [tyarg] -> I_cpobj tyarg - | I_initobj (ILType.TypeVar _), [tyarg] -> I_initobj tyarg + | I_cpobj (ILType.TypeVar _), [tyarg] -> I_cpobj tyarg + | I_initobj (ILType.TypeVar _), [tyarg] -> I_initobj tyarg | I_ldfld (al, vol, fspec), _ -> I_ldfld (al, vol, modFieldSpec fspec) | I_ldflda fspec, _ -> I_ldflda (modFieldSpec fspec) | I_stfld (al, vol, fspec), _ -> I_stfld (al, vol, modFieldSpec fspec) @@ -3915,7 +4081,7 @@ and GenAsmCode cenv cgbuf eenv (il, tyargs, args, returnTys, m) sequel = CG.SetMarkToHere cgbuf after1 CG.EmitInstrs cgbuf (pop 0) (Push [ilRetTy]) [AI_ldnull; I_unbox_any ilRetTy; I_br after3.CodeLabel ] - + CG.SetMarkToHere cgbuf after2 GenExpr cenv cgbuf eenv SPSuppress arg1 Continue CG.EmitInstr cgbuf (pop 1) Push0 I_throw @@ -3941,9 +4107,9 @@ and GenAsmCode cenv cgbuf eenv (il, tyargs, args, returnTys, m) sequel = CG.EmitInstr cgbuf (pop 2) Push0 (I_brcmp(BI_ble_un, label1)) | [ AI_ceq ], CmpThenBrOrContinue(1, [ I_brcmp (BI_brfalse, label1) ]) when not (anyfpType (tyOfExpr g args.Head)) -> CG.EmitInstr cgbuf (pop 2) Push0 (I_brcmp(BI_bne_un, label1)) - + // THESE ARE VALID ON FP w.r.t. NaN - + | [ AI_clt ], CmpThenBrOrContinue(1, [ I_brcmp (BI_brtrue, label1) ]) -> CG.EmitInstr cgbuf (pop 2) Push0 (I_brcmp(BI_blt, label1)) | [ AI_cgt ], CmpThenBrOrContinue(1, [ I_brcmp (BI_brtrue, label1) ]) -> @@ -3975,7 +4141,7 @@ and GenQuotation cenv cgbuf eenv (ast, qdataCell, m, ety) sequel = match qdataCell.Value with | Some (data1, data2) -> if suppressWitnesses then data1 else data2 - + | None -> try let qscope = QuotationTranslator.QuotationGenerationScope.Create (g, cenv.amap, cenv.viewCcu, cenv.tcVal, QuotationTranslator.IsReflectedDefinition.No) @@ -3988,14 +4154,14 @@ and GenQuotation cenv cgbuf eenv (ast, qdataCell, m, ety) sequel = let astSerializedBytes = QuotationPickler.pickle astSpec let someTypeInModuleExpr = mkTypeOfExpr cenv m eenv.someTypeInThisAssembly - let rawTy = mkRawQuotedExprTy g + let rawTy = mkRawQuotedExprTy g let typeSpliceExprs = List.map (GenType cenv.amap m eenv.tyenv >> (mkTypeOfExpr cenv m)) typeSplices let bytesExpr = Expr.Op (TOp.Bytes astSerializedBytes, [], [], m) let deserializeExpr = - let qf = QuotationTranslator.QuotationGenerationScope.ComputeQuotationFormat g - if qf.SupportsDeserializeEx then + let qf = QuotationTranslator.QuotationGenerationScope.ComputeQuotationFormat g + if qf.SupportsDeserializeEx then let referencedTypeDefExprs = List.map (mkILNonGenericBoxedTy >> mkTypeOfExpr cenv m) referencedTypeDefs let referencedTypeDefsExpr = mkArray (g.system_Type_ty, referencedTypeDefExprs, m) let typeSplicesExpr = mkArray (g.system_Type_ty, typeSpliceExprs, m) @@ -4074,24 +4240,24 @@ and MakeNotSupportedExnExpr cenv eenv (argExpr, m) = and GenTraitCall (cenv: cenv) cgbuf eenv (traitInfo: TraitConstraintInfo, argExprs, m) expr sequel = let g = cenv.g let generateWitnesses = ComputeGenerateWitnesses g eenv - let witness = - if generateWitnesses then + let witness = + if generateWitnesses then TryStorageForWitness g eenv traitInfo.TraitKey else None - match witness with - | Some storage -> - + match witness with + | Some storage -> + let ty = GenWitnessTy g traitInfo.TraitKey - let argExprs = if argExprs.Length = 0 then [ mkUnit g m ] else argExprs + let argExprs = if argExprs.Length = 0 then [ mkUnit g m ] else argExprs GenGetStorageAndSequel cenv cgbuf eenv m (ty, GenType cenv.amap m eenv.tyenv ty) storage (Some([], argExprs, m, sequel)) - - | None -> + + | None -> // If witnesses are available, we should now always find trait witnesses in scope assert not generateWitnesses - + let minfoOpt = CommitOperationResult (ConstraintSolver.CodegenWitnessExprForTraitConstraint cenv.tcVal g cenv.amap m traitInfo argExprs) match minfoOpt with | None -> @@ -4135,7 +4301,7 @@ and GenGetValAddr cenv cgbuf eenv (v: ValRef, m) sequel = | 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 *) ) ] + CG.EmitInstrs cgbuf (pop 1) (Push [ILType.Byref ilTy]) [ I_ldarga (uint16 669 (* random value for post-hoc diagnostic analysis on generated tree *) ) ] GenSequel cenv eenv.cloc cgbuf sequel @@ -4372,7 +4538,7 @@ and GenObjectMethod cenv eenvinner (cgbuf: CodeGenBuffer) useMethodImpl tmethod GenGenericParams cenv eenvUnderTypars methTyparsOfOverridingMethod, ilParamsOfOverridingMethod, ilReturnOfOverridingMethod, - MethodBody.IL ilMethodBody) + MethodBody.IL (lazy ilMethodBody)) // fixup attributes to generate a method impl let mdef = if useMethodImpl then fixupMethodImplFlags mdef else mdef let mdef = fixupVirtualSlotFlags mdef @@ -4389,7 +4555,6 @@ and GenObjectExpr cenv cgbuf eenvouter expr (baseType, baseValOpt, basecall, ove let ilCloAllFreeVars = cloinfo.ilCloAllFreeVars let ilCloGenericFormals = cloinfo.cloILGenericParams - assert (isNil cloinfo.localTypeFuncDirectILGenericParams) let ilCloGenericActuals = cloinfo.cloSpec.GenericArgs let ilCloRetTy = cloinfo.ilCloFormalReturnTy let ilCloTypeRef = cloinfo.cloSpec.TypeRef @@ -4440,7 +4605,7 @@ and GenSequenceExpr eenvouter |> AddStorageForLocalVals g (stateVars |> List.map (fun v -> v.Deref, Local(0, false, None))) // Get the free variables. Make a lambda to pretend that the 'nextEnumeratorValRef' is bound (it is an argument to GenerateNext) - let (cloAttribs, _, _, cloFreeTyvars, cloWitnessInfos, cloFreeVars, ilCloTypeRef: ILTypeRef, ilCloAllFreeVars, eenvinner) = + let (cloAttribs, cloFreeTyvars, cloWitnessInfos, cloFreeVars, ilCloTypeRef: ILTypeRef, ilCloAllFreeVars, eenvinner) = GetIlxClosureFreeVars cenv m [] eenvouter [] (mkLambda m nextEnumeratorValRef.Deref (generateNextExpr, g.int32_ty)) let ilCloSeqElemTy = GenType cenv.amap m eenvinner.tyenv seqElemTy @@ -4474,20 +4639,20 @@ and GenSequenceExpr CG.EmitInstr cgbuf (pop ilCloAllFreeVars.Length) (Push [ilCloRetTyInner]) (I_newobj (formalClospec.Constructor, None)) GenSequel cenv eenv.cloc cgbuf Return), m) - mkILNonGenericVirtualMethod("GetFreshEnumerator", ILMemberAccess.Public, [], mkILReturn ilCloEnumeratorTy, MethodBody.IL mbody) + mkILNonGenericVirtualMethod("GetFreshEnumerator", ILMemberAccess.Public, [], mkILReturn ilCloEnumeratorTy, MethodBody.IL (lazy mbody)) |> AddNonUserCompilerGeneratedAttribs g let closeMethod = // Note: We suppress the first sequence point in the body of this method since it is the initial state machine jump let spReq = SPSuppress let ilCode = CodeGenMethodForExpr cenv cgbuf.mgbuf (spReq, [], "Close", eenvinner, 1, closeExpr, discardAndReturnVoid) - mkILNonGenericVirtualMethod("Close", ILMemberAccess.Public, [], mkILReturn ILType.Void, MethodBody.IL ilCode) + mkILNonGenericVirtualMethod("Close", ILMemberAccess.Public, [], mkILReturn ILType.Void, MethodBody.IL (lazy ilCode)) let checkCloseMethod = // Note: We suppress the first sequence point in the body of this method since it is the initial state machine jump let spReq = SPSuppress let ilCode = CodeGenMethodForExpr cenv cgbuf.mgbuf (spReq, [], "get_CheckClose", eenvinner, 1, checkCloseExpr, Return) - mkILNonGenericVirtualMethod("get_CheckClose", ILMemberAccess.Public, [], mkILReturn g.ilg.typ_Bool, MethodBody.IL ilCode) + mkILNonGenericVirtualMethod("get_CheckClose", ILMemberAccess.Public, [], mkILReturn g.ilg.typ_Bool, MethodBody.IL (lazy ilCode)) let generateNextMethod = // Note: We suppress the first sequence point in the body of this method since it is the initial state machine jump @@ -4496,12 +4661,12 @@ and GenSequenceExpr let eenvinner = eenvinner |> AddStorageForLocalVals g [ (nextEnumeratorValRef.Deref, Arg 1) ] let ilParams = [mkILParamNamed("next", ILType.Byref ilCloEnumerableTy)] let ilReturn = mkILReturn g.ilg.typ_Int32 - let ilCode = MethodBody.IL (CodeGenMethodForExpr cenv cgbuf.mgbuf (spReq, [], "GenerateNext", eenvinner, 2, generateNextExpr, Return)) + let ilCode = MethodBody.IL (lazy (CodeGenMethodForExpr cenv cgbuf.mgbuf (spReq, [], "GenerateNext", eenvinner, 2, generateNextExpr, Return))) mkILNonGenericVirtualMethod("GenerateNext", ILMemberAccess.Public, ilParams, ilReturn, ilCode) let lastGeneratedMethod = let ilCode = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPSuppress, [], "get_LastGenerated", eenvinner, 1, exprForValRef m currvref, Return) - mkILNonGenericVirtualMethod("get_LastGenerated", ILMemberAccess.Public, [], mkILReturn ilCloSeqElemTy, MethodBody.IL ilCode) + mkILNonGenericVirtualMethod("get_LastGenerated", ILMemberAccess.Public, [], mkILReturn ilCloSeqElemTy, MethodBody.IL (lazy ilCode)) |> AddNonUserCompilerGeneratedAttribs g let ilCtorBody = @@ -4523,7 +4688,7 @@ and GenSequenceExpr GenDefaultValue cenv cgbuf eenvouter (fv.Type, m) else GenGetLocalVal cenv cgbuf eenvouter m fv None - + CG.EmitInstr cgbuf (pop ilCloAllFreeVars.Length) (Push [ilCloRetTyOuter]) (I_newobj (ilxCloSpec.Constructor, None)) GenSequel cenv eenvouter.cloc cgbuf sequel @@ -4544,7 +4709,7 @@ and GenClosureTypeDefs cenv (tref: ILTypeRef, ilGenParams, attrs, ilCloAllFreeVa let fspec = mkILFieldSpec (cloSpec.GetStaticFieldSpec().FieldRef, cloTy) let ctorSpec = mkILMethSpecForMethRefInTy (cloSpec.Constructor.MethodRef, cloTy, []) let ilCode = mkILMethodBody (true, [], 8, nonBranchingInstrsToCode ([ I_newobj (ctorSpec, None); mkNormalStsfld fspec ]), None) - let cctor = mkILClassCtor (MethodBody.IL ilCode) + let cctor = mkILClassCtor (MethodBody.IL (lazy ilCode)) let ilFieldDef = mkILStaticField(fspec.Name, fspec.FormalType, None, None, ILMemberAccess.Assembly).WithInitOnly(true) (cctor :: mdefs), [ ilFieldDef ] else @@ -4584,78 +4749,69 @@ and GenStaticDelegateClosureTypeDefs cenv (tref: ILTypeRef, ilGenParams, attrs, tdefs |> List.map (fun td -> td.WithAbstract(true) .With(methods= mkILMethodsFromArray (td.Methods.AsArray |> Array.filter (fun m -> not m.IsConstructor)))) -and GenGenericParams cenv eenv tps = +and GenGenericParams cenv eenv tps = tps |> DropErasedTypars |> List.map (GenGenericParam cenv eenv) and GenGenericArgs m (tyenv: TypeReprEnv) tps = tps |> DropErasedTypars |> List.map (fun c -> (mkILTyvarTy tyenv.[c, m])) +/// Generate a local type function contract class and implementation +and GenClosureAsLocalTypeFunction cenv (cgbuf: CodeGenBuffer) eenv isLocalTypeFunc thisVars expr m = + let g = cenv.g + let cloinfo, body, eenvinner = GetIlxClosureInfo cenv m isLocalTypeFunc true thisVars eenv expr + let ilCloTypeRef = cloinfo.cloSpec.TypeRef + let entryPointInfo = thisVars |> List.map (fun v -> (v, BranchCallClosure (cloinfo.cloArityInfo))) + // Now generate the actual closure implementation w.r.t. eenvinner + let directTypars, ilDirectWitnessParams, _directWitnessInfos, eenvinner = + AddDirectTyparWitnessParams cenv eenvinner cloinfo m + + let ilDirectGenericParams = GenGenericParams cenv eenvinner directTypars + + // The type-lambdas are dealt with by the local type function + let ilCloFormalReturnTy, ilCloLambdas = + let rec strip lambdas = + match lambdas with + | Lambdas_forall(_, r) -> strip r + | Lambdas_return returnTy -> returnTy, lambdas + | _ -> failwith "AdjustNamedLocalTypeFuncIlxClosureInfo: local functions can currently only be type functions" + strip cloinfo.ilCloLambdas + + let ilCloBody = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPAlways, entryPointInfo, cloinfo.cloName, eenvinner, 1, body, Return) + let ilCtorBody = mkILMethodBody (true, [], 8, nonBranchingInstrsToCode (mkCallBaseConstructor(g.ilg.typ_Object, [])), None ) + let cloMethods = [ mkILGenericVirtualMethod("DirectInvoke", ILMemberAccess.Assembly, ilDirectGenericParams, ilDirectWitnessParams, mkILReturn ilCloFormalReturnTy, MethodBody.IL(lazy ilCloBody)) ] + + let cloTypeDefs = GenClosureTypeDefs cenv (ilCloTypeRef, cloinfo.cloILGenericParams, [], cloinfo.ilCloAllFreeVars, ilCloLambdas, ilCtorBody, cloMethods, [], g.ilg.typ_Object, [], Some cloinfo.cloSpec) + cloinfo, ilCloTypeRef, cloTypeDefs + +and GenClosureAsFirstClassFunction cenv (cgbuf: CodeGenBuffer) eenv isLocalTypeFunc thisVars m expr = + let g = cenv.g + let cloinfo, body, eenvinner = GetIlxClosureInfo cenv m isLocalTypeFunc true thisVars eenv expr + let entryPointInfo = thisVars |> List.map (fun v -> (v, BranchCallClosure (cloinfo.cloArityInfo))) + let ilCloTypeRef = cloinfo.cloSpec.TypeRef + + let ilCloBody = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPAlways, entryPointInfo, cloinfo.cloName, eenvinner, 1, body, Return) + let cloTypeDefs = GenClosureTypeDefs cenv (ilCloTypeRef, cloinfo.cloILGenericParams, [], cloinfo.ilCloAllFreeVars, cloinfo.ilCloLambdas, ilCloBody, [], [], g.ilg.typ_Object, [], Some cloinfo.cloSpec) + cloinfo, ilCloTypeRef, cloTypeDefs + /// Generate the closure class for a function and GenLambdaClosure cenv (cgbuf: CodeGenBuffer) eenv isLocalTypeFunc thisVars expr = - let g = cenv.g match expr with | Expr.Lambda (_, _, _, _, _, m, _) | Expr.TyLambda (_, _, _, m, _) -> - - let cloinfo, body, eenvinner = GetIlxClosureInfo cenv m isLocalTypeFunc true thisVars eenv expr - let entryPointInfo = thisVars |> List.map (fun v -> (v, BranchCallClosure (cloinfo.cloArityInfo))) - - let ilCloBody = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPAlways, entryPointInfo, cloinfo.cloName, eenvinner, 1, body, Return) - let ilCloTypeRef = cloinfo.cloSpec.TypeRef - let cloTypeDefs = + let cloinfo, ilCloTypeRef, cloTypeDefs = if isLocalTypeFunc then - - // Work out the contract type and generate a class with an abstract method for this type - let (ilContractGenericParams, ilContractMethTyargs, ilContractTySpec: ILTypeSpec, ilContractFormalRetTy) = GenNamedLocalTypeFuncContractInfo cenv eenv m cloinfo - let ilContractTypeRef = ilContractTySpec.TypeRef - let ilContractTy = mkILFormalBoxedTy ilContractTypeRef ilContractGenericParams - let ilContractCtor = mkILNonGenericEmptyCtor None g.ilg.typ_Object - - let ilContractMeths = [ilContractCtor; mkILGenericVirtualMethod("DirectInvoke", ILMemberAccess.Assembly, ilContractMethTyargs, [], mkILReturn ilContractFormalRetTy, MethodBody.Abstract) ] - let ilContractTypeDef = - ILTypeDef(name = ilContractTypeRef.Name, - layout = ILTypeDefLayout.Auto, - attributes = enum 0, - genericParams = ilContractGenericParams, - customAttrs = mkILCustomAttrs [mkCompilationMappingAttr g (int SourceConstructFlags.Closure) ], - fields = emptyILFields, - events= emptyILEvents, - properties = emptyILProperties, - methods= mkILMethods ilContractMeths, - methodImpls= emptyILMethodImpls, - nestedTypes=emptyILTypeDefs, - implements = [], - extends= Some g.ilg.typ_Object, - securityDecls= emptyILSecurityDecls) - - // the contract type is an abstract type and not sealed - let ilContractTypeDef = - ilContractTypeDef - .WithAbstract(true) - .WithAccess(ComputeTypeAccess ilContractTypeRef true) - .WithSerializable(true) - .WithSpecialName(true) - .WithLayout(ILTypeDefLayout.Auto) - .WithInitSemantics(ILTypeInit.BeforeField) - .WithEncoding(ILDefaultPInvokeEncoding.Auto) - - cgbuf.mgbuf.AddTypeDef(ilContractTypeRef, ilContractTypeDef, false, false, None) - - let ilCtorBody = mkILMethodBody (true, [], 8, nonBranchingInstrsToCode (mkCallBaseConstructor(ilContractTy, [])), None ) - let cloMethods = [ mkILGenericVirtualMethod("DirectInvoke", ILMemberAccess.Assembly, cloinfo.localTypeFuncDirectILGenericParams, [], mkILReturn (cloinfo.ilCloFormalReturnTy), MethodBody.IL ilCloBody) ] - let cloTypeDefs = GenClosureTypeDefs cenv (ilCloTypeRef, cloinfo.cloILGenericParams, [], cloinfo.ilCloAllFreeVars, cloinfo.ilCloLambdas, ilCtorBody, cloMethods, [], ilContractTy, [], Some cloinfo.cloSpec) - cloTypeDefs - + GenClosureAsLocalTypeFunction cenv cgbuf eenv isLocalTypeFunc thisVars expr m else - GenClosureTypeDefs cenv (ilCloTypeRef, cloinfo.cloILGenericParams, [], cloinfo.ilCloAllFreeVars, cloinfo.ilCloLambdas, ilCloBody, [], [], g.ilg.typ_Object, [], Some cloinfo.cloSpec) + GenClosureAsFirstClassFunction cenv cgbuf eenv isLocalTypeFunc thisVars m expr + CountClosure() for cloTypeDef in cloTypeDefs do cgbuf.mgbuf.AddTypeDef(ilCloTypeRef, cloTypeDef, false, false, None) cloinfo, m | _ -> failwith "GenLambda: not a lambda" - + and GenClosureAlloc cenv (cgbuf: CodeGenBuffer) eenv (cloinfo, m) = let g = cenv.g CountClosure() @@ -4731,27 +4887,12 @@ and GetIlxClosureFreeVars cenv m (thisVars: ValRef list) eenvouter takenNames ex cloFreeVarResults.FreeLocals |> Zset.elements |> List.filter (fun fv -> - (thisVars |> List.forall (fun v -> not (valRefEq g (mkLocalValRef fv) v))) && + (thisVars |> List.forall (fun v -> not (valRefEq g (mkLocalValRef fv) v))) && (match StorageForVal cenv.g m fv eenvouter with | (StaticField _ | StaticProperty _ | Method _ | Null) -> false | _ -> true)) - // The general shape is: - // {LAM . expr }[free-typars]: overall-type[contract-typars] - // Then - // internal-typars = free-typars - contract-typars - // - // In other words, the free type variables get divided into two sets - // -- "contract" ones, which are part of the return type. We separate these to enable use to - // bake our own function base contracts for local type functions - // - // -- "internal" ones, which get used internally in the implementation - let cloContractFreeTyvarSet = (freeInType CollectTypars (tyOfExpr g expr)).FreeTypars - - let cloInternalFreeTyvars = Zset.diff cloFreeVarResults.FreeTyvars.FreeTypars cloContractFreeTyvarSet |> Zset.elements - let cloContractFreeTyvars = cloContractFreeTyvarSet |> Zset.elements - - let cloFreeTyvars = cloContractFreeTyvars @ cloInternalFreeTyvars + let cloFreeTyvars = cloFreeVarResults.FreeTyvars.FreeTypars |> Zset.elements let cloAttribs = [] @@ -4766,38 +4907,26 @@ and GetIlxClosureFreeVars cenv m (thisVars: ValRef list) eenvouter takenNames ex // Build the environment that is active inside the closure itself let eenvinner = eenvinner |> AddStorageForLocalVals g (thisVars |> List.map (fun v -> (v.Deref, Arg 0))) - // Work out if the closure captures any witnesses. - let cloWitnessInfos = + // Work out if the closure captures any witnesses. + let cloWitnessInfos = let generateWitnesses = ComputeGenerateWitnesses g eenvinner - if generateWitnesses then - // The 0 here represents that a closure doesn't reside within a generic class - there are no "enclosing class type parameters" to lop off. + if generateWitnesses then + // The 0 here represents that a closure doesn't reside within a generic class - there are no "enclosing class type parameters" to lop off. GetTraitWitnessInfosOfTypars g 0 cloFreeTyvars else [] + // Captured witnesses get captured in free variable fields let ilCloWitnessFreeVars, ilCloWitnessStorage = - let names = - cloWitnessInfos - |> List.map (fun w -> String.uncapitalize w.MemberName) - |> ChooseFreeVarNames takenNames - (cloWitnessInfos, names) - ||> List.map2 (fun w nm -> - let ty = GenWitnessTy cenv.g w - let ilTy = GenType cenv.amap m eenvinner.tyenv ty - let ilFv = mkILFreeVar (nm, true, ilTy) - let storage = - let ilField = mkILFieldSpecInTy (ilCloTyInner, ilFv.fvName, ilFv.fvType) - Env(ilCloTyInner, ilField, None) - ilFv, (w, storage)) - |> List.unzip + FreeVarStorageForWitnessInfos cenv eenvinner takenNames ilCloTyInner m cloWitnessInfos // Allocate storage in the environment for the witnesses let eenvinner = eenvinner |> AddStorageForLocalWitnesses ilCloWitnessStorage let ilCloFreeVars, ilCloFreeVarStorage = let names = - cloFreeVars - |> List.map nameOfVal + cloFreeVars + |> List.map nameOfVal |> ChooseFreeVarNames takenNames (cloFreeVars, names) @@ -4814,12 +4943,12 @@ and GetIlxClosureFreeVars cenv m (thisVars: ValRef list) eenvouter takenNames ex ilFv, (fv, storage)) |> List.unzip - let ilCloAllFreeVars = Array.ofList (ilCloWitnessFreeVars @ ilCloFreeVars) + let ilCloAllFreeVars = Array.ofList (ilCloWitnessFreeVars @ ilCloFreeVars) let eenvinner = eenvinner |> AddStorageForLocalVals g ilCloFreeVarStorage // Return a various results - (cloAttribs, cloInternalFreeTyvars, cloContractFreeTyvars, cloFreeTyvars, cloWitnessInfos, cloFreeVars, ilCloTypeRef, ilCloAllFreeVars, eenvinner) + (cloAttribs, cloFreeTyvars, cloWitnessInfos, cloFreeVars, ilCloTypeRef, ilCloAllFreeVars, eenvinner) and GetIlxClosureInfo cenv m isLocalTypeFunc canUseStaticField thisVars eenvouter expr = let g = cenv.g @@ -4848,7 +4977,7 @@ and GetIlxClosureInfo cenv m isLocalTypeFunc canUseStaticField thisVars eenvoute let takenNames = vs |> List.map (fun v -> v.CompiledName g.CompilerGlobalState) // Get the free variables and the information about the closure, add the free variables to the environment - let (cloAttribs, cloInternalFreeTyvars, cloContractFreeTyvars, cloFreeTyvars, cloWitnessInfos, cloFreeVars, ilCloTypeRef, ilCloAllFreeVars, eenvinner) = + let (cloAttribs, cloFreeTyvars, cloWitnessInfos, cloFreeVars, ilCloTypeRef, ilCloAllFreeVars, eenvinner) = GetIlxClosureFreeVars cenv m thisVars eenvouter takenNames expr // Put the type and value arguments into the environment @@ -4877,65 +5006,13 @@ and GetIlxClosureInfo cenv m isLocalTypeFunc canUseStaticField thisVars eenvoute let narginfo = vs |> List.map (fun _ -> 1) // Generate the ILX view of the lambdas - let ilReturnTy = GenType cenv.amap m eenvinner.tyenv returnTy - - // The general shape is: - // {LAM . expr }[free-typars]: overall-type[contract-typars] - // Then - // internal-typars = free-typars - contract-typars - // - // For a local type function closure, this becomes - // class Contract { - // abstract DirectInvoke : overall-type - // } - // - // class ContractImplementation : Contract { - // override DirectInvoke : overall-type { expr } - // } - // - // For a non-local type function closure, this becomes - // - // class FunctionImplementation : FSharpTypeFunc { - // override Specialize : overall-type { expr } - // } - // - // For a normal function closure, is empty, and this becomes - // - // class FunctionImplementation : overall-type { - // override Invoke(..) { expr } - // } - - // In other words, the free type variables get divided into two sets - // -- "contract" ones, which are part of the return type. We separate these to enable use to - // bake our own function base contracts for local type functions - // - // -- "internal" ones, which get used internally in the implementation - // - // There are also "direct" and "indirect" type variables, which are part of the lambdas of the type function. - // Direct type variables are only used for local type functions, and indirect type variables only used for first class - // function values. + let ilCloReturnTy = GenType cenv.amap m eenvinner.tyenv returnTy /// Compute the contract if it is a local type function - let ilContractGenericParams = GenGenericParams cenv eenvinner cloContractFreeTyvars - let ilContractGenericActuals = GenGenericArgs m eenvouter.tyenv cloContractFreeTyvars - let ilInternalGenericParams = GenGenericParams cenv eenvinner cloInternalFreeTyvars - let ilInternalGenericActuals = GenGenericArgs m eenvouter.tyenv cloInternalFreeTyvars - - let ilCloGenericFormals = ilContractGenericParams @ ilInternalGenericParams - let ilCloGenericActuals = ilContractGenericActuals @ ilInternalGenericActuals - - let ilDirectGenericParams, ilCloReturnTy, ilCloLambdas = - if isLocalTypeFunc then - let rec strip lambdas acc = - match lambdas with - | Lambdas_forall(gp, r) -> strip r (gp :: acc) - | Lambdas_return returnTy -> List.rev acc, returnTy, lambdas - | _ -> failwith "AdjustNamedLocalTypeFuncIlxClosureInfo: local functions can currently only be type functions" - strip ilCloLambdas [] - else - [], ilReturnTy, ilCloLambdas - - let useStaticField = canUseStaticField && (ilCloAllFreeVars.Length = 0) + let ilCloGenericFormals = GenGenericParams cenv eenvinner cloFreeTyvars + let ilCloGenericActuals = GenGenericArgs m eenvouter.tyenv cloFreeTyvars + + let useStaticField = canUseStaticField && (ilCloAllFreeVars.Length = 0) let ilxCloSpec = IlxClosureSpec.Create(IlxClosureRef(ilCloTypeRef, ilCloLambdas, ilCloAllFreeVars), ilCloGenericActuals, useStaticField) @@ -4951,37 +5028,9 @@ and GetIlxClosureInfo cenv m isLocalTypeFunc canUseStaticField thisVars eenvoute cloFreeVars=cloFreeVars cloFreeTyvars=cloFreeTyvars cloWitnessInfos = cloWitnessInfos - cloAttribs=cloAttribs - localTypeFuncContractFreeTypars = cloContractFreeTyvars - localTypeFuncInternalFreeTypars = cloInternalFreeTyvars - localTypeFuncILGenericArgs = ilContractGenericActuals - localTypeFuncDirectILGenericParams = ilDirectGenericParams } + cloAttribs=cloAttribs } cloinfo, body, eenvinner -//-------------------------------------------------------------------------- -// Named local type functions -//-------------------------------------------------------------------------- - -and IsNamedLocalTypeFuncVal g (v: Val) expr = - not v.IsCompiledAsTopLevel && - IsGenericValWithGenericConstraints g v && - (match stripExpr expr with Expr.TyLambda _ -> true | _ -> false) - -/// Generate the information relevant to the contract portion of a named local type function -and GenNamedLocalTypeFuncContractInfo cenv eenv m cloinfo = - let ilCloTypeRef = cloinfo.cloSpec.TypeRef - let ilContractTypeRef = ILTypeRef.Create(scope=ilCloTypeRef.Scope, enclosing=ilCloTypeRef.Enclosing, name=ilCloTypeRef.Name + "$contract") - let eenvForContract = EnvForTypars cloinfo.localTypeFuncContractFreeTypars eenv - let ilContractGenericParams = GenGenericParams cenv eenv cloinfo.localTypeFuncContractFreeTypars - let tvs, contractRetTy = - match cloinfo.cloExpr with - | Expr.TyLambda (_, tvs, _, _, bty) -> tvs, bty - | e -> [], tyOfExpr cenv.g e - let eenvForContract = AddTyparsToEnv tvs eenvForContract - let ilContractMethTyargs = GenGenericParams cenv eenvForContract tvs - let ilContractFormalRetTy = GenType cenv.amap m eenvForContract.tyenv contractRetTy - ilContractGenericParams, ilContractMethTyargs, mkILTySpec(ilContractTypeRef, cloinfo.localTypeFuncILGenericArgs), ilContractFormalRetTy - /// Generate a new delegate construction including a closure class if necessary. This is a lot like generating function closures /// and object expression closures, and most of the code is shared. and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod((TSlotSig(_, delegateTy, _, _, _, _) as slotsig), _attribs, methTyparsOfOverridingMethod, tmvs, body, _), m) sequel = @@ -5010,7 +5059,7 @@ and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod((TSlotSig(_, deleg // Work out the free type variables for the morphing thunk let takenNames = List.map nameOfVal tmvs - let (cloAttribs, _, _, cloFreeTyvars, cloWitnessInfos, cloFreeVars, ilDelegeeTypeRef, ilCloAllFreeVars, eenvinner) = + let (cloAttribs, cloFreeTyvars, cloWitnessInfos, cloFreeVars, ilDelegeeTypeRef, ilCloAllFreeVars, eenvinner) = GetIlxClosureFreeVars cenv m [] eenvouter takenNames expr let ilDelegeeGenericParams = GenGenericParams cenv eenvinner cloFreeTyvars @@ -5022,16 +5071,16 @@ and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod((TSlotSig(_, deleg // Create a new closure class with a single "delegee" method that implements the delegate. let delegeeMethName = "Invoke" let ilDelegeeTyInner = mkILBoxedTy ilDelegeeTypeRef ilDelegeeGenericActualsInner - + let envForDelegeeUnderTypars = AddTyparsToEnv methTyparsOfOverridingMethod eenvinner - + let numthis = if useStaticClosure then 0 else 1 let tmvs, body = BindUnitVars g (tmvs, List.replicate (List.concat slotsig.FormalParams).Length ValReprInfo.unnamedTopArg1, body) - + // The slot sig contains a formal instantiation. When creating delegates we're only // interested in the actual instantiation since we don't have to emit a method impl. let ilDelegeeParams, ilDelegeeRet = GenActualSlotsig m cenv envForDelegeeUnderTypars slotsig methTyparsOfOverridingMethod tmvs - + let envForDelegeeMeth = AddStorageForLocalVals g (List.mapi (fun i v -> (v, Arg (i+numthis))) tmvs) envForDelegeeUnderTypars let ilMethodBody = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPAlways, [], delegeeMethName, envForDelegeeMeth, 1, body, (if slotSigHasVoidReturnTy slotsig then discardAndReturnVoid else Return)) let delegeeInvokeMeth = @@ -5040,13 +5089,13 @@ and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod((TSlotSig(_, deleg ILMemberAccess.Assembly, ilDelegeeParams, ilDelegeeRet, - MethodBody.IL ilMethodBody) + MethodBody.IL(lazy ilMethodBody)) let delegeeCtorMeth = mkILSimpleStorageCtor(None, Some g.ilg.typ_Object.TypeSpec, ilDelegeeTyInner, [], [], ILMemberAccess.Assembly) let ilCtorBody = delegeeCtorMeth.MethodBody - + let ilCloLambdas = Lambdas_return ilCtxtDelTy let ilAttribs = GenAttrs cenv eenvinner cloAttribs - let cloTypeDefs = + let cloTypeDefs = (if useStaticClosure then GenStaticDelegateClosureTypeDefs else GenClosureTypeDefs) cenv (ilDelegeeTypeRef, ilDelegeeGenericParams, ilAttribs, ilCloAllFreeVars, ilCloLambdas, ilCtorBody, [delegeeInvokeMeth], [], g.ilg.typ_Object, [], None) for cloTypeDef in cloTypeDefs do @@ -5086,11 +5135,11 @@ and GenStaticOptimization cenv cgbuf eenv (constraints, e2, e3, _m) sequel = // This means 'when ^T : ^T' is discarded if not resolved. // // This doesn't apply when witnesses are available. In that case, "when ^T : ^T" is resolved as 'Yes', - // this is because all the uses of "when ^T : ^T" in FSharp.Core (e.g. for are for deciding between the + // this is because all the uses of "when ^T : ^T" in FSharp.Core (e.g. for are for deciding between the // witness-based implementation and the legacy dynamic implementation, e.g. // - // let inline ( * ) (x: ^T) (y: ^U) : ^V = - // MultiplyDynamic<(^T),(^U),(^V)> x y + // let inline ( * ) (x: ^T) (y: ^U) : ^V = + // MultiplyDynamic<(^T),(^U),(^V)> x y // ... // when ^T : ^T = ((^T or ^U): (static member (*) : ^T * ^U -> ^V) (x,y)) // @@ -5098,9 +5147,9 @@ and GenStaticOptimization cenv cgbuf eenv (constraints, e2, e3, _m) sequel = let e = let generateWitnesses = ComputeGenerateWitnesses cenv.g eenv - if DecideStaticOptimizations cenv.g constraints generateWitnesses = StaticOptimizationAnswer.Yes then + if DecideStaticOptimizations cenv.g constraints generateWitnesses = StaticOptimizationAnswer.Yes then e2 - else + else e3 GenExpr cenv cgbuf eenv SPSuppress e sequel @@ -5149,10 +5198,14 @@ and GenJoinPoint cenv cgbuf pos eenv ty m sequel = // Accumulate the decision graph as we go and GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequel contf = - GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv tree targets repeatSP (IntMap.empty()) sequel (fun targetInfos -> - let sortedTargetInfos = - targetInfos + let targetCounts = accTargetsOfDecisionTree tree [] |> List.countBy id |> Dictionary.ofList + let targetNext = ref 0 // used to make sure we generate the targets in-order, postponing if necessary + GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv tree targets (targetNext, targetCounts) repeatSP (IntMap.empty()) sequel (fun targetInfos -> + let sortedTargetInfos = + targetInfos |> Seq.sortBy (fun (KeyValue(targetIdx, _)) -> targetIdx) + |> Seq.filter (fun (KeyValue(_, (_, isTargetPostponed))) -> isTargetPostponed) + |> Seq.map (fun (KeyValue(_, (targetInfo, _))) -> targetInfo) |> List.ofSeq GenPostponedDecisionTreeTargets cenv cgbuf sortedTargetInfos stackAtTargets sequel contf ) @@ -5160,29 +5213,21 @@ and GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeat and GenPostponedDecisionTreeTargets cenv cgbuf targetInfos stackAtTargets sequel contf = match targetInfos with | [] -> contf Fake - | (KeyValue(_, (targetInfo, isTargetPostponed))) :: rest -> - if isTargetPostponed then - let eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget = GenDecisionTreeTarget cenv cgbuf stackAtTargets targetInfo sequel - GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget true (fun Fake -> - GenPostponedDecisionTreeTargets cenv cgbuf rest stackAtTargets sequel contf - ) - else + | targetInfo :: rest -> + let eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget = GenDecisionTreeTarget cenv cgbuf stackAtTargets targetInfo sequel + GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget true (fun Fake -> GenPostponedDecisionTreeTargets cenv cgbuf rest stackAtTargets sequel contf - -and TryFindTargetInfo targetInfos n = - match IntMap.tryFind n targetInfos with - | Some (targetInfo, _) -> Some targetInfo - | None -> None + ) /// When inplabOpt is None, we are assuming a branch or fallthrough to the current code location /// /// When inplabOpt is "Some inplab", we are assuming an existing branch to "inplab" and can optionally /// set inplab to point to another location if no codegen is required. -and GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree targets repeatSP targetInfos sequel (contf: Zmap<_,_> -> FakeUnit) = +and GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree targets targetCounts repeatSP targetInfos sequel (contf: Zmap<_,_> -> FakeUnit) = CG.SetStack cgbuf stackAtTargets // Set the expected initial stack. match tree with | TDBind(bind, rest) -> - match inplabOpt with Some inplab -> CG.SetMarkToHere cgbuf inplab | None -> () + cgbuf.SetMarkToHereIfNecessary inplabOpt let startScope, endScope as scopeMarks = StartDelayedLocalScope "dtreeBind" cgbuf let eenv = AllocStorageForBind cenv cgbuf scopeMarks eenv bind let sp = GenDebugPointForBind cenv cgbuf bind @@ -5191,10 +5236,10 @@ and GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree // we effectively lose an EndLocalScope for all dtrees that go to the same target // So we just pretend that the variable goes out of scope here. CG.SetMarkToHere cgbuf endScope - GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv rest targets repeatSP targetInfos sequel contf + GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv rest targets targetCounts repeatSP targetInfos sequel contf | TDSuccess(es, targetIdx) -> - let targetInfos, genTargetInfoOpt = GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets repeatSP targetInfos sequel + let targetInfos, genTargetInfoOpt = GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets targetCounts repeatSP targetInfos sequel match genTargetInfoOpt with | Some (eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget) -> GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget true (fun Fake -> contf targetInfos) @@ -5202,29 +5247,37 @@ and GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree contf targetInfos | TDSwitch(e, cases, dflt, m) -> - GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases dflt m targets repeatSP targetInfos sequel contf + GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases dflt m targets targetCounts repeatSP targetInfos sequel contf and GetTarget (targets:_[]) n = if n >= targets.Length then failwith "GetTarget: target not found in decision tree" targets.[n] -and GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets repeatSP targetInfos sequel = +/// Generate a success node of a decision tree, binding the variables and going to the target +/// If inplabOpt is present, this label must get set to the first logical place to execute. +/// For example, if no variables get bound this can just be set to jump straight to the target. +and GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets (targetNext: int ref, targetCounts: Dictionary) repeatSP targetInfos sequel = let (TTarget(vs, successExpr, spTarget)) = GetTarget targets targetIdx - match TryFindTargetInfo targetInfos targetIdx with - | Some (_, targetMarkAfterBinds: Mark, eenvAtTarget, _, _, _, _, _, _, _) -> + match IntMap.tryFind targetIdx targetInfos with + | Some (targetInfo, isTargetPostponed) -> + + let (targetMarkBeforeBinds, targetMarkAfterBinds: Mark, eenvAtTarget, _, _, _, _, _, _, _) = targetInfo + + // We have encountered this target before. See if we should generate it now + let targetCount = targetCounts.[targetIdx] + let generateTargetNow = isTargetPostponed && cenv.opts.localOptimizationsAreOn && targetCount = 1 && targetNext.Value = targetIdx + targetCounts.[targetIdx] <- targetCount - 1 - // If not binding anything we can go directly to the targetMarkAfterBinds point + // If not binding anything we can go directly to the targetMarkBeforeBinds point // This is useful to avoid lots of branches e.g. in match A | B | C -> e // In this case each case will just go straight to "e" if isNil vs then - match inplabOpt with - | None -> CG.EmitInstr cgbuf (pop 0) Push0 (I_br targetMarkAfterBinds.CodeLabel) - | Some inplab -> CG.SetMark cgbuf inplab targetMarkAfterBinds + cgbuf.SetMarkOrEmitBranchIfNecessary (inplabOpt, targetMarkBeforeBinds) else - match inplabOpt with None -> () | Some inplab -> CG.SetMarkToHere cgbuf inplab + cgbuf.SetMarkToHereIfNecessary inplabOpt repeatSP() - (vs, es) ||> List.iter2 (fun v e -> + (vs, es) ||> List.iter2 (fun v e -> // Emit the expression GenBindingRhs cenv cgbuf eenv SPSuppress v e) @@ -5234,27 +5287,50 @@ and GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx GenStoreVal cenv cgbuf eenvAtTarget v.Range v) CG.EmitInstr cgbuf (pop 0) Push0 (I_br targetMarkAfterBinds.CodeLabel) + + let genTargetInfoOpt = + if generateTargetNow then + incr targetNext // generate the targets in-order only + Some(GenDecisionTreeTarget cenv cgbuf stackAtTargets targetInfo sequel) + else + None - targetInfos, None + // Update the targetInfos + let isTargetStillPostponed = isTargetPostponed && not generateTargetNow + let targetInfos = IntMap.add targetIdx (targetInfo, isTargetStillPostponed) targetInfos + targetInfos, genTargetInfoOpt | None -> + // We have not encountered this target before. Set up the generation of the target, even if we're + // going to postpone it - match inplabOpt with None -> () | Some inplab -> CG.SetMarkToHere cgbuf inplab let targetMarkBeforeBinds = CG.GenerateDelayMark cgbuf "targetBeforeBinds" let targetMarkAfterBinds = CG.GenerateDelayMark cgbuf "targetAfterBinds" let startScope, endScope as scopeMarks = StartDelayedLocalScope "targetBinds" cgbuf let binds = mkInvisibleBinds vs es let eenvAtTarget = AllocStorageForBinds cenv cgbuf scopeMarks eenv binds let targetInfo = (targetMarkBeforeBinds, targetMarkAfterBinds, eenvAtTarget, successExpr, spTarget, repeatSP, vs, binds, startScope, endScope) - - // In debug mode push all decision tree targets to after the switching - let isTargetPostponed, genTargetInfoOpt = - if cenv.opts.localOptimizationsAreOn then - false, Some(GenDecisionTreeTarget cenv cgbuf stackAtTargets targetInfo sequel) + + let targetCount = targetCounts.[targetIdx] + + // In debug mode, postpone all decision tree targets to after the switching. + // In release mode, if a target is the target of multiple incoming success nodes, postpone it to avoid + // making any backward branches + let generateTargetNow = cenv.opts.localOptimizationsAreOn && targetCount = 1 && targetNext.Value = targetIdx + targetCounts.[targetIdx] <- targetCount - 1 + + let genTargetInfoOpt = + if generateTargetNow then + // Here we are generating the target immediately + incr targetNext // generate the targets in-order only + cgbuf.SetMarkToHereIfNecessary inplabOpt + Some(GenDecisionTreeTarget cenv cgbuf stackAtTargets targetInfo sequel) else - CG.EmitInstr cgbuf (pop 0) Push0 (I_br targetMarkBeforeBinds.CodeLabel) - true, None + // Here we are postponing the generation of the target. + cgbuf.SetMarkOrEmitBranchIfNecessary (inplabOpt, targetMarkBeforeBinds) + None + let isTargetPostponed = not generateTargetNow let targetInfos = IntMap.add targetIdx (targetInfo, isTargetPostponed) targetInfos targetInfos, genTargetInfoOpt @@ -5281,17 +5357,17 @@ and GenDecisionTreeTarget cenv cgbuf stackAtTargets (targetMarkBeforeBinds, targ CG.SetStack cgbuf stackAtTargets (eenvAtTarget, spExpr, successExpr, (EndLocalScope(sequel, endScope))) -and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defaultTargetOpt switchm targets repeatSP targetInfos sequel contf = +and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defaultTargetOpt switchm targets targetCounts repeatSP targetInfos sequel contf = let g = cenv.g let m = e.Range - match inplabOpt with None -> () | Some inplab -> CG.SetMarkToHere cgbuf inplab + cgbuf.SetMarkToHereIfNecessary inplabOpt repeatSP() match cases with // optimize a test against a boolean value, i.e. the all-important if-then-else | TCase(DecisionTreeTest.Const(Const.Bool b), successTree) :: _ -> let failureTree = (match defaultTargetOpt with None -> cases.Tail.Head.CaseTree | Some d -> d) - GenDecisionTreeTest cenv eenv.cloc cgbuf stackAtTargets e None eenv (if b then successTree else failureTree) (if b then failureTree else successTree) targets repeatSP targetInfos sequel contf + GenDecisionTreeTest cenv eenv.cloc cgbuf stackAtTargets e None eenv (if b then successTree else failureTree) (if b then failureTree else successTree) targets targetCounts repeatSP targetInfos sequel contf // // Remove a single test for a union case . Union case tests are always exa //| [ TCase(DecisionTreeTest.UnionCase _, successTree) ] when (defaultTargetOpt.IsNone) -> @@ -5308,7 +5384,8 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau let cuspec = GenUnionSpec cenv.amap m eenv.tyenv c.TyconRef tyargs let idx = c.Index let avoidHelpers = entityRefInThisAssembly g.compilingFslib c.TyconRef - GenDecisionTreeTest cenv eenv.cloc cgbuf stackAtTargets e (Some (pop 1, Push [g.ilg.typ_Bool], Choice1Of2 (avoidHelpers, cuspec, idx))) eenv successTree failureTree targets repeatSP targetInfos sequel contf + let tester = (Some (pop 1, Push [g.ilg.typ_Bool], Choice1Of2 (avoidHelpers, cuspec, idx))) + GenDecisionTreeTest cenv eenv.cloc cgbuf stackAtTargets e tester eenv successTree failureTree targets targetCounts repeatSP targetInfos sequel contf | _ -> let caseLabels = List.map (fun _ -> CG.GenerateDelayMark cgbuf "switch_case") cases @@ -5339,8 +5416,8 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau BI_brtrue | _ -> failwith "internal error: GenDecisionTreeSwitch" CG.EmitInstr cgbuf (pop 1) Push0 (I_brcmp (bi, (List.head caseLabels).CodeLabel)) - GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets repeatSP targetInfos sequel caseLabels cases contf - + GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets targetCounts repeatSP targetInfos sequel caseLabels cases contf + | DecisionTreeTest.ActivePatternCase _ -> error(InternalError("internal error in codegen: DecisionTreeTest.ActivePatternCase", switchm)) | DecisionTreeTest.UnionCase (hdc, tyargs) -> GenExpr cenv cgbuf eenv SPSuppress e Continue @@ -5351,21 +5428,21 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau match case with | TCase(DecisionTreeTest.UnionCase (c, _), _) -> (c.Index, label.CodeLabel) | _ -> failwith "error: mixed constructor/const test?") - + let avoidHelpers = entityRefInThisAssembly g.compilingFslib hdc.TyconRef EraseUnions.emitDataSwitch g.ilg (UnionCodeGen cgbuf) (avoidHelpers, cuspec, dests) CG.EmitInstrs cgbuf (pop 1) Push0 [ ] // push/pop to match the line above - GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets repeatSP targetInfos sequel caseLabels cases contf - + GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets targetCounts repeatSP targetInfos sequel caseLabels cases contf + | DecisionTreeTest.Const c -> GenExpr cenv cgbuf eenv SPSuppress e Continue match c with | Const.Bool _ -> failwith "should have been done earlier" - | Const.SByte _ - | Const.Int16 _ - | Const.Int32 _ - | Const.Byte _ - | Const.UInt16 _ + | Const.SByte _ + | Const.Int16 _ + | Const.Int32 _ + | Const.Byte _ + | Const.UInt16 _ | Const.UInt32 _ | Const.Char _ -> if List.length cases <> List.length caseLabels then failwith "internal error: " @@ -5398,22 +5475,22 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau CG.EmitInstr cgbuf (pop 1) Push0 (I_switch destinationLabels) else error(InternalError("non-dense integer matches not implemented in codegen - these should have been removed by the pattern match compiler", switchm)) - GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets repeatSP targetInfos sequel caseLabels cases contf + GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets targetCounts repeatSP targetInfos sequel caseLabels cases contf | _ -> error(InternalError("these matches should never be needed", switchm)) | DecisionTreeTest.Error m -> error(InternalError("Trying to compile error recovery branch", m)) -and GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets repeatSP targetInfos sequel caseLabels cases (contf: Zmap<_,_> -> FakeUnit) = +and GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets targetCounts repeatSP targetInfos sequel caseLabels cases (contf: Zmap<_,_> -> FakeUnit) = match defaultTargetOpt with - | Some defaultTarget -> - GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv defaultTarget targets repeatSP targetInfos sequel (fun targetInfos -> - GenDecisionTreeCases cenv cgbuf stackAtTargets eenv None targets repeatSP targetInfos sequel caseLabels cases contf + | Some defaultTarget -> + GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv defaultTarget targets targetCounts repeatSP targetInfos sequel (fun targetInfos -> + GenDecisionTreeCases cenv cgbuf stackAtTargets eenv None targets targetCounts repeatSP targetInfos sequel caseLabels cases contf ) | None -> match caseLabels, cases with | caseLabel :: caseLabelsTail, (TCase(_, caseTree)) :: casesTail -> - GenDecisionTreeAndTargetsInner cenv cgbuf (Some caseLabel) stackAtTargets eenv caseTree targets repeatSP targetInfos sequel (fun targetInfos -> - GenDecisionTreeCases cenv cgbuf stackAtTargets eenv None targets repeatSP targetInfos sequel caseLabelsTail casesTail contf + GenDecisionTreeAndTargetsInner cenv cgbuf (Some caseLabel) stackAtTargets eenv caseTree targets targetCounts repeatSP targetInfos sequel (fun targetInfos -> + GenDecisionTreeCases cenv cgbuf stackAtTargets eenv None targets targetCounts repeatSP targetInfos sequel caseLabelsTail casesTail contf ) | _ -> contf targetInfos @@ -5421,7 +5498,7 @@ and GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets // Used for the peephole optimization below and (|BoolExpr|_|) = function Expr.Const (Const.Bool b1, _, _) -> Some b1 | _ -> None -and GenDecisionTreeTest cenv cloc cgbuf stackAtTargets e tester eenv successTree failureTree targets repeatSP targetInfos sequel contf = +and GenDecisionTreeTest cenv cloc cgbuf stackAtTargets e tester eenv successTree failureTree targets targetCounts repeatSP targetInfos sequel contf = let g = cenv.g match successTree, failureTree with @@ -5453,26 +5530,55 @@ and GenDecisionTreeTest cenv cloc cgbuf stackAtTargets e tester eenv successTree | _ -> failwith "internal error: GenDecisionTreeTest during bool elim" | _ -> - let failure = CG.GenerateDelayMark cgbuf "testFailure" match tester with - | None -> - // generate the expression, then test it for "false" - GenExpr cenv cgbuf eenv SPSuppress e (CmpThenBrOrContinue(pop 1, [ I_brcmp (BI_brfalse, failure.CodeLabel) ])) + | None _ -> + // Check if there is more logic in the decision tree for the failure branch + // (and no more logic for the success branch), for example + // when emitting the first part of 'expr1 || expr2'. + // + // If so, emit the failure logic, then came back and do the success target, then + // do any postponed failure target. + match successTree, failureTree with + | TDSuccess _, (TDBind _ | TDSwitch _) -> + + // OK, there is more logic in the decision tree on the failure branch + let success = CG.GenerateDelayMark cgbuf "testSuccess" + GenExpr cenv cgbuf eenv SPSuppress e (CmpThenBrOrContinue(pop 1, [ I_brcmp (BI_brtrue, success.CodeLabel) ])) + GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv failureTree targets targetCounts repeatSP targetInfos sequel (fun targetInfos -> + GenDecisionTreeAndTargetsInner cenv cgbuf (Some success) stackAtTargets eenv successTree targets targetCounts repeatSP targetInfos sequel contf + ) + + | _ -> + + // Either we're not yet done with the success branch, or there is no more logic + // in the decision tree on the failure branch. Continue doing the success branch + // logic first. + let failure = CG.GenerateDelayMark cgbuf "testFailure" + GenExpr cenv cgbuf eenv SPSuppress e (CmpThenBrOrContinue(pop 1, [ I_brcmp (BI_brfalse, failure.CodeLabel) ])) + GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv successTree targets targetCounts repeatSP targetInfos sequel (fun targetInfos -> + GenDecisionTreeAndTargetsInner cenv cgbuf (Some failure) stackAtTargets eenv failureTree targets targetCounts repeatSP targetInfos sequel contf + ) // Turn 'isdata' tests that branch into EI_brisdata tests | Some (_, _, Choice1Of2 (avoidHelpers, cuspec, idx)) -> + let failure = CG.GenerateDelayMark cgbuf "testFailure" GenExpr cenv cgbuf eenv SPSuppress e (CmpThenBrOrContinue(pop 1, EraseUnions.mkBrIsData g.ilg false (avoidHelpers, cuspec, idx, failure.CodeLabel))) + GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv successTree targets targetCounts repeatSP targetInfos sequel (fun targetInfos -> + GenDecisionTreeAndTargetsInner cenv cgbuf (Some failure) stackAtTargets eenv failureTree targets targetCounts repeatSP targetInfos sequel contf + ) + | Some (pops, pushes, i) -> + let failure = CG.GenerateDelayMark cgbuf "testFailure" GenExpr cenv cgbuf eenv SPSuppress e Continue match i with | Choice1Of2 (avoidHelpers, cuspec, idx) -> CG.EmitInstrs cgbuf pops pushes (EraseUnions.mkIsData g.ilg (avoidHelpers, cuspec, idx)) | Choice2Of2 i -> CG.EmitInstr cgbuf pops pushes i CG.EmitInstr cgbuf (pop 1) Push0 (I_brcmp (BI_brfalse, failure.CodeLabel)) - GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv successTree targets repeatSP targetInfos sequel (fun targetInfos -> - GenDecisionTreeAndTargetsInner cenv cgbuf (Some failure) stackAtTargets eenv failureTree targets repeatSP targetInfos sequel contf - ) + GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv successTree targets targetCounts repeatSP targetInfos sequel (fun targetInfos -> + GenDecisionTreeAndTargetsInner cenv cgbuf (Some failure) stackAtTargets eenv failureTree targets targetCounts repeatSP targetInfos sequel contf + ) /// Generate fixups for letrec bindings and GenLetRecFixup cenv cgbuf eenv (ilxCloSpec: IlxClosureSpec, e, ilField: ILFieldSpec, e2, _m) = @@ -5507,7 +5613,7 @@ and GenLetRecBindings cenv (cgbuf: CodeGenBuffer) eenv (allBinds: Bindings, m) = match StorageForVal cenv.g m fv eenvclo with | Env (_, ilField, _) -> fixups := (boundv, fv, (fun () -> GenLetRecFixup cenv cgbuf eenv (clo.cloSpec, access, ilField, exprForVal m fv, m))) :: !fixups | _ -> error (InternalError("GenLetRec: " + fv.LogicalName + " was not in the environment", m)) ) - + | Expr.Val (vref, _, _) -> let fv = vref.Deref let needsFixup = Zset.contains fv forwardReferenceSet @@ -5581,7 +5687,8 @@ and GenBindingAfterDebugPoint cenv cgbuf eenv sp (TBind(vspec, rhsExpr, _)) star | Some _, Some e -> cgbuf.mgbuf.AddReflectedDefinition(vspec, e) | _ -> () - let eenv = {eenv with letBoundVars= (mkLocalValRef vspec) :: eenv.letBoundVars} + let eenv = { eenv with letBoundVars = (mkLocalValRef vspec) :: eenv.letBoundVars; + initLocals = eenv.initLocals && (match vspec.ApparentEnclosingEntity with Parent ref -> not (HasFSharpAttribute g g.attrib_SkipLocalsInitAttribute ref.Attribs) | _ -> true) } let access = ComputeMethodAccessRestrictedBySig eenv vspec @@ -5607,7 +5714,7 @@ and GenBindingAfterDebugPoint cenv cgbuf eenv sp (TBind(vspec, rhsExpr, _)) star let eenv = EnvForTypars tps eenv CommitStartScope cgbuf startScopeMarkOpt GenExpr cenv cgbuf eenv SPSuppress cctorBody discard - + | Method (topValInfo, _, mspec, mspecW, _, ctps, mtps, curriedArgInfos, paramInfos, witnessInfos, argTys, retInfo) -> let methLambdaTypars, methLambdaCtorThisValOpt, methLambdaBaseValOpt, methLambdaCurriedVars, methLambdaBody, methLambdaBodyTy = @@ -5617,15 +5724,14 @@ and GenBindingAfterDebugPoint cenv cgbuf eenv sp (TBind(vspec, rhsExpr, _)) star CommitStartScope cgbuf startScopeMarkOpt - // if we have any expression recursion depth, we should delay the generation of a method to prevent stack overflows - let generator = if cenv.exprRecursionDepth > 0 then DelayGenMethodForBinding else GenMethodForBinding + let generator = GenMethodForBinding let hasWitnessEntry = cenv.g.generateWitnesses && not witnessInfos.IsEmpty generator cenv cgbuf.mgbuf eenv (vspec, mspec, hasWitnessEntry, false, access, ctps, mtps, [], curriedArgInfos, paramInfos, argTys, retInfo, topValInfo, methLambdaCtorThisValOpt, methLambdaBaseValOpt, methLambdaTypars, methLambdaVars, methLambdaBody, methLambdaBodyTy) // If generating witnesses, then generate the second entry point with additional arguments. // Take a copy of the expression to ensure generated names are unique. - if hasWitnessEntry then + if hasWitnessEntry then let copyOfLambdaBody = copyExpr cenv.g CloneAll methLambdaBody generator cenv cgbuf.mgbuf eenv (vspec, mspecW, hasWitnessEntry, true, access, ctps, mtps, witnessInfos, curriedArgInfos, paramInfos, argTys, retInfo, topValInfo, methLambdaCtorThisValOpt, methLambdaBaseValOpt, methLambdaTypars, methLambdaVars, copyOfLambdaBody, methLambdaBodyTy) @@ -5634,7 +5740,7 @@ and GenBindingAfterDebugPoint cenv cgbuf eenv sp (TBind(vspec, rhsExpr, _)) star let ilAttribs = GenAttrs cenv eenv vspec.Attribs let ilTy = ilGetterMethSpec.FormalReturnType let ilPropDef = - ILPropertyDef(name = PrettyNaming.ChopPropertyName ilGetterMethSpec.Name, + ILPropertyDef(name = ChopPropertyName ilGetterMethSpec.Name, attributes = PropertyAttributes.None, setMethod = None, getMethod = Some ilGetterMethSpec.MethodRef, @@ -5646,7 +5752,8 @@ and GenBindingAfterDebugPoint cenv cgbuf eenv sp (TBind(vspec, rhsExpr, _)) star cgbuf.mgbuf.AddOrMergePropertyDef(ilGetterMethSpec.MethodRef.DeclaringTypeRef, ilPropDef, m) let ilMethodDef = - let ilMethodBody = MethodBody.IL(CodeGenMethodForExpr cenv cgbuf.mgbuf (SPSuppress, [], ilGetterMethSpec.Name, eenv, 0, rhsExpr, Return)) + let ilCode = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPSuppress, [], ilGetterMethSpec.Name, eenv, 0, rhsExpr, Return) + let ilMethodBody = MethodBody.IL(lazy ilCode) (mkILStaticMethod ([], ilGetterMethSpec.Name, access, [], mkILReturn ilTy, ilMethodBody)).WithSpecialName |> AddNonUserCompilerGeneratedAttribs g @@ -5662,7 +5769,7 @@ and GenBindingAfterDebugPoint cenv cgbuf eenv sp (TBind(vspec, rhsExpr, _)) star | StaticField (fspec, vref, hasLiteralAttr, ilTyForProperty, ilPropName, fty, ilGetterMethRef, ilSetterMethRef, optShadowLocal) -> let mut = vspec.IsMutable - + let canTarget(targets, goal: System.AttributeTargets) = match targets with | None -> true @@ -5676,7 +5783,7 @@ and GenBindingAfterDebugPoint cenv cgbuf eenv sp (TBind(vspec, rhsExpr, _)) star match vref.LiteralValue with | Some konst -> ilFieldDef.WithLiteralDefaultValue( Some (GenFieldInit m konst) ) | None -> ilFieldDef - + let ilFieldDef = let isClassInitializer = (cgbuf.MethodName = ".cctor") ilFieldDef.WithInitOnly(not (mut || cenv.opts.isInteractiveItExpr || not isClassInitializer || hasLiteralAttr)) @@ -5692,7 +5799,7 @@ and GenBindingAfterDebugPoint cenv cgbuf eenv sp (TBind(vspec, rhsExpr, _)) star let ilFieldDef = ilFieldDef.With(customAttrs = mkILCustomAttrs (ilAttribs @ [ g.DebuggerBrowsableNeverAttribute ])) [ (fspec.DeclaringTypeRef, ilFieldDef) ] - + let ilTypeRefForProperty = ilTyForProperty.TypeRef for (tref, ilFieldDef) in ilFieldDefs do @@ -5799,46 +5906,46 @@ and GenMarshal cenv attribs = match decoder.FindInt32 "SafeArraySubType" 0x0 with (* enumeration values for System.Runtime.InteropServices.VarType taken from mscorlib.il *) | 0x0 -> ILNativeVariant.Empty - | 0x1 -> ILNativeVariant.Null - | 0x02 -> ILNativeVariant.Int16 - | 0x03 -> ILNativeVariant.Int32 - | 0x0C -> ILNativeVariant.Variant - | 0x04 -> ILNativeVariant.Single - | 0x05 -> ILNativeVariant.Double - | 0x06 -> ILNativeVariant.Currency - | 0x07 -> ILNativeVariant.Date - | 0x08 -> ILNativeVariant.BSTR - | 0x09 -> ILNativeVariant.IDispatch - | 0x0a -> ILNativeVariant.Error - | 0x0b -> ILNativeVariant.Bool - | 0x0d -> ILNativeVariant.IUnknown - | 0x0e -> ILNativeVariant.Decimal - | 0x10 -> ILNativeVariant.Int8 - | 0x11 -> ILNativeVariant.UInt8 - | 0x12 -> ILNativeVariant.UInt16 - | 0x13 -> ILNativeVariant.UInt32 - | 0x15 -> ILNativeVariant.UInt64 - | 0x16 -> ILNativeVariant.Int - | 0x17 -> ILNativeVariant.UInt - | 0x18 -> ILNativeVariant.Void - | 0x19 -> ILNativeVariant.HRESULT - | 0x1a -> ILNativeVariant.PTR - | 0x1c -> ILNativeVariant.CArray - | 0x1d -> ILNativeVariant.UserDefined - | 0x1e -> ILNativeVariant.LPSTR - | 0x1B -> ILNativeVariant.SafeArray - | 0x1f -> ILNativeVariant.LPWSTR - | 0x24 -> ILNativeVariant.Record - | 0x40 -> ILNativeVariant.FileTime - | 0x41 -> ILNativeVariant.Blob - | 0x42 -> ILNativeVariant.Stream - | 0x43 -> ILNativeVariant.Storage - | 0x44 -> ILNativeVariant.StreamedObject - | 0x45 -> ILNativeVariant.StoredObject - | 0x46 -> ILNativeVariant.BlobObject - | 0x47 -> ILNativeVariant.CF - | 0x48 -> ILNativeVariant.CLSID - | 0x14 -> ILNativeVariant.Int64 + | 0x1 -> ILNativeVariant.Null + | 0x02 -> ILNativeVariant.Int16 + | 0x03 -> ILNativeVariant.Int32 + | 0x0C -> ILNativeVariant.Variant + | 0x04 -> ILNativeVariant.Single + | 0x05 -> ILNativeVariant.Double + | 0x06 -> ILNativeVariant.Currency + | 0x07 -> ILNativeVariant.Date + | 0x08 -> ILNativeVariant.BSTR + | 0x09 -> ILNativeVariant.IDispatch + | 0x0a -> ILNativeVariant.Error + | 0x0b -> ILNativeVariant.Bool + | 0x0d -> ILNativeVariant.IUnknown + | 0x0e -> ILNativeVariant.Decimal + | 0x10 -> ILNativeVariant.Int8 + | 0x11 -> ILNativeVariant.UInt8 + | 0x12 -> ILNativeVariant.UInt16 + | 0x13 -> ILNativeVariant.UInt32 + | 0x15 -> ILNativeVariant.UInt64 + | 0x16 -> ILNativeVariant.Int + | 0x17 -> ILNativeVariant.UInt + | 0x18 -> ILNativeVariant.Void + | 0x19 -> ILNativeVariant.HRESULT + | 0x1a -> ILNativeVariant.PTR + | 0x1c -> ILNativeVariant.CArray + | 0x1d -> ILNativeVariant.UserDefined + | 0x1e -> ILNativeVariant.LPSTR + | 0x1B -> ILNativeVariant.SafeArray + | 0x1f -> ILNativeVariant.LPWSTR + | 0x24 -> ILNativeVariant.Record + | 0x40 -> ILNativeVariant.FileTime + | 0x41 -> ILNativeVariant.Blob + | 0x42 -> ILNativeVariant.Stream + | 0x43 -> ILNativeVariant.Storage + | 0x44 -> ILNativeVariant.StreamedObject + | 0x45 -> ILNativeVariant.StoredObject + | 0x46 -> ILNativeVariant.BlobObject + | 0x47 -> ILNativeVariant.CF + | 0x48 -> ILNativeVariant.CLSID + | 0x14 -> ILNativeVariant.Int64 | _ -> ILNativeVariant.Empty let safeArrayUserDefinedSubType = // the argument is a System.Type obj, but it's written to MD as a UTF8 string @@ -5922,12 +6029,12 @@ and GenParams (cenv: cenv) eenv m (mspec: ILMethodSpec) witnessInfos (argInfos: | _ -> List.map (fun x -> x, None) ilArgTysAndInfos - let ilParams, _ = + let ilParams, _ = (Set.empty, List.zip methArgTys ilArgTysAndInfoAndVals) ||> List.mapFold (fun takenNames (methodArgTy, ((ilArgTy, topArgInfo), implValOpt)) -> let inFlag, outFlag, optionalFlag, defaultParamValue, Marshal, attribs = GenParamAttribs cenv methodArgTy topArgInfo.Attribs - - let idOpt = + + let idOpt = match topArgInfo.Name with | Some v -> Some v | None -> @@ -5948,10 +6055,10 @@ and GenParams (cenv: cenv) eenv m (mspec: ILMethodSpec) witnessInfos (argInfos: Some nm, takenNames.Add(nm) | None -> None, takenNames - + let ilAttribs = GenAttrs cenv eenv attribs - + let ilAttribs = match GenReadOnlyAttributeIfNecessary g methodArgTy with | Some attr -> ilAttribs @ [attr] @@ -5991,15 +6098,15 @@ and GenReturnInfo cenv eenv returnTy ilRetTy (retInfo: ArgReprInfo) : ILReturn = Marshal=marshal CustomAttrsStored= storeILCustomAttrs ilAttrs MetadataIndex = NoMetadataIdx } - + /// Generate an IL property for a member and GenPropertyForMethodDef compileAsInstance tref mdef (v: Val) (memberInfo: ValMemberInfo) ilArgTys ilPropTy ilAttrs compiledName = let name = match compiledName with | Some n -> n | _ -> v.PropertyName in (* chop "get_" *) ILPropertyDef(name = name, attributes = PropertyAttributes.None, - setMethod = (if memberInfo.MemberFlags.MemberKind= MemberKind.PropertySet then Some(mkRefToILMethod(tref, mdef)) else None), - getMethod = (if memberInfo.MemberFlags.MemberKind= MemberKind.PropertyGet then Some(mkRefToILMethod(tref, mdef)) else None), + setMethod = (if memberInfo.MemberFlags.MemberKind= SynMemberKind.PropertySet then Some(mkRefToILMethod(tref, mdef)) else None), + getMethod = (if memberInfo.MemberFlags.MemberKind= SynMemberKind.PropertyGet then Some(mkRefToILMethod(tref, mdef)) else None), callingConv = (if compileAsInstance then ILThisConvention.Instance else ILThisConvention.Static), propertyType = ilPropTy, init = None, @@ -6033,12 +6140,12 @@ and ComputeUseMethodImpl cenv (v: Val, slotsig: SlotSig) = Option.isSome tcref.GeneratedCompareToValues && (typeEquiv cenv.g oty cenv.g.mk_IComparable_ty || tyconRefEq cenv.g cenv.g.system_GenericIComparable_tcref otcref) - + not isCompare) && (let isGenericEquals = Option.isSome tcref.GeneratedHashAndEqualsWithComparerValues && tyconRefEq cenv.g cenv.g.system_GenericIEquatable_tcref otcref - + not isGenericEquals) && (let isStructural = (Option.isSome tcref.GeneratedCompareToWithComparerValues && typeEquiv cenv.g oty cenv.g.mk_IStructuralComparable_ty) || @@ -6054,22 +6161,22 @@ and ComputeMethodImplNameFixupForMemberBinding cenv (v: Val, memberInfo: ValMemb let useMethodImpl = ComputeUseMethodImpl cenv (v, slotsig) let nameOfOverridingMethod = GenNameOfOverridingMethod cenv (useMethodImpl, slotsig) Some nameOfOverridingMethod - + and ComputeFlagFixupsForMemberBinding cenv (v: Val, memberInfo: ValMemberInfo) = [ if isNil memberInfo.ImplementedSlotSigs then yield fixupVirtualSlotFlags else for slotsig in memberInfo.ImplementedSlotSigs do let useMethodImpl = ComputeUseMethodImpl cenv (v, slotsig) - + if useMethodImpl then yield fixupMethodImplFlags else - yield fixupVirtualSlotFlags - match ComputeMethodImplNameFixupForMemberBinding cenv (v, memberInfo) with - | Some nm -> yield renameMethodDef nm + yield fixupVirtualSlotFlags + match ComputeMethodImplNameFixupForMemberBinding cenv (v, memberInfo) with + | Some nm -> yield renameMethodDef nm | None -> () ] - + and ComputeMethodImplAttribs cenv (_v: Val) attrs = let g = cenv.g let implflags = @@ -6107,7 +6214,7 @@ and GenMethodForBinding ctorThisValOpt, baseValOpt, methLambdaTypars, methLambdaVars, methLambdaBody, returnTy) = let g = cenv.g let m = v.Range - + // If a method has a witness-passing version of the code, then suppress // the generation of any witness in the non-witness passing version of the code let eenv = { eenv with suppressWitnesses = hasWitnessEntry && not generateWitnessArgs } @@ -6134,8 +6241,8 @@ and GenMethodForBinding // Add the arguments to the environment. We add an implicit 'this' argument to constructors let isCtor = v.IsConstructor - let methLambdaWitnessInfos = - if generateWitnessArgs then + let methLambdaWitnessInfos = + if generateWitnessArgs then GetTraitWitnessInfosOfTypars cenv.g ctps.Length methLambdaTypars else [] @@ -6153,6 +6260,7 @@ and GenMethodForBinding let eenvForMeth = eenvForMeth |> AddStorageForLocalWitnesses (methLambdaWitnessInfos |> List.mapi (fun i w -> (w, Arg (numArgsUsed+i)))) let numArgsUsed = numArgsUsed + methLambdaWitnessInfos.Length let eenvForMeth = eenvForMeth |> AddStorageForLocalVals cenv.g (List.mapi (fun i v -> (v, Arg (numArgsUsed+i))) nonUnitNonSelfMethodVars) + let eenvForMeth = if eenvForMeth.initLocals && HasFSharpAttribute g g.attrib_SkipLocalsInitAttribute v.Attribs then { eenvForMeth with initLocals = false } else eenvForMeth eenvForMeth let tailCallInfo = @@ -6188,21 +6296,31 @@ and GenMethodForBinding mkThrow m returnTy exnExpr else body - - let ilCode = CodeGenMethodForExpr cenv mgbuf (SPAlways, tailCallInfo, mspec.Name, eenvForMeth, 0, bodyExpr, sequel) + + let ilCodeLazy = lazy CodeGenMethodForExpr cenv mgbuf (SPAlways, tailCallInfo, mspec.Name, eenvForMeth, 0, bodyExpr, sequel) // This is the main code generation for most methods - false, MethodBody.IL ilCode, false + false, MethodBody.IL(ilCodeLazy), false + + match ilMethodBody with + | MethodBody.IL(ilCodeLazy) -> + if cenv.exprRecursionDepth > 0 then + cenv.delayedGenMethods.Enqueue(fun _ -> ilCodeLazy.Force() |> ignore) + else + // Eagerly codegen if we are not in an expression depth. + ilCodeLazy.Force() |> ignore + | _ -> + () // Do not generate DllImport attributes into the code - they are implicit from the P/Invoke let attrs = v.Attribs |> List.filter (IsMatchingFSharpAttributeOpt g g.attrib_DllImportAttribute >> not) |> List.filter (IsMatchingFSharpAttribute g g.attrib_CompiledNameAttribute >> not) - + let attrsAppliedToGetterOrSetter, attrs = List.partition (fun (Attrib(_, _, _, _, isAppliedToGetterOrSetter, _, _)) -> isAppliedToGetterOrSetter) attrs - + let sourceNameAttribs, compiledName = match v.Attribs |> List.tryFind (IsMatchingFSharpAttribute g g.attrib_CompiledNameAttribute) with | Some (Attrib(_, _, [ AttribStringArg b ], _, _, _, _)) -> [ mkCompilationSourceNameAttr g v.LogicalName ], Some b @@ -6210,7 +6328,7 @@ and GenMethodForBinding // check if the hasPreserveSigNamedArg and hasSynchronizedImplFlag implementation flags have been specified let hasPreserveSigImplFlag, hasSynchronizedImplFlag, hasNoInliningFlag, hasAggressiveInliningImplFlag, attrs = ComputeMethodImplAttribs cenv v attrs - + let securityAttributes, attrs = attrs |> List.partition (fun a -> IsSecurityAttribute g cenv.amap cenv.casApplied a m) let permissionSets = CreatePermissionSets cenv eenv securityAttributes @@ -6225,10 +6343,10 @@ and GenMethodForBinding yield! GenCompilationArgumentCountsAttr cenv v match v.MemberInfo with - | Some memberInfo when - memberInfo.MemberFlags.MemberKind = MemberKind.PropertyGet || - memberInfo.MemberFlags.MemberKind = MemberKind.PropertySet || - memberInfo.MemberFlags.MemberKind = MemberKind.PropertyGetSet -> + | Some memberInfo when + memberInfo.MemberFlags.MemberKind = SynMemberKind.PropertyGet || + memberInfo.MemberFlags.MemberKind = SynMemberKind.PropertySet || + memberInfo.MemberFlags.MemberKind = SynMemberKind.PropertyGetSet -> match GenReadOnlyAttributeIfNecessary g returnTy with Some ilAttr -> ilAttr | _ -> () | _ -> () ] @@ -6246,20 +6364,20 @@ and GenMethodForBinding // compiling CLIEvent properties | Some memberInfo - when not v.IsExtensionMember && - (match memberInfo.MemberFlags.MemberKind with - | (MemberKind.PropertySet | MemberKind.PropertyGet) -> CompileAsEvent cenv.g v.Attribs + when not v.IsExtensionMember && + (match memberInfo.MemberFlags.MemberKind with + | (SynMemberKind.PropertySet | SynMemberKind.PropertyGet) -> CompileAsEvent cenv.g v.Attribs | _ -> false) -> - let useMethodImpl = - if compileAsInstance && + let useMethodImpl = + if compileAsInstance && ((memberInfo.MemberFlags.IsDispatchSlot && memberInfo.IsImplemented) || memberInfo.MemberFlags.IsOverrideOrExplicitImpl) then let useMethodImpl = memberInfo.ImplementedSlotSigs |> List.exists (fun slotsig -> ComputeUseMethodImpl cenv (v, slotsig)) - let nameOfOverridingMethod = - match ComputeMethodImplNameFixupForMemberBinding cenv (v, memberInfo) with + let nameOfOverridingMethod = + match ComputeMethodImplNameFixupForMemberBinding cenv (v, memberInfo) with | None -> mspec.Name | Some nm -> nm @@ -6278,18 +6396,18 @@ and GenMethodForBinding | _ -> - let mdef = + let mdef = match v.MemberInfo with | Some memberInfo when not v.IsExtensionMember -> let ilMethTypars = ilTypars |> List.skip mspec.DeclaringType.GenericArgs.Length - if memberInfo.MemberFlags.MemberKind = MemberKind.Constructor then + if memberInfo.MemberFlags.MemberKind = SynMemberKind.Constructor then assert (isNil ilMethTypars) let mdef = mkILCtor (access, ilParams, ilMethodBody) let mdef = mdef.With(customAttrs= mkILCustomAttrs (ilAttrsThatGoOnPrimaryItem @ sourceNameAttribs @ ilAttrsCompilerGenerated)) mdef - elif memberInfo.MemberFlags.MemberKind = MemberKind.ClassConstructor then + elif memberInfo.MemberFlags.MemberKind = SynMemberKind.ClassConstructor then assert (isNil ilMethTypars) let mdef = mkILClassCtor ilMethodBody let mdef = mdef.With(customAttrs= mkILCustomAttrs (ilAttrsThatGoOnPrimaryItem @ sourceNameAttribs @ ilAttrsCompilerGenerated)) @@ -6325,11 +6443,11 @@ and GenMethodForBinding else mdef match memberInfo.MemberFlags.MemberKind with - - | (MemberKind.PropertySet | MemberKind.PropertyGet) -> + + | (SynMemberKind.PropertySet | SynMemberKind.PropertyGet) -> if not (isNil ilMethTypars) then error(InternalError("A property may not be more generic than the enclosing type - constrain the polymorphism in the expression", v.Range)) - + // Check if we're compiling the property as a .NET event assert not (CompileAsEvent cenv.g v.Attribs) @@ -6342,7 +6460,7 @@ and GenMethodForBinding let ilPropDef = GenPropertyForMethodDef compileAsInstance tref mdef v memberInfo ilArgTys ilPropTy (mkILCustomAttrs ilAttrsThatGoOnPrimaryItem) compiledName mgbuf.AddOrMergePropertyDef(tref, ilPropDef, m) - // Add the special name flag for all properties + // Add the special name flag for all properties let mdef = mdef.WithSpecialName.With(customAttrs= mkILCustomAttrs ((GenAttrs cenv eenv attrsAppliedToGetterOrSetter) @ sourceNameAttribs @ ilAttrsCompilerGenerated)) mdef @@ -6358,7 +6476,7 @@ and GenMethodForBinding match v.MemberInfo with | Some memberInfo when v.IsExtensionMember -> match memberInfo.MemberFlags.MemberKind with - | (MemberKind.PropertySet | MemberKind.PropertyGet) -> ilAttrsThatGoOnPrimaryItem @ GenAttrs cenv eenv attrsAppliedToGetterOrSetter + | (SynMemberKind.PropertySet | SynMemberKind.PropertyGet) -> ilAttrsThatGoOnPrimaryItem @ GenAttrs cenv eenv attrsAppliedToGetterOrSetter | _ -> ilAttrsThatGoOnPrimaryItem | _ -> ilAttrsThatGoOnPrimaryItem @@ -6391,13 +6509,13 @@ and GenMethodForBinding mdef CountMethodDef() mgbuf.AddMethodDef(tref, mdef) - + and GenPInvokeMethod (nm, dll, namedArgs) = let decoder = AttributeDecoder namedArgs let hasPreserveSigNamedArg = decoder.FindBool "PreserveSig" true hasPreserveSigNamedArg, - MethodBody.PInvoke + let pinvoke = { Where=mkSimpleModRef dll Name=decoder.FindString "EntryPoint" nm CallingConv= @@ -6418,8 +6536,9 @@ and GenPInvokeMethod (nm, dll, namedArgs) = NoMangle= decoder.FindBool "ExactSpelling" false LastError= decoder.FindBool "SetLastError" false ThrowOnUnmappableChar= if (decoder.FindBool "ThrowOnUnmappableChar" false) then PInvokeThrowOnUnmappableChar.Enabled else PInvokeThrowOnUnmappableChar.UseAssembly - CharBestFit=if (decoder.FindBool "BestFitMapping" false) then PInvokeCharBestFit.Enabled else PInvokeCharBestFit.UseAssembly } - + CharBestFit=if (decoder.FindBool "BestFitMapping" false) then PInvokeCharBestFit.Enabled else PInvokeCharBestFit.UseAssembly } : PInvokeMethod + MethodBody.PInvoke(lazy pinvoke) + and GenBindings cenv cgbuf eenv binds = List.iter (GenBinding cenv cgbuf eenv) binds //------------------------------------------------------------------------- @@ -6436,7 +6555,7 @@ and GenSetVal cenv cgbuf eenv (vref, e, m) sequel = GenExpr cenv cgbuf eenv SPSuppress e Continue GenSetStorage vref.Range cgbuf storage GenUnitThenSequel cenv eenv m eenv.cloc cgbuf sequel - + and GenGetValRefAndSequel cenv cgbuf eenv m (v: ValRef) storeSequel = let ty = v.Type GenGetStorageAndSequel cenv cgbuf eenv m (ty, GenType cenv.amap m eenv.tyenv ty) (StorageForValRef cenv.g m v eenv) storeSequel @@ -6444,22 +6563,19 @@ and GenGetValRefAndSequel cenv cgbuf eenv m (v: ValRef) storeSequel = and GenGetVal cenv cgbuf eenv (v: ValRef, m) sequel = GenGetValRefAndSequel cenv cgbuf eenv m v None GenSequel cenv eenv.cloc cgbuf sequel - + and GenBindingRhs cenv cgbuf eenv sp (vspec: Val) e = let g = cenv.g match e with | Expr.TyLambda _ | Expr.Lambda _ -> let isLocalTypeFunc = IsNamedLocalTypeFuncVal g vspec e - + match e with | Expr.TyLambda (_, tyargs, body, _, ttype) when ( tyargs |> List.forall (fun tp -> tp.IsErased) && (match StorageForVal g vspec.Range vspec eenv with Local _ -> true | _ -> false) && - (isLocalTypeFunc || - (match ttype with - TType_var typar -> match typar.Solution with Some(TType_app(t, _))-> t.IsStructOrEnumTycon | _ -> false - | _ -> false)) + (isLocalTypeFunc || isStructOrEnumTyconTy g ttype) ) -> // type lambda with erased type arguments that is stored as local variable (not method or property)- inline body GenExpr cenv cgbuf eenv sp body Continue @@ -6473,7 +6589,7 @@ and CommitStartScope cgbuf startScopeMarkOpt = match startScopeMarkOpt with | None -> () | Some ss -> cgbuf.SetMarkToHere ss - + and EmitInitLocal cgbuf ty idx = CG.EmitInstrs cgbuf (pop 0) Push0 [I_ldloca (uint16 idx); (I_initobj ty) ] and EmitSetLocal cgbuf idx = CG.EmitInstr cgbuf (pop 1) Push0 (mkStloc (uint16 idx)) @@ -6513,7 +6629,7 @@ and GenSetStorage m cgbuf storage = and CommitGetStorageSequel cenv cgbuf eenv m ty localCloInfo storeSequel = match localCloInfo, storeSequel with - | Some {contents =NamedLocalIlxClosureInfoGenerator _cloinfo}, _ -> + | Some {contents =NamedLocalIlxClosureInfoGenerator _cloinfo}, _ -> error(InternalError("Unexpected generator", m)) | Some {contents =NamedLocalIlxClosureInfoGenerated cloinfo}, Some (tyargs, args, m, sequel) when not (isNil tyargs) -> @@ -6592,7 +6708,7 @@ and GenGetLocalVRef cenv cgbuf eenv m (vref: ValRef) storeSequel = and GenStoreVal cenv cgbuf eenv m (vspec: Val) = GenSetStorage vspec.Range cgbuf (StorageForVal cenv.g m vspec eenv) -/// Allocate IL locals +/// Allocate IL locals and AllocLocal cenv cgbuf eenv compgen (v, ty, isFixed) (scopeMarks: Mark * Mark) = // The debug range for the local let ranges = if compgen then [] else [(v, scopeMarks)] @@ -6611,20 +6727,20 @@ and AllocLocalVal cenv cgbuf v eenv repr scopeMarks = let ty = v.Type if isUnitTy g ty && not v.IsMutable then Null, eenv else - match repr with + match repr with | Some r when IsNamedLocalTypeFuncVal g v r -> - // known, named, non-escaping type functions + // known, named, non-escaping type functions let cloinfoGenerate eenv = let eenvinner = {eenv with letBoundVars=(mkLocalValRef v) :: eenv.letBoundVars} let cloinfo, _, _ = GetIlxClosureInfo cenv v.Range true true [] eenvinner (Option.get repr) cloinfo - + let idx, realloc, eenv = AllocLocal cenv cgbuf eenv v.IsCompilerGenerated (v.CompiledName g.CompilerGlobalState, g.ilg.typ_Object, false) scopeMarks Local (idx, realloc, Some(ref (NamedLocalIlxClosureInfoGenerator cloinfoGenerate))), eenv - | _ -> - // normal local + | _ -> + // normal local let idx, realloc, eenv = AllocLocal cenv cgbuf eenv v.IsCompilerGenerated (v.CompiledName g.CompilerGlobalState, GenTypeOfVal cenv eenv v, v.IsFixed) scopeMarks Local (idx, realloc, None), eenv let eenv = AddStorageForVal g (v, notlazy repr) eenv @@ -6809,7 +6925,7 @@ and GenAttr amap g eenv (Attrib(_, k, args, props, _, _, _)) = let mspec, _, _, _, _, _, _, _, _, _ = GetMethodSpecForMemberVal amap g (Option.get vref.MemberInfo) vref mspec let ilArgs = List.map2 (fun (AttribExpr(_, vexpr)) ty -> GenAttribArg amap g eenv vexpr ty) args mspec.FormalArgTypes - mkILCustomAttribMethRef g.ilg (mspec, ilArgs, props) + mkILCustomAttribMethRef (mspec, ilArgs, props) and GenAttrs cenv eenv attrs = List.map (GenAttr cenv.amap cenv.g eenv) attrs @@ -6822,7 +6938,7 @@ and GenCompilationArgumentCountsAttr cenv (v: Val) = if arities.Length > 1 then yield mkCompilationArgumentCountsAttr g arities | _ -> - () ] + () ] // Create a permission set for a list of security attributes and CreatePermissionSets cenv eenv (securityAttributes: Attrib list) = @@ -6833,11 +6949,11 @@ and CreatePermissionSets cenv eenv (securityAttributes: Attrib list) = let tref = tcref.CompiledRepresentationForNamedType let ilattr = GenAttr cenv.amap g eenv attr let _, ilNamedArgs = - match TryDecodeILAttribute g tref (mkILCustomAttrs [ilattr]) with + match TryDecodeILAttribute tref (mkILCustomAttrs [ilattr]) with | Some(ae, na) -> ae, na | _ -> [], [] let setArgs = ilNamedArgs |> List.map (fun (n, ilt, _, ilae) -> (n, ilt, ilae)) - yield IL.mkPermissionSet g.ilg (secaction, [(tref, setArgs)])] + yield IL.mkPermissionSet (secaction, [(tref, setArgs)])] //-------------------------------------------------------------------------- // Generate the set of modules for an assembly, and the declarations in each module @@ -6917,7 +7033,7 @@ and GenModuleBinding cenv (cgbuf: CodeGenBuffer) (qname: QualifiedNameOfFile) la let eenvinner = if mspec.IsNamespace then eenv else - {eenv with cloc = CompLocForFixedModule cenv.opts.fragName qname.Text mspec } + { eenv with cloc = CompLocForFixedModule cenv.opts.fragName qname.Text mspec; initLocals = eenv.initLocals && not (HasFSharpAttribute cenv.g cenv.g.attrib_SkipLocalsInitAttribute mspec.Attribs) } // Create the class to hold the contents of this module. No class needed if // we're compiling it as a namespace. @@ -6994,7 +7110,7 @@ and GenImplFile cenv (mgbuf: AssemblyBuilder) mainInfoOpt eenv (implFile: TypedI | Some _ when hasExplicitEntryPoint -> ".cctor" // Final file, implicit entry point | Some _ -> mainMethName - + // topInstrs is ILInstr[] and contains the abstract IL for this file's top-level actions. topCode is the ILMethodBody for that same code. let topInstrs, topCode = CodeGenMethod cenv mgbuf @@ -7028,13 +7144,13 @@ and GenImplFile cenv (mgbuf: AssemblyBuilder) mainInfoOpt eenv (implFile: TypedI // well for the bindings earlier in the file containing the entry point. match mgbuf.GetExplicitEntryPointInfo() with // Final file, explicit entry point: place the code in a .cctor, and add code to main that forces the .cctor (if topCode has initialization effect). - | Some tref -> + | Some tref -> if doesSomething then lazyInitInfo.Add (fun fspec feefee seqpt -> // This adds the explicit init of the .cctor to the explicit entry point main method mgbuf.AddExplicitInitToSpecificMethodDef((fun md -> md.IsEntryPoint), tref, fspec, GenPossibleILSourceMarker cenv m, feefee, seqpt)) - let cctorMethDef = mkILClassCtor (MethodBody.IL topCode) + let cctorMethDef = mkILClassCtor (MethodBody.IL (lazy topCode)) mgbuf.AddMethodDef(initClassTy.TypeRef, cctorMethDef) // Final file, implicit entry point. We generate no .cctor. @@ -7049,7 +7165,7 @@ and GenImplFile cenv (mgbuf: AssemblyBuilder) mainInfoOpt eenv (implFile: TypedI // generate main@ let ilMainMethodDef = - let mdef = mkILNonGenericStaticMethod(mainMethName, ILMemberAccess.Public, [], mkILReturn ILType.Void, MethodBody.IL topCode) + let mdef = mkILNonGenericStaticMethod(mainMethName, ILMemberAccess.Public, [], mkILReturn ILType.Void, MethodBody.IL (lazy topCode)) mdef.With(isEntryPoint= true, customAttrs = ilAttrs) mgbuf.AddMethodDef(initClassTy.TypeRef, ilMainMethodDef) @@ -7059,7 +7175,7 @@ and GenImplFile cenv (mgbuf: AssemblyBuilder) mainInfoOpt eenv (implFile: TypedI | None -> if doesSomething then // Add the cctor - let cctorMethDef = mkILClassCtor (MethodBody.IL topCode) + let cctorMethDef = mkILClassCtor (MethodBody.IL (lazy topCode)) mgbuf.AddMethodDef(initClassTy.TypeRef, cctorMethDef) // Commit the directed initializations @@ -7126,12 +7242,12 @@ and GenFieldInit m c = | ConstToILFieldInit fieldInit -> fieldInit | _ -> error(Error(FSComp.SR.ilTypeCannotBeUsedForLiteralField(), m)) -and GenWitnessParams cenv eenv m (witnessInfos: TraitWitnessInfos) = - ((Set.empty, 0), witnessInfos) ||> List.mapFold (fun (used,i) witnessInfo -> +and GenWitnessParams cenv eenv m (witnessInfos: TraitWitnessInfos) = + ((Set.empty, 0), witnessInfos) ||> List.mapFold (fun (used,i) witnessInfo -> let ty = GenWitnessTy cenv.g witnessInfo let nm = String.uncapitalize witnessInfo.MemberName let nm = if used.Contains nm then nm + string i else nm - let ilParam = + let ilParam = { Name=Some nm Type= GenType cenv.amap m eenv.tyenv ty Default=None @@ -7151,19 +7267,19 @@ and GenAbstractBinding cenv eenv tref (vref: ValRef) = let memberInfo = Option.get vref.MemberInfo let attribs = vref.Attribs let hasPreserveSigImplFlag, hasSynchronizedImplFlag, hasNoInliningFlag, hasAggressiveInliningImplFlag, attribs = ComputeMethodImplAttribs cenv vref.Deref attribs - if memberInfo.MemberFlags.IsDispatchSlot && not memberInfo.IsImplemented then + if memberInfo.MemberFlags.IsDispatchSlot && not memberInfo.IsImplemented then let mspec, _mspecW, ctps, mtps, _curriedArgInfos, argInfos, retInfo, witnessInfos, methArgTys, returnTy = GetMethodSpecForMemberVal cenv.amap cenv.g memberInfo vref let ilAttrs = [ yield! GenAttrs cenv eenv attribs yield! GenCompilationArgumentCountsAttr cenv vref.Deref - + match vref.MemberInfo, returnTy with - | Some memberInfo, Some returnTy when - memberInfo.MemberFlags.MemberKind = MemberKind.PropertyGet || - memberInfo.MemberFlags.MemberKind = MemberKind.PropertySet || - memberInfo.MemberFlags.MemberKind = MemberKind.PropertyGetSet -> + | Some memberInfo, Some returnTy when + memberInfo.MemberFlags.MemberKind = SynMemberKind.PropertyGet || + memberInfo.MemberFlags.MemberKind = SynMemberKind.PropertySet || + memberInfo.MemberFlags.MemberKind = SynMemberKind.PropertyGetSet -> match GenReadOnlyAttributeIfNecessary g returnTy with Some ilAttr -> ilAttr | _ -> () | _ -> () ] @@ -7173,7 +7289,7 @@ and GenAbstractBinding cenv eenv tref (vref: ValRef) = let ilMethTypars = GenGenericParams cenv eenvForMeth mtps let ilReturn = GenReturnInfo cenv eenvForMeth returnTy mspec.FormalReturnType retInfo let ilParams = GenParams cenv eenvForMeth m mspec [] argInfos methArgTys None - + let compileAsInstance = ValRefIsCompiledAsInstanceMember g vref let mdef = mkILGenericVirtualMethod (vref.CompiledName g.CompilerGlobalState, ILMemberAccess.Public, ilMethTypars, ilParams, ilReturn, MethodBody.Abstract) @@ -7187,19 +7303,19 @@ and GenAbstractBinding cenv eenv tref (vref: ValRef) = .WithSynchronized(hasSynchronizedImplFlag) .WithNoInlining(hasNoInliningFlag) .WithAggressiveInlining(hasAggressiveInliningImplFlag) - + match memberInfo.MemberFlags.MemberKind with - | MemberKind.ClassConstructor - | MemberKind.Constructor - | MemberKind.Member -> + | SynMemberKind.ClassConstructor + | SynMemberKind.Constructor + | SynMemberKind.Member -> let mdef = mdef.With(customAttrs= mkILCustomAttrs ilAttrs) [mdef], [], [] - | MemberKind.PropertyGetSet -> error(Error(FSComp.SR.ilUnexpectedGetSetAnnotation(), m)) - | MemberKind.PropertySet | MemberKind.PropertyGet -> + | SynMemberKind.PropertyGetSet -> error(Error(FSComp.SR.ilUnexpectedGetSetAnnotation(), m)) + | SynMemberKind.PropertySet | SynMemberKind.PropertyGet -> let v = vref.Deref let vtyp = ReturnTypeOfPropertyVal g v if CompileAsEvent g attribs then - + let edef = GenEventForProperty cenv eenvForMeth mspec v ilAttrs m vtyp [], [], [edef] else @@ -7285,7 +7401,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = // // Note you only have to implement 'System.IComparable' to customize structural comparison AND equality on F# types // See also FinalTypeDefinitionChecksAtEndOfInferenceScope in tc.fs - // + // // Generate an Equals method implemented via IComparable if the type EXPLICITLY implements IComparable. // HOWEVER, if the type doesn't override Object.Equals already. let augmentOverrideMethodDefs = @@ -7343,7 +7459,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = yield methodImplGenerator (ilThisTy, memberMethodTypars) | _ -> () ] - + // Try to add a DefaultMemberAttribute for the 'Item' property let defaultMemberAttrs = // REVIEW: this should be based off tcaug_adhoc_list, which is in declaration order @@ -7354,8 +7470,8 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = | None -> None | Some memberInfo -> match name, memberInfo.MemberFlags.MemberKind with - | ("Item" | "op_IndexedLookup"), (MemberKind.PropertyGet | MemberKind.PropertySet) when not (isNil (ArgInfosOfPropertyVal g vref.Deref)) -> - Some( mkILCustomAttribute g.ilg (g.FindSysILTypeRef "System.Reflection.DefaultMemberAttribute", [g.ilg.typ_String], [ILAttribElem.String(Some name)], []) ) + | ("Item" | "op_IndexedLookup"), (SynMemberKind.PropertyGet | SynMemberKind.PropertySet) when not (isNil (ArgInfosOfPropertyVal g vref.Deref)) -> + Some( mkILCustomAttribute (g.FindSysILTypeRef "System.Reflection.DefaultMemberAttribute", [g.ilg.typ_String], [ILAttribElem.String(Some name)], []) ) | _ -> None) |> Option.toList @@ -7370,7 +7486,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = let permissionSets = CreatePermissionSets cenv eenv securityAttrs let secDecls = if List.isEmpty securityAttrs then emptyILSecurityDecls else mkILSecurityDecls permissionSets - + let ilDebugDisplayAttributes = [ yield! GenAttrs cenv eenv debugDisplayAttrs if generateDebugDisplayAttribute then @@ -7407,7 +7523,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = tycon.AllFieldsArray |> Array.forall (fun f -> f.IsStatic) isEmptyStruct && cenv.opts.workAroundReflectionEmitBugs && not tycon.TyparsNoRange.IsEmpty - + // Compute a bunch of useful things for each field let isCLIMutable = (TryFindFSharpBoolAttribute g g.attrib_CLIMutableAttribute tycon.Attribs = Some true) let fieldSummaries = @@ -7428,9 +7544,9 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = IsHiddenRecdField eenv.sigToImplRemapInfo (tcref.MakeNestedRecdFieldRef fspec)) let ilType = GenType cenv.amap m eenvinner.tyenv fspec.FormalType let ilFieldName = ComputeFieldName tycon fspec - + yield (useGenuineField, ilFieldName, fspec.IsMutable, fspec.IsStatic, fspec.PropertyAttribs, ilType, isPropHidden, fspec) ] - + // Generate the IL fields let ilFieldDefs = [ for (useGenuineField, ilFieldName, isFSharpMutable, isStatic, _, ilPropType, isPropHidden, fspec) in fieldSummaries do @@ -7452,9 +7568,9 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = if useGenuineField then yield! fspec.PropertyAttribs yield! fspec.FieldAttribs ] - + let ilNotSerialized = HasFSharpAttributeOpt g g.attrib_NonSerializedAttribute attribs - + let fattribs = attribs // Do not generate FieldOffset as a true CLI custom attribute, since it is implied by other corresponding CLI metadata @@ -7468,7 +7584,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = // AND the field is not mutable (because we can take the address of a mutable field). // Otherwise fields are always accessed via their property getters/setters let isFieldHidden = isPropHidden || (not useGenuineField && not isFSharpMutable) - + let extraAttribs = match tyconRepr with | TRecdRepr _ when not useGenuineField -> [ g.DebuggerBrowsableNeverAttribute ] // hide fields in records in debug display @@ -7476,7 +7592,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = let access = ComputeMemberAccess isFieldHidden let literalValue = Option.map (GenFieldInit m) fspec.LiteralValue - + let fdef = ILFieldDef(name = ilFieldName, fieldType = ilPropType, @@ -7496,7 +7612,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = if requiresExtraField then yield mkILInstanceField("__dummy", g.ilg.typ_Int32, None, ILMemberAccess.Assembly) ] - + // Generate property definitions for the fields compiled as properties let ilPropertyDefsForFields = [ for (i, (useGenuineField, _, isFSharpMutable, isStatic, propAttribs, ilPropType, _, fspec)) in Seq.indexed fieldSummaries do @@ -7515,7 +7631,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = init= None, args= [], customAttrs = mkILCustomAttrs ilFieldAttrs) ] - + let methodDefs = [ // Generate property getter methods for those fields that have properties for (useGenuineField, ilFieldName, _, isStatic, _, ilPropType, isPropHidden, fspec) in fieldSummaries do @@ -7620,7 +7736,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = // Records that are value types do not create a default constructor with CLIMutable or ComVisible if not isStructRecord && (isCLIMutable || (TryFindFSharpBoolAttribute g g.attrib_ComVisibleAttribute tycon.Attribs = Some true)) then yield mkILSimpleStorageCtor(None, Some g.ilg.typ_Object.TypeSpec, ilThisTy, [], [], reprAccess) - + if not (tycon.HasMember g "ToString" []) then yield! GenToStringMethod cenv eenv ilThisTy m | TFSharpObjectRepr r when tycon.IsFSharpDelegateTycon -> @@ -7643,12 +7759,12 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = | TUnionRepr _ when not (tycon.HasMember g "ToString" []) -> yield! GenToStringMethod cenv eenv ilThisTy m | _ -> () ] - + let ilMethods = methodDefs @ augmentOverrideMethodDefs @ abstractMethodDefs let ilProperties = mkILProperties (ilPropertyDefsForFields @ abstractPropDefs) let ilEvents = mkILEvents abstractEventDefs let ilFields = mkILFields ilFieldDefs - + let tdef, tdefDiscards = let isSerializable = (TryFindFSharpBoolAttribute g g.attrib_AutoSerializableAttribute tycon.Attribs <> Some false) @@ -7661,7 +7777,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = | TRecdRepr _ | TFSharpObjectRepr _ as tyconRepr -> let super = superOfTycon g tycon let ilBaseTy = GenType cenv.amap m eenvinner.tyenv super - + // Build a basic type definition let isObjectType = (match tyconRepr with TFSharpObjectRepr _ -> true | _ -> false) let ilAttrs = @@ -7671,7 +7787,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = then SourceConstructFlags.ObjectType elif hiddenRepr then SourceConstructFlags.RecordType ||| SourceConstructFlags.NonPublicRepresentation else SourceConstructFlags.RecordType)) ] - + // For now, generic types always use ILTypeInit.BeforeField. This is because // there appear to be some cases where ILTypeInit.OnAny causes problems for // the .NET CLR when used in conjunction with generic classes in cross-DLL @@ -7731,7 +7847,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = ILTypeDefLayout.Auto, ILDefaultPInvokeEncoding.Ansi | _ when (match ilTypeDefKind with ILTypeDefKind.ValueType -> true | _ -> false) -> - + // All structs are sequential by default // Structs with no instance fields get size 1, pack 0 if tycon.AllFieldsArray |> Array.exists (fun f -> not f.IsStatic) || @@ -7742,28 +7858,28 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = ILTypeDefLayout.Sequential { Size=None; Pack=None }, ILDefaultPInvokeEncoding.Ansi else ILTypeDefLayout.Sequential { Size=Some 1; Pack=Some 0us }, ILDefaultPInvokeEncoding.Ansi - + | _ -> ILTypeDefLayout.Auto, ILDefaultPInvokeEncoding.Ansi - + // if the type's layout is Explicit, ensure that each field has a valid offset let validateExplicit (fdef: ILFieldDef) = match fdef.Offset with // Remove field suffix "@" for pretty printing | None -> errorR(Error(FSComp.SR.ilFieldDoesNotHaveValidOffsetForStructureLayout(tdef.Name, fdef.Name.Replace("@", "")), (trimRangeToLine m))) | _ -> () - + // if the type's layout is Sequential, no offsets should be applied let validateSequential (fdef: ILFieldDef) = match fdef.Offset with | Some _ -> errorR(Error(FSComp.SR.ilFieldHasOffsetForSequentialLayout(), (trimRangeToLine m))) | _ -> () - + match tdLayout with | ILTypeDefLayout.Explicit(_) -> List.iter validateExplicit ilFieldDefs | ILTypeDefLayout.Sequential(_) -> List.iter validateSequential ilFieldDefs | _ -> () - + let tdef = tdef.WithKind(ilTypeDefKind).WithLayout(tdLayout).WithEncoding(tdEncoding) tdef, None @@ -7855,7 +7971,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = GenForceWholeFileInitializationAsPartOfCCtor cenv mgbuf lazyInitInfo tref m - + /// Generate the type for an F# exception declaration. and GenExnDef cenv mgbuf eenv m (exnc: Tycon) = let g = cenv.g @@ -7944,7 +8060,7 @@ and GenExnDef cenv mgbuf eenv m (exnc: Tycon) = HasSecurity=true } [ilCtorDefForSerialization; getObjectDataMethodForSerialization] *) -//#endif +//#endif | _ -> [] let ilTypeName = tref.Name @@ -8008,7 +8124,8 @@ let GetEmptyIlxGenEnv (g: TcGlobals) ccu = innerVals = [] sigToImplRemapInfo = [] (* "module remap info" *) withinSEH = false - isInLoop = false } + isInLoop = false + initLocals = true } type IlxGenResults = { ilTypeDefs: ILTypeDef list @@ -8049,7 +8166,7 @@ let GenerateCode (cenv, anonTypeTable, eenv, TypedAssemblyAfterOptimization impl reflectedDefinitions |> List.choose (fun ((methName, v), e) -> try let mbaseR, astExpr = QuotationTranslator.ConvReflectedDefinition qscope methName v e - + Some(mbaseR, astExpr) with | QuotationTranslator.InvalidQuotedTerm e -> warning e; None) @@ -8146,13 +8263,13 @@ let LookupGeneratedValue (amap: ImportMap) (ctxt: ExecutionContext) eenv (v: Val | Null -> Some (null, objTyp()) - | Local _ -> None + | Local _ -> None | Method _ -> None | Arg _ -> None | Env _ -> None with e -> -#if DEBUG +#if DEBUG printf "ilxGen.LookupGeneratedValue for v=%s caught exception:\n%A\n\n" v.LogicalName e #endif None @@ -8176,7 +8293,7 @@ let SetGeneratedValue (ctxt: ExecutionContext) (g: TcGlobals) eenv isForced (v: | _ -> () with e -> -#if DEBUG +#if DEBUG printf "ilxGen.SetGeneratedValue for v=%s caught exception:\n%A\n\n" v.LogicalName e #endif () @@ -8192,7 +8309,7 @@ let ClearGeneratedValue (ctxt: ExecutionContext) (g: TcGlobals) eenv (v: Val) = | _ -> () with e -> -#if DEBUG +#if DEBUG printf "ilxGen.ClearGeneratedValue for v=%s caught exception:\n%A\n\n" v.LogicalName e #endif () @@ -8208,16 +8325,16 @@ type IlxAssemblyGenerator(amap: ImportMap, tcGlobals: TcGlobals, tcVal: Constrai let casApplied = new Dictionary() /// Register a set of referenced assemblies with the ILX code generator - member __.AddExternalCcus ccus = + member _.AddExternalCcus ccus = ilxGenEnv <- AddExternalCcusToIlxGenEnv amap tcGlobals ilxGenEnv ccus /// 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, typedImplFiles) = + 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) = + member _.GenerateCode (codeGenOpts, typedAssembly, assemAttribs, moduleAttribs) = let cenv: cenv = { g=tcGlobals tcVal = tcVal @@ -8233,11 +8350,10 @@ type IlxAssemblyGenerator(amap: ImportMap, tcGlobals: TcGlobals, tcVal: Constrai GenerateCode (cenv, anonTypeTable, ilxGenEnv, typedAssembly, assemAttribs, moduleAttribs) /// Invert the compilation of the given value and clear the storage of the value - member __.ClearGeneratedValue (ctxt, v) = ClearGeneratedValue ctxt tcGlobals ilxGenEnv v + member _.ClearGeneratedValue (ctxt, v) = ClearGeneratedValue ctxt tcGlobals ilxGenEnv v /// Invert the compilation of the given value and set the storage of the value, even if it is immutable - member __.ForceSetGeneratedValue (ctxt, v, value: obj) = SetGeneratedValue ctxt tcGlobals ilxGenEnv true v value + member _.ForceSetGeneratedValue (ctxt, v, value: obj) = SetGeneratedValue ctxt tcGlobals ilxGenEnv true v value /// Invert the compilation of the given value and return its current dynamic value and its compiled System.Type - member __.LookupGeneratedValue (ctxt, v) = LookupGeneratedValue amap ctxt ilxGenEnv v - + member _.LookupGeneratedValue (ctxt, v) = LookupGeneratedValue amap ctxt ilxGenEnv v diff --git a/src/fsharp/IlxGen.fsi b/src/fsharp/IlxGen.fsi index 8bd6bf7e348..7e978ce7c52 100644 --- a/src/fsharp/IlxGen.fsi +++ b/src/fsharp/IlxGen.fsi @@ -5,7 +5,6 @@ module internal FSharp.Compiler.IlxGen open System open System.IO open System.Reflection -open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.TypedTree open FSharp.Compiler.TcGlobals diff --git a/src/fsharp/InfoReader.fs b/src/fsharp/InfoReader.fs index 18345b408d6..e04b5fb11a3 100644 --- a/src/fsharp/InfoReader.fs +++ b/src/fsharp/InfoReader.fs @@ -4,23 +4,22 @@ /// Select members from a type by name, searching the type hierarchy if needed module internal FSharp.Compiler.InfoReader -open System -open System.Collections.Generic open System.Collections.Concurrent - +open Internal.Utilities.Library open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.AttributeChecking open FSharp.Compiler.ErrorLogger +open FSharp.Compiler.Features open FSharp.Compiler.Infos -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Features +open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypeRelations /// Use the given function to select some of the member values from the members of an F# type @@ -125,11 +124,11 @@ type PropertyCollector(g, amap, m, ty, optFilter, ad) = member x.Collect(membInfo: ValMemberInfo, vref: ValRef) = match membInfo.MemberFlags.MemberKind with - | MemberKind.PropertyGet -> + | SynMemberKind.PropertyGet -> let pinfo = FSProp(g, ty, Some vref, None) if checkFilter optFilter vref.PropertyName && IsPropInfoAccessible g amap m ad pinfo then add pinfo - | MemberKind.PropertySet -> + | SynMemberKind.PropertySet -> let pinfo = FSProp(g, ty, None, Some vref) if checkFilter optFilter vref.PropertyName && IsPropInfoAccessible g amap m ad pinfo then add pinfo @@ -617,7 +616,7 @@ let rec GetIntrinsicConstructorInfosOfTypeAux (infoReader: InfoReader) m origTy |> NameMultiMap.find ".ctor" |> List.choose(fun vref -> match vref.MemberInfo with - | Some membInfo when (membInfo.MemberFlags.MemberKind = MemberKind.Constructor) -> Some vref + | Some membInfo when (membInfo.MemberFlags.MemberKind = SynMemberKind.Constructor) -> Some vref | _ -> None) |> List.map (fun x -> FSMeth(g, origTy, x, None)) ) @@ -927,3 +926,147 @@ let PropTypOfEventInfo (infoReader: InfoReader) m ad (einfo: EventInfo) = let delTy = einfo.GetDelegateType(amap, m) let argsTy = ArgsTypOfEventInfo infoReader m ad einfo mkIEventType g delTy argsTy + +/// Try to find the name of the metadata file for this external definition +let TryFindMetadataInfoOfExternalEntityRef (infoReader: InfoReader) m eref = + let g = infoReader.g + match eref with + | ERefLocal _ -> None + | ERefNonLocal nlref -> + // Generalize to get a formal signature + let formalTypars = eref.Typars m + let formalTypeInst = generalizeTypars formalTypars + let ty = TType_app(eref, formalTypeInst) + if isILAppTy g ty then + let formalTypeInfo = ILTypeInfo.FromType g ty + Some(nlref.Ccu.FileName, formalTypars, formalTypeInfo) + else None + +/// Try to find the xml doc associated with the assembly name and xml doc signature +let TryFindXmlDocByAssemblyNameAndSig (infoReader: InfoReader) assemblyName xmlDocSig = + infoReader.amap.assemblyLoader.TryFindXmlDocumentationInfo(assemblyName) + |> Option.bind (fun xmlDocInfo -> + xmlDocInfo.TryGetXmlDocBySig(xmlDocSig) + ) + +let private libFileOfEntityRef x = + match x with + | ERefLocal _ -> None + | ERefNonLocal nlref -> nlref.Ccu.FileName + +let GetXmlDocSigOfEntityRef infoReader m (eref: EntityRef) = + if eref.IsILTycon then + match TryFindMetadataInfoOfExternalEntityRef infoReader m eref with + | None -> None + | Some (ccuFileName, _, formalTypeInfo) -> Some(ccuFileName, "T:"+formalTypeInfo.ILTypeRef.FullName) + else + let ccuFileName = libFileOfEntityRef eref + let m = eref.Deref + if m.XmlDocSig = "" then + m.XmlDocSig <- XmlDocSigOfEntity eref + Some (ccuFileName, m.XmlDocSig) + +let GetXmlDocSigOfScopedValRef g (tcref: TyconRef) (vref: ValRef) = + let ccuFileName = libFileOfEntityRef tcref + let v = vref.Deref + if v.XmlDocSig = "" && v.HasDeclaringEntity then + let ap = buildAccessPath vref.TopValDeclaringEntity.CompilationPathOpt + let path = + if vref.TopValDeclaringEntity.IsModule then + let sep = if ap.Length > 0 then "." else "" + ap + sep + vref.TopValDeclaringEntity.CompiledName + else + ap + v.XmlDocSig <- XmlDocSigOfVal g false path v + Some (ccuFileName, v.XmlDocSig) + +let GetXmlDocSigOfRecdFieldRef (rfref: RecdFieldRef) = + let tcref = rfref.TyconRef + let ccuFileName = libFileOfEntityRef tcref + if rfref.RecdField.XmlDocSig = "" then + rfref.RecdField.XmlDocSig <- XmlDocSigOfProperty [tcref.CompiledRepresentationForNamedType.FullName; rfref.RecdField.Name] + Some (ccuFileName, rfref.RecdField.XmlDocSig) + +let GetXmlDocSigOfUnionCaseRef (ucref: UnionCaseRef) = + let tcref = ucref.TyconRef + let ccuFileName = libFileOfEntityRef tcref + if ucref.UnionCase.XmlDocSig = "" then + ucref.UnionCase.XmlDocSig <- XmlDocSigOfUnionCase [tcref.CompiledRepresentationForNamedType.FullName; ucref.CaseName] + Some (ccuFileName, ucref.UnionCase.XmlDocSig) + +let GetXmlDocSigOfMethInfo (infoReader: InfoReader) m (minfo: MethInfo) = + let amap = infoReader.amap + match minfo with + | FSMeth (g, _, vref, _) -> + GetXmlDocSigOfScopedValRef g minfo.DeclaringTyconRef vref + | ILMeth (g, ilminfo, _) -> + let actualTypeName = ilminfo.DeclaringTyconRef.CompiledRepresentationForNamedType.FullName + let fmtps = ilminfo.FormalMethodTypars + let genArity = if fmtps.Length=0 then "" else sprintf "``%d" fmtps.Length + + match TryFindMetadataInfoOfExternalEntityRef infoReader m ilminfo.DeclaringTyconRef with + | None -> None + | Some (ccuFileName, formalTypars, formalTypeInfo) -> + let filminfo = ILMethInfo(g, formalTypeInfo.ToType, None, ilminfo.RawMetadata, fmtps) + let args = + match ilminfo.IsILExtensionMethod with + | true -> filminfo.GetRawArgTypes(amap, m, minfo.FormalMethodInst) + | false -> filminfo.GetParamTypes(amap, m, minfo.FormalMethodInst) + + // http://msdn.microsoft.com/en-us/library/fsbx0t7x.aspx + // If the name of the item itself has periods, they are replaced by the hash-sign ('#'). + // It is assumed that no item has a hash-sign directly in its name. For example, the fully + // qualified name of the String constructor would be "System.String.#ctor". + let normalizedName = ilminfo.ILName.Replace(".", "#") + + Some (ccuFileName, "M:"+actualTypeName+"."+normalizedName+genArity+XmlDocArgsEnc g (formalTypars, fmtps) args) + | DefaultStructCtor _ -> None +#if !NO_EXTENSIONTYPING + | ProvidedMeth _ -> None +#endif + +let GetXmlDocSigOfValRef g (vref: ValRef) = + if not vref.IsLocalRef then + let ccuFileName = vref.nlr.Ccu.FileName + let v = vref.Deref + if v.XmlDocSig = "" && v.HasDeclaringEntity then + v.XmlDocSig <- XmlDocSigOfVal g false vref.TopValDeclaringEntity.CompiledRepresentationForNamedType.Name v + Some (ccuFileName, v.XmlDocSig) + else + match vref.ApparentEnclosingEntity with + | Parent tcref -> + GetXmlDocSigOfScopedValRef g tcref vref + | _ -> + None + +let GetXmlDocSigOfProp infoReader m (pinfo: PropInfo) = + let g = pinfo.TcGlobals + match pinfo with +#if !NO_EXTENSIONTYPING + | ProvidedProp _ -> None // No signature is possible. If an xml comment existed it would have been returned by PropInfo.XmlDoc in infos.fs +#endif + | FSProp _ as fspinfo -> + match fspinfo.ArbitraryValRef with + | None -> None + | Some vref -> GetXmlDocSigOfScopedValRef g pinfo.DeclaringTyconRef vref + | ILProp(ILPropInfo(_, pdef)) -> + match TryFindMetadataInfoOfExternalEntityRef infoReader m pinfo.DeclaringTyconRef with + | Some (ccuFileName, formalTypars, formalTypeInfo) -> + let filpinfo = ILPropInfo(formalTypeInfo, pdef) + Some (ccuFileName, "P:"+formalTypeInfo.ILTypeRef.FullName+"."+pdef.Name+XmlDocArgsEnc g (formalTypars, []) (filpinfo.GetParamTypes(infoReader.amap, m))) + | _ -> None + +let GetXmlDocSigOfEvent infoReader m (einfo: EventInfo) = + match einfo with + | ILEvent _ -> + match TryFindMetadataInfoOfExternalEntityRef infoReader m einfo.DeclaringTyconRef with + | Some (ccuFileName, _, formalTypeInfo) -> + Some(ccuFileName, "E:"+formalTypeInfo.ILTypeRef.FullName+"."+einfo.EventName) + | _ -> None + | _ -> None + +let GetXmlDocSigOfILFieldInfo infoReader m (finfo: ILFieldInfo) = + match TryFindMetadataInfoOfExternalEntityRef infoReader m finfo.DeclaringTyconRef with + | Some (ccuFileName, _, formalTypeInfo) -> + Some(ccuFileName, "F:"+formalTypeInfo.ILTypeRef.FullName+"."+finfo.FieldName) + | _ -> None diff --git a/src/fsharp/InfoReader.fsi b/src/fsharp/InfoReader.fsi index 5cfe9d95b4e..d8606880cec 100644 --- a/src/fsharp/InfoReader.fsi +++ b/src/fsharp/InfoReader.fsi @@ -4,14 +4,15 @@ /// Select members from a type by name, searching the type hierarchy if needed module internal FSharp.Compiler.InfoReader +open Internal.Utilities.Library open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.Import open FSharp.Compiler.Infos -open FSharp.Compiler.Range -open FSharp.Compiler.TypedTree open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Xml +open FSharp.Compiler.TypedTree /// Try to select an F# value when querying members, and if so return a MethInfo that wraps the F# value. val TrySelectMemberVal: g:TcGlobals -> optFilter:string option -> ty:TType -> pri:ExtensionMethodPriority option -> _membInfo:'a -> vref:ValRef -> MethInfo option @@ -153,3 +154,27 @@ val IsStandardEventInfo: infoReader:InfoReader -> m:range -> ad:AccessorDomain - val ArgsTypOfEventInfo: infoReader:InfoReader -> m:range -> ad:AccessorDomain -> einfo:EventInfo -> TType val PropTypOfEventInfo: infoReader:InfoReader -> m:range -> ad:AccessorDomain -> einfo:EventInfo -> TType + +/// Try to find the name of the metadata file for this external definition +val TryFindMetadataInfoOfExternalEntityRef: infoReader:InfoReader -> m:range -> eref:EntityRef -> (string option * Typars * ILTypeInfo) option + +/// Try to find the xml doc associated with the assembly name and metadata key +val TryFindXmlDocByAssemblyNameAndSig: infoReader:InfoReader -> assemblyName: string -> xmlDocSig: string -> XmlDoc option + +val GetXmlDocSigOfEntityRef: infoReader:InfoReader -> m:range -> eref:EntityRef -> (string option * string) option + +val GetXmlDocSigOfScopedValRef: TcGlobals -> tcref:TyconRef -> vref:ValRef -> (string option * string) option + +val GetXmlDocSigOfRecdFieldRef: rfref:RecdFieldRef -> (string option * string) option + +val GetXmlDocSigOfUnionCaseRef: ucref:UnionCaseRef -> (string option * string) option + +val GetXmlDocSigOfMethInfo: infoReader: InfoReader -> m:range -> minfo:MethInfo -> (string option * string) option + +val GetXmlDocSigOfValRef: TcGlobals -> vref: ValRef -> (string option * string) option + +val GetXmlDocSigOfProp: infoReader:InfoReader -> m:range -> pinfo:PropInfo -> (string option * string) option + +val GetXmlDocSigOfEvent: infoReader:InfoReader -> m:range -> einfo:EventInfo -> (string option * string) option + +val GetXmlDocSigOfILFieldInfo: infoReader:InfoReader -> m:range -> finfo:ILFieldInfo -> (string option * string) option \ No newline at end of file diff --git a/src/fsharp/InnerLambdasToTopLevelFuncs.fs b/src/fsharp/InnerLambdasToTopLevelFuncs.fs index baa5e13240e..7721d0ccbac 100644 --- a/src/fsharp/InnerLambdasToTopLevelFuncs.fs +++ b/src/fsharp/InnerLambdasToTopLevelFuncs.fs @@ -2,22 +2,23 @@ module internal FSharp.Compiler.InnerLambdasToTopLevelFuncs -open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Collections +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.CompilerGlobalState -open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Detuple.GlobalUsageAnalysis -open FSharp.Compiler.Layout -open FSharp.Compiler.Lib -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.ErrorLogger +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Layout +open FSharp.Compiler.Text.LayoutRender +open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TypedTreeOps.DebugPrint open FSharp.Compiler.TcGlobals -open FSharp.Compiler.XmlDoc let verboseTLR = false @@ -335,7 +336,7 @@ type ReqdItemsForDefn = { reqdTypars: Zset reqdItems: Zset - m: Range.range + m: range } member env.ReqdSubEnvs = [ for x in env.reqdItems do match x with | ReqdSubEnv f -> yield f | ReqdVal _ -> () ] @@ -674,7 +675,7 @@ type PackedReqdItems = // step3: FlatEnvPacks //------------------------------------------------------------------------- -exception AbortTLR of Range.range +exception AbortTLR of range /// A naive packing of environments. /// Chooses to pass all env values as explicit args (no tupling). @@ -765,7 +766,7 @@ let FlatEnvPacks g fclassM topValS declist (reqdItemsMap: Zmap List.map (fun (subv, subaenv) -> mkBind NoDebugPointAtInvisibleBinding subaenv (aenvExprFor subv)) + vaenvs |> List.map (fun (subv, subaenv) -> mkBind DebugPointAtBinding.NoneAtInvisible subaenv (aenvExprFor subv)) List.map unpackCarrier (Zmap.toList cmap) @ List.collect unpackSubenv env.ReqdSubEnvs diff --git a/src/fsharp/InternalCollections.fsi b/src/fsharp/InternalCollections.fsi index 402b4de20c8..3cd62bae5fa 100755 --- a/src/fsharp/InternalCollections.fsi +++ b/src/fsharp/InternalCollections.fsi @@ -2,12 +2,12 @@ namespace Internal.Utilities.Collections - /// Simple aging lookup table. When a member is accessed it's - /// moved to the top of the list and when there are too many elements - /// the least-recently-accessed element falls of the end. - /// - /// - areSimilar: Keep at most once association for two similar keys (as given by areSimilar) - type internal AgedLookup<'Token, 'Key, 'Value when 'Value : not struct> = +/// Simple aging lookup table. When a member is accessed it's +/// moved to the top of the list and when there are too many elements +/// the least-recently-accessed element falls of the end. +/// +/// - areSimilar: Keep at most once association for two similar keys (as given by areSimilar) +type internal AgedLookup<'Token, 'Key, 'Value when 'Value : not struct> = new : keepStrongly:int * areSimilar:('Key * 'Key -> bool) * ?requiredToKeep:('Value -> bool) @@ -39,16 +39,16 @@ namespace Internal.Utilities.Collections /// Resize member Resize : 'Token * newKeepStrongly: int * ?newKeepMax : int -> unit - /// Simple priority caching for a small number of key/value associations. - /// This cache may age-out results that have been Set by the caller. - /// Because of this, the caller must be able to tolerate values - /// that aren't what was originally passed to the Set function. - /// - /// Concurrency: This collection is thread-safe, though concurrent use may result in different - /// threads seeing different live sets of cached items. - /// - /// - areSimilar: Keep at most once association for two similar keys (as given by areSimilar) - type internal MruCache<'Token, 'Key,'Value when 'Value : not struct> = +/// Simple priority caching for a small number of key/value associations. +/// This cache may age-out results that have been Set by the caller. +/// Because of this, the caller must be able to tolerate values +/// that aren't what was originally passed to the Set function. +/// +/// Concurrency: This collection is thread-safe, though concurrent use may result in different +/// threads seeing different live sets of cached items. +/// +/// - areSimilar: Keep at most once association for two similar keys (as given by areSimilar) +type internal MruCache<'Token, 'Key,'Value when 'Value : not struct> = new : keepStrongly:int * areSame:('Key * 'Key -> bool) * ?isStillValid:('Key * 'Value -> bool) diff --git a/src/fsharp/LanguageFeatures.fs b/src/fsharp/LanguageFeatures.fs index 96c4f6baa5c..d3d52796c9c 100644 --- a/src/fsharp/LanguageFeatures.fs +++ b/src/fsharp/LanguageFeatures.fs @@ -36,6 +36,10 @@ type LanguageFeature = | StringInterpolation | OverloadsForCustomOperations | ExpandedMeasurables + | StructActivePattern + | PrintfBinaryFormat + | UseBindingValueDiscard + | NonVariablePatternsToRightOfAsPatterns /// LanguageVersion management type LanguageVersion (specifiedVersionAsString) = @@ -77,6 +81,10 @@ type LanguageVersion (specifiedVersionAsString) = LanguageFeature.OverloadsForCustomOperations, previewVersion LanguageFeature.ExpandedMeasurables, previewVersion LanguageFeature.FromEndSlicing, previewVersion + LanguageFeature.StructActivePattern, previewVersion + LanguageFeature.PrintfBinaryFormat, previewVersion + LanguageFeature.UseBindingValueDiscard, previewVersion + LanguageFeature.NonVariablePatternsToRightOfAsPatterns, previewVersion ] let specified = @@ -150,6 +158,10 @@ type LanguageVersion (specifiedVersionAsString) = | LanguageFeature.StringInterpolation -> FSComp.SR.featureStringInterpolation() | LanguageFeature.OverloadsForCustomOperations -> FSComp.SR.featureOverloadsForCustomOperations() | LanguageFeature.ExpandedMeasurables -> FSComp.SR.featureExpandedMeasurables() + | LanguageFeature.StructActivePattern -> FSComp.SR.featureStructActivePattern() + | LanguageFeature.PrintfBinaryFormat -> FSComp.SR.featurePrintfBinaryFormat() + | LanguageFeature.UseBindingValueDiscard -> FSComp.SR.featureDiscardUseValue() + | LanguageFeature.NonVariablePatternsToRightOfAsPatterns -> FSComp.SR.featureNonVariablePatternsToRightOfAsPatterns() /// Get a version string associated with the given feature. member _.GetFeatureVersionString feature = diff --git a/src/fsharp/LanguageFeatures.fsi b/src/fsharp/LanguageFeatures.fsi index b914016d9a5..8ca05f2cede 100644 --- a/src/fsharp/LanguageFeatures.fsi +++ b/src/fsharp/LanguageFeatures.fsi @@ -24,6 +24,10 @@ type LanguageFeature = | StringInterpolation | OverloadsForCustomOperations | ExpandedMeasurables + | StructActivePattern + | PrintfBinaryFormat + | UseBindingValueDiscard + | NonVariablePatternsToRightOfAsPatterns /// LanguageVersion management type LanguageVersion = diff --git a/src/fsharp/LegacyHostedCompilerForTesting.fs b/src/fsharp/LegacyHostedCompilerForTesting.fs index 692704a1650..480eb2612d1 100644 --- a/src/fsharp/LegacyHostedCompilerForTesting.fs +++ b/src/fsharp/LegacyHostedCompilerForTesting.fs @@ -3,17 +3,18 @@ // This component is used by the 'fsharpqa' tests for faster in-memory compilation. It should be removed and the // proper compiler service API used instead. -namespace Legacy.FSharp.Compiler.Hosted +namespace FSharp.Compiler.CodeAnalysis.Hosted open System open System.IO open System.Text.RegularExpressions +open FSharp.Compiler.Diagnostics open FSharp.Compiler.Driver open FSharp.Compiler.ErrorLogger open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerDiagnostics open FSharp.Compiler.AbstractIL.ILBinaryReader -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Library /// build issue location type internal Location = @@ -90,16 +91,16 @@ type internal FscCompiler(legacyReferenceResolver) = /// converts short and long issue types to the same CompilationIssue representation let convert issue : CompilationIssue = match issue with - | Diagnostic.Short(isError, text) -> + | Diagnostic.Short(severity, text) -> { Location = emptyLocation Code = "" Subcategory = "" File = "" Text = text - Type = if isError then CompilationIssueType.Error else CompilationIssueType.Warning + Type = if (severity = FSharpDiagnosticSeverity.Error) then CompilationIssueType.Error else CompilationIssueType.Warning } - | Diagnostic.Long(isError, details) -> + | Diagnostic.Long(severity, details) -> let loc, file = match details.Location with | Some l when not l.IsEmpty -> @@ -116,7 +117,7 @@ type internal FscCompiler(legacyReferenceResolver) = Subcategory = details.Canonical.Subcategory File = file Text = details.Message - Type = if isError then CompilationIssueType.Error else CompilationIssueType.Warning + Type = if (severity = FSharpDiagnosticSeverity.Error) then CompilationIssueType.Error else CompilationIssueType.Warning } /// test if --test:ErrorRanges flag is set diff --git a/src/fsharp/LegacyMSBuildReferenceResolver.fs b/src/fsharp/LegacyMSBuildReferenceResolver.fs index b7bb5e505ea..ab60534c718 100644 --- a/src/fsharp/LegacyMSBuildReferenceResolver.fs +++ b/src/fsharp/LegacyMSBuildReferenceResolver.fs @@ -1,16 +1,15 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module LegacyMSBuildReferenceResolver +module FSharp.Compiler.CodeAnalysis.LegacyMSBuildReferenceResolver open System open System.IO open System.Reflection - open FSharp.Compiler.AbstractIL.Internal.Library - open FSharp.Compiler.ReferenceResolver + open Internal.Utilities.Library open Microsoft.Build.Tasks open Microsoft.Build.Utilities open Microsoft.Build.Framework - open FSharp.Compiler + open FSharp.Compiler.IO // Reflection wrapper for properties type System.Object with @@ -27,13 +26,11 @@ module LegacyMSBuildReferenceResolver | s -> s PF + @"\Reference Assemblies\Microsoft\Framework\.NETFramework" - /// When targeting .NET 2.0-3.5 on Windows, we expand the {WindowsFramework} and {ReferenceAssemblies} paths manually let internal ReplaceVariablesForLegacyFxOnWindows(dirs: string list) = let windowsFramework = Environment.GetEnvironmentVariable("windir")+ @"\Microsoft.NET\Framework" let referenceAssemblies = DotNetFrameworkReferenceAssembliesRootDirectory dirs |> List.map(fun d -> d.Replace("{WindowsFramework}",windowsFramework).Replace("{ReferenceAssemblies}",referenceAssemblies)) - // ATTENTION!: the following code needs to be updated every time we are switching to the new MSBuild version because new .NET framework version was released // 1. List of frameworks @@ -132,7 +129,7 @@ module LegacyMSBuildReferenceResolver let v = if dotNetVersion.StartsWith("v") then dotNetVersion.Substring(1) else dotNetVersion let frameworkName = new System.Runtime.Versioning.FrameworkName(".NETFramework", new Version(v)) match ToolLocationHelper.GetPathToReferenceAssemblies(frameworkName) |> Seq.tryHead with - | Some p -> if Directory.Exists(p) then true else false + | Some p -> if FileSystem.DirectoryExistsShim(p) then true else false | None -> false with _ -> false else false @@ -227,7 +224,7 @@ module LegacyMSBuildReferenceResolver + lineIfExists fusionName /// Perform assembly resolution by instantiating the ResolveAssembly task directly from the MSBuild SDK. - let ResolveCore(resolutionEnvironment: ResolutionEnvironment, + let ResolveCore(resolutionEnvironment: LegacyResolutionEnvironment, references:(string*(*baggage*)string)[], targetFrameworkVersion: string, targetFrameworkDirectories: string list, @@ -252,15 +249,15 @@ module LegacyMSBuildReferenceResolver let engine = { new IBuildEngine with - member __.BuildProjectFile(projectFileName, targetNames, globalProperties, targetOutputs) = true - member __.LogCustomEvent(e) = protect (fun () -> logMessage e.Message) - member __.LogErrorEvent(e) = protect (fun () -> logDiagnostic true e.Code e.Message) - member __.LogMessageEvent(e) = protect (fun () -> logMessage e.Message) - member __.LogWarningEvent(e) = protect (fun () -> logDiagnostic false e.Code e.Message) - member __.ColumnNumberOfTaskNode with get() = 1 - member __.LineNumberOfTaskNode with get() = 1 - member __.ContinueOnError with get() = true - member __.ProjectFileOfTaskNode with get() = "" } + member _.BuildProjectFile(projectFileName, targetNames, globalProperties, targetOutputs) = true + member _.LogCustomEvent(e) = protect (fun () -> logMessage e.Message) + member _.LogErrorEvent(e) = protect (fun () -> logDiagnostic true e.Code e.Message) + member _.LogMessageEvent(e) = protect (fun () -> logMessage e.Message) + member _.LogWarningEvent(e) = protect (fun () -> logDiagnostic false e.Code e.Message) + member _.ColumnNumberOfTaskNode with get() = 1 + member _.LineNumberOfTaskNode with get() = 1 + member _.ContinueOnError with get() = true + member _.ProjectFileOfTaskNode with get() = "" } // Derive the target framework directory if none was supplied. let targetFrameworkDirectories = @@ -281,9 +278,9 @@ module LegacyMSBuildReferenceResolver [| // When compiling scripts using fsc.exe, for some reason we have always historically put TargetFrameworkDirectory first // It is unclear why. This is the only place we look at the 'isdifference between ResolutionEnvironment.EditingOrCompilation and ResolutionEnvironment.EditingTime. match resolutionEnvironment with - | ResolutionEnvironment.EditingOrCompilation false -> yield "{TargetFrameworkDirectory}" - | ResolutionEnvironment.EditingOrCompilation true - | ResolutionEnvironment.CompilationAndEvaluation -> () + | LegacyResolutionEnvironment.EditingOrCompilation false -> yield "{TargetFrameworkDirectory}" + | LegacyResolutionEnvironment.EditingOrCompilation true + | LegacyResolutionEnvironment.CompilationAndEvaluation -> () // Quick-resolve straight to filename first if allowRawFileName then @@ -293,9 +290,9 @@ module LegacyMSBuildReferenceResolver yield implicitIncludeDir // Usually the project directory match resolutionEnvironment with - | ResolutionEnvironment.EditingOrCompilation true - | ResolutionEnvironment.CompilationAndEvaluation -> yield "{TargetFrameworkDirectory}" - | ResolutionEnvironment.EditingOrCompilation false -> () + | LegacyResolutionEnvironment.EditingOrCompilation true + | LegacyResolutionEnvironment.CompilationAndEvaluation -> yield "{TargetFrameworkDirectory}" + | LegacyResolutionEnvironment.EditingOrCompilation false -> () yield registry yield "{AssemblyFolders}" @@ -320,7 +317,7 @@ module LegacyMSBuildReferenceResolver #if ENABLE_MONO_SUPPORT // The properties TargetedRuntimeVersion and CopyLocalDependenciesWhenParentReferenceInGac // are not available on Mono. So we only set them if available (to avoid a compile-time dependency). - if not FSharp.Compiler.AbstractIL.Internal.Utils.runningOnMono then + if not runningOnMono then typeof.InvokeMember("TargetedRuntimeVersion",(BindingFlags.Instance ||| BindingFlags.SetProperty ||| BindingFlags.Public),null,rar,[| box targetedRuntimeVersionValue |]) |> ignore typeof.InvokeMember("CopyLocalDependenciesWhenParentReferenceInGac",(BindingFlags.Instance ||| BindingFlags.SetProperty ||| BindingFlags.Public),null,rar,[| box true |]) |> ignore #else @@ -331,7 +328,7 @@ module LegacyMSBuildReferenceResolver let succeeded = rar.Execute() if not succeeded then - raise ResolutionFailure + raise LegacyResolutionFailure let resolvedFiles = [| for p in rar.ResolvedFiles -> @@ -345,12 +342,12 @@ module LegacyMSBuildReferenceResolver resolvedFiles let getResolver () = - { new ReferenceResolver.Resolver with - member __.HighestInstalledNetFrameworkVersion() = HighestInstalledRefAssembliesOrDotNETFramework() - member __.DotNetFrameworkReferenceAssembliesRootDirectory = DotNetFrameworkReferenceAssembliesRootDirectory + { new ILegacyReferenceResolver with + member _.HighestInstalledNetFrameworkVersion() = HighestInstalledRefAssembliesOrDotNETFramework() + member _.DotNetFrameworkReferenceAssembliesRootDirectory = DotNetFrameworkReferenceAssembliesRootDirectory /// Perform the resolution on rooted and unrooted paths, and then combine the results. - member __.Resolve(resolutionEnvironment, references, targetFrameworkVersion, targetFrameworkDirectories, targetProcessorArchitecture, + member _.Resolve(resolutionEnvironment, references, targetFrameworkVersion, targetFrameworkDirectories, targetProcessorArchitecture, fsharpCoreDir, explicitIncludeDirs, implicitIncludeDir, logMessage, logDiagnostic) = // The {RawFileName} target is 'dangerous', in the sense that is uses Directory.GetCurrentDirectory() to resolve unrooted file paths. @@ -390,3 +387,4 @@ module LegacyMSBuildReferenceResolver // now unify the two sets of results Array.concat [| rootedResults; unrootedResults |] } + |> LegacyReferenceResolver diff --git a/src/fsharp/LegacyMSBuildReferenceResolver.fsi b/src/fsharp/LegacyMSBuildReferenceResolver.fsi index 1b4aa72858d..a3d17795009 100644 --- a/src/fsharp/LegacyMSBuildReferenceResolver.fsi +++ b/src/fsharp/LegacyMSBuildReferenceResolver.fsi @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module LegacyMSBuildReferenceResolver -open FSharp.Compiler +[] +module public FSharp.Compiler.CodeAnalysis.LegacyMSBuildReferenceResolver -val getResolver: unit -> ReferenceResolver.Resolver \ No newline at end of file +val getResolver: unit -> LegacyReferenceResolver \ No newline at end of file diff --git a/src/fsharp/LexFilter.fs b/src/fsharp/LexFilter.fs index 1f672f5fc4d..152ff46a1af 100644 --- a/src/fsharp/LexFilter.fs +++ b/src/fsharp/LexFilter.fs @@ -6,7 +6,7 @@ module internal FSharp.Compiler.LexFilter open Internal.Utilities.Text.Lexing open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features @@ -2227,6 +2227,13 @@ type LexFilterImpl (lightStatus: LightSyntaxStatus, compilingFsLib, lexer, lexbu and rulesForBothSoftWhiteAndHardWhite(tokenTup: TokenTup) = match tokenTup.Token with + | HASH_IDENT (ident) -> + let hashPos = new LexbufState(tokenTup.StartPos, tokenTup.StartPos.ShiftColumnBy(1), false) + let identPos = new LexbufState(tokenTup.StartPos.ShiftColumnBy(1), tokenTup.EndPos, false) + delayToken(new TokenTup(IDENT(ident), identPos, tokenTup.LastTokenPos)) + delayToken(new TokenTup(HASH, hashPos, tokenTup.LastTokenPos)) + true + // Insert HIGH_PRECEDENCE_PAREN_APP if needed | IDENT _ when (nextTokenIsAdjacentLParenOrLBrack tokenTup).IsSome -> let dotTokenTup = peekNextTokenTup() @@ -2360,9 +2367,9 @@ type LexFilterImpl (lightStatus: LightSyntaxStatus, compilingFsLib, lexer, lexbu // Part VI. Publish the new lexer function. //-------------------------------------------------------------------------- - member __.LexBuffer = lexbuf + member _.LexBuffer = lexbuf - member __.GetToken() = + member _.GetToken() = if not initialized then let _firstTokenTup = peekInitial() () diff --git a/src/fsharp/Logger.fs b/src/fsharp/Logger.fs index 8923464ed72..e03853492f3 100644 --- a/src/fsharp/Logger.fs +++ b/src/fsharp/Logger.fs @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler +namespace FSharp.Compiler.Diagnostics open System.Diagnostics.Tracing open System @@ -77,11 +77,11 @@ module Logger = let LogBlock(functionId) = FSharpCompilerEventSource.Instance.BlockStart(functionId) { new IDisposable with - member __.Dispose() = + member _.Dispose() = FSharpCompilerEventSource.Instance.BlockStop(functionId) } let LogBlockMessage message functionId = FSharpCompilerEventSource.Instance.BlockMessageStart(message, functionId) { new IDisposable with - member __.Dispose() = + member _.Dispose() = FSharpCompilerEventSource.Instance.BlockMessageStop(message, functionId) } diff --git a/src/fsharp/Logger.fsi b/src/fsharp/Logger.fsi index 40ef9025bc6..fcaffdc642b 100644 --- a/src/fsharp/Logger.fsi +++ b/src/fsharp/Logger.fsi @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler +namespace FSharp.Compiler.Diagnostics open System diff --git a/src/fsharp/LowerCallsAndSeqs.fs b/src/fsharp/LowerCallsAndSeqs.fs index 050f3cfa040..3acc080f9b9 100644 --- a/src/fsharp/LowerCallsAndSeqs.fs +++ b/src/fsharp/LowerCallsAndSeqs.fs @@ -2,17 +2,19 @@ module internal FSharp.Compiler.LowerCallsAndSeqs +open Internal.Utilities.Collections +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.ErrorLogger open FSharp.Compiler.InfoReader open FSharp.Compiler.Infos -open FSharp.Compiler.Lib open FSharp.Compiler.MethodCalls -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.TypeRelations open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps @@ -63,7 +65,7 @@ let LowerImplFile g assembly = let mkLambdaNoType g m uv e = mkLambda m uv (e, tyOfExpr g e) -let callNonOverloadedMethod g amap m methName ty args = +let callNonOverloadedILMethod 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)) | ILMeth(g, ilMethInfo, _) :: _ -> @@ -116,6 +118,105 @@ let (|Seq|_|) g expr = let IsPossibleSequenceExpr g overallExpr = match overallExpr with Seq g _ -> true | _ -> false +/// Detect a 'yield x' within a 'seq { ... }' +let (|SeqYield|_|) g expr = + match expr with + | ValApp g g.seq_singleton_vref (_, [arg], m) -> Some (arg, m) + | _ -> None + +/// Detect a 'expr; expr' within a 'seq { ... }' +let (|SeqAppend|_|) g expr = + match expr with + | ValApp g g.seq_append_vref (_, [arg1; arg2], m) -> Some (arg1, arg2, m) + | _ -> None + +/// Detect a 'while gd do expr' within a 'seq { ... }' +let (|SeqWhile|_|) g expr = + match expr with + | ValApp g g.seq_generated_vref (_, [Expr.Lambda (_, _, _, [dummyv], gd, _, _);arg2], m) + when not (isVarFreeInExpr dummyv gd) -> + + // The debug point for 'while' is attached to the second argument, see TcSequenceExpression + let mWhile = arg2.Range + Some (gd, arg2, mWhile, m) + + | _ -> + None + +let (|SeqTryFinally|_|) g expr = + match expr with + | ValApp g g.seq_finally_vref (_, [arg1;(Expr.Lambda (_, _, _, [dummyv], compensation, _, _) as arg2)], m) + when not (isVarFreeInExpr dummyv compensation) -> + + // The debug point for 'try' and 'finally' are attached to the first and second arguments + // respectively, see TcSequenceExpression + let mTry = arg1.Range + let mFinally = arg2.Range + + Some (arg1, compensation, mTry, mFinally, m) + + | _ -> + None + +let (|SeqUsing|_|) g expr = + match expr with + | ValApp g g.seq_using_vref ([_;_;elemTy], [resource;Expr.Lambda (_, _, _, [v], body, mBind, _)], m) -> + Some (resource, v, body, elemTy, mBind, m) + | _ -> + None + +let (|SeqForEach|_|) g expr = + match expr with + // Nested for loops are represented by calls to Seq.collect + | ValApp g g.seq_collect_vref ([_inpElemTy;_enumty2;genElemTy], [Expr.Lambda (_, _, _, [v], body, mFor, _); inp], m) -> + // The debug point mFor at the 'for' gets attached to the first argument, see TcSequenceExpression + Some (inp, v, body, genElemTy, mFor, m) + + // "for x in e -> e2" is converted to a call to Seq.map by the F# type checker. This could be removed, except it is also visible in F# quotations. + | ValApp g g.seq_map_vref ([_inpElemTy;genElemTy], [Expr.Lambda (_, _, _, [v], body, mFor, _); inp], m) -> + // The debug point mFor at the 'for' gets attached to the first argument, see TcSequenceExpression + Some (inp, v, mkCallSeqSingleton g body.Range genElemTy body, genElemTy, mFor, m) + + | _ -> None + +let (|SeqDelay|_|) g expr = + match expr with + | ValApp g g.seq_delay_vref ([elemTy], [Expr.Lambda (_, _, _, [v], e, _, _)], _m) + when not (isVarFreeInExpr v e) -> + Some (e, elemTy) + | _ -> None + +let (|SeqEmpty|_|) g expr = + match expr with + | ValApp g g.seq_empty_vref (_, [], m) -> Some (m) + | _ -> None + +let (|SeqToList|_|) g expr = + match expr with + | ValApp g g.seq_to_list_vref (_, [seqExpr], m) -> Some (seqExpr, m) + | _ -> None + +let (|SeqToArray|_|) g expr = + match expr with + | ValApp g g.seq_to_array_vref (_, [seqExpr], m) -> Some (seqExpr, m) + | _ -> None + +let tyConfirmsToSeq g ty = + match tryTcrefOfAppTy g ty with + | ValueSome tcref -> + tyconRefEq g tcref g.tcref_System_Collections_Generic_IEnumerable + | _ -> false + +let (|SeqElemTy|_|) g amap m ty = + match SearchEntireHierarchyOfType (tyConfirmsToSeq g) g amap m ty with + | None -> + // printfn "FAILED - yield! did not yield a sequence! %s" (stringOfRange m) + None + | Some seqTy -> + // printfn "found yield!" + let inpElemTy = List.head (argsOfAppTy g seqTy) + Some inpElemTy + /// Analyze a TAST expression to detect the elaborated form of a sequence expression. /// Then compile it to a state machine represented as a TAST containing goto, return and label nodes. /// The returned state machine will also contain references to state variables (from internal 'let' bindings), @@ -127,64 +228,6 @@ let IsPossibleSequenceExpr g overallExpr = /// We then allocate an integer pc for each state label and proceed with the second phase, which builds two related state machine /// expressions: one for 'MoveNext' and one for 'Dispose'. let ConvertSequenceExprToObject g amap overallExpr = - /// Detect a 'yield x' within a 'seq { ... }' - let (|SeqYield|_|) expr = - match expr with - | ValApp g g.seq_singleton_vref (_, [arg], m) -> Some (arg, m) - | _ -> None - - /// Detect a 'expr; expr' within a 'seq { ... }' - let (|SeqAppend|_|) expr = - match expr with - | ValApp g g.seq_append_vref (_, [arg1; arg2], m) -> Some (arg1, arg2, m) - | _ -> None - - /// Detect a 'while gd do expr' within a 'seq { ... }' - let (|SeqWhile|_|) expr = - match expr with - | ValApp g g.seq_generated_vref (_, [Expr.Lambda (_, _, _, [dummyv], gd, _, _);arg2], m) - when not (isVarFreeInExpr dummyv gd) -> - Some (gd, arg2, m) - | _ -> - None - - let (|SeqTryFinally|_|) expr = - match expr with - | ValApp g g.seq_finally_vref (_, [arg1;Expr.Lambda (_, _, _, [dummyv], compensation, _, _)], m) - when not (isVarFreeInExpr dummyv compensation) -> - Some (arg1, compensation, m) - | _ -> - None - - let (|SeqUsing|_|) expr = - match expr with - | ValApp g g.seq_using_vref ([_;_;elemTy], [resource;Expr.Lambda (_, _, _, [v], body, _, _)], m) -> - Some (resource, v, body, elemTy, m) - | _ -> - None - - let (|SeqFor|_|) expr = - match expr with - // Nested for loops are represented by calls to Seq.collect - | ValApp g g.seq_collect_vref ([_inpElemTy;_enumty2;genElemTy], [Expr.Lambda (_, _, _, [v], body, _, _); inp], m) -> - Some (inp, v, body, genElemTy, m) - // "for x in e -> e2" is converted to a call to Seq.map by the F# type checker. This could be removed, except it is also visible in F# quotations. - | ValApp g g.seq_map_vref ([_inpElemTy;genElemTy], [Expr.Lambda (_, _, _, [v], body, _, _); inp], m) -> - Some (inp, v, mkCallSeqSingleton g body.Range genElemTy body, genElemTy, m) - | _ -> None - - let (|SeqDelay|_|) expr = - match expr with - | ValApp g g.seq_delay_vref ([elemTy], [Expr.Lambda (_, _, _, [v], e, _, _)], _m) - when not (isVarFreeInExpr v e) -> - Some (e, elemTy) - | _ -> None - - let (|SeqEmpty|_|) expr = - match expr with - | ValApp g g.seq_empty_vref (_, [], m) -> Some (m) - | _ -> None - /// Implement a decision to represent a 'let' binding as a non-escaping local variable (rather than a state machine variable) let RepresentBindingAsLocal (bind: Binding) res2 m = if verbose then @@ -207,7 +250,7 @@ let ConvertSequenceExprToObject g amap overallExpr = let (TBind(v, e, sp)) = bind let sp, spm = match sp with - | DebugPointAtBinding m -> DebugPointAtSequential.Both, m + | DebugPointAtBinding.Yes m -> DebugPointAtSequential.Both, m | _ -> DebugPointAtSequential.StmtOnly, e.Range let vref = mkLocalValRef v { res2 with @@ -245,7 +288,7 @@ let ConvertSequenceExprToObject g amap overallExpr = expr = match expr with - | SeqYield(e, m) -> + | SeqYield g (e, m) -> // printfn "found Seq.singleton" //this.pc <- NEXT //curr <- e @@ -254,9 +297,9 @@ let ConvertSequenceExprToObject g amap overallExpr = let label = IL.generateCodeLabel() Some { phase2 = (fun (pcVar, currVar, _nextv, pcMap) -> let generate = - mkCompGenSequential m + mkSequential DebugPointAtSequential.Both m (mkValSet m pcVar (mkInt32 g m pcMap.[label])) - (mkSequential DebugPointAtSequential.Both m + (mkCompGenSequential m (mkValSet m currVar e) (mkCompGenSequential m (Expr.Op (TOp.Return, [], [mkOne g m], m)) @@ -274,12 +317,12 @@ let ConvertSequenceExprToObject g amap overallExpr = asyncVars = emptyFreeVars } - | SeqDelay(delayedExpr, _elemTy) -> + | SeqDelay g (delayedExpr, _elemTy) -> // printfn "found Seq.delay" // note, using 'isWholeExpr' here prevents 'seq { yield! e }' and 'seq { 0 .. 1000 }' from being compiled ConvertSeqExprCode isWholeExpr isTailCall noDisposeContinuationLabel currentDisposeContinuationLabel delayedExpr - | SeqAppend(e1, e2, m) -> + | SeqAppend g (e1, e2, m) -> // printfn "found Seq.append" let res1 = ConvertSeqExprCode false false noDisposeContinuationLabel currentDisposeContinuationLabel e1 let res2 = ConvertSeqExprCode false isTailCall noDisposeContinuationLabel currentDisposeContinuationLabel e2 @@ -296,7 +339,7 @@ let ConvertSequenceExprToObject g amap overallExpr = Some { phase2 = (fun ctxt -> let generate1, dispose1, checkDispose1 = res1.phase2 ctxt let generate2, dispose2, checkDispose2 = res2.phase2 ctxt - let generate = mkCompGenSequential m generate1 generate2 + let generate = mkSequential DebugPointAtSequential.Both m generate1 generate2 // Order shouldn't matter here, since disposals actions are linked together by goto's (each ends in a goto). // However leaving as is for now. let dispose = mkCompGenSequential m dispose2 dispose1 @@ -309,7 +352,7 @@ let ConvertSequenceExprToObject g amap overallExpr = | _ -> None - | SeqWhile(guardExpr, bodyExpr, m) -> + | SeqWhile g (guardExpr, bodyExpr, mWhile, m) -> // printfn "found Seq.while" let resBody = ConvertSeqExprCode false false noDisposeContinuationLabel currentDisposeContinuationLabel bodyExpr match resBody with @@ -322,7 +365,7 @@ let ConvertSequenceExprToObject g amap overallExpr = Some { phase2 = (fun ctxt -> let generate2, dispose2, checkDispose2 = res2.phase2 ctxt - let generate = mkWhile g (DebugPointAtWhile.Yes guardExpr.Range, NoSpecialWhileLoopMarker, guardExpr, generate2, m) + let generate = mkWhile g (DebugPointAtWhile.Yes mWhile, NoSpecialWhileLoopMarker, guardExpr, generate2, m) let dispose = dispose2 let checkDispose = checkDispose2 generate, dispose, checkDispose) @@ -333,16 +376,16 @@ let ConvertSequenceExprToObject g amap overallExpr = | _ -> None - | SeqUsing(resource, v, body, elemTy, m) -> + | SeqUsing g (resource, v, body, elemTy, mBind, m) -> // printfn "found Seq.using" let reduction = - mkLet (DebugPointAtBinding body.Range) m v resource + mkLet (DebugPointAtBinding.Yes mBind) m v resource (mkCallSeqFinally g m elemTy body (mkUnitDelayLambda g m (mkCallDispose g m v.Type (exprForVal m v)))) ConvertSeqExprCode false isTailCall noDisposeContinuationLabel currentDisposeContinuationLabel reduction - | SeqFor(inp, v, body, genElemTy, m) -> + | SeqForEach g (inp, v, body, genElemTy, mFor, m) -> // printfn "found Seq.for" let inpElemTy = v.Type let inpEnumTy = mkIEnumeratorTy g inpElemTy @@ -352,14 +395,14 @@ let ConvertSequenceExprToObject g amap overallExpr = // let v = enum.Current // body ]] let reduction = - mkCallSeqUsing g m inpEnumTy genElemTy (callNonOverloadedMethod g amap m "GetEnumerator" (mkSeqTy g inpElemTy) [inp]) + mkCallSeqUsing g m inpEnumTy genElemTy (callNonOverloadedILMethod g amap m "GetEnumerator" (mkSeqTy g inpElemTy) [inp]) (mkLambdaNoType g m enumv - (mkCallSeqGenerated g m genElemTy (mkUnitDelayLambda g m (callNonOverloadedMethod g amap m "MoveNext" inpEnumTy [enume])) - (mkInvisibleLet m v (callNonOverloadedMethod g amap m "get_Current" inpEnumTy [enume]) + (mkCallSeqGenerated g m genElemTy (mkUnitDelayLambda g mFor (callNonOverloadedILMethod g amap m "MoveNext" inpEnumTy [enume])) + (mkInvisibleLet m v (callNonOverloadedILMethod g amap m "get_Current" inpEnumTy [enume]) (mkCoerceIfNeeded g (mkSeqTy g genElemTy) (tyOfExpr g body) body)))) ConvertSeqExprCode false isTailCall noDisposeContinuationLabel currentDisposeContinuationLabel reduction - | SeqTryFinally(e1, compensation, m) -> + | SeqTryFinally g (e1, compensation, mTry, mFinally, m) -> // printfn "found Seq.try/finally" let innerDisposeContinuationLabel = IL.generateCodeLabel() let resBody = ConvertSeqExprCode false false noDisposeContinuationLabel innerDisposeContinuationLabel e1 @@ -373,8 +416,8 @@ let ConvertSequenceExprToObject g amap overallExpr = let compensation = copyExpr g CloneAllAndMarkExprValsAsCompilerGenerated compensation mkCompGenSequential m // set the PC to the inner finally, so that if an exception happens we run the right finally - (mkCompGenSequential m - (mkValSet m pcVar (mkInt32 g m pcMap.[innerDisposeContinuationLabel])) + (mkSequential DebugPointAtSequential.StmtOnly m + (mkValSet mTry pcVar (mkInt32 g m pcMap.[innerDisposeContinuationLabel])) generate1 ) // set the PC past the try/finally before trying to run it, to make sure we only run it once (mkLabelled m innerDisposeContinuationLabel @@ -387,8 +430,8 @@ let ConvertSequenceExprToObject g amap overallExpr = dispose1 // set the PC past the try/finally before trying to run it, to make sure we only run it once (mkLabelled m innerDisposeContinuationLabel - (mkCompGenSequential m - (mkValSet m pcVar (mkInt32 g m pcMap.[currentDisposeContinuationLabel])) + (mkSequential DebugPointAtSequential.StmtOnly m + (mkValSet mFinally pcVar (mkInt32 g m pcMap.[currentDisposeContinuationLabel])) (mkCompGenSequential m compensation (Expr.Op (TOp.Goto currentDisposeContinuationLabel, [], [], m))))) @@ -406,7 +449,7 @@ let ConvertSequenceExprToObject g amap overallExpr = | _ -> None - | SeqEmpty m -> + | SeqEmpty g m -> // printfn "found Seq.empty" Some { phase2 = (fun _ -> let generate = mkUnit g m @@ -418,14 +461,14 @@ let ConvertSequenceExprToObject g amap overallExpr = significantClose = false asyncVars = emptyFreeVars } - | Expr.Sequential (x1, x2, NormalSeq, ty, m) -> - match ConvertSeqExprCode false isTailCall noDisposeContinuationLabel currentDisposeContinuationLabel x2 with + | Expr.Sequential (expr1, expr2, NormalSeq, sp, m) -> + match ConvertSeqExprCode false isTailCall noDisposeContinuationLabel currentDisposeContinuationLabel expr2 with | Some res2-> // printfn "found sequential execution" Some { res2 with phase2 = (fun ctxt -> let generate2, dispose2, checkDispose2 = res2.phase2 ctxt - let generate = Expr.Sequential (x1, generate2, NormalSeq, ty, m) + let generate = Expr.Sequential (expr1, generate2, NormalSeq, sp, m) let dispose = dispose2 let checkDispose = checkDispose2 generate, dispose, checkDispose) } @@ -542,18 +585,9 @@ let ConvertSequenceExprToObject g amap overallExpr = // printfn "FAILED - not worth compiling an unrecognized immediate yield! %s " (stringOfRange m) None else - let tyConfirmsToSeq g ty = - match tryTcrefOfAppTy g ty with - | ValueSome tcref -> - tyconRefEq g tcref g.tcref_System_Collections_Generic_IEnumerable - | _ -> false - match SearchEntireHierarchyOfType (tyConfirmsToSeq g) g amap m (tyOfExpr g arbitrarySeqExpr) with - | None -> - // printfn "FAILED - yield! did not yield a sequence! %s" (stringOfRange m) - None - | Some ty -> + match tyOfExpr g arbitrarySeqExpr with + | SeqElemTy g amap m inpElemTy -> // printfn "found yield!" - let inpElemTy = List.head (argsOfAppTy g ty) if isTailCall then //this.pc <- NEXT //nextEnumerator <- e @@ -583,6 +617,7 @@ let ConvertSequenceExprToObject g amap overallExpr = else let v, ve = mkCompGenLocal m "v" inpElemTy ConvertSeqExprCode false isTailCall noDisposeContinuationLabel currentDisposeContinuationLabel (mkCallSeqCollect g m inpElemTy inpElemTy (mkLambdaNoType g m v (mkCallSeqSingleton g m inpElemTy ve)) arbitrarySeqExpr) + | _ -> None match overallExpr with @@ -646,7 +681,7 @@ let ConvertSequenceExprToObject g amap overallExpr = // A utility to add a jump table to the three generated methods let addJumpTable isDisposal expr = - let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m ) + let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m ) let mkGotoLabelTarget lab = mbuilder.AddResultTarget(Expr.Op (TOp.Goto lab, [], [], m), DebugPointForTarget.No) let dtree = TDSwitch(pcExpr, @@ -713,7 +748,7 @@ let ConvertSequenceExprToObject g amap overallExpr = // goto startLabel // DONE_DISPOSE: let whileLoop = - let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m) + let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m) let addResultTarget e = mbuilder.AddResultTarget(e, DebugPointForTarget.No) let dtree = TDSwitch(pcExpr, @@ -740,7 +775,7 @@ let ConvertSequenceExprToObject g amap overallExpr = // --loop-- // if exn != null then raise exn mkLet - NoDebugPointAtLetBinding m exnV (Expr.Const (Const.Zero, m, g.exn_ty)) + DebugPointAtBinding.NoneAtLet m exnV (Expr.Const (Const.Zero, m, g.exn_ty)) (mkCompGenSequential m whileLoop doRaise) // Add the jump table to the GenerateNext method @@ -778,3 +813,229 @@ let ConvertSequenceExprToObject g amap overallExpr = | _ -> None +/// Build the 'test and dispose' part of a 'use' statement +let BuildDisposableCleanup tcVal (g: TcGlobals) infoReader m (v: Val) = + let disposeMethod = + match GetIntrinsicMethInfosOfType infoReader (Some "Dispose") AccessibleFromSomewhere AllowMultiIntfInstantiations.Yes IgnoreOverrides m g.system_IDisposable_ty with + | [x] -> x + | _ -> error(InternalError(FSComp.SR.tcCouldNotFindIDisposable(), m)) + // For struct types the test is simpler + if isStructTy g v.Type then + assert (TypeFeasiblySubsumesType 0 g infoReader.amap m g.system_IDisposable_ty CanCoerce v.Type) + // We can use NeverMutates here because the variable is going out of scope, there is no need to take a defensive + // copy of it. + let disposeExpr, _ = BuildMethodCall tcVal g infoReader.amap NeverMutates m false disposeMethod NormalValUse [] [exprForVal v.Range v] [] + //callNonOverloadedILMethod g infoReader.amap m "Dispose" g.system_IDisposable_ty [exprForVal v.Range v] + + disposeExpr + else + let disposeObjVar, disposeObjExpr = mkCompGenLocal m "objectToDispose" g.system_IDisposable_ty + let disposeExpr, _ = BuildMethodCall tcVal g infoReader.amap PossiblyMutates m false disposeMethod NormalValUse [] [disposeObjExpr] [] + let inpe = mkCoerceExpr(exprForVal v.Range v, g.obj_ty, m, v.Type) + mkIsInstConditional g m g.system_IDisposable_ty inpe disposeObjVar disposeExpr (mkUnit g m) + +let mkCallCollectorMethod tcVal (g: TcGlobals) infoReader m name collExpr args = + let listCollectorTy = tyOfExpr g collExpr + let addMethod = + match GetIntrinsicMethInfosOfType infoReader (Some name) AccessibleFromSomewhere AllowMultiIntfInstantiations.Yes IgnoreOverrides m listCollectorTy with + | [x] -> x + | _ -> error(InternalError("no " + name + " method found on Collector", m)) + let expr, _ = BuildMethodCall tcVal g infoReader.amap DefinitelyMutates m false addMethod NormalValUse [] [collExpr] args + expr + +let mkCallCollectorAdd tcVal (g: TcGlobals) infoReader m collExpr arg = + mkCallCollectorMethod tcVal g infoReader m "Add" collExpr [arg] + +let mkCallCollectorAddMany tcVal (g: TcGlobals) infoReader m collExpr arg = + mkCallCollectorMethod tcVal g infoReader m "AddMany" collExpr [arg] + +let mkCallCollectorAddManyAndClose tcVal (g: TcGlobals) infoReader m collExpr arg = + mkCallCollectorMethod tcVal g infoReader m "AddManyAndClose" collExpr [arg] + +let mkCallCollectorClose tcVal (g: TcGlobals) infoReader m collExpr = + mkCallCollectorMethod tcVal g infoReader m "Close" collExpr [] + +let LowerComputedListOrArraySeqExpr tcVal g amap m collectorTy overallSeqExpr = + let infoReader = InfoReader(g, amap) + let collVal, collExpr = mkMutableCompGenLocal m "@collector" collectorTy + //let collExpr = mkValAddr m false (mkLocalValRef collVal) + let rec ConvertSeqExprCode isUninteresting isTailcall expr = + match expr with + | SeqYield g (e, m) -> + let exprR = mkCallCollectorAdd tcVal (g: TcGlobals) infoReader m collExpr e + Result.Ok (false, exprR) + + | SeqDelay g (delayedExpr, _elemTy) -> + ConvertSeqExprCode isUninteresting isTailcall delayedExpr + + | SeqAppend g (e1, e2, m) -> + let res1 = ConvertSeqExprCode false false e1 + let res2 = ConvertSeqExprCode false isTailcall e2 + match res1, res2 with + | Result.Ok (_, e1R), Result.Ok (closed2, e2R) -> + let exprR = mkSequential DebugPointAtSequential.Both m e1R e2R + Result.Ok (closed2, exprR) + | Result.Error msg, _ | _, Result.Error msg -> Result.Error msg + + | SeqWhile g (guardExpr, bodyExpr, mWhile, m) -> + let resBody = ConvertSeqExprCode false false bodyExpr + match resBody with + | Result.Ok (_, bodyExprR) -> + let exprR = mkWhile g (DebugPointAtWhile.Yes mWhile, NoSpecialWhileLoopMarker, guardExpr, bodyExprR, m) + Result.Ok (false, exprR) + | Result.Error msg -> Result.Error msg + + | SeqUsing g (resource, v, bodyExpr, _elemTy, mBind, m) -> + let resBody = ConvertSeqExprCode false false bodyExpr + match resBody with + | Result.Ok (_, bodyExprR) -> + // printfn "found Seq.using" + let cleanupE = BuildDisposableCleanup tcVal g infoReader m v + let exprR = + mkLet (DebugPointAtBinding.Yes mBind) m v resource + (mkTryFinally g (bodyExprR, cleanupE, m, tyOfExpr g bodyExpr, DebugPointAtTry.Body, DebugPointAtFinally.No)) + Result.Ok (false, exprR) + | Result.Error msg -> Result.Error msg + + | SeqForEach g (inp, v, bodyExpr, _genElemTy, mFor, m) -> + let resBody = ConvertSeqExprCode false false bodyExpr + match resBody with + | Result.Ok (_, bodyExprR) -> + // printfn "found Seq.for" + let inpElemTy = v.Type + let inpEnumTy = mkIEnumeratorTy g inpElemTy + let enumv, enumve = mkCompGenLocal m "enum" inpEnumTy + let guardExpr = callNonOverloadedILMethod g amap m "MoveNext" inpEnumTy [enumve] + let cleanupE = BuildDisposableCleanup tcVal g infoReader m enumv + let exprR = + mkInvisibleLet m enumv (callNonOverloadedILMethod g amap m "GetEnumerator" (mkSeqTy g inpElemTy) [inp]) + (mkTryFinally g + (mkWhile g (DebugPointAtWhile.Yes mFor, NoSpecialWhileLoopMarker, guardExpr, + (mkInvisibleLet m v + (callNonOverloadedILMethod g amap m "get_Current" inpEnumTy [enumve])) + bodyExprR, m), + cleanupE, m, tyOfExpr g bodyExpr, DebugPointAtTry.Body, DebugPointAtFinally.Body)) + Result.Ok (false, exprR) + | Result.Error msg -> Result.Error msg + + | SeqTryFinally g (bodyExpr, compensation, mTry, mFinally, m) -> + let resBody = ConvertSeqExprCode false false bodyExpr + match resBody with + | Result.Ok (_, bodyExprR) -> + let exprR = + mkTryFinally g (bodyExprR, compensation, m, tyOfExpr g bodyExpr, DebugPointAtTry.Yes mTry, DebugPointAtFinally.Yes mFinally) + Result.Ok (false, exprR) + | Result.Error msg -> Result.Error msg + + | SeqEmpty g m -> + let exprR = mkUnit g m + Result.Ok(false, exprR) + + | Expr.Sequential (x1, bodyExpr, NormalSeq, ty, m) -> + let resBody = ConvertSeqExprCode isUninteresting isTailcall bodyExpr + match resBody with + | Result.Ok (closed, bodyExprR) -> + let exprR = Expr.Sequential (x1, bodyExprR, NormalSeq, ty, m) + Result.Ok(closed, exprR) + | Result.Error msg -> Result.Error msg + + | Expr.Let (bind, bodyExpr, m, _) -> + let resBody = ConvertSeqExprCode isUninteresting isTailcall bodyExpr + match resBody with + | Result.Ok (closed, bodyExprR) -> + let exprR = mkLetBind m bind bodyExprR + Result.Ok(closed, exprR) + | Result.Error msg -> Result.Error msg + + | Expr.LetRec (binds, bodyExpr, m, _) -> + let resBody = ConvertSeqExprCode isUninteresting isTailcall bodyExpr + match resBody with + | Result.Ok (closed, bodyExprR) -> + let exprR = mkLetRecBinds m binds bodyExprR + Result.Ok(closed, exprR) + | Result.Error msg -> Result.Error msg + + | Expr.Match (spBind, exprm, pt, targets, m, ty) -> + // lower all the targets. abandon if any fail to lower + let resTargets = + targets |> Array.map (fun (TTarget(vs, targetExpr, spTarget)) -> + match ConvertSeqExprCode false false targetExpr with + | Result.Ok (_, targetExprR) -> + Result.Ok (TTarget(vs, targetExprR, spTarget)) + | Result.Error msg -> Result.Error msg ) + if resTargets |> Array.forall (function Result.Ok _ -> true | _ -> false) then + let tglArray = Array.map (function Result.Ok v -> v | _ -> failwith "unreachable") resTargets + + let exprR = primMkMatch (spBind, exprm, pt, tglArray, m, ty) + Result.Ok(false, exprR) + else + resTargets |> Array.pick (function Result.Error msg -> Some (Result.Error msg) | _ -> None) + + // yield! e ---> (for x in e -> x) + + | arbitrarySeqExpr -> + let m = arbitrarySeqExpr.Range + if isUninteresting then + // printfn "FAILED - not worth compiling an unrecognized Seq.toList at %s " (stringOfRange m) + Result.Error () + else + // If we're the final in a sequential chain then we can AddMany, Close and return + if isTailcall then + let exprR = mkCallCollectorAddManyAndClose tcVal (g: TcGlobals) infoReader m collExpr arbitrarySeqExpr + // Return 'true' to indicate the collector was closed and the overall result of the expression is the result + Result.Ok(true, exprR) + else + let exprR = mkCallCollectorAddMany tcVal (g: TcGlobals) infoReader m collExpr arbitrarySeqExpr + Result.Ok(false, exprR) + + + // Perform conversion + match ConvertSeqExprCode true true overallSeqExpr with + | Result.Ok (closed, overallSeqExprR) -> + mkInvisibleLet m collVal (mkDefault (m, collectorTy)) + (if closed then + // If we ended with AddManyAndClose then we're done + overallSeqExprR + else + mkCompGenSequential m + overallSeqExprR + (mkCallCollectorClose tcVal g infoReader m collExpr)) + |> Some + | Result.Error () -> + None + +let (|OptionalCoerce|) expr = + match expr with + | Expr.Op (TOp.Coerce, _, [arg], _) -> arg + | _ -> expr + +// Making 'seq' optional means this kicks in for FSharp.Core, see TcArrayOrListSequenceExpression +// which only adds a 'seq' call outside of FSharp.Core +let (|OptionalSeq|_|) g amap expr = + match expr with + // use 'seq { ... }' as an indicator + | Seq g (e, elemTy) -> + Some (e, elemTy) + | _ -> + // search for the relevant element type + match tyOfExpr g expr with + | SeqElemTy g amap expr.Range elemTy -> + Some (expr, elemTy) + | _ -> None + +let LowerComputedListOrArrayExpr tcVal (g: TcGlobals) amap overallExpr = + // If ListCollector is in FSharp.Core then this optimization kicks in + if g.ListCollector_tcr.CanDeref then + + match overallExpr with + | SeqToList g (OptionalCoerce (OptionalSeq g amap (overallSeqExpr, overallElemTy)), m) -> + let collectorTy = g.mk_ListCollector_ty overallElemTy + LowerComputedListOrArraySeqExpr tcVal g amap m collectorTy overallSeqExpr + + | SeqToArray g (OptionalCoerce (OptionalSeq g amap (overallSeqExpr, overallElemTy)), m) -> + let collectorTy = g.mk_ArrayCollector_ty overallElemTy + LowerComputedListOrArraySeqExpr tcVal g amap m collectorTy overallSeqExpr + + | _ -> None + else + None diff --git a/src/fsharp/LowerCallsAndSeqs.fsi b/src/fsharp/LowerCallsAndSeqs.fsi index 16989637e2b..10a5e26550a 100644 --- a/src/fsharp/LowerCallsAndSeqs.fsi +++ b/src/fsharp/LowerCallsAndSeqs.fsi @@ -2,10 +2,11 @@ module internal FSharp.Compiler.LowerCallsAndSeqs -open FSharp.Compiler.TypedTree -open FSharp.Compiler.TcGlobals open FSharp.Compiler.Import -open FSharp.Compiler.Range +open FSharp.Compiler.InfoReader +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.TypedTree +open FSharp.Compiler.Text /// An "expr -> expr" pass that eta-expands under-applied values of /// known arity to lambda expressions and beta-var-reduces to bind @@ -22,3 +23,5 @@ val LowerImplFile: g: TcGlobals -> assembly: TypedImplFile -> TypedImplFile val ConvertSequenceExprToObject: g: TcGlobals -> amap: ImportMap -> overallExpr: Expr -> (ValRef * ValRef * ValRef * ValRef list * Expr * Expr * Expr * TType * range) option val IsPossibleSequenceExpr: g: TcGlobals -> overallExpr: Expr -> bool + +val LowerComputedListOrArrayExpr: tcVal: ConstraintSolver.TcValF -> g: TcGlobals -> amap: ImportMap -> Expr -> Expr option diff --git a/src/fsharp/MethodCalls.fs b/src/fsharp/MethodCalls.fs index 52ea6aaff39..0cd10e2fc4e 100644 --- a/src/fsharp/MethodCalls.fs +++ b/src/fsharp/MethodCalls.fs @@ -5,22 +5,25 @@ module internal FSharp.Compiler.MethodCalls open Internal.Utilities +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.AttributeChecking open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features open FSharp.Compiler.InfoReader open FSharp.Compiler.Infos -open FSharp.Compiler.Lib +open FSharp.Compiler.IO open FSharp.Compiler.NameResolution -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming open FSharp.Compiler.SyntaxTreeOps open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps @@ -211,14 +214,13 @@ let AdjustCalledArgTypeForOptionals (g: TcGlobals) enforceNullableOptionalsKnown calledArgTy // If at the beginning of inference then use a type variable. else - let destTy = destNullableTy g calledArgTy match calledArg.OptArgInfo with - // Use the type variable from the Nullable if called arg is not optional. - | NotOptional when isTyparTy g destTy -> - destTy + // If inference has not solved the kind of Nullable on the called arg and is not optional then use this. + | NotOptional when isTyparTy g (destNullableTy g calledArgTy) -> + calledArgTy | _ -> let compgenId = mkSynId range0 unassignedTyparName - mkTyparTy (Construct.NewTypar (TyparKind.Type, TyparRigidity.Flexible, Typar(compgenId, NoStaticReq, true), false, TyparDynamicReq.No, [], false, false)) + mkTyparTy (Construct.NewTypar (TyparKind.Type, TyparRigidity.Flexible, SynTypar(compgenId, TyparStaticReq.None, true), false, TyparDynamicReq.No, [], false, false)) else calledArgTy @@ -765,7 +767,7 @@ let BuildILMethInfoCall g amap m isProp (minfo: ILMethInfo) valUseFlags minst di let ilMethRef = minfo.ILMethodRef let newobj = ctor && (match valUseFlags with NormalValUse -> true | _ -> false) let exprTy = if ctor then minfo.ApparentEnclosingType else minfo.GetFSharpReturnTy(amap, m, minst) - let retTy = if not ctor && ilMethRef.ReturnType = ILType.Void then [] else [exprTy] + let retTy = if not ctor && (stripILModifiedFromTy ilMethRef.ReturnType) = ILType.Void then [] else [exprTy] let isDllImport = minfo.IsDllImport g Expr.Op (TOp.ILCall (useCallvirt, isProtected, valu, newobj, valUseFlags, isProp, isDllImport, ilMethRef, minfo.DeclaringTypeInst, minst, retTy), [], args, m), exprTy @@ -787,7 +789,7 @@ let BuildFSharpMethodApp g m (vref: ValRef) vexp vexprty (args: Exprs) = match arity, args with | (0|1), [] when typeEquiv g (domainOfFunTy g fty) g.unit_ty -> mkUnit g m, (args, rangeOfFunTy g fty) | 0, (arg :: argst) -> - let msg = Layout.showL (Layout.sepListL (Layout.rightL (Layout.TaggedTextOps.tagText ";")) (List.map exprL args)) + let msg = LayoutRender.showL (Layout.sepListL (Layout.rightL (TaggedText.tagText ";")) (List.map exprL args)) warning(InternalError(sprintf "Unexpected zero arity, args = %s" msg, m)) arg, (argst, rangeOfFunTy g fty) | 1, (arg :: argst) -> arg, (argst, rangeOfFunTy g fty) @@ -1515,7 +1517,7 @@ module ProvidedMethodCalls = let testExpr = exprToExpr test let ifTrueExpr = exprToExpr thenBranch let ifFalseExpr = exprToExpr elseBranch - let te = mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m (tyOfExpr g ifTrueExpr) testExpr ifTrueExpr ifFalseExpr + let te = mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m (tyOfExpr g ifTrueExpr) testExpr ifTrueExpr ifFalseExpr None, (te, tyOfExpr g te) | ProvidedVarExpr providedVar -> let _, vTe = varToExpr (exprType.PApply((fun _ -> providedVar), m)) @@ -1690,7 +1692,7 @@ module ProvidedMethodCalls = | true, v -> v | _ -> let typeProviderDesignation = ExtensionTyping.DisplayNameOfTypeProvider (pe.TypeProvider, m) - error(NumberedError(FSComp.SR.etIncorrectParameterExpression(typeProviderDesignation, vRaw.Name), m)) + error(Error(FSComp.SR.etIncorrectParameterExpression(typeProviderDesignation, vRaw.Name), m)) and exprToExpr expr = let _, (resExpr, _) = exprToExprAndWitness false expr diff --git a/src/fsharp/MethodCalls.fsi b/src/fsharp/MethodCalls.fsi index c9bc2381894..ac96b7b30d8 100644 --- a/src/fsharp/MethodCalls.fsi +++ b/src/fsharp/MethodCalls.fsi @@ -6,27 +6,15 @@ module internal FSharp.Compiler.MethodCalls open Internal.Utilities open FSharp.Compiler -open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic -open FSharp.Compiler.AttributeChecking -open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Features open FSharp.Compiler.Import open FSharp.Compiler.InfoReader open FSharp.Compiler.Infos -open FSharp.Compiler.Lib open FSharp.Compiler.NameResolution -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree -open FSharp.Compiler.SyntaxTreeOps +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypedTree -open FSharp.Compiler.TypedTreeBasics -open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.TypedTreeOps.DebugPrint -open FSharp.Compiler.TypeRelations #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping diff --git a/src/fsharp/MethodOverrides.fs b/src/fsharp/MethodOverrides.fs index d5105e649dc..f26b67afa2d 100644 --- a/src/fsharp/MethodOverrides.fs +++ b/src/fsharp/MethodOverrides.fs @@ -3,19 +3,21 @@ /// Primary logic related to method overrides. module internal FSharp.Compiler.MethodOverrides +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.ErrorLogger open FSharp.Compiler.InfoReader -open FSharp.Compiler.Lib open FSharp.Compiler.Infos open FSharp.Compiler.Features open FSharp.Compiler.NameResolution -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax open FSharp.Compiler.SyntaxTreeOps open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps @@ -87,7 +89,7 @@ module DispatchSlotChecking = match argTys with | [] -> [[(denv.g.unit_ty, ValReprInfo.unnamedTopArg1)]] | _ -> argTys |> List.mapSquared (fun ty -> (ty, ValReprInfo.unnamedTopArg1)) - Layout.bufferL os (NicePrint.prettyLayoutOfMemberSig denv (memberToParentInst, id.idText, mtps, argInfos, retTy)) + LayoutRender.bufferL os (NicePrint.prettyLayoutOfMemberSig denv (memberToParentInst, id.idText, mtps, argInfos, retTy)) /// Print the signature of a MethInfo to a buffer as part of an error message let PrintMethInfoSigToBuffer g amap m denv os minfo = @@ -96,7 +98,7 @@ module DispatchSlotChecking = let retTy = (retTy |> GetFSharpViewOfReturnType g) let argInfos = argTys |> List.mapSquared (fun ty -> (ty, ValReprInfo.unnamedTopArg1)) let nm = minfo.LogicalName - Layout.bufferL os (NicePrint.prettyLayoutOfMemberSig denv (ttpinst, nm, fmtps, argInfos, retTy)) + LayoutRender.bufferL os (NicePrint.prettyLayoutOfMemberSig denv (ttpinst, nm, fmtps, argInfos, retTy)) /// Format the signature of an override as a string as part of an error message let FormatOverride denv d = bufs (fun buf -> PrintOverrideToBuffer denv buf d) @@ -332,13 +334,13 @@ module DispatchSlotChecking = checkLanguageFeatureErrorRecover g.langVersion LanguageFeature.DefaultInterfaceMemberConsumption m if reqdSlot.PossiblyNoMostSpecificImplementation then - errorR(Error(FSComp.SR.typrelInterfaceMemberNoMostSpecificImplementation(NicePrint.stringOfMethInfo amap m denv dispatchSlot), m)) + errorR(Error(FSComp.SR.typrelInterfaceMemberNoMostSpecificImplementation(NicePrint.stringOfMethInfo infoReader m denv dispatchSlot), m)) // error reporting path let compiledSig = CompiledSigOfMeth g amap m dispatchSlot let noimpl() = - missingOverloadImplementation.Add((isReqdTyInterface, lazy NicePrint.stringOfMethInfo amap m denv dispatchSlot)) + missingOverloadImplementation.Add((isReqdTyInterface, lazy NicePrint.stringOfMethInfo infoReader m denv dispatchSlot)) match overrides |> List.filter (IsPartialMatch g dispatchSlot compiledSig) with | [] -> @@ -368,7 +370,7 @@ module DispatchSlotChecking = elif not (IsTyparKindMatch compiledSig overrideBy) then fail(Error(FSComp.SR.typrelMemberDoesNotHaveCorrectKindsOfGenericParameters(FormatOverride denv overrideBy, FormatMethInfoSig g amap m denv dispatchSlot), overrideBy.Range)) else - fail(Error(FSComp.SR.typrelMemberCannotImplement(FormatOverride denv overrideBy, NicePrint.stringOfMethInfo amap m denv dispatchSlot, FormatMethInfoSig g amap m denv dispatchSlot), overrideBy.Range)) + fail(Error(FSComp.SR.typrelMemberCannotImplement(FormatOverride denv overrideBy, NicePrint.stringOfMethInfo infoReader m denv dispatchSlot, FormatMethInfoSig g amap m denv dispatchSlot), overrideBy.Range)) | overrideBy :: _ -> errorR(Error(FSComp.SR.typrelOverloadNotFound(FormatMethInfoSig g amap m denv dispatchSlot, FormatMethInfoSig g amap m denv dispatchSlot), overrideBy.Range)) @@ -536,10 +538,12 @@ module DispatchSlotChecking = [ (reqdTy, GetClassDispatchSlots infoReader ad m reqdTy) ] /// Check all implementations implement some dispatch slot. - let CheckOverridesAreAllUsedOnce(denv, g, amap, isObjExpr, reqdTy, + let CheckOverridesAreAllUsedOnce(denv, g, infoReader: InfoReader, isObjExpr, reqdTy, dispatchSlotsKeyed: NameMultiMap, availPriorOverrides: OverrideInfo list, overrides: OverrideInfo list) = + let amap = infoReader.amap + let availPriorOverridesKeyed = availPriorOverrides |> NameMultiMap.initBy (fun ov -> ov.LogicalName) for overrideBy in overrides do if not overrideBy.IsFakeEventProperty then @@ -570,13 +574,13 @@ module DispatchSlotChecking = | [dispatchSlot] -> if dispatchSlot.IsFinal && (isObjExpr || not (typeEquiv g reqdTy dispatchSlot.ApparentEnclosingType)) then - errorR(Error(FSComp.SR.typrelMethodIsSealed(NicePrint.stringOfMethInfo amap m denv dispatchSlot), m)) + errorR(Error(FSComp.SR.typrelMethodIsSealed(NicePrint.stringOfMethInfo infoReader m denv dispatchSlot), m)) | dispatchSlots -> match dispatchSlots |> List.filter (fun dispatchSlot -> isInterfaceTy g dispatchSlot.ApparentEnclosingType || not (DispatchSlotIsAlreadyImplemented g amap m availPriorOverridesKeyed dispatchSlot)) with | h1 :: h2 :: _ -> - errorR(Error(FSComp.SR.typrelOverrideImplementsMoreThenOneSlot((FormatOverride denv overrideBy), (NicePrint.stringOfMethInfo amap m denv h1), (NicePrint.stringOfMethInfo amap m denv h2)), m)) + errorR(Error(FSComp.SR.typrelOverrideImplementsMoreThenOneSlot((FormatOverride denv overrideBy), (NicePrint.stringOfMethInfo infoReader m denv h1), (NicePrint.stringOfMethInfo infoReader m denv h2)), m)) | _ -> // dispatch slots are ordered from the derived classes to base // so we can check the topmost dispatch slot if it is final @@ -780,7 +784,7 @@ module DispatchSlotChecking = |> List.filter (fst >> mustOverrideSomething reqdTy) |> List.map snd - CheckOverridesAreAllUsedOnce (denv, g, amap, false, reqdTy, dispatchSlotsKeyed, availPriorOverrides, overridesToCheck) + CheckOverridesAreAllUsedOnce (denv, g, infoReader, false, reqdTy, dispatchSlotsKeyed, availPriorOverrides, overridesToCheck) with e -> errorRecovery e m diff --git a/src/fsharp/MethodOverrides.fsi b/src/fsharp/MethodOverrides.fsi index cc1d057cc28..1e5a07350a6 100644 --- a/src/fsharp/MethodOverrides.fsi +++ b/src/fsharp/MethodOverrides.fsi @@ -3,15 +3,15 @@ /// Primary logic related to method overrides. module internal FSharp.Compiler.MethodOverrides -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.InfoReader open FSharp.Compiler.Import open FSharp.Compiler.Infos open FSharp.Compiler.NameResolution -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps @@ -72,7 +72,7 @@ module DispatchSlotChecking = val FormatMethInfoSig: g:TcGlobals -> amap:ImportMap -> m:range -> denv:DisplayEnv -> d:MethInfo -> string /// Get the override information for an object expression method being used to implement dispatch slots - val GetObjectExprOverrideInfo: g:TcGlobals -> amap:ImportMap -> implty:TType * id:Ident * memberFlags:MemberFlags * ty:TType * arityInfo:ValReprInfo * bindingAttribs:Attribs * rhsExpr:Expr -> OverrideInfo * (Val option * Val * Val list list * Attribs * Expr) + val GetObjectExprOverrideInfo: g:TcGlobals -> amap:ImportMap -> implty:TType * id:Ident * memberFlags:SynMemberFlags * ty:TType * arityInfo:ValReprInfo * bindingAttribs:Attribs * rhsExpr:Expr -> OverrideInfo * (Val option * Val * Val list list * Attribs * Expr) /// Check if an override exactly matches the requirements for a dispatch slot. val IsExactMatch: g:TcGlobals -> amap:ImportMap -> m:range -> dispatchSlot:MethInfo -> overrideBy:OverrideInfo -> bool @@ -81,7 +81,7 @@ module DispatchSlotChecking = val CheckDispatchSlotsAreImplemented: denv:DisplayEnv * infoReader:InfoReader * m:range * nenv:NameResolutionEnv * sink:TcResultsSink * isOverallTyAbstract:bool * reqdTy:TType * dispatchSlots:RequiredSlot list * availPriorOverrides:OverrideInfo list * overrides:OverrideInfo list -> bool /// Check all implementations implement some dispatch slot. - val CheckOverridesAreAllUsedOnce: denv:DisplayEnv * g:TcGlobals * amap:ImportMap * isObjExpr:bool * reqdTy:TType * dispatchSlotsKeyed:NameMultiMap * availPriorOverrides:OverrideInfo list * overrides:OverrideInfo list -> unit + val CheckOverridesAreAllUsedOnce: denv:DisplayEnv * g:TcGlobals * infoReader:InfoReader * isObjExpr:bool * reqdTy:TType * dispatchSlotsKeyed:NameMultiMap * availPriorOverrides:OverrideInfo list * overrides:OverrideInfo list -> unit /// Get the slots of a type that can or must be implemented. val GetSlotImplSets: infoReader:InfoReader -> denv:DisplayEnv -> ad:AccessorDomain -> isObjExpr:bool -> allReqdTys:(TType * range) list -> SlotImplSet list diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/DependencyManager.txt b/src/fsharp/Microsoft.DotNet.DependencyManager/DependencyManager.txt deleted file mode 100644 index 28e90747182..00000000000 --- a/src/fsharp/Microsoft.DotNet.DependencyManager/DependencyManager.txt +++ /dev/null @@ -1,4 +0,0 @@ -# Microsoft.DotNet.DependencyManager resource strings -3400,packageManagerUnknown,"Package manager key '%s' was not registered in %s. Currently registered: %s" -3401,packageManagerError,"%s" -3402,couldNotLoadDependencyManagerExtension,"The dependency manager extension %s could not be loaded. Message: %s" \ No newline at end of file diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/Directory.Build.props b/src/fsharp/Microsoft.DotNet.DependencyManager/Directory.Build.props deleted file mode 100644 index 7cd41381b5d..00000000000 --- a/src/fsharp/Microsoft.DotNet.DependencyManager/Directory.Build.props +++ /dev/null @@ -1,9 +0,0 @@ - - - - true - - - - - diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/Microsoft.DotNet.DependencyManager.fsproj b/src/fsharp/Microsoft.DotNet.DependencyManager/Microsoft.DotNet.DependencyManager.fsproj deleted file mode 100644 index f77c694ff6f..00000000000 --- a/src/fsharp/Microsoft.DotNet.DependencyManager/Microsoft.DotNet.DependencyManager.fsproj +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - Library - netstandard2.0;net472 - true - netstandard2.0 - Microsoft.DotNet.DependencyManager - $(NoWarn);45;55;62;75;1204 - true - $(OtherFlags) --warnon:1182 --maxerrors:20 --extraoptimizationloops:1 - true - - - - - $(BaseOutputPath)\$(Configuration)\$(TargetFramework) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/fsharp/Microsoft.DotNet.DependencyManager/README.md b/src/fsharp/Microsoft.DotNet.DependencyManager/README.md deleted file mode 100644 index 09d27d6dd34..00000000000 --- a/src/fsharp/Microsoft.DotNet.DependencyManager/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# `dotnet fsi` Dependency Manager Plugins - -Since .NET 5.0, `dotnet fsi` ships with dependency manager plugins support that can be called like so: - -```fsharp -#r "myextension: my extension parameters" -``` - -# `#r "nuget:"` [nuget](https://github.com/dotnet/fsharp/tree/main/src/fsharp/FSharp.DependencyManager.Nuget) - -Reference nuget packages, ships by default with `dotnet fsi`. - -```fsharp -#r "nuget: Newtonsoft.Json" -// Optionally, specify a version explicitly -// #r "nuget: Newtonsoft.Json,11.0.1" - -open Newtonsoft.Json - -let o = {| X = 2; Y = "Hello" |} - -printfn "%s" (JsonConvert.SerializeObject o) -``` - -# `#r "paket:"` [paket](https://fsprojects.github.io/Paket/fsi-integration.html) - -Reference dependencies (nuget, git, gist, github) through [Paket package manager](https://fsprojects.github.io/Paket). - -Learn how to use [Paket FSI integration](https://fsprojects.github.io/Paket/fsi-integration.html). - -```fsharp -#r "paket: nuget FSharp.Data" - -open FSharp.Data - -type MyCsv = CsvProvider<""" -X,Y -2,Hello -4,World -"""> - -for r in MyCsv.GetSample().Rows do - printfn "%i = %s" r.X r.Y -``` diff --git a/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.csproj b/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.csproj index e75296aa72f..26620118b48 100644 --- a/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.csproj +++ b/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.csproj @@ -2,7 +2,7 @@ true - netcoreapp3.1 + net5.0 Microsoft.FSharp.Compiler.nuspec true .NET Core compatible version of the F# compiler fsc.exe. @@ -11,10 +11,10 @@ - TargetFramework=netcoreapp3.1 + TargetFramework=net5.0 - TargetFramework=netcoreapp3.1 + TargetFramework=net5.0 TargetFramework=netstandard2.0 diff --git a/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.nuspec b/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.nuspec index 05460a7fe86..8f9f4824dd6 100644 --- a/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.nuspec +++ b/src/fsharp/Microsoft.FSharp.Compiler/Microsoft.FSharp.Compiler.nuspec @@ -4,7 +4,7 @@ $CommonMetadataElements$ en-US - + @@ -46,21 +46,19 @@ this approach gives a very small deployment. Which is kind of necessary. --> - - - - - - + + + + + + - - + target="lib\net5.0" /> + - + @@ -68,15 +66,13 @@ - - + + - + target="lib\net5.0" /> + - + target="lib\net5.0" /> diff --git a/src/fsharp/NameResolution.fs b/src/fsharp/NameResolution.fs index b6342f47784..c0018874162 100644 --- a/src/fsharp/NameResolution.fs +++ b/src/fsharp/NameResolution.fs @@ -7,11 +7,12 @@ module internal FSharp.Compiler.NameResolution open System.Collections.Generic open Internal.Utilities +open Internal.Utilities.Collections +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras +open Internal.Utilities.Library.ResultOrException open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Internal.Library.ResultOrException open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AccessibilityLogic @@ -21,16 +22,16 @@ open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.InfoReader open FSharp.Compiler.Infos open FSharp.Compiler.Features -open FSharp.Compiler.Lib -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming open FSharp.Compiler.SyntaxTreeOps open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Position +open FSharp.Compiler.Text.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.Text #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping @@ -81,9 +82,17 @@ let TryFindTypeWithRecdField (modref: ModuleOrNamespaceRef) (id: Ident) = |> QueueList.tryFind (fun tycon -> tycon.GetFieldByName id.idText |> Option.isSome) /// Get the active pattern elements defined by a given value, if any -let ActivePatternElemsOfValRef vref = +let ActivePatternElemsOfValRef g (vref: ValRef) = match TryGetActivePatternInfo vref with - | Some apinfo -> apinfo.ActiveTags |> List.mapi (fun i _ -> APElemRef(apinfo, vref, i)) + | Some apinfo -> + + let isStructRetTy = + if apinfo.IsTotal then + false + else + let _, apReturnTy = stripFunTy g vref.TauType + isStructTy g apReturnTy + apinfo.ActiveTags |> List.mapi (fun i _ -> APElemRef(apinfo, vref, i, isStructRetTy)) | None -> [] /// Try to make a reference to a value in a module. @@ -100,19 +109,18 @@ let TryMkValRefInModRef modref vspec = (fun () -> Some (mkNestedValRef modref vspec)) /// Get the active pattern elements defined by a given value, if any -let ActivePatternElemsOfVal modref vspec = +let ActivePatternElemsOfVal g modref vspec = // If the assembly load set is incomplete then don't add anything to the table match TryMkValRefInModRef modref vspec with | None -> [] - | Some vref -> ActivePatternElemsOfValRef vref - + | Some vref -> ActivePatternElemsOfValRef g vref /// Get the active pattern elements defined in a module, if any. Cache in the slot in the module type. -let ActivePatternElemsOfModuleOrNamespace (modref: ModuleOrNamespaceRef) : NameMap = +let ActivePatternElemsOfModuleOrNamespace g (modref: ModuleOrNamespaceRef) : NameMap = let mtyp = modref.ModuleOrNamespaceType cacheOptRef mtyp.ActivePatternElemRefLookupTable (fun () -> mtyp.AllValsAndMembers - |> Seq.collect (ActivePatternElemsOfVal modref) + |> Seq.collect (ActivePatternElemsOfVal g modref) |> Seq.fold (fun acc apref -> NameMap.add apref.Name apref acc) Map.empty) //--------------------------------------------------------------------------- @@ -154,7 +162,7 @@ type Item = | UnionCase of UnionCaseInfo * hasRequireQualifiedAccessAttr: bool /// Represents the resolution of a name to an F# active pattern result. - | ActivePatternResult of ActivePatternInfo * TType * int * range + | ActivePatternResult of apinfo: ActivePatternInfo * apOverallTy: TType * index: int * range: range /// Represents the resolution of a name to an F# active pattern case within the body of an active pattern. | ActivePatternCase of ActivePatternElemRef @@ -249,9 +257,9 @@ type Item = | Item.Event einfo -> einfo.EventName | Item.Property(_, FSProp(_, _, Some v, _) :: _) | Item.Property(_, FSProp(_, _, _, Some v) :: _) -> v.DisplayName - | Item.Property(nm, _) -> PrettyNaming.DemangleOperatorName nm + | Item.Property(nm, _) -> DemangleOperatorName nm | Item.MethodGroup(_, (FSMeth(_, _, v, _) :: _), _) -> v.DisplayName - | Item.MethodGroup(nm, _, _) -> PrettyNaming.DemangleOperatorName nm + | Item.MethodGroup(nm, _, _) -> DemangleOperatorName nm | Item.CtorGroup(nm, _) -> DemangleGenericTypeName nm | Item.FakeInterfaceCtor (AbbrevOrAppTy tcref) | Item.DelegateCtor (AbbrevOrAppTy tcref) -> DemangleGenericTypeName tcref.DisplayName @@ -702,9 +710,9 @@ let AddFakeNameToNameEnv nm nenv item = {nenv with eUnqualifiedItems = nenv.eUnqualifiedItems.Add (nm, item) } /// Add an F# value to the table of available active patterns -let AddValRefsToActivePatternsNameEnv ePatItems (vref: ValRef) = +let AddValRefsToActivePatternsNameEnv g ePatItems (vref: ValRef) = let ePatItems = - (ActivePatternElemsOfValRef vref, ePatItems) + (ActivePatternElemsOfValRef g vref, ePatItems) ||> List.foldBack (fun apref tab -> NameMap.add apref.Name (Item.ActivePatternCase apref) tab) @@ -717,15 +725,15 @@ let AddValRefsToActivePatternsNameEnv ePatItems (vref: ValRef) = ePatItems /// Add a set of F# values to the environment. -let AddValRefsToNameEnvWithPriority bulkAddMode pri nenv (vrefs: ValRef []) = +let AddValRefsToNameEnvWithPriority g bulkAddMode pri nenv (vrefs: ValRef []) = if vrefs.Length = 0 then nenv else { nenv with eUnqualifiedItems = AddValRefsToItems bulkAddMode nenv.eUnqualifiedItems vrefs eIndexedExtensionMembers = (nenv.eIndexedExtensionMembers, vrefs) ||> Array.fold (AddValRefToExtensionMembers pri) - ePatItems = (nenv.ePatItems, vrefs) ||> Array.fold AddValRefsToActivePatternsNameEnv } + ePatItems = (nenv.ePatItems, vrefs) ||> Array.fold (AddValRefsToActivePatternsNameEnv g) } /// Add a single F# value to the environment. -let AddValRefToNameEnv nenv (vref: ValRef) = +let AddValRefToNameEnv g nenv (vref: ValRef) = let pri = NextExtensionMethodPriority() { nenv with eUnqualifiedItems = @@ -734,17 +742,17 @@ let AddValRefToNameEnv nenv (vref: ValRef) = else nenv.eUnqualifiedItems eIndexedExtensionMembers = AddValRefToExtensionMembers pri nenv.eIndexedExtensionMembers vref - ePatItems = AddValRefsToActivePatternsNameEnv nenv.ePatItems vref } + ePatItems = AddValRefsToActivePatternsNameEnv g nenv.ePatItems vref } /// Add a set of active pattern result tags to the environment. -let AddActivePatternResultTagsToNameEnv (apinfo: PrettyNaming.ActivePatternInfo) nenv ty m = +let AddActivePatternResultTagsToNameEnv (apinfo: ActivePatternInfo) nenv apOverallTy m = if List.isEmpty apinfo.Names then nenv else - let apresl = List.indexed apinfo.Names + let apResultNameList = List.indexed apinfo.Names { nenv with eUnqualifiedItems = - (apresl, nenv.eUnqualifiedItems) - ||> List.foldBack (fun (j, nm) acc -> acc.Add(nm, Item.ActivePatternResult(apinfo, ty, j, m))) } + (apResultNameList, nenv.eUnqualifiedItems) + ||> List.foldBack (fun (j, nm) acc -> acc.Add(nm, Item.ActivePatternResult(apinfo, apOverallTy, j, m))) } /// Generalize a union case, from Cons --> List.Cons let GeneralizeUnionCaseRef (ucref: UnionCaseRef) = @@ -1034,7 +1042,7 @@ let ChooseMethInfosForNameEnv g m ty (minfos: MethInfo list) = |> List.filter (fun minfo -> not (minfo.IsInstance || minfo.IsClassConstructor || minfo.IsConstructor) && typeEquiv g minfo.ApparentEnclosingType ty && not (IsMethInfoPlainCSharpStyleExtensionMember g m isExtTy minfo) && - not (PrettyNaming.IsMangledOpName minfo.LogicalName)) + not (IsMangledOpName minfo.LogicalName)) |> List.groupBy (fun minfo -> minfo.LogicalName) |> List.filter (fun (_, methGroup) -> not methGroup.IsEmpty) |> List.map (fun (methName, methGroup) -> KeyValuePair(methName, Item.MethodGroup(methName, methGroup, None))) @@ -1372,7 +1380,7 @@ and AddModuleOrNamespaceContentsToNameEnv (g: TcGlobals) amap (ad: AccessorDomai mty.AllValsAndMembers.ToList() |> List.choose (fun x -> if IsAccessible ad x.Accessibility then TryMkValRefInModRef modref x else None) |> List.toArray - let nenv = AddValRefsToNameEnvWithPriority BulkAdd.Yes pri nenv vrefs + let nenv = AddValRefsToNameEnvWithPriority g BulkAdd.Yes pri nenv vrefs let nestedModules = MakeNestedModuleRefs modref let nenv = (nenv, nestedModules) ||> AddModuleOrNamespaceRefsToNameEnv g amap m root ad nenv @@ -1710,7 +1718,7 @@ let (|ValUse|_|) (item: Item) = let (|ActivePatternCaseUse|_|) (item: Item) = match item with - | Item.ActivePatternCase(APElemRef(_, vref, idx)) -> Some (vref.SigRange, vref.DefinitionRange, idx) + | Item.ActivePatternCase(APElemRef(_, vref, idx, _)) -> Some (vref.SigRange, vref.DefinitionRange, idx) | Item.ActivePatternResult(ap, _, idx, _) -> Some (ap.Range, ap.Range, idx) | _ -> None @@ -1909,14 +1917,14 @@ type TcResultsSinkImpl(tcGlobals, ?sourceText: ISourceText) = let capturedNameResolutionIdentifiers = new System.Collections.Generic.HashSet ( { new IEqualityComparer<_> with - member __.GetHashCode((p: pos, i)) = p.Line + 101 * p.Column + hash i - member __.Equals((p1, i1), (p2, i2)) = posEq p1 p2 && i1 = i2 } ) + member _.GetHashCode((p: pos, i)) = p.Line + 101 * p.Column + hash i + member _.Equals((p1, i1), (p2, i2)) = posEq p1 p2 && i1 = i2 } ) let capturedModulesAndNamespaces = new System.Collections.Generic.HashSet ( { new IEqualityComparer with - member __.GetHashCode ((m, _)) = hash m - member __.Equals ((m1, item1), (m2, item2)) = Range.equals m1 m2 && ItemsAreEffectivelyEqual tcGlobals item1 item2 } ) + member _.GetHashCode ((m, _)) = hash m + member _.Equals ((m1, item1), (m2, item2)) = Range.equals m1 m2 && ItemsAreEffectivelyEqual tcGlobals item1 item2 } ) let allowedRange (m: range) = not m.IsSynthetic @@ -2988,8 +2996,8 @@ let rec ResolvePatternLongIdentInModuleOrNamespace (ncenv: NameResolver) nenv nu success (resInfo, Item.ExnCase (modref.NestedTyconRef exnc), rest) | _ -> // An active pattern constructor in a module - match (ActivePatternElemsOfModuleOrNamespace modref).TryGetValue id.idText with - | true, (APElemRef(_, vref, _) as apref) when IsValAccessible ad vref -> + match (ActivePatternElemsOfModuleOrNamespace ncenv.g modref).TryGetValue id.idText with + | true, (APElemRef(_, vref, _, _) as apref) when IsValAccessible ad vref -> success (resInfo, Item.ActivePatternCase apref, rest) | _ -> match mty.AllValsByLogicalName.TryGetValue id.idText with @@ -4182,7 +4190,7 @@ let rec private EntityRefContainsSomethingAccessible (ncenv: NameResolver) m ad let rec ResolvePartialLongIdentInModuleOrNamespace (ncenv: NameResolver) nenv isApplicableMeth m ad (modref: ModuleOrNamespaceRef) plid allowObsolete = let g = ncenv.g let mty = modref.ModuleOrNamespaceType - + match plid with | [] -> let tycons = @@ -4219,15 +4227,15 @@ let rec ResolvePartialLongIdentInModuleOrNamespace (ncenv: NameResolver) nenv is // Collect up the accessible discriminated union cases in the module @ (UnionCaseRefsInModuleOrNamespace modref |> List.filter (IsUnionCaseUnseen ad g ncenv.amap m >> not) + |> List.filter (fun ucref -> not (HasFSharpAttribute g g.attrib_RequireQualifiedAccessAttribute ucref.TyconRef.Attribs)) |> List.map (fun x -> Item.UnionCase(GeneralizeUnionCaseRef x, false))) // Collect up the accessible active patterns in the module - @ (ActivePatternElemsOfModuleOrNamespace modref + @ (ActivePatternElemsOfModuleOrNamespace g modref |> NameMap.range |> List.filter (fun apref -> apref.ActivePatternVal |> IsValUnseen ad g m |> not) |> List.map Item.ActivePatternCase) - // Collect up the accessible F# exception declarations in the module @ (mty.ExceptionDefinitionsByDemangledName |> NameMap.range @@ -4807,11 +4815,12 @@ let rec ResolvePartialLongIdentInModuleOrNamespaceForItem (ncenv: NameResolver) yield! UnionCaseRefsInModuleOrNamespace modref |> List.filter (IsUnionCaseUnseen ad g ncenv.amap m >> not) + |> List.filter (fun ucref -> not (HasFSharpAttribute g g.attrib_RequireQualifiedAccessAttribute ucref.TyconRef.Attribs)) |> List.map (fun x -> Item.UnionCase(GeneralizeUnionCaseRef x, false)) | Item.ActivePatternCase _ -> // Collect up the accessible active patterns in the module yield! - ActivePatternElemsOfModuleOrNamespace modref + ActivePatternElemsOfModuleOrNamespace g modref |> NameMap.range |> List.filter (fun apref -> apref.ActivePatternVal |> IsValUnseen ad g m |> not) |> List.map Item.ActivePatternCase diff --git a/src/fsharp/NameResolution.fsi b/src/fsharp/NameResolution.fsi index d71def02718..7eab2ff2144 100755 --- a/src/fsharp/NameResolution.fsi +++ b/src/fsharp/NameResolution.fsi @@ -2,30 +2,29 @@ module internal FSharp.Compiler.NameResolution +open Internal.Utilities.Library open FSharp.Compiler open FSharp.Compiler.AccessibilityLogic -open FSharp.Compiler.SyntaxTree open FSharp.Compiler.Infos -open FSharp.Compiler.Range open FSharp.Compiler.Import open FSharp.Compiler.InfoReader +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TcGlobals -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Text /// A NameResolver is a context for name resolution. It primarily holds an InfoReader. type NameResolver = - new : g:TcGlobals * amap:ImportMap * infoReader:InfoReader * instantiationGenerator:(range -> Typars -> TypeInst) -> NameResolver - member InfoReader : InfoReader - member amap : ImportMap - member g : TcGlobals - member languageSupportsNameOf : bool + new: g:TcGlobals * amap:ImportMap * infoReader:InfoReader * instantiationGenerator:(range -> Typars -> TypeInst) -> NameResolver + member InfoReader: InfoReader + member amap: ImportMap + member g: TcGlobals + member languageSupportsNameOf: bool /// Get the active pattern elements defined in a module, if any. Cache in the slot in the module type. -val ActivePatternElemsOfModuleOrNamespace : ModuleOrNamespaceRef -> NameMap +val ActivePatternElemsOfModuleOrNamespace: g: TcGlobals -> ModuleOrNamespaceRef -> NameMap [] /// Represents the item with which a named argument is associated. @@ -37,7 +36,7 @@ type ArgumentContainer = /// Detect a use of a nominal type, including type abbreviations. /// When reporting symbols, we care about abbreviations, e.g. 'int' and 'int32' count as two separate symbols. -val (|AbbrevOrAppTy|_|) : TType -> TyconRef option +val (|AbbrevOrAppTy|_|): TType -> TyconRef option type EnclosingTypeInst = TypeInst @@ -51,7 +50,7 @@ type Item = | UnionCase of UnionCaseInfo * hasRequireQualifiedAccessAttr: bool /// Represents the resolution of a name to an F# active pattern result. - | ActivePatternResult of ActivePatternInfo * TType * int * range + | ActivePatternResult of apinfo: ActivePatternInfo * apOverallTy: TType * index: int * range: range /// Represents the resolution of a name to an F# active pattern case within the body of an active pattern. | ActivePatternCase of ActivePatternElemRef @@ -124,17 +123,17 @@ type Item = /// Represents the potential resolution of an unqualified name to a type. | UnqualifiedType of TyconRef list - member DisplayName : string + member DisplayName: string [] /// Pairs an Item with a TyparInst showing how generic type variables of the item are instantiated at /// a particular usage point. type ItemWithInst = - { Item : Item + { Item: Item TyparInst: TyparInst } -val (|ItemWithInst|) : ItemWithInst -> Item * TyparInst -val ItemWithNoInst : Item -> ItemWithInst +val (|ItemWithInst|): ItemWithInst -> Item * TyparInst +val ItemWithNoInst: Item -> ItemWithInst /// Represents a record field resolution and the information if the usage is deprecated. type FieldResolution = FieldResolution of RecdFieldInfo * bool @@ -151,7 +150,7 @@ type ExtensionMember = /// Describes the sequence order of the introduction of an extension method. Extension methods that are introduced /// later through 'open' get priority in overload resolution. - member Priority : ExtensionMethodPriority + member Priority: ExtensionMethodPriority /// The environment of information used to resolve names [] @@ -209,9 +208,9 @@ type NameResolutionEnv = eTypars: NameMap } - static member Empty : g:TcGlobals -> NameResolutionEnv - member DisplayEnv : DisplayEnv - member FindUnqualifiedItem : string -> Item + static member Empty: g:TcGlobals -> NameResolutionEnv + member DisplayEnv: DisplayEnv + member FindUnqualifiedItem: string -> Item type FullyQualifiedFlag = | FullyQualified @@ -221,40 +220,40 @@ type FullyQualifiedFlag = type BulkAdd = Yes | No /// Find a field in anonymous record type -val internal TryFindAnonRecdFieldOfType : TcGlobals -> TType -> string -> Item option +val internal TryFindAnonRecdFieldOfType: TcGlobals -> TType -> string -> Item option /// Add extra items to the environment for Visual Studio, e.g. static members -val internal AddFakeNamedValRefToNameEnv : string -> NameResolutionEnv -> ValRef -> NameResolutionEnv +val internal AddFakeNamedValRefToNameEnv: string -> NameResolutionEnv -> ValRef -> NameResolutionEnv /// Add some extra items to the environment for Visual Studio, e.g. record members -val internal AddFakeNameToNameEnv : string -> NameResolutionEnv -> Item -> NameResolutionEnv +val internal AddFakeNameToNameEnv: string -> NameResolutionEnv -> Item -> NameResolutionEnv /// Add a single F# value to the environment. -val internal AddValRefToNameEnv : NameResolutionEnv -> ValRef -> NameResolutionEnv +val internal AddValRefToNameEnv: TcGlobals -> NameResolutionEnv -> ValRef -> NameResolutionEnv /// Add active pattern result tags to the environment. -val internal AddActivePatternResultTagsToNameEnv : ActivePatternInfo -> NameResolutionEnv -> TType -> range -> NameResolutionEnv +val internal AddActivePatternResultTagsToNameEnv: ActivePatternInfo -> NameResolutionEnv -> TType -> range -> NameResolutionEnv /// Add a list of type definitions to the name resolution environment -val internal AddTyconRefsToNameEnv : BulkAdd -> bool -> TcGlobals -> ImportMap -> AccessorDomain -> range -> bool -> NameResolutionEnv -> TyconRef list -> NameResolutionEnv +val internal AddTyconRefsToNameEnv : BulkAdd -> bool -> TcGlobals -> ImportMap -> AccessorDomain -> range -> bool -> NameResolutionEnv -> TyconRef list -> NameResolutionEnv /// Add an F# exception definition to the name resolution environment -val internal AddExceptionDeclsToNameEnv : BulkAdd -> NameResolutionEnv -> TyconRef -> NameResolutionEnv +val internal AddExceptionDeclsToNameEnv : BulkAdd -> NameResolutionEnv -> TyconRef -> NameResolutionEnv /// Add a module abbreviation to the name resolution environment -val internal AddModuleAbbrevToNameEnv : Ident -> NameResolutionEnv -> ModuleOrNamespaceRef list -> NameResolutionEnv +val internal AddModuleAbbrevToNameEnv : Ident -> NameResolutionEnv -> ModuleOrNamespaceRef list -> NameResolutionEnv /// Add a list of module or namespace to the name resolution environment, including any sub-modules marked 'AutoOpen' -val internal AddModuleOrNamespaceRefsToNameEnv : TcGlobals -> ImportMap -> range -> bool -> AccessorDomain -> NameResolutionEnv -> ModuleOrNamespaceRef list -> NameResolutionEnv +val internal AddModuleOrNamespaceRefsToNameEnv : TcGlobals -> ImportMap -> range -> bool -> AccessorDomain -> NameResolutionEnv -> ModuleOrNamespaceRef list -> NameResolutionEnv /// Add a single modules or namespace to the name resolution environment -val internal AddModuleOrNamespaceRefToNameEnv : TcGlobals -> ImportMap -> range -> bool -> AccessorDomain -> NameResolutionEnv -> ModuleOrNamespaceRef -> NameResolutionEnv +val internal AddModuleOrNamespaceRefToNameEnv : TcGlobals -> ImportMap -> range -> bool -> AccessorDomain -> NameResolutionEnv -> ModuleOrNamespaceRef -> NameResolutionEnv /// Add a list of modules or namespaces to the name resolution environment -val internal AddModuleOrNamespaceRefsContentsToNameEnv : TcGlobals -> ImportMap -> AccessorDomain -> range -> bool -> NameResolutionEnv -> ModuleOrNamespaceRef list -> NameResolutionEnv +val internal AddModuleOrNamespaceRefsContentsToNameEnv: TcGlobals -> ImportMap -> AccessorDomain -> range -> bool -> NameResolutionEnv -> ModuleOrNamespaceRef list -> NameResolutionEnv /// Add the content of a type to the name resolution environment -val internal AddTypeContentsToNameEnv : TcGlobals -> ImportMap -> AccessorDomain -> range -> NameResolutionEnv -> TType -> NameResolutionEnv +val internal AddTypeContentsToNameEnv: TcGlobals -> ImportMap -> AccessorDomain -> range -> NameResolutionEnv -> TType -> NameResolutionEnv /// A flag which indicates if it is an error to have two declared type parameters with identical names /// in the name resolution environment. @@ -263,10 +262,10 @@ type CheckForDuplicateTyparFlag = | NoCheckForDuplicateTypars /// Add some declared type parameters to the name resolution environment -val internal AddDeclaredTyparsToNameEnv : CheckForDuplicateTyparFlag -> NameResolutionEnv -> Typar list -> NameResolutionEnv +val internal AddDeclaredTyparsToNameEnv: CheckForDuplicateTyparFlag -> NameResolutionEnv -> Typar list -> NameResolutionEnv /// Qualified lookup of type names in the environment -val internal LookupTypeNameInEnvNoArity : FullyQualifiedFlag -> string -> NameResolutionEnv -> TyconRef list +val internal LookupTypeNameInEnvNoArity: FullyQualifiedFlag -> string -> NameResolutionEnv -> TyconRef list /// Indicates whether we are resolving type names to type definitions or to constructor methods. type TypeNameResolutionFlag = @@ -282,16 +281,16 @@ type TypeNameResolutionFlag = [] type TypeNameResolutionStaticArgsInfo = /// Indicates definite knowledge of empty type arguments, i.e. the logical equivalent of name< > - static member DefiniteEmpty : TypeNameResolutionStaticArgsInfo + static member DefiniteEmpty: TypeNameResolutionStaticArgsInfo /// Deduce definite knowledge of type arguments - static member FromTyArgs : numTyArgs:int -> TypeNameResolutionStaticArgsInfo + static member FromTyArgs: numTyArgs:int -> TypeNameResolutionStaticArgsInfo /// Represents information which guides name resolution of types. [] type TypeNameResolutionInfo = | TypeNameResolutionInfo of TypeNameResolutionFlag * TypeNameResolutionStaticArgsInfo - static member Default : TypeNameResolutionInfo - static member ResolveToTypeRefs : TypeNameResolutionStaticArgsInfo -> TypeNameResolutionInfo + static member Default: TypeNameResolutionInfo + static member ResolveToTypeRefs: TypeNameResolutionStaticArgsInfo -> TypeNameResolutionInfo /// Represents the kind of the occurrence when reporting a name in name resolution [] @@ -306,58 +305,58 @@ type internal ItemOccurence = | Open /// Check for equality, up to signature matching -val ItemsAreEffectivelyEqual : TcGlobals -> Item -> Item -> bool +val ItemsAreEffectivelyEqual: TcGlobals -> Item -> Item -> bool /// Hash compatible with ItemsAreEffectivelyEqual -val ItemsAreEffectivelyEqualHash : TcGlobals -> Item -> int +val ItemsAreEffectivelyEqualHash: TcGlobals -> Item -> int [] type internal CapturedNameResolution = /// line and column - member Pos : pos + member Pos: pos /// Named item - member Item : Item + member Item: Item /// The active instantiation for any generic type parameters member ItemWithInst: ItemWithInst /// Information about the occurrence of the symbol - member ItemOccurence : ItemOccurence + member ItemOccurence: ItemOccurence /// Information about printing. For example, should redundant keywords be hidden? - member DisplayEnv : DisplayEnv + member DisplayEnv: DisplayEnv /// Naming environment--for example, currently open namespaces. - member NameResolutionEnv : NameResolutionEnv + member NameResolutionEnv: NameResolutionEnv /// The access rights of code at the location - member AccessorDomain : AccessorDomain + member AccessorDomain: AccessorDomain /// The starting and ending position - member Range : range + member Range: range [] type internal TcResolutions = /// Name resolution environments for every interesting region in the file. These regions may /// overlap, in which case the smallest region applicable should be used. - member CapturedEnvs : ResizeArray + member CapturedEnvs: ResizeArray /// Information of exact types found for expressions, that can be to the left of a dot. /// typ - the inferred type for an expression - member CapturedExpressionTypings : ResizeArray + member CapturedExpressionTypings: ResizeArray /// Exact name resolutions - member CapturedNameResolutions : ResizeArray + member CapturedNameResolutions: ResizeArray /// Represents additional resolutions of names to groups of methods. /// CapturedNameResolutions should be checked when no captured method group is found. /// See TypeCheckInfo.GetCapturedNameResolutions for example. - member CapturedMethodGroupResolutions : ResizeArray + member CapturedMethodGroupResolutions: ResizeArray /// Represents the empty set of resolutions - static member Empty : TcResolutions + static member Empty: TcResolutions [] @@ -372,16 +371,16 @@ type TcSymbolUseData = type internal TcSymbolUses = /// Get all the uses of a particular item within the file - member GetUsesOfSymbol : Item -> TcSymbolUseData[] + member GetUsesOfSymbol: Item -> TcSymbolUseData[] /// All the uses of all items within the file - member AllUsesOfSymbols : TcSymbolUseData[][] + member AllUsesOfSymbols: TcSymbolUseData[][] /// Get the locations of all the printf format specifiers in the file - member GetFormatSpecifierLocationsAndArity : unit -> (range * int)[] + member GetFormatSpecifierLocationsAndArity: unit -> (range * int)[] /// Empty collection of symbol uses - static member Empty : TcSymbolUses + static member Empty: TcSymbolUses /// Represents open declaration statement. type internal OpenDeclaration = @@ -389,7 +388,7 @@ type internal OpenDeclaration = Target: SynOpenDeclTarget /// Full range of the open declaration. - Range : range option + Range: range option /// Modules or namespaces which is opened with this declaration. Modules: ModuleOrNamespaceRef list @@ -401,71 +400,74 @@ type internal OpenDeclaration = AppliedScope: range /// If it's `namespace Xxx.Yyy` declaration. - IsOwnNamespace: bool } + IsOwnNamespace: bool + } /// Create a new instance of OpenDeclaration. - static member Create : target: SynOpenDeclTarget * modules: ModuleOrNamespaceRef list * types: TType list * appliedScope: range * isOwnNamespace: bool -> OpenDeclaration + static member Create: target: SynOpenDeclTarget * modules: ModuleOrNamespaceRef list * types: TType list * appliedScope: range * isOwnNamespace: bool -> OpenDeclaration /// Source text and an array of line end positions, used for format string parsing type FormatStringCheckContext = { /// Source text SourceText: ISourceText + /// Array of line start positions - LineStartPositions: int[] } + LineStartPositions: int[] + } /// An abstract type for reporting the results of name resolution and type checking type ITypecheckResultsSink = /// Record that an environment is active over the given scope range - abstract NotifyEnvWithScope : range * NameResolutionEnv * AccessorDomain -> unit + abstract NotifyEnvWithScope: range * NameResolutionEnv * AccessorDomain -> unit /// Record that an expression has a specific type at the given range. - abstract NotifyExprHasType : TType * NameResolutionEnv * AccessorDomain * range -> unit + abstract NotifyExprHasType: TType * NameResolutionEnv * AccessorDomain * range -> unit /// Record that a name resolution occurred at a specific location in the source - abstract NotifyNameResolution : pos * Item * TyparInst * ItemOccurence * NameResolutionEnv * AccessorDomain * range * bool -> unit + abstract NotifyNameResolution: pos * Item * TyparInst * ItemOccurence * NameResolutionEnv * AccessorDomain * range * bool -> unit /// Record that a method group name resolution occurred at a specific location in the source - abstract NotifyMethodGroupNameResolution : pos * Item * Item * TyparInst * ItemOccurence * NameResolutionEnv * AccessorDomain * range * bool -> unit + abstract NotifyMethodGroupNameResolution: pos * Item * Item * TyparInst * ItemOccurence * NameResolutionEnv * AccessorDomain * range * bool -> unit /// Record that a printf format specifier occurred at a specific location in the source - abstract NotifyFormatSpecifierLocation : range * int -> unit + abstract NotifyFormatSpecifierLocation: range * int -> unit /// Record that an open declaration occured in a given scope range - abstract NotifyOpenDeclaration : OpenDeclaration -> unit + abstract NotifyOpenDeclaration: OpenDeclaration -> unit /// Get the current source - abstract CurrentSourceText : ISourceText option + abstract CurrentSourceText: ISourceText option /// Cached line-end normalized source text and an array of line end positions, used for format string parsing - abstract FormatStringCheckContext : FormatStringCheckContext option + abstract FormatStringCheckContext: FormatStringCheckContext option /// An implementation of ITypecheckResultsSink to collect information during type checking type internal TcResultsSinkImpl = /// Create a TcResultsSinkImpl - new : tcGlobals : TcGlobals * ?sourceText: ISourceText -> TcResultsSinkImpl + new: tcGlobals: TcGlobals * ?sourceText: ISourceText -> TcResultsSinkImpl /// Get all the resolutions reported to the sink - member GetResolutions : unit -> TcResolutions + member GetResolutions: unit -> TcResolutions /// Get all the uses of all symbols reported to the sink - member GetSymbolUses : unit -> TcSymbolUses + member GetSymbolUses: unit -> TcSymbolUses /// Get all open declarations reported to the sink - member GetOpenDeclarations : unit -> OpenDeclaration[] + member GetOpenDeclarations: unit -> OpenDeclaration[] /// Get the format specifier locations - member GetFormatSpecifierLocations : unit -> (range * int)[] + member GetFormatSpecifierLocations: unit -> (range * int)[] interface ITypecheckResultsSink /// An abstract type for reporting the results of name resolution and type checking, and which allows /// temporary suspension and/or redirection of reporting. type TcResultsSink = - { mutable CurrentSink : ITypecheckResultsSink option } - static member NoSink : TcResultsSink - static member WithSink : ITypecheckResultsSink -> TcResultsSink + { mutable CurrentSink: ITypecheckResultsSink option } + static member NoSink: TcResultsSink + static member WithSink: ITypecheckResultsSink -> TcResultsSink /// Indicates if we only need one result or all possible results from a resolution. @@ -475,37 +477,37 @@ type ResultCollectionSettings = | AtMostOneResult /// Temporarily redirect reporting of name resolution and type checking results -val internal WithNewTypecheckResultsSink : ITypecheckResultsSink * TcResultsSink -> System.IDisposable +val internal WithNewTypecheckResultsSink: ITypecheckResultsSink * TcResultsSink -> System.IDisposable /// Temporarily suspend reporting of name resolution and type checking results -val internal TemporarilySuspendReportingTypecheckResultsToSink : TcResultsSink -> System.IDisposable +val internal TemporarilySuspendReportingTypecheckResultsToSink: TcResultsSink -> System.IDisposable /// Report the active name resolution environment for a source range -val internal CallEnvSink : TcResultsSink -> range * NameResolutionEnv * AccessorDomain -> unit +val internal CallEnvSink : TcResultsSink -> range * NameResolutionEnv * AccessorDomain -> unit /// Report a specific name resolution at a source range -val internal CallNameResolutionSink : TcResultsSink -> range * NameResolutionEnv * Item * TyparInst * ItemOccurence * AccessorDomain -> unit +val internal CallNameResolutionSink: TcResultsSink -> range * NameResolutionEnv * Item * TyparInst * ItemOccurence * AccessorDomain -> unit /// Report a specific method group name resolution at a source range -val internal CallMethodGroupNameResolutionSink : TcResultsSink -> range * NameResolutionEnv * Item * Item * TyparInst * ItemOccurence * AccessorDomain -> unit +val internal CallMethodGroupNameResolutionSink: TcResultsSink -> range * NameResolutionEnv * Item * Item * TyparInst * ItemOccurence * AccessorDomain -> unit /// Report a specific name resolution at a source range, replacing any previous resolutions -val internal CallNameResolutionSinkReplacing : TcResultsSink -> range * NameResolutionEnv * Item * TyparInst * ItemOccurence * AccessorDomain -> unit +val internal CallNameResolutionSinkReplacing: TcResultsSink -> range * NameResolutionEnv * Item * TyparInst * ItemOccurence * AccessorDomain -> unit /// Report a specific name resolution at a source range -val internal CallExprHasTypeSink : TcResultsSink -> range * NameResolutionEnv * TType * AccessorDomain -> unit +val internal CallExprHasTypeSink : TcResultsSink -> range * NameResolutionEnv * TType * AccessorDomain -> unit /// Report an open declaration -val internal CallOpenDeclarationSink : TcResultsSink -> OpenDeclaration -> unit +val internal CallOpenDeclarationSink: TcResultsSink -> OpenDeclaration -> unit /// Get all the available properties of a type (both intrinsic and extension) -val internal AllPropInfosOfTypeInScope : ResultCollectionSettings -> InfoReader -> NameResolutionEnv -> string option -> AccessorDomain -> FindMemberFlag -> range -> TType -> PropInfo list +val internal AllPropInfosOfTypeInScope: ResultCollectionSettings -> InfoReader -> NameResolutionEnv -> string option -> AccessorDomain -> FindMemberFlag -> range -> TType -> PropInfo list /// Get all the available properties of a type (only extension) -val internal ExtensionPropInfosOfTypeInScope : ResultCollectionSettings -> InfoReader -> NameResolutionEnv -> string option -> AccessorDomain -> range -> TType -> PropInfo list +val internal ExtensionPropInfosOfTypeInScope: ResultCollectionSettings -> InfoReader -> NameResolutionEnv -> string option -> AccessorDomain -> range -> TType -> PropInfo list /// Get the available methods of a type (both declared and inherited) -val internal AllMethInfosOfTypeInScope : ResultCollectionSettings -> InfoReader -> NameResolutionEnv -> string option -> AccessorDomain -> FindMemberFlag -> range -> TType -> MethInfo list +val internal AllMethInfosOfTypeInScope: ResultCollectionSettings -> InfoReader -> NameResolutionEnv -> string option -> AccessorDomain -> FindMemberFlag -> range -> TType -> MethInfo list /// Used to report an error condition where name resolution failed due to an indeterminate type exception internal IndeterminateType of range @@ -514,7 +516,7 @@ exception internal IndeterminateType of range exception internal UpperCaseIdentifierInPattern of range /// Generate a new reference to a record field with a fresh type instantiation -val FreshenRecdFieldRef :NameResolver -> Range.range -> RecdFieldRef -> RecdFieldInfo +val FreshenRecdFieldRef :NameResolver -> range -> RecdFieldRef -> RecdFieldInfo /// Indicates the kind of lookup being performed. Note, this type should be made private to nameres.fs. [] @@ -539,34 +541,34 @@ type PermitDirectReferenceToGeneratedType = | No /// Resolve a long identifier to a namespace, module. -val internal ResolveLongIdentAsModuleOrNamespace : TcResultsSink -> ResultCollectionSettings -> Import.ImportMap -> range -> first: bool -> FullyQualifiedFlag -> NameResolutionEnv -> AccessorDomain -> Ident -> Ident list -> isOpenDecl: bool -> ResultOrException<(int * ModuleOrNamespaceRef * ModuleOrNamespaceType) list > +val internal ResolveLongIdentAsModuleOrNamespace: TcResultsSink -> ResultCollectionSettings -> Import.ImportMap -> range -> first: bool -> FullyQualifiedFlag -> NameResolutionEnv -> AccessorDomain -> Ident -> Ident list -> isOpenDecl: bool -> ResultOrException<(int * ModuleOrNamespaceRef * ModuleOrNamespaceType) list > /// Resolve a long identifier to an object constructor. -val internal ResolveObjectConstructor : NameResolver -> DisplayEnv -> range -> AccessorDomain -> TType -> ResultOrException +val internal ResolveObjectConstructor : NameResolver -> DisplayEnv -> range -> AccessorDomain -> TType -> ResultOrException /// Resolve a long identifier using type-qualified name resolution. -val internal ResolveLongIdentInType : TcResultsSink -> NameResolver -> NameResolutionEnv -> LookupKind -> range -> AccessorDomain -> Ident -> FindMemberFlag -> TypeNameResolutionInfo -> TType -> Item * Ident list +val internal ResolveLongIdentInType : TcResultsSink -> NameResolver -> NameResolutionEnv -> LookupKind -> range -> AccessorDomain -> Ident -> FindMemberFlag -> TypeNameResolutionInfo -> TType -> Item * Ident list /// Resolve a long identifier when used in a pattern. -val internal ResolvePatternLongIdent : TcResultsSink -> NameResolver -> WarnOnUpperFlag -> bool -> range -> AccessorDomain -> NameResolutionEnv -> TypeNameResolutionInfo -> Ident list -> Item +val internal ResolvePatternLongIdent : TcResultsSink -> NameResolver -> WarnOnUpperFlag -> bool -> range -> AccessorDomain -> NameResolutionEnv -> TypeNameResolutionInfo -> Ident list -> Item /// Resolve a long identifier representing a type name -val internal ResolveTypeLongIdentInTyconRef : TcResultsSink -> NameResolver -> NameResolutionEnv -> TypeNameResolutionInfo -> AccessorDomain -> range -> ModuleOrNamespaceRef -> Ident list -> TyconRef +val internal ResolveTypeLongIdentInTyconRef : TcResultsSink -> NameResolver -> NameResolutionEnv -> TypeNameResolutionInfo -> AccessorDomain -> range -> ModuleOrNamespaceRef -> Ident list -> TyconRef /// Resolve a long identifier to a type definition -val internal ResolveTypeLongIdent : TcResultsSink -> NameResolver -> ItemOccurence -> FullyQualifiedFlag -> NameResolutionEnv -> AccessorDomain -> Ident list -> TypeNameResolutionStaticArgsInfo -> PermitDirectReferenceToGeneratedType -> ResultOrException +val internal ResolveTypeLongIdent : TcResultsSink -> NameResolver -> ItemOccurence -> FullyQualifiedFlag -> NameResolutionEnv -> AccessorDomain -> Ident list -> TypeNameResolutionStaticArgsInfo -> PermitDirectReferenceToGeneratedType -> ResultOrException /// Resolve a long identifier to a field -val internal ResolveField : TcResultsSink -> NameResolver -> NameResolutionEnv -> AccessorDomain -> TType -> Ident list * Ident -> Ident list -> FieldResolution list +val internal ResolveField : TcResultsSink -> NameResolver -> NameResolutionEnv -> AccessorDomain -> TType -> Ident list * Ident -> Ident list -> FieldResolution list /// Resolve a long identifier occurring in an expression position -val internal ResolveExprLongIdent : TcResultsSink -> NameResolver -> range -> AccessorDomain -> NameResolutionEnv -> TypeNameResolutionInfo -> Ident list -> ResultOrException +val internal ResolveExprLongIdent : TcResultsSink -> NameResolver -> range -> AccessorDomain -> NameResolutionEnv -> TypeNameResolutionInfo -> Ident list -> ResultOrException /// Resolve a (possibly incomplete) long identifier to a loist of possible class or record fields -val internal ResolvePartialLongIdentToClassOrRecdFields : NameResolver -> NameResolutionEnv -> range -> AccessorDomain -> string list -> bool -> Item list +val internal ResolvePartialLongIdentToClassOrRecdFields: NameResolver -> NameResolutionEnv -> range -> AccessorDomain -> string list -> bool -> Item list /// Return the fields for the given class or record -val internal ResolveRecordOrClassFieldsOfType : NameResolver -> range -> AccessorDomain -> TType -> bool -> Item list +val internal ResolveRecordOrClassFieldsOfType : NameResolver -> range -> AccessorDomain -> TType -> bool -> Item list /// Specifies extra work to do after overload resolution [] @@ -586,19 +588,19 @@ type AfterResolution = | RecordResolution of Item option * (TyparInst -> unit) * (MethInfo * PropInfo option * TyparInst -> unit) * (unit -> unit) /// Resolve a long identifier occurring in an expression position. -val internal ResolveLongIdentAsExprAndComputeRange : TcResultsSink -> NameResolver -> range -> AccessorDomain -> NameResolutionEnv -> TypeNameResolutionInfo -> Ident list -> ResultOrException +val internal ResolveLongIdentAsExprAndComputeRange: TcResultsSink -> NameResolver -> range -> AccessorDomain -> NameResolutionEnv -> TypeNameResolutionInfo -> Ident list -> ResultOrException /// Resolve a long identifier occurring in an expression position, qualified by a type. -val internal ResolveExprDotLongIdentAndComputeRange : TcResultsSink -> NameResolver -> range -> AccessorDomain -> NameResolutionEnv -> TType -> Ident list -> TypeNameResolutionInfo -> FindMemberFlag -> bool -> Item * range * Ident list * AfterResolution +val internal ResolveExprDotLongIdentAndComputeRange: TcResultsSink -> NameResolver -> range -> AccessorDomain -> NameResolutionEnv -> TType -> Ident list -> TypeNameResolutionInfo -> FindMemberFlag -> bool -> Item * range * Ident list * AfterResolution /// A generator of type instantiations used when no more specific type instantiation is known. -val FakeInstantiationGenerator : range -> Typar list -> TType list +val FakeInstantiationGenerator: range -> Typar list -> TType list /// Try to resolve a long identifier as type. -val TryToResolveLongIdentAsType : NameResolver -> NameResolutionEnv -> range -> string list -> TType option +val TryToResolveLongIdentAsType: NameResolver -> NameResolutionEnv -> range -> string list -> TType option /// Resolve a (possibly incomplete) long identifier to a set of possible resolutions. -val ResolvePartialLongIdent : NameResolver -> NameResolutionEnv -> (MethInfo -> TType -> bool) -> range -> AccessorDomain -> string list -> bool -> Item list +val ResolvePartialLongIdent: NameResolver -> NameResolutionEnv -> (MethInfo -> TType -> bool) -> range -> AccessorDomain -> string list -> bool -> Item list [] type ResolveCompletionTargets = @@ -606,11 +608,11 @@ type ResolveCompletionTargets = | SettablePropertiesAndFields /// Resolve a (possibly incomplete) long identifier to a set of possible resolutions, qualified by type. -val ResolveCompletionsInType : NameResolver -> NameResolutionEnv -> ResolveCompletionTargets -> Range.range -> AccessorDomain -> bool -> TType -> Item list +val ResolveCompletionsInType : NameResolver -> NameResolutionEnv -> ResolveCompletionTargets -> range -> AccessorDomain -> bool -> TType -> Item list -val GetVisibleNamespacesAndModulesAtPoint : NameResolver -> NameResolutionEnv -> range -> AccessorDomain -> ModuleOrNamespaceRef list +val GetVisibleNamespacesAndModulesAtPoint: NameResolver -> NameResolutionEnv -> range -> AccessorDomain -> ModuleOrNamespaceRef list -val IsItemResolvable : NameResolver -> NameResolutionEnv -> range -> AccessorDomain -> string list -> Item -> bool +val IsItemResolvable: NameResolver -> NameResolutionEnv -> range -> AccessorDomain -> string list -> Item -> bool -val TrySelectExtensionMethInfoOfILExtMem : range -> ImportMap -> TType -> TyconRef * MethInfo * ExtensionMethodPriority -> MethInfo option +val TrySelectExtensionMethInfoOfILExtMem: range -> ImportMap -> TType -> TyconRef * MethInfo * ExtensionMethodPriority -> MethInfo option \ No newline at end of file diff --git a/src/fsharp/NicePrint.fs b/src/fsharp/NicePrint.fs index 23fade2dfc1..4cf03cb77ec 100755 --- a/src/fsharp/NicePrint.fs +++ b/src/fsharp/NicePrint.fs @@ -3,22 +3,25 @@ /// Print Signatures/Types, for signatures, intellisense, quick info, FSI responses module internal FSharp.Compiler.NicePrint +open Internal.Utilities.Collections +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras +open Internal.Utilities.Rational open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AttributeChecking open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Infos open FSharp.Compiler.InfoReader -open FSharp.Compiler.Layout -open FSharp.Compiler.Layout.TaggedTextOps -open FSharp.Compiler.Lib -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Rational -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Layout +open FSharp.Compiler.Text.LayoutRender +open FSharp.Compiler.Text.TaggedText +open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps @@ -31,15 +34,15 @@ module internal PrintUtilities = let squareAngleL x = LeftL.leftBracketAngle ^^ x ^^ RightL.rightBracketAngle - let angleL x = sepL Literals.leftAngle ^^ x ^^ rightL Literals.rightAngle + let angleL x = sepL TaggedText.leftAngle ^^ x ^^ rightL TaggedText.rightAngle - let braceL x = wordL Literals.leftBrace ^^ x ^^ wordL Literals.rightBrace + let braceL x = wordL TaggedText.leftBrace ^^ x ^^ wordL TaggedText.rightBrace - let braceBarL x = wordL Literals.leftBraceBar ^^ x ^^ wordL Literals.rightBraceBar + let braceBarL x = wordL TaggedText.leftBraceBar ^^ x ^^ wordL TaggedText.rightBraceBar let comment str = wordL (tagText (sprintf "(* %s *)" str)) - let layoutsL (ls: layout list) : layout = + let layoutsL (ls: Layout list) : Layout = match ls with | [] -> emptyL | [x] -> x @@ -118,10 +121,97 @@ module internal PrintUtilities = let tcref = attrib.TyconRef squareAngleL (layoutTyconRefImpl true denv tcref) + /// layout the xml docs immediately before another block + let layoutXmlDoc (denv: DisplayEnv) (xml: XmlDoc) restL = + if denv.showDocumentation + then + let xmlDocL = + if xml.IsEmpty + then + emptyL + else + xml.UnprocessedLines + |> Array.map (fun x -> + x.Split('\n') // These lines may have new-lines in them and we need to split them so we can format it + ) + |> Array.concat + /// note here that we don't add a space after the triple-slash, because + /// the implicit spacing hasn't been trimmed here. + |> Array.map (fun line -> ("///" + line) |> tagText |> wordL) + |> List.ofArray + |> aboveListL + xmlDocL @@ restL + else restL + + let private layoutXmlDocFromSig (denv: DisplayEnv) (infoReader: InfoReader) (possibleXmlDoc: XmlDoc) restL (info: (string option * string) option) = + let xmlDoc = + if possibleXmlDoc.IsEmpty then + match info with + | Some(Some ccuFileName, xmlDocSig) -> + infoReader.amap.assemblyLoader.TryFindXmlDocumentationInfo(System.IO.Path.GetFileNameWithoutExtension ccuFileName) + |> Option.bind (fun xmlDocInfo -> + xmlDocInfo.TryGetXmlDocBySig(xmlDocSig) + ) + |> Option.defaultValue possibleXmlDoc + | _ -> + possibleXmlDoc + else + possibleXmlDoc + layoutXmlDoc denv xmlDoc restL + + let layoutXmlDocOfValRef (denv: DisplayEnv) (infoReader: InfoReader) (vref: ValRef) restL = + if denv.showDocumentation then + GetXmlDocSigOfValRef denv.g vref + |> layoutXmlDocFromSig denv infoReader vref.XmlDoc restL + else + restL + + let layoutXmlDocOfMethInfo (denv: DisplayEnv) (infoReader: InfoReader) (minfo: MethInfo) restL = + if denv.showDocumentation then + GetXmlDocSigOfMethInfo infoReader Range.range0 minfo + |> layoutXmlDocFromSig denv infoReader minfo.XmlDoc restL + else + restL + + let layoutXmlDocOfPropInfo (denv: DisplayEnv) (infoReader: InfoReader) (pinfo: PropInfo) restL = + if denv.showDocumentation then + GetXmlDocSigOfProp infoReader Range.range0 pinfo + |> layoutXmlDocFromSig denv infoReader pinfo.XmlDoc restL + else + restL + + let layoutXmlDocOfEventInfo (denv: DisplayEnv) (infoReader: InfoReader) (einfo: EventInfo) restL = + if denv.showDocumentation then + GetXmlDocSigOfEvent infoReader Range.range0 einfo + |> layoutXmlDocFromSig denv infoReader einfo.XmlDoc restL + else + restL + + let layoutXmlDocOfRecdFieldRef (denv: DisplayEnv) (infoReader: InfoReader) (rfref: RecdFieldRef) restL = + if denv.showDocumentation then + GetXmlDocSigOfRecdFieldRef rfref + |> layoutXmlDocFromSig denv infoReader rfref.RecdField.XmlDoc restL + else + restL + + let layoutXmlDocOfUnionCaseRef (denv: DisplayEnv) (infoReader: InfoReader) (ucref: UnionCaseRef) restL = + if denv.showDocumentation then + GetXmlDocSigOfUnionCaseRef ucref + |> layoutXmlDocFromSig denv infoReader ucref.UnionCase.XmlDoc restL + else + restL + + let layoutXmlDocOfEntityRef (denv: DisplayEnv) (infoReader: InfoReader) (eref: EntityRef) restL = + if denv.showDocumentation then + GetXmlDocSigOfEntityRef infoReader Range.range0 eref + |> layoutXmlDocFromSig denv infoReader eref.XmlDoc restL + else + restL + module private PrintIL = let fullySplitILTypeRef (tref: ILTypeRef) = - (List.collect IL.splitNamespace (tref.Enclosing @ [PrettyNaming.DemangleGenericTypeName tref.Name])) + (List.collect IL.splitNamespace (tref.Enclosing @ [DemangleGenericTypeName tref.Name])) let layoutILTypeRefName denv path = let path = @@ -159,14 +249,14 @@ module private PrintIL = let layoutILArrayShape (ILArrayShape sh) = SepL.leftBracket ^^ wordL (tagPunctuation (sh |> List.tail |> List.map (fun _ -> ",") |> String.concat "")) ^^ RightL.rightBracket // drop off one "," so that a n-dimensional array has n - 1 ","'s - let paramsL (ps: layout list) : layout = + let paramsL (ps: Layout list) : Layout = match ps with | [] -> emptyL | _ -> let body = Layout.commaListL ps SepL.leftAngle ^^ body ^^ RightL.rightAngle - let pruneParams (className: string) (ilTyparSubst: layout list) = + let pruneParams (className: string) (ilTyparSubst: Layout list) = let numParams = // can't find a way to see the number of generic parameters for *this* class (the GenericParams also include type variables for enclosing classes); this will have to do let rightMost = className |> SplitNamesForILPath |> List.last @@ -175,7 +265,7 @@ module private PrintIL = | false, _ -> 0 // looks like it's non-generic ilTyparSubst |> List.rev |> List.truncate numParams |> List.rev - let rec layoutILType (denv: DisplayEnv) (ilTyparSubst: layout list) (ty: ILType) : layout = + let rec layoutILType (denv: DisplayEnv) (ilTyparSubst: Layout list) (ty: ILType) : Layout = match ty with | ILType.Void -> WordL.structUnit // These are type-theoretically totally different type-theoretically `void` is Fin 0 and `unit` is Fin (S 0) ... but, this looks like as close as we can get. | ILType.Array (sh, t) -> layoutILType denv ilTyparSubst t ^^ layoutILArrayShape sh @@ -197,7 +287,7 @@ module private PrintIL = let res = match cons with | Some className -> - let names = SplitNamesForILPath (PrettyNaming.DemangleGenericTypeName className) + let names = SplitNamesForILPath (DemangleGenericTypeName className) // special case for constructor return-type (viz., the class itself) layoutILTypeRefName denv names ^^ (pruneParams className ilTyparSubst |> paramsL) | None -> @@ -215,8 +305,8 @@ module private PrintIL = match init with | ILFieldInit.Bool x -> if x - then Some Literals.keywordTrue - else Some Literals.keywordFalse + then Some TaggedText.keywordTrue + else Some TaggedText.keywordFalse | ILFieldInit.Char c -> ("'" + (char c).ToString () + "'") |> (tagStringLiteral >> Some) | ILFieldInit.Int8 x -> ((x |> int32 |> string) + "y") |> (tagNumericLiteral >> Some) | ILFieldInit.Int16 x -> ((x |> int32 |> string) + "s") |> (tagNumericLiteral >> Some) @@ -254,7 +344,7 @@ module private PrintTypes = let layoutConst g ty c = let str = match c with - | Const.Bool x -> if x then Literals.keywordTrue else Literals.keywordFalse + | Const.Bool x -> if x then TaggedText.keywordTrue else TaggedText.keywordFalse | Const.SByte x -> (x |> string)+"y" |> tagNumericLiteral | Const.Byte x -> (x |> string)+"uy" |> tagNumericLiteral | Const.Int16 x -> (x |> string)+"s" |> tagNumericLiteral @@ -300,12 +390,12 @@ module private PrintTypes = | _ -> itemL /// Layout a reference to a type - let layoutTyconRef denv tycon = layoutTyconRefImpl false denv tycon + let layoutTyconRefImpl denv tycon = layoutTyconRefImpl false denv tycon /// Layout the flags of a member - let layoutMemberFlags memFlags = + let layoutMemberFlags (memFlags: SynMemberFlags) = let stat = - if memFlags.IsInstance || (memFlags.MemberKind = MemberKind.Constructor) then emptyL + if memFlags.IsInstance || (memFlags.MemberKind = SynMemberKind.Constructor) then emptyL else WordL.keywordStatic let stat = if memFlags.IsDispatchSlot then stat ++ WordL.keywordAbstract @@ -314,12 +404,12 @@ module private PrintTypes = let stat = if memFlags.IsOverrideOrExplicitImpl then stat else match memFlags.MemberKind with - | MemberKind.ClassConstructor - | MemberKind.Constructor - | MemberKind.PropertyGetSet -> stat - | MemberKind.Member - | MemberKind.PropertyGet - | MemberKind.PropertySet -> stat ++ WordL.keywordMember + | SynMemberKind.ClassConstructor + | SynMemberKind.Constructor + | SynMemberKind.PropertyGetSet -> stat + | SynMemberKind.Member + | SynMemberKind.PropertyGet + | SynMemberKind.PropertySet -> stat ++ WordL.keywordMember // let stat = if memFlags.IsFinal then stat ++ wordL "final" else stat in stat @@ -384,7 +474,7 @@ module private PrintTypes = let _, _, _, rty, _ = GetTypeOfMemberInMemberForm denv.g vref let rty = GetFSharpViewOfReturnType denv.g rty let tcref = tcrefOfAppTy denv.g rty - layoutTyconRef denv tcref ++ argsL + layoutTyconRefImpl denv tcref ++ argsL and layoutILAttribElement denv arg = match arg with @@ -612,7 +702,7 @@ module private PrintTypes = let negvs, posvs = ListMeasureVarOccsWithNonZeroExponents unt |> sortVars |> List.partition (fun (_, e) -> SignRational e < 0) let negcs, poscs = ListMeasureConOccsWithNonZeroExponents denv.g false unt |> sortCons |> List.partition (fun (_, e) -> SignRational e < 0) let unparL uv = layoutTyparRef denv uv - let unconL tc = layoutTyconRef denv tc + let unconL tc = layoutTyconRefImpl denv tc let rationalL e = wordL (tagNumericLiteral (RationalToString e)) let measureToPowerL x e = if e = OneRational then x else x -- wordL (tagPunctuation "^") -- rationalL e let prefix = spaceListL (List.map (fun (v, e) -> measureToPowerL (unparL v) e) posvs @ @@ -664,7 +754,7 @@ module private PrintTypes = | GenericParameterStyle.Implicit -> tc.IsPrefixDisplay | GenericParameterStyle.Prefix -> true | GenericParameterStyle.Suffix -> false - layoutTypeAppWithInfoAndPrec denv env (layoutTyconRef denv tc) prec usePrefix args + layoutTypeAppWithInfoAndPrec denv env (layoutTyconRefImpl denv tc) prec usePrefix args | TType_ucase (UnionCaseRef(tc, _), args) -> let usePrefix = @@ -672,7 +762,7 @@ module private PrintTypes = | GenericParameterStyle.Implicit -> tc.IsPrefixDisplay | GenericParameterStyle.Prefix -> true | GenericParameterStyle.Suffix -> false - layoutTypeAppWithInfoAndPrec denv env (layoutTyconRef denv tc) prec usePrefix args + layoutTypeAppWithInfoAndPrec denv env (layoutTyconRefImpl denv tc) prec usePrefix args // Layout a tuple type | TType_anon (anonInfo, tys) -> @@ -893,10 +983,9 @@ module private PrintTypes = let typesWithDiscrimants,typarsAndCxs = PrettyTypes.PrettifyDiscriminantAndTypePairs denv.g typesWithDiscrimants let retTy = typesWithDiscrimants |> List.find (function (0, _) -> true | _ -> false) |> snd let argInfos = - typesWithDiscrimants + typesWithDiscrimants |> List.choose (function (1,ty) -> Some ty | _ -> None) - |> List.zip argInfos - |> List.map (fun ((_,argInfo),tTy) -> tTy, argInfo) + |> List.map2 (fun (_, argInfo) tTy -> tTy, argInfo) argInfos let genParamTys = typesWithDiscrimants |> List.choose (function (2,ty) -> Some ty | _ -> None) @@ -927,6 +1016,12 @@ module private PrintTypes = module private PrintTastMemberOrVals = open PrintTypes + let mkInlineL denv (v: Val) nameL = + if v.MustInline && not denv.suppressInlineKeyword then + wordL (tagKeyword "inline") ++ nameL + else + nameL + let private prettyLayoutOfMemberShortOption denv typarInst (v:Val) short = let v = mkLocalValRef v let membInfo = Option.get v.MemberInfo @@ -942,80 +1037,84 @@ module private PrintTastMemberOrVals = let mkNameL niceMethodTypars tagFunction name = let nameL = DemangleOperatorNameAsLayout (tagFunction >> mkNav v.DefinitionRange) name - let nameL = + let nameL = if denv.showMemberContainers then - layoutTyconRef denv v.MemberApparentEntity ^^ SepL.dot ^^ nameL - else + layoutTyconRefImpl denv v.MemberApparentEntity ^^ SepL.dot ^^ nameL + else nameL let nameL = if denv.showTyparBinding then layoutTyparDecls denv nameL true niceMethodTypars else nameL let nameL = layoutAccessibility denv v.Accessibility nameL nameL - match membInfo.MemberFlags.MemberKind with - | MemberKind.Member -> - let prettyTyparInst, niceMethodTypars,tauL = prettyLayoutOfMemberType denv v typarInst argInfos rty - let resL = - if short then tauL - else - let nameL = mkNameL niceMethodTypars tagMember v.LogicalName - stat --- (nameL ^^ WordL.colon ^^ tauL) - prettyTyparInst, resL - - | MemberKind.ClassConstructor - | MemberKind.Constructor -> - let prettyTyparInst, _, tauL = prettyLayoutOfMemberType denv v typarInst argInfos rty - let resL = - if short then tauL - else - let newL = layoutAccessibility denv v.Accessibility WordL.keywordNew - stat ++ newL ^^ wordL (tagPunctuation ":") ^^ tauL - prettyTyparInst, resL - - | MemberKind.PropertyGetSet -> - emptyTyparInst, stat - - | MemberKind.PropertyGet -> - if isNil argInfos then - // use error recovery because intellisense on an incomplete file will show this - errorR(Error(FSComp.SR.tastInvalidFormForPropertyGetter(), v.Id.idRange)) - let nameL = mkNameL [] tagProperty v.CoreDisplayName - let resL = - if short then nameL --- (WordL.keywordWith ^^ WordL.keywordGet) - else stat --- nameL --- (WordL.keywordWith ^^ WordL.keywordGet) - emptyTyparInst, resL - else - let argInfos = - match argInfos with - | [[(ty, _)]] when isUnitTy denv.g ty -> [] - | _ -> argInfos + let prettyTyparInst, memberL = + match membInfo.MemberFlags.MemberKind with + | SynMemberKind.Member -> let prettyTyparInst, niceMethodTypars,tauL = prettyLayoutOfMemberType denv v typarInst argInfos rty - let resL = - if short then - if isNil argInfos then tauL - else tauL --- (WordL.keywordWith ^^ WordL.keywordGet) + let resL = + if short then tauL else - let nameL = mkNameL niceMethodTypars tagProperty v.CoreDisplayName - stat --- (nameL ^^ WordL.colon ^^ (if isNil argInfos then tauL else tauL --- (WordL.keywordWith ^^ WordL.keywordGet))) + let nameL = mkNameL niceMethodTypars tagMember v.LogicalName + let nameL = if short then nameL else mkInlineL denv v.Deref nameL + stat --- (nameL ^^ WordL.colon ^^ tauL) prettyTyparInst, resL - | MemberKind.PropertySet -> - if argInfos.Length <> 1 || isNil argInfos.Head then - // use error recovery because intellisense on an incomplete file will show this - errorR(Error(FSComp.SR.tastInvalidFormForPropertySetter(), v.Id.idRange)) - let nameL = mkNameL [] tagProperty v.CoreDisplayName - let resL = stat --- nameL --- (WordL.keywordWith ^^ WordL.keywordSet) - emptyTyparInst, resL - else - let argInfos, valueInfo = List.frontAndBack argInfos.Head - let prettyTyparInst, niceMethodTypars, tauL = prettyLayoutOfMemberType denv v typarInst (if isNil argInfos then [] else [argInfos]) (fst valueInfo) + | SynMemberKind.ClassConstructor + | SynMemberKind.Constructor -> + let prettyTyparInst, _, tauL = prettyLayoutOfMemberType denv v typarInst argInfos rty let resL = - if short then - (tauL --- (WordL.keywordWith ^^ WordL.keywordSet)) + if short then tauL else - let nameL = mkNameL niceMethodTypars tagProperty v.CoreDisplayName - stat --- (nameL ^^ wordL (tagPunctuation ":") ^^ (tauL --- (WordL.keywordWith ^^ WordL.keywordSet))) + let newL = layoutAccessibility denv v.Accessibility WordL.keywordNew + stat ++ newL ^^ wordL (tagPunctuation ":") ^^ tauL prettyTyparInst, resL - + + | SynMemberKind.PropertyGetSet -> + emptyTyparInst, stat + + | SynMemberKind.PropertyGet -> + if isNil argInfos then + // use error recovery because intellisense on an incomplete file will show this + errorR(Error(FSComp.SR.tastInvalidFormForPropertyGetter(), v.Id.idRange)) + let nameL = mkNameL [] tagProperty v.CoreDisplayName + let resL = + if short then nameL --- (WordL.keywordWith ^^ WordL.keywordGet) + else stat --- nameL --- (WordL.keywordWith ^^ WordL.keywordGet) + emptyTyparInst, resL + else + let argInfos = + match argInfos with + | [[(ty, _)]] when isUnitTy denv.g ty -> [] + | _ -> argInfos + let prettyTyparInst, niceMethodTypars,tauL = prettyLayoutOfMemberType denv v typarInst argInfos rty + let resL = + if short then + if isNil argInfos then tauL + else tauL --- (WordL.keywordWith ^^ WordL.keywordGet) + else + let nameL = mkNameL niceMethodTypars tagProperty v.CoreDisplayName + stat --- (nameL ^^ WordL.colon ^^ (if isNil argInfos then tauL else tauL --- (WordL.keywordWith ^^ WordL.keywordGet))) + prettyTyparInst, resL + + | SynMemberKind.PropertySet -> + if argInfos.Length <> 1 || isNil argInfos.Head then + // use error recovery because intellisense on an incomplete file will show this + errorR(Error(FSComp.SR.tastInvalidFormForPropertySetter(), v.Id.idRange)) + let nameL = mkNameL [] tagProperty v.CoreDisplayName + let resL = stat --- nameL --- (WordL.keywordWith ^^ WordL.keywordSet) + emptyTyparInst, resL + else + let argInfos, valueInfo = List.frontAndBack argInfos.Head + let prettyTyparInst, niceMethodTypars, tauL = prettyLayoutOfMemberType denv v typarInst (if isNil argInfos then [] else [argInfos]) (fst valueInfo) + let resL = + if short then + (tauL --- (WordL.keywordWith ^^ WordL.keywordSet)) + else + let nameL = mkNameL niceMethodTypars tagProperty v.CoreDisplayName + stat --- (nameL ^^ wordL (tagPunctuation ":") ^^ (tauL --- (WordL.keywordWith ^^ WordL.keywordSet))) + prettyTyparInst, resL + + prettyTyparInst, memberL + let prettyLayoutOfMember denv typarInst (v:Val) = prettyLayoutOfMemberShortOption denv typarInst v false let prettyLayoutOfMemberNoInstShort denv v = @@ -1072,13 +1171,9 @@ module private PrintTastMemberOrVals = let nameL = if v.IsMutable && not denv.suppressMutableKeyword then wordL (tagKeyword "mutable") ++ nameL - else - nameL - let nameL = - if v.MustInline && not denv.suppressInlineKeyword then - wordL (tagKeyword "inline") ++ nameL - else - nameL + else + nameL + let nameL = mkInlineL denv v nameL let isOverGeneric = List.length (Zset.elements (freeInType CollectTyparsNoCaching tau).FreeTypars) < List.length tps // Bug: 1143 let isTyFunction = v.IsTypeFunction // Bug: 1143, and innerpoly tests @@ -1095,24 +1190,27 @@ module private PrintTastMemberOrVals = | Some literalValue -> valAndTypeL ++ layoutOfLiteralValue literalValue | None -> valAndTypeL - let prettyLayoutOfValOrMember denv typarInst (v: Val) = - let prettyTyparInst, vL = - match v.MemberInfo with - | None -> - let tps, tau = v.TypeScheme + let prettyLayoutOfValOrMember denv infoReader typarInst (vref: ValRef) = + let prettyTyparInst, vL = + match vref.MemberInfo with + | None -> + let tps, tau = vref.TypeScheme // adjust the type in case this is the 'this' pointer stored in a reference cell - let tau = StripSelfRefCell(denv.g, v.BaseOrThisInfo, tau) + let tau = StripSelfRefCell(denv.g, vref.BaseOrThisInfo, tau) let (prettyTyparInst, prettyTypars, prettyTauTy), cxs = PrettyTypes.PrettifyInstAndTyparsAndType denv.g (typarInst, tps, tau) - let resL = layoutNonMemberVal denv (prettyTypars, v, prettyTauTy, cxs) + let resL = layoutNonMemberVal denv (prettyTypars, vref.Deref, prettyTauTy, cxs) prettyTyparInst, resL | Some _ -> - prettyLayoutOfMember denv typarInst v - prettyTyparInst, layoutAttribs denv true v.Type TyparKind.Type v.Attribs vL + prettyLayoutOfMember denv typarInst vref.Deref + + prettyTyparInst, + layoutAttribs denv true vref.Type TyparKind.Type vref.Attribs vL + |> layoutXmlDocOfValRef denv infoReader vref - let prettyLayoutOfValOrMemberNoInst denv v = - prettyLayoutOfValOrMember denv emptyTyparInst v |> snd + let prettyLayoutOfValOrMemberNoInst denv infoReader v = + prettyLayoutOfValOrMember denv infoReader emptyTyparInst v |> snd let layoutTyparConstraint denv x = x |> PrintTypes.layoutTyparConstraint denv @@ -1122,9 +1220,9 @@ let layoutType denv x = x |> PrintTypes.layoutType denv let outputTypars denv nm os x = x |> PrintTypes.layoutTyparDecls denv (wordL nm) true |> bufferL os -let outputTyconRef denv os x = x |> PrintTypes.layoutTyconRef denv |> bufferL os +let outputTyconRef denv os x = x |> PrintTypes.layoutTyconRefImpl denv |> bufferL os -let layoutTyconRef denv x = x |> PrintTypes.layoutTyconRef denv +let layoutTyconRef denv x = x |> PrintTypes.layoutTyconRefImpl denv let layoutConst g ty c = PrintTypes.layoutConst g ty c @@ -1149,8 +1247,13 @@ module InfoMemberPrinting = | _, Some nm, true, ptyOpt -> // detect parameter type, if ptyOpt is None - this is .NET style optional argument let pty = match ptyOpt with ValueSome x -> x | _ -> pty + let idText = + if denv.escapeKeywordNames && Lexhelp.Keywords.keywordNames |> List.contains nm.idText then + "``" + nm.idText + "``" + else + nm.idText SepL.questionMark ^^ - wordL (tagParameter nm.idText) ^^ + wordL (tagParameter idText) ^^ RightL.colon ^^ PrintTypes.layoutType denv pty // Layout an unnamed argument @@ -1158,12 +1261,22 @@ module InfoMemberPrinting = PrintTypes.layoutType denv pty // Layout a named argument | true, Some nm, _, _ -> + let idText = + if denv.escapeKeywordNames && Lexhelp.Keywords.keywordNames |> List.contains nm.idText then + "``" + nm.idText + "``" + else + nm.idText layoutBuiltinAttribute denv denv.g.attrib_ParamArrayAttribute ^^ - wordL (tagParameter nm.idText) ^^ + wordL (tagParameter idText) ^^ RightL.colon ^^ PrintTypes.layoutType denv pty | false, Some nm, _, _ -> - wordL (tagParameter nm.idText) ^^ + let idText = + if denv.escapeKeywordNames && Lexhelp.Keywords.keywordNames |> List.contains nm.idText then + "``" + nm.idText + "``" + else + nm.idText + wordL (tagParameter idText) ^^ RightL.colon ^^ PrintTypes.layoutType denv pty @@ -1174,10 +1287,12 @@ module InfoMemberPrinting = // That is, this style: // new: argName1: argType1 * ... * argNameN: argTypeN -> retType // Method: argName1: argType1 * ... * argNameN: argTypeN -> retType - let private layoutMethInfoFSharpStyleCore amap m denv (minfo: MethInfo) minst = + let private layoutMethInfoFSharpStyleCore (infoReader: InfoReader) m denv (minfo: MethInfo) minst = + let amap = infoReader.amap + match minfo.ArbitraryValRef with | Some vref -> - PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv vref.Deref + PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv infoReader vref | None -> let layout = if not minfo.IsConstructor && not minfo.IsInstance then WordL.keywordStatic @@ -1193,6 +1308,7 @@ module InfoMemberPrinting = PrintTypes.layoutTyparDecls denv (minfo.LogicalName |> tagMethod |> wordL) true minfo.FormalMethodTypars ) ^^ WordL.colon + let layout = layoutXmlDocOfMethInfo denv infoReader minfo layout let paramDatas = minfo.GetParamDatas(amap, m, minst) let layout = layout ^^ @@ -1220,7 +1336,7 @@ module InfoMemberPrinting = layout ^^ if isAppTy minfo.TcGlobals minfo.ApparentEnclosingAppType then let tcref = minfo.ApparentEnclosingTyconRef - PrintTypes.layoutTyconRef denv tcref + PrintTypes.layoutTyconRefImpl denv tcref else emptyL let layout = @@ -1271,13 +1387,15 @@ module InfoMemberPrinting = // // For C# extension members: // ApparentContainer.Method(argName1: argType1, ..., argNameN: argTypeN) : retType - let prettyLayoutOfMethInfoFreeStyle (amap: Import.ImportMap) m denv typarInst methInfo = + let prettyLayoutOfMethInfoFreeStyle (infoReader: InfoReader) m denv typarInst methInfo = + let amap = infoReader.amap + match methInfo with | DefaultStructCtor _ -> let prettyTyparInst, _ = PrettyTypes.PrettifyInst amap.g typarInst - prettyTyparInst, PrintTypes.layoutTyconRef denv methInfo.ApparentEnclosingTyconRef ^^ wordL (tagPunctuation "()") + prettyTyparInst, PrintTypes.layoutTyconRefImpl denv methInfo.ApparentEnclosingTyconRef ^^ wordL (tagPunctuation "()") | FSMeth(_, _, vref, _) -> - let prettyTyparInst, resL = PrintTastMemberOrVals.prettyLayoutOfValOrMember { denv with showMemberContainers=true } typarInst vref.Deref + let prettyTyparInst, resL = PrintTastMemberOrVals.prettyLayoutOfValOrMember { denv with showMemberContainers=true } infoReader typarInst vref prettyTyparInst, resL | ILMeth(_, ilminfo, _) -> let prettyTyparInst, prettyMethInfo, minst = prettifyILMethInfo amap m methInfo typarInst ilminfo @@ -1331,33 +1449,39 @@ module InfoMemberPrinting = module private TastDefinitionPrinting = open PrintTypes - let layoutExtensionMember denv (v: Val) = - let tycon = v.MemberApparentEntity.Deref - let nameL = tagMethod tycon.DisplayName |> mkNav v.DefinitionRange |> wordL + let layoutExtensionMember denv infoReader (vref: ValRef) = + let tycon = vref.MemberApparentEntity.Deref + let nameL = tagMethod tycon.DisplayName |> mkNav vref.DefinitionRange |> wordL let nameL = layoutAccessibility denv tycon.Accessibility nameL // "type-accessibility" let tps = - match PartitionValTyparsForApparentEnclosingType denv.g v with + match PartitionValTyparsForApparentEnclosingType denv.g vref.Deref with | Some(_, memberParentTypars, _, _, _) -> memberParentTypars | None -> [] let lhsL = WordL.keywordType ^^ layoutTyparDecls denv nameL tycon.IsPrefixDisplay tps - let memberL = PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv v + let memberL = PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv infoReader vref (lhsL ^^ WordL.keywordWith) @@-- memberL - let layoutExtensionMembers denv vs = - aboveListL (List.map (layoutExtensionMember denv) vs) + let layoutExtensionMembers denv infoReader vs = + aboveListL (List.map (layoutExtensionMember denv infoReader) vs) - let layoutRecdField addAccess denv (fld: RecdField) = + let layoutRecdField addAccess denv infoReader (enclosingTcref: TyconRef) (fld: RecdField) = let lhs = tagRecordField fld.Name |> mkNav fld.DefinitionRange |> wordL let lhs = (if addAccess then layoutAccessibility denv fld.Accessibility lhs else lhs) let lhs = if fld.IsMutable then wordL (tagKeyword "mutable") --- lhs else lhs - (lhs ^^ RightL.colon) --- layoutType denv fld.FormalType + let fieldL = (lhs ^^ RightL.colon) --- layoutType denv fld.FormalType - let layoutUnionOrExceptionField denv isGenerated i (fld: RecdField) = + // The enclosing TyconRef might be a union and we can only get fields from union cases, so we need ignore unions here. + if not enclosingTcref.IsUnionTycon then + layoutXmlDocOfRecdFieldRef denv infoReader (RecdFieldRef(enclosingTcref, fld.Id.idText)) fieldL + else + fieldL + + let layoutUnionOrExceptionField denv infoReader isGenerated enclosingTcref i (fld: RecdField) = if isGenerated i fld then layoutTypeWithInfoAndPrec denv SimplifyTypes.typeSimplificationInfo0 2 fld.FormalType - else layoutRecdField false denv fld + else layoutRecdField false denv infoReader enclosingTcref fld let isGeneratedUnionCaseField pos (f: RecdField) = if pos < 0 then f.Name = "Item" @@ -1366,23 +1490,25 @@ module private TastDefinitionPrinting = let isGeneratedExceptionField pos (f: RecdField) = f.Name = "Data" + (string pos) - let layoutUnionCaseFields denv isUnionCase fields = + let layoutUnionCaseFields denv infoReader isUnionCase enclosingTcref fields = match fields with - | [f] when isUnionCase -> layoutUnionOrExceptionField denv isGeneratedUnionCaseField -1 f + | [f] when isUnionCase -> layoutUnionOrExceptionField denv infoReader isGeneratedUnionCaseField enclosingTcref -1 f | _ -> let isGenerated = if isUnionCase then isGeneratedUnionCaseField else isGeneratedExceptionField - sepListL (wordL (tagPunctuation "*")) (List.mapi (layoutUnionOrExceptionField denv isGenerated) fields) + sepListL (wordL (tagPunctuation "*")) (List.mapi (layoutUnionOrExceptionField denv infoReader isGenerated enclosingTcref) fields) - let layoutUnionCase denv prefixL (ucase: UnionCase) = + let layoutUnionCase denv infoReader prefixL enclosingTcref (ucase: UnionCase) = let nmL = DemangleOperatorNameAsLayout (tagUnionCase >> mkNav ucase.DefinitionRange) ucase.Id.idText //let nmL = layoutAccessibility denv ucase.Accessibility nmL - match ucase.RecdFields with - | [] -> (prefixL ^^ nmL) - | fields -> (prefixL ^^ nmL ^^ WordL.keywordOf) --- layoutUnionCaseFields denv true fields + let caseL = + match ucase.RecdFields with + | [] -> (prefixL ^^ nmL) + | fields -> (prefixL ^^ nmL ^^ WordL.keywordOf) --- layoutUnionCaseFields denv infoReader true enclosingTcref fields + layoutXmlDocOfUnionCaseRef denv infoReader (UnionCaseRef(enclosingTcref, ucase.Id.idText)) caseL - let layoutUnionCases denv ucases = + let layoutUnionCases denv infoReader enclosingTcref ucases = let prefixL = WordL.bar // See bug://2964 - always prefix in case preceded by accessibility modifier - List.map (layoutUnionCase denv prefixL) ucases + List.map (layoutUnionCase denv infoReader prefixL enclosingTcref) ucases /// When to force a break? "type tyname = repn" /// When repn is class or datatype constructors (not single one). @@ -1406,7 +1532,9 @@ module private TastDefinitionPrinting = let typL = layoutType denv (e.FieldType(amap, m)) staticL ^^ WordL.keywordVal ^^ nameL ^^ WordL.colon ^^ typL - let private layoutEventInfo denv amap m (e: EventInfo) = + let private layoutEventInfo denv (infoReader: InfoReader) m (e: EventInfo) = + let amap = infoReader.amap + let staticL = if e.IsStatic then WordL.keywordStatic else emptyL let eventTag = @@ -1423,13 +1551,17 @@ module private TastDefinitionPrinting = let nameL = eventTag |> wordL let typL = layoutType denv (e.GetDelegateType(amap, m)) - staticL ^^ WordL.keywordEvent ^^ nameL ^^ WordL.colon ^^ typL - - let private layoutPropInfo denv amap m (p: PropInfo) = + let overallL = staticL ^^ WordL.keywordMember ^^ nameL ^^ WordL.colon ^^ typL + layoutXmlDocOfEventInfo denv infoReader e overallL + + let private layoutPropInfo denv (infoReader: InfoReader) m (p: PropInfo) = + let amap = infoReader.amap + match p.ArbitraryValRef with - | Some v -> - PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv v.Deref + | Some vref -> + PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv infoReader vref | None -> + let modifierAndMember = if p.IsStatic then WordL.keywordStatic ^^ WordL.keywordMember @@ -1444,12 +1576,13 @@ module private TastDefinitionPrinting = let nameL = propTag |> wordL let typL = layoutType denv (p.GetPropertyType(amap, m)) // shouldn't happen + let overallL = modifierAndMember ^^ nameL ^^ WordL.colon ^^ typL + layoutXmlDocOfPropInfo denv infoReader p overallL - modifierAndMember ^^ nameL ^^ WordL.colon ^^ typL - - let layoutTycon (denv: DisplayEnv) (infoReader: InfoReader) ad m simplified typewordL (tycon: Tycon) = + let layoutTyconRef (denv: DisplayEnv) (infoReader: InfoReader) ad m simplified typewordL (tcref: TyconRef) = let g = denv.g - let _, ty = generalizeTyconRef (mkLocalTyconRef tycon) + let tycon = tcref.Deref + let _, ty = generalizeTyconRef tcref let start, name = let n = tycon.DisplayName if isStructTy g ty then @@ -1540,21 +1673,21 @@ module private TastDefinitionPrinting = let ctorLs = if denv.shrinkOverloads then ctors - |> shrinkOverloads (InfoMemberPrinting.layoutMethInfoFSharpStyle amap m denv) (fun _ xL -> xL) + |> shrinkOverloads (InfoMemberPrinting.layoutMethInfoFSharpStyle infoReader m denv) (fun _ xL -> xL) else ctors - |> List.map (fun ctor -> InfoMemberPrinting.layoutMethInfoFSharpStyle amap m denv ctor) + |> List.map (fun ctor -> InfoMemberPrinting.layoutMethInfoFSharpStyle infoReader m denv ctor) let methLs = meths |> List.groupBy (fun md -> md.DisplayName) |> List.collect (fun (_, group) -> if denv.shrinkOverloads then - shrinkOverloads (InfoMemberPrinting.layoutMethInfoFSharpStyle amap m denv) (fun x xL -> (sortKey x, xL)) group + shrinkOverloads (InfoMemberPrinting.layoutMethInfoFSharpStyle infoReader m denv) (fun x xL -> (sortKey x, xL)) group else group |> List.sortBy sortKey - |> List.map (fun methinfo -> ((not methinfo.IsConstructor, methinfo.IsInstance, methinfo.DisplayName, List.sum methinfo.NumArgs, methinfo.NumArgs.Length), InfoMemberPrinting.layoutMethInfoFSharpStyle amap m denv methinfo))) + |> List.map (fun methinfo -> ((not methinfo.IsConstructor, methinfo.IsInstance, methinfo.DisplayName, List.sum methinfo.NumArgs, methinfo.NumArgs.Length), InfoMemberPrinting.layoutMethInfoFSharpStyle infoReader m denv methinfo))) |> List.sortBy fst |> List.map snd @@ -1571,7 +1704,7 @@ module private TastDefinitionPrinting = else tycon.TrueFieldsAsList |> List.filter (fun f -> f.IsStatic && not (isDiscard f.Name)) - |> List.map (fun f -> WordL.keywordStatic ^^ WordL.keywordVal ^^ layoutRecdField true denv f) + |> List.map (fun f -> WordL.keywordStatic ^^ WordL.keywordVal ^^ layoutRecdField true denv infoReader tcref f) let instanceValsLs = if isRecdTy g ty then @@ -1579,17 +1712,17 @@ module private TastDefinitionPrinting = else tycon.TrueInstanceFieldsAsList |> List.filter (fun f -> not (isDiscard f.Name)) - |> List.map (fun f -> WordL.keywordVal ^^ layoutRecdField true denv f) + |> List.map (fun f -> WordL.keywordVal ^^ layoutRecdField true denv infoReader tcref f) let propLs = props - |> List.map (fun x -> (true, x.IsStatic, x.PropertyName, 0, 0), layoutPropInfo denv amap m x) + |> List.map (fun x -> (true, x.IsStatic, x.PropertyName, 0, 0), layoutPropInfo denv infoReader m x) |> List.sortBy fst |> List.map snd let eventLs = events - |> List.map (fun x -> (true, x.IsStatic, x.EventName, 0, 0), layoutEventInfo denv amap m x) + |> List.map (fun x -> (true, x.IsStatic, x.EventName, 0, 0), layoutEventInfo denv infoReader m x) |> List.sortBy fst |> List.map snd @@ -1667,7 +1800,7 @@ module private TastDefinitionPrinting = let denv = denv.AddAccessibility tycon.TypeReprAccessibility match repr with | TRecdRepr _ -> - let recdFieldRefL fld = layoutRecdField false denv fld + let recdFieldRefL fld = layoutRecdField false denv infoReader tcref fld let recdL = tycon.TrueFieldsAsList @@ -1681,7 +1814,7 @@ module private TastDefinitionPrinting = | TUnionRepr _ -> let layoutUnionCases = tycon.UnionCasesAsList - |> layoutUnionCases denv + |> layoutUnionCases denv infoReader tcref |> applyMaxMembers denv.maxMembers |> aboveListL Some (addMembersAsWithEnd (addReprAccessL layoutUnionCases)) @@ -1751,37 +1884,146 @@ module private TastDefinitionPrinting = | Some a -> (lhsL ^^ WordL.equals) --- (layoutType { denv with shortTypeNames = false } a) - layoutAttribs denv false ty tycon.TypeOrMeasureKind tycon.Attribs reprL + let attribsL = layoutAttribs denv false ty tycon.TypeOrMeasureKind tycon.Attribs reprL + layoutXmlDocOfEntityRef denv infoReader tcref attribsL // Layout: exception definition - let layoutExnDefn denv (exnc: Entity) = + let layoutExnDefn denv infoReader (exncref: EntityRef) = + let exnc = exncref.Deref let nm = exnc.LogicalName let nmL = wordL (tagClass nm) let nmL = layoutAccessibility denv exnc.TypeReprAccessibility nmL let exnL = wordL (tagKeyword "exception") ^^ nmL // need to tack on the Exception at the right of the name for goto definition let reprL = match exnc.ExceptionInfo with - | TExnAbbrevRepr ecref -> WordL.equals --- layoutTyconRef denv ecref + | TExnAbbrevRepr ecref -> WordL.equals --- layoutTyconRefImpl denv ecref | TExnAsmRepr _ -> WordL.equals --- wordL (tagText "(# ... #)") | TExnNone -> emptyL | TExnFresh r -> match r.TrueFieldsAsList with | [] -> emptyL - | r -> WordL.keywordOf --- layoutUnionCaseFields denv false r + | r -> WordL.keywordOf --- layoutUnionCaseFields denv infoReader false exncref r - exnL ^^ reprL + let overallL = exnL ^^ reprL + layoutXmlDocOfEntityRef denv infoReader exncref overallL // Layout: module spec let layoutTyconDefns denv infoReader ad m (tycons: Tycon list) = match tycons with | [] -> emptyL - | [h] when h.IsExceptionDecl -> layoutExnDefn denv h + | [h] when h.IsExceptionDecl -> layoutExnDefn denv infoReader (mkLocalEntityRef h) | h :: t -> - let x = layoutTycon denv infoReader ad m false WordL.keywordType h - let xs = List.map (layoutTycon denv infoReader ad m false (wordL (tagKeyword "and"))) t + let x = layoutTyconRef denv infoReader ad m false WordL.keywordType (mkLocalEntityRef h) + let xs = List.map (mkLocalEntityRef >> layoutTyconRef denv infoReader ad m false (wordL (tagKeyword "and"))) t aboveListL (x :: xs) + let rec layoutModuleOrNamespace (denv: DisplayEnv) (infoReader: InfoReader) ad m isFirstTopLevel (mspec: ModuleOrNamespace) = + let rec fullPath (mspec: ModuleOrNamespace) acc = + if mspec.IsNamespace then + match mspec.ModuleOrNamespaceType.ModuleAndNamespaceDefinitions |> List.tryHead with + | Some next when next.IsNamespace -> + fullPath next (acc @ [next.DemangledModuleOrNamespaceName]) + | _ -> + acc, mspec + else + acc, mspec + + let outerPath = mspec.CompilationPath.AccessPath + + let path, mspec = fullPath mspec [mspec.DemangledModuleOrNamespaceName] + + let denv = + let outerPath = outerPath |> List.map fst + denv.AddOpenPath (outerPath @ path) + + let headerL = + if mspec.IsNamespace then + // This is a container namespace. We print the header when we get to the first concrete module. + wordL (tagKeyword "namespace") ^^ sepListL SepL.dot (List.map (tagNamespace >> wordL) path) + else + // This is a module + let nmL = + match path with + | [nm] -> wordL (tagModule nm) + | _ -> + let nm = path |> List.last + let innerPath = path.[..path.Length - 2] + sepListL SepL.dot (List.map (tagNamespace >> wordL) innerPath) ^^ SepL.dot ^^ wordL (tagModule nm) + // Check if its an outer module or a nested module + if (outerPath |> List.forall (fun (_, istype) -> istype = Namespace)) then + // Check if this is an outer module with no namespace + if isNil outerPath then + // If so print a "module" declaration + (wordL (tagKeyword "module") ^^ nmL) + else + if mspec.ModuleOrNamespaceType.AllEntities |> Seq.isEmpty && mspec.ModuleOrNamespaceType.AllValsAndMembers |> Seq.isEmpty then + (wordL (tagKeyword "module") ^^ nmL ^^ WordL.equals ^^ wordL (tagKeyword "begin") ^^ wordL (tagKeyword "end")) + else + // Otherwise this is an outer module contained immediately in a namespace + // We already printed the namespace declaration earlier. So just print the + // module now. + (wordL (tagKeyword "module") ^^ nmL ^^ WordL.equals) + else + if mspec.ModuleOrNamespaceType.AllEntities |> Seq.isEmpty && mspec.ModuleOrNamespaceType.AllValsAndMembers |> Seq.isEmpty then + (wordL (tagKeyword "module") ^^ nmL ^^ WordL.equals ^^ wordL (tagKeyword "begin") ^^ wordL (tagKeyword "end")) + else + // OK, this is a nested module + (wordL (tagKeyword "module") ^^ nmL ^^ WordL.equals) + + let headerL = + PrintTypes.layoutAttribs denv false (generalizedTyconRef(mkLocalEntityRef mspec)) mspec.TypeOrMeasureKind mspec.Attribs headerL + + let shouldShow (v: Val) = + (denv.showObsoleteMembers || not (CheckFSharpAttributesForObsolete denv.g v.Attribs)) && + (denv.showHiddenMembers || not (CheckFSharpAttributesForHidden denv.g v.Attribs)) + + let entityLs = + if mspec.IsNamespace then [] + else + mspec.ModuleOrNamespaceType.AllEntities + |> QueueList.toList + |> List.map (fun entity -> layoutEntityRef denv infoReader ad m (mkLocalEntityRef entity)) + + let valLs = + if mspec.IsNamespace then [] + else + mspec.ModuleOrNamespaceType.AllValsAndMembers + |> QueueList.toList + |> List.filter shouldShow + |> List.sortBy (fun v -> v.DisplayName) + |> List.map (mkLocalValRef >> PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv infoReader) + + if List.isEmpty entityLs && List.isEmpty valLs then + headerL + else + let entitiesL = + entityLs + |> aboveListL + + let valsL = + valLs + |> aboveListL + + if isFirstTopLevel then + aboveListL + [ + headerL + entitiesL + valsL + ] + else + headerL @@---- entitiesL @@ valsL + + and layoutEntityRef (denv: DisplayEnv) (infoReader: InfoReader) ad m (eref: EntityRef) = + if eref.IsModuleOrNamespace then + layoutModuleOrNamespace denv infoReader ad m false eref.Deref + |> layoutXmlDocOfEntityRef denv infoReader eref + elif eref.IsExceptionDecl then + layoutExnDefn denv infoReader eref + else + layoutTyconRef denv infoReader ad m true WordL.keywordType eref + //-------------------------------------------------------------------------- module private InferredSigPrinting = @@ -1816,13 +2058,15 @@ module private InferredSigPrinting = |> List.choose (function ModuleOrNamespaceBinding.Binding bind -> Some bind | _ -> None) |> valsOfBinds |> List.filter filterExtMem - |> TastDefinitionPrinting.layoutExtensionMembers denv) @@ + |> List.map mkLocalValRef + |> TastDefinitionPrinting.layoutExtensionMembers denv infoReader) @@ (mbinds |> List.choose (function ModuleOrNamespaceBinding.Binding bind -> Some bind | _ -> None) |> valsOfBinds |> List.filter filterVal - |> List.map (PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv) + |> List.map mkLocalValRef + |> List.map (PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv infoReader) |> aboveListL) @@ (mbinds @@ -1833,7 +2077,8 @@ module private InferredSigPrinting = | TMDefLet(bind, _) -> ([bind.Var] |> List.filter filterVal - |> List.map (PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv) + |> List.map mkLocalValRef + |> List.map (PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv infoReader) |> aboveListL) | TMDefs defs -> imdefsL denv defs @@ -1850,40 +2095,47 @@ module private InferredSigPrinting = let denv = denv.AddOpenPath (List.map fst innerPath) if mspec.IsNamespace then let basic = imdefL denv def - // Check if this namespace contains anything interesting - if isConcreteNamespace def then - // This is a container namespace. We print the header when we get to the first concrete module. - let headerL = - wordL (tagKeyword "namespace") ^^ sepListL SepL.dot (List.map (fst >> tagNamespace >> wordL) innerPath) - headerL @@-- basic - else - // This is a namespace that only contains namespaces. Skip the header - basic + let basicL = + // Check if this namespace contains anything interesting + if isConcreteNamespace def then + // This is a container namespace. We print the header when we get to the first concrete module. + let headerL = + wordL (tagKeyword "namespace") ^^ sepListL SepL.dot (List.map (fst >> tagNamespace >> wordL) innerPath) + headerL @@-- basic + else + // This is a namespace that only contains namespaces. Skip the header + basic + // NOTE: explicitly not calling `layoutXmlDoc` here, because even though + // `ModuleOrNamespace` has a field for XmlDoc, it is never present at the parser + // level. This should be changed if the parser/spec changes. + basicL else // This is a module let nmL = layoutAccessibility denv mspec.Accessibility (wordL (tagModule nm)) - let denv = denv.AddAccessibility mspec.Accessibility + let denv = denv.AddAccessibility mspec.Accessibility let basic = imdefL denv def - // Check if its an outer module or a nested module - if (outerPath |> List.forall (fun (_, istype) -> istype = Namespace) ) then - // OK, this is an outer module - if showHeader then - // OK, we're not in F# Interactive - // Check if this is an outer module with no namespace - if isNil outerPath then - // If so print a "module" declaration - (wordL (tagKeyword "module") ^^ nmL) @@ basic - else - // Otherwise this is an outer module contained immediately in a namespace - // We already printed the namespace declaration earlier. So just print the - // module now. - ((wordL (tagKeyword"module") ^^ nmL ^^ WordL.equals ^^ wordL (tagKeyword "begin")) @@-- basic) @@ WordL.keywordEnd + let basicL = + // Check if its an outer module or a nested module + if (outerPath |> List.forall (fun (_, istype) -> istype = Namespace) ) then + // OK, this is an outer module + if showHeader then + // OK, we're not in F# Interactive + // Check if this is an outer module with no namespace + if isNil outerPath then + // If so print a "module" declaration + (wordL (tagKeyword "module") ^^ nmL) @@ basic + else + // Otherwise this is an outer module contained immediately in a namespace + // We already printed the namespace declaration earlier. So just print the + // module now. + ((wordL (tagKeyword"module") ^^ nmL ^^ WordL.equals ^^ wordL (tagKeyword "begin")) @@-- basic) @@ WordL.keywordEnd + else + // OK, we're in F# Interactive, presumably the implicit module for each interaction. + basic else - // OK, we're in F# Interactive, presumably the implicit module for each interaction. - basic - else - // OK, this is a nested module - ((wordL (tagKeyword "module") ^^ nmL ^^ WordL.equals ^^ wordL (tagKeyword"begin")) @@-- basic) @@ WordL.keywordEnd + // OK, this is a nested module + ((wordL (tagKeyword "module") ^^ nmL ^^ WordL.equals ^^ wordL (tagKeyword"begin")) @@-- basic) @@ WordL.keywordEnd + layoutXmlDoc denv mspec.XmlDoc basicL imexprL denv expr //-------------------------------------------------------------------------- @@ -1926,7 +2178,7 @@ module private PrintData = leftL (tagPunctuation "{") ^^ semiListL (List.map2 lay fields xs) ^^ rightL (tagPunctuation "}") | Expr.Op (TOp.ValFieldGet (RecdFieldRef.RecdFieldRef (tcref, name)), _, _, _) -> - (layoutTyconRef denv tcref) ^^ sepL (tagPunctuation ".") ^^ wordL (tagField name) + (layoutTyconRefImpl denv tcref) ^^ sepL (tagPunctuation ".") ^^ wordL (tagField name) | Expr.Op (TOp.Array, [_], xs, _) -> leftL (tagPunctuation "[|") ^^ semiListL (dataExprsL denv xs) ^^ RightL.rightBracketBar @@ -1940,42 +2192,44 @@ let dataExprL denv expr = PrintData.dataExprL denv expr // Print Signatures/Types - output functions //-------------------------------------------------------------------------- -let outputValOrMember denv os x = x |> PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv |> bufferL os +let outputValOrMember denv infoReader os x = x |> PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv infoReader |> bufferL os -let stringValOrMember denv x = x |> PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv |> showL +let stringValOrMember denv infoReader x = x |> PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv infoReader |> showL /// Print members with a qualification showing the type they are contained in -let layoutQualifiedValOrMember denv typarInst v = PrintTastMemberOrVals.prettyLayoutOfValOrMember { denv with showMemberContainers=true; } typarInst v +let layoutQualifiedValOrMember denv infoReader typarInst v = PrintTastMemberOrVals.prettyLayoutOfValOrMember { denv with showMemberContainers=true; } infoReader typarInst v -let outputQualifiedValOrMember denv os v = outputValOrMember { denv with showMemberContainers=true; } os v +let outputQualifiedValOrMember denv infoReader os v = outputValOrMember { denv with showMemberContainers=true; } infoReader os v -let outputQualifiedValSpec denv os v = outputQualifiedValOrMember denv os v +let outputQualifiedValSpec denv infoReader os v = outputQualifiedValOrMember denv infoReader os v -let stringOfQualifiedValOrMember denv v = PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst { denv with showMemberContainers=true; } v |> showL +let stringOfQualifiedValOrMember denv infoReader v = PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst { denv with showMemberContainers=true; } infoReader v |> showL /// Convert a MethInfo to a string -let formatMethInfoToBufferFreeStyle amap m denv buf d = InfoMemberPrinting.formatMethInfoToBufferFreeStyle amap m denv buf d +let formatMethInfoToBufferFreeStyle infoReader m denv buf d = InfoMemberPrinting.formatMethInfoToBufferFreeStyle infoReader m denv buf d -let prettyLayoutOfMethInfoFreeStyle amap m denv typarInst minfo = InfoMemberPrinting.prettyLayoutOfMethInfoFreeStyle amap m denv typarInst minfo +let prettyLayoutOfMethInfoFreeStyle infoReader m denv typarInst minfo = InfoMemberPrinting.prettyLayoutOfMethInfoFreeStyle infoReader m denv typarInst minfo /// Convert a PropInfo to a string let prettyLayoutOfPropInfoFreeStyle g amap m denv d = InfoMemberPrinting.prettyLayoutOfPropInfoFreeStyle g amap m denv d /// Convert a MethInfo to a string -let stringOfMethInfo amap m denv d = bufs (fun buf -> InfoMemberPrinting.formatMethInfoToBufferFreeStyle amap m denv buf d) +let stringOfMethInfo infoReader m denv d = bufs (fun buf -> InfoMemberPrinting.formatMethInfoToBufferFreeStyle infoReader m denv buf d) /// Convert a ParamData to a string let stringOfParamData denv paramData = bufs (fun buf -> InfoMemberPrinting.formatParamDataToBuffer denv buf paramData) let layoutOfParamData denv paramData = InfoMemberPrinting.layoutParamData denv paramData -let layoutExnDef denv x = x |> TastDefinitionPrinting.layoutExnDefn denv +let layoutExnDef denv infoReader x = x |> TastDefinitionPrinting.layoutExnDefn denv infoReader let stringOfTyparConstraints denv x = x |> PrintTypes.layoutConstraintsWithInfo denv SimplifyTypes.typeSimplificationInfo0 |> showL -let layoutTycon denv infoReader ad m (* width *) x = TastDefinitionPrinting.layoutTycon denv infoReader ad m true WordL.keywordType x (* |> Display.squashTo width *) +let layoutTycon denv infoReader ad m (* width *) x = TastDefinitionPrinting.layoutTyconRef denv infoReader ad m true WordL.keywordType (mkLocalEntityRef x) (* |> Display.squashTo width *) + +let layoutEntityRef denv infoReader ad m x = TastDefinitionPrinting.layoutEntityRef denv infoReader ad m x -let layoutUnionCases denv x = x |> TastDefinitionPrinting.layoutUnionCaseFields denv true +let layoutUnionCases denv infoReader enclosingTcref x = x |> TastDefinitionPrinting.layoutUnionCaseFields denv infoReader true enclosingTcref /// Pass negative number as pos in case of single cased discriminated unions let isGeneratedUnionCaseField pos f = TastDefinitionPrinting.isGeneratedUnionCaseField pos f @@ -1994,11 +2248,11 @@ let prettyStringOfTy denv x = x |> PrintTypes.prettyLayoutOfType denv |> showL let prettyStringOfTyNoCx denv x = x |> PrintTypes.prettyLayoutOfTypeNoConstraints denv |> showL -let stringOfRecdField denv x = x |> TastDefinitionPrinting.layoutRecdField false denv |> showL +let stringOfRecdField denv infoReader enclosingTcref x = x |> TastDefinitionPrinting.layoutRecdField false denv infoReader enclosingTcref |> showL -let stringOfUnionCase denv x = x |> TastDefinitionPrinting.layoutUnionCase denv WordL.bar |> showL +let stringOfUnionCase denv infoReader enclosingTcref x = x |> TastDefinitionPrinting.layoutUnionCase denv infoReader WordL.bar enclosingTcref |> showL -let stringOfExnDef denv x = x |> TastDefinitionPrinting.layoutExnDefn denv |> showL +let stringOfExnDef denv infoReader x = x |> TastDefinitionPrinting.layoutExnDefn denv infoReader |> showL let stringOfFSAttrib denv x = x |> PrintTypes.layoutAttrib denv |> squareAngleL |> showL @@ -2006,9 +2260,9 @@ let stringOfILAttrib denv x = x |> PrintTypes.layoutILAttrib denv |> squareAngle let layoutInferredSigOfModuleExpr showHeader denv infoReader ad m expr = InferredSigPrinting.layoutInferredSigOfModuleExpr showHeader denv infoReader ad m expr -let prettyLayoutOfValOrMember denv typarInst v = PrintTastMemberOrVals.prettyLayoutOfValOrMember denv typarInst v +let prettyLayoutOfValOrMember denv infoReader typarInst v = PrintTastMemberOrVals.prettyLayoutOfValOrMember denv infoReader typarInst v -let prettyLayoutOfValOrMemberNoInst denv v = PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv v +let prettyLayoutOfValOrMemberNoInst denv infoReader v = PrintTastMemberOrVals.prettyLayoutOfValOrMemberNoInst denv infoReader v let prettyLayoutOfMemberNoInstShort denv v = PrintTastMemberOrVals.prettyLayoutOfMemberNoInstShort denv v @@ -2067,16 +2321,16 @@ let minimalStringsOfTwoTypes denv t1 t2= (makeName t1, makeName t2, stringOfTyparConstraints denv tpcs) // Note: Always show imperative annotations when comparing value signatures -let minimalStringsOfTwoValues denv v1 v2= +let minimalStringsOfTwoValues denv infoReader v1 v2= let denvMin = { denv with showImperativeTyparAnnotations=true; showConstraintTyparAnnotations=false } - let min1 = bufs (fun buf -> outputQualifiedValOrMember denvMin buf v1) - let min2 = bufs (fun buf -> outputQualifiedValOrMember denvMin buf v2) + let min1 = bufs (fun buf -> outputQualifiedValOrMember denvMin infoReader buf v1) + let min2 = bufs (fun buf -> outputQualifiedValOrMember denvMin infoReader buf v2) if min1 <> min2 then (min1, min2) else let denvMax = { denv with showImperativeTyparAnnotations=true; showConstraintTyparAnnotations=true } - let max1 = bufs (fun buf -> outputQualifiedValOrMember denvMax buf v1) - let max2 = bufs (fun buf -> outputQualifiedValOrMember denvMax buf v2) + let max1 = bufs (fun buf -> outputQualifiedValOrMember denvMax infoReader buf v1) + let max2 = bufs (fun buf -> outputQualifiedValOrMember denvMax infoReader buf v2) max1, max2 let minimalStringOfType denv ty = diff --git a/src/fsharp/NicePrint.fsi b/src/fsharp/NicePrint.fsi index 8458fae4eed..fd7fc1cbd88 100644 --- a/src/fsharp/NicePrint.fsi +++ b/src/fsharp/NicePrint.fsi @@ -4,18 +4,16 @@ module internal FSharp.Compiler.NicePrint open System.Text -open FSharp.Compiler -open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.Import open FSharp.Compiler.Infos open FSharp.Compiler.InfoReader -open FSharp.Compiler.Range open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps -open Internal.Utilities.StructuredFormat module PrintUtilities = val layoutBuiltinAttribute: denv:DisplayEnv -> attrib:BuiltinAttribInfo -> Layout @@ -26,7 +24,7 @@ val outputType: denv:DisplayEnv -> os:StringBuilder -> x:TType -> unit val layoutType: denv:DisplayEnv -> x:TType -> Layout -val outputTypars: denv:DisplayEnv -> nm:Layout.TaggedText -> os:StringBuilder -> x:Typars -> unit +val outputTypars: denv:DisplayEnv -> nm:TaggedText -> os:StringBuilder -> x:Typars -> unit val outputTyconRef: denv:DisplayEnv -> os:StringBuilder -> x:TyconRef -> unit @@ -42,37 +40,39 @@ val prettyLayoutsOfUnresolvedOverloading: denv:DisplayEnv -> argInfos:(TType * A val dataExprL: denv:DisplayEnv -> expr:Expr -> Layout -val outputValOrMember: denv:DisplayEnv -> os:StringBuilder -> x:Val -> unit +val outputValOrMember: denv:DisplayEnv -> infoReader:InfoReader -> os:StringBuilder -> x:ValRef -> unit -val stringValOrMember: denv:DisplayEnv -> x:Val -> string +val stringValOrMember: denv:DisplayEnv -> infoReader:InfoReader -> x:ValRef -> string -val layoutQualifiedValOrMember: denv:DisplayEnv -> typarInst:TyparInst -> v:Val -> TyparInst * Layout +val layoutQualifiedValOrMember: denv:DisplayEnv -> infoReader:InfoReader -> typarInst:TyparInst -> v:ValRef -> TyparInst * Layout -val outputQualifiedValOrMember: denv:DisplayEnv -> os:StringBuilder -> v:Val -> unit +val outputQualifiedValOrMember: denv:DisplayEnv -> infoReader:InfoReader -> os:StringBuilder -> v:ValRef -> unit -val outputQualifiedValSpec: denv:DisplayEnv -> os:StringBuilder -> v:Val -> unit +val outputQualifiedValSpec: denv:DisplayEnv -> infoReader:InfoReader -> os:StringBuilder -> v:ValRef -> unit -val stringOfQualifiedValOrMember: denv:DisplayEnv -> v:Val -> string +val stringOfQualifiedValOrMember: denv:DisplayEnv -> infoReader:InfoReader -> v:ValRef -> string -val formatMethInfoToBufferFreeStyle: amap:ImportMap -> m:range -> denv:DisplayEnv -> buf:StringBuilder -> d:MethInfo -> unit +val formatMethInfoToBufferFreeStyle: infoReader:InfoReader -> m:range -> denv:DisplayEnv -> buf:StringBuilder -> d:MethInfo -> unit -val prettyLayoutOfMethInfoFreeStyle: amap:ImportMap -> m:range -> denv:DisplayEnv -> typarInst:TyparInst -> minfo:MethInfo -> TyparInst * Layout +val prettyLayoutOfMethInfoFreeStyle: infoReader:InfoReader -> m:range -> denv:DisplayEnv -> typarInst:TyparInst -> minfo:MethInfo -> TyparInst * Layout val prettyLayoutOfPropInfoFreeStyle: g:TcGlobals -> amap:ImportMap -> m:range -> denv:DisplayEnv -> d:PropInfo -> Layout -val stringOfMethInfo: amap:ImportMap -> m:range -> denv:DisplayEnv -> d:MethInfo -> string +val stringOfMethInfo: infoReader:InfoReader -> m:range -> denv:DisplayEnv -> d:MethInfo -> string val stringOfParamData: denv:DisplayEnv -> paramData:ParamData -> string val layoutOfParamData: denv:DisplayEnv -> paramData:ParamData -> Layout -val layoutExnDef: denv:DisplayEnv -> x:Entity -> Layout +val layoutExnDef: denv:DisplayEnv -> infoReader:InfoReader -> x:EntityRef -> Layout val stringOfTyparConstraints: denv:DisplayEnv -> x:(Typar * TyparConstraint) list -> string val layoutTycon: denv:DisplayEnv -> infoReader:InfoReader -> ad:AccessorDomain -> m:range -> x:Tycon -> Layout -val layoutUnionCases: denv:DisplayEnv -> x:RecdField list -> Layout +val layoutEntityRef: denv:DisplayEnv -> infoReader:InfoReader -> ad:AccessorDomain -> m:range -> x:EntityRef -> Layout + +val layoutUnionCases: denv:DisplayEnv -> infoReader:InfoReader -> enclosingTcref:TyconRef -> x:RecdField list -> Layout val isGeneratedUnionCaseField: pos:int -> f:RecdField -> bool @@ -90,11 +90,11 @@ val prettyStringOfTy: denv:DisplayEnv -> x:TType -> string val prettyStringOfTyNoCx: denv:DisplayEnv -> x:TType -> string -val stringOfRecdField: denv:DisplayEnv -> x:RecdField -> string +val stringOfRecdField: denv:DisplayEnv -> infoReader:InfoReader -> enclosingTcref:TyconRef -> x:RecdField -> string -val stringOfUnionCase: denv:DisplayEnv -> x:UnionCase -> string +val stringOfUnionCase: denv:DisplayEnv -> infoReader:InfoReader -> enclosingTcref:TyconRef -> x:UnionCase -> string -val stringOfExnDef: denv:DisplayEnv -> x:Entity -> string +val stringOfExnDef: denv:DisplayEnv -> infoReader:InfoReader -> x:EntityRef -> string val stringOfFSAttrib: denv:DisplayEnv -> x:Attrib -> string @@ -102,9 +102,9 @@ val stringOfILAttrib: denv:DisplayEnv -> ILType * ILAttribElem list -> string val layoutInferredSigOfModuleExpr: showHeader:bool -> denv:DisplayEnv -> infoReader:InfoReader -> ad:AccessorDomain -> m:range -> expr:ModuleOrNamespaceExprWithSig -> Layout -val prettyLayoutOfValOrMember: denv:DisplayEnv -> typarInst:TyparInst -> v:Val -> TyparInst * Layout +val prettyLayoutOfValOrMember: denv:DisplayEnv -> infoReader:InfoReader -> typarInst:TyparInst -> v:ValRef -> TyparInst * Layout -val prettyLayoutOfValOrMemberNoInst: denv:DisplayEnv -> v:Val -> Layout +val prettyLayoutOfValOrMemberNoInst: denv:DisplayEnv -> infoReader:InfoReader -> v:ValRef -> Layout val prettyLayoutOfMemberNoInstShort: denv:DisplayEnv -> v:Val -> Layout @@ -112,6 +112,6 @@ val prettyLayoutOfInstAndSig: denv:DisplayEnv -> TyparInst * TTypes * TType -> T val minimalStringsOfTwoTypes: denv:DisplayEnv -> t1:TType -> t2:TType -> string * string * string -val minimalStringsOfTwoValues: denv:DisplayEnv -> v1:Val -> v2:Val -> string * string +val minimalStringsOfTwoValues: denv:DisplayEnv -> infoReader:InfoReader -> v1:ValRef -> v2:ValRef -> string * string val minimalStringOfType: denv:DisplayEnv -> ty:TType -> string diff --git a/src/fsharp/OptimizeInputs.fs b/src/fsharp/OptimizeInputs.fs index 5a82d7bad1d..6de165b9455 100644 --- a/src/fsharp/OptimizeInputs.fs +++ b/src/fsharp/OptimizeInputs.fs @@ -4,99 +4,96 @@ module internal FSharp.Compiler.OptimizeInputs -open FSharp.Compiler -open FSharp.Compiler.AbstractIL +open System.IO +open Internal.Utilities.Library +open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.Diagnostics +open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerImports open FSharp.Compiler.CompilerOptions open FSharp.Compiler.IlxGen -open FSharp.Compiler.Range open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.IO open FSharp.Compiler.TypedTree -open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.CheckDeclarations +open FSharp.Compiler.TypedTreeOps -open Internal.Utilities.StructuredFormat +let mutable showTermFileCount = 0 -//---------------------------------------------------------------------------- -// PrintWholeAssemblyImplementation -//---------------------------------------------------------------------------- - -let mutable showTermFileCount = 0 let PrintWholeAssemblyImplementation g (tcConfig:TcConfig) outfile header expr = if tcConfig.showTerms then - if tcConfig.writeTermsToFiles then + if tcConfig.writeTermsToFiles then let filename = outfile + ".terms" - use f = System.IO.File.CreateText (filename + "-" + string showTermFileCount + "-" + header) + use f = FileSystem.OpenFileForWriteShim(filename + "-" + string showTermFileCount + "-" + header, FileMode.OpenOrCreate).GetWriter() showTermFileCount <- showTermFileCount + 1 - Layout.outL f (Display.squashTo 192 (DebugPrint.implFilesL g expr)) - else + LayoutRender.outL f (Display.squashTo 192 (DebugPrint.implFilesL g expr)) + else dprintf "\n------------------\nshowTerm: %s:\n" header - Layout.outL stderr (Display.squashTo 192 (DebugPrint.implFilesL g expr)) + LayoutRender.outL stderr (Display.squashTo 192 (DebugPrint.implFilesL g expr)) dprintf "\n------------------\n" + let AddExternalCcuToOptimizationEnv tcGlobals optEnv (ccuinfo: ImportedAssembly) = - match ccuinfo.FSharpOptimizationData.Force() with + match ccuinfo.FSharpOptimizationData.Force() with | None -> optEnv | Some data -> Optimizer.BindCcu ccuinfo.FSharpViewOfMetadata data optEnv tcGlobals let GetInitialOptimizationEnv (tcImports:TcImports, tcGlobals:TcGlobals) = let ccuinfos = tcImports.GetImportedAssemblies() let optEnv = Optimizer.IncrementalOptimizationEnv.Empty - let optEnv = List.fold (AddExternalCcuToOptimizationEnv tcGlobals) optEnv ccuinfos + let optEnv = List.fold (AddExternalCcuToOptimizationEnv tcGlobals) optEnv ccuinfos optEnv - + let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importMap, isIncrementalFragment, optEnv, ccu:CcuThunk, implFiles) = - // NOTE: optEnv - threads through + // 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"). + // 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 tcGlobals tcConfig outfile "pass-start" implFiles #if DEBUG - if tcConfig.showOptimizationData then - dprintf "Expression prior to optimization:\n%s\n" (Layout.showL (Display.squashTo 192 (DebugPrint.implFilesL tcGlobals implFiles))) - - if tcConfig.showOptimizationData then - dprintf "CCU prior to optimization:\n%s\n" (Layout.showL (Display.squashTo 192 (DebugPrint.entityL tcGlobals ccu.Contents))) + if tcConfig.showOptimizationData then + dprintf "Expression prior to optimization:\n%s\n" (LayoutRender.showL (Display.squashTo 192 (DebugPrint.implFilesL tcGlobals implFiles))) + + if tcConfig.showOptimizationData then + dprintf "CCU prior to optimization:\n%s\n" (LayoutRender.showL (Display.squashTo 192 (DebugPrint.entityL tcGlobals ccu.Contents))) #endif let optEnv0 = optEnv ReportTime tcConfig ("Optimizations") - // Only do abstract_big_targets on the first pass! Only do it when TLR is on! - let optSettings = tcConfig.optSettings + // 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 -> + + let results, (optEnvFirstLoop, _, _, _) = + ((optEnv0, optEnv0, optEnv0, SignatureHidingInfo.Empty), implFiles) + + ||> List.mapFold (fun (optEnvFirstLoop, optEnvExtraLoop, optEnvFinalSimplify, hidden) implFile -> //ReportTime tcConfig ("Initial simplify") - let (optEnvFirstLoop, implFile, implFileOptData, hidden), optimizeDuringCodeGen = + 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 - + let implFile = AutoBox.TransformImplFile tcGlobals importMap implFile + // Only do this on the first pass! let optSettings = { optSettings with abstractBigTargets = false; reportingPhase = false } #if DEBUG - if tcConfig.showOptimizationData then - dprintf "Optimization implFileOptData:\n%s\n" (Layout.showL (Display.squashTo 192 (Optimizer.moduleInfoL tcGlobals implFileOptData))) + if tcConfig.showOptimizationData then + dprintf "Optimization implFileOptData:\n%s\n" (LayoutRender.showL (Display.squashTo 192 (Optimizer.moduleInfoL tcGlobals implFileOptData))) #endif - let implFile, optEnvExtraLoop = - if tcConfig.extraOptimizationIterations > 0 then + let implFile, optEnvExtraLoop = + if tcConfig.extraOptimizationIterations > 0 then //ReportTime tcConfig ("Extra simplification loop") - let (optEnvExtraLoop, implFile, _, _), _ = + let (optEnvExtraLoop, implFile, _, _), _ = Optimizer.OptimizeImplFile (optSettings, ccu, tcGlobals, tcVal, importMap, optEnvExtraLoop, isIncrementalFragment, @@ -107,37 +104,37 @@ let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importM else implFile, optEnvExtraLoop - let implFile = - if tcConfig.doDetuple then + let implFile = + if tcConfig.doDetuple then //ReportTime tcConfig ("Detupled optimization") - let implFile = implFile |> Detuple.DetupleImplFile ccu tcGlobals + let implFile = implFile |> Detuple.DetupleImplFile ccu tcGlobals //PrintWholeAssemblyImplementation tcConfig outfile "post-detuple" implFile - implFile - else implFile + implFile + else implFile - let implFile = - if tcConfig.doTLR then - implFile |> InnerLambdasToTopLevelFuncs.MakeTLRDecisions ccu tcGlobals - else implFile + let implFile = + if tcConfig.doTLR then + implFile |> InnerLambdasToTopLevelFuncs.MakeTLRDecisions ccu tcGlobals + else implFile - let implFile = + let implFile = LowerCallsAndSeqs.LowerImplFile tcGlobals implFile let implFile, optEnvFinalSimplify = - if tcConfig.doFinalSimplify then + if tcConfig.doFinalSimplify then //ReportTime tcConfig ("Final simplify pass") - let (optEnvFinalSimplify, implFile, _, _), _ = + 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, optEnvFinalSimplify + else + implFile, optEnvFinalSimplify - let implFile = + let implFile = { ImplFile = implFile OptimizeDuringCodeGen = optimizeDuringCodeGen } @@ -151,29 +148,29 @@ let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importM tassembly, assemblyOptData, optEnvFirstLoop //---------------------------------------------------------------------------- -// ILX generation +// ILX generation //---------------------------------------------------------------------------- -let CreateIlxAssemblyGenerator (_tcConfig:TcConfig, tcImports:TcImports, tcGlobals, tcVal, generatedCcu) = +let CreateIlxAssemblyGenerator (_tcConfig:TcConfig, tcImports:TcImports, tcGlobals, tcVal, generatedCcu) = let ilxGenerator = new IlxGen.IlxAssemblyGenerator (tcImports.GetImportMap(), tcGlobals, tcVal, generatedCcu) let ccus = tcImports.GetCcusInDeclOrder() ilxGenerator.AddExternalCcus ccus ilxGenerator -let GenerateIlxCode +let GenerateIlxCode (ilxBackend, isInteractiveItExpr, isInteractiveOnMono, tcConfig:TcConfig, topAttrs: TopAttribs, optimizedImpls, fragName, ilxGenerator: IlxAssemblyGenerator) = - let mainMethodInfo = - if (tcConfig.target = CompilerTarget.Dll) || (tcConfig.target = CompilerTarget.Module) then - None + let mainMethodInfo = + if (tcConfig.target = CompilerTarget.Dll) || (tcConfig.target = CompilerTarget.Module) then + None else Some topAttrs.mainMethodAttrs - let ilxGenOpts: IlxGenOptions = + let ilxGenOpts: IlxGenOptions = { generateFilterBlocks = tcConfig.generateFilterBlocks emitConstantArraysUsingStaticDataBlobs = not isInteractiveOnMono - workAroundReflectionEmitBugs=tcConfig.isInteractive // REVIEW: is this still required? + workAroundReflectionEmitBugs=tcConfig.isInteractive // REVIEW: is this still required? generateDebugSymbols= tcConfig.debuginfo fragName = fragName localOptimizationsAreOn= tcConfig.optSettings.localOpt () @@ -184,7 +181,7 @@ let GenerateIlxCode isInteractiveItExpr = isInteractiveItExpr alwaysCallVirt = tcConfig.alwaysCallVirt } - ilxGenerator.GenerateCode (ilxGenOpts, optimizedImpls, topAttrs.assemblyAttrs, topAttrs.netModuleAttrs) + ilxGenerator.GenerateCode (ilxGenOpts, optimizedImpls, topAttrs.assemblyAttrs, topAttrs.netModuleAttrs) //---------------------------------------------------------------------------- // Assembly ref normalization: make sure all assemblies are referred to @@ -193,18 +190,17 @@ let GenerateIlxCode let NormalizeAssemblyRefs (ctok, ilGlobals: ILGlobals, tcImports:TcImports) scoref = let normalizeAssemblyRefByName nm = - match tcImports.TryFindDllInfo (ctok, Range.rangeStartup, nm, lookupOnly=false) with + match tcImports.TryFindDllInfo (ctok, Range.rangeStartup, nm, lookupOnly=false) with | Some dllInfo -> dllInfo.ILScopeRef | None -> scoref - match scoref with - | ILScopeRef.Local + match scoref with + | ILScopeRef.Local | ILScopeRef.Module _ -> scoref | ILScopeRef.PrimaryAssembly -> normalizeAssemblyRefByName ilGlobals.primaryAssemblyName | ILScopeRef.Assembly aref -> normalizeAssemblyRefByName aref.Name -let GetGeneratedILModuleName (t:CompilerTarget) (s:string) = +let GetGeneratedILModuleName (t:CompilerTarget) (s:string) = // return the name of the file as a module name let ext = match t with CompilerTarget.Dll -> "dll" | CompilerTarget.Module -> "netmodule" | _ -> "exe" s + "." + ext - diff --git a/src/fsharp/OptimizeInputs.fsi b/src/fsharp/OptimizeInputs.fsi index c52eab8645d..0ebdcaf8b72 100644 --- a/src/fsharp/OptimizeInputs.fsi +++ b/src/fsharp/OptimizeInputs.fsi @@ -2,9 +2,9 @@ module internal FSharp.Compiler.OptimizeInputs -open FSharp.Compiler +open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerImports open FSharp.Compiler.IlxGen @@ -12,7 +12,6 @@ open FSharp.Compiler.Import open FSharp.Compiler.Optimizer open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypedTree -open FSharp.Compiler.CheckDeclarations val GetGeneratedILModuleName : CompilerTarget -> string -> string diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index 7d04b23c49b..d579077b081 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -6,29 +6,30 @@ module internal FSharp.Compiler.Optimizer open Internal.Utilities -open Internal.Utilities.StructuredFormat - +open Internal.Utilities.Collections +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AttributeChecking open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Infos -open FSharp.Compiler.Layout -open FSharp.Compiler.Layout.TaggedTextOps -open FSharp.Compiler.Lib -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax open FSharp.Compiler.SyntaxTreeOps +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Layout +open FSharp.Compiler.Text.LayoutRender +open FSharp.Compiler.Text.TaggedText open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TypedTreeOps.DebugPrint open FSharp.Compiler.TypedTreePickle -open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypeRelations open System.Collections.Generic @@ -396,7 +397,7 @@ type cenv = emitTailcalls: bool /// cache methods with SecurityAttribute applied to them, to prevent unnecessary calls to ExistsInEntireHierarchyOfType - casApplied : Dictionary + casApplied: Dictionary } override x.ToString() = "" @@ -512,28 +513,19 @@ let mkValInfo info (v: Val) = { ValExprInfo=info.Info; ValMakesNoCriticalTailcal (* Bind a value *) let BindInternalLocalVal cenv (v: Val) vval env = let vval = if v.IsMutable then UnknownValInfo else vval -#if CHECKED -#else + match vval.ValExprInfo with | UnknownValue -> env - | _ -> -#endif + | _ -> cenv.localInternalVals.[v.Stamp] <- vval env let BindExternalLocalVal cenv (v: Val) vval env = -#if CHECKED - CheckInlineValueIsComplete v vval -#endif - let vval = if v.IsMutable then {vval with ValExprInfo=UnknownValue } else vval - let env = -#if CHECKED -#else + let env = match vval.ValExprInfo with | UnknownValue -> env - | _ -> -#endif + | _ -> { env with localExternalVals=env.localExternalVals.Add (v.Stamp, vval) } // If we're compiling fslib then also bind the value as a non-local path to // allow us to resolve the compiler-non-local-references that arise from env.fs @@ -560,21 +552,14 @@ let rec BindValsInModuleOrNamespace cenv (mval: LazyModuleInfo) env = env let inline BindInternalValToUnknown cenv v env = -#if CHECKED - BindInternalLocalVal cenv v UnknownValue env -#else ignore cenv ignore v env -#endif + let inline BindInternalValsToUnknown cenv vs env = -#if CHECKED - List.foldBack (BindInternalValToUnknown cenv) vs env -#else ignore cenv ignore vs env -#endif let BindTypeVar tyv typeinfo env = { env with typarInfos= (tyv, typeinfo) :: env.typarInfos } @@ -605,9 +590,6 @@ let GetInfoForLocalValue cenv env (v: Val) m = | None -> if v.MustInline then errorR(Error(FSComp.SR.optValueMarkedInlineButWasNotBoundInTheOptEnv(fullDisplayTextOfValRef (mkLocalValRef v)), m)) -#if CHECKED - warning(Error(FSComp.SR.optLocalValueNotFoundDuringOptimization(v.DisplayName), m)) -#endif UnknownValInfo let TryGetInfoForCcu env (ccu: CcuThunk) = env.globalModuleInfos.TryFind(ccu.AssemblyName) @@ -1252,17 +1234,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 (Display.squashTo 192 (moduleInfoL g info))) + if verboseOptimizationInfo then dprintf "%s - %a - Optimization data prior to trim: \n%s\n" msg outputRange m (showL (Display.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 (Display.squashTo 192 (moduleInfoL g info))) + if verboseOptimizationInfo then dprintf "%s - %a - Optimization data after trim:\n%s\n" msg outputRange m (showL (Display.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 (Display.squashTo 192 (moduleInfoL g info))) + if verboseOptimizationInfo then dprintf "%s - %a - Optimization data after remap:\n%s\n" msg outputRange m (showL (Display.squashTo 192 (moduleInfoL g info))) #endif info @@ -1270,9 +1252,12 @@ let AbstractAndRemapModulInfo msg g m (repackage, hidden) info = // Misc helpers //------------------------------------------------------------------------- -// Mark some variables (the ones we introduce via abstractBigTargets) as don't-eliminate +/// Mark some variables (the ones we introduce via abstractBigTargets) as don't-eliminate let [] suffixForVariablesThatMayNotBeEliminated = "$cont" +/// Indicates a ValRef generated to facilitate tuple eliminations +let [] suffixForTupleElementAssignmentTarget = "$tupleElem" + /// Type applications of F# "type functions" may cause side effects, e.g. /// let x<'a> = printfn "hello"; typeof<'a> /// In this case do not treat them as constants. @@ -1293,6 +1278,18 @@ let ValueOfExpr expr = ConstExprValue(0, expr) else UnknownValue +let IsMutableStructuralBindingForTupleElement (vref: ValRef) = + vref.IsCompilerGenerated && + vref.LogicalName.EndsWith suffixForTupleElementAssignmentTarget + +let IsMutableForOutArg (vref: ValRef) = + vref.IsCompilerGenerated && + vref.LogicalName.StartsWith(PrettyNaming.outArgCompilerGeneratedName) + +let IsKnownOnlyMutableBeforeUse (vref: ValRef) = + IsMutableStructuralBindingForTupleElement vref || + IsMutableForOutArg vref + //------------------------------------------------------------------------- // Dead binding elimination //------------------------------------------------------------------------- @@ -1593,7 +1590,12 @@ let MakeStructuralBindingTemp (v: Val) i (arg: Expr) argTy = let name = v.LogicalName + "_" + string i let v, ve = mkCompGenLocal arg.Range name argTy ve, mkCompGenBind v arg - + +let MakeMutableStructuralBindingForTupleElement (v: Val) i (arg: Expr) argTy = + let name = sprintf "%s_%d%s" v.LogicalName i suffixForTupleElementAssignmentTarget + let v, ve = mkMutableCompGenLocal arg.Range name argTy + ve, mkCompGenBind v arg + let ExpandStructuralBindingRaw cenv expr = assert cenv.settings.ExpandStructuralValues() match expr with @@ -1627,6 +1629,86 @@ let rec RearrangeTupleBindings expr fin = | Some b -> Some (mkLetBind m bind b) | None -> None | Expr.Op (TOp.Tuple tupInfo, _, _, _) when not (evalTupInfoIsStruct tupInfo) -> Some (fin expr) + | Expr.Sequential (e1, e2, kind, sp, m) -> + match RearrangeTupleBindings e2 fin with + | Some b -> Some (Expr.Sequential (e1, b, kind, sp, m)) + | None -> None + | _ -> None + +// Attempts to rewrite tuple bindings containing ifs/matches by introducing a mutable local for each tuple element. +// These are assigned to exactly once from each branch in order to eliminate tuple allocations. The tuple binding +// is also rearranged such that OptimizeTupleFieldGet may kick in (see RearrangeTupleBindings comment above). +// First class use of a tuple at the end of any branch prevents this rewrite. +// +// Roughly speaking, the following expression: +// +// let a, b = +// if cond () then +// 1, 2 +// elif cond2 () then +// 3, 4 +// else +// 5, 6 +// in ... +// +// becomes +// +// let mutable a = Unchecked.defaultof<_> +// let mutable b = Unchecked.defaultof<_> +// +// if cond () then +// a <- 1 +// b <- 2 +// elif cond2 () then +// a <- 3 +// b <- 4 +// else +// a <- 5 +// b <- 6 +// in ... +let TryRewriteBranchingTupleBinding g (v: Val) rhs tgtSeqPtOpt body m = + let rec dive g m (requisites: Lazy<_>) expr = + match expr with + | Expr.Match (sp, inputRange, decision, targets, fullRange, ty) -> + // Recurse down every if/match branch + let rewrittenTargets = targets |> Array.choose (fun (TTarget (vals, targetExpr, sp)) -> + match dive g m requisites targetExpr with + | Some rewritten -> TTarget (vals, rewritten, sp) |> Some + | _ -> None) + + // If not all branches can be rewritten, keep the original expression as it is + if rewrittenTargets.Length <> targets.Length then + None + else + Expr.Match (sp, inputRange, decision, rewrittenTargets, fullRange, ty) |> Some + | Expr.Op (TOp.Tuple tupInfo, _, tupleElements, m) when not (evalTupInfoIsStruct tupInfo) -> + // Replace tuple allocation with mutations of locals + let _, _, _, vrefs = requisites.Value + List.map2 (mkValSet m) vrefs tupleElements + |> mkSequentials DebugPointAtSequential.StmtOnly g m + |> Some + | Expr.Sequential (e1, e2, kind, sp, m) -> + match dive g m requisites e2 with + | Some rewritten -> Expr.Sequential (e1, rewritten, kind, sp, m) |> Some + | _ -> None + | Expr.Let (bind, body, m, _) -> + match dive g m requisites body with + | Some rewritten -> mkLetBind m bind rewritten |> Some + | _ -> None + | _ -> None + + let requisites = lazy ( + let argTys = destRefTupleTy g v.Type + let inits = argTys |> List.map (mkNull m) + let ves, binds = List.mapi2 (MakeMutableStructuralBindingForTupleElement v) inits argTys |> List.unzip + let vrefs = binds |> List.map (fun (TBind (v, _, _)) -> mkLocalValRef v) + argTys, ves, binds, vrefs) + + match dive g m requisites rhs with + | Some rewrittenRhs -> + let argTys, ves, binds, _ = requisites.Value + let rhsAndTupleBinding = mkCompGenSequential m rewrittenRhs (mkLet tgtSeqPtOpt m v (mkRefTupled g m ves argTys) body) + mkLetsBind m binds rhsAndTupleBinding |> Some | _ -> None let ExpandStructuralBinding cenv expr = @@ -1638,7 +1720,9 @@ let ExpandStructuralBinding cenv expr = CanExpandStructuralBinding v) -> match RearrangeTupleBindings rhs (fun top -> mkLet tgtSeqPtOpt m v top body) with | Some e -> ExpandStructuralBindingRaw cenv e - | None -> expr + | None -> + // RearrangeTupleBindings could have failed because the rhs branches + TryRewriteBranchingTupleBinding cenv.g v rhs tgtSeqPtOpt body m |> Option.defaultValue expr // Expand 'let v = Some arg in ...' to 'let tmp = arg in let v = Some tp in ...' // Used to give names to values of optional arguments prior as we inline. @@ -2138,7 +2222,7 @@ and OptimizeExprOpReductionsAfter cenv env (op, tyargs, argsR, arginfos, m) = | _ -> None match knownValue with | Some valu -> - match TryOptimizeVal cenv env (false, valu, m) with + match TryOptimizeVal cenv env (None, false, valu, m) with | Some res -> OptimizeExpr cenv env res (* discard e1 since guard ensures it has no effects *) | None -> OptimizeExprOpFallback cenv env (op, tyargs, argsR, m) arginfos valu | None -> OptimizeExprOpFallback cenv env (op, tyargs, argsR, m) arginfos UnknownValue @@ -2284,6 +2368,14 @@ and OptimizeFastIntegerForLoop cenv env (spStart, v, e1, dir, e2, e3, m) = mkLdlen cenv.g (e2R.Range) arre, CSharpForLoopUp + | FSharpForLoopUp, Expr.Op (TOp.ILAsm ([ (AI_sub | AI_sub_ovf)], _), _, [Expr.Op (TOp.ILCall(_,_,_,_,_,_,_, mth, _,_,_), _, [arre], _) as lenOp; Expr.Const (Const.Int32 1, _, _)], _) + when + mth.Name = "get_Length" && (mth.DeclaringTypeRef.FullName = "System.Span`1" || mth.DeclaringTypeRef.FullName = "System.ReadOnlySpan`1") + && not (snd(OptimizeExpr cenv env arre)).HasEffect -> + + lenOp, CSharpForLoopUp + + // detect upwards for loops with constant bounds, but not MaxValue! | FSharpForLoopUp, Expr.Const (Const.Int32 n, _, _) when n < System.Int32.MaxValue -> @@ -2467,7 +2559,7 @@ and OptimizeTraitCall cenv env (traitInfo, args, m) = /// Make optimization decisions once we know the optimization information /// for a value -and TryOptimizeVal cenv env (mustInline, valInfoForVal, m) = +and TryOptimizeVal cenv env (vOpt: ValRef option, mustInline, valInfoForVal, m) = match valInfoForVal with // Inline all constants immediately @@ -2475,15 +2567,25 @@ and TryOptimizeVal cenv env (mustInline, valInfoForVal, m) = Some (Expr.Const (c, m, ty)) | SizeValue (_, detail) -> - TryOptimizeVal cenv env (mustInline, detail, m) + TryOptimizeVal cenv env (vOpt, mustInline, detail, m) | ValValue (vR, detail) -> // Inline values bound to other values immediately // Prefer to inline using the more specific info if possible // If the more specific info didn't reveal an inline then use the value - match TryOptimizeVal cenv env (mustInline, detail, m) with + match TryOptimizeVal cenv env (vOpt, mustInline, detail, m) with | Some e -> Some e - | None -> Some(exprForValRef m vR) + | None -> + // If we have proven 'v = compilerGeneratedValue' + // and 'v' is being eliminated in favour of 'compilerGeneratedValue' + // then replace the name of 'compilerGeneratedValue' + // by 'v' and mark it not compiler generated so we preserve good debugging and names + match vOpt with + | Some v when not v.IsCompilerGenerated && vR.IsCompilerGenerated -> + vR.Deref.SetIsCompilerGenerated(false) + vR.Deref.SetLogicalName(v.LogicalName) + | _ -> () + Some(exprForValRef m vR) | ConstExprValue(_size, expr) -> Some (remarkExpr m (copyExpr cenv.g CloneAllAndMarkExprValsAsCompilerGenerated expr)) @@ -2502,24 +2604,26 @@ and TryOptimizeVal cenv env (mustInline, valInfoForVal, m) = | _ -> None and TryOptimizeValInfo cenv env m vinfo = - if vinfo.HasEffect then None else TryOptimizeVal cenv env (false, vinfo.Info, m) + if vinfo.HasEffect then None else TryOptimizeVal cenv env (None, false, vinfo.Info, m) /// Add 'v1 = v2' information into the information stored about a value and AddValEqualityInfo g m (v: ValRef) info = // ValValue is information that v = v2, where v2 does not change // So we can't record this information for mutable values. An exception can be made // for "outArg" values arising from method calls since they are only temporarily mutable - // when their address is passed to the method call. - if v.IsMutable && not (v.IsCompilerGenerated && v.DisplayName.StartsWith(PrettyNaming.outArgCompilerGeneratedName)) then + // when their address is passed to the method call. Another exception are mutable variables + // created for tuple elimination in branching tuple bindings because they are assigned to + // exactly once. + if not v.IsMutable || IsKnownOnlyMutableBeforeUse v then + { info with Info = MakeValueInfoForValue g m v info.Info } + else info - else - {info with Info= MakeValueInfoForValue g m v info.Info} /// Optimize/analyze a use of a value and OptimizeVal cenv env expr (v: ValRef, m) = let valInfoForVal = GetInfoForVal cenv env m v - match TryOptimizeVal cenv env (v.MustInline, valInfoForVal.ValExprInfo, m) with + match TryOptimizeVal cenv env (Some v, v.MustInline, valInfoForVal.ValExprInfo, m) with | Some e -> // don't reoptimize inlined lambdas until they get applied to something match e with @@ -3159,7 +3263,7 @@ and TryOptimizeDecisionTreeTest cenv test vinfo = | DecisionTreeTest.IsNull, StripConstValue c2 -> Some(c2=Const.Zero) | DecisionTreeTest.IsInst (_srcty1, _tgty1), _ -> None // These should not occur in optimization - | DecisionTreeTest.ActivePatternCase (_, _, _vrefOpt1, _, _), _ -> None + | DecisionTreeTest.ActivePatternCase _, _ -> None | _ -> None /// Optimize/analyze a switch construct from pattern matching diff --git a/src/fsharp/Optimizer.fsi b/src/fsharp/Optimizer.fsi index 969e94e885b..85504d02628 100644 --- a/src/fsharp/Optimizer.fsi +++ b/src/fsharp/Optimizer.fsi @@ -4,6 +4,7 @@ module internal FSharp.Compiler.Optimizer open FSharp.Compiler open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TypedTreePickle @@ -16,14 +17,17 @@ type OptimizationSettings = bigTargetSize: int veryBigExprSize: int lambdaInlineThreshold: int - reportingPhase: bool; + reportingPhase: bool reportNoNeedToTailcall: bool reportFunctionSizes: bool reportHasEffect: bool - reportTotalSizes: bool } + reportTotalSizes: bool + } member jitOpt: unit -> bool + member localOpt: unit -> bool + static member Defaults: OptimizationSettings /// Optimization information @@ -58,7 +62,7 @@ val internal OptimizeImplFile: #if DEBUG /// Displaying optimization data -val internal moduleInfoL: TcGlobals -> LazyModuleInfo -> Layout.layout +val internal moduleInfoL: TcGlobals -> LazyModuleInfo -> Layout #endif /// Saving and re-reading optimization information @@ -76,4 +80,8 @@ val UnionOptimizationInfos: seq -> CcuOptimizationInfo /// Check if an expression has an effect val ExprHasEffect: TcGlobals -> Expr -> bool -val internal u_CcuOptimizationInfo: ReaderState -> CcuOptimizationInfo \ No newline at end of file +val internal u_CcuOptimizationInfo: ReaderState -> CcuOptimizationInfo + +/// Indicates the value is only mutable during its initialization and before any access or capture +val IsKnownOnlyMutableBeforeUse: ValRef -> bool + diff --git a/src/fsharp/ParseAndCheckInputs.fs b/src/fsharp/ParseAndCheckInputs.fs index 13b6fa3beba..fcd366e6bfb 100644 --- a/src/fsharp/ParseAndCheckInputs.fs +++ b/src/fsharp/ParseAndCheckInputs.fs @@ -5,46 +5,46 @@ module internal FSharp.Compiler.ParseAndCheckInputs open System open System.IO +open System.Threading -open Internal.Utilities -open Internal.Utilities.Filename +open Internal.Utilities.Collections +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open Internal.Utilities.Text.Lexing open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.CheckExpressions open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerDiagnostics open FSharp.Compiler.CompilerImports -open FSharp.Compiler.DotNetFrameworkDependencies +open FSharp.Compiler.Diagnostics open FSharp.Compiler.ErrorLogger +open FSharp.Compiler.IO open FSharp.Compiler.Lexhelp -open FSharp.Compiler.Lib open FSharp.Compiler.NameResolution open FSharp.Compiler.ParseHelpers -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.Range +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Position +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TcGlobals -open FSharp.Compiler.XmlDoc +let CanonicalizeFilename filename = + let basic = FileSystemUtils.fileNameOfPath filename + String.capitalize (try FileSystemUtils.chopExtension basic with _ -> basic) -let CanonicalizeFilename filename = - let basic = fileNameOfPath filename - String.capitalize (try Filename.chopExtension basic with _ -> basic) +let IsScript filename = + let lower = String.lowercase filename + FSharpScriptFileSuffixes |> List.exists (FileSystemUtils.checkSuffix lower) -let IsScript filename = - let lower = String.lowercase filename - FSharpScriptFileSuffixes |> List.exists (Filename.checkSuffix lower) - // Give a unique name to the different kinds of inputs. Used to correlate signature and implementation files // QualFileNameOfModuleName - files with a single module declaration or an anonymous module let QualFileNameOfModuleName m filename modname = @@ -57,14 +57,14 @@ let QualFileNameOfFilename m filename = let ComputeQualifiedNameOfFileFromUniquePath (m, p: string list) = QualifiedNameOfFile(mkSynId m (String.concat "_" p)) -let QualFileNameOfSpecs filename specs = - match specs with +let QualFileNameOfSpecs filename specs = + match specs with | [SynModuleOrNamespaceSig(modname, _, kind, _, _, _, _, m)] when kind.IsModule -> QualFileNameOfModuleName m filename modname | [SynModuleOrNamespaceSig(_, _, kind, _, _, _, _, m)] when not kind.IsModule -> QualFileNameOfFilename m filename | _ -> QualFileNameOfFilename (mkRange filename pos0 pos0) filename -let QualFileNameOfImpls filename specs = - match specs with +let QualFileNameOfImpls filename specs = + match specs with | [SynModuleOrNamespace(modname, _, kind, _, _, _, _, m)] when kind.IsModule -> QualFileNameOfModuleName m filename modname | [SynModuleOrNamespace(_, _, kind, _, _, _, _, m)] when not kind.IsModule -> QualFileNameOfFilename m filename | _ -> QualFileNameOfFilename (mkRange filename pos0 pos0) filename @@ -78,21 +78,21 @@ let PrependPathToImpl x (SynModuleOrNamespace(p, b, c, d, e, f, g, h)) = let PrependPathToSpec x (SynModuleOrNamespaceSig(p, b, c, d, e, f, g, h)) = SynModuleOrNamespaceSig(x@p, b, c, d, e, f, g, h) -let PrependPathToInput x inp = - match inp with +let PrependPathToInput x inp = + match inp with | ParsedInput.ImplFile (ParsedImplFileInput (b, c, q, d, hd, impls, e)) -> ParsedInput.ImplFile (ParsedImplFileInput (b, c, PrependPathToQualFileName x q, d, hd, List.map (PrependPathToImpl x) impls, e)) | ParsedInput.SigFile (ParsedSigFileInput (b, q, d, hd, specs)) -> ParsedInput.SigFile (ParsedSigFileInput (b, PrependPathToQualFileName x q, d, hd, List.map (PrependPathToSpec x) specs)) -let ComputeAnonModuleName check defaultNamespace filename (m: range) = +let ComputeAnonModuleName check defaultNamespace filename (m: range) = let modname = CanonicalizeFilename filename if check && not (modname |> String.forall (fun c -> System.Char.IsLetterOrDigit c || c = '_')) then if not (filename.EndsWith("fsx", StringComparison.OrdinalIgnoreCase) || filename.EndsWith("fsscript", StringComparison.OrdinalIgnoreCase)) then - warning(Error(FSComp.SR.buildImplicitModuleIsNotLegalIdentifier(modname, (fileNameOfPath filename)), m)) - let combined = - match defaultNamespace with + warning(Error(FSComp.SR.buildImplicitModuleIsNotLegalIdentifier(modname, (FileSystemUtils.fileNameOfPath filename)), m)) + let combined = + match defaultNamespace with | None -> modname | Some ns -> textOfPath [ns;modname] @@ -101,117 +101,120 @@ let ComputeAnonModuleName check defaultNamespace filename (m: range) = mkRange filename pos0 pos0 pathToSynLid anonymousModuleNameRange (splitNamespace combined) -let PostParseModuleImpl (_i, defaultNamespace, isLastCompiland, filename, impl) = - match impl with - | ParsedImplFileFragment.NamedModule(SynModuleOrNamespace(lid, isRec, kind, decls, xmlDoc, attribs, access, m)) -> - let lid = - match lid with +let PostParseModuleImpl (_i, defaultNamespace, isLastCompiland, filename, impl) = + match impl with + | ParsedImplFileFragment.NamedModule(SynModuleOrNamespace(lid, isRec, kind, decls, xmlDoc, attribs, access, m)) -> + let lid = + match lid with | [id] when kind.IsModule && id.idText = MangledGlobalName -> error(Error(FSComp.SR.buildInvalidModuleOrNamespaceName(), id.idRange)) | id :: rest when id.idText = MangledGlobalName -> rest | _ -> lid SynModuleOrNamespace(lid, isRec, kind, decls, xmlDoc, attribs, access, m) - | ParsedImplFileFragment.AnonModule (defs, m)-> - let isLast, isExe = isLastCompiland + | ParsedImplFileFragment.AnonModule (defs, m)-> + let isLast, isExe = isLastCompiland let lower = String.lowercase filename - if not (isLast && isExe) && not (doNotRequireNamespaceOrModuleSuffixes |> List.exists (Filename.checkSuffix lower)) then + if not (isLast && isExe) && not (doNotRequireNamespaceOrModuleSuffixes |> List.exists (FileSystemUtils.checkSuffix lower)) then match defs with | SynModuleDecl.NestedModule(_) :: _ -> errorR(Error(FSComp.SR.noEqualSignAfterModule(), trimRangeToLine m)) | _ -> errorR(Error(FSComp.SR.buildMultiFileRequiresNamespaceOrModule(), trimRangeToLine m)) let modname = ComputeAnonModuleName (not (isNil defs)) defaultNamespace filename (trimRangeToLine m) - SynModuleOrNamespace(modname, false, AnonModule, defs, PreXmlDoc.Empty, [], None, m) + SynModuleOrNamespace(modname, false, SynModuleOrNamespaceKind.AnonModule, defs, PreXmlDoc.Empty, [], None, m) - | ParsedImplFileFragment.NamespaceFragment (lid, a, kind, c, d, e, m)-> - let lid, kind = - match lid with + | ParsedImplFileFragment.NamespaceFragment (lid, a, kind, c, d, e, m)-> + let lid, kind = + match lid with | id :: rest when id.idText = MangledGlobalName -> - rest, if List.isEmpty rest then GlobalNamespace else kind + rest, if List.isEmpty rest then SynModuleOrNamespaceKind.GlobalNamespace else kind | _ -> lid, kind SynModuleOrNamespace(lid, a, kind, c, d, e, None, m) -let PostParseModuleSpec (_i, defaultNamespace, isLastCompiland, filename, intf) = - match intf with - | ParsedSigFileFragment.NamedModule(SynModuleOrNamespaceSig(lid, isRec, kind, decls, xmlDoc, attribs, access, m)) -> - let lid = - match lid with +let PostParseModuleSpec (_i, defaultNamespace, isLastCompiland, filename, intf) = + match intf with + | ParsedSigFileFragment.NamedModule(SynModuleOrNamespaceSig(lid, isRec, kind, decls, xmlDoc, attribs, access, m)) -> + let lid = + match lid with | [id] when kind.IsModule && id.idText = MangledGlobalName -> error(Error(FSComp.SR.buildInvalidModuleOrNamespaceName(), id.idRange)) | id :: rest when id.idText = MangledGlobalName -> rest | _ -> lid - SynModuleOrNamespaceSig(lid, isRec, NamedModule, decls, xmlDoc, attribs, access, m) + SynModuleOrNamespaceSig(lid, isRec, SynModuleOrNamespaceKind.NamedModule, decls, xmlDoc, attribs, access, m) - | ParsedSigFileFragment.AnonModule (defs, m) -> + | ParsedSigFileFragment.AnonModule (defs, m) -> let isLast, isExe = isLastCompiland let lower = String.lowercase filename - if not (isLast && isExe) && not (doNotRequireNamespaceOrModuleSuffixes |> List.exists (Filename.checkSuffix lower)) then + if not (isLast && isExe) && not (doNotRequireNamespaceOrModuleSuffixes |> List.exists (FileSystemUtils.checkSuffix lower)) then match defs with | SynModuleSigDecl.NestedModule(_) :: _ -> errorR(Error(FSComp.SR.noEqualSignAfterModule(), m)) | _ -> errorR(Error(FSComp.SR.buildMultiFileRequiresNamespaceOrModule(), m)) let modname = ComputeAnonModuleName (not (isNil defs)) defaultNamespace filename (trimRangeToLine m) - SynModuleOrNamespaceSig(modname, false, AnonModule, defs, PreXmlDoc.Empty, [], None, m) + SynModuleOrNamespaceSig(modname, false, SynModuleOrNamespaceKind.AnonModule, defs, PreXmlDoc.Empty, [], None, m) - | ParsedSigFileFragment.NamespaceFragment (lid, a, kind, c, d, e, m)-> - let lid, kind = - match lid with + | ParsedSigFileFragment.NamespaceFragment (lid, a, kind, c, d, e, m)-> + let lid, kind = + match lid with | id :: rest when id.idText = MangledGlobalName -> - rest, if List.isEmpty rest then GlobalNamespace else kind + rest, if List.isEmpty rest then SynModuleOrNamespaceKind.GlobalNamespace else kind | _ -> lid, kind SynModuleOrNamespaceSig(lid, a, kind, c, d, e, None, m) -let GetScopedPragmasForInput input = - match input with +let GetScopedPragmasForInput input = + match input with | ParsedInput.SigFile (ParsedSigFileInput (scopedPragmas=pragmas)) -> pragmas | ParsedInput.ImplFile (ParsedImplFileInput (scopedPragmas=pragmas)) -> pragmas -let GetScopedPragmasForHashDirective hd = - [ match hd with +let GetScopedPragmasForHashDirective hd = + [ match hd with | ParsedHashDirective("nowarn", numbers, m) -> for s in numbers do - match GetWarningNumber(m, s) with - | None -> () - | Some n -> yield ScopedPragma.WarningOff(m, n) + match s with + | ParsedHashDirectiveArgument.SourceIdentifier _ -> () + | ParsedHashDirectiveArgument.String (s, _, _) -> + match GetWarningNumber(m, s) with + | None -> () + | Some n -> yield ScopedPragma.WarningOff(m, n) | _ -> () ] -let PostParseModuleImpls (defaultNamespace, filename, isLastCompiland, ParsedImplFile (hashDirectives, impls)) = +let PostParseModuleImpls (defaultNamespace, filename, isLastCompiland, ParsedImplFile (hashDirectives, impls)) = match impls |> List.rev |> List.tryPick (function ParsedImplFileFragment.NamedModule(SynModuleOrNamespace(lid, _, _, _, _, _, _, _)) -> Some lid | _ -> None) with - | Some lid when impls.Length > 1 -> + | Some lid when impls.Length > 1 -> errorR(Error(FSComp.SR.buildMultipleToplevelModules(), rangeOfLid lid)) - | _ -> + | _ -> () - let impls = impls |> List.mapi (fun i x -> PostParseModuleImpl (i, defaultNamespace, isLastCompiland, filename, x)) + let impls = impls |> List.mapi (fun i x -> PostParseModuleImpl (i, defaultNamespace, isLastCompiland, filename, x)) let qualName = QualFileNameOfImpls filename impls let isScript = IsScript filename - let scopedPragmas = - [ for (SynModuleOrNamespace(_, _, _, decls, _, _, _, _)) in impls do + let scopedPragmas = + [ for (SynModuleOrNamespace(_, _, _, decls, _, _, _, _)) in impls do for d in decls do - match d with + match d with | SynModuleDecl.HashDirective (hd, _) -> yield! GetScopedPragmasForHashDirective hd - | _ -> () - for hd in hashDirectives do + | _ -> () + for hd in hashDirectives do yield! GetScopedPragmasForHashDirective hd ] ParsedInput.ImplFile (ParsedImplFileInput (filename, isScript, qualName, scopedPragmas, hashDirectives, impls, isLastCompiland)) - -let PostParseModuleSpecs (defaultNamespace, filename, isLastCompiland, ParsedSigFile (hashDirectives, specs)) = + +let PostParseModuleSpecs (defaultNamespace, filename, isLastCompiland, ParsedSigFile (hashDirectives, specs)) = match specs |> List.rev |> List.tryPick (function ParsedSigFileFragment.NamedModule(SynModuleOrNamespaceSig(lid, _, _, _, _, _, _, _)) -> Some lid | _ -> None) with - | Some lid when specs.Length > 1 -> + | Some lid when specs.Length > 1 -> errorR(Error(FSComp.SR.buildMultipleToplevelModules(), rangeOfLid lid)) - | _ -> + | _ -> () - - let specs = specs |> List.mapi (fun i x -> PostParseModuleSpec(i, defaultNamespace, isLastCompiland, filename, x)) + + let specs = specs |> List.mapi (fun i x -> PostParseModuleSpec(i, defaultNamespace, isLastCompiland, filename, x)) let qualName = QualFileNameOfSpecs filename specs - let scopedPragmas = - [ for (SynModuleOrNamespaceSig(_, _, _, decls, _, _, _, _)) in specs do + let scopedPragmas = + [ for (SynModuleOrNamespaceSig(_, _, _, decls, _, _, _, _)) in specs do for d in decls do - match d with + match d with | SynModuleSigDecl.HashDirective(hd, _) -> yield! GetScopedPragmasForHashDirective hd - | _ -> () - for hd in hashDirectives do + | _ -> () + for hd in hashDirectives do yield! GetScopedPragmasForHashDirective hd ] ParsedInput.SigFile (ParsedSigFileInput (filename, qualName, scopedPragmas, hashDirectives, specs)) @@ -224,7 +227,7 @@ let DeduplicateModuleName (moduleNamesDict: ModuleNamesDict) fileName (qualNameO let path = if FileSystem.IsPathRootedShim path then try FileSystem.GetFullPathShim path with _ -> path else path match moduleNamesDict.TryGetValue qualNameOfFile.Text with | true, paths -> - if paths.ContainsKey path then + if paths.ContainsKey path then paths.[path], moduleNamesDict else let count = paths.Count + 1 @@ -248,14 +251,14 @@ let DeduplicateParsedInputModuleName (moduleNamesDict: ModuleNamesDict) input = let inputT = ParsedInput.SigFile (ParsedSigFileInput.ParsedSigFileInput (fileName, qualNameOfFileT, scopedPragmas, hashDirectives, modules)) inputT, moduleNamesDictT -let ParseInput (lexer, errorLogger: ErrorLogger, lexbuf: UnicodeLexing.Lexbuf, defaultNamespace, filename, isLastCompiland) = +let ParseInput (lexer, errorLogger: ErrorLogger, lexbuf: UnicodeLexing.Lexbuf, defaultNamespace, filename, isLastCompiland) = // The assert below is almost ok, but it fires in two cases: // - fsi.exe sometimes passes "stdin" as a dummy filename - // - if you have a #line directive, e.g. + // - if you have a #line directive, e.g. // # 1000 "Line01.fs" // then it also asserts. But these are edge cases that can be fixed later, e.g. in bug 4651. //System.Diagnostics.Debug.Assert(System.IO.Path.IsPathRooted filename, sprintf "should be absolute: '%s'" filename) - let lower = String.lowercase filename + let lower = String.lowercase filename // Delay sending errors and warnings until after the file is parsed. This gives us a chance to scrape the // #nowarn declarations for the file @@ -264,19 +267,19 @@ let ParseInput (lexer, errorLogger: ErrorLogger, lexbuf: UnicodeLexing.Lexbuf, d use unwindBP = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse let mutable scopedPragmas = [] - try - let input = - if mlCompatSuffixes |> List.exists (Filename.checkSuffix lower) then - mlCompatWarning (FSComp.SR.buildCompilingExtensionIsForML()) rangeStartup + try + let input = + if mlCompatSuffixes |> List.exists (FileSystemUtils.checkSuffix lower) then + mlCompatWarning (FSComp.SR.buildCompilingExtensionIsForML()) rangeStartup // Call the appropriate parser - for signature files or implementation files - if FSharpImplFileSuffixes |> List.exists (Filename.checkSuffix lower) then - let impl = Parser.implementationFile lexer lexbuf + if FSharpImplFileSuffixes |> List.exists (FileSystemUtils.checkSuffix lower) then + let impl = Parser.implementationFile lexer lexbuf PostParseModuleImpls (defaultNamespace, filename, isLastCompiland, impl) - elif FSharpSigFileSuffixes |> List.exists (Filename.checkSuffix lower) then - let intfs = Parser.signatureFile lexer lexbuf + elif FSharpSigFileSuffixes |> List.exists (FileSystemUtils.checkSuffix lower) then + let intfs = Parser.signatureFile lexer lexbuf PostParseModuleSpecs (defaultNamespace, filename, isLastCompiland, intfs) - else + else delayLogger.Error(Error(FSComp.SR.buildInvalidSourceFileExtension filename, Range.rangeStartup)) scopedPragmas <- GetScopedPragmasForInput input @@ -295,7 +298,7 @@ let ShowAllTokensAndExit (shortFilename, tokenizer: Tokenizer, lexbuf: LexBuffer let t = tokenizer () printf "tokenize - got %s @ %a\n" (Parser.token_to_string t) outputRange lexbuf.LexemeRange match t with - | Parser.EOF _ -> exit 0 + | Parser.EOF _ -> exit 0 | _ -> () if lexbuf.IsPastEndOfStream then printf "!!! at end of stream\n" @@ -309,39 +312,64 @@ let TestInteractionParserAndExit (tokenizer: Tokenizer, lexbuf: LexBuffer) // Report the statistics for testing purposes let ReportParsingStatistics res = - let rec flattenSpecs specs = + let rec flattenSpecs specs = specs |> List.collect (function (SynModuleSigDecl.NestedModule (_, _, subDecls, _)) -> flattenSpecs subDecls | spec -> [spec]) - let rec flattenDefns specs = + let rec flattenDefns specs = specs |> List.collect (function (SynModuleDecl.NestedModule (_, _, subDecls, _, _)) -> flattenDefns subDecls | defn -> [defn]) let flattenModSpec (SynModuleOrNamespaceSig(_, _, _, decls, _, _, _, _)) = flattenSpecs decls let flattenModImpl (SynModuleOrNamespace(_, _, _, decls, _, _, _, _)) = flattenDefns decls - match res with - | ParsedInput.SigFile (ParsedSigFileInput (_, _, _, _, specs)) -> + match res with + | ParsedInput.SigFile (ParsedSigFileInput (_, _, _, _, specs)) -> printfn "parsing yielded %d specs" (List.collect flattenModSpec specs).Length - | ParsedInput.ImplFile (ParsedImplFileInput (modules = impls)) -> + | ParsedInput.ImplFile (ParsedImplFileInput (modules = impls)) -> printfn "parsing yielded %d definitions" (List.collect flattenModImpl impls).Length +let EmptyParsedInput(filename, isLastCompiland) = + let lower = String.lowercase filename + if FSharpSigFileSuffixes |> List.exists (FileSystemUtils.checkSuffix lower) then + ParsedInput.SigFile( + ParsedSigFileInput( + filename, + QualFileNameOfImpls filename [], + [], + [], + [] + ) + ) + else + ParsedInput.ImplFile( + ParsedImplFileInput( + filename, + false, + QualFileNameOfImpls filename [], + [], + [], + [], + isLastCompiland + ) + ) + /// Parse an input, drawing tokens from the LexBuffer let ParseOneInputLexbuf (tcConfig: TcConfig, lexResourceManager, conditionalCompilationDefines, lexbuf, filename, isLastCompiland, errorLogger) = use unwindbuildphase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse - try + try // Don't report whitespace from lexer - let skipWhitespaceTokens = true + let skipWhitespaceTokens = true // Set up the initial status for indentation-aware processing - let lightStatus = LightSyntaxStatus (tcConfig.ComputeLightSyntaxInitialStatus filename, true) - + let lightStatus = LightSyntaxStatus (tcConfig.ComputeLightSyntaxInitialStatus filename, true) + // Set up the initial lexer arguments let lexargs = mkLexargs (conditionalCompilationDefines@tcConfig.conditionalCompilationDefines, lightStatus, lexResourceManager, [], errorLogger, tcConfig.pathMap) // Set up the initial lexer arguments - let shortFilename = SanitizeFileName filename tcConfig.implicitIncludeDir + let shortFilename = SanitizeFileName filename tcConfig.implicitIncludeDir - let input = + let input = Lexhelp.usingLexbufForParsing (lexbuf, filename) (fun lexbuf -> - + // Set up the LexFilter over the token stream let tokenizer,tokenizeOnly = match tcConfig.tokenize with @@ -354,64 +382,122 @@ let ParseOneInputLexbuf (tcConfig: TcConfig, lexResourceManager, conditionalComp ShowAllTokensAndExit(shortFilename, tokenizer, lexbuf) // Test hook for one of the parser entry points - if tcConfig.testInteractionParser then + if tcConfig.testInteractionParser then TestInteractionParserAndExit (tokenizer, lexbuf) // Parse the input let res = ParseInput((fun _ -> tokenizer ()), errorLogger, lexbuf, None, filename, isLastCompiland) // Report the statistics for testing purposes - if tcConfig.reportNumDecls then + if tcConfig.reportNumDecls then ReportParsingStatistics res res ) - Some input + input - with e -> + with e -> errorRecovery e rangeStartup - None - -let ValidSuffixes = FSharpSigFileSuffixes@FSharpImplFileSuffixes + EmptyParsedInput(filename, isLastCompiland) -/// Parse an input from disk -let ParseOneInputFile (tcConfig: TcConfig, lexResourceManager, conditionalCompilationDefines, filename, isLastCompiland, errorLogger, retryLocked) = - try - let lower = String.lowercase filename +let ValidSuffixes = FSharpSigFileSuffixes@FSharpImplFileSuffixes - if List.exists (Filename.checkSuffix lower) ValidSuffixes then +let checkInputFile (tcConfig: TcConfig) filename = + let lower = String.lowercase filename - if not(FileSystem.SafeExists filename) then - error(Error(FSComp.SR.buildCouldNotFindSourceFile filename, rangeStartup)) + if List.exists (FileSystemUtils.checkSuffix lower) ValidSuffixes then + if not(FileSystem.FileExistsShim filename) then + error(Error(FSComp.SR.buildCouldNotFindSourceFile filename, rangeStartup)) + else + error(Error(FSComp.SR.buildInvalidSourceFileExtension(SanitizeFileName filename tcConfig.implicitIncludeDir), rangeStartup)) - // Get a stream reader for the file - use reader = File.OpenReaderAndRetry (filename, tcConfig.inputCodePage, retryLocked) +let parseInputFileAux (tcConfig: TcConfig, lexResourceManager, conditionalCompilationDefines, filename, isLastCompiland, errorLogger, retryLocked) = + // Get a stream reader for the file + use fileStream = FileSystem.OpenFileForReadShim(filename) + use reader = fileStream.GetReader(tcConfig.inputCodePage, retryLocked) - // Set up the LexBuffer for the file - let lexbuf = UnicodeLexing.StreamReaderAsLexbuf(tcConfig.langVersion.SupportsFeature, reader) + // Set up the LexBuffer for the file + let lexbuf = UnicodeLexing.StreamReaderAsLexbuf(not tcConfig.compilingFslib, tcConfig.langVersion.SupportsFeature, reader) - // Parse the file drawing tokens from the lexbuf - ParseOneInputLexbuf(tcConfig, lexResourceManager, conditionalCompilationDefines, lexbuf, filename, isLastCompiland, errorLogger) - else - error(Error(FSComp.SR.buildInvalidSourceFileExtension(SanitizeFileName filename tcConfig.implicitIncludeDir), rangeStartup)) + // Parse the file drawing tokens from the lexbuf + ParseOneInputLexbuf(tcConfig, lexResourceManager, conditionalCompilationDefines, lexbuf, filename, isLastCompiland, errorLogger) - with e -> +/// Parse an input from disk +let ParseOneInputFile (tcConfig: TcConfig, lexResourceManager, conditionalCompilationDefines, filename, isLastCompiland, errorLogger, retryLocked) = + try + checkInputFile tcConfig filename + parseInputFileAux(tcConfig, lexResourceManager, conditionalCompilationDefines, filename, isLastCompiland, errorLogger, retryLocked) + with e -> errorRecovery e rangeStartup - None + EmptyParsedInput(filename, isLastCompiland) + +/// Parse multiple input files from disk +let ParseInputFiles (tcConfig: TcConfig, lexResourceManager, conditionalCompilationDefines, sourceFiles, errorLogger: ErrorLogger, exiter: Exiter, createErrorLogger: (Exiter -> CapturingErrorLogger), retryLocked) = + try + let isLastCompiland, isExe = sourceFiles |> tcConfig.ComputeCanContainEntryPoint + let sourceFiles = isLastCompiland |> List.zip sourceFiles |> Array.ofList + + if tcConfig.concurrentBuild then + let mutable exitCode = 0 + let delayedExiter = + { new Exiter with + member this.Exit n = exitCode <- n; raise StopProcessing } + + // Check input files and create delayed error loggers before we try to parallel parse. + let delayedErrorLoggers = + sourceFiles + |> Array.map (fun (filename, _) -> + checkInputFile tcConfig filename + createErrorLogger(delayedExiter) + ) + + let results = + try + try + sourceFiles + |> ArrayParallel.mapi (fun i (filename, isLastCompiland) -> + let delayedErrorLogger = delayedErrorLoggers.[i] + + let directoryName = Path.GetDirectoryName filename + let input = parseInputFileAux(tcConfig, lexResourceManager, conditionalCompilationDefines, filename, (isLastCompiland, isExe), delayedErrorLogger, retryLocked) + (input, directoryName) + ) + finally + delayedErrorLoggers + |> Array.iter (fun delayedErrorLogger -> + delayedErrorLogger.CommitDelayedDiagnostics errorLogger + ) + with + | StopProcessing -> + exiter.Exit exitCode + + results + |> List.ofArray + else + sourceFiles + |> Array.map (fun (filename, isLastCompiland) -> + let directoryName = Path.GetDirectoryName filename + let input = ParseOneInputFile(tcConfig, lexResourceManager, conditionalCompilationDefines, filename, (isLastCompiland, isExe), errorLogger, retryLocked) + (input, directoryName)) + |> List.ofArray + + with e -> + errorRecoveryNoRange e + exiter.Exit 1 let ProcessMetaCommandsFromInput (nowarnF: 'state -> range * string -> 'state, hashReferenceF: 'state -> range * string * Directive -> 'state, loadSourceF: 'state -> range * string -> unit) - (tcConfig:TcConfigBuilder, - inp: ParsedInput, - pathOfMetaCommandSource, + (tcConfig:TcConfigBuilder, + inp: ParsedInput, + pathOfMetaCommandSource, state0) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse - let canHaveScriptMetaCommands = - match inp with + let canHaveScriptMetaCommands = + match inp with | ParsedInput.SigFile (_) -> false | ParsedInput.ImplFile (ParsedImplFileInput (isScript = isScript)) -> isScript @@ -433,103 +519,103 @@ let ProcessMetaCommandsFromInput let ProcessMetaCommand state hash = let mutable matchedm = range0 - try - match hash with - | ParsedHashDirective("I", args, m) -> - if not canHaveScriptMetaCommands then - errorR(HashIncludeNotAllowedInNonScript m) - match args with - | [path] -> - matchedm <- m - tcConfig.AddIncludePath(m, path, pathOfMetaCommandSource) - state - | _ -> - errorR(Error(FSComp.SR.buildInvalidHashIDirective(), m)) - state - | ParsedHashDirective("nowarn",numbers,m) -> - List.fold (fun state d -> nowarnF state (m,d)) state numbers - - | ParsedHashDirective(("reference" | "r"), args, m) -> + try + match hash with + | ParsedHashDirective("I", ParsedHashDirectiveArguments args, m) -> + if not canHaveScriptMetaCommands then + errorR(HashIncludeNotAllowedInNonScript m) + match args with + | [path] -> + matchedm <- m + tcConfig.AddIncludePath(m, path, pathOfMetaCommandSource) + state + | _ -> + errorR(Error(FSComp.SR.buildInvalidHashIDirective(), m)) + state + | ParsedHashDirective("nowarn", ParsedHashDirectiveArguments numbers,m) -> + List.fold (fun state d -> nowarnF state (m,d)) state numbers + + | ParsedHashDirective(("reference" | "r"), ParsedHashDirectiveArguments args, m) -> matchedm<-m ProcessDependencyManagerDirective Directive.Resolution args m state - | ParsedHashDirective(("i"), args, m) -> + | ParsedHashDirective(("i"), ParsedHashDirectiveArguments args, m) -> matchedm<-m ProcessDependencyManagerDirective Directive.Include args m state - | ParsedHashDirective("load", args, m) -> - if not canHaveScriptMetaCommands then - errorR(HashDirectiveNotAllowedInNonScript m) - match args with - | _ :: _ -> - matchedm<-m - args |> List.iter (fun path -> loadSourceF state (m, path)) - | _ -> - errorR(Error(FSComp.SR.buildInvalidHashloadDirective(), m)) - state - | ParsedHashDirective("time", args, m) -> - if not canHaveScriptMetaCommands then - errorR(HashDirectiveNotAllowedInNonScript m) - match args with - | [] -> - () - | ["on" | "off"] -> - () - | _ -> - errorR(Error(FSComp.SR.buildInvalidHashtimeDirective(), m)) - state - - | _ -> - - (* warning(Error("This meta-command has been ignored", m)) *) - state + | ParsedHashDirective("load", ParsedHashDirectiveArguments args, m) -> + if not canHaveScriptMetaCommands then + errorR(HashDirectiveNotAllowedInNonScript m) + match args with + | _ :: _ -> + matchedm<-m + args |> List.iter (fun path -> loadSourceF state (m, path)) + | _ -> + errorR(Error(FSComp.SR.buildInvalidHashloadDirective(), m)) + state + | ParsedHashDirective("time", ParsedHashDirectiveArguments args, m) -> + if not canHaveScriptMetaCommands then + errorR(HashDirectiveNotAllowedInNonScript m) + match args with + | [] -> + () + | ["on" | "off"] -> + () + | _ -> + errorR(Error(FSComp.SR.buildInvalidHashtimeDirective(), m)) + state + + | _ -> + + (* warning(Error("This meta-command has been ignored", m)) *) + state with e -> errorRecovery e matchedm; state - let rec WarnOnIgnoredSpecDecls decls = - decls |> List.iter (fun d -> - match d with - | SynModuleSigDecl.HashDirective (_, m) -> warning(Error(FSComp.SR.buildDirectivesInModulesAreIgnored(), m)) + let rec WarnOnIgnoredSpecDecls decls = + decls |> List.iter (fun d -> + match d with + | SynModuleSigDecl.HashDirective (_, m) -> warning(Error(FSComp.SR.buildDirectivesInModulesAreIgnored(), m)) | SynModuleSigDecl.NestedModule (_, _, subDecls, _) -> WarnOnIgnoredSpecDecls subDecls | _ -> ()) - let rec WarnOnIgnoredImplDecls decls = - decls |> List.iter (fun d -> - match d with - | SynModuleDecl.HashDirective (_, m) -> warning(Error(FSComp.SR.buildDirectivesInModulesAreIgnored(), m)) + let rec WarnOnIgnoredImplDecls decls = + decls |> List.iter (fun d -> + match d with + | SynModuleDecl.HashDirective (_, m) -> warning(Error(FSComp.SR.buildDirectivesInModulesAreIgnored(), m)) | SynModuleDecl.NestedModule (_, _, subDecls, _, _) -> WarnOnIgnoredImplDecls subDecls | _ -> ()) let ProcessMetaCommandsFromModuleSpec state (SynModuleOrNamespaceSig(_, _, _, decls, _, _, _, _)) = - List.fold (fun s d -> - match d with + List.fold (fun s d -> + match d with | SynModuleSigDecl.HashDirective (h, _) -> ProcessMetaCommand s h | SynModuleSigDecl.NestedModule (_, _, subDecls, _) -> WarnOnIgnoredSpecDecls subDecls; s | _ -> s) state - decls + decls let ProcessMetaCommandsFromModuleImpl state (SynModuleOrNamespace(_, _, _, decls, _, _, _, _)) = - List.fold (fun s d -> - match d with + List.fold (fun s d -> + match d with | SynModuleDecl.HashDirective (h, _) -> ProcessMetaCommand s h | SynModuleDecl.NestedModule (_, _, subDecls, _, _) -> WarnOnIgnoredImplDecls subDecls; s | _ -> s) state decls - match inp with - | ParsedInput.SigFile (ParsedSigFileInput (_, _, _, hashDirectives, specs)) -> + match inp with + | ParsedInput.SigFile (ParsedSigFileInput (_, _, _, hashDirectives, specs)) -> let state = List.fold ProcessMetaCommand state0 hashDirectives let state = List.fold ProcessMetaCommandsFromModuleSpec state specs state - | ParsedInput.ImplFile (ParsedImplFileInput (_, _, _, _, hashDirectives, impls, _)) -> + | ParsedInput.ImplFile (ParsedImplFileInput (_, _, _, _, hashDirectives, impls, _)) -> let state = List.fold ProcessMetaCommand state0 hashDirectives let state = List.fold ProcessMetaCommandsFromModuleImpl state impls state -let ApplyNoWarnsToTcConfig (tcConfig: TcConfig, inp: ParsedInput, pathOfMetaCommandSource) = +let ApplyNoWarnsToTcConfig (tcConfig: TcConfig, inp: ParsedInput, pathOfMetaCommandSource) = // Clone - let tcConfigB = tcConfig.CloneToBuilder() + let tcConfigB = tcConfig.CloneToBuilder() let addNoWarn = fun () (m,s) -> tcConfigB.TurnWarningOff(m, s) let addReference = fun () (_m, _s, _) -> () let addLoadedSource = fun () (_m, _s) -> () @@ -538,10 +624,10 @@ let ApplyNoWarnsToTcConfig (tcConfig: TcConfig, inp: ParsedInput, pathOfMetaComm (tcConfigB, inp, pathOfMetaCommandSource, ()) TcConfig.Create(tcConfigB, validate=false) -let ApplyMetaCommandsFromInputToTcConfig (tcConfig: TcConfig, inp: ParsedInput, pathOfMetaCommandSource, dependencyProvider) = +let ApplyMetaCommandsFromInputToTcConfig (tcConfig: TcConfig, inp: ParsedInput, pathOfMetaCommandSource, dependencyProvider) = // Clone let tcConfigB = tcConfig.CloneToBuilder() - let getWarningNumber = fun () _ -> () + let getWarningNumber = fun () _ -> () let addReferenceDirective = fun () (m, path, directive) -> tcConfigB.AddReferenceDirective(dependencyProvider, m, path, directive) let addLoadedSource = fun () (m,s) -> tcConfigB.AddLoadedSource(m,s,pathOfMetaCommandSource) ProcessMetaCommandsFromInput @@ -550,12 +636,12 @@ let ApplyMetaCommandsFromInputToTcConfig (tcConfig: TcConfig, inp: ParsedInput, TcConfig.Create(tcConfigB, validate=false) /// Build the initial type checking environment -let GetInitialTcEnv (assemblyName: string, initm: range, tcConfig: TcConfig, tcImports: TcImports, tcGlobals) = +let GetInitialTcEnv (assemblyName: string, initm: range, tcConfig: TcConfig, tcImports: TcImports, tcGlobals) = let initm = initm.StartRange - let ccus = - tcImports.GetImportedAssemblies() - |> List.map (fun asm -> asm.FSharpViewOfMetadata, asm.AssemblyAutoOpenAttributes, asm.AssemblyInternalsVisibleToAttributes) + let ccus = + tcImports.GetImportedAssemblies() + |> List.map (fun asm -> asm.FSharpViewOfMetadata, asm.AssemblyAutoOpenAttributes, asm.AssemblyInternalsVisibleToAttributes) let amap = tcImports.GetImportMap() @@ -568,7 +654,7 @@ let GetInitialTcEnv (assemblyName: string, initm: range, tcConfig: TcConfig, tcI tcEnv /// Inject faults into checking -let CheckSimulateException(tcConfig: TcConfig) = +let CheckSimulateException(tcConfig: TcConfig) = match tcConfig.simulateException with | Some("tc-oom") -> raise(System.OutOfMemoryException()) | Some("tc-an") -> raise(System.ArgumentNullException("simulated")) @@ -601,7 +687,7 @@ type RootImpls = Zset let qnameOrder = Order.orderBy (fun (q: QualifiedNameOfFile) -> q.Text) -type TcState = +type TcState = { tcsCcu: CcuThunk tcsCcuType: ModuleOrNamespace @@ -609,8 +695,8 @@ type TcState = tcsTcSigEnv: TcEnv tcsTcImplEnv: TcEnv tcsCreatesGeneratedProvidedTypes: bool - tcsRootSigs: RootSigs - tcsRootImpls: RootImpls + tcsRootSigs: RootSigs + tcsRootImpls: RootImpls tcsCcuSig: ModuleOrNamespaceType } @@ -626,23 +712,23 @@ type TcState = // Assem(a.fsi + b.fsi + c.fsi) (after checking implementation file ) member x.CcuType = x.tcsCcuType - + // a.fsi + b.fsi + c.fsi (after checking implementation file for c.fs) member x.CcuSig = x.tcsCcuSig - - member x.NextStateAfterIncrementalFragment tcEnvAtEndOfLastInput = + + member x.NextStateAfterIncrementalFragment tcEnvAtEndOfLastInput = { x with tcsTcSigEnv = tcEnvAtEndOfLastInput tcsTcImplEnv = tcEnvAtEndOfLastInput } - + /// Create the initial type checking state for compiling an assembly let GetInitialTcState(m, ccuName, tcConfig: TcConfig, tcGlobals, tcImports: TcImports, niceNameGen, tcEnv0) = ignore tcImports - // Create a ccu to hold all the results of compilation + // Create a ccu to hold all the results of compilation let ccuContents = Construct.NewCcuContents ILScopeRef.Local m ccuName (Construct.NewEmptyModuleOrNamespaceType Namespace) - let ccuData: CcuData = + let ccuData: CcuData = { IsFSharp=true UsesFSharp20PlusQuotations=false #if !NO_EXTENSIONTYPING @@ -651,19 +737,20 @@ let GetInitialTcState(m, ccuName, tcConfig: TcConfig, tcGlobals, tcImports: TcIm ImportProvidedType = (fun ty -> Import.ImportProvidedType (tcImports.GetImportMap()) m ty) #endif TryGetILModuleDef = (fun () -> None) - FileName=None + FileName=None Stamp = newStamp() QualifiedName= None - SourceCodeDirectory = tcConfig.implicitIncludeDir + SourceCodeDirectory = tcConfig.implicitIncludeDir ILScopeRef=ILScopeRef.Local Contents=ccuContents MemberSignatureEquality= typeEquivAux EraseAll tcGlobals - TypeForwarders=Map.empty } + TypeForwarders=Map.empty + XmlDocumentationInfo = None } let ccu = CcuThunk.Create(ccuName, ccuData) - // OK, is this is the FSharp.Core CCU then fix it up. - if tcConfig.compilingFslib then + // OK, is this is the FSharp.Core CCU then fix it up. + if tcConfig.compilingFslib then tcGlobals.fslibCcu.Fixup ccu { tcsCcu= ccu @@ -677,50 +764,47 @@ let GetInitialTcState(m, ccuName, tcConfig: TcConfig, tcGlobals, tcImports: TcIm tcsCcuSig = Construct.NewEmptyModuleOrNamespaceType Namespace } /// Typecheck a single file (or interactive entry into F# Interactive) -let TypeCheckOneInputEventually (checkForErrors, tcConfig: TcConfig, tcImports: TcImports, tcGlobals, prefixPathOpt, tcSink, tcState: TcState, inp: ParsedInput, skipImplIfSigExists: bool) = - - eventually { - try - let! ctok = Eventually.token - RequireCompilationThread ctok // Everything here requires the compilation thread since it works on the TAST +let TypeCheckOneInput (checkForErrors, tcConfig: TcConfig, tcImports: TcImports, tcGlobals, prefixPathOpt, tcSink, tcState: TcState, inp: ParsedInput, skipImplIfSigExists: bool) = + cancellable { + try CheckSimulateException tcConfig let m = inp.Range let amap = tcImports.GetImportMap() - match inp with + match inp with | ParsedInput.SigFile (ParsedSigFileInput (_, qualNameOfFile, _, _, _) as file) -> - - // Check if we've seen this top module signature before. - if Zmap.mem qualNameOfFile tcState.tcsRootSigs then + + // Check if we've seen this top module signature before. + if Zmap.mem qualNameOfFile tcState.tcsRootSigs then errorR(Error(FSComp.SR.buildSignatureAlreadySpecified(qualNameOfFile.Text), m.StartRange)) - // Check if the implementation came first in compilation order - if Zset.contains qualNameOfFile tcState.tcsRootImpls then + // Check if the implementation came first in compilation order + if Zset.contains qualNameOfFile tcState.tcsRootImpls then errorR(Error(FSComp.SR.buildImplementationAlreadyGivenDetail(qualNameOfFile.Text), m)) let conditionalDefines = if tcConfig.noConditionalErasure then None else Some (tcConfig.conditionalCompilationDefines) - // Typecheck the signature file - let! (tcEnv, sigFileType, createsGeneratedProvidedTypes) = + // Typecheck the signature file + let! (tcEnv, sigFileType, createsGeneratedProvidedTypes) = TypeCheckOneSigFile (tcGlobals, tcState.tcsNiceNameGen, amap, tcState.tcsCcu, checkForErrors, conditionalDefines, tcSink, tcConfig.internalTestSpanStackReferring) tcState.tcsTcSigEnv file let rootSigs = Zmap.add qualNameOfFile sigFileType tcState.tcsRootSigs // Add the signature to the signature env (unless it had an explicit signature) let ccuSigForFile = CombineCcuContentFragments m [sigFileType; tcState.tcsCcuSig] - - // Open the prefixPath for fsi.exe - let tcEnv = - match prefixPathOpt with - | None -> tcEnv - | Some prefixPath -> + + // Open the prefixPath for fsi.exe + let tcEnv = + match prefixPathOpt with + | None -> tcEnv + | Some prefixPath -> let m = qualNameOfFile.Range TcOpenModuleOrNamespaceDecl tcSink tcGlobals amap m tcEnv (prefixPath, m) - let tcState = - { tcState with + let tcState = + { tcState with tcsTcSigEnv=tcEnv tcsTcImplEnv=tcState.tcsTcImplEnv tcsRootSigs=rootSigs @@ -729,12 +813,12 @@ let TypeCheckOneInputEventually (checkForErrors, tcConfig: TcConfig, tcImports: return (tcEnv, EmptyTopAttrs, None, ccuSigForFile), tcState | ParsedInput.ImplFile (ParsedImplFileInput (_, _, qualNameOfFile, _, _, _, _) as file) -> - - // Check if we've got an interface for this fragment + + // Check if we've got an interface for this fragment let rootSigOpt = tcState.tcsRootSigs.TryFind qualNameOfFile - // Check if we've already seen an implementation for this fragment - if Zset.contains qualNameOfFile tcState.tcsRootImpls then + // Check if we've already seen an implementation for this fragment + if Zset.contains qualNameOfFile tcState.tcsRootImpls then errorR(Error(FSComp.SR.buildImplementationAlreadyGiven(qualNameOfFile.Text), m)) let tcImplEnv = tcState.tcsTcImplEnv @@ -744,14 +828,14 @@ let TypeCheckOneInputEventually (checkForErrors, tcConfig: TcConfig, tcImports: let hadSig = rootSigOpt.IsSome - // Typecheck the implementation file - let typeCheckOne = + // Typecheck the implementation file + let typeCheckOne = if skipImplIfSigExists && hadSig then let dummyExpr = ModuleOrNamespaceExprWithSig.ModuleOrNamespaceExprWithSig(rootSigOpt.Value, ModuleOrNamespaceExpr.TMDefs [], range.Zero) let dummyImplFile = TypedImplFile.TImplFile(qualNameOfFile, [], dummyExpr, false, false, StampMap []) (EmptyTopAttrs, dummyImplFile, Unchecked.defaultof<_>, tcImplEnv, false) - |> Eventually.Done + |> Cancellable.ret else TypeCheckOneImplFile (tcGlobals, tcState.tcsNiceNameGen, amap, tcState.tcsCcu, checkForErrors, conditionalDefines, tcSink, tcConfig.internalTestSpanStackReferring) tcImplEnv rootSigOpt file @@ -760,88 +844,89 @@ let TypeCheckOneInputEventually (checkForErrors, tcConfig: TcConfig, tcImports: let implFileSigType = SigTypeOfImplFile implFile let rootImpls = Zset.add qualNameOfFile tcState.tcsRootImpls - - // Only add it to the environment if it didn't have a signature + + // Only add it to the environment if it didn't have a signature let m = qualNameOfFile.Range // Add the implementation as to the implementation env let tcImplEnv = AddLocalRootModuleOrNamespace TcResultsSink.NoSink tcGlobals amap m tcImplEnv implFileSigType // Add the implementation as to the signature env (unless it had an explicit signature) - let tcSigEnv = - if hadSig then tcState.tcsTcSigEnv + let tcSigEnv = + if hadSig then tcState.tcsTcSigEnv else AddLocalRootModuleOrNamespace TcResultsSink.NoSink tcGlobals amap m tcState.tcsTcSigEnv implFileSigType - + // Open the prefixPath for fsi.exe (tcImplEnv) - let tcImplEnv = - match prefixPathOpt with + let tcImplEnv = + match prefixPathOpt with | Some prefixPath -> TcOpenModuleOrNamespaceDecl tcSink tcGlobals amap m tcImplEnv (prefixPath, m) - | _ -> tcImplEnv + | _ -> tcImplEnv // Open the prefixPath for fsi.exe (tcSigEnv) - let tcSigEnv = - match prefixPathOpt with + let tcSigEnv = + match prefixPathOpt with | Some prefixPath when not hadSig -> TcOpenModuleOrNamespaceDecl tcSink tcGlobals amap m tcSigEnv (prefixPath, m) - | _ -> tcSigEnv - - let ccuSig = CombineCcuContentFragments m [implFileSigType; tcState.tcsCcuSig ] + | _ -> tcSigEnv let ccuSigForFile = CombineCcuContentFragments m [implFileSigType; tcState.tcsCcuSig] - let tcState = - { tcState with + let tcState = + { tcState with tcsTcSigEnv=tcSigEnv tcsTcImplEnv=tcImplEnv tcsRootImpls=rootImpls - tcsCcuSig=ccuSig + tcsCcuSig=ccuSigForFile tcsCreatesGeneratedProvidedTypes=tcState.tcsCreatesGeneratedProvidedTypes || createsGeneratedProvidedTypes } return (tcEnvAtEnd, topAttrs, Some implFile, ccuSigForFile), tcState - - with e -> - errorRecovery e range0 + + with e -> + errorRecovery e range0 return (tcState.TcEnvFromSignatures, EmptyTopAttrs, None, tcState.tcsCcuSig), tcState } /// Typecheck a single file (or interactive entry into F# Interactive) -let TypeCheckOneInput (ctok, checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt) tcState inp = +let TypeCheckOneInputEntry (ctok, checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt) tcState inp = // 'use' ensures that the warning handler is restored at the end use unwindEL = PushErrorLoggerPhaseUntilUnwind(fun oldLogger -> GetErrorLoggerFilteringByScopedPragmas(false, GetScopedPragmasForInput inp, oldLogger) ) use unwindBP = PushThreadBuildPhaseUntilUnwind BuildPhase.TypeCheck - TypeCheckOneInputEventually (checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, TcResultsSink.NoSink, tcState, inp, false) - |> Eventually.force ctok + + RequireCompilationThread ctok + TypeCheckOneInput (checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, TcResultsSink.NoSink, tcState, inp, false) + |> Cancellable.runWithoutCancellation /// Finish checking multiple files (or one interactive entry into F# Interactive) let TypeCheckMultipleInputsFinish(results, tcState: TcState) = let tcEnvsAtEndFile, topAttrs, implFiles, ccuSigsForFiles = List.unzip4 results let topAttrs = List.foldBack CombineTopAttrs topAttrs EmptyTopAttrs let implFiles = List.choose id implFiles - // This is the environment required by fsi.exe when incrementally adding definitions + // This is the environment required by fsi.exe when incrementally adding definitions let tcEnvAtEndOfLastFile = (match tcEnvsAtEndFile with h :: _ -> h | _ -> tcState.TcEnvFromSignatures) (tcEnvAtEndOfLastFile, topAttrs, implFiles, ccuSigsForFiles), tcState -let TypeCheckOneInputAndFinishEventually(checkForErrors, tcConfig: TcConfig, tcImports, tcGlobals, prefixPathOpt, tcSink, tcState, input) = - eventually { +let TypeCheckOneInputAndFinish(checkForErrors, tcConfig: TcConfig, tcImports, tcGlobals, prefixPathOpt, tcSink, tcState, input) = + cancellable { Logger.LogBlockStart LogCompilerFunctionId.CompileOps_TypeCheckOneInputAndFinishEventually - let! results, tcState = TypeCheckOneInputEventually(checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcSink, tcState, input, false) + let! results, tcState = TypeCheckOneInput(checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcSink, tcState, input, false) let result = TypeCheckMultipleInputsFinish([results], tcState) Logger.LogBlockStop LogCompilerFunctionId.CompileOps_TypeCheckOneInputAndFinishEventually return result } let TypeCheckClosedInputSetFinish (declaredImpls: TypedImplFile list, tcState) = - // Publish the latest contents to the CCU - tcState.tcsCcu.Deref.Contents <- Construct.NewCcuContents ILScopeRef.Local range0 tcState.tcsCcu.AssemblyName tcState.tcsCcuSig + // Latest contents to the CCU + let ccuContents = Construct.NewCcuContents ILScopeRef.Local range0 tcState.tcsCcu.AssemblyName tcState.tcsCcuSig - // Check all interfaces have implementations - tcState.tcsRootSigs |> Zmap.iter (fun qualNameOfFile _ -> - if not (Zset.contains qualNameOfFile tcState.tcsRootImpls) then + // Check all interfaces have implementations + tcState.tcsRootSigs |> Zmap.iter (fun qualNameOfFile _ -> + if not (Zset.contains qualNameOfFile tcState.tcsRootImpls) then errorR(Error(FSComp.SR.buildSignatureWithoutImplementation(qualNameOfFile.Text), qualNameOfFile.Range))) - tcState, declaredImpls - + tcState, declaredImpls, ccuContents + let TypeCheckClosedInputSet (ctok, checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcState, inputs) = - // tcEnvAtEndOfLastFile is the environment required by fsi.exe when incrementally adding definitions - let results, tcState = (tcState, inputs) ||> List.mapFold (TypeCheckOneInput (ctok, checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt)) + // tcEnvAtEndOfLastFile is the environment required by fsi.exe when incrementally adding definitions + let results, tcState = (tcState, inputs) ||> List.mapFold (TypeCheckOneInputEntry (ctok, checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt)) let (tcEnvAtEndOfLastFile, topAttrs, implFiles, _), tcState = TypeCheckMultipleInputsFinish(results, tcState) - let tcState, declaredImpls = TypeCheckClosedInputSetFinish (implFiles, tcState) + let tcState, declaredImpls, ccuContents = TypeCheckClosedInputSetFinish (implFiles, tcState) + tcState.Ccu.Deref.Contents <- ccuContents tcState, topAttrs, declaredImpls, tcEnvAtEndOfLastFile diff --git a/src/fsharp/ParseAndCheckInputs.fsi b/src/fsharp/ParseAndCheckInputs.fsi index d211bfa0907..207d41c878b 100644 --- a/src/fsharp/ParseAndCheckInputs.fsi +++ b/src/fsharp/ParseAndCheckInputs.fsi @@ -3,19 +3,19 @@ /// Contains logic to coordinate the parsing and checking of one or a group of files module internal FSharp.Compiler.ParseAndCheckInputs -open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Library open FSharp.Compiler.CheckExpressions open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerImports +open FSharp.Compiler.DependencyManager open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree -open FSharp.Compiler.TypedTree +open FSharp.Compiler.Syntax open FSharp.Compiler.TcGlobals -open Microsoft.DotNet.DependencyManager +open FSharp.Compiler.Text +open FSharp.Compiler.TypedTree +open FSharp.Compiler.UnicodeLexing val IsScript: string -> bool @@ -30,7 +30,7 @@ type ModuleNamesDict = Map> val DeduplicateParsedInputModuleName: ModuleNamesDict -> ParsedInput -> ParsedInput * ModuleNamesDict /// Parse a single input (A signature file or implementation file) -val ParseInput: (UnicodeLexing.Lexbuf -> Parser.token) * ErrorLogger * UnicodeLexing.Lexbuf * string option * string * isLastCompiland:(bool * bool) -> ParsedInput +val ParseInput: (Lexbuf -> Parser.token) * ErrorLogger * Lexbuf * string option * string * isLastCompiland:(bool * bool) -> ParsedInput /// A general routine to process hash directives val ProcessMetaCommandsFromInput : @@ -47,7 +47,10 @@ val ApplyMetaCommandsFromInputToTcConfig: TcConfig * ParsedInput * string * Depe val ApplyNoWarnsToTcConfig: TcConfig * ParsedInput * string -> TcConfig /// Parse one input file -val ParseOneInputFile: TcConfig * Lexhelp.LexResourceManager * string list * string * isLastCompiland: (bool * bool) * ErrorLogger * (*retryLocked*) bool -> ParsedInput option +val ParseOneInputFile: TcConfig * Lexhelp.LexResourceManager * conditionalCompilationDefines: string list * string * isLastCompiland: (bool * bool) * ErrorLogger * retryLocked: bool -> ParsedInput + +/// Parse multiple input files from disk +val ParseInputFiles: TcConfig * Lexhelp.LexResourceManager * conditionalCompilationDefines: string list * string list * ErrorLogger * Exiter * createErrorLogger: (Exiter -> CapturingErrorLogger) * retryLocked: bool -> (ParsedInput * string) list /// Get the initial type checking environment including the loading of mscorlib/System.Core, FSharp.Core /// applying the InternalsVisibleTo in referenced assemblies and opening 'Checked' if requested. @@ -80,7 +83,7 @@ val GetInitialTcState: range * string * TcConfig * TcGlobals * TcImports * NiceNameGenerator * TcEnv -> TcState /// Check one input, returned as an Eventually computation -val TypeCheckOneInputEventually : +val TypeCheckOneInput: checkForErrors:(unit -> bool) * TcConfig * TcImports * @@ -90,7 +93,7 @@ val TypeCheckOneInputEventually : TcState * ParsedInput * skipImplIfSigExists: bool - -> Eventually<(TcEnv * TopAttribs * TypedImplFile option * ModuleOrNamespaceType) * TcState> + -> Cancellable<(TcEnv * TopAttribs * TypedImplFile option * ModuleOrNamespaceType) * TcState> /// Finish the checking of multiple inputs val TypeCheckMultipleInputsFinish: (TcEnv * TopAttribs * 'T option * 'U) list * TcState -> (TcEnv * TopAttribs * 'T list * 'U list) * TcState @@ -99,7 +102,7 @@ val TypeCheckMultipleInputsFinish: (TcEnv * TopAttribs * 'T option * 'U) list * val TypeCheckClosedInputSetFinish: TypedImplFile list * TcState - -> TcState * TypedImplFile list + -> TcState * TypedImplFile list * ModuleOrNamespace /// Check a closed set of inputs val TypeCheckClosedInputSet: @@ -113,7 +116,7 @@ val TypeCheckClosedInputSet: -> TcState * TopAttribs * TypedImplFile list * TcEnv /// Check a single input and finish the checking -val TypeCheckOneInputAndFinishEventually : +val TypeCheckOneInputAndFinish : checkForErrors: (unit -> bool) * TcConfig * TcImports * @@ -122,7 +125,7 @@ val TypeCheckOneInputAndFinishEventually : NameResolution.TcResultsSink * TcState * ParsedInput - -> Eventually<(TcEnv * TopAttribs * TypedImplFile list * ModuleOrNamespaceType list) * TcState> + -> Cancellable<(TcEnv * TopAttribs * TypedImplFile list * ModuleOrNamespaceType list) * TcState> val GetScopedPragmasForInput: input: ParsedInput -> ScopedPragma list @@ -130,8 +133,13 @@ val ParseOneInputLexbuf: tcConfig: TcConfig * lexResourceManager: Lexhelp.LexResourceManager * conditionalCompilationDefines: string list * - lexbuf: UnicodeLexing.Lexbuf * + lexbuf: Lexbuf * filename: string * isLastCompiland: (bool * bool) * errorLogger: ErrorLogger - -> ParsedInput option + -> ParsedInput + +val EmptyParsedInput: + filename: string * + isLastCompiland: (bool * bool) + -> ParsedInput diff --git a/src/fsharp/ParseHelpers.fs b/src/fsharp/ParseHelpers.fs index 0d283e7f957..35a10a0b1f9 100644 --- a/src/fsharp/ParseHelpers.fs +++ b/src/fsharp/ParseHelpers.fs @@ -1,14 +1,16 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module public FSharp.Compiler.ParseHelpers +module FSharp.Compiler.ParseHelpers open FSharp.Compiler.AbstractIL open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features -open FSharp.Compiler.Range open FSharp.Compiler.SyntaxTreeOps open FSharp.Compiler.UnicodeLexing -open FSharp.Compiler.XmlDoc +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Position +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Xml open Internal.Utilities.Text.Lexing open Internal.Utilities.Text.Parsing @@ -36,35 +38,35 @@ let warningStringOfPos (p: pos) = //------------------------------------------------------------------------ /// Get an F# compiler position from a lexer position -let internal posOfLexPosition (p: Position) = +let posOfLexPosition (p: Position) = mkPos p.Line p.Column /// Get an F# compiler range from a lexer range -let internal mkSynRange (p1: Position) (p2: Position) = +let mkSynRange (p1: Position) (p2: Position) = mkFileIndexRange p1.FileIndex (posOfLexPosition p1) (posOfLexPosition p2) type LexBuffer<'Char> with - member internal lexbuf.LexemeRange = mkSynRange lexbuf.StartPos lexbuf.EndPos + member lexbuf.LexemeRange = mkSynRange lexbuf.StartPos lexbuf.EndPos /// Get the range corresponding to the result of a grammar rule while it is being reduced -let internal lhs (parseState: IParseState) = +let lhs (parseState: IParseState) = let p1 = parseState.ResultStartPosition let p2 = parseState.ResultEndPosition mkSynRange p1 p2 /// Get the range covering two of the r.h.s. symbols of a grammar rule while it is being reduced -let internal rhs2 (parseState: IParseState) i j = +let rhs2 (parseState: IParseState) i j = let p1 = parseState.InputStartPosition i let p2 = parseState.InputEndPosition j mkSynRange p1 p2 /// Get the range corresponding to one of the r.h.s. symbols of a grammar rule while it is being reduced -let internal rhs parseState i = rhs2 parseState i i +let rhs parseState i = rhs2 parseState i i type IParseState with /// Get the generator used for compiler-generated argument names. - member internal x.SynArgNameGenerator = + member x.SynArgNameGenerator = let key = "SynArgNameGenerator" let bls = x.LexBuffer.BufferLocalStore let gen = @@ -77,7 +79,7 @@ type IParseState with gen :?> SynArgNameGenerator /// Reset the generator used for compiler-generated argument names. - member internal x.ResetSynArgNameGenerator() = x.SynArgNameGenerator.Reset() + member x.ResetSynArgNameGenerator() = x.SynArgNameGenerator.Reset() //------------------------------------------------------------------------ // Parsing: grabbing XmlDoc @@ -89,11 +91,11 @@ module LexbufLocalXmlDocStore = // The key into the BufferLocalStore used to hold the current accumulated XmlDoc lines let private xmlDocKey = "XmlDoc" - let internal ClearXmlDoc (lexbuf: Lexbuf) = + let ClearXmlDoc (lexbuf: Lexbuf) = lexbuf.BufferLocalStore.[xmlDocKey] <- box (XmlDocCollector()) /// Called from the lexer to save a single line of XML doc comment. - let internal SaveXmlDocLine (lexbuf: Lexbuf, lineText, range: range) = + let SaveXmlDocLine (lexbuf: Lexbuf, lineText, range: range) = let collector = match lexbuf.BufferLocalStore.TryGetValue xmlDocKey with | true, collector -> collector @@ -106,7 +108,7 @@ module LexbufLocalXmlDocStore = /// Called from the parser each time we parse a construct that marks the end of an XML doc comment range, /// e.g. a 'type' declaration. The markerRange is the range of the keyword that delimits the construct. - let internal GrabXmlDocBeforeMarker (lexbuf: Lexbuf, markerRange: range) = + let GrabXmlDocBeforeMarker (lexbuf: Lexbuf, markerRange: range) = match lexbuf.BufferLocalStore.TryGetValue xmlDocKey with | true, collector -> let collector = unbox(collector) @@ -218,7 +220,7 @@ and LexCont = LexerContinuation // Parse IL assembly code //------------------------------------------------------------------------ -let internal internalParseAssemblyCodeInstructions s (isFeatureSupported: LanguageFeature -> bool) m : IL.ILInstr[] = +let ParseAssemblyCodeInstructions s reportLibraryOnlyFeatures (isFeatureSupported: LanguageFeature -> bool) m : IL.ILInstr[] = #if NO_INLINE_IL_PARSER ignore s ignore isFeatureSupported @@ -227,38 +229,28 @@ let internal internalParseAssemblyCodeInstructions s (isFeatureSupported: Langua [| |] #else try - FSharp.Compiler.AbstractIL.Internal.AsciiParser.ilInstrs - FSharp.Compiler.AbstractIL.Internal.AsciiLexer.token - (UnicodeLexing.StringAsLexbuf(isFeatureSupported, s)) + FSharp.Compiler.AbstractIL.AsciiParser.ilInstrs + FSharp.Compiler.AbstractIL.AsciiLexer.token + (UnicodeLexing.StringAsLexbuf(reportLibraryOnlyFeatures, isFeatureSupported, s)) with _ -> errorR(Error(FSComp.SR.astParseEmbeddedILError(), m)); [||] #endif -let ParseAssemblyCodeInstructions s m : IL.ILInstr[] = - // Public API can not answer the isFeatureSupported questions, so here we support everything - let isFeatureSupported (_featureId:LanguageFeature) = true - internalParseAssemblyCodeInstructions s isFeatureSupported m - -let internal internalParseAssemblyCodeType s (isFeatureSupported: Features.LanguageFeature -> bool) m = +let ParseAssemblyCodeType s reportLibraryOnlyFeatures (isFeatureSupported: Features.LanguageFeature -> bool) m = ignore s ignore isFeatureSupported #if NO_INLINE_IL_PARSER errorR(Error((193, "Inline IL not valid in a hosted environment"), m)) - IL.EcmaMscorlibILGlobals.typ_Object + IL.PrimaryAssemblyILGlobals.typ_Object #else let isFeatureSupported (_featureId:LanguageFeature) = true try - FSharp.Compiler.AbstractIL.Internal.AsciiParser.ilType - FSharp.Compiler.AbstractIL.Internal.AsciiLexer.token - (UnicodeLexing.StringAsLexbuf(isFeatureSupported, s)) + FSharp.Compiler.AbstractIL.AsciiParser.ilType + FSharp.Compiler.AbstractIL.AsciiLexer.token + (UnicodeLexing.StringAsLexbuf(reportLibraryOnlyFeatures, isFeatureSupported, s)) with RecoverableParseError -> errorR(Error(FSComp.SR.astParseEmbeddedILTypeError(), m)); - IL.EcmaMscorlibILGlobals.typ_Object + IL.PrimaryAssemblyILGlobals.typ_Object #endif -/// Helper for parsing the inline IL fragments. -let ParseAssemblyCodeType s m = - // Public API can not answer the isFeatureSupported questions, so here we support everything - let isFeatureSupported (_featureId:LanguageFeature) = true - internalParseAssemblyCodeType s isFeatureSupported m diff --git a/src/fsharp/ParseHelpers.fsi b/src/fsharp/ParseHelpers.fsi index b2fd5fb832c..716246338a2 100644 --- a/src/fsharp/ParseHelpers.fsi +++ b/src/fsharp/ParseHelpers.fsi @@ -1,10 +1,10 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module public FSharp.Compiler.ParseHelpers +module internal FSharp.Compiler.ParseHelpers -open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.Range +open FSharp.Compiler.Text +open FSharp.Compiler.Xml open Internal.Utilities.Text.Lexing open Internal.Utilities.Text.Parsing @@ -21,28 +21,30 @@ val warningStringOfCoords: line:int -> column:int -> string val warningStringOfPos: p:pos -> string -val internal posOfLexPosition: p:Position -> pos +val posOfLexPosition: p:Position -> pos -val internal mkSynRange: p1:Position -> p2:Position -> range +val mkSynRange: p1:Position -> p2:Position -> range -type internal LexBuffer<'Char> with - member internal LexemeRange: range +type LexBuffer<'Char> with + member LexemeRange: range -val internal lhs: parseState:IParseState -> range +val lhs: parseState:IParseState -> range -val internal rhs2: parseState:IParseState -> i:int -> j:int -> range +val rhs2: parseState:IParseState -> i:int -> j:int -> range -val internal rhs: parseState:IParseState -> i:int -> range +val rhs: parseState:IParseState -> i:int -> range -type internal IParseState with - member internal SynArgNameGenerator: SyntaxTreeOps.SynArgNameGenerator - member internal ResetSynArgNameGenerator: unit -> unit +type IParseState with + member SynArgNameGenerator: SyntaxTreeOps.SynArgNameGenerator + member ResetSynArgNameGenerator: unit -> unit module LexbufLocalXmlDocStore = - val private xmlDocKey: string - val internal ClearXmlDoc: lexbuf:UnicodeLexing.Lexbuf -> unit - val internal SaveXmlDocLine: lexbuf:UnicodeLexing.Lexbuf * lineText:string * range:range -> unit - val internal GrabXmlDocBeforeMarker: lexbuf:UnicodeLexing.Lexbuf * markerRange:range -> XmlDoc.PreXmlDoc + + val ClearXmlDoc: lexbuf:UnicodeLexing.Lexbuf -> unit + + val SaveXmlDocLine: lexbuf:UnicodeLexing.Lexbuf * lineText:string * range:range -> unit + + val GrabXmlDocBeforeMarker: lexbuf:UnicodeLexing.Lexbuf * markerRange:range -> PreXmlDoc type LexerIfdefStackEntry = | IfDefIf @@ -75,9 +77,13 @@ type LexerStringKind = { IsByteString: bool IsInterpolated: bool IsInterpolatedFirst: bool } + static member ByteString: LexerStringKind + static member InterpolatedStringFirst: LexerStringKind + static member InterpolatedStringPart: LexerStringKind + static member String: LexerStringKind type LexerInterpolatedStringNesting = @@ -102,8 +108,6 @@ type LexerContinuation = and LexCont = LexerContinuation -val internal internalParseAssemblyCodeInstructions: s:string -> isFeatureSupported:(Features.LanguageFeature -> bool) -> m:range -> ILInstr[] - -val ParseAssemblyCodeInstructions: s:string -> m:range -> ILInstr array val internal internalParseAssemblyCodeType: s:string -> isFeatureSupported:(Features.LanguageFeature -> bool) -> m:range -> ILType +val ParseAssemblyCodeInstructions: s:string -> reportLibraryOnlyFeatures: bool -> isFeatureSupported:(Features.LanguageFeature -> bool) -> m:range -> ILInstr[] -val ParseAssemblyCodeType: s:string -> m:range -> ILType +val ParseAssemblyCodeType: s:string -> reportLibraryOnlyFeatures: bool -> isFeatureSupported:(Features.LanguageFeature -> bool) -> m:range -> ILType diff --git a/src/fsharp/PatternMatchCompilation.fs b/src/fsharp/PatternMatchCompilation.fs index fd717f43acb..403995686d9 100644 --- a/src/fsharp/PatternMatchCompilation.fs +++ b/src/fsharp/PatternMatchCompilation.fs @@ -3,20 +3,22 @@ module internal FSharp.Compiler.PatternMatchCompilation open System.Collections.Generic +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.ErrorLogger open FSharp.Compiler.InfoReader -open FSharp.Compiler.Lib open FSharp.Compiler.MethodCalls -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps @@ -41,7 +43,7 @@ type Pattern = | TPat_as of Pattern * PatternValBinding * range (* note: can be replaced by TPat_var, i.e. equals TPat_conjs([TPat_var; pat]) *) | TPat_disjs of Pattern list * range | TPat_conjs of Pattern list * range - | TPat_query of (Expr * TType list * (ValRef * TypeInst) option * int * ActivePatternInfo) * Pattern * range + | TPat_query of (Expr * TType list * bool * (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 TupInfo * Pattern list * TType list * range @@ -49,7 +51,7 @@ type Pattern = | TPat_recd of TyconRef * TypeInst * Pattern list * range | TPat_range of char * char * range | TPat_null of range - | TPat_isinst of TType * TType * PatternValBinding option * range + | TPat_isinst of TType * TType * Pattern option * range | TPat_error of range member this.Range = @@ -361,10 +363,10 @@ let ShowCounterExample g denv m refuted = match refutations with | [] -> raise CannotRefute | (r, eck) :: t -> - if verbose then dprintf "r = %s (enumCoversKnownValue = %b)\n" (Layout.showL (exprL r)) eck + if verbose then dprintf "r = %s (enumCoversKnownValue = %b)\n" (LayoutRender.showL (exprL r)) eck List.fold (fun (rAcc, eckAcc) (r, eck) -> CombineRefutations g rAcc r, eckAcc || eck) (r, eck) t - let text = Layout.showL (NicePrint.dataExprL denv counterExample) + let text = LayoutRender.showL (NicePrint.dataExprL denv counterExample) let failingWhenClause = refuted |> List.exists (function RefutedWhenClause -> true | _ -> false) Some(text, failingWhenClause, enumCoversKnown) @@ -426,8 +428,8 @@ let getDiscrimOfPattern (g: TcGlobals) tpinst t = Some(DecisionTreeTest.UnionCase (c, instTypes tpinst tyargs')) | TPat_array (args, ty, _m) -> Some(DecisionTreeTest.ArrayLength (args.Length, ty)) - | TPat_query ((activePatExpr, resTys, apatVrefOpt, idx, apinfo), _, _m) -> - Some (DecisionTreeTest.ActivePatternCase (activePatExpr, instTypes tpinst resTys, apatVrefOpt, idx, apinfo)) + | TPat_query ((activePatExpr, resTys, isStructRetTy, apatVrefOpt, idx, apinfo), _, _m) -> + Some (DecisionTreeTest.ActivePatternCase (activePatExpr, instTypes tpinst resTys, isStructRetTy, apatVrefOpt, idx, apinfo)) | TPat_error range -> Some (DecisionTreeTest.Error range) @@ -449,7 +451,7 @@ let discrimsEq (g: TcGlobals) d1 d2 = | DecisionTreeTest.Const c1, DecisionTreeTest.Const c2 -> (c1=c2) | DecisionTreeTest.IsNull, DecisionTreeTest.IsNull -> true | DecisionTreeTest.IsInst (srcty1, tgty1), DecisionTreeTest.IsInst (srcty2, tgty2) -> typeEquiv g srcty1 srcty2 && typeEquiv g tgty1 tgty2 - | DecisionTreeTest.ActivePatternCase (_, _, vrefOpt1, n1, _), DecisionTreeTest.ActivePatternCase (_, _, vrefOpt2, n2, _) -> + | DecisionTreeTest.ActivePatternCase (_, _, _, vrefOpt1, n1, _), DecisionTreeTest.ActivePatternCase (_, _, _, vrefOpt2, n2, _) -> match vrefOpt1, vrefOpt2 with | Some (vref1, tinst1), Some (vref2, tinst2) -> valRefEq g vref1 vref2 && n1 = n2 && not (doesActivePatternHaveFreeTypars g vref1) && List.lengthsEqAndForall2 (typeEquiv g) tinst1 tinst2 | _ -> false (* for equality purposes these are considered unequal! This is because adhoc computed patterns have no identity. *) @@ -489,13 +491,12 @@ let canCompactConstantClass c = /// Can two discriminators in a 'column' be decided simultaneously? let discrimsHaveSameSimultaneousClass g d1 d2 = match d1, d2 with - | DecisionTreeTest.Const _, DecisionTreeTest.Const _ - | DecisionTreeTest.IsNull, DecisionTreeTest.IsNull - | DecisionTreeTest.ArrayLength _, DecisionTreeTest.ArrayLength _ - | DecisionTreeTest.UnionCase _, DecisionTreeTest.UnionCase _ -> true - + | DecisionTreeTest.Const _, DecisionTreeTest.Const _ + | DecisionTreeTest.IsNull, DecisionTreeTest.IsNull + | DecisionTreeTest.ArrayLength _, DecisionTreeTest.ArrayLength _ + | DecisionTreeTest.UnionCase _, DecisionTreeTest.UnionCase _ -> true | DecisionTreeTest.IsInst _, DecisionTreeTest.IsInst _ -> false - | DecisionTreeTest.ActivePatternCase (_, _, apatVrefOpt1, _, _), DecisionTreeTest.ActivePatternCase (_, _, apatVrefOpt2, _, _) -> + | DecisionTreeTest.ActivePatternCase (_, _, _, apatVrefOpt1, _, _), DecisionTreeTest.ActivePatternCase (_, _, _, apatVrefOpt2, _, _) -> match apatVrefOpt1, apatVrefOpt2 with | Some (vref1, tinst1), Some (vref2, tinst2) -> valRefEq g vref1 vref2 && not (doesActivePatternHaveFreeTypars g vref1) && List.lengthsEqAndForall2 (typeEquiv g) tinst1 tinst2 | _ -> false (* for equality purposes these are considered different classes of discriminators! This is because adhoc computed patterns have no identity! *) @@ -679,20 +680,20 @@ let rec BuildSwitch inpExprOpt g expr edges dflt m = #if DEBUG let rec layoutPat pat = match pat with - | TPat_query (_, pat, _) -> Layout.(--) (Layout.wordL (Layout.TaggedTextOps.tagText "query")) (layoutPat pat) - | TPat_wild _ -> Layout.wordL (Layout.TaggedTextOps.tagText "wild") - | TPat_as _ -> Layout.wordL (Layout.TaggedTextOps.tagText "var") + | TPat_query (_, pat, _) -> Layout.(--) (Layout.wordL (TaggedText.tagText "query")) (layoutPat pat) + | TPat_wild _ -> Layout.wordL (TaggedText.tagText "wild") + | TPat_as _ -> Layout.wordL (TaggedText.tagText "var") | TPat_tuple (_, pats, _, _) | TPat_array (pats, _, _) -> Layout.bracketL (Layout.tupleL (List.map layoutPat pats)) - | _ -> Layout.wordL (Layout.TaggedTextOps.tagText "?") + | _ -> Layout.wordL (TaggedText.tagText "?") -let layoutPath _p = Layout.wordL (Layout.TaggedTextOps.tagText "") +let layoutPath _p = Layout.wordL (TaggedText.tagText "") let layoutActive (Active (path, _subexpr, pat)) = - Layout.(--) (Layout.wordL (Layout.TaggedTextOps.tagText "Active")) (Layout.tupleL [layoutPath path; layoutPat pat]) + Layout.(--) (Layout.wordL (TaggedText.tagText "Active")) (Layout.tupleL [layoutPath path; layoutPat pat]) let layoutFrontier (Frontier (i, actives, _)) = - Layout.(--) (Layout.wordL (Layout.TaggedTextOps.tagText "Frontier ")) (Layout.tupleL [intL i; Layout.listL layoutActive actives]) + Layout.(--) (Layout.wordL (TaggedText.tagText "Frontier ")) (Layout.tupleL [intL i; Layout.listL layoutActive actives]) #endif let mkFrontiers investigations i = @@ -703,7 +704,7 @@ let getRuleIndex (Frontier (i, _active, _valMap)) = i /// Is a pattern a partial pattern? let rec isPatternPartial p = match p with - | TPat_query ((_, _, _, _, apinfo), p, _m) -> not apinfo.IsTotal || isPatternPartial p + | TPat_query ((_, _, _, _, _, apinfo), p, _m) -> not apinfo.IsTotal || isPatternPartial p | TPat_const _ -> false | TPat_wild _ -> false | TPat_as (p, _, _) -> isPatternPartial p @@ -718,8 +719,8 @@ let rec isPatternPartial p = let rec erasePartialPatterns inpp = match inpp with - | TPat_query ((expr, resTys, apatVrefOpt, idx, apinfo), p, m) -> - if apinfo.IsTotal then TPat_query ((expr, resTys, apatVrefOpt, idx, apinfo), erasePartialPatterns p, m) + | TPat_query ((expr, resTys, isStructRetTy, apatVrefOpt, idx, apinfo), p, m) -> + if apinfo.IsTotal then TPat_query ((expr, resTys, isStructRetTy, apatVrefOpt, idx, apinfo), erasePartialPatterns p, m) else TPat_disjs ([], m) (* always fail *) | TPat_as (p, x, m) -> TPat_as (erasePartialPatterns p, x, m) | TPat_disjs (ps, m) -> TPat_disjs(erasePartials ps, m) @@ -760,7 +761,7 @@ let CompilePatternBasic // Add the targets to a match builder. // Note the input expression has already been evaluated and saved into a variable, // hence no need for a new sequence point. - let matchBuilder = MatchBuilder (NoDebugPointAtInvisibleBinding, exprm) + let matchBuilder = MatchBuilder (DebugPointAtBinding.NoneAtInvisible, exprm) typedClauses |> List.iter (fun c -> matchBuilder.AddTarget c.Target |> ignore) // Add the incomplete or rethrow match clause on demand, @@ -1039,17 +1040,27 @@ let CompilePatternBasic #endif // Active pattern matches: create a variable to hold the results of executing the active pattern. - | (EdgeDiscrim(_, (DecisionTreeTest.ActivePatternCase(activePatExpr, resTys, _, _, apinfo)), m) :: _) -> + // If a struct return we continue with an expression for taking the address of that location. + | (EdgeDiscrim(_, (DecisionTreeTest.ActivePatternCase(activePatExpr, resTys, isStructRetTy, _apatVrefOpt, _, apinfo)), m) :: _) -> if not (isNil origInputValTypars) then error(InternalError("Unexpected generalized type variables when compiling an active pattern", m)) - let resTy = apinfo.ResultType g m resTys - let v, vExpr = mkCompGenLocal m ("activePatternResult" + string (newUnique())) resTy - if origInputVal.IsMemberOrModuleBinding then - AdjustValToTopVal v origInputVal.DeclaringEntity ValReprInfo.emptyValData + + let resTy = apinfo.ResultType g m resTys isStructRetTy let argExpr = GetSubExprOfInput subexpr let appExpr = mkApps g ((activePatExpr, tyOfExpr g activePatExpr), [], [argExpr], m) - Some vExpr, Some(mkInvisibleBind v appExpr) + let vOpt, addrExp, _readonly, _writeonly = mkExprAddrOfExprAux g isStructRetTy false NeverMutates appExpr None matchm + match vOpt with + | None -> + let v, vExpr = mkCompGenLocal m ("activePatternResult" + string (newUnique())) resTy + if origInputVal.IsMemberOrModuleBinding then + AdjustValToTopVal v origInputVal.DeclaringEntity ValReprInfo.emptyValData + Some vExpr, Some(mkInvisibleBind v addrExp) + | Some (v, e) -> + if origInputVal.IsMemberOrModuleBinding then + AdjustValToTopVal v origInputVal.DeclaringEntity ValReprInfo.emptyValData + Some addrExp, Some (mkInvisibleBind v e) + | _ -> None, None @@ -1094,13 +1105,13 @@ let CompilePatternBasic // Convert active pattern edges to tests on results data let discrim' = match discrim with - | DecisionTreeTest.ActivePatternCase(_pexp, resTys, _apatVrefOpt, idx, apinfo) -> + | DecisionTreeTest.ActivePatternCase(_pexp, resTys, isStructRetTy, _apatVrefOpt, idx, apinfo) -> let aparity = apinfo.Names.Length let total = apinfo.IsTotal if not total && aparity > 1 then error(Error(FSComp.SR.patcPartialActivePatternsGenerateOneResult(), m)) - if not total then DecisionTreeTest.UnionCase(mkSomeCase g, resTys) + if not total then DecisionTreeTest.UnionCase(mkAnySomeCase g isStructRetTy, resTys) elif aparity <= 1 then DecisionTreeTest.Const(Const.Unit) else DecisionTreeTest.UnionCase(mkChoiceCaseRef g m aparity idx, resTys) | _ -> discrim @@ -1168,9 +1179,9 @@ let CompilePatternBasic let active' = removeActive path active match pat with | TPat_wild _ | TPat_as _ | TPat_tuple _ | TPat_disjs _ | TPat_conjs _ | TPat_recd _ -> failwith "Unexpected projection pattern" - | TPat_query ((_, resTys, apatVrefOpt, idx, apinfo), p, m) -> - + | TPat_query ((_, resTys, isStructRetTy, apatVrefOpt, idx, apinfo), p, m) -> if apinfo.IsTotal then + // Total active patterns always return choice values let hasParam = (match apatVrefOpt with None -> true | Some (vref, _) -> doesActivePatternHaveFreeTypars g vref) if (hasParam && i = i') || (discrimsEq g discrim (Option.get (getDiscrimOfPattern pat))) then let aparity = apinfo.Names.Length @@ -1192,12 +1203,16 @@ let CompilePatternBasic else [] else + // Partial active patterns always return options or value-options if i = i' then - let accessf' _j tpinst _ = - // TODO: In the future we will want active patterns to be able to return struct-unions - // In that eventuality, we need to check we are taking the address correctly - mkUnionCaseFieldGetUnprovenViaExprAddr (Option.get inpExprOpt, mkSomeCase g, instTypes tpinst resTys, 0, exprm) - mkSubFrontiers path accessf' active' [p] (fun path j -> PathQuery(path, int64 j)) + let accessf' _j tpinst _ = + let expr = Option.get inpExprOpt + if isStructRetTy then + // In this case, the inpExprOpt is already an address-of expression + mkUnionCaseFieldGetProvenViaExprAddr (expr, mkValueSomeCase g, instTypes tpinst resTys, 0, exprm) + else + mkUnionCaseFieldGetUnprovenViaExprAddr (expr, mkSomeCase g, instTypes tpinst resTys, 0, exprm) + mkSubFrontiers path accessf' active' [p] (fun path j -> PathQuery(path, int64 j)) else // Successful active patterns don't refute other patterns [frontier] @@ -1256,9 +1271,8 @@ let CompilePatternBasic | _ -> // Otherwise call the helper mkCallUnboxFast g exprm (instType tpinst tgtTy1) (accessf tpinst exprIn) - - let (v, exprIn) = BindSubExprOfInput g amap origInputValTypars pbind exprm (SubExpr(accessf', ve)) - [Frontier (i, active', valMap.Add v exprIn )] + BindProjectionPattern (Active(path, SubExpr(accessf', ve), pbind)) (active', valMap) + |> mkFrontiers <| i | None -> [Frontier (i, active', valMap)] @@ -1332,7 +1346,7 @@ let CompilePatternBasic res <- BindProjectionPattern (Active(path, subExpr, TPat_const(Const.Char(char i), m))) s @ res res // Assign an identifier to each TPat_query based on our knowledge of the 'identity' of the active pattern, if any - | TPat_query ((_, _, apatVrefOpt, _, _), _, _) -> + | TPat_query ((_, _, _, apatVrefOpt, _, _), _, _) -> let uniqId = match apatVrefOpt with | Some (vref, _) when not (doesActivePatternHaveFreeTypars g vref) -> vref.Stamp @@ -1401,7 +1415,7 @@ let rec CompilePattern g denv amap tcVal infoReader exprm matchm warnOnUnused a let decisionTree, targets = atMostOnePartialAtATime rest // Make the expression that represents the remaining cases of the pattern match. - let expr = mkAndSimplifyMatch NoDebugPointAtInvisibleBinding exprm matchm resultTy decisionTree targets + let expr = mkAndSimplifyMatch DebugPointAtBinding.NoneAtInvisible exprm matchm resultTy decisionTree targets // If the remainder of the match boiled away to nothing interesting. // We measure this simply by seeing if the range of the resulting expression is identical to matchm. diff --git a/src/fsharp/PatternMatchCompilation.fsi b/src/fsharp/PatternMatchCompilation.fsi index e1833cdfe54..98e195637c1 100644 --- a/src/fsharp/PatternMatchCompilation.fsi +++ b/src/fsharp/PatternMatchCompilation.fsi @@ -2,13 +2,14 @@ module internal FSharp.Compiler.PatternMatchCompilation -open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler +open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.InfoReader +open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Range -open FSharp.Compiler.InfoReader /// What should the decision tree contain for any incomplete match? type ActionOnFailure = @@ -26,7 +27,7 @@ type Pattern = | TPat_as of Pattern * PatternValBinding * range | TPat_disjs of Pattern list * range | TPat_conjs of Pattern list * range - | TPat_query of (Expr * TType list * (ValRef * TypeInst) option * int * PrettyNaming.ActivePatternInfo) * Pattern * range + | TPat_query of (Expr * TType list * bool * (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 TupInfo * Pattern list * TType list * range @@ -34,7 +35,7 @@ type Pattern = | TPat_recd of TyconRef * TypeInst * Pattern list * range | TPat_range of char * char * range | TPat_null of range - | TPat_isinst of TType * TType * PatternValBinding option * range + | TPat_isinst of TType * TType * Pattern option * range | TPat_error of range member Range: range diff --git a/src/fsharp/PostInferenceChecks.fs b/src/fsharp/PostInferenceChecks.fs index b3b69aab958..d196a60e363 100644 --- a/src/fsharp/PostInferenceChecks.fs +++ b/src/fsharp/PostInferenceChecks.fs @@ -7,21 +7,22 @@ module internal FSharp.Compiler.PostTypeCheckSemanticChecks open System open System.Collections.Generic +open Internal.Utilities.Collections +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features open FSharp.Compiler.Infos open FSharp.Compiler.InfoReader -open FSharp.Compiler.Lib -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming open FSharp.Compiler.SyntaxTreeOps open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps @@ -98,7 +99,7 @@ type env = isInAppExpr: bool } - override __.ToString() = "" + override _.ToString() = "" let BindTypar env (tp: Typar) = { env with @@ -1635,7 +1636,7 @@ and CheckDecisionTreeTest cenv env m discrim = | DecisionTreeTest.Const _ -> () | DecisionTreeTest.IsNull -> () | DecisionTreeTest.IsInst (srcTy, tgtTy) -> CheckTypeNoInnerByrefs cenv env m srcTy; CheckTypeNoInnerByrefs cenv env m tgtTy - | DecisionTreeTest.ActivePatternCase (exp, _, _, _, _) -> CheckExprNoByrefs cenv env exp + | DecisionTreeTest.ActivePatternCase (exp, _, _, _, _, _) -> CheckExprNoByrefs cenv env exp | DecisionTreeTest.Error _ -> () and CheckAttrib cenv env (Attrib(_, _, args, props, _, _, _)) = @@ -1693,21 +1694,24 @@ and CheckAttribArgExpr cenv env expr = and CheckAttribs cenv env (attribs: Attribs) = if isNil attribs then () else - let tcrefs = [ for (Attrib(tcref, _, _, _, _, _, m)) in attribs -> (tcref, m) ] + let tcrefs = [ for (Attrib(tcref, _, _, _, gs, _, m)) in attribs -> (tcref, gs, m) ] // Check for violations of allowMultiple = false let duplicates = tcrefs - |> Seq.groupBy (fun (tcref, _) -> tcref.Stamp) + |> Seq.groupBy (fun (tcref, gs, _) -> + // Don't allow CompiledNameAttribute on both a property and its getter/setter (see E_CompiledName test) + if tyconRefEq cenv.g cenv.g.attrib_CompiledNameAttribute.TyconRef tcref then (tcref.Stamp, false) else + (tcref.Stamp, gs)) |> Seq.map (fun (_, elems) -> List.last (List.ofSeq elems), Seq.length elems) |> Seq.filter (fun (_, count) -> count > 1) |> Seq.map fst |> Seq.toList // Filter for allowMultiple = false - |> List.filter (fun (tcref, m) -> TryFindAttributeUsageAttribute cenv.g m tcref <> Some true) + |> List.filter (fun (tcref, _, m) -> TryFindAttributeUsageAttribute cenv.g m tcref <> Some true) if cenv.reportErrors then - for (tcref, m) in duplicates do + for (tcref, _, m) in duplicates do errorR(Error(FSComp.SR.chkAttrHasAllowMultiFalse(tcref.DisplayName), m)) attribs |> List.iter (CheckAttrib cenv env) @@ -1737,6 +1741,7 @@ and AdjustAccess isHidden (cpath: unit -> CompilationPath) access = access and CheckBinding cenv env alwaysCheckNoReraise context (TBind(v, bindRhs, _) as bind) : Limit = + let vref = mkLocalValRef v let g = cenv.g let isTop = Option.isSome bind.Var.ValReprInfo //printfn "visiting %s..." v.DisplayName @@ -1744,9 +1749,9 @@ and CheckBinding cenv env alwaysCheckNoReraise context (TBind(v, bindRhs, _) as let env = { env with external = env.external || g.attrib_DllImportAttribute |> Option.exists (fun attr -> HasFSharpAttribute g attr v.Attribs) } // Check that active patterns don't have free type variables in their result - match TryGetActivePatternInfo (mkLocalValRef v) with + match TryGetActivePatternInfo vref with | Some _apinfo when _apinfo.ActiveTags.Length > 1 -> - if doesActivePatternHaveFreeTypars g (mkLocalValRef v) then + if doesActivePatternHaveFreeTypars g vref then errorR(Error(FSComp.SR.activePatternChoiceHasFreeTypars(v.LogicalName), v.Range)) | _ -> () @@ -1763,7 +1768,7 @@ and CheckBinding cenv env alwaysCheckNoReraise context (TBind(v, bindRhs, _) as // Check accessibility if (v.IsMemberOrModuleBinding || v.IsMember) && not v.IsIncrClassGeneratedMember then let access = AdjustAccess (IsHiddenVal env.sigToImplRemapInfo v) (fun () -> v.TopValDeclaringEntity.CompilationPath) v.Accessibility - CheckTypeForAccess cenv env (fun () -> NicePrint.stringOfQualifiedValOrMember cenv.denv v) access v.Range v.Type + CheckTypeForAccess cenv env (fun () -> NicePrint.stringOfQualifiedValOrMember cenv.denv cenv.infoReader vref) access v.Range v.Type let env = if v.IsConstructor && not v.IsIncrClassConstructor then { env with ctorLimitedZone=true } else env @@ -1820,7 +1825,7 @@ and CheckBinding cenv env alwaysCheckNoReraise context (TBind(v, bindRhs, _) as match v.MemberInfo with | Some memberInfo when not v.IsIncrClassGeneratedMember -> match memberInfo.MemberFlags.MemberKind with - | (MemberKind.PropertySet | MemberKind.PropertyGet) -> + | (SynMemberKind.PropertySet | SynMemberKind.PropertyGet) -> // These routines raise errors for ill-formed properties v |> ReturnTypeOfPropertyVal g |> ignore v |> ArgInfosOfPropertyVal g |> ignore @@ -2185,7 +2190,7 @@ let CheckEntityDefn cenv env (tycon: Entity) = match parentMethsOfSameName |> List.tryFind (checkForDup EraseAll) with | None -> () | Some minfo -> - let mtext = NicePrint.stringOfMethInfo cenv.amap m cenv.denv minfo + let mtext = NicePrint.stringOfMethInfo cenv.infoReader m cenv.denv minfo if parentMethsOfSameName |> List.exists (checkForDup EraseNone) then warning(Error(FSComp.SR.tcNewMemberHidesAbstractMember mtext, m)) else diff --git a/src/fsharp/PrettyNaming.fs b/src/fsharp/PrettyNaming.fs index 5d649efbb13..8bdcd36e120 100755 --- a/src/fsharp/PrettyNaming.fs +++ b/src/fsharp/PrettyNaming.fs @@ -2,7 +2,7 @@ /// Some general F# utilities for mangling / unmangling / manipulating names. /// Anything to do with special names of identifiers and other lexical rules -module public FSharp.Compiler.PrettyNaming +module public FSharp.Compiler.Syntax.PrettyNaming open System open System.Collections.Generic @@ -12,11 +12,10 @@ open System.Text open FSharp.Compiler open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal.Library - -open Internal.Utilities -open Internal.Utilities.StructuredFormat -open Internal.Utilities.StructuredFormat.LayoutOps +open Internal.Utilities.Library +open FSharp.Compiler.Text +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Layout //------------------------------------------------------------------------ // Operator name compilation @@ -192,18 +191,17 @@ let private compileCustomOpName = // Cache the compiled name so it can be reused. opName) +/// Maps the built-in F# operators to their mangled operator names. +let standardOpNames = + let opNames = Dictionary<_, _> (opNameTable.Length, StringComparer.Ordinal) + for x, y in opNameTable do + opNames.Add (x, y) + opNames + /// Compiles an operator into a mangled operator name. /// For example, "!%" becomes "op_DereferencePercent". /// This function accepts both built-in and custom operators. -let CompileOpName = - /// Maps the built-in F# operators to their mangled operator names. - let standardOpNames = - let opNames = Dictionary<_, _> (opNameTable.Length, StringComparer.Ordinal) - for x, y in opNameTable do - opNames.Add (x, y) - opNames - - fun op -> +let CompileOpName op = match standardOpNames.TryGetValue op with | true, x -> x | false, _ -> @@ -281,19 +279,18 @@ let private decompileCustomOpName = decompile sb opNamePrefixLen +/// Maps the mangled operator names of built-in F# operators back to the operators. +let standardOpsDecompile = + let ops = Dictionary (opNameTable.Length, StringComparer.Ordinal) + for x, y in opNameTable do + ops.Add(y, x) + ops + /// Decompiles a mangled operator name back into an operator. /// For example, "op_DereferencePercent" becomes "!%". /// This function accepts mangled names for both built-in and custom operators. -let DecompileOpName = - /// Maps the mangled operator names of built-in F# operators back to the operators. - let standardOps = - let ops = Dictionary (opNameTable.Length, StringComparer.Ordinal) - for x, y in opNameTable do - ops.Add(y, x) - ops - - fun opName -> - match standardOps.TryGetValue opName with +let DecompileOpName opName = + match standardOpsDecompile.TryGetValue opName with | true, res -> res | false, _ -> if IsMangledOpName opName then @@ -308,7 +305,7 @@ let DemangleOperatorName nm = let DemangleOperatorNameAsLayout nonOpTagged nm = let nm = DecompileOpName nm - if IsOperatorOrBacktickedName nm then wordL (TaggedTextOps.tagPunctuation "(") ^^ wordL (TaggedTextOps.tagOperator nm) ^^ wordL (TaggedTextOps.tagPunctuation ")") + if IsOperatorOrBacktickedName nm then wordL (TaggedText.tagPunctuation "(") ^^ wordL (TaggedText.tagOperator nm) ^^ wordL (TaggedText.tagPunctuation ")") else wordL (nonOpTagged nm) let opNameCons = CompileOpName "::" @@ -414,31 +411,29 @@ let IsPunctuation s = let IsTernaryOperator s = (DecompileOpName s = qmarkSet) -let IsInfixOperator = - - /// EQUALS, INFIX_COMPARE_OP, LESS, GREATER - let relational = [| "=";"!=";"<";">";"$"|] +/// EQUALS, INFIX_COMPARE_OP, LESS, GREATER +let relational = [| "=";"!=";"<";">";"$"|] - /// INFIX_AT_HAT_OP - let concat = [| "@";"^" |] +/// INFIX_AT_HAT_OP +let concat = [| "@";"^" |] - /// PLUS_MINUS_OP, MINUS - let plusMinus = [| "+"; "-" |] +/// PLUS_MINUS_OP, MINUS +let plusMinus = [| "+"; "-" |] - /// PERCENT_OP, STAR, INFIX_STAR_DIV_MOD_OP - let otherMath = [| "*";"/";"%" |] +/// PERCENT_OP, STAR, INFIX_STAR_DIV_MOD_OP +let otherMath = [| "*";"/";"%" |] - /// Characters ignored at the start of the operator name - /// when determining whether an operator is an infix operator. - let ignoredChars = [| '.'; '?' |] +/// Characters ignored at the start of the operator name +/// when determining whether an operator is an infix operator. +let ignoredChars = [| '.'; '?' |] - fun s (* where s is assumed to be a compiled name *) -> - // Certain operator idents are parsed as infix expression operators. - // The parsing as infix operators is hardwired in the grammar [see declExpr productions] - // where certain operator tokens are accepted in infix forms, i.e. . - // The lexer defines the strings that lead to those tokens. - //------ - // This function recognises these "infix operator" names. +// Certain operator idents are parsed as infix expression operators. +// The parsing as infix operators is hardwired in the grammar [see declExpr productions] +// where certain operator tokens are accepted in infix forms, i.e. . +// The lexer defines the strings that lead to those tokens. +//------ +// This function recognises these "infix operator" names. +let IsInfixOperator s = (* where s is assumed to be a compiled name *) let s = DecompileOpName s let skipIgnoredChars = s.TrimStart(ignoredChars) let afterSkipStartsWith prefix = skipIgnoredChars.StartsWithOrdinal(prefix) @@ -628,7 +623,7 @@ let IsActivePatternName (name: string) = isCoreActivePatternName name 1 false type ActivePatternInfo = - | APInfo of bool * (string * Range.range) list * Range.range + | APInfo of bool * (string * range) list * range member x.IsTotal = let (APInfo(p, _, _)) = x in p @@ -638,23 +633,23 @@ type ActivePatternInfo = member x.Range = let (APInfo(_, _, m)) = x in m -let ActivePatternInfoOfValName nm (m: Range.range) = +let ActivePatternInfoOfValName nm (m: range) = // Note: The approximate range calculations in this code assume the name is of the form "(|A|B|)" not "(| A | B |)" // The ranges are used for IDE refactoring support etc. If names of the second type are used, // renaming may be inaccurate/buggy. However names of the first form are dominant in F# code. - let rec loop (nm: string) (mp: Range.range) = + let rec loop (nm: string) (mp: range) = let n = nm.IndexOf '|' if n > 0 then - let m1 = Range.mkRange mp.FileName mp.Start (Range.mkPos mp.StartLine (mp.StartColumn + n)) - let m2 = Range.mkRange mp.FileName (Range.mkPos mp.StartLine (mp.StartColumn + n + 1)) mp.End + let m1 = Range.mkRange mp.FileName mp.Start (Position.mkPos mp.StartLine (mp.StartColumn + n)) + let m2 = Range.mkRange mp.FileName (Position.mkPos mp.StartLine (mp.StartColumn + n + 1)) mp.End (nm.[0..n-1], m1) :: loop nm.[n+1..] m2 else - let m1 = Range.mkRange mp.FileName mp.Start (Range.mkPos mp.StartLine (mp.StartColumn + nm.Length)) + let m1 = Range.mkRange mp.FileName mp.Start (Position.mkPos mp.StartLine (mp.StartColumn + nm.Length)) [(nm, m1)] let nm = DecompileOpName nm if IsActivePatternName nm then // Skip the '|' at each end when recovering ranges - let m0 = Range.mkRange m.FileName (Range.mkPos m.StartLine (m.StartColumn + 1)) (Range.mkPos m.EndLine (m.EndColumn - 1)) + let m0 = Range.mkRange m.FileName (Position.mkPos m.StartLine (m.StartColumn + 1)) (Position.mkPos m.EndLine (m.EndColumn - 1)) let names = loop nm.[1..nm.Length-2] m0 let resH, resT = List.frontAndBack names Some(if fst resT = "_" then APInfo(false, resH, m) else APInfo(true, names, m)) @@ -755,6 +750,10 @@ module CustomOperations = let unassignedTyparName = "?" +let FormatAndOtherOverloadsString remainingOverloads = FSComp.SR.typeInfoOtherOverloads(remainingOverloads) + +let GetLongNameFromString x = SplitNamesForILPath x + //-------------------------------------------------------------------------- // Resource format for pickled data //-------------------------------------------------------------------------- diff --git a/src/fsharp/PrettyNaming.fsi b/src/fsharp/PrettyNaming.fsi index 40f7b750358..8c67b0ceb4f 100644 --- a/src/fsharp/PrettyNaming.fsi +++ b/src/fsharp/PrettyNaming.fsi @@ -2,27 +2,26 @@ /// Some general F# utilities for mangling / unmangling / manipulating names. /// Anything to do with special names of identifiers and other lexical rules -module public FSharp.Compiler.PrettyNaming +module public FSharp.Compiler.Syntax.PrettyNaming -open FSharp.Compiler -open FSharp.Compiler.AbstractIL -open Internal.Utilities.StructuredFormat +open FSharp.Compiler.Text +open FSharp.Compiler.Text [] -val parenGet: string = ".()" +val internal parenGet: string = ".()" [] -val parenSet: string = ".()<-" +val internal parenSet: string = ".()<-" [] -val qmark: string = "?" +val internal qmark: string = "?" [] -val qmarkSet: string = "?<-" +val internal qmarkSet: string = "?<-" /// Prefix for compiled (mangled) operator names. [] -val opNamePrefix: string = "op_" +val internal opNamePrefix: string = "op_" /// Returns `true` if given string is an operator or double backticked name, e.g. ( |>> ) or ( long identifier ). /// (where ( long identifier ) is the display name for ``long identifier``). @@ -36,28 +35,28 @@ val IsMangledOpName: n:string -> bool /// Compiles an operator into a mangled operator name. /// For example, "!%" becomes "op_DereferencePercent". /// This function accepts both built-in and custom operators. -val CompileOpName: (string -> string) +val CompileOpName: string -> string /// Decompiles a mangled operator name back into an operator. /// For example, "op_DereferencePercent" becomes "!%". /// This function accepts mangled names for both built-in and custom operators. -val DecompileOpName: (string -> string) +val DecompileOpName: string -> string val DemangleOperatorName: nm:string -> string -val DemangleOperatorNameAsLayout: nonOpTagged:(string -> #TaggedText) -> nm:string -> Layout +val internal DemangleOperatorNameAsLayout: nonOpTagged:(string -> #TaggedText) -> nm:string -> Layout -val opNameCons: string +val internal opNameCons: string -val opNameNil: string +val internal opNameNil: string -val opNameEquals: string +val internal opNameEquals: string -val opNameEqualsNullable: string +val internal opNameEqualsNullable: string -val opNameNullableEquals: string +val internal opNameNullableEquals: string -val opNameNullableEqualsNullable: string +val internal opNameNullableEqualsNullable: string /// The characters that are allowed to be the first character of an identifier. val IsIdentifierFirstCharacter: c:char -> bool @@ -68,11 +67,11 @@ val IsIdentifierPartCharacter: c:char -> bool /// Is this character a part of a long identifier? val IsLongIdentifierPartCharacter: c:char -> bool -val isTildeOnlyString: s:string -> bool +val internal isTildeOnlyString: s:string -> bool -val IsValidPrefixOperatorUse: s:string -> bool +val internal IsValidPrefixOperatorUse: s:string -> bool -val IsValidPrefixOperatorDefinitionName: s:string -> bool +val internal IsValidPrefixOperatorDefinitionName: s:string -> bool val IsPrefixOperator: s:string -> bool @@ -80,99 +79,104 @@ val IsPunctuation: s:string -> bool val IsTernaryOperator: s:string -> bool -val IsInfixOperator: (string -> bool) +val IsInfixOperator: string -> bool -val ( |Control|Equality|Relational|Indexer|FixedTypes|Other| ): +val internal ( |Control|Equality|Relational|Indexer|FixedTypes|Other| ): opName:string -> Choice val IsCompilerGeneratedName: nm:string -> bool -val CompilerGeneratedName: nm:string -> string +val internal CompilerGeneratedName: nm:string -> string -val GetBasicNameOfPossibleCompilerGeneratedName: name:string -> string +val internal GetBasicNameOfPossibleCompilerGeneratedName: name:string -> string -val CompilerGeneratedNameSuffix: basicName:string -> suffix:string -> string +val internal CompilerGeneratedNameSuffix: basicName:string -> suffix:string -> string -val TryDemangleGenericNameAndPos: n:string -> int voption +val internal TryDemangleGenericNameAndPos: n:string -> int voption -type NameArityPair = | NameArityPair of string * int +type internal NameArityPair = | NameArityPair of string * int -val DemangleGenericTypeNameWithPos: pos:int -> mangledName:string -> string +val internal DemangleGenericTypeNameWithPos: pos:int -> mangledName:string -> string -val DecodeGenericTypeNameWithPos: pos:int -> mangledName:string -> NameArityPair +val internal DecodeGenericTypeNameWithPos: pos:int -> mangledName:string -> NameArityPair -val DemangleGenericTypeName: mangledName:string -> string +val internal DemangleGenericTypeName: mangledName:string -> string -val DecodeGenericTypeName: mangledName:string -> NameArityPair +val internal DecodeGenericTypeName: mangledName:string -> NameArityPair /// Try to chop "get_" or "set_" from a string val TryChopPropertyName: s:string -> string option /// Try to chop "get_" or "set_" from a string. /// If the string does not start with "get_" or "set_", this function raises an exception. -val ChopPropertyName: s:string -> string +val internal ChopPropertyName: s:string -> string -val SplitNamesForILPath: s:string -> string list +val internal SplitNamesForILPath: s:string -> string list [] -val FSharpModuleSuffix: string = "Module" +val internal FSharpModuleSuffix: string = "Module" [] -val MangledGlobalName: string = "`global`" +val internal MangledGlobalName: string = "`global`" -val IllegalCharactersInTypeAndNamespaceNames: char [] +val internal IllegalCharactersInTypeAndNamespaceNames: char [] /// Determines if the specified name is a valid name for an active pattern. val IsActivePatternName: name:string -> bool -type ActivePatternInfo = - | APInfo of bool * (string * Range.range) list * Range.range +type internal ActivePatternInfo = + | APInfo of bool * (string * range) list * range member ActiveTags: string list - member ActiveTagsWithRanges: (string * Range.range) list + member ActiveTagsWithRanges: (string * range) list member IsTotal: bool - member Range: Range.range + member Range: range -val ActivePatternInfoOfValName: nm:string -> m:Range.range -> ActivePatternInfo option +val internal ActivePatternInfoOfValName: nm:string -> m:range -> ActivePatternInfo option -exception InvalidMangledStaticArg of string +exception internal InvalidMangledStaticArg of string -val demangleProvidedTypeName: typeLogicalName:string -> string * (string * string) [] +val internal demangleProvidedTypeName: typeLogicalName:string -> string * (string * string) [] /// Mangle the static parameters for a provided type or method -val mangleProvidedTypeName: typeLogicalName:string * nonDefaultArgs:(string * string) [] -> string +val internal mangleProvidedTypeName: typeLogicalName:string * nonDefaultArgs:(string * string) [] -> string /// Mangle the static parameters for a provided type or method -val computeMangledNameWithoutDefaultArgValues: nm:string * staticArgs:'a [] * defaultArgValues:(string * string option) [] -> string +val internal computeMangledNameWithoutDefaultArgValues: nm:string * staticArgs:'a [] * defaultArgValues:(string * string option) [] -> string -val outArgCompilerGeneratedName: string +val internal outArgCompilerGeneratedName: string -val ExtraWitnessMethodName: nm:string -> string +val internal ExtraWitnessMethodName: nm:string -> string /// Reuses generated union case field name objects for common field numbers -val mkUnionCaseFieldName: (int -> int -> string) +val internal mkUnionCaseFieldName: (int -> int -> string) /// Reuses generated exception field name objects for common field numbers -val mkExceptionFieldName: (int -> string) +val internal mkExceptionFieldName: (int -> string) /// The prefix of the names used for the fake namespace path added to all dynamic code entries in FSI.EXE val FsiDynamicModulePrefix: string -module FSharpLib = +module internal FSharpLib = val Root: string val RootPath: string list val Core: string val CorePath: string list -module CustomOperations = +module internal CustomOperations = [] val Into: string = "into" -val unassignedTyparName: string +val internal unassignedTyparName: string -val FSharpOptimizationDataResourceName: string +val internal FSharpOptimizationDataResourceName: string -val FSharpSignatureDataResourceName: string +val internal FSharpSignatureDataResourceName: string -val FSharpOptimizationDataResourceName2: string +val internal FSharpOptimizationDataResourceName2: string + +val internal FSharpSignatureDataResourceName2: string + +val GetLongNameFromString: string -> string list + +val FormatAndOtherOverloadsString: int -> string -val FSharpSignatureDataResourceName2: string diff --git a/src/fsharp/QueueList.fs b/src/fsharp/QueueList.fs index 4914e3d2062..b8b651b1cad 100644 --- a/src/fsharp/QueueList.fs +++ b/src/fsharp/QueueList.fs @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace Internal.Utilities +namespace Internal.Utilities.Collections open System.Collections open System.Collections.Generic @@ -79,14 +79,3 @@ module internal QueueList = let appendOne (x:QueueList<_>) y = x.AppendOne(y) let append (x:QueueList<_>) (ys:QueueList<_>) = x.Append(ys) - -#if QUEUE_LIST_UNITTESTS -module internal Test = - let mutable q = QueueList.empty - - for i = 0 to 100 do - if q |> QueueList.toList <> [0..i-1] then printfn "fail pre check, i = %d" i - q <- q.AppendOne(i) - if q |> QueueList.toList <> [0..i] then printfn "fail post check, i = %d" i *) -#endif - diff --git a/src/fsharp/QueueList.fsi b/src/fsharp/QueueList.fsi index af57486a7ea..12c531ff17c 100644 --- a/src/fsharp/QueueList.fsi +++ b/src/fsharp/QueueList.fsi @@ -1,4 +1,4 @@ -namespace Internal.Utilities +namespace Internal.Utilities.Collections /// Iterable functional collection with O(1) append-1 time. Useful for data structures where elements get added at the /// end but the collection must occasionally be iterated. Iteration is slower and may allocate because diff --git a/src/fsharp/QuotationPickler.fs b/src/fsharp/QuotationPickler.fs index a99ad7298a3..abcf1a42882 100644 --- a/src/fsharp/QuotationPickler.fs +++ b/src/fsharp/QuotationPickler.fs @@ -2,151 +2,156 @@ module internal FSharp.Compiler.QuotationPickler +open System open System.Text +open FSharp.Compiler.IO +open Internal.Utilities open Internal.Utilities.Collections -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.Lib +open Internal.Utilities.Library.Extras -let mkRLinear mk (vs, body) = List.foldBack (fun v acc -> mk (v, acc)) vs body +let mkRLinear mk (vs, body) = List.foldBack (fun v acc -> mk (v, acc)) vs body -type TypeVarData = { tvName: string; } +type TypeVarData = { tvName: string } -type NamedTypeData = +type NamedTypeData = | Idx of int - | Named of (* tcName: *) string * (* tcAssembly: *) string + | Named of tcName: string * tcAssembly: string -type TypeCombOp = - | ArrayTyOp of int (* rank *) +type TypeCombOp = + | ArrayTyOp of int (* rank *) | FunTyOp | NamedTyOp of NamedTypeData type TypeData = - | VarType of int - | AppType of TypeCombOp * TypeData list + | VarType of int + | AppType of TypeCombOp * TypeData list -let mkVarTy v = VarType v -let mkFunTy (x1, x2) = AppType(FunTyOp, [x1; x2]) -let mkArrayTy (n, x) = AppType(ArrayTyOp n, [x]) -let mkILNamedTy (r, l) = AppType(NamedTyOp r, l) +let mkVarTy v = VarType v -type CtorData = +let mkFunTy (x1, x2) = AppType(FunTyOp, [x1; x2]) + +let mkArrayTy (n, x) = AppType(ArrayTyOp n, [x]) + +let mkILNamedTy (r, l) = AppType(NamedTyOp r, l) + +type CtorData = { ctorParent: NamedTypeData ctorArgTypes: TypeData list; } -type MethodData = +type MethodData = { methParent: NamedTypeData methName: string methArgTypes: TypeData list methRetType: TypeData numGenericArgs: int } - -type VarData = + +type VarData = { vText: string vType: TypeData - vMutable: bool } + vMutable: bool } type PropInfoData = NamedTypeData * string * TypeData * TypeData list -type CombOp = +type CombOp = | AppOp - | CondOp + | CondOp | ModuleValueOp of NamedTypeData * string * bool | ModuleValueWOp of NamedTypeData * string * bool * string * int - | LetRecOp - | LetRecCombOp - | LetOp - | RecdMkOp of NamedTypeData - | RecdGetOp of NamedTypeData * string - | RecdSetOp of NamedTypeData * string - | SumMkOp of NamedTypeData * string - | SumFieldGetOp of NamedTypeData * string * int + | LetRecOp + | LetRecCombOp + | LetOp + | RecdMkOp of NamedTypeData + | RecdGetOp of NamedTypeData * string + | RecdSetOp of NamedTypeData * string + | SumMkOp of NamedTypeData * string + | SumFieldGetOp of NamedTypeData * string * int | SumTagTestOp of NamedTypeData * string - | TupleMkOp + | TupleMkOp | TupleGetOp of int - | UnitOp - | BoolOp of bool - | StringOp of string - | SingleOp of float32 - | DoubleOp of float - | CharOp of char - | SByteOp of sbyte - | ByteOp of byte - | Int16Op of int16 - | UInt16Op of uint16 - | Int32Op of int32 - | UInt32Op of uint32 - | Int64Op of int64 - | UInt64Op of uint64 + | UnitOp + | BoolOp of bool + | StringOp of string + | SingleOp of float32 + | DoubleOp of float + | CharOp of char + | SByteOp of sbyte + | ByteOp of byte + | Int16Op of int16 + | UInt16Op of uint16 + | Int32Op of int32 + | UInt32Op of uint32 + | Int64Op of int64 + | UInt64Op of uint64 | PropGetOp of PropInfoData | FieldGetOp of NamedTypeData * string - | CtorCallOp of CtorData - | MethodCallOp of MethodData + | CtorCallOp of CtorData + | MethodCallOp of MethodData | MethodCallWOp of MethodData * MethodData * int - | CoerceOp + | CoerceOp | NewArrayOp | DelegateOp - | SeqOp - | ForLoopOp - | WhileLoopOp - | NullOp - | DefaultValueOp + | SeqOp + | ForLoopOp + | WhileLoopOp + | NullOp + | DefaultValueOp | PropSetOp of PropInfoData - | FieldSetOp of NamedTypeData * string + | FieldSetOp of NamedTypeData * string | AddressOfOp | ExprSetOp | AddressSetOp - | TypeTestOp + | TypeTestOp | TryFinallyOp - | TryWithOp + | TryWithOp -/// Represents specifications of a subset of F# expressions +/// Represents specifications of a subset of F# expressions type ExprData = - | AttrExpr of ExprData * ExprData list - | CombExpr of CombOp * TypeData list * ExprData list - | VarExpr of int - | QuoteExpr of ExprData + | AttrExpr of ExprData * ExprData list + | CombExpr of CombOp * TypeData list * ExprData list + | VarExpr of int + | QuoteExpr of ExprData | LambdaExpr of VarData * ExprData - | HoleExpr of TypeData * int - | ThisVarExpr of TypeData - | QuoteRawExpr of ExprData - -let mkVar v = VarExpr v + | HoleExpr of TypeData * int + | ThisVarExpr of TypeData + | QuoteRawExpr of ExprData + +let mkVar v = VarExpr v let mkHole (v, idx) = HoleExpr (v, idx) -let mkApp (a, b) = CombExpr(AppOp, [], [a; b]) +let mkApp (a, b) = CombExpr(AppOp, [], [a; b]) -let mkLambda (a, b) = LambdaExpr (a, b) +let mkLambda (a, b) = LambdaExpr (a, b) -let mkQuote (a) = QuoteExpr (a) +let mkQuote (a) = QuoteExpr (a) let mkQuoteRaw40 (a) = QuoteRawExpr (a) -let mkCond (x1, x2, x3) = CombExpr(CondOp, [], [x1;x2;x3]) +let mkCond (x1, x2, x3) = CombExpr(CondOp, [], [x1;x2;x3]) -let mkModuleValueApp (tcref, nm, isProp, tyargs, args: ExprData list) = +let mkModuleValueApp (tcref, nm, isProp, tyargs, args: ExprData list) = CombExpr(ModuleValueOp(tcref, nm, isProp), tyargs, args) -let mkModuleValueWApp (tcref, nm, isProp, nmW, nWitnesses, tyargs, args: ExprData list) = +let mkModuleValueWApp (tcref, nm, isProp, nmW, nWitnesses, tyargs, args: ExprData list) = CombExpr(ModuleValueWOp(tcref, nm, isProp, nmW, nWitnesses), tyargs, args) let mkTuple (ty, x) = CombExpr(TupleMkOp, [ty], x) let mkLet ((v, e), b) = CombExpr(LetOp, [], [e;mkLambda (v, b)]) (* nb. order preserves source order *) -let mkUnit () = CombExpr(UnitOp, [], []) +let mkUnit () = CombExpr(UnitOp, [], []) -let mkNull ty = CombExpr(NullOp, [ty], []) +let mkNull ty = CombExpr(NullOp, [ty], []) let mkLetRecRaw e1 = CombExpr(LetRecOp, [], [e1]) -let mkLetRecCombRaw args = CombExpr(LetRecCombOp, [], args) +let mkLetRecCombRaw args = CombExpr(LetRecCombOp, [], args) -let mkLetRec (ves, body) = - let vs, es = List.unzip ves +let mkLetRec (ves, body) = + let vs, es = List.unzip ves mkLetRecRaw(mkRLinear mkLambda (vs, mkLetRecCombRaw (body :: es))) - -let mkRecdMk (n, tys, args) = CombExpr(RecdMkOp n, tys, args) + +let mkRecdMk (n, tys, args) = CombExpr(RecdMkOp n, tys, args) let mkRecdGet (d1, d2, tyargs, args) = CombExpr(RecdGetOp(d1, d2), tyargs, args) @@ -158,7 +163,7 @@ let mkUnionFieldGet (d1, d2, d3, tyargs, arg) = CombExpr(SumFieldGetOp(d1, d2, d let mkUnionCaseTagTest (d1, d2, tyargs, arg) = CombExpr(SumTagTestOp(d1, d2), tyargs, [arg]) -let mkTupleGet (ty, n, e) = CombExpr(TupleGetOp n, [ty], [e]) +let mkTupleGet (ty, n, e) = CombExpr(TupleGetOp n, [ty], [e]) let mkCoerce (ty, arg) = CombExpr(CoerceOp, [ty], [arg]) @@ -176,35 +181,35 @@ let mkThisVar (ty) = ThisVarExpr(ty) let mkNewArray (ty, args) = CombExpr(NewArrayOp, [ty], args) -let mkBool (v, ty) = CombExpr(BoolOp v, [ty], []) +let mkBool (v, ty) = CombExpr(BoolOp v, [ty], []) -let mkString (v, ty) = CombExpr(StringOp v, [ty], []) +let mkString (v, ty) = CombExpr(StringOp v, [ty], []) -let mkSingle (v, ty) = CombExpr(SingleOp v, [ty], []) +let mkSingle (v, ty) = CombExpr(SingleOp v, [ty], []) -let mkDouble (v, ty) = CombExpr(DoubleOp v, [ty], []) +let mkDouble (v, ty) = CombExpr(DoubleOp v, [ty], []) -let mkChar (v, ty) = CombExpr(CharOp v, [ty], []) +let mkChar (v, ty) = CombExpr(CharOp v, [ty], []) -let mkSByte (v, ty) = CombExpr(SByteOp v, [ty], []) +let mkSByte (v, ty) = CombExpr(SByteOp v, [ty], []) -let mkByte (v, ty) = CombExpr(ByteOp v, [ty], []) +let mkByte (v, ty) = CombExpr(ByteOp v, [ty], []) -let mkInt16 (v, ty) = CombExpr(Int16Op v, [ty], []) +let mkInt16 (v, ty) = CombExpr(Int16Op v, [ty], []) -let mkUInt16 (v, ty) = CombExpr(UInt16Op v, [ty], []) +let mkUInt16 (v, ty) = CombExpr(UInt16Op v, [ty], []) -let mkInt32 (v, ty) = CombExpr(Int32Op v, [ty], []) +let mkInt32 (v, ty) = CombExpr(Int32Op v, [ty], []) -let mkUInt32 (v, ty) = CombExpr(UInt32Op v, [ty], []) +let mkUInt32 (v, ty) = CombExpr(UInt32Op v, [ty], []) -let mkInt64 (v, ty) = CombExpr(Int64Op v, [ty], []) +let mkInt64 (v, ty) = CombExpr(Int64Op v, [ty], []) -let mkUInt64 (v, ty) = CombExpr(UInt64Op v, [ty], []) +let mkUInt64 (v, ty) = CombExpr(UInt64Op v, [ty], []) let mkSequential (e1, e2) = CombExpr(SeqOp, [], [e1;e2]) -let mkForLoop (x1, x2, x3) = CombExpr(ForLoopOp, [], [x1;x2;x3]) +let mkForLoop (x1, x2, x3) = CombExpr(ForLoopOp, [], [x1;x2;x3]) let mkWhileLoop (e1, e2) = CombExpr(WhileLoopOp, [], [e1;e2]) @@ -235,15 +240,19 @@ let isAttributedExpression e = match e with AttrExpr(_, _) -> true | _ -> false //--------------------------------------------------------------------------- // Pickle/unpickle expression and type specifications in a stable format // compatible with those read by Microsoft.FSharp.Quotations -//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- let SerializedReflectedDefinitionsResourceNameBase = "ReflectedDefinitions" let freshVar (n, ty, mut) = { vText=n; vType=ty; vMutable=mut } -module SimplePickle = +/// Arbitrary value +[] +let PickleBufferCapacity = 100000 + +module SimplePickle = - type Table<'T> = + type Table<'T> = { tbl: HashMultiMap<'T, int> // This should be "Dictionary" mutable rows: 'T list mutable count: int } @@ -258,21 +267,21 @@ module SimplePickle = member tbl.Count = tbl.rows.Length member tbl.Add x = - let n = tbl.count + let n = tbl.count tbl.count <- tbl.count + 1 tbl.tbl.Add(x, n) tbl.rows <- x :: tbl.rows n member tbl.FindOrAdd x = - if tbl.tbl.ContainsKey x then tbl.tbl.[x] + if tbl.tbl.ContainsKey x then tbl.tbl.[x] else tbl.Add x - member tbl.Find x = tbl.tbl.[x] + member tbl.Find x = tbl.tbl.[x] - member tbl.ContainsKey x = tbl.tbl.ContainsKey x + member tbl.ContainsKey x = tbl.tbl.ContainsKey x - type QuotationPickleOutState = + type QuotationPickleOutState = { os: ByteBuffer ostrings: Table } @@ -284,32 +293,37 @@ module SimplePickle = let p_unit () (_os: QuotationPickleOutState) = () - let prim_pint32 i st = + let prim_pint32 i st = p_byte (Bits.b0 i) st p_byte (Bits.b1 i) st p_byte (Bits.b2 i) st p_byte (Bits.b3 i) st - // compress integers according to the same scheme used by CLR metadata - // This halves the size of pickled data - let p_int32 n st = - if n >= 0 && n <= 0x7F then + // compress integers according to the same scheme used by CLR metadata + // This halves the size of pickled data + let p_int32 n st = + if n >= 0 && n <= 0x7F then p_byte (Bits.b0 n) st - else if n >= 0x80 && n <= 0x3FFF then + else if n >= 0x80 && n <= 0x3FFF then p_byte (0x80 ||| (n >>> 8)) st - p_byte (n &&& 0xFF) st - else + p_byte (n &&& 0xFF) st + else p_byte 0xFF st prim_pint32 n st - let p_bytes (s:byte[]) st = + let p_bytes (s:byte[]) st = let len = s.Length p_int32 (len) st st.os.EmitBytes s - let prim_pstring (s:string) st = - let bytes = Encoding.UTF8.GetBytes s - let len = bytes.Length + let p_memory (s:ReadOnlyMemory) st = + let len = s.Length + p_int32 (len) st + st.os.EmitMemory s + + let prim_pstring (s:string) st = + let bytes = Encoding.UTF8.GetBytes s + let len = bytes.Length p_int32 (len) st st.os.EmitBytes bytes @@ -325,7 +339,7 @@ module SimplePickle = let puint32 (x:uint32) st = p_int32 (int32 x) st - let p_int64 i st = + let p_int64 i st = p_int32 (int32 (i &&& 0xFFFFFFFFL)) st p_int32 (int32 (i >>> 32)) st @@ -354,43 +368,49 @@ module SimplePickle = let p_string s st = puniq st.ostrings s st let rec p_list f x st = - match x with + match x with | [] -> p_byte 0 st | h :: t -> p_byte 1 st; f h st; p_list f t st - + let pickle_obj p x = + let st1 = + { os = ByteBuffer.Create(PickleBufferCapacity, useArrayPool = true) + ostrings=Table<_>.Create() } let stringTab, phase1bytes = - let st1 = - { os = ByteBuffer.Create 100000 - ostrings=Table<_>.Create() } p x st1 - st1.ostrings.AsList, st1.os.Close() - let phase2data = (stringTab, phase1bytes) - let phase2bytes = - let st2 = - { os = ByteBuffer.Create 100000 - ostrings=Table<_>.Create() } - p_tup2 (p_list prim_pstring) p_bytes phase2data st2 - st2.os.Close() - phase2bytes + st1.ostrings.AsList, st1.os.AsMemory() + + let phase2data = (stringTab, phase1bytes) + + let st2 = + { os = ByteBuffer.Create(PickleBufferCapacity, useArrayPool = true) + ostrings=Table<_>.Create() } + let phase2bytes = + p_tup2 (p_list prim_pstring) p_memory phase2data st2 + st2.os.AsMemory() + + let finalBytes = phase2bytes.ToArray() + (st1.os :> IDisposable).Dispose() + (st2.os :> IDisposable).Dispose() + finalBytes open SimplePickle let p_assemblyref x st = p_string x st -let p_NamedType x st = - match x with +let p_NamedType x st = + match x with | Idx n -> p_tup2 p_string p_assemblyref (string n, "") st | Named (nm, a) -> p_tup2 p_string p_assemblyref (nm, a) st -let p_tycon x st = +let p_tycon x st = match x with | FunTyOp -> p_byte 1 st | NamedTyOp a -> p_byte 2 st; p_NamedType a st | ArrayTyOp a -> p_byte 3 st; p_int a st let rec p_type x st = - match x with + match x with | VarType v -> p_byte 0 st; p_int v st | AppType(c, ts) -> p_byte 1 st; p_tup2 p_tycon p_types (c, ts) st @@ -402,22 +422,22 @@ let p_recdFieldSpec v st = p_tup2 p_NamedType p_string v st let p_ucaseSpec v st = p_tup2 p_NamedType p_string v st -let p_MethodData a st = +let p_MethodData a st = p_tup5 p_NamedType p_types p_type p_string p_int (a.methParent, a.methArgTypes, a.methRetType, a.methName, a.numGenericArgs) st -let p_CtorData a st = +let p_CtorData a st = p_tup2 p_NamedType p_types (a.ctorParent, a.ctorArgTypes) st -let p_PropInfoData a st = +let p_PropInfoData a st = p_tup4 p_NamedType p_string p_type p_types a st - -let p_CombOp x st = - match x with + +let p_CombOp x st = + match x with | CondOp -> p_byte 0 st - | ModuleValueOp (x, y, z) -> + | ModuleValueOp (x, y, z) -> p_byte 1 st - p_NamedType x st - p_string y st + p_NamedType x st + p_string y st p_bool z st | LetRecOp -> p_byte 2 st | RecdMkOp a -> p_byte 3 st; p_NamedType a st @@ -470,16 +490,16 @@ let p_CombOp x st = p_MethodData a st p_MethodData b st p_int c st - | ModuleValueWOp (x, y, z, nmW, nWitnesses) -> + | ModuleValueWOp (x, y, z, nmW, nWitnesses) -> p_byte 51 st p_string nmW st p_int nWitnesses st - p_NamedType x st - p_string y st + p_NamedType x st + p_string y st p_bool z st let rec p_expr x st = - match x with + match x with | CombExpr(c, ts, args) -> p_byte 0 st; p_tup3 p_CombOp p_types (p_list p_expr) (c, ts, args) st | VarExpr v -> p_byte 1 st; p_int v st | LambdaExpr(v, e) -> p_byte 2 st; p_tup2 p_varDecl p_expr (v, e) st @@ -488,37 +508,37 @@ let rec p_expr x st = | AttrExpr(e, attrs) -> p_byte 5 st; p_tup2 p_expr (p_list p_expr) (e, attrs) st | ThisVarExpr(ty) -> p_byte 6 st; p_type ty st | QuoteRawExpr(tm) -> p_byte 7 st; p_expr tm st - -type ModuleDefnData = + +type ModuleDefnData = { Module: NamedTypeData Name: string IsProperty: bool } -type MethodBaseData = +type MethodBaseData = | ModuleDefn of ModuleDefnData * (string * int) option - | Method of MethodData - | Ctor of CtorData + | Method of MethodData + | Ctor of CtorData let pickle = pickle_obj p_expr -let p_MethodBase x st = - match x with - | ModuleDefn (md, None) -> +let p_MethodBase x st = + match x with + | ModuleDefn (md, None) -> p_byte 0 st p_NamedType md.Module st p_string md.Name st p_bool md.IsProperty st - | ModuleDefn (md, Some (nmW, nWitnesses)) -> + | ModuleDefn (md, Some (nmW, nWitnesses)) -> p_byte 3 st p_string nmW st p_int nWitnesses st p_NamedType md.Module st p_string md.Name st p_bool md.IsProperty st - | Method md -> + | Method md -> p_byte 1 st p_MethodData md st - | Ctor md -> + | Ctor md -> p_byte 2 st p_CtorData md st diff --git a/src/fsharp/QuotationPickler.fsi b/src/fsharp/QuotationPickler.fsi index 0767709238d..12c599342a9 100644 --- a/src/fsharp/QuotationPickler.fsi +++ b/src/fsharp/QuotationPickler.fsi @@ -4,26 +4,22 @@ module internal FSharp.Compiler.QuotationPickler #nowarn "1178" // The struct, record or union type 'internal_instr_extension' is not structurally comparable because the type -open Internal.Utilities -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Bytes -open FSharp.Compiler -open FSharp.Compiler.Lib - type TypeData -type TypeVarData = { tvName: string } + +type TypeVarData = { tvName: string } type NamedTypeData = /// Indicates an F# 4.0+ reference into the supplied table of type definition references, ultimately resolved by TypeRef/TypeDef data | Idx of int /// Indicates an F# 3.0+ reference to a named type in an assembly loaded by name - | Named of (* tcName: *) string * (* tcAssembly: *) string - + | Named of tcName: string * tcAssembly: string val mkVarTy : int -> TypeData + val mkFunTy : (TypeData * TypeData) -> TypeData + val mkArrayTy : (int * TypeData ) -> TypeData + val mkILNamedTy : (NamedTypeData * TypeData list) -> TypeData type ExprData @@ -31,19 +27,19 @@ type ExprData type VarData type CtorData = - { ctorParent: NamedTypeData; - ctorArgTypes: TypeData list; } + { ctorParent: NamedTypeData + ctorArgTypes: TypeData list } type MethodData = - { methParent: NamedTypeData; - methName: string; - methArgTypes: TypeData list; - methRetType: TypeData; + { methParent: NamedTypeData + methName: string + methArgTypes: TypeData list + methRetType: TypeData numGenericArgs: int } type ModuleDefnData = - { Module: NamedTypeData; - Name: string; + { Module: NamedTypeData + Name: string IsProperty: bool } type MethodBaseData = diff --git a/src/fsharp/QuotationTranslator.fs b/src/fsharp/QuotationTranslator.fs index 78dc40e9c11..166d62a0b6f 100644 --- a/src/fsharp/QuotationTranslator.fs +++ b/src/fsharp/QuotationTranslator.fs @@ -3,22 +3,21 @@ module internal FSharp.Compiler.QuotationTranslator open Internal.Utilities +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Lib -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.TcGlobals open System.Collections.Generic -open System.Collections.Immutable module QP = FSharp.Compiler.QuotationPickler @@ -163,7 +162,7 @@ let BindFlatVals env vs = List.fold BindVal env vs // fold left-to-right because exception InvalidQuotedTerm of exn -exception IgnoringPartOfQuotedTermWarning of string * Range.range +exception IgnoringPartOfQuotedTermWarning of string * range let wfail e = raise (InvalidQuotedTerm e) @@ -1088,6 +1087,8 @@ and ConvDecisionTree cenv env tgs typR x = | _ -> let ty = tyOfExpr cenv.g e1 let eq = mkCallEqualsOperator cenv.g m ty e1 (Expr.Const (Const.Zero, m, ty)) + // no need to generate witnesses for generated equality operation calls, see https://github.com/dotnet/fsharp/issues/10389 + let env = { env with suppressWitnesses = true } let eqR = ConvExpr cenv env eq QP.mkCond (eqR, ConvDecisionTree cenv env tgs typR dtree, acc) @@ -1244,7 +1245,7 @@ let ConvMethodBase cenv env (methName, v: Val) = let numEnclTypeArgs = vref.MemberApparentEntity.TyparsNoRange.Length let argTys = argInfos |> List.concat |> List.map fst - let isNewObj = (vspr.MemberFlags.MemberKind = MemberKind.Constructor) + let isNewObj = (vspr.MemberFlags.MemberKind = SynMemberKind.Constructor) // The signature types are w.r.t. to the formal context let envinner = BindFormalTypars env tps diff --git a/src/fsharp/QuotationTranslator.fsi b/src/fsharp/QuotationTranslator.fsi index c140beb1639..c6f3bcd48e5 100755 --- a/src/fsharp/QuotationTranslator.fsi +++ b/src/fsharp/QuotationTranslator.fsi @@ -6,12 +6,12 @@ module internal FSharp.Compiler.QuotationTranslator open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.Import -open FSharp.Compiler.Range +open FSharp.Compiler.Text open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypedTree exception InvalidQuotedTerm of exn -exception IgnoringPartOfQuotedTermWarning of string * Range.range +exception IgnoringPartOfQuotedTermWarning of string * range [] type IsReflectedDefinition = diff --git a/src/fsharp/ReferenceResolver.fs b/src/fsharp/ReferenceResolver.fs index 23f68bf0029..c5e70fd0632 100644 --- a/src/fsharp/ReferenceResolver.fs +++ b/src/fsharp/ReferenceResolver.fs @@ -1,60 +1,63 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler +namespace FSharp.Compiler.CodeAnalysis -module public ReferenceResolver = +exception internal LegacyResolutionFailure - exception internal ResolutionFailure +[] +type LegacyResolutionEnvironment = + /// Indicates a script or source being edited or compiled. Uses reference assemblies (not implementation assemblies). + | EditingOrCompilation of isEditing: bool - [] - type ResolutionEnvironment = - /// Indicates a script or source being edited or compiled. Uses reference assemblies (not implementation assemblies). - | EditingOrCompilation of isEditing: bool + /// Indicates a script or source being dynamically compiled and executed. Uses implementation assemblies. + | CompilationAndEvaluation - /// Indicates a script or source being dynamically compiled and executed. Uses implementation assemblies. - | CompilationAndEvaluation +type LegacyResolvedFile = + { + /// Item specification. + itemSpec:string - type ResolvedFile = - { - /// Item specification. - itemSpec:string + /// Prepare textual information about where the assembly was resolved from, used for tooltip output + prepareToolTip: string * string -> string - /// Prepare textual information about where the assembly was resolved from, used for tooltip output - prepareToolTip: string * string -> string + /// Round-tripped baggage + baggage:string + } - /// Round-tripped baggage - baggage:string - } + override this.ToString() = sprintf "LegacyResolvedFile(%s)" this.itemSpec - override this.ToString() = sprintf "ResolvedFile(%s)" this.itemSpec - - [] - type Resolver = - /// Get the "v4.5.1"-style moniker for the highest installed .NET Framework version. - /// This is the value passed back to Resolve if no explicit "mscorlib" has been given. - /// - /// Note: If an explicit "mscorlib" is given, then --noframework is being used, and the whole ReferenceResolver logic is essentially - /// unused. However in the future an option may be added to allow an explicit specification of - /// a .NET Framework version to use for scripts. - abstract HighestInstalledNetFrameworkVersion : unit -> string +[] +type internal ILegacyReferenceResolver = + /// Get the "v4.5.1"-style moniker for the highest installed .NET Framework version. + /// This is the value passed back to Resolve if no explicit "mscorlib" has been given. + /// + /// Note: If an explicit "mscorlib" is given, then --noframework is being used, and the whole ReferenceResolver logic is essentially + /// unused. However in the future an option may be added to allow an explicit specification of + /// a .NET Framework version to use for scripts. + abstract HighestInstalledNetFrameworkVersion : unit -> string - /// Get the Reference Assemblies directory for the .NET Framework (on Windows) - /// This is added to the default resolution path for - /// design-time compilations. - abstract DotNetFrameworkReferenceAssembliesRootDirectory : string - - /// Perform assembly resolution on the given references under the given conditions - abstract Resolve : - resolutionEnvironment: ResolutionEnvironment * - // The actual reference paths or assembly name text, plus baggage - references:(string (* baggage *) * string)[] * - // e.g. v4.5.1 - targetFrameworkVersion:string * - targetFrameworkDirectories:string list * - targetProcessorArchitecture:string * - fsharpCoreDir:string * - explicitIncludeDirs:string list * - implicitIncludeDir:string * - logMessage:(string->unit) * - logDiagnostic:(bool -> string -> string -> unit) - -> ResolvedFile[] + /// Get the Reference Assemblies directory for the .NET Framework (on Windows) + /// This is added to the default resolution path for + /// design-time compilations. + abstract DotNetFrameworkReferenceAssembliesRootDirectory : string + + /// Perform assembly resolution on the given references under the given conditions + abstract Resolve : + resolutionEnvironment: LegacyResolutionEnvironment * + // The actual reference paths or assembly name text, plus baggage + references:(string (* baggage *) * string)[] * + // e.g. v4.5.1 + targetFrameworkVersion:string * + targetFrameworkDirectories:string list * + targetProcessorArchitecture:string * + fsharpCoreDir:string * + explicitIncludeDirs:string list * + implicitIncludeDir:string * + logMessage:(string->unit) * + logDiagnostic:(bool -> string -> string -> unit) + -> LegacyResolvedFile[] + +[] +type LegacyReferenceResolver(impl:ILegacyReferenceResolver) = + member internal _.Impl = impl + diff --git a/src/fsharp/ReferenceResolver.fsi b/src/fsharp/ReferenceResolver.fsi index fd295cdf34f..59e072495a7 100644 --- a/src/fsharp/ReferenceResolver.fsi +++ b/src/fsharp/ReferenceResolver.fsi @@ -1,58 +1,64 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler +namespace FSharp.Compiler.CodeAnalysis -module public ReferenceResolver = +open System - exception internal ResolutionFailure +exception internal LegacyResolutionFailure - [] - type ResolutionEnvironment = - /// Indicates a script or source being edited or compiled. Uses reference assemblies (not implementation assemblies). - | EditingOrCompilation of isEditing: bool +[] +type internal LegacyResolutionEnvironment = + /// Indicates a script or source being edited or compiled. Uses reference assemblies (not implementation assemblies). + | EditingOrCompilation of isEditing: bool - /// Indicates a script or source being dynamically compiled and executed. Uses implementation assemblies. - | CompilationAndEvaluation + /// Indicates a script or source being dynamically compiled and executed. Uses implementation assemblies. + | CompilationAndEvaluation - type ResolvedFile = - { - /// Item specification. - itemSpec:string +type internal LegacyResolvedFile = + { + /// Item specification. + itemSpec:string - /// Prepare textual information about where the assembly was resolved from, used for tooltip output - prepareToolTip: string * string -> string + /// Prepare textual information about where the assembly was resolved from, used for tooltip output + prepareToolTip: string * string -> string - /// Round-tripped baggage - baggage:string - } + /// Round-tripped baggage + baggage:string + } - [] - type Resolver = - /// Get the "v4.5.1"-style moniker for the highest installed .NET Framework version. - /// This is the value passed back to Resolve if no explicit "mscorlib" has been given. - /// - /// Note: If an explicit "mscorlib" is given, then --noframework is being used, and the whole ReferenceResolver logic is essentially - /// unused. However in the future an option may be added to allow an explicit specification of - /// a .NET Framework version to use for scripts. - abstract member HighestInstalledNetFrameworkVersion: unit -> string - - /// Perform assembly resolution on the given references under the given conditions - abstract member Resolve: - resolutionEnvironment:ResolutionEnvironment * - references:(string * string) [] * - targetFrameworkVersion:string * - targetFrameworkDirectories:string list * - targetProcessorArchitecture:string * - fsharpCoreDir:string * - explicitIncludeDirs:string list * - implicitIncludeDir:string * - logMessage:(string -> unit) * - logDiagnostic:(bool -> string -> string -> unit) -> - ResolvedFile [] - - /// Get the Reference Assemblies directory for the .NET Framework (on Windows) - /// This is added to the default resolution path for - /// design-time compilations. - abstract member DotNetFrameworkReferenceAssembliesRootDirectory: string +[] +type internal ILegacyReferenceResolver = + /// Get the "v4.5.1"-style moniker for the highest installed .NET Framework version. + /// This is the value passed back to Resolve if no explicit "mscorlib" has been given. + /// + /// Note: If an explicit "mscorlib" is given, then --noframework is being used, and the whole ReferenceResolver logic is essentially + /// unused. However in the future an option may be added to allow an explicit specification of + /// a .NET Framework version to use for scripts. + abstract member HighestInstalledNetFrameworkVersion: unit -> string + + /// Perform assembly resolution on the given references under the given conditions + abstract member Resolve: + resolutionEnvironment: LegacyResolutionEnvironment * + references:(string * string) [] * + targetFrameworkVersion:string * + targetFrameworkDirectories:string list * + targetProcessorArchitecture:string * + fsharpCoreDir:string * + explicitIncludeDirs:string list * + implicitIncludeDir:string * + logMessage:(string -> unit) * + logDiagnostic:(bool -> string -> string -> unit) -> + LegacyResolvedFile [] + + /// Get the Reference Assemblies directory for the .NET Framework (on Windows) + /// This is added to the default resolution path for + /// design-time compilations. + abstract member DotNetFrameworkReferenceAssembliesRootDirectory: string +// Note, two implementations of this are provided, and no further implementations can be added from +// outside FSharp.Compiler.Service +[] +type LegacyReferenceResolver = + internal new: impl: ILegacyReferenceResolver -> LegacyReferenceResolver + member internal Impl: ILegacyReferenceResolver diff --git a/src/fsharp/ScriptClosure.fs b/src/fsharp/ScriptClosure.fs index e08910609e3..c7fa44a6b26 100644 --- a/src/fsharp/ScriptClosure.fs +++ b/src/fsharp/ScriptClosure.fs @@ -7,33 +7,32 @@ open System open System.Collections.Generic open System.IO open System.Text - +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerDiagnostics open FSharp.Compiler.CompilerImports -open FSharp.Compiler.DotNetFrameworkDependencies +open FSharp.Compiler.DependencyManager +open FSharp.Compiler.Diagnostics open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Lib +open FSharp.Compiler.IO +open FSharp.Compiler.CodeAnalysis open FSharp.Compiler.ParseAndCheckInputs -open FSharp.Compiler.SyntaxTree -open FSharp.Compiler.Range -open FSharp.Compiler.ReferenceResolver +open FSharp.Compiler.Syntax open FSharp.Compiler.Text - -open Microsoft.DotNet.DependencyManager +open FSharp.Compiler.Text.Range [] -type LoadClosureInput = +type LoadClosureInput = { FileName: string SyntaxTree: ParsedInput option - ParseDiagnostics: (PhasedDiagnostic * bool) list - MetaCommandDiagnostics: (PhasedDiagnostic * bool) list } + ParseDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list + MetaCommandDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list } [] -type LoadClosure = +type LoadClosure = { /// The source files along with the ranges of the #load positions in each file. SourceFiles: (string * range list) list @@ -43,6 +42,12 @@ type LoadClosure = /// The resolved pacakge references along with the ranges of the #r positions in each file. PackageReferences: (range * string list)[] + /// Whether we're decided to use .NET Framework analysis for this script + UseDesktopFramework: bool + + /// Was the SDK directory override given? + SdkDirOverride: string option + /// The list of references that were not resolved during load closure. These may still be extension references. UnresolvedReferences: UnresolvedAssemblyReference list @@ -56,14 +61,14 @@ type LoadClosure = NoWarns: (string * range list) list /// Diagnostics seen while processing resolutions - ResolutionDiagnostics: (PhasedDiagnostic * bool) list + ResolutionDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list /// Diagnostics seen while parsing root of closure - AllRootFileDiagnostics: (PhasedDiagnostic * bool) list + AllRootFileDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list /// Diagnostics seen while processing the compiler options implied root of closure - LoadClosureRootFileDiagnostics: (PhasedDiagnostic * bool) list - } + LoadClosureRootFileDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list + } [] @@ -72,24 +77,23 @@ type CodeContext = | Compilation // in fsc.exe | Editing // in VS -module ScriptPreprocessClosure = - open Internal.Utilities.Text.Lexing - +module ScriptPreprocessClosure = + /// Represents an input to the closure finding process - type ClosureSource = ClosureSource of filename: string * referenceRange: range * sourceText: ISourceText * parseRequired: bool - + type ClosureSource = ClosureSource of filename: string * referenceRange: range * sourceText: ISourceText * parseRequired: bool + /// Represents an output of the closure finding process - type ClosureFile = ClosureFile of string * range * ParsedInput option * (PhasedDiagnostic * bool) list * (PhasedDiagnostic * bool) list * (string * range) list // filename, range, errors, warnings, nowarns + type ClosureFile = ClosureFile of string * range * ParsedInput option * (PhasedDiagnostic * FSharpDiagnosticSeverity) list * (PhasedDiagnostic * FSharpDiagnosticSeverity) list * (string * range) list // filename, range, errors, warnings, nowarns type Observed() = let seen = System.Collections.Generic.Dictionary<_, bool>() - member ob.SetSeen check = - if not(seen.ContainsKey check) then + member ob.SetSeen check = + if not(seen.ContainsKey check) then seen.Add(check, true) - + member ob.HaveSeen check = seen.ContainsKey check - + /// Parse a script from source. let ParseScriptText (filename: string, sourceText: ISourceText, tcConfig: TcConfig, codeContext, @@ -99,96 +103,126 @@ module ScriptPreprocessClosure = // fsi.exe -- !COMPILED\INTERACTIVE // Language service // .fs -- EDITING + COMPILED\!INTERACTIVE - // .fsx -- EDITING + !COMPILED\INTERACTIVE + // .fsx -- EDITING + !COMPILED\INTERACTIVE let defines = - match codeContext with + match codeContext with | CodeContext.CompilationAndEvaluation -> ["INTERACTIVE"] | CodeContext.Compilation -> ["COMPILED"] | CodeContext.Editing -> "EDITING" :: (if IsScript filename then ["INTERACTIVE"] else ["COMPILED"]) let isFeatureSupported featureId = tcConfig.langVersion.SupportsFeature featureId - let lexbuf = UnicodeLexing.SourceTextAsLexbuf(isFeatureSupported, sourceText) + let lexbuf = UnicodeLexing.SourceTextAsLexbuf(true, isFeatureSupported, sourceText) let isLastCompiland = (IsScript filename), tcConfig.target.IsExe // The root compiland is last in the list of compilands. - ParseOneInputLexbuf (tcConfig, lexResourceManager, defines, lexbuf, filename, isLastCompiland, errorLogger) + ParseOneInputLexbuf (tcConfig, lexResourceManager, defines, lexbuf, filename, isLastCompiland, errorLogger) /// Create a TcConfig for load closure starting from a single .fsx file - let CreateScriptTextTcConfig - (legacyReferenceResolver, defaultFSharpBinariesDir, - filename: string, codeContext, - useSimpleResolution, useFsiAuxLib, - basicReferences, applyCommandLineArgs, - assumeDotNetFramework, useSdkRefs, - tryGetMetadataSnapshot, reduceMemoryUsage) = + let CreateScriptTextTcConfig + (legacyReferenceResolver, defaultFSharpBinariesDir, + filename: string, codeContext, + useSimpleResolution, useFsiAuxLib, + basicReferences, applyCommandLineArgs, + assumeDotNetFramework, useSdkRefs, sdkDirOverride, + tryGetMetadataSnapshot, reduceMemoryUsage) = let projectDir = Path.GetDirectoryName filename let isInteractive = (codeContext = CodeContext.CompilationAndEvaluation) let isInvalidationSupported = (codeContext = CodeContext.Editing) - let tcConfigB = - TcConfigBuilder.CreateNew - (legacyReferenceResolver, defaultFSharpBinariesDir, reduceMemoryUsage, projectDir, - isInteractive, isInvalidationSupported, CopyFSharpCoreFlag.No, - tryGetMetadataSnapshot) + let rangeForErrors = mkFirstLineOfFile filename + let tcConfigB = + TcConfigBuilder.CreateNew(legacyReferenceResolver, + defaultFSharpBinariesDir, + reduceMemoryUsage, + projectDir, + isInteractive, + isInvalidationSupported, + CopyFSharpCoreFlag.No, + tryGetMetadataSnapshot, + sdkDirOverride, + rangeForErrors) + tcConfigB.SetPrimaryAssembly (if assumeDotNetFramework then PrimaryAssembly.Mscorlib else PrimaryAssembly.System_Runtime) + tcConfigB.SetUseSdkRefs useSdkRefs applyCommandLineArgs tcConfigB - match basicReferences with - | None -> (basicReferencesForScriptLoadClosure useFsiAuxLib useSdkRefs assumeDotNetFramework) |> List.iter(fun f->tcConfigB.AddReferencedAssemblyByPath(range0, f)) // Add script references - | Some rs -> for m, r in rs do tcConfigB.AddReferencedAssemblyByPath(m, r) + // Work out the references for the script in its location. This may produce diagnostics. + let scriptDefaultReferencesDiagnostics = + + match basicReferences with + | None -> + let errorLogger = CapturingErrorLogger("ScriptDefaultReferences") + use unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger) + let references, useDotNetFramework = tcConfigB.FxResolver.GetDefaultReferences (useFsiAuxLib) + + // If the user requested .NET Core scripting but something went wrong and we reverted to + // .NET Framework scripting then we must adjust both the primaryAssembly and fxResolver + if useDotNetFramework <> assumeDotNetFramework then + tcConfigB.SetPrimaryAssembly (if useDotNetFramework then PrimaryAssembly.Mscorlib else PrimaryAssembly.System_Runtime) + + // Add script references + for reference in references do + tcConfigB.AddReferencedAssemblyByPath(range0, reference) + + errorLogger.Diagnostics + + | Some (rs, diagnostics) -> + for m, reference in rs do + tcConfigB.AddReferencedAssemblyByPath(m, reference) + diagnostics tcConfigB.resolutionEnvironment <- - match codeContext with - | CodeContext.Editing -> ResolutionEnvironment.EditingOrCompilation true - | CodeContext.Compilation -> ResolutionEnvironment.EditingOrCompilation false - | CodeContext.CompilationAndEvaluation -> ResolutionEnvironment.CompilationAndEvaluation - tcConfigB.framework <- false + match codeContext with + | CodeContext.Editing -> LegacyResolutionEnvironment.EditingOrCompilation true + | CodeContext.Compilation -> LegacyResolutionEnvironment.EditingOrCompilation false + | CodeContext.CompilationAndEvaluation -> LegacyResolutionEnvironment.CompilationAndEvaluation + tcConfigB.framework <- false tcConfigB.useSimpleResolution <- useSimpleResolution // Indicates that there are some references not in basicReferencesForScriptLoadClosure which should // be added conditionally once the relevant version of mscorlib.dll has been detected. tcConfigB.implicitlyResolveAssemblies <- false - tcConfigB.useSdkRefs <- useSdkRefs + tcConfigB.SetUseSdkRefs useSdkRefs - TcConfig.Create(tcConfigB, validate=true) + TcConfig.Create(tcConfigB, validate=true), scriptDefaultReferencesDiagnostics - let ClosureSourceOfFilename(filename, m, inputCodePage, parseRequired) = + let ClosureSourceOfFilename(filename, m, inputCodePage, parseRequired) = try let filename = FileSystem.GetFullPathShim filename - use stream = FileSystem.FileStreamReadShim filename - use reader = - match inputCodePage with + use stream = FileSystem.OpenFileForReadShim(filename) + use reader = + match inputCodePage with | None -> new StreamReader(stream, true) - | Some (n: int) -> new StreamReader(stream, Encoding.GetEncoding n) + | Some (n: int) -> new StreamReader(stream, Encoding.GetEncoding n) let source = reader.ReadToEnd() [ClosureSource(filename, m, SourceText.ofString source, parseRequired)] - with e -> - errorRecovery e m + with e -> + errorRecovery e m [] - + let ApplyMetaCommandsFromInputToTcConfigAndGatherNoWarn (tcConfig: TcConfig, inp: ParsedInput, - pathOfMetaCommandSource, dependencyProvider) = + pathOfMetaCommandSource, dependencyProvider) = - let tcConfigB = tcConfig.CloneToBuilder() - let mutable nowarns = [] + let tcConfigB = tcConfig.CloneToBuilder() + let mutable nowarns = [] let getWarningNumber = fun () (m, s) -> nowarns <- (s, m) :: nowarns let addReferenceDirective = fun () (m, s, directive) -> tcConfigB.AddReferenceDirective(dependencyProvider, m, s, directive) let addLoadedSource = fun () (m, s) -> tcConfigB.AddLoadedSource(m, s, pathOfMetaCommandSource) - try + try ProcessMetaCommandsFromInput (getWarningNumber, addReferenceDirective, addLoadedSource) (tcConfigB, inp, pathOfMetaCommandSource, ()) with ReportedError _ -> // Recover by using whatever did end up in the tcConfig () - + try TcConfig.Create(tcConfigB, validate=false), nowarns with ReportedError _ -> // Recover by using a default TcConfig. - let tcConfigB = tcConfig.CloneToBuilder() + let tcConfigB = tcConfig.CloneToBuilder() TcConfig.Create(tcConfigB, validate=false), nowarns let FindClosureFiles - (mainFile, _m, closureSources, origTcConfig:TcConfig, + (mainFile, _m, closureSources, origTcConfig:TcConfig, codeContext, lexResourceManager: Lexhelp.LexResourceManager, dependencyProvider: DependencyProvider) = let mutable tcConfig = origTcConfig @@ -227,23 +261,32 @@ module ScriptPreprocessClosure = | Directive.Include -> "i" let packageManagerTextLines = packageManagerLines |> List.map(fun l -> directive l.Directive, l.Line) - let result = dependencyProvider.Resolve(dependencyManager, ".fsx", packageManagerTextLines, reportError, executionTfm, executionRid, tcConfig.implicitIncludeDir, mainFile, scriptName) + let tfm, rid = tcConfig.FxResolver.GetTfmAndRid() + let result = dependencyProvider.Resolve(dependencyManager, ".fsx", packageManagerTextLines, reportError, tfm, rid, tcConfig.implicitIncludeDir, mainFile, scriptName) if result.Success then // Resolution produced no errors //Write outputs in F# Interactive and compiler - if codeContext <> CodeContext.Editing then + if codeContext <> CodeContext.Editing then for line in result.StdOut do Console.Out.WriteLine(line) for line in result.StdError do Console.Error.WriteLine(line) - packageReferences.[m] <- [ for script in result.SourceFiles do yield! File.ReadAllLines script ] + packageReferences.[m] <- [ for script in result.SourceFiles do yield! FileSystem.OpenFileForReadShim(script).ReadLines() ] if not (Seq.isEmpty result.Roots) then let tcConfigB = tcConfig.CloneToBuilder() - for folder in result.Roots do + for folder in result.Roots do tcConfigB.AddIncludePath(m, folder, "") tcConfigB.packageManagerLines <- PackageManagerLine.SetLinesAsProcessed packageManagerKey tcConfigB.packageManagerLines tcConfig <- TcConfig.Create(tcConfigB, validate=false) + + if not (Seq.isEmpty result.Resolutions) then + let tcConfigB = tcConfig.CloneToBuilder() + for resolution in result.Resolutions do + tcConfigB.AddReferencedAssemblyByPath(m, resolution) + tcConfig <- TcConfig.Create(tcConfigB, validate = false) + for script in result.SourceFiles do - let scriptText = File.ReadAllText script + use stream = FileSystem.OpenFileForReadShim(script) + let scriptText = stream.ReadAllText() loadScripts.Add script |> ignore let iSourceText = SourceText.ofString scriptText yield! loop (ClosureSource(script, m, iSourceText, true)) @@ -256,49 +299,44 @@ module ScriptPreprocessClosure = // Resolution produced errors update packagerManagerLines entries to note these failure // failed resolutions will no longer be considered let tcConfigB = tcConfig.CloneToBuilder() - tcConfigB.packageManagerLines <- PackageManagerLine.RemoveUnprocessedLines packageManagerKey tcConfigB.packageManagerLines + tcConfigB.packageManagerLines <- PackageManagerLine.RemoveUnprocessedLines packageManagerKey tcConfigB.packageManagerLines tcConfig <- TcConfig.Create(tcConfigB, validate=false)] else [] - and loop (ClosureSource(filename, m, sourceText, parseRequired)) = + and loop (ClosureSource(filename, m, sourceText, parseRequired)) = [ if not (observedSources.HaveSeen(filename)) then observedSources.SetSeen(filename) //printfn "visiting %s" filename - if IsScript filename || parseRequired then + if IsScript filename || parseRequired then let parseResult, parseDiagnostics = let errorLogger = CapturingErrorLogger("FindClosureParse") use _unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger) - let result = ParseScriptText (filename, sourceText, tcConfig, codeContext, lexResourceManager, errorLogger) + let result = ParseScriptText (filename, sourceText, tcConfig, codeContext, lexResourceManager, errorLogger) result, errorLogger.Diagnostics - match parseResult with - | Some parsedScriptAst -> - let errorLogger = CapturingErrorLogger("FindClosureMetaCommands") - use _unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger) - let pathOfMetaCommandSource = Path.GetDirectoryName filename - let preSources = tcConfig.GetAvailableLoadedSources() + let errorLogger = CapturingErrorLogger("FindClosureMetaCommands") + use _unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger) + let pathOfMetaCommandSource = Path.GetDirectoryName filename + let preSources = tcConfig.GetAvailableLoadedSources() - let tcConfigResult, noWarns = ApplyMetaCommandsFromInputToTcConfigAndGatherNoWarn (tcConfig, parsedScriptAst, pathOfMetaCommandSource, dependencyProvider) - tcConfig <- tcConfigResult // We accumulate the tcConfig in order to collect assembly references + let tcConfigResult, noWarns = ApplyMetaCommandsFromInputToTcConfigAndGatherNoWarn (tcConfig, parseResult, pathOfMetaCommandSource, dependencyProvider) + tcConfig <- tcConfigResult // We accumulate the tcConfig in order to collect assembly references - yield! resolveDependencyManagerSources filename + yield! resolveDependencyManagerSources filename - let postSources = tcConfig.GetAvailableLoadedSources() - let sources = if preSources.Length < postSources.Length then postSources.[preSources.Length..] else [] + let postSources = tcConfig.GetAvailableLoadedSources() + let sources = if preSources.Length < postSources.Length then postSources.[preSources.Length..] else [] - yield! resolveDependencyManagerSources filename - 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, [], [], []) - yield ClosureFile(filename, m, Some parsedScriptAst, parseDiagnostics, errorLogger.Diagnostics, noWarns) + yield! resolveDependencyManagerSources filename + 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, [], [], []) + yield ClosureFile(filename, m, Some parseResult, parseDiagnostics, errorLogger.Diagnostics, noWarns) - | None -> - printfn "yielding source %s (failed parse)" filename - yield ClosureFile(filename, m, None, parseDiagnostics, [], []) - else + else // Don't traverse into .fs leafs. printfn "yielding non-script source %s" filename yield ClosureFile(filename, m, None, [], [], []) ] @@ -306,26 +344,25 @@ module ScriptPreprocessClosure = let sources = closureSources |> List.collect loop let packageReferences = packageReferences |> Seq.map (fun kvp -> kvp.Key, kvp.Value) |> Seq.toArray sources, tcConfig, packageReferences - - + /// Reduce the full directive closure into LoadClosure - let GetLoadClosure(ctok, rootFilename, closureFiles, tcConfig: TcConfig, codeContext, packageReferences) = - - // Mark the last file as isLastCompiland. + let GetLoadClosure(rootFilename, closureFiles, tcConfig: TcConfig, codeContext, packageReferences, earlierDiagnostics) = + + // Mark the last file as isLastCompiland. let closureFiles = - if isNil closureFiles then - closureFiles - else + 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, _))), - parseDiagnostics, metaDiagnostics, nowarns) -> + (filename, m, + Some(ParsedInput.ImplFile (ParsedImplFileInput (name, isScript, qualNameOfFile, scopedPragmas, hashDirectives, implFileFlags, _))), + parseDiagnostics, metaDiagnostics, nowarns) -> let isLastCompiland = (true, tcConfig.target.IsExe) rest @ [ClosureFile - (filename, m, - Some(ParsedInput.ImplFile (ParsedImplFileInput (name, isScript, qualNameOfFile, scopedPragmas, hashDirectives, implFileFlags, isLastCompiland))), + (filename, m, + Some(ParsedInput.ImplFile (ParsedImplFileInput (name, isScript, qualNameOfFile, scopedPragmas, hashDirectives, implFileFlags, isLastCompiland))), parseDiagnostics, metaDiagnostics, nowarns)] | _ -> closureFiles @@ -333,7 +370,7 @@ module ScriptPreprocessClosure = // Get all source files. let sourceFiles = [ for (ClosureFile(filename, m, _, _, _, _)) in closureFiles -> (filename, m) ] - let sourceInputs = + let sourceInputs = [ for (ClosureFile(filename, _, input, parseDiagnostics, metaDiagnostics, _nowarns)) in closureFiles -> ({ FileName=filename SyntaxTree=input @@ -343,25 +380,25 @@ module ScriptPreprocessClosure = let globalNoWarns = closureFiles |> List.collect (fun (ClosureFile(_, _, _, _, _, noWarns)) -> noWarns) // Resolve all references. - let references, unresolvedReferences, resolutionDiagnostics = - let errorLogger = CapturingErrorLogger("GetLoadClosure") - + let references, unresolvedReferences, resolutionDiagnostics = + let errorLogger = CapturingErrorLogger("GetLoadClosure") + use unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger) - let references, unresolvedReferences = TcAssemblyResolutions.GetAssemblyResolutionInformation(ctok, tcConfig) + let references, unresolvedReferences = TcAssemblyResolutions.GetAssemblyResolutionInformation(tcConfig) let references = references |> List.map (fun ar -> ar.resolvedPath, ar) references, unresolvedReferences, errorLogger.Diagnostics // Root errors and warnings - look at the last item in the closureFiles list - let loadClosureRootDiagnostics, allRootDiagnostics = + let loadClosureRootDiagnostics, allRootDiagnostics = match List.rev closureFiles with - | ClosureFile(_, _, _, parseDiagnostics, metaDiagnostics, _) :: _ -> - (metaDiagnostics @ resolutionDiagnostics), - (parseDiagnostics @ metaDiagnostics @ resolutionDiagnostics) + | ClosureFile(_, _, _, parseDiagnostics, metaDiagnostics, _) :: _ -> + (earlierDiagnostics @ metaDiagnostics @ resolutionDiagnostics), + (parseDiagnostics @ earlierDiagnostics @ metaDiagnostics @ resolutionDiagnostics) | _ -> [], [] // When no file existed. - + let isRootRange exn = match GetRangeOfDiagnostic exn with - | Some m -> + | Some m -> // Return true if the error was *not* from a #load-ed file. let isArgParameterWhileNotEditing = (codeContext <> CodeContext.Editing) && (Range.equals m range0 || Range.equals m rangeStartup || Range.equals m rangeCmdArgs) let isThisFileName = (0 = String.Compare(rootFilename, m.FileName, StringComparison.OrdinalIgnoreCase)) @@ -370,11 +407,13 @@ module ScriptPreprocessClosure = // Filter out non-root errors and warnings let allRootDiagnostics = allRootDiagnostics |> List.filter (fst >> isRootRange) - + let result: LoadClosure = { SourceFiles = List.groupBy fst sourceFiles |> List.map (map2Of2 (List.map snd)) References = List.groupBy fst references |> List.map (map2Of2 (List.map snd)) PackageReferences = packageReferences + UseDesktopFramework = (tcConfig.primaryAssembly = PrimaryAssembly.Mscorlib) + SdkDirOverride = tcConfig.sdkDirOverride UnresolvedReferences = unresolvedReferences Inputs = sourceInputs NoWarns = List.groupBy fst globalNoWarns |> List.map (map2Of2 (List.map snd)) @@ -387,10 +426,10 @@ module ScriptPreprocessClosure = /// Given source text, find the full load closure. Used from service.fs, when editing a script file let GetFullClosureOfScriptText - (ctok, legacyReferenceResolver, defaultFSharpBinariesDir, - filename, sourceText, codeContext, - useSimpleResolution, useFsiAuxLib, useSdkRefs, - lexResourceManager: Lexhelp.LexResourceManager, + (legacyReferenceResolver, defaultFSharpBinariesDir, + filename, sourceText, codeContext, + useSimpleResolution, useFsiAuxLib, useSdkRefs, sdkDirOverride, + lexResourceManager: Lexhelp.LexResourceManager, applyCommandLineArgs, assumeDotNetFramework, tryGetMetadataSnapshot, reduceMemoryUsage, dependencyProvider) = @@ -398,61 +437,61 @@ module ScriptPreprocessClosure = // // 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 = - CreateScriptTextTcConfig(legacyReferenceResolver, defaultFSharpBinariesDir, - filename, codeContext, useSimpleResolution, - useFsiAuxLib, None, applyCommandLineArgs, assumeDotNetFramework, - useSdkRefs, tryGetMetadataSnapshot, reduceMemoryUsage) - - let resolutions0, _unresolvedReferences = TcAssemblyResolutions.GetAssemblyResolutionInformation(ctok, tcConfig) + let references0, assumeDotNetFramework, scriptDefaultReferencesDiagnostics = + let tcConfig, scriptDefaultReferencesDiagnostics = + CreateScriptTextTcConfig(legacyReferenceResolver, defaultFSharpBinariesDir, + filename, codeContext, useSimpleResolution, + useFsiAuxLib, None, applyCommandLineArgs, assumeDotNetFramework, + useSdkRefs, sdkDirOverride, tryGetMetadataSnapshot, reduceMemoryUsage) + + let resolutions0, _unresolvedReferences = TcAssemblyResolutions.GetAssemblyResolutionInformation(tcConfig) let references0 = resolutions0 |> List.map (fun r->r.originalReference.Range, r.resolvedPath) |> Seq.distinct |> List.ofSeq - references0 + references0, tcConfig.assumeDotNetFramework, scriptDefaultReferencesDiagnostics - let tcConfig = - CreateScriptTextTcConfig(legacyReferenceResolver, defaultFSharpBinariesDir, filename, - codeContext, useSimpleResolution, useFsiAuxLib, Some references0, - applyCommandLineArgs, assumeDotNetFramework, useSdkRefs, + let tcConfig, scriptDefaultReferencesDiagnostics = + CreateScriptTextTcConfig(legacyReferenceResolver, defaultFSharpBinariesDir, filename, + codeContext, useSimpleResolution, useFsiAuxLib, Some (references0, scriptDefaultReferencesDiagnostics), + applyCommandLineArgs, assumeDotNetFramework, useSdkRefs, sdkDirOverride, tryGetMetadataSnapshot, reduceMemoryUsage) let closureSources = [ClosureSource(filename, range0, sourceText, true)] let closureFiles, tcConfig, packageReferences = FindClosureFiles(filename, range0, closureSources, tcConfig, codeContext, lexResourceManager, dependencyProvider) - GetLoadClosure(ctok, filename, closureFiles, tcConfig, codeContext, packageReferences) + GetLoadClosure(filename, closureFiles, tcConfig, codeContext, packageReferences, scriptDefaultReferencesDiagnostics) /// Given source filename, find the full load closure /// Used from fsi.fs and fsc.fs, for #load and command line let GetFullClosureOfScriptFiles - (ctok, tcConfig:TcConfig, files:(string*range) list, codeContext, + (tcConfig:TcConfig, files:(string*range) list, codeContext, lexResourceManager: Lexhelp.LexResourceManager, dependencyProvider) = let mainFile, mainFileRange = List.last files let closureSources = files |> List.collect (fun (filename, m) -> ClosureSourceOfFilename(filename, m,tcConfig.inputCodePage,true)) let closureFiles, tcConfig, packageReferences = FindClosureFiles(mainFile, mainFileRange, closureSources, tcConfig, codeContext, lexResourceManager, dependencyProvider) - GetLoadClosure(ctok, mainFile, closureFiles, tcConfig, codeContext, packageReferences) + GetLoadClosure(mainFile, closureFiles, tcConfig, codeContext, packageReferences, []) type LoadClosure with - /// Analyze a script text and find the closure of its references. - /// Used from FCS, when editing a script file. + /// Analyze a script text and find the closure of its references. + /// Used from FCS, when editing a script file. // /// A temporary TcConfig is created along the way, is why this routine takes so many arguments. We want to be sure to use exactly the /// same arguments as the rest of the application. static member ComputeClosureOfScriptText - (ctok, legacyReferenceResolver, defaultFSharpBinariesDir, - filename: string, sourceText: ISourceText, implicitDefines, useSimpleResolution: bool, - useFsiAuxLib, useSdkRefs, lexResourceManager: Lexhelp.LexResourceManager, + (legacyReferenceResolver, defaultFSharpBinariesDir, + filename: string, sourceText: ISourceText, implicitDefines, useSimpleResolution: bool, + useFsiAuxLib, useSdkRefs, sdkDir, lexResourceManager: Lexhelp.LexResourceManager, applyCompilerOptions, assumeDotNetFramework, tryGetMetadataSnapshot, - reduceMemoryUsage, dependencyProvider) = + reduceMemoryUsage, dependencyProvider) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse ScriptPreprocessClosure.GetFullClosureOfScriptText - (ctok, legacyReferenceResolver, defaultFSharpBinariesDir, filename, sourceText, - implicitDefines, useSimpleResolution, useFsiAuxLib, useSdkRefs, lexResourceManager, + (legacyReferenceResolver, defaultFSharpBinariesDir, filename, sourceText, + implicitDefines, useSimpleResolution, useFsiAuxLib, useSdkRefs, sdkDir, lexResourceManager, applyCompilerOptions, assumeDotNetFramework, tryGetMetadataSnapshot, reduceMemoryUsage, dependencyProvider) /// Analyze a set of script files and find the closure of their references. static member ComputeClosureOfScriptFiles - (ctok, tcConfig: TcConfig, files:(string*range) list, implicitDefines, + (tcConfig: TcConfig, files:(string*range) list, implicitDefines, lexResourceManager: Lexhelp.LexResourceManager, dependencyProvider) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse - ScriptPreprocessClosure.GetFullClosureOfScriptFiles (ctok, tcConfig, files, implicitDefines, lexResourceManager, dependencyProvider) + ScriptPreprocessClosure.GetFullClosureOfScriptFiles (tcConfig, files, implicitDefines, lexResourceManager, dependencyProvider) diff --git a/src/fsharp/ScriptClosure.fsi b/src/fsharp/ScriptClosure.fsi index f5c85d2bfc2..6d717a1df71 100644 --- a/src/fsharp/ScriptClosure.fsi +++ b/src/fsharp/ScriptClosure.fsi @@ -3,16 +3,17 @@ /// Compute the load closure of a set of script files module internal FSharp.Compiler.ScriptClosure +open Internal.Utilities.Library open FSharp.Compiler open FSharp.Compiler.AbstractIL.ILBinaryReader -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerImports +open FSharp.Compiler.DependencyManager +open FSharp.Compiler.Diagnostics open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Syntax open FSharp.Compiler.Text -open Microsoft.DotNet.DependencyManager [] type CodeContext = @@ -22,10 +23,15 @@ type CodeContext = [] type LoadClosureInput = - { FileName: string + { + FileName: string + SyntaxTree: ParsedInput option - ParseDiagnostics: (PhasedDiagnostic * bool) list - MetaCommandDiagnostics: (PhasedDiagnostic * bool) list } + + ParseDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list + + MetaCommandDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list + } [] type LoadClosure = @@ -38,6 +44,12 @@ type LoadClosure = /// The resolved pacakge references along with the ranges of the #r positions in each file. PackageReferences: (range * string list)[] + /// Whether we're decided to use .NET Framework analysis for this script + UseDesktopFramework: bool + + /// Was the SDK directory override given? + SdkDirOverride: string option + /// The list of references that were not resolved during load closure. UnresolvedReferences: UnresolvedAssemblyReference list @@ -51,13 +63,13 @@ type LoadClosure = NoWarns: (string * range list) list /// Diagnostics seen while processing resolutions - ResolutionDiagnostics: (PhasedDiagnostic * bool) list + ResolutionDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list /// Diagnostics to show for root of closure (used by fsc.fs) - AllRootFileDiagnostics: (PhasedDiagnostic * bool) list + AllRootFileDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list /// Diagnostics seen while processing the compiler options implied root of closure - LoadClosureRootFileDiagnostics: (PhasedDiagnostic * bool) list } + LoadClosureRootFileDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity) list } /// Analyze a script text and find the closure of its references. /// Used from FCS, when editing a script file. @@ -65,8 +77,7 @@ type LoadClosure = /// A temporary TcConfig is created along the way, is why this routine takes so many arguments. We want to be sure to use exactly the /// same arguments as the rest of the application. static member ComputeClosureOfScriptText: - CompilationThreadToken * - legacyReferenceResolver: ReferenceResolver.Resolver * + legacyReferenceResolver: LegacyReferenceResolver * defaultFSharpBinariesDir: string * filename: string * sourceText: ISourceText * @@ -74,6 +85,7 @@ type LoadClosure = useSimpleResolution: bool * useFsiAuxLib: bool * useSdkRefs: bool * + sdkDir: string option * lexResourceManager: Lexhelp.LexResourceManager * applyCompilerOptions: (TcConfigBuilder -> unit) * assumeDotNetFramework: bool * @@ -85,7 +97,6 @@ type LoadClosure = /// Analyze a set of script files and find the closure of their references. The resulting references are then added to the given TcConfig. /// Used from fsi.fs and fsc.fs, for #load and command line. static member ComputeClosureOfScriptFiles: - CompilationThreadToken * tcConfig:TcConfig * (string * range) list * implicitDefines:CodeContext * diff --git a/src/fsharp/SignatureConformance.fs b/src/fsharp/SignatureConformance.fs index b1bd00345e9..af0fe7fd5fe 100644 --- a/src/fsharp/SignatureConformance.fs +++ b/src/fsharp/SignatureConformance.fs @@ -6,33 +6,36 @@ module internal FSharp.Compiler.SignatureConformance open System.Text +open Internal.Utilities.Collections +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Lib open FSharp.Compiler.Infos -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax open FSharp.Compiler.SyntaxTreeOps +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.InfoReader #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping #endif - exception RequiredButNotSpecified of DisplayEnv * ModuleOrNamespaceRef * string * (StringBuilder -> unit) * range -exception ValueNotContained of DisplayEnv * ModuleOrNamespaceRef * Val * Val * (string * string * string -> string) +exception ValueNotContained of DisplayEnv * InfoReader * ModuleOrNamespaceRef * Val * Val * (string * string * string -> string) -exception ConstrNotContained of DisplayEnv * UnionCase * UnionCase * (string * string -> string) +exception ConstrNotContained of DisplayEnv * InfoReader * Tycon * UnionCase * UnionCase * (string * string -> string) -exception ExnconstrNotContained of DisplayEnv * Tycon * Tycon * (string * string -> string) +exception ExnconstrNotContained of DisplayEnv * InfoReader * Tycon * Tycon * (string * string -> string) -exception FieldNotContained of DisplayEnv * RecdField * RecdField * (string * string -> string) +exception FieldNotContained of DisplayEnv * InfoReader * Tycon * RecdField * RecdField * (string * string -> string) exception InterfaceNotRevealed of DisplayEnv * TType * range @@ -137,7 +140,7 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = | TyparConstraint.DefaultsTo(_, _acty, _) -> true | _ -> if not (List.exists (typarConstraintsAEquiv g aenv implTyparCx) sigTypar.Constraints) - then (errorR(Error(FSComp.SR.typrelSigImplNotCompatibleConstraintsDiffer(sigTypar.Name, Layout.showL(NicePrint.layoutTyparConstraint denv (implTypar, implTyparCx))), m)); false) + then (errorR(Error(FSComp.SR.typrelSigImplNotCompatibleConstraintsDiffer(sigTypar.Name, LayoutRender.showL(NicePrint.layoutTyparConstraint denv (implTypar, implTyparCx))), m)); false) else true) && // Check the constraints in the signature are present in the implementation @@ -150,12 +153,12 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = | TyparConstraint.SupportsEquality _ -> true | _ -> if not (List.exists (fun implTyparCx -> typarConstraintsAEquiv g aenv implTyparCx sigTyparCx) implTypar.Constraints) then - (errorR(Error(FSComp.SR.typrelSigImplNotCompatibleConstraintsDifferRemove(sigTypar.Name, Layout.showL(NicePrint.layoutTyparConstraint denv (sigTypar, sigTyparCx))), m)); false) + (errorR(Error(FSComp.SR.typrelSigImplNotCompatibleConstraintsDifferRemove(sigTypar.Name, LayoutRender.showL(NicePrint.layoutTyparConstraint denv (sigTypar, sigTyparCx))), m)); false) else true) && (not checkingSig || checkAttribs aenv implTypar.Attribs sigTypar.Attribs (fun attribs -> implTypar.SetAttribs attribs))) - and checkTypeDef (aenv: TypeEquivEnv) (implTycon: Tycon) (sigTycon: Tycon) = + and checkTypeDef (aenv: TypeEquivEnv) (infoReader: InfoReader) (implTycon: Tycon) (sigTycon: Tycon) = let m = implTycon.Range // Propagate defn location information from implementation to signature . @@ -172,7 +175,7 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = false else - checkExnInfo (fun f -> ExnconstrNotContained(denv, implTycon, sigTycon, f)) aenv implTycon.ExceptionInfo sigTycon.ExceptionInfo && + checkExnInfo (fun f -> ExnconstrNotContained(denv, infoReader, implTycon, sigTycon, f)) aenv infoReader implTycon implTycon.ExceptionInfo sigTycon.ExceptionInfo && let implTypars = implTycon.Typars m let sigTypars = sigTycon.Typars m @@ -253,10 +256,10 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = else checkTypars m aenv implTypars sigTypars && - checkTypeRepr m aenv implTycon sigTycon.TypeReprInfo && + checkTypeRepr m aenv infoReader implTycon sigTycon.TypeReprInfo && checkTypeAbbrev m aenv implTycon sigTycon && checkAttribs aenv implTycon.Attribs sigTycon.Attribs (fun attribs -> implTycon.entity_attribs <- attribs) && - checkModuleOrNamespaceContents implTycon.Range aenv (mkLocalEntityRef implTycon) sigTycon.ModuleOrNamespaceType + checkModuleOrNamespaceContents implTycon.Range aenv infoReader (mkLocalEntityRef implTycon) sigTycon.ModuleOrNamespaceType and checkValInfo aenv err (implVal : Val) (sigVal : Val) = let id = implVal.Id @@ -300,13 +303,13 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = implVal.SetValReprInfo (Some (ValReprInfo (sigTyparNames, implArgInfos, implRetInfo))) res - and checkVal implModRef (aenv: TypeEquivEnv) (implVal: Val) (sigVal: Val) = + and checkVal implModRef (aenv: TypeEquivEnv) (infoReader: InfoReader) (implVal: Val) (sigVal: Val) = // Propagate defn location information from implementation to signature . sigVal.SetOtherRange (implVal.Range, true) implVal.SetOtherRange (sigVal.Range, false) - let mk_err denv f = ValueNotContained(denv, implModRef, implVal, sigVal, f) + let mk_err denv f = ValueNotContained(denv, infoReader, implModRef, implVal, sigVal, f) let err denv f = errorR(mk_err denv f); false let m = implVal.Range if implVal.IsMutable <> sigVal.IsMutable then (err denv FSComp.SR.ValueNotContainedMutabilityAttributesDiffer) @@ -330,7 +333,7 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = else checkAttribs aenv implVal.Attribs sigVal.Attribs (fun attribs -> implVal.SetAttribs attribs) - and checkExnInfo err aenv implTypeRepr sigTypeRepr = + and checkExnInfo err aenv (infoReader: InfoReader) (enclosingTycon: Tycon) implTypeRepr sigTypeRepr = match implTypeRepr, sigTypeRepr with | TExnAsmRepr _, TExnFresh _ -> (errorR (err FSComp.SR.ExceptionDefsNotCompatibleHiddenBySignature); false) @@ -342,23 +345,23 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = if not (tcrefAEquiv g aenv ecr1 ecr2) then (errorR (err FSComp.SR.ExceptionDefsNotCompatibleSignaturesDiffer); false) else true - | TExnFresh r1, TExnFresh r2-> checkRecordFieldsForExn g denv err aenv r1 r2 + | TExnFresh r1, TExnFresh r2-> checkRecordFieldsForExn g denv err aenv infoReader enclosingTycon r1 r2 | TExnNone, TExnNone -> true | _ -> (errorR (err FSComp.SR.ExceptionDefsNotCompatibleExceptionDeclarationsDiffer); false) - and checkUnionCase aenv implUnionCase sigUnionCase = - let err f = errorR(ConstrNotContained(denv, implUnionCase, sigUnionCase, f));false + and checkUnionCase aenv infoReader (enclosingTycon: Tycon) implUnionCase sigUnionCase = + let err f = errorR(ConstrNotContained(denv, infoReader, enclosingTycon, implUnionCase, sigUnionCase, f));false sigUnionCase.OtherRangeOpt <- Some (implUnionCase.Range, true) implUnionCase.OtherRangeOpt <- Some (sigUnionCase.Range, false) if implUnionCase.Id.idText <> sigUnionCase.Id.idText then err FSComp.SR.ModuleContainsConstructorButNamesDiffer elif implUnionCase.RecdFieldsArray.Length <> sigUnionCase.RecdFieldsArray.Length then err FSComp.SR.ModuleContainsConstructorButDataFieldsDiffer - elif not (Array.forall2 (checkField aenv) implUnionCase.RecdFieldsArray sigUnionCase.RecdFieldsArray) then err FSComp.SR.ModuleContainsConstructorButTypesOfFieldsDiffer + elif not (Array.forall2 (checkField aenv infoReader enclosingTycon) implUnionCase.RecdFieldsArray sigUnionCase.RecdFieldsArray) then err FSComp.SR.ModuleContainsConstructorButTypesOfFieldsDiffer elif isLessAccessible implUnionCase.Accessibility sigUnionCase.Accessibility then err FSComp.SR.ModuleContainsConstructorButAccessibilityDiffers else checkAttribs aenv implUnionCase.Attribs sigUnionCase.Attribs (fun attribs -> implUnionCase.Attribs <- attribs) - and checkField aenv implField sigField = - let err f = errorR(FieldNotContained(denv, implField, sigField, f)); false + and checkField aenv infoReader (enclosingTycon: Tycon) implField sigField = + let err f = errorR(FieldNotContained(denv, infoReader, enclosingTycon, implField, sigField, f)); false sigField.rfield_other_range <- Some (implField.Range, true) implField.rfield_other_range <- Some (sigField.Range, false) if implField.rfield_id.idText <> sigField.rfield_id.idText then err FSComp.SR.FieldNotContainedNamesDiffer @@ -406,67 +409,67 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = | _ -> false - and checkRecordFields m aenv (implTycon: Tycon) (implFields: TyconRecdFields) (sigFields: TyconRecdFields) = + and checkRecordFields m aenv infoReader (implTycon: Tycon) (implFields: TyconRecdFields) (sigFields: TyconRecdFields) = let implFields = implFields.TrueFieldsAsList let sigFields = sigFields.TrueFieldsAsList let m1 = implFields |> NameMap.ofKeyedList (fun rfld -> rfld.Name) let m2 = sigFields |> NameMap.ofKeyedList (fun rfld -> rfld.Name) NameMap.suball2 (fun fieldName _ -> errorR(Error (FSComp.SR.DefinitionsInSigAndImplNotCompatibleFieldRequiredButNotSpecified(implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName, fieldName), m)); false) - (checkField aenv) m1 m2 && + (checkField aenv infoReader implTycon) m1 m2 && NameMap.suball2 (fun fieldName _ -> errorR(Error (FSComp.SR.DefinitionsInSigAndImplNotCompatibleFieldWasPresent(implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName, fieldName), m)); false) - (fun x y -> checkField aenv y x) m2 m1 && + (fun x y -> checkField aenv infoReader implTycon y x) m2 m1 && // This check is required because constructors etc. are externally visible // and thus compiled representations do pick up dependencies on the field order - (if List.forall2 (checkField aenv) implFields sigFields + (if List.forall2 (checkField aenv infoReader implTycon) implFields sigFields then true else (errorR(Error (FSComp.SR.DefinitionsInSigAndImplNotCompatibleFieldOrderDiffer(implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName), m)); false)) - and checkRecordFieldsForExn _g _denv err aenv (implFields: TyconRecdFields) (sigFields: TyconRecdFields) = + and checkRecordFieldsForExn _g _denv err aenv (infoReader: InfoReader) (enclosingTycon: Tycon) (implFields: TyconRecdFields) (sigFields: TyconRecdFields) = let implFields = implFields.TrueFieldsAsList let sigFields = sigFields.TrueFieldsAsList let m1 = implFields |> NameMap.ofKeyedList (fun rfld -> rfld.Name) let m2 = sigFields |> NameMap.ofKeyedList (fun rfld -> rfld.Name) - NameMap.suball2 (fun s _ -> errorR(err (fun (x, y) -> FSComp.SR.ExceptionDefsNotCompatibleFieldInSigButNotImpl(s, x, y))); false) (checkField aenv) m1 m2 && - NameMap.suball2 (fun s _ -> errorR(err (fun (x, y) -> FSComp.SR.ExceptionDefsNotCompatibleFieldInImplButNotSig(s, x, y))); false) (fun x y -> checkField aenv y x) m2 m1 && + NameMap.suball2 (fun s _ -> errorR(err (fun (x, y) -> FSComp.SR.ExceptionDefsNotCompatibleFieldInSigButNotImpl(s, x, y))); false) (checkField aenv infoReader enclosingTycon) m1 m2 && + NameMap.suball2 (fun s _ -> errorR(err (fun (x, y) -> FSComp.SR.ExceptionDefsNotCompatibleFieldInImplButNotSig(s, x, y))); false) (fun x y -> checkField aenv infoReader enclosingTycon y x) m2 m1 && // This check is required because constructors etc. are externally visible // and thus compiled representations do pick up dependencies on the field order - (if List.forall2 (checkField aenv) implFields sigFields + (if List.forall2 (checkField aenv infoReader enclosingTycon) implFields sigFields then true else (errorR(err (FSComp.SR.ExceptionDefsNotCompatibleFieldOrderDiffers)); false)) - and checkVirtualSlots denv m (implTycon: Tycon) implAbstractSlots sigAbstractSlots = + and checkVirtualSlots denv infoReader m (implTycon: Tycon) implAbstractSlots sigAbstractSlots = let m1 = NameMap.ofKeyedList (fun (v: ValRef) -> v.DisplayName) implAbstractSlots let m2 = NameMap.ofKeyedList (fun (v: ValRef) -> v.DisplayName) sigAbstractSlots (m1, m2) ||> NameMap.suball2 (fun _s vref -> let kindText = implTycon.TypeOrMeasureKind.ToString() - let valText = NicePrint.stringValOrMember denv vref.Deref + let valText = NicePrint.stringValOrMember denv infoReader vref errorR(Error (FSComp.SR.DefinitionsInSigAndImplNotCompatibleAbstractMemberMissingInImpl(kindText, implTycon.DisplayName, valText), m)); false) (fun _x _y -> true) && (m2, m1) ||> NameMap.suball2 (fun _s vref -> let kindText = implTycon.TypeOrMeasureKind.ToString() - let valText = NicePrint.stringValOrMember denv vref.Deref + let valText = NicePrint.stringValOrMember denv infoReader vref errorR(Error (FSComp.SR.DefinitionsInSigAndImplNotCompatibleAbstractMemberMissingInSig(kindText, implTycon.DisplayName, valText), m)); false) (fun _x _y -> true) - and checkClassFields isStruct m aenv (implTycon: Tycon) (implFields: TyconRecdFields) (sigFields: TyconRecdFields) = + and checkClassFields isStruct m aenv infoReader (implTycon: Tycon) (implFields: TyconRecdFields) (sigFields: TyconRecdFields) = let implFields = implFields.TrueFieldsAsList let sigFields = sigFields.TrueFieldsAsList let m1 = implFields |> NameMap.ofKeyedList (fun rfld -> rfld.Name) let m2 = sigFields |> NameMap.ofKeyedList (fun rfld -> rfld.Name) NameMap.suball2 (fun fieldName _ -> errorR(Error (FSComp.SR.DefinitionsInSigAndImplNotCompatibleFieldRequiredButNotSpecified(implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName, fieldName), m)); false) - (checkField aenv) m1 m2 && + (checkField aenv infoReader implTycon) m1 m2 && (if isStruct then NameMap.suball2 (fun fieldName _ -> warning(Error (FSComp.SR.DefinitionsInSigAndImplNotCompatibleFieldIsInImplButNotSig(implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName, fieldName), m)); true) - (fun x y -> checkField aenv y x) m2 m1 + (fun x y -> checkField aenv infoReader implTycon y x) m2 m1 else true) - and checkTypeRepr m aenv (implTycon: Tycon) sigTypeRepr = + and checkTypeRepr m aenv (infoReader: InfoReader) (implTycon: Tycon) sigTypeRepr = let reportNiceError k s1 s2 = let aset = NameSet.ofList s1 let fset = NameSet.ofList s2 @@ -502,9 +505,9 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = if ucases1.Length <> ucases2.Length then let names (l: UnionCase list) = l |> List.map (fun c -> c.Id.idText) reportNiceError "union case" (names ucases1) (names ucases2) - else List.forall2 (checkUnionCase aenv) ucases1 ucases2 + else List.forall2 (checkUnionCase aenv infoReader implTycon) ucases1 ucases2 | (TRecdRepr implFields), (TRecdRepr sigFields) -> - checkRecordFields m aenv implTycon implFields sigFields + checkRecordFields m aenv infoReader implTycon implFields sigFields | (TFSharpObjectRepr r1), (TFSharpObjectRepr r2) -> if not (match r1.fsobjmodel_kind, r2.fsobjmodel_kind with | TTyconClass, TTyconClass -> true @@ -526,8 +529,8 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = (errorR (Error(FSComp.SR.DefinitionsInSigAndImplNotCompatibleTypeIsDifferentKind(implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName), m)); false) else let isStruct = (match r1.fsobjmodel_kind with TTyconStruct -> true | _ -> false) - checkClassFields isStruct m aenv implTycon r1.fsobjmodel_rfields r2.fsobjmodel_rfields && - checkVirtualSlots denv m implTycon r1.fsobjmodel_vslots r2.fsobjmodel_vslots + checkClassFields isStruct m aenv infoReader implTycon r1.fsobjmodel_rfields r2.fsobjmodel_rfields && + checkVirtualSlots denv infoReader m implTycon r1.fsobjmodel_vslots r2.fsobjmodel_vslots | (TAsmRepr tcr1), (TAsmRepr tcr2) -> if tcr1 <> tcr2 then (errorR (Error(FSComp.SR.DefinitionsInSigAndImplNotCompatibleILDiffer(implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName), m)); false) else true | (TMeasureableRepr ty1), (TMeasureableRepr ty2) -> @@ -560,7 +563,7 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = | Some _, None -> (errorR (Error (FSComp.SR.DefinitionsInSigAndImplNotCompatibleAbbreviationHiddenBySig(implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName), m)); false) | None, Some _ -> (errorR (Error (FSComp.SR.DefinitionsInSigAndImplNotCompatibleSigHasAbbreviation(implTycon.TypeOrMeasureKind.ToString(), implTycon.DisplayName), m)); false) - and checkModuleOrNamespaceContents m aenv (implModRef: ModuleOrNamespaceRef) (signModType: ModuleOrNamespaceType) = + and checkModuleOrNamespaceContents m aenv (infoReader: InfoReader) (implModRef: ModuleOrNamespaceRef) (signModType: ModuleOrNamespaceType) = let implModType = implModRef.ModuleOrNamespaceType (if implModType.ModuleOrNamespaceKind <> signModType.ModuleOrNamespaceKind then errorR(Error(FSComp.SR.typrelModuleNamespaceAttributesDifferInSigAndImpl(), m))) @@ -568,19 +571,19 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = (implModType.TypesByMangledName, signModType.TypesByMangledName) ||> NameMap.suball2 (fun s _fx -> errorR(RequiredButNotSpecified(denv, implModRef, "type", (fun os -> Printf.bprintf os "%s" s), m)); false) - (checkTypeDef aenv) && + (checkTypeDef aenv infoReader) && (implModType.ModulesAndNamespacesByDemangledName, signModType.ModulesAndNamespacesByDemangledName ) ||> NameMap.suball2 (fun s fx -> errorR(RequiredButNotSpecified(denv, implModRef, (if fx.IsModule then "module" else "namespace"), (fun os -> Printf.bprintf os "%s" s), m)); false) - (fun x1 x2 -> checkModuleOrNamespace aenv (mkLocalModRef x1) x2) && + (fun x1 x2 -> checkModuleOrNamespace aenv infoReader (mkLocalModRef x1) x2) && let sigValHadNoMatchingImplementation (fx: Val) (_closeActualVal: Val option) = errorR(RequiredButNotSpecified(denv, implModRef, "value", (fun os -> (* In the case of missing members show the full required enclosing type and signature *) if fx.IsMember then - NicePrint.outputQualifiedValOrMember denv os fx + NicePrint.outputQualifiedValOrMember denv infoReader os (mkLocalValRef fx) else Printf.bprintf os "%s" fx.DisplayName), m)) @@ -599,7 +602,7 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = | [], _ | _, [] -> failwith "unreachable" | [av], [fv] -> if valuesPartiallyMatch av fv then - checkVal implModRef aenv av fv + checkVal implModRef aenv infoReader av fv else sigValHadNoMatchingImplementation fv None false @@ -612,7 +615,7 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = | Some av -> Some(fv, av)) // Check the ones with matching linkage - let allPairsOk = matchingPairs |> List.map (fun (fv, av) -> checkVal implModRef aenv av fv) |> List.forall id + let allPairsOk = matchingPairs |> List.map (fun (fv, av) -> checkVal implModRef aenv infoReader av fv) |> List.forall id let someNotOk = matchingPairs.Length < fvs.Length // Report an error for those that don't. Try pairing up by enclosing-type/name if someNotOk then @@ -622,28 +625,28 @@ type Checker(g, amap, denv, remapInfo: SignatureRepackageInfo, checkingSig) = | None -> Choice1Of2 fv | Some av -> Choice2Of2(fv, av)) for (fv, av) in partialMatchingPairs do - checkVal implModRef aenv av fv |> ignore + checkVal implModRef aenv infoReader av fv |> ignore for fv in noMatches do sigValHadNoMatchingImplementation fv None allPairsOk && not someNotOk) - and checkModuleOrNamespace aenv implModRef sigModRef = + and checkModuleOrNamespace aenv (infoReader: InfoReader) implModRef sigModRef = // Propagate defn location information from implementation to signature . sigModRef.SetOtherRange (implModRef.Range, true) implModRef.Deref.SetOtherRange (sigModRef.Range, false) - checkModuleOrNamespaceContents implModRef.Range aenv implModRef sigModRef.ModuleOrNamespaceType && + checkModuleOrNamespaceContents implModRef.Range aenv infoReader implModRef sigModRef.ModuleOrNamespaceType && checkAttribs aenv implModRef.Attribs sigModRef.Attribs implModRef.Deref.SetAttribs - member __.CheckSignature aenv (implModRef: ModuleOrNamespaceRef) (signModType: ModuleOrNamespaceType) = - checkModuleOrNamespaceContents implModRef.Range aenv implModRef signModType + member _.CheckSignature aenv (infoReader: InfoReader) (implModRef: ModuleOrNamespaceRef) (signModType: ModuleOrNamespaceType) = + checkModuleOrNamespaceContents implModRef.Range aenv infoReader implModRef signModType - member __.CheckTypars m aenv (implTypars: Typars) (signTypars: Typars) = + member _.CheckTypars m aenv (implTypars: Typars) (signTypars: Typars) = checkTypars m aenv implTypars signTypars /// Check the names add up between a signature and its implementation. We check this first. -let rec CheckNamesOfModuleOrNamespaceContents denv (implModRef: ModuleOrNamespaceRef) (signModType: ModuleOrNamespaceType) = +let rec CheckNamesOfModuleOrNamespaceContents denv infoReader (implModRef: ModuleOrNamespaceRef) (signModType: ModuleOrNamespaceType) = let m = implModRef.Range let implModType = implModRef.ModuleOrNamespaceType NameMap.suball2 @@ -655,7 +658,7 @@ let rec CheckNamesOfModuleOrNamespaceContents denv (implModRef: ModuleOrNamespac (implModType.ModulesAndNamespacesByDemangledName, signModType.ModulesAndNamespacesByDemangledName ) ||> NameMap.suball2 (fun s fx -> errorR(RequiredButNotSpecified(denv, implModRef, (if fx.IsModule then "module" else "namespace"), (fun os -> Printf.bprintf os "%s" s), m)); false) - (fun x1 (x2: ModuleOrNamespace) -> CheckNamesOfModuleOrNamespace denv (mkLocalModRef x1) x2.ModuleOrNamespaceType) && + (fun x1 (x2: ModuleOrNamespace) -> CheckNamesOfModuleOrNamespace denv infoReader (mkLocalModRef x1) x2.ModuleOrNamespaceType) && (implModType.AllValsAndMembersByLogicalNameUncached, signModType.AllValsAndMembersByLogicalNameUncached) ||> NameMap.suball2 @@ -664,12 +667,12 @@ let rec CheckNamesOfModuleOrNamespaceContents denv (implModRef: ModuleOrNamespac errorR(RequiredButNotSpecified(denv, implModRef, "value", (fun os -> // In the case of missing members show the full required enclosing type and signature if Option.isSome fx.MemberInfo then - NicePrint.outputQualifiedValOrMember denv os fx + NicePrint.outputQualifiedValOrMember denv infoReader os (mkLocalValRef fx) else Printf.bprintf os "%s" fx.DisplayName), m)); false) (fun _ _ -> true) -and CheckNamesOfModuleOrNamespace denv (implModRef: ModuleOrNamespaceRef) signModType = - CheckNamesOfModuleOrNamespaceContents denv implModRef signModType +and CheckNamesOfModuleOrNamespace denv (infoReader: InfoReader) (implModRef: ModuleOrNamespaceRef) signModType = + CheckNamesOfModuleOrNamespaceContents denv infoReader implModRef signModType diff --git a/src/fsharp/SignatureConformance.fsi b/src/fsharp/SignatureConformance.fsi index e12dceae5fd..673e6037d77 100644 --- a/src/fsharp/SignatureConformance.fsi +++ b/src/fsharp/SignatureConformance.fsi @@ -7,19 +7,20 @@ module internal FSharp.Compiler.SignatureConformance open System.Text open FSharp.Compiler -open FSharp.Compiler.Range +open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.InfoReader exception RequiredButNotSpecified of DisplayEnv * ModuleOrNamespaceRef * string * (StringBuilder -> unit) * range -exception ValueNotContained of DisplayEnv * ModuleOrNamespaceRef * Val * Val * (string * string * string -> string) +exception ValueNotContained of DisplayEnv * InfoReader * ModuleOrNamespaceRef * Val * Val * (string * string * string -> string) -exception ConstrNotContained of DisplayEnv * UnionCase * UnionCase * (string * string -> string) +exception ConstrNotContained of DisplayEnv * InfoReader * Tycon * UnionCase * UnionCase * (string * string -> string) -exception ExnconstrNotContained of DisplayEnv * Tycon * Tycon * (string * string -> string) +exception ExnconstrNotContained of DisplayEnv * InfoReader * Tycon * Tycon * (string * string -> string) -exception FieldNotContained of DisplayEnv * RecdField * RecdField * (string * string -> string) +exception FieldNotContained of DisplayEnv * InfoReader * Tycon * RecdField * RecdField * (string * string -> string) exception InterfaceNotRevealed of DisplayEnv * TType * range @@ -27,11 +28,11 @@ type Checker = new: g:TcGlobals.TcGlobals * amap:Import.ImportMap * denv:DisplayEnv * remapInfo:SignatureRepackageInfo * checkingSig:bool -> Checker - member CheckSignature: aenv:TypeEquivEnv -> implModRef:ModuleOrNamespaceRef -> signModType:ModuleOrNamespaceType -> bool + member CheckSignature: aenv:TypeEquivEnv -> infoReader:InfoReader -> implModRef:ModuleOrNamespaceRef -> signModType:ModuleOrNamespaceType -> bool member CheckTypars: m:range -> aenv:TypeEquivEnv -> implTypars:Typars -> signTypars:Typars -> bool /// Check the names add up between a signature and its implementation. We check this first. -val CheckNamesOfModuleOrNamespaceContents: denv:DisplayEnv -> implModRef:ModuleOrNamespaceRef -> signModType:ModuleOrNamespaceType -> bool +val CheckNamesOfModuleOrNamespaceContents: denv:DisplayEnv -> infoReader:InfoReader -> implModRef:ModuleOrNamespaceRef -> signModType:ModuleOrNamespaceType -> bool -val CheckNamesOfModuleOrNamespace: denv:DisplayEnv -> implModRef:ModuleOrNamespaceRef -> signModType:ModuleOrNamespaceType -> bool +val CheckNamesOfModuleOrNamespace: denv:DisplayEnv -> infoReader:InfoReader -> implModRef:ModuleOrNamespaceRef -> signModType:ModuleOrNamespaceType -> bool diff --git a/src/fsharp/SimulatedMSBuildReferenceResolver.fs b/src/fsharp/SimulatedMSBuildReferenceResolver.fs index 5d80c658d0d..c7fd441ded2 100644 --- a/src/fsharp/SimulatedMSBuildReferenceResolver.fs +++ b/src/fsharp/SimulatedMSBuildReferenceResolver.fs @@ -1,14 +1,14 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.SimulatedMSBuildReferenceResolver +module internal FSharp.Compiler.CodeAnalysis.SimulatedMSBuildReferenceResolver open System open System.IO open System.Reflection open Microsoft.Win32 open Microsoft.Build.Utilities -open FSharp.Compiler.ReferenceResolver -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Library +open FSharp.Compiler.IO // ATTENTION!: the following code needs to be updated every time we are switching to the new MSBuild version because new .NET framework version was released // 1. List of frameworks @@ -66,13 +66,13 @@ let private SimulatedMSBuildResolver = | Net48 -> Some TargetDotNetFrameworkVersion.Version48 | _ -> assert false; None match v with - | Some v -> + | Some v -> match ToolLocationHelper.GetPathToDotNetFramework v with | null -> [] | x -> [x] | _ -> [] - let GetPathToDotNetFrameworkReferenceAssemblies(version) = + let GetPathToDotNetFrameworkReferenceAssemblies(version) = #if NETSTANDARD ignore version let r : string list = [] @@ -83,16 +83,16 @@ let private SimulatedMSBuildResolver = | x -> [x] #endif - { new Resolver with + { new ILegacyReferenceResolver with member x.HighestInstalledNetFrameworkVersion() = let root = x.DotNetFrameworkReferenceAssembliesRootDirectory - let fwOpt = SupportedDesktopFrameworkVersions |> Seq.tryFind(fun fw -> Directory.Exists(Path.Combine(root, fw) )) + let fwOpt = SupportedDesktopFrameworkVersions |> Seq.tryFind(fun fw -> FileSystem.DirectoryExistsShim(Path.Combine(root, fw) )) match fwOpt with | Some fw -> fw | None -> "v4.5" - member __.DotNetFrameworkReferenceAssembliesRootDirectory = + member _.DotNetFrameworkReferenceAssembliesRootDirectory = if System.Environment.OSVersion.Platform = System.PlatformID.Win32NT then let PF = match Environment.GetEnvironmentVariable("ProgramFiles(x86)") with @@ -102,7 +102,7 @@ let private SimulatedMSBuildResolver = else "" - member __.Resolve(resolutionEnvironment, references, targetFrameworkVersion, targetFrameworkDirectories, targetProcessorArchitecture, + member _.Resolve(resolutionEnvironment, references, targetFrameworkVersion, targetFrameworkDirectories, targetProcessorArchitecture, fsharpCoreDir, explicitIncludeDirs, implicitIncludeDir, logMessage, logWarningOrError) = #if !FX_NO_WIN_REGISTRY @@ -158,8 +158,8 @@ let private SimulatedMSBuildResolver = results.Add { itemSpec = path; prepareToolTip = snd; baggage=baggage } try - if not found && Path.IsPathRooted r then - if FileSystem.SafeExists r then + if not found && FileSystem.IsPathRootedShim r then + if FileSystem.FileExistsShim r then success r with e -> logWarningOrError false "SR001" (e.ToString()) @@ -174,7 +174,7 @@ let private SimulatedMSBuildResolver = | s -> s PF + @"\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\" + n.Version.ToString() let trialPath = Path.Combine(fscoreDir0, n.Name + ".dll") - if FileSystem.SafeExists trialPath then + if FileSystem.FileExistsShim trialPath then success trialPath with e -> logWarningOrError false "SR001" (e.ToString()) @@ -188,7 +188,7 @@ let private SimulatedMSBuildResolver = try if not found then let trialPath = Path.Combine(searchPath, qual) - if FileSystem.SafeExists trialPath then + if FileSystem.FileExistsShim trialPath then success trialPath with e -> logWarningOrError false "SR001" (e.ToString()) @@ -201,13 +201,13 @@ let private SimulatedMSBuildResolver = match n.Version, n.GetPublicKeyToken() with | null, _ | _, null -> let options = - [ if Directory.Exists gac then - for gacDir in Directory.EnumerateDirectories gac do + [ if FileSystem.DirectoryExistsShim gac then + for gacDir in FileSystem.EnumerateDirectoriesShim gac do let assemblyDir = Path.Combine(gacDir, n.Name) - if Directory.Exists assemblyDir then - for tdir in Directory.EnumerateDirectories assemblyDir do + if FileSystem.DirectoryExistsShim assemblyDir then + for tdir in FileSystem.EnumerateDirectoriesShim assemblyDir do let trialPath = Path.Combine(tdir, qual) - if FileSystem.SafeExists trialPath then + if FileSystem.FileExistsShim trialPath then yield trialPath ] //printfn "sorting GAC paths: %A" options options @@ -216,25 +216,26 @@ let private SimulatedMSBuildResolver = |> function None -> () | Some p -> success p | v, tok -> - if Directory.Exists gac then + if FileSystem.DirectoryExistsShim gac then for gacDir in Directory.EnumerateDirectories gac do //printfn "searching GAC directory: %s" gacDir let assemblyDir = Path.Combine(gacDir, n.Name) - if Directory.Exists assemblyDir then + if FileSystem.DirectoryExistsShim assemblyDir then //printfn "searching GAC directory: %s" assemblyDir let tokText = String.concat "" [| for b in tok -> sprintf "%02x" b |] let verDir = Path.Combine(assemblyDir, "v4.0_"+v.ToString()+"__"+tokText) //printfn "searching GAC directory: %s" verDir - if Directory.Exists verDir then + if FileSystem.DirectoryExistsShim verDir then let trialPath = Path.Combine(verDir, qual) //printfn "searching GAC: %s" trialPath - if FileSystem.SafeExists trialPath then + if FileSystem.FileExistsShim trialPath then success trialPath with e -> logWarningOrError false "SR001" (e.ToString()) results.ToArray() } + |> LegacyReferenceResolver let internal getResolver () = SimulatedMSBuildResolver diff --git a/src/fsharp/SimulatedMSBuildReferenceResolver.fsi b/src/fsharp/SimulatedMSBuildReferenceResolver.fsi index e96efa0849a..0221673344c 100644 --- a/src/fsharp/SimulatedMSBuildReferenceResolver.fsi +++ b/src/fsharp/SimulatedMSBuildReferenceResolver.fsi @@ -1,8 +1,7 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.SimulatedMSBuildReferenceResolver +[] +module internal FSharp.Compiler.CodeAnalysis.SimulatedMSBuildReferenceResolver -open FSharp.Compiler.ReferenceResolver - -val getResolver: unit -> Resolver +val getResolver: unit -> LegacyReferenceResolver diff --git a/src/fsharp/StaticLinking.fs b/src/fsharp/StaticLinking.fs index c97faa8c787..01d04f49936 100644 --- a/src/fsharp/StaticLinking.fs +++ b/src/fsharp/StaticLinking.fs @@ -4,22 +4,23 @@ module internal FSharp.Compiler.StaticLinking open System - +open Internal.Utilities +open Internal.Utilities.Collections +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.ILBinaryReader open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerImports open FSharp.Compiler.CompilerOptions open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Lib +open FSharp.Compiler.IO open FSharp.Compiler.OptimizeInputs -open FSharp.Compiler.Range +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics -open Internal.Utilities -open Internal.Utilities.Collections #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping @@ -37,7 +38,7 @@ type TypeForwarding (tcImports: TcImports) = // If we can't type forward using exact assembly match, we need to rely on the loader (Policy, Configuration or the coreclr load heuristics), so use try simple name let ccuThunksSimpleName = tcImports.GetCcusInDeclOrder() - |> List.choose (fun ccuThunk -> + |> List.choose (fun ccuThunk -> if String.IsNullOrEmpty(ccuThunk.AssemblyName) then None else @@ -88,98 +89,98 @@ type TypeForwarding (tcImports: TcImports) = if scoref1 === scoref2 then tref else ILTypeRef.Create (scoref2, tref.Enclosing, tref.Name) - member __.TypeForwardILTypeRef tref = typeForwardILTypeRef tref + member _.TypeForwardILTypeRef tref = typeForwardILTypeRef tref let debugStaticLinking = condition "FSHARP_DEBUG_STATIC_LINKING" -let StaticLinkILModules (tcConfig:TcConfig, ilGlobals, tcImports, ilxMainModule, dependentILModules: (CcuThunk option * ILModuleDef) list) = - if isNil dependentILModules then - ilxMainModule, (fun x -> x) +let StaticLinkILModules (tcConfig:TcConfig, ilGlobals, tcImports, ilxMainModule, dependentILModules: (CcuThunk option * ILModuleDef) list) = + if isNil dependentILModules then + ilxMainModule, (fun x -> x) else let typeForwarding = new TypeForwarding(tcImports) - // 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)) - | None -> () - + // 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)) + | None -> () + // Check we're not static linking a .EXE - if dependentILModules |> List.exists (fun (_, x) -> not x.IsDLL) then + if dependentILModules |> List.exists (fun (_, x) -> not x.IsDLL) then error(Error(FSComp.SR.fscStaticLinkingNoEXE(), rangeStartup)) // Check we're not static linking something that is not pure IL - if dependentILModules |> List.exists (fun (_, x) -> not x.IsILOnly) then + if dependentILModules |> List.exists (fun (_, x) -> not x.IsILOnly) then error(Error(FSComp.SR.fscStaticLinkingNoMixedDLL(), rangeStartup)) // The set of short names for the all dependent assemblies - let assems = + let assems = set [ for (_, m) in dependentILModules do - match m.Manifest with - | Some m -> yield m.Name + match m.Manifest with + | Some m -> yield m.Name | _ -> () ] - - // A rewriter which rewrites scope references to things in dependent assemblies to be local references - let rewriteExternalRefsToLocalRefs x = + + // A rewriter which rewrites scope references to things in dependent assemblies to be local references + let rewriteExternalRefsToLocalRefs x = if assems.Contains (getNameOfScopeRef x) then ILScopeRef.Local else x - let savedManifestAttrs = - [ for (_, depILModule) in dependentILModules do - match depILModule.Manifest with - | Some m -> + let savedManifestAttrs = + [ for (_, depILModule) in dependentILModules do + match depILModule.Manifest with + | Some m -> for ca in m.CustomAttrs.AsArray do - if ca.Method.MethodRef.DeclaringTypeRef.FullName = typeof.FullName then + if ca.Method.MethodRef.DeclaringTypeRef.FullName = typeof.FullName then yield ca | _ -> () ] - let savedResources = + let savedResources = let allResources = [ for (ccu, m) in dependentILModules do for r in m.Resources.AsList do yield (ccu, r) ] // Don't save interface, optimization or resource definitions for provider-generated assemblies. // These are "fake". - let isProvided (ccu: CcuThunk option) = + let isProvided (ccu: CcuThunk option) = #if !NO_EXTENSIONTYPING - match ccu with - | Some c -> c.IsProviderGenerated + match ccu with + | Some c -> c.IsProviderGenerated | None -> false #else ignore ccu false #endif - // Save only the interface/optimization attributes of generated data + // Save only the interface/optimization attributes of generated data let intfDataResources, others = allResources |> List.partition (snd >> IsSignatureDataResource) - let intfDataResources = - [ for (ccu, r) in intfDataResources do - if tcConfig.GenerateSignatureData && not (isProvided ccu) then + let intfDataResources = + [ for (ccu, r) in intfDataResources do + if tcConfig.GenerateSignatureData && not (isProvided ccu) then yield r ] let optDataResources, others = others |> List.partition (snd >> IsOptimizationDataResource) - let optDataResources = - [ for (ccu, r) in optDataResources do - if tcConfig.GenerateOptimizationData && not (isProvided ccu) then + let optDataResources = + [ for (ccu, r) in optDataResources do + if tcConfig.GenerateOptimizationData && not (isProvided ccu) then yield r ] - let otherResources = others |> List.map snd + let otherResources = others |> List.map snd let result = intfDataResources@optDataResources@otherResources result let moduls = ilxMainModule :: (List.map snd dependentILModules) - let savedNativeResources = - [ //yield! ilxMainModule.NativeResources - for m in moduls do + let savedNativeResources = + [ //yield! ilxMainModule.NativeResources + for m in moduls do yield! m.NativeResources ] - let topTypeDefs, normalTypeDefs = - moduls - |> List.map (fun m -> m.TypeDefs.AsList |> List.partition (fun td -> isTypeNameForGlobalFunctions td.Name)) + let topTypeDefs, normalTypeDefs = + moduls + |> List.map (fun m -> m.TypeDefs.AsList |> List.partition (fun td -> isTypeNameForGlobalFunctions td.Name)) |> List.unzip - let topTypeDef = + let topTypeDef = let topTypeDefs = List.concat topTypeDefs mkILTypeDefForGlobalFunctions ilGlobals - (mkILMethods (topTypeDefs |> List.collect (fun td -> td.Methods.AsList)), + (mkILMethods (topTypeDefs |> List.collect (fun td -> td.Methods.AsList)), mkILFields (topTypeDefs |> List.collect (fun td -> td.Fields.AsList))) let ilxMainModule = @@ -190,141 +191,141 @@ let StaticLinkILModules (tcConfig:TcConfig, ilGlobals, tcImports, ilxMainModule, TypeDefs = mkILTypeDefs (topTypeDef :: List.concat normalTypeDefs) Resources = mkILResources (savedResources @ ilxMainModule.Resources.AsList) NativeResources = savedNativeResources } - Morphs.morphILTypeRefsInILModuleMemoized ilGlobals typeForwarding.TypeForwardILTypeRef main + Morphs.morphILTypeRefsInILModuleMemoized typeForwarding.TypeForwardILTypeRef main ilxMainModule, rewriteExternalRefsToLocalRefs [] -type Node = +type Node = { name: string - data: ILModuleDef + data: ILModuleDef ccu: option refs: ILReferences - mutable edges: list + mutable edges: list mutable visited: bool } // Find all IL modules that are to be statically linked given the static linking roots. -let FindDependentILModulesForStaticLinking (ctok, tcConfig: TcConfig, tcImports: TcImports, ilGlobals: ILGlobals, ilxMainModule) = - if not tcConfig.standalone && tcConfig.extraStaticLinkRoots.IsEmpty then +let FindDependentILModulesForStaticLinking (ctok, tcConfig: TcConfig, tcImports: TcImports, ilGlobals: ILGlobals, ilxMainModule) = + if not tcConfig.standalone && tcConfig.extraStaticLinkRoots.IsEmpty then [] else - // Recursively find all referenced modules and add them to a module graph + // Recursively find all referenced modules and add them to a module graph let depModuleTable = HashMultiMap(0, HashIdentity.Structural) let dummyEntry nm = - { refs = IL.emptyILRefs + { refs = IL.emptyILRefs name=nm ccu=None data=ilxMainModule // any old module - edges = [] + edges = [] visited = true } let assumedIndependentSet = set [ "mscorlib"; "System"; "System.Core"; "System.Xml"; "Microsoft.Build.Framework"; "Microsoft.Build.Utilities"; "netstandard" ] - begin + begin let mutable remaining = (computeILRefs ilGlobals ilxMainModule).AssemblyReferences while not (isNil remaining) do let ilAssemRef = List.head remaining remaining <- List.tail remaining - if assumedIndependentSet.Contains ilAssemRef.Name || (ilAssemRef.PublicKey = Some ecmaPublicKey) then + if assumedIndependentSet.Contains ilAssemRef.Name || (ilAssemRef.PublicKey = Some ecmaPublicKey) then depModuleTable.[ilAssemRef.Name] <- dummyEntry ilAssemRef.Name else if not (depModuleTable.ContainsKey ilAssemRef.Name) then - match tcImports.TryFindDllInfo(ctok, Range.rangeStartup, ilAssemRef.Name, lookupOnly=false) with + match tcImports.TryFindDllInfo(ctok, Range.rangeStartup, ilAssemRef.Name, lookupOnly=false) with | Some dllInfo -> - let ccu = - match tcImports.FindCcuFromAssemblyRef (ctok, Range.rangeStartup, ilAssemRef) with + let ccu = + match tcImports.FindCcuFromAssemblyRef (ctok, Range.rangeStartup, ilAssemRef) with | ResolvedCcu ccu -> Some ccu | UnresolvedCcu(_ccuName) -> None let fileName = dllInfo.FileName - let modul = - let pdbDirPathOption = - // We open the pdb file if one exists parallel to the binary we - // are reading, so that --standalone will preserve debug information. - if tcConfig.openDebugInformationForLaterStaticLinking then - let pdbDir = (try Filename.directoryName fileName with _ -> ".") - let pdbFile = (try Filename.chopExtension fileName with _ -> fileName)+".pdb" - if FileSystem.SafeExists pdbFile then + let modul = + let pdbDirPathOption = + // We open the pdb file if one exists parallel to the binary we + // are reading, so that --standalone will preserve debug information. + if tcConfig.openDebugInformationForLaterStaticLinking then + let pdbDir = (try FileSystem.GetDirectoryNameShim fileName with _ -> ".") + let pdbFile = (try FileSystemUtils.chopExtension fileName with _ -> fileName)+".pdb" + if FileSystem.FileExistsShim pdbFile then Some pdbDir - else - None - else + else + None + else None - let opts : ILReaderOptions = + let opts : ILReaderOptions = { metadataOnly = MetadataOnlyFlag.No // turn this off here as we need the actual IL code reduceMemoryUsage = tcConfig.reduceMemoryUsage pdbDirPath = pdbDirPathOption - tryGetMetadataSnapshot = (fun _ -> None) } + tryGetMetadataSnapshot = (fun _ -> None) } let reader = ILBinaryReader.OpenILModuleReader dllInfo.FileName opts reader.ILModuleDef - let refs = - if ilAssemRef.Name = GetFSharpCoreLibraryName() then - IL.emptyILRefs - elif not modul.IsILOnly then + let refs = + if ilAssemRef.Name = GetFSharpCoreLibraryName() then + IL.emptyILRefs + elif not modul.IsILOnly then warning(Error(FSComp.SR.fscIgnoringMixedWhenLinking ilAssemRef.Name, rangeStartup)) - IL.emptyILRefs + IL.emptyILRefs else - { AssemblyReferences = dllInfo.ILAssemblyRefs + { AssemblyReferences = dllInfo.ILAssemblyRefs ModuleReferences = [] } - depModuleTable.[ilAssemRef.Name] <- + depModuleTable.[ilAssemRef.Name] <- { refs=refs name=ilAssemRef.Name ccu=ccu - data=modul - edges = [] + data=modul + edges = [] visited = false } // Push the new work items remaining <- refs.AssemblyReferences @ remaining - | None -> - warning(Error(FSComp.SR.fscAssumeStaticLinkContainsNoDependencies(ilAssemRef.Name), rangeStartup)) + | None -> + warning(Error(FSComp.SR.fscAssumeStaticLinkContainsNoDependencies(ilAssemRef.Name), rangeStartup)) depModuleTable.[ilAssemRef.Name] <- dummyEntry ilAssemRef.Name done end ReportTime tcConfig "Find dependencies" - // Add edges from modules to the modules that depend on them - for (KeyValue(_, n)) in depModuleTable do + // Add edges from modules to the modules that depend on them + for (KeyValue(_, n)) in depModuleTable do for aref in n.refs.AssemblyReferences do - let n2 = depModuleTable.[aref.Name] + let n2 = depModuleTable.[aref.Name] n2.edges <- n :: n2.edges - + // Find everything that depends on FSharp.Core - let roots = - [ if tcConfig.standalone && depModuleTable.ContainsKey (GetFSharpCoreLibraryName()) then + let roots = + [ if tcConfig.standalone && depModuleTable.ContainsKey (GetFSharpCoreLibraryName()) then yield depModuleTable.[GetFSharpCoreLibraryName()] for n in tcConfig.extraStaticLinkRoots do - match depModuleTable.TryFind n with + 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 mutable remaining = roots [ while not (isNil remaining) do let n = List.head remaining remaining <- List.tail remaining - if not n.visited then + if not n.visited then n.visited <- true remaining <- n.edges @ remaining yield (n.ccu, n.data) ] // Add all provider-generated assemblies into the static linking set -let FindProviderGeneratedILModules (ctok, tcImports: TcImports, providerGeneratedAssemblies: (ImportedBinary * _) list) = - [ for (importedBinary, provAssemStaticLinkInfo) in providerGeneratedAssemblies do +let FindProviderGeneratedILModules (ctok, tcImports: TcImports, providerGeneratedAssemblies: (ImportedBinary * _) list) = + [ for (importedBinary, provAssemStaticLinkInfo) in providerGeneratedAssemblies do let ilAssemRef = match importedBinary.ILScopeRef with | ILScopeRef.Assembly aref -> aref | _ -> failwith "Invalid ILScopeRef, expected ILScopeRef.Assembly" if debugStaticLinking then printfn "adding provider-generated assembly '%s' into static linking set" ilAssemRef.Name - match tcImports.TryFindDllInfo(ctok, Range.rangeStartup, ilAssemRef.Name, lookupOnly=false) with + match tcImports.TryFindDllInfo(ctok, Range.rangeStartup, ilAssemRef.Name, lookupOnly=false) with | Some dllInfo -> - let ccu = - match tcImports.FindCcuFromAssemblyRef (ctok, Range.rangeStartup, ilAssemRef) with + let ccu = + match tcImports.FindCcuFromAssemblyRef (ctok, Range.rangeStartup, ilAssemRef) with | ResolvedCcu ccu -> Some ccu | UnresolvedCcu(_ccuName) -> None @@ -335,25 +336,25 @@ let FindProviderGeneratedILModules (ctok, tcImports: TcImports, providerGenerate // Compute a static linker. This only captures tcImports (a large data structure) if // static linking is enabled. Normally this is not the case, which lets us collect tcImports // prior to this point. -let StaticLink (ctok, tcConfig: TcConfig, tcImports: TcImports, ilGlobals: ILGlobals) = +let StaticLink (ctok, tcConfig: TcConfig, tcImports: TcImports, ilGlobals: ILGlobals) = #if !NO_EXTENSIONTYPING let providerGeneratedAssemblies = [ // Add all EST-generated assemblies into the static linking set for KeyValue(_, importedBinary: ImportedBinary) in tcImports.DllTable do - if importedBinary.IsProviderGenerated then - match importedBinary.ProviderGeneratedStaticLinkMap with + if importedBinary.IsProviderGenerated then + match importedBinary.ProviderGeneratedStaticLinkMap with | None -> () | Some provAssemStaticLinkInfo -> yield (importedBinary, provAssemStaticLinkInfo) ] #endif - if not tcConfig.standalone && tcConfig.extraStaticLinkRoots.IsEmpty + if not tcConfig.standalone && tcConfig.extraStaticLinkRoots.IsEmpty #if !NO_EXTENSIONTYPING - && providerGeneratedAssemblies.IsEmpty + && providerGeneratedAssemblies.IsEmpty #endif - then + then (fun ilxMainModule -> ilxMainModule) - else + else (fun ilxMainModule -> ReportTime tcConfig "Find assembly references" @@ -363,66 +364,66 @@ let StaticLink (ctok, tcConfig: TcConfig, tcImports: TcImports, ilGlobals: ILGlo #if !NO_EXTENSIONTYPING Morphs.enableMorphCustomAttributeData() - let providerGeneratedILModules = FindProviderGeneratedILModules (ctok, tcImports, providerGeneratedAssemblies) + let providerGeneratedILModules = FindProviderGeneratedILModules (ctok, tcImports, providerGeneratedAssemblies) // Transform the ILTypeRefs references in the IL of all provider-generated assemblies so that the references // are now local. - let providerGeneratedILModules = - - providerGeneratedILModules |> List.map (fun ((ccu, ilOrigScopeRef, ilModule), (_, localProvAssemStaticLinkInfo)) -> - let ilAssemStaticLinkMap = - dict [ for (_, (_, provAssemStaticLinkInfo)) in providerGeneratedILModules do - for KeyValue(k, v) in provAssemStaticLinkInfo.ILTypeMap do + let providerGeneratedILModules = + + providerGeneratedILModules |> List.map (fun ((ccu, ilOrigScopeRef, ilModule), (_, localProvAssemStaticLinkInfo)) -> + let ilAssemStaticLinkMap = + dict [ for (_, (_, provAssemStaticLinkInfo)) in providerGeneratedILModules do + for KeyValue(k, v) in provAssemStaticLinkInfo.ILTypeMap do yield (k, v) for KeyValue(k, v) in localProvAssemStaticLinkInfo.ILTypeMap do yield (ILTypeRef.Create(ILScopeRef.Local, k.Enclosing, k.Name), v) ] - let ilModule = - ilModule |> Morphs.morphILTypeRefsInILModuleMemoized ilGlobals (fun tref -> - if debugStaticLinking then printfn "deciding whether to rewrite type ref %A" tref.QualifiedName + let ilModule = + ilModule |> Morphs.morphILTypeRefsInILModuleMemoized (fun tref -> + if debugStaticLinking then printfn "deciding whether to rewrite type ref %A" tref.QualifiedName let ok, v = ilAssemStaticLinkMap.TryGetValue tref - if ok then + if ok then if debugStaticLinking then printfn "rewriting type ref %A to %A" tref.QualifiedName v.QualifiedName v - else + else tref) (ccu, ilOrigScopeRef, ilModule)) // Relocate provider generated type definitions into the expected shape for the [] declarations in an assembly - let providerGeneratedILModules, ilxMainModule = - // Build a dictionary of all remapped IL type defs - let ilOrigTyRefsForProviderGeneratedTypesToRelocate = - let rec walk acc (ProviderGeneratedType(ilOrigTyRef, _, xs) as node) = List.fold walk ((ilOrigTyRef, node) :: acc) xs + let providerGeneratedILModules, ilxMainModule = + // Build a dictionary of all remapped IL type defs + let ilOrigTyRefsForProviderGeneratedTypesToRelocate = + let rec walk acc (ProviderGeneratedType(ilOrigTyRef, _, xs) as node) = List.fold walk ((ilOrigTyRef, node) :: acc) xs dict (Seq.fold walk [] tcImports.ProviderGeneratedTypeRoots) // Build a dictionary of all IL type defs, mapping ilOrigTyRef --> ilTypeDef - let allTypeDefsInProviderGeneratedAssemblies = - let rec loop ilOrigTyRef (ilTypeDef: ILTypeDef) = - seq { yield (ilOrigTyRef, ilTypeDef) - for ntdef in ilTypeDef.NestedTypes do + let allTypeDefsInProviderGeneratedAssemblies = + let rec loop ilOrigTyRef (ilTypeDef: ILTypeDef) = + seq { yield (ilOrigTyRef, ilTypeDef) + for ntdef in ilTypeDef.NestedTypes do yield! loop (mkILTyRefInTyRef (ilOrigTyRef, ntdef.Name)) ntdef } - dict [ - for (_ccu, ilOrigScopeRef, ilModule) in providerGeneratedILModules do - for td in ilModule.TypeDefs do + dict [ + for (_ccu, ilOrigScopeRef, ilModule) in providerGeneratedILModules do + for td in ilModule.TypeDefs do yield! loop (mkILTyRef (ilOrigScopeRef, td.Name)) td ] // Debugging output - if debugStaticLinking then + if debugStaticLinking then for (ProviderGeneratedType(ilOrigTyRef, _, _)) in tcImports.ProviderGeneratedTypeRoots do printfn "Have [] root '%s'" ilOrigTyRef.QualifiedName - // Build the ILTypeDefs for generated types, starting with the roots - let generatedILTypeDefs = - let rec buildRelocatedGeneratedType (ProviderGeneratedType(ilOrigTyRef, ilTgtTyRef, ch)) = + // Build the ILTypeDefs for generated types, starting with the roots + let generatedILTypeDefs = + let rec buildRelocatedGeneratedType (ProviderGeneratedType(ilOrigTyRef, ilTgtTyRef, ch)) = let isNested = not (isNil ilTgtTyRef.Enclosing) match allTypeDefsInProviderGeneratedAssemblies.TryGetValue ilOrigTyRef with | true, ilOrigTypeDef -> if debugStaticLinking then printfn "Relocating %s to %s " ilOrigTyRef.QualifiedName ilTgtTyRef.QualifiedName - let ilOrigTypeDef = + let ilOrigTypeDef = if isNested then ilOrigTypeDef - .WithAccess(match ilOrigTypeDef.Access with + .WithAccess(match ilOrigTypeDef.Access with | ILTypeDefAccess.Public -> ILTypeDefAccess.Nested ILMemberAccess.Public | ILTypeDefAccess.Private -> ILTypeDefAccess.Nested ILMemberAccess.Private | _ -> ilOrigTypeDef.Access) @@ -431,59 +432,59 @@ let StaticLink (ctok, tcConfig: TcConfig, tcImports: TcImports, ilGlobals: ILGlo nestedTypes = mkILTypeDefs (List.map buildRelocatedGeneratedType ch)) | _ -> // If there is no matching IL type definition, then make a simple container class - if debugStaticLinking then - printfn "Generating simple class '%s' because we didn't find an original type '%s' in a provider generated assembly" + if debugStaticLinking then + printfn "Generating simple class '%s' because we didn't find an original type '%s' in a provider generated assembly" ilTgtTyRef.QualifiedName ilOrigTyRef.QualifiedName let access = (if isNested then ILTypeDefAccess.Nested ILMemberAccess.Public else ILTypeDefAccess.Public) let tdefs = mkILTypeDefs (List.map buildRelocatedGeneratedType ch) - mkILSimpleClass ilGlobals (ilTgtTyRef.Name, access, emptyILMethods, emptyILFields, tdefs, emptyILProperties, emptyILEvents, emptyILCustomAttrs, ILTypeInit.OnAny) + mkILSimpleClass ilGlobals (ilTgtTyRef.Name, access, emptyILMethods, emptyILFields, tdefs, emptyILProperties, emptyILEvents, emptyILCustomAttrs, ILTypeInit.OnAny) [ for (ProviderGeneratedType(_, ilTgtTyRef, _) as node) in tcImports.ProviderGeneratedTypeRoots do yield (ilTgtTyRef, buildRelocatedGeneratedType node) ] - + // Implant all the generated type definitions into the ilxMainModule (generating a new ilxMainModule) - let ilxMainModule = + let ilxMainModule = /// Split the list into left, middle and right parts at the first element satisfying 'p'. If no element matches return /// 'None' for the middle part. - let trySplitFind p xs = - let rec loop xs acc = - match xs with - | [] -> List.rev acc, None, [] + let trySplitFind p xs = + let rec loop xs acc = + match xs with + | [] -> List.rev acc, None, [] | h :: t -> if p h then List.rev acc, Some h, t else loop t (h :: acc) loop xs [] - /// Implant the (nested) type definition 'td' at path 'enc' in 'tdefs'. - let rec implantTypeDef isNested (tdefs: ILTypeDefs) (enc: string list) (td: ILTypeDef) = - match enc with + /// Implant the (nested) type definition 'td' at path 'enc' in 'tdefs'. + let rec implantTypeDef isNested (tdefs: ILTypeDefs) (enc: string list) (td: ILTypeDef) = + match enc with | [] -> addILTypeDef td tdefs - | h :: t -> + | h :: t -> let tdefs = tdefs.AsList - let (ltdefs, htd, rtdefs) = - match tdefs |> trySplitFind (fun td -> td.Name = h) with - | (ltdefs, None, rtdefs) -> + let (ltdefs, htd, rtdefs) = + match tdefs |> trySplitFind (fun td -> td.Name = h) with + | (ltdefs, None, rtdefs) -> let access = if isNested then ILTypeDefAccess.Nested ILMemberAccess.Public else ILTypeDefAccess.Public let fresh = mkILSimpleClass ilGlobals (h, access, emptyILMethods, emptyILFields, emptyILTypeDefs, emptyILProperties, emptyILEvents, emptyILCustomAttrs, ILTypeInit.OnAny) (ltdefs, fresh, rtdefs) - | (ltdefs, Some htd, rtdefs) -> + | (ltdefs, Some htd, rtdefs) -> (ltdefs, htd, rtdefs) let htd = htd.With(nestedTypes = implantTypeDef true htd.NestedTypes t td) mkILTypeDefs (ltdefs @ [htd] @ rtdefs) - let newTypeDefs = - (ilxMainModule.TypeDefs, generatedILTypeDefs) ||> List.fold (fun acc (ilTgtTyRef, td) -> - if debugStaticLinking then printfn "implanting '%s' at '%s'" td.Name ilTgtTyRef.QualifiedName - implantTypeDef false acc ilTgtTyRef.Enclosing td) - { ilxMainModule with TypeDefs = newTypeDefs } - + let newTypeDefs = + (ilxMainModule.TypeDefs, generatedILTypeDefs) ||> List.fold (fun acc (ilTgtTyRef, td) -> + if debugStaticLinking then printfn "implanting '%s' at '%s'" td.Name ilTgtTyRef.QualifiedName + implantTypeDef false acc ilTgtTyRef.Enclosing td) + { ilxMainModule with TypeDefs = newTypeDefs } + // Remove any ILTypeDefs from the provider generated modules if they have been relocated because of a [] declaration. - let providerGeneratedILModules = - providerGeneratedILModules |> List.map (fun (ccu, ilOrigScopeRef, ilModule) -> - let ilTypeDefsAfterRemovingRelocatedTypes = - let rec rw enc (tdefs: ILTypeDefs) = + let providerGeneratedILModules = + providerGeneratedILModules |> List.map (fun (ccu, ilOrigScopeRef, ilModule) -> + let ilTypeDefsAfterRemovingRelocatedTypes = + let rec rw enc (tdefs: ILTypeDefs) = mkILTypeDefs - [ for tdef in tdefs do + [ for tdef in tdefs do let ilOrigTyRef = mkILNestedTyRef (ilOrigScopeRef, enc, tdef.Name) if not (ilOrigTyRefsForProviderGeneratedTypesToRelocate.ContainsKey ilOrigTyRef) then if debugStaticLinking then printfn "Keep provided type %s in place because it wasn't relocated" ilOrigTyRef.QualifiedName @@ -492,25 +493,25 @@ let StaticLink (ctok, tcConfig: TcConfig, tcImports: TcImports, ilGlobals: ILGlo (ccu, { ilModule with TypeDefs = ilTypeDefsAfterRemovingRelocatedTypes })) providerGeneratedILModules, ilxMainModule - + Morphs.disableMorphCustomAttributeData() #else let providerGeneratedILModules = [] #endif - // Glue all this stuff into ilxMainModule - let ilxMainModule, rewriteExternalRefsToLocalRefs = + // Glue all this stuff into ilxMainModule + let ilxMainModule, rewriteExternalRefsToLocalRefs = StaticLinkILModules (tcConfig, ilGlobals, tcImports, ilxMainModule, dependentILModules @ providerGeneratedILModules) // Rewrite type and assembly references let ilxMainModule = let isMscorlib = ilGlobals.primaryAssemblyName = PrimaryAssembly.Mscorlib.Name - let validateTargetPlatform (scopeRef : ILScopeRef) = + let validateTargetPlatform (scopeRef : ILScopeRef) = let name = getNameOfScopeRef scopeRef if (not isMscorlib && name = PrimaryAssembly.Mscorlib.Name) then error (Error(FSComp.SR.fscStaticLinkingNoProfileMismatches(), rangeCmdArgs)) scopeRef let rewriteAssemblyRefsToMatchLibraries = NormalizeAssemblyRefs (ctok, ilGlobals, tcImports) - Morphs.morphILTypeRefsInILModuleMemoized ilGlobals (Morphs.morphILScopeRefsInILTypeRef (validateTargetPlatform >> rewriteExternalRefsToLocalRefs >> rewriteAssemblyRefsToMatchLibraries)) ilxMainModule + Morphs.morphILTypeRefsInILModuleMemoized (Morphs.morphILScopeRefsInILTypeRef (validateTargetPlatform >> rewriteExternalRefsToLocalRefs >> rewriteAssemblyRefsToMatchLibraries)) ilxMainModule ilxMainModule) diff --git a/src/fsharp/StaticLinking.fsi b/src/fsharp/StaticLinking.fsi index 1c9701e952d..d9f1c6b9a4e 100644 --- a/src/fsharp/StaticLinking.fsi +++ b/src/fsharp/StaticLinking.fsi @@ -3,8 +3,8 @@ /// Optional static linking of all DLLs that depend on the F# Library, plus other specified DLLs module internal FSharp.Compiler.StaticLinking +open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerImports diff --git a/src/fsharp/SyntaxTree.fs b/src/fsharp/SyntaxTree.fs index ac2574e4eaf..efec365b65d 100644 --- a/src/fsharp/SyntaxTree.fs +++ b/src/fsharp/SyntaxTree.fs @@ -1,213 +1,165 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module public rec FSharp.Compiler.SyntaxTree +namespace rec FSharp.Compiler.Syntax open System.Diagnostics +open Internal.Utilities.Library +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Xml -open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.Range -open FSharp.Compiler.XmlDoc - -/// Represents an identifier in F# code [] type Ident (text: string, range: range) = - member x.idText = text - member x.idRange = range - override x.ToString() = text + member _.idText = text + member _.idRange = range + override _.ToString() = text -/// Represents a long identifier e.g. 'A.B.C' type LongIdent = Ident list -/// Represents a long identifier with possible '.' at end. -/// -/// Typically dotms.Length = lid.Length-1, but they may be same if (incomplete) code ends in a dot, e.g. "Foo.Bar." -/// The dots mostly matter for parsing, and are typically ignored by the typechecker, but -/// if dotms.Length = lid.Length, then the parser must have reported an error, so the typechecker is allowed -/// more freedom about typechecking these expressions. -/// LongIdent can be empty list - it is used to denote that name of some AST element is absent (i.e. empty type name in inherit) type LongIdentWithDots = - | LongIdentWithDots of id: LongIdent * dotms: range list + | LongIdentWithDots of id: LongIdent * dotRanges: range list - /// Gets the syntax range of this construct member this.Range = match this with | LongIdentWithDots([], _) -> failwith "rangeOfLidwd" | LongIdentWithDots([id], []) -> id.idRange | LongIdentWithDots([id], [m]) -> unionRanges id.idRange m | LongIdentWithDots(h :: t, []) -> unionRanges h.idRange (List.last t).idRange - | LongIdentWithDots(h :: t, dotms) -> unionRanges h.idRange (List.last t).idRange |> unionRanges (List.last dotms) + | LongIdentWithDots(h :: t, dotRanges) -> unionRanges h.idRange (List.last t).idRange |> unionRanges (List.last dotRanges) - /// Get the long ident for this construct member this.Lid = match this with LongIdentWithDots(lid, _) -> lid - /// Indicates if the construct ends in '.' due to error recovery member this.ThereIsAnExtraDotAtTheEnd = match this with LongIdentWithDots(lid, dots) -> lid.Length = dots.Length - /// Gets the syntax range for part of this construct - member this.RangeSansAnyExtraDot = + member this.RangeWithoutAnyExtraDot = match this with | LongIdentWithDots([], _) -> failwith "rangeOfLidwd" | LongIdentWithDots([id], _) -> id.idRange - | LongIdentWithDots(h :: t, dotms) -> - let nonExtraDots = if dotms.Length = t.Length then dotms else List.truncate t.Length dotms + | LongIdentWithDots(h :: t, dotRanges) -> + let nonExtraDots = if dotRanges.Length = t.Length then dotRanges else List.truncate t.Length dotRanges unionRanges h.idRange (List.last t).idRange |> unionRanges (List.last nonExtraDots) -/// Indicates if the construct arises from error recovery [] type ParserDetail = - /// The construct arises normally | Ok - /// The construct arises from error recovery | ErrorRecovery -/// Represents whether a type parameter has a static requirement or not (^T or 'T) +[] type TyparStaticReq = - /// The construct is a normal type inference variable - | NoStaticReq + | None - /// The construct is a statically inferred type inference variable '^T' - | HeadTypeStaticReq + | HeadType -/// Represents a syntactic type parameter [] type SynTypar = - | Typar of ident: Ident * staticReq: TyparStaticReq * isCompGen: bool + | SynTypar of ident: Ident * staticReq: TyparStaticReq * isCompGen: bool - /// Gets the syntax range of this construct member this.Range = match this with - | Typar(id, _, _) -> + | SynTypar(id, _, _) -> id.idRange -/// The unchecked abstract syntax tree of constants in F# types and expressions. +[] +type SynStringKind = + | Regular + | Verbatim + | TripleQuote + +[] +type SynByteStringKind = + | Regular + | Verbatim + [] type SynConst = - /// F# syntax: () | Unit - /// F# syntax: true, false | Bool of bool - /// F# syntax: 13y, 0xFFy, 0o077y, 0b0111101y | SByte of sbyte - /// F# syntax: 13uy, 0x40uy, 0oFFuy, 0b0111101uy | Byte of byte - /// F# syntax: 13s, 0x4000s, 0o0777s, 0b0111101s | Int16 of int16 - /// F# syntax: 13us, 0x4000us, 0o0777us, 0b0111101us | UInt16 of uint16 - /// F# syntax: 13, 0x4000, 0o0777 | Int32 of int32 - /// F# syntax: 13u, 0x4000u, 0o0777u | UInt32 of uint32 - /// F# syntax: 13L | Int64 of int64 - /// F# syntax: 13UL | UInt64 of uint64 - /// F# syntax: 13n | IntPtr of int64 - /// F# syntax: 13un | UIntPtr of uint64 - /// F# syntax: 1.30f, 1.40e10f etc. | Single of single - /// F# syntax: 1.30, 1.40e10 etc. | Double of double - /// F# syntax: 'a' | Char of char - /// F# syntax: 23.4M | Decimal of System.Decimal - /// UserNum(value, suffix) - /// - /// F# syntax: 1Q, 1Z, 1R, 1N, 1G | UserNum of value: string * suffix: string - /// F# syntax: verbatim or regular string, e.g. "abc" - | String of text: string * range: range + | String of text: string * synStringKind :SynStringKind * range: range - /// F# syntax: verbatim or regular byte string, e.g. "abc"B. - /// - /// Also used internally in the typechecker once an array of unit16 constants - /// is detected, to allow more efficient processing of large arrays of uint16 constants. - | Bytes of bytes: byte[] * range: range + | Bytes of bytes: byte[] * synByteStringKind: SynByteStringKind * range: range - /// Used internally in the typechecker once an array of unit16 constants - /// is detected, to allow more efficient processing of large arrays of uint16 constants. | UInt16s of uint16[] - /// Old comment: "we never iterate, so the const here is not another SynConst.Measure" - | Measure of constant: SynConst * SynMeasure + | Measure of constant: SynConst * constantRange: Range * SynMeasure + + | SourceIdentifier of constant: string * value: string * range: Range - /// Gets the syntax range of this construct member c.Range dflt = match c with - | SynConst.String (_, m0) | SynConst.Bytes (_, m0) -> m0 + | SynConst.String (_, _, m0) + | SynConst.Bytes (_, _, m0) + | SynConst.SourceIdentifier(_, _, m0) -> m0 | _ -> dflt -/// Represents an unchecked syntax tree of F# unit of measure annotations. [] type SynMeasure = - /// A named unit of measure | Named of longId: LongIdent * range: range - /// A product of two units of measure, e.g. 'kg * m' - | Product of SynMeasure * SynMeasure * range: range + | Product of measure1: SynMeasure * measure2: SynMeasure * range: range - /// A sequence of several units of measure, e.g. 'kg m m' - | Seq of SynMeasure list * range: range + | Seq of measures: SynMeasure list * range: range - /// A division of two units of measure, e.g. 'kg / m' - | Divide of SynMeasure * SynMeasure * range: range + | Divide of measure1: SynMeasure * measure2: SynMeasure * range: range - /// A power of a unit of measure, e.g. 'kg ^ 2' - | Power of SynMeasure * SynRationalConst * range: range + | Power of measure: SynMeasure * power: SynRationalConst * range: range - /// The '1' unit of measure | One - /// An anonymous (inferred) unit of measure | Anon of range: range - /// A variable unit of measure - | Var of SynTypar * range: range + | Var of typar: SynTypar * range: range -/// Represents an unchecked syntax tree of F# unit of measure exponents. [] type SynRationalConst = - | Integer of int32 + | Integer of value: int32 - | Rational of int32 * int32 * range: range + | Rational of numerator: int32 * denominator: int32 * range: range | Negate of SynRationalConst -/// Represents an accessibility modifier in F# syntax [] type SynAccess = - /// A construct marked or assumed 'public' | Public - /// A construct marked or assumed 'internal' | Internal - /// A construct marked or assumed 'private' | Private override this.ToString () = @@ -216,211 +168,184 @@ type SynAccess = | Internal -> "Internal" | Private -> "Private" -/// Represents whether a debug point should be present for the target -/// of a decision tree, that is whether the construct corresponds to a debug -/// point in the original source. [] type DebugPointForTarget = | Yes | No -/// Represents whether a debug point should be present for either the -/// first or second part of a sequential execution, that is whether the -/// construct corresponds to a debug point in the original source. [] type DebugPointAtSequential = | Both - // This means "suppress a in 'a;b'" and "suppress b in 'a before b'" | StmtOnly - // This means "suppress b in 'a;b'" and "suppress a in 'a before b'" | ExprOnly -/// Represents whether a debug point should be present for a 'try', that is whether -/// the construct corresponds to a debug point in the original source. [] type DebugPointAtTry = | Yes of range: range - // Used for "use" and "for" | Body | No -/// Represents whether a debug point should be present for the 'with' in a 'try .. with', -/// that is whether the construct corresponds to a debug point in the original source. [] type DebugPointAtWith = | Yes of range: range | No -/// Represents whether a debug point should be present for the 'finally' in a 'try .. finally', -/// that is whether the construct corresponds to a debug point in the original source. [] type DebugPointAtFinally = | Yes of range: range + | Body | No -/// Represents whether a debug point should be present for the 'for' in a 'for...' loop, -/// that is whether the construct corresponds to a debug point in the original source. [] type DebugPointAtFor = | Yes of range: range | No -/// Represents whether a debug point should be present for the 'while' in a 'while...' loop, -/// that is whether the construct corresponds to a debug point in the original source. [] type DebugPointAtWhile = | Yes of range: range | No -/// Represents whether a debug point should be present for a 'let' binding, -/// that is whether the construct corresponds to a debug point in the original source. -type DebugPointForBinding = - | DebugPointAtBinding of range: range - - // Indicates the omission of a sequence point for a binding for a 'do expr' - | NoDebugPointAtDoBinding - - // Indicates the omission of a sequence point for a binding for a 'let e = expr' where - // 'expr' has immediate control flow - | NoDebugPointAtLetBinding - - // Indicates the omission of a sequence point for a compiler generated binding - // where we've done a local expansion of some construct into something that involves - // a 'let'. e.g. we've inlined a function and bound its arguments using 'let' - // The let bindings are 'sticky' in that the inversion of the inlining would involve - // replacing the entire expression with the original and not just the let bindings alone. - | NoDebugPointAtStickyBinding - - // Given 'let v = e1 in e2', where this is a compiler generated binding, - // we are sometimes forced to generate a sequence point for the expression anyway based on its - // overall range. If the let binding is given the flag below then it is asserting that - // the binding has no interesting side effects and can be totally ignored and the range - // of the inner expression is used instead - | NoDebugPointAtInvisibleBinding - - // Don't drop sequence points when combining sequence points - member x.Combine(y: DebugPointForBinding) = +[] +type DebugPointAtBinding = + | Yes of range: range + + | NoneAtDo + + | NoneAtLet + + | NoneAtSticky + + | NoneAtInvisible + + member x.Combine(y: DebugPointAtBinding) = match x, y with - | DebugPointAtBinding _ as g, _ -> g - | _, (DebugPointAtBinding _ as g) -> g + | DebugPointAtBinding.Yes _ as g, _ -> g + | _, (DebugPointAtBinding.Yes _ as g) -> g | _ -> x -/// Indicates if a for loop is 'for x in e1 -> e2', only valid in sequence expressions type SeqExprOnly = - /// Indicates if a for loop is 'for x in e1 -> e2', only valid in sequence expressions | SeqExprOnly of bool -/// Represents the location of the separator block + optional position -/// of the semicolon (used for tooling support) type BlockSeparator = range * pos option -/// Represents a record field name plus a flag indicating if given record field name is syntactically -/// correct and can be used in name resolution. type RecordFieldName = LongIdentWithDots * bool -/// Indicates if an expression is an atomic expression. -/// -/// An atomic expression has no whitespace unless enclosed in parentheses, e.g. -/// 1, "3", ident, ident.[expr] and (expr). If an atomic expression has type T, -/// then the largest expression ending at the same range as the atomic expression -/// also has type T. +[] type ExprAtomicFlag = | Atomic = 0 | NonAtomic = 1 -/// The kind associated with a binding - "let", "do" or a standalone expression +[] type SynBindingKind = - /// A standalone expression in a module | StandaloneExpression - /// A normal 'let' binding in a module - | NormalBinding + | Normal - /// A 'do' binding in a module. Must have type 'unit' - | DoBinding + | Do -/// Represents the explicit declaration of a type parameter [] type SynTyparDecl = - | TyparDecl of attributes: SynAttributes * SynTypar + | SynTyparDecl of attributes: SynAttributes * SynTypar -/// The unchecked abstract syntax tree of F# type constraints -[] +[] type SynTypeConstraint = - /// F# syntax: is 'typar: struct | WhereTyparIsValueType of typar: SynTypar * range: range - /// F# syntax: is 'typar: not struct | WhereTyparIsReferenceType of typar: SynTypar * range: range - /// F# syntax is 'typar: unmanaged | WhereTyparIsUnmanaged of typar: SynTypar * range: range - /// F# syntax is 'typar: null | WhereTyparSupportsNull of typar: SynTypar * range: range - /// F# syntax is 'typar: comparison | WhereTyparIsComparable of typar: SynTypar * range: range - /// F# syntax is 'typar: equality | WhereTyparIsEquatable of typar: SynTypar * range: range - /// F# syntax is default ^T: type | WhereTyparDefaultsToType of typar: SynTypar * typeName: SynType * range: range - /// F# syntax is 'typar :> type | WhereTyparSubtypeOfType of typar: SynTypar * typeName: SynType * range: range - /// F# syntax is ^T: (static member MemberName: ^T * int -> ^T) | WhereTyparSupportsMember of typars: SynType list * memberSig: SynMemberSig * range: range - /// F# syntax is 'typar: enum<'UnderlyingType> | WhereTyparIsEnum of typar: SynTypar * typeArgs: SynType list * range: range - /// F# syntax is 'typar: delegate<'Args, unit> | WhereTyparIsDelegate of typar: SynTypar * typeArgs: SynType list * range: range -/// Represents a syntax tree for F# types + member x.Range = + match x with + | WhereTyparIsValueType(range=range) + | WhereTyparIsReferenceType(range=range) + | WhereTyparIsUnmanaged(range=range) + | WhereTyparSupportsNull(range=range) + | WhereTyparIsComparable(range=range) + | WhereTyparIsEquatable(range=range) + | WhereTyparDefaultsToType(range=range) + | WhereTyparSubtypeOfType(range=range) + | WhereTyparSupportsMember(range=range) + | WhereTyparIsEnum(range=range) + | WhereTyparIsDelegate(range=range) -> range + +[] +type SynTyparDecls = + | PostfixList of decls: SynTyparDecl list * constraints: SynTypeConstraint list * range: range + | PrefixList of decls: SynTyparDecl list * range: range + | SinglePrefix of decl: SynTyparDecl * range: range + + member x.TyparDecls = + match x with + | PostfixList (decls=decls) + | PrefixList (decls=decls) -> decls + | SinglePrefix (decl, _) -> [decl] + + member x.Constraints = + match x with + | PostfixList (constraints=constraints) -> constraints + | _ -> [] + + member x.Range = + match x with + | PostfixList (range=range) + | PrefixList (range=range) -> range + | SinglePrefix (range=range) -> range + [] type SynType = - /// F# syntax: A.B.C | LongIdent of longDotId: LongIdentWithDots - /// F# syntax: type or type type or (type, ..., type) type - /// isPostfix: indicates a postfix type application e.g. "int list" or "(int, string) dict" | App of typeName: SynType * lessRange: range option * @@ -430,7 +355,6 @@ type SynType = isPostfix: bool * range: range - /// F# syntax: type.A.B.C | LongIdentApp of typeName: SynType * longDotId: LongIdentWithDots * @@ -440,76 +364,59 @@ type SynType = greaterRange: range option * range: range - /// F# syntax: type * ... * type - /// F# syntax: struct (type * ... * type) - // the bool is true if / rather than * follows the type | Tuple of isStruct: bool * elementTypes:(bool*SynType) list * range: range - /// F# syntax: {| id: type; ...; id: type |} - /// F# syntax: struct {| id: type; ...; id: type |} | AnonRecd of isStruct: bool * fields:(Ident * SynType) list * range: range - /// F# syntax: type[] | Array of rank: int * elementType: SynType * range: range - /// F# syntax: type -> type | Fun of argType: SynType * returnType: SynType * range: range - /// F# syntax: 'Var | Var of typar: SynTypar * range: range - /// F# syntax: _ | Anon of range: range - /// F# syntax: typ with constraints | WithGlobalConstraints of typeName: SynType * constraints: SynTypeConstraint list * range: range - /// F# syntax: #type | HashConstraint of innerType: SynType * range: range - /// F# syntax: for units of measure e.g. m / s | MeasureDivide of dividend: SynType * divisor: SynType * range: range - /// F# syntax: for units of measure e.g. m^3, kg^1/2 | MeasurePower of baseMeasure: SynType * exponent: SynRationalConst * range: range - /// F# syntax: 1, "abc" etc, used in parameters to type providers - /// For the dimensionless units i.e. 1, and static parameters to provided types | StaticConstant of constant: SynConst * range: range - /// F# syntax: const expr, used in static parameters to type providers | StaticConstantExpr of expr: SynExpr * range: range - /// F# syntax: ident=1 etc., used in static parameters to type providers | StaticConstantNamed of ident: SynType * value: SynType * @@ -519,7 +426,6 @@ type SynType = innerType: SynType * range: range - /// Gets the syntax range of this construct member x.Range = match x with | SynType.App (range=m) @@ -540,23 +446,15 @@ type SynType = | SynType.Paren (range=m) -> m | SynType.LongIdent lidwd -> lidwd.Range -/// Represents a syntax tree for F# expressions [] type SynExpr = - /// F# syntax: (expr) - /// - /// Parenthesized expressions. Kept in AST to distinguish A.M((x, y)) - /// from A.M(x, y), among other things. | Paren of expr: SynExpr * leftParenRange: range * rightParenRange: range option * range: range - /// F# syntax: <@ expr @>, <@@ expr @@> - /// - /// Quote(operator, isRaw, quotedSynExpr, isFromQueryExpression, m) | Quote of operator: SynExpr * isRaw: bool * @@ -564,57 +462,44 @@ type SynExpr = isFromQueryExpression: bool * range: range - /// F# syntax: 1, 1.3, () etc. | Const of constant: SynConst * range: range - /// F# syntax: expr: type | Typed of expr: SynExpr * targetType: SynType * range: range - /// F# syntax: e1, ..., eN | Tuple of isStruct: bool * exprs: SynExpr list * commaRanges: range list * // interstitial commas range: range - /// F# syntax: {| id1=e1; ...; idN=eN |} - /// F# syntax: struct {| id1=e1; ...; idN=eN |} | AnonRecd of isStruct: bool * copyInfo:(SynExpr * BlockSeparator) option * recordFields:(Ident * SynExpr) list * range: range - /// F# syntax: [ e1; ...; en ], [| e1; ...; en |] | ArrayOrList of - isList: bool * + isArray: bool * exprs: SynExpr list * range: range - /// F# syntax: { f1=e1; ...; fn=en } - /// inherit includes location of separator (for tooling) - /// copyOpt contains range of the following WITH part (for tooling) - /// every field includes range of separator after the field (for tooling) | Record of baseInfo:(SynType * SynExpr * range * BlockSeparator option * range) option * copyInfo:(SynExpr * BlockSeparator) option * recordFields:(RecordFieldName * (SynExpr option) * BlockSeparator option) list * range: range - /// F# syntax: new C(...) - /// The flag is true if known to be 'family' ('protected') scope | New of isProtected: bool * targetType: SynType * expr: SynExpr * range: range - /// F# syntax: { new ... with ... } | ObjExpr of objType: SynType * argOptions:(SynExpr * Ident option) option * @@ -623,14 +508,12 @@ type SynExpr = newExprRange: range * range: range - /// F# syntax: 'while ... do ...' | While of whileSeqPoint: DebugPointAtWhile * whileExpr: SynExpr * doExpr: SynExpr * range: range - /// F# syntax: 'for i = ... to ... do ...' | For of forSeqPoint: DebugPointAtFor * ident: Ident * @@ -640,7 +523,6 @@ type SynExpr = doBody: SynExpr * range: range - /// F# syntax: 'for ... in ... do ...' | ForEach of forSeqPoint: DebugPointAtFor * seqExprOnly: SeqExprOnly * @@ -650,25 +532,17 @@ type SynExpr = bodyExpr: SynExpr * range: range - /// F# syntax: [ expr ], [| expr |] | ArrayOrListOfSeqExpr of isArray: bool * expr: SynExpr * range: range - /// F# syntax: { expr } | CompExpr of isArrayOrList: bool * isNotNakedRefCell: bool ref * expr: SynExpr * range: range - /// First bool indicates if lambda originates from a method. Patterns here are always "simple" - /// Second bool indicates if this is a "later" part of an iterated sequence of lambdas - /// parsedData keeps original parsed patterns and expression, - /// prior to transforming to "simple" patterns and iterated lambdas - /// - /// F# syntax: fun pat -> expr | Lambda of fromMethod: bool * inLambdaSeq: bool * @@ -677,36 +551,27 @@ type SynExpr = parsedData: (SynPat list * SynExpr) option * range: range - /// F# syntax: function pat1 -> expr | ... | patN -> exprN | MatchLambda of isExnMatch: bool * keywordRange: range * matchClauses: SynMatchClause list * - matchSeqPoint: DebugPointForBinding * + matchSeqPoint: DebugPointAtBinding * range: range - /// F# syntax: match expr with pat1 -> expr | ... | patN -> exprN | Match of - matchSeqPoint: DebugPointForBinding * + matchSeqPoint: DebugPointAtBinding * expr: SynExpr * clauses: SynMatchClause list * range: range - /// F# syntax: do expr | Do of expr: SynExpr * range: range - /// F# syntax: assert expr | Assert of expr: SynExpr * range: range - /// F# syntax: f x - /// - /// flag: indicates if the application is syntactically atomic, e.g. f.[1] is atomic, but 'f x' is not - /// isInfix is true for the first app of an infix operator, e.g. 1+2 - /// becomes App(App(+, 1), 2), where the inner node is marked isInfix | App of flag: ExprAtomicFlag * isInfix: bool * @@ -714,7 +579,6 @@ type SynExpr = argExpr: SynExpr * range: range - /// F# syntax: expr | TypeApp of expr: SynExpr * lessRange: range * @@ -724,10 +588,6 @@ type SynExpr = typeArgsRange: range * range: range - /// F# syntax: let pat = expr in expr - /// F# syntax: let f pat1 .. patN = expr in expr - /// F# syntax: let rec f pat1 .. patN = expr in expr - /// F# syntax: use pat = expr in expr | LetOrUse of isRecursive: bool * isUse: bool * @@ -735,7 +595,6 @@ type SynExpr = body: SynExpr * range: range - /// F# syntax: try expr with pat -> expr | TryWith of tryExpr: SynExpr * tryRange: range * @@ -745,7 +604,6 @@ type SynExpr = trySeqPoint: DebugPointAtTry * withSeqPoint: DebugPointAtWith - /// F# syntax: try expr finally expr | TryFinally of tryExpr: SynExpr * finallyExpr: SynExpr * @@ -753,14 +611,10 @@ type SynExpr = trySeqPoint: DebugPointAtTry * finallySeqPoint: DebugPointAtFinally - /// F# syntax: lazy expr | Lazy of expr: SynExpr * range: range - /// F# syntax: expr; expr - /// - /// isTrueSeq: false indicates "let v = a in b; v" | Sequential of seqPoint: DebugPointAtSequential * isTrueSeq: bool * @@ -768,67 +622,52 @@ type SynExpr = expr2: SynExpr * range: range - /// F# syntax: if expr then expr - /// F# syntax: if expr then expr else expr | IfThenElse of ifExpr: SynExpr * thenExpr: SynExpr * elseExpr: SynExpr option * - spIfToThen: DebugPointForBinding * + spIfToThen: DebugPointAtBinding * isFromErrorRecovery: bool * ifToThenRange: range * range: range - /// F# syntax: ident - /// Optimized representation for SynExpr.LongIdent (false, [id], id.idRange) | Ident of ident: Ident - /// F# syntax: ident.ident...ident - /// - /// isOptional: true if preceded by a '?' for an optional named parameter - /// altNameRefCell: Normally 'None' except for some compiler-generated - /// variables in desugaring pattern matching. See SynSimplePat.Id | LongIdent of isOptional: bool * longDotId: LongIdentWithDots * altNameRefCell: SynSimplePatAlternativeIdInfo ref option * range: range - /// F# syntax: ident.ident...ident <- expr | LongIdentSet of longDotId: LongIdentWithDots * expr: SynExpr * range: range - /// F# syntax: expr.ident.ident | DotGet of expr: SynExpr * rangeOfDot: range * longDotId: LongIdentWithDots * range: range - /// F# syntax: expr.ident...ident <- expr | DotSet of targetExpr: SynExpr * longDotId: LongIdentWithDots * rhsExpr: SynExpr * range: range - /// F# syntax: expr <- expr | Set of targetExpr: SynExpr * rhsExpr: SynExpr * range: range - /// F# syntax: expr.[expr, ..., expr] | DotIndexedGet of objectExpr: SynExpr * indexExprs: SynIndexerArg list * dotRange: range * range: range - /// F# syntax: expr.[expr, ..., expr] <- expr | DotIndexedSet of objectExpr: SynExpr * indexExprs: SynIndexerArg list * @@ -837,14 +676,12 @@ type SynExpr = dotRange: range * range: range - /// F# syntax: Type.Items(e1) <- e2, rarely used named-property-setter notation, e.g. Foo.Bar.Chars(3) <- 'a' | NamedIndexedPropertySet of longDotId: LongIdentWithDots * expr1: SynExpr * expr2: SynExpr * range: range - /// F# syntax: expr.Items (e1) <- e2, rarely used named-property-setter notation, e.g. (stringExpr).Chars(3) <- 'a' | DotNamedIndexedPropertySet of targetExpr: SynExpr * longDotId: LongIdentWithDots * @@ -852,65 +689,53 @@ type SynExpr = rhsExpr: SynExpr * range: range - /// F# syntax: expr :? type | TypeTest of expr: SynExpr * targetType: SynType * range: range - /// F# syntax: expr :> type | Upcast of expr: SynExpr * targetType: SynType * range: range - /// F# syntax: expr :?> type | Downcast of expr: SynExpr * targetType: SynType * range: range - /// F# syntax: upcast expr | InferredUpcast of expr: SynExpr * range: range - /// F# syntax: downcast expr | InferredDowncast of expr: SynExpr * range: range - /// F# syntax: null | Null of range: range - /// F# syntax: &expr, &&expr | AddressOf of isByref: bool * expr: SynExpr * opRange: range * range: range - /// F# syntax: ((typar1 or ... or typarN): (member-dig) expr) | TraitCall of supportTys: SynTypar list * traitSig: SynMemberSig * argExpr: SynExpr * range: range - /// F# syntax: ... in ... - /// Computation expressions only, based on JOIN_IN token from lex filter | JoinIn of lhsExpr: SynExpr * lhsRange: range * rhsExpr: SynExpr * range: range - /// Used in parser error recovery and internally during type checking for translating computation expressions. | ImplicitZero of range: range - /// Used internally during type checking for translating computation expressions. | SequentialOrImplicitYield of seqPoint:DebugPointAtSequential * expr1:SynExpr * @@ -918,72 +743,55 @@ type SynExpr = ifNotStmt:SynExpr * range:range - /// F# syntax: yield expr - /// F# syntax: return expr - /// Computation expressions only | YieldOrReturn of flags: (bool * bool) * expr: SynExpr * range: range - /// F# syntax: yield! expr - /// F# syntax: return! expr - /// Computation expressions only | YieldOrReturnFrom of flags: (bool * bool) * expr: SynExpr * range: range - /// F# syntax: let! pat = expr in expr - /// F# syntax: use! pat = expr in expr - /// F# syntax: let! pat = expr and! ... and! ... and! pat = expr in expr - /// Computation expressions only | LetOrUseBang of - bindSeqPoint: DebugPointForBinding * + bindSeqPoint: DebugPointAtBinding * isUse: bool * isFromSource: bool * pat: SynPat * rhs: SynExpr * - andBangs:(DebugPointForBinding * bool * bool * SynPat * SynExpr * range) list * + andBangs:(DebugPointAtBinding * bool * bool * SynPat * SynExpr * range) list * body:SynExpr * range: range - /// F# syntax: match! expr with pat1 -> expr | ... | patN -> exprN | MatchBang of - matchSeqPoint: DebugPointForBinding * + matchSeqPoint: DebugPointAtBinding * expr: SynExpr * clauses: SynMatchClause list * range: range - /// F# syntax: do! expr - /// Computation expressions only | DoBang of expr: SynExpr * range: range - /// Only used in FSharp.Core | LibraryOnlyILAssembly of - ilCode: ILInstr array * + ilCode: obj * // this type is ILInstr[] but is hidden to avoid the representation of AbstractIL being public typeArgs: SynType list * args: SynExpr list * retTy: SynType list * range: range - /// Only used in FSharp.Core | LibraryOnlyStaticOptimization of constraints: SynStaticOptimizationConstraint list * expr: SynExpr * optimizedExpr: SynExpr * range: range - /// Only used in FSharp.Core | LibraryOnlyUnionCaseFieldGet of expr: SynExpr * longId: LongIdent * fieldNum: int * range: range - /// Only used in FSharp.Core | LibraryOnlyUnionCaseFieldSet of expr: SynExpr * longId: LongIdent * @@ -991,33 +799,27 @@ type SynExpr = rhsExpr: SynExpr * range: range - /// Inserted for error recovery | ArbitraryAfterError of debugStr: string * range: range - /// Inserted for error recovery | FromParseError of expr: SynExpr * range: range - /// Inserted for error recovery when there is "expr." and missing tokens or error recovery after the dot | DiscardAfterMissingQualificationAfterDot of expr: SynExpr * range: range - /// 'use x = fixed expr' | Fixed of expr: SynExpr * range: range - /// F# syntax: interpolated string, e.g. "abc{x}" or "abc{x,3}" or "abc{x:N4}" - /// Note the string ranges include the quotes, verbatim markers, dollar sign and braces | InterpolatedString of contents: SynInterpolatedStringPart list * + synStringKind :SynStringKind * range: range - /// Gets the syntax range of this construct member e.Range = match e with | SynExpr.Paren (_, leftParenRange, rightParenRange, r) -> @@ -1087,20 +889,17 @@ type SynExpr = | SynExpr.InterpolatedString (range=m) -> m | SynExpr.Ident id -> id.idRange - /// Get the Range ignoring any (parse error) extra trailing dots - member e.RangeSansAnyExtraDot = + member e.RangeWithoutAnyExtraDot = match e with | SynExpr.DotGet (expr, _, lidwd, m) -> if lidwd.ThereIsAnExtraDotAtTheEnd then - unionRanges expr.Range lidwd.RangeSansAnyExtraDot + unionRanges expr.Range lidwd.RangeWithoutAnyExtraDot else m - | SynExpr.LongIdent (_, lidwd, _, _) -> lidwd.RangeSansAnyExtraDot + | SynExpr.LongIdent (_, lidwd, _, _) -> lidwd.RangeWithoutAnyExtraDot | SynExpr.DiscardAfterMissingQualificationAfterDot (expr, _) -> expr.Range | _ -> e.Range - /// Attempt to get the range of the first token or initial portion only - this - /// is ad-hoc, just a cheap way to improve a certain 'query custom operation' error range member e.RangeOfFirstPortion = match e with // these are better than just .Range, and also commonly applicable inside queries @@ -1115,7 +914,6 @@ type SynExpr = mkRange r.FileName start e | _ -> e.Range - /// Indicates if this expression arises from error recovery member this.IsArbExprAndThusAlreadyReportedError = match this with | SynExpr.ArbitraryAfterError _ -> true @@ -1123,13 +921,11 @@ type SynExpr = [] type SynInterpolatedStringPart = - | String of string * range - | FillExpr of SynExpr * Ident option + | String of value: string * range: range + | FillExpr of fillExpr: SynExpr * qualifiers: Ident option -/// Represents a syntax tree for an F# indexer expression argument [] type SynIndexerArg = - /// A two-element range indexer argument | Two of expr1: SynExpr * fromEnd1: bool * @@ -1138,33 +934,16 @@ type SynIndexerArg = range1: range * range2: range - /// A one-element item indexer argument | One of expr: SynExpr * fromEnd: bool * range - /// Gets the syntax range of this construct member x.Range = match x with Two (e1, _, e2, _, _, _) -> unionRanges e1.Range e2.Range | One (e, _, _) -> e.Range - /// Get the one or two expressions as a list member x.Exprs = match x with Two (e1, _, e2, _, _, _) -> [e1;e2] | One (e, _, _) -> [e] -/// Represents a syntax tree for simple F# patterns [] type SynSimplePat = - - /// Indicates a simple pattern variable. - /// - /// altNameRefCell: - /// Normally 'None' except for some compiler-generated variables in desugaring pattern matching. - /// Pattern processing sets this reference for hidden variable introduced - /// by desugaring pattern matching in arguments. The info indicates an - /// alternative (compiler generated) identifier to be used because the - /// name of the identifier is already bound. - /// - /// isCompilerGenerated: true if a compiler generated name - /// isThisVar: true if 'this' variable in member - /// isOptArg: true if a '?' is in front of the name | Id of ident: Ident * altNameRefCell: SynSimplePatAlternativeIdInfo ref option * @@ -1173,49 +952,43 @@ type SynSimplePat = isOptArg: bool * range: range - /// A type annotated simple pattern | Typed of pat: SynSimplePat * targetType: SynType * range: range - /// An attributed simple pattern | Attrib of pat: SynSimplePat * attributes: SynAttributes * range: range -/// Represents the alternative identifier for a simple pattern + member x.Range = + match x with + | SynSimplePat.Id(range=range) + | SynSimplePat.Typed(range=range) + | SynSimplePat.Attrib(range=range) -> range + +[] type SynSimplePatAlternativeIdInfo = - /// We have not decided to use an alternative name in the pattern and related expression | Undecided of Ident - /// We have decided to use an alternative name in the pattern and related expression | Decided of Ident -/// Represents a syntax tree for a static optimization constraint in the F# core library -[] +[] type SynStaticOptimizationConstraint = - /// A static optimization conditional that activates for a particular type instantiation | WhenTyparTyconEqualsTycon of typar: SynTypar * rhsType: SynType * range: range - /// A static optimization conditional that activates for a struct | WhenTyparIsStruct of typar: SynTypar * range: range -/// Represents a simple set of variable bindings a, (a, b) or (a: Type, b: Type) at a lambda, -/// function definition or other binding point, after the elimination of pattern matching -/// from the construct, e.g. after changing a "function pat1 -> rule1 | ..." to a -/// "fun v -> match v with ..." [] type SynSimplePats = - | SimplePats of pats: SynSimplePat list * range: range @@ -1225,7 +998,12 @@ type SynSimplePats = targetType: SynType * range: range -/// Represents a syntax tree for arguments patterns + member x.Range = + match x with + | SynSimplePats.SimplePats(range=range) + | SynSimplePats.Typed(range=range) -> range + +[] type SynArgPats = | Pats of pats: SynPat list @@ -1234,51 +1012,46 @@ type SynArgPats = pats: (Ident * SynPat) list * range: range -/// Represents a syntax tree for an F# pattern [] type SynPat = - /// A constant in a pattern | Const of constant: SynConst * range: range - /// A wildcard '_' in a pattern | Wild of range: range - /// A named pattern 'pat as ident' | Named of - pat: SynPat * ident: Ident * isSelfIdentifier: bool * accessibility: SynAccess option * range: range - /// A typed pattern 'pat : type' | Typed of pat: SynPat * targetType: SynType * range: range - /// An attributed pattern, used in argument or declaration position | Attrib of pat: SynPat * attributes: SynAttributes * range: range - /// A disjunctive pattern 'pat1 | pat2' | Or of lhsPat: SynPat * rhsPat: SynPat * range: range - /// A conjunctive pattern 'pat1 & pat2' | Ands of pats: SynPat list * range: range + + | As of + lhsPat: SynPat * + rhsPat: SynPat * + range: range - /// A long identifier pattern possibly with argument patterns | LongIdent of longDotId: LongIdentWithDots * extraId: Ident option * // holds additional ident for tooling @@ -1287,54 +1060,44 @@ type SynPat = accessibility: SynAccess option * range: range - /// A tuple pattern | Tuple of isStruct: bool * elementPats: SynPat list * range: range - /// A parenthesized pattern | Paren of pat: SynPat * range: range - /// An array or a list as a pattern | ArrayOrList of isArray: bool * elementPats: SynPat list * range: range - /// A record pattern | Record of fieldPats: ((LongIdent * Ident) * SynPat) list * range: range - /// The 'null' pattern | Null of range: range - /// '?id' -- for optional argument names | OptionalVal of ident: Ident * range: range - /// A type test pattern ':? type ' | IsInst of pat: SynType * range: range - /// <@ expr @>, used for active pattern arguments | QuoteExpr of expr: SynExpr * range: range - /// Deprecated character range: ranges | DeprecatedCharRange of startChar: char * endChar: char * range: range - /// Used internally in the type checker | InstanceMember of thisId: Ident * memberId: Ident * @@ -1342,12 +1105,10 @@ type SynPat = accessibility: SynAccess option * range: range - /// A pattern arising from a parse error | FromParseError of pat: SynPat * range: range - /// Gets the syntax range of this construct member p.Range = match p with | SynPat.Const (range=m) @@ -1355,6 +1116,7 @@ type SynPat = | SynPat.Named (range=m) | SynPat.Or (range=m) | SynPat.Ands (range=m) + | SynPat.As (range=m) | SynPat.LongIdent (range=m) | SynPat.ArrayOrList (range=m) | SynPat.Tuple (range=m) @@ -1370,79 +1132,68 @@ type SynPat = | SynPat.Paren (range=m) | SynPat.FromParseError (range=m) -> m -/// Represents a set of bindings that implement an interface -[] +[] type SynInterfaceImpl = - | InterfaceImpl of SynType * SynBinding list * range: range + | SynInterfaceImpl of + interfaceTy: SynType * + bindings: SynBinding list * + range: range -/// Represents a clause in a 'match' expression [] type SynMatchClause = - | Clause of + | SynMatchClause of pat: SynPat * whenExpr: SynExpr option * resultExpr: SynExpr * range: range * spInfo: DebugPointForTarget - /// Gets the syntax range of part of this construct member this.RangeOfGuardAndRhs = match this with - | Clause(_, eo, e, _, _) -> + | SynMatchClause(_, eo, e, _, _) -> match eo with | None -> e.Range | Some x -> unionRanges e.Range x.Range - /// Gets the syntax range of this construct member this.Range = match this with - | Clause(_, eo, e, m, _) -> - match eo with - | None -> unionRanges e.Range m - | Some x -> unionRanges (unionRanges e.Range m) x.Range + | SynMatchClause(range = m) -> m -/// Represents an attribute [] type SynAttribute = - { /// The name of the type for the attribute - TypeName: LongIdentWithDots + { TypeName: LongIdentWithDots - /// The argument of the attribute, perhaps a tuple ArgExpr: SynExpr - /// Target specifier, e.g. "assembly", "module", etc. Target: Ident option - /// Is this attribute being applied to a property getter or setter? AppliesToGetterAndSetter: bool - /// The syntax range of the attribute Range: range } -/// List of attributes enclosed in [< ... >]. +[] type SynAttributeList = { - /// The list of attributes Attributes: SynAttribute list - /// The syntax range of the list of attributes Range: range } type SynAttributes = SynAttributeList list -/// Represents extra information about the declaration of a value [] type SynValData = - | SynValData of MemberFlags option * SynValInfo * Ident option + | SynValData of + memberFlags: SynMemberFlags option * + valInfo: SynValInfo * + thisIdOpt: Ident option member x.SynValInfo = (let (SynValData(_flags, synValInfo, _)) = x in synValInfo) -/// Represents a binding for a 'let' or 'member' declaration [] type SynBinding = - | Binding of + | SynBinding of accessibility: SynAccess option * kind: SynBindingKind * mustInline: bool * @@ -1454,171 +1205,142 @@ type SynBinding = returnInfo: SynBindingReturnInfo option * expr: SynExpr * range: range * - seqPoint: DebugPointForBinding + seqPoint: DebugPointAtBinding // no member just named "Range", as that would be confusing: // - for everything else, the 'range' member that appears last/second-to-last is the 'full range' of the whole tree construct // - but for Binding, the 'range' is only the range of the left-hand-side, the right-hand-side range is in the SynExpr // - so we use explicit names to avoid confusion - member x.RangeOfBindingSansRhs = let (Binding(range=m)) = x in m + member x.RangeOfBindingWithoutRhs = let (SynBinding(range=m)) = x in m - member x.RangeOfBindingAndRhs = let (Binding(expr=e; range=m)) = x in unionRanges e.Range m + member x.RangeOfBindingWithRhs = let (SynBinding(expr=e; range=m)) = x in unionRanges e.Range m - member x.RangeOfHeadPat = let (Binding(headPat=headPat)) = x in headPat.Range + member x.RangeOfHeadPattern = let (SynBinding(headPat=headPat)) = x in headPat.Range -/// Represents the return information in a binding for a 'let' or 'member' declaration [] type SynBindingReturnInfo = - SynBindingReturnInfo of + | SynBindingReturnInfo of typeName: SynType * range: range * attributes: SynAttributes -/// Represents the flags for a 'member' declaration -[] -type MemberFlags = +[] +type SynMemberFlags = { - /// The member is an instance member (non-static) IsInstance: bool - /// The member is a dispatch slot IsDispatchSlot: bool - /// The member is an 'override' or explicit interface implementation IsOverrideOrExplicitImpl: bool - /// The member is 'final' IsFinal: bool - /// The kind of the member - MemberKind: MemberKind + MemberKind: SynMemberKind } -/// Note the member kind is actually computed partially by a syntax tree transformation in tc.fs [] -type MemberKind = +type SynMemberKind = - /// The member is a class initializer | ClassConstructor - /// The member is a object model constructor | Constructor - /// The member kind is not yet determined | Member - /// The member kind is property getter | PropertyGet - /// The member kind is property setter | PropertySet - /// An artificial member kind used prior to the point where a - /// get/set property is split into two distinct members. | PropertyGetSet -/// Represents the syntax tree for a member signature (used in signature files, abstract member declarations -/// and member constraints) [] type SynMemberSig = - /// A member definition in a type in a signature file | Member of memberSig: SynValSig * - flags: MemberFlags * + flags: SynMemberFlags * range: range - /// An interface definition in a type in a signature file | Interface of interfaceType: SynType * range: range - /// An 'inherit' definition in a type in a signature file | Inherit of inheritedType: SynType * range: range - /// A 'val' definition in a type in a signature file | ValField of field: SynField * range: range - /// A nested type definition in a signature file (an unimplemented feature) | NestedType of nestedType: SynTypeDefnSig * range: range -/// Represents the kind of a type definition whether explicit or inferred -[] + member d.Range = + match d with + | SynMemberSig.Member (range=m) + | SynMemberSig.Interface (range=m) + | SynMemberSig.Inherit (range=m) + | SynMemberSig.ValField (range=m) + | SynMemberSig.NestedType (range=m) -> m + +[] type SynTypeDefnKind = - | TyconUnspecified - | TyconClass - | TyconInterface - | TyconStruct - | TyconRecord - | TyconUnion - | TyconAbbrev - | TyconHiddenRepr - | TyconAugmentation - | TyconILAssemblyCode - | TyconDelegate of SynType * SynValInfo - -/// Represents the syntax tree for the core of a simple type definition, in either signature -/// or implementation. + | Unspecified + | Class + | Interface + | Struct + | Record + | Union + | Abbrev + | Opaque + | Augmentation + | IL + | Delegate of signature: SynType * signatureInfo: SynValInfo + [] type SynTypeDefnSimpleRepr = - /// A union type definition, type X = A | B | Union of accessibility: SynAccess option * unionCases: SynUnionCase list * range: range - /// An enum type definition, type X = A = 1 | B = 2 | Enum of cases: SynEnumCase list * range: range - /// A record type definition, type X = { A: int; B: int } | Record of accessibility: SynAccess option * recordFields: SynField list * range: range - /// An object oriented type definition. This is not a parse-tree form, but represents the core - /// type representation which the type checker splits out from the "ObjectModel" cases of type definitions. | General of kind: SynTypeDefnKind * inherits: (SynType * range * Ident option) list * - slotsigs: (SynValSig * MemberFlags) list * + slotsigs: (SynValSig * SynMemberFlags) list * fields: SynField list * isConcrete: bool * isIncrClass: bool * implicitCtorSynPats: SynSimplePats option * range: range - /// A type defined by using an IL assembly representation. Only used in FSharp.Core. - /// - /// F# syntax: "type X = (# "..."#) | LibraryOnlyILAssembly of - ilType: ILType * + ilType: obj * // this type is ILType but is hidden to avoid the representation of AbstractIL being public range: range - /// A type abbreviation, "type X = A.B.C" | TypeAbbrev of detail: ParserDetail * rhsType: SynType * range: range - /// An abstract definition, "type X" | None of range: range - /// An exception definition, "exception E = ..." | Exception of exnRepr: SynExceptionDefnRepr - /// Gets the syntax range of this construct member this.Range = match this with | Union (range=m) @@ -1630,86 +1352,83 @@ type SynTypeDefnSimpleRepr = | None (range=m) -> m | Exception t -> t.Range -/// Represents the syntax tree for one case in an enum definition. [] type SynEnumCase = - | EnumCase of + | SynEnumCase of attributes: SynAttributes * - ident: Ident * SynConst * - xmldoc: PreXmlDoc * + ident: Ident * + value: SynConst * + valueRange: range * + xmlDoc: PreXmlDoc * range: range - /// Gets the syntax range of this construct member this.Range = match this with - | EnumCase (range=m) -> m + | SynEnumCase (range=m) -> m -/// Represents the syntax tree for one case in a union definition. [] type SynUnionCase = - | UnionCase of + | SynUnionCase of attributes: SynAttributes * ident: Ident * - caseType: SynUnionCaseType * + caseType: SynUnionCaseKind * xmlDoc: PreXmlDoc * accessibility: SynAccess option * range: range - /// Gets the syntax range of this construct member this.Range = match this with - | UnionCase (range=m) -> m + | SynUnionCase (range=m) -> m -/// Represents the syntax tree for the right-hand-side of union definition, excluding members, -/// in either a signature or implementation. -[] -type SynUnionCaseType = +[] +type SynUnionCaseKind = - /// Normal style declaration - | UnionCaseFields of cases: SynField list + | Fields of + cases: SynField list - /// Full type spec given by 'UnionCase: ty1 * tyN -> rty'. Only used in FSharp.Core, otherwise a warning. - | UnionCaseFullType of SynType * SynValInfo + | FullType of + fullType: SynType * + fullTypeInfo: SynValInfo -/// Represents the syntax tree for the right-hand-side of a type definition in a signature. -/// Note: in practice, using a discriminated union to make a distinction between -/// "simple" types and "object oriented" types is not particularly useful. [] type SynTypeDefnSigRepr = - /// Indicates the right right-hand-side is a class, struct, interface or other object-model type | ObjectModel of kind: SynTypeDefnKind * memberSigs: SynMemberSig list * range: range - /// Indicates the right right-hand-side is a record, union or other simple type. | Simple of - repr: SynTypeDefnSimpleRepr * - range: range + repr: SynTypeDefnSimpleRepr * + range: range - | Exception of SynExceptionDefnRepr + | Exception of + repr: SynExceptionDefnRepr - /// Gets the syntax range of this construct member this.Range = match this with | ObjectModel (range=m) | Simple (range=m) -> m | Exception e -> e.Range -/// Represents the syntax tree for a type definition in a signature [] type SynTypeDefnSig = - /// The information for a type definition in a signature - | TypeDefnSig of SynComponentInfo * SynTypeDefnSigRepr * SynMemberSig list * range: range + | SynTypeDefnSig of + typeInfo: SynComponentInfo * + typeRepr: SynTypeDefnSigRepr * + members: SynMemberSig list * + range: range + + member this.Range = + match this with + | SynTypeDefnSig(range=m) -> m -/// Represents the syntax tree for a field declaration in a record or class [] type SynField = - | Field of + | SynField of attributes: SynAttributes * isStatic: bool * idOpt: Ident option * @@ -1719,17 +1438,11 @@ type SynField = accessibility: SynAccess option * range: range -/// Represents the syntax tree associated with the name of a type definition or module -/// in signature or implementation. -/// -/// This includes the name, attributes, type parameters, constraints, documentation and accessibility -/// for a type definition or module. For modules, entries such as the type parameters are -/// always empty. [] type SynComponentInfo = - | ComponentInfo of + | SynComponentInfo of attributes: SynAttributes * - typeParams: SynTyparDecl list * + typeParams: SynTyparDecls option * constraints: SynTypeConstraint list * longId: LongIdent * xmlDoc: PreXmlDoc * @@ -1737,15 +1450,13 @@ type SynComponentInfo = accessibility: SynAccess option * range: range - /// Gets the syntax range of this construct member this.Range = match this with - | ComponentInfo (range=m) -> m + | SynComponentInfo (range=m) -> m -/// Represents the syntax tree for a 'val' definition in an abstract slot or a signature file [] type SynValSig = - | ValSpfn of + | SynValSig of attributes: SynAttributes * ident: Ident * explicitValDecls: SynValTyparDecls * @@ -1758,17 +1469,15 @@ type SynValSig = synExpr: SynExpr option * range: range - member x.RangeOfId = let (ValSpfn(ident=id)) = x in id.idRange + member x.RangeOfId = let (SynValSig(ident=id)) = x in id.idRange - member x.SynInfo = let (ValSpfn(arity=v)) = x in v + member x.SynInfo = let (SynValSig(arity=v)) = x in v - member x.SynType = let (ValSpfn(synType=ty)) = x in ty + member x.SynType = let (SynValSig(synType=ty)) = x in ty -/// The argument names and other metadata for a member or function [] type SynValInfo = - /// SynValInfo(curriedArgInfos, returnInfo) | SynValInfo of curriedArgInfos: SynArgInfo list list * returnInfo: SynArgInfo member x.CurriedArgInfos = (let (SynValInfo(args, _)) = x in args) @@ -1780,7 +1489,6 @@ type SynValInfo = |> List.choose id |> List.map (fun id -> id.idText) -/// Represents the argument names and other metadata for a parameter for a member or function [] type SynArgInfo = @@ -1791,20 +1499,16 @@ type SynArgInfo = member x.Ident : Ident option = let (SynArgInfo(_,_,id)) = x in id -/// Represents the names and other metadata for the type parameters for a member or function [] type SynValTyparDecls = - | SynValTyparDecls of - typars: SynTyparDecl list * - canInfer: bool * - constraints: SynTypeConstraint list + typars: SynTyparDecls option * + canInfer: bool -/// Represents the syntactic elements associated with the "return" of a function or method. +[] type SynReturnInfo = | SynReturnInfo of returnType: (SynType * SynArgInfo) * range: range -/// Represents the right hand side of an exception declaration 'exception E = ... ' [] type SynExceptionDefnRepr = @@ -1816,11 +1520,8 @@ type SynExceptionDefnRepr = accessibility: SynAccess option * range: range - /// Gets the syntax range of this construct member this.Range = match this with SynExceptionDefnRepr (range=m) -> m -/// Represents the right hand side of an exception declaration 'exception E = ... ' plus -/// any member definitions for the exception [] type SynExceptionDefn = @@ -1829,134 +1530,112 @@ type SynExceptionDefn = members: SynMemberDefns * range: range - /// Gets the syntax range of this construct member this.Range = match this with | SynExceptionDefn (range=m) -> m -/// Represents the right hand side of a type or exception declaration 'type C = ... ' plus -/// any additional member definitions for the type [] type SynTypeDefnRepr = - /// An object model type definition (class or interface) | ObjectModel of kind: SynTypeDefnKind * members: SynMemberDefns * range: range - /// A simple type definition (record, union, abbreviation) | Simple of simpleRepr: SynTypeDefnSimpleRepr * range: range - /// An exception definition | Exception of exnRepr: SynExceptionDefnRepr - /// Gets the syntax range of this construct member this.Range = match this with | ObjectModel (range=m) | Simple (range=m) -> m | Exception t -> t.Range -/// Represents a type or exception declaration 'type C = ... ' plus -/// any additional member definitions for the type [] type SynTypeDefn = - | TypeDefn of + | SynTypeDefn of typeInfo: SynComponentInfo * typeRepr: SynTypeDefnRepr * members: SynMemberDefns * + implicitConstructor: SynMemberDefn option * range: range - /// Gets the syntax range of this construct member this.Range = match this with - | TypeDefn (range=m) -> m + | SynTypeDefn (range=m) -> m -/// Represents a definition element within a type definition, e.g. 'member ... ' [] type SynMemberDefn = - /// An 'open' definition within a type | Open of target: SynOpenDeclTarget * range: range - /// A 'member' definition within a type | Member of memberDefn: SynBinding * range: range - /// An implicit constructor definition | ImplicitCtor of accessibility: SynAccess option * attributes: SynAttributes * ctorArgs: SynSimplePats * selfIdentifier: Ident option * - doc: PreXmlDoc * + xmlDoc: PreXmlDoc * range: range - /// An implicit inherit definition, 'inherit (args...) as base' | ImplicitInherit of inheritType: SynType * inheritArgs: SynExpr * inheritAlias: Ident option * range: range - /// A 'let' definition within a class | LetBindings of bindings: SynBinding list * isStatic: bool * isRecursive: bool * range: range - /// An abstract slot definition within a class or interface | AbstractSlot of slotSig: SynValSig * - flags: MemberFlags * + flags: SynMemberFlags * range: range - /// An interface implementation definition within a class | Interface of interfaceType: SynType * members: SynMemberDefns option * range: range - /// An 'inherit' definition within a class | Inherit of baseType: SynType * asIdent: Ident option * range: range - /// A 'val' definition within a class | ValField of fieldInfo: SynField * range: range - /// A nested type definition, a feature that is not implemented | NestedType of typeDefn: SynTypeDefn * accessibility: SynAccess option * range: range - /// An auto-property definition, F# syntax: 'member val X = expr' | AutoProperty of attributes: SynAttributes * isStatic: bool * ident: Ident * typeOpt: SynType option * - propKind: MemberKind * - memberFlags:(MemberKind -> MemberFlags) * + propKind: SynMemberKind * + memberFlags:(SynMemberKind -> SynMemberFlags) * xmlDoc: PreXmlDoc * accessibility: SynAccess option * synExpr: SynExpr * getSetRange: range option * range: range - /// Gets the syntax range of this construct member d.Range = match d with | SynMemberDefn.Member (range=m) @@ -1973,17 +1652,14 @@ type SynMemberDefn = type SynMemberDefns = SynMemberDefn list -/// Represents a definition within a module [] type SynModuleDecl = - /// A module abbreviation definition 'module X = A.B.C' | ModuleAbbrev of ident: Ident * longId: LongIdent * range: range - /// A nested module definition 'module X = ...' | NestedModule of moduleInfo: SynComponentInfo * isRecursive: bool * @@ -1991,48 +1667,39 @@ type SynModuleDecl = isContinuing: bool * range: range - /// A 'let' definition within a module | Let of isRecursive: bool * bindings: SynBinding list * range: range - /// A 'do expr' within a module | DoExpr of - spInfo: DebugPointForBinding * + spInfo: DebugPointAtBinding * expr: SynExpr * range: range - /// One or more 'type' definitions within a module | Types of typeDefns: SynTypeDefn list * range: range - /// An 'exception' definition within a module | Exception of exnDefn: SynExceptionDefn * range: range - /// An 'open' definition within a module | Open of target: SynOpenDeclTarget * range: range - /// An attribute definition within a module, for assembly and .NET module attributes | Attributes of attributes: SynAttributes * range: range - /// A hash directive within a module | HashDirective of hashDirective: ParsedHashDirective * range: range - /// A namespace fragment within a module | NamespaceFragment of fragment: SynModuleOrNamespace - /// Gets the syntax range of this construct member d.Range = match d with | SynModuleDecl.ModuleAbbrev (range=m) @@ -2046,23 +1713,18 @@ type SynModuleDecl = | SynModuleDecl.NamespaceFragment (SynModuleOrNamespace (range=m)) | SynModuleDecl.Attributes (range=m) -> m -/// Represents the target of the open declaration [] type SynOpenDeclTarget = - /// A 'open' declaration | ModuleOrNamespace of longId: LongIdent * range: range - /// A 'open type' declaration | Type of typeName: SynType * range: range - /// Gets the syntax range of this construct member this.Range = match this with | ModuleOrNamespace (range=m) -> m | Type (range=m) -> m -/// Represents the right hand side of an exception definition in a signature file [] type SynExceptionSig = | SynExceptionSig of @@ -2070,53 +1732,42 @@ type SynExceptionSig = members: SynMemberSig list * range: range -/// Represents a definition within a module or namespace in a signature file [] type SynModuleSigDecl = - /// A module abbreviation definition within a module or namespace in a signature file | ModuleAbbrev of ident: Ident * longId: LongIdent * range: range - /// A nested module definition within a module or namespace in a signature file | NestedModule of moduleInfo: SynComponentInfo * isRecursive: bool * moduleDecls: SynModuleSigDecl list * range: range - /// A 'val' definition within a module or namespace in a signature file, corresponding - /// to a 'let' definition in the implementation | Val of valSig: SynValSig * range: range - /// A set of one or more type definitions within a module or namespace in a signature file | Types of types: SynTypeDefnSig list * range: range - /// An exception definition within a module or namespace in a signature file | Exception of exnSig: SynExceptionSig * range: range - /// An 'open' definition within a module or namespace in a signature file | Open of target: SynOpenDeclTarget * range: range - /// A hash directive within a module or namespace in a signature file | HashDirective of hashDirective: ParsedHashDirective * range: range - /// A namespace fragment within a namespace in a signature file | NamespaceFragment of SynModuleOrNamespaceSig - /// Gets the syntax range of this construct member d.Range = match d with | SynModuleSigDecl.ModuleAbbrev (range=m) @@ -2125,31 +1776,24 @@ type SynModuleSigDecl = | SynModuleSigDecl.Types (range=m) | SynModuleSigDecl.Exception (range=m) | SynModuleSigDecl.Open (range=m) - | SynModuleSigDecl.NamespaceFragment (SynModuleOrNamespaceSig(range=m)) + | SynModuleSigDecl.NamespaceFragment (SynModuleOrNamespaceSig.SynModuleOrNamespaceSig(range=m)) | SynModuleSigDecl.HashDirective (range=m) -> m -/// Represents the kind of a module or namespace definition -[] +[] type SynModuleOrNamespaceKind = - /// A module is explicitly named 'module N' | NamedModule - /// A module is anonymously named, e.g. a script | AnonModule - /// A namespace is explicitly declared | DeclaredNamespace - /// A namespace is declared 'global' | GlobalNamespace - /// Indicates if this is a module definition member x.IsModule = match x with | NamedModule | AnonModule -> true | _ -> false -/// Represents the definition of a module or namespace [] type SynModuleOrNamespace = | SynModuleOrNamespace of @@ -2162,12 +1806,10 @@ type SynModuleOrNamespace = accessibility: SynAccess option * range: range - /// Gets the syntax range of this construct member this.Range = match this with | SynModuleOrNamespace (range=m) -> m -/// Represents the definition of a module or namespace in a signature file [] type SynModuleOrNamespaceSig = | SynModuleOrNamespaceSig of @@ -2180,28 +1822,37 @@ type SynModuleOrNamespaceSig = accessibility: SynAccess option * range: range -/// Represents a parsed hash directive + member this.Range = + match this with + | SynModuleOrNamespaceSig (range=m) -> m + +[] +type ParsedHashDirectiveArgument = + | String of value: string * stringKind: SynStringKind * range: Range + | SourceIdentifier of constant: string * value: string * range: Range + + member this.Range = + match this with + | ParsedHashDirectiveArgument.String (range=m) + | ParsedHashDirectiveArgument.SourceIdentifier (range=m) -> m + [] type ParsedHashDirective = | ParsedHashDirective of ident: string * - args: string list * + args: ParsedHashDirectiveArgument list * range: range -/// Represents the syntax tree for the contents of a parsed implementation file [] type ParsedImplFileFragment = - /// An implementation file which is an anonymous module definition, e.g. a script | AnonModule of decls: SynModuleDecl list * range: range - /// An implementation file is a named module definition, 'module N' | NamedModule of namedModule: SynModuleOrNamespace - /// An implementation file fragment which declares a namespace fragment | NamespaceFragment of longId: LongIdent * isRecursive: bool * @@ -2211,20 +1862,16 @@ type ParsedImplFileFragment = attributes: SynAttributes * range: range -/// Represents the syntax tree for the contents of a parsed signature file [] type ParsedSigFileFragment = - /// A signature file which is an anonymous module, e.g. the signature file for the final file in an application | AnonModule of decls: SynModuleSigDecl list * range: range - /// A signature file which is a module, 'module N' | NamedModule of namedModule: SynModuleOrNamespaceSig - /// A signature file namespace fragment | NamespaceFragment of longId: LongIdent * isRecursive: bool * @@ -2234,52 +1881,42 @@ type ParsedSigFileFragment = attributes: SynAttributes * range: range -/// Represents a parsed syntax tree for an F# Interactive interaction -[] -type ParsedFsiInteraction = - | IDefns of +[] +type ParsedScriptInteraction = + | Definitions of defns: SynModuleDecl list * range: range - | IHash of + | HashDirective of hashDirective: ParsedHashDirective * range: range -/// Represents a parsed implementation file made up of fragments [] type ParsedImplFile = | ParsedImplFile of hashDirectives: ParsedHashDirective list * fragments: ParsedImplFileFragment list -/// Represents a parsed signature file made up of fragments [] type ParsedSigFile = | ParsedSigFile of hashDirectives: ParsedHashDirective list * fragments: ParsedSigFileFragment list -/// Represents a scoped pragma [] type ScopedPragma = - /// A pragma to turn a warning off | WarningOff of range: range * warningNumber: int -/// Represents a qualifying name for anonymous module specifications and implementations, [] type QualifiedNameOfFile = | QualifiedNameOfFile of Ident - /// The name of the file member x.Text = (let (QualifiedNameOfFile t) = x in t.idText) - /// The identifier for the name of the file member x.Id = (let (QualifiedNameOfFile t) = x in t) - /// Gets the syntax range of this construct member x.Range = (let (QualifiedNameOfFile t) = x in t.idRange) -/// Represents the full syntax tree, file name and other parsing information for an implementation file [] type ParsedImplFileInput = | ParsedImplFileInput of @@ -2291,7 +1928,6 @@ type ParsedImplFileInput = modules: SynModuleOrNamespace list * isLastCompiland: (bool * bool) -/// Represents the full syntax tree, file name and other parsing information for a signature file [] type ParsedSigFileInput = | ParsedSigFileInput of @@ -2301,16 +1937,17 @@ type ParsedSigFileInput = hashDirectives: ParsedHashDirective list * modules: SynModuleOrNamespaceSig list -/// Represents the syntax tree for a parsed implementation or signature file [] type ParsedInput = - /// A parsed implementation file | ImplFile of ParsedImplFileInput - /// A parsed signature file | SigFile of ParsedSigFileInput - /// Gets the syntax range of this construct + member inp.FileName = + match inp with + | ParsedInput.ImplFile (ParsedImplFileInput (fileName=filename)) + | ParsedInput.SigFile (ParsedSigFileInput (fileName=filename)) -> filename + member inp.Range = match inp with | ParsedInput.ImplFile (ParsedImplFileInput (modules=SynModuleOrNamespace(range=m) :: _)) diff --git a/src/fsharp/SyntaxTree.fsi b/src/fsharp/SyntaxTree.fsi new file mode 100644 index 00000000000..a04fc70da39 --- /dev/null +++ b/src/fsharp/SyntaxTree.fsi @@ -0,0 +1,2160 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace rec FSharp.Compiler.Syntax + +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Xml + +/// Represents an identifier in F# code +[] +type Ident = + new: text: string * range: range -> Ident + member idText: string + member idRange: range + + +/// Represents a long identifier e.g. 'A.B.C' +type LongIdent = Ident list + + +/// Represents a long identifier with possible '.' at end. +/// +/// Typically dotRanges.Length = lid.Length-1, but they may be same if (incomplete) code ends in a dot, e.g. "Foo.Bar." +/// The dots mostly matter for parsing, and are typically ignored by the typechecker, but +/// if dotRanges.Length = lid.Length, then the parser must have reported an error, so the typechecker is allowed +/// more freedom about typechecking these expressions. +/// LongIdent can be empty list - it is used to denote that name of some AST element is absent (i.e. empty type name in inherit) +type LongIdentWithDots = + | //[] + LongIdentWithDots of id: LongIdent * dotRanges: range list + + /// Gets the syntax range of this construct + member Range: range + + /// Get the long ident for this construct + member Lid: LongIdent + + /// Indicates if the construct ends in '.' due to error recovery + member ThereIsAnExtraDotAtTheEnd: bool + + /// Gets the syntax range for part of this construct + member RangeWithoutAnyExtraDot: range + +/// Indicates if the construct arises from error recovery +[] +type ParserDetail = + /// The construct arises normally + | Ok + + /// The construct arises from error recovery + | ErrorRecovery + +/// Represents whether a type parameter has a static requirement or not (^T or 'T) +[] +type TyparStaticReq = + /// The construct is a normal type inference variable + | None + + /// The construct is a statically inferred type inference variable '^T' + | HeadType + +/// Represents a syntactic type parameter +[] +type SynTypar = + | SynTypar of ident: Ident * staticReq: TyparStaticReq * isCompGen: bool + + /// Gets the syntax range of this construct + member Range: range + +/// Indicate if the string had a special format +[] +type SynStringKind = + | Regular + | Verbatim + | TripleQuote + +/// Indicate if the byte string had a special format +[] +type SynByteStringKind = + | Regular + | Verbatim + +/// The unchecked abstract syntax tree of constants in F# types and expressions. +[] +type SynConst = + + /// F# syntax: () + | Unit + + /// F# syntax: true, false + | Bool of bool + + /// F# syntax: 13y, 0xFFy, 0o077y, 0b0111101y + | SByte of sbyte + + /// F# syntax: 13uy, 0x40uy, 0oFFuy, 0b0111101uy + | Byte of byte + + /// F# syntax: 13s, 0x4000s, 0o0777s, 0b0111101s + | Int16 of int16 + + /// F# syntax: 13us, 0x4000us, 0o0777us, 0b0111101us + | UInt16 of uint16 + + /// F# syntax: 13, 0x4000, 0o0777 + | Int32 of int32 + + /// F# syntax: 13u, 0x4000u, 0o0777u + | UInt32 of uint32 + + /// F# syntax: 13L + | Int64 of int64 + + /// F# syntax: 13UL + | UInt64 of uint64 + + /// F# syntax: 13n + | IntPtr of int64 + + /// F# syntax: 13un + | UIntPtr of uint64 + + /// F# syntax: 1.30f, 1.40e10f etc. + | Single of single + + /// F# syntax: 1.30, 1.40e10 etc. + | Double of double + + /// F# syntax: 'a' + | Char of char + + /// F# syntax: 23.4M + | Decimal of System.Decimal + + /// UserNum(value, suffix) + /// + /// F# syntax: 1Q, 1Z, 1R, 1N, 1G + | UserNum of value: string * suffix: string + + /// F# syntax: verbatim or regular string, e.g. "abc" + | String of text: string * synStringKind :SynStringKind * range: range + + /// F# syntax: verbatim or regular byte string, e.g. "abc"B. + /// + /// Also used internally in the typechecker once an array of unit16 constants + /// is detected, to allow more efficient processing of large arrays of uint16 constants. + | Bytes of bytes: byte[] * synByteStringKind: SynByteStringKind * range: range + + /// Used internally in the typechecker once an array of unit16 constants + /// is detected, to allow more efficient processing of large arrays of uint16 constants. + | UInt16s of uint16[] + + /// Old comment: "we never iterate, so the const here is not another SynConst.Measure" + | Measure of constant: SynConst * constantRange: range * SynMeasure + + /// Source Line, File, and Path Identifiers + /// Containing both the original value as the evaluated value. + | SourceIdentifier of constant: string * value: string * range: Range + + /// Gets the syntax range of this construct + member Range: dflt: range -> range + +/// Represents an unchecked syntax tree of F# unit of measure annotations. +[] +type SynMeasure = + + /// A named unit of measure + | Named of longId: LongIdent * range: range + + /// A product of two units of measure, e.g. 'kg * m' + | Product of measure1: SynMeasure * measure2: SynMeasure * range: range + + /// A sequence of several units of measure, e.g. 'kg m m' + | Seq of measures: SynMeasure list * range: range + + /// A division of two units of measure, e.g. 'kg / m' + | Divide of measure1: SynMeasure * measure2: SynMeasure * range: range + + /// A power of a unit of measure, e.g. 'kg ^ 2' + | Power of measure: SynMeasure * power: SynRationalConst * range: range + + /// The '1' unit of measure + | One + + /// An anonymous (inferred) unit of measure + | Anon of range: range + + /// A variable unit of measure + | Var of typar: SynTypar * range: range + +/// Represents an unchecked syntax tree of F# unit of measure exponents. +[] +type SynRationalConst = + + | Integer of value: int32 + + | Rational of numerator: int32 * denominator: int32 * range: range + + | Negate of SynRationalConst + +/// Represents an accessibility modifier in F# syntax +[] +type SynAccess = + /// A construct marked or assumed 'public' + | Public + + /// A construct marked or assumed 'internal' + | Internal + + /// A construct marked or assumed 'private' + | Private + +/// Represents whether a debug point should be present for the target +/// of a decision tree, that is whether the construct corresponds to a debug +/// point in the original source. +[] +type DebugPointForTarget = + | Yes + | No + +/// Represents whether a debug point should be present for either the +/// first or second part of a sequential execution, that is whether the +/// construct corresponds to a debug point in the original source. +[] +type DebugPointAtSequential = + | Both + + // This means "suppress a in 'a;b'" and "suppress b in 'a before b'" + | StmtOnly + + // This means "suppress b in 'a;b'" and "suppress a in 'a before b'" + | ExprOnly + +/// Represents whether a debug point should be present for a 'try', that is whether +/// the construct corresponds to a debug point in the original source. +[] +type DebugPointAtTry = + | Yes of range: range + | Body + | No + +/// Represents whether a debug point should be present for the 'with' in a 'try .. with', +/// that is whether the construct corresponds to a debug point in the original source. +[] +type DebugPointAtWith = + | Yes of range: range + | No + +/// Represents whether a debug point should be present for the 'finally' in a 'try .. finally', +/// that is whether the construct corresponds to a debug point in the original source. +[] +type DebugPointAtFinally = + | Yes of range: range + | Body + | No + +/// Represents whether a debug point should be present for the 'for' in a 'for...' loop, +/// that is whether the construct corresponds to a debug point in the original source. +[] +type DebugPointAtFor = + | Yes of range: range + | No + +/// Represents whether a debug point should be present for the 'while' in a 'while...' loop, +/// that is whether the construct corresponds to a debug point in the original source. +[] +type DebugPointAtWhile = + | Yes of range: range + | No + +/// Represents whether a debug point should be present for a 'let' binding, +/// that is whether the construct corresponds to a debug point in the original source. +[] +type DebugPointAtBinding = + // Indicates emit of a debug point prior to the 'let' + | Yes of range: range + + // Indicates the omission of a debug point for a binding for a 'do expr' + | NoneAtDo + + // Indicates the omission of a debug point for a binding for a 'let e = expr' where + // 'expr' has immediate control flow + | NoneAtLet + + // Indicates the omission of a debug point for a compiler generated binding + // where we've done a local expansion of some construct into something that involves + // a 'let'. e.g. we've inlined a function and bound its arguments using 'let' + // The let bindings are 'sticky' in that the inversion of the inlining would involve + // replacing the entire expression with the original and not just the let bindings alone. + | NoneAtSticky + + // Given 'let v = e1 in e2', where this is a compiler generated binding, + // we are sometimes forced to generate a debug point for the expression anyway based on its + // overall range. If the let binding is given the flag below then it is asserting that + // the binding has no interesting side effects and can be totally ignored and the range + // of the inner expression is used instead + | NoneAtInvisible + + // Don't drop debug points when combining debug points + member Combine: y: DebugPointAtBinding -> DebugPointAtBinding + +/// Indicates if a for loop is 'for x in e1 -> e2', only valid in sequence expressions +type SeqExprOnly = + /// Indicates if a for loop is 'for x in e1 -> e2', only valid in sequence expressions + | SeqExprOnly of bool + +/// Represents the location of the separator block + optional position +/// of the semicolon (used for tooling support) +type BlockSeparator = range * pos option + +/// Represents a record field name plus a flag indicating if given record field name is syntactically +/// correct and can be used in name resolution. +type RecordFieldName = LongIdentWithDots * bool + +/// Indicates if an expression is an atomic expression. +/// +/// An atomic expression has no whitespace unless enclosed in parentheses, e.g. +/// 1, "3", ident, ident.[expr] and (expr). If an atomic expression has type T, +/// then the largest expression ending at the same range as the atomic expression +/// also has type T. +[] +type ExprAtomicFlag = + | Atomic = 0 + | NonAtomic = 1 + +/// The kind associated with a binding - "let", "do" or a standalone expression +[] +type SynBindingKind = + + /// A standalone expression in a module + | StandaloneExpression + + /// A normal 'let' binding in a module + | Normal + + /// A 'do' binding in a module. Must have type 'unit' + | Do + +/// Represents the explicit declaration of a type parameter +[] +type SynTyparDecl = + | SynTyparDecl of attributes: SynAttributes * SynTypar + +/// The unchecked abstract syntax tree of F# type constraints +[] +type SynTypeConstraint = + + /// F# syntax: is 'typar: struct + | WhereTyparIsValueType of + typar: SynTypar * + range: range + + /// F# syntax: is 'typar: not struct + | WhereTyparIsReferenceType of + typar: SynTypar * + range: range + + /// F# syntax is 'typar: unmanaged + | WhereTyparIsUnmanaged of + typar: SynTypar * + range: range + + /// F# syntax is 'typar: null + | WhereTyparSupportsNull of + typar: SynTypar * + range: range + + /// F# syntax is 'typar: comparison + | WhereTyparIsComparable of + typar: SynTypar * + range: range + + /// F# syntax is 'typar: equality + | WhereTyparIsEquatable of + typar: SynTypar * + range: range + + /// F# syntax is default ^T: type + | WhereTyparDefaultsToType of + typar: SynTypar * + typeName: SynType * + range: range + + /// F# syntax is 'typar :> type + | WhereTyparSubtypeOfType of + typar: SynTypar * + typeName: SynType * + range: range + + /// F# syntax is ^T: (static member MemberName: ^T * int -> ^T) + | WhereTyparSupportsMember of + typars: SynType list * + memberSig: SynMemberSig * + range: range + + /// F# syntax is 'typar: enum<'UnderlyingType> + | WhereTyparIsEnum of + typar: SynTypar * + typeArgs: SynType list * + range: range + + /// F# syntax is 'typar: delegate<'Args, unit> + | WhereTyparIsDelegate of + typar: SynTypar * + typeArgs: SynType list * + range: range + + member Range: range + +/// List of type parameter declarations with optional type constraints, +/// enclosed in `< ... >` (postfix) or `( ... )` (prefix), or a single prefix parameter. +[] +type SynTyparDecls = + | PostfixList of decls: SynTyparDecl list * constraints: SynTypeConstraint list * range: range + | PrefixList of decls: SynTyparDecl list * range: range + | SinglePrefix of decl: SynTyparDecl * range: range + + member TyparDecls: SynTyparDecl list + member Constraints: SynTypeConstraint list + member Range: range + +/// Represents a syntax tree for F# types +[] +type SynType = + + /// F# syntax: A.B.C + | LongIdent of + longDotId: LongIdentWithDots + + /// F# syntax: type or type type or (type, ..., type) type + /// isPostfix: indicates a postfix type application e.g. "int list" or "(int, string) dict" + | App of + typeName: SynType * + lessRange: range option * + typeArgs: SynType list * + commaRanges: range list * // interstitial commas + greaterRange: range option * + isPostfix: bool * + range: range + + /// F# syntax: type.A.B.C + | LongIdentApp of + typeName: SynType * + longDotId: LongIdentWithDots * + lessRange: range option * + typeArgs: SynType list * + commaRanges: range list * // interstitial commas + greaterRange: range option * + range: range + + /// F# syntax: type * ... * type + /// F# syntax: struct (type * ... * type) + // the bool is true if / rather than * follows the type + | Tuple of + isStruct: bool * + elementTypes:(bool*SynType) list * + range: range + + /// F# syntax: {| id: type; ...; id: type |} + /// F# syntax: struct {| id: type; ...; id: type |} + | AnonRecd of + isStruct: bool * + fields:(Ident * SynType) list * + range: range + + /// F# syntax: type[] + | Array of + rank: int * + elementType: SynType * + range: range + + /// F# syntax: type -> type + | Fun of + argType: SynType * + returnType: SynType * + range: range + + /// F# syntax: 'Var + | Var of + typar: SynTypar * + range: range + + /// F# syntax: _ + | Anon of range: range + + /// F# syntax: typ with constraints + | WithGlobalConstraints of + typeName: SynType * + constraints: SynTypeConstraint list * + range: range + + /// F# syntax: #type + | HashConstraint of + innerType: SynType * + range: range + + /// F# syntax: for units of measure e.g. m / s + | MeasureDivide of + dividend: SynType * + divisor: SynType * + range: range + + /// F# syntax: for units of measure e.g. m^3, kg^1/2 + | MeasurePower of + baseMeasure: SynType * + exponent: SynRationalConst * + range: range + + /// F# syntax: 1, "abc" etc, used in parameters to type providers + /// For the dimensionless units i.e. 1, and static parameters to provided types + | StaticConstant of + constant: SynConst * + range: range + + /// F# syntax: const expr, used in static parameters to type providers + | StaticConstantExpr of + expr: SynExpr * + range: range + + /// F# syntax: ident=1 etc., used in static parameters to type providers + | StaticConstantNamed of + ident: SynType * + value: SynType * + range: range + + | Paren of + innerType: SynType * + range: range + + /// Gets the syntax range of this construct + member Range: range + +/// Represents a syntax tree for F# expressions +[] +type SynExpr = + + /// F# syntax: (expr) + /// + /// Parenthesized expressions. Kept in AST to distinguish A.M((x, y)) + /// from A.M(x, y), among other things. + | Paren of + expr: SynExpr * + leftParenRange: range * + rightParenRange: range option * + range: range + + /// F# syntax: <@ expr @>, <@@ expr @@> + /// + /// Quote(operator, isRaw, quotedSynExpr, isFromQueryExpression, m) + | Quote of + operator: SynExpr * + isRaw: bool * + quotedExpr: SynExpr * + isFromQueryExpression: bool * + range: range + + /// F# syntax: 1, 1.3, () etc. + | Const of + constant: SynConst * + range: range + + /// F# syntax: expr: type + | Typed of + expr: SynExpr * + targetType: SynType * + range: range + + /// F# syntax: e1, ..., eN + | Tuple of + isStruct: bool * + exprs: SynExpr list * + commaRanges: range list * // interstitial commas + range: range + + /// F# syntax: {| id1=e1; ...; idN=eN |} + /// F# syntax: struct {| id1=e1; ...; idN=eN |} + | AnonRecd of + isStruct: bool * + copyInfo:(SynExpr * BlockSeparator) option * + recordFields:(Ident * SynExpr) list * + range: range + + /// F# syntax: [ e1; ...; en ], [| e1; ...; en |] + | ArrayOrList of + isArray: bool * + exprs: SynExpr list * + range: range + + /// F# syntax: { f1=e1; ...; fn=en } + /// inherit includes location of separator (for tooling) + /// copyOpt contains range of the following WITH part (for tooling) + /// every field includes range of separator after the field (for tooling) + | Record of + baseInfo:(SynType * SynExpr * range * BlockSeparator option * range) option * + copyInfo:(SynExpr * BlockSeparator) option * + recordFields:(RecordFieldName * (SynExpr option) * BlockSeparator option) list * + range: range + + /// F# syntax: new C(...) + /// The flag is true if known to be 'family' ('protected') scope + | New of + isProtected: bool * + targetType: SynType * + expr: SynExpr * + range: range + + /// F# syntax: { new ... with ... } + | ObjExpr of + objType: SynType * + argOptions:(SynExpr * Ident option) option * + bindings: SynBinding list * + extraImpls: SynInterfaceImpl list * + newExprRange: range * + range: range + + /// F# syntax: 'while ... do ...' + | While of + whileSeqPoint: DebugPointAtWhile * + whileExpr: SynExpr * + doExpr: SynExpr * + range: range + + /// F# syntax: 'for i = ... to ... do ...' + | For of + forSeqPoint: DebugPointAtFor * + ident: Ident * + identBody: SynExpr * + direction: bool * + toBody: SynExpr * + doBody: SynExpr * + range: range + + /// F# syntax: 'for ... in ... do ...' + | ForEach of + forSeqPoint: DebugPointAtFor * + seqExprOnly: SeqExprOnly * + isFromSource: bool * + pat: SynPat * + enumExpr: SynExpr * + bodyExpr: SynExpr * + range: range + + /// F# syntax: [ expr ], [| expr |] + | ArrayOrListOfSeqExpr of + isArray: bool * + expr: SynExpr * + range: range + + /// F# syntax: { expr } + | CompExpr of + isArrayOrList: bool * + isNotNakedRefCell: bool ref * + expr: SynExpr * + range: range + + /// First bool indicates if lambda originates from a method. Patterns here are always "simple" + /// Second bool indicates if this is a "later" part of an iterated sequence of lambdas + /// parsedData keeps original parsed patterns and expression, + /// prior to transforming to "simple" patterns and iterated lambdas + /// + /// F# syntax: fun pat -> expr + | Lambda of + fromMethod: bool * + inLambdaSeq: bool * + args: SynSimplePats * + body: SynExpr * + parsedData: (SynPat list * SynExpr) option * + range: range + + /// F# syntax: function pat1 -> expr | ... | patN -> exprN + | MatchLambda of + isExnMatch: bool * + keywordRange: range * + matchClauses: SynMatchClause list * + matchSeqPoint: DebugPointAtBinding * + range: range + + /// F# syntax: match expr with pat1 -> expr | ... | patN -> exprN + | Match of + matchSeqPoint: DebugPointAtBinding * + expr: SynExpr * + clauses: SynMatchClause list * + range: range + + /// F# syntax: do expr + | Do of + expr: SynExpr * + range: range + + /// F# syntax: assert expr + | Assert of + expr: SynExpr * + range: range + + /// F# syntax: f x + /// + /// flag: indicates if the application is syntactically atomic, e.g. f.[1] is atomic, but 'f x' is not + /// isInfix is true for the first app of an infix operator, e.g. 1+2 + /// becomes App(App(+, 1), 2), where the inner node is marked isInfix + | App of + flag: ExprAtomicFlag * + isInfix: bool * + funcExpr: SynExpr * + argExpr: SynExpr * + range: range + + /// F# syntax: expr + | TypeApp of + expr: SynExpr * + lessRange: range * + typeArgs: SynType list * + commaRanges: range list * + greaterRange: range option * + typeArgsRange: range * + range: range + + /// F# syntax: let pat = expr in expr + /// F# syntax: let f pat1 .. patN = expr in expr + /// F# syntax: let rec f pat1 .. patN = expr in expr + /// F# syntax: use pat = expr in expr + | LetOrUse of + isRecursive: bool * + isUse: bool * + bindings: SynBinding list * + body: SynExpr * + range: range + + /// F# syntax: try expr with pat -> expr + | TryWith of + tryExpr: SynExpr * + tryRange: range * + withCases: SynMatchClause list * + withRange: range * + range: range * + trySeqPoint: DebugPointAtTry * + withSeqPoint: DebugPointAtWith + + /// F# syntax: try expr finally expr + | TryFinally of + tryExpr: SynExpr * + finallyExpr: SynExpr * + range: range * + trySeqPoint: DebugPointAtTry * + finallySeqPoint: DebugPointAtFinally + + /// F# syntax: lazy expr + | Lazy of + expr: SynExpr * + range: range + + /// F# syntax: expr; expr + /// + /// isTrueSeq: false indicates "let v = a in b; v" + | Sequential of + seqPoint: DebugPointAtSequential * + isTrueSeq: bool * + expr1: SynExpr * + expr2: SynExpr * + range: range + + /// F# syntax: if expr then expr + /// F# syntax: if expr then expr else expr + | IfThenElse of + ifExpr: SynExpr * + thenExpr: SynExpr * + elseExpr: SynExpr option * + spIfToThen: DebugPointAtBinding * + isFromErrorRecovery: bool * + ifToThenRange: range * + range: range + + /// F# syntax: ident + /// Optimized representation for SynExpr.LongIdent (false, [id], id.idRange) + | Ident of + ident: Ident + + /// F# syntax: ident.ident...ident + /// + /// isOptional: true if preceded by a '?' for an optional named parameter + /// altNameRefCell: Normally 'None' except for some compiler-generated + /// variables in desugaring pattern matching. See SynSimplePat.Id + | LongIdent of + isOptional: bool * + longDotId: LongIdentWithDots * + altNameRefCell: SynSimplePatAlternativeIdInfo ref option * + range: range + + /// F# syntax: ident.ident...ident <- expr + | LongIdentSet of + longDotId: LongIdentWithDots * + expr: SynExpr * + range: range + + /// F# syntax: expr.ident.ident + | DotGet of + expr: SynExpr * + rangeOfDot: range * + longDotId: LongIdentWithDots * + range: range + + /// F# syntax: expr.ident...ident <- expr + | DotSet of + targetExpr: SynExpr * + longDotId: LongIdentWithDots * + rhsExpr: SynExpr * + range: range + + /// F# syntax: expr <- expr + | Set of + targetExpr: SynExpr * + rhsExpr: SynExpr * + range: range + + /// F# syntax: expr.[expr, ..., expr] + | DotIndexedGet of + objectExpr: SynExpr * + indexExprs: SynIndexerArg list * + dotRange: range * + range: range + + /// F# syntax: expr.[expr, ..., expr] <- expr + | DotIndexedSet of + objectExpr: SynExpr * + indexExprs: SynIndexerArg list * + valueExpr: SynExpr * + leftOfSetRange: range * + dotRange: range * + range: range + + /// F# syntax: Type.Items(e1) <- e2, rarely used named-property-setter notation, e.g. Foo.Bar.Chars(3) <- 'a' + | NamedIndexedPropertySet of + longDotId: LongIdentWithDots * + expr1: SynExpr * + expr2: SynExpr * + range: range + + /// F# syntax: expr.Items (e1) <- e2, rarely used named-property-setter notation, e.g. (stringExpr).Chars(3) <- 'a' + | DotNamedIndexedPropertySet of + targetExpr: SynExpr * + longDotId: LongIdentWithDots * + argExpr: SynExpr * + rhsExpr: SynExpr * + range: range + + /// F# syntax: expr :? type + | TypeTest of + expr: SynExpr * + targetType: SynType * + range: range + + /// F# syntax: expr :> type + | Upcast of + expr: SynExpr * + targetType: SynType * + range: range + + /// F# syntax: expr :?> type + | Downcast of + expr: SynExpr * + targetType: SynType * + range: range + + /// F# syntax: upcast expr + | InferredUpcast of + expr: SynExpr * + range: range + + /// F# syntax: downcast expr + | InferredDowncast of + expr: SynExpr * + range: range + + /// F# syntax: null + | Null of + range: range + + /// F# syntax: &expr, &&expr + | AddressOf of + isByref: bool * + expr: SynExpr * + opRange: range * + range: range + + /// F# syntax: ((typar1 or ... or typarN): (member-dig) expr) + | TraitCall of + supportTys: SynTypar list * + traitSig: SynMemberSig * + argExpr: SynExpr * + range: range + + /// F# syntax: ... in ... + /// Computation expressions only, based on JOIN_IN token from lex filter + | JoinIn of + lhsExpr: SynExpr * + lhsRange: range * + rhsExpr: SynExpr * + range: range + + /// Used in parser error recovery and internally during type checking for translating computation expressions. + | ImplicitZero of + range: range + + /// Used internally during type checking for translating computation expressions. + | SequentialOrImplicitYield of + seqPoint:DebugPointAtSequential * + expr1:SynExpr * + expr2:SynExpr * + ifNotStmt:SynExpr * + range:range + + /// F# syntax: yield expr + /// F# syntax: return expr + /// Computation expressions only + | YieldOrReturn of + flags: (bool * bool) * + expr: SynExpr * + range: range + + /// F# syntax: yield! expr + /// F# syntax: return! expr + /// Computation expressions only + | YieldOrReturnFrom of + flags: (bool * bool) * + expr: SynExpr * + range: range + + /// F# syntax: let! pat = expr in expr + /// F# syntax: use! pat = expr in expr + /// F# syntax: let! pat = expr and! ... and! ... and! pat = expr in expr + /// Computation expressions only + | LetOrUseBang of + bindSeqPoint: DebugPointAtBinding * + isUse: bool * + isFromSource: bool * + pat: SynPat * + rhs: SynExpr * + andBangs:(DebugPointAtBinding * bool * bool * SynPat * SynExpr * range) list * + body:SynExpr * + range: range + + /// F# syntax: match! expr with pat1 -> expr | ... | patN -> exprN + | MatchBang of + matchSeqPoint: DebugPointAtBinding * + expr: SynExpr * + clauses: SynMatchClause list * + range: range + + /// F# syntax: do! expr + /// Computation expressions only + | DoBang of + expr: SynExpr * + range: range + + /// Only used in FSharp.Core + | LibraryOnlyILAssembly of + ilCode: obj * // this type is ILInstr[] but is hidden to avoid the representation of AbstractIL being public + typeArgs: SynType list * + args: SynExpr list * + retTy: SynType list * + range: range + + /// Only used in FSharp.Core + | LibraryOnlyStaticOptimization of + constraints: SynStaticOptimizationConstraint list * + expr: SynExpr * + optimizedExpr: SynExpr * + range: range + + /// Only used in FSharp.Core + | LibraryOnlyUnionCaseFieldGet of + expr: SynExpr * + longId: LongIdent * + fieldNum: int * + range: range + + /// Only used in FSharp.Core + | LibraryOnlyUnionCaseFieldSet of + expr: SynExpr * + longId: LongIdent * + fieldNum: int * + rhsExpr: SynExpr * + range: range + + /// Inserted for error recovery + | ArbitraryAfterError of + debugStr: string * + range: range + + /// Inserted for error recovery + | FromParseError of + expr: SynExpr * + range: range + + /// Inserted for error recovery when there is "expr." and missing tokens or error recovery after the dot + | DiscardAfterMissingQualificationAfterDot of + expr: SynExpr * + range: range + + /// 'use x = fixed expr' + | Fixed of + expr: SynExpr * + range: range + + /// F# syntax: interpolated string, e.g. "abc{x}" or "abc{x,3}" or "abc{x:N4}" + /// Note the string ranges include the quotes, verbatim markers, dollar sign and braces + | InterpolatedString of + contents: SynInterpolatedStringPart list * + synStringKind :SynStringKind * + range: range + + /// Gets the syntax range of this construct + member Range: range + + member RangeWithoutAnyExtraDot: range + + /// Attempt to get the range of the first token or initial portion only - this + /// is ad-hoc, just a cheap way to improve a certain 'query custom operation' error range + member RangeOfFirstPortion: range + + /// Indicates if this expression arises from error recovery + member IsArbExprAndThusAlreadyReportedError: bool + +[] +type SynInterpolatedStringPart = + | String of value: string * range: range + | FillExpr of fillExpr: SynExpr * qualifiers: Ident option + +/// Represents a syntax tree for an F# indexer expression argument +[] +type SynIndexerArg = + /// A two-element range indexer argument + | Two of + expr1: SynExpr * + fromEnd1: bool * + expr2: SynExpr * + fromEnd2: bool * + range1: range * + range2: range + + /// A one-element item indexer argument + | One of + expr: SynExpr * + fromEnd: bool * range + + /// Gets the syntax range of this construct + member Range: range + + /// Get the one or two expressions as a list + member Exprs: SynExpr list + +/// Represents a syntax tree for simple F# patterns +[] +type SynSimplePat = + + /// Indicates a simple pattern variable. + /// + /// altNameRefCell: + /// Normally 'None' except for some compiler-generated variables in desugaring pattern matching. + /// Pattern processing sets this reference for hidden variable introduced + /// by desugaring pattern matching in arguments. The info indicates an + /// alternative (compiler generated) identifier to be used because the + /// name of the identifier is already bound. + /// + /// isCompilerGenerated: true if a compiler generated name + /// isThisVar: true if 'this' variable in member + /// isOptArg: true if a '?' is in front of the name + | Id of + ident: Ident * + altNameRefCell: SynSimplePatAlternativeIdInfo ref option * + isCompilerGenerated: bool * + isThisVar: bool * + isOptArg: bool * + range: range + + /// A type annotated simple pattern + | Typed of + pat: SynSimplePat * + targetType: SynType * + range: range + + /// An attributed simple pattern + | Attrib of + pat: SynSimplePat * + attributes: SynAttributes * + range: range + + member Range: range + +/// Represents the alternative identifier for a simple pattern +[] +type SynSimplePatAlternativeIdInfo = + + /// We have not decided to use an alternative name in the pattern and related expression + | Undecided of Ident + + /// We have decided to use an alternative name in the pattern and related expression + | Decided of Ident + +/// Represents a syntax tree for a static optimization constraint in the F# core library +[] +type SynStaticOptimizationConstraint = + + /// A static optimization conditional that activates for a particular type instantiation + | WhenTyparTyconEqualsTycon of + typar: SynTypar * + rhsType: SynType * + range: range + + /// A static optimization conditional that activates for a struct + | WhenTyparIsStruct of + typar: SynTypar * + range: range + +/// Represents a simple set of variable bindings a, (a, b) or (a: Type, b: Type) at a lambda, +/// function definition or other binding point, after the elimination of pattern matching +/// from the construct, e.g. after changing a "function pat1 -> rule1 | ..." to a +/// "fun v -> match v with ..." +[] +type SynSimplePats = + | SimplePats of + pats: SynSimplePat list * + range: range + + | Typed of + pats: SynSimplePats * + targetType: SynType * + range: range + + member Range: range + +/// Represents a syntax tree for arguments patterns +[] +type SynArgPats = + | Pats of + pats: SynPat list + + | NamePatPairs of + pats: (Ident * SynPat) list * + range: range + +/// Represents a syntax tree for an F# pattern +[] +type SynPat = + + /// A constant in a pattern + | Const of + constant: SynConst * + range: range + + /// A wildcard '_' in a pattern + | Wild of + range: range + + /// A name pattern 'ident' but @dsyme wants to keep the old name "named" + /// when this double-purposed to also represent 'pat as ident' to reduce churn + | Named of + ident: Ident * + isSelfIdentifier: bool * + accessibility: SynAccess option * + range: range + + /// A typed pattern 'pat : type' + | Typed of + pat: SynPat * + targetType: SynType * + range: range + + /// An attributed pattern, used in argument or declaration position + | Attrib of + pat: SynPat * + attributes: SynAttributes * + range: range + + /// A disjunctive pattern 'pat1 | pat2' + | Or of + lhsPat: SynPat * + rhsPat: SynPat * + range: range + + /// A conjunctive pattern 'pat1 & pat2' + | Ands of + pats: SynPat list * + range: range + + /// A conjunctive pattern 'pat1 as pat2' + | As of + lhsPat: SynPat * + rhsPat: SynPat * + range: range + + /// A long identifier pattern possibly with argument patterns + | LongIdent of + longDotId: LongIdentWithDots * + extraId: Ident option * // holds additional ident for tooling + typarDecls: SynValTyparDecls option * // usually None: temporary used to parse "f<'a> x = x" + argPats: SynArgPats * + accessibility: SynAccess option * + range: range + + /// A tuple pattern + | Tuple of + isStruct: bool * + elementPats: SynPat list * + range: range + + /// A parenthesized pattern + | Paren of + pat: SynPat * + range: range + + /// An array or a list as a pattern + | ArrayOrList of + isArray: bool * + elementPats: SynPat list * + range: range + + /// A record pattern + | Record of + fieldPats: ((LongIdent * Ident) * SynPat) list * + range: range + + /// The 'null' pattern + | Null of + range: range + + /// '?id' -- for optional argument names + | OptionalVal of + ident: Ident * + range: range + + /// A type test pattern ':? type ' + | IsInst of + pat: SynType * + range: range + + /// <@ expr @>, used for active pattern arguments + | QuoteExpr of + expr: SynExpr * + range: range + + /// Deprecated character range: ranges + | DeprecatedCharRange of + startChar: char * + endChar: char * + range: range + + /// Used internally in the type checker + | InstanceMember of + thisId: Ident * + memberId: Ident * + toolingId: Ident option * // holds additional ident for tooling + accessibility: SynAccess option * + range: range + + /// A pattern arising from a parse error + | FromParseError of + pat: SynPat * + range: range + + /// Gets the syntax range of this construct + member Range: range + +/// Represents a set of bindings that implement an interface +[] +type SynInterfaceImpl = + | SynInterfaceImpl of + interfaceTy: SynType * + bindings: SynBinding list * + range: range + +/// Represents a clause in a 'match' expression +[] +type SynMatchClause = + | SynMatchClause of + pat: SynPat * + whenExpr: SynExpr option * + resultExpr: SynExpr * + range: range * + spInfo: DebugPointForTarget + + /// Gets the syntax range of part of this construct + member RangeOfGuardAndRhs: range + + /// Gets the syntax range of this construct + member Range: range + +/// Represents an attribute +[] +type SynAttribute = + { /// The name of the type for the attribute + TypeName: LongIdentWithDots + + /// The argument of the attribute, perhaps a tuple + ArgExpr: SynExpr + + /// Target specifier, e.g. "assembly", "module", etc. + Target: Ident option + + /// Is this attribute being applied to a property getter or setter? + AppliesToGetterAndSetter: bool + + /// The syntax range of the attribute + Range: range + } + +/// List of attributes enclosed in [< ... >]. +[] +type SynAttributeList = + { + /// The list of attributes + Attributes: SynAttribute list + + /// The syntax range of the list of attributes + Range: range + } + +type SynAttributes = SynAttributeList list + +/// Represents extra information about the declaration of a value +[] +type SynValData = + | SynValData of + memberFlags: SynMemberFlags option * + valInfo: SynValInfo * + thisIdOpt: Ident option + + member SynValInfo: SynValInfo + +/// Represents a binding for a 'let' or 'member' declaration +[] +type SynBinding = + | SynBinding of + accessibility: SynAccess option * + kind: SynBindingKind * + mustInline: bool * + isMutable: bool * + attributes: SynAttributes * + xmlDoc: PreXmlDoc * + valData: SynValData * + headPat: SynPat * + returnInfo: SynBindingReturnInfo option * + expr: SynExpr * + range: range * + seqPoint: DebugPointAtBinding + + // no member just named "Range", as that would be confusing: + // - for everything else, the 'range' member that appears last/second-to-last is the 'full range' of the whole tree construct + // - but for Binding, the 'range' is only the range of the left-hand-side, the right-hand-side range is in the SynExpr + // - so we use explicit names to avoid confusion + member RangeOfBindingWithoutRhs: range + + member RangeOfBindingWithRhs: range + + member RangeOfHeadPattern: range + +/// Represents the return information in a binding for a 'let' or 'member' declaration +[] +type SynBindingReturnInfo = + | SynBindingReturnInfo of + typeName: SynType * + range: range * + attributes: SynAttributes + +/// Represents the flags for a 'member' declaration +[] +type SynMemberFlags = + { + /// The member is an instance member (non-static) + IsInstance: bool + + /// The member is a dispatch slot + IsDispatchSlot: bool + + /// The member is an 'override' or explicit interface implementation + IsOverrideOrExplicitImpl: bool + + /// The member is 'final' + IsFinal: bool + + /// The kind of the member + MemberKind: SynMemberKind + } + +/// Note the member kind is actually computed partially by a syntax tree transformation in tc.fs +[] +type SynMemberKind = + + /// The member is a class initializer + | ClassConstructor + + /// The member is a object model constructor + | Constructor + + /// The member kind is not yet determined + | Member + + /// The member kind is property getter + | PropertyGet + + /// The member kind is property setter + | PropertySet + + /// An artificial member kind used prior to the point where a + /// get/set property is split into two distinct members. + | PropertyGetSet + +/// Represents the syntax tree for a member signature (used in signature files, abstract member declarations +/// and member constraints) +[] +type SynMemberSig = + + /// A member definition in a type in a signature file + | Member of + memberSig: SynValSig * + flags: SynMemberFlags * + range: range + + /// An interface definition in a type in a signature file + | Interface of + interfaceType: SynType * + range: range + + /// An 'inherit' definition in a type in a signature file + | Inherit of + inheritedType: SynType * + range: range + + /// A 'val' definition in a type in a signature file + | ValField of + field: SynField * + range: range + + /// A nested type definition in a signature file (an unimplemented feature) + | NestedType of + nestedType: SynTypeDefnSig * + range: range + + /// Gets the syntax range of this construct + member Range: range + +/// Represents the kind of a type definition whether explicit or inferred +[] +type SynTypeDefnKind = + | Unspecified + | Class + | Interface + | Struct + | Record + | Union + | Abbrev + | Opaque + | Augmentation + | IL + | Delegate of signature: SynType * signatureInfo: SynValInfo + +/// Represents the syntax tree for the core of a simple type definition, in either signature +/// or implementation. +[] +type SynTypeDefnSimpleRepr = + + /// A union type definition, type X = A | B + | Union of + accessibility: SynAccess option * + unionCases: SynUnionCase list * + range: range + + /// An enum type definition, type X = A = 1 | B = 2 + | Enum of + cases: SynEnumCase list * + range: range + + /// A record type definition, type X = { A: int; B: int } + | Record of + accessibility: SynAccess option * + recordFields: SynField list * + range: range + + /// An object oriented type definition. This is not a parse-tree form, but represents the core + /// type representation which the type checker splits out from the "ObjectModel" cases of type definitions. + | General of + kind: SynTypeDefnKind * + inherits: (SynType * range * Ident option) list * + slotsigs: (SynValSig * SynMemberFlags) list * + fields: SynField list * + isConcrete: bool * + isIncrClass: bool * + implicitCtorSynPats: SynSimplePats option * + range: range + + /// A type defined by using an IL assembly representation. Only used in FSharp.Core. + /// + /// F# syntax: "type X = (# "..."#) + | LibraryOnlyILAssembly of + ilType: obj * // this type is ILType but is hidden to avoid the representation of AbstractIL being public + range: range + + /// A type abbreviation, "type X = A.B.C" + | TypeAbbrev of + detail: ParserDetail * + rhsType: SynType * + range: range + + /// An abstract definition, "type X" + | None of + range: range + + /// An exception definition, "exception E = ..." + | Exception of + exnRepr: SynExceptionDefnRepr + + /// Gets the syntax range of this construct + member Range: range + +/// Represents the syntax tree for one case in an enum definition. +[] +type SynEnumCase = + + | SynEnumCase of + attributes: SynAttributes * + ident: Ident * + value: SynConst * + valueRange: range * + xmlDoc: PreXmlDoc * + range: range + + /// Gets the syntax range of this construct + member Range: range + +/// Represents the syntax tree for one case in a union definition. +[] +type SynUnionCase = + + | SynUnionCase of + attributes: SynAttributes * + ident: Ident * + caseType: SynUnionCaseKind * + xmlDoc: PreXmlDoc * + accessibility: SynAccess option * + range: range + + /// Gets the syntax range of this construct + member Range: range + +/// Represents the syntax tree for the right-hand-side of union definition, excluding members, +/// in either a signature or implementation. +[] +type SynUnionCaseKind = + + /// Normal style declaration + | Fields of + cases: SynField list + + /// Full type spec given by 'UnionCase: ty1 * tyN -> rty'. Only used in FSharp.Core, otherwise a warning. + | FullType of + fullType: SynType * + fullTypeInfo: SynValInfo + +/// Represents the syntax tree for the right-hand-side of a type definition in a signature. +/// Note: in practice, using a discriminated union to make a distinction between +/// "simple" types and "object oriented" types is not particularly useful. +[] +type SynTypeDefnSigRepr = + + /// Indicates the right right-hand-side is a class, struct, interface or other object-model type + | ObjectModel of + kind: SynTypeDefnKind * + memberSigs: SynMemberSig list * + range: range + + /// Indicates the right right-hand-side is a record, union or other simple type. + | Simple of + repr: SynTypeDefnSimpleRepr * + range: range + + | Exception of + repr: SynExceptionDefnRepr + + /// Gets the syntax range of this construct + member Range: range + +/// Represents the syntax tree for a type definition in a signature +[] +type SynTypeDefnSig = + + /// The information for a type definition in a signature + | SynTypeDefnSig of + typeInfo: SynComponentInfo * + typeRepr: SynTypeDefnSigRepr * + members: SynMemberSig list * + range: range + + /// Gets the syntax range of this construct + member Range: range + +/// Represents the syntax tree for a field declaration in a record or class +[] +type SynField = + | SynField of + attributes: SynAttributes * + isStatic: bool * + idOpt: Ident option * + fieldType: SynType * + isMutable: bool * + xmlDoc: PreXmlDoc * + accessibility: SynAccess option * + range: range + +/// Represents the syntax tree associated with the name of a type definition or module +/// in signature or implementation. +/// +/// This includes the name, attributes, type parameters, constraints, documentation and accessibility +/// for a type definition or module. For modules, entries such as the type parameters are +/// always empty. +[] +type SynComponentInfo = + | SynComponentInfo of + attributes: SynAttributes * + typeParams: SynTyparDecls option * + constraints: SynTypeConstraint list * + longId: LongIdent * + xmlDoc: PreXmlDoc * + preferPostfix: bool * + accessibility: SynAccess option * + range: range + + /// Gets the syntax range of this construct + member Range: range + +/// Represents the syntax tree for a 'val' definition in an abstract slot or a signature file +[] +type SynValSig = + | SynValSig of + attributes: SynAttributes * + ident: Ident * + explicitValDecls: SynValTyparDecls * + synType: SynType * + arity: SynValInfo * + isInline: bool * + isMutable: bool * + xmlDoc: PreXmlDoc * + accessibility: SynAccess option * + synExpr: SynExpr option * + range: range + + member RangeOfId: range + + member SynInfo: SynValInfo + + member SynType: SynType + +/// The argument names and other metadata for a member or function +[] +type SynValInfo = + + /// SynValInfo(curriedArgInfos, returnInfo) + | SynValInfo of curriedArgInfos: SynArgInfo list list * returnInfo: SynArgInfo + + member CurriedArgInfos: SynArgInfo list list + + member ArgNames: string list + +/// Represents the argument names and other metadata for a parameter for a member or function +[] +type SynArgInfo = + + | SynArgInfo of + attributes: SynAttributes * + optional: bool * + ident: Ident option + + member Ident: Ident option + +/// Represents the names and other metadata for the type parameters for a member or function +[] +type SynValTyparDecls = + | SynValTyparDecls of + typars: SynTyparDecls option * + canInfer: bool + +/// Represents the syntactic elements associated with the "return" of a function or method. +[] +type SynReturnInfo = + | SynReturnInfo of returnType: (SynType * SynArgInfo) * range: range + +/// Represents the right hand side of an exception declaration 'exception E = ... ' +[] +type SynExceptionDefnRepr = + + | SynExceptionDefnRepr of + attributes: SynAttributes * + caseName: SynUnionCase * + longId: LongIdent option * + xmlDoc: PreXmlDoc * + accessibility: SynAccess option * + range: range + + /// Gets the syntax range of this construct + member Range: range + +/// Represents the right hand side of an exception declaration 'exception E = ... ' plus +/// any member definitions for the exception +[] +type SynExceptionDefn = + + | SynExceptionDefn of + exnRepr: SynExceptionDefnRepr * + members: SynMemberDefns * + range: range + + /// Gets the syntax range of this construct + member Range: range + +/// Represents the right hand side of a type or exception declaration 'type C = ... ' plus +/// any additional member definitions for the type +[] +type SynTypeDefnRepr = + + /// An object model type definition (class or interface) + | ObjectModel of + kind: SynTypeDefnKind * + members: SynMemberDefns * + range: range + + /// A simple type definition (record, union, abbreviation) + | Simple of + simpleRepr: SynTypeDefnSimpleRepr * + range: range + + /// An exception definition + | Exception of + exnRepr: SynExceptionDefnRepr + + /// Gets the syntax range of this construct + member Range: range + +/// Represents a type or exception declaration 'type C = ... ' plus +/// any additional member definitions for the type +[] +type SynTypeDefn = + | SynTypeDefn of + typeInfo: SynComponentInfo * + typeRepr: SynTypeDefnRepr * + members: SynMemberDefns * + implicitConstructor: SynMemberDefn option * + range: range + + /// Gets the syntax range of this construct + member Range: range + +/// Represents a definition element within a type definition, e.g. 'member ... ' +[] +type SynMemberDefn = + + /// An 'open' definition within a type + | Open of + target: SynOpenDeclTarget * + range: range + + /// A 'member' definition within a type + | Member of + memberDefn: SynBinding * + range: range + + /// An implicit constructor definition + | ImplicitCtor of + accessibility: SynAccess option * + attributes: SynAttributes * + ctorArgs: SynSimplePats * + selfIdentifier: Ident option * + xmlDoc: PreXmlDoc * + range: range + + /// An implicit inherit definition, 'inherit (args...) as base' + | ImplicitInherit of + inheritType: SynType * + inheritArgs: SynExpr * + inheritAlias: Ident option * + range: range + + /// A 'let' definition within a class + | LetBindings of + bindings: SynBinding list * + isStatic: bool * + isRecursive: bool * + range: range + + /// An abstract slot definition within a class or interface + | AbstractSlot of + slotSig: SynValSig * + flags: SynMemberFlags * + range: range + + /// An interface implementation definition within a class + | Interface of + interfaceType: SynType * + members: SynMemberDefns option * + range: range + + /// An 'inherit' definition within a class + | Inherit of + baseType: SynType * + asIdent: Ident option * + range: range + + /// A 'val' definition within a class + | ValField of + fieldInfo: SynField * + range: range + + /// A nested type definition, a feature that is not implemented + | NestedType of + typeDefn: SynTypeDefn * + accessibility: SynAccess option * + range: range + + /// An auto-property definition, F# syntax: 'member val X = expr' + | AutoProperty of + attributes: SynAttributes * + isStatic: bool * + ident: Ident * + typeOpt: SynType option * + propKind: SynMemberKind * + memberFlags:(SynMemberKind -> SynMemberFlags) * + xmlDoc: PreXmlDoc * + accessibility: SynAccess option * + synExpr: SynExpr * + getSetRange: range option * + range: range + + /// Gets the syntax range of this construct + member Range: range + +type SynMemberDefns = SynMemberDefn list + +/// Represents a definition within a module +[] +type SynModuleDecl = + + /// A module abbreviation definition 'module X = A.B.C' + | ModuleAbbrev of + ident: Ident * + longId: LongIdent * + range: range + + /// A nested module definition 'module X = ...' + | NestedModule of + moduleInfo: SynComponentInfo * + isRecursive: bool * + decls: SynModuleDecl list * + isContinuing: bool * + range: range + + /// A 'let' definition within a module + | Let of + isRecursive: bool * + bindings: SynBinding list * + range: range + + /// A 'do expr' within a module + | DoExpr of + spInfo: DebugPointAtBinding * + expr: SynExpr * + range: range + + /// One or more 'type' definitions within a module + | Types of + typeDefns: SynTypeDefn list * + range: range + + /// An 'exception' definition within a module + | Exception of + exnDefn: SynExceptionDefn * + range: range + + /// An 'open' definition within a module + | Open of + target: SynOpenDeclTarget * + range: range + + /// An attribute definition within a module, for assembly and .NET module attributes + | Attributes of + attributes: SynAttributes * + range: range + + /// A hash directive within a module + | HashDirective of + hashDirective: ParsedHashDirective * + range: range + + /// A namespace fragment within a module + | NamespaceFragment of + fragment: SynModuleOrNamespace + + /// Gets the syntax range of this construct + member Range: range + +/// Represents the target of the open declaration +[] +type SynOpenDeclTarget = + + /// A 'open' declaration + | ModuleOrNamespace of longId: LongIdent * range: range + + /// A 'open type' declaration + | Type of typeName: SynType * range: range + + /// Gets the syntax range of this construct + member Range: range + +/// Represents the right hand side of an exception definition in a signature file +[] +type SynExceptionSig = + | SynExceptionSig of + exnRepr: SynExceptionDefnRepr * + members: SynMemberSig list * + range: range + +/// Represents a definition within a module or namespace in a signature file +[] +type SynModuleSigDecl = + + /// A module abbreviation definition within a module or namespace in a signature file + | ModuleAbbrev of + ident: Ident * + longId: LongIdent * + range: range + + /// A nested module definition within a module or namespace in a signature file + | NestedModule of + moduleInfo: SynComponentInfo * + isRecursive: bool * + moduleDecls: SynModuleSigDecl list * + range: range + + /// A 'val' definition within a module or namespace in a signature file, corresponding + /// to a 'let' definition in the implementation + | Val of + valSig: SynValSig * range: range + + /// A set of one or more type definitions within a module or namespace in a signature file + | Types of + types: SynTypeDefnSig list * + range: range + + /// An exception definition within a module or namespace in a signature file + | Exception of + exnSig: SynExceptionSig * + range: range + + /// An 'open' definition within a module or namespace in a signature file + | Open of + target: SynOpenDeclTarget * + range: range + + /// A hash directive within a module or namespace in a signature file + | HashDirective of + hashDirective: ParsedHashDirective * + range: range + + /// A namespace fragment within a namespace in a signature file + | NamespaceFragment of + SynModuleOrNamespaceSig + + /// Gets the syntax range of this construct + member Range: range + +/// Represents the kind of a module or namespace definition +[] +type SynModuleOrNamespaceKind = + /// A module is explicitly named 'module N' + | NamedModule + + /// A module is anonymously named, e.g. a script + | AnonModule + + /// A namespace is explicitly declared + | DeclaredNamespace + + /// A namespace is declared 'global' + | GlobalNamespace + + /// Indicates if this is a module definition + member IsModule: bool + +/// Represents the definition of a module or namespace +[] +type SynModuleOrNamespace = + | SynModuleOrNamespace of + longId: LongIdent * + isRecursive: bool * + kind: SynModuleOrNamespaceKind * + decls: SynModuleDecl list * + xmlDoc: PreXmlDoc * + attribs: SynAttributes * + accessibility: SynAccess option * + range: range + + /// Gets the syntax range of this construct + member Range: range + +/// Represents the definition of a module or namespace in a signature file +[] +type SynModuleOrNamespaceSig = + | SynModuleOrNamespaceSig of + longId: LongIdent * + isRecursive: bool * + kind: SynModuleOrNamespaceKind * + decls: SynModuleSigDecl list * + xmlDoc: PreXmlDoc * + attribs: SynAttributes * + accessibility: SynAccess option * + range: range + + /// Gets the syntax range of this construct + member Range: range + +/// Represents a parsed hash directive argument +[] +type ParsedHashDirectiveArgument = + | String of value: string * stringKind: SynStringKind * range: Range + | SourceIdentifier of constant: string * value: string * range: Range + + /// Gets the syntax range of this construct + member Range: range + +/// Represents a parsed hash directive +[] +type ParsedHashDirective = + | ParsedHashDirective of + ident: string * + args: ParsedHashDirectiveArgument list * + range: range + +/// Represents the syntax tree for the contents of a parsed implementation file +[] +type ParsedImplFileFragment = + + /// An implementation file which is an anonymous module definition, e.g. a script + | AnonModule of + decls: SynModuleDecl list * + range: range + + /// An implementation file is a named module definition, 'module N' + | NamedModule of + namedModule: SynModuleOrNamespace + + /// An implementation file fragment which declares a namespace fragment + | NamespaceFragment of + longId: LongIdent * + isRecursive: bool * + kind: SynModuleOrNamespaceKind * + decls: SynModuleDecl list * + xmlDoc: PreXmlDoc * + attributes: SynAttributes * + range: range + +/// Represents the syntax tree for the contents of a parsed signature file +[] +type ParsedSigFileFragment = + + /// A signature file which is an anonymous module, e.g. the signature file for the final file in an application + | AnonModule of + decls: SynModuleSigDecl list * + range: range + + /// A signature file which is a module, 'module N' + | NamedModule of + namedModule: SynModuleOrNamespaceSig + + /// A signature file namespace fragment + | NamespaceFragment of + longId: LongIdent * + isRecursive: bool * + kind: SynModuleOrNamespaceKind * + decls: SynModuleSigDecl list * + xmlDoc: PreXmlDoc * + attributes: SynAttributes * + range: range + +/// Represents a parsed syntax tree for an F# Interactive interaction +[] +type ParsedScriptInteraction = + | Definitions of + defns: SynModuleDecl list * + range: range + + | HashDirective of + hashDirective: ParsedHashDirective * + range: range + +/// Represents a parsed implementation file made up of fragments +[] +type ParsedImplFile = + | ParsedImplFile of + hashDirectives: ParsedHashDirective list * + fragments: ParsedImplFileFragment list + +/// Represents a parsed signature file made up of fragments +[] +type ParsedSigFile = + | ParsedSigFile of + hashDirectives: ParsedHashDirective list * + fragments: ParsedSigFileFragment list + +/// Represents a scoped pragma +[] +type ScopedPragma = + /// A pragma to turn a warning off + | WarningOff of range: range * warningNumber: int + +/// Represents a qualifying name for anonymous module specifications and implementations, +[] +type QualifiedNameOfFile = + | QualifiedNameOfFile of Ident + + /// The name of the file + member Text: string + + /// The identifier for the name of the file + member Id: Ident + + /// Gets the syntax range of this construct + member Range: range + +/// Represents the full syntax tree, file name and other parsing information for an implementation file +[] +type ParsedImplFileInput = + | ParsedImplFileInput of + fileName: string * + isScript: bool * + qualifiedNameOfFile: QualifiedNameOfFile * + scopedPragmas: ScopedPragma list * + hashDirectives: ParsedHashDirective list * + modules: SynModuleOrNamespace list * + isLastCompiland: (bool * bool) + +/// Represents the full syntax tree, file name and other parsing information for a signature file +[] +type ParsedSigFileInput = + | ParsedSigFileInput of + fileName: string * + qualifiedNameOfFile: QualifiedNameOfFile * + scopedPragmas: ScopedPragma list * + hashDirectives: ParsedHashDirective list * + modules: SynModuleOrNamespaceSig list + +/// Represents the syntax tree for a parsed implementation or signature file +[] +type ParsedInput = + /// A parsed implementation file + | ImplFile of ParsedImplFileInput + + /// A parsed signature file + | SigFile of ParsedSigFileInput + + /// Gets the file name for the parsed input + member FileName: string + + /// Gets the syntax range of this construct + member Range: range diff --git a/src/fsharp/SyntaxTreeOps.fs b/src/fsharp/SyntaxTreeOps.fs index ede78c3addd..b620983ec25 100644 --- a/src/fsharp/SyntaxTreeOps.fs +++ b/src/fsharp/SyntaxTreeOps.fs @@ -1,33 +1,22 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module public FSharp.Compiler.SyntaxTreeOps +module FSharp.Compiler.SyntaxTreeOps -open Internal.Utilities.Text.Parsing - -open FSharp.Compiler -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Library open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree -open FSharp.Compiler.Range -open FSharp.Compiler.XmlDoc - -//---------------------------------------------------------------------- -// Construct syntactic AST nodes -//----------------------------------------------------------------------- +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Xml +/// Generate implicit argument names in parsing type SynArgNameGenerator() = let mutable count = 0 let generatedArgNamePrefix = "_arg" - member __.New() : string = count <- count + 1; generatedArgNamePrefix + string count - member __.Reset() = count <- 0 - -//---------------------------------------------------------------------- -// AST and parsing utilities. -//---------------------------------------------------------------------- + member _.New() : string = count <- count + 1; generatedArgNamePrefix + string count + member _.Reset() = count <- 0 let ident (s, r) = Ident(s, r) @@ -70,7 +59,7 @@ let mkSynCompGenSimplePatVar id = SynSimplePat.Id (id, None, true, false, false, /// Match a long identifier, including the case for single identifiers which gets a more optimized node in the syntax tree. let (|LongOrSingleIdent|_|) inp = match inp with - | SynExpr.LongIdent (isOpt, lidwd, altId, _m) -> Some (isOpt, lidwd, altId, lidwd.RangeSansAnyExtraDot) + | SynExpr.LongIdent (isOpt, lidwd, altId, _m) -> Some (isOpt, lidwd, altId, lidwd.RangeWithoutAnyExtraDot) | SynExpr.Ident id -> Some (false, LongIdentWithDots([id], []), None, id.idRange) | _ -> None @@ -100,13 +89,13 @@ let rec IsControlFlowExpression e = | SynExpr.Typed (e, _, _) -> IsControlFlowExpression e | _ -> false -let mkAnonField (ty: SynType) = Field([], false, None, ty, false, PreXmlDoc.Empty, None, ty.Range) +let mkSynAnonField (ty: SynType) = SynField([], false, None, ty, false, PreXmlDoc.Empty, None, ty.Range) -let mkNamedField (ident, ty: SynType, m) = Field([], false, Some ident, ty, false, PreXmlDoc.Empty, None, m) +let mkSynNamedField (ident, ty: SynType, m) = SynField([], false, Some ident, ty, false, PreXmlDoc.Empty, None, m) -let mkSynPatVar vis (id: Ident) = SynPat.Named (SynPat.Wild id.idRange, id, false, vis, id.idRange) +let mkSynPatVar vis (id: Ident) = SynPat.Named (id, false, vis, id.idRange) -let mkSynThisPatVar (id: Ident) = SynPat.Named (SynPat.Wild id.idRange, id, true, None, id.idRange) +let mkSynThisPatVar (id: Ident) = SynPat.Named (id, true, None, id.idRange) let mkSynPatMaybeVar lidwd vis m = SynPat.LongIdent (lidwd, None, None, SynArgPats.Pats [], vis, m) @@ -151,7 +140,7 @@ let rec SimplePatOfPat (synArgNameGenerator: SynArgNameGenerator) p = SynSimplePat.Attrib(p2, attribs, m), laterF - | SynPat.Named (SynPat.Wild _, v, thisV, _, m) -> + | SynPat.Named (v, thisV, _, m) -> SynSimplePat.Id (v, None, false, thisV, false, m), None @@ -172,9 +161,14 @@ let rec SimplePatOfPat (synArgNameGenerator: SynArgNameGenerator) p = // It may be a real variable, in which case we want to maintain its name. // But it may also be a nullary union case or some other identifier. // In this case, we want to use an alternate compiler generated name for the hidden variable. - let altNameRefCell = Some (ref (Undecided (mkSynId m (synArgNameGenerator.New())))) + let altNameRefCell = Some (ref (SynSimplePatAlternativeIdInfo.Undecided (mkSynId m (synArgNameGenerator.New())))) let item = mkSynIdGetWithAlt m id altNameRefCell false, altNameRefCell, id, item + | SynPat.Named(ident, _, _, _) + | SynPat.As(_, SynPat.Named(ident, _, _, _), _) -> + // named pats should be referred to as their name in docs, tooltips, etc. + let item = mkSynIdGet m ident.idText + false, None, ident, item | _ -> let nm = synArgNameGenerator.New() let id = mkSynId m nm @@ -182,8 +176,8 @@ let rec SimplePatOfPat (synArgNameGenerator: SynArgNameGenerator) p = true, None, id, item SynSimplePat.Id (id, altNameRefCell, isCompGen, false, false, id.idRange), Some (fun e -> - let clause = Clause(p, None, e, m, DebugPointForTarget.No) - SynExpr.Match (NoDebugPointAtInvisibleBinding, item, [clause], clause.Range)) + let clause = SynMatchClause(p, None, e, m, DebugPointForTarget.No) + SynExpr.Match (DebugPointAtBinding.NoneAtInvisible, item, [clause], clause.Range)) let appFunOpt funOpt x = match funOpt with None -> x | Some f -> f x @@ -382,7 +376,7 @@ let arbExpr (debugStr, range: range) = SynExpr.ArbitraryAfterError (debugStr, ra let unionRangeWithListBy projectRangeFromThing m listOfThing = (m, listOfThing) ||> List.fold (fun m thing -> unionRanges m (projectRangeFromThing thing)) -let mkAttributeList attrs range = +let mkAttributeList attrs range : SynAttributeList list = [{ Attributes = attrs Range = range }] @@ -394,6 +388,21 @@ let ConcatAttributesLists (attrsLists: SynAttributeList list) = let (|Attributes|) synAttributes = ConcatAttributesLists synAttributes +let (|TyparDecls|) (typarDecls: SynTyparDecls option) = + typarDecls + |> Option.map (fun x -> x.TyparDecls) + |> Option.defaultValue [] + +let (|TyparsAndConstraints|) (typarDecls: SynTyparDecls option) = + typarDecls + |> Option.map (fun x -> x.TyparDecls, x.Constraints) + |> Option.defaultValue ([], []) + +let (|ValTyparDecls|) (SynValTyparDecls(typarDecls, canInfer)) = + typarDecls + |> Option.map (fun x -> x.TyparDecls, x.Constraints, canInfer) + |> Option.defaultValue ([], [], canInfer) + let rangeOfNonNilAttrs (attrs: SynAttributes) = (attrs.Head.Range, attrs.Tail) ||> unionRangeWithListBy (fun a -> a.Range) @@ -489,7 +498,7 @@ module SynInfo = /// rather than member signatures. let AdjustMemberArgs memFlags infosForArgs = match infosForArgs with - | [] when memFlags=MemberKind.Member -> [] :: infosForArgs + | [] when memFlags = SynMemberKind.Member -> [] :: infosForArgs | _ -> infosForArgs /// For 'let' definitions, we infer syntactic argument information from the r.h.s. of a definition, if it @@ -515,7 +524,7 @@ module SynInfo = /// Infer the syntactic information for a 'let' or 'member' definition, based on the argument pattern, /// any declared return information (e.g. .NET attributes on the return element), and the r.h.s. expression /// in the case of 'let' definitions. - let InferSynValData (memberFlagsOpt, pat, retInfo, origRhsExpr) = + let InferSynValData (memberFlagsOpt: SynMemberFlags option, pat, retInfo, origRhsExpr) = let infosForExplicitArgs = match pat with @@ -557,63 +566,63 @@ let mkSynBindingRhs staticOptimizations rhsExpr mRhs retInfo = let mkSynBinding (xmlDoc, headPat) (vis, isInline, isMutable, mBind, spBind, retInfo, origRhsExpr, mRhs, staticOptimizations, attrs, memberFlagsOpt) = let info = SynInfo.InferSynValData (memberFlagsOpt, Some headPat, retInfo, origRhsExpr) let rhsExpr, retTyOpt = mkSynBindingRhs staticOptimizations origRhsExpr mRhs retInfo - Binding (vis, NormalBinding, isInline, isMutable, attrs, xmlDoc, info, headPat, retTyOpt, rhsExpr, mBind, spBind) + SynBinding (vis, SynBindingKind.Normal, isInline, isMutable, attrs, xmlDoc, info, headPat, retTyOpt, rhsExpr, mBind, spBind) -let NonVirtualMemberFlags k = +let NonVirtualMemberFlags k : SynMemberFlags = { MemberKind=k IsInstance=true IsDispatchSlot=false IsOverrideOrExplicitImpl=false IsFinal=false } -let CtorMemberFlags = - { MemberKind=MemberKind.Constructor +let CtorMemberFlags : SynMemberFlags = + { MemberKind=SynMemberKind.Constructor IsInstance=false IsDispatchSlot=false IsOverrideOrExplicitImpl=false IsFinal=false } -let ClassCtorMemberFlags = - { MemberKind=MemberKind.ClassConstructor +let ClassCtorMemberFlags : SynMemberFlags = + { MemberKind=SynMemberKind.ClassConstructor IsInstance=false IsDispatchSlot=false IsOverrideOrExplicitImpl=false IsFinal=false } -let OverrideMemberFlags k = +let OverrideMemberFlags k : SynMemberFlags = { MemberKind=k IsInstance=true IsDispatchSlot=false IsOverrideOrExplicitImpl=true IsFinal=false } -let AbstractMemberFlags k = +let AbstractMemberFlags k : SynMemberFlags = { MemberKind=k IsInstance=true IsDispatchSlot=true IsOverrideOrExplicitImpl=false IsFinal=false } -let StaticMemberFlags k = +let StaticMemberFlags k : SynMemberFlags = { MemberKind=k IsInstance=false IsDispatchSlot=false IsOverrideOrExplicitImpl=false IsFinal=false } -let inferredTyparDecls = SynValTyparDecls([], true, []) +let inferredTyparDecls = SynValTyparDecls(None, true) -let noInferredTypars = SynValTyparDecls([], false, []) +let noInferredTypars = SynValTyparDecls(None, false) let rec synExprContainsError inpExpr = - let rec walkBind (Binding(_, _, _, _, _, _, _, _, _, synExpr, _, _)) = walkExpr synExpr + let rec walkBind (SynBinding(_, _, _, _, _, _, _, _, _, synExpr, _, _)) = walkExpr synExpr and walkExprs es = es |> List.exists walkExpr and walkBinds es = es |> List.exists walkBind and walkMatchClauses cl = - cl |> List.exists (fun (Clause(_, whenExpr, e, _, _)) -> walkExprOpt whenExpr || walkExpr e) + cl |> List.exists (fun (SynMatchClause(_, whenExpr, e, _, _)) -> walkExprOpt whenExpr || walkExpr e) and walkExprOpt eOpt = eOpt |> Option.exists walkExpr @@ -680,7 +689,7 @@ let rec synExprContainsError inpExpr = walkExprs flds | SynExpr.ObjExpr (_, _, bs, is, _, _) -> - walkBinds bs || walkBinds [ for (InterfaceImpl(_, bs, _)) in is do yield! bs ] + walkBinds bs || walkBinds [ for (SynInterfaceImpl(_, bs, _)) in is do yield! bs ] | SynExpr.ForEach (_, _, _, _, e1, e2, _) | SynExpr.While (_, e1, e2, _) -> @@ -731,10 +740,17 @@ let rec synExprContainsError inpExpr = | SynExpr.LetOrUseBang (rhs=e1;body=e2;andBangs=es) -> walkExpr e1 || walkExprs [ for (_,_,_,_,e,_) in es do yield e ] || walkExpr e2 - | SynExpr.InterpolatedString (parts, _m) -> + | SynExpr.InterpolatedString (parts, _, _m) -> walkExprs (parts |> List.choose (function | SynInterpolatedStringPart.String _ -> None | SynInterpolatedStringPart.FillExpr (x, _) -> Some x)) walkExpr inpExpr + +let (|ParsedHashDirectiveArguments|) (input: ParsedHashDirectiveArgument list) = + List.map + (function + | ParsedHashDirectiveArgument.String (s, _, _) -> s + | ParsedHashDirectiveArgument.SourceIdentifier (_, v, _) -> v) + input \ No newline at end of file diff --git a/src/fsharp/SyntaxTreeOps.fsi b/src/fsharp/SyntaxTreeOps.fsi index 1bf34b2d936..106b7a61540 100644 --- a/src/fsharp/SyntaxTreeOps.fsi +++ b/src/fsharp/SyntaxTreeOps.fsi @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module public FSharp.Compiler.SyntaxTreeOps +module internal FSharp.Compiler.SyntaxTreeOps - -open FSharp.Compiler -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Text +open FSharp.Compiler.Xml +open FSharp.Compiler.Syntax [] type SynArgNameGenerator = @@ -49,9 +48,9 @@ val (|SingleIdent|_|): inp:SynExpr -> Ident option /// This affects placement of sequence points val IsControlFlowExpression: e:SynExpr -> bool -val mkAnonField: ty:SynType -> SynField +val mkSynAnonField: ty:SynType -> SynField -val mkNamedField: ident:Ident * ty:SynType * m:range -> SynField +val mkSynNamedField: ident:Ident * ty:SynType * m:range -> SynField val mkSynPatVar: vis:SynAccess option -> id:Ident -> SynPat @@ -154,6 +153,10 @@ val ConcatAttributesLists: attrsLists:SynAttributeList list -> SynAttribute list val ( |Attributes| ): synAttributes:SynAttributeList list -> SynAttribute list +val ( |TyparDecls| ): typarDecls: SynTyparDecls option -> SynTyparDecl list +val ( |TyparsAndConstraints| ): typarDecls: SynTyparDecls option -> SynTyparDecl list * SynTypeConstraint list +val ( |ValTyparDecls| ): valTyparDecls: SynValTyparDecls -> SynTyparDecl list * SynTypeConstraint list * bool + val rangeOfNonNilAttrs: attrs:SynAttributes -> range val stripParenTypes: synType:SynType -> SynType @@ -221,7 +224,7 @@ module SynInfo = /// Transform a property declared using '[static] member P = expr' to a method taking a "unit" argument. /// This is similar to IncorporateEmptyTupledArgForPropertyGetter, but applies to member definitions /// rather than member signatures. - val AdjustMemberArgs: memFlags:MemberKind -> infosForArgs:'a list list -> 'a list list + val AdjustMemberArgs: memFlags:SynMemberKind -> infosForArgs:'a list list -> 'a list list /// For 'let' definitions, we infer syntactic argument information from the r.h.s. of a definition, if it /// is an immediate 'fun ... -> ...' or 'function ...' expression. This is noted in the F# language specification. @@ -235,31 +238,33 @@ module SynInfo = /// Infer the syntactic information for a 'let' or 'member' definition, based on the argument pattern, /// any declared return information (e.g. .NET attributes on the return element), and the r.h.s. expression /// in the case of 'let' definitions. - val InferSynValData: memberFlagsOpt:MemberFlags option * pat:SynPat option * retInfo:SynReturnInfo option * origRhsExpr:SynExpr -> SynValData + val InferSynValData: memberFlagsOpt:SynMemberFlags option * pat:SynPat option * retInfo:SynReturnInfo option * origRhsExpr:SynExpr -> SynValData val mkSynBindingRhs: staticOptimizations:(SynStaticOptimizationConstraint list * SynExpr) list -> rhsExpr:SynExpr -> mRhs:range -> retInfo:SynReturnInfo option -> SynExpr * SynBindingReturnInfo option val mkSynBinding: - xmlDoc:XmlDoc.PreXmlDoc * headPat:SynPat -> + xmlDoc:PreXmlDoc * headPat:SynPat -> vis:SynAccess option * isInline:bool * isMutable:bool * mBind:range * - spBind:DebugPointForBinding * retInfo:SynReturnInfo option * origRhsExpr:SynExpr * mRhs:range * - staticOptimizations:(SynStaticOptimizationConstraint list * SynExpr) list * attrs:SynAttributes * memberFlagsOpt:MemberFlags option + spBind:DebugPointAtBinding * retInfo:SynReturnInfo option * origRhsExpr:SynExpr * mRhs:range * + staticOptimizations:(SynStaticOptimizationConstraint list * SynExpr) list * attrs:SynAttributes * memberFlagsOpt:SynMemberFlags option -> SynBinding -val NonVirtualMemberFlags: k:MemberKind -> MemberFlags +val NonVirtualMemberFlags: k:SynMemberKind -> SynMemberFlags -val CtorMemberFlags: MemberFlags +val CtorMemberFlags: SynMemberFlags -val ClassCtorMemberFlags: MemberFlags +val ClassCtorMemberFlags: SynMemberFlags -val OverrideMemberFlags: k:MemberKind -> MemberFlags +val OverrideMemberFlags: k:SynMemberKind -> SynMemberFlags -val AbstractMemberFlags: k:MemberKind -> MemberFlags +val AbstractMemberFlags: k:SynMemberKind -> SynMemberFlags -val StaticMemberFlags: k:MemberKind -> MemberFlags +val StaticMemberFlags: k:SynMemberKind -> SynMemberFlags val inferredTyparDecls: SynValTyparDecls val noInferredTypars: SynValTyparDecls val synExprContainsError: inpExpr:SynExpr -> bool + +val ( |ParsedHashDirectiveArguments| ) : ParsedHashDirectiveArgument list -> string list \ No newline at end of file diff --git a/src/fsharp/TcGlobals.fs b/src/fsharp/TcGlobals.fs index c56be3d5bbd..80ef6017a0e 100755 --- a/src/fsharp/TcGlobals.fs +++ b/src/fsharp/TcGlobals.fs @@ -2,25 +2,25 @@ /// Defines the global environment for all type checking. /// -/// The environment (TcGlobals) are well-known types and values are hard-wired +/// The environment (TcGlobals) are well-known types and values are hard-wired /// into the compiler. This lets the compiler perform particular optimizations /// for these types and values, for example emitting optimized calls for -/// comparison and hashing functions. +/// comparison and hashing functions. module internal FSharp.Compiler.TcGlobals -open System.Collections.Generic open System.Collections.Concurrent open System.Diagnostics -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Extensions.ILX -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Library +open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.ILX open FSharp.Compiler.CompilerGlobalState -open FSharp.Compiler.Lib open FSharp.Compiler.Features -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Range +open FSharp.Compiler.IO +open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.Text.FileIndex +open FSharp.Compiler.Text.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics @@ -31,7 +31,7 @@ let private envRange = rangeN DummyFileNameForRangesWithoutASpecificLocation 0 /// Represents an intrinsic value from FSharp.Core known to the compiler [] -type IntrinsicValRef = +type IntrinsicValRef = | IntrinsicValRef of NonLocalEntityRef * string * bool * TType * ValLinkageFullKey member x.Name = (let (IntrinsicValRef(_, nm, _, _, _)) = x in nm) @@ -42,15 +42,15 @@ type IntrinsicValRef = /// For debugging override x.ToString() = x.Name - + let ValRefForIntrinsic (IntrinsicValRef(mvr, _, _, _, key)) = mkNonLocalValRef mvr key //------------------------------------------------------------------------- // Access the initial environment: names -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- [] -module FSharpLib = +module FSharpLib = let CoreOperatorsCheckedName = FSharpLib.Root + ".Core.Operators.Checked" let ControlName = FSharpLib.Root + ".Control" @@ -60,14 +60,14 @@ module FSharpLib = let CompilerServicesName = FSharpLib.Root + ".Core.CompilerServices" let LinqRuntimeHelpersName = FSharpLib.Root + ".Linq.RuntimeHelpers" let RuntimeHelpersName = FSharpLib.Root + ".Core.CompilerServices.RuntimeHelpers" - let ExtraTopLevelOperatorsName = FSharpLib.Root + ".Core.ExtraTopLevelOperators" + let ExtraTopLevelOperatorsName = FSharpLib.Root + ".Core.ExtraTopLevelOperators" let NativeInteropName = FSharpLib.Root + ".NativeInterop" let QuotationsName = FSharpLib.Root + ".Quotations" - let ControlPath = IL.splitNamespace ControlName - let LinqPath = IL.splitNamespace LinqName - let CollectionsPath = IL.splitNamespace CollectionsName + let ControlPath = IL.splitNamespace ControlName + let LinqPath = IL.splitNamespace LinqName + let CollectionsPath = IL.splitNamespace CollectionsName let NativeInteropPath = IL.splitNamespace NativeInteropName |> Array.ofList let CompilerServicesPath = IL.splitNamespace CompilerServicesName |> Array.ofList let LinqRuntimeHelpersPath = IL.splitNamespace LinqRuntimeHelpersName |> Array.ofList @@ -86,21 +86,21 @@ module FSharpLib = let private mkNonGenericTy tcref = TType_app(tcref, []) -let mkNonLocalTyconRef2 ccu path n = mkNonLocalTyconRef (mkNonLocalEntityRef ccu path) n +let mkNonLocalTyconRef2 ccu path n = mkNonLocalTyconRef (mkNonLocalEntityRef ccu path) n -let mk_MFCore_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.CorePathArray n -let mk_MFQuotations_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.QuotationsPath n -let mk_MFLinq_tcref ccu n = mkNonLocalTyconRef2 ccu LinqPathArray n -let mk_MFCollections_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.CollectionsPathArray n -let mk_MFCompilerServices_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.CompilerServicesPath n -let mk_MFRuntimeHelpers_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.RuntimeHelpersPath n -let mk_MFControl_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.ControlPathArray n +let mk_MFCore_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.CorePathArray n +let mk_MFQuotations_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.QuotationsPath n +let mk_MFLinq_tcref ccu n = mkNonLocalTyconRef2 ccu LinqPathArray n +let mk_MFCollections_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.CollectionsPathArray n +let mk_MFCompilerServices_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.CompilerServicesPath n +let mk_MFRuntimeHelpers_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.RuntimeHelpersPath n +let mk_MFControl_tcref ccu n = mkNonLocalTyconRef2 ccu FSharpLib.ControlPathArray n -type +type [] BuiltinAttribInfo = - | AttribInfo of ILTypeRef * TyconRef + | AttribInfo of ILTypeRef * TyconRef member this.TyconRef = let (AttribInfo(_, tcref)) = this in tcref @@ -111,8 +111,8 @@ type member x.DebugText = x.ToString() /// For debugging - override x.ToString() = x.TyconRef.ToString() - + override x.ToString() = x.TyconRef.ToString() + [] let tname_DebuggerNonUserCodeAttribute = "System.Diagnostics.DebuggerNonUserCodeAttribute" @@ -174,12 +174,12 @@ let tname_IAsyncResult = "System.IAsyncResult" //------------------------------------------------------------------------- // Table of all these "globals" -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, directoryToResolveRelativePaths, - mlCompatibility: bool, isInteractive:bool, +type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, directoryToResolveRelativePaths, + mlCompatibility: bool, isInteractive:bool, // The helper to find system types amongst referenced DLLs - tryFindSysTypeCcu, + tryFindSysTypeCcu, emitDebugInfoInQuotations: bool, noDebugData: bool, pathMap: PathMap, langVersion: LanguageVersion) = @@ -189,8 +189,8 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let vard = Construct.NewRigidTypar "d" envRange let vare = Construct.NewRigidTypar "e" envRange - let varaTy = mkTyparTy vara - let varbTy = mkTyparTy varb + let varaTy = mkTyparTy vara + let varbTy = mkTyparTy varb let varcTy = mkTyparTy varc let vardTy = mkTyparTy vard let vareTy = mkTyparTy vare @@ -215,20 +215,20 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let v_unit_tcr_nice = mk_MFCore_tcref fslibCcu "unit" let v_exn_tcr = mk_MFCore_tcref fslibCcu "exn" let v_char_tcr = mk_MFCore_tcref fslibCcu "char" - let v_float_tcr = mk_MFCore_tcref fslibCcu "float" + let v_float_tcr = mk_MFCore_tcref fslibCcu "float" let v_float32_tcr = mk_MFCore_tcref fslibCcu "float32" - let v_pfloat_tcr = mk_MFCore_tcref fslibCcu "float`1" - let v_pfloat32_tcr = mk_MFCore_tcref fslibCcu "float32`1" - let v_pint_tcr = mk_MFCore_tcref fslibCcu "int`1" - let v_pint8_tcr = mk_MFCore_tcref fslibCcu "sbyte`1" - let v_pint16_tcr = mk_MFCore_tcref fslibCcu "int16`1" - let v_pint64_tcr = mk_MFCore_tcref fslibCcu "int64`1" - let v_pnativeint_tcr = mk_MFCore_tcref fslibCcu "nativeint`1" - let v_puint_tcr = mk_MFCore_tcref fslibCcu "uint`1" - let v_puint8_tcr = mk_MFCore_tcref fslibCcu "byte`1" - let v_puint16_tcr = mk_MFCore_tcref fslibCcu "uint16`1" - let v_puint64_tcr = mk_MFCore_tcref fslibCcu "uint64`1" - let v_punativeint_tcr = mk_MFCore_tcref fslibCcu "unativeint`1" + let v_pfloat_tcr = mk_MFCore_tcref fslibCcu "float`1" + let v_pfloat32_tcr = mk_MFCore_tcref fslibCcu "float32`1" + let v_pint_tcr = mk_MFCore_tcref fslibCcu "int`1" + let v_pint8_tcr = mk_MFCore_tcref fslibCcu "sbyte`1" + let v_pint16_tcr = mk_MFCore_tcref fslibCcu "int16`1" + let v_pint64_tcr = mk_MFCore_tcref fslibCcu "int64`1" + let v_pnativeint_tcr = mk_MFCore_tcref fslibCcu "nativeint`1" + let v_puint_tcr = mk_MFCore_tcref fslibCcu "uint`1" + let v_puint8_tcr = mk_MFCore_tcref fslibCcu "byte`1" + let v_puint16_tcr = mk_MFCore_tcref fslibCcu "uint16`1" + let v_puint64_tcr = mk_MFCore_tcref fslibCcu "uint64`1" + let v_punativeint_tcr = mk_MFCore_tcref fslibCcu "unativeint`1" let v_byref_tcr = mk_MFCore_tcref fslibCcu "byref`1" let v_byref2_tcr = mk_MFCore_tcref fslibCcu "byref`2" let v_outref_tcr = mk_MFCore_tcref fslibCcu "outref`1" @@ -240,7 +240,7 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let v_refcell_tcr_canon = mk_MFCore_tcref fslibCcu "Ref`1" let v_refcell_tcr_nice = mk_MFCore_tcref fslibCcu "ref`1" - let dummyAssemblyNameCarryingUsefulErrorInformation path typeName = + let dummyAssemblyNameCarryingUsefulErrorInformation path typeName = FSComp.SR.tcGlobalsSystemTypeNotFound (String.concat "." path + "." + typeName) // Search for a type. If it is not found, leave a dangling CCU reference with some useful diagnostic information should @@ -250,35 +250,35 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d | None -> CcuThunk.CreateDelayed(dummyAssemblyNameCarryingUsefulErrorInformation path typeName) | Some ccu -> ccu - let tryFindSysTyconRef path nm = - match tryFindSysTypeCcu path nm with + let tryFindSysTyconRef path nm = + match tryFindSysTypeCcu path nm with | Some ccu -> Some (mkNonLocalTyconRef2 ccu (Array.ofList path) nm) | None -> None - let findSysTyconRef path nm = - let ccu = findSysTypeCcu path nm + let findSysTyconRef path nm = + let ccu = findSysTypeCcu path nm mkNonLocalTyconRef2 ccu (Array.ofList path) nm - let findSysILTypeRef (nm:string) = + let findSysILTypeRef (nm:string) = let path, typeName = splitILTypeName nm - let scoref = - match tryFindSysTypeCcu path typeName with + let scoref = + match tryFindSysTypeCcu path typeName with | None -> ILScopeRef.Assembly (mkSimpleAssemblyRef (dummyAssemblyNameCarryingUsefulErrorInformation path typeName)) | Some ccu -> ccu.ILScopeRef mkILTyRef (scoref, nm) - let tryFindSysILTypeRef (nm:string) = + let tryFindSysILTypeRef (nm:string) = let path, typeName = splitILTypeName nm tryFindSysTypeCcu path typeName |> Option.map (fun ccu -> mkILTyRef (ccu.ILScopeRef, nm)) - let findSysAttrib (nm:string) = + let findSysAttrib (nm:string) = let tref = findSysILTypeRef nm let path, typeName = splitILTypeName nm AttribInfo(tref, findSysTyconRef path typeName) - let tryFindSysAttrib nm = + let tryFindSysAttrib nm = let path, typeName = splitILTypeName nm - match tryFindSysTypeCcu path typeName with + match tryFindSysTypeCcu path typeName with | Some _ -> Some (findSysAttrib nm) | None -> None @@ -299,20 +299,21 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let v_fslib_IDelegateEvent_tcr = mk_MFControl_tcref fslibCcu "IDelegateEvent`1" let v_option_tcr_nice = mk_MFCore_tcref fslibCcu "option`1" + let v_valueoption_tcr_nice = mk_MFCore_tcref fslibCcu "voption`1" let v_list_tcr_canon = mk_MFCollections_tcref fslibCcu "List`1" let v_list_tcr_nice = mk_MFCollections_tcref fslibCcu "list`1" let v_lazy_tcr_nice = mk_MFControl_tcref fslibCcu "Lazy`1" let v_seq_tcr = mk_MFCollections_tcref fslibCcu "seq`1" - let v_format_tcr = mk_MFCore_tcref fslibCcu "PrintfFormat`5" - let v_format4_tcr = mk_MFCore_tcref fslibCcu "PrintfFormat`4" + let v_format_tcr = mk_MFCore_tcref fslibCcu "PrintfFormat`5" + let v_format4_tcr = mk_MFCore_tcref fslibCcu "PrintfFormat`4" let v_date_tcr = findSysTyconRef sys "DateTime" let v_IEnumerable_tcr = findSysTyconRef sysGenerics "IEnumerable`1" let v_IEnumerator_tcr = findSysTyconRef sysGenerics "IEnumerator`1" let v_System_Attribute_tcr = findSysTyconRef sys "Attribute" - let v_expr_tcr = mk_MFQuotations_tcref fslibCcu "Expr`1" - let v_raw_expr_tcr = mk_MFQuotations_tcref fslibCcu "Expr" - let v_query_builder_tcref = mk_MFLinq_tcref fslibCcu "QueryBuilder" - let v_querySource_tcr = mk_MFLinq_tcref fslibCcu "QuerySource`2" + let v_expr_tcr = mk_MFQuotations_tcref fslibCcu "Expr`1" + let v_raw_expr_tcr = mk_MFQuotations_tcref fslibCcu "Expr" + let v_query_builder_tcref = mk_MFLinq_tcref fslibCcu "QueryBuilder" + let v_querySource_tcr = mk_MFLinq_tcref fslibCcu "QuerySource`2" let v_linqExpression_tcr = findSysTyconRef ["System";"Linq";"Expressions"] "Expression`1" let v_il_arr_tcr_map = @@ -322,7 +323,7 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d if rank = 1 then "[]`1" else "[" + (String.replicate (rank - 1) ",") + "]`1" mk_MFCore_tcref fslibCcu type_sig) - + let v_byte_ty = mkNonGenericTy v_byte_tcr let v_sbyte_ty = mkNonGenericTy v_sbyte_tcr let v_int16_ty = mkNonGenericTy v_int16_tcr @@ -338,29 +339,30 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let v_unativeint_ty = mkNonGenericTy v_unativeint_tcr let v_enum_ty = mkNonGenericTy v_int_tcr - let v_bool_ty = mkNonGenericTy v_bool_tcr + let v_bool_ty = mkNonGenericTy v_bool_tcr let v_char_ty = mkNonGenericTy v_char_tcr - let v_obj_ty = mkNonGenericTy v_obj_tcr - let v_IFormattable_tcref = findSysTyconRef sys "IFormattable" - let v_FormattableString_tcref = findSysTyconRef sys "FormattableString" + let v_obj_ty = mkNonGenericTy v_obj_tcr + let v_IFormattable_tcref = findSysTyconRef sys "IFormattable" + let v_FormattableString_tcref = findSysTyconRef sys "FormattableString" let v_IFormattable_ty = mkNonGenericTy v_IFormattable_tcref let v_FormattableString_ty = mkNonGenericTy v_FormattableString_tcref - let v_FormattableStringFactory_tcref = findSysTyconRef sysCompilerServices "FormattableStringFactory" + let v_FormattableStringFactory_tcref = findSysTyconRef sysCompilerServices "FormattableStringFactory" let v_FormattableStringFactory_ty = mkNonGenericTy v_FormattableStringFactory_tcref let v_string_ty = mkNonGenericTy v_string_tcr let v_decimal_ty = mkSysNonGenericTy sys "Decimal" - let v_unit_ty = mkNonGenericTy v_unit_tcr_nice - let v_system_Type_ty = mkSysNonGenericTy sys "Type" + let v_unit_ty = mkNonGenericTy v_unit_tcr_nice + let v_system_Type_ty = mkSysNonGenericTy sys "Type" + let v_Array_tcref = findSysTyconRef sys "Array" + - let v_system_Reflection_MethodInfo_ty = mkSysNonGenericTy ["System";"Reflection"] "MethodInfo" let v_nullable_tcr = findSysTyconRef sys "Nullable`1" (* local helpers to build value infos *) - let mkNullableTy ty = TType_app(v_nullable_tcr, [ty]) - let mkByrefTy ty = TType_app(v_byref_tcr, [ty]) - let mkNativePtrTy ty = TType_app(v_nativeptr_tcr, [ty]) - let mkFunTy d r = TType_fun (d, r) + let mkNullableTy ty = TType_app(v_nullable_tcr, [ty]) + let mkByrefTy ty = TType_app(v_byref_tcr, [ty]) + let mkNativePtrTy ty = TType_app(v_nativeptr_tcr, [ty]) + let mkFunTy d r = TType_fun (d, r) let (-->) d r = mkFunTy d r let mkIteratedFunTy dl r = List.foldBack mkFunTy dl r let mkSmallRefTupledTy l = match l with [] -> v_unit_ty | [h] -> h | tys -> mkRawRefTupleTy tys @@ -412,29 +414,29 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d assert (rank >= 1 && rank <= 32) TType_app(v_il_arr_tcr_map.[rank - 1], [ty]) let mkLazyTy ty = TType_app(lazy_tcr, [ty]) - - let mkPrintfFormatTy aty bty cty dty ety = TType_app(v_format_tcr, [aty;bty;cty;dty; ety]) - let mk_format4_ty aty bty cty dty = TType_app(v_format4_tcr, [aty;bty;cty;dty]) - let mkQuotedExprTy aty = TType_app(v_expr_tcr, [aty]) - let mkRawQuotedExprTy = TType_app(v_raw_expr_tcr, []) - let mkQueryBuilderTy = TType_app(v_query_builder_tcref, []) - let mkLinqExpressionTy aty = TType_app(v_linqExpression_tcr, [aty]) - let v_cons_ucref = mkUnionCaseRef v_list_tcr_canon "op_ColonColon" - let v_nil_ucref = mkUnionCaseRef v_list_tcr_canon "op_Nil" - - + + let mkPrintfFormatTy aty bty cty dty ety = TType_app(v_format_tcr, [aty;bty;cty;dty; ety]) + let mk_format4_ty aty bty cty dty = TType_app(v_format4_tcr, [aty;bty;cty;dty]) + let mkQuotedExprTy aty = TType_app(v_expr_tcr, [aty]) + let mkRawQuotedExprTy = TType_app(v_raw_expr_tcr, []) + let mkQueryBuilderTy = TType_app(v_query_builder_tcref, []) + let mkLinqExpressionTy aty = TType_app(v_linqExpression_tcr, [aty]) + let v_cons_ucref = mkUnionCaseRef v_list_tcr_canon "op_ColonColon" + let v_nil_ucref = mkUnionCaseRef v_list_tcr_canon "op_Nil" + + let fslib_MF_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.RootPathArray - let fslib_MFCore_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.CorePathArray - let fslib_MFLinq_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.LinqPathArray - let fslib_MFCollections_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.CollectionsPathArray + let fslib_MFCore_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.CorePathArray + let fslib_MFLinq_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.LinqPathArray + let fslib_MFCollections_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.CollectionsPathArray let fslib_MFCompilerServices_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.CompilerServicesPath let fslib_MFLinqRuntimeHelpers_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.LinqRuntimeHelpersPath let fslib_MFControl_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.ControlPathArray let fslib_MFNativeInterop_nleref = mkNonLocalEntityRef fslibCcu FSharpLib.NativeInteropPath let fslib_MFLanguagePrimitives_nleref = mkNestedNonLocalEntityRef fslib_MFCore_nleref "LanguagePrimitives" - let fslib_MFIntrinsicOperators_nleref = mkNestedNonLocalEntityRef fslib_MFLanguagePrimitives_nleref "IntrinsicOperators" - let fslib_MFIntrinsicFunctions_nleref = mkNestedNonLocalEntityRef fslib_MFLanguagePrimitives_nleref "IntrinsicFunctions" + let fslib_MFIntrinsicOperators_nleref = mkNestedNonLocalEntityRef fslib_MFLanguagePrimitives_nleref "IntrinsicOperators" + let fslib_MFIntrinsicFunctions_nleref = mkNestedNonLocalEntityRef fslib_MFLanguagePrimitives_nleref "IntrinsicFunctions" let fslib_MFHashCompare_nleref = mkNestedNonLocalEntityRef fslib_MFLanguagePrimitives_nleref "HashCompare" let fslib_MFOperators_nleref = mkNestedNonLocalEntityRef fslib_MFCore_nleref "Operators" let fslib_MFByRefKinds_nleref = mkNestedNonLocalEntityRef fslib_MFCore_nleref "ByRefKinds" @@ -446,7 +448,7 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let fslib_MFQueryRunExtensions_nleref = mkNestedNonLocalEntityRef fslib_MFLinq_nleref "QueryRunExtensions" let fslib_MFQueryRunExtensionsLowPriority_nleref = mkNestedNonLocalEntityRef fslib_MFQueryRunExtensions_nleref "LowPriority" let fslib_MFQueryRunExtensionsHighPriority_nleref = mkNestedNonLocalEntityRef fslib_MFQueryRunExtensions_nleref "HighPriority" - + let fslib_MFPrintfModule_nleref = mkNestedNonLocalEntityRef fslib_MFCore_nleref "PrintfModule" let fslib_MFSeqModule_nleref = mkNestedNonLocalEntityRef fslib_MFCollections_nleref "SeqModule" let fslib_MFListModule_nleref = mkNestedNonLocalEntityRef fslib_MFCollections_nleref "ListModule" @@ -461,77 +463,77 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let fslib_MFOptionModule_nleref = mkNestedNonLocalEntityRef fslib_MFCore_nleref "OptionModule" let fslib_MFRuntimeHelpers_nleref = mkNestedNonLocalEntityRef fslib_MFCompilerServices_nleref "RuntimeHelpers" let fslib_MFQuotations_nleref = mkNestedNonLocalEntityRef fslib_MF_nleref "Quotations" - + let fslib_MFLinqRuntimeHelpersQuotationConverter_nleref = mkNestedNonLocalEntityRef fslib_MFLinqRuntimeHelpers_nleref "LeafExpressionConverter" - let fslib_MFLazyExtensions_nleref = mkNestedNonLocalEntityRef fslib_MFControl_nleref "LazyExtensions" - - let v_ref_tuple1_tcr = findSysTyconRef sys "Tuple`1" - let v_ref_tuple2_tcr = findSysTyconRef sys "Tuple`2" - let v_ref_tuple3_tcr = findSysTyconRef sys "Tuple`3" - let v_ref_tuple4_tcr = findSysTyconRef sys "Tuple`4" - let v_ref_tuple5_tcr = findSysTyconRef sys "Tuple`5" - let v_ref_tuple6_tcr = findSysTyconRef sys "Tuple`6" - let v_ref_tuple7_tcr = findSysTyconRef sys "Tuple`7" - let v_ref_tuple8_tcr = findSysTyconRef sys "Tuple`8" - let v_struct_tuple1_tcr = findSysTyconRef sys "ValueTuple`1" - let v_struct_tuple2_tcr = findSysTyconRef sys "ValueTuple`2" - let v_struct_tuple3_tcr = findSysTyconRef sys "ValueTuple`3" - let v_struct_tuple4_tcr = findSysTyconRef sys "ValueTuple`4" - let v_struct_tuple5_tcr = findSysTyconRef sys "ValueTuple`5" - let v_struct_tuple6_tcr = findSysTyconRef sys "ValueTuple`6" - let v_struct_tuple7_tcr = findSysTyconRef sys "ValueTuple`7" + let fslib_MFLazyExtensions_nleref = mkNestedNonLocalEntityRef fslib_MFControl_nleref "LazyExtensions" + + let v_ref_tuple1_tcr = findSysTyconRef sys "Tuple`1" + let v_ref_tuple2_tcr = findSysTyconRef sys "Tuple`2" + let v_ref_tuple3_tcr = findSysTyconRef sys "Tuple`3" + let v_ref_tuple4_tcr = findSysTyconRef sys "Tuple`4" + let v_ref_tuple5_tcr = findSysTyconRef sys "Tuple`5" + let v_ref_tuple6_tcr = findSysTyconRef sys "Tuple`6" + let v_ref_tuple7_tcr = findSysTyconRef sys "Tuple`7" + let v_ref_tuple8_tcr = findSysTyconRef sys "Tuple`8" + let v_struct_tuple1_tcr = findSysTyconRef sys "ValueTuple`1" + let v_struct_tuple2_tcr = findSysTyconRef sys "ValueTuple`2" + let v_struct_tuple3_tcr = findSysTyconRef sys "ValueTuple`3" + let v_struct_tuple4_tcr = findSysTyconRef sys "ValueTuple`4" + let v_struct_tuple5_tcr = findSysTyconRef sys "ValueTuple`5" + let v_struct_tuple6_tcr = findSysTyconRef sys "ValueTuple`6" + let v_struct_tuple7_tcr = findSysTyconRef sys "ValueTuple`7" let v_struct_tuple8_tcr = findSysTyconRef sys "ValueTuple`8" - - let v_choice2_tcr = mk_MFCore_tcref fslibCcu "Choice`2" - let v_choice3_tcr = mk_MFCore_tcref fslibCcu "Choice`3" - let v_choice4_tcr = mk_MFCore_tcref fslibCcu "Choice`4" - let v_choice5_tcr = mk_MFCore_tcref fslibCcu "Choice`5" - let v_choice6_tcr = mk_MFCore_tcref fslibCcu "Choice`6" - let v_choice7_tcr = mk_MFCore_tcref fslibCcu "Choice`7" + + let v_choice2_tcr = mk_MFCore_tcref fslibCcu "Choice`2" + let v_choice3_tcr = mk_MFCore_tcref fslibCcu "Choice`3" + let v_choice4_tcr = mk_MFCore_tcref fslibCcu "Choice`4" + let v_choice5_tcr = mk_MFCore_tcref fslibCcu "Choice`5" + let v_choice6_tcr = mk_MFCore_tcref fslibCcu "Choice`6" + let v_choice7_tcr = mk_MFCore_tcref fslibCcu "Choice`7" let tyconRefEq x y = primEntityRefEq compilingFslib fslibCcu x y - let v_suppressed_types = + let v_suppressed_types = [ mk_MFCore_tcref fslibCcu "Option`1"; - mk_MFCore_tcref fslibCcu "Ref`1"; + mk_MFCore_tcref fslibCcu "Ref`1"; mk_MFCore_tcref fslibCcu "FSharpTypeFunc"; - mk_MFCore_tcref fslibCcu "FSharpFunc`2"; - mk_MFCore_tcref fslibCcu "Unit" ] + mk_MFCore_tcref fslibCcu "FSharpFunc`2"; + mk_MFCore_tcref fslibCcu "Unit" ] - let v_knownFSharpCoreModules = - dict [ for nleref in [ fslib_MFLanguagePrimitives_nleref + let v_knownFSharpCoreModules = + dict [ for nleref in [ fslib_MFLanguagePrimitives_nleref fslib_MFIntrinsicOperators_nleref fslib_MFIntrinsicFunctions_nleref fslib_MFHashCompare_nleref - fslib_MFOperators_nleref + fslib_MFOperators_nleref fslib_MFOperatorIntrinsics_nleref fslib_MFOperatorsUnchecked_nleref fslib_MFOperatorsChecked_nleref fslib_MFExtraTopLevelOperators_nleref fslib_MFNullableOperators_nleref - fslib_MFQueryRunExtensions_nleref - fslib_MFQueryRunExtensionsLowPriority_nleref - fslib_MFQueryRunExtensionsHighPriority_nleref + fslib_MFQueryRunExtensions_nleref + fslib_MFQueryRunExtensionsLowPriority_nleref + fslib_MFQueryRunExtensionsHighPriority_nleref - fslib_MFPrintfModule_nleref - fslib_MFSeqModule_nleref + fslib_MFPrintfModule_nleref + fslib_MFSeqModule_nleref fslib_MFListModule_nleref - fslib_MFArrayModule_nleref - fslib_MFArray2DModule_nleref - fslib_MFArray3DModule_nleref - fslib_MFArray4DModule_nleref - fslib_MFSetModule_nleref - fslib_MFMapModule_nleref - fslib_MFStringModule_nleref - fslib_MFNativePtrModule_nleref - fslib_MFOptionModule_nleref + fslib_MFArrayModule_nleref + fslib_MFArray2DModule_nleref + fslib_MFArray3DModule_nleref + fslib_MFArray4DModule_nleref + fslib_MFSetModule_nleref + fslib_MFMapModule_nleref + fslib_MFStringModule_nleref + fslib_MFNativePtrModule_nleref + fslib_MFOptionModule_nleref fslib_MFRuntimeHelpers_nleref ] do yield nleref.LastItemMangledName, ERefNonLocal nleref ] - - let tryDecodeTupleTy tupInfo l = - match l with - | [t1;t2;t3;t4;t5;t6;t7;marker] -> - match marker with + + let tryDecodeTupleTy tupInfo l = + match l with + | [t1;t2;t3;t4;t5;t6;t7;marker] -> + match marker with | TType_app(tcref, [t8]) when tyconRefEq tcref v_ref_tuple1_tcr -> mkRawRefTupleTy [t1;t2;t3;t4;t5;t6;t7;t8] |> Some | TType_app(tcref, [t8]) when tyconRefEq tcref v_struct_tuple1_tcr -> mkRawStructTupleTy [t1;t2;t3;t4;t5;t6;t7;t8] |> Some | TType_tuple (_structness2, t8plus) -> TType_tuple (tupInfo, [t1;t2;t3;t4;t5;t6;t7] @ t8plus) |> Some @@ -539,64 +541,64 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d | [] -> None | [_] -> None | _ -> TType_tuple (tupInfo, l) |> Some - - let decodeTupleTy tupInfo l = - match tryDecodeTupleTy tupInfo l with + + let decodeTupleTy tupInfo l = + match tryDecodeTupleTy tupInfo l with | Some ty -> ty | None -> failwith "couldn't decode tuple ty" - let decodeTupleTyIfPossible tcref tupInfo l = - match tryDecodeTupleTy tupInfo l with + let decodeTupleTyIfPossible tcref tupInfo l = + match tryDecodeTupleTy tupInfo l with | Some ty -> ty | None -> TType_app(tcref, l) - let mk_MFCore_attrib nm : BuiltinAttribInfo = - AttribInfo(mkILTyRef(IlxSettings.ilxFsharpCoreLibScopeRef (), FSharpLib.Core + "." + nm), mk_MFCore_tcref fslibCcu nm) - + let mk_MFCore_attrib nm : BuiltinAttribInfo = + AttribInfo(mkILTyRef(ilg.fsharpCoreAssemblyScopeRef, FSharpLib.Core + "." + nm), mk_MFCore_tcref fslibCcu nm) + let mk_doc filename = ILSourceDocument.Create(language=None, vendor=None, documentType=None, file=filename) // Build the memoization table for files - let v_memoize_file = new MemoizationTable ((fileOfFileIndex >> Filename.fullpath directoryToResolveRelativePaths >> mk_doc), keyComparer=HashIdentity.Structural) + let v_memoize_file = new MemoizationTable ((fileOfFileIndex >> FileSystem.GetFullFilePathInDirectoryShim directoryToResolveRelativePaths >> mk_doc), keyComparer=HashIdentity.Structural) - let v_and_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, CompileOpName "&" , None , None , [], mk_rel_sig v_bool_ty) - let v_addrof_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, CompileOpName "~&" , None , None , [vara], ([[varaTy]], mkByrefTy varaTy)) + let v_and_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, CompileOpName "&" , None , None , [], mk_rel_sig v_bool_ty) + let v_addrof_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, CompileOpName "~&" , None , None , [vara], ([[varaTy]], mkByrefTy varaTy)) let v_addrof2_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, CompileOpName "~&&" , None , None , [vara], ([[varaTy]], mkNativePtrTy varaTy)) - let v_and2_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, CompileOpName "&&" , None , None , [], mk_rel_sig v_bool_ty) - let v_or_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, "or" , None , Some "Or" , [], mk_rel_sig v_bool_ty) - let v_or2_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, CompileOpName "||" , None , None , [], mk_rel_sig v_bool_ty) - let v_compare_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "compare" , None , Some "Compare", [vara], mk_compare_sig varaTy) - let v_equals_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName "=" , None , None , [vara], mk_rel_sig varaTy) - let v_equals_nullable_operator_info = makeIntrinsicValRef(fslib_MFNullableOperators_nleref, CompileOpName "=?" , None , None , [vara], ([[varaTy];[mkNullableTy varaTy]], v_bool_ty)) - let v_nullable_equals_operator_info = makeIntrinsicValRef(fslib_MFNullableOperators_nleref, CompileOpName "?=" , None , None , [vara], ([[mkNullableTy varaTy];[varaTy]], v_bool_ty)) - let v_nullable_equals_nullable_operator_info = makeIntrinsicValRef(fslib_MFNullableOperators_nleref, CompileOpName "?=?" , None , None , [vara], ([[mkNullableTy varaTy];[mkNullableTy varaTy]], v_bool_ty)) - let v_not_equals_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName "<>" , None , None , [vara], mk_rel_sig varaTy) - let v_less_than_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName "<" , None , None , [vara], mk_rel_sig varaTy) - let v_less_than_or_equals_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName "<=" , None , None , [vara], mk_rel_sig varaTy) - let v_greater_than_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName ">" , None , None , [vara], mk_rel_sig varaTy) - let v_greater_than_or_equals_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName ">=" , None , None , [vara], mk_rel_sig varaTy) - - let v_enumOfValue_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "EnumOfValue" , None , None , [vara; varb], ([[varaTy]], varbTy)) - - let v_generic_comparison_withc_outer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericComparisonWithComparer" , None , None , [vara], mk_compare_withc_sig varaTy) - let v_generic_hash_withc_tuple2_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastHashTuple2" , None , None , [vara;varb], mk_hash_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy])) - let v_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 v_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 v_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 v_generic_equals_withc_tuple2_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastEqualsTuple2" , None , None , [vara;varb], mk_equality_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy])) - let v_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 v_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 v_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 v_generic_compare_withc_tuple2_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastCompareTuple2" , None , None , [vara;varb], mk_compare_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy])) - let v_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 v_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 v_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 v_generic_equality_er_outer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericEqualityER" , None , None , [vara], mk_rel_sig varaTy) - let v_get_generic_comparer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericComparer" , None , None , [], ([], v_IComparer_ty)) - let v_get_generic_er_equality_comparer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericEqualityERComparer" , None , None , [], ([], v_IEqualityComparer_ty)) - let v_get_generic_per_equality_comparer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericEqualityComparer" , None , None , [], ([], v_IEqualityComparer_ty)) + let v_and2_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, CompileOpName "&&" , None , None , [], mk_rel_sig v_bool_ty) + let v_or_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, "or" , None , Some "Or" , [], mk_rel_sig v_bool_ty) + let v_or2_info = makeIntrinsicValRef(fslib_MFIntrinsicOperators_nleref, CompileOpName "||" , None , None , [], mk_rel_sig v_bool_ty) + let v_compare_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "compare" , None , Some "Compare", [vara], mk_compare_sig varaTy) + let v_equals_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName "=" , None , None , [vara], mk_rel_sig varaTy) + let v_equals_nullable_operator_info = makeIntrinsicValRef(fslib_MFNullableOperators_nleref, CompileOpName "=?" , None , None , [vara], ([[varaTy];[mkNullableTy varaTy]], v_bool_ty)) + let v_nullable_equals_operator_info = makeIntrinsicValRef(fslib_MFNullableOperators_nleref, CompileOpName "?=" , None , None , [vara], ([[mkNullableTy varaTy];[varaTy]], v_bool_ty)) + let v_nullable_equals_nullable_operator_info = makeIntrinsicValRef(fslib_MFNullableOperators_nleref, CompileOpName "?=?" , None , None , [vara], ([[mkNullableTy varaTy];[mkNullableTy varaTy]], v_bool_ty)) + let v_not_equals_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName "<>" , None , None , [vara], mk_rel_sig varaTy) + let v_less_than_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName "<" , None , None , [vara], mk_rel_sig varaTy) + let v_less_than_or_equals_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName "<=" , None , None , [vara], mk_rel_sig varaTy) + let v_greater_than_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName ">" , None , None , [vara], mk_rel_sig varaTy) + let v_greater_than_or_equals_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, CompileOpName ">=" , None , None , [vara], mk_rel_sig varaTy) + + let v_enumOfValue_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "EnumOfValue" , None , None , [vara; varb], ([[varaTy]], varbTy)) + + let v_generic_comparison_withc_outer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericComparisonWithComparer" , None , None , [vara], mk_compare_withc_sig varaTy) + let v_generic_hash_withc_tuple2_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastHashTuple2" , None , None , [vara;varb], mk_hash_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy])) + let v_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 v_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 v_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 v_generic_equals_withc_tuple2_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastEqualsTuple2" , None , None , [vara;varb], mk_equality_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy])) + let v_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 v_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 v_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 v_generic_compare_withc_tuple2_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "FastCompareTuple2" , None , None , [vara;varb], mk_compare_withc_sig (decodeTupleTy tupInfoRef [varaTy; varbTy])) + let v_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 v_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 v_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 v_generic_equality_er_outer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericEqualityER" , None , None , [vara], mk_rel_sig varaTy) + let v_get_generic_comparer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericComparer" , None , None , [], ([], v_IComparer_ty)) + let v_get_generic_er_equality_comparer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericEqualityERComparer" , None , None , [], ([], v_IEqualityComparer_ty)) + let v_get_generic_per_equality_comparer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericEqualityComparer" , None , None , [], ([], v_IEqualityComparer_ty)) let v_generic_equality_withc_outer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericEqualityWithComparer" , None , None , [vara], mk_equality_withc_sig varaTy) let v_generic_hash_withc_outer_info = makeIntrinsicValRef(fslib_MFLanguagePrimitives_nleref, "GenericHashWithComparer" , None , None , [vara], mk_hash_withc_sig varaTy) @@ -608,95 +610,95 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let v_generic_hash_inner_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "GenericHashIntrinsic" , None , None , [vara], mk_hash_sig varaTy) let v_generic_hash_withc_inner_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "GenericHashWithComparerIntrinsic" , None , None , [vara], mk_hash_withc_sig varaTy) - + let v_create_instance_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "CreateInstance" , None , None , [vara], ([[v_unit_ty]], varaTy)) let v_unbox_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "UnboxGeneric" , None , None , [vara], ([[v_obj_ty]], varaTy)) let v_unbox_fast_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "UnboxFast" , None , None , [vara], ([[v_obj_ty]], varaTy)) - let v_istype_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "TypeTestGeneric" , None , None , [vara], ([[v_obj_ty]], v_bool_ty)) - let v_istype_fast_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "TypeTestFast" , None , None , [vara], ([[v_obj_ty]], v_bool_ty)) + let v_istype_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "TypeTestGeneric" , None , None , [vara], ([[v_obj_ty]], v_bool_ty)) + let v_istype_fast_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "TypeTestFast" , None , None , [vara], ([[v_obj_ty]], v_bool_ty)) let v_dispose_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "Dispose" , None , None , [vara], ([[varaTy]], v_unit_ty)) let v_getstring_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "GetString" , None , None , [], ([[v_string_ty];[v_int_ty]], v_char_ty)) - let v_reference_equality_inner_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "PhysicalEqualityIntrinsic" , None , None , [vara], mk_rel_sig varaTy) - - let v_bitwise_or_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_BitwiseOr" , None , None , [vara], mk_binop_ty varaTy) - let v_bitwise_and_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_BitwiseAnd" , None , None , [vara], mk_binop_ty varaTy) - let v_bitwise_xor_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_ExclusiveOr" , None , None , [vara], mk_binop_ty varaTy) - let v_bitwise_unary_not_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_LogicalNot" , None , None , [vara], mk_unop_ty varaTy) - let v_bitwise_shift_left_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_LeftShift" , None , None , [vara], mk_shiftop_ty varaTy) - let v_bitwise_shift_right_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_RightShift" , None , None , [vara], mk_shiftop_ty varaTy) - let v_unchecked_addition_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Addition" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) - let v_unchecked_subtraction_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Subtraction" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) - let v_unchecked_multiply_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Multiply" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) - let v_unchecked_division_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Division" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) - let v_unchecked_modulus_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Modulus" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) - let v_unchecked_unary_plus_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_UnaryPlus" , None , None , [vara], mk_unop_ty varaTy) - let v_unchecked_unary_minus_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_UnaryNegation" , None , None , [vara], mk_unop_ty varaTy) - let v_unchecked_unary_not_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "not" , None , Some "Not" , [], mk_unop_ty v_bool_ty) - - let v_checked_addition_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "op_Addition" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) - let v_checked_subtraction_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "op_Subtraction" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) - let v_checked_multiply_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "op_Multiply" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) - let v_checked_unary_minus_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "op_UnaryNegation" , None , None , [vara], mk_unop_ty varaTy) - - let v_byte_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "byte" , None , Some "ToByte", [vara], ([[varaTy]], v_byte_ty)) - let v_sbyte_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "sbyte" , None , Some "ToSByte", [vara], ([[varaTy]], v_sbyte_ty)) - let v_int16_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "int16" , None , Some "ToInt16", [vara], ([[varaTy]], v_int16_ty)) - let v_uint16_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "uint16" , None , Some "ToUInt16", [vara], ([[varaTy]], v_uint16_ty)) - let v_int_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "int" , None , Some "ToInt", [vara], ([[varaTy]], v_int_ty)) - let v_int32_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "int32" , None , Some "ToInt32", [vara], ([[varaTy]], v_int32_ty)) - let v_uint32_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "uint32" , None , Some "ToUInt32", [vara], ([[varaTy]], v_uint32_ty)) - let v_int64_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "int64" , None , Some "ToInt64", [vara], ([[varaTy]], v_int64_ty)) - let v_uint64_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "uint64" , None , Some "ToUInt64", [vara], ([[varaTy]], v_uint64_ty)) - let v_nativeint_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "nativeint" , None , Some "ToIntPtr", [vara], ([[varaTy]], v_nativeint_ty)) + let v_reference_equality_inner_info = makeIntrinsicValRef(fslib_MFHashCompare_nleref, "PhysicalEqualityIntrinsic" , None , None , [vara], mk_rel_sig varaTy) + + let v_bitwise_or_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_BitwiseOr" , None , None , [vara], mk_binop_ty varaTy) + let v_bitwise_and_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_BitwiseAnd" , None , None , [vara], mk_binop_ty varaTy) + let v_bitwise_xor_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_ExclusiveOr" , None , None , [vara], mk_binop_ty varaTy) + let v_bitwise_unary_not_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_LogicalNot" , None , None , [vara], mk_unop_ty varaTy) + let v_bitwise_shift_left_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_LeftShift" , None , None , [vara], mk_shiftop_ty varaTy) + let v_bitwise_shift_right_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_RightShift" , None , None , [vara], mk_shiftop_ty varaTy) + let v_unchecked_addition_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Addition" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) + let v_unchecked_subtraction_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Subtraction" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) + let v_unchecked_multiply_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Multiply" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) + let v_unchecked_division_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Division" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) + let v_unchecked_modulus_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Modulus" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) + let v_unchecked_unary_plus_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_UnaryPlus" , None , None , [vara], mk_unop_ty varaTy) + let v_unchecked_unary_minus_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_UnaryNegation" , None , None , [vara], mk_unop_ty varaTy) + let v_unchecked_unary_not_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "not" , None , Some "Not" , [], mk_unop_ty v_bool_ty) + + let v_checked_addition_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "op_Addition" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) + let v_checked_subtraction_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "op_Subtraction" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) + let v_checked_multiply_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "op_Multiply" , None , None , [vara;varb;varc], mk_binop_ty3 varaTy varbTy varcTy) + let v_checked_unary_minus_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "op_UnaryNegation" , None , None , [vara], mk_unop_ty varaTy) + + let v_byte_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "byte" , None , Some "ToByte", [vara], ([[varaTy]], v_byte_ty)) + let v_sbyte_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "sbyte" , None , Some "ToSByte", [vara], ([[varaTy]], v_sbyte_ty)) + let v_int16_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "int16" , None , Some "ToInt16", [vara], ([[varaTy]], v_int16_ty)) + let v_uint16_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "uint16" , None , Some "ToUInt16", [vara], ([[varaTy]], v_uint16_ty)) + let v_int_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "int" , None , Some "ToInt", [vara], ([[varaTy]], v_int_ty)) + let v_int32_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "int32" , None , Some "ToInt32", [vara], ([[varaTy]], v_int32_ty)) + let v_uint32_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "uint32" , None , Some "ToUInt32", [vara], ([[varaTy]], v_uint32_ty)) + let v_int64_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "int64" , None , Some "ToInt64", [vara], ([[varaTy]], v_int64_ty)) + let v_uint64_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "uint64" , None , Some "ToUInt64", [vara], ([[varaTy]], v_uint64_ty)) + let v_nativeint_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "nativeint" , None , Some "ToIntPtr", [vara], ([[varaTy]], v_nativeint_ty)) let v_unativeint_checked_info = makeIntrinsicValRef(fslib_MFOperatorsChecked_nleref, "unativeint" , None , Some "ToUIntPtr", [vara], ([[varaTy]], v_unativeint_ty)) - let v_byte_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "byte" , None , Some "ToByte", [vara], ([[varaTy]], v_byte_ty)) - let v_sbyte_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "sbyte" , None , Some "ToSByte", [vara], ([[varaTy]], v_sbyte_ty)) - let v_int16_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "int16" , None , Some "ToInt16", [vara], ([[varaTy]], v_int16_ty)) - let v_uint16_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "uint16" , None , Some "ToUInt16", [vara], ([[varaTy]], v_uint16_ty)) - let v_int_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "int" , None , Some "ToInt", [vara], ([[varaTy]], v_int_ty)) - let v_int32_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "int32" , None , Some "ToInt32", [vara], ([[varaTy]], v_int32_ty)) - let v_uint32_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "uint32" , None , Some "ToUInt32", [vara], ([[varaTy]], v_uint32_ty)) - let v_int64_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "int64" , None , Some "ToInt64", [vara], ([[varaTy]], v_int64_ty)) - let v_uint64_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "uint64" , None , Some "ToUInt64", [vara], ([[varaTy]], v_uint64_ty)) - let v_float32_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "float32" , None , Some "ToSingle", [vara], ([[varaTy]], v_float32_ty)) - let v_float_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "float" , None , Some "ToDouble", [vara], ([[varaTy]], v_float_ty)) - let v_nativeint_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "nativeint" , None , Some "ToIntPtr", [vara], ([[varaTy]], v_nativeint_ty)) + let v_byte_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "byte" , None , Some "ToByte", [vara], ([[varaTy]], v_byte_ty)) + let v_sbyte_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "sbyte" , None , Some "ToSByte", [vara], ([[varaTy]], v_sbyte_ty)) + let v_int16_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "int16" , None , Some "ToInt16", [vara], ([[varaTy]], v_int16_ty)) + let v_uint16_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "uint16" , None , Some "ToUInt16", [vara], ([[varaTy]], v_uint16_ty)) + let v_int_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "int" , None , Some "ToInt", [vara], ([[varaTy]], v_int_ty)) + let v_int32_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "int32" , None , Some "ToInt32", [vara], ([[varaTy]], v_int32_ty)) + let v_uint32_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "uint32" , None , Some "ToUInt32", [vara], ([[varaTy]], v_uint32_ty)) + let v_int64_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "int64" , None , Some "ToInt64", [vara], ([[varaTy]], v_int64_ty)) + let v_uint64_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "uint64" , None , Some "ToUInt64", [vara], ([[varaTy]], v_uint64_ty)) + let v_float32_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "float32" , None , Some "ToSingle", [vara], ([[varaTy]], v_float32_ty)) + let v_float_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "float" , None , Some "ToDouble", [vara], ([[varaTy]], v_float_ty)) + let v_nativeint_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "nativeint" , None , Some "ToIntPtr", [vara], ([[varaTy]], v_nativeint_ty)) let v_unativeint_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "unativeint" , None , Some "ToUIntPtr", [vara], ([[varaTy]], v_unativeint_ty)) - let v_char_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "char" , None , Some "ToChar", [vara], ([[varaTy]], v_char_ty)) - let v_enum_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "enum" , None , Some "ToEnum", [vara], ([[varaTy]], v_enum_ty)) + let v_char_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "char" , None , Some "ToChar", [vara], ([[varaTy]], v_char_ty)) + let v_enum_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "enum" , None , Some "ToEnum", [vara], ([[varaTy]], v_enum_ty)) let v_hash_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "hash" , None , Some "Hash" , [vara], ([[varaTy]], v_int_ty)) let v_box_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "box" , None , Some "Box" , [vara], ([[varaTy]], v_obj_ty)) let v_isnull_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "isNull" , None , Some "IsNull" , [vara], ([[varaTy]], v_bool_ty)) let v_isnotnull_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "isNotNull" , None , Some "IsNotNull" , [vara], ([[varaTy]], v_bool_ty)) - let v_raise_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "raise" , None , Some "Raise" , [vara], ([[mkSysNonGenericTy sys "Exception"]], varaTy)) - let v_failwith_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "failwith" , None , Some "FailWith" , [vara], ([[v_string_ty]], varaTy)) - let v_invalid_arg_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "invalidArg" , None , Some "InvalidArg" , [vara], ([[v_string_ty]; [v_string_ty]], varaTy)) - let v_null_arg_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "nullArg" , None , Some "NullArg" , [vara], ([[v_string_ty]], varaTy)) - let v_invalid_op_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "invalidOp" , None , Some "InvalidOp" , [vara], ([[v_string_ty]], varaTy)) - let v_failwithf_info = makeIntrinsicValRef(fslib_MFExtraTopLevelOperators_nleref, "failwithf" , None , Some "PrintFormatToStringThenFail" , [vara;varb], ([[mk_format4_ty varaTy v_unit_ty v_string_ty v_string_ty]], varaTy)) - + let v_raise_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "raise" , None , Some "Raise" , [vara], ([[mkSysNonGenericTy sys "Exception"]], varaTy)) + let v_failwith_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "failwith" , None , Some "FailWith" , [vara], ([[v_string_ty]], varaTy)) + let v_invalid_arg_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "invalidArg" , None , Some "InvalidArg" , [vara], ([[v_string_ty]; [v_string_ty]], varaTy)) + let v_null_arg_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "nullArg" , None , Some "NullArg" , [vara], ([[v_string_ty]], varaTy)) + let v_invalid_op_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "invalidOp" , None , Some "InvalidOp" , [vara], ([[v_string_ty]], varaTy)) + let v_failwithf_info = makeIntrinsicValRef(fslib_MFExtraTopLevelOperators_nleref, "failwithf" , None , Some "PrintFormatToStringThenFail" , [vara;varb], ([[mk_format4_ty varaTy v_unit_ty v_string_ty v_string_ty]], varaTy)) + let v_reraise_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "reraise" , None , Some "Reraise", [vara], ([[v_unit_ty]], varaTy)) - let v_typeof_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "typeof" , None , Some "TypeOf" , [vara], ([], v_system_Type_ty)) + let v_typeof_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "typeof" , None , Some "TypeOf" , [vara], ([], v_system_Type_ty)) let v_methodhandleof_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "methodhandleof" , None , Some "MethodHandleOf", [vara;varb], ([[varaTy --> varbTy]], v_system_RuntimeMethodHandle_ty)) - let v_sizeof_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "sizeof" , None , Some "SizeOf" , [vara], ([], v_int_ty)) + let v_sizeof_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "sizeof" , None , Some "SizeOf" , [vara], ([], v_int_ty)) let v_nameof_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "nameof" , None , Some "NameOf" , [vara], ([[varaTy]], v_string_ty)) - let v_unchecked_defaultof_info = makeIntrinsicValRef(fslib_MFOperatorsUnchecked_nleref, "defaultof" , None , Some "DefaultOf", [vara], ([], varaTy)) - let v_typedefof_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "typedefof" , None , Some "TypeDefOf", [vara], ([], v_system_Type_ty)) + let v_unchecked_defaultof_info = makeIntrinsicValRef(fslib_MFOperatorsUnchecked_nleref, "defaultof" , None , Some "DefaultOf", [vara], ([], varaTy)) + let v_typedefof_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "typedefof" , None , Some "TypeDefOf", [vara], ([], v_system_Type_ty)) let v_range_op_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_Range" , None , None , [vara], ([[varaTy];[varaTy]], mkSeqTy varaTy)) let v_range_step_op_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "op_RangeStep" , None , None , [vara;varb], ([[varaTy];[varbTy];[varaTy]], mkSeqTy varaTy)) let v_range_int32_op_info = makeIntrinsicValRef(fslib_MFOperatorIntrinsics_nleref, "RangeInt32" , None , None , [], ([[v_int_ty];[v_int_ty];[v_int_ty]], mkSeqTy v_int_ty)) let v_array_length_info = makeIntrinsicValRef(fslib_MFArrayModule_nleref, "length" , None , Some "Length" , [vara], ([[mkArrayType 1 varaTy]], v_int_ty)) let v_array_get_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "GetArray" , None , None , [vara], ([[mkArrayType 1 varaTy]; [v_int_ty]], varaTy)) - let v_array2D_get_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "GetArray2D" , None , None , [vara], ([[mkArrayType 2 varaTy];[v_int_ty]; [v_int_ty]], varaTy)) + let v_array2D_get_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "GetArray2D" , None , None , [vara], ([[mkArrayType 2 varaTy];[v_int_ty]; [v_int_ty]], varaTy)) let v_array3D_get_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "GetArray3D" , None , None , [vara], ([[mkArrayType 3 varaTy];[v_int_ty]; [v_int_ty]; [v_int_ty]], varaTy)) let v_array4D_get_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "GetArray4D" , None , None , [vara], ([[mkArrayType 4 varaTy];[v_int_ty]; [v_int_ty]; [v_int_ty]; [v_int_ty]], varaTy)) let v_array_set_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "SetArray" , None , None , [vara], ([[mkArrayType 1 varaTy]; [v_int_ty]; [varaTy]], v_unit_ty)) @@ -707,23 +709,23 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let v_option_toNullable_info = makeIntrinsicValRef(fslib_MFOptionModule_nleref, "toNullable" , None , Some "ToNullable" , [vara], ([[mkOptionTy varaTy]], mkNullableTy varaTy)) let v_option_defaultValue_info = makeIntrinsicValRef(fslib_MFOptionModule_nleref, "defaultValue" , None , Some "DefaultValue" , [vara], ([[varaTy]; [mkOptionTy varaTy]], varaTy)) - let v_nativeptr_tobyref_info = makeIntrinsicValRef(fslib_MFNativePtrModule_nleref, "toByRef" , None , Some "ToByRefInlined", [vara], ([[mkNativePtrTy varaTy]], mkByrefTy varaTy)) + let v_nativeptr_tobyref_info = makeIntrinsicValRef(fslib_MFNativePtrModule_nleref, "toByRef" , None , Some "ToByRefInlined", [vara], ([[mkNativePtrTy varaTy]], mkByrefTy varaTy)) - let v_seq_collect_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "collect" , None , Some "Collect", [vara;varb;varc], ([[varaTy --> varbTy]; [mkSeqTy varaTy]], mkSeqTy varcTy)) - let v_seq_delay_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "delay" , None , Some "Delay" , [varb], ([[v_unit_ty --> mkSeqTy varbTy]], mkSeqTy varbTy)) - let v_seq_append_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "append" , None , Some "Append" , [varb], ([[mkSeqTy varbTy]; [mkSeqTy varbTy]], mkSeqTy varbTy)) + let v_seq_collect_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "collect" , None , Some "Collect", [vara;varb;varc], ([[varaTy --> varbTy]; [mkSeqTy varaTy]], mkSeqTy varcTy)) + let v_seq_delay_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "delay" , None , Some "Delay" , [varb], ([[v_unit_ty --> mkSeqTy varbTy]], mkSeqTy varbTy)) + let v_seq_append_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "append" , None , Some "Append" , [varb], ([[mkSeqTy varbTy]; [mkSeqTy varbTy]], mkSeqTy varbTy)) let v_seq_using_info = makeIntrinsicValRef(fslib_MFRuntimeHelpers_nleref, "EnumerateUsing" , None , None , [vara;varb;varc], ([[varaTy];[(varaTy --> varbTy)]], mkSeqTy varcTy)) let v_seq_generated_info = makeIntrinsicValRef(fslib_MFRuntimeHelpers_nleref, "EnumerateWhile" , None , None , [varb], ([[v_unit_ty --> v_bool_ty]; [mkSeqTy varbTy]], mkSeqTy varbTy)) let v_seq_finally_info = makeIntrinsicValRef(fslib_MFRuntimeHelpers_nleref, "EnumerateThenFinally" , None , None , [varb], ([[mkSeqTy varbTy]; [v_unit_ty --> v_unit_ty]], mkSeqTy varbTy)) - let v_seq_of_functions_info = makeIntrinsicValRef(fslib_MFRuntimeHelpers_nleref, "EnumerateFromFunctions" , None , None , [vara;varb], ([[v_unit_ty --> varaTy]; [varaTy --> v_bool_ty]; [varaTy --> varbTy]], mkSeqTy varbTy)) + let v_seq_of_functions_info = makeIntrinsicValRef(fslib_MFRuntimeHelpers_nleref, "EnumerateFromFunctions" , None , None , [vara;varb], ([[v_unit_ty --> varaTy]; [varaTy --> v_bool_ty]; [varaTy --> varbTy]], mkSeqTy varbTy)) let v_create_event_info = makeIntrinsicValRef(fslib_MFRuntimeHelpers_nleref, "CreateEvent" , None , None , [vara;varb], ([[varaTy --> v_unit_ty]; [varaTy --> v_unit_ty]; [(v_obj_ty --> (varbTy --> v_unit_ty)) --> varaTy]], TType_app (v_fslib_IEvent2_tcr, [varaTy;varbTy]))) - let v_seq_to_array_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "toArray" , None , Some "ToArray", [varb], ([[mkSeqTy varbTy]], mkArrayType 1 varbTy)) + let v_seq_to_array_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "toArray" , None , Some "ToArray", [varb], ([[mkSeqTy varbTy]], mkArrayType 1 varbTy)) let v_seq_to_list_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "toList" , None , Some "ToList" , [varb], ([[mkSeqTy varbTy]], mkListTy varbTy)) let v_seq_map_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "map" , None , Some "Map" , [vara;varb], ([[varaTy --> varbTy]; [mkSeqTy varaTy]], mkSeqTy varbTy)) let v_seq_singleton_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "singleton" , None , Some "Singleton" , [vara], ([[varaTy]], mkSeqTy varaTy)) let v_seq_empty_info = makeIntrinsicValRef(fslib_MFSeqModule_nleref, "empty" , None , Some "Empty" , [vara], ([], mkSeqTy varaTy)) - let v_new_format_info = makeIntrinsicValRef(fslib_MFCore_nleref, ".ctor" , Some "PrintfFormat`5", None , [vara;varb;varc;vard;vare], ([[v_string_ty]], mkPrintfFormatTy varaTy varbTy varcTy vardTy vareTy)) - let v_sprintf_info = makeIntrinsicValRef(fslib_MFExtraTopLevelOperators_nleref, "sprintf" , None , Some "PrintFormatToStringThen", [vara], ([[mk_format4_ty varaTy v_unit_ty v_string_ty v_string_ty]], varaTy)) + let v_new_format_info = makeIntrinsicValRef(fslib_MFCore_nleref, ".ctor" , Some "PrintfFormat`5", None , [vara;varb;varc;vard;vare], ([[v_string_ty]], mkPrintfFormatTy varaTy varbTy varcTy vardTy vareTy)) + let v_sprintf_info = makeIntrinsicValRef(fslib_MFExtraTopLevelOperators_nleref, "sprintf" , None , Some "PrintFormatToStringThen", [vara], ([[mk_format4_ty varaTy v_unit_ty v_string_ty v_string_ty]], varaTy)) let v_lazy_force_info = makeIntrinsicValRef(fslib_MFLazyExtensions_nleref, "Force" , Some "Lazy`1" , None , [vara], ([[mkLazyTy varaTy]; []], varaTy)) let v_lazy_create_info = makeIntrinsicValRef(fslib_MFLazyExtensions_nleref, "Create" , Some "Lazy`1" , None , [vara], ([[v_unit_ty --> varaTy]], mkLazyTy varaTy)) @@ -759,17 +761,17 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let tref_DebuggableAttribute = findSysILTypeRef tname_DebuggableAttribute let tref_CompilerGeneratedAttribute = findSysILTypeRef tname_CompilerGeneratedAttribute - let mutable generatedAttribsCache = [] - let mutable debuggerBrowsableNeverAttributeCache = None - let mkDebuggerNonUserCodeAttribute() = mkILCustomAttribute ilg (findSysILTypeRef tname_DebuggerNonUserCodeAttribute, [], [], []) - let mkCompilerGeneratedAttribute () = mkILCustomAttribute ilg (tref_CompilerGeneratedAttribute, [], [], []) + let mutable generatedAttribsCache = [] + let mutable debuggerBrowsableNeverAttributeCache = None + let mkDebuggerNonUserCodeAttribute() = mkILCustomAttribute (findSysILTypeRef tname_DebuggerNonUserCodeAttribute, [], [], []) + let mkCompilerGeneratedAttribute () = mkILCustomAttribute (tref_CompilerGeneratedAttribute, [], [], []) let compilerGlobalState = CompilerGlobalState() // Requests attributes to be added to compiler generated methods. - let addGeneratedAttrs (attrs: ILAttributes) = - let attribs = - match generatedAttribsCache with - | [] -> + let addGeneratedAttrs (attrs: ILAttributes) = + let attribs = + match generatedAttribsCache with + | [] -> let res = [ if not noDebugData then yield mkCompilerGeneratedAttribute() yield mkDebuggerNonUserCodeAttribute()] @@ -782,13 +784,13 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let addPropertyGeneratedAttrs (pdef:ILPropertyDef) = pdef.With(customAttrs = addGeneratedAttrs pdef.CustomAttrs) let addFieldGeneratedAttrs (fdef:ILFieldDef) = fdef.With(customAttrs = addGeneratedAttrs fdef.CustomAttrs) - let tref_DebuggerBrowsableAttribute n = - let typ_DebuggerBrowsableState = + let tref_DebuggerBrowsableAttribute n = + let typ_DebuggerBrowsableState = let tref = findSysILTypeRef tname_DebuggerBrowsableState ILType.Value (mkILNonGenericTySpec tref) - mkILCustomAttribute ilg (findSysILTypeRef tname_DebuggerBrowsableAttribute, [typ_DebuggerBrowsableState], [ILAttribElem.Int32 n], []) + mkILCustomAttribute (findSysILTypeRef tname_DebuggerBrowsableAttribute, [typ_DebuggerBrowsableState], [ILAttribElem.Int32 n], []) - let mkDebuggerBrowsableNeverAttribute() = + let mkDebuggerBrowsableNeverAttribute() = match debuggerBrowsableNeverAttributeCache with | None -> let res = tref_DebuggerBrowsableAttribute 0 @@ -799,14 +801,14 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let addNeverAttrs (attrs: ILAttributes) = mkILCustomAttrs (attrs.AsList @ [mkDebuggerBrowsableNeverAttribute()]) let addPropertyNeverAttrs (pdef:ILPropertyDef) = pdef.With(customAttrs = addNeverAttrs pdef.CustomAttrs) let addFieldNeverAttrs (fdef:ILFieldDef) = fdef.With(customAttrs = addNeverAttrs fdef.CustomAttrs) - let mkDebuggerTypeProxyAttribute (ty : ILType) = mkILCustomAttribute ilg (findSysILTypeRef tname_DebuggerTypeProxyAttribute, [ilg.typ_Type], [ILAttribElem.TypeRef (Some ty.TypeRef)], []) + let mkDebuggerTypeProxyAttribute (ty : ILType) = mkILCustomAttribute (findSysILTypeRef tname_DebuggerTypeProxyAttribute, [ilg.typ_Type], [ILAttribElem.TypeRef (Some ty.TypeRef)], []) - let betterTyconEntries = - [| "Int32" , v_int_tcr - "IntPtr" , v_nativeint_tcr + let betterTyconEntries = + [| "Int32" , v_int_tcr + "IntPtr" , v_nativeint_tcr "UIntPtr" , v_unativeint_tcr - "Int16" , v_int16_tcr - "Int64" , v_int64_tcr + "Int16" , v_int16_tcr + "Int64" , v_int64_tcr "UInt16" , v_uint16_tcr "UInt32" , v_uint32_tcr "UInt64" , v_uint64_tcr @@ -819,13 +821,13 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d "Exception", v_exn_tcr "Char" , v_char_tcr "Double" , v_float_tcr - "Single" , v_float32_tcr |] - |> Array.map (fun (nm, tcr) -> - let ty = mkNonGenericTy tcr - nm, findSysTyconRef sys nm, (fun _ -> ty)) + "Single" , v_float32_tcr |] + |> Array.map (fun (nm, tcr) -> + let ty = mkNonGenericTy tcr + nm, findSysTyconRef sys nm, (fun _ -> ty)) let decompileTyconEntries = - [| + [| "FSharpFunc`2" , v_fastFunc_tcr , (fun tinst -> mkFunTy (List.item 0 tinst) (List.item 1 tinst)) "Tuple`2" , v_ref_tuple2_tcr , decodeTupleTy tupInfoRef "Tuple`3" , v_ref_tuple3_tcr , decodeTupleTy tupInfoRef @@ -840,7 +842,7 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d "ValueTuple`5" , v_struct_tuple5_tcr , decodeTupleTy tupInfoStruct "ValueTuple`6" , v_struct_tuple6_tcr , decodeTupleTy tupInfoStruct "ValueTuple`7" , v_struct_tuple7_tcr , decodeTupleTy tupInfoStruct - "ValueTuple`8" , v_struct_tuple8_tcr , decodeTupleTyIfPossible v_struct_tuple8_tcr tupInfoStruct |] + "ValueTuple`8" , v_struct_tuple8_tcr , decodeTupleTyIfPossible v_struct_tuple8_tcr tupInfoStruct |] let betterEntries = Array.append betterTyconEntries decompileTyconEntries @@ -848,10 +850,10 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let mutable betterTypeDict1 = null let mutable betterTypeDict2 = null - /// This map is indexed by stamps and lazy to avoid dereferencing while setting up the base imports. - let getDecompileTypeDict () = - match decompileTypeDict with - | null -> + /// This map is indexed by stamps and lazy to avoid dereferencing while setting up the base imports. + let getDecompileTypeDict () = + match decompileTypeDict with + | null -> let entries = decompileTyconEntries let t = Dictionary.newWithSize entries.Length for _, tcref, builder in entries do @@ -863,10 +865,10 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d /// This map is for use when building FSharp.Core.dll. The backing Tycon's may not yet exist for /// the TyconRef's we have in our hands, hence we can't dereference them to find their stamps. - /// So this dictionary is indexed by names. Make it lazy to avoid dereferencing while setting up the base imports. - let getBetterTypeDict1 () = - match betterTypeDict1 with - | null -> + /// So this dictionary is indexed by names. Make it lazy to avoid dereferencing while setting up the base imports. + let getBetterTypeDict1 () = + match betterTypeDict1 with + | null -> let entries = betterEntries let t = Dictionary.newWithSize entries.Length for nm, tcref, builder in entries do @@ -876,10 +878,10 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d | t -> t /// This map is for use in normal times (not building FSharp.Core.dll). It is indexed by stamps - /// and lazy to avoid dereferencing while setting up the base imports. - let getBetterTypeDict2 () = - match betterTypeDict2 with - | null -> + /// and lazy to avoid dereferencing while setting up the base imports. + let getBetterTypeDict2 () = + match betterTypeDict2 with + | null -> let entries = betterEntries let t = Dictionary.newWithSize entries.Length for _, tcref, builder in entries do @@ -892,8 +894,8 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d /// For logical purposes equate some F# types with .NET types, e.g. TType_tuple == System.Tuple/ValueTuple. /// Doing this normalization is a fairly performance critical piece of code as it is frequently invoked /// in the process of converting .NET metadata to F# internal compiler data structures (see import.fs). - let decompileTy (tcref: EntityRef) tinst = - if compilingFslib then + let decompileTy (tcref: EntityRef) tinst = + if compilingFslib then // No need to decompile when compiling FSharp.Core.dll TType_app (tcref, tinst) else @@ -902,11 +904,11 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d | true, builder -> builder tinst | _ -> TType_app (tcref, tinst) - /// For cosmetic purposes "improve" some .NET types, e.g. Int32 --> int32. + /// For cosmetic purposes "improve" some .NET types, e.g. Int32 --> int32. /// Doing this normalization is a fairly performance critical piece of code as it is frequently invoked /// in the process of converting .NET metadata to F# internal compiler data structures (see import.fs). - let improveTy (tcref: EntityRef) tinst = - if compilingFslib then + let improveTy (tcref: EntityRef) tinst = + if compilingFslib then let dict = getBetterTypeDict1() match dict.TryGetValue tcref.LogicalName with | true, builder -> builder tcref tinst @@ -919,112 +921,119 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d override x.ToString() = "" - member __.ilg=ilg + member _.ilg=ilg // A table of all intrinsics that the compiler cares about - member __.knownIntrinsics = v_knownIntrinsics + member _.knownIntrinsics = v_knownIntrinsics // A table of known modules in FSharp.Core. Not all modules are necessarily listed, but the more we list the // better the job we do of mapping from provided expressions back to FSharp.Core F# functions and values. - member __.knownFSharpCoreModules = v_knownFSharpCoreModules - member __.compilingFslib = compilingFslib - member __.mlCompatibility = mlCompatibility - member __.emitDebugInfoInQuotations = emitDebugInfoInQuotations - member __.directoryToResolveRelativePaths= directoryToResolveRelativePaths - member __.pathMap = pathMap - member __.langVersion = langVersion - member __.unionCaseRefEq x y = primUnionCaseRefEq compilingFslib fslibCcu x y - member __.valRefEq x y = primValRefEq compilingFslib fslibCcu x y - member __.fslibCcu = fslibCcu + member _.knownFSharpCoreModules = v_knownFSharpCoreModules + member _.compilingFslib = compilingFslib + member _.mlCompatibility = mlCompatibility + member _.emitDebugInfoInQuotations = emitDebugInfoInQuotations + member _.directoryToResolveRelativePaths= directoryToResolveRelativePaths + member _.pathMap = pathMap + member _.langVersion = langVersion + member _.unionCaseRefEq x y = primUnionCaseRefEq compilingFslib fslibCcu x y + member _.valRefEq x y = primValRefEq compilingFslib fslibCcu x y + member _.fslibCcu = fslibCcu member val refcell_tcr_canon = v_refcell_tcr_canon member val option_tcr_canon = mk_MFCore_tcref fslibCcu "Option`1" - member __.list_tcr_canon = v_list_tcr_canon + member val valueoption_tcr_canon = mk_MFCore_tcref fslibCcu "ValueOption`1" + member _.list_tcr_canon = v_list_tcr_canon member val set_tcr_canon = mk_MFCollections_tcref fslibCcu "Set`1" member val map_tcr_canon = mk_MFCollections_tcref fslibCcu "Map`2" - member __.lazy_tcr_canon = lazy_tcr + member _.lazy_tcr_canon = lazy_tcr member val refcell_tcr_nice = v_refcell_tcr_nice member val array_tcr_nice = v_il_arr_tcr_map.[0] - member __.option_tcr_nice = v_option_tcr_nice - member __.list_tcr_nice = v_list_tcr_nice - member __.lazy_tcr_nice = v_lazy_tcr_nice - member __.format_tcr = v_format_tcr - member __.expr_tcr = v_expr_tcr - member __.raw_expr_tcr = v_raw_expr_tcr - member __.nativeint_tcr = v_nativeint_tcr - member __.unativeint_tcr = v_unativeint_tcr - member __.int_tcr = v_int_tcr - member __.int32_tcr = v_int32_tcr - member __.int16_tcr = v_int16_tcr - member __.int64_tcr = v_int64_tcr - member __.uint16_tcr = v_uint16_tcr - member __.uint32_tcr = v_uint32_tcr - member __.uint64_tcr = v_uint64_tcr - member __.sbyte_tcr = v_sbyte_tcr - member __.decimal_tcr = v_decimal_tcr - member __.date_tcr = v_date_tcr - member __.pdecimal_tcr = v_pdecimal_tcr - member __.byte_tcr = v_byte_tcr - member __.bool_tcr = v_bool_tcr - member __.unit_tcr_canon = v_unit_tcr_canon - member __.unit_tcr_nice = v_unit_tcr_nice - member __.exn_tcr = v_exn_tcr - member __.char_tcr = v_char_tcr - member __.float_tcr = v_float_tcr - member __.float32_tcr = v_float32_tcr - member __.pfloat_tcr = v_pfloat_tcr - member __.pfloat32_tcr = v_pfloat32_tcr - member __.pint_tcr = v_pint_tcr - member __.pint8_tcr = v_pint8_tcr - member __.pint16_tcr = v_pint16_tcr - member __.pint64_tcr = v_pint64_tcr - member __.pnativeint_tcr = v_pnativeint_tcr - member __.puint_tcr = v_puint_tcr - member __.puint8_tcr = v_puint8_tcr - member __.puint16_tcr = v_puint16_tcr - member __.puint64_tcr = v_puint64_tcr - member __.punativeint_tcr = v_punativeint_tcr - member __.byref_tcr = v_byref_tcr - member __.byref2_tcr = v_byref2_tcr - member __.outref_tcr = v_outref_tcr - member __.inref_tcr = v_inref_tcr - member __.nativeptr_tcr = v_nativeptr_tcr - member __.voidptr_tcr = v_voidptr_tcr - member __.ilsigptr_tcr = v_ilsigptr_tcr - member __.fastFunc_tcr = v_fastFunc_tcr - member __.tcref_IQueryable = v_tcref_IQueryable - member __.tcref_IObservable = v_tcref_IObservable - member __.tcref_IObserver = v_tcref_IObserver - member __.fslib_IEvent2_tcr = v_fslib_IEvent2_tcr - member __.fslib_IDelegateEvent_tcr = v_fslib_IDelegateEvent_tcr - member __.seq_tcr = v_seq_tcr + member _.option_tcr_nice = v_option_tcr_nice + member _.valueoption_tcr_nice = v_valueoption_tcr_nice + member _.list_tcr_nice = v_list_tcr_nice + member _.lazy_tcr_nice = v_lazy_tcr_nice + member _.format_tcr = v_format_tcr + member _.expr_tcr = v_expr_tcr + member _.raw_expr_tcr = v_raw_expr_tcr + member _.nativeint_tcr = v_nativeint_tcr + member _.unativeint_tcr = v_unativeint_tcr + member _.int_tcr = v_int_tcr + member _.int32_tcr = v_int32_tcr + member _.int16_tcr = v_int16_tcr + member _.int64_tcr = v_int64_tcr + member _.uint16_tcr = v_uint16_tcr + member _.uint32_tcr = v_uint32_tcr + member _.uint64_tcr = v_uint64_tcr + member _.sbyte_tcr = v_sbyte_tcr + member _.decimal_tcr = v_decimal_tcr + member _.date_tcr = v_date_tcr + member _.pdecimal_tcr = v_pdecimal_tcr + member _.byte_tcr = v_byte_tcr + member _.bool_tcr = v_bool_tcr + member _.unit_tcr_canon = v_unit_tcr_canon + member _.unit_tcr_nice = v_unit_tcr_nice + member _.exn_tcr = v_exn_tcr + member _.char_tcr = v_char_tcr + member _.float_tcr = v_float_tcr + member _.float32_tcr = v_float32_tcr + member _.pfloat_tcr = v_pfloat_tcr + member _.pfloat32_tcr = v_pfloat32_tcr + member _.pint_tcr = v_pint_tcr + member _.pint8_tcr = v_pint8_tcr + member _.pint16_tcr = v_pint16_tcr + member _.pint64_tcr = v_pint64_tcr + member _.pnativeint_tcr = v_pnativeint_tcr + member _.puint_tcr = v_puint_tcr + member _.puint8_tcr = v_puint8_tcr + member _.puint16_tcr = v_puint16_tcr + member _.puint64_tcr = v_puint64_tcr + member _.punativeint_tcr = v_punativeint_tcr + member _.byref_tcr = v_byref_tcr + member _.byref2_tcr = v_byref2_tcr + member _.outref_tcr = v_outref_tcr + member _.inref_tcr = v_inref_tcr + member _.nativeptr_tcr = v_nativeptr_tcr + member _.voidptr_tcr = v_voidptr_tcr + member _.ilsigptr_tcr = v_ilsigptr_tcr + member _.fastFunc_tcr = v_fastFunc_tcr + member _.tcref_IQueryable = v_tcref_IQueryable + member _.tcref_IObservable = v_tcref_IObservable + member _.tcref_IObserver = v_tcref_IObserver + member _.fslib_IEvent2_tcr = v_fslib_IEvent2_tcr + member _.fslib_IDelegateEvent_tcr = v_fslib_IDelegateEvent_tcr + member _.seq_tcr = v_seq_tcr member val seq_base_tcr = mk_MFCompilerServices_tcref fslibCcu "GeneratedSequenceBase`1" + member val ListCollector_tcr = mk_MFCompilerServices_tcref fslibCcu "ListCollector`1" + member val ArrayCollector_tcr = mk_MFCompilerServices_tcref fslibCcu "ArrayCollector`1" + member g.mk_GeneratedSequenceBase_ty seqElemTy = TType_app(g.seq_base_tcr,[seqElemTy]) + member g.mk_ListCollector_ty seqElemTy = TType_app(g.ListCollector_tcr,[seqElemTy]) + member g.mk_ArrayCollector_ty seqElemTy = TType_app(g.ArrayCollector_tcr,[seqElemTy]) member val byrefkind_In_tcr = mkNonLocalTyconRef fslib_MFByRefKinds_nleref "In" member val byrefkind_Out_tcr = mkNonLocalTyconRef fslib_MFByRefKinds_nleref "Out" member val byrefkind_InOut_tcr = mkNonLocalTyconRef fslib_MFByRefKinds_nleref "InOut" member val measureproduct_tcr = mk_MFCompilerServices_tcref fslibCcu "MeasureProduct`2" member val measureinverse_tcr = mk_MFCompilerServices_tcref fslibCcu "MeasureInverse`1" member val measureone_tcr = mk_MFCompilerServices_tcref fslibCcu "MeasureOne" - member __.il_arr_tcr_map = v_il_arr_tcr_map - member __.ref_tuple1_tcr = v_ref_tuple1_tcr - member __.ref_tuple2_tcr = v_ref_tuple2_tcr - member __.ref_tuple3_tcr = v_ref_tuple3_tcr - member __.ref_tuple4_tcr = v_ref_tuple4_tcr - member __.ref_tuple5_tcr = v_ref_tuple5_tcr - member __.ref_tuple6_tcr = v_ref_tuple6_tcr - member __.ref_tuple7_tcr = v_ref_tuple7_tcr - member __.ref_tuple8_tcr = v_ref_tuple8_tcr - member __.struct_tuple1_tcr = v_struct_tuple1_tcr - member __.struct_tuple2_tcr = v_struct_tuple2_tcr - member __.struct_tuple3_tcr = v_struct_tuple3_tcr - member __.struct_tuple4_tcr = v_struct_tuple4_tcr - member __.struct_tuple5_tcr = v_struct_tuple5_tcr - member __.struct_tuple6_tcr = v_struct_tuple6_tcr - member __.struct_tuple7_tcr = v_struct_tuple7_tcr - member __.struct_tuple8_tcr = v_struct_tuple8_tcr - member __.choice2_tcr = v_choice2_tcr - member __.choice3_tcr = v_choice3_tcr - member __.choice4_tcr = v_choice4_tcr - member __.choice5_tcr = v_choice5_tcr - member __.choice6_tcr = v_choice6_tcr - member __.choice7_tcr = v_choice7_tcr + member _.il_arr_tcr_map = v_il_arr_tcr_map + member _.ref_tuple1_tcr = v_ref_tuple1_tcr + member _.ref_tuple2_tcr = v_ref_tuple2_tcr + member _.ref_tuple3_tcr = v_ref_tuple3_tcr + member _.ref_tuple4_tcr = v_ref_tuple4_tcr + member _.ref_tuple5_tcr = v_ref_tuple5_tcr + member _.ref_tuple6_tcr = v_ref_tuple6_tcr + member _.ref_tuple7_tcr = v_ref_tuple7_tcr + member _.ref_tuple8_tcr = v_ref_tuple8_tcr + member _.struct_tuple1_tcr = v_struct_tuple1_tcr + member _.struct_tuple2_tcr = v_struct_tuple2_tcr + member _.struct_tuple3_tcr = v_struct_tuple3_tcr + member _.struct_tuple4_tcr = v_struct_tuple4_tcr + member _.struct_tuple5_tcr = v_struct_tuple5_tcr + member _.struct_tuple6_tcr = v_struct_tuple6_tcr + member _.struct_tuple7_tcr = v_struct_tuple7_tcr + member _.struct_tuple8_tcr = v_struct_tuple8_tcr + member _.choice2_tcr = v_choice2_tcr + member _.choice3_tcr = v_choice3_tcr + member _.choice4_tcr = v_choice4_tcr + member _.choice5_tcr = v_choice5_tcr + member _.choice6_tcr = v_choice6_tcr + member _.choice7_tcr = v_choice7_tcr member val nativeint_ty = v_nativeint_ty member val unativeint_ty = v_unativeint_ty member val int32_ty = v_int32_ty @@ -1034,26 +1043,26 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val uint32_ty = v_uint32_ty member val uint64_ty = v_uint64_ty member val sbyte_ty = v_sbyte_ty - member __.byte_ty = v_byte_ty - member __.bool_ty = v_bool_ty - member __.int_ty = v_int_ty - member __.string_ty = v_string_ty - member __.system_IFormattable_tcref = v_IFormattable_tcref - member __.system_FormattableString_tcref = v_FormattableString_tcref - member __.system_FormattableStringFactory_tcref = v_FormattableStringFactory_tcref - member __.system_IFormattable_ty = v_IFormattable_ty - member __.system_FormattableString_ty = v_FormattableString_ty - member __.system_FormattableStringFactory_ty = v_FormattableStringFactory_ty - member __.unit_ty = v_unit_ty - member __.obj_ty = v_obj_ty - member __.char_ty = v_char_ty - member __.decimal_ty = v_decimal_ty + member _.byte_ty = v_byte_ty + member _.bool_ty = v_bool_ty + member _.int_ty = v_int_ty + member _.string_ty = v_string_ty + member _.system_IFormattable_tcref = v_IFormattable_tcref + member _.system_FormattableString_tcref = v_FormattableString_tcref + member _.system_FormattableStringFactory_tcref = v_FormattableStringFactory_tcref + member _.system_IFormattable_ty = v_IFormattable_ty + member _.system_FormattableString_ty = v_FormattableString_ty + member _.system_FormattableStringFactory_ty = v_FormattableStringFactory_ty + member _.unit_ty = v_unit_ty + member _.obj_ty = v_obj_ty + member _.char_ty = v_char_ty + member _.decimal_ty = v_decimal_ty member val exn_ty = mkNonGenericTy v_exn_tcr member val float_ty = v_float_ty member val float32_ty = v_float32_ty /// Memoization table to help minimize the number of ILSourceDocument objects we create - member __.memoize_file x = v_memoize_file.Apply x + member _.memoize_file x = v_memoize_file.Apply x member val system_Array_ty = mkSysNonGenericTy sys "Array" member val system_Object_ty = mkSysNonGenericTy sys "Object" @@ -1067,7 +1076,7 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val system_String_typ = mkSysNonGenericTy sys "String" member val system_String_tcref = findSysTyconRef sys "String" member val system_Int32_ty = mkSysNonGenericTy sys "Int32" - member __.system_Type_ty = v_system_Type_ty + member _.system_Type_ty = v_system_Type_ty member val system_TypedReference_tcref = tryFindSysTyconRef sys "TypedReference" member val system_ArgIterator_tcref = tryFindSysTyconRef sys "ArgIterator" member val system_RuntimeArgumentHandle_tcref = tryFindSysTyconRef sys "RuntimeArgumentHandle" @@ -1077,7 +1086,7 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val system_Int32_tcref = findSysTyconRef sys "Int32" member val system_Int64_tcref = findSysTyconRef sys "Int64" member val system_IntPtr_tcref = findSysTyconRef sys "IntPtr" - member val system_Bool_tcref = findSysTyconRef sys "Boolean" + member val system_Bool_tcref = findSysTyconRef sys "Boolean" member val system_Byte_tcref = findSysTyconRef sys "Byte" member val system_UInt16_tcref = findSysTyconRef sys "UInt16" member val system_Char_tcref = findSysTyconRef sys "Char" @@ -1087,17 +1096,17 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val system_Single_tcref = findSysTyconRef sys "Single" member val system_Double_tcref = findSysTyconRef sys "Double" member val system_RuntimeTypeHandle_ty = mkSysNonGenericTy sys "RuntimeTypeHandle" - member __.system_RuntimeMethodHandle_ty = v_system_RuntimeMethodHandle_ty - + member _.system_RuntimeMethodHandle_ty = v_system_RuntimeMethodHandle_ty + member val system_MarshalByRefObject_tcref = tryFindSysTyconRef sys "MarshalByRefObject" member val system_MarshalByRefObject_ty = tryMkSysNonGenericTy sys "MarshalByRefObject" member val system_ExceptionDispatchInfo_ty = tryMkSysNonGenericTy ["System"; "Runtime"; "ExceptionServices"] "ExceptionDispatchInfo" - member __.system_Reflection_MethodInfo_ty = v_system_Reflection_MethodInfo_ty - - member val system_Array_tcref = findSysTyconRef sys "Array" + member _.system_Reflection_MethodInfo_ty = v_system_Reflection_MethodInfo_ty + + member val system_Array_tcref = v_Array_tcref member val system_Object_tcref = findSysTyconRef sys "Object" member val system_Value_tcref = findSysTyconRef sys "ValueType" member val system_Void_tcref = findSysTyconRef sys "Void" @@ -1109,22 +1118,22 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val system_LinqExpression_tcref = v_linqExpression_tcr member val mk_IStructuralComparable_ty = mkSysNonGenericTy sysCollections "IStructuralComparable" - + member val mk_IStructuralEquatable_ty = mkSysNonGenericTy sysCollections "IStructuralEquatable" - member __.IComparer_ty = v_IComparer_ty - member __.IEqualityComparer_ty = v_IEqualityComparer_ty + member _.IComparer_ty = v_IComparer_ty + member _.IEqualityComparer_ty = v_IEqualityComparer_ty member val tcref_System_Collections_IComparer = findSysTyconRef sysCollections "IComparer" member val tcref_System_Collections_IEqualityComparer = findSysTyconRef sysCollections "IEqualityComparer" member val tcref_System_Collections_Generic_IEqualityComparer = findSysTyconRef sysGenerics "IEqualityComparer`1" member val tcref_System_Collections_Generic_Dictionary = findSysTyconRef sysGenerics "Dictionary`2" member val tcref_System_Collections_Generic_IDictionary = findSysTyconRef sysGenerics "IDictionary`2" - + member val tcref_System_IComparable = findSysTyconRef sys "IComparable" member val tcref_System_IStructuralComparable = findSysTyconRef sysCollections "IStructuralComparable" member val tcref_System_IStructuralEquatable = findSysTyconRef sysCollections "IStructuralEquatable" member val tcref_System_IDisposable = findSysTyconRef sys "IDisposable" - + member val tcref_LanguagePrimitives = mk_MFCore_tcref fslibCcu "LanguagePrimitives" member val tcref_System_Collections_Generic_List = findSysTyconRef sysGenerics "List`1" @@ -1132,12 +1141,12 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val tcref_System_Collections_Generic_IReadOnlyList = findSysTyconRef sysGenerics "IReadOnlyList`1" member val tcref_System_Collections_Generic_ICollection = findSysTyconRef sysGenerics "ICollection`1" member val tcref_System_Collections_Generic_IReadOnlyCollection = findSysTyconRef sysGenerics "IReadOnlyCollection`1" - member __.tcref_System_Collections_IEnumerable = v_tcref_System_Collections_IEnumerable + member _.tcref_System_Collections_IEnumerable = v_tcref_System_Collections_IEnumerable - member __.tcref_System_Collections_Generic_IEnumerable = v_IEnumerable_tcr - member __.tcref_System_Collections_Generic_IEnumerator = v_IEnumerator_tcr - - member __.tcref_System_Attribute = v_System_Attribute_tcr + member _.tcref_System_Collections_Generic_IEnumerable = v_IEnumerable_tcr + member _.tcref_System_Collections_Generic_IEnumerator = v_IEnumerator_tcr + + member _.tcref_System_Attribute = v_System_Attribute_tcr // Review: Does this need to be an option type? member val System_Runtime_CompilerServices_RuntimeFeature_ty = tryFindSysTyconRef sysCompilerServices "RuntimeFeature" |> Option.map mkNonGenericTy @@ -1160,24 +1169,24 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val attrib_ParamArrayAttribute = findSysAttrib "System.ParamArrayAttribute" member val attrib_IDispatchConstantAttribute = tryFindSysAttrib "System.Runtime.CompilerServices.IDispatchConstantAttribute" member val attrib_IUnknownConstantAttribute = tryFindSysAttrib "System.Runtime.CompilerServices.IUnknownConstantAttribute" - + // We use 'findSysAttrib' here because lookup on attribute is done by name comparison, and can proceed // even if the type is not found in a system assembly. member val attrib_IsByRefLikeAttribute = findSysAttrib "System.Runtime.CompilerServices.IsByRefLikeAttribute" member val attrib_IsReadOnlyAttribute = findSysAttrib "System.Runtime.CompilerServices.IsReadOnlyAttribute" - + member val attrib_SystemObsolete = findSysAttrib "System.ObsoleteAttribute" member val attrib_DllImportAttribute = tryFindSysAttrib "System.Runtime.InteropServices.DllImportAttribute" member val attrib_StructLayoutAttribute = findSysAttrib "System.Runtime.InteropServices.StructLayoutAttribute" member val attrib_TypeForwardedToAttribute = findSysAttrib "System.Runtime.CompilerServices.TypeForwardedToAttribute" member val attrib_ComVisibleAttribute = findSysAttrib "System.Runtime.InteropServices.ComVisibleAttribute" member val attrib_ComImportAttribute = tryFindSysAttrib "System.Runtime.InteropServices.ComImportAttribute" - member val attrib_FieldOffsetAttribute = findSysAttrib "System.Runtime.InteropServices.FieldOffsetAttribute" + member val attrib_FieldOffsetAttribute = findSysAttrib "System.Runtime.InteropServices.FieldOffsetAttribute" member val attrib_MarshalAsAttribute = tryFindSysAttrib "System.Runtime.InteropServices.MarshalAsAttribute" - member val attrib_InAttribute = findSysAttrib "System.Runtime.InteropServices.InAttribute" - member val attrib_OutAttribute = findSysAttrib "System.Runtime.InteropServices.OutAttribute" - member val attrib_OptionalAttribute = tryFindSysAttrib "System.Runtime.InteropServices.OptionalAttribute" - member val attrib_DefaultParameterValueAttribute = tryFindSysAttrib "System.Runtime.InteropServices.DefaultParameterValueAttribute" + member val attrib_InAttribute = findSysAttrib "System.Runtime.InteropServices.InAttribute" + member val attrib_OutAttribute = findSysAttrib "System.Runtime.InteropServices.OutAttribute" + member val attrib_OptionalAttribute = tryFindSysAttrib "System.Runtime.InteropServices.OptionalAttribute" + member val attrib_DefaultParameterValueAttribute = tryFindSysAttrib "System.Runtime.InteropServices.DefaultParameterValueAttribute" member val attrib_ThreadStaticAttribute = tryFindSysAttrib "System.ThreadStaticAttribute" member val attrib_SpecialNameAttribute = tryFindSysAttrib "System.Runtime.CompilerServices.SpecialNameAttribute" member val attrib_VolatileFieldAttribute = mk_MFCore_attrib "VolatileFieldAttribute" @@ -1192,11 +1201,12 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val attrib_CallerLineNumberAttribute = findSysAttrib "System.Runtime.CompilerServices.CallerLineNumberAttribute" member val attrib_CallerFilePathAttribute = findSysAttrib "System.Runtime.CompilerServices.CallerFilePathAttribute" member val attrib_CallerMemberNameAttribute = findSysAttrib "System.Runtime.CompilerServices.CallerMemberNameAttribute" + member val attrib_SkipLocalsInitAttribute = findSysAttrib "System.Runtime.CompilerServices.SkipLocalsInitAttribute" member val attrib_ProjectionParameterAttribute = mk_MFCore_attrib "ProjectionParameterAttribute" member val attrib_CustomOperationAttribute = mk_MFCore_attrib "CustomOperationAttribute" member val attrib_NonSerializedAttribute = tryFindSysAttrib "System.NonSerializedAttribute" - + member val attrib_AutoSerializableAttribute = mk_MFCore_attrib "AutoSerializableAttribute" member val attrib_RequireQualifiedAccessAttribute = mk_MFCore_attrib "RequireQualifiedAccessAttribute" member val attrib_EntryPointAttribute = mk_MFCore_attrib "EntryPointAttribute" @@ -1246,27 +1256,27 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member g.decompileType tcref tinst = decompileTy tcref tinst - member __.new_decimal_info = v_new_decimal_info - member __.seq_info = v_seq_info - member val seq_vref = (ValRefForIntrinsic v_seq_info) + member _.new_decimal_info = v_new_decimal_info + member _.seq_info = v_seq_info + member val seq_vref = (ValRefForIntrinsic v_seq_info) member val fsharpref_vref = (ValRefForIntrinsic v_refcell_info) - member val and_vref = (ValRefForIntrinsic v_and_info) + member val and_vref = (ValRefForIntrinsic v_and_info) member val and2_vref = (ValRefForIntrinsic v_and2_info) member val addrof_vref = (ValRefForIntrinsic v_addrof_info) member val addrof2_vref = (ValRefForIntrinsic v_addrof2_info) member val or_vref = (ValRefForIntrinsic v_or_info) member val splice_expr_vref = (ValRefForIntrinsic v_splice_expr_info) member val splice_raw_expr_vref = (ValRefForIntrinsic v_splice_raw_expr_info) - member val or2_vref = (ValRefForIntrinsic v_or2_info) + member val or2_vref = (ValRefForIntrinsic v_or2_info) member val generic_equality_er_inner_vref = ValRefForIntrinsic v_generic_equality_er_inner_info member val generic_equality_per_inner_vref = ValRefForIntrinsic v_generic_equality_per_inner_info member val generic_equality_withc_inner_vref = ValRefForIntrinsic v_generic_equality_withc_inner_info member val generic_comparison_inner_vref = ValRefForIntrinsic v_generic_comparison_inner_info member val generic_comparison_withc_inner_vref = ValRefForIntrinsic v_generic_comparison_withc_inner_info - member __.generic_comparison_withc_outer_info = v_generic_comparison_withc_outer_info - member __.generic_equality_er_outer_info = v_generic_equality_er_outer_info - member __.generic_equality_withc_outer_info = v_generic_equality_withc_outer_info - member __.generic_hash_withc_outer_info = v_generic_hash_withc_outer_info + member _.generic_comparison_withc_outer_info = v_generic_comparison_withc_outer_info + member _.generic_equality_er_outer_info = v_generic_equality_er_outer_info + member _.generic_equality_withc_outer_info = v_generic_equality_withc_outer_info + member _.generic_hash_withc_outer_info = v_generic_hash_withc_outer_info member val generic_hash_inner_vref = ValRefForIntrinsic v_generic_hash_inner_info member val generic_hash_withc_inner_vref = ValRefForIntrinsic v_generic_hash_withc_inner_info @@ -1286,55 +1296,55 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val unchecked_multiply_vref = ValRefForIntrinsic v_unchecked_multiply_info member val unchecked_defaultof_vref = ValRefForIntrinsic v_unchecked_defaultof_info - member __.bitwise_or_info = v_bitwise_or_info - member __.bitwise_and_info = v_bitwise_and_info - member __.bitwise_xor_info = v_bitwise_xor_info - member __.bitwise_unary_not_info = v_bitwise_unary_not_info - member __.bitwise_shift_left_info = v_bitwise_shift_left_info - member __.bitwise_shift_right_info = v_bitwise_shift_right_info - member __.unchecked_addition_info = v_unchecked_addition_info - member __.unchecked_subtraction_info = v_unchecked_subtraction_info - member __.unchecked_multiply_info = v_unchecked_multiply_info - member __.unchecked_division_info = v_unchecked_division_info - member __.unchecked_modulus_info = v_unchecked_modulus_info - member __.unchecked_unary_plus_info = v_unchecked_unary_plus_info - member __.unchecked_unary_minus_info = v_unchecked_unary_minus_info - member __.unchecked_unary_not_info = v_unchecked_unary_not_info - member __.unchecked_defaultof_info = v_unchecked_defaultof_info - - member __.checked_addition_info = v_checked_addition_info - member __.checked_subtraction_info = v_checked_subtraction_info - member __.checked_multiply_info = v_checked_multiply_info - member __.checked_unary_minus_info = v_checked_unary_minus_info - - member __.byte_checked_info = v_byte_checked_info - member __.sbyte_checked_info = v_sbyte_checked_info - member __.int16_checked_info = v_int16_checked_info - member __.uint16_checked_info = v_uint16_checked_info - member __.int_checked_info = v_int_checked_info - member __.int32_checked_info = v_int32_checked_info - member __.uint32_checked_info = v_uint32_checked_info - member __.int64_checked_info = v_int64_checked_info - member __.uint64_checked_info = v_uint64_checked_info - member __.nativeint_checked_info = v_nativeint_checked_info - member __.unativeint_checked_info = v_unativeint_checked_info - - member __.byte_operator_info = v_byte_operator_info - member __.sbyte_operator_info = v_sbyte_operator_info - member __.int16_operator_info = v_int16_operator_info - member __.uint16_operator_info = v_uint16_operator_info - member __.int_operator_info = v_int_operator_info - member __.int32_operator_info = v_int32_operator_info - member __.uint32_operator_info = v_uint32_operator_info - member __.int64_operator_info = v_int64_operator_info - member __.uint64_operator_info = v_uint64_operator_info - member __.float32_operator_info = v_float32_operator_info - member __.float_operator_info = v_float_operator_info - member __.nativeint_operator_info = v_nativeint_operator_info - member __.unativeint_operator_info = v_unativeint_operator_info - - member __.char_operator_info = v_char_operator_info - member __.enum_operator_info = v_enum_operator_info + member _.bitwise_or_info = v_bitwise_or_info + member _.bitwise_and_info = v_bitwise_and_info + member _.bitwise_xor_info = v_bitwise_xor_info + member _.bitwise_unary_not_info = v_bitwise_unary_not_info + member _.bitwise_shift_left_info = v_bitwise_shift_left_info + member _.bitwise_shift_right_info = v_bitwise_shift_right_info + member _.unchecked_addition_info = v_unchecked_addition_info + member _.unchecked_subtraction_info = v_unchecked_subtraction_info + member _.unchecked_multiply_info = v_unchecked_multiply_info + member _.unchecked_division_info = v_unchecked_division_info + member _.unchecked_modulus_info = v_unchecked_modulus_info + member _.unchecked_unary_plus_info = v_unchecked_unary_plus_info + member _.unchecked_unary_minus_info = v_unchecked_unary_minus_info + member _.unchecked_unary_not_info = v_unchecked_unary_not_info + member _.unchecked_defaultof_info = v_unchecked_defaultof_info + + member _.checked_addition_info = v_checked_addition_info + member _.checked_subtraction_info = v_checked_subtraction_info + member _.checked_multiply_info = v_checked_multiply_info + member _.checked_unary_minus_info = v_checked_unary_minus_info + + member _.byte_checked_info = v_byte_checked_info + member _.sbyte_checked_info = v_sbyte_checked_info + member _.int16_checked_info = v_int16_checked_info + member _.uint16_checked_info = v_uint16_checked_info + member _.int_checked_info = v_int_checked_info + member _.int32_checked_info = v_int32_checked_info + member _.uint32_checked_info = v_uint32_checked_info + member _.int64_checked_info = v_int64_checked_info + member _.uint64_checked_info = v_uint64_checked_info + member _.nativeint_checked_info = v_nativeint_checked_info + member _.unativeint_checked_info = v_unativeint_checked_info + + member _.byte_operator_info = v_byte_operator_info + member _.sbyte_operator_info = v_sbyte_operator_info + member _.int16_operator_info = v_int16_operator_info + member _.uint16_operator_info = v_uint16_operator_info + member _.int_operator_info = v_int_operator_info + member _.int32_operator_info = v_int32_operator_info + member _.uint32_operator_info = v_uint32_operator_info + member _.int64_operator_info = v_int64_operator_info + member _.uint64_operator_info = v_uint64_operator_info + member _.float32_operator_info = v_float32_operator_info + member _.float_operator_info = v_float_operator_info + member _.nativeint_operator_info = v_nativeint_operator_info + member _.unativeint_operator_info = v_unativeint_operator_info + + member _.char_operator_info = v_char_operator_info + member _.enum_operator_info = v_enum_operator_info member val compare_operator_vref = ValRefForIntrinsic v_compare_operator_info member val equals_operator_vref = ValRefForIntrinsic v_equals_operator_info @@ -1354,27 +1364,27 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val invalid_op_vref = ValRefForIntrinsic v_invalid_op_info member val failwithf_vref = ValRefForIntrinsic v_failwithf_info - member __.equals_operator_info = v_equals_operator_info - member __.not_equals_operator = v_not_equals_operator_info - member __.less_than_operator = v_less_than_operator_info - member __.less_than_or_equals_operator = v_less_than_or_equals_operator_info - member __.greater_than_operator = v_greater_than_operator_info - member __.greater_than_or_equals_operator = v_greater_than_or_equals_operator_info - - member __.hash_info = v_hash_info - member __.box_info = v_box_info - member __.isnull_info = v_isnull_info - member __.isnotnull_info = v_isnotnull_info - member __.raise_info = v_raise_info - member __.failwith_info = v_failwith_info - member __.invalid_arg_info = v_invalid_arg_info - member __.null_arg_info = v_null_arg_info - member __.invalid_op_info = v_invalid_op_info - member __.failwithf_info = v_failwithf_info - member __.reraise_info = v_reraise_info - member __.methodhandleof_info = v_methodhandleof_info - member __.typeof_info = v_typeof_info - member __.typedefof_info = v_typedefof_info + member _.equals_operator_info = v_equals_operator_info + member _.not_equals_operator = v_not_equals_operator_info + member _.less_than_operator = v_less_than_operator_info + member _.less_than_or_equals_operator = v_less_than_or_equals_operator_info + member _.greater_than_operator = v_greater_than_operator_info + member _.greater_than_or_equals_operator = v_greater_than_or_equals_operator_info + + member _.hash_info = v_hash_info + member _.box_info = v_box_info + member _.isnull_info = v_isnull_info + member _.isnotnull_info = v_isnotnull_info + member _.raise_info = v_raise_info + member _.failwith_info = v_failwith_info + member _.invalid_arg_info = v_invalid_arg_info + member _.null_arg_info = v_null_arg_info + member _.invalid_op_info = v_invalid_op_info + member _.failwithf_info = v_failwithf_info + member _.reraise_info = v_reraise_info + member _.methodhandleof_info = v_methodhandleof_info + member _.typeof_info = v_typeof_info + member _.typedefof_info = v_typedefof_info member val reraise_vref = ValRefForIntrinsic v_reraise_info member val methodhandleof_vref = ValRefForIntrinsic v_methodhandleof_info @@ -1418,62 +1428,64 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val query_select_vref = ValRefForIntrinsic v_query_select_value_info member val query_where_vref = ValRefForIntrinsic v_query_where_value_info member val query_zero_vref = ValRefForIntrinsic v_query_zero_value_info - - member __.seq_collect_info = v_seq_collect_info - member __.seq_using_info = v_seq_using_info - member __.seq_delay_info = v_seq_delay_info - member __.seq_append_info = v_seq_append_info - member __.seq_generated_info = v_seq_generated_info - member __.seq_finally_info = v_seq_finally_info - member __.seq_of_functions_info = v_seq_of_functions_info - member __.seq_map_info = v_seq_map_info - member __.seq_singleton_info = v_seq_singleton_info - member __.seq_empty_info = v_seq_empty_info - member __.sprintf_info = v_sprintf_info - member __.new_format_info = v_new_format_info - member __.unbox_info = v_unbox_info - member __.get_generic_comparer_info = v_get_generic_comparer_info - member __.get_generic_er_equality_comparer_info = v_get_generic_er_equality_comparer_info - member __.get_generic_per_equality_comparer_info = v_get_generic_per_equality_comparer_info - member __.dispose_info = v_dispose_info - member __.getstring_info = v_getstring_info - member __.unbox_fast_info = v_unbox_fast_info - member __.istype_info = v_istype_info - member __.istype_fast_info = v_istype_fast_info - member __.lazy_force_info = v_lazy_force_info - member __.lazy_create_info = v_lazy_create_info - member __.create_instance_info = v_create_instance_info - member __.create_event_info = v_create_event_info - member __.seq_to_list_info = v_seq_to_list_info - member __.seq_to_array_info = v_seq_to_array_info - - member __.array_length_info = v_array_length_info - member __.array_get_info = v_array_get_info - member __.array2D_get_info = v_array2D_get_info - member __.array3D_get_info = v_array3D_get_info - member __.array4D_get_info = v_array4D_get_info - member __.array_set_info = v_array_set_info - member __.array2D_set_info = v_array2D_set_info - member __.array3D_set_info = v_array3D_set_info - member __.array4D_set_info = v_array4D_set_info + member val seq_to_list_vref = ValRefForIntrinsic v_seq_to_list_info + member val seq_to_array_vref = ValRefForIntrinsic v_seq_to_array_info + + member _.seq_collect_info = v_seq_collect_info + member _.seq_using_info = v_seq_using_info + member _.seq_delay_info = v_seq_delay_info + member _.seq_append_info = v_seq_append_info + member _.seq_generated_info = v_seq_generated_info + member _.seq_finally_info = v_seq_finally_info + member _.seq_of_functions_info = v_seq_of_functions_info + member _.seq_map_info = v_seq_map_info + member _.seq_singleton_info = v_seq_singleton_info + member _.seq_empty_info = v_seq_empty_info + member _.sprintf_info = v_sprintf_info + member _.new_format_info = v_new_format_info + member _.unbox_info = v_unbox_info + member _.get_generic_comparer_info = v_get_generic_comparer_info + member _.get_generic_er_equality_comparer_info = v_get_generic_er_equality_comparer_info + member _.get_generic_per_equality_comparer_info = v_get_generic_per_equality_comparer_info + member _.dispose_info = v_dispose_info + member _.getstring_info = v_getstring_info + member _.unbox_fast_info = v_unbox_fast_info + member _.istype_info = v_istype_info + member _.istype_fast_info = v_istype_fast_info + member _.lazy_force_info = v_lazy_force_info + member _.lazy_create_info = v_lazy_create_info + member _.create_instance_info = v_create_instance_info + member _.create_event_info = v_create_event_info + member _.seq_to_list_info = v_seq_to_list_info + member _.seq_to_array_info = v_seq_to_array_info + + member _.array_length_info = v_array_length_info + member _.array_get_info = v_array_get_info + member _.array2D_get_info = v_array2D_get_info + member _.array3D_get_info = v_array3D_get_info + member _.array4D_get_info = v_array4D_get_info + member _.array_set_info = v_array_set_info + member _.array2D_set_info = v_array2D_set_info + member _.array3D_set_info = v_array3D_set_info + member _.array4D_set_info = v_array4D_set_info member val option_toNullable_info = v_option_toNullable_info member val option_defaultValue_info = v_option_defaultValue_info - member __.deserialize_quoted_FSharp_20_plus_info = v_deserialize_quoted_FSharp_20_plus_info - member __.deserialize_quoted_FSharp_40_plus_info = v_deserialize_quoted_FSharp_40_plus_info - member __.call_with_witnesses_info = v_call_with_witnesses_info - member __.cast_quotation_info = v_cast_quotation_info - member __.lift_value_info = v_lift_value_info - member __.lift_value_with_name_info = v_lift_value_with_name_info - member __.lift_value_with_defn_info = v_lift_value_with_defn_info - member __.query_source_as_enum_info = v_query_source_as_enum_info - member __.new_query_source_info = v_new_query_source_info - member __.query_builder_tcref = v_query_builder_tcref - member __.fail_init_info = v_fail_init_info - member __.fail_static_init_info = v_fail_static_init_info - member __.check_this_info = v_check_this_info - member __.quote_to_linq_lambda_info = v_quote_to_linq_lambda_info + member _.deserialize_quoted_FSharp_20_plus_info = v_deserialize_quoted_FSharp_20_plus_info + member _.deserialize_quoted_FSharp_40_plus_info = v_deserialize_quoted_FSharp_40_plus_info + member _.call_with_witnesses_info = v_call_with_witnesses_info + member _.cast_quotation_info = v_cast_quotation_info + member _.lift_value_info = v_lift_value_info + member _.lift_value_with_name_info = v_lift_value_with_name_info + member _.lift_value_with_defn_info = v_lift_value_with_defn_info + member _.query_source_as_enum_info = v_query_source_as_enum_info + member _.new_query_source_info = v_new_query_source_info + member _.query_builder_tcref = v_query_builder_tcref + member _.fail_init_info = v_fail_init_info + member _.fail_static_init_info = v_fail_static_init_info + member _.check_this_info = v_check_this_info + member _.quote_to_linq_lambda_info = v_quote_to_linq_lambda_info member val generic_hash_withc_tuple2_vref = ValRefForIntrinsic v_generic_hash_withc_tuple2_info @@ -1491,96 +1503,99 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d member val generic_equality_withc_outer_vref = ValRefForIntrinsic v_generic_equality_withc_outer_info - member __.cons_ucref = v_cons_ucref - member __.nil_ucref = v_nil_ucref - - // A list of types that are explicitly suppressed from the F# intellisense + member _.cons_ucref = v_cons_ucref + member _.nil_ucref = v_nil_ucref + + // A list of types that are explicitly suppressed from the F# intellisense // Note that the suppression checks for the precise name of the type // so the lowercase versions are visible - member __.suppressed_types = v_suppressed_types + member _.suppressed_types = v_suppressed_types - /// Are we assuming all code gen is for F# interactive, with no static linking - member __.isInteractive=isInteractive + /// Are we assuming all code gen is for F# interactive, with no static linking + member _.isInteractive=isInteractive /// Indicates if we are generating witness arguments for SRTP constraints. Only done if the FSharp.Core /// supports witness arguments. member g.generateWitnesses = - compilingFslib || + compilingFslib || ((ValRefForIntrinsic g.call_with_witnesses_info).TryDeref.IsSome && langVersion.SupportsFeature LanguageFeature.WitnessPassing) - member __.FindSysTyconRef path nm = findSysTyconRef path nm + /// Indicates if we can use System.Array.Empty when emitting IL for empty array literals + member val isArrayEmptyAvailable = v_Array_tcref.ILTyconRawMetadata.Methods.FindByName "Empty" |> List.isEmpty |> not + + member _.FindSysTyconRef path nm = findSysTyconRef path nm - member __.TryFindSysTyconRef path nm = tryFindSysTyconRef path nm + member _.TryFindSysTyconRef path nm = tryFindSysTyconRef path nm - member __.FindSysILTypeRef nm = findSysILTypeRef nm + member _.FindSysILTypeRef nm = findSysILTypeRef nm - member __.TryFindSysILTypeRef nm = tryFindSysILTypeRef nm + member _.TryFindSysILTypeRef nm = tryFindSysILTypeRef nm - member __.FindSysAttrib nm = findSysAttrib nm + member _.FindSysAttrib nm = findSysAttrib nm - member __.TryFindSysAttrib nm = tryFindSysAttrib nm + member _.TryFindSysAttrib nm = tryFindSysAttrib nm - member val ilxPubCloEnv = + member val ilxPubCloEnv = EraseClosures.newIlxPubCloEnv(ilg, addMethodGeneratedAttrs, addFieldGeneratedAttrs, addFieldNeverAttrs) - member __.AddMethodGeneratedAttributes mdef = addMethodGeneratedAttrs mdef + member _.AddMethodGeneratedAttributes mdef = addMethodGeneratedAttrs mdef - member __.AddFieldGeneratedAttrs mdef = addFieldGeneratedAttrs mdef + member _.AddFieldGeneratedAttrs mdef = addFieldGeneratedAttrs mdef - member __.AddFieldNeverAttrs mdef = addFieldNeverAttrs mdef + member _.AddFieldNeverAttrs mdef = addFieldNeverAttrs mdef - member __.mkDebuggerHiddenAttribute() = mkILCustomAttribute ilg (findSysILTypeRef tname_DebuggerHiddenAttribute, [], [], []) + member _.mkDebuggerHiddenAttribute() = mkILCustomAttribute (findSysILTypeRef tname_DebuggerHiddenAttribute, [], [], []) - member __.mkDebuggerDisplayAttribute s = mkILCustomAttribute ilg (findSysILTypeRef tname_DebuggerDisplayAttribute, [ilg.typ_String], [ILAttribElem.String (Some s)], []) + member _.mkDebuggerDisplayAttribute s = mkILCustomAttribute (findSysILTypeRef tname_DebuggerDisplayAttribute, [ilg.typ_String], [ILAttribElem.String (Some s)], []) - member __.DebuggerBrowsableNeverAttribute = mkDebuggerBrowsableNeverAttribute() + member _.DebuggerBrowsableNeverAttribute = mkDebuggerBrowsableNeverAttribute() - member __.mkDebuggerStepThroughAttribute() = - mkILCustomAttribute ilg (findSysILTypeRef tname_DebuggerStepThroughAttribute, [], [], []) + member _.mkDebuggerStepThroughAttribute() = + mkILCustomAttribute (findSysILTypeRef tname_DebuggerStepThroughAttribute, [], [], []) - member __.mkDebuggableAttribute (jitOptimizerDisabled) = - mkILCustomAttribute ilg (tref_DebuggableAttribute, [ilg.typ_Bool; ilg.typ_Bool], [ILAttribElem.Bool false; ILAttribElem.Bool jitOptimizerDisabled], []) + member _.mkDebuggableAttribute (jitOptimizerDisabled) = + mkILCustomAttribute (tref_DebuggableAttribute, [ilg.typ_Bool; ilg.typ_Bool], [ILAttribElem.Bool false; ILAttribElem.Bool jitOptimizerDisabled], []) - member __.mkDebuggableAttributeV2(jitTracking, ignoreSymbolStoreSequencePoints, jitOptimizerDisabled, enableEnC) = - let debuggingMode = + member _.mkDebuggableAttributeV2(jitTracking, ignoreSymbolStoreSequencePoints, jitOptimizerDisabled, enableEnC) = + let debuggingMode = (if jitTracking then 1 else 0) ||| - (if jitOptimizerDisabled then 256 else 0) ||| + (if jitOptimizerDisabled then 256 else 0) ||| (if ignoreSymbolStoreSequencePoints then 2 else 0) ||| (if enableEnC then 4 else 0) let tref_DebuggableAttribute_DebuggingModes = mkILTyRefInTyRef (tref_DebuggableAttribute, tname_DebuggableAttribute_DebuggingModes) - mkILCustomAttribute ilg + mkILCustomAttribute (tref_DebuggableAttribute, [mkILNonGenericValueTy tref_DebuggableAttribute_DebuggingModes], (* See System.Diagnostics.DebuggableAttribute.DebuggingModes *) [ILAttribElem.Int32( debuggingMode )], []) - member internal __.CompilerGlobalState = Some compilerGlobalState + member internal _.CompilerGlobalState = Some compilerGlobalState - member __.CompilerGeneratedAttribute = mkCompilerGeneratedAttribute () + member _.CompilerGeneratedAttribute = mkCompilerGeneratedAttribute () /// Find an FSharp.Core LaguagePrimitives dynamic function that corresponds to a trait witness, e.g. /// AdditionDynamic for op_Addition. Also work out the type instantiation of the dynamic function. - member __.MakeBuiltInWitnessInfo (t: TraitConstraintInfo) = - let memberName = + member _.MakeBuiltInWitnessInfo (t: TraitConstraintInfo) = + let memberName = let nm = t.MemberName - let coreName = + let coreName = if nm.StartsWith "op_" then nm.[3..] elif nm = "get_Zero" then "GenericZero" elif nm = "get_One" then "GenericOne" else nm coreName + "Dynamic" - let gtps, argTys, retTy, tinst = - match memberName, t.ArgumentTypes, t.ReturnType with - | ("AdditionDynamic" | "MultiplyDynamic" | "SubtractionDynamic"| "DivisionDynamic" | "ModulusDynamic" | "CheckedAdditionDynamic" | "CheckedMultiplyDynamic" | "CheckedSubtractionDynamic" | "LeftShiftDynamic" | "RightShiftDynamic" | "BitwiseAndDynamic" | "BitwiseOrDynamic" | "ExclusiveOrDynamic" | "LessThanDynamic" | "GreaterThanDynamic" | "LessThanOrEqualDynamic" | "GreaterThanOrEqualDynamic" | "EqualityDynamic" | "InequalityDynamic"), - [ arg0Ty; arg1Ty ], - Some retTy -> + let gtps, argTys, retTy, tinst = + match memberName, t.ArgumentTypes, t.ReturnType with + | ("AdditionDynamic" | "MultiplyDynamic" | "SubtractionDynamic"| "DivisionDynamic" | "ModulusDynamic" | "CheckedAdditionDynamic" | "CheckedMultiplyDynamic" | "CheckedSubtractionDynamic" | "LeftShiftDynamic" | "RightShiftDynamic" | "BitwiseAndDynamic" | "BitwiseOrDynamic" | "ExclusiveOrDynamic" | "LessThanDynamic" | "GreaterThanDynamic" | "LessThanOrEqualDynamic" | "GreaterThanOrEqualDynamic" | "EqualityDynamic" | "InequalityDynamic"), + [ arg0Ty; arg1Ty ], + Some retTy -> [vara; varb; varc], [ varaTy; varbTy ], varcTy, [ arg0Ty; arg1Ty; retTy ] - | ("UnaryNegationDynamic" | "CheckedUnaryNegationDynamic" | "LogicalNotDynamic" | "ExplicitDynamic"), - [ arg0Ty ], - Some retTy -> + | ("UnaryNegationDynamic" | "CheckedUnaryNegationDynamic" | "LogicalNotDynamic" | "ExplicitDynamic"), + [ arg0Ty ], + Some retTy -> [vara; varb ], [ varaTy ], varbTy, [ arg0Ty; retTy ] - | "DivideByIntDynamic", [arg0Ty; _], _ -> + | "DivideByIntDynamic", [arg0Ty; _], _ -> [vara], [ varaTy; v_int32_ty ], varaTy, [ arg0Ty ] - | ("GenericZeroDynamic" | "GenericOneDynamic"), [], Some retTy -> + | ("GenericZeroDynamic" | "GenericOneDynamic"), [], Some retTy -> [vara], [ ], varaTy, [ retTy ] | _ -> failwithf "unknown builtin witness '%s'" memberName let vref = makeOtherIntrinsicValRef (fslib_MFLanguagePrimitives_nleref, memberName, None, None, gtps, (List.map List.singleton argTys, retTy)) @@ -1589,8 +1604,8 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d /// Find an FSharp.Core operator that corresponds to a trait witness member g.TryMakeOperatorAsBuiltInWitnessInfo isStringTy isArrayTy (t: TraitConstraintInfo) argExprs = - match t.MemberName, t.ArgumentTypes, t.ReturnType, argExprs with - | "get_Sign", [aty], _, (objExpr :: _) -> + match t.MemberName, t.ArgumentTypes, t.ReturnType, argExprs with + | "get_Sign", [aty], _, (objExpr :: _) -> // Call Operators.sign let info = makeOtherIntrinsicValRef (fslib_MFOperators_nleref, "sign", None, Some "Sign", [vara], ([[varaTy]], v_int32_ty)) let tyargs = [aty] @@ -1620,18 +1635,18 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d let info = makeOtherIntrinsicValRef (fslib_MFLanguagePrimitives_nleref, "GenericOne", None, None, [vara], ([], varaTy)) let tyargs = [aty] Some (info, tyargs, []) - | ("Abs" | "Sin" | "Cos" | "Tan" | "Sinh" | "Cosh" | "Tanh" | "Atan" | "Acos" | "Asin" | "Exp" | "Ceiling" | "Floor" | "Round" | "Truncate" | "Log10"| "Log"), [aty], _, [_] -> + | ("Abs" | "Sin" | "Cos" | "Tan" | "Sinh" | "Cosh" | "Tanh" | "Atan" | "Acos" | "Asin" | "Exp" | "Ceiling" | "Floor" | "Round" | "Truncate" | "Log10"| "Log"), [aty], _, [_] -> // Call corresponding Operators.* let nm = t.MemberName let lower = if nm = "Ceiling" then "ceil" else nm.ToLowerInvariant() let info = makeOtherIntrinsicValRef (fslib_MFOperators_nleref, lower, None, Some nm, [vara], ([[varaTy]], varaTy)) let tyargs = [aty] Some (info, tyargs, argExprs) - | "get_Item", [arrTy; _], Some rty, [_; _] when isArrayTy g arrTy -> + | "get_Item", [arrTy; _], Some rty, [_; _] when isArrayTy g arrTy -> Some (g.array_get_info, [rty], argExprs) - | "set_Item", [arrTy; _; ety], _, [_; _; _] when isArrayTy g arrTy -> + | "set_Item", [arrTy; _; ety], _, [_; _; _] when isArrayTy g arrTy -> Some (g.array_set_info, [ety], argExprs) - | "get_Item", [sty; _; _], _, [_; _] when isStringTy g sty -> + | "get_Item", [sty; _; _], _, [_; _] when isStringTy g sty -> Some (g.getstring_info, [], argExprs) | "op_UnaryPlus", [aty], _, [_] -> // Call Operators.id @@ -1641,10 +1656,10 @@ type public TcGlobals(compilingFslib: bool, ilg:ILGlobals, fslibCcu: CcuThunk, d | _ -> None - member __.EraseClassUnionDef cud = + member _.EraseClassUnionDef cud = EraseUnions.mkClassUnionDef (addMethodGeneratedAttrs, addPropertyGeneratedAttrs, addPropertyNeverAttrs, addFieldGeneratedAttrs, addFieldNeverAttrs, mkDebuggerTypeProxyAttribute) ilg cud #if DEBUG -// This global is only used during debug output +// This global is only used during debug output let mutable global_g = None : TcGlobals option #endif diff --git a/src/fsharp/TextLayoutRender.fs b/src/fsharp/TextLayoutRender.fs new file mode 100644 index 00000000000..83a8e1d0590 --- /dev/null +++ b/src/fsharp/TextLayoutRender.fs @@ -0,0 +1,173 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.Text + +open System +open System.Collections.Immutable +open System.IO +open FSharp.Compiler.Text +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Layout +open FSharp.Core.Printf + +#nowarn "62" // This construct is for ML compatibility. + +type NavigableTaggedText(taggedText: TaggedText, range: range) = + inherit TaggedText(taggedText.Tag, taggedText.Text) + member val Range = range + +module SepL = + let dot = sepL TaggedText.dot + let star = sepL TaggedText.star + let colon = sepL TaggedText.colon + let questionMark = sepL TaggedText.questionMark + let leftParen = sepL TaggedText.leftParen + let comma = sepL TaggedText.comma + let space = sepL TaggedText.space + let leftBracket = sepL TaggedText.leftBracket + let leftAngle = sepL TaggedText.leftAngle + let lineBreak = sepL TaggedText.lineBreak + let rightParen = sepL TaggedText.rightParen + +module WordL = + let arrow = wordL TaggedText.arrow + let star = wordL TaggedText.star + let colon = wordL TaggedText.colon + let equals = wordL TaggedText.equals + let keywordNew = wordL TaggedText.keywordNew + let structUnit = wordL TaggedText.structUnit + let keywordStatic = wordL TaggedText.keywordStatic + let keywordMember = wordL TaggedText.keywordMember + let keywordVal = wordL TaggedText.keywordVal + let keywordEvent = wordL TaggedText.keywordEvent + let keywordWith = wordL TaggedText.keywordWith + let keywordSet = wordL TaggedText.keywordSet + let keywordGet = wordL TaggedText.keywordGet + let keywordTrue = wordL TaggedText.keywordTrue + let keywordFalse = wordL TaggedText.keywordFalse + let bar = wordL TaggedText.bar + let keywordStruct = wordL TaggedText.keywordStruct + let keywordInherit = wordL TaggedText.keywordInherit + let keywordEnd = wordL TaggedText.keywordEnd + let keywordNested = wordL TaggedText.keywordNested + let keywordType = wordL TaggedText.keywordType + let keywordDelegate = wordL TaggedText.keywordDelegate + let keywordOf = wordL TaggedText.keywordOf + let keywordInternal = wordL TaggedText.keywordInternal + let keywordPrivate = wordL TaggedText.keywordPrivate + let keywordAbstract = wordL TaggedText.keywordAbstract + let keywordOverride = wordL TaggedText.keywordOverride + let keywordEnum = wordL TaggedText.keywordEnum + +module LeftL = + let leftParen = leftL TaggedText.leftParen + let questionMark = leftL TaggedText.questionMark + let colon = leftL TaggedText.colon + let leftBracketAngle = leftL TaggedText.leftBracketAngle + let leftBracketBar = leftL TaggedText.leftBracketBar + let keywordTypeof = leftL TaggedText.keywordTypeof + let keywordTypedefof = leftL TaggedText.keywordTypedefof + +module RightL = + let comma = rightL TaggedText.comma + let rightParen = rightL TaggedText.rightParen + let colon = rightL TaggedText.colon + let rightBracket = rightL TaggedText.rightBracket + let rightAngle = rightL TaggedText.rightAngle + let rightBracketAngle = rightL TaggedText.rightBracketAngle + let rightBracketBar = rightL TaggedText.rightBracketBar + +type LayoutRenderer<'a, 'b> = + abstract Start : unit -> 'b + abstract AddText : 'b -> TaggedText -> 'b + abstract AddBreak : 'b -> int -> 'b + abstract AddTag : 'b -> string * (string * string) list * bool -> 'b + abstract Finish : 'b -> 'a + +type NoState = NoState +type NoResult = NoResult + +[] +module LayoutRender = + let mkNav r t = NavigableTaggedText(t, r) :> TaggedText + + let spaces n = new String(' ', n) + + let renderL (rr: LayoutRenderer<_, _>) layout = + let rec addL z pos i layout k = + match layout with + | ObjLeaf _ -> failwith "ObjLeaf should never appear here" + (* pos is tab level *) + | Leaf (_, text, _) -> + k(rr.AddText z text, i + text.Text.Length) + | Node (l, r, Broken indent) -> + addL z pos i l <| + fun (z, _i) -> + let z, i = rr.AddBreak z (pos+indent), (pos+indent) + addL z (pos+indent) i r k + | Node (l, r, _) -> + let jm = Layout.JuxtapositionMiddle (l, r) + addL z pos i l <| + fun (z, i) -> + let z, i = if jm then z, i else rr.AddText z TaggedText.space, i+1 + let pos = i + addL z pos i r k + | Attr (tag, attrs, l) -> + let z = rr.AddTag z (tag, attrs, true) + addL z pos i l <| + fun (z, i) -> + let z = rr.AddTag z (tag, attrs, false) + k(z, i) + let pos = 0 + let z, i = rr.Start(), 0 + let z, _i = addL z pos i layout id + rr.Finish z + + /// string render + let stringR = + { new LayoutRenderer with + member _.Start () = [] + member _.AddText rstrs taggedText = taggedText.Text :: rstrs + member _.AddBreak rstrs n = (spaces n) :: "\n" :: rstrs + member _.AddTag z (_, _, _) = z + member _.Finish rstrs = String.Join("", Array.ofList (List.rev rstrs)) } + + /// string render + let taggedTextListR collector = + { new LayoutRenderer with + member _.Start () = NoState + member _.AddText z text = collector text; z + member _.AddBreak rstrs n = collector TaggedText.lineBreak; collector (TaggedText.tagSpace(spaces n)); rstrs + member _.AddTag z (_, _, _) = z + member _.Finish rstrs = NoResult } + + /// channel LayoutRenderer + let channelR (chan:TextWriter) = + { new LayoutRenderer with + member r.Start () = NoState + member r.AddText z s = chan.Write s.Text; z + member r.AddBreak z n = chan.WriteLine(); chan.Write (spaces n); z + member r.AddTag z (tag, attrs, start) = z + member r.Finish z = NoResult } + + /// buffer render + let bufferR os = + { new LayoutRenderer with + member r.Start () = NoState + member r.AddText z s = bprintf os "%s" s.Text; z + member r.AddBreak z n = bprintf os "\n"; bprintf os "%s" (spaces n); z + member r.AddTag z (tag, attrs, start) = z + member r.Finish z = NoResult } + + let showL layout = renderL stringR layout + + let outL (chan:TextWriter) layout = renderL (channelR chan) layout |> ignore + + let bufferL os layout = renderL (bufferR os) layout |> ignore + + let emitL f layout = renderL (taggedTextListR f) layout |> ignore + + let toArray layout = + let output = ResizeArray() + renderL (taggedTextListR (fun tt -> output.Add(tt))) layout |> ignore + output.ToArray() diff --git a/src/fsharp/TextLayoutRender.fsi b/src/fsharp/TextLayoutRender.fsi new file mode 100644 index 00000000000..25f67418c02 --- /dev/null +++ b/src/fsharp/TextLayoutRender.fsi @@ -0,0 +1,117 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +/// DSL to create structured layout objects with optional breaks and render them +namespace FSharp.Compiler.Text + +open System.Collections.Immutable +open System.Text +open System.IO +open FSharp.Compiler.Text + +/// An enhancement to TaggedText in the TaggedText layouts generated by FSharp.Compiler.Service +type public NavigableTaggedText = + internal new: TaggedText * range -> NavigableTaggedText + member Range: range + inherit TaggedText + +/// Render a Layout yielding an 'a using a 'b (hidden state) type +type internal LayoutRenderer<'a,'b> = + abstract Start: unit -> 'b + abstract AddText: 'b -> TaggedText -> 'b + abstract AddBreak: 'b -> int -> 'b + abstract AddTag: 'b -> string * (string * string) list * bool -> 'b + abstract Finish: 'b -> 'a + +type internal NoState = NoState +type internal NoResult = NoResult + +module internal LayoutRender = + + val internal toArray: Layout -> TaggedText[] + + val internal emitL: (TaggedText -> unit) -> Layout -> unit + + val internal mkNav: range -> TaggedText -> TaggedText + + val internal showL: Layout -> string + + val internal outL: TextWriter -> Layout -> unit + + val internal bufferL: StringBuilder -> Layout -> unit + + /// Run a render on a Layout + val internal renderL: LayoutRenderer<'b,'a> -> Layout -> 'b + + /// Render layout to string + val internal stringR: LayoutRenderer + + /// Render layout to channel + val internal channelR: TextWriter -> LayoutRenderer + + /// Render layout to StringBuilder + val internal bufferR: StringBuilder -> LayoutRenderer + + /// Render layout to collector of TaggedText + val internal taggedTextListR: collector: (TaggedText -> unit) -> LayoutRenderer + +module internal SepL = + val dot: Layout + val star: Layout + val colon: Layout + val questionMark: Layout + val leftParen: Layout + val comma: Layout + val space: Layout + val leftBracket: Layout + val leftAngle: Layout + val lineBreak: Layout + val rightParen: Layout + +module internal WordL = + val arrow: Layout + val star: Layout + val colon: Layout + val equals: Layout + val keywordNew: Layout + val structUnit: Layout + val keywordStatic: Layout + val keywordMember: Layout + val keywordVal: Layout + val keywordEvent: Layout + val keywordWith: Layout + val keywordSet: Layout + val keywordGet: Layout + val keywordTrue: Layout + val keywordFalse: Layout + val bar: Layout + val keywordStruct: Layout + val keywordInherit: Layout + val keywordEnd: Layout + val keywordNested: Layout + val keywordType: Layout + val keywordDelegate: Layout + val keywordOf: Layout + val keywordInternal: Layout + val keywordPrivate: Layout + val keywordAbstract: Layout + val keywordOverride: Layout + val keywordEnum: Layout + +module internal LeftL = + val leftParen: Layout + val questionMark: Layout + val colon: Layout + val leftBracketAngle: Layout + val leftBracketBar: Layout + val keywordTypeof: Layout + val keywordTypedefof: Layout + +module internal RightL = + val comma: Layout + val rightParen: Layout + val colon: Layout + val rightBracket: Layout + val rightAngle: Layout + val rightBracketAngle: Layout + val rightBracketBar: Layout + diff --git a/src/fsharp/TypeRelations.fs b/src/fsharp/TypeRelations.fs index 487d8f96c32..fa41844797e 100755 --- a/src/fsharp/TypeRelations.fs +++ b/src/fsharp/TypeRelations.fs @@ -4,14 +4,14 @@ /// constraint solving and method overload resolution. module internal FSharp.Compiler.TypeRelations -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Collections +open Internal.Utilities.Library open FSharp.Compiler.ErrorLogger +open FSharp.Compiler.Infos +open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Infos /// Implements a :> b without coercion based on finalized (no type variable) types // Note: This relation is approximate and not part of the language specification. diff --git a/src/fsharp/TypeRelations.fsi b/src/fsharp/TypeRelations.fsi index 0348c1cd478..2138e0e57f8 100644 --- a/src/fsharp/TypeRelations.fsi +++ b/src/fsharp/TypeRelations.fsi @@ -5,9 +5,9 @@ module internal FSharp.Compiler.TypeRelations open FSharp.Compiler.Import -open FSharp.Compiler.Range -open FSharp.Compiler.TypedTree open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.TypedTree type CanCoerce = | CanCoerce diff --git a/src/fsharp/TypedTree.fs b/src/fsharp/TypedTree.fs index b5f3bffaf6b..3798883baee 100644 --- a/src/fsharp/TypedTree.fs +++ b/src/fsharp/TypedTree.fs @@ -8,25 +8,24 @@ open System.Collections.Generic open System.Diagnostics open System.Reflection -open Internal.Utilities +open Internal.Utilities.Collections +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras +open Internal.Utilities.Rational open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Extensions.ILX.Types +open FSharp.Compiler.AbstractIL.ILX.Types open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Lib -open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming open FSharp.Compiler.QuotationPickler -open FSharp.Compiler.Range -open FSharp.Compiler.Rational -open FSharp.Compiler.SyntaxTree open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.XmlDoc -open FSharp.Core.Printf +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Xml #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping @@ -159,7 +158,7 @@ type ValFlags(flags: int64) = member x.IsCompilerGenerated = (flags &&& 0b00000000000000001000L) <> 0x0L - member x.SetIsCompilerGenerated isCompGen = + member x.WithIsCompilerGenerated isCompGen = let flags = (flags &&& ~~~0b00000000000000001000L) ||| (match isCompGen with | false -> 0b00000000000000000000L @@ -301,8 +300,8 @@ type TyparFlags(flags: int32) = TyparFlags((if isFromError then 0b00000000000000010 else 0) ||| (if isCompGen then 0b00000000000000100 else 0) ||| (match staticReq with - | NoStaticReq -> 0b00000000000000000 - | HeadTypeStaticReq -> 0b00000000000001000) ||| + | TyparStaticReq.None -> 0b00000000000000000 + | TyparStaticReq.HeadType -> 0b00000000000001000) ||| (match rigidity with | TyparRigidity.Rigid -> 0b00000000000000000 | TyparRigidity.WillBeRigid -> 0b00000000000100000 @@ -329,8 +328,8 @@ type TyparFlags(flags: int32) = /// 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 &&& 0b00000000000001000) with - | 0b00000000000000000 -> NoStaticReq - | 0b00000000000001000 -> HeadTypeStaticReq + | 0b00000000000000000 -> TyparStaticReq.None + | 0b00000000000001000 -> TyparStaticReq.HeadType | _ -> failwith "unreachable" /// Indicates if the type variable can be solved or given new constraints. The status of a type variable @@ -465,7 +464,11 @@ type EntityFlags(flags: int64) = -exception UndefinedName of int * (string -> string) * Ident * ErrorLogger.Suggestions +exception UndefinedName of + depth: int * + error: (string -> string) * + id: Ident * + suggestions: ErrorLogger.Suggestions exception InternalUndefinedItemRef of (string * string * string -> int * string) * string * string * string @@ -596,7 +599,7 @@ type Entity = /// The methods and properties of the type // // MUTABILITY; used only during creation and remapping of tycons - mutable entity_tycon_tcaug: TyconAugmentation + mutable entity_tycon_tcaug: TyconAugmentation /// This field is used when the 'tycon' is really a module definition. It holds statically nested type definitions and nested modules // @@ -1253,7 +1256,7 @@ type EntityData = Entity /// Represents the parent entity of a type definition, if any type ParentRef = - | Parent of EntityRef + | Parent of parent: EntityRef | ParentNone /// Specifies the compiled representations of type and exception definitions. Basically @@ -1270,9 +1273,9 @@ type CompiledTypeRepr = /// The ilTypeOpt is present for non-generic types. It is an ILType corresponding to the first two elements of the case. This /// prevents reallocation of the ILType each time we need to generate it. For generic types, it is None. | ILAsmNamed of - ILTypeRef * - ILBoxity * - ILType option + ilTypeRef: ILTypeRef * + ilBoxity: ILBoxity * + ilTypeOpt: ILType option /// An AbstractIL type representation that may include type variables // This case is only used for types defined in the F# library by their translation to ILASM types, e.g. @@ -1282,7 +1285,7 @@ type CompiledTypeRepr = // type byref<'T> = (# "!0&" #) // type nativeptr<'T when 'T: unmanaged> = (# "native int" #) // type ilsigptr<'T> = (# "!0*" #) - | ILAsmOpen of ILType + | ILAsmOpen of ilType: ILType [] member x.DebugText = x.ToString() @@ -1363,7 +1366,7 @@ type TyconAugmentation = [] member x.DebugText = x.ToString() - override x.ToString() = "TyconAugmentation(...)" + override x.ToString() = "SynTypeDefnKind.Augmentation(...)" /// The information for the contents of a type. Also used for a provided namespace. [] @@ -1501,7 +1504,7 @@ type TyconObjModelKind = | TTyconStruct /// Indicates the type is a delegate with the given Invoke signature - | TTyconDelegate of SlotSig + | TTyconDelegate of slotSig: SlotSig /// Indicates the type is an enumeration | TTyconEnum @@ -2020,7 +2023,7 @@ type Tycon = Entity type Accessibility = /// Indicates the construct can only be accessed from any code in the given type constructor, module or assembly. [] indicates global scope. - | TAccess of CompilationPath list + | TAccess of compilationPaths: CompilationPath list [] member x.DebugText = x.ToString() @@ -2049,7 +2052,7 @@ type TyparOptionalData = [] member x.DebugText = x.ToString() - override __.ToString() = sprintf "TyparOptionalData(...)" + override _.ToString() = sprintf "TyparOptionalData(...)" type TyparData = Typar @@ -2252,45 +2255,45 @@ type Typar = type TyparConstraint = /// A constraint that a type is a subtype of the given type - | CoercesTo of TType * range + | CoercesTo of ty: TType * range: range /// A constraint for a default value for an inference type variable should it be neither generalized nor solved - | DefaultsTo of int * TType * range + | DefaultsTo of priority: int * ty: TType * range: range /// A constraint that a type has a 'null' value - | SupportsNull of range + | SupportsNull of range: range /// A constraint that a type has a member with the given signature - | MayResolveMember of TraitConstraintInfo * range + | MayResolveMember of constraintInfo: TraitConstraintInfo * range: range /// A constraint that a type is a non-Nullable value type /// These are part of .NET's model of generic constraints, and in order to /// generate verifiable code we must attach them to F# generalized type variables as well. - | IsNonNullableStruct of range + | IsNonNullableStruct of range: range /// A constraint that a type is a reference type - | IsReferenceType of range + | IsReferenceType of range: range /// A constraint that a type is a simple choice between one of the given ground types. Only arises from 'printf' format strings. See format.fs - | SimpleChoice of TTypes * range + | SimpleChoice of tys: TTypes * range: range /// A constraint that a type has a parameterless constructor - | RequiresDefaultConstructor of range + | RequiresDefaultConstructor of range: range /// A constraint that a type is an enum with the given underlying - | IsEnum of TType * range + | IsEnum of ty: TType * range: range /// A constraint that a type implements IComparable, with special rules for some known structural container types - | SupportsComparison of range + | SupportsComparison of range: range /// A constraint that a type does not have the Equality(false) attribute, or is not a structural type with this attribute, with special rules for some known structural container types - | SupportsEquality of range + | SupportsEquality of range: range /// A constraint that a type is a delegate from the given tuple of args to the given return type - | IsDelegate of TType * TType * range + | IsDelegate of aty: TType * bty: TType * range: range /// A constraint that a type is .NET unmanaged type - | IsUnmanaged of range + | IsUnmanaged of range: range // %+A formatting is used, so this is not needed //[] @@ -2300,7 +2303,7 @@ type TyparConstraint = [] type TraitWitnessInfo = - | TraitWitnessInfo of TTypes * string * MemberFlags * TTypes * TType option + | TraitWitnessInfo of TTypes * string * SynMemberFlags * TTypes * TType option /// Get the member name associated with the member constraint. member x.MemberName = (let (TraitWitnessInfo(_, b, _, _, _)) = x in b) @@ -2319,7 +2322,7 @@ type TraitConstraintInfo = /// Indicates the signature of a member constraint. Contains a mutable solution cell /// to store the inferred solution of the constraint. - | TTrait of tys: TTypes * memberName: string * _memFlags: MemberFlags * argTys: TTypes * returnTy: TType option * solution: TraitConstraintSln option ref + | TTrait of tys: TTypes * memberName: string * _memFlags: SynMemberFlags * argTys: TTypes * returnTy: TType option * solution: TraitConstraintSln option ref /// Get the key associated with the member constraint. member x.TraitKey = (let (TTrait(a, b, c, d, e, _)) = x in TraitWitnessInfo(a, b, c, d, e)) @@ -2357,7 +2360,7 @@ type TraitConstraintSln = /// ty -- the type and its instantiation /// vref -- the method that solves the trait constraint /// minst -- the generic method instantiation - | FSMethSln of TType * ValRef * TypeInst + | FSMethSln of ty: TType * vref: ValRef * minst: TypeInst /// FSRecdFieldSln(tinst, rfref, isSetProp) /// @@ -2365,10 +2368,10 @@ type TraitConstraintSln = /// tinst -- the instantiation of the declaring type /// rfref -- the reference to the record field /// isSetProp -- indicates if this is a set of a record field - | FSRecdFieldSln of TypeInst * RecdFieldRef * bool + | FSRecdFieldSln of tinst: TypeInst * rfref: RecdFieldRef * isSetProp: bool /// Indicates a trait is solved by an F# anonymous record field. - | FSAnonRecdFieldSln of AnonRecdTypeInfo * TypeInst * int + | FSAnonRecdFieldSln of anonInfo: AnonRecdTypeInfo * tinst: TypeInst * index: int /// ILMethSln(ty, extOpt, ilMethodRef, minst) /// @@ -2377,12 +2380,12 @@ type TraitConstraintSln = /// extOpt -- information about an extension member, if any /// ilMethodRef -- the method that solves the trait constraint /// minst -- the generic method instantiation - | ILMethSln of TType * ILTypeRef option * ILMethodRef * TypeInst + | ILMethSln of ty: TType * extOpt: ILTypeRef option * ilMethodRef: ILMethodRef * minst: TypeInst /// ClosedExprSln expr /// /// Indicates a trait is solved by an erased provided expression - | ClosedExprSln of Expr + | ClosedExprSln of expr: Expr /// Indicates a trait is solved by a 'fake' instance of an operator, like '+' on integers | BuiltInSln @@ -2647,13 +2650,13 @@ type Val = /// Indicates if this is an F#-defined 'new' constructor member member x.IsConstructor = match x.MemberInfo with - | Some memberInfo when not x.IsExtensionMember && (memberInfo.MemberFlags.MemberKind = MemberKind.Constructor) -> true + | Some memberInfo when not x.IsExtensionMember && (memberInfo.MemberFlags.MemberKind = SynMemberKind.Constructor) -> true | _ -> false /// Indicates if this is a compiler-generated class constructor member member x.IsClassConstructor = match x.MemberInfo with - | Some memberInfo when not x.IsExtensionMember && (memberInfo.MemberFlags.MemberKind = MemberKind.ClassConstructor) -> true + | Some memberInfo when not x.IsExtensionMember && (memberInfo.MemberFlags.MemberKind = SynMemberKind.ClassConstructor) -> true | _ -> false /// Indicates if this value was a member declared 'override' or an implementation of an interface slot @@ -2830,6 +2833,10 @@ type Val = | slotsig :: _ -> slotsig.Name | _ -> x.val_logical_name + // Set the logical name of the value + member x.SetLogicalName(nm) = + x.val_logical_name <- nm + member x.ValCompiledName = match x.val_opt_data with | Some optData -> optData.val_compiled_name @@ -2879,12 +2886,12 @@ type Val = match x.MemberInfo with | Some membInfo -> match membInfo.MemberFlags.MemberKind with - | MemberKind.ClassConstructor - | MemberKind.Constructor - | MemberKind.Member -> x.LogicalName - | MemberKind.PropertyGetSet - | MemberKind.PropertySet - | MemberKind.PropertyGet -> x.PropertyName + | SynMemberKind.ClassConstructor + | SynMemberKind.Constructor + | SynMemberKind.Member -> x.LogicalName + | SynMemberKind.PropertyGetSet + | SynMemberKind.PropertySet + | SynMemberKind.PropertyGet -> x.PropertyName | None -> x.LogicalName /// - If this is a property then this is 'Foo' @@ -2895,6 +2902,8 @@ type Val = member x.SetValRec b = x.val_flags <- x.val_flags.WithRecursiveValInfo b + member x.SetIsCompilerGenerated(v) = x.val_flags <- x.val_flags.WithIsCompilerGenerated(v) + member x.SetIsMemberOrModuleBinding() = x.val_flags <- x.val_flags.WithIsMemberOrModuleBinding member x.SetMakesNoCriticalTailcalls() = x.val_flags <- x.val_flags.WithMakesNoCriticalTailcalls @@ -3000,7 +3009,7 @@ type ValMemberInfo = /// Gets updated with 'true' if an abstract slot is implemented in the file being typechecked. Internal only. mutable IsImplemented: bool - MemberFlags: MemberFlags + MemberFlags: SynMemberFlags } [] @@ -3040,7 +3049,7 @@ type ValPublicPath = [] member x.DebugText = x.ToString() - override __.ToString() = sprintf "ValPubPath(...)" + override _.ToString() = sprintf "ValPubPath(...)" /// Represents an index into the namespace/module structure of an assembly [] @@ -3680,13 +3689,13 @@ type ValRef = member x.IsPropertyGetterMethod = match x.MemberInfo with | None -> false - | Some (memInfo: ValMemberInfo) -> memInfo.MemberFlags.MemberKind = MemberKind.PropertyGet || memInfo.MemberFlags.MemberKind = MemberKind.PropertyGetSet + | Some (memInfo: ValMemberInfo) -> memInfo.MemberFlags.MemberKind = SynMemberKind.PropertyGet || memInfo.MemberFlags.MemberKind = SynMemberKind.PropertyGetSet /// Indicates whether this value represents a property setter. member x.IsPropertySetterMethod = match x.MemberInfo with | None -> false - | Some (memInfo: ValMemberInfo) -> memInfo.MemberFlags.MemberKind = MemberKind.PropertySet || memInfo.MemberFlags.MemberKind = MemberKind.PropertyGetSet + | Some (memInfo: ValMemberInfo) -> memInfo.MemberFlags.MemberKind = SynMemberKind.PropertySet || memInfo.MemberFlags.MemberKind = SynMemberKind.PropertyGetSet /// A unique stamp within the context of this invocation of the compiler process member x.Stamp = x.Deref.Stamp @@ -3757,7 +3766,7 @@ type ValRef = /// Indicates if this is a 'base' or 'this' value? member x.BaseOrThisInfo = x.Deref.BaseOrThisInfo - // Indicates if this value was declared to be a type function, e.g. "let f<'a> = typeof<'a>" + /// Indicates if this value was declared to be a type function, e.g. "let f<'a> = typeof<'a>" member x.IsTypeFunction = x.Deref.IsTypeFunction /// Records the "extra information" for a value compiled as a method. @@ -3868,7 +3877,7 @@ type UnionCaseRef = /// Represents a reference to a field in a record, class or struct [] type RecdFieldRef = - | RecdFieldRef of TyconRef * string + | RecdFieldRef of tcref: TyconRef * id: string /// Get a reference to the type containing this union case member x.TyconRef = let (RecdFieldRef(tcref, _)) = x in tcref @@ -3923,40 +3932,40 @@ type TType = /// TType_forall(typars, bodyTy). /// /// Indicates the type is a universal type, only used for types of values and members - | TType_forall of Typars * TType + | TType_forall of typars: Typars * bodyTy: TType /// TType_app(tyconRef, typeInstantiation). /// /// Indicates the type is built from a named type and a number of type arguments - | TType_app of TyconRef * TypeInst + | TType_app of tyconRef: TyconRef * typeInstantiation: TypeInst /// TType_anon /// /// Indicates the type is an anonymous record type whose compiled representation is located in the given assembly - | TType_anon of AnonRecdTypeInfo * TType list + | TType_anon of anonInfo: AnonRecdTypeInfo * tys: TType list /// TType_tuple(elementTypes). /// /// Indicates the type is a tuple type. elementTypes must be of length 2 or greater. - | TType_tuple of TupInfo * TTypes + | TType_tuple of tupInfo: TupInfo * elementTypes: TTypes /// TType_fun(domainType, rangeType). /// /// Indicates the type is a function type - | TType_fun of TType * TType + | TType_fun of domainType: TType * rangeType: TType /// TType_ucase(unionCaseRef, typeInstantiation) /// /// Indicates the type is a non-F#-visible type representing a "proof" that a union value belongs to a particular union case /// These types are not user-visible and will never appear as an inferred type. They are the types given to /// the temporaries arising out of pattern matching on union values. - | TType_ucase of UnionCaseRef * TypeInst + | TType_ucase of unionCaseRef: UnionCaseRef * typeInstantiation: TypeInst /// Indicates the type is a variable type, whether declared, generalized or an inference type parameter - | TType_var of Typar + | TType_var of typar: Typar /// Indicates the type is a unit-of-measure expression being used as an argument to a type or member - | TType_measure of Measure + | TType_measure of measure: Measure /// For now, used only as a discriminant in error message. /// See https://github.com/Microsoft/visualfsharp/issues/2561 @@ -4064,22 +4073,22 @@ type TupInfo = type Measure = /// A variable unit-of-measure - | Var of Typar + | Var of typar: Typar /// A constant, leaf unit-of-measure such as 'kg' or 'm' - | Con of TyconRef + | Con of tyconRef: TyconRef /// A product of two units of measure - | Prod of Measure*Measure + | Prod of measure1: Measure * measure2: Measure /// An inverse of a units of measure expression - | Inv of Measure + | Inv of measure: Measure /// The unit of measure '1', e.g. float = float<1> | One /// Raising a measure to a rational power - | RationalPower of Measure * Rational + | RationalPower of measure: Measure * power: Rational // %+A formatting is used, so this is not needed //[] @@ -4093,10 +4102,10 @@ type Attribs = Attrib list type AttribKind = /// Indicates an attribute refers to a type defined in an imported .NET assembly - | ILAttrib of ILMethodRef + | ILAttrib of ilMethodRef: ILMethodRef /// Indicates an attribute refers to a type defined in an imported F# assembly - | FSAttrib of ValRef + | FSAttrib of valRef: ValRef // %+A formatting is used, so this is not needed //[] @@ -4104,11 +4113,18 @@ type AttribKind = override x.ToString() = sprintf "%+A" x -/// Attrib(kind, unnamedArgs, propVal, appliedToAGetterOrSetter, targetsOpt, range) +/// Attrib(tyconRef, kind, unnamedArgs, propVal, appliedToAGetterOrSetter, targetsOpt, range) [] type Attrib = - | Attrib of TyconRef * AttribKind * AttribExpr list * AttribNamedArg list * bool * AttributeTargets option * range + | Attrib of + tyconRef: TyconRef * + kind: AttribKind * + unnamedArgs: AttribExpr list * + propVal: AttribNamedArg list * + appliedToAGetterOrSetter: bool * + targetsOpt: AttributeTargets option * + range: range [] member x.DebugText = x.ToString() @@ -4124,7 +4140,7 @@ type Attrib = type AttribExpr = /// AttribExpr(source, evaluated) - | AttribExpr of Expr * Expr + | AttribExpr of source: Expr * evaluated: Expr [] member x.DebugText = x.ToString() @@ -4203,14 +4219,14 @@ type DecisionTree = /// cases -- The list of tests and their subsequent decision trees /// default -- The default decision tree, if any /// range -- (precise documentation needed) - | TDSwitch of Expr * DecisionTreeCase list * DecisionTree option * range + | TDSwitch of input: Expr * cases: DecisionTreeCase list * defaultOpt: DecisionTree option * range: range /// TDSuccess(results, targets) /// /// Indicates the decision tree has terminated with success, transferring control to the given target with the given parameters. /// results -- the expressions to be bound to the variables at the target /// target -- the target number for the continuation - | TDSuccess of Exprs * int + | TDSuccess of results: Exprs * targetNum: int /// TDBind(binding, body) /// @@ -4219,7 +4235,7 @@ type DecisionTree = /// repeated computations in decision trees. /// binding -- the value and the expression it is bound to /// body -- the rest of the decision tree - | TDBind of Binding * DecisionTree + | TDBind of binding: Binding * body: DecisionTree // %+A formatting is used, so this is not needed //[] @@ -4230,7 +4246,7 @@ type DecisionTree = /// Represents a test and a subsequent decision tree [] type DecisionTreeCase = - | TCase of DecisionTreeTest * DecisionTree + | TCase of discriminator: DecisionTreeTest * caseTree: DecisionTree /// Get the discriminator associated with the case member x.Discriminator = let (TCase(d, _)) = x in d @@ -4246,13 +4262,13 @@ type DecisionTreeCase = [] type DecisionTreeTest = /// Test if the input to a decision tree matches the given union case - | UnionCase of UnionCaseRef * TypeInst + | UnionCase of caseRef: UnionCaseRef * tinst: TypeInst /// Test if the input to a decision tree is an array of the given length - | ArrayLength of int * TType + | ArrayLength of length: int * ty: TType /// Test if the input to a decision tree is the given constant value - | Const of Const + | Const of value: Const /// Test if the input to a decision tree is null | IsNull @@ -4260,21 +4276,28 @@ type DecisionTreeTest = /// IsInst(source, target) /// /// Test if the input to a decision tree is an instance of the given type - | IsInst of TType * TType + | IsInst of source: TType * target: TType - /// Test.ActivePatternCase(activePatExpr, activePatResTys, activePatIdentity, idx, activePatInfo) + /// Test.ActivePatternCase(activePatExpr, activePatResTys, isStructRetTy, activePatIdentity, idx, activePatInfo) /// /// Run the active pattern and bind a successful result to a /// variable in the remaining tree. /// activePatExpr -- The active pattern function being called, perhaps applied to some active pattern parameters. /// activePatResTys -- The result types (case types) of the active pattern. + /// isStructRetTy -- Is the active pattern a struct return /// activePatIdentity -- The value and the types it is applied to. If there are any active pattern parameters then this is empty. /// idx -- The case number of the active pattern which the test relates to. /// activePatternInfo -- The extracted info for the active pattern. - | ActivePatternCase of Expr * TTypes * (ValRef * TypeInst) option * int * ActivePatternInfo + | ActivePatternCase of + activePatExpr: Expr * + activePatResTys: TTypes * + isStructRetTy: bool * + activePatIdentity: (ValRef * TypeInst) option * + idx: int * + activePatternInfo: ActivePatternInfo /// Used in error recovery - | Error of range + | Error of range: range // %+A formatting is used, so this is not needed //[] @@ -4298,7 +4321,7 @@ type Bindings = Binding list /// A binding of a variable to an expression, as in a `let` binding or similar [] type Binding = - | TBind of Val * Expr * DebugPointForBinding + | TBind of var: Val * expr: Expr * debugPoint: DebugPointAtBinding /// The value being bound member x.Var = (let (TBind(v, _, _)) = x in v) @@ -4318,28 +4341,31 @@ type Binding = /// integer indicates which choice in the target set is being selected by this item. [] type ActivePatternElemRef = - | APElemRef of ActivePatternInfo * ValRef * int + | APElemRef of activePatternInfo: ActivePatternInfo * activePatternVal: ValRef * caseIndex: int * isStructRetTy: bool /// Get the full information about the active pattern being referred to - member x.ActivePatternInfo = (let (APElemRef(info, _, _)) = x in info) + member x.ActivePatternInfo = (let (APElemRef(info, _, _, _)) = x in info) /// Get a reference to the value for the active pattern being referred to - member x.ActivePatternVal = (let (APElemRef(_, vref, _)) = x in vref) + member x.ActivePatternVal = (let (APElemRef(_, vref, _, _)) = x in vref) + + /// Get a reference to the value for the active pattern being referred to + member x.IsStructReturn = (let (APElemRef(_, _, _, isStructRetTy)) = x in isStructRetTy) /// Get the index of the active pattern element within the overall active pattern - member x.CaseIndex = (let (APElemRef(_, _, n)) = x in n) + member x.CaseIndex = (let (APElemRef(_, _, n, _)) = x in n) [] member x.DebugText = x.ToString() - override __.ToString() = "ActivePatternElemRef(...)" + override _.ToString() = "ActivePatternElemRef(...)" /// Records the "extra information" for a value compiled as a method (rather /// than a closure or a local), including argument names, attributes etc. [] type ValReprInfo = - /// ValReprInfo (numTypars, args, result) - | ValReprInfo of TyparReprInfo list * ArgReprInfo list list * ArgReprInfo + /// ValReprInfo (typars, args, result) + | ValReprInfo of typars: TyparReprInfo list * args: ArgReprInfo list list * result: ArgReprInfo /// Get the extra information about the arguments for the value member x.ArgInfos = (let (ValReprInfo(_, args, _)) = x in args) @@ -4378,7 +4404,7 @@ type ValReprInfo = [] member x.DebugText = x.ToString() - override __.ToString() = "ValReprInfo(...)" + override _.ToString() = "ValReprInfo(...)" /// Records the "extra information" for an argument compiled as a real /// method argument, specifically the argument name and attributes. @@ -4397,7 +4423,7 @@ type ArgReprInfo = [] member x.DebugText = x.ToString() - override __.ToString() = "ArgReprInfo(...)" + override _.ToString() = "ArgReprInfo(...)" /// Records the extra metadata stored about typars for type parameters /// compiled as "real" IL type parameters, specifically for values with @@ -4501,7 +4527,7 @@ type Expr = /// as the range for all the decision making and binding that happens during the decision tree /// execution. | Match of - debugPoint: DebugPointForBinding * + debugPoint: DebugPointAtBinding * inputRange: range * decision: DecisionTree * targets: DecisionTreeTarget array * @@ -4617,7 +4643,7 @@ type TOp = | Array /// Constant byte arrays (used for parser tables and other embedded data) - | Bytes of byte[] + | Bytes of byte[] /// Constant uint16 arrays (used for parser tables) | UInt16s of uint16[] @@ -4823,7 +4849,7 @@ type ValUseFlag = /// a .NET 2.0 constrained call. A constrained call is only used for calls where // the object argument is a value type or generic type, and the call is to a method // on System.Object, System.ValueType, System.Enum or an interface methods. - | PossibleConstrainedCall of TType + | PossibleConstrainedCall of ty: TType /// A normal use of a value | NormalValUse @@ -4841,10 +4867,10 @@ type ValUseFlag = type StaticOptimization = /// Indicates the static optimization applies when a type equality holds - | TTyconEqualsTycon of TType * TType + | TTyconEqualsTycon of ty1: TType * ty2: TType /// Indicates the static optimization applies when a type is a struct - | TTyconIsStruct of TType + | TTyconIsStruct of ty: TType /// A representation of a method in an object expression. /// @@ -4852,7 +4878,13 @@ type StaticOptimization = [] type ObjExprMethod = - | TObjExprMethod of SlotSig * Attribs * Typars * Val list list * Expr * range + | TObjExprMethod of + slotSig: SlotSig * + attribs: Attribs * + methTyparsOfOverridingMethod: Typars * + methodParams: Val list list * + methodBodyExpr: Expr * + range: range member x.Id = let (TObjExprMethod(slotsig, _, _, _, _, m)) = x in mkSynId m slotsig.Name @@ -4938,19 +4970,19 @@ type ModuleOrNamespaceExprWithSig = [] type ModuleOrNamespaceExpr = /// Indicates the module is a module with a signature - | TMAbstract of ModuleOrNamespaceExprWithSig + | TMAbstract of moduleOrNamespaceExprWithSig: ModuleOrNamespaceExprWithSig /// Indicates the module fragment is made of several module fragments in succession - | TMDefs of ModuleOrNamespaceExpr list + | TMDefs of moduleOrNamespaceExprs: ModuleOrNamespaceExpr list /// Indicates the module fragment is a 'let' definition - | TMDefLet of Binding * range + | TMDefLet of binding: Binding * range: range /// Indicates the module fragment is an evaluation of expression for side-effects - | TMDefDo of Expr * range + | TMDefDo of expr: Expr * range: range /// Indicates the module fragment is a 'rec' or 'non-rec' definition of types and modules - | TMDefRec of isRec: bool * Tycon list * ModuleOrNamespaceBinding list * range + | TMDefRec of isRec: bool * tycons: Tycon list * moduleOrNamespaceBindings: ModuleOrNamespaceBinding list * range: range // %+A formatting is used, so this is not needed //[] @@ -4962,26 +4994,32 @@ type ModuleOrNamespaceExpr = [] type ModuleOrNamespaceBinding = - | Binding of Binding + | Binding of binding: Binding | Module of /// This ModuleOrNamespace that represents the compilation of a module as a class. /// The same set of tycons etc. are bound in the ModuleOrNamespace as in the ModuleOrNamespaceExpr - ModuleOrNamespace * + moduleOrNamespace: ModuleOrNamespace * /// This is the body of the module/namespace - ModuleOrNamespaceExpr + moduleOrNamespaceExpr: ModuleOrNamespaceExpr [] member x.DebugText = x.ToString() - override __.ToString() = "ModuleOrNamespaceBinding(...)" + override _.ToString() = "ModuleOrNamespaceBinding(...)" /// Represents a complete typechecked implementation file, including its typechecked signature if any. /// -/// TImplFile (qualifiedNameOfFile, pragmas, implementationExpressionWithSignature, hasExplicitEntryPoint, isScript) +/// TImplFile (qualifiedNameOfFile, pragmas, implementationExpressionWithSignature, hasExplicitEntryPoint, isScript, anonRecdTypeInfo) [] type TypedImplFile = - | TImplFile of QualifiedNameOfFile * ScopedPragma list * ModuleOrNamespaceExprWithSig * bool * bool * StampMap + | TImplFile of + qualifiedNameOfFile: QualifiedNameOfFile * + pragmas: ScopedPragma list * + implementationExpressionWithSignature: ModuleOrNamespaceExprWithSig * + hasExplicitEntryPoint: bool * + isScript: bool * + anonRecdTypeInfo: StampMap [] member x.DebugText = x.ToString() @@ -5058,7 +5096,9 @@ type CcuData = MemberSignatureEquality: (TType -> TType -> bool) /// The table of .NET CLI type forwarders for this assembly - TypeForwarders: CcuTypeForwarderTable } + TypeForwarders: CcuTypeForwarderTable + + XmlDocumentationInfo: XmlDocumentationInfo option } [] member x.DebugText = x.ToString() @@ -5204,6 +5244,11 @@ type CcuThunk = [] member x.DebugText = x.ToString() + /// Used at the end of comppiling an assembly to get a frozen, final stable CCU + /// for the compilation which we no longer mutate. + member x.CloneWithFinalizedContents(ccuContents) = + { x with target = { x.target with Contents = ccuContents } } + override ccu.ToString() = ccu.AssemblyName /// The result of attempting to resolve an assembly name to a full ccu. @@ -5234,7 +5279,7 @@ type PickledCcuInfo = [] member x.DebugText = x.ToString() - override __.ToString() = "PickledCcuInfo(...)" + override _.ToString() = "PickledCcuInfo(...)" /// Represents a set of free local values. Computed and cached by later phases @@ -5477,7 +5522,7 @@ type Construct() = static member MakeUnionRepr ucs = TUnionRepr (Construct.MakeUnionCases ucs) /// Create a new type parameter node - static member NewTypar (kind, rigid, Typar(id, staticReq, isCompGen), isFromError, dynamicReq, attribs, eqDep, compDep) = + static member NewTypar (kind, rigid, SynTypar(id, staticReq, isCompGen), isFromError, dynamicReq, attribs, eqDep, compDep) = Typar.New { typar_id = id typar_stamp = newStamp() @@ -5491,7 +5536,7 @@ type Construct() = /// Create a new type parameter node for a declared type parameter static member NewRigidTypar nm m = - Construct.NewTypar (TyparKind.Type, TyparRigidity.Rigid, Typar(mkSynId m nm, NoStaticReq, true), false, TyparDynamicReq.Yes, [], false, false) + Construct.NewTypar (TyparKind.Type, TyparRigidity.Rigid, SynTypar(mkSynId m nm, TyparStaticReq.None, true), false, TyparDynamicReq.Yes, [], false, false) /// Create a new union case node static member NewUnionCase id tys rty attribs docOption access: UnionCase = @@ -5644,7 +5689,7 @@ type Construct() = | Some (filePath, line, column) -> // Coordinates from type provider are 1-based for lines and columns // Coordinates internally in the F# compiler are 1-based for lines and 0-based for columns - let pos = Range.mkPos line (max 0 (column - 1)) + let pos = Position.mkPos line (max 0 (column - 1)) Range.mkRange filePath pos pos |> Some #endif diff --git a/src/fsharp/TypedTreeBasics.fs b/src/fsharp/TypedTreeBasics.fs index 5074b3f90e6..be95f4c2419 100644 --- a/src/fsharp/TypedTreeBasics.fs +++ b/src/fsharp/TypedTreeBasics.fs @@ -6,12 +6,11 @@ module internal FSharp.Compiler.TypedTreeBasics +open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CompilerGlobalState -open FSharp.Compiler.Lib -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Text +open FSharp.Compiler.Syntax open FSharp.Compiler.TypedTree #if DEBUG diff --git a/src/fsharp/TypedTreeBasics.fsi b/src/fsharp/TypedTreeBasics.fsi index 1a79098d0a8..fd9fe751e9e 100644 --- a/src/fsharp/TypedTreeBasics.fsi +++ b/src/fsharp/TypedTreeBasics.fsi @@ -6,8 +6,10 @@ module internal FSharp.Compiler.TypedTreeBasics -open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.Range +open Internal.Utilities.Library.Extras +open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text open FSharp.Compiler.TypedTree val getNameOfScopeRef: sref:ILScopeRef -> string @@ -79,15 +81,15 @@ val mkRecdFieldRef: tcref:TyconRef -> f:string -> RecdFieldRef val mkUnionCaseRef: tcref:TyconRef -> c:string -> UnionCaseRef -val ERefLocal: x:Lib.NonNullSlot -> EntityRef +val ERefLocal: x:NonNullSlot -> EntityRef val ERefNonLocal: x:NonLocalEntityRef -> EntityRef -val ERefNonLocalPreResolved: x:Lib.NonNullSlot -> xref:NonLocalEntityRef -> EntityRef +val ERefNonLocalPreResolved: x:NonNullSlot -> xref:NonLocalEntityRef -> EntityRef -val ( |ERefLocal|ERefNonLocal| ): x:EntityRef -> Choice,NonLocalEntityRef> +val ( |ERefLocal|ERefNonLocal| ): x:EntityRef -> Choice,NonLocalEntityRef> -val mkLocalTyconRef: x:Lib.NonNullSlot -> EntityRef +val mkLocalTyconRef: x:NonNullSlot -> EntityRef val mkNonLocalEntityRef: ccu:CcuThunk -> mp:string [] -> NonLocalEntityRef @@ -95,24 +97,24 @@ val mkNestedNonLocalEntityRef: nleref:NonLocalEntityRef -> id:string -> NonLocal val mkNonLocalTyconRef: nleref:NonLocalEntityRef -> id:string -> EntityRef -val mkNonLocalTyconRefPreResolved: x:Lib.NonNullSlot -> nleref:NonLocalEntityRef -> id:string -> EntityRef +val mkNonLocalTyconRefPreResolved: x:NonNullSlot -> nleref:NonLocalEntityRef -> id:string -> EntityRef type EntityRef with member NestedTyconRef: x:Entity -> EntityRef - member RecdFieldRefInNestedTycon: tycon:Entity -> id:SyntaxTree.Ident -> RecdFieldRef + member RecdFieldRefInNestedTycon: tycon:Entity -> id:Ident -> RecdFieldRef /// Make a reference to a union case for type in a module or namespace -val mkModuleUnionCaseRef: modref:ModuleOrNamespaceRef -> tycon:Entity -> uc:UnionCase -> UnionCaseRef val VRefLocal: x:Lib.NonNullSlot -> ValRef +val mkModuleUnionCaseRef: modref:ModuleOrNamespaceRef -> tycon:Entity -> uc:UnionCase -> UnionCaseRef val VRefLocal: x:NonNullSlot -> ValRef val VRefNonLocal: x:NonLocalValOrMemberRef -> ValRef -val VRefNonLocalPreResolved: x:Lib.NonNullSlot -> xref:NonLocalValOrMemberRef -> ValRef +val VRefNonLocalPreResolved: x:NonNullSlot -> xref:NonLocalValOrMemberRef -> ValRef -val ( |VRefLocal|VRefNonLocal| ): x:ValRef -> Choice,NonLocalValOrMemberRef> +val ( |VRefLocal|VRefNonLocal| ): x:ValRef -> Choice,NonLocalValOrMemberRef> val mkNonLocalValRef: mp:NonLocalEntityRef -> id:ValLinkageFullKey -> ValRef -val mkNonLocalValRefPreResolved: x:Lib.NonNullSlot -> mp:NonLocalEntityRef -> id:ValLinkageFullKey -> ValRef +val mkNonLocalValRefPreResolved: x:NonNullSlot -> mp:NonLocalEntityRef -> id:ValLinkageFullKey -> ValRef val ccuOfValRef: vref:ValRef -> CcuThunk option @@ -222,7 +224,7 @@ val taccessInternal: Accessibility val combineAccess: Accessibility -> Accessibility -> Accessibility -exception Duplicate of string * string * Range.range +exception Duplicate of string * string * range -exception NameClash of string * string * string * Range.range * string * string * Range.range +exception NameClash of string * string * string * range * string * string * range diff --git a/src/fsharp/TypedTreeOps.fs b/src/fsharp/TypedTreeOps.fs index b059698bebc..8ddaa5e7e17 100644 --- a/src/fsharp/TypedTreeOps.fs +++ b/src/fsharp/TypedTreeOps.fs @@ -6,29 +6,30 @@ module internal FSharp.Compiler.TypedTreeOps open System.Collections.Generic open System.Collections.Immutable open Internal.Utilities +open Internal.Utilities.Collections +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras +open Internal.Utilities.Rational -open FSharp.Compiler open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.ILX open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Diagnostics -open FSharp.Compiler.AbstractIL.Extensions.ILX -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features -open FSharp.Compiler.Layout -open FSharp.Compiler.Layout.TaggedTextOps -open FSharp.Compiler.Lib -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Range -open FSharp.Compiler.Rational -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming open FSharp.Compiler.SyntaxTreeOps +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Layout +open FSharp.Compiler.Text.LayoutRender +open FSharp.Compiler.Text.TaggedText +open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.XmlDoc #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping #endif @@ -163,11 +164,7 @@ let remapTyconRef (tcmap: TyconRefMap<_>) tcref = let remapUnionCaseRef tcmap (UnionCaseRef(tcref, nm)) = UnionCaseRef(remapTyconRef tcmap tcref, nm) let remapRecdFieldRef tcmap (RecdFieldRef(tcref, nm)) = RecdFieldRef(remapTyconRef tcmap tcref, nm) -let mkTyparInst (typars: Typars) tyargs = -#if CHECKED - if List.length typars <> List.length tyargs then - failwith ("mkTyparInst: invalid type" + (sprintf " %d <> %d" (List.length typars) (List.length tyargs))) -#endif +let mkTyparInst (typars: Typars) tyargs = (List.zip typars tyargs: TyparInst) let generalizeTypar tp = mkTyparTy tp @@ -1095,18 +1092,18 @@ let rec getErasedTypes g ty = // Standard orderings, e.g. for order set/map keys //--------------------------------------------------------------------------- -let valOrder = { new IComparer with member __.Compare(v1, v2) = compare v1.Stamp v2.Stamp } -let tyconOrder = { new IComparer with member __.Compare(tc1, tc2) = compare tc1.Stamp tc2.Stamp } +let valOrder = { new IComparer with member _.Compare(v1, v2) = compare v1.Stamp v2.Stamp } +let tyconOrder = { new IComparer with member _.Compare(tc1, tc2) = compare tc1.Stamp tc2.Stamp } let recdFieldRefOrder = { new IComparer with - member __.Compare(RecdFieldRef(tcref1, nm1), RecdFieldRef(tcref2, nm2)) = + member _.Compare(RecdFieldRef(tcref1, nm1), RecdFieldRef(tcref2, nm2)) = let c = tyconOrder.Compare (tcref1.Deref, tcref2.Deref) if c <> 0 then c else compare nm1 nm2 } let unionCaseRefOrder = { new IComparer with - member __.Compare(UnionCaseRef(tcref1, nm1), UnionCaseRef(tcref2, nm2)) = + member _.Compare(UnionCaseRef(tcref1, nm1), UnionCaseRef(tcref2, nm2)) = let c = tyconOrder.Compare (tcref1.Deref, tcref2.Deref) if c <> 0 then c else compare nm1 nm2 } @@ -1199,7 +1196,7 @@ type Expr with let primMkMatch(spBind, exprm, tree, targets, matchm, ty) = Expr.Match (spBind, exprm, tree, targets, matchm, ty) -type MatchBuilder(spBind, inpRange: Range.range) = +type MatchBuilder(spBind, inpRange: range) = let targets = new ResizeArray<_>(10) member x.AddTarget tg = @@ -1280,13 +1277,13 @@ let mkLetsFromBindings m binds body = List.foldBack (mkLetBind m) binds body let mkLet seqPtOpt m v x body = mkLetBind m (mkBind seqPtOpt v x) body /// Make sticky bindings that are compiler generated (though the variables may not be - e.g. they may be lambda arguments in a beta reduction) -let mkCompGenBind v e = TBind(v, e, NoDebugPointAtStickyBinding) +let mkCompGenBind v e = TBind(v, e, DebugPointAtBinding.NoneAtSticky) let mkCompGenBinds (vs: Val list) (es: Expr list) = List.map2 mkCompGenBind vs es let mkCompGenLet m v x body = mkLetBind m (mkCompGenBind v x) body let mkCompGenLets m vs xs body = mkLetsBind m (mkCompGenBinds vs xs) body let mkCompGenLetsFromBindings m vs xs body = mkLetsFromBindings m (mkCompGenBinds vs xs) body -let mkInvisibleBind v e = TBind(v, e, NoDebugPointAtInvisibleBinding) +let mkInvisibleBind v e = TBind(v, e, DebugPointAtBinding.NoneAtInvisible) let mkInvisibleBinds (vs: Val list) (es: Expr list) = List.map2 mkInvisibleBind vs es let mkInvisibleLet m v x body = mkLetBind m (mkInvisibleBind v x) body let mkInvisibleLets m vs xs body = mkLetsBind m (mkInvisibleBinds vs xs) body @@ -1345,8 +1342,8 @@ let isBeingGeneralized tp typeScheme = // Build conditional expressions... //------------------------------------------------------------------------- -let mkLazyAnd (g: TcGlobals) m e1 e2 = mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m g.bool_ty e1 e2 (Expr.Const (Const.Bool false, m, g.bool_ty)) -let mkLazyOr (g: TcGlobals) m e1 e2 = mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m g.bool_ty e1 (Expr.Const (Const.Bool true, m, g.bool_ty)) e2 +let mkLazyAnd (g: TcGlobals) m e1 e2 = mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m g.bool_ty e1 e2 (Expr.Const (Const.Bool false, m, g.bool_ty)) +let mkLazyOr (g: TcGlobals) m e1 e2 = mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m g.bool_ty e1 (Expr.Const (Const.Bool true, m, g.bool_ty)) e2 let mkCoerceExpr(e, to_ty, m, from_ty) = Expr.Op (TOp.Coerce, [to_ty;from_ty], [e], m) @@ -1611,9 +1608,6 @@ let GetTopTauTypeInFSharpForm g (curriedArgInfos: ArgReprInfo list list) tau m = let destTopForallTy g (ValReprInfo (ntps, _, _)) ty = let tps, tau = (if isNil ntps then [], ty else tryDestForallTy g ty) -#if CHECKED - if tps.Length <> kinds.Length then failwith (sprintf "destTopForallTy: internal error, #tps = %d, #ntps = %d" (List.length tps) ntps) -#endif // tps may be have been equated to other tps in equi-recursive type inference. Normalize them here let tps = NormalizeDeclaredTyparsForEquiRecursiveInference g tps tps, tau @@ -2284,7 +2278,7 @@ let valsOfBinds (binds: Bindings) = binds |> List.map (fun b -> b.Var) // Pull apart the type for an F# value that represents an object model method. Do not strip off a 'unit' argument. // Review: Should GetMemberTypeInFSharpForm have any other direct callers? -let GetMemberTypeInFSharpForm g memberFlags arities ty m = +let GetMemberTypeInFSharpForm g (memberFlags: SynMemberFlags) arities ty m = let tps, argInfos, rty, retInfo = GetTopValTypeInFSharpForm g arities ty m let argInfos = @@ -2439,14 +2433,14 @@ let GetFSharpViewOfReturnType (g: TcGlobals) retTy = let ReturnTypeOfPropertyVal g (v: Val) = let membInfo, topValInfo = checkMemberVal v.MemberInfo v.ValReprInfo v.Range match membInfo.MemberFlags.MemberKind with - | MemberKind.PropertySet -> + | SynMemberKind.PropertySet -> let numEnclosingTypars = CountEnclosingTyparsOfActualParentOfVal v let _, _, arginfos, _, _ = GetMemberTypeInMemberForm g membInfo.MemberFlags topValInfo numEnclosingTypars v.Type v.Range if not arginfos.IsEmpty && not arginfos.Head.IsEmpty then arginfos.Head |> List.last |> fst else error(Error(FSComp.SR.tastValueDoesNotHaveSetterType(), v.Range)) - | MemberKind.PropertyGet -> + | SynMemberKind.PropertyGet -> let numEnclosingTypars = CountEnclosingTyparsOfActualParentOfVal v let _, _, _, rty, _ = GetMemberTypeInMemberForm g membInfo.MemberFlags topValInfo numEnclosingTypars v.Type v.Range GetFSharpViewOfReturnType g rty @@ -2458,9 +2452,9 @@ let ReturnTypeOfPropertyVal g (v: Val) = let ArgInfosOfPropertyVal g (v: Val) = let membInfo, topValInfo = checkMemberVal v.MemberInfo v.ValReprInfo v.Range match membInfo.MemberFlags.MemberKind with - | MemberKind.PropertyGet -> + | SynMemberKind.PropertyGet -> ArgInfosOfMemberVal g v |> List.concat - | MemberKind.PropertySet -> + | SynMemberKind.PropertySet -> let numEnclosingTypars = CountEnclosingTyparsOfActualParentOfVal v let _, _, arginfos, _, _ = GetMemberTypeInMemberForm g membInfo.MemberFlags topValInfo numEnclosingTypars v.Type v.Range if not arginfos.IsEmpty && not arginfos.Head.IsEmpty then @@ -2491,8 +2485,8 @@ let isTTyparCoercesToType = function TyparConstraint.CoercesTo _ -> true | _ -> let prefixOfStaticReq s = match s with - | NoStaticReq -> "'" - | HeadTypeStaticReq -> " ^" + | TyparStaticReq.None -> "'" + | TyparStaticReq.HeadType -> " ^" let prefixOfRigidTypar (typar: Typar) = if (typar.Rigidity <> TyparRigidity.Rigid) then "_" else "" @@ -2505,7 +2499,7 @@ type TyparConstraintsWithTypars = (Typar * TyparConstraint) list module PrettyTypes = let newPrettyTypar (tp: Typar) nm = - Construct.NewTypar (tp.Kind, tp.Rigidity, Typar(ident(nm, tp.Range), tp.StaticReq, false), false, TyparDynamicReq.Yes, [], false, false) + Construct.NewTypar (tp.Kind, tp.Rigidity, SynTypar(ident(nm, tp.Range), tp.StaticReq, false), false, TyparDynamicReq.Yes, [], false, false) let NewPrettyTypars renaming tps names = let niceTypars = List.map2 newPrettyTypar tps names @@ -2764,11 +2758,13 @@ type DisplayEnv = showConstraintTyparAnnotations: bool abbreviateAdditionalConstraints: bool showTyparDefaultConstraints: bool + showDocumentation: bool shrinkOverloads: bool - printVerboseSignatures : bool + printVerboseSignatures: bool + escapeKeywordNames: bool g: TcGlobals contextAccessibility: Accessibility - generatedValueLayout : (Val -> layout option) + generatedValueLayout : (Val -> Layout option) genericParameterStyle: GenericParameterStyle } member x.SetOpenPaths paths = @@ -2788,18 +2784,20 @@ type DisplayEnv = showHiddenMembers = false showTyparBinding = false showImperativeTyparAnnotations = false - suppressInlineKeyword = false + suppressInlineKeyword = true suppressMutableKeyword = false showMemberContainers = false showAttributes = false showOverrides = true showConstraintTyparAnnotations = true + showDocumentation = false abbreviateAdditionalConstraints = false showTyparDefaultConstraints = false shortConstraints = false useColonForReturnType = false shrinkOverloads = true printVerboseSignatures = false + escapeKeywordNames = false g = tcGlobals contextAccessibility = taccessPublic generatedValueLayout = (fun _ -> None) @@ -2818,6 +2816,24 @@ type DisplayEnv = member denv.UseGenericParameterStyle style = { denv with genericParameterStyle = style } + static member InitialForSigFileGeneration g = + let denv = + { DisplayEnv.Empty g with + showImperativeTyparAnnotations = true + showHiddenMembers = true + showObsoleteMembers = true + showAttributes = true + suppressInlineKeyword = false + showDocumentation = true + shrinkOverloads = false + escapeKeywordNames = true } + denv.SetOpenPaths + [ FSharpLib.RootPath + FSharpLib.CorePath + FSharpLib.CollectionsPath + FSharpLib.ControlPath + (IL.splitNamespace FSharpLib.ExtraTopLevelOperatorsName) ] + let (+.+) s1 s2 = if s1 = "" then s2 else s1+"."+s2 let layoutOfPath p = @@ -2931,12 +2947,12 @@ let fullDisplayTextOfValRefAsLayout (vref: ValRef) = else tagUnknownEntity vref.DisplayName | Some memberInfo -> match memberInfo.MemberFlags.MemberKind with - | MemberKind.PropertyGet - | MemberKind.PropertySet - | MemberKind.PropertyGetSet -> tagProperty vref.DisplayName - | MemberKind.ClassConstructor - | MemberKind.Constructor -> tagMethod vref.DisplayName - | MemberKind.Member -> tagMember vref.DisplayName + | SynMemberKind.PropertyGet + | SynMemberKind.PropertySet + | SynMemberKind.PropertyGetSet -> tagProperty vref.DisplayName + | SynMemberKind.ClassConstructor + | SynMemberKind.Constructor -> tagMethod vref.DisplayName + | SynMemberKind.Member -> tagMember vref.DisplayName match fullNameOfParentOfValRefAsLayout vref with | ValueNone -> wordL n | ValueSome pathText -> @@ -3010,6 +3026,11 @@ let superOfTycon (g: TcGlobals) (tycon: Tycon) = | None -> g.obj_ty | Some ty -> ty +/// walk a TyconRef's inheritance tree, yielding any parent types as an array +let supersOfTyconRef (tcref: TyconRef) = + Array.unfold (fun (tcref: TyconRef) -> match tcref.TypeContents.tcaug_super with Some (TType_app(sup, _)) -> Some(sup, sup) | _ -> None) tcref + + //---------------------------------------------------------------------------- // Detect attributes //---------------------------------------------------------------------------- @@ -3030,8 +3051,8 @@ let isILAttrib (tref: ILTypeRef) (attr: ILAttribute) = let HasILAttribute tref (attrs: ILAttributes) = attrs.AsArray |> Array.exists (isILAttrib tref) -let TryDecodeILAttribute (g: TcGlobals) tref (attrs: ILAttributes) = - attrs.AsArray |> Array.tryPick (fun x -> if isILAttrib tref x then Some(decodeILAttribData g.ilg x) else None) +let TryDecodeILAttribute tref (attrs: ILAttributes) = + attrs.AsArray |> Array.tryPick (fun x -> if isILAttrib tref x then Some(decodeILAttribData x) else None) // F# view of attributes (these get converted to AbsIL attributes in ilxgen) let IsMatchingFSharpAttribute g (AttribInfo(_, tcref)) (Attrib(tcref2, _, _, _, _, _, _)) = tyconRefEq g tcref tcref2 @@ -3093,7 +3114,7 @@ let TryBindTyconRefAttribute g (m: range) (AttribInfo (atref, _) as args) (tcref | None -> None #endif | ILTypeMetadata (TILObjectReprData(_, _, tdef)) -> - match TryDecodeILAttribute g atref tdef.CustomAttrs with + match TryDecodeILAttribute atref tdef.CustomAttrs with | Some attr -> f1 attr | _ -> None | FSharpOrArrayOrByrefOrTupleOrExnTypeMetadata -> @@ -3116,12 +3137,16 @@ let TryFindTyconRefBoolAttribute g m attribSpec tcref = | ([ Some ((:? bool as v) : obj) ], _) -> Some v | _ -> None) +/// Try to find the resolved attributeusage for an type by walking its inheritance tree and picking the correct attribute usage value let TryFindAttributeUsageAttribute g m tcref = - TryBindTyconRefAttribute g m g.attrib_AttributeUsageAttribute tcref + [| yield tcref + yield! supersOfTyconRef tcref |] + |> Array.tryPick (fun tcref -> + TryBindTyconRefAttribute g m g.attrib_AttributeUsageAttribute tcref (fun (_, named) -> named |> List.tryPick (function ("AllowMultiple", _, _, ILAttribElem.Bool res) -> Some res | _ -> None)) (fun (Attrib(_, _, _, named, _, _, _)) -> named |> List.tryPick (function AttribNamedArg("AllowMultiple", _, _, AttribBoolArg res ) -> Some res | _ -> None)) (fun (_, named) -> named |> List.tryPick (function ("AllowMultiple", Some ((:? bool as res) : obj)) -> Some res | _ -> None)) - + ) /// Try to find a specific attribute on a type definition, where the attribute accepts a string argument. /// @@ -3248,6 +3273,8 @@ let mkPrintfFormatTy (g: TcGlobals) aty bty cty dty ety = TType_app(g.format_tcr let mkOptionTy (g: TcGlobals) ty = TType_app (g.option_tcr_nice, [ty]) +let mkValueOptionTy (g: TcGlobals) ty = TType_app (g.valueoption_tcr_nice, [ty]) + let mkNullableTy (g: TcGlobals) ty = TType_app (g.system_Nullable_tcref, [ty]) let mkListTy (g: TcGlobals) ty = TType_app (g.list_tcr_nice, [ty]) @@ -3315,7 +3342,9 @@ let mkSome g ty arg m = mkUnionCaseExpr(mkSomeCase g, [ty], [arg], m) let mkNone g ty m = mkUnionCaseExpr(mkNoneCase g, [ty], [], m) -let mkOptionGetValueUnprovenViaAddr g expr ty m = mkUnionCaseFieldGetUnprovenViaExprAddr (expr, mkSomeCase g, [ty], 0, m) +let mkValueSomeCase (g: TcGlobals) = mkUnionCaseRef g.valueoption_tcr_canon "ValueSome" + +let mkAnySomeCase g isStruct = (if isStruct then mkValueSomeCase g else mkSomeCase g) type ValRef with member vref.IsDispatchSlot = @@ -3424,11 +3453,11 @@ module DebugPrint = let squareAngleL x = LeftL.leftBracketAngle ^^ x ^^ RightL.rightBracketAngle - let angleL x = sepL Literals.leftAngle ^^ x ^^ rightL Literals.rightAngle + let angleL x = sepL TaggedText.leftAngle ^^ x ^^ rightL TaggedText.rightAngle - let braceL x = leftL Literals.leftBrace ^^ x ^^ rightL Literals.rightBrace + let braceL x = leftL TaggedText.leftBrace ^^ x ^^ rightL TaggedText.rightBrace - let braceBarL x = leftL Literals.leftBraceBar ^^ x ^^ rightL Literals.rightBraceBar + let braceBarL x = leftL TaggedText.leftBraceBar ^^ x ^^ rightL TaggedText.rightBraceBar let boolL = function true -> WordL.keywordTrue | false -> WordL.keywordFalse @@ -3451,9 +3480,9 @@ module DebugPrint = let angleBracketListL l = angleBracketL (sepListL (sepL (tagText ",")) l) - let layoutMemberFlags memFlags = + let layoutMemberFlags (memFlags: SynMemberFlags) = let stat = - if memFlags.IsInstance || (memFlags.MemberKind = MemberKind.Constructor) then emptyL + if memFlags.IsInstance || (memFlags.MemberKind = SynMemberKind.Constructor) then emptyL else wordL (tagText "static") let stat = if memFlags.IsDispatchSlot then stat ++ wordL (tagText "abstract") @@ -4076,7 +4105,7 @@ module DebugPrint = | (DecisionTreeTest.Const c) -> wordL(tagText "is") ^^ constL c | (DecisionTreeTest.IsNull ) -> wordL(tagText "isnull") | (DecisionTreeTest.IsInst (_, ty)) -> wordL(tagText "isinst") ^^ typeL ty - | (DecisionTreeTest.ActivePatternCase (exp, _, _, _, _)) -> wordL(tagText "query") ^^ exprL g exp + | (DecisionTreeTest.ActivePatternCase (exp, _, _, _, _, _)) -> wordL(tagText "query") ^^ exprL g exp | (DecisionTreeTest.Error _) -> wordL (tagText "error recovery") and targetL g i (TTarget (argvs, body, _)) = @@ -4093,9 +4122,9 @@ module DebugPrint = and iimplL g (ty, tmeths) = wordL(tagText "impl") ^^ aboveListL (typeL ty :: List.map (tmethodL g) tmeths) - let showType x = Layout.showL (typeL x) + let showType x = LayoutRender.showL (typeL x) - let showExpr g x = Layout.showL (exprL g x) + let showExpr g x = LayoutRender.showL (exprL g x) let traitL x = auxTraitL SimplifyTypes.typeSimplificationInfo0 x @@ -4553,7 +4582,7 @@ and accFreeInTest (opts: FreeVarOptions) discrim acc = | DecisionTreeTest.Const _ | DecisionTreeTest.IsNull -> acc | DecisionTreeTest.IsInst (srcty, tgty) -> accFreeVarsInTy opts srcty (accFreeVarsInTy opts tgty acc) - | DecisionTreeTest.ActivePatternCase (exp, tys, activePatIdentity, _, _) -> + | DecisionTreeTest.ActivePatternCase (exp, tys, _, activePatIdentity, _, _) -> accFreeInExpr opts exp (accFreeVarsInTys opts tys (Option.foldBack (fun (vref, tinst) acc -> accFreeValRef opts vref (accFreeVarsInTys opts tinst acc)) activePatIdentity acc)) @@ -4924,7 +4953,7 @@ let InferArityOfExpr g allowTypeDirectedDetupling ty partialArgAttribsL retAttri assert (List.length vsl = List.length dtys) let curriedArgInfos = - (List.zip vsl dtys) |> List.mapi (fun i (vs, ty) -> + (vsl, dtys) ||> List.mapi2 (fun i vs ty -> let partialAttribs = if i < partialArgAttribsL.Length then partialArgAttribsL.[i] else [] let tys = match allowTypeDirectedDetupling with @@ -5001,7 +5030,7 @@ let decideStaticOptimizationConstraint g c haveWitnesses = match c with // When witnesses are available in generic code during codegen, "when ^T : ^T" resolves StaticOptimizationAnswer.Yes // This doesn't apply to "when 'T : 'T" use for "FastGenericEqualityComparer" and others. - | TTyconEqualsTycon (a, b) when haveWitnesses && typeEquiv g a b && (match tryDestTyparTy g a with ValueSome tp -> tp.StaticReq = TyparStaticReq.HeadTypeStaticReq | _ -> false) -> + | TTyconEqualsTycon (a, b) when haveWitnesses && typeEquiv g a b && (match tryDestTyparTy g a with ValueSome tp -> tp.StaticReq = TyparStaticReq.HeadType | _ -> false) -> StaticOptimizationAnswer.Yes | TTyconEqualsTycon (a, b) -> // Both types must be nominal for a definite result @@ -5071,7 +5100,7 @@ let markAsCompGen compgen d = match compgen with | CloneAllAndMarkExprValsAsCompilerGenerated -> true | _ -> false - { d with val_flags= d.val_flags.SetIsCompilerGenerated(d.val_flags.IsCompilerGenerated || compgen) } + { d with val_flags= d.val_flags.WithIsCompilerGenerated(d.val_flags.IsCompilerGenerated || compgen) } let bindLocalVal (v: Val) (v': Val) tmenv = { tmenv with valRemap=tmenv.valRemap.Add v (mkLocalValRef v') } @@ -5699,7 +5728,7 @@ let rec remarkExpr m x = | Expr.Match (_, _, pt, targets, _, ty) -> let targetsR = targets |> Array.map (fun (TTarget(vs, e, _)) -> TTarget(vs, remarkExpr m e, DebugPointForTarget.No)) - primMkMatch (NoDebugPointAtInvisibleBinding, m, remarkDecisionTree m pt, targetsR, m, ty) + primMkMatch (DebugPointAtBinding.NoneAtInvisible, m, remarkDecisionTree m pt, targetsR, m, ty) | Expr.Val (x, valUseFlags, _) -> Expr.Val (x, valUseFlags, m) @@ -5764,7 +5793,7 @@ and remarkBinds m binds = List.map (remarkBind m) binds // This very deliberately drops the sequence points since this is used when adjusting the marks for inlined expressions and remarkBind m (TBind(v, repr, _)) = - TBind(v, remarkExpr m repr, NoDebugPointAtStickyBinding) + TBind(v, remarkExpr m repr, DebugPointAtBinding.NoneAtSticky) //-------------------------------------------------------------------------- // Mutability analysis @@ -6496,8 +6525,8 @@ let rec IterateRecursiveFixups g (selfv: Val option) rvs ((access: Expr), set) e let JoinTyparStaticReq r1 r2 = match r1, r2 with - | NoStaticReq, r | r, NoStaticReq -> r - | HeadTypeStaticReq, r | r, HeadTypeStaticReq -> r + | TyparStaticReq.None, r | r, TyparStaticReq.None -> r + | TyparStaticReq.HeadType, r | r, TyparStaticReq.HeadType -> r //------------------------------------------------------------------------- // ExprFolder - fold steps @@ -7314,7 +7343,7 @@ let tref_CompilationSourceNameAttr (g: TcGlobals) = mkILTyRef (g.fslibCcu.ILScop let tref_SourceConstructFlags (g: TcGlobals) = mkILTyRef (g.fslibCcu.ILScopeRef, tnameSourceConstructFlags) let mkCompilationMappingAttrPrim (g: TcGlobals) k nums = - mkILCustomAttribute g.ilg (tref_CompilationMappingAttr g, + mkILCustomAttribute (tref_CompilationMappingAttr g, ((mkILNonGenericValueTy (tref_SourceConstructFlags g)) :: (nums |> List.map (fun _ -> g.ilg.typ_Int32))), ((k :: nums) |> List.map (fun n -> ILAttribElem.Int32 n)), []) @@ -7326,17 +7355,17 @@ let mkCompilationMappingAttrWithSeqNum g kind seqNum = mkCompilationMappingAttrP let mkCompilationMappingAttrWithVariantNumAndSeqNum g kind varNum seqNum = mkCompilationMappingAttrPrim g kind [varNum;seqNum] let mkCompilationArgumentCountsAttr (g: TcGlobals) nums = - mkILCustomAttribute g.ilg (tref_CompilationArgumentCountsAttr g, [ mkILArr1DTy g.ilg.typ_Int32 ], + mkILCustomAttribute (tref_CompilationArgumentCountsAttr g, [ mkILArr1DTy g.ilg.typ_Int32 ], [ILAttribElem.Array (g.ilg.typ_Int32, List.map (fun n -> ILAttribElem.Int32 n) nums)], []) let mkCompilationSourceNameAttr (g: TcGlobals) n = - mkILCustomAttribute g.ilg (tref_CompilationSourceNameAttr g, [ g.ilg.typ_String ], + mkILCustomAttribute (tref_CompilationSourceNameAttr g, [ g.ilg.typ_String ], [ILAttribElem.String(Some n)], []) let mkCompilationMappingAttrForQuotationResource (g: TcGlobals) (nm, tys: ILTypeRef list) = - mkILCustomAttribute g.ilg (tref_CompilationMappingAttr g, + mkILCustomAttribute (tref_CompilationMappingAttr g, [ g.ilg.typ_String; mkILArr1DTy g.ilg.typ_Type ], [ ILAttribElem.String (Some nm); ILAttribElem.Array (g.ilg.typ_Type, [ for ty in tys -> ILAttribElem.TypeRef (Some ty) ]) ], []) @@ -7350,9 +7379,9 @@ let mkCompilationMappingAttrForQuotationResource (g: TcGlobals) (nm, tys: ILType let isTypeProviderAssemblyAttr (cattr: ILAttribute) = cattr.Method.DeclaringType.BasicQualifiedName = typeof.FullName -let TryDecodeTypeProviderAssemblyAttr ilg (cattr: ILAttribute) = +let TryDecodeTypeProviderAssemblyAttr (cattr: ILAttribute) = if isTypeProviderAssemblyAttr cattr then - let parms, _args = decodeILAttribData ilg cattr + let parms, _args = decodeILAttribData cattr match parms with // The first parameter to the attribute is the name of the assembly with the compiler extensions. | (ILAttribElem.String (Some assemblyName)) :: _ -> Some assemblyName | (ILAttribElem.String None) :: _ -> Some null @@ -7371,11 +7400,11 @@ let tname_SignatureDataVersionAttr = FSharpLib.Core + ".FSharpInterfaceDataVersi let tnames_SignatureDataVersionAttr = splitILTypeName tname_SignatureDataVersionAttr -let tref_SignatureDataVersionAttr () = mkILTyRef(IlxSettings.ilxFsharpCoreLibScopeRef (), tname_SignatureDataVersionAttr) +let tref_SignatureDataVersionAttr fsharpCoreAssemblyScopeRef = mkILTyRef(fsharpCoreAssemblyScopeRef, tname_SignatureDataVersionAttr) let mkSignatureDataVersionAttr (g: TcGlobals) (version: ILVersionInfo) = - mkILCustomAttribute g.ilg - (tref_SignatureDataVersionAttr(), + mkILCustomAttribute + (tref_SignatureDataVersionAttr g.ilg.fsharpCoreAssemblyScopeRef, [g.ilg.typ_Int32;g.ilg.typ_Int32;g.ilg.typ_Int32], [ILAttribElem.Int32 (int32 version.Major) ILAttribElem.Int32 (int32 version.Minor) @@ -7385,9 +7414,9 @@ let tname_AutoOpenAttr = FSharpLib.Core + ".AutoOpenAttribute" let IsSignatureDataVersionAttr cattr = isILAttribByName ([], tname_SignatureDataVersionAttr) cattr -let TryFindAutoOpenAttr (ilg: IL.ILGlobals) cattr = +let TryFindAutoOpenAttr cattr = if isILAttribByName ([], tname_AutoOpenAttr) cattr then - match decodeILAttribData ilg cattr with + match decodeILAttribData cattr with | [ILAttribElem.String s], _ -> s | [], _ -> None | _ -> @@ -7398,9 +7427,9 @@ let TryFindAutoOpenAttr (ilg: IL.ILGlobals) cattr = let tname_InternalsVisibleToAttr = "System.Runtime.CompilerServices.InternalsVisibleToAttribute" -let TryFindInternalsVisibleToAttr ilg cattr = +let TryFindInternalsVisibleToAttr cattr = if isILAttribByName ([], tname_InternalsVisibleToAttr) cattr then - match decodeILAttribData ilg cattr with + match decodeILAttribData cattr with | [ILAttribElem.String s], _ -> s | [], _ -> None | _ -> @@ -7409,9 +7438,9 @@ let TryFindInternalsVisibleToAttr ilg cattr = else None -let IsMatchingSignatureDataVersionAttr ilg (version: ILVersionInfo) cattr = +let IsMatchingSignatureDataVersionAttr (version: ILVersionInfo) cattr = IsSignatureDataVersionAttr cattr && - match decodeILAttribData ilg cattr with + match decodeILAttribData cattr with | [ILAttribElem.Int32 u1; ILAttribElem.Int32 u2;ILAttribElem.Int32 u3 ], _ -> (version.Major = uint16 u1) && (version.Minor = uint16 u2) && (version.Build = uint16 u3) | _ -> @@ -7419,7 +7448,7 @@ let IsMatchingSignatureDataVersionAttr ilg (version: ILVersionInfo) cattr = false let mkCompilerGeneratedAttr (g: TcGlobals) n = - mkILCustomAttribute g.ilg (tref_CompilationMappingAttr g, [mkILNonGenericValueTy (tref_SourceConstructFlags g)], [ILAttribElem.Int32 n], []) + mkILCustomAttribute (tref_CompilationMappingAttr g, [mkILNonGenericValueTy (tref_SourceConstructFlags g)], [ILAttribElem.Int32 n], []) //-------------------------------------------------------------------------- // tupled lambda --> method/function with a given topValInfo specification. @@ -8092,12 +8121,12 @@ let XmlDocSigOfVal g full path (v: Val) = let tps, witnessInfos, argInfos, rty, _ = GetMemberTypeInMemberForm g membInfo.MemberFlags (Option.get v.ValReprInfo) numEnclosingTypars v.Type v.Range let prefix, name = match membInfo.MemberFlags.MemberKind with - | MemberKind.ClassConstructor - | MemberKind.Constructor -> "M:", "#ctor" - | MemberKind.Member -> "M:", v.CompiledName g.CompilerGlobalState - | MemberKind.PropertyGetSet - | MemberKind.PropertySet - | MemberKind.PropertyGet -> "P:", v.PropertyName + | SynMemberKind.ClassConstructor + | SynMemberKind.Constructor -> "M:", "#ctor" + | SynMemberKind.Member -> "M:", v.CompiledName g.CompilerGlobalState + | SynMemberKind.PropertyGetSet + | SynMemberKind.PropertySet + | SynMemberKind.PropertyGet -> "P:", v.PropertyName let path = if v.HasDeclaringEntity then prependPath path v.TopValDeclaringEntity.CompiledName else path let parentTypars, methTypars = match PartitionValTypars g v with @@ -8318,7 +8347,7 @@ let mkIsInstConditional g m tgty vinpe v e2 e3 = if canUseTypeTestFast g tgty then - let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m) + let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m) let tg2 = mbuilder.AddResultTarget(e2, DebugPointForTarget.No) let tg3 = mbuilder.AddResultTarget(e3, DebugPointForTarget.No) let dtree = TDSwitch(exprForVal m v, [TCase(DecisionTreeTest.IsNull, tg3)], Some tg2, m) @@ -8326,7 +8355,7 @@ let mkIsInstConditional g m tgty vinpe v e2 e3 = mkCompGenLet m v (mkIsInst tgty vinpe m) expr else - let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m) + let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m) let tg2 = TDSuccess([mkCallUnbox g m tgty vinpe], mbuilder.AddTarget(TTarget([v], e2, DebugPointForTarget.No))) let tg3 = mbuilder.AddResultTarget(e3, DebugPointForTarget.No) let dtree = TDSwitch(vinpe, [TCase(DecisionTreeTest.IsInst(tyOfExpr g vinpe, tgty), tg2)], Some tg3, m) @@ -8337,7 +8366,7 @@ let mkIsInstConditional g m tgty vinpe v e2 e3 = // 1. The compilation of array patterns in the pattern match compiler // 2. The compilation of string patterns in the pattern match compiler let mkNullTest g m e1 e2 e3 = - let mbuilder = new MatchBuilder(NoDebugPointAtInvisibleBinding, m) + let mbuilder = new MatchBuilder(DebugPointAtBinding.NoneAtInvisible, m) let tg2 = mbuilder.AddResultTarget(e2, DebugPointForTarget.No) let tg3 = mbuilder.AddResultTarget(e3, DebugPointForTarget.No) let dtree = TDSwitch(e1, [TCase(DecisionTreeTest.IsNull, tg3)], Some tg2, m) @@ -8346,9 +8375,9 @@ let mkNullTest g m e1 e2 e3 = let mkNonNullTest (g: TcGlobals) m e = mkAsmExpr ([ IL.AI_ldnull ; IL.AI_cgt_un ], [], [e], [g.bool_ty], m) -let mkNonNullCond g m ty e1 e2 e3 = mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m ty (mkNonNullTest g m e1) e2 e3 +let mkNonNullCond g m ty e1 e2 e3 = mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m ty (mkNonNullTest g m e1) e2 e3 -let mkIfThen (g: TcGlobals) m e1 e2 = mkCond NoDebugPointAtStickyBinding DebugPointForTarget.No m g.unit_ty e1 e2 (mkUnit g m) +let mkIfThen (g: TcGlobals) m e1 e2 = mkCond DebugPointAtBinding.NoneAtSticky DebugPointForTarget.No m g.unit_ty e1 e2 (mkUnit g m) let ModuleNameIsMangled g attrs = match TryFindFSharpInt32Attribute g g.attrib_CompilationRepresentationAttribute attrs with @@ -8427,13 +8456,13 @@ let GetMemberCallInfo g (vref: ValRef, vFlags) = membInfo.MemberFlags.IsDispatchSlot) && not membInfo.MemberFlags.IsFinal && (match vFlags with VSlotDirectCall -> false | _ -> true) - let isNewObj = (membInfo.MemberFlags.MemberKind = MemberKind.Constructor) && (match vFlags with NormalValUse -> true | _ -> false) - let isSuperInit = (membInfo.MemberFlags.MemberKind = MemberKind.Constructor) && (match vFlags with CtorValUsedAsSuperInit -> true | _ -> false) - let isSelfInit = (membInfo.MemberFlags.MemberKind = MemberKind.Constructor) && (match vFlags with CtorValUsedAsSelfInit -> true | _ -> false) + let isNewObj = (membInfo.MemberFlags.MemberKind = SynMemberKind.Constructor) && (match vFlags with NormalValUse -> true | _ -> false) + let isSuperInit = (membInfo.MemberFlags.MemberKind = SynMemberKind.Constructor) && (match vFlags with CtorValUsedAsSuperInit -> true | _ -> false) + let isSelfInit = (membInfo.MemberFlags.MemberKind = SynMemberKind.Constructor) && (match vFlags with CtorValUsedAsSelfInit -> true | _ -> false) let isCompiledAsInstance = ValRefIsCompiledAsInstanceMember g vref let takesInstanceArg = isCompiledAsInstance && not isNewObj - let isPropGet = (membInfo.MemberFlags.MemberKind = MemberKind.PropertyGet) && (membInfo.MemberFlags.IsInstance = isCompiledAsInstance) - let isPropSet = (membInfo.MemberFlags.MemberKind = MemberKind.PropertySet) && (membInfo.MemberFlags.IsInstance = isCompiledAsInstance) + let isPropGet = (membInfo.MemberFlags.MemberKind = SynMemberKind.PropertyGet) && (membInfo.MemberFlags.IsInstance = isCompiledAsInstance) + let isPropSet = (membInfo.MemberFlags.MemberKind = SynMemberKind.PropertySet) && (membInfo.MemberFlags.IsInstance = isCompiledAsInstance) numEnclTypeArgs, virtualCall, isNewObj, isSuperInit, isSelfInit, takesInstanceArg, isPropGet, isPropSet | _ -> 0, false, false, false, false, false, false, false @@ -8453,7 +8482,7 @@ let TryGetActivePatternInfo (vref: ValRef) = type ActivePatternElemRef with member x.Name = - let (APElemRef(_, vref, n)) = x + let (APElemRef(_, vref, n, _)) = x match TryGetActivePatternInfo vref with | None -> error(InternalError("not an active pattern name", vref.Range)) | Some apinfo -> @@ -8484,12 +8513,14 @@ let mkChoiceCaseRef g m n i = type PrettyNaming.ActivePatternInfo with member x.Names = x.ActiveTags - member apinfo.ResultType g m rtys = + member apinfo.ResultType g m rtys isStruct = let choicety = mkChoiceTy g m rtys - if apinfo.IsTotal then choicety else mkOptionTy g choicety + if apinfo.IsTotal then choicety + elif isStruct then mkValueOptionTy g choicety + else mkOptionTy g choicety - member apinfo.OverallType g m dty rtys = - mkFunTy dty (apinfo.ResultType g m rtys) + member apinfo.OverallType g m dty rtys isStruct = + mkFunTy dty (apinfo.ResultType g m rtys isStruct) //--------------------------------------------------------------------------- // Active pattern validation @@ -8790,7 +8821,7 @@ and remapValToNonLocal g tmenv inp = let ApplyExportRemappingToEntity g tmenv x = remapTyconToNonLocal g tmenv x (* Which constraints actually get compiled to .NET constraints? *) -let isCompiledConstraint cx = +let isCompiledOrWitnessPassingConstraint (g: TcGlobals) cx = match cx with | TyparConstraint.SupportsNull _ // this implies the 'class' constraint | TyparConstraint.IsReferenceType _ // this is the 'class' constraint @@ -8798,13 +8829,15 @@ let isCompiledConstraint cx = | TyparConstraint.IsReferenceType _ | TyparConstraint.RequiresDefaultConstructor _ | TyparConstraint.CoercesTo _ -> true + | TyparConstraint.MayResolveMember _ when g.langVersion.SupportsFeature LanguageFeature.WitnessPassing -> true | _ -> false -// Is a value a first-class polymorphic value with .NET constraints? -// Used to turn off TLR and method splitting +// Is a value a first-class polymorphic value with .NET constraints, or witness-passing constraints? +// Used to turn off TLR and method splitting and do not compile to +// FSharpTypeFunc, but rather bake a "local type function" for each TyLambda abstraction. let IsGenericValWithGenericConstraints g (v: Val) = isForallTy g v.Type && - v.Type |> destForallTy g |> fst |> List.exists (fun tp -> List.exists isCompiledConstraint tp.Constraints) + v.Type |> destForallTy g |> fst |> List.exists (fun tp -> List.exists (isCompiledOrWitnessPassingConstraint g) tp.Constraints) // Does a type support a given interface? type Entity with @@ -9148,8 +9181,8 @@ let (|CompiledForEachExpr|_|) g expr = let mBody = bodyExpr.Range let mWholeExpr = expr.Range - let spForLoop, mForLoop = match enumeratorBind with DebugPointAtBinding spStart -> DebugPointAtFor.Yes spStart, spStart | _ -> DebugPointAtFor.No, mEnumExpr - let spWhileLoop = match enumeratorBind with DebugPointAtBinding spStart -> DebugPointAtWhile.Yes spStart| _ -> DebugPointAtWhile.No + let spForLoop, mForLoop = match enumeratorBind with DebugPointAtBinding.Yes spStart -> DebugPointAtFor.Yes spStart, spStart | _ -> DebugPointAtFor.No, mEnumExpr + let spWhileLoop = match enumeratorBind with DebugPointAtBinding.Yes spStart -> DebugPointAtWhile.Yes spStart| _ -> DebugPointAtWhile.No let enumerableTy = tyOfExpr g enumerableExpr Some (enumerableTy, enumerableExpr, elemVar, bodyExpr, (mEnumExpr, mBody, spForLoop, mForLoop, spWhileLoop, mWholeExpr)) @@ -9230,7 +9263,7 @@ let DetectAndOptimizeForExpression g option expr = let expr = // let mutable current = enumerableExpr - let spBind = (match spForLoop with DebugPointAtFor.Yes spStart -> DebugPointAtBinding spStart | DebugPointAtFor.No -> NoDebugPointAtStickyBinding) + let spBind = (match spForLoop with DebugPointAtFor.Yes spStart -> DebugPointAtBinding.Yes spStart | DebugPointAtFor.No -> DebugPointAtBinding.NoneAtSticky) mkLet spBind mEnumExpr currentVar enumerableExpr // let mutable next = current.TailOrNull (mkCompGenLet mForLoop nextVar tailOrNullExpr @@ -9255,7 +9288,7 @@ let BindUnitVars g (mvs: Val list, paramInfos: ArgReprInfo list, body) = match mvs, paramInfos with | [v], [] -> assert isUnitTy g v.Type - [], mkLet NoDebugPointAtInvisibleBinding v.Range v (mkUnit g v.Range) body + [], mkLet DebugPointAtBinding.NoneAtInvisible v.Range v (mkUnit g v.Range) body | _ -> mvs, body let isThreadOrContextStatic g attrs = @@ -9338,8 +9371,8 @@ type TraitWitnessInfoHashMap<'T> = ImmutableDictionary let EmptyTraitWitnessInfoHashMap g : TraitWitnessInfoHashMap<'T> = ImmutableDictionary.Create( { new IEqualityComparer<_> with - member __.Equals(a, b) = traitKeysAEquiv g TypeEquivEnv.Empty a b - member __.GetHashCode(a) = hash a.MemberName + member _.Equals(a, b) = traitKeysAEquiv g TypeEquivEnv.Empty a b + member _.GetHashCode(a) = hash a.MemberName }) let (|WhileExpr|_|) expr = diff --git a/src/fsharp/TypedTreeOps.fsi b/src/fsharp/TypedTreeOps.fsi index 70846f8e96f..8e3dc20b995 100755 --- a/src/fsharp/TypedTreeOps.fsi +++ b/src/fsharp/TypedTreeOps.fsi @@ -4,32 +4,27 @@ module internal FSharp.Compiler.TypedTreeOps open System.Collections.Generic - -open Internal.Utilities - -open FSharp.Compiler +open System.Collections.Immutable +open Internal.Utilities.Collections +open Internal.Utilities.Rational open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.Layout -open FSharp.Compiler.Range -open FSharp.Compiler.Rational -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TcGlobals -open FSharp.Compiler.XmlDoc -open System.Collections.Immutable type Erasure = EraseAll | EraseMeasures | EraseNone /// Check the equivalence of two types up to an erasure flag -val typeEquivAux : Erasure -> TcGlobals -> TType -> TType -> bool +val typeEquivAux: Erasure -> TcGlobals -> TType -> TType -> bool /// Check the equivalence of two types -val typeEquiv : TcGlobals -> TType -> TType -> bool +val typeEquiv: TcGlobals -> TType -> TType -> bool /// Check the equivalence of two units-of-measure -val measureEquiv : TcGlobals -> Measure -> Measure -> bool +val measureEquiv: TcGlobals -> Measure -> Measure -> bool /// Get the unit of measure for an annotated type val getMeasureOfType: TcGlobals -> TType -> (TyconRef * Measure) option @@ -38,165 +33,165 @@ val getMeasureOfType: TcGlobals -> TType -> (TyconRef * Measure) option val stripTyEqnsWrtErasure: Erasure -> TcGlobals -> TType -> TType /// Build a function type -val mkFunTy : TType -> TType -> TType +val mkFunTy: TType -> TType -> TType /// Build a function type -val ( --> ) : TType -> TType -> TType +val ( --> ): TType -> TType -> TType /// Build a type-forall anonymous generic type if necessary -val mkForallTyIfNeeded : Typars -> TType -> TType +val mkForallTyIfNeeded: Typars -> TType -> TType -val ( +-> ) : Typars -> TType -> TType +val ( +-> ): Typars -> TType -> TType /// Build a curried function type -val mkIteratedFunTy : TTypes -> TType -> TType +val mkIteratedFunTy: TTypes -> TType -> TType /// Get the natural type of a single argument amongst a set of curried arguments -val typeOfLambdaArg : range -> Val list -> TType +val typeOfLambdaArg: range -> Val list -> TType /// Get the curried type corresponding to a lambda -val mkMultiLambdaTy : range -> Val list -> TType -> TType +val mkMultiLambdaTy: range -> Val list -> TType -> TType /// Get the curried type corresponding to a lambda -val mkLambdaTy : Typars -> TTypes -> TType -> TType +val mkLambdaTy: Typars -> TTypes -> TType -> TType /// Module publication, used while compiling fslib. -val ensureCcuHasModuleOrNamespaceAtPath : CcuThunk -> Ident list -> CompilationPath -> XmlDoc -> unit +val ensureCcuHasModuleOrNamespaceAtPath: CcuThunk -> Ident list -> CompilationPath -> XmlDoc -> unit /// Ignore 'Expr.Link' in an expression -val stripExpr : Expr -> Expr +val stripExpr: Expr -> Expr /// Get the values for a set of bindings -val valsOfBinds : Bindings -> Vals +val valsOfBinds: Bindings -> Vals /// Look for a use of an F# value, possibly including application of a generic thing to a set of type arguments -val (|ExprValWithPossibleTypeInst|_|) : Expr -> (ValRef * ValUseFlag * TType list * range) option +val (|ExprValWithPossibleTypeInst|_|): Expr -> (ValRef * ValUseFlag * TType list * range) option /// Build decision trees imperatively type MatchBuilder = /// Create a new builder - new : DebugPointForBinding * range -> MatchBuilder + new: DebugPointAtBinding * range -> MatchBuilder /// Add a new destination target - member AddTarget : DecisionTreeTarget -> int + member AddTarget: DecisionTreeTarget -> int /// Add a new destination target that is an expression result - member AddResultTarget : Expr * DebugPointForTarget -> DecisionTree + member AddResultTarget: Expr * DebugPointForTarget -> DecisionTree /// Finish the targets - member CloseTargets : unit -> DecisionTreeTarget list + member CloseTargets: unit -> DecisionTreeTarget list /// Build the overall expression - member Close : DecisionTree * range * TType -> Expr + member Close: DecisionTree * range * TType -> Expr /// Add an if-then-else boolean conditional node into a decision tree -val mkBoolSwitch : range -> Expr -> DecisionTree -> DecisionTree -> DecisionTree +val mkBoolSwitch: range -> Expr -> DecisionTree -> DecisionTree -> DecisionTree /// Build a conditional expression -val primMkCond : DebugPointForBinding -> DebugPointForTarget -> DebugPointForTarget -> range -> TType -> Expr -> Expr -> Expr -> Expr +val primMkCond: DebugPointAtBinding -> DebugPointForTarget -> DebugPointForTarget -> range -> TType -> Expr -> Expr -> Expr -> Expr /// Build a conditional expression -val mkCond : DebugPointForBinding -> DebugPointForTarget -> range -> TType -> Expr -> Expr -> Expr -> Expr +val mkCond: DebugPointAtBinding -> DebugPointForTarget -> range -> TType -> Expr -> Expr -> Expr -> Expr /// Build a conditional expression that checks for non-nullness -val mkNonNullCond : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr +val mkNonNullCond: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr /// Build an if-then statement -val mkIfThen : TcGlobals -> range -> Expr -> Expr -> Expr +val mkIfThen: TcGlobals -> range -> Expr -> Expr -> Expr /// Build an expression corresponding to the use of a value /// Note: try to use exprForValRef or the expression returned from mkLocal instead of this. -val exprForVal : range -> Val -> Expr +val exprForVal: range -> Val -> Expr /// Build an expression corresponding to the use of a reference to a value -val exprForValRef : range -> ValRef -> Expr +val exprForValRef: range -> ValRef -> Expr /// Make a new local value and build an expression to reference it -val mkLocal : range -> string -> TType -> Val * Expr +val mkLocal: range -> string -> TType -> Val * Expr /// Make a new compiler-generated local value and build an expression to reference it -val mkCompGenLocal : range -> string -> TType -> Val * Expr +val mkCompGenLocal: range -> string -> TType -> Val * Expr /// Make a new mutable compiler-generated local value and build an expression to reference it -val mkMutableCompGenLocal : range -> string -> TType -> Val * Expr +val mkMutableCompGenLocal: range -> string -> TType -> Val * Expr /// Make a new mutable compiler-generated local value, 'let' bind it to an expression /// 'invisibly' (no sequence point etc.), and build an expression to reference it -val mkCompGenLocalAndInvisibleBind : TcGlobals -> string -> range -> Expr -> Val * Expr * Binding +val mkCompGenLocalAndInvisibleBind: TcGlobals -> string -> range -> Expr -> Val * Expr * Binding /// Build a lambda expression taking multiple values -val mkMultiLambda : range -> Val list -> Expr * TType -> Expr +val mkMultiLambda: range -> Val list -> Expr * TType -> Expr /// Rebuild a lambda during an expression tree traversal -val rebuildLambda : range -> Val option -> Val option -> Val list -> Expr * TType -> Expr +val rebuildLambda: range -> Val option -> Val option -> Val list -> Expr * TType -> Expr /// Build a lambda expression taking a single value -val mkLambda : range -> Val -> Expr * TType -> Expr +val mkLambda: range -> Val -> Expr * TType -> Expr /// Build a generic lambda expression (type abstraction) -val mkTypeLambda : range -> Typars -> Expr * TType -> Expr +val mkTypeLambda: range -> Typars -> Expr * TType -> Expr /// Build an object expression -val mkObjExpr : TType * Val option * Expr * ObjExprMethod list * (TType * ObjExprMethod list) list * Range.range -> Expr +val mkObjExpr: TType * Val option * Expr * ObjExprMethod list * (TType * ObjExprMethod list) list * range -> Expr /// Build an type-chose expression, indicating that a local free choice of a type variable -val mkTypeChoose : range -> Typars -> Expr -> Expr +val mkTypeChoose: range -> Typars -> Expr -> Expr /// Build an iterated (curried) lambda expression -val mkLambdas : range -> Typars -> Val list -> Expr * TType -> Expr +val mkLambdas: range -> Typars -> Val list -> Expr * TType -> Expr /// Build an iterated (tupled+curried) lambda expression -val mkMultiLambdasCore : range -> Val list list -> Expr * TType -> Expr * TType +val mkMultiLambdasCore: range -> Val list list -> Expr * TType -> Expr * TType /// Build an iterated generic (type abstraction + tupled+curried) lambda expression -val mkMultiLambdas : range -> Typars -> Val list list -> Expr * TType -> Expr +val mkMultiLambdas: range -> Typars -> Val list list -> Expr * TType -> Expr /// Build a lambda expression that corresponds to the implementation of a member -val mkMemberLambdas : range -> Typars -> Val option -> Val option -> Val list list -> Expr * TType -> Expr +val mkMemberLambdas: range -> Typars -> Val option -> Val option -> Val list list -> Expr * TType -> Expr /// Build a 'while' loop expression -val mkWhile : TcGlobals -> DebugPointAtWhile * SpecialWhileLoopMarker * Expr * Expr * range -> Expr +val mkWhile: TcGlobals -> DebugPointAtWhile * SpecialWhileLoopMarker * Expr * Expr * range -> Expr /// Build a 'for' loop expression -val mkFor : TcGlobals -> DebugPointAtFor * Val * Expr * ForLoopStyle * Expr * Expr * range -> Expr +val mkFor: TcGlobals -> DebugPointAtFor * Val * Expr * ForLoopStyle * Expr * Expr * range -> Expr /// Build a 'try/with' expression -val mkTryWith : TcGlobals -> Expr * (* filter val *) Val * (* filter expr *) Expr * (* handler val *) Val * (* handler expr *) Expr * range * TType * DebugPointAtTry * DebugPointAtWith -> Expr +val mkTryWith: TcGlobals -> Expr * (* filter val *) Val * (* filter expr *) Expr * (* handler val *) Val * (* handler expr *) Expr * range * TType * DebugPointAtTry * DebugPointAtWith -> Expr /// Build a 'try/finally' expression val mkTryFinally: TcGlobals -> Expr * Expr * range * TType * DebugPointAtTry * DebugPointAtFinally -> Expr /// Build a user-level value binding -val mkBind : DebugPointForBinding -> Val -> Expr -> Binding +val mkBind: DebugPointAtBinding -> Val -> Expr -> Binding /// Build a user-level let-binding -val mkLetBind : range -> Binding -> Expr -> Expr +val mkLetBind: range -> Binding -> Expr -> Expr /// Build a user-level value sequence of let bindings -val mkLetsBind : range -> Binding list -> Expr -> Expr +val mkLetsBind: range -> Binding list -> Expr -> Expr /// Build a user-level value sequence of let bindings -val mkLetsFromBindings : range -> Bindings -> Expr -> Expr +val mkLetsFromBindings: range -> Bindings -> Expr -> Expr /// Build a user-level let expression -val mkLet : DebugPointForBinding -> range -> Val -> Expr -> Expr -> Expr +val mkLet: DebugPointAtBinding -> range -> Val -> Expr -> Expr -> Expr /// Make a binding that binds a function value to a lambda taking multiple arguments -val mkMultiLambdaBind : Val -> DebugPointForBinding -> range -> Typars -> Val list list -> Expr * TType -> Binding +val mkMultiLambdaBind: Val -> DebugPointAtBinding -> range -> Typars -> Val list list -> Expr * TType -> Binding // Compiler generated bindings may involve a user variable. // Compiler generated bindings may give rise to a sequence point if they are part of // an SPAlways expression. Compiler generated bindings can arise from for example, inlining. -val mkCompGenBind : Val -> Expr -> Binding +val mkCompGenBind: Val -> Expr -> Binding /// Make a set of bindings that bind compiler generated values to corresponding expressions. /// Compiler-generated bindings do not give rise to a sequence point in debugging. -val mkCompGenBinds : Val list -> Exprs -> Bindings +val mkCompGenBinds: Val list -> Exprs -> Bindings /// Make a let-expression that locally binds a compiler-generated value to an expression. /// Compiler-generated bindings do not give rise to a sequence point in debugging. -val mkCompGenLet : range -> Val -> Expr -> Expr -> Expr +val mkCompGenLet: range -> Val -> Expr -> Expr -> Expr /// Make a let-expression that locally binds a compiler-generated value to an expression, where the expression /// is returned by the given continuation. Compiler-generated bindings do not give rise to a sequence point in debugging. @@ -204,18 +199,18 @@ val mkCompGenLetIn: range -> string -> TType -> Expr -> (Val * Expr -> Expr) -> /// Make a let-expression that locally binds a value to an expression in an "invisible" way. /// Invisible bindings are not given a sequence point and should not have side effects. -val mkInvisibleLet : range -> Val -> Expr -> Expr -> Expr +val mkInvisibleLet: range -> Val -> Expr -> Expr -> Expr /// Make a binding that binds a value to an expression in an "invisible" way. /// Invisible bindings are not given a sequence point and should not have side effects. -val mkInvisibleBind : Val -> Expr -> Binding +val mkInvisibleBind: Val -> Expr -> Binding /// Make a set of bindings that bind values to expressions in an "invisible" way. /// Invisible bindings are not given a sequence point and should not have side effects. -val mkInvisibleBinds : Vals -> Exprs -> Bindings +val mkInvisibleBinds: Vals -> Exprs -> Bindings /// Make a let-rec expression that locally binds values to expressions where self-reference back to the values is possible. -val mkLetRecBinds : range -> Bindings -> Expr -> Expr +val mkLetRecBinds: range -> Bindings -> Expr -> Expr /// TypeScheme (generalizedTypars, tauTy) /// @@ -225,143 +220,143 @@ type TypeScheme = TypeScheme of Typars * TType /// Make the right-hand side of a generalized binding, incorporating the generalized generic parameters from the type /// scheme into the right-hand side as type generalizations. -val mkGenericBindRhs : TcGlobals -> range -> Typars -> TypeScheme -> Expr -> Expr +val mkGenericBindRhs: TcGlobals -> range -> Typars -> TypeScheme -> Expr -> Expr /// Test if the type parameter is one of those being generalized by a type scheme. -val isBeingGeneralized : Typar -> TypeScheme -> bool +val isBeingGeneralized: Typar -> TypeScheme -> bool /// Make the expression corresponding to 'expr1 && expr2' -val mkLazyAnd : TcGlobals -> range -> Expr -> Expr -> Expr +val mkLazyAnd: TcGlobals -> range -> Expr -> Expr -> Expr /// Make the expression corresponding to 'expr1 || expr2' -val mkLazyOr : TcGlobals -> range -> Expr -> Expr -> Expr +val mkLazyOr: TcGlobals -> range -> Expr -> Expr -> Expr /// Make a byref type -val mkByrefTy : TcGlobals -> TType -> TType +val mkByrefTy: TcGlobals -> TType -> TType /// Make a byref type with a in/out kind inference parameter -val mkByrefTyWithInference : TcGlobals -> TType -> TType -> TType +val mkByrefTyWithInference: TcGlobals -> TType -> TType -> TType /// Make a in-byref type with a in kind parameter -val mkInByrefTy : TcGlobals -> TType -> TType +val mkInByrefTy: TcGlobals -> TType -> TType /// Make an out-byref type with an out kind parameter -val mkOutByrefTy : TcGlobals -> TType -> TType +val mkOutByrefTy: TcGlobals -> TType -> TType /// Make an expression that constructs a union case, e.g. 'Some(expr)' -val mkUnionCaseExpr : UnionCaseRef * TypeInst * Exprs * range -> Expr +val mkUnionCaseExpr: UnionCaseRef * TypeInst * Exprs * range -> Expr /// Make an expression that constructs an exception value -val mkExnExpr : TyconRef * Exprs * range -> Expr +val mkExnExpr: TyconRef * Exprs * range -> Expr /// Make an expression that is IL assembly code -val mkAsmExpr : ILInstr list * TypeInst * Exprs * TTypes * range -> Expr +val mkAsmExpr: ILInstr list * TypeInst * Exprs * TTypes * range -> Expr /// Make an expression that coerces one expression to another type -val mkCoerceExpr : Expr * TType * range * TType -> Expr +val mkCoerceExpr: Expr * TType * range * TType -> Expr /// Make an expression that re-raises an exception -val mkReraise : range -> TType -> Expr +val mkReraise: range -> TType -> Expr /// Make an expression that re-raises an exception via a library call -val mkReraiseLibCall : TcGlobals -> TType -> range -> Expr +val mkReraiseLibCall: TcGlobals -> TType -> range -> Expr /// Make an expression that gets an item from a tuple -val mkTupleFieldGet : TcGlobals -> TupInfo * Expr * TypeInst * int * range -> Expr +val mkTupleFieldGet: TcGlobals -> TupInfo * Expr * TypeInst * int * range -> Expr /// Make an expression that gets an item from an anonymous record -val mkAnonRecdFieldGet : TcGlobals -> AnonRecdTypeInfo * Expr * TypeInst * int * range -> Expr +val mkAnonRecdFieldGet: TcGlobals -> AnonRecdTypeInfo * Expr * TypeInst * int * range -> Expr /// Make an expression that gets an item from an anonymous record (via the address of the value if it is a struct) -val mkAnonRecdFieldGetViaExprAddr : AnonRecdTypeInfo * Expr * TypeInst * int * range -> Expr +val mkAnonRecdFieldGetViaExprAddr: AnonRecdTypeInfo * Expr * TypeInst * int * range -> Expr /// Make an expression that gets an instance field from a record or class (via the address of the value if it is a struct) -val mkRecdFieldGetViaExprAddr : Expr * RecdFieldRef * TypeInst * range -> Expr +val mkRecdFieldGetViaExprAddr: Expr * RecdFieldRef * TypeInst * range -> Expr /// Make an expression that gets the address of an instance field from a record or class (via the address of the value if it is a struct) -val mkRecdFieldGetAddrViaExprAddr : readonly: bool * Expr * RecdFieldRef * TypeInst * range -> Expr +val mkRecdFieldGetAddrViaExprAddr: readonly: bool * Expr * RecdFieldRef * TypeInst * range -> Expr /// Make an expression that gets a static field from a record or class -val mkStaticRecdFieldGet : RecdFieldRef * TypeInst * range -> Expr +val mkStaticRecdFieldGet: RecdFieldRef * TypeInst * range -> Expr /// Make an expression that sets a static field in a record or class -val mkStaticRecdFieldSet : RecdFieldRef * TypeInst * Expr * range -> Expr +val mkStaticRecdFieldSet: RecdFieldRef * TypeInst * Expr * range -> Expr /// Make an expression that gets the address of a static field in a record or class -val mkStaticRecdFieldGetAddr : readonly: bool * RecdFieldRef * TypeInst * range -> Expr +val mkStaticRecdFieldGetAddr: readonly: bool * RecdFieldRef * TypeInst * range -> Expr /// Make an expression that sets an instance the field of a record or class (via the address of the value if it is a struct) -val mkRecdFieldSetViaExprAddr : Expr * RecdFieldRef * TypeInst * Expr * range -> Expr +val mkRecdFieldSetViaExprAddr: Expr * RecdFieldRef * TypeInst * Expr * range -> Expr /// Make an expression that gets the tag of a union value (via the address of the value if it is a struct) -val mkUnionCaseTagGetViaExprAddr : Expr * TyconRef * TypeInst * range -> Expr +val mkUnionCaseTagGetViaExprAddr: Expr * TyconRef * TypeInst * range -> Expr /// Make a 'TOp.UnionCaseProof' expression, which proves a union value is over a particular case (used only for ref-unions, not struct-unions) -val mkUnionCaseProof : Expr * UnionCaseRef * TypeInst * range -> Expr +val mkUnionCaseProof: Expr * UnionCaseRef * TypeInst * range -> Expr /// Build a 'TOp.UnionCaseFieldGet' expression for something we've already determined to be a particular union case. For ref-unions, /// the input expression has 'TType_ucase', which is an F# compiler internal "type" corresponding to the union case. For struct-unions, /// the input should be the address of the expression. -val mkUnionCaseFieldGetProvenViaExprAddr : Expr * UnionCaseRef * TypeInst * int * range -> Expr +val mkUnionCaseFieldGetProvenViaExprAddr: Expr * UnionCaseRef * TypeInst * int * range -> Expr /// Build a 'TOp.UnionCaseFieldGetAddr' expression for a field of a union when we've already determined the value to be a particular union case. For ref-unions, /// the input expression has 'TType_ucase', which is an F# compiler internal "type" corresponding to the union case. For struct-unions, /// the input should be the address of the expression. -val mkUnionCaseFieldGetAddrProvenViaExprAddr : readonly: bool * Expr * UnionCaseRef * TypeInst * int * range -> Expr +val mkUnionCaseFieldGetAddrProvenViaExprAddr: readonly: bool * Expr * UnionCaseRef * TypeInst * int * range -> Expr /// Build a 'TOp.UnionCaseFieldGetAddr' expression for a field of a union when we've already determined the value to be a particular union case. For ref-unions, /// the input expression has 'TType_ucase', which is an F# compiler internal "type" corresponding to the union case. For struct-unions, /// the input should be the address of the expression. -val mkUnionCaseFieldGetUnprovenViaExprAddr : Expr * UnionCaseRef * TypeInst * int * range -> Expr +val mkUnionCaseFieldGetUnprovenViaExprAddr: Expr * UnionCaseRef * TypeInst * int * range -> Expr /// Build a 'TOp.UnionCaseFieldSet' expression. For ref-unions, the input expression has 'TType_ucase', which is /// an F# compiler internal "type" corresponding to the union case. For struct-unions, /// the input should be the address of the expression. -val mkUnionCaseFieldSet : Expr * UnionCaseRef * TypeInst * int * Expr * range -> Expr +val mkUnionCaseFieldSet: Expr * UnionCaseRef * TypeInst * int * Expr * range -> Expr /// Like mkUnionCaseFieldGetUnprovenViaExprAddr, but for struct-unions, the input should be a copy of the expression. -val mkUnionCaseFieldGetUnproven : TcGlobals -> Expr * UnionCaseRef * TypeInst * int * range -> Expr +val mkUnionCaseFieldGetUnproven: TcGlobals -> Expr * UnionCaseRef * TypeInst * int * range -> Expr /// Make an expression that gets an instance field from an F# exception value -val mkExnCaseFieldGet : Expr * TyconRef * int * range -> Expr +val mkExnCaseFieldGet: Expr * TyconRef * int * range -> Expr /// Make an expression that sets an instance field in an F# exception value -val mkExnCaseFieldSet : Expr * TyconRef * int * Expr * range -> Expr +val mkExnCaseFieldSet: Expr * TyconRef * int * Expr * range -> Expr /// Make an expression that gets the address of an element in an array -val mkArrayElemAddress : TcGlobals -> readonly: bool * ILReadonly * bool * ILArrayShape * TType * Expr list * range -> Expr +val mkArrayElemAddress: TcGlobals -> readonly: bool * ILReadonly * bool * ILArrayShape * TType * Expr list * range -> Expr /// The largest tuple before we start encoding, i.e. 7 -val maxTuple : int +val maxTuple: int /// The number of fields in the largest tuple before we start encoding, i.e. 7 -val goodTupleFields : int +val goodTupleFields: int /// Check if a TyconRef is for a .NET tuple type. Currently this includes Tuple`1 even though /// that' not really part of the target set of TyconRef used to represent F# tuples. -val isCompiledTupleTyconRef : TcGlobals -> TyconRef -> bool +val isCompiledTupleTyconRef: TcGlobals -> TyconRef -> bool /// Get a TyconRef for a .NET tuple type -val mkCompiledTupleTyconRef : TcGlobals -> bool -> int -> TyconRef +val mkCompiledTupleTyconRef: TcGlobals -> bool -> int -> TyconRef /// Convert from F# tuple types to .NET tuple types. -val mkCompiledTupleTy : TcGlobals -> bool -> TTypes -> TType +val mkCompiledTupleTy: TcGlobals -> bool -> TTypes -> TType /// Convert from F# tuple creation expression to .NET tuple creation expressions -val mkCompiledTuple : TcGlobals -> bool -> TTypes * Exprs * range -> TyconRef * TTypes * Exprs * range +val mkCompiledTuple: TcGlobals -> bool -> TTypes * Exprs * range -> TyconRef * TTypes * Exprs * range /// Make a TAST expression representing getting an item fromm a tuple -val mkGetTupleItemN : TcGlobals -> range -> int -> ILType -> bool -> Expr -> TType -> Expr +val mkGetTupleItemN: TcGlobals -> range -> int -> ILType -> bool -> Expr -> TType -> Expr /// Evaluate the TupInfo to work out if it is a struct or a ref. Currently this is very simple /// but TupInfo may later be used carry variables that infer structness. -val evalTupInfoIsStruct : TupInfo -> bool +val evalTupInfoIsStruct: TupInfo -> bool /// Evaluate the AnonRecdTypeInfo to work out if it is a struct or a ref. -val evalAnonInfoIsStruct : AnonRecdTypeInfo -> bool +val evalAnonInfoIsStruct: AnonRecdTypeInfo -> bool /// If it is a tuple type, ensure it's outermost type is a .NET tuple type, otherwise leave unchanged -val convertToTypeWithMetadataIfPossible : TcGlobals -> TType -> TType +val convertToTypeWithMetadataIfPossible: TcGlobals -> TType -> TType /// An exception representing a warning for a defensive copy of an immutable struct exception DefensiveCopyWarning of string * range @@ -372,126 +367,126 @@ type Mutates = AddressOfOp | DefinitelyMutates | PossiblyMutates | NeverMutates val mkDerefAddrExpr: mAddrGet: range -> expr: Expr -> mExpr: range -> exprTy: TType -> Expr /// Helper to take the address of an expression -val mkExprAddrOfExprAux : TcGlobals -> bool -> bool -> Mutates -> Expr -> ValRef option -> range -> (Val * Expr) option * Expr * bool * bool +val mkExprAddrOfExprAux: TcGlobals -> bool -> bool -> Mutates -> Expr -> ValRef option -> range -> (Val * Expr) option * Expr * bool * bool /// Take the address of an expression, or force it into a mutable local. Any allocated /// mutable local may need to be kept alive over a larger expression, hence we return /// a wrapping function that wraps "let mutable loc = Expr in ..." around a larger /// expression. -val mkExprAddrOfExpr : TcGlobals -> bool -> bool -> Mutates -> Expr -> ValRef option -> range -> (Expr -> Expr) * Expr * bool * bool +val mkExprAddrOfExpr: TcGlobals -> bool -> bool -> Mutates -> Expr -> ValRef option -> range -> (Expr -> Expr) * Expr * bool * bool /// Maps Val to T, based on stamps [] type ValMap<'T> = - member Contents : StampMap<'T> + member Contents: StampMap<'T> - member Item : Val -> 'T with get + member Item: Val -> 'T with get - member TryFind : Val -> 'T option + member TryFind: Val -> 'T option - member ContainsVal : Val -> bool + member ContainsVal: Val -> bool - member Add : Val -> 'T -> ValMap<'T> + member Add: Val -> 'T -> ValMap<'T> - member Remove : Val -> ValMap<'T> + member Remove: Val -> ValMap<'T> - member IsEmpty : bool + member IsEmpty: bool - static member Empty : ValMap<'T> + static member Empty: ValMap<'T> - static member OfList : (Val * 'T) list -> ValMap<'T> + static member OfList: (Val * 'T) list -> ValMap<'T> /// Mutable data structure mapping Val's to T based on stamp keys [] type ValHash<'T> = - member Values : seq<'T> + member Values: seq<'T> - member TryFind : Val -> 'T option + member TryFind: Val -> 'T option - member Add : Val * 'T -> unit + member Add: Val * 'T -> unit - static member Create : unit -> ValHash<'T> + static member Create: unit -> ValHash<'T> /// Maps Val's to list of T based on stamp keys [] type ValMultiMap<'T> = - member ContainsKey : Val -> bool + member ContainsKey: Val -> bool - member Find : Val -> 'T list + member Find: Val -> 'T list - member Add : Val * 'T -> ValMultiMap<'T> + member Add: Val * 'T -> ValMultiMap<'T> - member Remove : Val -> ValMultiMap<'T> + member Remove: Val -> ValMultiMap<'T> - member Contents : StampMap<'T list> + member Contents: StampMap<'T list> - static member Empty : ValMultiMap<'T> + static member Empty: ValMultiMap<'T> /// Maps type parameters to entries based on stamp keys [] type TyparMap<'T> = /// Get the entry for the given type parameter - member Item : Typar -> 'T with get + member Item: Typar -> 'T with get /// Determine is the map contains an entry for the given type parameter - member ContainsKey : Typar -> bool + member ContainsKey: Typar -> bool /// Try to find the entry for the given type parameter - member TryFind : Typar -> 'T option + member TryFind: Typar -> 'T option /// Make a new map, containing a new entry for the given type parameter - member Add : Typar * 'T -> TyparMap<'T> + member Add: Typar * 'T -> TyparMap<'T> /// The empty map - static member Empty : TyparMap<'T> + static member Empty: TyparMap<'T> /// Maps TyconRef to T based on stamp keys [] type TyconRefMap<'T> = /// Get the entry for the given type definition - member Item : TyconRef -> 'T with get + member Item: TyconRef -> 'T with get /// Try to find the entry for the given type definition - member TryFind : TyconRef -> 'T option + member TryFind: TyconRef -> 'T option /// Determine is the map contains an entry for the given type definition - member ContainsKey : TyconRef -> bool + member ContainsKey: TyconRef -> bool /// Make a new map, containing a new entry for the given type definition - member Add : TyconRef -> 'T -> TyconRefMap<'T> + member Add: TyconRef -> 'T -> TyconRefMap<'T> /// Remove the entry for the given type definition, if any - member Remove : TyconRef -> TyconRefMap<'T> + member Remove: TyconRef -> TyconRefMap<'T> /// Determine if the map is empty - member IsEmpty : bool + member IsEmpty: bool /// The empty map - static member Empty : TyconRefMap<'T> + static member Empty: TyconRefMap<'T> /// Make a new map, containing entries for the given type definitions - static member OfList : (TyconRef * 'T) list -> TyconRefMap<'T> + static member OfList: (TyconRef * 'T) list -> TyconRefMap<'T> /// Maps TyconRef to list of T based on stamp keys [] type TyconRefMultiMap<'T> = /// Fetch the entries for the given type definition - member Find : TyconRef -> 'T list + member Find: TyconRef -> 'T list /// Make a new map, containing a new entry for the given type definition - member Add : TyconRef * 'T -> TyconRefMultiMap<'T> + member Add: TyconRef * 'T -> TyconRefMultiMap<'T> /// The empty map - static member Empty : TyconRefMultiMap<'T> + static member Empty: TyconRefMultiMap<'T> /// Make a new map, containing a entries for the given type definitions - static member OfList : (TyconRef * 'T) list -> TyconRefMultiMap<'T> + static member OfList: (TyconRef * 'T) list -> TyconRefMultiMap<'T> /// An ordering for value definitions, based on stamp val valOrder: IComparer @@ -506,10 +501,10 @@ val recdFieldRefOrder: IComparer val typarOrder: IComparer /// Equality for type definition references -val tyconRefEq : TcGlobals -> TyconRef -> TyconRef -> bool +val tyconRefEq: TcGlobals -> TyconRef -> TyconRef -> bool /// Equality for value references -val valRefEq : TcGlobals -> ValRef -> ValRef -> bool +val valRefEq: TcGlobals -> ValRef -> ValRef -> bool //------------------------------------------------------------------------- // Operations on types: substitution @@ -527,186 +522,186 @@ type ValRemap = ValMap /// Represents a combination of substitutions/instantiations where things replace other things during remapping [] type Remap = - { tpinst : TyparInst + { tpinst: TyparInst valRemap: ValRemap - tyconRefRemap : TyconRefRemap + tyconRefRemap: TyconRefRemap removeTraitSolutions: bool } - static member Empty : Remap + static member Empty: Remap -val addTyconRefRemap : TyconRef -> TyconRef -> Remap -> Remap +val addTyconRefRemap: TyconRef -> TyconRef -> Remap -> Remap -val addValRemap : Val -> Val -> Remap -> Remap +val addValRemap: Val -> Val -> Remap -> Remap -val mkTyparInst : Typars -> TTypes -> TyparInst +val mkTyparInst: Typars -> TTypes -> TyparInst -val mkTyconRefInst : TyconRef -> TypeInst -> TyparInst +val mkTyconRefInst: TyconRef -> TypeInst -> TyparInst -val emptyTyparInst : TyparInst +val emptyTyparInst: TyparInst -val instType : TyparInst -> TType -> TType +val instType: TyparInst -> TType -> TType -val instTypes : TyparInst -> TypeInst -> TypeInst +val instTypes: TyparInst -> TypeInst -> TypeInst -val instTyparConstraints : TyparInst -> TyparConstraint list -> TyparConstraint list +val instTyparConstraints: TyparInst -> TyparConstraint list -> TyparConstraint list -val instTrait : TyparInst -> TraitConstraintInfo -> TraitConstraintInfo +val instTrait: TyparInst -> TraitConstraintInfo -> TraitConstraintInfo /// From typars to types -val generalizeTypars : Typars -> TypeInst +val generalizeTypars: Typars -> TypeInst -val generalizeTyconRef : TyconRef -> TTypes * TType +val generalizeTyconRef: TyconRef -> TTypes * TType -val generalizedTyconRef : TyconRef -> TType +val generalizedTyconRef: TyconRef -> TType -val mkTyparToTyparRenaming : Typars -> Typars -> TyparInst * TTypes +val mkTyparToTyparRenaming: Typars -> Typars -> TyparInst * TTypes //------------------------------------------------------------------------- // See through typar equations from inference and/or type abbreviation equations. //------------------------------------------------------------------------- -val reduceTyconRefAbbrev : TyconRef -> TypeInst -> TType +val reduceTyconRefAbbrev: TyconRef -> TypeInst -> TType -val reduceTyconRefMeasureableOrProvided : TcGlobals -> TyconRef -> TypeInst -> TType +val reduceTyconRefMeasureableOrProvided: TcGlobals -> TyconRef -> TypeInst -> TType -val reduceTyconRefAbbrevMeasureable : TyconRef -> Measure +val reduceTyconRefAbbrevMeasureable: TyconRef -> Measure /// set bool to 'true' to allow shortcutting of type parameter equation chains during stripping -val stripTyEqnsA : TcGlobals -> bool -> TType -> TType +val stripTyEqnsA: TcGlobals -> bool -> TType -> TType -val stripTyEqns : TcGlobals -> TType -> TType +val stripTyEqns: TcGlobals -> TType -> TType -val stripTyEqnsAndMeasureEqns : TcGlobals -> TType -> TType +val stripTyEqnsAndMeasureEqns: TcGlobals -> TType -> TType -val tryNormalizeMeasureInType : TcGlobals -> TType -> TType +val tryNormalizeMeasureInType: TcGlobals -> TType -> TType /// See through F# exception abbreviations -val stripExnEqns : TyconRef -> Tycon +val stripExnEqns: TyconRef -> Tycon -val recdFieldsOfExnDefRef : TyconRef -> RecdField list +val recdFieldsOfExnDefRef: TyconRef -> RecdField list -val recdFieldTysOfExnDefRef : TyconRef -> TType list +val recdFieldTysOfExnDefRef: TyconRef -> TType list //------------------------------------------------------------------------- // Analyze types. These all look through type abbreviations and // inference equations, i.e. are "stripped" //------------------------------------------------------------------------- -val destForallTy : TcGlobals -> TType -> Typars * TType +val destForallTy: TcGlobals -> TType -> Typars * TType -val destFunTy : TcGlobals -> TType -> TType * TType +val destFunTy: TcGlobals -> TType -> TType * TType -val destAnyTupleTy : TcGlobals -> TType -> TupInfo * TTypes +val destAnyTupleTy: TcGlobals -> TType -> TupInfo * TTypes -val destRefTupleTy : TcGlobals -> TType -> TTypes +val destRefTupleTy: TcGlobals -> TType -> TTypes -val destStructTupleTy : TcGlobals -> TType -> TTypes +val destStructTupleTy: TcGlobals -> TType -> TTypes -val destTyparTy : TcGlobals -> TType -> Typar +val destTyparTy: TcGlobals -> TType -> Typar -val destAnyParTy : TcGlobals -> TType -> Typar +val destAnyParTy: TcGlobals -> TType -> Typar -val destMeasureTy : TcGlobals -> TType -> Measure +val destMeasureTy: TcGlobals -> TType -> Measure -val tryDestForallTy : TcGlobals -> TType -> Typars * TType +val tryDestForallTy: TcGlobals -> TType -> Typars * TType -val isFunTy : TcGlobals -> TType -> bool +val isFunTy: TcGlobals -> TType -> bool -val isForallTy : TcGlobals -> TType -> bool +val isForallTy: TcGlobals -> TType -> bool -val isAnyTupleTy : TcGlobals -> TType -> bool +val isAnyTupleTy: TcGlobals -> TType -> bool -val isRefTupleTy : TcGlobals -> TType -> bool +val isRefTupleTy: TcGlobals -> TType -> bool -val isStructTupleTy : TcGlobals -> TType -> bool +val isStructTupleTy: TcGlobals -> TType -> bool -val isStructAnonRecdTy : TcGlobals -> TType -> bool +val isStructAnonRecdTy: TcGlobals -> TType -> bool -val isAnonRecdTy : TcGlobals -> TType -> bool +val isAnonRecdTy: TcGlobals -> TType -> bool -val isUnionTy : TcGlobals -> TType -> bool +val isUnionTy: TcGlobals -> TType -> bool -val isReprHiddenTy : TcGlobals -> TType -> bool +val isReprHiddenTy: TcGlobals -> TType -> bool -val isFSharpObjModelTy : TcGlobals -> TType -> bool +val isFSharpObjModelTy: TcGlobals -> TType -> bool -val isRecdTy : TcGlobals -> TType -> bool +val isRecdTy: TcGlobals -> TType -> bool -val isFSharpStructOrEnumTy : TcGlobals -> TType -> bool +val isFSharpStructOrEnumTy: TcGlobals -> TType -> bool -val isFSharpEnumTy : TcGlobals -> TType -> bool +val isFSharpEnumTy: TcGlobals -> TType -> bool -val isTyparTy : TcGlobals -> TType -> bool +val isTyparTy: TcGlobals -> TType -> bool -val isAnyParTy : TcGlobals -> TType -> bool +val isAnyParTy: TcGlobals -> TType -> bool -val tryAnyParTy : TcGlobals -> TType -> ValueOption +val tryAnyParTy: TcGlobals -> TType -> ValueOption -val tryAnyParTyOption : TcGlobals -> TType -> Typar option +val tryAnyParTyOption: TcGlobals -> TType -> Typar option -val isMeasureTy : TcGlobals -> TType -> bool +val isMeasureTy: TcGlobals -> TType -> bool -val mkAppTy : TyconRef -> TypeInst -> TType +val mkAppTy: TyconRef -> TypeInst -> TType -val mkProvenUnionCaseTy : UnionCaseRef -> TypeInst -> TType +val mkProvenUnionCaseTy: UnionCaseRef -> TypeInst -> TType -val isProvenUnionCaseTy : TType -> bool +val isProvenUnionCaseTy: TType -> bool -val isAppTy : TcGlobals -> TType -> bool +val isAppTy: TcGlobals -> TType -> bool -val tryAppTy : TcGlobals -> TType -> ValueOption +val tryAppTy: TcGlobals -> TType -> ValueOption -val destAppTy : TcGlobals -> TType -> TyconRef * TypeInst +val destAppTy: TcGlobals -> TType -> TyconRef * TypeInst -val tcrefOfAppTy : TcGlobals -> TType -> TyconRef +val tcrefOfAppTy: TcGlobals -> TType -> TyconRef -val tryTcrefOfAppTy : TcGlobals -> TType -> ValueOption +val tryTcrefOfAppTy: TcGlobals -> TType -> ValueOption -val tryDestTyparTy : TcGlobals -> TType -> ValueOption +val tryDestTyparTy: TcGlobals -> TType -> ValueOption -val tryDestFunTy : TcGlobals -> TType -> ValueOption<(TType * TType)> +val tryDestFunTy: TcGlobals -> TType -> ValueOption<(TType * TType)> -val tryDestAnonRecdTy : TcGlobals -> TType -> ValueOption +val tryDestAnonRecdTy: TcGlobals -> TType -> ValueOption -val argsOfAppTy : TcGlobals -> TType -> TypeInst +val argsOfAppTy: TcGlobals -> TType -> TypeInst -val mkInstForAppTy : TcGlobals -> TType -> TyparInst +val mkInstForAppTy: TcGlobals -> TType -> TyparInst /// Try to get a TyconRef for a type without erasing type abbreviations -val tryNiceEntityRefOfTy : TType -> ValueOption +val tryNiceEntityRefOfTy: TType -> ValueOption -val tryNiceEntityRefOfTyOption : TType -> TyconRef option +val tryNiceEntityRefOfTyOption: TType -> TyconRef option -val domainOfFunTy : TcGlobals -> TType -> TType +val domainOfFunTy: TcGlobals -> TType -> TType -val rangeOfFunTy : TcGlobals -> TType -> TType +val rangeOfFunTy: TcGlobals -> TType -> TType -val stripFunTy : TcGlobals -> TType -> TType list * TType +val stripFunTy: TcGlobals -> TType -> TType list * TType -val stripFunTyN : TcGlobals -> int -> TType -> TType list * TType +val stripFunTyN: TcGlobals -> int -> TType -> TType list * TType -val applyForallTy : TcGlobals -> TType -> TypeInst -> TType +val applyForallTy: TcGlobals -> TType -> TypeInst -> TType -val tryDestAnyTupleTy : TcGlobals -> TType -> TupInfo * TType list +val tryDestAnyTupleTy: TcGlobals -> TType -> TupInfo * TType list -val tryDestRefTupleTy : TcGlobals -> TType -> TType list +val tryDestRefTupleTy: TcGlobals -> TType -> TType list //------------------------------------------------------------------------- // Compute actual types of union cases and fields given an instantiation // of the generic type parameters of the enclosing type. //------------------------------------------------------------------------- -val actualResultTyOfUnionCase : TypeInst -> UnionCaseRef -> TType +val actualResultTyOfUnionCase: TypeInst -> UnionCaseRef -> TType -val actualTysOfUnionCaseFields : TyparInst -> UnionCaseRef -> TType list +val actualTysOfUnionCaseFields: TyparInst -> UnionCaseRef -> TType list -val actualTysOfInstanceRecdFields : TyparInst -> TyconRef -> TType list +val actualTysOfInstanceRecdFields: TyparInst -> TyconRef -> TType list -val actualTyOfRecdField : TyparInst -> RecdField -> TType +val actualTyOfRecdField: TyparInst -> RecdField -> TType -val actualTyOfRecdFieldRef : RecdFieldRef -> TypeInst -> TType +val actualTyOfRecdFieldRef: RecdFieldRef -> TypeInst -> TType -val actualTyOfRecdFieldForTycon : Tycon -> TypeInst -> RecdField -> TType +val actualTyOfRecdFieldForTycon: Tycon -> TypeInst -> RecdField -> TType //------------------------------------------------------------------------- // Top types: guaranteed to be compiled to .NET methods, and must be able to @@ -720,96 +715,96 @@ type CurriedArgInfos = UncurriedArgInfos list type TraitWitnessInfos = TraitWitnessInfo list -val destTopForallTy : TcGlobals -> ValReprInfo -> TType -> Typars * TType +val destTopForallTy: TcGlobals -> ValReprInfo -> TType -> Typars * TType -val GetTopTauTypeInFSharpForm : TcGlobals -> ArgReprInfo list list -> TType -> range -> CurriedArgInfos * TType +val GetTopTauTypeInFSharpForm: TcGlobals -> ArgReprInfo list list -> TType -> range -> CurriedArgInfos * TType -val GetTopValTypeInFSharpForm : TcGlobals -> ValReprInfo -> TType -> range -> Typars * CurriedArgInfos * TType * ArgReprInfo +val GetTopValTypeInFSharpForm: TcGlobals -> ValReprInfo -> TType -> range -> Typars * CurriedArgInfos * TType * ArgReprInfo -val IsCompiledAsStaticProperty : TcGlobals -> Val -> bool +val IsCompiledAsStaticProperty: TcGlobals -> Val -> bool -val IsCompiledAsStaticPropertyWithField : TcGlobals -> Val -> bool +val IsCompiledAsStaticPropertyWithField: TcGlobals -> Val -> bool -val GetTopValTypeInCompiledForm : TcGlobals -> ValReprInfo -> int -> TType -> range -> Typars * TraitWitnessInfos * CurriedArgInfos * TType option * ArgReprInfo +val GetTopValTypeInCompiledForm: TcGlobals -> ValReprInfo -> int -> TType -> range -> Typars * TraitWitnessInfos * CurriedArgInfos * TType option * ArgReprInfo -val GetFSharpViewOfReturnType : TcGlobals -> TType option -> TType +val GetFSharpViewOfReturnType: TcGlobals -> TType option -> TType -val NormalizeDeclaredTyparsForEquiRecursiveInference : TcGlobals -> Typars -> Typars +val NormalizeDeclaredTyparsForEquiRecursiveInference: TcGlobals -> Typars -> Typars //------------------------------------------------------------------------- // Compute the return type after an application //------------------------------------------------------------------------- -val applyTys : TcGlobals -> TType -> TType list * 'T list -> TType +val applyTys: TcGlobals -> TType -> TType list * 'T list -> TType //------------------------------------------------------------------------- // Compute free variables in types //------------------------------------------------------------------------- -val emptyFreeTypars : FreeTypars +val emptyFreeTypars: FreeTypars -val unionFreeTypars : FreeTypars -> FreeTypars -> FreeTypars +val unionFreeTypars: FreeTypars -> FreeTypars -> FreeTypars -val emptyFreeTycons : FreeTycons +val emptyFreeTycons: FreeTycons -val unionFreeTycons : FreeTycons -> FreeTycons -> FreeTycons +val unionFreeTycons: FreeTycons -> FreeTycons -> FreeTycons -val emptyFreeTyvars : FreeTyvars +val emptyFreeTyvars: FreeTyvars -val isEmptyFreeTyvars : FreeTyvars -> bool +val isEmptyFreeTyvars: FreeTyvars -> bool -val unionFreeTyvars : FreeTyvars -> FreeTyvars -> FreeTyvars +val unionFreeTyvars: FreeTyvars -> FreeTyvars -> FreeTyvars -val emptyFreeLocals : FreeLocals +val emptyFreeLocals: FreeLocals -val unionFreeLocals : FreeLocals -> FreeLocals -> FreeLocals +val unionFreeLocals: FreeLocals -> FreeLocals -> FreeLocals type FreeVarOptions -val CollectLocalsNoCaching : FreeVarOptions +val CollectLocalsNoCaching: FreeVarOptions -val CollectTyparsNoCaching : FreeVarOptions +val CollectTyparsNoCaching: FreeVarOptions -val CollectTyparsAndLocalsNoCaching : FreeVarOptions +val CollectTyparsAndLocalsNoCaching: FreeVarOptions -val CollectTyparsAndLocals : FreeVarOptions +val CollectTyparsAndLocals: FreeVarOptions -val CollectLocals : FreeVarOptions +val CollectLocals: FreeVarOptions -val CollectTypars : FreeVarOptions +val CollectTypars: FreeVarOptions -val CollectAllNoCaching : FreeVarOptions +val CollectAllNoCaching: FreeVarOptions -val CollectAll : FreeVarOptions +val CollectAll: FreeVarOptions -val accFreeInTypes : FreeVarOptions -> TType list -> FreeTyvars -> FreeTyvars +val accFreeInTypes: FreeVarOptions -> TType list -> FreeTyvars -> FreeTyvars -val accFreeInType : FreeVarOptions -> TType -> FreeTyvars -> FreeTyvars +val accFreeInType: FreeVarOptions -> TType -> FreeTyvars -> FreeTyvars -val accFreeInTypars : FreeVarOptions -> Typars -> FreeTyvars -> FreeTyvars +val accFreeInTypars: FreeVarOptions -> Typars -> FreeTyvars -> FreeTyvars -val freeInType : FreeVarOptions -> TType -> FreeTyvars +val freeInType: FreeVarOptions -> TType -> FreeTyvars -val freeInTypes : FreeVarOptions -> TType list -> FreeTyvars +val freeInTypes: FreeVarOptions -> TType list -> FreeTyvars -val freeInVal : FreeVarOptions -> Val -> FreeTyvars +val freeInVal: FreeVarOptions -> Val -> FreeTyvars // This one puts free variables in canonical left-to-right order. -val freeInTypeLeftToRight : TcGlobals -> bool -> TType -> Typars +val freeInTypeLeftToRight: TcGlobals -> bool -> TType -> Typars -val freeInTypesLeftToRight : TcGlobals -> bool -> TType list -> Typars +val freeInTypesLeftToRight: TcGlobals -> bool -> TType list -> Typars -val freeInTypesLeftToRightSkippingConstraints : TcGlobals -> TType list -> Typars +val freeInTypesLeftToRightSkippingConstraints: TcGlobals -> TType list -> Typars val freeInModuleTy: ModuleOrNamespaceType -> FreeTyvars -val isDimensionless : TcGlobals -> TType -> bool +val isDimensionless: TcGlobals -> TType -> bool //--------------------------------------------------------------------------- // TType modifications and comparisons //--------------------------------------------------------------------------- -val stripMeasuresFromTType : TcGlobals -> TType -> TType +val stripMeasuresFromTType: TcGlobals -> TType -> TType //------------------------------------------------------------------------- // Equivalence of types (up to substitution of type variables in the left-hand type) @@ -820,102 +815,102 @@ type TypeEquivEnv = { EquivTypars: TyparMap EquivTycons: TyconRefRemap } - static member Empty : TypeEquivEnv + static member Empty: TypeEquivEnv - member BindEquivTypars : Typars -> Typars -> TypeEquivEnv + member BindEquivTypars: Typars -> Typars -> TypeEquivEnv - static member FromTyparInst : TyparInst -> TypeEquivEnv + static member FromTyparInst: TyparInst -> TypeEquivEnv - static member FromEquivTypars : Typars -> Typars -> TypeEquivEnv + static member FromEquivTypars: Typars -> Typars -> TypeEquivEnv -val traitsAEquivAux : Erasure -> TcGlobals -> TypeEquivEnv -> TraitConstraintInfo -> TraitConstraintInfo -> bool +val traitsAEquivAux: Erasure -> TcGlobals -> TypeEquivEnv -> TraitConstraintInfo -> TraitConstraintInfo -> bool -val traitsAEquiv : TcGlobals -> TypeEquivEnv -> TraitConstraintInfo -> TraitConstraintInfo -> bool +val traitsAEquiv: TcGlobals -> TypeEquivEnv -> TraitConstraintInfo -> TraitConstraintInfo -> bool -val traitKeysAEquivAux : Erasure -> TcGlobals -> TypeEquivEnv -> TraitWitnessInfo -> TraitWitnessInfo -> bool +val traitKeysAEquivAux: Erasure -> TcGlobals -> TypeEquivEnv -> TraitWitnessInfo -> TraitWitnessInfo -> bool -val traitKeysAEquiv : TcGlobals -> TypeEquivEnv -> TraitWitnessInfo -> TraitWitnessInfo -> bool +val traitKeysAEquiv: TcGlobals -> TypeEquivEnv -> TraitWitnessInfo -> TraitWitnessInfo -> bool -val typarConstraintsAEquivAux : Erasure -> TcGlobals -> TypeEquivEnv -> TyparConstraint -> TyparConstraint -> bool +val typarConstraintsAEquivAux: Erasure -> TcGlobals -> TypeEquivEnv -> TyparConstraint -> TyparConstraint -> bool -val typarConstraintsAEquiv : TcGlobals -> TypeEquivEnv -> TyparConstraint -> TyparConstraint -> bool +val typarConstraintsAEquiv: TcGlobals -> TypeEquivEnv -> TyparConstraint -> TyparConstraint -> bool -val typarsAEquiv : TcGlobals -> TypeEquivEnv -> Typars -> Typars -> bool +val typarsAEquiv: TcGlobals -> TypeEquivEnv -> Typars -> Typars -> bool -val typeAEquivAux : Erasure -> TcGlobals -> TypeEquivEnv -> TType -> TType -> bool +val typeAEquivAux: Erasure -> TcGlobals -> TypeEquivEnv -> TType -> TType -> bool -val typeAEquiv : TcGlobals -> TypeEquivEnv -> TType -> TType -> bool +val typeAEquiv: TcGlobals -> TypeEquivEnv -> TType -> TType -> bool -val returnTypesAEquivAux : Erasure -> TcGlobals -> TypeEquivEnv -> TType option -> TType option -> bool +val returnTypesAEquivAux: Erasure -> TcGlobals -> TypeEquivEnv -> TType option -> TType option -> bool -val returnTypesAEquiv : TcGlobals -> TypeEquivEnv -> TType option -> TType option -> bool +val returnTypesAEquiv: TcGlobals -> TypeEquivEnv -> TType option -> TType option -> bool -val tcrefAEquiv : TcGlobals -> TypeEquivEnv -> TyconRef -> TyconRef -> bool +val tcrefAEquiv: TcGlobals -> TypeEquivEnv -> TyconRef -> TyconRef -> bool -val valLinkageAEquiv : TcGlobals -> TypeEquivEnv -> Val -> Val -> bool +val valLinkageAEquiv: TcGlobals -> TypeEquivEnv -> Val -> Val -> bool -val anonInfoEquiv : AnonRecdTypeInfo -> AnonRecdTypeInfo -> bool +val anonInfoEquiv: AnonRecdTypeInfo -> AnonRecdTypeInfo -> bool //------------------------------------------------------------------------- // Erasure of types wrt units-of-measure and type providers //------------------------------------------------------------------------- // Return true if this type is a nominal type that is an erased provided type -val isErasedType : TcGlobals -> TType -> bool +val isErasedType: TcGlobals -> TType -> bool // Return all components (units-of-measure, and types) of this type that would be erased -val getErasedTypes : TcGlobals -> TType -> TType list +val getErasedTypes: TcGlobals -> TType -> TType list //------------------------------------------------------------------------- // Unit operations //------------------------------------------------------------------------- -val MeasurePower : Measure -> int -> Measure +val MeasurePower: Measure -> int -> Measure -val ListMeasureVarOccsWithNonZeroExponents : Measure -> (Typar * Rational) list +val ListMeasureVarOccsWithNonZeroExponents: Measure -> (Typar * Rational) list -val ListMeasureConOccsWithNonZeroExponents : TcGlobals -> bool -> Measure -> (TyconRef * Rational) list +val ListMeasureConOccsWithNonZeroExponents: TcGlobals -> bool -> Measure -> (TyconRef * Rational) list -val ProdMeasures : Measure list -> Measure +val ProdMeasures: Measure list -> Measure -val MeasureVarExponent : Typar -> Measure -> Rational +val MeasureVarExponent: Typar -> Measure -> Rational -val MeasureExprConExponent : TcGlobals -> bool -> TyconRef -> Measure -> Rational +val MeasureExprConExponent: TcGlobals -> bool -> TyconRef -> Measure -> Rational -val normalizeMeasure : TcGlobals -> Measure -> Measure +val normalizeMeasure: TcGlobals -> Measure -> Measure //------------------------------------------------------------------------- // Members //------------------------------------------------------------------------- -val GetTypeOfMemberInFSharpForm : TcGlobals -> ValRef -> Typars * CurriedArgInfos * TType * ArgReprInfo +val GetTypeOfMemberInFSharpForm: TcGlobals -> ValRef -> Typars * CurriedArgInfos * TType * ArgReprInfo -val GetTypeOfMemberInMemberForm : TcGlobals -> ValRef -> Typars * TraitWitnessInfos * CurriedArgInfos * TType option * ArgReprInfo +val GetTypeOfMemberInMemberForm: TcGlobals -> ValRef -> Typars * TraitWitnessInfos * CurriedArgInfos * TType option * ArgReprInfo -val GetTypeOfIntrinsicMemberInCompiledForm : TcGlobals -> ValRef -> Typars * TraitWitnessInfos * CurriedArgInfos * TType option * ArgReprInfo +val GetTypeOfIntrinsicMemberInCompiledForm: TcGlobals -> ValRef -> Typars * TraitWitnessInfos * CurriedArgInfos * TType option * ArgReprInfo -val GetMemberTypeInMemberForm : TcGlobals -> MemberFlags -> ValReprInfo -> int -> TType -> range -> Typars * TraitWitnessInfos * CurriedArgInfos * TType option * ArgReprInfo +val GetMemberTypeInMemberForm: TcGlobals -> SynMemberFlags -> ValReprInfo -> int -> TType -> range -> Typars * TraitWitnessInfos * CurriedArgInfos * TType option * ArgReprInfo /// Returns (parentTypars,memberParentTypars,memberMethodTypars,memberToParentInst,tinst) -val PartitionValTyparsForApparentEnclosingType : TcGlobals -> Val -> (Typars * Typars * Typars * TyparInst * TType list) option +val PartitionValTyparsForApparentEnclosingType: TcGlobals -> Val -> (Typars * Typars * Typars * TyparInst * TType list) option /// Returns (parentTypars,memberParentTypars,memberMethodTypars,memberToParentInst,tinst) -val PartitionValTypars : TcGlobals -> Val -> (Typars * Typars * Typars * TyparInst * TType list) option +val PartitionValTypars: TcGlobals -> Val -> (Typars * Typars * Typars * TyparInst * TType list) option /// Returns (parentTypars,memberParentTypars,memberMethodTypars,memberToParentInst,tinst) -val PartitionValRefTypars : TcGlobals -> ValRef -> (Typars * Typars * Typars * TyparInst * TType list) option +val PartitionValRefTypars: TcGlobals -> ValRef -> (Typars * Typars * Typars * TyparInst * TType list) option /// Count the number of type parameters on the enclosing type val CountEnclosingTyparsOfActualParentOfVal: Val -> int -val ReturnTypeOfPropertyVal : TcGlobals -> Val -> TType +val ReturnTypeOfPropertyVal: TcGlobals -> Val -> TType -val ArgInfosOfPropertyVal : TcGlobals -> Val -> UncurriedArgInfos +val ArgInfosOfPropertyVal: TcGlobals -> Val -> UncurriedArgInfos val ArgInfosOfMember: TcGlobals -> ValRef -> CurriedArgInfos -val GetMemberCallInfo : TcGlobals -> ValRef * ValUseFlag -> int * bool * bool * bool * bool * bool * bool * bool +val GetMemberCallInfo: TcGlobals -> ValRef * ValUseFlag -> int * bool * bool * bool * bool * bool * bool * bool //------------------------------------------------------------------------- // Printing @@ -925,40 +920,40 @@ type TyparConstraintsWithTypars = (Typar * TyparConstraint) list module PrettyTypes = - val NeedsPrettyTyparName : Typar -> bool + val NeedsPrettyTyparName: Typar -> bool - val NewPrettyTypars : TyparInst -> Typars -> string list -> Typars * TyparInst + val NewPrettyTypars: TyparInst -> Typars -> string list -> Typars * TyparInst - val PrettyTyparNames : (Typar -> bool) -> string list -> Typars -> string list + val PrettyTyparNames: (Typar -> bool) -> string list -> Typars -> string list - val PrettifyType : TcGlobals -> TType -> TType * TyparConstraintsWithTypars + val PrettifyType: TcGlobals -> TType -> TType * TyparConstraintsWithTypars - val PrettifyInstAndTyparsAndType : TcGlobals -> TyparInst * Typars * TType -> (TyparInst * Typars * TType) * TyparConstraintsWithTypars + val PrettifyInstAndTyparsAndType: TcGlobals -> TyparInst * Typars * TType -> (TyparInst * Typars * TType) * TyparConstraintsWithTypars - val PrettifyTypePair : TcGlobals -> TType * TType -> (TType * TType) * TyparConstraintsWithTypars + val PrettifyTypePair: TcGlobals -> TType * TType -> (TType * TType) * TyparConstraintsWithTypars - val PrettifyTypes : TcGlobals -> TTypes -> TTypes * TyparConstraintsWithTypars + val PrettifyTypes: TcGlobals -> TTypes -> TTypes * TyparConstraintsWithTypars /// same as PrettifyTypes, but allows passing the types along with a discriminant value /// useful to prettify many types that need to be sorted out after prettifying operation /// took place. - val PrettifyDiscriminantAndTypePairs : TcGlobals -> ('Discriminant * TType) list -> ('Discriminant * TType) list * TyparConstraintsWithTypars + val PrettifyDiscriminantAndTypePairs: TcGlobals -> ('Discriminant * TType) list -> ('Discriminant * TType) list * TyparConstraintsWithTypars - val PrettifyInst : TcGlobals -> TyparInst -> TyparInst * TyparConstraintsWithTypars + val PrettifyInst: TcGlobals -> TyparInst -> TyparInst * TyparConstraintsWithTypars - val PrettifyInstAndType : TcGlobals -> TyparInst * TType -> (TyparInst * TType) * TyparConstraintsWithTypars + val PrettifyInstAndType: TcGlobals -> TyparInst * TType -> (TyparInst * TType) * TyparConstraintsWithTypars - val PrettifyInstAndTypes : TcGlobals -> TyparInst * TTypes -> (TyparInst * TTypes) * TyparConstraintsWithTypars + val PrettifyInstAndTypes: TcGlobals -> TyparInst * TTypes -> (TyparInst * TTypes) * TyparConstraintsWithTypars - val PrettifyInstAndSig : TcGlobals -> TyparInst * TTypes * TType -> (TyparInst * TTypes * TType) * TyparConstraintsWithTypars + val PrettifyInstAndSig: TcGlobals -> TyparInst * TTypes * TType -> (TyparInst * TTypes * TType) * TyparConstraintsWithTypars - val PrettifyCurriedTypes : TcGlobals -> TType list list -> TType list list * TyparConstraintsWithTypars + val PrettifyCurriedTypes: TcGlobals -> TType list list -> TType list list * TyparConstraintsWithTypars - val PrettifyCurriedSigTypes : TcGlobals -> TType list list * TType -> (TType list list * TType) * TyparConstraintsWithTypars + val PrettifyCurriedSigTypes: TcGlobals -> TType list list * TType -> (TType list list * TType) * TyparConstraintsWithTypars - val PrettifyInstAndUncurriedSig : TcGlobals -> TyparInst * UncurriedArgInfos * TType -> (TyparInst * UncurriedArgInfos * TType) * TyparConstraintsWithTypars + val PrettifyInstAndUncurriedSig: TcGlobals -> TyparInst * UncurriedArgInfos * TType -> (TyparInst * UncurriedArgInfos * TType) * TyparConstraintsWithTypars - val PrettifyInstAndCurriedSig : TcGlobals -> TyparInst * TTypes * CurriedArgInfos * TType -> (TyparInst * TTypes * CurriedArgInfos * TType) * TyparConstraintsWithTypars + val PrettifyInstAndCurriedSig: TcGlobals -> TyparInst * TTypes * CurriedArgInfos * TType -> (TyparInst * TTypes * CurriedArgInfos * TType) * TyparConstraintsWithTypars /// Describes how generic type parameters in a type will be formatted during printing type GenericParameterStyle = @@ -971,12 +966,12 @@ type GenericParameterStyle = [] type DisplayEnv = - { includeStaticParametersInTypeNames : bool + { includeStaticParametersInTypeNames: bool openTopPathsSorted: Lazy openTopPathsRaw: string list list shortTypeNames: bool suppressNestedTypes: bool - maxMembers : int option + maxMembers: int option showObsoleteMembers: bool showHiddenMembers: bool showTyparBinding: bool @@ -991,116 +986,122 @@ type DisplayEnv = showConstraintTyparAnnotations:bool abbreviateAdditionalConstraints: bool showTyparDefaultConstraints: bool + /// If set, signatures will be rendered with XML documentation comments for members if they exist + /// Defaults to false, expected use cases include things like signature file generation. + showDocumentation: bool shrinkOverloads: bool - printVerboseSignatures : bool + printVerboseSignatures: bool + escapeKeywordNames: bool g: TcGlobals contextAccessibility: Accessibility - generatedValueLayout: (Val -> layout option) + generatedValueLayout: (Val -> Layout option) genericParameterStyle: GenericParameterStyle } member SetOpenPaths: string list list -> DisplayEnv static member Empty: TcGlobals -> DisplayEnv - member AddAccessibility : Accessibility -> DisplayEnv + member AddAccessibility: Accessibility -> DisplayEnv + + member AddOpenPath: string list -> DisplayEnv - member AddOpenPath : string list -> DisplayEnv + member AddOpenModuleOrNamespace: ModuleOrNamespaceRef -> DisplayEnv - member AddOpenModuleOrNamespace : ModuleOrNamespaceRef -> DisplayEnv + member UseGenericParameterStyle: GenericParameterStyle -> DisplayEnv - member UseGenericParameterStyle : GenericParameterStyle -> DisplayEnv + static member InitialForSigFileGeneration: TcGlobals -> DisplayEnv -val tagEntityRefName: xref: EntityRef -> name: string -> StructuredFormat.TaggedText +val tagEntityRefName: xref: EntityRef -> name: string -> TaggedText /// Return the full text for an item as we want it displayed to the user as a fully qualified entity -val fullDisplayTextOfModRef : ModuleOrNamespaceRef -> string +val fullDisplayTextOfModRef: ModuleOrNamespaceRef -> string -val fullDisplayTextOfParentOfModRef : ModuleOrNamespaceRef -> ValueOption +val fullDisplayTextOfParentOfModRef: ModuleOrNamespaceRef -> ValueOption -val fullDisplayTextOfValRef : ValRef -> string +val fullDisplayTextOfValRef: ValRef -> string -val fullDisplayTextOfValRefAsLayout : ValRef -> StructuredFormat.Layout +val fullDisplayTextOfValRefAsLayout: ValRef -> Layout -val fullDisplayTextOfTyconRef : TyconRef -> string +val fullDisplayTextOfTyconRef: TyconRef -> string -val fullDisplayTextOfTyconRefAsLayout : TyconRef -> StructuredFormat.Layout +val fullDisplayTextOfTyconRefAsLayout: TyconRef -> Layout -val fullDisplayTextOfExnRef : TyconRef -> string +val fullDisplayTextOfExnRef: TyconRef -> string -val fullDisplayTextOfExnRefAsLayout : TyconRef -> StructuredFormat.Layout +val fullDisplayTextOfExnRefAsLayout: TyconRef -> Layout -val fullDisplayTextOfUnionCaseRef : UnionCaseRef -> string +val fullDisplayTextOfUnionCaseRef: UnionCaseRef -> string -val fullDisplayTextOfRecdFieldRef : RecdFieldRef -> string +val fullDisplayTextOfRecdFieldRef: RecdFieldRef -> string -val ticksAndArgCountTextOfTyconRef : TyconRef -> string +val ticksAndArgCountTextOfTyconRef: TyconRef -> string /// A unique qualified name for each type definition, used to qualify the names of interface implementation methods -val qualifiedMangledNameOfTyconRef : TyconRef -> string -> string +val qualifiedMangledNameOfTyconRef: TyconRef -> string -> string -val qualifiedInterfaceImplementationName : TcGlobals -> TType -> string -> string +val qualifiedInterfaceImplementationName: TcGlobals -> TType -> string -> string -val trimPathByDisplayEnv : DisplayEnv -> string list -> string +val trimPathByDisplayEnv: DisplayEnv -> string list -> string -val prefixOfStaticReq : TyparStaticReq -> string +val prefixOfStaticReq: TyparStaticReq -> string -val prefixOfRigidTypar : Typar -> string +val prefixOfRigidTypar: Typar -> string /// Utilities used in simplifying types for visual presentation module SimplifyTypes = type TypeSimplificationInfo = - { singletons : Typar Zset - inplaceConstraints : Zmap - postfixConstraints : TyparConstraintsWithTypars } + { singletons: Typar Zset + inplaceConstraints: Zmap + postfixConstraints: TyparConstraintsWithTypars } - val typeSimplificationInfo0 : TypeSimplificationInfo + val typeSimplificationInfo0: TypeSimplificationInfo - val CollectInfo : bool -> TType list -> TyparConstraintsWithTypars -> TypeSimplificationInfo + val CollectInfo: bool -> TType list -> TyparConstraintsWithTypars -> TypeSimplificationInfo -val superOfTycon : TcGlobals -> Tycon -> TType +val superOfTycon: TcGlobals -> Tycon -> TType -val abstractSlotValRefsOfTycons : Tycon list -> ValRef list +val abstractSlotValRefsOfTycons: Tycon list -> ValRef list -val abstractSlotValsOfTycons : Tycon list -> Val list +val abstractSlotValsOfTycons: Tycon list -> Val list //------------------------------------------------------------------------- // Free variables in expressions etc. //------------------------------------------------------------------------- -val emptyFreeVars : FreeVars +val emptyFreeVars: FreeVars -val unionFreeVars : FreeVars -> FreeVars -> FreeVars +val unionFreeVars: FreeVars -> FreeVars -> FreeVars -val accFreeInTargets : FreeVarOptions -> DecisionTreeTarget array -> FreeVars -> FreeVars +val accFreeInTargets: FreeVarOptions -> DecisionTreeTarget array -> FreeVars -> FreeVars -val accFreeInExprs : FreeVarOptions -> Exprs -> FreeVars -> FreeVars +val accFreeInExprs: FreeVarOptions -> Exprs -> FreeVars -> FreeVars -val accFreeInSwitchCases : FreeVarOptions -> DecisionTreeCase list -> DecisionTree option -> FreeVars -> FreeVars +val accFreeInSwitchCases: FreeVarOptions -> DecisionTreeCase list -> DecisionTree option -> FreeVars -> FreeVars -val accFreeInDecisionTree : FreeVarOptions -> DecisionTree -> FreeVars -> FreeVars +val accFreeInDecisionTree: FreeVarOptions -> DecisionTree -> FreeVars -> FreeVars /// Get the free variables in a module definition. -val freeInModuleOrNamespace : FreeVarOptions -> ModuleOrNamespaceExpr -> FreeVars +val freeInModuleOrNamespace: FreeVarOptions -> ModuleOrNamespaceExpr -> FreeVars /// Get the free variables in an expression. -val freeInExpr : FreeVarOptions -> Expr -> FreeVars +val freeInExpr: FreeVarOptions -> Expr -> FreeVars /// Get the free variables in the right hand side of a binding. -val freeInBindingRhs : FreeVarOptions -> Binding -> FreeVars +val freeInBindingRhs: FreeVarOptions -> Binding -> FreeVars /// Check if a set of free type variables are all public -val freeTyvarsAllPublic : FreeTyvars -> bool +val freeTyvarsAllPublic: FreeTyvars -> bool /// Check if a set of free variables are all public -val freeVarsAllPublic : FreeVars -> bool +val freeVarsAllPublic: FreeVars -> bool /// Get the mark/range/position information from an expression type Expr with - member Range : range + member Range: range /// Compute the type of an expression from the expression itself -val tyOfExpr : TcGlobals -> Expr -> TType +val tyOfExpr: TcGlobals -> Expr -> TType /// A flag to govern whether arity inference should be type-directed or syntax-directed when /// inferring an arity from a lambda expression. @@ -1110,17 +1111,17 @@ type AllowTypeDirectedDetupling = | No /// Given a (curried) lambda expression, pull off its arguments -val stripTopLambda : Expr * TType -> Typars * Val list list * Expr * TType +val stripTopLambda: Expr * TType -> Typars * Val list list * Expr * TType /// Given a lambda expression, extract the ValReprInfo for its arguments and other details -val InferArityOfExpr : TcGlobals -> AllowTypeDirectedDetupling -> TType -> Attribs list list -> Attribs -> Expr -> ValReprInfo +val InferArityOfExpr: TcGlobals -> AllowTypeDirectedDetupling -> TType -> Attribs list list -> Attribs -> Expr -> ValReprInfo /// Given a lambda binding, extract the ValReprInfo for its arguments and other details -val InferArityOfExprBinding : TcGlobals -> AllowTypeDirectedDetupling -> Val -> Expr -> ValReprInfo +val InferArityOfExprBinding: TcGlobals -> AllowTypeDirectedDetupling -> Val -> Expr -> ValReprInfo /// Mutate a value to indicate it should be considered a local rather than a module-bound definition // REVIEW: this mutation should not be needed -val setValHasNoArity : Val -> Val +val setValHasNoArity: Val -> Val /// Indicate what should happen to value definitions when copying expressions type ValCopyFlag = @@ -1136,43 +1137,43 @@ type ValCopyFlag = | OnlyCloneExprVals /// Remap a reference to a type definition using the given remapping substitution -val remapTyconRef : TyconRefRemap -> TyconRef -> TyconRef +val remapTyconRef: TyconRefRemap -> TyconRef -> TyconRef /// Remap a reference to a union case using the given remapping substitution -val remapUnionCaseRef : TyconRefRemap -> UnionCaseRef -> UnionCaseRef +val remapUnionCaseRef: TyconRefRemap -> UnionCaseRef -> UnionCaseRef /// Remap a reference to a record field using the given remapping substitution -val remapRecdFieldRef : TyconRefRemap -> RecdFieldRef -> RecdFieldRef +val remapRecdFieldRef: TyconRefRemap -> RecdFieldRef -> RecdFieldRef /// Remap a reference to a value using the given remapping substitution -val remapValRef : Remap -> ValRef -> ValRef +val remapValRef: Remap -> ValRef -> ValRef /// Remap an expression using the given remapping substitution -val remapExpr : TcGlobals -> ValCopyFlag -> Remap -> Expr -> Expr +val remapExpr: TcGlobals -> ValCopyFlag -> Remap -> Expr -> Expr /// Remap an attribute using the given remapping substitution -val remapAttrib : TcGlobals -> Remap -> Attrib -> Attrib +val remapAttrib: TcGlobals -> Remap -> Attrib -> Attrib /// Remap a (possible generic) type using the given remapping substitution -val remapPossibleForallTy : TcGlobals -> Remap -> TType -> TType +val remapPossibleForallTy: TcGlobals -> Remap -> TType -> TType /// Copy an entire module or namespace type using the given copying flags -val copyModuleOrNamespaceType : TcGlobals -> ValCopyFlag -> ModuleOrNamespaceType -> ModuleOrNamespaceType +val copyModuleOrNamespaceType: TcGlobals -> ValCopyFlag -> ModuleOrNamespaceType -> ModuleOrNamespaceType /// Copy an entire expression using the given copying flags -val copyExpr : TcGlobals -> ValCopyFlag -> Expr -> Expr +val copyExpr: TcGlobals -> ValCopyFlag -> Expr -> Expr /// Copy an entire implementation file using the given copying flags -val copyImplFile : TcGlobals -> ValCopyFlag -> TypedImplFile -> TypedImplFile +val copyImplFile: TcGlobals -> ValCopyFlag -> TypedImplFile -> TypedImplFile /// Copy a method slot signature, including new generic type parameters if the slot signature represents a generic method -val copySlotSig : SlotSig -> SlotSig +val copySlotSig: SlotSig -> SlotSig /// Instantiate the generic type parameters in a method slot signature, building a new one -val instSlotSig : TyparInst -> SlotSig -> SlotSig +val instSlotSig: TyparInst -> SlotSig -> SlotSig /// Instantiate the generic type parameters in an expression, building a new one -val instExpr : TcGlobals -> TyparInst -> Expr -> Expr +val instExpr: TcGlobals -> TyparInst -> Expr -> Expr /// The remapping that corresponds to a module meeting its signature /// and also report the set of tycons, tycon representations and values hidden in the process. @@ -1184,7 +1185,7 @@ type SignatureRepackageInfo = RepackagedEntities: (TyconRef * TyconRef) list } /// The empty table - static member Empty : SignatureRepackageInfo + static member Empty: SignatureRepackageInfo /// A set of tables summarizing the items hidden by a signature type SignatureHidingInfo = @@ -1195,36 +1196,36 @@ type SignatureHidingInfo = HiddenUnionCases: Zset } /// The empty table representing no hiding - static member Empty : SignatureHidingInfo + static member Empty: SignatureHidingInfo /// Compute the remapping information implied by a signature being inferred for a particular implementation -val ComputeRemappingFromImplementationToSignature : TcGlobals -> ModuleOrNamespaceExpr -> ModuleOrNamespaceType -> SignatureRepackageInfo * SignatureHidingInfo +val ComputeRemappingFromImplementationToSignature: TcGlobals -> ModuleOrNamespaceExpr -> ModuleOrNamespaceType -> SignatureRepackageInfo * SignatureHidingInfo /// Compute the remapping information implied by an explicit signature being given for an inferred signature -val ComputeRemappingFromInferredSignatureToExplicitSignature : TcGlobals -> ModuleOrNamespaceType -> ModuleOrNamespaceType -> SignatureRepackageInfo * SignatureHidingInfo +val ComputeRemappingFromInferredSignatureToExplicitSignature: TcGlobals -> ModuleOrNamespaceType -> ModuleOrNamespaceType -> SignatureRepackageInfo * SignatureHidingInfo /// Compute the hiding information that corresponds to the hiding applied at an assembly boundary -val ComputeHidingInfoAtAssemblyBoundary : ModuleOrNamespaceType -> SignatureHidingInfo -> SignatureHidingInfo +val ComputeHidingInfoAtAssemblyBoundary: ModuleOrNamespaceType -> SignatureHidingInfo -> SignatureHidingInfo -val mkRepackageRemapping : SignatureRepackageInfo -> Remap +val mkRepackageRemapping: SignatureRepackageInfo -> Remap /// Wrap one module or namespace implementation in a 'namespace N' outer wrapper -val wrapModuleOrNamespaceExprInNamespace : Ident -> CompilationPath -> ModuleOrNamespaceExpr -> ModuleOrNamespaceExpr +val wrapModuleOrNamespaceExprInNamespace: Ident -> CompilationPath -> ModuleOrNamespaceExpr -> ModuleOrNamespaceExpr /// Wrap one module or namespace definition in a 'namespace N' outer wrapper -val wrapModuleOrNamespaceTypeInNamespace : Ident -> CompilationPath -> ModuleOrNamespaceType -> ModuleOrNamespaceType * ModuleOrNamespace +val wrapModuleOrNamespaceTypeInNamespace: Ident -> CompilationPath -> ModuleOrNamespaceType -> ModuleOrNamespaceType * ModuleOrNamespace /// Wrap one module or namespace definition in a 'module M = ..' outer wrapper -val wrapModuleOrNamespaceType : Ident -> CompilationPath -> ModuleOrNamespaceType -> ModuleOrNamespace +val wrapModuleOrNamespaceType: Ident -> CompilationPath -> ModuleOrNamespaceType -> ModuleOrNamespace /// Given an implementation, fetch its recorded signature -val SigTypeOfImplFile : TypedImplFile -> ModuleOrNamespaceType +val SigTypeOfImplFile: TypedImplFile -> ModuleOrNamespaceType /// Given a namespace, module or type definition, try to produce a reference to that entity. -val tryRescopeEntity : CcuThunk -> Entity -> ValueOption +val tryRescopeEntity: CcuThunk -> Entity -> ValueOption /// Given a value definition, try to produce a reference to that value. Fails for local values. -val tryRescopeVal : CcuThunk -> Remap -> Val -> ValueOption +val tryRescopeVal: CcuThunk -> Remap -> Val -> ValueOption /// Make the substitution (remapping) table for viewing a module or namespace 'from the outside' /// @@ -1232,10 +1233,10 @@ val tryRescopeVal : CcuThunk -> Remap -> Val -> ValueOption /// of an assembly, compute a remapping that converts local references to non-local references. /// This remapping must be applied to all pickled expressions and types /// exported from the assembly. -val MakeExportRemapping : CcuThunk -> ModuleOrNamespace -> Remap +val MakeExportRemapping: CcuThunk -> ModuleOrNamespace -> Remap /// Make a remapping table for viewing a module or namespace 'from the outside' -val ApplyExportRemappingToEntity : TcGlobals -> Remap -> ModuleOrNamespace -> ModuleOrNamespace +val ApplyExportRemappingToEntity: TcGlobals -> Remap -> ModuleOrNamespace -> ModuleOrNamespace /// Determine if a type definition is hidden by a signature val IsHiddenTycon: (Remap * SignatureHidingInfo) list -> Tycon -> bool @@ -1251,187 +1252,187 @@ val IsHiddenRecdField: (Remap * SignatureHidingInfo) list -> RecdFieldRef -> boo /// Adjust marks in expressions, replacing all marks by the given mark. /// Used when inlining. -val remarkExpr : range -> Expr -> Expr +val remarkExpr: range -> Expr -> Expr /// Build the application of a (possibly generic, possibly curried) function value to a set of type and expression arguments -val primMkApp : (Expr * TType) -> TypeInst -> Exprs -> range -> Expr +val primMkApp: (Expr * TType) -> TypeInst -> Exprs -> range -> Expr /// Build the application of a (possibly generic, possibly curried) function value to a set of type and expression arguments. /// Reduce the application via let-bindings if the function value is a lambda expression. -val mkApps : TcGlobals -> (Expr * TType) * TType list list * Exprs * range -> Expr +val mkApps: TcGlobals -> (Expr * TType) * TType list list * Exprs * range -> Expr /// Build the application of a generic construct to a set of type arguments. /// Reduce the application via substitution if the function value is a typed lambda expression. -val mkTyAppExpr : range -> Expr * TType -> TType list -> Expr +val mkTyAppExpr: range -> Expr * TType -> TType list -> Expr /// Build an expression to mutate a local /// localv <- e -val mkValSet : range -> ValRef -> Expr -> Expr +val mkValSet: range -> ValRef -> Expr -> Expr /// Build an expression to mutate the contents of a local pointer /// *localv_ptr = e -val mkAddrSet : range -> ValRef -> Expr -> Expr +val mkAddrSet: range -> ValRef -> Expr -> Expr /// Build an expression to dereference a local pointer /// *localv_ptr -val mkAddrGet : range -> ValRef -> Expr +val mkAddrGet: range -> ValRef -> Expr /// Build an expression to take the address of a local /// &localv -val mkValAddr : range -> readonly: bool -> ValRef -> Expr +val mkValAddr: range -> readonly: bool -> ValRef -> Expr /// Build an expression representing the read of an instance class or record field. /// First take the address of the record expression if it is a struct. -val mkRecdFieldGet : TcGlobals -> Expr * RecdFieldRef * TypeInst * range -> Expr +val mkRecdFieldGet: TcGlobals -> Expr * RecdFieldRef * TypeInst * range -> Expr /// Accumulate the targets actually used in a decision graph (for reporting warnings) -val accTargetsOfDecisionTree : DecisionTree -> int list -> int list +val accTargetsOfDecisionTree: DecisionTree -> int list -> int list /// Make a 'match' expression applying some peep-hole optimizations along the way, e.g to /// pre-decide the branch taken at compile-time. -val mkAndSimplifyMatch : DebugPointForBinding -> range -> range -> TType -> DecisionTree -> DecisionTreeTarget list -> Expr +val mkAndSimplifyMatch: DebugPointAtBinding -> range -> range -> TType -> DecisionTree -> DecisionTreeTarget list -> Expr /// Make a 'match' expression without applying any peep-hole optimizations. -val primMkMatch : DebugPointForBinding * range * DecisionTree * DecisionTreeTarget array * range * TType -> Expr +val primMkMatch: DebugPointAtBinding * range * DecisionTree * DecisionTreeTarget array * range * TType -> Expr /// Work out what things on the right-han-side of a 'let rec' recursive binding need to be fixed up -val IterateRecursiveFixups : - TcGlobals -> Val option -> +val IterateRecursiveFixups: + TcGlobals -> Val option -> (Val option -> Expr -> (Expr -> Expr) -> Expr -> unit) -> Expr * (Expr -> Expr) -> Expr -> unit /// Given a lambda expression taking multiple variables, build a corresponding lambda taking a tuple -val MultiLambdaToTupledLambda : TcGlobals -> Val list -> Expr -> Val * Expr +val MultiLambdaToTupledLambda: TcGlobals -> Val list -> Expr -> Val * Expr /// Given a lambda expression, adjust it to have be one or two lambda expressions (fun a -> (fun b -> ...)) /// where the first has the given arity. -val AdjustArityOfLambdaBody : TcGlobals -> int -> Val list -> Expr -> Val list * Expr +val AdjustArityOfLambdaBody: TcGlobals -> int -> Val list -> Expr -> Val list * Expr /// Make an application expression, doing beta reduction by introducing let-bindings -val MakeApplicationAndBetaReduce : TcGlobals -> Expr * TType * TypeInst list * Exprs * range -> Expr +val MakeApplicationAndBetaReduce: TcGlobals -> Expr * TType * TypeInst list * Exprs * range -> Expr /// Combine two static-resolution requirements on a type parameter -val JoinTyparStaticReq : TyparStaticReq -> TyparStaticReq -> TyparStaticReq +val JoinTyparStaticReq: TyparStaticReq -> TyparStaticReq -> TyparStaticReq /// Layout for internal compiler debugging purposes module DebugPrint = /// A global flag indicating whether debug output should include ranges - val layoutRanges : bool ref + val layoutRanges: bool ref /// Convert a type to a string for debugging purposes - val showType : TType -> string + val showType: TType -> string /// Convert an expression to a string for debugging purposes - val showExpr : TcGlobals -> Expr -> string + val showExpr: TcGlobals -> Expr -> string /// Debug layout for a reference to a value - val valRefL : ValRef -> layout + val valRefL: ValRef -> Layout /// Debug layout for a reference to a union case - val unionCaseRefL : UnionCaseRef -> layout + val unionCaseRefL: UnionCaseRef -> Layout /// Debug layout for an value definition at its binding site - val valAtBindL : TcGlobals -> Val -> layout + val valAtBindL: TcGlobals -> Val -> Layout /// Debug layout for an integer - val intL : int -> layout + val intL: int -> Layout /// Debug layout for a value definition - val valL : Val -> layout + val valL: Val -> Layout /// Debug layout for a type parameter definition - val typarDeclL : Typar -> layout + val typarDeclL: Typar -> Layout /// Debug layout for a trait constraint - val traitL : TraitConstraintInfo -> layout + val traitL: TraitConstraintInfo -> Layout /// Debug layout for a type parameter - val typarL : Typar -> layout + val typarL: Typar -> Layout /// Debug layout for a set of type parameters - val typarsL : Typars -> layout + val typarsL: Typars -> Layout /// Debug layout for a type - val typeL : TType -> layout + val typeL: TType -> Layout /// Debug layout for a method slot signature - val slotSigL : SlotSig -> layout + val slotSigL: SlotSig -> Layout /// Debug layout for the type signature of a module or namespace definition - val entityTypeL : TcGlobals -> ModuleOrNamespaceType -> layout + val entityTypeL: TcGlobals -> ModuleOrNamespaceType -> Layout /// Debug layout for a module or namespace definition - val entityL : TcGlobals -> ModuleOrNamespace -> layout + val entityL: TcGlobals -> ModuleOrNamespace -> Layout /// Debug layout for the type of a value - val typeOfValL : Val -> layout + val typeOfValL: Val -> Layout /// Debug layout for a binding of an expression to a value - val bindingL : TcGlobals -> Binding -> layout + val bindingL: TcGlobals -> Binding -> Layout /// Debug layout for an expression - val exprL : TcGlobals -> Expr -> layout + val exprL: TcGlobals -> Expr -> Layout /// Debug layout for a type definition - val tyconL : TcGlobals -> Tycon -> layout + val tyconL: TcGlobals -> Tycon -> Layout /// Debug layout for a decision tree - val decisionTreeL : TcGlobals -> DecisionTree -> layout + val decisionTreeL: TcGlobals -> DecisionTree -> Layout /// Debug layout for an implementation file - val implFileL : TcGlobals -> TypedImplFile -> layout + val implFileL: TcGlobals -> TypedImplFile -> Layout /// Debug layout for a list of implementation files - val implFilesL : TcGlobals -> TypedImplFile list -> layout + val implFilesL: TcGlobals -> TypedImplFile list -> Layout /// Debug layout for class and record fields - val recdFieldRefL : RecdFieldRef -> layout + val recdFieldRefL: RecdFieldRef -> Layout /// A set of function parameters (visitor) for folding over expressions type ExprFolder<'State> = - { exprIntercept : (* recurseF *) ('State -> Expr -> 'State) -> (* noInterceptF *) ('State -> Expr -> 'State) -> 'State -> Expr -> 'State - valBindingSiteIntercept : 'State -> bool * Val -> 'State - nonRecBindingsIntercept : 'State -> Binding -> 'State - recBindingsIntercept : 'State -> Bindings -> 'State - dtreeIntercept : 'State -> DecisionTree -> 'State - targetIntercept : ('State -> Expr -> 'State) -> 'State -> DecisionTreeTarget -> 'State option - tmethodIntercept : ('State -> Expr -> 'State) -> 'State -> ObjExprMethod -> 'State option} + { exprIntercept: (* recurseF *) ('State -> Expr -> 'State) -> (* noInterceptF *) ('State -> Expr -> 'State) -> 'State -> Expr -> 'State + valBindingSiteIntercept: 'State -> bool * Val -> 'State + nonRecBindingsIntercept: 'State -> Binding -> 'State + recBindingsIntercept: 'State -> Bindings -> 'State + dtreeIntercept: 'State -> DecisionTree -> 'State + targetIntercept: ('State -> Expr -> 'State) -> 'State -> DecisionTreeTarget -> 'State option + tmethodIntercept: ('State -> Expr -> 'State) -> 'State -> ObjExprMethod -> 'State option} /// The empty set of actions for folding over expressions -val ExprFolder0 : ExprFolder<'State> +val ExprFolder0: ExprFolder<'State> /// Fold over all the expressions in an implementation file val FoldImplFile: ExprFolder<'State> -> ('State -> TypedImplFile -> 'State) /// Fold over all the expressions in an expression -val FoldExpr : ExprFolder<'State> -> ('State -> Expr -> 'State) +val FoldExpr: ExprFolder<'State> -> ('State -> Expr -> 'State) #if DEBUG /// Extract some statistics from an expression -val ExprStats : Expr -> string +val ExprStats: Expr -> string #endif /// Build a nativeptr type -val mkNativePtrTy : TcGlobals -> TType -> TType +val mkNativePtrTy: TcGlobals -> TType -> TType /// Build a 'voidptr' type -val mkVoidPtrTy : TcGlobals -> TType +val mkVoidPtrTy: TcGlobals -> TType /// Build a single-dimensional array type -val mkArrayType : TcGlobals -> TType -> TType +val mkArrayType: TcGlobals -> TType -> TType /// Determine if a type is an option type -val isOptionTy : TcGlobals -> TType -> bool +val isOptionTy: TcGlobals -> TType -> bool /// Take apart an option type -val destOptionTy : TcGlobals -> TType -> TType +val destOptionTy: TcGlobals -> TType -> TType /// Try to take apart an option type -val tryDestOptionTy : TcGlobals -> TType -> ValueOption +val tryDestOptionTy: TcGlobals -> TType -> ValueOption /// Determine is a type is a System.Nullable type -val isNullableTy : TcGlobals -> TType -> bool +val isNullableTy: TcGlobals -> TType -> bool /// Try to take apart a System.Nullable type val tryDestNullableTy: TcGlobals -> TType -> ValueOption @@ -1440,34 +1441,34 @@ val tryDestNullableTy: TcGlobals -> TType -> ValueOption val destNullableTy: TcGlobals -> TType -> TType /// Determine if a type is a System.Linq.Expression type -val isLinqExpressionTy : TcGlobals -> TType -> bool +val isLinqExpressionTy: TcGlobals -> TType -> bool /// Take apart a System.Linq.Expression type -val destLinqExpressionTy : TcGlobals -> TType -> TType +val destLinqExpressionTy: TcGlobals -> TType -> TType /// Try to take apart a System.Linq.Expression type -val tryDestLinqExpressionTy : TcGlobals -> TType -> TType option +val tryDestLinqExpressionTy: TcGlobals -> TType -> TType option /// Determine if a type is an IDelegateEvent type -val isIDelegateEventType : TcGlobals -> TType -> bool +val isIDelegateEventType: TcGlobals -> TType -> bool /// Take apart an IDelegateEvent type -val destIDelegateEventType : TcGlobals -> TType -> TType +val destIDelegateEventType: TcGlobals -> TType -> TType /// Build an IEvent type -val mkIEventType : TcGlobals -> TType -> TType -> TType +val mkIEventType: TcGlobals -> TType -> TType -> TType /// Build an IObservable type -val mkIObservableType : TcGlobals -> TType -> TType +val mkIObservableType: TcGlobals -> TType -> TType /// Build an IObserver type -val mkIObserverType : TcGlobals -> TType -> TType +val mkIObserverType: TcGlobals -> TType -> TType /// Build an Lazy type -val mkLazyTy : TcGlobals -> TType -> TType +val mkLazyTy: TcGlobals -> TType -> TType /// Build an PrintFormat type -val mkPrintfFormatTy : TcGlobals -> TType -> TType -> TType -> TType -> TType -> TType +val mkPrintfFormatTy: TcGlobals -> TType -> TType -> TType -> TType -> TType -> TType //------------------------------------------------------------------------- // Classify types @@ -1482,129 +1483,131 @@ type TypeDefMetadata = #endif /// Extract metadata from a type definition -val metadataOfTycon : Tycon -> TypeDefMetadata +val metadataOfTycon: Tycon -> TypeDefMetadata /// Extract metadata from a type -val metadataOfTy : TcGlobals -> TType -> TypeDefMetadata +val metadataOfTy: TcGlobals -> TType -> TypeDefMetadata /// Determine if a type is the System.String type -val isStringTy : TcGlobals -> TType -> bool +val isStringTy: TcGlobals -> TType -> bool /// Determine if a type is an F# list type -val isListTy : TcGlobals -> TType -> bool +val isListTy: TcGlobals -> TType -> bool /// Determine if a type is a nominal .NET type -val isILAppTy : TcGlobals -> TType -> bool +val isILAppTy: TcGlobals -> TType -> bool /// Determine if a type is any kind of array type -val isArrayTy : TcGlobals -> TType -> bool +val isArrayTy: TcGlobals -> TType -> bool /// Determine if a type is a single-dimensional array type -val isArray1DTy : TcGlobals -> TType -> bool +val isArray1DTy: TcGlobals -> TType -> bool /// Get the element type of an array type -val destArrayTy : TcGlobals -> TType -> TType +val destArrayTy: TcGlobals -> TType -> TType /// Get the element type of an F# list type -val destListTy : TcGlobals -> TType -> TType +val destListTy: TcGlobals -> TType -> TType /// Build an array type of the given rank -val mkArrayTy : TcGlobals -> int -> TType -> range -> TType +val mkArrayTy: TcGlobals -> int -> TType -> range -> TType /// Check if a type definition is one of the artificial type definitions used for array types of different ranks -val isArrayTyconRef : TcGlobals -> TyconRef -> bool +val isArrayTyconRef: TcGlobals -> TyconRef -> bool /// Determine the rank of one of the artificial type definitions used for array types -val rankOfArrayTyconRef : TcGlobals -> TyconRef -> int +val rankOfArrayTyconRef: TcGlobals -> TyconRef -> int /// Determine if a type is the F# unit type -val isUnitTy : TcGlobals -> TType -> bool +val isUnitTy: TcGlobals -> TType -> bool /// Determine if a type is the System.Object type -val isObjTy : TcGlobals -> TType -> bool +val isObjTy: TcGlobals -> TType -> bool /// Determine if a type is the System.ValueType type -val isValueTypeTy : TcGlobals -> TType -> bool +val isValueTypeTy: TcGlobals -> TType -> bool /// Determine if a type is the System.Void type -val isVoidTy : TcGlobals -> TType -> bool +val isVoidTy: TcGlobals -> TType -> bool /// Get the element type of an array type -val destArrayTy : TcGlobals -> TType -> TType +val destArrayTy: TcGlobals -> TType -> TType /// Get the rank of an array type -val rankOfArrayTy : TcGlobals -> TType -> int +val rankOfArrayTy: TcGlobals -> TType -> int /// Determine if a reference to a type definition is an interface type -val isInterfaceTyconRef : TyconRef -> bool +val isInterfaceTyconRef: TyconRef -> bool /// Determine if a type is a delegate type -val isDelegateTy : TcGlobals -> TType -> bool +val isDelegateTy: TcGlobals -> TType -> bool /// Determine if a type is an interface type -val isInterfaceTy : TcGlobals -> TType -> bool +val isInterfaceTy: TcGlobals -> TType -> bool /// Determine if a type is a FSharpRef type -val isRefTy : TcGlobals -> TType -> bool +val isRefTy: TcGlobals -> TType -> bool /// Determine if a type is a function (including generic). Not the same as isFunTy. -val isForallFunctionTy : TcGlobals -> TType -> bool +val isForallFunctionTy: TcGlobals -> TType -> bool /// Determine if a type is a sealed type -val isSealedTy : TcGlobals -> TType -> bool +val isSealedTy: TcGlobals -> TType -> bool /// Determine if a type is a ComInterop type -val isComInteropTy : TcGlobals -> TType -> bool +val isComInteropTy: TcGlobals -> TType -> bool /// Determine the underlying type of an enum type (normally int32) -val underlyingTypeOfEnumTy : TcGlobals -> TType -> TType +val underlyingTypeOfEnumTy: TcGlobals -> TType -> TType /// If the input type is an enum type, then convert to its underlying type, otherwise return the input type -val normalizeEnumTy : TcGlobals -> TType -> TType +val normalizeEnumTy: TcGlobals -> TType -> TType /// Determine if a type is a struct type -val isStructTy : TcGlobals -> TType -> bool +val isStructTy: TcGlobals -> TType -> bool + +val isStructOrEnumTyconTy: TcGlobals -> TType -> bool /// Determine if a type is a variable type with the ': struct' constraint. /// /// Note, isStructTy does not include type parameters with the ': struct' constraint /// This predicate is used to detect those type parameters. -val isNonNullableStructTyparTy : TcGlobals -> TType -> bool +val isNonNullableStructTyparTy: TcGlobals -> TType -> bool /// Determine if a type is a variable type with the ': not struct' constraint. /// /// Note, isRefTy does not include type parameters with the ': not struct' constraint /// This predicate is used to detect those type parameters. -val isReferenceTyparTy : TcGlobals -> TType -> bool +val isReferenceTyparTy: TcGlobals -> TType -> bool /// Determine if a type is an unmanaged type -val isUnmanagedTy : TcGlobals -> TType -> bool +val isUnmanagedTy: TcGlobals -> TType -> bool /// Determine if a type is a class type -val isClassTy : TcGlobals -> TType -> bool +val isClassTy: TcGlobals -> TType -> bool /// Determine if a type is an enum type -val isEnumTy : TcGlobals -> TType -> bool +val isEnumTy: TcGlobals -> TType -> bool /// Determine if a type is a struct, record or union type -val isStructRecordOrUnionTyconTy : TcGlobals -> TType -> bool +val isStructRecordOrUnionTyconTy: TcGlobals -> TType -> bool /// For "type Class as self", 'self' is fixed up after initialization. To support this, /// it is converted behind the scenes to a ref. This function strips off the ref and /// returns the underlying type. -val StripSelfRefCell : TcGlobals * ValBaseOrThisInfo * TType -> TType +val StripSelfRefCell: TcGlobals * ValBaseOrThisInfo * TType -> TType /// An active pattern to determine if a type is a nominal type, possibly instantiated -val (|AppTy|_|) : TcGlobals -> TType -> (TyconRef * TType list) option +val (|AppTy|_|): TcGlobals -> TType -> (TyconRef * TType list) option /// An active pattern to match System.Nullable types -val (|NullableTy|_|) : TcGlobals -> TType -> TType option +val (|NullableTy|_|): TcGlobals -> TType -> TType option /// An active pattern to transform System.Nullable types to their input, otherwise leave the input unchanged -val (|StripNullableTy|) : TcGlobals -> TType -> TType +val (|StripNullableTy|): TcGlobals -> TType -> TType /// Matches any byref type, yielding the target type -val (|ByrefTy|_|) : TcGlobals -> TType -> TType option +val (|ByrefTy|_|): TcGlobals -> TType -> TType option //------------------------------------------------------------------------- // Special semantic constraints @@ -1612,43 +1615,43 @@ val (|ByrefTy|_|) : TcGlobals -> TType -> TType option val IsUnionTypeWithNullAsTrueValue: TcGlobals -> Tycon -> bool -val TyconHasUseNullAsTrueValueAttribute : TcGlobals -> Tycon -> bool +val TyconHasUseNullAsTrueValueAttribute: TcGlobals -> Tycon -> bool -val CanHaveUseNullAsTrueValueAttribute : TcGlobals -> Tycon -> bool +val CanHaveUseNullAsTrueValueAttribute: TcGlobals -> Tycon -> bool -val MemberIsCompiledAsInstance : TcGlobals -> TyconRef -> bool -> ValMemberInfo -> Attribs -> bool +val MemberIsCompiledAsInstance: TcGlobals -> TyconRef -> bool -> ValMemberInfo -> Attribs -> bool -val ValSpecIsCompiledAsInstance : TcGlobals -> Val -> bool +val ValSpecIsCompiledAsInstance: TcGlobals -> Val -> bool -val ValRefIsCompiledAsInstanceMember : TcGlobals -> ValRef -> bool +val ValRefIsCompiledAsInstanceMember: TcGlobals -> ValRef -> bool -val ModuleNameIsMangled : TcGlobals -> Attribs -> bool +val ModuleNameIsMangled: TcGlobals -> Attribs -> bool -val CompileAsEvent : TcGlobals -> Attribs -> bool +val CompileAsEvent: TcGlobals -> Attribs -> bool -val TypeNullIsExtraValue : TcGlobals -> range -> TType -> bool +val TypeNullIsExtraValue: TcGlobals -> range -> TType -> bool -val TypeNullIsTrueValue : TcGlobals -> TType -> bool +val TypeNullIsTrueValue: TcGlobals -> TType -> bool -val TypeNullNotLiked : TcGlobals -> range -> TType -> bool +val TypeNullNotLiked: TcGlobals -> range -> TType -> bool -val TypeNullNever : TcGlobals -> TType -> bool +val TypeNullNever: TcGlobals -> TType -> bool -val TypeSatisfiesNullConstraint : TcGlobals -> range -> TType -> bool +val TypeSatisfiesNullConstraint: TcGlobals -> range -> TType -> bool -val TypeHasDefaultValue : TcGlobals -> range -> TType -> bool +val TypeHasDefaultValue: TcGlobals -> range -> TType -> bool -val isAbstractTycon : Tycon -> bool +val isAbstractTycon: Tycon -> bool -val isUnionCaseRefDefinitelyMutable : UnionCaseRef -> bool +val isUnionCaseRefDefinitelyMutable: UnionCaseRef -> bool -val isRecdOrUnionOrStructTyconRefDefinitelyMutable : TyconRef -> bool +val isRecdOrUnionOrStructTyconRefDefinitelyMutable: TyconRef -> bool -val isExnDefinitelyMutable : TyconRef -> bool +val isExnDefinitelyMutable: TyconRef -> bool -val isUnionCaseFieldMutable : TcGlobals -> UnionCaseRef -> int -> bool +val isUnionCaseFieldMutable: TcGlobals -> UnionCaseRef -> int -> bool -val isExnFieldMutable : TyconRef -> int -> bool +val isExnFieldMutable: TyconRef -> int -> bool val isRecdOrStructTyconRefReadOnly: TcGlobals -> range -> TyconRef -> bool @@ -1656,82 +1659,88 @@ val isRecdOrStructTyconRefAssumedImmutable: TcGlobals -> TyconRef -> bool val isRecdOrStructTyReadOnly: TcGlobals -> range -> TType -> bool -val useGenuineField : Tycon -> RecdField -> bool +val useGenuineField: Tycon -> RecdField -> bool -val ComputeFieldName : Tycon -> RecdField -> string +val ComputeFieldName: Tycon -> RecdField -> string //------------------------------------------------------------------------- // Destruct slotsigs etc. //------------------------------------------------------------------------- -val slotSigHasVoidReturnTy : SlotSig -> bool +val slotSigHasVoidReturnTy: SlotSig -> bool -val actualReturnTyOfSlotSig : TypeInst -> TypeInst -> SlotSig -> TType option +val actualReturnTyOfSlotSig: TypeInst -> TypeInst -> SlotSig -> TType option -val returnTyOfMethod : TcGlobals -> ObjExprMethod -> TType option +val returnTyOfMethod: TcGlobals -> ObjExprMethod -> TType option //------------------------------------------------------------------------- // Primitives associated with initialization graphs //------------------------------------------------------------------------- -val mkRefCell : TcGlobals -> range -> TType -> Expr -> Expr +val mkRefCell: TcGlobals -> range -> TType -> Expr -> Expr -val mkRefCellGet : TcGlobals -> range -> TType -> Expr -> Expr +val mkRefCellGet: TcGlobals -> range -> TType -> Expr -> Expr -val mkRefCellSet : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkRefCellSet: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkLazyDelayed : TcGlobals -> range -> TType -> Expr -> Expr +val mkLazyDelayed: TcGlobals -> range -> TType -> Expr -> Expr -val mkLazyForce : TcGlobals -> range -> TType -> Expr -> Expr +val mkLazyForce: TcGlobals -> range -> TType -> Expr -> Expr -val mkRefCellContentsRef : TcGlobals -> RecdFieldRef +val mkRefCellContentsRef: TcGlobals -> RecdFieldRef /// Check if a type is an FSharpRef type -val isRefCellTy : TcGlobals -> TType -> bool +val isRefCellTy: TcGlobals -> TType -> bool /// Get the element type of an FSharpRef type -val destRefCellTy : TcGlobals -> TType -> TType +val destRefCellTy: TcGlobals -> TType -> TType /// Create the FSharpRef type for a given element type -val mkRefCellTy : TcGlobals -> TType -> TType +val mkRefCellTy: TcGlobals -> TType -> TType /// Create the IEnumerable (seq) type for a given element type -val mkSeqTy : TcGlobals -> TType -> TType +val mkSeqTy: TcGlobals -> TType -> TType /// Create the IEnumerator type for a given element type -val mkIEnumeratorTy : TcGlobals -> TType -> TType +val mkIEnumeratorTy: TcGlobals -> TType -> TType /// Create the list type for a given element type -val mkListTy : TcGlobals -> TType -> TType +val mkListTy: TcGlobals -> TType -> TType /// Create the option type for a given element type -val mkOptionTy : TcGlobals -> TType -> TType +val mkOptionTy: TcGlobals -> TType -> TType + +/// Create the voption type for a given element type +val mkValueOptionTy : TcGlobals -> TType -> TType /// Create the Nullable type for a given element type val mkNullableTy: TcGlobals -> TType -> TType /// Create the union case 'None' for an option type -val mkNoneCase : TcGlobals -> UnionCaseRef +val mkNoneCase: TcGlobals -> UnionCaseRef /// Create the union case 'Some(expr)' for an option type val mkSomeCase: TcGlobals -> UnionCaseRef +/// Create the struct union case 'ValueSome(expr)' for a voption type +val mkValueSomeCase: TcGlobals -> UnionCaseRef + +/// Create the struct union case 'Some' or 'ValueSome(expr)' for a voption type +val mkAnySomeCase: TcGlobals -> isStruct: bool -> UnionCaseRef + /// Create the expression '[]' for a list type -val mkNil : TcGlobals -> range -> TType -> Expr +val mkNil: TcGlobals -> range -> TType -> Expr -/// Create the expression 'headExpr :: tailExpr' -val mkCons : TcGlobals -> TType -> Expr -> Expr -> Expr +/// Create the expression 'headExpr:: tailExpr' +val mkCons: TcGlobals -> TType -> Expr -> Expr -> Expr /// Create the expression 'Some(expr)' -val mkSome : TcGlobals -> TType -> Expr -> range -> Expr +val mkSome: TcGlobals -> TType -> Expr -> range -> Expr /// Create the expression 'None' for an option-type val mkNone: TcGlobals -> TType -> range -> Expr -/// Create the expression 'expr.Value' for an option-typed expression -val mkOptionGetValueUnprovenViaAddr: TcGlobals -> Expr -> TType -> range -> Expr - -val mkOptionToNullable : TcGlobals -> range -> TType -> Expr -> Expr +val mkOptionToNullable: TcGlobals -> range -> TType -> Expr -> Expr val mkOptionDefaultValue: TcGlobals -> range -> TType -> Expr -> Expr -> Expr @@ -1739,87 +1748,87 @@ val mkOptionDefaultValue: TcGlobals -> range -> TType -> Expr -> Expr -> Expr // Make a few more expressions //------------------------------------------------------------------------- -val mkSequential : DebugPointAtSequential -> range -> Expr -> Expr -> Expr +val mkSequential: DebugPointAtSequential -> range -> Expr -> Expr -> Expr -val mkCompGenSequential : range -> Expr -> Expr -> Expr +val mkCompGenSequential: range -> Expr -> Expr -> Expr -val mkSequentials : DebugPointAtSequential -> TcGlobals -> range -> Exprs -> Expr +val mkSequentials: DebugPointAtSequential -> TcGlobals -> range -> Exprs -> Expr -val mkRecordExpr : TcGlobals -> RecordConstructionInfo * TyconRef * TypeInst * RecdFieldRef list * Exprs * range -> Expr +val mkRecordExpr: TcGlobals -> RecordConstructionInfo * TyconRef * TypeInst * RecdFieldRef list * Exprs * range -> Expr -val mkUnbox : TType -> Expr -> range -> Expr +val mkUnbox: TType -> Expr -> range -> Expr -val mkBox : TType -> Expr -> range -> Expr +val mkBox: TType -> Expr -> range -> Expr -val mkIsInst : TType -> Expr -> range -> Expr +val mkIsInst: TType -> Expr -> range -> Expr -val mkNull : range -> TType -> Expr +val mkNull: range -> TType -> Expr -val mkNullTest : TcGlobals -> range -> Expr -> Expr -> Expr -> Expr +val mkNullTest: TcGlobals -> range -> Expr -> Expr -> Expr -> Expr -val mkNonNullTest : TcGlobals -> range -> Expr -> Expr +val mkNonNullTest: TcGlobals -> range -> Expr -> Expr -val mkIsInstConditional : TcGlobals -> range -> TType -> Expr -> Val -> Expr -> Expr -> Expr +val mkIsInstConditional: TcGlobals -> range -> TType -> Expr -> Val -> Expr -> Expr -> Expr -val mkThrow : range -> TType -> Expr -> Expr +val mkThrow: range -> TType -> Expr -> Expr -val mkGetArg0 : range -> TType -> Expr +val mkGetArg0: range -> TType -> Expr -val mkDefault : range * TType -> Expr +val mkDefault: range * TType -> Expr -val isThrow : Expr -> bool +val isThrow: Expr -> bool -val mkString : TcGlobals -> range -> string -> Expr +val mkString: TcGlobals -> range -> string -> Expr -val mkBool : TcGlobals -> range -> bool -> Expr +val mkBool: TcGlobals -> range -> bool -> Expr -val mkByte : TcGlobals -> range -> byte -> Expr +val mkByte: TcGlobals -> range -> byte -> Expr -val mkUInt16 : TcGlobals -> range -> uint16 -> Expr +val mkUInt16: TcGlobals -> range -> uint16 -> Expr -val mkTrue : TcGlobals -> range -> Expr +val mkTrue: TcGlobals -> range -> Expr -val mkFalse : TcGlobals -> range -> Expr +val mkFalse: TcGlobals -> range -> Expr -val mkUnit : TcGlobals -> range -> Expr +val mkUnit: TcGlobals -> range -> Expr -val mkInt32 : TcGlobals -> range -> int32 -> Expr +val mkInt32: TcGlobals -> range -> int32 -> Expr -val mkInt : TcGlobals -> range -> int -> Expr +val mkInt: TcGlobals -> range -> int -> Expr -val mkZero : TcGlobals -> range -> Expr +val mkZero: TcGlobals -> range -> Expr -val mkOne : TcGlobals -> range -> Expr +val mkOne: TcGlobals -> range -> Expr -val mkTwo : TcGlobals -> range -> Expr +val mkTwo: TcGlobals -> range -> Expr -val mkMinusOne : TcGlobals -> range -> Expr +val mkMinusOne: TcGlobals -> range -> Expr -val destInt32 : Expr -> int32 option +val destInt32: Expr -> int32 option //------------------------------------------------------------------------- // Primitives associated with quotations //------------------------------------------------------------------------- -val isQuotedExprTy : TcGlobals -> TType -> bool +val isQuotedExprTy: TcGlobals -> TType -> bool -val destQuotedExprTy : TcGlobals -> TType -> TType +val destQuotedExprTy: TcGlobals -> TType -> TType -val mkQuotedExprTy : TcGlobals -> TType -> TType +val mkQuotedExprTy: TcGlobals -> TType -> TType -val mkRawQuotedExprTy : TcGlobals -> TType +val mkRawQuotedExprTy: TcGlobals -> TType //------------------------------------------------------------------------- // Primitives associated with IL code gen //------------------------------------------------------------------------- -val mspec_Type_GetTypeFromHandle : TcGlobals -> ILMethodSpec +val mspec_Type_GetTypeFromHandle: TcGlobals -> ILMethodSpec -val fspec_Missing_Value : TcGlobals -> ILFieldSpec +val fspec_Missing_Value: TcGlobals -> ILFieldSpec val mkInitializeArrayMethSpec: TcGlobals -> ILMethodSpec -val mkByteArrayTy : TcGlobals -> TType +val mkByteArrayTy: TcGlobals -> TType val mkInvalidCastExnNewobj: TcGlobals -> ILInstr @@ -1830,425 +1839,425 @@ val mkInvalidCastExnNewobj: TcGlobals -> ILInstr val mkCallNewFormat: TcGlobals -> range -> TType -> TType -> TType -> TType -> TType -> formatStringExpr: Expr -> Expr -val mkCallUnbox : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallUnbox: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallGetGenericComparer : TcGlobals -> range -> Expr +val mkCallGetGenericComparer: TcGlobals -> range -> Expr -val mkCallGetGenericEREqualityComparer : TcGlobals -> range -> Expr +val mkCallGetGenericEREqualityComparer: TcGlobals -> range -> Expr -val mkCallGetGenericPEREqualityComparer : TcGlobals -> range -> Expr +val mkCallGetGenericPEREqualityComparer: TcGlobals -> range -> Expr -val mkCallUnboxFast : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallUnboxFast: TcGlobals -> range -> TType -> Expr -> Expr -val canUseUnboxFast : TcGlobals -> range -> TType -> bool +val canUseUnboxFast: TcGlobals -> range -> TType -> bool -val mkCallDispose : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallDispose: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallSeq : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallSeq: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallTypeTest : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallTypeTest: TcGlobals -> range -> TType -> Expr -> Expr -val canUseTypeTestFast : TcGlobals -> TType -> bool +val canUseTypeTestFast: TcGlobals -> TType -> bool -val mkCallTypeOf : TcGlobals -> range -> TType -> Expr +val mkCallTypeOf: TcGlobals -> range -> TType -> Expr -val mkCallTypeDefOf : TcGlobals -> range -> TType -> Expr +val mkCallTypeDefOf: TcGlobals -> range -> TType -> Expr -val mkCallCreateInstance : TcGlobals -> range -> TType -> Expr +val mkCallCreateInstance: TcGlobals -> range -> TType -> Expr -val mkCallCreateEvent : TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr -> Expr +val mkCallCreateEvent: TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr -> Expr -val mkCallArrayLength : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallArrayLength: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallArrayGet : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallArrayGet: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallArray2DGet : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr +val mkCallArray2DGet: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -val mkCallArray3DGet : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -> Expr +val mkCallArray3DGet: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -> Expr -val mkCallArray4DGet : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr +val mkCallArray4DGet: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr -val mkCallArraySet : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr +val mkCallArraySet: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -val mkCallArray2DSet : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -> Expr +val mkCallArray2DSet: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -> Expr -val mkCallArray3DSet : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr +val mkCallArray3DSet: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr -val mkCallArray4DSet : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr +val mkCallArray4DSet: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr -val mkCallHash : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallHash: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallBox : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallBox: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallIsNull : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallIsNull: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallIsNotNull : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallIsNotNull: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallRaise : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallRaise: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallGenericComparisonWithComparerOuter : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr +val mkCallGenericComparisonWithComparerOuter: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -val mkCallGenericEqualityEROuter : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallGenericEqualityEROuter: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallGenericEqualityWithComparerOuter : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr +val mkCallGenericEqualityWithComparerOuter: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr -val mkCallGenericHashWithComparerOuter : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallGenericHashWithComparerOuter: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallEqualsOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallEqualsOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallNotEqualsOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallNotEqualsOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallLessThanOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallLessThanOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallLessThanOrEqualsOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallLessThanOrEqualsOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallGreaterThanOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallGreaterThanOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallGreaterThanOrEqualsOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallGreaterThanOrEqualsOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallAdditionOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallAdditionOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallSubtractionOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallSubtractionOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallMultiplyOperator : TcGlobals -> range -> ty1: TType -> ty2: TType -> rty: TType -> Expr -> Expr -> Expr +val mkCallMultiplyOperator: TcGlobals -> range -> ty1: TType -> ty2: TType -> rty: TType -> Expr -> Expr -> Expr -val mkCallDivisionOperator : TcGlobals -> range -> ty1: TType -> ty2: TType -> rty: TType -> Expr -> Expr -> Expr +val mkCallDivisionOperator: TcGlobals -> range -> ty1: TType -> ty2: TType -> rty: TType -> Expr -> Expr -> Expr -val mkCallModulusOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallModulusOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallDefaultOf : TcGlobals -> range -> TType -> Expr +val mkCallDefaultOf: TcGlobals -> range -> TType -> Expr -val mkCallBitwiseAndOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallBitwiseAndOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallBitwiseOrOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallBitwiseOrOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallBitwiseXorOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallBitwiseXorOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallShiftLeftOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallShiftLeftOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallShiftRightOperator : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallShiftRightOperator: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallUnaryNegOperator : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallUnaryNegOperator: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallUnaryNotOperator : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallUnaryNotOperator: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallAdditionChecked : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallAdditionChecked: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallSubtractionChecked : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallSubtractionChecked: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallMultiplyChecked : TcGlobals -> range -> ty1: TType -> ty2: TType -> rty: TType -> Expr -> Expr -> Expr +val mkCallMultiplyChecked: TcGlobals -> range -> ty1: TType -> ty2: TType -> rty: TType -> Expr -> Expr -> Expr -val mkCallUnaryNegChecked : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallUnaryNegChecked: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToByteChecked : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToByteChecked: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToSByteChecked : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToSByteChecked: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToInt16Checked : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToInt16Checked: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToUInt16Checked : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToUInt16Checked: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToIntChecked : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToIntChecked: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToInt32Checked : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToInt32Checked: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToUInt32Checked : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToUInt32Checked: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToInt64Checked : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToInt64Checked: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToUInt64Checked : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToUInt64Checked: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToIntPtrChecked : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToIntPtrChecked: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToUIntPtrChecked : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToUIntPtrChecked: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToByteOperator : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToByteOperator: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToSByteOperator : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToSByteOperator: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToInt16Operator : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToInt16Operator: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToUInt16Operator : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToUInt16Operator: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToIntOperator : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToIntOperator: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToInt32Operator : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToInt32Operator: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToUInt32Operator : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToUInt32Operator: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToInt64Operator : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToInt64Operator: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToUInt64Operator : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToUInt64Operator: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToSingleOperator : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToSingleOperator: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToDoubleOperator : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToDoubleOperator: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToIntPtrOperator : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToIntPtrOperator: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToUIntPtrOperator : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToUIntPtrOperator: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToCharOperator : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToCharOperator: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallToEnumOperator : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallToEnumOperator: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallDeserializeQuotationFSharp20Plus : TcGlobals -> range -> Expr -> Expr -> Expr -> Expr -> Expr +val mkCallDeserializeQuotationFSharp20Plus: TcGlobals -> range -> Expr -> Expr -> Expr -> Expr -> Expr -val mkCallDeserializeQuotationFSharp40Plus : TcGlobals -> range -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr +val mkCallDeserializeQuotationFSharp40Plus: TcGlobals -> range -> Expr -> Expr -> Expr -> Expr -> Expr -> Expr -val mkCallCastQuotation : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallCastQuotation: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallLiftValueWithName : TcGlobals -> range -> TType -> string -> Expr -> Expr +val mkCallLiftValueWithName: TcGlobals -> range -> TType -> string -> Expr -> Expr val mkCallLiftValue: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallLiftValueWithDefn : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallLiftValueWithDefn: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallSeqCollect : TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr +val mkCallSeqCollect: TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr -val mkCallSeqUsing : TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr +val mkCallSeqUsing: TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr -val mkCallSeqDelay : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallSeqDelay: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallSeqAppend : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallSeqAppend: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallSeqFinally : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallSeqFinally: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallSeqGenerated : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkCallSeqGenerated: TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallSeqOfFunctions : TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr -> Expr +val mkCallSeqOfFunctions: TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr -> Expr -val mkCallSeqToArray : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallSeqToArray: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallSeqToList : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallSeqToList: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallSeqMap : TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr +val mkCallSeqMap: TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr -val mkCallSeqSingleton : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallSeqSingleton: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallSeqEmpty : TcGlobals -> range -> TType -> Expr +val mkCallSeqEmpty: TcGlobals -> range -> TType -> Expr /// Make a call to the 'isprintf' function for string interpolation val mkCall_sprintf: g: TcGlobals -> m: range -> funcTy: TType -> fmtExpr: Expr -> fillExprs: Expr list -> Expr -val mkILAsmCeq : TcGlobals -> range -> Expr -> Expr -> Expr +val mkILAsmCeq: TcGlobals -> range -> Expr -> Expr -> Expr -val mkILAsmClt : TcGlobals -> range -> Expr -> Expr -> Expr +val mkILAsmClt: TcGlobals -> range -> Expr -> Expr -> Expr -val mkCallFailInit : TcGlobals -> range -> Expr +val mkCallFailInit: TcGlobals -> range -> Expr -val mkCallFailStaticInit : TcGlobals -> range -> Expr +val mkCallFailStaticInit: TcGlobals -> range -> Expr -val mkCallCheckThis : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallCheckThis: TcGlobals -> range -> TType -> Expr -> Expr -val mkCase : DecisionTreeTest * DecisionTree -> DecisionTreeCase +val mkCase: DecisionTreeTest * DecisionTree -> DecisionTreeCase -val mkCallQuoteToLinqLambdaExpression : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallQuoteToLinqLambdaExpression: TcGlobals -> range -> TType -> Expr -> Expr -val mkCallGetQuerySourceAsEnumerable : TcGlobals -> range -> TType -> TType -> Expr -> Expr +val mkCallGetQuerySourceAsEnumerable: TcGlobals -> range -> TType -> TType -> Expr -> Expr -val mkCallNewQuerySource : TcGlobals -> range -> TType -> TType -> Expr -> Expr +val mkCallNewQuerySource: TcGlobals -> range -> TType -> TType -> Expr -> Expr -val mkArray : TType * Exprs * range -> Expr +val mkArray: TType * Exprs * range -> Expr -val mkStaticCall_String_Concat2 : TcGlobals -> range -> Expr -> Expr -> Expr +val mkStaticCall_String_Concat2: TcGlobals -> range -> Expr -> Expr -> Expr -val mkStaticCall_String_Concat3 : TcGlobals -> range -> Expr -> Expr -> Expr -> Expr +val mkStaticCall_String_Concat3: TcGlobals -> range -> Expr -> Expr -> Expr -> Expr -val mkStaticCall_String_Concat4 : TcGlobals -> range -> Expr -> Expr -> Expr -> Expr -> Expr +val mkStaticCall_String_Concat4: TcGlobals -> range -> Expr -> Expr -> Expr -> Expr -> Expr -val mkStaticCall_String_Concat_Array : TcGlobals -> range -> Expr -> Expr +val mkStaticCall_String_Concat_Array: TcGlobals -> range -> Expr -> Expr /// Use a witness in BuiltInWitnesses -val tryMkCallBuiltInWitness : TcGlobals -> TraitConstraintInfo -> Expr list -> range -> Expr option +val tryMkCallBuiltInWitness: TcGlobals -> TraitConstraintInfo -> Expr list -> range -> Expr option /// Use an operator as a witness -val tryMkCallCoreFunctionAsBuiltInWitness : TcGlobals -> IntrinsicValRef -> TType list -> Expr list -> range -> Expr option +val tryMkCallCoreFunctionAsBuiltInWitness: TcGlobals -> IntrinsicValRef -> TType list -> Expr list -> range -> Expr option //------------------------------------------------------------------------- // operations primarily associated with the optimization to fix // up loops to generate .NET code that does not include array bound checks //------------------------------------------------------------------------- -val mkDecr : TcGlobals -> range -> Expr -> Expr +val mkDecr: TcGlobals -> range -> Expr -> Expr -val mkIncr : TcGlobals -> range -> Expr -> Expr +val mkIncr: TcGlobals -> range -> Expr -> Expr -val mkLdlen : TcGlobals -> range -> Expr -> Expr +val mkLdlen: TcGlobals -> range -> Expr -> Expr -val mkLdelem : TcGlobals -> range -> TType -> Expr -> Expr -> Expr +val mkLdelem: TcGlobals -> range -> TType -> Expr -> Expr -> Expr //------------------------------------------------------------------------- // Analyze attribute sets //------------------------------------------------------------------------- -val TryDecodeILAttribute : TcGlobals -> ILTypeRef -> ILAttributes -> (ILAttribElem list * ILAttributeNamedArg list) option +val TryDecodeILAttribute: ILTypeRef -> ILAttributes -> (ILAttribElem list * ILAttributeNamedArg list) option -val TryFindILAttribute : BuiltinAttribInfo -> ILAttributes -> bool +val TryFindILAttribute: BuiltinAttribInfo -> ILAttributes -> bool -val TryFindILAttributeOpt : BuiltinAttribInfo option -> ILAttributes -> bool +val TryFindILAttributeOpt: BuiltinAttribInfo option -> ILAttributes -> bool -val IsMatchingFSharpAttribute : TcGlobals -> BuiltinAttribInfo -> Attrib -> bool +val IsMatchingFSharpAttribute: TcGlobals -> BuiltinAttribInfo -> Attrib -> bool -val IsMatchingFSharpAttributeOpt : TcGlobals -> BuiltinAttribInfo option -> Attrib -> bool +val IsMatchingFSharpAttributeOpt: TcGlobals -> BuiltinAttribInfo option -> Attrib -> bool -val HasFSharpAttribute : TcGlobals -> BuiltinAttribInfo -> Attribs -> bool +val HasFSharpAttribute: TcGlobals -> BuiltinAttribInfo -> Attribs -> bool -val HasFSharpAttributeOpt : TcGlobals -> BuiltinAttribInfo option -> Attribs -> bool +val HasFSharpAttributeOpt: TcGlobals -> BuiltinAttribInfo option -> Attribs -> bool -val TryFindFSharpAttribute : TcGlobals -> BuiltinAttribInfo -> Attribs -> Attrib option +val TryFindFSharpAttribute: TcGlobals -> BuiltinAttribInfo -> Attribs -> Attrib option -val TryFindFSharpAttributeOpt : TcGlobals -> BuiltinAttribInfo option -> Attribs -> Attrib option +val TryFindFSharpAttributeOpt: TcGlobals -> BuiltinAttribInfo option -> Attribs -> Attrib option -val TryFindFSharpBoolAttribute : TcGlobals -> BuiltinAttribInfo -> Attribs -> bool option +val TryFindFSharpBoolAttribute: TcGlobals -> BuiltinAttribInfo -> Attribs -> bool option -val TryFindFSharpBoolAttributeAssumeFalse : TcGlobals -> BuiltinAttribInfo -> Attribs -> bool option +val TryFindFSharpBoolAttributeAssumeFalse: TcGlobals -> BuiltinAttribInfo -> Attribs -> bool option -val TryFindFSharpStringAttribute : TcGlobals -> BuiltinAttribInfo -> Attribs -> string option +val TryFindFSharpStringAttribute: TcGlobals -> BuiltinAttribInfo -> Attribs -> string option -val TryFindFSharpInt32Attribute : TcGlobals -> BuiltinAttribInfo -> Attribs -> int32 option +val TryFindFSharpInt32Attribute: TcGlobals -> BuiltinAttribInfo -> Attribs -> int32 option /// Try to find a specific attribute on a type definition, where the attribute accepts a string argument. /// /// This is used to detect the 'DefaultMemberAttribute' and 'ConditionalAttribute' attributes (on type definitions) -val TryFindTyconRefStringAttribute : TcGlobals -> range -> BuiltinAttribInfo -> TyconRef -> string option +val TryFindTyconRefStringAttribute: TcGlobals -> range -> BuiltinAttribInfo -> TyconRef -> string option /// Try to find a specific attribute on a type definition, where the attribute accepts a bool argument. -val TryFindTyconRefBoolAttribute : TcGlobals -> range -> BuiltinAttribInfo -> TyconRef -> bool option +val TryFindTyconRefBoolAttribute: TcGlobals -> range -> BuiltinAttribInfo -> TyconRef -> bool option /// Try to find a specific attribute on a type definition -val TyconRefHasAttribute : TcGlobals -> range -> BuiltinAttribInfo -> TyconRef -> bool +val TyconRefHasAttribute: TcGlobals -> range -> BuiltinAttribInfo -> TyconRef -> bool /// Try to find the AttributeUsage attribute, looking for the value of the AllowMultiple named parameter -val TryFindAttributeUsageAttribute : TcGlobals -> range -> TyconRef -> bool option +val TryFindAttributeUsageAttribute: TcGlobals -> range -> TyconRef -> bool option #if !NO_EXTENSIONTYPING /// returns Some(assemblyName) for success -val TryDecodeTypeProviderAssemblyAttr : ILGlobals -> ILAttribute -> string option +val TryDecodeTypeProviderAssemblyAttr: ILAttribute -> string option #endif -val IsSignatureDataVersionAttr : ILAttribute -> bool +val IsSignatureDataVersionAttr: ILAttribute -> bool -val TryFindAutoOpenAttr : IL.ILGlobals -> ILAttribute -> string option +val TryFindAutoOpenAttr: ILAttribute -> string option -val TryFindInternalsVisibleToAttr : IL.ILGlobals -> ILAttribute -> string option +val TryFindInternalsVisibleToAttr: ILAttribute -> string option -val IsMatchingSignatureDataVersionAttr : IL.ILGlobals -> ILVersionInfo -> ILAttribute -> bool +val IsMatchingSignatureDataVersionAttr: ILVersionInfo -> ILAttribute -> bool -val mkCompilationMappingAttr : TcGlobals -> int -> ILAttribute -val mkCompilationMappingAttrWithSeqNum : TcGlobals -> int -> int -> ILAttribute +val mkCompilationMappingAttr: TcGlobals -> int -> ILAttribute +val mkCompilationMappingAttrWithSeqNum: TcGlobals -> int -> int -> ILAttribute -val mkCompilationMappingAttrWithVariantNumAndSeqNum : TcGlobals -> int -> int -> int -> ILAttribute +val mkCompilationMappingAttrWithVariantNumAndSeqNum: TcGlobals -> int -> int -> int -> ILAttribute -val mkCompilationMappingAttrForQuotationResource : TcGlobals -> string * ILTypeRef list -> ILAttribute +val mkCompilationMappingAttrForQuotationResource: TcGlobals -> string * ILTypeRef list -> ILAttribute -val mkCompilationArgumentCountsAttr : TcGlobals -> int list -> ILAttribute +val mkCompilationArgumentCountsAttr: TcGlobals -> int list -> ILAttribute -val mkCompilationSourceNameAttr : TcGlobals -> string -> ILAttribute +val mkCompilationSourceNameAttr: TcGlobals -> string -> ILAttribute -val mkSignatureDataVersionAttr : TcGlobals -> ILVersionInfo -> ILAttribute +val mkSignatureDataVersionAttr: TcGlobals -> ILVersionInfo -> ILAttribute -val mkCompilerGeneratedAttr : TcGlobals -> int -> ILAttribute +val mkCompilerGeneratedAttr: TcGlobals -> int -> ILAttribute //------------------------------------------------------------------------- // More common type construction //------------------------------------------------------------------------- -val isInByrefTy : TcGlobals -> TType -> bool +val isInByrefTy: TcGlobals -> TType -> bool -val isOutByrefTy : TcGlobals -> TType -> bool +val isOutByrefTy: TcGlobals -> TType -> bool -val isByrefTy : TcGlobals -> TType -> bool +val isByrefTy: TcGlobals -> TType -> bool -val isNativePtrTy : TcGlobals -> TType -> bool +val isNativePtrTy: TcGlobals -> TType -> bool -val destByrefTy : TcGlobals -> TType -> TType +val destByrefTy: TcGlobals -> TType -> TType -val destNativePtrTy : TcGlobals -> TType -> TType +val destNativePtrTy: TcGlobals -> TType -> TType -val isByrefTyconRef : TcGlobals -> TyconRef -> bool +val isByrefTyconRef: TcGlobals -> TyconRef -> bool -val isByrefLikeTyconRef : TcGlobals -> range -> TyconRef -> bool +val isByrefLikeTyconRef: TcGlobals -> range -> TyconRef -> bool -val isSpanLikeTyconRef : TcGlobals -> range -> TyconRef -> bool +val isSpanLikeTyconRef: TcGlobals -> range -> TyconRef -> bool -val isByrefLikeTy : TcGlobals -> range -> TType -> bool +val isByrefLikeTy: TcGlobals -> range -> TType -> bool /// Check if the type is a byref-like but not a byref. -val isSpanLikeTy : TcGlobals -> range -> TType -> bool +val isSpanLikeTy: TcGlobals -> range -> TType -> bool -val isSpanTy : TcGlobals -> range -> TType -> bool +val isSpanTy: TcGlobals -> range -> TType -> bool -val tryDestSpanTy : TcGlobals -> range -> TType -> struct(TyconRef * TType) voption +val tryDestSpanTy: TcGlobals -> range -> TType -> struct(TyconRef * TType) voption -val destSpanTy : TcGlobals -> range -> TType -> struct(TyconRef * TType) +val destSpanTy: TcGlobals -> range -> TType -> struct(TyconRef * TType) -val isReadOnlySpanTy : TcGlobals -> range -> TType -> bool +val isReadOnlySpanTy: TcGlobals -> range -> TType -> bool -val tryDestReadOnlySpanTy : TcGlobals -> range -> TType -> struct(TyconRef * TType) voption +val tryDestReadOnlySpanTy: TcGlobals -> range -> TType -> struct(TyconRef * TType) voption -val destReadOnlySpanTy : TcGlobals -> range -> TType -> struct(TyconRef * TType) +val destReadOnlySpanTy: TcGlobals -> range -> TType -> struct(TyconRef * TType) //------------------------------------------------------------------------- // Tuple constructors/destructors //------------------------------------------------------------------------- -val isRefTupleExpr : Expr -> bool +val isRefTupleExpr: Expr -> bool -val tryDestRefTupleExpr : Expr -> Exprs +val tryDestRefTupleExpr: Expr -> Exprs -val mkAnyTupledTy : TcGlobals -> TupInfo -> TType list -> TType +val mkAnyTupledTy: TcGlobals -> TupInfo -> TType list -> TType -val mkAnyTupled : TcGlobals -> range -> TupInfo -> Exprs -> TType list -> Expr +val mkAnyTupled: TcGlobals -> range -> TupInfo -> Exprs -> TType list -> Expr -val mkRefTupled : TcGlobals -> range -> Exprs -> TType list -> Expr +val mkRefTupled: TcGlobals -> range -> Exprs -> TType list -> Expr -val mkRefTupledNoTypes : TcGlobals -> range -> Exprs -> Expr +val mkRefTupledNoTypes: TcGlobals -> range -> Exprs -> Expr -val mkRefTupledTy : TcGlobals -> TType list -> TType +val mkRefTupledTy: TcGlobals -> TType list -> TType -val mkRefTupledVarsTy : TcGlobals -> Val list -> TType +val mkRefTupledVarsTy: TcGlobals -> Val list -> TType -val mkRefTupledVars : TcGlobals -> range -> Val list -> Expr +val mkRefTupledVars: TcGlobals -> range -> Val list -> Expr -val mkMethodTy : TcGlobals -> TType list list -> TType -> TType +val mkMethodTy: TcGlobals -> TType list list -> TType -> TType -val mkAnyAnonRecdTy : TcGlobals -> AnonRecdTypeInfo -> TType list -> TType +val mkAnyAnonRecdTy: TcGlobals -> AnonRecdTypeInfo -> TType list -> TType -val mkAnonRecd : TcGlobals -> range -> AnonRecdTypeInfo -> Ident[] -> Exprs -> TType list -> Expr +val mkAnonRecd: TcGlobals -> range -> AnonRecdTypeInfo -> Ident[] -> Exprs -> TType list -> Expr -val AdjustValForExpectedArity : TcGlobals -> range -> ValRef -> ValUseFlag -> ValReprInfo -> Expr * TType +val AdjustValForExpectedArity: TcGlobals -> range -> ValRef -> ValUseFlag -> ValReprInfo -> Expr * TType -val AdjustValToTopVal : Val -> ParentRef -> ValReprInfo -> unit +val AdjustValToTopVal: Val -> ParentRef -> ValReprInfo -> unit -val LinearizeTopMatch : TcGlobals -> ParentRef -> Expr -> Expr +val LinearizeTopMatch: TcGlobals -> ParentRef -> Expr -> Expr -val AdjustPossibleSubsumptionExpr : TcGlobals -> Expr -> Exprs -> (Expr * Exprs) option +val AdjustPossibleSubsumptionExpr: TcGlobals -> Expr -> Exprs -> (Expr * Exprs) option -val NormalizeAndAdjustPossibleSubsumptionExprs : TcGlobals -> Expr -> Expr +val NormalizeAndAdjustPossibleSubsumptionExprs: TcGlobals -> Expr -> Expr //------------------------------------------------------------------------- // XmlDoc signatures, used by both VS mode and XML-help emit //------------------------------------------------------------------------- -val buildAccessPath : CompilationPath option -> string +val buildAccessPath: CompilationPath option -> string -val XmlDocArgsEnc : TcGlobals -> Typars * Typars -> TType list -> string +val XmlDocArgsEnc: TcGlobals -> Typars * Typars -> TType list -> string -val XmlDocSigOfVal : TcGlobals -> full: bool -> string -> Val -> string +val XmlDocSigOfVal: TcGlobals -> full: bool -> string -> Val -> string -val XmlDocSigOfUnionCase : (string list -> string) +val XmlDocSigOfUnionCase: (string list -> string) -val XmlDocSigOfField : (string list -> string) +val XmlDocSigOfField: (string list -> string) -val XmlDocSigOfProperty : (string list -> string) +val XmlDocSigOfProperty: (string list -> string) -val XmlDocSigOfTycon : (string list -> string) +val XmlDocSigOfTycon: (string list -> string) -val XmlDocSigOfSubModul : (string list -> string) +val XmlDocSigOfSubModul: (string list -> string) -val XmlDocSigOfEntity : EntityRef -> string +val XmlDocSigOfEntity: EntityRef -> string //--------------------------------------------------------------------------- // Resolve static optimizations @@ -2259,33 +2268,33 @@ type StaticOptimizationAnswer = | No = -1y | Unknown = 0y -val DecideStaticOptimizations : TcGlobals -> StaticOptimization list -> haveWitnesses: bool -> StaticOptimizationAnswer +val DecideStaticOptimizations: TcGlobals -> StaticOptimization list -> haveWitnesses: bool -> StaticOptimizationAnswer -val mkStaticOptimizationExpr : TcGlobals -> StaticOptimization list * Expr * Expr * range -> Expr +val mkStaticOptimizationExpr: TcGlobals -> StaticOptimization list * Expr * Expr * range -> Expr /// Build for loops -val mkFastForLoop : TcGlobals -> DebugPointAtFor * range * Val * Expr * bool * Expr * Expr -> Expr +val mkFastForLoop: TcGlobals -> DebugPointAtFor * range * Val * Expr * bool * Expr * Expr -> Expr //--------------------------------------------------------------------------- // Active pattern helpers //------------------------------------------------------------------------- type ActivePatternElemRef with - member Name : string + member Name: string -val TryGetActivePatternInfo : ValRef -> PrettyNaming.ActivePatternInfo option +val TryGetActivePatternInfo: ValRef -> PrettyNaming.ActivePatternInfo option -val mkChoiceCaseRef : TcGlobals -> range -> int -> int -> UnionCaseRef +val mkChoiceCaseRef: g: TcGlobals -> m: range -> n: int -> i: int -> UnionCaseRef type PrettyNaming.ActivePatternInfo with - member Names : string list + member Names: string list - member ResultType : TcGlobals -> range -> TType list -> TType + member ResultType: g: TcGlobals -> range -> TType list -> bool -> TType - member OverallType : TcGlobals -> range -> TType -> TType list -> TType + member OverallType: g: TcGlobals -> m: range -> dty: TType -> rtys: TType list -> isStruct: bool -> TType -val doesActivePatternHaveFreeTypars : TcGlobals -> ValRef -> bool +val doesActivePatternHaveFreeTypars: TcGlobals -> ValRef -> bool //--------------------------------------------------------------------------- // Structural rewrites @@ -2298,98 +2307,97 @@ type ExprRewritingEnv = PreInterceptBinding: ((Expr -> Expr) -> Binding -> Binding option) option IsUnderQuotations: bool } -val RewriteExpr : ExprRewritingEnv -> Expr -> Expr +val RewriteExpr: ExprRewritingEnv -> Expr -> Expr -val RewriteImplFile : ExprRewritingEnv -> TypedImplFile -> TypedImplFile +val RewriteImplFile: ExprRewritingEnv -> TypedImplFile -> TypedImplFile val IsGenericValWithGenericConstraints: TcGlobals -> Val -> bool type Entity with - member HasInterface : TcGlobals -> TType -> bool + member HasInterface: TcGlobals -> TType -> bool - member HasOverride : TcGlobals -> string -> TType list -> bool + member HasOverride: TcGlobals -> string -> TType list -> bool - member HasMember : TcGlobals -> string -> TType list -> bool + member HasMember: TcGlobals -> string -> TType list -> bool type EntityRef with - member HasInterface : TcGlobals -> TType -> bool + member HasInterface: TcGlobals -> TType -> bool - member HasOverride : TcGlobals -> string -> TType list -> bool + member HasOverride: TcGlobals -> string -> TType list -> bool - member HasMember : TcGlobals -> string -> TType list -> bool + member HasMember: TcGlobals -> string -> TType list -> bool -val (|AttribBitwiseOrExpr|_|) : TcGlobals -> Expr -> (Expr * Expr) option +val (|AttribBitwiseOrExpr|_|): TcGlobals -> Expr -> (Expr * Expr) option -val (|EnumExpr|_|) : TcGlobals -> Expr -> Expr option +val (|EnumExpr|_|): TcGlobals -> Expr -> Expr option -val (|TypeOfExpr|_|) : TcGlobals -> Expr -> TType option +val (|TypeOfExpr|_|): TcGlobals -> Expr -> TType option -val (|TypeDefOfExpr|_|) : TcGlobals -> Expr -> TType option +val (|TypeDefOfExpr|_|): TcGlobals -> Expr -> TType option val isNameOfValRef: TcGlobals -> ValRef -> bool -val (|NameOfExpr|_|) : TcGlobals -> Expr -> TType option +val (|NameOfExpr|_|): TcGlobals -> Expr -> TType option -val (|SeqExpr|_|) : TcGlobals -> Expr -> unit option +val (|SeqExpr|_|): TcGlobals -> Expr -> unit option val EvalLiteralExprOrAttribArg: TcGlobals -> Expr -> Expr -val EvaledAttribExprEquality : TcGlobals -> Expr -> Expr -> bool +val EvaledAttribExprEquality: TcGlobals -> Expr -> Expr -> bool val IsSimpleSyntacticConstantExpr: TcGlobals -> Expr -> bool val (|ConstToILFieldInit|_|): Const -> ILFieldInit option -val (|ExtractAttribNamedArg|_|) : string -> AttribNamedArg list -> AttribExpr option - -val (|AttribInt32Arg|_|) : AttribExpr -> int32 option +val (|ExtractAttribNamedArg|_|): string -> AttribNamedArg list -> AttribExpr option -val (|AttribInt16Arg|_|) : AttribExpr -> int16 option +val (|AttribInt32Arg|_|): AttribExpr -> int32 option -val (|AttribBoolArg|_|) : AttribExpr -> bool option +val (|AttribInt16Arg|_|): AttribExpr -> int16 option -val (|AttribStringArg|_|) : AttribExpr -> string option +val (|AttribBoolArg|_|): AttribExpr -> bool option -val (|Int32Expr|_|) : Expr -> int32 option +val (|AttribStringArg|_|): AttribExpr -> string option +val (|Int32Expr|_|): Expr -> int32 option /// Determines types that are potentially known to satisfy the 'comparable' constraint and returns /// a set of residual types that must also satisfy the constraint -val (|SpecialComparableHeadType|_|) : TcGlobals -> TType -> TType list option +val (|SpecialComparableHeadType|_|): TcGlobals -> TType -> TType list option -val (|SpecialEquatableHeadType|_|) : TcGlobals -> TType -> TType list option +val (|SpecialEquatableHeadType|_|): TcGlobals -> TType -> TType list option -val (|SpecialNotEquatableHeadType|_|) : TcGlobals -> TType -> unit option +val (|SpecialNotEquatableHeadType|_|): TcGlobals -> TType -> unit option type OptimizeForExpressionOptions = OptimizeIntRangesOnly | OptimizeAllForExpressions -val DetectAndOptimizeForExpression : TcGlobals -> OptimizeForExpressionOptions -> Expr -> Expr +val DetectAndOptimizeForExpression: TcGlobals -> OptimizeForExpressionOptions -> Expr -> Expr -val TryEliminateDesugaredConstants : TcGlobals -> range -> Const -> Expr option +val TryEliminateDesugaredConstants: TcGlobals -> range -> Const -> Expr option -val MemberIsExplicitImpl : TcGlobals -> ValMemberInfo -> bool +val MemberIsExplicitImpl: TcGlobals -> ValMemberInfo -> bool -val ValIsExplicitImpl : TcGlobals -> Val -> bool +val ValIsExplicitImpl: TcGlobals -> Val -> bool -val ValRefIsExplicitImpl : TcGlobals -> ValRef -> bool +val ValRefIsExplicitImpl: TcGlobals -> ValRef -> bool -val (|LinearMatchExpr|_|) : Expr -> (DebugPointForBinding * range * DecisionTree * DecisionTreeTarget * Expr * DebugPointForTarget * range * TType) option +val (|LinearMatchExpr|_|): Expr -> (DebugPointAtBinding * range * DecisionTree * DecisionTreeTarget * Expr * DebugPointForTarget * range * TType) option -val rebuildLinearMatchExpr : (DebugPointForBinding * range * DecisionTree * DecisionTreeTarget * Expr * DebugPointForTarget * range * TType) -> Expr +val rebuildLinearMatchExpr: (DebugPointAtBinding * range * DecisionTree * DecisionTreeTarget * Expr * DebugPointForTarget * range * TType) -> Expr -val (|LinearOpExpr|_|) : Expr -> (TOp * TypeInst * Expr list * Expr * range) option +val (|LinearOpExpr|_|): Expr -> (TOp * TypeInst * Expr list * Expr * range) option -val rebuildLinearOpExpr : (TOp * TypeInst * Expr list * Expr * range) -> Expr +val rebuildLinearOpExpr: (TOp * TypeInst * Expr list * Expr * range) -> Expr -val mkCoerceIfNeeded : TcGlobals -> tgtTy: TType -> srcTy: TType -> Expr -> Expr +val mkCoerceIfNeeded: TcGlobals -> tgtTy: TType -> srcTy: TType -> Expr -> Expr -val (|InnerExprPat|) : Expr -> Expr +val (|InnerExprPat|): Expr -> Expr -val allValsOfModDef : ModuleOrNamespaceExpr -> seq +val allValsOfModDef: ModuleOrNamespaceExpr -> seq -val BindUnitVars : TcGlobals -> (Val list * ArgReprInfo list * Expr) -> Val list * Expr +val BindUnitVars: TcGlobals -> (Val list * ArgReprInfo list * Expr) -> Val list * Expr val isThreadOrContextStatic: TcGlobals -> Attrib list -> bool @@ -2414,7 +2422,7 @@ type TraitWitnessInfoHashMap<'T> = ImmutableDictionary val EmptyTraitWitnessInfoHashMap: TcGlobals -> TraitWitnessInfoHashMap<'T> /// Match expressions that are an application of a particular F# function value -val (|ValApp|_|) : TcGlobals -> ValRef -> Expr -> (TypeInst * Exprs * range) option +val (|ValApp|_|): TcGlobals -> ValRef -> Expr -> (TypeInst * Exprs * range) option val CombineCcuContentFragments: range -> ModuleOrNamespaceType list -> ModuleOrNamespaceType @@ -2442,4 +2450,4 @@ val TryBindTyconRefAttribute: f1:(ILAttribElem list * ILAttributeNamedArg list -> 'a option) -> f2:(Attrib -> 'a option) -> f3:(obj option list * (string * obj option) list -> 'a option) - -> 'a option + -> 'a option diff --git a/src/fsharp/TypedTreePickle.fs b/src/fsharp/TypedTreePickle.fs index 14cb41f75b9..b8325c261d1 100644 --- a/src/fsharp/TypedTreePickle.fs +++ b/src/fsharp/TypedTreePickle.fs @@ -5,27 +5,29 @@ module internal FSharp.Compiler.TypedTreePickle open System.Collections.Generic open System.Text +open FSharp.Compiler.IO open Internal.Utilities +open Internal.Utilities.Collections +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras +open Internal.Utilities.Library.Extras.Bits +open Internal.Utilities.Rational open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Lib -open FSharp.Compiler.Lib.Bits -open FSharp.Compiler.Range -open FSharp.Compiler.Rational -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Text.Position +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Syntax open FSharp.Compiler.SyntaxTreeOps +open FSharp.Compiler.Text +open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TcGlobals -open FSharp.Compiler.XmlDoc - let verbose = false @@ -211,6 +213,11 @@ let p_bytes (s: byte[]) st = p_int32 len st st.os.EmitBytes s +let p_memory (s: System.ReadOnlyMemory) st = + let len = s.Length + p_int32 len st + st.os.EmitMemory s + let p_prim_string (s: string) st = let bytes = Encoding.UTF8.GetBytes s let len = bytes.Length @@ -773,10 +780,13 @@ let p_encoded_simpletyp x st = p_int x st let p_encoded_anoninfo x st = p_int x st let p_simpletyp x st = p_int (encode_simpletyp st.occus st.ostrings st.onlerefs st.osimpletys st.oscope x) st +/// Arbitrary value +[] +let PickleBufferCapacity = 100000 + let pickleObjWithDanglingCcus inMem file g scope p x = - let ccuNameTab, (ntycons, ntypars, nvals, nanoninfos), stringTab, pubpathTab, nlerefTab, simpleTyTab, phase1bytes = - let st1 = - { os = ByteBuffer.Create 100000 + let st1 = + { os = ByteBuffer.Create(PickleBufferCapacity, useArrayPool = true) oscope=scope occus= Table<_>.Create "occus" oentities=NodeOutTable<_, _>.Create((fun (tc: Tycon) -> tc.Stamp), (fun tc -> tc.LogicalName), (fun tc -> tc.Range), (fun osgn -> osgn), "otycons") @@ -791,31 +801,32 @@ let pickleObjWithDanglingCcus inMem file g scope p x = ofile=file oInMem=inMem isStructThisArgPos = false} + let ccuNameTab, (ntycons, ntypars, nvals, nanoninfos), stringTab, pubpathTab, nlerefTab, simpleTyTab, phase1bytes = p x st1 let sizes = st1.oentities.Size, st1.otypars.Size, st1.ovals.Size, st1.oanoninfos.Size - st1.occus, sizes, st1.ostrings, st1.opubpaths, st1.onlerefs, st1.osimpletys, st1.os.Close() - + st1.occus, sizes, st1.ostrings, st1.opubpaths, st1.onlerefs, st1.osimpletys, st1.os.AsMemory() + + let st2 = + { os = ByteBuffer.Create(PickleBufferCapacity, useArrayPool = true) + oscope=scope + occus= Table<_>.Create "occus (fake)" + oentities=NodeOutTable<_, _>.Create((fun (tc: Tycon) -> tc.Stamp), (fun tc -> tc.LogicalName), (fun tc -> tc.Range), (fun osgn -> osgn), "otycons") + otypars=NodeOutTable<_, _>.Create((fun (tp: Typar) -> tp.Stamp), (fun tp -> tp.DisplayName), (fun tp -> tp.Range), (fun osgn -> osgn), "otypars") + ovals=NodeOutTable<_, _>.Create((fun (v: Val) -> v.Stamp), (fun v -> v.LogicalName), (fun v -> v.Range), (fun osgn -> osgn), "ovals") + oanoninfos=NodeOutTable<_, _>.Create((fun (v: AnonRecdTypeInfo) -> v.Stamp), (fun v -> string v.Stamp), (fun _ -> range0), id, "oanoninfos") + ostrings=Table<_>.Create "ostrings (fake)" + opubpaths=Table<_>.Create "opubpaths (fake)" + onlerefs=Table<_>.Create "onlerefs (fake)" + osimpletys=Table<_>.Create "osimpletys (fake)" + oglobals=g + ofile=file + oInMem=inMem + isStructThisArgPos = false } let phase2bytes = - let st2 = - { os = ByteBuffer.Create 100000 - oscope=scope - occus= Table<_>.Create "occus (fake)" - oentities=NodeOutTable<_, _>.Create((fun (tc: Tycon) -> tc.Stamp), (fun tc -> tc.LogicalName), (fun tc -> tc.Range), (fun osgn -> osgn), "otycons") - otypars=NodeOutTable<_, _>.Create((fun (tp: Typar) -> tp.Stamp), (fun tp -> tp.DisplayName), (fun tp -> tp.Range), (fun osgn -> osgn), "otypars") - ovals=NodeOutTable<_, _>.Create((fun (v: Val) -> v.Stamp), (fun v -> v.LogicalName), (fun v -> v.Range), (fun osgn -> osgn), "ovals") - oanoninfos=NodeOutTable<_, _>.Create((fun (v: AnonRecdTypeInfo) -> v.Stamp), (fun v -> string v.Stamp), (fun _ -> range0), id, "oanoninfos") - ostrings=Table<_>.Create "ostrings (fake)" - opubpaths=Table<_>.Create "opubpaths (fake)" - onlerefs=Table<_>.Create "onlerefs (fake)" - osimpletys=Table<_>.Create "osimpletys (fake)" - oglobals=g - ofile=file - oInMem=inMem - isStructThisArgPos = false } p_array p_encoded_ccuref ccuNameTab.AsArray st2 // Add a 4th integer indicated by a negative 1st integer let z1 = if nanoninfos > 0 then -ntycons-1 else ntycons @@ -828,11 +839,14 @@ let pickleObjWithDanglingCcus inMem file g scope p x = (p_array p_encoded_pubpath) (p_array p_encoded_nleref) (p_array p_encoded_simpletyp) - p_bytes + p_memory (stringTab.AsArray, pubpathTab.AsArray, nlerefTab.AsArray, simpleTyTab.AsArray, phase1bytes) st2 - st2.os.Close() - phase2bytes + st2.os + + let finalBytes = phase2bytes + (st1.os :> System.IDisposable).Dispose() + finalBytes let check (ilscope: ILScopeRef) (inMap : NodeInTable<_, _>) = for i = 0 to inMap.Count - 1 do @@ -941,7 +955,7 @@ let u_ILPublicKey st = | 1 -> u_bytes st |> PublicKeyToken | _ -> ufailwith st "u_ILPublicKey" -let u_ILVersion st = +let u_ILVersion st = let (major, minor, build, revision) = u_tup4 u_uint16 u_uint16 u_uint16 u_uint16 st ILVersionInfo(major, minor, build, revision) @@ -1331,7 +1345,7 @@ let p_namemap p = p_Map p_string p let u_Map_core uk uv n st = Map.ofSeq (seq { for _ in 1..n -> (uk st, uv st) }) -let u_Map uk uv st = +let u_Map uk uv st = let n = u_int st u_Map_core uk uv n st @@ -1449,12 +1463,12 @@ let p_kind x st = let p_member_kind x st = p_byte (match x with - | MemberKind.Member -> 0 - | MemberKind.PropertyGet -> 1 - | MemberKind.PropertySet -> 2 - | MemberKind.Constructor -> 3 - | MemberKind.ClassConstructor -> 4 - | MemberKind.PropertyGetSet -> pfailwith st "pickling: MemberKind.PropertyGetSet only expected in parse trees") st + | SynMemberKind.Member -> 0 + | SynMemberKind.PropertyGet -> 1 + | SynMemberKind.PropertySet -> 2 + | SynMemberKind.Constructor -> 3 + | SynMemberKind.ClassConstructor -> 4 + | SynMemberKind.PropertyGetSet -> pfailwith st "pickling: SynMemberKind.PropertyGetSet only expected in parse trees") st let u_kind st = match u_byte st with @@ -1464,14 +1478,14 @@ let u_kind st = let u_member_kind st = match u_byte st with - | 0 -> MemberKind.Member - | 1 -> MemberKind.PropertyGet - | 2 -> MemberKind.PropertySet - | 3 -> MemberKind.Constructor - | 4 -> MemberKind.ClassConstructor + | 0 -> SynMemberKind.Member + | 1 -> SynMemberKind.PropertyGet + | 2 -> SynMemberKind.PropertySet + | 3 -> SynMemberKind.Constructor + | 4 -> SynMemberKind.ClassConstructor | _ -> ufailwith st "u_member_kind" -let p_MemberFlags x st = +let p_MemberFlags (x: SynMemberFlags) st = p_tup6 p_bool p_bool p_bool p_bool p_bool p_member_kind (x.IsInstance, false (* _x3UnusedBoolInFormat *), @@ -1479,7 +1493,7 @@ let p_MemberFlags x st = x.IsOverrideOrExplicitImpl, x.IsFinal, x.MemberKind) st -let u_MemberFlags st = +let u_MemberFlags st : SynMemberFlags= let x2, _x3UnusedBoolInFormat, x4, x5, x6, x7 = u_tup6 u_bool u_bool u_bool u_bool u_bool u_member_kind st { IsInstance=x2 IsDispatchSlot=x4 @@ -2441,7 +2455,7 @@ and u_dtree_discrim st = and u_target st = let a, b = u_tup2 u_Vals u_expr st in (TTarget(a, b, DebugPointForTarget.No)) -and u_bind st = let a = u_Val st in let b = u_expr st in TBind(a, b, NoDebugPointAtStickyBinding) +and u_bind st = let a = u_Val st in let b = u_expr st in TBind(a, b, DebugPointAtBinding.NoneAtSticky) and u_lval_op_kind st = match u_byte st with @@ -2642,7 +2656,7 @@ and u_expr st = let c = u_targets st let d = u_dummy_range st let e = u_ty st - Expr.Match (NoDebugPointAtStickyBinding, a, b, c, d, e) + Expr.Match (DebugPointAtBinding.NoneAtSticky, a, b, c, d, e) | 10 -> let b = u_ty st let c = (u_option u_Val) st let d = u_expr st @@ -2666,7 +2680,7 @@ and u_expr st = | 14 -> let traitInfo = u_trait st let m = u_dummy_range st - Expr.WitnessArg (traitInfo, m) + Expr.WitnessArg (traitInfo, m) | _ -> ufailwith st "u_expr" and p_static_optimization_constraint x st = diff --git a/src/fsharp/TypedTreePickle.fsi b/src/fsharp/TypedTreePickle.fsi index b5d1547430b..5a2ade30289 100644 --- a/src/fsharp/TypedTreePickle.fsi +++ b/src/fsharp/TypedTreePickle.fsi @@ -1,31 +1,33 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// Defines the framework for serializing and de-serializing TAST data structures as binary blobs for the F# metadata format. -module internal FSharp.Compiler.TypedTreePickle +module internal FSharp.Compiler.TypedTreePickle +open FSharp.Compiler.IO +open Internal.Utilities +open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.TypedTree open FSharp.Compiler.TcGlobals /// Represents deserialized data with a dangling set of CCU fixup thunks indexed by name [] -type PickledDataWithReferences<'RawData> = +type PickledDataWithReferences<'RawData> = { /// The data that uses a collection of CcuThunks internally - RawData: 'RawData + RawData: 'RawData /// The assumptions that need to be fixed up FixupThunks: CcuThunk [] - } + } member Fixup : (CcuReference -> CcuThunk) -> 'RawData + /// Like Fixup but loader may return None, in which case there is no fixup. member OptionalFixup: (CcuReference -> CcuThunk option) -> 'RawData - + /// The type of state written to by picklers -type WriterState +type WriterState /// A function to pickle a value into a given stateful writer type pickler<'T> = 'T -> WriterState -> unit @@ -82,10 +84,10 @@ val internal p_ty : pickler val internal pickleCcuInfo : pickler /// Serialize an arbitrary object using the given pickler -val pickleObjWithDanglingCcus : inMem: bool -> file: string -> TcGlobals -> scope:CcuThunk -> pickler<'T> -> 'T -> byte[] +val pickleObjWithDanglingCcus : inMem: bool -> file: string -> TcGlobals -> scope:CcuThunk -> pickler<'T> -> 'T -> ByteBuffer /// The type of state unpicklers read from -type ReaderState +type ReaderState /// A function to read a value from a given state type unpickler<'T> = ReaderState -> 'T @@ -132,7 +134,7 @@ val internal u_tcref : unpickler /// Deserialize a TAST union case reference val internal u_ucref : unpickler -/// Deserialize a TAST expression +/// Deserialize a TAST expression val internal u_expr : unpickler /// Deserialize a TAST type @@ -143,6 +145,3 @@ val internal unpickleCcuInfo : ReaderState -> PickledCcuInfo /// Deserialize an arbitrary object which may have holes referring to other compilation units val internal unpickleObjWithDanglingCcus : file:string -> viewedScope:ILScopeRef -> ilModule:ILModuleDef option -> ('T unpickler) -> ReadOnlyByteMemory -> PickledDataWithReferences<'T> - - - diff --git a/src/fsharp/UnicodeLexing.fs b/src/fsharp/UnicodeLexing.fs index e2c9ed7df65..99ee27ff721 100644 --- a/src/fsharp/UnicodeLexing.fs +++ b/src/fsharp/UnicodeLexing.fs @@ -1,28 +1,25 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. +/// Functions for Unicode char-based lexing module internal FSharp.Compiler.UnicodeLexing -//------------------------------------------------------------------ -// Functions for Unicode char-based lexing (new code). -// - open System.IO open Internal.Utilities.Text.Lexing type Lexbuf = LexBuffer -let StringAsLexbuf (supportsFeature, s: string) = - LexBuffer.FromChars (supportsFeature, s.ToCharArray()) +let StringAsLexbuf (reportLibraryOnlyFeatures, supportsFeature, s: string) = + LexBuffer.FromChars (reportLibraryOnlyFeatures, supportsFeature, s.ToCharArray()) -let FunctionAsLexbuf (supportsFeature, bufferFiller) = - LexBuffer.FromFunction(supportsFeature, bufferFiller) +let FunctionAsLexbuf (reportLibraryOnlyFeatures, supportsFeature, bufferFiller) = + LexBuffer.FromFunction(reportLibraryOnlyFeatures, supportsFeature, bufferFiller) -let SourceTextAsLexbuf (supportsFeature, sourceText) = - LexBuffer.FromSourceText(supportsFeature, sourceText) +let SourceTextAsLexbuf (reportLibraryOnlyFeatures, supportsFeature, sourceText) = + LexBuffer.FromSourceText(reportLibraryOnlyFeatures, supportsFeature, sourceText) -let StreamReaderAsLexbuf (supportsFeature, reader: StreamReader) = +let StreamReaderAsLexbuf (reportLibraryOnlyFeatures, supportsFeature, reader: StreamReader) = let mutable isFinished = false - FunctionAsLexbuf (supportsFeature, fun (chars, start, length) -> + FunctionAsLexbuf (reportLibraryOnlyFeatures, supportsFeature, fun (chars, start, length) -> if isFinished then 0 else let nBytesRead = reader.Read(chars, start, length) diff --git a/src/fsharp/UnicodeLexing.fsi b/src/fsharp/UnicodeLexing.fsi index 1885d246b78..838b96a6a11 100644 --- a/src/fsharp/UnicodeLexing.fsi +++ b/src/fsharp/UnicodeLexing.fsi @@ -7,13 +7,13 @@ open FSharp.Compiler.Features open FSharp.Compiler.Text open Internal.Utilities.Text.Lexing -type Lexbuf = LexBuffer +type Lexbuf = LexBuffer -val internal StringAsLexbuf: (LanguageFeature -> bool) * string -> Lexbuf +val internal StringAsLexbuf: reportLibraryOnlyFeatures: bool * (LanguageFeature -> bool) * string -> Lexbuf -val public FunctionAsLexbuf: (LanguageFeature -> bool) * (char [] * int * int -> int) -> Lexbuf +val public FunctionAsLexbuf: reportLibraryOnlyFeatures: bool * (LanguageFeature -> bool) * (char [] * int * int -> int) -> Lexbuf -val public SourceTextAsLexbuf: (LanguageFeature -> bool) * ISourceText -> Lexbuf +val public SourceTextAsLexbuf: reportLibraryOnlyFeatures: bool * (LanguageFeature -> bool) * ISourceText -> Lexbuf /// Will not dispose of the stream reader. -val public StreamReaderAsLexbuf: (LanguageFeature -> bool) * StreamReader -> Lexbuf +val public StreamReaderAsLexbuf: reportLibraryOnlyFeatures: bool * (LanguageFeature -> bool) * StreamReader -> Lexbuf diff --git a/src/fsharp/XmlAdapters.fs b/src/fsharp/XmlAdapters.fs index 908f5f059ff..f4bde8561b7 100644 --- a/src/fsharp/XmlAdapters.fs +++ b/src/fsharp/XmlAdapters.fs @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.XmlAdapters +module internal Internal.Utilities.XmlAdapters //Replacement for: System.Security.SecurityElement.Escape(line) All platforms let s_escapeChars = [| '<'; '>'; '\"'; '\''; '&' |] diff --git a/src/fsharp/XmlAdapters.fsi b/src/fsharp/XmlAdapters.fsi index 9b2f4f68188..eb45763930c 100644 --- a/src/fsharp/XmlAdapters.fsi +++ b/src/fsharp/XmlAdapters.fsi @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.XmlAdapters +module internal Internal.Utilities.XmlAdapters val s_escapeChars : char [] diff --git a/src/fsharp/XmlDoc.fs b/src/fsharp/XmlDoc.fs index f4404e66314..3236e7c2f66 100644 --- a/src/fsharp/XmlDoc.fs +++ b/src/fsharp/XmlDoc.fs @@ -1,13 +1,19 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module public FSharp.Compiler.XmlDoc +namespace FSharp.Compiler.Xml open System +open System.IO +open System.Xml open System.Xml.Linq +open Internal.Utilities.Library +open Internal.Utilities.Collections open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Lib -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.Range +open FSharp.Compiler.IO +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Position +open FSharp.Compiler.Text.Range +open FSharp.Compiler.AbstractIL.IL /// Represents collected XmlDoc lines [] @@ -19,9 +25,9 @@ type XmlDoc(unprocessedLines: string[], range: range) = let lineAT = lineA.TrimStart([|' '|]) if lineAT = "" then processLines rest elif lineAT.StartsWithOrdinal("<") then lines - else + else [""] @ - (lines |> List.map FSharp.Compiler.XmlAdapters.escape) @ + (lines |> List.map Internal.Utilities.XmlAdapters.escape) @ [""] /// Get the lines before insertion of implicit summary tags and encoding @@ -38,16 +44,16 @@ type XmlDoc(unprocessedLines: string[], range: range) = member _.Range = range static member Empty = XmlDocStatics.Empty - + member _.IsEmpty = unprocessedLines |> Array.forall String.IsNullOrWhiteSpace member doc.NonEmpty = not doc.IsEmpty - - static member Merge (doc1: XmlDoc) (doc2: XmlDoc) = + + static member Merge (doc1: XmlDoc) (doc2: XmlDoc) = XmlDoc(Array.append doc1.UnprocessedLines doc2.UnprocessedLines, unionRanges doc1.Range doc2.Range) - + member doc.GetXmlText() = if doc.IsEmpty then "" else @@ -60,29 +66,29 @@ type XmlDoc(unprocessedLines: string[], range: range) = let xml = XDocument.Parse("\n"+doc.GetXmlText()+"\n", LoadOptions.SetLineInfo ||| LoadOptions.PreserveWhitespace) - - // The parameter names are checked for consistency, so parameter references and + + // The parameter names are checked for consistency, so parameter references and // parameter documentation must match an actual parameter. In addition, if any parameters // have documentation then all parameters must have documentation - match paramNamesOpt with + match paramNamesOpt with | None -> () - | Some paramNames -> + | Some paramNames -> for p in xml.Descendants(XName.op_Implicit "param") do - match p.Attribute(XName.op_Implicit "name") with - | null -> + match p.Attribute(XName.op_Implicit "name") with + | null -> warning (Error (FSComp.SR.xmlDocMissingParameterName(), doc.Range)) - | attr -> + | attr -> let nm = attr.Value if not (paramNames |> List.contains nm) then warning (Error (FSComp.SR.xmlDocInvalidParameterName(nm), doc.Range)) - let paramsWithDocs = + let paramsWithDocs = [ for p in xml.Descendants(XName.op_Implicit "param") do - match p.Attribute(XName.op_Implicit "name") with + match p.Attribute(XName.op_Implicit "name") with | null -> () | attr -> attr.Value ] - if paramsWithDocs.Length > 0 then + if paramsWithDocs.Length > 0 then for p in paramNames do if not (paramsWithDocs |> List.contains p) then warning (Error (FSComp.SR.xmlDocMissingParameter(p), doc.Range)) @@ -93,38 +99,38 @@ type XmlDoc(unprocessedLines: string[], range: range) = warning (Error (FSComp.SR.xmlDocDuplicateParameter(d), doc.Range)) for pref in xml.Descendants(XName.op_Implicit "paramref") do - match pref.Attribute(XName.op_Implicit "name") with + match pref.Attribute(XName.op_Implicit "name") with | null -> warning (Error (FSComp.SR.xmlDocMissingParameterName(), doc.Range)) - | attr -> + | attr -> let nm = attr.Value if not (paramNames |> List.contains nm) then warning (Error (FSComp.SR.xmlDocInvalidParameterName(nm), doc.Range)) - with e -> + with e -> warning (Error (FSComp.SR.xmlDocBadlyFormed(e.Message), doc.Range)) #if CREF_ELABORATION member doc.Elaborate (crefResolver) = - for see in seq { yield! xml.Descendants(XName.op_Implicit "see") + for see in seq { yield! xml.Descendants(XName.op_Implicit "see") yield! xml.Descendants(XName.op_Implicit "seealso") yield! xml.Descendants(XName.op_Implicit "exception") } do - match see.Attribute(XName.op_Implicit "cref") with + match see.Attribute(XName.op_Implicit "cref") with | null -> warning (Error (FSComp.SR.xmlDocMissingCrossReference(), doc.Range)) - | attr -> + | attr -> let cref = attr.Value - if cref.StartsWith("T:") || cref.StartsWith("P:") || cref.StartsWith("M:") || - cref.StartsWith("E:") || cref.StartsWith("F:") then + if cref.StartsWith("T:") || cref.StartsWith("P:") || cref.StartsWith("M:") || + cref.StartsWith("E:") || cref.StartsWith("F:") then () else - match crefResolver cref with + match crefResolver cref with | None -> warning (Error (FSComp.SR.xmlDocUnresolvedCrossReference(nm), doc.Range)) - | Some text -> + | Some text -> attr.Value <- text modified <- true - if modified then - let m = doc.Range - let newLines = + if modified then + let m = doc.Range + let newLines = [| for e in xml.Elements() do yield! e.ToString().Split([| '\r'; '\n' |], StringSplitOptions.RemoveEmptyEntries) |] lines <- newLines @@ -181,23 +187,25 @@ type XmlDocCollector() = /// Represents the XmlDoc fragments as collected from the lexer during parsing type PreXmlDoc = + | PreXmlDirect of unprocessedLines: string[] * range: range | PreXmlMerge of PreXmlDoc * PreXmlDoc | PreXmlDoc of pos * XmlDocCollector | PreXmlDocEmpty - member x.ToXmlDoc(check, paramNamesOpt: string list option) = + member x.ToXmlDoc(check: bool, paramNamesOpt: string list option) = match x with + | PreXmlDirect (lines, m) -> XmlDoc(lines, m) | PreXmlMerge(a, b) -> XmlDoc.Merge (a.ToXmlDoc(check, paramNamesOpt)) (b.ToXmlDoc(check, paramNamesOpt)) | PreXmlDocEmpty -> XmlDoc.Empty | PreXmlDoc (pos, collector) -> let preLines = collector.LinesBefore pos if preLines.Length = 0 then XmlDoc.Empty - else + else let lines = Array.map fst preLines let m = Array.reduce Range.unionRanges (Array.map snd preLines) let doc = XmlDoc (lines, m) - if check then + if check then doc.Check(paramNamesOpt) doc @@ -207,5 +215,65 @@ type PreXmlDoc = static member Empty = PreXmlDocEmpty + static member Create(unprocessedLines, range) = PreXmlDirect(unprocessedLines, range) + static member Merge a b = PreXmlMerge (a, b) +[] +type XmlDocumentationInfo private (tryGetXmlDocument: unit -> XmlDocument option) = + + // 2 and 4 are arbitrary but should be reasonable enough + [] + static let cacheStrongSize = 2 + [] + static let cacheMaxSize = 4 + static let cacheAreSimilar = + fun ((str1: string, dt1: DateTime), (str2: string, dt2: DateTime)) -> + str1.Equals(str2, StringComparison.OrdinalIgnoreCase) && + dt1 = dt2 + static let cache = AgedLookup(keepStrongly=cacheStrongSize, areSimilar=cacheAreSimilar, keepMax=cacheMaxSize) + + let tryGetSummaryNode xmlDocSig = + tryGetXmlDocument() + |> Option.bind (fun doc -> + match doc.SelectSingleNode(sprintf "doc/members/member[@name='%s']" xmlDocSig) with + | null -> None + | node when node.HasChildNodes -> Some node + | _ -> None) + + member _.TryGetXmlDocBySig(xmlDocSig: string) = + tryGetSummaryNode xmlDocSig + |> Option.map (fun node -> + let childNodes = node.ChildNodes + let lines = Array.zeroCreate childNodes.Count + for i = 0 to childNodes.Count - 1 do + let childNode = childNodes.[i] + lines.[i] <- childNode.OuterXml + XmlDoc(lines, range0) + ) + + static member TryCreateFromFile(xmlFileName: string) = + if not (FileSystem.FileExistsShim(xmlFileName)) || not (String.Equals(Path.GetExtension(xmlFileName), ".xml", StringComparison.OrdinalIgnoreCase)) then + None + else + let tryGetXmlDocument = + fun () -> + try + let lastWriteTime = FileSystem.GetLastWriteTimeShim(xmlFileName) + let cacheKey = (xmlFileName, lastWriteTime) + match cache.TryGet((), cacheKey) with + | Some doc -> Some doc + | _ -> + let doc = XmlDocument() + use xmlStream = FileSystem.OpenFileForReadShim(xmlFileName) + doc.Load(xmlStream) + cache.Put((), cacheKey, doc) + Some doc + with + | _ -> + None + Some(XmlDocumentationInfo(tryGetXmlDocument)) + +type IXmlDocumentationInfoLoader = + + abstract TryLoad : assemblyFileName: string * ILModuleDef -> XmlDocumentationInfo option diff --git a/src/fsharp/XmlDoc.fsi b/src/fsharp/XmlDoc.fsi index 69f12953493..17662aaa9ae 100644 --- a/src/fsharp/XmlDoc.fsi +++ b/src/fsharp/XmlDoc.fsi @@ -1,22 +1,27 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module public FSharp.Compiler.XmlDoc +namespace FSharp.Compiler.Xml -open FSharp.Compiler.Range +open System.Xml +open FSharp.Compiler.Text +open FSharp.Compiler.AbstractIL.IL /// Represents collected XmlDoc lines [] -type XmlDoc = +type public XmlDoc = new: unprocessedLines:string [] * range:range -> XmlDoc + /// Merge two XML documentation static member Merge: doc1:XmlDoc -> doc2:XmlDoc -> XmlDoc - member Check: paramNamesOpt:string list option -> unit + /// Check the XML documentation + member internal Check: paramNamesOpt:string list option -> unit /// Get the lines after insertion of implicit summary tags and encoding member GetElaboratedXmlLines: unit -> string [] + /// Get the elaborated XML documentation as XML text member GetXmlText: unit -> string member IsEmpty: bool @@ -31,26 +36,37 @@ type XmlDoc = static member Empty: XmlDoc /// Used to collect XML documentation during lexing and parsing. -type XmlDocCollector = +type internal XmlDocCollector = new: unit -> XmlDocCollector - member AddGrabPoint: pos:pos -> unit + member AddGrabPoint: pos: pos -> unit member AddXmlDocLine: line:string * range:range -> unit - member LinesBefore: grabPointPos:pos -> (string * range) [] + member LinesBefore: grabPointPos: pos -> (string * range) [] /// Represents the XmlDoc fragments as collected from the lexer during parsing -type PreXmlDoc = - | PreXmlMerge of PreXmlDoc * PreXmlDoc - | PreXmlDoc of pos * XmlDocCollector - | PreXmlDocEmpty +[] +type public PreXmlDoc = - static member CreateFromGrabPoint: collector:XmlDocCollector * grabPointPos:pos -> PreXmlDoc + static member internal CreateFromGrabPoint: collector:XmlDocCollector * grabPointPos: pos -> PreXmlDoc static member Merge: a:PreXmlDoc -> b:PreXmlDoc -> PreXmlDoc + + static member Create: unprocessedLines:string [] * range:range -> PreXmlDoc member ToXmlDoc: check:bool * paramNamesOpt:string list option -> XmlDoc static member Empty: PreXmlDoc + +[] +type internal XmlDocumentationInfo = + + member TryGetXmlDocBySig : xmlDocSig: string -> XmlDoc option + + static member TryCreateFromFile : xmlFileName: string -> XmlDocumentationInfo option + +type internal IXmlDocumentationInfoLoader = + + abstract TryLoad : assemblyFileName: string * ILModuleDef -> XmlDocumentationInfo option diff --git a/src/fsharp/XmlDocFileWriter.fs b/src/fsharp/XmlDocFileWriter.fs index b396d622b10..09fef99f9f5 100644 --- a/src/fsharp/XmlDocFileWriter.fs +++ b/src/fsharp/XmlDocFileWriter.fs @@ -4,33 +4,32 @@ module internal FSharp.Compiler.XmlDocFileWriter open System.IO open System.Reflection -open Internal.Utilities -open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Library open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Lib -open FSharp.Compiler.Range +open FSharp.Compiler.IO +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.XmlDoc module XmlDocWriter = let hasDoc (doc: XmlDoc) = not doc.IsEmpty - + let ComputeXmlDocSigs (tcGlobals, generatedCcu: CcuThunk) = let g = tcGlobals let doValSig ptext (v: Val) = if hasDoc v.XmlDoc then v.XmlDocSig <- XmlDocSigOfVal g false ptext v - let doTyconSig ptext (tc: Tycon) = + let doTyconSig ptext (tc: Tycon) = if (hasDoc tc.XmlDoc) then tc.XmlDocSig <- XmlDocSigOfTycon [ptext; tc.CompiledName] - for vref in tc.MembersOfFSharpTyconSorted do + for vref in tc.MembersOfFSharpTyconSorted do doValSig ptext vref.Deref for uc in tc.UnionCasesArray do if (hasDoc uc.XmlDoc) then uc.XmlDocSig <- XmlDocSigOfUnionCase [ptext; tc.CompiledName; uc.Id.idText] for rf in tc.AllFieldsArray do if (hasDoc rf.XmlDoc) then rf.XmlDocSig <- - if tc.IsRecordTycon && (not rf.IsStatic) then + if tc.IsRecordTycon && (not rf.IsStatic) then // represents a record field, which is exposed as a property XmlDocSigOfProperty [ptext; tc.CompiledName; rf.Id.idText] else @@ -38,76 +37,75 @@ module XmlDocWriter = let doModuleMemberSig path (m: ModuleOrNamespace) = m.XmlDocSig <- XmlDocSigOfSubModul [path] (* moduleSpec - recurses *) - let rec doModuleSig path (mspec: ModuleOrNamespace) = + let rec doModuleSig path (mspec: ModuleOrNamespace) = let mtype = mspec.ModuleOrNamespaceType - let path = + let path = (* skip the first item in the path which is the assembly name *) - match path with + match path with | None -> Some "" | 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 - let vals = + let vals = mtype.AllValsAndMembers |> Seq.toList - |> List.filter (fun x -> not x.IsCompilerGenerated) + |> 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 (doTyconSig ptext) mtype.TypeDefinitions - - doModuleSig None generatedCcu.Contents + + doModuleSig None generatedCcu.Contents let WriteXmlDocFile (assemblyName, generatedCcu: CcuThunk, xmlfile) = - if not (Filename.hasSuffixCaseInsensitive "xml" xmlfile ) then + if not (FileSystemUtils.hasSuffixCaseInsensitive "xml" xmlfile ) then error(Error(FSComp.SR.docfileNoXmlSuffix(), Range.rangeStartup)) let mutable members = [] - let addMember id xmlDoc = + let addMember id xmlDoc = if hasDoc xmlDoc then let doc = xmlDoc.GetXmlText() members <- (id, doc) :: members let doVal (v: Val) = addMember v.XmlDocSig v.XmlDoc let doUnionCase (uc: UnionCase) = addMember uc.XmlDocSig uc.XmlDoc let doField (rf: RecdField) = addMember rf.XmlDocSig rf.XmlDoc - let doTycon (tc: Tycon) = + let doTycon (tc: Tycon) = addMember tc.XmlDocSig tc.XmlDoc - for vref in tc.MembersOfFSharpTyconSorted do - doVal vref.Deref + for vref in tc.MembersOfFSharpTyconSorted do + doVal vref.Deref for uc in tc.UnionCasesArray do doUnionCase uc for rf in tc.AllFieldsArray do doField rf let modulMember (m: ModuleOrNamespace) = addMember m.XmlDocSig m.XmlDoc - - let rec doModule (mspec: ModuleOrNamespace) = + + let rec doModule (mspec: ModuleOrNamespace) = let mtype = mspec.ModuleOrNamespaceType if mspec.IsModule then modulMember mspec - let vals = + let vals = mtype.AllValsAndMembers |> Seq.toList - |> List.filter (fun x -> not x.IsCompilerGenerated) + |> 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 doTycon mtype.TypeDefinitions - + doModule generatedCcu.Contents - use os = File.CreateText xmlfile + use os = FileSystem.OpenFileForWriteShim(xmlfile, FileMode.OpenOrCreate).GetWriter() fprintfn os ("") fprintfn os ("") fprintfn os ("%s") assemblyName fprintfn os ("") - members |> List.iter (fun (id, doc) -> + members |> List.iter (fun (id, doc) -> fprintfn os "" id fprintfn os "%s" doc fprintfn os "") - fprintfn os "" - fprintfn os "" - + fprintfn os "" + fprintfn os "" diff --git a/src/fsharp/XmlDocFileWriter.fsi b/src/fsharp/XmlDocFileWriter.fsi index 7d30366ecb8..23319eae40e 100644 --- a/src/fsharp/XmlDocFileWriter.fsi +++ b/src/fsharp/XmlDocFileWriter.fsi @@ -7,6 +7,12 @@ open FSharp.Compiler.TcGlobals module XmlDocWriter = + /// Writes the XML document signature to the XmlDocSig property of each + /// element (field, union case, etc) of the specified compilation unit. + /// The XmlDocSig is the unique identifier of this XmlDoc in the generated Xml documentation file. + /// The full format is described at https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/documentation-comments#id-string-format val ComputeXmlDocSigs: tcGlobals: TcGlobals * generatedCcu: CcuThunk -> unit + /// Writes the XmlDocSig property of each element (field, union case, etc) + /// of the specified compilation unit to an XML document in a new text file. val WriteXmlDocFile: assemblyName: string * generatedCcu: CcuThunk * xmlfile: string -> unit diff --git a/src/fsharp/absil/bytes.fs b/src/fsharp/absil/bytes.fs index 7d231337d63..ef5556513c9 100644 --- a/src/fsharp/absil/bytes.fs +++ b/src/fsharp/absil/bytes.fs @@ -1,566 +1,8 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// Byte arrays -namespace FSharp.Compiler.AbstractIL.Internal +namespace FSharp.Compiler.IO -open System -open System.IO -open System.IO.MemoryMappedFiles -open System.Runtime.InteropServices -open System.Runtime.CompilerServices -open FSharp.NativeInterop -#nowarn "9" - -module Utils = - let runningOnMono = - #if ENABLE_MONO_SUPPORT - // Officially supported way to detect if we are running on Mono. - // See http://www.mono-project.com/FAQ:_Technical - // "How can I detect if am running in Mono?" section - try - System.Type.GetType ("Mono.Runtime") <> null - with _ -> - // Must be robust in the case that someone else has installed a handler into System.AppDomain.OnTypeResolveEvent - // that is not reliable. - // This is related to bug 5506--the issue is actually a bug in VSTypeResolutionService.EnsurePopulated which is - // called by OnTypeResolveEvent. The function throws a NullReferenceException. I'm working with that team to get - // their issue fixed but we need to be robust here anyway. - false - #else - false - #endif - -module internal Bytes = - let b0 n = (n &&& 0xFF) - let b1 n = ((n >>> 8) &&& 0xFF) - let b2 n = ((n >>> 16) &&& 0xFF) - let b3 n = ((n >>> 24) &&& 0xFF) - - let dWw1 n = int32 ((n >>> 32) &&& 0xFFFFFFFFL) - let dWw0 n = int32 (n &&& 0xFFFFFFFFL) - - let get (b:byte[]) n = int32 (Array.get b n) - let zeroCreate n : byte[] = Array.zeroCreate n - - let sub ( b:byte[]) s l = Array.sub b s l - let blit (a:byte[]) b c d e = Array.blit a b c d e - - let ofInt32Array (arr:int[]) = Array.init arr.Length (fun i -> byte arr.[i]) - - let stringAsUtf8NullTerminated (s:string) = - Array.append (System.Text.Encoding.UTF8.GetBytes s) (ofInt32Array [| 0x0 |]) - - let stringAsUnicodeNullTerminated (s:string) = - Array.append (System.Text.Encoding.Unicode.GetBytes s) (ofInt32Array [| 0x0;0x0 |]) - -[] -type ByteMemory () = - - abstract Item: int -> byte with get, set - - abstract Length: int - - abstract ReadBytes: pos: int * count: int -> byte[] - - abstract ReadInt32: pos: int -> int - - abstract ReadUInt16: pos: int -> uint16 - - abstract ReadUtf8String: pos: int * count: int -> string - - abstract Slice: pos: int * count: int -> ByteMemory - - abstract CopyTo: Stream -> unit - - abstract Copy: srcOffset: int * dest: byte[] * destOffset: int * count: int -> unit - - abstract ToArray: unit -> byte[] - - abstract AsStream: unit -> Stream - - abstract AsReadOnlyStream: unit -> Stream - -[] -type ByteArrayMemory(bytes: byte[], offset, length) = - inherit ByteMemory() - - let checkCount count = - if count < 0 then - raise (ArgumentOutOfRangeException("count", "Count is less than zero.")) - - do - if length < 0 || length > bytes.Length then - raise (ArgumentOutOfRangeException("length")) - - if offset < 0 || (offset + length) > bytes.Length then - raise (ArgumentOutOfRangeException("offset")) - - override _.Item - with get i = bytes.[offset + i] - and set i v = bytes.[offset + i] <- v - - override _.Length = length - - override _.ReadBytes(pos, count) = - checkCount count - if count > 0 then - Array.sub bytes (offset + pos) count - else - Array.empty - - override _.ReadInt32 pos = - let finalOffset = offset + pos - (uint32 bytes.[finalOffset]) ||| - ((uint32 bytes.[finalOffset + 1]) <<< 8) ||| - ((uint32 bytes.[finalOffset + 2]) <<< 16) ||| - ((uint32 bytes.[finalOffset + 3]) <<< 24) - |> int - - override _.ReadUInt16 pos = - let finalOffset = offset + pos - (uint16 bytes.[finalOffset]) ||| - ((uint16 bytes.[finalOffset + 1]) <<< 8) - - override _.ReadUtf8String(pos, count) = - checkCount count - if count > 0 then - System.Text.Encoding.UTF8.GetString(bytes, offset + pos, count) - else - String.Empty - - override _.Slice(pos, count) = - checkCount count - if count > 0 then - ByteArrayMemory(bytes, offset + pos, count) :> ByteMemory - else - ByteArrayMemory(Array.empty, 0, 0) :> ByteMemory - - override _.CopyTo stream = - if length > 0 then - stream.Write(bytes, offset, length) - - override _.Copy(srcOffset, dest, destOffset, count) = - checkCount count - if count > 0 then - Array.blit bytes (offset + srcOffset) dest destOffset count - - override _.ToArray() = - if length > 0 then - Array.sub bytes offset length - else - Array.empty - - override _.AsStream() = - if length > 0 then - new MemoryStream(bytes, offset, length) :> Stream - else - new MemoryStream([||], 0, 0, false) :> Stream - - override _.AsReadOnlyStream() = - if length > 0 then - new MemoryStream(bytes, offset, length, false) :> Stream - else - new MemoryStream([||], 0, 0, false) :> Stream - -[] -type SafeUnmanagedMemoryStream = - inherit UnmanagedMemoryStream - - val mutable private holder: obj - val mutable private isDisposed: bool - - new (addr, length, holder) = - { - inherit UnmanagedMemoryStream(addr, length) - holder = holder - isDisposed = false - } - - new (addr: nativeptr, length: int64, capacity: int64, access: FileAccess, holder) = - { - inherit UnmanagedMemoryStream(addr, length, capacity, access) - holder = holder - isDisposed = false - } - - override x.Dispose disposing = - base.Dispose disposing - x.holder <- null // Null out so it can be collected. - -type RawByteMemory(addr: nativeptr, length: int, holder: obj) = - inherit ByteMemory () - - let check i = - if i < 0 || i >= length then - raise (ArgumentOutOfRangeException("i")) - - let checkCount count = - if count < 0 then - raise (ArgumentOutOfRangeException("count", "Count is less than zero.")) - - do - if length < 0 then - raise (ArgumentOutOfRangeException("length")) - - override _.Item - with get i = - check i - NativePtr.add addr i - |> NativePtr.read - and set i v = - check i - NativePtr.set addr i v - - override _.Length = length - - override _.ReadUtf8String(pos, count) = - checkCount count - if count > 0 then - check pos - check (pos + count - 1) - System.Text.Encoding.UTF8.GetString(NativePtr.add addr pos, count) - else - String.Empty - - override _.ReadBytes(pos, count) = - checkCount count - if count > 0 then - check pos - check (pos + count - 1) - let res = Bytes.zeroCreate count - Marshal.Copy(NativePtr.toNativeInt addr + nativeint pos, res, 0, count) - res - else - Array.empty - - override _.ReadInt32 pos = - check pos - check (pos + 3) - Marshal.ReadInt32(NativePtr.toNativeInt addr + nativeint pos) - - override _.ReadUInt16 pos = - check pos - check (pos + 1) - uint16(Marshal.ReadInt16(NativePtr.toNativeInt addr + nativeint pos)) - - override _.Slice(pos, count) = - checkCount count - if count > 0 then - check pos - check (pos + count - 1) - RawByteMemory(NativePtr.add addr pos, count, holder) :> ByteMemory - else - ByteArrayMemory(Array.empty, 0, 0) :> ByteMemory - - override x.CopyTo stream = - if length > 0 then - use stream2 = x.AsStream() - stream2.CopyTo stream - - override _.Copy(srcOffset, dest, destOffset, count) = - checkCount count - if count > 0 then - check srcOffset - Marshal.Copy(NativePtr.toNativeInt addr + nativeint srcOffset, dest, destOffset, count) - - override _.ToArray() = - if length > 0 then - let res = Array.zeroCreate length - Marshal.Copy(NativePtr.toNativeInt addr, res, 0, res.Length) - res - else - Array.empty - - override _.AsStream() = - if length > 0 then - new SafeUnmanagedMemoryStream(addr, int64 length, holder) :> Stream - else - new MemoryStream([||], 0, 0, false) :> Stream - - override _.AsReadOnlyStream() = - if length > 0 then - new SafeUnmanagedMemoryStream(addr, int64 length, int64 length, FileAccess.Read, holder) :> Stream - else - new MemoryStream([||], 0, 0, false) :> Stream - -[] -type ReadOnlyByteMemory(bytes: ByteMemory) = - - member _.Item with get i = bytes.[i] - - member _.Length with get () = bytes.Length - - member _.ReadBytes(pos, count) = bytes.ReadBytes(pos, count) - - member _.ReadInt32 pos = bytes.ReadInt32 pos - - member _.ReadUInt16 pos = bytes.ReadUInt16 pos - - member _.ReadUtf8String(pos, count) = bytes.ReadUtf8String(pos, count) - - member _.Slice(pos, count) = bytes.Slice(pos, count) |> ReadOnlyByteMemory - - member _.CopyTo stream = bytes.CopyTo stream - - member _.Copy(srcOffset, dest, destOffset, count) = bytes.Copy(srcOffset, dest, destOffset, count) - - member _.ToArray() = bytes.ToArray() - - member _.AsStream() = bytes.AsReadOnlyStream() - - member _.Underlying = bytes - -[] -module MemoryMappedFileExtensions = - - type MemoryMappedFile with - - static member TryFromByteMemory(bytes: ReadOnlyByteMemory) = - let length = int64 bytes.Length - if length = 0L then - None - else - if Utils.runningOnMono - then - // mono's MemoryMappedFile implementation throws with null `mapName`, so we use byte arrays instead: https://github.com/mono/mono/issues/1024 - None - else - // Try to create a memory mapped file and copy the contents of the given bytes to it. - // If this fails, then we clean up and return None. - try - let mmf = MemoryMappedFile.CreateNew(null, length, MemoryMappedFileAccess.ReadWrite, MemoryMappedFileOptions.None, HandleInheritability.None) - try - use stream = mmf.CreateViewStream(0L, length, MemoryMappedFileAccess.ReadWrite) - bytes.CopyTo stream - Some mmf - with - | _ -> - mmf.Dispose() - None - with - | _ -> - None - -type ByteMemory with - - member x.AsReadOnly() = ReadOnlyByteMemory x - - static member Empty = ByteArrayMemory([||], 0, 0) :> ByteMemory - - static member FromMemoryMappedFile(mmf: MemoryMappedFile) = - let accessor = mmf.CreateViewAccessor() - RawByteMemory.FromUnsafePointer(accessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), int accessor.Capacity, (mmf, accessor)) - - static member FromFile(path, access, ?canShadowCopy: bool) = - let canShadowCopy = defaultArg canShadowCopy false - - if Utils.runningOnMono - then - // mono's MemoryMappedFile implementation throws with null `mapName`, so we use byte arrays instead: https://github.com/mono/mono/issues/10245 - let bytes = File.ReadAllBytes path - ByteArrayMemory.FromArray bytes - else - let memoryMappedFileAccess = - match access with - | FileAccess.Read -> MemoryMappedFileAccess.Read - | FileAccess.Write -> MemoryMappedFileAccess.Write - | _ -> MemoryMappedFileAccess.ReadWrite - - let fileStream = File.Open(path, FileMode.Open, access, FileShare.Read) - - let length = fileStream.Length - - let mmf, accessor, length = - let mmf = - if canShadowCopy then - let mmf = - MemoryMappedFile.CreateNew( - null, - length, - MemoryMappedFileAccess.ReadWrite, - MemoryMappedFileOptions.None, - HandleInheritability.None) - use stream = mmf.CreateViewStream(0L, length, MemoryMappedFileAccess.ReadWrite) - fileStream.CopyTo(stream) - fileStream.Dispose() - mmf - else - MemoryMappedFile.CreateFromFile( - fileStream, - null, - length, - memoryMappedFileAccess, - HandleInheritability.None, - leaveOpen=false) - mmf, mmf.CreateViewAccessor(0L, length, memoryMappedFileAccess), length - - // Validate MMF with the access that was intended. - match access with - | FileAccess.Read when not accessor.CanRead -> invalidOp "Cannot read file" - | FileAccess.Write when not accessor.CanWrite -> invalidOp "Cannot write file" - | FileAccess.ReadWrite when not accessor.CanRead || not accessor.CanWrite -> invalidOp "Cannot read or write file" - | _ -> () - - RawByteMemory.FromUnsafePointer(accessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), int length, (mmf, accessor)) - - static member FromUnsafePointer(addr, length, holder: obj) = - RawByteMemory(NativePtr.ofNativeInt addr, length, holder) :> ByteMemory - - static member FromArray(bytes, offset, length) = - ByteArrayMemory(bytes, offset, length) :> ByteMemory - - static member FromArray bytes = - if bytes.Length = 0 then - ByteMemory.Empty - else - ByteArrayMemory.FromArray(bytes, 0, bytes.Length) - -type internal ByteStream = - { bytes: ReadOnlyByteMemory - mutable pos: int - max: int } - member b.ReadByte() = - if b.pos >= b.max then failwith "end of stream" - let res = b.bytes.[b.pos] - b.pos <- b.pos + 1 - res - member b.ReadUtf8String n = - let res = b.bytes.ReadUtf8String(b.pos,n) - b.pos <- b.pos + n; res - - static member FromBytes (b: ReadOnlyByteMemory,start,length) = - if start < 0 || (start+length) > b.Length then failwith "FromBytes" - { bytes = b; pos = start; max = start+length } - - member b.ReadBytes n = - if b.pos + n > b.max then failwith "ReadBytes: end of stream" - let res = b.bytes.Slice(b.pos, n) - b.pos <- b.pos + n - res - - member b.Position = b.pos -#if LAZY_UNPICKLE - member b.CloneAndSeek = { bytes=b.bytes; pos=pos; max=b.max } - member b.Skip = b.pos <- b.pos + n -#endif - - -type internal ByteBuffer = - { mutable bbArray: byte[] - mutable bbCurrent: int } - - member buf.Ensure newSize = - let oldBufSize = buf.bbArray.Length - if newSize > oldBufSize then - let old = buf.bbArray - buf.bbArray <- Bytes.zeroCreate (max newSize (oldBufSize * 2)) - Bytes.blit old 0 buf.bbArray 0 buf.bbCurrent - - member buf.Close () = Bytes.sub buf.bbArray 0 buf.bbCurrent - - member buf.EmitIntAsByte (i:int) = - let newSize = buf.bbCurrent + 1 - buf.Ensure newSize - buf.bbArray.[buf.bbCurrent] <- byte i - buf.bbCurrent <- newSize - - member buf.EmitByte (b:byte) = buf.EmitIntAsByte (int b) - - member buf.EmitIntsAsBytes (arr:int[]) = - let n = arr.Length - let newSize = buf.bbCurrent + n - buf.Ensure newSize - let bbArr = buf.bbArray - let bbBase = buf.bbCurrent - for i = 0 to n - 1 do - bbArr.[bbBase + i] <- byte arr.[i] - buf.bbCurrent <- newSize - - member bb.FixupInt32 pos value = - bb.bbArray.[pos] <- (Bytes.b0 value |> byte) - bb.bbArray.[pos + 1] <- (Bytes.b1 value |> byte) - bb.bbArray.[pos + 2] <- (Bytes.b2 value |> byte) - bb.bbArray.[pos + 3] <- (Bytes.b3 value |> byte) - - member buf.EmitInt32 n = - let newSize = buf.bbCurrent + 4 - buf.Ensure newSize - buf.FixupInt32 buf.bbCurrent n - buf.bbCurrent <- newSize - - member buf.EmitBytes (i:byte[]) = - let n = i.Length - let newSize = buf.bbCurrent + n - buf.Ensure newSize - Bytes.blit i 0 buf.bbArray buf.bbCurrent n - buf.bbCurrent <- newSize - - member buf.EmitByteMemory (i:ReadOnlyByteMemory) = - let n = i.Length - let newSize = buf.bbCurrent + n - buf.Ensure newSize - i.Copy(0, buf.bbArray, buf.bbCurrent, n) - buf.bbCurrent <- newSize - - member buf.EmitInt32AsUInt16 n = - let newSize = buf.bbCurrent + 2 - buf.Ensure newSize - buf.bbArray.[buf.bbCurrent] <- (Bytes.b0 n |> byte) - buf.bbArray.[buf.bbCurrent + 1] <- (Bytes.b1 n |> byte) - buf.bbCurrent <- newSize - - member buf.EmitBoolAsByte (b:bool) = buf.EmitIntAsByte (if b then 1 else 0) - - member buf.EmitUInt16 (x:uint16) = buf.EmitInt32AsUInt16 (int32 x) - - member buf.EmitInt64 x = - buf.EmitInt32 (Bytes.dWw0 x) - buf.EmitInt32 (Bytes.dWw1 x) - - member buf.Position = buf.bbCurrent - - static member Create sz = - { bbArray=Bytes.zeroCreate sz - bbCurrent = 0 } - -[] -type ByteStorage(getByteMemory: unit -> ReadOnlyByteMemory) = - - let mutable cached = Unchecked.defaultof> - - let getAndCache () = - let byteMemory = getByteMemory () - cached <- WeakReference(byteMemory.Underlying) - byteMemory - - member _.GetByteMemory() = - match cached with - | null -> getAndCache () - | _ -> - match cached.TryGetTarget() with - | true, byteMemory -> byteMemory.AsReadOnly() - | _ -> getAndCache () - - static member FromByteArray(bytes: byte []) = - ByteStorage.FromByteMemory(ByteMemory.FromArray(bytes).AsReadOnly()) - - static member FromByteMemory(bytes: ReadOnlyByteMemory) = - ByteStorage(fun () -> bytes) - - static member FromByteMemoryAndCopy(bytes: ReadOnlyByteMemory, useBackingMemoryMappedFile: bool) = - if useBackingMemoryMappedFile then - match MemoryMappedFile.TryFromByteMemory(bytes) with - | Some mmf -> - ByteStorage(fun () -> ByteMemory.FromMemoryMappedFile(mmf).AsReadOnly()) - | _ -> - let copiedBytes = ByteMemory.FromArray(bytes.ToArray()).AsReadOnly() - ByteStorage.FromByteMemory(copiedBytes) - else - let copiedBytes = ByteMemory.FromArray(bytes.ToArray()).AsReadOnly() - ByteStorage.FromByteMemory(copiedBytes) - - static member FromByteArrayAndCopy(bytes: byte [], useBackingMemoryMappedFile: bool) = - ByteStorage.FromByteMemoryAndCopy(ByteMemory.FromArray(bytes).AsReadOnly(), useBackingMemoryMappedFile) diff --git a/src/fsharp/absil/bytes.fsi b/src/fsharp/absil/bytes.fsi index 6471f9310e4..fe7d77679af 100644 --- a/src/fsharp/absil/bytes.fsi +++ b/src/fsharp/absil/bytes.fsi @@ -1,24 +1,18 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -/// Blobs of bytes, cross-compiling -namespace FSharp.Compiler.AbstractIL.Internal +/// Blobs of bytes, cross-compiling +namespace FSharp.Compiler.IO open System.IO open System.IO.MemoryMappedFiles -open Internal.Utilities -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal -module Utils = - val runningOnMono: bool - -module internal Bytes = +module internal Bytes = /// returned int will be 0 <= x <= 255 - val get: byte[] -> int -> int + val get: byte[] -> int -> int val zeroCreate: int -> byte[] - /// each int must be 0 <= x <= 255 - val ofInt32Array: int[] -> byte[] - /// each int will be 0 <= x <= 255 + /// each int must be 0 <= x <= 255 + val ofInt32Array: int[] -> byte[] + /// each int will be 0 <= x <= 255 val blit: byte[] -> int -> byte[] -> int -> int -> unit @@ -28,7 +22,7 @@ module internal Bytes = /// A view over bytes. /// May be backed by managed or unmanaged memory, or memory mapped file. [] -type internal ByteMemory = +type ByteMemory = abstract Item: int -> byte with get @@ -60,7 +54,7 @@ type internal ByteMemory = abstract AsReadOnlyStream: unit -> Stream [] -type internal ReadOnlyByteMemory = +type ReadOnlyByteMemory = new: ByteMemory -> ReadOnlyByteMemory @@ -87,7 +81,7 @@ type internal ReadOnlyByteMemory = member AsStream: unit -> Stream [] -module internal MemoryMappedFileExtensions = +module MemoryMappedFileExtensions = type MemoryMappedFile with @@ -95,7 +89,7 @@ module internal MemoryMappedFileExtensions = /// If the given ByteMemory's length is zero or a memory mapped file is not supported, the result will be None. static member TryFromByteMemory : bytes: ReadOnlyByteMemory -> MemoryMappedFile option -type internal ByteMemory with +type ByteMemory with member AsReadOnly: unit -> ReadOnlyByteMemory @@ -120,8 +114,8 @@ type internal ByteMemory with /// Imperative buffers and streams of byte[] [] -type internal ByteBuffer = - member Close : unit -> byte[] +type internal ByteBuffer = + member Close : unit -> byte[] member EmitIntAsByte : int -> unit member EmitIntsAsBytes : int[] -> unit member EmitByte : byte -> unit @@ -142,9 +136,9 @@ type internal ByteStream = member ReadByte : unit -> byte member ReadBytes : int -> ReadOnlyByteMemory member ReadUtf8String : int -> string - member Position : int + member Position : int static member FromBytes : ReadOnlyByteMemory * start:int * length:int -> ByteStream - + #if LAZY_UNPICKLE member CloneAndSeek : int -> ByteStream member Skip : int -> unit diff --git a/src/fsharp/absil/il.fs b/src/fsharp/absil/il.fs index f2f895611e8..68d0d20ed48 100644 --- a/src/fsharp/absil/il.fs +++ b/src/fsharp/absil/il.fs @@ -2,13 +2,14 @@ module FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.IO + #nowarn "49" #nowarn "343" // The type 'ILAssemblyRef' implements 'System.IComparable' explicitly but provides no corresponding override for 'Object.Equals'. #nowarn "346" // The struct, record or union type 'IlxExtensionType' has an explicit implementation of 'Object.Equals'. ... open System open System.Diagnostics -open System.IO open System.Collections open System.Collections.Generic open System.Collections.Concurrent @@ -17,11 +18,8 @@ open System.Reflection open System.Text open System.Threading -open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.Diagnostics -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library - +open Internal.Utilities.Library open Internal.Utilities let logging = false @@ -97,8 +95,6 @@ let splitILTypeName (nm: string) = let s1, s2 = splitNameAt nm idx splitNamespace s1, s2 -let emptyStringArray = ([| |] : string[]) - // Duplicate of comment in import.fs: // The type names that flow to the point include the "mangled" type names used for static parameters for provided types. // For example, @@ -113,7 +109,7 @@ let splitILTypeNameWithPossibleStaticArguments (nm: string) = let nsp, nm = match nm.LastIndexOf '.' with - | -1 -> emptyStringArray, nm + | -1 -> [| |], nm | idx -> let s1, s2 = splitNameAt nm idx splitNamespaceToArray s1, s2 @@ -464,7 +460,6 @@ type ILAssemblyRef(data) = add ", Retargetable=Yes" b.ToString() - [] type ILModuleRef = { name: string @@ -1302,20 +1297,20 @@ type ILFieldInit = | Null member x.AsObject() = - match x with + match x with | ILFieldInit.String s -> box s - | ILFieldInit.Bool bool -> box bool - | ILFieldInit.Char u16 -> box (char (int u16)) - | ILFieldInit.Int8 i8 -> box i8 - | ILFieldInit.Int16 i16 -> box i16 - | ILFieldInit.Int32 i32 -> box i32 - | ILFieldInit.Int64 i64 -> box i64 - | ILFieldInit.UInt8 u8 -> box u8 - | ILFieldInit.UInt16 u16 -> box u16 - | ILFieldInit.UInt32 u32 -> box u32 - | ILFieldInit.UInt64 u64 -> box u64 - | ILFieldInit.Single ieee32 -> box ieee32 - | ILFieldInit.Double ieee64 -> box ieee64 + | ILFieldInit.Bool bool -> box bool + | ILFieldInit.Char u16 -> box (char (int u16)) + | ILFieldInit.Int8 i8 -> box i8 + | ILFieldInit.Int16 i16 -> box i16 + | ILFieldInit.Int32 i32 -> box i32 + | ILFieldInit.Int64 i64 -> box i64 + | ILFieldInit.UInt8 u8 -> box u8 + | ILFieldInit.UInt16 u16 -> box u16 + | ILFieldInit.UInt32 u32 -> box u32 + | ILFieldInit.UInt64 u64 -> box u64 + | ILFieldInit.Single ieee32 -> box ieee32 + | ILFieldInit.Double ieee64 -> box ieee64 | ILFieldInit.Null -> (null :> Object) // -------------------------------------------------------------------- @@ -1546,36 +1541,20 @@ type ILMethodVirtualInfo = IsCheckAccessOnOverride: bool IsAbstract: bool } -type MethodKind = - | Static - | Cctor - | Ctor - | NonVirtual - | Virtual of ILMethodVirtualInfo - [] type MethodBody = - | IL of ILMethodBody - | PInvoke of PInvokeMethod (* platform invoke to native *) + | IL of Lazy + | PInvoke of Lazy (* platform invoke to native *) | Abstract | Native | NotAvailable -type ILLazyMethodBody = - | ILLazyMethodBody of Lazy - - member x.Contents = let (ILLazyMethodBody mb) = x in mb.Force() - [] type MethodCodeKind = | IL | Native | Runtime -let mkMethBodyAux mb = ILLazyMethodBody (notlazy mb) - -let mkMethBodyLazyAux mb = ILLazyMethodBody mb - let typesOfILParams (ps: ILParameters) : ILTypes = ps |> List.map (fun p -> p.Type) [] @@ -1631,41 +1610,43 @@ let NoMetadataIdx = -1 [] type ILMethodDef (name: string, attributes: MethodAttributes, implAttributes: MethodImplAttributes, callingConv: ILCallingConv, - parameters: ILParameters, ret: ILReturn, body: ILLazyMethodBody, isEntryPoint: bool, genericParams: ILGenericParameterDefs, + parameters: ILParameters, ret: ILReturn, body: Lazy, isEntryPoint: bool, genericParams: ILGenericParameterDefs, securityDeclsStored: ILSecurityDeclsStored, customAttrsStored: ILAttributesStored, metadataIndex: int32) = new (name, attributes, implAttributes, callingConv, parameters, ret, body, isEntryPoint, genericParams, securityDecls, customAttrs) = ILMethodDef (name, attributes, implAttributes, callingConv, parameters, ret, body, isEntryPoint, genericParams, storeILSecurityDecls securityDecls, storeILCustomAttrs customAttrs, NoMetadataIdx) + member private _.LazyBody = body + // The captured data - remember the object will be as large as the data captured by these members - member __.Name = name + member _.Name = name - member __.Attributes = attributes + member _.Attributes = attributes - member __.ImplAttributes = implAttributes + member _.ImplAttributes = implAttributes - member __.CallingConv = callingConv + member _.CallingConv = callingConv - member __.Parameters = parameters + member _.Parameters = parameters - member __.Return = ret + member _.Return = ret - member __.Body = body + member _.Body = body.Value - member __.SecurityDeclsStored = securityDeclsStored + member _.SecurityDeclsStored = securityDeclsStored - member __.IsEntryPoint = isEntryPoint + member _.IsEntryPoint = isEntryPoint - member __.GenericParams = genericParams + member _.GenericParams = genericParams - member __.CustomAttrsStored = customAttrsStored + member _.CustomAttrsStored = customAttrsStored - member __.MetadataIndex = metadataIndex + member _.MetadataIndex = metadataIndex member x.With (?name: string, ?attributes: MethodAttributes, ?implAttributes: MethodImplAttributes, ?callingConv: ILCallingConv, ?parameters: ILParameters, ?ret: ILReturn, - ?body: ILLazyMethodBody, ?securityDecls: ILSecurityDecls, ?isEntryPoint: bool, + ?body: Lazy, ?securityDecls: ILSecurityDecls, ?isEntryPoint: bool, ?genericParams: ILGenericParameterDefs, ?customAttrs: ILAttributes) = ILMethodDef (name = defaultArg name x.Name, @@ -1674,7 +1655,7 @@ type ILMethodDef (name: string, attributes: MethodAttributes, implAttributes: Me callingConv = defaultArg callingConv x.CallingConv, parameters = defaultArg parameters x.Parameters, ret = defaultArg ret x.Return, - body = defaultArg body x.Body, + body = defaultArg body x.LazyBody, securityDecls = (match securityDecls with None -> x.SecurityDecls | Some attrs -> attrs), isEntryPoint = defaultArg isEntryPoint x.IsEntryPoint, genericParams = defaultArg genericParams x.GenericParams, @@ -1687,15 +1668,15 @@ type ILMethodDef (name: string, attributes: MethodAttributes, implAttributes: Me member x.ParameterTypes = typesOfILParams x.Parameters member md.Code = - match md.Body.Contents with - | MethodBody.IL il-> Some il.Code + match md.Body with + | MethodBody.IL il-> Some il.Value.Code | _ -> None - member x.IsIL = match x.Body.Contents with | MethodBody.IL _ -> true | _ -> false + member x.IsIL = match x.Body with | MethodBody.IL _ -> true | _ -> false - member x.Locals = match x.Body.Contents with | MethodBody.IL il -> il.Locals | _ -> [] + member x.Locals = match x.Body with | MethodBody.IL il -> il.Value.Locals | _ -> [] - member x.MethodBody = match x.Body.Contents with MethodBody.IL il -> il | _ -> failwith "not IL" + member x.MethodBody = match x.Body with MethodBody.IL il -> il.Value | _ -> failwith "not IL" member x.SourceMarker = x.MethodBody.SourceMarker @@ -1784,8 +1765,8 @@ type ILMethodDefs(f : (unit -> ILMethodDef[])) = member x.FindByNameAndArity (nm, arity) = x.FindByName nm |> List.filter (fun x -> List.length x.Parameters = arity) - member x.TryFindInstanceByNameAndCallingSignature (nm, callingSig) = - x.FindByName nm + member x.TryFindInstanceByNameAndCallingSignature (nm, callingSig) = + x.FindByName nm |> List.tryFind (fun x -> not x.IsStatic && x.CallingSignature = callingSig) [] @@ -1796,15 +1777,15 @@ type ILEventDef(eventType: ILType option, name: string, attributes: EventAttribu new (eventType, name, attributes, addMethod, removeMethod, fireMethod, otherMethods, customAttrs) = ILEventDef(eventType, name, attributes, addMethod, removeMethod, fireMethod, otherMethods, storeILCustomAttrs customAttrs, NoMetadataIdx) - member __.EventType = eventType - member __.Name = name - member __.Attributes = attributes - member __.AddMethod = addMethod - member __.RemoveMethod = removeMethod - member __.FireMethod = fireMethod - member __.OtherMethods = otherMethods - member __.CustomAttrsStored = customAttrsStored - member __.MetadataIndex = metadataIndex + member _.EventType = eventType + member _.Name = name + member _.Attributes = attributes + member _.AddMethod = addMethod + member _.RemoveMethod = removeMethod + member _.FireMethod = fireMethod + member _.OtherMethods = otherMethods + member _.CustomAttrsStored = customAttrsStored + member _.MetadataIndex = metadataIndex member x.CustomAttrs = customAttrsStored.GetCustomAttrs x.MetadataIndex member x.With(?eventType, ?name, ?attributes, ?addMethod, ?removeMethod, ?fireMethod, ?otherMethods, ?customAttrs) = @@ -1899,13 +1880,13 @@ type ILFieldDef(name: string, fieldType: ILType, attributes: FieldAttributes, da new (name, fieldType, attributes, data, literalValue, offset, marshal, customAttrs) = ILFieldDef(name, fieldType, attributes, data, literalValue, offset, marshal, storeILCustomAttrs customAttrs, NoMetadataIdx) - member __.Name=name - member __.FieldType = fieldType - member __.Attributes=attributes - member __.Data=data - member __.LiteralValue=literalValue - member __.Offset=offset - member __.Marshal=marshal + member _.Name=name + member _.FieldType = fieldType + member _.Attributes=attributes + member _.Data=data + member _.LiteralValue=literalValue + member _.Offset=offset + member _.Marshal=marshal member x.CustomAttrsStored = customAttrsStored member x.CustomAttrs = customAttrsStored.GetCustomAttrs x.MetadataIndex member x.MetadataIndex = metadataIndex @@ -2073,21 +2054,21 @@ type ILTypeDef(name: string, attributes: TypeAttributes, layout: ILTypeDefLayout new (name, attributes, layout, implements, genericParams, extends, methods, nestedTypes, fields, methodImpls, events, properties, securityDecls, customAttrs) = ILTypeDef (name, attributes, layout, implements, genericParams, extends, methods, nestedTypes, fields, methodImpls, events, properties, storeILSecurityDecls securityDecls, storeILCustomAttrs customAttrs, NoMetadataIdx) - member __.Name = name - member __.Attributes = attributes - member __.GenericParams = genericParams - member __.Layout = layout - member __.NestedTypes = nestedTypes - member __.Implements = implements - member __.Extends = extends - member __.Methods = methods - member __.SecurityDeclsStored = securityDeclsStored - member __.Fields = fields - member __.MethodImpls = methodImpls - member __.Events = events - member __.Properties = properties - member __.CustomAttrsStored = customAttrsStored - member __.MetadataIndex = metadataIndex + member _.Name = name + member _.Attributes = attributes + member _.GenericParams = genericParams + member _.Layout = layout + member _.NestedTypes = nestedTypes + member _.Implements = implements + member _.Extends = extends + member _.Methods = methods + member _.SecurityDeclsStored = securityDeclsStored + member _.Fields = fields + member _.MethodImpls = methodImpls + member _.Events = events + member _.Properties = properties + member _.CustomAttrsStored = customAttrsStored + member _.MetadataIndex = metadataIndex member x.With(?name, ?attributes, ?layout, ?implements, ?genericParams, ?extends, ?methods, ?nestedTypes, ?fields, ?methodImpls, ?events, ?properties, ?customAttrs, ?securityDecls) = ILTypeDef(name=defaultArg name x.Name, @@ -2184,8 +2165,8 @@ and [] ILPreTypeDefImpl(nameSpace: string list, name: string, metadataIn let mutable store : ILTypeDef = Unchecked.defaultof<_> interface ILPreTypeDef with - member __.Namespace = nameSpace - member __.Name = name + member _.Namespace = nameSpace + member _.Name = name member x.GetTypeDef() = match box store with @@ -2289,6 +2270,7 @@ type ILAssemblyLongevity = | PlatformProcess | PlatformSystem + static member Default = Unspecified type ILAssemblyManifest = { Name: string @@ -2649,15 +2631,15 @@ let tname_UIntPtr = "System.UIntPtr" let tname_TypedReference = "System.TypedReference" [] -type ILGlobals(primaryScopeRef: ILScopeRef, assembliesThatForwardToPrimaryAssembly: ILAssemblyRef list) = +type ILGlobals(primaryScopeRef: ILScopeRef, assembliesThatForwardToPrimaryAssembly: ILAssemblyRef list, fsharpCoreAssemblyScopeRef: ILScopeRef) = let assembliesThatForwardToPrimaryAssembly = Array.ofList assembliesThatForwardToPrimaryAssembly let mkSysILTypeRef nm = mkILTyRef (primaryScopeRef, nm) member _.primaryAssemblyScopeRef = primaryScopeRef - member x.primaryAssemblyRef = - match primaryScopeRef with + member x.primaryAssemblyRef = + match primaryScopeRef with | ILScopeRef.Assembly aref -> aref | _ -> failwith "Invalid primary assembly" member x.primaryAssemblyName = x.primaryAssemblyRef.Name @@ -2682,6 +2664,8 @@ type ILGlobals(primaryScopeRef: ILScopeRef, assembliesThatForwardToPrimaryAssemb member val typ_UIntPtr = ILType.Value (mkILNonGenericTySpec (mkSysILTypeRef tname_UIntPtr)) member val typ_TypedReference = ILType.Value (mkILNonGenericTySpec (mkSysILTypeRef tname_TypedReference)) + member _.fsharpCoreAssemblyScopeRef = fsharpCoreAssemblyScopeRef + member x.IsPossiblePrimaryAssemblyRef(aref: ILAssemblyRef) = aref.EqualsIgnoringVersion x.primaryAssemblyRef || assembliesThatForwardToPrimaryAssembly @@ -2693,7 +2677,7 @@ type ILGlobals(primaryScopeRef: ILScopeRef, assembliesThatForwardToPrimaryAssemb override x.ToString() = "" -let mkILGlobals (primaryScopeRef, assembliesThatForwardToPrimaryAssembly) = ILGlobals (primaryScopeRef, assembliesThatForwardToPrimaryAssembly) +let mkILGlobals (primaryScopeRef, assembliesThatForwardToPrimaryAssembly, fsharpCoreAssemblyScopeRef) = ILGlobals (primaryScopeRef, assembliesThatForwardToPrimaryAssembly, fsharpCoreAssemblyScopeRef) let mkNormalCall mspec = I_call (Normalcall, mspec, None) @@ -2738,10 +2722,15 @@ let isILBoxedTy = function ILType.Boxed _ -> true | _ -> false let isILValueTy = function ILType.Value _ -> true | _ -> false +let rec stripILModifiedFromTy (ty: ILType) = + match ty with + | ILType.Modified(_, _, ty) -> stripILModifiedFromTy ty + | _ -> ty + let isBuiltInTySpec (ilg: ILGlobals) (tspec: ILTypeSpec) n = let tref = tspec.TypeRef let scoref = tref.Scope - tref.Name = n && + tref.Name = n && (match scoref with | ILScopeRef.Local | ILScopeRef.Module _ -> false @@ -2944,7 +2933,9 @@ let mkILMethodBody (initlocals, locals, maxstack, code, tag) : ILMethodBody = Code= code SourceMarker=tag } -let mkMethodBody (zeroinit, locals, maxstack, code, tag) = MethodBody.IL (mkILMethodBody (zeroinit, locals, maxstack, code, tag)) +let mkMethodBody (zeroinit, locals, maxstack, code, tag) = + let ilCode = mkILMethodBody (zeroinit, locals, maxstack, code, tag) + MethodBody.IL (lazy ilCode) // -------------------------------------------------------------------- // Make a constructor @@ -2952,11 +2943,11 @@ let mkMethodBody (zeroinit, locals, maxstack, code, tag) = MethodBody.IL (mkILMe let mkILVoidReturn = mkILReturn ILType.Void -let methBodyNotAvailable = mkMethBodyAux MethodBody.NotAvailable +let methBodyNotAvailable = notlazy MethodBody.NotAvailable -let methBodyAbstract = mkMethBodyAux MethodBody.Abstract +let methBodyAbstract = notlazy MethodBody.Abstract -let methBodyNative = mkMethBodyAux MethodBody.Native +let methBodyNative = notlazy MethodBody.Native let mkILCtor (access, args, impl) = ILMethodDef(name=".ctor", @@ -2965,7 +2956,7 @@ let mkILCtor (access, args, impl) = callingConv=ILCallingConv.Instance, parameters = args, ret= mkILVoidReturn, - body= mkMethBodyAux impl, + body= notlazy impl, securityDecls=emptyILSecurityDecls, isEntryPoint=false, genericParams=mkILEmptyGenericParams, @@ -3014,7 +3005,7 @@ let mkILStaticMethod (genparams, nm, access, args, ret, impl) = securityDecls=emptyILSecurityDecls, isEntryPoint=false, customAttrs = emptyILCustomAttrs, - body= mkMethBodyAux impl) + body= notlazy impl) let mkILNonGenericStaticMethod (nm, access, args, ret, impl) = mkILStaticMethod (mkILEmptyGenericParams, nm, access, args, ret, impl) @@ -3030,7 +3021,7 @@ let mkILClassCtor impl = isEntryPoint=false, securityDecls=emptyILSecurityDecls, customAttrs=emptyILCustomAttrs, - body= mkMethBodyAux impl) + body= notlazy impl) // -------------------------------------------------------------------- // Make a virtual method, where the overriding is simply the default @@ -3054,7 +3045,7 @@ let mkILGenericVirtualMethod (nm, access, genparams, actual_args, actual_ret, im isEntryPoint=false, securityDecls=emptyILSecurityDecls, customAttrs = emptyILCustomAttrs, - body= mkMethBodyAux impl) + body= notlazy impl) let mkILNonGenericVirtualMethod (nm, access, args, ret, impl) = mkILGenericVirtualMethod (nm, access, mkILEmptyGenericParams, args, ret, impl) @@ -3070,7 +3061,7 @@ let mkILGenericNonVirtualMethod (nm, access, genparams, actual_args, actual_ret, isEntryPoint=false, securityDecls=emptyILSecurityDecls, customAttrs = emptyILCustomAttrs, - body= mkMethBodyAux impl) + body= notlazy impl) let mkILNonGenericInstanceMethod (nm, access, args, ret, impl) = mkILGenericNonVirtualMethod (nm, access, mkILEmptyGenericParams, args, ret, impl) @@ -3086,11 +3077,12 @@ let ilmbody_code2code f (il: ILMethodBody) = let mdef_code2code f (md: ILMethodDef) = let il = - match md.Body.Contents with + match md.Body with | MethodBody.IL il-> il | _ -> failwith "mdef_code2code - method not IL" - let b = MethodBody.IL (ilmbody_code2code f il) - md.With(body = mkMethBodyAux b) + let ilCode = ilmbody_code2code f il.Value + let b = MethodBody.IL (notlazy ilCode) + md.With(body = notlazy b) let prependInstrsToCode (instrs: ILInstr list) (c2: ILCode) = let instrs = Array.ofList instrs @@ -3222,6 +3214,7 @@ let mkILNestedExportedTypesLazy (l: Lazy<_>) = ILNestedExportedTypes (lazy (List.foldBack addNestedExportedTypeToTable (l.Force()) Map.empty)) let mkILResources l = ILResources l +let emptyILResources = ILResources [] let addMethodImplToTable y tab = let key = (y.Overrides.MethodRef.Name, y.Overrides.MethodRef.ArgTypes.Length) @@ -3663,32 +3656,85 @@ let rec encodeCustomAttrElemTypeForObject x = | ILAttribElem.Double _ -> [| et_R8 |] | ILAttribElem.Array (elemTy, _) -> [| yield et_SZARRAY; yield! encodeCustomAttrElemType elemTy |] -let rec decodeCustomAttrElemType (ilg: ILGlobals) bytes sigptr x = +let tspan = TimeSpan (DateTime.UtcNow.Ticks - DateTime(2000, 1, 1).Ticks) + +let parseILVersion (vstr : string) = + // matches "v1.2.3.4" or "1.2.3.4". Note, if numbers are missing, returns -1 (not 0). + let mutable vstr = vstr.TrimStart [|'v'|] + // if the version string contains wildcards, replace them + let versionComponents = vstr.Split ([|'.'|]) + + // account for wildcards + if versionComponents.Length > 2 then + let defaultBuild = uint16 tspan.Days % UInt16.MaxValue - 1us + let defaultRevision = uint16 (DateTime.UtcNow.TimeOfDay.TotalSeconds / 2.0) % UInt16.MaxValue - 1us + if versionComponents.[2] = "*" then + if versionComponents.Length > 3 then + failwith "Invalid version format" + else + // set the build number to the number of days since Jan 1, 2000 + versionComponents.[2] <- defaultBuild.ToString() + // Set the revision number to number of seconds today / 2 + vstr <- String.Join (".", versionComponents) + "." + defaultRevision.ToString() + elif versionComponents.Length > 3 && versionComponents.[3] = "*" then + // Set the revision number to number of seconds today / 2 + versionComponents.[3] <- defaultRevision.ToString() + vstr <- String.Join (".", versionComponents) + + let version = System.Version vstr + let zero32 n = if n < 0 then 0us else uint16 n + // since the minor revision will be -1 if none is specified, we need to truncate to 0 to not break existing code + let minorRevision = if version.Revision = -1 then 0us else uint16 version.MinorRevision + ILVersionInfo (zero32 version.Major, zero32 version.Minor, zero32 version.Build, minorRevision) + +let compareILVersions (version1 : ILVersionInfo) (version2 : ILVersionInfo) = + let c = compare version1.Major version2.Major + if c <> 0 then c else + let c = compare version1.Minor version2.Minor + if c <> 0 then c else + let c = compare version1.Build version2.Build + if c <> 0 then c else + let c = compare version1.Revision version2.Revision + if c <> 0 then c else + 0 + +let DummyFSharpCoreScopeRef = + let asmRef = + // The exact public key token and version used here don't actually matter, or shouldn't. + ILAssemblyRef.Create("FSharp.Core", None, + Some (PublicKeyToken(Bytes.ofInt32Array [| 0xb0; 0x3f; 0x5f; 0x7f; 0x11; 0xd5; 0x0a; 0x3a |])), + false, + Some (parseILVersion "0.0.0.0"), None) + ILScopeRef.Assembly asmRef + +let PrimaryAssemblyILGlobals = mkILGlobals (ILScopeRef.PrimaryAssembly, [], DummyFSharpCoreScopeRef) + +let rec decodeCustomAttrElemType bytes sigptr x = match x with - | x when x = et_I1 -> ilg.typ_SByte, sigptr - | x when x = et_U1 -> ilg.typ_Byte, sigptr - | x when x = et_I2 -> ilg.typ_Int16, sigptr - | x when x = et_U2 -> ilg.typ_UInt16, sigptr - | x when x = et_I4 -> ilg.typ_Int32, sigptr - | x when x = et_U4 -> ilg.typ_UInt32, sigptr - | x when x = et_I8 -> ilg.typ_Int64, sigptr - | x when x = et_U8 -> ilg.typ_UInt64, sigptr - | x when x = et_R8 -> ilg.typ_Double, sigptr - | x when x = et_R4 -> ilg.typ_Single, sigptr - | x when x = et_CHAR -> ilg.typ_Char, sigptr - | x when x = et_BOOLEAN -> ilg.typ_Bool, sigptr - | x when x = et_STRING -> ilg.typ_String, sigptr - | x when x = et_OBJECT -> ilg.typ_Object, sigptr + | x when x = et_I1 -> PrimaryAssemblyILGlobals.typ_SByte, sigptr + | x when x = et_U1 -> PrimaryAssemblyILGlobals.typ_Byte, sigptr + | x when x = et_I2 -> PrimaryAssemblyILGlobals.typ_Int16, sigptr + | x when x = et_U2 -> PrimaryAssemblyILGlobals.typ_UInt16, sigptr + | x when x = et_I4 -> PrimaryAssemblyILGlobals.typ_Int32, sigptr + | x when x = et_U4 -> PrimaryAssemblyILGlobals.typ_UInt32, sigptr + | x when x = et_I8 -> PrimaryAssemblyILGlobals.typ_Int64, sigptr + | x when x = et_U8 -> PrimaryAssemblyILGlobals.typ_UInt64, sigptr + | x when x = et_R8 -> PrimaryAssemblyILGlobals.typ_Double, sigptr + | x when x = et_R4 -> PrimaryAssemblyILGlobals.typ_Single, sigptr + | x when x = et_CHAR -> PrimaryAssemblyILGlobals.typ_Char, sigptr + | x when x = et_BOOLEAN -> PrimaryAssemblyILGlobals.typ_Bool, sigptr + | x when x = et_STRING -> PrimaryAssemblyILGlobals.typ_String, sigptr + | x when x = et_OBJECT -> PrimaryAssemblyILGlobals.typ_Object, sigptr | x when x = et_SZARRAY -> let et, sigptr = sigptr_get_u8 bytes sigptr - let elemTy, sigptr = decodeCustomAttrElemType ilg bytes sigptr et + let elemTy, sigptr = decodeCustomAttrElemType bytes sigptr et mkILArr1DTy elemTy, sigptr - | x when x = 0x50uy -> ilg.typ_Type, sigptr + | x when x = 0x50uy -> PrimaryAssemblyILGlobals.typ_Type, sigptr | _ -> failwithf "decodeCustomAttrElemType ilg: unrecognized custom element type: %A" x /// Given a custom attribute element, encode it to a binary representation according to the rules in Ecma 335 Partition II. -let rec encodeCustomAttrPrimValue ilg c = +let rec encodeCustomAttrPrimValue c = match c with | ILAttribElem.Bool b -> [| (if b then 0x01uy else 0x00uy) |] | ILAttribElem.String None @@ -3710,54 +3756,49 @@ let rec encodeCustomAttrPrimValue ilg c = | ILAttribElem.Type (Some ty) -> encodeCustomAttrString ty.QualifiedName | ILAttribElem.TypeRef (Some tref) -> encodeCustomAttrString tref.QualifiedName | ILAttribElem.Array (_, elems) -> - [| yield! i32AsBytes elems.Length; for elem in elems do yield! encodeCustomAttrPrimValue ilg elem |] + [| yield! i32AsBytes elems.Length; for elem in elems do yield! encodeCustomAttrPrimValue elem |] -and encodeCustomAttrValue ilg ty c = +and encodeCustomAttrValue ty c = match ty, c with | ILType.Boxed tspec, _ when tspec.Name = tname_Object -> - [| yield! encodeCustomAttrElemTypeForObject c; yield! encodeCustomAttrPrimValue ilg c |] + [| yield! encodeCustomAttrElemTypeForObject c; yield! encodeCustomAttrPrimValue c |] | ILType.Array (shape, _), ILAttribElem.Null when shape = ILArrayShape.SingleDimensional -> [| yield! i32AsBytes 0xFFFFFFFF |] | ILType.Array (shape, elemType), ILAttribElem.Array (_, elems) when shape = ILArrayShape.SingleDimensional -> - [| yield! i32AsBytes elems.Length; for elem in elems do yield! encodeCustomAttrValue ilg elemType elem |] + [| yield! i32AsBytes elems.Length; for elem in elems do yield! encodeCustomAttrValue elemType elem |] | _ -> - encodeCustomAttrPrimValue ilg c + encodeCustomAttrPrimValue c -let encodeCustomAttrNamedArg ilg (nm, ty, prop, elem) = +let encodeCustomAttrNamedArg (nm, ty, prop, elem) = [| yield (if prop then 0x54uy else 0x53uy) yield! encodeCustomAttrElemType ty yield! encodeCustomAttrString nm - yield! encodeCustomAttrValue ilg ty elem |] + yield! encodeCustomAttrValue ty elem |] -let encodeCustomAttrArgs (ilg: ILGlobals) (mspec: ILMethodSpec) (fixedArgs: list<_>) (namedArgs: list<_>) = +let encodeCustomAttrArgs (mspec: ILMethodSpec) (fixedArgs: list<_>) (namedArgs: list<_>) = let argtys = mspec.MethodRef.ArgTypes [| yield! [| 0x01uy; 0x00uy; |] for (argty, fixedArg) in Seq.zip argtys fixedArgs do - yield! encodeCustomAttrValue ilg argty fixedArg + yield! encodeCustomAttrValue argty fixedArg yield! u16AsBytes (uint16 namedArgs.Length) for namedArg in namedArgs do - yield! encodeCustomAttrNamedArg ilg namedArg |] + yield! encodeCustomAttrNamedArg namedArg |] -let encodeCustomAttr (ilg: ILGlobals) (mspec: ILMethodSpec, fixedArgs: list<_>, namedArgs: list<_>) = - let args = encodeCustomAttrArgs ilg mspec fixedArgs namedArgs +let encodeCustomAttr (mspec: ILMethodSpec, fixedArgs: list<_>, namedArgs: list<_>) = + let args = encodeCustomAttrArgs mspec fixedArgs namedArgs ILAttribute.Encoded (mspec, args, fixedArgs @ (namedArgs |> List.map (fun (_, _, _, e) -> e))) -let mkILCustomAttribMethRef (ilg: ILGlobals) (mspec: ILMethodSpec, fixedArgs: list<_>, namedArgs: list<_>) = - encodeCustomAttr ilg (mspec, fixedArgs, namedArgs) +let mkILCustomAttribMethRef (mspec: ILMethodSpec, fixedArgs: list<_>, namedArgs: list<_>) = + encodeCustomAttr (mspec, fixedArgs, namedArgs) -let mkILCustomAttribute ilg (tref, argtys, argvs, propvs) = - encodeCustomAttr ilg (mkILNonGenericCtorMethSpec (tref, argtys), argvs, propvs) +let mkILCustomAttribute (tref, argtys, argvs, propvs) = + encodeCustomAttr (mkILNonGenericCtorMethSpec (tref, argtys), argvs, propvs) -let getCustomAttrData (ilg: ILGlobals) cattr = +let getCustomAttrData cattr = match cattr with | ILAttribute.Encoded (_, data, _) -> data | ILAttribute.Decoded (mspec, fixedArgs, namedArgs) -> - encodeCustomAttrArgs ilg mspec fixedArgs namedArgs - -let MscorlibScopeRef = ILScopeRef.Assembly (ILAssemblyRef.Create ("mscorlib", None, Some ecmaPublicKey, true, None, None)) - -let EcmaMscorlibILGlobals = mkILGlobals (MscorlibScopeRef, []) -let PrimaryAssemblyILGlobals = mkILGlobals (ILScopeRef.PrimaryAssembly, []) + encodeCustomAttrArgs mspec fixedArgs namedArgs // ILSecurityDecl is a 'blob' having the following format: // - A byte containing a period (.). @@ -3767,7 +3808,7 @@ let PrimaryAssemblyILGlobals = mkILGlobals (ILScopeRef.PrimaryAssembly, []) // as a compressed int to indicate the size followed by an array of UTF8 characters.) // - A set of properties, encoded as the named arguments to a custom attribute would be (as // in §23.3, beginning with NumNamed). -let mkPermissionSet (ilg: ILGlobals) (action, attributes: list<(ILTypeRef * (string * ILType * ILAttribElem) list)>) = +let mkPermissionSet (action, attributes: list<(ILTypeRef * (string * ILType * ILAttribElem) list)>) = let bytes = [| yield (byte '.') yield! z_unsigned_int attributes.Length @@ -3776,7 +3817,7 @@ let mkPermissionSet (ilg: ILGlobals) (action, attributes: list<(ILTypeRef * (str let bytes = [| yield! z_unsigned_int props.Length for (nm, ty, value) in props do - yield! encodeCustomAttrNamedArg ilg (nm, ty, true, value)|] + yield! encodeCustomAttrNamedArg (nm, ty, true, value)|] yield! z_unsigned_int bytes.Length yield! bytes |] @@ -3920,7 +3961,7 @@ type ILTypeSigParser (tstring : string) = let ilty = x.ParseType() ILAttribElem.Type (Some ilty) -let decodeILAttribData (ilg: ILGlobals) (ca: ILAttribute) = +let decodeILAttribData (ca: ILAttribute) = match ca with | ILAttribute.Decoded (_, fixedArgs, namedArgs) -> fixedArgs, namedArgs | ILAttribute.Encoded (_, bytes, _) -> @@ -3986,7 +4027,7 @@ let decodeILAttribData (ilg: ILGlobals) (ca: ILAttribute) = if et = 0xFFuy then ILAttribElem.Null, sigptr else - let ty, sigptr = decodeCustomAttrElemType ilg bytes sigptr et + let ty, sigptr = decodeCustomAttrElemType bytes sigptr et parseVal ty sigptr | ILType.Array (shape, elemTy) when shape = ILArrayShape.SingleDimensional -> let n, sigptr = sigptr_get_i32 bytes sigptr @@ -4028,13 +4069,13 @@ let decodeILAttribData (ilg: ILGlobals) (ca: ILAttribute) = let scoref = match rest with | Some aname -> ILScopeRef.Assembly (ILAssemblyRef.FromAssemblyName (AssemblyName aname)) - | None -> ilg.primaryAssemblyScopeRef + | None -> PrimaryAssemblyILGlobals.primaryAssemblyScopeRef let tref = mkILTyRef (scoref, unqualified_tname) let tspec = mkILNonGenericTySpec tref ILType.Value tspec, sigptr else - decodeCustomAttrElemType ilg bytes sigptr et + decodeCustomAttrElemType bytes sigptr et let nm, sigptr = sigptr_get_serstring bytes sigptr let v, sigptr = parseVal ty sigptr parseNamed ((nm, ty, isProp, v) :: acc) (n-1) sigptr @@ -4175,14 +4216,14 @@ and refs_of_local s loc = refs_of_typ s loc.Type and refs_of_mbody s x = match x with - | MethodBody.IL il -> refs_of_ilmbody s il - | MethodBody.PInvoke (attr) -> refs_of_modref s attr.Where + | MethodBody.IL il -> refs_of_ilmbody s il.Value + | MethodBody.PInvoke (attr) -> refs_of_modref s attr.Value.Where | _ -> () and refs_of_mdef s (md: ILMethodDef) = List.iter (refs_of_param s) md.Parameters refs_of_return s md.Return - refs_of_mbody s md.Body.Contents + refs_of_mbody s md.Body refs_of_custom_attrs s md.CustomAttrs refs_of_genparams s md.GenericParams @@ -4278,48 +4319,6 @@ let computeILRefs ilg modul = { AssemblyReferences = Seq.fold (fun acc x -> x :: acc) [] s.refsA ModuleReferences = Seq.fold (fun acc x -> x :: acc) [] s.refsM } -let tspan = TimeSpan (DateTime.UtcNow.Ticks - DateTime(2000, 1, 1).Ticks) - -let parseILVersion (vstr : string) = - // matches "v1.2.3.4" or "1.2.3.4". Note, if numbers are missing, returns -1 (not 0). - let mutable vstr = vstr.TrimStart [|'v'|] - // if the version string contains wildcards, replace them - let versionComponents = vstr.Split ([|'.'|]) - - // account for wildcards - if versionComponents.Length > 2 then - let defaultBuild = uint16 tspan.Days % UInt16.MaxValue - 1us - let defaultRevision = uint16 (DateTime.UtcNow.TimeOfDay.TotalSeconds / 2.0) % UInt16.MaxValue - 1us - if versionComponents.[2] = "*" then - if versionComponents.Length > 3 then - failwith "Invalid version format" - else - // set the build number to the number of days since Jan 1, 2000 - versionComponents.[2] <- defaultBuild.ToString() - // Set the revision number to number of seconds today / 2 - vstr <- String.Join (".", versionComponents) + "." + defaultRevision.ToString() - elif versionComponents.Length > 3 && versionComponents.[3] = "*" then - // Set the revision number to number of seconds today / 2 - versionComponents.[3] <- defaultRevision.ToString() - vstr <- String.Join (".", versionComponents) - - let version = System.Version vstr - let zero32 n = if n < 0 then 0us else uint16 n - // since the minor revision will be -1 if none is specified, we need to truncate to 0 to not break existing code - let minorRevision = if version.Revision = -1 then 0us else uint16 version.MinorRevision - ILVersionInfo (zero32 version.Major, zero32 version.Minor, zero32 version.Build, minorRevision) - -let compareILVersions (version1 : ILVersionInfo) (version2 : ILVersionInfo) = - let c = compare version1.Major version2.Major - if c <> 0 then c else - let c = compare version1.Minor version2.Minor - if c <> 0 then c else - let c = compare version1.Build version2.Build - if c <> 0 then c else - let c = compare version1.Revision version2.Revision - if c <> 0 then c else - 0 - let unscopeILTypeRef (x: ILTypeRef) = ILTypeRef.Create (ILScopeRef.Local, x.Enclosing, x.Name) let rec unscopeILTypeSpec (tspec: ILTypeSpec) = diff --git a/src/fsharp/absil/il.fsi b/src/fsharp/absil/il.fsi index bcfeb3eca36..03f233ea370 100644 --- a/src/fsharp/absil/il.fsi +++ b/src/fsharp/absil/il.fsi @@ -1,46 +1,44 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// The "unlinked" view of .NET metadata and code. Central to the Abstract IL library -module public FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal +module rec FSharp.Compiler.AbstractIL.IL + +open FSharp.Compiler.IO +open Internal.Utilities open System.Collections.Generic open System.Reflection [] -type PrimaryAssembly = +type internal PrimaryAssembly = | Mscorlib | System_Runtime | NetStandard member Name: string -/// Represents guids +/// Represents guids type ILGuid = byte[] [] -type ILPlatform = +type ILPlatform = + internal | X86 | AMD64 | IA64 -/// Debug info. Values of type "source" can be attached at sequence -/// points and some other locations. +/// Debug info. Values of type "source" can be attached at sequence +/// points and some other locations. [] type ILSourceDocument = - static member Create: - language: ILGuid option * - vendor: ILGuid option * - documentType: ILGuid option * - file: string -> ILSourceDocument + static member Create: language: ILGuid option * vendor: ILGuid option * documentType: ILGuid option * file: string -> ILSourceDocument member Language: ILGuid option member Vendor: ILGuid option member DocumentType: ILGuid option member File: string - [] -type ILSourceMarker = +type internal ILSourceMarker = static member Create: document: ILSourceDocument * line: int * column: int * endLine:int * endColumn: int-> ILSourceMarker member Document: ILSourceDocument member Line: int @@ -49,14 +47,14 @@ type ILSourceMarker = member EndColumn: int [] -type PublicKey = +type PublicKey = | PublicKey of byte[] | PublicKeyToken of byte[] member IsKey: bool member IsKeyToken: bool member Key: byte[] member KeyToken: byte[] - static member KeyAsToken: byte[] -> PublicKey + static member KeyAsToken: byte[] -> PublicKey [] type ILVersionInfo = @@ -71,17 +69,23 @@ type ILVersionInfo = [] type ILAssemblyRef = static member Create: name: string * hash: byte[] option * publicKey: PublicKey option * retargetable: bool * version: ILVersionInfo option * locale: string option -> ILAssemblyRef + static member FromAssemblyName: System.Reflection.AssemblyName -> ILAssemblyRef + member Name: string /// The fully qualified name of the assembly reference, e.g. mscorlib, Version=1.0.3705 etc. - member QualifiedName: string + member QualifiedName: string + member Hash: byte[] option + member PublicKey: PublicKey option - /// CLI says this indicates if the assembly can be retargeted (at runtime) to be from a different publisher. + /// CLI says this indicates if the assembly can be retargeted (at runtime) to be from a different publisher. member Retargetable: bool + member Version: ILVersionInfo option + member Locale: string option member EqualsIgnoringVersion: ILAssemblyRef -> bool @@ -91,88 +95,100 @@ type ILAssemblyRef = [] type ILModuleRef = static member Create: name: string * hasMetadata: bool * hash: byte[] option -> ILModuleRef + member Name: string + member HasMetadata: bool + member Hash: byte[] option + interface System.IComparable // Scope references [] -type ILScopeRef = +type ILScopeRef = /// A reference to the type in the current module - | Local + | Local + /// A reference to a type in a module in the same assembly | Module of ILModuleRef + /// A reference to a type in another assembly | Assembly of ILAssemblyRef + /// A reference to a type in the primary assembly | PrimaryAssembly + member IsLocalRef: bool + member QualifiedName: string -// Calling conventions. +// Calling conventions. // // For nearly all purposes you simply want to use ILArgConvention.Default combined // with ILThisConvention.Instance or ILThisConvention.Static, i.e. // ILCallingConv.Instance == Callconv(ILThisConvention.Instance, ILArgConvention.Default): for an instance method // ILCallingConv.Static == Callconv(ILThisConvention.Static, ILArgConvention.Default): for a static method // -// ILThisConvention.InstanceExplicit is only used by Managed C++, and indicates -// that the 'this' pointer is actually explicit in the signature. +// ILThisConvention.InstanceExplicit is only used by Managed C++, and indicates +// that the 'this' pointer is actually explicit in the signature. [] -type ILArgConvention = +type ILArgConvention = | Default - | CDecl - | StdCall - | ThisCall - | FastCall + | CDecl + | StdCall + | ThisCall + | FastCall | VarArg - + [] type ILThisConvention = - /// accepts an implicit 'this' pointer - | Instance - /// accepts an explicit 'this' pointer - | InstanceExplicit + /// accepts an implicit 'this' pointer + | Instance + + /// accepts an explicit 'this' pointer + | InstanceExplicit + /// no 'this' pointer is passed - | Static + | Static [] type ILCallingConv = | Callconv of ILThisConvention * ILArgConvention - member IsInstance: bool - member IsInstanceExplicit: bool - member IsStatic: bool - member ThisConv: ILThisConvention - member BasicConv: ILArgConvention + member internal IsInstance: bool + member internal IsInstanceExplicit: bool + member internal IsStatic: bool + member internal ThisConv: ILThisConvention + member internal BasicConv: ILArgConvention static member Instance: ILCallingConv static member Static : ILCallingConv -/// Array shapes. For most purposes the rank is the only thing that matters. -type ILArrayBound = int32 option +/// Array shapes. For most purposes the rank is the only thing that matters. +type internal ILArrayBound = int32 option -/// Lower-bound/size pairs -type ILArrayBounds = ILArrayBound * ILArrayBound +/// Lower-bound/size pairs +type internal ILArrayBounds = ILArrayBound * ILArrayBound type ILArrayShape = - | ILArrayShape of ILArrayBounds list + internal + | ILArrayShape of ILArrayBounds list member Rank: int - /// Bounds for a single dimensional, zero based array + /// Bounds for a single dimensional, zero based array static member SingleDimensional: ILArrayShape static member FromRank: int -> ILArrayShape -type ILBoxity = +type internal ILBoxity = | AsObject | AsValue -type ILGenericVariance = - | NonVariant - | CoVariant - | ContraVariant +type ILGenericVariance = + | NonVariant + | CoVariant + | ContraVariant /// Type refs, i.e. references to types in some .NET assembly [] @@ -181,7 +197,7 @@ type ILTypeRef = /// Create a ILTypeRef. static member Create: scope: ILScopeRef * enclosing: string list * name: string -> ILTypeRef - /// Where is the type, i.e. is it in this module, in another module in this assembly or in another assembly? + /// Where is the type, i.e. is it in this module, in another module in this assembly or in another assembly? member Scope: ILScopeRef /// The list of enclosing type names for a nested type. If non-nil then the first of these also contains the namespace. @@ -201,8 +217,8 @@ type ILTypeRef = member internal EqualsWithPrimaryScopeRef: ILScopeRef * obj -> bool interface System.IComparable - -/// Type specs and types. + +/// Type specs and types. [] type ILTypeSpec = /// Create an ILTypeSpec. @@ -216,7 +232,7 @@ type ILTypeSpec = /// Where is the type, i.e. is it in this module, in another module in this assembly or in another assembly? member Scope: ILScopeRef - + /// The list of enclosing type names for a nested type. If non-nil then the first of these also contains the namespace. member Enclosing: string list @@ -230,46 +246,45 @@ type ILTypeSpec = interface System.IComparable -and - [] - ILType = +[] +type ILType = /// Used only in return and pointer types. - | Void + | Void - /// Array types - | Array of ILArrayShape * ILType + /// Array types + | Array of ILArrayShape * ILType /// Unboxed types, including builtin types. - | Value of ILTypeSpec + | Value of ILTypeSpec - /// Reference types. Also may be used for parents of members even if for members in value types. - | Boxed of ILTypeSpec + /// Reference types. Also may be used for parents of members even if for members in value types. + | Boxed of ILTypeSpec /// Unmanaged pointers. Nb. the type is used by tools and for binding only, not by the verifier. - | Ptr of ILType + | Ptr of ILType /// Managed pointers. - | Byref of ILType + | Byref of ILType - /// ILCode pointers. - | FunctionPointer of ILCallingSignature + /// ILCode pointers. + | FunctionPointer of ILCallingSignature - /// Reference a generic arg. - | TypeVar of uint16 + /// Reference a generic arg. + | TypeVar of uint16 - /// Custom modifiers. - | Modified of - /// True if modifier is "required". - bool * - /// The class of the custom modifier. - ILTypeRef * - /// The type being modified. - ILType + /// Custom modifiers. + | Modified of + /// True if modifier is "required". + bool * + /// The class of the custom modifier. + ILTypeRef * + /// The type being modified. + ILType member TypeSpec: ILTypeSpec - member Boxity: ILBoxity + member internal Boxity: ILBoxity member TypeRef: ILTypeRef @@ -283,28 +298,28 @@ and member QualifiedName: string -and [] - ILCallingSignature = +[] +type ILCallingSignature = { CallingConv: ILCallingConv ArgTypes: ILTypes ReturnType: ILType } -/// Actual generic parameters are always types. -and ILGenericArgs = ILType list +/// Actual generic parameters are always types. +type ILGenericArgs = ILType list -and ILTypes = ILType list +type ILTypes = ILType list -/// Formal identities of methods. +/// Formal identities of methods. [] type ILMethodRef = /// Functional creation - static member Create: - enclosingTypeRef: ILTypeRef * - callingConv: ILCallingConv * - name: string * - genericArity: int * - argTypes: ILTypes * + static member Create: + enclosingTypeRef: ILTypeRef * + callingConv: ILCallingConv * + name: string * + genericArity: int * + argTypes: ILTypes * returnType: ILType -> ILMethodRef member DeclaringTypeRef: ILTypeRef @@ -324,10 +339,10 @@ type ILMethodRef = member CallingSignature: ILCallingSignature interface System.IComparable - -/// Formal identities of fields. + +/// Formal identities of fields. [] -type ILFieldRef = +type ILFieldRef = { DeclaringTypeRef: ILTypeRef Name: string Type: ILType } @@ -341,7 +356,7 @@ type ILMethodSpec = member MethodRef: ILMethodRef - member DeclaringType: ILType + member DeclaringType: ILType member GenericArgs: ILGenericArgs @@ -356,12 +371,12 @@ type ILMethodSpec = member FormalReturnType: ILType interface System.IComparable - + /// Field specs. The data given for a ldfld, stfld etc. instruction. -[] +[] type ILFieldSpec = { FieldRef: ILFieldRef - DeclaringType: ILType } + DeclaringType: ILType } member DeclaringTypeRef: ILTypeRef @@ -372,10 +387,10 @@ type ILFieldSpec = member ActualType: ILType /// ILCode labels. In structured code each code label refers to a basic block somewhere in the code of the method. -type ILCodeLabel = int +type internal ILCodeLabel = int [] -type ILBasicType = +type internal ILBasicType = | DT_R | DT_I1 | DT_U1 @@ -392,89 +407,89 @@ type ILBasicType = | DT_REF [] -type ILToken = - | ILType of ILType - | ILMethod of ILMethodSpec +type internal ILToken = + | ILType of ILType + | ILMethod of ILMethodSpec | ILField of ILFieldSpec [] -type ILConst = +type internal ILConst = | I4 of int32 | I8 of int64 | R4 of single | R8 of double -type ILTailcall = +type internal ILTailcall = | Tailcall | Normalcall -type ILAlignment = +type internal ILAlignment = | Aligned | Unaligned1 | Unaligned2 | Unaligned4 -type ILVolatility = +type internal ILVolatility = | Volatile | Nonvolatile -type ILReadonly = +type internal ILReadonly = | ReadonlyAddress | NormalAddress -type ILVarArgs = ILTypes option +type internal ILVarArgs = ILTypes option [] -type ILComparisonInstr = - | BI_beq - | BI_bge - | BI_bge_un - | BI_bgt - | BI_bgt_un - | BI_ble - | BI_ble_un - | BI_blt - | BI_blt_un - | BI_bne_un - | BI_brfalse - | BI_brtrue - -/// The instruction set. +type internal ILComparisonInstr = + | BI_beq + | BI_bge + | BI_bge_un + | BI_bgt + | BI_bgt_un + | BI_ble + | BI_ble_un + | BI_blt + | BI_blt_un + | BI_bne_un + | BI_brfalse + | BI_brtrue + +/// The instruction set. [] -type ILInstr = - | AI_add +type internal ILInstr = + | AI_add | AI_add_ovf | AI_add_ovf_un - | AI_and - | AI_div + | AI_and + | AI_div | AI_div_un - | AI_ceq - | AI_cgt - | AI_cgt_un - | AI_clt - | AI_clt_un + | AI_ceq + | AI_cgt + | AI_cgt_un + | AI_clt + | AI_clt_un | AI_conv of ILBasicType | AI_conv_ovf of ILBasicType | AI_conv_ovf_un of ILBasicType - | AI_mul - | AI_mul_ovf + | AI_mul + | AI_mul_ovf | AI_mul_ovf_un - | AI_rem - | AI_rem_un - | AI_shl - | AI_shr + | AI_rem + | AI_rem_un + | AI_shl + | AI_shr | AI_shr_un - | AI_sub - | AI_sub_ovf - | AI_sub_ovf_un - | AI_xor - | AI_or - | AI_neg - | AI_not - | AI_ldnull - | AI_dup + | AI_sub + | AI_sub_ovf + | AI_sub_ovf_un + | AI_xor + | AI_or + | AI_neg + | AI_not + | AI_ldnull + | AI_dup | AI_pop - | AI_ckfinite + | AI_ckfinite | AI_nop | AI_ldc of ILBasicType * ILConst | I_ldarg of uint16 @@ -486,33 +501,33 @@ type ILInstr = | I_stind of ILAlignment * ILVolatility * ILBasicType | I_stloc of uint16 - // Control transfer + // Control transfer | I_br of ILCodeLabel | I_jmp of ILMethodSpec - | I_brcmp of ILComparisonInstr * ILCodeLabel - | I_switch of ILCodeLabel list - | I_ret + | I_brcmp of ILComparisonInstr * ILCodeLabel + | I_switch of ILCodeLabel list + | I_ret - // Method call + // Method call | I_call of ILTailcall * ILMethodSpec * ILVarArgs | I_callvirt of ILTailcall * ILMethodSpec * ILVarArgs | I_callconstraint of ILTailcall * ILType * ILMethodSpec * ILVarArgs | I_calli of ILTailcall * ILCallingSignature * ILVarArgs | I_ldftn of ILMethodSpec | I_newobj of ILMethodSpec * ILVarArgs - - // Exceptions + + // Exceptions | I_throw | I_endfinally | I_endfilter | I_leave of ILCodeLabel | I_rethrow - // Object instructions + // Object instructions | I_ldsfld of ILVolatility * ILFieldSpec | I_ldfld of ILAlignment * ILVolatility * ILFieldSpec | I_ldsflda of ILFieldSpec - | I_ldflda of ILFieldSpec + | I_ldflda of ILFieldSpec | I_stsfld of ILVolatility * ILFieldSpec | I_stfld of ILAlignment * ILVolatility * ILFieldSpec | I_ldstr of string @@ -521,7 +536,7 @@ type ILInstr = | I_ldtoken of ILToken | I_ldvirtftn of ILMethodSpec - // Value type instructions + // Value type instructions | I_cpobj of ILType | I_initobj of ILType | I_ldobj of ILAlignment * ILVolatility * ILType @@ -531,18 +546,18 @@ type ILInstr = | I_unbox_any of ILType | I_sizeof of ILType - // Generalized array instructions. In AbsIL these instructions include - // both the single-dimensional variants (with ILArrayShape == ILArrayShape.SingleDimensional) - // and calls to the "special" multi-dimensional "methods" such as: - // newobj void string[,]::.ctor(int32, int32) - // call string string[,]::Get(int32, int32) - // call string& string[,]::Address(int32, int32) - // call void string[,]::Set(int32, int32,string) + // Generalized array instructions. In AbsIL these instructions include + // both the single-dimensional variants (with ILArrayShape == ILArrayShape.SingleDimensional) + // and calls to the "special" multi-dimensional "methods" such as: + // newobj void string[,]::.ctor(int32, int32) + // call string string[,]::Get(int32, int32) + // call string& string[,]::Address(int32, int32) + // call void string[,]::Set(int32, int32,string) // - // The IL reader transforms calls of this form to the corresponding - // generalized instruction with the corresponding ILArrayShape - // argument. This is done to simplify the IL and make it more uniform. - // The IL writer then reverses this when emitting the binary. + // The IL reader transforms calls of this form to the corresponding + // generalized instruction with the corresponding ILArrayShape + // argument. This is done to simplify the IL and make it more uniform. + // The IL writer then reverses this when emitting the binary. | I_ldelem of ILBasicType | I_stelem of ILBasicType | I_ldelema of ILReadonly * bool * ILArrayShape * ILType (* ILArrayShape = ILArrayShape.SingleDimensional for single dimensional arrays *) @@ -551,26 +566,26 @@ type ILInstr = | I_newarr of ILArrayShape * ILType (* ILArrayShape = ILArrayShape.SingleDimensional for single dimensional arrays *) | I_ldlen - // "System.TypedReference" related instructions: almost - // no languages produce these, though they do occur in mscorlib.dll + // "System.TypedReference" related instructions: almost + // no languages produce these, though they do occur in mscorlib.dll // System.TypedReference represents a pair of a type and a byref-pointer - // to a value of that type. + // to a value of that type. | I_mkrefany of ILType - | I_refanytype + | I_refanytype | I_refanyval of ILType - - // Debug-specific - // I_seqpoint is a fake instruction to represent a sequence point: - // the next instruction starts the execution of the - // statement covered by the given range - this is a - // dummy instruction and is not emitted - | I_break - | I_seqpoint of ILSourceMarker - - // Varargs - C++ only - | I_arglist - - // Local aggregates, i.e. stack allocated data (alloca): C++ only + + // Debug-specific + // I_seqpoint is a fake instruction to represent a sequence point: + // the next instruction starts the execution of the + // statement covered by the given range - this is a + // dummy instruction and is not emitted + | I_break + | I_seqpoint of ILSourceMarker + + // Varargs - C++ only + | I_arglist + + // Local aggregates, i.e. stack allocated data (alloca): C++ only | I_localloc | I_cpblk of ILAlignment * ILVolatility | I_initblk of ILAlignment * ILVolatility @@ -580,40 +595,40 @@ type ILInstr = | EI_ldlen_multi of int32 * int32 [] -type ILExceptionClause = +type internal ILExceptionClause = | Finally of (ILCodeLabel * ILCodeLabel) | Fault of (ILCodeLabel * ILCodeLabel) | FilterCatch of filterRange: (ILCodeLabel * ILCodeLabel) * handlerRange: (ILCodeLabel * ILCodeLabel) | TypeCatch of ILType * (ILCodeLabel * ILCodeLabel) [] -type ILExceptionSpec = +type internal ILExceptionSpec = { Range: (ILCodeLabel * ILCodeLabel) Clause: ILExceptionClause } -/// Indicates that a particular local variable has a particular source -/// language name within a given set of ranges. This does not effect local -/// variable numbering, which is global over the whole method. +/// Indicates that a particular local variable has a particular source +/// language name within a given set of ranges. This does not effect local +/// variable numbering, which is global over the whole method. [] -type ILLocalDebugMapping = +type internal ILLocalDebugMapping = { LocalIndex: int LocalName: string } [] -type ILLocalDebugInfo = +type internal ILLocalDebugInfo = { Range: (ILCodeLabel * ILCodeLabel); DebugMappings: ILLocalDebugMapping list } [] -type ILCode = - { Labels: Dictionary - Instrs:ILInstr[] - Exceptions: ILExceptionSpec list +type internal ILCode = + { Labels: Dictionary + Instrs:ILInstr[] + Exceptions: ILExceptionSpec list Locals: ILLocalDebugInfo list } /// Field Init [] -type ILFieldInit = +type ILFieldInit = | String of string | Bool of bool | Char of uint16 @@ -632,57 +647,57 @@ type ILFieldInit = member AsObject: unit -> obj [] -type ILNativeVariant = +type internal ILNativeVariant = | Empty | Null | Variant | Currency - | Decimal - | Date - | BSTR - | LPSTR - | LPWSTR - | IUnknown - | IDispatch - | SafeArray - | Error - | HRESULT - | CArray - | UserDefined - | Record + | Decimal + | Date + | BSTR + | LPSTR + | LPWSTR + | IUnknown + | IDispatch + | SafeArray + | Error + | HRESULT + | CArray + | UserDefined + | Record | FileTime - | Blob - | Stream - | Storage - | StreamedObject - | StoredObject - | BlobObject - | CF + | Blob + | Stream + | Storage + | StreamedObject + | StoredObject + | BlobObject + | CF | CLSID - | Void + | Void | Bool | Int8 - | Int16 - | Int32 - | Int64 - | Single - | Double - | UInt8 - | UInt16 - | UInt32 - | UInt64 - | PTR - | Array of ILNativeVariant - | Vector of ILNativeVariant - | Byref of ILNativeVariant - | Int - | UInt + | Int16 + | Int32 + | Int64 + | Single + | Double + | UInt8 + | UInt16 + | UInt32 + | UInt64 + | PTR + | Array of ILNativeVariant + | Vector of ILNativeVariant + | Byref of ILNativeVariant + | Int + | UInt /// Native Types, for marshalling to the native C interface. /// These are taken directly from the ILASM syntax. -/// Most of these are listed in the CLI ECMA-335 Spec (Partition II, 7.4). +/// Most of these are listed in the CLI ECMA-335 Spec (Partition II, 7.4). [] -type ILNativeType = +type ILNativeType = | Empty | Custom of ILGuid * nativeTypeName: string * custMarshallerName: string * cookieString: byte[] | FixedSysString of int32 @@ -708,8 +723,8 @@ type ILNativeType = | UInt16 | UInt32 | UInt64 - /// optional idx of parameter giving size plus optional additive i.e. num elems - | Array of ILNativeType option * (int32 * int32 option) option + /// optional idx of parameter giving size plus optional additive i.e. num elems + | Array of ILNativeType option * (int32 * int32 option) option | Int | UInt | Method @@ -718,25 +733,25 @@ type ILNativeType = | IUnknown | IDispatch | Interface - | Error - | SafeArray of ILNativeVariant * string option + | Error + | SafeArray of ILNativeVariant * string option | ANSIBSTR | VariantBool /// Local variables [] -type ILLocal = +type internal ILLocal = { Type: ILType IsPinned: bool DebugInfo: (string * int * int) option } - -type ILLocals = list + +type internal ILLocals = list /// IL method bodies [] -type ILMethodBody = +type internal ILMethodBody = { IsZeroInit: bool - MaxStack: int32 + MaxStack: int32 NoInlining: bool AggressiveInlining: bool Locals: ILLocals @@ -745,20 +760,20 @@ type ILMethodBody = /// Member Access [] -type ILMemberAccess = +type ILMemberAccess = | Assembly | CompilerControlled | FamilyAndAssembly | FamilyOrAssembly | Family - | Private - | Public + | Private + | Public [] -type ILAttribElem = +type ILAttribElem = /// Represents a custom attribute parameter of type 'string'. These may be null, in which case they are encoded in a special /// way as indicated by Ecma-335 Partition II. - | String of string option + | String of string option | Bool of bool | Char of char | SByte of sbyte @@ -771,7 +786,7 @@ type ILAttribElem = | UInt64 of uint64 | Single of single | Double of double - | Null + | Null | Type of ILType option | TypeRef of ILTypeRef option | Array of ILType * ILAttribElem list @@ -789,16 +804,17 @@ type ILAttribute = | Decoded of method: ILMethodSpec * fixedArgs: ILAttribElem list * namedArgs: ILAttributeNamedArg list /// Attribute instance constructor. - member Method: ILMethodSpec + member internal Method: ILMethodSpec /// Decoded arguments. May be empty in encoded attribute form. - member Elements: ILAttribElem list + member internal Elements: ILAttribElem list - member WithMethod: method: ILMethodSpec -> ILAttribute + member internal WithMethod: method: ILMethodSpec -> ILAttribute [] type ILAttributes = member AsArray: ILAttribute [] + member AsList: ILAttribute list /// Represents the efficiency-oriented storage of ILAttributes in another item. @@ -807,12 +823,12 @@ type ILAttributesStored /// Method parameters and return values. [] -type ILParameter = +type ILParameter = { Name: string option Type: ILType - Default: ILFieldInit option - /// Marshalling map for parameters. COM Interop only. - Marshal: ILNativeType option + Default: ILFieldInit option + /// Marshalling map for parameters. COM Interop only. + Marshal: ILNativeType option IsIn: bool IsOut: bool IsOptional: bool @@ -820,15 +836,15 @@ type ILParameter = MetadataIndex: int32 } member CustomAttrs: ILAttributes -type ILParameters = list +type ILParameters = ILParameter list -val typesOfILParams: ILParameters -> ILType list +val internal typesOfILParams: ILParameters -> ILType list /// Method return values. [] -type ILReturn = +type ILReturn = { Marshal: ILNativeType option - Type: ILType + Type: ILType CustomAttrsStored: ILAttributesStored MetadataIndex: int32 } @@ -837,13 +853,13 @@ type ILReturn = member WithCustomAttrs: customAttrs: ILAttributes -> ILReturn [] -type ILSecurityAction = - | Request +type internal ILSecurityAction = + | Request | Demand | Assert | Deny | PermitOnly - | LinkCheck + | LinkCheck | InheritCheck | ReqMin | ReqOpt @@ -857,13 +873,13 @@ type ILSecurityAction = | InheritanceDemandChoice | DemandChoice -type ILSecurityDecl = +type internal ILSecurityDecl = | ILSecurityDecl of ILSecurityAction * byte[] -/// Abstract type equivalent to ILSecurityDecl list - use helpers +/// Abstract type equivalent to ILSecurityDecl list - use helpers /// below to construct/destruct these. [] -type ILSecurityDecls = +type internal ILSecurityDecls = member AsList: ILSecurityDecl list /// Represents the efficiency-oriented storage of ILSecurityDecls in another item. @@ -872,7 +888,7 @@ type ILSecurityDeclsStored /// PInvoke attributes. [] -type PInvokeCallingConvention = +type internal PInvokeCallingConvention = | None | Cdecl | Stdcall @@ -881,26 +897,26 @@ type PInvokeCallingConvention = | WinApi [] -type PInvokeCharEncoding = +type internal PInvokeCharEncoding = | None | Ansi | Unicode | Auto [] -type PInvokeCharBestFit = +type internal PInvokeCharBestFit = | UseAssembly | Enabled | Disabled [] -type PInvokeThrowOnUnmappableChar = +type internal PInvokeThrowOnUnmappableChar = | UseAssembly | Enabled | Disabled [] -type PInvokeMethod = +type internal PInvokeMethod = { Where: ILModuleRef Name: string CallingConv: PInvokeCallingConvention @@ -910,106 +926,82 @@ type PInvokeMethod = ThrowOnUnmappableChar: PInvokeThrowOnUnmappableChar CharBestFit: PInvokeCharBestFit } - -/// [OverridesSpec] - refer to a method declaration in a superclass or interface. -type ILOverridesSpec = +/// Represents a reference to a method declaration in a superclass or interface. +type internal ILOverridesSpec = | OverridesSpec of ILMethodRef * ILType member MethodRef: ILMethodRef - member DeclaringType: ILType - -type ILMethodVirtualInfo = - { IsFinal: bool - IsNewSlot: bool - IsCheckAccessOnOverride: bool - IsAbstract: bool } - -[] -type MethodKind = - | Static - | Cctor - | Ctor - | NonVirtual - | Virtual of ILMethodVirtualInfo + member DeclaringType: ILType [] type MethodBody = - | IL of ILMethodBody - | PInvoke of PInvokeMethod + | IL of Lazy + | PInvoke of Lazy | Abstract | Native | NotAvailable -[] -type MethodCodeKind = - | IL - | Native - | Runtime - /// Generic parameters. Formal generic parameter declarations may include the bounds, if any, on the generic parameter. type ILGenericParameterDef = { Name: string /// At most one is the parent type, the others are interface types. - Constraints: ILTypes + Constraints: ILTypes /// Variance of type parameters, only applicable to generic parameters for generic interfaces and delegates. - Variance: ILGenericVariance + Variance: ILGenericVariance /// Indicates the type argument must be a reference type. - HasReferenceTypeConstraint: bool + HasReferenceTypeConstraint: bool /// Indicates the type argument must be a value type, but not Nullable. - HasNotNullableValueTypeConstraint: bool + HasNotNullableValueTypeConstraint: bool /// Indicates the type argument must have a public nullary constructor. - HasDefaultConstructorConstraint: bool - + HasDefaultConstructorConstraint: bool + /// Do not use this CustomAttrsStored: ILAttributesStored /// Do not use this MetadataIndex: int32 } - member CustomAttrs: ILAttributes + member CustomAttrs: ILAttributes type ILGenericParameterDefs = ILGenericParameterDef list -[] -type ILLazyMethodBody = - member Contents: MethodBody - -/// IL Method definitions. +/// IL Method definitions. [] -type ILMethodDef = +type ILMethodDef = /// Functional creation of a value, with delayed reading of some elements via a metadata index - new: name: string * attributes: MethodAttributes * implAttributes: MethodImplAttributes * callingConv: ILCallingConv * - parameters: ILParameters * ret: ILReturn * body: ILLazyMethodBody * isEntryPoint:bool * genericParams: ILGenericParameterDefs * + internal new: + name: string * attributes: MethodAttributes * implAttributes: MethodImplAttributes * callingConv: ILCallingConv * + parameters: ILParameters * ret: ILReturn * body: Lazy * isEntryPoint:bool * genericParams: ILGenericParameterDefs * securityDeclsStored: ILSecurityDeclsStored * customAttrsStored: ILAttributesStored * metadataIndex: int32 -> ILMethodDef /// Functional creation of a value, immediate - new: name: string * attributes: MethodAttributes * implAttributes: MethodImplAttributes * callingConv: ILCallingConv * - parameters: ILParameters * ret: ILReturn * body: ILLazyMethodBody * isEntryPoint:bool * genericParams: ILGenericParameterDefs * + new: name: string * attributes: MethodAttributes * implAttributes: MethodImplAttributes * callingConv: ILCallingConv * + parameters: ILParameters * ret: ILReturn * body: Lazy * isEntryPoint:bool * genericParams: ILGenericParameterDefs * securityDecls: ILSecurityDecls * customAttrs: ILAttributes -> ILMethodDef - + member Name: string member Attributes: MethodAttributes member ImplAttributes: MethodImplAttributes member CallingConv: ILCallingConv member Parameters: ILParameters member Return: ILReturn - member Body: ILLazyMethodBody + member Body: MethodBody member SecurityDecls: ILSecurityDecls member IsEntryPoint:bool member GenericParams: ILGenericParameterDefs - member CustomAttrs: ILAttributes + member CustomAttrs: ILAttributes member ParameterTypes: ILTypes member IsIL: bool member Code: ILCode option member Locals: ILLocals member MaxStack: int32 member IsZeroInit: bool - + /// Indicates a .cctor method. member IsClassInitializer: bool @@ -1022,9 +1014,9 @@ type ILMethodDef = /// Indicates this is an instance methods that is not virtual. member IsNonVirtualInstance: bool - /// Indicates an instance methods that is virtual or abstract or implements an interface slot. + /// Indicates an instance methods that is virtual or abstract or implements an interface slot. member IsVirtual: bool - + member IsFinal: bool member IsNewSlot: bool member IsCheckAccessOnOverride: bool @@ -1039,7 +1031,7 @@ type ILMethodDef = member IsUnmanagedExport: bool member IsReqSecObj: bool - /// Some methods are marked "HasSecurity" even if there are no permissions attached, e.g. if they use SuppressUnmanagedCodeSecurityAttribute + /// Some methods are marked "HasSecurity" even if there are no permissions attached, e.g. if they use SuppressUnmanagedCodeSecurityAttribute member HasSecurity: bool member IsManaged: bool member IsForwardRef: bool @@ -1051,28 +1043,29 @@ type ILMethodDef = /// SafeHandle finalizer must be run. member IsMustRun: bool - + /// Functional update of the value - member With: ?name: string * ?attributes: MethodAttributes * ?implAttributes: MethodImplAttributes * ?callingConv: ILCallingConv * - ?parameters: ILParameters * ?ret: ILReturn * ?body: ILLazyMethodBody * ?securityDecls: ILSecurityDecls * ?isEntryPoint:bool * + member internal + With: ?name: string * ?attributes: MethodAttributes * ?implAttributes: MethodImplAttributes * ?callingConv: ILCallingConv * + ?parameters: ILParameters * ?ret: ILReturn * ?body: Lazy * ?securityDecls: ILSecurityDecls * ?isEntryPoint:bool * ?genericParams: ILGenericParameterDefs * ?customAttrs: ILAttributes -> ILMethodDef - member WithSpecialName: ILMethodDef - member WithHideBySig: unit -> ILMethodDef - member WithHideBySig: bool -> ILMethodDef - member WithFinal: bool -> ILMethodDef - member WithAbstract: bool -> ILMethodDef - member WithAccess: ILMemberAccess -> ILMethodDef - member WithNewSlot: ILMethodDef - member WithSecurity: bool -> ILMethodDef - member WithPInvoke: bool -> ILMethodDef - member WithPreserveSig: bool -> ILMethodDef - member WithSynchronized: bool -> ILMethodDef - member WithNoInlining: bool -> ILMethodDef - member WithAggressiveInlining: bool -> ILMethodDef - member WithRuntime: bool -> ILMethodDef + member internal WithSpecialName: ILMethodDef + member internal WithHideBySig: unit -> ILMethodDef + member internal WithHideBySig: bool -> ILMethodDef + member internal WithFinal: bool -> ILMethodDef + member internal WithAbstract: bool -> ILMethodDef + member internal WithAccess: ILMemberAccess -> ILMethodDef + member internal WithNewSlot: ILMethodDef + member internal WithSecurity: bool -> ILMethodDef + member internal WithPInvoke: bool -> ILMethodDef + member internal WithPreserveSig: bool -> ILMethodDef + member internal WithSynchronized: bool -> ILMethodDef + member internal WithNoInlining: bool -> ILMethodDef + member internal WithAggressiveInlining: bool -> ILMethodDef + member internal WithRuntime: bool -> ILMethodDef /// Tables of methods. Logically equivalent to a list of methods but -/// the table is kept in a form optimized for looking up methods by +/// the table is kept in a form optimized for looking up methods by /// name and arity. [] type ILMethodDefs = @@ -1084,27 +1077,28 @@ type ILMethodDefs = /// Field definitions. [] -type ILFieldDef = +type ILFieldDef = /// Functional creation of a value using delayed reading via a metadata index - new: name: string * fieldType: ILType * attributes: FieldAttributes * data: byte[] option * - literalValue: ILFieldInit option * offset: int32 option * marshal: ILNativeType option * + internal new: + name: string * fieldType: ILType * attributes: FieldAttributes * data: byte[] option * + literalValue: ILFieldInit option * offset: int32 option * marshal: ILNativeType option * customAttrsStored: ILAttributesStored * metadataIndex: int32 -> ILFieldDef /// Functional creation of a value, immediate - new: name: string * fieldType: ILType * attributes: FieldAttributes * data: byte[] option * - literalValue: ILFieldInit option * offset: int32 option * marshal: ILNativeType option * + new: name: string * fieldType: ILType * attributes: FieldAttributes * data: byte[] option * + literalValue: ILFieldInit option * offset: int32 option * marshal: ILNativeType option * customAttrs: ILAttributes -> ILFieldDef member Name: string member FieldType: ILType member Attributes: FieldAttributes member Data: byte[] option - member LiteralValue: ILFieldInit option + member LiteralValue: ILFieldInit option /// The explicit offset in bytes when explicit layout is used. - member Offset: int32 option - member Marshal: ILNativeType option + member Offset: int32 option + member Marshal: ILNativeType option member CustomAttrs: ILAttributes member IsStatic: bool member IsSpecialName: bool @@ -1114,41 +1108,43 @@ type ILFieldDef = member Access: ILMemberAccess /// Functional update of the value - member With: ?name: string * ?fieldType: ILType * ?attributes: FieldAttributes * ?data: byte[] option * ?literalValue: ILFieldInit option * - ?offset: int32 option * ?marshal: ILNativeType option * ?customAttrs: ILAttributes -> ILFieldDef - member WithAccess: ILMemberAccess -> ILFieldDef - member WithInitOnly: bool -> ILFieldDef - member WithStatic: bool -> ILFieldDef - member WithSpecialName: bool -> ILFieldDef - member WithNotSerialized: bool -> ILFieldDef - member WithLiteralDefaultValue: ILFieldInit option -> ILFieldDef - member WithFieldMarshal: ILNativeType option -> ILFieldDef - -/// Tables of fields. Logically equivalent to a list of fields but the table is kept in + member internal With: + ?name: string * ?fieldType: ILType * ?attributes: FieldAttributes * ?data: byte[] option * ?literalValue: ILFieldInit option * + ?offset: int32 option * ?marshal: ILNativeType option * ?customAttrs: ILAttributes -> ILFieldDef + member internal WithAccess: ILMemberAccess -> ILFieldDef + member internal WithInitOnly: bool -> ILFieldDef + member internal WithStatic: bool -> ILFieldDef + member internal WithSpecialName: bool -> ILFieldDef + member internal WithNotSerialized: bool -> ILFieldDef + member internal WithLiteralDefaultValue: ILFieldInit option -> ILFieldDef + member internal WithFieldMarshal: ILNativeType option -> ILFieldDef + +/// Tables of fields. Logically equivalent to a list of fields but the table is kept in /// a form to allow efficient looking up fields by name. [] type ILFieldDefs = - member AsList: ILFieldDef list - member LookupByName: string -> ILFieldDef list + member internal AsList: ILFieldDef list + member internal LookupByName: string -> ILFieldDef list /// Event definitions. [] type ILEventDef = /// Functional creation of a value, using delayed reading via a metadata index, for ilread.fs - new: eventType: ILType option * name: string * attributes: EventAttributes * addMethod: ILMethodRef * - removeMethod: ILMethodRef * fireMethod: ILMethodRef option * otherMethods: ILMethodRef list * + internal new: + eventType: ILType option * name: string * attributes: EventAttributes * addMethod: ILMethodRef * + removeMethod: ILMethodRef * fireMethod: ILMethodRef option * otherMethods: ILMethodRef list * customAttrsStored: ILAttributesStored * metadataIndex: int32 -> ILEventDef /// Functional creation of a value, immediate - new: eventType: ILType option * name: string * attributes: EventAttributes * addMethod: ILMethodRef * - removeMethod: ILMethodRef * fireMethod: ILMethodRef option * otherMethods: ILMethodRef list * + new: eventType: ILType option * name: string * attributes: EventAttributes * addMethod: ILMethodRef * + removeMethod: ILMethodRef * fireMethod: ILMethodRef option * otherMethods: ILMethodRef list * customAttrs: ILAttributes -> ILEventDef member EventType: ILType option member Name: string member Attributes: EventAttributes - member AddMethod: ILMethodRef + member AddMethod: ILMethodRef member RemoveMethod: ILMethodRef member FireMethod: ILMethodRef option member OtherMethods: ILMethodRef list @@ -1157,28 +1153,30 @@ type ILEventDef = member IsRTSpecialName: bool /// Functional update of the value - member With: ?eventType: ILType option * ?name: string * ?attributes: EventAttributes * ?addMethod: ILMethodRef * - ?removeMethod: ILMethodRef * ?fireMethod: ILMethodRef option * ?otherMethods: ILMethodRef list * - ?customAttrs: ILAttributes -> ILEventDef + member internal With: + ?eventType: ILType option * ?name: string * ?attributes: EventAttributes * ?addMethod: ILMethodRef * + ?removeMethod: ILMethodRef * ?fireMethod: ILMethodRef option * ?otherMethods: ILMethodRef list * + ?customAttrs: ILAttributes -> ILEventDef /// Table of those events in a type definition. [] type ILEventDefs = - member AsList: ILEventDef list - member LookupByName: string -> ILEventDef list + member internal AsList: ILEventDef list + member internal LookupByName: string -> ILEventDef list /// Property definitions [] type ILPropertyDef = /// Functional creation of a value, using delayed reading via a metadata index, for ilread.fs - new: name: string * attributes: PropertyAttributes * setMethod: ILMethodRef option * getMethod: ILMethodRef option * - callingConv: ILThisConvention * propertyType: ILType * init: ILFieldInit option * args: ILTypes * + internal new: + name: string * attributes: PropertyAttributes * setMethod: ILMethodRef option * getMethod: ILMethodRef option * + callingConv: ILThisConvention * propertyType: ILType * init: ILFieldInit option * args: ILTypes * customAttrsStored: ILAttributesStored * metadataIndex: int32 -> ILPropertyDef /// Functional creation of a value, immediate - new: name: string * attributes: PropertyAttributes * setMethod: ILMethodRef option * getMethod: ILMethodRef option * - callingConv: ILThisConvention * propertyType: ILType * init: ILFieldInit option * args: ILTypes * + new: name: string * attributes: PropertyAttributes * setMethod: ILMethodRef option * getMethod: ILMethodRef option * + callingConv: ILThisConvention * propertyType: ILType * init: ILFieldInit option * args: ILTypes * customAttrs: ILAttributes -> ILPropertyDef member Name: string @@ -1186,7 +1184,7 @@ type ILPropertyDef = member SetMethod: ILMethodRef option member GetMethod: ILMethodRef option member CallingConv: ILThisConvention - member PropertyType: ILType + member PropertyType: ILType member Init: ILFieldInit option member Args: ILTypes member CustomAttrs: ILAttributes @@ -1194,16 +1192,17 @@ type ILPropertyDef = member IsRTSpecialName: bool /// Functional update of the value - member With: ?name: string * ?attributes: PropertyAttributes * ?setMethod: ILMethodRef option * ?getMethod: ILMethodRef option * - ?callingConv: ILThisConvention * ?propertyType: ILType * ?init: ILFieldInit option * ?args: ILTypes * - ?customAttrs: ILAttributes -> ILPropertyDef + member internal With: + ?name: string * ?attributes: PropertyAttributes * ?setMethod: ILMethodRef option * ?getMethod: ILMethodRef option * + ?callingConv: ILThisConvention * ?propertyType: ILType * ?init: ILFieldInit option * ?args: ILTypes * + ?customAttrs: ILAttributes -> ILPropertyDef /// Table of properties in an IL type definition. [] [] type ILPropertyDefs = - member AsList: ILPropertyDef list - member LookupByName: string -> ILPropertyDef list + member internal AsList: ILPropertyDef list + member internal LookupByName: string -> ILPropertyDef list /// Method Impls type ILMethodImplDef = @@ -1212,18 +1211,18 @@ type ILMethodImplDef = [] type ILMethodImplDefs = - member AsList: ILMethodImplDef list + member internal AsList: ILMethodImplDef list /// Type Layout information. [] type ILTypeDefLayout = | Auto | Sequential of ILTypeDefLayoutInfo - | Explicit of ILTypeDefLayoutInfo + | Explicit of ILTypeDefLayoutInfo -and ILTypeDefLayoutInfo = +type internal ILTypeDefLayoutInfo = { Size: int32 option - Pack: uint16 option } + Pack: uint16 option } /// Indicate the initialization semantics of a type. [] @@ -1241,9 +1240,9 @@ type ILDefaultPInvokeEncoding = /// Type Access. [] type ILTypeDefAccess = - | Public + | Public | Private - | Nested of ILMemberAccess + | Nested of ILMemberAccess /// A categorization of type definitions into "kinds" [] @@ -1251,42 +1250,43 @@ type ILTypeDefKind = | Class | ValueType | Interface - | Enum - | Delegate + | Enum + | Delegate -/// Tables of named type definitions. +/// Tables of named type definitions. [] type ILTypeDefs = interface IEnumerable - member AsArray: ILTypeDef[] + member internal AsArray: ILTypeDef[] - member AsList: ILTypeDef list + member internal AsList: ILTypeDef list /// Get some information about the type defs, but do not force the read of the type defs themselves. - member AsArrayOfPreTypeDefs: ILPreTypeDef[] + member internal AsArrayOfPreTypeDefs: ILPreTypeDef[] - /// Calls to FindByName will result in any laziness in the overall - /// set of ILTypeDefs being read in in addition - /// to the details for the type found, but the remaining individual - /// type definitions will not be read. - member FindByName: string -> ILTypeDef + /// Calls to FindByName will result in any laziness in the overall + /// set of ILTypeDefs being read in in addition + /// to the details for the type found, but the remaining individual + /// type definitions will not be read. + member internal FindByName: string -> ILTypeDef -/// Represents IL Type Definitions. -and [] - ILTypeDef = +/// Represents IL Type Definitions. +[] +type ILTypeDef = /// Functional creation of a value, using delayed reading via a metadata index, for ilread.fs - new: name: string * attributes: TypeAttributes * layout: ILTypeDefLayout * implements: ILTypes * genericParams: ILGenericParameterDefs * - extends: ILType option * methods: ILMethodDefs * nestedTypes: ILTypeDefs * fields: ILFieldDefs * methodImpls: ILMethodImplDefs * - events: ILEventDefs * properties: ILPropertyDefs * securityDeclsStored: ILSecurityDeclsStored * customAttrsStored: ILAttributesStored * metadataIndex: int32 -> ILTypeDef + internal new: + name: string * attributes: TypeAttributes * layout: ILTypeDefLayout * implements: ILTypes * genericParams: ILGenericParameterDefs * + extends: ILType option * methods: ILMethodDefs * nestedTypes: ILTypeDefs * fields: ILFieldDefs * methodImpls: ILMethodImplDefs * + events: ILEventDefs * properties: ILPropertyDefs * securityDeclsStored: ILSecurityDeclsStored * customAttrsStored: ILAttributesStored * metadataIndex: int32 -> ILTypeDef /// Functional creation of a value, immediate - new: name: string * attributes: TypeAttributes * layout: ILTypeDefLayout * implements: ILTypes * genericParams: ILGenericParameterDefs * - extends: ILType option * methods: ILMethodDefs * nestedTypes: ILTypeDefs * fields: ILFieldDefs * methodImpls: ILMethodImplDefs * + new: name: string * attributes: TypeAttributes * layout: ILTypeDefLayout * implements: ILTypes * genericParams: ILGenericParameterDefs * + extends: ILType option * methods: ILMethodDefs * nestedTypes: ILTypeDefs * fields: ILFieldDefs * methodImpls: ILMethodImplDefs * events: ILEventDefs * properties: ILPropertyDefs * securityDecls: ILSecurityDecls * customAttrs: ILAttributes -> ILTypeDef - member Name: string + member Name: string member Attributes: TypeAttributes member GenericParams: ILGenericParameterDefs member Layout: ILTypeDefLayout @@ -1310,31 +1310,31 @@ and [] member IsAbstract: bool member IsSealed: bool member IsSerializable: bool - /// Class or interface generated for COM interop. + /// Class or interface generated for COM interop. member IsComInterop: bool member IsSpecialName: bool - /// Some classes are marked "HasSecurity" even if there are no permissions attached, - /// e.g. if they use SuppressUnmanagedCodeSecurityAttribute + /// Some classes are marked "HasSecurity" even if there are no permissions attached, + /// e.g. if they use SuppressUnmanagedCodeSecurityAttribute member HasSecurity: bool member Encoding: ILDefaultPInvokeEncoding - member WithAccess: ILTypeDefAccess -> ILTypeDef - member WithNestedAccess: ILMemberAccess -> ILTypeDef - member WithSealed: bool -> ILTypeDef - member WithSerializable: bool -> ILTypeDef - member WithAbstract: bool -> ILTypeDef - member WithImport: bool -> ILTypeDef - member WithHasSecurity: bool -> ILTypeDef - member WithLayout: ILTypeDefLayout -> ILTypeDef - member WithKind: ILTypeDefKind -> ILTypeDef - member WithEncoding: ILDefaultPInvokeEncoding -> ILTypeDef - member WithSpecialName: bool -> ILTypeDef - member WithInitSemantics: ILTypeInit -> ILTypeDef + member internal WithAccess: ILTypeDefAccess -> ILTypeDef + member internal WithNestedAccess: ILMemberAccess -> ILTypeDef + member internal WithSealed: bool -> ILTypeDef + member internal WithSerializable: bool -> ILTypeDef + member internal WithAbstract: bool -> ILTypeDef + member internal WithImport: bool -> ILTypeDef + member internal WithHasSecurity: bool -> ILTypeDef + member internal WithLayout: ILTypeDefLayout -> ILTypeDef + member internal WithKind: ILTypeDefKind -> ILTypeDef + member internal WithEncoding: ILDefaultPInvokeEncoding -> ILTypeDef + member internal WithSpecialName: bool -> ILTypeDef + member internal WithInitSemantics: ILTypeInit -> ILTypeDef /// Functional update - member With: ?name: string * ?attributes: TypeAttributes * ?layout: ILTypeDefLayout * ?implements: ILTypes * - ?genericParams:ILGenericParameterDefs * ?extends:ILType option * ?methods:ILMethodDefs * - ?nestedTypes:ILTypeDefs * ?fields: ILFieldDefs * ?methodImpls:ILMethodImplDefs * ?events:ILEventDefs * + member With: ?name: string * ?attributes: TypeAttributes * ?layout: ILTypeDefLayout * ?implements: ILTypes * + ?genericParams:ILGenericParameterDefs * ?extends:ILType option * ?methods:ILMethodDefs * + ?nestedTypes:ILTypeDefs * ?fields: ILFieldDefs * ?methodImpls:ILMethodImplDefs * ?events:ILEventDefs * ?properties:ILPropertyDefs * ?customAttrs:ILAttributes * ?securityDecls: ILSecurityDecls -> ILTypeDef /// Represents a prefix of information for ILTypeDef. @@ -1342,64 +1342,67 @@ and [] /// The information is enough to perform name resolution for the F# compiler, probe attributes /// for ExtensionAttribute etc. This is key to the on-demand exploration of .NET metadata. /// This information has to be "Goldilocks" - not too much, not too little, just right. -and [] ILPreTypeDef = +[] +type ILPreTypeDef = abstract Namespace: string list abstract Name: string /// Realise the actual full typedef abstract GetTypeDef : unit -> ILTypeDef -and [] ILPreTypeDefImpl = +[] +type internal ILPreTypeDefImpl = interface ILPreTypeDef +[] +type internal ILTypeDefStored -and [] ILTypeDefStored - -val mkILPreTypeDef : ILTypeDef -> ILPreTypeDef -val mkILPreTypeDefComputed : string list * string * (unit -> ILTypeDef) -> ILPreTypeDef -val mkILPreTypeDefRead : string list * string * int32 * ILTypeDefStored -> ILPreTypeDef -val mkILTypeDefReader: (int32 -> ILTypeDef) -> ILTypeDefStored +val internal mkILPreTypeDef : ILTypeDef -> ILPreTypeDef +val internal mkILPreTypeDefComputed : string list * string * (unit -> ILTypeDef) -> ILPreTypeDef +val internal mkILPreTypeDefRead : string list * string * int32 * ILTypeDefStored -> ILPreTypeDef +val internal mkILTypeDefReader: (int32 -> ILTypeDef) -> ILTypeDefStored [] type ILNestedExportedTypes = - member AsList: ILNestedExportedType list + member internal AsList: ILNestedExportedType list /// "Classes Elsewhere" - classes in auxiliary modules. /// -/// Manifests include declarations for all the classes in an +/// Manifests include declarations for all the classes in an /// assembly, regardless of which module they are in. /// -/// The ".class extern" construct describes so-called exported types -- +/// The ".class extern" construct describes so-called exported types -- /// these are public classes defined in the auxiliary modules of this assembly, -/// i.e. modules other than the manifest-carrying module. -/// -/// For example, if you have a two-module -/// assembly (A.DLL and B.DLL), and the manifest resides in the A.DLL, +/// i.e. modules other than the manifest-carrying module. +/// +/// For example, if you have a two-module +/// assembly (A.DLL and B.DLL), and the manifest resides in the A.DLL, /// then in the manifest all the public classes declared in B.DLL should -/// be defined as exported types, i.e., as ".class extern". The public classes -/// defined in A.DLL should not be defined as ".class extern" -- they are -/// already available in the manifest-carrying module. The union of all -/// public classes defined in the manifest-carrying module and all -/// exported types defined there is the set of all classes exposed by -/// this assembly. Thus, by analysing the metadata of the manifest-carrying -/// module of an assembly, you can identify all the classes exposed by +/// be defined as exported types, i.e., as ".class extern". The public classes +/// defined in A.DLL should not be defined as ".class extern" -- they are +/// already available in the manifest-carrying module. The union of all +/// public classes defined in the manifest-carrying module and all +/// exported types defined there is the set of all classes exposed by +/// this assembly. Thus, by analysing the metadata of the manifest-carrying +/// module of an assembly, you can identify all the classes exposed by /// this assembly, and where to find them. /// -/// Nested classes found in external modules should also be located in +/// Nested classes found in external modules should also be located in /// this table, suitably nested inside another "ILExportedTypeOrForwarder" /// definition. -/// these are only found in the "Nested" field of ILExportedTypeOrForwarder objects +/// these are only found in the "Nested" field of ILExportedTypeOrForwarder objects // REVIEW: fold this into ILExportedTypeOrForwarder. There's not much value in keeping these distinct -and ILNestedExportedType = +type ILNestedExportedType = { Name: string Access: ILMemberAccess Nested: ILNestedExportedTypes CustomAttrsStored: ILAttributesStored - MetadataIndex: int32 } + MetadataIndex: int32 } + member CustomAttrs: ILAttributes -/// these are only found in the ILExportedTypesAndForwarders table in the manifest +/// these are only found in the ILExportedTypesAndForwarders table in the manifest [] type ILExportedTypeOrForwarder = { ScopeRef: ILScopeRef @@ -1409,24 +1412,27 @@ type ILExportedTypeOrForwarder = Nested: ILNestedExportedTypes CustomAttrsStored: ILAttributesStored MetadataIndex: int32 } + member Access: ILTypeDefAccess + member IsForwarder: bool + member CustomAttrs: ILAttributes [] [] type ILExportedTypesAndForwarders = - member AsList: ILExportedTypeOrForwarder list - member TryFindByName: string -> ILExportedTypeOrForwarder option + member internal AsList: ILExportedTypeOrForwarder list + member internal TryFindByName: string -> ILExportedTypeOrForwarder option [] -type ILResourceAccess = - | Public - | Private +type internal ILResourceAccess = + | Public + | Private [] -type ILResourceLocation = - internal +type internal ILResourceLocation = + /// Represents a manifest resource that can be read or written to a PE file | Local of ByteStorage @@ -1438,9 +1444,9 @@ type ILResourceLocation = /// "Manifest ILResources" are chunks of resource data, being one of: /// - the data section of the current module (byte[] of resource given directly). -/// - in an external file in this assembly (offset given in the ILResourceLocation field). -/// - as a resources in another assembly of the same name. -type ILResource = +/// - in an external file in this assembly (offset given in the ILResourceLocation field). +/// - as a resources in another assembly of the same name. +type internal ILResource = { Name: string Location: ILResourceLocation Access: ILResourceAccess @@ -1456,54 +1462,70 @@ type ILResource = [] [] type ILResources = - member AsList: ILResource list - + member internal AsList: ILResource list [] type ILAssemblyLongevity = + internal | Unspecified | Library | PlatformAppDomain | PlatformProcess | PlatformSystem + static member Default : ILAssemblyLongevity + /// The main module of an assembly is a module plus some manifest information. -type ILAssemblyManifest = +type ILAssemblyManifest = { Name: string - /// This is the ID of the algorithm used for the hashes of auxiliary - /// files in the assembly. These hashes are stored in the - /// ILModuleRef.Hash fields of this assembly. These are not - /// cryptographic hashes: they are simple file hashes. The algorithm - /// is normally 0x00008004 indicating the SHA1 hash algorithm. - AuxModuleHashAlgorithm: int32 + /// This is the ID of the algorithm used for the hashes of auxiliary + /// files in the assembly. These hashes are stored in the + /// ILModuleRef.Hash fields of this assembly. These are not + /// cryptographic hashes: they are simple file hashes. The algorithm + /// is normally 0x00008004 indicating the SHA1 hash algorithm. + AuxModuleHashAlgorithm: int32 + SecurityDeclsStored: ILSecurityDeclsStored - /// This is the public key used to sign this - /// assembly (the signature itself is stored elsewhere: see the - /// binary format, and may not have been written if delay signing - /// is used). (member Name, member PublicKey) forms the full - /// public name of the assembly. - PublicKey: byte[] option + + /// This is the public key used to sign this + /// assembly (the signature itself is stored elsewhere: see the + /// binary format, and may not have been written if delay signing + /// is used). (member Name, member PublicKey) forms the full + /// public name of the assembly. + PublicKey: byte[] option + Version: ILVersionInfo option + Locale: string option + CustomAttrsStored: ILAttributesStored - AssemblyLongevity: ILAssemblyLongevity + + AssemblyLongevity: ILAssemblyLongevity + DisableJitOptimizations: bool + JitTracking: bool + IgnoreSymbolStoreSequencePoints: bool + Retargetable: bool - /// Records the types implemented by this assembly in auxiliary - /// modules. + + /// Records the types implemented by this assembly in auxiliary + /// modules. ExportedTypes: ILExportedTypesAndForwarders - /// Records whether the entrypoint resides in another module. + + /// Records whether the entrypoint resides in another module. EntrypointElsewhere: ILModuleRef option + MetadataIndex: int32 - } + } member CustomAttrs: ILAttributes member SecurityDecls: ILSecurityDecls - + [] -type ILNativeResource = +type ILNativeResource = + internal /// Represents a native resource to be read from the PE file | In of fileName: string * linkedResourceBase: int * linkedResourceStart: int * linkedResourceLength: int @@ -1513,9 +1535,9 @@ type ILNativeResource = /// One module in the "current" assembly, either a main-module or /// an auxiliary module. The main module will have a manifest. /// -/// An assembly is built by joining together a "main" module plus -/// several auxiliary modules. -type ILModuleDef = +/// An assembly is built by joining together a "main" module plus +/// several auxiliary modules. +type ILModuleDef = { Manifest: ILAssemblyManifest option Name: string TypeDefs: ILTypeDefs @@ -1533,23 +1555,27 @@ type ILModuleDef = PhysicalAlignment: int32 ImageBase: int32 MetadataVersion: string - Resources: ILResources + Resources: ILResources /// e.g. win86 resources, as the exact contents of a .res or .obj file. Must be unlinked manually. NativeResources: ILNativeResource list CustomAttrsStored: ILAttributesStored MetadataIndex: int32 } - member ManifestOfAssembly: ILAssemblyManifest + + member ManifestOfAssembly: ILAssemblyManifest + member HasManifest: bool + member CustomAttrs: ILAttributes -/// Find the method definition corresponding to the given property or -/// event operation. These are always in the same class as the property -/// or event. This is useful especially if your code is not using the Ilbind -/// API to bind references. -val resolveILMethodRef: ILTypeDef -> ILMethodRef -> ILMethodDef -val resolveILMethodRefWithRescope: (ILType -> ILType) -> ILTypeDef -> ILMethodRef -> ILMethodDef +/// Find the method definition corresponding to the given property or +/// event operation. These are always in the same class as the property +/// or event. This is useful especially if your code is not using the Ilbind +/// API to bind references. +val internal resolveILMethodRef: ILTypeDef -> ILMethodRef -> ILMethodDef + +val internal resolveILMethodRefWithRescope: (ILType -> ILType) -> ILTypeDef -> ILMethodRef -> ILMethodDef -// ------------------------------------------------------------------ +// ------------------------------------------------------------------ // Type Names // // The name of a type stored in the Name field is as follows: @@ -1558,42 +1584,42 @@ val resolveILMethodRefWithRescope: (ILType -> ILType) -> ILTypeDef -> ILMethodRe // - For nested types, it is simply the type name. The namespace // must be gleaned from the context in which the nested type // lies. -// ------------------------------------------------------------------ +// ------------------------------------------------------------------ -val splitNamespace: string -> string list +val internal splitNamespace: string -> string list -val splitNamespaceToArray: string -> string[] +val internal splitNamespaceToArray: string -> string[] /// The splitILTypeName utility helps you split a string representing /// a type name into the leading namespace elements (if any), the /// names of any nested types and the type name itself. This function /// memoizes and interns the splitting of the namespace portion of -/// the type name. -val splitILTypeName: string -> string list * string +/// the type name. +val internal splitILTypeName: string -> string list * string -val splitILTypeNameWithPossibleStaticArguments: string -> string[] * string +val internal splitILTypeNameWithPossibleStaticArguments: string -> string[] * string -/// splitTypeNameRight is like splitILTypeName except the +/// splitTypeNameRight is like splitILTypeName except the /// namespace is kept as a whole string, rather than split at dots. -val splitTypeNameRight: string -> string option * string +val internal splitTypeNameRight: string -> string option * string -val typeNameForGlobalFunctions: string +val internal typeNameForGlobalFunctions: string -val isTypeNameForGlobalFunctions: string -> bool +val internal isTypeNameForGlobalFunctions: string -> bool // ==================================================================== // PART 2 -// +// // Making metadata. Where no explicit constructor -// is given, you should create the concrete datatype directly, +// is given, you should create the concrete datatype directly, // e.g. by filling in all appropriate record fields. // ==================================================================== *) /// A table of common references to items in primary assembly (System.Runtime or mscorlib). -/// If a particular version of System.Runtime.dll has been loaded then you should -/// reference items from it via an ILGlobals for that specific version built using mkILGlobals. +/// If a particular version of System.Runtime.dll has been loaded then you should +/// reference items from it via an ILGlobals for that specific version built using mkILGlobals. [] -type ILGlobals = +type internal ILGlobals = member primaryAssemblyScopeRef: ILScopeRef member primaryAssemblyRef: ILAssemblyRef member primaryAssemblyName: string @@ -1617,9 +1643,11 @@ type ILGlobals = member typ_Char: ILType member typ_TypedReference: ILType + member fsharpCoreAssemblyScopeRef: ILScopeRef + /// Is the given assembly possibly a primary assembly? /// In practice, a primary assembly is an assembly that contains the System.Object type definition - /// and has no referenced assemblies. + /// and has no referenced assemblies. /// However, we must consider assemblies that forward the System.Object type definition /// to be possible primary assemblies. /// Therefore, this will return true if the given assembly is the real primary assembly or an assembly that forwards @@ -1628,237 +1656,229 @@ type ILGlobals = member IsPossiblePrimaryAssemblyRef: ILAssemblyRef -> bool /// Build the table of commonly used references given functions to find types in system assemblies -val mkILGlobals: primaryScopeRef: ILScopeRef * assembliesThatForwardToPrimaryAssembly: ILAssemblyRef list -> ILGlobals +val internal mkILGlobals: primaryScopeRef: ILScopeRef * assembliesThatForwardToPrimaryAssembly: ILAssemblyRef list * fsharpCoreAssemblyScopeRef: ILScopeRef -> ILGlobals -val EcmaMscorlibILGlobals: ILGlobals -val PrimaryAssemblyILGlobals: ILGlobals +val internal PrimaryAssemblyILGlobals: ILGlobals /// When writing a binary the fake "toplevel" type definition (called ) -/// must come first. This function puts it first, and creates it in the returned +/// must come first. This function puts it first, and creates it in the returned /// list as an empty typedef if it doesn't already exist. -val destTypeDefsWithGlobalFunctionsFirst: ILGlobals -> ILTypeDefs -> ILTypeDef list - -/// Not all custom attribute data can be decoded without binding types. In particular -/// enums must be bound in order to discover the size of the underlying integer. -/// The following assumes enums have size int32. -val decodeILAttribData: - ILGlobals -> - ILAttribute -> +val internal destTypeDefsWithGlobalFunctionsFirst: ILGlobals -> ILTypeDefs -> ILTypeDef list + +/// Not all custom attribute data can be decoded without binding types. In particular +/// enums must be bound in order to discover the size of the underlying integer. +/// The following assumes enums have size int32. +val internal decodeILAttribData: + ILAttribute -> ILAttribElem list * (* fixed args *) - ILAttributeNamedArg list (* named args: values and flags indicating if they are fields or properties *) + ILAttributeNamedArg list (* named args: values and flags indicating if they are fields or properties *) /// Generate simple references to assemblies and modules. -val mkSimpleAssemblyRef: string -> ILAssemblyRef +val internal mkSimpleAssemblyRef: string -> ILAssemblyRef -val mkSimpleModRef: string -> ILModuleRef +val internal mkSimpleModRef: string -> ILModuleRef -val mkILTyvarTy: uint16 -> ILType +val internal mkILTyvarTy: uint16 -> ILType /// Make type refs. -val mkILNestedTyRef: ILScopeRef * string list * string -> ILTypeRef -val mkILTyRef: ILScopeRef * string -> ILTypeRef -val mkILTyRefInTyRef: ILTypeRef * string -> ILTypeRef +val internal mkILNestedTyRef: ILScopeRef * string list * string -> ILTypeRef +val internal mkILTyRef: ILScopeRef * string -> ILTypeRef +val internal mkILTyRefInTyRef: ILTypeRef * string -> ILTypeRef -type ILGenericArgsList = ILType list +type internal ILGenericArgsList = ILType list /// Make type specs. -val mkILNonGenericTySpec: ILTypeRef -> ILTypeSpec -val mkILTySpec: ILTypeRef * ILGenericArgsList -> ILTypeSpec +val internal mkILNonGenericTySpec: ILTypeRef -> ILTypeSpec +val internal mkILTySpec: ILTypeRef * ILGenericArgsList -> ILTypeSpec /// Make types. -val mkILTy: ILBoxity -> ILTypeSpec -> ILType -val mkILNamedTy: ILBoxity -> ILTypeRef -> ILGenericArgsList -> ILType -val mkILBoxedTy: ILTypeRef -> ILGenericArgsList -> ILType -val mkILValueTy: ILTypeRef -> ILGenericArgsList -> ILType -val mkILNonGenericBoxedTy: ILTypeRef -> ILType -val mkILNonGenericValueTy: ILTypeRef -> ILType -val mkILArrTy: ILType * ILArrayShape -> ILType -val mkILArr1DTy: ILType -> ILType -val isILArrTy: ILType -> bool -val destILArrTy: ILType -> ILArrayShape * ILType -val mkILBoxedType: ILTypeSpec -> ILType +val internal mkILTy: ILBoxity -> ILTypeSpec -> ILType +val internal mkILNamedTy: ILBoxity -> ILTypeRef -> ILGenericArgsList -> ILType +val internal mkILBoxedTy: ILTypeRef -> ILGenericArgsList -> ILType +val internal mkILValueTy: ILTypeRef -> ILGenericArgsList -> ILType +val internal mkILNonGenericBoxedTy: ILTypeRef -> ILType +val internal mkILNonGenericValueTy: ILTypeRef -> ILType +val internal mkILArrTy: ILType * ILArrayShape -> ILType +val internal mkILArr1DTy: ILType -> ILType +val internal isILArrTy: ILType -> bool +val internal destILArrTy: ILType -> ILArrayShape * ILType +val internal mkILBoxedType: ILTypeSpec -> ILType /// Make method references and specs. -val mkILMethRef: ILTypeRef * ILCallingConv * string * int * ILType list * ILType -> ILMethodRef -val mkILMethSpec: ILMethodRef * ILBoxity * ILGenericArgsList * ILGenericArgsList -> ILMethodSpec -val mkILMethSpecForMethRefInTy: ILMethodRef * ILType * ILGenericArgsList -> ILMethodSpec -val mkILMethSpecInTy: ILType * ILCallingConv * string * ILType list * ILType * ILGenericArgsList -> ILMethodSpec +val internal mkILMethRef: ILTypeRef * ILCallingConv * string * int * ILType list * ILType -> ILMethodRef +val internal mkILMethSpec: ILMethodRef * ILBoxity * ILGenericArgsList * ILGenericArgsList -> ILMethodSpec +val internal mkILMethSpecForMethRefInTy: ILMethodRef * ILType * ILGenericArgsList -> ILMethodSpec +val internal mkILMethSpecInTy: ILType * ILCallingConv * string * ILType list * ILType * ILGenericArgsList -> ILMethodSpec /// Construct references to methods on a given type . -val mkILNonGenericMethSpecInTy: ILType * ILCallingConv * string * ILType list * ILType -> ILMethodSpec +val internal mkILNonGenericMethSpecInTy: ILType * ILCallingConv * string * ILType list * ILType -> ILMethodSpec /// Construct references to instance methods. -val mkILInstanceMethSpecInTy: ILType * string * ILType list * ILType * ILGenericArgsList -> ILMethodSpec +val internal mkILInstanceMethSpecInTy: ILType * string * ILType list * ILType * ILGenericArgsList -> ILMethodSpec /// Construct references to instance methods. -val mkILNonGenericInstanceMethSpecInTy: ILType * string * ILType list * ILType -> ILMethodSpec +val internal mkILNonGenericInstanceMethSpecInTy: ILType * string * ILType list * ILType -> ILMethodSpec /// Construct references to static methods. -val mkILStaticMethSpecInTy: ILType * string * ILType list * ILType * ILGenericArgsList -> ILMethodSpec +val internal mkILStaticMethSpecInTy: ILType * string * ILType list * ILType * ILGenericArgsList -> ILMethodSpec /// Construct references to static, non-generic methods. -val mkILNonGenericStaticMethSpecInTy: ILType * string * ILType list * ILType -> ILMethodSpec +val internal mkILNonGenericStaticMethSpecInTy: ILType * string * ILType list * ILType -> ILMethodSpec /// Construct references to constructors. -val mkILCtorMethSpecForTy: ILType * ILType list -> ILMethodSpec +val internal mkILCtorMethSpecForTy: ILType * ILType list -> ILMethodSpec /// Construct references to fields. -val mkILFieldRef: ILTypeRef * string * ILType -> ILFieldRef -val mkILFieldSpec: ILFieldRef * ILType -> ILFieldSpec -val mkILFieldSpecInTy: ILType * string * ILType -> ILFieldSpec +val internal mkILFieldRef: ILTypeRef * string * ILType -> ILFieldRef +val internal mkILFieldSpec: ILFieldRef * ILType -> ILFieldSpec +val internal mkILFieldSpecInTy: ILType * string * ILType -> ILFieldSpec -val mkILCallSig: ILCallingConv * ILType list * ILType -> ILCallingSignature +val internal mkILCallSig: ILCallingConv * ILType list * ILType -> ILCallingSignature /// Make generalized versions of possibly-generic types, e.g. Given the ILTypeDef for List, return the type "List". -val mkILFormalBoxedTy: ILTypeRef -> ILGenericParameterDef list -> ILType -val mkILFormalNamedTy: ILBoxity -> ILTypeRef -> ILGenericParameterDef list -> ILType +val internal mkILFormalBoxedTy: ILTypeRef -> ILGenericParameterDef list -> ILType +val internal mkILFormalNamedTy: ILBoxity -> ILTypeRef -> ILGenericParameterDef list -> ILType -val mkILFormalTypars: ILType list -> ILGenericParameterDefs -val mkILFormalGenericArgs: int -> ILGenericParameterDefs -> ILGenericArgsList -val mkILSimpleTypar: string -> ILGenericParameterDef +val internal mkILFormalTypars: ILType list -> ILGenericParameterDefs +val internal mkILFormalGenericArgs: int -> ILGenericParameterDefs -> ILGenericArgsList +val internal mkILSimpleTypar: string -> ILGenericParameterDef /// Make custom attributes. -val mkILCustomAttribMethRef: - ILGlobals - -> ILMethodSpec - * ILAttribElem list (* fixed args: values and implicit types *) - * ILAttributeNamedArg list (* named args: values and flags indicating if they are fields or properties *) +val internal mkILCustomAttribMethRef: + ILMethodSpec + * ILAttribElem list (* fixed args: values and implicit types *) + * ILAttributeNamedArg list (* named args: values and flags indicating if they are fields or properties *) -> ILAttribute -val mkILCustomAttribute: - ILGlobals - -> ILTypeRef * ILType list * - ILAttribElem list (* fixed args: values and implicit types *) * - ILAttributeNamedArg list (* named args: values and flags indicating if they are fields or properties *) +val internal mkILCustomAttribute: + ILTypeRef * ILType list * + ILAttribElem list (* fixed args: values and implicit types *) * + ILAttributeNamedArg list (* named args: values and flags indicating if they are fields or properties *) -> ILAttribute -val getCustomAttrData: ILGlobals -> ILAttribute -> byte[] +val internal getCustomAttrData: ILAttribute -> byte[] -val mkPermissionSet: ILGlobals -> ILSecurityAction * (ILTypeRef * (string * ILType * ILAttribElem) list) list -> ILSecurityDecl +val internal mkPermissionSet: ILSecurityAction * (ILTypeRef * (string * ILType * ILAttribElem) list) list -> ILSecurityDecl /// Making code. -val generateCodeLabel: unit -> ILCodeLabel -val formatCodeLabel: ILCodeLabel -> string +val internal generateCodeLabel: unit -> ILCodeLabel +val internal formatCodeLabel: ILCodeLabel -> string -/// Make some code that is a straight line sequence of instructions. +/// Make some code that is a straight line sequence of instructions. /// The function will add a "return" if the last instruction is not an exiting instruction. -val nonBranchingInstrsToCode: ILInstr list -> ILCode +val internal nonBranchingInstrsToCode: ILInstr list -> ILCode /// Helpers for codegen: scopes for allocating new temporary variables. -type ILLocalsAllocator = +type internal ILLocalsAllocator = new: preAlloc: int -> ILLocalsAllocator member AllocLocal: ILLocal -> uint16 member Close: unit -> ILLocal list /// Derived functions for making some common patterns of instructions. -val mkNormalCall: ILMethodSpec -> ILInstr -val mkNormalCallvirt: ILMethodSpec -> ILInstr -val mkNormalCallconstraint: ILType * ILMethodSpec -> ILInstr -val mkNormalNewobj: ILMethodSpec -> ILInstr -val mkCallBaseConstructor: ILType * ILType list -> ILInstr list -val mkNormalStfld: ILFieldSpec -> ILInstr -val mkNormalStsfld: ILFieldSpec -> ILInstr -val mkNormalLdsfld: ILFieldSpec -> ILInstr -val mkNormalLdfld: ILFieldSpec -> ILInstr -val mkNormalLdflda: ILFieldSpec -> ILInstr -val mkNormalLdobj: ILType -> ILInstr -val mkNormalStobj: ILType -> ILInstr -val mkLdcInt32: int32 -> ILInstr -val mkLdarg0: ILInstr -val mkLdloc: uint16 -> ILInstr -val mkStloc: uint16 -> ILInstr -val mkLdarg: uint16 -> ILInstr - -val andTailness: ILTailcall -> bool -> ILTailcall +val internal mkNormalCall: ILMethodSpec -> ILInstr +val internal mkNormalCallvirt: ILMethodSpec -> ILInstr +val internal mkNormalCallconstraint: ILType * ILMethodSpec -> ILInstr +val internal mkNormalNewobj: ILMethodSpec -> ILInstr +val internal mkCallBaseConstructor: ILType * ILType list -> ILInstr list +val internal mkNormalStfld: ILFieldSpec -> ILInstr +val internal mkNormalStsfld: ILFieldSpec -> ILInstr +val internal mkNormalLdsfld: ILFieldSpec -> ILInstr +val internal mkNormalLdfld: ILFieldSpec -> ILInstr +val internal mkNormalLdflda: ILFieldSpec -> ILInstr +val internal mkNormalLdobj: ILType -> ILInstr +val internal mkNormalStobj: ILType -> ILInstr +val internal mkLdcInt32: int32 -> ILInstr +val internal mkLdarg0: ILInstr +val internal mkLdloc: uint16 -> ILInstr +val internal mkStloc: uint16 -> ILInstr +val internal mkLdarg: uint16 -> ILInstr + +val internal andTailness: ILTailcall -> bool -> ILTailcall /// Derived functions for making return, parameter and local variable /// objects for use in method definitions. -val mkILParam: string option * ILType -> ILParameter -val mkILParamAnon: ILType -> ILParameter -val mkILParamNamed: string * ILType -> ILParameter +val internal mkILParam: string option * ILType -> ILParameter +val internal mkILParamAnon: ILType -> ILParameter +val internal mkILParamNamed: string * ILType -> ILParameter val mkILReturn: ILType -> ILReturn -val mkILLocal: ILType -> (string * int * int) option -> ILLocal +val internal mkILLocal: ILType -> (string * int * int) option -> ILLocal /// Make a formal generic parameters. -val mkILEmptyGenericParams: ILGenericParameterDefs +val internal mkILEmptyGenericParams: ILGenericParameterDefs /// Make method definitions. -val mkILMethodBody: initlocals:bool * ILLocals * int * ILCode * ILSourceMarker option -> ILMethodBody -val mkMethodBody: bool * ILLocals * int * ILCode * ILSourceMarker option -> MethodBody -val methBodyNotAvailable: ILLazyMethodBody -val methBodyAbstract: ILLazyMethodBody -val methBodyNative: ILLazyMethodBody - -val mkILCtor: ILMemberAccess * ILParameter list * MethodBody -> ILMethodDef -val mkILClassCtor: MethodBody -> ILMethodDef -val mkILNonGenericEmptyCtor: ILSourceMarker option -> ILType -> ILMethodDef -val mkILStaticMethod: ILGenericParameterDefs * string * ILMemberAccess * ILParameter list * ILReturn * MethodBody -> ILMethodDef -val mkILNonGenericStaticMethod: string * ILMemberAccess * ILParameter list * ILReturn * MethodBody -> ILMethodDef -val mkILGenericVirtualMethod: string * ILMemberAccess * ILGenericParameterDefs * ILParameter list * ILReturn * MethodBody -> ILMethodDef -val mkILGenericNonVirtualMethod: string * ILMemberAccess * ILGenericParameterDefs * ILParameter list * ILReturn * MethodBody -> ILMethodDef -val mkILNonGenericVirtualMethod: string * ILMemberAccess * ILParameter list * ILReturn * MethodBody -> ILMethodDef -val mkILNonGenericInstanceMethod: string * ILMemberAccess * ILParameter list * ILReturn * MethodBody -> ILMethodDef - +val internal mkILMethodBody: initlocals:bool * ILLocals * int * ILCode * ILSourceMarker option -> ILMethodBody +val internal mkMethodBody: bool * ILLocals * int * ILCode * ILSourceMarker option -> MethodBody +val internal methBodyNotAvailable: Lazy +val internal methBodyAbstract: Lazy +val internal methBodyNative: Lazy + +val internal mkILCtor: ILMemberAccess * ILParameter list * MethodBody -> ILMethodDef +val internal mkILClassCtor: MethodBody -> ILMethodDef +val internal mkILNonGenericEmptyCtor: ILSourceMarker option -> ILType -> ILMethodDef +val internal mkILStaticMethod: ILGenericParameterDefs * string * ILMemberAccess * ILParameter list * ILReturn * MethodBody -> ILMethodDef +val internal mkILNonGenericStaticMethod: string * ILMemberAccess * ILParameter list * ILReturn * MethodBody -> ILMethodDef +val internal mkILGenericVirtualMethod: string * ILMemberAccess * ILGenericParameterDefs * ILParameter list * ILReturn * MethodBody -> ILMethodDef +val internal mkILGenericNonVirtualMethod: string * ILMemberAccess * ILGenericParameterDefs * ILParameter list * ILReturn * MethodBody -> ILMethodDef +val internal mkILNonGenericVirtualMethod: string * ILMemberAccess * ILParameter list * ILReturn * MethodBody -> ILMethodDef +val internal mkILNonGenericInstanceMethod: string * ILMemberAccess * ILParameter list * ILReturn * MethodBody -> ILMethodDef /// Make field definitions. -val mkILInstanceField: string * ILType * ILFieldInit option * ILMemberAccess -> ILFieldDef -val mkILStaticField: string * ILType * ILFieldInit option * byte[] option * ILMemberAccess -> ILFieldDef -val mkILLiteralField: string * ILType * ILFieldInit * byte[] option * ILMemberAccess -> ILFieldDef +val internal mkILInstanceField: string * ILType * ILFieldInit option * ILMemberAccess -> ILFieldDef +val internal mkILStaticField: string * ILType * ILFieldInit option * byte[] option * ILMemberAccess -> ILFieldDef +val internal mkILLiteralField: string * ILType * ILFieldInit * byte[] option * ILMemberAccess -> ILFieldDef /// Make a type definition. -val mkILGenericClass: string * ILTypeDefAccess * ILGenericParameterDefs * ILType * ILType list * ILMethodDefs * ILFieldDefs * ILTypeDefs * ILPropertyDefs * ILEventDefs * ILAttributes * ILTypeInit -> ILTypeDef -val mkILSimpleClass: ILGlobals -> string * ILTypeDefAccess * ILMethodDefs * ILFieldDefs * ILTypeDefs * ILPropertyDefs * ILEventDefs * ILAttributes * ILTypeInit -> ILTypeDef -val mkILTypeDefForGlobalFunctions: ILGlobals -> ILMethodDefs * ILFieldDefs -> ILTypeDef +val internal mkILGenericClass: string * ILTypeDefAccess * ILGenericParameterDefs * ILType * ILType list * ILMethodDefs * ILFieldDefs * ILTypeDefs * ILPropertyDefs * ILEventDefs * ILAttributes * ILTypeInit -> ILTypeDef +val internal mkILSimpleClass: ILGlobals -> string * ILTypeDefAccess * ILMethodDefs * ILFieldDefs * ILTypeDefs * ILPropertyDefs * ILEventDefs * ILAttributes * ILTypeInit -> ILTypeDef +val internal mkILTypeDefForGlobalFunctions: ILGlobals -> ILMethodDefs * ILFieldDefs -> ILTypeDef /// Make a type definition for a value type used to point to raw data. -/// These are useful when generating array initialization code -/// according to the +/// These are useful when generating array initialization code +/// according to the /// ldtoken field valuetype ''/'$$struct0x6000127-1' ''::'$$method0x6000127-1' /// call void System.Runtime.CompilerServices.RuntimeHelpers::InitializeArray(class System.Array,valuetype System.RuntimeFieldHandle) /// idiom. -val mkRawDataValueTypeDef: ILType -> string * size:int32 * pack:uint16 -> ILTypeDef +val internal mkRawDataValueTypeDef: ILType -> string * size:int32 * pack:uint16 -> ILTypeDef /// Injecting code into existing code blocks. A branch will /// be added from the given instructions to the (unique) entry of /// the code, and the first instruction will be the new entry /// of the method. The instructions should be non-branching. -val prependInstrsToCode: ILInstr list -> ILCode -> ILCode -val prependInstrsToMethod: ILInstr list -> ILMethodDef -> ILMethodDef +val internal prependInstrsToCode: ILInstr list -> ILCode -> ILCode +val internal prependInstrsToMethod: ILInstr list -> ILMethodDef -> ILMethodDef /// Injecting initialization code into a class. /// Add some code to the end of the .cctor for a type. Create a .cctor /// if one doesn't exist already. -val prependInstrsToClassCtor: ILInstr list -> ILSourceMarker option -> ILTypeDef -> ILTypeDef +val internal prependInstrsToClassCtor: ILInstr list -> ILSourceMarker option -> ILTypeDef -> ILTypeDef /// Derived functions for making some simple constructors -val mkILStorageCtor: ILSourceMarker option * ILInstr list * ILType * (string * ILType) list * ILMemberAccess -> ILMethodDef -val mkILSimpleStorageCtor: ILSourceMarker option * ILTypeSpec option * ILType * ILParameter list * (string * ILType) list * ILMemberAccess -> ILMethodDef -val mkILSimpleStorageCtorWithParamNames: ILSourceMarker option * ILTypeSpec option * ILType * ILParameter list * (string * string * ILType) list * ILMemberAccess -> ILMethodDef +val internal mkILStorageCtor: ILSourceMarker option * ILInstr list * ILType * (string * ILType) list * ILMemberAccess -> ILMethodDef +val internal mkILSimpleStorageCtor: ILSourceMarker option * ILTypeSpec option * ILType * ILParameter list * (string * ILType) list * ILMemberAccess -> ILMethodDef +val internal mkILSimpleStorageCtorWithParamNames: ILSourceMarker option * ILTypeSpec option * ILType * ILParameter list * (string * string * ILType) list * ILMemberAccess -> ILMethodDef -val mkILDelegateMethods: ILMemberAccess -> ILGlobals -> ILType * ILType -> ILParameter list * ILReturn -> ILMethodDef list +val internal mkILDelegateMethods: ILMemberAccess -> ILGlobals -> ILType * ILType -> ILParameter list * ILReturn -> ILMethodDef list -/// Given a delegate type definition which lies in a particular scope, +/// Given a delegate type definition which lies in a particular scope, /// make a reference to its constructor. -val mkCtorMethSpecForDelegate: ILGlobals -> ILType * bool -> ILMethodSpec +val internal mkCtorMethSpecForDelegate: ILGlobals -> ILType * bool -> ILMethodSpec /// The toplevel "class" for a module or assembly. -val mkILTypeForGlobalFunctions: ILScopeRef -> ILType +val internal mkILTypeForGlobalFunctions: ILScopeRef -> ILType /// Making tables of custom attributes, etc. val mkILCustomAttrs: ILAttribute list -> ILAttributes val mkILCustomAttrsFromArray: ILAttribute[] -> ILAttributes val storeILCustomAttrs: ILAttributes -> ILAttributesStored -val mkILCustomAttrsReader: (int32 -> ILAttribute[]) -> ILAttributesStored +val internal mkILCustomAttrsReader: (int32 -> ILAttribute[]) -> ILAttributesStored val emptyILCustomAttrs: ILAttributes val mkILSecurityDecls: ILSecurityDecl list -> ILSecurityDecls val emptyILSecurityDecls: ILSecurityDecls val storeILSecurityDecls: ILSecurityDecls -> ILSecurityDeclsStored -val mkILSecurityDeclsReader: (int32 -> ILSecurityDecl[]) -> ILSecurityDeclsStored - -val mkMethBodyAux: MethodBody -> ILLazyMethodBody -val mkMethBodyLazyAux: Lazy -> ILLazyMethodBody +val internal mkILSecurityDeclsReader: (int32 -> ILSecurityDecl[]) -> ILSecurityDeclsStored val mkILEvents: ILEventDef list -> ILEventDefs val mkILEventsLazy: Lazy -> ILEventDefs @@ -1885,157 +1905,161 @@ val mkILTypeDefs: ILTypeDef list -> ILTypeDefs val mkILTypeDefsFromArray: ILTypeDef[] -> ILTypeDefs val emptyILTypeDefs: ILTypeDefs -/// Create table of types which is loaded/computed on-demand, and whose individual -/// elements are also loaded/computed on-demand. Any call to tdefs.AsList will +/// Create table of types which is loaded/computed on-demand, and whose individual +/// elements are also loaded/computed on-demand. Any call to tdefs.AsList will /// result in the laziness being forced. Operations can examine the /// custom attributes and name of each type in order to decide whether /// to proceed with examining the other details of the type. -/// -/// Note that individual type definitions may contain further delays -/// in their method, field and other tables. +/// +/// Note that individual type definitions may contain further delays +/// in their method, field and other tables. val mkILTypeDefsComputed: (unit -> ILPreTypeDef[]) -> ILTypeDefs -val addILTypeDef: ILTypeDef -> ILTypeDefs -> ILTypeDefs +val internal addILTypeDef: ILTypeDef -> ILTypeDefs -> ILTypeDefs -val mkTypeForwarder: ILScopeRef -> string -> ILNestedExportedTypes -> ILAttributes -> ILTypeDefAccess -> ILExportedTypeOrForwarder +val internal mkTypeForwarder: ILScopeRef -> string -> ILNestedExportedTypes -> ILAttributes -> ILTypeDefAccess -> ILExportedTypeOrForwarder val mkILNestedExportedTypes: ILNestedExportedType list -> ILNestedExportedTypes -val mkILNestedExportedTypesLazy: Lazy -> ILNestedExportedTypes +val internal mkILNestedExportedTypesLazy: Lazy -> ILNestedExportedTypes val mkILExportedTypes: ILExportedTypeOrForwarder list -> ILExportedTypesAndForwarders -val mkILExportedTypesLazy: Lazy -> ILExportedTypesAndForwarders +val internal mkILExportedTypesLazy: Lazy -> ILExportedTypesAndForwarders -val mkILResources: ILResource list -> ILResources +val emptyILResources: ILResources +val internal mkILResources: ILResource list -> ILResources /// Making modules. val mkILSimpleModule: assemblyName:string -> moduleName:string -> dll:bool -> subsystemVersion: (int * int) -> useHighEntropyVA: bool -> ILTypeDefs -> int32 option -> string option -> int -> ILExportedTypesAndForwarders -> string -> ILModuleDef /// Generate references to existing type definitions, method definitions /// etc. Useful for generating references, e.g. to a class we're processing -/// Also used to reference type definitions that we've generated. [ILScopeRef] +/// Also used to reference type definitions that we've generated. [ILScopeRef] /// is normally ILScopeRef.Local, unless we've generated the ILTypeDef in -/// an auxiliary module or are generating multiple assemblies at +/// an auxiliary module or are generating multiple assemblies at /// once. -val mkRefForNestedILTypeDef: ILScopeRef -> ILTypeDef list * ILTypeDef -> ILTypeRef -val mkRefForILMethod : ILScopeRef -> ILTypeDef list * ILTypeDef -> ILMethodDef -> ILMethodRef -val mkRefForILField : ILScopeRef -> ILTypeDef list * ILTypeDef -> ILFieldDef -> ILFieldRef +val internal mkRefForNestedILTypeDef: ILScopeRef -> ILTypeDef list * ILTypeDef -> ILTypeRef +val internal mkRefForILMethod : ILScopeRef -> ILTypeDef list * ILTypeDef -> ILMethodDef -> ILMethodRef +val internal mkRefForILField : ILScopeRef -> ILTypeDef list * ILTypeDef -> ILFieldDef -> ILFieldRef -val mkRefToILMethod: ILTypeRef * ILMethodDef -> ILMethodRef -val mkRefToILField: ILTypeRef * ILFieldDef -> ILFieldRef +val internal mkRefToILMethod: ILTypeRef * ILMethodDef -> ILMethodRef +val internal mkRefToILField: ILTypeRef * ILFieldDef -> ILFieldRef -val mkRefToILAssembly: ILAssemblyManifest -> ILAssemblyRef -val mkRefToILModule: ILModuleDef -> ILModuleRef +val internal mkRefToILAssembly: ILAssemblyManifest -> ILAssemblyRef +val internal mkRefToILModule: ILModuleDef -> ILModuleRef val NoMetadataIdx: int32 -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // Rescoping. // -// Given an object O1 referenced from where1 (e.g. O1 binds to some -// result R when referenced from where1), and given that SR2 resolves to where1 from where2, +// Given an object O1 referenced from where1 (e.g. O1 binds to some +// result R when referenced from where1), and given that SR2 resolves to where1 from where2, // produce a new O2 for use from where2 (e.g. O2 binds to R from where2) // -// So, ILScopeRef tells you how to reference the original scope from +// So, ILScopeRef tells you how to reference the original scope from // the new scope. e.g. if ILScopeRef is: // [ILScopeRef.Local] then the object is returned unchanged -// [ILScopeRef.Module m] then an object is returned -// where all ILScopeRef.Local references +// [ILScopeRef.Module m] then an object is returned +// where all ILScopeRef.Local references // become ILScopeRef.Module m -// [ILScopeRef.Assembly m] then an object is returned -// where all ILScopeRef.Local and ILScopeRef.Module references +// [ILScopeRef.Assembly m] then an object is returned +// where all ILScopeRef.Local and ILScopeRef.Module references // become ILScopeRef.Assembly m -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -/// Rescoping. The first argument tells the function how to reference the original scope from -/// the new scope. -val rescopeILScopeRef: ILScopeRef -> ILScopeRef -> ILScopeRef +/// Rescoping. The first argument tells the function how to reference the original scope from +/// the new scope. +val internal rescopeILScopeRef: ILScopeRef -> ILScopeRef -> ILScopeRef -/// Rescoping. The first argument tells the function how to reference the original scope from -/// the new scope. -val rescopeILTypeSpec: ILScopeRef -> ILTypeSpec -> ILTypeSpec +/// Rescoping. The first argument tells the function how to reference the original scope from +/// the new scope. +val internal rescopeILTypeSpec: ILScopeRef -> ILTypeSpec -> ILTypeSpec -/// Rescoping. The first argument tells the function how to reference the original scope from -/// the new scope. -val rescopeILType: ILScopeRef -> ILType -> ILType +/// Rescoping. The first argument tells the function how to reference the original scope from +/// the new scope. +val internal rescopeILType: ILScopeRef -> ILType -> ILType -/// Rescoping. The first argument tells the function how to reference the original scope from -/// the new scope. -val rescopeILMethodRef: ILScopeRef -> ILMethodRef -> ILMethodRef +/// Rescoping. The first argument tells the function how to reference the original scope from +/// the new scope. +val internal rescopeILMethodRef: ILScopeRef -> ILMethodRef -> ILMethodRef -/// Rescoping. The first argument tells the function how to reference the original scope from -/// the new scope. -val rescopeILFieldRef: ILScopeRef -> ILFieldRef -> ILFieldRef +/// Rescoping. The first argument tells the function how to reference the original scope from +/// the new scope. +val internal rescopeILFieldRef: ILScopeRef -> ILFieldRef -> ILFieldRef /// Unscoping. Clears every scope information, use for looking up IL method references only. -val unscopeILType: ILType -> ILType +val internal unscopeILType: ILType -> ILType + +val internal buildILCode: string -> lab2pc: Dictionary -> instrs:ILInstr[] -> ILExceptionSpec list -> ILLocalDebugInfo list -> ILCode -val buildILCode: string -> lab2pc: Dictionary -> instrs:ILInstr[] -> ILExceptionSpec list -> ILLocalDebugInfo list -> ILCode +/// Instantiate type variables that occur within types and other items. +val internal instILTypeAux: int -> ILGenericArgs -> ILType -> ILType -/// Instantiate type variables that occur within types and other items. -val instILTypeAux: int -> ILGenericArgs -> ILType -> ILType +/// Instantiate type variables that occur within types and other items. +val internal instILType: ILGenericArgs -> ILType -> ILType -/// Instantiate type variables that occur within types and other items. -val instILType: ILGenericArgs -> ILType -> ILType +/// This is a 'vendor neutral' way of referencing mscorlib. +val internal ecmaPublicKey: PublicKey -/// This is a 'vendor neutral' way of referencing mscorlib. -val ecmaPublicKey: PublicKey +/// Strips ILType.Modified from the ILType. +val internal stripILModifiedFromTy: ILType -> ILType /// Discriminating different important built-in types. -val isILObjectTy: ILGlobals -> ILType -> bool -val isILStringTy: ILGlobals -> ILType -> bool -val isILSByteTy: ILGlobals -> ILType -> bool -val isILByteTy: ILGlobals -> ILType -> bool -val isILInt16Ty: ILGlobals -> ILType -> bool -val isILUInt16Ty: ILGlobals -> ILType -> bool -val isILInt32Ty: ILGlobals -> ILType -> bool -val isILUInt32Ty: ILGlobals -> ILType -> bool -val isILInt64Ty: ILGlobals -> ILType -> bool -val isILUInt64Ty: ILGlobals -> ILType -> bool -val isILIntPtrTy: ILGlobals -> ILType -> bool -val isILUIntPtrTy: ILGlobals -> ILType -> bool -val isILBoolTy: ILGlobals -> ILType -> bool -val isILCharTy: ILGlobals -> ILType -> bool -val isILTypedReferenceTy: ILGlobals -> ILType -> bool -val isILDoubleTy: ILGlobals -> ILType -> bool -val isILSingleTy: ILGlobals -> ILType -> bool - -val sha1HashInt64 : byte[] -> int64 +val internal isILObjectTy: ILGlobals -> ILType -> bool +val internal isILStringTy: ILGlobals -> ILType -> bool +val internal isILSByteTy: ILGlobals -> ILType -> bool +val internal isILByteTy: ILGlobals -> ILType -> bool +val internal isILInt16Ty: ILGlobals -> ILType -> bool +val internal isILUInt16Ty: ILGlobals -> ILType -> bool +val internal isILInt32Ty: ILGlobals -> ILType -> bool +val internal isILUInt32Ty: ILGlobals -> ILType -> bool +val internal isILInt64Ty: ILGlobals -> ILType -> bool +val internal isILUInt64Ty: ILGlobals -> ILType -> bool +val internal isILIntPtrTy: ILGlobals -> ILType -> bool +val internal isILUIntPtrTy: ILGlobals -> ILType -> bool +val internal isILBoolTy: ILGlobals -> ILType -> bool +val internal isILCharTy: ILGlobals -> ILType -> bool +val internal isILTypedReferenceTy: ILGlobals -> ILType -> bool +val internal isILDoubleTy: ILGlobals -> ILType -> bool +val internal isILSingleTy: ILGlobals -> ILType -> bool + +val internal sha1HashInt64 : byte[] -> int64 /// Get a public key token from a public key. -val sha1HashBytes: byte[] -> byte[] (* SHA1 hash *) +val internal sha1HashBytes: byte[] -> byte[] (* SHA1 hash *) /// Get a version number from a CLR version string, e.g. 1.0.3705.0 -val parseILVersion: string -> ILVersionInfo -val formatILVersion: ILVersionInfo -> string -val compareILVersions: ILVersionInfo -> ILVersionInfo -> int +val internal parseILVersion: string -> ILVersionInfo +val internal formatILVersion: ILVersionInfo -> string +val internal compareILVersions: ILVersionInfo -> ILVersionInfo -> int /// Decompose a type definition according to its kind. -type ILEnumInfo = - { enumValues: (string * ILFieldInit) list +type internal ILEnumInfo = + { enumValues: (string * ILFieldInit) list enumType: ILType } -val getTyOfILEnumInfo: ILEnumInfo -> ILType +val internal getTyOfILEnumInfo: ILEnumInfo -> ILType -val computeILEnumInfo: string * ILFieldDefs -> ILEnumInfo +val internal computeILEnumInfo: string * ILFieldDefs -> ILEnumInfo /// A utility type provided for completeness [] -type ILEventRef = +type internal ILEventRef = static member Create: ILTypeRef * string -> ILEventRef member DeclaringTypeRef: ILTypeRef member Name: string /// A utility type provided for completeness [] -type ILPropertyRef = +type internal ILPropertyRef = static member Create: ILTypeRef * string -> ILPropertyRef member DeclaringTypeRef: ILTypeRef member Name: string interface System.IComparable -type ILReferences = - { AssemblyReferences: ILAssemblyRef list +type internal ILReferences = + { AssemblyReferences: ILAssemblyRef list ModuleReferences: ILModuleRef list } /// Find the full set of assemblies referenced by a module. -val computeILRefs: ILGlobals -> ILModuleDef -> ILReferences -val emptyILRefs: ILReferences +val internal computeILRefs: ILGlobals -> ILModuleDef -> ILReferences +val internal emptyILRefs: ILReferences diff --git a/src/fsharp/absil/ilascii.fs b/src/fsharp/absil/ilascii.fs index 3bad59046ec..2a6448ee7f4 100644 --- a/src/fsharp/absil/ilascii.fs +++ b/src/fsharp/absil/ilascii.fs @@ -1,10 +1,9 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.AbstractIL.Internal.AsciiConstants +module internal FSharp.Compiler.AbstractIL.AsciiConstants open Internal.Utilities.Collections - -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.IL /// Table of parsing and pretty printing data for instructions. diff --git a/src/fsharp/absil/ilascii.fsi b/src/fsharp/absil/ilascii.fsi index 45b4bf47e08..f787dc11c1e 100644 --- a/src/fsharp/absil/ilascii.fsi +++ b/src/fsharp/absil/ilascii.fsi @@ -1,13 +1,8 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// Various constants and utilities used when parsing the ILASM format for IL -module internal FSharp.Compiler.AbstractIL.Internal.AsciiConstants +module internal FSharp.Compiler.AbstractIL.AsciiConstants -open Internal.Utilities - -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Extensions.ILX.Types open FSharp.Compiler.AbstractIL.IL // -------------------------------------------------------------------- diff --git a/src/fsharp/absil/ilbinary.fs b/src/fsharp/absil/ilbinary.fs index eea2f06bfda..18f15bc62ac 100644 --- a/src/fsharp/absil/ilbinary.fs +++ b/src/fsharp/absil/ilbinary.fs @@ -1,9 +1,9 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.AbstractIL.Internal.BinaryConstants +module internal FSharp.Compiler.AbstractIL.BinaryConstants open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Library [] type TableName(idx: int) = diff --git a/src/fsharp/absil/ilbinary.fsi b/src/fsharp/absil/ilbinary.fsi index 200ee8b0274..30295cebdbd 100644 --- a/src/fsharp/absil/ilbinary.fsi +++ b/src/fsharp/absil/ilbinary.fsi @@ -1,13 +1,9 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// Compiler use only. Code and constants shared between binary reader/writer. -module internal FSharp.Compiler.AbstractIL.Internal.BinaryConstants +module internal FSharp.Compiler.AbstractIL.BinaryConstants -open Internal.Utilities -open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal - [] type TableName = diff --git a/src/fsharp/absil/illex.fsl b/src/fsharp/absil/illex.fsl index 1516e02df4b..aad77eb806f 100644 --- a/src/fsharp/absil/illex.fsl +++ b/src/fsharp/absil/illex.fsl @@ -2,18 +2,16 @@ { -module internal FSharp.Compiler.AbstractIL.Internal.AsciiLexer +module internal FSharp.Compiler.AbstractIL.AsciiLexer -open Internal.Utilities open Internal.Utilities.Collections open Internal.Utilities.Text open Internal.Utilities.Text.Lexing -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Library -open FSharp.Compiler.AbstractIL.Internal.AsciiParser -open FSharp.Compiler.AbstractIL.Internal.AsciiConstants +open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.AsciiParser +open FSharp.Compiler.AbstractIL.AsciiConstants let lexeme (lexbuf : LexBuffer) = LexBuffer.LexemeString lexbuf diff --git a/src/fsharp/absil/illib.fs b/src/fsharp/absil/illib.fs index 24c637c32c6..904d5418592 100644 --- a/src/fsharp/absil/illib.fs +++ b/src/fsharp/absil/illib.fs @@ -1,66 +1,90 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module public FSharp.Compiler.AbstractIL.Internal.Library -#nowarn "1178" // The struct, record or union type 'internal_instr_extension' is not structurally comparable because the type - +namespace Internal.Utilities.Library open System open System.Collections.Generic open System.Collections.Concurrent open System.Diagnostics open System.IO -open System.Reflection open System.Threading open System.Runtime.CompilerServices -/// Logical shift right treating int32 as unsigned integer. -/// Code that uses this should probably be adjusted to use unsigned integer types. -let (>>>&) (x: int32) (n: int32) = int32 (uint32 x >>> n) - -let notlazy v = Lazy<_>.CreateFromValue v - -let inline isNil l = List.isEmpty l - -/// Returns true if the list has less than 2 elements. Otherwise false. -let inline isNilOrSingleton l = - match l with - | [] - | [_] -> true - | _ -> false - -/// Returns true if the list contains exactly 1 element. Otherwise false. -let inline isSingleton l = - match l with - | [_] -> true - | _ -> false - -let inline isNonNull x = not (isNull x) +[] +module internal PervasiveAutoOpens = + /// Logical shift right treating int32 as unsigned integer. + /// Code that uses this should probably be adjusted to use unsigned integer types. + let (>>>&) (x: int32) (n: int32) = int32 (uint32 x >>> n) -let inline nonNull msg x = if isNull x then failwith ("null: " + msg) else x + let notlazy v = Lazy<_>.CreateFromValue v -let inline (===) x y = LanguagePrimitives.PhysicalEquality x y + let inline isNil l = List.isEmpty l -/// Per the docs the threshold for the Large Object Heap is 85000 bytes: https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/large-object-heap#how-an-object-ends-up-on-the-large-object-heap-and-how-gc-handles-them -/// We set the limit to be 80k to account for larger pointer sizes for when F# is running 64-bit. -let LOH_SIZE_THRESHOLD_BYTES = 80_000 + /// Returns true if the list has less than 2 elements. Otherwise false. + let inline isNilOrSingleton l = + match l with + | [] + | [_] -> true + | _ -> false -//--------------------------------------------------------------------- -// Library: ReportTime -//--------------------------------------------------------------------- -let reportTime = - let mutable tFirst =None - let mutable tPrev = None - fun showTimes descr -> - if showTimes then - let t = Process.GetCurrentProcess().UserProcessorTime.TotalSeconds - let prev = match tPrev with None -> 0.0 | Some t -> t - let first = match tFirst with None -> (tFirst <- Some t; t) | Some t -> t - printf "ilwrite: TIME %10.3f (total) %10.3f (delta) - %s\n" (t - first) (t - prev) descr - tPrev <- Some t + /// Returns true if the list contains exactly 1 element. Otherwise false. + let inline isSingleton l = + match l with + | [_] -> true + | _ -> false -//------------------------------------------------------------------------- -// Library: projections -//------------------------------------------------------------------------ + let inline isNonNull x = not (isNull x) + + let inline nonNull msg x = if isNull x then failwith ("null: " + msg) else x + + let inline (===) x y = LanguagePrimitives.PhysicalEquality x y + + /// Per the docs the threshold for the Large Object Heap is 85000 bytes: https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/large-object-heap#how-an-object-ends-up-on-the-large-object-heap-and-how-gc-handles-them + /// We set the limit to be 80k to account for larger pointer sizes for when F# is running 64-bit. + let LOH_SIZE_THRESHOLD_BYTES = 80_000 + + let runningOnMono = +#if ENABLE_MONO_SUPPORT + // Officially supported way to detect if we are running on Mono. + // See http://www.mono-project.com/FAQ:_Technical + // "How can I detect if am running in Mono?" section + try + System.Type.GetType ("Mono.Runtime") <> null + with _ -> + // Must be robust in the case that someone else has installed a handler into System.AppDomain.OnTypeResolveEvent + // that is not reliable. + // This is related to bug 5506--the issue is actually a bug in VSTypeResolutionService.EnsurePopulated which is + // called by OnTypeResolveEvent. The function throws a NullReferenceException. I'm working with that team to get + // their issue fixed but we need to be robust here anyway. + false +#else + false +#endif + + type String with + member inline x.StartsWithOrdinal value = + x.StartsWith(value, StringComparison.Ordinal) + + member inline x.EndsWithOrdinal value = + x.EndsWith(value, StringComparison.Ordinal) + + /// Get an initialization hole + let getHole r = match !r with None -> failwith "getHole" | Some x -> x + + let reportTime = + let mutable tFirst =None + let mutable tPrev = None + fun showTimes descr -> + if showTimes then + let t = Process.GetCurrentProcess().UserProcessorTime.TotalSeconds + let prev = match tPrev with None -> 0.0 | Some t -> t + let first = match tFirst with None -> (tFirst <- Some t; t) | Some t -> t + printf "ilwrite: TIME %10.3f (total) %10.3f (delta) - %s\n" (t - first) (t - prev) descr + tPrev <- Some t + + let foldOn p f z x = f z (p x) + + let notFound() = raise (KeyNotFoundException()) [] /// An efficient lazy for inline storage in a class type. Results in fewer thunks. @@ -81,16 +105,12 @@ type InlineDelayInit<'T when 'T : not struct> = // Library: projections //------------------------------------------------------------------------ -let foldOn p f z x = f z (p x) - -let notFound() = raise (KeyNotFoundException()) - module Order = let orderBy (p : 'T -> 'U) = - { new IComparer<'T> with member __.Compare(x, xx) = compare (p x) (p xx) } + { new IComparer<'T> with member _.Compare(x, xx) = compare (p x) (p xx) } let orderOn p (pxOrder: IComparer<'U>) = - { new IComparer<'T> with member __.Compare(x, xx) = pxOrder.Compare (p x, p xx) } + { new IComparer<'T> with member _.Compare(x, xx) = pxOrder.Compare (p x, p xx) } let toFunction (pxOrder: IComparer<'U>) x y = pxOrder.Compare(x, y) @@ -119,7 +139,7 @@ module Array = let order (eltOrder: IComparer<'T>) = { new IComparer> with - member __.Compare(xs, ys) = + member _.Compare(xs, ys) = let c = compare xs.Length ys.Length if c <> 0 then c else let rec loop i = @@ -350,7 +370,7 @@ module List = let order (eltOrder: IComparer<'T>) = { new IComparer> with - member __.Compare(xs, ys) = + member _.Compare(xs, ys) = let rec loop xs ys = match xs, ys with | [], [] -> 0 @@ -480,13 +500,6 @@ module ValueOptionInternal = let inline bind f x = match x with ValueSome x -> f x | ValueNone -> ValueNone -type String with - member inline x.StartsWithOrdinal value = - x.StartsWith(value, StringComparison.Ordinal) - - member inline x.EndsWithOrdinal value = - x.EndsWith(value, StringComparison.Ordinal) - module String = let make (n: int) (c: char) : string = new String(c, n) @@ -593,6 +606,12 @@ module String = module Dictionary = let inline newWithSize (size: int) = Dictionary<_, _>(size, HashIdentity.Structural) + let inline ofList (xs: ('Key * 'Value) list) = + let t = Dictionary<_, _>(List.length xs, HashIdentity.Structural) + for (k,v) in xs do + t.Add(k,v) + t + [] type DictionaryExtensions() = @@ -624,45 +643,49 @@ type ExecutionToken = interface end /// /// Like other execution tokens this should be passed via argument passing and not captured/stored beyond /// the lifetime of stack-based calls. This is not checked, it is a discipline within the compiler code. +[] type CompilationThreadToken() = interface ExecutionToken -/// Represents a place where we are stating that execution on the compilation thread is required. The -/// reason why will be documented in a comment in the code at the callsite. -let RequireCompilationThread (_ctok: CompilationThreadToken) = () - -/// Represents a place in the compiler codebase where we are passed a CompilationThreadToken unnecessarily. -/// This represents code that may potentially not need to be executed on the compilation thread. -let DoesNotRequireCompilerThreadTokenAndCouldPossiblyBeMadeConcurrent (_ctok: CompilationThreadToken) = () - -/// Represents a place in the compiler codebase where we assume we are executing on a compilation thread -let AssumeCompilationThreadWithoutEvidence () = Unchecked.defaultof +/// A base type for various types of tokens that must be passed when a lock is taken. +/// Each different static lock should declare a new subtype of this type. +type LockToken = inherit ExecutionToken /// Represents a token that indicates execution on any of several potential user threads calling the F# compiler services. +[] type AnyCallerThreadToken() = interface ExecutionToken -let AnyCallerThread = Unchecked.defaultof -/// A base type for various types of tokens that must be passed when a lock is taken. -/// Each different static lock should declare a new subtype of this type. -type LockToken = inherit ExecutionToken -let AssumeLockWithoutEvidence<'LockTokenType when 'LockTokenType :> LockToken> () = Unchecked.defaultof<'LockTokenType> +[] +module internal LockAutoOpens = + /// Represents a place where we are stating that execution on the compilation thread is required. The + /// reason why will be documented in a comment in the code at the callsite. + let RequireCompilationThread (_ctok: CompilationThreadToken) = () + + /// Represents a place in the compiler codebase where we are passed a CompilationThreadToken unnecessarily. + /// This represents code that may potentially not need to be executed on the compilation thread. + let DoesNotRequireCompilerThreadTokenAndCouldPossiblyBeMadeConcurrent (_ctok: CompilationThreadToken) = () + + /// Represents a place in the compiler codebase where we assume we are executing on a compilation thread + let AssumeCompilationThreadWithoutEvidence () = Unchecked.defaultof + + let AnyCallerThread = Unchecked.defaultof + + let AssumeLockWithoutEvidence<'LockTokenType when 'LockTokenType :> LockToken> () = Unchecked.defaultof<'LockTokenType> /// Encapsulates a lock associated with a particular token-type representing the acquisition of that lock. type Lock<'LockTokenType when 'LockTokenType :> LockToken>() = let lockObj = obj() - member __.AcquireLock f = lock lockObj (fun () -> f (AssumeLockWithoutEvidence<'LockTokenType>())) + member _.AcquireLock f = lock lockObj (fun () -> f (AssumeLockWithoutEvidence<'LockTokenType>())) //--------------------------------------------------- // Misc -/// Get an initialization hole -let getHole r = match !r with None -> failwith "getHole" | Some x -> x - module Map = let tryFindMulti k map = match Map.tryFind k map with Some res -> res | None -> [] +[] type ResultOrException<'TResult> = - | Result of 'TResult - | Exception of Exception + | Result of result: 'TResult + | Exception of ``exception``: Exception module ResultOrException = @@ -686,10 +709,10 @@ module ResultOrException = | Result x -> success x | Exception _err -> f() -[] +[] type ValueOrCancelled<'TResult> = - | Value of 'TResult - | Cancelled of OperationCanceledException + | Value of result: 'TResult + | Cancelled of ``exception``: OperationCanceledException /// Represents a cancellable computation with explicit representation of a cancelled result. /// @@ -708,21 +731,21 @@ module Cancellable = oper ct /// Bind the result of a cancellable computation - let bind f comp1 = + let inline bind f comp1 = Cancellable (fun ct -> match run ct comp1 with | ValueOrCancelled.Value v1 -> run ct (f v1) | ValueOrCancelled.Cancelled err1 -> ValueOrCancelled.Cancelled err1) /// Map the result of a cancellable computation - let map f oper = + let inline map f oper = Cancellable (fun ct -> match run ct oper with | ValueOrCancelled.Value res -> ValueOrCancelled.Value (f res) | ValueOrCancelled.Cancelled err -> ValueOrCancelled.Cancelled err) /// Return a simple value as the result of a cancellable computation - let ret x = Cancellable (fun _ -> ValueOrCancelled.Value x) + let inline ret x = Cancellable (fun _ -> ValueOrCancelled.Value x) /// Fold a cancellable computation along a sequence of inputs let fold f acc seq = @@ -734,22 +757,11 @@ module Cancellable = | res -> res)) /// Iterate a cancellable computation over a collection - let each f seq = - Cancellable (fun ct -> - (ValueOrCancelled.Value [], seq) - ||> Seq.fold (fun acc x -> - match acc with - | ValueOrCancelled.Value acc -> - match run ct (f x) with - | ValueOrCancelled.Value x2 -> ValueOrCancelled.Value (x2 :: acc) - | ValueOrCancelled.Cancelled err1 -> ValueOrCancelled.Cancelled err1 - | canc -> canc) - |> function - | ValueOrCancelled.Value acc -> ValueOrCancelled.Value (List.rev acc) - | canc -> canc) + let inline each f seq = + fold (fun acc x -> f x |> map (fun y -> (y :: acc))) [] seq |> map List.rev /// Delay a cancellable computation - let delay (f: unit -> Cancellable<'T>) = Cancellable (fun ct -> let (Cancellable g) = f() in g ct) + let inline delay (f: unit -> Cancellable<'T>) = Cancellable (fun ct -> let (Cancellable g) = f() in g ct) /// Run the computation in a mode where it may not be cancelled. The computation never results in a /// ValueOrCancelled.Cancelled. @@ -759,6 +771,16 @@ module Cancellable = | ValueOrCancelled.Cancelled _ -> failwith "unexpected cancellation" | ValueOrCancelled.Value r -> r + let toAsync c = + async { + let! ct = Async.CancellationToken + let res = run ct c + return! Async.FromContinuations (fun (cont, _econt, ccont) -> + match res with + | ValueOrCancelled.Value v -> cont v + | ValueOrCancelled.Cancelled ce -> ccont ce) + } + /// Bind the cancellation token associated with the computation let token () = Cancellable (fun ct -> ValueOrCancelled.Value ct) @@ -766,197 +788,54 @@ module Cancellable = let canceled() = Cancellable (fun ct -> ValueOrCancelled.Cancelled (OperationCanceledException ct)) /// Catch exceptions in a computation - let private catch (Cancellable e) = + let inline catch e = + let (Cancellable f) = e Cancellable (fun ct -> try - match e ct with + match f ct with | ValueOrCancelled.Value r -> ValueOrCancelled.Value (Choice1Of2 r) | ValueOrCancelled.Cancelled e -> ValueOrCancelled.Cancelled e with err -> ValueOrCancelled.Value (Choice2Of2 err)) /// Implement try/finally for a cancellable computation - let tryFinally e compensation = + let inline tryFinally e compensation = catch e |> bind (fun res -> compensation() match res with Choice1Of2 r -> ret r | Choice2Of2 err -> raise err) /// Implement try/with for a cancellable computation - let tryWith e handler = + let inline tryWith e handler = catch e |> bind (fun res -> match res with Choice1Of2 r -> ret r | Choice2Of2 err -> handler err) - // Run the cancellable computation within an Async computation. This isn't actually used in the codebase, but left - // here in case we need it in the future - // - // let toAsync e = - // async { - // let! ct = Async.CancellationToken - // return! - // Async.FromContinuations(fun (cont, econt, ccont) -> - // // Run the computation synchronously using the given cancellation token - // let res = try Choice1Of2 (run ct e) with err -> Choice2Of2 err - // match res with - // | Choice1Of2 (ValueOrCancelled.Value v) -> cont v - // | Choice1Of2 (ValueOrCancelled.Cancelled err) -> ccont err - // | Choice2Of2 err -> econt err) - // } - type CancellableBuilder() = - member x.Bind(e, k) = Cancellable.bind k e - - member x.Return v = Cancellable.ret v - - member x.ReturnFrom v = v - - member x.Combine(e1, e2) = e1 |> Cancellable.bind (fun () -> e2) - - member x.For(es, f) = es |> Cancellable.each f - - member x.TryWith(e, handler) = Cancellable.tryWith e handler - - member x.Using(resource, e) = Cancellable.tryFinally (e resource) (fun () -> (resource :> IDisposable).Dispose()) - - member x.TryFinally(e, compensation) = Cancellable.tryFinally e compensation - - member x.Delay f = Cancellable.delay f - - member x.Zero() = Cancellable.ret () - -let cancellable = CancellableBuilder() - -/// Computations that can cooperatively yield by returning a continuation -/// -/// - Any yield of a NotYetDone should typically be "abandonable" without adverse consequences. No resource release -/// will be called when the computation is abandoned. -/// -/// - Computations suspend via a NotYetDone may use local state (mutables), where these are -/// captured by the NotYetDone closure. Computations do not need to be restartable. -/// -/// - The key thing is that you can take an Eventually value and run it with -/// Eventually.repeatedlyProgressUntilDoneOrTimeShareOverOrCanceled -/// -/// - Cancellation results in a suspended computation rather than complete abandonment -type Eventually<'T> = - | Done of 'T - | NotYetDone of (CompilationThreadToken -> Eventually<'T>) - -module Eventually = - - let rec box e = - match e with - | Done x -> Done (Operators.box x) - | NotYetDone work -> NotYetDone (fun ctok -> box (work ctok)) - - let rec forceWhile ctok check e = - match e with - | Done x -> Some x - | NotYetDone work -> - if not(check()) - then None - else forceWhile ctok check (work ctok) - - let force ctok e = Option.get (forceWhile ctok (fun () -> true) e) - - /// Keep running the computation bit by bit until a time limit is reached. - /// The runner gets called each time the computation is restarted - /// - /// If cancellation happens, the operation is left half-complete, ready to resume. - let repeatedlyProgressUntilDoneOrTimeShareOverOrCanceled timeShareInMilliseconds (ct: CancellationToken) runner e = - let sw = new Stopwatch() - let rec runTimeShare ctok e = - runner ctok (fun ctok -> - sw.Reset() - sw.Start() - let rec loop ctok ev2 = - match ev2 with - | Done _ -> ev2 - | NotYetDone work -> - if ct.IsCancellationRequested || sw.ElapsedMilliseconds > timeShareInMilliseconds then - sw.Stop() - NotYetDone(fun ctok -> runTimeShare ctok ev2) - else - loop ctok (work ctok) - loop ctok e) - NotYetDone (fun ctok -> runTimeShare ctok e) - - /// Keep running the asynchronous computation bit by bit. The runner gets called each time the computation is restarted. - /// Can be cancelled as an Async in the normal way. - let forceAsync (runner: (CompilationThreadToken -> Eventually<'T>) -> Async>) (e: Eventually<'T>) : Async<'T option> = - let rec loop (e: Eventually<'T>) = - async { - match e with - | Done x -> return Some x - | NotYetDone work -> - let! r = runner work - return! loop r - } - loop e - - let rec bind k e = - match e with - | Done x -> k x - | NotYetDone work -> NotYetDone (fun ctok -> bind k (work ctok)) - - let fold f acc seq = - (Done acc, seq) ||> Seq.fold (fun acc x -> acc |> bind (fun acc -> f acc x)) - - let rec catch e = - match e with - | Done x -> Done(Result x) - | NotYetDone work -> - NotYetDone (fun ctok -> - let res = try Result(work ctok) with | e -> Exception e - match res with - | Result cont -> catch cont - | Exception e -> Done(Exception e)) - - let delay (f: unit -> Eventually<'T>) = NotYetDone (fun _ctok -> f()) - - let tryFinally e compensation = - catch e - |> bind (fun res -> - compensation() - match res with - | Result v -> Eventually.Done v - | Exception e -> raise e) + member inline _.BindReturn(e, k) = Cancellable.map k e - let tryWith e handler = - catch e - |> bind (function Result v -> Done v | Exception e -> handler e) - - // All eventually computations carry a CompilationThreadToken - let token = - NotYetDone (fun ctok -> Done ctok) - -type EventuallyBuilder() = + member inline _.Bind(e, k) = Cancellable.bind k e - member x.Bind(e, k) = Eventually.bind k e + member inline _.Return v = Cancellable.ret v - member x.Return v = Eventually.Done v + member inline _.ReturnFrom (v: Cancellable<'T>) = v - member x.ReturnFrom v = v + member inline _.Combine(e1, e2) = e1 |> Cancellable.bind (fun () -> e2) - member x.Combine(e1, e2) = e1 |> Eventually.bind (fun () -> e2) + member inline _.For(es, f) = es |> Cancellable.each f - member x.TryWith(e, handler) = Eventually.tryWith e handler + member inline _.TryWith(e, handler) = Cancellable.tryWith e handler - member x.TryFinally(e, compensation) = Eventually.tryFinally e compensation + member inline _.Using(resource, e) = Cancellable.tryFinally (e resource) (fun () -> (resource :> IDisposable).Dispose()) - member x.Delay f = Eventually.delay f + member inline _.TryFinally(e, compensation) = Cancellable.tryFinally e compensation - member x.Zero() = Eventually.Done () + member inline _.Delay f = Cancellable.delay f -let eventually = new EventuallyBuilder() + member inline _.Zero() = Cancellable.ret () -(* -let _ = eventually { return 1 } -let _ = eventually { let x = 1 in return 1 } -let _ = eventually { let! x = eventually { return 1 } in return 1 } -let _ = eventually { try return (failwith "") with _ -> return 1 } -let _ = eventually { use x = null in return 1 } -*) +[] +module CancellableAutoOpens = + let cancellable = CancellableBuilder() /// Generates unique stamps type UniqueStampGenerator<'T when 'T : equality>() = @@ -1003,7 +882,7 @@ type LazyWithContextFailure(exn: exn) = static let undefined = new LazyWithContextFailure(UndefinedException) - member x.Exception = exn + member _.Exception = exn static member Undefined = undefined @@ -1088,9 +967,9 @@ module IPartialEqualityComparer = let On f (c: IPartialEqualityComparer<_>) = { new IPartialEqualityComparer<_> with - member __.InEqualityRelation x = c.InEqualityRelation (f x) - member __.Equals(x, y) = c.Equals(f x, f y) - member __.GetHashCode x = c.GetHashCode(f x) } + member _.InEqualityRelation x = c.InEqualityRelation (f x) + member _.Equals(x, y) = c.Equals(f x, f y) + member _.GetHashCode x = c.GetHashCode(f x) } // Wrapper type for use by the 'partialDistinctBy' function [] @@ -1100,9 +979,9 @@ module IPartialEqualityComparer = let partialDistinctBy (per: IPartialEqualityComparer<'T>) seq = let wper = { new IPartialEqualityComparer> with - member __.InEqualityRelation (Wrap x) = per.InEqualityRelation x - member __.Equals(Wrap x, Wrap y) = per.Equals(x, y) - member __.GetHashCode (Wrap x) = per.GetHashCode x } + member _.InEqualityRelation (Wrap x) = per.InEqualityRelation x + member _.Equals(Wrap x, Wrap y) = per.Equals(x, y) + member _.GetHashCode (Wrap x) = per.GetHashCode x } // Wrap a Wrap _ around all keys in case the key type is itself a type using null as a representation let dict = Dictionary, obj>(wper) seq |> List.filter (fun v -> @@ -1231,17 +1110,19 @@ module MultiMap = type LayeredMap<'Key, 'Value when 'Key : comparison> = Map<'Key, 'Value> -type Map<'Key, 'Value when 'Key : comparison> with +[] +module MapAutoOpens = + type Map<'Key, 'Value when 'Key : comparison> with - static member Empty : Map<'Key, 'Value> = Map.empty + static member Empty : Map<'Key, 'Value> = Map.empty - member x.Values = [ for (KeyValue(_, v)) in x -> v ] + member x.Values = [ for (KeyValue(_, v)) in x -> v ] - member x.AddAndMarkAsCollapsible (kvs: _[]) = (x, kvs) ||> Array.fold (fun x (KeyValue(k, v)) -> x.Add(k, v)) + member x.AddAndMarkAsCollapsible (kvs: _[]) = (x, kvs) ||> Array.fold (fun x (KeyValue(k, v)) -> x.Add(k, v)) - member x.LinearTryModifyThenLaterFlatten (key, f: 'Value option -> 'Value) = x.Add (key, f (x.TryFind key)) + member x.LinearTryModifyThenLaterFlatten (key, f: 'Value option -> 'Value) = x.Add (key, f (x.TryFind key)) - member x.MarkAsCollapsible () = x + member x.MarkAsCollapsible () = x /// Immutable map collection, with explicit flattening to a backing dictionary [] @@ -1265,159 +1146,3 @@ type LayeredMultiMap<'Key, 'Value when 'Key : equality and 'Key : comparison>(co static member Empty : LayeredMultiMap<'Key, 'Value> = LayeredMultiMap LayeredMap.Empty -[] -module Shim = - - type IFileSystem = - - /// A shim over File.ReadAllBytes - abstract ReadAllBytesShim: fileName: string -> byte[] - - /// A shim over FileStream with FileMode.Open, FileAccess.Read, FileShare.ReadWrite - abstract FileStreamReadShim: fileName: string -> Stream - - /// A shim over FileStream with FileMode.Create, FileAccess.Write, FileShare.Read - abstract FileStreamCreateShim: fileName: string -> Stream - - /// A shim over FileStream with FileMode.Open, FileAccess.Write, FileShare.Read - abstract FileStreamWriteExistingShim: fileName: string -> Stream - - /// Take in a filename with an absolute path, and return the same filename - /// but canonicalized with respect to extra path separators (e.g. C:\\\\foo.txt) - /// and '..' portions - abstract GetFullPathShim: fileName: string -> string - - /// A shim over Path.IsPathRooted - abstract IsPathRootedShim: path: string -> bool - - /// A shim over Path.IsInvalidPath - abstract IsInvalidPathShim: filename: string -> bool - - /// A shim over Path.GetTempPath - abstract GetTempPathShim : unit -> string - - /// Utc time of the last modification - abstract GetLastWriteTimeShim: fileName: string -> DateTime - - /// A shim over File.Exists - abstract SafeExists: fileName: string -> bool - - /// A shim over File.Delete - abstract FileDelete: fileName: string -> unit - - /// Used to load type providers and located assemblies in F# Interactive - abstract AssemblyLoadFrom: fileName: string -> Assembly - - /// Used to load a dependency for F# Interactive and in an unused corner-case of type provider loading - abstract AssemblyLoad: assemblyName: AssemblyName -> Assembly - - /// Used to determine if a file will not be subject to deletion during the lifetime of a typical client process. - abstract IsStableFileHeuristic: fileName: string -> bool - - - type DefaultFileSystem() = - interface IFileSystem with - - member __.AssemblyLoadFrom(fileName: string) = - Assembly.UnsafeLoadFrom fileName - - member __.AssemblyLoad(assemblyName: AssemblyName) = - Assembly.Load assemblyName - - member __.ReadAllBytesShim (fileName: string) = File.ReadAllBytes fileName - - member __.FileStreamReadShim (fileName: string) = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) :> Stream - - member __.FileStreamCreateShim (fileName: string) = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.Read, 0x1000, false) :> Stream - - member __.FileStreamWriteExistingShim (fileName: string) = new FileStream(fileName, FileMode.Open, FileAccess.Write, FileShare.Read, 0x1000, false) :> Stream - - member __.GetFullPathShim (fileName: string) = System.IO.Path.GetFullPath fileName - - member __.IsPathRootedShim (path: string) = Path.IsPathRooted path - - member __.IsInvalidPathShim(path: string) = - let isInvalidPath(p: string) = - String.IsNullOrEmpty p || p.IndexOfAny(Path.GetInvalidPathChars()) <> -1 - - let isInvalidFilename(p: string) = - String.IsNullOrEmpty p || p.IndexOfAny(Path.GetInvalidFileNameChars()) <> -1 - - let isInvalidDirectory(d: string) = - d=null || d.IndexOfAny(Path.GetInvalidPathChars()) <> -1 - - isInvalidPath path || - let directory = Path.GetDirectoryName path - let filename = Path.GetFileName path - isInvalidDirectory directory || isInvalidFilename filename - - member __.GetTempPathShim() = Path.GetTempPath() - - member __.GetLastWriteTimeShim (fileName: string) = File.GetLastWriteTimeUtc fileName - - member __.SafeExists (fileName: string) = File.Exists fileName - - member __.FileDelete (fileName: string) = File.Delete fileName - - member __.IsStableFileHeuristic (fileName: string) = - let directory = Path.GetDirectoryName fileName - directory.Contains("Reference Assemblies/") || - directory.Contains("Reference Assemblies\\") || - directory.Contains("packages/") || - directory.Contains("packages\\") || - directory.Contains("lib/mono/") - - let mutable FileSystem = DefaultFileSystem() :> IFileSystem - - // The choice of 60 retries times 50 ms is not arbitrary. The NTFS FILETIME structure - // uses 2 second resolution for LastWriteTime. We retry long enough to surpass this threshold - // plus 1 second. Once past the threshold the incremental builder will be able to retry asynchronously based - // on plain old timestamp checking. - // - // The sleep time of 50ms is chosen so that we can respond to the user more quickly for Intellisense operations. - // - // This is not run on the UI thread for VS but it is on a thread that must be stopped before Intellisense - // can return any result except for pending. - let private retryDelayMilliseconds = 50 - let private numRetries = 60 - - let private getReader (filename, codePage: int option, retryLocked: bool) = - // Retry multiple times since other processes may be writing to this file. - let rec getSource retryNumber = - try - // Use the .NET functionality to auto-detect the unicode encoding - let stream = FileSystem.FileStreamReadShim(filename) - match codePage with - | None -> new StreamReader(stream,true) - | Some n -> new StreamReader(stream,System.Text.Encoding.GetEncoding(n)) - with - // We can get here if the file is locked--like when VS is saving a file--we don't have direct - // access to the HRESULT to see that this is EONOACCESS. - | :? System.IO.IOException as err when retryLocked && err.GetType() = typeof -> - // This second check is to make sure the exception is exactly IOException and none of these for example: - // DirectoryNotFoundException - // EndOfStreamException - // FileNotFoundException - // FileLoadException - // PathTooLongException - if retryNumber < numRetries then - System.Threading.Thread.Sleep (retryDelayMilliseconds) - getSource (retryNumber + 1) - else - reraise() - getSource 0 - - type File with - - static member ReadBinaryChunk (fileName, start, len) = - use stream = FileSystem.FileStreamReadShim fileName - stream.Seek(int64 start, SeekOrigin.Begin) |> ignore - let buffer = Array.zeroCreate len - let mutable n = 0 - while n < len do - n <- n + stream.Read(buffer, n, len-n) - buffer - - static member OpenReaderAndRetry (filename, codepage, retryLocked) = - getReader (filename, codepage, retryLocked) - diff --git a/src/fsharp/absil/illib.fsi b/src/fsharp/absil/illib.fsi index b2f49e0c250..2a66a699857 100644 --- a/src/fsharp/absil/illib.fsi +++ b/src/fsharp/absil/illib.fsi @@ -1,52 +1,65 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module public FSharp.Compiler.AbstractIL.Internal.Library +namespace Internal.Utilities.Library open System -open System.IO open System.Threading open System.Collections.Generic +open System.Diagnostics open System.Runtime.CompilerServices -/// Logical shift right treating int32 as unsigned integer. -/// Code that uses this should probably be adjusted to use unsigned integer types. -val ( >>>& ): x:int32 -> n:int32 -> int32 +[] +module internal PervasiveAutoOpens = + /// Logical shift right treating int32 as unsigned integer. + /// Code that uses this should probably be adjusted to use unsigned integer types. + val ( >>>& ): x:int32 -> n:int32 -> int32 + + val notlazy: v:'a -> Lazy<'a> + + val inline isNil: l:'a list -> bool + + /// Returns true if the list has less than 2 elements. Otherwise false. + val inline isNilOrSingleton: l:'a list -> bool + + /// Returns true if the list contains exactly 1 element. Otherwise false. + val inline isSingleton: l:'a list -> bool -val notlazy: v:'a -> Lazy<'a> + val inline isNonNull: x:'a -> bool when 'a: null -val inline isNil: l:'a list -> bool + val inline nonNull: msg:string -> x:'a -> 'a when 'a: null -/// Returns true if the list has less than 2 elements. Otherwise false. -val inline isNilOrSingleton: l:'a list -> bool + val inline ( === ): x:'a -> y:'a -> bool when 'a: not struct -/// Returns true if the list contains exactly 1 element. Otherwise false. -val inline isSingleton: l:'a list -> bool + /// Per the docs the threshold for the Large Object Heap is 85000 bytes: https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/large-object-heap#how-an-object-ends-up-on-the-large-object-heap-and-how-gc-handles-them + /// We set the limit to be 80k to account for larger pointer sizes for when F# is running 64-bit. + val LOH_SIZE_THRESHOLD_BYTES: int -val inline isNonNull: x:'a -> bool when 'a: null + val reportTime: (bool -> string -> unit) -val inline nonNull: msg:string -> x:'a -> 'a when 'a: null + val runningOnMono: bool -val inline ( === ): x:'a -> y:'a -> bool when 'a: not struct + /// Get an initialization hole + val getHole: r:'a option ref -> 'a -/// Per the docs the threshold for the Large Object Heap is 85000 bytes: https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/large-object-heap#how-an-object-ends-up-on-the-large-object-heap-and-how-gc-handles-them -/// We set the limit to be 80k to account for larger pointer sizes for when F# is running 64-bit. -val LOH_SIZE_THRESHOLD_BYTES: int + type String with -val reportTime: (bool -> string -> unit) + member inline StartsWithOrdinal: value:string -> bool + + member inline EndsWithOrdinal: value:string -> bool + + val foldOn: p:('a -> 'b) -> f:('c -> 'b -> 'd) -> z:'c -> x:'a -> 'd + + val notFound: unit -> 'a [] -type InlineDelayInit<'T when 'T: not struct> = +type internal InlineDelayInit<'T when 'T: not struct> = new: f:(unit -> 'T) -> InlineDelayInit<'T> val mutable store: 'T val mutable func: Func<'T> member Value: 'T -val foldOn: p:('a -> 'b) -> f:('c -> 'b -> 'd) -> z:'c -> x:'a -> 'd - -val notFound: unit -> 'a - -module Order = +module internal Order = val orderBy: p:('T -> 'U) -> IComparer<'T> when 'U: comparison @@ -54,7 +67,7 @@ module Order = val toFunction: pxOrder:IComparer<'U> -> x:'U -> y:'U -> int -module Array = +module internal Array = val mapq: f:('a -> 'a) -> inp:'a [] -> 'a [] when 'a: not struct @@ -94,13 +107,13 @@ module Array = /// Returns true if one array has trailing elements equal to another's. val endsWith: suffix:'a [] -> whole:'a [] -> bool when 'a: equality -module Option = +module internal Option = val mapFold: f:('a -> 'b -> 'c * 'a) -> s:'a -> opt:'b option -> 'c option * 'a val attempt: f:(unit -> 'T) -> 'T option -module List = +module internal List = val sortWithOrder : c:IComparer<'T> -> elements:'T list -> 'T list @@ -175,7 +188,7 @@ module List = val internal allEqual: xs:'T list -> bool when 'T: equality -module ResizeArray = +module internal ResizeArray = /// Split a ResizeArray into an array of smaller chunks. /// This requires `items/chunkSize` Array copies of length `chunkSize` if `items/chunkSize % 0 = 0`, @@ -187,19 +200,14 @@ module ResizeArray = /// probability of smaller collections. Stop-the-world is still possible, just less likely. val mapToSmallArrayChunks : f:('t -> 'a) -> inp:ResizeArray<'t> -> 'a [] [] -module ValueOptionInternal = +module internal ValueOptionInternal = val inline ofOption: x:'a option -> 'a voption val inline bind: f:('a -> 'b voption) -> x:'a voption -> 'b voption -type String with - member inline StartsWithOrdinal: value:string -> bool - - member inline EndsWithOrdinal: value:string -> bool - -module String = +module internal String = val make: n:int -> c:char -> string @@ -243,11 +251,12 @@ module String = val getLines: str:string -> string [] -module Dictionary = +module internal Dictionary = val inline newWithSize : size:int -> Dictionary<'a,'b> when 'a: equality + val inline ofList : xs: ('Key * 'Value) list -> Dictionary<'Key,'Value> when 'Key: equality [] -type DictionaryExtensions = +type internal DictionaryExtensions = [] static member inline BagAdd: dic:Dictionary<'key,'value list> * key:'key * value:'value -> unit @@ -255,11 +264,11 @@ type DictionaryExtensions = [] static member inline BagExistsValueForKey: dic:Dictionary<'key,'value list> * key:'key * f:('value -> bool) -> bool -module Lazy = +module internal Lazy = val force: x:Lazy<'T> -> 'T /// Represents a permission active at this point in execution -type ExecutionToken = interface end +type internal ExecutionToken = interface end /// Represents a token that indicates execution on the compilation thread, i.e. /// - we have full access to the (partially mutable) TAST and TcImports data structures @@ -268,98 +277,105 @@ type ExecutionToken = interface end /// /// Like other execution tokens this should be passed via argument passing and not captured/stored beyond /// the lifetime of stack-based calls. This is not checked, it is a discipline within the compiler code. -type CompilationThreadToken = +[] +type internal CompilationThreadToken = interface ExecutionToken new: unit -> CompilationThreadToken -/// Represents a place where we are stating that execution on the compilation thread is required. The -/// reason why will be documented in a comment in the code at the callsite. -val RequireCompilationThread: _ctok:CompilationThreadToken -> unit - -/// Represents a place in the compiler codebase where we are passed a CompilationThreadToken unnecessarily. -/// This represents code that may potentially not need to be executed on the compilation thread. -val DoesNotRequireCompilerThreadTokenAndCouldPossiblyBeMadeConcurrent : _ctok:CompilationThreadToken -> unit - -/// Represents a place in the compiler codebase where we assume we are executing on a compilation thread -val AssumeCompilationThreadWithoutEvidence: unit -> CompilationThreadToken - /// Represents a token that indicates execution on any of several potential user threads calling the F# compiler services. -type AnyCallerThreadToken = +[] +type internal AnyCallerThreadToken = interface ExecutionToken new: unit -> AnyCallerThreadToken -val AnyCallerThread: AnyCallerThreadToken - /// A base type for various types of tokens that must be passed when a lock is taken. /// Each different static lock should declare a new subtype of this type. -type LockToken = +type internal LockToken = interface inherit ExecutionToken end -val AssumeLockWithoutEvidence: unit -> #LockToken - /// Encapsulates a lock associated with a particular token-type representing the acquisition of that lock. -type Lock<'LockTokenType when 'LockTokenType :> LockToken> = +type internal Lock<'LockTokenType when 'LockTokenType :> LockToken> = new: unit -> Lock<'LockTokenType> member AcquireLock: f:('LockTokenType -> 'a) -> 'a -/// Get an initialization hole -val getHole: r:'a option ref -> 'a +[] +module internal LockAutoOpens = + /// Represents a place where we are stating that execution on the compilation thread is required. The + /// reason why will be documented in a comment in the code at the callsite. + val RequireCompilationThread: _ctok:CompilationThreadToken -> unit -module Map = + /// Represents a place in the compiler codebase where we are passed a CompilationThreadToken unnecessarily. + /// This represents code that may potentially not need to be executed on the compilation thread. + val DoesNotRequireCompilerThreadTokenAndCouldPossiblyBeMadeConcurrent : _ctok:CompilationThreadToken -> unit + + /// Represents a place in the compiler codebase where we assume we are executing on a compilation thread + val AssumeCompilationThreadWithoutEvidence: unit -> CompilationThreadToken + + val AnyCallerThread: AnyCallerThreadToken + + val AssumeLockWithoutEvidence: unit -> #LockToken + +module internal Map = val tryFindMulti : k:'a -> map:Map<'a,'b list> -> 'b list when 'a: comparison -type ResultOrException<'TResult> = - | Result of 'TResult - | Exception of Exception +[] +type internal ResultOrException<'TResult> = + | Result of result: 'TResult + | Exception of ``exception``: Exception + +module internal ResultOrException = -module ResultOrException = val success: a:'a -> ResultOrException<'a> + val raze: b:exn -> ResultOrException<'a> + val ( |?> ) : res:ResultOrException<'a> -> f:('a -> 'b) -> ResultOrException<'b> + val ForceRaise: res:ResultOrException<'a> -> 'a + val otherwise : f:(unit -> ResultOrException<'a>) -> x:ResultOrException<'a> -> ResultOrException<'a> -[] -type ValueOrCancelled<'TResult> = - | Value of 'TResult - | Cancelled of OperationCanceledException +[] +type internal ValueOrCancelled<'TResult> = + | Value of result: 'TResult + | Cancelled of ``exception``: OperationCanceledException /// Represents a synchronous cancellable computation with explicit representation of a cancelled result. /// /// A cancellable computation is passed may be cancelled via a CancellationToken, which is propagated implicitly. /// If cancellation occurs, it is propagated as data rather than by raising an OperationCanceledException. [] -type Cancellable<'TResult> = +type internal Cancellable<'TResult> = | Cancellable of (CancellationToken -> ValueOrCancelled<'TResult>) -module Cancellable = +module internal Cancellable = /// Run a cancellable computation using the given cancellation token val run : ct:CancellationToken -> Cancellable<'a> -> ValueOrCancelled<'a> /// Bind the result of a cancellable computation - val bind : f:('a -> Cancellable<'b>) -> comp1:Cancellable<'a> -> Cancellable<'b> + val inline bind : f:('a -> Cancellable<'b>) -> comp1:Cancellable<'a> -> Cancellable<'b> /// Map the result of a cancellable computation - val map: f:('a -> 'b) -> oper:Cancellable<'a> -> Cancellable<'b> + val inline map: f:('a -> 'b) -> oper:Cancellable<'a> -> Cancellable<'b> /// Return a simple value as the result of a cancellable computation - val ret: x:'a -> Cancellable<'a> + val inline ret: x:'a -> Cancellable<'a> /// Fold a cancellable computation along a sequence of inputs val fold : f:('a -> 'b -> Cancellable<'a>) -> acc:'a -> seq:seq<'b> -> Cancellable<'a> /// Iterate a cancellable computation over a collection - val each : f:('a -> Cancellable<'b>) -> seq:seq<'a> -> Cancellable<'b list> + val inline each : f:('a -> Cancellable<'b>) -> seq:seq<'a> -> Cancellable<'b list> /// Delay a cancellable computation - val delay: f:(unit -> Cancellable<'T>) -> Cancellable<'T> + val inline delay: f:(unit -> Cancellable<'T>) -> Cancellable<'T> /// Run the computation in a mode where it may not be cancelled. The computation never results in a /// ValueOrCancelled.Cancelled. @@ -372,113 +388,76 @@ module Cancellable = val canceled: unit -> Cancellable<'a> /// Implement try/finally for a cancellable computation - val tryFinally : e:Cancellable<'a> -> compensation:(unit -> unit) -> Cancellable<'a> + val inline catch : e:Cancellable<'a> -> Cancellable> + + /// Implement try/finally for a cancellable computation + val inline tryFinally : e:Cancellable<'a> -> compensation:(unit -> unit) -> Cancellable<'a> /// Implement try/with for a cancellable computation - val tryWith : e:Cancellable<'a> -> handler:(exn -> Cancellable<'a>) -> Cancellable<'a> + val inline tryWith : e:Cancellable<'a> -> handler:(exn -> Cancellable<'a>) -> Cancellable<'a> + + val toAsync: Cancellable<'a> -> Async<'a> -type CancellableBuilder = +type internal CancellableBuilder = new: unit -> CancellableBuilder - member Bind: e:Cancellable<'k> * k:('k -> Cancellable<'l>) -> Cancellable<'l> - member Combine: e1:Cancellable * e2:Cancellable<'h> -> Cancellable<'h> - member Delay: f:(unit -> Cancellable<'a>) -> Cancellable<'a> - member For: es:seq<'f> * f:('f -> Cancellable<'g>) -> Cancellable<'g list> - member Return: v:'j -> Cancellable<'j> - member ReturnFrom: v:'i -> 'i - member TryFinally: e:Cancellable<'b> * compensation:(unit -> unit) -> Cancellable<'b> - member TryWith: e:Cancellable<'e> * handler:(exn -> Cancellable<'e>) -> Cancellable<'e> - member Using: resource:'c * e:('c -> Cancellable<'d>) -> Cancellable<'d> when 'c :> System.IDisposable - member Zero: unit -> Cancellable - -val cancellable: CancellableBuilder -/// Computations that can cooperatively yield by returning a continuation -/// -/// - Any yield of a NotYetDone should typically be "abandonable" without adverse consequences. No resource release -/// will be called when the computation is abandoned. -/// -/// - Computations suspend via a NotYetDone may use local state (mutables), where these are -/// captured by the NotYetDone closure. Computations do not need to be restartable. -/// -/// - The key thing is that you can take an Eventually value and run it with -/// Eventually.repeatedlyProgressUntilDoneOrTimeShareOverOrCanceled -/// -/// - Cancellation results in a suspended computation rather than complete abandonment -type Eventually<'T> = - | Done of 'T - | NotYetDone of (CompilationThreadToken -> Eventually<'T>) - -module Eventually = - val box: e:Eventually<'a> -> Eventually - val forceWhile : ctok:CompilationThreadToken -> check:(unit -> bool) -> e:Eventually<'a> -> 'a option - val force: ctok:CompilationThreadToken -> e:Eventually<'a> -> 'a - -/// Keep running the computation bit by bit until a time limit is reached. -/// The runner gets called each time the computation is restarted -/// -/// If cancellation happens, the operation is left half-complete, ready to resume. - val repeatedlyProgressUntilDoneOrTimeShareOverOrCanceled : - timeShareInMilliseconds:int64 -> - ct:CancellationToken -> - runner:(CompilationThreadToken -> (#CompilationThreadToken -> Eventually<'b>) -> Eventually<'b>) -> - e:Eventually<'b> - -> Eventually<'b> + member inline BindReturn: e:Cancellable<'T> * k:('T -> 'U) -> Cancellable<'U> - /// Keep running the asynchronous computation bit by bit. The runner gets called each time the computation is restarted. - /// Can be cancelled as an Async in the normal way. - val forceAsync : runner:((CompilationThreadToken -> Eventually<'T>) -> Async>) -> e:Eventually<'T> -> Async<'T option> + member inline Bind: e:Cancellable<'T> * k:('T -> Cancellable<'U>) -> Cancellable<'U> - val bind: k:('a -> Eventually<'b>) -> e:Eventually<'a> -> Eventually<'b> + member inline Combine: e1:Cancellable * e2:Cancellable<'T> -> Cancellable<'T> - val fold : f:('a -> 'b -> Eventually<'a>) -> acc:'a -> seq:seq<'b> -> Eventually<'a> + member inline Delay: f:(unit -> Cancellable<'T>) -> Cancellable<'T> - val catch: e:Eventually<'a> -> Eventually> + member inline For: es:seq<'T> * f:('T -> Cancellable<'U>) -> Cancellable<'U list> - val delay: f:(unit -> Eventually<'T>) -> Eventually<'T> + member inline Return: v:'T -> Cancellable<'T> - val tryFinally : e:Eventually<'a> -> compensation:(unit -> unit) -> Eventually<'a> + member inline ReturnFrom: v:Cancellable<'T> -> Cancellable<'T> - val tryWith : e:Eventually<'a> -> handler:(System.Exception -> Eventually<'a>) -> Eventually<'a> + member inline TryFinally: e:Cancellable<'T> * compensation:(unit -> unit) -> Cancellable<'T> - // All eventually computations carry a CompilationThreadToken - val token: Eventually + member inline TryWith: e:Cancellable<'T> * handler:(exn -> Cancellable<'T>) -> Cancellable<'T> -[] -type EventuallyBuilder = - member Bind: e:Eventually<'g> * k:('g -> Eventually<'h>) -> Eventually<'h> - member Combine: e1:Eventually * e2:Eventually<'d> -> Eventually<'d> - member Delay: f:(unit -> Eventually<'a>) -> Eventually<'a> - member Return: v:'f -> Eventually<'f> - member ReturnFrom: v:'e -> 'e - member TryFinally: e:Eventually<'b> * compensation:(unit -> unit) -> Eventually<'b> - member TryWith: e:Eventually<'c> * handler:(System.Exception -> Eventually<'c>) -> Eventually<'c> - member Zero: unit -> Eventually + member inline Using: resource:'c * e:('c -> Cancellable<'T>) -> Cancellable<'T> when 'c :> System.IDisposable + + member inline Zero: unit -> Cancellable -val eventually: EventuallyBuilder +[] +module internal CancellableAutoOpens = + val cancellable: CancellableBuilder /// Generates unique stamps -type UniqueStampGenerator<'T when 'T: equality> = +type internal UniqueStampGenerator<'T when 'T: equality> = + new: unit -> UniqueStampGenerator<'T> + member Encode: str:'T -> int + member Table: ICollection<'T> /// Memoize tables (all entries cached, never collected unless whole table is collected) -type MemoizationTable<'T,'U> = +type internal MemoizationTable<'T,'U> = + new: compute:('T -> 'U) * keyComparer:IEqualityComparer<'T> * ?canMemoize:('T -> bool) -> MemoizationTable<'T,'U> + member Apply: x:'T -> 'U -exception UndefinedException +exception internal UndefinedException + +type internal LazyWithContextFailure = -type LazyWithContextFailure = new: exn:exn -> LazyWithContextFailure + member Exception: exn + static member Undefined: LazyWithContextFailure /// Just like "Lazy" but EVERY forcer must provide an instance of "ctxt", e.g. to help track errors /// on forcing back to at least one sensible user location [] -type LazyWithContext<'T,'ctxt> = +type internal LazyWithContext<'T,'ctxt> = static member Create: f:('ctxt -> 'T) * findOriginalException:(exn -> exn) -> LazyWithContext<'T,'ctxt> static member NotLazy: x:'T -> LazyWithContext<'T,'ctxt> member Force: ctxt:'ctxt -> 'T @@ -487,28 +466,28 @@ type LazyWithContext<'T,'ctxt> = member IsForced: bool /// Intern tables to save space. -module Tables = +module internal Tables = val memoize: f:('a -> 'b) -> ('a -> 'b) when 'a: equality /// Interface that defines methods for comparing objects using partial equality relation -type IPartialEqualityComparer<'T> = +type internal IPartialEqualityComparer<'T> = inherit IEqualityComparer<'T> abstract member InEqualityRelation: 'T -> bool /// Interface that defines methods for comparing objects using partial equality relation -module IPartialEqualityComparer = +module internal IPartialEqualityComparer = val On : f:('a -> 'b) -> c:IPartialEqualityComparer<'b> -> IPartialEqualityComparer<'a> /// Like Seq.distinctBy but only filters out duplicates for some of the elements val partialDistinctBy : per:IPartialEqualityComparer<'T> -> seq:'T list -> 'T list -type NameMap<'T> = Map +type internal NameMap<'T> = Map -type NameMultiMap<'T> = NameMap<'T list> +type internal NameMultiMap<'T> = NameMap<'T list> -type MultiMap<'T,'U when 'T: comparison> = Map<'T,'U list> +type internal MultiMap<'T,'U when 'T: comparison> = Map<'T,'U list> -module NameMap = +module internal NameMap = val empty: Map<'a,'b> when 'a: comparison @@ -570,7 +549,7 @@ module NameMap = val tryFindInRange : p:('a -> bool) -> m:Map<'b,'a> -> 'a option when 'b: comparison -module NameMultiMap = +module internal NameMultiMap = val existsInRange: f:('T -> bool) -> m:NameMultiMap<'T> -> bool @@ -592,7 +571,7 @@ module NameMultiMap = val ofList: xs:(string * 'T) list -> NameMultiMap<'T> -module MultiMap = +module internal MultiMap = val existsInRange : f:('a -> bool) -> m:MultiMap<'b,'a> -> bool when 'b: comparison @@ -606,87 +585,43 @@ module MultiMap = val initBy : f:('a -> 'b) -> xs:seq<'a> -> MultiMap<'b,'a> when 'b: comparison -type LayeredMap<'Key,'Value when 'Key: comparison> = Map<'Key,'Value> +type internal LayeredMap<'Key,'Value when 'Key: comparison> = Map<'Key,'Value> -type Map<'Key,'Value when 'Key: comparison> with - static member Empty: Map<'Key,'Value> when 'Key: comparison +[] +module internal MapAutoOpens = + type internal Map<'Key,'Value when 'Key: comparison> with - member Values: 'Value list + static member Empty: Map<'Key,'Value> when 'Key: comparison + + member Values: 'Value list - member AddAndMarkAsCollapsible: kvs:KeyValuePair<'Key,'Value> [] -> Map<'Key,'Value> when 'Key: comparison + member AddAndMarkAsCollapsible: kvs:KeyValuePair<'Key,'Value> [] -> Map<'Key,'Value> when 'Key: comparison - member LinearTryModifyThenLaterFlatten: key:'Key * f:('Value option -> 'Value) -> Map<'Key,'Value> when 'Key: comparison + member LinearTryModifyThenLaterFlatten: key:'Key * f:('Value option -> 'Value) -> Map<'Key,'Value> when 'Key: comparison -type Map<'Key,'Value when 'Key: comparison> with - member MarkAsCollapsible: unit -> Map<'Key,'Value> when 'Key: comparison + type internal Map<'Key,'Value when 'Key: comparison> with + member MarkAsCollapsible: unit -> Map<'Key,'Value> when 'Key: comparison /// Immutable map collection, with explicit flattening to a backing dictionary [] -type LayeredMultiMap<'Key,'Value when 'Key: comparison> = +type internal LayeredMultiMap<'Key,'Value when 'Key: comparison> = new: contents:LayeredMap<'Key,'Value list> -> LayeredMultiMap<'Key,'Value> + member Add: k:'Key * v:'Value -> LayeredMultiMap<'Key,'Value> + member AddAndMarkAsCollapsible: kvs:KeyValuePair<'Key,'Value> [] -> LayeredMultiMap<'Key,'Value> + member MarkAsCollapsible: unit -> LayeredMultiMap<'Key,'Value> + member TryFind: k:'Key -> 'Value list option + member TryGetValue: k:'Key -> bool * 'Value list + member Item: k:'Key -> 'Value list with get + member Values: 'Value list + static member Empty: LayeredMultiMap<'Key,'Value> -[] -module Shim = - type IFileSystem = - - /// Used to load a dependency for F# Interactive and in an unused corner-case of type provider loading - abstract member AssemblyLoad: assemblyName:System.Reflection.AssemblyName -> System.Reflection.Assembly - - /// Used to load type providers and located assemblies in F# Interactive - abstract member AssemblyLoadFrom: fileName:string -> System.Reflection.Assembly - - /// A shim over File.Delete - abstract member FileDelete: fileName:string -> unit - abstract member FileStreamCreateShim: fileName:string -> Stream - - /// A shim over FileStream with FileMode.Open, FileAccess.Read, FileShare.ReadWrite - abstract member FileStreamReadShim: fileName:string -> Stream - - /// A shim over FileStream with FileMode.Open, FileAccess.Write, FileShare.Read - abstract member FileStreamWriteExistingShim: fileName:string -> Stream - - /// Take in a filename with an absolute path, and return the same filename - /// but canonicalized with respect to extra path separators (e.g. C:\\\\foo.txt) - /// and '..' portions - abstract member GetFullPathShim: fileName:string -> string - - /// Utc time of the last modification - abstract member GetLastWriteTimeShim: fileName:string -> DateTime - - /// A shim over Path.GetTempPath - abstract member GetTempPathShim: unit -> string - - /// A shim over Path.IsInvalidPath - abstract member IsInvalidPathShim: filename:string -> bool - - /// A shim over Path.IsPathRooted - abstract member IsPathRootedShim: path:string -> bool - - /// Used to determine if a file will not be subject to deletion during the lifetime of a typical client process. - abstract member IsStableFileHeuristic: fileName:string -> bool - - /// A shim over File.ReadAllBytes - abstract member ReadAllBytesShim: fileName:string -> byte [] - - /// A shim over File.Exists - abstract member SafeExists: fileName:string -> bool - - /// The global hook into the file system - val mutable FileSystem: IFileSystem - - type System.IO.File with - static member ReadBinaryChunk: fileName:string * start:int * len:int -> byte [] - - static member OpenReaderAndRetry: filename:string * codepage:int option * retryLocked:bool -> System.IO.StreamReader - - diff --git a/src/fsharp/absil/ilmorph.fs b/src/fsharp/absil/ilmorph.fs index b6fb7ce69b6..600184c8aaf 100644 --- a/src/fsharp/absil/ilmorph.fs +++ b/src/fsharp/absil/ilmorph.fs @@ -4,7 +4,7 @@ module internal FSharp.Compiler.AbstractIL.Morphs open System.Collections.Generic open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.IL let mutable morphCustomAttributeData = false @@ -133,27 +133,27 @@ let rec celem_ty2ty f celem = let cnamedarg_ty2ty f ((nm, ty, isProp, elem) : ILAttributeNamedArg) = (nm, f ty, isProp, celem_ty2ty f elem) -let cattr_ty2ty ilg f (c: ILAttribute) = +let cattr_ty2ty f (c: ILAttribute) = let meth = mspec_ty2ty (f, (fun _ -> f)) c.Method // dev11 M3 defensive coding: if anything goes wrong with attribute decoding or encoding, then back out. if morphCustomAttributeData then try - let elems,namedArgs = IL.decodeILAttribData ilg c + let elems,namedArgs = IL.decodeILAttribData c let elems = elems |> List.map (celem_ty2ty f) let namedArgs = namedArgs |> List.map (cnamedarg_ty2ty f) - mkILCustomAttribMethRef ilg (meth, elems, namedArgs) + mkILCustomAttribMethRef (meth, elems, namedArgs) with _ -> c.WithMethod(meth) else c.WithMethod(meth) -let cattrs_ty2ty ilg f (cs: ILAttributes) = - mkILCustomAttrs (List.map (cattr_ty2ty ilg f) cs.AsList) +let cattrs_ty2ty f (cs: ILAttributes) = + mkILCustomAttrs (List.map (cattr_ty2ty f) cs.AsList) -let fdef_ty2ty ilg ftye (fd: ILFieldDef) = +let fdef_ty2ty ftye (fd: ILFieldDef) = fd.With(fieldType=ftye fd.FieldType, - customAttrs=cattrs_ty2ty ilg ftye fd.CustomAttrs) + customAttrs=cattrs_ty2ty ftye fd.CustomAttrs) let local_ty2ty f (l: ILLocal) = {l with Type = f l.Type} let varargs_ty2ty f (varargs: ILVarArgs) = Option.map (List.map f) varargs @@ -197,8 +197,8 @@ let morphILTypesInILInstr ((factualty,fformalty)) i = | ILToken.ILField fr -> I_ldtoken (ILToken.ILField (conv_fspec fr)) | x -> x -let return_ty2ty ilg f (r:ILReturn) = {r with Type=f r.Type; CustomAttrsStored= storeILCustomAttrs (cattrs_ty2ty ilg f r.CustomAttrs)} -let param_ty2ty ilg f (p: ILParameter) = {p with Type=f p.Type; CustomAttrsStored= storeILCustomAttrs (cattrs_ty2ty ilg f p.CustomAttrs)} +let return_ty2ty f (r:ILReturn) = {r with Type=f r.Type; CustomAttrsStored= storeILCustomAttrs (cattrs_ty2ty f r.CustomAttrs)} +let param_ty2ty f (p: ILParameter) = {p with Type=f p.Type; CustomAttrsStored= storeILCustomAttrs (cattrs_ty2ty f p.CustomAttrs)} let morphILMethodDefs f (m:ILMethodDefs) = mkILMethods (List.map f m.AsList) let fdefs_fdef2fdef f (m:ILFieldDefs) = mkILFields (List.map f m.AsList) @@ -213,107 +213,107 @@ let ilmbody_instr2instr_ty2ty fs (il: ILMethodBody) = {il with Code=code_instr2instr_ty2ty (finstr,ftye) il.Code Locals = locals_ty2ty ftye il.Locals } -let morphILMethodBody (filmbody) (x: ILLazyMethodBody) = - let c = - match x.Contents with - | MethodBody.IL il -> MethodBody.IL (filmbody il) - | x -> x - mkMethBodyAux c +let morphILMethodBody (filmbody) (x: MethodBody) = + match x with + | MethodBody.IL il -> + let ilCode = filmbody il.Value // Eager + MethodBody.IL (lazy ilCode) + | x -> x let ospec_ty2ty f (OverridesSpec(mref,ty)) = OverridesSpec(mref_ty2ty f mref, f ty) -let mdef_ty2ty_ilmbody2ilmbody ilg fs (md: ILMethodDef) = +let mdef_ty2ty_ilmbody2ilmbody fs (md: ILMethodDef) = let (ftye,filmbody) = fs let ftye' = ftye (Some md) let body' = morphILMethodBody (filmbody (Some md)) md.Body md.With(genericParams=gparams_ty2ty ftye' md.GenericParams, - body= body', - parameters = List.map (param_ty2ty ilg ftye') md.Parameters, - ret = return_ty2ty ilg ftye' md.Return, - customAttrs=cattrs_ty2ty ilg ftye' md.CustomAttrs) + body= notlazy body', + parameters = List.map (param_ty2ty ftye') md.Parameters, + ret = return_ty2ty ftye' md.Return, + customAttrs=cattrs_ty2ty ftye' md.CustomAttrs) -let fdefs_ty2ty ilg f x = fdefs_fdef2fdef (fdef_ty2ty ilg f) x +let fdefs_ty2ty f x = fdefs_fdef2fdef (fdef_ty2ty f) x -let mdefs_ty2ty_ilmbody2ilmbody ilg fs x = morphILMethodDefs (mdef_ty2ty_ilmbody2ilmbody ilg fs) x +let mdefs_ty2ty_ilmbody2ilmbody fs x = morphILMethodDefs (mdef_ty2ty_ilmbody2ilmbody fs) x let mimpl_ty2ty f e = { Overrides = ospec_ty2ty f e.Overrides OverrideBy = mspec_ty2ty (f,(fun _ -> f)) e.OverrideBy; } -let edef_ty2ty ilg f (e: ILEventDef) = +let edef_ty2ty f (e: ILEventDef) = e.With(eventType = Option.map f e.EventType, addMethod = mref_ty2ty f e.AddMethod, removeMethod = mref_ty2ty f e.RemoveMethod, fireMethod = Option.map (mref_ty2ty f) e.FireMethod, otherMethods = List.map (mref_ty2ty f) e.OtherMethods, - customAttrs = cattrs_ty2ty ilg f e.CustomAttrs) + customAttrs = cattrs_ty2ty f e.CustomAttrs) -let pdef_ty2ty ilg f (p: ILPropertyDef) = +let pdef_ty2ty f (p: ILPropertyDef) = p.With(setMethod = Option.map (mref_ty2ty f) p.SetMethod, getMethod = Option.map (mref_ty2ty f) p.GetMethod, propertyType = f p.PropertyType, args = List.map f p.Args, - customAttrs = cattrs_ty2ty ilg f p.CustomAttrs) + customAttrs = cattrs_ty2ty f p.CustomAttrs) -let pdefs_ty2ty ilg f (pdefs: ILPropertyDefs) = mkILProperties (List.map (pdef_ty2ty ilg f) pdefs.AsList) -let edefs_ty2ty ilg f (edefs: ILEventDefs) = mkILEvents (List.map (edef_ty2ty ilg f) edefs.AsList) +let pdefs_ty2ty f (pdefs: ILPropertyDefs) = mkILProperties (List.map (pdef_ty2ty f) pdefs.AsList) +let edefs_ty2ty f (edefs: ILEventDefs) = mkILEvents (List.map (edef_ty2ty f) edefs.AsList) let mimpls_ty2ty f (mimpls : ILMethodImplDefs) = mkILMethodImpls (List.map (mimpl_ty2ty f) mimpls.AsList) -let rec tdef_ty2ty_ilmbody2ilmbody_mdefs2mdefs ilg enc fs (td: ILTypeDef) = +let rec tdef_ty2ty_ilmbody2ilmbody_mdefs2mdefs enc fs (td: ILTypeDef) = let (ftye,fmdefs) = fs let ftye' = ftye (Some (enc,td)) None let mdefs' = fmdefs (enc,td) td.Methods - let fdefs' = fdefs_ty2ty ilg ftye' td.Fields + let fdefs' = fdefs_ty2ty ftye' td.Fields td.With(implements= List.map ftye' td.Implements, genericParams= gparams_ty2ty ftye' td.GenericParams, extends = Option.map ftye' td.Extends, methods=mdefs', - nestedTypes=tdefs_ty2ty_ilmbody2ilmbody_mdefs2mdefs ilg (enc@[td]) fs td.NestedTypes, + nestedTypes=tdefs_ty2ty_ilmbody2ilmbody_mdefs2mdefs (enc@[td]) fs td.NestedTypes, fields=fdefs', methodImpls = mimpls_ty2ty ftye' td.MethodImpls, - events = edefs_ty2ty ilg ftye' td.Events, - properties = pdefs_ty2ty ilg ftye' td.Properties, - customAttrs = cattrs_ty2ty ilg ftye' td.CustomAttrs) + events = edefs_ty2ty ftye' td.Events, + properties = pdefs_ty2ty ftye' td.Properties, + customAttrs = cattrs_ty2ty ftye' td.CustomAttrs) -and tdefs_ty2ty_ilmbody2ilmbody_mdefs2mdefs ilg enc fs tdefs = - morphILTypeDefs (tdef_ty2ty_ilmbody2ilmbody_mdefs2mdefs ilg enc fs) tdefs +and tdefs_ty2ty_ilmbody2ilmbody_mdefs2mdefs enc fs tdefs = + morphILTypeDefs (tdef_ty2ty_ilmbody2ilmbody_mdefs2mdefs enc fs) tdefs // -------------------------------------------------------------------- // Derived versions of the above, e.g. with defaults added // -------------------------------------------------------------------- -let manifest_ty2ty ilg f (m : ILAssemblyManifest) = - { m with CustomAttrsStored = storeILCustomAttrs (cattrs_ty2ty ilg f m.CustomAttrs) } +let manifest_ty2ty f (m : ILAssemblyManifest) = + { m with CustomAttrsStored = storeILCustomAttrs (cattrs_ty2ty f m.CustomAttrs) } -let morphILTypeInILModule_ilmbody2ilmbody_mdefs2mdefs ilg ((ftye: ILModuleDef -> (ILTypeDef list * ILTypeDef) option -> ILMethodDef option -> ILType -> ILType),fmdefs) m = +let morphILTypeInILModule_ilmbody2ilmbody_mdefs2mdefs ((ftye: ILModuleDef -> (ILTypeDef list * ILTypeDef) option -> ILMethodDef option -> ILType -> ILType),fmdefs) m = - let ftdefs = tdefs_ty2ty_ilmbody2ilmbody_mdefs2mdefs ilg [] (ftye m,fmdefs m) + let ftdefs = tdefs_ty2ty_ilmbody2ilmbody_mdefs2mdefs [] (ftye m,fmdefs m) { m with TypeDefs=ftdefs m.TypeDefs - CustomAttrsStored= storeILCustomAttrs (cattrs_ty2ty ilg (ftye m None None) m.CustomAttrs) - Manifest=Option.map (manifest_ty2ty ilg (ftye m None None)) m.Manifest } + CustomAttrsStored= storeILCustomAttrs (cattrs_ty2ty (ftye m None None) m.CustomAttrs) + Manifest=Option.map (manifest_ty2ty (ftye m None None)) m.Manifest } -let module_instr2instr_ty2ty ilg fs x = +let module_instr2instr_ty2ty fs x = let (fcode,ftye) = fs let filmbody modCtxt tdefCtxt mdefCtxt = ilmbody_instr2instr_ty2ty (fcode modCtxt tdefCtxt mdefCtxt, ftye modCtxt (Some tdefCtxt) mdefCtxt) - let fmdefs modCtxt tdefCtxt = mdefs_ty2ty_ilmbody2ilmbody ilg (ftye modCtxt (Some tdefCtxt), filmbody modCtxt tdefCtxt) - morphILTypeInILModule_ilmbody2ilmbody_mdefs2mdefs ilg (ftye, fmdefs) x + let fmdefs modCtxt tdefCtxt = mdefs_ty2ty_ilmbody2ilmbody (ftye modCtxt (Some tdefCtxt), filmbody modCtxt tdefCtxt) + morphILTypeInILModule_ilmbody2ilmbody_mdefs2mdefs (ftye, fmdefs) x -let morphILInstrsAndILTypesInILModule ilg (f1,f2) x = - module_instr2instr_ty2ty ilg (f1, f2) x +let morphILInstrsAndILTypesInILModule (f1,f2) x = + module_instr2instr_ty2ty (f1, f2) x let morphILInstrsInILCode f x = code_instr2instrs f x -let morphILTypeInILModule ilg ftye y = +let morphILTypeInILModule ftye y = let finstr modCtxt tdefCtxt mdefCtxt = let fty = ftye modCtxt (Some tdefCtxt) mdefCtxt morphILTypesInILInstr ((fun _instrCtxt -> fty), (fun _instrCtxt _formalCtxt -> fty)) - morphILInstrsAndILTypesInILModule ilg (finstr,ftye) y + morphILInstrsAndILTypesInILModule (finstr,ftye) y -let morphILTypeRefsInILModuleMemoized ilg f modul = +let morphILTypeRefsInILModuleMemoized f modul = let fty = Tables.memoize (ty_tref2tref f) - morphILTypeInILModule ilg (fun _ _ _ ty -> fty ty) modul + morphILTypeInILModule (fun _ _ _ ty -> fty ty) modul -let morphILScopeRefsInILModuleMemoized ilg f modul = - morphILTypeRefsInILModuleMemoized ilg (morphILScopeRefsInILTypeRef f) modul +let morphILScopeRefsInILModuleMemoized f modul = + morphILTypeRefsInILModuleMemoized (morphILScopeRefsInILTypeRef f) modul diff --git a/src/fsharp/absil/ilmorph.fsi b/src/fsharp/absil/ilmorph.fsi index 1b5fc1499d9..70cb7808f2e 100644 --- a/src/fsharp/absil/ilmorph.fsi +++ b/src/fsharp/absil/ilmorph.fsi @@ -8,16 +8,15 @@ /// the ILMethodDef (if any) where the item occurs. etc. module internal FSharp.Compiler.AbstractIL.Morphs -open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL /// Morph each scope reference inside a type signature. val morphILScopeRefsInILTypeRef: (ILScopeRef -> ILScopeRef) -> ILTypeRef -> ILTypeRef /// Morph all type references throughout an entire module. -val morphILTypeRefsInILModuleMemoized: ILGlobals -> (ILTypeRef -> ILTypeRef) -> ILModuleDef -> ILModuleDef +val morphILTypeRefsInILModuleMemoized: (ILTypeRef -> ILTypeRef) -> ILModuleDef -> ILModuleDef -val morphILScopeRefsInILModuleMemoized: ILGlobals -> (ILScopeRef -> ILScopeRef) -> ILModuleDef -> ILModuleDef +val morphILScopeRefsInILModuleMemoized: (ILScopeRef -> ILScopeRef) -> ILModuleDef -> ILModuleDef val morphILInstrsInILCode: (ILInstr -> ILInstr list) -> ILCode -> ILCode diff --git a/src/fsharp/absil/ilnativeres.fs b/src/fsharp/absil/ilnativeres.fs index 96cff415130..f1892c42cdf 100644 --- a/src/fsharp/absil/ilnativeres.fs +++ b/src/fsharp/absil/ilnativeres.fs @@ -3,7 +3,7 @@ // And https://github.com/dotnet/roslyn/blob/d36121da4b527ee0617e4b0940b9d0b17b584470/src/Compilers/Core/Portable/CvtRes.cs // And their dependencies (some classes) -module internal FSharp.Compiler.AbstractIL.Internal.NativeRes +module internal FSharp.Compiler.AbstractIL.NativeRes open System open System.Collections.Generic diff --git a/src/fsharp/absil/ilnativeres.fsi b/src/fsharp/absil/ilnativeres.fsi index c9582400851..4294cb14969 100644 --- a/src/fsharp/absil/ilnativeres.fsi +++ b/src/fsharp/absil/ilnativeres.fsi @@ -1,10 +1,8 @@ -module internal FSharp.Compiler.AbstractIL.Internal.NativeRes +module internal FSharp.Compiler.AbstractIL.NativeRes open System open System.Collections.Generic -open System.Linq -open System.Diagnostics open System.IO open System.Reflection.Metadata diff --git a/src/fsharp/absil/ilpars.fsy b/src/fsharp/absil/ilpars.fsy index eb93edb4806..29b3dd9127e 100644 --- a/src/fsharp/absil/ilpars.fsy +++ b/src/fsharp/absil/ilpars.fsy @@ -5,15 +5,15 @@ #nowarn "1182" // the generated code often has unused variable "parseState" open Internal.Utilities +open Internal.Utilities.Library open Internal.Utilities.Text open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.AsciiConstants +open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.AsciiConstants open FSharp.Compiler.AbstractIL.Diagnostics -open FSharp.Compiler.AbstractIL.Extensions.ILX.Types +open FSharp.Compiler.AbstractIL.ILX.Types open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library let pfailwith s = diff --git a/src/fsharp/absil/ilprint.fs b/src/fsharp/absil/ilprint.fs index 42c0dcddd6a..782899e9111 100644 --- a/src/fsharp/absil/ilprint.fs +++ b/src/fsharp/absil/ilprint.fs @@ -2,15 +2,17 @@ module internal FSharp.Compiler.AbstractIL.ILAsciiWriter -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Extensions.ILX.Types -open FSharp.Compiler.AbstractIL.Internal.AsciiConstants -open FSharp.Compiler.AbstractIL.IL - open System.IO open System.Reflection +open FSharp.Compiler.IO +open Internal.Utilities +open Internal.Utilities.Library + +open FSharp.Compiler.AbstractIL.AsciiConstants +open FSharp.Compiler.AbstractIL.ILX.Types +open FSharp.Compiler.AbstractIL.IL + #if DEBUG let pretty () = true @@ -193,20 +195,20 @@ and goutput_typ env os ty = | ILType.Byref typ -> goutput_typ env os typ; output_string os "&" | ILType.Ptr typ -> goutput_typ env os typ; output_string os "*" - | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_SByte.TypeSpec.Name -> output_string os "int8" - | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_Int16.TypeSpec.Name -> output_string os "int16" - | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_Int32.TypeSpec.Name -> output_string os "int32" - | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_Int64.TypeSpec.Name -> output_string os "int64" - | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_IntPtr.TypeSpec.Name -> output_string os "native int" - | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_Byte.TypeSpec.Name -> output_string os "unsigned int8" - | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_UInt16.TypeSpec.Name -> output_string os "unsigned int16" - | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_UInt32.TypeSpec.Name -> output_string os "unsigned int32" - | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_UInt64.TypeSpec.Name -> output_string os "unsigned int64" - | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_UIntPtr.TypeSpec.Name -> output_string os "native unsigned int" - | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_Double.TypeSpec.Name -> output_string os "float64" - | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_Single.TypeSpec.Name -> output_string os "float32" - | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_Bool.TypeSpec.Name -> output_string os "bool" - | ILType.Value tspec when tspec.Name = EcmaMscorlibILGlobals.typ_Char.TypeSpec.Name -> output_string os "char" + | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_SByte.TypeSpec.Name -> output_string os "int8" + | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_Int16.TypeSpec.Name -> output_string os "int16" + | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_Int32.TypeSpec.Name -> output_string os "int32" + | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_Int64.TypeSpec.Name -> output_string os "int64" + | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_IntPtr.TypeSpec.Name -> output_string os "native int" + | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_Byte.TypeSpec.Name -> output_string os "unsigned int8" + | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_UInt16.TypeSpec.Name -> output_string os "unsigned int16" + | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_UInt32.TypeSpec.Name -> output_string os "unsigned int32" + | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_UInt64.TypeSpec.Name -> output_string os "unsigned int64" + | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_UIntPtr.TypeSpec.Name -> output_string os "native unsigned int" + | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_Double.TypeSpec.Name -> output_string os "float64" + | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_Single.TypeSpec.Name -> output_string os "float32" + | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_Bool.TypeSpec.Name -> output_string os "bool" + | ILType.Value tspec when tspec.Name = PrimaryAssemblyILGlobals.typ_Char.TypeSpec.Name -> output_string os "char" | ILType.Value tspec -> output_string os "value class " goutput_tref env os tspec.TypeRef @@ -459,7 +461,7 @@ let output_at os b = let output_option f os = function None -> () | Some x -> f os x -let goutput_alternative_ref env os (alt: IlxUnionAlternative) = +let goutput_alternative_ref env os (alt: IlxUnionCase) = output_id os alt.Name alt.FieldDefs |> output_parens (output_array ", " (fun os fdef -> goutput_typ env os fdef.Type)) os @@ -497,7 +499,7 @@ let output_custom_attr_data os data = let goutput_custom_attr env os (attr: ILAttribute) = output_string os " .custom " goutput_mspec env os attr.Method - let data = getCustomAttrData env.ilGlobals attr + let data = getCustomAttrData attr output_custom_attr_data os data let goutput_custom_attrs env os (attrs : ILAttributes) = @@ -728,7 +730,7 @@ let rec goutput_instr env os inst = goutput_dlocref env os (mkILArrTy(typ, shape)) output_string os ".ctor" let rank = shape.Rank - output_parens (output_array ", " (goutput_typ env)) os (Array.create ( rank) EcmaMscorlibILGlobals.typ_Int32) + output_parens (output_array ", " (goutput_typ env)) os (Array.create ( rank) PrimaryAssemblyILGlobals.typ_Int32) | I_stelem_any (shape, dt) -> if shape = ILArrayShape.SingleDimensional then output_string os "stelem.any "; goutput_typ env os dt @@ -737,7 +739,7 @@ let rec goutput_instr env os inst = goutput_dlocref env os (mkILArrTy(dt, shape)) output_string os "Set" let rank = shape.Rank - let arr = Array.create (rank + 1) EcmaMscorlibILGlobals.typ_Int32 + let arr = Array.create (rank + 1) PrimaryAssemblyILGlobals.typ_Int32 arr.[rank] <- dt output_parens (output_array ", " (goutput_typ env)) os arr | I_ldelem_any (shape, tok) -> @@ -750,7 +752,7 @@ let rec goutput_instr env os inst = goutput_dlocref env os (mkILArrTy(tok, shape)) output_string os "Get" let rank = shape.Rank - output_parens (output_array ", " (goutput_typ env)) os (Array.create ( rank) EcmaMscorlibILGlobals.typ_Int32) + output_parens (output_array ", " (goutput_typ env)) os (Array.create ( rank) PrimaryAssemblyILGlobals.typ_Int32) | I_ldelema (ro, _, shape, tok) -> if ro = ReadonlyAddress then output_string os "readonly. " if shape = ILArrayShape.SingleDimensional then @@ -762,7 +764,7 @@ let rec goutput_instr env os inst = goutput_dlocref env os (mkILArrTy(tok, shape)) output_string os "Address" let rank = shape.Rank - output_parens (output_array ", " (goutput_typ env)) os (Array.create ( rank) EcmaMscorlibILGlobals.typ_Int32) + output_parens (output_array ", " (goutput_typ env)) os (Array.create ( rank) PrimaryAssemblyILGlobals.typ_Int32) | I_box tok -> output_string os "box "; goutput_typ env os tok | I_unbox tok -> output_string os "unbox "; goutput_typ env os tok @@ -807,8 +809,8 @@ let goutput_mbody is_entrypoint env os (md: ILMethodDef) = output_string os " \n{ \n" goutput_security_decls env os md.SecurityDecls goutput_custom_attrs env os md.CustomAttrs - match md.Body.Contents with - | MethodBody.IL il -> goutput_ilmbody env os il + match md.Body with + | MethodBody.IL il -> goutput_ilmbody env os il.Value | _ -> () if is_entrypoint then output_string os " .entrypoint" output_string os "\n" @@ -827,8 +829,9 @@ let goutput_mdef env os (md:ILMethodDef) = elif md.IsConstructor then "rtspecialname" elif md.IsStatic then "static " + - (match md.Body.Contents with - MethodBody.PInvoke (attr) -> + (match md.Body with + MethodBody.PInvoke (attrLazy) -> + let attr = attrLazy.Value "pinvokeimpl(\"" + attr.Where.Name + "\" as \"" + attr.Name + "\"" + (match attr.CallingConv with | PInvokeCallingConvention.None -> "" diff --git a/src/fsharp/absil/ilprint.fsi b/src/fsharp/absil/ilprint.fsi index 9ba4ccb1bf7..be5e4f53dce 100644 --- a/src/fsharp/absil/ilprint.fsi +++ b/src/fsharp/absil/ilprint.fsi @@ -3,9 +3,7 @@ /// Printer for the abstract syntax. module internal FSharp.Compiler.AbstractIL.ILAsciiWriter -open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal open System.IO #if DEBUG diff --git a/src/fsharp/absil/ilread.fs b/src/fsharp/absil/ilread.fs index 51f2a122913..b89cccd82c3 100644 --- a/src/fsharp/absil/ilread.fs +++ b/src/fsharp/absil/ilread.fs @@ -5,7 +5,7 @@ // //--------------------------------------------------------------------- -module FSharp.Compiler.AbstractIL.ILBinaryReader +module FSharp.Compiler.AbstractIL.ILBinaryReader #nowarn "42" // This construct is deprecated: it is only for use in the F# library @@ -16,25 +16,23 @@ open System.Collections.Immutable open System.Diagnostics open System.IO open System.IO.MemoryMappedFiles -open System.Runtime.InteropServices open System.Text -open Internal.Utilities open Internal.Utilities.Collections -open FSharp.NativeInterop -open FSharp.Compiler.AbstractIL.Diagnostics +open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.BinaryConstants -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Internal.Support -open FSharp.Compiler.AbstractIL.Internal.Utils +open FSharp.Compiler.AbstractIL.BinaryConstants +open Internal.Utilities.Library +open FSharp.Compiler.AbstractIL.Support open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Range +open FSharp.Compiler.IO +open FSharp.Compiler.Text.Range open System.Reflection +open System.Reflection.PortableExecutable +open FSharp.NativeInterop #nowarn "9" -let checking = false +let checking = false let logging = false let _ = if checking then dprintn "warning: ILBinaryReader.checking is on" let noStableFileHeuristic = try (System.Environment.GetEnvironmentVariable("FSharp_NoStableFileHeuristic") <> null) with _ -> false @@ -46,61 +44,61 @@ let singleOfBits (x: int32) = System.BitConverter.ToSingle(System.BitConverter.G let doubleOfBits (x: int64) = System.BitConverter.Int64BitsToDouble x //--------------------------------------------------------------------- -// Utilities. +// Utilities. //--------------------------------------------------------------------- let align alignment n = ((n + alignment - 0x1) / alignment) * alignment let uncodedToken (tab: TableName) idx = ((tab.Index <<< 24) ||| idx) -let i32ToUncodedToken tok = +let i32ToUncodedToken tok = let idx = tok &&& 0xffffff let tab = tok >>>& 24 (TableName.FromIndex tab, idx) [] -type TaggedIndex<'T> = +type TaggedIndex<'T> = val tag: 'T val index: int32 new(tag, index) = { tag=tag; index=index } -let uncodedTokenToTypeDefOrRefOrSpec (tab, tok) = +let uncodedTokenToTypeDefOrRefOrSpec (tab, tok) = let tag = - if tab = TableNames.TypeDef then tdor_TypeDef + if tab = TableNames.TypeDef then tdor_TypeDef elif tab = TableNames.TypeRef then tdor_TypeRef elif tab = TableNames.TypeSpec then tdor_TypeSpec - else failwith "bad table in uncodedTokenToTypeDefOrRefOrSpec" + else failwith "bad table in uncodedTokenToTypeDefOrRefOrSpec" TaggedIndex(tag, tok) -let uncodedTokenToMethodDefOrRef (tab, tok) = +let uncodedTokenToMethodDefOrRef (tab, tok) = let tag = - if tab = TableNames.Method then mdor_MethodDef + if tab = TableNames.Method then mdor_MethodDef elif tab = TableNames.MemberRef then mdor_MemberRef - else failwith "bad table in uncodedTokenToMethodDefOrRef" + else failwith "bad table in uncodedTokenToMethodDefOrRef" TaggedIndex(tag, tok) -let (|TaggedIndex|) (x: TaggedIndex<'T>) = x.tag, x.index -let inline tokToTaggedIdx f nbits tok = - let tagmask = - if nbits = 1 then 1 - elif nbits = 2 then 3 - elif nbits = 3 then 7 - elif nbits = 4 then 15 - elif nbits = 5 then 31 +let (|TaggedIndex|) (x: TaggedIndex<'T>) = x.tag, x.index +let inline tokToTaggedIdx f nbits tok = + let tagmask = + if nbits = 1 then 1 + elif nbits = 2 then 3 + elif nbits = 3 then 7 + elif nbits = 4 then 15 + elif nbits = 5 then 31 else failwith "too many nbits" let tag = tok &&& tagmask let idx = tok >>>& nbits - TaggedIndex(f tag, idx) - -type Statistics = + TaggedIndex(f tag, idx) + +type Statistics = { mutable rawMemoryFileCount: int mutable memoryMapFileOpenedCount: int mutable memoryMapFileClosedCount: int mutable weakByteFileCount: int mutable byteFileCount: int } -let stats = +let stats = { rawMemoryFileCount = 0 memoryMapFileOpenedCount = 0 memoryMapFileClosedCount = 0 @@ -112,34 +110,79 @@ let GetStatistics() = stats type private BinaryView = ReadOnlyByteMemory /// An abstraction over how we access the contents of .NET binaries. -type BinaryFile = +type BinaryFile = abstract GetView: unit -> BinaryView /// Gives views over a raw chunk of memory, for example those returned to us by the memory manager in Roslyn's /// Visual Studio integration. 'obj' must keep the memory alive. The object will capture it and thus also keep the memory alive for -/// the lifetime of this object. -type RawMemoryFile(fileName: string, obj: obj, addr: nativeint, length: int) = - do stats.rawMemoryFileCount <- stats.rawMemoryFileCount + 1 - let view = ByteMemory.FromUnsafePointer(addr, length, obj).AsReadOnly() - member __.HoldObj() = obj // make sure we capture 'obj' - member __.FileName = fileName +/// the lifetime of this object. +type RawMemoryFile = + val mutable private holder: obj + val mutable private fileName: string + val mutable private view: ReadOnlyByteMemory + + new (fileName: string, obj: obj, addr: nativeint, length: int) = + stats.rawMemoryFileCount <- stats.rawMemoryFileCount + 1 + { + holder = obj + fileName = fileName + view = ByteMemory.FromUnsafePointer(addr, length, obj).AsReadOnly() + } + + new (fileName: string, holder: obj, bmem: ByteMemory) = + { + holder = holder // gonna be finalized due to how we pass the holder when create RawByteMemory + fileName = fileName + view = bmem.AsReadOnly() + } + + member r.HoldObj() = r.holder // make sure we capture the holder. + member r.FileName = r.fileName + + interface BinaryFile with + override r.GetView() = r.view + +/// Gives a view over any ByteMemory, can be stream-based, mmap-ed, or just byte array. +type ByteMemoryFile(fileName: string, view: ByteMemory) = + member _.FileName = fileName interface BinaryFile with - override __.GetView() = view + override _.GetView() = view.AsReadOnly() /// A BinaryFile backed by an array of bytes held strongly as managed memory [] -type ByteFile(fileName: string, bytes: byte[]) = +type ByteFile(fileName: string, bytes: byte[]) = let view = ByteMemory.FromArray(bytes).AsReadOnly() do stats.byteFileCount <- stats.byteFileCount + 1 - member __.FileName = fileName + member _.FileName = fileName interface BinaryFile with override bf.GetView() = view - + +type PEFile(fileName: string, peReader: PEReader) as this = + + // We store a weak byte memory reference so we do not constantly create a lot of byte memory objects. + // We could just have a single ByteMemory stored in the PEFile, but we need to dispose of the stream via the finalizer; we cannot have a cicular reference. + let mutable weakMemory = new WeakReference(Unchecked.defaultof<_>) + + member _.FileName = fileName + + override _.Finalize() = + peReader.Dispose() + + interface BinaryFile with + override _.GetView() = + match weakMemory.TryGetTarget() with + | true, m -> m.AsReadOnly() + | _ -> + let block = peReader.GetEntireImage() // it's ok to call this everytime we do GetView as it is cached in the PEReader. + let m = ByteMemory.FromUnsafePointer(block.Pointer |> NativePtr.toNativeInt, block.Length, this) + weakMemory <- WeakReference(m) + m.AsReadOnly() + /// Same as ByteFile but holds the bytes weakly. The bytes will be re-read from the backing file when a view is requested. /// This is the default implementation used by F# Compiler Services when accessing "stable" binaries. It is not used /// by Visual Studio, where tryGetMetadataSnapshot provides a RawMemoryFile backed by Roslyn data. [] -type WeakByteFile(fileName: string, chunk: (int * int) option) = +type WeakByteFile(fileName: string, chunk: (int * int) option) = do stats.weakByteFileCount <- stats.weakByteFileCount + 1 @@ -149,22 +192,23 @@ type WeakByteFile(fileName: string, chunk: (int * int) option) = /// The weak handle to the bytes for the file let weakBytes = new WeakReference (null) - member __.FileName = fileName + member _.FileName = fileName /// Get the bytes for the file interface BinaryFile with - override this.GetView() = - let strongBytes = + override this.GetView() = + let strongBytes = let mutable tg = null - if not (weakBytes.TryGetTarget(&tg)) then - if FileSystem.GetLastWriteTimeShim fileName <> fileStamp then + if not (weakBytes.TryGetTarget(&tg)) then + if FileSystem.GetLastWriteTimeShim fileName <> fileStamp then error (Error (FSComp.SR.ilreadFileChanged fileName, range0)) - let bytes = - match chunk with - | None -> FileSystem.ReadAllBytesShim fileName - | Some(start, length) -> File.ReadBinaryChunk (fileName, start, length) + let bytes = + use stream = FileSystem.OpenFileForReadShim(fileName) + match chunk with + | None -> stream.ReadAllBytes() + | Some(start, length) -> stream.ReadBytes(start, length) tg <- bytes @@ -174,15 +218,15 @@ type WeakByteFile(fileName: string, chunk: (int * int) option) = ByteMemory.FromArray(strongBytes).AsReadOnly() - + let seekReadByte (mdv: BinaryView) addr = mdv.[addr] let seekReadBytes (mdv: BinaryView) addr len = mdv.ReadBytes(addr, len) let seekReadInt32 (mdv: BinaryView) addr = mdv.ReadInt32 addr let seekReadUInt16 (mdv: BinaryView) addr = mdv.ReadUInt16 addr - + let seekReadByteAsInt32 mdv addr = int32 (seekReadByte mdv addr) - -let seekReadInt64 mdv addr = + +let seekReadInt64 mdv addr = let b0 = seekReadByte mdv addr let b1 = seekReadByte mdv (addr+1) let b2 = seekReadByte mdv (addr+2) @@ -195,84 +239,84 @@ let seekReadInt64 mdv addr = (int64 b4 <<< 32) ||| (int64 b5 <<< 40) ||| (int64 b6 <<< 48) ||| (int64 b7 <<< 56) let seekReadUInt16AsInt32 mdv addr = int32 (seekReadUInt16 mdv addr) - -let seekReadCompressedUInt32 mdv addr = + +let seekReadCompressedUInt32 mdv addr = let b0 = seekReadByte mdv addr if b0 <= 0x7Fuy then struct (int b0, addr+1) - elif b0 <= 0xBFuy then + elif b0 <= 0xBFuy then let b0 = b0 &&& 0x7Fuy - let b1 = seekReadByteAsInt32 mdv (addr+1) + let b1 = seekReadByteAsInt32 mdv (addr+1) struct ((int b0 <<< 8) ||| int b1, addr+2) - else + else let b0 = b0 &&& 0x3Fuy - let b1 = seekReadByteAsInt32 mdv (addr+1) - let b2 = seekReadByteAsInt32 mdv (addr+2) - let b3 = seekReadByteAsInt32 mdv (addr+3) + let b1 = seekReadByteAsInt32 mdv (addr+1) + let b2 = seekReadByteAsInt32 mdv (addr+2) + let b3 = seekReadByteAsInt32 mdv (addr+3) struct ((int b0 <<< 24) ||| (int b1 <<< 16) ||| (int b2 <<< 8) ||| int b3, addr+4) let seekReadSByte mdv addr = sbyte (seekReadByte mdv addr) let seekReadSingle mdv addr = singleOfBits (seekReadInt32 mdv addr) let seekReadDouble mdv addr = doubleOfBits (seekReadInt64 mdv addr) - -let rec seekCountUtf8String mdv addr n = + +let rec seekCountUtf8String mdv addr n = let c = seekReadByteAsInt32 mdv addr - if c = 0 then n + if c = 0 then n else seekCountUtf8String mdv (addr+1) (n+1) -let seekReadUTF8String (mdv: BinaryView) addr = +let seekReadUTF8String (mdv: BinaryView) addr = let n = seekCountUtf8String mdv addr 0 mdv.ReadUtf8String (addr, n) -let seekReadBlob mdv addr = +let seekReadBlob mdv addr = let struct (len, addr) = seekReadCompressedUInt32 mdv addr seekReadBytes mdv addr len - -let seekReadUserString mdv addr = + +let seekReadUserString mdv addr = let struct (len, addr) = seekReadCompressedUInt32 mdv addr let bytes = seekReadBytes mdv addr (len - 1) Encoding.Unicode.GetString(bytes, 0, bytes.Length) let seekReadGuid mdv addr = seekReadBytes mdv addr 0x10 -let seekReadUncodedToken mdv addr = +let seekReadUncodedToken mdv addr = i32ToUncodedToken (seekReadInt32 mdv addr) - + //--------------------------------------------------------------------- // Primitives to help read signatures. These do not use the file cursor //--------------------------------------------------------------------- -let sigptrCheck (bytes: byte[]) sigptr = +let sigptrCheck (bytes: byte[]) sigptr = if checking && sigptr >= bytes.Length then failwith "read past end of sig. " // All this code should be moved to use a mutable index into the signature // -//type SigPtr(bytes: byte[], sigptr: int) = +//type SigPtr(bytes: byte[], sigptr: int) = // let mutable curr = sigptr // member x.GetByte() = let res = bytes.[curr] in curr <- curr + 1; res - -let sigptrGetByte (bytes: byte[]) sigptr = + +let sigptrGetByte (bytes: byte[]) sigptr = sigptrCheck bytes sigptr bytes.[sigptr], sigptr + 1 -let sigptrGetBool bytes sigptr = +let sigptrGetBool bytes sigptr = let b0, sigptr = sigptrGetByte bytes sigptr (b0 = 0x01uy), sigptr -let sigptrGetSByte bytes sigptr = +let sigptrGetSByte bytes sigptr = let i, sigptr = sigptrGetByte bytes sigptr sbyte i, sigptr -let sigptrGetUInt16 bytes sigptr = +let sigptrGetUInt16 bytes sigptr = let b0, sigptr = sigptrGetByte bytes sigptr let b1, sigptr = sigptrGetByte bytes sigptr uint16 (int b0 ||| (int b1 <<< 8)), sigptr -let sigptrGetInt16 bytes sigptr = +let sigptrGetInt16 bytes sigptr = let u, sigptr = sigptrGetUInt16 bytes sigptr int16 u, sigptr -let sigptrGetInt32 bytes sigptr = +let sigptrGetInt32 bytes sigptr = sigptrCheck bytes sigptr let b0 = bytes.[sigptr] let b1 = bytes.[sigptr+1] @@ -281,122 +325,122 @@ let sigptrGetInt32 bytes sigptr = let res = int b0 ||| (int b1 <<< 8) ||| (int b2 <<< 16) ||| (int b3 <<< 24) res, sigptr + 4 -let sigptrGetUInt32 bytes sigptr = +let sigptrGetUInt32 bytes sigptr = let u, sigptr = sigptrGetInt32 bytes sigptr uint32 u, sigptr -let sigptrGetUInt64 bytes sigptr = +let sigptrGetUInt64 bytes sigptr = let u0, sigptr = sigptrGetUInt32 bytes sigptr let u1, sigptr = sigptrGetUInt32 bytes sigptr (uint64 u0 ||| (uint64 u1 <<< 32)), sigptr -let sigptrGetInt64 bytes sigptr = +let sigptrGetInt64 bytes sigptr = let u, sigptr = sigptrGetUInt64 bytes sigptr int64 u, sigptr -let sigptrGetSingle bytes sigptr = +let sigptrGetSingle bytes sigptr = let u, sigptr = sigptrGetInt32 bytes sigptr singleOfBits u, sigptr -let sigptrGetDouble bytes sigptr = +let sigptrGetDouble bytes sigptr = let u, sigptr = sigptrGetInt64 bytes sigptr doubleOfBits u, sigptr -let sigptrGetZInt32 bytes sigptr = +let sigptrGetZInt32 bytes sigptr = let b0, sigptr = sigptrGetByte bytes sigptr if b0 <= 0x7Fuy then struct (int b0, sigptr) - elif b0 <= 0xBFuy then + elif b0 <= 0xBFuy then let b0 = b0 &&& 0x7Fuy let b1, sigptr = sigptrGetByte bytes sigptr struct ((int b0 <<< 8) ||| int b1, sigptr) - else + else let b0 = b0 &&& 0x3Fuy let b1, sigptr = sigptrGetByte bytes sigptr let b2, sigptr = sigptrGetByte bytes sigptr let b3, sigptr = sigptrGetByte bytes sigptr struct ((int b0 <<< 24) ||| (int b1 <<< 16) ||| (int b2 <<< 8) ||| int b3, sigptr) - -let rec sigptrFoldAcc f n (bytes: byte[]) (sigptr: int) i acc = - if i < n then + +let rec sigptrFoldAcc f n (bytes: byte[]) (sigptr: int) i acc = + if i < n then let x, sp = f bytes sigptr sigptrFoldAcc f n bytes sp (i+1) (x :: acc) - else + else List.rev acc, sigptr -let sigptrFold f n (bytes: byte[]) (sigptr: int) = +let sigptrFold f n (bytes: byte[]) (sigptr: int) = sigptrFoldAcc f n bytes sigptr 0 [] let sigptrFoldStruct f n (bytes: byte[]) (sigptr: int) = - let rec sigptrFoldAcc f n (bytes: byte[]) (sigptr: int) i acc = - if i < n then + let rec sigptrFoldAcc f n (bytes: byte[]) (sigptr: int) i acc = + if i < n then let struct (x, sp) = f bytes sigptr sigptrFoldAcc f n bytes sp (i+1) (x :: acc) - else + else struct (List.rev acc, sigptr) sigptrFoldAcc f n bytes sigptr 0 [] -let sigptrGetBytes n (bytes: byte[]) sigptr = - if checking && sigptr + n >= bytes.Length then - dprintn "read past end of sig. in sigptrGetString" +let sigptrGetBytes n (bytes: byte[]) sigptr = + if checking && sigptr + n >= bytes.Length then + dprintn "read past end of sig. in sigptrGetString" Bytes.zeroCreate 0, sigptr - else + else let res = Bytes.zeroCreate n - for i = 0 to (n - 1) do + for i = 0 to (n - 1) do res.[i] <- bytes.[sigptr + i] res, sigptr + n -let sigptrGetString n bytes sigptr = +let sigptrGetString n bytes sigptr = let bytearray, sigptr = sigptrGetBytes n bytes sigptr (System.Text.Encoding.UTF8.GetString(bytearray, 0, bytearray.Length)), sigptr - -// -------------------------------------------------------------------- + +// -------------------------------------------------------------------- // Now the tables of instructions -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- [] -type ILInstrPrefixesRegister = - { mutable al: ILAlignment +type ILInstrPrefixesRegister = + { mutable al: ILAlignment mutable tl: ILTailcall mutable vol: ILVolatility mutable ro: ILReadonly mutable constrained: ILType option} - -let noPrefixes mk prefixes = + +let noPrefixes mk prefixes = if prefixes.al <> Aligned then failwith "an unaligned prefix is not allowed here" if prefixes.vol <> Nonvolatile then failwith "a volatile prefix is not allowed here" if prefixes.tl <> Normalcall then failwith "a tailcall prefix is not allowed here" if prefixes.ro <> NormalAddress then failwith "a readonly prefix is not allowed here" if prefixes.constrained <> None then failwith "a constrained prefix is not allowed here" - mk + mk -let volatileOrUnalignedPrefix mk prefixes = +let volatileOrUnalignedPrefix mk prefixes = if prefixes.tl <> Normalcall then failwith "a tailcall prefix is not allowed here" if prefixes.constrained <> None then failwith "a constrained prefix is not allowed here" if prefixes.ro <> NormalAddress then failwith "a readonly prefix is not allowed here" - mk (prefixes.al, prefixes.vol) + mk (prefixes.al, prefixes.vol) -let volatilePrefix mk prefixes = +let volatilePrefix mk prefixes = if prefixes.al <> Aligned then failwith "an unaligned prefix is not allowed here" if prefixes.tl <> Normalcall then failwith "a tailcall prefix is not allowed here" if prefixes.constrained <> None then failwith "a constrained prefix is not allowed here" if prefixes.ro <> NormalAddress then failwith "a readonly prefix is not allowed here" mk prefixes.vol -let tailPrefix mk prefixes = +let tailPrefix mk prefixes = if prefixes.al <> Aligned then failwith "an unaligned prefix is not allowed here" if prefixes.vol <> Nonvolatile then failwith "a volatile prefix is not allowed here" if prefixes.constrained <> None then failwith "a constrained prefix is not allowed here" if prefixes.ro <> NormalAddress then failwith "a readonly prefix is not allowed here" - mk prefixes.tl + mk prefixes.tl -let constraintOrTailPrefix mk prefixes = +let constraintOrTailPrefix mk prefixes = if prefixes.al <> Aligned then failwith "an unaligned prefix is not allowed here" if prefixes.vol <> Nonvolatile then failwith "a volatile prefix is not allowed here" if prefixes.ro <> NormalAddress then failwith "a readonly prefix is not allowed here" mk (prefixes.constrained, prefixes.tl ) -let readonlyPrefix mk prefixes = +let readonlyPrefix mk prefixes = if prefixes.al <> Aligned then failwith "an unaligned prefix is not allowed here" if prefixes.vol <> Nonvolatile then failwith "a volatile prefix is not allowed here" if prefixes.tl <> Normalcall then failwith "a tailcall prefix is not allowed here" @@ -405,7 +449,7 @@ let readonlyPrefix mk prefixes = [] -type ILInstrDecoder = +type ILInstrDecoder = | I_u16_u8_instr of (ILInstrPrefixesRegister -> uint16 -> ILInstr) | I_u16_u16_instr of (ILInstrPrefixesRegister -> uint16 -> ILInstr) | I_none_instr of (ILInstrPrefixesRegister -> ILInstr) @@ -430,7 +474,7 @@ type ILInstrDecoder = let mkStind dt = volatileOrUnalignedPrefix (fun (x, y) -> I_stind(x, y, dt)) let mkLdind dt = volatileOrUnalignedPrefix (fun (x, y) -> I_ldind(x, y, dt)) -let instrs () = +let instrs () = [ i_ldarg_s, I_u16_u8_instr (noPrefixes mkLdarg) i_starg_s, I_u16_u8_instr (noPrefixes I_starg) i_ldarga_s, I_u16_u8_instr (noPrefixes I_ldarga) @@ -442,7 +486,7 @@ let instrs () = i_ldarga, I_u16_u16_instr (noPrefixes I_ldarga) i_stloc, I_u16_u16_instr (noPrefixes mkStloc) i_ldloc, I_u16_u16_instr (noPrefixes mkLdloc) - i_ldloca, I_u16_u16_instr (noPrefixes I_ldloca) + i_ldloca, I_u16_u16_instr (noPrefixes I_ldloca) i_stind_i, I_none_instr (mkStind DT_I) i_stind_i1, I_none_instr (mkStind DT_I1) i_stind_i2, I_none_instr (mkStind DT_I2) @@ -463,27 +507,27 @@ let instrs () = i_ldind_r8, I_none_instr (mkLdind DT_R8) i_ldind_ref, I_none_instr (mkLdind DT_REF) i_cpblk, I_none_instr (volatileOrUnalignedPrefix I_cpblk) - i_initblk, I_none_instr (volatileOrUnalignedPrefix I_initblk) - i_ldc_i8, I_i64_instr (noPrefixes (fun x ->(AI_ldc (DT_I8, ILConst.I8 x)))) + i_initblk, I_none_instr (volatileOrUnalignedPrefix I_initblk) + i_ldc_i8, I_i64_instr (noPrefixes (fun x ->(AI_ldc (DT_I8, ILConst.I8 x)))) i_ldc_i4, I_i32_i32_instr (noPrefixes mkLdcInt32) i_ldc_i4_s, I_i32_i8_instr (noPrefixes mkLdcInt32) - i_ldc_r4, I_r4_instr (noPrefixes (fun x -> (AI_ldc (DT_R4, ILConst.R4 x)))) + i_ldc_r4, I_r4_instr (noPrefixes (fun x -> (AI_ldc (DT_R4, ILConst.R4 x)))) i_ldc_r8, I_r8_instr (noPrefixes (fun x -> (AI_ldc (DT_R8, ILConst.R8 x)))) i_ldfld, I_field_instr (volatileOrUnalignedPrefix(fun (x, y) fspec -> I_ldfld (x, y, fspec))) i_stfld, I_field_instr (volatileOrUnalignedPrefix(fun (x, y) fspec -> I_stfld (x, y, fspec))) i_ldsfld, I_field_instr (volatilePrefix (fun x fspec -> I_ldsfld (x, fspec))) i_stsfld, I_field_instr (volatilePrefix (fun x fspec -> I_stsfld (x, fspec))) i_ldflda, I_field_instr (noPrefixes I_ldflda) - i_ldsflda, I_field_instr (noPrefixes I_ldsflda) + i_ldsflda, I_field_instr (noPrefixes I_ldsflda) i_call, I_method_instr (tailPrefix (fun tl (mspec, y) -> I_call (tl, mspec, y))) i_ldftn, I_method_instr (noPrefixes (fun (mspec, _y) -> I_ldftn mspec)) i_ldvirtftn, I_method_instr (noPrefixes (fun (mspec, _y) -> I_ldvirtftn mspec)) i_newobj, I_method_instr (noPrefixes I_newobj) - i_callvirt, I_method_instr (constraintOrTailPrefix (fun (c, tl) (mspec, y) -> match c with Some ty -> I_callconstraint(tl, ty, mspec, y) | None -> I_callvirt (tl, mspec, y))) + i_callvirt, I_method_instr (constraintOrTailPrefix (fun (c, tl) (mspec, y) -> match c with Some ty -> I_callconstraint(tl, ty, mspec, y) | None -> I_callvirt (tl, mspec, y))) i_leave_s, I_unconditional_i8_instr (noPrefixes (fun x -> I_leave x)) - i_br_s, I_unconditional_i8_instr (noPrefixes I_br) + i_br_s, I_unconditional_i8_instr (noPrefixes I_br) i_leave, I_unconditional_i32_instr (noPrefixes (fun x -> I_leave x)) - i_br, I_unconditional_i32_instr (noPrefixes I_br) + i_br, I_unconditional_i32_instr (noPrefixes I_br) i_brtrue_s, I_conditional_i8_instr (noPrefixes (fun x -> I_brcmp (BI_brtrue, x))) i_brfalse_s, I_conditional_i8_instr (noPrefixes (fun x -> I_brcmp (BI_brfalse, x))) i_beq_s, I_conditional_i8_instr (noPrefixes (fun x -> I_brcmp (BI_beq, x))) @@ -495,7 +539,7 @@ let instrs () = i_bgt_un_s, I_conditional_i8_instr (noPrefixes (fun x -> I_brcmp (BI_bgt_un, x))) i_bge_s, I_conditional_i8_instr (noPrefixes (fun x -> I_brcmp (BI_bge, x))) i_bge_un_s, I_conditional_i8_instr (noPrefixes (fun x -> I_brcmp (BI_bge_un, x))) - i_bne_un_s, I_conditional_i8_instr (noPrefixes (fun x -> I_brcmp (BI_bne_un, x))) + i_bne_un_s, I_conditional_i8_instr (noPrefixes (fun x -> I_brcmp (BI_bne_un, x))) i_brtrue, I_conditional_i32_instr (noPrefixes (fun x -> I_brcmp (BI_brtrue, x))) i_brfalse, I_conditional_i32_instr (noPrefixes (fun x -> I_brcmp (BI_brfalse, x))) i_beq, I_conditional_i32_instr (noPrefixes (fun x -> I_brcmp (BI_beq, x))) @@ -507,8 +551,8 @@ let instrs () = i_bgt_un, I_conditional_i32_instr (noPrefixes (fun x -> I_brcmp (BI_bgt_un, x))) i_bge, I_conditional_i32_instr (noPrefixes (fun x -> I_brcmp (BI_bge, x))) i_bge_un, I_conditional_i32_instr (noPrefixes (fun x -> I_brcmp (BI_bge_un, x))) - i_bne_un, I_conditional_i32_instr (noPrefixes (fun x -> I_brcmp (BI_bne_un, x))) - i_ldstr, I_string_instr (noPrefixes I_ldstr) + i_bne_un, I_conditional_i32_instr (noPrefixes (fun x -> I_brcmp (BI_bne_un, x))) + i_ldstr, I_string_instr (noPrefixes I_ldstr) i_switch, I_switch_instr (noPrefixes I_switch) i_ldtoken, I_tok_instr (noPrefixes I_ldtoken) i_calli, I_sig_instr (tailPrefix (fun tl (x, y) -> I_calli (tl, x, y))) @@ -517,7 +561,7 @@ let instrs () = i_ldelema, I_type_instr (readonlyPrefix (fun ro x -> I_ldelema (ro, false, ILArrayShape.SingleDimensional, x))) i_ldelem_any, I_type_instr (noPrefixes (fun x -> I_ldelem_any (ILArrayShape.SingleDimensional, x))) i_stelem_any, I_type_instr (noPrefixes (fun x -> I_stelem_any (ILArrayShape.SingleDimensional, x))) - i_newarr, I_type_instr (noPrefixes (fun x -> I_newarr (ILArrayShape.SingleDimensional, x))) + i_newarr, I_type_instr (noPrefixes (fun x -> I_newarr (ILArrayShape.SingleDimensional, x))) i_castclass, I_type_instr (noPrefixes I_castclass) i_isinst, I_type_instr (noPrefixes I_isinst) i_unbox_any, I_type_instr (noPrefixes I_unbox_any) @@ -527,72 +571,72 @@ let instrs () = i_stobj, I_type_instr (volatileOrUnalignedPrefix (fun (x, y) z -> I_stobj (x, y, z))) i_sizeof, I_type_instr (noPrefixes I_sizeof) i_box, I_type_instr (noPrefixes I_box) - i_unbox, I_type_instr (noPrefixes I_unbox) ] + i_unbox, I_type_instr (noPrefixes I_unbox) ] -// The tables are delayed to avoid building them unnecessarily at startup -// Many applications of AbsIL (e.g. a compiler) don't need to read instructions. +// The tables are delayed to avoid building them unnecessarily at startup +// Many applications of AbsIL (e.g. a compiler) don't need to read instructions. let oneByteInstrs = ref None let twoByteInstrs = ref None -let fillInstrs () = +let fillInstrs () = let oneByteInstrTable = Array.create 256 I_invalid_instr let twoByteInstrTable = Array.create 256 I_invalid_instr - let addInstr (i, f) = - if i > 0xff then - assert (i >>>& 8 = 0xfe) + let addInstr (i, f) = + if i > 0xff then + assert (i >>>& 8 = 0xfe) let i = (i &&& 0xff) match twoByteInstrTable.[i] with | I_invalid_instr -> () | _ -> dprintn ("warning: duplicate decode entries for "+string i) twoByteInstrTable.[i] <- f - else + else match oneByteInstrTable.[i] with | I_invalid_instr -> () | _ -> dprintn ("warning: duplicate decode entries for "+string i) - oneByteInstrTable.[i] <- f + oneByteInstrTable.[i] <- f List.iter addInstr (instrs()) List.iter (fun (x, mk) -> addInstr (x, I_none_instr (noPrefixes mk))) (noArgInstrs.Force()) oneByteInstrs := Some oneByteInstrTable twoByteInstrs := Some twoByteInstrTable -let rec getOneByteInstr i = - match !oneByteInstrs with +let rec getOneByteInstr i = + match !oneByteInstrs with | None -> fillInstrs(); getOneByteInstr i | Some t -> t.[i] -let rec getTwoByteInstr i = - match !twoByteInstrs with +let rec getTwoByteInstr i = + match !twoByteInstrs with | None -> fillInstrs(); getTwoByteInstr i | Some t -> t.[i] - + //--------------------------------------------------------------------- -// +// //--------------------------------------------------------------------- type ImageChunk = { size: int32; addr: int32 } -let chunk sz next = ({addr=next; size=sz}, next + sz) +let chunk sz next = ({addr=next; size=sz}, next + sz) let nochunk next = ({addr= 0x0;size= 0x0; }, next) -type RowElementKind = - | UShort - | ULong - | Byte - | Data - | GGuid - | Blob - | SString +type RowElementKind = + | UShort + | ULong + | Byte + | Data + | GGuid + | Blob + | SString | SimpleIndex of TableName | TypeDefOrRefOrSpec | TypeOrMethodDef - | HasConstant + | HasConstant | HasCustomAttribute - | HasFieldMarshal - | HasDeclSecurity - | MemberRefParent - | HasSemantics + | HasFieldMarshal + | HasDeclSecurity + | MemberRefParent + | HasSemantics | MethodDefOrRef | MemberForwarded - | Implementation + | Implementation | CustomAttributeType | ResolutionScope @@ -643,32 +687,32 @@ let kindIllegal = RowKind [ ] // kind of element in that column. //--------------------------------------------------------------------- -let hcCompare (TaggedIndex((t1: HasConstantTag), (idx1: int))) (TaggedIndex((t2: HasConstantTag), idx2)) = +let hcCompare (TaggedIndex((t1: HasConstantTag), (idx1: int))) (TaggedIndex((t2: HasConstantTag), idx2)) = if idx1 < idx2 then -1 elif idx1 > idx2 then 1 else compare t1.Tag t2.Tag -let hsCompare (TaggedIndex((t1: HasSemanticsTag), (idx1: int))) (TaggedIndex((t2: HasSemanticsTag), idx2)) = +let hsCompare (TaggedIndex((t1: HasSemanticsTag), (idx1: int))) (TaggedIndex((t2: HasSemanticsTag), idx2)) = if idx1 < idx2 then -1 elif idx1 > idx2 then 1 else compare t1.Tag t2.Tag -let hcaCompare (TaggedIndex((t1: HasCustomAttributeTag), (idx1: int))) (TaggedIndex((t2: HasCustomAttributeTag), idx2)) = +let hcaCompare (TaggedIndex((t1: HasCustomAttributeTag), (idx1: int))) (TaggedIndex((t2: HasCustomAttributeTag), idx2)) = if idx1 < idx2 then -1 elif idx1 > idx2 then 1 else compare t1.Tag t2.Tag -let mfCompare (TaggedIndex((t1: MemberForwardedTag), (idx1: int))) (TaggedIndex((t2: MemberForwardedTag), idx2)) = +let mfCompare (TaggedIndex((t1: MemberForwardedTag), (idx1: int))) (TaggedIndex((t2: MemberForwardedTag), idx2)) = if idx1 < idx2 then -1 elif idx1 > idx2 then 1 else compare t1.Tag t2.Tag -let hdsCompare (TaggedIndex((t1: HasDeclSecurityTag), (idx1: int))) (TaggedIndex((t2: HasDeclSecurityTag), idx2)) = +let hdsCompare (TaggedIndex((t1: HasDeclSecurityTag), (idx1: int))) (TaggedIndex((t2: HasDeclSecurityTag), idx2)) = if idx1 < idx2 then -1 elif idx1 > idx2 then 1 else compare t1.Tag t2.Tag -let hfmCompare (TaggedIndex((t1: HasFieldMarshalTag), idx1)) (TaggedIndex((t2: HasFieldMarshalTag), idx2)) = +let hfmCompare (TaggedIndex((t1: HasFieldMarshalTag), idx1)) (TaggedIndex((t2: HasFieldMarshalTag), idx2)) = if idx1 < idx2 then -1 elif idx1 > idx2 then 1 else compare t1.Tag t2.Tag -let tomdCompare (TaggedIndex((t1: TypeOrMethodDefTag), idx1)) (TaggedIndex((t2: TypeOrMethodDefTag), idx2)) = +let tomdCompare (TaggedIndex((t1: TypeOrMethodDefTag), idx1)) (TaggedIndex((t2: TypeOrMethodDefTag), idx2)) = if idx1 < idx2 then -1 elif idx1 > idx2 then 1 else compare t1.Tag t2.Tag -let simpleIndexCompare (idx1: int) (idx2: int) = +let simpleIndexCompare (idx1: int) (idx2: int) = compare idx1 idx2 //--------------------------------------------------------------------- -// The various keys for the various caches. +// The various keys for the various caches. //--------------------------------------------------------------------- type TypeDefAsTypIdx = TypeDefAsTypIdx of ILBoxity * ILGenericArgs * int @@ -689,37 +733,37 @@ type GenericParamsIdx = GenericParamsIdx of numtypars: int * TypeOrMethodDefTag let mkCacheInt32 lowMem _inbase _nm _sz = if lowMem then (fun f x -> f x) else - let cache = ref null + let cache = ref null let count = ref 0 #if STATISTICS addReport (fun oc -> if !count <> 0 then oc.WriteLine ((_inbase + string !count + " "+ _nm + " cache hits"): string)) #endif fun f (idx: int32) -> - let cache = + let cache = match !cache with | null -> cache := new ConcurrentDictionary(Environment.ProcessorCount, 11) | _ -> () !cache match cache.TryGetValue idx with | true, res -> - incr count + incr count res | _ -> - let res = f idx - cache.[idx] <- res - res + let res = f idx + cache.[idx] <- res + res let mkCacheGeneric lowMem _inbase _nm _sz = if lowMem then (fun f x -> f x) else - let cache = ref null + let cache = ref null let count = ref 0 #if STATISTICS addReport (fun oc -> if !count <> 0 then oc.WriteLine ((_inbase + string !count + " " + _nm + " cache hits"): string)) #endif fun f (idx :'T) -> - let cache = + let cache = match !cache with - | null -> cache := new ConcurrentDictionary<_, _>(Environment.ProcessorCount, 11 (* sz: int *) ) + | null -> cache := new ConcurrentDictionary<_, _>(Environment.ProcessorCount, 11 (* sz: int *) ) | _ -> () !cache match cache.TryGetValue idx with @@ -737,96 +781,96 @@ let mkCacheGeneric lowMem _inbase _nm _sz = let seekFindRow numRows rowChooser = let mutable i = 1 - while (i <= numRows && not (rowChooser i)) do + while (i <= numRows && not (rowChooser i)) do i <- i + 1 if i > numRows then dprintn "warning: seekFindRow: row not found" - i + i -// search for rows satisfying predicate +// search for rows satisfying predicate let seekReadIndexedRows (numRows, rowReader, keyFunc, keyComparer, binaryChop, rowConverter) = if binaryChop then let mutable low = 0 let mutable high = numRows + 1 - begin + begin let mutable fin = false - while not fin do - if high - low <= 1 then - fin <- true - else + while not fin do + if high - low <= 1 then + fin <- true + else let mid = (low + high) / 2 let midrow = rowReader mid let c = keyComparer (keyFunc midrow) - if c > 0 then + if c > 0 then low <- mid - elif c < 0 then - high <- mid - else + elif c < 0 then + high <- mid + else fin <- true end let mutable res = [] - if high - low > 1 then - // now read off rows, forward and backwards + if high - low > 1 then + // now read off rows, forward and backwards let mid = (low + high) / 2 - // read forward + // read forward let mutable fin = false let mutable curr = mid - while not fin do - if curr > numRows then + while not fin do + if curr > numRows then fin <- true - else + else let currrow = rowReader curr - if keyComparer (keyFunc currrow) = 0 then + if keyComparer (keyFunc currrow) = 0 then res <- rowConverter currrow :: res - else + else fin <- true curr <- curr + 1 res <- List.rev res - // read backwards + // read backwards let mutable fin = false let mutable curr = mid - 1 - while not fin do - if curr = 0 then + while not fin do + if curr = 0 then fin <- true - else + else let currrow = rowReader curr - if keyComparer (keyFunc currrow) = 0 then + if keyComparer (keyFunc currrow) = 0 then res <- rowConverter currrow :: res - else + else fin <- true curr <- curr - 1 - // sanity check + // sanity check #if CHECKING - if checking then - let res2 = + if checking then + let res2 = [ for i = 1 to numRows do let rowinfo = rowReader i - if keyComparer (keyFunc rowinfo) = 0 then + if keyComparer (keyFunc rowinfo) = 0 then yield rowConverter rowinfo ] - if (res2 <> res) then + if (res2 <> res) then failwith ("results of binary search did not match results of linear search: linear search produced "+string res2.Length+", binary search produced "+string res.Length) #endif - + res - else + else let res = ref [] for i = 1 to numRows do let rowinfo = rowReader i - if keyComparer (keyFunc rowinfo) = 0 then + if keyComparer (keyFunc rowinfo) = 0 then res := rowConverter rowinfo :: !res List.rev !res let seekReadOptionalIndexedRow info = - match seekReadIndexedRows info with + match seekReadIndexedRows info with | [k] -> Some k | [] -> None - | h :: _ -> - dprintn ("multiple rows found when indexing table") - Some h - + | h :: _ -> + dprintn ("multiple rows found when indexing table") + Some h + let seekReadIndexedRow info = - match seekReadOptionalIndexedRow info with + match seekReadOptionalIndexedRow info with | Some row -> row | None -> failwith ("no row found for key when indexing table") @@ -838,7 +882,7 @@ type MethodData = MethodData of enclTy: ILType * ILCallingConv * name: string * type VarArgMethodData = VarArgMethodData of enclTy: ILType * ILCallingConv * name: string * argtys: ILTypes * ILVarArgs * retty: ILType * minst: ILTypes [] -type PEReader = +type PEReader = { fileName: string #if FX_NO_PDB_READER pdb: obj option @@ -847,7 +891,7 @@ type PEReader = #endif entryPointToken: TableName * int pefile: BinaryFile - textSegmentPhysicalLoc: int32 + textSegmentPhysicalLoc: int32 textSegmentPhysicalSize: int32 dataSegmentPhysicalLoc: int32 dataSegmentPhysicalSize: int32 @@ -863,14 +907,14 @@ type PEReader = } [] -type ILMetadataReader = +type ILMetadataReader = { sorted: int64 mdfile: BinaryFile pectxtCaptured: PEReader option // only set when reading full PE including code etc. for static linking entryPointToken: TableName * int dataEndPoints: Lazy fileName: string - getNumRows: TableName -> int + getNumRows: TableName -> int userStringsStreamPhysicalLoc: int32 stringsStreamPhysicalLoc: int32 blobsStreamPhysicalLoc: int32 @@ -882,22 +926,22 @@ type ILMetadataReader = guidsStreamPhysicalLoc: int32 rowAddr: (TableName -> int -> int32) tableBigness: bool [] - rsBigness: bool + rsBigness: bool tdorBigness: bool - tomdBigness: bool - hcBigness: bool - hcaBigness: bool - hfmBigness: bool - hdsBigness: bool - mrpBigness: bool - hsBigness: bool - mdorBigness: bool - mfBigness: bool - iBigness: bool - catBigness: bool - stringsBigness: bool - guidsBigness: bool - blobsBigness: bool + tomdBigness: bool + hcBigness: bool + hcaBigness: bool + hfmBigness: bool + hdsBigness: bool + mrpBigness: bool + hsBigness: bool + mdorBigness: bool + mfBigness: bool + iBigness: bool + catBigness: bool + stringsBigness: bool + guidsBigness: bool + blobsBigness: bool seekReadNestedRow: int -> int * int seekReadConstantRow: int -> uint16 * TaggedIndex * int32 seekReadMethodSemanticsRow: int -> int32 * int * TaggedIndex @@ -911,7 +955,7 @@ type ILMetadataReader = seekReadTypeRefAsType: TypeRefAsTypIdx -> ILType readBlobHeapAsPropertySig: BlobAsPropSigIdx -> ILThisConvention * ILType * ILTypes readBlobHeapAsFieldSig: BlobAsFieldSigIdx -> ILType - readBlobHeapAsMethodSig: BlobAsMethodSigIdx -> bool * int32 * ILCallingConv * ILType * ILTypes * ILVarArgs + readBlobHeapAsMethodSig: BlobAsMethodSigIdx -> bool * int32 * ILCallingConv * ILType * ILTypes * ILVarArgs readBlobHeapAsLocalsSig: BlobAsLocalSigIdx -> ILLocal list seekReadTypeDefAsType: TypeDefAsTypIdx -> ILType seekReadMethodDefAsMethodData: int -> MethodData @@ -946,61 +990,61 @@ let seekReadIndexedRowsByInterface numRows binaryChop (reader: ISeekReadIndexedR let mutable high = numRows + 1 let mutable fin = false - while not fin do - if high - low <= 1 then - fin <- true - else + while not fin do + if high - low <= 1 then + fin <- true + else let mid = (low + high) / 2 reader.GetRow(mid, &row) let c = reader.CompareKey(reader.GetKey(&row)) - if c > 0 then + if c > 0 then low <- mid - elif c < 0 then - high <- mid - else + elif c < 0 then + high <- mid + else fin <- true let res = ImmutableArray.CreateBuilder() - if high - low > 1 then - // now read off rows, forward and backwards + if high - low > 1 then + // now read off rows, forward and backwards let mid = (low + high) / 2 - // read backwards + // read backwards let mutable fin = false let mutable curr = mid - 1 - while not fin do - if curr = 0 then + while not fin do + if curr = 0 then fin <- true - else + else reader.GetRow(curr, &row) if reader.CompareKey(reader.GetKey(&row)) = 0 then res.Add(reader.ConvertRow(&row)) - else + else fin <- true curr <- curr - 1 res.Reverse() - // read forward + // read forward let mutable fin = false let mutable curr = mid - while not fin do - if curr > numRows then + while not fin do + if curr > numRows then fin <- true - else + else reader.GetRow(curr, &row) if reader.CompareKey(reader.GetKey(&row)) = 0 then res.Add(reader.ConvertRow(&row)) - else + else fin <- true curr <- curr + 1 res.ToArray() - else + else let res = ImmutableArray.CreateBuilder() for i = 1 to numRows do reader.GetRow(i, &row) - if reader.CompareKey(reader.GetKey(&row)) = 0 then + if reader.CompareKey(reader.GetKey(&row)) = 0 then res.Add(reader.ConvertRow(&row)) res.ToArray() @@ -1010,35 +1054,35 @@ type CustomAttributeRow = val mutable typeIndex: TaggedIndex val mutable valueIndex: int -let seekReadUInt16Adv mdv (addr: byref) = +let seekReadUInt16Adv mdv (addr: byref) = let res = seekReadUInt16 mdv addr addr <- addr + 2 res -let seekReadInt32Adv mdv (addr: byref) = +let seekReadInt32Adv mdv (addr: byref) = let res = seekReadInt32 mdv addr addr <- addr+4 res -let seekReadUInt16AsInt32Adv mdv (addr: byref) = +let seekReadUInt16AsInt32Adv mdv (addr: byref) = let res = seekReadUInt16AsInt32 mdv addr addr <- addr+2 res -let inline seekReadTaggedIdx f nbits big mdv (addr: byref) = - let tok = if big then seekReadInt32Adv mdv &addr else seekReadUInt16AsInt32Adv mdv &addr +let inline seekReadTaggedIdx f nbits big mdv (addr: byref) = + let tok = if big then seekReadInt32Adv mdv &addr else seekReadUInt16AsInt32Adv mdv &addr tokToTaggedIdx f nbits tok -let seekReadIdx big mdv (addr: byref) = +let seekReadIdx big mdv (addr: byref) = if big then seekReadInt32Adv mdv &addr else seekReadUInt16AsInt32Adv mdv &addr -let seekReadUntaggedIdx (tab: TableName) (ctxt: ILMetadataReader) mdv (addr: byref) = +let seekReadUntaggedIdx (tab: TableName) (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadIdx ctxt.tableBigness.[tab.Index] mdv &addr let seekReadResolutionScopeIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkResolutionScopeTag 2 ctxt.rsBigness mdv &addr -let seekReadTypeDefOrRefOrSpecIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkTypeDefOrRefOrSpecTag 2 ctxt.tdorBigness mdv &addr +let seekReadTypeDefOrRefOrSpecIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkTypeDefOrRefOrSpecTag 2 ctxt.tdorBigness mdv &addr let seekReadTypeOrMethodDefIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkTypeOrMethodDefTag 1 ctxt.tomdBigness mdv &addr -let seekReadHasConstantIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkHasConstantTag 2 ctxt.hcBigness mdv &addr +let seekReadHasConstantIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkHasConstantTag 2 ctxt.hcBigness mdv &addr let seekReadHasCustomAttributeIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkHasCustomAttributeTag 5 ctxt.hcaBigness mdv &addr let seekReadHasFieldMarshalIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkHasFieldMarshalTag 1 ctxt.hfmBigness mdv &addr let seekReadHasDeclSecurityIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkHasDeclSecurityTag 2 ctxt.hdsBigness mdv &addr @@ -1047,10 +1091,10 @@ let seekReadHasSemanticsIdx (ctxt: ILMetadataReader) mdv (addr: byref) = se let seekReadMethodDefOrRefIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkMethodDefOrRefTag 1 ctxt.mdorBigness mdv &addr let seekReadMemberForwardedIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkMemberForwardedTag 1 ctxt.mfBigness mdv &addr let seekReadImplementationIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkImplementationTag 2 ctxt.iBigness mdv &addr -let seekReadCustomAttributeTypeIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkILCustomAttributeTypeTag 3 ctxt.catBigness mdv &addr +let seekReadCustomAttributeTypeIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadTaggedIdx mkILCustomAttributeTypeTag 3 ctxt.catBigness mdv &addr let seekReadStringIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadIdx ctxt.stringsBigness mdv &addr let seekReadGuidIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadIdx ctxt.guidsBigness mdv &addr -let seekReadBlobIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadIdx ctxt.blobsBigness mdv &addr +let seekReadBlobIdx (ctxt: ILMetadataReader) mdv (addr: byref) = seekReadIdx ctxt.blobsBigness mdv &addr let seekReadModuleRow (ctxt: ILMetadataReader) mdv idx = if idx = 0 then failwith "cannot read Module table row 0" @@ -1060,7 +1104,7 @@ let seekReadModuleRow (ctxt: ILMetadataReader) mdv idx = let mvidIdx = seekReadGuidIdx ctxt mdv &addr let encidIdx = seekReadGuidIdx ctxt mdv &addr let encbaseidIdx = seekReadGuidIdx ctxt mdv &addr - (generation, nameIdx, mvidIdx, encidIdx, encbaseidIdx) + (generation, nameIdx, mvidIdx, encidIdx, encbaseidIdx) /// Read Table ILTypeRef. let seekReadTypeRefRow (ctxt: ILMetadataReader) mdv idx = @@ -1068,7 +1112,7 @@ let seekReadTypeRefRow (ctxt: ILMetadataReader) mdv idx = let scopeIdx = seekReadResolutionScopeIdx ctxt mdv &addr let nameIdx = seekReadStringIdx ctxt mdv &addr let namespaceIdx = seekReadStringIdx ctxt mdv &addr - (scopeIdx, nameIdx, namespaceIdx) + (scopeIdx, nameIdx, namespaceIdx) /// Read Table ILTypeDef. let seekReadTypeDefRow (ctxt: ILMetadataReader) idx = ctxt.seekReadTypeDefRow idx @@ -1082,7 +1126,7 @@ let seekReadTypeDefRowUncached ctxtH idx = let extendsIdx = seekReadTypeDefOrRefOrSpecIdx ctxt mdv &addr let fieldsIdx = seekReadUntaggedIdx TableNames.Field ctxt mdv &addr let methodsIdx = seekReadUntaggedIdx TableNames.Method ctxt mdv &addr - (flags, nameIdx, namespaceIdx, extendsIdx, fieldsIdx, methodsIdx) + (flags, nameIdx, namespaceIdx, extendsIdx, fieldsIdx, methodsIdx) /// Read Table Field. let seekReadFieldRow (ctxt: ILMetadataReader) mdv idx = @@ -1090,7 +1134,7 @@ let seekReadFieldRow (ctxt: ILMetadataReader) mdv idx = let flags = seekReadUInt16AsInt32Adv mdv &addr let nameIdx = seekReadStringIdx ctxt mdv &addr let typeIdx = seekReadBlobIdx ctxt mdv &addr - (flags, nameIdx, typeIdx) + (flags, nameIdx, typeIdx) /// Read Table Method. let seekReadMethodRow (ctxt: ILMetadataReader) mdv idx = @@ -1101,7 +1145,7 @@ let seekReadMethodRow (ctxt: ILMetadataReader) mdv idx = let nameIdx = seekReadStringIdx ctxt mdv &addr let typeIdx = seekReadBlobIdx ctxt mdv &addr let paramIdx = seekReadUntaggedIdx TableNames.Param ctxt mdv &addr - (codeRVA, implflags, flags, nameIdx, typeIdx, paramIdx) + (codeRVA, implflags, flags, nameIdx, typeIdx, paramIdx) /// Read Table Param. let seekReadParamRow (ctxt: ILMetadataReader) mdv idx = @@ -1109,10 +1153,10 @@ let seekReadParamRow (ctxt: ILMetadataReader) mdv idx = let flags = seekReadUInt16AsInt32Adv mdv &addr let seq = seekReadUInt16AsInt32Adv mdv &addr let nameIdx = seekReadStringIdx ctxt mdv &addr - (flags, seq, nameIdx) + (flags, seq, nameIdx) /// Read Table InterfaceImpl. -let seekReadInterfaceImplRow (ctxt: ILMetadataReader) mdv idx = +let seekReadInterfaceImplRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.InterfaceImpl idx let tidx = seekReadUntaggedIdx TableNames.TypeDef ctxt mdv &addr let intfIdx = seekReadTypeDefOrRefOrSpecIdx ctxt mdv &addr @@ -1124,7 +1168,7 @@ let seekReadMemberRefRow (ctxt: ILMetadataReader) mdv idx = let mrpIdx = seekReadMemberRefParentIdx ctxt mdv &addr let nameIdx = seekReadStringIdx ctxt mdv &addr let typeIdx = seekReadBlobIdx ctxt mdv &addr - (mrpIdx, nameIdx, typeIdx) + (mrpIdx, nameIdx, typeIdx) /// Read Table Constant. let seekReadConstantRow (ctxt: ILMetadataReader) idx = ctxt.seekReadConstantRow idx @@ -1145,7 +1189,7 @@ let seekReadCustomAttributeRow (ctxt: ILMetadataReader) mdv idx (attrRow: byref< attrRow.valueIndex <- seekReadBlobIdx ctxt mdv &addr /// Read Table FieldMarshal. -let seekReadFieldMarshalRow (ctxt: ILMetadataReader) mdv idx = +let seekReadFieldMarshalRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.FieldMarshal idx let parentIdx = seekReadHasFieldMarshalIdx ctxt mdv &addr let typeIdx = seekReadBlobIdx ctxt mdv &addr @@ -1157,58 +1201,58 @@ let seekReadPermissionRow (ctxt: ILMetadataReader) mdv idx = let action = seekReadUInt16Adv mdv &addr let parentIdx = seekReadHasDeclSecurityIdx ctxt mdv &addr let typeIdx = seekReadBlobIdx ctxt mdv &addr - (action, parentIdx, typeIdx) + (action, parentIdx, typeIdx) -/// Read Table ClassLayout. +/// Read Table ClassLayout. let seekReadClassLayoutRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.ClassLayout idx let pack = seekReadUInt16Adv mdv &addr let size = seekReadInt32Adv mdv &addr let tidx = seekReadUntaggedIdx TableNames.TypeDef ctxt mdv &addr - (pack, size, tidx) + (pack, size, tidx) -/// Read Table FieldLayout. +/// Read Table FieldLayout. let seekReadFieldLayoutRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.FieldLayout idx let offset = seekReadInt32Adv mdv &addr let fidx = seekReadUntaggedIdx TableNames.Field ctxt mdv &addr - (offset, fidx) + (offset, fidx) -//// Read Table StandAloneSig. +//// Read Table StandAloneSig. let seekReadStandAloneSigRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.StandAloneSig idx let sigIdx = seekReadBlobIdx ctxt mdv &addr sigIdx -/// Read Table EventMap. +/// Read Table EventMap. let seekReadEventMapRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.EventMap idx let tidx = seekReadUntaggedIdx TableNames.TypeDef ctxt mdv &addr let eventsIdx = seekReadUntaggedIdx TableNames.Event ctxt mdv &addr - (tidx, eventsIdx) + (tidx, eventsIdx) -/// Read Table Event. +/// Read Table Event. let seekReadEventRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.Event idx let flags = seekReadUInt16AsInt32Adv mdv &addr let nameIdx = seekReadStringIdx ctxt mdv &addr let typIdx = seekReadTypeDefOrRefOrSpecIdx ctxt mdv &addr - (flags, nameIdx, typIdx) - -/// Read Table PropertyMap. -let seekReadPropertyMapRow (ctxt: ILMetadataReader) mdv idx = + (flags, nameIdx, typIdx) + +/// Read Table PropertyMap. +let seekReadPropertyMapRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.PropertyMap idx let tidx = seekReadUntaggedIdx TableNames.TypeDef ctxt mdv &addr let propsIdx = seekReadUntaggedIdx TableNames.Property ctxt mdv &addr (tidx, propsIdx) -/// Read Table Property. +/// Read Table Property. let seekReadPropertyRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.Property idx let flags = seekReadUInt16AsInt32Adv mdv &addr let nameIdx = seekReadStringIdx ctxt mdv &addr let typIdx = seekReadBlobIdx ctxt mdv &addr - (flags, nameIdx, typIdx) + (flags, nameIdx, typIdx) /// Read Table MethodSemantics. let seekReadMethodSemanticsRow (ctxt: ILMetadataReader) idx = ctxt.seekReadMethodSemanticsRow idx @@ -1227,19 +1271,19 @@ let seekReadMethodImplRow (ctxt: ILMetadataReader) mdv idx = let tidx = seekReadUntaggedIdx TableNames.TypeDef ctxt mdv &addr let mbodyIdx = seekReadMethodDefOrRefIdx ctxt mdv &addr let mdeclIdx = seekReadMethodDefOrRefIdx ctxt mdv &addr - (tidx, mbodyIdx, mdeclIdx) + (tidx, mbodyIdx, mdeclIdx) /// Read Table ILModuleRef. let seekReadModuleRefRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.ModuleRef idx let nameIdx = seekReadStringIdx ctxt mdv &addr - nameIdx + nameIdx /// Read Table ILTypeSpec. let seekReadTypeSpecRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.TypeSpec idx let blobIdx = seekReadBlobIdx ctxt mdv &addr - blobIdx + blobIdx /// Read Table ImplMap. let seekReadImplMapRow (ctxt: ILMetadataReader) mdv idx = @@ -1248,14 +1292,14 @@ let seekReadImplMapRow (ctxt: ILMetadataReader) mdv idx = let forwrdedIdx = seekReadMemberForwardedIdx ctxt mdv &addr let nameIdx = seekReadStringIdx ctxt mdv &addr let scopeIdx = seekReadUntaggedIdx TableNames.ModuleRef ctxt mdv &addr - (flags, forwrdedIdx, nameIdx, scopeIdx) + (flags, forwrdedIdx, nameIdx, scopeIdx) /// Read Table FieldRVA. let seekReadFieldRVARow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.FieldRVA idx let rva = seekReadInt32Adv mdv &addr let fidx = seekReadUntaggedIdx TableNames.Field ctxt mdv &addr - (rva, fidx) + (rva, fidx) /// Read Table Assembly. let seekReadAssemblyRow (ctxt: ILMetadataReader) mdv idx = @@ -1283,7 +1327,7 @@ let seekReadAssemblyRefRow (ctxt: ILMetadataReader) mdv idx = let nameIdx = seekReadStringIdx ctxt mdv &addr let localeIdx = seekReadStringIdx ctxt mdv &addr let hashValueIdx = seekReadBlobIdx ctxt mdv &addr - (v1, v2, v3, v4, flags, publicKeyOrTokenIdx, nameIdx, localeIdx, hashValueIdx) + (v1, v2, v3, v4, flags, publicKeyOrTokenIdx, nameIdx, localeIdx, hashValueIdx) /// Read Table File. let seekReadFileRow (ctxt: ILMetadataReader) mdv idx = @@ -1291,7 +1335,7 @@ let seekReadFileRow (ctxt: ILMetadataReader) mdv idx = let flags = seekReadInt32Adv mdv &addr let nameIdx = seekReadStringIdx ctxt mdv &addr let hashValueIdx = seekReadBlobIdx ctxt mdv &addr - (flags, nameIdx, hashValueIdx) + (flags, nameIdx, hashValueIdx) /// Read Table ILExportedTypeOrForwarder. let seekReadExportedTypeRow (ctxt: ILMetadataReader) mdv idx = @@ -1301,7 +1345,7 @@ let seekReadExportedTypeRow (ctxt: ILMetadataReader) mdv idx = let nameIdx = seekReadStringIdx ctxt mdv &addr let namespaceIdx = seekReadStringIdx ctxt mdv &addr let implIdx = seekReadImplementationIdx ctxt mdv &addr - (flags, tok, nameIdx, namespaceIdx, implIdx) + (flags, tok, nameIdx, namespaceIdx, implIdx) /// Read Table ManifestResource. let seekReadManifestResourceRow (ctxt: ILMetadataReader) mdv idx = @@ -1310,7 +1354,7 @@ let seekReadManifestResourceRow (ctxt: ILMetadataReader) mdv idx = let flags = seekReadInt32Adv mdv &addr let nameIdx = seekReadStringIdx ctxt mdv &addr let implIdx = seekReadImplementationIdx ctxt mdv &addr - (offset, flags, nameIdx, implIdx) + (offset, flags, nameIdx, implIdx) /// Read Table Nested. let seekReadNestedRow (ctxt: ILMetadataReader) idx = ctxt.seekReadNestedRow idx @@ -1329,90 +1373,88 @@ let seekReadGenericParamRow (ctxt: ILMetadataReader) mdv idx = let flags = seekReadUInt16Adv mdv &addr let ownerIdx = seekReadTypeOrMethodDefIdx ctxt mdv &addr let nameIdx = seekReadStringIdx ctxt mdv &addr - (idx, seq, flags, ownerIdx, nameIdx) + (idx, seq, flags, ownerIdx, nameIdx) // Read Table GenericParamConstraint. let seekReadGenericParamConstraintRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.GenericParamConstraint idx let pidx = seekReadUntaggedIdx TableNames.GenericParam ctxt mdv &addr let constraintIdx = seekReadTypeDefOrRefOrSpecIdx ctxt mdv &addr - (pidx, constraintIdx) + (pidx, constraintIdx) /// Read Table ILMethodSpec. let seekReadMethodSpecRow (ctxt: ILMetadataReader) mdv idx = let mutable addr = ctxt.rowAddr TableNames.MethodSpec idx let mdorIdx = seekReadMethodDefOrRefIdx ctxt mdv &addr let instIdx = seekReadBlobIdx ctxt mdv &addr - (mdorIdx, instIdx) + (mdorIdx, instIdx) -let readUserStringHeapUncached ctxtH idx = +let readUserStringHeapUncached ctxtH idx = let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() seekReadUserString mdv (ctxt.userStringsStreamPhysicalLoc + idx) -let readUserStringHeap (ctxt: ILMetadataReader) idx = ctxt.readUserStringHeap idx +let readUserStringHeap (ctxt: ILMetadataReader) idx = ctxt.readUserStringHeap idx -let readStringHeapUncached ctxtH idx = +let readStringHeapUncached ctxtH idx = let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() - seekReadUTF8String mdv (ctxt.stringsStreamPhysicalLoc + idx) - -let readStringHeap (ctxt: ILMetadataReader) idx = ctxt.readStringHeap idx + seekReadUTF8String mdv (ctxt.stringsStreamPhysicalLoc + idx) -let readStringHeapOption (ctxt: ILMetadataReader) idx = if idx = 0 then None else Some (readStringHeap ctxt idx) +let readStringHeap (ctxt: ILMetadataReader) idx = ctxt.readStringHeap idx -let emptyByteArray: byte[] = [||] +let readStringHeapOption (ctxt: ILMetadataReader) idx = if idx = 0 then None else Some (readStringHeap ctxt idx) -let readBlobHeapUncached ctxtH idx = +let readBlobHeapUncached ctxtH idx = let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() // valid index lies in range [1..streamSize) // NOTE: idx cannot be 0 - Blob\String heap has first empty element that mdv one byte 0 - if idx <= 0 || idx >= ctxt.blobsStreamSize then emptyByteArray - else seekReadBlob mdv (ctxt.blobsStreamPhysicalLoc + idx) - -let readBlobHeap (ctxt: ILMetadataReader) idx = ctxt.readBlobHeap idx - -let readBlobHeapOption ctxt idx = if idx = 0 then None else Some (readBlobHeap ctxt idx) - -//let readGuidHeap ctxt idx = seekReadGuid ctxt.mdv (ctxt.guidsStreamPhysicalLoc + idx) - -// read a single value out of a blob heap using the given function -let readBlobHeapAsBool ctxt vidx = fst (sigptrGetBool (readBlobHeap ctxt vidx) 0) -let readBlobHeapAsSByte ctxt vidx = fst (sigptrGetSByte (readBlobHeap ctxt vidx) 0) -let readBlobHeapAsInt16 ctxt vidx = fst (sigptrGetInt16 (readBlobHeap ctxt vidx) 0) -let readBlobHeapAsInt32 ctxt vidx = fst (sigptrGetInt32 (readBlobHeap ctxt vidx) 0) -let readBlobHeapAsInt64 ctxt vidx = fst (sigptrGetInt64 (readBlobHeap ctxt vidx) 0) -let readBlobHeapAsByte ctxt vidx = fst (sigptrGetByte (readBlobHeap ctxt vidx) 0) -let readBlobHeapAsUInt16 ctxt vidx = fst (sigptrGetUInt16 (readBlobHeap ctxt vidx) 0) -let readBlobHeapAsUInt32 ctxt vidx = fst (sigptrGetUInt32 (readBlobHeap ctxt vidx) 0) -let readBlobHeapAsUInt64 ctxt vidx = fst (sigptrGetUInt64 (readBlobHeap ctxt vidx) 0) -let readBlobHeapAsSingle ctxt vidx = fst (sigptrGetSingle (readBlobHeap ctxt vidx) 0) -let readBlobHeapAsDouble ctxt vidx = fst (sigptrGetDouble (readBlobHeap ctxt vidx) 0) - + if idx <= 0 || idx >= ctxt.blobsStreamSize then [| |] + else seekReadBlob mdv (ctxt.blobsStreamPhysicalLoc + idx) + +let readBlobHeap (ctxt: ILMetadataReader) idx = ctxt.readBlobHeap idx + +let readBlobHeapOption ctxt idx = if idx = 0 then None else Some (readBlobHeap ctxt idx) + +//let readGuidHeap ctxt idx = seekReadGuid ctxt.mdv (ctxt.guidsStreamPhysicalLoc + idx) + +// read a single value out of a blob heap using the given function +let readBlobHeapAsBool ctxt vidx = fst (sigptrGetBool (readBlobHeap ctxt vidx) 0) +let readBlobHeapAsSByte ctxt vidx = fst (sigptrGetSByte (readBlobHeap ctxt vidx) 0) +let readBlobHeapAsInt16 ctxt vidx = fst (sigptrGetInt16 (readBlobHeap ctxt vidx) 0) +let readBlobHeapAsInt32 ctxt vidx = fst (sigptrGetInt32 (readBlobHeap ctxt vidx) 0) +let readBlobHeapAsInt64 ctxt vidx = fst (sigptrGetInt64 (readBlobHeap ctxt vidx) 0) +let readBlobHeapAsByte ctxt vidx = fst (sigptrGetByte (readBlobHeap ctxt vidx) 0) +let readBlobHeapAsUInt16 ctxt vidx = fst (sigptrGetUInt16 (readBlobHeap ctxt vidx) 0) +let readBlobHeapAsUInt32 ctxt vidx = fst (sigptrGetUInt32 (readBlobHeap ctxt vidx) 0) +let readBlobHeapAsUInt64 ctxt vidx = fst (sigptrGetUInt64 (readBlobHeap ctxt vidx) 0) +let readBlobHeapAsSingle ctxt vidx = fst (sigptrGetSingle (readBlobHeap ctxt vidx) 0) +let readBlobHeapAsDouble ctxt vidx = fst (sigptrGetDouble (readBlobHeap ctxt vidx) 0) + //----------------------------------------------------------------------- -// Some binaries have raw data embedded their text sections, e.g. mscorlib, for -// field inits. And there is no information that definitively tells us the extent of -// the text section that may be interesting data. But we certainly don't want to duplicate -// the entire text section as data! -// -// So, we assume: -// 1. no part of the metadata is double-used for raw data -// 2. the data bits are all the bits of the text section -// that stretch from a Field or Resource RVA to one of -// (a) the next Field or resource RVA -// (b) a MethodRVA -// (c) the start of the metadata -// (d) the end of a section +// Some binaries have raw data embedded their text sections, e.g. mscorlib, for +// field inits. And there is no information that definitively tells us the extent of +// the text section that may be interesting data. But we certainly don't want to duplicate +// the entire text section as data! +// +// So, we assume: +// 1. no part of the metadata is double-used for raw data +// 2. the data bits are all the bits of the text section +// that stretch from a Field or Resource RVA to one of +// (a) the next Field or resource RVA +// (b) a MethodRVA +// (c) the start of the metadata +// (d) the end of a section // (e) the start of the native resources attached to the binary if any // ----------------------------------------------------------------------*) // noFileOnDisk indicates that the PE file was read from Memory using OpenILModuleReaderFromBytes // For example the assembly came from a type provider // In this case we eagerly read the native resources into memory -let readNativeResources (pectxt: PEReader) = - [ if pectxt.nativeResourcesSize <> 0x0 && pectxt.nativeResourcesAddr <> 0x0 then +let readNativeResources (pectxt: PEReader) = + [ if pectxt.nativeResourcesSize <> 0x0 && pectxt.nativeResourcesAddr <> 0x0 then let start = pectxt.anyV2P (pectxt.fileName + ": native resources", pectxt.nativeResourcesAddr) if pectxt.noFileOnDisk then let unlinkedResource = @@ -1423,36 +1465,36 @@ let readNativeResources (pectxt: PEReader) = yield ILNativeResource.In (pectxt.fileName, pectxt.nativeResourcesAddr, start, pectxt.nativeResourcesSize ) ] -let getDataEndPointsDelayed (pectxt: PEReader) ctxtH = +let getDataEndPointsDelayed (pectxt: PEReader) ctxtH = lazy let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() - let dataStartPoints = + let dataStartPoints = let res = ref [] for i = 1 to ctxt.getNumRows TableNames.FieldRVA do let rva, _fidx = seekReadFieldRVARow ctxt mdv i res := ("field", rva) :: !res for i = 1 to ctxt.getNumRows TableNames.ManifestResource do let (offset, _, _, TaggedIndex(_tag, idx)) = seekReadManifestResourceRow ctxt mdv i - if idx = 0 then + if idx = 0 then let rva = pectxt.resourcesAddr + offset res := ("manifest resource", rva) :: !res !res - if isNil dataStartPoints then [] + if isNil dataStartPoints then [] else - let methodRVAs = + let methodRVAs = let res = ref [] for i = 1 to ctxt.getNumRows TableNames.Method do let (rva, _, _, nameIdx, _, _) = seekReadMethodRow ctxt mdv i - if rva <> 0 then + if rva <> 0 then let nm = readStringHeap ctxt nameIdx res := (nm, rva) :: !res !res - ([ pectxt.textSegmentPhysicalLoc + pectxt.textSegmentPhysicalSize - pectxt.dataSegmentPhysicalLoc + pectxt.dataSegmentPhysicalSize ] - @ - (List.map pectxt.anyV2P - (dataStartPoints + ([ pectxt.textSegmentPhysicalLoc + pectxt.textSegmentPhysicalSize + pectxt.dataSegmentPhysicalLoc + pectxt.dataSegmentPhysicalSize ] + @ + (List.map pectxt.anyV2P + (dataStartPoints @ [for (virtAddr, _virtSize, _physLoc) in pectxt.sectionHeaders do yield ("section start", virtAddr) done] @ [("md", pectxt.metadataAddr)] @ (if pectxt.nativeResourcesAddr = 0x0 then [] else [("native resources", pectxt.nativeResourcesAddr) ]) @@ -1461,30 +1503,30 @@ let getDataEndPointsDelayed (pectxt: PEReader) ctxtH = @ (if pectxt.vtableFixupsAddr = 0x0 then [] else [("managed vtable_fixups", pectxt.vtableFixupsAddr) ]) @ methodRVAs))) |> List.distinct - |> List.sort - + |> List.sort + -let rvaToData (ctxt: ILMetadataReader) (pectxt: PEReader) nm rva = +let rvaToData (ctxt: ILMetadataReader) (pectxt: PEReader) nm rva = if rva = 0x0 then failwith "rva is zero" let start = pectxt.anyV2P (nm, rva) let endPoints = (Lazy.force ctxt.dataEndPoints) - let rec look l = - match l with - | [] -> - failwithf "find_text_data_extent: none found for fileName=%s, name=%s, rva=0x%08x, start=0x%08x" ctxt.fileName nm rva start - | e :: t -> - if start < e then + let rec look l = + match l with + | [] -> + failwithf "find_text_data_extent: none found for fileName=%s, name=%s, rva=0x%08x, start=0x%08x" ctxt.fileName nm rva start + | e :: t -> + if start < e then let pev = pectxt.pefile.GetView() seekReadBytes pev start (e - start) else look t look endPoints - + //----------------------------------------------------------------------- // Read the AbsIL structure (lazily) by reading off the relevant rows. // ---------------------------------------------------------------------- -let isSorted (ctxt: ILMetadataReader) (tab: TableName) = ((ctxt.sorted &&& (int64 1 <<< tab.Index)) <> int64 0x0) +let isSorted (ctxt: ILMetadataReader) (tab: TableName) = ((ctxt.sorted &&& (int64 1 <<< tab.Index)) <> int64 0x0) // Note, pectxtEager and pevEager must not be captured by the results of this function let rec seekReadModule (ctxt: ILMetadataReader) canReduceMemory (pectxtEager: PEReader) pevEager peinfo ilMetadataVersion idx = @@ -1495,7 +1537,7 @@ let rec seekReadModule (ctxt: ILMetadataReader) canReduceMemory (pectxtEager: PE let nativeResources = readNativeResources pectxtEager { Manifest = - if ctxt.getNumRows TableNames.Assembly > 0 then Some (seekReadAssemblyManifest ctxt pectxtEager 1) + if ctxt.getNumRows TableNames.Assembly > 0 then Some (seekReadAssemblyManifest ctxt pectxtEager 1) else None CustomAttrsStored = ctxt.customAttrsReader_Module MetadataIndex = idx @@ -1516,22 +1558,22 @@ let rec seekReadModule (ctxt: ILMetadataReader) canReduceMemory (pectxtEager: PE PhysicalAlignment = alignPhys ImageBase = imageBaseReal MetadataVersion = ilMetadataVersion - Resources = seekReadManifestResources ctxt canReduceMemory mdv pectxtEager pevEager } + Resources = seekReadManifestResources ctxt canReduceMemory mdv pectxtEager pevEager } and seekReadAssemblyManifest (ctxt: ILMetadataReader) pectxt idx = let mdview = ctxt.mdfile.GetView() let (hash, v1, v2, v3, v4, flags, publicKeyIdx, nameIdx, localeIdx) = seekReadAssemblyRow ctxt mdview idx let name = readStringHeap ctxt nameIdx let pubkey = readBlobHeapOption ctxt publicKeyIdx - { Name= name + { Name= name AuxModuleHashAlgorithm=hash SecurityDeclsStored= ctxt.securityDeclsReader_Assembly - PublicKey= pubkey + PublicKey= pubkey Version= Some (ILVersionInfo (v1, v2, v3, v4)) Locale= readStringHeapOption ctxt localeIdx CustomAttrsStored = ctxt.customAttrsReader_Assembly MetadataIndex = idx - AssemblyLongevity = + AssemblyLongevity = let masked = flags &&& 0x000e if masked = 0x0000 then ILAssemblyLongevity.Unspecified elif masked = 0x0002 then ILAssemblyLongevity.Library @@ -1539,32 +1581,32 @@ and seekReadAssemblyManifest (ctxt: ILMetadataReader) pectxt idx = elif masked = 0x0006 then ILAssemblyLongevity.PlatformProcess elif masked = 0x0008 then ILAssemblyLongevity.PlatformSystem else ILAssemblyLongevity.Unspecified - ExportedTypes= seekReadTopExportedTypes ctxt + ExportedTypes= seekReadTopExportedTypes ctxt EntrypointElsewhere= let (tab, tok) = pectxt.entryPointToken if tab = TableNames.File then Some (seekReadFile ctxt mdview tok) else None Retargetable = 0 <> (flags &&& 0x100) DisableJitOptimizations = 0 <> (flags &&& 0x4000) - JitTracking = 0 <> (flags &&& 0x8000) - IgnoreSymbolStoreSequencePoints = 0 <> (flags &&& 0x2000) } + JitTracking = 0 <> (flags &&& 0x8000) + IgnoreSymbolStoreSequencePoints = 0 <> (flags &&& 0x2000) } and seekReadAssemblyRef (ctxt: ILMetadataReader) idx = ctxt.seekReadAssemblyRef idx -and seekReadAssemblyRefUncached ctxtH idx = +and seekReadAssemblyRefUncached ctxtH idx = let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() let (v1, v2, v3, v4, flags, publicKeyOrTokenIdx, nameIdx, localeIdx, hashValueIdx) = seekReadAssemblyRefRow ctxt mdv idx let nm = readStringHeap ctxt nameIdx - let publicKey = - match readBlobHeapOption ctxt publicKeyOrTokenIdx with + let publicKey = + match readBlobHeapOption ctxt publicKeyOrTokenIdx with | None -> None | Some blob -> Some (if (flags &&& 0x0001) <> 0x0 then PublicKey blob else PublicKeyToken blob) - + ILAssemblyRef.Create - (name = nm, - hash = readBlobHeapOption ctxt hashValueIdx, - publicKey = publicKey, - retargetable = ((flags &&& 0x0100) <> 0x0), - version = Some (ILVersionInfo (v1, v2, v3, v4)), + (name = nm, + hash = readBlobHeapOption ctxt hashValueIdx, + publicKey = publicKey, + retargetable = ((flags &&& 0x0100) <> 0x0), + version = Some (ILVersionInfo (v1, v2, v3, v4)), locale = readStringHeapOption ctxt localeIdx) and seekReadModuleRef (ctxt: ILMetadataReader) mdv idx = @@ -1583,22 +1625,22 @@ and seekReadClassLayout (ctxt: ILMetadataReader) mdv idx = simpleIndexCompare idx, isSorted ctxt TableNames.ClassLayout, (fun (pack, size, _) -> pack, size)) - match res with + match res with | None -> { Size = None; Pack = None } | Some (pack, size) -> { Size = Some size; Pack = Some pack } and typeAccessOfFlags flags = let f = (flags &&& 0x00000007) - if f = 0x00000001 then ILTypeDefAccess.Public - elif f = 0x00000002 then ILTypeDefAccess.Nested ILMemberAccess.Public - elif f = 0x00000003 then ILTypeDefAccess.Nested ILMemberAccess.Private - elif f = 0x00000004 then ILTypeDefAccess.Nested ILMemberAccess.Family - elif f = 0x00000006 then ILTypeDefAccess.Nested ILMemberAccess.FamilyAndAssembly - elif f = 0x00000007 then ILTypeDefAccess.Nested ILMemberAccess.FamilyOrAssembly - elif f = 0x00000005 then ILTypeDefAccess.Nested ILMemberAccess.Assembly + if f = 0x00000001 then ILTypeDefAccess.Public + elif f = 0x00000002 then ILTypeDefAccess.Nested ILMemberAccess.Public + elif f = 0x00000003 then ILTypeDefAccess.Nested ILMemberAccess.Private + elif f = 0x00000004 then ILTypeDefAccess.Nested ILMemberAccess.Family + elif f = 0x00000006 then ILTypeDefAccess.Nested ILMemberAccess.FamilyAndAssembly + elif f = 0x00000007 then ILTypeDefAccess.Nested ILMemberAccess.FamilyOrAssembly + elif f = 0x00000005 then ILTypeDefAccess.Nested ILMemberAccess.Assembly else ILTypeDefAccess.Private -and typeLayoutOfFlags (ctxt: ILMetadataReader) mdv flags tidx = +and typeLayoutOfFlags (ctxt: ILMetadataReader) mdv flags tidx = let f = (flags &&& 0x00000018) if f = 0x00000008 then ILTypeDefLayout.Sequential (seekReadClassLayout ctxt mdv tidx) elif f = 0x00000010 then ILTypeDefLayout.Explicit (seekReadClassLayout ctxt mdv tidx) @@ -1607,27 +1649,27 @@ and typeLayoutOfFlags (ctxt: ILMetadataReader) mdv flags tidx = and isTopTypeDef flags = (typeAccessOfFlags flags = ILTypeDefAccess.Private) || typeAccessOfFlags flags = ILTypeDefAccess.Public - + and seekIsTopTypeDefOfIdx ctxt idx = let (flags, _, _, _, _, _) = seekReadTypeDefRow ctxt idx isTopTypeDef flags - -and readBlobHeapAsSplitTypeName ctxt (nameIdx, namespaceIdx) = + +and readBlobHeapAsSplitTypeName ctxt (nameIdx, namespaceIdx) = let name = readStringHeap ctxt nameIdx let nspace = readStringHeapOption ctxt namespaceIdx - match nspace with - | Some nspace -> splitNamespace nspace, name + match nspace with + | Some nspace -> splitNamespace nspace, name | None -> [], name -and readBlobHeapAsTypeName ctxt (nameIdx, namespaceIdx) = +and readBlobHeapAsTypeName ctxt (nameIdx, namespaceIdx) = let name = readStringHeap ctxt nameIdx let nspace = readStringHeapOption ctxt namespaceIdx - match nspace with - | None -> name + match nspace with + | None -> name | Some ns -> ctxt.memoizeString (ns+"."+name) and seekReadTypeDefRowExtents (ctxt: ILMetadataReader) _info (idx: int) = - if idx >= ctxt.getNumRows TableNames.TypeDef then + if idx >= ctxt.getNumRows TableNames.TypeDef then struct (ctxt.getNumRows TableNames.Field + 1, ctxt.getNumRows TableNames.Method + 1) else let (_, _, _, _, fieldsIdx, methodsIdx) = seekReadTypeDefRow ctxt (idx + 1) @@ -1647,10 +1689,10 @@ and seekReadPreTypeDef ctxt toponly (idx: int) = and typeDefReader ctxtH: ILTypeDefStored = mkILTypeDefReader - (fun idx -> + (fun idx -> let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() - // Re-read so as not to save all these in the lazy closure - this suspension ctxt.is the largest + // Re-read so as not to save all these in the lazy closure - this suspension ctxt.is the largest // heavily allocated one in all of AbsIL let ((flags, nameIdx, namespaceIdx, extendsIdx, fieldsIdx, methodsIdx) as info) = seekReadTypeDefRow ctxt idx @@ -1663,7 +1705,7 @@ and typeDefReader ctxtH: ILTypeDefStored = let hasLayout = (match layout with ILTypeDefLayout.Explicit _ -> true | _ -> false) let mdefs = seekReadMethods ctxt numtypars methodsIdx endMethodsIdx let fdefs = seekReadFields ctxt (numtypars, hasLayout) fieldsIdx endFieldsIdx - let nested = seekReadNestedTypeDefs ctxt idx + let nested = seekReadNestedTypeDefs ctxt idx let impls = seekReadInterfaceImpls ctxt mdv numtypars idx let mimpls = seekReadMethodImpls ctxt numtypars idx let props = seekReadProperties ctxt numtypars idx @@ -1687,27 +1729,27 @@ and typeDefReader ctxtH: ILTypeDefStored = and seekReadTopTypeDefs (ctxt: ILMetadataReader) = [| for i = 1 to ctxt.getNumRows TableNames.TypeDef do - match seekReadPreTypeDef ctxt true i with + match seekReadPreTypeDef ctxt true i with | None -> () | Some td -> yield td |] and seekReadNestedTypeDefs (ctxt: ILMetadataReader) tidx = - mkILTypeDefsComputed (fun () -> + mkILTypeDefsComputed (fun () -> let nestedIdxs = seekReadIndexedRows (ctxt.getNumRows TableNames.Nested, seekReadNestedRow ctxt, snd, simpleIndexCompare tidx, false, fst) - [| for i in nestedIdxs do - match seekReadPreTypeDef ctxt false i with + [| for i in nestedIdxs do + match seekReadPreTypeDef ctxt false i with | None -> () | Some td -> yield td |]) and seekReadInterfaceImpls (ctxt: ILMetadataReader) mdv numtypars tidx = - seekReadIndexedRows (ctxt.getNumRows TableNames.InterfaceImpl, - seekReadInterfaceImplRow ctxt mdv, - fst, - simpleIndexCompare tidx, - isSorted ctxt TableNames.InterfaceImpl, - (snd >> seekReadTypeDefOrRef ctxt numtypars AsObject (*ok*) List.empty)) - -and seekReadGenericParams ctxt numtypars (a, b): ILGenericParameterDefs = + seekReadIndexedRows (ctxt.getNumRows TableNames.InterfaceImpl, + seekReadInterfaceImplRow ctxt mdv, + fst, + simpleIndexCompare tidx, + isSorted ctxt TableNames.InterfaceImpl, + (snd >> seekReadTypeDefOrRef ctxt numtypars AsObject (*ok*) List.empty)) + +and seekReadGenericParams ctxt numtypars (a, b): ILGenericParameterDefs = ctxt.seekReadGenericParams (GenericParamsIdx(numtypars, a, b)) and seekReadGenericParamsUncached ctxtH (GenericParamsIdx(numtypars, a, b)) = @@ -1715,36 +1757,36 @@ and seekReadGenericParamsUncached ctxtH (GenericParamsIdx(numtypars, a, b)) = let mdv = ctxt.mdfile.GetView() let pars = seekReadIndexedRows - (ctxt.getNumRows TableNames.GenericParam, seekReadGenericParamRow ctxt mdv, - (fun (_, _, _, tomd, _) -> tomd), - tomdCompare (TaggedIndex(a, b)), - isSorted ctxt TableNames.GenericParam, - (fun (gpidx, seq, flags, _, nameIdx) -> + (ctxt.getNumRows TableNames.GenericParam, seekReadGenericParamRow ctxt mdv, + (fun (_, _, _, tomd, _) -> tomd), + tomdCompare (TaggedIndex(a, b)), + isSorted ctxt TableNames.GenericParam, + (fun (gpidx, seq, flags, _, nameIdx) -> let flags = int32 flags let variance_flags = flags &&& 0x0003 - let variance = + let variance = if variance_flags = 0x0000 then NonVariant elif variance_flags = 0x0001 then CoVariant - elif variance_flags = 0x0002 then ContraVariant + elif variance_flags = 0x0002 then ContraVariant else NonVariant let constraints = seekReadGenericParamConstraints ctxt mdv numtypars gpidx seq, {Name=readStringHeap ctxt nameIdx Constraints = constraints - Variance=variance + Variance=variance CustomAttrsStored = ctxt.customAttrsReader_GenericParam MetadataIndex=gpidx HasReferenceTypeConstraint= (flags &&& 0x0004) <> 0 HasNotNullableValueTypeConstraint= (flags &&& 0x0008) <> 0 HasDefaultConstructorConstraint=(flags &&& 0x0010) <> 0 })) - pars |> List.sortBy fst |> List.map snd + pars |> List.sortBy fst |> List.map snd and seekReadGenericParamConstraints (ctxt: ILMetadataReader) mdv numtypars gpidx = - seekReadIndexedRows - (ctxt.getNumRows TableNames.GenericParamConstraint, - seekReadGenericParamConstraintRow ctxt mdv, - fst, - simpleIndexCompare gpidx, - isSorted ctxt TableNames.GenericParamConstraint, + seekReadIndexedRows + (ctxt.getNumRows TableNames.GenericParamConstraint, + seekReadGenericParamConstraintRow ctxt mdv, + fst, + simpleIndexCompare gpidx, + isSorted ctxt TableNames.GenericParamConstraint, (snd >> seekReadTypeDefOrRef ctxt numtypars AsObject (*ok*) List.empty)) and seekReadTypeDefAsType (ctxt: ILMetadataReader) boxity (ginst: ILTypes) idx = @@ -1755,9 +1797,9 @@ and seekReadTypeDefAsTypeUncached ctxtH (TypeDefAsTypIdx (boxity, ginst, idx)) = mkILTy boxity (ILTypeSpec.Create(seekReadTypeDefAsTypeRef ctxt idx, ginst)) and seekReadTypeDefAsTypeRef (ctxt: ILMetadataReader) idx = - let enc = - if seekIsTopTypeDefOfIdx ctxt idx then [] - else + let enc = + if seekIsTopTypeDefOfIdx ctxt idx then [] + else let enclIdx = seekReadIndexedRow (ctxt.getNumRows TableNames.Nested, seekReadNestedRow ctxt, fst, simpleIndexCompare idx, isSorted ctxt TableNames.Nested, snd) let tref = seekReadTypeDefAsTypeRef ctxt enclIdx tref.Enclosing@[tref.Name] @@ -1772,7 +1814,7 @@ and seekReadTypeRefUncached ctxtH idx = let scopeIdx, nameIdx, namespaceIdx = seekReadTypeRefRow ctxt mdv idx let scope, enc = seekReadTypeRefScope ctxt mdv scopeIdx let nm = readBlobHeapAsTypeName ctxt (nameIdx, namespaceIdx) - ILTypeRef.Create(scope=scope, enclosing=enc, name = nm) + ILTypeRef.Create(scope=scope, enclosing=enc, name = nm) and seekReadTypeRefAsType (ctxt: ILMetadataReader) boxity ginst idx = ctxt.seekReadTypeRefAsType (TypeRefAsTypIdx (boxity, ginst, idx)) and seekReadTypeRefAsTypeUncached ctxtH (TypeRefAsTypIdx (boxity, ginst, idx)) = @@ -1781,28 +1823,28 @@ and seekReadTypeRefAsTypeUncached ctxtH (TypeRefAsTypIdx (boxity, ginst, idx)) = and seekReadTypeDefOrRef (ctxt: ILMetadataReader) numtypars boxity (ginst: ILTypes) (TaggedIndex(tag, idx) ) = let mdv = ctxt.mdfile.GetView() - match tag with + match tag with | tag when tag = tdor_TypeDef -> seekReadTypeDefAsType ctxt boxity ginst idx | tag when tag = tdor_TypeRef -> seekReadTypeRefAsType ctxt boxity ginst idx - | tag when tag = tdor_TypeSpec -> + | tag when tag = tdor_TypeSpec -> if not (List.isEmpty ginst) then dprintn ("type spec used as type constructor for a generic instantiation: ignoring instantiation") readBlobHeapAsType ctxt numtypars (seekReadTypeSpecRow ctxt mdv idx) | _ -> failwith "seekReadTypeDefOrRef ctxt" and seekReadTypeDefOrRefAsTypeRef (ctxt: ILMetadataReader) (TaggedIndex(tag, idx) ) = - match tag with + match tag with | tag when tag = tdor_TypeDef -> seekReadTypeDefAsTypeRef ctxt idx | tag when tag = tdor_TypeRef -> seekReadTypeRef ctxt idx - | tag when tag = tdor_TypeSpec -> + | tag when tag = tdor_TypeSpec -> dprintn ("type spec used where a type ref or def is required") PrimaryAssemblyILGlobals.typ_Object.TypeRef | _ -> failwith "seekReadTypeDefOrRefAsTypeRef_readTypeDefOrRefOrSpec" and seekReadMethodRefParent (ctxt: ILMetadataReader) mdv numtypars (TaggedIndex(tag, idx)) = - match tag with + match tag with | tag when tag = mrp_TypeRef -> seekReadTypeRefAsType ctxt AsObject (* not ok - no way to tell if a member ref parent is a value type or not *) List.empty idx | tag when tag = mrp_ModuleRef -> mkILTypeForGlobalFunctions (ILScopeRef.Module (seekReadModuleRef ctxt mdv idx)) - | tag when tag = mrp_MethodDef -> + | tag when tag = mrp_MethodDef -> let (MethodData(enclTy, cc, nm, argtys, retty, minst)) = seekReadMethodDefAsMethodData ctxt idx let mspec = mkILMethSpecInTy (enclTy, cc, nm, argtys, retty, minst) mspec.DeclaringType @@ -1810,49 +1852,49 @@ and seekReadMethodRefParent (ctxt: ILMetadataReader) mdv numtypars (TaggedIndex( | _ -> failwith "seekReadMethodRefParent" and seekReadMethodDefOrRef (ctxt: ILMetadataReader) numtypars (TaggedIndex(tag, idx)) = - match tag with - | tag when tag = mdor_MethodDef -> + match tag with + | tag when tag = mdor_MethodDef -> let (MethodData(enclTy, cc, nm, argtys, retty, minst)) = seekReadMethodDefAsMethodData ctxt idx VarArgMethodData(enclTy, cc, nm, argtys, None, retty, minst) - | tag when tag = mdor_MemberRef -> + | tag when tag = mdor_MemberRef -> seekReadMemberRefAsMethodData ctxt numtypars idx | _ -> failwith "seekReadMethodDefOrRef" and seekReadMethodDefOrRefNoVarargs (ctxt: ILMetadataReader) numtypars x = - let (VarArgMethodData(enclTy, cc, nm, argtys, varargs, retty, minst)) = seekReadMethodDefOrRef ctxt numtypars x + let (VarArgMethodData(enclTy, cc, nm, argtys, varargs, retty, minst)) = seekReadMethodDefOrRef ctxt numtypars x if varargs <> None then dprintf "ignoring sentinel and varargs in ILMethodDef token signature" MethodData(enclTy, cc, nm, argtys, retty, minst) and seekReadCustomAttrType (ctxt: ILMetadataReader) (TaggedIndex(tag, idx) ) = - match tag with - | tag when tag = cat_MethodDef -> + match tag with + | tag when tag = cat_MethodDef -> let (MethodData(enclTy, cc, nm, argtys, retty, minst)) = seekReadMethodDefAsMethodData ctxt idx mkILMethSpecInTy (enclTy, cc, nm, argtys, retty, minst) - | tag when tag = cat_MemberRef -> + | tag when tag = cat_MemberRef -> let (MethodData(enclTy, cc, nm, argtys, retty, minst)) = seekReadMemberRefAsMethDataNoVarArgs ctxt 0 idx mkILMethSpecInTy (enclTy, cc, nm, argtys, retty, minst) | _ -> failwith "seekReadCustomAttrType ctxt" - + and seekReadImplAsScopeRef (ctxt: ILMetadataReader) mdv (TaggedIndex(tag, idx) ) = if idx = 0 then ILScopeRef.Local - else - match tag with + else + match tag with | tag when tag = i_File -> ILScopeRef.Module (seekReadFile ctxt mdv idx) | tag when tag = i_AssemblyRef -> ILScopeRef.Assembly (seekReadAssemblyRef ctxt idx) | tag when tag = i_ExportedType -> failwith "seekReadImplAsScopeRef" | _ -> failwith "seekReadImplAsScopeRef" and seekReadTypeRefScope (ctxt: ILMetadataReader) mdv (TaggedIndex(tag, idx) ) = - match tag with + match tag with | tag when tag = rs_Module -> ILScopeRef.Local, [] | tag when tag = rs_ModuleRef -> ILScopeRef.Module (seekReadModuleRef ctxt mdv idx), [] | tag when tag = rs_AssemblyRef -> ILScopeRef.Assembly (seekReadAssemblyRef ctxt idx), [] - | tag when tag = rs_TypeRef -> + | tag when tag = rs_TypeRef -> let tref = seekReadTypeRef ctxt idx tref.Scope, (tref.Enclosing@[tref.Name]) | _ -> failwith "seekReadTypeRefScope" -and seekReadOptionalTypeDefOrRef (ctxt: ILMetadataReader) numtypars boxity idx = +and seekReadOptionalTypeDefOrRef (ctxt: ILMetadataReader) numtypars boxity idx = if idx = TaggedIndex(tdor_TypeDef, 0) then None else Some (seekReadTypeDefOrRef ctxt numtypars boxity List.empty idx) @@ -1864,54 +1906,54 @@ and seekReadField ctxt mdv (numtypars, hasLayout) (idx: int) = fieldType= readBlobHeapAsFieldSig ctxt numtypars typeIdx, attributes = enum(flags), literalValue = (if (flags &&& 0x8000) = 0 then None else Some (seekReadConstant ctxt (TaggedIndex(hc_FieldDef, idx)))), - marshal = - (if (flags &&& 0x1000) = 0 then - None - else - Some (seekReadIndexedRow (ctxt.getNumRows TableNames.FieldMarshal, seekReadFieldMarshalRow ctxt mdv, - fst, hfmCompare (TaggedIndex(hfm_FieldDef, idx)), - isSorted ctxt TableNames.FieldMarshal, + marshal = + (if (flags &&& 0x1000) = 0 then + None + else + Some (seekReadIndexedRow (ctxt.getNumRows TableNames.FieldMarshal, seekReadFieldMarshalRow ctxt mdv, + fst, hfmCompare (TaggedIndex(hfm_FieldDef, idx)), + isSorted ctxt TableNames.FieldMarshal, (snd >> readBlobHeapAsNativeType ctxt)))), - data = - (if (flags &&& 0x0100) = 0 then - None - else + data = + (if (flags &&& 0x0100) = 0 then + None + else match ctxt.pectxtCaptured with | None -> None // indicates metadata only, where Data is not available - | Some pectxt -> - let rva = seekReadIndexedRow (ctxt.getNumRows TableNames.FieldRVA, seekReadFieldRVARow ctxt mdv, - snd, simpleIndexCompare idx, isSorted ctxt TableNames.FieldRVA, fst) + | Some pectxt -> + let rva = seekReadIndexedRow (ctxt.getNumRows TableNames.FieldRVA, seekReadFieldRVARow ctxt mdv, + snd, simpleIndexCompare idx, isSorted ctxt TableNames.FieldRVA, fst) Some (rvaToData ctxt pectxt "field" rva)), - offset = - (if hasLayout && not isStatic then - Some (seekReadIndexedRow (ctxt.getNumRows TableNames.FieldLayout, seekReadFieldLayoutRow ctxt mdv, - snd, simpleIndexCompare idx, isSorted ctxt TableNames.FieldLayout, fst)) else None), + offset = + (if hasLayout && not isStatic then + Some (seekReadIndexedRow (ctxt.getNumRows TableNames.FieldLayout, seekReadFieldLayoutRow ctxt mdv, + snd, simpleIndexCompare idx, isSorted ctxt TableNames.FieldLayout, fst)) else None), customAttrsStored=ctxt.customAttrsReader_FieldDef, metadataIndex = idx) - + and seekReadFields (ctxt: ILMetadataReader) (numtypars, hasLayout) fidx1 fidx2 = - mkILFieldsLazy + mkILFieldsLazy (lazy let mdv = ctxt.mdfile.GetView() - [ if fidx1 > 0 then + [ if fidx1 > 0 then for i = fidx1 to fidx2 - 1 do yield seekReadField ctxt mdv (numtypars, hasLayout) i ]) and seekReadMethods (ctxt: ILMetadataReader) numtypars midx1 midx2 = - mkILMethodsComputed (fun () -> + mkILMethodsComputed (fun () -> let mdv = ctxt.mdfile.GetView() - [| if midx1 > 0 then + [| if midx1 > 0 then for i = midx1 to midx2 - 1 do yield seekReadMethod ctxt mdv numtypars i |]) -and sigptrGetTypeDefOrRefOrSpecIdx bytes sigptr = +and sigptrGetTypeDefOrRefOrSpecIdx bytes sigptr = let struct (n, sigptr) = sigptrGetZInt32 bytes sigptr if (n &&& 0x01) = 0x0 then (* Type Def *) TaggedIndex(tdor_TypeDef, (n >>>& 2)), sigptr else (* Type Ref *) - TaggedIndex(tdor_TypeRef, (n >>>& 2)), sigptr + TaggedIndex(tdor_TypeRef, (n >>>& 2)), sigptr -and sigptrGetTy (ctxt: ILMetadataReader) numtypars bytes sigptr = +and sigptrGetTy (ctxt: ILMetadataReader) numtypars bytes sigptr = let b0, sigptr = sigptrGetByte bytes sigptr if b0 = et_OBJECT then PrimaryAssemblyILGlobals.typ_Object, sigptr elif b0 = et_STRING then PrimaryAssemblyILGlobals.typ_String, sigptr @@ -1929,33 +1971,33 @@ and sigptrGetTy (ctxt: ILMetadataReader) numtypars bytes sigptr = elif b0 = et_R8 then PrimaryAssemblyILGlobals.typ_Double, sigptr elif b0 = et_CHAR then PrimaryAssemblyILGlobals.typ_Char, sigptr elif b0 = et_BOOLEAN then PrimaryAssemblyILGlobals.typ_Bool, sigptr - elif b0 = et_WITH then + elif b0 = et_WITH then let b0, sigptr = sigptrGetByte bytes sigptr let tdorIdx, sigptr = sigptrGetTypeDefOrRefOrSpecIdx bytes sigptr let struct (n, sigptr) = sigptrGetZInt32 bytes sigptr let argtys, sigptr = sigptrFold (sigptrGetTy ctxt numtypars) n bytes sigptr - seekReadTypeDefOrRef ctxt numtypars (if b0 = et_CLASS then AsObject else AsValue) argtys tdorIdx, + seekReadTypeDefOrRef ctxt numtypars (if b0 = et_CLASS then AsObject else AsValue) argtys tdorIdx, sigptr - - elif b0 = et_CLASS then + + elif b0 = et_CLASS then let tdorIdx, sigptr = sigptrGetTypeDefOrRefOrSpecIdx bytes sigptr seekReadTypeDefOrRef ctxt numtypars AsObject List.empty tdorIdx, sigptr - elif b0 = et_VALUETYPE then + elif b0 = et_VALUETYPE then let tdorIdx, sigptr = sigptrGetTypeDefOrRefOrSpecIdx bytes sigptr seekReadTypeDefOrRef ctxt numtypars AsValue List.empty tdorIdx, sigptr - elif b0 = et_VAR then + elif b0 = et_VAR then let struct (n, sigptr) = sigptrGetZInt32 bytes sigptr ILType.TypeVar (uint16 n), sigptr - elif b0 = et_MVAR then + elif b0 = et_MVAR then let struct (n, sigptr) = sigptrGetZInt32 bytes sigptr ILType.TypeVar (uint16 (n + numtypars)), sigptr - elif b0 = et_BYREF then + elif b0 = et_BYREF then let ty, sigptr = sigptrGetTy ctxt numtypars bytes sigptr ILType.Byref ty, sigptr - elif b0 = et_PTR then + elif b0 = et_PTR then let ty, sigptr = sigptrGetTy ctxt numtypars bytes sigptr ILType.Ptr ty, sigptr - elif b0 = et_SZARRAY then + elif b0 = et_SZARRAY then let ty, sigptr = sigptrGetTy ctxt numtypars bytes sigptr mkILArr1DTy ty, sigptr elif b0 = et_ARRAY then @@ -1965,17 +2007,17 @@ and sigptrGetTy (ctxt: ILMetadataReader) numtypars bytes sigptr = let struct (sizes, sigptr) = sigptrFoldStruct sigptrGetZInt32 numSized bytes sigptr let struct (numLoBounded, sigptr) = sigptrGetZInt32 bytes sigptr let struct (lobounds, sigptr) = sigptrFoldStruct sigptrGetZInt32 numLoBounded bytes sigptr - let shape = + let shape = let dim i = - (if i < numLoBounded then Some (List.item i lobounds) else None), + (if i < numLoBounded then Some (List.item i lobounds) else None), (if i < numSized then Some (List.item i sizes) else None) ILArrayShape (List.init rank dim) mkILArrTy (ty, shape), sigptr - + elif b0 = et_VOID then ILType.Void, sigptr - elif b0 = et_TYPEDBYREF then + elif b0 = et_TYPEDBYREF then PrimaryAssemblyILGlobals.typ_TypedReference, sigptr - elif b0 = et_CMOD_REQD || b0 = et_CMOD_OPT then + elif b0 = et_CMOD_REQD || b0 = et_CMOD_OPT then let tdorIdx, sigptr = sigptrGetTypeDefOrRefOrSpecIdx bytes sigptr let ty, sigptr = sigptrGetTy ctxt numtypars bytes sigptr ILType.Modified((b0 = et_CMOD_REQD), seekReadTypeDefOrRefAsTypeRef ctxt tdorIdx, ty), sigptr @@ -1986,7 +2028,7 @@ and sigptrGetTy (ctxt: ILMetadataReader) numtypars bytes sigptr = let struct (numparams, sigptr) = sigptrGetZInt32 bytes sigptr let retty, sigptr = sigptrGetTy ctxt numtypars bytes sigptr let argtys, sigptr = sigptrFold (sigptrGetTy ctxt numtypars) ( numparams) bytes sigptr - let typ = + let typ = ILType.FunctionPointer { CallingConv=cc ArgTypes = argtys @@ -1994,32 +2036,32 @@ and sigptrGetTy (ctxt: ILMetadataReader) numtypars bytes sigptr = typ, sigptr elif b0 = et_SENTINEL then failwith "varargs NYI" else ILType.Void, sigptr - -and sigptrGetVarArgTys (ctxt: ILMetadataReader) n numtypars bytes sigptr = - sigptrFold (sigptrGetTy ctxt numtypars) n bytes sigptr -and sigptrGetArgTys (ctxt: ILMetadataReader) n numtypars bytes sigptr acc = - if n <= 0 then (List.rev acc, None), sigptr +and sigptrGetVarArgTys (ctxt: ILMetadataReader) n numtypars bytes sigptr = + sigptrFold (sigptrGetTy ctxt numtypars) n bytes sigptr + +and sigptrGetArgTys (ctxt: ILMetadataReader) n numtypars bytes sigptr acc = + if n <= 0 then (List.rev acc, None), sigptr else let b0, sigptr2 = sigptrGetByte bytes sigptr - if b0 = et_SENTINEL then + if b0 = et_SENTINEL then let varargs, sigptr = sigptrGetVarArgTys ctxt n numtypars bytes sigptr2 (List.rev acc, Some varargs), sigptr else let x, sigptr = sigptrGetTy ctxt numtypars bytes sigptr sigptrGetArgTys ctxt (n-1) numtypars bytes sigptr (x :: acc) - -and sigptrGetLocal (ctxt: ILMetadataReader) numtypars bytes sigptr = - let pinned, sigptr = + +and sigptrGetLocal (ctxt: ILMetadataReader) numtypars bytes sigptr = + let pinned, sigptr = let b0, sigptr' = sigptrGetByte bytes sigptr - if b0 = et_PINNED then + if b0 = et_PINNED then true, sigptr' - else + else false, sigptr let ty, sigptr = sigptrGetTy ctxt numtypars bytes sigptr let loc: ILLocal = { IsPinned = pinned; Type = ty; DebugInfo = None } loc, sigptr - + and readBlobHeapAsMethodSig (ctxt: ILMetadataReader) numtypars blobIdx = ctxt.readBlobHeapAsMethodSig (BlobAsMethodSigIdx (numtypars, blobIdx)) @@ -2034,8 +2076,8 @@ and readBlobHeapAsMethodSigUncached ctxtH (BlobAsMethodSigIdx (numtypars, blobId let retty, sigptr = sigptrGetTy ctxt numtypars bytes sigptr let (argtys, varargs), _sigptr = sigptrGetArgTys ctxt numparams numtypars bytes sigptr [] generic, genarity, cc, retty, argtys, varargs - -and readBlobHeapAsType ctxt numtypars blobIdx = + +and readBlobHeapAsType ctxt numtypars blobIdx = let bytes = readBlobHeap ctxt blobIdx let ty, _sigptr = sigptrGetTy ctxt numtypars bytes 0 ty @@ -2052,7 +2094,7 @@ and readBlobHeapAsFieldSigUncached ctxtH (BlobAsFieldSigIdx (numtypars, blobIdx) let retty, _sigptr = sigptrGetTy ctxt numtypars bytes sigptr retty - + and readBlobHeapAsPropertySig (ctxt: ILMetadataReader) numtypars blobIdx = ctxt.readBlobHeapAsPropertySig (BlobAsPropSigIdx (numtypars, blobIdx)) @@ -2068,7 +2110,7 @@ and readBlobHeapAsPropertySigUncached ctxtH (BlobAsPropSigIdx (numtypars, blobId let retty, sigptr = sigptrGetTy ctxt numtypars bytes sigptr let argtys, _sigptr = sigptrFold (sigptrGetTy ctxt numtypars) ( numparams) bytes sigptr hasthis, retty, argtys - + and readBlobHeapAsLocalsSig (ctxt: ILMetadataReader) numtypars blobIdx = ctxt.readBlobHeapAsLocalsSig (BlobAsLocalSigIdx (numtypars, blobIdx)) @@ -2081,36 +2123,36 @@ and readBlobHeapAsLocalsSigUncached ctxtH (BlobAsLocalSigIdx (numtypars, blobIdx let struct (numlocals, sigptr) = sigptrGetZInt32 bytes sigptr let localtys, _sigptr = sigptrFold (sigptrGetLocal ctxt numtypars) ( numlocals) bytes sigptr localtys - -and byteAsHasThis b = + +and byteAsHasThis b = let hasthis_masked = b &&& 0x60uy if hasthis_masked = e_IMAGE_CEE_CS_CALLCONV_INSTANCE then ILThisConvention.Instance - elif hasthis_masked = e_IMAGE_CEE_CS_CALLCONV_INSTANCE_EXPLICIT then ILThisConvention.InstanceExplicit - else ILThisConvention.Static + elif hasthis_masked = e_IMAGE_CEE_CS_CALLCONV_INSTANCE_EXPLICIT then ILThisConvention.InstanceExplicit + else ILThisConvention.Static -and byteAsCallConv b = - let cc = +and byteAsCallConv b = + let cc = let ccMaxked = b &&& 0x0Fuy - if ccMaxked = e_IMAGE_CEE_CS_CALLCONV_FASTCALL then ILArgConvention.FastCall - elif ccMaxked = e_IMAGE_CEE_CS_CALLCONV_STDCALL then ILArgConvention.StdCall - elif ccMaxked = e_IMAGE_CEE_CS_CALLCONV_THISCALL then ILArgConvention.ThisCall - elif ccMaxked = e_IMAGE_CEE_CS_CALLCONV_CDECL then ILArgConvention.CDecl - elif ccMaxked = e_IMAGE_CEE_CS_CALLCONV_VARARG then ILArgConvention.VarArg + if ccMaxked = e_IMAGE_CEE_CS_CALLCONV_FASTCALL then ILArgConvention.FastCall + elif ccMaxked = e_IMAGE_CEE_CS_CALLCONV_STDCALL then ILArgConvention.StdCall + elif ccMaxked = e_IMAGE_CEE_CS_CALLCONV_THISCALL then ILArgConvention.ThisCall + elif ccMaxked = e_IMAGE_CEE_CS_CALLCONV_CDECL then ILArgConvention.CDecl + elif ccMaxked = e_IMAGE_CEE_CS_CALLCONV_VARARG then ILArgConvention.VarArg else ILArgConvention.Default let generic = (b &&& e_IMAGE_CEE_CS_CALLCONV_GENERIC) <> 0x0uy - generic, Callconv (byteAsHasThis b, cc) - -and seekReadMemberRefAsMethodData ctxt numtypars idx: VarArgMethodData = + generic, Callconv (byteAsHasThis b, cc) + +and seekReadMemberRefAsMethodData ctxt numtypars idx: VarArgMethodData = ctxt.seekReadMemberRefAsMethodData (MemberRefAsMspecIdx (numtypars, idx)) -and seekReadMemberRefAsMethodDataUncached ctxtH (MemberRefAsMspecIdx (numtypars, idx)) = +and seekReadMemberRefAsMethodDataUncached ctxtH (MemberRefAsMspecIdx (numtypars, idx)) = let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() let (mrpIdx, nameIdx, typeIdx) = seekReadMemberRefRow ctxt mdv idx let nm = readStringHeap ctxt nameIdx let enclTy = seekReadMethodRefParent ctxt mdv numtypars mrpIdx let _generic, genarity, cc, retty, argtys, varargs = readBlobHeapAsMethodSig ctxt enclTy.GenericArgs.Length typeIdx - let minst = List.init genarity (fun n -> mkILTyvarTy (uint16 (numtypars+n))) + let minst = List.init genarity (fun n -> mkILTyvarTy (uint16 (numtypars+n))) (VarArgMethodData(enclTy, cc, nm, argtys, varargs, retty, minst)) and seekReadMemberRefAsMethDataNoVarArgs ctxt numtypars idx: MethodData = @@ -2118,15 +2160,15 @@ and seekReadMemberRefAsMethDataNoVarArgs ctxt numtypars idx: MethodData = if Option.isSome varargs then dprintf "ignoring sentinel and varargs in ILMethodDef token signature" (MethodData(enclTy, cc, nm, argtys, retty, minst)) -and seekReadMethodSpecAsMethodData (ctxt: ILMetadataReader) numtypars idx = +and seekReadMethodSpecAsMethodData (ctxt: ILMetadataReader) numtypars idx = ctxt.seekReadMethodSpecAsMethodData (MethodSpecAsMspecIdx (numtypars, idx)) -and seekReadMethodSpecAsMethodDataUncached ctxtH (MethodSpecAsMspecIdx (numtypars, idx)) = +and seekReadMethodSpecAsMethodDataUncached ctxtH (MethodSpecAsMspecIdx (numtypars, idx)) = let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() let (mdorIdx, instIdx) = seekReadMethodSpecRow ctxt mdv idx let (VarArgMethodData(enclTy, cc, nm, argtys, varargs, retty, _)) = seekReadMethodDefOrRef ctxt numtypars mdorIdx - let minst = + let minst = let bytes = readBlobHeap ctxt instIdx let sigptr = 0 let ccByte, sigptr = sigptrGetByte bytes sigptr @@ -2136,10 +2178,10 @@ and seekReadMethodSpecAsMethodDataUncached ctxtH (MethodSpecAsMspecIdx (numtypar argtys VarArgMethodData(enclTy, cc, nm, argtys, varargs, retty, minst) -and seekReadMemberRefAsFieldSpec (ctxt: ILMetadataReader) numtypars idx = +and seekReadMemberRefAsFieldSpec (ctxt: ILMetadataReader) numtypars idx = ctxt.seekReadMemberRefAsFieldSpec (MemberRefAsFspecIdx (numtypars, idx)) -and seekReadMemberRefAsFieldSpecUncached ctxtH (MemberRefAsFspecIdx (numtypars, idx)) = +and seekReadMemberRefAsFieldSpecUncached ctxtH (MemberRefAsFspecIdx (numtypars, idx)) = let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() let (mrpIdx, nameIdx, typeIdx) = seekReadMemberRefRow ctxt mdv idx @@ -2148,46 +2190,46 @@ and seekReadMemberRefAsFieldSpecUncached ctxtH (MemberRefAsFspecIdx (numtypars, let retty = readBlobHeapAsFieldSig ctxt numtypars typeIdx mkILFieldSpecInTy(enclTy, nm, retty) -// One extremely annoying aspect of the MD format is that given a -// ILMethodDef token it is non-trivial to find which ILTypeDef it belongs -// to. So we do a binary chop through the ILTypeDef table -// looking for which ILTypeDef has the ILMethodDef within its range. -// Although the ILTypeDef table is not "sorted", it is effectively sorted by -// method-range and field-range start/finish indexes +// One extremely annoying aspect of the MD format is that given a +// ILMethodDef token it is non-trivial to find which ILTypeDef it belongs +// to. So we do a binary chop through the ILTypeDef table +// looking for which ILTypeDef has the ILMethodDef within its range. +// Although the ILTypeDef table is not "sorted", it is effectively sorted by +// method-range and field-range start/finish indexes and seekReadMethodDefAsMethodData ctxt idx = ctxt.seekReadMethodDefAsMethodData idx and seekReadMethodDefAsMethodDataUncached ctxtH idx = let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() - // Look for the method def parent. - let tidx = - seekReadIndexedRow (ctxt.getNumRows TableNames.TypeDef, - (fun i -> i, seekReadTypeDefRowWithExtents ctxt i), - (fun r -> r), - (fun (_, ((_, _, _, _, _, methodsIdx), - (_, endMethodsIdx))) -> - if endMethodsIdx <= idx then 1 - elif methodsIdx <= idx && idx < endMethodsIdx then 0 - else -1), + // Look for the method def parent. + let tidx = + seekReadIndexedRow (ctxt.getNumRows TableNames.TypeDef, + (fun i -> i, seekReadTypeDefRowWithExtents ctxt i), + (fun r -> r), + (fun (_, ((_, _, _, _, _, methodsIdx), + (_, endMethodsIdx))) -> + if endMethodsIdx <= idx then 1 + elif methodsIdx <= idx && idx < endMethodsIdx then 0 + else -1), true, fst) // Create a formal instantiation if needed let typeGenericArgs = seekReadGenericParams ctxt 0 (tomd_TypeDef, tidx) let typeGenericArgsCount = typeGenericArgs.Length let methodGenericArgs = seekReadGenericParams ctxt typeGenericArgsCount (tomd_MethodDef, idx) - + let finst = mkILFormalGenericArgs 0 typeGenericArgs let minst = mkILFormalGenericArgs typeGenericArgsCount methodGenericArgs - // Read the method def parent. + // Read the method def parent. let enclTy = seekReadTypeDefAsType ctxt AsObject (* not ok: see note *) finst tidx - // Return the constituent parts: put it together at the place where this is called. + // Return the constituent parts: put it together at the place where this is called. let (_code_rva, _implflags, _flags, nameIdx, typeIdx, _paramIdx) = seekReadMethodRow ctxt mdv idx let nm = readStringHeap ctxt nameIdx - // Read the method def signature. + // Read the method def signature. let _generic, _genarity, cc, retty, argtys, varargs = readBlobHeapAsMethodSig ctxt typeGenericArgsCount typeIdx if varargs <> None then dprintf "ignoring sentinel and varargs in ILMethodDef token signature" @@ -2203,25 +2245,25 @@ and seekReadFieldDefAsFieldSpecUncached ctxtH idx = let (_flags, nameIdx, typeIdx) = seekReadFieldRow ctxt mdv idx let nm = readStringHeap ctxt nameIdx (* Look for the field def parent. *) - let tidx = - seekReadIndexedRow (ctxt.getNumRows TableNames.TypeDef, - (fun i -> i, seekReadTypeDefRowWithExtents ctxt i), - (fun r -> r), - (fun (_, ((_, _, _, _, fieldsIdx, _), (endFieldsIdx, _))) -> - if endFieldsIdx <= idx then 1 - elif fieldsIdx <= idx && idx < endFieldsIdx then 0 - else -1), + let tidx = + seekReadIndexedRow (ctxt.getNumRows TableNames.TypeDef, + (fun i -> i, seekReadTypeDefRowWithExtents ctxt i), + (fun r -> r), + (fun (_, ((_, _, _, _, fieldsIdx, _), (endFieldsIdx, _))) -> + if endFieldsIdx <= idx then 1 + elif fieldsIdx <= idx && idx < endFieldsIdx then 0 + else -1), true, fst) - // Read the field signature. + // Read the field signature. let retty = readBlobHeapAsFieldSig ctxt 0 typeIdx - // Create a formal instantiation if needed + // Create a formal instantiation if needed let finst = mkILFormalGenericArgs 0 (seekReadGenericParams ctxt 0 (tomd_TypeDef, tidx)) - // Read the field def parent. + // Read the field def parent. let enclTy = seekReadTypeDefAsType ctxt AsObject (* not ok: see note *) finst tidx - // Put it together. + // Put it together. mkILFieldSpecInTy(enclTy, nm, retty) and seekReadMethod (ctxt: ILMetadataReader) mdv numtypars (idx: int) = @@ -2236,30 +2278,30 @@ and seekReadMethod (ctxt: ILMetadataReader) mdv numtypars (idx: int) = let aggressiveinline = (implflags &&& 0x0100) <> 0x0 let _generic, _genarity, cc, retty, argtys, varargs = readBlobHeapAsMethodSig ctxt numtypars typeIdx if varargs <> None then dprintf "ignoring sentinel and varargs in ILMethodDef signature" - + let endParamIdx = - if idx >= ctxt.getNumRows TableNames.Method then + if idx >= ctxt.getNumRows TableNames.Method then ctxt.getNumRows TableNames.Param + 1 else let (_, _, _, _, _, paramIdx) = seekReadMethodRow ctxt mdv (idx + 1) paramIdx - + let ret, ilParams = seekReadParams ctxt mdv (retty, argtys) paramIdx endParamIdx - let isEntryPoint = - let (tab, tok) = ctxt.entryPointToken + let isEntryPoint = + let (tab, tok) = ctxt.entryPointToken (tab = TableNames.Method && tok = idx) - let body = - if (codetype = 0x01) && pinvoke then + let body = + if (codetype = 0x01) && pinvoke then methBodyNative - elif pinvoke then + elif pinvoke then seekReadImplMap ctxt nm idx - elif internalcall || abstr || unmanaged || (codetype <> 0x00) then + elif internalcall || abstr || unmanaged || (codetype <> 0x00) then methBodyAbstract - else - match ctxt.pectxtCaptured with - | None -> methBodyNotAvailable + else + match ctxt.pectxtCaptured with + | None -> methBodyNotAvailable | Some pectxt -> seekReadMethodRVA pectxt ctxt (idx, nm, internalcall, noinline, aggressiveinline, numtypars) codeRVA ILMethodDef(name=nm, @@ -2274,8 +2316,8 @@ and seekReadMethod (ctxt: ILMetadataReader) mdv numtypars (idx: int) = body=body, customAttrsStored=ctxt.customAttrsReader_MethodDef, metadataIndex=idx) - - + + and seekReadParams (ctxt: ILMetadataReader) mdv (retty, argtys) pidx1 pidx2 = let retRes = ref (mkILReturn retty) let paramsRes = argtys |> List.toArray |> Array.map mkILParamAnon @@ -2290,14 +2332,14 @@ and seekReadParamExtras (ctxt: ILMetadataReader) mdv (retRes, paramsRes) (idx: i let hasDefault = (flags &&& 0x1000) <> 0x0 let fmReader idx = seekReadIndexedRow (ctxt.getNumRows TableNames.FieldMarshal, seekReadFieldMarshalRow ctxt mdv, fst, hfmCompare idx, isSorted ctxt TableNames.FieldMarshal, (snd >> readBlobHeapAsNativeType ctxt)) if seq = 0 then - retRes := { !retRes with + retRes := { !retRes with Marshal=(if hasMarshal then Some (fmReader (TaggedIndex(hfm_ParamDef, idx))) else None) CustomAttrsStored = ctxt.customAttrsReader_ParamDef MetadataIndex = idx} elif seq > Array.length paramsRes then dprintn "bad seq num. for param" - else - paramsRes.[seq - 1] <- - { paramsRes.[seq - 1] with + else + paramsRes.[seq - 1] <- + { paramsRes.[seq - 1] with Marshal=(if hasMarshal then Some (fmReader (TaggedIndex(hfm_ParamDef, idx))) else None) Default = (if hasDefault then Some (seekReadConstant ctxt (TaggedIndex(hc_ParamDef, idx))) else None) Name = readStringHeapOption ctxt nameIdx @@ -2306,13 +2348,13 @@ and seekReadParamExtras (ctxt: ILMetadataReader) mdv (retRes, paramsRes) (idx: i IsOptional = ((inOutMasked &&& 0x0010) <> 0x0) CustomAttrsStored = ctxt.customAttrsReader_ParamDef MetadataIndex = idx } - + and seekReadMethodImpls (ctxt: ILMetadataReader) numtypars tidx = - mkILMethodImplsLazy - (lazy + mkILMethodImplsLazy + (lazy let mdv = ctxt.mdfile.GetView() let mimpls = seekReadIndexedRows (ctxt.getNumRows TableNames.MethodImpl, seekReadMethodImplRow ctxt mdv, (fun (a, _, _) -> a), simpleIndexCompare tidx, isSorted ctxt TableNames.MethodImpl, (fun (_, b, c) -> b, c)) - mimpls |> List.map (fun (b, c) -> + mimpls |> List.map (fun (b, c) -> { OverrideBy= let (MethodData(enclTy, cc, nm, argtys, retty, minst)) = seekReadMethodDefOrRefNoVarargs ctxt numtypars b mkILMethSpecInTy (enclTy, cc, nm, argtys, retty, minst) @@ -2322,27 +2364,27 @@ and seekReadMethodImpls (ctxt: ILMetadataReader) numtypars tidx = OverridesSpec(mspec.MethodRef, mspec.DeclaringType) })) and seekReadMultipleMethodSemantics (ctxt: ILMetadataReader) (flags, id) = - seekReadIndexedRows - (ctxt.getNumRows TableNames.MethodSemantics, - seekReadMethodSemanticsRow ctxt, - (fun (_flags, _, c) -> c), - hsCompare id, - isSorted ctxt TableNames.MethodSemantics, - (fun (a, b, _c) -> + seekReadIndexedRows + (ctxt.getNumRows TableNames.MethodSemantics, + seekReadMethodSemanticsRow ctxt, + (fun (_flags, _, c) -> c), + hsCompare id, + isSorted ctxt TableNames.MethodSemantics, + (fun (a, b, _c) -> let (MethodData(enclTy, cc, nm, argtys, retty, minst)) = seekReadMethodDefAsMethodData ctxt b a, (mkILMethSpecInTy (enclTy, cc, nm, argtys, retty, minst)).MethodRef)) - |> List.filter (fun (flags2, _) -> flags = flags2) - |> List.map snd + |> List.filter (fun (flags2, _) -> flags = flags2) + |> List.map snd and seekReadoptional_MethodSemantics ctxt id = - match seekReadMultipleMethodSemantics ctxt id with + match seekReadMultipleMethodSemantics ctxt id with | [] -> None | [h] -> Some h | h :: _ -> dprintn "multiple method semantics found"; Some h and seekReadMethodSemantics ctxt id = - match seekReadoptional_MethodSemantics ctxt id with + match seekReadoptional_MethodSemantics ctxt id with | None -> failwith "seekReadMethodSemantics ctxt: no method found" | Some x -> x @@ -2357,23 +2399,23 @@ and seekReadEvent ctxt mdv numtypars idx = otherMethods = seekReadMultipleMethodSemantics ctxt (0x0004, TaggedIndex(hs_Event, idx)), customAttrsStored=ctxt.customAttrsReader_Event, metadataIndex = idx ) - + (* REVIEW: can substantially reduce numbers of EventMap and PropertyMap reads by first checking if the whole table mdv sorted according to ILTypeDef tokens and then doing a binary chop *) and seekReadEvents (ctxt: ILMetadataReader) numtypars tidx = - mkILEventsLazy - (lazy + mkILEventsLazy + (lazy let mdv = ctxt.mdfile.GetView() - match seekReadOptionalIndexedRow (ctxt.getNumRows TableNames.EventMap, (fun i -> i, seekReadEventMapRow ctxt mdv i), (fun (_, row) -> fst row), compare tidx, false, (fun (i, row) -> (i, snd row))) with + match seekReadOptionalIndexedRow (ctxt.getNumRows TableNames.EventMap, (fun i -> i, seekReadEventMapRow ctxt mdv i), (fun (_, row) -> fst row), compare tidx, false, (fun (i, row) -> (i, snd row))) with | None -> [] | Some (rowNum, beginEventIdx) -> let endEventIdx = - if rowNum >= ctxt.getNumRows TableNames.EventMap then + if rowNum >= ctxt.getNumRows TableNames.EventMap then ctxt.getNumRows TableNames.Event + 1 else let (_, endEventIdx) = seekReadEventMapRow ctxt mdv (rowNum + 1) endEventIdx - [ if beginEventIdx > 0 then + [ if beginEventIdx > 0 then for i in beginEventIdx .. endEventIdx - 1 do yield seekReadEvent ctxt mdv numtypars i ]) @@ -2385,10 +2427,10 @@ and seekReadProperty ctxt mdv numtypars idx = (* NOTE: the "ThisConv" value on the property is not reliable: better to look on the getter/setter *) (* NOTE: e.g. tlbimp on Office msword.olb seems to set this incorrectly *) let cc2 = - match getter with + match getter with | Some mref -> mref.CallingConv.ThisConv - | None -> - match setter with + | None -> + match setter with | Some mref -> mref.CallingConv .ThisConv | None -> cc @@ -2402,28 +2444,28 @@ and seekReadProperty ctxt mdv numtypars idx = args=argtys, customAttrsStored=ctxt.customAttrsReader_Property, metadataIndex = idx ) - + and seekReadProperties (ctxt: ILMetadataReader) numtypars tidx = mkILPropertiesLazy - (lazy + (lazy let mdv = ctxt.mdfile.GetView() - match seekReadOptionalIndexedRow (ctxt.getNumRows TableNames.PropertyMap, (fun i -> i, seekReadPropertyMapRow ctxt mdv i), (fun (_, row) -> fst row), compare tidx, false, (fun (i, row) -> (i, snd row))) with + match seekReadOptionalIndexedRow (ctxt.getNumRows TableNames.PropertyMap, (fun i -> i, seekReadPropertyMapRow ctxt mdv i), (fun (_, row) -> fst row), compare tidx, false, (fun (i, row) -> (i, snd row))) with | None -> [] | Some (rowNum, beginPropIdx) -> let endPropIdx = - if rowNum >= ctxt.getNumRows TableNames.PropertyMap then + if rowNum >= ctxt.getNumRows TableNames.PropertyMap then ctxt.getNumRows TableNames.Property + 1 else let (_, endPropIdx) = seekReadPropertyMapRow ctxt mdv (rowNum + 1) endPropIdx - [ if beginPropIdx > 0 then + [ if beginPropIdx > 0 then for i in beginPropIdx .. endPropIdx - 1 do yield seekReadProperty ctxt mdv numtypars i ]) -and customAttrsReader ctxtH tag: ILAttributesStored = +and customAttrsReader ctxtH tag: ILAttributesStored = mkILCustomAttrsReader - (fun idx -> + (fun idx -> let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() let reader = @@ -2435,10 +2477,10 @@ and customAttrsReader ctxtH tag: ILAttributesStored = } seekReadIndexedRowsByInterface (ctxt.getNumRows TableNames.CustomAttribute) (isSorted ctxt TableNames.CustomAttribute) reader) -and seekReadCustomAttr ctxt (TaggedIndex(cat, idx), b) = +and seekReadCustomAttr ctxt (TaggedIndex(cat, idx), b) = ctxt.seekReadCustomAttr (CustomAttrIdx (cat, idx, b)) -and seekReadCustomAttrUncached ctxtH (CustomAttrIdx (cat, idx, valIdx)) = +and seekReadCustomAttrUncached ctxtH (CustomAttrIdx (cat, idx, valIdx)) = let ctxt = getHole ctxtH let method = seekReadCustomAttrType ctxt (TaggedIndex(cat, idx)) let data = @@ -2448,115 +2490,116 @@ and seekReadCustomAttrUncached ctxtH (CustomAttrIdx (cat, idx, valIdx)) = let elements = [] ILAttribute.Encoded (method, data, elements) -and securityDeclsReader ctxtH tag = +and securityDeclsReader ctxtH tag = mkILSecurityDeclsReader - (fun idx -> + (fun idx -> let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() - seekReadIndexedRows (ctxt.getNumRows TableNames.Permission, - seekReadPermissionRow ctxt mdv, - (fun (_, par, _) -> par), - hdsCompare (TaggedIndex(tag,idx)), - isSorted ctxt TableNames.Permission, + seekReadIndexedRows (ctxt.getNumRows TableNames.Permission, + seekReadPermissionRow ctxt mdv, + (fun (_, par, _) -> par), + hdsCompare (TaggedIndex(tag,idx)), + isSorted ctxt TableNames.Permission, (fun (act, _, ty) -> seekReadSecurityDecl ctxt (act, ty))) |> List.toArray) -and seekReadSecurityDecl ctxt (act, ty) = - ILSecurityDecl ((if List.memAssoc (int act) (Lazy.force ILSecurityActionRevMap) then List.assoc (int act) (Lazy.force ILSecurityActionRevMap) else failwith "unknown security action"), +and seekReadSecurityDecl ctxt (act, ty) = + ILSecurityDecl ((if List.memAssoc (int act) (Lazy.force ILSecurityActionRevMap) then List.assoc (int act) (Lazy.force ILSecurityActionRevMap) else failwith "unknown security action"), readBlobHeap ctxt ty) and seekReadConstant (ctxt: ILMetadataReader) idx = - let kind, vidx = seekReadIndexedRow (ctxt.getNumRows TableNames.Constant, - seekReadConstantRow ctxt, - (fun (_, key, _) -> key), + let kind, vidx = seekReadIndexedRow (ctxt.getNumRows TableNames.Constant, + seekReadConstantRow ctxt, + (fun (_, key, _) -> key), hcCompare idx, isSorted ctxt TableNames.Constant, (fun (kind, _, v) -> kind, v)) - match kind with - | x when x = uint16 et_STRING -> + match kind with + | x when x = uint16 et_STRING -> let blobHeap = readBlobHeap ctxt vidx let s = System.Text.Encoding.Unicode.GetString(blobHeap, 0, blobHeap.Length) - ILFieldInit.String s - | x when x = uint16 et_BOOLEAN -> ILFieldInit.Bool (readBlobHeapAsBool ctxt vidx) - | x when x = uint16 et_CHAR -> ILFieldInit.Char (readBlobHeapAsUInt16 ctxt vidx) - | x when x = uint16 et_I1 -> ILFieldInit.Int8 (readBlobHeapAsSByte ctxt vidx) - | x when x = uint16 et_I2 -> ILFieldInit.Int16 (readBlobHeapAsInt16 ctxt vidx) - | x when x = uint16 et_I4 -> ILFieldInit.Int32 (readBlobHeapAsInt32 ctxt vidx) - | x when x = uint16 et_I8 -> ILFieldInit.Int64 (readBlobHeapAsInt64 ctxt vidx) - | x when x = uint16 et_U1 -> ILFieldInit.UInt8 (readBlobHeapAsByte ctxt vidx) - | x when x = uint16 et_U2 -> ILFieldInit.UInt16 (readBlobHeapAsUInt16 ctxt vidx) - | x when x = uint16 et_U4 -> ILFieldInit.UInt32 (readBlobHeapAsUInt32 ctxt vidx) - | x when x = uint16 et_U8 -> ILFieldInit.UInt64 (readBlobHeapAsUInt64 ctxt vidx) - | x when x = uint16 et_R4 -> ILFieldInit.Single (readBlobHeapAsSingle ctxt vidx) - | x when x = uint16 et_R8 -> ILFieldInit.Double (readBlobHeapAsDouble ctxt vidx) + ILFieldInit.String s + | x when x = uint16 et_BOOLEAN -> ILFieldInit.Bool (readBlobHeapAsBool ctxt vidx) + | x when x = uint16 et_CHAR -> ILFieldInit.Char (readBlobHeapAsUInt16 ctxt vidx) + | x when x = uint16 et_I1 -> ILFieldInit.Int8 (readBlobHeapAsSByte ctxt vidx) + | x when x = uint16 et_I2 -> ILFieldInit.Int16 (readBlobHeapAsInt16 ctxt vidx) + | x when x = uint16 et_I4 -> ILFieldInit.Int32 (readBlobHeapAsInt32 ctxt vidx) + | x when x = uint16 et_I8 -> ILFieldInit.Int64 (readBlobHeapAsInt64 ctxt vidx) + | x when x = uint16 et_U1 -> ILFieldInit.UInt8 (readBlobHeapAsByte ctxt vidx) + | x when x = uint16 et_U2 -> ILFieldInit.UInt16 (readBlobHeapAsUInt16 ctxt vidx) + | x when x = uint16 et_U4 -> ILFieldInit.UInt32 (readBlobHeapAsUInt32 ctxt vidx) + | x when x = uint16 et_U8 -> ILFieldInit.UInt64 (readBlobHeapAsUInt64 ctxt vidx) + | x when x = uint16 et_R4 -> ILFieldInit.Single (readBlobHeapAsSingle ctxt vidx) + | x when x = uint16 et_R8 -> ILFieldInit.Double (readBlobHeapAsDouble ctxt vidx) | x when x = uint16 et_CLASS || x = uint16 et_OBJECT -> ILFieldInit.Null | _ -> ILFieldInit.Null -and seekReadImplMap (ctxt: ILMetadataReader) nm midx = - mkMethBodyLazyAux - (lazy +and seekReadImplMap (ctxt: ILMetadataReader) nm midx = + lazy + MethodBody.PInvoke + (lazy let mdv = ctxt.mdfile.GetView() - let (flags, nameIdx, scopeIdx) = seekReadIndexedRow (ctxt.getNumRows TableNames.ImplMap, - seekReadImplMapRow ctxt mdv, - (fun (_, m, _, _) -> m), - mfCompare (TaggedIndex(mf_MethodDef, midx)), - isSorted ctxt TableNames.ImplMap, + let (flags, nameIdx, scopeIdx) = seekReadIndexedRow (ctxt.getNumRows TableNames.ImplMap, + seekReadImplMapRow ctxt mdv, + (fun (_, m, _, _) -> m), + mfCompare (TaggedIndex(mf_MethodDef, midx)), + isSorted ctxt TableNames.ImplMap, (fun (a, _, c, d) -> a, c, d)) - let cc = + let cc = let masked = flags &&& 0x0700 - if masked = 0x0000 then PInvokeCallingConvention.None - elif masked = 0x0200 then PInvokeCallingConvention.Cdecl - elif masked = 0x0300 then PInvokeCallingConvention.Stdcall - elif masked = 0x0400 then PInvokeCallingConvention.Thiscall - elif masked = 0x0500 then PInvokeCallingConvention.Fastcall - elif masked = 0x0100 then PInvokeCallingConvention.WinApi + if masked = 0x0000 then PInvokeCallingConvention.None + elif masked = 0x0200 then PInvokeCallingConvention.Cdecl + elif masked = 0x0300 then PInvokeCallingConvention.Stdcall + elif masked = 0x0400 then PInvokeCallingConvention.Thiscall + elif masked = 0x0500 then PInvokeCallingConvention.Fastcall + elif masked = 0x0100 then PInvokeCallingConvention.WinApi else (dprintn "strange CallingConv"; PInvokeCallingConvention.None) - let enc = + let enc = let masked = flags &&& 0x0006 - if masked = 0x0000 then PInvokeCharEncoding.None - elif masked = 0x0002 then PInvokeCharEncoding.Ansi - elif masked = 0x0004 then PInvokeCharEncoding.Unicode - elif masked = 0x0006 then PInvokeCharEncoding.Auto + if masked = 0x0000 then PInvokeCharEncoding.None + elif masked = 0x0002 then PInvokeCharEncoding.Ansi + elif masked = 0x0004 then PInvokeCharEncoding.Unicode + elif masked = 0x0006 then PInvokeCharEncoding.Auto else (dprintn "strange CharEncoding"; PInvokeCharEncoding.None) - let bestfit = + let bestfit = let masked = flags &&& 0x0030 - if masked = 0x0000 then PInvokeCharBestFit.UseAssembly - elif masked = 0x0010 then PInvokeCharBestFit.Enabled - elif masked = 0x0020 then PInvokeCharBestFit.Disabled + if masked = 0x0000 then PInvokeCharBestFit.UseAssembly + elif masked = 0x0010 then PInvokeCharBestFit.Enabled + elif masked = 0x0020 then PInvokeCharBestFit.Disabled else (dprintn "strange CharBestFit"; PInvokeCharBestFit.UseAssembly) - let unmap = + let unmap = let masked = flags &&& 0x3000 - if masked = 0x0000 then PInvokeThrowOnUnmappableChar.UseAssembly - elif masked = 0x1000 then PInvokeThrowOnUnmappableChar.Enabled - elif masked = 0x2000 then PInvokeThrowOnUnmappableChar.Disabled + if masked = 0x0000 then PInvokeThrowOnUnmappableChar.UseAssembly + elif masked = 0x1000 then PInvokeThrowOnUnmappableChar.Enabled + elif masked = 0x2000 then PInvokeThrowOnUnmappableChar.Disabled else (dprintn "strange ThrowOnUnmappableChar"; PInvokeThrowOnUnmappableChar.UseAssembly) - MethodBody.PInvoke { CallingConv = cc - CharEncoding = enc - CharBestFit=bestfit - ThrowOnUnmappableChar=unmap - NoMangle = (flags &&& 0x0001) <> 0x0 - LastError = (flags &&& 0x0040) <> 0x0 - Name = - (match readStringHeapOption ctxt nameIdx with - | None -> nm - | Some nm2 -> nm2) - Where = seekReadModuleRef ctxt mdv scopeIdx }) - -and seekReadTopCode (ctxt: ILMetadataReader) pev mdv numtypars (sz: int) start seqpoints = + { CallingConv = cc + CharEncoding = enc + CharBestFit=bestfit + ThrowOnUnmappableChar=unmap + NoMangle = (flags &&& 0x0001) <> 0x0 + LastError = (flags &&& 0x0040) <> 0x0 + Name = + (match readStringHeapOption ctxt nameIdx with + | None -> nm + | Some nm2 -> nm2) + Where = seekReadModuleRef ctxt mdv scopeIdx }) + +and seekReadTopCode (ctxt: ILMetadataReader) pev mdv numtypars (sz: int) start seqpoints = let labelsOfRawOffsets = new Dictionary<_, _>(sz/2) let ilOffsetsOfLabels = new Dictionary<_, _>(sz/2) - - let rawToLabel rawOffset = - match labelsOfRawOffsets.TryGetValue rawOffset with + + let rawToLabel rawOffset = + match labelsOfRawOffsets.TryGetValue rawOffset with | true, l -> l - | _ -> + | _ -> let lab = generateCodeLabel() labelsOfRawOffsets.[rawOffset] <- lab lab - let markAsInstructionStart rawOffset ilOffset = + let markAsInstructionStart rawOffset ilOffset = let lab = rawToLabel rawOffset ilOffsetsOfLabels.[lab] <- ilOffset @@ -2566,15 +2609,15 @@ and seekReadTopCode (ctxt: ILMetadataReader) pev mdv numtypars (sz: int) start s let lastb = ref 0x0 let lastb2 = ref 0x0 let b = ref 0x0 - let get () = + let get () = lastb := seekReadByteAsInt32 pev (start + (!curr)) incr curr - b := - if !lastb = 0xfe && !curr < sz then + b := + if !lastb = 0xfe && !curr < sz then lastb2 := seekReadByteAsInt32 pev (start + (!curr)) incr curr !lastb2 - else + else !lastb let seqPointsRemaining = ref seqpoints @@ -2583,26 +2626,26 @@ and seekReadTopCode (ctxt: ILMetadataReader) pev mdv numtypars (sz: int) start s // registering "+string !curr+" as start of an instruction") markAsInstructionStart !curr ibuf.Count - // Insert any sequence points into the instruction sequence - while - (match !seqPointsRemaining with + // Insert any sequence points into the instruction sequence + while + (match !seqPointsRemaining with | (i, _tag) :: _rest when i <= !curr -> true - | _ -> false) + | _ -> false) do - // Emitting one sequence point + // Emitting one sequence point let (_, tag) = List.head !seqPointsRemaining seqPointsRemaining := List.tail !seqPointsRemaining ibuf.Add (I_seqpoint tag) - // Read the prefixes. Leave lastb and lastb2 holding the instruction byte(s) - begin + // Read the prefixes. Leave lastb and lastb2 holding the instruction byte(s) + begin prefixes.al <- Aligned prefixes.tl <- Normalcall prefixes.vol <- Nonvolatile prefixes.ro<-NormalAddress prefixes.constrained<-None get () - while !curr < sz && + while !curr < sz && !lastb = 0xfe && (!b = (i_constrained &&& 0xff) || !b = (i_readonly &&& 0xff) || @@ -2614,13 +2657,13 @@ and seekReadTopCode (ctxt: ILMetadataReader) pev mdv numtypars (sz: int) start s let unal = seekReadByteAsInt32 pev (start + (!curr)) incr curr prefixes.al <- - if unal = 0x1 then Unaligned1 + if unal = 0x1 then Unaligned1 elif unal = 0x2 then Unaligned2 - elif unal = 0x4 then Unaligned4 + elif unal = 0x4 then Unaligned4 else (dprintn "bad alignment for unaligned"; Aligned) elif !b = (i_volatile &&& 0xff) then prefixes.vol <- Volatile elif !b = (i_readonly &&& 0xff) then prefixes.ro <- ReadonlyAddress - elif !b = (i_constrained &&& 0xff) then + elif !b = (i_constrained &&& 0xff) then let uncoded = seekReadUncodedToken pev (start + (!curr)) curr := !curr + 4 let ty = seekReadTypeDefOrRef ctxt numtypars AsObject [] (uncodedTokenToTypeDefOrRefOrSpec uncoded) @@ -2631,23 +2674,23 @@ and seekReadTopCode (ctxt: ILMetadataReader) pev mdv numtypars (sz: int) start s end // data for instruction begins at "+string !curr - // Read and decode the instruction - if (!curr <= sz) then - let idecoder = + // Read and decode the instruction + if (!curr <= sz) then + let idecoder = if !lastb = 0xfe then getTwoByteInstr ( !lastb2) else getOneByteInstr ( !lastb) - let instr = - match idecoder with - | I_u16_u8_instr f -> + let instr = + match idecoder with + | I_u16_u8_instr f -> let x = seekReadByte pev (start + (!curr)) |> uint16 curr := !curr + 1 f prefixes x - | I_u16_u16_instr f -> + | I_u16_u16_instr f -> let x = seekReadUInt16 pev (start + (!curr)) curr := !curr + 2 f prefixes x - | I_none_instr f -> - f prefixes + | I_none_instr f -> + f prefixes | I_i64_instr f -> let x = seekReadInt64 pev (start + (!curr)) curr := !curr + 8 @@ -2671,8 +2714,8 @@ and seekReadTopCode (ctxt: ILMetadataReader) pev mdv numtypars (sz: int) start s | I_field_instr f -> let (tab, tok) = seekReadUncodedToken pev (start + (!curr)) curr := !curr + 4 - let fspec = - if tab = TableNames.Field then + let fspec = + if tab = TableNames.Field then seekReadFieldDefAsFieldSpec ctxt tok elif tab = TableNames.MemberRef then seekReadMemberRefAsFieldSpec ctxt numtypars tok @@ -2680,17 +2723,17 @@ and seekReadTopCode (ctxt: ILMetadataReader) pev mdv numtypars (sz: int) start s f prefixes fspec | I_method_instr f -> // method instruction, curr = "+string !curr - + let (tab, idx) = seekReadUncodedToken pev (start + (!curr)) curr := !curr + 4 let (VarArgMethodData(enclTy, cc, nm, argtys, varargs, retty, minst)) = - if tab = TableNames.Method then + if tab = TableNames.Method then seekReadMethodDefOrRef ctxt numtypars (TaggedIndex(mdor_MethodDef, idx)) - elif tab = TableNames.MemberRef then + elif tab = TableNames.MemberRef then seekReadMethodDefOrRef ctxt numtypars (TaggedIndex(mdor_MemberRef, idx)) - elif tab = TableNames.MethodSpec then - seekReadMethodSpecAsMethodData ctxt numtypars idx - else failwith "bad table in MethodDefOrRefOrSpec" + elif tab = TableNames.MethodSpec then + seekReadMethodSpecAsMethodData ctxt numtypars idx + else failwith "bad table in MethodDefOrRefOrSpec" match enclTy with | ILType.Array (shape, ty) -> match nm with @@ -2733,141 +2776,152 @@ and seekReadTopCode (ctxt: ILMetadataReader) pev mdv numtypars (sz: int) start s curr := !curr + 1 let dest = !curr + offsDest f prefixes (rawToLabel dest) - | I_invalid_instr -> - dprintn ("invalid instruction: "+string !lastb+ (if !lastb = 0xfe then ", "+string !lastb2 else "")) + | I_invalid_instr -> + dprintn ("invalid instruction: "+string !lastb+ (if !lastb = 0xfe then ", "+string !lastb2 else "")) I_ret - | I_tok_instr f -> + | I_tok_instr f -> let (tab, idx) = seekReadUncodedToken pev (start + (!curr)) curr := !curr + 4 - (* REVIEW: this incorrectly labels all MemberRef tokens as ILMethod's: we should go look at the MemberRef sig to determine if it is a field or method *) - let token_info = - if tab = TableNames.Method || tab = TableNames.MemberRef (* REVIEW: generics or tab = TableNames.MethodSpec *) then + (* REVIEW: this incorrectly labels all MemberRef tokens as ILMethod's: we should go look at the MemberRef sig to determine if it is a field or method *) + let token_info = + if tab = TableNames.Method || tab = TableNames.MemberRef (* REVIEW: generics or tab = TableNames.MethodSpec *) then let (MethodData(enclTy, cc, nm, argtys, retty, minst)) = seekReadMethodDefOrRefNoVarargs ctxt numtypars (uncodedTokenToMethodDefOrRef (tab, idx)) ILToken.ILMethod (mkILMethSpecInTy (enclTy, cc, nm, argtys, retty, minst)) - elif tab = TableNames.Field then + elif tab = TableNames.Field then ILToken.ILField (seekReadFieldDefAsFieldSpec ctxt idx) - elif tab = TableNames.TypeDef || tab = TableNames.TypeRef || tab = TableNames.TypeSpec then - ILToken.ILType (seekReadTypeDefOrRef ctxt numtypars AsObject [] (uncodedTokenToTypeDefOrRefOrSpec (tab, idx))) - else failwith "bad token for ldtoken" + elif tab = TableNames.TypeDef || tab = TableNames.TypeRef || tab = TableNames.TypeSpec then + ILToken.ILType (seekReadTypeDefOrRef ctxt numtypars AsObject [] (uncodedTokenToTypeDefOrRefOrSpec (tab, idx))) + else failwith "bad token for ldtoken" f prefixes token_info - | I_sig_instr f -> + | I_sig_instr f -> let (tab, idx) = seekReadUncodedToken pev (start + (!curr)) curr := !curr + 4 if tab <> TableNames.StandAloneSig then dprintn "strange table for callsig token" let generic, _genarity, cc, retty, argtys, varargs = readBlobHeapAsMethodSig ctxt numtypars (seekReadStandAloneSigRow ctxt mdv idx) if generic then failwith "bad image: a generic method signature is begin used at a calli instruction" f prefixes (mkILCallSig (cc, argtys, retty), varargs) - | I_switch_instr f -> + | I_switch_instr f -> let n = (seekReadInt32 pev (start + (!curr))) curr := !curr + 4 - let offsets = - List.init n (fun _ -> + let offsets = + List.init n (fun _ -> let i = (seekReadInt32 pev (start + (!curr))) - curr := !curr + 4 - i) + curr := !curr + 4 + i) let dests = List.map (fun offs -> rawToLabel (!curr + offs)) offsets f prefixes dests ibuf.Add instr done - // Finished reading instructions - mark the end of the instruction stream in case the PDB information refers to it. + // Finished reading instructions - mark the end of the instruction stream in case the PDB information refers to it. markAsInstructionStart !curr ibuf.Count - // Build the function that maps from raw labels (offsets into the bytecode stream) to indexes in the AbsIL instruction stream + // Build the function that maps from raw labels (offsets into the bytecode stream) to indexes in the AbsIL instruction stream let lab2pc = ilOffsetsOfLabels - // Some offsets used in debug info refer to the end of an instruction, rather than the - // start of the subsequent instruction. But all labels refer to instruction starts, - // apart from a final label which refers to the end of the method. This function finds - // the start of the next instruction referred to by the raw offset. - let raw2nextLab rawOffset = - let isInstrStart x = - match labelsOfRawOffsets.TryGetValue x with + // Some offsets used in debug info refer to the end of an instruction, rather than the + // start of the subsequent instruction. But all labels refer to instruction starts, + // apart from a final label which refers to the end of the method. This function finds + // the start of the next instruction referred to by the raw offset. + let raw2nextLab rawOffset = + let isInstrStart x = + match labelsOfRawOffsets.TryGetValue x with | true, lab -> ilOffsetsOfLabels.ContainsKey lab | _ -> false - if isInstrStart rawOffset then rawToLabel rawOffset + if isInstrStart rawOffset then rawToLabel rawOffset elif isInstrStart (rawOffset+1) then rawToLabel (rawOffset+1) else failwith ("the bytecode raw offset "+string rawOffset+" did not refer either to the start or end of an instruction") let instrs = ibuf.ToArray() instrs, rawToLabel, lab2pc, raw2nextLab #if FX_NO_PDB_READER -and seekReadMethodRVA (pectxt: PEReader) (ctxt: ILMetadataReader) (_idx, nm, _internalcall, noinline, aggressiveinline, numtypars) rva = +and seekReadMethodRVA (pectxt: PEReader) (ctxt: ILMetadataReader) (_idx, nm, _internalcall, noinline, aggressiveinline, numtypars) rva = #else -and seekReadMethodRVA (pectxt: PEReader) (ctxt: ILMetadataReader) (idx, nm, _internalcall, noinline, aggressiveinline, numtypars) rva = +and seekReadMethodRVA (pectxt: PEReader) (ctxt: ILMetadataReader) (idx, nm, _internalcall, noinline, aggressiveinline, numtypars) rva = #endif - mkMethBodyLazyAux + lazy + let pev = pectxt.pefile.GetView() + let baseRVA = pectxt.anyV2P("method rva", rva) + // ": reading body of method "+nm+" at rva "+string rva+", phys "+string baseRVA + let b = seekReadByte pev baseRVA + + let isTinyFormat = (b &&& e_CorILMethod_FormatMask) = e_CorILMethod_TinyFormat + let isFatFormat = (b &&& e_CorILMethod_FormatMask) = e_CorILMethod_FatFormat + + if not isTinyFormat && not isFatFormat then + if logging then failwith "unknown format" + MethodBody.Abstract + else + + MethodBody.IL (lazy let pev = pectxt.pefile.GetView() let mdv = ctxt.mdfile.GetView() - // Read any debug information for this method into temporary data structures - // -- a list of locals, marked with the raw offsets (actually closures which accept the resolution function that maps raw offsets to labels) - // -- an overall range for the method - // -- the sequence points for the method - let localPdbInfos, methRangePdbInfo, seqpoints = + // Read any debug information for this method into temporary data structures + // -- a list of locals, marked with the raw offsets (actually closures which accept the resolution function that maps raw offsets to labels) + // -- an overall range for the method + // -- the sequence points for the method + let localPdbInfos, methRangePdbInfo, seqpoints = #if FX_NO_PDB_READER [], None, [] #else - match pectxt.pdb with - | None -> + match pectxt.pdb with + | None -> [], None, [] - | Some (pdbr, get_doc) -> - try + | Some (pdbr, get_doc) -> + try let pdbm = pdbReaderGetMethod pdbr (uncodedToken TableNames.Method idx) let sps = pdbMethodGetSequencePoints pdbm (* let roota, rootb = pdbScopeGetOffsets rootScope in *) let seqpoints = - let arr = - sps |> Array.map (fun sp -> + let arr = + sps |> Array.map (fun sp -> // It is VERY annoying to have to call GetURL for the document for // each sequence point. This appears to be a short coming of the PDB // reader API. They should return an index into the array of documents for the reader let sourcedoc = get_doc (pdbDocumentGetURL sp.pdbSeqPointDocument) - let source = - ILSourceMarker.Create(document = sourcedoc, - line = sp.pdbSeqPointLine, - column = sp.pdbSeqPointColumn, - endLine = sp.pdbSeqPointEndLine, + let source = + ILSourceMarker.Create(document = sourcedoc, + line = sp.pdbSeqPointLine, + column = sp.pdbSeqPointColumn, + endLine = sp.pdbSeqPointEndLine, endColumn = sp.pdbSeqPointEndColumn) (sp.pdbSeqPointOffset, source)) - + Array.sortInPlaceBy fst arr - + Array.toList arr - let rec scopes scp = + let rec scopes scp = let a, b = pdbScopeGetOffsets scp let lvs = pdbScopeGetLocals scp - let ilvs = - lvs - |> Array.toList - |> List.filter (fun l -> + let ilvs = + lvs + |> Array.toList + |> List.filter (fun l -> let k, _idx = pdbVariableGetAddressAttributes l - k = 1 (* ADDR_IL_OFFSET *)) + k = 1 (* ADDR_IL_OFFSET *)) let ilinfos: ILLocalDebugMapping list = - ilvs |> List.map (fun ilv -> + ilvs |> List.map (fun ilv -> let _k, idx = pdbVariableGetAddressAttributes ilv let n = pdbVariableGetName ilv - { LocalIndex= idx + { LocalIndex= idx LocalName=n}) - - let thisOne = + + let thisOne = (fun raw2nextLab -> - { Range= (raw2nextLab a, raw2nextLab b) + { Range= (raw2nextLab a, raw2nextLab b) DebugMappings = ilinfos }: ILLocalDebugInfo ) let others = List.foldBack (scopes >> (@)) (Array.toList (pdbScopeGetChildren scp)) [] thisOne :: others let localPdbInfos = [] (* scopes fail for mscorlib scopes rootScope *) - // REVIEW: look through sps to get ranges? Use GetRanges?? Change AbsIL?? + // REVIEW: look through sps to get ranges? Use GetRanges?? Change AbsIL?? (localPdbInfos, None, seqpoints) - with e -> + with e -> // "* Warning: PDB info for method "+nm+" could not be read and will be ignored: "+e.Message [], None, [] #endif - - let baseRVA = pectxt.anyV2P("method rva", rva) - // ": reading body of method "+nm+" at rva "+string rva+", phys "+string baseRVA - let b = seekReadByte pev baseRVA - if (b &&& e_CorILMethod_FormatMask) = e_CorILMethod_TinyFormat then + + if isTinyFormat then let codeBase = baseRVA + 1 let codeSize = (int32 b >>>& 2) // tiny format for "+nm+", code size = " + string codeSize) @@ -2875,35 +2929,34 @@ and seekReadMethodRVA (pectxt: PEReader) (ctxt: ILMetadataReader) (idx, nm, _int (* Convert the linear code format to the nested code format *) let localPdbInfos2 = List.map (fun f -> f raw2nextLab) localPdbInfos let code = buildILCode nm lab2pc instrs [] localPdbInfos2 - MethodBody.IL - { IsZeroInit=false - MaxStack= 8 - NoInlining=noinline - AggressiveInlining=aggressiveinline - Locals=List.empty - SourceMarker=methRangePdbInfo - Code=code } - - elif (b &&& e_CorILMethod_FormatMask) = e_CorILMethod_FatFormat then + { IsZeroInit=false + MaxStack= 8 + NoInlining=noinline + AggressiveInlining=aggressiveinline + Locals=List.empty + SourceMarker=methRangePdbInfo + Code=code } + + else let hasMoreSections = (b &&& e_CorILMethod_MoreSects) <> 0x0uy let initlocals = (b &&& e_CorILMethod_InitLocals) <> 0x0uy let maxstack = seekReadUInt16AsInt32 pev (baseRVA + 2) let codeSize = seekReadInt32 pev (baseRVA + 4) let localsTab, localToken = seekReadUncodedToken pev (baseRVA + 8) let codeBase = baseRVA + 12 - let locals = - if localToken = 0x0 then [] - else + let locals = + if localToken = 0x0 then [] + else if localsTab <> TableNames.StandAloneSig then dprintn "strange table for locals token" - readBlobHeapAsLocalsSig ctxt numtypars (seekReadStandAloneSigRow ctxt pev localToken) - + readBlobHeapAsLocalsSig ctxt numtypars (seekReadStandAloneSigRow ctxt pev localToken) + // fat format for "+nm+", code size = " + string codeSize+", hasMoreSections = "+(if hasMoreSections then "true" else "false")+", b = "+string b) - - // Read the method body + + // Read the method body let instrs, rawToLabel, lab2pc, raw2nextLab = seekReadTopCode ctxt pev mdv numtypars ( codeSize) codeBase seqpoints - // Read all the sections that follow the method body. - // These contain the exception clauses. + // Read all the sections that follow the method body. + // These contain the exception clauses. let nextSectionBase = ref (align 4 (codeBase + codeSize)) let moreSections = ref hasMoreSections let seh = ref [] @@ -2911,18 +2964,18 @@ and seekReadMethodRVA (pectxt: PEReader) (ctxt: ILMetadataReader) (idx, nm, _int let sectionBase = !nextSectionBase let sectionFlag = seekReadByte pev sectionBase // fat format for "+nm+", sectionFlag = " + string sectionFlag) - let sectionSize, clauses = - if (sectionFlag &&& e_CorILMethod_Sect_FatFormat) <> 0x0uy then + let sectionSize, clauses = + if (sectionFlag &&& e_CorILMethod_Sect_FatFormat) <> 0x0uy then let bigSize = (seekReadInt32 pev sectionBase) >>>& 8 // bigSize = "+string bigSize) - let clauses = - if (sectionFlag &&& e_CorILMethod_Sect_EHTable) <> 0x0uy then - // WORKAROUND: The ECMA spec says this should be - // let numClauses = ((bigSize - 4) / 24) in + let clauses = + if (sectionFlag &&& e_CorILMethod_Sect_EHTable) <> 0x0uy then + // WORKAROUND: The ECMA spec says this should be + // let numClauses = ((bigSize - 4) / 24) in // but the CCI IL generator generates multiples of 24 let numClauses = (bigSize / 24) - - List.init numClauses (fun i -> + + List.init numClauses (fun i -> let clauseBase = sectionBase + 4 + (i * 24) let kind = seekReadInt32 pev (clauseBase + 0) let st1 = seekReadInt32 pev (clauseBase + 4) @@ -2933,16 +2986,16 @@ and seekReadMethodRVA (pectxt: PEReader) (ctxt: ILMetadataReader) (idx, nm, _int (kind, st1, sz1, st2, sz2, extra)) else [] bigSize, clauses - else + else let smallSize = seekReadByteAsInt32 pev (sectionBase + 0x01) - let clauses = - if (sectionFlag &&& e_CorILMethod_Sect_EHTable) <> 0x0uy then - // WORKAROUND: The ECMA spec says this should be - // let numClauses = ((smallSize - 4) / 12) in - // but the C# compiler (or some IL generator) generates multiples of 12 + let clauses = + if (sectionFlag &&& e_CorILMethod_Sect_EHTable) <> 0x0uy then + // WORKAROUND: The ECMA spec says this should be + // let numClauses = ((smallSize - 4) / 12) in + // but the C# compiler (or some IL generator) generates multiples of 12 let numClauses = (smallSize / 12) // dprintn (nm+" has " + string numClauses + " tiny seh clauses") - List.init numClauses (fun i -> + List.init numClauses (fun i -> let clauseBase = sectionBase + 4 + (i * 12) let kind = seekReadUInt16AsInt32 pev (clauseBase + 0) if logging then dprintn ("One tiny SEH clause, kind = "+string kind) @@ -2952,129 +3005,125 @@ and seekReadMethodRVA (pectxt: PEReader) (ctxt: ILMetadataReader) (idx, nm, _int let sz2 = seekReadByteAsInt32 pev (clauseBase + 7) let extra = seekReadInt32 pev (clauseBase + 8) (kind, st1, sz1, st2, sz2, extra)) - else + else [] smallSize, clauses - // Morph together clauses that cover the same range - let sehClauses = - let sehMap = Dictionary<_, _>(clauses.Length, HashIdentity.Structural) - + // Morph together clauses that cover the same range + let sehClauses = + let sehMap = Dictionary<_, _>(clauses.Length, HashIdentity.Structural) + List.iter (fun (kind, st1, sz1, st2, sz2, extra) -> let tryStart = rawToLabel st1 let tryFinish = rawToLabel (st1 + sz1) let handlerStart = rawToLabel st2 let handlerFinish = rawToLabel (st2 + sz2) - let clause = - if kind = e_COR_ILEXCEPTION_CLAUSE_EXCEPTION then + let clause = + if kind = e_COR_ILEXCEPTION_CLAUSE_EXCEPTION then ILExceptionClause.TypeCatch(seekReadTypeDefOrRef ctxt numtypars AsObject List.empty (uncodedTokenToTypeDefOrRefOrSpec (i32ToUncodedToken extra)), (handlerStart, handlerFinish) ) - elif kind = e_COR_ILEXCEPTION_CLAUSE_FILTER then + elif kind = e_COR_ILEXCEPTION_CLAUSE_FILTER then let filterStart = rawToLabel extra let filterFinish = handlerStart ILExceptionClause.FilterCatch((filterStart, filterFinish), (handlerStart, handlerFinish)) - elif kind = e_COR_ILEXCEPTION_CLAUSE_FINALLY then + elif kind = e_COR_ILEXCEPTION_CLAUSE_FINALLY then ILExceptionClause.Finally(handlerStart, handlerFinish) - elif kind = e_COR_ILEXCEPTION_CLAUSE_FAULT then + elif kind = e_COR_ILEXCEPTION_CLAUSE_FAULT then ILExceptionClause.Fault(handlerStart, handlerFinish) else begin dprintn (ctxt.fileName + ": unknown exception handler kind: "+string kind) ILExceptionClause.Finally(handlerStart, handlerFinish) end - + let key = (tryStart, tryFinish) match sehMap.TryGetValue key with | true, prev -> sehMap.[key] <- prev @ [clause] | _ -> sehMap.[key] <- [clause]) clauses - ([], sehMap) ||> Seq.fold (fun acc (KeyValue(key, bs)) -> [ for b in bs -> {Range=key; Clause=b}: ILExceptionSpec ] @ acc) + ([], sehMap) ||> Seq.fold (fun acc (KeyValue(key, bs)) -> [ for b in bs -> {Range=key; Clause=b}: ILExceptionSpec ] @ acc) seh := sehClauses moreSections := (sectionFlag &&& e_CorILMethod_Sect_MoreSects) <> 0x0uy nextSectionBase := sectionBase + sectionSize done (* while *) (* Convert the linear code format to the nested code format *) - if logging then dprintn ("doing localPdbInfos2") + if logging then dprintn ("doing localPdbInfos2") let localPdbInfos2 = List.map (fun f -> f raw2nextLab) localPdbInfos - if logging then dprintn ("done localPdbInfos2, checking code...") + if logging then dprintn ("done localPdbInfos2, checking code...") let code = buildILCode nm lab2pc instrs !seh localPdbInfos2 - if logging then dprintn ("done checking code.") - MethodBody.IL - { IsZeroInit=initlocals - MaxStack= maxstack - NoInlining=noinline - AggressiveInlining=aggressiveinline - Locals = locals - Code=code - SourceMarker=methRangePdbInfo} - else - if logging then failwith "unknown format" - MethodBody.Abstract) - -and int32AsILVariantType (ctxt: ILMetadataReader) (n: int32) = - if List.memAssoc n (Lazy.force ILVariantTypeRevMap) then + if logging then dprintn ("done checking code.") + { IsZeroInit=initlocals + MaxStack= maxstack + NoInlining=noinline + AggressiveInlining=aggressiveinline + Locals = locals + Code=code + SourceMarker=methRangePdbInfo}) + +and int32AsILVariantType (ctxt: ILMetadataReader) (n: int32) = + if List.memAssoc n (Lazy.force ILVariantTypeRevMap) then List.assoc n (Lazy.force ILVariantTypeRevMap) elif (n &&& vt_ARRAY) <> 0x0 then ILNativeVariant.Array (int32AsILVariantType ctxt (n &&& (~~~ vt_ARRAY))) elif (n &&& vt_VECTOR) <> 0x0 then ILNativeVariant.Vector (int32AsILVariantType ctxt (n &&& (~~~ vt_VECTOR))) elif (n &&& vt_BYREF) <> 0x0 then ILNativeVariant.Byref (int32AsILVariantType ctxt (n &&& (~~~ vt_BYREF))) else (dprintn (ctxt.fileName + ": int32AsILVariantType ctxt: unexpected variant type, n = "+string n) ; ILNativeVariant.Empty) -and readBlobHeapAsNativeType ctxt blobIdx = - // reading native type blob "+string blobIdx) +and readBlobHeapAsNativeType ctxt blobIdx = + // reading native type blob "+string blobIdx) let bytes = readBlobHeap ctxt blobIdx let res, _ = sigptrGetILNativeType ctxt bytes 0 res -and sigptrGetILNativeType ctxt bytes sigptr = - // reading native type blob, sigptr= "+string sigptr) +and sigptrGetILNativeType ctxt bytes sigptr = + // reading native type blob, sigptr= "+string sigptr) let ntbyte, sigptr = sigptrGetByte bytes sigptr - if List.memAssoc ntbyte (Lazy.force ILNativeTypeMap) then + if List.memAssoc ntbyte (Lazy.force ILNativeTypeMap) then List.assoc ntbyte (Lazy.force ILNativeTypeMap), sigptr elif ntbyte = 0x0uy then ILNativeType.Empty, sigptr - elif ntbyte = nt_CUSTOMMARSHALER then - // reading native type blob CM1, sigptr= "+string sigptr+ ", bytes.Length = "+string bytes.Length) + elif ntbyte = nt_CUSTOMMARSHALER then + // reading native type blob CM1, sigptr= "+string sigptr+ ", bytes.Length = "+string bytes.Length) let struct (guidLen, sigptr) = sigptrGetZInt32 bytes sigptr - // reading native type blob CM2, sigptr= "+string sigptr+", guidLen = "+string ( guidLen)) + // reading native type blob CM2, sigptr= "+string sigptr+", guidLen = "+string ( guidLen)) let guid, sigptr = sigptrGetBytes ( guidLen) bytes sigptr - // reading native type blob CM3, sigptr= "+string sigptr) + // reading native type blob CM3, sigptr= "+string sigptr) let struct (nativeTypeNameLen, sigptr) = sigptrGetZInt32 bytes sigptr - // reading native type blob CM4, sigptr= "+string sigptr+", nativeTypeNameLen = "+string ( nativeTypeNameLen)) + // reading native type blob CM4, sigptr= "+string sigptr+", nativeTypeNameLen = "+string ( nativeTypeNameLen)) let nativeTypeName, sigptr = sigptrGetString ( nativeTypeNameLen) bytes sigptr - // reading native type blob CM4, sigptr= "+string sigptr+", nativeTypeName = "+nativeTypeName) - // reading native type blob CM5, sigptr= "+string sigptr) + // reading native type blob CM4, sigptr= "+string sigptr+", nativeTypeName = "+nativeTypeName) + // reading native type blob CM5, sigptr= "+string sigptr) let struct (custMarshallerNameLen, sigptr) = sigptrGetZInt32 bytes sigptr - // reading native type blob CM6, sigptr= "+string sigptr+", custMarshallerNameLen = "+string ( custMarshallerNameLen)) + // reading native type blob CM6, sigptr= "+string sigptr+", custMarshallerNameLen = "+string ( custMarshallerNameLen)) let custMarshallerName, sigptr = sigptrGetString ( custMarshallerNameLen) bytes sigptr - // reading native type blob CM7, sigptr= "+string sigptr+", custMarshallerName = "+custMarshallerName) + // reading native type blob CM7, sigptr= "+string sigptr+", custMarshallerName = "+custMarshallerName) let struct (cookieStringLen, sigptr) = sigptrGetZInt32 bytes sigptr - // reading native type blob CM8, sigptr= "+string sigptr+", cookieStringLen = "+string ( cookieStringLen)) + // reading native type blob CM8, sigptr= "+string sigptr+", cookieStringLen = "+string ( cookieStringLen)) let cookieString, sigptr = sigptrGetBytes ( cookieStringLen) bytes sigptr - // reading native type blob CM9, sigptr= "+string sigptr) + // reading native type blob CM9, sigptr= "+string sigptr) ILNativeType.Custom (guid, nativeTypeName, custMarshallerName, cookieString), sigptr - elif ntbyte = nt_FIXEDSYSSTRING then + elif ntbyte = nt_FIXEDSYSSTRING then let struct (i, sigptr) = sigptrGetZInt32 bytes sigptr ILNativeType.FixedSysString i, sigptr - elif ntbyte = nt_FIXEDARRAY then + elif ntbyte = nt_FIXEDARRAY then let struct (i, sigptr) = sigptrGetZInt32 bytes sigptr ILNativeType.FixedArray i, sigptr - elif ntbyte = nt_SAFEARRAY then + elif ntbyte = nt_SAFEARRAY then (if sigptr >= bytes.Length then ILNativeType.SafeArray(ILNativeVariant.Empty, None), sigptr - else + else let struct (i, sigptr) = sigptrGetZInt32 bytes sigptr if sigptr >= bytes.Length then ILNativeType.SafeArray (int32AsILVariantType ctxt i, None), sigptr - else + else let struct (len, sigptr) = sigptrGetZInt32 bytes sigptr let s, sigptr = sigptrGetString ( len) bytes sigptr ILNativeType.SafeArray (int32AsILVariantType ctxt i, Some s), sigptr) - elif ntbyte = nt_ARRAY then + elif ntbyte = nt_ARRAY then if sigptr >= bytes.Length then ILNativeType.Array(None, None), sigptr - else - let nt, sigptr = + else + let nt, sigptr = let struct (u, sigptr') = sigptrGetZInt32 bytes sigptr - if (u = int nt_MAX) then + if (u = int nt_MAX) then ILNativeType.Empty, sigptr' else // NOTE: go back to start and read native type @@ -3085,8 +3134,8 @@ and sigptrGetILNativeType ctxt bytes sigptr = let struct (pnum, sigptr) = sigptrGetZInt32 bytes sigptr if sigptr >= bytes.Length then ILNativeType.Array (Some nt, Some(pnum, None)), sigptr - else - let struct (additive, sigptr) = + else + let struct (additive, sigptr) = if sigptr >= bytes.Length then 0, sigptr else sigptrGetZInt32 bytes sigptr ILNativeType.Array (Some nt, Some(pnum, Some additive)), sigptr @@ -3094,20 +3143,20 @@ and sigptrGetILNativeType ctxt bytes sigptr = // Note, pectxtEager and pevEager must not be captured by the results of this function // As a result, reading the resource offsets in the physical file is done eagerly to avoid holding on to any resources -and seekReadManifestResources (ctxt: ILMetadataReader) canReduceMemory (mdv: BinaryView) (pectxtEager: PEReader) (pevEager: BinaryView) = +and seekReadManifestResources (ctxt: ILMetadataReader) canReduceMemory (mdv: BinaryView) (pectxtEager: PEReader) (pevEager: BinaryView) = mkILResources [ for i = 1 to ctxt.getNumRows TableNames.ManifestResource do let (offset, flags, nameIdx, implIdx) = seekReadManifestResourceRow ctxt mdv i let scoref = seekReadImplAsScopeRef ctxt mdv implIdx - let location = + let location = match scoref with | ILScopeRef.Local -> let start = pectxtEager.anyV2P ("resource", offset + pectxtEager.resourcesAddr) let resourceLength = seekReadInt32 pevEager start let offsetOfBytesFromStartOfPhysicalPEFile = start + 4 - let byteStorage = + let byteStorage = let bytes = pevEager.Slice(offsetOfBytesFromStartOfPhysicalPEFile, resourceLength) ByteStorage.FromByteMemoryAndCopy(bytes, useBackingMemoryMappedFile = canReduceMemory) ILResourceLocation.Local(byteStorage) @@ -3116,7 +3165,7 @@ and seekReadManifestResources (ctxt: ILMetadataReader) canReduceMemory (mdv: Bin | ILScopeRef.Assembly aref -> ILResourceLocation.Assembly aref | _ -> failwith "seekReadManifestResources: Invalid ILScopeRef" - let r = + let r = { Name= readStringHeap ctxt nameIdx Location = location Access = (if (flags &&& 0x01) <> 0x0 then ILResourceAccess.Public else ILResourceAccess.Private) @@ -3124,7 +3173,7 @@ and seekReadManifestResources (ctxt: ILMetadataReader) canReduceMemory (mdv: Bin MetadataIndex = i } yield r ] -and seekReadNestedExportedTypes ctxt (exported: _ []) (nested: Lazy<_ []>) parentIdx = +and seekReadNestedExportedTypes ctxt (exported: _ []) (nested: Lazy<_ []>) parentIdx = mkILNestedExportedTypesLazy (lazy nested.Force().[parentIdx-1] @@ -3139,8 +3188,8 @@ and seekReadNestedExportedTypes ctxt (exported: _ []) (nested: Lazy<_ []>) paren MetadataIndex = i } )) -and seekReadTopExportedTypes (ctxt: ILMetadataReader) = - mkILExportedTypesLazy +and seekReadTopExportedTypes (ctxt: ILMetadataReader) = + mkILExportedTypesLazy (lazy let mdv = ctxt.mdfile.GetView() let numRows = ctxt.getNumRows TableNames.ExportedType @@ -3172,21 +3221,21 @@ and seekReadTopExportedTypes (ctxt: ILMetadataReader) = ]) #if !FX_NO_PDB_READER -let getPdbReader pdbDirPath fileName = - match pdbDirPath with +let getPdbReader pdbDirPath fileName = + match pdbDirPath with | None -> None | Some pdbpath -> - try + try let pdbr = pdbReadOpen fileName pdbpath let pdbdocs = pdbReaderGetDocuments pdbr - + let tab = new Dictionary<_, _>(Array.length pdbdocs) - pdbdocs |> Array.iter (fun pdbdoc -> + pdbdocs |> Array.iter (fun pdbdoc -> let url = pdbDocumentGetURL pdbdoc tab.[url] <- - ILSourceDocument.Create(language=Some (pdbDocumentGetLanguage pdbdoc), - vendor = Some (pdbDocumentGetLanguageVendor pdbdoc), - documentType = Some (pdbDocumentGetType pdbdoc), + ILSourceDocument.Create(language=Some (pdbDocumentGetLanguage pdbdoc), + vendor = Some (pdbDocumentGetLanguageVendor pdbdoc), + documentType = Some (pdbDocumentGetType pdbdoc), file = url)) let docfun url = @@ -3194,11 +3243,11 @@ let getPdbReader pdbDirPath fileName = | true, doc -> doc | _ -> failwith ("Document with URL " + url + " not found in list of documents in the PDB file") Some (pdbr, docfun) - with e -> dprintn ("* Warning: PDB file could not be read and will be ignored: "+e.Message); None + with e -> dprintn ("* Warning: PDB file could not be read and will be ignored: "+e.Message); None #endif - + // Note, pectxtEager and pevEager must not be captured by the results of this function -let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, pectxtEager: PEReader, pevEager, pectxtCaptured, reduceMemoryUsage) = +let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, pectxtEager: PEReader, pevEager, pectxtCaptured, reduceMemoryUsage) = let mdv = mdfile.GetView() let magic = seekReadUInt16AsInt32 mdv metadataPhysLoc if magic <> 0x5342 then failwith (fileName + ": bad metadata magic number: " + string magic) @@ -3213,8 +3262,8 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p let numStreams = seekReadUInt16AsInt32 mdv (metadataPhysLoc + x + 2) let streamHeadersStart = (metadataPhysLoc + x + 4) - let tryFindStream name = - let rec look i pos = + let tryFindStream name = + let rec look i pos = if i >= numStreams then None else let offset = seekReadInt32 mdv (pos + 0) @@ -3222,30 +3271,30 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p let res = ref true let fin = ref false let n = ref 0 - // read and compare the stream name byte by byte - while (not !fin) do + // read and compare the stream name byte by byte + while (not !fin) do let c= seekReadByteAsInt32 mdv (pos + 8 + (!n)) - if c = 0 then + if c = 0 then fin := true - elif !n >= Array.length name || c <> name.[!n] then + elif !n >= Array.length name || c <> name.[!n] then res := false incr n - if !res then Some(offset + metadataPhysLoc, length) + if !res then Some(offset + metadataPhysLoc, length) else look (i+1) (align 0x04 (pos + 8 + (!n))) look 0 streamHeadersStart - let findStream name = + let findStream name = match tryFindStream name with | None -> (0x0, 0x0) | Some positions -> positions - let (tablesStreamPhysLoc, _tablesStreamSize) = + let (tablesStreamPhysLoc, _tablesStreamSize) = match tryFindStream [| 0x23; 0x7e |] (* #~ *) with | Some res -> res - | None -> + | None -> match tryFindStream [| 0x23; 0x2d |] (* #-: at least one DLL I've seen uses this! *) with | Some res -> res - | None -> + | None -> let firstStreamOffset = seekReadInt32 mdv (streamHeadersStart + 0) let firstStreamLength = seekReadInt32 mdv (streamHeadersStart + 4) firstStreamOffset, firstStreamLength @@ -3255,8 +3304,8 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p let (guidsStreamPhysicalLoc, _guidsStreamSize) = findStream [| 0x23; 0x47; 0x55; 0x49; 0x44; |] (* #GUID *) let (blobsStreamPhysicalLoc, blobsStreamSize) = findStream [| 0x23; 0x42; 0x6c; 0x6f; 0x62; |] (* #Blob *) - let tableKinds = - [|kindModule (* Table 0 *) + let tableKinds = + [|kindModule (* Table 0 *) kindTypeRef (* Table 1 *) kindTypeDef (* Table 2 *) kindIllegal (* kindFieldPtr *) (* Table 3 *) @@ -3325,12 +3374,12 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p let heapSizes = seekReadByteAsInt32 mdv (tablesStreamPhysLoc + 6) let valid = seekReadInt64 mdv (tablesStreamPhysLoc + 8) let sorted = seekReadInt64 mdv (tablesStreamPhysLoc + 16) - let tablesPresent, tableRowCount, startOfTables = + let tablesPresent, tableRowCount, startOfTables = let present = ref [] let numRows = Array.create 64 0 let prevNumRowIdx = ref (tablesStreamPhysLoc + 24) - for i = 0 to 63 do - if (valid &&& (int64 1 <<< i)) <> int64 0 then + for i = 0 to 63 do + if (valid &&& (int64 1 <<< i)) <> int64 0 then present := i :: !present numRows.[i] <- (seekReadInt32 mdv !prevNumRowIdx) prevNumRowIdx := !prevNumRowIdx + 4 @@ -3347,26 +3396,26 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p if logging && blobsBigness then dprintn (fileName + ": blobs are big") let tableBigness = Array.map (fun n -> n >= 0x10000) tableRowCount - + let codedBigness nbits tab = let rows = getNumRows tab rows >= (0x10000 >>>& nbits) - - let tdorBigness = - codedBigness 2 TableNames.TypeDef || - codedBigness 2 TableNames.TypeRef || + + let tdorBigness = + codedBigness 2 TableNames.TypeDef || + codedBigness 2 TableNames.TypeRef || codedBigness 2 TableNames.TypeSpec - - let tomdBigness = - codedBigness 1 TableNames.TypeDef || + + let tomdBigness = + codedBigness 1 TableNames.TypeDef || codedBigness 1 TableNames.Method - - let hcBigness = + + let hcBigness = codedBigness 2 TableNames.Field || codedBigness 2 TableNames.Param || codedBigness 2 TableNames.Property - - let hcaBigness = + + let hcaBigness = codedBigness 5 TableNames.Method || codedBigness 5 TableNames.Field || codedBigness 5 TableNames.TypeRef || @@ -3390,52 +3439,53 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p codedBigness 5 TableNames.GenericParamConstraint || codedBigness 5 TableNames.MethodSpec - - let hfmBigness = - codedBigness 1 TableNames.Field || + + let hfmBigness = + codedBigness 1 TableNames.Field || codedBigness 1 TableNames.Param - - let hdsBigness = - codedBigness 2 TableNames.TypeDef || + + let hdsBigness = + codedBigness 2 TableNames.TypeDef || codedBigness 2 TableNames.Method || codedBigness 2 TableNames.Assembly - - let mrpBigness = + + let mrpBigness = + codedBigness 3 TableNames.TypeDef || codedBigness 3 TableNames.TypeRef || codedBigness 3 TableNames.ModuleRef || codedBigness 3 TableNames.Method || codedBigness 3 TableNames.TypeSpec - - let hsBigness = - codedBigness 1 TableNames.Event || - codedBigness 1 TableNames.Property - + + let hsBigness = + codedBigness 1 TableNames.Event || + codedBigness 1 TableNames.Property + let mdorBigness = - codedBigness 1 TableNames.Method || - codedBigness 1 TableNames.MemberRef - + codedBigness 1 TableNames.Method || + codedBigness 1 TableNames.MemberRef + let mfBigness = codedBigness 1 TableNames.Field || - codedBigness 1 TableNames.Method - + codedBigness 1 TableNames.Method + let iBigness = - codedBigness 2 TableNames.File || - codedBigness 2 TableNames.AssemblyRef || - codedBigness 2 TableNames.ExportedType - - let catBigness = - codedBigness 3 TableNames.Method || - codedBigness 3 TableNames.MemberRef - - let rsBigness = - codedBigness 2 TableNames.Module || - codedBigness 2 TableNames.ModuleRef || + codedBigness 2 TableNames.File || + codedBigness 2 TableNames.AssemblyRef || + codedBigness 2 TableNames.ExportedType + + let catBigness = + codedBigness 3 TableNames.Method || + codedBigness 3 TableNames.MemberRef + + let rsBigness = + codedBigness 2 TableNames.Module || + codedBigness 2 TableNames.ModuleRef || codedBigness 2 TableNames.AssemblyRef || codedBigness 2 TableNames.TypeRef - - let rowKindSize (RowKind kinds) = - kinds |> List.sumBy (fun x -> - match x with + + let rowKindSize (RowKind kinds) = + kinds |> List.sumBy (fun x -> + match x with | UShort -> 2 | ULong -> 4 | Byte -> 1 @@ -3456,21 +3506,21 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p | MemberForwarded -> (if mfBigness then 4 else 2) | Implementation -> (if iBigness then 4 else 2) | CustomAttributeType -> (if catBigness then 4 else 2) - | ResolutionScope -> (if rsBigness then 4 else 2)) + | ResolutionScope -> (if rsBigness then 4 else 2)) - let tableRowSizes = tableKinds |> Array.map rowKindSize + let tableRowSizes = tableKinds |> Array.map rowKindSize - let tablePhysLocations = + let tablePhysLocations = let res = Array.create 64 0x0 let mutable prevTablePhysLoc = startOfTables - for i = 0 to 63 do + for i = 0 to 63 do res.[i] <- prevTablePhysLoc prevTablePhysLoc <- prevTablePhysLoc + (tableRowCount.[i] * tableRowSizes.[i]) res - - let inbase = Filename.fileNameOfPath fileName + ": " - // All the caches. The sizes are guesstimates for the rough sharing-density of the assembly + let inbase = FileSystemUtils.fileNameOfPath fileName + ": " + + // All the caches. The sizes are guesstimates for the rough sharing-density of the assembly let cacheAssemblyRef = mkCacheInt32 false inbase "ILAssemblyRef" (getNumRows TableNames.AssemblyRef) let cacheMethodSpecAsMethodData = mkCacheGeneric reduceMemoryUsage inbase "MethodSpecAsMethodData" (getNumRows TableNames.MethodSpec / 20 + 1) let cacheMemberRefAsMemberData = mkCacheGeneric reduceMemoryUsage inbase "MemberRefAsMemberData" (getNumRows TableNames.MemberRef / 20 + 1) @@ -3485,14 +3535,14 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p let cacheGenericParams = mkCacheGeneric reduceMemoryUsage inbase "GenericParams" (getNumRows TableNames.GenericParam / 20 + 1) let cacheFieldDefAsFieldSpec = mkCacheInt32 reduceMemoryUsage inbase "FieldDefAsFieldSpec" (getNumRows TableNames.Field / 20 + 1) let cacheUserStringHeap = mkCacheInt32 reduceMemoryUsage inbase "UserStringHeap" ( userStringsStreamSize / 20 + 1) - // nb. Lots and lots of cache hits on this cache, hence never optimize cache away + // nb. Lots and lots of cache hits on this cache, hence never optimize cache away let cacheStringHeap = mkCacheInt32 false inbase "string heap" ( stringsStreamSize / 50 + 1) - let cacheBlobHeap = mkCacheInt32 reduceMemoryUsage inbase "blob heap" ( blobsStreamSize / 50 + 1) + let cacheBlobHeap = mkCacheInt32 reduceMemoryUsage inbase "blob heap" ( blobsStreamSize / 50 + 1) + + // These tables are not required to enforce sharing fo the final data + // structure, but are very useful as searching these tables gives rise to many reads + // in standard applications. - // These tables are not required to enforce sharing fo the final data - // structure, but are very useful as searching these tables gives rise to many reads - // in standard applications. - let cacheNestedRow = mkCacheInt32 reduceMemoryUsage inbase "Nested Table Rows" (getNumRows TableNames.Nested / 20 + 1) let cacheConstantRow = mkCacheInt32 reduceMemoryUsage inbase "Constant Rows" (getNumRows TableNames.Constant / 20 + 1) let cacheMethodSemanticsRow = mkCacheInt32 reduceMemoryUsage inbase "MethodSemantics Rows" (getNumRows TableNames.MethodSemantics / 20 + 1) @@ -3501,11 +3551,11 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p let rowAddr (tab: TableName) idx = tablePhysLocations.[tab.Index] + (idx - 1) * tableRowSizes.[tab.Index] // Build the reader context - // Use an initialization hole + // Use an initialization hole let ctxtH = ref None - let ctxt: ILMetadataReader = + let ctxt: ILMetadataReader = { sorted=sorted - getNumRows=getNumRows + getNumRows=getNumRows mdfile=mdfile dataEndPoints = match pectxtCaptured with None -> notlazy [] | Some pectxt -> getDataEndPointsDelayed pectxt ctxtH pectxtCaptured=pectxtCaptured @@ -3552,28 +3602,28 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p securityDeclsReader_TypeDef = securityDeclsReader ctxtH hds_TypeDef securityDeclsReader_MethodDef = securityDeclsReader ctxtH hds_MethodDef securityDeclsReader_Assembly = securityDeclsReader ctxtH hds_Assembly - typeDefReader = typeDefReader ctxtH + typeDefReader = typeDefReader ctxtH guidsStreamPhysicalLoc = guidsStreamPhysicalLoc rowAddr=rowAddr rsBigness=rsBigness tdorBigness=tdorBigness - tomdBigness=tomdBigness - hcBigness=hcBigness - hcaBigness=hcaBigness - hfmBigness=hfmBigness + tomdBigness=tomdBigness + hcBigness=hcBigness + hcaBigness=hcaBigness + hfmBigness=hfmBigness hdsBigness=hdsBigness mrpBigness=mrpBigness hsBigness=hsBigness mdorBigness=mdorBigness mfBigness=mfBigness iBigness=iBigness - catBigness=catBigness + catBigness=catBigness stringsBigness=stringsBigness guidsBigness=guidsBigness blobsBigness=blobsBigness - tableBigness=tableBigness } + tableBigness=tableBigness } ctxtH := Some ctxt - + let ilModule = seekReadModule ctxt reduceMemoryUsage pectxtEager pevEager peinfo (System.Text.Encoding.UTF8.GetString (ilMetadataVersion, 0, ilMetadataVersion.Length)) 1 let ilAssemblyRefs = lazy [ for i in 1 .. getNumRows TableNames.AssemblyRef do yield seekReadAssemblyRef ctxt i ] @@ -3584,7 +3634,7 @@ let openMetadataReader (fileName, mdfile: BinaryFile, metadataPhysLoc, peinfo, p // read of the AbsIL module. // ---------------------------------------------------------------------- -let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = +let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = let pev = pefile.GetView() (* MSDOS HEADER *) let peSignaturePhysLoc = seekReadInt32 pev 0x3c @@ -3604,7 +3654,7 @@ let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = optHeaderSize <> 0xf0 then failwith "not a PE file - bad optional header size" let x64adjust = optHeaderSize - 0xe0 let only64 = (optHeaderSize = 0xf0) (* May want to read in the optional header Magic number and check that as well... *) - let platform = match machine with | 0x8664 -> Some AMD64 | 0x200 -> Some IA64 | _ -> Some X86 + let platform = match machine with | 0x8664 -> Some AMD64 | 0x200 -> Some IA64 | _ -> Some X86 let sectionHeadersStartPhysLoc = peOptionalHeaderPhysLoc + optHeaderSize let flags = seekReadUInt16AsInt32 pev (peFileHeaderPhysLoc + 18) @@ -3612,35 +3662,35 @@ let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = (* OPTIONAL PE HEADER *) let _textPhysSize = seekReadInt32 pev (peOptionalHeaderPhysLoc + 4) (* Size of the code (text) section, or the sum of all code sections if there are multiple sections. *) - (* x86: 000000a0 *) + (* x86: 000000a0 *) let _initdataPhysSize = seekReadInt32 pev (peOptionalHeaderPhysLoc + 8) (* Size of the initialized data section, or the sum of all such sections if there are multiple data sections. *) let _uninitdataPhysSize = seekReadInt32 pev (peOptionalHeaderPhysLoc + 12) (* Size of the uninitialized data section, or the sum of all such sections if there are multiple data sections. *) let _entrypointAddr = seekReadInt32 pev (peOptionalHeaderPhysLoc + 16) (* RVA of entry point, needs to point to bytes 0xFF 0x25 followed by the RVA+!0x4000000 in a section marked execute/read for EXEs or 0 for DLLs e.g. 0x0000b57e *) let _textAddr = seekReadInt32 pev (peOptionalHeaderPhysLoc + 20) (* e.g. 0x0002000 *) - (* x86: 000000b0 *) + (* x86: 000000b0 *) let dataSegmentAddr = seekReadInt32 pev (peOptionalHeaderPhysLoc + 24) (* e.g. 0x0000c000 *) - (* REVIEW: For now, we'll use the DWORD at offset 24 for x64. This currently ok since fsc doesn't support true 64-bit image bases, - but we'll have to fix this up when such support is added. *) + (* REVIEW: For now, we'll use the DWORD at offset 24 for x64. This currently ok since fsc doesn't support true 64-bit image bases, + but we'll have to fix this up when such support is added. *) let imageBaseReal = if only64 then dataSegmentAddr else seekReadInt32 pev (peOptionalHeaderPhysLoc + 28) // Image Base Always 0x400000 (see Section 23.1). - let alignVirt = seekReadInt32 pev (peOptionalHeaderPhysLoc + 32) // Section Alignment Always 0x2000 (see Section 23.1). - let alignPhys = seekReadInt32 pev (peOptionalHeaderPhysLoc + 36) // File Alignment Either 0x200 or 0x1000. - (* x86: 000000c0 *) - let _osMajor = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 40) // OS Major Always 4 (see Section 23.1). - let _osMinor = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 42) // OS Minor Always 0 (see Section 23.1). - let _userMajor = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 44) // User Major Always 0 (see Section 23.1). - let _userMinor = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 46) // User Minor Always 0 (see Section 23.1). - let subsysMajor = seekReadUInt16AsInt32 pev (peOptionalHeaderPhysLoc + 48) // SubSys Major Always 4 (see Section 23.1). - let subsysMinor = seekReadUInt16AsInt32 pev (peOptionalHeaderPhysLoc + 50) // SubSys Minor Always 0 (see Section 23.1). - (* x86: 000000d0 *) + let alignVirt = seekReadInt32 pev (peOptionalHeaderPhysLoc + 32) // Section Alignment Always 0x2000 (see Section 23.1). + let alignPhys = seekReadInt32 pev (peOptionalHeaderPhysLoc + 36) // File Alignment Either 0x200 or 0x1000. + (* x86: 000000c0 *) + let _osMajor = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 40) // OS Major Always 4 (see Section 23.1). + let _osMinor = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 42) // OS Minor Always 0 (see Section 23.1). + let _userMajor = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 44) // User Major Always 0 (see Section 23.1). + let _userMinor = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 46) // User Minor Always 0 (see Section 23.1). + let subsysMajor = seekReadUInt16AsInt32 pev (peOptionalHeaderPhysLoc + 48) // SubSys Major Always 4 (see Section 23.1). + let subsysMinor = seekReadUInt16AsInt32 pev (peOptionalHeaderPhysLoc + 50) // SubSys Minor Always 0 (see Section 23.1). + (* x86: 000000d0 *) let _imageEndAddr = seekReadInt32 pev (peOptionalHeaderPhysLoc + 56) // Image Size: Size, in bytes, of image, including all headers and padding let _headerPhysSize = seekReadInt32 pev (peOptionalHeaderPhysLoc + 60) // Header Size Combined size of MS-DOS Header, PE Header, PE Optional Header and padding - let subsys = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 68) // SubSystem Subsystem required to run this image. - let useHighEnthropyVA = + let subsys = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 68) // SubSystem Subsystem required to run this image. + let useHighEnthropyVA = let n = seekReadUInt16 pev (peOptionalHeaderPhysLoc + 70) let highEnthropyVA = 0x20us (n &&& highEnthropyVA) = highEnthropyVA - (* x86: 000000e0 *) + (* x86: 000000e0 *) (* WARNING: THESE ARE 64 bit ON x64/ia64 *) (* REVIEW: If we ever decide that we need these values for x64, we'll have to read them in as 64bit and fix up the rest of the offsets. @@ -3650,31 +3700,31 @@ let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = (* let heapReserve = seekReadInt32 is (peOptionalHeaderPhysLoc + 80) in *) (* Heap Reserve Size Always 0x100000 (1Mb) (see Section 23.1). *) (* let heapCommit = seekReadInt32 is (peOptionalHeaderPhysLoc + 84) in *) (* Heap Commit Size Always 0x1000 (4Kb) (see Section 23.1). *) - (* x86: 000000f0, x64: 00000100 *) + (* x86: 000000f0, x64: 00000100 *) let _numDataDirectories = seekReadInt32 pev (peOptionalHeaderPhysLoc + 92 + x64adjust) (* Number of Data Directories: Always 0x10 (see Section 23.1). *) - (* 00000100 - these addresses are for x86 - for the x64 location, add x64adjust (0x10) *) - let _importTableAddr = seekReadInt32 pev (peOptionalHeaderPhysLoc + 104 + x64adjust) (* Import Table RVA of Import Table, (see clause 24.3.1). e.g. 0000b530 *) + (* 00000100 - these addresses are for x86 - for the x64 location, add x64adjust (0x10) *) + let _importTableAddr = seekReadInt32 pev (peOptionalHeaderPhysLoc + 104 + x64adjust) (* Import Table RVA of Import Table, (see clause 24.3.1). e.g. 0000b530 *) let _importTableSize = seekReadInt32 pev (peOptionalHeaderPhysLoc + 108 + x64adjust) (* Size of Import Table, (see clause 24.3.1). *) let nativeResourcesAddr = seekReadInt32 pev (peOptionalHeaderPhysLoc + 112 + x64adjust) let nativeResourcesSize = seekReadInt32 pev (peOptionalHeaderPhysLoc + 116 + x64adjust) - (* 00000110 *) - (* 00000120 *) + (* 00000110 *) + (* 00000120 *) (* let base_relocTableNames.addr = seekReadInt32 is (peOptionalHeaderPhysLoc + 136) let base_relocTableNames.size = seekReadInt32 is (peOptionalHeaderPhysLoc + 140) in *) - (* 00000130 *) - (* 00000140 *) - (* 00000150 *) - let _importAddrTableAddr = seekReadInt32 pev (peOptionalHeaderPhysLoc + 192 + x64adjust) (* RVA of Import Addr Table, (see clause 24.3.1). e.g. 0x00002000 *) - let _importAddrTableSize = seekReadInt32 pev (peOptionalHeaderPhysLoc + 196 + x64adjust) (* Size of Import Addr Table, (see clause 24.3.1). e.g. 0x00002000 *) - (* 00000160 *) + (* 00000130 *) + (* 00000140 *) + (* 00000150 *) + let _importAddrTableAddr = seekReadInt32 pev (peOptionalHeaderPhysLoc + 192 + x64adjust) (* RVA of Import Addr Table, (see clause 24.3.1). e.g. 0x00002000 *) + let _importAddrTableSize = seekReadInt32 pev (peOptionalHeaderPhysLoc + 196 + x64adjust) (* Size of Import Addr Table, (see clause 24.3.1). e.g. 0x00002000 *) + (* 00000160 *) let cliHeaderAddr = seekReadInt32 pev (peOptionalHeaderPhysLoc + 208 + x64adjust) let _cliHeaderSize = seekReadInt32 pev (peOptionalHeaderPhysLoc + 212 + x64adjust) - (* 00000170 *) + (* 00000170 *) (* Crack section headers *) - let sectionHeaders = + let sectionHeaders = [ for i in 0 .. numSections-1 do let pos = sectionHeadersStartPhysLoc + i * 0x28 let virtSize = seekReadInt32 pev (pos + 8) @@ -3682,16 +3732,16 @@ let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = let physLoc = seekReadInt32 pev (pos + 20) yield (virtAddr, virtSize, physLoc) ] - let findSectionHeader addr = - let rec look i pos = - if i >= numSections then 0x0 + let findSectionHeader addr = + let rec look i pos = + if i >= numSections then 0x0 else let virtSize = seekReadInt32 pev (pos + 8) let virtAddr = seekReadInt32 pev (pos + 12) - if (addr >= virtAddr && addr < virtAddr + virtSize) then pos + if (addr >= virtAddr && addr < virtAddr + virtSize) then pos else look (i+1) (pos + 0x28) look 0 sectionHeadersStartPhysLoc - + let textHeaderStart = findSectionHeader cliHeaderAddr let dataHeaderStart = findSectionHeader dataSegmentAddr (* let relocHeaderStart = findSectionHeader base_relocTableNames.addr in *) @@ -3706,15 +3756,15 @@ let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = let dataSegmentPhysicalSize = if dataHeaderStart = 0x0 then 0x0 else seekReadInt32 pev (dataHeaderStart + 16) let dataSegmentPhysicalLoc = if dataHeaderStart = 0x0 then 0x0 else seekReadInt32 pev (dataHeaderStart + 20) - let anyV2P (n, v) = + let anyV2P (n, v) = let pev = pefile.GetView() - let rec look i pos = + let rec look i pos = if i >= numSections then (failwith (fileName + ": bad "+n+", rva "+string v); 0x0) else let virtSize = seekReadInt32 pev (pos + 8) let virtAddr = seekReadInt32 pev (pos + 12) let physLoc = seekReadInt32 pev (pos + 20) - if (v >= virtAddr && (v < virtAddr + virtSize)) then (v - virtAddr) + physLoc + if (v >= virtAddr && (v < virtAddr + virtSize)) then (v - virtAddr) + physLoc else look (i+1) (pos + 0x28) look 0 sectionHeadersStartPhysLoc @@ -3725,13 +3775,13 @@ let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = let metadataAddr = seekReadInt32 pev (cliHeaderPhysLoc + 8) let metadataSize = seekReadInt32 pev (cliHeaderPhysLoc + 12) let cliFlags = seekReadInt32 pev (cliHeaderPhysLoc + 16) - + let ilOnly = (cliFlags &&& 0x01) <> 0x00 let only32 = (cliFlags &&& 0x02) <> 0x00 let is32bitpreferred = (cliFlags &&& 0x00020003) <> 0x00 let _strongnameSigned = (cliFlags &&& 0x08) <> 0x00 let _trackdebugdata = (cliFlags &&& 0x010000) <> 0x00 - + let entryPointToken = seekReadUncodedToken pev (cliHeaderPhysLoc + 20) let resourcesAddr = seekReadInt32 pev (cliHeaderPhysLoc + 24) let resourcesSize = seekReadInt32 pev (cliHeaderPhysLoc + 28) @@ -3740,11 +3790,11 @@ let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = let vtableFixupsAddr = seekReadInt32 pev (cliHeaderPhysLoc + 40) let _vtableFixupsSize = seekReadInt32 pev (cliHeaderPhysLoc + 44) - if logging then dprintn (fileName + ": metadataAddr = "+string metadataAddr) - if logging then dprintn (fileName + ": resourcesAddr = "+string resourcesAddr) - if logging then dprintn (fileName + ": resourcesSize = "+string resourcesSize) - if logging then dprintn (fileName + ": nativeResourcesAddr = "+string nativeResourcesAddr) - if logging then dprintn (fileName + ": nativeResourcesSize = "+string nativeResourcesSize) + if logging then dprintn (fileName + ": metadataAddr = "+string metadataAddr) + if logging then dprintn (fileName + ": resourcesAddr = "+string resourcesAddr) + if logging then dprintn (fileName + ": resourcesSize = "+string resourcesSize) + if logging then dprintn (fileName + ": nativeResourcesAddr = "+string nativeResourcesAddr) + if logging then dprintn (fileName + ": nativeResourcesSize = "+string nativeResourcesSize) let metadataPhysLoc = anyV2P ("metadata", metadataAddr) //----------------------------------------------------------------------- @@ -3753,16 +3803,16 @@ let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = #if FX_NO_PDB_READER let pdb = ignore pdbDirPath; None #else - let pdb = - if runningOnMono then - None - else + let pdb = + if runningOnMono then + None + else getPdbReader pdbDirPath fileName #endif - let pectxt: PEReader = + let pectxt: PEReader = { pdb=pdb - textSegmentPhysicalLoc=textSegmentPhysicalLoc + textSegmentPhysicalLoc=textSegmentPhysicalLoc textSegmentPhysicalSize=textSegmentPhysicalSize dataSegmentPhysicalLoc=dataSegmentPhysicalLoc dataSegmentPhysicalSize=dataSegmentPhysicalSize @@ -3782,25 +3832,25 @@ let openPEFileReader (fileName, pefile: BinaryFile, pdbDirPath, noFileOnDisk) = let peinfo = (subsys, (subsysMajor, subsysMinor), useHighEnthropyVA, ilOnly, only32, is32bitpreferred, only64, platform, isDll, alignVirt, alignPhys, imageBaseReal) (metadataPhysLoc, metadataSize, peinfo, pectxt, pev, pdb) -let openPE (fileName, pefile, pdbDirPath, reduceMemoryUsage, noFileOnDisk) = - let (metadataPhysLoc, _metadataSize, peinfo, pectxt, pev, pdb) = openPEFileReader (fileName, pefile, pdbDirPath, noFileOnDisk) +let openPE (fileName, pefile, pdbDirPath, reduceMemoryUsage, noFileOnDisk) = + let (metadataPhysLoc, _metadataSize, peinfo, pectxt, pev, pdb) = openPEFileReader (fileName, pefile, pdbDirPath, noFileOnDisk) let ilModule, ilAssemblyRefs = openMetadataReader (fileName, pefile, metadataPhysLoc, peinfo, pectxt, pev, Some pectxt, reduceMemoryUsage) ilModule, ilAssemblyRefs, pdb -let openPEMetadataOnly (fileName, peinfo, pectxtEager, pevEager, mdfile: BinaryFile, reduceMemoryUsage) = +let openPEMetadataOnly (fileName, peinfo, pectxtEager, pevEager, mdfile: BinaryFile, reduceMemoryUsage) = openMetadataReader (fileName, mdfile, 0, peinfo, pectxtEager, pevEager, None, reduceMemoryUsage) - -let ClosePdbReader pdb = + +let ClosePdbReader pdb = #if FX_NO_PDB_READER ignore pdb () #else - match pdb with + match pdb with | Some (pdbr, _) -> pdbReadClose pdbr | None -> () #endif -type ILReaderMetadataSnapshot = (obj * nativeint * int) +type ILReaderMetadataSnapshot = (obj * nativeint * int) type ILReaderTryGetMetadataSnapshot = (* path: *) string * (* snapshotTimeStamp: *) System.DateTime -> ILReaderMetadataSnapshot option [] @@ -3815,22 +3865,20 @@ type ILReaderOptions = metadataOnly: MetadataOnlyFlag tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot } - type ILModuleReader = abstract ILModuleDef: ILModuleDef abstract ILAssemblyRefs: ILAssemblyRef list - + /// ILModuleReader objects only need to be explicitly disposed if memory mapping is used, i.e. reduceMemoryUsage = false inherit System.IDisposable - [] type ILModuleReaderImpl(ilModule: ILModuleDef, ilAssemblyRefs: Lazy, dispose: unit -> unit) = interface ILModuleReader with member x.ILModuleDef = ilModule member x.ILAssemblyRefs = ilAssemblyRefs.Force() member x.Dispose() = dispose() - + // ++GLOBAL MUTABLE STATE (concurrency safe via locking) type ILModuleReaderCacheKey = ILModuleReaderCacheKey of string * DateTime * bool * ReduceMemoryFlag * MetadataOnlyFlag @@ -3838,7 +3886,7 @@ type ILModuleReaderCacheKey = ILModuleReaderCacheKey of string * DateTime * bool type ILModuleReaderCache1LockToken() = interface LockToken let ilModuleReaderCache1 = new AgedLookup - (stronglyHeldReaderCacheSize, + (stronglyHeldReaderCacheSize, keepMax=stronglyHeldReaderCacheSize, // only strong entries areSimilar=(fun (x, y) -> x = y)) let ilModuleReaderCache1Lock = Lock() @@ -3846,27 +3894,27 @@ let ilModuleReaderCache1Lock = Lock() // // Cache to reuse readers that have already been created and are not yet GC'd let ilModuleReaderCache2 = new ConcurrentDictionary>(HashIdentity.Structural) -let stableFileHeuristicApplies fileName = +let stableFileHeuristicApplies fileName = not noStableFileHeuristic && try FileSystem.IsStableFileHeuristic fileName with _ -> false -let createByteFileChunk opts fileName chunk = +let createByteFileChunk opts fileName chunk = // If we're trying to reduce memory usage then we are willing to go back and re-read the binary, so we can use // a weakly-held handle to an array of bytes. - if opts.reduceMemoryUsage = ReduceMemoryFlag.Yes && stableFileHeuristicApplies fileName then - WeakByteFile(fileName, chunk) :> BinaryFile - else - let bytes = - match chunk with - | None -> FileSystem.ReadAllBytesShim fileName - | Some (start, length) -> File.ReadBinaryChunk(fileName, start, length) + if opts.reduceMemoryUsage = ReduceMemoryFlag.Yes && stableFileHeuristicApplies fileName then + WeakByteFile(fileName, chunk) :> BinaryFile + else + let bytes = + use stream = FileSystem.OpenFileForReadShim(fileName) + match chunk with + | None -> stream.ReadAllBytes() + | Some(start, length) -> stream.ReadBytes(start, length) + ByteFile(fileName, bytes) :> BinaryFile -let createMemoryMapFile fileName = - let mmf, accessor, length = - let fileStream = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read) - let length = fileStream.Length - let mmf = MemoryMappedFile.CreateFromFile(fileStream, null, length, MemoryMappedFileAccess.Read, HandleInheritability.None, leaveOpen=false) - mmf, mmf.CreateViewAccessor(0L, fileStream.Length, MemoryMappedFileAccess.Read), length +let getBinaryFile fileName useMemoryMappedFile = + let stream = FileSystem.OpenFileForReadShim(fileName, useMemoryMappedFile = useMemoryMappedFile) + let byteMem = stream.AsByteMemory() + let safeHolder = { new obj() with override x.Finalize() = @@ -3874,116 +3922,123 @@ let createMemoryMapFile fileName = interface IDisposable with member x.Dispose() = GC.SuppressFinalize x - accessor.Dispose() - mmf.Dispose() + stream.Dispose() stats.memoryMapFileClosedCount <- stats.memoryMapFileClosedCount + 1 } + stats.memoryMapFileOpenedCount <- stats.memoryMapFileOpenedCount + 1 - safeHolder, RawMemoryFile(fileName, safeHolder, accessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), int length) :> BinaryFile -let OpenILModuleReaderFromBytes fileName assemblyContents options = + safeHolder, RawMemoryFile(fileName, safeHolder, byteMem) :> BinaryFile + +let OpenILModuleReaderFromBytes fileName assemblyContents options = let pefile = ByteFile(fileName, assemblyContents) :> BinaryFile let ilModule, ilAssemblyRefs, pdb = openPE (fileName, pefile, options.pdbDirPath, (options.reduceMemoryUsage = ReduceMemoryFlag.Yes), true) new ILModuleReaderImpl(ilModule, ilAssemblyRefs, (fun () -> ClosePdbReader pdb)) :> ILModuleReader +let OpenILModuleReaderFromStream fileName (peStream: Stream) options = + let peReader = new System.Reflection.PortableExecutable.PEReader(peStream, PEStreamOptions.PrefetchEntireImage) + let pefile = PEFile(fileName, peReader) :> BinaryFile + let ilModule, ilAssemblyRefs, pdb = openPE (fileName, pefile, options.pdbDirPath, (options.reduceMemoryUsage = ReduceMemoryFlag.Yes), true) + new ILModuleReaderImpl(ilModule, ilAssemblyRefs, (fun () -> ClosePdbReader pdb)) :> ILModuleReader + let ClearAllILModuleReaderCache() = ilModuleReaderCache1.Clear(ILModuleReaderCache1LockToken()) ilModuleReaderCache2.Clear() -let OpenILModuleReader fileName opts = +let OpenILModuleReader fileName opts = // Pseudo-normalize the paths. - let (ILModuleReaderCacheKey (fullPath,writeStamp,_,_,_) as key), keyOk = - try + let (ILModuleReaderCacheKey (fullPath,writeStamp,_,_,_) as key), keyOk = + try let fullPath = FileSystem.GetFullPathShim fileName let writeTime = FileSystem.GetLastWriteTimeShim fileName let key = ILModuleReaderCacheKey (fullPath, writeTime, opts.pdbDirPath.IsSome, opts.reduceMemoryUsage, opts.metadataOnly) key, true - with exn -> - System.Diagnostics.Debug.Assert(false, sprintf "Failed to compute key in OpenILModuleReader cache for '%s'. Falling back to uncached. Error = %s" fileName (exn.ToString())) + with exn -> + System.Diagnostics.Debug.Assert(false, sprintf "Failed to compute key in OpenILModuleReader cache for '%s'. Falling back to uncached. Error = %s" fileName (exn.ToString())) let fakeKey = ILModuleReaderCacheKey(fileName, System.DateTime.UtcNow, false, ReduceMemoryFlag.Yes, MetadataOnlyFlag.Yes) fakeKey, false - let cacheResult1 = + let cacheResult1 = // can't used a cached entry when reading PDBs, since it makes the returned object IDisposable - if keyOk && opts.pdbDirPath.IsNone then + if keyOk && opts.pdbDirPath.IsNone then ilModuleReaderCache1Lock.AcquireLock (fun ltok -> ilModuleReaderCache1.TryGet(ltok, key)) - else + else None - - match cacheResult1 with + + match cacheResult1 with | Some ilModuleReader -> ilModuleReader - | None -> + | None -> - let cacheResult2 = + let cacheResult2 = // can't used a cached entry when reading PDBs, since it makes the returned object IDisposable - if keyOk && opts.pdbDirPath.IsNone then + if keyOk && opts.pdbDirPath.IsNone then ilModuleReaderCache2.TryGetValue key - else + else false, Unchecked.defaultof<_> - let mutable res = Unchecked.defaultof<_> - match cacheResult2 with + let mutable res = Unchecked.defaultof<_> + match cacheResult2 with | true, weak when weak.TryGetTarget(&res) -> res - | _ -> + | _ -> let reduceMemoryUsage = (opts.reduceMemoryUsage = ReduceMemoryFlag.Yes) - let metadataOnly = (opts.metadataOnly = MetadataOnlyFlag.Yes) + let metadataOnly = (opts.metadataOnly = MetadataOnlyFlag.Yes) - if reduceMemoryUsage && opts.pdbDirPath.IsNone then + if reduceMemoryUsage && opts.pdbDirPath.IsNone then // This case is used in FCS applications, devenv.exe and fsi.exe // - let ilModuleReader = + let ilModuleReader = // Check if we are doing metadataOnly reading (the most common case in both the compiler and IDE) - if metadataOnly then + if not runningOnMono && metadataOnly then // See if tryGetMetadata gives us a BinaryFile for the metadata section alone. - let mdfileOpt = - match opts.tryGetMetadataSnapshot (fullPath, writeStamp) with + let mdfileOpt = + match opts.tryGetMetadataSnapshot (fullPath, writeStamp) with | Some (obj, start, len) -> Some (RawMemoryFile(fullPath, obj, start, len) :> BinaryFile) | None -> None // For metadata-only, always use a temporary, short-lived PE file reader, preferably over a memory mapped file. // Then use the metadata blob as the long-lived memory resource. - let disposer, pefileEager = createMemoryMapFile fullPath + let disposer, pefileEager = getBinaryFile fullPath false use _disposer = disposer - let (metadataPhysLoc, metadataSize, peinfo, pectxtEager, pevEager, _pdb) = openPEFileReader (fullPath, pefileEager, None, false) - let mdfile = - match mdfileOpt with + let (metadataPhysLoc, metadataSize, peinfo, pectxtEager, pevEager, _pdb) = openPEFileReader (fullPath, pefileEager, None, false) + let mdfile = + match mdfileOpt with | Some mdfile -> mdfile - | None -> + | None -> // If tryGetMetadata doesn't give anything, then just read the metadata chunk out of the binary createByteFileChunk opts fullPath (Some (metadataPhysLoc, metadataSize)) - let ilModule, ilAssemblyRefs = openPEMetadataOnly (fullPath, peinfo, pectxtEager, pevEager, mdfile, reduceMemoryUsage) + let ilModule, ilAssemblyRefs = openPEMetadataOnly (fullPath, peinfo, pectxtEager, pevEager, mdfile, reduceMemoryUsage) new ILModuleReaderImpl(ilModule, ilAssemblyRefs, ignore) else // If we are not doing metadata-only, then just go ahead and read all the bytes and hold them either strongly or weakly // depending on the heuristic let pefile = createByteFileChunk opts fullPath None - let ilModule, ilAssemblyRefs, _pdb = openPE (fullPath, pefile, None, reduceMemoryUsage, false) + let ilModule, ilAssemblyRefs, _pdb = openPE (fullPath, pefile, None, reduceMemoryUsage, false) new ILModuleReaderImpl(ilModule, ilAssemblyRefs, ignore) - let ilModuleReader = ilModuleReader :> ILModuleReader - if keyOk then + let ilModuleReader = ilModuleReader :> ILModuleReader + if keyOk then ilModuleReaderCache1Lock.AcquireLock (fun ltok -> ilModuleReaderCache1.Put(ltok, key, ilModuleReader)) ilModuleReaderCache2.[key] <- System.WeakReference<_>(ilModuleReader) ilModuleReader - - + + else - // This case is primarily used in fsc.exe. + // This case is primarily used in fsc.exe. // - // In fsc.exe, we're not trying to reduce memory usage, nor do we really care if we leak memory. + // In fsc.exe, we're not trying to reduce memory usage, nor do we really care if we leak memory. // // Note we ignore the "metadata only" flag as it's generally OK to read in the // whole binary for the command-line compiler: address space is rarely an issue. // - // We do however care about avoiding locks on files that prevent their deletion during a + // We do however care about avoiding locks on files that prevent their deletion during a // multi-proc build. So use memory mapping, but only for stable files. Other files // still use an in-memory ByteFile - let pefile = - if alwaysMemoryMapFSC || stableFileHeuristicApplies fullPath then - let _, pefile = createMemoryMapFile fullPath + let pefile = + if not runningOnMono && (alwaysMemoryMapFSC || stableFileHeuristicApplies fullPath) then + let _, pefile = getBinaryFile fullPath false pefile else createByteFileChunk opts fullPath None @@ -3991,10 +4046,10 @@ let OpenILModuleReader fileName opts = let ilModule, ilAssemblyRefs, pdb = openPE (fullPath, pefile, opts.pdbDirPath, reduceMemoryUsage, false) let ilModuleReader = new ILModuleReaderImpl(ilModule, ilAssemblyRefs, (fun () -> ClosePdbReader pdb)) - let ilModuleReader = ilModuleReader :> ILModuleReader + let ilModuleReader = ilModuleReader :> ILModuleReader // Readers with PDB reader disposal logic don't go in the cache. Note the PDB reader is only used in static linking. - if keyOk && opts.pdbDirPath.IsNone then + if keyOk && opts.pdbDirPath.IsNone then ilModuleReaderCache1Lock.AcquireLock (fun ltok -> ilModuleReaderCache1.Put(ltok, key, ilModuleReader)) ilModuleReaderCache2.[key] <- WeakReference<_>(ilModuleReader) @@ -4009,7 +4064,7 @@ module Shim = [] type DefaultAssemblyReader() = interface IAssemblyReader with - member __.GetILModuleReader(filename, readerOptions) = + member _.GetILModuleReader(filename, readerOptions) = OpenILModuleReader filename readerOptions let mutable AssemblyReader = DefaultAssemblyReader() :> IAssemblyReader diff --git a/src/fsharp/absil/ilread.fsi b/src/fsharp/absil/ilread.fsi index 4ca7ebe51bd..97cb687e1ca 100644 --- a/src/fsharp/absil/ilread.fsi +++ b/src/fsharp/absil/ilread.fsi @@ -26,12 +26,8 @@ /// you need. module FSharp.Compiler.AbstractIL.ILBinaryReader -open Internal.Utilities -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.ErrorLogger open System.IO +open FSharp.Compiler.AbstractIL.IL /// Used to implement a Binary file over native memory, used by Roslyn integration type ILReaderMetadataSnapshot = (obj * nativeint * int) @@ -65,7 +61,7 @@ type ILReaderOptions = /// Represents a reader of the metadata of a .NET binary. May also give some values (e.g. IL code) from the PE file /// if it was provided. -type ILModuleReader = +type public ILModuleReader = abstract ILModuleDef: ILModuleDef abstract ILAssemblyRefs: ILAssemblyRef list @@ -76,30 +72,34 @@ type ILModuleReader = /// Open a binary reader, except first copy the entire contents of the binary into /// memory, close the file and ensure any subsequent reads happen from the in-memory store. /// PDB files may not be read with this option. +/// Binary reader is internally cached. val internal OpenILModuleReader: string -> ILReaderOptions -> ILModuleReader val internal ClearAllILModuleReaderCache : unit -> unit /// Open a binary reader based on the given bytes. +/// This binary reader is not internally cached. val internal OpenILModuleReaderFromBytes: fileName:string -> assemblyContents: byte[] -> options: ILReaderOptions -> ILModuleReader -type Statistics = +/// Open a binary reader based on the given stream. +/// This binary reader is not internally cached. +/// The binary reader will own the given stream and the stream will be disposed when there are no references to the binary reader. +val internal OpenILModuleReaderFromStream: fileName:string -> peStream: Stream -> options: ILReaderOptions -> ILModuleReader + +type internal Statistics = { mutable rawMemoryFileCount : int mutable memoryMapFileOpenedCount : int mutable memoryMapFileClosedCount : int mutable weakByteFileCount : int mutable byteFileCount : int } -val GetStatistics : unit -> Statistics +val internal GetStatistics : unit -> Statistics +/// The public API hook for changing the IL assembly reader, used by Resharper [] -module Shim = +module public Shim = - type IAssemblyReader = + type public IAssemblyReader = abstract GetILModuleReader: filename: string * readerOptions: ILReaderOptions -> ILModuleReader - [] - type DefaultAssemblyReader = - interface IAssemblyReader - val mutable AssemblyReader: IAssemblyReader diff --git a/src/fsharp/absil/ilreflect.fs b/src/fsharp/absil/ilreflect.fs index 5c4d4610e67..9af3997e31a 100644 --- a/src/fsharp/absil/ilreflect.fs +++ b/src/fsharp/absil/ilreflect.fs @@ -1,11 +1,7 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -//---------------------------------------------------------------------------- -// Write Abstract IL structures at runtime using Reflection.Emit -//---------------------------------------------------------------------------- - - -module internal FSharp.Compiler.AbstractIL.ILRuntimeWriter +/// Write Abstract IL structures at runtime using Reflection.Emit +module internal FSharp.Compiler.AbstractIL.ILRuntimeWriter open System open System.IO @@ -14,14 +10,14 @@ open System.Reflection.Emit open System.Runtime.InteropServices open System.Collections.Generic +open Internal.Utilities.Collections +open Internal.Utilities.Library open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Internal.Utils -open FSharp.Compiler.AbstractIL.Diagnostics +open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Range +open FSharp.Compiler.IO +open FSharp.Compiler.Text.Range open FSharp.Core.Printf let codeLabelOrder = ComparisonIdentity.Structural @@ -36,7 +32,7 @@ let wrapCustomAttr setCustomAttr (cinfo, bytes) = let logRefEmitCalls = false -type System.Reflection.Emit.AssemblyBuilder with +type System.Reflection.Emit.AssemblyBuilder with member asmB.DefineDynamicModuleAndLog (a, b, c) = #if FX_RESHAPED_REFEMIT ignore b @@ -47,22 +43,22 @@ type System.Reflection.Emit.AssemblyBuilder with if logRefEmitCalls then printfn "let moduleBuilder%d = assemblyBuilder%d.DefineDynamicModule(%A, %A, %A)" (abs <| hash modB) (abs <| hash asmB) a b c #endif modB - - member asmB.SetCustomAttributeAndLog (cinfo, bytes) = + + member asmB.SetCustomAttributeAndLog (cinfo, bytes) = if logRefEmitCalls then printfn "assemblyBuilder%d.SetCustomAttribute(%A, %A)" (abs <| hash asmB) cinfo bytes wrapCustomAttr asmB.SetCustomAttribute (cinfo, bytes) #if !FX_RESHAPED_REFEMIT - member asmB.AddResourceFileAndLog (nm1, nm2, attrs) = + member asmB.AddResourceFileAndLog (nm1, nm2, attrs) = if logRefEmitCalls then printfn "assemblyBuilder%d.AddResourceFile(%A, %A, enum %d)" (abs <| hash asmB) nm1 nm2 (LanguagePrimitives.EnumToValue attrs) asmB.AddResourceFile(nm1, nm2, attrs) #endif - member asmB.SetCustomAttributeAndLog cab = + member asmB.SetCustomAttributeAndLog cab = if logRefEmitCalls then printfn "assemblyBuilder%d.SetCustomAttribute(%A)" (abs <| hash asmB) cab asmB.SetCustomAttribute cab -type System.Reflection.Emit.ModuleBuilder with +type System.Reflection.Emit.ModuleBuilder with member modB.GetArrayMethodAndLog (aty, nm, flags, rty, tys) = if logRefEmitCalls then printfn "moduleBuilder%d.GetArrayMethod(%A, %A, %A, %A, %A)" (abs <| hash modB) aty nm flags rty tys modB.GetArrayMethod(aty, nm, flags, rty, tys) @@ -81,18 +77,18 @@ type System.Reflection.Emit.ModuleBuilder with let typB = modB.DefineType(name, attrs) if logRefEmitCalls then printfn "let typeBuilder%d = moduleBuilder%d.DefineType(%A, enum %d)" (abs <| hash typB) (abs <| hash modB) name (LanguagePrimitives.EnumToValue attrs) typB - + #if !FX_RESHAPED_REFEMIT member modB.DefineManifestResourceAndLog (name, stream, attrs) = if logRefEmitCalls then printfn "moduleBuilder%d.DefineManifestResource(%A, %A, enum %d)" (abs <| hash modB) name stream (LanguagePrimitives.EnumToValue attrs) modB.DefineManifestResource(name, stream, attrs) #endif - member modB.SetCustomAttributeAndLog (cinfo, bytes) = + member modB.SetCustomAttributeAndLog (cinfo, bytes) = if logRefEmitCalls then printfn "moduleBuilder%d.SetCustomAttribute(%A, %A)" (abs <| hash modB) cinfo bytes wrapCustomAttr modB.SetCustomAttribute (cinfo, bytes) -type System.Reflection.Emit.ConstructorBuilder with +type System.Reflection.Emit.ConstructorBuilder with member consB.SetImplementationFlagsAndLog attrs = if logRefEmitCalls then printfn "constructorBuilder%d.SetImplementationFlags(enum %d)" (abs <| hash consB) (LanguagePrimitives.EnumToValue attrs) consB.SetImplementationFlags attrs @@ -103,16 +99,16 @@ type System.Reflection.Emit.ConstructorBuilder with member consB.GetILGeneratorAndLog () = let ilG = consB.GetILGenerator() - if logRefEmitCalls then printfn "let ilg%d = constructorBuilder%d.GetILGenerator()" (abs <| hash ilG) (abs <| hash consB) + if logRefEmitCalls then printfn "let ilg%d = constructorBuilder%d.GetILGenerator()" (abs <| hash ilG) (abs <| hash consB) ilG -type System.Reflection.Emit.MethodBuilder with +type System.Reflection.Emit.MethodBuilder with member methB.SetImplementationFlagsAndLog attrs = if logRefEmitCalls then printfn "methodBuilder%d.SetImplementationFlags(enum %d)" (abs <| hash methB) (LanguagePrimitives.EnumToValue attrs) methB.SetImplementationFlags attrs member methB.SetSignatureAndLog (returnType, returnTypeRequiredCustomModifiers, returnTypeOptionalCustomModifiers, parameterTypes, parameterTypeRequiredCustomModifiers,parameterTypeOptionalCustomModifiers) = - if logRefEmitCalls then printfn "methodBuilder%d.SetSignature(...)" (abs <| hash methB) + if logRefEmitCalls then printfn "methodBuilder%d.SetSignature(...)" (abs <| hash methB) methB.SetSignature(returnType, returnTypeRequiredCustomModifiers, returnTypeOptionalCustomModifiers, parameterTypes, parameterTypeRequiredCustomModifiers,parameterTypeOptionalCustomModifiers) member methB.DefineParameterAndLog (n, attr, nm) = @@ -125,62 +121,62 @@ type System.Reflection.Emit.MethodBuilder with member methB.GetILGeneratorAndLog () = let ilG = methB.GetILGenerator() - if logRefEmitCalls then printfn "let ilg%d = methodBuilder%d.GetILGenerator()" (abs <| hash ilG) (abs <| hash methB) + if logRefEmitCalls then printfn "let ilg%d = methodBuilder%d.GetILGenerator()" (abs <| hash ilG) (abs <| hash methB) ilG - member methB.SetCustomAttributeAndLog (cinfo, bytes) = + member methB.SetCustomAttributeAndLog (cinfo, bytes) = if logRefEmitCalls then printfn "methodBuilder%d.SetCustomAttribute(%A, %A)" (abs <| hash methB) cinfo bytes wrapCustomAttr methB.SetCustomAttribute (cinfo, bytes) -type System.Reflection.Emit.TypeBuilder with - member typB.CreateTypeAndLog () = +type System.Reflection.Emit.TypeBuilder with + member typB.CreateTypeAndLog () = if logRefEmitCalls then printfn "typeBuilder%d.CreateType()" (abs <| hash typB) #if FX_RESHAPED_REFEMIT typB.CreateTypeInfo().AsType() #else typB.CreateType() #endif - member typB.DefineNestedTypeAndLog (name, attrs) = + member typB.DefineNestedTypeAndLog (name, attrs) = let res = typB.DefineNestedType(name, attrs) if logRefEmitCalls then printfn "let typeBuilder%d = typeBuilder%d.DefineNestedType(\"%s\", enum %d)" (abs <| hash res) (abs <| hash typB) name (LanguagePrimitives.EnumToValue attrs) res - member typB.DefineMethodAndLog (name, attrs, cconv) = + member typB.DefineMethodAndLog (name, attrs, cconv) = let methB = typB.DefineMethod(name, attrs, cconv) if logRefEmitCalls then printfn "let methodBuilder%d = typeBuilder%d.DefineMethod(\"%s\", enum %d, enum %d)" (abs <| hash methB) (abs <| hash typB) name (LanguagePrimitives.EnumToValue attrs) (LanguagePrimitives.EnumToValue cconv) methB - member typB.DefineGenericParametersAndLog gps = + member typB.DefineGenericParametersAndLog gps = if logRefEmitCalls then printfn "typeBuilder%d.DefineGenericParameters(%A)" (abs <| hash typB) gps typB.DefineGenericParameters gps - member typB.DefineConstructorAndLog (attrs, cconv, parms) = + member typB.DefineConstructorAndLog (attrs, cconv, parms) = let consB = typB.DefineConstructor(attrs, cconv, parms) if logRefEmitCalls then printfn "let constructorBuilder%d = typeBuilder%d.DefineConstructor(enum %d, CallingConventions.%A, %A)" (abs <| hash consB) (abs <| hash typB) (LanguagePrimitives.EnumToValue attrs) cconv parms consB - member typB.DefineFieldAndLog (nm, ty: System.Type, attrs) = + member typB.DefineFieldAndLog (nm, ty: System.Type, attrs) = let fieldB = typB.DefineField(nm, ty, attrs) if logRefEmitCalls then printfn "let fieldBuilder%d = typeBuilder%d.DefineField(\"%s\", typeof<%s>, enum %d)" (abs <| hash fieldB) (abs <| hash typB) nm ty.FullName (LanguagePrimitives.EnumToValue attrs) fieldB - member typB.DefinePropertyAndLog (nm, attrs, ty: System.Type, args) = + member typB.DefinePropertyAndLog (nm, attrs, ty: System.Type, args) = if logRefEmitCalls then printfn "typeBuilder%d.DefineProperty(\"%A\", enum %d, typeof<%s>, %A)" (abs <| hash typB) nm (LanguagePrimitives.EnumToValue attrs) ty.FullName args typB.DefineProperty(nm, attrs, ty, args) - member typB.DefineEventAndLog (nm, attrs, ty: System.Type) = + member typB.DefineEventAndLog (nm, attrs, ty: System.Type) = if logRefEmitCalls then printfn "typeBuilder%d.DefineEvent(\"%A\", enum %d, typeof<%A>)" (abs <| hash typB) nm (LanguagePrimitives.EnumToValue attrs) ty.FullName typB.DefineEvent(nm, attrs, ty) - member typB.SetParentAndLog (ty: System.Type) = + member typB.SetParentAndLog (ty: System.Type) = if logRefEmitCalls then printfn "typeBuilder%d.SetParent(typeof<%s>)" (abs <| hash typB) ty.FullName typB.SetParent ty - member typB.AddInterfaceImplementationAndLog ty = + member typB.AddInterfaceImplementationAndLog ty = if logRefEmitCalls then printfn "typeBuilder%d.AddInterfaceImplementation(%A)" (abs <| hash typB) ty typB.AddInterfaceImplementation ty - member typB.InvokeMemberAndLog (nm, _flags, args) = + member typB.InvokeMemberAndLog (nm, _flags, args) = #if FX_RESHAPED_REFEMIT let t = typB.CreateTypeAndLog () let m = @@ -193,85 +189,85 @@ type System.Reflection.Emit.TypeBuilder with typB.InvokeMember(nm, _flags, null, null, args, Globalization.CultureInfo.InvariantCulture) #endif - member typB.SetCustomAttributeAndLog (cinfo, bytes) = + member typB.SetCustomAttributeAndLog (cinfo, bytes) = if logRefEmitCalls then printfn "typeBuilder%d.SetCustomAttribute(%A, %A)" (abs <| hash typB) cinfo bytes wrapCustomAttr typB.SetCustomAttribute (cinfo, bytes) -type System.Reflection.Emit.OpCode with +type System.Reflection.Emit.OpCode with member opcode.RefEmitName = (string (System.Char.ToUpper(opcode.Name.[0])) + opcode.Name.[1..]).Replace(".", "_").Replace("_i4", "_I4") -type System.Reflection.Emit.ILGenerator with - member ilG.DeclareLocalAndLog (ty: System.Type, isPinned) = +type System.Reflection.Emit.ILGenerator with + member ilG.DeclareLocalAndLog (ty: System.Type, isPinned) = if logRefEmitCalls then printfn "ilg%d.DeclareLocal(typeof<%s>, %b)" (abs <| hash ilG) ty.FullName isPinned ilG.DeclareLocal(ty, isPinned) - member ilG.MarkLabelAndLog lab = + member ilG.MarkLabelAndLog lab = if logRefEmitCalls then printfn "ilg%d.MarkLabel(label%d_%d)" (abs <| hash ilG) (abs <| hash ilG) (abs <| hash lab) ilG.MarkLabel lab #if !FX_RESHAPED_REFEMIT - member ilG.MarkSequencePointAndLog (symDoc, l1, c1, l2, c2) = + member ilG.MarkSequencePointAndLog (symDoc, l1, c1, l2, c2) = if logRefEmitCalls then printfn "ilg%d.MarkSequencePoint(docWriter%d, %A, %A, %A, %A)" (abs <| hash ilG) (abs <| hash symDoc) l1 c1 l2 c2 ilG.MarkSequencePoint(symDoc, l1, c1, l2, c2) #endif - member ilG.BeginExceptionBlockAndLog () = - if logRefEmitCalls then printfn "ilg%d.BeginExceptionBlock()" (abs <| hash ilG) + member ilG.BeginExceptionBlockAndLog () = + if logRefEmitCalls then printfn "ilg%d.BeginExceptionBlock()" (abs <| hash ilG) ilG.BeginExceptionBlock() - member ilG.EndExceptionBlockAndLog () = - if logRefEmitCalls then printfn "ilg%d.EndExceptionBlock()" (abs <| hash ilG) + member ilG.EndExceptionBlockAndLog () = + if logRefEmitCalls then printfn "ilg%d.EndExceptionBlock()" (abs <| hash ilG) ilG.EndExceptionBlock() - member ilG.BeginFinallyBlockAndLog () = - if logRefEmitCalls then printfn "ilg%d.BeginFinallyBlock()" (abs <| hash ilG) + member ilG.BeginFinallyBlockAndLog () = + if logRefEmitCalls then printfn "ilg%d.BeginFinallyBlock()" (abs <| hash ilG) ilG.BeginFinallyBlock() - member ilG.BeginCatchBlockAndLog ty = + member ilG.BeginCatchBlockAndLog ty = if logRefEmitCalls then printfn "ilg%d.BeginCatchBlock(%A)" (abs <| hash ilG) ty ilG.BeginCatchBlock ty - member ilG.BeginExceptFilterBlockAndLog () = - if logRefEmitCalls then printfn "ilg%d.BeginExceptFilterBlock()" (abs <| hash ilG) + member ilG.BeginExceptFilterBlockAndLog () = + if logRefEmitCalls then printfn "ilg%d.BeginExceptFilterBlock()" (abs <| hash ilG) ilG.BeginExceptFilterBlock() - member ilG.BeginFaultBlockAndLog () = - if logRefEmitCalls then printfn "ilg%d.BeginFaultBlock()" (abs <| hash ilG) + member ilG.BeginFaultBlockAndLog () = + if logRefEmitCalls then printfn "ilg%d.BeginFaultBlock()" (abs <| hash ilG) ilG.BeginFaultBlock() - member ilG.DefineLabelAndLog () = + member ilG.DefineLabelAndLog () = let lab = ilG.DefineLabel() - if logRefEmitCalls then printfn "let label%d_%d = ilg%d.DefineLabel()" (abs <| hash ilG) (abs <| hash lab) (abs <| hash ilG) + if logRefEmitCalls then printfn "let label%d_%d = ilg%d.DefineLabel()" (abs <| hash ilG) (abs <| hash lab) (abs <| hash ilG) lab - member x.EmitAndLog (op: OpCode) = + member x.EmitAndLog (op: OpCode) = if logRefEmitCalls then printfn "ilg%d.Emit(OpCodes.%s)" (abs <| hash x) op.RefEmitName - x.Emit op - member x.EmitAndLog (op: OpCode, v: Label) = + x.Emit op + member x.EmitAndLog (op: OpCode, v: Label) = if logRefEmitCalls then printfn "ilg%d.Emit(OpCodes.%s, label%d_%d)" (abs <| hash x) op.RefEmitName (abs <| hash x) (abs <| hash v) x.Emit(op, v) - member x.EmitAndLog (op: OpCode, v: int16) = + member x.EmitAndLog (op: OpCode, v: int16) = if logRefEmitCalls then printfn "ilg%d.Emit(OpCodes.%s, int16 %d)" (abs <| hash x) op.RefEmitName v x.Emit(op, v) - member x.EmitAndLog (op: OpCode, v: int32) = + member x.EmitAndLog (op: OpCode, v: int32) = if logRefEmitCalls then printfn "ilg%d.Emit(OpCodes.%s, %d)" (abs <| hash x) op.RefEmitName v x.Emit(op, v) - member x.EmitAndLog (op: OpCode, v: MethodInfo) = + member x.EmitAndLog (op: OpCode, v: MethodInfo) = if logRefEmitCalls then printfn "ilg%d.Emit(OpCodes.%s, methodBuilder%d) // method %s" (abs <| hash x) op.RefEmitName (abs <| hash v) v.Name x.Emit(op, v) - member x.EmitAndLog (op: OpCode, v: string) = + member x.EmitAndLog (op: OpCode, v: string) = if logRefEmitCalls then printfn "ilg%d.Emit(OpCodes.%s, \"@%s\")" (abs <| hash x) op.RefEmitName v x.Emit(op, v) - member x.EmitAndLog (op: OpCode, v: Type) = + member x.EmitAndLog (op: OpCode, v: Type) = if logRefEmitCalls then printfn "ilg%d.Emit(OpCodes.%s, typeof<%s>)" (abs <| hash x) op.RefEmitName v.FullName x.Emit(op, v) - member x.EmitAndLog (op: OpCode, v: FieldInfo) = + member x.EmitAndLog (op: OpCode, v: FieldInfo) = if logRefEmitCalls then printfn "ilg%d.Emit(OpCodes.%s, fieldBuilder%d) // field %s" (abs <| hash x) op.RefEmitName (abs <| hash v) v.Name x.Emit(op, v) - member x.EmitAndLog (op: OpCode, v: ConstructorInfo) = + member x.EmitAndLog (op: OpCode, v: ConstructorInfo) = if logRefEmitCalls then printfn "ilg%d.Emit(OpCodes.%s, constructor_%s)" (abs <| hash x) op.RefEmitName v.DeclaringType.Name x.Emit(op, v) - + //---------------------------------------------------------------------------- // misc @@ -279,33 +275,33 @@ type System.Reflection.Emit.ILGenerator with let inline flagsIf b x = if b then x else enum 0 -module Zmap = +module Zmap = let force x m str = match Zmap.tryFind x m with Some y -> y | None -> failwithf "Zmap.force: %s: x = %+A" str x let equalTypes (s: Type) (t: Type) = s.Equals t let equalTypeLists ss tt = List.lengthsEqAndForall2 equalTypes ss tt let equalTypeArrays ss tt = Array.lengthsEqAndForall2 equalTypes ss tt -let getGenericArgumentsOfType (typT: Type) = +let getGenericArgumentsOfType (typT: Type) = if typT.IsGenericType then typT.GetGenericArguments() else [| |] -let getGenericArgumentsOfMethod (methI: MethodInfo) = - if methI.IsGenericMethod then methI.GetGenericArguments() else [| |] +let getGenericArgumentsOfMethod (methI: MethodInfo) = + if methI.IsGenericMethod then methI.GetGenericArguments() else [| |] -let getTypeConstructor (ty: Type) = +let getTypeConstructor (ty: Type) = if ty.IsGenericType then ty.GetGenericTypeDefinition() else ty //---------------------------------------------------------------------------- // convAssemblyRef //---------------------------------------------------------------------------- -let convAssemblyRef (aref: ILAssemblyRef) = +let convAssemblyRef (aref: ILAssemblyRef) = let asmName = new System.Reflection.AssemblyName() asmName.Name <- aref.Name - (match aref.PublicKey with + (match aref.PublicKey with | None -> () | Some (PublicKey bytes) -> asmName.SetPublicKey bytes | Some (PublicKeyToken bytes) -> asmName.SetPublicKeyToken bytes) - let setVersion (version: ILVersionInfo) = + let setVersion (version: ILVersionInfo) = asmName.Version <- System.Version (int32 version.Major, int32 version.Minor, int32 version.Build, int32 version.Revision) Option.iter setVersion aref.Version // asmName.ProcessorArchitecture <- System.Reflection.ProcessorArchitecture.MSIL @@ -314,7 +310,7 @@ let convAssemblyRef (aref: ILAssemblyRef) = asmName /// The global environment. -type cenv = +type cenv = { ilg: ILGlobals emitTailcalls: bool tryFindSysILTypeRef: string -> ILTypeRef option @@ -324,39 +320,39 @@ type cenv = override x.ToString() = "" let convResolveAssemblyRef (cenv: cenv) (asmref: ILAssemblyRef) qualifiedName = - let assembly = + let assembly = match cenv.resolveAssemblyRef asmref with | Some (Choice1Of2 path) -> // asmRef is a path but the runtime is smarter with assembly names so make one let asmName = AssemblyName.GetAssemblyName(path) asmName.CodeBase <- path - FileSystem.AssemblyLoad asmName + FileSystem.AssemblyLoader.AssemblyLoad asmName | Some (Choice2Of2 assembly) -> assembly | None -> let asmName = convAssemblyRef asmref - FileSystem.AssemblyLoad asmName + FileSystem.AssemblyLoader.AssemblyLoad asmName let typT = assembly.GetType qualifiedName - match typT with + match typT with | null -> error(Error(FSComp.SR.itemNotFoundDuringDynamicCodeGen ("type", qualifiedName, asmref.QualifiedName), range0)) | res -> res /// Convert an Abstract IL type reference to Reflection.Emit System.Type value. -// This ought to be an adequate substitute for this whole function, but it needs +// This ought to be an adequate substitute for this whole function, but it needs // to be thoroughly tested. -// Type.GetType(tref.QualifiedName) +// Type.GetType(tref.QualifiedName) // [] , name -> name // [ns] , name -> ns+name // [ns;typeA;typeB], name -> ns+typeA+typeB+name -let convTypeRefAux (cenv: cenv) (tref: ILTypeRef) = +let convTypeRefAux (cenv: cenv) (tref: ILTypeRef) = let qualifiedName = (String.concat "+" (tref.Enclosing @ [ tref.Name ])).Replace(",", @"\,") match tref.Scope with | ILScopeRef.Assembly asmref -> convResolveAssemblyRef cenv asmref qualifiedName - | ILScopeRef.Module _ + | ILScopeRef.Module _ | ILScopeRef.Local _ -> - let typT = Type.GetType qualifiedName - match typT with + let typT = Type.GetType qualifiedName + match typT with | null -> error(Error(FSComp.SR.itemNotFoundDuringDynamicCodeGen ("type", qualifiedName, ""), range0)) | res -> res | ILScopeRef.PrimaryAssembly -> @@ -366,7 +362,7 @@ let convTypeRefAux (cenv: cenv) (tref: ILTypeRef) = /// and could be placed as hash tables in the global environment. [] type emEnv = - { emTypMap: Zmap + { emTypMap: Zmap emConsMap: Zmap emMethMap: Zmap emFieldMap: Zmap @@ -376,13 +372,13 @@ type emEnv = emTyvars: Type[] list; // stack emEntryPts: (TypeBuilder * string) list delayedFieldInits: (unit -> unit) list} - + let orderILTypeRef = ComparisonIdentity.Structural let orderILMethodRef = ComparisonIdentity.Structural -let orderILFieldRef = ComparisonIdentity.Structural +let orderILFieldRef = ComparisonIdentity.Structural let orderILPropertyRef = ComparisonIdentity.Structural -let emEnv0 = +let emEnv0 = { emTypMap = Zmap.empty orderILTypeRef emConsMap = Zmap.empty orderILMethodRef emMethMap = Zmap.empty orderILMethodRef @@ -394,8 +390,8 @@ let emEnv0 = emEntryPts = [] delayedFieldInits = [] } -let envBindTypeRef emEnv (tref: ILTypeRef) (typT, typB, typeDef) = - match typT with +let envBindTypeRef emEnv (tref: ILTypeRef) (typT, typB, typeDef) = + match typT with | null -> failwithf "binding null type in envBindTypeRef: %s\n" tref.Name | _ -> {emEnv with emTypMap = Zmap.add tref (typT, typB, typeDef, None) emEnv.emTypMap} @@ -411,10 +407,10 @@ let envUpdateCreatedTypeRef emEnv (tref: ILTypeRef) = // match "match x with :? C[] -> ..." before the full loading of an object of type // causes a failure when C is later loaded. One workaround for this is to attempt to do a fake allocation // of objects. We use System.Runtime.Serialization.FormatterServices.GetUninitializedObject to do - // the fake allocation - this creates an "empty" object, even if the object doesn't have + // the fake allocation - this creates an "empty" object, even if the object doesn't have // a constructor. It is not usable in partial trust code. - if runningOnMono && ty.IsClass && not ty.IsAbstract && not ty.IsGenericType && not ty.IsGenericTypeDefinition then - try + if runningOnMono && ty.IsClass && not ty.IsAbstract && not ty.IsGenericType && not ty.IsGenericTypeDefinition then + try System.Runtime.Serialization.FormatterServices.GetUninitializedObject ty |> ignore with e -> () #endif @@ -425,48 +421,48 @@ let envUpdateCreatedTypeRef emEnv (tref: ILTypeRef) = #endif emEnv -let convTypeRef cenv emEnv preferCreated (tref: ILTypeRef) = - let res = +let convTypeRef cenv emEnv preferCreated (tref: ILTypeRef) = + let res = match Zmap.tryFind tref emEnv.emTypMap with - | Some (_typT, _typB, _typeDef, Some createdTy) when preferCreated -> createdTy - | Some (typT, _typB, _typeDef, _) -> typT - | None -> convTypeRefAux cenv tref - match res with + | Some (_typT, _typB, _typeDef, Some createdTy) when preferCreated -> createdTy + | Some (typT, _typB, _typeDef, _) -> typT + | None -> convTypeRefAux cenv tref + match res with | null -> error(Error(FSComp.SR.itemNotFoundDuringDynamicCodeGen ("type", tref.QualifiedName, tref.Scope.QualifiedName), range0)) | _ -> res - -let envBindConsRef emEnv (mref: ILMethodRef) consB = + +let envBindConsRef emEnv (mref: ILMethodRef) consB = {emEnv with emConsMap = Zmap.add mref consB emEnv.emConsMap} -let envGetConsB emEnv (mref: ILMethodRef) = +let envGetConsB emEnv (mref: ILMethodRef) = Zmap.force mref emEnv.emConsMap "envGetConsB: failed" -let envBindMethodRef emEnv (mref: ILMethodRef) methB = +let envBindMethodRef emEnv (mref: ILMethodRef) methB = {emEnv with emMethMap = Zmap.add mref methB emEnv.emMethMap} -let envGetMethB emEnv (mref: ILMethodRef) = +let envGetMethB emEnv (mref: ILMethodRef) = Zmap.force mref emEnv.emMethMap "envGetMethB: failed" -let envBindFieldRef emEnv fref fieldB = +let envBindFieldRef emEnv fref fieldB = {emEnv with emFieldMap = Zmap.add fref fieldB emEnv.emFieldMap} let envGetFieldB emEnv fref = Zmap.force fref emEnv.emFieldMap "- envGetMethB: failed" - -let envBindPropRef emEnv (pref: ILPropertyRef) propB = + +let envBindPropRef emEnv (pref: ILPropertyRef) propB = {emEnv with emPropMap = Zmap.add pref propB emEnv.emPropMap} let envGetPropB emEnv pref = Zmap.force pref emEnv.emPropMap "- envGetPropB: failed" - -let envGetTypB emEnv (tref: ILTypeRef) = + +let envGetTypB emEnv (tref: ILTypeRef) = Zmap.force tref emEnv.emTypMap "envGetTypB: failed" |> (fun (_typT, typB, _typeDef, _createdTypOpt) -> typB) - -let envGetTypeDef emEnv (tref: ILTypeRef) = + +let envGetTypeDef emEnv (tref: ILTypeRef) = Zmap.force tref emEnv.emTypMap "envGetTypeDef: failed" |> (fun (_typT, _typB, typeDef, _createdTypOpt) -> typeDef) - + let envSetLocals emEnv locs = assert (emEnv.emLocals.Length = 0); // check "locals" is not yet set (scopes once only) {emEnv with emLocals = locs} let envGetLocal emEnv i = emEnv.emLocals.[i] // implicit bounds checking @@ -474,19 +470,19 @@ let envGetLocal emEnv i = emEnv.emLocals.[i] // implicit bounds checking let envSetLabel emEnv name lab = assert (not (Zmap.mem name emEnv.emLabels)) {emEnv with emLabels = Zmap.add name lab emEnv.emLabels} - -let envGetLabel emEnv name = + +let envGetLabel emEnv name = Zmap.find name emEnv.emLabels let envPushTyvars emEnv tys = {emEnv with emTyvars = tys :: emEnv.emTyvars} let envPopTyvars emEnv = {emEnv with emTyvars = List.tail emEnv.emTyvars} -let envGetTyvar emEnv u16 = +let envGetTyvar emEnv u16 = match emEnv.emTyvars with | [] -> failwith "envGetTyvar: not scope of type vars" - | tvs :: _ -> - let i = int32 u16 + | tvs :: _ -> + let i = int32 u16 if i<0 || i>= Array.length tvs then failwith (sprintf "want tyvar #%d, but only had %d tyvars" i (Array.length tvs)) else @@ -503,13 +499,13 @@ let envPopEntryPts emEnv = {emEnv with emEntryPts = []}, emEnv.emEntryPts //---------------------------------------------------------------------------- let convCallConv (Callconv (hasThis, basic)) = - let ccA = + let ccA = match hasThis with | ILThisConvention.Static -> CallingConventions.Standard | ILThisConvention.InstanceExplicit -> CallingConventions.ExplicitThis | ILThisConvention.Instance -> CallingConventions.HasThis - let ccB = + let ccB = match basic with | ILArgConvention.Default -> enum 0 | ILArgConvention.CDecl -> enum 0 @@ -526,22 +522,22 @@ let convCallConv (Callconv (hasThis, basic)) = //---------------------------------------------------------------------------- let rec convTypeSpec cenv emEnv preferCreated (tspec: ILTypeSpec) = - let typT = convTypeRef cenv emEnv preferCreated tspec.TypeRef + let typT = convTypeRef cenv emEnv preferCreated tspec.TypeRef let tyargs = List.map (convTypeAux cenv emEnv preferCreated) tspec.GenericArgs - let res = + let res = match isNil tyargs, typT.IsGenericType with - | _, true -> typT.MakeGenericType(List.toArray tyargs) - | true, false -> typT + | _, true -> typT.MakeGenericType(List.toArray tyargs) + | true, false -> typT | _, false -> null - match res with + match res with | null -> error(Error(FSComp.SR.itemNotFoundDuringDynamicCodeGen ("type", tspec.TypeRef.QualifiedName, tspec.Scope.QualifiedName), range0)) | _ -> res - + and convTypeAux cenv emEnv preferCreated ty = match ty with | ILType.Void -> Type.GetType("System.Void") - | ILType.Array (shape, eltType) -> - let baseT = convTypeAux cenv emEnv preferCreated eltType + | ILType.Array (shape, eltType) -> + let baseT = convTypeAux cenv emEnv preferCreated eltType let nDims = shape.Rank // MakeArrayType() returns "eltType[]" // MakeArrayType(1) returns "eltType[*]" @@ -549,19 +545,19 @@ and convTypeAux cenv emEnv preferCreated ty = // MakeArrayType(3) returns "eltType[, , ]" // All non-equal. if nDims=1 - then baseT.MakeArrayType() + then baseT.MakeArrayType() else baseT.MakeArrayType shape.Rank | ILType.Value tspec -> convTypeSpec cenv emEnv preferCreated tspec | ILType.Boxed tspec -> convTypeSpec cenv emEnv preferCreated tspec - | ILType.Ptr eltType -> + | ILType.Ptr eltType -> let baseT = convTypeAux cenv emEnv preferCreated eltType baseT.MakePointerType() - | ILType.Byref eltType -> + | ILType.Byref eltType -> let baseT = convTypeAux cenv emEnv preferCreated eltType baseT.MakeByRefType() | ILType.TypeVar tv -> envGetTyvar emEnv tv - | ILType.Modified (_, _, modifiedTy) -> - + | ILType.Modified (_, _, modifiedTy) -> + convTypeAux cenv emEnv preferCreated modifiedTy | ILType.FunctionPointer _callsig -> failwith "convType: fptr" @@ -577,32 +573,32 @@ and convTypeAux cenv emEnv preferCreated ty = // The external use (reflection and pretty printing) requires the created Type (rather than the builder). // convCreatedType ensures created types are used where possible. // Note: typeBuilder.CreateType() freezes the type and makes a proper Type for the collected information. -//------ +//------ // REVIEW: "convType becomes convCreatedType", the functions could be combined. // If convCreatedType replaced convType functions like convMethodRef, convConstructorSpec, ... (and more?) // will need to be fixed for emitted types to handle both TypeBuilder and later Type proper. - + /// Uses TypeBuilder/TypeBuilderInstantiation for emitted types. let convType cenv emEnv ty = convTypeAux cenv emEnv false ty // Used for ldtoken -let convTypeOrTypeDef cenv emEnv ty = +let convTypeOrTypeDef cenv emEnv ty = match ty with // represents an uninstantiated "TypeDef" or "TypeRef" - | ILType.Boxed tspec when tspec.GenericArgs.IsEmpty -> convTypeRef cenv emEnv false tspec.TypeRef + | ILType.Boxed tspec when tspec.GenericArgs.IsEmpty -> convTypeRef cenv emEnv false tspec.TypeRef | _ -> convType cenv emEnv ty let convTypes cenv emEnv (tys: ILTypes) = List.map (convType cenv emEnv) tys -let convTypesToArray cenv emEnv (tys: ILTypes) = convTypes cenv emEnv tys |> List.toArray +let convTypesToArray cenv emEnv (tys: ILTypes) = convTypes cenv emEnv tys |> List.toArray /// Uses the .CreateType() for emitted type if available. -let convCreatedType cenv emEnv ty = convTypeAux cenv emEnv true ty -let convCreatedTypeRef cenv emEnv ty = convTypeRef cenv emEnv true ty - +let convCreatedType cenv emEnv ty = convTypeAux cenv emEnv true ty +let convCreatedTypeRef cenv emEnv ty = convTypeRef cenv emEnv true ty + let rec convParamModifiersOfType cenv emEnv (pty: ILType) = [| match pty with - | ILType.Modified (modreq, ty, modifiedTy) -> + | ILType.Modified (modreq, ty, modifiedTy) -> yield (modreq, convTypeRef cenv emEnv false ty) yield! convParamModifiersOfType cenv emEnv modifiedTy | _ -> () |] @@ -625,10 +621,10 @@ let convReturnModifiers cenv emEnv (p: ILReturn) = //---------------------------------------------------------------------------- // This is gross. TypeBuilderInstantiation should really be a public type, since we -// have to use alternative means for various Method/Field/Constructor lookups. However since +// have to use alternative means for various Method/Field/Constructor lookups. However since // it isn't we resort to this technique... -let TypeBuilderInstantiationT = - let ty = +let TypeBuilderInstantiationT = + let ty = #if ENABLE_MONO_SUPPORT if runningOnMono then let ty = Type.GetType("System.Reflection.MonoGenericClass") @@ -642,30 +638,30 @@ let TypeBuilderInstantiationT = assert (not (isNull ty)) ty -let typeIsNotQueryable (ty: Type) = +let typeIsNotQueryable (ty: Type) = (ty :? TypeBuilder) || ((ty.GetType()).Equals(TypeBuilderInstantiationT)) //---------------------------------------------------------------------------- // convFieldSpec //---------------------------------------------------------------------------- let queryableTypeGetField _emEnv (parentT: Type) (fref: ILFieldRef) = - let res = parentT.GetField(fref.Name, BindingFlags.Public ||| BindingFlags.NonPublic ||| BindingFlags.Instance ||| BindingFlags.Static ) - match res with + let res = parentT.GetField(fref.Name, BindingFlags.Public ||| BindingFlags.NonPublic ||| BindingFlags.Instance ||| BindingFlags.Static ) + match res with | null -> error(Error(FSComp.SR.itemNotFoundInTypeDuringDynamicCodeGen ("field", fref.Name, fref.DeclaringTypeRef.FullName, fref.DeclaringTypeRef.Scope.QualifiedName), range0)) | _ -> res - -let nonQueryableTypeGetField (parentTI: Type) (fieldInfo: FieldInfo) : FieldInfo = - let res = - if parentTI.IsGenericType then TypeBuilder.GetField(parentTI, fieldInfo) + +let nonQueryableTypeGetField (parentTI: Type) (fieldInfo: FieldInfo) : FieldInfo = + let res = + if parentTI.IsGenericType then TypeBuilder.GetField(parentTI, fieldInfo) else fieldInfo - match res with + match res with | null -> error(Error(FSComp.SR.itemNotFoundInTypeDuringDynamicCodeGen ("field", fieldInfo.Name, parentTI.AssemblyQualifiedName, parentTI.Assembly.FullName), range0)) | _ -> res let convFieldSpec cenv emEnv fspec = let fref = fspec.FieldRef - let tref = fref.DeclaringTypeRef + let tref = fref.DeclaringTypeRef let parentTI = convType cenv emEnv fspec.DeclaringType if isEmittedTypeRef emEnv tref then // NOTE: if "convType becomes convCreatedType", then handle queryable types here too. [bug 4063] (necessary? what repro?) @@ -673,11 +669,11 @@ let convFieldSpec cenv emEnv fspec = nonQueryableTypeGetField parentTI fieldB else // Prior type. - if typeIsNotQueryable parentTI then + if typeIsNotQueryable parentTI then let parentT = getTypeConstructor parentTI - let fieldInfo = queryableTypeGetField emEnv parentT fref + let fieldInfo = queryableTypeGetField emEnv parentT fref nonQueryableTypeGetField parentTI fieldInfo - else + else queryableTypeGetField emEnv parentTI fspec.FieldRef //---------------------------------------------------------------------------- @@ -688,10 +684,10 @@ let queryableTypeGetMethodBySearch cenv emEnv parentT (mref: ILMethodRef) = let cconv = (if mref.CallingConv.IsStatic then BindingFlags.Static else BindingFlags.Instance) let methInfos = parentT.GetMethods(cconv ||| BindingFlags.Public ||| BindingFlags.NonPublic) |> Array.toList (* First, filter on name, if unique, then binding "done" *) - let tyargTs = getGenericArgumentsOfType parentT + let tyargTs = getGenericArgumentsOfType parentT let methInfos = methInfos |> List.filter (fun methInfo -> methInfo.Name = mref.Name) - match methInfos with - | [methInfo] -> + match methInfos with + | [methInfo] -> methInfo | _ -> (* Second, type match. Note type erased (non-generic) F# code would not type match but they have unique names *) @@ -700,29 +696,29 @@ let queryableTypeGetMethodBySearch cenv emEnv parentT (mref: ILMethodRef) = match a with | None -> true | Some a -> - if + if // obvious case - p.IsAssignableFrom a + p.IsAssignableFrom a then true elif // both are generic - p.IsGenericType && a.IsGenericType + p.IsGenericType && a.IsGenericType // non obvious due to contravariance: Action where T: IFoo accepts Action (for FooImpl: IFoo) - && p.GetGenericTypeDefinition().IsAssignableFrom(a.GetGenericTypeDefinition()) + && p.GetGenericTypeDefinition().IsAssignableFrom(a.GetGenericTypeDefinition()) then true else false let satisfiesAllParameters (args: Type option array) (ps: Type array) = if Array.length args <> Array.length ps then false else Array.forall2 satisfiesParameter args ps - + let select (methInfo: MethodInfo) = // mref implied Types - let mtyargTIs = getGenericArgumentsOfMethod methInfo - + let mtyargTIs = getGenericArgumentsOfMethod methInfo + if mtyargTIs.Length <> mref.GenericArity then false (* method generic arity mismatch *) else - // methInfo implied Types + // methInfo implied Types let methodParameters = methInfo.GetParameters() let argTypes = mref.ArgTypes |> List.toArray if argTypes.Length <> methodParameters.Length then false (* method argument length mismatch *) else @@ -736,134 +732,134 @@ let queryableTypeGetMethodBySearch cenv emEnv parentT (mref: ILMethodRef) = // without this check, subsequent call to convTypes would fail because it // constructs generic type without checking constraints if not (satisfiesAllParameters mrefParameterTypes haveArgTs) then false else - - let argTs, resT = + + let argTs, resT = let emEnv = envPushTyvars emEnv (Array.append tyargTs mtyargTIs) let argTs = convTypes cenv emEnv mref.ArgTypes let resT = convType cenv emEnv mref.ReturnType - argTs, resT - + argTs, resT + let haveResT = methInfo.ReturnType (* check for match *) if argTs.Length <> methodParameters.Length then false (* method argument length mismatch *) else let res = equalTypes resT haveResT && equalTypeLists argTs (haveArgTs |> Array.toList) res - + match List.tryFind select methInfos with - | None -> + | None -> let methNames = methInfos |> List.map (fun m -> m.Name) |> List.distinct failwithf "convMethodRef: could not bind to method '%A' of type '%s'" (System.String.Join(", ", methNames)) parentT.AssemblyQualifiedName | Some methInfo -> methInfo (* return MethodInfo for (generic) type's (generic) method *) - + let queryableTypeGetMethod cenv emEnv parentT (mref: ILMethodRef) = assert(not (typeIsNotQueryable parentT)) - if mref.GenericArity = 0 then - let tyargTs = getGenericArgumentsOfType parentT - let argTs, resT = + if mref.GenericArity = 0 then + let tyargTs = getGenericArgumentsOfType parentT + let argTs, resT = let emEnv = envPushTyvars emEnv tyargTs let argTs = convTypesToArray cenv emEnv mref.ArgTypes let resT = convType cenv emEnv mref.ReturnType - argTs, resT + argTs, resT let stat = mref.CallingConv.IsStatic let cconv = (if stat then BindingFlags.Static else BindingFlags.Instance) - let methInfo = - try - parentT.GetMethod(mref.Name, cconv ||| BindingFlags.Public ||| BindingFlags.NonPublic, - null, - argTs, + let methInfo = + try + parentT.GetMethod(mref.Name, cconv ||| BindingFlags.Public ||| BindingFlags.NonPublic, + null, + argTs, (null: ParameterModifier[])) - // This can fail if there is an ambiguity w.r.t. return type + // This can fail if there is an ambiguity w.r.t. return type with _ -> null - if (isNonNull methInfo && equalTypes resT methInfo.ReturnType) then + if (isNonNull methInfo && equalTypes resT methInfo.ReturnType) then methInfo else queryableTypeGetMethodBySearch cenv emEnv parentT mref - else + else queryableTypeGetMethodBySearch cenv emEnv parentT mref -let nonQueryableTypeGetMethod (parentTI: Type) (methInfo: MethodInfo) : MethodInfo = +let nonQueryableTypeGetMethod (parentTI: Type) (methInfo: MethodInfo) : MethodInfo = if (parentTI.IsGenericType && - not (equalTypes parentTI (getTypeConstructor parentTI))) + not (equalTypes parentTI (getTypeConstructor parentTI))) then TypeBuilder.GetMethod(parentTI, methInfo ) - else methInfo + else methInfo let convMethodRef cenv emEnv (parentTI: Type) (mref: ILMethodRef) = let parent = mref.DeclaringTypeRef - let res = + let res = if isEmittedTypeRef emEnv parent then - // NOTE: if "convType becomes convCreatedType", then handle queryable types here too. [bug 4063] + // NOTE: if "convType becomes convCreatedType", then handle queryable types here too. [bug 4063] // Emitted type, can get fully generic MethodBuilder from env. let methB = envGetMethB emEnv mref nonQueryableTypeGetMethod parentTI methB else // Prior type. - if typeIsNotQueryable parentTI then + if typeIsNotQueryable parentTI then let parentT = getTypeConstructor parentTI - let methInfo = queryableTypeGetMethod cenv emEnv parentT mref + let methInfo = queryableTypeGetMethod cenv emEnv parentT mref nonQueryableTypeGetMethod parentTI methInfo - else - queryableTypeGetMethod cenv emEnv parentTI mref - match res with + else + queryableTypeGetMethod cenv emEnv parentTI mref + match res with | null -> error(Error(FSComp.SR.itemNotFoundInTypeDuringDynamicCodeGen ("method", mref.Name, parentTI.FullName, parentTI.Assembly.FullName), range0)) | _ -> res //---------------------------------------------------------------------------- // convMethodSpec //---------------------------------------------------------------------------- - + let convMethodSpec cenv emEnv (mspec: ILMethodSpec) = let typT = convType cenv emEnv mspec.DeclaringType (* (instanced) parent Type *) let methInfo = convMethodRef cenv emEnv typT mspec.MethodRef (* (generic) method of (generic) parent *) let methInfo = - if isNil mspec.GenericArgs then - methInfo // non generic - else + if isNil mspec.GenericArgs then + methInfo // non generic + else let minstTs = convTypesToArray cenv emEnv mspec.GenericArgs - let methInfo = methInfo.MakeGenericMethod minstTs // instantiate method + let methInfo = methInfo.MakeGenericMethod minstTs // instantiate method methInfo - methInfo + methInfo /// Get a constructor on a non-TypeBuilder type let queryableTypeGetConstructor cenv emEnv (parentT: Type) (mref: ILMethodRef) = let tyargTs = getGenericArgumentsOfType parentT - let reqArgTs = + let reqArgTs = let emEnv = envPushTyvars emEnv tyargTs convTypesToArray cenv emEnv mref.ArgTypes - let res = parentT.GetConstructor(BindingFlags.Public ||| BindingFlags.NonPublic ||| BindingFlags.Instance, null, reqArgTs, null) - match res with + let res = parentT.GetConstructor(BindingFlags.Public ||| BindingFlags.NonPublic ||| BindingFlags.Instance, null, reqArgTs, null) + match res with | null -> error(Error(FSComp.SR.itemNotFoundInTypeDuringDynamicCodeGen ("constructor", mref.Name, parentT.FullName, parentT.Assembly.FullName), range0)) | _ -> res -let nonQueryableTypeGetConstructor (parentTI: Type) (consInfo: ConstructorInfo) : ConstructorInfo = +let nonQueryableTypeGetConstructor (parentTI: Type) (consInfo: ConstructorInfo) : ConstructorInfo = if parentTI.IsGenericType then TypeBuilder.GetConstructor(parentTI, consInfo) else consInfo -/// convConstructorSpec (like convMethodSpec) +/// convConstructorSpec (like convMethodSpec) let convConstructorSpec cenv emEnv (mspec: ILMethodSpec) = let mref = mspec.MethodRef let parentTI = convType cenv emEnv mspec.DeclaringType - let res = + let res = if isEmittedTypeRef emEnv mref.DeclaringTypeRef then - let consB = envGetConsB emEnv mref - nonQueryableTypeGetConstructor parentTI consB + let consB = envGetConsB emEnv mref + nonQueryableTypeGetConstructor parentTI consB else // Prior type. - if typeIsNotQueryable parentTI then - let parentT = getTypeConstructor parentTI - let ctorG = queryableTypeGetConstructor cenv emEnv parentT mref + if typeIsNotQueryable parentTI then + let parentT = getTypeConstructor parentTI + let ctorG = queryableTypeGetConstructor cenv emEnv parentT mref nonQueryableTypeGetConstructor parentTI ctorG else - queryableTypeGetConstructor cenv emEnv parentTI mref - match res with + queryableTypeGetConstructor cenv emEnv parentTI mref + match res with | null -> error(Error(FSComp.SR.itemNotFoundInTypeDuringDynamicCodeGen ("constructor", "", parentTI.FullName, parentTI.Assembly.FullName), range0)) | _ -> res let emitLabelMark emEnv (ilG: ILGenerator) (label: ILCodeLabel) = let lab = envGetLabel emEnv label ilG.MarkLabelAndLog lab - + ///Emit comparison instructions. -let emitInstrCompare emEnv (ilG: ILGenerator) comp targ = +let emitInstrCompare emEnv (ilG: ILGenerator) comp targ = match comp with | BI_beq -> ilG.EmitAndLog (OpCodes.Beq, envGetLabel emEnv targ) | BI_bge -> ilG.EmitAndLog (OpCodes.Bge, envGetLabel emEnv targ) @@ -885,14 +881,14 @@ let emitInstrVolatile (ilG: ILGenerator) = function | Nonvolatile -> () /// Emit the align. prefix -let emitInstrAlign (ilG: ILGenerator) = function +let emitInstrAlign (ilG: ILGenerator) = function | Aligned -> () | Unaligned1 -> ilG.Emit(OpCodes.Unaligned, 1L) // note: doc says use "long" overload! | Unaligned2 -> ilG.Emit(OpCodes.Unaligned, 2L) | Unaligned4 -> ilG.Emit(OpCodes.Unaligned, 3L) /// Emit the tail. prefix if necessary -let emitInstrTail (cenv: cenv) (ilG: ILGenerator) tail emitTheCall = +let emitInstrTail (cenv: cenv) (ilG: ILGenerator) tail emitTheCall = match tail with | Tailcall when cenv.emitTailcalls -> ilG.EmitAndLog OpCodes.Tailcall; emitTheCall(); ilG.EmitAndLog OpCodes.Ret | _ -> emitTheCall() @@ -920,22 +916,22 @@ let emitInstrCall cenv emEnv (ilG: ILGenerator) opCall tail (mspec: ILMethodSpec | Some varargTys -> ilG.EmitCall (opCall, minfo, convTypesToArray cenv emEnv varargTys) ) -let getGenericMethodDefinition q (ty: Type) = - let gminfo = - match q with +let getGenericMethodDefinition q (ty: Type) = + let gminfo = + match q with | Quotations.Patterns.Call(_, minfo, _) -> minfo.GetGenericMethodDefinition() | _ -> failwith "unexpected failure decoding quotation at ilreflect startup" gminfo.MakeGenericMethod [| ty |] -let getArrayMethInfo n ty = - match n with +let getArrayMethInfo n ty = + match n with | 2 -> getGenericMethodDefinition <@@ LanguagePrimitives.IntrinsicFunctions.GetArray2D null 0 0 @@> ty | 3 -> getGenericMethodDefinition <@@ LanguagePrimitives.IntrinsicFunctions.GetArray3D null 0 0 0 @@> ty | 4 -> getGenericMethodDefinition <@@ LanguagePrimitives.IntrinsicFunctions.GetArray4D null 0 0 0 0 @@> ty | _ -> invalidArg "n" "not expecting array dimension > 4" - -let setArrayMethInfo n ty = - match n with + +let setArrayMethInfo n ty = + match n with | 2 -> getGenericMethodDefinition <@@ LanguagePrimitives.IntrinsicFunctions.SetArray2D null 0 0 0 @@> ty | 3 -> getGenericMethodDefinition <@@ LanguagePrimitives.IntrinsicFunctions.SetArray3D null 0 0 0 0 @@> ty | 4 -> getGenericMethodDefinition <@@ LanguagePrimitives.IntrinsicFunctions.SetArray4D null 0 0 0 0 0 @@> ty @@ -946,10 +942,10 @@ let setArrayMethInfo n ty = // emitInstr cenv //---------------------------------------------------------------------------- -let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = - match instr with - | AI_add -> ilG.EmitAndLog OpCodes.Add - | AI_add_ovf -> ilG.EmitAndLog OpCodes.Add_Ovf +let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = + match instr with + | AI_add -> ilG.EmitAndLog OpCodes.Add + | AI_add_ovf -> ilG.EmitAndLog OpCodes.Add_Ovf | AI_add_ovf_un -> ilG.EmitAndLog OpCodes.Add_Ovf_Un | AI_and -> ilG.EmitAndLog OpCodes.And | AI_div -> ilG.EmitAndLog OpCodes.Div @@ -959,56 +955,56 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = | AI_cgt_un -> ilG.EmitAndLog OpCodes.Cgt_Un | AI_clt -> ilG.EmitAndLog OpCodes.Clt | AI_clt_un -> ilG.EmitAndLog OpCodes.Clt_Un - // conversion - | AI_conv dt -> + // conversion + | AI_conv dt -> match dt with | DT_I -> ilG.EmitAndLog OpCodes.Conv_I | DT_I1 -> ilG.EmitAndLog OpCodes.Conv_I1 | DT_I2 -> ilG.EmitAndLog OpCodes.Conv_I2 | DT_I4 -> ilG.EmitAndLog OpCodes.Conv_I4 | DT_I8 -> ilG.EmitAndLog OpCodes.Conv_I8 - | DT_U -> ilG.EmitAndLog OpCodes.Conv_U - | DT_U1 -> ilG.EmitAndLog OpCodes.Conv_U1 - | DT_U2 -> ilG.EmitAndLog OpCodes.Conv_U2 - | DT_U4 -> ilG.EmitAndLog OpCodes.Conv_U4 + | DT_U -> ilG.EmitAndLog OpCodes.Conv_U + | DT_U1 -> ilG.EmitAndLog OpCodes.Conv_U1 + | DT_U2 -> ilG.EmitAndLog OpCodes.Conv_U2 + | DT_U4 -> ilG.EmitAndLog OpCodes.Conv_U4 | DT_U8 -> ilG.EmitAndLog OpCodes.Conv_U8 | DT_R -> ilG.EmitAndLog OpCodes.Conv_R_Un | DT_R4 -> ilG.EmitAndLog OpCodes.Conv_R4 | DT_R8 -> ilG.EmitAndLog OpCodes.Conv_R8 | DT_REF -> failwith "AI_conv DT_REF?" // XXX - check // conversion - ovf checks - | AI_conv_ovf dt -> + | AI_conv_ovf dt -> match dt with | DT_I -> ilG.EmitAndLog OpCodes.Conv_Ovf_I | DT_I1 -> ilG.EmitAndLog OpCodes.Conv_Ovf_I1 | DT_I2 -> ilG.EmitAndLog OpCodes.Conv_Ovf_I2 | DT_I4 -> ilG.EmitAndLog OpCodes.Conv_Ovf_I4 | DT_I8 -> ilG.EmitAndLog OpCodes.Conv_Ovf_I8 - | DT_U -> ilG.EmitAndLog OpCodes.Conv_Ovf_U - | DT_U1 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U1 - | DT_U2 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U2 + | DT_U -> ilG.EmitAndLog OpCodes.Conv_Ovf_U + | DT_U1 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U1 + | DT_U2 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U2 | DT_U4 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U4 | DT_U8 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U8 - | DT_R -> failwith "AI_conv_ovf DT_R?" // XXX - check - | DT_R4 -> failwith "AI_conv_ovf DT_R4?" // XXX - check - | DT_R8 -> failwith "AI_conv_ovf DT_R8?" // XXX - check + | DT_R -> failwith "AI_conv_ovf DT_R?" // XXX - check + | DT_R4 -> failwith "AI_conv_ovf DT_R4?" // XXX - check + | DT_R8 -> failwith "AI_conv_ovf DT_R8?" // XXX - check | DT_REF -> failwith "AI_conv_ovf DT_REF?" // XXX - check - // conversion - ovf checks and unsigned - | AI_conv_ovf_un dt -> + // conversion - ovf checks and unsigned + | AI_conv_ovf_un dt -> match dt with | DT_I -> ilG.EmitAndLog OpCodes.Conv_Ovf_I_Un | DT_I1 -> ilG.EmitAndLog OpCodes.Conv_Ovf_I1_Un | DT_I2 -> ilG.EmitAndLog OpCodes.Conv_Ovf_I2_Un | DT_I4 -> ilG.EmitAndLog OpCodes.Conv_Ovf_I4_Un | DT_I8 -> ilG.EmitAndLog OpCodes.Conv_Ovf_I8_Un - | DT_U -> ilG.EmitAndLog OpCodes.Conv_Ovf_U_Un - | DT_U1 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U1_Un - | DT_U2 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U2_Un - | DT_U4 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U4_Un + | DT_U -> ilG.EmitAndLog OpCodes.Conv_Ovf_U_Un + | DT_U1 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U1_Un + | DT_U2 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U2_Un + | DT_U4 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U4_Un | DT_U8 -> ilG.EmitAndLog OpCodes.Conv_Ovf_U8_Un - | DT_R -> failwith "AI_conv_ovf_un DT_R?" // XXX - check - | DT_R4 -> failwith "AI_conv_ovf_un DT_R4?" // XXX - check - | DT_R8 -> failwith "AI_conv_ovf_un DT_R8?" // XXX - check + | DT_R -> failwith "AI_conv_ovf_un DT_R?" // XXX - check + | DT_R4 -> failwith "AI_conv_ovf_un DT_R4?" // XXX - check + | DT_R8 -> failwith "AI_conv_ovf_un DT_R8?" // XXX - check | DT_REF -> failwith "AI_conv_ovf_un DT_REF?" // XXX - check | AI_mul -> ilG.EmitAndLog OpCodes.Mul | AI_mul_ovf -> ilG.EmitAndLog OpCodes.Mul_Ovf @@ -1037,7 +1033,7 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = | AI_ldc (_, _ ) -> failwith "emitInstrI_arith (AI_ldc (ty, const)) iltyped" | I_ldarg u16 -> ilG.EmitAndLog (OpCodes.Ldarg, int16 u16) | I_ldarga u16 -> ilG.EmitAndLog (OpCodes.Ldarga, int16 u16) - | I_ldind (align, vol, dt) -> + | I_ldind (align, vol, dt) -> emitInstrAlign ilG align emitInstrVolatile ilG vol match dt with @@ -1058,7 +1054,7 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = | I_ldloc u16 -> ilG.EmitAndLog (OpCodes.Ldloc, int16 u16) | I_ldloca u16 -> ilG.EmitAndLog (OpCodes.Ldloca, int16 u16) | I_starg u16 -> ilG.EmitAndLog (OpCodes.Starg, int16 u16) - | I_stind (align, vol, dt) -> + | I_stind (align, vol, dt) -> emitInstrAlign ilG align emitInstrVolatile ilG vol match dt with @@ -1079,58 +1075,58 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = | I_stloc u16 -> ilG.EmitAndLog (OpCodes.Stloc, int16 u16) | I_br targ -> ilG.EmitAndLog (OpCodes.Br, envGetLabel emEnv targ) | I_jmp mspec -> ilG.EmitAndLog (OpCodes.Jmp, convMethodSpec cenv emEnv mspec) - | I_brcmp (comp, targ) -> emitInstrCompare emEnv ilG comp targ + | I_brcmp (comp, targ) -> emitInstrCompare emEnv ilG comp targ | I_switch labels -> ilG.Emit(OpCodes.Switch, Array.ofList (List.map (envGetLabel emEnv) labels)) | I_ret -> ilG.EmitAndLog OpCodes.Ret - | I_call (tail, mspec, varargs) -> + | I_call (tail, mspec, varargs) -> emitSilverlightCheck ilG emitInstrCall cenv emEnv ilG OpCodes.Call tail mspec varargs - | I_callvirt (tail, mspec, varargs) -> + | I_callvirt (tail, mspec, varargs) -> emitSilverlightCheck ilG emitInstrCall cenv emEnv ilG OpCodes.Callvirt tail mspec varargs - | I_callconstraint (tail, ty, mspec, varargs) -> + | I_callconstraint (tail, ty, mspec, varargs) -> ilG.Emit(OpCodes.Constrained, convType cenv emEnv ty) - emitInstrCall cenv emEnv ilG OpCodes.Callvirt tail mspec varargs + emitInstrCall cenv emEnv ilG OpCodes.Callvirt tail mspec varargs - | I_calli (tail, callsig, None) -> + | I_calli (tail, callsig, None) -> emitInstrTail cenv ilG tail (fun () -> - ilG.EmitCalli(OpCodes.Calli, - convCallConv callsig.CallingConv, - convType cenv emEnv callsig.ReturnType, - convTypesToArray cenv emEnv callsig.ArgTypes, + ilG.EmitCalli(OpCodes.Calli, + convCallConv callsig.CallingConv, + convType cenv emEnv callsig.ReturnType, + convTypesToArray cenv emEnv callsig.ArgTypes, Unchecked.defaultof)) - | I_calli (tail, callsig, Some varargTys) -> + | I_calli (tail, callsig, Some varargTys) -> emitInstrTail cenv ilG tail (fun () -> - ilG.EmitCalli(OpCodes.Calli, - convCallConv callsig.CallingConv, - convType cenv emEnv callsig.ReturnType, - convTypesToArray cenv emEnv callsig.ArgTypes, - convTypesToArray cenv emEnv varargTys)) + ilG.EmitCalli(OpCodes.Calli, + convCallConv callsig.CallingConv, + convType cenv emEnv callsig.ReturnType, + convTypesToArray cenv emEnv callsig.ArgTypes, + convTypesToArray cenv emEnv varargTys)) - | I_ldftn mspec -> + | I_ldftn mspec -> ilG.EmitAndLog (OpCodes.Ldftn, convMethodSpec cenv emEnv mspec) - | I_newobj (mspec, varargs) -> + | I_newobj (mspec, varargs) -> emitInstrNewobj cenv emEnv ilG mspec varargs | I_throw -> ilG.EmitAndLog OpCodes.Throw | I_endfinally -> ilG.EmitAndLog OpCodes.Endfinally - | I_endfilter -> ilG.EmitAndLog OpCodes.Endfilter + | I_endfilter -> ilG.EmitAndLog OpCodes.Endfilter | I_leave label -> ilG.EmitAndLog (OpCodes.Leave, envGetLabel emEnv label) | I_ldsfld (vol, fspec) -> emitInstrVolatile ilG vol; ilG.EmitAndLog (OpCodes.Ldsfld, convFieldSpec cenv emEnv fspec) | I_ldfld (align, vol, fspec) -> emitInstrAlign ilG align; emitInstrVolatile ilG vol; ilG.EmitAndLog (OpCodes.Ldfld, convFieldSpec cenv emEnv fspec) | I_ldsflda fspec -> ilG.EmitAndLog (OpCodes.Ldsflda, convFieldSpec cenv emEnv fspec) | I_ldflda fspec -> ilG.EmitAndLog (OpCodes.Ldflda, convFieldSpec cenv emEnv fspec) - | I_stsfld (vol, fspec) -> + | I_stsfld (vol, fspec) -> emitInstrVolatile ilG vol ilG.EmitAndLog (OpCodes.Stsfld, convFieldSpec cenv emEnv fspec) - | I_stfld (align, vol, fspec) -> + | I_stfld (align, vol, fspec) -> emitInstrAlign ilG align emitInstrVolatile ilG vol ilG.EmitAndLog (OpCodes.Stfld, convFieldSpec cenv emEnv fspec) @@ -1146,12 +1142,12 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = | I_cpobj ty -> ilG.EmitAndLog (OpCodes.Cpobj, convType cenv emEnv ty) | I_initobj ty -> ilG.EmitAndLog (OpCodes.Initobj, convType cenv emEnv ty) - | I_ldobj (align, vol, ty) -> + | I_ldobj (align, vol, ty) -> emitInstrAlign ilG align emitInstrVolatile ilG vol ilG.EmitAndLog (OpCodes.Ldobj, convType cenv emEnv ty) - | I_stobj (align, vol, ty) -> + | I_stobj (align, vol, ty) -> emitInstrAlign ilG align emitInstrVolatile ilG vol ilG.EmitAndLog (OpCodes.Stobj, convType cenv emEnv ty) @@ -1161,19 +1157,19 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = | I_unbox_any ty -> ilG.EmitAndLog (OpCodes.Unbox_Any, convType cenv emEnv ty) | I_sizeof ty -> ilG.EmitAndLog (OpCodes.Sizeof, convType cenv emEnv ty) - // Generalized array instructions. - // In AbsIL these instructions include - // both the single-dimensional variants (with ILArrayShape == ILArrayShape.SingleDimensional) - // and calls to the "special" multi-dimensional "methods" such as - // newobj void string[, ] :: .ctor(int32, int32) - // call string string[, ] :: Get(int32, int32) - // call string& string[, ] :: Address(int32, int32) - // call void string[, ] :: Set(int32, int32, string) - // The IL reader transforms calls of this form to the corresponding - // generalized instruction with the corresponding ILArrayShape - // argument. This is done to simplify the IL and make it more uniform. - // The IL writer then reverses this when emitting the binary. - | I_ldelem dt -> + // Generalized array instructions. + // In AbsIL these instructions include + // both the single-dimensional variants (with ILArrayShape == ILArrayShape.SingleDimensional) + // and calls to the "special" multi-dimensional "methods" such as + // newobj void string[, ] :: .ctor(int32, int32) + // call string string[, ] :: Get(int32, int32) + // call string& string[, ] :: Address(int32, int32) + // call void string[, ] :: Set(int32, int32, string) + // The IL reader transforms calls of this form to the corresponding + // generalized instruction with the corresponding ILArrayShape + // argument. This is done to simplify the IL and make it more uniform. + // The IL writer then reverses this when emitting the binary. + | I_ldelem dt -> match dt with | DT_I -> ilG.EmitAndLog OpCodes.Ldelem_I | DT_I1 -> ilG.EmitAndLog OpCodes.Ldelem_I1 @@ -1190,7 +1186,7 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = | DT_U8 -> failwith "emitInstr cenv: ldelem U8" | DT_REF -> ilG.EmitAndLog OpCodes.Ldelem_Ref - | I_stelem dt -> + | I_stelem dt -> match dt with | DT_I -> ilG.EmitAndLog OpCodes.Stelem_I | DT_I1 -> ilG.EmitAndLog OpCodes.Stelem_I1 @@ -1207,52 +1203,52 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = | DT_U8 -> failwith "emitInstr cenv: stelem U8" | DT_REF -> ilG.EmitAndLog OpCodes.Stelem_Ref - | I_ldelema (ro, _isNativePtr, shape, ty) -> + | I_ldelema (ro, _isNativePtr, shape, ty) -> if (ro = ReadonlyAddress) then ilG.EmitAndLog OpCodes.Readonly - if (shape = ILArrayShape.SingleDimensional) + if (shape = ILArrayShape.SingleDimensional) then ilG.EmitAndLog (OpCodes.Ldelema, convType cenv emEnv ty) - else - let aty = convType cenv emEnv (ILType.Array(shape, ty)) + else + let aty = convType cenv emEnv (ILType.Array(shape, ty)) let ety = aty.GetElementType() - let rty = ety.MakeByRefType() + let rty = ety.MakeByRefType() let meth = modB.GetArrayMethodAndLog (aty, "Address", System.Reflection.CallingConventions.HasThis, rty, Array.create shape.Rank (typeof) ) ilG.EmitAndLog (OpCodes.Call, meth) - | I_ldelem_any (shape, ty) -> + | I_ldelem_any (shape, ty) -> if (shape = ILArrayShape.SingleDimensional) then ilG.EmitAndLog (OpCodes.Ldelem, convType cenv emEnv ty) - else - let aty = convType cenv emEnv (ILType.Array(shape, ty)) + else + let aty = convType cenv emEnv (ILType.Array(shape, ty)) let ety = aty.GetElementType() - let meth = + let meth = #if ENABLE_MONO_SUPPORT // See bug 6254: Mono has a bug in reflection-emit dynamic calls to the "Get", "Address" or "Set" methods on arrays - if runningOnMono then + if runningOnMono then getArrayMethInfo shape.Rank ety else #endif modB.GetArrayMethodAndLog (aty, "Get", System.Reflection.CallingConventions.HasThis, ety, Array.create shape.Rank (typeof) ) ilG.EmitAndLog (OpCodes.Call, meth) - | I_stelem_any (shape, ty) -> + | I_stelem_any (shape, ty) -> if (shape = ILArrayShape.SingleDimensional) then ilG.EmitAndLog (OpCodes.Stelem, convType cenv emEnv ty) - else - let aty = convType cenv emEnv (ILType.Array(shape, ty)) + else + let aty = convType cenv emEnv (ILType.Array(shape, ty)) let ety = aty.GetElementType() - let meth = + let meth = #if ENABLE_MONO_SUPPORT // See bug 6254: Mono has a bug in reflection-emit dynamic calls to the "Get", "Address" or "Set" methods on arrays - if runningOnMono then + if runningOnMono then setArrayMethInfo shape.Rank ety else #endif - modB.GetArrayMethodAndLog (aty, "Set", System.Reflection.CallingConventions.HasThis, (null: Type), Array.append (Array.create shape.Rank (typeof)) (Array.ofList [ ety ])) + modB.GetArrayMethodAndLog (aty, "Set", System.Reflection.CallingConventions.HasThis, (null: Type), Array.append (Array.create shape.Rank (typeof)) (Array.ofList [ ety ])) ilG.EmitAndLog (OpCodes.Call, meth) - | I_newarr (shape, ty) -> + | I_newarr (shape, ty) -> if (shape = ILArrayShape.SingleDimensional) then ilG.EmitAndLog (OpCodes.Newarr, convType cenv emEnv ty) - else - let aty = convType cenv emEnv (ILType.Array(shape, ty)) + else + let aty = convType cenv emEnv (ILType.Array(shape, ty)) let meth = modB.GetArrayMethodAndLog (aty, ".ctor", System.Reflection.CallingConventions.HasThis, (null: Type), Array.create shape.Rank (typeof)) ilG.EmitAndLog (OpCodes.Newobj, meth) @@ -1262,7 +1258,7 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = | I_refanyval ty -> ilG.EmitAndLog (OpCodes.Refanyval, convType cenv emEnv ty) | I_rethrow -> ilG.EmitAndLog OpCodes.Rethrow | I_break -> ilG.EmitAndLog OpCodes.Break - | I_seqpoint src -> + | I_seqpoint src -> #if FX_RESHAPED_REFEMIT ignore src () @@ -1275,17 +1271,17 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = | I_arglist -> ilG.EmitAndLog OpCodes.Arglist | I_localloc -> ilG.EmitAndLog OpCodes.Localloc - | I_cpblk (align, vol) -> + | I_cpblk (align, vol) -> emitInstrAlign ilG align emitInstrVolatile ilG vol ilG.EmitAndLog OpCodes.Cpblk - | I_initblk (align, vol) -> + | I_initblk (align, vol) -> emitInstrAlign ilG align emitInstrVolatile ilG vol ilG.EmitAndLog OpCodes.Initblk - | EI_ldlen_multi (_, m) -> + | EI_ldlen_multi (_, m) -> emitInstr cenv modB emEnv ilG (mkLdcInt32 m) emitInstr cenv modB emEnv ilG (mkNormalCall(mkILNonGenericMethSpecInTy(cenv.ilg.typ_Array, ILCallingConv.Instance, "GetLength", [cenv.ilg.typ_Int32], cenv.ilg.typ_Int32))) @@ -1295,19 +1291,19 @@ let rec emitInstr cenv (modB: ModuleBuilder) emEnv (ilG: ILGenerator) instr = let emitCode cenv modB emEnv (ilG: ILGenerator) (code: ILCode) = // Pre-define the labels pending determining their actual marks let pc2lab = Dictionary() - let emEnv = - (emEnv, code.Labels) ||> Seq.fold (fun emEnv (KeyValue(label, pc)) -> + let emEnv = + (emEnv, code.Labels) ||> Seq.fold (fun emEnv (KeyValue(label, pc)) -> let lab = ilG.DefineLabelAndLog () pc2lab.[pc] <- match pc2lab.TryGetValue pc with | true, labels -> lab :: labels | _ -> [lab] envSetLabel emEnv label lab) - + // Build a table that contains the operations that define where exception handlers are let pc2action = Dictionary() let lab2pc = code.Labels - let add lab action = + let add lab action = let pc = lab2pc.[lab] pc2action.[pc] <- match pc2action.TryGetValue pc with @@ -1319,21 +1315,21 @@ let emitCode cenv modB emEnv (ilG: ILGenerator) (code: ILCode) = add startTry (fun () -> ilG.BeginExceptionBlockAndLog () |> ignore) - match e.Clause with - | ILExceptionClause.Finally(startHandler, endHandler) -> + match e.Clause with + | ILExceptionClause.Finally(startHandler, endHandler) -> add startHandler ilG.BeginFinallyBlockAndLog add endHandler ilG.EndExceptionBlockAndLog - | ILExceptionClause.Fault(startHandler, endHandler) -> + | ILExceptionClause.Fault(startHandler, endHandler) -> add startHandler ilG.BeginFaultBlockAndLog add endHandler ilG.EndExceptionBlockAndLog - | ILExceptionClause.FilterCatch((startFilter, _), (startHandler, endHandler)) -> + | ILExceptionClause.FilterCatch((startFilter, _), (startHandler, endHandler)) -> add startFilter ilG.BeginExceptFilterBlockAndLog add startHandler (fun () -> ilG.BeginCatchBlockAndLog null) add endHandler ilG.EndExceptionBlockAndLog - | ILExceptionClause.TypeCatch(ty, (startHandler, endHandler)) -> + | ILExceptionClause.TypeCatch(ty, (startHandler, endHandler)) -> add startHandler (fun () -> ilG.BeginCatchBlockAndLog (convType cenv emEnv ty)) add endHandler ilG.EndExceptionBlockAndLog @@ -1343,7 +1339,7 @@ let emitCode cenv modB emEnv (ilG: ILGenerator) (code: ILCode) = for pc = 0 to instrs.Length do match pc2action.TryGetValue pc with | true, actions -> - for action in actions do + for action in actions do action() | _ -> () @@ -1353,8 +1349,8 @@ let emitCode cenv modB emEnv (ilG: ILGenerator) (code: ILCode) = ilG.MarkLabelAndLog lab | _ -> () - if pc < instrs.Length then - match instrs.[pc] with + if pc < instrs.Length then + match instrs.[pc] with | I_br l when code.Labels.[l] = pc + 1 -> () // compress I_br to next instruction | i -> emitInstr cenv modB emEnv ilG i @@ -1372,23 +1368,23 @@ let emitLocal cenv emEnv (ilG: ILGenerator) (local: ILLocal) = let emitILMethodBody cenv modB emEnv (ilG: ILGenerator) (ilmbody: ILMethodBody) = let localBs = Array.map (emitLocal cenv emEnv ilG) (List.toArray ilmbody.Locals) let emEnv = envSetLocals emEnv localBs - emitCode cenv modB emEnv ilG ilmbody.Code + emitCode cenv modB emEnv ilG ilmbody.Code -let emitMethodBody cenv modB emEnv ilG _name (mbody: ILLazyMethodBody) = - match mbody.Contents with - | MethodBody.IL ilmbody -> emitILMethodBody cenv modB emEnv (ilG()) ilmbody +let emitMethodBody cenv modB emEnv ilG _name (mbody: MethodBody) = + match mbody with + | MethodBody.IL ilmbody -> emitILMethodBody cenv modB emEnv (ilG()) ilmbody.Value | MethodBody.PInvoke _pinvoke -> () | MethodBody.Abstract -> () - | MethodBody.Native -> failwith "emitMethodBody: native" + | MethodBody.Native -> failwith "emitMethodBody: native" | MethodBody.NotAvailable -> failwith "emitMethodBody: metadata only" let convCustomAttr cenv emEnv (cattr: ILAttribute) = - let methInfo = - match convConstructorSpec cenv emEnv cattr.Method with + let methInfo = + match convConstructorSpec cenv emEnv cattr.Method with | null -> failwithf "convCustomAttr: %+A" cattr.Method | res -> res - let data = getCustomAttrData cenv.ilg cattr + let data = getCustomAttrData cattr (methInfo, data) let emitCustomAttr cenv emEnv add cattr = add (convCustomAttr cenv emEnv cattr) @@ -1398,16 +1394,16 @@ let emitCustomAttrs cenv emEnv add (cattrs: ILAttributes) = Array.iter (emitCust // buildGenParams //---------------------------------------------------------------------------- -let buildGenParamsPass1 _emEnv defineGenericParameters (gps: ILGenericParameterDefs) = - match gps with - | [] -> () +let buildGenParamsPass1 _emEnv defineGenericParameters (gps: ILGenericParameterDefs) = + match gps with + | [] -> () | gps -> - let gpsNames = gps |> List.map (fun gp -> gp.Name) + let gpsNames = gps |> List.map (fun gp -> gp.Name) defineGenericParameters (Array.ofList gpsNames) |> ignore -let buildGenParamsPass1b cenv emEnv (genArgs: Type array) (gps: ILGenericParameterDefs) = - let genpBs = genArgs |> Array.map (fun x -> (x :?> GenericTypeParameterBuilder)) +let buildGenParamsPass1b cenv emEnv (genArgs: Type array) (gps: ILGenericParameterDefs) = + let genpBs = genArgs |> Array.map (fun x -> (x :?> GenericTypeParameterBuilder)) gps |> List.iteri (fun i (gp: ILGenericParameterDef) -> let gpB = genpBs.[i] // the Constraints are either the parent (base) type or interfaces. @@ -1423,17 +1419,17 @@ let buildGenParamsPass1b cenv emEnv (genArgs: Type array) (gps: ILGenericParamet gpB.SetInterfaceConstraints(Array.ofList interfaceTs) gp.CustomAttrs |> emitCustomAttrs cenv emEnv (wrapCustomAttr gpB.SetCustomAttribute) - let flags = GenericParameterAttributes.None + let flags = GenericParameterAttributes.None let flags = match gp.Variance with | NonVariant -> flags | CoVariant -> flags ||| GenericParameterAttributes.Covariant | ContraVariant -> flags ||| GenericParameterAttributes.Contravariant - - let flags = if gp.HasReferenceTypeConstraint then flags ||| GenericParameterAttributes.ReferenceTypeConstraint else flags + + let flags = if gp.HasReferenceTypeConstraint then flags ||| GenericParameterAttributes.ReferenceTypeConstraint else flags let flags = if gp.HasNotNullableValueTypeConstraint then flags ||| GenericParameterAttributes.NotNullableValueTypeConstraint else flags let flags = if gp.HasDefaultConstructorConstraint then flags ||| GenericParameterAttributes.DefaultConstructorConstraint else flags - + gpB.SetGenericParameterAttributes flags ) //---------------------------------------------------------------------------- @@ -1444,14 +1440,14 @@ let emitParameter cenv emEnv (defineParameter: int * ParameterAttributes * strin // -Type: ty // -Default: ILFieldInit option // -Marshal: NativeType option; (* Marshalling map for parameters. COM Interop only. *) - let attrs = flagsIf param.IsIn ParameterAttributes.In ||| + let attrs = flagsIf param.IsIn ParameterAttributes.In ||| flagsIf param.IsOut ParameterAttributes.Out ||| flagsIf param.IsOptional ParameterAttributes.Optional - let name = + let name = match param.Name with | Some name -> name | None -> "X" + string(i+1) - + let parB = defineParameter(i, attrs, name) emitCustomAttrs cenv emEnv (wrapCustomAttr parB.SetCustomAttribute) param.CustomAttrs @@ -1490,30 +1486,31 @@ let rec buildMethodPass2 cenv tref (typB: TypeBuilder) emEnv (mdef: ILMethodDef) let implflags = mdef.ImplAttributes let cconv = convCallConv mdef.CallingConv let mref = mkRefToILMethod (tref, mdef) - let emEnv = + let emEnv = if mdef.IsEntryPoint && isNil mdef.ParameterTypes then envAddEntryPt emEnv (typB, mdef.Name) else emEnv - match mdef.Body.Contents with - | MethodBody.PInvoke p when enablePInvoke -> + match mdef.Body with + | MethodBody.PInvoke pLazy when enablePInvoke -> + let p = pLazy.Value let argtys = convTypesToArray cenv emEnv mdef.ParameterTypes let rty = convType cenv emEnv mdef.Return.Type let pcc = - match p.CallingConv with + match p.CallingConv with | PInvokeCallingConvention.Cdecl -> CallingConvention.Cdecl | PInvokeCallingConvention.Stdcall -> CallingConvention.StdCall | PInvokeCallingConvention.Thiscall -> CallingConvention.ThisCall | PInvokeCallingConvention.Fastcall -> CallingConvention.FastCall - | PInvokeCallingConvention.None - | PInvokeCallingConvention.WinApi -> CallingConvention.Winapi - let pcs = - match p.CharEncoding with + | PInvokeCallingConvention.None + | PInvokeCallingConvention.WinApi -> CallingConvention.Winapi + let pcs = + match p.CharEncoding with | PInvokeCharEncoding.None -> CharSet.None | PInvokeCharEncoding.Ansi -> CharSet.Ansi | PInvokeCharEncoding.Unicode -> CharSet.Unicode - | PInvokeCharEncoding.Auto -> CharSet.Auto + | PInvokeCharEncoding.Auto -> CharSet.Auto (* p.ThrowOnUnmappableChar *) (* p.CharBestFit *) (* p.NoMangle *) @@ -1531,29 +1528,29 @@ let rec buildMethodPass2 cenv tref (typB: TypeBuilder) emEnv (mdef: ILMethodDef) methB.SetImplementationFlagsAndLog implflags envBindMethodRef emEnv mref methB - | _ -> + | _ -> match mdef.Name with - | ".cctor" + | ".cctor" | ".ctor" -> let consB = typB.DefineConstructorAndLog (attrs, cconv, convTypesToArray cenv emEnv mdef.ParameterTypes) consB.SetImplementationFlagsAndLog implflags envBindConsRef emEnv mref consB | _name -> // The return/argument types may involve the generic parameters - let methB = typB.DefineMethodAndLog (mdef.Name, attrs, cconv) - - // Method generic type parameters + let methB = typB.DefineMethodAndLog (mdef.Name, attrs, cconv) + + // Method generic type parameters buildGenParamsPass1 emEnv methB.DefineGenericParametersAndLog mdef.GenericParams - let genArgs = getGenericArgumentsOfMethod methB + let genArgs = getGenericArgumentsOfMethod methB let emEnv = envPushTyvars emEnv (Array.append (getGenericArgumentsOfType (typB.AsType())) genArgs) buildGenParamsPass1b cenv emEnv genArgs mdef.GenericParams // Set parameter and return types (may depend on generic args) let parameterTypes = convTypesToArray cenv emEnv mdef.ParameterTypes - let parameterTypeRequiredCustomModifiers,parameterTypeOptionalCustomModifiers = - mdef.Parameters - |> List.toArray - |> Array.map (convParamModifiers cenv emEnv) + let parameterTypeRequiredCustomModifiers,parameterTypeOptionalCustomModifiers = + mdef.Parameters + |> List.toArray + |> Array.map (convParamModifiers cenv emEnv) |> Array.unzip let returnTypeRequiredCustomModifiers, returnTypeOptionalCustomModifiers = mdef.Return |> convReturnModifiers cenv emEnv @@ -1569,11 +1566,11 @@ let rec buildMethodPass2 cenv tref (typB: TypeBuilder) emEnv (mdef: ILMethodDef) //---------------------------------------------------------------------------- // buildMethodPass3 cenv //---------------------------------------------------------------------------- - + let rec buildMethodPass3 cenv tref modB (typB: TypeBuilder) emEnv (mdef: ILMethodDef) = let mref = mkRefToILMethod (tref, mdef) - let isPInvoke = - match mdef.Body.Contents with + let isPInvoke = + match mdef.Body with | MethodBody.PInvoke _p -> true | _ -> false match mdef.Name with @@ -1581,7 +1578,7 @@ let rec buildMethodPass3 cenv tref modB (typB: TypeBuilder) emEnv (mdef: ILMetho let consB = envGetConsB emEnv mref // Constructors can not have generic parameters assert isNil mdef.GenericParams - // Value parameters + // Value parameters let defineParameter (i, attr, name) = consB.DefineParameterAndLog (i+1, attr, name) mdef.Parameters |> List.iteri (emitParameter cenv emEnv defineParameter) // Body @@ -1589,52 +1586,52 @@ let rec buildMethodPass3 cenv tref modB (typB: TypeBuilder) emEnv (mdef: ILMetho emitCustomAttrs cenv emEnv (wrapCustomAttr consB.SetCustomAttribute) mdef.CustomAttrs () | _name -> - + let methB = envGetMethB emEnv mref let emEnv = envPushTyvars emEnv (Array.append (getGenericArgumentsOfType (typB.AsType())) (getGenericArgumentsOfMethod methB)) if not (Array.isEmpty mdef.Return.CustomAttrs.AsArray) then - let retB = methB.DefineParameterAndLog (0, System.Reflection.ParameterAttributes.Retval, null) + let retB = methB.DefineParameterAndLog (0, System.Reflection.ParameterAttributes.Retval, null) emitCustomAttrs cenv emEnv (wrapCustomAttr retB.SetCustomAttribute) mdef.Return.CustomAttrs // Value parameters - let defineParameter (i, attr, name) = methB.DefineParameterAndLog (i+1, attr, name) + let defineParameter (i, attr, name) = methB.DefineParameterAndLog (i+1, attr, name) mdef.Parameters |> List.iteri (fun a b -> emitParameter cenv emEnv defineParameter a b) // Body - if not isPInvoke then + if not isPInvoke then emitMethodBody cenv modB emEnv methB.GetILGeneratorAndLog mdef.Name mdef.Body let emEnv = envPopTyvars emEnv // case fold later... emitCustomAttrs cenv emEnv methB.SetCustomAttributeAndLog mdef.CustomAttrs - + //---------------------------------------------------------------------------- // buildFieldPass2 //---------------------------------------------------------------------------- - + let buildFieldPass2 cenv tref (typB: TypeBuilder) emEnv (fdef: ILFieldDef) = - + let attrs = fdef.Attributes let fieldT = convType cenv emEnv fdef.FieldType - let fieldB = - match fdef.Data with + let fieldB = + match fdef.Data with | Some d -> typB.DefineInitializedData(fdef.Name, d, attrs) - | None -> + | None -> typB.DefineFieldAndLog (fdef.Name, fieldT, attrs) - + // set default value - let emEnv = + let emEnv = match fdef.LiteralValue with | None -> emEnv - | Some initial -> - if not fieldT.IsEnum + | Some initial -> + if not fieldT.IsEnum // it is ok to init fields with type = enum that are defined in other assemblies - || not fieldT.Assembly.IsDynamic - then + || not fieldT.Assembly.IsDynamic + then fieldB.SetConstant(initial.AsObject()) emEnv else - // if field type (enum) is defined in FSI dynamic assembly it is created as nested type + // if field type (enum) is defined in FSI dynamic assembly it is created as nested type // => its underlying type cannot be explicitly specified and will be inferred at the very moment of first field definition // => here we cannot detect if underlying type is already set so as a conservative solution we delay initialization of fields // to the end of pass2 (types and members are already created but method bodies are yet not emitted) @@ -1642,47 +1639,47 @@ let buildFieldPass2 cenv tref (typB: TypeBuilder) emEnv (fdef: ILFieldDef) = fdef.Offset |> Option.iter (fun offset -> fieldB.SetOffset offset) // custom attributes: done on pass 3 as they may reference attribute constructors generated on // pass 2. - let fref = mkILFieldRef (tref, fdef.Name, fdef.FieldType) + let fref = mkILFieldRef (tref, fdef.Name, fdef.FieldType) envBindFieldRef emEnv fref fieldB let buildFieldPass3 cenv tref (_typB: TypeBuilder) emEnv (fdef: ILFieldDef) = - let fref = mkILFieldRef (tref, fdef.Name, fdef.FieldType) + let fref = mkILFieldRef (tref, fdef.Name, fdef.FieldType) let fieldB = envGetFieldB emEnv fref emitCustomAttrs cenv emEnv (wrapCustomAttr fieldB.SetCustomAttribute) fdef.CustomAttrs //---------------------------------------------------------------------------- // buildPropertyPass2, 3 //---------------------------------------------------------------------------- - + let buildPropertyPass2 cenv tref (typB: TypeBuilder) emEnv (prop: ILPropertyDef) = let attrs = flagsIf prop.IsRTSpecialName PropertyAttributes.RTSpecialName ||| flagsIf prop.IsSpecialName PropertyAttributes.SpecialName let propB = typB.DefinePropertyAndLog (prop.Name, attrs, convType cenv emEnv prop.PropertyType, convTypesToArray cenv emEnv prop.Args) - + prop.SetMethod |> Option.iter (fun mref -> propB.SetSetMethod(envGetMethB emEnv mref)) prop.GetMethod |> Option.iter (fun mref -> propB.SetGetMethod(envGetMethB emEnv mref)) // set default value prop.Init |> Option.iter (fun initial -> propB.SetConstant(initial.AsObject())) // custom attributes - let pref = ILPropertyRef.Create (tref, prop.Name) + let pref = ILPropertyRef.Create (tref, prop.Name) envBindPropRef emEnv pref propB -let buildPropertyPass3 cenv tref (_typB: TypeBuilder) emEnv (prop: ILPropertyDef) = - let pref = ILPropertyRef.Create (tref, prop.Name) +let buildPropertyPass3 cenv tref (_typB: TypeBuilder) emEnv (prop: ILPropertyDef) = + let pref = ILPropertyRef.Create (tref, prop.Name) let propB = envGetPropB emEnv pref emitCustomAttrs cenv emEnv (wrapCustomAttr propB.SetCustomAttribute) prop.CustomAttrs //---------------------------------------------------------------------------- // buildEventPass3 //---------------------------------------------------------------------------- - -let buildEventPass3 cenv (typB: TypeBuilder) emEnv (eventDef: ILEventDef) = + +let buildEventPass3 cenv (typB: TypeBuilder) emEnv (eventDef: ILEventDef) = let attrs = flagsIf eventDef.IsSpecialName EventAttributes.SpecialName ||| - flagsIf eventDef.IsRTSpecialName EventAttributes.RTSpecialName + flagsIf eventDef.IsRTSpecialName EventAttributes.RTSpecialName assert eventDef.EventType.IsSome - let eventB = typB.DefineEventAndLog (eventDef.Name, attrs, convType cenv emEnv eventDef.EventType.Value) + let eventB = typB.DefineEventAndLog (eventDef.Name, attrs, convType cenv emEnv eventDef.EventType.Value) eventDef.AddMethod |> (fun mref -> eventB.SetAddOnMethod(envGetMethB emEnv mref)) eventDef.RemoveMethod |> (fun mref -> eventB.SetRemoveOnMethod(envGetMethB emEnv mref)) @@ -1693,11 +1690,11 @@ let buildEventPass3 cenv (typB: TypeBuilder) emEnv (eventDef: ILEventDef) = //---------------------------------------------------------------------------- // buildMethodImplsPass3 //---------------------------------------------------------------------------- - + let buildMethodImplsPass3 cenv _tref (typB: TypeBuilder) emEnv (mimpl: IL.ILMethodImplDef) = let bodyMethInfo = convMethodRef cenv emEnv (typB.AsType()) mimpl.OverrideBy.MethodRef // doc: must be MethodBuilder let (OverridesSpec (mref, dtyp)) = mimpl.Overrides - let declMethTI = convType cenv emEnv dtyp + let declMethTI = convType cenv emEnv dtyp let declMethInfo = convMethodRef cenv emEnv declMethTI mref typB.DefineMethodOverride(bodyMethInfo, declMethInfo) emEnv @@ -1706,8 +1703,8 @@ let buildMethodImplsPass3 cenv _tref (typB: TypeBuilder) emEnv (mimpl: IL.ILMeth // typeAttributesOf* //---------------------------------------------------------------------------- -let typeAttributesOfTypeDefKind x = - match x with +let typeAttributesOfTypeDefKind x = + match x with // required for a TypeBuilder | ILTypeDefKind.Class -> TypeAttributes.Class | ILTypeDefKind.ValueType -> TypeAttributes.Class @@ -1716,10 +1713,10 @@ let typeAttributesOfTypeDefKind x = | ILTypeDefKind.Delegate -> TypeAttributes.Class let typeAttributesOfTypeAccess x = - match x with + match x with | ILTypeDefAccess.Public -> TypeAttributes.Public | ILTypeDefAccess.Private -> TypeAttributes.NotPublic - | ILTypeDefAccess.Nested macc -> + | ILTypeDefAccess.Nested macc -> match macc with | ILMemberAccess.Assembly -> TypeAttributes.NestedAssembly | ILMemberAccess.CompilerControlled -> failwith "Nested compiler controlled." @@ -1728,29 +1725,29 @@ let typeAttributesOfTypeAccess x = | ILMemberAccess.Family -> TypeAttributes.NestedFamily | ILMemberAccess.Private -> TypeAttributes.NestedPrivate | ILMemberAccess.Public -> TypeAttributes.NestedPublic - -let typeAttributesOfTypeEncoding x = - match x with - | ILDefaultPInvokeEncoding.Ansi -> TypeAttributes.AnsiClass + +let typeAttributesOfTypeEncoding x = + match x with + | ILDefaultPInvokeEncoding.Ansi -> TypeAttributes.AnsiClass | ILDefaultPInvokeEncoding.Auto -> TypeAttributes.AutoClass | ILDefaultPInvokeEncoding.Unicode -> TypeAttributes.UnicodeClass -let typeAttributesOfTypeLayout cenv emEnv x = - let attr x p = +let typeAttributesOfTypeLayout cenv emEnv x = + let attr x p = if p.Size =None && p.Pack = None then None - else + else match cenv.tryFindSysILTypeRef "System.Runtime.InteropServices.StructLayoutAttribute", cenv.tryFindSysILTypeRef "System.Runtime.InteropServices.LayoutKind" with | Some tref1, Some tref2 -> Some(convCustomAttr cenv emEnv - (IL.mkILCustomAttribute cenv.ilg - (tref1, - [mkILNonGenericValueTy tref2 ], - [ ILAttribElem.Int32 x ], + (IL.mkILCustomAttribute + (tref1, + [mkILNonGenericValueTy tref2 ], + [ ILAttribElem.Int32 x ], (p.Pack |> Option.toList |> List.map (fun x -> ("Pack", cenv.ilg.typ_Int32, false, ILAttribElem.Int32 (int32 x)))) @ - (p.Size |> Option.toList |> List.map (fun x -> ("Size", cenv.ilg.typ_Int32, false, ILAttribElem.Int32 x)))))) + (p.Size |> Option.toList |> List.map (fun x -> ("Size", cenv.ilg.typ_Int32, false, ILAttribElem.Int32 x)))))) | _ -> None - match x with + match x with | ILTypeDefLayout.Auto -> None | ILTypeDefLayout.Explicit p -> (attr 0x02 p) | ILTypeDefLayout.Sequential p -> (attr 0x00 p) @@ -1759,14 +1756,14 @@ let typeAttributesOfTypeLayout cenv emEnv x = //---------------------------------------------------------------------------- // buildTypeDefPass1 cenv //---------------------------------------------------------------------------- - + let rec buildTypeDefPass1 cenv emEnv (modB: ModuleBuilder) rootTypeBuilder nesting (tdef: ILTypeDef) = - // -IsComInterop: bool; (* Class or interface generated for COM interop *) + // -IsComInterop: bool; (* Class or interface generated for COM interop *) // -SecurityDecls: Permissions // -InitSemantics: ILTypeInit // TypeAttributes let cattrsLayout = typeAttributesOfTypeLayout cenv emEnv tdef.Layout - + let attrsType = tdef.Attributes // TypeBuilder from TypeAttributes. @@ -1775,16 +1772,16 @@ let rec buildTypeDefPass1 cenv emEnv (modB: ModuleBuilder) rootTypeBuilder nesti buildGenParamsPass1 emEnv typB.DefineGenericParametersAndLog tdef.GenericParams // bind tref -> (typT, typB) - let tref = mkRefForNestedILTypeDef ILScopeRef.Local (nesting, tdef) + let tref = mkRefForNestedILTypeDef ILScopeRef.Local (nesting, tdef) let typT = // Q: would it be ok to use typB :> Type ? // Maybe not, recall TypeBuilder maybe subtype of Type, but it is not THE Type. let nameInModule = tref.QualifiedName modB.GetTypeAndLog (nameInModule, false, false) - + let emEnv = envBindTypeRef emEnv tref (typT, typB, tdef) // recurse on nested types - let nesting = nesting @ [tdef] + let nesting = nesting @ [tdef] let buildNestedType emEnv tdef = buildTypeTypeDef cenv emEnv modB typB nesting tdef let emEnv = List.fold buildNestedType emEnv tdef.NestedTypes.AsList emEnv @@ -1795,35 +1792,35 @@ and buildTypeTypeDef cenv emEnv modB (typB: TypeBuilder) nesting tdef = //---------------------------------------------------------------------------- // buildTypeDefPass1b //---------------------------------------------------------------------------- - -let rec buildTypeDefPass1b cenv nesting emEnv (tdef: ILTypeDef) = + +let rec buildTypeDefPass1b cenv nesting emEnv (tdef: ILTypeDef) = let tref = mkRefForNestedILTypeDef ILScopeRef.Local (nesting, tdef) let typB = envGetTypB emEnv tref let genArgs = getGenericArgumentsOfType (typB.AsType()) let emEnv = envPushTyvars emEnv genArgs - // Parent may reference types being defined, so has to come after it's Pass1 creation + // Parent may reference types being defined, so has to come after it's Pass1 creation tdef.Extends |> Option.iter (fun ty -> typB.SetParentAndLog (convType cenv emEnv ty)) - // build constraints on ILGenericParameterDefs. Constraints may reference types being defined, + // build constraints on ILGenericParameterDefs. Constraints may reference types being defined, // so have to come after all types are created buildGenParamsPass1b cenv emEnv genArgs tdef.GenericParams - let emEnv = envPopTyvars emEnv - let nesting = nesting @ [tdef] + let emEnv = envPopTyvars emEnv + let nesting = nesting @ [tdef] List.iter (buildTypeDefPass1b cenv nesting emEnv) tdef.NestedTypes.AsList //---------------------------------------------------------------------------- // buildTypeDefPass2 //---------------------------------------------------------------------------- -let rec buildTypeDefPass2 cenv nesting emEnv (tdef: ILTypeDef) = +let rec buildTypeDefPass2 cenv nesting emEnv (tdef: ILTypeDef) = let tref = mkRefForNestedILTypeDef ILScopeRef.Local (nesting, tdef) let typB = envGetTypB emEnv tref let emEnv = envPushTyvars emEnv (getGenericArgumentsOfType (typB.AsType())) // add interface impls tdef.Implements |> convTypes cenv emEnv |> List.iter (fun implT -> typB.AddInterfaceImplementationAndLog implT) // add methods, properties - let emEnv = Array.fold (buildMethodPass2 cenv tref typB) emEnv tdef.Methods.AsArray - let emEnv = List.fold (buildFieldPass2 cenv tref typB) emEnv tdef.Fields.AsList - let emEnv = List.fold (buildPropertyPass2 cenv tref typB) emEnv tdef.Properties.AsList + let emEnv = Array.fold (buildMethodPass2 cenv tref typB) emEnv tdef.Methods.AsArray + let emEnv = List.fold (buildFieldPass2 cenv tref typB) emEnv tdef.Fields.AsList + let emEnv = List.fold (buildPropertyPass2 cenv tref typB) emEnv tdef.Properties.AsList let emEnv = envPopTyvars emEnv // nested types let nesting = nesting @ [tdef] @@ -1833,7 +1830,7 @@ let rec buildTypeDefPass2 cenv nesting emEnv (tdef: ILTypeDef) = //---------------------------------------------------------------------------- // buildTypeDefPass3 cenv //---------------------------------------------------------------------------- - + let rec buildTypeDefPass3 cenv nesting modB emEnv (tdef: ILTypeDef) = let tref = mkRefForNestedILTypeDef ILScopeRef.Local (nesting, tdef) let typB = envGetTypB emEnv tref @@ -1844,7 +1841,7 @@ let rec buildTypeDefPass3 cenv nesting modB emEnv (tdef: ILTypeDef) = tdef.Events.AsList |> List.iter (buildEventPass3 cenv typB emEnv) tdef.Fields.AsList |> List.iter (buildFieldPass3 cenv tref typB emEnv) let emEnv = List.fold (buildMethodImplsPass3 cenv tref typB) emEnv tdef.MethodImpls.AsList - tdef.CustomAttrs |> emitCustomAttrs cenv emEnv typB.SetCustomAttributeAndLog + tdef.CustomAttrs |> emitCustomAttrs cenv emEnv typB.SetCustomAttributeAndLog // custom attributes let emEnv = envPopTyvars emEnv // nested types @@ -1856,7 +1853,7 @@ let rec buildTypeDefPass3 cenv nesting modB emEnv (tdef: ILTypeDef) = // buildTypeDefPass4 - Create the Types // // The code in this phase is fragile. -// +// // THe background is that System.Reflection.Emit implementations can be finnickity about the // order that CreateType calls are made when types refer to each other. Some of these restrictions // are not well documented, or are related to historical bugs where the F# emit code worked around the @@ -1865,34 +1862,34 @@ let rec buildTypeDefPass3 cenv nesting modB emEnv (tdef: ILTypeDef) = // // Here are some known cases: // -// MSDN says: If this type is a nested type, the CreateType method must +// MSDN says: If this type is a nested type, the CreateType method must // be called on the enclosing type before it is called on the nested type. // -// MSDN says: If the current type derives from an incomplete type or implements -// incomplete interfaces, call the CreateType method on the parent +// MSDN says: If the current type derives from an incomplete type or implements +// incomplete interfaces, call the CreateType method on the parent // type and the interface types before calling it on the current type. // -// MSDN says: If the enclosing type contains a field that is a value type -// defined as a nested type (for example, a field that is an -// enumeration defined as a nested type), calling the CreateType method -// on the enclosing type will generate a AppDomain.TypeResolve event. -// This is because the loader cannot determine the size of the enclosing -// type until the nested type has been completed. The caller should define -// a handler for the TypeResolve event to complete the definition of the -// nested type by calling CreateType on the TypeBuilder object that represents -// the nested type. The code example for this topic shows how to define such +// MSDN says: If the enclosing type contains a field that is a value type +// defined as a nested type (for example, a field that is an +// enumeration defined as a nested type), calling the CreateType method +// on the enclosing type will generate a AppDomain.TypeResolve event. +// This is because the loader cannot determine the size of the enclosing +// type until the nested type has been completed. The caller should define +// a handler for the TypeResolve event to complete the definition of the +// nested type by calling CreateType on the TypeBuilder object that represents +// the nested type. The code example for this topic shows how to define such // an event handler. // -// +// // There is also a case where generic parameter constraints were being checked before -// a generic method was called. This forced the loading of the types involved in the +// a generic method was called. This forced the loading of the types involved in the // constraints very early. // //---------------------------------------------------------------------------- -let getEnclosingTypeRefs (tref: ILTypeRef) = - match tref.Enclosing with +let getEnclosingTypeRefs (tref: ILTypeRef) = + match tref.Enclosing with | [] -> [] | h :: t -> List.scan (fun tr nm -> mkILTyRefInTyRef (tr, nm)) (mkILTyRef(tref.Scope, h)) t @@ -1900,38 +1897,38 @@ let getEnclosingTypeRefs (tref: ILTypeRef) = type CollectTypes = ValueTypesOnly | All // Find all constituent type references -let rec getTypeRefsInType (allTypes: CollectTypes) ty acc = +let rec getTypeRefsInType (allTypes: CollectTypes) ty acc = match ty with - | ILType.Void + | ILType.Void | ILType.TypeVar _ -> acc - | ILType.Ptr eltType | ILType.Byref eltType -> + | ILType.Ptr eltType | ILType.Byref eltType -> getTypeRefsInType allTypes eltType acc - | ILType.Array (_, eltType) -> - match allTypes with - | CollectTypes.ValueTypesOnly -> acc + | ILType.Array (_, eltType) -> + match allTypes with + | CollectTypes.ValueTypesOnly -> acc | CollectTypes.All -> getTypeRefsInType allTypes eltType acc - | ILType.Value tspec -> + | ILType.Value tspec -> // We use CollectTypes.All because the .NET type loader appears to always eagerly require all types // referred to in an instantiation of a generic value type tspec.TypeRef :: List.foldBack (getTypeRefsInType CollectTypes.All) tspec.GenericArgs acc - | ILType.Boxed tspec -> - match allTypes with - | CollectTypes.ValueTypesOnly -> acc + | ILType.Boxed tspec -> + match allTypes with + | CollectTypes.ValueTypesOnly -> acc | CollectTypes.All -> tspec.TypeRef :: List.foldBack (getTypeRefsInType allTypes) tspec.GenericArgs acc | ILType.FunctionPointer _callsig -> failwith "getTypeRefsInType: fptr" | ILType.Modified _ -> failwith "getTypeRefsInType: modified" let verbose2 = false -let createTypeRef (visited: Dictionary<_, _>, created: Dictionary<_, _>) emEnv tref = +let createTypeRef (visited: Dictionary<_, _>, created: Dictionary<_, _>) emEnv tref = let rec traverseTypeDef (tref: ILTypeRef) (tdef: ILTypeDef) = if verbose2 then dprintf "buildTypeDefPass4: Creating Enclosing Types of %s\n" tdef.Name for enc in getEnclosingTypeRefs tref do traverseTypeRef enc - - // WORKAROUND (ProductStudio FSharp 1.0 bug 615): the constraints on generic method parameters - // are resolved overly eagerly by reflection emit's CreateType. + + // WORKAROUND (ProductStudio FSharp 1.0 bug 615): the constraints on generic method parameters + // are resolved overly eagerly by reflection emit's CreateType. if verbose2 then dprintf "buildTypeDefPass4: Doing type typar constraints of %s\n" tdef.Name for gp in tdef.GenericParams do for cx in gp.Constraints do @@ -1939,34 +1936,34 @@ let createTypeRef (visited: Dictionary<_, _>, created: Dictionary<_, _>) emEnv t if verbose2 then dprintf "buildTypeDefPass4: Doing method constraints of %s\n" tdef.Name for md in tdef.Methods.AsArray do - for gp in md.GenericParams do - for cx in gp.Constraints do + for gp in md.GenericParams do + for cx in gp.Constraints do traverseType CollectTypes.All cx - + // We absolutely need the exact parent type... if verbose2 then dprintf "buildTypeDefPass4: Creating Super Class Chain of %s\n" tdef.Name tdef.Extends |> Option.iter (traverseType CollectTypes.All) - + // We absolutely need the exact interface types... if verbose2 then dprintf "buildTypeDefPass4: Creating Interface Chain of %s\n" tdef.Name tdef.Implements |> List.iter (traverseType CollectTypes.All) - + if verbose2 then dprintf "buildTypeDefPass4: Do value types in fields of %s\n" tdef.Name tdef.Fields.AsList |> List.iter (fun fd -> traverseType CollectTypes.ValueTypesOnly fd.FieldType) - - if verbose2 then dprintf "buildTypeDefPass4: Done with dependencies of %s\n" tdef.Name - - and traverseType allTypes ty = + + if verbose2 then dprintf "buildTypeDefPass4: Done with dependencies of %s\n" tdef.Name + + and traverseType allTypes ty = getTypeRefsInType allTypes ty [] |> List.filter (isEmittedTypeRef emEnv) - |> List.iter traverseTypeRef + |> List.iter traverseTypeRef - and traverseTypeRef tref = + and traverseTypeRef tref = let typB = envGetTypB emEnv tref if verbose2 then dprintf "- considering reference to type %s\n" typB.FullName // Re-run traverseTypeDef if we've never visited the type. - if not (visited.ContainsKey tref) then + if not (visited.ContainsKey tref) then visited.[tref] <- true let tdef = envGetTypeDef emEnv tref if verbose2 then dprintf "- traversing type %s\n" typB.FullName @@ -1974,13 +1971,13 @@ let createTypeRef (visited: Dictionary<_, _>, created: Dictionary<_, _>) emEnv t // we require the type r.Name, though with "nestingToProbe" being the enclosing types of the // type being defined. let typeCreationHandler = - let nestingToProbe = tref.Enclosing + let nestingToProbe = tref.Enclosing ResolveEventHandler( fun o r -> let typeName = r.Name let typeRef = ILTypeRef.Create(ILScopeRef.Local, nestingToProbe, typeName) match emEnv.emTypMap.TryFind typeRef with - | Some(_, tb, _, _) -> + | Some(_, tb, _, _) -> if not (tb.IsCreated()) then tb.CreateTypeAndLog () |> ignore tb.Assembly @@ -1996,19 +1993,19 @@ let createTypeRef (visited: Dictionary<_, _>, created: Dictionary<_, _>) emEnv t // At this point, we've done everything we can to prepare the type for loading by eagerly forcing the // load of other types. Everything else is up to the implementation of System.Reflection.Emit. - if not (created.ContainsKey tref) then + if not (created.ContainsKey tref) then created.[tref] <- true if verbose2 then dprintf "- creating type %s\n" typB.FullName typB.CreateTypeAndLog () |> ignore - - traverseTypeRef tref + + traverseTypeRef tref let rec buildTypeDefPass4 (visited, created) nesting emEnv (tdef: ILTypeDef) = if verbose2 then dprintf "buildTypeDefPass4 %s\n" tdef.Name let tref = mkRefForNestedILTypeDef ILScopeRef.Local (nesting, tdef) createTypeRef (visited, created) emEnv tref - - + + // nested types let nesting = nesting @ [tdef] tdef.NestedTypes |> Seq.iter (buildTypeDefPass4 (visited, created) nesting emEnv) @@ -2016,7 +2013,7 @@ let rec buildTypeDefPass4 (visited, created) nesting emEnv (tdef: ILTypeDef) = //---------------------------------------------------------------------------- // buildModuleType //---------------------------------------------------------------------------- - + let buildModuleTypePass1 cenv (modB: ModuleBuilder) emEnv (tdef: ILTypeDef) = buildTypeDefPass1 cenv emEnv modB modB.DefineTypeAndLog [] tdef @@ -2028,37 +2025,37 @@ let buildModuleTypePass4 visited emEnv tdef = buildTypeDefPass4 visited [] emEnv //---------------------------------------------------------------------------- // buildModuleFragment - only the types the fragment get written //---------------------------------------------------------------------------- - + let buildModuleFragment cenv emEnv (asmB: AssemblyBuilder) (modB: ModuleBuilder) (m: ILModuleDef) = let tdefs = m.TypeDefs.AsList - let emEnv = (emEnv, tdefs) ||> List.fold (buildModuleTypePass1 cenv modB) - tdefs |> List.iter (buildModuleTypePass1b cenv emEnv) - let emEnv = (emEnv, tdefs) ||> List.fold (buildModuleTypePass2 cenv) - + let emEnv = (emEnv, tdefs) ||> List.fold (buildModuleTypePass1 cenv modB) + tdefs |> List.iter (buildModuleTypePass1b cenv emEnv) + let emEnv = (emEnv, tdefs) ||> List.fold (buildModuleTypePass2 cenv) + for delayedFieldInit in emEnv.delayedFieldInits do delayedFieldInit() let emEnv = { emEnv with delayedFieldInits = [] } - let emEnv = (emEnv, tdefs) ||> List.fold (buildModuleTypePass3 cenv modB) - let visited = new Dictionary<_, _>(10) - let created = new Dictionary<_, _>(10) - tdefs |> List.iter (buildModuleTypePass4 (visited, created) emEnv) + let emEnv = (emEnv, tdefs) ||> List.fold (buildModuleTypePass3 cenv modB) + let visited = new Dictionary<_, _>(10) + let created = new Dictionary<_, _>(10) + tdefs |> List.iter (buildModuleTypePass4 (visited, created) emEnv) let emEnv = Seq.fold envUpdateCreatedTypeRef emEnv created.Keys // update typT with the created typT emitCustomAttrs cenv emEnv modB.SetCustomAttributeAndLog m.CustomAttrs #if FX_RESHAPED_REFEMIT ignore asmB #else - m.Resources.AsList |> List.iter (fun r -> - let attribs = (match r.Access with ILResourceAccess.Public -> ResourceAttributes.Public | ILResourceAccess.Private -> ResourceAttributes.Private) - match r.Location with - | ILResourceLocation.Local bytes -> + m.Resources.AsList |> List.iter (fun r -> + let attribs = (match r.Access with ILResourceAccess.Public -> ResourceAttributes.Public | ILResourceAccess.Private -> ResourceAttributes.Private) + match r.Location with + | ILResourceLocation.Local bytes -> use stream = bytes.GetByteMemory().AsStream() modB.DefineManifestResourceAndLog (r.Name, stream, attribs) - | ILResourceLocation.File (mr, _) -> + | ILResourceLocation.File (mr, _) -> asmB.AddResourceFileAndLog (r.Name, mr.Name, attribs) - | ILResourceLocation.Assembly _ -> + | ILResourceLocation.Assembly _ -> failwith "references to resources other assemblies may not be emitted using System.Reflection") #endif emEnv @@ -2073,7 +2070,7 @@ let defineDynamicAssemblyAndLog (asmName, flags, asmDir: string) = let currentDom = System.AppDomain.CurrentDomain let asmB = currentDom.DefineDynamicAssembly(asmName, flags, asmDir) #endif - if logRefEmitCalls then + if logRefEmitCalls then printfn "open System" printfn "open System.Reflection" printfn "open System.Reflection.Emit" @@ -2085,15 +2082,15 @@ let mkDynamicAssemblyAndModule (assemblyName, optimize, debugInfo: bool, collect let asmDir = "." let asmName = new AssemblyName() asmName.Name <- assemblyName - let asmAccess = - if collectible then AssemblyBuilderAccess.RunAndCollect + let asmAccess = + if collectible then AssemblyBuilderAccess.RunAndCollect #if FX_RESHAPED_REFEMIT else AssemblyBuilderAccess.Run #else else AssemblyBuilderAccess.RunAndSave #endif - let asmB = defineDynamicAssemblyAndLog (asmName, asmAccess, asmDir) - if not optimize then + let asmB = defineDynamicAssemblyAndLog (asmName, asmAccess, asmDir) + if not optimize then let daType = typeof let daCtor = daType.GetConstructor [| typeof |] let daBuilder = new CustomAttributeBuilder(daCtor, [| System.Diagnostics.DebuggableAttribute.DebuggingModes.DisableOptimizations ||| System.Diagnostics.DebuggableAttribute.DebuggingModes.Default |]) @@ -2106,20 +2103,20 @@ let emitModuleFragment (ilg, emitTailcalls, emEnv, asmB: AssemblyBuilder, modB: let cenv = { ilg = ilg ; emitTailcalls=emitTailcalls; generatePdb = debugInfo; resolveAssemblyRef=resolveAssemblyRef; tryFindSysILTypeRef=tryFindSysILTypeRef } let emEnv = buildModuleFragment cenv emEnv asmB modB modul - match modul.Manifest with + match modul.Manifest with | None -> () - | Some mani -> + | Some mani -> // REVIEW: remainder of manifest emitCustomAttrs cenv emEnv asmB.SetCustomAttributeAndLog mani.CustomAttrs // invoke entry point methods let execEntryPtFun ((typB: TypeBuilder), methodName) () = - try + try ignore (typB.InvokeMemberAndLog (methodName, BindingFlags.InvokeMethod ||| BindingFlags.Public ||| BindingFlags.Static, [| |])) None - with + with | :? System.Reflection.TargetInvocationException as e -> Some e.InnerException - + let emEnv, entryPts = envPopEntryPts emEnv let execs = List.map execEntryPtFun entryPts emEnv, execs @@ -2132,7 +2129,7 @@ let emitModuleFragment (ilg, emitTailcalls, emEnv, asmB: AssemblyBuilder, modB: // TypeBuilder is a subtype of Type. // However, casting TypeBuilder to Type is not the same as getting Type proper. // The builder version does not implement all methods on the parent. -// +// // The emEnv stores (typT: Type) for each tref. // Once the emitted type is created this typT is updated to ensure it is the Type proper. // So Type lookup will return the proper Type not TypeBuilder. diff --git a/src/fsharp/absil/ilreflect.fsi b/src/fsharp/absil/ilreflect.fsi index 403d4479b7b..f2aa21b1f40 100644 --- a/src/fsharp/absil/ilreflect.fsi +++ b/src/fsharp/absil/ilreflect.fsi @@ -1,10 +1,6 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -//---------------------------------------------------------------------------- -// Write Abstract IL structures at runtime using Reflection.Emit -//---------------------------------------------------------------------------- - - +/// Write Abstract IL structures at runtime using Reflection.Emit module internal FSharp.Compiler.AbstractIL.ILRuntimeWriter open System.Reflection diff --git a/src/fsharp/absil/ilsign.fs b/src/fsharp/absil/ilsign.fs index 617a102a155..770663809a0 100644 --- a/src/fsharp/absil/ilsign.fs +++ b/src/fsharp/absil/ilsign.fs @@ -1,21 +1,21 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.AbstractIL.Internal.StrongNameSign +module internal FSharp.Compiler.AbstractIL.StrongNameSign #nowarn "9" -open System -open System.IO -open System.Collections.Immutable -open System.Reflection -open System.Reflection.PortableExecutable -open System.Security.Cryptography -open System.Runtime.InteropServices -open System.Runtime.CompilerServices + open System + open System.IO + open System.Collections.Immutable + open System.Reflection.PortableExecutable + open System.Security.Cryptography + open System.Reflection + open System.Runtime.CompilerServices + open System.Runtime.InteropServices - -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Internal.Utils + open Internal.Utilities + open Internal.Utilities.Library + open FSharp.Compiler.IO type KeyType = | Public @@ -245,7 +245,7 @@ open FSharp.Compiler.AbstractIL.Internal.Utils patchSignature stream peReader signature let signFile filename keyBlob = - use fs = File.Open(filename, FileMode.Open, FileAccess.ReadWrite) + use fs = FileSystem.OpenFileForWriteShim(filename, FileMode.Open, FileAccess.ReadWrite) signStream fs keyBlob let signatureSize (pk:byte[]) = @@ -272,9 +272,9 @@ open FSharp.Compiler.AbstractIL.Internal.Utils type pubkey = byte[] type pubkeyOptions = byte[] * bool - let signerOpenPublicKeyFile filePath = FileSystem.ReadAllBytesShim filePath + let signerOpenPublicKeyFile filePath = FileSystem.OpenFileForReadShim(filePath).ReadAllBytes() - let signerOpenKeyPairFile filePath = FileSystem.ReadAllBytesShim filePath + let signerOpenKeyPairFile filePath = FileSystem.OpenFileForReadShim(filePath).ReadAllBytes() let signerGetPublicKeyForKeyPair (kp: keyPair) : pubkey = getPublicKeyForKeyPair kp @@ -400,9 +400,9 @@ open FSharp.Compiler.AbstractIL.Internal.Utils ([] _metaHost : ICLRMetaHost byref)) : unit = failwith "CreateInterface" - let legacySignerOpenPublicKeyFile filePath = FileSystem.ReadAllBytesShim filePath + let legacySignerOpenPublicKeyFile filePath = FileSystem.OpenFileForReadShim(filePath).ReadAllBytes() - let legacySignerOpenKeyPairFile filePath = FileSystem.ReadAllBytesShim filePath + let legacySignerOpenKeyPairFile filePath = FileSystem.OpenFileForReadShim(filePath).ReadAllBytes() let mutable iclrsn: ICLRStrongName option = None let getICLRStrongName () = @@ -492,10 +492,12 @@ open FSharp.Compiler.AbstractIL.Internal.Utils iclrSN.StrongNameSignatureVerificationEx(fileName, true, &ok) |> ignore #endif + let failWithContainerSigningUnsupportedOnThisPlatform() = failwith (FSComp.SR.containerSigningUnsupportedOnThisPlatform() |> snd) + //--------------------------------------------------------------------- // Strong name signing //--------------------------------------------------------------------- - type ILStrongNameSigner = + type ILStrongNameSigner = | PublicKeySigner of pubkey | PublicKeyOptionsSigner of pubkeyOptions | KeyPair of keyPair @@ -516,10 +518,10 @@ open FSharp.Compiler.AbstractIL.Internal.Utils legacySignerCloseKeyContainer containerName #else ignore containerName - failwith ("Key container signing is not supported on this platform") + failWithContainerSigningUnsupportedOnThisPlatform() #endif member s.IsFullySigned = - match s with + match s with | PublicKeySigner _ -> false | PublicKeyOptionsSigner pko -> let _, usePublicSign = pko usePublicSign @@ -528,11 +530,11 @@ open FSharp.Compiler.AbstractIL.Internal.Utils #if !FX_NO_CORHOST_SIGNER true #else - failwith ("Key container signing is not supported on this platform") + failWithContainerSigningUnsupportedOnThisPlatform() #endif - member s.PublicKey = - match s with + member s.PublicKey = + match s with | PublicKeySigner pk -> pk | PublicKeyOptionsSigner pko -> let pk, _ = pko pk @@ -542,7 +544,7 @@ open FSharp.Compiler.AbstractIL.Internal.Utils legacySignerGetPublicKeyForKeyContainer containerName #else ignore containerName - failwith ("Key container signing is not supported on this platform") + failWithContainerSigningUnsupportedOnThisPlatform() #endif member s.SignatureSize = @@ -552,7 +554,7 @@ open FSharp.Compiler.AbstractIL.Internal.Utils with e -> failwith ("A call to StrongNameSignatureSize failed ("+e.Message+")") 0x80 - match s with + match s with | PublicKeySigner pk -> pkSignatureSize pk | PublicKeyOptionsSigner pko -> let pk, _ = pko pkSignatureSize pk @@ -562,11 +564,11 @@ open FSharp.Compiler.AbstractIL.Internal.Utils pkSignatureSize (legacySignerGetPublicKeyForKeyContainer containerName) #else ignore containerName - failwith ("Key container signing is not supported on this platform") + failWithContainerSigningUnsupportedOnThisPlatform() #endif - member s.SignFile file = - match s with + member s.SignFile file = + match s with | PublicKeySigner _ -> () | PublicKeyOptionsSigner _ -> () | KeyPair kp -> signerSignFileWithKeyPair file kp @@ -575,5 +577,5 @@ open FSharp.Compiler.AbstractIL.Internal.Utils legacySignerSignFileWithKeyContainer file containerName #else ignore containerName - failwith ("Key container signing is not supported on this platform") + failWithContainerSigningUnsupportedOnThisPlatform() #endif diff --git a/src/fsharp/absil/ilsign.fsi b/src/fsharp/absil/ilsign.fsi index ee3043a4f55..23a82daffca 100644 --- a/src/fsharp/absil/ilsign.fsi +++ b/src/fsharp/absil/ilsign.fsi @@ -5,7 +5,7 @@ /// Runtime, e.g. between the SSCLI, Mono and the Microsoft CLR. /// -module internal FSharp.Compiler.AbstractIL.Internal.StrongNameSign +module internal FSharp.Compiler.AbstractIL.StrongNameSign //--------------------------------------------------------------------- // Strong name signing diff --git a/src/fsharp/absil/ilsupp.fs b/src/fsharp/absil/ilsupp.fs index 44ceded2c30..cf2658bd31a 100644 --- a/src/fsharp/absil/ilsupp.fs +++ b/src/fsharp/absil/ilsupp.fs @@ -1,25 +1,22 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.AbstractIL.Internal.Support - -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Internal.NativeRes -open FSharp.Compiler.AbstractIL.Internal.Utils -#if FX_NO_CORHOST_SIGNER -open FSharp.Compiler.AbstractIL.Internal.StrongNameSign -#endif +module internal FSharp.Compiler.AbstractIL.Support open System open System.IO open System.Reflection - #if !FX_NO_SYMBOLSTORE open System.Diagnostics.SymbolStore #endif open System.Runtime.InteropServices open System.Runtime.CompilerServices - +open Internal.Utilities +open Internal.Utilities.Library +open FSharp.Compiler.AbstractIL.NativeRes +open FSharp.Compiler.IO +#if FX_NO_CORHOST_SIGNER +open FSharp.Compiler.AbstractIL.StrongNameSign +#endif let DateTime1970Jan01 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) (* ECMA Spec (Oct2002), Part II, 24.2.2 PE File Header. *) let absilWriteGetTimeStamp () = (DateTime.UtcNow - DateTime1970Jan01).TotalSeconds |> int @@ -94,7 +91,7 @@ type IMAGE_FILE_HEADER (m: int16, secs: int16, tds: int32, ptst: int32, nos: int with get() = 20 member x.toBytes () = - let buf = ByteBuffer.Create IMAGE_FILE_HEADER.Width + use buf = ByteBuffer.Create IMAGE_FILE_HEADER.Width buf.EmitUInt16 (uint16 machine) buf.EmitUInt16 (uint16 numberOfSections) buf.EmitInt32 timeDateStamp @@ -102,7 +99,7 @@ type IMAGE_FILE_HEADER (m: int16, secs: int16, tds: int32, ptst: int32, nos: int buf.EmitInt32 numberOfSymbols buf.EmitUInt16 (uint16 sizeOfOptionalHeader) buf.EmitUInt16 (uint16 characteristics) - buf.Close() + buf.AsMemory().ToArray() let bytesToIFH (buffer: byte[]) (offset: int) = if (buffer.Length - offset) < IMAGE_FILE_HEADER.Width then @@ -175,7 +172,7 @@ type IMAGE_SECTION_HEADER(n: int64, ai: int32, va: int32, srd: int32, prd: int32 with get() = 40 member x.toBytes () = - let buf = ByteBuffer.Create IMAGE_SECTION_HEADER.Width + use buf = ByteBuffer.Create IMAGE_SECTION_HEADER.Width buf.EmitInt64 name buf.EmitInt32 addressInfo buf.EmitInt32 virtualAddress @@ -186,7 +183,7 @@ type IMAGE_SECTION_HEADER(n: int64, ai: int32, va: int32, srd: int32, prd: int32 buf.EmitUInt16 (uint16 numberOfRelocations) buf.EmitUInt16 (uint16 numberOfLineNumbers) buf.EmitInt32 characteristics - buf.Close() + buf.AsMemory().ToArray() let bytesToISH (buffer: byte[]) (offset: int) = @@ -239,14 +236,14 @@ type IMAGE_SYMBOL(n: int64, v: int32, sn: int16, t: int16, sc: byte, nas: byte) with get() = 18 member x.toBytes() = - let buf = ByteBuffer.Create IMAGE_SYMBOL.Width + use buf = ByteBuffer.Create IMAGE_SYMBOL.Width buf.EmitInt64 name buf.EmitInt32 value buf.EmitUInt16 (uint16 sectionNumber) buf.EmitUInt16 (uint16 stype) buf.EmitByte storageClass buf.EmitByte numberOfAuxSymbols - buf.Close() + buf.AsMemory().ToArray() let bytesToIS (buffer: byte[]) (offset: int) = if (buffer.Length - offset) < IMAGE_SYMBOL.Width then @@ -283,11 +280,11 @@ type IMAGE_RELOCATION(va: int32, sti: int32, t: int16) = with get() = 10 member x.toBytes() = - let buf = ByteBuffer.Create IMAGE_RELOCATION.Width + use buf = ByteBuffer.Create IMAGE_RELOCATION.Width buf.EmitInt32 virtualAddress buf.EmitInt32 symbolTableIndex buf.EmitUInt16 (uint16 ty) - buf.Close() + buf.AsMemory().ToArray() let bytesToIR (buffer: byte[]) (offset: int) = if (buffer.Length - offset) < IMAGE_RELOCATION.Width then @@ -331,14 +328,14 @@ type IMAGE_RESOURCE_DIRECTORY(c: int32, tds: int32, mjv: int16, mnv: int16, nne: static member Width = 16 member x.toBytes () = - let buf = ByteBuffer.Create IMAGE_RESOURCE_DIRECTORY.Width + use buf = ByteBuffer.Create IMAGE_RESOURCE_DIRECTORY.Width buf.EmitInt32 characteristics buf.EmitInt32 timeDateStamp buf.EmitUInt16 (uint16 majorVersion) buf.EmitUInt16 (uint16 minorVersion) buf.EmitUInt16 (uint16 numberOfNamedEntries) buf.EmitUInt16 (uint16 numberOfIdEntries) - buf.Close() + buf.AsMemory().ToArray() let bytesToIRD (buffer: byte[]) (offset: int) = if (buffer.Length - offset) < IMAGE_RESOURCE_DIRECTORY.Width then @@ -371,10 +368,10 @@ type IMAGE_RESOURCE_DIRECTORY_ENTRY(n: int32, o: int32) = static member Width = 8 member x.toBytes () = - let buf = ByteBuffer.Create IMAGE_RESOURCE_DIRECTORY_ENTRY.Width + use buf = ByteBuffer.Create IMAGE_RESOURCE_DIRECTORY_ENTRY.Width buf.EmitInt32 name buf.EmitInt32 offset - buf.Close() + buf.AsMemory().ToArray() let bytesToIRDE (buffer: byte[]) (offset: int) = if (buffer.Length - offset) < IMAGE_RESOURCE_DIRECTORY_ENTRY.Width then @@ -404,7 +401,7 @@ type IMAGE_RESOURCE_DATA_ENTRY(o: int32, s: int32, c: int32, r: int32) = static member Width = 16 member x.toBytes() = - let buf = ByteBuffer.Create IMAGE_RESOURCE_DATA_ENTRY.Width + use buf = ByteBuffer.Create IMAGE_RESOURCE_DATA_ENTRY.Width buf.EmitInt32 offsetToData buf.EmitInt32 size buf.EmitInt32 codePage @@ -469,7 +466,7 @@ type ResFormatHeader() = static member Width = 32 member x.toBytes() = - let buf = ByteBuffer.Create ResFormatHeader.Width + use buf = ByteBuffer.Create ResFormatHeader.Width buf.EmitInt32 dwDataSize buf.EmitInt32 dwHeaderSize buf.EmitInt32 dwTypeID @@ -479,7 +476,7 @@ type ResFormatHeader() = buf.EmitUInt16 (uint16 wLangID) buf.EmitInt32 dwVersion buf.EmitInt32 dwCharacteristics - buf.Close() + buf.AsMemory().ToArray() type ResFormatNode(tid: int32, nid: int32, lid: int32, dataOffset: int32, pbLinkedResource: byte[]) = let mutable resHdr = ResFormatHeader() @@ -581,14 +578,14 @@ let linkNativeResources (unlinkedResources: byte[] list) (rva: int32) = let resources = unlinkedResources |> Seq.map (fun s -> new MemoryStream(s)) - |> Seq.map (fun s -> + |> Seq.map (fun s -> let res = CvtResFile.ReadResFile s s.Dispose() res) |> Seq.collect id // See MakeWin32ResourceList https://github.com/dotnet/roslyn/blob/f40b89234db51da1e1153c14af184e618504be41/src/Compilers/Core/Portable/Compilation/Compilation.cs - |> Seq.map (fun r -> - Win32Resource(data = r.data, codePage = 0u, languageId = uint32 r.LanguageId, + |> Seq.map (fun r -> + Win32Resource(data = r.data, codePage = 0u, languageId = uint32 r.LanguageId, id = int (int16 r.pstringName.Ordinal), name = r.pstringName.theString, typeId = int (int16 r.pstringType.Ordinal), typeName = r.pstringType.theString)) let bb = new System.Reflection.Metadata.BlobBuilder() @@ -884,7 +881,7 @@ let pdbInitialize (binaryName: string) (pdbName: string) = { symWriter = writer } -[] +[] do() let pdbCloseDocument(documentWriter: PdbDocumentWriter) = @@ -908,7 +905,7 @@ let pdbClose (writer: PdbWriter) dllFilename pdbFilename = let isLocked filename = try - use x = File.Open (filename, FileMode.Open, FileAccess.ReadWrite, FileShare.None) + use x = FileSystem.OpenFileForWriteShim(filename, FileMode.Open, FileAccess.ReadWrite, FileShare.None) false with | _ -> true @@ -934,7 +931,7 @@ let hashSizeOfMD5 = 16 // In this case, catch the failure, and not set a checksum. let internal setCheckSum (url: string, writer: ISymUnmanagedDocumentWriter) = try - use file = FileSystem.FileStreamReadShim url + use file = FileSystem.OpenFileForReadShim(url) use md5 = System.Security.Cryptography.MD5.Create() let checkSum = md5.ComputeHash file if (checkSum.Length = hashSizeOfMD5) then diff --git a/src/fsharp/absil/ilsupp.fsi b/src/fsharp/absil/ilsupp.fsi index f3ba7fa5ce8..9f74036c44e 100644 --- a/src/fsharp/absil/ilsupp.fsi +++ b/src/fsharp/absil/ilsupp.fsi @@ -5,12 +5,24 @@ /// Runtime, e.g. between the SSCLI, Mono and the Microsoft CLR. /// /// The implementation of the functions can be found in ilsupp-*.fs -module internal FSharp.Compiler.AbstractIL.Internal.Support +module internal FSharp.Compiler.AbstractIL.Support + +open System +open System.Runtime.InteropServices +#if !FX_NO_SYMBOLSTORE +open System.Diagnostics.SymbolStore +#endif + +open Internal.Utilities +open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.IL #if !FX_NO_PDB_WRITER type PdbWriter val pdbInitialize : string -> string -> PdbWriter #endif + #if !FX_NO_PDB_READER type PdbReader val pdbReadClose: PdbReader -> unit @@ -18,18 +30,6 @@ val pdbReadClose: PdbReader -> unit val absilWriteGetTimeStamp: unit -> int32 -open System -open System.Runtime.InteropServices -#if FX_NO_SYMBOLSTORE -#else -open System.Diagnostics.SymbolStore -#endif - -open Internal.Utilities -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.IL - type IStream = System.Runtime.InteropServices.ComTypes.IStream /// Unmanaged resource file linker - for native resources (not managed ones). diff --git a/src/fsharp/absil/ilwrite.fs b/src/fsharp/absil/ilwrite.fs index 16bd6118d39..2abd677d08e 100644 --- a/src/fsharp/absil/ilwrite.fs +++ b/src/fsharp/absil/ilwrite.fs @@ -1,22 +1,24 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.AbstractIL.ILBinaryWriter +module internal FSharp.Compiler.AbstractIL.ILBinaryWriter -open System.Collections.Generic +open System +open System.Collections.Generic open System.IO open Internal.Utilities +open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.Diagnostics -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.BinaryConstants -open FSharp.Compiler.AbstractIL.Internal.Support -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Internal.Utils -open FSharp.Compiler.AbstractIL.Internal.StrongNameSign +open FSharp.Compiler.AbstractIL +open FSharp.Compiler.AbstractIL.BinaryConstants +open FSharp.Compiler.AbstractIL.Support +open Internal.Utilities.Library +open FSharp.Compiler.AbstractIL.StrongNameSign open FSharp.Compiler.AbstractIL.ILPdbWriter open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Range +open FSharp.Compiler.IO +open FSharp.Compiler.Text.Range #if DEBUG let showEntryLookups = false @@ -27,13 +29,13 @@ let showEntryLookups = false // manipulations. //--------------------------------------------------------------------- -// Little-endian encoding of int32 +// Little-endian encoding of int32 let b0 n = byte (n &&& 0xFF) let b1 n = byte ((n >>> 8) &&& 0xFF) let b2 n = byte ((n >>> 16) &&& 0xFF) let b3 n = byte ((n >>> 24) &&& 0xFF) -// Little-endian encoding of int64 +// Little-endian encoding of int64 let dw7 n = byte ((n >>> 56) &&& 0xFFL) let dw6 n = byte ((n >>> 48) &&& 0xFFL) let dw5 n = byte ((n >>> 40) &&& 0xFFL) @@ -46,7 +48,10 @@ let dw0 n = byte (n &&& 0xFFL) let bitsOfSingle (x: float32) = System.BitConverter.ToInt32(System.BitConverter.GetBytes x, 0) let bitsOfDouble (x: float) = System.BitConverter.DoubleToInt64Bits x -let emitBytesViaBuffer f = let bb = ByteBuffer.Create 10 in f bb; bb.Close() +/// Arbitrary value +[] +let EmitBytesViaBufferCapacity = 10 +let emitBytesViaBuffer f = use bb = ByteBuffer.Create EmitBytesViaBufferCapacity in f bb; bb.AsMemory().ToArray() /// Alignment and padding let align alignment n = ((n + alignment - 1) / alignment) * alignment @@ -55,40 +60,40 @@ let align alignment n = ((n + alignment - 1) / alignment) * alignment // Concrete token representations etc. used in PE files //--------------------------------------------------------------------- -type ByteBuffer with +type ByteBuffer with - /// Z32 = compressed unsigned integer - static member Z32Size n = + /// Z32 = compressed unsigned integer + static member Z32Size n = if n <= 0x7F then 1 elif n <= 0x3FFF then 2 else 4 /// Emit int32 as compressed unsigned integer - member buf.EmitZ32 n = - if n >= 0 && n <= 0x7F then - buf.EmitIntAsByte n - elif n >= 0x80 && n <= 0x3FFF then + member buf.EmitZ32 n = + if n >= 0 && n <= 0x7F then + buf.EmitIntAsByte n + elif n >= 0x80 && n <= 0x3FFF then buf.EmitIntAsByte (0x80 ||| (n >>> 8)) - buf.EmitIntAsByte (n &&& 0xFF) - else + buf.EmitIntAsByte (n &&& 0xFF) + else buf.EmitIntAsByte (0xC0 ||| ((n >>> 24) &&& 0xFF)) buf.EmitIntAsByte ((n >>> 16) &&& 0xFF) buf.EmitIntAsByte ((n >>> 8) &&& 0xFF) buf.EmitIntAsByte (n &&& 0xFF) - member buf.EmitPadding n = + member buf.EmitPadding n = for i = 0 to n-1 do buf.EmitByte 0x0uy // Emit compressed untagged integer - member buf.EmitZUntaggedIndex big idx = + member buf.EmitZUntaggedIndex big idx = if big then buf.EmitInt32 idx else // Note, we can have idx=0x10000 generated for method table idx + 1 for just beyond last index of method table. // This indicates that a MethodList, FieldList, PropertyList or EventList has zero entries // For this case, the EmitInt32AsUInt16 writes a 0 (null) into the field. Binary readers respect this as an empty // list of methods/fields/properties/events. - if idx > 0x10000 then + if idx > 0x10000 then System.Diagnostics.Debug.Assert (false, "EmitZUntaggedIndex: too big for small address or simple index") buf.EmitInt32AsUInt16 idx @@ -102,16 +107,16 @@ let getUncodedToken (tab: TableName) idx = ((tab.Index <<< 24) ||| idx) // From ECMA for UserStrings: // This final byte holds the value 1 if and only if any UTF16 character within the string has any bit set in its top byte, or its low byte is any of the following: -// 0x01-0x08, 0x0E-0x1F, 0x27, 0x2D, +// 0x01-0x08, 0x0E-0x1F, 0x27, 0x2D, // 0x7F. Otherwise, it holds 0. The 1 signifies Unicode characters that require handling beyond that normally provided for 8-bit encoding sets. -// HOWEVER, there is a discrepancy here between the ECMA spec and the Microsoft C# implementation. +// HOWEVER, there is a discrepancy here between the ECMA spec and the Microsoft C# implementation. // The code below follows the latter. We've raised the issue with both teams. See Dev10 bug 850073 for details. -let markerForUnicodeBytes (b: byte[]) = +let markerForUnicodeBytes (b: byte[]) = let len = b.Length - let rec scan i = - i < len/2 && + let rec scan i = + i < len/2 && (let b1 = Bytes.get b (i*2) let b2 = Bytes.get b (i*2+1) (b2 <> 0) @@ -125,19 +130,19 @@ let markerForUnicodeBytes (b: byte[]) = marker -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // Fixups -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- /// Check that the data held at a fixup is some special magic value, as a sanity check /// to ensure the fixup is being placed at a ood location. -let checkFixup32 (data: byte[]) offset exp = +let checkFixup32 (data: byte[]) offset exp = if data.[offset + 3] <> b3 exp then failwith "fixup sanity check failed" if data.[offset + 2] <> b2 exp then failwith "fixup sanity check failed" if data.[offset + 1] <> b1 exp then failwith "fixup sanity check failed" if data.[offset] <> b0 exp then failwith "fixup sanity check failed" -let applyFixup32 (data: byte[]) offset v = +let applyFixup32 (data: byte[]) offset v = data.[offset] <- b0 v data.[offset+1] <- b1 v data.[offset+2] <- b2 v @@ -147,7 +152,7 @@ let applyFixup32 (data: byte[]) offset v = // TYPES FOR TABLES //--------------------------------------------------------------------- -module RowElementTags = +module RowElementTags = let [] UShort = 0 let [] ULong = 1 let [] Data = 2 @@ -212,7 +217,7 @@ module RowElementTags = let [] ResolutionScopeMax = 178 [] -type RowElement(tag: int32, idx: int32) = +type RowElement(tag: int32, idx: int32) = member x.Tag = tag member x.Val = idx @@ -221,15 +226,15 @@ type RowElement(tag: int32, idx: int32) = let UShort (x: uint16) = RowElement(RowElementTags.UShort, int32 x) let ULong (x: int32) = RowElement(RowElementTags.ULong, x) /// Index into cenv.data or cenv.resources. Gets fixed up later once we known an overall -/// location for the data section. flag indicates if offset is relative to cenv.resources. +/// location for the data section. flag indicates if offset is relative to cenv.resources. let Data (x: int, k: bool) = RowElement((if k then RowElementTags.DataResources else RowElementTags.Data ), x) -/// pos. in guid array +/// pos. in guid array let Guid (x: int) = RowElement(RowElementTags.Guid, x) -/// pos. in blob array +/// pos. in blob array let Blob (x: int) = RowElement(RowElementTags.Blob, x) -/// pos. in string array +/// pos. in string array let StringE (x: int) = RowElement(RowElementTags.String, x) -/// pos. in some table +/// pos. in some table let SimpleIndex (t, x: int) = RowElement(RowElementTags.SimpleIndex t, x) let TypeDefOrRefOrSpec (t, x: int) = RowElement(RowElementTags.TypeDefOrRefOrSpec t, x) let TypeOrMethodDef (t, x: int) = RowElement(RowElementTags.TypeOrMethodDef t, x) @@ -245,14 +250,14 @@ let Implementation (t, x: int) = RowElement(RowElementTags.Implementation t, x) let CustomAttributeType (t, x: int) = RowElement(RowElementTags.CustomAttributeType t, x) let ResolutionScope (t, x: int) = RowElement(RowElementTags.ResolutionScope t, x) (* -type RowElement = +type RowElement = | UShort of uint16 | ULong of int32 - | Data of int * bool // Index into cenv.data or cenv.resources. Will be adjusted later in writing once we fix an overall location for the data section. flag indicates if offset is relative to cenv.resources. - | Guid of int // pos. in guid array - | Blob of int // pos. in blob array - | String of int // pos. in string array - | SimpleIndex of TableName * int // pos. in some table + | Data of int * bool // Index into cenv.data or cenv.resources. Will be adjusted later in writing once we fix an overall location for the data section. flag indicates if offset is relative to cenv.resources. + | Guid of int // pos. in guid array + | Blob of int // pos. in blob array + | String of int // pos. in string array + | SimpleIndex of TableName * int // pos. in some table | TypeDefOrRefOrSpec of TypeDefOrRefTag * int | TypeOrMethodDef of TypeOrMethodDefTag * int | HasConstant of HasConstantTag * int @@ -276,18 +281,18 @@ let StringIndex (x: StringIndex) : int = x let inline combineHash x2 acc = 37 * acc + x2 // (acc <<< 6 + acc >>> 2 + x2 + 0x9e3779b9) -let hashRow (elems: RowElement[]) = +let hashRow (elems: RowElement[]) = let mutable acc = 0 - for i in 0 .. elems.Length - 1 do - acc <- (acc <<< 1) + elems.[i].Tag + elems.[i].Val + 631 + for i in 0 .. elems.Length - 1 do + acc <- (acc <<< 1) + elems.[i].Tag + elems.[i].Val + 631 acc -let equalRows (elems: RowElement[]) (elems2: RowElement[]) = +let equalRows (elems: RowElement[]) (elems2: RowElement[]) = if elems.Length <> elems2.Length then false else let mutable ok = true let n = elems.Length - let mutable i = 0 - while ok && i < n do + let mutable i = 0 + while ok && i < n do if elems.[i].Tag <> elems2.[i].Tag || elems.[i].Val <> elems2.[i].Val then ok <- false i <- i + 1 ok @@ -302,37 +307,37 @@ type GenericRow = RowElement[] type SharedRow(elems: RowElement[], hashCode: int) = member x.GenericRow = elems override x.GetHashCode() = hashCode - override x.Equals(obj: obj) = - match obj with + override x.Equals(obj: obj) = + match obj with | :? SharedRow as y -> equalRows elems y.GenericRow | _ -> false let SharedRow(elems: RowElement[]) = new SharedRow(elems, hashRow elems) /// Special representation : Note, only hashing by name -let AssemblyRefRow(s1, s2, s3, s4, l1, b1, nameIdx, str2, b2) = +let AssemblyRefRow(s1, s2, s3, s4, l1, b1, nameIdx, str2, b2) = let hashCode = hash nameIdx let genericRow = [| UShort s1; UShort s2; UShort s3; UShort s4; ULong l1; Blob b1; StringE nameIdx; StringE str2; Blob b2 |] new SharedRow(genericRow, hashCode) /// Special representation the computes the hash more efficiently -let MemberRefRow(mrp: RowElement, nmIdx: StringIndex, blobIdx: BlobIndex) = +let MemberRefRow(mrp: RowElement, nmIdx: StringIndex, blobIdx: BlobIndex) = let hashCode = combineHash (hash blobIdx) (combineHash (hash nmIdx) (hash mrp)) let genericRow = [| mrp; StringE nmIdx; Blob blobIdx |] new SharedRow(genericRow, hashCode) /// Unshared rows are used for definitional tables where elements do not need to be made unique -/// e.g. ILMethodDef and ILTypeDef. Most tables are like this. We don't precompute a +/// e.g. ILMethodDef and ILTypeDef. Most tables are like this. We don't precompute a /// hash code for these rows, and indeed the GetHashCode and Equals should not be needed. [] type UnsharedRow(elems: RowElement[]) = member x.GenericRow = elems override x.GetHashCode() = hashRow elems - override x.Equals(obj: obj) = - match obj with + override x.Equals(obj: obj) = + match obj with | :? UnsharedRow as y -> equalRows elems y.GenericRow | _ -> false - + //===================================================================== //===================================================================== @@ -340,8 +345,8 @@ type UnsharedRow(elems: RowElement[]) = //===================================================================== //===================================================================== -// This environment keeps track of how many generic parameters are in scope. -// This lets us translate AbsIL type variable number to IL type variable numbering +// This environment keeps track of how many generic parameters are in scope. +// This lets us translate AbsIL type variable number to IL type variable numbering type ILTypeWriterEnv = { EnclosingTyparCount: int } let envForTypeDef (td: ILTypeDef) = { EnclosingTyparCount=td.GenericParams.Length } let envForMethodRef env (ty: ILType) = { EnclosingTyparCount=(match ty with ILType.Array _ -> env.EnclosingTyparCount | _ -> ty.GenericArgs.Length) } @@ -354,7 +359,7 @@ let envForOverrideSpec (ospec: ILOverridesSpec) = { EnclosingTyparCount=ospec.De //--------------------------------------------------------------------- [] -type MetadataTable<'T> = +type MetadataTable<'T> = { name: string dict: Dictionary<'T, int> // given a row, find its entry number #if DEBUG @@ -363,7 +368,7 @@ type MetadataTable<'T> = mutable rows: ResizeArray<'T> } member x.Count = x.rows.Count - static member New(nm, hashEq) = + static member New(nm, hashEq) = { name=nm #if DEBUG lookups=0 @@ -371,13 +376,13 @@ type MetadataTable<'T> = dict = new Dictionary<_, _>(100, hashEq) rows= new ResizeArray<_>() } - member tbl.EntriesAsArray = + member tbl.EntriesAsArray = #if DEBUG if showEntryLookups then dprintf "--> table %s had %d entries and %d lookups\n" tbl.name tbl.Count tbl.lookups #endif tbl.rows |> ResizeArray.toArray - member tbl.Entries = + member tbl.Entries = #if DEBUG if showEntryLookups then dprintf "--> table %s had %d entries and %d lookups\n" tbl.name tbl.Count tbl.lookups #endif @@ -396,16 +401,16 @@ type MetadataTable<'T> = member tbl.FindOrAddSharedEntry x = #if DEBUG - tbl.lookups <- tbl.lookups + 1 + tbl.lookups <- tbl.lookups + 1 #endif match tbl.dict.TryGetValue x with | true, res -> res | _ -> tbl.AddSharedEntry x - /// This is only used in one special place - see further below. - member tbl.SetRowsOfTable t = - tbl.rows <- ResizeArray.ofArray t + /// This is only used in one special place - see further below. + member tbl.SetRowsOfTable t = + tbl.rows <- ResizeArray.ofArray t let h = tbl.dict h.Clear() t |> Array.iteri (fun i x -> h.[x] <- (i+1)) @@ -414,15 +419,15 @@ type MetadataTable<'T> = if tbl.dict.ContainsKey x then failwith ("duplicate entry '"+getter x+"' in "+nm+" table") else tbl.AddSharedEntry x - member tbl.GetTableEntry x = tbl.dict.[x] + member tbl.GetTableEntry x = tbl.dict.[x] //--------------------------------------------------------------------- // Keys into some of the tables //--------------------------------------------------------------------- -/// We use this key type to help find ILMethodDefs for MethodRefs +/// We use this key type to help find ILMethodDefs for MethodRefs type MethodDefKey(ilg:ILGlobals, tidx: int, garity: int, nm: string, rty: ILType, argtys: ILTypes, isStatic: bool) = - // Precompute the hash. The hash doesn't include the return type or + // Precompute the hash. The hash doesn't include the return type or // argument types (only argument type count). This is very important, since // hashing these is way too expensive let hashCode = @@ -456,19 +461,19 @@ type MethodDefKey(ilg:ILGlobals, tidx: int, garity: int, nm: string, rty: ILType | _ -> false /// We use this key type to help find ILFieldDefs for FieldRefs -type FieldDefKey(tidx: int, nm: string, ty: ILType) = - // precompute the hash. hash doesn't include the type - let hashCode = hash tidx |> combineHash (hash nm) +type FieldDefKey(tidx: int, nm: string, ty: ILType) = + // precompute the hash. hash doesn't include the type + let hashCode = hash tidx |> combineHash (hash nm) member key.TypeIdx = tidx member key.Name = nm member key.Type = ty override x.GetHashCode() = hashCode - override x.Equals(obj: obj) = - match obj with - | :? FieldDefKey as y -> - tidx = y.TypeIdx && - nm = y.Name && - ty = y.Type + override x.Equals(obj: obj) = + match obj with + | :? FieldDefKey as y -> + tidx = y.TypeIdx && + nm = y.Name && + ty = y.Type | _ -> false type PropertyTableKey = PropKey of int (* type. def. idx. *) * string * ILType * ILTypes @@ -486,39 +491,39 @@ type MetadataTable = member t.FindOrAddSharedEntry x = match t with Shared u -> u.FindOrAddSharedEntry x | Unshared u -> failwithf "FindOrAddSharedEntry: incorrect table kind, u.name = %s" u.name member t.AddSharedEntry x = match t with | Shared u -> u.AddSharedEntry x | Unshared u -> failwithf "AddSharedEntry: incorrect table kind, u.name = %s" u.name member t.AddUnsharedEntry x = match t with Unshared u -> u.AddUnsharedEntry x | Shared u -> failwithf "AddUnsharedEntry: incorrect table kind, u.name = %s" u.name - member t.GenericRowsOfTable = match t with Unshared u -> u.EntriesAsArray |> Array.map (fun x -> x.GenericRow) | Shared u -> u.EntriesAsArray |> Array.map (fun x -> x.GenericRow) + member t.GenericRowsOfTable = match t with Unshared u -> u.EntriesAsArray |> Array.map (fun x -> x.GenericRow) | Shared u -> u.EntriesAsArray |> Array.map (fun x -> x.GenericRow) member t.SetRowsOfSharedTable rows = match t with Shared u -> u.SetRowsOfTable (Array.map SharedRow rows) | Unshared u -> failwithf "SetRowsOfSharedTable: incorrect table kind, u.name = %s" u.name - member t.Count = match t with Unshared u -> u.Count | Shared u -> u.Count + member t.Count = match t with Unshared u -> u.Count | Shared u -> u.Count [] -type cenv = +type cenv = { ilg: ILGlobals emitTailcalls: bool deterministic: bool showTimes: bool desiredMetadataVersion: ILVersionInfo requiredDataFixups: (int32 * (int * bool)) list ref - /// References to strings in codestreams: offset of code and a (fixup-location, string token) list) - mutable requiredStringFixups: (int32 * (int * int) list) list - codeChunks: ByteBuffer + /// References to strings in codestreams: offset of code and a (fixup-location, string token) list) + mutable requiredStringFixups: (int32 * (int * int) list) list + codeChunks: ByteBuffer mutable nextCodeAddr: int32 - + // Collected debug information mutable moduleGuid: byte[] generatePdb: bool pdbinfo: ResizeArray documents: MetadataTable - /// Raw data, to go into the data section - data: ByteBuffer - /// Raw resource data, to go into the data section - resources: ByteBuffer - mutable entrypoint: (bool * int) option + /// Raw data, to go into the data section + data: ByteBuffer + /// Raw resource data, to go into the data section + resources: ByteBuffer + mutable entrypoint: (bool * int) option /// Caches trefCache: Dictionary - /// The following are all used to generate unique items in the output + /// The following are all used to generate unique items in the output tables: MetadataTable[] AssemblyRefs: MetadataTable fieldDefs: MetadataTable @@ -526,26 +531,32 @@ type cenv = methodDefIdxs: Dictionary propertyDefs: MetadataTable eventDefs: MetadataTable - typeDefs: MetadataTable - guids: MetadataTable - blobs: MetadataTable - strings: MetadataTable + typeDefs: MetadataTable + guids: MetadataTable + blobs: MetadataTable + strings: MetadataTable userStrings: MetadataTable normalizeAssemblyRefs: ILAssemblyRef -> ILAssemblyRef } member cenv.GetTable (tab: TableName) = cenv.tables.[tab.Index] - member cenv.AddCode ((reqdStringFixupsOffset, requiredStringFixups), code) = + member cenv.AddCode ((reqdStringFixupsOffset, requiredStringFixups), code) = if align 4 cenv.nextCodeAddr <> cenv.nextCodeAddr then dprintn "warning: code not 4-byte aligned" cenv.requiredStringFixups <- (cenv.nextCodeAddr + reqdStringFixupsOffset, requiredStringFixups) :: cenv.requiredStringFixups cenv.codeChunks.EmitBytes code cenv.nextCodeAddr <- cenv.nextCodeAddr + code.Length - member cenv.GetCode() = cenv.codeChunks.Close() + member cenv.GetCode() = cenv.codeChunks.AsMemory().ToArray() override x.ToString() = "" + interface IDisposable with + member this.Dispose() = + (this.codeChunks :> IDisposable).Dispose() + (this.data :> IDisposable).Dispose() + (this.resources :> IDisposable).Dispose() + let FindOrAddSharedRow (cenv: cenv) tbl x = cenv.GetTable(tbl).FindOrAddSharedEntry x // Shared rows must be hash-cons'd to be made unique (no duplicates according to contents) @@ -554,34 +565,34 @@ let AddSharedRow (cenv: cenv) tbl x = cenv.GetTable(tbl).AddSharedEntry x // Unshared rows correspond to definition elements (e.g. a ILTypeDef or a ILMethodDef) let AddUnsharedRow (cenv: cenv) tbl (x: UnsharedRow) = cenv.GetTable(tbl).AddUnsharedEntry x -let metadataSchemaVersionSupportedByCLRVersion v = - // Whidbey Beta 1 version numbers are between 2.0.40520.0 and 2.0.40607.0 - // Later Whidbey versions are post 2.0.40607.0.. However we assume - // internal builds such as 2.0.x86chk are Whidbey Beta 2 or later +let metadataSchemaVersionSupportedByCLRVersion v = + // Whidbey Beta 1 version numbers are between 2.0.40520.0 and 2.0.40607.0 + // Later Whidbey versions are post 2.0.40607.0.. However we assume + // internal builds such as 2.0.x86chk are Whidbey Beta 2 or later if compareILVersions v (parseILVersion ("2.0.40520.0")) >= 0 && compareILVersions v (parseILVersion ("2.0.40608.0")) < 0 then 1, 1 elif compareILVersions v (parseILVersion ("2.0.0.0")) >= 0 then 2, 0 - else 1, 0 + else 1, 0 -let headerVersionSupportedByCLRVersion v = - // The COM20HEADER version number - // Whidbey version numbers are 2.5 - // Earlier are 2.0 - // From an email from jeffschw: "Be built with a compiler that marks the COM20HEADER with Major >=2 and Minor >= 5. The V2.0 compilers produce images with 2.5, V1.x produces images with 2.0." +let headerVersionSupportedByCLRVersion v = + // The COM20HEADER version number + // Whidbey version numbers are 2.5 + // Earlier are 2.0 + // From an email from jeffschw: "Be built with a compiler that marks the COM20HEADER with Major >=2 and Minor >= 5. The V2.0 compilers produce images with 2.5, V1.x produces images with 2.0." if compareILVersions v (parseILVersion ("2.0.0.0")) >= 0 then 2, 5 - else 2, 0 + else 2, 0 -let peOptionalHeaderByteByCLRVersion v = - // A flag in the PE file optional header seems to depend on CLI version - // Whidbey version numbers are 8 - // Earlier are 6 - // Tools are meant to ignore this, but the VS Profiler wants it to have the right value +let peOptionalHeaderByteByCLRVersion v = + // A flag in the PE file optional header seems to depend on CLI version + // Whidbey version numbers are 8 + // Earlier are 6 + // Tools are meant to ignore this, but the VS Profiler wants it to have the right value if compareILVersions v (parseILVersion ("2.0.0.0")) >= 0 then 8 else 6 -// returned by writeBinaryAndReportMappings +// returned by writeBinaryAndReportMappings [] -type ILTokenMappings = +type ILTokenMappings = { TypeDefTokenMap: ILTypeDef list * ILTypeDef -> int32 FieldDefTokenMap: ILTypeDef list * ILTypeDef -> ILFieldDef -> int32 MethodDefTokenMap: ILTypeDef list * ILTypeDef -> ILMethodDef -> int32 @@ -590,125 +601,125 @@ type ILTokenMappings = let recordRequiredDataFixup requiredDataFixups (buf: ByteBuffer) pos lab = requiredDataFixups := (pos, lab) :: !requiredDataFixups - // Write a special value in that we check later when applying the fixup + // Write a special value in that we check later when applying the fixup buf.EmitInt32 0xdeaddddd //--------------------------------------------------------------------- // The UserString, BlobHeap, GuidHeap tables //--------------------------------------------------------------------- -let GetUserStringHeapIdx cenv s = +let GetUserStringHeapIdx cenv s = cenv.userStrings.FindOrAddSharedEntry s -let GetBytesAsBlobIdx cenv (bytes: byte[]) = - if bytes.Length = 0 then 0 +let GetBytesAsBlobIdx cenv (bytes: byte[]) = + if bytes.Length = 0 then 0 else cenv.blobs.FindOrAddSharedEntry bytes -let GetStringHeapIdx cenv s = - if s = "" then 0 +let GetStringHeapIdx cenv s = + if s = "" then 0 else cenv.strings.FindOrAddSharedEntry s let GetGuidIdx cenv info = cenv.guids.FindOrAddSharedEntry info let GetStringHeapIdxOption cenv sopt = - match sopt with + match sopt with | Some ns -> GetStringHeapIdx cenv ns | None -> 0 let GetTypeNameAsElemPair cenv n = let (n1, n2) = splitTypeNameRight n - StringE (GetStringHeapIdxOption cenv n1), + StringE (GetStringHeapIdxOption cenv n1), StringE (GetStringHeapIdx cenv n2) //===================================================================== -// Pass 1 - allocate indexes for types +// Pass 1 - allocate indexes for types //===================================================================== -let rec GenTypeDefPass1 enc cenv (td: ILTypeDef) = +let rec GenTypeDefPass1 enc cenv (td: ILTypeDef) = ignore (cenv.typeDefs.AddUniqueEntry "type index" (fun (TdKey (_, n)) -> n) (TdKey (enc, td.Name))) GenTypeDefsPass1 (enc@[td.Name]) cenv td.NestedTypes.AsList and GenTypeDefsPass1 enc cenv tds = List.iter (GenTypeDefPass1 enc cenv) tds //===================================================================== -// Pass 2 - allocate indexes for methods and fields and write rows for types +// Pass 2 - allocate indexes for methods and fields and write rows for types //===================================================================== -let rec GetIdxForTypeDef cenv key = +let rec GetIdxForTypeDef cenv key = try cenv.typeDefs.GetTableEntry key - with - :? KeyNotFoundException -> + with + :? KeyNotFoundException -> let (TdKey (enc, n) ) = key errorR(InternalError("One of your modules expects the type '"+String.concat "." (enc@[n])+"' to be defined within the module being emitted. You may be missing an input file", range0)) 0 - -// -------------------------------------------------------------------- + +// -------------------------------------------------------------------- // Assembly and module references -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- let rec GetAssemblyRefAsRow cenv (aref: ILAssemblyRef) = - AssemblyRefRow - ((match aref.Version with None -> 0us | Some version -> version.Major), - (match aref.Version with None -> 0us | Some version -> version.Minor), - (match aref.Version with None -> 0us | Some version -> version.Build), - (match aref.Version with None -> 0us | Some version -> version.Revision), + AssemblyRefRow + ((match aref.Version with None -> 0us | Some version -> version.Major), + (match aref.Version with None -> 0us | Some version -> version.Minor), + (match aref.Version with None -> 0us | Some version -> version.Build), + (match aref.Version with None -> 0us | Some version -> version.Revision), ((match aref.PublicKey with Some (PublicKey _) -> 0x0001 | _ -> 0x0000) - ||| (if aref.Retargetable then 0x0100 else 0x0000)), - BlobIndex (match aref.PublicKey with - | None -> 0 - | Some (PublicKey b | PublicKeyToken b) -> GetBytesAsBlobIdx cenv b), - StringIndex (GetStringHeapIdx cenv aref.Name), - StringIndex (match aref.Locale with None -> 0 | Some s -> GetStringHeapIdx cenv s), + ||| (if aref.Retargetable then 0x0100 else 0x0000)), + BlobIndex (match aref.PublicKey with + | None -> 0 + | Some (PublicKey b | PublicKeyToken b) -> GetBytesAsBlobIdx cenv b), + StringIndex (GetStringHeapIdx cenv aref.Name), + StringIndex (match aref.Locale with None -> 0 | Some s -> GetStringHeapIdx cenv s), BlobIndex (match aref.Hash with None -> 0 | Some s -> GetBytesAsBlobIdx cenv s)) -and GetAssemblyRefAsIdx cenv aref = +and GetAssemblyRefAsIdx cenv aref = FindOrAddSharedRow cenv TableNames.AssemblyRef (GetAssemblyRefAsRow cenv (cenv.normalizeAssemblyRefs aref)) and GetModuleRefAsRow cenv (mref: ILModuleRef) = - SharedRow + SharedRow [| StringE (GetStringHeapIdx cenv mref.Name) |] and GetModuleRefAsFileRow cenv (mref: ILModuleRef) = - SharedRow + SharedRow [| ULong (if mref.HasMetadata then 0x0000 else 0x0001) StringE (GetStringHeapIdx cenv mref.Name) (match mref.Hash with None -> Blob 0 | Some s -> Blob (GetBytesAsBlobIdx cenv s)) |] -and GetModuleRefAsIdx cenv mref = +and GetModuleRefAsIdx cenv mref = FindOrAddSharedRow cenv TableNames.ModuleRef (GetModuleRefAsRow cenv mref) -and GetModuleRefAsFileIdx cenv mref = +and GetModuleRefAsFileIdx cenv mref = FindOrAddSharedRow cenv TableNames.File (GetModuleRefAsFileRow cenv mref) -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // Does a ILScopeRef point to this module? -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let isScopeRefLocal scoref = (scoref = ILScopeRef.Local) +let isScopeRefLocal scoref = (scoref = ILScopeRef.Local) let isTypeRefLocal (tref: ILTypeRef) = isScopeRefLocal tref.Scope let isTypeLocal (ty: ILType) = ty.IsNominal && isNil ty.GenericArgs && isTypeRefLocal ty.TypeRef -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // Scopes to Implementation elements. -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let GetScopeRefAsImplementationElem cenv scoref = - match scoref with +let GetScopeRefAsImplementationElem cenv scoref = + match scoref with | ILScopeRef.Local -> (i_AssemblyRef, 0) | ILScopeRef.Assembly aref -> (i_AssemblyRef, GetAssemblyRefAsIdx cenv aref) | ILScopeRef.Module mref -> (i_File, GetModuleRefAsFileIdx cenv mref) | ILScopeRef.PrimaryAssembly -> (i_AssemblyRef, GetAssemblyRefAsIdx cenv cenv.ilg.primaryAssemblyRef) - -// -------------------------------------------------------------------- + +// -------------------------------------------------------------------- // Type references, types etc. -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GetTypeRefAsTypeRefRow cenv (tref: ILTypeRef) = +let rec GetTypeRefAsTypeRefRow cenv (tref: ILTypeRef) = let nselem, nelem = GetTypeNameAsElemPair cenv tref.Name let rs1, rs2 = GetResolutionScopeAsElem cenv (tref.Scope, tref.Enclosing) SharedRow [| ResolutionScope (rs1, rs2); nelem; nselem |] -and GetTypeRefAsTypeRefIdx cenv tref = +and GetTypeRefAsTypeRefIdx cenv tref = match cenv.trefCache.TryGetValue tref with | true, res -> res | _ -> @@ -716,143 +727,143 @@ and GetTypeRefAsTypeRefIdx cenv tref = cenv.trefCache.[tref] <- res res -and GetTypeDescAsTypeRefIdx cenv (scoref, enc, n) = +and GetTypeDescAsTypeRefIdx cenv (scoref, enc, n) = GetTypeRefAsTypeRefIdx cenv (mkILNestedTyRef (scoref, enc, n)) -and GetResolutionScopeAsElem cenv (scoref, enc) = - if isNil enc then - match scoref with - | ILScopeRef.Local -> (rs_Module, 1) +and GetResolutionScopeAsElem cenv (scoref, enc) = + if isNil enc then + match scoref with + | ILScopeRef.Local -> (rs_Module, 1) | ILScopeRef.Assembly aref -> (rs_AssemblyRef, GetAssemblyRefAsIdx cenv aref) | ILScopeRef.Module mref -> (rs_ModuleRef, GetModuleRefAsIdx cenv mref) | ILScopeRef.PrimaryAssembly -> (rs_AssemblyRef, GetAssemblyRefAsIdx cenv cenv.ilg.primaryAssemblyRef) else let enc2, n2 = List.frontAndBack enc (rs_TypeRef, GetTypeDescAsTypeRefIdx cenv (scoref, enc2, n2)) - -let emitTypeInfoAsTypeDefOrRefEncoded cenv (bb: ByteBuffer) (scoref, enc, nm) = - if isScopeRefLocal scoref then + +let emitTypeInfoAsTypeDefOrRefEncoded cenv (bb: ByteBuffer) (scoref, enc, nm) = + if isScopeRefLocal scoref then let idx = GetIdxForTypeDef cenv (TdKey(enc, nm)) - bb.EmitZ32 (idx <<< 2) // ECMA 22.2.8 TypeDefOrRefEncoded - ILTypeDef - else + bb.EmitZ32 (idx <<< 2) // ECMA 22.2.8 TypeDefOrRefEncoded - ILTypeDef + else let idx = GetTypeDescAsTypeRefIdx cenv (scoref, enc, nm) - bb.EmitZ32 ((idx <<< 2) ||| 0x01) // ECMA 22.2.8 TypeDefOrRefEncoded - ILTypeRef + bb.EmitZ32 ((idx <<< 2) ||| 0x01) // ECMA 22.2.8 TypeDefOrRefEncoded - ILTypeRef let getTypeDefOrRefAsUncodedToken (tag, idx) = - let tab = - if tag = tdor_TypeDef then TableNames.TypeDef - elif tag = tdor_TypeRef then TableNames.TypeRef + let tab = + if tag = tdor_TypeDef then TableNames.TypeDef + elif tag = tdor_TypeRef then TableNames.TypeRef elif tag = tdor_TypeSpec then TableNames.TypeSpec else failwith "getTypeDefOrRefAsUncodedToken" getUncodedToken tab idx // REVIEW: write into an accumulating buffer -let EmitArrayShape (bb: ByteBuffer) (ILArrayShape shape) = +let EmitArrayShape (bb: ByteBuffer) (ILArrayShape shape) = let sized = List.filter (function (_, Some _) -> true | _ -> false) shape let lobounded = List.filter (function (Some _, _) -> true | _ -> false) shape bb.EmitZ32 shape.Length bb.EmitZ32 sized.Length sized |> List.iter (function (_, Some sz) -> bb.EmitZ32 sz | _ -> failwith "?") bb.EmitZ32 lobounded.Length - lobounded |> List.iter (function (Some low, _) -> bb.EmitZ32 low | _ -> failwith "?") - + lobounded |> List.iter (function (Some low, _) -> bb.EmitZ32 low | _ -> failwith "?") + let hasthisToByte hasthis = - match hasthis with + match hasthis with | ILThisConvention.Instance -> e_IMAGE_CEE_CS_CALLCONV_INSTANCE | ILThisConvention.InstanceExplicit -> e_IMAGE_CEE_CS_CALLCONV_INSTANCE_EXPLICIT | ILThisConvention.Static -> 0x00uy -let callconvToByte ntypars (Callconv (hasthis, bcc)) = +let callconvToByte ntypars (Callconv (hasthis, bcc)) = hasthisToByte hasthis ||| (if ntypars > 0 then e_IMAGE_CEE_CS_CALLCONV_GENERIC else 0x00uy) ||| - (match bcc with + (match bcc with | ILArgConvention.FastCall -> e_IMAGE_CEE_CS_CALLCONV_FASTCALL | ILArgConvention.StdCall -> e_IMAGE_CEE_CS_CALLCONV_STDCALL | ILArgConvention.ThisCall -> e_IMAGE_CEE_CS_CALLCONV_THISCALL | ILArgConvention.CDecl -> e_IMAGE_CEE_CS_CALLCONV_CDECL | ILArgConvention.Default -> 0x00uy | ILArgConvention.VarArg -> e_IMAGE_CEE_CS_CALLCONV_VARARG) - + // REVIEW: write into an accumulating buffer -let rec EmitTypeSpec cenv env (bb: ByteBuffer) (et, tspec: ILTypeSpec) = - if isNil tspec.GenericArgs then +let rec EmitTypeSpec cenv env (bb: ByteBuffer) (et, tspec: ILTypeSpec) = + if isNil tspec.GenericArgs then bb.EmitByte et emitTypeInfoAsTypeDefOrRefEncoded cenv bb (tspec.Scope, tspec.Enclosing, tspec.Name) - else + else bb.EmitByte et_WITH bb.EmitByte et emitTypeInfoAsTypeDefOrRefEncoded cenv bb (tspec.Scope, tspec.Enclosing, tspec.Name) bb.EmitZ32 tspec.GenericArgs.Length EmitTypes cenv env bb tspec.GenericArgs -and GetTypeAsTypeDefOrRef cenv env (ty: ILType) = - if isTypeLocal ty then +and GetTypeAsTypeDefOrRef cenv env (ty: ILType) = + if isTypeLocal ty then let tref = ty.TypeRef (tdor_TypeDef, GetIdxForTypeDef cenv (TdKey(tref.Enclosing, tref.Name))) elif ty.IsNominal && isNil ty.GenericArgs then (tdor_TypeRef, GetTypeRefAsTypeRefIdx cenv ty.TypeRef) - else + else (tdor_TypeSpec, GetTypeAsTypeSpecIdx cenv env ty) and GetTypeAsBytes cenv env ty = emitBytesViaBuffer (fun bb -> EmitType cenv env bb ty) -and GetTypeOfLocalAsBytes cenv env (l: ILLocal) = +and GetTypeOfLocalAsBytes cenv env (l: ILLocal) = emitBytesViaBuffer (fun bb -> EmitLocalInfo cenv env bb l) -and GetTypeAsBlobIdx cenv env (ty: ILType) = +and GetTypeAsBlobIdx cenv env (ty: ILType) = GetBytesAsBlobIdx cenv (GetTypeAsBytes cenv env ty) -and GetTypeAsTypeSpecRow cenv env (ty: ILType) = +and GetTypeAsTypeSpecRow cenv env (ty: ILType) = SharedRow [| Blob (GetTypeAsBlobIdx cenv env ty) |] -and GetTypeAsTypeSpecIdx cenv env ty = +and GetTypeAsTypeSpecIdx cenv env ty = FindOrAddSharedRow cenv TableNames.TypeSpec (GetTypeAsTypeSpecRow cenv env ty) and EmitType cenv env bb ty = let ilg = cenv.ilg - match ty with - | ty when isILSByteTy ilg ty -> bb.EmitByte et_I1 - | ty when isILInt16Ty ilg ty -> bb.EmitByte et_I2 - | ty when isILInt32Ty ilg ty -> bb.EmitByte et_I4 - | ty when isILInt64Ty ilg ty -> bb.EmitByte et_I8 - | ty when isILByteTy ilg ty -> bb.EmitByte et_U1 - | ty when isILUInt16Ty ilg ty -> bb.EmitByte et_U2 - | ty when isILUInt32Ty ilg ty -> bb.EmitByte et_U4 - | ty when isILUInt64Ty ilg ty -> bb.EmitByte et_U8 - | ty when isILDoubleTy ilg ty -> bb.EmitByte et_R8 - | ty when isILSingleTy ilg ty -> bb.EmitByte et_R4 - | ty when isILBoolTy ilg ty -> bb.EmitByte et_BOOLEAN - | ty when isILCharTy ilg ty -> bb.EmitByte et_CHAR - | ty when isILStringTy ilg ty -> bb.EmitByte et_STRING - | ty when isILObjectTy ilg ty -> bb.EmitByte et_OBJECT - | ty when isILIntPtrTy ilg ty -> bb.EmitByte et_I - | ty when isILUIntPtrTy ilg ty -> bb.EmitByte et_U - | ty when isILTypedReferenceTy ilg ty -> bb.EmitByte et_TYPEDBYREF + match ty with + | ty when isILSByteTy ilg ty -> bb.EmitByte et_I1 + | ty when isILInt16Ty ilg ty -> bb.EmitByte et_I2 + | ty when isILInt32Ty ilg ty -> bb.EmitByte et_I4 + | ty when isILInt64Ty ilg ty -> bb.EmitByte et_I8 + | ty when isILByteTy ilg ty -> bb.EmitByte et_U1 + | ty when isILUInt16Ty ilg ty -> bb.EmitByte et_U2 + | ty when isILUInt32Ty ilg ty -> bb.EmitByte et_U4 + | ty when isILUInt64Ty ilg ty -> bb.EmitByte et_U8 + | ty when isILDoubleTy ilg ty -> bb.EmitByte et_R8 + | ty when isILSingleTy ilg ty -> bb.EmitByte et_R4 + | ty when isILBoolTy ilg ty -> bb.EmitByte et_BOOLEAN + | ty when isILCharTy ilg ty -> bb.EmitByte et_CHAR + | ty when isILStringTy ilg ty -> bb.EmitByte et_STRING + | ty when isILObjectTy ilg ty -> bb.EmitByte et_OBJECT + | ty when isILIntPtrTy ilg ty -> bb.EmitByte et_I + | ty when isILUIntPtrTy ilg ty -> bb.EmitByte et_U + | ty when isILTypedReferenceTy ilg ty -> bb.EmitByte et_TYPEDBYREF | ILType.Boxed tspec -> EmitTypeSpec cenv env bb (et_CLASS, tspec) | ILType.Value tspec -> EmitTypeSpec cenv env bb (et_VALUETYPE, tspec) - | ILType.Array (shape, ty) -> + | ILType.Array (shape, ty) -> if shape = ILArrayShape.SingleDimensional then (bb.EmitByte et_SZARRAY ; EmitType cenv env bb ty) else (bb.EmitByte et_ARRAY; EmitType cenv env bb ty; EmitArrayShape bb shape) - | ILType.TypeVar tv -> + | ILType.TypeVar tv -> let cgparams = env.EnclosingTyparCount - if int32 tv < cgparams then + if int32 tv < cgparams then bb.EmitByte et_VAR bb.EmitZ32 (int32 tv) else bb.EmitByte et_MVAR bb.EmitZ32 (int32 tv - cgparams) - | ILType.Byref ty -> + | ILType.Byref ty -> bb.EmitByte et_BYREF EmitType cenv env bb ty - | ILType.Ptr ty -> + | ILType.Ptr ty -> bb.EmitByte et_PTR EmitType cenv env bb ty - | ILType.Void -> - bb.EmitByte et_VOID + | ILType.Void -> + bb.EmitByte et_VOID | ILType.FunctionPointer x -> bb.EmitByte et_FNPTR EmitCallsig cenv env bb (x.CallingConv, x.ArgTypes, x.ReturnType, None, 0) @@ -863,120 +874,120 @@ and EmitType cenv env bb ty = | _ -> failwith "EmitType" and EmitLocalInfo cenv env (bb: ByteBuffer) (l: ILLocal) = - if l.IsPinned then + if l.IsPinned then bb.EmitByte et_PINNED EmitType cenv env bb l.Type -and EmitCallsig cenv env bb (callconv, args: ILTypes, ret, varargs: ILVarArgs, genarity) = +and EmitCallsig cenv env bb (callconv, args: ILTypes, ret, varargs: ILVarArgs, genarity) = bb.EmitByte (callconvToByte genarity callconv) if genarity > 0 then bb.EmitZ32 genarity bb.EmitZ32 ((args.Length + (match varargs with None -> 0 | Some l -> l.Length))) EmitType cenv env bb ret args |> List.iter (EmitType cenv env bb) - match varargs with - | None -> ()// no extra arg = no sentinel - | Some tys -> - if isNil tys then () // no extra arg = no sentinel - else + match varargs with + | None -> ()// no extra arg = no sentinel + | Some tys -> + if isNil tys then () // no extra arg = no sentinel + else bb.EmitByte et_SENTINEL List.iter (EmitType cenv env bb) tys and GetCallsigAsBytes cenv env x = emitBytesViaBuffer (fun bb -> EmitCallsig cenv env bb x) // REVIEW: write into an accumulating buffer -and EmitTypes cenv env bb (inst: ILTypes) = - inst |> List.iter (EmitType cenv env bb) +and EmitTypes cenv env bb (inst: ILTypes) = + inst |> List.iter (EmitType cenv env bb) let GetTypeAsMemberRefParent cenv env ty = - match GetTypeAsTypeDefOrRef cenv env ty with + match GetTypeAsTypeDefOrRef cenv env ty with | (tag, _) when tag = tdor_TypeDef -> dprintn "GetTypeAsMemberRefParent: mspec should have been encoded as mdtMethodDef?"; MemberRefParent (mrp_TypeRef, 1) | (tag, tok) when tag = tdor_TypeRef -> MemberRefParent (mrp_TypeRef, tok) | (tag, tok) when tag = tdor_TypeSpec -> MemberRefParent (mrp_TypeSpec, tok) | _ -> failwith "GetTypeAsMemberRefParent" -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // Native types -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GetVariantTypeAsInt32 ty = - if List.memAssoc ty (Lazy.force ILVariantTypeMap) then +let rec GetVariantTypeAsInt32 ty = + if List.memAssoc ty (Lazy.force ILVariantTypeMap) then (List.assoc ty (Lazy.force ILVariantTypeMap )) - else - match ty with + else + match ty with | ILNativeVariant.Array vt -> vt_ARRAY ||| GetVariantTypeAsInt32 vt | ILNativeVariant.Vector vt -> vt_VECTOR ||| GetVariantTypeAsInt32 vt | ILNativeVariant.Byref vt -> vt_BYREF ||| GetVariantTypeAsInt32 vt | _ -> failwith "Unexpected variant type" -// based on information in ECMA and asmparse.y in the CLR codebase -let rec GetNativeTypeAsBlobIdx cenv (ty: ILNativeType) = +// based on information in ECMA and asmparse.y in the CLR codebase +let rec GetNativeTypeAsBlobIdx cenv (ty: ILNativeType) = GetBytesAsBlobIdx cenv (GetNativeTypeAsBytes ty) and GetNativeTypeAsBytes ty = emitBytesViaBuffer (fun bb -> EmitNativeType bb ty) // REVIEW: write into an accumulating buffer -and EmitNativeType bb ty = - if List.memAssoc ty (Lazy.force ILNativeTypeRevMap) then +and EmitNativeType bb ty = + if List.memAssoc ty (Lazy.force ILNativeTypeRevMap) then bb.EmitByte (List.assoc ty (Lazy.force ILNativeTypeRevMap)) - else - match ty with + else + match ty with | ILNativeType.Empty -> () | ILNativeType.Custom (guid, nativeTypeName, custMarshallerName, cookieString) -> let u1 = System.Text.Encoding.UTF8.GetBytes nativeTypeName let u2 = System.Text.Encoding.UTF8.GetBytes custMarshallerName let u3 = cookieString - bb.EmitByte nt_CUSTOMMARSHALER + bb.EmitByte nt_CUSTOMMARSHALER bb.EmitZ32 guid.Length bb.EmitBytes guid bb.EmitZ32 u1.Length; bb.EmitBytes u1 bb.EmitZ32 u2.Length; bb.EmitBytes u2 bb.EmitZ32 u3.Length; bb.EmitBytes u3 - | ILNativeType.FixedSysString i -> - bb.EmitByte nt_FIXEDSYSSTRING + | ILNativeType.FixedSysString i -> + bb.EmitByte nt_FIXEDSYSSTRING bb.EmitZ32 i - | ILNativeType.FixedArray i -> + | ILNativeType.FixedArray i -> bb.EmitByte nt_FIXEDARRAY bb.EmitZ32 i - | (* COM interop *) ILNativeType.SafeArray (vt, name) -> + | (* COM interop *) ILNativeType.SafeArray (vt, name) -> bb.EmitByte nt_SAFEARRAY bb.EmitZ32 (GetVariantTypeAsInt32 vt) - match name with - | None -> () - | Some n -> + match name with + | None -> () + | Some n -> let u1 = Bytes.stringAsUtf8NullTerminated n bb.EmitZ32 (Array.length u1) ; bb.EmitBytes u1 | ILNativeType.Array (nt, sizeinfo) -> (* REVIEW: check if this corresponds to the ECMA spec *) - bb.EmitByte nt_ARRAY - match nt with + bb.EmitByte nt_ARRAY + match nt with | None -> bb.EmitZ32 (int nt_MAX) | Some ntt -> - (if ntt = ILNativeType.Empty then + (if ntt = ILNativeType.Empty then bb.EmitZ32 (int nt_MAX) - else - EmitNativeType bb ntt) - match sizeinfo with - | None -> () // chunk out with zeroes because some tools (e.g. asmmeta) read these poorly and expect further elements. + else + EmitNativeType bb ntt) + match sizeinfo with + | None -> () // chunk out with zeroes because some tools (e.g. asmmeta) read these poorly and expect further elements. | Some (pnum, additive) -> - // ParamNum + // ParamNum bb.EmitZ32 pnum - (* ElemMul *) (* z_u32 0x1l *) - match additive with + (* ElemMul *) (* z_u32 0x1l *) + match additive with | None -> () | Some n -> (* NumElem *) bb.EmitZ32 n | _ -> failwith "Unexpected native type" -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // Native types -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GetFieldInitAsBlobIdx cenv (x: ILFieldInit) = +let rec GetFieldInitAsBlobIdx cenv (x: ILFieldInit) = GetBytesAsBlobIdx cenv (emitBytesViaBuffer (fun bb -> GetFieldInit bb x)) // REVIEW: write into an accumulating buffer -and GetFieldInit (bb: ByteBuffer) x = - match x with +and GetFieldInit (bb: ByteBuffer) x = + match x with | ILFieldInit.String b -> bb.EmitBytes (System.Text.Encoding.Unicode.GetBytes b) | ILFieldInit.Bool b -> bb.EmitByte (if b then 0x01uy else 0x00uy) | ILFieldInit.Char x -> bb.EmitUInt16 x @@ -992,10 +1003,10 @@ and GetFieldInit (bb: ByteBuffer) x = | ILFieldInit.Double x -> bb.EmitInt64 (bitsOfDouble x) | ILFieldInit.Null -> bb.EmitInt32 0 -and GetFieldInitFlags i = - UShort +and GetFieldInitFlags i = + UShort (uint16 - (match i with + (match i with | ILFieldInit.String _ -> et_STRING | ILFieldInit.Bool _ -> et_BOOLEAN | ILFieldInit.Char _ -> et_CHAR @@ -1010,12 +1021,12 @@ and GetFieldInitFlags i = | ILFieldInit.Single _ -> et_R4 | ILFieldInit.Double _ -> et_R8 | ILFieldInit.Null -> et_CLASS)) - -// -------------------------------------------------------------------- + +// -------------------------------------------------------------------- // Type definitions -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let GetMemberAccessFlags access = +let GetMemberAccessFlags access = match access with | ILMemberAccess.Public -> 0x00000006 | ILMemberAccess.Private -> 0x00000001 @@ -1025,8 +1036,8 @@ let GetMemberAccessFlags access = | ILMemberAccess.FamilyOrAssembly -> 0x00000005 | ILMemberAccess.Assembly -> 0x00000003 -let GetTypeAccessFlags access = - match access with +let GetTypeAccessFlags access = + match access with | ILTypeDefAccess.Public -> 0x00000001 | ILTypeDefAccess.Private -> 0x00000000 | ILTypeDefAccess.Nested ILMemberAccess.Public -> 0x00000002 @@ -1037,44 +1048,44 @@ let GetTypeAccessFlags access = | ILTypeDefAccess.Nested ILMemberAccess.FamilyOrAssembly -> 0x00000007 | ILTypeDefAccess.Nested ILMemberAccess.Assembly -> 0x00000005 -let rec GetTypeDefAsRow cenv env _enc (td: ILTypeDef) = +let rec GetTypeDefAsRow cenv env _enc (td: ILTypeDef) = let nselem, nelem = GetTypeNameAsElemPair cenv td.Name - let flags = + let flags = if (isTypeNameForGlobalFunctions td.Name) then 0x00000000 else int td.Attributes let tdorTag, tdorRow = GetTypeOptionAsTypeDefOrRef cenv env td.Extends - UnsharedRow - [| ULong flags - nelem - nselem - TypeDefOrRefOrSpec (tdorTag, tdorRow) - SimpleIndex (TableNames.Field, cenv.fieldDefs.Count + 1) - SimpleIndex (TableNames.Method, cenv.methodDefIdxsByKey.Count + 1) |] - -and GetTypeOptionAsTypeDefOrRef cenv env tyOpt = + UnsharedRow + [| ULong flags + nelem + nselem + TypeDefOrRefOrSpec (tdorTag, tdorRow) + SimpleIndex (TableNames.Field, cenv.fieldDefs.Count + 1) + SimpleIndex (TableNames.Method, cenv.methodDefIdxsByKey.Count + 1) |] + +and GetTypeOptionAsTypeDefOrRef cenv env tyOpt = match tyOpt with | None -> (tdor_TypeDef, 0) | Some ty -> (GetTypeAsTypeDefOrRef cenv env ty) -and GetTypeDefAsPropertyMapRow cenv tidx = +and GetTypeDefAsPropertyMapRow cenv tidx = UnsharedRow [| SimpleIndex (TableNames.TypeDef, tidx) - SimpleIndex (TableNames.Property, cenv.propertyDefs.Count + 1) |] + SimpleIndex (TableNames.Property, cenv.propertyDefs.Count + 1) |] -and GetTypeDefAsEventMapRow cenv tidx = +and GetTypeDefAsEventMapRow cenv tidx = UnsharedRow [| SimpleIndex (TableNames.TypeDef, tidx) - SimpleIndex (TableNames.Event, cenv.eventDefs.Count + 1) |] - -and GetKeyForFieldDef tidx (fd: ILFieldDef) = + SimpleIndex (TableNames.Event, cenv.eventDefs.Count + 1) |] + +and GetKeyForFieldDef tidx (fd: ILFieldDef) = FieldDefKey (tidx, fd.Name, fd.FieldType) -and GenFieldDefPass2 cenv tidx fd = +and GenFieldDefPass2 cenv tidx fd = ignore (cenv.fieldDefs.AddUniqueEntry "field" (fun (fdkey: FieldDefKey) -> fdkey.Name) (GetKeyForFieldDef tidx fd)) -and GetKeyForMethodDef cenv tidx (md: ILMethodDef) = +and GetKeyForMethodDef cenv tidx (md: ILMethodDef) = MethodDefKey (cenv.ilg, tidx, md.GenericParams.Length, md.Name, md.Return.Type, md.ParameterTypes, md.CallingConv.IsStatic) and GenMethodDefPass2 cenv tidx md = @@ -1092,51 +1103,51 @@ and GenMethodDefPass2 cenv tidx md = cenv.methodDefIdxs.[md] <- idx -and GetKeyForPropertyDef tidx (x: ILPropertyDef) = +and GetKeyForPropertyDef tidx (x: ILPropertyDef) = PropKey (tidx, x.Name, x.PropertyType, x.Args) -and GenPropertyDefPass2 cenv tidx x = +and GenPropertyDefPass2 cenv tidx x = ignore (cenv.propertyDefs.AddUniqueEntry "property" (fun (PropKey (_, n, _, _)) -> n) (GetKeyForPropertyDef tidx x)) and GetTypeAsImplementsRow cenv env tidx ty = let tdorTag, tdorRow = GetTypeAsTypeDefOrRef cenv env ty - UnsharedRow - [| SimpleIndex (TableNames.TypeDef, tidx) + UnsharedRow + [| SimpleIndex (TableNames.TypeDef, tidx) TypeDefOrRefOrSpec (tdorTag, tdorRow) |] and GenImplementsPass2 cenv env tidx ty = AddUnsharedRow cenv TableNames.InterfaceImpl (GetTypeAsImplementsRow cenv env tidx ty) |> ignore - -and GetKeyForEvent tidx (x: ILEventDef) = + +and GetKeyForEvent tidx (x: ILEventDef) = EventKey (tidx, x.Name) -and GenEventDefPass2 cenv tidx x = +and GenEventDefPass2 cenv tidx x = ignore (cenv.eventDefs.AddUniqueEntry "event" (fun (EventKey(_, b)) -> b) (GetKeyForEvent tidx x)) and GenTypeDefPass2 pidx enc cenv (td: ILTypeDef) = - try + try let env = envForTypeDef td let tidx = GetIdxForTypeDef cenv (TdKey(enc, td.Name)) let tidx2 = AddUnsharedRow cenv TableNames.TypeDef (GetTypeDefAsRow cenv env enc td) if tidx <> tidx2 then failwith "index of typedef on second pass does not match index on first pass" - // Add entries to auxiliary mapping tables, e.g. Nested, PropertyMap etc. - // Note Nested is organised differently to the others... + // Add entries to auxiliary mapping tables, e.g. Nested, PropertyMap etc. + // Note Nested is organised differently to the others... if not (isNil enc) then - AddUnsharedRow cenv TableNames.Nested - (UnsharedRow - [| SimpleIndex (TableNames.TypeDef, tidx) + AddUnsharedRow cenv TableNames.Nested + (UnsharedRow + [| SimpleIndex (TableNames.TypeDef, tidx) SimpleIndex (TableNames.TypeDef, pidx) |]) |> ignore let props = td.Properties.AsList - if not (isNil props) then - AddUnsharedRow cenv TableNames.PropertyMap (GetTypeDefAsPropertyMapRow cenv tidx) |> ignore + if not (isNil props) then + AddUnsharedRow cenv TableNames.PropertyMap (GetTypeDefAsPropertyMapRow cenv tidx) |> ignore let events = td.Events.AsList - if not (isNil events) then + if not (isNil events) then AddUnsharedRow cenv TableNames.EventMap (GetTypeDefAsEventMapRow cenv tidx) |> ignore - // Now generate or assign index numbers for tables referenced by the maps. - // Don't yet generate contents of these tables - leave that to pass3, as - // code may need to embed these entries. + // Now generate or assign index numbers for tables referenced by the maps. + // Don't yet generate contents of these tables - leave that to pass3, as + // code may need to embed these entries. td.Implements |> List.iter (GenImplementsPass2 cenv env tidx) props |> List.iter (GenPropertyDefPass2 cenv tidx) events |> List.iter (GenEventDefPass2 cenv tidx) @@ -1154,56 +1165,56 @@ and GenTypeDefsPass2 pidx enc cenv tds = //===================================================================== exception MethodDefNotFound -let FindMethodDefIdx cenv mdkey = +let FindMethodDefIdx cenv mdkey = try cenv.methodDefIdxsByKey.GetTableEntry mdkey - with :? KeyNotFoundException -> - let typeNameOfIdx i = - match - (cenv.typeDefs.dict - |> Seq.fold (fun sofar kvp -> - let tkey2 = kvp.Key - let tidx2 = kvp.Value - if i = tidx2 then - if sofar = None then - Some tkey2 - else failwith "multiple type names map to index" - else sofar) None) with + with :? KeyNotFoundException -> + let typeNameOfIdx i = + match + (cenv.typeDefs.dict + |> Seq.fold (fun sofar kvp -> + let tkey2 = kvp.Key + let tidx2 = kvp.Value + if i = tidx2 then + if sofar = None then + Some tkey2 + else failwith "multiple type names map to index" + else sofar) None) with | Some x -> x - | None -> raise MethodDefNotFound + | None -> raise MethodDefNotFound let (TdKey (tenc, tname)) = typeNameOfIdx mdkey.TypeIdx dprintn ("The local method '"+(String.concat "." (tenc@[tname]))+"'::'"+mdkey.Name+"' was referenced but not declared") dprintn ("generic arity: "+string mdkey.GenericArity) - cenv.methodDefIdxsByKey.dict |> Seq.iter (fun (KeyValue(mdkey2, _)) -> - if mdkey2.TypeIdx = mdkey.TypeIdx && mdkey.Name = mdkey2.Name then + cenv.methodDefIdxsByKey.dict |> Seq.iter (fun (KeyValue(mdkey2, _)) -> + if mdkey2.TypeIdx = mdkey.TypeIdx && mdkey.Name = mdkey2.Name then let (TdKey (tenc2, tname2)) = typeNameOfIdx mdkey2.TypeIdx dprintn ("A method in '"+(String.concat "." (tenc2@[tname2]))+"' had the right name but the wrong signature:") - dprintn ("generic arity: "+string mdkey2.GenericArity) + dprintn ("generic arity: "+string mdkey2.GenericArity) dprintn (sprintf "mdkey2: %+A" mdkey2)) raise MethodDefNotFound -let rec GetMethodDefIdx cenv md = +let rec GetMethodDefIdx cenv md = cenv.methodDefIdxs.[md] -and FindFieldDefIdx cenv fdkey = - try cenv.fieldDefs.GetTableEntry fdkey - with :? KeyNotFoundException -> +and FindFieldDefIdx cenv fdkey = + try cenv.fieldDefs.GetTableEntry fdkey + with :? KeyNotFoundException -> errorR(InternalError("The local field "+fdkey.Name+" was referenced but not declared", range0)) 1 -and GetFieldDefAsFieldDefIdx cenv tidx fd = - FindFieldDefIdx cenv (GetKeyForFieldDef tidx fd) +and GetFieldDefAsFieldDefIdx cenv tidx fd = + FindFieldDefIdx cenv (GetKeyForFieldDef tidx fd) -// -------------------------------------------------------------------- -// ILMethodRef --> ILMethodDef. -// -// Only successfully converts ILMethodRef's referring to +// -------------------------------------------------------------------- +// ILMethodRef --> ILMethodDef. +// +// Only successfully converts ILMethodRef's referring to // methods in the module being emitted. -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- let GetMethodRefAsMethodDefIdx cenv (mref: ILMethodRef) = let tref = mref.DeclaringTypeRef - try + try if not (isTypeRefLocal tref) then failwithf "method referred to by method impl, event or property is not in a type defined in this module, method ref is %A" mref let tidx = GetIdxForTypeDef cenv (TdKey(tref.Enclosing, tref.Name)) @@ -1213,14 +1224,14 @@ let GetMethodRefAsMethodDefIdx cenv (mref: ILMethodRef) = failwithf "Error in GetMethodRefAsMethodDefIdx for mref = %A, error: %s" (mref.Name, tref.Name) e.Message let rec MethodRefInfoAsMemberRefRow cenv env fenv (nm, ty, callconv, args, ret, varargs, genarity) = - MemberRefRow(GetTypeAsMemberRefParent cenv env ty, - GetStringHeapIdx cenv nm, + MemberRefRow(GetTypeAsMemberRefParent cenv env ty, + GetStringHeapIdx cenv nm, GetMethodRefInfoAsBlobIdx cenv fenv (callconv, args, ret, varargs, genarity)) -and GetMethodRefInfoAsBlobIdx cenv env info = +and GetMethodRefInfoAsBlobIdx cenv env info = GetBytesAsBlobIdx cenv (GetCallsigAsBytes cenv env info) -let GetMethodRefInfoAsMemberRefIdx cenv env ((_, ty, _, _, _, _, _) as minfo) = +let GetMethodRefInfoAsMemberRefIdx cenv env ((_, ty, _, _, _, _, _) as minfo) = let fenv = envForMethodRef env ty FindOrAddSharedRow cenv TableNames.MemberRef (MethodRefInfoAsMemberRefRow cenv env fenv minfo) @@ -1232,26 +1243,26 @@ let GetMethodRefInfoAsMethodRefOrDef isAlwaysMethodDef cenv env ((nm, ty: ILType else (mdor_MemberRef, GetMethodRefInfoAsMemberRefIdx cenv env minfo) -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // ILMethodSpec --> ILMethodRef/ILMethodDef/ILMethodSpec -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GetMethodSpecInfoAsMethodSpecIdx cenv env (nm, ty, cc, args, ret, varargs, minst: ILGenericArgs) = +let rec GetMethodSpecInfoAsMethodSpecIdx cenv env (nm, ty, cc, args, ret, varargs, minst: ILGenericArgs) = let mdorTag, mdorRow = GetMethodRefInfoAsMethodRefOrDef false cenv env (nm, ty, cc, args, ret, varargs, minst.Length) - let blob = - emitBytesViaBuffer (fun bb -> + let blob = + emitBytesViaBuffer (fun bb -> bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_GENERICINST bb.EmitZ32 minst.Length minst |> List.iter (EmitType cenv env bb)) - FindOrAddSharedRow cenv TableNames.MethodSpec - (SharedRow + FindOrAddSharedRow cenv TableNames.MethodSpec + (SharedRow [| MethodDefOrRef (mdorTag, mdorRow) Blob (GetBytesAsBlobIdx cenv blob) |]) and GetMethodDefOrRefAsUncodedToken (tag, idx) = - let tab = + let tab = if tag = mdor_MethodDef then TableNames.Method - elif tag = mdor_MemberRef then TableNames.MemberRef + elif tag = mdor_MemberRef then TableNames.MemberRef else failwith "GetMethodDefOrRefAsUncodedToken" getUncodedToken tab idx @@ -1261,10 +1272,10 @@ and GetMethodSpecInfoAsUncodedToken cenv env ((_, _, _, _, _, _, minst: ILGeneri else getUncodedToken TableNames.MethodSpec (GetMethodSpecInfoAsMethodSpecIdx cenv env minfo) -and GetMethodSpecAsUncodedToken cenv env mspec = +and GetMethodSpecAsUncodedToken cenv env mspec = GetMethodSpecInfoAsUncodedToken cenv env (InfoOfMethodSpec mspec) -and GetMethodRefInfoOfMethodSpecInfo (nm, ty, cc, args, ret, varargs, minst: ILGenericArgs) = +and GetMethodRefInfoOfMethodSpecInfo (nm, ty, cc, args, ret, varargs, minst: ILGenericArgs) = (nm, ty, cc, args, ret, varargs, minst.Length) and GetMethodSpecAsMethodDefOrRef cenv env (mspec, varargs) = @@ -1273,42 +1284,42 @@ and GetMethodSpecAsMethodDefOrRef cenv env (mspec, varargs) = and GetMethodSpecAsMethodDef cenv env (mspec, varargs) = GetMethodRefInfoAsMethodRefOrDef true cenv env (GetMethodRefInfoOfMethodSpecInfo (InfoOfMethodSpec (mspec, varargs))) -and InfoOfMethodSpec (mspec: ILMethodSpec, varargs) = - (mspec.Name, - mspec.DeclaringType, - mspec.CallingConv, - mspec.FormalArgTypes, - mspec.FormalReturnType, - varargs, +and InfoOfMethodSpec (mspec: ILMethodSpec, varargs) = + (mspec.Name, + mspec.DeclaringType, + mspec.CallingConv, + mspec.FormalArgTypes, + mspec.FormalReturnType, + varargs, mspec.GenericArgs) -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // method_in_parent --> ILMethodRef/ILMethodDef -// +// // Used for MethodImpls. // -------------------------------------------------------------------- -let rec GetOverridesSpecAsMemberRefIdx cenv env ospec = +let rec GetOverridesSpecAsMemberRefIdx cenv env ospec = let fenv = envForOverrideSpec ospec let row = MethodRefInfoAsMemberRefRow cenv env fenv (ospec.MethodRef.Name, ospec.DeclaringType, ospec.MethodRef.CallingConv, ospec.MethodRef.ArgTypes, ospec.MethodRef.ReturnType, None, ospec.MethodRef.GenericArity) FindOrAddSharedRow cenv TableNames.MemberRef row - + and GetOverridesSpecAsMethodDefOrRef cenv env (ospec: ILOverridesSpec) = let ty = ospec.DeclaringType - if isTypeLocal ty then - if not ty.IsNominal then failwith "GetOverridesSpecAsMethodDefOrRef: unexpected local tref-ty" + if isTypeLocal ty then + if not ty.IsNominal then failwith "GetOverridesSpecAsMethodDefOrRef: unexpected local tref-ty" try (mdor_MethodDef, GetMethodRefAsMethodDefIdx cenv ospec.MethodRef) - with MethodDefNotFound -> (mdor_MemberRef, GetOverridesSpecAsMemberRefIdx cenv env ospec) - else - (mdor_MemberRef, GetOverridesSpecAsMemberRefIdx cenv env ospec) + with MethodDefNotFound -> (mdor_MemberRef, GetOverridesSpecAsMemberRefIdx cenv env ospec) + else + (mdor_MemberRef, GetOverridesSpecAsMemberRefIdx cenv env ospec) -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // ILMethodRef --> ILMethodRef/ILMethodDef -// +// // Used for Custom Attrs. -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GetMethodRefAsMemberRefIdx cenv env fenv (mref: ILMethodRef) = +let rec GetMethodRefAsMemberRefIdx cenv env fenv (mref: ILMethodRef) = let row = MethodRefInfoAsMemberRefRow cenv env fenv (mref.Name, mkILNonGenericBoxedTy mref.DeclaringTypeRef, mref.CallingConv, mref.ArgTypes, mref.ReturnType, None, mref.GenericArity) FindOrAddSharedRow cenv TableNames.MemberRef row @@ -1321,16 +1332,16 @@ and GetMethodRefAsCustomAttribType cenv (mref: ILMethodRef) = else (cat_MemberRef, GetMethodRefAsMemberRefIdx cenv fenv fenv mref) -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // ILAttributes --> CustomAttribute rows -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GetCustomAttrDataAsBlobIdx cenv (data: byte[]) = +let rec GetCustomAttrDataAsBlobIdx cenv (data: byte[]) = if data.Length = 0 then 0 else GetBytesAsBlobIdx cenv data and GetCustomAttrRow cenv hca (attr: ILAttribute) = let cat = GetMethodRefAsCustomAttribType cenv attr.Method.MethodRef - let data = getCustomAttrData cenv.ilg attr + let data = getCustomAttrData attr for element in attr.Elements do match element with | ILAttribElem.Type (Some ty) when ty.IsNominal -> GetTypeRefAsTypeRefIdx cenv ty.TypeRef |> ignore @@ -1343,50 +1354,50 @@ and GetCustomAttrRow cenv hca (attr: ILAttribute) = Blob (GetCustomAttrDataAsBlobIdx cenv data) |] -and GenCustomAttrPass3Or4 cenv hca attr = +and GenCustomAttrPass3Or4 cenv hca attr = AddUnsharedRow cenv TableNames.CustomAttribute (GetCustomAttrRow cenv hca attr) |> ignore -and GenCustomAttrsPass3Or4 cenv hca (attrs: ILAttributes) = - attrs.AsArray |> Array.iter (GenCustomAttrPass3Or4 cenv hca) +and GenCustomAttrsPass3Or4 cenv hca (attrs: ILAttributes) = + attrs.AsArray |> Array.iter (GenCustomAttrPass3Or4 cenv hca) -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // ILSecurityDecl --> DeclSecurity rows // -------------------------------------------------------------------- *) -let rec GetSecurityDeclRow cenv hds (ILSecurityDecl (action, s)) = - UnsharedRow +let rec GetSecurityDeclRow cenv hds (ILSecurityDecl (action, s)) = + UnsharedRow [| UShort (uint16 (List.assoc action (Lazy.force ILSecurityActionMap))) HasDeclSecurity (fst hds, snd hds) - Blob (GetBytesAsBlobIdx cenv s) |] + Blob (GetBytesAsBlobIdx cenv s) |] -and GenSecurityDeclPass3 cenv hds attr = +and GenSecurityDeclPass3 cenv hds attr = AddUnsharedRow cenv TableNames.Permission (GetSecurityDeclRow cenv hds attr) |> ignore -and GenSecurityDeclsPass3 cenv hds attrs = - List.iter (GenSecurityDeclPass3 cenv hds) attrs +and GenSecurityDeclsPass3 cenv hds attrs = + List.iter (GenSecurityDeclPass3 cenv hds) attrs -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // ILFieldSpec --> FieldRef or ILFieldDef row -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GetFieldSpecAsMemberRefRow cenv env fenv (fspec: ILFieldSpec) = - MemberRefRow (GetTypeAsMemberRefParent cenv env fspec.DeclaringType, - GetStringHeapIdx cenv fspec.Name, +let rec GetFieldSpecAsMemberRefRow cenv env fenv (fspec: ILFieldSpec) = + MemberRefRow (GetTypeAsMemberRefParent cenv env fspec.DeclaringType, + GetStringHeapIdx cenv fspec.Name, GetFieldSpecSigAsBlobIdx cenv fenv fspec) -and GetFieldSpecAsMemberRefIdx cenv env fspec = +and GetFieldSpecAsMemberRefIdx cenv env fspec = let fenv = envForFieldSpec fspec FindOrAddSharedRow cenv TableNames.MemberRef (GetFieldSpecAsMemberRefRow cenv env fenv fspec) // REVIEW: write into an accumulating buffer -and EmitFieldSpecSig cenv env (bb: ByteBuffer) (fspec: ILFieldSpec) = +and EmitFieldSpecSig cenv env (bb: ByteBuffer) (fspec: ILFieldSpec) = bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_FIELD EmitType cenv env bb fspec.FormalType -and GetFieldSpecSigAsBytes cenv env x = - emitBytesViaBuffer (fun bb -> EmitFieldSpecSig cenv env bb x) +and GetFieldSpecSigAsBytes cenv env x = + emitBytesViaBuffer (fun bb -> EmitFieldSpecSig cenv env bb x) -and GetFieldSpecSigAsBlobIdx cenv env x = +and GetFieldSpecSigAsBlobIdx cenv env x = GetBytesAsBlobIdx cenv (GetFieldSpecSigAsBytes cenv env x) and GetFieldSpecAsFieldDefOrRef cenv env (fspec: ILFieldSpec) = @@ -1397,96 +1408,104 @@ and GetFieldSpecAsFieldDefOrRef cenv env (fspec: ILFieldSpec) = let tidx = GetIdxForTypeDef cenv (TdKey(tref.Enclosing, tref.Name)) let fdkey = FieldDefKey (tidx, fspec.Name, fspec.FormalType) (true, FindFieldDefIdx cenv fdkey) - else + else (false, GetFieldSpecAsMemberRefIdx cenv env fspec) and GetFieldDefOrRefAsUncodedToken (tag, idx) = let tab = if tag then TableNames.Field else TableNames.MemberRef getUncodedToken tab idx -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // callsig --> StandAloneSig -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let GetCallsigAsBlobIdx cenv env (callsig: ILCallingSignature, varargs) = - GetBytesAsBlobIdx cenv - (GetCallsigAsBytes cenv env (callsig.CallingConv, - callsig.ArgTypes, +let GetCallsigAsBlobIdx cenv env (callsig: ILCallingSignature, varargs) = + GetBytesAsBlobIdx cenv + (GetCallsigAsBytes cenv env (callsig.CallingConv, + callsig.ArgTypes, callsig.ReturnType, varargs, 0)) - -let GetCallsigAsStandAloneSigRow cenv env x = + +let GetCallsigAsStandAloneSigRow cenv env x = SharedRow [| Blob (GetCallsigAsBlobIdx cenv env x) |] -let GetCallsigAsStandAloneSigIdx cenv env info = +let GetCallsigAsStandAloneSigIdx cenv env info = FindOrAddSharedRow cenv TableNames.StandAloneSig (GetCallsigAsStandAloneSigRow cenv env info) -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // local signatures --> BlobHeap idx -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let EmitLocalSig cenv env (bb: ByteBuffer) (locals: ILLocals) = +let EmitLocalSig cenv env (bb: ByteBuffer) (locals: ILLocals) = bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_LOCAL_SIG bb.EmitZ32 locals.Length locals |> List.iter (EmitLocalInfo cenv env bb) -let GetLocalSigAsBlobHeapIdx cenv env locals = +let GetLocalSigAsBlobHeapIdx cenv env locals = GetBytesAsBlobIdx cenv (emitBytesViaBuffer (fun bb -> EmitLocalSig cenv env bb locals)) -let GetLocalSigAsStandAloneSigIdx cenv env locals = +let GetLocalSigAsStandAloneSigIdx cenv env locals = SharedRow [| Blob (GetLocalSigAsBlobHeapIdx cenv env locals) |] -type ExceptionClauseKind = - | FinallyClause - | FaultClause - | TypeFilterClause of int32 +type ExceptionClauseKind = + | FinallyClause + | FaultClause + | TypeFilterClause of int32 | FilterClause of int type ExceptionClauseSpec = (int * int * int * int * ExceptionClauseKind) -type CodeBuffer = +/// Arbitrary value +[] +let CodeBufferCapacity = 200 - // -------------------------------------------------------------------- +type CodeBuffer = + + // -------------------------------------------------------------------- // Buffer to write results of emitting code into. Also record: // - branch sources (where fixups will occur) // - possible branch destinations // - locations of embedded handles into the string table // - the exception table - // -------------------------------------------------------------------- - { code: ByteBuffer - /// (instruction; optional short form); start of instr in code buffer; code loc for the end of the instruction the fixup resides in ; where is the destination of the fixup - mutable reqdBrFixups: ((int * int option) * int * ILCodeLabel list) list - availBrFixups: Dictionary - /// code loc to fixup in code buffer - mutable reqdStringFixupsInMethod: (int * int) list - /// data for exception handling clauses - mutable seh: ExceptionClauseSpec list + // -------------------------------------------------------------------- + { code: ByteBuffer + /// (instruction; optional short form); start of instr in code buffer; code loc for the end of the instruction the fixup resides in ; where is the destination of the fixup + mutable reqdBrFixups: ((int * int option) * int * ILCodeLabel list) list + availBrFixups: Dictionary + /// code loc to fixup in code buffer + mutable reqdStringFixupsInMethod: (int * int) list + /// data for exception handling clauses + mutable seh: ExceptionClauseSpec list seqpoints: ResizeArray } - static member Create _nm = + interface IDisposable with + member this.Dispose() = + (this.code :> IDisposable).Dispose() + + static member Create _nm = { seh = [] - code= ByteBuffer.Create 200 + code= ByteBuffer.Create CodeBufferCapacity reqdBrFixups=[] reqdStringFixupsInMethod=[] - availBrFixups = Dictionary<_, _>(10, HashIdentity.Structural) + availBrFixups = Dictionary<_, _>(10, HashIdentity.Structural) seqpoints = new ResizeArray<_>(10) } member codebuf.EmitExceptionClause seh = codebuf.seh <- seh :: codebuf.seh - member codebuf.EmitSeqPoint cenv (m: ILSourceMarker) = - if cenv.generatePdb then - // table indexes are 1-based, document array indexes are 0-based - let doc = (cenv.documents.FindOrAddSharedEntry m.Document) - 1 - codebuf.seqpoints.Add + member codebuf.EmitSeqPoint cenv (m: ILSourceMarker) = + if cenv.generatePdb then + // table indexes are 1-based, document array indexes are 0-based + let doc = (cenv.documents.FindOrAddSharedEntry m.Document) - 1 + codebuf.seqpoints.Add { Document=doc Offset= codebuf.code.Position Line=m.Line Column=m.Column EndLine=m.EndLine EndColumn=m.EndColumn } - + member codebuf.EmitByte x = codebuf.code.EmitIntAsByte x member codebuf.EmitUInt16 x = codebuf.code.EmitUInt16 x member codebuf.EmitInt32 x = codebuf.code.EmitInt32 x @@ -1494,51 +1513,51 @@ type CodeBuffer = member codebuf.EmitUncodedToken u = codebuf.EmitInt32 u - member codebuf.RecordReqdStringFixup stringIdx = + member codebuf.RecordReqdStringFixup stringIdx = codebuf.reqdStringFixupsInMethod <- (codebuf.code.Position, stringIdx) :: codebuf.reqdStringFixupsInMethod - // Write a special value in that we check later when applying the fixup + // Write a special value in that we check later when applying the fixup codebuf.EmitInt32 0xdeadbeef - member codebuf.RecordReqdBrFixups i tgs = + member codebuf.RecordReqdBrFixups i tgs = codebuf.reqdBrFixups <- (i, codebuf.code.Position, tgs) :: codebuf.reqdBrFixups - // Write a special value in that we check later when applying the fixup - // Value is 0x11 {deadbbbb}* where 11 is for the instruction and deadbbbb is for each target - codebuf.EmitByte 0x11 // for the instruction - (if fst i = i_switch then + // Write a special value in that we check later when applying the fixup + // Value is 0x11 {deadbbbb}* where 11 is for the instruction and deadbbbb is for each target + codebuf.EmitByte 0x11 // for the instruction + (if fst i = i_switch then codebuf.EmitInt32 tgs.Length) List.iter (fun _ -> codebuf.EmitInt32 0xdeadbbbb) tgs member codebuf.RecordReqdBrFixup i tg = codebuf.RecordReqdBrFixups i [tg] - member codebuf.RecordAvailBrFixup tg = + member codebuf.RecordAvailBrFixup tg = codebuf.availBrFixups.[tg] <- codebuf.code.Position -module Codebuf = - // -------------------------------------------------------------------- +module Codebuf = + // -------------------------------------------------------------------- // Applying branch fixups. Use short versions of instructions // wherever possible. Sadly we can only determine if we can use a short - // version after we've layed out the code for all other instructions. - // This in turn means that using a short version may change + // version after we've layed out the code for all other instructions. + // This in turn means that using a short version may change // the various offsets into the code. - // -------------------------------------------------------------------- + // -------------------------------------------------------------------- - let binaryChop p (arr: 'T[]) = + let binaryChop p (arr: 'T[]) = let rec go n m = if n > m then raise (KeyNotFoundException("binary chop did not find element")) - else + else let i = (n+m)/2 - let c = p arr.[i] + let c = p arr.[i] if c = 0 then i elif c < 0 then go n (i-1) else go (i+1) m go 0 (Array.length arr) - let applyBrFixups (origCode : byte[]) origExnClauses origReqdStringFixups (origAvailBrFixups: Dictionary) origReqdBrFixups origSeqPoints origScopes = + let applyBrFixups (origCode : byte[]) origExnClauses origReqdStringFixups (origAvailBrFixups: Dictionary) origReqdBrFixups origSeqPoints origScopes = let orderedOrigReqdBrFixups = origReqdBrFixups |> List.sortBy (fun (_, fixupLoc, _) -> fixupLoc) - let newCode = ByteBuffer.Create origCode.Length + use newCode = ByteBuffer.Create origCode.Length - // Copy over all the code, working out whether the branches will be short - // or long and adjusting the branch destinations. Record an adjust function to adjust all the other - // gumpf that refers to fixed offsets in the code stream. - let newCode, newReqdBrFixups, adjuster = + // Copy over all the code, working out whether the branches will be short + // or long and adjusting the branch destinations. Record an adjust function to adjust all the other + // gumpf that refers to fixed offsets in the code stream. + let newCode, newReqdBrFixups, adjuster = let remainingReqdFixups = ref orderedOrigReqdBrFixups let origWhere = ref 0 let newWhere = ref 0 @@ -1548,32 +1567,32 @@ module Codebuf = let adjustments = ref [] while (!remainingReqdFixups <> [] || not !doneLast) do - let doingLast = isNil !remainingReqdFixups + let doingLast = isNil !remainingReqdFixups let origStartOfNoBranchBlock = !origWhere let newStartOfNoBranchBlock = !newWhere - let origEndOfNoBranchBlock = + let origEndOfNoBranchBlock = if doingLast then origCode.Length - else + else let (_, origStartOfInstr, _) = List.head !remainingReqdFixups origStartOfInstr - // Copy over a chunk of non-branching code + // Copy over a chunk of non-branching code let nobranch_len = origEndOfNoBranchBlock - origStartOfNoBranchBlock newCode.EmitBytes origCode.[origStartOfNoBranchBlock..origStartOfNoBranchBlock+nobranch_len-1] - - // Record how to adjust addresses in this range, including the branch instruction - // we write below, or the end of the method if we're doing the last bblock + + // Record how to adjust addresses in this range, including the branch instruction + // we write below, or the end of the method if we're doing the last bblock adjustments := (origStartOfNoBranchBlock, origEndOfNoBranchBlock, newStartOfNoBranchBlock) :: !adjustments - - // Increment locations to the branch instruction we're really interested in + + // Increment locations to the branch instruction we're really interested in origWhere := origEndOfNoBranchBlock newWhere := !newWhere + nobranch_len - - // Now do the branch instruction. Decide whether the fixup will be short or long in the new code - if doingLast then + + // Now do the branch instruction. Decide whether the fixup will be short or long in the new code + if doingLast then doneLast := true - else + else let (i, origStartOfInstr, tgs: ILCodeLabel list) = List.head !remainingReqdFixups remainingReqdFixups := List.tail !remainingReqdFixups if origCode.[origStartOfInstr] <> 0x11uy then failwith "br fixup sanity check failed (1)" @@ -1583,17 +1602,17 @@ module Codebuf = let origEndOfInstr = origStartOfInstr + i_length + 4 * tgs.Length let newEndOfInstrIfSmall = !newWhere + i_length + 1 let newEndOfInstrIfBig = !newWhere + i_length + 4 * tgs.Length - - let short = - match i, tgs with - | (_, Some i_short), [tg] + + let short = + match i, tgs with + | (_, Some i_short), [tg] when - // Use the original offsets to compute if the branch is small or large. This is - // a safe approximation because code only gets smaller. + // Use the original offsets to compute if the branch is small or large. This is + // a safe approximation because code only gets smaller. (let origDest = match origAvailBrFixups.TryGetValue tg with | true, fixup -> fixup - | _ -> + | _ -> dprintn ("branch target " + formatCodeLabel tg + " not found in code") 666666 let origRelOffset = origDest - origEndOfInstr @@ -1603,77 +1622,77 @@ module Codebuf = true | (i_long, _), _ -> newCode.EmitIntAsByte i_long - (if i_long = i_switch then + (if i_long = i_switch then newCode.EmitInt32 tgs.Length) false - + newWhere := !newWhere + i_length if !newWhere <> newCode.Position then dprintn "mismatch between newWhere and newCode" tgs |> List.iter (fun tg -> let origFixupLoc = !origWhere checkFixup32 origCode origFixupLoc 0xdeadbbbb - - if short then + + if short then newReqdBrFixups := (!newWhere, newEndOfInstrIfSmall, tg, true) :: !newReqdBrFixups newCode.EmitIntAsByte 0x98 (* sanity check *) newWhere := !newWhere + 1 - else + else newReqdBrFixups := (!newWhere, newEndOfInstrIfBig, tg, false) :: !newReqdBrFixups newCode.EmitInt32 0xf00dd00f (* sanity check *) newWhere := !newWhere + 4 if !newWhere <> newCode.Position then dprintn "mismatch between newWhere and newCode" origWhere := !origWhere + 4) - + if !origWhere <> origEndOfInstr then dprintn "mismatch between origWhere and origEndOfInstr" - let adjuster = + let adjuster = let arr = Array.ofList (List.rev !adjustments) - fun addr -> - let i = - try binaryChop (fun (a1, a2, _) -> if addr < a1 then -1 elif addr > a2 then 1 else 0) arr - with - :? KeyNotFoundException -> + fun addr -> + let i = + try binaryChop (fun (a1, a2, _) -> if addr < a1 then -1 elif addr > a2 then 1 else 0) arr + with + :? KeyNotFoundException -> failwith ("adjuster: address "+string addr+" is out of range") let (origStartOfNoBranchBlock, _, newStartOfNoBranchBlock) = arr.[i] - addr - (origStartOfNoBranchBlock - newStartOfNoBranchBlock) + addr - (origStartOfNoBranchBlock - newStartOfNoBranchBlock) - newCode.Close(), - !newReqdBrFixups, + newCode.AsMemory().ToArray(), + !newReqdBrFixups, adjuster - // Now adjust everything - let newAvailBrFixups = - let tab = Dictionary<_, _>(10, HashIdentity.Structural) - for (KeyValue(tglab, origBrDest)) in origAvailBrFixups do + // Now adjust everything + let newAvailBrFixups = + let tab = Dictionary<_, _>(10, HashIdentity.Structural) + for (KeyValue(tglab, origBrDest)) in origAvailBrFixups do tab.[tglab] <- adjuster origBrDest tab let newReqdStringFixups = List.map (fun (origFixupLoc, stok) -> adjuster origFixupLoc, stok) origReqdStringFixups let newSeqPoints = Array.map (fun (sp: PdbSequencePoint) -> {sp with Offset=adjuster sp.Offset}) origSeqPoints - let newExnClauses = + let newExnClauses = origExnClauses |> List.map (fun (st1, sz1, st2, sz2, kind) -> - (adjuster st1, (adjuster (st1 + sz1) - adjuster st1), - adjuster st2, (adjuster (st2 + sz2) - adjuster st2), - (match kind with + (adjuster st1, (adjuster (st1 + sz1) - adjuster st1), + adjuster st2, (adjuster (st2 + sz2) - adjuster st2), + (match kind with | FinallyClause | FaultClause | TypeFilterClause _ -> kind | FilterClause n -> FilterClause (adjuster n)))) - + let newScopes = let rec remap scope = {scope with StartOffset = adjuster scope.StartOffset EndOffset = adjuster scope.EndOffset Children = Array.map remap scope.Children } List.map remap origScopes - - // Now apply the adjusted fixups in the new code + + // Now apply the adjusted fixups in the new code newReqdBrFixups |> List.iter (fun (newFixupLoc, endOfInstr, tg, small) -> match newAvailBrFixups.TryGetValue tg with | true, n -> let relOffset = n - endOfInstr - if small then + if small then if Bytes.get newCode newFixupLoc <> 0x98 then failwith "br fixup sanity check failed" newCode.[newFixupLoc] <- b0 relOffset - else + else checkFixup32 newCode newFixupLoc 0xf00dd00fl applyFixup32 newCode newFixupLoc relOffset | _ -> failwith ("target " + formatCodeLabel tg + " not found in new fixups")) @@ -1681,91 +1700,91 @@ module Codebuf = newCode, newReqdStringFixups, newExnClauses, newSeqPoints, newScopes - // -------------------------------------------------------------------- + // -------------------------------------------------------------------- // Structured residue of emitting instructions: SEH exception handling // and scopes for local variables. - // -------------------------------------------------------------------- + // -------------------------------------------------------------------- - // Emitting instructions generates a tree of seh specifications - // We then emit the exception handling specs separately. - // nb. ECMA spec says the SEH blocks must be returned inside-out - type SEHTree = + // Emitting instructions generates a tree of seh specifications + // We then emit the exception handling specs separately. + // nb. ECMA spec says the SEH blocks must be returned inside-out + type SEHTree = | Node of ExceptionClauseSpec option * SEHTree list - - // -------------------------------------------------------------------- + + // -------------------------------------------------------------------- // Table of encodings for instructions without arguments, also indexes // for all instructions. - // -------------------------------------------------------------------- + // -------------------------------------------------------------------- let encodingsForNoArgInstrs = Dictionary<_, _>(300, HashIdentity.Structural) - let _ = - List.iter + let _ = + List.iter (fun (x, mk) -> encodingsForNoArgInstrs.[mk] <- x) (noArgInstrs.Force()) let encodingsOfNoArgInstr si = encodingsForNoArgInstrs.[si] - // -------------------------------------------------------------------- + // -------------------------------------------------------------------- // Emit instructions - // -------------------------------------------------------------------- + // -------------------------------------------------------------------- /// Emit the code for an instruction - let emitInstrCode (codebuf: CodeBuffer) i = - if i > 0xFF then - assert (i >>> 8 = 0xFE) - codebuf.EmitByte ((i >>> 8) &&& 0xFF) - codebuf.EmitByte (i &&& 0xFF) - else + let emitInstrCode (codebuf: CodeBuffer) i = + if i > 0xFF then + assert (i >>> 8 = 0xFE) + codebuf.EmitByte ((i >>> 8) &&& 0xFF) + codebuf.EmitByte (i &&& 0xFF) + else codebuf.EmitByte i - let emitTypeInstr cenv codebuf env i ty = - emitInstrCode codebuf i + let emitTypeInstr cenv codebuf env i ty = + emitInstrCode codebuf i codebuf.EmitUncodedToken (getTypeDefOrRefAsUncodedToken (GetTypeAsTypeDefOrRef cenv env ty)) - let emitMethodSpecInfoInstr cenv codebuf env i mspecinfo = - emitInstrCode codebuf i + let emitMethodSpecInfoInstr cenv codebuf env i mspecinfo = + emitInstrCode codebuf i codebuf.EmitUncodedToken (GetMethodSpecInfoAsUncodedToken cenv env mspecinfo) - let emitMethodSpecInstr cenv codebuf env i mspec = - emitInstrCode codebuf i + let emitMethodSpecInstr cenv codebuf env i mspec = + emitInstrCode codebuf i codebuf.EmitUncodedToken (GetMethodSpecAsUncodedToken cenv env mspec) - let emitFieldSpecInstr cenv codebuf env i fspec = - emitInstrCode codebuf i + let emitFieldSpecInstr cenv codebuf env i fspec = + emitInstrCode codebuf i codebuf.EmitUncodedToken (GetFieldDefOrRefAsUncodedToken (GetFieldSpecAsFieldDefOrRef cenv env fspec)) - let emitShortUInt16Instr codebuf (i_short, i) x = + let emitShortUInt16Instr codebuf (i_short, i) x = let n = int32 x - if n <= 255 then - emitInstrCode codebuf i_short + if n <= 255 then + emitInstrCode codebuf i_short codebuf.EmitByte n - else - emitInstrCode codebuf i + else + emitInstrCode codebuf i codebuf.EmitUInt16 x - let emitShortInt32Instr codebuf (i_short, i) x = - if x >= (-128) && x <= 127 then - emitInstrCode codebuf i_short + let emitShortInt32Instr codebuf (i_short, i) x = + if x >= (-128) && x <= 127 then + emitInstrCode codebuf i_short codebuf.EmitByte (if x < 0x0 then x + 256 else x) - else - emitInstrCode codebuf i + else + emitInstrCode codebuf i codebuf.EmitInt32 x - let emitTailness (cenv: cenv) codebuf tl = + let emitTailness (cenv: cenv) codebuf tl = if tl = Tailcall && cenv.emitTailcalls then emitInstrCode codebuf i_tail //let emitAfterTailcall codebuf tl = // if tl = Tailcall then emitInstrCode codebuf i_ret - let emitVolatility codebuf tl = + let emitVolatility codebuf tl = if tl = Volatile then emitInstrCode codebuf i_volatile - let emitConstrained cenv codebuf env ty = + let emitConstrained cenv codebuf env ty = emitInstrCode codebuf i_constrained codebuf.EmitUncodedToken (getTypeDefOrRefAsUncodedToken (GetTypeAsTypeDefOrRef cenv env ty)) - let emitAlignment codebuf tl = - match tl with + let emitAlignment codebuf tl = + match tl with | Aligned -> () | Unaligned1 -> emitInstrCode codebuf i_unaligned; codebuf.EmitByte 0x1 | Unaligned2 -> emitInstrCode codebuf i_unaligned; codebuf.EmitByte 0x2 @@ -1775,203 +1794,203 @@ module Codebuf = match instr with | si when isNoArgInstr si -> emitInstrCode codebuf (encodingsOfNoArgInstr si) - | I_brcmp (cmp, tg1) -> + | I_brcmp (cmp, tg1) -> codebuf.RecordReqdBrFixup ((Lazy.force ILCmpInstrMap).[cmp], Some (Lazy.force ILCmpInstrRevMap).[cmp]) tg1 | I_br tg -> codebuf.RecordReqdBrFixup (i_br, Some i_br_s) tg | I_seqpoint s -> codebuf.EmitSeqPoint cenv s | I_leave tg -> codebuf.RecordReqdBrFixup (i_leave, Some i_leave_s) tg - | I_call (tl, mspec, varargs) -> + | I_call (tl, mspec, varargs) -> emitTailness cenv codebuf tl emitMethodSpecInstr cenv codebuf env i_call (mspec, varargs) //emitAfterTailcall codebuf tl - | I_callvirt (tl, mspec, varargs) -> + | I_callvirt (tl, mspec, varargs) -> emitTailness cenv codebuf tl emitMethodSpecInstr cenv codebuf env i_callvirt (mspec, varargs) //emitAfterTailcall codebuf tl - | I_callconstraint (tl, ty, mspec, varargs) -> + | I_callconstraint (tl, ty, mspec, varargs) -> emitTailness cenv codebuf tl emitConstrained cenv codebuf env ty emitMethodSpecInstr cenv codebuf env i_callvirt (mspec, varargs) //emitAfterTailcall codebuf tl - | I_newobj (mspec, varargs) -> + | I_newobj (mspec, varargs) -> emitMethodSpecInstr cenv codebuf env i_newobj (mspec, varargs) - | I_ldftn mspec -> + | I_ldftn mspec -> emitMethodSpecInstr cenv codebuf env i_ldftn (mspec, None) - | I_ldvirtftn mspec -> + | I_ldvirtftn mspec -> emitMethodSpecInstr cenv codebuf env i_ldvirtftn (mspec, None) - | I_calli (tl, callsig, varargs) -> + | I_calli (tl, callsig, varargs) -> emitTailness cenv codebuf tl - emitInstrCode codebuf i_calli + emitInstrCode codebuf i_calli codebuf.EmitUncodedToken (getUncodedToken TableNames.StandAloneSig (GetCallsigAsStandAloneSigIdx cenv env (callsig, varargs))) //emitAfterTailcall codebuf tl - | I_ldarg u16 -> emitShortUInt16Instr codebuf (i_ldarg_s, i_ldarg) u16 - | I_starg u16 -> emitShortUInt16Instr codebuf (i_starg_s, i_starg) u16 - | I_ldarga u16 -> emitShortUInt16Instr codebuf (i_ldarga_s, i_ldarga) u16 - | I_ldloc u16 -> emitShortUInt16Instr codebuf (i_ldloc_s, i_ldloc) u16 - | I_stloc u16 -> emitShortUInt16Instr codebuf (i_stloc_s, i_stloc) u16 - | I_ldloca u16 -> emitShortUInt16Instr codebuf (i_ldloca_s, i_ldloca) u16 + | I_ldarg u16 -> emitShortUInt16Instr codebuf (i_ldarg_s, i_ldarg) u16 + | I_starg u16 -> emitShortUInt16Instr codebuf (i_starg_s, i_starg) u16 + | I_ldarga u16 -> emitShortUInt16Instr codebuf (i_ldarga_s, i_ldarga) u16 + | I_ldloc u16 -> emitShortUInt16Instr codebuf (i_ldloc_s, i_ldloc) u16 + | I_stloc u16 -> emitShortUInt16Instr codebuf (i_stloc_s, i_stloc) u16 + | I_ldloca u16 -> emitShortUInt16Instr codebuf (i_ldloca_s, i_ldloca) u16 - | I_cpblk (al, vol) -> - emitAlignment codebuf al + | I_cpblk (al, vol) -> + emitAlignment codebuf al emitVolatility codebuf vol emitInstrCode codebuf i_cpblk - | I_initblk (al, vol) -> - emitAlignment codebuf al + | I_initblk (al, vol) -> + emitAlignment codebuf al emitVolatility codebuf vol emitInstrCode codebuf i_initblk - | (AI_ldc (DT_I4, ILConst.I4 x)) -> + | (AI_ldc (DT_I4, ILConst.I4 x)) -> emitShortInt32Instr codebuf (i_ldc_i4_s, i_ldc_i4) x - | (AI_ldc (DT_I8, ILConst.I8 x)) -> - emitInstrCode codebuf i_ldc_i8 + | (AI_ldc (DT_I8, ILConst.I8 x)) -> + emitInstrCode codebuf i_ldc_i8 codebuf.EmitInt64 x - | (AI_ldc (_, ILConst.R4 x)) -> - emitInstrCode codebuf i_ldc_r4 + | (AI_ldc (_, ILConst.R4 x)) -> + emitInstrCode codebuf i_ldc_r4 codebuf.EmitInt32 (bitsOfSingle x) - | (AI_ldc (_, ILConst.R8 x)) -> - emitInstrCode codebuf i_ldc_r8 + | (AI_ldc (_, ILConst.R8 x)) -> + emitInstrCode codebuf i_ldc_r8 codebuf.EmitInt64 (bitsOfDouble x) - | I_ldind (al, vol, dt) -> - emitAlignment codebuf al + | I_ldind (al, vol, dt) -> + emitAlignment codebuf al emitVolatility codebuf vol - emitInstrCode codebuf - (match dt with + emitInstrCode codebuf + (match dt with | DT_I -> i_ldind_i - | DT_I1 -> i_ldind_i1 - | DT_I2 -> i_ldind_i2 - | DT_I4 -> i_ldind_i4 - | DT_U1 -> i_ldind_u1 - | DT_U2 -> i_ldind_u2 - | DT_U4 -> i_ldind_u4 - | DT_I8 -> i_ldind_i8 - | DT_R4 -> i_ldind_r4 - | DT_R8 -> i_ldind_r8 + | DT_I1 -> i_ldind_i1 + | DT_I2 -> i_ldind_i2 + | DT_I4 -> i_ldind_i4 + | DT_U1 -> i_ldind_u1 + | DT_U2 -> i_ldind_u2 + | DT_U4 -> i_ldind_u4 + | DT_I8 -> i_ldind_i8 + | DT_R4 -> i_ldind_r4 + | DT_R8 -> i_ldind_r8 | DT_REF -> i_ldind_ref | _ -> failwith "ldind") - | I_stelem dt -> - emitInstrCode codebuf - (match dt with + | I_stelem dt -> + emitInstrCode codebuf + (match dt with | DT_I | DT_U -> i_stelem_i - | DT_U1 | DT_I1 -> i_stelem_i1 - | DT_I2 | DT_U2 -> i_stelem_i2 - | DT_I4 | DT_U4 -> i_stelem_i4 - | DT_I8 | DT_U8 -> i_stelem_i8 - | DT_R4 -> i_stelem_r4 - | DT_R8 -> i_stelem_r8 + | DT_U1 | DT_I1 -> i_stelem_i1 + | DT_I2 | DT_U2 -> i_stelem_i2 + | DT_I4 | DT_U4 -> i_stelem_i4 + | DT_I8 | DT_U8 -> i_stelem_i8 + | DT_R4 -> i_stelem_r4 + | DT_R8 -> i_stelem_r8 | DT_REF -> i_stelem_ref | _ -> failwith "stelem") - | I_ldelem dt -> - emitInstrCode codebuf - (match dt with + | I_ldelem dt -> + emitInstrCode codebuf + (match dt with | DT_I -> i_ldelem_i - | DT_I1 -> i_ldelem_i1 - | DT_I2 -> i_ldelem_i2 - | DT_I4 -> i_ldelem_i4 - | DT_I8 -> i_ldelem_i8 - | DT_U1 -> i_ldelem_u1 - | DT_U2 -> i_ldelem_u2 - | DT_U4 -> i_ldelem_u4 - | DT_R4 -> i_ldelem_r4 - | DT_R8 -> i_ldelem_r8 + | DT_I1 -> i_ldelem_i1 + | DT_I2 -> i_ldelem_i2 + | DT_I4 -> i_ldelem_i4 + | DT_I8 -> i_ldelem_i8 + | DT_U1 -> i_ldelem_u1 + | DT_U2 -> i_ldelem_u2 + | DT_U4 -> i_ldelem_u4 + | DT_R4 -> i_ldelem_r4 + | DT_R8 -> i_ldelem_r8 | DT_REF -> i_ldelem_ref | _ -> failwith "ldelem") - | I_stind (al, vol, dt) -> - emitAlignment codebuf al + | I_stind (al, vol, dt) -> + emitAlignment codebuf al emitVolatility codebuf vol - emitInstrCode codebuf - (match dt with + emitInstrCode codebuf + (match dt with | DT_U | DT_I -> i_stind_i - | DT_U1 | DT_I1 -> i_stind_i1 - | DT_U2 | DT_I2 -> i_stind_i2 - | DT_U4 | DT_I4 -> i_stind_i4 - | DT_U8 | DT_I8 -> i_stind_i8 - | DT_R4 -> i_stind_r4 - | DT_R8 -> i_stind_r8 + | DT_U1 | DT_I1 -> i_stind_i1 + | DT_U2 | DT_I2 -> i_stind_i2 + | DT_U4 | DT_I4 -> i_stind_i4 + | DT_U8 | DT_I8 -> i_stind_i8 + | DT_R4 -> i_stind_r4 + | DT_R8 -> i_stind_r8 | DT_REF -> i_stind_ref | _ -> failwith "stelem") | I_switch labs -> codebuf.RecordReqdBrFixups (i_switch, None) labs - | I_ldfld (al, vol, fspec) -> - emitAlignment codebuf al + | I_ldfld (al, vol, fspec) -> + emitAlignment codebuf al emitVolatility codebuf vol emitFieldSpecInstr cenv codebuf env i_ldfld fspec - | I_ldflda fspec -> + | I_ldflda fspec -> emitFieldSpecInstr cenv codebuf env i_ldflda fspec - | I_ldsfld (vol, fspec) -> + | I_ldsfld (vol, fspec) -> emitVolatility codebuf vol emitFieldSpecInstr cenv codebuf env i_ldsfld fspec - | I_ldsflda fspec -> + | I_ldsflda fspec -> emitFieldSpecInstr cenv codebuf env i_ldsflda fspec - | I_stfld (al, vol, fspec) -> - emitAlignment codebuf al + | I_stfld (al, vol, fspec) -> + emitAlignment codebuf al emitVolatility codebuf vol emitFieldSpecInstr cenv codebuf env i_stfld fspec - | I_stsfld (vol, fspec) -> + | I_stsfld (vol, fspec) -> emitVolatility codebuf vol emitFieldSpecInstr cenv codebuf env i_stsfld fspec - | I_ldtoken tok -> + | I_ldtoken tok -> emitInstrCode codebuf i_ldtoken - codebuf.EmitUncodedToken - (match tok with - | ILToken.ILType ty -> - match GetTypeAsTypeDefOrRef cenv env ty with + codebuf.EmitUncodedToken + (match tok with + | ILToken.ILType ty -> + match GetTypeAsTypeDefOrRef cenv env ty with | (tag, idx) when tag = tdor_TypeDef -> getUncodedToken TableNames.TypeDef idx | (tag, idx) when tag = tdor_TypeRef -> getUncodedToken TableNames.TypeRef idx | (tag, idx) when tag = tdor_TypeSpec -> getUncodedToken TableNames.TypeSpec idx | _ -> failwith "?" | ILToken.ILMethod mspec -> - match GetMethodSpecAsMethodDefOrRef cenv env (mspec, None) with + match GetMethodSpecAsMethodDefOrRef cenv env (mspec, None) with | (tag, idx) when tag = mdor_MethodDef -> getUncodedToken TableNames.Method idx | (tag, idx) when tag = mdor_MemberRef -> getUncodedToken TableNames.MemberRef idx | _ -> failwith "?" | ILToken.ILField fspec -> - match GetFieldSpecAsFieldDefOrRef cenv env fspec with + match GetFieldSpecAsFieldDefOrRef cenv env fspec with | (true, idx) -> getUncodedToken TableNames.Field idx | (false, idx) -> getUncodedToken TableNames.MemberRef idx) - | I_ldstr s -> + | I_ldstr s -> emitInstrCode codebuf i_ldstr codebuf.RecordReqdStringFixup (GetUserStringHeapIdx cenv s) | I_box ty -> emitTypeInstr cenv codebuf env i_box ty | I_unbox ty -> emitTypeInstr cenv codebuf env i_unbox ty - | I_unbox_any ty -> emitTypeInstr cenv codebuf env i_unbox_any ty + | I_unbox_any ty -> emitTypeInstr cenv codebuf env i_unbox_any ty - | I_newarr (shape, ty) -> - if (shape = ILArrayShape.SingleDimensional) then + | I_newarr (shape, ty) -> + if (shape = ILArrayShape.SingleDimensional) then emitTypeInstr cenv codebuf env i_newarr ty else let args = List.init shape.Rank (fun _ -> cenv.ilg.typ_Int32) emitMethodSpecInfoInstr cenv codebuf env i_newobj (".ctor", mkILArrTy(ty, shape), ILCallingConv.Instance, args, ILType.Void, None, []) - | I_stelem_any (shape, ty) -> - if (shape = ILArrayShape.SingleDimensional) then - emitTypeInstr cenv codebuf env i_stelem_any ty - else + | I_stelem_any (shape, ty) -> + if (shape = ILArrayShape.SingleDimensional) then + emitTypeInstr cenv codebuf env i_stelem_any ty + else let args = List.init (shape.Rank+1) (fun i -> if i < shape.Rank then cenv.ilg.typ_Int32 else ty) emitMethodSpecInfoInstr cenv codebuf env i_call ("Set", mkILArrTy(ty, shape), ILCallingConv.Instance, args, ILType.Void, None, []) - | I_ldelem_any (shape, ty) -> - if (shape = ILArrayShape.SingleDimensional) then - emitTypeInstr cenv codebuf env i_ldelem_any ty - else + | I_ldelem_any (shape, ty) -> + if (shape = ILArrayShape.SingleDimensional) then + emitTypeInstr cenv codebuf env i_ldelem_any ty + else let args = List.init shape.Rank (fun _ -> cenv.ilg.typ_Int32) emitMethodSpecInfoInstr cenv codebuf env i_call ("Get", mkILArrTy(ty, shape), ILCallingConv.Instance, args, ty, None, []) - | I_ldelema (ro, _isNativePtr, shape, ty) -> + | I_ldelema (ro, _isNativePtr, shape, ty) -> if (ro = ReadonlyAddress) then emitInstrCode codebuf i_readonly - if (shape = ILArrayShape.SingleDimensional) then + if (shape = ILArrayShape.SingleDimensional) then emitTypeInstr cenv codebuf env i_ldelema ty - else + else let args = List.init shape.Rank (fun _ -> cenv.ilg.typ_Int32) emitMethodSpecInfoInstr cenv codebuf env i_call ("Address", mkILArrTy(ty, shape), ILCallingConv.Instance, args, ILType.Byref ty, None, []) @@ -1980,24 +1999,24 @@ module Codebuf = | I_refanyval ty -> emitTypeInstr cenv codebuf env i_refanyval ty | I_mkrefany ty -> emitTypeInstr cenv codebuf env i_mkrefany ty | I_initobj ty -> emitTypeInstr cenv codebuf env i_initobj ty - | I_ldobj (al, vol, ty) -> - emitAlignment codebuf al + | I_ldobj (al, vol, ty) -> + emitAlignment codebuf al emitVolatility codebuf vol emitTypeInstr cenv codebuf env i_ldobj ty - | I_stobj (al, vol, ty) -> - emitAlignment codebuf al + | I_stobj (al, vol, ty) -> + emitAlignment codebuf al emitVolatility codebuf vol emitTypeInstr cenv codebuf env i_stobj ty | I_cpobj ty -> emitTypeInstr cenv codebuf env i_cpobj ty | I_sizeof ty -> emitTypeInstr cenv codebuf env i_sizeof ty - | EI_ldlen_multi (_, m) -> + | EI_ldlen_multi (_, m) -> emitShortInt32Instr codebuf (i_ldc_i4_s, i_ldc_i4) m emitInstr cenv codebuf env (mkNormalCall(mkILNonGenericMethSpecInTy(cenv.ilg.typ_Array, ILCallingConv.Instance, "GetLength", [(cenv.ilg.typ_Int32)], (cenv.ilg.typ_Int32)))) | _ -> failwith "an IL instruction cannot be emitted" - let mkScopeNode cenv (localSigs: _[]) (startOffset, endOffset, ls: ILLocalDebugMapping list, childScopes) = + let mkScopeNode cenv (localSigs: _[]) (startOffset, endOffset, ls: ILLocalDebugMapping list, childScopes) = if isNil ls || not cenv.generatePdb then childScopes else [ { Children= Array.ofList childScopes @@ -2005,107 +2024,107 @@ module Codebuf = EndOffset=endOffset Locals= ls |> List.filter (fun v -> v.LocalName <> "") - |> List.map (fun x -> + |> List.map (fun x -> { Name=x.LocalName Signature= (try localSigs.[x.LocalIndex] with _ -> failwith ("local variable index "+string x.LocalIndex+"in debug info does not reference a valid local")) - Index= x.LocalIndex } ) + Index= x.LocalIndex } ) |> Array.ofList } ] - + // Used to put local debug scopes and exception handlers into a tree form let rangeInsideRange (start_pc1, end_pc1) (start_pc2, end_pc2) = (start_pc1: int) >= start_pc2 && start_pc1 < end_pc2 && - (end_pc1: int) > start_pc2 && end_pc1 <= end_pc2 + (end_pc1: int) > start_pc2 && end_pc1 <= end_pc2 - let lranges_of_clause cl = - match cl with + let lranges_of_clause cl = + match cl with | ILExceptionClause.Finally r1 -> [r1] | ILExceptionClause.Fault r1 -> [r1] | ILExceptionClause.FilterCatch (r1, r2) -> [r1;r2] - | ILExceptionClause.TypeCatch (_ty, r1) -> [r1] + | ILExceptionClause.TypeCatch (_ty, r1) -> [r1] let labelsToRange (lab2pc : Dictionary) p = let (l1, l2) = p in lab2pc.[l1], lab2pc.[l2] - let labelRangeInsideLabelRange lab2pc ls1 ls2 = - rangeInsideRange (labelsToRange lab2pc ls1) (labelsToRange lab2pc ls2) + let labelRangeInsideLabelRange lab2pc ls1 ls2 = + rangeInsideRange (labelsToRange lab2pc ls1) (labelsToRange lab2pc ls2) - let findRoots contains vs = + let findRoots contains vs = // For each item, either make it a root or make it a child of an existing root - let addToRoot roots x = + let addToRoot roots x = // Look to see if 'x' is inside one of the roots - let roots, found = - (false, roots) ||> List.mapFold (fun found (r, children) -> + let roots, found = + (false, roots) ||> List.mapFold (fun found (r, children) -> if found then ((r, children), true) - elif contains x r then ((r, x :: children), true) + elif contains x r then ((r, x :: children), true) else ((r, children), false)) - if found then roots - else + if found then roots + else // Find the ones that 'x' encompasses and collapse them let yes, others = roots |> List.partition (fun (r, _) -> contains r x) (x, yes |> List.collect (fun (r, ch) -> r :: ch)) :: others - + ([], vs) ||> List.fold addToRoot - let rec makeSEHTree cenv env (pc2pos: int[]) (lab2pc : Dictionary) (exs : ILExceptionSpec list) = + let rec makeSEHTree cenv env (pc2pos: int[]) (lab2pc : Dictionary) (exs : ILExceptionSpec list) = let clause_inside_lrange cl lr = - List.forall (fun lr1 -> labelRangeInsideLabelRange lab2pc lr1 lr) (lranges_of_clause cl) + List.forall (fun lr1 -> labelRangeInsideLabelRange lab2pc lr1 lr) (lranges_of_clause cl) let tryspec_inside_lrange (tryspec1: ILExceptionSpec) lr = - (labelRangeInsideLabelRange lab2pc tryspec1.Range lr && clause_inside_lrange tryspec1.Clause lr) + (labelRangeInsideLabelRange lab2pc tryspec1.Range lr && clause_inside_lrange tryspec1.Clause lr) let tryspec_inside_clause tryspec1 cl = - List.exists (fun lr -> tryspec_inside_lrange tryspec1 lr) (lranges_of_clause cl) + List.exists (fun lr -> tryspec_inside_lrange tryspec1 lr) (lranges_of_clause cl) let tryspec_inside_tryspec tryspec1 (tryspec2: ILExceptionSpec) = tryspec_inside_lrange tryspec1 tryspec2.Range || tryspec_inside_clause tryspec1 tryspec2.Clause let roots = findRoots tryspec_inside_tryspec exs - let trees = - roots |> List.map (fun (cl, ch) -> + let trees = + roots |> List.map (fun (cl, ch) -> let r1 = labelsToRange lab2pc cl.Range let conv ((s1, e1), (s2, e2)) x = pc2pos.[s1], pc2pos.[e1] - pc2pos.[s1], pc2pos.[s2], pc2pos.[e2] - pc2pos.[s2], x let children = makeSEHTree cenv env pc2pos lab2pc ch - let n = - match cl.Clause with - | ILExceptionClause.Finally r2 -> + let n = + match cl.Clause with + | ILExceptionClause.Finally r2 -> conv (r1, labelsToRange lab2pc r2) ExceptionClauseKind.FinallyClause - | ILExceptionClause.Fault r2 -> + | ILExceptionClause.Fault r2 -> conv (r1, labelsToRange lab2pc r2) ExceptionClauseKind.FaultClause - | ILExceptionClause.FilterCatch ((filterStart, _), r3) -> + | ILExceptionClause.FilterCatch ((filterStart, _), r3) -> conv (r1, labelsToRange lab2pc r3) (ExceptionClauseKind.FilterClause (pc2pos.[lab2pc.[filterStart]])) - | ILExceptionClause.TypeCatch (ty, r2) -> + | ILExceptionClause.TypeCatch (ty, r2) -> conv (r1, labelsToRange lab2pc r2) (TypeFilterClause (getTypeDefOrRefAsUncodedToken (GetTypeAsTypeDefOrRef cenv env ty))) SEHTree.Node (Some n, children) ) - trees + trees - let rec makeLocalsTree cenv localSigs (pc2pos: int[]) (lab2pc : Dictionary) (exs : ILLocalDebugInfo list) = + let rec makeLocalsTree cenv localSigs (pc2pos: int[]) (lab2pc : Dictionary) (exs : ILLocalDebugInfo list) = let localInsideLocal (locspec1: ILLocalDebugInfo) (locspec2: ILLocalDebugInfo) = - labelRangeInsideLabelRange lab2pc locspec1.Range locspec2.Range + labelRangeInsideLabelRange lab2pc locspec1.Range locspec2.Range let roots = findRoots localInsideLocal exs - let trees = - roots |> List.collect (fun (cl, ch) -> + let trees = + roots |> List.collect (fun (cl, ch) -> let (s1, e1) = labelsToRange lab2pc cl.Range let (s1, e1) = pc2pos.[s1], pc2pos.[e1] let children = makeLocalsTree cenv localSigs pc2pos lab2pc ch mkScopeNode cenv localSigs (s1, e1, cl.DebugMappings, children)) - trees + trees - // Emit the SEH tree - let rec emitExceptionHandlerTree (codebuf: CodeBuffer) (Node (x, childSEH)) = - List.iter (emitExceptionHandlerTree codebuf) childSEH // internal first - x |> Option.iter codebuf.EmitExceptionClause + // Emit the SEH tree + let rec emitExceptionHandlerTree (codebuf: CodeBuffer) (Node (x, childSEH)) = + List.iter (emitExceptionHandlerTree codebuf) childSEH // internal first + x |> Option.iter codebuf.EmitExceptionClause - let emitCode cenv localSigs (codebuf: CodeBuffer) env (code: ILCode) = + let emitCode cenv localSigs (codebuf: CodeBuffer) env (code: ILCode) = let instrs = code.Instrs - + // Build a table mapping Abstract IL pcs to positions in the generated code buffer let pc2pos = Array.zeroCreate (instrs.Length+1) let pc2labs = Dictionary() @@ -2123,8 +2142,8 @@ module Codebuf = codebuf.RecordAvailBrFixup lab | _ -> () pc2pos.[pc] <- codebuf.code.Position - if pc < instrs.Length then - match instrs.[pc] with + if pc < instrs.Length then + match instrs.[pc] with | I_br l when code.Labels.[l] = pc + 1 -> () // compress I_br to next instruction | i -> emitInstr cenv codebuf env i @@ -2136,20 +2155,20 @@ module Codebuf = let localsTree = makeLocalsTree cenv localSigs pc2pos code.Labels code.Locals localsTree - let EmitTopCode cenv localSigs env nm code = - let codebuf = CodeBuffer.Create nm + let EmitTopCode cenv localSigs env nm code = + use codebuf = CodeBuffer.Create nm let origScopes = emitCode cenv localSigs codebuf env code - let origCode = codebuf.code.Close() + let origCode = codebuf.code.AsMemory().ToArray() let origExnClauses = List.rev codebuf.seh let origReqdStringFixups = codebuf.reqdStringFixupsInMethod let origAvailBrFixups = codebuf.availBrFixups let origReqdBrFixups = codebuf.reqdBrFixups let origSeqPoints = codebuf.seqpoints.ToArray() - let newCode, newReqdStringFixups, newExnClauses, newSeqPoints, newScopes = + let newCode, newReqdStringFixups, newExnClauses, newSeqPoints, newScopes = applyBrFixups origCode origExnClauses origReqdStringFixups origAvailBrFixups origReqdBrFixups origSeqPoints origScopes - let rootScope = + let rootScope = { Children= Array.ofList newScopes StartOffset=0 EndOffset=newCode.Length @@ -2157,101 +2176,101 @@ module Codebuf = (newReqdStringFixups, newExnClauses, newCode, newSeqPoints, rootScope) -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // ILMethodBody --> bytes -// -------------------------------------------------------------------- -let GetFieldDefTypeAsBlobIdx cenv env ty = - let bytes = emitBytesViaBuffer (fun bb -> bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_FIELD +// -------------------------------------------------------------------- +let GetFieldDefTypeAsBlobIdx cenv env ty = + let bytes = emitBytesViaBuffer (fun bb -> bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_FIELD EmitType cenv env bb ty) GetBytesAsBlobIdx cenv bytes let GenILMethodBody mname cenv env (il: ILMethodBody) = - let localSigs = - if cenv.generatePdb then - il.Locals |> List.toArray |> Array.map (fun l -> + let localSigs = + if cenv.generatePdb then + il.Locals |> List.toArray |> Array.map (fun l -> // Write a fake entry for the local signature headed by e_IMAGE_CEE_CS_CALLCONV_FIELD. This is referenced by the PDB file ignore (FindOrAddSharedRow cenv TableNames.StandAloneSig (SharedRow [| Blob (GetFieldDefTypeAsBlobIdx cenv env l.Type) |])) // Now write the type - GetTypeOfLocalAsBytes cenv env l) - else + GetTypeOfLocalAsBytes cenv env l) + else [| |] let requiredStringFixups, seh, code, seqpoints, scopes = Codebuf.EmitTopCode cenv localSigs env mname il.Code let codeSize = code.Length - let methbuf = ByteBuffer.Create (codeSize * 3) - // Do we use the tiny format? + use methbuf = ByteBuffer.Create (codeSize * 3) + // Do we use the tiny format? if isNil il.Locals && il.MaxStack <= 8 && isNil seh && codeSize < 64 then - // Use Tiny format + // Use Tiny format let alignedCodeSize = align 4 (codeSize + 1) let codePadding = (alignedCodeSize - (codeSize + 1)) let requiredStringFixups' = (1, requiredStringFixups) methbuf.EmitByte (byte codeSize <<< 2 ||| e_CorILMethod_TinyFormat) methbuf.EmitBytes code methbuf.EmitPadding codePadding - 0x0, (requiredStringFixups', methbuf.Close()), seqpoints, scopes + 0x0, (requiredStringFixups', methbuf.AsMemory().ToArray()), seqpoints, scopes else - // Use Fat format - let flags = + // Use Fat format + let flags = e_CorILMethod_FatFormat ||| - (if seh <> [] then e_CorILMethod_MoreSects else 0x0uy) ||| + (if seh <> [] then e_CorILMethod_MoreSects else 0x0uy) ||| (if il.IsZeroInit then e_CorILMethod_InitLocals else 0x0uy) - let localToken = - if isNil il.Locals then 0x0 else + let localToken = + if isNil il.Locals then 0x0 else getUncodedToken TableNames.StandAloneSig (FindOrAddSharedRow cenv TableNames.StandAloneSig (GetLocalSigAsStandAloneSigIdx cenv env il.Locals)) let alignedCodeSize = align 0x4 codeSize let codePadding = (alignedCodeSize - codeSize) - - methbuf.EmitByte flags - methbuf.EmitByte 0x30uy // last four bits record size of fat header in 4 byte chunks - this is always 12 bytes = 3 four word chunks + + methbuf.EmitByte flags + methbuf.EmitByte 0x30uy // last four bits record size of fat header in 4 byte chunks - this is always 12 bytes = 3 four word chunks methbuf.EmitUInt16 (uint16 il.MaxStack) methbuf.EmitInt32 codeSize methbuf.EmitInt32 localToken methbuf.EmitBytes code methbuf.EmitPadding codePadding - if not (isNil seh) then - // Can we use the small exception handling table format? + if not (isNil seh) then + // Can we use the small exception handling table format? let smallSize = (seh.Length * 12 + 4) - let canUseSmall = + let canUseSmall = smallSize <= 0xFF && - seh |> List.forall (fun (st1, sz1, st2, sz2, _) -> - st1 <= 0xFFFF && st2 <= 0xFFFF && sz1 <= 0xFF && sz2 <= 0xFF) - - let kindAsInt32 k = - match k with + seh |> List.forall (fun (st1, sz1, st2, sz2, _) -> + st1 <= 0xFFFF && st2 <= 0xFFFF && sz1 <= 0xFF && sz2 <= 0xFF) + + let kindAsInt32 k = + match k with | FinallyClause -> e_COR_ILEXCEPTION_CLAUSE_FINALLY | FaultClause -> e_COR_ILEXCEPTION_CLAUSE_FAULT | FilterClause _ -> e_COR_ILEXCEPTION_CLAUSE_FILTER | TypeFilterClause _ -> e_COR_ILEXCEPTION_CLAUSE_EXCEPTION - let kindAsExtraInt32 k = - match k with + let kindAsExtraInt32 k = + match k with | FinallyClause | FaultClause -> 0x0 | FilterClause i -> i | TypeFilterClause uncoded -> uncoded - - if canUseSmall then + + if canUseSmall then methbuf.EmitByte e_CorILMethod_Sect_EHTable - methbuf.EmitByte (b0 smallSize) - methbuf.EmitByte 0x00uy + methbuf.EmitByte (b0 smallSize) + methbuf.EmitByte 0x00uy methbuf.EmitByte 0x00uy - seh |> List.iter (fun (st1, sz1, st2, sz2, kind) -> + seh |> List.iter (fun (st1, sz1, st2, sz2, kind) -> let k32 = kindAsInt32 kind - methbuf.EmitInt32AsUInt16 k32 - methbuf.EmitInt32AsUInt16 st1 - methbuf.EmitByte (b0 sz1) - methbuf.EmitInt32AsUInt16 st2 + methbuf.EmitInt32AsUInt16 k32 + methbuf.EmitInt32AsUInt16 st1 + methbuf.EmitByte (b0 sz1) + methbuf.EmitInt32AsUInt16 st2 methbuf.EmitByte (b0 sz2) methbuf.EmitInt32 (kindAsExtraInt32 kind)) - else + else let bigSize = (seh.Length * 24 + 4) methbuf.EmitByte (e_CorILMethod_Sect_EHTable ||| e_CorILMethod_Sect_FatFormat) methbuf.EmitByte (b0 bigSize) methbuf.EmitByte (b1 bigSize) methbuf.EmitByte (b2 bigSize) - seh |> List.iter (fun (st1, sz1, st2, sz2, kind) -> + seh |> List.iter (fun (st1, sz1, st2, sz2, kind) -> let k32 = kindAsInt32 kind methbuf.EmitInt32 k32 methbuf.EmitInt32 st1 @@ -2259,66 +2278,66 @@ let GenILMethodBody mname cenv env (il: ILMethodBody) = methbuf.EmitInt32 st2 methbuf.EmitInt32 sz2 methbuf.EmitInt32 (kindAsExtraInt32 kind)) - + let requiredStringFixups' = (12, requiredStringFixups) - localToken, (requiredStringFixups', methbuf.Close()), seqpoints, scopes + localToken, (requiredStringFixups', methbuf.AsMemory().ToArray()), seqpoints, scopes -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // ILFieldDef --> FieldDef Row -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GetFieldDefAsFieldDefRow cenv env (fd: ILFieldDef) = +let rec GetFieldDefAsFieldDefRow cenv env (fd: ILFieldDef) = let flags = int fd.Attributes - UnsharedRow - [| UShort (uint16 flags) + UnsharedRow + [| UShort (uint16 flags) StringE (GetStringHeapIdx cenv fd.Name) Blob (GetFieldDefSigAsBlobIdx cenv env fd ) |] and GetFieldDefSigAsBlobIdx cenv env fd = GetFieldDefTypeAsBlobIdx cenv env fd.FieldType -and GenFieldDefPass3 cenv env fd = +and GenFieldDefPass3 cenv env fd = let fidx = AddUnsharedRow cenv TableNames.Field (GetFieldDefAsFieldDefRow cenv env fd) GenCustomAttrsPass3Or4 cenv (hca_FieldDef, fidx) fd.CustomAttrs - // Write FieldRVA table - fixups into data section done later - match fd.Data with - | None -> () - | Some b -> + // Write FieldRVA table - fixups into data section done later + match fd.Data with + | None -> () + | Some b -> let offs = cenv.data.Position cenv.data.EmitBytes b - AddUnsharedRow cenv TableNames.FieldRVA + AddUnsharedRow cenv TableNames.FieldRVA (UnsharedRow [| Data (offs, false); SimpleIndex (TableNames.Field, fidx) |]) |> ignore - // Write FieldMarshal table - match fd.Marshal with + // Write FieldMarshal table + match fd.Marshal with | None -> () - | Some ntyp -> - AddUnsharedRow cenv TableNames.FieldMarshal + | Some ntyp -> + AddUnsharedRow cenv TableNames.FieldMarshal (UnsharedRow [| HasFieldMarshal (hfm_FieldDef, fidx) Blob (GetNativeTypeAsBlobIdx cenv ntyp) |]) |> ignore - // Write Content table - match fd.LiteralValue with + // Write Content table + match fd.LiteralValue with | None -> () - | Some i -> - AddUnsharedRow cenv TableNames.Constant - (UnsharedRow + | Some i -> + AddUnsharedRow cenv TableNames.Constant + (UnsharedRow [| GetFieldInitFlags i HasConstant (hc_FieldDef, fidx) Blob (GetFieldInitAsBlobIdx cenv i) |]) |> ignore - // Write FieldLayout table - match fd.Offset with + // Write FieldLayout table + match fd.Offset with | None -> () - | Some offset -> - AddUnsharedRow cenv TableNames.FieldLayout + | Some offset -> + AddUnsharedRow cenv TableNames.FieldLayout (UnsharedRow [| ULong offset; SimpleIndex (TableNames.Field, fidx) |]) |> ignore - -// -------------------------------------------------------------------- + +// -------------------------------------------------------------------- // ILGenericParameterDef --> GenericParam Row -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GetGenericParamAsGenericParamRow cenv _env idx owner gp = - let flags = - (match gp.Variance with +let rec GetGenericParamAsGenericParamRow cenv _env idx owner gp = + let flags = + (match gp.Variance with | NonVariant -> 0x0000 | CoVariant -> 0x0001 | ContraVariant -> 0x0002) ||| @@ -2327,145 +2346,146 @@ let rec GetGenericParamAsGenericParamRow cenv _env idx owner gp = (if gp.HasDefaultConstructorConstraint then 0x0010 else 0x0000) let mdVersionMajor, _ = metadataSchemaVersionSupportedByCLRVersion cenv.desiredMetadataVersion - if (mdVersionMajor = 1) then - SharedRow - [| UShort (uint16 idx) - UShort (uint16 flags) + if (mdVersionMajor = 1) then + SharedRow + [| UShort (uint16 idx) + UShort (uint16 flags) TypeOrMethodDef (fst owner, snd owner) StringE (GetStringHeapIdx cenv gp.Name) TypeDefOrRefOrSpec (tdor_TypeDef, 0) (* empty kind field in deprecated metadata *) |] else - SharedRow - [| UShort (uint16 idx) - UShort (uint16 flags) + SharedRow + [| UShort (uint16 idx) + UShort (uint16 flags) TypeOrMethodDef (fst owner, snd owner) StringE (GetStringHeapIdx cenv gp.Name) |] -and GenTypeAsGenericParamConstraintRow cenv env gpidx ty = +and GenTypeAsGenericParamConstraintRow cenv env gpidx ty = let tdorTag, tdorRow = GetTypeAsTypeDefOrRef cenv env ty - UnsharedRow + UnsharedRow [| SimpleIndex (TableNames.GenericParam, gpidx) TypeDefOrRefOrSpec (tdorTag, tdorRow) |] and GenGenericParamConstraintPass4 cenv env gpidx ty = AddUnsharedRow cenv TableNames.GenericParamConstraint (GenTypeAsGenericParamConstraintRow cenv env gpidx ty) |> ignore -and GenGenericParamPass3 cenv env idx owner gp = +and GenGenericParamPass3 cenv env idx owner gp = // here we just collect generic params, its constraints\custom attributes will be processed on pass4 // shared since we look it up again below in GenGenericParamPass4 - AddSharedRow cenv TableNames.GenericParam (GetGenericParamAsGenericParamRow cenv env idx owner gp) + AddSharedRow cenv TableNames.GenericParam (GetGenericParamAsGenericParamRow cenv env idx owner gp) |> ignore -and GenGenericParamPass4 cenv env idx owner gp = +and GenGenericParamPass4 cenv env idx owner gp = let gpidx = FindOrAddSharedRow cenv TableNames.GenericParam (GetGenericParamAsGenericParamRow cenv env idx owner gp) GenCustomAttrsPass3Or4 cenv (hca_GenericParam, gpidx) gp.CustomAttrs - gp.Constraints |> List.iter (GenGenericParamConstraintPass4 cenv env gpidx) + gp.Constraints |> List.iter (GenGenericParamConstraintPass4 cenv env gpidx) -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // param and return --> Param Row -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GetParamAsParamRow cenv _env seq (param: ILParameter) = - let flags = +let rec GetParamAsParamRow cenv _env seq (param: ILParameter) = + let flags = (if param.IsIn then 0x0001 else 0x0000) ||| (if param.IsOut then 0x0002 else 0x0000) ||| (if param.IsOptional then 0x0010 else 0x0000) ||| (if param.Default <> None then 0x1000 else 0x0000) ||| (if param.Marshal <> None then 0x2000 else 0x0000) - - UnsharedRow - [| UShort (uint16 flags) - UShort (uint16 seq) - StringE (GetStringHeapIdxOption cenv param.Name) |] - -and GenParamPass3 cenv env seq (param: ILParameter) = - if not param.IsIn && not param.IsOut && not param.IsOptional && Option.isNone param.Default && Option.isNone param.Name && Option.isNone param.Marshal + + UnsharedRow + [| UShort (uint16 flags) + UShort (uint16 seq) + StringE (GetStringHeapIdxOption cenv param.Name) |] + +and GenParamPass3 cenv env seq (param: ILParameter) = + if not param.IsIn && not param.IsOut && not param.IsOptional && Option.isNone param.Default && Option.isNone param.Name && Option.isNone param.Marshal then () - else + else let pidx = AddUnsharedRow cenv TableNames.Param (GetParamAsParamRow cenv env seq param) GenCustomAttrsPass3Or4 cenv (hca_ParamDef, pidx) param.CustomAttrs - // Write FieldRVA table - fixups into data section done later - match param.Marshal with + // Write FieldRVA table - fixups into data section done later + match param.Marshal with | None -> () - | Some ntyp -> - AddUnsharedRow cenv TableNames.FieldMarshal + | Some ntyp -> + AddUnsharedRow cenv TableNames.FieldMarshal (UnsharedRow [| HasFieldMarshal (hfm_ParamDef, pidx); Blob (GetNativeTypeAsBlobIdx cenv ntyp) |]) |> ignore // Write Content table for DefaultParameterValue attr match param.Default with | None -> () - | Some i -> - AddUnsharedRow cenv TableNames.Constant - (UnsharedRow + | Some i -> + AddUnsharedRow cenv TableNames.Constant + (UnsharedRow [| GetFieldInitFlags i HasConstant (hc_ParamDef, pidx) Blob (GetFieldInitAsBlobIdx cenv i) |]) |> ignore -let GenReturnAsParamRow (returnv : ILReturn) = +let GenReturnAsParamRow (returnv : ILReturn) = let flags = (if returnv.Marshal <> None then 0x2000 else 0x0000) - UnsharedRow - [| UShort (uint16 flags) + UnsharedRow + [| UShort (uint16 flags) UShort 0us (* sequence num. *) - StringE 0 |] + StringE 0 |] -let GenReturnPass3 cenv (returnv: ILReturn) = +let GenReturnPass3 cenv (returnv: ILReturn) = if Option.isSome returnv.Marshal || not (Array.isEmpty returnv.CustomAttrs.AsArray) then let pidx = AddUnsharedRow cenv TableNames.Param (GenReturnAsParamRow returnv) GenCustomAttrsPass3Or4 cenv (hca_ParamDef, pidx) returnv.CustomAttrs - match returnv.Marshal with + match returnv.Marshal with | None -> () - | Some ntyp -> - AddUnsharedRow cenv TableNames.FieldMarshal - (UnsharedRow + | Some ntyp -> + AddUnsharedRow cenv TableNames.FieldMarshal + (UnsharedRow [| HasFieldMarshal (hfm_ParamDef, pidx) Blob (GetNativeTypeAsBlobIdx cenv ntyp) |]) |> ignore -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // ILMethodDef --> ILMethodDef Row -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let GetMethodDefSigAsBytes cenv env (mdef: ILMethodDef) = - emitBytesViaBuffer (fun bb -> +let GetMethodDefSigAsBytes cenv env (mdef: ILMethodDef) = + emitBytesViaBuffer (fun bb -> bb.EmitByte (callconvToByte mdef.GenericParams.Length mdef.CallingConv) if not (List.isEmpty mdef.GenericParams) then bb.EmitZ32 mdef.GenericParams.Length bb.EmitZ32 mdef.Parameters.Length EmitType cenv env bb mdef.Return.Type mdef.ParameterTypes |> List.iter (EmitType cenv env bb)) -let GenMethodDefSigAsBlobIdx cenv env mdef = +let GenMethodDefSigAsBlobIdx cenv env mdef = GetBytesAsBlobIdx cenv (GetMethodDefSigAsBytes cenv env mdef) -let GenMethodDefAsRow cenv env midx (md: ILMethodDef) = +let GenMethodDefAsRow cenv env midx (md: ILMethodDef) = let flags = md.Attributes - + let implflags = md.ImplAttributes - if md.IsEntryPoint then + if md.IsEntryPoint then if cenv.entrypoint <> None then failwith "duplicate entrypoint" else cenv.entrypoint <- Some (true, midx) - let codeAddr = - (match md.Body.Contents with - | MethodBody.IL ilmbody -> + let codeAddr = + (match md.Body with + | MethodBody.IL ilmbodyLazy -> + let ilmbody = ilmbodyLazy.Value let addr = cenv.nextCodeAddr let (localToken, code, seqpoints, rootScope) = GenILMethodBody md.Name cenv env ilmbody - // Now record the PDB record for this method - we write this out later. - if cenv.generatePdb then - cenv.pdbinfo.Add + // Now record the PDB record for this method - we write this out later. + if cenv.generatePdb then + cenv.pdbinfo.Add { MethToken=getUncodedToken TableNames.Method midx MethName=md.Name LocalSignatureToken=localToken Params= [| |] (* REVIEW *) RootScope = Some rootScope - Range= - match ilmbody.SourceMarker with - | Some m when cenv.generatePdb -> - // table indexes are 1-based, document array indexes are 0-based - let doc = (cenv.documents.FindOrAddSharedEntry m.Document) - 1 + Range= + match ilmbody.SourceMarker with + | Some m when cenv.generatePdb -> + // table indexes are 1-based, document array indexes are 0-based + let doc = (cenv.documents.FindOrAddSharedEntry m.Document) - 1 Some ({ Document=doc Line=m.Line - Column=m.Column }, + Column=m.Column }, { Document=doc Line=m.EndLine Column=m.EndColumn }) @@ -2475,9 +2495,9 @@ let GenMethodDefAsRow cenv env midx (md: ILMethodDef) = addr | MethodBody.Abstract | MethodBody.PInvoke _ -> - // Now record the PDB record for this method - we write this out later. - if cenv.generatePdb then - cenv.pdbinfo.Add + // Now record the PDB record for this method - we write this out later. + if cenv.generatePdb then + cenv.pdbinfo.Add { MethToken = getUncodedToken TableNames.Method midx MethName = md.Name LocalSignatureToken = 0x0 // No locals it's abstract @@ -2486,40 +2506,41 @@ let GenMethodDefAsRow cenv env midx (md: ILMethodDef) = Range = None SequencePoints = [| |] } 0x0000 - | MethodBody.Native -> + | MethodBody.Native -> failwith "cannot write body of native method - Abstract IL cannot roundtrip mixed native/managed binaries" | _ -> 0x0000) - UnsharedRow - [| ULong codeAddr - UShort (uint16 implflags) - UShort (uint16 flags) - StringE (GetStringHeapIdx cenv md.Name) - Blob (GenMethodDefSigAsBlobIdx cenv env md) - SimpleIndex(TableNames.Param, cenv.GetTable(TableNames.Param).Count + 1) |] + UnsharedRow + [| ULong codeAddr + UShort (uint16 implflags) + UShort (uint16 flags) + StringE (GetStringHeapIdx cenv md.Name) + Blob (GenMethodDefSigAsBlobIdx cenv env md) + SimpleIndex(TableNames.Param, cenv.GetTable(TableNames.Param).Count + 1) |] let GenMethodImplPass3 cenv env _tgparams tidx mimpl = let midxTag, midxRow = GetMethodSpecAsMethodDef cenv env (mimpl.OverrideBy, None) let midx2Tag, midx2Row = GetOverridesSpecAsMethodDefOrRef cenv env mimpl.Overrides AddUnsharedRow cenv TableNames.MethodImpl - (UnsharedRow + (UnsharedRow [| SimpleIndex (TableNames.TypeDef, tidx) MethodDefOrRef (midxTag, midxRow) MethodDefOrRef (midx2Tag, midx2Row) |]) |> ignore - -let GenMethodDefPass3 cenv env (md: ILMethodDef) = + +let GenMethodDefPass3 cenv env (md: ILMethodDef) = let midx = GetMethodDefIdx cenv md let idx2 = AddUnsharedRow cenv TableNames.Method (GenMethodDefAsRow cenv env midx md) if midx <> idx2 then failwith "index of method def on pass 3 does not match index on pass 2" - GenReturnPass3 cenv md.Return - md.Parameters |> List.iteri (fun n param -> GenParamPass3 cenv env (n+1) param) - md.CustomAttrs |> GenCustomAttrsPass3Or4 cenv (hca_MethodDef, midx) + GenReturnPass3 cenv md.Return + md.Parameters |> List.iteri (fun n param -> GenParamPass3 cenv env (n+1) param) + md.CustomAttrs |> GenCustomAttrsPass3Or4 cenv (hca_MethodDef, midx) md.SecurityDecls.AsList |> GenSecurityDeclsPass3 cenv (hds_MethodDef, midx) - md.GenericParams |> List.iteri (fun n gp -> GenGenericParamPass3 cenv env n (tomd_MethodDef, midx) gp) - match md.Body.Contents with - | MethodBody.PInvoke attr -> - let flags = - begin match attr.CallingConv with + md.GenericParams |> List.iteri (fun n gp -> GenGenericParamPass3 cenv env n (tomd_MethodDef, midx) gp) + match md.Body with + | MethodBody.PInvoke attrLazy -> + let attr = attrLazy.Value + let flags = + begin match attr.CallingConv with | PInvokeCallingConvention.None -> 0x0000 | PInvokeCallingConvention.Cdecl -> 0x0200 | PInvokeCallingConvention.Stdcall -> 0x0300 @@ -2527,18 +2548,18 @@ let GenMethodDefPass3 cenv env (md: ILMethodDef) = | PInvokeCallingConvention.Fastcall -> 0x0500 | PInvokeCallingConvention.WinApi -> 0x0100 end ||| - begin match attr.CharEncoding with + begin match attr.CharEncoding with | PInvokeCharEncoding.None -> 0x0000 | PInvokeCharEncoding.Ansi -> 0x0002 | PInvokeCharEncoding.Unicode -> 0x0004 | PInvokeCharEncoding.Auto -> 0x0006 end ||| - begin match attr.CharBestFit with + begin match attr.CharBestFit with | PInvokeCharBestFit.UseAssembly -> 0x0000 | PInvokeCharBestFit.Enabled -> 0x0010 | PInvokeCharBestFit.Disabled -> 0x0020 end ||| - begin match attr.ThrowOnUnmappableChar with + begin match attr.ThrowOnUnmappableChar with | PInvokeThrowOnUnmappableChar.UseAssembly -> 0x0000 | PInvokeThrowOnUnmappableChar.Enabled -> 0x1000 | PInvokeThrowOnUnmappableChar.Disabled -> 0x2000 @@ -2546,14 +2567,14 @@ let GenMethodDefPass3 cenv env (md: ILMethodDef) = (if attr.NoMangle then 0x0001 else 0x0000) ||| (if attr.LastError then 0x0040 else 0x0000) AddUnsharedRow cenv TableNames.ImplMap - (UnsharedRow - [| UShort (uint16 flags) + (UnsharedRow + [| UShort (uint16 flags) MemberForwarded (mf_MethodDef, midx) - StringE (GetStringHeapIdx cenv attr.Name) + StringE (GetStringHeapIdx cenv attr.Name) SimpleIndex (TableNames.ModuleRef, GetModuleRefAsIdx cenv attr.Where) |]) |> ignore | _ -> () -let GenMethodDefPass4 cenv env md = +let GenMethodDefPass4 cenv env md = let midx = GetMethodDefIdx cenv md List.iteri (fun n gp -> GenGenericParamPass4 cenv env n (tomd_MethodDef, midx) gp) md.GenericParams @@ -2561,40 +2582,40 @@ let GenPropertyMethodSemanticsPass3 cenv pidx kind mref = // REVIEW: why are we catching exceptions here? let midx = try GetMethodRefAsMethodDefIdx cenv mref with MethodDefNotFound -> 1 AddUnsharedRow cenv TableNames.MethodSemantics - (UnsharedRow + (UnsharedRow [| UShort (uint16 kind) SimpleIndex (TableNames.Method, midx) HasSemantics (hs_Property, pidx) |]) |> ignore - -let rec GetPropertySigAsBlobIdx cenv env prop = + +let rec GetPropertySigAsBlobIdx cenv env prop = GetBytesAsBlobIdx cenv (GetPropertySigAsBytes cenv env prop) -and GetPropertySigAsBytes cenv env (prop: ILPropertyDef) = - emitBytesViaBuffer (fun bb -> +and GetPropertySigAsBytes cenv env (prop: ILPropertyDef) = + emitBytesViaBuffer (fun bb -> let b = ((hasthisToByte prop.CallingConv) ||| e_IMAGE_CEE_CS_CALLCONV_PROPERTY) bb.EmitByte b bb.EmitZ32 prop.Args.Length EmitType cenv env bb prop.PropertyType prop.Args |> List.iter (EmitType cenv env bb)) -and GetPropertyAsPropertyRow cenv env (prop: ILPropertyDef) = +and GetPropertyAsPropertyRow cenv env (prop: ILPropertyDef) = let flags = prop.Attributes - UnsharedRow - [| UShort (uint16 flags) - StringE (GetStringHeapIdx cenv prop.Name) - Blob (GetPropertySigAsBlobIdx cenv env prop) |] + UnsharedRow + [| UShort (uint16 flags) + StringE (GetStringHeapIdx cenv prop.Name) + Blob (GetPropertySigAsBlobIdx cenv env prop) |] /// ILPropertyDef --> Property Row + MethodSemantics entries -and GenPropertyPass3 cenv env prop = +and GenPropertyPass3 cenv env prop = let pidx = AddUnsharedRow cenv TableNames.Property (GetPropertyAsPropertyRow cenv env prop) - prop.SetMethod |> Option.iter (GenPropertyMethodSemanticsPass3 cenv pidx 0x0001) - prop.GetMethod |> Option.iter (GenPropertyMethodSemanticsPass3 cenv pidx 0x0002) - // Write Constant table - match prop.Init with + prop.SetMethod |> Option.iter (GenPropertyMethodSemanticsPass3 cenv pidx 0x0001) + prop.GetMethod |> Option.iter (GenPropertyMethodSemanticsPass3 cenv pidx 0x0002) + // Write Constant table + match prop.Init with | None -> () - | Some i -> - AddUnsharedRow cenv TableNames.Constant - (UnsharedRow + | Some i -> + AddUnsharedRow cenv TableNames.Constant + (UnsharedRow [| GetFieldInitFlags i HasConstant (hc_Property, pidx) Blob (GetFieldInitAsBlobIdx cenv i) |]) |> ignore @@ -2603,67 +2624,67 @@ and GenPropertyPass3 cenv env prop = let rec GenEventMethodSemanticsPass3 cenv eidx kind mref = let addIdx = try GetMethodRefAsMethodDefIdx cenv mref with MethodDefNotFound -> 1 AddUnsharedRow cenv TableNames.MethodSemantics - (UnsharedRow + (UnsharedRow [| UShort (uint16 kind) SimpleIndex (TableNames.Method, addIdx) HasSemantics (hs_Event, eidx) |]) |> ignore /// ILEventDef --> Event Row + MethodSemantics entries -and GenEventAsEventRow cenv env (md: ILEventDef) = +and GenEventAsEventRow cenv env (md: ILEventDef) = let flags = md.Attributes let tdorTag, tdorRow = GetTypeOptionAsTypeDefOrRef cenv env md.EventType - UnsharedRow - [| UShort (uint16 flags) - StringE (GetStringHeapIdx cenv md.Name) + UnsharedRow + [| UShort (uint16 flags) + StringE (GetStringHeapIdx cenv md.Name) TypeDefOrRefOrSpec (tdorTag, tdorRow) |] -and GenEventPass3 cenv env (md: ILEventDef) = +and GenEventPass3 cenv env (md: ILEventDef) = let eidx = AddUnsharedRow cenv TableNames.Event (GenEventAsEventRow cenv env md) - md.AddMethod |> GenEventMethodSemanticsPass3 cenv eidx 0x0008 - md.RemoveMethod |> GenEventMethodSemanticsPass3 cenv eidx 0x0010 - Option.iter (GenEventMethodSemanticsPass3 cenv eidx 0x0020) md.FireMethod + md.AddMethod |> GenEventMethodSemanticsPass3 cenv eidx 0x0008 + md.RemoveMethod |> GenEventMethodSemanticsPass3 cenv eidx 0x0010 + Option.iter (GenEventMethodSemanticsPass3 cenv eidx 0x0020) md.FireMethod List.iter (GenEventMethodSemanticsPass3 cenv eidx 0x0004) md.OtherMethods GenCustomAttrsPass3Or4 cenv (hca_Event, eidx) md.CustomAttrs -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // resource --> generate ... -// -------------------------------------------------------------------- - -let rec GetResourceAsManifestResourceRow cenv r = - let data, impl = - let embedManagedResources (bytes: ReadOnlyByteMemory) = - // Embedded managed resources must be word-aligned. However resource format is - // not specified in ECMA. Some mscorlib resources appear to be non-aligned - it seems it doesn't matter.. - let offset = cenv.resources.Position - let alignedOffset = (align 0x8 offset) - let pad = alignedOffset - offset - let resourceSize = bytes.Length - cenv.resources.EmitPadding pad - cenv.resources.EmitInt32 resourceSize - cenv.resources.EmitByteMemory bytes - Data (alignedOffset, true), (i_File, 0) - - match r.Location with +// -------------------------------------------------------------------- + +let rec GetResourceAsManifestResourceRow cenv r = + let data, impl = + let embedManagedResources (bytes: ReadOnlyByteMemory) = + // Embedded managed resources must be word-aligned. However resource format is + // not specified in ECMA. Some mscorlib resources appear to be non-aligned - it seems it doesn't matter.. + let offset = cenv.resources.Position + let alignedOffset = (align 0x8 offset) + let pad = alignedOffset - offset + let resourceSize = bytes.Length + cenv.resources.EmitPadding pad + cenv.resources.EmitInt32 resourceSize + cenv.resources.EmitByteMemory bytes + Data (alignedOffset, true), (i_File, 0) + + match r.Location with | ILResourceLocation.Local bytes -> embedManagedResources (bytes.GetByteMemory()) - | ILResourceLocation.File (mref, offset) -> ULong offset, (i_File, GetModuleRefAsFileIdx cenv mref) - | ILResourceLocation.Assembly aref -> ULong 0x0, (i_AssemblyRef, GetAssemblyRefAsIdx cenv aref) + | ILResourceLocation.File (mref, offset) -> ULong offset, (i_File, GetModuleRefAsFileIdx cenv mref) + | ILResourceLocation.Assembly aref -> ULong 0x0, (i_AssemblyRef, GetAssemblyRefAsIdx cenv aref) - UnsharedRow - [| data + UnsharedRow + [| data ULong (match r.Access with ILResourceAccess.Public -> 0x01 | ILResourceAccess.Private -> 0x02) - StringE (GetStringHeapIdx cenv r.Name) + StringE (GetStringHeapIdx cenv r.Name) Implementation (fst impl, snd impl) |] -and GenResourcePass3 cenv r = +and GenResourcePass3 cenv r = let idx = AddUnsharedRow cenv TableNames.ManifestResource (GetResourceAsManifestResourceRow cenv r) GenCustomAttrsPass3Or4 cenv (hca_ManifestResource, idx) r.CustomAttrs -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // ILTypeDef --> generate ILFieldDef, ILMethodDef, ILPropertyDef etc. rows -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -let rec GenTypeDefPass3 enc cenv (td: ILTypeDef) = +let rec GenTypeDefPass3 enc cenv (td: ILTypeDef) = try let env = envForTypeDef td let tidx = GetIdxForTypeDef cenv (TdKey(enc, td.Name)) @@ -2672,20 +2693,20 @@ let rec GenTypeDefPass3 enc cenv (td: ILTypeDef) = td.Fields.AsList |> List.iter (GenFieldDefPass3 cenv env) td.Methods |> Seq.iter (GenMethodDefPass3 cenv env) td.MethodImpls.AsList |> List.iter (GenMethodImplPass3 cenv env td.GenericParams.Length tidx) - // ClassLayout entry if needed - match td.Layout with + // ClassLayout entry if needed + match td.Layout with | ILTypeDefLayout.Auto -> () - | ILTypeDefLayout.Sequential layout | ILTypeDefLayout.Explicit layout -> - if Option.isSome layout.Pack || Option.isSome layout.Size then + | ILTypeDefLayout.Sequential layout | ILTypeDefLayout.Explicit layout -> + if Option.isSome layout.Pack || Option.isSome layout.Size then AddUnsharedRow cenv TableNames.ClassLayout - (UnsharedRow + (UnsharedRow [| UShort (defaultArg layout.Pack (uint16 0x0)) ULong (defaultArg layout.Size 0x0) SimpleIndex (TableNames.TypeDef, tidx) |]) |> ignore - + td.SecurityDecls.AsList |> GenSecurityDeclsPass3 cenv (hds_TypeDef, tidx) td.CustomAttrs |> GenCustomAttrsPass3Or4 cenv (hca_TypeDef, tidx) - td.GenericParams |> List.iteri (fun n gp -> GenGenericParamPass3 cenv env n (tomd_TypeDef, tidx) gp) + td.GenericParams |> List.iteri (fun n gp -> GenGenericParamPass3 cenv env n (tomd_TypeDef, tidx) gp) td.NestedTypes.AsList |> GenTypeDefsPass3 (enc@[td.Name]) cenv with e -> failwith ("Error in pass3 for type "+td.Name+", error: "+e.Message) @@ -2698,12 +2719,12 @@ and GenTypeDefsPass3 enc cenv tds = /// ILTypeDef --> generate generic params on ILMethodDef: ensures /// GenericParam table is built sorted by owner. -let rec GenTypeDefPass4 enc cenv (td: ILTypeDef) = +let rec GenTypeDefPass4 enc cenv (td: ILTypeDef) = try let env = envForTypeDef td let tidx = GetIdxForTypeDef cenv (TdKey(enc, td.Name)) - td.Methods |> Seq.iter (GenMethodDefPass4 cenv env) - List.iteri (fun n gp -> GenGenericParamPass4 cenv env n (tomd_TypeDef, tidx) gp) td.GenericParams + td.Methods |> Seq.iter (GenMethodDefPass4 cenv env) + List.iteri (fun n gp -> GenGenericParamPass4 cenv env n (tomd_TypeDef, tidx) gp) td.GenericParams GenTypeDefsPass4 (enc@[td.Name]) cenv td.NestedTypes.AsList with e -> failwith ("Error in pass4 for type "+td.Name+", error: "+e.Message) @@ -2716,19 +2737,19 @@ and GenTypeDefsPass4 enc cenv tds = let timestamp = absilWriteGetTimeStamp () -// -------------------------------------------------------------------- -// ILExportedTypesAndForwarders --> ILExportedTypeOrForwarder table -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- +// ILExportedTypesAndForwarders --> ILExportedTypeOrForwarder table +// -------------------------------------------------------------------- -let rec GenNestedExportedTypePass3 cenv cidx (ce: ILNestedExportedType) = +let rec GenNestedExportedTypePass3 cenv cidx (ce: ILNestedExportedType) = let flags = GetMemberAccessFlags ce.Access - let nidx = - AddUnsharedRow cenv TableNames.ExportedType - (UnsharedRow - [| ULong flags + let nidx = + AddUnsharedRow cenv TableNames.ExportedType + (UnsharedRow + [| ULong flags ULong 0x0 - StringE (GetStringHeapIdx cenv ce.Name) - StringE 0 + StringE (GetStringHeapIdx cenv ce.Name) + StringE 0 Implementation (i_ExportedType, cidx) |]) GenCustomAttrsPass3Or4 cenv (hca_ExportedType, nidx) ce.CustomAttrs GenNestedExportedTypesPass3 cenv nidx ce.Nested @@ -2736,39 +2757,39 @@ let rec GenNestedExportedTypePass3 cenv cidx (ce: ILNestedExportedType) = and GenNestedExportedTypesPass3 cenv nidx (nce: ILNestedExportedTypes) = nce.AsList |> List.iter (GenNestedExportedTypePass3 cenv nidx) -and GenExportedTypePass3 cenv (ce: ILExportedTypeOrForwarder) = +and GenExportedTypePass3 cenv (ce: ILExportedTypeOrForwarder) = let nselem, nelem = GetTypeNameAsElemPair cenv ce.Name let flags = int32 ce.Attributes let impl = GetScopeRefAsImplementationElem cenv ce.ScopeRef - let cidx = - AddUnsharedRow cenv TableNames.ExportedType - (UnsharedRow - [| ULong flags + let cidx = + AddUnsharedRow cenv TableNames.ExportedType + (UnsharedRow + [| ULong flags ULong 0x0 - nelem - nselem + nelem + nselem Implementation (fst impl, snd impl) |]) GenCustomAttrsPass3Or4 cenv (hca_ExportedType, cidx) ce.CustomAttrs GenNestedExportedTypesPass3 cenv cidx ce.Nested -and GenExportedTypesPass3 cenv (ce: ILExportedTypesAndForwarders) = +and GenExportedTypesPass3 cenv (ce: ILExportedTypesAndForwarders) = List.iter (GenExportedTypePass3 cenv) ce.AsList -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // manifest --> generate Assembly row -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- -and GetManifestAsAssemblyRow cenv m = - UnsharedRow +and GetManifestAsAssemblyRow cenv m = + UnsharedRow [|ULong m.AuxModuleHashAlgorithm UShort (match m.Version with None -> 0us | Some version -> version.Major) UShort (match m.Version with None -> 0us | Some version -> version.Minor) UShort (match m.Version with None -> 0us | Some version -> version.Build) UShort (match m.Version with None -> 0us | Some version -> version.Revision) - ULong - ( (match m.AssemblyLongevity with + ULong + ( (match m.AssemblyLongevity with | ILAssemblyLongevity.Unspecified -> 0x0000 - | ILAssemblyLongevity.Library -> 0x0002 + | ILAssemblyLongevity.Library -> 0x0002 | ILAssemblyLongevity.PlatformAppDomain -> 0x0004 | ILAssemblyLongevity.PlatformProcess -> 0x0006 | ILAssemblyLongevity.PlatformSystem -> 0x0008) ||| @@ -2776,25 +2797,25 @@ and GetManifestAsAssemblyRow cenv m = // Setting these causes peverify errors. Hence both ilread and ilwrite ignore them and refuse to set them. // Any debugging customAttributes will automatically propagate // REVIEW: No longer appears to be the case - (if m.JitTracking then 0x8000 else 0x0) ||| + (if m.JitTracking then 0x8000 else 0x0) ||| (match m.PublicKey with None -> 0x0000 | Some _ -> 0x0001) ||| 0x0000) (match m.PublicKey with None -> Blob 0 | Some x -> Blob (GetBytesAsBlobIdx cenv x)) StringE (GetStringHeapIdx cenv m.Name) (match m.Locale with None -> StringE 0 | Some x -> StringE (GetStringHeapIdx cenv x)) |] -and GenManifestPass3 cenv m = +and GenManifestPass3 cenv m = let aidx = AddUnsharedRow cenv TableNames.Assembly (GetManifestAsAssemblyRow cenv m) GenSecurityDeclsPass3 cenv (hds_Assembly, aidx) m.SecurityDecls.AsList GenCustomAttrsPass3Or4 cenv (hca_Assembly, aidx) m.CustomAttrs GenExportedTypesPass3 cenv m.ExportedTypes - // Record the entrypoint decl if needed. + // Record the entrypoint decl if needed. match m.EntrypointElsewhere with - | Some mref -> + | Some mref -> if cenv.entrypoint <> None then failwith "duplicate entrypoint" else cenv.entrypoint <- Some (false, GetModuleRefAsIdx cenv mref) | None -> () -and newGuid (modul: ILModuleDef) = +and newGuid (modul: ILModuleDef) = let n = timestamp let m = hash n let m2 = hash modul.Name @@ -2805,39 +2826,39 @@ and deterministicGuid (modul: ILModuleDef) = let m2 = Seq.sum (Seq.mapi (fun i x -> i + int x) modul.Name) // use a stable hash [| b0 n; b1 n; b2 n; b3 n; b0 m2; b1 m2; b2 m2; b3 m2; 0xa7uy; 0x45uy; 0x03uy; 0x83uy; b0 n; b1 n; b2 n; b3 n |] -and GetModuleAsRow (cenv: cenv) (modul: ILModuleDef) = +and GetModuleAsRow (cenv: cenv) (modul: ILModuleDef) = // Store the generated MVID in the environment (needed for generating debug information) let modulGuid = if cenv.deterministic then deterministicGuid modul else newGuid modul cenv.moduleGuid <- modulGuid - UnsharedRow - [| UShort (uint16 0x0) - StringE (GetStringHeapIdx cenv modul.Name) - Guid (GetGuidIdx cenv modulGuid) - Guid 0 + UnsharedRow + [| UShort (uint16 0x0) + StringE (GetStringHeapIdx cenv modul.Name) + Guid (GetGuidIdx cenv modulGuid) + Guid 0 Guid 0 |] -let rowElemCompare (e1: RowElement) (e2: RowElement) = - let c = compare e1.Val e2.Val - if c <> 0 then c else +let rowElemCompare (e1: RowElement) (e2: RowElement) = + let c = compare e1.Val e2.Val + if c <> 0 then c else compare e1.Tag e2.Tag -let TableRequiresSorting tab = - List.memAssoc tab sortedTableInfo +let TableRequiresSorting tab = + List.memAssoc tab sortedTableInfo -let SortTableRows tab (rows: GenericRow[]) = +let SortTableRows tab (rows: GenericRow[]) = assert (TableRequiresSorting tab) let col = List.assoc tab sortedTableInfo - rows + rows // This needs to be a stable sort, so we use List.sortWith |> Array.toList - |> List.sortWith (fun r1 r2 -> rowElemCompare r1.[col] r2.[col]) + |> List.sortWith (fun r1 r2 -> rowElemCompare r1.[col] r2.[col]) |> Array.ofList //|> Array.map SharedRow -let GenModule (cenv : cenv) (modul: ILModuleDef) = +let GenModule (cenv : cenv) (modul: ILModuleDef) = let midx = AddUnsharedRow cenv TableNames.Module (GetModuleAsRow cenv modul) - List.iter (GenResourcePass3 cenv) modul.Resources.AsList + List.iter (GenResourcePass3 cenv) modul.Resources.AsList let tds = destTypeDefsWithGlobalFunctionsFirst cenv.ilg modul.TypeDefs reportTime cenv.showTimes "Module Generation Preparation" GenTypeDefsPass1 [] cenv tds @@ -2848,18 +2869,28 @@ let GenModule (cenv : cenv) (modul: ILModuleDef) = GenTypeDefsPass3 [] cenv tds reportTime cenv.showTimes "Module Generation Pass 3" GenCustomAttrsPass3Or4 cenv (hca_Module, midx) modul.CustomAttrs - // GenericParam is the only sorted table indexed by Columns in other tables (GenericParamConstraint\CustomAttributes). - // Hence we need to sort it before we emit any entries in GenericParamConstraint\CustomAttributes that are attached to generic params. - // Note this mutates the rows in a table. 'SetRowsOfTable' clears - // the key --> index map since it is no longer valid + // GenericParam is the only sorted table indexed by Columns in other tables (GenericParamConstraint\CustomAttributes). + // Hence we need to sort it before we emit any entries in GenericParamConstraint\CustomAttributes that are attached to generic params. + // Note this mutates the rows in a table. 'SetRowsOfTable' clears + // the key --> index map since it is no longer valid cenv.GetTable(TableNames.GenericParam).SetRowsOfSharedTable (SortTableRows TableNames.GenericParam (cenv.GetTable(TableNames.GenericParam).GenericRowsOfTable)) GenTypeDefsPass4 [] cenv tds reportTime cenv.showTimes "Module Generation Pass 4" +/// Arbitrary value +[] +let CodeChunkCapacity = 40000 +/// Arbitrary value +[] +let DataCapacity = 200 +/// Arbitrary value +[] +let ResourceCapacity = 200 + let generateIL requiredDataFixups (desiredMetadataVersion, generatePdb, ilg : ILGlobals, emitTailcalls, deterministic, showTimes) (m : ILModuleDef) cilStartAddress normalizeAssemblyRefs = let isDll = m.IsDLL - let cenv = + use cenv = { emitTailcalls=emitTailcalls deterministic = deterministic showTimes=showTimes @@ -2867,12 +2898,12 @@ let generateIL requiredDataFixups (desiredMetadataVersion, generatePdb, ilg : IL desiredMetadataVersion=desiredMetadataVersion requiredDataFixups= requiredDataFixups requiredStringFixups = [] - codeChunks=ByteBuffer.Create 40000 + codeChunks=ByteBuffer.Create(CodeChunkCapacity, useArrayPool = true) nextCodeAddr = cilStartAddress - data = ByteBuffer.Create 200 - resources = ByteBuffer.Create 200 - tables= - Array.init 64 (fun i -> + data = ByteBuffer.Create DataCapacity + resources = ByteBuffer.Create ResourceCapacity + tables= + Array.init 64 (fun i -> if (i = TableNames.AssemblyRef.Index || i = TableNames.MemberRef.Index || i = TableNames.ModuleRef.Index || @@ -2881,7 +2912,7 @@ let generateIL requiredDataFixups (desiredMetadataVersion, generatePdb, ilg : IL i = TableNames.TypeSpec.Index || i = TableNames.MethodSpec.Index || i = TableNames.StandAloneSig.Index || - i = TableNames.GenericParam.Index) then + i = TableNames.GenericParam.Index) then MetadataTable.Shared (MetadataTable.New ("row table "+string i, EqualityComparer.Default)) else MetadataTable.Unshared (MetadataTable.New ("row table "+string i, EqualityComparer.Default))) @@ -2903,29 +2934,29 @@ let generateIL requiredDataFixups (desiredMetadataVersion, generatePdb, ilg : IL // These must use structural comparison since they are keyed by arrays guids=MetadataTable<_>.New("guids", HashIdentity.Structural) blobs= MetadataTable<_>.New("blobs", HashIdentity.Structural) - strings= MetadataTable<_>.New("strings", EqualityComparer.Default) + strings= MetadataTable<_>.New("strings", EqualityComparer.Default) userStrings= MetadataTable<_>.New("user strings", EqualityComparer.Default) normalizeAssemblyRefs = normalizeAssemblyRefs } - // Now the main compilation step + // Now the main compilation step GenModule cenv m // .exe files have a .entrypoint instruction. Do not write it to the entrypoint when writing dll. - let entryPointToken = - match cenv.entrypoint with - | Some (epHere, tok) -> + let entryPointToken = + match cenv.entrypoint with + | Some (epHere, tok) -> if isDll then 0x0 - else getUncodedToken (if epHere then TableNames.Method else TableNames.File) tok - | None -> + else getUncodedToken (if epHere then TableNames.Method else TableNames.File) tok + | None -> if not isDll then dprintn "warning: no entrypoint specified in executable binary" 0x0 - let pdbData = + let pdbData = { EntryPoint= (if isDll then None else Some entryPointToken) Timestamp = timestamp ModuleID = cenv.moduleGuid Documents = cenv.documents.EntriesAsArray - Methods = cenv.pdbinfo.ToArray() + Methods = cenv.pdbinfo.ToArray() TableRowCounts = cenv.tables |> Seq.map(fun t -> t.Count) |> Seq.toArray } let idxForNextedTypeDef (tds: ILTypeDef list, td: ILTypeDef) = @@ -2936,9 +2967,9 @@ let generateIL requiredDataFixups (desiredMetadataVersion, generatePdb, ilg : IL let userStrings = cenv.userStrings.EntriesAsArray |> Array.map System.Text.Encoding.Unicode.GetBytes let blobs = cenv.blobs.EntriesAsArray let guids = cenv.guids.EntriesAsArray - let tables = cenv.tables - let code = cenv.GetCode() - // turn idx tbls into token maps + let tables = cenv.tables + let code = cenv.GetCode() + // turn idx tbls into token maps let mappings = { TypeDefTokenMap = (fun t -> getUncodedToken TableNames.TypeDef (idxForNextedTypeDef t)) @@ -2955,9 +2986,9 @@ let generateIL requiredDataFixups (desiredMetadataVersion, generatePdb, ilg : IL let tidx = idxForNextedTypeDef t getUncodedToken TableNames.Event (cenv.eventDefs.GetTableEntry (EventKey (tidx, ed.Name)))) } reportTime cenv.showTimes "Finalize Module Generation Results" - // New return the results - let data = cenv.data.Close() - let resources = cenv.resources.Close() + // New return the results + let data = cenv.data.AsMemory().ToArray() + let resources = cenv.resources.AsMemory().ToArray() (strings, userStrings, blobs, guids, tables, entryPointToken, code, cenv.requiredStringFixups, data, resources, pdbData, mappings) @@ -2968,10 +2999,10 @@ let chunk sz next = ({addr=next; size=sz}, next + sz) let emptychunk next = ({addr=next; size=0}, next) let nochunk next = ({addr= 0x0;size= 0x0; }, next) -let count f arr = - Array.fold (fun x y -> x + f y) 0x0 arr +let count f arr = + Array.fold (fun x y -> x + f y) 0x0 arr -module FileSystemUtilities = +module FileSystemUtilities = open System open System.Reflection open System.Globalization @@ -2979,19 +3010,19 @@ module FileSystemUtilities = let setExecutablePermission (filename: string) = #if ENABLE_MONO_SUPPORT - if runningOnMono then - try + if runningOnMono then + try let monoPosix = Assembly.Load("Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756") if progress then eprintf "loading type Mono.Unix.UnixFileInfo...\n" - let monoUnixFileInfo = monoPosix.GetType("Mono.Unix.UnixFileSystemInfo") + let monoUnixFileInfo = monoPosix.GetType("Mono.Unix.UnixFileSystemInfo") let fileEntry = monoUnixFileInfo.InvokeMember("GetFileSystemEntry", (BindingFlags.InvokeMethod ||| BindingFlags.Static ||| BindingFlags.Public), null, null, [| box filename |], CultureInfo.InvariantCulture) - let prevPermissions = monoUnixFileInfo.InvokeMember("get_FileAccessPermissions", (BindingFlags.InvokeMethod ||| BindingFlags.Instance ||| BindingFlags.Public), null, fileEntry, [| |], CultureInfo.InvariantCulture) + let prevPermissions = monoUnixFileInfo.InvokeMember("get_FileAccessPermissions", (BindingFlags.InvokeMethod ||| BindingFlags.Instance ||| BindingFlags.Public), null, fileEntry, [| |], CultureInfo.InvariantCulture) let prevPermissionsValue = prevPermissions |> unbox let newPermissionsValue = prevPermissionsValue ||| 0x000001ED let newPermissions = Enum.ToObject(prevPermissions.GetType(), newPermissionsValue) // Add 0x000001ED (UserReadWriteExecute, GroupReadExecute, OtherReadExecute) to the access permissions on Unix monoUnixFileInfo.InvokeMember("set_FileAccessPermissions", (BindingFlags.InvokeMethod ||| BindingFlags.Instance ||| BindingFlags.Public), null, fileEntry, [| newPermissions |], CultureInfo.InvariantCulture) |> ignore - with e -> + with e -> if progress then eprintf "failure: %s...\n" (e.ToString()) // Fail silently else @@ -3000,28 +3031,35 @@ module FileSystemUtilities = #endif () +/// Arbitrary value +[] +let TableCapacity = 20000 +/// Arbitrary value +[] +let MetadataCapacity = 500000 + let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailcalls, deterministic, showTimes) modul cilStartAddress normalizeAssemblyRefs = // When we know the real RVAs of the data section we fixup the references for the FieldRVA table. - // These references are stored as offsets into the metadata we return from this function + // These references are stored as offsets into the metadata we return from this function let requiredDataFixups = ref [] let next = cilStartAddress - let strings, userStrings, blobs, guids, tables, entryPointToken, code, requiredStringFixups, data, resources, pdbData, mappings = + let strings, userStrings, blobs, guids, tables, entryPointToken, code, requiredStringFixups, data, resources, pdbData, mappings = generateIL requiredDataFixups (desiredMetadataVersion, generatePdb, ilg, emitTailcalls, deterministic, showTimes) modul cilStartAddress normalizeAssemblyRefs reportTime showTimes "Generated Tables and Code" let tableSize (tab: TableName) = tables.[tab.Index].Count - // Now place the code + // Now place the code let codeSize = code.Length let alignedCodeSize = align 0x4 codeSize let codep, next = chunk codeSize next let codePadding = Array.create (alignedCodeSize - codeSize) 0x0uy let _codePaddingChunk, next = chunk codePadding.Length next - // Now layout the chunks of metadata and IL + // Now layout the chunks of metadata and IL let metadataHeaderStartChunk, _next = chunk 0x10 next let numStreams = 0x05 @@ -3034,8 +3072,8 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca let paddedVersionLength = align 0x4 (Array.length version) - // Most addresses after this point are measured from the MD root - // Switch to md-rooted addresses + // Most addresses after this point are measured from the MD root + // Switch to md-rooted addresses let next = metadataHeaderStartChunk.size let _metadataHeaderVersionChunk, next = chunk paddedVersionLength next let _metadataHeaderEndChunk, next = chunk 0x04 next @@ -3049,13 +3087,13 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca let stringsStreamUnpaddedSize = count (fun (s: byte[]) -> s.Length) strings + 1 let stringsStreamPaddedSize = align 4 stringsStreamUnpaddedSize - + let userStringsStreamUnpaddedSize = count (fun (s: byte[]) -> let n = s.Length + 1 in n + ByteBuffer.Z32Size n) userStrings + 1 let userStringsStreamPaddedSize = align 4 userStringsStreamUnpaddedSize - + let guidsStreamUnpaddedSize = (Array.length guids) * 0x10 let guidsStreamPaddedSize = align 4 guidsStreamUnpaddedSize - + let blobsStreamUnpaddedSize = count (fun (blob: byte[]) -> let n = blob.Length in n + ByteBuffer.Z32Size n) blobs + 1 let blobsStreamPaddedSize = align 4 blobsStreamUnpaddedSize @@ -3063,31 +3101,31 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca let stringsBig = stringsStreamPaddedSize >= 0x10000 let blobsBig = blobsStreamPaddedSize >= 0x10000 - // 64bit bitvector indicating which tables are in the metadata. - let (valid1, valid2), _ = - (((0, 0), 0), tables) ||> Array.fold (fun ((valid1, valid2) as valid, n) rows -> - let valid = + // 64bit bitvector indicating which tables are in the metadata. + let (valid1, valid2), _ = + (((0, 0), 0), tables) ||> Array.fold (fun ((valid1, valid2) as valid, n) rows -> + let valid = if rows.Count = 0 then valid else - ( (if n < 32 then valid1 ||| (1 <<< n ) else valid1), + ( (if n < 32 then valid1 ||| (1 <<< n ) else valid1), (if n >= 32 then valid2 ||| (1 <<< (n-32)) else valid2) ) (valid, n+1)) - // 64bit bitvector indicating which tables are sorted. - // Constant - REVIEW: make symbolic! compute from sorted table info! + // 64bit bitvector indicating which tables are sorted. + // Constant - REVIEW: make symbolic! compute from sorted table info! let sorted1 = 0x3301fa00 - let sorted2 = - // If there are any generic parameters in the binary we're emitting then mark that - // table as sorted, otherwise don't. This maximizes the number of assemblies we emit - // which have an ECMA-v.1. compliant set of sorted tables. - (if tableSize TableNames.GenericParam > 0 then 0x00000400 else 0x00000000) ||| - (if tableSize TableNames.GenericParamConstraint > 0 then 0x00001000 else 0x00000000) ||| + let sorted2 = + // If there are any generic parameters in the binary we're emitting then mark that + // table as sorted, otherwise don't. This maximizes the number of assemblies we emit + // which have an ECMA-v.1. compliant set of sorted tables. + (if tableSize TableNames.GenericParam > 0 then 0x00000400 else 0x00000000) ||| + (if tableSize TableNames.GenericParamConstraint > 0 then 0x00001000 else 0x00000000) ||| 0x00000200 - + reportTime showTimes "Layout Header of Tables" let guidAddress n = (if n = 0 then 0 else (n - 1) * 0x10 + 0x01) - let stringAddressTable = + let stringAddressTable = let tab = Array.create (strings.Length + 1) 0 let pos = ref 1 for i = 1 to strings.Length do @@ -3096,11 +3134,11 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca pos := !pos + s.Length tab - let stringAddress n = + let stringAddress n = if n >= Array.length stringAddressTable then failwith ("string index "+string n+" out of range") stringAddressTable.[n] - - let userStringAddressTable = + + let userStringAddressTable = let tab = Array.create (Array.length userStrings + 1) 0 let pos = ref 1 for i = 1 to Array.length userStrings do @@ -3110,11 +3148,11 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca pos := !pos + n + ByteBuffer.Z32Size n tab - let userStringAddress n = + let userStringAddress n = if n >= Array.length userStringAddressTable then failwith "userString index out of range" userStringAddressTable.[n] - - let blobAddressTable = + + let blobAddressTable = let tab = Array.create (blobs.Length + 1) 0 let pos = ref 1 for i = 1 to blobs.Length do @@ -3123,44 +3161,44 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca pos := !pos + blob.Length + ByteBuffer.Z32Size blob.Length tab - let blobAddress n = + let blobAddress n = if n >= blobAddressTable.Length then failwith "blob index out of range" blobAddressTable.[n] - + reportTime showTimes "Build String/Blob Address Tables" - let sortedTables = - Array.init 64 (fun i -> + let sortedTables = + Array.init 64 (fun i -> let tab = tables.[i] let tabName = TableName.FromIndex i let rows = tab.GenericRowsOfTable if TableRequiresSorting tabName then SortTableRows tabName rows else rows) - + reportTime showTimes "Sort Tables" - let codedTables = - + let codedTables = + let bignessTable = Array.map (fun rows -> Array.length rows >= 0x10000) sortedTables let bigness (tab: int32) = bignessTable.[tab] - + let codedBigness nbits tab = (tableSize tab) >= (0x10000 >>> nbits) - - let tdorBigness = - codedBigness 2 TableNames.TypeDef || - codedBigness 2 TableNames.TypeRef || + + let tdorBigness = + codedBigness 2 TableNames.TypeDef || + codedBigness 2 TableNames.TypeRef || codedBigness 2 TableNames.TypeSpec - - let tomdBigness = - codedBigness 1 TableNames.TypeDef || + + let tomdBigness = + codedBigness 1 TableNames.TypeDef || codedBigness 1 TableNames.Method - - let hcBigness = + + let hcBigness = codedBigness 2 TableNames.Field || codedBigness 2 TableNames.Param || codedBigness 2 TableNames.Property - - let hcaBigness = + + let hcaBigness = codedBigness 5 TableNames.Method || codedBigness 5 TableNames.Field || codedBigness 5 TableNames.TypeRef || @@ -3184,83 +3222,83 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca codedBigness 5 TableNames.GenericParamConstraint || codedBigness 5 TableNames.MethodSpec - - let hfmBigness = - codedBigness 1 TableNames.Field || + + let hfmBigness = + codedBigness 1 TableNames.Field || codedBigness 1 TableNames.Param - - let hdsBigness = - codedBigness 2 TableNames.TypeDef || + + let hdsBigness = + codedBigness 2 TableNames.TypeDef || codedBigness 2 TableNames.Method || codedBigness 2 TableNames.Assembly - - let mrpBigness = + + let mrpBigness = codedBigness 3 TableNames.TypeRef || codedBigness 3 TableNames.ModuleRef || codedBigness 3 TableNames.Method || codedBigness 3 TableNames.TypeSpec - - let hsBigness = - codedBigness 1 TableNames.Event || - codedBigness 1 TableNames.Property - + + let hsBigness = + codedBigness 1 TableNames.Event || + codedBigness 1 TableNames.Property + let mdorBigness = - codedBigness 1 TableNames.Method || - codedBigness 1 TableNames.MemberRef - + codedBigness 1 TableNames.Method || + codedBigness 1 TableNames.MemberRef + let mfBigness = codedBigness 1 TableNames.Field || - codedBigness 1 TableNames.Method - + codedBigness 1 TableNames.Method + let iBigness = - codedBigness 2 TableNames.File || - codedBigness 2 TableNames.AssemblyRef || - codedBigness 2 TableNames.ExportedType - - let catBigness = - codedBigness 3 TableNames.Method || - codedBigness 3 TableNames.MemberRef - - let rsBigness = - codedBigness 2 TableNames.Module || - codedBigness 2 TableNames.ModuleRef || + codedBigness 2 TableNames.File || + codedBigness 2 TableNames.AssemblyRef || + codedBigness 2 TableNames.ExportedType + + let catBigness = + codedBigness 3 TableNames.Method || + codedBigness 3 TableNames.MemberRef + + let rsBigness = + codedBigness 2 TableNames.Module || + codedBigness 2 TableNames.ModuleRef || codedBigness 2 TableNames.AssemblyRef || codedBigness 2 TableNames.TypeRef - let tablesBuf = ByteBuffer.Create 20000 + use tablesBuf = ByteBuffer.Create(TableCapacity, useArrayPool = true) - // Now the coded tables themselves - first the schemata header - tablesBuf.EmitIntsAsBytes + // Now the coded tables themselves - first the schemata header + tablesBuf.EmitIntsAsBytes [| 0x00; 0x00; 0x00; 0x00 - mdtableVersionMajor // major version of table schemata - mdtableVersionMinor // minor version of table schemata - - ((if stringsBig then 0x01 else 0x00) ||| // bit vector for heap size - (if guidsBig then 0x02 else 0x00) ||| + mdtableVersionMajor // major version of table schemata + mdtableVersionMinor // minor version of table schemata + + ((if stringsBig then 0x01 else 0x00) ||| // bit vector for heap size + (if guidsBig then 0x02 else 0x00) ||| (if blobsBig then 0x04 else 0x00)) 0x01 (* reserved, always 1 *) |] - + tablesBuf.EmitInt32 valid1 tablesBuf.EmitInt32 valid2 tablesBuf.EmitInt32 sorted1 tablesBuf.EmitInt32 sorted2 - - // Numbers of rows in various tables - for rows in sortedTables do - if rows.Length <> 0 then - tablesBuf.EmitInt32 rows.Length - - + + // Numbers of rows in various tables + for rows in sortedTables do + if rows.Length <> 0 then + tablesBuf.EmitInt32 rows.Length + + reportTime showTimes "Write Header of tablebuf" - // The tables themselves + // The tables themselves for rows in sortedTables do - for row in rows do - for x in row do - // Emit the coded token for the array element + for row in rows do + for x in row do + // Emit the coded token for the array element let t = x.Tag let n = x.Val - match t with + match t with | _ when t = RowElementTags.UShort -> tablesBuf.EmitUInt16 (uint16 n) | _ when t = RowElementTags.ULong -> tablesBuf.EmitInt32 n | _ when t = RowElementTags.Data -> recordRequiredDataFixup requiredDataFixups tablesBuf (tablesStreamStart + tablesBuf.Position) (n, false) @@ -3275,8 +3313,8 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca | _ when t <= RowElementTags.HasCustomAttributeMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.HasCustomAttributeMin) 5 hcaBigness n | _ when t <= RowElementTags.HasFieldMarshalMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.HasFieldMarshalMin) 1 hfmBigness n | _ when t <= RowElementTags.HasDeclSecurityMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.HasDeclSecurityMin) 2 hdsBigness n - | _ when t <= RowElementTags.MemberRefParentMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.MemberRefParentMin) 3 mrpBigness n - | _ when t <= RowElementTags.HasSemanticsMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.HasSemanticsMin) 1 hsBigness n + | _ when t <= RowElementTags.MemberRefParentMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.MemberRefParentMin) 3 mrpBigness n + | _ when t <= RowElementTags.HasSemanticsMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.HasSemanticsMin) 1 hsBigness n | _ when t <= RowElementTags.MethodDefOrRefMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.MethodDefOrRefMin) 1 mdorBigness n | _ when t <= RowElementTags.MemberForwardedMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.MemberForwardedMin) 1 mfBigness n | _ when t <= RowElementTags.ImplementationMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.ImplementationMin) 2 iBigness n @@ -3284,13 +3322,13 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca | _ when t <= RowElementTags.ResolutionScopeMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.ResolutionScopeMin) 2 rsBigness n | _ -> failwith "invalid tag in row element" - tablesBuf.Close() + tablesBuf.AsMemory().ToArray() reportTime showTimes "Write Tables to tablebuf" let tablesStreamUnpaddedSize = codedTables.Length - // QUERY: extra 4 empty bytes in array.exe - why? Include some extra padding after - // the tables just in case there is a mistake in the ECMA spec. + // QUERY: extra 4 empty bytes in array.exe - why? Include some extra padding after + // the tables just in case there is a mistake in the ECMA spec. let tablesStreamPaddedSize = align 4 (tablesStreamUnpaddedSize + 4) let tablesChunk, next = chunk tablesStreamPaddedSize next let tablesStreamPadding = tablesChunk.size - tablesStreamUnpaddedSize @@ -3302,25 +3340,25 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca let guidsChunk, next = chunk (0x10 * guids.Length) next let blobsChunk, _next = chunk blobsStreamPaddedSize next let blobsStreamPadding = blobsChunk.size - blobsStreamUnpaddedSize - + reportTime showTimes "Layout Metadata" let metadata, guidStart = - let mdbuf = ByteBuffer.Create 500000 - mdbuf.EmitIntsAsBytes - [| 0x42; 0x53; 0x4a; 0x42 // Magic signature - 0x01; 0x00 // Major version - 0x01; 0x00 // Minor version + use mdbuf = ByteBuffer.Create(MetadataCapacity, useArrayPool = true) + mdbuf.EmitIntsAsBytes + [| 0x42; 0x53; 0x4a; 0x42 // Magic signature + 0x01; 0x00 // Major version + 0x01; 0x00 // Minor version |] - mdbuf.EmitInt32 0x0 // Reserved + mdbuf.EmitInt32 0x0 // Reserved mdbuf.EmitInt32 paddedVersionLength mdbuf.EmitBytes version - for i = 1 to (paddedVersionLength - Array.length version) do + for i = 1 to (paddedVersionLength - Array.length version) do mdbuf.EmitIntAsByte 0x00 - mdbuf.EmitBytes - [| 0x00uy; 0x00uy // flags, reserved + mdbuf.EmitBytes + [| 0x00uy; 0x00uy // flags, reserved b0 numStreams; b1 numStreams; |] mdbuf.EmitInt32 tablesChunk.addr mdbuf.EmitInt32 tablesChunk.size @@ -3337,52 +3375,52 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca mdbuf.EmitInt32 blobsChunk.addr mdbuf.EmitInt32 blobsChunk.size mdbuf.EmitIntsAsBytes [| 0x23; 0x42; 0x6c; 0x6f; 0x62; 0x00; 0x00; 0x00; (* #Blob000 *)|] - + reportTime showTimes "Write Metadata Header" - // Now the coded tables themselves + // Now the coded tables themselves mdbuf.EmitBytes codedTables - for i = 1 to tablesStreamPadding do + for i = 1 to tablesStreamPadding do mdbuf.EmitIntAsByte 0x00 reportTime showTimes "Write Metadata Tables" - // The string stream + // The string stream mdbuf.EmitByte 0x00uy for s in strings do mdbuf.EmitBytes s - for i = 1 to stringsStreamPadding do + for i = 1 to stringsStreamPadding do mdbuf.EmitIntAsByte 0x00 reportTime showTimes "Write Metadata Strings" - // The user string stream + // The user string stream mdbuf.EmitByte 0x00uy for s in userStrings do mdbuf.EmitZ32 (s.Length + 1) mdbuf.EmitBytes s mdbuf.EmitIntAsByte (markerForUnicodeBytes s) - for i = 1 to userStringsStreamPadding do + for i = 1 to userStringsStreamPadding do mdbuf.EmitIntAsByte 0x00 reportTime showTimes "Write Metadata User Strings" - // The GUID stream + // The GUID stream let guidStart = mdbuf.Position Array.iter mdbuf.EmitBytes guids - - // The blob stream + + // The blob stream mdbuf.EmitByte 0x00uy - for s in blobs do + for s in blobs do mdbuf.EmitZ32 s.Length mdbuf.EmitBytes s - for i = 1 to blobsStreamPadding do + for i = 1 to blobsStreamPadding do mdbuf.EmitIntAsByte 0x00 reportTime showTimes "Write Blob Stream" - // Done - close the buffer and return the result. - mdbuf.Close(), guidStart - + // Done - close the buffer and return the result. + mdbuf.AsMemory().ToArray(), guidStart + - // Now we know the user string tables etc. we can fixup the - // uses of strings in the code + // Now we know the user string tables etc. we can fixup the + // uses of strings in the code for (codeStartAddr, l) in requiredStringFixups do - for (codeOffset, userStringIndex) in l do - if codeStartAddr < codep.addr || codeStartAddr >= codep.addr + codep.size then + for (codeOffset, userStringIndex) in l do + if codeStartAddr < codep.addr || codeStartAddr >= codep.addr + codep.size then failwith "strings-in-code fixup: a group of fixups is located outside the code array" let locInCode = ((codeStartAddr + codeOffset) - codep.addr) checkFixup32 code locInCode 0xdeadbeef @@ -3397,17 +3435,17 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca // PHYSICAL METADATA+BLOBS --> PHYSICAL PE FORMAT //--------------------------------------------------------------------- -// THIS LAYS OUT A 2-SECTION .NET PE BINARY -// SECTIONS +// THIS LAYS OUT A 2-SECTION .NET PE BINARY +// SECTIONS // TEXT: physical 0x0200 --> RVA 0x00020000 -// e.g. raw size 0x9600, +// e.g. raw size 0x9600, // e.g. virt size 0x9584 // RELOC: physical 0x9800 --> RVA 0x0000c000 // i.e. physbase --> rvabase // where physbase = textbase + text raw size // phsrva = roundup(0x2000, 0x0002000 + text virt size) -let msdosHeader : byte[] = +let msdosHeader : byte[] = [| 0x4duy; 0x5auy; 0x90uy; 0x00uy; 0x03uy; 0x00uy; 0x00uy; 0x00uy 0x04uy; 0x00uy; 0x00uy; 0x00uy; 0xFFuy; 0xFFuy; 0x00uy; 0x00uy 0xb8uy; 0x00uy; 0x00uy; 0x00uy; 0x00uy; 0x00uy; 0x00uy; 0x00uy @@ -3435,37 +3473,80 @@ let writeInt64 (os: BinaryWriter) x = os.Write (dw6 x) os.Write (dw7 x) -let writeInt32 (os: BinaryWriter) x = +let writeInt32 (os: BinaryWriter) x = os.Write (byte (b0 x)) os.Write (byte (b1 x)) os.Write (byte (b2 x)) - os.Write (byte (b3 x)) + os.Write (byte (b3 x)) -let writeInt32AsUInt16 (os: BinaryWriter) x = +let writeInt32AsUInt16 (os: BinaryWriter) x = os.Write (byte (b0 x)) os.Write (byte (b1 x)) - + let writeDirectory os dict = writeInt32 os (if dict.size = 0x0 then 0x0 else dict.addr) writeInt32 os dict.size -let writeBytes (os: BinaryWriter) (chunk: byte[]) = os.Write(chunk, 0, chunk.Length) +let writeBytes (os: BinaryWriter) (chunk: byte[]) = os.Write(chunk, 0, chunk.Length) + +let rec writeBinaryAndReportMappings (outfile, + ilg: ILGlobals, pdbfile: string option, signer: ILStrongNameSigner option, portablePDB, embeddedPDB, + embedAllSource, embedSourceList, sourceLink, checksumAlgorithm, emitTailcalls, deterministic, showTimes, dumpDebugInfo, pathMap) + modul normalizeAssemblyRefs = + + let stream = + try + // Ensure the output directory exists otherwise it will fail + let dir = FileSystem.GetDirectoryNameShim outfile + if not (FileSystem.DirectoryExistsShim dir) then FileSystem.DirectoryCreateShim dir |> ignore + FileSystem.OpenFileForWriteShim(outfile, FileMode.Create, FileAccess.Write, FileShare.Read) + with _ -> + failwith ("Could not open file for writing (binary mode): " + outfile) + + let pdbData, pdbOpt, debugDirectoryChunk, debugDataChunk, debugChecksumPdbChunk, debugEmbeddedPdbChunk, debugDeterministicPdbChunk, textV2P, mappings = + try + let res = writeBinaryAndReportMappingsAux(stream, false, ilg, pdbfile, signer, portablePDB, embeddedPDB, embedAllSource, embedSourceList, sourceLink, + checksumAlgorithm, emitTailcalls, deterministic, showTimes, pathMap) modul normalizeAssemblyRefs + + try + FileSystemUtilities.setExecutablePermission outfile + with _ -> + () + + res + with + | _ -> + try FileSystem.FileDeleteShim outfile with | _ -> () + reraise() + + writePdb + (dumpDebugInfo, showTimes, portablePDB, embeddedPDB, pdbfile, outfile, signer, deterministic, pathMap) + (pdbData, pdbOpt, debugDirectoryChunk, debugDataChunk, debugChecksumPdbChunk, debugEmbeddedPdbChunk, debugDeterministicPdbChunk, textV2P, mappings) + +and writeBinaryWithNoPdb (stream: Stream, + ilg: ILGlobals, signer: ILStrongNameSigner option, portablePDB, embeddedPDB, + embedAllSource, embedSourceList, sourceLink, checksumAlgorithm, emitTailcalls, deterministic, showTimes, pathMap) + modul normalizeAssemblyRefs = + + writeBinaryAndReportMappingsAux(stream, true, ilg, None, signer, portablePDB, embeddedPDB, embedAllSource, embedSourceList, sourceLink, + checksumAlgorithm, emitTailcalls, deterministic, showTimes, pathMap) modul normalizeAssemblyRefs + |> ignore -let writeBinaryAndReportMappings (outfile, - ilg: ILGlobals, pdbfile: string option, signer: ILStrongNameSigner option, portablePDB, embeddedPDB, - embedAllSource, embedSourceList, sourceLink, checksumAlgorithm, emitTailcalls, deterministic, showTimes, dumpDebugInfo, pathMap) - modul normalizeAssemblyRefs = - // Store the public key from the signer into the manifest. This means it will be written - // to the binary and also acts as an indicator to leave space for delay sign +and writeBinaryAndReportMappingsAux (stream: Stream, leaveStreamOpen: bool, + ilg: ILGlobals, pdbfile: string option, signer: ILStrongNameSigner option, portablePDB, embeddedPDB, + embedAllSource, embedSourceList, sourceLink, checksumAlgorithm, emitTailcalls, deterministic, showTimes, pathMap) + modul normalizeAssemblyRefs = + // Store the public key from the signer into the manifest. This means it will be written + // to the binary and also acts as an indicator to leave space for delay sign reportTime showTimes "Write Started" let isDll = modul.IsDLL - - let signer = + + let signer = match signer, modul.Manifest with | Some _, _ -> signer | _, None -> signer - | None, Some {PublicKey=Some pubkey} -> + | None, Some {PublicKey=Some pubkey} -> (dprintn "Note: The output assembly will be delay-signed using the original public" dprintn "Note: key. In order to load it you will need to either sign it with" dprintn "Note: the original private key or to turn off strong-name verification" @@ -3476,93 +3557,86 @@ let writeBinaryAndReportMappings (outfile, Some (ILStrongNameSigner.OpenPublicKey pubkey)) | _ -> signer - let modul = + let modul = let pubkey = - match signer with + match signer with | None -> None - | Some s -> - try Some s.PublicKey - with e -> + | Some s -> + try Some s.PublicKey + with e -> failwith ("A call to StrongNameGetPublicKey failed ("+e.Message+")") None - begin match modul.Manifest with - | None -> () - | Some m -> - if m.PublicKey <> None && m.PublicKey <> pubkey then + begin match modul.Manifest with + | None -> () + | Some m -> + if m.PublicKey <> None && m.PublicKey <> pubkey then dprintn "Warning: The output assembly is being signed or delay-signed with a strong name that is different to the original." end { modul with Manifest = match modul.Manifest with None -> None | Some m -> Some {m with PublicKey = pubkey} } - let os = - try - // Ensure the output directory exists otherwise it will fail - let dir = Path.GetDirectoryName outfile - if not (Directory.Exists dir) then Directory.CreateDirectory dir |>ignore - new BinaryWriter(FileSystem.FileStreamCreateShim outfile) - with e -> - failwith ("Could not open file for writing (binary mode): " + outfile) + let os = new BinaryWriter(stream, System.Text.Encoding.UTF8, leaveOpen=leaveStreamOpen) let pdbData, pdbOpt, debugDirectoryChunk, debugDataChunk, debugChecksumPdbChunk, debugEmbeddedPdbChunk, debugDeterministicPdbChunk, textV2P, mappings = - try + try let imageBaseReal = modul.ImageBase // FIXED CHOICE let alignVirt = modul.VirtualAlignment // FIXED CHOICE let alignPhys = modul.PhysicalAlignment // FIXED CHOICE - + let isItanium = modul.Platform = Some IA64 - - let numSections = 3 // .text, .sdata, .reloc + let numSections = 3 // .text, .sdata, .reloc - // HEADERS + + // HEADERS let next = 0x0 let headerSectionPhysLoc = 0x0 let headerAddr = next let next = headerAddr - + let msdosHeaderSize = 0x80 let msdosHeaderChunk, next = chunk msdosHeaderSize next - + let peSignatureSize = 0x04 let peSignatureChunk, next = chunk peSignatureSize next - + let peFileHeaderSize = 0x14 let peFileHeaderChunk, next = chunk peFileHeaderSize next - + let peOptionalHeaderSize = if modul.Is64Bit then 0xf0 else 0xe0 let peOptionalHeaderChunk, next = chunk peOptionalHeaderSize next - + let textSectionHeaderSize = 0x28 let textSectionHeaderChunk, next = chunk textSectionHeaderSize next - + let dataSectionHeaderSize = 0x28 let dataSectionHeaderChunk, next = chunk dataSectionHeaderSize next - + let relocSectionHeaderSize = 0x28 let relocSectionHeaderChunk, next = chunk relocSectionHeaderSize next - + let headerSize = next - headerAddr let nextPhys = align alignPhys (headerSectionPhysLoc + headerSize) let headerSectionPhysSize = nextPhys - headerSectionPhysLoc let next = align alignVirt (headerAddr + headerSize) - - // TEXT SECTION: 8 bytes IAT table 72 bytes CLI header + + // TEXT SECTION: 8 bytes IAT table 72 bytes CLI header let textSectionPhysLoc = nextPhys let textSectionAddr = next let next = textSectionAddr - + let importAddrTableChunk, next = chunk 0x08 next let cliHeaderPadding = (if isItanium then (align 16 next) else next) - next let next = next + cliHeaderPadding let cliHeaderChunk, next = chunk 0x48 next - - let desiredMetadataVersion = + + let desiredMetadataVersion = if modul.MetadataVersion <> "" then parseILVersion modul.MetadataVersion else - match ilg.primaryAssemblyScopeRef with - | ILScopeRef.Local -> failwith "Expected mscorlib to be ILScopeRef.Assembly was ILScopeRef.Local" + match ilg.primaryAssemblyScopeRef with + | ILScopeRef.Local -> failwith "Expected mscorlib to be ILScopeRef.Assembly was ILScopeRef.Local" | ILScopeRef.Module(_) -> failwith "Expected mscorlib to be ILScopeRef.Assembly was ILScopeRef.Module" | ILScopeRef.PrimaryAssembly -> failwith "Expected mscorlib to be ILScopeRef.Assembly was ILScopeRef.PrimaryAssembly" | ILScopeRef.Assembly aref -> @@ -3577,16 +3651,16 @@ let writeBinaryAndReportMappings (outfile, reportTime showTimes "Generated IL and metadata" let _codeChunk, next = chunk code.Length next let _codePaddingChunk, next = chunk codePadding.Length next - + let metadataChunk, next = chunk metadata.Length next - - let strongnameChunk, next = - match signer with + + let strongnameChunk, next = + match signer with | None -> nochunk next | Some s -> chunk s.SignatureSize next let resourcesChunk, next = chunk resources.Length next - + let rawdataChunk, next = chunk data.Length next let vtfixupsChunk, next = nochunk next // Note: only needed for mixed mode assemblies @@ -3600,15 +3674,15 @@ let writeBinaryAndReportMappings (outfile, let next = align 0x10 (next + 0x05) - 0x05 let importTableChunk = { addr=importTableChunk.addr; size = next - importTableChunk.addr} let importTableChunkPadding = importTableChunk.size - (0x28 + 0x14 + 0x0e + 0x0c) - + let next = next + 0x03 let entrypointCodeChunk, next = chunk 0x06 next let globalpointerCodeChunk, next = chunk (if isItanium then 0x8 else 0x0) next let pdbOpt = match portablePDB with - | true -> - let (uncompressedLength, contentId, stream, algorithmName, checkSum) as pdbStream = + | true -> + let (uncompressedLength, contentId, stream, algorithmName, checkSum) as pdbStream = generatePortablePdb embedAllSource embedSourceList sourceLink checksumAlgorithm showTimes pdbData pathMap if embeddedPDB then @@ -3627,15 +3701,15 @@ let writeBinaryAndReportMappings (outfile, (if deterministic then sizeof_IMAGE_DEBUG_DIRECTORY else 0) ) next - // The debug data is given to us by the PDB writer and appears to - // typically be the type of the data plus the PDB file name. We fill - // this in after we've written the binary. We approximate the size according - // to what PDB writers seem to require and leave extra space just in case... + // The debug data is given to us by the PDB writer and appears to + // typically be the type of the data plus the PDB file name. We fill + // this in after we've written the binary. We approximate the size according + // to what PDB writers seem to require and leave extra space just in case... let debugDataJustInCase = 40 let debugDataChunk, next = - chunk (align 0x4 (match pdbfile with + chunk (align 0x4 (match pdbfile with | None -> 0 - | Some f -> (24 + | Some f -> (24 + System.Text.Encoding.Unicode.GetByteCount f // See bug 748444 + debugDataJustInCase))) next @@ -3649,18 +3723,18 @@ let writeBinaryAndReportMappings (outfile, let debugEmbeddedPdbChunk, next = if embeddedPDB then - let streamLength = + let streamLength = match pdbOpt with | Some (_, _, stream, _, _) -> int stream.Length | None -> 0 - chunk (align 0x4 (match embeddedPDB with + chunk (align 0x4 (match embeddedPDB with | true -> 8 + streamLength | _ -> 0 )) next else nochunk next let debugDeterministicPdbChunk, next = - if deterministic then emptychunk next + if deterministic then emptychunk next else nochunk next @@ -3681,7 +3755,8 @@ let writeBinaryAndReportMappings (outfile, resources |> List.map (function | ILNativeResource.Out bytes -> bytes | ILNativeResource.In (fileName, linkedResourceBase, start, len) -> - let linkedResource = File.ReadBinaryChunk (fileName, start, len) + use stream = FileSystem.OpenFileForReadShim(fileName) + let linkedResource = stream.ReadBytes(start, len) unlinkResource linkedResourceBase linkedResource) begin @@ -3692,15 +3767,15 @@ let writeBinaryAndReportMappings (outfile, let nativeResourcesSize = nativeResources.Length let nativeResourcesChunk, next = chunk nativeResourcesSize next - + let dummydatap, next = chunk (if next = dataSectionAddr then 0x01 else 0x0) next - + let dataSectionSize = next - dataSectionAddr let nextPhys = align alignPhys (dataSectionPhysLoc + dataSectionSize) let dataSectionPhysSize = nextPhys - dataSectionPhysLoc let next = align alignVirt (dataSectionAddr + dataSectionSize) - - // .RELOC SECTION base reloc table: 0x0c size + + // .RELOC SECTION base reloc table: 0x0c size let relocSectionPhysLoc = nextPhys let relocSectionAddr = next let baseRelocTableChunk, next = chunk 0x0c next @@ -3710,51 +3785,51 @@ let writeBinaryAndReportMappings (outfile, let relocSectionPhysSize = nextPhys - relocSectionPhysLoc let next = align alignVirt (relocSectionAddr + relocSectionSize) - // Now we know where the data section lies we can fix up the - // references into the data section from the metadata tables. - begin + // Now we know where the data section lies we can fix up the + // references into the data section from the metadata tables. + begin requiredDataFixups |> List.iter - (fun (metadataOffset32, (dataOffset, kind)) -> + (fun (metadataOffset32, (dataOffset, kind)) -> let metadataOffset = metadataOffset32 if metadataOffset < 0 || metadataOffset >= metadata.Length - 4 then failwith "data RVA fixup: fixup located outside metadata" checkFixup32 metadata metadataOffset 0xdeaddddd - let dataRva = + let dataRva = if kind then let res = dataOffset if res >= resourcesChunk.size then dprintn ("resource offset bigger than resource data section") res - else + else let res = rawdataChunk.addr + dataOffset if res < rawdataChunk.addr then dprintn ("data rva before data section") - if res >= rawdataChunk.addr + rawdataChunk.size then + if res >= rawdataChunk.addr + rawdataChunk.size then dprintn ("data rva after end of data section, dataRva = "+string res+", rawdataChunk.addr = "+string rawdataChunk.addr + ", rawdataChunk.size = "+string rawdataChunk.size) res applyFixup32 metadata metadataOffset dataRva) end - - // IMAGE TOTAL SIZE + + // IMAGE TOTAL SIZE let imageEndSectionPhysLoc = nextPhys let imageEndAddr = next reportTime showTimes "Layout image" - let write p (os: BinaryWriter) chunkName chunk = - match p with - | None -> () - | Some pExpected -> + let write p (os: BinaryWriter) chunkName chunk = + match p with + | None -> () + | Some pExpected -> os.Flush() let pCurrent = int32 os.BaseStream.Position - if pCurrent <> pExpected then - failwith ("warning: "+chunkName+" not where expected, pCurrent = "+string pCurrent+", p.addr = "+string pExpected) - writeBytes os chunk + if pCurrent <> pExpected then + failwith ("warning: "+chunkName+" not where expected, pCurrent = "+string pCurrent+", p.addr = "+string pExpected) + writeBytes os chunk let writePadding (os: BinaryWriter) _comment sz = if sz < 0 then failwith "writePadding: size < 0" - for i = 0 to sz - 1 do + for i = 0 to sz - 1 do os.Write 0uy - // Now we've computed all the offsets, write the image + // Now we've computed all the offsets, write the image write (Some msdosHeaderChunk.addr) os "msdos header" msdosHeader @@ -3765,11 +3840,11 @@ let writeBinaryAndReportMappings (outfile, write (Some peFileHeaderChunk.addr) os "pe file header" [| |] if (modul.Platform = Some AMD64) then - writeInt32AsUInt16 os 0x8664 // Machine - IMAGE_FILE_MACHINE_AMD64 + writeInt32AsUInt16 os 0x8664 // Machine - IMAGE_FILE_MACHINE_AMD64 elif isItanium then writeInt32AsUInt16 os 0x200 else - writeInt32AsUInt16 os 0x014c // Machine - IMAGE_FILE_MACHINE_I386 + writeInt32AsUInt16 os 0x014c // Machine - IMAGE_FILE_MACHINE_I386 writeInt32AsUInt16 os numSections @@ -3794,7 +3869,7 @@ let writeBinaryAndReportMappings (outfile, Array.blit final 0 metadata guidStart 16 // Use last 4 bytes for timestamp - High bit set, to stop tool chains becoming confused - let timestamp = int final.[16] ||| (int final.[17] <<< 8) ||| (int final.[18] <<< 16) ||| (int (final.[19] ||| 128uy) <<< 24) + let timestamp = int final.[16] ||| (int final.[17] <<< 8) ||| (int final.[18] <<< 16) ||| (int (final.[19] ||| 128uy) <<< 24) writeInt32 os timestamp // Update pdbData with new guid and timestamp. Portable and embedded PDBs don't need the ModuleID @@ -3804,229 +3879,229 @@ let writeBinaryAndReportMappings (outfile, writeInt32 os timestamp // date since 1970 pdbData - writeInt32 os 0x00 // Pointer to Symbol Table Always 0 - // 00000090 - writeInt32 os 0x00 // Number of Symbols Always 0 - writeInt32AsUInt16 os peOptionalHeaderSize // Size of the optional header, the format is described below. - + writeInt32 os 0x00 // Pointer to Symbol Table Always 0 + // 00000090 + writeInt32 os 0x00 // Number of Symbols Always 0 + writeInt32AsUInt16 os peOptionalHeaderSize // Size of the optional header, the format is described below. + // 64bit: IMAGE_FILE_32BIT_MACHINE ||| IMAGE_FILE_LARGE_ADDRESS_AWARE // 32bit: IMAGE_FILE_32BIT_MACHINE // Yes, 32BIT_MACHINE is set for AMD64... let iMachineCharacteristic = match modul.Platform with | Some IA64 -> 0x20 | Some AMD64 -> 0x0120 | _ -> 0x0100 - + writeInt32AsUInt16 os ((if isDll then 0x2000 else 0x0000) ||| 0x0002 ||| 0x0004 ||| 0x0008 ||| iMachineCharacteristic) - - // Now comes optional header + + // Now comes optional header let peOptionalHeaderByte = peOptionalHeaderByteByCLRVersion desiredMetadataVersion write (Some peOptionalHeaderChunk.addr) os "pe optional header" [| |] if modul.Is64Bit then - writeInt32AsUInt16 os 0x020B // Magic number is 0x020B for 64-bit + writeInt32AsUInt16 os 0x020B // Magic number is 0x020B for 64-bit else - writeInt32AsUInt16 os 0x010b // Always 0x10B (see Section 23.1). - writeInt32AsUInt16 os peOptionalHeaderByte // ECMA spec says 6, some binaries, e.g. fscmanaged.exe say 7, Whidbey binaries say 8 - writeInt32 os textSectionPhysSize // Size of the code (text) section, or the sum of all code sections if there are multiple sections. - // 000000a0 + writeInt32AsUInt16 os 0x010b // Always 0x10B (see Section 23.1). + writeInt32AsUInt16 os peOptionalHeaderByte // ECMA spec says 6, some binaries, e.g. fscmanaged.exe say 7, Whidbey binaries say 8 + writeInt32 os textSectionPhysSize // Size of the code (text) section, or the sum of all code sections if there are multiple sections. + // 000000a0 writeInt32 os dataSectionPhysSize // Size of the initialized data section writeInt32 os 0x00 // Size of the uninitialized data section - writeInt32 os entrypointCodeChunk.addr // RVA of entry point, needs to point to bytes 0xFF 0x25 followed by the RVA+!0x4000000 - writeInt32 os textSectionAddr // e.g. 0x0002000 - // 000000b0 + writeInt32 os entrypointCodeChunk.addr // RVA of entry point, needs to point to bytes 0xFF 0x25 followed by the RVA+!0x4000000 + writeInt32 os textSectionAddr // e.g. 0x0002000 + // 000000b0 if modul.Is64Bit then - writeInt64 os ((int64)imageBaseReal) // REVIEW: For 64-bit, we should use a 64-bit image base - else - writeInt32 os dataSectionAddr // e.g. 0x0000c000 - writeInt32 os imageBaseReal // Image Base Always 0x400000 (see Section 23.1). - QUERY : no it's not always 0x400000, e.g. 0x034f0000 - - writeInt32 os alignVirt // Section Alignment Always 0x2000 (see Section 23.1). - writeInt32 os alignPhys // File Alignment Either 0x200 or 0x1000. - // 000000c0 - writeInt32AsUInt16 os 0x04 // OS Major Always 4 (see Section 23.1). - writeInt32AsUInt16 os 0x00 // OS Minor Always 0 (see Section 23.1). - writeInt32AsUInt16 os 0x00 // User Major Always 0 (see Section 23.1). - writeInt32AsUInt16 os 0x00 // User Minor Always 0 (see Section 23.1). + writeInt64 os ((int64)imageBaseReal) // REVIEW: For 64-bit, we should use a 64-bit image base + else + writeInt32 os dataSectionAddr // e.g. 0x0000c000 + writeInt32 os imageBaseReal // Image Base Always 0x400000 (see Section 23.1). - QUERY : no it's not always 0x400000, e.g. 0x034f0000 + + writeInt32 os alignVirt // Section Alignment Always 0x2000 (see Section 23.1). + writeInt32 os alignPhys // File Alignment Either 0x200 or 0x1000. + // 000000c0 + writeInt32AsUInt16 os 0x04 // OS Major Always 4 (see Section 23.1). + writeInt32AsUInt16 os 0x00 // OS Minor Always 0 (see Section 23.1). + writeInt32AsUInt16 os 0x00 // User Major Always 0 (see Section 23.1). + writeInt32AsUInt16 os 0x00 // User Minor Always 0 (see Section 23.1). do let (major, minor) = modul.SubsystemVersion writeInt32AsUInt16 os major writeInt32AsUInt16 os minor - writeInt32 os 0x00 // Reserved Always 0 (see Section 23.1). - // 000000d0 + writeInt32 os 0x00 // Reserved Always 0 (see Section 23.1). + // 000000d0 writeInt32 os imageEndAddr // Image Size: Size, in bytes, of image, including all headers and padding writeInt32 os headerSectionPhysSize // Header Size Combined size of MS-DOS Header, PE Header, PE Optional Header and padding - writeInt32 os 0x00 // File Checksum Always 0 (see Section 23.1). QUERY: NOT ALWAYS ZERO + writeInt32 os 0x00 // File Checksum Always 0 (see Section 23.1). QUERY: NOT ALWAYS ZERO writeInt32AsUInt16 os modul.SubSystemFlags // SubSystem Subsystem required to run this image. // DLL Flags Always 0x400 (no unmanaged windows exception handling - see Section 23.1). - // Itanium: see notes at end of file - // IMAGE_DLLCHARACTERISTICS_NX_COMPAT: See FSharp 1.0 bug 5019 and http://blogs.msdn.com/ed_maurer/archive/2007/12/14/nxcompat-and-the-c-compiler.aspx + // Itanium: see notes at end of file + // IMAGE_DLLCHARACTERISTICS_NX_COMPAT: See FSharp 1.0 bug 5019 and http://blogs.msdn.com/ed_maurer/archive/2007/12/14/nxcompat-and-the-c-compiler.aspx // Itanium : IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE | IMAGE_DLLCHARACTERISTICS_ NO_SEH | IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE | IMAGE_DLLCHARACTERISTICS_NX_COMPAT // x86 : IMAGE_DLLCHARACTERISTICS_ NO_SEH | IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE | IMAGE_DLLCHARACTERISTICS_NX_COMPAT // x64 : IMAGE_DLLCHARACTERISTICS_ NO_SEH | IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE | IMAGE_DLLCHARACTERISTICS_NX_COMPAT - let dllCharacteristics = - let flags = + let dllCharacteristics = + let flags = if modul.Is64Bit then (if isItanium then 0x8540 else 0x540) else 0x540 if modul.UseHighEntropyVA then flags ||| 0x20 // IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA else flags writeInt32AsUInt16 os dllCharacteristics - // 000000e0 + // 000000e0 // Note that the defaults differ between x86 and x64 if modul.Is64Bit then let size = defaultArg modul.StackReserveSize 0x400000 |> int64 - writeInt64 os size // Stack Reserve Size Always 0x400000 (4Mb) (see Section 23.1). - writeInt64 os 0x4000L // Stack Commit Size Always 0x4000 (16Kb) (see Section 23.1). - writeInt64 os 0x100000L // Heap Reserve Size Always 0x100000 (1Mb) (see Section 23.1). - writeInt64 os 0x2000L // Heap Commit Size Always 0x800 (8Kb) (see Section 23.1). + writeInt64 os size // Stack Reserve Size Always 0x400000 (4Mb) (see Section 23.1). + writeInt64 os 0x4000L // Stack Commit Size Always 0x4000 (16Kb) (see Section 23.1). + writeInt64 os 0x100000L // Heap Reserve Size Always 0x100000 (1Mb) (see Section 23.1). + writeInt64 os 0x2000L // Heap Commit Size Always 0x800 (8Kb) (see Section 23.1). else let size = defaultArg modul.StackReserveSize 0x100000 - writeInt32 os size // Stack Reserve Size Always 0x100000 (1Mb) (see Section 23.1). - writeInt32 os 0x1000 // Stack Commit Size Always 0x1000 (4Kb) (see Section 23.1). - writeInt32 os 0x100000 // Heap Reserve Size Always 0x100000 (1Mb) (see Section 23.1). - writeInt32 os 0x1000 // Heap Commit Size Always 0x1000 (4Kb) (see Section 23.1). - // 000000f0 - x86 location, moving on, for x64, add 0x10 - writeInt32 os 0x00 // Loader Flags Always 0 (see Section 23.1) - writeInt32 os 0x10 // Number of Data Directories: Always 0x10 (see Section 23.1). - writeInt32 os 0x00 - writeInt32 os 0x00 // Export Table Always 0 (see Section 23.1). - // 00000100 - writeDirectory os importTableChunk // Import Table RVA of Import Table, (see clause 24.3.1). e.g. 0000b530 - // Native Resource Table: ECMA says Always 0 (see Section 23.1), but mscorlib and other files with resources bound into executable do not. + writeInt32 os size // Stack Reserve Size Always 0x100000 (1Mb) (see Section 23.1). + writeInt32 os 0x1000 // Stack Commit Size Always 0x1000 (4Kb) (see Section 23.1). + writeInt32 os 0x100000 // Heap Reserve Size Always 0x100000 (1Mb) (see Section 23.1). + writeInt32 os 0x1000 // Heap Commit Size Always 0x1000 (4Kb) (see Section 23.1). + // 000000f0 - x86 location, moving on, for x64, add 0x10 + writeInt32 os 0x00 // Loader Flags Always 0 (see Section 23.1) + writeInt32 os 0x10 // Number of Data Directories: Always 0x10 (see Section 23.1). + writeInt32 os 0x00 + writeInt32 os 0x00 // Export Table Always 0 (see Section 23.1). + // 00000100 + writeDirectory os importTableChunk // Import Table RVA of Import Table, (see clause 24.3.1). e.g. 0000b530 + // Native Resource Table: ECMA says Always 0 (see Section 23.1), but mscorlib and other files with resources bound into executable do not. writeDirectory os nativeResourcesChunk - // 00000110 - writeInt32 os 0x00 // Exception Table Always 0 (see Section 23.1). - writeInt32 os 0x00 // Exception Table Always 0 (see Section 23.1). - writeInt32 os 0x00 // Certificate Table Always 0 (see Section 23.1). - writeInt32 os 0x00 // Certificate Table Always 0 (see Section 23.1). - // 00000120 - writeDirectory os baseRelocTableChunk - writeDirectory os debugDirectoryChunk // Debug Directory - // 00000130 - writeInt32 os 0x00 // Copyright Always 0 (see Section 23.1). - writeInt32 os 0x00 // Copyright Always 0 (see Section 23.1). - writeInt32 os 0x00 // Global Ptr Always 0 (see Section 23.1). - writeInt32 os 0x00 // Global Ptr Always 0 (see Section 23.1). - // 00000140 - writeInt32 os 0x00 // Load Config Table Always 0 (see Section 23.1). - writeInt32 os 0x00 // Load Config Table Always 0 (see Section 23.1). - writeInt32 os 0x00 // TLS Table Always 0 (see Section 23.1). - writeInt32 os 0x00 // TLS Table Always 0 (see Section 23.1). - // 00000150 - writeInt32 os 0x00 // Bound Import Always 0 (see Section 23.1). - writeInt32 os 0x00 // Bound Import Always 0 (see Section 23.1). - writeDirectory os importAddrTableChunk // Import Addr Table, (see clause 24.3.1). e.g. 0x00002000 - // 00000160 - writeInt32 os 0x00 // Delay Import Descriptor Always 0 (see Section 23.1). - writeInt32 os 0x00 // Delay Import Descriptor Always 0 (see Section 23.1). + // 00000110 + writeInt32 os 0x00 // Exception Table Always 0 (see Section 23.1). + writeInt32 os 0x00 // Exception Table Always 0 (see Section 23.1). + writeInt32 os 0x00 // Certificate Table Always 0 (see Section 23.1). + writeInt32 os 0x00 // Certificate Table Always 0 (see Section 23.1). + // 00000120 + writeDirectory os baseRelocTableChunk + writeDirectory os debugDirectoryChunk // Debug Directory + // 00000130 + writeInt32 os 0x00 // Copyright Always 0 (see Section 23.1). + writeInt32 os 0x00 // Copyright Always 0 (see Section 23.1). + writeInt32 os 0x00 // Global Ptr Always 0 (see Section 23.1). + writeInt32 os 0x00 // Global Ptr Always 0 (see Section 23.1). + // 00000140 + writeInt32 os 0x00 // Load Config Table Always 0 (see Section 23.1). + writeInt32 os 0x00 // Load Config Table Always 0 (see Section 23.1). + writeInt32 os 0x00 // TLS Table Always 0 (see Section 23.1). + writeInt32 os 0x00 // TLS Table Always 0 (see Section 23.1). + // 00000150 + writeInt32 os 0x00 // Bound Import Always 0 (see Section 23.1). + writeInt32 os 0x00 // Bound Import Always 0 (see Section 23.1). + writeDirectory os importAddrTableChunk // Import Addr Table, (see clause 24.3.1). e.g. 0x00002000 + // 00000160 + writeInt32 os 0x00 // Delay Import Descriptor Always 0 (see Section 23.1). + writeInt32 os 0x00 // Delay Import Descriptor Always 0 (see Section 23.1). writeDirectory os cliHeaderChunk - // 00000170 - writeInt32 os 0x00 // Reserved Always 0 (see Section 23.1). - writeInt32 os 0x00 // Reserved Always 0 (see Section 23.1). - + // 00000170 + writeInt32 os 0x00 // Reserved Always 0 (see Section 23.1). + writeInt32 os 0x00 // Reserved Always 0 (see Section 23.1). + write (Some textSectionHeaderChunk.addr) os "text section header" [| |] - - // 00000178 - writeBytes os [| 0x2euy; 0x74uy; 0x65uy; 0x78uy; 0x74uy; 0x00uy; 0x00uy; 0x00uy; |] // ".text\000\000\000" - // 00000180 - writeInt32 os textSectionSize // VirtualSize: Total size of the section when loaded into memory in bytes rounded to Section Alignment. + + // 00000178 + writeBytes os [| 0x2euy; 0x74uy; 0x65uy; 0x78uy; 0x74uy; 0x00uy; 0x00uy; 0x00uy; |] // ".text\000\000\000" + // 00000180 + writeInt32 os textSectionSize // VirtualSize: Total size of the section when loaded into memory in bytes rounded to Section Alignment. writeInt32 os textSectionAddr // VirtualAddress For executable images this is the address of the first byte of the section writeInt32 os textSectionPhysSize // SizeOfRawData Size of the initialized data on disk in bytes - writeInt32 os textSectionPhysLoc // PointerToRawData RVA to section's first page within the PE file. - // 00000190 - writeInt32 os 0x00 // PointerToRelocations RVA of Relocation section. - writeInt32 os 0x00 // PointerToLineNumbers Always 0 (see Section 23.1). - // 00000198 - writeInt32AsUInt16 os 0x00// NumberOfRelocations Number of relocations, set to 0 if unused. - writeInt32AsUInt16 os 0x00 // NumberOfLinenumbers Always 0 (see Section 23.1). - writeBytes os [| 0x20uy; 0x00uy; 0x00uy; 0x60uy |] // Characteristics Flags IMAGE_SCN_CNT_CODE || IMAGE_SCN_MEM_EXECUTE || IMAGE_SCN_MEM_READ - + writeInt32 os textSectionPhysLoc // PointerToRawData RVA to section's first page within the PE file. + // 00000190 + writeInt32 os 0x00 // PointerToRelocations RVA of Relocation section. + writeInt32 os 0x00 // PointerToLineNumbers Always 0 (see Section 23.1). + // 00000198 + writeInt32AsUInt16 os 0x00// NumberOfRelocations Number of relocations, set to 0 if unused. + writeInt32AsUInt16 os 0x00 // NumberOfLinenumbers Always 0 (see Section 23.1). + writeBytes os [| 0x20uy; 0x00uy; 0x00uy; 0x60uy |] // Characteristics Flags IMAGE_SCN_CNT_CODE || IMAGE_SCN_MEM_EXECUTE || IMAGE_SCN_MEM_READ + write (Some dataSectionHeaderChunk.addr) os "data section header" [| |] - - // 000001a0 - writeBytes os [| 0x2euy; 0x72uy; 0x73uy; 0x72uy; 0x63uy; 0x00uy; 0x00uy; 0x00uy; |] // ".rsrc\000\000\000" - // writeBytes os [| 0x2e; 0x73; 0x64; 0x61; 0x74; 0x61; 0x00; 0x00; |] // ".sdata\000\000" - writeInt32 os dataSectionSize // VirtualSize: Total size of the section when loaded into memory in bytes rounded to Section Alignment. + + // 000001a0 + writeBytes os [| 0x2euy; 0x72uy; 0x73uy; 0x72uy; 0x63uy; 0x00uy; 0x00uy; 0x00uy; |] // ".rsrc\000\000\000" + // writeBytes os [| 0x2e; 0x73; 0x64; 0x61; 0x74; 0x61; 0x00; 0x00; |] // ".sdata\000\000" + writeInt32 os dataSectionSize // VirtualSize: Total size of the section when loaded into memory in bytes rounded to Section Alignment. writeInt32 os dataSectionAddr // VirtualAddress For executable images this is the address of the first byte of the section. - // 000001b0 - writeInt32 os dataSectionPhysSize // SizeOfRawData Size of the initialized data on disk in bytes, - writeInt32 os dataSectionPhysLoc // PointerToRawData QUERY: Why does ECMA say "RVA" here? Offset to section's first page within the PE file. - // 000001b8 - writeInt32 os 0x00 // PointerToRelocations RVA of Relocation section. - writeInt32 os 0x00 // PointerToLineNumbers Always 0 (see Section 23.1). - // 000001c0 - writeInt32AsUInt16 os 0x00 // NumberOfRelocations Number of relocations, set to 0 if unused. - writeInt32AsUInt16 os 0x00 // NumberOfLinenumbers Always 0 (see Section 23.1). - writeBytes os [| 0x40uy; 0x00uy; 0x00uy; 0x40uy |] // Characteristics Flags: IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA - + // 000001b0 + writeInt32 os dataSectionPhysSize // SizeOfRawData Size of the initialized data on disk in bytes, + writeInt32 os dataSectionPhysLoc // PointerToRawData QUERY: Why does ECMA say "RVA" here? Offset to section's first page within the PE file. + // 000001b8 + writeInt32 os 0x00 // PointerToRelocations RVA of Relocation section. + writeInt32 os 0x00 // PointerToLineNumbers Always 0 (see Section 23.1). + // 000001c0 + writeInt32AsUInt16 os 0x00 // NumberOfRelocations Number of relocations, set to 0 if unused. + writeInt32AsUInt16 os 0x00 // NumberOfLinenumbers Always 0 (see Section 23.1). + writeBytes os [| 0x40uy; 0x00uy; 0x00uy; 0x40uy |] // Characteristics Flags: IMAGE_SCN_MEM_READ | IMAGE_SCN_CNT_INITIALIZED_DATA + write (Some relocSectionHeaderChunk.addr) os "reloc section header" [| |] - // 000001a0 - writeBytes os [| 0x2euy; 0x72uy; 0x65uy; 0x6cuy; 0x6fuy; 0x63uy; 0x00uy; 0x00uy; |] // ".reloc\000\000" - writeInt32 os relocSectionSize // VirtualSize: Total size of the section when loaded into memory in bytes rounded to Section Alignment. + // 000001a0 + writeBytes os [| 0x2euy; 0x72uy; 0x65uy; 0x6cuy; 0x6fuy; 0x63uy; 0x00uy; 0x00uy; |] // ".reloc\000\000" + writeInt32 os relocSectionSize // VirtualSize: Total size of the section when loaded into memory in bytes rounded to Section Alignment. writeInt32 os relocSectionAddr // VirtualAddress For executable images this is the address of the first byte of the section. - // 000001b0 + // 000001b0 writeInt32 os relocSectionPhysSize // SizeOfRawData Size of the initialized reloc on disk in bytes writeInt32 os relocSectionPhysLoc // PointerToRawData QUERY: Why does ECMA say "RVA" here? Offset to section's first page within the PE file. - // 000001b8 - writeInt32 os 0x00 // PointerToRelocations RVA of Relocation section. - writeInt32 os 0x00 // PointerToLineNumbers Always 0 (see Section 23.1). - // 000001c0 - writeInt32AsUInt16 os 0x00 // NumberOfRelocations Number of relocations, set to 0 if unused. - writeInt32AsUInt16 os 0x00 // NumberOfLinenumbers Always 0 (see Section 23.1). - writeBytes os [| 0x40uy; 0x00uy; 0x00uy; 0x42uy |] // Characteristics Flags: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | - + // 000001b8 + writeInt32 os 0x00 // PointerToRelocations RVA of Relocation section. + writeInt32 os 0x00 // PointerToLineNumbers Always 0 (see Section 23.1). + // 000001c0 + writeInt32AsUInt16 os 0x00 // NumberOfRelocations Number of relocations, set to 0 if unused. + writeInt32AsUInt16 os 0x00 // NumberOfLinenumbers Always 0 (see Section 23.1). + writeBytes os [| 0x40uy; 0x00uy; 0x00uy; 0x42uy |] // Characteristics Flags: IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | + writePadding os "pad to text begin" (textSectionPhysLoc - headerSize) - - // TEXT SECTION: e.g. 0x200 - + + // TEXT SECTION: e.g. 0x200 + let textV2P v = v - textSectionAddr + textSectionPhysLoc - - // e.g. 0x0200 + + // e.g. 0x0200 write (Some (textV2P importAddrTableChunk.addr)) os "import addr table" [| |] - writeInt32 os importNameHintTableChunk.addr - writeInt32 os 0x00 // QUERY 4 bytes of zeros not 2 like ECMA 24.3.1 says - - // e.g. 0x0208 - - let flags = - (if modul.IsILOnly then 0x01 else 0x00) ||| - (if modul.Is32Bit then 0x02 else 0x00) ||| - (if modul.Is32BitPreferred then 0x00020003 else 0x00) ||| + writeInt32 os importNameHintTableChunk.addr + writeInt32 os 0x00 // QUERY 4 bytes of zeros not 2 like ECMA 24.3.1 says + + // e.g. 0x0208 + + let flags = + (if modul.IsILOnly then 0x01 else 0x00) ||| + (if modul.Is32Bit then 0x02 else 0x00) ||| + (if modul.Is32BitPreferred then 0x00020003 else 0x00) ||| (if (match signer with None -> false | Some s -> s.IsFullySigned) then 0x08 else 0x00) let headerVersionMajor, headerVersionMinor = headerVersionSupportedByCLRVersion desiredMetadataVersion - writePadding os "pad to cli header" cliHeaderPadding + writePadding os "pad to cli header" cliHeaderPadding write (Some (textV2P cliHeaderChunk.addr)) os "cli header" [| |] - writeInt32 os 0x48 // size of header - writeInt32AsUInt16 os headerVersionMajor // Major part of minimum version of CLR reqd. - writeInt32AsUInt16 os headerVersionMinor // Minor part of minimum version of CLR reqd. ... - // e.g. 0x0210 + writeInt32 os 0x48 // size of header + writeInt32AsUInt16 os headerVersionMajor // Major part of minimum version of CLR reqd. + writeInt32AsUInt16 os headerVersionMinor // Minor part of minimum version of CLR reqd. ... + // e.g. 0x0210 writeDirectory os metadataChunk writeInt32 os flags - - writeInt32 os entryPointToken + + writeInt32 os entryPointToken write None os "rest of cli header" [| |] - - // e.g. 0x0220 + + // e.g. 0x0220 writeDirectory os resourcesChunk writeDirectory os strongnameChunk - // e.g. 0x0230 - writeInt32 os 0x00 // code manager table, always 0 - writeInt32 os 0x00 // code manager table, always 0 - writeDirectory os vtfixupsChunk - // e.g. 0x0240 - writeInt32 os 0x00 // export addr table jumps, always 0 - writeInt32 os 0x00 // export addr table jumps, always 0 - writeInt32 os 0x00 // managed native header, always 0 - writeInt32 os 0x00 // managed native header, always 0 - + // e.g. 0x0230 + writeInt32 os 0x00 // code manager table, always 0 + writeInt32 os 0x00 // code manager table, always 0 + writeDirectory os vtfixupsChunk + // e.g. 0x0240 + writeInt32 os 0x00 // export addr table jumps, always 0 + writeInt32 os 0x00 // export addr table jumps, always 0 + writeInt32 os 0x00 // managed native header, always 0 + writeInt32 os 0x00 // managed native header, always 0 + writeBytes os code write None os "code padding" codePadding - + writeBytes os metadata - - // write 0x80 bytes of empty space for encrypted SHA1 hash, written by SN.EXE or call to signing API - if signer <> None then + + // write 0x80 bytes of empty space for encrypted SHA1 hash, written by SN.EXE or call to signing API + if signer <> None then write (Some (textV2P strongnameChunk.addr)) os "strongname" (Array.create strongnameChunk.size 0x0uy) write (Some (textV2P resourcesChunk.addr)) os "raw resources" [| |] @@ -4036,9 +4111,9 @@ let writeBinaryAndReportMappings (outfile, writePadding os "start of import table" importTableChunkPrePadding - // vtfixups would go here + // vtfixups would go here write (Some (textV2P importTableChunk.addr)) os "import table" [| |] - + writeInt32 os importLookupTableChunk.addr writeInt32 os 0x00 writeInt32 os 0x00 @@ -4048,38 +4123,38 @@ let writeBinaryAndReportMappings (outfile, writeInt32 os 0x00 writeInt32 os 0x00 writeInt32 os 0x00 - writeInt32 os 0x00 - + writeInt32 os 0x00 + write (Some (textV2P importLookupTableChunk.addr)) os "import lookup table" [| |] - writeInt32 os importNameHintTableChunk.addr - writeInt32 os 0x00 - writeInt32 os 0x00 - writeInt32 os 0x00 - writeInt32 os 0x00 - + writeInt32 os importNameHintTableChunk.addr + writeInt32 os 0x00 + writeInt32 os 0x00 + writeInt32 os 0x00 + writeInt32 os 0x00 + write (Some (textV2P importNameHintTableChunk.addr)) os "import name hint table" [| |] - // Two zero bytes of hint, then Case sensitive, null-terminated ASCII string containing name to import. + // Two zero bytes of hint, then Case sensitive, null-terminated ASCII string containing name to import. // Shall _CorExeMain a .exe file _CorDllMain for a .dll file. - if isDll then + if isDll then writeBytes os [| 0x00uy; 0x00uy; 0x5fuy; 0x43uy ; 0x6fuy; 0x72uy; 0x44uy; 0x6cuy; 0x6cuy; 0x4duy; 0x61uy; 0x69uy; 0x6euy; 0x00uy |] - else + else writeBytes os [| 0x00uy; 0x00uy; 0x5fuy; 0x43uy; 0x6fuy; 0x72uy; 0x45uy; 0x78uy; 0x65uy; 0x4duy; 0x61uy; 0x69uy; 0x6euy; 0x00uy |] - + write (Some (textV2P mscoreeStringChunk.addr)) os "mscoree string" [| 0x6duy; 0x73uy; 0x63uy; 0x6fuy ; 0x72uy; 0x65uy ; 0x65uy; 0x2euy ; 0x64uy; 0x6cuy ; 0x6cuy; 0x00uy ; |] - + writePadding os "end of import tab" importTableChunkPadding - + writePadding os "head of entrypoint" 0x03 let ep = (imageBaseReal + textSectionAddr) write (Some (textV2P entrypointCodeChunk.addr)) os " entrypoint code" [| 0xFFuy; 0x25uy; (* x86 Instructions for entry *) b0 ep; b1 ep; b2 ep; b3 ep |] - if isItanium then + if isItanium then write (Some (textV2P globalpointerCodeChunk.addr)) os " itanium global pointer" [| 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy |] - if pdbfile.IsSome then + if pdbfile.IsSome then write (Some (textV2P debugDirectoryChunk.addr)) os "debug directory" (Array.create debugDirectoryChunk.size 0x0uy) write (Some (textV2P debugDataChunk.addr)) os "debug data" (Array.create debugDataChunk.size 0x0uy) write (Some (textV2P debugChecksumPdbChunk.addr)) os "debug checksum" (Array.create debugChecksumPdbChunk.size 0x0uy) @@ -4091,7 +4166,7 @@ let writeBinaryAndReportMappings (outfile, write (Some (textV2P debugDeterministicPdbChunk.addr)) os "debug deterministic" Array.empty writePadding os "end of .text" (dataSectionPhysLoc - textSectionPhysLoc - textSectionSize) - + // DATA SECTION match nativeResources with | [||] -> () @@ -4102,25 +4177,25 @@ let writeBinaryAndReportMappings (outfile, if dummydatap.size <> 0x0 then write (Some (dataSectionVirtToPhys dummydatap.addr)) os "dummy data" [| 0x0uy |] - writePadding os "end of .rsrc" (relocSectionPhysLoc - dataSectionPhysLoc - dataSectionSize) - - // RELOC SECTION + writePadding os "end of .rsrc" (relocSectionPhysLoc - dataSectionPhysLoc - dataSectionSize) - // See ECMA 24.3.2 + // RELOC SECTION + + // See ECMA 24.3.2 let relocV2P v = v - relocSectionAddr + relocSectionPhysLoc - + let entrypointFixupAddr = entrypointCodeChunk.addr + 0x02 let entrypointFixupBlock = (entrypointFixupAddr / 4096) * 4096 let entrypointFixupOffset = entrypointFixupAddr - entrypointFixupBlock let reloc = (if modul.Is64Bit then 0xA000 (* IMAGE_REL_BASED_DIR64 *) else 0x3000 (* IMAGE_REL_BASED_HIGHLOW *)) ||| entrypointFixupOffset // For the itanium, you need to set a relocation entry for the global pointer - let reloc2 = - if not isItanium then + let reloc2 = + if not isItanium then 0x0 else 0xA000 ||| (globalpointerCodeChunk.addr - ((globalpointerCodeChunk.addr / 4096) * 4096)) - - write (Some (relocV2P baseRelocTableChunk.addr)) os "base reloc table" + + write (Some (relocV2P baseRelocTableChunk.addr)) os "base reloc table" [| b0 entrypointFixupBlock; b1 entrypointFixupBlock; b2 entrypointFixupBlock; b3 entrypointFixupBlock 0x0cuy; 0x00uy; 0x00uy; 0x00uy b0 reloc; b1 reloc @@ -4128,36 +4203,33 @@ let writeBinaryAndReportMappings (outfile, writePadding os "end of .reloc" (imageEndSectionPhysLoc - relocSectionPhysLoc - relocSectionSize) os.Dispose() - - try - FileSystemUtilities.setExecutablePermission outfile - with _ -> - () + pdbData, pdbOpt, debugDirectoryChunk, debugDataChunk, debugChecksumPdbChunk, debugEmbeddedPdbChunk, debugDeterministicPdbChunk, textV2P, mappings // Looks like a finally - with e -> - (try + with e -> + (try os.Dispose() - FileSystem.FileDelete outfile - with _ -> ()) + with _ -> ()) reraise() reportTime showTimes "Writing Image" + pdbData, pdbOpt, debugDirectoryChunk, debugDataChunk, debugChecksumPdbChunk, debugEmbeddedPdbChunk, debugDeterministicPdbChunk, textV2P, mappings +and writePdb (dumpDebugInfo, showTimes, portablePDB, embeddedPDB, pdbfile, outfile, signer, deterministic, pathMap) (pdbData, pdbOpt, debugDirectoryChunk, debugDataChunk, debugChecksumPdbChunk, debugEmbeddedPdbChunk, debugDeterministicPdbChunk, textV2P, mappings) = if dumpDebugInfo then logDebugInfo outfile pdbData - // Now we've done the bulk of the binary, do the PDB file and fixup the binary. + // Now we've done the bulk of the binary, do the PDB file and fixup the binary. begin match pdbfile with | None -> () #if ENABLE_MONO_SUPPORT | Some fmdb when runningOnMono && not portablePDB -> writeMdbInfo fmdb outfile pdbData #endif - | Some fpdb -> - try - let idd = - match pdbOpt with + | Some fpdb -> + try + let idd = + match pdbOpt with | Some (originalLength, contentId, stream, algorithmName, checkSum) -> if embeddedPDB then embedPortablePdbInfo originalLength contentId stream showTimes fpdb debugDataChunk debugEmbeddedPdbChunk debugDeterministicPdbChunk debugChecksumPdbChunk algorithmName checkSum embeddedPDB deterministic @@ -4171,11 +4243,11 @@ let writeBinaryAndReportMappings (outfile, #endif reportTime showTimes "Generate PDB Info" - // Now we have the debug data we can go back and fill in the debug directory in the image - let fs2 = FileSystem.FileStreamWriteExistingShim outfile + // Now we have the debug data we can go back and fill in the debug directory in the image + use fs2 = FileSystem.OpenFileForWriteShim(outfile, FileMode.Open, FileAccess.Write, FileShare.Read) let os2 = new BinaryWriter(fs2) - try - // write the IMAGE_DEBUG_DIRECTORY + try + // write the IMAGE_DEBUG_DIRECTORY os2.BaseStream.Seek (int64 (textV2P debugDirectoryChunk.addr), SeekOrigin.Begin) |> ignore for i in idd do writeInt32 os2 i.iddCharacteristics // IMAGE_DEBUG_DIRECTORY.Characteristics @@ -4190,32 +4262,32 @@ let writeBinaryAndReportMappings (outfile, // Write the Debug Data for i in idd do if i.iddChunk.size <> 0 then - // write the debug raw data as given us by the PDB writer + // write the debug raw data as given us by the PDB writer os2.BaseStream.Seek (int64 (textV2P i.iddChunk.addr), SeekOrigin.Begin) |> ignore if i.iddChunk.size < i.iddData.Length then failwith "Debug data area is not big enough. Debug info may not be usable" writeBytes os2 i.iddData os2.Dispose() - with e -> + with e -> failwith ("Error while writing debug directory entry: "+e.Message) - (try os2.Dispose(); FileSystem.FileDelete outfile with _ -> ()) + (try os2.Dispose(); FileSystem.FileDeleteShim outfile with _ -> ()) reraise() - with e -> + with e -> reraise() end reportTime showTimes "Finalize PDB" - /// Sign the binary. No further changes to binary allowed past this point! - match signer with + /// Sign the binary. No further changes to binary allowed past this point! + match signer with | None -> () - | Some s -> - try + | Some s -> + try s.SignFile outfile - s.Close() - with e -> + s.Close() + with e -> failwith ("Warning: A call to SignFile failed ("+e.Message+")") (try s.Close() with _ -> ()) - (try FileSystem.FileDelete outfile with _ -> ()) + (try FileSystem.FileDeleteShim outfile with _ -> ()) () reportTime showTimes "Signing Image" @@ -4239,7 +4311,13 @@ type options = pathMap: PathMap } let WriteILBinary (filename, (options: options), inputModule, normalizeAssemblyRefs) = - writeBinaryAndReportMappings (filename, - options.ilg, options.pdbfile, options.signer, options.portablePDB, options.embeddedPDB, options.embedAllSource, + writeBinaryAndReportMappings (filename, + options.ilg, options.pdbfile, options.signer, options.portablePDB, options.embeddedPDB, options.embedAllSource, options.embedSourceList, options.sourceLink, options.checksumAlgorithm, options.emitTailcalls, options.deterministic, options.showTimes, options.dumpDebugInfo, options.pathMap) inputModule normalizeAssemblyRefs |> ignore + +let WriteILBinaryStreamWithNoPDB (stream, (options: options), inputModule, normalizeAssemblyRefs) = + writeBinaryWithNoPdb (stream, + options.ilg, options.signer, options.portablePDB, options.embeddedPDB, options.embedAllSource, + options.embedSourceList, options.sourceLink, options.checksumAlgorithm, options.emitTailcalls, options.deterministic, options.showTimes, options.pathMap) inputModule normalizeAssemblyRefs + |> ignore diff --git a/src/fsharp/absil/ilwrite.fsi b/src/fsharp/absil/ilwrite.fsi index edc3322cf58..152c9abc45f 100644 --- a/src/fsharp/absil/ilwrite.fsi +++ b/src/fsharp/absil/ilwrite.fsi @@ -4,11 +4,10 @@ module internal FSharp.Compiler.AbstractIL.ILBinaryWriter open Internal.Utilities -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal +open System.IO open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILPdbWriter -open FSharp.Compiler.AbstractIL.Internal.StrongNameSign +open FSharp.Compiler.AbstractIL.StrongNameSign type options = { ilg: ILGlobals @@ -28,3 +27,6 @@ type options = /// Write a binary to the file system. Extra configuration parameters can also be specified. val WriteILBinary: filename: string * options: options * inputModule: ILModuleDef * (ILAssemblyRef -> ILAssemblyRef) -> unit + +/// Write a binary to the given stream. Extra configuration parameters can also be specified. +val WriteILBinaryStreamWithNoPDB: stream: Stream * options: options * inputModule: ILModuleDef * (ILAssemblyRef -> ILAssemblyRef) -> unit \ No newline at end of file diff --git a/src/fsharp/absil/ilwritepdb.fs b/src/fsharp/absil/ilwritepdb.fs index f03f0648df9..a2bc08dd470 100644 --- a/src/fsharp/absil/ilwritepdb.fs +++ b/src/fsharp/absil/ilwritepdb.fs @@ -3,7 +3,7 @@ module internal FSharp.Compiler.AbstractIL.ILPdbWriter open System -open System.Collections.Generic +open System.Collections.Generic open System.Collections.Immutable open System.IO open System.IO.Compression @@ -13,12 +13,11 @@ open System.Reflection.Metadata.Ecma335 open System.Text open Internal.Utilities open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Support -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Internal.Utils +open FSharp.Compiler.AbstractIL.Support +open Internal.Utilities.Library open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Range - +open FSharp.Compiler.IO +open FSharp.Compiler.Text.Range type BlobBuildingStream () = inherit Stream() @@ -26,48 +25,48 @@ type BlobBuildingStream () = static let chunkSize = 32 * 1024 let builder = new BlobBuilder(chunkSize) - override this.CanWrite = true - override this.CanRead = false - override this.CanSeek = false - override this.Length = int64 (builder.Count) - - override this.Write(buffer: byte array, offset: int, count: int) = builder.WriteBytes(buffer, offset, count) - override this.WriteByte(value: byte) = builder.WriteByte value - member this.WriteInt32(value: int) = builder.WriteInt32 value - member this.ToImmutableArray() = builder.ToImmutableArray() - member this.TryWriteBytes(stream: Stream, length: int) = builder.TryWriteBytes(stream, length) - - override this.Flush() = () - override this.Dispose(_disposing: bool) = () - override this.Seek(_offset: int64, _origin: SeekOrigin) = raise (new NotSupportedException()) - override this.Read(_buffer: byte array, _offset: int, _count: int) = raise (new NotSupportedException()) - override this.SetLength(_value: int64) = raise (new NotSupportedException()) + override _.CanWrite = true + override _.CanRead = false + override _.CanSeek = false + override _.Length = int64 (builder.Count) + + override _.Write(buffer: byte array, offset: int, count: int) = builder.WriteBytes(buffer, offset, count) + override _.WriteByte(value: byte) = builder.WriteByte value + member _.WriteInt32(value: int) = builder.WriteInt32 value + member _.ToImmutableArray() = builder.ToImmutableArray() + member _.TryWriteBytes(stream: Stream, length: int) = builder.TryWriteBytes(stream, length) + + override _.Flush() = () + override _.Dispose(_disposing: bool) = () + override _.Seek(_offset: int64, _origin: SeekOrigin) = raise (new NotSupportedException()) + override _.Read(_buffer: byte array, _offset: int, _count: int) = raise (new NotSupportedException()) + override _.SetLength(_value: int64) = raise (new NotSupportedException()) override val Position = 0L with get, set -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- // PDB types -// -------------------------------------------------------------------- +// -------------------------------------------------------------------- type PdbDocumentData = ILSourceDocument -type PdbLocalVar = +type PdbLocalVar = { Name: string - Signature: byte[] + Signature: byte[] /// the local index the name corresponds to Index: int32 } -type PdbMethodScope = +type PdbMethodScope = { Children: PdbMethodScope array StartOffset: int EndOffset: int Locals: PdbLocalVar array (* REVIEW open_namespaces: pdb_namespace array *) } -type PdbSourceLoc = +type PdbSourceLoc = { Document: int Line: int Column: int } - -type PdbSequencePoint = + +type PdbSequencePoint = { Document: int Offset: int Line: int @@ -76,7 +75,7 @@ type PdbSequencePoint = EndColumn: int } override x.ToString() = sprintf "(%d,%d)-(%d,%d)" x.Line x.Column x.EndLine x.EndColumn -type PdbMethodData = +type PdbMethodData = { MethToken: int32 MethName: string LocalSignatureToken: int32 @@ -85,35 +84,35 @@ type PdbMethodData = Range: (PdbSourceLoc * PdbSourceLoc) option SequencePoints: PdbSequencePoint array } -module SequencePoint = - let orderBySource sp1 sp2 = +module SequencePoint = + let orderBySource sp1 sp2 = let c1 = compare sp1.Document sp2.Document - if c1 <> 0 then - c1 - else + if c1 <> 0 then + c1 + else let c1 = compare sp1.Line sp2.Line - if c1 <> 0 then - c1 - else - compare sp1.Column sp2.Column - - let orderByOffset sp1 sp2 = - compare sp1.Offset sp2.Offset + if c1 <> 0 then + c1 + else + compare sp1.Column sp2.Column -/// 28 is the size of the IMAGE_DEBUG_DIRECTORY in ntimage.h -let sizeof_IMAGE_DEBUG_DIRECTORY = 28 + let orderByOffset sp1 sp2 = + compare sp1.Offset sp2.Offset + +/// 28 is the size of the IMAGE_DEBUG_DIRECTORY in ntimage.h +let sizeof_IMAGE_DEBUG_DIRECTORY = 28 [] -type PdbData = +type PdbData = { EntryPoint: int32 option Timestamp: int32 ModuleID: byte[] Documents: PdbDocumentData[] - Methods: PdbMethodData[] + Methods: PdbMethodData[] TableRowCounts: int[] } -type BinaryChunk = - { size: int32 +type BinaryChunk = + { size: int32 addr: int32 } type idd = @@ -136,7 +135,7 @@ let guidSha2 = Guid("8829d00f-11b8-4213-878b-770e8597ac16") let checkSum (url: string) (checksumAlgorithm: HashAlgorithm) = try - use file = FileSystem.FileStreamReadShim url + use file = FileSystem.OpenFileForReadShim(url) let guid, alg = match checksumAlgorithm with | HashAlgorithm.Sha1 -> guidSha1, System.Security.Cryptography.SHA1.Create() :> System.Security.Cryptography.HashAlgorithm @@ -150,7 +149,7 @@ let checkSum (url: string) (checksumAlgorithm: HashAlgorithm) = // Portable PDB Writer //--------------------------------------------------------------------- let cvMagicNumber = 0x53445352L -let pdbGetCvDebugInfo (mvid: byte[]) (timestamp: int32) (filepath: string) (cvChunk: BinaryChunk) = +let pdbGetCvDebugInfo (mvid: byte[]) (timestamp: int32) (filepath: string) (cvChunk: BinaryChunk) = let iddCvBuffer = // Debug directory entry let path = (System.Text.Encoding.UTF8.GetBytes filepath) @@ -238,7 +237,7 @@ let pdbGetDebugInfo (contentId: byte[]) (timestamp: int32) (filepath: string) |] //------------------------------------------------------------------------------ -// PDB Writer. The function [WritePdbInfo] abstracts the +// PDB Writer. The function [WritePdbInfo] abstracts the // imperative calls to the Symbol Writer API. //------------------------------------------------------------------------------ @@ -247,11 +246,11 @@ let getDebugFileName outfile (portablePDB: bool) = #if ENABLE_MONO_SUPPORT if runningOnMono && not portablePDB then outfile + ".mdb" - else + else #else ignore portablePDB #endif - (Filename.chopExtension outfile) + ".pdb" + (FileSystemUtils.chopExtension outfile) + ".pdb" let sortMethods showTimes info = reportTime showTimes (sprintf "PDB: Defined %d documents" info.Documents.Length) @@ -267,7 +266,7 @@ let getRowCounts tableRowCounts = let generatePortablePdb (embedAllSource: bool) (embedSourceList: string list) (sourceLink: string) checksumAlgorithm showTimes (info: PdbData) (pathMap: PathMap) = sortMethods showTimes info let externalRowCounts = getRowCounts info.TableRowCounts - let docs = + let docs = match info.Documents with | null -> Array.empty | _ -> info.Documents @@ -300,7 +299,7 @@ let generatePortablePdb (embedAllSource: bool) (embedSourceList: string list) (s /// in PDB file size. /// /// Chosen as the point at which we start to see > 10% blob size reduction using all - /// current source files in corefx and roslyn as sample data. + /// current source files in corefx and roslyn as sample data. /// let sourceCompressionThreshold = 200 @@ -308,10 +307,11 @@ let generatePortablePdb (embedAllSource: bool) (embedSourceList: string list) (s let includeSource file = let isInList = embedSourceList |> List.exists (fun f -> String.Compare(file, f, StringComparison.OrdinalIgnoreCase ) = 0) - if not embedAllSource && not isInList || not (File.Exists file) then + if not embedAllSource && not isInList || not (FileSystem.FileExistsShim file) then None else - let stream = File.OpenRead file + use stream = FileSystem.OpenFileForReadShim(file) + let length64 = stream.Length if length64 > int64 (Int32.MaxValue) then raise (new IOException("File is too long")) @@ -333,7 +333,7 @@ let generatePortablePdb (embedAllSource: bool) (embedSourceList: string list) (s let handle = match checkSum doc.File checksumAlgorithm with | Some (hashAlg, checkSum) -> - let dbgInfo = + let dbgInfo = (serializeDocumentName doc.File, metadata.GetOrAddGuid hashAlg, metadata.GetOrAddBlob(checkSum.ToImmutableArray()), @@ -346,7 +346,7 @@ let generatePortablePdb (embedAllSource: bool) (embedSourceList: string list) (s metadata.GetOrAddBlob blob) |> ignore dbgInfo | None -> - let dbgInfo = + let dbgInfo = (serializeDocumentName doc.File, metadata.GetOrAddGuid(System.Guid.Empty), metadata.GetOrAddBlob(ImmutableArray.Empty), @@ -354,9 +354,9 @@ let generatePortablePdb (embedAllSource: bool) (embedSourceList: string list) (s dbgInfo index.Add(doc.File, handle) - if not (String.IsNullOrEmpty sourceLink) then - let fs = File.OpenRead sourceLink - let ms = new MemoryStream() + if not (String.IsNullOrWhiteSpace sourceLink) then + use fs = FileSystem.OpenFileForReadShim(sourceLink) + use ms = new MemoryStream() fs.CopyTo ms metadata.AddCustomDebugInformation( ModuleDefinitionHandle.op_Implicit(EntityHandle.ModuleDefinition), @@ -387,7 +387,7 @@ let generatePortablePdb (embedAllSource: bool) (embedSourceList: string list) (s let getDocumentHandle d = if docs.Length = 0 || d < 0 || d > docs.Length then Unchecked.defaultof - else + else match documentIndex.TryGetValue(docs.[d].File) with | false, _ -> Unchecked.defaultof | true, h -> h @@ -449,9 +449,9 @@ let generatePortablePdb (embedAllSource: bool) (embedSourceList: string list) (s builder.WriteCompressedInteger offsetDelta // Check for hidden-sequence-point-record - if startLine = 0xfeefee || - endLine = 0xfeefee || - (startColumn = 0 && endColumn = 0) || + if startLine = 0xfeefee || + endLine = 0xfeefee || + (startColumn = 0 && endColumn = 0) || ((endLine - startLine) = 0 && (endColumn - startColumn) = 0) then // Hidden-sequence-point-record @@ -556,9 +556,9 @@ let compressPortablePdbStream (uncompressedLength: int64) (contentId: BlobConten (uncompressedLength, contentId, compressedStream) let writePortablePdbInfo (contentId: BlobContentId) (stream: MemoryStream) showTimes fpdb pathMap cvChunk deterministicPdbChunk checksumPdbChunk algorithmName checksum embeddedPdb deterministic = - try FileSystem.FileDelete fpdb with _ -> () - use pdbFile = new FileStream(fpdb, FileMode.Create, FileAccess.ReadWrite) - stream.WriteTo pdbFile + try FileSystem.FileDeleteShim fpdb with _ -> () + use fs = FileSystem.OpenFileForWriteShim(fpdb, fileMode = FileMode.Create, fileAccess = FileAccess.ReadWrite) + stream.WriteTo fs reportTime showTimes "PDB: Closed" pdbGetDebugInfo (contentId.Guid.ToByteArray()) (int32 (contentId.Stamp)) (PathMap.apply pathMap fpdb) cvChunk None deterministicPdbChunk checksumPdbChunk algorithmName checksum 0L None embeddedPdb deterministic @@ -569,12 +569,12 @@ let embedPortablePdbInfo (uncompressedLength: int64) (contentId: BlobContentId) #if !FX_NO_PDB_WRITER //--------------------------------------------------------------------- -// PDB Writer. The function [WritePdbInfo] abstracts the +// PDB Writer. The function [WritePdbInfo] abstracts the // imperative calls to the Symbol Writer API. //--------------------------------------------------------------------- let writePdbInfo showTimes f fpdb info cvChunk = - try FileSystem.FileDelete fpdb with _ -> () + try FileSystem.FileDeleteShim fpdb with _ -> () let pdbw = ref Unchecked.defaultof @@ -582,12 +582,12 @@ let writePdbInfo showTimes f fpdb info cvChunk = pdbw := pdbInitialize f fpdb with _ -> error(Error(FSComp.SR.ilwriteErrorCreatingPdb fpdb, rangeCmdArgs)) - match info.EntryPoint with - | None -> () - | Some x -> pdbSetUserEntryPoint !pdbw x + match info.EntryPoint with + | None -> () + | Some x -> pdbSetUserEntryPoint !pdbw x let docs = info.Documents |> Array.map (fun doc -> pdbDefineDocument !pdbw doc.File) - let getDocument i = + let getDocument i = if i < 0 || i > docs.Length then failwith "getDocument: bad doc number" docs.[i] reportTime showTimes (sprintf "PDB: Defined %d documents" info.Documents.Length) @@ -602,16 +602,16 @@ let writePdbInfo showTimes f fpdb info cvChunk = let sps = Array.sub allSps !spOffset spCounts.[i] spOffset := !spOffset + spCounts.[i] - begin match minfo.Range with - | None -> () + begin match minfo.Range with + | None -> () | Some (a,b) -> pdbOpenMethod !pdbw minfo.MethToken - pdbSetMethodRange !pdbw + pdbSetMethodRange !pdbw (getDocument a.Document) a.Line a.Column (getDocument b.Document) b.Line b.Column - // Partition the sequence points by document + // Partition the sequence points by document let spsets = let res = Dictionary() for (_,sp) in sps do @@ -621,27 +621,27 @@ let writePdbInfo showTimes f fpdb info cvChunk = xsR := sp :: !xsR else res.[k] <- ref [sp] - + res - spsets + spsets |> Seq.iter (fun kv -> let spset = !kv.Value if not spset.IsEmpty then let spset = Array.ofList spset Array.sortInPlaceWith SequencePoint.orderByOffset spset - let sps = - spset |> Array.map (fun sp -> - // Ildiag.dprintf "token 0x%08lx has an sp at offset 0x%08x\n" minfo.MethToken sp.Offset + let sps = + spset |> Array.map (fun sp -> + // Ildiag.dprintf "token 0x%08lx has an sp at offset 0x%08x\n" minfo.MethToken sp.Offset (sp.Offset, sp.Line, sp.Column,sp.EndLine, sp.EndColumn)) - // Use of alloca in implementation of pdbDefineSequencePoints can give stack overflow here - if sps.Length < 5000 then + // Use of alloca in implementation of pdbDefineSequencePoints can give stack overflow here + if sps.Length < 5000 then pdbDefineSequencePoints !pdbw (getDocument spset.[0].Document) sps) - // Write the scopes - let rec writePdbScope parent sco = + // Write the scopes + let rec writePdbScope parent sco = if parent = None || sco.Locals.Length <> 0 || sco.Children.Length <> 0 then - // Only nest scopes if the child scope is a different size from + // Only nest scopes if the child scope is a different size from let nested = match parent with | Some p -> sco.StartOffset <> p.StartOffset || sco.EndOffset <> p.EndOffset @@ -653,7 +653,7 @@ let writePdbInfo showTimes f fpdb info cvChunk = match minfo.RootScope with | None -> () - | Some rootscope -> writePdbScope None rootscope + | Some rootscope -> writePdbScope None rootscope pdbCloseMethod !pdbw end) reportTime showTimes "PDB: Wrote methods" @@ -679,51 +679,51 @@ let writePdbInfo showTimes f fpdb info cvChunk = //--------------------------------------------------------------------- open Microsoft.FSharp.Reflection -// Dynamic invoke operator. Implements simple overload resolution based +// Dynamic invoke operator. Implements simple overload resolution based // on the name and number of parameters only. // Supports the following cases: // obj?Foo() // call with no arguments // obj?Foo(1, "a") // call with two arguments (extracted from tuple) -// NOTE: This doesn't actually handle all overloads. It just picks first entry with right +// NOTE: This doesn't actually handle all overloads. It just picks first entry with right // number of arguments. -let (?) this memb (args:'Args) : 'R = +let (?) this memb (args:'Args) : 'R = // Get array of 'obj' arguments for the reflection call - let args = + let args = if typeof<'Args> = typeof then [| |] elif FSharpType.IsTuple typeof<'Args> then Microsoft.FSharp.Reflection.FSharpValue.GetTupleFields args else [| box args |] - + // Get methods and perform overload resolution let methods = this.GetType().GetMethods() let bestMatch = methods |> Array.tryFind (fun mi -> mi.Name = memb && mi.GetParameters().Length = args.Length) match bestMatch with - | Some mi -> unbox(mi.Invoke(this, args)) + | Some mi -> unbox(mi.Invoke(this, args)) | None -> error(Error(FSComp.SR.ilwriteMDBMemberMissing memb, rangeCmdArgs)) // Creating instances of needed classes from 'Mono.CompilerServices.SymbolWriter' assembly let monoCompilerSvc = new AssemblyName("Mono.CompilerServices.SymbolWriter, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756") -let ctor (asmName: AssemblyName) clsName (args: obj[]) = +let ctor (asmName: AssemblyName) clsName (args: obj[]) = let asm = Assembly.Load asmName let ty = asm.GetType clsName System.Activator.CreateInstance(ty, args) -let createSourceMethodImpl (name: string) (token: int) (namespaceID: int) = +let createSourceMethodImpl (name: string) (token: int) (namespaceID: int) = ctor monoCompilerSvc "Mono.CompilerServices.SymbolWriter.SourceMethodImpl" [| box name; box token; box namespaceID |] -let createWriter (f: string) = +let createWriter (f: string) = ctor monoCompilerSvc "Mono.CompilerServices.SymbolWriter.MonoSymbolWriter" [| box f |] //--------------------------------------------------------------------- // MDB Writer. Generate debug symbols using the MDB format //--------------------------------------------------------------------- -let writeMdbInfo fmdb f info = +let writeMdbInfo fmdb f info = // Note, if we can't delete it code will fail later - try FileSystem.FileDelete fmdb with _ -> () + try FileSystem.FileDeleteShim fmdb with _ -> () // Try loading the MDB symbol writer from an assembly available on Mono dynamically - // Report an error if the assembly is not available. - let wr = + // Report an error if the assembly is not available. + let wr = try createWriter f with e -> error(Error(FSComp.SR.ilwriteErrorCreatingMdb(), rangeCmdArgs)) @@ -735,7 +735,7 @@ let writeMdbInfo fmdb f info = let unit = wr?DefineCompilationUnit doc yield doc, unit |] - let getDocument i = + let getDocument i = if i < 0 || i >= Array.length docs then failwith "getDocument: bad doc number" else docs.[i] // Sort methods and write them to the MDB file @@ -756,13 +756,13 @@ let writeMdbInfo fmdb f info = wr?MarkSequencePoint(sp.Offset, cue?get_SourceFile(), sp.Line, sp.Column, false) // Walk through the tree of scopes and write all variables - let rec writeScope (scope: PdbMethodScope) = + let rec writeScope (scope: PdbMethodScope) = wr?OpenScope(scope.StartOffset) |> ignore for local in scope.Locals do wr?DefineLocalVariable(local.Index, local.Name) - for child in scope.Children do + for child in scope.Children do writeScope child - wr?CloseScope(scope.EndOffset) + wr?CloseScope(scope.EndOffset) match meth.RootScope with | None -> () | Some rootscope -> writeScope rootscope @@ -782,7 +782,7 @@ let writeMdbInfo fmdb f info = //--------------------------------------------------------------------- open Printf -let logDebugInfo (outfile: string) (info: PdbData) = +let logDebugInfo (outfile: string) (info: PdbData) = use sw = new StreamWriter(new FileStream(outfile + ".debuginfo", FileMode.Create)) fprintfn sw "ENTRYPOINT\r\n %b\r\n" info.EntryPoint.IsSome @@ -799,7 +799,7 @@ let logDebugInfo (outfile: string) (info: PdbData) = for meth in info.Methods do fprintfn sw " %s" meth.MethName fprintfn sw " Params: %A" [ for p in meth.Params -> sprintf "%d: %s" p.Index p.Name ] - fprintfn sw " Range: %A" (meth.Range |> Option.map (fun (f, t) -> + fprintfn sw " Range: %A" (meth.Range |> Option.map (fun (f, t) -> sprintf "[%d,%d:%d] - [%d,%d:%d]" f.Document f.Line f.Column t.Document t.Line t.Column)) fprintfn sw " Points:" @@ -808,7 +808,7 @@ let logDebugInfo (outfile: string) (info: PdbData) = // Walk through the tree of scopes and write all variables fprintfn sw " Scopes:" - let rec writeScope offs (scope: PdbMethodScope) = + let rec writeScope offs (scope: PdbMethodScope) = fprintfn sw " %s- [%d-%d]" offs scope.StartOffset scope.EndOffset if scope.Locals.Length > 0 then fprintfn sw " %s Locals: %A" offs [ for p in scope.Locals -> sprintf "%d: %s" p.Index p.Name ] diff --git a/src/fsharp/absil/ilwritepdb.fsi b/src/fsharp/absil/ilwritepdb.fsi index 5d90d7b8c47..b9620d284bf 100644 --- a/src/fsharp/absil/ilwritepdb.fsi +++ b/src/fsharp/absil/ilwritepdb.fsi @@ -5,9 +5,6 @@ module internal FSharp.Compiler.AbstractIL.ILPdbWriter open Internal.Utilities open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Range -open System.Collections.Generic open System.IO open System.Reflection.Metadata @@ -20,7 +17,7 @@ type PdbLocalVar = Index: int32 } type PdbMethodScope = - { Children: PdbMethodScope array + { Children: PdbMethodScope[] StartOffset: int EndOffset: int Locals: PdbLocalVar array @@ -58,7 +55,6 @@ type PdbData = Methods: PdbMethodData[] TableRowCounts: int[] } - /// Takes the output file name and returns debug file name. val getDebugFileName: string -> bool -> string diff --git a/src/fsharp/absil/ilx.fs b/src/fsharp/absil/ilx.fs index 7eb0541165a..a5ee2f9ec84 100644 --- a/src/fsharp/absil/ilx.fs +++ b/src/fsharp/absil/ilx.fs @@ -1,14 +1,10 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// Defines an extension of the IL algebra -module internal FSharp.Compiler.AbstractIL.Extensions.ILX.Types +module internal FSharp.Compiler.AbstractIL.ILX.Types open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library - -// -------------------------------------------------------------------- -// Define an extension of the IL instruction algebra -// -------------------------------------------------------------------- +open Internal.Utilities.Library let mkLowerName (nm: string) = // Use the lower case name of a field or constructor as the field/parameter name if it differs from the uppercase name @@ -16,17 +12,16 @@ let mkLowerName (nm: string) = if lowerName = nm then "_" + nm else lowerName [] -type IlxUnionField(fd: ILFieldDef) = +type IlxUnionCaseField(fd: ILFieldDef) = let lowerName = mkLowerName fd.Name member x.ILField = fd member x.Type = x.ILField.FieldType member x.Name = x.ILField.Name member x.LowerName = lowerName - -type IlxUnionAlternative = +type IlxUnionCase = { altName: string - altFields: IlxUnionField[] + altFields: IlxUnionCaseField[] altCustomAttrs: ILAttributes } member x.FieldDefs = x.altFields @@ -42,7 +37,7 @@ type IlxUnionHasHelpers = | SpecialFSharpOptionHelpers type IlxUnionRef = - | IlxUnionRef of boxity: ILBoxity * ILTypeRef * IlxUnionAlternative[] * bool * (* hasHelpers: *) IlxUnionHasHelpers + | IlxUnionRef of boxity: ILBoxity * ILTypeRef * IlxUnionCase[] * bool * (* hasHelpers: *) IlxUnionHasHelpers type IlxUnionSpec = | IlxUnionSpec of IlxUnionRef * ILGenericArgs @@ -57,7 +52,6 @@ type IlxUnionSpec = member x.Alternative idx = x.AlternativesArray.[idx] member x.FieldDef idx fidx = x.Alternative(idx).FieldDef(fidx) - type IlxClosureLambdas = | Lambdas_forall of ILGenericParameterDef * IlxClosureLambdas | Lambdas_lambda of ILParameter * IlxClosureLambdas @@ -69,7 +63,7 @@ type IlxClosureApps = | Apps_done of ILType let rec instAppsAux n inst = function - Apps_tyapp (ty, rty) -> Apps_tyapp(instILTypeAux n inst ty, instAppsAux n inst rty) + | Apps_tyapp (ty, rty) -> Apps_tyapp(instILTypeAux n inst ty, instAppsAux n inst rty) | Apps_app (dty, rty) -> Apps_app(instILTypeAux n inst dty, instAppsAux n inst rty) | Apps_done rty -> Apps_done(instILTypeAux n inst rty) @@ -148,8 +142,11 @@ type IlxUnionInfo = /// generate the helpers? cudDebugProxies: bool + cudDebugDisplayAttributes: ILAttribute list - cudAlternatives: IlxUnionAlternative[] + + cudAlternatives: IlxUnionCase[] + cudNullPermitted: bool /// debug info for generated code for classunions diff --git a/src/fsharp/absil/ilx.fsi b/src/fsharp/absil/ilx.fsi index ee139d9f89f..c1e700cfd1f 100644 --- a/src/fsharp/absil/ilx.fsi +++ b/src/fsharp/absil/ilx.fsi @@ -1,33 +1,28 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// ILX extensions to Abstract IL types and instructions F# -module internal FSharp.Compiler.AbstractIL.Extensions.ILX.Types +module internal FSharp.Compiler.AbstractIL.ILX.Types -open Internal.Utilities -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.IL -// -------------------------------------------------------------------- -// Union references -// -------------------------------------------------------------------- - +/// Union case field [] -type IlxUnionField = - new: ILFieldDef -> IlxUnionField +type IlxUnionCaseField = + new: ILFieldDef -> IlxUnionCaseField member Type: ILType member Name: string /// The name used for the field in parameter or IL field position. member LowerName: string member ILField: ILFieldDef -type IlxUnionAlternative = +/// Union alternative +type IlxUnionCase = { altName: string - altFields: IlxUnionField[] + altFields: IlxUnionCaseField[] altCustomAttrs: ILAttributes } - member FieldDefs: IlxUnionField[] - member FieldDef: int -> IlxUnionField + member FieldDefs: IlxUnionCaseField[] + member FieldDef: int -> IlxUnionCaseField member Name: string member IsNullary : bool member FieldTypes: ILType[] @@ -39,8 +34,9 @@ type IlxUnionHasHelpers = | SpecialFSharpListHelpers | SpecialFSharpOptionHelpers +/// Union references type IlxUnionRef = - | IlxUnionRef of boxity: ILBoxity * ILTypeRef * IlxUnionAlternative[] * bool (* cudNullPermitted *) * IlxUnionHasHelpers (* cudHasHelpers *) + | IlxUnionRef of boxity: ILBoxity * ILTypeRef * IlxUnionCase[] * bool (* cudNullPermitted *) * IlxUnionHasHelpers (* cudHasHelpers *) type IlxUnionSpec = | IlxUnionSpec of IlxUnionRef * ILGenericArgs @@ -49,9 +45,9 @@ type IlxUnionSpec = member GenericArgs: ILGenericArgs - member Alternatives: IlxUnionAlternative list + member Alternatives: IlxUnionCase list - member AlternativesArray: IlxUnionAlternative[] + member AlternativesArray: IlxUnionCase[] member Boxity: ILBoxity @@ -61,9 +57,9 @@ type IlxUnionSpec = member HasHelpers: IlxUnionHasHelpers - member Alternative: int -> IlxUnionAlternative + member Alternative: int -> IlxUnionCase - member FieldDef: int -> int -> IlxUnionField + member FieldDef: int -> int -> IlxUnionCaseField // -------------------------------------------------------------------- // Closure references @@ -141,7 +137,7 @@ type IlxUnionInfo = cudDebugDisplayAttributes: ILAttribute list - cudAlternatives: IlxUnionAlternative[] + cudAlternatives: IlxUnionCase[] cudNullPermitted: bool diff --git a/src/fsharp/absil/zmap.fs b/src/fsharp/absil/zmap.fs index eebdf0344ff..92edf3d1d1f 100644 --- a/src/fsharp/absil/zmap.fs +++ b/src/fsharp/absil/zmap.fs @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.AbstractIL.Internal +namespace Internal.Utilities.Collections open Internal.Utilities.Collections.Tagged open System.Collections.Generic @@ -8,7 +8,6 @@ open System.Collections.Generic /// Maps with a specific comparison function type internal Zmap<'Key,'T> = Internal.Utilities.Collections.Tagged.Map<'Key,'T> -[] module internal Zmap = let empty (ord: IComparer<'T>) = Map<_,_,_>.Empty(ord) diff --git a/src/fsharp/absil/zmap.fsi b/src/fsharp/absil/zmap.fsi index 946f4543d4e..6c67f239770 100644 --- a/src/fsharp/absil/zmap.fsi +++ b/src/fsharp/absil/zmap.fsi @@ -1,16 +1,12 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.AbstractIL.Internal +namespace Internal.Utilities.Collections -open Internal.Utilities -open Internal.Utilities.Collections.Tagged -open FSharp.Compiler.AbstractIL.Internal.Library open System.Collections.Generic /// Maps with a specific comparison function type internal Zmap<'Key,'T> = Internal.Utilities.Collections.Tagged.Map<'Key,'T> -[] module internal Zmap = val empty : IComparer<'Key> -> Zmap<'Key,'T> diff --git a/src/fsharp/absil/zset.fs b/src/fsharp/absil/zset.fs index f766178ebb1..c8314294108 100644 --- a/src/fsharp/absil/zset.fs +++ b/src/fsharp/absil/zset.fs @@ -1,16 +1,13 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.AbstractIL.Internal +namespace Internal.Utilities.Collections -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal.Library open Internal.Utilities.Collections.Tagged open System.Collections.Generic /// Sets with a specific comparison function type internal Zset<'T> = Internal.Utilities.Collections.Tagged.Set<'T> -[] module internal Zset = let empty (ord : IComparer<'T>) = Internal.Utilities.Collections.Tagged.Set<_,_>.Empty(ord) diff --git a/src/fsharp/absil/zset.fsi b/src/fsharp/absil/zset.fsi index 5d1d3419747..1128cccbfe5 100644 --- a/src/fsharp/absil/zset.fsi +++ b/src/fsharp/absil/zset.fsi @@ -1,17 +1,13 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.AbstractIL.Internal +namespace Internal.Utilities.Collections -open Internal.Utilities open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal.Library open System.Collections.Generic /// Sets with a specific comparison function type internal Zset<'T> = Internal.Utilities.Collections.Tagged.Set<'T> - -[] module internal Zset = val empty : IComparer<'T> -> Zset<'T> diff --git a/src/fsharp/autobox.fs b/src/fsharp/autobox.fs index d026453a82b..d5854daa0ac 100644 --- a/src/fsharp/autobox.fs +++ b/src/fsharp/autobox.fs @@ -2,13 +2,13 @@ module internal FSharp.Compiler.AutoBox -open FSharp.Compiler.AbstractIL.Internal +open Internal.Utilities.Collections +open Internal.Utilities.Library.Extras open FSharp.Compiler open FSharp.Compiler.ErrorLogger open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.Lib open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypeRelations @@ -23,12 +23,15 @@ type cenv = /// Find all the mutable locals that escape a method, function or lambda expression let DecideEscapes syntacticArgs body = - let cantBeFree v = + let isMutableEscape v = let passedIn = ListSet.contains valEq v syntacticArgs - not passedIn && (v.IsMutable && v.ValReprInfo.IsNone) + not passedIn && + v.IsMutable && + v.ValReprInfo.IsNone && + not (Optimizer.IsKnownOnlyMutableBeforeUse (mkLocalValRef v)) let frees = freeInExpr CollectLocals body - frees.FreeLocals |> Zset.filter cantBeFree + frees.FreeLocals |> Zset.filter isMutableEscape /// Find all the mutable locals that escape a lambda expression, ignoring the arguments to the lambda let DecideLambda exprF cenv topValInfo expr ety z = diff --git a/src/fsharp/autobox.fsi b/src/fsharp/autobox.fsi index 09e62ff8dfd..00feb25f75a 100644 --- a/src/fsharp/autobox.fsi +++ b/src/fsharp/autobox.fsi @@ -2,9 +2,9 @@ module internal FSharp.Compiler.AutoBox -open FSharp.Compiler.TypedTree -open FSharp.Compiler.TcGlobals open FSharp.Compiler.Import +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.TypedTree /// Rewrite mutable locals to reference cells across an entire implementation file val TransformImplFile: g: TcGlobals -> amap: ImportMap -> implFile: TypedImplFile -> TypedImplFile diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs index 247c822c222..e1779881d56 100644 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -1,15 +1,15 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -// Driver for F# compiler. -// +// Driver for F# compiler. +// // Roughly divides into: // - Parsing -// - Flags +// - Flags // - Importing IL assemblies // - Compiling (including optimizing) // - Linking (including ILX-IL transformation) -module internal FSharp.Compiler.Driver +module internal FSharp.Compiler.Driver open System open System.Collections.Generic @@ -21,14 +21,13 @@ open System.Text open System.Threading open Internal.Utilities -open Internal.Utilities.Filename -open Internal.Utilities.StructuredFormat +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILBinaryReader -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.CheckExpressions open FSharp.Compiler.CheckDeclarations @@ -38,22 +37,26 @@ open FSharp.Compiler.CompilerImports open FSharp.Compiler.CompilerOptions open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.CreateILModule +open FSharp.Compiler.DependencyManager +open FSharp.Compiler.Diagnostics open FSharp.Compiler.ErrorLogger open FSharp.Compiler.IlxGen open FSharp.Compiler.InfoReader -open FSharp.Compiler.Lib +open FSharp.Compiler.IO open FSharp.Compiler.ParseAndCheckInputs -open FSharp.Compiler.PrettyNaming open FSharp.Compiler.OptimizeInputs open FSharp.Compiler.ScriptClosure -open FSharp.Compiler.SyntaxTree -open FSharp.Compiler.Range +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.StaticLinking +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.TcGlobals open FSharp.Compiler.XmlDocFileWriter -open FSharp.Compiler.StaticLinking -open Microsoft.DotNet.DependencyManager +open FSharp.Compiler.BuildGraph //---------------------------------------------------------------------------- // Reporting - warnings, errors @@ -61,59 +64,59 @@ open Microsoft.DotNet.DependencyManager /// An error logger that reports errors up to some maximum, notifying the exiter when that maximum is reached [] -type ErrorLoggerUpToMaxErrors(tcConfigB: TcConfigBuilder, exiter: Exiter, nameForDebugging) = +type ErrorLoggerUpToMaxErrors(tcConfigB: TcConfigBuilder, exiter: Exiter, nameForDebugging) = inherit ErrorLogger(nameForDebugging) let mutable errors = 0 /// Called when an error or warning occurs - abstract HandleIssue: tcConfigB: TcConfigBuilder * error: PhasedDiagnostic * isError: bool -> unit + abstract HandleIssue: tcConfigB: TcConfigBuilder * error: PhasedDiagnostic * severity: FSharpDiagnosticSeverity -> unit /// Called when 'too many errors' has occurred abstract HandleTooManyErrors: text: string -> unit override x.ErrorCount = errors - override x.DiagnosticSink(err, isError) = - if isError || ReportWarningAsError tcConfigB.errorSeverityOptions err then - if errors >= tcConfigB.maxErrors then + override x.DiagnosticSink(err, severity) = + if severity = FSharpDiagnosticSeverity.Error || ReportWarningAsError tcConfigB.errorSeverityOptions err then + if errors >= tcConfigB.maxErrors then x.HandleTooManyErrors(FSComp.SR.fscTooManyErrors()) exiter.Exit 1 - x.HandleIssue(tcConfigB, err, true) + x.HandleIssue(tcConfigB, err, FSharpDiagnosticSeverity.Error) errors <- errors + 1 - match err.Exception, tcConfigB.simulateException with - | InternalError (msg, _), None + match err.Exception, tcConfigB.simulateException with + | InternalError (msg, _), None | Failure msg, None -> Debug.Assert(false, sprintf "Bug in compiler: %s\n%s" msg (err.Exception.ToString())) | :? KeyNotFoundException, None -> Debug.Assert(false, sprintf "Lookup exception in compiler: %s" (err.Exception.ToString())) | _ -> () elif ReportWarning tcConfigB.errorSeverityOptions err then - x.HandleIssue(tcConfigB, err, isError) - + x.HandleIssue(tcConfigB, err, severity) + -/// Create an error logger that counts and prints errors -let ConsoleErrorLoggerUpToMaxErrors (tcConfigB: TcConfigBuilder, exiter : Exiter) = +/// Create an error logger that counts and prints errors +let ConsoleErrorLoggerUpToMaxErrors (tcConfigB: TcConfigBuilder, exiter : Exiter) = { new ErrorLoggerUpToMaxErrors(tcConfigB, exiter, "ConsoleErrorLoggerUpToMaxErrors") with - - member __.HandleTooManyErrors(text : string) = - DoWithErrorColor false (fun () -> Printf.eprintfn "%s" text) - member __.HandleIssue(tcConfigB, err, isError) = - DoWithErrorColor isError (fun () -> - let diag = OutputDiagnostic (tcConfigB.implicitIncludeDir, tcConfigB.showFullPaths, tcConfigB.flatErrors, tcConfigB.errorStyle, isError) + member _.HandleTooManyErrors(text : string) = + DoWithDiagnosticColor FSharpDiagnosticSeverity.Warning (fun () -> Printf.eprintfn "%s" text) + + member _.HandleIssue(tcConfigB, err, severity) = + DoWithDiagnosticColor severity (fun () -> + let diag = OutputDiagnostic (tcConfigB.implicitIncludeDir, tcConfigB.showFullPaths, tcConfigB.flatErrors, tcConfigB.errorStyle, severity) writeViaBuffer stderr diag err stderr.WriteLine()) } :> ErrorLogger /// This error logger delays the messages it receives. At the end, call ForwardDelayedDiagnostics -/// to send the held messages. +/// to send the held messages. type DelayAndForwardErrorLogger(exiter: Exiter, errorLoggerProvider: ErrorLoggerProvider) = inherit CapturingErrorLogger("DelayAndForwardErrorLogger") - member x.ForwardDelayedDiagnostics(tcConfigB: TcConfigBuilder) = + member x.ForwardDelayedDiagnostics(tcConfigB: TcConfigBuilder) = let errorLogger = errorLoggerProvider.CreateErrorLoggerUpToMaxErrors(tcConfigB, exiter) x.CommitDelayedDiagnostics errorLogger @@ -124,102 +127,128 @@ and [] abstract CreateErrorLoggerUpToMaxErrors : tcConfigBuilder : TcConfigBuilder * exiter : Exiter -> ErrorLogger - + /// Part of LegacyHostedCompilerForTesting /// /// Yet another ErrorLogger implementation, capturing the messages but only up to the maxerrors maximum -type InProcErrorLoggerProvider() = +type InProcErrorLoggerProvider() = let errors = ResizeArray() let warnings = ResizeArray() - member __.Provider = + member _.Provider = { new ErrorLoggerProvider() with member log.CreateErrorLoggerUpToMaxErrors(tcConfigBuilder, exiter) = { new ErrorLoggerUpToMaxErrors(tcConfigBuilder, exiter, "InProcCompilerErrorLoggerUpToMaxErrors") with - member this.HandleTooManyErrors text = warnings.Add(Diagnostic.Short(false, text)) + member this.HandleTooManyErrors text = + warnings.Add(Diagnostic.Short(FSharpDiagnosticSeverity.Warning, text)) - member this.HandleIssue(tcConfigBuilder, err, isError) = + member this.HandleIssue(tcConfigBuilder, err, severity) = // 'true' is passed for "suggestNames", since we want to suggest names with fsc.exe runs and this doesn't affect IDE perf - let errs = + let diagnostics = CollectDiagnostic (tcConfigBuilder.implicitIncludeDir, tcConfigBuilder.showFullPaths, - tcConfigBuilder.flatErrors, tcConfigBuilder.errorStyle, isError, err, true) - let container = if isError then errors else warnings - container.AddRange(errs) } + tcConfigBuilder.flatErrors, tcConfigBuilder.errorStyle, severity, err, true) + match severity with + | FSharpDiagnosticSeverity.Error -> + errors.AddRange(diagnostics) + | FSharpDiagnosticSeverity.Warning -> + warnings.AddRange(diagnostics) + | _ -> ()} :> ErrorLogger } - member __.CapturedErrors = errors.ToArray() + member _.CapturedErrors = errors.ToArray() - member __.CapturedWarnings = warnings.ToArray() + member _.CapturedWarnings = warnings.ToArray() /// The default ErrorLogger implementation, reporting messages to the Console up to the maxerrors maximum -type ConsoleLoggerProvider() = +type ConsoleLoggerProvider() = inherit ErrorLoggerProvider() override this.CreateErrorLoggerUpToMaxErrors(tcConfigBuilder, exiter) = ConsoleErrorLoggerUpToMaxErrors(tcConfigBuilder, exiter) -/// Notify the exiter if any error has occurred -let AbortOnError (errorLogger: ErrorLogger, exiter : Exiter) = +/// Notify the exiter if any error has occurred +let AbortOnError (errorLogger: ErrorLogger, exiter : Exiter) = if errorLogger.ErrorCount > 0 then exiter.Exit 1 let TypeCheck (ctok, tcConfig, tcImports, tcGlobals, errorLogger: ErrorLogger, assemblyName, niceNameGen, tcEnv0, inputs, exiter: Exiter) = - try + try if isNil inputs then error(Error(FSComp.SR.fscNoImplementationFiles(), Range.rangeStartup)) let ccuName = assemblyName let tcInitialState = GetInitialTcState (rangeStartup, ccuName, tcConfig, tcGlobals, tcImports, niceNameGen, tcEnv0) TypeCheckClosedInputSet (ctok, (fun () -> errorLogger.ErrorCount > 0), tcConfig, tcImports, tcGlobals, None, tcInitialState, inputs) - with e -> + with e -> errorRecovery e rangeStartup exiter.Exit 1 /// Check for .fsx and, if present, compute the load closure for of #loaded files. -let AdjustForScriptCompile(ctok, tcConfigB: TcConfigBuilder, commandLineSourceFiles, lexResourceManager, dependencyProvider) = +/// +/// This is the "script compilation" feature that has always been present in the F# compiler, that allows you to compile scripts +/// and get the load closure and references from them. This applies even if the script is in a project (with 'Compile' action), for example. +/// +/// Any DLL references implied by package references are also retrieved from the script. +/// +/// When script compilation is invoked, the outputs are not necessarily a functioning application - the referenced DLLs are not +/// copied to the output folder, for example (except perhaps FSharp.Core.dll). +/// +/// NOTE: there is similar code in IncrementalBuilder.fs and this code should really be reconciled with that +let AdjustForScriptCompile(tcConfigB: TcConfigBuilder, commandLineSourceFiles, lexResourceManager, dependencyProvider) = let combineFilePath file = try if FileSystem.IsPathRootedShim file then file else Path.Combine(tcConfigB.implicitIncludeDir, file) with _ -> - error (Error(FSComp.SR.pathIsInvalid file, rangeStartup)) - - let commandLineSourceFiles = - commandLineSourceFiles + error (Error(FSComp.SR.pathIsInvalid file, rangeStartup)) + + let commandLineSourceFiles = + commandLineSourceFiles |> List.map combineFilePath - - let mutable allSources = [] - - let tcConfig = TcConfig.Create(tcConfigB, validate=false) - + + // Script compilation is active if the last item being compiled is a script and --noframework has not been specified + let mutable allSources = [] + + let tcConfig = TcConfig.Create(tcConfigB, validate=false) + let AddIfNotPresent(filename: string) = if not(allSources |> List.contains filename) then allSources <- filename :: allSources - + let AppendClosureInformation filename = - if IsScript filename then - let closure = + if IsScript filename then + let closure = LoadClosure.ComputeClosureOfScriptFiles - (ctok, tcConfig, [filename, rangeStartup], CodeContext.Compilation, + (tcConfig, [filename, rangeStartup], CodeContext.Compilation, lexResourceManager, dependencyProvider) - // Record the references from the analysis of the script. The full resolutions are recorded as the corresponding #I paths used to resolve them - // are local to the scripts and not added to the tcConfigB (they are added to localized clones of the tcConfigB). + // Record the new references (non-framework) references from the analysis of the script. (The full resolutions are recorded + // as the corresponding #I paths used to resolve them are local to the scripts and not added to the tcConfigB - they are + // added to localized clones of the tcConfigB). let references = closure.References |> List.collect snd |> List.filter (fun r -> not (Range.equals r.originalReference.Range range0) && not (Range.equals r.originalReference.Range rangeStartup)) references |> List.iter (fun r -> tcConfigB.AddReferencedAssemblyByPath(r.originalReference.Range, r.resolvedPath)) + + // Also record the other declarations from the script. closure.NoWarns |> List.collect (fun (n, ms) -> ms|>List.map(fun m->m, n)) |> List.iter (fun (x,m) -> tcConfigB.TurnWarningOff(x, m)) closure.SourceFiles |> List.map fst |> List.iter AddIfNotPresent closure.AllRootFileDiagnostics |> List.iter diagnosticSink - + + // If there is a target framework for the script then push that as a requirement into the overall compilation and add all the framework references implied + // by the script too. + tcConfigB.SetPrimaryAssembly (if closure.UseDesktopFramework then PrimaryAssembly.Mscorlib else PrimaryAssembly.System_Runtime) + if tcConfigB.framework then + let references = closure.References |> List.collect snd + references |> List.iter (fun r -> tcConfigB.AddReferencedAssemblyByPath(r.originalReference.Range, r.resolvedPath)) + else AddIfNotPresent filename - + // Find closure of .fsx files. commandLineSourceFiles |> List.iter AppendClosureInformation @@ -229,14 +258,14 @@ let SetProcessThreadLocals tcConfigB = match tcConfigB.preferredUiLang with | Some s -> Thread.CurrentThread.CurrentUICulture <- new CultureInfo(s) | None -> () - if tcConfigB.utf8output then + if tcConfigB.utf8output then Console.OutputEncoding <- Encoding.UTF8 let ProcessCommandLineFlags (tcConfigB: TcConfigBuilder, lcidFromCodePage, argv) = let mutable inputFilesRef = [] - let collect name = + let collect name = let lower = String.lowercase name - if List.exists (Filename.checkSuffix lower) [".resx"] then + if List.exists (FileSystemUtils.checkSuffix lower) [".resx"] then error(Error(FSComp.SR.fscResxSourceFileDeprecated name, rangeStartup)) else inputFilesRef <- name :: inputFilesRef @@ -268,7 +297,7 @@ let ProcessCommandLineFlags (tcConfigB: TcConfigBuilder, lcidFromCodePage, argv) SetProcessThreadLocals tcConfigB (* step - get dll references *) - let dllFiles, sourceFiles = inputFiles |> List.map(fun p -> trimQuotes p) |> List.partition Filename.isDll + let dllFiles, sourceFiles = inputFiles |> List.map(fun p -> FileSystemUtils.trimQuotes p) |> List.partition FileSystemUtils.isDll match dllFiles with | [] -> () | h :: _ -> errorR (Error(FSComp.SR.fscReferenceOnCommandLine h, rangeStartup)) @@ -276,77 +305,57 @@ let ProcessCommandLineFlags (tcConfigB: TcConfigBuilder, lcidFromCodePage, argv) dllFiles |> List.iter (fun f->tcConfigB.AddReferencedAssemblyByPath(rangeStartup, f)) sourceFiles -let EncodeSignatureData(tcConfig: TcConfig, tcGlobals, exportRemapping, generatedCcu, outfile, isIncrementalBuild) = - if tcConfig.GenerateSignatureData then - let resource = WriteSignatureData (tcConfig, tcGlobals, exportRemapping, generatedCcu, outfile, isIncrementalBuild) - // The resource gets written to a file for FSharp.Core - let useDataFiles = (tcConfig.useOptimizationDataFile || tcGlobals.compilingFslib) && not isIncrementalBuild - if useDataFiles then - let sigDataFileName = (Filename.chopExtension outfile)+".sigdata" - let bytes = resource.GetBytes() - use fileStream = File.Create(sigDataFileName, bytes.Length) - bytes.CopyTo fileStream - let resources = - [ resource ] - let sigAttr = mkSignatureDataVersionAttr tcGlobals (IL.parseILVersion Internal.Utilities.FSharpEnvironment.FSharpBinaryMetadataFormatRevision) - [sigAttr], resources - else - [], [] - -let EncodeOptimizationData(tcGlobals, tcConfig: TcConfig, outfile, exportRemapping, data, isIncrementalBuild) = - if tcConfig.GenerateOptimizationData then - let data = map2Of2 (Optimizer.RemapOptimizationInfo tcGlobals exportRemapping) data - // As with the sigdata file, the optdata gets written to a file for FSharp.Core - let useDataFiles = (tcConfig.useOptimizationDataFile || tcGlobals.compilingFslib) && not isIncrementalBuild - if useDataFiles then - let ccu, modulInfo = data - let bytes = TypedTreePickle.pickleObjWithDanglingCcus isIncrementalBuild outfile tcGlobals ccu Optimizer.p_CcuOptimizationInfo modulInfo - let optDataFileName = (Filename.chopExtension outfile)+".optdata" - File.WriteAllBytes(optDataFileName, bytes) - let (ccu, optData) = - if tcConfig.onlyEssentialOptimizationData then - map2Of2 Optimizer.AbstractOptimizationInfoToEssentials data - else - data - [ WriteOptimizationData (tcGlobals, outfile, isIncrementalBuild, ccu, optData) ] - else - [ ] - /// Write a .fsi file for the --sig option module InterfaceFileWriter = - - let BuildInitialDisplayEnvForSigFileGeneration tcGlobals = - let denv = DisplayEnv.Empty tcGlobals - let denv = - { denv with - showImperativeTyparAnnotations=true - showHiddenMembers=true - showObsoleteMembers=true - showAttributes=true } - denv.SetOpenPaths - [ FSharpLib.RootPath - FSharpLib.CorePath - FSharpLib.CollectionsPath - FSharpLib.ControlPath - (IL.splitNamespace FSharpLib.ExtraTopLevelOperatorsName) ] - - let WriteInterfaceFile (tcGlobals, tcConfig: TcConfig, infoReader, declaredImpls) = - - /// Use a UTF-8 Encoding with no Byte Order Mark - let os = - if tcConfig.printSignatureFile="" then Console.Out - else (File.CreateText tcConfig.printSignatureFile :> TextWriter) - - if tcConfig.printSignatureFile <> "" && not (List.exists (Filename.checkSuffix tcConfig.printSignatureFile) FSharpLightSyntaxFileSuffixes) then - fprintfn os "#light" - fprintfn os "" - - for (TImplFile (_, _, mexpr, _, _, _)) in declaredImpls do - let denv = BuildInitialDisplayEnvForSigFileGeneration tcGlobals - writeViaBuffer os (fun os s -> Printf.bprintf os "%s\n\n" s) - (NicePrint.layoutInferredSigOfModuleExpr true { denv with shrinkOverloads = false; printVerboseSignatures = true } infoReader AccessibleFromSomewhere range0 mexpr |> Display.squashTo 80 |> Layout.showL) - - if tcConfig.printSignatureFile <> "" then os.Dispose() + let WriteInterfaceFile (tcGlobals, tcConfig: TcConfig, infoReader, declaredImpls: TypedImplFile list) = + // there are two modes here: + // * write one unified sig file to a given path, or + // * write individual sig files to paths matching their impl files + let denv = DisplayEnv.InitialForSigFileGeneration tcGlobals + let denv = { denv with shrinkOverloads = false; printVerboseSignatures = true } + + let writeToFile os (TImplFile (_, _, mexpr, _, _, _)) = + writeViaBuffer os (fun os s -> Printf.bprintf os "%s\n\n" s) + (NicePrint.layoutInferredSigOfModuleExpr true denv infoReader AccessibleFromSomewhere range0 mexpr |> Display.squashTo 80 |> LayoutRender.showL) + + let writeHeader filePath os = + if filePath <> "" && not (List.exists (FileSystemUtils.checkSuffix filePath) FSharpLightSyntaxFileSuffixes) then + fprintfn os "#light" + fprintfn os "" + + let writeAllToSameFile declaredImpls = + /// Use a UTF-8 Encoding with no Byte Order Mark + let os = + if tcConfig.printSignatureFile = "" then + Console.Out + else + FileSystem.OpenFileForWriteShim(tcConfig.printSignatureFile, FileMode.OpenOrCreate).GetWriter() + + writeHeader tcConfig.printSignatureFile os + + for impl in declaredImpls do + writeToFile os impl + + if tcConfig.printSignatureFile <> "" then os.Dispose() + + let extensionForFile (filePath: string) = + if (List.exists (FileSystemUtils.checkSuffix filePath) mlCompatSuffixes) then + ".mli" + else + ".fsi" + + let writeToSeparateFiles (declaredImpls: TypedImplFile list) = + for (TImplFile (name, _, _, _, _, _) as impl) in declaredImpls do + let filename = System.IO.Path.ChangeExtension(name.Range.FileName, extensionForFile name.Range.FileName) + printfn "writing impl file to %s" filename + use os = FileSystem.OpenFileForWriteShim(filename, FileMode.OpenOrCreate).GetWriter() + writeHeader filename os + writeToFile os impl + + if tcConfig.printSignature then + writeAllToSameFile declaredImpls + else if tcConfig.printAllSignatureFiles then + writeToSeparateFiles declaredImpls //---------------------------------------------------------------------------- // CopyFSharpCore @@ -361,8 +370,8 @@ let CopyFSharpCore(outFile: string, referencedDlls: AssemblyReference list) = let fsharpCoreAssemblyName = GetFSharpCoreLibraryName() + ".dll" let fsharpCoreDestinationPath = Path.Combine(outDir, fsharpCoreAssemblyName) let copyFileIfDifferent src dest = - if not (File.Exists dest) || (File.GetCreationTimeUtc src <> File.GetCreationTimeUtc dest) then - File.Copy(src, dest, true) + if not (FileSystem.FileExistsShim dest) || (FileSystem.GetCreationTimeShim src <> FileSystem.GetCreationTimeShim dest) then + FileSystem.CopyShim(src, dest, true) match referencedDlls |> Seq.tryFind (fun dll -> String.Equals(Path.GetFileName(dll.Text), fsharpCoreAssemblyName, StringComparison.CurrentCultureIgnoreCase)) with | Some referencedFsharpCoreDll -> copyFileIfDifferent referencedFsharpCoreDll.Text fsharpCoreDestinationPath @@ -371,12 +380,12 @@ let CopyFSharpCore(outFile: string, referencedDlls: AssemblyReference list) = Assembly.GetExecutingAssembly().Location let compilerLocation = Path.GetDirectoryName executionLocation let compilerFsharpCoreDllPath = Path.Combine(compilerLocation, fsharpCoreAssemblyName) - if File.Exists compilerFsharpCoreDllPath then + if FileSystem.FileExistsShim compilerFsharpCoreDllPath then copyFileIfDifferent compilerFsharpCoreDllPath fsharpCoreDestinationPath else errorR(Error(FSComp.SR.fsharpCoreNotFoundToBeCopied(), rangeCmdArgs)) -// Try to find an AssemblyVersion attribute +// Try to find an AssemblyVersion attribute let TryFindVersionAttribute g attrib attribName attribs deterministic = match AttributeHelpers.TryFindStringAttribute g attrib attribs with | Some versionString -> @@ -397,18 +406,18 @@ let TryFindVersionAttribute g attrib attribName attribs deterministic = [] type Args<'T> = Args of 'T -/// First phase of compilation. +/// First phase of compilation. /// - Set up console encoding and code page settings /// - Process command line, flags and collect filenames /// - Resolve assemblies /// - Import assemblies /// - Parse source files /// - Check the inputs -let main1(ctok, argv, legacyReferenceResolver, bannerAlreadyPrinted, - reduceMemoryUsage: ReduceMemoryFlag, defaultCopyFSharpCore: CopyFSharpCoreFlag, - exiter: Exiter, errorLoggerProvider: ErrorLoggerProvider, disposables: DisposablesTracker) = +let main1(ctok, argv, legacyReferenceResolver, bannerAlreadyPrinted, + reduceMemoryUsage: ReduceMemoryFlag, defaultCopyFSharpCore: CopyFSharpCoreFlag, + exiter: Exiter, errorLoggerProvider: ErrorLoggerProvider, disposables: DisposablesTracker) = - // See Bug 735819 + // See Bug 735819 let lcidFromCodePage = if (Console.OutputEncoding.CodePage <> 65001) && (Console.OutputEncoding.CodePage <> Thread.CurrentThread.CurrentUICulture.TextInfo.OEMCodePage) && @@ -424,130 +433,122 @@ let main1(ctok, argv, legacyReferenceResolver, bannerAlreadyPrinted, let defaultFSharpBinariesDir = FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(FSharpEnvironment.tryCurrentDomain()).Value - let tcConfigB = - TcConfigBuilder.CreateNew(legacyReferenceResolver, defaultFSharpBinariesDir, - reduceMemoryUsage=reduceMemoryUsage, implicitIncludeDir=directoryBuildingFrom, - isInteractive=false, isInvalidationSupported=false, - defaultCopyFSharpCore=defaultCopyFSharpCore, - tryGetMetadataSnapshot=tryGetMetadataSnapshot) + let tcConfigB = + TcConfigBuilder.CreateNew(legacyReferenceResolver, + defaultFSharpBinariesDir, + reduceMemoryUsage=reduceMemoryUsage, + implicitIncludeDir=directoryBuildingFrom, + isInteractive=false, + isInvalidationSupported=false, + defaultCopyFSharpCore=defaultCopyFSharpCore, + tryGetMetadataSnapshot=tryGetMetadataSnapshot, + sdkDirOverride=None, + rangeForErrors=range0) // Preset: --optimize+ -g --tailcalls+ (see 4505) SetOptimizeSwitch tcConfigB OptionSwitch.On SetDebugSwitch tcConfigB None OptionSwitch.Off - SetTailcallSwitch tcConfigB OptionSwitch.On + SetTailcallSwitch tcConfigB OptionSwitch.On // Now install a delayed logger to hold all errors from flags until after all flags have been parsed (for example, --vserrors) let delayForFlagsLogger = errorLoggerProvider.CreateDelayAndForwardLogger exiter - let _unwindEL_1 = PushErrorLoggerPhaseUntilUnwind (fun _ -> delayForFlagsLogger) - + let _unwindEL_1 = PushErrorLoggerPhaseUntilUnwind (fun _ -> delayForFlagsLogger) + // Share intern'd strings across all lexing/parsing let lexResourceManager = new Lexhelp.LexResourceManager() let dependencyProvider = new DependencyProvider() - // Process command line, flags and collect filenames - let sourceFiles = + // Process command line, flags and collect filenames + let sourceFiles = // The ParseCompilerOptions function calls imperative function to process "real" args - // Rather than start processing, just collect names, then process them. - try + // Rather than start processing, just collect names, then process them. + try let files = ProcessCommandLineFlags (tcConfigB, lcidFromCodePage, argv) - AdjustForScriptCompile(ctok, tcConfigB, files, lexResourceManager, dependencyProvider) - with e -> + AdjustForScriptCompile(tcConfigB, files, lexResourceManager, dependencyProvider) + with e -> errorRecovery e rangeStartup delayForFlagsLogger.ForwardDelayedDiagnostics tcConfigB - exiter.Exit 1 - - tcConfigB.conditionalCompilationDefines <- "COMPILED" :: tcConfigB.conditionalCompilationDefines + exiter.Exit 1 + + tcConfigB.conditionalCompilationDefines <- "COMPILED" :: tcConfigB.conditionalCompilationDefines // Display the banner text, if necessary - if not bannerAlreadyPrinted then + if not bannerAlreadyPrinted then DisplayBannerText tcConfigB // Create tcGlobals and frameworkTcImports - let outfile, pdbfile, assemblyName = - try + let outfile, pdbfile, assemblyName = + try tcConfigB.DecideNames sourceFiles with e -> errorRecovery e rangeStartup delayForFlagsLogger.ForwardDelayedDiagnostics tcConfigB - exiter.Exit 1 - + exiter.Exit 1 + // DecideNames may give "no inputs" error. Abort on error at this point. bug://3911 if not tcConfigB.continueAfterParseFailure && delayForFlagsLogger.ErrorCount > 0 then delayForFlagsLogger.ForwardDelayedDiagnostics tcConfigB exiter.Exit 1 - - // If there's a problem building TcConfig, abort - let tcConfig = + + // If there's a problem building TcConfig, abort + let tcConfig = try TcConfig.Create(tcConfigB, validate=false) with e -> errorRecovery e rangeStartup delayForFlagsLogger.ForwardDelayedDiagnostics tcConfigB exiter.Exit 1 - + let errorLogger = errorLoggerProvider.CreateErrorLoggerUpToMaxErrors(tcConfigB, exiter) // Install the global error logger and never remove it. This logger does have all command-line flags considered. let _unwindEL_2 = PushErrorLoggerPhaseUntilUnwind (fun _ -> errorLogger) - + // Forward all errors from flags delayForFlagsLogger.CommitDelayedDiagnostics errorLogger - if not tcConfigB.continueAfterParseFailure then + if not tcConfigB.continueAfterParseFailure then AbortOnError(errorLogger, exiter) // Resolve assemblies ReportTime tcConfig "Import mscorlib and FSharp.Core.dll" let foundationalTcConfigP = TcConfigProvider.Constant tcConfig - let sysRes, otherRes, knownUnresolved = TcAssemblyResolutions.SplitNonFoundationalResolutions(ctok, tcConfig) - + let sysRes, otherRes, knownUnresolved = TcAssemblyResolutions.SplitNonFoundationalResolutions(tcConfig) + // Import basic assemblies - let tcGlobals, frameworkTcImports = TcImports.BuildFrameworkTcImports (ctok, foundationalTcConfigP, sysRes, otherRes) |> Cancellable.runWithoutCancellation + let tcGlobals, frameworkTcImports = + TcImports.BuildFrameworkTcImports (foundationalTcConfigP, sysRes, otherRes) + |> NodeCode.RunImmediateWithoutCancellation // Register framework tcImports to be disposed in future disposables.Register frameworkTcImports - // Parse sourceFiles + // Parse sourceFiles ReportTime tcConfig "Parse inputs" use unwindParsePhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse - let inputs = - try - let isLastCompiland, isExe = sourceFiles |> tcConfig.ComputeCanContainEntryPoint + let createErrorLogger = (fun exiter -> errorLoggerProvider.CreateDelayAndForwardLogger(exiter) :> CapturingErrorLogger) + let inputs = ParseInputFiles(tcConfig, lexResourceManager, ["COMPILED"], sourceFiles, errorLogger, exiter, createErrorLogger, (*retryLocked*)false) - List.zip sourceFiles isLastCompiland - // PERF: consider making this parallel, once uses of global state relevant to parsing are cleaned up - |> List.choose (fun (sourceFile, isLastCompiland) -> - - let sourceFileDirectory = Path.GetDirectoryName sourceFile - - match ParseOneInputFile(tcConfig, lexResourceManager, ["COMPILED"], sourceFile, (isLastCompiland, isExe), errorLogger, (*retryLocked*)false) with - | Some input -> Some (input, sourceFileDirectory) - | None -> None) - - with e -> - errorRecoveryNoRange e - exiter.Exit 1 - let inputs, _ = (Map.empty, inputs) ||> List.mapFold (fun state (input, x) -> - let inputT, stateT = DeduplicateParsedInputModuleName state input + let inputT, stateT = DeduplicateParsedInputModuleName state input (inputT, x), stateT) // Print the AST if requested - if tcConfig.printAst then - for (input, _filename) in inputs do + if tcConfig.printAst then + for (input, _filename) in inputs do printf "AST:\n" printfn "%+A" input printf "\n" - if tcConfig.parseOnly then exiter.Exit 0 + if tcConfig.parseOnly then exiter.Exit 0 - if not tcConfig.continueAfterParseFailure then + if not tcConfig.continueAfterParseFailure then AbortOnError(errorLogger, exiter) // Apply any nowarn flags @@ -561,16 +562,16 @@ let main1(ctok, argv, legacyReferenceResolver, bannerAlreadyPrinted, ReportTime tcConfig "Import non-system references" let tcImports = - TcImports.BuildNonFrameworkTcImports(ctok, tcConfigP, tcGlobals, frameworkTcImports, otherRes, knownUnresolved, dependencyProvider) - |> Cancellable.runWithoutCancellation + TcImports.BuildNonFrameworkTcImports(tcConfigP, frameworkTcImports, otherRes, knownUnresolved, dependencyProvider) + |> NodeCode.RunImmediateWithoutCancellation // register tcImports to be disposed in future disposables.Register tcImports - if not tcConfig.continueAfterParseFailure then + if not tcConfig.continueAfterParseFailure then AbortOnError(errorLogger, exiter) - if tcConfig.importAllReferencesOnly then exiter.Exit 0 + if tcConfig.importAllReferencesOnly then exiter.Exit 0 // Build the initial type checking environment ReportTime tcConfig "Typecheck" @@ -582,7 +583,7 @@ let main1(ctok, argv, legacyReferenceResolver, bannerAlreadyPrinted, // Type check the inputs let inputs = inputs |> List.map fst - let tcState, topAttrs, typedAssembly, _tcEnvAtEnd = + let tcState, topAttrs, typedAssembly, _tcEnvAtEnd = TypeCheck(ctok, tcConfig, tcImports, tcGlobals, errorLogger, assemblyName, NiceNameGenerator(), tcEnv0, inputs, exiter) AbortOnError(errorLogger, exiter) @@ -603,25 +604,31 @@ let main1OfAst let tryGetMetadataSnapshot = (fun _ -> None) + let directoryBuildingFrom = Directory.GetCurrentDirectory() + let defaultFSharpBinariesDir = FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(FSharpEnvironment.tryCurrentDomain()).Value - let tcConfigB = - TcConfigBuilder.CreateNew(legacyReferenceResolver, defaultFSharpBinariesDir, - reduceMemoryUsage=reduceMemoryUsage, implicitIncludeDir=Directory.GetCurrentDirectory(), - isInteractive=false, isInvalidationSupported=false, - defaultCopyFSharpCore=CopyFSharpCoreFlag.No, - tryGetMetadataSnapshot=tryGetMetadataSnapshot) + let tcConfigB = + TcConfigBuilder.CreateNew(legacyReferenceResolver, defaultFSharpBinariesDir, + reduceMemoryUsage=reduceMemoryUsage, implicitIncludeDir=directoryBuildingFrom, + isInteractive=false, isInvalidationSupported=false, + defaultCopyFSharpCore=CopyFSharpCoreFlag.No, + tryGetMetadataSnapshot=tryGetMetadataSnapshot, + sdkDirOverride=None, + rangeForErrors=range0) let primaryAssembly = // temporary workaround until https://github.com/dotnet/fsharp/pull/8043 is merged: - // pick a primary assembly based on the current runtime. + // pick a primary assembly based on whether the developer included System>Runtime in the list of reference assemblies. // It's an ugly compromise used to avoid exposing primaryAssembly in the public api for this function. - let isNetCoreAppProcess = System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription.StartsWith ".NET Core" - if isNetCoreAppProcess then PrimaryAssembly.System_Runtime - else PrimaryAssembly.Mscorlib + let includesSystem_Runtime = dllReferences |> Seq.exists(fun f -> Path.GetFileName(f).Equals("system.runtime.dll",StringComparison.InvariantCultureIgnoreCase)) + if includesSystem_Runtime then + PrimaryAssembly.System_Runtime + else + PrimaryAssembly.Mscorlib tcConfigB.target <- target - tcConfigB.primaryAssembly <- primaryAssembly + tcConfigB.SetPrimaryAssembly primaryAssembly if noframework then tcConfigB.framework <- false tcConfigB.implicitlyResolveAssemblies <- false @@ -636,15 +643,15 @@ let main1OfAst // Now install a delayed logger to hold all errors from flags until after all flags have been parsed (for example, --vserrors) let delayForFlagsLogger = errorLoggerProvider.CreateDelayAndForwardLogger exiter - let _unwindEL_1 = PushErrorLoggerPhaseUntilUnwind (fun _ -> delayForFlagsLogger) + let _unwindEL_1 = PushErrorLoggerPhaseUntilUnwind (fun _ -> delayForFlagsLogger) tcConfigB.conditionalCompilationDefines <- "COMPILED" :: tcConfigB.conditionalCompilationDefines // append assembly dependencies dllReferences |> List.iter (fun ref -> tcConfigB.AddReferencedAssemblyByPath(rangeStartup,ref)) - // If there's a problem building TcConfig, abort - let tcConfig = + // If there's a problem building TcConfig, abort + let tcConfig = try TcConfig.Create(tcConfigB,validate=false) with e -> @@ -659,19 +666,21 @@ let main1OfAst // Forward all errors from flags delayForFlagsLogger.CommitDelayedDiagnostics errorLogger - + // Resolve assemblies ReportTime tcConfig "Import mscorlib and FSharp.Core.dll" let foundationalTcConfigP = TcConfigProvider.Constant tcConfig - let sysRes, otherRes, knownUnresolved = TcAssemblyResolutions.SplitNonFoundationalResolutions(ctok, tcConfig) + let sysRes, otherRes, knownUnresolved = TcAssemblyResolutions.SplitNonFoundationalResolutions(tcConfig) // Import basic assemblies - let tcGlobals, frameworkTcImports = TcImports.BuildFrameworkTcImports (ctok, foundationalTcConfigP, sysRes, otherRes) |> Cancellable.runWithoutCancellation + let tcGlobals, frameworkTcImports = + TcImports.BuildFrameworkTcImports (foundationalTcConfigP, sysRes, otherRes) + |> NodeCode.RunImmediateWithoutCancellation // Register framework tcImports to be disposed in future disposables.Register frameworkTcImports - use unwindParsePhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parse) + use unwindParsePhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parse) let meta = Directory.GetCurrentDirectory() let tcConfig = (tcConfig,inputs) ||> List.fold (fun tcc inp -> ApplyMetaCommandsFromInputToTcConfig (tcc, inp, meta, dependencyProvider)) @@ -679,18 +688,21 @@ let main1OfAst // Import other assemblies ReportTime tcConfig "Import non-system references" - let tcImports = TcImports.BuildNonFrameworkTcImports(ctok, tcConfigP, tcGlobals, frameworkTcImports, otherRes, knownUnresolved, dependencyProvider) |> Cancellable.runWithoutCancellation + + let tcImports = + TcImports.BuildNonFrameworkTcImports(tcConfigP, frameworkTcImports, otherRes, knownUnresolved, dependencyProvider) + |> NodeCode.RunImmediateWithoutCancellation // register tcImports to be disposed in future disposables.Register tcImports // Build the initial type checking environment ReportTime tcConfig "Typecheck" - use unwindParsePhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.TypeCheck) + use unwindParsePhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.TypeCheck) let tcEnv0 = GetInitialTcEnv (assemblyName, rangeStartup, tcConfig, tcImports, tcGlobals) // Type check the inputs - let tcState, topAttrs, typedAssembly, _tcEnvAtEnd = + let tcState, topAttrs, typedAssembly, _tcEnvAtEnd = TypeCheck(ctok, tcConfig, tcImports, tcGlobals, errorLogger, assemblyName, NiceNameGenerator(), tcEnv0, inputs, exiter) AbortOnError(errorLogger, exiter) @@ -703,28 +715,28 @@ let main1OfAst let main2(Args (ctok, tcGlobals, tcImports: TcImports, frameworkTcImports, generatedCcu: CcuThunk, typedImplFiles, topAttrs, tcConfig: TcConfig, outfile, pdbfile, assemblyName, errorLogger, exiter: Exiter)) = if tcConfig.typeCheckOnly then exiter.Exit 0 - + generatedCcu.Contents.SetAttribs(generatedCcu.Contents.Attribs @ topAttrs.assemblyAttrs) use unwindPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.CodeGen let signingInfo = ValidateKeySigningAttributes (tcConfig, tcGlobals, topAttrs) - + AbortOnError(errorLogger, exiter) // Build an updated errorLogger that filters according to the scopedPragmas. Then install // it as the updated global error logger and never remove it let oldLogger = errorLogger - let errorLogger = + let errorLogger = let scopedPragmas = [ for (TImplFile (_, pragmas, _, _, _, _)) in typedImplFiles do yield! pragmas ] GetErrorLoggerFilteringByScopedPragmas(true, scopedPragmas, oldLogger) let _unwindEL_3 = PushErrorLoggerPhaseUntilUnwind(fun _ -> errorLogger) - // Try to find an AssemblyVersion attribute - let assemVerFromAttrib = + // Try to find an AssemblyVersion attribute + let assemVerFromAttrib = match TryFindVersionAttribute tcGlobals "System.Reflection.AssemblyVersionAttribute" "AssemblyVersionAttribute" topAttrs.assemblyAttrs tcConfig.deterministic with - | Some v -> - match tcConfig.version with + | Some v -> + match tcConfig.version with | VersionNone -> Some v | _ -> warning(Error(FSComp.SR.fscAssemblyVersionAttributeIgnored(), Range.rangeStartup)); None | _ -> None @@ -732,14 +744,14 @@ let main2(Args (ctok, tcGlobals, tcImports: TcImports, frameworkTcImports, gener // write interface, xmldoc ReportTime tcConfig ("Write Interface File") use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Output - if tcConfig.printSignature then InterfaceFileWriter.WriteInterfaceFile (tcGlobals, tcConfig, InfoReader(tcGlobals, tcImports.GetImportMap()), typedImplFiles) + if tcConfig.printSignature || tcConfig.printAllSignatureFiles 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) + if tcConfig.xmlDocOutputFile.IsSome then + XmlDocWriter.ComputeXmlDocSigs (tcGlobals, generatedCcu) ReportTime tcConfig ("Write XML docs") - tcConfig.xmlDocOutputFile |> Option.iter (fun xmlFile -> + tcConfig.xmlDocOutputFile |> Option.iter (fun xmlFile -> let xmlFile = tcConfig.MakePathAbsolute xmlFile XmlDocWriter.WriteXmlDocFile (assemblyName, generatedCcu, xmlFile)) @@ -751,70 +763,70 @@ let main2(Args (ctok, tcGlobals, tcImports: TcImports, frameworkTcImports, gener /// - encode signature data /// - optimize /// - encode optimization data -let main3(Args (ctok, tcConfig, tcImports, frameworkTcImports: TcImports, tcGlobals, - errorLogger: ErrorLogger, generatedCcu: CcuThunk, outfile, typedImplFiles, - topAttrs, pdbfile, assemblyName, assemVerFromAttrib, signingInfo, exiter: Exiter)) = - +let main3(Args (ctok, tcConfig, tcImports, frameworkTcImports: TcImports, tcGlobals, + errorLogger: ErrorLogger, generatedCcu: CcuThunk, outfile, typedImplFiles, + topAttrs, pdbfile, assemblyName, assemVerFromAttrib, signingInfo, exiter: Exiter)) = + // Encode the signature data ReportTime tcConfig ("Encode Interface Data") let exportRemapping = MakeExportRemapping generatedCcu generatedCcu.Contents - - let sigDataAttributes, sigDataResources = + + let sigDataAttributes, sigDataResources = try EncodeSignatureData(tcConfig, tcGlobals, exportRemapping, generatedCcu, outfile, false) - with e -> + with e -> errorRecoveryNoRange e exiter.Exit 1 - + // Perform optimization use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Optimize - + let optEnv0 = GetInitialOptimizationEnv (tcImports, tcGlobals) let importMap = tcImports.GetImportMap() - let metadataVersion = + let metadataVersion = match tcConfig.metadataVersion with | Some v -> v - | _ -> - match frameworkTcImports.DllTable.TryFind tcConfig.primaryAssembly.Name with - | Some ib -> ib.RawMetadata.TryGetILModuleDef().Value.MetadataVersion + | _ -> + match frameworkTcImports.DllTable.TryFind tcConfig.primaryAssembly.Name with + | Some ib -> ib.RawMetadata.TryGetILModuleDef().Value.MetadataVersion | _ -> "" - let optimizedImpls, optimizationData, _ = - ApplyAllOptimizations - (tcConfig, tcGlobals, (LightweightTcValForUsingInBuildMethodCall tcGlobals), outfile, + let optimizedImpls, optimizationData, _ = + ApplyAllOptimizations + (tcConfig, tcGlobals, (LightweightTcValForUsingInBuildMethodCall tcGlobals), outfile, importMap, false, optEnv0, generatedCcu, typedImplFiles) AbortOnError(errorLogger, exiter) - + // Encode the optimization data ReportTime tcConfig ("Encoding OptData") let optDataResources = EncodeOptimizationData(tcGlobals, tcConfig, outfile, exportRemapping, (generatedCcu, optimizationData), false) // Pass on only the minimum information required for the next phase - Args (ctok, tcConfig, tcImports, tcGlobals, errorLogger, - generatedCcu, outfile, optimizedImpls, topAttrs, pdbfile, assemblyName, + Args (ctok, tcConfig, tcImports, tcGlobals, errorLogger, + generatedCcu, outfile, optimizedImpls, topAttrs, pdbfile, assemblyName, sigDataAttributes, sigDataResources, optDataResources, assemVerFromAttrib, signingInfo, metadataVersion, exiter) /// Fourth phase of compilation. /// - Static linking /// - IL code generation -let main4 - (tcImportsCapture,dynamicAssemblyCreator) - (Args (ctok, tcConfig: TcConfig, tcImports, tcGlobals: TcGlobals, errorLogger, - generatedCcu: CcuThunk, outfile, optimizedImpls, topAttrs, pdbfile, assemblyName, - sigDataAttributes, sigDataResources, optDataResources, assemVerFromAttrib, signingInfo, metadataVersion, exiter: Exiter)) = +let main4 + (tcImportsCapture,dynamicAssemblyCreator) + (Args (ctok, tcConfig: TcConfig, tcImports, tcGlobals: TcGlobals, errorLogger, + generatedCcu: CcuThunk, outfile, optimizedImpls, topAttrs, pdbfile, assemblyName, + sigDataAttributes, sigDataResources, optDataResources, assemVerFromAttrib, signingInfo, metadataVersion, exiter: Exiter)) = - match tcImportsCapture with + match tcImportsCapture with | None -> () | Some f -> f tcImports // Compute a static linker, it gets called later. let ilGlobals = tcGlobals.ilg - if tcConfig.standalone && generatedCcu.UsesFSharp20PlusQuotations then - error(Error(FSComp.SR.fscQuotationLiteralsStaticLinking0(), rangeStartup)) + if tcConfig.standalone && generatedCcu.UsesFSharp20PlusQuotations then + error(Error(FSComp.SR.fscQuotationLiteralsStaticLinking0(), rangeStartup)) let staticLinker = StaticLink (ctok, tcConfig, tcImports, ilGlobals) @@ -834,11 +846,11 @@ let main4 let topAssemblyAttrs = codegenResults.topAssemblyAttrs let topAttrs = {topAttrs with assemblyAttrs=topAssemblyAttrs} let permissionSets = codegenResults.permissionSets - let secDecls = mkILSecurityDecls permissionSets + let secDecls = mkILSecurityDecls permissionSets - let ilxMainModule = + let ilxMainModule = MainModuleBuilder.CreateMainModule - (ctok, tcConfig, tcGlobals, tcImports, + (ctok, tcConfig, tcGlobals, tcImports, pdbfile, assemblyName, outfile, topAttrs, sigDataAttributes, sigDataResources, optDataResources, codegenResults, assemVerFromAttrib, metadataVersion, secDecls) @@ -850,27 +862,27 @@ let main4 /// Fifth phase of compilation. /// - static linking -let main5(Args (ctok, tcConfig, tcImports, tcGlobals, errorLogger: ErrorLogger, staticLinker, outfile, pdbfile, ilxMainModule, signingInfo, exiter: Exiter)) = - +let main5(Args (ctok, tcConfig, tcImports, tcGlobals, errorLogger: ErrorLogger, staticLinker, outfile, pdbfile, ilxMainModule, signingInfo, exiter: Exiter)) = + use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Output // Static linking, if any - let ilxMainModule = + let ilxMainModule = try staticLinker ilxMainModule - with e -> + with e -> errorRecoveryNoRange e exiter.Exit 1 AbortOnError(errorLogger, exiter) - + // Pass on only the minimum information required for the next phase Args (ctok, tcConfig, tcImports, tcGlobals, errorLogger, ilxMainModule, outfile, pdbfile, signingInfo, exiter) /// Sixth phase of compilation. /// - write the binaries -let main6 dynamicAssemblyCreator (Args (ctok, tcConfig, tcImports: TcImports, tcGlobals: TcGlobals, - errorLogger: ErrorLogger, ilxMainModule, outfile, pdbfile, - signingInfo, exiter: Exiter)) = +let main6 dynamicAssemblyCreator (Args (ctok, tcConfig, tcImports: TcImports, tcGlobals: TcGlobals, + errorLogger: ErrorLogger, ilxMainModule, outfile, pdbfile, + signingInfo, exiter: Exiter)) = ReportTime tcConfig "Write .NET Binary" @@ -881,20 +893,20 @@ let main6 dynamicAssemblyCreator (Args (ctok, tcConfig, tcImports: TcImports, t let pdbfile = pdbfile |> Option.map (tcConfig.MakePathAbsolute >> FileSystem.GetFullPathShim) - let normalizeAssemblyRefs (aref: ILAssemblyRef) = - match tcImports.TryFindDllInfo (ctok, Range.rangeStartup, aref.Name, lookupOnly=false) with + let normalizeAssemblyRefs (aref: ILAssemblyRef) = + match tcImports.TryFindDllInfo (ctok, Range.rangeStartup, aref.Name, lookupOnly=false) with | Some dllInfo -> - match dllInfo.ILScopeRef with + match dllInfo.ILScopeRef with | ILScopeRef.Assembly ref -> ref | _ -> aref | None -> aref - match dynamicAssemblyCreator with - | None -> + match dynamicAssemblyCreator with + | None -> try - try - ILBinaryWriter.WriteILBinary - (outfile, + try + ILBinaryWriter.WriteILBinary + (outfile, { ilg = tcGlobals.ilg pdbfile=pdbfile emitTailcalls = tcConfig.emitTailcalls @@ -912,11 +924,11 @@ let main6 dynamicAssemblyCreator (Args (ctok, tcConfig, tcImports: TcImports, t ilxMainModule, normalizeAssemblyRefs ) - with Failure msg -> + with Failure msg -> error(Error(FSComp.SR.fscProblemWritingBinary(outfile, msg), rangeCmdArgs)) - with e -> + with e -> errorRecoveryNoRange e - exiter.Exit 1 + exiter.Exit 1 | Some da -> da (tcConfig, tcGlobals, outfile, ilxMainModule) AbortOnError(errorLogger, exiter) @@ -928,16 +940,16 @@ let main6 dynamicAssemblyCreator (Args (ctok, tcConfig, tcImports: TcImports, t ReportTime tcConfig "Exiting" /// The main (non-incremental) compilation entry point used by fsc.exe -let mainCompile - (ctok, argv, legacyReferenceResolver, bannerAlreadyPrinted, reduceMemoryUsage, +let mainCompile + (ctok, argv, legacyReferenceResolver, bannerAlreadyPrinted, reduceMemoryUsage, defaultCopyFSharpCore, exiter: Exiter, loggerProvider, tcImportsCapture, dynamicAssemblyCreator) = use disposables = new DisposablesTracker() let savedOut = System.Console.Out use __ = { new IDisposable with - member __.Dispose() = - try + member _.Dispose() = + try System.Console.SetOut(savedOut) with _ -> ()} @@ -945,20 +957,19 @@ let mainCompile |> main2 |> main3 |> main4 (tcImportsCapture,dynamicAssemblyCreator) - |> main5 + |> main5 |> main6 dynamicAssemblyCreator /// An additional compilation entry point used by FSharp.Compiler.Service taking syntax trees as input -let compileOfAst - (ctok, legacyReferenceResolver, reduceMemoryUsage, assemblyName, target, - targetDll, targetPdb, dependencies, noframework, exiter, loggerProvider, inputs, tcImportsCapture, dynamicAssemblyCreator) = +let compileOfAst + (ctok, legacyReferenceResolver, reduceMemoryUsage, assemblyName, target, + targetDll, targetPdb, dependencies, noframework, exiter, loggerProvider, inputs, tcImportsCapture, dynamicAssemblyCreator) = use disposables = new DisposablesTracker() - main1OfAst (ctok, legacyReferenceResolver, reduceMemoryUsage, assemblyName, target, targetDll, targetPdb, + main1OfAst (ctok, legacyReferenceResolver, reduceMemoryUsage, assemblyName, target, targetDll, targetPdb, dependencies, noframework, exiter, loggerProvider, disposables, inputs) |> main2 |> main3 |> main4 (tcImportsCapture, dynamicAssemblyCreator) |> main5 |> main6 dynamicAssemblyCreator - diff --git a/src/fsharp/fsc.fsi b/src/fsharp/fsc.fsi index 83ee32cee4c..1af3290a3ec 100755 --- a/src/fsharp/fsc.fsi +++ b/src/fsharp/fsc.fsi @@ -2,17 +2,15 @@ module internal FSharp.Compiler.Driver +open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILBinaryReader -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Internal.StrongNameSign -open FSharp.Compiler.CheckExpressions -open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerDiagnostics open FSharp.Compiler.CompilerImports open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Syntax open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps @@ -27,21 +25,11 @@ type ConsoleLoggerProvider = new : unit -> ConsoleLoggerProvider inherit ErrorLoggerProvider -/// Encode the F# interface data into a set of IL attributes and resources -val EncodeSignatureData: - tcConfig:TcConfig * - tcGlobals:TcGlobals * - exportRemapping:Remap * - generatedCcu: CcuThunk * - outfile: string * - isIncrementalBuild: bool - -> ILAttribute list * ILResource list - /// The main (non-incremental) compilation entry point used by fsc.exe val mainCompile: ctok: CompilationThreadToken * argv: string[] * - legacyReferenceResolver: ReferenceResolver.Resolver * + legacyReferenceResolver: LegacyReferenceResolver * bannerAlreadyPrinted: bool * reduceMemoryUsage: ReduceMemoryFlag * defaultCopyFSharpCore: CopyFSharpCoreFlag * @@ -54,7 +42,7 @@ val mainCompile: /// An additional compilation entry point used by FSharp.Compiler.Service taking syntax trees as input val compileOfAst: ctok: CompilationThreadToken * - legacyReferenceResolver: ReferenceResolver.Resolver * + legacyReferenceResolver: LegacyReferenceResolver * reduceMemoryUsage: ReduceMemoryFlag * assemblyName:string * target:CompilerTarget * diff --git a/src/fsharp/fsc/fsc.fsproj b/src/fsharp/fsc/fsc.fsproj index c3a5e28dfa9..211415f64e1 100644 --- a/src/fsharp/fsc/fsc.fsproj +++ b/src/fsharp/fsc/fsc.fsproj @@ -5,14 +5,13 @@ Exe $(ProtoTargetFramework) - net472;netcoreapp3.1 - netcoreapp3.1 - .exe - $(NoWarn);45;55;62;75;1204 + net472;net5.0 + net5.0 + $(NoWarn);44;45;55;62;75;1204 true $(OtherFlags) --maxerrors:20 --extraoptimizationloops:1 true - false + true @@ -35,7 +34,7 @@ - + diff --git a/src/fsharp/fscmain.fs b/src/fsharp/fscmain.fs index db4d72d9d85..5bce29fd229 100644 --- a/src/fsharp/fscmain.fs +++ b/src/fsharp/fscmain.fs @@ -6,15 +6,17 @@ open System open System.Reflection open System.Runtime.CompilerServices -open FSharp.Compiler +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.ILBinaryReader -open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Driver open FSharp.Compiler.CompilerConfig -open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.Driver +open FSharp.Compiler.ErrorLogger +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Text -[] +[] do () [] @@ -27,7 +29,7 @@ let main(argv) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter // An SDL recommendation - Lib.UnmanagedProcessExecutionOptions.EnableHeapTerminationOnCorruption() + UnmanagedProcessExecutionOptions.EnableHeapTerminationOnCorruption() try @@ -88,5 +90,5 @@ let main(argv) = with e -> // Last-chance error recovery (note, with a poor error range) - errorRecovery e FSharp.Compiler.Range.range0 + errorRecovery e Range.range0 1 diff --git a/src/fsharp/fsi/FSIstrings.txt b/src/fsharp/fsi/FSIstrings.txt index 2aa642cba70..dbd7642476b 100644 --- a/src/fsharp/fsi/FSIstrings.txt +++ b/src/fsharp/fsi/FSIstrings.txt @@ -53,4 +53,4 @@ fsiProductName,"Microsoft (R) F# Interactive version %s" fsiProductNameCommunity,"F# Interactive for F# %s" shadowCopyReferences,"Prevents references from being locked by the F# Interactive process" fsiOperationCouldNotBeCompleted,"Operation could not be completed due to earlier error" -fsiOperationFailed,"Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing" +fsiOperationFailed,"Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing" diff --git a/src/fsharp/fsi/console.fs b/src/fsharp/fsi/console.fs index 13276b9ced8..2c36a667f82 100644 --- a/src/fsharp/fsi/console.fs +++ b/src/fsharp/fsi/console.fs @@ -83,41 +83,6 @@ module internal Utils = with e -> FSharp.Compiler.ErrorLogger.warning(Failure(sprintf "Note: an unexpected exception in fsi.exe readline console support. Consider starting fsi.exe with the --no-readline option and report the stack trace below to the .NET or Mono implementors\n%s\n%s\n" e.Message e.StackTrace)) - // Quick and dirty dirty method lookup for inlined IL - // In some situations, we can't use ldtoken to obtain a RuntimeMethodHandle, since the method - // in question's token may contain typars from an external type environment. Such a token would - // cause the PE file to be flagged as invalid. - // In such a situation, we'll want to search out the MethodRef in a similar fashion to bindMethodBySearch - // but since we can't use ldtoken to obtain System.Type objects, we'll need to do everything with strings. - // This is the least fool-proof method for resolving the binding, but since the scenarios it's used in are - // so constrained, (fsi 2.0, methods with generic multi-dimensional arrays in their signatures), it's - // acceptable - let findMethod (parentT:Type,nm,marity,argtys : string [],rty : string) = - let staticOrInstanceBindingFlags = BindingFlags.Instance ||| BindingFlags.Static ||| BindingFlags.Public ||| BindingFlags.NonPublic ||| BindingFlags.DeclaredOnly - let methInfos = parentT.GetMethods(staticOrInstanceBindingFlags) |> Array.toList - - let methInfos = methInfos |> List.filter (fun methInfo -> methInfo.Name = nm) - match methInfos with - | [methInfo] -> - methInfo - | _ -> - let select (methInfo:MethodInfo) = - let mtyargTIs = if methInfo.IsGenericMethod then methInfo.GetGenericArguments() else [| |] - if mtyargTIs.Length <> marity then false else - - let haveArgTs = - let parameters = Array.toList (methInfo.GetParameters()) - parameters |> List.map (fun param -> param.ParameterType) - let haveResT = methInfo.ReturnType - - if argtys.Length <> haveArgTs.Length then false else - let res = rty :: (Array.toList argtys) = (List.map (fun (t : System.Type) -> t.Name) (haveResT :: haveArgTs)) - res - - match List.tryFind select methInfos with - | None -> failwith "Internal Error: cannot bind to method" - | Some methInfo -> methInfo - let rec previousWordFromIdx (line: string) (idx, isInWord) = if idx < 0 then 0 else match line.Chars(idx), isInWord with @@ -138,6 +103,7 @@ type internal Cursor = Utils.guard(fun () -> Console.CursorTop <- min top (Console.BufferHeight - 1) Console.CursorLeft <- left) + static member Move(inset, delta) = let position = Console.CursorTop * (Console.BufferWidth - inset) + (Console.CursorLeft - inset) + delta let top = position / (Console.BufferWidth - inset) @@ -154,8 +120,6 @@ type internal Anchor = let top = p.top + ( (p.left - inset) + index) / (Console.BufferWidth - inset) Cursor.ResetTo(top,left) - - type internal ReadLineConsole() = let history = new History() let mutable complete : (string option * string -> seq) = fun (_s1,_s2) -> Seq.empty diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 8f20fe41eee..a85d82d90fb 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -2,13 +2,15 @@ module FSharp.Compiler.Interactive.Shell +// Prevents warnings of experimental APIs - we are using FSharpLexer +#nowarn "57" + #nowarn "55" [] -[] +[] do() - open System open System.Collections.Generic open System.Diagnostics @@ -19,60 +21,59 @@ open System.Threading open System.Reflection open System.Runtime.CompilerServices open System.Runtime.InteropServices - +open Internal.Utilities +open Internal.Utilities.Collections +open Internal.Utilities.FSharpEnvironment +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILBinaryReader -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Internal.Utils open FSharp.Compiler.AbstractIL.ILRuntimeWriter open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CheckExpressions +open FSharp.Compiler.CodeAnalysis open FSharp.Compiler.CompilerOptions open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerDiagnostics open FSharp.Compiler.CompilerImports open FSharp.Compiler.CompilerGlobalState -open FSharp.Compiler.DotNetFrameworkDependencies +open FSharp.Compiler.DependencyManager +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.EditorServices open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features open FSharp.Compiler.IlxGen open FSharp.Compiler.InfoReader -open FSharp.Compiler.NameResolution -open FSharp.Compiler.Layout +open FSharp.Compiler.IO open FSharp.Compiler.Lexhelp -open FSharp.Compiler.Lib +open FSharp.Compiler.NameResolution open FSharp.Compiler.ParseAndCheckInputs -open FSharp.Compiler.PrettyNaming open FSharp.Compiler.OptimizeInputs -open FSharp.Compiler.Range -open FSharp.Compiler.ReferenceResolver open FSharp.Compiler.ScriptClosure -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Symbols +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.TypedTree -open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TcGlobals open FSharp.Compiler.Text -open FSharp.Compiler.XmlDoc - -open Internal.Utilities -open Internal.Utilities.StructuredFormat - -open Microsoft.DotNet.DependencyManager - -// Prevents warnings of experimental APIs - we are using FSharpLexer -#nowarn "57" +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Layout +open FSharp.Compiler.Xml +open FSharp.Compiler.Tokenization +open FSharp.Compiler.TypedTree +open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.BuildGraph //---------------------------------------------------------------------------- // For the FSI as a service methods... //---------------------------------------------------------------------------- -type FsiValue(reflectionValue:obj, reflectionType:Type, fsharpType:FSharpType) = +type FsiValue(reflectionValue:obj, reflectionType:Type, fsharpType:FSharpType) = member x.ReflectionValue = reflectionValue member x.ReflectionType = reflectionType member x.FSharpType = fsharpType @@ -83,17 +84,17 @@ type FsiBoundValue(name: string, value: FsiValue) = member _.Value = value [] -module internal Utilities = - type IAnyToLayoutCall = - abstract AnyToLayout : FormatOptions * obj * Type -> Internal.Utilities.StructuredFormat.Layout - abstract FsiAnyToLayout : FormatOptions * obj * Type -> Internal.Utilities.StructuredFormat.Layout +module internal Utilities = + type IAnyToLayoutCall = + abstract AnyToLayout : FormatOptions * obj * Type -> Layout + abstract FsiAnyToLayout : FormatOptions * obj * Type -> Layout - type private AnyToLayoutSpecialization<'T>() = + type private AnyToLayoutSpecialization<'T>() = interface IAnyToLayoutCall with - member this.AnyToLayout(options, o : obj, ty : Type) = Internal.Utilities.StructuredFormat.Display.any_to_layout options ((Unchecked.unbox o : 'T), ty) - member this.FsiAnyToLayout(options, o : obj, ty : Type) = Internal.Utilities.StructuredFormat.Display.fsi_any_to_layout options ((Unchecked.unbox o : 'T), ty) - - let getAnyToLayoutCall ty = + member _.AnyToLayout(options, o : obj, ty : Type) = Display.any_to_layout options ((Unchecked.unbox o : 'T), ty) + member _.FsiAnyToLayout(options, o : obj, ty : Type) = Display.fsi_any_to_layout options ((Unchecked.unbox o : 'T), ty) + + let getAnyToLayoutCall ty = let specialized = typedefof>.MakeGenericType [| ty |] Activator.CreateInstance(specialized) :?> IAnyToLayoutCall @@ -149,20 +150,20 @@ module internal Utilities = member r.AddText z s = let color = match s.Tag with - | LayoutTag.Keyword -> ConsoleColor.White - | LayoutTag.TypeParameter - | LayoutTag.Alias - | LayoutTag.Class - | LayoutTag.Module - | LayoutTag.Interface - | LayoutTag.Record - | LayoutTag.Struct - | LayoutTag.Union - | LayoutTag.UnknownType -> ConsoleColor.Cyan - | LayoutTag.UnionCase - | LayoutTag.ActivePatternCase -> ConsoleColor.Magenta - | LayoutTag.StringLiteral -> ConsoleColor.Yellow - | LayoutTag.NumericLiteral -> ConsoleColor.Green + | TextTag.Keyword -> ConsoleColor.White + | TextTag.TypeParameter + | TextTag.Alias + | TextTag.Class + | TextTag.Module + | TextTag.Interface + | TextTag.Record + | TextTag.Struct + | TextTag.Union + | TextTag.UnknownType -> ConsoleColor.Cyan + | TextTag.UnionCase + | TextTag.ActivePatternCase -> ConsoleColor.Magenta + | TextTag.StringLiteral -> ConsoleColor.Yellow + | TextTag.NumericLiteral -> ConsoleColor.Green | _ -> Console.ForegroundColor DoWithColor color (fun () -> outWriter.Write s.Text) @@ -182,8 +183,8 @@ module internal Utilities = } layout - |> Internal.Utilities.StructuredFormat.Display.squash_layout opts - |> Layout.renderL renderer + |> Display.squash_layout opts + |> LayoutRender.renderL renderer |> ignore outWriter.WriteLine() @@ -216,15 +217,15 @@ type internal FsiTimeReporter(outWriter: TextWriter) = stopwatch.Stop() let total = ptime.TotalProcessorTime - startTotal let spanGC = [ for i in 0 .. numGC-> System.GC.CollectionCount(i) - startGC.[i] ] - let elapsed = stopwatch.Elapsed + let elapsed = stopwatch.Elapsed fprintfn outWriter "%s" (FSIstrings.SR.fsiTimeInfoMainString((sprintf "%02d:%02d:%02d.%03d" (int elapsed.TotalHours) elapsed.Minutes elapsed.Seconds elapsed.Milliseconds),(sprintf "%02d:%02d:%02d.%03d" (int total.TotalHours) total.Minutes total.Seconds total.Milliseconds),(String.concat ", " (List.mapi (sprintf "%s%d: %d" (FSIstrings.SR.fsiTimeInfoGCGenerationLabelSomeShorthandForTheWordGeneration())) spanGC)))) res member tr.TimeOpIf flag f = if flag then tr.TimeOp f else f () -type internal FsiValuePrinterMode = - | PrintExpr +type internal FsiValuePrinterMode = + | PrintExpr | PrintDecl type EvaluationEventArgs(fsivalue : FsiValue option, symbolUse : FSharpSymbolUse, decl: FSharpImplementationFileDeclaration) = @@ -238,46 +239,46 @@ type EvaluationEventArgs(fsivalue : FsiValue option, symbolUse : FSharpSymbolUse [] /// User-configurable information that changes how F# Interactive operates, stored in the 'fsi' object /// and accessible via the programming model -type FsiEvaluationSessionHostConfig () = - let evaluationEvent = new Event () +type FsiEvaluationSessionHostConfig () = + let evaluationEvent = new Event () /// Called by the evaluation session to ask the host for parameters to format text for output - abstract FormatProvider: System.IFormatProvider + abstract FormatProvider: System.IFormatProvider /// Called by the evaluation session to ask the host for parameters to format text for output - abstract FloatingPointFormat: string + abstract FloatingPointFormat: string /// Called by the evaluation session to ask the host for parameters to format text for output abstract AddedPrinters : Choice<(System.Type * (obj -> string)), (System.Type * (obj -> obj))> list /// Called by the evaluation session to ask the host for parameters to format text for output - abstract ShowDeclarationValues: bool + abstract ShowDeclarationValues: bool /// Called by the evaluation session to ask the host for parameters to format text for output - abstract ShowIEnumerable: bool + abstract ShowIEnumerable: bool /// Called by the evaluation session to ask the host for parameters to format text for output - abstract ShowProperties : bool + abstract ShowProperties : bool /// Called by the evaluation session to ask the host for parameters to format text for output - abstract PrintSize : int + abstract PrintSize : int /// Called by the evaluation session to ask the host for parameters to format text for output - abstract PrintDepth : int + abstract PrintDepth : int /// Called by the evaluation session to ask the host for parameters to format text for output abstract PrintWidth : int /// Called by the evaluation session to ask the host for parameters to format text for output abstract PrintLength : int - /// The evaluation session calls this to report the preferred view of the command line arguments after + /// The evaluation session calls this to report the preferred view of the command line arguments after /// stripping things like "/use:file.fsx", "-r:Foo.dll" etc. abstract ReportUserCommandLineArgs : string [] -> unit - /// The evaluation session calls this to ask the host for the special console reader. + /// The evaluation session calls this to ask the host for the special console reader. /// Returning 'Some' indicates a console is to be used, so some special rules apply. /// - /// A "console" gets used if - /// --readline- is specified (the default on Windows + .NET); and - /// not --fsi-server (which should always be combined with --readline-); and + /// A "console" gets used if + /// --readline- is specified (the default on Windows + .NET); and + /// not --fsi-server (which should always be combined with --readline-); and /// GetOptionalConsoleReadLine() returns a Some /// /// "Peekahead" occurs if --peekahead- is not specified (i.e. it is the default): - /// - If a console is being used then - /// - a prompt is printed early - /// - a background thread is created + /// - If a console is being used then + /// - a prompt is printed early + /// - a background thread is created /// - the GetOptionalConsoleReadLine() callback is used to read the first line /// - Otherwise call inReader.Peek() /// @@ -285,11 +286,11 @@ type FsiEvaluationSessionHostConfig () = /// - If a console is being used then use GetOptionalConsoleReadLine() /// - Otherwise use inReader.ReadLine() - abstract GetOptionalConsoleReadLine : probeToSeeIfConsoleWorks: bool -> (unit -> string) option + abstract GetOptionalConsoleReadLine : probeToSeeIfConsoleWorks: bool -> (unit -> string) option /// The evaluation session calls this at an appropriate point in the startup phase if the --fsi-server parameter was given abstract StartServer : fsiServerName:string -> unit - + /// Called by the evaluation session to ask the host to enter a dispatch loop like Application.Run(). /// Only called if --gui option is used (which is the default). /// Gets called towards the end of startup and every time a ThreadAbort escaped to the backup driver loop. @@ -312,86 +313,86 @@ type FsiEvaluationSessionHostConfig () = /// Used to print value signatures along with their values, according to the current /// set of pretty printers installed in the system, and default printing rules. -type internal FsiValuePrinter(fsi: FsiEvaluationSessionHostConfig, tcConfigB: TcConfigBuilder, g: TcGlobals, generateDebugInfo, resolveAssemblyRef, outWriter: TextWriter) = +type internal FsiValuePrinter(fsi: FsiEvaluationSessionHostConfig, tcConfigB: TcConfigBuilder, g: TcGlobals, generateDebugInfo, resolveAssemblyRef, outWriter: TextWriter) = /// This printer is used by F# Interactive if no other printers apply. - let DefaultPrintingIntercept (ienv: Internal.Utilities.StructuredFormat.IEnvironment) (obj:obj) = - match obj with - | null -> None + let DefaultPrintingIntercept (ienv: IEnvironment) (obj:obj) = + match obj with + | null -> None | :? System.Collections.IDictionary as ie -> - let it = ie.GetEnumerator() - try - let itemLs = - Internal.Utilities.StructuredFormat.LayoutOps.unfoldL // the function to layout each object in the unfold - (fun obj -> ienv.GetLayout obj) + let it = ie.GetEnumerator() + try + let itemLs = + Layout.unfoldL // the function to layout each object in the unfold + (fun obj -> ienv.GetLayout obj) // the function to call at each step of the unfold - (fun () -> - if it.MoveNext() then - Some((it.Key, it.Value),()) - else None) () + (fun () -> + if it.MoveNext() then + Some((it.Key, it.Value),()) + else None) () // the maximum length - (1+fsi.PrintLength/3) + (1+fsi.PrintLength/3) let makeListL itemLs = - (leftL (TaggedTextOps.tagText "[")) ^^ - sepListL (rightL (TaggedTextOps.tagText ";")) itemLs ^^ - (rightL (TaggedTextOps.tagText "]")) - Some(wordL (TaggedTextOps.tagText "dict") --- makeListL itemLs) + (leftL (TaggedText.tagText "[")) ^^ + sepListL (rightL (TaggedText.tagText ";")) itemLs ^^ + (rightL (TaggedText.tagText "]")) + Some(wordL (TaggedText.tagText "dict") --- makeListL itemLs) finally - match it with + match it with | :? System.IDisposable as d -> d.Dispose() | _ -> () - - | _ -> None + + | _ -> None /// Get the print options used when formatting output using the structured printer. - member __.GetFsiPrintOptions() = - { Internal.Utilities.StructuredFormat.FormatOptions.Default with + member _.GetFsiPrintOptions() = + { FormatOptions.Default with FormatProvider = fsi.FormatProvider; - PrintIntercepts = + PrintIntercepts = // The fsi object supports the addition of two kinds of printers, one which converts to a string // and one which converts to another object that is recursively formatted. // The internal AddedPrinters reports these to FSI.EXE and we pick them up here to produce a layout - [ for x in fsi.AddedPrinters do - match x with - | Choice1Of2 (aty: System.Type, printer) -> + [ for x in fsi.AddedPrinters do + match x with + | Choice1Of2 (aty: System.Type, printer) -> yield (fun _ienv (obj:obj) -> - match obj with - | null -> None - | _ when aty.IsAssignableFrom(obj.GetType()) -> - match printer obj with + match obj with + | null -> None + | _ when aty.IsAssignableFrom(obj.GetType()) -> + match printer obj with | null -> None - | s -> Some (wordL (TaggedTextOps.tagText s)) + | s -> Some (wordL (TaggedText.tagText s)) | _ -> None) - - | Choice2Of2 (aty: System.Type, converter) -> + + | Choice2Of2 (aty: System.Type, converter) -> yield (fun ienv (obj:obj) -> - match obj with - | null -> None - | _ when aty.IsAssignableFrom(obj.GetType()) -> - match converter obj with + match obj with + | null -> None + | _ when aty.IsAssignableFrom(obj.GetType()) -> + match converter obj with | null -> None | res -> Some (ienv.GetLayout res) | _ -> None) yield DefaultPrintingIntercept]; FloatingPointFormat = fsi.FloatingPointFormat; - PrintWidth = fsi.PrintWidth; - PrintDepth = fsi.PrintDepth; + PrintWidth = fsi.PrintWidth; + PrintDepth = fsi.PrintDepth; PrintLength = fsi.PrintLength; PrintSize = fsi.PrintSize; ShowProperties = fsi.ShowProperties; ShowIEnumerable = fsi.ShowIEnumerable; } /// Get the evaluation context used when inverting the storage mapping of the ILRuntimeWriter. - member __.GetEvaluationContext emEnv = + member _.GetEvaluationContext emEnv = let cenv = { ilg = g.ilg ; emitTailcalls= tcConfigB.emitTailcalls; generatePdb = generateDebugInfo; resolveAssemblyRef=resolveAssemblyRef; tryFindSysILTypeRef=g.TryFindSysILTypeRef } { LookupFieldRef = ILRuntimeWriter.LookupFieldRef emEnv >> Option.get LookupMethodRef = ILRuntimeWriter.LookupMethodRef emEnv >> Option.get - LookupTypeRef = ILRuntimeWriter.LookupTypeRef cenv emEnv + LookupTypeRef = ILRuntimeWriter.LookupTypeRef cenv emEnv LookupType = ILRuntimeWriter.LookupType cenv emEnv } /// Generate a layout for an actual F# value, where we know the value has the given static type. - member __.PrintValue (printMode, opts:FormatOptions, x:obj, ty:System.Type) = + member _.PrintValue (printMode, opts:FormatOptions, x:obj, ty:System.Type) = // We do a dynamic invoke of any_to_layout with the right System.Type parameter for the static type of the saved value. // In principle this helps any_to_layout do the right thing as it descends through terms. In practice it means // it at least does the right thing for top level 'null' list and option values (but not for nested ones). @@ -400,29 +401,29 @@ type internal FsiValuePrinter(fsi: FsiEvaluationSessionHostConfig, tcConfigB: Tc // RuntimeHelpers.SaveIt has type ('a -> unit), and fetches the System.Type for 'a by using a typeof<'a> call. // The funny thing here is that you might think that the driver (this file) knows more about the static types // than the compiled code does. But it doesn't! In particular, it's not that easy to get a System.Type value based on the - // static type information we do have: we have no direct way to bind a F# TAST type or even an AbstractIL type to + // static type information we do have: we have no direct way to bind a F# TAST type or even an AbstractIL type to // a System.Type value (I guess that functionality should be in ilreflect.fs). // // This will be more significant when we print values other then 'it' // - try + try let anyToLayoutCall = Utilities.getAnyToLayoutCall ty match printMode with | PrintDecl -> // When printing rhs of fsi declarations, use "fsi_any_to_layout". // This will suppress some less informative values, by returning an empty layout. [fix 4343]. anyToLayoutCall.FsiAnyToLayout(opts, x, ty) - | PrintExpr -> + | PrintExpr -> anyToLayoutCall.AnyToLayout(opts, x, ty) - with - | :? ThreadAbortException -> Layout.wordL (TaggedTextOps.tagText "") + with + | :? ThreadAbortException -> Layout.wordL (TaggedText.tagText "") | e -> #if DEBUG printf "\n\nPrintValue: x = %+A and ty=%s\n" x (ty.FullName) #endif - printf "%s" (FSIstrings.SR.fsiExceptionDuringPrettyPrinting(e.ToString())); - Layout.wordL (TaggedTextOps.tagText "") - + printf "%s" (FSIstrings.SR.fsiExceptionDuringPrettyPrinting(e.ToString())); + Layout.wordL (TaggedText.tagText "") + /// Display the signature of an F# value declaration, along with its actual value. member valuePrinter.InvokeDeclLayout (emEnv, ilxGenerator: IlxAssemblyGenerator, v:Val) = // Implemented via a lookup from v to a concrete (System.Object,System.Type). @@ -434,7 +435,7 @@ type internal FsiValuePrinter(fsi: FsiEvaluationSessionHostConfig, tcConfigB: Tc // Ilreflect knows what the AbsIL was generated to. // Combining these allows for obtaining the (obj,objTy) by reflection where possible. // This assumes the v:Val was given appropriate storage, e.g. StaticField. - if fsi.ShowDeclarationValues then + if fsi.ShowDeclarationValues then // Adjust "opts" for printing for "declared-values": // - No sequences, because they may have effects or time cost. // - No properties, since they may have unexpected effects. @@ -442,69 +443,70 @@ type internal FsiValuePrinter(fsi: FsiEvaluationSessionHostConfig, tcConfigB: Tc // - Limit PrintSize which is a count on nodes. let declaredValueReductionFactor = 10 (* reduce PrintSize for declared values, e.g. see less of large terms *) let opts = valuePrinter.GetFsiPrintOptions() - let opts = {opts with ShowProperties = false // properties off, motivated by Form props - ShowIEnumerable = false // seq off, motivated by db query concerns - StringLimit = max 0 (opts.PrintWidth-4) // 4 allows for an indent of 2 and 2 quotes (rough) - PrintSize = opts.PrintSize / declaredValueReductionFactor } // print less - let res = + let opts = {opts with ShowProperties = false // properties off, motivated by Form props + ShowIEnumerable = false // seq off, motivated by db query concerns + StringLimit = max 0 (opts.PrintWidth-4) // 4 allows for an indent of 2 and 2 quotes (rough) + PrintSize = opts.PrintSize / declaredValueReductionFactor } // print less + let res = try ilxGenerator.LookupGeneratedValue (valuePrinter.GetEvaluationContext emEnv, v) - with e -> + with e -> assert false #if DEBUG //fprintfn fsiConsoleOutput.Out "lookGenerateVal: failed on v=%+A v.Name=%s" v v.LogicalName #endif - None // lookup may fail + None // lookup may fail match res with | None -> None - | Some (obj,objTy) -> + | Some (obj,objTy) -> let lay = valuePrinter.PrintValue (FsiValuePrinterMode.PrintDecl, opts, obj, objTy) - if isEmptyL lay then None else Some lay // suppress empty layout - + if isEmptyL lay then None else Some lay // suppress empty layout + else None - - + + /// Format a value - member valuePrinter.FormatValue (obj:obj, objTy) = + member valuePrinter.FormatValue (obj:obj, objTy) = let opts = valuePrinter.GetFsiPrintOptions() let lay = valuePrinter.PrintValue (FsiValuePrinterMode.PrintExpr, opts, obj, objTy) - Internal.Utilities.StructuredFormat.Display.layout_to_string opts lay - + Display.layout_to_string opts lay + /// Fetch the saved value of an expression out of the 'it' register and show it. - member valuePrinter.InvokeExprPrinter (denv, emEnv, ilxGenerator: IlxAssemblyGenerator, vref) = + member valuePrinter.InvokeExprPrinter (denv, infoReader, emEnv, ilxGenerator: IlxAssemblyGenerator, vref: ValRef) = let opts = valuePrinter.GetFsiPrintOptions() - let res = ilxGenerator.LookupGeneratedValue (valuePrinter.GetEvaluationContext emEnv, vref) - let rhsL = + let res = ilxGenerator.LookupGeneratedValue (valuePrinter.GetEvaluationContext emEnv, vref.Deref) + let rhsL = match res with | None -> None - | Some (obj,objTy) -> + | Some (obj,objTy) -> let lay = valuePrinter.PrintValue (FsiValuePrinterMode.PrintExpr, opts, obj, objTy) - if isEmptyL lay then None else Some lay // suppress empty layout + if isEmptyL lay then None else Some lay // suppress empty layout let denv = { denv with suppressMutableKeyword = true } // suppress 'mutable' in 'val mutable it = ...' - let fullL = + let denv = { denv with suppressInlineKeyword = false } // dont' suppress 'inline' in 'val inline f = ...' + let fullL = if Option.isNone rhsL || isEmptyL rhsL.Value then - NicePrint.prettyLayoutOfValOrMemberNoInst denv vref (* the rhs was suppressed by the printer, so no value to print *) + NicePrint.prettyLayoutOfValOrMemberNoInst denv infoReader vref (* the rhs was suppressed by the printer, so no value to print *) else - (NicePrint.prettyLayoutOfValOrMemberNoInst denv vref ++ wordL (TaggedTextOps.tagText "=")) --- rhsL.Value + (NicePrint.prettyLayoutOfValOrMemberNoInst denv infoReader vref ++ wordL (TaggedText.tagText "=")) --- rhsL.Value Utilities.colorPrintL outWriter opts fullL /// Used to make a copy of input in order to include the input when displaying the error text. -type internal FsiStdinSyphon(errorWriter: TextWriter) = +type internal FsiStdinSyphon(errorWriter: TextWriter) = let syphonText = new StringBuilder() /// Clears the syphon text - member x.Reset () = + member x.Reset () = syphonText.Clear() |> ignore /// Adds a new line to the syphon text - member x.Add (str:string) = - syphonText.Append str |> ignore + member x.Add (str:string) = + syphonText.Append str |> ignore /// Gets the indicated line in the syphon text member x.GetLine filename i = - if filename <> Lexhelp.stdinMockFilename then - "" + if filename <> Lexhelp.stdinMockFilename then + "" else let text = syphonText.ToString() // In Visual Studio, when sending a block of text, it prefixes with '# "filename"\n' @@ -519,65 +521,65 @@ type internal FsiStdinSyphon(errorWriter: TextWriter) = prune (text.Substring(idx + stdinReset.Length)) else text - + let text = prune text let lines = text.Split '\n' if 0 < i && i <= lines.Length then lines.[i-1] else "" /// Display the given error. - member syphon.PrintError (tcConfig:TcConfigBuilder, err) = - Utilities.ignoreAllErrors (fun () -> - let isError = true - DoWithErrorColor isError (fun () -> + member syphon.PrintError (tcConfig:TcConfigBuilder, err) = + Utilities.ignoreAllErrors (fun () -> + let severity = FSharpDiagnosticSeverity.Error + DoWithDiagnosticColor severity (fun () -> errorWriter.WriteLine(); - writeViaBuffer errorWriter (OutputDiagnosticContext " " syphon.GetLine) err; - writeViaBuffer errorWriter (OutputDiagnostic (tcConfig.implicitIncludeDir,tcConfig.showFullPaths,tcConfig.flatErrors,tcConfig.errorStyle,isError)) err; + writeViaBuffer errorWriter (OutputDiagnosticContext " " syphon.GetLine) err; + writeViaBuffer errorWriter (OutputDiagnostic (tcConfig.implicitIncludeDir,tcConfig.showFullPaths,tcConfig.flatErrors,tcConfig.errorStyle,severity)) err; errorWriter.WriteLine() errorWriter.WriteLine() errorWriter.Flush())) - + /// Encapsulates functions used to write to outWriter and errorWriter -type internal FsiConsoleOutput(tcConfigB, outWriter:TextWriter, errorWriter:TextWriter) = +type internal FsiConsoleOutput(tcConfigB, outWriter:TextWriter, errorWriter:TextWriter) = let nullOut = new StreamWriter(Stream.Null) :> TextWriter - let fprintfnn (os: TextWriter) fmt = Printf.kfprintf (fun _ -> os.WriteLine(); os.WriteLine()) os fmt + let fprintfnn (os: TextWriter) fmt = Printf.kfprintf (fun _ -> os.WriteLine(); os.WriteLine()) os fmt /// uprintf to write usual responses to stdout (suppressed by --quiet), with various pre/post newlines - member out.uprintf fmt = fprintf (if tcConfigB.noFeedback then nullOut else outWriter) fmt + member out.uprintf fmt = fprintf (if tcConfigB.noFeedback then nullOut else outWriter) fmt member out.uprintfn fmt = fprintfn (if tcConfigB.noFeedback then nullOut else outWriter) fmt member out.uprintfnn fmt = fprintfnn (if tcConfigB.noFeedback then nullOut else outWriter) fmt member out.uprintnf fmt = out.uprintfn ""; out.uprintf fmt member out.uprintnfn fmt = out.uprintfn ""; out.uprintfn fmt member out.uprintnfnn fmt = out.uprintfn ""; out.uprintfnn fmt - + member out.Out = outWriter member out.Error = errorWriter /// This ErrorLogger reports all warnings, but raises StopProcessing on first error or early exit -type internal ErrorLoggerThatStopsOnFirstError(tcConfigB:TcConfigBuilder, fsiStdinSyphon:FsiStdinSyphon, fsiConsoleOutput: FsiConsoleOutput) = +type internal ErrorLoggerThatStopsOnFirstError(tcConfigB:TcConfigBuilder, fsiStdinSyphon:FsiStdinSyphon, fsiConsoleOutput: FsiConsoleOutput) = inherit ErrorLogger("ErrorLoggerThatStopsOnFirstError") - let mutable errorCount = 0 + let mutable errorCount = 0 - member x.SetError() = + member x.SetError() = errorCount <- 1 member x.ResetErrorCount() = (errorCount <- 0) - - override x.DiagnosticSink(err, isError) = - if isError || ReportWarningAsError tcConfigB.errorSeverityOptions err then + + override x.DiagnosticSink(err, severity) = + if (severity = FSharpDiagnosticSeverity.Error) || ReportWarningAsError tcConfigB.errorSeverityOptions err then fsiStdinSyphon.PrintError(tcConfigB,err) errorCount <- errorCount + 1 if tcConfigB.abortOnError then exit 1 (* non-zero exit code *) // STOP ON FIRST ERROR (AVOIDS PARSER ERROR RECOVERY) raise StopProcessing - else - DoWithErrorColor isError (fun () -> - if ReportWarning tcConfigB.errorSeverityOptions err then + else + DoWithDiagnosticColor severity (fun () -> + if ReportWarning tcConfigB.errorSeverityOptions err then fsiConsoleOutput.Error.WriteLine() writeViaBuffer fsiConsoleOutput.Error (OutputDiagnosticContext " " fsiStdinSyphon.GetLine) err - writeViaBuffer fsiConsoleOutput.Error (OutputDiagnostic (tcConfigB.implicitIncludeDir,tcConfigB.showFullPaths,tcConfigB.flatErrors,tcConfigB.errorStyle,isError)) err + writeViaBuffer fsiConsoleOutput.Error (OutputDiagnostic (tcConfigB.implicitIncludeDir,tcConfigB.showFullPaths,tcConfigB.flatErrors,tcConfigB.errorStyle,severity)) err fsiConsoleOutput.Error.WriteLine() fsiConsoleOutput.Error.WriteLine() fsiConsoleOutput.Error.Flush()) @@ -587,17 +589,17 @@ type internal ErrorLoggerThatStopsOnFirstError(tcConfigB:TcConfigBuilder, fsiStd type ErrorLogger with member x.CheckForErrors() = (x.ErrorCount > 0) /// A helper function to check if its time to abort - member x.AbortOnError(fsiConsoleOutput:FsiConsoleOutput) = - if x.ErrorCount > 0 then + member x.AbortOnError(fsiConsoleOutput:FsiConsoleOutput) = + if x.ErrorCount > 0 then fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.stoppedDueToError()) fsiConsoleOutput.Error.Flush() raise StopProcessing /// Get the directory name from a string, with some defaults if it doesn't have one -let internal directoryName (s:string) = +let internal directoryName (s:string) = if s = "" then "." - else - match Path.GetDirectoryName s with + else + match Path.GetDirectoryName s with | null -> if FileSystem.IsPathRootedShim s then s else "." | res -> if res = "" then "." else res @@ -606,36 +608,37 @@ let internal directoryName (s:string) = // cmd line - state for options //---------------------------------------------------------------------------- -/// Process the command line options +/// Process the command line options type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, - argv: string[], + argv: string[], tcConfigB, - fsiConsoleOutput: FsiConsoleOutput) = + fsiConsoleOutput: FsiConsoleOutput) = - let mutable enableConsoleKeyProcessing = + let mutable enableConsoleKeyProcessing = // Mono on Win32 doesn't implement correct console processing - not (runningOnMono && System.Environment.OSVersion.Platform = System.PlatformID.Win32NT) + not (runningOnMono && System.Environment.OSVersion.Platform = System.PlatformID.Win32NT) let mutable gui = not runningOnMono // override via "--gui", on by default except when on Mono #if DEBUG - let mutable showILCode = false // show modul il code + let mutable showILCode = false // show modul il code #endif let mutable showTypes = true // show types after each interaction? let mutable fsiServerName = "" let mutable interact = true let mutable explicitArgs = [] + let mutable writeReferencesAndExit = None - let mutable inputFilesAcc = [] + let mutable inputFilesAcc = [] let mutable fsiServerInputCodePage = None let mutable fsiServerOutputCodePage = None let mutable fsiLCID = None - // internal options - let mutable probeToSeeIfConsoleWorks = true - let mutable peekAheadOnConsoleToPermitTyping = true + // internal options + let mutable probeToSeeIfConsoleWorks = true + let mutable peekAheadOnConsoleToPermitTyping = true - let isInteractiveServer() = fsiServerName <> "" + let isInteractiveServer() = fsiServerName <> "" let recordExplicitArg arg = explicitArgs <- explicitArgs @ [arg] let executableFileNameWithoutExtension = @@ -655,7 +658,7 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, | PlatformID.MacOSX | PlatformID.Unix -> StringComparison.Ordinal | _ -> StringComparison.OrdinalIgnoreCase - + if String.Compare(processFileName, commandLineExecutableFileName, stringComparison) = 0 then processFileName else sprintf "%s %s" processFileName commandLineExecutableFileName @@ -676,7 +679,7 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, // option tags let tagFile = "" let tagNone = "" - + /// These options precede the FsiCoreCompilerOptions in the help blocks let fsiUsagePrefix tcConfigB = [PublicOptions(FSIstrings.SR.fsiInputFiles(), @@ -691,14 +694,15 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, PublicOptions(FSIstrings.SR.fsiMiscellaneous(),[]); PublicOptions(FSIstrings.SR.fsiAdvanced(),[]); PrivateOptions( - [// Make internal fsi-server* options. Do not print in the help. They are used by VFSI. + [// Make internal fsi-server* options. Do not print in the help. They are used by VFSI. + CompilerOption("fsi-server-report-references","", OptionString (fun s -> writeReferencesAndExit <- Some s), None, None); CompilerOption("fsi-server","", OptionString (fun s -> fsiServerName <- s), None, None); // "FSI server mode on given named channel"); - CompilerOption("fsi-server-input-codepage","",OptionInt (fun n -> fsiServerInputCodePage <- Some(n)), None, None); // " Set the input codepage for the console"); - CompilerOption("fsi-server-output-codepage","",OptionInt (fun n -> fsiServerOutputCodePage <- Some(n)), None, None); // " Set the output codepage for the console"); + CompilerOption("fsi-server-input-codepage","",OptionInt (fun n -> fsiServerInputCodePage <- Some(n)), None, None); // " Set the input codepage for the console"); + CompilerOption("fsi-server-output-codepage","",OptionInt (fun n -> fsiServerOutputCodePage <- Some(n)), None, None); // " Set the output codepage for the console"); CompilerOption("fsi-server-no-unicode","", OptionUnit (fun () -> fsiServerOutputCodePage <- None; fsiServerInputCodePage <- None), None, None); // "Do not set the codepages for the console"); CompilerOption("fsi-server-lcid","", OptionInt (fun n -> fsiLCID <- Some(n)), None, None); // "LCID from Visual Studio" - // We do not want to print the "script.fsx arg2..." as part of the options + // We do not want to print the "script.fsx arg2..." as part of the options CompilerOption("script.fsx arg1 arg2 ...","", OptionGeneral((fun args -> args.Length > 0 && IsScript args.[0]), (fun args -> let scriptFile = args.[0] @@ -713,7 +717,7 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, ]); PrivateOptions( [ - // Private options, related to diagnostics around console probing + // Private options, related to diagnostics around console probing CompilerOption("probeconsole","", OptionSwitch (fun flag -> probeToSeeIfConsoleWorks <- flag=OptionSwitch.On), None, None); // "Probe to see if Console looks functional"); CompilerOption("peekahead","", OptionSwitch (fun flag -> peekAheadOnConsoleToPermitTyping <- flag=OptionSwitch.On), None, None); // "Probe to see if Console looks functional"); @@ -730,8 +734,8 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, [CompilerOption("--","", OptionRest recordExplicitArg, None, Some (FSIstrings.SR.fsiRemaining())); ]); - PublicOptions(FSComp.SR.optsHelpBannerMisc(), - [ CompilerOption("help", tagNone, + PublicOptions(FSComp.SR.optsHelpBannerMisc(), + [ CompilerOption("help", tagNone, OptionHelp (fun blocks -> displayHelpFsi tcConfigB blocks),None, Some (FSIstrings.SR.fsiHelp())) ]); @@ -743,7 +747,7 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, PublicOptions(FSComp.SR.optsHelpBannerAdvanced(), [CompilerOption("exec", "", OptionUnit (fun () -> interact <- false), None, Some (FSIstrings.SR.fsiExec())); CompilerOption("gui", tagNone, OptionSwitch(fun flag -> gui <- (flag = OptionSwitch.On)),None,Some (FSIstrings.SR.fsiGui())); - CompilerOption("quiet", "", OptionUnit (fun () -> tcConfigB.noFeedback <- true), None,Some (FSIstrings.SR.fsiQuiet())); + CompilerOption("quiet", "", OptionUnit (fun () -> tcConfigB.noFeedback <- true), None,Some (FSIstrings.SR.fsiQuiet())); (* Renamed --readline and --no-readline to --tabcompletion:+|- *) CompilerOption("readline", tagNone, OptionSwitch(fun flag -> enableConsoleKeyProcessing <- (flag = OptionSwitch.On)), None, Some(FSIstrings.SR.fsiReadline())); CompilerOption("quotations-debug", tagNone, OptionSwitch(fun switch -> tcConfigB.emitDebugInfoInQuotations <- switch = OptionSwitch.On),None, Some(FSIstrings.SR.fsiEmitDebugInfoInQuotations())); @@ -753,13 +757,13 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, /// Process command line, flags and collect filenames. - /// The ParseCompilerOptions function calls imperative function to process "real" args - /// Rather than start processing, just collect names, then process them. - let sourceFiles = - let collect name = + /// The ParseCompilerOptions function calls imperative function to process "real" args + /// Rather than start processing, just collect names, then process them. + let sourceFiles = + let collect name = let fsx = IsScript name inputFilesAcc <- inputFilesAcc @ [(name,fsx)] // O(n^2), but n small... - try + try let fsiCompilerOptions = fsiUsagePrefix tcConfigB @ GetCoreFsiCompilerOptions tcConfigB @ fsiUsageSuffix tcConfigB let abbrevArgs = GetAbbrevFlagSet tcConfigB false ParseCompilerOptions (collect, fsiCompilerOptions, List.tail (PostProcessCompilerArgs abbrevArgs argv)) @@ -770,7 +774,7 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, // We need a dependency provider with native resolution. Managed resolution is handled by generated `#r` let dependencyProvider = new DependencyProvider(NativeResolutionProbe(tcConfigB.GetNativeProbingRoots)) - do + do if tcConfigB.utf8output then let prev = Console.OutputEncoding Console.OutputEncoding <- System.Text.Encoding.UTF8 @@ -779,12 +783,12 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, #else System.AppDomain.CurrentDomain.ProcessExit.Add(fun _ -> Console.OutputEncoding <- prev) #endif - do - let firstArg = - match sourceFiles with - | [] -> argv.[0] + do + let firstArg = + match sourceFiles with + | [] -> argv.[0] | _ -> fst (List.head (List.rev sourceFiles) ) - let args = Array.ofList (firstArg :: explicitArgs) + let args = Array.ofList (firstArg :: explicitArgs) fsi.ReportUserCommandLineArgs args @@ -792,12 +796,12 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, // Banner //---------------------------------------------------------------------------- - member __.ShowBanner() = + member _.ShowBanner() = fsiConsoleOutput.uprintnfn "%s" (tcConfigB.productNameForBannerText) fsiConsoleOutput.uprintfnn "%s" (FSComp.SR.optsCopyright()) fsiConsoleOutput.uprintfn "%s" (FSIstrings.SR.fsiBanner3()) - - member __.ShowHelp(m) = + + member _.ShowHelp(m) = let helpLine = sprintf "%s --help" executableFileNameWithoutExtension.Value fsiConsoleOutput.uprintfn "" @@ -821,23 +825,27 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, fsiConsoleOutput.uprintfn "" #if DEBUG - member __.ShowILCode with get() = showILCode and set v = showILCode <- v + member _.ShowILCode with get() = showILCode and set v = showILCode <- v #endif - member __.ShowTypes with get() = showTypes and set v = showTypes <- v - member __.FsiServerName = fsiServerName - member __.FsiServerInputCodePage = fsiServerInputCodePage - member __.FsiServerOutputCodePage = fsiServerOutputCodePage - member __.FsiLCID with get() = fsiLCID and set v = fsiLCID <- v - member __.IsInteractiveServer = isInteractiveServer() - member __.ProbeToSeeIfConsoleWorks = probeToSeeIfConsoleWorks - member __.EnableConsoleKeyProcessing = enableConsoleKeyProcessing - - member __.Interact = interact - member __.PeekAheadOnConsoleToPermitTyping = peekAheadOnConsoleToPermitTyping - member __.SourceFiles = sourceFiles - member __.Gui = gui + member _.ShowTypes with get() = showTypes and set v = showTypes <- v + member _.FsiServerName = fsiServerName + member _.FsiServerInputCodePage = fsiServerInputCodePage + member _.FsiServerOutputCodePage = fsiServerOutputCodePage + member _.FsiLCID with get() = fsiLCID and set v = fsiLCID <- v + member _.UseServerPrompt = isInteractiveServer() + member _.IsInteractiveServer = isInteractiveServer() + member _.ProbeToSeeIfConsoleWorks = probeToSeeIfConsoleWorks + member _.EnableConsoleKeyProcessing = enableConsoleKeyProcessing + + member _.Interact = interact + member _.PeekAheadOnConsoleToPermitTyping = peekAheadOnConsoleToPermitTyping + member _.SourceFiles = sourceFiles + member _.Gui = gui + + member _.WriteReferencesAndExit = writeReferencesAndExit member _.DependencyProvider = dependencyProvider + member _.FxResolver = tcConfigB.FxResolver /// Set the current ui culture for the current thread. let internal SetCurrentUICultureForThread (lcid : int option) = @@ -856,33 +864,33 @@ let internal InstallErrorLoggingOnThisThread errorLogger = SetThreadErrorLoggerNoUnwind(errorLogger) SetThreadBuildPhaseNoUnwind(BuildPhase.Interactive) -/// Set the input/output encoding. The use of a thread is due to a known bug on +/// Set the input/output encoding. The use of a thread is due to a known bug on /// on Vista where calls to Console.InputEncoding can block the process. -let internal SetServerCodePages(fsiOptions: FsiCommandLineOptions) = - match fsiOptions.FsiServerInputCodePage, fsiOptions.FsiServerOutputCodePage with +let internal SetServerCodePages(fsiOptions: FsiCommandLineOptions) = + match fsiOptions.FsiServerInputCodePage, fsiOptions.FsiServerOutputCodePage with | None,None -> () - | inputCodePageOpt,outputCodePageOpt -> - let mutable successful = false - Async.Start (async { do match inputCodePageOpt with - | None -> () + | inputCodePageOpt,outputCodePageOpt -> + let mutable successful = false + Async.Start (async { do match inputCodePageOpt with + | None -> () | Some(n:int) -> - let encoding = System.Text.Encoding.GetEncoding(n) + let encoding = System.Text.Encoding.GetEncoding(n) // Note this modifies the real honest-to-goodness settings for the current shell. // and the modifications hang around even after the process has exited. Console.InputEncoding <- encoding - do match outputCodePageOpt with - | None -> () - | Some(n:int) -> + do match outputCodePageOpt with + | None -> () + | Some(n:int) -> let encoding = System.Text.Encoding.GetEncoding n // Note this modifies the real honest-to-goodness settings for the current shell. // and the modifications hang around even after the process has exited. Console.OutputEncoding <- encoding do successful <- true }); - for pause in [10;50;100;1000;2000;10000] do - if not successful then + for pause in [10;50;100;1000;2000;10000] do + if not successful then Thread.Sleep(pause); #if LOGGING_GUI - if not !successful then + if not !successful then System.Windows.Forms.MessageBox.Show(FSIstrings.SR.fsiConsoleProblem()) |> ignore #endif @@ -895,14 +903,14 @@ type internal FsiConsolePrompt(fsiOptions: FsiCommandLineOptions, fsiConsoleOutp // A prompt gets "printed ahead" at start up. Tells users to start type while initialisation completes. // A prompt can be skipped by "silent directives", e.g. ones sent to FSI by VS. let mutable dropPrompt = 0 - // NOTE: SERVER-PROMPT is not user displayed, rather it's a prefix that code elsewhere + // NOTE: SERVER-PROMPT is not user displayed, rather it's a prefix that code elsewhere // uses to identify the prompt, see service\FsPkgs\FSharp.VS.FSI\fsiSessionToolWindow.fs - let prompt = if fsiOptions.IsInteractiveServer then "SERVER-PROMPT>\n" else "> " + let prompt = if fsiOptions.UseServerPrompt then "SERVER-PROMPT>\n" else "> " - member __.Print() = if dropPrompt = 0 then fsiConsoleOutput.uprintf "%s" prompt else dropPrompt <- dropPrompt - 1 - member __.PrintAhead() = dropPrompt <- dropPrompt + 1; fsiConsoleOutput.uprintf "%s" prompt - member __.SkipNext() = dropPrompt <- dropPrompt + 1 - member __.FsiOptions = fsiOptions + member _.Print() = if dropPrompt = 0 then fsiConsoleOutput.uprintf "%s" prompt else dropPrompt <- dropPrompt - 1 + member _.PrintAhead() = dropPrompt <- dropPrompt + 1; fsiConsoleOutput.uprintf "%s" prompt + member _.SkipNext() = dropPrompt <- dropPrompt + 1 + member _.FsiOptions = fsiOptions @@ -930,45 +938,45 @@ type internal FsiConsoleInput(fsi: FsiEvaluationSessionHostConfig, fsiOptions: F /// Peek on the standard input so that the user can type into it from a console window. do if fsiOptions.Interact then - if fsiOptions.PeekAheadOnConsoleToPermitTyping then - (new Thread(fun () -> - match consoleOpt with - | Some console when fsiOptions.EnableConsoleKeyProcessing && not fsiOptions.IsInteractiveServer -> - if List.isEmpty fsiOptions.SourceFiles then + if fsiOptions.PeekAheadOnConsoleToPermitTyping then + (new Thread(fun () -> + match consoleOpt with + | Some console when fsiOptions.EnableConsoleKeyProcessing && not fsiOptions.UseServerPrompt -> + if List.isEmpty fsiOptions.SourceFiles then if progress then fprintfn outWriter "first-line-reader-thread reading first line..."; - firstLine <- Some(console()); + firstLine <- Some(console()); if progress then fprintfn outWriter "first-line-reader-thread got first line = %A..." firstLine; - consoleReaderStartupDone.Set() |> ignore + consoleReaderStartupDone.Set() |> ignore if progress then fprintfn outWriter "first-line-reader-thread has set signal and exited." ; - | _ -> + | _ -> ignore(inReader.Peek()); - consoleReaderStartupDone.Set() |> ignore + consoleReaderStartupDone.Set() |> ignore )).Start() else if progress then fprintfn outWriter "first-line-reader-thread not in use." consoleReaderStartupDone.Set() |> ignore /// Try to get the first line, if we snarfed it while probing. - member __.TryGetFirstLine() = let r = firstLine in firstLine <- None; r + member _.TryGetFirstLine() = let r = firstLine in firstLine <- None; r /// Try to get the console, if it appears operational. - member __.TryGetConsole() = consoleOpt + member _.TryGetConsole() = consoleOpt - member __.In = inReader + member _.In = inReader + + member _.WaitForInitialConsoleInput() = WaitHandle.WaitAll [| consoleReaderStartupDone |] |> ignore; - member __.WaitForInitialConsoleInput() = WaitHandle.WaitAll [| consoleReaderStartupDone |] |> ignore; - //---------------------------------------------------------------------------- // FsiDynamicCompilerState //---------------------------------------------------------------------------- -type internal FsiInteractionStepStatus = - | CtrlC - | EndOfFile +type internal FsiInteractionStepStatus = + | CtrlC + | EndOfFile | Completed of option - | CompletedWithAlreadyReportedError - | CompletedWithReportedError of exn + | CompletedWithAlreadyReportedError + | CompletedWithReportedError of exn [] [] @@ -976,7 +984,7 @@ type internal FsiDynamicCompilerState = { optEnv : Optimizer.IncrementalOptimizationEnv emEnv : ILRuntimeWriter.emEnv tcGlobals : TcGlobals - tcState : TcState + tcState : TcState tcImports : TcImports ilxGenerator : IlxGen.IlxAssemblyGenerator boundValues : NameMap @@ -984,10 +992,10 @@ type internal FsiDynamicCompilerState = timing : bool debugBreak : bool } -let internal WithImplicitHome (tcConfigB, dir) f = - let old = tcConfigB.implicitIncludeDir +let internal WithImplicitHome (tcConfigB, dir) f = + let old = tcConfigB.implicitIncludeDir tcConfigB.implicitIncludeDir <- dir; - try f() + try f() finally tcConfigB.implicitIncludeDir <- old let internal convertReflectionTypeToILTypeRef (reflectionTy: Type) = @@ -1022,9 +1030,9 @@ let rec internal convertReflectionTypeToILType (reflectionTy: Type) = // Special case functions. if FSharp.Reflection.FSharpType.IsFunction reflectionTy then let ctors = reflectionTy.GetConstructors(BindingFlags.Public ||| BindingFlags.NonPublic ||| BindingFlags.Instance) - if ctors.Length = 1 && - ctors.[0].GetCustomAttribute() <> null && - not ctors.[0].IsPublic && + if ctors.Length = 1 && + ctors.[0].GetCustomAttribute() <> null && + not ctors.[0].IsPublic && PrettyNaming.IsCompilerGeneratedName reflectionTy.Name then let rec get (typ: Type) = if FSharp.Reflection.FSharpType.IsFunction typ.BaseType then get typ.BaseType else typ get reflectionTy @@ -1058,12 +1066,12 @@ let internal mkBoundValueTypedImpl tcGlobals m moduleName name ty = Construct.NewVal (name, m, None, ty, ValMutability.Immutable, false, Some(ValReprInfo([], [], { Attribs = []; Name = None })), vis, ValNotInRecScope, None, NormalVal, [], ValInline.Optional, - XmlDoc.Empty, true, false, false, false, + XmlDoc.Empty, true, false, false, false, false, false, None, Parent(TypedTreeBasics.ERefLocal moduleOrNamespace)) mty <- ModuleOrNamespaceType(ModuleOrNamespaceKind.ModuleOrType, QueueList.one v, QueueList.empty) let bindExpr = TypedTreeOps.mkCallDefaultOf tcGlobals range0 ty - let binding = Binding.TBind(v, bindExpr, NoDebugPointAtLetBinding) + let binding = Binding.TBind(v, bindExpr, DebugPointAtBinding.NoneAtLet) let mbinding = ModuleOrNamespaceBinding.Module(moduleOrNamespace, TMDefs([TMDefLet(binding, m)])) let expr = ModuleOrNamespaceExprWithSig(mty, TMDefs([TMDefs[TMDefRec(false, [], [mbinding], m)]]), range0) moduleOrNamespace, v, TypedImplFile.TImplFile(QualifiedNameOfFile.QualifiedNameOfFile(Ident(moduleName, m)), [], expr, false, false, StampMap.Empty) @@ -1074,17 +1082,17 @@ let internal mkBoundValueTypedImpl tcGlobals m moduleName name ty = /// A single instance of this object is created per interactive session. type internal FsiDynamicCompiler (fsi: FsiEvaluationSessionHostConfig, - timeReporter : FsiTimeReporter, - tcConfigB: TcConfigBuilder, - tcLockObject : obj, + timeReporter : FsiTimeReporter, + tcConfigB: TcConfigBuilder, + tcLockObject : obj, outWriter: TextWriter, - tcImports: TcImports, - tcGlobals: TcGlobals, + tcImports: TcImports, + tcGlobals: TcGlobals, fsiOptions : FsiCommandLineOptions, fsiConsoleOutput : FsiConsoleOutput, fsiCollectible: bool, niceNameGen, - resolveAssemblyRef) = + resolveAssemblyRef) = let ilGlobals = tcGlobals.ilg @@ -1108,40 +1116,40 @@ type internal FsiDynamicCompiler //let _writer = moduleBuilder.GetSymWriter() - let infoReader = InfoReader(tcGlobals,tcImports.GetImportMap()) + let infoReader = InfoReader(tcGlobals,tcImports.GetImportMap()) - /// Add attributes + /// Add attributes let CreateModuleFragment (tcConfigB: TcConfigBuilder, assemblyName, codegenResults) = if progress then fprintfn fsiConsoleOutput.Out "Creating main module..."; let mainModule = mkILSimpleModule assemblyName (GetGeneratedILModuleName tcConfigB.target assemblyName) (tcConfigB.target = CompilerTarget.Dll) tcConfigB.subsystemVersion tcConfigB.useHighEntropyVA (mkILTypeDefs codegenResults.ilTypeDefs) None None 0x0 (mkILExportedTypes []) "" - { mainModule - with Manifest = + { mainModule + with Manifest = (let man = mainModule.ManifestOfAssembly Some { man with CustomAttrsStored = storeILCustomAttrs (mkILCustomAttrs codegenResults.ilAssemAttrs) }) } let ProcessCodegenResults (ctok, errorLogger: ErrorLogger, istate, optEnv, tcState: TcState, tcConfig, prefixPath, showTypes: bool, isIncrementalFragment, fragName, declaredImpls, ilxGenerator: IlxAssemblyGenerator, codegenResults) = let emEnv = istate.emEnv - // Each input is like a small separately compiled extension to a single source file. - // The incremental extension to the environment is dictated by the "signature" of the values as they come out - // of the type checker. Hence we add the declaredImpls (unoptimized) to the environment, rather than the - // optimizedImpls. + // Each input is like a small separately compiled extension to a single source file. + // The incremental extension to the environment is dictated by the "signature" of the values as they come out + // of the type checker. Hence we add the declaredImpls (unoptimized) to the environment, rather than the + // optimizedImpls. ilxGenerator.AddIncrementalLocalAssemblyFragment (isIncrementalFragment, fragName, declaredImpls) ReportTime tcConfig "TAST -> ILX"; errorLogger.AbortOnError(fsiConsoleOutput); - + ReportTime tcConfig "Linking"; let ilxMainModule = CreateModuleFragment (tcConfigB, assemblyName, codegenResults) errorLogger.AbortOnError(fsiConsoleOutput); - - ReportTime tcConfig "Assembly refs Normalised"; - let mainmod3 = Morphs.morphILScopeRefsInILModuleMemoized ilGlobals (NormalizeAssemblyRefs (ctok, ilGlobals, tcImports)) ilxMainModule + + ReportTime tcConfig "Assembly refs Normalised"; + let mainmod3 = Morphs.morphILScopeRefsInILModuleMemoized (NormalizeAssemblyRefs (ctok, ilGlobals, tcImports)) ilxMainModule errorLogger.AbortOnError(fsiConsoleOutput); #if DEBUG - if fsiOptions.ShowILCode then + if fsiOptions.ShowILCode then fsiConsoleOutput.uprintnfn "--------------------"; ILAsciiWriter.output_module outWriter ilGlobals mainmod3; fsiConsoleOutput.uprintnfn "--------------------" @@ -1155,28 +1163,28 @@ type internal FsiDynamicCompiler errorLogger.AbortOnError(fsiConsoleOutput); - // Explicitly register the resources with the QuotationPickler module - // We would save them as resources into the dynamic assembly but there is missing - // functionality System.Reflection for dynamic modules that means they can't be read back out + // Explicitly register the resources with the QuotationPickler module + // We would save them as resources into the dynamic assembly but there is missing + // functionality System.Reflection for dynamic modules that means they can't be read back out let cenv = { ilg = ilGlobals ; emitTailcalls = tcConfig.emitTailcalls; generatePdb = generateDebugInfo; resolveAssemblyRef=resolveAssemblyRef; tryFindSysILTypeRef=tcGlobals.TryFindSysILTypeRef } - for (referencedTypeDefs, bytes) in codegenResults.quotationResourceInfo do - let referencedTypes = - [| for tref in referencedTypeDefs do + for (referencedTypeDefs, bytes) in codegenResults.quotationResourceInfo do + let referencedTypes = + [| for tref in referencedTypeDefs do yield ILRuntimeWriter.LookupTypeRef cenv emEnv tref |] Microsoft.FSharp.Quotations.Expr.RegisterReflectedDefinitions (assemblyBuilder, fragName, bytes, referencedTypes); - + ReportTime tcConfig "Run Bindings"; - timeReporter.TimeOpIf istate.timing (fun () -> - execs |> List.iter (fun exec -> - match exec() with - | Some err -> - match errorLogger with - | :? ErrorLoggerThatStopsOnFirstError as errorLogger -> + timeReporter.TimeOpIf istate.timing (fun () -> + execs |> List.iter (fun exec -> + match exec() with + | Some err -> + match errorLogger with + | :? ErrorLoggerThatStopsOnFirstError as errorLogger -> fprintfn fsiConsoleOutput.Error "%s" (err.ToString()) errorLogger.SetError() errorLogger.AbortOnError(fsiConsoleOutput) - | _ -> + | _ -> raise (StopProcessingExn (Some err)) | None -> ())) ; @@ -1186,22 +1194,23 @@ type internal FsiDynamicCompiler // Echo the decls (reach inside wrapping) // This code occurs AFTER the execution of the declarations. // So stored values will have been initialised, modified etc. - if showTypes && not tcConfig.noFeedback then + if showTypes && not tcConfig.noFeedback then let denv = tcState.TcEnvFromImpls.DisplayEnv - let denv = + let denv = if isIncrementalFragment then // Extend denv with a (Val -> layout option) function for printing of val bindings. {denv with generatedValueLayout = (fun v -> valuePrinter.InvokeDeclLayout (emEnv, ilxGenerator, v)) } else // With #load items, the vals in the inferred signature do not tie up with those generated. Disable printing. - denv + denv + let denv = { denv with suppressInlineKeyword = false } // dont' suppress 'inline' in 'val inline f = ...' // 'Open' the path for the fragment we just compiled for any future printing. - let denv = denv.AddOpenPath (pathOfLid prefixPath) + let denv = denv.AddOpenPath (pathOfLid prefixPath) for (TImplFile (_qname,_,mexpr,_,_,_)) in declaredImpls do - let responseL = NicePrint.layoutInferredSigOfModuleExpr false denv infoReader AccessibleFromSomewhere rangeStdin mexpr - if not (Layout.isEmptyL responseL) then + let responseL = NicePrint.layoutInferredSigOfModuleExpr false denv infoReader AccessibleFromSomewhere rangeStdin mexpr + if not (isEmptyL responseL) then let opts = valuePrinter.GetFsiPrintOptions() Utilities.colorPrintL outWriter opts responseL |> ignore @@ -1210,7 +1219,7 @@ type internal FsiDynamicCompiler emEnv = emEnv; ilxGenerator = ilxGenerator; tcState = tcState } - + // Return the new state and the environment at the end of the last input, ready for further inputs. (istate,declaredImpls) @@ -1218,20 +1227,20 @@ type internal FsiDynamicCompiler #if DEBUG // Logging/debugging if tcConfig.printAst then - for input in declaredImpls do - fprintfn fsiConsoleOutput.Out "AST:" + for input in declaredImpls do + fprintfn fsiConsoleOutput.Out "AST:" fprintfn fsiConsoleOutput.Out "%+A" input #endif errorLogger.AbortOnError(fsiConsoleOutput); - + let importMap = tcImports.GetImportMap() - // optimize: note we collect the incremental optimization environment + // optimize: note we collect the incremental optimization environment let optimizedImpls, _optData, optEnv = ApplyAllOptimizations (tcConfig, tcGlobals, (LightweightTcValForUsingInBuildMethodCall tcGlobals), outfile, importMap, isIncrementalFragment, optEnv, tcState.Ccu, declaredImpls) errorLogger.AbortOnError(fsiConsoleOutput); - - let fragName = textOfLid prefixPath + + let fragName = textOfLid prefixPath let codegenResults = GenerateIlxCode (IlReflectBackend, isInteractiveItExpr, runningOnMono, tcConfig, topCustomAttrs, optimizedImpls, fragName, ilxGenerator) errorLogger.AbortOnError(fsiConsoleOutput); codegenResults, optEnv, fragName @@ -1242,9 +1251,9 @@ type internal FsiDynamicCompiler let ilxGenerator = istate.ilxGenerator let tcConfig = TcConfig.Create(tcConfigB,validate=false) - // Typecheck. The lock stops the type checker running at the same time as the + // Typecheck. The lock stops the type checker running at the same time as the // server intellisense implementation (which is currently incomplete and #if disabled) - let (tcState:TcState),topCustomAttrs,declaredImpls,tcEnvAtEndOfLastInput = + let (tcState:TcState), topCustomAttrs, declaredImpls, tcEnvAtEndOfLastInput = lock tcLockObject (fun _ -> TypeCheckClosedInputSet(ctok, errorLogger.CheckForErrors, tcConfig, tcImports, tcGlobals, Some prefixPath, tcState, inputs)) let codegenResults, optEnv, fragName = ProcessTypedImpl(errorLogger, optEnv, tcState, tcConfig, isInteractiveItExpr, topCustomAttrs, prefixPath, isIncrementalFragment, declaredImpls, ilxGenerator) @@ -1260,8 +1269,8 @@ type internal FsiDynamicCompiler let nextFragmentId() = fragmentId <- fragmentId + 1; fragmentId - let mkFragmentPath i = - // NOTE: this text shows in exn traces and type names. Make it clear and fixed width + let mkFragmentPath i = + // NOTE: this text shows in exn traces and type names. Make it clear and fixed width [mkSynId rangeStdin (FsiDynamicModulePrefix + sprintf "%04d" i)] let processContents istate declaredImpls = @@ -1284,7 +1293,7 @@ type internal FsiDynamicCompiler if v.IsModuleValueOrMember && not v.IsMember then let fsiValueOpt = match v.Item with - | Item.Value vref -> + | Item.Value vref -> let fsiValueOpt = tryGetGeneratedValue istate cenv vref.Deref if fsiValueOpt.IsSome then boundValues <- boundValues |> NameMap.add v.CompiledName vref.Deref @@ -1327,7 +1336,7 @@ type internal FsiDynamicCompiler let amap = tcImports.GetImportMap() let prevCcuinfos = tcImports.GetImportedAssemblies() - + let rec import ccuinfos (ilTy: ILType) = let ccuinfos, tinst = (ilTy.GenericArgs, (ccuinfos, [])) @@ -1347,49 +1356,49 @@ type internal FsiDynamicCompiler | _ -> ccuinfos ccuinfos, ty - + let ilTy = convertReflectionTypeToILType reflectionTy if not (Import.CanImportILType amap range0 ilTy) then invalidOp (sprintf "Unable to import type, %A." reflectionTy) let ccuinfos, ty = import [] ilTy - let ccuinfos = - ccuinfos + let ccuinfos = + ccuinfos |> List.distinctBy (fun x -> x.FSharpViewOfMetadata.AssemblyName) |> List.filter (fun asm1 -> not (prevCcuinfos |> List.exists (fun asm2 -> asm2.FSharpViewOfMetadata.AssemblyName = asm1.FSharpViewOfMetadata.AssemblyName))) // After we have successfully imported the type, then we can add newly resolved ccus to the env. addCcusToIncrementalEnv istate ccuinfos, ty - member __.DynamicAssemblyName = assemblyName + member _.DynamicAssemblyName = assemblyName - member __.DynamicAssembly = (assemblyBuilder :> Assembly) + member _.DynamicAssembly = (assemblyBuilder :> Assembly) - member __.EvalParsedSourceFiles (ctok, errorLogger, istate, inputs) = + member _.EvalParsedSourceFiles (ctok, errorLogger, istate, inputs) = let i = nextFragmentId() - let prefix = mkFragmentPath i - // Ensure the path includes the qualifying name - let inputs = inputs |> List.map (PrependPathToInput prefix) + let prefix = mkFragmentPath i + // Ensure the path includes the qualifying name + let inputs = inputs |> List.map (PrependPathToInput prefix) let istate,_,_ = ProcessInputs (ctok, errorLogger, istate, inputs, true, false, false, prefix) istate /// Evaluate the given definitions and produce a new interactive state. - member __.EvalParsedDefinitions (ctok, errorLogger: ErrorLogger, istate, showTypes, isInteractiveItExpr, defs) = + member _.EvalParsedDefinitions (ctok, errorLogger: ErrorLogger, istate, showTypes, isInteractiveItExpr, defs) = let filename = Lexhelp.stdinMockFilename let i = nextFragmentId() let prefix = mkFragmentPath i let prefixPath = pathOfLid prefix - let impl = SynModuleOrNamespace(prefix,(*isRec*)false, NamedModule,defs,PreXmlDoc.Empty,[],None,rangeStdin) + let impl = SynModuleOrNamespace(prefix,(*isRec*)false, SynModuleOrNamespaceKind.NamedModule,defs,PreXmlDoc.Empty,[],None,rangeStdin) let input = ParsedInput.ImplFile (ParsedImplFileInput (filename,true, ComputeQualifiedNameOfFileFromUniquePath (rangeStdin,prefixPath),[],[],[impl],(true (* isLastCompiland *), false (* isExe *)) )) let istate,tcEnvAtEndOfLastInput,declaredImpls = ProcessInputs (ctok, errorLogger, istate, [input], showTypes, true, isInteractiveItExpr, prefix) - let tcState = istate.tcState + let tcState = istate.tcState let newState = { istate with tcState = tcState.NextStateAfterIncrementalFragment(tcEnvAtEndOfLastInput) } processContents newState declaredImpls /// Evaluate the given expression and produce a new interactive state. member fsiDynamicCompiler.EvalParsedExpression (ctok, errorLogger: ErrorLogger, istate, expr: SynExpr) = let tcConfig = TcConfig.Create (tcConfigB, validate=false) - let itName = "it" + let itName = "it" // Construct the code that saves the 'it' value into the 'SaveIt' register. let defs = fsiDynamicCompiler.BuildItBinding expr @@ -1397,14 +1406,15 @@ type internal FsiDynamicCompiler // Evaluate the overall definitions. let istate = fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, false, true, defs) |> fst // Snarf the type for 'it' via the binding - match istate.tcState.TcEnvFromImpls.NameEnv.FindUnqualifiedItem itName with - | NameResolution.Item.Value vref -> - if not tcConfig.noFeedback then - valuePrinter.InvokeExprPrinter (istate.tcState.TcEnvFromImpls.DisplayEnv, istate.emEnv, istate.ilxGenerator, vref.Deref) + match istate.tcState.TcEnvFromImpls.NameEnv.FindUnqualifiedItem itName with + | NameResolution.Item.Value vref -> + if not tcConfig.noFeedback then + let infoReader = InfoReader(istate.tcGlobals, istate.tcImports.GetImportMap()) + valuePrinter.InvokeExprPrinter (istate.tcState.TcEnvFromImpls.DisplayEnv, infoReader, istate.emEnv, istate.ilxGenerator, vref) /// Clear the value held in the previous "it" binding, if any, as long as it has never been referenced. match prevIt with - | Some prevVal when not prevVal.Deref.HasBeenReferenced -> + | Some prevVal when not prevVal.Deref.HasBeenReferenced -> istate.ilxGenerator.ClearGeneratedValue (valuePrinter.GetEvaluationContext istate.emEnv, prevVal.Deref) | _ -> () prevIt <- Some vref @@ -1419,39 +1429,39 @@ type internal FsiDynamicCompiler | _ -> istate, Completed None // Construct the code that saves the 'it' value into the 'SaveIt' register. - member __.BuildItBinding (expr: SynExpr) = + member _.BuildItBinding (expr: SynExpr) = let m = expr.Range - let itName = "it" + let itName = "it" let itID = mkSynId m itName //let itExp = SynExpr.Ident itID - let mkBind pat expr = Binding (None, DoBinding, false, (*mutable*)false, [], PreXmlDoc.Empty, SynInfo.emptySynValData, pat, None, expr, m, NoDebugPointAtInvisibleBinding) - let bindingA = mkBind (mkSynPatVar None itID) expr (* let it = *) // NOTE: the generalizability of 'expr' must not be damaged, e.g. this can't be an application + let mkBind pat expr = SynBinding (None, SynBindingKind.Do, false, (*mutable*)false, [], PreXmlDoc.Empty, SynInfo.emptySynValData, pat, None, expr, m, DebugPointAtBinding.NoneAtInvisible) + let bindingA = mkBind (mkSynPatVar None itID) expr (* let it = *) // NOTE: the generalizability of 'expr' must not be damaged, e.g. this can't be an application //let saverPath = ["Microsoft";"FSharp";"Compiler";"Interactive";"RuntimeHelpers";"SaveIt"] //let dots = List.replicate (saverPath.Length - 1) m //let bindingB = mkBind (SynPat.Wild m) (SynExpr.App (ExprAtomicFlag.NonAtomic, false, SynExpr.LongIdent (false, LongIdentWithDots(List.map (mkSynId m) saverPath,dots),None,m), itExp,m)) (* let _ = saverPath it *) let defA = SynModuleDecl.Let (false, [bindingA], m) //let defB = SynModuleDecl.Let (false, [bindingB], m) - + [defA (* ; defB *) ] // construct an invisible call to Debugger.Break(), in the specified range - member __.CreateDebuggerBreak (m : range) = + member _.CreateDebuggerBreak (m : range) = let breakPath = ["System";"Diagnostics";"Debugger";"Break"] let dots = List.replicate (breakPath.Length - 1) m let methCall = SynExpr.LongIdent (false, LongIdentWithDots(List.map (mkSynId m) breakPath, dots), None, m) let args = SynExpr.Const (SynConst.Unit, m) let breakStatement = SynExpr.App (ExprAtomicFlag.Atomic, false, methCall, args, m) - SynModuleDecl.DoExpr(DebugPointForBinding.NoDebugPointAtDoBinding, breakStatement, m) + SynModuleDecl.DoExpr(DebugPointAtBinding.NoneAtDo, breakStatement, m) - member __.EvalRequireReference (ctok, istate, m, path) = + member _.EvalRequireReference (ctok, istate, m, path) = if FileSystem.IsInvalidPathShim(path) then error(Error(FSIstrings.SR.fsiInvalidAssembly(path),m)) - // Check the file can be resolved before calling requireDLLReference + // Check the file can be resolved before calling requireDLLReference let resolutions = tcImports.ResolveAssemblyReference(ctok, AssemblyReference(m,path,None), ResolveAssemblyReferenceMode.ReportErrors) tcConfigB.AddReferencedAssemblyByPath(m,path) - let tcState = istate.tcState - let tcEnv,(_dllinfos,ccuinfos) = + let tcState = istate.tcState + let tcEnv,(_dllinfos,ccuinfos) = try RequireDLL (ctok, tcImports, tcState.TcEnvFromImpls, assemblyName, m, path) with e -> @@ -1460,12 +1470,12 @@ type internal FsiDynamicCompiler resolutions, { addCcusToIncrementalEnv istate ccuinfos with tcState = tcState.NextStateAfterIncrementalFragment(tcEnv) } - member __.EvalDependencyManagerTextFragment (packageManager:IDependencyManagerProvider, lt, m, path: string) = + member _.EvalDependencyManagerTextFragment (packageManager:IDependencyManagerProvider, lt, m, path: string) = tcConfigB.packageManagerLines <- PackageManagerLine.AddLineWithKey packageManager.Key lt path m tcConfigB.packageManagerLines needsPackageResolution <- true - member fsiDynamicCompiler.CommitDependencyManagerText (ctok, istate: FsiDynamicCompilerState, lexResourceManager, errorLogger) = + member fsiDynamicCompiler.CommitDependencyManagerText (ctok, istate: FsiDynamicCompilerState, lexResourceManager, errorLogger) = if not needsPackageResolution then istate else needsPackageResolution <- false @@ -1490,13 +1500,16 @@ type internal FsiDynamicCompiler packageManagerLines |> List.map (fun line -> directive line.Directive, line.Line) try - let result = fsiOptions.DependencyProvider.Resolve(dependencyManager, ".fsx", packageManagerTextLines, reportError m, executionTfm, executionRid, tcConfigB.implicitIncludeDir, "stdin.fsx", "stdin.fsx") + let tfm, rid = fsiOptions.FxResolver.GetTfmAndRid() + let result = fsiOptions.DependencyProvider.Resolve(dependencyManager, ".fsx", packageManagerTextLines, reportError m, tfm, rid, tcConfigB.implicitIncludeDir, "stdin.fsx", "stdin.fsx") if result.Success then for line in result.StdOut do Console.Out.WriteLine(line) for line in result.StdError do Console.Error.WriteLine(line) tcConfigB.packageManagerLines <- PackageManagerLine.SetLinesAsProcessed packageManagerKey tcConfigB.packageManagerLines for folder in result.Roots do tcConfigB.AddIncludePath(m, folder, "") + for resolution in result.Resolutions do + tcConfigB.AddReferencedAssemblyByPath(m, resolution) let scripts = result.SourceFiles |> Seq.toList if not (isNil scripts) then fsiDynamicCompiler.EvalSourceFiles(ctok, istate, m, scripts, lexResourceManager, errorLogger) @@ -1519,11 +1532,11 @@ type internal FsiDynamicCompiler member fsiDynamicCompiler.ProcessMetaCommandsFromInputAsInteractiveCommands(ctok, istate, sourceFile, inp) = WithImplicitHome - (tcConfigB, directoryName sourceFile) + (tcConfigB, directoryName sourceFile) (fun () -> - ProcessMetaCommandsFromInput + ProcessMetaCommandsFromInput ((fun st (m,nm) -> tcConfigB.TurnWarningOff(m,nm); st), - (fun st (m, path, directive) -> + (fun st (m, path, directive) -> let dm = tcImports.DependencyProvider.TryFindDependencyManagerInPath(tcConfigB.compilerToolPaths, getOutputDir tcConfigB, reportError m, path) @@ -1544,28 +1557,28 @@ type internal FsiDynamicCompiler | path, _ -> snd (fsiDynamicCompiler.EvalRequireReference (ctok, st, m, path)) ), - (fun _ _ -> ())) + (fun _ _ -> ())) (tcConfigB, inp, Path.GetDirectoryName sourceFile, istate)) member fsiDynamicCompiler.EvalSourceFiles(ctok, istate, m, sourceFiles, lexResourceManager, errorLogger: ErrorLogger) = let tcConfig = TcConfig.Create(tcConfigB,validate=false) - match sourceFiles with + match sourceFiles with | [] -> istate - | _ -> + | _ -> // use a set of source files as though they were command line inputs - let sourceFiles = sourceFiles |> List.map (fun nm -> tcConfig.ResolveSourceFile(m, nm, tcConfig.implicitIncludeDir),m) - + let sourceFiles = sourceFiles |> List.map (fun nm -> tcConfig.ResolveSourceFile(m, nm, tcConfig.implicitIncludeDir),m) + // Close the #load graph on each file and gather the inputs from the scripts. let tcConfig = TcConfig.Create(tcConfigB,validate=false) let closure = - LoadClosure.ComputeClosureOfScriptFiles(ctok, tcConfig, + LoadClosure.ComputeClosureOfScriptFiles(tcConfig, sourceFiles, CodeContext.CompilationAndEvaluation, lexResourceManager, fsiOptions.DependencyProvider) - + // Intent "[Loading %s]\n" (String.concat "\n and " sourceFiles) fsiConsoleOutput.uprintf "[%s " (FSIstrings.SR.fsiLoadingFilesPrefixText()) - closure.Inputs |> List.iteri (fun i input -> + closure.Inputs |> List.iteri (fun i input -> if i=0 then fsiConsoleOutput.uprintf "%s" input.FileName else fsiConsoleOutput.uprintnf " %s %s" (FSIstrings.SR.fsiLoadingFilesPrefixText()) input.FileName) fsiConsoleOutput.uprintfn "]" @@ -1574,27 +1587,25 @@ type internal FsiDynamicCompiler // Play errors and warnings from resolution closure.ResolutionDiagnostics |> List.iter diagnosticSink - + // Non-scripts will not have been parsed during #load closure so parse them now - let sourceFiles,inputs = - closure.Inputs - |> List.map (fun input-> + let sourceFiles,inputs = + closure.Inputs + |> List.map (fun input-> input.ParseDiagnostics |> List.iter diagnosticSink input.MetaCommandDiagnostics |> List.iter diagnosticSink - let parsedInput = - match input.SyntaxTree with + let parsedInput = + match input.SyntaxTree with | None -> ParseOneInputFile(tcConfig,lexResourceManager,["INTERACTIVE"],input.FileName,(true,false),errorLogger,(*retryLocked*)false) - | _-> input.SyntaxTree + | Some parseTree -> parseTree input.FileName, parsedInput) |> List.unzip errorLogger.AbortOnError(fsiConsoleOutput); - if inputs |> List.exists Option.isNone then failwith "parse error" - let inputs = List.map Option.get inputs let istate = (istate, sourceFiles, inputs) |||> List.fold2 (fun istate sourceFile input -> fsiDynamicCompiler.ProcessMetaCommandsFromInputAsInteractiveCommands(ctok, istate, sourceFile, input)) fsiDynamicCompiler.EvalParsedSourceFiles (ctok, errorLogger, istate, inputs) - member __.GetBoundValues istate = + member _.GetBoundValues istate = let cenv = SymbolEnv(istate.tcGlobals, istate.tcState.Ccu, Some istate.tcState.CcuSig, istate.tcImports) [ for pair in istate.boundValues do let nm = pair.Key @@ -1605,7 +1616,7 @@ type internal FsiDynamicCompiler | _ -> () ] - member __.TryFindBoundValue(istate, nm) = + member _.TryFindBoundValue(istate, nm) = match istate.boundValues.TryFind nm with | Some v -> let cenv = SymbolEnv(istate.tcGlobals, istate.tcState.Ccu, Some istate.tcState.CcuSig, istate.tcImports) @@ -1627,9 +1638,9 @@ type internal FsiDynamicCompiler invalidArg "name" "Name cannot be null or white-space." // Verify that the name is a valid identifier for a value. - SourceCodeServices.Lexer.FSharpLexer.Lex(SourceText.ofString name, + FSharpLexer.Tokenize(SourceText.ofString name, let mutable foundOne = false - fun t -> + fun t -> if not t.IsIdentifier || foundOne then invalidArg "name" "Name is not a valid identifier." foundOne <- true) @@ -1649,9 +1660,9 @@ type internal FsiDynamicCompiler // Build a simple module with a single 'let' decl with a default value. let moduleOrNamespace, v, impl = mkBoundValueTypedImpl istate.tcGlobals range0 qualifiedName.Text name ty - let tcEnvAtEndOfLastInput = + let tcEnvAtEndOfLastInput = CheckDeclarations.AddLocalSubModule tcGlobals amap range0 istate.tcState.TcEnvFromImpls moduleOrNamespace - |> CheckExpressions.AddLocalVal TcResultsSink.NoSink range0 v + |> CheckExpressions.AddLocalVal tcGlobals TcResultsSink.NoSink range0 v // Generate IL for the given typled impl and create new interactive state. let ilxGenerator = istate.ilxGenerator @@ -1670,13 +1681,13 @@ type internal FsiDynamicCompiler with | ex -> istate, CompletedWithReportedError(StopProcessingExn(Some ex)) - - member __.GetInitialInteractiveState () = + + member _.GetInitialInteractiveState () = let tcConfig = TcConfig.Create(tcConfigB,validate=false) let optEnv0 = GetInitialOptimizationEnv (tcImports, tcGlobals) let emEnv = ILRuntimeWriter.emEnv0 let tcEnv = GetInitialTcEnv (assemblyName, rangeStdin, tcConfig, tcImports, tcGlobals) - let ccuName = assemblyName + let ccuName = assemblyName let tcState = GetInitialTcState (rangeStdin, ccuName, tcConfig, tcGlobals, tcImports, niceNameGen, tcEnv) @@ -1690,15 +1701,15 @@ type internal FsiDynamicCompiler boundValues = NameMap.empty timing = false debugBreak = false - } + } - member __.CurrentPartialAssemblySignature(istate) = + member _.CurrentPartialAssemblySignature(istate) = FSharpAssemblySignature(istate.tcGlobals, istate.tcState.Ccu, istate.tcState.CcuSig, istate.tcImports, None, istate.tcState.CcuSig) - member __.FormatValue(obj:obj, objTy) = + member _.FormatValue(obj:obj, objTy) = valuePrinter.FormatValue(obj, objTy) - member __.ValueBound = valueBoundEvent.Publish + member _.ValueBound = valueBoundEvent.Publish //---------------------------------------------------------------------------- // ctrl-c handling @@ -1706,29 +1717,29 @@ type internal FsiDynamicCompiler type ControlEventHandler = delegate of int -> bool -// One strange case: when a TAE happens a strange thing +// One strange case: when a TAE happens a strange thing // occurs the next read from stdin always returns // 0 bytes, i.e. the channel will look as if it has been closed. So we check // for this condition explicitly. We also recreate the lexbuf whenever CtrlC kicks. -type internal FsiInterruptStdinState = - | StdinEOFPermittedBecauseCtrlCRecentlyPressed +type internal FsiInterruptStdinState = + | StdinEOFPermittedBecauseCtrlCRecentlyPressed | StdinNormal -type internal FsiInterruptControllerState = - | InterruptCanRaiseException - | InterruptIgnored +type internal FsiInterruptControllerState = + | InterruptCanRaiseException + | InterruptIgnored -type internal FsiInterruptControllerKillerThreadRequest = - | ThreadAbortRequest - | NoRequest - | ExitRequest +type internal FsiInterruptControllerKillerThreadRequest = + | ThreadAbortRequest + | NoRequest + | ExitRequest | PrintInterruptRequest type internal FsiInterruptController(fsiOptions: FsiCommandLineOptions, fsiConsoleOutput: FsiConsoleOutput) = let mutable stdinInterruptState = StdinNormal - let CTRL_C = 0 + let CTRL_C = 0 let mutable interruptAllowed = InterruptIgnored let mutable killThreadRequest = NoRequest @@ -1738,24 +1749,24 @@ type internal FsiInterruptController(fsiOptions: FsiCommandLineOptions, fsiConso let mutable posixReinstate = (fun () -> ()) - member __.Exit() = + member _.Exit() = if exitViaKillThread then killThreadRequest <- ExitRequest Thread.Sleep(1000) exit 0 - member __.FsiInterruptStdinState + member _.FsiInterruptStdinState with get () = stdinInterruptState and set v = stdinInterruptState <- v - member __.ClearInterruptRequest() = killThreadRequest <- NoRequest + member _.ClearInterruptRequest() = killThreadRequest <- NoRequest - member __.InterruptAllowed + member _.InterruptAllowed with set v = interruptAllowed <- v - member __.Interrupt() = ctrlEventActions |> List.iter (fun act -> act()) + member _.Interrupt() = ctrlEventActions |> List.iter (fun act -> act()) - member __.EventHandlers = ctrlEventHandlers + member _.EventHandlers = ctrlEventHandlers member controller.InstallKillThread(threadToKill:Thread, pauseMilliseconds:int) = @@ -1765,19 +1776,19 @@ type internal FsiInterruptController(fsiOptions: FsiCommandLineOptions, fsiConso fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiInterrupt()) stdinInterruptState <- StdinEOFPermittedBecauseCtrlCRecentlyPressed - if (interruptAllowed = InterruptCanRaiseException) then + if (interruptAllowed = InterruptCanRaiseException) then killThreadRequest <- ThreadAbortRequest - let killerThread = + let killerThread = new Thread(new ThreadStart(fun () -> use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID - // sleep long enough to allow ControlEventHandler handler on main thread to return - // Also sleep to give computations a bit of time to terminate + // sleep long enough to allow ControlEventHandler handler on main thread to return + // Also sleep to give computations a bit of time to terminate Thread.Sleep(pauseMilliseconds) - if (killThreadRequest = ThreadAbortRequest) then - if progress then fsiConsoleOutput.uprintnfn "%s" (FSIstrings.SR.fsiAbortingMainThread()) + if (killThreadRequest = ThreadAbortRequest) then + if progress then fsiConsoleOutput.uprintnfn "%s" (FSIstrings.SR.fsiAbortingMainThread()) killThreadRequest <- NoRequest threadToKill.Abort() - ()),Name="ControlCAbortThread") + ()),Name="ControlCAbortThread") killerThread.IsBackground <- true killerThread.Start() @@ -1787,18 +1798,18 @@ type internal FsiInterruptController(fsiOptions: FsiCommandLineOptions, fsiConso do Console.CancelKeyPress.Add(fsiInterruptHandler) - // WINDOWS TECHNIQUE: .NET has more safe points, and you can do more when a safe point. + // WINDOWS TECHNIQUE: .NET has more safe points, and you can do more when a safe point. // Hence we actually start up the killer thread within the handler. - let ctrlEventHandler = new ControlEventHandler(fun i -> if i = CTRL_C then (raiseCtrlC(); true) else false ) + let ctrlEventHandler = new ControlEventHandler(fun i -> if i = CTRL_C then (raiseCtrlC(); true) else false ) ctrlEventHandlers <- ctrlEventHandler :: ctrlEventHandlers ctrlEventActions <- raiseCtrlC :: ctrlEventActions exitViaKillThread <- false // don't exit via kill thread - member x.PosixInvoke(n:int) = + member x.PosixInvoke(n:int) = // we run this code once with n = -1 to make sure it is JITted before execution begins // since we are not allowed to JIT a signal handler. This also ensures the "PosixInvoke" // method is not eliminated by dead-code elimination - if n >= 0 then + if n >= 0 then posixReinstate() stdinInterruptState <- StdinEOFPermittedBecauseCtrlCRecentlyPressed killThreadRequest <- if (interruptAllowed = InterruptCanRaiseException) then ThreadAbortRequest else PrintInterruptRequest @@ -1812,39 +1823,39 @@ type internal FsiInterruptController(fsiOptions: FsiCommandLineOptions, fsiConso // From http://msdn.microsoft.com/en-us/library/ff527268.aspx // What the Event Handler Does // -// The handler for the AssemblyResolve event receives the display name of the assembly to -// be loaded, in the ResolveEventArgs.Name property. If the handler does not recognize the -// assembly name, it returns null (Nothing in Visual Basic, nullptr in Visual C++). +// The handler for the AssemblyResolve event receives the display name of the assembly to +// be loaded, in the ResolveEventArgs.Name property. If the handler does not recognize the +// assembly name, it returns null (Nothing in Visual Basic, nullptr in Visual C++). // -// - If the handler recognizes the assembly name, it can load and return an assembly that -// satisfies the request. The following list describes some sample scenarios. +// - If the handler recognizes the assembly name, it can load and return an assembly that +// satisfies the request. The following list describes some sample scenarios. // -// - If the handler knows the location of a version of the assembly, it can load the assembly by -// using the Assembly.LoadFrom or Assembly.LoadFile method, and can return the loaded assembly if successful. +// - If the handler knows the location of a version of the assembly, it can load the assembly by +// using the Assembly.LoadFrom or Assembly.LoadFile method, and can return the loaded assembly if successful. // -// - If the handler has access to a database of assemblies stored as byte arrays, it can load a byte array by -// using one of the Assembly.Load method overloads that take a byte array. +// - If the handler has access to a database of assemblies stored as byte arrays, it can load a byte array by +// using one of the Assembly.Load method overloads that take a byte array. // // - The handler can generate a dynamic assembly and return it. -// -// It is the responsibility of the event handler to return a suitable assembly. The handler can parse the display -// name of the requested assembly by passing the ResolveEventArgs.Name property value to the AssemblyName(String) -// constructor. Beginning with the .NET Framework version 4, the handler can use the ResolveEventArgs.RequestingAssembly -// property to determine whether the current request is a dependency of another assembly. This information can help +// +// It is the responsibility of the event handler to return a suitable assembly. The handler can parse the display +// name of the requested assembly by passing the ResolveEventArgs.Name property value to the AssemblyName(String) +// constructor. Beginning with the .NET Framework version 4, the handler can use the ResolveEventArgs.RequestingAssembly +// property to determine whether the current request is a dependency of another assembly. This information can help // identify an assembly that will satisfy the dependency. -// -// The event handler can return a different version of the assembly than the version that was requested. -// -// In most cases, the assembly that is returned by the handler appears in the load context, regardless of the context -// the handler loads it into. For example, if the handler uses the Assembly.LoadFrom method to load an assembly into -// the load-from context, the assembly appears in the load context when the handler returns it. However, in the following +// +// The event handler can return a different version of the assembly than the version that was requested. +// +// In most cases, the assembly that is returned by the handler appears in the load context, regardless of the context +// the handler loads it into. For example, if the handler uses the Assembly.LoadFrom method to load an assembly into +// the load-from context, the assembly appears in the load context when the handler returns it. However, in the following // case the assembly appears without context when the handler returns it: -// +// // - The handler loads an assembly without context. // - The ResolveEventArgs.RequestingAssembly property is not null. -// - The requesting assembly (that is, the assembly that is returned by the ResolveEventArgs.RequestingAssembly property) -// was loaded without context. -// +// - The requesting assembly (that is, the assembly that is returned by the ResolveEventArgs.RequestingAssembly property) +// was loaded without context. +// // On the coreclr we add an UnmanagedDll Resoution handler to ensure that native dll's can be searched for, // the desktop version of the Clr does not support this mechanism. // @@ -1855,7 +1866,7 @@ module internal MagicAssemblyResolution = // See bug 5501 for details on decision to use UnsafeLoadFrom here. // Summary: // It is an explicit user trust decision to load an assembly with #r. Scripts are not run automatically (for example, by double-clicking in explorer). - // We considered setting loadFromRemoteSources in fsi.exe.config but this would transitively confer unsafe loading to the code in the referenced + // We considered setting loadFromRemoteSources in fsi.exe.config but this would transitively confer unsafe loading to the code in the referenced // assemblies. Better to let those assemblies decide for themselves which is safer. [] let private assemblyLoadFrom (path:string) = Assembly.UnsafeLoadFrom(path) @@ -1864,89 +1875,96 @@ module internal MagicAssemblyResolution = let ResolveAssembly (ctok, m, tcConfigB, tcImports: TcImports, fsiDynamicCompiler: FsiDynamicCompiler, fsiConsoleOutput: FsiConsoleOutput, fullAssemName: string) = - try + try // Grab the name of the assembly let tcConfig = TcConfig.Create(tcConfigB,validate=false) let simpleAssemName = fullAssemName.Split([| ',' |]).[0] - if progress then fsiConsoleOutput.uprintfn "ATTEMPT MAGIC LOAD ON ASSEMBLY, simpleAssemName = %s" simpleAssemName // "Attempting to load a dynamically required assembly in response to an AssemblyResolve event by using known static assembly references..." + if progress then fsiConsoleOutput.uprintfn "ATTEMPT MAGIC LOAD ON ASSEMBLY, simpleAssemName = %s" simpleAssemName // "Attempting to load a dynamically required assembly in response to an AssemblyResolve event by using known static assembly references..." // Special case: Mono Windows Forms attempts to load an assembly called something like "Windows.Forms.resources" // We can't resolve this, so don't try. // REVIEW: Suggest 4481, delete this special case. - if simpleAssemName.EndsWith(".resources",StringComparison.OrdinalIgnoreCase) || - // See F# 1.0 Product Studio bug 1171 - simpleAssemName.EndsWith(".XmlSerializers",StringComparison.OrdinalIgnoreCase) || - (runningOnMono && simpleAssemName = "UIAutomationWinforms") then null else - + if (runningOnMono && simpleAssemName.EndsWith(".resources",StringComparison.OrdinalIgnoreCase)) || + simpleAssemName.EndsWith(".XmlSerializers", StringComparison.OrdinalIgnoreCase) || + (runningOnMono && simpleAssemName = "UIAutomationWinforms") then null + else // Special case: Is this the global unique dynamic assembly for FSI code? In this case just - // return the dynamic assembly itself. + // return the dynamic assembly itself. if fsiDynamicCompiler.DynamicAssemblyName = simpleAssemName then fsiDynamicCompiler.DynamicAssembly else // Otherwise continue - let assemblyReferenceTextDll = (simpleAssemName + ".dll") - let assemblyReferenceTextExe = (simpleAssemName + ".exe") + let assemblyReferenceTextDll = (simpleAssemName + ".dll") + let assemblyReferenceTextExe = (simpleAssemName + ".exe") let overallSearchResult = // OK, try to resolve as an existing DLL in the resolved reference set. This does unification by assembly name // once an assembly has been referenced. - let searchResult = tcImports.TryFindExistingFullyQualifiedPathBySimpleAssemblyName (ctok, simpleAssemName) + let searchResult = tcImports.TryFindExistingFullyQualifiedPathBySimpleAssemblyName (simpleAssemName) match searchResult with | Some r -> OkResult ([], Choice1Of2 r) - | _ -> + | _ -> // OK, try to resolve as a .dll let searchResult = tcImports.TryResolveAssemblyReference (ctok, AssemblyReference (m, assemblyReferenceTextDll, None), ResolveAssemblyReferenceMode.Speculative) match searchResult with | OkResult (warns,[r]) -> OkResult (warns, Choice1Of2 r.resolvedPath) - | _ -> + | _ -> // OK, try to resolve as a .exe let searchResult = tcImports.TryResolveAssemblyReference (ctok, AssemblyReference (m, assemblyReferenceTextExe, None), ResolveAssemblyReferenceMode.Speculative) match searchResult with | OkResult (warns, [r]) -> OkResult (warns, Choice1Of2 r.resolvedPath) - | _ -> + | _ -> if progress then fsiConsoleOutput.uprintfn "ATTEMPT LOAD, assemblyReferenceTextDll = %s" assemblyReferenceTextDll /// Take a look through the files quoted, perhaps with explicit paths - let searchResult = - (tcConfig.referencedDLLs - |> List.tryPick (fun assemblyReference -> + let searchResult = + (tcConfig.referencedDLLs + |> List.tryPick (fun assemblyReference -> if progress then fsiConsoleOutput.uprintfn "ATTEMPT MAGIC LOAD ON FILE, referencedDLL = %s" assemblyReference.Text - if System.String.Compare(Filename.fileNameOfPath assemblyReference.Text, assemblyReferenceTextDll,StringComparison.OrdinalIgnoreCase) = 0 || - System.String.Compare(Filename.fileNameOfPath assemblyReference.Text, assemblyReferenceTextExe,StringComparison.OrdinalIgnoreCase) = 0 then + if System.String.Compare(FileSystemUtils.fileNameOfPath assemblyReference.Text, assemblyReferenceTextDll,StringComparison.OrdinalIgnoreCase) = 0 || + System.String.Compare(FileSystemUtils.fileNameOfPath assemblyReference.Text, assemblyReferenceTextExe,StringComparison.OrdinalIgnoreCase) = 0 then Some(tcImports.TryResolveAssemblyReference (ctok, assemblyReference, ResolveAssemblyReferenceMode.Speculative)) else None )) match searchResult with | Some (OkResult (warns,[r])) -> OkResult (warns, Choice1Of2 r.resolvedPath) - | _ -> + | _ -> #if !NO_EXTENSIONTYPING match tcImports.TryFindProviderGeneratedAssemblyByName(ctok, simpleAssemName) with | Some(assembly) -> OkResult([],Choice2Of2 assembly) - | None -> + | None -> #endif // As a last resort, try to find the reference without an extension - match tcImports.TryFindExistingFullyQualifiedPathByExactAssemblyRef(ctok, ILAssemblyRef.Create(simpleAssemName,None,None,false,None,None)) with - | Some(resolvedPath) -> + match tcImports.TryFindExistingFullyQualifiedPathByExactAssemblyRef(ILAssemblyRef.Create(simpleAssemName,None,None,false,None,None)) with + | Some(resolvedPath) -> OkResult([],Choice1Of2 resolvedPath) - | None -> + | None -> ErrorResult([],Failure (FSIstrings.SR.fsiFailedToResolveAssembly(simpleAssemName))) - match overallSearchResult with + match overallSearchResult with | ErrorResult _ -> null - | OkResult _ -> + | OkResult _ -> let res = CommitOperationResult overallSearchResult - match res with - | Choice1Of2 assemblyName -> + match res with + | Choice1Of2 assemblyName -> if simpleAssemName <> "Mono.Posix" then fsiConsoleOutput.uprintfn "%s" (FSIstrings.SR.fsiBindingSessionTo(assemblyName)) - assemblyLoadFrom assemblyName - | Choice2Of2 assembly -> + if isRunningOnCoreClr then + assemblyLoadFrom assemblyName + else + try + let an = AssemblyName.GetAssemblyName(assemblyName) + an.CodeBase <- assemblyName + Assembly.Load an + with | _ -> + assemblyLoadFrom assemblyName + | Choice2Of2 assembly -> assembly with e -> @@ -1956,7 +1974,7 @@ module internal MagicAssemblyResolution = let rangeStdin = rangeN Lexhelp.stdinMockFilename 0 let resolveAssembly = new ResolveEventHandler(fun _ args -> - // Explanation: our understanding is that magic assembly resolution happens + // Explanation: our understanding is that magic assembly resolution happens // during compilation. So we recover the CompilationThreadToken here. let ctok = AssumeCompilationThreadWithoutEvidence () ResolveAssembly (ctok, rangeStdin, tcConfigB, tcImports, fsiDynamicCompiler, fsiConsoleOutput, args.Name)) @@ -1969,38 +1987,38 @@ module internal MagicAssemblyResolution = } //---------------------------------------------------------------------------- -// Reading stdin +// Reading stdin //---------------------------------------------------------------------------- type internal FsiStdinLexerProvider - (tcConfigB, fsiStdinSyphon, - fsiConsoleInput : FsiConsoleInput, - fsiConsoleOutput : FsiConsoleOutput, + (tcConfigB, fsiStdinSyphon, + fsiConsoleInput : FsiConsoleInput, + fsiConsoleOutput : FsiConsoleOutput, fsiOptions : FsiCommandLineOptions, - lexResourceManager : LexResourceManager) = + lexResourceManager : LexResourceManager) = // #light is the default for FSI - let interactiveInputLightSyntaxStatus = + let interactiveInputLightSyntaxStatus = let initialLightSyntaxStatus = tcConfigB.light <> Some false LightSyntaxStatus (initialLightSyntaxStatus, false (* no warnings *)) let isFeatureSupported featureId = tcConfigB.langVersion.SupportsFeature featureId - let LexbufFromLineReader (fsiStdinSyphon: FsiStdinSyphon) readF = + let LexbufFromLineReader (fsiStdinSyphon: FsiStdinSyphon) readF = UnicodeLexing.FunctionAsLexbuf - (isFeatureSupported, (fun (buf: char[], start, len) -> + (true, isFeatureSupported, (fun (buf: char[], start, len) -> //fprintf fsiConsoleOutput.Out "Calling ReadLine\n" let inputOption = try Some(readF()) with :? EndOfStreamException -> None inputOption |> Option.iter (fun t -> fsiStdinSyphon.Add (t + "\n")) - match inputOption with - | Some(null) | None -> + match inputOption with + | Some(null) | None -> if progress then fprintfn fsiConsoleOutput.Out "End of file from TextReader.ReadLine" 0 | Some (input:string) -> - let input = input + "\n" - let ninput = input.Length + let input = input + "\n" + let ninput = input.Length if ninput > len then fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiLineTooLong()) - let ntrimmed = min len ninput + let ntrimmed = min len ninput for i = 0 to ntrimmed-1 do buf.[i+start] <- input.[i] ntrimmed @@ -2019,7 +2037,7 @@ type internal FsiStdinLexerProvider let CreateLexerForLexBuffer (sourceFileName, lexbuf, errorLogger) = Lexhelp.resetLexbufPos sourceFileName lexbuf - let skip = true // don't report whitespace from lexer + let skip = true // don't report whitespace from lexer let defines = "INTERACTIVE"::tcConfigB.conditionalCompilationDefines let lexargs = mkLexargs (defines, interactiveInputLightSyntaxStatus, lexResourceManager, [], errorLogger, PathMap.empty) let tokenizer = LexFilter.LexFilter(interactiveInputLightSyntaxStatus, tcConfigB.compilingFslib, Lexer.token lexargs skip, lexbuf) @@ -2027,34 +2045,34 @@ type internal FsiStdinLexerProvider let isFeatureSupported featureId = tcConfigB.langVersion.SupportsFeature featureId - // Create a new lexer to read stdin - member __.CreateStdinLexer (errorLogger) = - let lexbuf = - match fsiConsoleInput.TryGetConsole() with - | Some console when fsiOptions.EnableConsoleKeyProcessing && not fsiOptions.IsInteractiveServer -> - LexbufFromLineReader fsiStdinSyphon (fun () -> - match fsiConsoleInput.TryGetFirstLine() with + // Create a new lexer to read stdin + member _.CreateStdinLexer (errorLogger) = + let lexbuf = + match fsiConsoleInput.TryGetConsole() with + | Some console when fsiOptions.EnableConsoleKeyProcessing && not fsiOptions.UseServerPrompt -> + LexbufFromLineReader fsiStdinSyphon (fun () -> + match fsiConsoleInput.TryGetFirstLine() with | Some firstLine -> firstLine | None -> console()) - | _ -> + | _ -> LexbufFromLineReader fsiStdinSyphon (fun () -> fsiConsoleInput.In.ReadLine() |> removeZeroCharsFromString) fsiStdinSyphon.Reset() CreateLexerForLexBuffer (Lexhelp.stdinMockFilename, lexbuf, errorLogger) // Create a new lexer to read an "included" script file - member __.CreateIncludedScriptLexer (sourceFileName, reader, errorLogger) = - let lexbuf = UnicodeLexing.StreamReaderAsLexbuf(isFeatureSupported, reader) + member _.CreateIncludedScriptLexer (sourceFileName, reader, errorLogger) = + let lexbuf = UnicodeLexing.StreamReaderAsLexbuf(true, isFeatureSupported, reader) CreateLexerForLexBuffer (sourceFileName, lexbuf, errorLogger) // Create a new lexer to read a string member this.CreateStringLexer (sourceFileName, source, errorLogger) = - let lexbuf = UnicodeLexing.StringAsLexbuf(isFeatureSupported, source) + let lexbuf = UnicodeLexing.StringAsLexbuf(true, isFeatureSupported, source) CreateLexerForLexBuffer (sourceFileName, lexbuf, errorLogger) - member __.ConsoleInput = fsiConsoleInput + member _.ConsoleInput = fsiConsoleInput - member __.CreateBufferLexer (sourceFileName, lexbuf, errorLogger) = CreateLexerForLexBuffer (sourceFileName, lexbuf, errorLogger) + member _.CreateBufferLexer (sourceFileName, lexbuf, errorLogger) = CreateLexerForLexBuffer (sourceFileName, lexbuf, errorLogger) //---------------------------------------------------------------------------- @@ -2063,8 +2081,8 @@ type internal FsiStdinLexerProvider //---------------------------------------------------------------------------- type internal FsiInteractionProcessor - (fsi: FsiEvaluationSessionHostConfig, - tcConfigB, + (fsi: FsiEvaluationSessionHostConfig, + tcConfigB, fsiOptions: FsiCommandLineOptions, fsiDynamicCompiler: FsiDynamicCompiler, fsiConsolePrompt : FsiConsolePrompt, @@ -2072,7 +2090,7 @@ type internal FsiInteractionProcessor fsiInterruptController : FsiInterruptController, fsiStdinLexerProvider : FsiStdinLexerProvider, lexResourceManager : LexResourceManager, - initialInteractiveState) = + initialInteractiveState) = let referencedAssemblies = Dictionary() @@ -2080,26 +2098,26 @@ type internal FsiInteractionProcessor let event = Control.Event() let setCurrState s = currState <- s; event.Trigger() - let runCodeOnEventLoop errorLogger f istate = - try - fsi.EventLoopInvoke (fun () -> + let runCodeOnEventLoop errorLogger f istate = + try + fsi.EventLoopInvoke (fun () -> - // Explanation: We assume the event loop on the 'fsi' object correctly transfers control to + // Explanation: We assume the event loop on the 'fsi' object correctly transfers control to // a unique compilation thread. let ctok = AssumeCompilationThreadWithoutEvidence() // FSI error logging on switched to thread InstallErrorLoggingOnThisThread errorLogger use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID - f ctok istate) - with _ -> + f ctok istate) + with _ -> (istate,Completed None) - - let InteractiveCatch (errorLogger: ErrorLogger) (f:_ -> _ * FsiInteractionStepStatus) istate = + + let InteractiveCatch (errorLogger: ErrorLogger) (f:_ -> _ * FsiInteractionStepStatus) istate = try - // reset error count - match errorLogger with - | :? ErrorLoggerThatStopsOnFirstError as errorLogger -> errorLogger.ResetErrorCount() + // reset error count + match errorLogger with + | :? ErrorLoggerThatStopsOnFirstError as errorLogger -> errorLogger.ResetErrorCount() | _ -> () f istate @@ -2113,42 +2131,42 @@ type internal FsiInteractionProcessor let ChangeDirectory (path:string) m = let tcConfig = TcConfig.Create(tcConfigB,validate=false) - let path = tcConfig.MakePathAbsolute path - if Directory.Exists(path) then + let path = tcConfig.MakePathAbsolute path + if FileSystem.DirectoryExistsShim(path) then tcConfigB.implicitIncludeDir <- path else error(Error(FSIstrings.SR.fsiDirectoryDoesNotExist(path),m)) /// Parse one interaction. Called on the parser thread. - let ParseInteraction (tokenizer:LexFilter.LexFilter) = - let mutable lastToken = Parser.ELSE // Any token besides SEMICOLON_SEMICOLON will do for initial value - try + let ParseInteraction (tokenizer:LexFilter.LexFilter) = + let mutable lastToken = Parser.ELSE // Any token besides SEMICOLON_SEMICOLON will do for initial value + try if progress then fprintfn fsiConsoleOutput.Out "In ParseInteraction..." - let input = - Lexhelp.reusingLexbufForParsing tokenizer.LexBuffer (fun () -> - let lexerWhichSavesLastToken _lexbuf = + let input = + Lexhelp.reusingLexbufForParsing tokenizer.LexBuffer (fun () -> + let lexerWhichSavesLastToken _lexbuf = let tok = tokenizer.GetToken() lastToken <- tok - tok + tok Parser.interaction lexerWhichSavesLastToken tokenizer.LexBuffer) Some input with e -> // On error, consume tokens until to ;; or EOF. // Caveat: Unless the error parse ended on ;; - so check the lastToken returned by the lexer function. - // Caveat: What if this was a look-ahead? That's fine! Since we need to skip to the ;; anyway. + // Caveat: What if this was a look-ahead? That's fine! Since we need to skip to the ;; anyway. if (match lastToken with Parser.SEMICOLON_SEMICOLON -> false | _ -> true) then let mutable tok = Parser.ELSE (* <-- any token <> SEMICOLON_SEMICOLON will do *) - while (match tok with Parser.SEMICOLON_SEMICOLON -> false | _ -> true) + while (match tok with Parser.SEMICOLON_SEMICOLON -> false | _ -> true) && not tokenizer.LexBuffer.IsPastEndOfStream do tok <- tokenizer.GetToken() - stopProcessingRecovery e range0 + stopProcessingRecovery e range0 None /// Execute a single parsed interaction. Called on the GUI/execute/main thread. - let ExecInteraction (ctok, tcConfig:TcConfig, istate, action:ParsedFsiInteraction, errorLogger: ErrorLogger) = + let ExecInteraction (ctok, tcConfig:TcConfig, istate, action:ParsedScriptInteraction, errorLogger: ErrorLogger) = let packageManagerDirective directive path m = let dm = fsiOptions.DependencyProvider.TryFindDependencyManagerInPath(tcConfigB.compilerToolPaths, getOutputDir tcConfigB, reportError m, path) match dm with @@ -2173,13 +2191,13 @@ type internal FsiInteractionProcessor if String.IsNullOrWhiteSpace(p) then "" else p let resolutions,istate = fsiDynamicCompiler.EvalRequireReference(ctok, istate, m, path) - resolutions |> List.iter (fun ar -> + resolutions |> List.iter (fun ar -> let format = if tcConfig.shadowCopyReferences then let resolvedPath = ar.resolvedPath.ToUpperInvariant() - let fileTime = File.GetLastWriteTimeUtc(resolvedPath) + let fileTime = FileSystem.GetLastWriteTimeShim(resolvedPath) match referencedAssemblies.TryGetValue resolvedPath with - | false, _ -> + | false, _ -> referencedAssemblies.Add(resolvedPath, fileTime) FSIstrings.SR.fsiDidAHashr(ar.resolvedPath) | true, time when time <> fileTime -> @@ -2192,116 +2210,116 @@ type internal FsiInteractionProcessor istate,Completed None istate |> InteractiveCatch errorLogger (fun istate -> - match action with - | IDefns ([], _) -> - let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) + match action with + | ParsedScriptInteraction.Definitions ([], _) -> + let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) istate,Completed None - | IDefns ([SynModuleDecl.DoExpr(_, expr, _)], _) -> - let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) + | ParsedScriptInteraction.Definitions ([SynModuleDecl.DoExpr(_, expr, _)], _) -> + let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) fsiDynamicCompiler.EvalParsedExpression(ctok, errorLogger, istate, expr) - | IDefns (defs,_) -> - let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) + | ParsedScriptInteraction.Definitions (defs,_) -> + let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, true, false, defs) - | IHash (ParsedHashDirective("load", sourceFiles, m), _) -> - let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) + | ParsedScriptInteraction.HashDirective (ParsedHashDirective("load", ParsedHashDirectiveArguments sourceFiles, m), _) -> + let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) fsiDynamicCompiler.EvalSourceFiles (ctok, istate, m, sourceFiles, lexResourceManager, errorLogger),Completed None - | IHash (ParsedHashDirective(("reference" | "r"), [path], m), _) -> + | ParsedScriptInteraction.HashDirective (ParsedHashDirective(("reference" | "r"), ParsedHashDirectiveArguments [path], m), _) -> packageManagerDirective Directive.Resolution path m - | IHash (ParsedHashDirective("i", [path], m), _) -> + | ParsedScriptInteraction.HashDirective (ParsedHashDirective("i", ParsedHashDirectiveArguments [path], m), _) -> packageManagerDirective Directive.Include path m - | IHash (ParsedHashDirective("I", [path], m), _) -> + | ParsedScriptInteraction.HashDirective (ParsedHashDirective("I", ParsedHashDirectiveArguments [path], m), _) -> tcConfigB.AddIncludePath (m, path, tcConfig.implicitIncludeDir) fsiConsoleOutput.uprintnfnn "%s" (FSIstrings.SR.fsiDidAHashI(tcConfig.MakePathAbsolute path)) istate, Completed None - | IHash (ParsedHashDirective("cd", [path], m), _) -> + | ParsedScriptInteraction.HashDirective (ParsedHashDirective("cd", ParsedHashDirectiveArguments [path], m), _) -> ChangeDirectory path m istate, Completed None - | IHash (ParsedHashDirective("silentCd", [path], m), _) -> + | ParsedScriptInteraction.HashDirective (ParsedHashDirective("silentCd", ParsedHashDirectiveArguments [path], m), _) -> ChangeDirectory path m fsiConsolePrompt.SkipNext() (* "silent" directive *) - istate, Completed None - - | IHash (ParsedHashDirective("dbgbreak", [], _), _) -> + istate, Completed None + + | ParsedScriptInteraction.HashDirective (ParsedHashDirective("dbgbreak", [], _), _) -> {istate with debugBreak = true}, Completed None - | IHash (ParsedHashDirective("time", [], _), _) -> + | ParsedScriptInteraction.HashDirective (ParsedHashDirective("time", [], _), _) -> if istate.timing then fsiConsoleOutput.uprintnfnn "%s" (FSIstrings.SR.fsiTurnedTimingOff()) else fsiConsoleOutput.uprintnfnn "%s" (FSIstrings.SR.fsiTurnedTimingOn()) {istate with timing = not istate.timing}, Completed None - | IHash (ParsedHashDirective("time", [("on" | "off") as v], _), _) -> + | ParsedScriptInteraction.HashDirective (ParsedHashDirective("time", ParsedHashDirectiveArguments [("on" | "off") as v], _), _) -> if v <> "on" then fsiConsoleOutput.uprintnfnn "%s" (FSIstrings.SR.fsiTurnedTimingOff()) else fsiConsoleOutput.uprintnfnn "%s" (FSIstrings.SR.fsiTurnedTimingOn()) {istate with timing = (v = "on")}, Completed None - | IHash (ParsedHashDirective("nowarn", numbers, m), _) -> + | ParsedScriptInteraction.HashDirective (ParsedHashDirective("nowarn", ParsedHashDirectiveArguments numbers, m), _) -> List.iter (fun (d:string) -> tcConfigB.TurnWarningOff(m, d)) numbers istate, Completed None - | IHash (ParsedHashDirective("terms", [], _), _) -> + | ParsedScriptInteraction.HashDirective (ParsedHashDirective("terms", [], _), _) -> tcConfigB.showTerms <- not tcConfig.showTerms istate, Completed None - | IHash (ParsedHashDirective("types", [], _), _) -> + | ParsedScriptInteraction.HashDirective (ParsedHashDirective("types", [], _), _) -> fsiOptions.ShowTypes <- not fsiOptions.ShowTypes istate, Completed None #if DEBUG - | IHash (ParsedHashDirective("ilcode", [], _m), _) -> - fsiOptions.ShowILCode <- not fsiOptions.ShowILCode; + | ParsedScriptInteraction.HashDirective (ParsedHashDirective("ilcode", [], _m), _) -> + fsiOptions.ShowILCode <- not fsiOptions.ShowILCode; istate, Completed None - | IHash (ParsedHashDirective("info", [], _m), _) -> + | ParsedScriptInteraction.HashDirective (ParsedHashDirective("info", [], _m), _) -> PrintOptionInfo tcConfigB istate, Completed None #endif - | IHash (ParsedHashDirective(("q" | "quit"), [], _), _) -> + | ParsedScriptInteraction.HashDirective (ParsedHashDirective(("q" | "quit"), [], _), _) -> fsiInterruptController.Exit() - | IHash (ParsedHashDirective("help", [], m), _) -> + | ParsedScriptInteraction.HashDirective (ParsedHashDirective("help", [], m), _) -> fsiOptions.ShowHelp(m) istate, Completed None - | IHash (ParsedHashDirective(c, arg, m), _) -> + | ParsedScriptInteraction.HashDirective (ParsedHashDirective(c, ParsedHashDirectiveArguments arg, m), _) -> warning(Error((FSComp.SR.fsiInvalidDirective(c, String.concat " " arg)), m)) istate, Completed None ) /// Execute a single parsed interaction which may contain multiple items to be executed /// independently, because some are #directives. Called on the GUI/execute/main thread. - /// + /// /// #directive comes through with other definitions as a SynModuleDecl.HashDirective. /// We split these out for individual processing. let rec execParsedInteractions (ctok, tcConfig, istate, action, errorLogger: ErrorLogger, lastResult:option, cancellationToken: CancellationToken) = cancellationToken.ThrowIfCancellationRequested() - let action,nextAction,istate = + let action,nextAction,istate = match action with | None -> None,None,istate - | Some (IHash _) -> action,None,istate - | Some (IDefns ([],_)) -> None,None,istate - | Some (IDefns (SynModuleDecl.HashDirective(hash,mh) :: defs,m)) -> - Some (IHash(hash,mh)),Some (IDefns(defs,m)),istate + | Some (ParsedScriptInteraction.HashDirective _) -> action,None,istate + | Some (ParsedScriptInteraction.Definitions ([],_)) -> None,None,istate + | Some (ParsedScriptInteraction.Definitions (SynModuleDecl.HashDirective(hash,mh) :: defs,m)) -> + Some (ParsedScriptInteraction.HashDirective(hash,mh)),Some (ParsedScriptInteraction.Definitions(defs,m)),istate - | Some (IDefns (defs,m)) -> + | Some (ParsedScriptInteraction.Definitions (defs,m)) -> let isDefHash = function SynModuleDecl.HashDirective(_,_) -> true | _ -> false - let isBreakable def = + let isBreakable def = // only add automatic debugger breaks before 'let' or 'do' expressions with sequence points match def with - | SynModuleDecl.DoExpr (DebugPointForBinding.DebugPointAtBinding _, _, _) - | SynModuleDecl.Let (_, SynBinding.Binding(_, _, _, _, _, _, _, _,_,_,_, DebugPointForBinding.DebugPointAtBinding _) :: _, _) -> true + | SynModuleDecl.DoExpr (DebugPointAtBinding.Yes _, _, _) + | SynModuleDecl.Let (_, SynBinding(_, _, _, _, _, _, _, _,_,_,_, DebugPointAtBinding.Yes _) :: _, _) -> true | _ -> false let defsA = Seq.takeWhile (isDefHash >> not) defs |> Seq.toList let defsB = Seq.skipWhile (isDefHash >> not) defs |> Seq.toList @@ -2318,9 +2336,9 @@ type internal FsiInteractionProcessor | _ -> defsA, istate else defsA,istate - // When the last declaration has a shape of DoExp (i.e., non-binding), + // When the last declaration has a shape of DoExp (i.e., non-binding), // transform it to a shape of "let it = ", so we can refer it. - let defsA = + let defsA = if not (isNil defsB) then defsA else match defsA with | [] -> defsA @@ -2330,7 +2348,7 @@ type internal FsiInteractionProcessor | SynModuleDecl.DoExpr(_,exp,_) :: rest -> (rest |> List.rev) @ (fsiDynamicCompiler.BuildItBinding exp) | _ -> defsA - Some (IDefns(defsA,m)),Some (IDefns(defsB,m)),istate + Some (ParsedScriptInteraction.Definitions(defsA,m)),Some (ParsedScriptInteraction.Definitions(defsB,m)),istate match action, lastResult with | None, Some prev -> assert(nextAction.IsNone); istate, prev @@ -2350,15 +2368,15 @@ type internal FsiInteractionProcessor let istate, completed = execParsedInteractions (ctok, tcConfig, istate, action, errorLogger, lastResult, cancellationToken) match completed with | Completed _ -> - let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) + let istate = fsiDynamicCompiler.CommitDependencyManagerText(ctok, istate, lexResourceManager, errorLogger) istate, completed | _ -> istate, completed /// Execute a single parsed interaction on the parser/execute thread. - let mainThreadProcessAction ctok action istate = - try + let mainThreadProcessAction ctok action istate = + try let tcConfig = TcConfig.Create(tcConfigB,validate=false) - if progress then fprintfn fsiConsoleOutput.Out "In mainThreadProcessAction..."; + if progress then fprintfn fsiConsoleOutput.Out "In mainThreadProcessAction..."; fsiInterruptController.InterruptAllowed <- InterruptCanRaiseException; let res = action ctok tcConfig istate fsiInterruptController.ClearInterruptRequest() @@ -2376,7 +2394,7 @@ type internal FsiInteractionProcessor stopProcessingRecovery e range0; istate, CompletedWithReportedError e - let mainThreadProcessParsedInteractions ctok errorLogger (action, istate) cancellationToken = + let mainThreadProcessParsedInteractions ctok errorLogger (action, istate) cancellationToken = istate |> mainThreadProcessAction ctok (fun ctok tcConfig istate -> executeParsedInteractions (ctok, tcConfig, istate, action, errorLogger, None, cancellationToken)) @@ -2384,89 +2402,92 @@ type internal FsiInteractionProcessor reusingLexbufForParsing tokenizer.LexBuffer (fun () -> Parser.typedSeqExprEOF (fun _ -> tokenizer.GetToken()) tokenizer.LexBuffer) - let mainThreadProcessParsedExpression ctok errorLogger (expr, istate) = + let mainThreadProcessParsedExpression ctok errorLogger (expr, istate) = istate |> InteractiveCatch errorLogger (fun istate -> istate |> mainThreadProcessAction ctok (fun ctok _tcConfig istate -> - fsiDynamicCompiler.EvalParsedExpression(ctok, errorLogger, istate, expr) )) + fsiDynamicCompiler.EvalParsedExpression(ctok, errorLogger, istate, expr) )) let commitResult (istate, result) = match result with | FsiInteractionStepStatus.CtrlC -> Choice2Of2 (Some (OperationCanceledException() :> exn)) | FsiInteractionStepStatus.EndOfFile -> Choice2Of2 (Some (System.Exception "End of input")) - | FsiInteractionStepStatus.Completed res -> + | FsiInteractionStepStatus.Completed res -> setCurrState istate Choice1Of2 res - | FsiInteractionStepStatus.CompletedWithReportedError (StopProcessingExn userExnOpt) -> + | FsiInteractionStepStatus.CompletedWithReportedError (StopProcessingExn userExnOpt) -> Choice2Of2 userExnOpt | FsiInteractionStepStatus.CompletedWithReportedError _ - | FsiInteractionStepStatus.CompletedWithAlreadyReportedError -> + | FsiInteractionStepStatus.CompletedWithAlreadyReportedError -> Choice2Of2 None - /// Parse then process one parsed interaction. + /// Parse then process one parsed interaction. /// /// During normal execution, this initially runs on the parser - /// thread, then calls runCodeOnMainThread when it has completed + /// thread, then calls runCodeOnMainThread when it has completed /// parsing and needs to typecheck and execute a definition. This blocks the parser thread /// until execution has competed on the GUI thread. /// /// During processing of startup scripts, this runs on the main thread. /// /// This is blocking: it reads until one chunk of input have been received, unless IsPastEndOfStream is true - member __.ParseAndExecOneSetOfInteractionsFromLexbuf (runCodeOnMainThread, istate:FsiDynamicCompilerState, tokenizer:LexFilter.LexFilter, errorLogger, ?cancellationToken: CancellationToken) = + member _.ParseAndExecOneSetOfInteractionsFromLexbuf (runCodeOnMainThread, istate:FsiDynamicCompilerState, tokenizer:LexFilter.LexFilter, errorLogger, ?cancellationToken: CancellationToken) = let cancellationToken = defaultArg cancellationToken CancellationToken.None - if tokenizer.LexBuffer.IsPastEndOfStream then - let stepStatus = - if fsiInterruptController.FsiInterruptStdinState = StdinEOFPermittedBecauseCtrlCRecentlyPressed then - fsiInterruptController.FsiInterruptStdinState <- StdinNormal; + if tokenizer.LexBuffer.IsPastEndOfStream then + let stepStatus = + if fsiInterruptController.FsiInterruptStdinState = StdinEOFPermittedBecauseCtrlCRecentlyPressed then + fsiInterruptController.FsiInterruptStdinState <- StdinNormal; CtrlC - else + else EndOfFile istate,stepStatus - else + else fsiConsolePrompt.Print(); - istate |> InteractiveCatch errorLogger (fun istate -> + istate |> InteractiveCatch errorLogger (fun istate -> if progress then fprintfn fsiConsoleOutput.Out "entering ParseInteraction..."; - // Parse the interaction. When FSI.EXE is waiting for input from the console the - // parser thread is blocked somewhere deep this call. + // Parse the interaction. When FSI.EXE is waiting for input from the console the + // parser thread is blocked somewhere deep this call. let action = ParseInteraction tokenizer if progress then fprintfn fsiConsoleOutput.Out "returned from ParseInteraction...calling runCodeOnMainThread..."; - // After we've unblocked and got something to run we switch - // over to the run-thread (e.g. the GUI thread) + // After we've unblocked and got something to run we switch + // over to the run-thread (e.g. the GUI thread) let res = istate |> runCodeOnMainThread (fun ctok istate -> mainThreadProcessParsedInteractions ctok errorLogger (action, istate) cancellationToken) if progress then fprintfn fsiConsoleOutput.Out "Just called runCodeOnMainThread, res = %O..." res; res) - - member __.CurrentState = currState + + member _.CurrentState = currState /// Perform an "include" on a script file (i.e. a script file specified on the command line) member processor.EvalIncludedScript (ctok, istate, sourceFile, m, errorLogger) = let tcConfig = TcConfig.Create(tcConfigB, validate=false) // Resolve the filename to an absolute filename - let sourceFile = tcConfig.ResolveSourceFile(m, sourceFile, tcConfig.implicitIncludeDir) - // During the processing of the file, further filenames are + let sourceFile = tcConfig.ResolveSourceFile(m, sourceFile, tcConfig.implicitIncludeDir) + // During the processing of the file, further filenames are // resolved relative to the home directory of the loaded file. WithImplicitHome (tcConfigB, directoryName sourceFile) (fun () -> // An included script file may contain maybe several interaction blocks. // We repeatedly parse and process these, until an error occurs. - use reader = File.OpenReaderAndRetry (sourceFile, tcConfigB.inputCodePage, (*retryLocked*)false) + + use fileStream = FileSystem.OpenFileForReadShim(sourceFile) + use reader = fileStream.GetReader(tcConfigB.inputCodePage, false) + let tokenizer = fsiStdinLexerProvider.CreateIncludedScriptLexer (sourceFile, reader, errorLogger) let rec run istate = let istate,cont = processor.ParseAndExecOneSetOfInteractionsFromLexbuf ((fun f istate -> f ctok istate), istate, tokenizer, errorLogger) - match cont with Completed _ -> run istate | _ -> istate,cont + match cont with Completed _ -> run istate | _ -> istate,cont - let istate,cont = run istate + let istate,cont = run istate match cont with | Completed _ -> failwith "EvalIncludedScript: Completed expected to have relooped" | CompletedWithAlreadyReportedError -> istate,CompletedWithAlreadyReportedError | CompletedWithReportedError e -> istate,CompletedWithReportedError e - | EndOfFile -> istate,Completed None// here file-EOF is normal, continue required + | EndOfFile -> istate,Completed None// here file-EOF is normal, continue required | CtrlC -> istate,CtrlC ) @@ -2482,8 +2503,8 @@ type internal FsiInteractionProcessor | Completed _ -> processor.EvalIncludedScripts (ctok, istate, moreSourceFiles, errorLogger) | CompletedWithAlreadyReportedError -> istate // do not process any more files | CompletedWithReportedError _ -> istate // do not process any more files - | CtrlC -> istate // do not process any more files - | EndOfFile -> assert false; istate // This is unexpected. EndOfFile is replaced by Completed in the called function + | CtrlC -> istate // do not process any more files + | EndOfFile -> assert false; istate // This is unexpected. EndOfFile is replaced by Completed in the called function member processor.LoadInitialFiles (ctok, errorLogger) = @@ -2491,34 +2512,34 @@ type internal FsiInteractionProcessor let rec consume istate sourceFiles = match sourceFiles with | [] -> istate - | (_,isScript1) :: _ -> - let sourceFiles,rest = List.takeUntil (fun (_,isScript2) -> isScript1 <> isScript2) sourceFiles - let sourceFiles = List.map fst sourceFiles - let istate = - if isScript1 then + | (_,isScript1) :: _ -> + let sourceFiles,rest = List.takeUntil (fun (_,isScript2) -> isScript1 <> isScript2) sourceFiles + let sourceFiles = List.map fst sourceFiles + let istate = + if isScript1 then processor.EvalIncludedScripts (ctok, istate, sourceFiles, errorLogger) - else - istate |> InteractiveCatch errorLogger (fun istate -> fsiDynamicCompiler.EvalSourceFiles(ctok, istate, rangeStdin, sourceFiles, lexResourceManager, errorLogger), Completed None) |> fst - consume istate rest + else + istate |> InteractiveCatch errorLogger (fun istate -> fsiDynamicCompiler.EvalSourceFiles(ctok, istate, rangeStdin, sourceFiles, lexResourceManager, errorLogger), Completed None) |> fst + consume istate rest setCurrState (consume currState fsiOptions.SourceFiles) - if not (List.isEmpty fsiOptions.SourceFiles) then + if not (List.isEmpty fsiOptions.SourceFiles) then fsiConsolePrompt.PrintAhead(); // Seems required. I expected this could be deleted. Why not? - /// Send a dummy interaction through F# Interactive, to ensure all the most common code generation paths are + /// Send a dummy interaction through F# Interactive, to ensure all the most common code generation paths are /// JIT'ed and ready for use. - member __.LoadDummyInteraction(ctok, errorLogger) = + member _.LoadDummyInteraction(ctok, errorLogger) = setCurrState (currState |> InteractiveCatch errorLogger (fun istate -> fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, true, false, []) |> fst, Completed None) |> fst) - - member __.EvalInteraction(ctok, sourceText, scriptFileName, errorLogger, ?cancellationToken) = + + member _.EvalInteraction(ctok, sourceText, scriptFileName, errorLogger, ?cancellationToken) = let cancellationToken = defaultArg cancellationToken CancellationToken.None use _unwind1 = ErrorLogger.PushThreadBuildPhaseUntilUnwind(ErrorLogger.BuildPhase.Interactive) use _unwind2 = ErrorLogger.PushErrorLoggerPhaseUntilUnwind(fun _ -> errorLogger) use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID - let lexbuf = UnicodeLexing.StringAsLexbuf(isFeatureSupported, sourceText) + let lexbuf = UnicodeLexing.StringAsLexbuf(true, isFeatureSupported, sourceText) let tokenizer = fsiStdinLexerProvider.CreateBufferLexer(scriptFileName, lexbuf, errorLogger) - currState + currState |> InteractiveCatch errorLogger (fun istate -> let expr = ParseInteraction tokenizer mainThreadProcessParsedInteractions ctok errorLogger (expr, istate) cancellationToken) @@ -2529,81 +2550,81 @@ type internal FsiInteractionProcessor let sourceText = sprintf "#load @\"%s\" " scriptPath this.EvalInteraction (ctok, sourceText, scriptPath, errorLogger) - member __.EvalExpression (ctok, sourceText, scriptFileName, errorLogger) = + member _.EvalExpression (ctok, sourceText, scriptFileName, errorLogger) = use _unwind1 = ErrorLogger.PushThreadBuildPhaseUntilUnwind(ErrorLogger.BuildPhase.Interactive) use _unwind2 = ErrorLogger.PushErrorLoggerPhaseUntilUnwind(fun _ -> errorLogger) use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID - let lexbuf = UnicodeLexing.StringAsLexbuf(isFeatureSupported, sourceText) + let lexbuf = UnicodeLexing.StringAsLexbuf(true, isFeatureSupported, sourceText) let tokenizer = fsiStdinLexerProvider.CreateBufferLexer(scriptFileName, lexbuf, errorLogger) - currState + currState |> InteractiveCatch errorLogger (fun istate -> - let expr = parseExpression tokenizer + let expr = parseExpression tokenizer let m = expr.Range // Make this into "(); expr" to suppress generalization and compilation-as-function let exprWithSeq = SynExpr.Sequential (DebugPointAtSequential.ExprOnly, true, SynExpr.Const (SynConst.Unit,m.StartRange), expr, m) mainThreadProcessParsedExpression ctok errorLogger (exprWithSeq, istate)) |> commitResult - member __.AddBoundValue(ctok, errorLogger, name, value: obj) = - currState - |> InteractiveCatch errorLogger (fun istate -> + member _.AddBoundValue(ctok, errorLogger, name, value: obj) = + currState + |> InteractiveCatch errorLogger (fun istate -> fsiDynamicCompiler.AddBoundValue(ctok, errorLogger, istate, name, value)) |> commitResult - member __.PartialAssemblySignatureUpdated = event.Publish + member _.PartialAssemblySignatureUpdated = event.Publish /// Start the background thread used to read the input reader and/or console /// /// This is the main stdin loop, running on the stdinReaderThread. - /// + /// // We run the actual computations for each action on the main GUI thread by using - // mainForm.Invoke to pipe a message back through the form's main event loop. (The message + // mainForm.Invoke to pipe a message back through the form's main event loop. (The message // is a delegate to execute on the main Thread) // - member processor.StartStdinReadAndProcessThread (errorLogger) = + member processor.StartStdinReadAndProcessThread (errorLogger) = if progress then fprintfn fsiConsoleOutput.Out "creating stdinReaderThread"; - let stdinReaderThread = + let stdinReaderThread = new Thread(new ThreadStart(fun () -> InstallErrorLoggingOnThisThread errorLogger // FSI error logging on stdinReaderThread, e.g. parse errors. use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID - try - try + try + try let initialTokenizer = fsiStdinLexerProvider.CreateStdinLexer(errorLogger) if progress then fprintfn fsiConsoleOutput.Out "READER: stdin thread started..."; // Delay until we've peeked the input or read the entire first line fsiStdinLexerProvider.ConsoleInput.WaitForInitialConsoleInput() - + if progress then fprintfn fsiConsoleOutput.Out "READER: stdin thread got first line..."; - let runCodeOnMainThread = runCodeOnEventLoop errorLogger + let runCodeOnMainThread = runCodeOnEventLoop errorLogger // Keep going until EndOfFile on the inReader or console - let rec loop currTokenizer = + let rec loop currTokenizer = - let istateNew,contNew = - processor.ParseAndExecOneSetOfInteractionsFromLexbuf (runCodeOnMainThread, currState, currTokenizer, errorLogger) + let istateNew,contNew = + processor.ParseAndExecOneSetOfInteractionsFromLexbuf (runCodeOnMainThread, currState, currTokenizer, errorLogger) setCurrState istateNew - match contNew with + match contNew with | EndOfFile -> () | CtrlC -> loop (fsiStdinLexerProvider.CreateStdinLexer(errorLogger)) // After each interrupt, restart to a brand new tokenizer | CompletedWithAlreadyReportedError - | CompletedWithReportedError _ + | CompletedWithReportedError _ | Completed _ -> loop currTokenizer loop initialTokenizer - if progress then fprintfn fsiConsoleOutput.Out "- READER: Exiting stdinReaderThread"; + if progress then fprintfn fsiConsoleOutput.Out "- READER: Exiting stdinReaderThread"; with e -> stopProcessingRecovery e range0; - finally - if progress then fprintfn fsiConsoleOutput.Out "- READER: Exiting process because of failure/exit on stdinReaderThread"; + finally + if progress then fprintfn fsiConsoleOutput.Out "- READER: Exiting process because of failure/exit on stdinReaderThread"; // REVIEW: On some flavors of Mono, calling exit may freeze the process if we're using the WinForms event handler // Basically, on Mono 2.6.3, the GUI thread may be left dangling on exit. At that point: // -- System.Environment.Exit will cause the process to stop responding @@ -2611,7 +2632,7 @@ type internal FsiInteractionProcessor // -- Calling Abort() on the Main thread or the GUI thread will have no effect, and the process will remain unresponsive // Also, even the the GUI thread is up and running, the WinForms event loop will be listed as closed // In this case, killing the process is harmless, since we've already cleaned up after ourselves and FSI is responding - // to an error. (CTRL-C is handled elsewhere.) + // to an error. (CTRL-C is handled elsewhere.) // We'll only do this if we're running on Mono, "--gui" is specified and our input is piped in from stdin, so it's still // fairly constrained. #if FX_NO_WINFORMS @@ -2629,14 +2650,14 @@ type internal FsiInteractionProcessor if progress then fprintfn fsiConsoleOutput.Out "MAIN: starting stdin thread..." stdinReaderThread.Start() - member __.CompletionsForPartialLID (istate, prefix:string) = + member _.CompletionsForPartialLID (istate, prefix:string) = let lid,stem = if prefix.IndexOf(".",StringComparison.Ordinal) >= 0 then let parts = prefix.Split('.') let n = parts.Length Array.sub parts 0 (n-1) |> Array.toList,parts.[n-1] else - [],prefix + [],prefix let tcState = istate.tcState let amap = istate.tcImports.GetImportMap() @@ -2646,15 +2667,15 @@ type internal FsiInteractionProcessor let nenv = tcState.TcEnvFromImpls.NameEnv let nItems = NameResolution.ResolvePartialLongIdent ncenv nenv (ConstraintSolver.IsApplicableMethApprox istate.tcGlobals amap rangeStdin) rangeStdin ad lid false - let names = nItems |> List.map (fun d -> d.DisplayName) - let names = names |> List.filter (fun name -> name.StartsWithOrdinal(stem)) + let names = nItems |> List.map (fun d -> d.DisplayName) + let names = names |> List.filter (fun name -> name.StartsWithOrdinal(stem)) names - member __.ParseAndCheckInteraction (ctok, legacyReferenceResolver, checker, istate, text:string) = + member _.ParseAndCheckInteraction (legacyReferenceResolver, istate, text:string) = let tcConfig = TcConfig.Create(tcConfigB,validate=false) - let fsiInteractiveChecker = FsiInteractiveChecker(legacyReferenceResolver, checker, tcConfig, istate.tcGlobals, istate.tcImports, istate.tcState) - fsiInteractiveChecker.ParseAndCheckInteraction(ctok, SourceText.ofString text) + let fsiInteractiveChecker = FsiInteractiveChecker(legacyReferenceResolver, tcConfig, istate.tcGlobals, istate.tcImports, istate.tcState) + fsiInteractiveChecker.ParseAndCheckInteraction(SourceText.ofString text) //---------------------------------------------------------------------------- @@ -2666,10 +2687,10 @@ let internal SpawnThread name f = th.IsBackground <- true; th.Start() -let internal SpawnInteractiveServer +let internal SpawnInteractiveServer (fsi: FsiEvaluationSessionHostConfig, - fsiOptions : FsiCommandLineOptions, - fsiConsoleOutput: FsiConsoleOutput) = + fsiOptions : FsiCommandLineOptions, + fsiConsoleOutput: FsiConsoleOutput) = //printf "Spawning fsi server on channel '%s'" !fsiServerName; SpawnThread "ServerThread" (fun () -> use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID @@ -2681,41 +2702,41 @@ let internal SpawnInteractiveServer /// Repeatedly drive the event loop (e.g. Application.Run()) but catching ThreadAbortException and re-running. /// /// This gives us a last chance to catch an abort on the main execution thread. -let internal DriveFsiEventLoop (fsi: FsiEvaluationSessionHostConfig, fsiConsoleOutput: FsiConsoleOutput) = - let rec runLoop() = +let internal DriveFsiEventLoop (fsi: FsiEvaluationSessionHostConfig, fsiConsoleOutput: FsiConsoleOutput) = + let rec runLoop() = if progress then fprintfn fsiConsoleOutput.Out "GUI thread runLoop"; - let restart = - try + let restart = + try // BLOCKING POINT: The GUI Thread spends most (all) of its time this event loop if progress then fprintfn fsiConsoleOutput.Out "MAIN: entering event loop..."; fsi.EventLoopRun() with | :? ThreadAbortException -> // If this TAE handler kicks it's almost certainly too late to save the - // state of the process - the state of the message loop may have been corrupted - fsiConsoleOutput.uprintnfn "%s" (FSIstrings.SR.fsiUnexpectedThreadAbortException()); + // state of the process - the state of the message loop may have been corrupted + fsiConsoleOutput.uprintnfn "%s" (FSIstrings.SR.fsiUnexpectedThreadAbortException()); (try Thread.ResetAbort() with _ -> ()); true // Try again, just case we can restart - | e -> + | e -> stopProcessingRecovery e range0; true // Try again, just case we can restart if progress then fprintfn fsiConsoleOutput.Out "MAIN: exited event loop..."; - if restart then runLoop() + if restart then runLoop() runLoop(); /// Thrown when there was an error compiling the given code in FSI. -type FsiCompilationException(message: string, errorInfos: FSharpErrorInfo[] option) = +type FsiCompilationException(message: string, errorInfos: FSharpDiagnostic[] option) = inherit System.Exception(message) - member __.ErrorInfos = errorInfos + member _.ErrorInfos = errorInfos /// The primary type, representing a full F# Interactive session, reading from the given /// text input, writing to the given text output and error writers. -type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], inReader:TextReader, outWriter:TextWriter, errorWriter: TextWriter, fsiCollectible: bool, legacyReferenceResolver: ReferenceResolver.Resolver option) = +type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], inReader:TextReader, outWriter:TextWriter, errorWriter: TextWriter, fsiCollectible: bool, legacyReferenceResolver: LegacyReferenceResolver option) = - do if not runningOnMono then Lib.UnmanagedProcessExecutionOptions.EnableHeapTerminationOnCorruption() (* SDL recommendation *) + do if not runningOnMono then UnmanagedProcessExecutionOptions.EnableHeapTerminationOnCorruption() (* SDL recommendation *) // Explanation: When FsiEvaluationSession.Create is called we do a bunch of processing. For fsi.exe // and fsiAnyCpu.exe there are no other active threads at this point, so we can assume this is the @@ -2733,8 +2754,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i // Testing shows "console coloring" is broken on some Mono configurations (e.g. Mono 2.4 Suse LiveCD). // To support fsi usage, the console coloring is switched off by default on Mono. - do if runningOnMono then enableConsoleColoring <- false - + do if runningOnMono then enableConsoleColoring <- false //---------------------------------------------------------------------------- // tcConfig - build the initial config @@ -2745,35 +2765,37 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i let defaultFSharpBinariesDir = FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(FSharpEnvironment.tryCurrentDomain()).Value - let legacyReferenceResolver = - match legacyReferenceResolver with + let legacyReferenceResolver = + match legacyReferenceResolver with | None -> SimulatedMSBuildReferenceResolver.getResolver() | Some rr -> rr let tcConfigB = - TcConfigBuilder.CreateNew(legacyReferenceResolver, - defaultFSharpBinariesDir=defaultFSharpBinariesDir, - reduceMemoryUsage=ReduceMemoryFlag.Yes, - implicitIncludeDir=currentDirectory, - isInteractive=true, - isInvalidationSupported=false, - defaultCopyFSharpCore=CopyFSharpCoreFlag.No, - tryGetMetadataSnapshot=tryGetMetadataSnapshot) + TcConfigBuilder.CreateNew(legacyReferenceResolver, + defaultFSharpBinariesDir=defaultFSharpBinariesDir, + reduceMemoryUsage=ReduceMemoryFlag.Yes, + implicitIncludeDir=currentDirectory, + isInteractive=true, + isInvalidationSupported=false, + defaultCopyFSharpCore=CopyFSharpCoreFlag.No, + tryGetMetadataSnapshot=tryGetMetadataSnapshot, + sdkDirOverride=None, + rangeForErrors=range0) let tcConfigP = TcConfigProvider.BasedOnMutableBuilder(tcConfigB) - do tcConfigB.resolutionEnvironment <- ResolutionEnvironment.CompilationAndEvaluation // See Bug 3608 + do tcConfigB.resolutionEnvironment <- LegacyResolutionEnvironment.CompilationAndEvaluation // See Bug 3608 do tcConfigB.useFsiAuxLib <- fsi.UseFsiAuxLib #if NETSTANDARD - do tcConfigB.useSdkRefs <- true + do tcConfigB.SetUseSdkRefs true do tcConfigB.useSimpleResolution <- true - do SetTargetProfile tcConfigB "netcore" // always assume System.Runtime codegen + do if FSharpEnvironment.isRunningOnCoreClr then SetTargetProfile tcConfigB "netcore" // always assume System.Runtime codegen #endif // Preset: --optimize+ -g --tailcalls+ (see 4505) do SetOptimizeSwitch tcConfigB OptionSwitch.On do SetDebugSwitch tcConfigB (Some "pdbonly") OptionSwitch.On - do SetTailcallSwitch tcConfigB OptionSwitch.On + do SetTailcallSwitch tcConfigB OptionSwitch.On #if NETSTANDARD // set platform depending on whether the current process is a 64-bit process. @@ -2790,11 +2812,21 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i let updateBannerText() = tcConfigB.productNameForBannerText <- FSIstrings.SR.fsiProductName(FSharpEnvironment.FSharpBannerVersion) - + do updateBannerText() // setting the correct banner so that 'fsi -?' display the right thing let fsiOptions = FsiCommandLineOptions(fsi, argv, tcConfigB, fsiConsoleOutput) + do + match fsiOptions.WriteReferencesAndExit with + | Some outFile -> + let tcConfig = tcConfigP.Get(ctokStartup) + let references, _unresolvedReferences = TcAssemblyResolutions.GetAssemblyResolutionInformation(tcConfig) + let lines = [ for r in references -> r.resolvedPath ] + FileSystem.OpenFileForWriteShim(outFile).WriteAllLines(lines) + exit 0 + | _ -> () + let fsiConsolePrompt = FsiConsolePrompt(fsiOptions, fsiConsoleOutput) do @@ -2808,42 +2840,44 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i with e -> warning(e) - do + do updateBannerText() // resetting banner text after parsing options - if tcConfigB.showBanner then + if tcConfigB.showBanner then fsiOptions.ShowBanner() do fsiConsoleOutput.uprintfn "" - // When no source files to load, print ahead prompt here - do if List.isEmpty fsiOptions.SourceFiles then - fsiConsolePrompt.PrintAhead() + // When no source files to load, print ahead prompt here + do if List.isEmpty fsiOptions.SourceFiles then + fsiConsolePrompt.PrintAhead() let fsiConsoleInput = FsiConsoleInput(fsi, fsiOptions, inReader, outWriter) /// The single, global interactive checker that can be safely used in conjunction with other operations - /// on the FsiEvaluationSession. + /// on the FsiEvaluationSession. let checker = FSharpChecker.Create(legacyReferenceResolver=legacyReferenceResolver) - let (tcGlobals,frameworkTcImports,nonFrameworkResolutions,unresolvedReferences) = - try + let (tcGlobals,frameworkTcImports,nonFrameworkResolutions,unresolvedReferences) = + try let tcConfig = tcConfigP.Get(ctokStartup) - checker.FrameworkImportsCache.Get (ctokStartup, tcConfig) |> Cancellable.runWithoutCancellation - with e -> + checker.FrameworkImportsCache.Get (tcConfig) + |> NodeCode.RunImmediateWithoutCancellation + with e -> stopProcessingRecovery e range0; failwithf "Error creating evaluation session: %A" e - let tcImports = - try - TcImports.BuildNonFrameworkTcImports(ctokStartup, tcConfigP, tcGlobals, frameworkTcImports, nonFrameworkResolutions, unresolvedReferences, fsiOptions.DependencyProvider) |> Cancellable.runWithoutCancellation - with e -> + let tcImports = + try + TcImports.BuildNonFrameworkTcImports(tcConfigP, frameworkTcImports, nonFrameworkResolutions, unresolvedReferences, fsiOptions.DependencyProvider) + |> NodeCode.RunImmediateWithoutCancellation + with e -> stopProcessingRecovery e range0; failwithf "Error creating evaluation session: %A" e - let niceNameGen = NiceNameGenerator() + let niceNameGen = NiceNameGenerator() // Share intern'd strings across all lexing/parsing - let lexResourceManager = new Lexhelp.LexResourceManager() + let lexResourceManager = new Lexhelp.LexResourceManager() /// The lock stops the type checker running at the same time as the server intellisense implementation. let tcLockObject = box 7 // any new object will do @@ -2855,9 +2889,9 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i #if !NO_EXTENSIONTYPING match tcImports.TryFindProviderGeneratedAssemblyByName (ctok, aref.Name) with | Some assembly -> Some (Choice2Of2 assembly) - | None -> + | None -> #endif - match tcImports.TryFindExistingFullyQualifiedPathByExactAssemblyRef (ctok, aref) with + match tcImports.TryFindExistingFullyQualifiedPathByExactAssemblyRef (aref) with | Some resolvedPath -> Some (Choice1Of2 resolvedPath) | None -> None @@ -2872,7 +2906,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i let fsiStdinLexerProvider = FsiStdinLexerProvider(tcConfigB, fsiStdinSyphon, fsiConsoleInput, fsiConsoleOutput, fsiOptions, lexResourceManager) - let fsiInteractionProcessor = FsiInteractionProcessor(fsi, tcConfigB, fsiOptions, fsiDynamicCompiler, fsiConsolePrompt, fsiConsoleOutput, fsiInterruptController, fsiStdinLexerProvider, lexResourceManager, initialInteractiveState) + let fsiInteractionProcessor = FsiInteractionProcessor(fsi, tcConfigB, fsiOptions, fsiDynamicCompiler, fsiConsolePrompt, fsiConsoleOutput, fsiInterruptController, fsiStdinLexerProvider, lexResourceManager, initialInteractiveState) // Raising an exception throws away the exception stack making diagnosis hard // this wraps the existing exception as the inner exception @@ -2888,8 +2922,8 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i | Choice2Of2 (Some userExn) -> raise (makeNestedException userExn) let commitResultNonThrowing errorOptions scriptFile (errorLogger: CompilationErrorLogger) res = - let errs = errorLogger.GetErrors() - let errorInfos = ErrorHelpers.CreateErrorInfos (errorOptions, true, scriptFile, errs, true) + let errs = errorLogger.GetDiagnostics() + let errorInfos = DiagnosticHelpers.CreateDiagnostics (errorOptions, true, scriptFile, errs, true) let userRes = match res with | Choice1Of2 r -> Choice1Of2 r @@ -2901,8 +2935,8 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i let dummyScriptFileName = "input.fsx" - interface IDisposable with - member x.Dispose() = + interface IDisposable with + member x.Dispose() = (tcImports :> IDisposable).Dispose() uninstallMagicAssemblyResolution.Dispose() @@ -2911,22 +2945,23 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i member x.Interrupt() = fsiInterruptController.Interrupt() /// A host calls this to get the completions for a long identifier, e.g. in the console - member x.GetCompletions(longIdent) = + member x.GetCompletions(longIdent) = fsiInteractionProcessor.CompletionsForPartialLID (fsiInteractionProcessor.CurrentState, longIdent) |> Seq.ofList - member x.ParseAndCheckInteraction(code) = - let ctok = AssumeCompilationThreadWithoutEvidence () - fsiInteractionProcessor.ParseAndCheckInteraction (ctok, legacyReferenceResolver, checker.ReactorOps, fsiInteractionProcessor.CurrentState, code) + member x.ParseAndCheckInteraction(code) = + fsiInteractionProcessor.ParseAndCheckInteraction (legacyReferenceResolver, fsiInteractionProcessor.CurrentState, code) + |> Cancellable.runWithoutCancellation member x.InteractiveChecker = checker - member x.CurrentPartialAssemblySignature = - fsiDynamicCompiler.CurrentPartialAssemblySignature (fsiInteractionProcessor.CurrentState) + member x.CurrentPartialAssemblySignature = + fsiDynamicCompiler.CurrentPartialAssemblySignature (fsiInteractionProcessor.CurrentState) - member x.DynamicAssembly = + member x.DynamicAssembly = fsiDynamicCompiler.DynamicAssembly + /// A host calls this to determine if the --gui parameter is active - member x.IsGui = fsiOptions.Gui + member x.IsGui = fsiOptions.Gui /// A host calls this to get the active language ID if provided by fsi-server-lcid member x.LCID = fsiOptions.FsiLCID @@ -2937,16 +2972,16 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i /// A host calls this to report an unhandled exception in a standard way, e.g. an exception on the GUI thread gets printed to stderr member x.ReportUnhandledException exn = x.ReportUnhandledExceptionSafe true exn - member x.ReportUnhandledExceptionSafe isFromThreadException (exn:exn) = + member x.ReportUnhandledExceptionSafe isFromThreadException (exn:exn) = fsi.EventLoopInvoke ( - fun () -> + fun () -> fprintfn fsiConsoleOutput.Error "%s" (exn.ToString()) errorLogger.SetError() - try - errorLogger.AbortOnError(fsiConsoleOutput) + try + errorLogger.AbortOnError(fsiConsoleOutput) with StopProcessing -> // BUG 664864 some window that use System.Windows.Forms.DataVisualization types (possible FSCharts) was created in FSI. - // at some moment one chart has raised InvalidArgumentException from OnPaint, this exception was intercepted by the code in higher layer and + // at some moment one chart has raised InvalidArgumentException from OnPaint, this exception was intercepted by the code in higher layer and // passed to Application.OnThreadException. FSI has already attached its own ThreadException handler, inside it will log the original error // and then raise StopProcessing exception to unwind the stack (and possibly shut down current Application) and get to DriveFsiEventLoop. // DriveFsiEventLoop handles StopProcessing by suppressing it and restarting event loop from the beginning. @@ -2954,21 +2989,21 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i // http://msdn.microsoft.com/en-us/library/windows/desktop/ms633573(v=vs.85).aspx // Remarks: - // If your application runs on a 32-bit version of Windows operating system, uncaught exceptions from the callback - // will be passed onto higher-level exception handlers of your application when available. - // The system then calls the unhandled exception filter to handle the exception prior to terminating the process. + // If your application runs on a 32-bit version of Windows operating system, uncaught exceptions from the callback + // will be passed onto higher-level exception handlers of your application when available. + // The system then calls the unhandled exception filter to handle the exception prior to terminating the process. // If the PCA is enabled, it will offer to fix the problem the next time you run the application. - // However, if your application runs on a 64-bit version of Windows operating system or WOW64, - // you should be aware that a 64-bit operating system handles uncaught exceptions differently based on its 64-bit processor architecture, - // exception architecture, and calling convention. + // However, if your application runs on a 64-bit version of Windows operating system or WOW64, + // you should be aware that a 64-bit operating system handles uncaught exceptions differently based on its 64-bit processor architecture, + // exception architecture, and calling convention. // The following table summarizes all possible ways that a 64-bit Windows operating system or WOW64 handles uncaught exceptions. // 1. The system suppresses any uncaught exceptions. - // 2. The system first terminates the process, and then the Program Compatibility Assistant (PCA) offers to fix it the next time + // 2. The system first terminates the process, and then the Program Compatibility Assistant (PCA) offers to fix it the next time // you run the application. You can disable the PCA mitigation by adding a Compatibility section to the application manifest. - // 3. The system calls the exception filters but suppresses any uncaught exceptions when it leaves the callback scope, + // 3. The system calls the exception filters but suppresses any uncaught exceptions when it leaves the callback scope, // without invoking the associated handlers. // Behavior type 2 only applies to the 64-bit version of the Windows 7 operating system. - + // NOTE: tests on Win8 box showed that 64 bit version of the Windows 8 always apply type 2 behavior // Effectively this means that when StopProcessing exception is raised from ThreadException callback - it won't be intercepted in DriveFsiEventLoop. @@ -2977,7 +3012,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i // FIX: detect if current process in 64 bit running on Windows 7 or Windows 8 and if yes - swallow the StopProcessing and ScheduleRestart instead. // Visible behavior should not be different, previously exception unwinds the stack and aborts currently running Application. // After that it will be intercepted and suppressed in DriveFsiEventLoop. - // Now we explicitly shut down Application so after execution of callback will be completed the control flow + // Now we explicitly shut down Application so after execution of callback will be completed the control flow // will also go out of WinFormsEventLoop.Run and again get to DriveFsiEventLoop => restart the loop. I'd like the fix to be as conservative as possible // so we use special case for problematic case instead of just always scheduling restart. @@ -3002,12 +3037,12 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i member x.PartialAssemblySignatureUpdated = fsiInteractionProcessor.PartialAssemblySignatureUpdated - member x.FormatValue(reflectionValue:obj, reflectionType) = + member x.FormatValue(reflectionValue:obj, reflectionType) = fsiDynamicCompiler.FormatValue(reflectionValue, reflectionType) member x.EvalExpression(code) = - // Explanation: When the user of the FsiInteractiveSession object calls this method, the + // Explanation: When the user of the FsiInteractiveSession object calls this method, the // code is parsed, checked and evaluated on the calling thread. This means EvalExpression // is not safe to call concurrently. let ctok = AssumeCompilationThreadWithoutEvidence() @@ -3016,7 +3051,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i |> commitResult member x.EvalExpressionNonThrowing(code) = - // Explanation: When the user of the FsiInteractiveSession object calls this method, the + // Explanation: When the user of the FsiInteractiveSession object calls this method, the // code is parsed, checked and evaluated on the calling thread. This means EvalExpression // is not safe to call concurrently. let ctok = AssumeCompilationThreadWithoutEvidence() @@ -3027,7 +3062,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i |> commitResultNonThrowing errorOptions dummyScriptFileName errorLogger member x.EvalInteraction(code, ?cancellationToken) : unit = - // Explanation: When the user of the FsiInteractiveSession object calls this method, the + // Explanation: When the user of the FsiInteractiveSession object calls this method, the // code is parsed, checked and evaluated on the calling thread. This means EvalExpression // is not safe to call concurrently. let ctok = AssumeCompilationThreadWithoutEvidence() @@ -3037,7 +3072,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i |> ignore member x.EvalInteractionNonThrowing(code, ?cancellationToken) = - // Explanation: When the user of the FsiInteractiveSession object calls this method, the + // Explanation: When the user of the FsiInteractiveSession object calls this method, the // code is parsed, checked and evaluated on the calling thread. This means EvalExpression // is not safe to call concurrently. let ctok = AssumeCompilationThreadWithoutEvidence() @@ -3049,7 +3084,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i |> commitResultNonThrowing errorOptions "input.fsx" errorLogger member x.EvalScript(filePath) : unit = - // Explanation: When the user of the FsiInteractiveSession object calls this method, the + // Explanation: When the user of the FsiInteractiveSession object calls this method, the // code is parsed, checked and evaluated on the calling thread. This means EvalExpression // is not safe to call concurrently. let ctok = AssumeCompilationThreadWithoutEvidence() @@ -3059,7 +3094,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i |> ignore member x.EvalScriptNonThrowing(filePath) = - // Explanation: When the user of the FsiInteractiveSession object calls this method, the + // Explanation: When the user of the FsiInteractiveSession object calls this method, the // code is parsed, checked and evaluated on the calling thread. This means EvalExpression // is not safe to call concurrently. let ctok = AssumeCompilationThreadWithoutEvidence() @@ -3071,16 +3106,16 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i |> function Choice1Of2 (_), errs -> Choice1Of2 (), errs | Choice2Of2 exn, errs -> Choice2Of2 exn, errs /// Event fires when a root-level value is bound to an identifier, e.g., via `let x = ...`. - member __.ValueBound = fsiDynamicCompiler.ValueBound + member _.ValueBound = fsiDynamicCompiler.ValueBound - member __.GetBoundValues() = + member _.GetBoundValues() = fsiDynamicCompiler.GetBoundValues fsiInteractionProcessor.CurrentState - member __.TryFindBoundValue(name: string) = + member _.TryFindBoundValue(name: string) = fsiDynamicCompiler.TryFindBoundValue(fsiInteractionProcessor.CurrentState, name) - member __.AddBoundValue(name: string, value: obj) = - // Explanation: When the user of the FsiInteractiveSession object calls this method, the + member _.AddBoundValue(name: string, value: obj) = + // Explanation: When the user of the FsiInteractiveSession object calls this method, the // code is parsed, checked and evaluated on the calling thread. This means EvalExpression // is not safe to call concurrently. let ctok = AssumeCompilationThreadWithoutEvidence() @@ -3097,15 +3132,15 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i /// - Sit in the GUI event loop indefinitely, if needed /// /// This method only returns after "exit". The method repeatedly calls the event loop and - /// the thread may be subject to Thread.Abort() signals if Interrupt() is used, giving rise + /// the thread may be subject to Thread.Abort() signals if Interrupt() is used, giving rise /// to internal ThreadAbortExceptions. /// /// A background thread is started by this thread to read from the inReader and/or console reader. [] - member x.Run() = + member x.Run() = progress <- condition "FSHARP_INTERACTIVE_PROGRESS" - + // Explanation: When Run is called we do a bunch of processing. For fsi.exe // and fsiAnyCpu.exe there are no other active threads at this point, so we can assume this is the // unique compilation thread. For other users of FsiEvaluationSession it is reasonable to assume that @@ -3114,16 +3149,16 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i // We later switch to doing interaction-by-interaction processing on the "event loop" thread let ctokRun = AssumeCompilationThreadWithoutEvidence () - if not runningOnMono && fsiOptions.IsInteractiveServer then + if not runningOnMono && fsiOptions.IsInteractiveServer then SpawnInteractiveServer (fsi, fsiOptions, fsiConsoleOutput) use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Interactive - if fsiOptions.Interact then - // page in the type check env + if fsiOptions.Interact then + // page in the type check env fsiInteractionProcessor.LoadDummyInteraction(ctokStartup, errorLogger) if progress then fprintfn fsiConsoleOutput.Out "MAIN: InstallKillThread!"; - + // Compute how long to pause before a ThreadAbort is actually executed. // A somewhat arbitrary choice. let pauseMilliseconds = (if fsiOptions.Gui then 400 else 100) @@ -3134,15 +3169,15 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i #if !FX_NO_APP_DOMAINS // Route background exceptions to the exception handlers - AppDomain.CurrentDomain.UnhandledException.Add (fun args -> - match args.ExceptionObject with - | :? System.Exception as err -> x.ReportUnhandledExceptionSafe false err + AppDomain.CurrentDomain.UnhandledException.Add (fun args -> + match args.ExceptionObject with + | :? System.Exception as err -> x.ReportUnhandledExceptionSafe false err | _ -> ()) #endif fsiInteractionProcessor.LoadInitialFiles(ctokRun, errorLogger) - fsiInteractionProcessor.StartStdinReadAndProcessThread(errorLogger) + fsiInteractionProcessor.StartStdinReadAndProcessThread(errorLogger) DriveFsiEventLoop (fsi, fsiConsoleOutput ) @@ -3157,7 +3192,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i // to be explicitly kept alive. GC.KeepAlive fsiInterruptController.EventHandlers - static member Create(fsiConfig, argv, inReader, outWriter, errorWriter, ?collectible, ?legacyReferenceResolver) = + static member Create(fsiConfig, argv, inReader, outWriter, errorWriter, ?collectible, ?legacyReferenceResolver) = new FsiEvaluationSession(fsiConfig, argv, inReader, outWriter, errorWriter, defaultArg collectible false, legacyReferenceResolver) static member GetDefaultConfiguration(fsiObj:obj) = FsiEvaluationSession.GetDefaultConfiguration(fsiObj, true) @@ -3166,40 +3201,40 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i // We want to avoid modifying FSharp.Compiler.Interactive.Settings to avoid republishing that DLL. // So we access these via reflection { // Connect the configuration through to the 'fsi' object from FSharp.Compiler.Interactive.Settings - new FsiEvaluationSessionHostConfig () with - member __.FormatProvider = getInstanceProperty fsiObj "FormatProvider" - member __.FloatingPointFormat = getInstanceProperty fsiObj "FloatingPointFormat" - member __.AddedPrinters = getInstanceProperty fsiObj "AddedPrinters" - member __.ShowDeclarationValues = getInstanceProperty fsiObj "ShowDeclarationValues" - member __.ShowIEnumerable = getInstanceProperty fsiObj "ShowIEnumerable" - member __.ShowProperties = getInstanceProperty fsiObj "ShowProperties" - member __.PrintSize = getInstanceProperty fsiObj "PrintSize" - member __.PrintDepth = getInstanceProperty fsiObj "PrintDepth" - member __.PrintWidth = getInstanceProperty fsiObj "PrintWidth" - member __.PrintLength = getInstanceProperty fsiObj "PrintLength" - member __.ReportUserCommandLineArgs args = setInstanceProperty fsiObj "CommandLineArgs" args - member __.StartServer(fsiServerName) = failwith "--fsi-server not implemented in the default configuration" - member __.EventLoopRun() = callInstanceMethod0 (getInstanceProperty fsiObj "EventLoop") [||] "Run" - member __.EventLoopInvoke(f : unit -> 'T) = callInstanceMethod1 (getInstanceProperty fsiObj "EventLoop") [|typeof<'T>|] "Invoke" f - member __.EventLoopScheduleRestart() = callInstanceMethod0 (getInstanceProperty fsiObj "EventLoop") [||] "ScheduleRestart" - member __.UseFsiAuxLib = useFsiAuxLib - member __.GetOptionalConsoleReadLine(_probe) = None } + new FsiEvaluationSessionHostConfig () with + member _.FormatProvider = getInstanceProperty fsiObj "FormatProvider" + member _.FloatingPointFormat = getInstanceProperty fsiObj "FloatingPointFormat" + member _.AddedPrinters = getInstanceProperty fsiObj "AddedPrinters" + member _.ShowDeclarationValues = getInstanceProperty fsiObj "ShowDeclarationValues" + member _.ShowIEnumerable = getInstanceProperty fsiObj "ShowIEnumerable" + member _.ShowProperties = getInstanceProperty fsiObj "ShowProperties" + member _.PrintSize = getInstanceProperty fsiObj "PrintSize" + member _.PrintDepth = getInstanceProperty fsiObj "PrintDepth" + member _.PrintWidth = getInstanceProperty fsiObj "PrintWidth" + member _.PrintLength = getInstanceProperty fsiObj "PrintLength" + member _.ReportUserCommandLineArgs args = setInstanceProperty fsiObj "CommandLineArgs" args + member _.StartServer(fsiServerName) = failwith "--fsi-server not implemented in the default configuration" + member _.EventLoopRun() = callInstanceMethod0 (getInstanceProperty fsiObj "EventLoop") [||] "Run" + member _.EventLoopInvoke(f : unit -> 'T) = callInstanceMethod1 (getInstanceProperty fsiObj "EventLoop") [|typeof<'T>|] "Invoke" f + member _.EventLoopScheduleRestart() = callInstanceMethod0 (getInstanceProperty fsiObj "EventLoop") [||] "ScheduleRestart" + member _.UseFsiAuxLib = useFsiAuxLib + member _.GetOptionalConsoleReadLine(_probe) = None } //------------------------------------------------------------------------------- // If no "fsi" object for the configuration is specified, make the default -// configuration one which stores the settings in-process +// configuration one which stores the settings in-process -module Settings = +module Settings = type IEventLoop = abstract Run : unit -> bool - abstract Invoke : (unit -> 'T) -> 'T + abstract Invoke : (unit -> 'T) -> 'T abstract ScheduleRestart : unit -> unit - // fsi.fs in FSHarp.Compiler.Service.dll avoids a hard dependency on FSharp.Compiler.Interactive.Settings.dll + // fsi.fs in FSHarp.Compiler.Service.dll avoids a hard dependency on FSharp.Compiler.Interactive.Settings.dll // by providing an optional reimplementation of the functionality // An implementation of IEventLoop suitable for the command-line console [] - type internal SimpleEventLoop() = + type internal SimpleEventLoop() = let runSignal = new AutoResetEvent(false) let exitSignal = new AutoResetEvent(false) let doneSignal = new AutoResetEvent(false) @@ -3207,34 +3242,34 @@ module Settings = let mutable result = (None : obj option) let setSignal(signal : AutoResetEvent) = while not (signal.Set()) do Thread.Sleep(1); done let waitSignal signal = WaitHandle.WaitAll([| (signal :> WaitHandle) |]) |> ignore - let waitSignal2 signal1 signal2 = + let waitSignal2 signal1 signal2 = WaitHandle.WaitAny([| (signal1 :> WaitHandle); (signal2 :> WaitHandle) |]) let mutable running = false let mutable restart = false - interface IEventLoop with - member x.Run() = + interface IEventLoop with + member x.Run() = running <- true - let rec run() = - match waitSignal2 runSignal exitSignal with - | 0 -> - queue |> List.iter (fun f -> result <- try Some(f()) with _ -> None); + let rec run() = + match waitSignal2 runSignal exitSignal with + | 0 -> + queue |> List.iter (fun f -> result <- try Some(f()) with _ -> None); setSignal doneSignal run() - | 1 -> + | 1 -> running <- false; restart | _ -> run() run(); - member x.Invoke(f : unit -> 'T) : 'T = + member x.Invoke(f : unit -> 'T) : 'T = queue <- [f >> box] setSignal runSignal waitSignal doneSignal result.Value |> unbox - member x.ScheduleRestart() = - if running then + member x.ScheduleRestart() = + if running then restart <- true setSignal exitSignal - interface System.IDisposable with + interface System.IDisposable with member x.Dispose() = runSignal.Dispose() exitSignal.Dispose() @@ -3242,7 +3277,7 @@ module Settings = [] - type InteractiveSettings() = + type InteractiveSettings() = let mutable evLoop = (new SimpleEventLoop() :> IEventLoop) let mutable showIDictionary = true let mutable showDeclarationValues = true @@ -3257,72 +3292,72 @@ module Settings = let mutable showProperties = true let mutable addedPrinters = [] - member __.FloatingPointFormat with get() = fpfmt and set v = fpfmt <- v - member __.FormatProvider with get() = fp and set v = fp <- v - member __.PrintWidth with get() = printWidth and set v = printWidth <- v - member __.PrintDepth with get() = printDepth and set v = printDepth <- v - member __.PrintLength with get() = printLength and set v = printLength <- v - member __.PrintSize with get() = printSize and set v = printSize <- v - member __.ShowDeclarationValues with get() = showDeclarationValues and set v = showDeclarationValues <- v - member __.ShowProperties with get() = showProperties and set v = showProperties <- v - member __.ShowIEnumerable with get() = showIEnumerable and set v = showIEnumerable <- v - member __.ShowIDictionary with get() = showIDictionary and set v = showIDictionary <- v - member __.AddedPrinters with get() = addedPrinters and set v = addedPrinters <- v - member __.CommandLineArgs with get() = args and set v = args <- v - member __.AddPrinter(printer : 'T -> string) = + member _.FloatingPointFormat with get() = fpfmt and set v = fpfmt <- v + member _.FormatProvider with get() = fp and set v = fp <- v + member _.PrintWidth with get() = printWidth and set v = printWidth <- v + member _.PrintDepth with get() = printDepth and set v = printDepth <- v + member _.PrintLength with get() = printLength and set v = printLength <- v + member _.PrintSize with get() = printSize and set v = printSize <- v + member _.ShowDeclarationValues with get() = showDeclarationValues and set v = showDeclarationValues <- v + member _.ShowProperties with get() = showProperties and set v = showProperties <- v + member _.ShowIEnumerable with get() = showIEnumerable and set v = showIEnumerable <- v + member _.ShowIDictionary with get() = showIDictionary and set v = showIDictionary <- v + member _.AddedPrinters with get() = addedPrinters and set v = addedPrinters <- v + member _.CommandLineArgs with get() = args and set v = args <- v + member _.AddPrinter(printer : 'T -> string) = addedPrinters <- Choice1Of2 (typeof<'T>, (fun (x:obj) -> printer (unbox x))) :: addedPrinters - member __.EventLoop + member _.EventLoop with get () = evLoop and set (x:IEventLoop) = evLoop.ScheduleRestart(); evLoop <- x - member __.AddPrintTransformer(printer : 'T -> obj) = + member _.AddPrintTransformer(printer : 'T -> obj) = addedPrinters <- Choice2Of2 (typeof<'T>, (fun (x:obj) -> printer (unbox x))) :: addedPrinters - + let fsi = InteractiveSettings() -type FsiEvaluationSession with - static member GetDefaultConfiguration() = +type FsiEvaluationSession with + static member GetDefaultConfiguration() = FsiEvaluationSession.GetDefaultConfiguration(Settings.fsi, false) /// Defines a read-only input stream used to feed content to the hosted F# Interactive dynamic compiler. [] -type CompilerInputStream() = +type CompilerInputStream() = inherit Stream() - // Duration (in milliseconds) of the pause in the loop of waitForAtLeastOneByte. + // Duration (in milliseconds) of the pause in the loop of waitForAtLeastOneByte. let pauseDuration = 100 // Queue of characters waiting to be read. let readQueue = new Queue() let waitForAtLeastOneByte(count : int) = - let rec loop() = - let attempt = + let rec loop() = + let attempt = lock readQueue (fun () -> let n = readQueue.Count - if (n >= 1) then + if (n >= 1) then let lengthToRead = if (n < count) then n else count let ret = Array.zeroCreate lengthToRead for i in 0 .. lengthToRead - 1 do ret.[i] <- readQueue.Dequeue() Some ret - else + else None) - match attempt with + match attempt with | None -> System.Threading.Thread.Sleep(pauseDuration); loop() | Some res -> res - loop() + loop() - override x.CanRead = true + override x.CanRead = true override x.CanWrite = false override x.CanSeek = false override x.Position with get() = raise (NotSupportedException()) and set _v = raise (NotSupportedException()) - override x.Length = raise (NotSupportedException()) + override x.Length = raise (NotSupportedException()) override x.Flush() = () - override x.Seek(_offset, _origin) = raise (NotSupportedException()) - override x.SetLength(_value) = raise (NotSupportedException()) - override x.Write(_buffer, _offset, _count) = raise (NotSupportedException("Cannot write to input stream")) - override x.Read(buffer, offset, count) = + override x.Seek(_offset, _origin) = raise (NotSupportedException()) + override x.SetLength(_value) = raise (NotSupportedException()) + override x.Write(_buffer, _offset, _count) = raise (NotSupportedException("Cannot write to input stream")) + override x.Read(buffer, offset, count) = let bytes = waitForAtLeastOneByte count Array.Copy(bytes, 0, buffer, offset, bytes.Length) bytes.Length @@ -3331,7 +3366,7 @@ type CompilerInputStream() = member x.Add(str:string) = if (System.String.IsNullOrEmpty(str)) then () else - lock readQueue (fun () -> + lock readQueue (fun () -> let bytes = System.Text.Encoding.UTF8.GetBytes(str) for i in 0 .. bytes.Length - 1 do readQueue.Enqueue(bytes.[i])) @@ -3350,28 +3385,27 @@ type CompilerOutputStream() = override x.CanWrite = true override x.CanSeek = false override x.Position with get() = nyi() and set _v = nyi() - override x.Length = nyi() + override x.Length = nyi() override x.Flush() = () - override x.Seek(_offset, _origin) = nyi() - override x.SetLength(_value) = nyi() - override x.Read(_buffer, _offset, _count) = raise (NotSupportedException("Cannot write to input stream")) - override x.Write(buffer, offset, count) = + override x.Seek(_offset, _origin) = nyi() + override x.SetLength(_value) = nyi() + override x.Read(_buffer, _offset, _count) = raise (NotSupportedException("Cannot write to input stream")) + override x.Write(buffer, offset, count) = let stop = offset + count if (stop > buffer.Length) then raise (ArgumentException("offset,count")) - lock contentQueue (fun () -> + lock contentQueue (fun () -> for i in offset .. stop - 1 do contentQueue.Enqueue(buffer.[i])) - member x.Read() = - lock contentQueue (fun () -> + member x.Read() = + lock contentQueue (fun () -> let n = contentQueue.Count - if (n > 0) then + if (n > 0) then let bytes = Array.zeroCreate n - for i in 0 .. n-1 do - bytes.[i] <- contentQueue.Dequeue() + for i in 0 .. n-1 do + bytes.[i] <- contentQueue.Dequeue() System.Text.Encoding.UTF8.GetString(bytes, 0, n) else "") - diff --git a/src/fsharp/fsi/fsi.fsi b/src/fsharp/fsi/fsi.fsi index 2d31d129182..ba3bfc149cd 100644 --- a/src/fsharp/fsi/fsi.fsi +++ b/src/fsharp/fsi/fsi.fsi @@ -1,69 +1,68 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - module public FSharp.Compiler.Interactive.Shell +open System open System.IO open System.Threading -open FSharp.Compiler -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.Symbols [] /// Represents an evaluated F# value type FsiValue = /// The value, as an object - member ReflectionValue : obj + member ReflectionValue: obj /// The type of the value, from the point of view of the .NET type system - member ReflectionType : System.Type + member ReflectionType: Type -#if COMPILER_API /// The type of the value, from the point of view of the F# type system - member FSharpType : FSharpType -#endif + member FSharpType: FSharpType [] /// Represents an evaluated F# value that is bound to an identifier type FsiBoundValue = /// The identifier of the value - member Name : string + member Name: string /// The evaluated F# value - member Value : FsiValue + member Value: FsiValue [] type EvaluationEventArgs = - inherit System.EventArgs + inherit EventArgs /// The display name of the symbol defined - member Name : string + member Name: string /// The value of the symbol defined, if any - member FsiValue : FsiValue option + member FsiValue: FsiValue option /// The FSharpSymbolUse for the symbol defined - member SymbolUse : FSharpSymbolUse + member SymbolUse: FSharpSymbolUse /// The symbol defined - member Symbol : FSharpSymbol + member Symbol: FSharpSymbol /// The details of the expression defined - member ImplementationDeclaration : FSharpImplementationFileDeclaration + member ImplementationDeclaration: FSharpImplementationFileDeclaration [] type public FsiEvaluationSessionHostConfig = - new : unit -> FsiEvaluationSessionHostConfig + new: unit -> FsiEvaluationSessionHostConfig /// Called by the evaluation session to ask the host for parameters to format text for output - abstract FormatProvider: System.IFormatProvider + abstract FormatProvider: IFormatProvider /// Called by the evaluation session to ask the host for parameters to format text for output abstract FloatingPointFormat: string /// Called by the evaluation session to ask the host for parameters to format text for output - abstract AddedPrinters : Choice<(System.Type * (obj -> string)), (System.Type * (obj -> obj))> list + abstract AddedPrinters: Choice<(Type * (obj -> string)), (Type * (obj -> obj))> list /// Called by the evaluation session to ask the host for parameters to format text for output abstract ShowDeclarationValues: bool @@ -72,26 +71,26 @@ type public FsiEvaluationSessionHostConfig = abstract ShowIEnumerable: bool /// Called by the evaluation session to ask the host for parameters to format text for output - abstract ShowProperties : bool + abstract ShowProperties: bool /// Called by the evaluation session to ask the host for parameters to format text for output - abstract PrintSize : int + abstract PrintSize: int /// Called by the evaluation session to ask the host for parameters to format text for output - abstract PrintDepth : int + abstract PrintDepth: int /// Called by the evaluation session to ask the host for parameters to format text for output - abstract PrintWidth : int + abstract PrintWidth: int /// Called by the evaluation session to ask the host for parameters to format text for output - abstract PrintLength : int + abstract PrintLength: int /// The evaluation session calls this to report the preferred view of the command line arguments after /// stripping things like "/use:file.fsx", "-r:Foo.dll" etc. - abstract ReportUserCommandLineArgs : string [] -> unit + abstract ReportUserCommandLineArgs: string [] -> unit /// Hook for listening for evaluation bindings - member OnEvaluation : IEvent + member OnEvaluation: IEvent /// /// Indicate a special console "readline" reader for the evaluation session, if any.  @@ -110,58 +109,58 @@ type public FsiEvaluationSessionHostConfig = ///   /// - abstract GetOptionalConsoleReadLine : probeToSeeIfConsoleWorks: bool -> (unit -> string) option + abstract GetOptionalConsoleReadLine: probeToSeeIfConsoleWorks: bool -> (unit -> string) option /// The evaluation session calls this at an appropriate point in the startup phase if the --fsi-server parameter was given - abstract StartServer : fsiServerName:string -> unit + abstract StartServer: fsiServerName:string -> unit /// Called by the evaluation session to ask the host to enter a dispatch loop like Application.Run(). /// Only called if --gui option is used (which is the default). /// Gets called towards the end of startup and every time a ThreadAbort escaped to the backup driver loop. /// Return true if a 'restart' is required, which is a bit meaningless. - abstract EventLoopRun : unit -> bool + abstract EventLoopRun: unit -> bool /// Request that the given operation be run synchronously on the event loop. - abstract EventLoopInvoke : codeToRun: (unit -> 'T) -> 'T + abstract EventLoopInvoke: codeToRun: (unit -> 'T) -> 'T /// Schedule a restart for the event loop. - abstract EventLoopScheduleRestart : unit -> unit + abstract EventLoopScheduleRestart: unit -> unit /// Implicitly reference FSharp.Compiler.Interactive.Settings.dll - abstract UseFsiAuxLib : bool + abstract UseFsiAuxLib: bool /// Thrown when there was an error compiling the given code in FSI. [] type FsiCompilationException = - inherit System.Exception - new : string * FSharpErrorInfo[] option -> FsiCompilationException - member ErrorInfos : FSharpErrorInfo[] option + inherit Exception + new: string * FSharpDiagnostic[] option -> FsiCompilationException + member ErrorInfos: FSharpDiagnostic[] option /// Represents an F# Interactive evaluation session. [] type FsiEvaluationSession = - interface System.IDisposable + interface IDisposable - /// Create an FsiEvaluationSession, reading from the given text input, writing to the given text output and error writers. - /// /// Create an FsiEvaluationSession, reading from the given text input, writing to the given text output and error writers /// /// The dynamic configuration of the evaluation session /// The command line arguments for the evaluation session /// Read input from the given reader + /// Write errors to the given writer /// Write output to the given writer /// Optionally make the dynamic assembly for the session collectible - static member Create : fsiConfig: FsiEvaluationSessionHostConfig * argv:string[] * inReader:TextReader * outWriter:TextWriter * errorWriter: TextWriter * ?collectible: bool * ?legacyReferenceResolver: ReferenceResolver.Resolver -> FsiEvaluationSession + /// An optional resolver for legacy MSBuild references + static member Create: fsiConfig: FsiEvaluationSessionHostConfig * argv:string[] * inReader:TextReader * outWriter:TextWriter * errorWriter: TextWriter * ?collectible: bool * ?legacyReferenceResolver: LegacyReferenceResolver -> FsiEvaluationSession /// A host calls this to request an interrupt on the evaluation thread. - member Interrupt : unit -> unit + member Interrupt: unit -> unit /// A host calls this to get the completions for a long identifier, e.g. in the console /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. - member GetCompletions : longIdent: string -> seq + member GetCompletions: longIdent: string -> seq /// Execute the code as if it had been entered as one or more interactions, with an /// implicit termination at the end of the input. Stop on first error, discarding the rest @@ -170,7 +169,7 @@ type FsiEvaluationSession = /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. - member EvalInteraction : code: string * ?cancellationToken: CancellationToken -> unit + member EvalInteraction: code: string * ?cancellationToken: CancellationToken -> unit /// Execute the code as if it had been entered as one or more interactions, with an /// implicit termination at the end of the input. Stop on first error, discarding the rest @@ -179,7 +178,7 @@ type FsiEvaluationSession = /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. - member EvalInteractionNonThrowing : code: string * ?cancellationToken: CancellationToken -> Choice * FSharpErrorInfo[] + member EvalInteractionNonThrowing: code: string * ?cancellationToken: CancellationToken -> Choice * FSharpDiagnostic[] /// Execute the given script. Stop on first error, discarding the rest /// of the script. Errors are sent to the output writer, a 'true' return value indicates there @@ -187,7 +186,7 @@ type FsiEvaluationSession = /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. - member EvalScript : filePath: string -> unit + member EvalScript: filePath: string -> unit /// Execute the given script. Stop on first error, discarding the rest /// of the script. Errors and warnings are collected apart from any exception arising from execution @@ -195,7 +194,7 @@ type FsiEvaluationSession = /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. - member EvalScriptNonThrowing : filePath: string -> Choice * FSharpErrorInfo[] + member EvalScriptNonThrowing: filePath: string -> Choice * FSharpDiagnostic[] /// Execute the code as if it had been entered as one or more interactions, with an /// implicit termination at the end of the input. Stop on first error, discarding the rest @@ -204,7 +203,7 @@ type FsiEvaluationSession = /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. - member EvalExpression : code: string -> FsiValue option + member EvalExpression: code: string -> FsiValue option /// Execute the code as if it had been entered as one or more interactions, with an /// implicit termination at the end of the input. Stop on first error, discarding the rest @@ -214,26 +213,23 @@ type FsiEvaluationSession = /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. - member EvalExpressionNonThrowing : code: string -> Choice * FSharpErrorInfo[] + member EvalExpressionNonThrowing: code: string -> Choice * FSharpDiagnostic[] /// Format a value to a string using the current PrintDepth, PrintLength etc settings provided by the active fsi configuration object - member FormatValue : reflectionValue: obj * reflectionType: System.Type -> string + member FormatValue: reflectionValue: obj * reflectionType: Type -> string /// Raised when an interaction is successfully typechecked and executed, resulting in an update to the /// type checking state. /// /// This event is triggered after parsing and checking, either via input from 'stdin', or via a call to EvalInteraction. - member PartialAssemblySignatureUpdated : IEvent + member PartialAssemblySignatureUpdated: IEvent /// Typecheck the given script fragment in the type checking context implied by the current state /// of F# Interactive. The results can be used to access intellisense, perform resolutions, /// check brace matching and other information. /// /// Operations may be run concurrently with other requests to the InteractiveChecker. - /// - /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered - /// by input from 'stdin'. - member ParseAndCheckInteraction : code: string -> Async + member ParseAndCheckInteraction: code: string -> FSharpParseFileResults * FSharpCheckFileResults * FSharpCheckProjectResults /// The single, global interactive checker to use in conjunction with other operations /// on the FsiEvaluationSession. @@ -243,33 +239,33 @@ type FsiEvaluationSession = member InteractiveChecker: FSharpChecker /// Get a handle to the resolved view of the current signature of the incrementally generated assembly. - member CurrentPartialAssemblySignature : FSharpAssemblySignature + member CurrentPartialAssemblySignature: FSharpAssemblySignature /// Get a handle to the dynamically generated assembly - member DynamicAssembly : System.Reflection.Assembly + member DynamicAssembly: System.Reflection.Assembly /// A host calls this to determine if the --gui parameter is active - member IsGui : bool + member IsGui: bool /// A host calls this to get the active language ID if provided by fsi-server-lcid - member LCID : int option + member LCID: int option /// A host calls this to report an unhandled exception in a standard way, e.g. an exception on the GUI thread gets printed to stderr - member ReportUnhandledException : exn: exn -> unit + member ReportUnhandledException: exn: exn -> unit /// Event fires when a root-level value is bound to an identifier, e.g., via `let x = ...`. - member ValueBound : IEvent + member ValueBound: IEvent /// Gets the root-level values that are bound to an identifier - member GetBoundValues : unit -> FsiBoundValue list + member GetBoundValues: unit -> FsiBoundValue list /// Tries to find a root-level value that is bound to the given identifier - member TryFindBoundValue : name: string -> FsiBoundValue option + member TryFindBoundValue: name: string -> FsiBoundValue option /// Creates a root-level value with the given name and .NET object. /// If the .NET object contains types from assemblies that are not referenced in the interactive session, it will try to implicitly resolve them by default configuration. /// Name must be a valid identifier. - member AddBoundValue : name: string * value: obj -> unit + member AddBoundValue: name: string * value: obj -> unit /// Load the dummy interaction, load the initial files, and, /// if interacting, start the background thread to read the standard input. @@ -281,7 +277,7 @@ type FsiEvaluationSession = /// - Start the background thread to read the standard input, if any /// - Sit in the GUI event loop indefinitely, if needed - member Run : unit -> unit + member Run: unit -> unit /// Get a configuration that uses the 'fsi' object (normally from FSharp.Compiler.Interactive.Settings.dll, /// an object from another DLL with identical characteristics) to provide an implementation of the configuration. @@ -304,12 +300,12 @@ module Settings = type IEventLoop = /// Run the event loop. /// True if the event loop was restarted; false otherwise. - abstract Run : unit -> bool + abstract Run: unit -> bool /// Request that the given operation be run synchronously on the event loop. /// The result of the operation. - abstract Invoke : (unit -> 'T) -> 'T + abstract Invoke: (unit -> 'T) -> 'T /// Schedule a restart for the event loop. - abstract ScheduleRestart : unit -> unit + abstract ScheduleRestart: unit -> unit [] /// Operations supported by the currently executing F# Interactive session. @@ -318,22 +314,22 @@ module Settings = member FloatingPointFormat: string with get,set /// Get or set the format provider used in the output of the interactive session. - member FormatProvider: System.IFormatProvider with get,set + member FormatProvider: IFormatProvider with get,set /// Get or set the print width of the interactive session. - member PrintWidth : int with get,set + member PrintWidth: int with get,set /// Get or set the print depth of the interactive session. - member PrintDepth : int with get,set + member PrintDepth: int with get,set /// Get or set the total print length of the interactive session. - member PrintLength : int with get,set + member PrintLength: int with get,set /// Get or set the total print size of the interactive session. - member PrintSize : int with get,set + member PrintSize: int with get,set /// When set to 'false', disables the display of properties of evaluated objects in the output of the interactive session. - member ShowProperties : bool with get,set + member ShowProperties: bool with get,set /// When set to 'false', disables the display of sequences in the output of the interactive session. member ShowIEnumerable: bool with get,set @@ -347,8 +343,8 @@ module Settings = /// Register a print transformer that controls the output of the interactive session. member AddPrintTransformer: ('T -> obj) -> unit - member internal AddedPrinters : Choice<(System.Type * (obj -> string)), - (System.Type * (obj -> obj))> list + member internal AddedPrinters: Choice<(Type * (obj -> string)), + (Type * (obj -> obj))> list /// The command line arguments after ignoring the arguments relevant to the interactive @@ -356,7 +352,7 @@ module Settings = /// if any. Thus 'fsi.exe test1.fs test2.fs -- hello goodbye' will give arguments /// 'test2.fs', 'hello', 'goodbye'. This value will normally be different to those /// returned by System.Environment.GetCommandLineArgs. - member CommandLineArgs : string [] with get,set + member CommandLineArgs: string [] with get,set /// Gets or sets a the current event loop being used to process interactions. member EventLoop: IEventLoop with get,set @@ -365,13 +361,13 @@ module Settings = /// is a different object to FSharp.Compiler.Interactive.Settings.fsi in FSharp.Compiler.Interactive.Settings.dll, /// which can be used as an alternative implementation of the interactive settings if passed as a parameter /// to GetDefaultConfiguration(fsiObj). - val fsi : InteractiveSettings + val fsi: InteractiveSettings /// Defines a read-only input stream used to feed content to the hosted F# Interactive dynamic compiler. [] type CompilerInputStream = inherit Stream - new : unit -> CompilerInputStream + new: unit -> CompilerInputStream /// Feeds content into the stream. member Add: str:string -> unit @@ -379,6 +375,6 @@ type CompilerInputStream = [] type CompilerOutputStream = inherit Stream - new : unit -> CompilerOutputStream + new: unit -> CompilerOutputStream - member Read : unit -> string + member Read: unit -> string diff --git a/src/fsharp/fsi/fsi.fsproj b/src/fsharp/fsi/fsi.fsproj index 7751134335e..9fd9b1333bf 100644 --- a/src/fsharp/fsi/fsi.fsproj +++ b/src/fsharp/fsi/fsi.fsproj @@ -5,15 +5,14 @@ Exe $(ProtoTargetFramework) - net472;netcoreapp3.1 - netcoreapp3.1 - .exe - $(NoWarn);45;55;62;75;1204 + net472;net5.0 + net5.0 + $(NoWarn);44;45;55;62;75;1204 true - --warnon:1182 --maxerrors:20 --extraoptimizationloops:1 + $(OtherFlags) --warnon:1182 --maxerrors:20 --extraoptimizationloops:1 fsi.res true - false + true @@ -32,12 +31,8 @@ - + - - - - @@ -51,7 +46,7 @@ - + diff --git a/src/fsharp/fsi/fsimain.fs b/src/fsharp/fsi/fsimain.fs index 18476c2cba7..142c5b8561c 100644 --- a/src/fsharp/fsi/fsimain.fs +++ b/src/fsharp/fsi/fsimain.fs @@ -25,13 +25,14 @@ open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.Interactive.Shell open FSharp.Compiler.Interactive.Shell.Settings +open FSharp.Compiler.CodeAnalysis #nowarn "55" #nowarn "40" // let rec on value 'fsiConfig' // Hardbinding dependencies should we NGEN fsi.exe -[] do () +[] do () [] do () // Standard attributes [] @@ -66,7 +67,7 @@ type WinFormsEventLoop() = let mutable lcid = None // Set the default thread exception handler let mutable restart = false - member __.LCID with get () = lcid and set v = lcid <- v + member _.LCID with get () = lcid and set v = lcid <- v interface IEventLoop with member x.Run() = restart <- false @@ -225,32 +226,32 @@ let evaluateSession(argv: string[]) = // Update the configuration to include 'StartServer', WinFormsEventLoop and 'GetOptionalConsoleReadLine()' let rec fsiConfig = { new FsiEvaluationSessionHostConfig () with - member __.FormatProvider = fsiConfig0.FormatProvider - member __.FloatingPointFormat = fsiConfig0.FloatingPointFormat - member __.AddedPrinters = fsiConfig0.AddedPrinters - member __.ShowDeclarationValues = fsiConfig0.ShowDeclarationValues - member __.ShowIEnumerable = fsiConfig0.ShowIEnumerable - member __.ShowProperties = fsiConfig0.ShowProperties - member __.PrintSize = fsiConfig0.PrintSize - member __.PrintDepth = fsiConfig0.PrintDepth - member __.PrintWidth = fsiConfig0.PrintWidth - member __.PrintLength = fsiConfig0.PrintLength - member __.ReportUserCommandLineArgs args = fsiConfig0.ReportUserCommandLineArgs args - member __.EventLoopRun() = + member _.FormatProvider = fsiConfig0.FormatProvider + member _.FloatingPointFormat = fsiConfig0.FloatingPointFormat + member _.AddedPrinters = fsiConfig0.AddedPrinters + member _.ShowDeclarationValues = fsiConfig0.ShowDeclarationValues + member _.ShowIEnumerable = fsiConfig0.ShowIEnumerable + member _.ShowProperties = fsiConfig0.ShowProperties + member _.PrintSize = fsiConfig0.PrintSize + member _.PrintDepth = fsiConfig0.PrintDepth + member _.PrintWidth = fsiConfig0.PrintWidth + member _.PrintLength = fsiConfig0.PrintLength + member _.ReportUserCommandLineArgs args = fsiConfig0.ReportUserCommandLineArgs args + member _.EventLoopRun() = #if !FX_NO_WINFORMS match (if fsiSession.IsGui then fsiWinFormsLoop.Value else None) with | Some l -> (l :> IEventLoop).Run() | _ -> #endif fsiConfig0.EventLoopRun() - member __.EventLoopInvoke(f) = + member _.EventLoopInvoke(f) = #if !FX_NO_WINFORMS match (if fsiSession.IsGui then fsiWinFormsLoop.Value else None) with | Some l -> (l :> IEventLoop).Invoke(f) | _ -> #endif fsiConfig0.EventLoopInvoke(f) - member __.EventLoopScheduleRestart() = + member _.EventLoopScheduleRestart() = #if !FX_NO_WINFORMS match (if fsiSession.IsGui then fsiWinFormsLoop.Value else None) with | Some l -> (l :> IEventLoop).ScheduleRestart() @@ -258,12 +259,12 @@ let evaluateSession(argv: string[]) = #endif fsiConfig0.EventLoopScheduleRestart() - member __.UseFsiAuxLib = fsiConfig0.UseFsiAuxLib + member _.UseFsiAuxLib = fsiConfig0.UseFsiAuxLib - member __.StartServer(fsiServerName) = StartServer fsiSession fsiServerName + member _.StartServer(fsiServerName) = StartServer fsiSession fsiServerName // Connect the configuration through to the 'fsi' Event loop - member __.GetOptionalConsoleReadLine(probe) = getConsoleReadLine(probe) } + member _.GetOptionalConsoleReadLine(probe) = getConsoleReadLine(probe) } // Create the console and fsiSession : FsiEvaluationSession = FsiEvaluationSession.Create (fsiConfig, argv, Console.In, Console.Out, Console.Error, collectible=false, legacyReferenceResolver=legacyReferenceResolver) @@ -315,7 +316,7 @@ let MainMain argv = let savedOut = Console.Out use __ = { new IDisposable with - member __.Dispose() = + member _.Dispose() = try Console.SetOut(savedOut) with _ -> ()} diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf index 0c2aa9acc9c..e7c41ab141d 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.cs.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - Operace nebyla úspěšná. Text chyby se vytiskl do streamu chyb. Pokud chcete vrátit odpovídající FSharpErrorInfo, použijte EvalInteractionNonThrowing, EvalScriptNonThrowing nebo EvalExpressionNonThrowing. + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Operace nebyla úspěšná. Text chyby se vytiskl do streamu chyb. Pokud chcete vrátit odpovídající FSharpDiagnostic, použijte EvalInteractionNonThrowing, EvalScriptNonThrowing nebo EvalExpressionNonThrowing. diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf index d442378a937..e75d448790d 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.de.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - Der Vorgang ist fehlgeschlagen. Der Fehlertext wurde im Fehlerstream ausgegeben. Verwenden Sie EvalInteractionNonThrowing, EvalScriptNonThrowing oder EvalExpressionNonThrowing, um die entsprechende FSharpErrorInfo zurückzugeben. + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Fehler beim Vorgang. Der Fehlertext wurde im Fehlerstream ausgegeben. Verwenden Sie "EvalInteractionNonThrowing", "EvalScriptNonThrowing" oder "EvalExpressionNonThrowing", um die entsprechende FSharpDiagnostic zurückzugeben. diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf index 31bc8a60d52..21655a4e010 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.es.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - Error en la operación. El texto del error se ha impreso en la secuencia de errores. Para devolver el correspondiente FSharpErrorInfo, use EvalInteractionNonThrowing, EvalScriptNonThrowing o EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Error en la operación. El texto del error se ha impreso en la secuencia de errores. Para devolver el valor FSharpDiagnostic correspondiente, use EvalInteractionNonThrowing, EvalScriptNonThrowing o EvalExpressionNonThrowing diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf index 1d0572f315a..fc42cf0b812 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.fr.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - L'opération a échoué. Le texte d'erreur a été imprimé dans le flux d'erreurs. Pour retourner le FSharpErrorInfo correspondant, utiliser EvalInteractionNonThrowing, EvalScriptNonThrowing ou EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Échec de l'opération. Le texte d'erreur est affiché dans le flux d'erreur. Pour retourner le FSharpDiagnostic correspondant, utilisez EvalInteractionNonThrowing, EvalScriptNonThrowing ou EvalExpressionNonThrowing diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf index 2d496562205..de4f016ad9a 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.it.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - L'operazione non è riuscita. Il testo dell'errore è stato stampato nel flusso degli errori. Per restituire l'elemento FSharpErrorInfo corrispondente, usare EvalInteractionNonThrowing, EvalScriptNonThrowing o EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + L'operazione non è riuscita. Il testo dell'errore è stato stampato nel flusso degli errori. Per restituire l'elemento FSharpDiagnostic corrispondente, usare EvalInteractionNonThrowing, EvalScriptNonThrowing o EvalExpressionNonThrowing diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf index 3978ef4fb3d..614ddf284ac 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.ja.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - 操作に失敗しました。エラー テキストがエラー ストリームで印刷されました。対応する FSharpErrorInfo を戻すには、EvalInteractionNonThrowing、EvalScriptuNonThrowing、または EvalExpressionNonThrowing を使用します + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + 操作に失敗しました。エラー テキストがエラー ストリームに出力されました。対応する FSharpDiagnostic を戻すには、EvalInteractionNonThrowing、EvalScriptNonThrowing、または EvalExpressionNonThrowing を使用します diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf index c37c406c7aa..4f132496c00 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.ko.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - 작업이 실패했습니다. 오류 텍스트가 오류 스트림에 인쇄되었습니다. 해당 FSharpErrorInfo를 반환하려면 EvalInteractionNonThrowing, EvalScriptNonThrowing 또는 EvalExpressionNonThrowing를 사용하세요. + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + 작업이 실패했습니다. 오류 텍스트가 오류 스트림에 출력되었습니다. 해당 FSharpDiagnostic을 반환하려면 EvalInteractionNonThrowing, EvalScriptNonThrowing 또는 EvalExpressionNonThrowing을 사용하세요. diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf index 2f3e40bfafe..8806c4ace6e 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.pl.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - Operacja nie powiodła się. Tekst błędu został umieszczony w strumieniu błędów. Aby zwrócić odpowiedni element FSharpErrorInfo, użyj elementu EvalInteractionNonThrowing, eEvalScriptNonThrowing lub EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Operacja nie powiodła się. Tekst błędu został umieszczony w strumieniu błędów. Aby zwrócić odpowiedni element FSharpDiagnostic, użyj elementu EvalInteractionNonThrowing, eEvalScriptNonThrowing lub EvalExpressionNonThrowing diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf index 693fe83c4df..c67ed4a0e70 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.pt-BR.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - Falha na operação. O texto do erro foi impresso no fluxo de erros. Para retornar o FSharpErrorInfo correspondente, use EvalInteractionNonThrowing, EvalScriptNonThrowing ou EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Falha na operação. O texto do erro foi impresso no fluxo de erros. Para retornar o FSharpDiagnostic correspondente, use EvalInteractionNonThrowing, EvalScriptNonThrowing ou EvalExpressionNonThrowing diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf index c1b74ff5748..efd1f831714 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.ru.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - Не удалось выполнить операцию. Текст ошибки был выведен в потоке ошибок. Чтобы вернуть соответствующие сведения FSharpErrorInfo, используйте EvalInteractionNonThrowing, EvalScriptNonThrowing или EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + Не удалось выполнить операцию. Текст ошибки был выведен в потоке ошибок. Чтобы вернуть соответствующие сведения FSharpDiagnostic, используйте EvalInteractionNonThrowing, EvalScriptNonThrowing или EvalExpressionNonThrowing diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf index 3e96fd14064..0aa1916e2de 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.tr.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - İşlem başarısız oldu. Hata metni hata akışında yazdırıldı. İlgili FSharpErrorInfo bilgilerini döndürmek için EvalInteractionNonThrowing, EvalScriptNonThrowing veya EvalExpressionNonThrowing kullanın + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + İşlem başarısız oldu. Hata metni hata akışında yazdırıldı. İlgili FSharpDiagnostic'i döndürmek için EvalInteractionNonThrowing, EvalScriptNonThrowing veya EvalExpressionNonThrowing kullanın diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf index 2cb87ca1539..d183e5f2349 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hans.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - 操作失败。错误文本已在错误流中打印。要返回相应的 FSharpErrorInfo,请使用 EvalInteractionNonThrowing、EvalScriptNonThrowing 或 EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + 操作失败。错误文本已在错误流中打印。若要返回相应的 FSharpDiagnostic,请使用 EvalInteractionNonThrowing、EvalScriptNonThrowing 或 EvalExpressionNonThrowing diff --git a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf index f7346214d45..ccb733230cb 100644 --- a/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf +++ b/src/fsharp/fsi/xlf/FSIstrings.txt.zh-Hant.xlf @@ -13,8 +13,8 @@ - Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing - 作業失敗。錯誤文字已列印在錯誤資料流中。若要傳回相對應的 FSharpErrorInfo,請使用 EvalInteractionNonThrowing、EvalScriptNonThrowing 或 EvalExpressionNonThrowing + Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpDiagnostic use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing + 作業失敗。錯誤文字已列印在錯誤串流中。若要傳回相對應的 FSharpDiagnostic,請使用 EvalInteractionNonThrowing、EvalScriptNonThrowing 或 EvalExpressionNonThrowing diff --git a/src/fsharp/fsiAnyCpu/fsiAnyCpu.fsproj b/src/fsharp/fsiAnyCpu/fsiAnyCpu.fsproj index d39051b414c..85e7e6f929a 100644 --- a/src/fsharp/fsiAnyCpu/fsiAnyCpu.fsproj +++ b/src/fsharp/fsiAnyCpu/fsiAnyCpu.fsproj @@ -7,7 +7,7 @@ net472 AnyCPU .exe - $(NoWarn);45;55;62;75;1204 + $(NoWarn);44;45;55;62;75;1204 true $(OtherFlags) --warnon:1182 --maxerrors:20 --extraoptimizationloops:1 ..\fsi\fsi.res @@ -30,7 +30,7 @@ - + diff --git a/src/fsharp/fsiaux.fs b/src/fsharp/fsiaux.fs index f4c5ed9cd57..3c12d56812d 100644 --- a/src/fsharp/fsiaux.fs +++ b/src/fsharp/fsiaux.fs @@ -111,9 +111,9 @@ type InteractiveSession() = member internal self.SetEventLoop (run: (unit -> bool), invoke: ((unit -> obj) -> obj), restart: (unit -> unit)) = evLoop.ScheduleRestart() evLoop <- { new IEventLoop with - member __.Run() = run() - member __.Invoke(f) = invoke((fun () -> f() |> box)) |> unbox - member __.ScheduleRestart() = restart() } + member _.Run() = run() + member _.Invoke(f) = invoke((fun () -> f() |> box)) |> unbox + member _.ScheduleRestart() = restart() } [] do() diff --git a/src/fsharp/ilx/EraseClosures.fs b/src/fsharp/ilx/EraseClosures.fs index c56ae5797e6..13cd0d6cb5c 100644 --- a/src/fsharp/ilx/EraseClosures.fs +++ b/src/fsharp/ilx/EraseClosures.fs @@ -1,14 +1,13 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.AbstractIL.Extensions.ILX.EraseClosures +module internal FSharp.Compiler.AbstractIL.ILX.EraseClosures - -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Extensions.ILX -open FSharp.Compiler.AbstractIL.Extensions.ILX.Types +open Internal.Utilities.Library +open FSharp.Compiler.AbstractIL.ILX +open FSharp.Compiler.AbstractIL.ILX.Types open FSharp.Compiler.AbstractIL.Morphs open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.Syntax.PrettyNaming // -------------------------------------------------------------------- // Erase closures and function types @@ -105,10 +104,13 @@ let isSupportedDirectCall apps = // for more refined types later. // -------------------------------------------------------------------- -let mkFuncTypeRef n = - if n = 1 then mkILTyRef (IlxSettings.ilxFsharpCoreLibScopeRef (), IlxSettings.ilxNamespace () + ".FSharpFunc`2") - else mkILNestedTyRef (IlxSettings.ilxFsharpCoreLibScopeRef (), - [IlxSettings.ilxNamespace () + ".OptimizedClosures"], +[] +let fsharpCoreNamespace = "Microsoft.FSharp.Core" + +let mkFuncTypeRef fsharpCoreAssemblyScopeRef n = + if n = 1 then mkILTyRef (fsharpCoreAssemblyScopeRef, fsharpCoreNamespace + ".FSharpFunc`2") + else mkILNestedTyRef (fsharpCoreAssemblyScopeRef, + [fsharpCoreNamespace + ".OptimizedClosures"], "FSharpFunc`"+ string (n + 1)) type cenv = { @@ -125,7 +127,7 @@ type cenv = addMethodGeneratedAttrs: ILMethodDef -> ILMethodDef } - override __.ToString() = "" + override _.ToString() = "" let addMethodGeneratedAttrsToTypeDef cenv (tdef: ILTypeDef) = @@ -133,8 +135,8 @@ let addMethodGeneratedAttrsToTypeDef cenv (tdef: ILTypeDef) = let newIlxPubCloEnv(ilg, addMethodGeneratedAttrs, addFieldGeneratedAttrs, addFieldNeverAttrs) = { ilg = ilg - tref_Func = Array.init 10 (fun i -> mkFuncTypeRef(i+1)) - mkILTyFuncTy = ILType.Boxed (mkILNonGenericTySpec (mkILTyRef (IlxSettings.ilxFsharpCoreLibScopeRef (), IlxSettings.ilxNamespace () + ".FSharpTypeFunc"))) + tref_Func = Array.init 10 (fun i -> mkFuncTypeRef ilg.fsharpCoreAssemblyScopeRef (i+1)) + mkILTyFuncTy = ILType.Boxed (mkILNonGenericTySpec (mkILTyRef (ilg.fsharpCoreAssemblyScopeRef, fsharpCoreNamespace + ".FSharpTypeFunc"))) addMethodGeneratedAttrs = addMethodGeneratedAttrs addFieldGeneratedAttrs = addFieldGeneratedAttrs addFieldNeverAttrs = addFieldNeverAttrs } @@ -145,7 +147,7 @@ let mkILCurriedFuncTy cenv dtys rty = List.foldBack (mkILFuncTy cenv) dtys rty let typ_Func cenv (dtys: ILType list) rty = let n = dtys.Length - let tref = if n <= 10 then cenv.tref_Func.[n-1] else mkFuncTypeRef n + let tref = if n <= 10 then cenv.tref_Func.[n-1] else mkFuncTypeRef cenv.ilg.fsharpCoreAssemblyScopeRef n mkILBoxedTy tref (dtys @ [rty]) let rec mkTyOfApps cenv apps = @@ -312,15 +314,17 @@ let convILMethodBody (thisClo, boxReturnTy) (il: ILMethodBody) = match boxReturnTy with | None -> code | Some ty -> morphILInstrsInILCode (convReturnInstr ty) code - {il with MaxStack=newMax; IsZeroInit=true; Code= code } + { il with MaxStack = newMax; Code = code } let convMethodBody thisClo = function - | MethodBody.IL il -> MethodBody.IL (convILMethodBody (thisClo, None) il) + | MethodBody.IL il -> + let convil = convILMethodBody (thisClo, None) il.Value + MethodBody.IL (lazy convil) | x -> x let convMethodDef thisClo (md: ILMethodDef) = - let b' = convMethodBody thisClo (md.Body.Contents) - md.With(body=mkMethBodyAux b') + let b' = convMethodBody thisClo (md.Body) + md.With(body=notlazy b') // -------------------------------------------------------------------- // Make fields for free variables of a type abstraction. @@ -466,6 +470,7 @@ let rec convIlxClosureDef cenv encl (td: ILTypeDef) clo = else // CASE 1b. Build a type application. let boxReturnTy = Some nowReturnTy (* box prior to all I_ret *) + let convil = convILMethodBody (Some nowCloSpec, boxReturnTy) (Lazy.force clo.cloCode) let nowApplyMethDef = mkILGenericVirtualMethod ("Specialize", @@ -473,7 +478,7 @@ let rec convIlxClosureDef cenv encl (td: ILTypeDef) clo = addedGenParams, (* method is generic over added ILGenericParameterDefs *) [], mkILReturn(cenv.ilg.typ_Object), - MethodBody.IL (convILMethodBody (Some nowCloSpec, boxReturnTy) (Lazy.force clo.cloCode))) + MethodBody.IL (lazy convil)) let ctorMethodDef = mkILStorageCtor (None, @@ -565,12 +570,13 @@ let rec convIlxClosureDef cenv encl (td: ILTypeDef) clo = let nowEnvParentClass = typ_Func cenv (typesOfILParams nowParams) nowReturnTy let cloTypeDef = + let convil = convILMethodBody (Some nowCloSpec, None) (Lazy.force clo.cloCode) let nowApplyMethDef = mkILNonGenericVirtualMethod ("Invoke", ILMemberAccess.Public, nowParams, mkILReturn nowReturnTy, - MethodBody.IL (convILMethodBody (Some nowCloSpec, None) (Lazy.force clo.cloCode))) + MethodBody.IL (lazy convil)) let ctorMethodDef = mkILStorageCtor diff --git a/src/fsharp/ilx/EraseClosures.fsi b/src/fsharp/ilx/EraseClosures.fsi index 9a0d886ca53..f7426491da2 100644 --- a/src/fsharp/ilx/EraseClosures.fsi +++ b/src/fsharp/ilx/EraseClosures.fsi @@ -1,19 +1,21 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// Compiler use only. Erase closures -module internal FSharp.Compiler.AbstractIL.Extensions.ILX.EraseClosures +module internal FSharp.Compiler.AbstractIL.ILX.EraseClosures -open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Extensions.ILX -open FSharp.Compiler.AbstractIL.Extensions.ILX.Types +open FSharp.Compiler.AbstractIL.ILX.Types type cenv + val mkCallFunc : cenv -> allocLocal:(ILType -> uint16) -> numThisGenParams:int -> ILTailcall -> IlxClosureApps -> ILInstr list val mkILFuncTy : cenv -> ILType -> ILType -> ILType + val mkILTyFuncTy : cenv -> ILType + val newIlxPubCloEnv : ILGlobals * addMethodGeneratedAttrs: (ILMethodDef -> ILMethodDef) * addFieldGeneratedAttrs: (ILFieldDef -> ILFieldDef) * addFieldNeverAttrs: (ILFieldDef -> ILFieldDef) -> cenv + val mkTyOfLambdas: cenv -> IlxClosureLambdas -> ILType val convIlxClosureDef : cenv -> encl: string list -> ILTypeDef -> IlxClosureInfo -> ILTypeDef list diff --git a/src/fsharp/ilx/EraseUnions.fs b/src/fsharp/ilx/EraseUnions.fs index c24a30a6105..84483698e3a 100644 --- a/src/fsharp/ilx/EraseUnions.fs +++ b/src/fsharp/ilx/EraseUnions.fs @@ -1,34 +1,33 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -// -------------------------------------------------------------------- -// Erase discriminated unions. -// -------------------------------------------------------------------- - - -module internal FSharp.Compiler.AbstractIL.Extensions.ILX.EraseUnions +/// Erase discriminated unions. +module internal FSharp.Compiler.AbstractIL.ILX.EraseUnions open System.Collections.Generic - -open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Extensions.ILX.Types open System.Reflection - +open Internal.Utilities.Library +open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.AbstractIL.ILX.Types [] let TagNil = 0 + [] let TagCons = 1 + [] let ALT_NAME_CONS = "Cons" type DiscriminationTechnique = /// Indicates a special representation for the F# list type where the "empty" value has a tail field of value null | TailOrNull + /// Indicates a type with either number of cases < 4, and not a single-class type with an integer tag (IntegerTag) | RuntimeTypes + /// Indicates a type with a single case, e.g. ``type X = ABC of string * int`` | SingleCase + /// Indicates a type with either cases >= 4, or a type like // type X = A | B | C // or type X = A | B | C of string @@ -163,37 +162,41 @@ let cuspecRepr = UnionReprDecisions ((fun (cuspec:IlxUnionSpec) -> cuspec.AlternativesArray), (fun (cuspec:IlxUnionSpec) -> cuspec.IsNullPermitted), - (fun (alt:IlxUnionAlternative) -> alt.IsNullary), + (fun (alt:IlxUnionCase) -> alt.IsNullary), (fun cuspec -> cuspec.HasHelpers = IlxUnionHasHelpers.SpecialFSharpListHelpers), (fun cuspec -> cuspec.Boxity = ILBoxity.AsValue), - (fun (alt:IlxUnionAlternative) -> alt.Name), + (fun (alt:IlxUnionCase) -> alt.Name), (fun cuspec -> cuspec.DeclaringType), (fun (cuspec,nm) -> mkILNamedTy cuspec.Boxity (mkILTyRefInTyRef (mkCasesTypeRef cuspec, nm)) cuspec.GenericArgs)) type NoTypesGeneratedViaThisReprDecider = NoTypesGeneratedViaThisReprDecider + let cudefRepr = UnionReprDecisions ((fun (_td,cud) -> cud.cudAlternatives), (fun (_td,cud) -> cud.cudNullPermitted), - (fun (alt:IlxUnionAlternative) -> alt.IsNullary), + (fun (alt:IlxUnionCase) -> alt.IsNullary), (fun (_td,cud) -> cud.cudHasHelpers = IlxUnionHasHelpers.SpecialFSharpListHelpers), (fun (td:ILTypeDef,_cud) -> td.IsStruct), - (fun (alt:IlxUnionAlternative) -> alt.Name), + (fun (alt:IlxUnionCase) -> alt.Name), (fun (_td,_cud) -> NoTypesGeneratedViaThisReprDecider), (fun ((_td,_cud),_nm) -> NoTypesGeneratedViaThisReprDecider)) let mkTesterName nm = "Is" + nm + let tagPropertyName = "Tag" -let mkUnionCaseFieldId (fdef: IlxUnionField) = +let mkUnionCaseFieldId (fdef: IlxUnionCaseField) = // Use the lower case name of a field or constructor as the field/parameter name if it differs from the uppercase name fdef.LowerName, fdef.Type let refToFieldInTy ty (nm, fldTy) = mkILFieldSpecInTy (ty, nm, fldTy) let formalTypeArgs (baseTy:ILType) = List.mapi (fun i _ -> mkILTyvarTy (uint16 i)) baseTy.GenericArgs + let constFieldName nm = "_unique_" + nm + let constFormalFieldTy (baseTy:ILType) = mkILNamedTy baseTy.Boxity baseTy.TypeRef (formalTypeArgs baseTy) @@ -203,16 +206,17 @@ let mkConstFieldSpecFromId (baseTy:ILType) constFieldId = let mkConstFieldSpec nm (baseTy:ILType) = mkConstFieldSpecFromId baseTy (constFieldName nm, constFormalFieldTy baseTy) - let tyForAlt cuspec alt = cuspecRepr.TypeForAlternative(cuspec,alt) let GetILTypeForAlternative cuspec alt = cuspecRepr.TypeForAlternative(cuspec,cuspec.Alternative alt) let mkTagFieldType (ilg: ILGlobals) _cuspec = ilg.typ_Int32 + let mkTagFieldFormalType (ilg: ILGlobals) _cuspec = ilg.typ_Int32 + let mkTagFieldId ilg cuspec = "_tag", mkTagFieldType ilg cuspec -let mkTailOrNullId baseTy = "tail", constFormalFieldTy baseTy +let mkTailOrNullId baseTy = "tail", constFormalFieldTy baseTy let altOfUnionSpec (cuspec:IlxUnionSpec) cidx = try cuspec.Alternative cidx @@ -224,7 +228,7 @@ let altOfUnionSpec (cuspec:IlxUnionSpec) cidx = // calling the IsFoo helper. This only applies to discriminations outside the // assembly where the type is defined (indicated by 'avoidHelpers' flag - if this is true // then the reference is intra-assembly). -let doesRuntimeTypeDiscriminateUseHelper avoidHelpers (cuspec: IlxUnionSpec) (alt: IlxUnionAlternative) = +let doesRuntimeTypeDiscriminateUseHelper avoidHelpers (cuspec: IlxUnionSpec) (alt: IlxUnionCase) = not avoidHelpers && alt.IsNullary && cuspec.HasHelpers = IlxUnionHasHelpers.AllHelpers let mkRuntimeTypeDiscriminate (ilg: ILGlobals) avoidHelpers cuspec alt altName altTy = @@ -274,7 +278,6 @@ let mkLdDataAddr (avoidHelpers, cuspec, cidx, fidx) = let mkGetTailOrNull avoidHelpers cuspec = mkLdData (avoidHelpers, cuspec, 1, 1) (* tail is in alternative 1, field number 1 *) - let mkGetTagFromHelpers ilg (cuspec: IlxUnionSpec) = let baseTy = baseTyOfUnionSpec cuspec if cuspecRepr.RepresentOneAlternativeAsNull cuspec then @@ -293,7 +296,6 @@ let mkCeqThen after = | I_brcmp (BI_brtrue,a) -> [I_brcmp (BI_beq,a)] | _ -> [AI_ceq; after] - let mkTagDiscriminate ilg cuspec _baseTy cidx = mkGetTag ilg cuspec @ [ mkLdcInt32 cidx; AI_ceq ] @@ -315,7 +317,7 @@ let rec extraTysAndInstrsForStructCtor (ilg: ILGlobals) cidx = let tys, instrs = extraTysAndInstrsForStructCtor ilg (cidx - 7) (ilg.typ_UInt32 :: tys, mkLdcInt32 0 :: instrs) -let takesExtraParams (alts: IlxUnionAlternative[]) = +let takesExtraParams (alts: IlxUnionCase[]) = alts.Length > 1 && (alts |> Array.exists (fun d -> d.FieldDefs.Length > 0) || // Check if not all lengths are distinct @@ -419,20 +421,19 @@ let genWith g : ILCode = let instrs = ResizeArray() let lab2pc = Dictionary() g { new ICodeGen with - member __.CodeLabel(m) = m - member __.GenerateDelayMark() = generateCodeLabel() - member __.GenLocal(ilty) = failwith "not needed" - member __.SetMarkToHere(m) = lab2pc.[m] <- instrs.Count - member __.EmitInstr x = instrs.Add x + member _.CodeLabel(m) = m + member _.GenerateDelayMark() = generateCodeLabel() + member _.GenLocal(ilty) = failwith "not needed" + member _.SetMarkToHere(m) = lab2pc.[m] <- instrs.Count + member _.EmitInstr x = instrs.Add x member cg.EmitInstrs xs = for i in xs do cg.EmitInstr i - member __.MkInvalidCastExnNewobj () = failwith "not needed" } + member _.MkInvalidCastExnNewobj () = failwith "not needed" } { Labels = lab2pc Instrs = instrs.ToArray() Exceptions = [] Locals = [] } - 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) @@ -603,12 +604,10 @@ let emitDataSwitch ilg (cg: ICodeGen<'Mark>) (avoidHelpers, cuspec, cases) = | TailOrNull -> failwith "unexpected: switches on lists should have been eliminated to brisdata tests" - - //--------------------------------------------------- // Generate the union classes -let mkMethodsAndPropertiesForFields (addMethodGeneratedAttrs, addPropertyGeneratedAttrs) access attr hasHelpers (ilTy: ILType) (fields: IlxUnionField[]) = +let mkMethodsAndPropertiesForFields (addMethodGeneratedAttrs, addPropertyGeneratedAttrs) access attr hasHelpers (ilTy: ILType) (fields: IlxUnionCaseField[]) = let basicProps = fields |> Array.map (fun field -> @@ -637,8 +636,7 @@ let mkMethodsAndPropertiesForFields (addMethodGeneratedAttrs, addPropertyGenerat basicProps, basicMethods - -let convAlternativeDef (addMethodGeneratedAttrs, addPropertyGeneratedAttrs, addPropertyNeverAttrs, addFieldGeneratedAttrs, addFieldNeverAttrs, mkDebuggerTypeProxyAttribute) (ilg: ILGlobals) num (td:ILTypeDef) cud info cuspec (baseTy:ILType) (alt:IlxUnionAlternative) = +let convAlternativeDef (addMethodGeneratedAttrs, addPropertyGeneratedAttrs, addPropertyNeverAttrs, addFieldGeneratedAttrs, addFieldNeverAttrs, mkDebuggerTypeProxyAttribute) (ilg: ILGlobals) num (td:ILTypeDef) cud info cuspec (baseTy:ILType) (alt:IlxUnionCase) = let attr = cud.cudWhere let altName = alt.Name let fields = alt.FieldDefs @@ -1097,5 +1095,3 @@ let mkClassUnionDef (addMethodGeneratedAttrs, addPropertyGeneratedAttrs, addProp |> addConstFieldInit baseTypeDef.WithAbstract(isAbstract).WithSealed(altTypeDefs.IsEmpty) - - diff --git a/src/fsharp/ilx/EraseUnions.fsi b/src/fsharp/ilx/EraseUnions.fsi index b263a9bf33c..acfeab71424 100644 --- a/src/fsharp/ilx/EraseUnions.fsi +++ b/src/fsharp/ilx/EraseUnions.fsi @@ -4,10 +4,10 @@ // Compiler use only. Erase discriminated unions. // -------------------------------------------------------------------- -module internal FSharp.Compiler.AbstractIL.Extensions.ILX.EraseUnions +module internal FSharp.Compiler.AbstractIL.ILX.EraseUnions open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Extensions.ILX.Types +open FSharp.Compiler.AbstractIL.ILX.Types /// Make the instruction sequence for a "newdata" operation val mkNewData : ILGlobals -> IlxUnionSpec * int -> ILInstr list diff --git a/src/fsharp/ilx/ilxsettings.fs b/src/fsharp/ilx/ilxsettings.fs deleted file mode 100644 index 2355a6b1b6e..00000000000 --- a/src/fsharp/ilx/ilxsettings.fs +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -module internal FSharp.Compiler.AbstractIL.Extensions.ILX.IlxSettings - -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal - -type IlxCallImplementation = - | VirtEntriesVirtCode - -//++GLOBAL MUTABLE STATE (concurrency-safe because assigned only during F# library compilation) -let mutable ilxCompilingFSharpCoreLib = false - -//++GLOBAL MUTABLE STATE (concurrency-safe because assigned only during F# library compilation) -let mutable ilxFsharpCoreLibAssemRef = None : ILAssemblyRef option - -/// Scope references for FSharp.Core.dll -let ilxFsharpCoreLibScopeRef () = - if ilxCompilingFSharpCoreLib then - ILScopeRef.Local - else - let assemblyRef = - match ilxFsharpCoreLibAssemRef with - | Some o -> o - | None -> - // The exact public key token and version used here don't actually matter, or shouldn't. - // ilxFsharpCoreLibAssemRef is only 'None' for startup code paths such as - // IsSignatureDataVersionAttr, where matching is done by assembly name strings - // rather then versions and tokens. - ILAssemblyRef.Create("FSharp.Core", None, - Some (PublicKeyToken(Bytes.ofInt32Array [| 0xb0; 0x3f; 0x5f; 0x7f; 0x11; 0xd5; 0x0a; 0x3a |])), - false, - Some (IL.parseILVersion "0.0.0.0"), None) - ILScopeRef.Assembly assemblyRef - -let ilxNamespace () = "Microsoft.FSharp.Core" \ No newline at end of file diff --git a/src/fsharp/import.fs b/src/fsharp/import.fs index 90734e9ee39..26b16bfbbcc 100644 --- a/src/fsharp/import.fs +++ b/src/fsharp/import.fs @@ -5,20 +5,20 @@ module internal FSharp.Compiler.Import open System.Collections.Concurrent open System.Collections.Generic - +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Lib -open FSharp.Compiler.Range +open FSharp.Compiler.Syntax open FSharp.Compiler.SyntaxTreeOps +open FSharp.Compiler.Text +open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TcGlobals -open FSharp.Compiler.XmlDoc #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping @@ -30,6 +30,9 @@ type AssemblyLoader = /// Resolve an Abstract IL assembly reference to a Ccu abstract FindCcuFromAssemblyRef : CompilationThreadToken * range * ILAssemblyRef -> CcuResolutionResult + + abstract TryFindXmlDocumentationInfo : assemblyName: string -> XmlDocumentationInfo option + #if !NO_EXTENSIONTYPING /// Get a flag indicating if an assembly is a provided assembly, plus the @@ -362,7 +365,7 @@ let ImportProvidedMethodBaseAsILMethodRef (env: ImportMap) (m: range) (mbase: Ta | None -> let methodName = minfo.PUntaint((fun minfo -> minfo.Name), m) let typeName = declaringGenericTypeDefn.PUntaint((fun declaringGenericTypeDefn -> declaringGenericTypeDefn.FullName), m) - error(NumberedError(FSComp.SR.etIncorrectProvidedMethod(ExtensionTyping.DisplayNameOfTypeProvider(minfo.TypeProvider, m), methodName, metadataToken, typeName), m)) + error(Error(FSComp.SR.etIncorrectProvidedMethod(ExtensionTyping.DisplayNameOfTypeProvider(minfo.TypeProvider, m), methodName, metadataToken, typeName), m)) | _ -> match mbase.OfType() with | Some cinfo when cinfo.PUntaint((fun x -> x.DeclaringType.IsGenericType), m) -> @@ -388,7 +391,7 @@ let ImportProvidedMethodBaseAsILMethodRef (env: ImportMap) (m: range) (mbase: Ta | Some found -> found.Coerce(m) | None -> let typeName = declaringGenericTypeDefn.PUntaint((fun x -> x.FullName), m) - error(NumberedError(FSComp.SR.etIncorrectProvidedConstructor(ExtensionTyping.DisplayNameOfTypeProvider(cinfo.TypeProvider, m), typeName), m)) + error(Error(FSComp.SR.etIncorrectProvidedConstructor(ExtensionTyping.DisplayNameOfTypeProvider(cinfo.TypeProvider, m), typeName), m)) | _ -> mbase let rty = @@ -580,7 +583,7 @@ let ImportILAssemblyTypeForwarders (amap, m, exportedTypes: ILExportedTypesAndFo ] |> Map.ofList /// Import an IL assembly as a new TAST CCU -let ImportILAssembly(amap: (unit -> ImportMap), m, auxModuleLoader, ilScopeRef, sourceDir, filename, ilModule: ILModuleDef, invalidateCcu: IEvent) = +let ImportILAssembly(amap: (unit -> ImportMap), m, auxModuleLoader, xmlDocInfoLoader: IXmlDocumentationInfoLoader option, ilScopeRef, sourceDir, filename, ilModule: ILModuleDef, invalidateCcu: IEvent) = invalidateCcu |> ignore let aref = match ilScopeRef with @@ -609,6 +612,11 @@ let ImportILAssembly(amap: (unit -> ImportMap), m, auxModuleLoader, ilScopeRef, FileName = filename MemberSignatureEquality= (fun ty1 ty2 -> typeEquivAux EraseAll (amap()).g ty1 ty2) TryGetILModuleDef = (fun () -> Some ilModule) - TypeForwarders = forwarders } + TypeForwarders = forwarders + XmlDocumentationInfo = + match xmlDocInfoLoader, filename with + | Some xmlDocInfoLoader, Some filename -> xmlDocInfoLoader.TryLoad(filename, ilModule) + | _ -> None + } CcuThunk.Create(nm, ccuData) diff --git a/src/fsharp/import.fsi b/src/fsharp/import.fsi index cc75a8f8967..89d9fdb9ada 100644 --- a/src/fsharp/import.fsi +++ b/src/fsharp/import.fsi @@ -3,10 +3,11 @@ /// Functions to import .NET binary metadata as TAST objects module internal FSharp.Compiler.Import +open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.Range open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree #if !NO_EXTENSIONTYPING @@ -20,6 +21,8 @@ type AssemblyLoader = /// Resolve an Abstract IL assembly reference to a Ccu abstract FindCcuFromAssemblyRef : CompilationThreadToken * range * ILAssemblyRef -> CcuResolutionResult + abstract TryFindXmlDocumentationInfo : assemblyName: string -> XmlDocumentationInfo option + #if !NO_EXTENSIONTYPING /// Get a flag indicating if an assembly is a provided assembly, plus the /// table of information recording remappings from type names in the provided assembly to type @@ -76,7 +79,7 @@ val internal ImportProvidedMethodBaseAsILMethodRef : ImportMap -> range -> Taint val internal ImportILGenericParameters : (unit -> ImportMap) -> range -> ILScopeRef -> TType list -> ILGenericParameterDef list -> Typar list /// Import an IL assembly as a new TAST CCU -val internal ImportILAssembly : (unit -> ImportMap) * range * (ILScopeRef -> ILModuleDef) * ILScopeRef * sourceDir:string * filename: string option * ILModuleDef * IEvent -> CcuThunk +val internal ImportILAssembly : (unit -> ImportMap) * range * (ILScopeRef -> ILModuleDef) * IXmlDocumentationInfoLoader option * ILScopeRef * sourceDir:string * filename: string option * ILModuleDef * IEvent -> CcuThunk /// Import the type forwarder table for an IL assembly val internal ImportILAssemblyTypeForwarders : (unit -> ImportMap) * range * ILExportedTypesAndForwarders -> Map<(string array * string), Lazy> diff --git a/src/fsharp/infos.fs b/src/fsharp/infos.fs index 26ff383c38d..96422ef10b9 100755 --- a/src/fsharp/infos.fs +++ b/src/fsharp/infos.fs @@ -3,21 +3,21 @@ module internal FSharp.Compiler.Infos open System +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Lib -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax open FSharp.Compiler.SyntaxTreeOps +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TypedTreeOps.DebugPrint -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.XmlDoc #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping @@ -106,6 +106,30 @@ type SkipUnrefInterfaces = Yes | No /// Collect the set of immediate declared interface types for an F# type, but do not /// traverse the type hierarchy to collect further interfaces. let rec GetImmediateInterfacesOfType skipUnref g amap m ty = + + let getInterfaces ty (tcref:TyconRef) tinst = + match metadataOfTy g ty with +#if !NO_EXTENSIONTYPING + | ProvidedTypeMetadata info -> + [ for ity in info.ProvidedType.PApplyArray((fun st -> st.GetInterfaces()), "GetInterfaces", m) do + yield Import.ImportProvidedType amap m ity ] +#endif + | ILTypeMetadata (TILObjectReprData(scoref, _, tdef)) -> + // ImportILType may fail for an interface if the assembly load set is incomplete and the interface + // comes from another assembly. In this case we simply skip the interface: + // if we don't skip it, then compilation will just fail here, and if type checking + // succeeds with fewer non-dereferencable interfaces reported then it would have + // succeeded with more reported. There are pathological corner cases where this + // doesn't apply: e.g. for mscorlib interfaces like IComparable, but we can always + // assume those are present. + tdef.Implements |> List.choose (fun ity -> + if skipUnref = SkipUnrefInterfaces.No || CanImportILType scoref amap m ity then + Some (ImportILType scoref amap m tinst ity) + else + None) + | FSharpOrArrayOrByrefOrTupleOrExnTypeMetadata -> + tcref.ImmediateInterfaceTypesOfFSharpTycon |> List.map (instType (mkInstForAppTy g ty)) + let itys = match tryAppTy g ty with | ValueSome(tcref, tinst) -> @@ -123,31 +147,17 @@ let rec GetImmediateInterfacesOfType skipUnref g amap m ty = yield mkAppTy g.system_GenericIComparable_tcref [ty] yield mkAppTy g.system_GenericIEquatable_tcref [ty]] else - match metadataOfTy g ty with -#if !NO_EXTENSIONTYPING - | ProvidedTypeMetadata info -> - [ for ity in info.ProvidedType.PApplyArray((fun st -> st.GetInterfaces()), "GetInterfaces", m) do - yield Import.ImportProvidedType amap m ity ] -#endif - | ILTypeMetadata (TILObjectReprData(scoref, _, tdef)) -> - - // ImportILType may fail for an interface if the assembly load set is incomplete and the interface - // comes from another assembly. In this case we simply skip the interface: - // if we don't skip it, then compilation will just fail here, and if type checking - // succeeds with fewer non-dereferencable interfaces reported then it would have - // succeeded with more reported. There are pathological corner cases where this - // doesn't apply: e.g. for mscorlib interfaces like IComparable, but we can always - // assume those are present. - tdef.Implements |> List.choose (fun ity -> - if skipUnref = SkipUnrefInterfaces.No || CanImportILType scoref amap m ity then - Some (ImportILType scoref amap m tinst ity) - else None) - - | FSharpOrArrayOrByrefOrTupleOrExnTypeMetadata -> - tcref.ImmediateInterfaceTypesOfFSharpTycon |> List.map (instType (mkInstForAppTy g ty)) - | _ -> [] - - + getInterfaces ty tcref tinst + | _ -> + let tyWithMetadata = convertToTypeWithMetadataIfPossible g ty + match tryAppTy g tyWithMetadata with + | ValueSome (tcref, tinst) -> + if isAnyTupleTy g ty then + getInterfaces tyWithMetadata tcref tinst + else + [] + | _ -> [] + // NOTE: Anonymous record types are not directly considered to implement IComparable, // IComparable or IEquatable. This is because whether they support these interfaces depend on their // consitutent types, which may not yet be known in type inference. @@ -1107,7 +1117,7 @@ type MethInfo = member x.IsConstructor = match x with | ILMeth(_, ilmeth, _) -> ilmeth.IsConstructor - | FSMeth(_g, _, vref, _) -> (vref.MemberInfo.Value.MemberFlags.MemberKind = MemberKind.Constructor) + | FSMeth(_g, _, vref, _) -> (vref.MemberInfo.Value.MemberFlags.MemberKind = SynMemberKind.Constructor) | DefaultStructCtor _ -> true #if !NO_EXTENSIONTYPING | ProvidedMeth(_, mi, _, m) -> mi.PUntaint((fun mi -> mi.IsConstructor), m) @@ -1165,7 +1175,7 @@ type MethInfo = member x.IsNewSlot = (x.IsVirtual && (match x with - | ILMeth(_, x, _) -> x.IsNewSlot + | ILMeth(_, x, _) -> x.IsNewSlot || (isInterfaceTy x.TcGlobals x.ApparentEnclosingType && not x.IsFinal) | FSMeth(_, _, vref, _) -> vref.IsDispatchSlotMember #if !NO_EXTENSIONTYPING | ProvidedMeth(_, mi, _, m) -> mi.PUntaint((fun mi -> mi.IsHideBySig), m) // REVIEW: Check this is correct @@ -1399,7 +1409,7 @@ type MethInfo = [ [ for p in ilMethInfo.ParamMetadata do let isParamArrayArg = TryFindILAttribute g.attrib_ParamArrayAttribute p.CustomAttrs let reflArgInfo = - match TryDecodeILAttribute g g.attrib_ReflectedDefinitionAttribute.TypeRef p.CustomAttrs with + match TryDecodeILAttribute g.attrib_ReflectedDefinitionAttribute.TypeRef p.CustomAttrs with | Some ([ILAttribElem.Bool b ], _) -> ReflectedArgInfo.Quote b | Some _ -> ReflectedArgInfo.Quote false | _ -> ReflectedArgInfo.None diff --git a/src/fsharp/infos.fsi b/src/fsharp/infos.fsi index 083fb373ff8..fb543c2c19f 100644 --- a/src/fsharp/infos.fsi +++ b/src/fsharp/infos.fsi @@ -4,11 +4,13 @@ module internal FSharp.Compiler.Infos open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL +open FSharp.Compiler.Syntax open FSharp.Compiler.Import -open FSharp.Compiler.Range +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.TcGlobals #if !NO_EXTENSIONTYPING open FSharp.Compiler.ExtensionTyping @@ -188,7 +190,7 @@ type ReflectedArgInfo = /// Partial information about a parameter returned for use by the Language Service [] type ParamNameAndType = - | ParamNameAndType of SyntaxTree.Ident option * TType + | ParamNameAndType of Ident option * TType static member FromArgInfo: ty:TType * argInfo:ArgReprInfo -> ParamNameAndType @@ -207,7 +209,7 @@ type ParamData = isOut: bool * optArgInfo: OptionalArgInfo * callerInfo: CallerInfo * - nameOpt: SyntaxTree.Ident option * + nameOpt: Ident option * reflArgInfo: ReflectedArgInfo * ttype: TType @@ -507,7 +509,7 @@ type MethInfo = member TcGlobals: TcGlobals /// Get the XML documentation associated with the method - member XmlDoc: XmlDoc.XmlDoc + member XmlDoc: XmlDoc /// Build IL method infos. static member CreateILMeth: amap:ImportMap * m:range * ty:TType * md:ILMethodDef -> MethInfo @@ -859,7 +861,7 @@ type PropInfo = member TcGlobals: TcGlobals /// Get the intra-assembly XML documentation for the property. - member XmlDoc: XmlDoc.XmlDoc + member XmlDoc: XmlDoc /// Test whether two property infos have the same underlying definition. /// Uses the same techniques as 'MethInfosUseIdenticalDefinitions'. @@ -980,7 +982,7 @@ type EventInfo = member TcGlobals: TcGlobals /// Get the intra-assembly XML documentation for the property. - member XmlDoc: XmlDoc.XmlDoc + member XmlDoc: XmlDoc /// Test whether two event infos have the same underlying definition. /// Compatible with ItemsAreEffectivelyEqual relation. diff --git a/src/fsharp/layout.fs b/src/fsharp/layout.fs deleted file mode 100644 index d0aaab9bae9..00000000000 --- a/src/fsharp/layout.fs +++ /dev/null @@ -1,337 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -module FSharp.Compiler.Layout - -open System -open System.IO -open Internal.Utilities.StructuredFormat -open Microsoft.FSharp.Core.Printf - -#nowarn "62" // This construct is for ML compatibility. - -type layout = Internal.Utilities.StructuredFormat.Layout -type LayoutTag = Internal.Utilities.StructuredFormat.LayoutTag -type TaggedText = Internal.Utilities.StructuredFormat.TaggedText - -type NavigableTaggedText(taggedText: TaggedText, range: Range.range) = - member val Range = range - interface TaggedText with - member _.Tag = taggedText.Tag - member _.Text = taggedText.Text - -let mkNav r t = NavigableTaggedText(t, r) :> TaggedText - -let spaces n = new String(' ', n) - -// NOTE: emptyL might be better represented as a constructor, so then (Sep"") would have true meaning -let emptyL = Leaf (true, TaggedTextOps.mkTag LayoutTag.Text "", true) -let isEmptyL = function Leaf(true, tag, true) when tag.Text = "" -> true | _ -> false - -let mkNode l r joint = - if isEmptyL l then r else - if isEmptyL r then l else - Node(l, r, joint) - -//-------------------------------------------------------------------------- -//INDEX: constructors -//-------------------------------------------------------------------------- - -let wordL (str:TaggedText) = Leaf (false, str, false) -let sepL (str:TaggedText) = Leaf (true, str, true) -let rightL (str:TaggedText) = Leaf (true, str, false) -let leftL (str:TaggedText) = Leaf (false, str, true) - -module TaggedTextOps = - let tagActivePatternCase = TaggedTextOps.mkTag LayoutTag.ActivePatternCase - let tagActivePatternResult = TaggedTextOps.mkTag LayoutTag.ActivePatternResult - let tagAlias = TaggedTextOps.tagAlias - let tagClass = TaggedTextOps.tagClass - let tagUnion = TaggedTextOps.mkTag LayoutTag.Union - let tagUnionCase = TaggedTextOps.tagUnionCase - let tagDelegate = TaggedTextOps.tagDelegate - let tagEnum = TaggedTextOps.tagEnum - let tagEvent = TaggedTextOps.tagEvent - let tagField = TaggedTextOps.tagField - let tagInterface = TaggedTextOps.tagInterface - let tagKeyword = TaggedTextOps.tagKeyword - let tagLineBreak = TaggedTextOps.tagLineBreak - let tagLocal = TaggedTextOps.tagLocal - let tagRecord = TaggedTextOps.tagRecord - let tagRecordField = TaggedTextOps.tagRecordField - let tagMethod = TaggedTextOps.tagMethod - let tagMember = TaggedTextOps.mkTag LayoutTag.Member - let tagModule = TaggedTextOps.tagModule - let tagModuleBinding = TaggedTextOps.tagModuleBinding - let tagFunction = TaggedTextOps.tagFunction - let tagNamespace = TaggedTextOps.tagNamespace - let tagNumericLiteral = TaggedTextOps.tagNumericLiteral - let tagOperator = TaggedTextOps.tagOperator - let tagParameter = TaggedTextOps.tagParameter - let tagProperty = TaggedTextOps.tagProperty - let tagSpace = TaggedTextOps.tagSpace - let tagStringLiteral = TaggedTextOps.tagStringLiteral - let tagStruct = TaggedTextOps.tagStruct - let tagTypeParameter = TaggedTextOps.tagTypeParameter - let tagText = TaggedTextOps.tagText - let tagPunctuation = TaggedTextOps.tagPunctuation - let tagUnknownEntity = TaggedTextOps.mkTag LayoutTag.UnknownEntity - let tagUnknownType = TaggedTextOps.mkTag LayoutTag.UnknownType - - module Literals = - // common tagged literals - let lineBreak = TaggedTextOps.Literals.lineBreak - let space = TaggedTextOps.Literals.space - let comma = TaggedTextOps.Literals.comma - let semicolon = TaggedTextOps.Literals.semicolon - let leftParen = TaggedTextOps.Literals.leftParen - let rightParen = TaggedTextOps.Literals.rightParen - let leftBracket = TaggedTextOps.Literals.leftBracket - let rightBracket = TaggedTextOps.Literals.rightBracket - let leftBrace = TaggedTextOps.Literals.leftBrace - let rightBrace = TaggedTextOps.Literals.rightBrace - let leftBraceBar = TaggedTextOps.Literals.leftBraceBar - let rightBraceBar = TaggedTextOps.Literals.rightBraceBar - let equals = TaggedTextOps.Literals.equals - let arrow = TaggedTextOps.Literals.arrow - let questionMark = TaggedTextOps.Literals.questionMark - let dot = tagPunctuation "." - let leftAngle = tagPunctuation "<" - let rightAngle = tagPunctuation ">" - let star = tagOperator "*" - let colon = tagPunctuation ":" - let minus = tagPunctuation "-" - let keywordNew = tagKeyword "new" - let leftBracketAngle = tagPunctuation "[<" - let rightBracketAngle = tagPunctuation ">]" - let structUnit = tagStruct "unit" - let keywordStatic = tagKeyword "static" - let keywordMember = tagKeyword "member" - let keywordVal = tagKeyword "val" - let keywordEvent = tagKeyword "event" - let keywordWith = tagKeyword "with" - let keywordSet = tagKeyword "set" - let keywordGet = tagKeyword "get" - let keywordTrue = tagKeyword "true" - let keywordFalse = tagKeyword "false" - let bar = tagPunctuation "|" - let keywordStruct = tagKeyword "struct" - let keywordInherit = tagKeyword "inherit" - let keywordEnd = tagKeyword "end" - let keywordNested = tagKeyword "nested" - let keywordType = tagKeyword "type" - let keywordDelegate = tagKeyword "delegate" - let keywordOf = tagKeyword "of" - let keywordInternal = tagKeyword "internal" - let keywordPrivate = tagKeyword "private" - let keywordAbstract = tagKeyword "abstract" - let keywordOverride = tagKeyword "override" - let keywordEnum = tagKeyword "enum" - let leftBracketBar = tagPunctuation "[|" - let rightBracketBar = tagPunctuation "|]" - let keywordTypeof = tagKeyword "typeof" - let keywordTypedefof = tagKeyword "typedefof" - -open TaggedTextOps - -module SepL = - let dot = sepL Literals.dot - let star = sepL Literals.star - let colon = sepL Literals.colon - let questionMark = sepL Literals.questionMark - let leftParen = sepL Literals.leftParen - let comma = sepL Literals.comma - let space = sepL Literals.space - let leftBracket = sepL Literals.leftBracket - let leftAngle = sepL Literals.leftAngle - let lineBreak = sepL Literals.lineBreak - let rightParen = sepL Literals.rightParen - -module WordL = - let arrow = wordL Literals.arrow - let star = wordL Literals.star - let colon = wordL Literals.colon - let equals = wordL Literals.equals - let keywordNew = wordL Literals.keywordNew - let structUnit = wordL Literals.structUnit - let keywordStatic = wordL Literals.keywordStatic - let keywordMember = wordL Literals.keywordMember - let keywordVal = wordL Literals.keywordVal - let keywordEvent = wordL Literals.keywordEvent - let keywordWith = wordL Literals.keywordWith - let keywordSet = wordL Literals.keywordSet - let keywordGet = wordL Literals.keywordGet - let keywordTrue = wordL Literals.keywordTrue - let keywordFalse = wordL Literals.keywordFalse - let bar = wordL Literals.bar - let keywordStruct = wordL Literals.keywordStruct - let keywordInherit = wordL Literals.keywordInherit - let keywordEnd = wordL Literals.keywordEnd - let keywordNested = wordL Literals.keywordNested - let keywordType = wordL Literals.keywordType - let keywordDelegate = wordL Literals.keywordDelegate - let keywordOf = wordL Literals.keywordOf - let keywordInternal = wordL Literals.keywordInternal - let keywordPrivate = wordL Literals.keywordPrivate - let keywordAbstract = wordL Literals.keywordAbstract - let keywordOverride = wordL Literals.keywordOverride - let keywordEnum = wordL Literals.keywordEnum - -module LeftL = - let leftParen = leftL Literals.leftParen - let questionMark = leftL Literals.questionMark - let colon = leftL Literals.colon - let leftBracketAngle = leftL Literals.leftBracketAngle - let leftBracketBar = leftL Literals.leftBracketBar - let keywordTypeof = leftL Literals.keywordTypeof - let keywordTypedefof = leftL Literals.keywordTypedefof - -module RightL = - let comma = rightL Literals.comma - let rightParen = rightL Literals.rightParen - let colon = rightL Literals.colon - let rightBracket = rightL Literals.rightBracket - let rightAngle = rightL Literals.rightAngle - let rightBracketAngle = rightL Literals.rightBracketAngle - let rightBracketBar = rightL Literals.rightBracketBar - -let aboveL l r = mkNode l r (Broken 0) - -let tagAttrL str attrs ly = Attr (str, attrs, ly) - -//-------------------------------------------------------------------------- -//INDEX: constructors derived -//-------------------------------------------------------------------------- - -let apply2 f l r = if isEmptyL l then r else - if isEmptyL r then l else f l r - -let (^^) l r = mkNode l r (Unbreakable) -let (++) l r = mkNode l r (Breakable 0) -let (--) l r = mkNode l r (Breakable 1) -let (---) l r = mkNode l r (Breakable 2) -let (----) l r = mkNode l r (Breakable 3) -let (-----) l r = mkNode l r (Breakable 4) -let (@@) l r = apply2 (fun l r -> mkNode l r (Broken 0)) l r -let (@@-) l r = apply2 (fun l r -> mkNode l r (Broken 1)) l r -let (@@--) l r = apply2 (fun l r -> mkNode l r (Broken 2)) l r - -let tagListL tagger = function - | [] -> emptyL - | [x] -> x - | x :: xs -> - let rec process' prefixL = function - | [] -> prefixL - | y :: ys -> process' ((tagger prefixL) ++ y) ys in - process' x xs - -let commaListL x = tagListL (fun prefixL -> prefixL ^^ rightL Literals.comma) x - -let semiListL x = tagListL (fun prefixL -> prefixL ^^ rightL Literals.semicolon) x - -let spaceListL x = tagListL (fun prefixL -> prefixL) x - -let sepListL x y = tagListL (fun prefixL -> prefixL ^^ x) y - -let bracketL l = leftL Literals.leftParen ^^ l ^^ rightL Literals.rightParen - -let tupleL xs = bracketL (sepListL (sepL Literals.comma) xs) - -let aboveListL = function - | [] -> emptyL - | [x] -> x - | x :: ys -> List.fold (fun pre y -> pre @@ y) x ys - -let optionL xL = function - | None -> wordL (tagUnionCase "None") - | Some x -> wordL (tagUnionCase "Some") -- (xL x) - -let listL xL xs = leftL Literals.leftBracket ^^ sepListL (sepL Literals.semicolon) (List.map xL xs) ^^ rightL Literals.rightBracket - -//-------------------------------------------------------------------------- -//INDEX: LayoutRenderer -//-------------------------------------------------------------------------- - -type LayoutRenderer<'a, 'b> = - abstract Start : unit -> 'b - abstract AddText : 'b -> TaggedText -> 'b - abstract AddBreak : 'b -> int -> 'b - abstract AddTag : 'b -> string * (string * string) list * bool -> 'b - abstract Finish : 'b -> 'a - -let renderL (rr: LayoutRenderer<_, _>) layout = - let rec addL z pos i layout k = - match layout with - | ObjLeaf _ -> failwith "ObjLeaf should never appear here" - (* pos is tab level *) - | Leaf (_, text, _) -> - k(rr.AddText z text, i + text.Text.Length) - | Node (l, r, Broken indent) -> - addL z pos i l <| - fun (z, _i) -> - let z, i = rr.AddBreak z (pos+indent), (pos+indent) - addL z (pos+indent) i r k - | Node (l, r, _) -> - let jm = Layout.JuxtapositionMiddle (l, r) - addL z pos i l <| - fun (z, i) -> - let z, i = if jm then z, i else rr.AddText z Literals.space, i+1 - let pos = i - addL z pos i r k - | Attr (tag, attrs, l) -> - let z = rr.AddTag z (tag, attrs, true) - addL z pos i l <| - fun (z, i) -> - let z = rr.AddTag z (tag, attrs, false) - k(z, i) - let pos = 0 - let z, i = rr.Start(), 0 - let z, _i = addL z pos i layout id - rr.Finish z - -/// string render -let stringR = - { new LayoutRenderer with - member _.Start () = [] - member _.AddText rstrs taggedText = taggedText.Text :: rstrs - member _.AddBreak rstrs n = (spaces n) :: "\n" :: rstrs - member _.AddTag z (_, _, _) = z - member _.Finish rstrs = String.Join("", Array.ofList (List.rev rstrs)) } - -type NoState = NoState -type NoResult = NoResult - -/// string render -let taggedTextListR collector = - { new LayoutRenderer with - member _.Start () = NoState - member _.AddText z text = collector text; z - member _.AddBreak rstrs n = collector Literals.lineBreak; collector (tagSpace(spaces n)); rstrs - member _.AddTag z (_, _, _) = z - member _.Finish rstrs = NoResult } - - -/// channel LayoutRenderer -let channelR (chan:TextWriter) = - { new LayoutRenderer with - member r.Start () = NoState - member r.AddText z s = chan.Write s.Text; z - member r.AddBreak z n = chan.WriteLine(); chan.Write (spaces n); z - member r.AddTag z (tag, attrs, start) = z - member r.Finish z = NoResult } - -/// buffer render -let bufferR os = - { new LayoutRenderer with - member r.Start () = NoState - member r.AddText z s = bprintf os "%s" s.Text; z - member r.AddBreak z n = bprintf os "\n"; bprintf os "%s" (spaces n); z - member r.AddTag z (tag, attrs, start) = z - member r.Finish z = NoResult } - -//-------------------------------------------------------------------------- -//INDEX: showL, outL are most common -//-------------------------------------------------------------------------- - -let showL layout = renderL stringR layout -let outL (chan:TextWriter) layout = renderL (channelR chan) layout |> ignore -let bufferL os layout = renderL (bufferR os) layout |> ignore \ No newline at end of file diff --git a/src/fsharp/layout.fsi b/src/fsharp/layout.fsi deleted file mode 100644 index b7aa6320b3d..00000000000 --- a/src/fsharp/layout.fsi +++ /dev/null @@ -1,233 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -/// DSL to create structured layout objects with optional breaks and render them -module public FSharp.Compiler.Layout - -open System.Text -open System.IO -open FSharp.Compiler.Range -open Internal.Utilities.StructuredFormat - -type layout = Internal.Utilities.StructuredFormat.Layout -type LayoutTag = Internal.Utilities.StructuredFormat.LayoutTag -type TaggedText = Internal.Utilities.StructuredFormat.TaggedText - -type NavigableTaggedText = - new : TaggedText * range -> NavigableTaggedText - member Range: range - interface TaggedText - -val mkNav : range -> TaggedText -> TaggedText - -val emptyL : Layout -val isEmptyL : Layout -> bool - -val wordL : TaggedText -> Layout - -val sepL : TaggedText -> Layout - -val rightL : TaggedText -> Layout - -val leftL : TaggedText -> Layout - -/// never break "glue" -val ( ^^ ) : Layout -> Layout -> Layout - -/// optional break, indent=0 -val ( ++ ) : Layout -> Layout -> Layout - -// optional break, indent=1 -val ( -- ) : Layout -> Layout -> Layout - -/// optional break, indent=2 -val ( --- ) : Layout -> Layout -> Layout - -/// optional break, indent=3 -val ( ---- ) : Layout -> Layout -> Layout - -/// optional break, indent=4 -val ( ----- ) : Layout -> Layout -> Layout - -/// non-optional break ident=0 -val ( @@ ) : Layout -> Layout -> Layout - -/// non-optional break ident=1 -val ( @@- ) : Layout -> Layout -> Layout - -/// non-optional break ident=2 -val ( @@-- ) : Layout -> Layout -> Layout - -val commaListL : Layout list -> Layout - -val spaceListL : Layout list -> Layout - -val semiListL : Layout list -> Layout - -val sepListL : Layout -> Layout list -> Layout - -val bracketL : Layout -> Layout - -val tupleL : Layout list -> Layout - -val aboveL : Layout -> Layout -> Layout - -val aboveListL : Layout list -> Layout - -val optionL : ('a -> Layout) -> 'a option -> Layout - -val listL : ('a -> Layout) -> 'a list -> Layout - -val showL : Layout -> string - -val outL : TextWriter -> Layout -> unit - -val bufferL : StringBuilder -> Layout -> unit - -module TaggedTextOps = - val tagActivePatternCase : (string -> TaggedText) - val tagActivePatternResult : (string -> TaggedText) - val tagAlias : (string -> TaggedText) - val tagClass : (string -> TaggedText) - val tagUnion : (string -> TaggedText) - val tagUnionCase : (string -> TaggedText) - val tagDelegate : (string -> TaggedText) - val tagEnum : (string -> TaggedText) - val tagEvent : (string -> TaggedText) - val tagField : (string -> TaggedText) - val tagInterface : (string -> TaggedText) - val tagKeyword : (string -> TaggedText) - val tagLineBreak : (string -> TaggedText) - val tagMethod : (string -> TaggedText) - val tagLocal : (string -> TaggedText) - val tagRecord : (string -> TaggedText) - val tagRecordField : (string -> TaggedText) - val tagModule : (string -> TaggedText) - val tagModuleBinding : (string -> TaggedText) - val tagFunction : (string -> TaggedText) - val tagMember : (string -> TaggedText) - val tagNamespace : (string -> TaggedText) - val tagNumericLiteral : (string -> TaggedText) - val tagOperator : (string -> TaggedText) - val tagParameter : (string -> TaggedText) - val tagProperty : (string -> TaggedText) - val tagSpace : (string -> TaggedText) - val tagStringLiteral : (string -> TaggedText) - val tagStruct : (string -> TaggedText) - val tagTypeParameter : (string -> TaggedText) - val tagText : (string -> TaggedText) - val tagPunctuation : (string -> TaggedText) - val tagUnknownEntity : (string -> TaggedText) - val tagUnknownType : (string -> TaggedText) - - module Literals = - // common tagged literals - val lineBreak : TaggedText - val space : TaggedText - val comma : TaggedText - val dot : TaggedText - val semicolon : TaggedText - val leftParen : TaggedText - val rightParen : TaggedText - val leftBracket : TaggedText - val rightBracket : TaggedText - val leftBrace: TaggedText - val rightBrace : TaggedText - val leftBraceBar: TaggedText - val rightBraceBar : TaggedText - val leftAngle: TaggedText - val rightAngle: TaggedText - val equals : TaggedText - val arrow : TaggedText - val questionMark : TaggedText - val colon: TaggedText - val minus: TaggedText - val keywordTrue: TaggedText - val keywordFalse: TaggedText - -module SepL = - val dot: Layout - val star: Layout - val colon: Layout - val questionMark: Layout - val leftParen: Layout - val comma: Layout - val space: Layout - val leftBracket: Layout - val leftAngle: Layout - val lineBreak: Layout - val rightParen: Layout - -module WordL = - val arrow: Layout - val star: Layout - val colon: Layout - val equals: Layout - val keywordNew: Layout - val structUnit: Layout - val keywordStatic: Layout - val keywordMember: Layout - val keywordVal: Layout - val keywordEvent: Layout - val keywordWith: Layout - val keywordSet: Layout - val keywordGet: Layout - val keywordTrue: Layout - val keywordFalse: Layout - val bar: Layout - val keywordStruct: Layout - val keywordInherit: Layout - val keywordEnd: Layout - val keywordNested: Layout - val keywordType: Layout - val keywordDelegate: Layout - val keywordOf: Layout - val keywordInternal: Layout - val keywordPrivate: Layout - val keywordAbstract: Layout - val keywordOverride: Layout - val keywordEnum: Layout - -module LeftL = - val leftParen: Layout - val questionMark: Layout - val colon: Layout - val leftBracketAngle: Layout - val leftBracketBar: Layout - val keywordTypeof: Layout - val keywordTypedefof: Layout - -module RightL = - val comma: Layout - val rightParen: Layout - val colon: Layout - val rightBracket: Layout - val rightAngle: Layout - val rightBracketAngle: Layout - val rightBracketBar: Layout - -/// Render a Layout yielding an 'a using a 'b (hidden state) type -type LayoutRenderer<'a,'b> = - abstract Start : unit -> 'b - abstract AddText : 'b -> TaggedText -> 'b - abstract AddBreak : 'b -> int -> 'b - abstract AddTag : 'b -> string * (string * string) list * bool -> 'b - abstract Finish : 'b -> 'a - -type NoState = NoState -type NoResult = NoResult - -/// Run a render on a Layout -val renderL : LayoutRenderer<'b,'a> -> Layout -> 'b - -/// Render layout to string -val stringR : LayoutRenderer - -/// Render layout to channel -val channelR : TextWriter -> LayoutRenderer - -/// Render layout to StringBuilder -val bufferR : StringBuilder -> LayoutRenderer - -/// Render layout to collector of TaggedText -val taggedTextListR : collector: (TaggedText -> unit) -> LayoutRenderer - diff --git a/src/fsharp/lex.fsl b/src/fsharp/lex.fsl index e46718a3d1f..40da3928359 100644 --- a/src/fsharp/lex.fsl +++ b/src/fsharp/lex.fsl @@ -5,8 +5,8 @@ module internal FSharp.Compiler.Lexer //------------------------------------------------------------------------ -// The Lexer. Some of the complication arises from the fact it is -// reused by the Visual Studio mode to do partial lexing reporting +// The Lexer. Some of the complication arises from the fact it is +// reused by the Visual Studio mode to do partial lexing reporting // whitespace etc. //----------------------------------------------------------------------- @@ -15,20 +15,21 @@ open System.Globalization open System.Text open Internal.Utilities +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open Internal.Utilities.Text.Lexing open FSharp.Compiler open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features +open FSharp.Compiler.IO open FSharp.Compiler.Lexhelp -open FSharp.Compiler.Lib -open FSharp.Compiler.Range open FSharp.Compiler.ParseHelpers open FSharp.Compiler.Parser -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range module Ranges = /// Whether valid as signed int8 when a minus sign is prepended, compares true to 0x80 @@ -47,7 +48,7 @@ module Ranges = let lexeme (lexbuf : UnicodeLexing.Lexbuf) = UnicodeLexing.Lexbuf.LexemeString lexbuf /// Trim n chars from both sides of lexbuf, return string -let lexemeTrimBoth (lexbuf : UnicodeLexing.Lexbuf) (n:int) (m:int) = +let lexemeTrimBoth (lexbuf : UnicodeLexing.Lexbuf) (n:int) (m:int) = let s = lexbuf.LexemeView s.Slice(n, s.Length - (n+m)).ToString() @@ -71,26 +72,26 @@ let fail args (lexbuf:UnicodeLexing.Lexbuf) msg dflt = // version of the F# core library parsing code with the call to "Trim" // removed, which appears in profiling runs as a small but significant cost. -let getSign32 (s:string) (p:byref) l = - if (l >= p + 1 && s.[p] = '-') - then p <- p + 1; -1 - else 1 +let getSign32 (s:string) (p:byref) l = + if (l >= p + 1 && s.[p] = '-') + then p <- p + 1; -1 + else 1 -let isOXB c = +let isOXB c = let c = Char.ToLowerInvariant c c = 'x' || c = 'o' || c = 'b' -let is0OXB (s:string) p l = +let is0OXB (s:string) p l = l >= p + 2 && s.[p] = '0' && isOXB s.[p+1] -let get0OXB (s:string) (p:byref) l = +let get0OXB (s:string) (p:byref) l = if is0OXB s p l then let r = Char.ToLowerInvariant s.[p+1] in p <- p + 2; r - else 'd' + else 'd' let formatError() = raise (new System.FormatException(SR.GetString("bad format string"))) -let parseBinaryUInt64 (s:string) = +let parseBinaryUInt64 (s:string) = Convert.ToUInt64(s, 2) let parseOctalUInt64 (s:string) = @@ -101,58 +102,74 @@ let removeUnderscores (s:string) = | null -> null | s -> s.Replace("_", "") -let parseInt32 (s:string) = +let parseInt32 (s:string) = let s = removeUnderscores s - let l = s.Length - let mutable p = 0 - let sign = getSign32 s &p l - let specifier = get0OXB s &p l - match Char.ToLower(specifier,CultureInfo.InvariantCulture) with + let l = s.Length + let mutable p = 0 + let sign = getSign32 s &p l + let specifier = get0OXB s &p l + match Char.ToLower(specifier,CultureInfo.InvariantCulture) with | 'x' -> sign * (int32 (Convert.ToUInt32(UInt64.Parse(s.Substring(p), NumberStyles.AllowHexSpecifier,CultureInfo.InvariantCulture)))) | 'b' -> sign * (int32 (Convert.ToUInt32(parseBinaryUInt64 (s.Substring(p))))) | 'o' -> sign * (int32 (Convert.ToUInt32(parseOctalUInt64 (s.Substring(p))))) | _ -> Int32.Parse(s, NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture) - -let lexemeTrimRightToInt32 args lexbuf n = + +let lexemeTrimRightToInt32 args lexbuf n = try parseInt32 (lexemeTrimRight lexbuf n) with _ -> fail args lexbuf (FSComp.SR.lexOutsideIntegerRange()) 0 //-------------------------- // Checks -let checkExprOp (lexbuf:UnicodeLexing.Lexbuf) = - if lexbuf.LexemeContains ':' then +let checkExprOp (lexbuf:UnicodeLexing.Lexbuf) = + if lexbuf.LexemeContains ':' then deprecatedWithError (FSComp.SR.lexCharNotAllowedInOperatorNames(":")) lexbuf.LexemeRange - if lexbuf.LexemeContains '$' then - deprecatedWithError (FSComp.SR.lexCharNotAllowedInOperatorNames("$")) lexbuf.LexemeRange + if lexbuf.LexemeContains '$' then + deprecatedWithError (FSComp.SR.lexCharNotAllowedInOperatorNames("$")) lexbuf.LexemeRange let unexpectedChar lexbuf = LEX_FAILURE (FSComp.SR.lexUnexpectedChar(lexeme lexbuf)) +/// Arbitrary value +[] +let StringCapacity = 100 + let startString args (lexbuf: UnicodeLexing.Lexbuf) = - let buf = ByteBuffer.Create 100 - let m = lexbuf.LexemeRange - let startp = lexbuf.StartPos + let buf = ByteBuffer.Create StringCapacity + let m = lexbuf.LexemeRange + let startp = lexbuf.StartPos let fin = - LexerStringFinisher (fun buf kind isPart cont -> - // Adjust the start-of-token mark back to the true start of the token + LexerStringFinisher (fun buf kind context cont -> + // Adjust the start-of-token mark back to the true start of the token lexbuf.StartPos <- startp + let isPart = context.HasFlag(LexerStringFinisherContext.InterpolatedPart) + let isVerbatim = context.HasFlag(LexerStringFinisherContext.Verbatim) + let isTripleQuote = context.HasFlag(LexerStringFinisherContext.TripleQuote) + if kind.IsByteString then - if kind.IsInterpolated then + let synByteStringKind = if isVerbatim then SynByteStringKind.Verbatim else SynByteStringKind.Regular + if kind.IsInterpolated then fail args lexbuf (FSComp.SR.lexByteStringMayNotBeInterpolated()) () - BYTEARRAY (Lexhelp.stringBufferAsBytes buf, cont) + BYTEARRAY (Lexhelp.stringBufferAsBytes buf, synByteStringKind, cont) elif Lexhelp.stringBufferIsBytes buf then - BYTEARRAY (Lexhelp.stringBufferAsBytes buf, cont) + BYTEARRAY (Lexhelp.stringBufferAsBytes buf, synByteStringKind, cont) else fail args lexbuf (FSComp.SR.lexByteArrayCannotEncode()) () - BYTEARRAY (Lexhelp.stringBufferAsBytes buf, cont) - elif kind.IsInterpolated then + BYTEARRAY (Lexhelp.stringBufferAsBytes buf, synByteStringKind, cont) + elif kind.IsInterpolated then let s = Lexhelp.stringBufferAsString buf - if kind.IsInterpolatedFirst then - if isPart then - INTERP_STRING_BEGIN_PART (s, cont) + if kind.IsInterpolatedFirst then + let synStringKind = + if isTripleQuote then + SynStringKind.TripleQuote + elif isVerbatim then + SynStringKind.Verbatim + else + SynStringKind.Regular + if isPart then + INTERP_STRING_BEGIN_PART (s, synStringKind, cont) else - INTERP_STRING_BEGIN_END (s, cont) + INTERP_STRING_BEGIN_END (s, synStringKind, cont) else if isPart then INTERP_STRING_PART (s, cont) @@ -160,36 +177,43 @@ let startString args (lexbuf: UnicodeLexing.Lexbuf) = INTERP_STRING_END (s, cont) else let s = Lexhelp.stringBufferAsString buf - STRING (s, cont)) + let synStringKind = + if isVerbatim then + SynStringKind.Verbatim + elif isTripleQuote then + SynStringKind.TripleQuote + else + SynStringKind.Regular + STRING (s, synStringKind, cont)) buf,fin,m - - -// Utility functions for processing XML documentation + + +// Utility functions for processing XML documentation let trySaveXmlDoc (lexbuf: LexBuffer) (buff: (range * StringBuilder) option) = - match buff with - | None -> () + match buff with + | None -> () | Some (start, sb) -> let xmlCommentLineRange = mkFileIndexRange start.FileIndex start.Start (posOfLexPosition lexbuf.StartPos) LexbufLocalXmlDocStore.SaveXmlDocLine (lexbuf, sb.ToString(), xmlCommentLineRange) - + let tryAppendXmlDoc (buff: (range * StringBuilder) option) (s:string) = - match buff with + match buff with | None -> () | Some (_, sb) -> ignore(sb.Append s) -// Utilities for parsing #if/#else/#endif +// Utilities for parsing #if/#else/#endif -let shouldStartLine args lexbuf (m:range) err tok = +let shouldStartLine args lexbuf (m:range) err tok = if (m.StartColumn <> 0) then fail args lexbuf err tok else tok -let shouldStartFile args lexbuf (m:range) err tok = +let shouldStartFile args lexbuf (m:range) err tok = if (m.StartColumn <> 0 || m.StartLine <> 1) then fail args lexbuf err tok else tok -let evalIfDefExpression startPos isFeatureSupported args (lookup:string->bool) (lexed:string) = - let lexbuf = LexBuffer.FromChars (isFeatureSupported, lexed.ToCharArray ()) +let evalIfDefExpression startPos reportLibraryOnlyFeatures isFeatureSupported args (lookup:string->bool) (lexed:string) = + let lexbuf = LexBuffer.FromChars (reportLibraryOnlyFeatures, isFeatureSupported, lexed.ToCharArray ()) lexbuf.StartPos <- startPos lexbuf.EndPos <- startPos let tokenStream = FSharp.Compiler.PPLexer.tokenstream args @@ -228,7 +252,7 @@ let ignored_op_char = '.' | '$' | '?' let separator = '_' -let xinteger = +let xinteger = ( '0' ('x'| 'X') hex ((hex | separator)* hex)? | '0' ('o'| 'O') (['0'-'7']) (((['0'-'7']) | separator)* (['0'-'7']))? | '0' ('b'| 'B') (['0'-'1']) (((['0'-'1']) | separator)* (['0'-'1']))?) @@ -237,17 +261,17 @@ let integer = digit ((digit | separator)* digit)? let int8 = integer 'y' -let uint8 = (xinteger | integer) 'u' 'y' +let uint8 = (xinteger | integer) 'u' 'y' let int16 = integer 's' let uint16 = (xinteger | integer) 'u' 's' -let int = integer +let int = integer let int32 = integer 'l' -let uint32 = (xinteger | integer) 'u' +let uint32 = (xinteger | integer) 'u' let uint32l = (xinteger | integer) 'u' 'l' @@ -255,29 +279,29 @@ let nativeint = (xinteger | integer) 'n' let unativeint = (xinteger | integer) 'u' 'n' -let int64 = (xinteger | integer) 'L' +let int64 = (xinteger | integer) 'L' -let uint64 = (xinteger | integer) ('u' | 'U') 'L' +let uint64 = (xinteger | integer) ('u' | 'U') 'L' let xint8 = xinteger 'y' let xint16 = xinteger 's' -let xint = xinteger +let xint = xinteger let xint32 = xinteger 'l' -let floatp = digit ((digit | separator)* digit)? '.' (digit ((digit | separator)* digit)?)? +let floatp = digit ((digit | separator)* digit)? '.' (digit ((digit | separator)* digit)?)? let floate = digit ((digit | separator)* digit)? ('.' (digit ((digit | separator)* digit)?)? )? ('e'| 'E') ['+' '-']? digit ((digit | separator)* digit)? -let float = floatp | floate +let float = floatp | floate let bignum = integer ('I' | 'N' | 'Z' | 'Q' | 'R' | 'G') let ieee64 = float -let ieee32 = float ('f' | 'F') +let ieee32 = float ('f' | 'F') let ieee32_dotless_no_exponent = integer ('f' | 'F') @@ -293,7 +317,7 @@ let char = '\'' ( [^'\\''\n''\r''\t''\b'] | escape_char) '\'' let trigraph = '\\' digit digit digit -let hexGraphShort = '\\' 'x' hex hex +let hexGraphShort = '\\' 'x' hex hex let unicodeGraphShort = '\\' 'u' hex hex hex hex @@ -305,33 +329,33 @@ let connecting_char = '\Pc' let combining_char = '\Mn' | '\Mc' -let formatting_char = '\Cf' +let formatting_char = '\Cf' -let ident_start_char = +let ident_start_char = letter | '_' -let ident_char = +let ident_char = letter - | connecting_char - | combining_char - | formatting_char - | digit + | connecting_char + | combining_char + | formatting_char + | digit | ['\''] - + let ident = ident_start_char ident_char* rule token args skip = parse - | ident + | ident { Keywords.KeywordOrIdentifierToken args lexbuf (lexeme lexbuf) } - | "do!" - { DO_BANG } + | "do!" + { DO_BANG } - | "yield!" - { YIELD_BANG(true) } + | "yield!" + { YIELD_BANG(true) } - | "return!" - { YIELD_BANG(false) } + | "return!" + { YIELD_BANG(false) } | "match!" { MATCH_BANG } @@ -339,23 +363,23 @@ rule token args skip = parse | "and!" { AND_BANG(false) } - | ident '!' - { let tok = Keywords.KeywordOrIdentifierToken args lexbuf (lexemeTrimRight lexbuf 1) - match tok with + | ident '!' + { let tok = Keywords.KeywordOrIdentifierToken args lexbuf (lexemeTrimRight lexbuf 1) + match tok with | LET _ -> BINDER (lexemeTrimRight lexbuf 1) - | _ -> fail args lexbuf (FSComp.SR.lexIdentEndInMarkReserved("!")) (Keywords.KeywordOrIdentifierToken args lexbuf (lexeme lexbuf)) } + | _ -> fail args lexbuf (FSComp.SR.lexIdentEndInMarkReserved("!")) (Keywords.KeywordOrIdentifierToken args lexbuf (lexeme lexbuf)) } - | ident ('#') + | ident ('#') { fail args lexbuf (FSComp.SR.lexIdentEndInMarkReserved("#")) (Keywords.KeywordOrIdentifierToken args lexbuf (lexeme lexbuf)) } - | int8 + | int8 { let n = lexemeTrimRightToInt32 args lexbuf 1 - // Allow to parse as min_int. Allowed only because we parse '-' as an operator. + // Allow to parse as min_int. Allowed only because we parse '-' as an operator. if Ranges.isInt8BadMax n then INT8(SByte.MinValue, true (* 'true' = 'bad'*) ) else if n > int SByte.MaxValue || n < int SByte.MinValue then fail args lexbuf (FSComp.SR.lexOutsideEightBitSigned()) (INT8(0y, false)) else INT8(sbyte n, false) } - | xint8 + | xint8 { let n = lexemeTrimRightToInt32 args lexbuf 1 if n > int Byte.MaxValue || n < 0 then fail args lexbuf (FSComp.SR.lexOutsideEightBitSignedHex()) (INT8(0y, false)) else INT8(sbyte(byte(n)), false) } @@ -365,93 +389,93 @@ rule token args skip = parse if n > int Byte.MaxValue || n < 0 then fail args lexbuf (FSComp.SR.lexOutsideEightBitUnsigned()) (UINT8(0uy)) else UINT8(byte n) } - | int16 + | int16 { let n = lexemeTrimRightToInt32 args lexbuf 1 - // Allow to parse as min_int. Allowed only because we parse '-' as an operator. + // Allow to parse as min_int. Allowed only because we parse '-' as an operator. if Ranges.isInt16BadMax n then INT16(Int16.MinValue, true (* 'true' = 'bad'*) ) else if n > int Int16.MaxValue || n < int Int16.MinValue then fail args lexbuf (FSComp.SR.lexOutsideSixteenBitSigned()) (INT16(0s, false)) else INT16(int16 n, false) } - | xint16 + | xint16 { let n = lexemeTrimRightToInt32 args lexbuf 1 if n > int UInt16.MaxValue || n < 0 then fail args lexbuf (FSComp.SR.lexOutsideSixteenBitSigned()) (INT16(0s,false)) else INT16(int16(uint16(n)), false) } - | uint16 + | uint16 { let n = lexemeTrimRightToInt32 args lexbuf 2 if n > int UInt16.MaxValue || n < 0 then fail args lexbuf (FSComp.SR.lexOutsideSixteenBitUnsigned()) (UINT16(0us)) else UINT16(uint16 n) } - | int '.' '.' + | int '.' '.' { let s = removeUnderscores (lexemeTrimRight lexbuf 2) - // Allow to parse as min_int. Allowed only because we parse '-' as an operator. + // Allow to parse as min_int. Allowed only because we parse '-' as an operator. if Ranges.isInt32BadMax s then INT32_DOT_DOT(Int32.MinValue, true (* 'true' = 'bad'*) ) else let n = try int32 s with _ -> fail args lexbuf (FSComp.SR.lexOutsideThirtyTwoBitSigned()) 0 INT32_DOT_DOT(n, false) - } + } - | xint - | int + | xint + | int { let s = removeUnderscores (lexeme lexbuf) - // Allow to parse as min_int. Allowed only because we parse '-' as an operator. + // Allow to parse as min_int. Allowed only because we parse '-' as an operator. if Ranges.isInt32BadMax s then INT32(Int32.MinValue, true (* 'true' = 'bad'*) ) else let n = try int32 s with _ -> fail args lexbuf (FSComp.SR.lexOutsideThirtyTwoBitSigned()) 0 INT32(n, false) - } + } - | xint32 - | int32 + | xint32 + | int32 { let s = removeUnderscores (lexemeTrimRight lexbuf 1) - // Allow to parse as min_int. Allowed only because we parse '-' as an operator. + // Allow to parse as min_int. Allowed only because we parse '-' as an operator. if Ranges.isInt32BadMax s then INT32(Int32.MinValue, true (* 'true' = 'bad'*) ) else let n = try int32 s with _ -> fail args lexbuf (FSComp.SR.lexOutsideThirtyTwoBitSigned()) 0 INT32(n, false) - } + } | uint32 - { + { let s = removeUnderscores (lexemeTrimRight lexbuf 1) - let n = + let n = try int64 s with _ -> fail args lexbuf (FSComp.SR.lexOutsideThirtyTwoBitUnsigned()) 0L if n > int64 UInt32.MaxValue || n < 0L then fail args lexbuf (FSComp.SR.lexOutsideThirtyTwoBitUnsigned()) (UINT32(0u)) else - UINT32(uint32 (uint64 n)) } + UINT32(uint32 (uint64 n)) } | uint32l - { + { let s = removeUnderscores (lexemeTrimRight lexbuf 2) - let n = + let n = try int64 s with _ -> fail args lexbuf (FSComp.SR.lexOutsideThirtyTwoBitUnsigned()) 0L if n > int64 UInt32.MaxValue || n < 0L then fail args lexbuf (FSComp.SR.lexOutsideThirtyTwoBitUnsigned()) (UINT32(0u)) else - UINT32(uint32 (uint64 n)) } + UINT32(uint32 (uint64 n)) } - | int64 + | int64 { let s = removeUnderscores (lexemeTrimRight lexbuf 1) - // Allow to parse as min_int. Stupid but allowed because we parse '-' as an operator. + // Allow to parse as min_int. Stupid but allowed because we parse '-' as an operator. if Ranges.isInt64BadMax s then INT64(Int64.MinValue, true (* 'true' = 'bad'*) ) else - let n = + let n = try int64 s with _ -> fail args lexbuf (FSComp.SR.lexOutsideSixtyFourBitSigned()) 0L INT64(n,false) } - | uint64 + | uint64 { let s = removeUnderscores (lexemeTrimRight lexbuf 2) - let n = + let n = try uint64 s with _ -> fail args lexbuf (FSComp.SR.lexOutsideSixtyFourBitUnsigned()) 0UL - UINT64(n) } + UINT64(n) } - | nativeint + | nativeint { let s = removeUnderscores (lexemeTrimRight lexbuf 1) - // Allow to parse as min_nativeint. Stupid but allowed because we parse '-' as an operator. + // Allow to parse as min_nativeint. Stupid but allowed because we parse '-' as an operator. if Ranges.isInt64BadMax s then NATIVEINT(Int64.MinValue, true) else - let n = + let n = try int64 s with _ -> fail args lexbuf (FSComp.SR.lexOutsideNativeSigned()) 0L NATIVEINT(n,false) } - | unativeint - { try + | unativeint + { try UNATIVEINT(uint64 (removeUnderscores (lexemeTrimRight lexbuf 2))) with _ -> fail args lexbuf (FSComp.SR.lexOutsideNativeUnsigned()) (UNATIVEINT(0UL)) } @@ -468,137 +492,137 @@ rule token args skip = parse | ieee64 { IEEE64 (try float(lexeme lexbuf) with _ -> fail args lexbuf (FSComp.SR.lexInvalidFloat()) 0.0) } - | decimal - { try + | decimal + { try let s = removeUnderscores (lexemeTrimRight lexbuf 1) - // This implements a range check for decimal literals + // This implements a range check for decimal literals let d = System.Decimal.Parse(s,System.Globalization.NumberStyles.AllowExponent ||| System.Globalization.NumberStyles.Number,System.Globalization.CultureInfo.InvariantCulture) - DECIMAL d - with + DECIMAL d + with e -> fail args lexbuf (FSComp.SR.lexOusideDecimal()) (DECIMAL (decimal 0)) } - | xieee32 - { + | xieee32 + { let s = removeUnderscores (lexemeTrimRight lexbuf 2) - // Even though the intermediate step is an int64, display the "invalid float" message, since it will be less confusing to the user - let n64 = (try (int64 s) with _ -> fail args lexbuf (FSComp.SR.lexInvalidFloat()) 0L) + // Even though the intermediate step is an int64, display the "invalid float" message, since it will be less confusing to the user + let n64 = (try (int64 s) with _ -> fail args lexbuf (FSComp.SR.lexInvalidFloat()) 0L) if n64 > 0xFFFFFFFFL || n64 < 0L then fail args lexbuf (FSComp.SR.lexOusideThirtyTwoBitFloat()) (IEEE32 0.0f) else IEEE32 (System.BitConverter.ToSingle(System.BitConverter.GetBytes(int32 (uint32 (uint64 n64))),0)) } - | xieee64 - { - let n64 = (try int64 (removeUnderscores (lexemeTrimRight lexbuf 2)) with _ -> fail args lexbuf (FSComp.SR.lexInvalidFloat()) 0L) + | xieee64 + { + let n64 = (try int64 (removeUnderscores (lexemeTrimRight lexbuf 2)) with _ -> fail args lexbuf (FSComp.SR.lexInvalidFloat()) 0L) IEEE64 (System.BitConverter.Int64BitsToDouble(n64)) } - - | bignum - { let s = lexeme lexbuf + + | bignum + { let s = lexeme lexbuf BIGNUM (removeUnderscores (lexemeTrimRight lexbuf 1), s.[s.Length-1..s.Length-1]) } | (int | xint | float) ident_char+ { fail args lexbuf (FSComp.SR.lexInvalidNumericLiteral()) (INT32(0,false)) } - + | char - { let s = lexeme lexbuf + { let s = lexeme lexbuf CHAR (if s.[1] = '\\' then escape s.[2] else s.[1]) } - | char 'B' - { let s = lexeme lexbuf + | char 'B' + { let s = lexeme lexbuf let x = int32 (if s.[1] = '\\' then escape s.[2] else s.[1]) - if x < 0 || x > 127 then + if x < 0 || x > 127 then fail args lexbuf (FSComp.SR.lexInvalidByteLiteral()) (UINT8(byte 0)) else UINT8 (byte(x)) } - + | '\'' trigraph '\'' - { let s = lexeme lexbuf - let c = trigraph s.[2] s.[3] s.[4] + { let s = lexeme lexbuf + let c = trigraph s.[2] s.[3] s.[4] let x = int32 c - if x < 0 || x > 255 then + if x < 0 || x > 255 then fail args lexbuf (FSComp.SR.lexInvalidCharLiteral()) (CHAR c) else CHAR c } | '\'' trigraph '\'' 'B' - { let s = lexeme lexbuf + { let s = lexeme lexbuf let x = int32 (trigraph s.[2] s.[3] s.[4]) - if x < 0 || x > 255 then + if x < 0 || x > 255 then fail args lexbuf (FSComp.SR.lexInvalidByteLiteral()) (UINT8(byte 0)) else UINT8 (byte(x)) } | '\'' unicodeGraphShort '\'' 'B' { let x = int32 (unicodeGraphShort (lexemeTrimBoth lexbuf 3 2)) - if x < 0 || x > 127 then + if x < 0 || x > 127 then fail args lexbuf (FSComp.SR.lexInvalidByteLiteral()) (UINT8(byte 0)) else UINT8 (byte(x)) } - + | '\'' hexGraphShort '\'' { CHAR (char (int32 (hexGraphShort (lexemeTrimBoth lexbuf 3 1)))) } | '\'' unicodeGraphShort '\'' { CHAR (char (int32 (unicodeGraphShort (lexemeTrimBoth lexbuf 3 1)))) } - | '\'' unicodeGraphLong '\'' + | '\'' unicodeGraphLong '\'' { match unicodeGraphLong (lexemeTrimBoth lexbuf 3 1) with | SingleChar(c) -> CHAR (char c) | _ -> fail args lexbuf (FSComp.SR.lexThisUnicodeOnlyInStringLiterals()) (CHAR (char 0)) } - | "(*IF-FSHARP" + | "(*IF-FSHARP" { if not skip then COMMENT (LexCont.Token (args.ifdefStack, args.stringNest)) else token args skip lexbuf } - | "(*F#" - { if not skip then COMMENT (LexCont.Token (args.ifdefStack, args.stringNest)) + | "(*F#" + { if not skip then COMMENT (LexCont.Token (args.ifdefStack, args.stringNest)) else token args skip lexbuf } - | "ENDIF-FSHARP*)" + | "ENDIF-FSHARP*)" { if not skip then COMMENT (LexCont.Token (args.ifdefStack, args.stringNest)) else token args skip lexbuf } - | "F#*)" - { if not skip then COMMENT (LexCont.Token (args.ifdefStack, args.stringNest)) + | "F#*)" + { if not skip then COMMENT (LexCont.Token (args.ifdefStack, args.stringNest)) else token args skip lexbuf } - | "(*)" + | "(*)" { LPAREN_STAR_RPAREN } | "(*" - { let m = lexbuf.LexemeRange + { let m = lexbuf.LexemeRange if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, 1, m)) else comment (1,m,args) skip lexbuf } - | "(*IF-CAML*)" | "(*IF-OCAML*)" - { let m = lexbuf.LexemeRange + | "(*IF-CAML*)" | "(*IF-OCAML*)" + { let m = lexbuf.LexemeRange if not skip then COMMENT (LexCont.MLOnly(args.ifdefStack, args.stringNest, m)) else mlOnly m args skip lexbuf } - | '"' - { let buf, fin, m = startString args lexbuf - + | '"' + { let buf, fin, m = startString args lexbuf + // Single quote in triple quote ok, others disallowed - match args.stringNest with + match args.stringNest with | (_, LexerStringStyle.TripleQuote, _) :: _ -> () | _ :: _ -> errorR(Error(FSComp.SR.lexSingleQuoteInSingleQuote(), m)) | [] -> () if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, LexerStringKind.String, m)) else singleQuoteString (buf, fin, m, LexerStringKind.String, args) skip lexbuf } - - | '$' '"' '"' '"' - { let buf, fin, m = startString args lexbuf - + + | '$' '"' '"' '"' + { let buf, fin, m = startString args lexbuf + // Single quote in triple quote ok, others disallowed - match args.stringNest with + match args.stringNest with | _ :: _ -> errorR(Error(FSComp.SR.lexTripleQuoteInTripleQuote(), m)) | [] -> () if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, LexerStringKind.InterpolatedStringFirst, m)) else tripleQuoteString (buf, fin, m, LexerStringKind.InterpolatedStringFirst, args) skip lexbuf } - - | '$' '"' - { let buf,fin,m = startString args lexbuf - + + | '$' '"' + { let buf,fin,m = startString args lexbuf + // Single quote in triple quote ok, others disallowed - match args.stringNest with + match args.stringNest with | (_, LexerStringStyle.TripleQuote, _) :: _ -> () | _ :: _ -> errorR(Error(FSComp.SR.lexSingleQuoteInSingleQuote(), m)) | _ -> () @@ -606,22 +630,22 @@ rule token args skip = parse if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, LexerStringKind.InterpolatedStringFirst, m)) else singleQuoteString (buf, fin, m, LexerStringKind.InterpolatedStringFirst, args) skip lexbuf } - | '"' '"' '"' - { let buf, fin, m = startString args lexbuf - + | '"' '"' '"' + { let buf, fin, m = startString args lexbuf + // Single quote in triple quote ok, others disallowed - match args.stringNest with + match args.stringNest with | _ :: _ -> errorR(Error(FSComp.SR.lexTripleQuoteInTripleQuote(), m)) | _ -> () if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, LexerStringKind.String, m)) else tripleQuoteString (buf, fin, m, LexerStringKind.String, args) skip lexbuf } - - | '@' '"' - { let buf, fin, m = startString args lexbuf - + + | '@' '"' + { let buf, fin, m = startString args lexbuf + // Single quote in triple quote ok, others disallowed - match args.stringNest with + match args.stringNest with | (_, LexerStringStyle.TripleQuote, _) :: _ -> () | _ :: _ -> errorR(Error(FSComp.SR.lexSingleQuoteInSingleQuote(), m)) | _ -> () @@ -629,11 +653,11 @@ rule token args skip = parse if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, LexerStringKind.String, m)) else verbatimString (buf, fin, m, LexerStringKind.String, args) skip lexbuf } - | ("$@" | "@$") '"' - { let buf, fin, m = startString args lexbuf - + | ("$@" | "@$") '"' + { let buf, fin, m = startString args lexbuf + // Single quote in triple quote ok, others disallowed - match args.stringNest with + match args.stringNest with | (_, LexerStringStyle.TripleQuote, _) :: _ -> () | _ :: _ -> errorR(Error(FSComp.SR.lexSingleQuoteInSingleQuote(), m)) | _ -> () @@ -641,92 +665,92 @@ rule token args skip = parse if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, LexerStringKind.InterpolatedStringFirst, m)) else verbatimString (buf, fin, m, LexerStringKind.InterpolatedStringFirst, args) skip lexbuf } - | truewhite+ + | truewhite+ { if skip then token args skip lexbuf else WHITESPACE (LexCont.Token(args.ifdefStack, args.stringNest)) } - | offwhite+ + | offwhite+ { if args.lightStatus.Status then errorR(Error(FSComp.SR.lexTabsNotAllowed(), lexbuf.LexemeRange)) if not skip then WHITESPACE (LexCont.Token(args.ifdefStack, args.stringNest)) else token args skip lexbuf } - | "////" op_char* - { // 4+ slash are 1-line comments, online 3 slash are XmlDoc - let m = lexbuf.LexemeRange + | "////" op_char* + { // 4+ slash are 1-line comments, online 3 slash are XmlDoc + let m = lexbuf.LexemeRange if not skip then LINE_COMMENT (LexCont.SingleLineComment(args.ifdefStack, args.stringNest, 1, m)) else singleLineComment (None,1,m,args) skip lexbuf } | "///" op_char* - { // Match exactly 3 slash, 4+ slash caught by preceding rule + { // Match exactly 3 slash, 4+ slash caught by preceding rule let m = lexbuf.LexemeRange - let doc = lexemeTrimLeft lexbuf 3 + let doc = lexemeTrimLeft lexbuf 3 let sb = (new StringBuilder(100)).Append(doc) - if not skip then LINE_COMMENT (LexCont.SingleLineComment(args.ifdefStack, args.stringNest, 1, m)) + if not skip then LINE_COMMENT (LexCont.SingleLineComment(args.ifdefStack, args.stringNest, 1, m)) else singleLineComment (Some (m, sb),1,m,args) skip lexbuf } | "//" op_char* - { // Need to read all operator symbols too, otherwise it might be parsed by a rule below + { // Need to read all operator symbols too, otherwise it might be parsed by a rule below let m = lexbuf.LexemeRange if not skip then LINE_COMMENT (LexCont.SingleLineComment(args.ifdefStack, args.stringNest, 1, m)) else singleLineComment (None,1,m,args) skip lexbuf } - | newline + | newline { newline lexbuf if not skip then WHITESPACE (LexCont.Token(args.ifdefStack, args.stringNest)) else token args skip lexbuf } - | '`' '`' ([^'`' '\n' '\r' '\t'] | '`' [^'`''\n' '\r' '\t']) + '`' '`' + | '`' '`' ([^'`' '\n' '\r' '\t'] | '`' [^'`''\n' '\r' '\t']) + '`' '`' { Keywords.IdentifierToken args lexbuf (lexemeTrimBoth lexbuf 2 2) } | ('#' anywhite* | "#line" anywhite+ ) digit+ anywhite* ('@'? "\"" [^'\n''\r''"']+ '"')? anywhite* newline - { let pos = lexbuf.EndPos - if skip then - let s = lexeme lexbuf - let rec parseLeadingDirective n = - match s.[n] with - | c when c >= 'a' && c <= 'z' -> parseLeadingDirective (n+1) + { let pos = lexbuf.EndPos + if skip then + let s = lexeme lexbuf + let rec parseLeadingDirective n = + match s.[n] with + | c when c >= 'a' && c <= 'z' -> parseLeadingDirective (n+1) | _ -> parseLeadingWhitespace n // goto the next state - - and parseLeadingWhitespace n = - match s.[n] with - | ' ' | '\t' -> parseLeadingWhitespace (n+1) + + and parseLeadingWhitespace n = + match s.[n] with + | ' ' | '\t' -> parseLeadingWhitespace (n+1) | _ -> parseLineNumber n n // goto the next state - - and parseLineNumber start n = - match s.[n] with + + and parseLineNumber start n = + match s.[n] with | c when c >= '0' && c <= '9' -> parseLineNumber start (n+1) - | _ -> let text = (String.sub s start (n-start)) - let lineNumber = + | _ -> let text = (String.sub s start (n-start)) + let lineNumber = try int32 text with err -> errorR(Error(FSComp.SR.lexInvalidLineNumber(text), lexbuf.LexemeRange)); 0 lineNumber, parseWhitespaceBeforeFile n // goto the next state - - and parseWhitespaceBeforeFile n = - match s.[n] with - | ' ' | '\t' | '@' -> parseWhitespaceBeforeFile (n+1) + + and parseWhitespaceBeforeFile n = + match s.[n] with + | ' ' | '\t' | '@' -> parseWhitespaceBeforeFile (n+1) | '"' -> Some (parseFile (n+1) (n+1)) | _ -> None - - and parseFile start n = - match s.[n] with - | '"' -> String.sub s start (n-start) - | _ -> parseFile start (n+1) + + and parseFile start n = + match s.[n] with + | '"' -> String.sub s start (n-start) + | _ -> parseFile start (n+1) // Call the parser - let line,file = parseLeadingDirective 1 + let line,file = parseLeadingDirective 1 // Construct the new position - if args.applyLineDirectives then - lexbuf.EndPos <- pos.ApplyLineDirective((match file with Some f -> fileIndexOfFile f | None -> pos.FileIndex), line) + if args.applyLineDirectives then + lexbuf.EndPos <- pos.ApplyLineDirective((match file with Some f -> FileIndex.fileIndexOfFile f | None -> pos.FileIndex), line) else // add a newline when we don't apply a directive since we consumed a newline getting here newline lexbuf - token args skip lexbuf + token args skip lexbuf else // add a newline when we don't apply a directive since we consumed a newline getting here newline lexbuf HASH_LINE (LexCont.Token (args.ifdefStack, args.stringNest)) } - + | "<@" { checkExprOp lexbuf; LQUOTE ("<@ @>", false) } | "<@@" { checkExprOp lexbuf; LQUOTE ("<@@ @@>", true) } @@ -826,21 +850,21 @@ rule token args skip = parse | "|" { BAR } - | "}" - { + | "}" + { // We encounter a '}' in the expression token stream. First check if we're in an interpolated string expression // and continue the string if necessary match args.stringNest with | (1, style, _) :: rest -> args.stringNest <- rest - let buf, fin, m = startString args lexbuf - if not skip then + let buf, fin, m = startString args lexbuf + if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, style, LexerStringKind.InterpolatedStringPart, m)) - else - match style with - | LexerStringStyle.Verbatim -> verbatimString (buf, fin, m, LexerStringKind.InterpolatedStringPart, args) skip lexbuf - | LexerStringStyle.SingleQuote -> singleQuoteString (buf, fin, m, LexerStringKind.InterpolatedStringPart, args) skip lexbuf - | LexerStringStyle.TripleQuote -> tripleQuoteString (buf, fin, m, LexerStringKind.InterpolatedStringPart, args) skip lexbuf + else + match style with + | LexerStringStyle.Verbatim -> verbatimString (buf, fin, m, LexerStringKind.InterpolatedStringPart, args) skip lexbuf + | LexerStringStyle.SingleQuote -> singleQuoteString (buf, fin, m, LexerStringKind.InterpolatedStringPart, args) skip lexbuf + | LexerStringStyle.TripleQuote -> tripleQuoteString (buf, fin, m, LexerStringKind.InterpolatedStringPart, args) skip lexbuf | (counter, style, m) :: rest -> // Note, we do not update the 'm', any incomplete-interpolation error @@ -886,42 +910,44 @@ rule token args skip = parse | ".()" | ".()<-" { FUNKY_OPERATOR_NAME(lexeme lexbuf) } - | "#!" op_char* + | "#!" op_char* { // Treat shebangs like regular comments, but they are only allowed at the start of a file let m = lexbuf.LexemeRange let tok = LINE_COMMENT (LexCont.SingleLineComment(args.ifdefStack, args.stringNest, 1, m)) let tok = shouldStartFile args lexbuf m (0,FSComp.SR.lexHashBangMustBeFirstInFile()) tok if not skip then tok else singleLineComment (None,1,m,args) skip lexbuf } - | "#light" anywhite* + | "#light" anywhite* | ("#indent" | "#light") anywhite+ "\"on\"" - { if args.lightStatus.ExplicitlySet && args.lightStatus.WarnOnMultipleTokens then - 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.lightStatus.Status <- true + { if args.lightStatus.ExplicitlySet && args.lightStatus.WarnOnMultipleTokens then + let s = lexeme lexbuf + warning(Error((0, sprintf "%s should only be set once in an F# source file." s), lexbuf.LexemeRange)) + // TODO: where should this go? (abelb) + //warning(Error((0,"#light should only occur as the first non-comment text in an F# source file."), lexbuf.LexemeRange)) + args.lightStatus.Status <- true if not skip then HASH_LIGHT (LexCont.Token(args.ifdefStack, args.stringNest)) - else token args skip lexbuf } + else token args skip lexbuf } - | ("#indent" | "#light") anywhite+ "\"off\"" - { args.lightStatus.Status <- false + | ("#indent" | "#light") anywhite+ "\"off\"" + { args.lightStatus.Status <- false mlCompatWarning (FSComp.SR.lexIndentOffForML()) lexbuf.LexemeRange if not skip then HASH_LIGHT (LexCont.Token (args.ifdefStack, args.stringNest)) - else token args skip lexbuf } - + else token args skip lexbuf } + | anywhite* "#if" anywhite+ anystring - { let m = lexbuf.LexemeRange + { let m = lexbuf.LexemeRange let lookup id = List.contains id args.defines let lexed = lexeme lexbuf - let isTrue = evalIfDefExpression lexbuf.StartPos lexbuf.SupportsFeature args lookup lexed + let isTrue = evalIfDefExpression lexbuf.StartPos lexbuf.ReportLibraryOnlyFeatures lexbuf.SupportsFeature args lookup lexed args.ifdefStack <- (IfDefIf,m) :: args.ifdefStack - + // Get the token; make sure it starts at zero position & return - let cont, f = + let cont, f = if isTrue then let cont = LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Token) let f = endline LexerEndlineContinuation.Token args skip cont, f - else + else let cont = LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Skip(0, m)) let f = endline (LexerEndlineContinuation.Skip(0, m)) args skip cont, f @@ -934,116 +960,124 @@ rule token args skip = parse match args.ifdefStack with | [] -> LEX_FAILURE (FSComp.SR.lexHashElseNoMatchingIf()) | (IfDefElse,_) :: _rest -> LEX_FAILURE (FSComp.SR.lexHashEndifRequiredForElse()) - | (IfDefIf,_) :: rest -> - let m = lexbuf.LexemeRange + | (IfDefIf,_) :: rest -> + let m = lexbuf.LexemeRange args.ifdefStack <- (IfDefElse,m) :: rest let tok = HASH_ELSE(m, lexed, LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Skip(0, m))) let tok = shouldStartLine args lexbuf m (FSComp.SR.lexHashElseMustBeFirst()) tok if not skip then tok else endline (LexerEndlineContinuation.Skip(0, m)) args skip lexbuf } | anywhite* "#endif" anywhite* ("//" [^'\n''\r']*)? - { let lexed = (lexeme lexbuf) - let m = lexbuf.LexemeRange + { let lexed = (lexeme lexbuf) + let m = lexbuf.LexemeRange match args.ifdefStack with | []-> LEX_FAILURE (FSComp.SR.lexHashEndingNoMatchingIf()) - | _ :: rest -> - args.ifdefStack <- rest - let tok = HASH_ENDIF(m,lexed,LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Token)) - let tok = shouldStartLine args lexbuf m (FSComp.SR.lexHashEndifMustBeFirst()) tok + | _ :: rest -> + args.ifdefStack <- rest + let tok = HASH_ENDIF(m,lexed,LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Token)) + let tok = shouldStartLine args lexbuf m (FSComp.SR.lexHashEndifMustBeFirst()) tok if not skip then tok else endline LexerEndlineContinuation.Token args skip lexbuf } - | "#if" + | "#if" { let tok = WHITESPACE (LexCont.Token (args.ifdefStack, args.stringNest)) - let tok = fail args lexbuf (FSComp.SR.lexHashIfMustHaveIdent()) tok + let tok = fail args lexbuf (FSComp.SR.lexHashIfMustHaveIdent()) tok if not skip then tok else token args skip lexbuf } + | anywhite* "#if" ident_char+ + | anywhite* "#else" ident_char+ + | anywhite* "#endif" ident_char+ + | anywhite* "#light" ident_char+ + { let n = (lexeme lexbuf).IndexOf('#') + lexbuf.StartPos <- lexbuf.StartPos.ShiftColumnBy(n) + HASH_IDENT(lexemeTrimLeft lexbuf (n+1)) } + | surrogateChar surrogateChar - | _ - { unexpectedChar lexbuf } + | _ + { unexpectedChar lexbuf } - | eof + | eof { EOF (LexCont.Token(args.ifdefStack, args.stringNest)) } -// Skips INACTIVE code until if finds #else / #endif matching with the #if or #else +// Skips INACTIVE code until if finds #else / #endif matching with the #if or #else -and ifdefSkip n m args skip = parse +and ifdefSkip n m args skip = parse | anywhite* "#if" anywhite+ anystring - { let m = lexbuf.LexemeRange - + { let m = lexbuf.LexemeRange + // If #if is the first thing on the line then increase depth, otherwise skip, because it is invalid (e.g. "(**) #if ...") if (m.StartColumn <> 0) then if not skip then INACTIVECODE (LexCont.IfDefSkip(args.ifdefStack, args.stringNest, n, m)) else ifdefSkip n m args skip lexbuf else - let tok = INACTIVECODE(LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Skip(n+1, m))) + let tok = INACTIVECODE(LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Skip(n+1, m))) if not skip then tok else endline (LexerEndlineContinuation.Skip(n+1, m)) args skip lexbuf } | anywhite* "#else" anywhite* ("//" [^'\n''\r']*)? - { let lexed = (lexeme lexbuf) - let m = lexbuf.LexemeRange - + { let lexed = (lexeme lexbuf) + let m = lexbuf.LexemeRange + // If #else is the first thing on the line then process it, otherwise ignore, because it is invalid (e.g. "(**) #else ...") if (m.StartColumn <> 0) then if not skip then INACTIVECODE (LexCont.IfDefSkip(args.ifdefStack, args.stringNest, n, m)) else ifdefSkip n m args skip lexbuf - elif n = 0 then + elif n = 0 then match args.ifdefStack with | []-> LEX_FAILURE (FSComp.SR.lexHashElseNoMatchingIf()) | (IfDefElse,_) :: _rest -> LEX_FAILURE (FSComp.SR.lexHashEndifRequiredForElse()) - | (IfDefIf,_) :: rest -> - let m = lexbuf.LexemeRange + | (IfDefIf,_) :: rest -> + let m = lexbuf.LexemeRange args.ifdefStack <- (IfDefElse,m) :: rest if not skip then HASH_ELSE(m,lexed,LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Token)) - else endline LexerEndlineContinuation.Token args skip lexbuf + else endline LexerEndlineContinuation.Token args skip lexbuf else if not skip then INACTIVECODE(LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Skip(n, m))) else endline (LexerEndlineContinuation.Skip(n, m)) args skip lexbuf } - + | anywhite* "#endif" anywhite* ("//" [^'\n''\r']*)? { let lexed = lexeme lexbuf - let m = lexbuf.LexemeRange - + let m = lexbuf.LexemeRange + // If #endif is the first thing on the line then process it, otherwise ignore, because it is invalid (e.g. "(**) #endif ...") if (m.StartColumn <> 0) then if not skip then INACTIVECODE (LexCont.IfDefSkip(args.ifdefStack, args.stringNest, n, m)) else ifdefSkip n m args skip lexbuf - elif n = 0 then + elif n = 0 then match args.ifdefStack with | [] -> LEX_FAILURE (FSComp.SR.lexHashEndingNoMatchingIf()) - | _ :: rest -> + | _ :: rest -> args.ifdefStack <- rest if not skip then HASH_ENDIF(m,lexed,LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Token)) - else endline LexerEndlineContinuation.Token args skip lexbuf + else endline LexerEndlineContinuation.Token args skip lexbuf else let tok = INACTIVECODE(LexCont.EndLine(args.ifdefStack, args.stringNest, LexerEndlineContinuation.Skip(n-1, m))) let tok = shouldStartLine args lexbuf m (FSComp.SR.lexWrongNestedHashEndif()) tok if not skip then tok else endline (LexerEndlineContinuation.Skip(n-1, m)) args skip lexbuf } - - | newline + + | newline { newline lexbuf; ifdefSkip n m args skip lexbuf } - + | [^ ' ' '\n' '\r' ]+ | anywhite+ | surrogateChar surrogateChar - | _ + | _ { // This tries to be nice and get tokens as 'words' because VS uses this when selecting stuff if not skip then INACTIVECODE (LexCont.IfDefSkip(args.ifdefStack, args.stringNest, n, m)) else ifdefSkip n m args skip lexbuf } - | eof + | eof { EOF (LexCont.IfDefSkip(args.ifdefStack, args.stringNest, n, m)) } -// Called after lexing #if IDENT/#else/#endif - this checks whether there is nothing except end of line -// or end of file and then calls the lexing function specified by 'cont' - either token or ifdefSkip +// Called after lexing #if IDENT/#else/#endif - this checks whether there is nothing except end of line +// 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 -> + | LexerEndlineContinuation.Token -> if not skip then WHITESPACE(LexCont.Token (args.ifdefStack, args.stringNest)) else token args skip lexbuf @@ -1054,9 +1088,9 @@ and endline cont args skip = parse | eof { match cont with - | LexerEndlineContinuation.Token -> + | LexerEndlineContinuation.Token -> EOF(LexCont.Token(args.ifdefStack, args.stringNest)) - | LexerEndlineContinuation.Skip(n, m) -> + | LexerEndlineContinuation.Skip(n, m) -> EOF(LexCont.IfDefSkip(args.ifdefStack, args.stringNest, n, m)) } @@ -1065,12 +1099,12 @@ and endline cont args skip = parse | _ { let tok = WHITESPACE (LexCont.Token (args.ifdefStack, args.stringNest)) let tok = fail args lexbuf (FSComp.SR.pplexExpectedSingleLineComment()) tok - if not skip then tok else token args skip lexbuf } + if not skip then tok else token args skip lexbuf } and singleQuoteString sargs skip = parse - | '\\' newline anywhite* - { let (_buf, _fin, m, kind, args) = sargs - newline lexbuf + | '\\' newline anywhite* + { let (_buf, _fin, m, kind, args) = sargs + newline lexbuf let text = lexeme lexbuf let text2 = text |> String.filter (fun c -> c <> ' ' && c <> '\t') advanceColumnBy lexbuf (text.Length - text2.Length) @@ -1078,34 +1112,34 @@ and singleQuoteString sargs skip = parse else singleQuoteString sargs skip lexbuf } | escape_char - { let (buf, _fin, m, kind, args) = sargs + { let (buf, _fin, m, kind, args) = sargs addByteChar buf (escape (lexeme lexbuf).[1]) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) - else singleQuoteString sargs skip lexbuf } + else singleQuoteString sargs skip lexbuf } | trigraph - { let (buf, _fin, m, kind, args) = sargs - let s = lexeme lexbuf + { let (buf, _fin, m, kind, args) = sargs + let s = lexeme lexbuf addByteChar buf (trigraph s.[1] s.[2] s.[3]) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf } | hexGraphShort - { let (buf, _fin, m, kind, args) = sargs + { let (buf, _fin, m, kind, args) = sargs addUnicodeChar buf (int (hexGraphShort (lexemeTrimLeft lexbuf 2))) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf } - + | unicodeGraphShort - { let (buf, _fin, m, kind, args) = sargs + { let (buf, _fin, m, kind, args) = sargs addUnicodeChar buf (int (unicodeGraphShort (lexemeTrimLeft lexbuf 2))) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf } - + | unicodeGraphLong { let (buf, _fin, m, kind, args) = sargs let hexChars = lexemeTrimLeft lexbuf 2 - let result() = + let result() = if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf match unicodeGraphLong hexChars with @@ -1114,91 +1148,91 @@ and singleQuoteString sargs skip = parse | SingleChar(c) -> addUnicodeChar buf (int c) result() - | SurrogatePair(hi, lo) -> + | SurrogatePair(hi, lo) -> addUnicodeChar buf (int hi) addUnicodeChar buf (int lo) result() } - - | '"' - { let (buf, fin, _m, kind, args) = sargs + + | '"' + { let (buf, fin, _m, kind, args) = sargs let cont = LexCont.Token(args.ifdefStack, args.stringNest) - fin.Finish buf kind false cont + fin.Finish buf kind (enum(0)) cont } - | '"''B' - { let (buf, fin, _m, kind, args) = sargs + | '"''B' + { let (buf, fin, _m, kind, args) = sargs let cont = LexCont.Token(args.ifdefStack, args.stringNest) - fin.Finish buf { kind with IsByteString = true } false cont + fin.Finish buf { kind with IsByteString = true } (enum(0)) cont } | ("{{" | "}}") - { let (buf, _fin, m, kind, args) = sargs + { let (buf, _fin, m, kind, args) = sargs let s = lexeme lexbuf addUnicodeString buf (if kind.IsInterpolated then s.[0..0] else s) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf } | "{" - { let (buf, fin, m, kind, args) = sargs + { let (buf, fin, m, kind, args) = sargs if kind.IsInterpolated then // get a new range for where the fill starts let m2 = lexbuf.LexemeRange args.stringNest <- (1, LexerStringStyle.SingleQuote, m2) :: args.stringNest let cont = LexCont.Token(args.ifdefStack, args.stringNest) - fin.Finish buf kind true cont + fin.Finish buf kind LexerStringFinisherContext.InterpolatedPart cont else - addUnicodeString buf (lexeme lexbuf) + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) - else singleQuoteString sargs skip lexbuf + else singleQuoteString sargs skip lexbuf } | "}" - { let (buf, _fin, m, kind, args) = sargs - let result() = + { let (buf, _fin, m, kind, args) = sargs + let result() = if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf if kind.IsInterpolated then fail args lexbuf (FSComp.SR.lexRBraceInInterpolatedString()) (result()) else - addUnicodeString buf (lexeme lexbuf) + addUnicodeString buf (lexeme lexbuf) (result()) } | newline - { let (buf, _fin, m, kind, args) = sargs - newline lexbuf - addUnicodeString buf (lexeme lexbuf) + { let (buf, _fin, m, kind, args) = sargs + newline lexbuf + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf } - | ident - { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + | ident + { let (buf, _fin, m, kind, args) = sargs + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf } - | integer + | integer | xinteger { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf } - | anywhite + + | anywhite + { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf } - | eof - { let (_buf, _fin, m, kind, args) = sargs + | eof + { let (_buf, _fin, m, kind, args) = sargs EOF (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) } - | surrogateChar surrogateChar // surrogate code points always come in pairs + | surrogateChar surrogateChar // surrogate code points always come in pairs - | _ + | _ { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, kind, m)) else singleQuoteString sargs skip lexbuf } @@ -1207,261 +1241,261 @@ and verbatimString sargs skip = parse { let (buf, _fin, m, kind, args) = sargs addByteChar buf '\"' if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, kind, m)) - else verbatimString sargs skip lexbuf } + else verbatimString sargs skip lexbuf } - | '"' - { let (buf, fin, _m, kind, args) = sargs + | '"' + { let (buf, fin, _m, kind, args) = sargs let cont = LexCont.Token(args.ifdefStack, args.stringNest) - fin.Finish buf kind false cont + fin.Finish buf kind LexerStringFinisherContext.Verbatim cont } - | '"''B' - { let (buf, fin, _m, kind, args) = sargs + | '"''B' + { let (buf, fin, _m, kind, args) = sargs let cont = LexCont.Token(args.ifdefStack, args.stringNest) - fin.Finish buf { kind with IsByteString = true } false cont + fin.Finish buf { kind with IsByteString = true } LexerStringFinisherContext.Verbatim cont } - | newline - { let (buf, _fin, m, kind, args) = sargs - newline lexbuf - addUnicodeString buf (lexeme lexbuf) + | newline + { let (buf, _fin, m, kind, args) = sargs + newline lexbuf + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, kind, m)) else verbatimString sargs skip lexbuf } | ("{{" | "}}") - { let (buf, _fin, m, kind, args) = sargs + { let (buf, _fin, m, kind, args) = sargs let s = lexeme lexbuf addUnicodeString buf (if kind.IsInterpolated then s.[0..0] else s) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, kind, m)) else verbatimString sargs skip lexbuf } | "{" - { let (buf, fin, m, kind, args) = sargs + { let (buf, fin, m, kind, args) = sargs if kind.IsInterpolated then // get a new range for where the fill starts let m2 = lexbuf.LexemeRange args.stringNest <- (1, LexerStringStyle.Verbatim, m2) :: args.stringNest let cont = LexCont.Token(args.ifdefStack, args.stringNest) - fin.Finish buf kind true cont + fin.Finish buf kind (enum(3)) cont else - addUnicodeString buf (lexeme lexbuf) + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, kind, m)) - else verbatimString sargs skip lexbuf + else verbatimString sargs skip lexbuf } | "}" - { let (buf, _fin, m, kind, args) = sargs - let result() = + { let (buf, _fin, m, kind, args) = sargs + let result() = if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, kind, m)) else verbatimString sargs skip lexbuf if kind.IsInterpolated then fail args lexbuf (FSComp.SR.lexRBraceInInterpolatedString()) (result()) else - addUnicodeString buf (lexeme lexbuf) + addUnicodeString buf (lexeme lexbuf) (result()) } - | ident - { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + | ident + { let (buf, _fin, m, kind, args) = sargs + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, kind, m)) else verbatimString sargs skip lexbuf } - | integer + | integer | xinteger - { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + { let (buf, _fin, m, kind, args) = sargs + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, kind, m)) else verbatimString sargs skip lexbuf } - | anywhite + - { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + | anywhite + + { let (buf, _fin, m, kind, args) = sargs + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, kind, m)) else verbatimString sargs skip lexbuf } - | eof - { let (_buf, _fin, m, kind, args) = sargs + | eof + { let (_buf, _fin, m, kind, args) = sargs EOF (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, kind, m)) } - | surrogateChar surrogateChar // surrogate code points always come in pairs - | _ - { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + | surrogateChar surrogateChar // surrogate code points always come in pairs + | _ + { let (buf, _fin, m, kind, args) = sargs + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, kind, m)) else verbatimString sargs skip lexbuf } and tripleQuoteString sargs skip = parse - | '"' '"' '"' - { let (buf, fin, _m, kind, args) = sargs + | '"' '"' '"' + { let (buf, fin, _m, kind, args) = sargs let cont = LexCont.Token(args.ifdefStack, args.stringNest) - fin.Finish buf kind false cont } + fin.Finish buf kind (enum(4)) cont } - | newline - { let (buf, _fin, m, kind, args) = sargs - newline lexbuf - addUnicodeString buf (lexeme lexbuf) + | newline + { let (buf, _fin, m, kind, args) = sargs + newline lexbuf + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, kind, 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, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) +// The rest is to break into pieces to allow double-click-on-word and other such things + | ident + { let (buf, _fin, m, kind, args) = sargs + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, kind, m)) else tripleQuoteString sargs skip lexbuf } - | integer + | integer | xinteger - { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + { let (buf, _fin, m, kind, args) = sargs + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, kind, m)) else tripleQuoteString sargs skip lexbuf } - | anywhite + - { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + | anywhite + + { let (buf, _fin, m, kind, args) = sargs + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, kind, m)) else tripleQuoteString sargs skip lexbuf } | ("{{" | "}}") - { let (buf, _fin, m, kind, args) = sargs + { let (buf, _fin, m, kind, args) = sargs let s = lexeme lexbuf addUnicodeString buf (if kind.IsInterpolated then s.[0..0] else s) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, kind, m)) else tripleQuoteString sargs skip lexbuf } | "{" - { let (buf, fin, m, kind, args) = sargs + { let (buf, fin, m, kind, args) = sargs if kind.IsInterpolated then // get a new range for where the fill starts let m2 = lexbuf.LexemeRange args.stringNest <- (1, LexerStringStyle.TripleQuote, m2) :: args.stringNest let cont = LexCont.Token(args.ifdefStack, args.stringNest) - fin.Finish buf kind true cont + fin.Finish buf kind (enum(5)) cont else - addUnicodeString buf (lexeme lexbuf) + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, kind, m)) - else tripleQuoteString sargs skip lexbuf + else tripleQuoteString sargs skip lexbuf } | "}" - { let (buf, _fin, m, kind, args) = sargs - let result() = + { let (buf, _fin, m, kind, args) = sargs + let result() = if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, kind, m)) else tripleQuoteString sargs skip lexbuf if kind.IsInterpolated then fail args lexbuf (FSComp.SR.lexRBraceInInterpolatedString()) (result()) else - addUnicodeString buf (lexeme lexbuf) + addUnicodeString buf (lexeme lexbuf) (result()) } - | eof - { let (_buf, _fin, m, kind, args) = sargs + | eof + { let (_buf, _fin, m, kind, args) = sargs EOF (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, kind, m)) } - | surrogateChar surrogateChar // surrogate code points always come in pairs - | _ - { let (buf, _fin, m, kind, args) = sargs - addUnicodeString buf (lexeme lexbuf) + | surrogateChar surrogateChar // surrogate code points always come in pairs + | _ + { let (buf, _fin, m, kind, args) = sargs + addUnicodeString buf (lexeme lexbuf) if not skip then STRING_TEXT (LexCont.String(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, kind, 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 +// 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 + { let buff,_n, _m, args = cargs trySaveXmlDoc lexbuf buff - newline lexbuf + 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, args.stringNest)) else token args skip lexbuf } - - | eof - { let _, _n, _m, args = cargs - // NOTE: it is legal to end a file with this comment, so we'll return EOF as a token - EOF (LexCont.Token(args.ifdefStack, args.stringNest)) } - + + | eof + { let _, _n, _m, args = cargs + // NOTE: it is legal to end a file with this comment, so we'll return EOF as a token + EOF (LexCont.Token(args.ifdefStack, args.stringNest)) } + | [^ ' ' '\n' '\r' ]+ | anywhite+ - { let buff, n, m, args = cargs - // Append the current token to the XML documentation if we're collecting it + { let buff, n, m, args = cargs + // Append the current token to the XML documentation if we're collecting it tryAppendXmlDoc buff (lexeme lexbuf) if not skip then LINE_COMMENT (LexCont.SingleLineComment(args.ifdefStack, args.stringNest, n, m)) - else singleLineComment (buff, n, m, args) skip lexbuf } - + else singleLineComment (buff, n, m, args) skip lexbuf } + | surrogateChar surrogateChar - | _ { let _, _n, _m, args = cargs + | _ { let _, _n, _m, args = cargs if not skip then LINE_COMMENT (LexCont.Token(args.ifdefStack, args.stringNest)) else token args skip lexbuf } - + and comment cargs skip = parse | char - { let n, m, args = cargs + { let n, m, args = cargs if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, n, m)) - else comment (n, m, args) skip lexbuf } - - | '"' - { let n, m, args = cargs + else comment (n, m, args) skip lexbuf } + + | '"' + { let n, m, args = cargs if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, n, m)) else stringInComment n m args skip lexbuf } - | '"' '"' '"' - { let n, m, args = cargs + | '"' '"' '"' + { let n, m, args = cargs if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, n, m)) else tripleQuoteStringInComment n m args skip lexbuf } | '@' '"' - { let n, m, args = cargs + { let n, m, args = cargs if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, n, m)) else verbatimStringInComment n m args skip lexbuf } | "(*)" - { let n, m, args = cargs + { let n, m, args = cargs if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, n, m)) else comment cargs skip lexbuf } | '(' '*' - { let n, m, args = cargs + { let n, m, args = cargs if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, n+1, m)) else comment (n+1,m,args) skip lexbuf } - + | newline - { let n, m, args = cargs - newline lexbuf + { let n, m, args = cargs + newline lexbuf if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, n, m)) else comment cargs skip lexbuf } - | "*)" - { - let n, m, args = cargs - if n > 1 then + | "*)" + { + let n, m, args = cargs + if n > 1 then if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, n-1, m)) - else comment (n-1,m,args) skip lexbuf + else comment (n-1,m,args) skip lexbuf else if not skip then COMMENT (LexCont.Token(args.ifdefStack, args.stringNest)) else token args skip lexbuf } - + | anywhite+ - | [^ '\'' '(' '*' '\n' '\r' '"' ')' '@' ' ' '\t' ]+ - { let n, m, args = cargs + | [^ '\'' '(' '*' '\n' '\r' '"' ')' '@' ' ' '\t' ]+ + { let n, m, args = cargs if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, n, m)) else comment cargs skip lexbuf } - - | eof - { let n, m, args = cargs + + | eof + { let n, m, args = cargs EOF (LexCont.Comment(args.ifdefStack, args.stringNest, n, m)) } - + | surrogateChar surrogateChar - | _ { let n, m, args = cargs + | _ { let n, m, args = cargs if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, n, m)) else comment (n, m, args) skip lexbuf } and stringInComment n m args skip = parse - // Follow string lexing, skipping tokens until it finishes - | '\\' newline anywhite* - { newline lexbuf + // Follow string lexing, skipping tokens until it finishes + | '\\' newline anywhite* + { newline lexbuf if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, n, m)) else stringInComment n m args skip lexbuf } @@ -1470,117 +1504,117 @@ and stringInComment n m args skip = parse | hexGraphShort | unicodeGraphShort | unicodeGraphLong - | ident + | ident | integer | xinteger - | anywhite + + | anywhite + { if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, n, m)) else stringInComment n m args skip lexbuf } - | '"' + | '"' { if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, n, m)) else comment (n, m, args) skip lexbuf } - - | newline - { newline lexbuf + + | newline + { newline lexbuf if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, n, m)) else stringInComment n m args skip lexbuf } - - | eof + + | eof { EOF (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, n, m)) } - + | surrogateChar surrogateChar - | _ + | _ { if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.SingleQuote, n, m)) else stringInComment n m args skip lexbuf } and verbatimStringInComment n m args skip = parse - // Follow verbatimString lexing, in short, skip double-quotes and other chars until we hit a single quote + // Follow verbatimString lexing, in short, skip double-quotes and other chars until we hit a single quote | '"' '"' { if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, n, m)) else verbatimStringInComment n m args skip lexbuf } - | '"' + | '"' { if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, n, m)) else comment (n, m, args) skip lexbuf } - | ident - | integer + | ident + | integer | xinteger - | anywhite + + | anywhite + { if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, n, m)) else verbatimStringInComment n m args skip lexbuf } - - | newline + + | newline { newline lexbuf if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, n, m)) else verbatimStringInComment n m args skip lexbuf } - - | eof + + | eof { EOF (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, n, m)) } - + | surrogateChar surrogateChar - | _ + | _ { if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.Verbatim, n, m)) else verbatimStringInComment n m args skip lexbuf } - + and tripleQuoteStringInComment n m args skip = parse - // Follow tripleQuoteString lexing + // Follow tripleQuoteString lexing | '"' '"' '"' { if not skip then COMMENT (LexCont.Comment(args.ifdefStack, args.stringNest, n, m)) else comment (n, m, args) skip lexbuf } - | ident - | integer + | ident + | integer | xinteger - | anywhite + + | anywhite + { if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, n, m)) else tripleQuoteStringInComment n m args skip lexbuf } - - | newline + + | newline { newline lexbuf if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, n, m)) else tripleQuoteStringInComment n m args skip lexbuf } - - | eof + + | eof { EOF (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, n, m)) } - + | surrogateChar surrogateChar - | _ + | _ { if not skip then COMMENT (LexCont.StringInComment(args.ifdefStack, args.stringNest, LexerStringStyle.TripleQuote, n, m)) else tripleQuoteStringInComment n m args skip lexbuf } - + and mlOnly m args skip = parse | "\"" - { let buf = ByteBuffer.Create 100 - let m2 = lexbuf.LexemeRange - let _ = singleQuoteString (buf, LexerStringFinisher.Default, m2, LexerStringKind.String, args) skip lexbuf + { let buf = ByteBuffer.Create StringCapacity + let m2 = lexbuf.LexemeRange + let _ = singleQuoteString (buf, LexerStringFinisher.Default, m2, LexerStringKind.String, args) skip lexbuf if not skip then COMMENT (LexCont.MLOnly(args.ifdefStack, args.stringNest, m)) else mlOnly m args skip lexbuf } - | newline + | newline { newline lexbuf if not skip then COMMENT (LexCont.MLOnly(args.ifdefStack, args.stringNest, m)) else mlOnly m args skip lexbuf } - | "(*ENDIF-CAML*)" + | "(*ENDIF-CAML*)" { if not skip then COMMENT (LexCont.Token(args.ifdefStack, args.stringNest)) else token args skip lexbuf } - | "(*ENDIF-OCAML*)" + | "(*ENDIF-OCAML*)" { if not skip then COMMENT (LexCont.Token(args.ifdefStack, args.stringNest)) else token args skip lexbuf } - | [^ '(' '"' '\n' '\r' ]+ + | [^ '(' '"' '\n' '\r' ]+ { if not skip then COMMENT (LexCont.MLOnly(args.ifdefStack, args.stringNest, m)) else mlOnly m args skip lexbuf } - | eof + | eof { EOF (LexCont.MLOnly(args.ifdefStack, args.stringNest, m)) } - | surrogateChar surrogateChar - | _ + | surrogateChar surrogateChar + | _ { if not skip then COMMENT (LexCont.MLOnly(args.ifdefStack, args.stringNest, m)) else mlOnly m args skip lexbuf } diff --git a/src/fsharp/lexhelp.fs b/src/fsharp/lexhelp.fs index d111f88ee6e..7de63e244a1 100644 --- a/src/fsharp/lexhelp.fs +++ b/src/fsharp/lexhelp.fs @@ -6,19 +6,19 @@ open System open System.Text open Internal.Utilities +open Internal.Utilities.Library open Internal.Utilities.Text.Lexing open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.IO open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Lib open FSharp.Compiler.ParseHelpers +open FSharp.Compiler.UnicodeLexing open FSharp.Compiler.Parser -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree -open FSharp.Compiler.XmlDoc +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range /// The "mock" filename used by fsi.exe when reading from stdin. /// Has special treatment by the lexer, i.e. __SOURCE_DIRECTORY__ becomes GetCurrentDirectory() @@ -35,7 +35,6 @@ type LightSyntaxStatus(initial:bool,warn:bool) = member x.ExplicitlySet = status.IsSome member x.WarnOnMultipleTokens = warn - /// Manage lexer resources (string interning) [] type LexResourceManager(?capacity: int) = @@ -89,11 +88,11 @@ let reusingLexbufForParsing lexbuf f = with e -> raise (WrappedError(e, (try lexbuf.LexemeRange with _ -> range0))) -let resetLexbufPos filename (lexbuf: UnicodeLexing.Lexbuf) = - lexbuf.EndPos <- Position.FirstLine (fileIndexOfFile filename) +let resetLexbufPos filename (lexbuf: Lexbuf) = + lexbuf.EndPos <- Position.FirstLine (FileIndex.fileIndexOfFile filename) /// Reset the lexbuf, configure the initial position with the given filename and call the given function -let usingLexbufForParsing (lexbuf:UnicodeLexing.Lexbuf, filename) f = +let usingLexbufForParsing (lexbuf:Lexbuf, filename) f = resetLexbufPos filename lexbuf reusingLexbufForParsing lexbuf (fun () -> f lexbuf) @@ -102,12 +101,12 @@ let usingLexbufForParsing (lexbuf:UnicodeLexing.Lexbuf, filename) f = //----------------------------------------------------------------------- let stringBufferAsString (buf: ByteBuffer) = - let buf = buf.Close() + let buf = buf.AsMemory() 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] - let lo = buf.[i*2] + let hi = buf.Span.[i*2+1] + let lo = buf.Span.[i*2] let c = char (((int hi) * 256) + (int lo)) chars.[i] <- c System.String(chars) @@ -118,34 +117,59 @@ let stringBufferAsString (buf: ByteBuffer) = /// we just take every second byte we stored. Note all bytes > 127 should have been /// stored using addIntChar let stringBufferAsBytes (buf: ByteBuffer) = - let bytes = buf.Close() - Array.init (bytes.Length / 2) (fun i -> bytes.[i*2]) + let bytes = buf.AsMemory() + Array.init (bytes.Length / 2) (fun i -> bytes.Span.[i*2]) + +[] +type LexerStringFinisherContext = + | InterpolatedPart = 1 + | Verbatim = 2 + | TripleQuote = 4 type LexerStringFinisher = - | LexerStringFinisher of (ByteBuffer -> LexerStringKind -> bool -> LexerContinuation -> token) + | LexerStringFinisher of (ByteBuffer -> LexerStringKind -> LexerStringFinisherContext -> LexerContinuation -> token) - member fin.Finish (buf: ByteBuffer) kind isInterpolatedStringPart cont = + member fin.Finish (buf: ByteBuffer) kind context cont = let (LexerStringFinisher f) = fin - f buf kind isInterpolatedStringPart cont + f buf kind context cont static member Default = - LexerStringFinisher (fun buf kind isPart cont -> + LexerStringFinisher (fun buf kind context cont -> + let isPart = context.HasFlag(LexerStringFinisherContext.InterpolatedPart) + let isVerbatim = context.HasFlag(LexerStringFinisherContext.Verbatim) + let isTripleQuote = context.HasFlag(LexerStringFinisherContext.TripleQuote) + if kind.IsInterpolated then let s = stringBufferAsString buf - if kind.IsInterpolatedFirst then + if kind.IsInterpolatedFirst then + let synStringKind = + if isTripleQuote then + SynStringKind.TripleQuote + elif isVerbatim then + SynStringKind.Verbatim + else + SynStringKind.Regular if isPart then - INTERP_STRING_BEGIN_PART (s, cont) + INTERP_STRING_BEGIN_PART (s, synStringKind, cont) else - INTERP_STRING_BEGIN_END (s, cont) + INTERP_STRING_BEGIN_END (s, synStringKind, cont) else if isPart then INTERP_STRING_PART (s, cont) else INTERP_STRING_END (s, cont) - elif kind.IsByteString then - BYTEARRAY (stringBufferAsBytes buf, cont) + elif kind.IsByteString then + let synByteStringKind = if isVerbatim then SynByteStringKind.Verbatim else SynByteStringKind.Regular + BYTEARRAY (stringBufferAsBytes buf, synByteStringKind, cont) else - STRING (stringBufferAsString buf, cont) + let synStringKind = + if isVerbatim then + SynStringKind.Verbatim + elif isTripleQuote then + SynStringKind.TripleQuote + else + SynStringKind.Regular + STRING (stringBufferAsString buf, synStringKind, cont) ) let addUnicodeString (buf: ByteBuffer) (x:string) = @@ -161,10 +185,10 @@ let addByteChar buf (c:char) = addIntChar buf (int32 c % 256) /// Sanity check that high bytes are zeros. Further check each low byte <= 127 let stringBufferIsBytes (buf: ByteBuffer) = - let bytes = buf.Close() + let bytes = buf.AsMemory() let mutable ok = true for i = 0 to bytes.Length / 2-1 do - if bytes.[i*2+1] <> 0uy then ok <- false + if bytes.Span.[i*2+1] <> 0uy then ok <- false ok let newline (lexbuf:LexBuffer<_>) = @@ -328,9 +352,6 @@ module Keywords = "parallel"; "params"; "process"; "protected"; "pure" "sealed"; "trait"; "tailcall"; "virtual" ] - let private unreserveWords = - keywordList |> List.choose (function (mode, keyword, _) -> if mode = FSHARP then Some keyword else None) - //------------------------------------------------------------------------ // Keywords //----------------------------------------------------------------------- @@ -346,12 +367,12 @@ module Keywords = let KeywordToken s = keywordTable.[s] - let IdentifierToken args (lexbuf:UnicodeLexing.Lexbuf) (s:string) = + let IdentifierToken args (lexbuf:Lexbuf) (s:string) = if IsCompilerGeneratedName s then warning(Error(FSComp.SR.lexhlpIdentifiersContainingAtSymbolReserved(), lexbuf.LexemeRange)) args.resourceManager.InternIdentifierToken s - let KeywordOrIdentifierToken args (lexbuf:UnicodeLexing.Lexbuf) s = + let KeywordOrIdentifierToken args (lexbuf:Lexbuf) s = match keywordTable.TryGetValue s with | true, v -> match v with @@ -362,7 +383,7 @@ module Keywords = | _ -> match s with | "__SOURCE_DIRECTORY__" -> - let filename = fileOfFileIndex lexbuf.StartPos.FileIndex + let filename = FileIndex.fileOfFileIndex lexbuf.StartPos.FileIndex let dirname = if String.IsNullOrWhiteSpace(filename) then String.Empty @@ -375,11 +396,11 @@ module Keywords = if String.IsNullOrEmpty dirname then dirname else PathMap.applyDir args.pathMap dirname - |> KEYWORD_STRING + |> fun dir -> KEYWORD_STRING(s, dir) | "__SOURCE_FILE__" -> - KEYWORD_STRING (System.IO.Path.GetFileName((fileOfFileIndex lexbuf.StartPos.FileIndex))) + KEYWORD_STRING (s, System.IO.Path.GetFileName((FileIndex.fileOfFileIndex lexbuf.StartPos.FileIndex))) | "__LINE__" -> - KEYWORD_STRING (string lexbuf.StartPos.Line) + KEYWORD_STRING (s, string lexbuf.StartPos.Line) | _ -> IdentifierToken args lexbuf s diff --git a/src/fsharp/lexhelp.fsi b/src/fsharp/lexhelp.fsi index 9764f34a924..0eab9ee0276 100644 --- a/src/fsharp/lexhelp.fsi +++ b/src/fsharp/lexhelp.fsi @@ -2,15 +2,15 @@ module internal FSharp.Compiler.Lexhelp +open FSharp.Compiler.IO open Internal.Utilities open Internal.Utilities.Text -open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Parser open FSharp.Compiler.ParseHelpers -open FSharp.Compiler.Range +open FSharp.Compiler.UnicodeLexing +open FSharp.Compiler.Parser +open FSharp.Compiler.Text val stdinMockFilename: string @@ -46,18 +46,23 @@ type LongUnicodeLexResult = | SingleChar of uint16 | Invalid -val resetLexbufPos: string -> UnicodeLexing.Lexbuf -> unit +val resetLexbufPos: string -> Lexbuf -> unit val mkLexargs: string list * LightSyntaxStatus * LexResourceManager * LexerIfdefStack * ErrorLogger * PathMap -> LexArgs -val reusingLexbufForParsing: UnicodeLexing.Lexbuf -> (unit -> 'a) -> 'a +val reusingLexbufForParsing: Lexbuf -> (unit -> 'a) -> 'a -val usingLexbufForParsing: UnicodeLexing.Lexbuf * string -> (UnicodeLexing.Lexbuf -> 'a) -> 'a +val usingLexbufForParsing: Lexbuf * string -> (UnicodeLexing.Lexbuf -> 'a) -> 'a + +type LexerStringFinisherContext = + | InterpolatedPart = 1 + | Verbatim = 2 + | TripleQuote = 4 type LexerStringFinisher = - | LexerStringFinisher of (ByteBuffer -> LexerStringKind -> bool -> LexerContinuation -> token) - - member Finish: buf: ByteBuffer -> kind: LexerStringKind -> isInterpolatedStringPart: bool -> cont: LexerContinuation -> token + | LexerStringFinisher of (ByteBuffer -> LexerStringKind -> LexerStringFinisherContext -> LexerContinuation -> token) + + member Finish: buf: ByteBuffer -> kind: LexerStringKind -> context: LexerStringFinisherContext -> cont: LexerContinuation -> token static member Default: LexerStringFinisher @@ -91,13 +96,13 @@ val unicodeGraphLong: string -> LongUnicodeLexResult val escape: char -> char -exception ReservedKeyword of string * Range.range +exception ReservedKeyword of string * range -module Keywords = +module Keywords = - val KeywordOrIdentifierToken: LexArgs -> UnicodeLexing.Lexbuf -> string -> token + val KeywordOrIdentifierToken: LexArgs -> Lexbuf -> string -> token - val IdentifierToken: LexArgs -> UnicodeLexing.Lexbuf -> string -> token + val IdentifierToken: LexArgs -> Lexbuf -> string -> token val DoesIdentifierNeedQuotation: string -> bool diff --git a/src/fsharp/lib.fs b/src/fsharp/lib.fs index f3f82adba57..07ba0f0f91f 100755 --- a/src/fsharp/lib.fs +++ b/src/fsharp/lib.fs @@ -1,25 +1,29 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.Lib +module internal Internal.Utilities.Library.Extras open System open System.IO open System.Collections.Generic +open System.Threading +open System.Threading.Tasks +open System.Globalization open System.Runtime.InteropServices open Internal.Utilities -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Collections +open Internal.Utilities.Library +open FSharp.Compiler.IO -let debug = false +let debug = false let verbose = false -let mutable progress = false +let mutable progress = false // Intended to be a general hook to control diagnostic output when tracking down bugs -let mutable tracking = false +let mutable tracking = false -let condition s = +let condition s = try (System.Environment.GetEnvironmentVariable(s) <> null) with _ -> false let GetEnvInteger e dflt = match System.Environment.GetEnvironmentVariable(e) with null -> dflt | t -> try int t with _ -> dflt @@ -30,54 +34,34 @@ let dispose (x:System.IDisposable) = match x with null -> () | x -> x.Dispose() // Library: bits //------------------------------------------------------------------------ -module Bits = - let b0 n = (n &&& 0xFF) - let b1 n = ((n >>> 8) &&& 0xFF) - let b2 n = ((n >>> 16) &&& 0xFF) - let b3 n = ((n >>> 24) &&& 0xFF) +module Bits = + let b0 n = (n &&& 0xFF) + let b1 n = ((n >>> 8) &&& 0xFF) + let b2 n = ((n >>> 16) &&& 0xFF) + let b3 n = ((n >>> 24) &&& 0xFF) let rec pown32 n = if n = 0 then 0 else (pown32 (n-1) ||| (1 <<< (n-1))) let rec pown64 n = if n = 0 then 0L else (pown64 (n-1) ||| (1L <<< (n-1))) let mask32 m n = (pown32 n) <<< m let mask64 m n = (pown64 n) <<< m - -//------------------------------------------------------------------------- -// Library: files -//------------------------------------------------------------------------ - -module Filename = - let fullpath cwd nm = - let p = if FileSystem.IsPathRootedShim(nm) then nm else Path.Combine(cwd, nm) - try FileSystem.GetFullPathShim(p) with - | :? System.ArgumentException - | :? System.ArgumentNullException - | :? System.NotSupportedException - | :? System.IO.PathTooLongException - | :? System.Security.SecurityException -> p - - let hasSuffixCaseInsensitive suffix filename = (* case-insensitive *) - Filename.checkSuffix (String.lowercase filename) (String.lowercase suffix) - - let isDll file = hasSuffixCaseInsensitive ".dll" file - //------------------------------------------------------------------------- // Library: Orders //------------------------------------------------------------------------ -module Bool = +module Bool = let order = LanguagePrimitives.FastGenericComparer -module Int32 = +module Int32 = let order = LanguagePrimitives.FastGenericComparer -module Int64 = +module Int64 = let order = LanguagePrimitives.FastGenericComparer -module Pair = +module Pair = let order (compare1: IComparer<'T1>, compare2: IComparer<'T2>) = - { new IComparer<'T1 * 'T2> with - member __.Compare((a1, a2), (aa1, aa2)) = + { new IComparer<'T1 * 'T2> with + member _.Compare((a1, a2), (aa1, aa2)) = let res1 = compare1.Compare (a1, aa1) if res1 <> 0 then res1 else compare2.Compare (a2, aa2) } @@ -87,47 +71,47 @@ type NameSet = Zset module NameSet = let ofList l : NameSet = List.foldBack Zset.add l (Zset.empty String.order) -module NameMap = +module NameMap = let domain m = Map.foldBack (fun x _ acc -> Zset.add x acc) m (Zset.empty String.order) let domainL m = Zset.elements (domain m) // Library: Pre\Post checks -//------------------------------------------------------------------------- -module Check = - +//------------------------------------------------------------------------- +module Check = + /// Throw System.InvalidOperationException if argument is None. /// If there is a value (e.g. Some(value)) then value is returned. - let NotNone argName (arg:'T option) : 'T = - match arg with + let NotNone argName (arg:'T option) : 'T = + match arg with | None -> raise (new System.InvalidOperationException(argName)) | Some x -> x /// Throw System.ArgumentNullException if argument is null. - let ArgumentNotNull arg argName = - match box(arg) with + let ArgumentNotNull arg argName = + match box(arg) with | null -> raise (new System.ArgumentNullException(argName)) | _ -> () - + /// Throw System.ArgumentNullException if array argument is null. /// Throw System.ArgumentOutOfRangeException is array argument is empty. - let ArrayArgumentNotNullOrEmpty (arr:'T[]) argName = + let ArrayArgumentNotNullOrEmpty (arr:'T[]) argName = ArgumentNotNull arr argName if (0 = arr.Length) then raise (new System.ArgumentOutOfRangeException(argName)) /// Throw System.ArgumentNullException if string argument is null. /// Throw System.ArgumentOutOfRangeException is string argument is empty. - let StringArgumentNotNullOrEmpty (s:string) argName = + let StringArgumentNotNullOrEmpty (s:string) argName = ArgumentNotNull s argName if s.Length = 0 then raise (new System.ArgumentNullException(argName)) //------------------------------------------------------------------------- -// Library +// Library //------------------------------------------------------------------------ type IntMap<'T> = Zmap -module IntMap = +module IntMap = let empty () = Zmap.empty Int32.order let add k v (t:IntMap<'T>) = Zmap.add k v t @@ -136,7 +120,7 @@ module IntMap = let remove k (t:IntMap<'T>) = Zmap.remove k t let mem k (t:IntMap<'T>) = Zmap.mem k t let iter f (t:IntMap<'T>) = Zmap.iter f t - let map f (t:IntMap<'T>) = Zmap.map f t + let map f (t:IntMap<'T>) = Zmap.map f t let fold f (t:IntMap<'T>) z = Zmap.fold f t z @@ -149,16 +133,16 @@ module ListAssoc = /// Treat a list of key-value pairs as a lookup collection. /// This function looks up a value based on a match from the supplied /// predicate function. - let rec find f x l = - match l with + let rec find f x l = + match l with | [] -> notFound() | (x2, y) :: t -> if f x x2 then y else find f x t /// Treat a list of key-value pairs as a lookup collection. /// This function looks up a value based on a match from the supplied /// predicate function and returns None if value does not exist. - let rec tryFind (f:'key->'key->bool) (x:'key) (l:('key*'value) list) : 'value option = - match l with + let rec tryFind (f:'key->'key->bool) (x:'key) (l:('key*'value) list) : 'value option = + match l with | [] -> None | (x2, y) :: t -> if f x x2 then Some y else tryFind f x t @@ -166,16 +150,16 @@ module ListAssoc = // Library: lists as generalized sets //------------------------------------------------------------------------ -module ListSet = +module ListSet = let inline contains f x l = List.exists (f x) l - /// NOTE: O(n)! + /// NOTE: O(n)! let insert f x l = if contains f x l then l else x :: l - let unionFavourRight f l1 l2 = - match l1, l2 with + let unionFavourRight f l1 l2 = + match l1, l2 with | _, [] -> l1 - | [], _ -> l2 + | [], _ -> l2 | _ -> List.foldBack (insert f) l1 l2 (* nb. foldBack to preserve natural orders *) /// NOTE: O(n)! @@ -187,14 +171,14 @@ module ListSet = /// NOTE: O(n)! let findIndex eq x l = findIndexAux eq x l 0 - let rec remove f x l = - match l with + let rec remove f x l = + match l with | (h :: t) -> if f x h then t else h :: remove f x t | [] -> [] /// NOTE: quadratic! - let rec subtract f l1 l2 = - match l2 with + let rec subtract f l1 l2 = + match l2 with | (h :: t) -> subtract f (remove (fun y2 y1 -> f y1 y2) h l1) t | [] -> l1 @@ -205,15 +189,15 @@ module ListSet = let equals f l1 l2 = isSubsetOf f l1 l2 && isSupersetOf f l1 l2 - let unionFavourLeft f l1 l2 = - match l1, l2 with - | _, [] -> l1 - | [], _ -> l2 + let unionFavourLeft f l1 l2 = + match l1, l2 with + | _, [] -> l1 + | [], _ -> l2 | _ -> l1 @ (subtract f l2 l1) - /// NOTE: not tail recursive! - let rec intersect f l1 l2 = - match l2 with + /// NOTE: not tail recursive! + let rec intersect f l1 l2 = + match l2 with | (h :: t) -> if contains f h l1 then h :: intersect f l1 t else intersect f l1 t | [] -> [] @@ -231,7 +215,7 @@ module ListSet = | [] -> false | x :: rest -> if contains f x acc then - true + true else loop (x :: acc) rest @@ -245,7 +229,7 @@ let mapFoldFst f s (x, y) = let x2, s = f s x in (x2, y), s let mapFoldSnd f s (x, y) = let y2, s = f s y in (x, y2), s -let pair a b = a, b +let pair a b = a, b let p13 (x, _y, _z) = x @@ -289,9 +273,9 @@ let fmap2Of2 f z (a1, a2) = let z, a2 = f z a2 in z, (a1, a2) //--------------------------------------------------------------------------- // Zmap rebinds -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- -module Zmap = +module Zmap = let force k mp = match Zmap.tryFind k mp with Some x -> x | None -> failwith "Zmap.force: lookup failed" let mapKey key f mp = @@ -301,7 +285,7 @@ module Zmap = //--------------------------------------------------------------------------- // Zset -//------------------------------------------------------------------------- +//------------------------------------------------------------------------- module Zset = let ofList order xs = Zset.addList xs (Zset.empty order) @@ -315,19 +299,19 @@ module Zset = let equalOn f x y = (f x) = (f y) /// Buffer printing utility -let bufs f = - let buf = System.Text.StringBuilder 100 - f buf +let bufs f = + let buf = System.Text.StringBuilder 100 + f buf buf.ToString() /// Writing to output stream via a string buffer. -let writeViaBuffer (os: TextWriter) f x = - let buf = System.Text.StringBuilder 100 - f buf x +let writeViaBuffer (os: TextWriter) f x = + let buf = System.Text.StringBuilder 100 + f buf x os.Write(buf.ToString()) //--------------------------------------------------------------------------- -// Imperative Graphs +// Imperative Graphs //--------------------------------------------------------------------------- type GraphNode<'Data, 'Id> = { nodeId: 'Id; nodeData: 'Data; mutable nodeNeighbours: GraphNode<'Data, 'Id> list } @@ -338,19 +322,19 @@ type Graph<'Data, 'Id when 'Id : comparison and 'Id : equality> edges: ('Data * 'Data) list) = let edges = edges |> List.map (fun (v1, v2) -> nodeIdentity v1, nodeIdentity v2) - let nodes = nodes |> List.map (fun d -> nodeIdentity d, { nodeId = nodeIdentity d; nodeData=d; nodeNeighbours=[] }) - let tab = Map.ofList nodes + let nodes = nodes |> List.map (fun d -> nodeIdentity d, { nodeId = nodeIdentity d; nodeData=d; nodeNeighbours=[] }) + let tab = Map.ofList nodes let nodes = List.map snd nodes - do for node in nodes do + do for node in nodes do node.nodeNeighbours <- edges |> List.filter (fun (x, _y) -> x = node.nodeId) |> List.map (fun (_, nodeId) -> tab.[nodeId]) member g.GetNodeData nodeId = tab.[nodeId].nodeData - member g.IterateCycles f = - let rec trace path node = + member g.IterateCycles f = + let rec trace path node = if List.exists (nodeIdentity >> (=) node.nodeId) path then f (List.rev path) else List.iter (trace (node.nodeData :: path)) node.nodeNeighbours - List.iter (fun node -> trace [] node) nodes + List.iter (fun node -> trace [] node) nodes //--------------------------------------------------------------------------- // In some cases we play games where we use 'null' as a more efficient representation @@ -362,8 +346,8 @@ type Graph<'Data, 'Id when 'Id : comparison and 'Id : equality> // The following DEBUG code does not currently compile. //#if DEBUG -//type 'T NonNullSlot = 'T option -//let nullableSlotEmpty() = None +//type 'T NonNullSlot = 'T option +//let nullableSlotEmpty() = None //let nullableSlotFull(x) = Some x //#else type NonNullSlot<'T> = 'T @@ -378,19 +362,19 @@ let nullableSlotFull x = x 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 +let inline cached cache resF = + match box cache.cacheVal with + | null -> + let res = resF() + cache.cacheVal <- nullableSlotFull res res - | _ -> + | _ -> cache.cacheVal -let inline cacheOptByref (cache: byref<'T option>) f = - match cache with +let inline cacheOptByref (cache: byref<'T option>) f = + match cache with | Some v -> v - | None -> + | None -> let res = f() cache <- Some res res @@ -398,13 +382,13 @@ let inline cacheOptByref (cache: byref<'T option>) f = // REVIEW: this is only used because we want to mutate a record field, // and because you cannot take a byref<_> of such a thing directly, // we cannot use 'cacheOptByref'. If that is changed, this can be removed. -let inline cacheOptRef cache f = +let inline cacheOptRef cache f = match !cache with | Some v -> v - | None -> + | None -> let res = f() cache := Some res - res + res let inline tryGetCacheValue cache = match box cache.cacheVal with @@ -414,7 +398,7 @@ let inline tryGetCacheValue cache = #if DUMPER type Dumper(x:obj) = [] - member self.Dump = sprintf "%A" x + member self.Dump = sprintf "%A" x #endif //--------------------------------------------------------------------------- @@ -446,9 +430,9 @@ module internal AsyncUtil = let mutable result = None // The continuation for the result, if any let mutable savedConts = [] - + let syncRoot = new obj() - + // Record the result in the AsyncResultCell. // Ignore subsequent sets of the result. This can happen, e.g. for a race between @@ -462,7 +446,7 @@ module internal AsyncUtil = result <- Some res // Invoke continuations in FIFO order // Continuations that Async.FromContinuations provide do QUWI/SyncContext.Post, - // so the order is not overly relevant but still. + // so the order is not overly relevant but still. List.rev savedConts) let postOrQueue (sc:SynchronizationContext, cont) = match sc with @@ -472,7 +456,7 @@ module internal AsyncUtil = // Run continuations outside the lock match grabbedConts with | [] -> () - | [(sc, cont) as c] -> + | [(sc, cont) as c] -> if SynchronizationContext.Current = sc then cont res else @@ -497,7 +481,7 @@ module internal AsyncUtil = match grabbedResult with | None -> () | Some res -> cont res) - + /// Get the result and Commit(...). member x.AsyncResult = @@ -514,11 +498,11 @@ module UnmanagedProcessExecutionOptions = open System open System.Runtime.InteropServices - [] + [] extern UIntPtr private GetProcessHeap() [] - extern bool private HeapSetInformation( + extern bool private HeapSetInformation( UIntPtr _HeapHandle, UInt32 _HeapInformationClass, UIntPtr _HeapInformation, @@ -528,10 +512,10 @@ module UnmanagedProcessExecutionOptions = extern UInt32 private GetLastError() // Translation of C# from http://swikb/v1/DisplayOnlineDoc.aspx?entryID=826 and copy in bug://5018 - [] + [] let EnableHeapTerminationOnCorruption() = if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && System.Environment.OSVersion.Version.Major >= 6 && // If OS is Vista or higher - System.Environment.Version.Major < 3) then // and CLR not 3.0 or higher + System.Environment.Version.Major < 3) then // and CLR not 3.0 or higher // "The flag HeapSetInformation sets is available in Windows XP SP3 and later. // The data structure used for heap information is available on earlier versions of Windows. // The call will either return TRUE (found and set the flag) or false (flag not found). @@ -544,9 +528,9 @@ module UnmanagedProcessExecutionOptions = // http://blogs.msdn.com/michael_howard/archive/2008/02/18/faq-about-heapsetinformation-in-windows-vista-and-heap-based-buffer-overruns.aspx let HeapEnableTerminationOnCorruption = 1u : uint32 if not (HeapSetInformation(GetProcessHeap(), HeapEnableTerminationOnCorruption, UIntPtr.Zero, UIntPtr.Zero)) then - raise (System.Security.SecurityException( - "Unable to enable unmanaged process execution option TerminationOnCorruption. " + - "HeapSetInformation() returned FALSE; LastError = 0x" + + raise (System.Security.SecurityException( + "Unable to enable unmanaged process execution option TerminationOnCorruption. " + + "HeapSetInformation() returned FALSE; LastError = 0x" + GetLastError().ToString("X").PadLeft(8, '0') + ".")) [] @@ -554,14 +538,14 @@ module StackGuard = open System.Runtime.CompilerServices - [] + [] let private MaxUncheckedRecursionDepth = 20 let EnsureSufficientExecutionStack recursionDepth = if recursionDepth > MaxUncheckedRecursionDepth then RuntimeHelpers.EnsureSufficientExecutionStack () -[] +[] type MaybeLazy<'T> = | Strict of 'T | Lazy of Lazy<'T> @@ -579,7 +563,7 @@ type MaybeLazy<'T> = let inline vsnd ((_, y): struct('T * 'T)) = y /// Track a set of resources to cleanup -type DisposablesTracker() = +type DisposablesTracker() = let items = Stack() @@ -588,8 +572,35 @@ type DisposablesTracker() = interface IDisposable with - member _.Dispose() = + member _.Dispose() = let l = List.ofSeq items items.Clear() - for i in l do + for i in l do try i.Dispose() with _ -> () + +/// Specialized parallel functions for an array. +/// Different from Array.Parallel as it will try to minimize the max degree of parallelism. +/// Will flatten aggregate exceptions that contain one exception. +[] +module ArrayParallel = + + let inline iteri f (arr: 'T []) = + let parallelOptions = ParallelOptions(MaxDegreeOfParallelism = max (min Environment.ProcessorCount arr.Length) 1) + try + Parallel.For(0, arr.Length, parallelOptions, fun i -> + f i arr.[i] + ) |> ignore + with + | :? AggregateException as ex when ex.InnerExceptions.Count = 1 -> + raise(ex.InnerExceptions.[0]) + + let inline iter f (arr: 'T []) = + arr |> iteri (fun _ item -> f item) + + let inline mapi f (arr: 'T []) = + let mapped = Array.zeroCreate arr.Length + arr |> iteri (fun i item -> mapped.[i] <- f i item) + mapped + + let inline map f (arr: 'T []) = + arr |> mapi (fun _ item -> f item) diff --git a/src/fsharp/lib.fsi b/src/fsharp/lib.fsi index d7957a1a304..f7816c129b0 100644 --- a/src/fsharp/lib.fsi +++ b/src/fsharp/lib.fsi @@ -1,11 +1,12 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module internal FSharp.Compiler.Lib +module internal Internal.Utilities.Library.Extras -open System.Collections.Generic open System.IO open System.Text -open FSharp.Compiler.AbstractIL.Internal +open System.Globalization +open System.Collections.Generic +open Internal.Utilities.Collections val debug: bool @@ -22,19 +23,25 @@ val GetEnvInteger: e:string -> dflt:int -> int val dispose: x:System.IDisposable -> unit module Bits = + /// Get the least significant byte of a 32-bit integer val b0: n:int -> int + + /// Get the 2nd least significant byte of a 32-bit integer val b1: n:int -> int + + /// Get the 3rd least significant byte of a 32-bit integer val b2: n:int -> int + + /// Get the most significant byte of a 32-bit integer val b3: n:int -> int + val pown32: n:int -> int + val pown64: n:int -> int64 + val mask32: m:int32 -> n:int -> int - val mask64: m:int32 -> n:int -> int64 -module Filename = - val fullpath: cwd:string -> nm:string -> string - val hasSuffixCaseInsensitive: suffix:string -> filename:string -> bool - val isDll: file:string -> bool + val mask64: m:int32 -> n:int -> int64 module Bool = val order: IComparer @@ -52,11 +59,13 @@ module Pair = IComparer<'T1 * 'T2> type NameSet = Zset + module NameSet = val ofList: l:string list -> NameSet module NameMap = val domain: m:Map -> Zset + val domainL: m:Map -> string list module Check = @@ -110,7 +119,7 @@ module ListAssoc = module ListSet = val inline contains: f:('a -> 'b -> bool) -> x:'a -> l:'b list -> bool - /// NOTE: O(n)! + /// NOTE: O(n)! val insert: f:('a -> 'a -> bool) -> x:'a -> l:'a list -> 'a list val unionFavourRight : f:('a -> 'a -> bool) -> l1:'a list -> l2:'a list -> 'a list @@ -131,7 +140,7 @@ module ListSet = val unionFavourLeft : f:('a -> 'a -> bool) -> l1:'a list -> l2:'a list -> 'a list - /// NOTE: not tail recursive! + /// NOTE: not tail recursive! val intersect : f:('a -> 'b -> bool) -> l1:'b list -> l2:'a list -> 'a list /// Note: if duplicates appear, keep the ones toward the _front_ of the list @@ -205,7 +214,7 @@ type Graph<'Data,'Id when 'Id: comparison> = edges:('Data * 'Data) list -> Graph<'Data,'Id> member GetNodeData: nodeId:'Id -> 'Data member IterateCycles: f:('Data list -> unit) -> unit - + /// In some cases we play games where we use 'null' as a more efficient representation /// in F#. The functions below are used to give initial values to mutable fields. /// This is an unsafe trick, as it relies on the fact that the type of values @@ -239,15 +248,15 @@ module AsyncUtil = | AsyncException of exn | AsyncCanceled of System.OperationCanceledException static member Commit: res:AsyncResult<'T> -> Async<'T> - + /// When using .NET 4.0 you can replace this type by [] type AsyncResultCell<'T> = - + new: unit -> AsyncResultCell<'T> member RegisterResult: res:AsyncResult<'T> -> unit member AsyncResult: Async<'T> - + module UnmanagedProcessExecutionOptions = val EnableHeapTerminationOnCorruption: unit -> unit @@ -260,7 +269,7 @@ type MaybeLazy<'T> = | Lazy of System.Lazy<'T> member Force: unit -> 'T member Value: 'T - + val inline vsnd: struct ('T * 'T) -> 'T /// Track a set of resources to cleanup @@ -272,3 +281,13 @@ type DisposablesTracker = member Register: i:System.IDisposable -> unit interface System.IDisposable + +/// Specialized parallel functions for an array. +/// Different from Array.Parallel as it will try to minimize the max degree of parallelism. +/// Will flatten aggregate exceptions that contain one exception. +[] +module ArrayParallel = + + val inline map : ('T -> 'U) -> 'T [] -> 'U [] + + val inline mapi : (int -> 'T -> 'U) -> 'T [] -> 'U [] diff --git a/src/fsharp/pars.fsy b/src/fsharp/pars.fsy index 2f229183503..c40d81f511f 100644 --- a/src/fsharp/pars.fsy +++ b/src/fsharp/pars.fsy @@ -11,17 +11,20 @@ open Internal.Utilities.Text.Parsing open FSharp.Compiler open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL +open Internal.Utilities.Library open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features -open FSharp.Compiler.Lib +open Internal.Utilities.Library.Extras open FSharp.Compiler.ParseHelpers -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.SyntaxTreeOps open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.XmlDoc +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Position +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Xml #if DEBUG let debugPrint s = @@ -62,14 +65,14 @@ let mkSynDoBinding (vis, strict, expr, m) = match vis with | Some vis -> errorR(Error(FSComp.SR.parsDoCannotHaveVisibilityDeclarations (vis.ToString()), m)) | None -> () - Binding (None, - (if strict then DoBinding else StandaloneExpression), + SynBinding(None, + (if strict then SynBindingKind.Do else SynBindingKind.StandaloneExpression), false, false, [], PreXmlDoc.Empty, SynInfo.emptySynValData, (if strict then SynPat.Const(SynConst.Unit, m) else SynPat.Wild m), - None, expr, m, NoDebugPointAtDoBinding) + None, expr, m, DebugPointAtBinding.NoneAtDo) let mkSynDoDecl (e: SynExpr) = - let spExpr = if IsControlFlowExpression e then NoDebugPointAtDoBinding else DebugPointAtBinding e.Range in + let spExpr = if IsControlFlowExpression e then DebugPointAtBinding.NoneAtDo else DebugPointAtBinding.Yes e.Range SynModuleDecl.DoExpr(spExpr, e, e.Range) let addAttribs attrs p = SynPat.Attrib(p, attrs, p.Range) @@ -153,6 +156,8 @@ let mkClassMemberLocalBindings(isStatic, initialRangeOpt, attrs, vis, BindingSet match initialRangeOpt with | None -> bindingSetRange | Some m -> unionRanges m bindingSetRange + // decls could have a leading attribute + |> fun m -> (m, decls) ||> unionRangeWithListBy (fun (SynBinding(range = m)) -> m) if not (isNil ignoredFreeAttrs) then warning(Error(FSComp.SR.parsAttributesIgnored(), wholeRange)); if isUse then errorR(Error(FSComp.SR.parsUseBindingsIllegalInImplicitClassConstructors(), wholeRange)) SynMemberDefn.LetBindings (decls, isStatic, isRec, wholeRange) @@ -164,7 +169,9 @@ let mkLocalBindings (mWhole, BindingSetPreAttrs(_, isRec, isUse, declsPreAttrs, let mkDefnBindings (mWhole, BindingSetPreAttrs(_, isRec, isUse, declsPreAttrs, _bindingSetRange), attrs, vis, attrsm) = if isUse then warning(Error(FSComp.SR.parsUseBindingsIllegalInModules(), mWhole)) - let freeAttrs, decls = declsPreAttrs attrs vis + let freeAttrs, decls = declsPreAttrs attrs vis + // decls might have an extended range due to leading attributes + let mWhole = (mWhole, decls) ||> unionRangeWithListBy (fun (SynBinding(range = m)) -> m) let letDecls = [ SynModuleDecl.Let (isRec, decls, mWhole) ] let attrDecls = if not (isNil freeAttrs) then [ SynModuleDecl.Attributes (freeAttrs, attrsm) ] else [] attrDecls @ letDecls @@ -173,7 +180,7 @@ let idOfPat (parseState:IParseState) m p = match p with | SynPat.Wild r when parseState.LexBuffer.SupportsFeature LanguageFeature.WildCardInForLoop -> mkSynId r "_" - | SynPat.Named (SynPat.Wild _, id, false, _, _) -> id + | SynPat.Named (id, false, _, _) -> id | SynPat.LongIdent(LongIdentWithDots([id], _), _, None, SynArgPats.Pats [], None, _) -> id | _ -> raiseParseErrorAt m (FSComp.SR.parsIntegerForLoopRequiresSimpleIdentifier()) @@ -191,16 +198,17 @@ let rangeOfLongIdent(lid:LongIdent) = %} // Producing these changes the lex state, e.g. string --> token, or nesting level of braces in interpolated strings -%token BYTEARRAY -%token STRING -%token INTERP_STRING_BEGIN_END -%token INTERP_STRING_BEGIN_PART +%token BYTEARRAY +%token STRING +%token INTERP_STRING_BEGIN_END +%token INTERP_STRING_BEGIN_PART %token INTERP_STRING_PART %token INTERP_STRING_END %token LBRACE RBRACE -%token KEYWORD_STRING // Like __SOURCE_DIRECTORY__ +%token KEYWORD_STRING // Like __SOURCE_DIRECTORY__ %token IDENT +%token HASH_IDENT %token INFIX_STAR_STAR_OP %token INFIX_COMPARE_OP %token INFIX_AT_HAT_OP @@ -307,36 +315,36 @@ let rangeOfLongIdent(lid:LongIdent) = %token HASH_IF HASH_ELSE HASH_ENDIF %start signatureFile implementationFile interaction typedSeqExprEOF typEOF -%type typedSeqExprEOF -%type implementationFile -%type signatureFile -%type interaction -%type ident -%type typ typEOF -%type tyconSpfns -%type patternResult -%type declExpr -%type minusExpr -%type appExpr -%type argExpr -%type declExprBlock -%type headBindingPattern -%type atomicExprAfterType -%type typedSeqExprBlock -%type atomicExpr -%type tyconDefnOrSpfnSimpleRepr -%type <(SyntaxTree.SynEnumCase, SyntaxTree.SynUnionCase) Choice list> unionTypeRepr -%type tyconDefnAugmentation -%type exconDefn -%type exconCore -%type moduleDefnsOrExprPossiblyEmptyOrBlock -%type path -%type pathOp +%type typedSeqExprEOF +%type implementationFile +%type signatureFile +%type interaction +%type ident +%type typ typEOF +%type tyconSpfnList +%type patternResult +%type declExpr +%type minusExpr +%type appExpr +%type argExpr +%type declExprBlock +%type headBindingPattern +%type atomicExprAfterType +%type typedSeqExprBlock +%type atomicExpr +%type tyconDefnOrSpfnSimpleRepr +%type <(SynEnumCase, SynUnionCase) Choice list> unionTypeRepr +%type tyconDefnAugmentation +%type exconDefn +%type exconCore +%type moduleDefnsOrExprPossiblyEmptyOrBlock +%type path +%type pathOp /* LESS GREATER parsedOk typeArgs m for each mWhole */ -%type typeArgsActual +%type typeArgsActual /* LESS GREATER typeArgs m for each mWhole */ -%type typeArgsNoHpaDeprecated -%type typar +%type typeArgsNoHpaDeprecated +%type typar /* About precedence rules: * @@ -537,14 +545,14 @@ let rangeOfLongIdent(lid:LongIdent) = /* An interaction in F# Interactive */ interaction: | interactiveItemsTerminator - { IDefns ($1, lhs parseState) } + { ParsedScriptInteraction.Definitions ($1, lhs parseState) } | SEMICOLON { warning(Error(FSComp.SR.parsUnexpectedSemicolon(), rhs parseState 1)) - IDefns ([], lhs parseState) } + ParsedScriptInteraction.Definitions ([], lhs parseState) } | OBLOCKSEP - { IDefns ([], lhs parseState) } + { ParsedScriptInteraction.Definitions ([], lhs parseState) } interactiveTerminator: @@ -627,7 +635,8 @@ interactiveSeparator: /* A #directive in a module, namespace or an interaction */ hashDirective: | HASH IDENT hashDirectiveArgs - { ParsedHashDirective ($2, $3, lhs parseState) } + { let m = match $3 with [] -> rhs2 parseState 1 2 | _ -> rhs2 parseState 1 3 + ParsedHashDirective ($2, $3, m) } /* The arguments to a #directive */ @@ -640,10 +649,14 @@ hashDirectiveArgs: /* One argument to a #directive */ -hashDirectiveArg: - | stringOrKeywordString - { $1 } - +hashDirectiveArg: + | string + { let s, kind = $1 + ParsedHashDirectiveArgument.String (s, kind, lhs parseState) } + | sourceIdentifier + { let c,v = $1 + ParsedHashDirectiveArgument.SourceIdentifier (c, v, lhs parseState) } + /*--------------------------------------------------------------------------*/ /* F# Language Proper - signature files */ @@ -716,19 +729,23 @@ fileModuleSpec: | opt_attributes opt_declVisibility moduleIntro moduleSpfnsPossiblyEmptyBlock { if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(), rhs parseState 2)) let m2 = rhs parseState 3 - let m = (rhs2 parseState 1 4) + let mDeclsAndAttrs = (List.map (fun (a: SynAttributeList) -> a.Range) $1) @ (List.map (fun (d: SynModuleSigDecl) -> d.Range) $4) + let m = (m2, mDeclsAndAttrs) ||> unionRangeWithListBy id let isRec, path2, xml, vis = $3 (fun (isRec2, path, _) -> if not (isNil path) then errorR(Error(FSComp.SR.parsNamespaceOrModuleNotBoth(), m2)) let lid = path@path2 - ParsedSigFileFragment.NamedModule(SynModuleOrNamespaceSig(lid, (isRec || isRec2), NamedModule, $4, xml, $1, vis, m))) } + ParsedSigFileFragment.NamedModule(SynModuleOrNamespaceSig(lid, (isRec || isRec2), SynModuleOrNamespaceKind.NamedModule, $4, xml, $1, vis, m))) } | moduleSpfnsPossiblyEmptyBlock { let m = (rhs parseState 1) (fun (isRec, path, xml) -> - match path with + match path with | [] -> ParsedSigFileFragment.AnonModule($1, m) - | _ -> ParsedSigFileFragment.NamespaceFragment(path, isRec, DeclaredNamespace, $1, xml, [], m)) } + | _ -> + let lastDeclRange = List.tryLast $1 |> Option.map (fun decl -> decl.Range) |> Option.defaultValue (rhs parseState 1) + let m = mkRange lastDeclRange.FileName (lhs parseState).Start lastDeclRange.End + ParsedSigFileFragment.NamespaceFragment(path, isRec, SynModuleOrNamespaceKind.DeclaredNamespace, $1, xml, [], m)) } moduleSpfnsPossiblyEmptyBlock: @@ -791,23 +808,31 @@ moduleSpfn: { let isRec, path, xml, vis = $3 if not (isSingleton path) 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) + let info = SynComponentInfo($1, None, [], path, xml, false, vis, rhs parseState 3) if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(), rhs parseState 2)) - SynModuleSigDecl.NestedModule(info, isRec, $5, rhs2 parseState 1 5) } + let m = (rhs2 parseState 1 4, $5) ||> unionRangeWithListBy (fun (d: SynModuleSigDecl) -> d.Range) + SynModuleSigDecl.NestedModule(info, isRec, $5, m) } - | opt_attributes opt_declVisibility tyconSpfns - { if Option.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()) - | h :: t -> h, t - let tc = (TypeDefnSig(ComponentInfo($1@cas, a, cs, b, c, d, d2, d3), e, f, g))in - SynModuleSigDecl.Types (tc :: rest, rhs parseState 3) } + | opt_attributes opt_declVisibility typeKeyword tyconSpfnList + { if Option.isSome $2 then + errorR (Error (FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier (), rhs parseState 2)) + + match $4 with + | [] -> raiseParseErrorAt (rhs2 parseState 3 4) (FSComp.SR.parsUnexpectedEmptyModuleDefn ()) + | SynTypeDefnSig (SynComponentInfo (cas, a, cs, b, c, d, d2, d3), e, f, g) :: tail -> + let attrs = $1 @ cas + let mTc = + let keywordM = rhs parseState 3 + (keywordM, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) |> unionRanges g + let tc = (SynTypeDefnSig(SynComponentInfo(attrs, a, cs, b, c, d, d2, d3), e, f, mTc)) + let m = (mTc, tail) ||> unionRangeWithListBy (fun (a: SynTypeDefnSig) -> a.Range) + + SynModuleSigDecl.Types (tc :: tail, m) } | opt_attributes opt_declVisibility exconSpfn { if Option.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)) + let ec = SynExceptionSig(SynExceptionDefnRepr($1@cas, a, b, c, d, d2), e, f) SynModuleSigDecl.Exception(ec, rhs parseState 3) } | openDecl @@ -819,7 +844,7 @@ valSpfn: 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 not (isNil attr2) then errorR(Deprecated(FSComp.SR.parsAttributesMustComeBeforeVal(), rhs parseState 4)) let m = rhs2 parseState 1 11 - let valSpfn = ValSpfn((attr1@attr2), id, explicitValTyparDecls, ty, arity, isInline, isMutable, doc, vis2, konst, m) + let valSpfn = SynValSig((attr1@attr2), id, explicitValTyparDecls, ty, arity, isInline, isMutable, doc, vis2, konst, m) SynModuleSigDecl.Val(valSpfn, m) } @@ -851,12 +876,6 @@ moduleSpecBlock: { $2 } -/* A group of type definitions in a signature */ -tyconSpfns: - | typeKeyword tyconSpfnList - { $2 } - - tyconSpfnList: | tyconSpfn AND tyconSpfnList { $1 :: $3 } @@ -871,7 +890,7 @@ tyconSpfn: { let lhsm = rhs parseState 1 $3 lhsm $1 } | typeNameInfo opt_classSpfn - { TypeDefnSig($1, SynTypeDefnSigRepr.Simple (SynTypeDefnSimpleRepr.None (lhs parseState), lhs parseState), $2, lhs parseState) } + { SynTypeDefnSig($1, SynTypeDefnSigRepr.Simple (SynTypeDefnSimpleRepr.None (lhs parseState), lhs parseState), $2, lhs parseState) } /* The right-hand-side of a type definition in a signature */ @@ -898,32 +917,37 @@ tyconSpfnRhsBlock: /* The right-hand-side of a type definition in a signature */ tyconSpfnRhs: | tyconDefnOrSpfnSimpleRepr - { let m = $1.Range - (fun lhsm nameInfo augmentation -> - TypeDefnSig(nameInfo, SynTypeDefnSigRepr.Simple ($1, m), augmentation, m)) } + { (fun lhsm nameInfo augmentation -> + let declRange = unionRanges lhsm $1.Range + let mWhole = (declRange, augmentation) ||> unionRangeWithListBy (fun (mem: SynMemberSig) -> mem.Range) + SynTypeDefnSig(nameInfo, SynTypeDefnSigRepr.Simple ($1, $1.Range), augmentation, mWhole)) } | tyconClassSpfn - { let m = lhs parseState + { let objectModelRange = lhs parseState let needsCheck, (kind, decls) = $1 (fun nameRange nameInfo augmentation -> if needsCheck && isNil decls then reportParseErrorAt nameRange (FSComp.SR.parsEmptyTypeDefinition()) - TypeDefnSig(nameInfo, SynTypeDefnSigRepr.ObjectModel (kind, decls, m), augmentation, m)) } + + let declRange = unionRanges nameRange objectModelRange + let mWhole = (declRange, augmentation) ||> unionRangeWithListBy (fun (mem: SynMemberSig) -> mem.Range) + SynTypeDefnSig(nameInfo, SynTypeDefnSigRepr.ObjectModel (kind, decls, objectModelRange), augmentation, mWhole)) } | DELEGATE OF topType { let m = lhs parseState 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) + let invoke = SynMemberSig.Member(SynValSig([], mkSynId m "Invoke", inferredTyparDecls, ty, arity, false, false, PreXmlDoc.Empty, None, None, m), AbstractMemberFlags SynMemberKind.Member, m) (fun nameRange nameInfo augmentation -> if not (isNil augmentation) then raiseParseErrorAt m (FSComp.SR.parsAugmentationsIllegalOnDelegateType()) - TypeDefnSig(nameInfo, SynTypeDefnSigRepr.ObjectModel (TyconDelegate (ty, arity), [invoke], m), [], m)) } + let mWhole = unionRanges nameRange m + SynTypeDefnSig(nameInfo, SynTypeDefnSigRepr.ObjectModel (SynTypeDefnKind.Delegate (ty, arity), [invoke], m), [], mWhole)) } /* The right-hand-side of an object type definition in a signature */ tyconClassSpfn: | classSpfnBlockKindUnspecified { let needsCheck, decls = $1 - needsCheck, (TyconUnspecified, decls) } + needsCheck, (SynTypeDefnKind.Unspecified, decls) } | classOrInterfaceOrStruct classSpfnBlock END { false, ($1, $2) } @@ -986,13 +1010,14 @@ classMemberSpfn: { if Option.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 + let getSetAdjuster arity = match arity, getSet with SynValInfo([], _), SynMemberKind.Member -> SynMemberKind.PropertyGet | _ -> getSet let wholeRange = let m = rhs parseState 3 match getSetRangeOpt with | None -> unionRanges m ty.Range | Some m2 -> unionRanges m m2 - let valSpfn = ValSpfn($1, id, explicitValTyparDecls, ty, arity, isInline, false, doc, vis2, optLiteralValue, wholeRange) + |> fun m -> (m, $1) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) + let valSpfn = SynValSig($1, id, explicitValTyparDecls, ty, arity, isInline, false, doc, vis2, optLiteralValue, wholeRange) let _, flags = $3 SynMemberSig.Member(valSpfn, flags (getSetAdjuster arity), wholeRange) } @@ -1023,14 +1048,14 @@ classMemberSpfn: { let vis, doc, (ty, valSynInfo) = $2, grabXmlDoc(parseState, 3), $5 let m = unionRanges (rhs parseState 1) ty.Range let isInline = false - let valSpfn = ValSpfn ($1, mkSynId (rhs parseState 3) "new", noInferredTypars, ty, valSynInfo, isInline, false, doc, vis, None, m) + let valSpfn = SynValSig ($1, mkSynId (rhs parseState 3) "new", noInferredTypars, ty, valSynInfo, isInline, false, doc, vis, None, m) SynMemberSig.Member(valSpfn, CtorMemberFlags, m) } /* The optional "with get, set" on a member in a signature */ classMemberSpfnGetSet: | /* EMPTY */ - { None, MemberKind.Member } + { None, SynMemberKind.Member } | WITH classMemberSpfnGetSetElements { Some (rhs2 parseState 1 2), $2 } @@ -1047,8 +1072,8 @@ classMemberSpfnGetSet: classMemberSpfnGetSetElements: | nameop { (let (id:Ident) = $1 - if id.idText = "get" then MemberKind.PropertyGet - else if id.idText = "set" then MemberKind.PropertySet + if id.idText = "get" then SynMemberKind.PropertyGet + else if id.idText = "set" then SynMemberKind.PropertySet else raiseParseErrorAt (rhs parseState 1) (FSComp.SR.parsGetOrSetRequired())) } | nameop COMMA nameop @@ -1056,7 +1081,7 @@ classMemberSpfnGetSetElements: if not ((id.idText = "get" && $3.idText = "set") || (id.idText = "set" && $3.idText = "get")) then raiseParseErrorAt (rhs2 parseState 1 3) (FSComp.SR.parsGetOrSetRequired()) - MemberKind.PropertyGetSet } + SynMemberKind.PropertyGetSet } memberSpecFlags: | memberFlags { $1 } @@ -1140,19 +1165,23 @@ fileModuleImpl: | opt_attributes opt_declVisibility moduleIntro moduleDefnsOrExprPossiblyEmptyOrBlock { if Option.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 mDeclsAndAttrs = (List.map (fun (a: SynAttributeList) -> a.Range) $1) @ (List.map (fun (d: SynModuleDecl) -> d.Range) $4) + let m = (m2, mDeclsAndAttrs) ||> unionRangeWithListBy id let isRec2, path2, xml, vis = $3 (fun (isRec, path, _) -> if not (isNil path) then errorR(Error(FSComp.SR.parsNamespaceOrModuleNotBoth(), m2)) let lid = path@path2 - ParsedImplFileFragment.NamedModule(SynModuleOrNamespace(lid, (isRec || isRec2), NamedModule, $4, xml, $1, vis, m))) } + ParsedImplFileFragment.NamedModule(SynModuleOrNamespace(lid, (isRec || isRec2), SynModuleOrNamespaceKind.NamedModule, $4, xml, $1, vis, m))) } | moduleDefnsOrExprPossiblyEmptyOrBlock { let m = (rhs parseState 1) (fun (isRec, path, xml) -> match path with | [] -> ParsedImplFileFragment.AnonModule($1, m) - | _ -> ParsedImplFileFragment.NamespaceFragment(path, isRec, DeclaredNamespace, $1, xml, [], m)) } + | _ -> + let lastDeclRange = List.tryLast $1 |> Option.map (fun decl -> decl.Range) |> Option.defaultValue (rhs parseState 1) + let m = mkRange lastDeclRange.FileName (lhs parseState).Start lastDeclRange.End + ParsedImplFileFragment.NamespaceFragment(path, isRec, SynModuleOrNamespaceKind.DeclaredNamespace, $1, xml, [], m)) } /* A collection/block of definitions or expressions making up a module or namespace, possibly empty */ @@ -1266,8 +1295,10 @@ moduleDefn: /* 'type' definitions */ | opt_attributes opt_declVisibility typeKeyword tyconDefn tyconDefnList { if Option.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 (SynTypeDefn(SynComponentInfo(cas, a, cs, b, c, d, d2, d3), e, f, g, h)) = $4 + let attrs = $1@cas + let mTc = (h, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) + let tc = (SynTypeDefn(SynComponentInfo(attrs, a, cs, b, c, d, d2, d3), e, f, g, mTc)) let types = tc :: $5 [ SynModuleDecl.Types(types, (rhs parseState 3, types) ||> unionRangeWithListBy (fun t -> t.Range) ) ] } @@ -1295,7 +1326,7 @@ moduleDefn: [ SynModuleDecl.ModuleAbbrev(List.head path, eqn, (rhs parseState 3, eqn) ||> unionRangeWithListBy (fun id -> id.idRange) ) ] | Choice2Of2 def -> if not (isSingleton path) then raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsModuleAbbreviationMustBeSimpleName()) - let info = ComponentInfo(attribs, [], [], path, xml, false, vis, rhs parseState 3) + let info = SynComponentInfo(attribs, None, [], path, xml, false, vis, rhs parseState 3) [ SynModuleDecl.NestedModule(info, isRec, def, false, (rhs2 parseState 1 4, def) ||> unionRangeWithListBy (fun d -> d.Range) ) ] } /* unattached custom attributes */ @@ -1480,9 +1511,8 @@ memberFlags: /* The name of a type in a signature or implementation, possibly with type parameters and constraints */ typeNameInfo: | opt_attributes tyconNameAndTyparDecls opt_typeConstraints - { let typars, lid, fixity, tpcs1, vis, xmlDoc = $2 - let tpcs2 = $3 - ComponentInfo($1, typars, (tpcs1 @ tpcs2), lid, xmlDoc, fixity, vis, rangeOfLid lid) } + { let typars, lid, fixity, vis, xmlDoc = $2 + SynComponentInfo ($1, typars, $3, lid, xmlDoc, fixity, vis, rangeOfLid lid) } /* Part of a set of type definitions */ tyconDefnList: @@ -1494,11 +1524,11 @@ tyconDefnList: /* A type definition */ tyconDefn: | typeNameInfo - { TypeDefn($1, SynTypeDefnRepr.Simple(SynTypeDefnSimpleRepr.None($1.Range), $1.Range), [], $1.Range) } + { SynTypeDefn($1, SynTypeDefnRepr.Simple(SynTypeDefnSimpleRepr.None($1.Range), $1.Range), [], None, $1.Range) } | typeNameInfo opt_equals tyconDefnRhsBlock { if not $2 then ( - let (ComponentInfo(_, _, _, lid, _, _, _, _)) = $1 + let (SynComponentInfo(_, _, _, lid, _, _, _, _)) = $1 // While the spec doesn't allow long idents here, the parser doesn't enforce this, so take one ident let typeNameId = List.last lid raiseParseErrorAt (rhs parseState 2) (FSComp.SR.parsEqualsMissingInTypeDefinition(typeNameId.ToString())) @@ -1507,17 +1537,17 @@ tyconDefn: let (tcDefRepr:SynTypeDefnRepr), members = $3 nameRange let declRange = unionRanges (rhs parseState 1) tcDefRepr.Range let mWhole = (declRange, members) ||> unionRangeWithListBy (fun (mem:SynMemberDefn) -> mem.Range) - TypeDefn($1, tcDefRepr, members, mWhole) } + SynTypeDefn($1, tcDefRepr, members, None, mWhole) } | typeNameInfo tyconDefnAugmentation { let m = (rhs parseState 1, $2) ||> unionRangeWithListBy (fun mem -> mem.Range) - TypeDefn($1, SynTypeDefnRepr.ObjectModel(TyconAugmentation, [], m), $2, m) } + SynTypeDefn($1, SynTypeDefnRepr.ObjectModel(SynTypeDefnKind.Augmentation, [], m), $2, None, m) } | typeNameInfo opt_attributes opt_declVisibility opt_HIGH_PRECEDENCE_APP simplePatterns optAsSpec EQUALS tyconDefnRhsBlock { let vis, spats, az = $3, $5, $6 let nameRange = rhs parseState 1 let (tcDefRepr, members) = $8 nameRange - let (ComponentInfo(_, _, _, lid, _, _, _, _)) = $1 + let (SynComponentInfo(_, _, _, lid, _, _, _, _)) = $1 // Gets the XML doc comments prior to the implicit constructor let xmlDoc = grabXmlDoc(parseState, 5) let memberCtorPattern = SynMemberDefn.ImplicitCtor (vis, $2, spats, az, xmlDoc, rangeOfLid lid) @@ -1528,7 +1558,7 @@ tyconDefn: let declRange = unionRanges (rhs parseState 1) tcDefRepr.Range let mWhole = (declRange, members) ||> unionRangeWithListBy (fun (mem:SynMemberDefn) -> mem.Range) - TypeDefn($1, tcDefRepr, members, mWhole) } + SynTypeDefn($1, tcDefRepr, members, Some memberCtorPattern, mWhole) } /* The right-hand-side of a type definition */ @@ -1579,17 +1609,17 @@ tyconDefnRhs: { let m = lhs parseState let ty, arity = $3 (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) + let valSpfn = SynValSig([], mkSynId m "Invoke", inferredTyparDecls, ty, arity, false, false, PreXmlDoc.Empty, None, None, m) + let invoke = SynMemberDefn.AbstractSlot(valSpfn, AbstractMemberFlags SynMemberKind.Member, m) if not (isNil augmentation) then raiseParseErrorAt m (FSComp.SR.parsAugmentationsIllegalOnDelegateType()) - SynTypeDefnRepr.ObjectModel (TyconDelegate (ty, arity), [invoke], m), []) } + SynTypeDefnRepr.ObjectModel (SynTypeDefnKind.Delegate (ty, arity), [invoke], m), []) } /* The right-hand-side of a object type definition */ tyconClassDefn: | classDefnBlockKindUnspecified { let needsCheck, decls, mopt = $1 - needsCheck, (TyconUnspecified, decls), mopt } + needsCheck, (SynTypeDefnKind.Unspecified, decls), mopt } | classOrInterfaceOrStruct classDefnBlock END { false, ($1, $2), Some (rhs2 parseState 1 3) } @@ -1691,8 +1721,9 @@ memberCore: let optReturnType = $3 let bindingBuilder, mBindLhs = $2 (fun vis memFlagsBuilder attrs rangeStart -> - let memberFlags = Some (memFlagsBuilder MemberKind.Member) - let binding = bindingBuilder (vis, $1, false, mBindLhs, NoDebugPointAtInvisibleBinding, optReturnType, $5, mRhs, [], attrs, memberFlags) + let memberFlags = Some (memFlagsBuilder SynMemberKind.Member) + let mWholeBindLhs = (mBindLhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) + let binding = bindingBuilder (vis, $1, false, mWholeBindLhs, DebugPointAtBinding.NoneAtInvisible, optReturnType, $5, mRhs, [], attrs, memberFlags) let memberRange = unionRanges rangeStart mRhs [ SynMemberDefn.Member (binding, memberRange) ]) } @@ -1718,16 +1749,16 @@ memberCore: let attrs = attrs @ optAttrs - let binding = bindingBuilder (visNoLongerUsed, optInline, isMutable, mBindLhs, NoDebugPointAtInvisibleBinding, optReturnType, expr, exprm, [], attrs, Some (memFlagsBuilder MemberKind.Member)) - let (Binding (vis, _, isInline, _, attrs, doc, valSynData, pv, _, _, mBindLhs, spBind)) = binding + let binding = bindingBuilder (visNoLongerUsed, optInline, isMutable, mBindLhs, DebugPointAtBinding.NoneAtInvisible, optReturnType, expr, exprm, [], attrs, Some (memFlagsBuilder SynMemberKind.Member)) + let (SynBinding (vis, _, isInline, _, attrs, doc, valSynData, pv, _, _, mBindLhs, spBind)) = binding let memberKind = let getset = let rec go p = match p with - | SynPat.LongIdent (LongIdentWithDots([id], _), _, _, _, _, _) -> id.idText - | SynPat.Named (_, nm, _, _, _) -> nm.idText - | SynPat.Typed (p, _, _) -> go p - | SynPat.Attrib (p, _, _) -> go p + | SynPat.LongIdent (LongIdentWithDots([id], _), _, _, _, _, _) -> id.idText + | SynPat.Named (nm, _, _, _) | SynPat.As (_, SynPat.Named (nm, _, _, _), _) -> nm.idText + | SynPat.Typed (p, _, _) -> go p + | SynPat.Attrib (p, _, _) -> go p | _ -> raiseParseErrorAt mBindLhs (FSComp.SR.parsInvalidDeclarationSyntax()) go pv if getset = "get" then @@ -1736,14 +1767,14 @@ memberCore: None else hasGet := true - Some MemberKind.PropertyGet + Some SynMemberKind.PropertyGet else if getset = "set" then if !hasSet then reportParseErrorAt mBindLhs (FSComp.SR.parsGetAndOrSetRequired()) None else hasSet := true - Some MemberKind.PropertySet + Some SynMemberKind.PropertySet else raiseParseErrorAt mBindLhs (FSComp.SR.parsGetAndOrSetRequired()) @@ -1762,20 +1793,21 @@ memberCore: let optReturnType = match (memberKind, optReturnType) with - | MemberKind.PropertySet, _ -> optReturnType + | SynMemberKind.PropertySet, _ -> optReturnType | _, None -> optPropertyType | _ -> optReturnType // REDO with the correct member kind - let binding = bindingBuilder(vis, isInline, isMutable, mBindLhs, NoDebugPointAtInvisibleBinding, optReturnType, expr, exprm, [], attrs, Some(memFlagsBuilder memberKind)) + let binding = bindingBuilder(vis, isInline, isMutable, mBindLhs, DebugPointAtBinding.NoneAtInvisible, optReturnType, expr, exprm, [], attrs, Some(memFlagsBuilder memberKind)) - let (Binding (vis, _, isInline, _, attrs, doc, valSynData, pv, rhsRetInfo, rhsExpr, mBindLhs, spBind)) = binding + let (SynBinding (vis, _, isInline, _, attrs, doc, valSynData, pv, rhsRetInfo, rhsExpr, mBindLhs, spBind)) = binding + let mWholeBindLhs = (mBindLhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) let (SynValData(_, valSynInfo, _)) = valSynData // Setters have all arguments tupled in their internal TAST form, though they don't appear to be // tupled from the syntax - let memFlags = memFlagsBuilder memberKind + let memFlags : SynMemberFlags = memFlagsBuilder memberKind let valSynInfo = let adjustValueArg valueArg = @@ -1784,39 +1816,39 @@ memberCore: | _ -> SynInfo.unnamedTopArg match memberKind, valSynInfo, memFlags.IsInstance with - | MemberKind.PropertyGet, SynValInfo ([], _ret), false - | MemberKind.PropertyGet, SynValInfo ([_], _ret), true -> - raiseParseErrorAt mBindLhs (FSComp.SR.parsGetterMustHaveAtLeastOneArgument()) + | SynMemberKind.PropertyGet, SynValInfo ([], _ret), false + | SynMemberKind.PropertyGet, SynValInfo ([_], _ret), true -> + raiseParseErrorAt mWholeBindLhs (FSComp.SR.parsGetterMustHaveAtLeastOneArgument()) - | MemberKind.PropertyGet, SynValInfo (thisArg :: indexOrUnitArgs :: rest, ret), true -> + | SynMemberKind.PropertyGet, SynValInfo (thisArg :: indexOrUnitArgs :: rest, ret), true -> if not rest.IsEmpty then - reportParseErrorAt mBindLhs (FSComp.SR.parsGetterAtMostOneArgument ()) + reportParseErrorAt mWholeBindLhs (FSComp.SR.parsGetterAtMostOneArgument ()) SynValInfo ([thisArg; indexOrUnitArgs], ret) - | MemberKind.PropertyGet, SynValInfo (indexOrUnitArgs :: rest, ret), false -> + | SynMemberKind.PropertyGet, SynValInfo (indexOrUnitArgs :: rest, ret), false -> if not rest.IsEmpty then - reportParseErrorAt mBindLhs (FSComp.SR.parsGetterAtMostOneArgument ()) + reportParseErrorAt mWholeBindLhs (FSComp.SR.parsGetterAtMostOneArgument ()) SynValInfo ([indexOrUnitArgs], ret) - | MemberKind.PropertySet, SynValInfo ([thisArg;valueArg], ret), true -> + | SynMemberKind.PropertySet, SynValInfo ([thisArg;valueArg], ret), true -> SynValInfo ([thisArg; adjustValueArg valueArg], ret) - | MemberKind.PropertySet, SynValInfo (thisArg :: indexArgs :: valueArg :: rest, ret), true -> + | SynMemberKind.PropertySet, SynValInfo (thisArg :: indexArgs :: valueArg :: rest, ret), true -> if not rest.IsEmpty then - reportParseErrorAt mBindLhs (FSComp.SR.parsSetterAtMostTwoArguments ()) + reportParseErrorAt mWholeBindLhs (FSComp.SR.parsSetterAtMostTwoArguments ()) SynValInfo ([thisArg; indexArgs @ adjustValueArg valueArg], ret) - | MemberKind.PropertySet, SynValInfo ([valueArg], ret), false -> + | SynMemberKind.PropertySet, SynValInfo ([valueArg], ret), false -> SynValInfo ([adjustValueArg valueArg], ret) - | MemberKind.PropertySet, SynValInfo (indexArgs :: valueArg :: rest, ret), _ -> + | SynMemberKind.PropertySet, SynValInfo (indexArgs :: valueArg :: rest, ret), _ -> if not rest.IsEmpty then - reportParseErrorAt mBindLhs (FSComp.SR.parsSetterAtMostTwoArguments ()) + reportParseErrorAt mWholeBindLhs (FSComp.SR.parsSetterAtMostTwoArguments ()) SynValInfo ([indexArgs @ adjustValueArg valueArg], ret) | _ -> // should be unreachable, cover just in case - raiseParseErrorAt mBindLhs (FSComp.SR.parsInvalidProperty ()) + raiseParseErrorAt mWholeBindLhs (FSComp.SR.parsInvalidProperty ()) let valSynData = SynValData(Some(memFlags), valSynInfo, None) @@ -1826,16 +1858,15 @@ memberCore: let bindingPatAdjusted, xmlDocAdjusted = - let bindingOuter = propertyNameBindingBuilder(vis, optInline, isMutable, mBindLhs, spBind, optReturnType, expr, exprm, [], attrs, Some(memFlagsBuilder MemberKind.Member)) + let bindingOuter = propertyNameBindingBuilder(vis, optInline, isMutable, mWholeBindLhs, spBind, optReturnType, expr, exprm, [], attrs, Some(memFlagsBuilder SynMemberKind.Member)) - let (Binding (_, _, _, _, _, doc2, _, bindingPatOuter, _, _, _, _)) = bindingOuter - + let (SynBinding (_, _, _, _, _, doc2, _, bindingPatOuter, _, _, _, _)) = bindingOuter let lidOuter, lidVisOuter = match bindingPatOuter with | SynPat.LongIdent (lid, None, None, SynArgPats.Pats [], lidVisOuter, m) -> lid, lidVisOuter - | SynPat.Named (_, id, _, visOuter, m) -> LongIdentWithDots([id], []), visOuter - | p -> raiseParseErrorAt mBindLhs (FSComp.SR.parsInvalidDeclarationSyntax()) + | SynPat.Named (id, _, visOuter, m) | SynPat.As(_, SynPat.Named (id, _, visOuter, m), _) -> LongIdentWithDots([id], []), visOuter + | p -> raiseParseErrorAt mWholeBindLhs (FSComp.SR.parsInvalidDeclarationSyntax()) // Merge the visibility from the outer point with the inner point, e.g. // member this.Size with get () = m_size @@ -1845,7 +1876,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(), mWholeBindLhs)) lidVisInner // Replace the "get" or the "set" with the right name @@ -1869,15 +1900,16 @@ memberCore: args // let idTool : Ident list = lidOuter |> List.map (fun (li:Ident) -> ident(li.idText, id.idRange)) |> List.rev |> List.take 1 SynPat.LongIdent (lidOuter, Some(id), tyargs, SynArgPats.Pats args, mergeLidVisOuter lidVisInner, m) - | SynPat.Named (_, nm, _, lidVisInner, m) -> SynPat.LongIdent (lidOuter, None, None, SynArgPats.Pats [], mergeLidVisOuter lidVisInner, m) + | SynPat.Named (nm, _, lidVisInner, m) + | SynPat.As (_, SynPat.Named (nm, _, lidVisInner, m), _) -> SynPat.LongIdent (lidOuter, None, None, SynArgPats.Pats [], mergeLidVisOuter lidVisInner, m) | SynPat.Typed (p, ty, m) -> SynPat.Typed(go p, ty, m) | SynPat.Attrib (p, attribs, m) -> SynPat.Attrib(go p, attribs, m) | SynPat.Wild(m) -> SynPat.Wild(m) - | _ -> raiseParseErrorAt mBindLhs (FSComp.SR.parsInvalidDeclarationSyntax()) + | _ -> raiseParseErrorAt mWholeBindLhs (FSComp.SR.parsInvalidDeclarationSyntax()) go pv, PreXmlDoc.Merge doc2 doc - let binding = Binding (vis, NormalBinding, isInline, isMutable, attrs, xmlDocAdjusted, valSynData, bindingPatAdjusted, rhsRetInfo, rhsExpr, mBindLhs, spBind) + let binding = SynBinding (vis, SynBindingKind.Normal, isInline, isMutable, attrs, xmlDocAdjusted, valSynData, bindingPatAdjusted, rhsRetInfo, rhsExpr, mWholeBindLhs, spBind) let memberRange = unionRanges rangeStart mWhole Some (SynMemberDefn.Member (binding, memberRange)))) } @@ -1919,14 +1951,14 @@ classDefnMember: { let ty, arity = $8 let isInline, doc, id, explicitValTyparDecls = $4, grabXmlDoc(parseState, 3), $5, $6 let getSetRangeOpt, getSet = $9 - let getSetAdjuster arity = match arity, getSet with SynValInfo([], _), MemberKind.Member -> MemberKind.PropertyGet | _ -> getSet + let getSetAdjuster arity = match arity, getSet with SynValInfo([], _), SynMemberKind.Member -> SynMemberKind.PropertyGet | _ -> getSet let wholeRange = let m = rhs parseState 1 match getSetRangeOpt with | None -> unionRanges m ty.Range | Some m2 -> unionRanges m m2 if Option.isSome $2 then errorR(Error(FSComp.SR.parsAccessibilityModsIllegalForAbstract(), wholeRange)) - let valSpfn = ValSpfn($1, id, explicitValTyparDecls, ty, arity, isInline, false, doc, None, None, wholeRange) + let valSpfn = SynValSig($1, id, explicitValTyparDecls, ty, arity, isInline, false, doc, None, None, wholeRange) [ SynMemberDefn.AbstractSlot(valSpfn, AbstractMemberFlags (getSetAdjuster arity), wholeRange) ] } | opt_attributes opt_declVisibility inheritsDefn @@ -1952,14 +1984,15 @@ classDefnMember: $4 $1 isStatic flags rangeStart } | opt_attributes opt_declVisibility NEW atomicPattern optAsSpec EQUALS typedSeqExprBlock opt_ODECLEND - { let m = unionRanges (rhs2 parseState 1 6) $7.Range + { let mWholeBindLhs = rhs2 parseState 1 (if Option.isSome $5 then 5 else 4) + let m = unionRanges mWholeBindLhs $7.Range let expr = $7 let valSynData = SynValData (Some CtorMemberFlags, SynValInfo([SynInfo.InferSynArgInfoFromPat $4], SynInfo.unnamedRetVal), $5) let vis = $2 let declPat = SynPat.LongIdent (LongIdentWithDots([mkSynId (rhs parseState 3) "new"], []), None, Some noInferredTypars, SynArgPats.Pats [$4], vis, rhs parseState 3) // Check that 'SynPatForConstructorDecl' matches this correctly assert (match declPat with SynPatForConstructorDecl _ -> true | _ -> false) - [ SynMemberDefn.Member(Binding (None, NormalBinding, false, false, $1, grabXmlDoc(parseState, 3), valSynData, declPat, None, expr, m, NoDebugPointAtInvisibleBinding), m) ] } + [ SynMemberDefn.Member(SynBinding (None, SynBindingKind.Normal, false, false, $1, grabXmlDoc(parseState, 3), valSynData, declPat, None, expr, mWholeBindLhs, DebugPointAtBinding.NoneAtInvisible), m) ] } | opt_attributes opt_declVisibility STATIC typeKeyword tyconDefn { if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(), rhs parseState 2)) @@ -1974,7 +2007,7 @@ valDefnDecl: let mValDecl = rhs2 parseState 1 6 (fun rangeStart attribs isStatic -> let mValDecl = unionRanges rangeStart mValDecl - let fld = Field(attribs, isStatic, Some $4, $6, $2, doc, $3, mRhs) + let fld = SynField(attribs, isStatic, Some $4, $6, $2, doc, $3, mRhs) [ SynMemberDefn.ValField(fld, mValDecl) ]) } @@ -2180,7 +2213,7 @@ tyconDefnOrSpfnSimpleRepr: SynTypeDefnSimpleRepr.Enum ($3 |> List.choose (function | Choice1Of2 data -> Some(data) - | Choice2Of2(UnionCase(_, _, _, _, _, m)) -> + | Choice2Of2(SynUnionCase(_, _, _, _, _, m)) -> errorR(Error(FSComp.SR.parsAllEnumFieldsRequireValues(), m)); None), mWhole) ) else @@ -2194,11 +2227,14 @@ tyconDefnOrSpfnSimpleRepr: SynTypeDefnSimpleRepr.Record ($2, $3, lhs parseState) } /* An inline-assembly type definition, for FSharp.Core library only */ - | opt_attributes opt_declVisibility LPAREN inlineAssemblyTyconRepr rparen + | opt_attributes opt_declVisibility LPAREN HASH string HASH rparen { if not (isNil $1) then errorR(Error(FSComp.SR.parsAttributesIllegalHere(), rhs parseState 1)) - libraryOnlyError (lhs parseState) + let lhsm = lhs parseState + if parseState.LexBuffer.ReportLibraryOnlyFeatures then libraryOnlyError lhsm if Option.isSome $2 then errorR(Error(FSComp.SR.parsInlineAssemblyCannotHaveVisibilityDeclarations(), rhs parseState 2)) - $4 } + let s, _ = $5 + let ilType = ParseAssemblyCodeType s parseState.LexBuffer.ReportLibraryOnlyFeatures parseState.LexBuffer.SupportsFeature (rhs parseState 5) + SynTypeDefnSimpleRepr.LibraryOnlyILAssembly (box ilType, lhsm) } /* The core of a record type definition */ @@ -2231,21 +2267,15 @@ braceBarFieldDeclListCore: | LBRACE_BAR error bar_rbrace { [] } -inlineAssemblyTyconRepr: - | HASH stringOrKeywordString HASH - { libraryOnlyError (lhs parseState) - let lhsm = lhs parseState - SynTypeDefnSimpleRepr.LibraryOnlyILAssembly (internalParseAssemblyCodeType $2 parseState.LexBuffer.SupportsFeature (rhs parseState 2), lhsm) } - classOrInterfaceOrStruct: | CLASS - { TyconClass } + { SynTypeDefnKind.Class } | INTERFACE - { TyconInterface } + { SynTypeDefnKind.Interface } | STRUCT - { TyconStruct } + { SynTypeDefnKind.Struct } interfaceMember: | INTERFACE { } @@ -2253,18 +2283,20 @@ interfaceMember: tyconNameAndTyparDecls: | opt_access path - { [], $2.Lid, false, [], $1, grabXmlDoc(parseState, 2) } + { None, $2.Lid, false, $1, grabXmlDoc(parseState, 2) } | opt_access prefixTyparDecls path - { $2, $3.Lid, false, [], $1, grabXmlDoc(parseState, 2) } + { Some $2, $3.Lid, false, $1, grabXmlDoc(parseState, 2) } | opt_access path postfixTyparDecls - { let tps, tpcs = $3 - tps, $2.Lid, true, tpcs, $1, grabXmlDoc(parseState, 2) } + { Some $3, $2.Lid, true, $1, grabXmlDoc(parseState, 2) } prefixTyparDecls: - | typar { [ TyparDecl([], $1) ] } - | LPAREN typarDeclList rparen { List.rev $2 } + | typar + { SynTyparDecls.SinglePrefix (SynTyparDecl([], $1), rhs parseState 1) } + + | LPAREN typarDeclList rparen + { SynTyparDecls.PrefixList (List.rev $2, rhs2 parseState 1 3) } typarDeclList: | typarDeclList COMMA typarDecl { $3 :: $1 } @@ -2272,14 +2304,15 @@ typarDeclList: typarDecl : | opt_attributes typar - { TyparDecl($1, $2) } + { SynTyparDecl($1, $2) } /* Any tokens in this grammar must be added to the lex filter rule 'peekAdjacentTypars' */ /* 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)) - List.rev $3, $4 } + { let m = rhs2 parseState 2 5 + if not $2 then warning(Error(FSComp.SR.parsNonAdjacentTypars(), m)) + SynTyparDecls.PostfixList (List.rev $3, $4, m) } /* Any tokens in this grammar must be added to the lex filter rule 'peekAdjacentTypars' */ /* See the F# specification "Lexical analysis of type applications and type parameter definitions" */ @@ -2295,15 +2328,17 @@ explicitValTyparDeclsCore: explicitValTyparDecls: | opt_HIGH_PRECEDENCE_TYAPP LESS explicitValTyparDeclsCore opt_typeConstraints GREATER - { if not $2 then warning(Error(FSComp.SR.parsNonAdjacentTypars(), rhs2 parseState 2 5)) + { let m = rhs2 parseState 2 5 + if not $2 then warning(Error(FSComp.SR.parsNonAdjacentTypars(), m)) let tps, flex = $3 - SynValTyparDecls(tps, flex, $4) } + let tps = SynTyparDecls.PostfixList (tps, $4, m) + SynValTyparDecls(Some tps, flex) } opt_explicitValTyparDecls: | explicitValTyparDecls { $1 } | - { SynValTyparDecls([], true, []) } + { SynValTyparDecls(None, true) } opt_explicitValTyparDecls2: | explicitValTyparDecls @@ -2334,41 +2369,45 @@ typeConstraints: /* See the F# specification "Lexical analysis of type applications and type parameter definitions" */ typeConstraint: | DEFAULT typar COLON typ - { libraryOnlyError (lhs parseState); WhereTyparDefaultsToType($2, $4, lhs parseState) } + { if parseState.LexBuffer.ReportLibraryOnlyFeatures then libraryOnlyError (lhs parseState) + SynTypeConstraint.WhereTyparDefaultsToType($2, $4, lhs parseState) } | typar COLON_GREATER typ - { WhereTyparSubtypeOfType($1, $3, lhs parseState) } + { SynTypeConstraint.WhereTyparSubtypeOfType($1, $3, lhs parseState) } | typar COLON STRUCT - { WhereTyparIsValueType($1, lhs parseState) } + { SynTypeConstraint.WhereTyparIsValueType($1, lhs parseState) } | typar COLON IDENT STRUCT { if $3 <> "not" then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedIdentifier($3)) - WhereTyparIsReferenceType($1, lhs parseState) } + SynTypeConstraint.WhereTyparIsReferenceType($1, lhs parseState) } | typar COLON NULL - { WhereTyparSupportsNull($1, lhs parseState) } + { SynTypeConstraint.WhereTyparSupportsNull($1, lhs parseState) } | typar COLON LPAREN classMemberSpfn rparen { let tp = $1 - WhereTyparSupportsMember([ SynType.Var(tp, tp.Range) ], $4, lhs parseState) } + SynTypeConstraint.WhereTyparSupportsMember([ SynType.Var(tp, tp.Range) ], $4, lhs parseState) } | LPAREN typarAlts rparen COLON LPAREN classMemberSpfn rparen - { WhereTyparSupportsMember(List.rev($2), $6, lhs parseState) } + { SynTypeConstraint.WhereTyparSupportsMember(List.rev($2), $6, lhs parseState) } | typar COLON DELEGATE typeArgsNoHpaDeprecated - { let _ltm, _gtm, args, _commas, mWhole = $4 in WhereTyparIsDelegate($1, args, unionRanges $1.Range mWhole) } + { let _ltm, _gtm, args, _commas, mWhole = $4 + SynTypeConstraint.WhereTyparIsDelegate($1, args, unionRanges $1.Range mWhole) } | typar COLON IDENT typeArgsNoHpaDeprecated { match $3 with - | "enum" -> let _ltm, _gtm, args, _commas, mWhole = $4 in WhereTyparIsEnum($1, args, unionRanges $1.Range mWhole) + | "enum" -> + let _ltm, _gtm, args, _commas, mWhole = $4 + SynTypeConstraint.WhereTyparIsEnum($1, args, unionRanges $1.Range mWhole) | nm -> raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedIdentifier(nm)) } | typar COLON IDENT { match $3 with - | "comparison" -> WhereTyparIsComparable($1, lhs parseState) - | "equality" -> WhereTyparIsEquatable($1, lhs parseState) - | "unmanaged" -> WhereTyparIsUnmanaged($1, lhs parseState) + | "comparison" -> SynTypeConstraint.WhereTyparIsComparable($1, lhs parseState) + | "equality" -> SynTypeConstraint.WhereTyparIsEquatable($1, lhs parseState) + | "unmanaged" -> SynTypeConstraint.WhereTyparIsUnmanaged($1, lhs parseState) | nm -> raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedIdentifier(nm)) } typarAlts: @@ -2403,27 +2442,32 @@ attrUnionCaseDecls: { (fun xmlDoc -> [ $1 xmlDoc ]) } /* The core of a union case definition */ -attrUnionCaseDecl: - | opt_attributes opt_access unionCaseName opt_OBLOCKSEP +attrUnionCaseDecl: + | opt_attributes opt_access unionCaseName { if Option.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))) } + (fun xmlDoc -> Choice2Of2 (SynUnionCase ( $1, $3, SynUnionCaseKind.Fields [], xmlDoc, None, mDecl))) } - | opt_attributes opt_access unionCaseName OF unionCaseRepr opt_OBLOCKSEP + | opt_attributes opt_access unionCaseName OF unionCaseRepr { if Option.isSome $2 then errorR(Error(FSComp.SR.parsUnionCasesCannotHaveVisibilityDeclarations(), rhs parseState 2)) let mDecl = rhs2 parseState 1 5 - (fun xmlDoc -> Choice2Of2 (UnionCase ( $1, $3, UnionCaseFields $5, xmlDoc, None, mDecl))) } + (fun xmlDoc -> Choice2Of2 (SynUnionCase ( $1, $3, SynUnionCaseKind.Fields $5, xmlDoc, None, mDecl))) } - | opt_attributes opt_access unionCaseName COLON topType opt_OBLOCKSEP + | opt_attributes opt_access unionCaseName OF recover { if Option.isSome $2 then errorR(Error(FSComp.SR.parsUnionCasesCannotHaveVisibilityDeclarations(), rhs parseState 2)) - libraryOnlyWarning(lhs parseState) + let mDecl = rhs2 parseState 1 4 + (fun xmlDoc -> Choice2Of2 (SynUnionCase ( $1, $3, SynUnionCaseKind.Fields [], xmlDoc, None, mDecl))) } + + | opt_attributes opt_access unionCaseName COLON topType + { if Option.isSome $2 then errorR(Error(FSComp.SR.parsUnionCasesCannotHaveVisibilityDeclarations(), rhs parseState 2)) + if parseState.LexBuffer.ReportLibraryOnlyFeatures then libraryOnlyWarning(lhs parseState) let mDecl = rhs2 parseState 1 5 - (fun xmlDoc -> Choice2Of2 (UnionCase ( $1, $3, UnionCaseFullType $5, xmlDoc, None, mDecl))) } + (fun xmlDoc -> Choice2Of2 (SynUnionCase ( $1, $3, SynUnionCaseKind.FullType $5, xmlDoc, None, mDecl))) } - | opt_attributes opt_access unionCaseName EQUALS constant opt_OBLOCKSEP + | opt_attributes opt_access unionCaseName EQUALS constant { if Option.isSome $2 then errorR(Error(FSComp.SR.parsEnumFieldsCannotHaveVisibilityDeclarations(), rhs parseState 2)) let mDecl = rhs2 parseState 1 5 - (fun xmlDoc -> Choice1Of2 (EnumCase ( $1, $3, $5, xmlDoc, mDecl))) } + (fun xmlDoc -> Choice1Of2 (SynEnumCase ( $1, $3, fst $5, snd $5, xmlDoc, mDecl))) } /* The name of a union case */ unionCaseName: @@ -2438,20 +2482,20 @@ unionCaseName: firstUnionCaseDeclOfMany: | ident opt_OBLOCKSEP - { Choice2Of2 (UnionCase ( [], $1, UnionCaseFields [], PreXmlDoc.Empty, None, rhs parseState 1)) } + { Choice2Of2 (SynUnionCase ( [], $1, SynUnionCaseKind.Fields [], PreXmlDoc.Empty, None, rhs parseState 1)) } | ident EQUALS constant opt_OBLOCKSEP - { Choice1Of2 (EnumCase ([], $1, $3, PreXmlDoc.Empty, rhs2 parseState 1 3)) } + { Choice1Of2 (SynEnumCase ([], $1, fst $3, snd $3, PreXmlDoc.Empty, rhs2 parseState 1 3)) } | firstUnionCaseDecl opt_OBLOCKSEP { $1 } firstUnionCaseDecl: | ident OF unionCaseRepr - { Choice2Of2 (UnionCase ( [], $1, UnionCaseFields $3, PreXmlDoc.Empty, None, rhs2 parseState 1 3)) } + { Choice2Of2 (SynUnionCase ( [], $1, SynUnionCaseKind.Fields $3, PreXmlDoc.Empty, None, rhs2 parseState 1 3)) } | ident EQUALS constant opt_OBLOCKSEP - { Choice1Of2 (EnumCase ([], $1, $3, PreXmlDoc.Empty, rhs2 parseState 1 3)) } + { Choice1Of2 (SynEnumCase ([], $1, fst $3, snd $3, PreXmlDoc.Empty, rhs2 parseState 1 3)) } unionCaseReprElements: | unionCaseReprElement STAR unionCaseReprElements @@ -2463,10 +2507,10 @@ unionCaseReprElements: unionCaseReprElement: | ident COLON appType { let wholeRange = rhs2 parseState 1 3 - mkNamedField($1, $3, wholeRange) } + mkSynNamedField($1, $3, wholeRange) } | appType - { mkAnonField $1 } + { mkSynAnonField $1 } unionCaseRepr: | braceFieldDeclList @@ -2489,15 +2533,15 @@ recdFieldDecl: | opt_attributes fieldDecl { let wholeRange = rhs2 parseState 1 2 let fld = $2 $1 false wholeRange - let (Field (a, b, c, d, e, f, vis, wholeRange)) = fld + let (SynField (a, b, c, d, e, f, vis, wholeRange)) = fld if Option.isSome vis then errorR (Error (FSComp.SR.parsRecordFieldsCannotHaveVisibilityDeclarations (), rhs parseState 2)) - Field (a, b, c, d, e, f, None, wholeRange) } + SynField (a, b, c, d, e, f, None, wholeRange) } /* Part of a field or val declaration in a record type or object type */ fieldDecl: | opt_mutable opt_access ident COLON typ { let xmlDoc = grabXmlDoc (parseState, 3) - fun attrs stat wholeRange -> Field(attrs, stat, Some $3, $5, $1, xmlDoc, $2, wholeRange) } + fun attrs stat wholeRange -> SynField(attrs, stat, Some $3, $5, $1, xmlDoc, $2, wholeRange) } /* An exception definition */ exconDefn: @@ -2515,12 +2559,15 @@ exconCore: { SynExceptionDefnRepr($2, $4, $5, $1, $3, (match $5 with None -> rhs2 parseState 1 4 | Some p -> unionRanges (rangeOfLongIdent p) (rhs2 parseState 1 4))) } /* Part of an exception definition */ -exconIntro: - | ident - { UnionCase([], $1, UnionCaseFields [], PreXmlDoc.Empty, None, lhs parseState) } +exconIntro: + | ident + { SynUnionCase([], $1, SynUnionCaseKind.Fields [], PreXmlDoc.Empty, None, lhs parseState) } - | ident OF unionCaseRepr - { UnionCase([], $1, UnionCaseFields $3, PreXmlDoc.Empty, None, lhs parseState) } + | ident OF unionCaseRepr + { SynUnionCase([], $1, SynUnionCaseKind.Fields $3, PreXmlDoc.Empty, None, lhs parseState) } + + | ident OF recover + { SynUnionCase([], $1, SynUnionCaseKind.Fields [], PreXmlDoc.Empty, None, lhs parseState) } exconRepr: | /* EMPTY */ @@ -2602,7 +2649,7 @@ hardwhiteDoBinding: | ODO typedSeqExprBlock hardwhiteDefnBindingsTerminator { let mLetKwd = rhs parseState 1 let bindingSetRange = unionRanges mLetKwd $2.Range - let seqPt = NoDebugPointAtDoBinding + let seqPt = DebugPointAtBinding.NoneAtDo // any attributes prior to the 'let' are left free, e.g. become top-level attributes // associated with the module, 'main' function or assembly depending on their target BindingSetPreAttrs(mLetKwd, false, false, (fun attrs vis -> attrs, [mkSynDoBinding (vis, true, $2, bindingSetRange)]), bindingSetRange), $2 } @@ -2651,13 +2698,14 @@ cPrototype: let rhsExpr = SynExpr.App (ExprAtomicFlag.NonAtomic, false, SynExpr.Ident (ident("failwith", rhs parseState 6)), - SynExpr.Const (SynConst.String("extern was not given a DllImport attribute", rhs parseState 8), rhs parseState 8), + SynExpr.Const (SynConst.String("extern was not given a DllImport attribute", SynStringKind.Regular, rhs parseState 8), rhs parseState 8), mRhs) (fun attrs _ -> let bindingId = SynPat.LongIdent (LongIdentWithDots([nm], []), None, Some noInferredTypars, SynArgPats.Pats [SynPat.Tuple(false, args, argsm)], vis, nmm) + let mWholeBindLhs = (mBindLhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) let binding = mkSynBinding (xmlDoc, bindingId) - (vis, false, false, mBindLhs, NoDebugPointAtInvisibleBinding, Some rty, rhsExpr, mRhs, [], attrs, None) + (vis, false, false, mWholeBindLhs, DebugPointAtBinding.NoneAtInvisible, Some rty, rhsExpr, mRhs, [], attrs, None) [], [binding]) } /* A list of arguments in an 'extern' DllImport function definition */ @@ -2686,7 +2734,7 @@ cArg: { let m = lhs parseState in SynPat.Typed(SynPat.Wild m, $2, m) |> addAttribs $1 } | opt_attributes cType ident - { let m = lhs parseState in SynPat.Typed(SynPat.Named (SynPat.Wild m, $3, false, None, m), $2, m) |> addAttribs $1 } + { let m = lhs parseState in SynPat.Typed(SynPat.Named ($3, false, None, m), $2, m) |> addAttribs $1 } /* An type in an 'extern' DllImport function definition */ cType: @@ -2770,9 +2818,10 @@ localBinding: let localBindingRange = unionRanges (rhs2 parseState 1 5) mRhs let localBindingBuilder = (fun attrs vis mLetKwd -> - let mWhole = unionRanges mLetKwd mRhs - let spBind = if IsControlFlowExpression expr then NoDebugPointAtLetBinding else DebugPointAtBinding mWhole - bindingBuilder (vis, $1, $2, mBindLhs, spBind, optReturnType, expr, mRhs, opts, attrs, None)) + let mWhole = (unionRanges mLetKwd mRhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) + let spBind = if IsControlFlowExpression expr then DebugPointAtBinding.NoneAtLet else DebugPointAtBinding.Yes mWhole + let mWholeBindLhs = (mBindLhs, attrs) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range) + bindingBuilder (vis, $1, $2, mWholeBindLhs, spBind, optReturnType, expr, mRhs, opts, attrs, None)) localBindingRange, localBindingBuilder } | opt_inline opt_mutable bindingPattern opt_topReturnTypeWithTypeConstraints EQUALS error @@ -2782,7 +2831,7 @@ localBinding: let bindingBuilder, mBindLhs = $3 let localBindingBuilder = (fun attrs vis mLetKwd -> - let spBind = DebugPointAtBinding (unionRanges mLetKwd mRhs) + let spBind = DebugPointAtBinding.Yes (unionRanges mLetKwd mRhs) let eqm = rhs parseState 5 let zeroWidthAtEnd = eqm.EndRange bindingBuilder (vis, $1, $2, mBindLhs, spBind, optReturnType, arbExpr("localBinding1", zeroWidthAtEnd), mRhs, [], attrs, None)) @@ -2796,7 +2845,7 @@ localBinding: let bindingBuilder, mBindLhs = $3 let localBindingBuilder = (fun attrs vis mLetKwd -> - let spBind = DebugPointAtBinding (unionRanges mLetKwd mRhs) + let spBind = DebugPointAtBinding.Yes (unionRanges mLetKwd mRhs) bindingBuilder (vis, $1, $2, mBindLhs, spBind, optReturnType, arbExpr("localBinding2", mRhs), mRhs, [], attrs, None)) mWhole, localBindingBuilder } @@ -2838,10 +2887,10 @@ staticOptimizationConditions: staticOptimizationCondition: | typar COLON typ - { WhenTyparTyconEqualsTycon($1, $3, lhs parseState) } + { SynStaticOptimizationConstraint.WhenTyparTyconEqualsTycon($1, $3, lhs parseState) } | typar STRUCT - { WhenTyparIsStruct($1, lhs parseState) } + { SynStaticOptimizationConstraint.WhenTyparIsStruct($1, lhs parseState) } rawConstant: | INT8 @@ -2894,11 +2943,17 @@ rawConstant: | BIGNUM { SynConst.UserNum $1 } - | stringOrKeywordString - { SynConst.String ($1, lhs parseState) } + | string + { let s, synStringKind = $1 + SynConst.String (s, synStringKind, lhs parseState) } + + | sourceIdentifier + { let c,v = $1 + SynConst.SourceIdentifier (c, v, lhs parseState) } | BYTEARRAY - { SynConst.Bytes (fst $1, lhs parseState) } + { let (v, synByteStringKind, _) = $1 + SynConst.Bytes (v, synByteStringKind, lhs parseState) } rationalConstant: | INT32 INFIX_STAR_DIV_MOD_OP INT32 @@ -2936,10 +2991,10 @@ atomicRationalConstant: constant: | rawConstant - { $1 } + { $1, rhs parseState 1 } | rawConstant HIGH_PRECEDENCE_TYAPP measureTypeArg - { SynConst.Measure($1, $3) } + { SynConst.Measure($1, rhs parseState 1, $3), lhs parseState } bindingPattern: | headBindingPattern @@ -2957,7 +3012,7 @@ bindingPattern: simplePattern: | ident { let m = rhs parseState 1 - SynPat.Named(SynPat.Wild m, $1, false, None, m) } + SynPat.Named($1, false, None, m) } | QMARK ident { SynPat.OptionalVal($2, rhs parseState 2) } @@ -3007,8 +3062,8 @@ simplePatterns: headBindingPattern: - | headBindingPattern AS ident - { SynPat.Named ($1, $3, false, None, rhs2 parseState 1 3) } + | headBindingPattern AS constrPattern + { SynPat.As($1, $3, rhs2 parseState 1 3) } | headBindingPattern BAR headBindingPattern { SynPat.Or($1, $3, rhs2 parseState 1 3) } @@ -3121,7 +3176,7 @@ atomicPattern: else mkSynPatVar vis (List.head lidwd.Lid) } | constant - { SynPat.Const ($1, $1.Range (lhs parseState)) } + { SynPat.Const (fst $1, snd $1) } | FALSE { SynPat.Const(SynConst.Bool false, lhs parseState) } @@ -3189,13 +3244,13 @@ parenPatternBody: /* whole pattern to the left, whereas ': t' binds only the pattern */ /* immediately preceding in the tuple. */ /* */ -/* Also, it is unexpected that '(a, b : t)' in a pattern binds differently to */ -/* '(a, b : t)' in an expression. It's not that easy to solve that without */ +/* Also, it is unexpected that '(a, b : t)' in a pattern (a, (b : 't)) binds differently to */ +/* '(a, b : t)' in an expression ((a, b) : 't). It's not that easy to solve that without */ /* duplicating the entire expression grammar, or making a fairly severe breaking change */ /* to the language. */ parenPattern: - | parenPattern AS ident - { SynPat.Named ($1, $3, false, None, rhs2 parseState 1 3) } + | parenPattern AS constrPattern + { SynPat.As($1, $3, rhs2 parseState 1 3) } | parenPattern BAR parenPattern { SynPat.Or($1, $3, rhs2 parseState 1 3) } @@ -3330,13 +3385,13 @@ recover: moreBinders: | AND_BANG headBindingPattern EQUALS typedSeqExprBlock IN moreBinders %prec expr_let - { let spBind = DebugPointAtBinding(rhs2 parseState 1 5) (* TODO Pretty sure this is wrong *) + { let spBind = DebugPointAtBinding.Yes(rhs2 parseState 1 5) (* TODO Pretty sure this is wrong *) let m = rhs parseState 1 (* TODO Pretty sure this is wrong *) (spBind, $1, true, $2, $4, m) :: $6 } | OAND_BANG headBindingPattern EQUALS typedSeqExprBlock hardwhiteDefnBindingsTerminator opt_OBLOCKSEP moreBinders %prec expr_let { $5 "and!" (rhs parseState 1) // report unterminated error - let spBind = DebugPointAtBinding(rhs2 parseState 1 5) (* TODO Pretty sure this is wrong *) + let spBind = DebugPointAtBinding.Yes(rhs2 parseState 1 5) (* TODO Pretty sure this is wrong *) let m = rhs parseState 1 (* TODO Pretty sure this is wrong *) (spBind, $1, true, $2, $4, m) :: $7 } @@ -3384,7 +3439,7 @@ declExpr: | MATCH typedSeqExpr withClauses %prec expr_match { let mMatch = (rhs parseState 1) let mWith, (clauses, mLast) = $3 - let spBind = DebugPointAtBinding(unionRanges mMatch mWith) + let spBind = DebugPointAtBinding.Yes(unionRanges mMatch mWith) SynExpr.Match (spBind, $2, clauses, unionRanges mMatch mLast) } | MATCH typedSeqExpr recover %prec expr_match @@ -3395,7 +3450,7 @@ declExpr: | MATCH_BANG typedSeqExpr withClauses %prec expr_match { let mMatch = (rhs parseState 1) let mWith, (clauses, mLast) = $3 - let spBind = DebugPointAtBinding(unionRanges mMatch mWith) + let spBind = DebugPointAtBinding.Yes(unionRanges mMatch mWith) SynExpr.MatchBang (spBind, $2, clauses, unionRanges mMatch mLast) } | MATCH_BANG typedSeqExpr recover %prec expr_match @@ -3444,7 +3499,7 @@ declExpr: // for this pathological case. let m = rhs parseState 1 let mEnd = m.EndRange - let spIfToThen = DebugPointAtBinding mEnd + let spIfToThen = DebugPointAtBinding.Yes mEnd exprFromParseError (SynExpr.IfThenElse (arbExpr("ifGuard1", mEnd), arbExpr("thenBody1", mEnd), None, spIfToThen, true, m, m)) } | LAZY declExpr %prec expr_lazy @@ -3633,25 +3688,25 @@ declExpr: SynExpr.YieldOrReturnFrom (($1, not $1), arbExpr("yield!", mYieldAll), mYieldAll) } | BINDER headBindingPattern EQUALS typedSeqExprBlock IN opt_OBLOCKSEP moreBinders typedSeqExprBlock %prec expr_let - { let spBind = DebugPointAtBinding(rhs2 parseState 1 5) + { let spBind = DebugPointAtBinding.Yes(rhs2 parseState 1 5) let m = unionRanges (rhs parseState 1) $8.Range SynExpr.LetOrUseBang(spBind, ($1 = "use"), true, $2, $4, $7, $8, m) } | OBINDER headBindingPattern EQUALS typedSeqExprBlock hardwhiteDefnBindingsTerminator opt_OBLOCKSEP moreBinders typedSeqExprBlock %prec expr_let { $5 (if $1 = "use" then "use!" else "let!") (rhs parseState 1) // report unterminated error - let spBind = DebugPointAtBinding(unionRanges (rhs parseState 1) $4.Range) + let spBind = DebugPointAtBinding.Yes(unionRanges (rhs parseState 1) $4.Range) let m = unionRanges (rhs parseState 1) $8.Range SynExpr.LetOrUseBang(spBind, ($1 = "use"), true, $2, $4, $7, $8, m) } | OBINDER headBindingPattern EQUALS typedSeqExprBlock hardwhiteDefnBindingsTerminator opt_OBLOCKSEP error %prec expr_let { // error recovery that allows intellisense when writing incomplete computation expressions - let spBind = DebugPointAtBinding(unionRanges (rhs parseState 1) $4.Range) + let spBind = DebugPointAtBinding.Yes(unionRanges (rhs parseState 1) $4.Range) let mAll = unionRanges (rhs parseState 1) (rhs parseState 7) let m = $4.Range.EndRange // zero-width range SynExpr.LetOrUseBang(spBind, ($1 = "use"), true, $2, $4, [], SynExpr.ImplicitZero m, mAll) } | DO_BANG typedSeqExpr IN opt_OBLOCKSEP typedSeqExprBlock %prec expr_let - { let spBind = NoDebugPointAtDoBinding + { let spBind = DebugPointAtBinding.NoneAtDo SynExpr.LetOrUseBang(spBind, false, true, SynPat.Const(SynConst.Unit, $2.Range), $2, [], $5, unionRanges (rhs parseState 1) $5.Range) } | ODO_BANG typedSeqExprBlock hardwhiteDefnBindingsTerminator %prec expr_let @@ -3837,7 +3892,7 @@ declExpr: dynamicArg: | IDENT - { let con = SynConst.String ($1, rhs parseState 1) + { let con = SynConst.String ($1, SynStringKind.Regular, rhs parseState 1) let arg2 = SynExpr.Const (con, con.Range (rhs parseState 1)) arg2 } @@ -3881,30 +3936,38 @@ patternClauses: | patternAndGuard patternResult %prec prec_pat_pat_action { let pat, guard, patm = $1 let mLast = $2.Range - [Clause(pat, guard, $2, patm, DebugPointForTarget.Yes)], mLast } + let m = unionRanges $2.Range patm + [SynMatchClause(pat, guard, $2, m, DebugPointForTarget.Yes)], mLast } | patternAndGuard patternResult BAR patternClauses { let pat, guard, patm = $1 - let clauses, mLast = $4 - (Clause(pat, guard, $2, patm, DebugPointForTarget.Yes) :: clauses), mLast } + let clauses, mLast = $4 + let m = unionRanges $2.Range patm + (SynMatchClause(pat, guard, $2, m, DebugPointForTarget.Yes) :: clauses), mLast } | patternAndGuard patternResult BAR error { let pat, guard, patm = $1 let mLast = rhs parseState 3 - // silent recovery - [Clause(pat, guard, $2, patm, DebugPointForTarget.Yes)], mLast } + let m = unionRanges $2.Range patm + // silent recovery + [SynMatchClause(pat, guard, $2, m, DebugPointForTarget.Yes)], mLast } | patternAndGuard patternResult error { let pat, guard, patm = $1 - let mLast = $2.Range + let mLast = $2.Range + let m = unionRanges $2.Range patm // silent recovery - [Clause(pat, guard, $2, patm, DebugPointForTarget.Yes)], mLast } + [SynMatchClause(pat, guard, $2, m, DebugPointForTarget.Yes)], mLast } | patternAndGuard error { let pat, guard, patm = $1 let mLast = rhs parseState 2 + let m = + match guard with + | Some e -> unionRanges patm e.Range + | _ -> patm // silent recovery - [Clause(pat, guard, SynExpr.Const (SynConst.Unit, mLast.EndRange), patm, DebugPointForTarget.Yes)], mLast } + [SynMatchClause(pat, guard, SynExpr.Const (SynConst.Unit, mLast.EndRange), m, DebugPointForTarget.Yes)], mLast } patternGuard: | WHEN declExpr @@ -3924,7 +3987,7 @@ ifExprCases: let mIfToThen = unionRanges mIf mThen let lastBranch : SynExpr = match $2 with None -> exprThen | Some e -> e let mIfToEndOfLastBranch = unionRanges mIf lastBranch.Range - let spIfToThen = DebugPointAtBinding(mIfToThen) + let spIfToThen = DebugPointAtBinding.Yes(mIfToThen) SynExpr.IfThenElse (exprGuard, exprThen, $2, spIfToThen, false, mIfToThen, mIfToEndOfLastBranch)) } ifExprThen: @@ -4096,12 +4159,16 @@ atomicExpr: // silent recovery exprFromParseError (SynExpr.ArrayOrList (false, [ ], rhs parseState 1)), false } - | STRUCT LPAREN tupleExpr rparen - { let exprs, commas = $3 in SynExpr.Tuple (true, List.rev exprs, List.rev commas, (commas.Head, exprs) ||> unionRangeWithListBy (fun e -> e.Range) ), false } + | STRUCT LPAREN tupleExpr rparen + { let exprs, commas = $3 + let m = rhs2 parseState 1 4 + SynExpr.Tuple (true, List.rev exprs, List.rev commas, m), false } - | STRUCT LPAREN tupleExpr recover - { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnmatchedBracket()); - let exprs, commas = $3 in SynExpr.Tuple (true, 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 + let m = (rhs parseState 1, exprs) ||> unionRangeWithListBy (fun e -> e.Range) + SynExpr.Tuple (true, List.rev exprs, List.rev commas, m), false } | atomicExprAfterType { $1, false } @@ -4130,7 +4197,7 @@ atomicExprQualification: SynExpr.DiscardAfterMissingQualificationAfterDot (e, fixedLhsm)) } | LPAREN COLON_COLON rparen DOT INT32 { (fun e lhsm dotm -> - libraryOnlyError(lhs parseState) + if parseState.LexBuffer.ReportLibraryOnlyFeatures then libraryOnlyError(lhs parseState) SynExpr.LibraryOnlyUnionCaseFieldGet (e, mkSynCaseName lhsm opNameCons, (fst $5), lhsm)) } | LPAREN typedSeqExpr rparen @@ -4220,7 +4287,7 @@ rangeDeclExpr: /* the start of atomicExprAfterType must not overlap with the valid postfix tokens of the type syntax, e.g. new List(...) */ atomicExprAfterType: | constant - { SynExpr.Const ($1, $1.Range (lhs parseState)) } + { SynExpr.Const (fst $1, snd $1) } | parenExpr { $1 } @@ -4232,7 +4299,8 @@ atomicExprAfterType: { $1 } | interpolatedString - { SynExpr.InterpolatedString($1, rhs parseState 1) } + { let parts, synStringKind = $1 + SynExpr.InterpolatedString(parts, synStringKind, rhs parseState 1) } | NULL { SynExpr.Null (lhs parseState) } @@ -4475,10 +4543,12 @@ forLoopDirection: | DOWNTO { false } inlineAssemblyExpr: - | HASH stringOrKeywordString opt_inlineAssemblyTypeArg optCurriedArgExprs optInlineAssemblyReturnTypes HASH - { libraryOnlyWarning (lhs parseState) - let s, sm = $2, rhs parseState 2 - (fun m -> SynExpr.LibraryOnlyILAssembly (internalParseAssemblyCodeInstructions s parseState.LexBuffer.SupportsFeature sm, $3, List.rev $4, $5, m)) } + | HASH string opt_inlineAssemblyTypeArg optCurriedArgExprs optInlineAssemblyReturnTypes HASH + { if parseState.LexBuffer.ReportLibraryOnlyFeatures then libraryOnlyWarning (lhs parseState) + let (s, _), sm = $2, rhs parseState 2 + (fun m -> + let ilInstrs = ParseAssemblyCodeInstructions s parseState.LexBuffer.ReportLibraryOnlyFeatures parseState.LexBuffer.SupportsFeature sm + SynExpr.LibraryOnlyILAssembly (box ilInstrs, $3, List.rev $4, $5, m)) } optCurriedArgExprs: | optCurriedArgExprs argExpr %prec expr_args @@ -4706,7 +4776,7 @@ opt_objExprInterfaces: objExprInterface: | interfaceMember appType opt_objExprBindings opt_declEnd opt_OBLOCKSEP - { InterfaceImpl($2, $3, lhs parseState) } + { SynInterfaceImpl($2, $3, lhs parseState) } braceBarExpr: | STRUCT braceBarExprCore @@ -4787,12 +4857,12 @@ anonMatchingExpr: | FUNCTION withPatternClauses %prec expr_function { let clauses, mLast = $2 let mAll = unionRanges (rhs parseState 1) mLast - SynExpr.MatchLambda (false, (rhs parseState 1), clauses, NoDebugPointAtInvisibleBinding, mAll) } + SynExpr.MatchLambda (false, (rhs parseState 1), clauses, DebugPointAtBinding.NoneAtInvisible, mAll) } | OFUNCTION withPatternClauses OEND %prec expr_function { let clauses, mLast = $2 let mAll = unionRanges (rhs parseState 1) mLast - SynExpr.MatchLambda (false, (rhs parseState 1), clauses, NoDebugPointAtInvisibleBinding, mAll) } + SynExpr.MatchLambda (false, (rhs parseState 1), clauses, DebugPointAtBinding.NoneAtInvisible, mAll) } /*--------------------------------------------------------------------------*/ /* TYPE ALGEBRA */ @@ -4945,7 +5015,7 @@ appType: | typar COLON_GREATER typ { let tp, typ = $1, $3 let m = lhs parseState - SynType.WithGlobalConstraints(SynType.Var (tp, rhs parseState 1), [WhereTyparSubtypeOfType(tp, typ, m)], m) } + SynType.WithGlobalConstraints(SynType.Var (tp, rhs parseState 1), [SynTypeConstraint.WhereTyparSubtypeOfType(tp, typ, m)], m) } | UNDERSCORE COLON_GREATER typ %prec COLON_GREATER { SynType.HashConstraint($3, lhs parseState) } @@ -5009,7 +5079,7 @@ atomTypeOrAnonRecdType: { let flds, isStruct = $1 let flds2 = flds |> List.choose (function - | (Field([], false, Some id, ty, false, _xmldoc, None, _m)) -> Some (id, ty) + | (SynField([], false, Some id, ty, false, _xmldoc, None, _m)) -> Some (id, ty) | _ -> reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsInvalidAnonRecdType()); None) SynType.AnonRecd (isStruct, flds2, rhs parseState 1) } @@ -5056,7 +5126,7 @@ atomType: | NULL { let m = rhs parseState 1 - SynType.StaticConstant(SynConst.String (null, m), m) } + SynType.StaticConstant(SynConst.String (null, SynStringKind.Regular, m), m) } | CONST atomicExpr { let e, _ = $2 @@ -5223,7 +5293,7 @@ measureTypeExpr: typar: | QUOTE ident { let id = mkSynId (lhs parseState) ($2).idText - Typar(id, NoStaticReq, false) } + SynTypar(id, TyparStaticReq.None, false) } | staticallyKnownHeadTypar { $1 } @@ -5232,7 +5302,7 @@ staticallyKnownHeadTypar: | INFIX_AT_HAT_OP ident { if $1 <> "^" then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedTypeParameter()); let id = mkSynId (lhs parseState) ($2).idText - Typar(id, HeadTypeStaticReq, false) } + SynTypar(id, TyparStaticReq.HeadType, false) } ident: | IDENT @@ -5511,8 +5581,12 @@ colonOrEquals: | EQUALS { } /* A literal string or a string from a keyword like __SOURCE_FILE__ */ -stringOrKeywordString: - | STRING { fst $1 } +string: + | STRING + { let (s, synStringKind, _) = $1 + s, synStringKind } + +sourceIdentifier: | KEYWORD_STRING { $1 } interpolatedStringFill: @@ -5541,17 +5615,20 @@ interpolatedStringParts: /* INTERP_STRING_BEGIN_PART int32 INTERP_STRING_PART int32 INTERP_STRING_END */ interpolatedString: | INTERP_STRING_BEGIN_PART interpolatedStringFill interpolatedStringParts - { SynInterpolatedStringPart.String (fst $1, rhs parseState 1) :: SynInterpolatedStringPart.FillExpr $2 :: $3 } + { let s, synStringKind, _ = $1 + SynInterpolatedStringPart.String (s, rhs parseState 1) :: SynInterpolatedStringPart.FillExpr $2 :: $3, synStringKind } | INTERP_STRING_BEGIN_END - { [ SynInterpolatedStringPart.String (fst $1, rhs parseState 1) ] } + { let s, synStringKind, _ = $1 + [ SynInterpolatedStringPart.String (s, rhs parseState 1) ], synStringKind } | INTERP_STRING_BEGIN_PART interpolatedStringParts { + let s, synStringKind, _ = $1 let rbrace = parseState.InputEndPosition 1 let lbrace = parseState.InputStartPosition 2 reportParseErrorAt (mkSynRange rbrace lbrace) (FSComp.SR.parsEmptyFillInInterpolatedString()) - SynInterpolatedStringPart.String (fst $1, rhs parseState 1) :: $2 } + SynInterpolatedStringPart.String (s, rhs parseState 1) :: $2, synStringKind } opt_HIGH_PRECEDENCE_APP: | HIGH_PRECEDENCE_BRACK_APP { } diff --git a/src/fsharp/pplex.fsl b/src/fsharp/pplex.fsl index d4227d28733..fdd59bc6f81 100644 --- a/src/fsharp/pplex.fsl +++ b/src/fsharp/pplex.fsl @@ -9,7 +9,7 @@ open System open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Lexhelp open FSharp.Compiler.ParseHelpers -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax open Internal.Utilities.Text.Lexing diff --git a/src/fsharp/pppars.fsy b/src/fsharp/pppars.fsy index 0cd9171ae94..5775c898670 100644 --- a/src/fsharp/pppars.fsy +++ b/src/fsharp/pppars.fsy @@ -3,7 +3,7 @@ %{ open FSharp.Compiler.ErrorLogger open FSharp.Compiler.ParseHelpers -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax let dummy = IfdefId("DUMMY") diff --git a/src/fsharp/range.fs b/src/fsharp/range.fs index b20cee5c3be..690420ba7e5 100755 --- a/src/fsharp/range.fs +++ b/src/fsharp/range.fs @@ -1,38 +1,41 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -/// Anything to do with special names of identifiers and other lexical rules -module FSharp.Compiler.Range +/// Anything to do with special names of identifiers and other lexical rules +namespace FSharp.Compiler.Text open System open System.IO -open System.Collections.Generic open System.Collections.Concurrent +open System.Collections.Generic open Microsoft.FSharp.Core.Printf -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.Lib -open FSharp.Compiler.Lib.Bits +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras.Bits +open FSharp.Compiler.IO +open Internal.Utilities.Library.Extras -type FileIndex = int32 +type FileIndex = int32 -[] -let columnBitCount = 20 +[] +module PosImpl = + [] + let columnBitCount = 20 -[] -let lineBitCount = 31 + [] + let lineBitCount = 31 -let posBitCount = lineBitCount + columnBitCount + let posBitCount = lineBitCount + columnBitCount -let posColumnMask = mask64 0 columnBitCount + let posColumnMask = mask64 0 columnBitCount -let lineColumnMask = mask64 columnBitCount lineBitCount + let lineColumnMask = mask64 columnBitCount lineBitCount [] [] -type pos(code:int64) = +type Position(code:int64) = - new (l, c) = - let l = max 0 l - let c = max 0 c + new (l, c) = + let l = max 0 l + let c = max 0 c let p = (int64 c &&& posColumnMask) ||| ((int64 l <<< columnBitCount) &&& lineColumnMask) pos p @@ -45,98 +48,94 @@ type pos(code:int64) = static member EncodingSize = posBitCount - static member Decode (code:int64) : pos = pos code + static member Decode (code:int64) : pos = Position(code) - override p.Equals(obj) = match obj with :? pos as p2 -> code = p2.Encoding | _ -> false + override p.Equals(obj) = match obj with :? Position as p2 -> code = p2.Encoding | _ -> false override p.GetHashCode() = hash code override p.ToString() = sprintf "(%d,%d)" p.Line p.Column -[] -let fileIndexBitCount = 24 +and pos = Position -[] -let startColumnBitCount = columnBitCount // 20 +[] +module RangeImpl = + [] + let fileIndexBitCount = 24 -[] -let endColumnBitCount = columnBitCount // 20 + [] + let startColumnBitCount = columnBitCount // 20 -[] -let startLineBitCount = lineBitCount // 31 + [] + let endColumnBitCount = columnBitCount // 20 -[] -let heightBitCount = 27 + [] + let startLineBitCount = lineBitCount // 31 -[] -let isSyntheticBitCount = 1 + [] + let heightBitCount = 27 -[] -let fileIndexShift = 0 + [] + let isSyntheticBitCount = 1 -[] -let startColumnShift = 24 + [] + let fileIndexShift = 0 -[] -let endColumnShift = 44 + [] + let startColumnShift = 24 -[] -let startLineShift = 0 + [] + let endColumnShift = 44 -[] -let heightShift = 31 + [] + let startLineShift = 0 -[] -let isSyntheticShift = 58 + [] + let heightShift = 31 -[] -let fileIndexMask = 0b0000000000000000000000000000000000000000111111111111111111111111L + [] + let isSyntheticShift = 58 -[] -let startColumnMask = 0b0000000000000000000011111111111111111111000000000000000000000000L + [] + let fileIndexMask = 0b0000000000000000000000000000000000000000111111111111111111111111L -[] -let endColumnMask = 0b1111111111111111111100000000000000000000000000000000000000000000L + [] + let startColumnMask = 0b0000000000000000000011111111111111111111000000000000000000000000L -[] -let startLineMask = 0b0000000000000000000000000000000001111111111111111111111111111111L + [] + let endColumnMask = 0b1111111111111111111100000000000000000000000000000000000000000000L -[] -let heightMask = 0b0000001111111111111111111111111110000000000000000000000000000000L + [] + let startLineMask = 0b0000000000000000000000000000000001111111111111111111111111111111L -[] -let isSyntheticMask = 0b0000010000000000000000000000000000000000000000000000000000000000L + [] + let heightMask = 0b0000001111111111111111111111111110000000000000000000000000000000L -#if DEBUG -let _ = assert (posBitCount <= 64) -let _ = assert (fileIndexBitCount + startColumnBitCount + endColumnBitCount <= 64) -let _ = assert (startLineBitCount + heightBitCount + isSyntheticBitCount <= 64) + [] + let isSyntheticMask = 0b0000010000000000000000000000000000000000000000000000000000000000L -let _ = assert (startColumnShift = fileIndexShift + fileIndexBitCount) -let _ = assert (endColumnShift = startColumnShift + startColumnBitCount) + #if DEBUG + let _ = assert (posBitCount <= 64) + let _ = assert (fileIndexBitCount + startColumnBitCount + endColumnBitCount <= 64) + let _ = assert (startLineBitCount + heightBitCount + isSyntheticBitCount <= 64) -let _ = assert (heightShift = startLineShift + startLineBitCount) -let _ = assert (isSyntheticShift = heightShift + heightBitCount) + let _ = assert (startColumnShift = fileIndexShift + fileIndexBitCount) + let _ = assert (endColumnShift = startColumnShift + startColumnBitCount) -let _ = assert (fileIndexMask = mask64 fileIndexShift fileIndexBitCount) -let _ = assert (startLineMask = mask64 startLineShift startLineBitCount) -let _ = assert (startColumnMask = mask64 startColumnShift startColumnBitCount) -let _ = assert (heightMask = mask64 heightShift heightBitCount) -let _ = assert (endColumnMask = mask64 endColumnShift endColumnBitCount) -let _ = assert (isSyntheticMask = mask64 isSyntheticShift isSyntheticBitCount) -#endif + let _ = assert (heightShift = startLineShift + startLineBitCount) + let _ = assert (isSyntheticShift = heightShift + heightBitCount) + + let _ = assert (fileIndexMask = mask64 fileIndexShift fileIndexBitCount) + let _ = assert (startLineMask = mask64 startLineShift startLineBitCount) + let _ = assert (startColumnMask = mask64 startColumnShift startColumnBitCount) + let _ = assert (heightMask = mask64 heightShift heightBitCount) + let _ = assert (endColumnMask = mask64 endColumnShift endColumnBitCount) + let _ = assert (isSyntheticMask = mask64 isSyntheticShift isSyntheticBitCount) + #endif -/// Removes relative parts from any full paths -let normalizeFilePath (filePath: string) = - try - if FileSystem.IsPathRootedShim filePath then - FileSystem.GetFullPathShim filePath - else - filePath - with _ -> filePath /// A unique-index table for file names. -type FileIndexTable() = +type FileIndexTable() = let indexToFileTable = new ResizeArray<_>(11) let fileToIndexTable = new ConcurrentDictionary() @@ -146,74 +145,74 @@ type FileIndexTable() = // do not. Also any file names which are not put into ranges at all are non-normalized. // // TO move forward we should eventually introduce a new type NormalizedFileName that tracks this invariant. - member t.FileToIndex normalize filePath = - match fileToIndexTable.TryGetValue filePath with + member t.FileToIndex normalize filePath = + match fileToIndexTable.TryGetValue filePath with | true, idx -> idx - | _ -> - + | _ -> + // Try again looking for a normalized entry. - let normalizedFilePath = if normalize then normalizeFilePath filePath else filePath - match fileToIndexTable.TryGetValue normalizedFilePath with + let normalizedFilePath = if normalize then FileSystem.NormalizePathShim filePath else filePath + match fileToIndexTable.TryGetValue normalizedFilePath with | true, idx -> // Record the non-normalized entry if necessary - if filePath <> normalizedFilePath then - lock fileToIndexTable (fun () -> + if filePath <> normalizedFilePath then + lock fileToIndexTable (fun () -> fileToIndexTable.[filePath] <- idx) - + // Return the index idx - - | _ -> - lock fileToIndexTable (fun () -> + + | _ -> + lock fileToIndexTable (fun () -> // Get the new index let idx = indexToFileTable.Count - + // Record the normalized entry indexToFileTable.Add normalizedFilePath fileToIndexTable.[normalizedFilePath] <- idx - + // Record the non-normalized entry if necessary - if filePath <> normalizedFilePath then + if filePath <> normalizedFilePath then fileToIndexTable.[filePath] <- idx // Return the index idx) - member t.IndexToFile n = - if n < 0 then + member t.IndexToFile n = + if n < 0 then failwithf "fileOfFileIndex: negative argument: n = %d\n" n if n >= indexToFileTable.Count then failwithf "fileOfFileIndex: invalid argument: n = %d\n" n indexToFileTable.[n] -let maxFileIndex = pown32 fileIndexBitCount +[] +module FileIndex = + let maxFileIndex = pown32 fileIndexBitCount -// ++GLOBAL MUTABLE STATE -// WARNING: Global Mutable State, holding a mapping between integers and filenames -let fileIndexTable = new FileIndexTable() + // ++GLOBAL MUTABLE STATE + // WARNING: Global Mutable State, holding a mapping between integers and filenames + let fileIndexTable = new FileIndexTable() -// If we exceed the maximum number of files we'll start to report incorrect file names -let fileIndexOfFileAux normalize f = fileIndexTable.FileToIndex normalize f % maxFileIndex + // If we exceed the maximum number of files we'll start to report incorrect file names + let fileIndexOfFileAux normalize f = fileIndexTable.FileToIndex normalize f % maxFileIndex -let fileIndexOfFile filePath = fileIndexOfFileAux false filePath + let fileIndexOfFile filePath = fileIndexOfFileAux false filePath -let fileOfFileIndex idx = fileIndexTable.IndexToFile idx + let fileOfFileIndex idx = fileIndexTable.IndexToFile idx -let mkPos line column = pos (line, column) - -let unknownFileName = "unknown" -let startupFileName = "startup" -let commandLineArgsFileName = "commandLineArgs" + let unknownFileName = "unknown" + let startupFileName = "startup" + let commandLineArgsFileName = "commandLineArgs" [] [ {DebugCode}")>] -type range(code1:int64, code2: int64) = +type Range(code1:int64, code2: int64) = static member Zero = range(0L, 0L) - new (fIdx, bl, bc, el, ec) = + new (fIdx, bl, bc, el, ec) = let code1 = ((int64 fIdx) &&& fileIndexMask) ||| ((int64 bc <<< startColumnShift) &&& startColumnMask) ||| ((int64 ec <<< endColumnShift) &&& endColumnMask) - let code2 = + let code2 = ((int64 bl <<< startLineShift) &&& startLineMask) ||| ((int64 (el-bl) <<< heightShift) &&& heightMask) range(code1, code2) @@ -222,13 +221,13 @@ type range(code1:int64, code2: int64) = member r.StartLine = int32((code2 &&& startLineMask) >>> startLineShift) - member r.StartColumn = int32((code1 &&& startColumnMask) >>> startColumnShift) + member r.StartColumn = int32((code1 &&& startColumnMask) >>> startColumnShift) member r.EndLine = int32((code2 &&& heightMask) >>> heightShift) + r.StartLine member r.EndColumn = int32((code1 &&& endColumnMask) >>> endColumnShift) - member r.IsSynthetic = int32((code2 &&& isSyntheticMask) >>> isSyntheticShift) <> 0 + member r.IsSynthetic = int32((code2 &&& isSyntheticMask) >>> isSyntheticShift) <> 0 member r.Start = pos (r.StartLine, r.StartColumn) @@ -258,15 +257,15 @@ type range(code1:int64, code2: int64) = let endCol = r.EndColumn - 1 let startCol = r.StartColumn - 1 if FileSystem.IsInvalidPathShim r.FileName then "path invalid: " + r.FileName - elif not (FileSystem.SafeExists r.FileName) then "non existing file: " + r.FileName + elif not (FileSystem.FileExistsShim r.FileName) then "non existing file: " + r.FileName else - File.ReadAllLines(r.FileName) + FileSystem.OpenFileForReadShim(r.FileName).ReadLines() |> Seq.skip (r.StartLine - 1) |> Seq.take (r.EndLine - r.StartLine + 1) |> String.concat "\n" |> fun s -> s.Substring(startCol + 1, s.LastIndexOf("\n", StringComparison.Ordinal) + 1 - startCol + endCol) with e -> - e.ToString() + e.ToString() member r.ToShortString() = sprintf "(%d,%d--%d,%d)" r.StartLine r.StartColumn r.EndLine r.EndColumn @@ -276,113 +275,130 @@ type range(code1:int64, code2: int64) = override r.ToString() = sprintf "%s (%d,%d--%d,%d) IsSynthetic=%b" r.FileName r.StartLine r.StartColumn r.EndLine r.EndColumn r.IsSynthetic -let mkRange filePath startPos endPos = range (fileIndexOfFileAux true filePath, startPos, endPos) +and range = Range + +#if CHECK_LINE0_TYPES // turn on to check that we correctly transform zero-based line counts to one-based line counts +// Visual Studio uses line counts starting at 0, F# uses them starting at 1 +[] type ZeroBasedLineAnnotation + +type Line0 = int +#else +type Line0 = int +#endif + +type Position01 = Line0 * int -let equals (r1: range) (r2: range) = - r1.Code1 = r2.Code1 && r1.Code2 = r2.Code2 +type Range01 = Position01 * Position01 -let mkFileIndexRange fileIndex startPos endPos = range (fileIndex, startPos, endPos) +module Line = -let posOrder = Order.orderOn (fun (p:pos) -> p.Line, p.Column) (Pair.order (Int32.order, Int32.order)) + let fromZ (line:Line0) = int line+1 -/// rangeOrder: not a total order, but enough to sort on ranges -let rangeOrder = Order.orderOn (fun (r:range) -> r.FileName, r.Start) (Pair.order (String.order, posOrder)) + let toZ (line:int) : Line0 = LanguagePrimitives.Int32WithMeasure(line - 1) -let outputPos (os:TextWriter) (m:pos) = fprintf os "(%d,%d)" m.Line m.Column +[] +module Position = -let outputRange (os:TextWriter) (m:range) = fprintf os "%s%a-%a" m.FileName outputPos m.Start outputPos m.End - -let posGt (p1: pos) (p2: pos) = - let p1Line = p1.Line - let p2Line = p2.Line - p1Line > p2Line || p1Line = p2Line && p1.Column > p2.Column + let mkPos line column = Position (line, column) -let posEq (p1: pos) (p2: pos) = p1.Encoding = p2.Encoding + let outputPos (os:TextWriter) (m:pos) = fprintf os "(%d,%d)" m.Line m.Column -let posGeq p1 p2 = posEq p1 p2 || posGt p1 p2 + let posGt (p1: pos) (p2: pos) = + let p1Line = p1.Line + let p2Line = p2.Line + p1Line > p2Line || p1Line = p2Line && p1.Column > p2.Column -let posLt p1 p2 = posGt p2 p1 + let posEq (p1: pos) (p2: pos) = p1.Encoding = p2.Encoding -/// This is deliberately written in an allocation-free way, i.e. m1.Start, m1.End etc. are not called -let unionRanges (m1:range) (m2:range) = - if m1.FileIndex <> m2.FileIndex then m2 else - let b = - if (m1.StartLine > m2.StartLine || (m1.StartLine = m2.StartLine && m1.StartColumn > m2.StartColumn)) then m2 - else m1 - let e = - if (m1.EndLine > m2.EndLine || (m1.EndLine = m2.EndLine && m1.EndColumn > m2.EndColumn)) then m1 - else m2 - range (m1.FileIndex, b.StartLine, b.StartColumn, e.EndLine, e.EndColumn) + let posGeq p1 p2 = posEq p1 p2 || posGt p1 p2 -let rangeContainsRange (m1:range) (m2:range) = - m1.FileIndex = m2.FileIndex && - posGeq m2.Start m1.Start && - posGeq m1.End m2.End + let posLt p1 p2 = posGt p2 p1 -let rangeContainsPos (m1:range) p = - posGeq p m1.Start && - posGeq m1.End p + let fromZ (line:Line0) column = mkPos (Line.fromZ line) column -let rangeBeforePos (m1:range) p = - posGeq p m1.End + let toZ (p:pos) = (Line.toZ p.Line, p.Column) -let rangeN filename line = mkRange filename (mkPos line 0) (mkPos line 0) + (* For Diagnostics *) + let stringOfPos (pos:pos) = sprintf "(%d,%d)" pos.Line pos.Column -let pos0 = mkPos 1 0 + let pos0 = mkPos 1 0 -let range0 = rangeN unknownFileName 1 +module Range = + let mkRange filePath startPos endPos = range (fileIndexOfFileAux true filePath, startPos, endPos) -let rangeStartup = rangeN startupFileName 1 + let equals (r1: range) (r2: range) = + r1.Code1 = r2.Code1 && r1.Code2 = r2.Code2 -let rangeCmdArgs = rangeN commandLineArgsFileName 0 + let mkFileIndexRange fileIndex startPos endPos = range (fileIndex, startPos, endPos) -let trimRangeToLine (r:range) = - let startL, startC = r.StartLine, r.StartColumn - let endL, _endC = r.EndLine, r.EndColumn - if endL <= startL then - r - else - let endL, endC = startL+1, 0 (* Trim to the start of the next line (we do not know the end of the current line) *) - range (r.FileIndex, startL, startC, endL, endC) + let posOrder = Order.orderOn (fun (p:pos) -> p.Line, p.Column) (Pair.order (Int32.order, Int32.order)) -(* For Diagnostics *) -let stringOfPos (pos:pos) = sprintf "(%d,%d)" pos.Line pos.Column + /// rangeOrder: not a total order, but enough to sort on ranges + let rangeOrder = Order.orderOn (fun (r:range) -> r.FileName, r.Start) (Pair.order (String.order, posOrder)) -let stringOfRange (r:range) = sprintf "%s%s-%s" r.FileName (stringOfPos r.Start) (stringOfPos r.End) + let outputRange (os:TextWriter) (m:range) = fprintf os "%s%a-%a" m.FileName Position.outputPos m.Start Position.outputPos m.End -#if CHECK_LINE0_TYPES // turn on to check that we correctly transform zero-based line counts to one-based line counts -// Visual Studio uses line counts starting at 0, F# uses them starting at 1 -[] type ZeroBasedLineAnnotation + /// This is deliberately written in an allocation-free way, i.e. m1.Start, m1.End etc. are not called + let unionRanges (m1:range) (m2:range) = + if m1.FileIndex <> m2.FileIndex then m2 else + let b = + if (m1.StartLine > m2.StartLine || (m1.StartLine = m2.StartLine && m1.StartColumn > m2.StartColumn)) then m2 + else m1 + let e = + if (m1.EndLine > m2.EndLine || (m1.EndLine = m2.EndLine && m1.EndColumn > m2.EndColumn)) then m1 + else m2 + range (m1.FileIndex, b.StartLine, b.StartColumn, e.EndLine, e.EndColumn) -type Line0 = int -#else -type Line0 = int -#endif -type Pos01 = Line0 * int -type Range01 = Pos01 * Pos01 + let rangeContainsRange (m1:range) (m2:range) = + m1.FileIndex = m2.FileIndex && + Position.posGeq m2.Start m1.Start && + Position.posGeq m1.End m2.End -module Line = + let rangeContainsPos (m1:range) p = + Position.posGeq p m1.Start && + Position.posGeq m1.End p - // Visual Studio uses line counts starting at 0, F# uses them starting at 1 - let fromZ (line:Line0) = int line+1 + let rangeBeforePos (m1:range) p = + Position.posGeq p m1.End - let toZ (line:int) : Line0 = LanguagePrimitives.Int32WithMeasure(line - 1) + let rangeN filename line = mkRange filename (mkPos line 0) (mkPos line 0) -module Pos = + let range0 = rangeN unknownFileName 1 - let fromZ (line:Line0) column = mkPos (Line.fromZ line) column + let rangeStartup = rangeN startupFileName 1 - let toZ (p:pos) = (Line.toZ p.Line, p.Column) + let rangeCmdArgs = rangeN commandLineArgsFileName 0 -module Range = + let trimRangeToLine (r:range) = + let startL, startC = r.StartLine, r.StartColumn + let endL, _endC = r.EndLine, r.EndColumn + if endL <= startL then + r + else + let endL, endC = startL+1, 0 (* Trim to the start of the next line (we do not know the end of the current line) *) + range (r.FileIndex, startL, startC, endL, endC) + + let stringOfRange (r:range) = sprintf "%s%s-%s" r.FileName (Position.stringOfPos r.Start) (Position.stringOfPos r.End) - let toZ (m:range) = Pos.toZ m.Start, Pos.toZ m.End + let toZ (m:range) = Position.toZ m.Start, Position.toZ m.End let toFileZ (m:range) = m.FileName, toZ m - let comparer = - { new IEqualityComparer with - member _.Equals(x1, x2) = equals x1 x2 + let comparer = + { new IEqualityComparer with + member _.Equals(x1, x2) = equals x1 x2 member _.GetHashCode o = o.GetHashCode() } - + let mkFirstLineOfFile (file: string) = + try + let lines = FileSystem.OpenFileForReadShim(file).ReadLines() |> Seq.indexed + let nonWhiteLine = lines |> Seq.tryFind (fun (_,s) -> not (String.IsNullOrWhiteSpace s)) + match nonWhiteLine with + | Some (i,s) -> mkRange file (mkPos (i+1) 0) (mkPos (i+1) s.Length) + | None -> + let nonEmptyLine = lines |> Seq.tryFind (fun (_,s) -> not (String.IsNullOrEmpty s)) + match nonEmptyLine with + | Some (i,s) -> mkRange file (mkPos (i+1) 0) (mkPos (i+1) s.Length) + | None -> mkRange file (mkPos 1 0) (mkPos 1 80) + with _ -> + mkRange file (mkPos 1 0) (mkPos 1 80) diff --git a/src/fsharp/range.fsi b/src/fsharp/range.fsi index 172ad32c103..1d2fcdb8634 100755 --- a/src/fsharp/range.fsi +++ b/src/fsharp/range.fsi @@ -1,74 +1,56 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module public FSharp.Compiler.Range +/// The Range and Pos types form part of the public API of FSharp.Compiler.Service +namespace FSharp.Compiler.Text -open System.Text open System.Collections.Generic -open Internal.Utilities -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler - /// An index into a global tables of filenames -type FileIndex = int32 - -/// Convert a file path to an index -val fileIndexOfFile : filePath: string -> FileIndex - -/// Convert an index into a file path -val fileOfFileIndex : FileIndex -> string +type internal FileIndex = int32 /// Represents a position in a file [] -type pos = +type Position = /// The line number for the position - member Line : int + member Line: int /// The column number for the position - member Column : int + member Column: int /// The encoding of the position as a 64-bit integer - member Encoding : int64 + member internal Encoding: int64 /// Decode a position fro a 64-bit integer - static member Decode : int64 -> pos + static member internal Decode: int64 -> pos /// The maximum number of bits needed to store an encoded position - static member EncodingSize : int - -/// Create a position for the given line and column -val mkPos : line:int -> column:int -> pos + static member internal EncodingSize: int -/// Ordering on positions -val posOrder : IComparer - -val unknownFileName: string -val startupFileName: string -val commandLineArgsFileName: string +/// Represents a position in a file +and pos = Position -/// Represents a range within a known file +/// Represents a range within a file [] -type range = +type Range = /// The start line of the range - member StartLine : int + member StartLine: int /// The start column of the range - member StartColumn : int + member StartColumn: int /// The line number for the end position of the range - member EndLine : int + member EndLine: int /// The column number for the end position of the range - member EndColumn : int + member EndColumn: int /// The start position of the range - member Start : pos + member Start: pos /// The end position of the range - member End : pos + member End: pos /// The empty range that is located at the start position of the range member StartRange: range @@ -77,129 +59,154 @@ type range = member EndRange: range /// The file index for the range - member FileIndex : int + member internal FileIndex: int /// The file name for the file of the range - member FileName : string + member FileName: string /// Synthetic marks ranges which are produced by intermediate compilation phases. This /// bit signifies that the range covers something that should not be visible to language /// service operations like dot-completion. - member IsSynthetic : bool + member IsSynthetic: bool /// Convert a range to be synthetic - member MakeSynthetic : unit -> range + member internal MakeSynthetic: unit -> range /// Convert a range to string - member ToShortString : unit -> string + member internal ToShortString: unit -> string /// The range where all values are zero - static member Zero : range + static member Zero: range -/// This view of range marks uses file indexes explicitly -val mkFileIndexRange : FileIndex -> pos -> pos -> range +/// Represents a range within a file +and range = Range -/// This view hides the use of file indexes and just uses filenames -val mkRange : string -> pos -> pos -> range +/// Represents a line number when using zero-based line counting (used by Visual Studio) +#if CHECK_LINE0_TYPES +// Visual Studio uses line counts starting at 0, F# uses them starting at 1 +[] type ZeroBasedLineAnnotation -val equals : range -> range -> bool +type Line0 = int +#else +type Line0 = int +#endif -/// Reduce a range so it only covers a line -val trimRangeToLine : range -> range +/// Represents a position using zero-based line counting (used by Visual Studio) +type Position01 = Line0 * int -/// not a total order, but enough to sort on ranges -val rangeOrder : IComparer +/// Represents a range using zero-based line counting (used by Visual Studio) +type Range01 = Position01 * Position01 -/// Output a position -val outputPos : System.IO.TextWriter -> pos -> unit +module Position = + /// Create a position for the given line and column + val mkPos: line:int -> column:int -> pos -/// Output a range -val outputRange : System.IO.TextWriter -> range -> unit - -/// Compare positions for less-than -val posLt : pos -> pos -> bool + /// Compare positions for less-than + val posLt: pos -> pos -> bool -/// Compare positions for greater-than -val posGt : pos -> pos -> bool + /// Compare positions for greater-than + val posGt: pos -> pos -> bool -/// Compare positions for equality -val posEq : pos -> pos -> bool + /// Compare positions for equality + val posEq: pos -> pos -> bool -/// Compare positions for greater-than-or-equal-to -val posGeq : pos -> pos -> bool + /// Compare positions for greater-than-or-equal-to + val posGeq: pos -> pos -> bool -/// Union two ranges, taking their first occurring start position and last occurring end position -val unionRanges : range -> range -> range + /// Convert a position from zero-based line counting (used by Visual Studio) to one-based line counting (used internally in the F# compiler and in F# error messages) + val fromZ: line:Line0 -> column:int -> pos -/// Test to see if one range contains another range -val rangeContainsRange : range -> range -> bool + /// Convert a position from one-based line counting (used internally in the F# compiler and in F# error messages) to zero-based line counting (used by Visual Studio) + val toZ: pos -> Position01 -/// Test to see if a range contains a position -val rangeContainsPos : range -> pos -> bool + /// Output a position + val outputPos: System.IO.TextWriter -> pos -> unit -/// Test to see if a range occurs fully before a position -val rangeBeforePos : range -> pos -> bool + /// Convert a position to a string + val stringOfPos: pos -> string -/// Make a dummy range for a file -val rangeN : string -> int -> range + /// The zero position + val pos0: pos -/// The zero position -val pos0 : pos +module internal FileIndex = -/// The zero range -val range0 : range + /// Convert a file path to an index + val fileIndexOfFile: filePath: string -> FileIndex -/// A range associated with a dummy file called "startup" -val rangeStartup : range + /// Convert an index into a file path + val fileOfFileIndex: FileIndex -> string -/// A range associated with a dummy file for the command line arguments -val rangeCmdArgs : range - -/// Convert a position to a string -val stringOfPos : pos -> string + val startupFileName: string -/// Convert a range to a string -val stringOfRange : range -> string +module Range = -/// Represents a line number when using zero-based line counting (used by Visual Studio) -#if CHECK_LINE0_TYPES -// Visual Studio uses line counts starting at 0, F# uses them starting at 1 -[] type ZeroBasedLineAnnotation + /// Ordering on positions + val posOrder: IComparer -type Line0 = int -#else -type Line0 = int -#endif + /// This view of range marks uses file indexes explicitly + val mkFileIndexRange: FileIndex -> pos -> pos -> range -/// Represents a position using zero-based line counting (used by Visual Studio) -type Pos01 = Line0 * int + /// This view hides the use of file indexes and just uses filenames + val mkRange: string -> pos -> pos -> range -/// Represents a range using zero-based line counting (used by Visual Studio) -type Range01 = Pos01 * Pos01 + /// Make a range for the first non-whitespace line of the file if any. Otherwise use line 1 chars 0-80. + /// This involves reading the file. + val mkFirstLineOfFile: string -> range -module Line = + val equals: range -> range -> bool - /// Convert a line number from zero-based line counting (used by Visual Studio) to one-based line counting (used internally in the F# compiler and in F# error messages) - val fromZ : Line0 -> int + /// Reduce a range so it only covers a line + val trimRangeToLine: range -> range - /// Convert a line number from one-based line counting (used internally in the F# compiler and in F# error messages) to zero-based line counting (used by Visual Studio) - val toZ : int -> Line0 + /// not a total order, but enough to sort on ranges + val rangeOrder: IComparer -module Pos = + /// Output a range + val outputRange: System.IO.TextWriter -> range -> unit - /// Convert a position from zero-based line counting (used by Visual Studio) to one-based line counting (used internally in the F# compiler and in F# error messages) - val fromZ : line:Line0 -> column:int -> pos + /// Union two ranges, taking their first occurring start position and last occurring end position + val unionRanges: range -> range -> range - /// Convert a position from one-based line counting (used internally in the F# compiler and in F# error messages) to zero-based line counting (used by Visual Studio) - val toZ : pos -> Pos01 + /// Test to see if one range contains another range + val rangeContainsRange: range -> range -> bool -module Range = + /// Test to see if a range contains a position + val rangeContainsPos: range -> pos -> bool + + /// Test to see if a range occurs fully before a position + val rangeBeforePos: range -> pos -> bool + + /// Make a dummy range for a file + val rangeN: string -> int -> range + + /// The zero range + val range0: range + + /// A range associated with a dummy file called "startup" + val rangeStartup: range + + /// A range associated with a dummy file for the command line arguments + val rangeCmdArgs: range + + /// Convert a range to a string + val stringOfRange: range -> string /// Convert a range from one-based line counting (used internally in the F# compiler and in F# error messages) to zero-based line counting (used by Visual Studio) - val toZ : range -> Range01 + val toZ: range -> Range01 /// Convert a range from one-based line counting (used internally in the F# compiler and in F# error messages) to zero-based line counting (used by Visual Studio) - val toFileZ : range -> string * Range01 + val toFileZ: range -> string * Range01 /// Equality comparer for range. - val comparer : IEqualityComparer + val comparer: IEqualityComparer + +/// Functions related to converting between lines indexed at 0 and 1 +module Line = + + /// Convert a line number from zero-based line counting (used by Visual Studio) to one-based line counting (used internally in the F# compiler and in F# error messages) + val fromZ: Line0 -> int + + /// Convert a line number from one-based line counting (used internally in the F# compiler and in F# error messages) to zero-based line counting (used by Visual Studio) + val toZ: int -> Line0 + + diff --git a/src/fsharp/rational.fs b/src/fsharp/rational.fs index 5b36a9e349e..51d7e2f6eb0 100644 --- a/src/fsharp/rational.fs +++ b/src/fsharp/rational.fs @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// Rational arithmetic, used for exponents on units-of-measure -module internal FSharp.Compiler.Rational +module internal Internal.Utilities.Rational open System.Numerics diff --git a/src/fsharp/rational.fsi b/src/fsharp/rational.fsi index 30b5d6b8e7d..0bcfc6dd99e 100644 --- a/src/fsharp/rational.fsi +++ b/src/fsharp/rational.fsi @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// Rational arithmetic, used for exponents on units-of-measure -module internal FSharp.Compiler.Rational +module internal Internal.Utilities.Rational type Rational diff --git a/src/fsharp/service/ExternalSymbol.fs b/src/fsharp/service/ExternalSymbol.fs index dc56f50ee2d..f91a586cd48 100644 --- a/src/fsharp/service/ExternalSymbol.fs +++ b/src/fsharp/service/ExternalSymbol.fs @@ -1,12 +1,13 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.EditorServices open FSharp.Reflection +open FSharp.Compiler.Text open FSharp.Compiler.AbstractIL.IL open System.Diagnostics -module private Option = +module Option = let ofOptionList (xs : 'a option list) : 'a list option = @@ -17,15 +18,15 @@ module private Option = /// Represents a type in an external (non F#) assembly. [] -type ExternalType = +type FindDeclExternalType = /// Type defined in non-F# assembly. - | Type of fullName: string * genericArgs: ExternalType list + | Type of fullName: string * genericArgs: FindDeclExternalType list /// Array of type that is defined in non-F# assembly. - | Array of inner: ExternalType + | Array of inner: FindDeclExternalType /// Pointer defined in non-F# assembly. - | Pointer of inner: ExternalType + | Pointer of inner: FindDeclExternalType /// Type variable defined in non-F# assembly. | TypeVar of typeName: string @@ -45,51 +46,61 @@ type ExternalType = | Pointer inner -> sprintf "&%O" inner | TypeVar name -> sprintf "'%s" name -module ExternalType = - let rec internal tryOfILType (typeVarNames: string array) (ilType: ILType) = +module FindDeclExternalType = + let rec tryOfILType (typeVarNames: string array) (ilType: ILType) = match ilType with | ILType.Array (_, inner) -> - tryOfILType typeVarNames inner |> Option.map ExternalType.Array + tryOfILType typeVarNames inner |> Option.map FindDeclExternalType.Array | ILType.Boxed tyspec | ILType.Value tyspec -> tyspec.GenericArgs |> List.map (tryOfILType typeVarNames) |> Option.ofOptionList - |> Option.map (fun genericArgs -> ExternalType.Type (tyspec.FullName, genericArgs)) + |> Option.map (fun genericArgs -> FindDeclExternalType.Type (tyspec.FullName, genericArgs)) | ILType.Ptr inner -> - tryOfILType typeVarNames inner |> Option.map ExternalType.Pointer + tryOfILType typeVarNames inner |> Option.map FindDeclExternalType.Pointer | ILType.TypeVar ordinal -> typeVarNames |> Array.tryItem (int ordinal) - |> Option.map (fun typeVarName -> ExternalType.TypeVar typeVarName) + |> Option.map (fun typeVarName -> FindDeclExternalType.TypeVar typeVarName) | _ -> None [] -type ParamTypeSymbol = - | Param of ExternalType - | Byref of ExternalType +type FindDeclExternalParam = + + | Param of parameterType: FindDeclExternalType + + | Byref of parameterType: FindDeclExternalType + + member c.IsByRef = match c with Byref _ -> true | _ -> false + + member c.ParameterType = match c with Byref ty -> ty | Param ty -> ty + + static member Create(parameterType, isByRef) = + if isByRef then Byref parameterType else Param parameterType + override this.ToString () = match this with | Param t -> t.ToString() | Byref t -> sprintf "ref %O" t -module ParamTypeSymbol = - let rec internal tryOfILType (typeVarNames : string array) = +module FindDeclExternalParam = + let tryOfILType (typeVarNames : string array) = function - | ILType.Byref inner -> ExternalType.tryOfILType typeVarNames inner |> Option.map ParamTypeSymbol.Byref - | ilType -> ExternalType.tryOfILType typeVarNames ilType |> Option.map ParamTypeSymbol.Param + | ILType.Byref inner -> FindDeclExternalType.tryOfILType typeVarNames inner |> Option.map FindDeclExternalParam.Byref + | ilType -> FindDeclExternalType.tryOfILType typeVarNames ilType |> Option.map FindDeclExternalParam.Param - let internal tryOfILTypes typeVarNames ilTypes = + let tryOfILTypes typeVarNames ilTypes = ilTypes |> List.map (tryOfILType typeVarNames) |> Option.ofOptionList [] [] -type ExternalSymbol = +type FindDeclExternalSymbol = | Type of fullName: string - | Constructor of typeName: string * args: ParamTypeSymbol list - | Method of typeName: string * name: string * paramSyms: ParamTypeSymbol list * genericArity: int + | Constructor of typeName: string * args: FindDeclExternalParam list + | Method of typeName: string * name: string * paramSyms: FindDeclExternalParam list * genericArity: int | Field of typeName: string * name: string | Event of typeName: string * name: string | Property of typeName: string * name: string @@ -116,6 +127,34 @@ type ExternalSymbol = | Property (typeName, name) -> sprintf "%s.%s" typeName name - member internal this.ToDebuggerDisplay () = - let caseInfo, _ = FSharpValue.GetUnionFields(this, typeof) + member this.ToDebuggerDisplay () = + let caseInfo, _ = FSharpValue.GetUnionFields(this, typeof) sprintf "%s %O" caseInfo.Name this + +[] +type FindDeclFailureReason = + + // generic reason: no particular information about error + | Unknown of message: string + + // source code file is not available + | NoSourceCode + + // trying to find declaration of ProvidedType without TypeProviderDefinitionLocationAttribute + | ProvidedType of typeName: string + + // trying to find declaration of ProvidedMember without TypeProviderDefinitionLocationAttribute + | ProvidedMember of memberName: string + +[] +type FindDeclResult = + + /// declaration not found + reason + | DeclNotFound of FindDeclFailureReason + + /// found declaration + | DeclFound of location: range + + /// Indicates an external declaration was found + | ExternalDecl of assembly : string * externalSym : FindDeclExternalSymbol + diff --git a/src/fsharp/service/ExternalSymbol.fsi b/src/fsharp/service/ExternalSymbol.fsi index 01152010126..1a0492d3c27 100644 --- a/src/fsharp/service/ExternalSymbol.fsi +++ b/src/fsharp/service/ExternalSymbol.fsi @@ -1,50 +1,93 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.EditorServices +open FSharp.Compiler.Text open FSharp.Compiler.AbstractIL.IL /// Represents a type in an external (non F#) assembly. [] -type ExternalType = +type public FindDeclExternalType = /// Type defined in non-F# assembly. - | Type of fullName: string * genericArgs: ExternalType list + | Type of fullName: string * genericArgs: FindDeclExternalType list /// Array of type that is defined in non-F# assembly. - | Array of inner: ExternalType + | Array of inner: FindDeclExternalType /// Pointer defined in non-F# assembly. - | Pointer of inner: ExternalType + | Pointer of inner: FindDeclExternalType /// Type variable defined in non-F# assembly. | TypeVar of typeName: string override ToString : unit -> string -module ExternalType = - val internal tryOfILType : string array -> ILType -> ExternalType option +module internal FindDeclExternalType = + val internal tryOfILType : string array -> ILType -> FindDeclExternalType option /// Represents the type of a single method parameter -[] -type ParamTypeSymbol = - | Param of ExternalType - | Byref of ExternalType +[] +type public FindDeclExternalParam = + + member IsByRef: bool + + member ParameterType: FindDeclExternalType + + static member Create: parameterType: FindDeclExternalType * isByRef: bool -> FindDeclExternalParam + override ToString : unit -> string -module ParamTypeSymbol = - val internal tryOfILType : string array -> ILType -> ParamTypeSymbol option - val internal tryOfILTypes : string array -> ILType list -> ParamTypeSymbol list option +module internal FindDeclExternalParam = + + val internal tryOfILType : string array -> ILType -> FindDeclExternalParam option + + val internal tryOfILTypes : string array -> ILType list -> FindDeclExternalParam list option /// Represents a symbol in an external (non F#) assembly [] -type ExternalSymbol = +type public FindDeclExternalSymbol = | Type of fullName: string - | Constructor of typeName: string * args: ParamTypeSymbol list - | Method of typeName: string * name: string * paramSyms: ParamTypeSymbol list * genericArity: int + + | Constructor of typeName: string * args: FindDeclExternalParam list + + | Method of typeName: string * name: string * paramSyms: FindDeclExternalParam list * genericArity: int + | Field of typeName: string * name: string + | Event of typeName: string * name: string + | Property of typeName: string * name: string override ToString : unit -> string - member internal ToDebuggerDisplay : unit -> string \ No newline at end of file + member internal ToDebuggerDisplay : unit -> string + +/// Represents the reason why the GetDeclarationLocation operation failed. +[] +type public FindDeclFailureReason = + + /// Generic reason: no particular information about error apart from a message + | Unknown of message: string + + /// Source code file is not available + | NoSourceCode + + /// Trying to find declaration of ProvidedType without TypeProviderDefinitionLocationAttribute + | ProvidedType of typeName: string + + /// Trying to find declaration of ProvidedMember without TypeProviderDefinitionLocationAttribute + | ProvidedMember of memberName: string + +/// Represents the result of the GetDeclarationLocation operation. +[] +type public FindDeclResult = + + /// Indicates a declaration location was not found, with an additional reason + | DeclNotFound of FindDeclFailureReason + + /// Indicates a declaration location was found + | DeclFound of location: range + + /// Indicates an external declaration was found + | ExternalDecl of assembly: string * externalSym : FindDeclExternalSymbol + diff --git a/src/fsharp/service/FSharpCheckerResults.fs b/src/fsharp/service/FSharpCheckerResults.fs index e862f4abc0f..ecfbcedfb39 100644 --- a/src/fsharp/service/FSharpCheckerResults.fs +++ b/src/fsharp/service/FSharpCheckerResults.fs @@ -3,51 +3,200 @@ // Open up the compiler as an incremental service for parsing, // type checking and intellisense-like environment-reporting. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.CodeAnalysis open System open System.Diagnostics open System.IO open System.Reflection open System.Threading - +open FSharp.Compiler.IO +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Core.Printf -open FSharp.Compiler +open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.CheckExpressions open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerDiagnostics open FSharp.Compiler.CompilerImports -open FSharp.Compiler.CompilerOptions +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.EditorServices +open FSharp.Compiler.EditorServices.DeclarationListHelpers open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features open FSharp.Compiler.Infos open FSharp.Compiler.InfoReader -open FSharp.Compiler.Layout open FSharp.Compiler.Lexhelp -open FSharp.Compiler.Lib open FSharp.Compiler.NameResolution -open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.OptimizeInputs open FSharp.Compiler.Parser open FSharp.Compiler.ParseAndCheckInputs open FSharp.Compiler.ParseHelpers -open FSharp.Compiler.OptimizeInputs -open FSharp.Compiler.Range open FSharp.Compiler.ScriptClosure +open FSharp.Compiler.Symbols +open FSharp.Compiler.Symbols.SymbolHelpers +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Layout +open FSharp.Compiler.Text.Position +open FSharp.Compiler.Text.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Text -open FSharp.Compiler.SourceCodeServices.SymbolHelpers +open FSharp.Compiler.AbstractIL +open System.Reflection.PortableExecutable +open FSharp.Compiler.BuildGraph open Internal.Utilities open Internal.Utilities.Collections +open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.ILBinaryReader +type FSharpUnresolvedReferencesSet = FSharpUnresolvedReferencesSet of UnresolvedAssemblyReference list + +[] +type internal DelayedILModuleReader = + + val private name : string + val private gate : obj + val mutable private getStream : (CancellationToken -> Stream option) + val mutable private result : ILModuleReader + + new (name, getStream) = { name = name; gate = obj(); getStream = getStream; result = Unchecked.defaultof<_> } + + member this.TryGetILModuleReader() = + // fast path + match box this.result with + | null -> + cancellable { + let! ct = Cancellable.token() + return + lock this.gate (fun () -> + // see if we have a result or not after the lock so we do not evaluate the stream more than once + match box this.result with + | null -> + try + let streamOpt = this.getStream ct + match streamOpt with + | Some stream -> + let ilReaderOptions: ILReaderOptions = + { + pdbDirPath = None + reduceMemoryUsage = ReduceMemoryFlag.Yes + metadataOnly = MetadataOnlyFlag.Yes + tryGetMetadataSnapshot = fun _ -> None + } + let ilReader = ILBinaryReader.OpenILModuleReaderFromStream this.name stream ilReaderOptions + this.result <- ilReader + this.getStream <- Unchecked.defaultof<_> // clear out the function so we do not hold onto anything + Some ilReader + | _ -> + None + with + | ex -> + Trace.TraceInformation("FCS: Unable to get an ILModuleReader: {0}", ex) + None + | _ -> + Some this.result + ) + } + | _ -> + Cancellable.ret (Some this.result) + + +[] +type FSharpReferencedProject = + | FSharpReference of projectFileName: string * options: FSharpProjectOptions + | PEReference of projectFileName: string * stamp: DateTime * delayedReader: DelayedILModuleReader + | ILModuleReference of projectFileName: string * getStamp: (unit -> DateTime) * getReader: (unit -> ILModuleReader) + + member this.FileName = + match this with + | FSharpReference(projectFileName=projectFileName) + | PEReference(projectFileName=projectFileName) + | ILModuleReference(projectFileName=projectFileName) -> projectFileName + + static member CreateFSharp(projectFileName, options) = + FSharpReference(projectFileName, options) + + static member CreatePortableExecutable(projectFileName, stamp, getStream) = + PEReference(projectFileName, stamp, DelayedILModuleReader(projectFileName, getStream)) + + static member CreateFromILModuleReader(projectFileName, getStamp, getReader) = + ILModuleReference(projectFileName, getStamp, getReader) + + override this.Equals(o) = + match o with + | :? FSharpReferencedProject as o -> + match this, o with + | FSharpReference(projectFileName1, options1), FSharpReference(projectFileName2, options2) -> + projectFileName1 = projectFileName2 && options1 = options2 + | PEReference(projectFileName1, stamp1, _), PEReference(projectFileName2, stamp2, _) -> + projectFileName1 = projectFileName2 && stamp1 = stamp2 + | ILModuleReference(projectFileName1, getStamp1, _), ILModuleReference(projectFileName2, getStamp2, _) -> + projectFileName1 = projectFileName2 && (getStamp1()) = (getStamp2()) + | _ -> + false + | _ -> + false + + override this.GetHashCode() = this.FileName.GetHashCode() + +// NOTE: may be better just to move to optional arguments here +and FSharpProjectOptions = + { + ProjectFileName: string + ProjectId: string option + SourceFiles: string[] + OtherOptions: string[] + ReferencedProjects: FSharpReferencedProject[] + IsIncompleteTypeCheckEnvironment : bool + UseScriptResolutionRules : bool + LoadTime : System.DateTime + UnresolvedReferences : FSharpUnresolvedReferencesSet option + OriginalLoadReferences: (range * string * string) list + Stamp : int64 option + } + + static member UseSameProject(options1,options2) = + match options1.ProjectId, options2.ProjectId with + | Some(projectId1), Some(projectId2) when not (String.IsNullOrWhiteSpace(projectId1)) && not (String.IsNullOrWhiteSpace(projectId2)) -> + projectId1 = projectId2 + | Some(_), Some(_) + | None, None -> options1.ProjectFileName = options2.ProjectFileName + | _ -> false + + static member AreSameForChecking(options1,options2) = + match options1.Stamp, options2.Stamp with + | Some x, Some y -> (x = y) + | _ -> + FSharpProjectOptions.UseSameProject(options1, options2) && + options1.SourceFiles = options2.SourceFiles && + options1.OtherOptions = options2.OtherOptions && + options1.UnresolvedReferences = options2.UnresolvedReferences && + options1.OriginalLoadReferences = options2.OriginalLoadReferences && + options1.ReferencedProjects.Length = options2.ReferencedProjects.Length && + (options1.ReferencedProjects, options2.ReferencedProjects) + ||> Array.forall2 (fun r1 r2 -> + match r1, r2 with + | FSharpReferencedProject.FSharpReference(n1,a), FSharpReferencedProject.FSharpReference(n2,b) -> + n1 = n2 && FSharpProjectOptions.AreSameForChecking(a,b) + | FSharpReferencedProject.PEReference(n1, stamp1, _), FSharpReferencedProject.PEReference(n2, stamp2, _) -> + n1 = n2 && stamp1 = stamp2 + | _ -> + false) && + options1.LoadTime = options2.LoadTime + + member po.ProjectDirectory = System.IO.Path.GetDirectoryName(po.ProjectFileName) + + override this.ToString() = "FSharpProjectOptions(" + this.ProjectFileName + ")" + [] module internal FSharpCheckerResultsSettings = @@ -55,54 +204,79 @@ module internal FSharpCheckerResultsSettings = let maxTypeCheckErrorsOutOfProjectContext = GetEnvInteger "FCS_MaxErrorsOutOfProjectContext" 3 - /// Maximum time share for a piece of background work before it should (cooperatively) yield - /// to enable other requests to be serviced. Yielding means returning a continuation function - /// (via an Eventually<_> value of case NotYetDone) that can be called as the next piece of work. - let maxTimeShareMilliseconds = - match System.Environment.GetEnvironmentVariable("FCS_MaxTimeShare") with - | null | "" -> 100L - | s -> int64 s - // Look for DLLs in the location of the service DLL first. let defaultFSharpBinariesDir = FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(Some(Path.GetDirectoryName(typeof.Assembly.Location))).Value -[] -type FSharpFindDeclFailureReason = +[] +type FSharpSymbolUse(g:TcGlobals, denv: DisplayEnv, symbol:FSharpSymbol, itemOcc, range: range) = - // generic reason: no particular information about error - | Unknown of message: string + member _.Symbol = symbol - // source code file is not available - | NoSourceCode + member _.DisplayContext = FSharpDisplayContext(fun _ -> denv) - // trying to find declaration of ProvidedType without TypeProviderDefinitionLocationAttribute - | ProvidedType of string + member x.IsDefinition = x.IsFromDefinition - // trying to find declaration of ProvidedMember without TypeProviderDefinitionLocationAttribute - | ProvidedMember of string + member _.IsFromDefinition = itemOcc = ItemOccurence.Binding -[] -type FSharpFindDeclResult = + member _.IsFromPattern = itemOcc = ItemOccurence.Pattern - /// declaration not found + reason - | DeclNotFound of FSharpFindDeclFailureReason + member _.IsFromType = itemOcc = ItemOccurence.UseInType - /// found declaration - | DeclFound of range + member _.IsFromAttribute = itemOcc = ItemOccurence.UseInAttribute - /// Indicates an external declaration was found - | ExternalDecl of assembly : string * externalSym : ExternalSymbol + member _.IsFromDispatchSlotImplementation = itemOcc = ItemOccurence.Implemented + + member _.IsFromComputationExpression = + match symbol.Item, itemOcc with + // 'seq' in 'seq { ... }' gets colored as keywords + | (Item.Value vref), ItemOccurence.Use when valRefEq g g.seq_vref vref -> true + // custom builders, custom operations get colored as keywords + | (Item.CustomBuilder _ | Item.CustomOperation _), ItemOccurence.Use -> true + | _ -> false + + member _.IsFromOpenStatement = itemOcc = ItemOccurence.Open + + member _.FileName = range.FileName + + member _.Range = range + + member this.IsPrivateToFile = + let isPrivate = + match this.Symbol with + | :? FSharpMemberOrFunctionOrValue as m -> not m.IsModuleValueOrMember || m.Accessibility.IsPrivate + | :? FSharpEntity as m -> m.Accessibility.IsPrivate + | :? FSharpGenericParameter -> true + | :? FSharpUnionCase as m -> m.Accessibility.IsPrivate + | :? FSharpField as m -> m.Accessibility.IsPrivate + | _ -> false + + let declarationLocation = + match this.Symbol.SignatureLocation with + | Some x -> Some x + | _ -> + match this.Symbol.DeclarationLocation with + | Some x -> Some x + | _ -> this.Symbol.ImplementationLocation + + let declaredInTheFile = + match declarationLocation with + | Some declRange -> declRange.FileName = this.Range.FileName + | _ -> false + + isPrivate && declaredInTheFile + + override _.ToString() = sprintf "%O, %O, %O" symbol itemOcc range /// This type is used to describe what was found during the name resolution. /// (Depending on the kind of the items, we may stop processing or continue to find better items) [] -type internal NameResResult = +type NameResResult = | Members of (ItemWithInst list * DisplayEnv * range) | Cancel of DisplayEnv * range | Empty [] -type ResolveOverloads = +type ResolveOverloads = | Yes | No @@ -113,8 +287,8 @@ type GetPreciseCompletionListFromExprTypingsResult = | None | Some of (ItemWithInst list * DisplayEnv * range) * TType -type Names = string list - +type Names = string list + /// A TypeCheckInfo represents everything we get back from the typecheck of a file. /// It acts like an in-memory database about the file. /// It is effectively immutable and not updated: when we re-typecheck we just drop the previous @@ -131,102 +305,103 @@ type internal TypeCheckInfo tcAccessRights: AccessorDomain, projectFileName: string, mainInputFileName: string, + projectOptions: FSharpProjectOptions, sResolutions: TcResolutions, sSymbolUses: TcSymbolUses, // This is a name resolution environment to use if no better match can be found. sFallback: NameResolutionEnv, loadClosure : LoadClosure option, implFileOpt: TypedImplFile option, - openDeclarations: OpenDeclaration[]) = + openDeclarations: OpenDeclaration[]) = // These strings are potentially large and the editor may choose to hold them for a while. - // Use this cache to fold together data tip text results that are the same. - // Is not keyed on 'Names' collection because this is invariant for the current position in + // Use this cache to fold together data tip text results that are the same. + // Is not keyed on 'Names' collection because this is invariant for the current position in // this unchanged file. Keyed on lineStr though to prevent a change to the currently line // being available against a stale scope. - let getToolTipTextCache = AgedLookup>(getToolTipTextSize,areSimilar=(fun (x,y) -> x = y)) - + let getToolTipTextCache = AgedLookup(getToolTipTextSize,areSimilar=(fun (x,y) -> x = y)) + let amap = tcImports.GetImportMap() let infoReader = InfoReader(g,amap) let ncenv = NameResolver(g,amap,infoReader,NameResolution.FakeInstantiationGenerator) let cenv = SymbolEnv(g, thisCcu, Some ccuSigForFile, tcImports, amap, infoReader) - + /// Find the most precise naming environment for the given line and column let GetBestEnvForPos cursorPos = - + let mutable bestSoFar = None // Find the most deeply nested enclosing scope that contains given position - sResolutions.CapturedEnvs |> ResizeArray.iter (fun (possm,env,ad) -> + sResolutions.CapturedEnvs |> ResizeArray.iter (fun (possm,env,ad) -> if rangeContainsPos possm cursorPos then - match bestSoFar with - | Some (bestm,_,_) -> - if rangeContainsRange bestm possm then + match bestSoFar with + | Some (bestm,_,_) -> + if rangeContainsRange bestm possm then bestSoFar <- Some (possm,env,ad) - | None -> + | None -> bestSoFar <- Some (possm,env,ad)) - let mostDeeplyNestedEnclosingScope = bestSoFar - - // Look for better subtrees on the r.h.s. of the subtree to the left of where we are - // Should really go all the way down the r.h.s. of the subtree to the left of where we are - // This is all needed when the index is floating free in the area just after the environment we really want to capture - // We guarantee to only refine to a more nested environment. It may not be strictly - // the right environment, but will always be at least as rich + let mostDeeplyNestedEnclosingScope = bestSoFar + + // Look for better subtrees on the r.h.s. of the subtree to the left of where we are + // Should really go all the way down the r.h.s. of the subtree to the left of where we are + // This is all needed when the index is floating free in the area just after the environment we really want to capture + // We guarantee to only refine to a more nested environment. It may not be strictly + // the right environment, but will always be at least as rich - let mutable bestAlmostIncludedSoFar = None + let mutable bestAlmostIncludedSoFar = None - sResolutions.CapturedEnvs |> ResizeArray.iter (fun (possm,env,ad) -> + sResolutions.CapturedEnvs |> ResizeArray.iter (fun (possm,env,ad) -> // take only ranges that strictly do not include cursorPos (all ranges that touch cursorPos were processed during 'Strict Inclusion' part) - if rangeBeforePos possm cursorPos && not (posEq possm.End cursorPos) then - let contained = - match mostDeeplyNestedEnclosingScope with - | Some (bestm,_,_) -> rangeContainsRange bestm possm - | None -> true - - if contained then - match bestAlmostIncludedSoFar with - | Some (rightm:range,_,_) -> - if posGt possm.End rightm.End || + if rangeBeforePos possm cursorPos && not (posEq possm.End cursorPos) then + let contained = + match mostDeeplyNestedEnclosingScope with + | Some (bestm,_,_) -> rangeContainsRange bestm possm + | None -> true + + if contained then + match bestAlmostIncludedSoFar with + | Some (rightm:range,_,_) -> + if posGt possm.End rightm.End || (posEq possm.End rightm.End && posGt possm.Start rightm.Start) then bestAlmostIncludedSoFar <- Some (possm,env,ad) | _ -> bestAlmostIncludedSoFar <- Some (possm,env,ad)) - - let resEnv = - match bestAlmostIncludedSoFar, mostDeeplyNestedEnclosingScope with + + let resEnv = + match bestAlmostIncludedSoFar, mostDeeplyNestedEnclosingScope with | Some (_,env,ad), None -> env, ad - | Some (_,almostIncludedEnv,ad), Some (_,mostDeeplyNestedEnv,_) - when almostIncludedEnv.eFieldLabels.Count >= mostDeeplyNestedEnv.eFieldLabels.Count -> + | Some (_,almostIncludedEnv,ad), Some (_,mostDeeplyNestedEnv,_) + when almostIncludedEnv.eFieldLabels.Count >= mostDeeplyNestedEnv.eFieldLabels.Count -> almostIncludedEnv,ad - | _ -> - match mostDeeplyNestedEnclosingScope with - | Some (_,env,ad) -> + | _ -> + match mostDeeplyNestedEnclosingScope with + | Some (_,env,ad) -> env,ad - | None -> + | None -> sFallback,AccessibleFromSomeFSharpCode - let pm = mkRange mainInputFileName cursorPos cursorPos + let pm = mkRange mainInputFileName cursorPos cursorPos resEnv,pm /// The items that come back from ResolveCompletionsInType are a bit /// noisy. Filter a few things out. /// - /// e.g. prefer types to constructors for FSharpToolTipText + /// e.g. prefer types to constructors for ToolTipText let FilterItemsForCtors filterCtors (items: ItemWithInst list) = - let items = items |> List.filter (fun item -> match item.Item with (Item.CtorGroup _) when filterCtors = ResolveTypeNamesToTypeRefs -> false | _ -> true) + let items = items |> List.filter (fun item -> match item.Item with (Item.CtorGroup _) when filterCtors = ResolveTypeNamesToTypeRefs -> false | _ -> true) items - + // Filter items to show only valid & return Some if there are any let ReturnItemsOfType (items: ItemWithInst list) g denv (m:range) filterCtors = - let items = - items + let items = + items |> RemoveDuplicateItems g |> RemoveExplicitlySuppressed g |> FilterItemsForCtors filterCtors if not (isNil items) then - NameResResult.Members (items, denv, m) - else + NameResResult.Members (items, denv, m) + else NameResResult.Empty let GetCapturedNameResolutions (endOfNamesPos: pos) resolveOverloads = @@ -235,9 +410,9 @@ type internal TypeCheckInfo let range = cnr.Range range.EndLine = endPos.Line && range.EndColumn = endPos.Column) - match resolveOverloads with + match resolveOverloads with | ResolveOverloads.Yes -> - filter endOfNamesPos sResolutions.CapturedNameResolutions + filter endOfNamesPos sResolutions.CapturedNameResolutions | ResolveOverloads.No -> let items = filter endOfNamesPos sResolutions.CapturedMethodGroupResolutions @@ -247,40 +422,40 @@ type internal TypeCheckInfo filter endOfNamesPos sResolutions.CapturedNameResolutions /// Looks at the exact name resolutions that occurred during type checking - /// If 'membersByResidue' is specified, we look for members of the item obtained + /// If 'membersByResidue' is specified, we look for members of the item obtained /// from the name resolution and filter them by the specified residue (?) - let GetPreciseItemsFromNameResolution(line, colAtEndOfNames, membersByResidue, filterCtors, resolveOverloads) = + let GetPreciseItemsFromNameResolution(line, colAtEndOfNames, membersByResidue, filterCtors, resolveOverloads) = let endOfNamesPos = mkPos line colAtEndOfNames // Logic below expects the list to be in reverse order of resolution let cnrs = GetCapturedNameResolutions endOfNamesPos resolveOverloads |> ResizeArray.toList |> List.rev - match cnrs, membersByResidue with - + match cnrs, membersByResidue with + // If we're looking for members using a residue, we'd expect only // a single item (pick the first one) and we need the residue (which may be "") - | CNR(Item.Types(_,(ty::_)), _, denv, nenv, ad, m)::_, Some _ -> - let items = ResolveCompletionsInType ncenv nenv (ResolveCompletionTargets.All(ConstraintSolver.IsApplicableMethApprox g amap m)) m ad true ty + | CNR(Item.Types(_,(ty::_)), _, denv, nenv, ad, m)::_, Some _ -> + let items = ResolveCompletionsInType ncenv nenv (ResolveCompletionTargets.All(ConstraintSolver.IsApplicableMethApprox g amap m)) m ad true ty let items = List.map ItemWithNoInst items ReturnItemsOfType items g denv m filterCtors - + // Value reference from the name resolution. Primarily to disallow "let x.$ = 1" // In most of the cases, value references can be obtained from expression typings or from environment, // so we wouldn't have to handle values here. However, if we have something like: // let varA = "string" // let varA = if b then 0 else varA. // then the expression typings get confused (thinking 'varA:int'), so we use name resolution even for usual values. - + | CNR(Item.Value(vref), occurence, denv, nenv, ad, m)::_, Some _ -> - if occurence = ItemOccurence.Binding || occurence = ItemOccurence.Pattern then + if occurence = ItemOccurence.Binding || occurence = ItemOccurence.Pattern then // Return empty list to stop further lookup - for value declarations NameResResult.Cancel(denv, m) - else + else // If we have any valid items for the value, then return completions for its type now. // Adjust the type in case this is the 'this' pointer stored in a reference cell. - let ty = StripSelfRefCell(g, vref.BaseOrThisInfo, vref.TauType) + let ty = StripSelfRefCell(g, vref.BaseOrThisInfo, vref.TauType) // patch accessibility domain to remove protected members if accessing NormalVal - let ad = + let ad = match vref.BaseOrThisInfo, ad with | ValBaseOrThisInfo.NormalVal, AccessibleFrom(paths, Some tcref) -> let tcref = generalizedTyconRef tcref @@ -296,34 +471,34 @@ type internal TypeCheckInfo let items = ResolveCompletionsInType ncenv nenv (ResolveCompletionTargets.All(ConstraintSolver.IsApplicableMethApprox g amap m)) m ad false ty let items = List.map ItemWithNoInst items ReturnItemsOfType items g denv m filterCtors - + // No residue, so the items are the full resolution of the name - | CNR(_, _, denv, _, _, m) :: _, None -> - let items = - cnrs + | CNR(_, _, denv, _, _, m) :: _, None -> + let items = + cnrs |> List.map (fun cnr -> cnr.ItemWithInst) - // "into" is special magic syntax, not an identifier or a library call. It is part of capturedNameResolutions as an + // "into" is special magic syntax, not an identifier or a library call. It is part of capturedNameResolutions as an // implementation detail of syntax coloring, but we should not report name resolution results for it, to prevent spurious QuickInfo. - |> List.filter (fun item -> match item.Item with Item.CustomOperation(CustomOperations.Into,_,_) -> false | _ -> true) + |> List.filter (fun item -> match item.Item with Item.CustomOperation(CustomOperations.Into,_,_) -> false | _ -> true) ReturnItemsOfType items g denv m filterCtors | _, _ -> NameResResult.Empty - - let TryGetTypeFromNameResolution(line, colAtEndOfNames, membersByResidue, resolveOverloads) = + + let TryGetTypeFromNameResolution(line, colAtEndOfNames, membersByResidue, resolveOverloads) = let endOfNamesPos = mkPos line colAtEndOfNames let items = GetCapturedNameResolutions endOfNamesPos resolveOverloads |> ResizeArray.toList |> List.rev - - match items, membersByResidue with + + match items, membersByResidue with | CNR(Item.Types(_,(ty::_)),_,_,_,_,_)::_, Some _ -> Some ty | CNR(Item.Value(vref), occurence,_,_,_,_)::_, Some _ -> if (occurence = ItemOccurence.Binding || occurence = ItemOccurence.Pattern) then None else Some (StripSelfRefCell(g, vref.BaseOrThisInfo, vref.TauType)) | _, _ -> None - let CollectParameters (methods: MethInfo list) amap m: Item list = + let CollectParameters (methods: MethInfo list) amap m: Item list = methods |> List.collect (fun meth -> match meth.GetParamDatas(amap, m, meth.FormalMethodInst) with - | x::_ -> x |> List.choose(fun (ParamData(_isParamArray, _isInArg, _isOutArg, _optArgInfo, _callerInfo, name, _, ty)) -> + | x::_ -> x |> List.choose(fun (ParamData(_isParamArray, _isInArg, _isOutArg, _optArgInfo, _callerInfo, name, _, ty)) -> match name with | Some n -> Some (Item.ArgName(n, ty, Some (ArgumentContainer.Method meth))) | None -> None @@ -341,7 +516,7 @@ type internal TypeCheckInfo let items = props @ parameters Some (denv, m, items) | CNR(Item.MethodGroup(_, methods, _), _, denv, nenv, ad, m) ::_ -> - let props = + let props = methods |> List.collect (fun meth -> let retTy = meth.GetFSharpReturnTy(amap, m, meth.FormalMethodInst) @@ -350,25 +525,25 @@ type internal TypeCheckInfo let parameters = CollectParameters methods amap m let items = props @ parameters Some (denv, m, items) - | _ -> + | _ -> None match result with - | None -> + | None -> NameResResult.Empty - | Some (denv, m, items) -> + | Some (denv, m, items) -> let items = List.map ItemWithNoInst items ReturnItemsOfType items g denv m TypeNameResolutionFlag.ResolveTypeNamesToTypeRefs - + /// finds captured typing for the given position - let GetExprTypingForPosition(endOfExprPos) = - let quals = - sResolutions.CapturedExpressionTypings - |> Seq.filter (fun (ty,nenv,_,m) -> + let GetExprTypingForPosition(endOfExprPos) = + let quals = + sResolutions.CapturedExpressionTypings + |> Seq.filter (fun (ty,nenv,_,m) -> // We only want expression types that end at the particular position in the file we are looking at. posEq m.End endOfExprPos && // Get rid of function types. True, given a 2-arg curried function "f x y", it is legal to do "(f x).GetType()", - // but you almost never want to do this in practice, and we choose not to offer up any intellisense for + // but you almost never want to do this in practice, and we choose not to offer up any intellisense for // F# function types. not (isFunTy nenv.DisplayEnv.g ty)) |> Seq.toArray @@ -376,21 +551,21 @@ type internal TypeCheckInfo let thereWereSomeQuals = not (Array.isEmpty quals) // filter out errors - let quals = quals + let quals = quals |> Array.filter (fun (ty,nenv,_,_) -> let denv = nenv.DisplayEnv not (isTyparTy denv.g ty && (destTyparTy denv.g ty).IsFromError)) thereWereSomeQuals, quals - + /// obtains captured typing for the given position /// if type of captured typing is record - returns list of record fields - let GetRecdFieldsForExpr(r : range) = + let GetRecdFieldsForExpr(r : range) = let _, quals = GetExprTypingForPosition(r.End) - let bestQual = + let bestQual = match quals with | [||] -> None - | quals -> - quals |> Array.tryFind (fun (_,_,_,rq) -> + | quals -> + quals |> Array.tryFind (fun (_,_,_,rq) -> ignore(r) // for breakpoint posEq r.Start rq.Start) match bestQual with @@ -399,103 +574,101 @@ type internal TypeCheckInfo Some (items, nenv.DisplayEnv, m) | _ -> None - /// Looks at the exact expression types at the position to the left of the + /// Looks at the exact expression types at the position to the left of the /// residue then the source when it was typechecked. - let GetPreciseCompletionListFromExprTypings(parseResults:FSharpParseFileResults, endOfExprPos, filterCtors) = - + let GetPreciseCompletionListFromExprTypings(parseResults:FSharpParseFileResults, endOfExprPos, filterCtors) = + let thereWereSomeQuals, quals = GetExprTypingForPosition(endOfExprPos) match quals with - | [| |] -> + | [| |] -> if thereWereSomeQuals then - GetPreciseCompletionListFromExprTypingsResult.NoneBecauseThereWereTypeErrors + GetPreciseCompletionListFromExprTypingsResult.NoneBecauseThereWereTypeErrors else GetPreciseCompletionListFromExprTypingsResult.None | _ -> - let bestQual, textChanged = - match parseResults.ParseTree with - | Some(input) -> - match UntypedParseImpl.GetRangeOfExprLeftOfDot(endOfExprPos,Some(input)) with // TODO we say "colAtEndOfNames" everywhere, but that's not really a good name ("foo . $" hit Ctrl-Space at $) - | Some( exprRange) -> - // We have an up-to-date sync parse, and know the exact range of the prior expression. - // The quals all already have the same ending position, so find one with a matching starting position, if it exists. - // If not, then the stale typecheck info does not have a capturedExpressionTyping for this exact expression, and the - // user can wait for typechecking to catch up and second-chance intellisense to give the right result. - let qual = - quals |> Array.tryFind (fun (_,_,_,r) -> - ignore(r) // for breakpoint - posEq exprRange.Start r.Start) - qual, false - | None -> - // TODO In theory I think we should never get to this code path; it would be nice to add an assert. - // In practice, we do get here in some weird cases like "2.0 .. 3.0" and hitting Ctrl-Space in between the two dots of the range operator. - // I wasn't able to track down what was happening in those weird cases, not worth worrying about, it doesn't manifest as a product bug or anything. - None, false - | _ -> None, false + let bestQual, textChanged = + let input = parseResults.ParseTree + match ParsedInput.GetRangeOfExprLeftOfDot(endOfExprPos,input) with // TODO we say "colAtEndOfNames" everywhere, but that's not really a good name ("foo . $" hit Ctrl-Space at $) + | Some( exprRange) -> + // We have an up-to-date sync parse, and know the exact range of the prior expression. + // The quals all already have the same ending position, so find one with a matching starting position, if it exists. + // If not, then the stale typecheck info does not have a capturedExpressionTyping for this exact expression, and the + // user can wait for typechecking to catch up and second-chance intellisense to give the right result. + let qual = + quals |> Array.tryFind (fun (_,_,_,r) -> + ignore(r) // for breakpoint + posEq exprRange.Start r.Start) + qual, false + | None -> + // TODO In theory I think we should never get to this code path; it would be nice to add an assert. + // In practice, we do get here in some weird cases like "2.0 .. 3.0" and hitting Ctrl-Space in between the two dots of the range operator. + // I wasn't able to track down what was happening in those weird cases, not worth worrying about, it doesn't manifest as a product bug or anything. + None, false match bestQual with | Some bestQual -> - let (ty,nenv,ad,m) = bestQual - let items = ResolveCompletionsInType ncenv nenv (ResolveCompletionTargets.All(ConstraintSolver.IsApplicableMethApprox g amap m)) m ad false ty + let (ty,nenv,ad,m) = bestQual + let items = ResolveCompletionsInType ncenv nenv (ResolveCompletionTargets.All(ConstraintSolver.IsApplicableMethApprox g amap m)) m ad false ty let items = items |> List.map ItemWithNoInst let items = items |> RemoveDuplicateItems g let items = items |> RemoveExplicitlySuppressed g - let items = items |> FilterItemsForCtors filterCtors + let items = items |> FilterItemsForCtors filterCtors GetPreciseCompletionListFromExprTypingsResult.Some((items,nenv.DisplayEnv,m), ty) - | None -> + | None -> if textChanged then GetPreciseCompletionListFromExprTypingsResult.NoneBecauseTypecheckIsStaleAndTextChanged else GetPreciseCompletionListFromExprTypingsResult.None /// Find items in the best naming environment. - let GetEnvironmentLookupResolutions(nenv, ad, m, plid, filterCtors, showObsolete) = + let GetEnvironmentLookupResolutions(nenv, ad, m, plid, filterCtors, showObsolete) = let items = NameResolution.ResolvePartialLongIdent ncenv nenv (ConstraintSolver.IsApplicableMethApprox g amap m) m ad plid showObsolete let items = items |> List.map ItemWithNoInst - let items = items |> RemoveDuplicateItems g + let items = items |> RemoveDuplicateItems g let items = items |> RemoveExplicitlySuppressed g - let items = items |> FilterItemsForCtors filterCtors + let items = items |> FilterItemsForCtors filterCtors (items, nenv.DisplayEnv, m) /// Find items in the best naming environment. - let GetEnvironmentLookupResolutionsAtPosition(cursorPos, plid, filterCtors, showObsolete) = + let GetEnvironmentLookupResolutionsAtPosition(cursorPos, plid, filterCtors, showObsolete) = let (nenv,ad),m = GetBestEnvForPos cursorPos GetEnvironmentLookupResolutions(nenv, ad, m, plid, filterCtors, showObsolete) /// Find record fields in the best naming environment. - let GetClassOrRecordFieldsEnvironmentLookupResolutions(cursorPos, plid) = + let GetClassOrRecordFieldsEnvironmentLookupResolutions(cursorPos, plid) = let (nenv, ad),m = GetBestEnvForPos cursorPos let items = NameResolution.ResolvePartialLongIdentToClassOrRecdFields ncenv nenv m ad plid false let items = items |> List.map ItemWithNoInst - let items = items |> RemoveDuplicateItems g + let items = items |> RemoveDuplicateItems g let items = items |> RemoveExplicitlySuppressed g - items, nenv.DisplayEnv, m + items, nenv.DisplayEnv, m /// Resolve a location and/or text to items. // Three techniques are used // - look for an exact known name resolution from type checking - // - use the known type of an expression, e.g. (expr).Name, to generate an item list + // - use the known type of an expression, e.g. (expr).Name, to generate an item list // - lookup an entire name in the name resolution environment, e.g. A.B.Name, to generate an item list // // The overall aim is to resolve as accurately as possible based on what we know from type inference - + let GetBaseClassCandidates = function | Item.ModuleOrNamespaces _ -> true | Item.Types(_, ty::_) when (isClassTy g ty) && not (isSealedTy g ty) -> true - | _ -> false + | _ -> false let GetInterfaceCandidates = function | Item.ModuleOrNamespaces _ -> true | Item.Types(_, ty::_) when (isInterfaceTy g ty) -> true - | _ -> false + | _ -> false // Return only items with the specified name - let FilterDeclItemsByResidue (getItem: 'a -> Item) residue (items: 'a list) = + let FilterDeclItemsByResidue (getItem: 'a -> Item) residue (items: 'a list) = let attributedResidue = residue + "Attribute" let nameMatchesResidue name = (residue = name) || (attributedResidue = name) - items |> List.filter (fun x -> + items |> List.filter (fun x -> let item = getItem x - let n1 = item.DisplayName + let n1 = item.DisplayName match item with | Item.Types _ -> nameMatchesResidue n1 | Item.CtorGroup (_, meths) -> @@ -503,57 +676,57 @@ type internal TypeCheckInfo meths |> List.exists (fun meth -> let tcref = meth.ApparentEnclosingTyconRef #if !NO_EXTENSIONTYPING - tcref.IsProvided || + tcref.IsProvided || #endif nameMatchesResidue tcref.DisplayName) | _ -> residue = n1) - + /// Post-filter items to make sure they have precisely the right name - /// This also checks that there are some remaining results + /// This also checks that there are some remaining results /// exactMatchResidueOpt = Some _ -- means that we are looking for exact matches let FilterRelevantItemsBy (getItem: 'a -> Item) (exactMatchResidueOpt : _ option) check (items: 'a list, denv, m) = // can throw if type is in located in non-resolved CCU: i.e. bigint if reference to System.Numerics is absent let inline safeCheck item = try check item with _ -> false - + // Are we looking for items with precisely the given name? - if isNil items then + if isNil items then // When (items = []) we must returns Some([],..) and not None // because this value is used if we want to stop further processing (e.g. let x.$ = ...) Some(items, denv, m) else match exactMatchResidueOpt with | Some exactMatchResidue -> - let items = - items - |> FilterDeclItemsByResidue getItem exactMatchResidue - |> List.filter safeCheck + let items = + items + |> FilterDeclItemsByResidue getItem exactMatchResidue + |> List.filter safeCheck if not (isNil items) then Some(items, denv, m) else None | _ -> let items = items |> List.filter safeCheck - Some(items, denv, m) + Some(items, denv, m) /// Post-filter items to make sure they have precisely the right name - /// This also checks that there are some remaining results + /// This also checks that there are some remaining results let (|FilterRelevantItems|_|) getItem exactMatchResidueOpt orig = FilterRelevantItemsBy getItem exactMatchResidueOpt (fun _ -> true) orig - + /// Find the first non-whitespace position in a line prior to the given character - let FindFirstNonWhitespacePosition (lineStr: string) i = + let FindFirstNonWhitespacePosition (lineStr: string) i = if i >= lineStr.Length then None else let mutable p = i while p >= 0 && System.Char.IsWhiteSpace(lineStr.[p]) do p <- p - 1 if p >= 0 then Some p else None - + let CompletionItem (ty: ValueOption) (assemblySymbol: ValueOption) (item: ItemWithInst) = - let kind = + let kind = match item.Item with | Item.MethodGroup (_, minfo :: _, _) -> CompletionItemKind.Method minfo.IsExtensionMember | Item.RecdField _ | Item.Property _ -> CompletionItemKind.Property | Item.Event _ -> CompletionItemKind.Event - | Item.ILField _ + | Item.ILField _ | Item.Value _ -> CompletionItemKind.Field | Item.CustomOperation _ -> CompletionItemKind.CustomOperation | _ -> CompletionItemKind.Other @@ -566,41 +739,41 @@ type internal TypeCheckInfo Unresolved = match assemblySymbol with ValueSome x -> Some x.UnresolvedSymbol | _ -> None } let DefaultCompletionItem item = CompletionItem ValueNone ValueNone item - + let getItem (x: ItemWithInst) = x.Item - let GetDeclaredItems (parseResultsOpt: FSharpParseFileResults option, lineStr: string, origLongIdentOpt, colAtEndOfNamesAndResidue, residueOpt, lastDotPos, line, loc, + let GetDeclaredItems (parseResultsOpt: FSharpParseFileResults option, lineStr: string, origLongIdentOpt, colAtEndOfNamesAndResidue, residueOpt, lastDotPos, line, loc, filterCtors, resolveOverloads, isInRangeOperator, allSymbols: unit -> AssemblySymbol list) = // Are the last two chars (except whitespaces) = ".." - let isLikeRangeOp = + let isLikeRangeOp = match FindFirstNonWhitespacePosition lineStr (colAtEndOfNamesAndResidue - 1) with | Some x when x >= 1 && lineStr.[x] = '.' && lineStr.[x - 1] = '.' -> true | _ -> false // if last two chars are .. and we are not in range operator context - no completion if isLikeRangeOp && not isInRangeOperator then None else - + // Try to use the exact results of name resolution during type checking to generate the results // This is based on position (i.e. colAtEndOfNamesAndResidue). This is not used if a residueOpt is given. - let nameResItems = - match residueOpt with + let nameResItems = + match residueOpt with | None -> GetPreciseItemsFromNameResolution(line, colAtEndOfNamesAndResidue, None, filterCtors,resolveOverloads) | Some residue -> // deals with cases when we have spaces between dot and\or identifier, like A . $ // if this is our case - then we need to locate end position of the name skipping whitespaces - // this allows us to handle cases like: let x . $ = 1 + // this allows us to handle cases like: let x . $ = 1 match lastDotPos |> Option.orElseWith (fun _ -> FindFirstNonWhitespacePosition lineStr (colAtEndOfNamesAndResidue - 1)) with | Some p when lineStr.[p] = '.' -> match FindFirstNonWhitespacePosition lineStr (p - 1) with - | Some colAtEndOfNames -> + | Some colAtEndOfNames -> let colAtEndOfNames = colAtEndOfNames + 1 // convert 0-based to 1-based GetPreciseItemsFromNameResolution(line, colAtEndOfNames, Some(residue), filterCtors,resolveOverloads) | None -> NameResResult.Empty - | _ -> NameResResult.Empty - + | _ -> NameResResult.Empty + // Normalize to form A.B.C.D where D is the residue. It may be empty for "A.B.C." // residueOpt = Some when we are looking for the exact match - let plid, exactMatchResidueOpt = + let plid, exactMatchResidueOpt = match origLongIdentOpt, residueOpt with | None, _ -> [], None | Some(origLongIdent), Some _ -> origLongIdent, None @@ -620,7 +793,7 @@ type internal TypeCheckInfo match lastDotPos |> Option.orElseWith (fun _ -> FindFirstNonWhitespacePosition lineStr (colAtEndOfNamesAndResidue - 1)) with | Some p when lineStr.[p] = '.' -> match FindFirstNonWhitespacePosition lineStr (p - 1) with - | Some colAtEndOfNames -> + | Some colAtEndOfNames -> let colAtEndOfNames = colAtEndOfNames + 1 // convert 0-based to 1-based match TryGetTypeFromNameResolution(line, colAtEndOfNames, residueOpt, resolveOverloads) with | Some x -> tryTcrefOfAppTy g x @@ -628,38 +801,38 @@ type internal TypeCheckInfo | None -> ValueNone | _ -> ValueNone - match nameResItems with + match nameResItems with | NameResResult.Cancel(denv,m) -> Some([], denv, m) - | NameResResult.Members(FilterRelevantItems getItem exactMatchResidueOpt (items, denv, m)) -> + | NameResResult.Members(FilterRelevantItems getItem exactMatchResidueOpt (items, denv, m)) -> // lookup based on name resolution results successful Some (items |> List.map (CompletionItem (getType()) ValueNone), denv, m) | _ -> match origLongIdentOpt with | None -> None - | Some _ -> - + | Some _ -> + // Try to use the type of the expression on the left to help generate a completion list - let qualItems, thereIsADotInvolved = + let qualItems, thereIsADotInvolved = match parseResultsOpt with - | None -> - // Note, you will get here if the 'reason' is not CompleteWord/MemberSelect/DisplayMemberList, as those are currently the + | None -> + // Note, you will get here if the 'reason' is not CompleteWord/MemberSelect/DisplayMemberList, as those are currently the // only reasons we do a sync parse to have the most precise and likely-to-be-correct-and-up-to-date info. So for example, // if you do QuickInfo hovering over A in "f(x).A()", you will only get a tip if typechecking has a name-resolution recorded - // for A, not if merely we know the capturedExpressionTyping of f(x) and you very recently typed ".A()" - in that case, + // for A, not if merely we know the capturedExpressionTyping of f(x) and you very recently typed ".A()" - in that case, // you won't won't get a tip until the typechecking catches back up. GetPreciseCompletionListFromExprTypingsResult.None, false - | Some parseResults -> - - match UntypedParseImpl.TryFindExpressionASTLeftOfDotLeftOfCursor(mkPos line colAtEndOfNamesAndResidue,parseResults.ParseTree) with + | Some parseResults -> + + match ParsedInput.TryFindExpressionASTLeftOfDotLeftOfCursor(mkPos line colAtEndOfNamesAndResidue,parseResults.ParseTree) with | Some(pos,_) -> GetPreciseCompletionListFromExprTypings(parseResults, pos, filterCtors), true - | None -> + | None -> // Can get here in a case like: if "f xxx yyy" is legal, and we do "f xxx y" // We have no interest in expression typings, those are only useful for dot-completion. We want to fallback // to "Use an environment lookup as the last resort" below GetPreciseCompletionListFromExprTypingsResult.None, false - - match qualItems,thereIsADotInvolved with + + match qualItems,thereIsADotInvolved with | GetPreciseCompletionListFromExprTypingsResult.Some(FilterRelevantItems getItem exactMatchResidueOpt (items, denv, m), ty), _ // Initially we only use the expression typings when looking up, e.g. (expr).Nam or (expr).Name1.Nam // These come through as an empty plid and residue "". Otherwise we try an environment lookup @@ -669,10 +842,10 @@ type internal TypeCheckInfo // lookup based on expression typings successful Some (items |> List.map (CompletionItem (tryTcrefOfAppTy g ty) ValueNone), denv, m) | GetPreciseCompletionListFromExprTypingsResult.NoneBecauseThereWereTypeErrors, _ -> - // There was an error, e.g. we have "." and there is an error determining the type of + // There was an error, e.g. we have "." and there is an error determining the type of // In this case, we don't want any of the fallback logic, rather, we want to produce zero results. None - | GetPreciseCompletionListFromExprTypingsResult.NoneBecauseTypecheckIsStaleAndTextChanged, _ -> + | GetPreciseCompletionListFromExprTypingsResult.NoneBecauseTypecheckIsStaleAndTextChanged, _ -> // we want to report no result and let second-chance intellisense kick in None | _, true when isNil plid -> @@ -680,47 +853,47 @@ type internal TypeCheckInfo // The user might by typing quickly, and the LS didn't have an expression type right before the dot yet. // Second-chance intellisense will bring up the correct list in a moment. None - | _ -> + | _ -> // Use an environment lookup as the last resort let envItems, denv, m = GetEnvironmentLookupResolutions(nenv, ad, m, plid, filterCtors, residueOpt.IsSome) - + let envResult = match nameResItems, (envItems, denv, m), qualItems with - + // First, use unfiltered name resolution items, if they're not empty - | NameResResult.Members(items, denv, m), _, _ when not (isNil items) -> + | NameResResult.Members(items, denv, m), _, _ when not (isNil items) -> // lookup based on name resolution results successful - ValueSome(items |> List.map (CompletionItem (getType()) ValueNone), denv, m) - - // If we have nonempty items from environment that were resolved from a type, then use them... + ValueSome(items |> List.map (CompletionItem (getType()) ValueNone), 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 getItem exactMatchResidueOpt (items, denv, m), _ when not (isNil items) -> // lookup based on name and environment successful ValueSome(items |> List.map (CompletionItem (getType()) ValueNone), denv, m) - + // Try again with the qualItems | _, _, GetPreciseCompletionListFromExprTypingsResult.Some(FilterRelevantItems getItem exactMatchResidueOpt (items, denv, m), ty) -> ValueSome(items |> List.map (CompletionItem (tryTcrefOfAppTy g ty) ValueNone), denv, m) - + | _ -> ValueNone let globalResult = match origLongIdentOpt with | None | Some [] -> - let globalItems = - allSymbols() + let globalItems = + allSymbols() |> List.filter (fun x -> not x.Symbol.IsExplicitlySuppressed && match x.Symbol with - | :? FSharpMemberOrFunctionOrValue as m when m.IsConstructor && filterCtors = ResolveTypeNamesToTypeRefs -> false + | :? FSharpMemberOrFunctionOrValue as m when m.IsConstructor && filterCtors = ResolveTypeNamesToTypeRefs -> false | _ -> true) - + let getItem (x: AssemblySymbol) = x.Symbol.Item - + match globalItems, denv, m with | FilterRelevantItems getItem exactMatchResidueOpt (globalItemsFiltered, denv, m) when not (isNil globalItemsFiltered) -> - globalItemsFiltered + globalItemsFiltered |> List.map(fun globalItem -> CompletionItem (getType()) (ValueSome globalItem) (ItemWithNoInst globalItem.Symbol.Item)) |> fun r -> ValueSome(r, denv, m) | _ -> ValueNone @@ -737,12 +910,12 @@ type internal TypeCheckInfo items |> List.map DefaultCompletionItem, denv, m /// Get the auto-complete items at a particular location. - let GetDeclItemsForNamesAtPosition(parseResultsOpt: FSharpParseFileResults option, origLongIdentOpt: string list option, - residueOpt:string option, lastDotPos: int option, line:int, lineStr:string, colAtEndOfNamesAndResidue, filterCtors, resolveOverloads, - getAllSymbols: unit -> AssemblySymbol list) - : (CompletionItem list * DisplayEnv * CompletionContext option * range) option = + let GetDeclItemsForNamesAtPosition(parseResultsOpt: FSharpParseFileResults option, origLongIdentOpt: string list option, + residueOpt:string option, lastDotPos: int option, line:int, lineStr:string, colAtEndOfNamesAndResidue, filterCtors, resolveOverloads, + getAllSymbols: unit -> AssemblySymbol list) + : (CompletionItem list * DisplayEnv * CompletionContext option * range) option = - let loc = + let loc = match colAtEndOfNamesAndResidue with | pastEndOfLine when pastEndOfLine >= lineStr.Length -> lineStr.Length | atDot when lineStr.[atDot] = '.' -> atDot + 1 @@ -750,110 +923,110 @@ type internal TypeCheckInfo | otherwise -> otherwise - 1 // Look for a "special" completion context - let completionContext = - parseResultsOpt - |> Option.bind (fun x -> x.ParseTree) - |> Option.bind (fun parseTree -> UntypedParseImpl.TryGetCompletionContext(mkPos line colAtEndOfNamesAndResidue, parseTree, lineStr)) - + let completionContext = + parseResultsOpt + |> Option.map (fun x -> x.ParseTree) + |> Option.bind (fun parseTree -> ParsedInput.TryGetCompletionContext(mkPos line colAtEndOfNamesAndResidue, parseTree, lineStr)) + let res = match completionContext with // Invalid completion locations | Some CompletionContext.Invalid -> None - + // Completion at 'inherit C(...)" | Some (CompletionContext.Inherit(InheritanceContext.Class, (plid, _))) -> GetEnvironmentLookupResolutionsAtPosition(mkPos line loc, plid, filterCtors, false) |> FilterRelevantItemsBy getItem None (getItem >> GetBaseClassCandidates) |> Option.map toCompletionItems - + // Completion at 'interface ..." | Some (CompletionContext.Inherit(InheritanceContext.Interface, (plid, _))) -> GetEnvironmentLookupResolutionsAtPosition(mkPos line loc, plid, filterCtors, false) |> FilterRelevantItemsBy getItem None (getItem >> GetInterfaceCandidates) |> Option.map toCompletionItems - + // Completion at 'implement ..." | Some (CompletionContext.Inherit(InheritanceContext.Unknown, (plid, _))) -> - GetEnvironmentLookupResolutionsAtPosition(mkPos line loc, plid, filterCtors, false) + GetEnvironmentLookupResolutionsAtPosition(mkPos line loc, plid, filterCtors, false) |> FilterRelevantItemsBy getItem None (getItem >> (fun t -> GetBaseClassCandidates t || GetInterfaceCandidates t)) |> Option.map toCompletionItems - + // Completion at ' { XXX = ... } " | Some(CompletionContext.RecordField(RecordContext.New(plid, _))) -> // { x. } can be either record construction or computation expression. Try to get all visible record fields first match GetClassOrRecordFieldsEnvironmentLookupResolutions(mkPos line loc, plid) |> toCompletionItems with - | [],_,_ -> + | [],_,_ -> // no record fields found, return completion list as if we were outside any computation expression GetDeclaredItems (parseResultsOpt, lineStr, origLongIdentOpt, colAtEndOfNamesAndResidue, residueOpt, lastDotPos, line, loc, filterCtors,resolveOverloads, false, fun() -> []) | result -> Some(result) - + // Completion at ' { XXX = ... with ... } " - | Some(CompletionContext.RecordField(RecordContext.CopyOnUpdate(r, (plid, _)))) -> + | Some(CompletionContext.RecordField(RecordContext.CopyOnUpdate(r, (plid, _)))) -> match GetRecdFieldsForExpr(r) with - | None -> + | None -> Some (GetClassOrRecordFieldsEnvironmentLookupResolutions(mkPos line loc, plid)) |> Option.map toCompletionItems - | Some (items, denv, m) -> - Some (List.map ItemWithNoInst items, denv, m) + | Some (items, denv, m) -> + Some (List.map ItemWithNoInst items, denv, m) |> Option.map toCompletionItems - + // Completion at ' { XXX = ... with ... } " | Some(CompletionContext.RecordField(RecordContext.Constructor(typeName))) -> Some(GetClassOrRecordFieldsEnvironmentLookupResolutions(mkPos line loc, [typeName])) |> Option.map toCompletionItems - - // Completion at ' SomeMethod( ... ) ' with named arguments + + // Completion at ' SomeMethod( ... ) ' with named arguments | Some(CompletionContext.ParameterList (endPos, fields)) -> let results = GetNamedParametersAndSettableFields endPos - - let declaredItems = - GetDeclaredItems (parseResultsOpt, lineStr, origLongIdentOpt, colAtEndOfNamesAndResidue, residueOpt, lastDotPos, line, loc, filterCtors, resolveOverloads, + + let declaredItems = + GetDeclaredItems (parseResultsOpt, lineStr, origLongIdentOpt, colAtEndOfNamesAndResidue, residueOpt, lastDotPos, line, loc, filterCtors, resolveOverloads, false, getAllSymbols) - + match results with - | NameResResult.Members(items, denv, m) -> - let filtered = - items + | NameResResult.Members(items, denv, m) -> + let filtered = + items |> RemoveDuplicateItems g |> RemoveExplicitlySuppressed g |> List.filter (fun item -> not (fields.Contains item.Item.DisplayName)) - |> List.map (fun item -> + |> List.map (fun item -> { ItemWithInst = item Kind = CompletionItemKind.Argument MinorPriority = 0 IsOwnMember = false - Type = None + Type = None Unresolved = None }) match declaredItems with | None -> Some (toCompletionItems (items, denv, m)) | Some (declItems, declaredDisplayEnv, declaredRange) -> Some (filtered @ declItems, declaredDisplayEnv, declaredRange) | _ -> declaredItems - + | Some(CompletionContext.AttributeApplication) -> GetDeclaredItems (parseResultsOpt, lineStr, origLongIdentOpt, colAtEndOfNamesAndResidue, residueOpt, lastDotPos, line, loc, filterCtors, resolveOverloads, false, getAllSymbols) - |> Option.map (fun (items, denv, m) -> - items + |> Option.map (fun (items, denv, m) -> + items |> List.filter (fun cItem -> match cItem.Item with | Item.ModuleOrNamespaces _ -> true | _ when IsAttribute infoReader cItem.Item -> true | _ -> false), denv, m) - + | Some(CompletionContext.OpenDeclaration isOpenType) -> GetDeclaredItems (parseResultsOpt, lineStr, origLongIdentOpt, colAtEndOfNamesAndResidue, residueOpt, lastDotPos, line, loc, filterCtors, resolveOverloads, false, getAllSymbols) |> Option.map (fun (items, denv, m) -> - items + items |> List.filter (fun x -> match x.Item with | Item.ModuleOrNamespaces _ -> true | Item.Types _ when isOpenType -> true | _ -> false), denv, m) - + // Completion at '(x: ...)" | Some (CompletionContext.PatternType) -> GetDeclaredItems (parseResultsOpt, lineStr, origLongIdentOpt, colAtEndOfNamesAndResidue, residueOpt, lastDotPos, line, loc, filterCtors, resolveOverloads, false, getAllSymbols) |> Option.map (fun (items, denv, m) -> - items + items |> List.filter (fun cItem -> match cItem.Item with | Item.ModuleOrNamespaces _ @@ -866,9 +1039,9 @@ type internal TypeCheckInfo | cc -> match residueOpt |> Option.bind Seq.tryHead with | Some ''' -> - // The last token in + // The last token in // let x = 'E - // is Ident with text "'E", however it's either unfinished char literal or generic parameter. + // is Ident with text "'E", however it's either unfinished char literal or generic parameter. // We should not provide any completion in the former case, and we don't provide it for the latter one for now // because providing generic parameters list is context aware, which we don't have here (yet). None @@ -877,7 +1050,7 @@ type internal TypeCheckInfo GetDeclaredItems (parseResultsOpt, lineStr, origLongIdentOpt, colAtEndOfNamesAndResidue, residueOpt, lastDotPos, line, loc, filterCtors, resolveOverloads, isInRangeOperator, getAllSymbols) - + res |> Option.map (fun (items, denv, m) -> items, denv, completionContext, m) /// Return 'false' if this is not a completion item valid in an interface file. @@ -885,34 +1058,34 @@ type internal TypeCheckInfo match item with | Item.Types _ | Item.ModuleOrNamespaces _ -> true | _ -> false - + /// Find the most precise display context for the given line and column. - member __.GetBestDisplayEnvForPos cursorPos = GetBestEnvForPos cursorPos + member _.GetBestDisplayEnvForPos cursorPos = GetBestEnvForPos cursorPos - member __.GetVisibleNamespacesAndModulesAtPosition(cursorPos: pos) : ModuleOrNamespaceRef list = + member _.GetVisibleNamespacesAndModulesAtPosition(cursorPos: pos) : ModuleOrNamespaceRef list = let (nenv, ad), m = GetBestEnvForPos cursorPos NameResolution.GetVisibleNamespacesAndModulesAtPoint ncenv nenv m ad /// Determines if a long ident is resolvable at a specific point. - member __.IsRelativeNameResolvable(cursorPos: pos, plid: string list, item: Item) : bool = + member _.IsRelativeNameResolvable(cursorPos: pos, plid: string list, item: Item) : bool = ErrorScope.Protect Range.range0 (fun () -> /// Find items in the best naming environment. let (nenv, ad), m = GetBestEnvForPos cursorPos NameResolution.IsItemResolvable ncenv nenv m ad plid item) - (fun msg -> + (fun msg -> Trace.TraceInformation(sprintf "FCS: recovering from error in IsRelativeNameResolvable: '%s'" msg) false) /// Determines if a long ident is resolvable at a specific point. member scope.IsRelativeNameResolvableFromSymbol(cursorPos: pos, plid: string list, symbol: FSharpSymbol) : bool = scope.IsRelativeNameResolvable(cursorPos, plid, symbol.Item) - + /// Get the auto-complete items at a location - member __.GetDeclarations (parseResultsOpt, line, lineStr, partialName, getAllEntities) = + member _.GetDeclarations (parseResultsOpt, line, lineStr, partialName, getAllEntities) = let isInterfaceFile = SourceFileImpl.IsInterfaceFile mainInputFileName - ErrorScope.Protect Range.range0 + ErrorScope.Protect Range.range0 (fun () -> let declItemsOpt = @@ -922,25 +1095,25 @@ type internal TypeCheckInfo getAllEntities) match declItemsOpt with - | None -> FSharpDeclarationListInfo.Empty + | None -> DeclarationListInfo.Empty | Some (items, denv, ctx, m) -> let items = if isInterfaceFile then items |> List.filter (fun x -> IsValidSignatureFileItem x.Item) else items - let getAccessibility item = FSharpSymbol.GetAccessibility (FSharpSymbol.Create(cenv, item)) + let getAccessibility item = FSharpSymbol.Create(cenv, item).Accessibility let currentNamespaceOrModule = parseResultsOpt - |> Option.bind (fun x -> x.ParseTree) - |> Option.map (fun parsedInput -> UntypedParseImpl.GetFullNameOfSmallestModuleOrNamespaceAtPoint(parsedInput, mkPos line 0)) + |> Option.map (fun x -> x.ParseTree) + |> Option.map (fun parsedInput -> ParsedInput.GetFullNameOfSmallestModuleOrNamespaceAtPoint(mkPos line 0, parsedInput)) let isAttributeApplication = ctx = Some CompletionContext.AttributeApplication - FSharpDeclarationListInfo.Create(infoReader,m,denv,getAccessibility,items,currentNamespaceOrModule,isAttributeApplication)) - (fun msg -> + DeclarationListInfo.Create(infoReader,m,denv,getAccessibility,items,currentNamespaceOrModule,isAttributeApplication)) + (fun msg -> Trace.TraceInformation(sprintf "FCS: recovering from error in GetDeclarations: '%s'" msg) - FSharpDeclarationListInfo.Error msg) + DeclarationListInfo.Error msg) /// Get the symbols for auto-complete items at a location - member __.GetDeclarationListSymbols (parseResultsOpt, line, lineStr, partialName, getAllEntities) = + member _.GetDeclarationListSymbols (parseResultsOpt, line, lineStr, partialName, getAllEntities) = let isInterfaceFile = SourceFileImpl.IsInterfaceFile mainInputFileName - ErrorScope.Protect Range.range0 - (fun () -> + ErrorScope.Protect Range.range0 + (fun () -> let declItemsOpt = GetDeclItemsForNamesAtPosition(parseResultsOpt, Some partialName.QualifyingIdents, @@ -949,26 +1122,26 @@ type internal TypeCheckInfo getAllEntities) match declItemsOpt with - | None -> List.Empty - | Some (items, denv, _, m) -> + | None -> List.Empty + | Some (items, denv, _, m) -> let items = if isInterfaceFile then items |> List.filter (fun x -> IsValidSignatureFileItem x.Item) else items //do filtering like Declarationset let items = items |> RemoveExplicitlySuppressedCompletionItems g - - // Sort by name. For things with the same name, + + // Sort by name. For things with the same name, // - show types with fewer generic parameters first - // - show types before over other related items - they usually have very useful XmlDocs - let items = + // - show types before over other related items - they usually have very useful XmlDocs + let items = items |> List.sortBy (fun d -> - let n = - match d.Item with + let n = + match d.Item with | Item.Types (_,(TType_app(tcref,_) :: _)) -> 1 + tcref.TyparsNoRange.Length // Put delegate ctors after types, sorted by #typars. RemoveDuplicateItems will remove FakeInterfaceCtor and DelegateCtor if an earlier type is also reported with this name - | Item.FakeInterfaceCtor (TType_app(tcref,_)) + | Item.FakeInterfaceCtor (TType_app(tcref,_)) | Item.DelegateCtor (TType_app(tcref,_)) -> 1000 + tcref.TyparsNoRange.Length // Put type ctors after types, sorted by #typars. RemoveDuplicateItems will remove DefaultStructCtors if a type is also reported with this name - | Item.CtorGroup (_, (cinfo :: _)) -> 1000 + 10 * cinfo.DeclaringTyconRef.TyparsNoRange.Length + | Item.CtorGroup (_, (cinfo :: _)) -> 1000 + 10 * cinfo.DeclaringTyconRef.TyparsNoRange.Length | _ -> 0 (d.Item.DisplayName, n)) @@ -979,122 +1152,124 @@ type internal TypeCheckInfo // (We don't want types with the same display name to be grouped as overloads) let items = items |> List.groupBy (fun d -> - match d.Item with + match d.Item with | Item.Types (_,(TType_app(tcref,_) :: _)) | Item.ExnCase tcref -> tcref.LogicalName | Item.UnqualifiedType(tcref :: _) - | Item.FakeInterfaceCtor (TType_app(tcref,_)) + | Item.FakeInterfaceCtor (TType_app(tcref,_)) | Item.DelegateCtor (TType_app(tcref,_)) -> tcref.CompiledName | Item.CtorGroup (_, (cinfo :: _)) -> cinfo.ApparentEnclosingTyconRef.CompiledName | _ -> d.Item.DisplayName) // Filter out operators (and list) - let items = + let items = // Check whether this item looks like an operator. - let isOpItem(nm, item: CompletionItem list) = - match item |> List.map (fun x -> x.Item) with + let isOpItem(nm, item: CompletionItem list) = + match item |> List.map (fun x -> x.Item) with | [Item.Value _] | [Item.MethodGroup(_,[_],_)] -> IsOperatorName nm | [Item.UnionCase _] -> IsOperatorName nm - | _ -> false + | _ -> false let isFSharpList nm = (nm = "[]") // list shows up as a Type and a UnionCase, only such entity with a symbolic name, but want to filter out of intellisense - items |> List.filter (fun (nm,items) -> not (isOpItem(nm,items)) && not(isFSharpList nm)) + items |> List.filter (fun (nm,items) -> not (isOpItem(nm,items)) && not(isFSharpList nm)) - let items = + let items = // Filter out duplicate names - items |> List.map (fun (_nm,itemsWithSameName) -> + items |> List.map (fun (_nm,itemsWithSameName) -> match itemsWithSameName with | [] -> failwith "Unexpected empty bag" | items -> - items + items |> List.map (fun item -> let symbol = FSharpSymbol.Create(cenv, item.Item) FSharpSymbolUse(g, denv, symbol, ItemOccurence.Use, m))) //end filtering items) - (fun msg -> + (fun msg -> Trace.TraceInformation(sprintf "FCS: recovering from error in GetDeclarationListSymbols: '%s'" msg) []) - + /// Get the "reference resolution" tooltip for at a location - member __.GetReferenceResolutionStructuredToolTipText(line,col) = + member _.GetReferenceResolutionStructuredToolTipText(line,col) = let pos = mkPos line col - let isPosMatch(pos, ar:AssemblyReference) : bool = - let isRangeMatch = (Range.rangeContainsPos ar.Range pos) + let isPosMatch(pos, ar:AssemblyReference) : bool = + let isRangeMatch = (Range.rangeContainsPos ar.Range pos) let isNotSpecialRange = not (Range.equals ar.Range rangeStartup) && not (Range.equals ar.Range range0) && not (Range.equals ar.Range rangeCmdArgs) let isMatch = isRangeMatch && isNotSpecialRange - isMatch - - let dataTipOfReferences() = + isMatch + + let dataTipOfReferences() = let matches = match loadClosure with | None -> [] - | Some(loadClosure) -> + | Some(loadClosure) -> loadClosure.References |> List.collect snd |> List.filter(fun ar -> isPosMatch(pos, ar.originalReference)) - match matches with + match matches with | resolved::_ // Take the first seen - | [resolved] -> - let tip = wordL (TaggedTextOps.tagStringLiteral((resolved.prepareToolTip ()).TrimEnd([|'\n'|]))) - FSharpStructuredToolTipText.FSharpToolTipText [FSharpStructuredToolTipElement.Single(tip, FSharpXmlDoc.None)] + | [resolved] -> + let tip = wordL (TaggedText.tagStringLiteral((resolved.prepareToolTip ()).TrimEnd([|'\n'|]))) + let tip = LayoutRender.toArray tip + ToolTipText.ToolTipText [ToolTipElement.Single(tip, FSharpXmlDoc.None)] - | [] -> + | [] -> let matches = match loadClosure with | None -> None - | Some(loadClosure) -> + | Some(loadClosure) -> loadClosure.PackageReferences |> Array.tryFind (fun (m, _) -> Range.rangeContainsPos m pos) - match matches with - | None -> FSharpStructuredToolTipText.FSharpToolTipText [] - | Some (_, lines) -> + match matches with + | None -> ToolTipText.ToolTipText [] + | Some (_, lines) -> let lines = lines |> List.filter (fun line -> not (line.StartsWith("//")) && not (String.IsNullOrEmpty line)) - FSharpStructuredToolTipText.FSharpToolTipText - [ for line in lines -> - let tip = wordL (TaggedTextOps.tagStringLiteral line) - FSharpStructuredToolTipElement.Single(tip, FSharpXmlDoc.None)] - - ErrorScope.Protect Range.range0 + ToolTipText.ToolTipText + [ for line in lines -> + let tip = wordL (TaggedText.tagStringLiteral line) + let tip = LayoutRender.toArray tip + ToolTipElement.Single(tip, FSharpXmlDoc.None)] + + ErrorScope.Protect Range.range0 dataTipOfReferences - (fun err -> + (fun err -> Trace.TraceInformation(sprintf "FCS: recovering from error in GetReferenceResolutionStructuredToolTipText: '%s'" err) - FSharpToolTipText [FSharpStructuredToolTipElement.CompositionError err]) + ToolTipText [ToolTipElement.CompositionError err]) // GetToolTipText: return the "pop up" (or "Quick Info") text given a certain context. - member __.GetStructuredToolTipText(line, lineStr, colAtEndOfNames, names) = - let Compute() = - ErrorScope.Protect Range.range0 - (fun () -> + member _.GetStructuredToolTipText(line, lineStr, colAtEndOfNames, names) = + let Compute() = + ErrorScope.Protect Range.range0 + (fun () -> let declItemsOpt = GetDeclItemsForNamesAtPosition(None, Some names, None, None, line, lineStr, colAtEndOfNames, ResolveTypeNamesToCtors, ResolveOverloads.Yes, (fun() -> [])) match declItemsOpt with - | None -> FSharpToolTipText [] + | None -> ToolTipText [] | Some(items, denv, _, m) -> - FSharpToolTipText(items |> List.map (fun x -> FormatStructuredDescriptionOfItem false infoReader m denv x.ItemWithInst))) + ToolTipText(items |> List.map (fun x -> FormatStructuredDescriptionOfItem false infoReader m denv x.ItemWithInst))) - (fun err -> + (fun err -> Trace.TraceInformation(sprintf "FCS: recovering from error in GetStructuredToolTipText: '%s'" err) - FSharpToolTipText [FSharpStructuredToolTipElement.CompositionError err]) - + ToolTipText [ToolTipElement.CompositionError err]) + // See devdiv bug 646520 for rationale behind truncating and caching these quick infos (they can be big!) let key = line,colAtEndOfNames,lineStr - match getToolTipTextCache.TryGet (AnyCallerThread, key) with + match getToolTipTextCache.TryGet (AnyCallerThread, key) with | Some res -> res | None -> let res = Compute() getToolTipTextCache.Put(AnyCallerThread, key,res) res - member __.GetF1Keyword (line, lineStr, colAtEndOfNames, names) : string option = + member _.GetF1Keyword (line, lineStr, colAtEndOfNames, names) : string option = ErrorScope.Protect Range.range0 (fun () -> @@ -1103,38 +1278,38 @@ type internal TypeCheckInfo line, lineStr, colAtEndOfNames, ResolveTypeNamesToCtors, ResolveOverloads.No, (fun() -> [])) - match declItemsOpt with + match declItemsOpt with | None -> None | Some (items: CompletionItem list, _,_, _) -> match items with | [] -> None | [item] -> - GetF1Keyword g item.Item + GetF1Keyword g item.Item | _ -> // handle new Type() let allTypes, constr, ty = - List.fold + List.fold (fun (allTypes,constr,ty) (item: CompletionItem) -> match item.Item, constr, ty with | (Item.Types _) as t, _, None -> allTypes, constr, Some t | (Item.Types _), _, _ -> allTypes, constr, ty | (Item.CtorGroup _), None, _ -> allTypes, Some item.Item, ty - | _ -> false, None, None) + | _ -> false, None, None) (true,None,None) items match allTypes, constr, ty with - | true, Some (Item.CtorGroup(_, _) as item), _ - -> GetF1Keyword g item + | true, Some (Item.CtorGroup(_, _) as item), _ + -> GetF1Keyword g item | true, _, Some ty -> GetF1Keyword g ty | _ -> None - ) - (fun msg -> + ) + (fun msg -> Trace.TraceInformation(sprintf "FCS: recovering from error in GetF1Keyword: '%s'" msg) None) - member __.GetMethods (line, lineStr, colAtEndOfNames, namesOpt) = + member _.GetMethods (line, lineStr, colAtEndOfNames, namesOpt) = ErrorScope.Protect Range.range0 - (fun () -> + (fun () -> let declItemsOpt = GetDeclItemsForNamesAtPosition(None, namesOpt, None, None, @@ -1142,23 +1317,23 @@ type internal TypeCheckInfo ResolveOverloads.No, (fun() -> [])) match declItemsOpt with - | None -> FSharpMethodGroup("",[| |]) - | Some (items, denv, _, m) -> - // GetDeclItemsForNamesAtPosition returns Items.Types and Item.CtorGroup for `new T(|)`, + | None -> MethodGroup("",[| |]) + | Some (items, denv, _, m) -> + // GetDeclItemsForNamesAtPosition returns Items.Types and Item.CtorGroup for `new T(|)`, // the Item.Types is not needed here as it duplicates (at best) parameterless ctor. let ctors = items |> List.filter (fun x -> match x.Item with Item.CtorGroup _ -> true | _ -> false) let items = match ctors with | [] -> items | ctors -> ctors - FSharpMethodGroup.Create(infoReader, m, denv, items |> List.map (fun x -> x.ItemWithInst))) - (fun msg -> + MethodGroup.Create(infoReader, m, denv, items |> List.map (fun x -> x.ItemWithInst))) + (fun msg -> Trace.TraceInformation(sprintf "FCS: recovering from error in GetMethods: '%s'" msg) - FSharpMethodGroup(msg,[| |])) + MethodGroup(msg,[| |])) - member __.GetMethodsAsSymbols (line, lineStr, colAtEndOfNames, names) = + member _.GetMethodsAsSymbols (line, lineStr, colAtEndOfNames, names) = ErrorScope.Protect Range.range0 - (fun () -> + (fun () -> let declItemsOpt = GetDeclItemsForNamesAtPosition (None, Some names, None, None, line, lineStr, colAtEndOfNames, @@ -1172,14 +1347,14 @@ type internal TypeCheckInfo let symbols = allItems |> List.map (fun item -> FSharpSymbol.Create(cenv, item)) Some (symbols, denv, m) ) - (fun msg -> + (fun msg -> Trace.TraceInformation(sprintf "FCS: recovering from error in GetMethodsAsSymbols: '%s'" msg) None) - - member __.GetDeclarationLocation (line, lineStr, colAtEndOfNames, names, preferFlag) = - ErrorScope.Protect Range.range0 - (fun () -> - + + member _.GetDeclarationLocation (line, lineStr, colAtEndOfNames, names, preferFlag) = + ErrorScope.Protect Range.range0 + (fun () -> + let declItemsOpt = GetDeclItemsForNamesAtPosition (None, Some names, None, None, line, lineStr, colAtEndOfNames, ResolveTypeNamesToCtors, @@ -1187,7 +1362,7 @@ type internal TypeCheckInfo match declItemsOpt with | None - | Some ([], _, _, _) -> FSharpFindDeclResult.DeclNotFound (FSharpFindDeclFailureReason.Unknown "") + | Some ([], _, _, _) -> FindDeclResult.DeclNotFound (FindDeclFailureReason.Unknown "") | Some (item :: _, _, _, _) -> let getTypeVarNames (ilinfo: ILMethInfo) = let classTypeParams = ilinfo.DeclaringTyconRef.ILTyconRawMetadata.GenericParams |> List.map (fun paramDef -> paramDef.Name) @@ -1200,49 +1375,49 @@ type internal TypeCheckInfo match ilinfo.MetadataScope with | ILScopeRef.Assembly assemblyRef -> let typeVarNames = getTypeVarNames ilinfo - ParamTypeSymbol.tryOfILTypes typeVarNames ilinfo.ILMethodRef.ArgTypes + FindDeclExternalParam.tryOfILTypes typeVarNames ilinfo.ILMethodRef.ArgTypes |> Option.map (fun args -> - let externalSym = ExternalSymbol.Constructor (ilinfo.ILMethodRef.DeclaringTypeRef.FullName, args) - FSharpFindDeclResult.ExternalDecl (assemblyRef.Name, externalSym)) + let externalSym = FindDeclExternalSymbol.Constructor (ilinfo.ILMethodRef.DeclaringTypeRef.FullName, args) + FindDeclResult.ExternalDecl (assemblyRef.Name, externalSym)) | _ -> None | Item.MethodGroup (name, (ILMeth (_,ilinfo,_)) :: _, _) -> match ilinfo.MetadataScope with | ILScopeRef.Assembly assemblyRef -> let typeVarNames = getTypeVarNames ilinfo - ParamTypeSymbol.tryOfILTypes typeVarNames ilinfo.ILMethodRef.ArgTypes + FindDeclExternalParam.tryOfILTypes typeVarNames ilinfo.ILMethodRef.ArgTypes |> Option.map (fun args -> - let externalSym = ExternalSymbol.Method (ilinfo.ILMethodRef.DeclaringTypeRef.FullName, name, args, ilinfo.ILMethodRef.GenericArity) - FSharpFindDeclResult.ExternalDecl (assemblyRef.Name, externalSym)) + let externalSym = FindDeclExternalSymbol.Method (ilinfo.ILMethodRef.DeclaringTypeRef.FullName, name, args, ilinfo.ILMethodRef.GenericArity) + FindDeclResult.ExternalDecl (assemblyRef.Name, externalSym)) | _ -> None | Item.Property (name, ILProp propInfo :: _) -> - let methInfo = + let methInfo = if propInfo.HasGetter then Some propInfo.GetterMethod elif propInfo.HasSetter then Some propInfo.SetterMethod else None - + match methInfo with | Some methInfo -> match methInfo.MetadataScope with | ILScopeRef.Assembly assemblyRef -> - let externalSym = ExternalSymbol.Property (methInfo.ILMethodRef.DeclaringTypeRef.FullName, name) - Some (FSharpFindDeclResult.ExternalDecl (assemblyRef.Name, externalSym)) + let externalSym = FindDeclExternalSymbol.Property (methInfo.ILMethodRef.DeclaringTypeRef.FullName, name) + Some (FindDeclResult.ExternalDecl (assemblyRef.Name, externalSym)) | _ -> None | None -> None - + | Item.ILField (ILFieldInfo (typeInfo, fieldDef)) when not typeInfo.TyconRefOfRawMetadata.IsLocalRef -> match typeInfo.ILScopeRef with | ILScopeRef.Assembly assemblyRef -> - let externalSym = ExternalSymbol.Field (typeInfo.ILTypeRef.FullName, fieldDef.Name) - Some (FSharpFindDeclResult.ExternalDecl (assemblyRef.Name, externalSym)) + let externalSym = FindDeclExternalSymbol.Field (typeInfo.ILTypeRef.FullName, fieldDef.Name) + Some (FindDeclResult.ExternalDecl (assemblyRef.Name, externalSym)) | _ -> None - + | Item.Event (ILEvent (ILEventInfo (typeInfo, eventDef))) when not typeInfo.TyconRefOfRawMetadata.IsLocalRef -> match typeInfo.ILScopeRef with | ILScopeRef.Assembly assemblyRef -> - let externalSym = ExternalSymbol.Event (typeInfo.ILTypeRef.FullName, eventDef.Name) - Some (FSharpFindDeclResult.ExternalDecl (assemblyRef.Name, externalSym)) + let externalSym = FindDeclExternalSymbol.Event (typeInfo.ILTypeRef.FullName, eventDef.Name) + Some (FindDeclResult.ExternalDecl (assemblyRef.Name, externalSym)) | _ -> None | Item.ImplicitOp(_, {contents = Some(TraitConstraintSln.FSMethSln(_, _vref, _))}) -> @@ -1255,39 +1430,39 @@ type internal TypeCheckInfo match tr.TypeReprInfo, tr.PublicPath with | TILObjectRepr(TILObjectReprData (ILScopeRef.Assembly assemblyRef, _, _)), Some (PubPath parts) -> let fullName = parts |> String.concat "." - Some (FSharpFindDeclResult.ExternalDecl (assemblyRef.Name, ExternalSymbol.Type fullName)) + Some (FindDeclResult.ExternalDecl (assemblyRef.Name, FindDeclExternalSymbol.Type fullName)) | _ -> None | _ -> None match result with | Some x -> x | None -> match rangeOfItem g preferFlag item.Item with - | Some itemRange -> - let projectDir = Filename.directoryName (if projectFileName = "" then mainInputFileName else projectFileName) + | Some itemRange -> + let projectDir = FileSystem.GetDirectoryNameShim (if projectFileName = "" then mainInputFileName else projectFileName) let range = fileNameOfItem g (Some projectDir) itemRange item.Item - mkRange range itemRange.Start itemRange.End - |> FSharpFindDeclResult.DeclFound - | None -> - match item.Item with + mkRange range itemRange.Start itemRange.End + |> FindDeclResult.DeclFound + | None -> + match item.Item with #if !NO_EXTENSIONTYPING // provided items may have TypeProviderDefinitionLocationAttribute that binds them to some location | Item.CtorGroup (name, ProvidedMeth (_)::_ ) | Item.MethodGroup(name, ProvidedMeth (_)::_, _) - | Item.Property (name, ProvidedProp (_)::_ ) -> FSharpFindDeclFailureReason.ProvidedMember name - | Item.Event ( ProvidedEvent(_) as e ) -> FSharpFindDeclFailureReason.ProvidedMember e.EventName - | Item.ILField ( ProvidedField(_) as f ) -> FSharpFindDeclFailureReason.ProvidedMember f.FieldName - | SymbolHelpers.ItemIsProvidedType g (tcref) -> FSharpFindDeclFailureReason.ProvidedType tcref.DisplayName + | Item.Property (name, ProvidedProp (_)::_ ) -> FindDeclFailureReason.ProvidedMember name + | Item.Event ( ProvidedEvent(_) as e ) -> FindDeclFailureReason.ProvidedMember e.EventName + | Item.ILField ( ProvidedField(_) as f ) -> FindDeclFailureReason.ProvidedMember f.FieldName + | SymbolHelpers.ItemIsProvidedType g (tcref) -> FindDeclFailureReason.ProvidedType tcref.DisplayName #endif - | _ -> FSharpFindDeclFailureReason.Unknown "" - |> FSharpFindDeclResult.DeclNotFound + | _ -> FindDeclFailureReason.Unknown "" + |> FindDeclResult.DeclNotFound ) - (fun msg -> + (fun msg -> Trace.TraceInformation(sprintf "FCS: recovering from error in GetDeclarationLocation: '%s'" msg) - FSharpFindDeclResult.DeclNotFound (FSharpFindDeclFailureReason.Unknown msg)) + FindDeclResult.DeclNotFound (FindDeclFailureReason.Unknown msg)) - member __.GetSymbolUseAtLocation (line, lineStr, colAtEndOfNames, names) = - ErrorScope.Protect Range.range0 - (fun () -> + member _.GetSymbolUseAtLocation (line, lineStr, colAtEndOfNames, names) = + ErrorScope.Protect Range.range0 + (fun () -> let declItemsOpt = GetDeclItemsForNamesAtPosition (None, Some names, None, None, line, lineStr, colAtEndOfNames, ResolveTypeNamesToCtors, @@ -1295,58 +1470,60 @@ type internal TypeCheckInfo match declItemsOpt with | None | Some ([], _, _, _) -> None - | Some (item :: _, denv, _, m) -> + | Some (item :: _, denv, _, m) -> let symbol = FSharpSymbol.Create(cenv, item.Item) Some (symbol, denv, m) - ) - (fun msg -> + ) + (fun msg -> Trace.TraceInformation(sprintf "FCS: recovering from error in GetSymbolUseAtLocation: '%s'" msg) None) - member __.PartialAssemblySignatureForFile = + member _.PartialAssemblySignatureForFile = FSharpAssemblySignature(g, thisCcu, ccuSigForFile, tcImports, None, ccuSigForFile) - member __.AccessRights = tcAccessRights + member _.AccessRights = tcAccessRights - member __.GetReferencedAssemblies() = - [ for x in tcImports.GetImportedAssemblies() do + member _.ProjectOptions = projectOptions + + member _.GetReferencedAssemblies() = + [ for x in tcImports.GetImportedAssemblies() do yield FSharpAssembly(g, tcImports, x.FSharpViewOfMetadata) ] - member __.GetFormatSpecifierLocationsAndArity() = + member _.GetFormatSpecifierLocationsAndArity() = sSymbolUses.GetFormatSpecifierLocationsAndArity() - member __.GetSemanticClassification(range: range option) : struct (range * SemanticClassificationType) [] = + member _.GetSemanticClassification(range: range option) : SemanticClassificationItem [] = sResolutions.GetSemanticClassification(g, amap, sSymbolUses.GetFormatSpecifierLocationsAndArity(), range) /// The resolutions in the file - member __.ScopeResolutions = sResolutions + member _.ScopeResolutions = sResolutions /// The uses of symbols in the analyzed file - member __.ScopeSymbolUses = sSymbolUses + member _.ScopeSymbolUses = sSymbolUses - member __.TcGlobals = g + member _.TcGlobals = g - member __.TcImports = tcImports + member _.TcImports = tcImports /// The inferred signature of the file - member __.CcuSigForFile = ccuSigForFile + member _.CcuSigForFile = ccuSigForFile /// The assembly being analyzed - member __.ThisCcu = thisCcu + member _.ThisCcu = thisCcu - member __.ImplementationFile = implFileOpt + member _.ImplementationFile = implFileOpt /// All open declarations in the file, including auto open modules - member __.OpenDeclarations = openDeclarations + member _.OpenDeclarations = openDeclarations - member __.SymbolEnv = cenv + member _.SymbolEnv = cenv - override __.ToString() = "TypeCheckInfo(" + mainInputFileName + ")" + override _.ToString() = "TypeCheckInfo(" + mainInputFileName + ")" type FSharpParsingOptions = { SourceFiles: string [] ConditionalCompilationDefines: string list - ErrorSeverityOptions: FSharpErrorSeverityOptions + ErrorSeverityOptions: FSharpDiagnosticOptions IsInteractive: bool LightSyntax: bool option CompilingFsLib: bool @@ -1359,7 +1536,7 @@ type FSharpParsingOptions = static member Default = { SourceFiles = Array.empty ConditionalCompilationDefines = [] - ErrorSeverityOptions = FSharpErrorSeverityOptions.Default + ErrorSeverityOptions = FSharpDiagnosticOptions.Default IsInteractive = false LightSyntax = None CompilingFsLib = false @@ -1385,10 +1562,10 @@ type FSharpParsingOptions = IsExe = tcConfigB.target.IsExe } -module internal ParseAndCheckFile = +module internal ParseAndCheckFile = /// Error handler for parsing & type checking while processing a single file - type ErrorHandler(reportErrors, mainInputFileName, errorSeverityOptions: FSharpErrorSeverityOptions, sourceText: ISourceText, suggestNamesForErrors: bool) = + type ErrorHandler(reportErrors, mainInputFileName, errorSeverityOptions: FSharpDiagnosticOptions, sourceText: ISourceText, suggestNamesForErrors: bool) = let mutable options = errorSeverityOptions let errorsAndWarningsCollector = new ResizeArray<_>() let mutable errorCount = 0 @@ -1408,9 +1585,9 @@ module internal ParseAndCheckFile = else exn if reportErrors then let report exn = - for ei in ErrorHelpers.ReportError (options, false, mainInputFileName, fileInfo, (exn, sev), suggestNamesForErrors) do + for ei in DiagnosticHelpers.ReportDiagnostic (options, false, mainInputFileName, fileInfo, (exn, sev), suggestNamesForErrors) do errorsAndWarningsCollector.Add ei - if sev = FSharpErrorSeverity.Error then + if sev = FSharpDiagnosticSeverity.Error then errorCount <- errorCount + 1 match exn with @@ -1421,23 +1598,23 @@ module internal ParseAndCheckFile = let errorLogger = { new ErrorLogger("ErrorHandler") with - member x.DiagnosticSink (exn, isError) = diagnosticSink (if isError then FSharpErrorSeverity.Error else FSharpErrorSeverity.Warning) exn + member x.DiagnosticSink (exn, severity) = diagnosticSink severity exn member x.ErrorCount = errorCount } // Public members - member __.ErrorLogger = errorLogger + member _.ErrorLogger = errorLogger - member __.CollectedDiagnostics = errorsAndWarningsCollector.ToArray() + member _.CollectedDiagnostics = errorsAndWarningsCollector.ToArray() - member __.ErrorCount = errorCount + member _.ErrorCount = errorCount - member __.ErrorSeverityOptions with set opts = options <- opts + member _.ErrorSeverityOptions with set opts = options <- opts - member __.AnyErrors = errorCount > 0 + member _.AnyErrors = errorCount > 0 let getLightSyntaxStatus fileName options = let lower = String.lowercase fileName - let lightOnByDefault = List.exists (Filename.checkSuffix lower) FSharpLightSyntaxFileSuffixes + let lightOnByDefault = List.exists (FileSystemUtils.checkSuffix lower) FSharpLightSyntaxFileSuffixes let lightStatus = if lightOnByDefault then (options.LightSyntax <> Some false) else (options.LightSyntax = Some true) LightSyntaxStatus(lightStatus, true) @@ -1450,7 +1627,7 @@ module internal ParseAndCheckFile = // Note: we don't really attempt to intern strings across a large scope. let lexResourceManager = new Lexhelp.LexResourceManager() - + // When analyzing files using ParseOneFile, i.e. for the use of editing clients, we do not apply line directives. // TODO(pathmap): expose PathMap on the service API, and thread it through here let lexargs = mkLexargs(defines, lightStatus, lexResourceManager, [], errHandler.ErrorLogger, PathMap.empty) @@ -1460,11 +1637,11 @@ module internal ParseAndCheckFile = (fun _ -> tokenizer.GetToken()) // Public callers are unable to answer LanguageVersion feature support questions. - // External Tools including the VS IDE will enable the default LanguageVersion + // External Tools including the VS IDE will enable the default LanguageVersion let isFeatureSupported (_featureId:LanguageFeature) = true let createLexbuf sourceText = - UnicodeLexing.SourceTextAsLexbuf(isFeatureSupported, sourceText) + UnicodeLexing.SourceTextAsLexbuf(true, isFeatureSupported, sourceText) let matchBraces(sourceText: ISourceText, fileName, options: FSharpParsingOptions, userOpName: string, suggestNamesForErrors: bool) = let delayedLogger = CapturingErrorLogger("matchBraces") @@ -1472,12 +1649,12 @@ module internal ParseAndCheckFile = use _unwindBP = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse Trace.TraceInformation("FCS: {0}.{1} ({2})", userOpName, "matchBraces", fileName) - + // Make sure there is an ErrorLogger installed whenever we do stuff that might record errors, even if we ultimately ignore the errors let delayedLogger = CapturingErrorLogger("matchBraces") use _unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> delayedLogger) use _unwindBP = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse - + let matchingBraces = new ResizeArray<_>() Lexhelp.usingLexbufForParsing(createLexbuf sourceText, fileName) (fun lexbuf -> let errHandler = ErrorHandler(false, fileName, options.ErrorSeverityOptions, sourceText, suggestNamesForErrors) @@ -1510,9 +1687,9 @@ module internal ParseAndCheckFile = // For INTERP_STRING_PART and INTERP_STRING_END grab the one character // range that corresponds to the "}" at the start of the token let m2Start = - match tok2 with + match tok2 with | INTERP_STRING_PART _ - | INTERP_STRING_END _ -> + | INTERP_STRING_END _ -> Range.mkFileIndexRange m2.FileIndex m2.Start (mkPos m2.Start.Line (m2.Start.Column+1)) | _ -> m2 @@ -1520,9 +1697,9 @@ module internal ParseAndCheckFile = // INTERP_STRING_PART corresponds to both "} ... {" i.e. both the completion // of a match and the start of a potential new one. - let stackAfterMatch = - match tok2 with - | INTERP_STRING_PART _ -> + let stackAfterMatch = + match tok2 with + | INTERP_STRING_PART _ -> let m2End = Range.mkFileIndexRange m2.FileIndex (mkPos m2.End.Line (max (m2.End.Column-1) 0)) m2.End (tok2, m2End) :: stackAfterMatch | _ -> stackAfterMatch @@ -1564,49 +1741,49 @@ module internal ParseAndCheckFile = ParseAndCheckInputs.IsScript(fileName) let isExe = options.IsExe - try - Some (ParseInput(lexfun, errHandler.ErrorLogger, lexbuf, None, fileName, (isLastCompiland, isExe))) + try + ParseInput(lexfun, errHandler.ErrorLogger, lexbuf, None, fileName, (isLastCompiland, isExe)) with e -> errHandler.ErrorLogger.StopProcessingRecovery e Range.range0 // don't re-raise any exceptions, we must return None. - None) + EmptyParsedInput(fileName, (isLastCompiland, isExe))) errHandler.CollectedDiagnostics, parseResult, errHandler.AnyErrors - let ApplyLoadClosure(tcConfig, parsedMainInput, mainInputFileName, loadClosure: LoadClosure option, tcImports: TcImports, backgroundDiagnostics) = + let ApplyLoadClosure(tcConfig, parsedMainInput, mainInputFileName, loadClosure: LoadClosure option, tcImports: TcImports, backgroundDiagnostics) = // If additional references were brought in by the preprocessor then we need to process them match loadClosure with | Some loadClosure -> // Play unresolved references for this file. tcImports.ReportUnresolvedAssemblyReferences(loadClosure.UnresolvedReferences) - + // If there was a loadClosure, replay the errors and warnings from resolution, excluding parsing loadClosure.LoadClosureRootFileDiagnostics |> List.iter diagnosticSink - + let fileOfBackgroundError err = (match GetRangeOfDiagnostic (fst err) with Some m-> m.FileName | None -> null) - let sameFile file hashLoadInFile = + let sameFile file hashLoadInFile = (0 = String.Compare(hashLoadInFile, file, StringComparison.OrdinalIgnoreCase)) - + // walk the list of #loads and keep the ones for this file. - let hashLoadsInFile = - loadClosure.SourceFiles + let hashLoadsInFile = + loadClosure.SourceFiles |> List.filter(fun (_,ms) -> ms<>[]) // #loaded file, ranges of #load - - let hashLoadBackgroundDiagnostics, otherBackgroundDiagnostics = - backgroundDiagnostics - |> Array.partition (fun backgroundError -> - hashLoadsInFile + + let hashLoadBackgroundDiagnostics, otherBackgroundDiagnostics = + backgroundDiagnostics + |> Array.partition (fun backgroundError -> + hashLoadsInFile |> List.exists (fst >> sameFile (fileOfBackgroundError backgroundError))) - + // Create single errors for the #load-ed files. // Group errors and warnings by file name. - let hashLoadBackgroundDiagnosticsGroupedByFileName = - hashLoadBackgroundDiagnostics - |> Array.map(fun err -> fileOfBackgroundError err,err) + let hashLoadBackgroundDiagnosticsGroupedByFileName = + hashLoadBackgroundDiagnostics + |> Array.map(fun err -> fileOfBackgroundError err,err) |> Array.groupBy fst // fileWithErrors, error list - - // Join the sets and report errors. + + // Join the sets and report errors. // It is by-design that these messages are only present in the language service. A true build would report the errors at their // spots in the individual source files. for fileOfHashLoad, rangesOfHashLoad in hashLoadsInFile do @@ -1614,31 +1791,32 @@ module internal ParseAndCheckFile = if sameFile file fileOfHashLoad then for rangeOfHashLoad in rangesOfHashLoad do // Handle the case of two #loads of the same file let diagnostics = errorGroupedByFileName |> Array.map(fun (_,(pe,f)) -> pe.Exception,f) // Strip the build phase here. It will be replaced, in total, with TypeCheck - let errors = [ for err, sev in diagnostics do if sev = FSharpErrorSeverity.Error then yield err ] - let warnings = [ for err, sev in diagnostics do if sev = FSharpErrorSeverity.Warning then yield err ] - + let errors = [ for err, sev in diagnostics do if sev = FSharpDiagnosticSeverity.Error then yield err ] + let warnings = [ for err, sev in diagnostics do if sev = FSharpDiagnosticSeverity.Warning then yield err ] + let message = HashLoadedSourceHasIssues(warnings,errors,rangeOfHashLoad) - if isNil errors then + if isNil errors then warning message - else + else errorR message - + // Replay other background errors. for phasedError, sev in otherBackgroundDiagnostics do - if sev = FSharpErrorSeverity.Warning then - warning phasedError.Exception - else + if sev = FSharpDiagnosticSeverity.Warning then + warning phasedError.Exception + else errorR phasedError.Exception - - | None -> + + | None -> // For non-scripts, check for disallow #r and #load. ApplyMetaCommandsFromInputToTcConfig (tcConfig, parsedMainInput, Path.GetDirectoryName mainInputFileName, tcImports.DependencyProvider) |> ignore - + // Type check a single file against an initial context, gleaning both errors and intellisense information. let CheckOneFile (parseResults: FSharpParseFileResults, sourceText: ISourceText, mainInputFileName: string, + projectOptions: FSharpProjectOptions, projectFileName: string, tcConfig: TcConfig, tcGlobals: TcGlobals, @@ -1646,52 +1824,44 @@ module internal ParseAndCheckFile = tcState: TcState, moduleNamesDict: ModuleNamesDict, loadClosure: LoadClosure option, - // These are the errors and warnings seen by the background compiler for the entire antecedent - backgroundDiagnostics: (PhasedDiagnostic * FSharpErrorSeverity)[], - reactorOps: IReactorOperations, - userOpName: string, - suggestNamesForErrors: bool) = async { + // These are the errors and warnings seen by the background compiler for the entire antecedent + backgroundDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity)[], + suggestNamesForErrors: bool) = + cancellable { use _logBlock = Logger.LogBlock LogCompilerFunctionId.Service_CheckOneFile - match parseResults.ParseTree with - // When processing the following cases, we don't need to type-check - | None -> return [||], Result.Error() - - // Run the type checker... - | Some parsedMainInput -> + let parsedMainInput = parseResults.ParseTree - // Initialize the error handler + // Initialize the error handler let errHandler = new ErrorHandler(true, mainInputFileName, tcConfig.errorSeverityOptions, sourceText, suggestNamesForErrors) - + use _unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _oldLogger -> errHandler.ErrorLogger) use _unwindBP = PushThreadBuildPhaseUntilUnwind BuildPhase.TypeCheck - + // Apply nowarns to tcConfig (may generate errors, so ensure errorLogger is installed) let tcConfig = ApplyNoWarnsToTcConfig (tcConfig, parsedMainInput,Path.GetDirectoryName mainInputFileName) - + // update the error handler with the modified tcConfig errHandler.ErrorSeverityOptions <- tcConfig.errorSeverityOptions - + // Play background errors and warnings for this file. - for err, sev in backgroundDiagnostics do - diagnosticSink (err, (sev = FSharpErrorSeverity.Error)) - + do for err, severity in backgroundDiagnostics do + diagnosticSink (err, severity) + // If additional references were brought in by the preprocessor then we need to process them ApplyLoadClosure(tcConfig, parsedMainInput, mainInputFileName, loadClosure, tcImports, backgroundDiagnostics) - - // A problem arises with nice name generation, which really should only - // be done in the backend, but is also done in the typechecker for better or worse. - // If we don't do this the NNG accumulates data and we get a memory leak. + + // A problem arises with nice name generation, which really should only + // be done in the backend, but is also done in the typechecker for better or worse. + // If we don't do this the NNG accumulates data and we get a memory leak. tcState.NiceNameGenerator.Reset() - - // Typecheck the real input. + + // Typecheck the real input. let sink = TcResultsSinkImpl(tcGlobals, sourceText = sourceText) - let! ct = Async.CancellationToken - let! resOpt = - async { + cancellable { try let checkForErrors() = (parseResults.ParseHadErrors || errHandler.ErrorCount > 0) @@ -1699,186 +1869,165 @@ module internal ParseAndCheckFile = // Typecheck is potentially a long running operation. We chop it up here with an Eventually continuation and, at each slice, give a chance // for the client to claim the result as obsolete and have the typecheck abort. - - let! result = - TypeCheckOneInputAndFinishEventually(checkForErrors, tcConfig, tcImports, tcGlobals, None, TcResultsSink.WithSink sink, tcState, parsedMainInput) - |> Eventually.repeatedlyProgressUntilDoneOrTimeShareOverOrCanceled maxTimeShareMilliseconds ct (fun ctok f -> f ctok) - |> Eventually.forceAsync - (fun work -> - reactorOps.EnqueueAndAwaitOpAsync(userOpName, "CheckOneFile.Fragment", mainInputFileName, - fun ctok -> - // This work is not cancellable - let res = - // Reinstall the compilation globals each time we start or restart - use unwind = new CompilationGlobalsScope (errHandler.ErrorLogger, BuildPhase.TypeCheck) - work ctok - cancellable.Return(res) - )) - + + use _unwind = new CompilationGlobalsScope (errHandler.ErrorLogger, BuildPhase.TypeCheck) + let! result = + TypeCheckOneInputAndFinish(checkForErrors, tcConfig, tcImports, tcGlobals, None, TcResultsSink.WithSink sink, tcState, parsedMainInput) + return result with e -> errorR e - let mty = Construct.NewEmptyModuleOrNamespaceType Namespace - return Some((tcState.TcEnvFromSignatures, EmptyTopAttrs, [], [ mty ]), tcState) - } - + let mty = Construct.NewEmptyModuleOrNamespaceType ModuleOrNamespaceKind.Namespace + return ((tcState.TcEnvFromSignatures, EmptyTopAttrs, [], [ mty ]), tcState) + } + let errors = errHandler.CollectedDiagnostics - - let res = + + let res = match resOpt with - | Some ((tcEnvAtEnd, _, implFiles, ccuSigsForFiles), tcState) -> - TypeCheckInfo(tcConfig, tcGlobals, - List.head ccuSigsForFiles, + | ((tcEnvAtEnd, _, implFiles, ccuSigsForFiles), tcState) -> + TypeCheckInfo(tcConfig, tcGlobals, + List.head ccuSigsForFiles, tcState.Ccu, tcImports, tcEnvAtEnd.AccessRights, - projectFileName, - mainInputFileName, - sink.GetResolutions(), + projectFileName, + mainInputFileName, + projectOptions, + sink.GetResolutions(), sink.GetSymbolUses(), tcEnvAtEnd.NameEnv, loadClosure, List.tryHead implFiles, - sink.GetOpenDeclarations()) - |> Result.Ok - | None -> - Result.Error() + sink.GetOpenDeclarations()) return errors, res - } + } +[] +type FSharpProjectContext(thisCcu: CcuThunk, assemblies: FSharpAssembly list, ad: AccessorDomain, projectOptions: FSharpProjectOptions) = -[] -type FSharpProjectContext(thisCcu: CcuThunk, assemblies: FSharpAssembly list, ad: AccessorDomain) = + member _.ProjectOptions = projectOptions - /// Get the assemblies referenced - member __.GetReferencedAssemblies() = assemblies + member _.GetReferencedAssemblies() = assemblies - member __.AccessibilityRights = FSharpAccessibilityRights(thisCcu, ad) + member _.AccessibilityRights = FSharpAccessibilityRights(thisCcu, ad) [] /// A live object of this type keeps the background corresponding background builder (and type providers) alive (through reference-counting). // -// There is an important property of all the objects returned by the methods of this type: they do not require -// the corresponding background builder to be alive. That is, they are simply plain-old-data through pre-formatting of all result text. +// Note: objects returned by the methods of this type do not require the corresponding background builder to be alive. type FSharpCheckFileResults - (filename: string, - errors: FSharpErrorInfo[], - scopeOptX: TypeCheckInfo option, - dependencyFiles: string[], - builderX: IncrementalBuilder option, + (filename: string, + errors: FSharpDiagnostic[], + scopeOptX: TypeCheckInfo option, + dependencyFiles: string[], + builderX: IncrementalBuilder option, keepAssemblyContents: bool) = + // Here 'details' keeps 'builder' alive let details = match scopeOptX with None -> None | Some scopeX -> Some (scopeX, builderX) // Run an operation that can be called from any thread - let threadSafeOp dflt f = + let threadSafeOp dflt f = match details with | None -> dflt() | Some (scope, _builderOpt) -> f scope - member __.Errors = errors + member _.Diagnostics = errors - member __.HasFullTypeCheckInfo = details.IsSome - - member __.TryGetCurrentTcImports () = - match builderX with - | Some builder -> builder.TryGetCurrentTcImports () - | _ -> None + member _.HasFullTypeCheckInfo = details.IsSome + + member _.TryGetCurrentTcImports () = + match details with + | None -> None + | Some (scope, _builderOpt) -> Some scope.TcImports /// Intellisense autocompletions - member __.GetDeclarationListInfo(parsedFileResults, line, lineText, partialName, ?getAllEntities) = + member _.GetDeclarationListInfo(parsedFileResults, line, lineText, partialName, ?getAllEntities) = let getAllEntities = defaultArg getAllEntities (fun() -> []) - threadSafeOp (fun () -> FSharpDeclarationListInfo.Empty) (fun scope -> + threadSafeOp (fun () -> DeclarationListInfo.Empty) (fun scope -> scope.GetDeclarations(parsedFileResults, line, lineText, partialName, getAllEntities)) - member __.GetDeclarationListSymbols(parsedFileResults, line, lineText, partialName, ?getAllEntities) = + member _.GetDeclarationListSymbols(parsedFileResults, line, lineText, partialName, ?getAllEntities) = let getAllEntities = defaultArg getAllEntities (fun() -> []) - threadSafeOp (fun () -> []) (fun scope -> + threadSafeOp (fun () -> []) (fun scope -> scope.GetDeclarationListSymbols(parsedFileResults, line, lineText, partialName, getAllEntities)) - /// Resolve the names at the given location to give a data tip - member __.GetStructuredToolTipText(line, colAtEndOfNames, lineText, names, tokenTag) = - let dflt = FSharpToolTipText [] - match tokenTagToTokenId tokenTag with - | TOKEN_IDENT -> - threadSafeOp (fun () -> dflt) (fun scope -> + /// Resolve the names at the given location to give a data tip + member _.GetToolTip(line, colAtEndOfNames, lineText, names, tokenTag) = + let dflt = ToolTipText [] + match tokenTagToTokenId tokenTag with + | TOKEN_IDENT -> + threadSafeOp (fun () -> dflt) (fun scope -> scope.GetStructuredToolTipText(line, lineText, colAtEndOfNames, names)) - | TOKEN_STRING | TOKEN_STRING_TEXT -> + | TOKEN_STRING | TOKEN_STRING_TEXT -> threadSafeOp (fun () -> dflt) (fun scope -> scope.GetReferenceResolutionStructuredToolTipText(line, colAtEndOfNames) ) - | _ -> + | _ -> dflt - member info.GetToolTipText(line, colAtEndOfNames, lineText, names, tokenTag) = - info.GetStructuredToolTipText(line, colAtEndOfNames, lineText, names, tokenTag) - |> Tooltips.ToFSharpToolTipText - - member __.GetF1Keyword (line, colAtEndOfNames, lineText, names) = - threadSafeOp (fun () -> None) (fun scope -> + member _.GetF1Keyword (line, colAtEndOfNames, lineText, names) = + threadSafeOp (fun () -> None) (fun scope -> scope.GetF1Keyword (line, lineText, colAtEndOfNames, names)) // Resolve the names at the given location to a set of methods - member __.GetMethods(line, colAtEndOfNames, lineText, names) = - let dflt = FSharpMethodGroup("",[| |]) - threadSafeOp (fun () -> dflt) (fun scope -> + member _.GetMethods(line, colAtEndOfNames, lineText, names) = + let dflt = MethodGroup("",[| |]) + threadSafeOp (fun () -> dflt) (fun scope -> scope.GetMethods (line, lineText, colAtEndOfNames, names)) - - member __.GetDeclarationLocation (line, colAtEndOfNames, lineText, names, ?preferFlag) = - let dflt = FSharpFindDeclResult.DeclNotFound (FSharpFindDeclFailureReason.Unknown "") - threadSafeOp (fun () -> dflt) (fun scope -> + + member _.GetDeclarationLocation (line, colAtEndOfNames, lineText, names, ?preferFlag) = + let dflt = FindDeclResult.DeclNotFound (FindDeclFailureReason.Unknown "") + threadSafeOp (fun () -> dflt) (fun scope -> scope.GetDeclarationLocation (line, lineText, colAtEndOfNames, names, preferFlag)) - member __.GetSymbolUseAtLocation (line, colAtEndOfNames, lineText, names) = - threadSafeOp (fun () -> None) (fun scope -> + member _.GetSymbolUseAtLocation (line, colAtEndOfNames, lineText, names) = + threadSafeOp (fun () -> None) (fun scope -> scope.GetSymbolUseAtLocation (line, lineText, colAtEndOfNames, names) |> Option.map (fun (sym,denv,m) -> FSharpSymbolUse(scope.TcGlobals,denv,sym,ItemOccurence.Use,m))) - member __.GetMethodsAsSymbols (line, colAtEndOfNames, lineText, names) = - threadSafeOp (fun () -> None) (fun scope -> + member _.GetMethodsAsSymbols (line, colAtEndOfNames, lineText, names) = + threadSafeOp (fun () -> None) (fun scope -> scope.GetMethodsAsSymbols (line, lineText, colAtEndOfNames, names) |> Option.map (fun (symbols,denv,m) -> symbols |> List.map (fun sym -> FSharpSymbolUse(scope.TcGlobals,denv,sym,ItemOccurence.Use,m)))) - member __.GetSymbolAtLocation (line, colAtEndOfNames, lineStr, names) = - threadSafeOp (fun () -> None) (fun scope -> + member _.GetSymbolAtLocation (line, colAtEndOfNames, lineStr, names) = + threadSafeOp (fun () -> None) (fun scope -> scope.GetSymbolUseAtLocation (line, lineStr, colAtEndOfNames, names) |> Option.map (fun (sym,_,_) -> sym)) - member info.GetFormatSpecifierLocations() = + member info.GetFormatSpecifierLocations() = info.GetFormatSpecifierLocationsAndArity() |> Array.map fst - member __.GetFormatSpecifierLocationsAndArity() = - threadSafeOp - (fun () -> [| |]) - (fun scope -> - // This operation is not asynchronous - GetFormatSpecifierLocationsAndArity can be run on the calling thread + member _.GetFormatSpecifierLocationsAndArity() = + threadSafeOp + (fun () -> [| |]) + (fun scope -> scope.GetFormatSpecifierLocationsAndArity()) - member __.GetSemanticClassification(range: range option) = - threadSafeOp - (fun () -> [| |]) - (fun scope -> - // This operation is not asynchronous - GetSemanticClassification can be run on the calling thread + member _.GetSemanticClassification(range: range option) = + threadSafeOp + (fun () -> [| |]) + (fun scope -> scope.GetSemanticClassification(range)) - - member __.PartialAssemblySignature = - threadSafeOp - (fun () -> failwith "not available") - (fun scope -> - // This operation is not asynchronous - PartialAssemblySignature can be run on the calling thread + + member _.PartialAssemblySignature = + threadSafeOp + (fun () -> failwith "not available") + (fun scope -> scope.PartialAssemblySignatureForFile) - member __.ProjectContext = - threadSafeOp - (fun () -> failwith "not available") - (fun scope -> - // This operation is not asynchronous - GetReferencedAssemblies can be run on the calling thread - FSharpProjectContext(scope.ThisCcu, scope.GetReferencedAssemblies(), scope.AccessRights)) + member _.ProjectContext = + threadSafeOp + (fun () -> failwith "not available") + (fun scope -> + FSharpProjectContext(scope.ThisCcu, scope.GetReferencedAssemblies(), scope.AccessRights, scope.ProjectOptions)) - member __.DependencyFiles = dependencyFiles + member _.DependencyFiles = dependencyFiles - member __.GetAllUsesOfAllSymbolsInFile(?cancellationToken: CancellationToken ) = + member _.GetAllUsesOfAllSymbolsInFile(?cancellationToken: CancellationToken ) = threadSafeOp (fun () -> Seq.empty) (fun scope -> @@ -1892,91 +2041,106 @@ type FSharpCheckFileResults FSharpSymbolUse(scope.TcGlobals, symbolUse.DisplayEnv, symbol, symbolUse.ItemOccurence, symbolUse.Range) }) - member __.GetUsesOfSymbolInFile(symbol:FSharpSymbol, ?cancellationToken: CancellationToken) = - threadSafeOp - (fun () -> [| |]) - (fun scope -> + member _.GetUsesOfSymbolInFile(symbol:FSharpSymbol, ?cancellationToken: CancellationToken) = + threadSafeOp + (fun () -> [| |]) + (fun scope -> [| for symbolUse in scope.ScopeSymbolUses.GetUsesOfSymbol(symbol.Item) |> Seq.distinctBy (fun symbolUse -> symbolUse.ItemOccurence, symbolUse.Range) do cancellationToken |> Option.iter (fun ct -> ct.ThrowIfCancellationRequested()) if symbolUse.ItemOccurence <> ItemOccurence.RelatedText then yield FSharpSymbolUse(scope.TcGlobals, symbolUse.DisplayEnv, symbol, symbolUse.ItemOccurence, symbolUse.Range) |]) - member __.GetVisibleNamespacesAndModulesAtPoint(pos: pos) = - threadSafeOp - (fun () -> [| |]) + member _.GetVisibleNamespacesAndModulesAtPoint(pos: pos) = + threadSafeOp + (fun () -> [| |]) (fun scope -> scope.GetVisibleNamespacesAndModulesAtPosition(pos) |> List.toArray) - member __.IsRelativeNameResolvable(cursorPos: pos, plid: string list, item: Item) = - threadSafeOp (fun () -> true) (fun scope -> + member _.IsRelativeNameResolvable(cursorPos: pos, plid: string list, item: Item) = + threadSafeOp (fun () -> true) (fun scope -> scope.IsRelativeNameResolvable(cursorPos, plid, item)) - member __.IsRelativeNameResolvableFromSymbol(cursorPos: pos, plid: string list, symbol: FSharpSymbol) = - threadSafeOp (fun () -> true) (fun scope -> + member _.IsRelativeNameResolvableFromSymbol(cursorPos: pos, plid: string list, symbol: FSharpSymbol) = + threadSafeOp (fun () -> true) (fun scope -> scope.IsRelativeNameResolvableFromSymbol(cursorPos, plid, symbol)) - - member __.GetDisplayContextForPos(cursorPos: pos) = - threadSafeOp (fun () -> None) (fun scope -> + + member _.GetDisplayContextForPos(cursorPos: pos) = + threadSafeOp (fun () -> None) (fun scope -> let (nenv, _), _ = scope.GetBestDisplayEnvForPos cursorPos Some(FSharpDisplayContext(fun _ -> nenv.DisplayEnv))) - - member __.ImplementationFile = + + member _.GenerateSignature () = + threadSafeOp (fun () -> None) (fun scope -> + scope.ImplementationFile + |> Option.map (fun implFile -> + let denv = DisplayEnv.InitialForSigFileGeneration scope.TcGlobals + let infoReader = InfoReader(scope.TcGlobals, scope.TcImports.GetImportMap()) + let (TImplFile (_, _, mexpr, _, _, _)) = implFile + let layout = NicePrint.layoutInferredSigOfModuleExpr true denv infoReader AccessibleFromSomewhere range0 mexpr + layout |> LayoutRender.showL |> SourceText.ofString + ) + ) + + member _.ImplementationFile = if not keepAssemblyContents then invalidOp "The 'keepAssemblyContents' flag must be set to true on the FSharpChecker in order to access the checked contents of assemblies" - scopeOptX - |> Option.map (fun scope -> + scopeOptX + |> Option.map (fun scope -> let cenv = SymbolEnv(scope.TcGlobals, scope.ThisCcu, Some scope.CcuSigForFile, scope.TcImports) scope.ImplementationFile |> Option.map (fun implFile -> FSharpImplementationFileContents(cenv, implFile))) |> Option.defaultValue None - member __.OpenDeclarations = - scopeOptX - |> Option.map (fun scope -> + member _.OpenDeclarations = + scopeOptX + |> Option.map (fun scope -> let cenv = scope.SymbolEnv - scope.OpenDeclarations |> Array.map (fun x -> + scope.OpenDeclarations |> Array.map (fun x -> let modules = x.Modules |> List.map (fun x -> FSharpEntity(cenv, x)) let types = x.Types |> List.map (fun x -> FSharpType(cenv, x)) FSharpOpenDeclaration(x.Target, x.Range, modules, types, x.AppliedScope, x.IsOwnNamespace))) |> Option.defaultValue [| |] - override __.ToString() = "FSharpCheckFileResults(" + filename + ")" + override _.ToString() = "FSharpCheckFileResults(" + filename + ")" - static member MakeEmpty(filename: string, creationErrors: FSharpErrorInfo[], keepAssemblyContents) = + static member MakeEmpty(filename: string, creationErrors: FSharpDiagnostic[], keepAssemblyContents) = FSharpCheckFileResults (filename, creationErrors, None, [| |], None, keepAssemblyContents) - static member JoinErrors(isIncompleteTypeCheckEnvironment, - creationErrors: FSharpErrorInfo[], - parseErrors: FSharpErrorInfo[], - tcErrors: FSharpErrorInfo[]) = - [| yield! creationErrors + static member JoinErrors(isIncompleteTypeCheckEnvironment, + creationErrors: FSharpDiagnostic[], + parseErrors: FSharpDiagnostic[], + tcErrors: FSharpDiagnostic[]) = + [| yield! creationErrors yield! parseErrors - if isIncompleteTypeCheckEnvironment then + if isIncompleteTypeCheckEnvironment then yield! Seq.truncate maxTypeCheckErrorsOutOfProjectContext tcErrors - else + else yield! tcErrors |] static member Make - (mainInputFileName: string, - projectFileName, - tcConfig, tcGlobals, - isIncompleteTypeCheckEnvironment: bool, - builder: IncrementalBuilder, - dependencyFiles, - creationErrors: FSharpErrorInfo[], - parseErrors: FSharpErrorInfo[], - tcErrors: FSharpErrorInfo[], + (mainInputFileName: string, + projectFileName, + tcConfig, tcGlobals, + isIncompleteTypeCheckEnvironment: bool, + builder: IncrementalBuilder, + projectOptions, + dependencyFiles, + creationErrors: FSharpDiagnostic[], + parseErrors: FSharpDiagnostic[], + tcErrors: FSharpDiagnostic[], keepAssemblyContents, - ccuSigForFile, - thisCcu, tcImports, tcAccessRights, - sResolutions, sSymbolUses, + ccuSigForFile, + thisCcu, tcImports, tcAccessRights, + sResolutions, sSymbolUses, sFallback, loadClosure, - implFileOpt, - openDeclarations) = - - let tcFileInfo = - TypeCheckInfo(tcConfig, tcGlobals, ccuSigForFile, thisCcu, tcImports, tcAccessRights, - projectFileName, mainInputFileName, sResolutions, sSymbolUses, + implFileOpt, + openDeclarations) = + + let tcFileInfo = + TypeCheckInfo(tcConfig, tcGlobals, ccuSigForFile, thisCcu, tcImports, tcAccessRights, + projectFileName, mainInputFileName, + projectOptions, + sResolutions, sSymbolUses, sFallback, loadClosure, - implFileOpt, openDeclarations) - + implFileOpt, openDeclarations) + let errors = FSharpCheckFileResults.JoinErrors(isIncompleteTypeCheckEnvironment, creationErrors, parseErrors, tcErrors) FSharpCheckFileResults (mainInputFileName, errors, Some tcFileInfo, dependencyFiles, Some builder, keepAssemblyContents) @@ -1991,95 +2155,85 @@ type FSharpCheckFileResults tcState: TcState, moduleNamesDict: ModuleNamesDict, loadClosure: LoadClosure option, - backgroundDiagnostics: (PhasedDiagnostic * FSharpErrorSeverity)[], - reactorOps: IReactorOperations, - userOpName: string, - isIncompleteTypeCheckEnvironment: bool, - builder: IncrementalBuilder, - dependencyFiles: string[], - creationErrors: FSharpErrorInfo[], - parseErrors: FSharpErrorInfo[], + backgroundDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity)[], + isIncompleteTypeCheckEnvironment: bool, + projectOptions: FSharpProjectOptions, + builder: IncrementalBuilder, + dependencyFiles: string[], + creationErrors: FSharpDiagnostic[], + parseErrors: FSharpDiagnostic[], keepAssemblyContents: bool, - suggestNamesForErrors: bool) = - async { - let! tcErrors, tcFileInfo = + suggestNamesForErrors: bool) = + cancellable { + let! tcErrors, tcFileInfo = ParseAndCheckFile.CheckOneFile - (parseResults, sourceText, mainInputFileName, projectFileName, tcConfig, tcGlobals, tcImports, - tcState, moduleNamesDict, loadClosure, backgroundDiagnostics, reactorOps, - userOpName, suggestNamesForErrors) - match tcFileInfo with - | Result.Error () -> - return FSharpCheckFileAnswer.Aborted - | Result.Ok tcFileInfo -> - let errors = FSharpCheckFileResults.JoinErrors(isIncompleteTypeCheckEnvironment, creationErrors, parseErrors, tcErrors) - let results = FSharpCheckFileResults (mainInputFileName, errors, Some tcFileInfo, dependencyFiles, Some builder, keepAssemblyContents) - return FSharpCheckFileAnswer.Succeeded(results) + (parseResults, sourceText, mainInputFileName, projectOptions, + projectFileName, tcConfig, tcGlobals, tcImports, + tcState, moduleNamesDict, loadClosure, backgroundDiagnostics, suggestNamesForErrors) + let errors = FSharpCheckFileResults.JoinErrors(isIncompleteTypeCheckEnvironment, creationErrors, parseErrors, tcErrors) + let results = FSharpCheckFileResults (mainInputFileName, errors, Some tcFileInfo, dependencyFiles, Some builder, keepAssemblyContents) + return results } -and [] FSharpCheckFileAnswer = - | Aborted - | Succeeded of FSharpCheckFileResults - - [] // 'details' is an option because the creation of the tcGlobals etc. for the project may have failed. type FSharpCheckProjectResults - (projectFileName:string, - tcConfigOption: TcConfig option, - keepAssemblyContents: bool, - errors: FSharpErrorInfo[], - details:(TcGlobals * TcImports * CcuThunk * ModuleOrNamespaceType * TcSymbolUses list * + (projectFileName:string, + tcConfigOption: TcConfig option, + keepAssemblyContents: bool, + diagnostics: FSharpDiagnostic[], + details:(TcGlobals * TcImports * CcuThunk * ModuleOrNamespaceType * Choice * TopAttribs option * IRawFSharpAssemblyData option * ILAssemblyRef * - AccessorDomain * TypedImplFile list option * string[]) option) = + AccessorDomain * TypedImplFile list option * string[] * FSharpProjectOptions) option) = - let getDetails() = - match details with - | None -> invalidOp ("The project has no results due to critical errors in the project options. Check the HasCriticalErrors before accessing the detailed results. Errors: " + String.concat "\n" [ for e in errors -> e.Message ]) + let getDetails() = + match details with + | None -> invalidOp ("The project has no results due to critical errors in the project options. Check the HasCriticalErrors before accessing the detailed results. Errors: " + String.concat "\n" [ for e in diagnostics -> e.Message ]) | Some d -> d - let getTcConfig() = - match tcConfigOption with - | None -> invalidOp ("The project has no results due to critical errors in the project options. Check the HasCriticalErrors before accessing the detailed results. Errors: " + String.concat "\n" [ for e in errors -> e.Message ]) + let getTcConfig() = + match tcConfigOption with + | None -> invalidOp ("The project has no results due to critical errors in the project options. Check the HasCriticalErrors before accessing the detailed results. Errors: " + String.concat "\n" [ for e in diagnostics -> e.Message ]) | Some d -> d - member __.Errors = errors + member _.Diagnostics = diagnostics - member __.HasCriticalErrors = details.IsNone + member _.HasCriticalErrors = details.IsNone - member __.AssemblySignature = - let (tcGlobals, tcImports, thisCcu, ccuSig, _tcSymbolUses, topAttribs, _tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles) = getDetails() + member _.AssemblySignature = + let (tcGlobals, tcImports, thisCcu, ccuSig, _builderOrSymbolUses, topAttribs, _tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles, _projectOptions) = getDetails() FSharpAssemblySignature(tcGlobals, thisCcu, ccuSig, tcImports, topAttribs, ccuSig) - member __.TypedImplementationFiles = + member _.TypedImplementationFiles = if not keepAssemblyContents then invalidOp "The 'keepAssemblyContents' flag must be set to true on the FSharpChecker in order to access the checked contents of assemblies" - let (tcGlobals, tcImports, thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, tcAssemblyExpr, _dependencyFiles) = getDetails() - let mimpls = - match tcAssemblyExpr with + let (tcGlobals, tcImports, thisCcu, _ccuSig, _builderOrSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, tcAssemblyExpr, _dependencyFiles, _projectOptions) = getDetails() + let mimpls = + match tcAssemblyExpr with | None -> [] | Some mimpls -> mimpls tcGlobals, thisCcu, tcImports, mimpls - member info.AssemblyContents = + member info.AssemblyContents = if not keepAssemblyContents then invalidOp "The 'keepAssemblyContents' flag must be set to true on the FSharpChecker in order to access the checked contents of assemblies" - let (tcGlobals, tcImports, thisCcu, ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, tcAssemblyExpr, _dependencyFiles) = getDetails() - let mimpls = - match tcAssemblyExpr with + let (tcGlobals, tcImports, thisCcu, ccuSig, _builderOrSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, tcAssemblyExpr, _dependencyFiles, _projectOptions) = getDetails() + let mimpls = + match tcAssemblyExpr with | None -> [] | Some mimpls -> mimpls FSharpAssemblyContents(tcGlobals, thisCcu, Some ccuSig, tcImports, mimpls) - member __.GetOptimizedAssemblyContents() = + member _.GetOptimizedAssemblyContents() = if not keepAssemblyContents then invalidOp "The 'keepAssemblyContents' flag must be set to true on the FSharpChecker in order to access the checked contents of assemblies" - let (tcGlobals, tcImports, thisCcu, ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, tcAssemblyExpr, _dependencyFiles) = getDetails() - let mimpls = - match tcAssemblyExpr with + let (tcGlobals, tcImports, thisCcu, ccuSig, _builderOrSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, tcAssemblyExpr, _dependencyFiles, _projectOptions) = getDetails() + let mimpls = + match tcAssemblyExpr with | None -> [] | Some mimpls -> mimpls let outfile = "" // only used if tcConfig.writeTermsToFiles is true let importMap = tcImports.GetImportMap() let optEnv0 = GetInitialOptimizationEnv (tcImports, tcGlobals) let tcConfig = getTcConfig() - let optimizedImpls, _optimizationData, _ = ApplyAllOptimizations (tcConfig, tcGlobals, (LightweightTcValForUsingInBuildMethodCall tcGlobals), outfile, importMap, false, optEnv0, thisCcu, mimpls) + let optimizedImpls, _optimizationData, _ = ApplyAllOptimizations (tcConfig, tcGlobals, (LightweightTcValForUsingInBuildMethodCall tcGlobals), outfile, importMap, false, optEnv0, thisCcu, mimpls) let mimpls = match optimizedImpls with | TypedAssemblyAfterOptimization files -> @@ -2088,23 +2242,60 @@ type FSharpCheckProjectResults FSharpAssemblyContents(tcGlobals, thisCcu, Some ccuSig, tcImports, mimpls) // Not, this does not have to be a SyncOp, it can be called from any thread - member __.GetUsesOfSymbol(symbol:FSharpSymbol, ?cancellationToken: CancellationToken) = - let (tcGlobals, _tcImports, _thisCcu, _ccuSig, tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles) = getDetails() + member _.GetUsesOfSymbol(symbol:FSharpSymbol, ?cancellationToken: CancellationToken) = + let (tcGlobals, _tcImports, _thisCcu, _ccuSig, builderOrSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles, _projectOptions) = getDetails() + + let results = + match builderOrSymbolUses with + | Choice1Of2 builder -> + builder.SourceFiles + |> Array.ofList + |> Array.collect (fun x -> + match builder.GetCheckResultsForFileInProjectEvenIfStale x with + | Some partialCheckResults -> + match partialCheckResults.TryPeekTcInfoWithExtras() with + | Some(_, tcInfoExtras) -> + tcInfoExtras.TcSymbolUses.GetUsesOfSymbol symbol.Item + | _ -> + [||] + | _ -> + [||] + ) + | Choice2Of2 tcSymbolUses -> + tcSymbolUses.GetUsesOfSymbol symbol.Item - tcSymbolUses - |> Seq.collect (fun r -> r.GetUsesOfSymbol symbol.Item) + results |> Seq.filter (fun symbolUse -> symbolUse.ItemOccurence <> ItemOccurence.RelatedText) |> Seq.distinctBy (fun symbolUse -> symbolUse.ItemOccurence, symbolUse.Range) - |> Seq.map (fun symbolUse -> + |> Seq.map (fun symbolUse -> cancellationToken |> Option.iter (fun ct -> ct.ThrowIfCancellationRequested()) - FSharpSymbolUse(tcGlobals, symbolUse.DisplayEnv, symbol, symbolUse.ItemOccurence, symbolUse.Range)) + FSharpSymbolUse(tcGlobals, symbolUse.DisplayEnv, symbol, symbolUse.ItemOccurence, symbolUse.Range)) |> Seq.toArray // Not, this does not have to be a SyncOp, it can be called from any thread - member __.GetAllUsesOfAllSymbols(?cancellationToken: CancellationToken) = - let (tcGlobals, tcImports, thisCcu, ccuSig, tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles) = getDetails() + member _.GetAllUsesOfAllSymbols(?cancellationToken: CancellationToken) = + let (tcGlobals, tcImports, thisCcu, ccuSig, builderOrSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles, _projectOptions) = getDetails() let cenv = SymbolEnv(tcGlobals, thisCcu, Some ccuSig, tcImports) + let tcSymbolUses = + match builderOrSymbolUses with + | Choice1Of2 builder -> + builder.SourceFiles + |> Array.ofList + |> Array.map (fun x -> + match builder.GetCheckResultsForFileInProjectEvenIfStale x with + | Some partialCheckResults -> + match partialCheckResults.TryPeekTcInfoWithExtras() with + | Some(_, tcInfoExtras) -> + tcInfoExtras.TcSymbolUses + | _ -> + TcSymbolUses.Empty + | _ -> + TcSymbolUses.Empty + ) + | Choice2Of2 tcSymbolUses -> + [|tcSymbolUses|] + [| for r in tcSymbolUses do for symbolUseChunk in r.AllUsesOfSymbols do for symbolUse in symbolUseChunk do @@ -2113,29 +2304,28 @@ type FSharpCheckProjectResults let symbol = FSharpSymbol.Create(cenv, symbolUse.Item) yield FSharpSymbolUse(tcGlobals, symbolUse.DisplayEnv, symbol, symbolUse.ItemOccurence, symbolUse.Range) |] - member __.ProjectContext = - let (tcGlobals, tcImports, thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, ad, _tcAssemblyExpr, _dependencyFiles) = getDetails() - let assemblies = + member _.ProjectContext = + let (tcGlobals, tcImports, thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, ad, _tcAssemblyExpr, _dependencyFiles, projectOptions) = getDetails() + let assemblies = tcImports.GetImportedAssemblies() |> List.map (fun x -> FSharpAssembly(tcGlobals, tcImports, x.FSharpViewOfMetadata)) - FSharpProjectContext(thisCcu, assemblies, ad) + FSharpProjectContext(thisCcu, assemblies, ad, projectOptions) - member __.RawFSharpAssemblyData = - let (_tcGlobals, _tcImports, _thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles) = getDetails() + member _.RawFSharpAssemblyData = + let (_tcGlobals, _tcImports, _thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles, _projectOptions) = getDetails() tcAssemblyData - member __.DependencyFiles = - let (_tcGlobals, _tcImports, _thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, dependencyFiles) = getDetails() + member _.DependencyFiles = + let (_tcGlobals, _tcImports, _thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, dependencyFiles, _projectOptions) = getDetails() dependencyFiles - member __.AssemblyFullName = - let (_tcGlobals, _tcImports, _thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles) = getDetails() + member _.AssemblyFullName = + let (_tcGlobals, _tcImports, _thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles, _projectOptions) = getDetails() ilAssemRef.QualifiedName - override __.ToString() = "FSharpCheckProjectResults(" + projectFileName + ")" + override _.ToString() = "FSharpCheckProjectResults(" + projectFileName + ")" -type FsiInteractiveChecker(legacyReferenceResolver, - ops: IReactorOperations, +type FsiInteractiveChecker(legacyReferenceResolver, tcConfig: TcConfig, tcGlobals: TcGlobals, tcImports: TcImports, @@ -2143,57 +2333,74 @@ type FsiInteractiveChecker(legacyReferenceResolver, let keepAssemblyContents = false - member __.ParseAndCheckInteraction (ctok, sourceText: ISourceText, ?userOpName: string) = - async { + member _.ParseAndCheckInteraction (sourceText: ISourceText, ?userOpName: string) = + cancellable { let userOpName = defaultArg userOpName "Unknown" let filename = Path.Combine(tcConfig.implicitIncludeDir, "stdin.fsx") let suggestNamesForErrors = true // Will always be true, this is just for readability // Note: projectSourceFiles is only used to compute isLastCompiland, and is ignored if Build.IsScript(mainInputFileName) is true (which it is in this case). let parsingOptions = FSharpParsingOptions.FromTcConfig(tcConfig, [| filename |], true) - let parseErrors, parseTreeOpt, anyErrors = ParseAndCheckFile.parseFile (sourceText, filename, parsingOptions, userOpName, suggestNamesForErrors) + let parseErrors, parsedInput, anyErrors = ParseAndCheckFile.parseFile (sourceText, filename, parsingOptions, userOpName, suggestNamesForErrors) let dependencyFiles = [| |] // interactions have no dependencies - let parseResults = FSharpParseFileResults(parseErrors, parseTreeOpt, parseHadErrors = anyErrors, dependencyFiles = dependencyFiles) - + let parseResults = FSharpParseFileResults(parseErrors, parsedInput, parseHadErrors = anyErrors, dependencyFiles = dependencyFiles) + let backgroundDiagnostics = [| |] let reduceMemoryUsage = ReduceMemoryFlag.Yes - let assumeDotNetFramework = tcConfig.primaryAssembly = PrimaryAssembly.Mscorlib + let assumeDotNetFramework = (tcConfig.primaryAssembly = PrimaryAssembly.Mscorlib) - let applyCompilerOptions tcConfigB = - let fsiCompilerOptions = CompilerOptions.GetCoreFsiCompilerOptions tcConfigB + let applyCompilerOptions tcConfigB = + let fsiCompilerOptions = CompilerOptions.GetCoreFsiCompilerOptions tcConfigB CompilerOptions.ParseCompilerOptions (ignore, fsiCompilerOptions, [ ]) let loadClosure = - LoadClosure.ComputeClosureOfScriptText(ctok, legacyReferenceResolver, defaultFSharpBinariesDir, + LoadClosure.ComputeClosureOfScriptText(legacyReferenceResolver, defaultFSharpBinariesDir, filename, sourceText, CodeContext.Editing, tcConfig.useSimpleResolution, tcConfig.useFsiAuxLib, - tcConfig.useSdkRefs, new Lexhelp.LexResourceManager(), + tcConfig.useSdkRefs, tcConfig.sdkDirOverride, new Lexhelp.LexResourceManager(), applyCompilerOptions, assumeDotNetFramework, tryGetMetadataSnapshot=(fun _ -> None), reduceMemoryUsage=reduceMemoryUsage, dependencyProvider=tcImports.DependencyProvider) - let! tcErrors, tcFileInfo = + let projectOptions = + { + ProjectFileName="script.fsproj" + ProjectId=None + SourceFiles=[||] + OtherOptions=[||] + ReferencedProjects=[||] + IsIncompleteTypeCheckEnvironment=false + UseScriptResolutionRules =false + LoadTime=System.DateTime.Now + UnresolvedReferences =None + OriginalLoadReferences = [] + Stamp = None + } + + let! tcErrors, tcFileInfo = ParseAndCheckFile.CheckOneFile - (parseResults, sourceText, filename, "project", - tcConfig, tcGlobals, tcImports, tcState, + (parseResults, sourceText, filename, projectOptions, projectOptions.ProjectFileName, + tcConfig, tcGlobals, tcImports, tcState, Map.empty, Some loadClosure, backgroundDiagnostics, - ops, userOpName, suggestNamesForErrors) - - return - match tcFileInfo with - | Result.Ok tcFileInfo -> - let errors = Array.append parseErrors tcErrors - let typeCheckResults = FSharpCheckFileResults (filename, errors, Some tcFileInfo, dependencyFiles, None, false) - let projectResults = - FSharpCheckProjectResults (filename, Some tcConfig, - keepAssemblyContents, errors, - Some(tcGlobals, tcImports, tcFileInfo.ThisCcu, tcFileInfo.CcuSigForFile, - [tcFileInfo.ScopeSymbolUses], None, None, mkSimpleAssemblyRef "stdin", - tcState.TcEnvFromImpls.AccessRights, None, dependencyFiles)) - - parseResults, typeCheckResults, projectResults - - | Result.Error () -> - failwith "unexpected aborted" + suggestNamesForErrors) + + let errors = Array.append parseErrors tcErrors + let typeCheckResults = FSharpCheckFileResults (filename, errors, Some tcFileInfo, dependencyFiles, None, false) + let projectResults = + FSharpCheckProjectResults (filename, Some tcConfig, + keepAssemblyContents, errors, + Some(tcGlobals, tcImports, tcFileInfo.ThisCcu, tcFileInfo.CcuSigForFile, + (Choice2Of2 tcFileInfo.ScopeSymbolUses), None, None, mkSimpleAssemblyRef "stdin", + tcState.TcEnvFromImpls.AccessRights, None, dependencyFiles, + projectOptions)) + + return parseResults, typeCheckResults, projectResults } +/// The result of calling TypeCheckResult including the possibility of abort and background compiler not caught up. +type [] public FSharpCheckFileAnswer = + /// Aborted because cancellation caused an abandonment of the operation + | Aborted + + /// Success + | Succeeded of FSharpCheckFileResults diff --git a/src/fsharp/service/FSharpCheckerResults.fsi b/src/fsharp/service/FSharpCheckerResults.fsi index 95e8156b748..1858e4b24db 100644 --- a/src/fsharp/service/FSharpCheckerResults.fsi +++ b/src/fsharp/service/FSharpCheckerResults.fsi @@ -1,55 +1,163 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices - +namespace FSharp.Compiler.CodeAnalysis +open System +open System.IO open System.Threading -open FSharp.Compiler +open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.ILBinaryReader open FSharp.Compiler.AccessibilityLogic +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerImports +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.EditorServices open FSharp.Compiler.ErrorLogger +open FSharp.Compiler.Symbols open FSharp.Compiler.NameResolution open FSharp.Compiler.ParseAndCheckInputs -open FSharp.Compiler.Range open FSharp.Compiler.ScriptClosure -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax open FSharp.Compiler.TypedTree +open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TcGlobals open FSharp.Compiler.Text -open FSharp.Compiler.CheckDeclarations -/// Represents the reason why the GetDeclarationLocation operation failed. -[] -type public FSharpFindDeclFailureReason = +/// Delays the creation of an ILModuleReader +[] +type internal DelayedILModuleReader = + + new : name: string * getStream: (CancellationToken -> Stream option) -> DelayedILModuleReader + + /// Will lazily create the ILModuleReader. + /// Is only evaluated once and can be called by multiple threads. + member TryGetILModuleReader : unit -> Cancellable + +/// Unused in this API +type public FSharpUnresolvedReferencesSet = + internal + | FSharpUnresolvedReferencesSet of UnresolvedAssemblyReference list + +/// A set of information describing a project or script build configuration. +type public FSharpProjectOptions = + { + // Note that this may not reduce to just the project directory, because there may be two projects in the same directory. + ProjectFileName: string + + /// This is the unique identifier for the project, it is case sensitive. If it's None, will key off of ProjectFileName in our caching. + ProjectId: string option + + /// The files in the project + SourceFiles: string[] + + /// Additional command line argument options for the project. These can include additional files and references. + OtherOptions: string[] + + /// The command line arguments for the other projects referenced by this project, indexed by the + /// exact text used in the "-r:" reference in FSharpProjectOptions. + ReferencedProjects: FSharpReferencedProject[] + + /// When true, the typechecking environment is known a priori to be incomplete, for + /// example when a .fs file is opened outside of a project. In this case, the number of error + /// messages reported is reduced. + IsIncompleteTypeCheckEnvironment: bool + + /// When true, use the reference resolution rules for scripts rather than the rules for compiler. + UseScriptResolutionRules: bool + + /// Timestamp of project/script load, used to differentiate between different instances of a project load. + /// This ensures that a complete reload of the project or script type checking + /// context occurs on project or script unload/reload. + LoadTime: DateTime + + /// Unused in this API and should be 'None' when used as user-specified input + UnresolvedReferences: FSharpUnresolvedReferencesSet option + + /// Unused in this API and should be '[]' when used as user-specified input + OriginalLoadReferences: (range * string * string) list + + /// An optional stamp to uniquely identify this set of options + /// If two sets of options both have stamps, then they are considered equal + /// if and only if the stamps are equal + Stamp: int64 option + } + + /// Whether the two parse options refer to the same project. + static member internal UseSameProject: options1: FSharpProjectOptions * options2: FSharpProjectOptions -> bool + + /// Compare two options sets with respect to the parts of the options that are important to building. + static member internal AreSameForChecking: options1: FSharpProjectOptions * options2: FSharpProjectOptions -> bool + + /// Compute the project directory. + member internal ProjectDirectory: string - /// Generic reason: no particular information about error apart from a message - | Unknown of message: string +and [] public FSharpReferencedProject = + internal + | FSharpReference of projectFileName: string * options: FSharpProjectOptions + | PEReference of projectFileName: string * stamp: DateTime * delayedReader: DelayedILModuleReader + | ILModuleReference of projectFileName: string * getStamp: (unit -> DateTime) * getReader: (unit -> ILModuleReader) - /// Source code file is not available - | NoSourceCode + member FileName : string - /// Trying to find declaration of ProvidedType without TypeProviderDefinitionLocationAttribute - | ProvidedType of string + /// Creates a reference for an F# project. The physical data for it is stored/cached inside of the compiler service. + static member CreateFSharp : projectFileName: string * options: FSharpProjectOptions -> FSharpReferencedProject - /// Trying to find declaration of ProvidedMember without TypeProviderDefinitionLocationAttribute - | ProvidedMember of string + /// Creates a reference for any portable executable, including F#. The stream is owned by this reference. + /// The stream will be automatically disposed when there are no references to FSharpReferencedProject and is GC collected. + /// Once the stream is evaluated, the function that constructs the stream will no longer be referenced by anything. + /// If the stream evaluation throws an exception, it will be automatically handled. + static member CreatePortableExecutable : projectFileName: string * stamp: DateTime * getStream: (CancellationToken -> Stream option) -> FSharpReferencedProject -/// Represents the result of the GetDeclarationLocation operation. -[] -type public FSharpFindDeclResult = + /// Creates a reference from an ILModuleReader. + static member CreateFromILModuleReader : projectFileName: string * getStamp: (unit -> DateTime) * getReader: (unit -> ILModuleReader) -> FSharpReferencedProject - /// Indicates a declaration location was not found, with an additional reason - | DeclNotFound of FSharpFindDeclFailureReason +/// Represents the use of an F# symbol from F# source code +[] +type public FSharpSymbolUse = + + /// The symbol referenced + member Symbol: FSharpSymbol + + /// The display context active at the point where the symbol is used. Can be passed to FSharpType.Format + /// and other methods to format items in a way that is suitable for a specific source code location. + member DisplayContext: FSharpDisplayContext + + /// Indicates if the reference is a definition for the symbol, either in a signature or implementation + member IsFromDefinition: bool + + /// Indicates if the reference is in a pattern + member IsFromPattern: bool + + /// Indicates if the reference is in a syntactic type + member IsFromType: bool + + /// Indicates if the reference is in an attribute + member IsFromAttribute: bool + + /// Indicates if the reference is via the member being implemented in a class or object expression + member IsFromDispatchSlotImplementation: bool + + /// Indicates if the reference is either a builder or a custom operation in a computation expression + member IsFromComputationExpression: bool + + /// Indicates if the reference is in open statement + member IsFromOpenStatement: bool + + /// The file name the reference occurs in + member FileName: string + + /// The range of text representing the reference to the symbol + member Range: range - /// Indicates a declaration location was found - | DeclFound of range + /// Indicates if the FSharpSymbolUse is declared as private + member IsPrivateToFile: bool + + // For internal use only + internal new: g:TcGlobals * denv: DisplayEnv * symbol:FSharpSymbol * itemOcc:ItemOccurence * range: range -> FSharpSymbolUse - /// Indicates an external declaration was found - | ExternalDecl of assembly : string * externalSym : ExternalSymbol - /// Represents the checking context implied by the ProjectOptions [] type public FSharpProjectContext = @@ -60,12 +168,15 @@ type public FSharpProjectContext = /// Get the accessibility rights for this project context w.r.t. InternalsVisibleTo attributes granting access to other assemblies member AccessibilityRights : FSharpAccessibilityRights + /// Get the project options + member ProjectOptions: FSharpProjectOptions + /// Options used to determine active --define conditionals and other options relevant to parsing files in a project type public FSharpParsingOptions = { SourceFiles: string[] ConditionalCompilationDefines: string list - ErrorSeverityOptions: FSharpErrorSeverityOptions + ErrorSeverityOptions: FSharpDiagnosticOptions IsInteractive: bool LightSyntax: bool option CompilingFsLib: bool @@ -81,7 +192,7 @@ type public FSharpParsingOptions = [] type public FSharpCheckFileResults = /// The errors returned by parsing a source file. - member Errors : FSharpErrorInfo[] + member Diagnostics: FSharpDiagnostic[] /// Get a view of the contents of the assembly up to and including the file just checked member PartialAssemblySignature : FSharpAssemblySignature @@ -119,7 +230,7 @@ type public FSharpCheckFileResults = /// /// Function that returns all entities from current and referenced assemblies. /// - member GetDeclarationListInfo: parsedFileResults:FSharpParseFileResults option * line: int * lineText:string * partialName: PartialLongName * ?getAllEntities: (unit -> AssemblySymbol list) -> FSharpDeclarationListInfo + member GetDeclarationListInfo: parsedFileResults:FSharpParseFileResults option * line: int * lineText:string * partialName: PartialLongName * ?getAllEntities: (unit -> AssemblySymbol list) -> DeclarationListInfo /// Get the items for a declaration list in FSharpSymbol format /// @@ -148,16 +259,7 @@ type public FSharpCheckFileResults = /// The text of the line where the information is being requested. /// The identifiers at the location where the information is being requested. /// Used to discriminate between 'identifiers', 'strings' and others. For strings, an attempt is made to give a tooltip for a #r "..." location. Use a value from FSharpTokenInfo.Tag, or FSharpTokenTag.Identifier, unless you have other information available. - member GetStructuredToolTipText : line:int * colAtEndOfNames:int * lineText:string * names:string list * tokenTag:int -> FSharpStructuredToolTipText - - /// Compute a formatted tooltip for the given location - /// - /// The line number where the information is being requested. - /// The column number at the end of the identifiers where the information is being requested. - /// The text of the line where the information is being requested. - /// The identifiers at the location where the information is being requested. - /// Used to discriminate between 'identifiers', 'strings' and others. For strings, an attempt is made to give a tooltip for a #r "..." location. Use a value from FSharpTokenInfo.Tag, or FSharpTokenTag.Identifier, unless you have other information available. - member GetToolTipText : line:int * colAtEndOfNames:int * lineText:string * names:string list * tokenTag:int -> FSharpToolTipText + member GetToolTip: line:int * colAtEndOfNames:int * lineText:string * names:string list * tokenTag:int -> ToolTipText /// Compute the Visual Studio F1-help key identifier for the given location, based on name resolution results /// @@ -173,7 +275,7 @@ type public FSharpCheckFileResults = /// The column number at the end of the identifiers where the information is being requested. /// The text of the line where the information is being requested. /// The identifiers at the location where the information is being requested. - member GetMethods : line:int * colAtEndOfNames:int * lineText:string * names:string list option -> FSharpMethodGroup + member GetMethods : line:int * colAtEndOfNames:int * lineText:string * names:string list option -> MethodGroup /// Compute a set of method overloads to show in a dialog relevant to the given code location. The resulting method overloads are returned as symbols. /// The line number where the information is being requested. @@ -189,7 +291,7 @@ type public FSharpCheckFileResults = /// The text of the line where the information is being requested. /// The identifiers at the location where the information is being requested. /// If not given, then get the location of the symbol. If false, then prefer the location of the corresponding symbol in the implementation of the file (rather than the signature if present). If true, prefer the location of the corresponding symbol in the signature of the file (rather than the implementation). - member GetDeclarationLocation : line:int * colAtEndOfNames:int * lineText:string * names:string list * ?preferFlag:bool -> FSharpFindDeclResult + member GetDeclarationLocation : line:int * colAtEndOfNames:int * lineText:string * names:string list * ?preferFlag:bool -> FindDeclResult /// Resolve the names at the given location to a use of symbol. /// @@ -200,7 +302,7 @@ type public FSharpCheckFileResults = member GetSymbolUseAtLocation : line:int * colAtEndOfNames:int * lineText:string * names:string list -> FSharpSymbolUse option /// Get any extra colorization info that is available after the typecheck - member GetSemanticClassification : range option -> struct (range * SemanticClassificationType)[] + member GetSemanticClassification : range option -> SemanticClassificationItem[] /// Get the locations of format specifiers [] @@ -232,10 +334,13 @@ type public FSharpCheckFileResults = /// Open declarations in the file, including auto open modules. member OpenDeclarations: FSharpOpenDeclaration[] + /// Lays out and returns the formatted signature for the typechecked file as source text. + member GenerateSignature: unit -> ISourceText option + /// Internal constructor static member internal MakeEmpty : filename: string * - creationErrors: FSharpErrorInfo[] * + creationErrors: FSharpDiagnostic[] * keepAssemblyContents: bool -> FSharpCheckFileResults @@ -247,10 +352,11 @@ type public FSharpCheckFileResults = tcGlobals: TcGlobals * isIncompleteTypeCheckEnvironment: bool * builder: IncrementalBuilder * + projectOptions: FSharpProjectOptions * dependencyFiles: string[] * - creationErrors: FSharpErrorInfo[] * - parseErrors: FSharpErrorInfo[] * - tcErrors: FSharpErrorInfo[] * + creationErrors: FSharpDiagnostic[] * + parseErrors: FSharpDiagnostic[] * + tcErrors: FSharpDiagnostic[] * keepAssemblyContents: bool * ccuSigForFile: ModuleOrNamespaceType * thisCcu: CcuThunk * @@ -276,17 +382,16 @@ type public FSharpCheckFileResults = tcState: TcState * moduleNamesDict: ModuleNamesDict * loadClosure: LoadClosure option * - backgroundDiagnostics: (PhasedDiagnostic * FSharpErrorSeverity)[] * - reactorOps: IReactorOperations * - userOpName: string * + backgroundDiagnostics: (PhasedDiagnostic * FSharpDiagnosticSeverity)[] * isIncompleteTypeCheckEnvironment: bool * + projectOptions: FSharpProjectOptions * builder: IncrementalBuilder * dependencyFiles: string[] * - creationErrors:FSharpErrorInfo[] * - parseErrors:FSharpErrorInfo[] * + creationErrors:FSharpDiagnostic[] * + parseErrors:FSharpDiagnostic[] * keepAssemblyContents: bool * suggestNamesForErrors: bool - -> Async + -> Cancellable /// The result of calling TypeCheckResult including the possibility of abort and background compiler not caught up. and [] public FSharpCheckFileAnswer = @@ -301,7 +406,7 @@ and [] public FSharpCheckFileAnswer = type public FSharpCheckProjectResults = /// The errors returned by processing the project - member Errors: FSharpErrorInfo[] + member Diagnostics: FSharpDiagnostic[] /// Get a view of the overall signature of the assembly. Only valid to use if HasCriticalErrors is false. member AssemblySignature: FSharpAssemblySignature @@ -336,8 +441,19 @@ type public FSharpCheckProjectResults = projectFileName:string * tcConfigOption: TcConfig option * keepAssemblyContents: bool * - errors: FSharpErrorInfo[] * - details:(TcGlobals * TcImports * CcuThunk * ModuleOrNamespaceType * TcSymbolUses list * TopAttribs option * IRawFSharpAssemblyData option * ILAssemblyRef * AccessorDomain * TypedImplFile list option * string[]) option + diagnostics: FSharpDiagnostic[] * + details:(TcGlobals * + TcImports * + CcuThunk * + ModuleOrNamespaceType * + Choice * + TopAttribs option * + IRawFSharpAssemblyData option * + ILAssemblyRef * + AccessorDomain * + TypedImplFile list option * + string[] * + FSharpProjectOptions) option -> FSharpCheckProjectResults module internal ParseAndCheckFile = @@ -348,7 +464,7 @@ module internal ParseAndCheckFile = options: FSharpParsingOptions * userOpName: string * suggestNamesForErrors: bool - -> FSharpErrorInfo[] * ParsedInput option * bool + -> FSharpDiagnostic[] * ParsedInput * bool val matchBraces: sourceText: ISourceText * @@ -362,8 +478,7 @@ module internal ParseAndCheckFile = // Used internally to provide intellisense over F# Interactive. type internal FsiInteractiveChecker = internal new: - ReferenceResolver.Resolver * - ops: IReactorOperations * + LegacyReferenceResolver * tcConfig: TcConfig * tcGlobals: TcGlobals * tcImports: TcImports * @@ -371,12 +486,10 @@ type internal FsiInteractiveChecker = -> FsiInteractiveChecker member internal ParseAndCheckInteraction : - ctok: CompilationThreadToken * sourceText:ISourceText * ?userOpName: string - -> Async + -> Cancellable module internal FSharpCheckerResultsSettings = val defaultFSharpBinariesDir: string - val maxTimeShareMilliseconds : int64 diff --git a/src/fsharp/service/FSharpParseFileResults.fs b/src/fsharp/service/FSharpParseFileResults.fs new file mode 100644 index 00000000000..7b2ecf82a3f --- /dev/null +++ b/src/fsharp/service/FSharpParseFileResults.fs @@ -0,0 +1,757 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.CodeAnalysis + +open System +open System.IO +open System.Collections.Generic +open System.Diagnostics +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras +open FSharp.Compiler.CompilerConfig +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTreeOps +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range + +module SourceFileImpl = + let IsInterfaceFile file = + let ext = Path.GetExtension file + 0 = String.Compare(".fsi", ext, StringComparison.OrdinalIgnoreCase) + + /// Additional #defines that should be in place when editing a file in a file editor such as VS. + let AdditionalDefinesForUseInEditor(isInteractive: bool) = + if isInteractive then ["INTERACTIVE";"EDITING"] // This is still used by the foreground parse + else ["COMPILED";"EDITING"] + +type CompletionPath = string list * string option // plid * residue + +[] +type FSharpInheritanceOrigin = + | Class + | Interface + | Unknown + +[] +type InheritanceContext = + | Class + | Interface + | Unknown + +[] +type RecordContext = + | CopyOnUpdate of range: range * path: CompletionPath + | Constructor of typeName: string + | New of path: CompletionPath + +[] +type CompletionContext = + /// Completion context cannot be determined due to errors + | Invalid + + /// Completing something after the inherit keyword + | Inherit of context: InheritanceContext * path: CompletionPath + + /// Completing records field + | RecordField of context: RecordContext + + | RangeOperator + + /// Completing named parameters\setters in parameter list of constructor\method calls + /// end of name ast node * list of properties\parameters that were already set + | ParameterList of pos * HashSet + + | AttributeApplication + + | OpenDeclaration of isOpenType: bool + + /// Completing pattern type (e.g. foo (x: |)) + | PatternType + +//---------------------------------------------------------------------------- +// FSharpParseFileResults +//---------------------------------------------------------------------------- + +[] +type FSharpParseFileResults(diagnostics: FSharpDiagnostic[], input: ParsedInput, parseHadErrors: bool, dependencyFiles: string[]) = + + member _.Diagnostics = diagnostics + + member _.ParseHadErrors = parseHadErrors + + member _.ParseTree = input + + member _.TryRangeOfNameOfNearestOuterBindingContainingPos pos = + let tryGetIdentRangeFromBinding binding = + match binding with + | SynBinding(_, _, _, _, _, _, _, headPat, _, _, _, _) -> + match headPat with + | SynPat.LongIdent (longIdentWithDots, _, _, _, _, _) -> + Some longIdentWithDots.Range + | SynPat.As (_, SynPat.Named (ident, false, _, _), _) + | SynPat.Named (ident, false, _, _) -> + Some ident.idRange + | _ -> + None + + let rec walkBinding expr workingRange = + match expr with + + // This lets us dive into subexpressions that may contain the binding we're after + | SynExpr.Sequential (_, _, expr1, expr2, _) -> + if rangeContainsPos expr1.Range pos then + walkBinding expr1 workingRange + else + walkBinding expr2 workingRange + + + | SynExpr.LetOrUse(_, _, bindings, bodyExpr, _) -> + let potentialNestedRange = + bindings + |> List.tryFind (fun binding -> rangeContainsPos binding.RangeOfBindingWithRhs pos) + |> Option.bind tryGetIdentRangeFromBinding + match potentialNestedRange with + | Some range -> + walkBinding bodyExpr range + | None -> + walkBinding bodyExpr workingRange + + + | _ -> + Some workingRange + + SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with + override _.VisitExpr(_, _, defaultTraverse, expr) = + defaultTraverse expr + + override _.VisitBinding(_path, defaultTraverse, binding) = + match binding with + | SynBinding(_, _, _, _, _, _, SynValData (None, _, _), _, _, expr, _range, _) as b when rangeContainsPos b.RangeOfBindingWithRhs pos -> + match tryGetIdentRangeFromBinding b with + | Some range -> walkBinding expr range + | None -> None + | _ -> defaultTraverse binding }) + + member _.TryIdentOfPipelineContainingPosAndNumArgsApplied pos = + SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with + member _.VisitExpr(_, _, defaultTraverse, expr) = + match expr with + | SynExpr.App (_, _, SynExpr.App(_, true, SynExpr.Ident ident, _, _), argExpr, _) when rangeContainsPos argExpr.Range pos -> + match argExpr with + | SynExpr.App(_, _, _, SynExpr.Paren(expr, _, _, _), _) when rangeContainsPos expr.Range pos -> + None + | _ -> + if ident.idText = "op_PipeRight" then + Some (ident, 1) + elif ident.idText = "op_PipeRight2" then + Some (ident, 2) + elif ident.idText = "op_PipeRight3" then + Some (ident, 3) + else + None + | _ -> defaultTraverse expr + }) + + member _.IsPosContainedInApplication pos = + let result = + SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with + member _.VisitExpr(_, traverseSynExpr, defaultTraverse, expr) = + match expr with + | SynExpr.TypeApp (_, _, _, _, _, _, range) when rangeContainsPos range pos -> + Some range + | SynExpr.App(_, _, _, SynExpr.CompExpr (_, _, expr, _), range) when rangeContainsPos range pos -> + traverseSynExpr expr + | SynExpr.App (_, _, _, _, range) when rangeContainsPos range pos -> + Some range + | _ -> defaultTraverse expr + }) + result.IsSome + + member _.TryRangeOfFunctionOrMethodBeingApplied pos = + let rec getIdentRangeForFuncExprInApp traverseSynExpr expr pos = + match expr with + | SynExpr.Ident ident -> Some ident.idRange + + | SynExpr.LongIdent (_, _, _, range) -> Some range + + | SynExpr.Paren (expr, _, _, range) when rangeContainsPos range pos -> + getIdentRangeForFuncExprInApp traverseSynExpr expr pos + + | SynExpr.TypeApp (expr, _, _, _, _, _, _) -> + getIdentRangeForFuncExprInApp traverseSynExpr expr pos + + | SynExpr.App (_, _, funcExpr, argExpr, _) -> + match argExpr with + | SynExpr.App (_, _, _, _, range) when rangeContainsPos range pos -> + getIdentRangeForFuncExprInApp traverseSynExpr argExpr pos + + // Special case: `async { ... }` is actually a CompExpr inside of the argExpr of a SynExpr.App + | SynExpr.CompExpr (_, _, expr, range) when rangeContainsPos range pos -> + getIdentRangeForFuncExprInApp traverseSynExpr expr pos + + | SynExpr.Paren (expr, _, _, range) when rangeContainsPos range pos -> + getIdentRangeForFuncExprInApp traverseSynExpr expr pos + + | _ -> + match funcExpr with + | SynExpr.App (_, true, _, _, _) when rangeContainsPos argExpr.Range pos -> + // x |> List.map + // Don't dive into the funcExpr (the operator expr) + // because we dont want to offer sig help for that! + getIdentRangeForFuncExprInApp traverseSynExpr argExpr pos + | _ -> + // Generally, we want to dive into the func expr to get the range + // of the identifier of the function we're after + getIdentRangeForFuncExprInApp traverseSynExpr funcExpr pos + + | SynExpr.LetOrUse (_, _, bindings, body, range) when rangeContainsPos range pos -> + let binding = + bindings + |> List.tryFind (fun x -> rangeContainsPos x.RangeOfBindingWithRhs pos) + match binding with + | Some(SynBinding.SynBinding(_, _, _, _, _, _, _, _, _, expr, _, _)) -> + getIdentRangeForFuncExprInApp traverseSynExpr expr pos + | None -> + getIdentRangeForFuncExprInApp traverseSynExpr body pos + + | SynExpr.IfThenElse (ifExpr, thenExpr, elseExpr, _, _, _, range) when rangeContainsPos range pos -> + if rangeContainsPos ifExpr.Range pos then + getIdentRangeForFuncExprInApp traverseSynExpr ifExpr pos + elif rangeContainsPos thenExpr.Range pos then + getIdentRangeForFuncExprInApp traverseSynExpr thenExpr pos + else + match elseExpr with + | None -> None + | Some expr -> + getIdentRangeForFuncExprInApp traverseSynExpr expr pos + + | SynExpr.Match (_, expr, clauses, range) when rangeContainsPos range pos -> + if rangeContainsPos expr.Range pos then + getIdentRangeForFuncExprInApp traverseSynExpr expr pos + else + let clause = clauses |> List.tryFind (fun clause -> rangeContainsPos clause.Range pos) + match clause with + | None -> None + | Some clause -> + match clause with + | SynMatchClause.SynMatchClause (_, whenExpr, resultExpr, _, _) -> + match whenExpr with + | None -> + getIdentRangeForFuncExprInApp traverseSynExpr resultExpr pos + | Some whenExpr -> + if rangeContainsPos whenExpr.Range pos then + getIdentRangeForFuncExprInApp traverseSynExpr whenExpr pos + else + getIdentRangeForFuncExprInApp traverseSynExpr resultExpr pos + + + // Ex: C.M(x, y, ...) <--- We want to find where in the tupled application the call is being made + | SynExpr.Tuple(_, exprs, _, tupRange) when rangeContainsPos tupRange pos -> + let expr = exprs |> List.tryFind (fun expr -> rangeContainsPos expr.Range pos) + match expr with + | None -> None + | Some expr -> + getIdentRangeForFuncExprInApp traverseSynExpr expr pos + + // Capture the body of a lambda, often nested in a call to a collection function + | SynExpr.Lambda(_, _, _args, body, _, _) when rangeContainsPos body.Range pos -> + getIdentRangeForFuncExprInApp traverseSynExpr body pos + + | SynExpr.Do(expr, range) when rangeContainsPos range pos -> + getIdentRangeForFuncExprInApp traverseSynExpr expr pos + + | SynExpr.Assert(expr, range) when rangeContainsPos range pos -> + getIdentRangeForFuncExprInApp traverseSynExpr expr pos + + | SynExpr.ArbitraryAfterError (_debugStr, range) when rangeContainsPos range pos -> + Some range + + | expr -> + traverseSynExpr expr + |> Option.map (fun expr -> expr) + + SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with + member _.VisitExpr(_, traverseSynExpr, defaultTraverse, expr) = + match expr with + | SynExpr.TypeApp (expr, _, _, _, _, _, range) when rangeContainsPos range pos -> + getIdentRangeForFuncExprInApp traverseSynExpr expr pos + | SynExpr.App (_, _, _funcExpr, _, range) as app when rangeContainsPos range pos -> + getIdentRangeForFuncExprInApp traverseSynExpr app pos + | _ -> defaultTraverse expr + }) + + member _.GetAllArgumentsForFunctionApplicationAtPostion pos = + SynExprAppLocationsImpl.getAllCurriedArgsAtPosition pos input + + member _.TryRangeOfParenEnclosingOpEqualsGreaterUsage opGreaterEqualPos = + let (|Ident|_|) ofName = + function | SynExpr.Ident ident when ident.idText = ofName -> Some () + | _ -> None + let (|InfixAppOfOpEqualsGreater|_|) = + function | SynExpr.App(ExprAtomicFlag.NonAtomic, false, SynExpr.App(ExprAtomicFlag.NonAtomic, true, Ident "op_EqualsGreater", actualParamListExpr, _), actualLambdaBodyExpr, _) -> + Some (actualParamListExpr, actualLambdaBodyExpr) + | _ -> None + + SyntaxTraversal.Traverse(opGreaterEqualPos, input, { new SyntaxVisitorBase<_>() with + member _.VisitExpr(_, _, defaultTraverse, expr) = + match expr with + | SynExpr.Paren((InfixAppOfOpEqualsGreater(lambdaArgs, lambdaBody) as app), _, _, _) -> + Some (app.Range, lambdaArgs.Range, lambdaBody.Range) + | _ -> defaultTraverse expr + + member _.VisitBinding(_path, defaultTraverse, binding) = + match binding with + | SynBinding(_, SynBindingKind.Normal, _, _, _, _, _, _, _, (InfixAppOfOpEqualsGreater(lambdaArgs, lambdaBody) as app), _, _) -> + Some(app.Range, lambdaArgs.Range, lambdaBody.Range) + | _ -> defaultTraverse binding }) + + member _.TryRangeOfExprInYieldOrReturn pos = + SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with + member _.VisitExpr(_path, _, defaultTraverse, expr) = + match expr with + | SynExpr.YieldOrReturn(_, expr, range) + | SynExpr.YieldOrReturnFrom(_, expr, range) when rangeContainsPos range pos -> + Some expr.Range + | _ -> defaultTraverse expr }) + + member _.TryRangeOfRecordExpressionContainingPos pos = + SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with + member _.VisitExpr(_, _, defaultTraverse, expr) = + match expr with + | SynExpr.Record(_, _, _, range) when rangeContainsPos range pos -> + Some range + | _ -> defaultTraverse expr }) + + member _.TryRangeOfRefCellDereferenceContainingPos expressionPos = + SyntaxTraversal.Traverse(expressionPos, input, { new SyntaxVisitorBase<_>() with + member _.VisitExpr(_, _, defaultTraverse, expr) = + match expr with + | SynExpr.App(_, false, SynExpr.Ident funcIdent, expr, _) -> + if funcIdent.idText = "op_Dereference" && rangeContainsPos expr.Range expressionPos then + Some funcIdent.idRange + else + None + | _ -> defaultTraverse expr }) + + member _.TryRangeOfExpressionBeingDereferencedContainingPos expressionPos = + SyntaxTraversal.Traverse(expressionPos, input, { new SyntaxVisitorBase<_>() with + member _.VisitExpr(_, _, defaultTraverse, expr) = + match expr with + | SynExpr.App(_, false, SynExpr.Ident funcIdent, expr, _) -> + if funcIdent.idText = "op_Dereference" && rangeContainsPos expr.Range expressionPos then + Some expr.Range + else + None + | _ -> defaultTraverse expr }) + + member _.FindParameterLocations pos = + ParameterLocations.Find(pos, input) + + member _.IsPositionContainedInACurriedParameter pos = + let result = + SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with + member _.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) = + defaultTraverse(expr) + + override _.VisitBinding (_path, _, binding) = + match binding with + | SynBinding(_, _, _, _, _, _, valData, _, _, _, range, _) when rangeContainsPos range pos -> + let info = valData.SynValInfo.CurriedArgInfos + let mutable found = false + for group in info do + for arg in group do + match arg.Ident with + | Some ident when rangeContainsPos ident.idRange pos -> + found <- true + | _ -> () + if found then Some range else None + | _ -> + None + }) + result.IsSome + + member _.IsTypeAnnotationGivenAtPosition pos = + let result = + SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with + member _.VisitExpr(_path, _traverseSynExpr, defaultTraverse, expr) = + match expr with + | SynExpr.Typed (_expr, _typeExpr, range) when Position.posEq range.Start pos -> + Some range + | _ -> defaultTraverse expr + + override _.VisitSimplePats(_path, pats) = + match pats with + | [] -> None + | _ -> + let exprFunc pat = + match pat with + | SynSimplePat.Typed (_pat, _targetExpr, range) when Position.posEq range.Start pos -> + Some range + | _ -> + None + + pats |> List.tryPick exprFunc + + override _.VisitPat(_path, defaultTraverse, pat) = + match pat with + | SynPat.Typed (_pat, _targetType, range) when Position.posEq range.Start pos -> + Some range + | _ -> defaultTraverse pat }) + result.IsSome + + member _.IsBindingALambdaAtPosition pos = + let result = + SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with + member _.VisitExpr(_path, _traverseSynExpr, defaultTraverse, expr) = + defaultTraverse expr + + override _.VisitBinding(_path, defaultTraverse, binding) = + match binding with + | SynBinding.SynBinding(_, _, _, _, _, _, _, _, _, expr, range, _) when Position.posEq range.Start pos -> + match expr with + | SynExpr.Lambda _ -> Some range + | _ -> None + | _ -> defaultTraverse binding }) + result.IsSome + + /// Get declared items and the selected item at the specified location + member _.GetNavigationItemsImpl() = + ErrorScope.Protect range0 + (fun () -> + match input with + | ParsedInput.ImplFile _ as p -> + Navigation.getNavigation p + | ParsedInput.SigFile _ -> + Navigation.empty) + (fun err -> + Trace.TraceInformation(sprintf "FCS: recovering from error in GetNavigationItemsImpl: '%s'" err) + Navigation.empty) + + member _.ValidateBreakpointLocationImpl pos = + let isMatchRange m = rangeContainsPos m pos || m.StartLine = pos.Line + + // Process let-binding + let findBreakPoints () = + let checkRange m = [ if isMatchRange m then yield m ] + let walkBindSeqPt sp = [ match sp with DebugPointAtBinding.Yes m -> yield! checkRange m | _ -> () ] + let walkForSeqPt sp = [ match sp with DebugPointAtFor.Yes m -> yield! checkRange m | _ -> () ] + let walkWhileSeqPt sp = [ match sp with DebugPointAtWhile.Yes m -> yield! checkRange m | _ -> () ] + let walkTrySeqPt sp = [ match sp with DebugPointAtTry.Yes m -> yield! checkRange m | _ -> () ] + let walkWithSeqPt sp = [ match sp with DebugPointAtWith.Yes m -> yield! checkRange m | _ -> () ] + let walkFinallySeqPt sp = [ match sp with DebugPointAtFinally.Yes m -> yield! checkRange m | _ -> () ] + + let rec walkBind (SynBinding(_, _, _, _, _, _, SynValData(memFlagsOpt, _, _), synPat, _, synExpr, _, spInfo)) = + [ // Don't yield the binding sequence point if there are any arguments, i.e. we're defining a function or a method + let isFunction = + Option.isSome memFlagsOpt || + match synPat with + | SynPat.LongIdent (_, _, _, SynArgPats.Pats args, _, _) when not (List.isEmpty args) -> true + | _ -> false + if not isFunction then + yield! walkBindSeqPt spInfo + + yield! walkExpr (isFunction || (match spInfo with DebugPointAtBinding.Yes _ -> false | _-> true)) synExpr ] + + and walkExprs es = List.collect (walkExpr false) es + and walkBinds es = List.collect walkBind es + and walkMatchClauses cl = + [ for (SynMatchClause(_, whenExpr, e, _, _)) in cl do + match whenExpr with + | Some e -> yield! walkExpr false e + | _ -> () + yield! walkExpr true e ] + + and walkExprOpt (spAlways: bool) eOpt = [ match eOpt with Some e -> yield! walkExpr spAlways e | _ -> () ] + + and IsBreakableExpression e = + match e with + | SynExpr.Match _ + | SynExpr.IfThenElse _ + | SynExpr.For _ + | SynExpr.ForEach _ + | SynExpr.While _ -> true + | _ -> not (IsControlFlowExpression e) + + // Determine the breakpoint locations for an expression. spAlways indicates we always + // emit a breakpoint location for the expression unless it is a syntactic control flow construct + and walkExpr (spAlways: bool) e = + let m = e.Range + if not (isMatchRange m) then [] else + [ if spAlways && IsBreakableExpression e then + yield! checkRange m + + match e with + | SynExpr.ArbitraryAfterError _ + | SynExpr.LongIdent _ + | SynExpr.LibraryOnlyILAssembly _ + | SynExpr.LibraryOnlyStaticOptimization _ + | SynExpr.Null _ + | SynExpr.Ident _ + | SynExpr.ImplicitZero _ + | SynExpr.Const _ -> + () + + | SynExpr.Quote (_, _, e, _, _) + | SynExpr.TypeTest (e, _, _) + | SynExpr.Upcast (e, _, _) + | SynExpr.AddressOf (_, e, _, _) + | SynExpr.CompExpr (_, _, e, _) + | SynExpr.ArrayOrListOfSeqExpr (_, e, _) + | SynExpr.Typed (e, _, _) + | SynExpr.FromParseError (e, _) + | SynExpr.DiscardAfterMissingQualificationAfterDot (e, _) + | SynExpr.Do (e, _) + | SynExpr.Assert (e, _) + | SynExpr.Fixed (e, _) + | SynExpr.DotGet (e, _, _, _) + | SynExpr.LongIdentSet (_, e, _) + | SynExpr.New (_, _, e, _) + | SynExpr.TypeApp (e, _, _, _, _, _, _) + | SynExpr.LibraryOnlyUnionCaseFieldGet (e, _, _, _) + | SynExpr.Downcast (e, _, _) + | SynExpr.InferredUpcast (e, _) + | SynExpr.InferredDowncast (e, _) + | SynExpr.Lazy (e, _) + | SynExpr.TraitCall (_, _, e, _) + | SynExpr.Paren (e, _, _, _) -> + yield! walkExpr false e + + | SynExpr.InterpolatedString (parts, _, _) -> + yield! walkExprs [ for part in parts do + match part with + | SynInterpolatedStringPart.String _ -> () + | SynInterpolatedStringPart.FillExpr (fillExpr, _) -> yield fillExpr ] + + | SynExpr.YieldOrReturn (_, e, _) + | SynExpr.YieldOrReturnFrom (_, e, _) + | SynExpr.DoBang (e, _) -> + yield! checkRange e.Range + yield! walkExpr false e + + | SynExpr.NamedIndexedPropertySet (_, e1, e2, _) + | SynExpr.DotSet (e1, _, e2, _) + | SynExpr.Set (e1, e2, _) + | SynExpr.LibraryOnlyUnionCaseFieldSet (e1, _, _, e2, _) + | SynExpr.App (_, _, e1, e2, _) -> + yield! walkExpr false e1 + yield! walkExpr false e2 + + | SynExpr.ArrayOrList (_, es, _) + | SynExpr.Tuple (_, es, _, _) -> + yield! walkExprs es + + | SynExpr.Record (_, copyExprOpt, fs, _) -> + match copyExprOpt with + | Some (e, _) -> yield! walkExpr true e + | None -> () + yield! walkExprs (fs |> List.choose p23) + + | SynExpr.AnonRecd (_isStruct, copyExprOpt, fs, _) -> + match copyExprOpt with + | Some (e, _) -> yield! walkExpr true e + | None -> () + yield! walkExprs (fs |> List.map snd) + + | SynExpr.ObjExpr (_, args, bs, is, _, _) -> + match args with + | None -> () + | Some (arg, _) -> yield! walkExpr false arg + yield! walkBinds bs + for (SynInterfaceImpl(_, bs, _)) in is do yield! walkBinds bs + + | SynExpr.While (spWhile, e1, e2, _) -> + yield! walkWhileSeqPt spWhile + yield! walkExpr false e1 + yield! walkExpr true e2 + + | SynExpr.JoinIn (e1, _range, e2, _range2) -> + yield! walkExpr false e1 + yield! walkExpr false e2 + + | SynExpr.For (spFor, _, e1, _, e2, e3, _) -> + yield! walkForSeqPt spFor + yield! walkExpr false e1 + yield! walkExpr true e2 + yield! walkExpr true e3 + + | SynExpr.ForEach (spFor, _, _, _, e1, e2, _) -> + yield! walkForSeqPt spFor + yield! walkExpr false e1 + yield! walkExpr true e2 + + | SynExpr.MatchLambda (_isExnMatch, _argm, cl, spBind, _wholem) -> + yield! walkBindSeqPt spBind + for (SynMatchClause(_, whenExpr, e, _, _)) in cl do + yield! walkExprOpt false whenExpr + yield! walkExpr true e + + | SynExpr.Lambda (_, _, _, e, _, _) -> + yield! walkExpr true e + + | SynExpr.Match (spBind, e, cl, _) -> + yield! walkBindSeqPt spBind + yield! walkExpr false e + for (SynMatchClause(_, whenExpr, e, _, _)) in cl do + yield! walkExprOpt false whenExpr + yield! walkExpr true e + + | SynExpr.LetOrUse (_, _, bs, e, _) -> + yield! walkBinds bs + yield! walkExpr true e + + | SynExpr.TryWith (e, _, cl, _, _, spTry, spWith) -> + yield! walkTrySeqPt spTry + yield! walkWithSeqPt spWith + yield! walkExpr true e + yield! walkMatchClauses cl + + | SynExpr.TryFinally (e1, e2, _, spTry, spFinally) -> + yield! walkExpr true e1 + yield! walkExpr true e2 + yield! walkTrySeqPt spTry + yield! walkFinallySeqPt spFinally + + | SynExpr.SequentialOrImplicitYield (spSeq, e1, e2, _, _) + | SynExpr.Sequential (spSeq, _, e1, e2, _) -> + yield! walkExpr (match spSeq with DebugPointAtSequential.ExprOnly -> false | _ -> true) e1 + yield! walkExpr (match spSeq with DebugPointAtSequential.StmtOnly -> false | _ -> true) e2 + + | SynExpr.IfThenElse (e1, e2, e3opt, spBind, _, _, _) -> + yield! walkBindSeqPt spBind + yield! walkExpr false e1 + yield! walkExpr true e2 + yield! walkExprOpt true e3opt + + | SynExpr.DotIndexedGet (e1, es, _, _) -> + yield! walkExpr false e1 + yield! walkExprs [ for e in es do yield! e.Exprs ] + + | SynExpr.DotIndexedSet (e1, es, e2, _, _, _) -> + yield! walkExpr false e1 + yield! walkExprs [ for e in es do yield! e.Exprs ] + yield! walkExpr false e2 + + | SynExpr.DotNamedIndexedPropertySet (e1, _, e2, e3, _) -> + yield! walkExpr false e1 + yield! walkExpr false e2 + yield! walkExpr false e3 + + | SynExpr.LetOrUseBang (spBind, _, _, _, e1, es, e2, _) -> + yield! walkBindSeqPt spBind + yield! walkExpr true e1 + for (andBangSpBind,_,_,_,eAndBang,_) in es do + yield! walkBindSeqPt andBangSpBind + yield! walkExpr true eAndBang + yield! walkExpr true e2 + + | SynExpr.MatchBang (spBind, e, cl, _) -> + yield! walkBindSeqPt spBind + yield! walkExpr false e + for (SynMatchClause(_, whenExpr, e, _, _)) in cl do + yield! walkExprOpt false whenExpr + yield! walkExpr true e ] + + // Process a class declaration or F# type declaration + let rec walkTycon (SynTypeDefn(SynComponentInfo(_, _, _, _, _, _, _, _), repr, membDefns, implicitCtor, m)) = + if not (isMatchRange m) then [] else + [ for memb in membDefns do yield! walkMember memb + match repr with + | SynTypeDefnRepr.ObjectModel(_, membDefns, _) -> + for memb in membDefns do yield! walkMember memb + | _ -> () + for memb in membDefns do yield! walkMember memb + for memb in Option.toList implicitCtor do yield! walkMember memb] + + // Returns class-members for the right dropdown + and walkMember memb = + if not (rangeContainsPos memb.Range pos) then [] else + [ match memb with + | SynMemberDefn.LetBindings(binds, _, _, _) -> yield! walkBinds binds + | SynMemberDefn.AutoProperty(_attribs, _isStatic, _id, _tyOpt, _propKind, _, _xmlDoc, _access, synExpr, _, _) -> yield! walkExpr true synExpr + | SynMemberDefn.ImplicitCtor(_, _, _, _, _, m) -> yield! checkRange m + | SynMemberDefn.Member(bind, _) -> yield! walkBind bind + | SynMemberDefn.Interface(_, Some membs, _) -> for m in membs do yield! walkMember m + | SynMemberDefn.Inherit(_, _, m) -> + // can break on the "inherit" clause + yield! checkRange m + | SynMemberDefn.ImplicitInherit(_, arg, _, m) -> + // can break on the "inherit" clause + yield! checkRange m + yield! walkExpr true arg + | _ -> () ] + + // Process declarations nested in a module that should be displayed in the left dropdown + // (such as type declarations, nested modules etc.) + let rec walkDecl decl = + [ match decl with + | SynModuleDecl.Let(_, binds, m) when isMatchRange m -> + yield! walkBinds binds + | SynModuleDecl.DoExpr(spExpr, expr, m) when isMatchRange m -> + yield! walkBindSeqPt spExpr + yield! walkExpr false expr + | SynModuleDecl.ModuleAbbrev _ -> () + | SynModuleDecl.NestedModule(_, _isRec, decls, _, m) when isMatchRange m -> + for d in decls do yield! walkDecl d + | SynModuleDecl.Types(tydefs, m) when isMatchRange m -> + for d in tydefs do yield! walkTycon d + | SynModuleDecl.Exception(SynExceptionDefn(SynExceptionDefnRepr(_, _, _, _, _, _), membDefns, _), m) + when isMatchRange m -> + for m in membDefns do yield! walkMember m + | _ -> () ] + + // Collect all the items in a module + let walkModule (SynModuleOrNamespace(_, _, _, decls, _, _, _, m)) = + if isMatchRange m then + List.collect walkDecl decls + else + [] + + /// Get information for implementation file + let walkImplFile (modules: SynModuleOrNamespace list) = List.collect walkModule modules + + match input with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = modules)) -> walkImplFile modules + | _ -> [] + + ErrorScope.Protect range0 + (fun () -> + let locations = findBreakPoints() + + if pos.Column = 0 then + // we have a breakpoint that was set with mouse at line start + match locations |> List.filter (fun m -> m.StartLine = m.EndLine && pos.Line = m.StartLine) with + | [] -> + match locations |> List.filter (fun m -> rangeContainsPos m pos) with + | [] -> + match locations |> List.filter (fun m -> rangeBeforePos m pos |> not) with + | [] -> Seq.tryHead locations + | locationsAfterPos -> Seq.tryHead locationsAfterPos + | coveringLocations -> Seq.tryLast coveringLocations + | locationsOnSameLine -> Seq.tryHead locationsOnSameLine + else + match locations |> List.filter (fun m -> rangeContainsPos m pos) with + | [] -> + match locations |> List.filter (fun m -> rangeBeforePos m pos |> not) with + | [] -> Seq.tryHead locations + | locationsAfterPos -> Seq.tryHead locationsAfterPos + | coveringLocations -> Seq.tryLast coveringLocations) + (fun msg -> + Trace.TraceInformation(sprintf "FCS: recovering from error in ValidateBreakpointLocationImpl: '%s'" msg) + None) + + /// When these files appear or disappear the configuration for the current project is invalidated. + member _.DependencyFiles = dependencyFiles + + member _.FileName = input.FileName + + // Get items for the navigation drop down bar + member scope.GetNavigationItems() = + // This does not need to be run on the background thread + scope.GetNavigationItemsImpl() + + member scope.ValidateBreakpointLocation pos = + // This does not need to be run on the background thread + scope.ValidateBreakpointLocationImpl pos + diff --git a/src/fsharp/service/FSharpParseFileResults.fsi b/src/fsharp/service/FSharpParseFileResults.fsi new file mode 100644 index 00000000000..9d3378a7b9a --- /dev/null +++ b/src/fsharp/service/FSharpParseFileResults.fsi @@ -0,0 +1,83 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.CodeAnalysis + +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text + +[] +/// Represents the results of parsing an F# file and a set of analysis operations based on the parse tree alone. +type public FSharpParseFileResults = + + /// The syntax tree resulting from the parse + member ParseTree: ParsedInput + + /// Attempts to find the range of the name of the nearest outer binding that contains a given position. + member TryRangeOfNameOfNearestOuterBindingContainingPos: pos: pos -> range option + + /// Attempts to find the range of an attempted lambda expression or pattern, the argument range, and the expr range when writing a C#-style "lambda" (which is actually an operator application) + member TryRangeOfParenEnclosingOpEqualsGreaterUsage: opGreaterEqualPos: pos -> (range * range * range) option + + /// Attempts to find the range of an expression `expr` contained in a `yield expr` or `return expr` expression (and bang-variants). + member TryRangeOfExprInYieldOrReturn: pos: pos -> range option + + /// Attempts to find the range of a record expression containing the given position. + member TryRangeOfRecordExpressionContainingPos: pos: pos -> range option + + /// Attempts to find an Ident of a pipeline containing the given position, and the number of args already applied in that pipeline. + /// For example, '[1..10] |> List.map ' would give back the ident of '|>' and 1, because it applied 1 arg (the list) to 'List.map'. + member TryIdentOfPipelineContainingPosAndNumArgsApplied: pos: pos -> (Ident * int) option + + /// Determines if the given position is inside a function or method application. + member IsPosContainedInApplication: pos: pos -> bool + + /// Attempts to find the range of a function or method that is being applied. Also accounts for functions in pipelines. + member TryRangeOfFunctionOrMethodBeingApplied: pos: pos -> range option + + /// Gets the ranges of all arguments, if they can be found, for a function application at the given position. + member GetAllArgumentsForFunctionApplicationAtPostion: pos: pos -> range list option + + /// + /// Given the position of an expression, attempts to find the range of the + /// '!' in a derefence operation of that expression, like: + /// '!expr', '!(expr)', etc. + /// + member TryRangeOfRefCellDereferenceContainingPos: expressionPos: pos -> range option + + /// Gets the range of an expression being dereferenced. For `!expr`, gives the range of `expr` + member TryRangeOfExpressionBeingDereferencedContainingPos: expressionPos: pos -> range option + + /// Notable parse info for ParameterInfo at a given location + member FindParameterLocations: pos:pos -> ParameterLocations option + + /// Determines if the given position is contained within a curried parameter in a binding. + member IsPositionContainedInACurriedParameter: pos: pos -> bool + + /// Determines if the expression or pattern at the given position has a type annotation + member IsTypeAnnotationGivenAtPosition: pos -> bool + + /// Determines if the binding at the given position is bound to a lambda expression + member IsBindingALambdaAtPosition: pos -> bool + + /// Name of the file for which this information were created + member FileName: string + + /// Get declared items and the selected item at the specified location + member GetNavigationItems: unit -> NavigationItems + + /// Return the inner-most range associated with a possible breakpoint location + member ValidateBreakpointLocation: pos:pos -> range option + + /// When these files change then the build is invalid + member DependencyFiles: string[] + + /// Get the errors and warnings for the parse + member Diagnostics: FSharpDiagnostic[] + + /// Indicates if any errors occurred during the parse + member ParseHadErrors: bool + + internal new: diagnostics: FSharpDiagnostic[] * input: ParsedInput * parseHadErrors: bool * dependencyFiles: string[] -> FSharpParseFileResults + diff --git a/src/fsharp/service/IncrementalBuild.fs b/src/fsharp/service/IncrementalBuild.fs old mode 100755 new mode 100644 index 2ece0502cf5..ddcfefd2a5a --- a/src/fsharp/service/IncrementalBuild.fs +++ b/src/fsharp/service/IncrementalBuild.fs @@ -1,18 +1,18 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler - +namespace FSharp.Compiler.CodeAnalysis open System open System.Collections.Generic +open System.Collections.Immutable open System.IO open System.Threading - +open Internal.Utilities.Library +open Internal.Utilities.Collections open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILBinaryReader -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CheckExpressions open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerConfig @@ -21,32 +21,36 @@ open FSharp.Compiler.CompilerGlobalState open FSharp.Compiler.CompilerImports open FSharp.Compiler.CompilerOptions open FSharp.Compiler.CreateILModule +open FSharp.Compiler.DependencyManager +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.EditorServices open FSharp.Compiler.ErrorLogger +open FSharp.Compiler.IO +open FSharp.Compiler.CodeAnalysis open FSharp.Compiler.NameResolution open FSharp.Compiler.ParseAndCheckInputs -open FSharp.Compiler.Range open FSharp.Compiler.ScriptClosure -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Syntax open FSharp.Compiler.TcGlobals -open FSharp.Compiler.TypedTree +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Xml +open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.BuildGraph -open Microsoft.DotNet.DependencyManager - -open Internal.Utilities -open Internal.Utilities.Collections [] module internal IncrementalBuild = let mutable injectCancellationFault = false - let LocallyInjectCancellationFault() = + let LocallyInjectCancellationFault() = injectCancellationFault <- true - { new IDisposable with member __.Dispose() = injectCancellationFault <- false } + { new IDisposable with member _.Dispose() = injectCancellationFault <- false } -// Record the most recent IncrementalBuilder events, so we can more easily unit test/debug the +// Record the most recent IncrementalBuilder events, so we can more easily unit test/debug the // 'incremental' behavior of the product. -module IncrementalBuilderEventTesting = +module IncrementalBuilderEventTesting = type internal FixedLengthMRU<'T>() = let MAX = 400 // Length of the MRU. For our current unit tests, 400 is enough. @@ -82,13 +86,13 @@ module IncrementalBuilderEventTesting = | IBECreated // ++GLOBAL MUTABLE STATE FOR TESTING++ - let MRU = new FixedLengthMRU() + let MRU = new FixedLengthMRU() let GetMostRecentIncrementalBuildEvents n = MRU.MostRecentList n - let GetCurrentIncrementalBuildEventNum() = MRU.CurrentEventNum + let GetCurrentIncrementalBuildEventNum() = MRU.CurrentEventNum module Tc = FSharp.Compiler.CheckExpressions -// This module is only here to contain the SyntaxTree type as to avoid amiguity with the module FSharp.Compiler.SyntaxTree. +// This module is only here to contain the SyntaxTree type as to avoid amiguity with the module FSharp.Compiler.Syntax. [] module IncrementalBuildSyntaxTree = @@ -98,39 +102,39 @@ module IncrementalBuildSyntaxTree = let mutable weakCache: WeakReference<_> option = None - let parse(sigNameOpt: SyntaxTree.QualifiedNameOfFile option) = + let parse(sigNameOpt: QualifiedNameOfFile option) = let errorLogger = CompilationErrorLogger("Parse", tcConfig.errorSeverityOptions) // Return the disposable object that cleans up use _holder = new CompilationGlobalsScope(errorLogger, BuildPhase.Parse) - try + try IncrementalBuilderEventTesting.MRU.Add(IncrementalBuilderEventTesting.IBEParsed filename) let lower = String.lowercase filename - let canSkip = sigNameOpt.IsSome && FSharpImplFileSuffixes |> List.exists (Filename.checkSuffix lower) - let input = + let canSkip = sigNameOpt.IsSome && FSharpImplFileSuffixes |> List.exists (FileSystemUtils.checkSuffix lower) + let input = if canSkip then - SyntaxTree.ParsedInput.ImplFile( - SyntaxTree.ParsedImplFileInput( - filename, - false, + ParsedInput.ImplFile( + ParsedImplFileInput( + filename, + false, sigNameOpt.Value, [], [], [], isLastCompiland ) - ) |> Some + ) else ParseOneInputFile(tcConfig, lexResourceManager, [], filename, isLastCompiland, errorLogger, (*retryLocked*)true) fileParsed.Trigger filename - let res = input, sourceRange, filename, errorLogger.GetErrors () + let res = input, sourceRange, filename, errorLogger.GetDiagnostics() // If we do not skip parsing the file, then we can cache the real result. if not canSkip then weakCache <- Some(WeakReference<_>(res)) res - with exn -> + with exn -> let msg = sprintf "unexpected failure in SyntaxTree.parse\nerror = %s" (exn.ToString()) System.Diagnostics.Debug.Assert(false, msg) failwith msg @@ -145,7 +149,7 @@ module IncrementalBuildSyntaxTree = | _ -> parse sigNameOpt member _.Invalidate() = - weakCache <- None + SyntaxTree(tcConfig, fileParsed, lexResourceManager, sourceRange, filename, isLastCompiland) member _.FileName = filename @@ -164,76 +168,128 @@ type TcInfo = latestCcuSigForFile: ModuleOrNamespaceType option /// Accumulated errors, last file first - tcErrorsRev:(PhasedDiagnostic * FSharpErrorSeverity)[] list + tcErrorsRev:(PhasedDiagnostic * FSharpDiagnosticSeverity)[] list tcDependencyFiles: string list - sigNameOpt: (string * SyntaxTree.QualifiedNameOfFile) option + sigNameOpt: (string * QualifiedNameOfFile) option } - member x.TcErrors = + member x.TcErrors = Array.concat (List.rev x.tcErrorsRev) /// Accumulated results of type checking. Optional data that isn't needed to type-check a file, but needed for more information for in tooling. [] -type TcInfoOptional = +type TcInfoExtras = { - /// Accumulated resolutions, last file first - tcResolutionsRev: TcResolutions list - - /// Accumulated symbol uses, last file first - tcSymbolUsesRev: TcSymbolUses list - - /// Accumulated 'open' declarations, last file first - tcOpenDeclarationsRev: OpenDeclaration[] list + tcResolutions: TcResolutions + tcSymbolUses: TcSymbolUses + tcOpenDeclarations: OpenDeclaration[] /// Result of checking most recent file, if any latestImplFile: TypedImplFile option - + /// If enabled, stores a linear list of ranges and strings that identify an Item(symbol) in a file. Used for background find all references. itemKeyStore: ItemKeyStore option - + /// If enabled, holds semantic classification information for Item(symbol)s in a file. - semanticClassification: struct (range * SemanticClassificationType) [] + semanticClassificationKeyStore: SemanticClassificationKeyStore option } - member x.TcSymbolUses = - List.rev x.tcSymbolUsesRev + member x.TcSymbolUses = + x.tcSymbolUses + +[] +module TcInfoHelpers = + + let emptyTcInfoExtras = + { + tcResolutions = TcResolutions.Empty + tcSymbolUses = TcSymbolUses.Empty + tcOpenDeclarations = [||] + latestImplFile = None + itemKeyStore = None + semanticClassificationKeyStore = None + } /// Accumulated results of type checking. [] type TcInfoState = | PartialState of TcInfo - | FullState of TcInfo * TcInfoOptional + | FullState of TcInfo * TcInfoExtras - member this.Partial = - match this with + member x.TcInfo = + match x with | PartialState tcInfo -> tcInfo - | FullState(tcInfo, _) -> tcInfo + | FullState (tcInfo, _) -> tcInfo + + member x.TcInfoExtras = + match x with + | PartialState _ -> None + | FullState (_, tcInfoExtras) -> Some tcInfoExtras -/// Semantic model of an underlying syntax tree. +[] +type TcInfoNode = + | TcInfoNode of partial: GraphNode * full: GraphNode + + member this.HasFull = + match this with + | TcInfoNode(_, full) -> full.HasValue + + static member FromState(state: TcInfoState) = + let tcInfo = state.TcInfo + let tcInfoExtras = state.TcInfoExtras + TcInfoNode(GraphNode(node { return tcInfo }), GraphNode(node { return tcInfo, defaultArg tcInfoExtras emptyTcInfoExtras })) + +/// Bound model of an underlying syntax and typed tree. [] -type SemanticModel private (tcConfig: TcConfig, - tcGlobals: TcGlobals, - tcImports: TcImports, - keepAssemblyContents, keepAllBackgroundResolutions, - maxTimeShareMilliseconds, keepAllBackgroundSymbolUses, - enableBackgroundItemKeyStoreAndSemanticClassification, - enablePartialTypeChecking, - beforeFileChecked: Event, - fileChecked: Event, - prevTcInfo: TcInfo, - prevTcInfoOptional: Eventually, - syntaxTreeOpt: SyntaxTree option, - lazyTcInfoState: TcInfoState option ref) = +type BoundModel private (tcConfig: TcConfig, + tcGlobals: TcGlobals, + tcImports: TcImports, + keepAssemblyContents, keepAllBackgroundResolutions, + keepAllBackgroundSymbolUses, + enableBackgroundItemKeyStoreAndSemanticClassification, + enablePartialTypeChecking, + beforeFileChecked: Event, + fileChecked: Event, + prevTcInfo: TcInfo, + syntaxTreeOpt: SyntaxTree option, + tcInfoStateOpt: TcInfoState option) as this = + + let tcInfoNode = + match tcInfoStateOpt with + | Some tcInfoState -> TcInfoNode.FromState(tcInfoState) + | _ -> + let fullGraphNode = + GraphNode(node { + match! this.TypeCheck(false) with + | FullState(tcInfo, tcInfoExtras) -> return tcInfo, tcInfoExtras + | PartialState(tcInfo) -> return tcInfo, emptyTcInfoExtras + }) + + let partialGraphNode = + GraphNode(node { + if enablePartialTypeChecking then + // Optimization so we have less of a chance to duplicate work. + if fullGraphNode.IsComputing then + let! tcInfo, _ = fullGraphNode.GetOrComputeValue() + return tcInfo + else + match fullGraphNode.TryPeekValue() with + | ValueSome(tcInfo, _) -> return tcInfo + | _ -> + let! tcInfoState = this.TypeCheck(true) + return tcInfoState.TcInfo + else + let! tcInfo, _ = fullGraphNode.GetOrComputeValue() + return tcInfo + }) + + TcInfoNode(partialGraphNode, fullGraphNode) let defaultTypeCheck () = - eventually { - match prevTcInfoOptional with - | Eventually.Done(Some prevTcInfoOptional) -> - return FullState(prevTcInfo, prevTcInfoOptional) - | _ -> - return PartialState prevTcInfo + node { + return PartialState(prevTcInfo) } member _.TcConfig = tcConfig @@ -254,136 +310,140 @@ type SemanticModel private (tcConfig: TcConfig, | _ -> None - member this.Invalidate() = + /// If partial type-checking is enabled, + /// this will create a new bound-model that will only have the partial state if the + /// the current bound-model has the full state. + member this.ClearTcInfoExtras() = let hasSig = this.BackingSignature.IsSome - match !lazyTcInfoState with - // If partial checking is enabled and we have a backing sig file, then do nothing. The partial state contains the sig state. - | Some(PartialState _) when enablePartialTypeChecking && hasSig -> () - // If partial checking is enabled and we have a backing sig file, then use the partial state. The partial state contains the sig state. - | Some(FullState(tcInfo, _)) when enablePartialTypeChecking && hasSig -> lazyTcInfoState := Some(PartialState tcInfo) - | _ -> - lazyTcInfoState := None - - // Always invalidate the syntax tree cache. - syntaxTreeOpt - |> Option.iter (fun x -> x.Invalidate()) - - member this.GetState(partialCheck: bool) = - let partialCheck = - // Only partial check if we have enabled it. - if enablePartialTypeChecking then partialCheck - else false - - let mustCheck = - match !lazyTcInfoState, partialCheck with - | None, _ -> true - | Some(PartialState _), false -> true - | _ -> false - - if mustCheck then - lazyTcInfoState := None - - match !lazyTcInfoState with - | Some tcInfoState -> tcInfoState |> Eventually.Done - | _ -> - eventually { - let! tcInfoState = this.TypeCheck(partialCheck) - lazyTcInfoState := Some tcInfoState - return tcInfoState - } - member this.Next(syntaxTree) = - eventually { - let! prevState = this.GetState(true) - let lazyPrevTcInfoOptional = - eventually { - let! prevState = this.GetState(false) - match prevState with - | FullState(_, prevTcInfoOptional) -> return Some prevTcInfoOptional - | _ -> return None - } - return - SemanticModel( - tcConfig, - tcGlobals, - tcImports, - keepAssemblyContents, - keepAllBackgroundResolutions, - maxTimeShareMilliseconds, - keepAllBackgroundSymbolUses, - enableBackgroundItemKeyStoreAndSemanticClassification, - enablePartialTypeChecking, - beforeFileChecked, - fileChecked, - prevState.Partial, - lazyPrevTcInfoOptional, - Some syntaxTree, - ref None) - } + // If partial checking is enabled and we have a backing sig file, then use the partial state. The partial state contains the sig state. + if tcInfoNode.HasFull && enablePartialTypeChecking && hasSig then + // Always invalidate the syntax tree cache. + let newSyntaxTreeOpt = + syntaxTreeOpt + |> Option.map (fun x -> x.Invalidate()) + + let newTcInfoStateOpt = + match tcInfoNode with + | TcInfoNode(_, fullGraphNode) -> + let tcInfo, _ = fullGraphNode.TryPeekValue().Value + Some(PartialState tcInfo) + + BoundModel( + tcConfig, + tcGlobals, + tcImports, + keepAssemblyContents, keepAllBackgroundResolutions, + keepAllBackgroundSymbolUses, + enableBackgroundItemKeyStoreAndSemanticClassification, + enablePartialTypeChecking, + beforeFileChecked, + fileChecked, + prevTcInfo, + newSyntaxTreeOpt, + newTcInfoStateOpt) + else + this + + member this.Next(syntaxTree, tcInfo) = + BoundModel( + tcConfig, + tcGlobals, + tcImports, + keepAssemblyContents, + keepAllBackgroundResolutions, + keepAllBackgroundSymbolUses, + enableBackgroundItemKeyStoreAndSemanticClassification, + enablePartialTypeChecking, + beforeFileChecked, + fileChecked, + tcInfo, + Some syntaxTree, + None) member this.Finish(finalTcErrorsRev, finalTopAttribs) = - eventually { - let! state = this.GetState(true) - - let finishTcInfo = { state.Partial with tcErrorsRev = finalTcErrorsRev; topAttribs = finalTopAttribs } - let finishState = - match state with - | PartialState(_) -> PartialState(finishTcInfo) - | FullState(_, tcInfoOptional) -> FullState(finishTcInfo, tcInfoOptional) + node { + let createFinish tcInfo = + { tcInfo with tcErrorsRev = finalTcErrorsRev; topAttribs = finalTopAttribs } + + let! finishState = + node { + match tcInfoNode with + | TcInfoNode(partialGraphNode, fullGraphNode) -> + if fullGraphNode.HasValue then + let! tcInfo, tcInfoExtras = fullGraphNode.GetOrComputeValue() + let finishTcInfo = createFinish tcInfo + return FullState(finishTcInfo, tcInfoExtras) + else + let! tcInfo = partialGraphNode.GetOrComputeValue() + let finishTcInfo = createFinish tcInfo + return PartialState(finishTcInfo) + } return - SemanticModel( + BoundModel( tcConfig, tcGlobals, tcImports, - keepAssemblyContents, - keepAllBackgroundResolutions, - maxTimeShareMilliseconds, - keepAllBackgroundSymbolUses, + keepAssemblyContents, + keepAllBackgroundResolutions, + keepAllBackgroundSymbolUses, enableBackgroundItemKeyStoreAndSemanticClassification, enablePartialTypeChecking, - beforeFileChecked, - fileChecked, - prevTcInfo, - prevTcInfoOptional, + beforeFileChecked, + fileChecked, + prevTcInfo, syntaxTreeOpt, - ref (Some finishState)) + Some finishState) } - member this.TcInfo = - eventually { - let! state = this.GetState(true) - return state.Partial - } + member _.TryPeekTcInfo() = + match tcInfoNode with + | TcInfoNode(partialGraphNode, fullGraphNode) -> + match partialGraphNode.TryPeekValue() with + | ValueSome tcInfo -> Some tcInfo + | _ -> + match fullGraphNode.TryPeekValue() with + | ValueSome(tcInfo, _) -> Some tcInfo + | _ -> None + + member _.TryPeekTcInfoWithExtras() = + match tcInfoNode with + | TcInfoNode(_, fullGraphNode) -> + match fullGraphNode.TryPeekValue() with + | ValueSome(tcInfo, tcInfoExtras) -> Some(tcInfo, tcInfoExtras) + | _ -> None + + member _.GetOrComputeTcInfo() = + match tcInfoNode with + | TcInfoNode(partialGraphNode, _) -> + partialGraphNode.GetOrComputeValue() + + member _.GetOrComputeTcInfoExtras() : NodeCode = + match tcInfoNode with + | TcInfoNode(_, fullGraphNode) -> + node { + let! _, tcInfoExtras = fullGraphNode.GetOrComputeValue() + return tcInfoExtras + } - member this.TcInfoWithOptional = - eventually { - let! state = this.GetState(false) - match state with - | FullState(tcInfo, tcInfoOptional) -> return tcInfo, tcInfoOptional - | PartialState tcInfo -> - return - tcInfo, - { - tcResolutionsRev = [] - tcSymbolUsesRev = [] - tcOpenDeclarationsRev = [] - latestImplFile = None - itemKeyStore = None - semanticClassification = [||] - } - } + member _.GetOrComputeTcInfoWithExtras() = + match tcInfoNode with + | TcInfoNode(_, fullGraphNode) -> + fullGraphNode.GetOrComputeValue() - member private this.TypeCheck (partialCheck: bool) = - match partialCheck, !lazyTcInfoState with + member private this.TypeCheck (partialCheck: bool) : NodeCode = + match partialCheck, tcInfoStateOpt with | true, Some (PartialState _ as state) - | true, Some (FullState _ as state) -> state |> Eventually.Done - | false, Some (FullState _ as state) -> state |> Eventually.Done + | true, Some (FullState _ as state) -> node { return state } + | false, Some (FullState _ as state) -> node { return state } | _ -> - eventually { - match syntaxTreeOpt with - | None -> return! defaultTypeCheck () + node { + match syntaxTreeOpt with + | None -> + let! res = defaultTypeCheck () + return res | Some syntaxTree -> let sigNameOpt = if partialCheck then @@ -391,222 +451,219 @@ type SemanticModel private (tcConfig: TcConfig, else None match syntaxTree.Parse sigNameOpt with - | Some input, _sourceRange, filename, parseErrors -> + | input, _sourceRange, filename, parseErrors -> + IncrementalBuilderEventTesting.MRU.Add(IncrementalBuilderEventTesting.IBETypechecked filename) let capturingErrorLogger = CompilationErrorLogger("TypeCheck", tcConfig.errorSeverityOptions) let errorLogger = GetErrorLoggerFilteringByScopedPragmas(false, GetScopedPragmasForInput input, capturingErrorLogger) - let fullComputation = - eventually { - beforeFileChecked.Trigger filename - let prevModuleNamesDict = prevTcInfo.moduleNamesDict - let prevTcState = prevTcInfo.tcState - let prevTcErrorsRev = prevTcInfo.tcErrorsRev - let prevTcDependencyFiles = prevTcInfo.tcDependencyFiles - - ApplyMetaCommandsFromInputToTcConfig (tcConfig, input, Path.GetDirectoryName filename, tcImports.DependencyProvider) |> ignore - let sink = TcResultsSinkImpl(tcGlobals) - let hadParseErrors = not (Array.isEmpty parseErrors) - let input, moduleNamesDict = DeduplicateParsedInputModuleName prevModuleNamesDict input - - Logger.LogBlockMessageStart filename LogCompilerFunctionId.IncrementalBuild_TypeCheck - let! (tcEnvAtEndOfFile, topAttribs, implFile, ccuSigForFile), tcState = - TypeCheckOneInputEventually - ((fun () -> hadParseErrors || errorLogger.ErrorCount > 0), - tcConfig, tcImports, - tcGlobals, - None, - (if partialCheck then TcResultsSink.NoSink else TcResultsSink.WithSink sink), - prevTcState, input, - partialCheck) - Logger.LogBlockMessageStop filename LogCompilerFunctionId.IncrementalBuild_TypeCheck - - fileChecked.Trigger filename - let newErrors = Array.append parseErrors (capturingErrorLogger.GetErrors()) - - let tcEnvAtEndOfFile = if keepAllBackgroundResolutions then tcEnvAtEndOfFile else tcState.TcEnvFromImpls - - let tcInfo = - { - tcState = tcState - tcEnvAtEndOfFile = tcEnvAtEndOfFile - moduleNamesDict = moduleNamesDict - latestCcuSigForFile = Some ccuSigForFile - tcErrorsRev = newErrors :: prevTcErrorsRev - topAttribs = Some topAttribs - tcDependencyFiles = filename :: prevTcDependencyFiles - sigNameOpt = - match input with - | SyntaxTree.ParsedInput.SigFile(SyntaxTree.ParsedSigFileInput(fileName=fileName;qualifiedNameOfFile=qualName)) -> - Some(fileName, qualName) - | _ -> - None - } - - if partialCheck then - return PartialState tcInfo - else - match! prevTcInfoOptional with - | None -> return PartialState tcInfo - | Some prevTcInfoOptional -> - // Build symbol keys - let itemKeyStore, semanticClassification = - if enableBackgroundItemKeyStoreAndSemanticClassification then - Logger.LogBlockMessageStart filename LogCompilerFunctionId.IncrementalBuild_CreateItemKeyStoreAndSemanticClassification - let sResolutions = sink.GetResolutions() - let builder = ItemKeyStoreBuilder() - let preventDuplicates = HashSet({ new IEqualityComparer with - member _.Equals((s1, e1): struct(pos * pos), (s2, e2): struct(pos * pos)) = Range.posEq s1 s2 && Range.posEq e1 e2 - member _.GetHashCode o = o.GetHashCode() }) - sResolutions.CapturedNameResolutions - |> Seq.iter (fun cnr -> - let r = cnr.Range - if preventDuplicates.Add struct(r.Start, r.End) then - builder.Write(cnr.Range, cnr.Item)) - - let res = builder.TryBuildAndReset(), sResolutions.GetSemanticClassification(tcGlobals, tcImports.GetImportMap(), sink.GetFormatSpecifierLocations(), None) - Logger.LogBlockMessageStop filename LogCompilerFunctionId.IncrementalBuild_CreateItemKeyStoreAndSemanticClassification - res - else - None, [||] - - let tcInfoOptional = - { - /// Only keep the typed interface files when doing a "full" build for fsc.exe, otherwise just throw them away - latestImplFile = if keepAssemblyContents then implFile else None - tcResolutionsRev = (if keepAllBackgroundResolutions then sink.GetResolutions() else TcResolutions.Empty) :: prevTcInfoOptional.tcResolutionsRev - tcSymbolUsesRev = (if keepAllBackgroundSymbolUses then sink.GetSymbolUses() else TcSymbolUses.Empty) :: prevTcInfoOptional.tcSymbolUsesRev - tcOpenDeclarationsRev = sink.GetOpenDeclarations() :: prevTcInfoOptional.tcOpenDeclarationsRev - itemKeyStore = itemKeyStore - semanticClassification = semanticClassification - } - - return FullState(tcInfo, tcInfoOptional) - + use _ = new CompilationGlobalsScope(errorLogger, BuildPhase.TypeCheck) + + beforeFileChecked.Trigger filename + let prevModuleNamesDict = prevTcInfo.moduleNamesDict + let prevTcState = prevTcInfo.tcState + let prevTcErrorsRev = prevTcInfo.tcErrorsRev + let prevTcDependencyFiles = prevTcInfo.tcDependencyFiles + + ApplyMetaCommandsFromInputToTcConfig (tcConfig, input, Path.GetDirectoryName filename, tcImports.DependencyProvider) |> ignore + let sink = TcResultsSinkImpl(tcGlobals) + let hadParseErrors = not (Array.isEmpty parseErrors) + let input, moduleNamesDict = DeduplicateParsedInputModuleName prevModuleNamesDict input + + Logger.LogBlockMessageStart filename LogCompilerFunctionId.IncrementalBuild_TypeCheck + + let! (tcEnvAtEndOfFile, topAttribs, implFile, ccuSigForFile), tcState = + TypeCheckOneInput + ((fun () -> hadParseErrors || errorLogger.ErrorCount > 0), + tcConfig, tcImports, + tcGlobals, + None, + (if partialCheck then TcResultsSink.NoSink else TcResultsSink.WithSink sink), + prevTcState, input, + partialCheck) + |> NodeCode.FromCancellable + + Logger.LogBlockMessageStop filename LogCompilerFunctionId.IncrementalBuild_TypeCheck + + fileChecked.Trigger filename + let newErrors = Array.append parseErrors (capturingErrorLogger.GetDiagnostics()) + + let tcEnvAtEndOfFile = if keepAllBackgroundResolutions then tcEnvAtEndOfFile else tcState.TcEnvFromImpls + + let tcInfo = + { + tcState = tcState + tcEnvAtEndOfFile = tcEnvAtEndOfFile + moduleNamesDict = moduleNamesDict + latestCcuSigForFile = Some ccuSigForFile + tcErrorsRev = newErrors :: prevTcErrorsRev + topAttribs = Some topAttribs + tcDependencyFiles = filename :: prevTcDependencyFiles + sigNameOpt = + match input with + | ParsedInput.SigFile(ParsedSigFileInput(fileName=fileName;qualifiedNameOfFile=qualName)) -> + Some(fileName, qualName) + | _ -> + None } - - // Run part of the Eventually<_> computation until a timeout is reached. If not complete, - // return a new Eventually<_> computation which recursively runs more of the computation. - // - When the whole thing is finished commit the error results sent through the errorLogger. - // - Each time we do real work we reinstall the CompilationGlobalsScope - let timeSlicedComputation = - fullComputation |> - Eventually.repeatedlyProgressUntilDoneOrTimeShareOverOrCanceled - maxTimeShareMilliseconds - CancellationToken.None - (fun ctok f -> - // Reinstall the compilation globals each time we start or restart - use unwind = new CompilationGlobalsScope (errorLogger, BuildPhase.TypeCheck) - f ctok) - return! timeSlicedComputation - | _ -> - return! defaultTypeCheck () - } + + if partialCheck then + return PartialState tcInfo + else + // Build symbol keys + let itemKeyStore, semanticClassification = + if enableBackgroundItemKeyStoreAndSemanticClassification then + Logger.LogBlockMessageStart filename LogCompilerFunctionId.IncrementalBuild_CreateItemKeyStoreAndSemanticClassification + let sResolutions = sink.GetResolutions() + let builder = ItemKeyStoreBuilder() + let preventDuplicates = HashSet({ new IEqualityComparer with + member _.Equals((s1, e1): struct(pos * pos), (s2, e2): struct(pos * pos)) = Position.posEq s1 s2 && Position.posEq e1 e2 + member _.GetHashCode o = o.GetHashCode() }) + sResolutions.CapturedNameResolutions + |> Seq.iter (fun cnr -> + let r = cnr.Range + if preventDuplicates.Add struct(r.Start, r.End) then + builder.Write(cnr.Range, cnr.Item)) + + let semanticClassification = sResolutions.GetSemanticClassification(tcGlobals, tcImports.GetImportMap(), sink.GetFormatSpecifierLocations(), None) + + let sckBuilder = SemanticClassificationKeyStoreBuilder() + sckBuilder.WriteAll semanticClassification + + let res = builder.TryBuildAndReset(), sckBuilder.TryBuildAndReset() + Logger.LogBlockMessageStop filename LogCompilerFunctionId.IncrementalBuild_CreateItemKeyStoreAndSemanticClassification + res + else + None, None + + let tcInfoExtras = + { + /// Only keep the typed interface files when doing a "full" build for fsc.exe, otherwise just throw them away + latestImplFile = if keepAssemblyContents then implFile else None + tcResolutions = (if keepAllBackgroundResolutions then sink.GetResolutions() else TcResolutions.Empty) + tcSymbolUses = (if keepAllBackgroundSymbolUses then sink.GetSymbolUses() else TcSymbolUses.Empty) + tcOpenDeclarations = sink.GetOpenDeclarations() + itemKeyStore = itemKeyStore + semanticClassificationKeyStore = semanticClassification + } + + return FullState(tcInfo, tcInfoExtras) + } static member Create(tcConfig: TcConfig, tcGlobals: TcGlobals, tcImports: TcImports, keepAssemblyContents, keepAllBackgroundResolutions, - maxTimeShareMilliseconds, keepAllBackgroundSymbolUses, + keepAllBackgroundSymbolUses, enableBackgroundItemKeyStoreAndSemanticClassification, enablePartialTypeChecking, beforeFileChecked: Event, fileChecked: Event, prevTcInfo: TcInfo, - prevTcInfoOptional: Eventually, syntaxTreeOpt: SyntaxTree option) = - SemanticModel(tcConfig, tcGlobals, tcImports, - keepAssemblyContents, keepAllBackgroundResolutions, - maxTimeShareMilliseconds, keepAllBackgroundSymbolUses, + BoundModel(tcConfig, tcGlobals, tcImports, + keepAssemblyContents, keepAllBackgroundResolutions, + keepAllBackgroundSymbolUses, enableBackgroundItemKeyStoreAndSemanticClassification, enablePartialTypeChecking, beforeFileChecked, fileChecked, prevTcInfo, - prevTcInfoOptional, syntaxTreeOpt, - ref None) - + None) + /// Global service state type FrameworkImportsCacheKey = (*resolvedpath*)string list * string * (*TargetFrameworkDirectories*)string list * (*fsharpBinaries*)string * (*langVersion*)decimal /// Represents a cache of 'framework' references that can be shared between multiple incremental builds -type FrameworkImportsCache(size) = +type FrameworkImportsCache(size) = + + let gate = obj() - // Mutable collection protected via CompilationThreadToken - let frameworkTcImportsCache = AgedLookup(size, areSimilar=(fun (x, y) -> x = y)) + // Mutable collection protected via CompilationThreadToken + let frameworkTcImportsCache = AgedLookup>(size, areSimilar=(fun (x, y) -> x = y)) /// Reduce the size of the cache in low-memory scenarios - member __.Downsize ctok = frameworkTcImportsCache.Resize(ctok, newKeepStrongly=0) + member _.Downsize() = frameworkTcImportsCache.Resize(AnyCallerThread, newKeepStrongly=0) /// Clear the cache - member __.Clear ctok = frameworkTcImportsCache.Clear ctok + member _.Clear() = frameworkTcImportsCache.Clear AnyCallerThread /// This function strips the "System" assemblies from the tcConfig and returns a age-cached TcImports for them. - member __.Get(ctok, tcConfig: TcConfig) = - cancellable { - // Split into installed and not installed. - let frameworkDLLs, nonFrameworkResolutions, unresolved = TcAssemblyResolutions.SplitNonFoundationalResolutions(ctok, tcConfig) - let frameworkDLLsKey = - frameworkDLLs + member _.GetNode(tcConfig: TcConfig, frameworkDLLs: AssemblyResolution list, nonFrameworkResolutions: AssemblyResolution list) = + let frameworkDLLsKey = + frameworkDLLs |> List.map (fun ar->ar.resolvedPath) // The cache key. Just the minimal data. |> List.sort // Sort to promote cache hits. - let! tcGlobals, frameworkTcImports = - cancellable { - // Prepare the frameworkTcImportsCache - // - // The data elements in this key are very important. There should be nothing else in the TcConfig that logically affects - // the import of a set of framework DLLs into F# CCUs. That is, the F# CCUs that result from a set of DLLs (including - // FSharp.Core.dll and mscorlib.dll) must be logically invariant of all the other compiler configuration parameters. - let key = (frameworkDLLsKey, - tcConfig.primaryAssembly.Name, - tcConfig.GetTargetFrameworkDirectories(), - tcConfig.fsharpBinariesDir, - tcConfig.langVersion.SpecifiedVersion) - - match frameworkTcImportsCache.TryGet (ctok, key) with - | Some res -> return res - | None -> - let tcConfigP = TcConfigProvider.Constant tcConfig - let! ((tcGlobals, tcImports) as res) = TcImports.BuildFrameworkTcImports (ctok, tcConfigP, frameworkDLLs, nonFrameworkResolutions) - frameworkTcImportsCache.Put(ctok, key, res) - return tcGlobals, tcImports - } + // Prepare the frameworkTcImportsCache + // + // The data elements in this key are very important. There should be nothing else in the TcConfig that logically affects + // the import of a set of framework DLLs into F# CCUs. That is, the F# CCUs that result from a set of DLLs (including + // FSharp.Core.dll and mscorlib.dll) must be logically invariant of all the other compiler configuration parameters. + let key = (frameworkDLLsKey, + tcConfig.primaryAssembly.Name, + tcConfig.GetTargetFrameworkDirectories(), + tcConfig.fsharpBinariesDir, + tcConfig.langVersion.SpecifiedVersion) + + let node = + lock gate (fun () -> + match frameworkTcImportsCache.TryGet (AnyCallerThread, key) with + | Some lazyWork -> lazyWork + | None -> + let lazyWork = GraphNode(node { + let tcConfigP = TcConfigProvider.Constant tcConfig + return! TcImports.BuildFrameworkTcImports (tcConfigP, frameworkDLLs, nonFrameworkResolutions) + }) + frameworkTcImportsCache.Put(AnyCallerThread, key, lazyWork) + lazyWork + ) + node + + /// This function strips the "System" assemblies from the tcConfig and returns a age-cached TcImports for them. + member this.Get(tcConfig: TcConfig) = + node { + // Split into installed and not installed. + let frameworkDLLs, nonFrameworkResolutions, unresolved = TcAssemblyResolutions.SplitNonFoundationalResolutions(tcConfig) + let node = this.GetNode(tcConfig, frameworkDLLs, nonFrameworkResolutions) + let! tcGlobals, frameworkTcImports = node.GetOrComputeValue() return tcGlobals, frameworkTcImports, nonFrameworkResolutions, unresolved } /// Represents the interim state of checking an assembly [] -type PartialCheckResults private (semanticModel: SemanticModel, timeStamp: DateTime) = +type PartialCheckResults (boundModel: BoundModel, timeStamp: DateTime) = + + member _.TcImports = boundModel.TcImports - let eval ctok (work: Eventually<'T>) = - match work with - | Eventually.Done res -> res - | _ -> Eventually.force ctok work + member _.TcGlobals = boundModel.TcGlobals - member _.TcImports = semanticModel.TcImports - member _.TcGlobals = semanticModel.TcGlobals - member _.TcConfig = semanticModel.TcConfig + member _.TcConfig = boundModel.TcConfig member _.TimeStamp = timeStamp - member _.TcInfo ctok = semanticModel.TcInfo |> eval ctok + member _.TryPeekTcInfo() = boundModel.TryPeekTcInfo() + + member _.TryPeekTcInfoWithExtras() = boundModel.TryPeekTcInfoWithExtras() - member _.TcInfoWithOptional ctok = semanticModel.TcInfoWithOptional |> eval ctok + member _.GetOrComputeTcInfo() = boundModel.GetOrComputeTcInfo() - member _.TryGetItemKeyStore ctok = - let _, info = semanticModel.TcInfoWithOptional |> eval ctok - info.itemKeyStore + member _.GetOrComputeTcInfoWithExtras() = boundModel.GetOrComputeTcInfoWithExtras() - member _.GetSemanticClassification ctok = - let _, info = semanticModel.TcInfoWithOptional |> eval ctok - info.semanticClassification + member _.GetOrComputeItemKeyStoreIfEnabled() = + node { + let! info = boundModel.GetOrComputeTcInfoExtras() + return info.itemKeyStore + } - static member Create (semanticModel: SemanticModel, timestamp) = - PartialCheckResults(semanticModel, timestamp) + member _.GetOrComputeSemanticClassificationIfEnabled() = + node { + let! info = boundModel.GetOrComputeTcInfoExtras() + return info.semanticClassificationKeyStore + } [] -module Utilities = +module Utilities = let TryFindFSharpStringAttribute tcGlobals attribSpec attribs = match TryFindFSharpAttribute tcGlobals attribSpec attribs with | Some (Attrib(_, _, [ AttribStringArg s ], _, _, _, _)) -> Some s @@ -614,16 +671,15 @@ module Utilities = /// The implementation of the information needed by TcImports in CompileOps.fs for an F# assembly reference. // -/// Constructs the build data (IRawFSharpAssemblyData) representing the assembly when used +/// Constructs the build data (IRawFSharpAssemblyData) representing the assembly when used /// as a cross-assembly reference. Note the assembly has not been generated on disk, so this is /// a virtualized view of the assembly contents as computed by background checking. -type RawFSharpAssemblyDataBackedByLanguageService (tcConfig, tcGlobals, tcState: TcState, outfile, topAttrs, assemblyName, ilAssemRef) = +type RawFSharpAssemblyDataBackedByLanguageService (tcConfig, tcGlobals, generatedCcu: CcuThunk, outfile, topAttrs, assemblyName, ilAssemRef) = - let generatedCcu = tcState.Ccu let exportRemapping = MakeExportRemapping generatedCcu generatedCcu.Contents - - let sigData = - let _sigDataAttributes, sigDataResources = Driver.EncodeSignatureData(tcConfig, tcGlobals, exportRemapping, generatedCcu, outfile, true) + + let sigData = + let _sigDataAttributes, sigDataResources = EncodeSignatureData(tcConfig, tcGlobals, exportRemapping, generatedCcu, outfile, true) [ for r in sigDataResources do let ccuName = GetSignatureDataResourceName r yield (ccuName, (fun () -> r.GetBytes())) ] @@ -632,103 +688,103 @@ type RawFSharpAssemblyDataBackedByLanguageService (tcConfig, tcGlobals, tcState: let ivtAttrs = topAttrs.assemblyAttrs |> List.choose (List.singleton >> TryFindFSharpStringAttribute tcGlobals tcGlobals.attrib_InternalsVisibleToAttribute) - interface IRawFSharpAssemblyData with - member __.GetAutoOpenAttributes(_ilg) = autoOpenAttrs - member __.GetInternalsVisibleToAttributes(_ilg) = ivtAttrs - member __.TryGetILModuleDef() = None - member __.GetRawFSharpSignatureData(_m, _ilShortAssemName, _filename) = sigData - member __.GetRawFSharpOptimizationData(_m, _ilShortAssemName, _filename) = [ ] - member __.GetRawTypeForwarders() = mkILExportedTypes [] // TODO: cross-project references with type forwarders - member __.ShortAssemblyName = assemblyName - member __.ILScopeRef = IL.ILScopeRef.Assembly ilAssemRef - member __.ILAssemblyRefs = [] // These are not significant for service scenarios - member __.HasAnyFSharpSignatureDataAttribute = true - member __.HasMatchingFSharpSignatureDataAttribute _ilg = true + interface IRawFSharpAssemblyData with + member _.GetAutoOpenAttributes() = autoOpenAttrs + member _.GetInternalsVisibleToAttributes() = ivtAttrs + member _.TryGetILModuleDef() = None + member _.GetRawFSharpSignatureData(_m, _ilShortAssemName, _filename) = sigData + member _.GetRawFSharpOptimizationData(_m, _ilShortAssemName, _filename) = [ ] + member _.GetRawTypeForwarders() = mkILExportedTypes [] // TODO: cross-project references with type forwarders + member _.ShortAssemblyName = assemblyName + member _.ILScopeRef = IL.ILScopeRef.Assembly ilAssemRef + member _.ILAssemblyRefs = [] // These are not significant for service scenarios + member _.HasAnyFSharpSignatureDataAttribute = true + member _.HasMatchingFSharpSignatureDataAttribute = true + +type IncrementalBuilderState = + { + // stampedFileNames represent the real stamps of the files. + // logicalStampedFileNames represent the stamps of the files that are used to calculate the project's logical timestamp. + stampedFileNames: ImmutableArray + logicalStampedFileNames: ImmutableArray + stampedReferencedAssemblies: ImmutableArray + initialBoundModel: GraphNode + boundModels: ImmutableArray> + finalizedBoundModel: GraphNode<((ILAssemblyRef * IRawFSharpAssemblyData option * TypedImplFile list option * BoundModel) * DateTime)> + } /// Manages an incremental build graph for the build of a single F# project -type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInputs, nonFrameworkResolutions, unresolvedReferences, tcConfig: TcConfig, projectDirectory, outfile, - assemblyName, niceNameGen: NiceNameGenerator, lexResourceManager, - sourceFiles, loadClosureOpt: LoadClosure option, - keepAssemblyContents, keepAllBackgroundResolutions, - maxTimeShareMilliseconds, keepAllBackgroundSymbolUses, - enableBackgroundItemKeyStoreAndSemanticClassification, - enablePartialTypeChecking, - dependencyProviderOpt: DependencyProvider option) = - - let tcConfigP = TcConfigProvider.Constant tcConfig - let fileParsed = new Event() - let beforeFileChecked = new Event() - let fileChecked = new Event() - let projectChecked = new Event() +type IncrementalBuilder( + initialBoundModel: BoundModel, + tcGlobals, + nonFrameworkAssemblyInputs, + tcConfig: TcConfig, + outfile, + assemblyName, + lexResourceManager, + sourceFiles, + enablePartialTypeChecking, + beforeFileChecked: Event, + fileChecked: Event, #if !NO_EXTENSIONTYPING - let importsInvalidatedByTypeProvider = new Event() + importsInvalidatedByTypeProvider: Event, #endif - let mutable currentTcImportsOpt = None - let defaultPartialTypeChecking = enablePartialTypeChecking - let mutable enablePartialTypeChecking = enablePartialTypeChecking + allDependencies) = - // Check for the existence of loaded sources and prepend them to the sources list if present. - let sourceFiles = tcConfig.GetAvailableLoadedSources() @ (sourceFiles |>List.map (fun s -> rangeStartup, s)) - - // Mark up the source files with an indicator flag indicating if they are the last source file in the project - let sourceFiles = - let flags, isExe = tcConfig.ComputeCanContainEntryPoint(sourceFiles |> List.map snd) - ((sourceFiles, flags) ||> List.map2 (fun (m, nm) flag -> (m, nm, (flag, isExe)))) + let fileParsed = new Event() + let projectChecked = new Event() let defaultTimeStamp = DateTime.UtcNow - let basicDependencies = - [ for (UnresolvedAssemblyReference(referenceText, _)) in unresolvedReferences do - // Exclude things that are definitely not a file name - if not(FileSystem.IsInvalidPathShim referenceText) then - let file = if FileSystem.IsPathRootedShim referenceText then referenceText else Path.Combine(projectDirectory, referenceText) - yield file - - for r in nonFrameworkResolutions do - yield r.resolvedPath ] + let mutable isImportsInvalidated = false - let allDependencies = - [| yield! basicDependencies - for (_, f, _) in sourceFiles do - yield f |] - - // For scripts, the dependency provider is already available. - // For projects create a fresh one for the project. - let dependencyProvider = - match dependencyProviderOpt with - | None -> new DependencyProvider() - | Some dependencyProvider -> dependencyProvider +#if !NO_EXTENSIONTYPING + do importsInvalidatedByTypeProvider.Publish.Add(fun () -> isImportsInvalidated <- true) +#endif //---------------------------------------------------- - // START OF BUILD TASK FUNCTIONS - + // START OF BUILD TASK FUNCTIONS + /// Get the timestamp of the given file name. - let StampFileNameTask (cache: TimeStampCache) _ctok (_m: range, filename: string, _isLastCompiland) = + let StampFileNameTask (cache: TimeStampCache) (_m: range, filename: string, _isLastCompiland) = cache.GetFileTimeStamp filename - /// Parse the given file and return the given input. - let ParseTask ctok (sourceRange: range, filename: string, isLastCompiland) = - DoesNotRequireCompilerThreadTokenAndCouldPossiblyBeMadeConcurrent ctok - SyntaxTree(tcConfig, fileParsed, lexResourceManager, sourceRange, filename, isLastCompiland) - /// Timestamps of referenced assemblies are taken from the file's timestamp. - let StampReferencedAssemblyTask (cache: TimeStampCache) ctok (_ref, timeStamper) = - timeStamper cache ctok - - // Link all the assemblies together and produce the input typecheck accumulator - let CombineImportedAssembliesTask ctok : Cancellable = - cancellable { + let StampReferencedAssemblyTask (cache: TimeStampCache) (_ref, timeStamper) = + timeStamper cache + + // Link all the assemblies together and produce the input typecheck accumulator + static let CombineImportedAssembliesTask ( + assemblyName, + tcConfig: TcConfig, + tcConfigP, + tcGlobals, + frameworkTcImports, + nonFrameworkResolutions, + unresolvedReferences, + dependencyProvider, + loadClosureOpt: LoadClosure option, + niceNameGen, + basicDependencies, + keepAssemblyContents, + keepAllBackgroundResolutions, + keepAllBackgroundSymbolUses, + enableBackgroundItemKeyStoreAndSemanticClassification, + defaultPartialTypeChecking, + beforeFileChecked, + fileChecked, + importsInvalidatedByTypeProvider: Event) : NodeCode = + node { let errorLogger = CompilationErrorLogger("CombineImportedAssembliesTask", tcConfig.errorSeverityOptions) - // Return the disposable object that cleans up - use _holder = new CompilationGlobalsScope(errorLogger, BuildPhase.Parameter) + use _ = new CompilationGlobalsScope(errorLogger, BuildPhase.Parameter) - let! tcImports = - cancellable { + let! tcImports = + node { try - let! tcImports = TcImports.BuildNonFrameworkTcImports(ctok, tcConfigP, tcGlobals, frameworkTcImports, nonFrameworkResolutions, unresolvedReferences, dependencyProvider) + let! tcImports = TcImports.BuildNonFrameworkTcImports(tcConfigP, frameworkTcImports, nonFrameworkResolutions, unresolvedReferences, dependencyProvider) #if !NO_EXTENSIONTYPING - tcImports.GetCcusExcludingBase() |> Seq.iter (fun ccu -> - // When a CCU reports an invalidation, merge them together and just report a + tcImports.GetCcusExcludingBase() |> Seq.iter (fun ccu -> + // When a CCU reports an invalidation, merge them together and just report a // general "imports invalidated". This triggers a rebuild. // // We are explicit about what the handler closure captures to help reason about the @@ -736,540 +792,526 @@ type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInput // or keeps itself alive mistakenly, e.g. via some global state in the type provider instance. // // The handler only captures - // 1. a weak reference to the importsInvalidated event. + // 1. a weak reference to the importsInvalidated event. // // The IncrementalBuilder holds the strong reference the importsInvalidated event. // - // In the invalidation handler we use a weak reference to allow the IncrementalBuilder to + // In the invalidation handler we use a weak reference to allow the IncrementalBuilder to // be collected if, for some reason, a TP instance is not disposed or not GC'd. let capturedImportsInvalidated = WeakReference<_>(importsInvalidatedByTypeProvider) - ccu.Deref.InvalidateEvent.Add(fun msg -> - match capturedImportsInvalidated.TryGetTarget() with - | true, tg -> tg.Trigger msg - | _ -> ())) + ccu.Deref.InvalidateEvent.Add(fun _ -> + match capturedImportsInvalidated.TryGetTarget() with + | true, tg -> tg.Trigger() + | _ -> ())) #endif - currentTcImportsOpt <- Some tcImports return tcImports - with e -> + with e -> System.Diagnostics.Debug.Assert(false, sprintf "Could not BuildAllReferencedDllTcImports %A" e) errorLogger.Warning e - return frameworkTcImports + return frameworkTcImports } let tcInitial = GetInitialTcEnv (assemblyName, rangeStartup, tcConfig, tcImports, tcGlobals) let tcState = GetInitialTcState (rangeStartup, assemblyName, tcConfig, tcGlobals, tcImports, niceNameGen, tcInitial) - let loadClosureErrors = - [ match loadClosureOpt with + let loadClosureErrors = + [ match loadClosureOpt with | None -> () - | Some loadClosure -> + | Some loadClosure -> for inp in loadClosure.Inputs do - for (err, isError) in inp.MetaCommandDiagnostics do - yield err, (if isError then FSharpErrorSeverity.Error else FSharpErrorSeverity.Warning) ] + yield! inp.MetaCommandDiagnostics ] - let initialErrors = Array.append (Array.ofList loadClosureErrors) (errorLogger.GetErrors()) - let tcInfo = + let initialErrors = Array.append (Array.ofList loadClosureErrors) (errorLogger.GetDiagnostics()) + let tcInfo = { tcState=tcState tcEnvAtEndOfFile=tcInitial topAttribs=None latestCcuSigForFile=None - tcErrorsRev = [ initialErrors ] + tcErrorsRev = [ initialErrors ] moduleNamesDict = Map.empty tcDependencyFiles = basicDependencies sigNameOpt = None } - let tcInfoOptional = - { - tcResolutionsRev=[] - tcSymbolUsesRev=[] - tcOpenDeclarationsRev=[] - latestImplFile=None - itemKeyStore = None - semanticClassification = [||] - } - return - SemanticModel.Create( + return + BoundModel.Create( tcConfig, tcGlobals, tcImports, - keepAssemblyContents, - keepAllBackgroundResolutions, - maxTimeShareMilliseconds, - keepAllBackgroundSymbolUses, + keepAssemblyContents, + keepAllBackgroundResolutions, + keepAllBackgroundSymbolUses, enableBackgroundItemKeyStoreAndSemanticClassification, defaultPartialTypeChecking, - beforeFileChecked, fileChecked, tcInfo, Eventually.Done (Some tcInfoOptional), None) } - - /// Type check all files. - let TypeCheckTask ctok (prevSemanticModel: SemanticModel) syntaxTree: Eventually = - eventually { - RequireCompilationThread ctok - let! semanticModel = prevSemanticModel.Next(syntaxTree) + beforeFileChecked, + fileChecked, + tcInfo, + None) } + + /// Type check all files eagerly. + let TypeCheckTask partialCheck (prevBoundModel: BoundModel) syntaxTree: NodeCode = + node { + let! tcInfo = prevBoundModel.GetOrComputeTcInfo() + let boundModel = prevBoundModel.Next(syntaxTree, tcInfo) + // Eagerly type check // We need to do this to keep the expected behavior of events (namely fileChecked) when checking a file/project. - let! _ = semanticModel.GetState(enablePartialTypeChecking) - return semanticModel + if partialCheck then + let! _ = boundModel.GetOrComputeTcInfo() + () + else + let! _ = boundModel.GetOrComputeTcInfoWithExtras() + () + + return boundModel } /// Finish up the typechecking to produce outputs for the rest of the compilation process - let FinalizeTypeCheckTask ctok (semanticModels: SemanticModel[]) = - cancellable { - DoesNotRequireCompilerThreadTokenAndCouldPossiblyBeMadeConcurrent ctok + let FinalizeTypeCheckTask (boundModels: ImmutableArray) = + node { + let errorLogger = CompilationErrorLogger("FinalizeTypeCheckTask", tcConfig.errorSeverityOptions) + use _ = new CompilationGlobalsScope(errorLogger, BuildPhase.TypeCheck) + + let! results = + boundModels + |> Seq.map (fun boundModel -> node { + if enablePartialTypeChecking then + let! tcInfo = boundModel.GetOrComputeTcInfo() + return tcInfo, None + else + let! tcInfo, tcInfoExtras = boundModel.GetOrComputeTcInfoWithExtras() + return tcInfo, tcInfoExtras.latestImplFile + }) + |> Seq.map (fun work -> + node { + let! tcInfo, latestImplFile = work + return (tcInfo.tcEnvAtEndOfFile, defaultArg tcInfo.topAttribs EmptyTopAttrs, latestImplFile, tcInfo.latestCcuSigForFile) + } + ) + |> NodeCode.Sequential - let errorLogger = CompilationErrorLogger("CombineImportedAssembliesTask", tcConfig.errorSeverityOptions) - use _holder = new CompilationGlobalsScope(errorLogger, BuildPhase.TypeCheck) + let results = results |> List.ofSeq // Get the state at the end of the type-checking of the last file - let finalSemanticModel = semanticModels.[semanticModels.Length-1] + let finalBoundModel = boundModels.[boundModels.Length-1] - let finalInfo = finalSemanticModel.TcInfo |> Eventually.force ctok + let! finalInfo = finalBoundModel.GetOrComputeTcInfo() // Finish the checking - let (_tcEnvAtEndOfLastFile, topAttrs, mimpls, _), tcState = - let results = - semanticModels - |> List.ofArray - |> List.map (fun semanticModel -> - let tcInfo, latestImplFile = - if enablePartialTypeChecking then - let tcInfo = semanticModel.TcInfo |> Eventually.force ctok - tcInfo, None - else - let tcInfo, tcInfoOptional = semanticModel.TcInfoWithOptional |> Eventually.force ctok - tcInfo, tcInfoOptional.latestImplFile - tcInfo.tcEnvAtEndOfFile, defaultArg tcInfo.topAttribs EmptyTopAttrs, latestImplFile, tcInfo.latestCcuSigForFile) + let (_tcEnvAtEndOfLastFile, topAttrs, mimpls, _), tcState = TypeCheckMultipleInputsFinish (results, finalInfo.tcState) - - let ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt = - try - // TypeCheckClosedInputSetFinish fills in tcState.Ccu but in incremental scenarios we don't want this, - // so we make this temporary here - let oldContents = tcState.Ccu.Deref.Contents - try - let tcState, tcAssemblyExpr = TypeCheckClosedInputSetFinish (mimpls, tcState) - - // Compute the identity of the generated assembly based on attributes, options etc. - // Some of this is duplicated from fsc.fs - let ilAssemRef = - let publicKey = - try - let signingInfo = ValidateKeySigningAttributes (tcConfig, tcGlobals, topAttrs) - match GetStrongNameSigner signingInfo with - | None -> None - | Some s -> Some (PublicKey.KeyAsToken(s.PublicKey)) - with e -> - errorRecoveryNoRange e - None - let locale = TryFindFSharpStringAttribute tcGlobals (tcGlobals.FindSysAttrib "System.Reflection.AssemblyCultureAttribute") topAttrs.assemblyAttrs - let assemVerFromAttrib = - TryFindFSharpStringAttribute tcGlobals (tcGlobals.FindSysAttrib "System.Reflection.AssemblyVersionAttribute") topAttrs.assemblyAttrs - |> Option.bind (fun v -> try Some (parseILVersion v) with _ -> None) - let ver = - match assemVerFromAttrib with - | None -> tcConfig.version.GetVersionInfo(tcConfig.implicitIncludeDir) - | Some v -> v - ILAssemblyRef.Create(assemblyName, None, publicKey, false, Some ver, locale) - - let tcAssemblyDataOpt = - try - // Assemblies containing type provider components can not successfully be used via cross-assembly references. - // We return 'None' for the assembly portion of the cross-assembly reference - let hasTypeProviderAssemblyAttrib = - topAttrs.assemblyAttrs |> List.exists (fun (Attrib(tcref, _, _, _, _, _, _)) -> - let nm = tcref.CompiledRepresentationForNamedType.BasicQualifiedName - nm = typeof.FullName) + let ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt = + try + let tcState, tcAssemblyExpr, ccuContents = TypeCheckClosedInputSetFinish (mimpls, tcState) - if tcState.CreatesGeneratedProvidedTypes || hasTypeProviderAssemblyAttrib then - None - else - Some (RawFSharpAssemblyDataBackedByLanguageService (tcConfig, tcGlobals, tcState, outfile, topAttrs, assemblyName, ilAssemRef) :> IRawFSharpAssemblyData) + let generatedCcu = tcState.Ccu.CloneWithFinalizedContents(ccuContents) - with e -> + // Compute the identity of the generated assembly based on attributes, options etc. + // Some of this is duplicated from fsc.fs + let ilAssemRef = + let publicKey = + try + let signingInfo = ValidateKeySigningAttributes (tcConfig, tcGlobals, topAttrs) + match GetStrongNameSigner signingInfo with + | None -> None + | Some s -> Some (PublicKey.KeyAsToken(s.PublicKey)) + with e -> errorRecoveryNoRange e None - ilAssemRef, tcAssemblyDataOpt, Some tcAssemblyExpr - finally - tcState.Ccu.Deref.Contents <- oldContents - with e -> + let locale = TryFindFSharpStringAttribute tcGlobals (tcGlobals.FindSysAttrib "System.Reflection.AssemblyCultureAttribute") topAttrs.assemblyAttrs + let assemVerFromAttrib = + TryFindFSharpStringAttribute tcGlobals (tcGlobals.FindSysAttrib "System.Reflection.AssemblyVersionAttribute") topAttrs.assemblyAttrs + |> Option.bind (fun v -> try Some (parseILVersion v) with _ -> None) + let ver = + match assemVerFromAttrib with + | None -> tcConfig.version.GetVersionInfo(tcConfig.implicitIncludeDir) + | Some v -> v + ILAssemblyRef.Create(assemblyName, None, publicKey, false, Some ver, locale) + + let tcAssemblyDataOpt = + try + // Assemblies containing type provider components can not successfully be used via cross-assembly references. + // We return 'None' for the assembly portion of the cross-assembly reference + let hasTypeProviderAssemblyAttrib = + topAttrs.assemblyAttrs |> List.exists (fun (Attrib(tcref, _, _, _, _, _, _)) -> + let nm = tcref.CompiledRepresentationForNamedType.BasicQualifiedName + nm = typeof.FullName) + + if tcState.CreatesGeneratedProvidedTypes || hasTypeProviderAssemblyAttrib then + None + else + Some (RawFSharpAssemblyDataBackedByLanguageService (tcConfig, tcGlobals, generatedCcu, outfile, topAttrs, assemblyName, ilAssemRef) :> IRawFSharpAssemblyData) + with e -> + errorRecoveryNoRange e + None + ilAssemRef, tcAssemblyDataOpt, Some tcAssemblyExpr + with e -> errorRecoveryNoRange e mkSimpleAssemblyRef assemblyName, None, None - let finalSemanticModelWithErrors = finalSemanticModel.Finish((errorLogger.GetErrors() :: finalInfo.tcErrorsRev), Some topAttrs) |> Eventually.force ctok - return ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt, finalSemanticModelWithErrors - } + let diagnostics = errorLogger.GetDiagnostics() :: finalInfo.tcErrorsRev + let! finalBoundModelWithErrors = finalBoundModel.Finish(diagnostics, Some topAttrs) + return ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt, finalBoundModelWithErrors + } // END OF BUILD TASK FUNCTIONS - // --------------------------------------------------------------------------------------------- + // --------------------------------------------------------------------------------------------- - // --------------------------------------------------------------------------------------------- + // --------------------------------------------------------------------------------------------- // START OF BUILD DESCRIPTION + let GetSyntaxTree (sourceRange: range, filename: string, isLastCompiland) = + SyntaxTree(tcConfig, fileParsed, lexResourceManager, sourceRange, filename, isLastCompiland) + // Inputs let fileNames = sourceFiles |> Array.ofList // TODO: This should be an immutable array. let referencedAssemblies = nonFrameworkAssemblyInputs |> Array.ofList // TODO: This should be an immutable array. - (* - The data below represents a dependency graph. - - ReferencedAssembliesStamps => FileStamps => SemanticModels => FinalizedSemanticModel - *) - - // stampedFileNames represent the real stamps of the files. - // logicalStampedFileNames represent the stamps of the files that are used to calculate the project's logical timestamp. - let stampedFileNames = Array.init fileNames.Length (fun _ -> DateTime.MinValue) - let logicalStampedFileNames = Array.init fileNames.Length (fun _ -> DateTime.MinValue) - let stampedReferencedAssemblies = Array.init referencedAssemblies.Length (fun _ -> DateTime.MinValue) - let mutable initialSemanticModel = None - let semanticModels = Array.zeroCreate fileNames.Length - let mutable finalizedSemanticModel = None - - let computeStampedFileName (cache: TimeStampCache) (ctok: CompilationThreadToken) slot fileInfo cont = - let currentStamp = stampedFileNames.[slot] - let stamp = StampFileNameTask cache ctok fileInfo + let createBoundModelGraphNode initialBoundModel (boundModels: ImmutableArray>.Builder) i = + let fileInfo = fileNames.[i] + let prevBoundModelGraphNode = + match i with + | 0 (* first file *) -> initialBoundModel + | _ -> boundModels.[i - 1] + let syntaxTree = GetSyntaxTree fileInfo + GraphNode(node { + let! prevBoundModel = prevBoundModelGraphNode.GetOrComputeValue() + return! TypeCheckTask enablePartialTypeChecking prevBoundModel syntaxTree + }) + + let rec createFinalizeBoundModelGraphNode (boundModels: ImmutableArray>.Builder) = + GraphNode(node { + // Compute last bound model then get all the evaluated models. + let! _ = boundModels.[boundModels.Count - 1].GetOrComputeValue() + let boundModels = + boundModels + |> Seq.map (fun x -> x.TryPeekValue().Value) + |> ImmutableArray.CreateRange + + let! result = FinalizeTypeCheckTask boundModels + let result = (result, DateTime.UtcNow) + return result + }) + + and computeStampedFileName (state: IncrementalBuilderState) (cache: TimeStampCache) slot fileInfo = + let currentStamp = state.stampedFileNames.[slot] + let stamp = StampFileNameTask cache fileInfo if currentStamp <> stamp then - match semanticModels.[slot] with + match state.boundModels.[slot].TryPeekValue() with // This prevents an implementation file that has a backing signature file from invalidating the rest of the build. - | Some(semanticModel) when enablePartialTypeChecking && semanticModel.BackingSignature.IsSome -> - stampedFileNames.[slot] <- StampFileNameTask cache ctok fileInfo - semanticModel.Invalidate() + | ValueSome(boundModel) when enablePartialTypeChecking && boundModel.BackingSignature.IsSome -> + let newBoundModel = boundModel.ClearTcInfoExtras() + { state with + boundModels = state.boundModels.RemoveAt(slot).Insert(slot, GraphNode(node { return newBoundModel })) + stampedFileNames = state.stampedFileNames.SetItem(slot, StampFileNameTask cache fileInfo) + } | _ -> - // Something changed, the finalized view of the project must be invalidated. - finalizedSemanticModel <- None + + let stampedFileNames = state.stampedFileNames.ToBuilder() + let logicalStampedFileNames = state.logicalStampedFileNames.ToBuilder() + let boundModels = state.boundModels.ToBuilder() // Invalidate the file and all files below it. - stampedFileNames.[slot..] - |> Array.iteri (fun j _ -> - let stamp = StampFileNameTask cache ctok fileNames.[slot + j] + for j = 0 to stampedFileNames.Count - slot - 1 do + let stamp = StampFileNameTask cache fileNames.[slot + j] stampedFileNames.[slot + j] <- stamp logicalStampedFileNames.[slot + j] <- stamp - semanticModels.[slot + j] <- None - ) + boundModels.[slot + j] <- createBoundModelGraphNode state.initialBoundModel boundModels (slot + j) - if semanticModels.[slot].IsNone then - cont slot fileInfo + { state with + // Something changed, the finalized view of the project must be invalidated. + finalizedBoundModel = createFinalizeBoundModelGraphNode boundModels - let computeStampedFileNames (cache: TimeStampCache) (ctok: CompilationThreadToken) = - fileNames - |> Array.iteri (fun i fileInfo -> - computeStampedFileName cache ctok i fileInfo (fun _ _ -> ()) + stampedFileNames = stampedFileNames.ToImmutable() + logicalStampedFileNames = logicalStampedFileNames.ToImmutable() + boundModels = boundModels.ToImmutable() + } + else + state + + and computeStampedFileNames state (cache: TimeStampCache) = + let mutable i = 0 + (state, fileNames) + ||> Array.fold (fun state fileInfo -> + let newState = computeStampedFileName state cache i fileInfo + i <- i + 1 + newState ) - let computeStampedReferencedAssemblies (cache: TimeStampCache) (ctok: CompilationThreadToken) = + and computeStampedReferencedAssemblies state canTriggerInvalidation (cache: TimeStampCache) = + let stampedReferencedAssemblies = state.stampedReferencedAssemblies.ToBuilder() + let mutable referencesUpdated = false referencedAssemblies |> Array.iteri (fun i asmInfo -> - let currentStamp = stampedReferencedAssemblies.[i] - let stamp = StampReferencedAssemblyTask cache ctok asmInfo + + let currentStamp = state.stampedReferencedAssemblies.[i] + let stamp = StampReferencedAssemblyTask cache asmInfo if currentStamp <> stamp then referencesUpdated <- true stampedReferencedAssemblies.[i] <- stamp ) - - if referencesUpdated then - // Something changed, the finalized view of the project must be invalidated. - // This is the only place where the initial semantic model will be invalidated. - initialSemanticModel <- None - finalizedSemanticModel <- None - - for i = 0 to stampedFileNames.Length - 1 do - stampedFileNames.[i] <- DateTime.MinValue - logicalStampedFileNames.[i] <- DateTime.MinValue - semanticModels.[i] <- None - - let getStampedFileNames cache ctok = - computeStampedFileNames cache ctok - logicalStampedFileNames - - let getStampedReferencedAssemblies cache ctok = - computeStampedReferencedAssemblies cache ctok - stampedReferencedAssemblies - - let computeInitialSemanticModel (ctok: CompilationThreadToken) = - cancellable { - match initialSemanticModel with - | None -> - let! result = CombineImportedAssembliesTask ctok - initialSemanticModel <- Some result - return result - | Some result -> - return result - } - let computeSemanticModel (cache: TimeStampCache) (ctok: CompilationThreadToken) (slot: int) = - if IncrementalBuild.injectCancellationFault then Cancellable.canceled () + if referencesUpdated then + // Build is invalidated. The build must be rebuilt with the newly updated references. + if not isImportsInvalidated && canTriggerInvalidation then + isImportsInvalidated <- true + { state with + stampedReferencedAssemblies = stampedReferencedAssemblies.ToImmutable() + } else + state - cancellable { - let! initial = computeInitialSemanticModel ctok - - let fileInfo = fileNames.[slot] - - computeStampedFileName cache ctok slot fileInfo (fun slot fileInfo -> - let prevSemanticModel = - match slot with - | 0 (* first file *) -> initial - | _ -> - match semanticModels.[slot - 1] with - | Some(prevSemanticModel) -> prevSemanticModel - | _ -> - // This shouldn't happen, but on the off-chance, just grab the initial semantic model. - initial - - let semanticModel = TypeCheckTask ctok prevSemanticModel (ParseTask ctok fileInfo) |> Eventually.force ctok - - semanticModels.[slot] <- Some semanticModel - ) - } + let tryGetSlot (state: IncrementalBuilderState) slot = + match state.boundModels.[slot].TryPeekValue() with + | ValueSome boundModel -> + (boundModel, state.stampedFileNames.[slot]) + |> Some + | _ -> + None - let computeSemanticModels (cache: TimeStampCache) (ctok: CompilationThreadToken) = - cancellable { - for slot = 0 to fileNames.Length - 1 do - do! computeSemanticModel cache ctok slot + let tryGetBeforeSlot (state: IncrementalBuilderState) slot = + match slot with + | 0 (* first file *) -> + (initialBoundModel, DateTime.MinValue) + |> Some + | _ -> + tryGetSlot state (slot - 1) + + let evalUpToTargetSlot (state: IncrementalBuilderState) targetSlot = + node { + if targetSlot < 0 then + return Some(initialBoundModel, DateTime.MinValue) + else + let! boundModel = state.boundModels.[targetSlot].GetOrComputeValue() + return Some(boundModel, state.stampedFileNames.[targetSlot]) } - let computeFinalizedSemanticModel (cache: TimeStampCache) (ctok: CompilationThreadToken) = - cancellable { - let! _ = computeSemanticModels cache ctok + let MaxTimeStampInDependencies stamps = + if Seq.isEmpty stamps then + DateTime.MinValue + else + stamps + |> Seq.max - match finalizedSemanticModel with - | Some result -> return result - | _ -> - let semanticModels = semanticModels |> Array.choose id - - let! result = FinalizeTypeCheckTask ctok semanticModels - let result = (result, DateTime.UtcNow) - finalizedSemanticModel <- Some result - return result - } + // END OF BUILD DESCRIPTION + // --------------------------------------------------------------------------------------------- - let step (cache: TimeStampCache) (ctok: CompilationThreadToken) = - cancellable { - computeStampedReferencedAssemblies cache ctok - computeStampedFileNames cache ctok + (* + The data below represents a dependency graph. - match semanticModels |> Array.tryFindIndex (fun x -> x.IsNone) with - | Some slot -> - do! computeSemanticModel cache ctok slot - return true - | _ -> - return false - } + ReferencedAssembliesStamps => FileStamps => BoundModels => FinalizedBoundModel + *) - let tryGetBeforeSlot slot = - match slot with - | 0 (* first file *) -> - match initialSemanticModel with - | Some initial -> - (initial, DateTime.MinValue) - |> Some - | _ -> - None - | _ -> - match semanticModels.[slot - 1] with - | Some semanticModel -> - (semanticModel, stampedFileNames.[slot - 1]) - |> Some - | _ -> - None - - let eval cache ctok targetSlot = - if targetSlot < 0 then - cancellable { - computeStampedReferencedAssemblies cache ctok - - let! result = computeInitialSemanticModel ctok - return Some(result, DateTime.MinValue) - } - else - let evalUpTo = - cancellable { - for slot = 0 to targetSlot do - do! computeSemanticModel cache ctok slot - } - cancellable { - computeStampedReferencedAssemblies cache ctok + let gate = obj () + let mutable currentState = + let cache = TimeStampCache(defaultTimeStamp) + let initialBoundModel = GraphNode(node { return initialBoundModel }) + let boundModels = ImmutableArray.CreateBuilder(fileNames.Length) - let! _ = evalUpTo + for slot = 0 to fileNames.Length - 1 do + boundModels.Add(createBoundModelGraphNode initialBoundModel boundModels slot) - return - semanticModels.[targetSlot] - |> Option.map (fun semanticModel -> - (semanticModel, stampedFileNames.[targetSlot]) - ) + let state = + { + stampedFileNames = Array.init fileNames.Length (fun _ -> DateTime.MinValue) |> ImmutableArray.CreateRange + logicalStampedFileNames = Array.init fileNames.Length (fun _ -> DateTime.MinValue) |> ImmutableArray.CreateRange + stampedReferencedAssemblies = Array.init referencedAssemblies.Length (fun _ -> DateTime.MinValue) |> ImmutableArray.CreateRange + initialBoundModel = initialBoundModel + boundModels = boundModels.ToImmutable() + finalizedBoundModel = createFinalizeBoundModelGraphNode boundModels } + let state = computeStampedReferencedAssemblies state false cache + let state = computeStampedFileNames state cache + state - let tryGetFinalized cache ctok = - cancellable { - computeStampedReferencedAssemblies cache ctok - - let! res = computeFinalizedSemanticModel cache ctok - return Some res - } + let computeProjectTimeStamp (state: IncrementalBuilderState) = + let t1 = MaxTimeStampInDependencies state.stampedReferencedAssemblies + let t2 = MaxTimeStampInDependencies state.logicalStampedFileNames + max t1 t2 - let MaxTimeStampInDependencies cache (ctok: CompilationThreadToken) getStamps = - let stamps = getStamps cache ctok - if Array.isEmpty stamps then - DateTime.MinValue - else - stamps - |> Array.max + let setCurrentState state cache (ct: CancellationToken) = + lock gate (fun () -> + ct.ThrowIfCancellationRequested() + currentState <- computeStampedFileNames state cache + ) - // END OF BUILD DESCRIPTION - // --------------------------------------------------------------------------------------------- + let checkFileTimeStamps (cache: TimeStampCache) = + node { + let! ct = NodeCode.CancellationToken + setCurrentState currentState cache ct + } do IncrementalBuilderEventTesting.MRU.Add(IncrementalBuilderEventTesting.IBECreated) - member __.TcConfig = tcConfig + member _.TcConfig = tcConfig - member __.FileParsed = fileParsed.Publish + member _.FileParsed = fileParsed.Publish - member __.BeforeFileChecked = beforeFileChecked.Publish + member _.BeforeFileChecked = beforeFileChecked.Publish - member __.FileChecked = fileChecked.Publish + member _.FileChecked = fileChecked.Publish - member __.ProjectChecked = projectChecked.Publish + member _.ProjectChecked = projectChecked.Publish #if !NO_EXTENSIONTYPING - member __.ImportsInvalidatedByTypeProvider = importsInvalidatedByTypeProvider.Publish + member _.ImportsInvalidatedByTypeProvider = importsInvalidatedByTypeProvider.Publish #endif - member __.TryGetCurrentTcImports () = currentTcImportsOpt + member _.IsReferencesInvalidated = + // fast path + if isImportsInvalidated then true + else + computeStampedReferencedAssemblies currentState true (TimeStampCache(defaultTimeStamp)) |> ignore + isImportsInvalidated - member __.AllDependenciesDeprecated = allDependencies + member _.AllDependenciesDeprecated = allDependencies - member __.Step (ctok: CompilationThreadToken) = - cancellable { + member _.PopulatePartialCheckingResults () = + node { let cache = TimeStampCache defaultTimeStamp // One per step - let! res = step cache ctok - if not res then - projectChecked.Trigger() - return false - else - return true + do! checkFileTimeStamps cache + let! _ = currentState.finalizedBoundModel.GetOrComputeValue() + projectChecked.Trigger() } - - member builder.GetCheckResultsBeforeFileInProjectEvenIfStale filename: PartialCheckResults option = + + member builder.GetCheckResultsBeforeFileInProjectEvenIfStale filename: PartialCheckResults option = + let slotOfFile = builder.GetSlotOfFileName filename + let result = tryGetBeforeSlot currentState slotOfFile + + match result with + | Some (boundModel, timestamp) -> Some (PartialCheckResults (boundModel, timestamp)) + | _ -> None + + member builder.GetCheckResultsForFileInProjectEvenIfStale filename: PartialCheckResults option = let slotOfFile = builder.GetSlotOfFileName filename - let result = tryGetBeforeSlot slotOfFile - + let result = tryGetSlot currentState slotOfFile + match result with - | Some (semanticModel, timestamp) -> Some (PartialCheckResults.Create (semanticModel, timestamp)) + | Some (boundModel, timestamp) -> Some (PartialCheckResults (boundModel, timestamp)) | _ -> None - - - member builder.AreCheckResultsBeforeFileInProjectReady filename = + + member builder.TryGetCheckResultsBeforeFileInProject (filename) = + let cache = TimeStampCache defaultTimeStamp + let tmpState = computeStampedFileNames currentState cache + let slotOfFile = builder.GetSlotOfFileName filename - match tryGetBeforeSlot slotOfFile with - | Some _ -> true - | _ -> false - - member __.GetCheckResultsBeforeSlotInProject (ctok: CompilationThreadToken, slotOfFile) = - cancellable { + match tryGetBeforeSlot tmpState slotOfFile with + | Some(boundModel, timestamp) -> PartialCheckResults(boundModel, timestamp) |> Some + | _ -> None + + member builder.AreCheckResultsBeforeFileInProjectReady filename = + (builder.TryGetCheckResultsBeforeFileInProject filename).IsSome + + member _.GetCheckResultsBeforeSlotInProject (slotOfFile) = + node { let cache = TimeStampCache defaultTimeStamp - let! result = eval cache ctok (slotOfFile - 1) - + do! checkFileTimeStamps cache + let! result = evalUpToTargetSlot currentState (slotOfFile - 1) match result with - | Some (semanticModel, timestamp) -> return PartialCheckResults.Create (semanticModel, timestamp) - | None -> return! failwith "Build was not evaluated, expected the results to be ready after 'Eval' (GetCheckResultsBeforeSlotInProject)." + | Some (boundModel, timestamp) -> return PartialCheckResults(boundModel, timestamp) + | None -> return! failwith "Expected results to be ready. (GetCheckResultsBeforeSlotInProject)." } - member builder.GetCheckResultsBeforeFileInProject (ctok: CompilationThreadToken, filename) = + member _.GetFullCheckResultsBeforeSlotInProject (slotOfFile) = + node { + let cache = TimeStampCache defaultTimeStamp + do! checkFileTimeStamps cache + let! result = evalUpToTargetSlot currentState (slotOfFile - 1) + match result with + | Some (boundModel, timestamp) -> + let! _ = boundModel.GetOrComputeTcInfoExtras() + return PartialCheckResults(boundModel, timestamp) + | None -> return! failwith "Expected results to be ready. (GetFullCheckResultsBeforeSlotInProject)." + } + + member builder.GetCheckResultsBeforeFileInProject (filename) = let slotOfFile = builder.GetSlotOfFileName filename - builder.GetCheckResultsBeforeSlotInProject (ctok, slotOfFile) + builder.GetCheckResultsBeforeSlotInProject (slotOfFile) - member builder.GetCheckResultsAfterFileInProject (ctok: CompilationThreadToken, filename) = + member builder.GetCheckResultsAfterFileInProject (filename) = let slotOfFile = builder.GetSlotOfFileName filename + 1 - builder.GetCheckResultsBeforeSlotInProject (ctok, slotOfFile) + builder.GetCheckResultsBeforeSlotInProject (slotOfFile) - member builder.GetFullCheckResultsAfterFileInProject (ctok: CompilationThreadToken, filename) = - enablePartialTypeChecking <- false - cancellable { - try - let! result = builder.GetCheckResultsAfterFileInProject(ctok, filename) - result.TcInfoWithOptional ctok |> ignore // Make sure we forcefully evaluate the info - return result - finally - enablePartialTypeChecking <- defaultPartialTypeChecking - } + member builder.GetFullCheckResultsBeforeFileInProject (filename) = + let slotOfFile = builder.GetSlotOfFileName filename + builder.GetFullCheckResultsBeforeSlotInProject (slotOfFile) - member builder.GetCheckResultsAfterLastFileInProject (ctok: CompilationThreadToken) = - builder.GetCheckResultsBeforeSlotInProject(ctok, builder.GetSlotsCount()) + member builder.GetFullCheckResultsAfterFileInProject (filename) = + node { + let slotOfFile = builder.GetSlotOfFileName filename + 1 + let! result = builder.GetFullCheckResultsBeforeSlotInProject(slotOfFile) + return result + } - member __.GetCheckResultsAndImplementationsForProject(ctok: CompilationThreadToken) = - cancellable { - let cache = TimeStampCache defaultTimeStamp + member builder.GetCheckResultsAfterLastFileInProject () = + builder.GetCheckResultsBeforeSlotInProject(builder.GetSlotsCount()) - match! tryGetFinalized cache ctok with - | Some ((ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt, semanticModel), timestamp) -> - return PartialCheckResults.Create (semanticModel, timestamp), ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt - | None -> - let msg = "Build was not evaluated, expected the results to be ready after 'tryGetFinalized')." - return! failwith msg + member _.GetCheckResultsAndImplementationsForProject() = + node { + let cache = TimeStampCache(defaultTimeStamp) + do! checkFileTimeStamps cache + let! result = currentState.finalizedBoundModel.GetOrComputeValue() + match result with + | ((ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt, boundModel), timestamp) -> + return PartialCheckResults (boundModel, timestamp), ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt } - member this.GetFullCheckResultsAndImplementationsForProject(ctok: CompilationThreadToken) = - enablePartialTypeChecking <- false - cancellable { - try - let! result = this.GetCheckResultsAndImplementationsForProject(ctok) - let results, _, _, _ = result - results.TcInfoWithOptional ctok |> ignore // Make sure we forcefully evaluate the info - return result - finally - enablePartialTypeChecking <- defaultPartialTypeChecking + member builder.GetFullCheckResultsAndImplementationsForProject() = + node { + let! result = builder.GetCheckResultsAndImplementationsForProject() + let results, _, _, _ = result + let! _ = results.GetOrComputeTcInfoWithExtras() // Make sure we forcefully evaluate the info + return result } - - member __.GetLogicalTimeStampForProject(cache, ctok: CompilationThreadToken) = - let t1 = MaxTimeStampInDependencies cache ctok getStampedReferencedAssemblies - let t2 = MaxTimeStampInDependencies cache ctok getStampedFileNames - max t1 t2 - - member __.TryGetSlotOfFileName(filename: string) = + + member _.GetLogicalTimeStampForProject(cache) = + let tmpState = computeStampedFileNames currentState cache + computeProjectTimeStamp tmpState + + member _.TryGetSlotOfFileName(filename: string) = // Get the slot of the given file and force it to build. - let CompareFileNames (_, f2, _) = - let result = + let CompareFileNames (_, f2, _) = + let result = String.Compare(filename, f2, StringComparison.CurrentCultureIgnoreCase)=0 || String.Compare(FileSystem.GetFullPathShim filename, FileSystem.GetFullPathShim f2, StringComparison.CurrentCultureIgnoreCase)=0 result match fileNames |> Array.tryFindIndex CompareFileNames with | Some slot -> Some slot | None -> None - + member this.GetSlotOfFileName(filename: string) = match this.TryGetSlotOfFileName(filename) with | Some slot -> slot | None -> failwith (sprintf "The file '%s' was not part of the project. Did you call InvalidateConfiguration when the list of files in the project changed?" filename) - - member __.GetSlotsCount () = fileNames.Length + + member _.GetSlotsCount () = fileNames.Length member this.ContainsFile(filename: string) = (this.TryGetSlotOfFileName filename).IsSome - - member builder.GetParseResultsForFile (ctok: CompilationThreadToken, filename) = - cancellable { + + member builder.GetParseResultsForFile (filename) = let slotOfFile = builder.GetSlotOfFileName filename - let results = fileNames.[slotOfFile] + let fileInfo = fileNames.[slotOfFile] // re-parse on demand instead of retaining - let syntaxTree = ParseTask ctok results - return syntaxTree.Parse None - } + let syntaxTree = GetSyntaxTree fileInfo + syntaxTree.Parse None - member __.SourceFiles = sourceFiles |> List.map (fun (_, f, _) -> f) + member _.SourceFiles = sourceFiles |> List.map (fun (_, f, _) -> f) /// CreateIncrementalBuilder (for background type checking). Note that fsc.fs also /// creates an incremental builder used by the command line compiler. static member TryCreateIncrementalBuilderForProjectOptions - (ctok, legacyReferenceResolver, defaultFSharpBinariesDir, + (legacyReferenceResolver, defaultFSharpBinariesDir, frameworkTcImportsCache: FrameworkImportsCache, loadClosureOpt: LoadClosure option, sourceFiles: string list, commandLineArgs: string list, projectReferences, projectDirectory, useScriptResolutionRules, keepAssemblyContents, - keepAllBackgroundResolutions, maxTimeShareMilliseconds, + keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors, keepAllBackgroundSymbolUses, enableBackgroundItemKeyStoreAndSemanticClassification, @@ -1278,43 +1320,58 @@ type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInput let useSimpleResolutionSwitch = "--simpleresolution" - cancellable { + node { // Trap and report warnings and errors from creation. let delayedLogger = CapturingErrorLogger("IncrementalBuilderCreation") - use _unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> delayedLogger) - use _unwindBP = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter + use _ = new CompilationGlobalsScope(delayedLogger, BuildPhase.Parameter) let! builderOpt = - cancellable { + node { try - // Create the builder. + // Create the builder. // Share intern'd strings across all lexing/parsing - let resourceManager = new Lexhelp.LexResourceManager() + let resourceManager = new Lexhelp.LexResourceManager() /// Create a type-check configuration - let tcConfigB, sourceFilesNew = + let tcConfigB, sourceFiles = let getSwitchValue switchString = match commandLineArgs |> Seq.tryFindIndex(fun s -> s.StartsWithOrdinal switchString) with | Some idx -> Some(commandLineArgs.[idx].Substring(switchString.Length)) | _ -> None + let sdkDirOverride = + match loadClosureOpt with + | None -> None + | Some loadClosure -> loadClosure.SdkDirOverride + // see also fsc.fs: runFromCommandLineToImportingAssemblies(), as there are many similarities to where the PS creates a tcConfigB - let tcConfigB = - TcConfigBuilder.CreateNew(legacyReferenceResolver, - defaultFSharpBinariesDir, - implicitIncludeDir=projectDirectory, - reduceMemoryUsage=ReduceMemoryFlag.Yes, - isInteractive=useScriptResolutionRules, - isInvalidationSupported=true, - defaultCopyFSharpCore=CopyFSharpCoreFlag.No, - tryGetMetadataSnapshot=tryGetMetadataSnapshot) - - tcConfigB.resolutionEnvironment <- (ReferenceResolver.ResolutionEnvironment.EditingOrCompilation true) - - tcConfigB.conditionalCompilationDefines <- + let tcConfigB = + TcConfigBuilder.CreateNew(legacyReferenceResolver, + defaultFSharpBinariesDir, + implicitIncludeDir=projectDirectory, + reduceMemoryUsage=ReduceMemoryFlag.Yes, + isInteractive=useScriptResolutionRules, + isInvalidationSupported=true, + defaultCopyFSharpCore=CopyFSharpCoreFlag.No, + tryGetMetadataSnapshot=tryGetMetadataSnapshot, + sdkDirOverride=sdkDirOverride, + rangeForErrors=range0) + + tcConfigB.primaryAssembly <- + match loadClosureOpt with + | None -> PrimaryAssembly.Mscorlib + | Some loadClosure -> + if loadClosure.UseDesktopFramework then + PrimaryAssembly.Mscorlib + else + PrimaryAssembly.System_Runtime + + tcConfigB.resolutionEnvironment <- (LegacyResolutionEnvironment.EditingOrCompilation true) + + tcConfigB.conditionalCompilationDefines <- let define = if useScriptResolutionRules then "INTERACTIVE" else "COMPILED" define :: tcConfigB.conditionalCompilationDefines @@ -1328,73 +1385,163 @@ type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInput // Never open PDB files for the language service, even if --standalone is specified tcConfigB.openDebugInformationForLaterStaticLinking <- false + tcConfigB.xmlDocInfoLoader <- + { new IXmlDocumentationInfoLoader with + /// Try to load xml documentation associated with an assembly by the same file path with the extension ".xml". + member _.TryLoad(assemblyFileName, _ilModule) = + let xmlFileName = Path.ChangeExtension(assemblyFileName, ".xml") + + // REVIEW: File IO - Will eventually need to change this to use a file system interface of some sort. + XmlDocumentationInfo.TryCreateFromFile(xmlFileName) + } + |> Some + tcConfigB, sourceFilesNew - match loadClosureOpt with - | Some loadClosure -> - let dllReferences = - [for reference in tcConfigB.referencedDLLs do - // If there's (one or more) resolutions of closure references then yield them all - match loadClosure.References |> List.tryFind (fun (resolved, _)->resolved=reference.Text) with - | Some (resolved, closureReferences) -> - for closureReference in closureReferences do - yield AssemblyReference(closureReference.originalReference.Range, resolved, None) - | None -> yield reference] - tcConfigB.referencedDLLs <- [] - // Add one by one to remove duplicates - dllReferences |> List.iter (fun dllReference -> - tcConfigB.AddReferencedAssemblyByPath(dllReference.Range, dllReference.Text)) - tcConfigB.knownUnresolvedReferences <- loadClosure.UnresolvedReferences - | None -> () + // If this is a builder for a script, re-apply the settings inferred from the + // script and its load closure to the configuration. + // + // NOTE: it would probably be cleaner and more accurate to re-run the load closure at this point. + let setupConfigFromLoadClosure () = + match loadClosureOpt with + | Some loadClosure -> + let dllReferences = + [for reference in tcConfigB.referencedDLLs do + // If there's (one or more) resolutions of closure references then yield them all + match loadClosure.References |> List.tryFind (fun (resolved, _)->resolved=reference.Text) with + | Some (resolved, closureReferences) -> + for closureReference in closureReferences do + yield AssemblyReference(closureReference.originalReference.Range, resolved, None) + | None -> yield reference] + tcConfigB.referencedDLLs <- [] + tcConfigB.primaryAssembly <- (if loadClosure.UseDesktopFramework then PrimaryAssembly.Mscorlib else PrimaryAssembly.System_Runtime) + // Add one by one to remove duplicates + dllReferences |> List.iter (fun dllReference -> + tcConfigB.AddReferencedAssemblyByPath(dllReference.Range, dllReference.Text)) + tcConfigB.knownUnresolvedReferences <- loadClosure.UnresolvedReferences + | None -> () + + setupConfigFromLoadClosure() let tcConfig = TcConfig.Create(tcConfigB, validate=true) let niceNameGen = NiceNameGenerator() - let outfile, _, assemblyName = tcConfigB.DecideNames sourceFilesNew + let outfile, _, assemblyName = tcConfigB.DecideNames sourceFiles // Resolve assemblies and create the framework TcImports. This is done when constructing the - // builder itself, rather than as an incremental task. This caches a level of "system" references. No type providers are - // included in these references. - let! (tcGlobals, frameworkTcImports, nonFrameworkResolutions, unresolvedReferences) = frameworkTcImportsCache.Get(ctok, tcConfig) + // builder itself, rather than as an incremental task. This caches a level of "system" references. No type providers are + // included in these references. + let! (tcGlobals, frameworkTcImports, nonFrameworkResolutions, unresolvedReferences) = frameworkTcImportsCache.Get(tcConfig) - // Note we are not calling errorLogger.GetErrors() anywhere for this task. + // Note we are not calling errorLogger.GetDiagnostics() anywhere for this task. // This is ok because not much can actually go wrong here. let errorOptions = tcConfig.errorSeverityOptions let errorLogger = CompilationErrorLogger("nonFrameworkAssemblyInputs", errorOptions) - // Return the disposable object that cleans up - use _holder = new CompilationGlobalsScope(errorLogger, BuildPhase.Parameter) + use _ = new CompilationGlobalsScope(errorLogger, BuildPhase.Parameter) - // Get the names and time stamps of all the non-framework referenced assemblies, which will act - // as inputs to one of the nodes in the build. + // Get the names and time stamps of all the non-framework referenced assemblies, which will act + // as inputs to one of the nodes in the build. // - // This operation is done when constructing the builder itself, rather than as an incremental task. - let nonFrameworkAssemblyInputs = - // Note we are not calling errorLogger.GetErrors() anywhere for this task. + // This operation is done when constructing the builder itself, rather than as an incremental task. + let nonFrameworkAssemblyInputs = + // Note we are not calling errorLogger.GetDiagnostics() anywhere for this task. // This is ok because not much can actually go wrong here. let errorLogger = CompilationErrorLogger("nonFrameworkAssemblyInputs", errorOptions) // Return the disposable object that cleans up - use _holder = new CompilationGlobalsScope(errorLogger, BuildPhase.Parameter) + use _holder = new CompilationGlobalsScope(errorLogger, BuildPhase.Parameter) [ for r in nonFrameworkResolutions do let fileName = r.resolvedPath - yield (Choice1Of2 fileName, (fun (cache: TimeStampCache) _ctok -> cache.GetFileTimeStamp fileName)) + yield (Choice1Of2 fileName, (fun (cache: TimeStampCache) -> cache.GetFileTimeStamp fileName)) for pr in projectReferences do - yield Choice2Of2 pr, (fun (cache: TimeStampCache) ctok -> cache.GetProjectReferenceTimeStamp (pr, ctok)) ] - - let builder = - new IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInputs, - nonFrameworkResolutions, unresolvedReferences, - tcConfig, projectDirectory, outfile, assemblyName, niceNameGen, - resourceManager, sourceFilesNew, loadClosureOpt, - keepAssemblyContents, - keepAllBackgroundResolutions, - maxTimeShareMilliseconds, + yield Choice2Of2 pr, (fun (cache: TimeStampCache) -> cache.GetProjectReferenceTimeStamp (pr)) ] + + // + // + // + // + // Start importing + + let tcConfigP = TcConfigProvider.Constant tcConfig + let beforeFileChecked = new Event() + let fileChecked = new Event() + +#if !NO_EXTENSIONTYPING + let importsInvalidatedByTypeProvider = new Event() +#endif + + // Check for the existence of loaded sources and prepend them to the sources list if present. + let sourceFiles = tcConfig.GetAvailableLoadedSources() @ (sourceFiles |>List.map (fun s -> rangeStartup, s)) + + // Mark up the source files with an indicator flag indicating if they are the last source file in the project + let sourceFiles = + let flags, isExe = tcConfig.ComputeCanContainEntryPoint(sourceFiles |> List.map snd) + ((sourceFiles, flags) ||> List.map2 (fun (m, nm) flag -> (m, nm, (flag, isExe)))) + + let basicDependencies = + [ for (UnresolvedAssemblyReference(referenceText, _)) in unresolvedReferences do + // Exclude things that are definitely not a file name + if not(FileSystem.IsInvalidPathShim referenceText) then + let file = if FileSystem.IsPathRootedShim referenceText then referenceText else Path.Combine(projectDirectory, referenceText) + yield file + + for r in nonFrameworkResolutions do + yield r.resolvedPath ] + + let allDependencies = + [| yield! basicDependencies + for (_, f, _) in sourceFiles do + yield f |] + + // For scripts, the dependency provider is already available. + // For projects create a fresh one for the project. + let dependencyProvider = + match dependencyProvider with + | None -> new DependencyProvider() + | Some dependencyProvider -> dependencyProvider + + let! initialBoundModel = + CombineImportedAssembliesTask( + assemblyName, + tcConfig, + tcConfigP, + tcGlobals, + frameworkTcImports, + nonFrameworkResolutions, + unresolvedReferences, + dependencyProvider, + loadClosureOpt, + niceNameGen, + basicDependencies, + keepAssemblyContents, + keepAllBackgroundResolutions, keepAllBackgroundSymbolUses, enableBackgroundItemKeyStoreAndSemanticClassification, enablePartialTypeChecking, - dependencyProvider) + beforeFileChecked, + fileChecked, + importsInvalidatedByTypeProvider + ) + + let builder = + new IncrementalBuilder( + initialBoundModel, + tcGlobals, + nonFrameworkAssemblyInputs, + tcConfig, + outfile, + assemblyName, + resourceManager, + sourceFiles, + enablePartialTypeChecking, + beforeFileChecked, + fileChecked, +#if !NO_EXTENSIONTYPING + importsInvalidatedByTypeProvider, +#endif + allDependencies) return Some builder - with e -> + with e -> errorRecoveryNoRange e return None } @@ -1405,10 +1552,10 @@ type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInput let errorSeverityOptions = builder.TcConfig.errorSeverityOptions let errorLogger = CompilationErrorLogger("IncrementalBuilderCreation", errorSeverityOptions) delayedLogger.CommitDelayedDiagnostics errorLogger - errorLogger.GetErrors() |> Array.map (fun (d, severity) -> d, severity = FSharpErrorSeverity.Error) + errorLogger.GetDiagnostics() | _ -> Array.ofList delayedLogger.Diagnostics - |> Array.map (fun (d, isError) -> FSharpErrorInfo.CreateFromException(d, isError, range.Zero, suggestNamesForErrors)) + |> Array.map (fun (d, severity) -> FSharpDiagnostic.CreateFromException(d, severity, range.Zero, suggestNamesForErrors)) return builderOpt, diagnostics } diff --git a/src/fsharp/service/IncrementalBuild.fsi b/src/fsharp/service/IncrementalBuild.fsi index b3607332b7b..c8c5c26da6a 100755 --- a/src/fsharp/service/IncrementalBuild.fsi +++ b/src/fsharp/service/IncrementalBuild.fsi @@ -1,36 +1,38 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler +namespace FSharp.Compiler.CodeAnalysis open System - +open System.Threading +open Internal.Utilities.Library open FSharp.Compiler open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CheckDeclarations +open FSharp.Compiler.CodeAnalysis open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerImports +open FSharp.Compiler.DependencyManager +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.EditorServices open FSharp.Compiler.ErrorLogger open FSharp.Compiler.NameResolution open FSharp.Compiler.ParseAndCheckInputs -open FSharp.Compiler.Range open FSharp.Compiler.ScriptClosure -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text open FSharp.Compiler.TypedTree - -open Microsoft.DotNet.DependencyManager +open FSharp.Compiler.BuildGraph /// Lookup the global static cache for building the FrameworkTcImports type internal FrameworkImportsCache = new : size: int -> FrameworkImportsCache - member Get : CompilationThreadToken * TcConfig -> Cancellable + member Get : TcConfig -> NodeCode - member Clear: CompilationThreadToken -> unit + member Clear: unit -> unit - member Downsize: CompilationThreadToken -> unit + member Downsize: unit -> unit /// Used for unit testing module internal IncrementalBuilderEventTesting = @@ -58,27 +60,22 @@ type internal TcInfo = latestCcuSigForFile: ModuleOrNamespaceType option /// Accumulated errors, last file first - tcErrorsRev:(PhasedDiagnostic * FSharpErrorSeverity)[] list + tcErrorsRev:(PhasedDiagnostic * FSharpDiagnosticSeverity)[] list tcDependencyFiles: string list - sigNameOpt: (string * SyntaxTree.QualifiedNameOfFile) option + sigNameOpt: (string * QualifiedNameOfFile) option } - member TcErrors: (PhasedDiagnostic * FSharpErrorSeverity)[] + member TcErrors: (PhasedDiagnostic * FSharpDiagnosticSeverity)[] /// Accumulated results of type checking. Optional data that isn't needed to type-check a file, but needed for more information for in tooling. [] -type internal TcInfoOptional = +type internal TcInfoExtras = { - /// Accumulated resolutions, last file first - tcResolutionsRev: TcResolutions list - - /// Accumulated symbol uses, last file first - tcSymbolUsesRev: TcSymbolUses list - - /// Accumulated 'open' declarations, last file first - tcOpenDeclarationsRev: OpenDeclaration[] list + tcResolutions: TcResolutions + tcSymbolUses: TcSymbolUses + tcOpenDeclarations: OpenDeclaration[] /// Result of checking most recent file, if any latestImplFile: TypedImplFile option @@ -87,10 +84,10 @@ type internal TcInfoOptional = itemKeyStore: ItemKeyStore option /// If enabled, holds semantic classification information for Item(symbol)s in a file. - semanticClassification: struct (range * SemanticClassificationType) [] + semanticClassificationKeyStore: SemanticClassificationKeyStore option } - member TcSymbolUses: TcSymbolUses list + member TcSymbolUses: TcSymbolUses /// Represents the state in the incremental graph associated with checking a file [] @@ -104,19 +101,31 @@ type internal PartialCheckResults = member TimeStamp: DateTime - member TcInfo: CompilationThreadToken -> TcInfo + member TryPeekTcInfo: unit -> TcInfo option + + member TryPeekTcInfoWithExtras: unit -> (TcInfo * TcInfoExtras) option + + /// Compute the "TcInfo" part of the results. If `enablePartialTypeChecking` is false then + /// extras will also be available. + member GetOrComputeTcInfo: unit -> NodeCode + /// Compute both the "TcInfo" and "TcInfoExtras" parts of the results. /// Can cause a second type-check if `enablePartialTypeChecking` is true in the checker. /// Only use when it's absolutely necessary to get rich information on a file. - member TcInfoWithOptional: CompilationThreadToken -> TcInfo * TcInfoOptional + member GetOrComputeTcInfoWithExtras: unit -> NodeCode + /// Compute the "ItemKeyStore" parts of the results. /// Can cause a second type-check if `enablePartialTypeChecking` is true in the checker. /// Only use when it's absolutely necessary to get rich information on a file. - member TryGetItemKeyStore: CompilationThreadToken -> ItemKeyStore option + /// + /// Will return 'None' for enableBackgroundItemKeyStoreAndSemanticClassification=false. + member GetOrComputeItemKeyStoreIfEnabled: unit -> NodeCode /// Can cause a second type-check if `enablePartialTypeChecking` is true in the checker. /// Only use when it's absolutely necessary to get rich information on a file. - member GetSemanticClassification: CompilationThreadToken -> struct(range * SemanticClassificationType) [] + /// + /// Will return 'None' for enableBackgroundItemKeyStoreAndSemanticClassification=false. + member GetOrComputeSemanticClassificationIfEnabled: unit -> NodeCode member TimeStamp: DateTime @@ -146,18 +155,18 @@ type internal IncrementalBuilder = member ProjectChecked : IEvent #if !NO_EXTENSIONTYPING - /// Raised when a type provider invalidates the build. - member ImportsInvalidatedByTypeProvider : IEvent + /// Raised when the build is invalidated. + member ImportsInvalidatedByTypeProvider : IEvent #endif - /// Tries to get the current successful TcImports. This is only used in testing. Do not use it for other stuff. - member TryGetCurrentTcImports : unit -> TcImports option + /// Check if one of the build's references is invalidated. + member IsReferencesInvalidated : bool /// The list of files the build depends on member AllDependenciesDeprecated : string[] - /// Perform one step in the F# build. Return true if the background work is finished. - member Step : CompilationThreadToken -> Cancellable + /// The project build. Return true if the background work is finished. + member PopulatePartialCheckingResults: unit -> NodeCode /// Get the preceding typecheck state of a slot, without checking if it is up-to-date w.r.t. /// the timestamps on files and referenced DLLs prior to this one. Return None if the result is not available. @@ -166,6 +175,13 @@ type internal IncrementalBuilder = /// This is safe for use from non-compiler threads but the objects returned must in many cases be accessed only from the compiler thread. member GetCheckResultsBeforeFileInProjectEvenIfStale: filename:string -> PartialCheckResults option + /// Get the typecheck state of a slot, without checking if it is up-to-date w.r.t. + /// the timestamps on files and referenced DLLs prior to this one. Return None if the result is not available. + /// This is a very quick operation. + /// + /// This is safe for use from non-compiler threads but the objects returned must in many cases be accessed only from the compiler thread. + member GetCheckResultsForFileInProjectEvenIfStale: filename:string -> PartialCheckResults option + /// Get the preceding typecheck state of a slot, but only if it is up-to-date w.r.t. /// the timestamps on files and referenced DLLs prior to this one. Return None if the result is not available. /// This is a relatively quick operation. @@ -173,46 +189,45 @@ type internal IncrementalBuilder = /// This is safe for use from non-compiler threads member AreCheckResultsBeforeFileInProjectReady: filename:string -> bool + /// Get the preceding typecheck state of a slot, WITH checking if it is up-to-date w.r.t. However, files will not be parsed or checked. + /// the timestamps on files and referenced DLLs prior to this one. Return None if the result is not available or if it is not up-to-date. + /// + /// This is safe for use from non-compiler threads but the objects returned must in many cases be accessed only from the compiler thread. + member TryGetCheckResultsBeforeFileInProject: filename: string -> PartialCheckResults option + /// Get the preceding typecheck state of a slot. Compute the entire type check of the project up /// to the necessary point if the result is not available. This may be a long-running operation. - /// - // TODO: make this an Eventually (which can be scheduled) or an Async (which can be cancelled) - member GetCheckResultsBeforeFileInProject : CompilationThreadToken * filename:string -> Cancellable + member GetCheckResultsBeforeFileInProject : filename:string -> NodeCode + + /// Get the preceding typecheck state of a slot. Compute the entire type check of the project up + /// to the necessary point if the result is not available. This may be a long-running operation. + /// This will get full type-check info for the file, meaning no partial type-checking. + member GetFullCheckResultsBeforeFileInProject : filename:string -> NodeCode /// Get the typecheck state after checking a file. Compute the entire type check of the project up /// to the necessary point if the result is not available. This may be a long-running operation. - /// - // TODO: make this an Eventually (which can be scheduled) or an Async (which can be cancelled) - member GetCheckResultsAfterFileInProject : CompilationThreadToken * filename:string -> Cancellable + member GetCheckResultsAfterFileInProject : filename:string -> NodeCode /// Get the typecheck state after checking a file. Compute the entire type check of the project up /// to the necessary point if the result is not available. This may be a long-running operation. /// This will get full type-check info for the file, meaning no partial type-checking. - /// - // TODO: make this an Eventually (which can be scheduled) or an Async (which can be cancelled) - member GetFullCheckResultsAfterFileInProject : CompilationThreadToken * filename:string -> Cancellable + member GetFullCheckResultsAfterFileInProject : filename:string -> NodeCode /// Get the typecheck result after the end of the last file. The typecheck of the project is not 'completed'. /// This may be a long-running operation. - /// - // TODO: make this an Eventually (which can be scheduled) or an Async (which can be cancelled) - member GetCheckResultsAfterLastFileInProject : CompilationThreadToken -> Cancellable + member GetCheckResultsAfterLastFileInProject : unit -> NodeCode /// 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 : CompilationThreadToken -> Cancellable + member GetCheckResultsAndImplementationsForProject : unit -> NodeCode /// Get the final typecheck result. If 'generateTypedImplFiles' was set on Create then the TypedAssemblyAfterOptimization will contain implementations. /// This may be a long-running operation. /// This will get full type-check info for the project, meaning no partial type-checking. - /// - // TODO: make this an Eventually (which can be scheduled) or an Async (which can be cancelled) - member GetFullCheckResultsAndImplementationsForProject : CompilationThreadToken -> Cancellable + member GetFullCheckResultsAndImplementationsForProject : unit -> NodeCode /// Get the logical time stamp that is associated with the output of the project if it were gully built immediately - member GetLogicalTimeStampForProject: TimeStampCache * CompilationThreadToken -> DateTime + member GetLogicalTimeStampForProject: TimeStampCache -> DateTime /// Does the given file exist in the builder's pipeline? member ContainsFile: filename: string -> bool @@ -220,12 +235,11 @@ type internal IncrementalBuilder = /// Await the untyped parse results for a particular slot in the vector of parse results. /// /// This may be a marginally long-running operation (parses are relatively quick, only one file needs to be parsed) - member GetParseResultsForFile: CompilationThreadToken * filename:string -> Cancellable + member GetParseResultsForFile: filename:string -> ParsedInput * range * string * (PhasedDiagnostic * FSharpDiagnosticSeverity)[] /// Create the incremental builder static member TryCreateIncrementalBuilderForProjectOptions: - CompilationThreadToken * - ReferenceResolver.Resolver * + LegacyReferenceResolver * defaultFSharpBinariesDir: string * FrameworkImportsCache * loadClosureOpt:LoadClosure option * @@ -236,14 +250,13 @@ type internal IncrementalBuilder = useScriptResolutionRules:bool * keepAssemblyContents: bool * keepAllBackgroundResolutions: bool * - maxTimeShareMilliseconds: int64 * tryGetMetadataSnapshot: ILBinaryReader.ILReaderTryGetMetadataSnapshot * suggestNamesForErrors: bool * keepAllBackgroundSymbolUses: bool * enableBackgroundItemKeyStoreAndSemanticClassification: bool * enablePartialTypeChecking: bool * dependencyProvider: DependencyProvider option - -> Cancellable + -> NodeCode /// Generalized Incremental Builder. This is exposed only for unit testing purposes. module internal IncrementalBuild = diff --git a/src/fsharp/service/ItemKey.fs b/src/fsharp/service/ItemKey.fs index f064d4f98c6..636c2e324b0 100644 --- a/src/fsharp/service/ItemKey.fs +++ b/src/fsharp/service/ItemKey.fs @@ -1,25 +1,24 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.CodeAnalysis open System open System.IO open System.IO.MemoryMappedFiles open System.Reflection.Metadata - +open System.Runtime.InteropServices open FSharp.NativeInterop - -open FSharp.Compiler open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.Infos open FSharp.Compiler.NameResolution -open FSharp.Compiler.Range +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Position +open FSharp.Compiler.Text.Range open FSharp.Compiler.TypedTree -open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TypedTreeBasics -open FSharp.Compiler.TcGlobals #nowarn "9" +#nowarn "51" /// These tags are used to create unique item key strings to decrease possible key string collisions when the Items are actually completely different. [] @@ -97,21 +96,16 @@ module ItemKeyTags = [] type ItemKeyStore(mmf: MemoryMappedFile, length) = + let rangeBuffer = Array.zeroCreate sizeof + let mutable isDisposed = false let checkDispose() = if isDisposed then raise (ObjectDisposedException("ItemKeyStore")) member _.ReadRange(reader: byref) = - let startLine = reader.ReadInt32() - let startColumn = reader.ReadInt32() - let endLine = reader.ReadInt32() - let endColumn = reader.ReadInt32() - let fileIndex = reader.ReadInt32() - - let posStart = mkPos startLine startColumn - let posEnd = mkPos endLine endColumn - mkFileIndexRange fileIndex posStart posEnd + reader.ReadBytes(sizeof, rangeBuffer, 0) + MemoryMarshal.Cast(Span(rangeBuffer)).[0] member _.ReadKeyString(reader: byref) = let size = reader.ReadInt32() @@ -171,17 +165,15 @@ and [] ItemKeyStoreBuilder() = b.WriteInt32 i let writeInt64 (i: int64) = - b.WriteInt64 i + b.WriteInt64 i let writeString (str: string) = b.WriteUTF16 str - let writeRange (m: Range.range) = - b.WriteInt32(m.StartLine) - b.WriteInt32(m.StartColumn) - b.WriteInt32(m.EndLine) - b.WriteInt32(m.EndColumn) - b.WriteInt32(m.FileIndex) + let writeRange (m: range) = + let mutable m = m + let ptr = &&m |> NativePtr.toNativeInt |> NativePtr.ofNativeInt + b.WriteBytes(ptr, sizeof) let writeEntityRef (eref: EntityRef) = writeString ItemKeyTags.entityRef @@ -193,22 +185,22 @@ and [] ItemKeyStoreBuilder() = match ilty with | ILType.TypeVar n -> writeString "!"; writeUInt16 n | ILType.Modified (_, _, ty2) -> writeILType ty2 - | ILType.Array (ILArrayShape s, ty) -> + | ILType.Array (ILArrayShape s, ty) -> writeILType ty - writeString "[" + writeString "[" writeInt32 (s.Length-1) writeString "]" - | ILType.Value tr - | ILType.Boxed tr -> + | ILType.Value tr + | ILType.Boxed tr -> tr.TypeRef.Enclosing |> List.iter (fun x -> writeString x writeChar '.') writeChar '.' writeString tr.TypeRef.Name - | ILType.Void -> + | ILType.Void -> writeString "void" - | ILType.Ptr ty -> + | ILType.Ptr ty -> writeString "ptr<" writeILType ty writeChar '>' @@ -239,7 +231,7 @@ and [] ItemKeyStoreBuilder() = writeString ItemKeyTags.typeFunction writeType false d writeType false r - | TType_measure ms -> + | TType_measure ms -> if isStandalone then writeString ItemKeyTags.typeMeasure writeMeasure isStandalone ms @@ -254,10 +246,10 @@ and [] ItemKeyStoreBuilder() = and writeMeasure isStandalone (ms: Measure) = match ms with - | Measure.Var typar -> + | Measure.Var typar -> writeString ItemKeyTags.typeMeasureVar writeTypar isStandalone typar - | Measure.Con tcref -> + | Measure.Con tcref -> writeString ItemKeyTags.typeMeasureCon writeEntityRef tcref | _ -> @@ -266,7 +258,7 @@ and [] ItemKeyStoreBuilder() = and writeTypar (isStandalone: bool) (typar: Typar) = match typar.Solution with | Some ty -> writeType isStandalone ty - | _ -> + | _ -> if isStandalone then writeInt64 typar.Stamp @@ -287,7 +279,7 @@ and [] ItemKeyStoreBuilder() = | ParentNone -> writeChar '%' | Parent eref -> writeEntityRef eref - member _.Write (m: Range.range, item: Item) = + member _.Write (m: range, item: Item) = writeRange m let fixup = b.ReserveBytes 4 |> BlobWriter @@ -296,13 +288,22 @@ and [] ItemKeyStoreBuilder() = match item with | Item.Value vref -> - writeValRef vref + if vref.IsPropertyGetterMethod || vref.IsPropertySetterMethod then + writeString ItemKeyTags.itemProperty + writeString vref.PropertyName + match vref.DeclaringEntity with + | ParentRef.Parent parent -> + writeEntityRef parent + | _ -> + () + else + writeValRef vref - | Item.UnionCase(info, _) -> + | Item.UnionCase(info, _) -> writeString ItemKeyTags.typeUnionCase writeEntityRef info.TyconRef writeString info.Name - + | Item.ActivePatternResult(info, _, _, _) -> writeString ItemKeyTags.itemActivePattern info.ActiveTagsWithRanges @@ -329,7 +330,7 @@ and [] ItemKeyStoreBuilder() = writeEntityRef info.TyconRef writeString info.Name writeInt32 fieldIndex - + | Item.AnonRecdField(info, tys, i, _) -> writeString ItemKeyTags.itemAnonymousRecordField writeString info.ILTypeRef.BasicQualifiedName @@ -353,8 +354,11 @@ and [] ItemKeyStoreBuilder() = | Item.Property(nm, infos) -> writeString ItemKeyTags.itemProperty writeString nm - infos - |> List.iter (fun info -> writeEntityRef info.DeclaringTyconRef) + match infos |> List.tryHead with + | Some info -> + writeEntityRef info.DeclaringTyconRef + | _ -> + () | Item.TypeVar(_, typar) -> writeTypar true typar @@ -365,7 +369,7 @@ and [] ItemKeyStoreBuilder() = | Item.UnqualifiedType [tcref] -> writeEntityRef tcref - | Item.MethodGroup(_, [info], _) + | Item.MethodGroup(_, [info], _) | Item.CtorGroup(_, [info]) -> match info with | FSMeth(_, _, vref, _) -> @@ -384,7 +388,7 @@ and [] ItemKeyStoreBuilder() = | Item.ModuleOrNamespaces [x] -> writeString ItemKeyTags.itemModuleOrNamespace x.CompilationPath.DemangledPath - |> List.iter (fun x -> + |> List.iter (fun x -> writeString x writeString ".") writeString x.LogicalName @@ -412,13 +416,13 @@ and [] ItemKeyStoreBuilder() = member _.TryBuildAndReset() = if b.Count > 0 then let length = int64 b.Count - let mmf = + let mmf = let mmf = MemoryMappedFile.CreateNew( - null, - length, - MemoryMappedFileAccess.ReadWrite, - MemoryMappedFileOptions.None, + null, + length, + MemoryMappedFileAccess.ReadWrite, + MemoryMappedFileOptions.None, HandleInheritability.None) use stream = mmf.CreateViewStream(0L, length, MemoryMappedFileAccess.ReadWrite) b.WriteContentTo stream @@ -426,7 +430,7 @@ and [] ItemKeyStoreBuilder() = b.Clear() - Some(new ItemKeyStore(mmf, length)) + Some(new ItemKeyStore(mmf, length)) else b.Clear() - None \ No newline at end of file + None diff --git a/src/fsharp/service/ItemKey.fsi b/src/fsharp/service/ItemKey.fsi index ce69297390a..fa82eddf0a1 100644 --- a/src/fsharp/service/ItemKey.fsi +++ b/src/fsharp/service/ItemKey.fsi @@ -1,18 +1,17 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.CodeAnalysis open System - open FSharp.Compiler.NameResolution -open FSharp.Compiler.Range +open FSharp.Compiler.Text /// Stores a list of item key strings and their ranges in a memory mapped file. [] type internal ItemKeyStore = interface IDisposable - member FindAll: Item -> range seq + member FindAll: Item -> seq /// A builder that will build an item key store based on the written Item and its associated range. [] diff --git a/src/fsharp/service/QuickParse.fs b/src/fsharp/service/QuickParse.fs index 302edc1f69f..d01772621c0 100644 --- a/src/fsharp/service/QuickParse.fs +++ b/src/fsharp/service/QuickParse.fs @@ -1,10 +1,11 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler +namespace FSharp.Compiler.EditorServices open System -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.SourceCodeServices +open Internal.Utilities.Library +open FSharp.Compiler.Syntax +open FSharp.Compiler.Tokenization /// Qualified long name. type PartialLongName = @@ -19,7 +20,8 @@ type PartialLongName = EndColumn: int /// Position of the last dot. - LastDotPos: int option } + LastDotPos: int option + } /// Empty partial long name. static member Empty(endColumn: int) = { QualifyingIdents = []; PartialIdent = ""; EndColumn = endColumn; LastDotPos = None } diff --git a/src/fsharp/service/QuickParse.fsi b/src/fsharp/service/QuickParse.fsi index 0201f846adb..1d403e85f71 100644 --- a/src/fsharp/service/QuickParse.fsi +++ b/src/fsharp/service/QuickParse.fsi @@ -1,8 +1,8 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler +namespace FSharp.Compiler.EditorServices -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Tokenization /// Qualified long name. type public PartialLongName = diff --git a/src/fsharp/service/Reactor.fs b/src/fsharp/service/Reactor.fs deleted file mode 100755 index 29cf0c9678b..00000000000 --- a/src/fsharp/service/Reactor.fs +++ /dev/null @@ -1,204 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.SourceCodeServices - -open System -open System.Diagnostics -open System.Globalization -open System.Threading - -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.Lib - -/// Represents the capability to schedule work in the compiler service operations queue for the compilation thread -type internal IReactorOperations = - abstract EnqueueAndAwaitOpAsync : userOpName:string * opName:string * opArg:string * (CompilationThreadToken -> Cancellable<'T>) -> Async<'T> - abstract EnqueueOp: userOpName:string * opName:string * opArg:string * (CompilationThreadToken -> unit) -> unit - -[] -type internal ReactorCommands = - /// Kick off a build. - | SetBackgroundOp of ( (* userOpName: *) string * (* opName: *) string * (* opArg: *) string * (CompilationThreadToken -> CancellationToken -> bool)) option - - /// Do some work not synchronized in the mailbox. - | Op of userOpName: string * opName: string * opArg: string * CancellationToken * (CompilationThreadToken -> unit) * (unit -> unit) - - /// Finish the background building - | WaitForBackgroundOpCompletion of AsyncReplyChannel - - /// Finish all the queued ops - | CompleteAllQueuedOps of AsyncReplyChannel - -[] -/// There is one global Reactor for the entire language service, no matter how many projects or files -/// are open. -type Reactor() = - static let pauseBeforeBackgroundWorkDefault = GetEnvInteger "FCS_PauseBeforeBackgroundWorkMilliseconds" 10 - static let theReactor = Reactor() - let mutable pauseBeforeBackgroundWork = pauseBeforeBackgroundWorkDefault - - // We need to store the culture for the VS thread that is executing now, - // so that when the reactor picks up a thread from the thread pool we can set the culture - let mutable culture = CultureInfo(CultureInfo.CurrentUICulture.Name) - - let mutable bgOpCts = new CancellationTokenSource() - - /// Mailbox dispatch function. - let builder = - MailboxProcessor<_>.Start <| fun inbox -> - - // Async workflow which receives messages and dispatches to worker functions. - let rec loop (bgOpOpt, onComplete, bg) = - async { //Trace.TraceInformation("Reactor: receiving..., remaining {0}", inbox.CurrentQueueLength) - - // Explanation: The reactor thread acts as the compilation thread in hosted scenarios - let ctok = AssumeCompilationThreadWithoutEvidence() - - // Messages always have priority over the background op. - let! msg = - async { match bgOpOpt, onComplete with - | None, None -> - let! msg = inbox.Receive() - return Some msg - | _, Some _ -> - return! inbox.TryReceive(0) - | Some _, _ -> - let timeout = - if bg then 0 - else - Trace.TraceInformation("Reactor: {0:n3} pausing {1} milliseconds", DateTime.Now.TimeOfDay.TotalSeconds, pauseBeforeBackgroundWork) - pauseBeforeBackgroundWork - return! inbox.TryReceive(timeout) } - Thread.CurrentThread.CurrentUICulture <- culture - match msg with - | Some (SetBackgroundOp bgOpOpt) -> - //Trace.TraceInformation("Reactor: --> set background op, remaining {0}", inbox.CurrentQueueLength) - return! loop (bgOpOpt, onComplete, false) - - | Some (Op (userOpName, opName, opArg, ct, op, ccont)) -> - if ct.IsCancellationRequested then ccont() else - Trace.TraceInformation("Reactor: {0:n3} --> {1}.{2} ({3}), remaining {4}", DateTime.Now.TimeOfDay.TotalSeconds, userOpName, opName, opArg, inbox.CurrentQueueLength) - let time = Stopwatch() - time.Start() - op ctok - time.Stop() - let span = time.Elapsed - //if span.TotalMilliseconds > 100.0 then - let taken = span.TotalMilliseconds - let msg = (if taken > 10000.0 then "BAD-OP: >10s " elif taken > 3000.0 then "BAD-OP: >3s " elif taken > 1000.0 then "BAD-OP: > 1s " elif taken > 500.0 then "BAD-OP: >0.5s " else "") - Trace.TraceInformation("Reactor: {0:n3} {1}<-- {2}.{3}, took {4} ms", DateTime.Now.TimeOfDay.TotalSeconds, msg, userOpName, opName, span.TotalMilliseconds) - return! loop (bgOpOpt, onComplete, false) - | Some (WaitForBackgroundOpCompletion channel) -> - match bgOpOpt with - | None -> () - | Some (bgUserOpName, bgOpName, bgOpArg, bgOp) -> - Trace.TraceInformation("Reactor: {0:n3} --> wait for background {1}.{2} ({3}), remaining {4}", DateTime.Now.TimeOfDay.TotalSeconds, bgUserOpName, bgOpName, bgOpArg, inbox.CurrentQueueLength) - bgOpCts.Dispose() - bgOpCts <- new CancellationTokenSource() - while not bgOpCts.IsCancellationRequested && bgOp ctok bgOpCts.Token do - () - - if bgOpCts.IsCancellationRequested then - Trace.TraceInformation("FCS: <-- wait for background was cancelled {0}.{1}", bgUserOpName, bgOpName) - - channel.Reply(()) - return! loop (None, onComplete, false) - - | Some (CompleteAllQueuedOps channel) -> - Trace.TraceInformation("Reactor: {0:n3} --> stop background work and complete all queued ops, remaining {1}", DateTime.Now.TimeOfDay.TotalSeconds, inbox.CurrentQueueLength) - return! loop (None, Some channel, false) - - | None -> - match bgOpOpt, onComplete with - | _, Some onComplete -> onComplete.Reply() - | Some (bgUserOpName, bgOpName, bgOpArg, bgOp), None -> - Trace.TraceInformation("Reactor: {0:n3} --> background step {1}.{2} ({3})", DateTime.Now.TimeOfDay.TotalSeconds, bgUserOpName, bgOpName, bgOpArg) - let time = Stopwatch() - time.Start() - bgOpCts.Dispose() - bgOpCts <- new CancellationTokenSource() - let res = bgOp ctok bgOpCts.Token - if bgOpCts.IsCancellationRequested then - Trace.TraceInformation("FCS: <-- background step {0}.{1}, was cancelled", bgUserOpName, bgOpName) - time.Stop() - let taken = time.Elapsed.TotalMilliseconds - //if span.TotalMilliseconds > 100.0 then - let msg = (if taken > 10000.0 then "BAD-BG-SLICE: >10s " elif taken > 3000.0 then "BAD-BG-SLICE: >3s " elif taken > 1000.0 then "BAD-BG-SLICE: > 1s " else "") - Trace.TraceInformation("Reactor: {0:n3} {1}<-- background step, took {2}ms", DateTime.Now.TimeOfDay.TotalSeconds, msg, taken) - return! loop ((if res then bgOpOpt else None), onComplete, true) - | None, None -> failwith "unreachable, should have used inbox.Receive" - } - async { - while true do - try - do! loop (None, None, false) - with e -> - Debug.Assert(false, String.Format("unexpected failure in reactor loop {0}, restarting", e)) - } - - member __.SetPreferredUILang(preferredUiLang: string option) = - match preferredUiLang with - | Some s -> - culture <- CultureInfo s -#if FX_RESHAPED_GLOBALIZATION - CultureInfo.CurrentUICulture <- culture -#else - Thread.CurrentThread.CurrentUICulture <- culture -#endif - | None -> () - - // [Foreground Mailbox Accessors] ----------------------------------------------------------- - member r.SetBackgroundOp(bgOpOpt) = - Trace.TraceInformation("Reactor: {0:n3} enqueue start background, length {1}", DateTime.Now.TimeOfDay.TotalSeconds, builder.CurrentQueueLength) - bgOpCts.Cancel() - builder.Post(SetBackgroundOp bgOpOpt) - - member r.CancelBackgroundOp() = - Trace.TraceInformation("FCS: trying to cancel any active background work") - bgOpCts.Cancel() - - member r.EnqueueOp(userOpName, opName, opArg, op) = - Trace.TraceInformation("Reactor: {0:n3} enqueue {1}.{2} ({3}), length {4}", DateTime.Now.TimeOfDay.TotalSeconds, userOpName, opName, opArg, builder.CurrentQueueLength) - builder.Post(Op(userOpName, opName, opArg, CancellationToken.None, op, (fun () -> ()))) - - member r.EnqueueOpPrim(userOpName, opName, opArg, ct, op, ccont) = - Trace.TraceInformation("Reactor: {0:n3} enqueue {1}.{2} ({3}), length {4}", DateTime.Now.TimeOfDay.TotalSeconds, userOpName, opName, opArg, builder.CurrentQueueLength) - builder.Post(Op(userOpName, opName, opArg, ct, op, ccont)) - - member r.CurrentQueueLength = - builder.CurrentQueueLength - - // This is for testing only - member r.WaitForBackgroundOpCompletion() = - Trace.TraceInformation("Reactor: {0:n3} enqueue wait for background, length {0}", DateTime.Now.TimeOfDay.TotalSeconds, builder.CurrentQueueLength) - builder.PostAndReply WaitForBackgroundOpCompletion - - // This is for testing only - member r.CompleteAllQueuedOps() = - Trace.TraceInformation("Reactor: {0:n3} enqueue wait for all ops, length {0}", DateTime.Now.TimeOfDay.TotalSeconds, builder.CurrentQueueLength) - builder.PostAndReply CompleteAllQueuedOps - - member r.EnqueueAndAwaitOpAsync (userOpName, opName, opArg, f) = - async { - let! ct = Async.CancellationToken - let resultCell = AsyncUtil.AsyncResultCell<_>() - r.EnqueueOpPrim(userOpName, opName, opArg, ct, - op=(fun ctok -> - let result = - try - match Cancellable.run ct (f ctok) with - | ValueOrCancelled.Value r -> AsyncUtil.AsyncOk r - | ValueOrCancelled.Cancelled e -> AsyncUtil.AsyncCanceled e - with e -> e |> AsyncUtil.AsyncException - - resultCell.RegisterResult(result)), - ccont=(fun () -> resultCell.RegisterResult (AsyncUtil.AsyncCanceled(OperationCanceledException(ct))) ) - - ) - return! resultCell.AsyncResult - } - - member __.PauseBeforeBackgroundWork with get() = pauseBeforeBackgroundWork and set v = pauseBeforeBackgroundWork <- v - - static member Singleton = theReactor - diff --git a/src/fsharp/service/Reactor.fsi b/src/fsharp/service/Reactor.fsi deleted file mode 100755 index 3040ca65eee..00000000000 --- a/src/fsharp/service/Reactor.fsi +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.SourceCodeServices - -open System.Threading -open FSharp.Compiler.AbstractIL.Internal.Library - -/// Represents the capability to schedule work in the compiler service operations queue for the compilation thread -type internal IReactorOperations = - - /// Put the operation in the queue, and return an async handle to its result. - abstract EnqueueAndAwaitOpAsync : userOpName:string * opName:string * opArg:string * action: (CompilationThreadToken -> Cancellable<'T>) -> Async<'T> - - /// Enqueue an operation and return immediately. - abstract EnqueueOp: userOpName:string * opName:string * opArg:string * action: (CompilationThreadToken -> unit) -> unit - -/// Reactor is intended for long-running but interruptible operations, interleaved -/// with one-off asynchronous operations. -/// -/// It is used to guard the global compiler state while maintaining responsiveness on -/// the UI thread. -/// Reactor operations -[] -type internal Reactor = - - /// Allows to specify the language for error messages - member SetPreferredUILang : string option -> unit - - /// Set the background building function, which is called repeatedly - /// until it returns 'false'. If None then no background operation is used. - member SetBackgroundOp : ( (* userOpName:*) string * (* opName: *) string * (* opArg: *) string * (CompilationThreadToken -> CancellationToken -> bool)) option -> unit - - /// Cancel any work being don by the background building function. - member CancelBackgroundOp : unit -> unit - - /// Block until the current implicit background build is complete. Unit test only. - member WaitForBackgroundOpCompletion : unit -> unit - - /// Block until all operations in the queue are complete - member CompleteAllQueuedOps : unit -> unit - - /// Enqueue an uncancellable operation and return immediately. - member EnqueueOp : userOpName:string * opName: string * opArg: string * op:(CompilationThreadToken -> unit) -> unit - - /// For debug purposes - member CurrentQueueLength : int - - /// Put the operation in the queue, and return an async handle to its result. - member EnqueueAndAwaitOpAsync : userOpName:string * opName:string * opArg:string * (CompilationThreadToken -> Cancellable<'T>) -> Async<'T> - - /// The timespan in milliseconds before background work begins after the operations queue is empty - member PauseBeforeBackgroundWork : int with get, set - - /// Get the reactor - static member Singleton : Reactor - diff --git a/src/fsharp/service/SemanticClassification.fs b/src/fsharp/service/SemanticClassification.fs index 89db4acada0..ec433a84b0c 100644 --- a/src/fsharp/service/SemanticClassification.fs +++ b/src/fsharp/service/SemanticClassification.fs @@ -1,61 +1,69 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.EditorServices open System.Diagnostics open System.Collections.Generic open System.Collections.Immutable - -open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Library +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.Import open FSharp.Compiler.Infos open FSharp.Compiler.ErrorLogger open FSharp.Compiler.NameResolution -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Range +open FSharp.Compiler.Syntax.PrettyNaming open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps [] type SemanticClassificationType = - | ReferenceType - | ValueType - | UnionCase - | UnionCaseField - | Function - | Property - | MutableVar - | Module - | Namespace - | Printf - | ComputationExpression - | IntrinsicFunction - | Enumeration - | Interface - | TypeArgument - | Operator - | DisposableType - | DisposableTopLevelValue - | DisposableLocalValue - | Method - | ExtensionMethod - | ConstructorForReferenceType - | ConstructorForValueType - | Literal - | RecordField - | MutableRecordField - | RecordFieldAsFunction - | Exception - | Field - | Event - | Delegate - | NamedArgument - | Value - | LocalValue - | Type - | TypeDef - | Plaintext + | ReferenceType = 0 + | ValueType = 1 + | UnionCase = 2 + | UnionCaseField = 3 + | Function = 4 + | Property = 5 + | MutableVar = 6 + | Module = 7 + | Namespace = 8 + | Printf = 9 + | ComputationExpression = 10 + | IntrinsicFunction = 11 + | Enumeration = 12 + | Interface = 13 + | TypeArgument = 14 + | Operator = 15 + | DisposableType = 16 + | DisposableTopLevelValue = 17 + | DisposableLocalValue = 18 + | Method = 19 + | ExtensionMethod = 20 + | ConstructorForReferenceType = 21 + | ConstructorForValueType = 22 + | Literal = 23 + | RecordField = 24 + | MutableRecordField = 25 + | RecordFieldAsFunction = 26 + | Exception = 27 + | Field = 28 + | Event = 29 + | Delegate = 30 + | NamedArgument = 31 + | Value = 32 + | LocalValue = 33 + | Type = 34 + | TypeDef = 35 + | Plaintext = 36 + +[] +[] +type SemanticClassificationItem = + val Range: range + val Type: SemanticClassificationType + new((range, ty)) = { Range = range; Type = ty } [] module TcResolutionsExtensions = @@ -63,7 +71,7 @@ module TcResolutionsExtensions = (cnr.Item, cnr.ItemOccurence, cnr.DisplayEnv, cnr.NameResolutionEnv, cnr.AccessorDomain, cnr.Range) type TcResolutions with - member sResolutions.GetSemanticClassification(g: TcGlobals, amap: Import.ImportMap, formatSpecifierLocations: (range * int) [], range: range option) : struct(range * SemanticClassificationType) [] = + member sResolutions.GetSemanticClassification(g: TcGlobals, amap: ImportMap, formatSpecifierLocations: (range * int) [], range: range option) : SemanticClassificationItem [] = ErrorScope.Protect Range.range0 (fun () -> let (|LegitTypeOccurence|_|) = function | ItemOccurence.UseInType @@ -121,14 +129,14 @@ module TcResolutionsExtensions = let isDisposableTy (ty: TType) = not (typeEquiv g ty g.system_IDisposable_ty) && - protectAssemblyExplorationNoReraise false false (fun () -> Infos.ExistsHeadTypeInEntireHierarchy g amap range0 ty g.tcref_System_IDisposable) + protectAssemblyExplorationNoReraise false false (fun () -> ExistsHeadTypeInEntireHierarchy g amap range0 ty g.tcref_System_IDisposable) let isDiscard (str: string) = str.StartsWith("_") let isValRefDisposable (vref: ValRef) = not (isDiscard vref.DisplayName) && // For values, we actually do want to color things if they literally are IDisposables - protectAssemblyExplorationNoReraise false false (fun () -> Infos.ExistsHeadTypeInEntireHierarchy g amap range0 vref.Type g.tcref_System_IDisposable) + protectAssemblyExplorationNoReraise false false (fun () -> ExistsHeadTypeInEntireHierarchy g amap range0 vref.Type g.tcref_System_IDisposable) let isStructTyconRef (tyconRef: TyconRef) = let ty = generalizedTyconRef tyconRef @@ -148,9 +156,9 @@ module TcResolutionsExtensions = let duplicates = HashSet(Range.comparer) let results = ImmutableArray.CreateBuilder() - let inline add m typ = + let inline add m (typ: SemanticClassificationType) = if duplicates.Add m then - results.Add struct(m, typ) + results.Add (new SemanticClassificationItem((m, typ))) resolutions |> Array.iter (fun cnr -> @@ -367,7 +375,7 @@ module TcResolutionsExtensions = | _, _, _, _, _, m -> add m SemanticClassificationType.Plaintext) - results.AddRange(formatSpecifierLocations |> Array.map (fun (m, _) -> struct(m, SemanticClassificationType.Printf))) + results.AddRange(formatSpecifierLocations |> Array.map (fun (m, _) -> new SemanticClassificationItem((m, SemanticClassificationType.Printf)))) results.ToArray() ) (fun msg -> diff --git a/src/fsharp/service/SemanticClassification.fsi b/src/fsharp/service/SemanticClassification.fsi index 97193ff564a..c7db8119251 100644 --- a/src/fsharp/service/SemanticClassification.fsi +++ b/src/fsharp/service/SemanticClassification.fsi @@ -1,54 +1,61 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.EditorServices open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.Import open FSharp.Compiler.NameResolution -open FSharp.Compiler.Range -open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.TypedTreeOps /// A kind that determines what range in a source's text is semantically classified as after type-checking. [] type SemanticClassificationType = - | ReferenceType - | ValueType - | UnionCase - | UnionCaseField - | Function - | Property - | MutableVar - | Module - | Namespace - | Printf - | ComputationExpression - | IntrinsicFunction - | Enumeration - | Interface - | TypeArgument - | Operator - | DisposableType - | DisposableTopLevelValue - | DisposableLocalValue - | Method - | ExtensionMethod - | ConstructorForReferenceType - | ConstructorForValueType - | Literal - | RecordField - | MutableRecordField - | RecordFieldAsFunction - | Exception - | Field - | Event - | Delegate - | NamedArgument - | Value - | LocalValue - | Type - | TypeDef - | Plaintext + | ReferenceType = 0 + | ValueType = 1 + | UnionCase = 2 + | UnionCaseField = 3 + | Function = 4 + | Property = 5 + | MutableVar = 6 + | Module = 7 + | Namespace = 8 + | Printf = 9 + | ComputationExpression = 10 + | IntrinsicFunction = 11 + | Enumeration = 12 + | Interface = 13 + | TypeArgument = 14 + | Operator = 15 + | DisposableType = 16 + | DisposableTopLevelValue = 17 + | DisposableLocalValue = 18 + | Method = 19 + | ExtensionMethod = 20 + | ConstructorForReferenceType = 21 + | ConstructorForValueType = 22 + | Literal = 23 + | RecordField = 24 + | MutableRecordField = 25 + | RecordFieldAsFunction = 26 + | Exception = 27 + | Field = 28 + | Event = 29 + | Delegate = 30 + | NamedArgument = 31 + | Value = 32 + | LocalValue = 33 + | Type = 34 + | TypeDef = 35 + | Plaintext = 36 + +[] +[] +type SemanticClassificationItem = + val Range: range + val Type: SemanticClassificationType + new: (range * SemanticClassificationType) -> SemanticClassificationItem /// Extension methods for the TcResolutions type. [] @@ -56,4 +63,4 @@ module internal TcResolutionsExtensions = val (|CNR|) : cnr: CapturedNameResolution -> (Item * ItemOccurence * DisplayEnv * NameResolutionEnv * AccessorDomain * range) type TcResolutions with - member GetSemanticClassification: g: TcGlobals * amap: ImportMap * formatSpecifierLocations: (range * int) [] * range: range option -> struct(range * SemanticClassificationType) [] \ No newline at end of file + member GetSemanticClassification: g: TcGlobals * amap: ImportMap * formatSpecifierLocations: (range * int) [] * range: range option -> SemanticClassificationItem [] \ No newline at end of file diff --git a/src/fsharp/service/SemanticClassificationKey.fs b/src/fsharp/service/SemanticClassificationKey.fs new file mode 100644 index 00000000000..960d3fade56 --- /dev/null +++ b/src/fsharp/service/SemanticClassificationKey.fs @@ -0,0 +1,82 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.EditorServices + +open System +open System.IO +open System.IO.MemoryMappedFiles +open System.Reflection.Metadata +open System.Runtime.InteropServices +open FSharp.NativeInterop +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Position +open FSharp.Compiler.Text.Range + +#nowarn "9" + +[] +type SemanticClassificationView(mmf: MemoryMappedFile, length) = + + let buffer = Array.zeroCreate sizeof + + member _.ReadItem(reader: byref) = + reader.ReadBytes(sizeof, buffer, 0) + MemoryMarshal.Cast(Span(buffer)).[0] + + member this.ForEach(f: SemanticClassificationItem -> unit) = + use view = mmf.CreateViewAccessor(0L, length) + let mutable reader = BlobReader(view.SafeMemoryMappedViewHandle.DangerousGetHandle() |> NativePtr.ofNativeInt, int length) + + reader.Offset <- 0 + while reader.Offset < reader.Length do + let item = this.ReadItem(&reader) + f item + +[] +type SemanticClassificationKeyStore(mmf: MemoryMappedFile, length) = + let mutable isDisposed = false + let checkDispose() = + if isDisposed then + raise (ObjectDisposedException("SemanticClassificationKeyStore")) + + member _.GetView() = + checkDispose() + SemanticClassificationView(mmf, length) + + interface IDisposable with + + member _.Dispose() = + isDisposed <- true + mmf.Dispose() + +[] +type SemanticClassificationKeyStoreBuilder() = + + let b = BlobBuilder() + + member _.WriteAll (semanticClassification: SemanticClassificationItem[]) = + use ptr = fixed semanticClassification + b.WriteBytes(NativePtr.ofNativeInt (NativePtr.toNativeInt ptr), semanticClassification.Length * sizeof) + + member _.TryBuildAndReset() = + if b.Count > 0 then + let length = int64 b.Count + let mmf = + let mmf = + MemoryMappedFile.CreateNew( + null, + length, + MemoryMappedFileAccess.ReadWrite, + MemoryMappedFileOptions.None, + HandleInheritability.None) + use stream = mmf.CreateViewStream(0L, length, MemoryMappedFileAccess.ReadWrite) + b.WriteContentTo stream + mmf + + b.Clear() + + Some(new SemanticClassificationKeyStore(mmf, length)) + else + b.Clear() + None diff --git a/src/fsharp/service/SemanticClassificationKey.fsi b/src/fsharp/service/SemanticClassificationKey.fsi new file mode 100644 index 00000000000..8a30844f722 --- /dev/null +++ b/src/fsharp/service/SemanticClassificationKey.fsi @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.EditorServices + +open System +open FSharp.Compiler.CodeAnalysis + +/// Provides a read only view to iterate over the semantic classification contents. +[] +type SemanticClassificationView = + + /// Iterate through the stored SemanticClassificationItem entries from the store and apply the passed function on each entry. + member ForEach: (SemanticClassificationItem -> unit) -> unit + +/// Stores a list of semantic classification key strings and their ranges in a memory mapped file. +/// Provides a view to iterate over the contents of the file. +[] +type internal SemanticClassificationKeyStore = + interface IDisposable + + /// Get a read only view on the semantic classification key store + member GetView: unit -> SemanticClassificationView + + +/// A builder that will build an semantic classification key store based on the written Item and its associated range. +[] +type internal SemanticClassificationKeyStoreBuilder = + + new: unit -> SemanticClassificationKeyStoreBuilder + + member WriteAll: SemanticClassificationItem[] -> unit + + member TryBuildAndReset: unit -> SemanticClassificationKeyStore option diff --git a/src/fsharp/service/ServiceAnalysis.fs b/src/fsharp/service/ServiceAnalysis.fs index f392ff4efa8..d106a41142f 100644 --- a/src/fsharp/service/ServiceAnalysis.fs +++ b/src/fsharp/service/ServiceAnalysis.fs @@ -1,15 +1,16 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.EditorServices -open System.Threading - -open FSharp.Compiler -open FSharp.Compiler.Range -open FSharp.Compiler.PrettyNaming open System.Collections.Generic open System.Runtime.CompilerServices -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Library +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Symbols.FSharpSymbolPatterns +open FSharp.Compiler.Symbols +open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range module UnusedOpens = @@ -29,16 +30,16 @@ module UnusedOpens = for rf in ent.FSharpFields do yield rf :> FSharpSymbol - if ent.IsFSharpUnion && not (Symbol.hasAttribute ent.Attributes) then + if ent.IsFSharpUnion && not (ent.HasAttribute()) then for unionCase in ent.UnionCases do yield unionCase :> FSharpSymbol - if Symbol.hasAttribute ent.Attributes then + if ent.HasAttribute() then for fv in ent.MembersFunctionsAndValues do // fv.IsExtensionMember is always false for C# extension methods returning by `MembersFunctionsAndValues`, // so we have to check Extension attribute instead. // (note: fv.IsExtensionMember has proper value for symbols returning by GetAllUsesOfAllSymbolsInFile though) - if Symbol.hasAttribute fv.Attributes then + if fv.HasAttribute() then yield fv :> FSharpSymbol for apCase in entity.ActivePatternCases do @@ -51,9 +52,9 @@ module UnusedOpens = HashSet<_>(symbols, symbolHash) - member __.Entity = entity - member __.IsNestedAutoOpen = isNestedAutoOpen - member __.RevealedSymbolsContains(symbol) = revealedSymbols.Force().Contains symbol + member _.Entity = entity + member _.IsNestedAutoOpen = isNestedAutoOpen + member _.RevealedSymbolsContains(symbol) = revealedSymbols.Force().Contains symbol type OpenedModuleGroup = { OpenedModules: OpenedModule [] } @@ -63,7 +64,7 @@ module UnusedOpens = [| yield OpenedModule (modul, isNestedAutoOpen) for ent in modul.NestedEntities do - if ent.IsFSharpModule && Symbol.hasAttribute ent.Attributes then + if ent.IsFSharpModule && ent.HasAttribute() then yield! getModuleAndItsAutoOpens true ent |] { OpenedModules = getModuleAndItsAutoOpens false modul } @@ -132,7 +133,7 @@ module UnusedOpens = // For the rest of symbols we pick only those which are the first part of a long ident, because it's they which are // contained in opened namespaces / modules. For example, we pick `IO` from long ident `IO.File.OpenWrite` because // it's `open System` which really brings it into scope. - let partialName = QuickParse.GetPartialLongNameEx (getSourceLineStr su.RangeAlternate.StartLine, su.RangeAlternate.EndColumn - 1) + let partialName = QuickParse.GetPartialLongNameEx (getSourceLineStr su.Range.StartLine, su.Range.EndColumn - 1) List.isEmpty partialName.QualifyingIdents) |> Array.ofSeq @@ -173,11 +174,11 @@ module UnusedOpens = openedGroup.OpenedModules |> Array.exists (fun openedEntity -> symbolUsesRangesByDeclaringEntity.BagExistsValueForKey(openedEntity.Entity, fun symbolUseRange -> rangeContainsRange openStatement.AppliedScope symbolUseRange && - Range.posGt symbolUseRange.Start openStatement.Range.End) || + Position.posGt symbolUseRange.Start openStatement.Range.End) || symbolUses2 |> Array.exists (fun symbolUse -> - rangeContainsRange openStatement.AppliedScope symbolUse.RangeAlternate && - Range.posGt symbolUse.RangeAlternate.Start openStatement.Range.End && + rangeContainsRange openStatement.AppliedScope symbolUse.Range && + Position.posGt symbolUse.Range.Start openStatement.Range.End && openedEntity.RevealedSymbolsContains symbolUse.Symbol))) // Return them as interim used entities @@ -219,7 +220,7 @@ module UnusedOpens = | :? FSharpMemberOrFunctionOrValue as f -> match f.DeclaringEntity with | Some entity when entity.IsNamespace || entity.IsFSharpModule -> - symbolUsesRangesByDeclaringEntity.BagAdd(entity, symbolUse.RangeAlternate) + symbolUsesRangesByDeclaringEntity.BagAdd(entity, symbolUse.Range) | _ -> () | _ -> () @@ -258,23 +259,23 @@ module SimplifyNames = if symbolUse.IsFromOpenStatement || symbolUse.IsFromDefinition then None else - let lineStr = getSourceLineStr symbolUse.RangeAlternate.StartLine + let lineStr = getSourceLineStr symbolUse.Range.StartLine // for `System.DateTime.Now` it returns ([|"System"; "DateTime"|], "Now") - let partialName = QuickParse.GetPartialLongNameEx(lineStr, symbolUse.RangeAlternate.EndColumn - 1) - // `symbolUse.RangeAlternate.Start` does not point to the start of plid, it points to start of `name`, + let partialName = QuickParse.GetPartialLongNameEx(lineStr, symbolUse.Range.EndColumn - 1) + // `symbolUse.Range.Start` does not point to the start of plid, it points to start of `name`, // so we have to calculate plid's start ourselves. - let plidStartCol = symbolUse.RangeAlternate.EndColumn - partialName.PartialIdent.Length - (getPlidLength partialName.QualifyingIdents) + let plidStartCol = symbolUse.Range.EndColumn - partialName.PartialIdent.Length - (getPlidLength partialName.QualifyingIdents) if partialName.PartialIdent = "" || List.isEmpty partialName.QualifyingIdents then None else Some (symbolUse, partialName.QualifyingIdents, plidStartCol, partialName.PartialIdent)) - |> Seq.groupBy (fun (symbolUse, _, plidStartCol, _) -> symbolUse.RangeAlternate.StartLine, plidStartCol) - |> Seq.map (fun (_, xs) -> xs |> Seq.maxBy (fun (symbolUse, _, _, _) -> symbolUse.RangeAlternate.EndColumn)) + |> Seq.groupBy (fun (symbolUse, _, plidStartCol, _) -> symbolUse.Range.StartLine, plidStartCol) + |> Seq.map (fun (_, xs) -> xs |> Seq.maxBy (fun (symbolUse, _, _, _) -> symbolUse.Range.EndColumn)) for symbolUse, plid, plidStartCol, name in symbolUses do let posAtStartOfName = - let r = symbolUse.RangeAlternate - if r.StartLine = r.EndLine then Range.mkPos r.StartLine (r.EndColumn - name.Length) + let r = symbolUse.Range + if r.StartLine = r.EndLine then Position.mkPos r.StartLine (r.EndColumn - name.Length) else r.Start let getNecessaryPlid (plid: string list) : string list = @@ -292,11 +293,11 @@ module SimplifyNames = match necessaryPlid with | necessaryPlid when necessaryPlid = plid -> () | necessaryPlid -> - let r = symbolUse.RangeAlternate + let r = symbolUse.Range let necessaryPlidStartCol = r.EndColumn - name.Length - (getPlidLength necessaryPlid) let unnecessaryRange = - Range.mkRange r.FileName (Range.mkPos r.StartLine plidStartCol) (Range.mkPos r.EndLine necessaryPlidStartCol) + Range.mkRange r.FileName (Position.mkPos r.StartLine plidStartCol) (Position.mkPos r.EndLine necessaryPlidStartCol) let relativeName = (String.concat "." plid) + "." + name result.Add({Range = unnecessaryRange; RelativeName = relativeName}) @@ -330,7 +331,7 @@ module UnusedDeclarations = HashSet(usages) symbolsUses - |> Seq.distinctBy (fun su -> su.RangeAlternate) // Account for "hidden" uses, like a val in a member val definition. These aren't relevant + |> Seq.distinctBy (fun su -> su.Range) // Account for "hidden" uses, like a val in a member val definition. These aren't relevant |> Seq.choose(fun (su: FSharpSymbolUse) -> if su.IsFromDefinition && su.Symbol.DeclarationLocation.IsSome && @@ -341,7 +342,7 @@ module UnusedDeclarations = Some (su, usages.Contains su.Symbol.DeclarationLocation.Value) else None) - |> Seq.groupBy (fun (defSu, _) -> defSu.RangeAlternate) + |> Seq.groupBy (fun (defSu, _) -> defSu.Range) |> Seq.filter (fun (_, defSus) -> defSus |> Seq.forall (fun (_, isUsed) -> not isUsed)) |> Seq.map (fun (m, _) -> m) diff --git a/src/fsharp/service/ServiceAnalysis.fsi b/src/fsharp/service/ServiceAnalysis.fsi index 3fa2be9ea89..e1e4488007c 100644 --- a/src/fsharp/service/ServiceAnalysis.fsi +++ b/src/fsharp/service/ServiceAnalysis.fsi @@ -1,8 +1,9 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.EditorServices -open FSharp.Compiler.Range +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Text module public UnusedOpens = diff --git a/src/fsharp/service/ServiceAssemblyContent.fs b/src/fsharp/service/ServiceAssemblyContent.fs index 53a313baeb6..30c9fadf5b8 100644 --- a/src/fsharp/service/ServiceAssemblyContent.fs +++ b/src/fsharp/service/ServiceAssemblyContent.fs @@ -5,98 +5,18 @@ // type checking and intellisense-like environment-reporting. //-------------------------------------------------------------------------- -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.EditorServices open System open System.Collections.Generic - -open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree -open FSharp.Compiler.SyntaxTreeOps - -type ShortIdent = string - -type Idents = ShortIdent[] - -type MaybeUnresolvedIdent = { Ident: ShortIdent; Resolved: bool } - -type MaybeUnresolvedIdents = MaybeUnresolvedIdent[] +open Internal.Utilities.Library +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.IO +open FSharp.Compiler.Symbols type IsAutoOpen = bool -[] -module Extensions = - - type FSharpEntity with - member x.TryGetFullName() = - try x.TryFullName - with _ -> - try Some(String.Join(".", x.AccessPath, x.DisplayName)) - with _ -> None - - member x.TryGetFullDisplayName() = - let fullName = x.TryGetFullName() |> Option.map (fun fullName -> fullName.Split '.') - let res = - match fullName with - | Some fullName -> - match Option.attempt (fun _ -> x.DisplayName) with - | Some shortDisplayName when not (shortDisplayName.Contains ".") -> - Some (fullName |> Array.replace (fullName.Length - 1) shortDisplayName) - | _ -> Some fullName - | None -> None - |> Option.map (fun fullDisplayName -> String.Join (".", fullDisplayName)) - //debug "GetFullDisplayName: FullName = %A, Result = %A" fullName res - res - - member x.TryGetFullCompiledName() = - let fullName = x.TryGetFullName() |> Option.map (fun fullName -> fullName.Split '.') - let res = - match fullName with - | Some fullName -> - match Option.attempt (fun _ -> x.CompiledName) with - | Some shortCompiledName when not (shortCompiledName.Contains ".") -> - Some (fullName |> Array.replace (fullName.Length - 1) shortCompiledName) - | _ -> Some fullName - | None -> None - |> Option.map (fun fullDisplayName -> String.Join (".", fullDisplayName)) - //debug "GetFullCompiledName: FullName = %A, Result = %A" fullName res - res - - member x.PublicNestedEntities = - x.NestedEntities |> Seq.filter (fun entity -> entity.Accessibility.IsPublic) - - member x.TryGetMembersFunctionsAndValues = - try x.MembersFunctionsAndValues with _ -> [||] :> _ - - type FSharpMemberOrFunctionOrValue with - // FullType may raise exceptions (see https://github.com/fsharp/fsharp/issues/307). - member x.FullTypeSafe = Option.attempt (fun _ -> x.FullType) - - member x.TryGetFullDisplayName() = - let fullName = Option.attempt (fun _ -> x.FullName.Split '.') - match fullName with - | Some fullName -> - match Option.attempt (fun _ -> x.DisplayName) with - | Some shortDisplayName when not (shortDisplayName.Contains ".") -> - Some (fullName |> Array.replace (fullName.Length - 1) shortDisplayName) - | _ -> Some fullName - | None -> None - |> Option.map (fun fullDisplayName -> String.Join (".", fullDisplayName)) - - member x.TryGetFullCompiledOperatorNameIdents() : Idents option = - // For operator ++ displayName is ( ++ ) compiledName is op_PlusPlus - if PrettyNaming.IsOperatorName x.DisplayName && x.DisplayName <> x.CompiledName then - x.DeclaringEntity - |> Option.bind (fun e -> e.TryGetFullName()) - |> Option.map (fun enclosingEntityFullName -> - Array.append (enclosingEntityFullName.Split '.') [| x.CompiledName |]) - else None - - type FSharpAssemblySignature with - member x.TryGetEntities() = try x.Entities :> _ seq with _ -> Seq.empty - [] type LookupType = | Fuzzy @@ -105,11 +25,11 @@ type LookupType = [] type AssemblySymbol = { FullName: string - CleanedIdents: Idents - Namespace: Idents option - NearestRequireQualifiedAccessParent: Idents option - TopRequireQualifiedAccessParent: Idents option - AutoOpenParent: Idents option + CleanedIdents: ShortIdents + Namespace: ShortIdents option + NearestRequireQualifiedAccessParent: ShortIdents option + TopRequireQualifiedAccessParent: ShortIdents option + AutoOpenParent: ShortIdents option Symbol: FSharpSymbol Kind: LookupType -> EntityKind UnresolvedSymbol: UnresolvedSymbol } @@ -120,11 +40,11 @@ type AssemblyPath = string type AssemblyContentType = Public | Full type Parent = - { Namespace: Idents option - ThisRequiresQualifiedAccess: (* isForMemberOrValue *) bool -> Idents option - TopRequiresQualifiedAccess: (* isForMemberOrValue *) bool -> Idents option - AutoOpen: Idents option - WithModuleSuffix: Idents option + { Namespace: ShortIdents option + ThisRequiresQualifiedAccess: (* isForMemberOrValue *) bool -> ShortIdents option + TopRequiresQualifiedAccess: (* isForMemberOrValue *) bool -> ShortIdents option + AutoOpen: ShortIdents option + WithModuleSuffix: ShortIdents option IsModule: bool } static member Empty = @@ -135,7 +55,7 @@ type Parent = WithModuleSuffix = None IsModule = true } - static member RewriteParentIdents (parentIdents: Idents option) (idents: Idents) = + static member RewriteParentIdents (parentIdents: ShortIdents option) (idents: ShortIdents) = match parentIdents with | Some p when p.Length <= idents.Length -> for i in 0..p.Length - 1 do @@ -143,14 +63,14 @@ type Parent = | _ -> () idents - member x.FixParentModuleSuffix (idents: Idents) = + member x.FixParentModuleSuffix (idents: ShortIdents) = Parent.RewriteParentIdents x.WithModuleSuffix idents - member __.FormatEntityFullName (entity: FSharpEntity) = + member _.FormatEntityFullName (entity: FSharpEntity) = // remove number of arguments from generic types // e.g. System.Collections.Generic.Dictionary`2 -> System.Collections.Generic.Dictionary // and System.Data.Listeners`1.Func -> System.Data.Listeners.Func - let removeGenericParamsCount (idents: Idents) = + let removeGenericParamsCount (idents: ShortIdents) = idents |> Array.map (fun ident -> if ident.Length > 0 && Char.IsDigit ident.[ident.Length - 1] then @@ -160,7 +80,7 @@ type Parent = else ident else ident) - let removeModuleSuffix (idents: Idents) = + let removeModuleSuffix (idents: ShortIdents) = if entity.IsFSharpModule && idents.Length > 0 then let lastIdent = idents.[idents.Length - 1] if lastIdent <> entity.DisplayName then @@ -187,11 +107,11 @@ type IAssemblyContentCache = abstract TryGet: AssemblyPath -> AssemblyContentCacheEntry option abstract Set: AssemblyPath -> AssemblyContentCacheEntry -> unit -module AssemblyContentProvider = +module AssemblyContent = open System.IO - let unresolvedSymbol (topRequireQualifiedAccessParent: Idents option) (cleanedIdents: Idents) (fullName: string) = - let getNamespace (idents: Idents) = + let UnresolvedSymbol (topRequireQualifiedAccessParent: ShortIdents option) (cleanedIdents: ShortIdents) (fullName: string) = + let getNamespace (idents: ShortIdents) = if idents.Length > 1 then Some idents.[..idents.Length - 2] else None let ns = @@ -221,17 +141,17 @@ module AssemblyContentProvider = Symbol = entity Kind = fun lookupType -> match entity, lookupType with - | Symbol.FSharpModule, _ -> + | FSharpSymbolPatterns.FSharpModule, _ -> EntityKind.Module - { IsAutoOpen = Symbol.hasAttribute entity.Attributes - HasModuleSuffix = Symbol.hasModuleSuffixAttribute entity } + { IsAutoOpen = entity.HasAttribute() + HasModuleSuffix = FSharpSymbolPatterns.hasModuleSuffixAttribute entity } | _, LookupType.Fuzzy -> EntityKind.Type | _, LookupType.Precise -> match entity with - | Symbol.Attribute -> EntityKind.Attribute + | FSharpSymbolPatterns.Attribute -> EntityKind.Attribute | _ -> EntityKind.Type - UnresolvedSymbol = unresolvedSymbol topRequireQualifiedAccessParent cleanIdents fullName + UnresolvedSymbol = UnresolvedSymbol topRequireQualifiedAccessParent cleanIdents fullName }) let traverseMemberFunctionAndValues ns (parent: Parent) (membersFunctionsAndValues: seq) = @@ -250,7 +170,7 @@ module AssemblyContentProvider = AutoOpenParent = autoOpenParent Symbol = func Kind = fun _ -> EntityKind.FunctionOrValue func.IsActivePattern - UnresolvedSymbol = unresolvedSymbol topRequireQualifiedAccessParent cleanedIdents fullName } + UnresolvedSymbol = UnresolvedSymbol topRequireQualifiedAccessParent cleanedIdents fullName } [ yield! func.TryGetFullDisplayName() |> Option.map (fun fullDisplayName -> processIdents func.FullName (fullDisplayName.Split '.')) @@ -285,7 +205,7 @@ module AssemblyContentProvider = | None -> () let rqa = parent.FormatEntityFullName entity |> Option.map snd - let rqaForType = if entity.IsFSharp && Symbol.hasAttribute entity.Attributes then rqa else None + let rqaForType = if entity.IsFSharp && entity.HasAttribute() then rqa else None let thisRequiresQualifierAccess (isForMethodOrValue: bool) = if isForMethodOrValue then rqa else rqaForType let currentParent = @@ -293,7 +213,7 @@ module AssemblyContentProvider = TopRequiresQualifiedAccess = fun forMV -> (parent.TopRequiresQualifiedAccess false) |> Option.orElse (thisRequiresQualifierAccess forMV) AutoOpen = - let isAutoOpen = entity.IsFSharpModule && Symbol.hasAttribute entity.Attributes + let isAutoOpen = entity.IsFSharpModule && entity.HasAttribute() match isAutoOpen, parent.AutoOpen with // if parent is also AutoOpen, then keep the parent | true, Some parent -> Some parent @@ -303,14 +223,14 @@ module AssemblyContentProvider = | false, _ -> None WithModuleSuffix = - if entity.IsFSharpModule && (Symbol.hasModuleSuffixAttribute entity || entity.CompiledName <> entity.DisplayName) then + if entity.IsFSharpModule && (FSharpSymbolPatterns.hasModuleSuffixAttribute entity || entity.CompiledName <> entity.DisplayName) then currentEntity |> Option.map (fun e -> e.CleanedIdents) else parent.WithModuleSuffix Namespace = ns IsModule = entity.IsFSharpModule } - match entity.TryGetMembersFunctionsAndValues with + match entity.TryGetMembersFunctionsAndValues() with | xs when xs.Count > 0 -> yield! traverseMemberFunctionAndValues ns currentParent xs | _ -> () @@ -320,7 +240,7 @@ module AssemblyContentProvider = | _ -> () } - let getAssemblySignatureContent contentType (signature: FSharpAssemblySignature) = + let GetAssemblySignatureContent contentType (signature: FSharpAssemblySignature) = // We ignore all diagnostics during this operation // @@ -337,9 +257,9 @@ module AssemblyContentProvider = |> Seq.toList let getAssemblySignaturesContent contentType (assemblies: FSharpAssembly list) = - assemblies |> List.collect (fun asm -> getAssemblySignatureContent contentType asm.Contents) + assemblies |> List.collect (fun asm -> GetAssemblySignatureContent contentType asm.Contents) - let getAssemblyContent (withCache: (IAssemblyContentCache -> _) -> _) contentType (fileName: string option) (assemblies: FSharpAssembly list) = + let GetAssemblyContent (withCache: (IAssemblyContentCache -> _) -> _) contentType (fileName: string option) (assemblies: FSharpAssembly list) = // We ignore all diagnostics during this operation // @@ -368,678 +288,19 @@ module AssemblyContentProvider = | assemblies, None -> getAssemblySignaturesContent contentType assemblies |> List.filter (fun entity -> - match contentType, FSharpSymbol.GetAccessibility(entity.Symbol) with - | Full, _ -> true - | Public, access -> - match access with - | None -> true - | Some x when x.IsPublic -> true - | _ -> false) + match contentType with + | Full -> true + | Public -> entity.Symbol.Accessibility.IsPublic) type EntityCache() = let dic = Dictionary() interface IAssemblyContentCache with - member __.TryGet assembly = + member _.TryGet assembly = match dic.TryGetValue assembly with | true, entry -> Some entry | _ -> None - member __.Set assembly entry = dic.[assembly] <- entry + member _.Set assembly entry = dic.[assembly] <- entry - member __.Clear() = dic.Clear() + member _.Clear() = dic.Clear() member x.Locking f = lock dic <| fun _ -> f (x :> IAssemblyContentCache) -type StringLongIdent = string - -type Entity = - { FullRelativeName: StringLongIdent - Qualifier: StringLongIdent - Namespace: StringLongIdent option - Name: StringLongIdent - LastIdent: string } - override x.ToString() = sprintf "%A" x - -[] -module Entity = - let getRelativeNamespace (targetNs: Idents) (sourceNs: Idents) = - let rec loop index = - if index > targetNs.Length - 1 then sourceNs.[index..] - // target namespace is not a full parent of source namespace, keep the source ns as is - elif index > sourceNs.Length - 1 then sourceNs - elif targetNs.[index] = sourceNs.[index] then loop (index + 1) - else sourceNs.[index..] - if sourceNs.Length = 0 || targetNs.Length = 0 then sourceNs - else loop 0 - - let cutAutoOpenModules (autoOpenParent: Idents option) (candidateNs: Idents) = - let nsCount = - match autoOpenParent with - | Some parent when parent.Length > 0 -> - min (parent.Length - 1) candidateNs.Length - | _ -> candidateNs.Length - candidateNs.[0..nsCount - 1] - - let tryCreate (targetNamespace: Idents option, targetScope: Idents, partiallyQualifiedName: MaybeUnresolvedIdents, - requiresQualifiedAccessParent: Idents option, autoOpenParent: Idents option, candidateNamespace: Idents option, candidate: Idents) = - match candidate with - | [||] -> [||] - | _ -> - partiallyQualifiedName - |> Array.heads - // long ident must contain an unresolved part, otherwise we show false positive suggestions like - // "open System" for `let _ = System.DateTime.Naaaw`. Here only "Naaw" is unresolved. - |> Array.filter (fun x -> x |> Array.exists (fun x -> not x.Resolved)) - |> Array.choose (fun parts -> - let parts = parts |> Array.map (fun x -> x.Ident) - if not (candidate |> Array.endsWith parts) then None - else - let identCount = parts.Length - let fullOpenableNs, restIdents = - let openableNsCount = - match requiresQualifiedAccessParent with - | Some parent -> min parent.Length candidate.Length - | None -> candidate.Length - candidate.[0..openableNsCount - 2], candidate.[openableNsCount - 1..] - - let openableNs = cutAutoOpenModules autoOpenParent fullOpenableNs - - let getRelativeNs ns = - match targetNamespace, candidateNamespace with - | Some targetNs, Some candidateNs when candidateNs = targetNs -> - getRelativeNamespace targetScope ns - | None, _ -> getRelativeNamespace targetScope ns - | _ -> ns - - let relativeNs = getRelativeNs openableNs - - match relativeNs, restIdents with - | [||], [||] -> None - | [||], [|_|] -> None - | _ -> - let fullRelativeName = Array.append (getRelativeNs fullOpenableNs) restIdents - let ns = - match relativeNs with - | [||] -> None - | _ when identCount > 1 && relativeNs.Length >= identCount -> - Some (relativeNs.[0..relativeNs.Length - identCount] |> String.concat ".") - | _ -> Some (relativeNs |> String.concat ".") - let qualifier = - if fullRelativeName.Length > 1 && fullRelativeName.Length >= identCount then - fullRelativeName.[0..fullRelativeName.Length - identCount] - else fullRelativeName - Some - { FullRelativeName = String.concat "." fullRelativeName //.[0..fullRelativeName.Length - identCount - 1] - Qualifier = String.concat "." qualifier - Namespace = ns - Name = match restIdents with [|_|] -> "" | _ -> String.concat "." restIdents - LastIdent = Array.tryLast restIdents |> Option.defaultValue "" }) - -type ScopeKind = - | Namespace - | TopModule - | NestedModule - | OpenDeclaration - | HashDirective - override x.ToString() = sprintf "%A" x - -type InsertContext = - { ScopeKind: ScopeKind - Pos: pos } - -type Module = - { Idents: Idents - Range: range } - -type OpenStatementInsertionPoint = - | TopLevel - | Nearest - -module ParsedInput = - - /// An recursive pattern that collect all sequential expressions to avoid StackOverflowException - let rec (|Sequentials|_|) = function - | SynExpr.Sequential (_, _, e, Sequentials es, _) -> - Some(e :: es) - | SynExpr.Sequential (_, _, e1, e2, _) -> - Some [e1; e2] - | _ -> None - - let (|ConstructorPats|) = function - | SynArgPats.Pats ps -> ps - | SynArgPats.NamePatPairs(xs, _) -> List.map snd xs - - /// Returns all `Ident`s and `LongIdent`s found in an untyped AST. - let getLongIdents (input: ParsedInput option) : IDictionary = - let identsByEndPos = Dictionary() - - let addLongIdent (longIdent: LongIdent) = - for ident in longIdent do - identsByEndPos.[ident.idRange.End] <- longIdent - - let addLongIdentWithDots (LongIdentWithDots (longIdent, lids) as value) = - match longIdent with - | [] -> () - | [_] as idents -> identsByEndPos.[value.Range.End] <- idents - | idents -> - for dotRange in lids do - identsByEndPos.[Range.mkPos dotRange.EndLine (dotRange.EndColumn - 1)] <- idents - identsByEndPos.[value.Range.End] <- idents - - let addIdent (ident: Ident) = - identsByEndPos.[ident.idRange.End] <- [ident] - - let rec walkImplFileInput (ParsedImplFileInput (modules = moduleOrNamespaceList)) = - List.iter walkSynModuleOrNamespace moduleOrNamespaceList - - and walkSynModuleOrNamespace (SynModuleOrNamespace(_, _, _, decls, _, Attributes attrs, _, _)) = - List.iter walkAttribute attrs - List.iter walkSynModuleDecl decls - - and walkAttribute (attr: SynAttribute) = - addLongIdentWithDots attr.TypeName - walkExpr attr.ArgExpr - - and walkTyparDecl (SynTyparDecl.TyparDecl (Attributes attrs, typar)) = - List.iter walkAttribute attrs - walkTypar typar - - and walkTypeConstraint = function - | SynTypeConstraint.WhereTyparIsValueType (t, _) - | SynTypeConstraint.WhereTyparIsReferenceType (t, _) - | SynTypeConstraint.WhereTyparIsUnmanaged (t, _) - | SynTypeConstraint.WhereTyparSupportsNull (t, _) - | SynTypeConstraint.WhereTyparIsComparable (t, _) - | SynTypeConstraint.WhereTyparIsEquatable (t, _) -> walkTypar t - | SynTypeConstraint.WhereTyparDefaultsToType (t, ty, _) - | SynTypeConstraint.WhereTyparSubtypeOfType (t, ty, _) -> walkTypar t; walkType ty - | SynTypeConstraint.WhereTyparIsEnum (t, ts, _) - | SynTypeConstraint.WhereTyparIsDelegate (t, ts, _) -> walkTypar t; List.iter walkType ts - | SynTypeConstraint.WhereTyparSupportsMember (ts, sign, _) -> List.iter walkType ts; walkMemberSig sign - - and walkPat = function - | SynPat.Tuple (_,pats, _) - | SynPat.ArrayOrList (_, pats, _) - | SynPat.Ands (pats, _) -> List.iter walkPat pats - | SynPat.Named (pat, ident, _, _, _) -> - walkPat pat - addIdent ident - | SynPat.Typed (pat, t, _) -> - walkPat pat - walkType t - | SynPat.Attrib (pat, Attributes attrs, _) -> - walkPat pat - List.iter walkAttribute attrs - | SynPat.Or (pat1, pat2, _) -> List.iter walkPat [pat1; pat2] - | SynPat.LongIdent (ident, _, typars, ConstructorPats pats, _, _) -> - addLongIdentWithDots ident - typars - |> Option.iter (fun (SynValTyparDecls (typars, _, constraints)) -> - List.iter walkTyparDecl typars - List.iter walkTypeConstraint constraints) - List.iter walkPat pats - | SynPat.Paren (pat, _) -> walkPat pat - | SynPat.IsInst (t, _) -> walkType t - | SynPat.QuoteExpr(e, _) -> walkExpr e - | _ -> () - - and walkTypar (Typar (_, _, _)) = () - - and walkBinding (SynBinding.Binding (_, _, _, _, Attributes attrs, _, _, pat, returnInfo, e, _, _)) = - List.iter walkAttribute attrs - walkPat pat - walkExpr e - returnInfo |> Option.iter (fun (SynBindingReturnInfo (t, _, _)) -> walkType t) - - and walkInterfaceImpl (InterfaceImpl(_, bindings, _)) = List.iter walkBinding bindings - - and walkIndexerArg = function - | SynIndexerArg.One (e, _, _) -> walkExpr e - | SynIndexerArg.Two (e1, _, e2, _, _, _) -> List.iter walkExpr [e1; e2] - - and walkType = function - | SynType.Array (_, t, _) - | SynType.HashConstraint (t, _) - | SynType.MeasurePower (t, _, _) - | SynType.Paren (t, _) -> walkType t - | SynType.Fun (t1, t2, _) - | SynType.MeasureDivide (t1, t2, _) -> walkType t1; walkType t2 - | SynType.LongIdent ident -> addLongIdentWithDots ident - | SynType.App (ty, _, types, _, _, _, _) -> walkType ty; List.iter walkType types - | SynType.LongIdentApp (_, _, _, types, _, _, _) -> List.iter walkType types - | SynType.Tuple (_, ts, _) -> ts |> List.iter (fun (_, t) -> walkType t) - | SynType.WithGlobalConstraints (t, typeConstraints, _) -> - walkType t; List.iter walkTypeConstraint typeConstraints - | _ -> () - - and walkClause (Clause (pat, e1, e2, _, _)) = - walkPat pat - walkExpr e2 - e1 |> Option.iter walkExpr - - and walkSimplePats = function - | SynSimplePats.SimplePats (pats, _) -> List.iter walkSimplePat pats - | SynSimplePats.Typed (pats, ty, _) -> - walkSimplePats pats - walkType ty - - and walkExpr = function - | SynExpr.Paren (e, _, _, _) - | SynExpr.Quote (_, _, e, _, _) - | SynExpr.Typed (e, _, _) - | SynExpr.InferredUpcast (e, _) - | SynExpr.InferredDowncast (e, _) - | SynExpr.AddressOf (_, e, _, _) - | SynExpr.DoBang (e, _) - | SynExpr.YieldOrReturn (_, e, _) - | SynExpr.ArrayOrListOfSeqExpr (_, e, _) - | SynExpr.CompExpr (_, _, e, _) - | SynExpr.Do (e, _) - | SynExpr.Assert (e, _) - | SynExpr.Lazy (e, _) - | SynExpr.YieldOrReturnFrom (_, e, _) -> walkExpr e - | SynExpr.Lambda (_, _, pats, e, _, _) -> - walkSimplePats pats - walkExpr e - | SynExpr.New (_, t, e, _) - | SynExpr.TypeTest (e, t, _) - | SynExpr.Upcast (e, t, _) - | SynExpr.Downcast (e, t, _) -> walkExpr e; walkType t - | SynExpr.Tuple (_, es, _, _) - | Sequentials es - | SynExpr.ArrayOrList (_, es, _) -> List.iter walkExpr es - | SynExpr.App (_, _, e1, e2, _) - | SynExpr.TryFinally (e1, e2, _, _, _) - | SynExpr.While (_, e1, e2, _) -> List.iter walkExpr [e1; e2] - | SynExpr.Record (_, _, fields, _) -> - fields |> List.iter (fun ((ident, _), e, _) -> - addLongIdentWithDots ident - e |> Option.iter walkExpr) - | SynExpr.Ident ident -> addIdent ident - | SynExpr.ObjExpr (ty, argOpt, bindings, ifaces, _, _) -> - argOpt |> Option.iter (fun (e, ident) -> - walkExpr e - ident |> Option.iter addIdent) - walkType ty - List.iter walkBinding bindings - List.iter walkInterfaceImpl ifaces - | SynExpr.LongIdent (_, ident, _, _) -> addLongIdentWithDots ident - | SynExpr.For (_, ident, e1, _, e2, e3, _) -> - addIdent ident - List.iter walkExpr [e1; e2; e3] - | SynExpr.ForEach (_, _, _, pat, e1, e2, _) -> - walkPat pat - List.iter walkExpr [e1; e2] - | SynExpr.MatchLambda (_, _, synMatchClauseList, _, _) -> - List.iter walkClause synMatchClauseList - | SynExpr.Match (_, e, synMatchClauseList, _) -> - walkExpr e - List.iter walkClause synMatchClauseList - | SynExpr.TypeApp (e, _, tys, _, _, _, _) -> - List.iter walkType tys; walkExpr e - | SynExpr.LetOrUse (_, _, bindings, e, _) -> - List.iter walkBinding bindings; walkExpr e - | SynExpr.TryWith (e, _, clauses, _, _, _, _) -> - List.iter walkClause clauses; walkExpr e - | SynExpr.IfThenElse (e1, e2, e3, _, _, _, _) -> - List.iter walkExpr [e1; e2] - e3 |> Option.iter walkExpr - | SynExpr.LongIdentSet (ident, e, _) - | SynExpr.DotGet (e, _, ident, _) -> - addLongIdentWithDots ident - walkExpr e - | SynExpr.DotSet (e1, idents, e2, _) -> - walkExpr e1 - addLongIdentWithDots idents - walkExpr e2 - | SynExpr.Set (e1, e2, _) -> - walkExpr e1 - walkExpr e2 - | SynExpr.DotIndexedGet (e, args, _, _) -> - walkExpr e - List.iter walkIndexerArg args - | SynExpr.DotIndexedSet (e1, args, e2, _, _, _) -> - walkExpr e1 - List.iter walkIndexerArg args - walkExpr e2 - | SynExpr.NamedIndexedPropertySet (ident, e1, e2, _) -> - addLongIdentWithDots ident - List.iter walkExpr [e1; e2] - | SynExpr.DotNamedIndexedPropertySet (e1, ident, e2, e3, _) -> - addLongIdentWithDots ident - List.iter walkExpr [e1; e2; e3] - | SynExpr.JoinIn (e1, _, e2, _) -> List.iter walkExpr [e1; e2] - | SynExpr.LetOrUseBang (_, _, _, pat, e1, es, e2, _) -> - walkPat pat - walkExpr e1 - for (_,_,_,patAndBang,eAndBang,_) in es do - walkPat patAndBang - walkExpr eAndBang - walkExpr e2 - | SynExpr.TraitCall (ts, sign, e, _) -> - List.iter walkTypar ts - walkMemberSig sign - walkExpr e - | SynExpr.Const (SynConst.Measure(_, m), _) -> walkMeasure m - | _ -> () - - and walkMeasure = function - | SynMeasure.Product (m1, m2, _) - | SynMeasure.Divide (m1, m2, _) -> walkMeasure m1; walkMeasure m2 - | SynMeasure.Named (longIdent, _) -> addLongIdent longIdent - | SynMeasure.Seq (ms, _) -> List.iter walkMeasure ms - | SynMeasure.Power (m, _, _) -> walkMeasure m - | SynMeasure.Var (ty, _) -> walkTypar ty - | SynMeasure.One - | SynMeasure.Anon _ -> () - - and walkSimplePat = function - | SynSimplePat.Attrib (pat, Attributes attrs, _) -> - walkSimplePat pat - List.iter walkAttribute attrs - | SynSimplePat.Typed(pat, t, _) -> - walkSimplePat pat - walkType t - | _ -> () - - and walkField (SynField.Field(Attributes attrs, _, _, t, _, _, _, _)) = - List.iter walkAttribute attrs - walkType t - - and walkValSig (SynValSig.ValSpfn(Attributes attrs, _, _, t, SynValInfo(argInfos, argInfo), _, _, _, _, _, _)) = - List.iter walkAttribute attrs - walkType t - argInfo :: (argInfos |> List.concat) - |> List.collect (fun (SynArgInfo(Attributes attrs, _, _)) -> attrs) - |> List.iter walkAttribute - - and walkMemberSig = function - | SynMemberSig.Inherit (t, _) - | SynMemberSig.Interface(t, _) -> walkType t - | SynMemberSig.Member(vs, _, _) -> walkValSig vs - | SynMemberSig.ValField(f, _) -> walkField f - | SynMemberSig.NestedType(SynTypeDefnSig.TypeDefnSig (info, repr, memberSigs, _), _) -> - let isTypeExtensionOrAlias = - match repr with - | SynTypeDefnSigRepr.Simple(SynTypeDefnSimpleRepr.TypeAbbrev _, _) - | SynTypeDefnSigRepr.ObjectModel(SynTypeDefnKind.TyconAbbrev, _, _) - | SynTypeDefnSigRepr.ObjectModel(SynTypeDefnKind.TyconAugmentation, _, _) -> true - | _ -> false - walkComponentInfo isTypeExtensionOrAlias info - walkTypeDefnSigRepr repr - List.iter walkMemberSig memberSigs - - and walkMember memb = - match memb with - | SynMemberDefn.AbstractSlot (valSig, _, _) -> walkValSig valSig - | SynMemberDefn.Member (binding, _) -> walkBinding binding - | SynMemberDefn.ImplicitCtor (_, Attributes attrs, SynSimplePats.SimplePats(simplePats, _), _, _, _) -> - List.iter walkAttribute attrs - List.iter walkSimplePat simplePats - | SynMemberDefn.ImplicitInherit (t, e, _, _) -> walkType t; walkExpr e - | SynMemberDefn.LetBindings (bindings, _, _, _) -> List.iter walkBinding bindings - | SynMemberDefn.Interface (t, members, _) -> - walkType t - members |> Option.iter (List.iter walkMember) - | SynMemberDefn.Inherit (t, _, _) -> walkType t - | SynMemberDefn.ValField (field, _) -> walkField field - | SynMemberDefn.NestedType (tdef, _, _) -> walkTypeDefn tdef - | SynMemberDefn.AutoProperty (Attributes attrs, _, _, t, _, _, _, _, e, _, _) -> - List.iter walkAttribute attrs - Option.iter walkType t - walkExpr e - | _ -> () - - and walkEnumCase (EnumCase(Attributes attrs, _, _, _, _)) = List.iter walkAttribute attrs - - and walkUnionCaseType = function - | SynUnionCaseType.UnionCaseFields fields -> List.iter walkField fields - | SynUnionCaseType.UnionCaseFullType (t, _) -> walkType t - - and walkUnionCase (SynUnionCase.UnionCase (Attributes attrs, _, t, _, _, _)) = - List.iter walkAttribute attrs - walkUnionCaseType t - - and walkTypeDefnSimple = function - | SynTypeDefnSimpleRepr.Enum (cases, _) -> List.iter walkEnumCase cases - | SynTypeDefnSimpleRepr.Union (_, cases, _) -> List.iter walkUnionCase cases - | SynTypeDefnSimpleRepr.Record (_, fields, _) -> List.iter walkField fields - | SynTypeDefnSimpleRepr.TypeAbbrev (_, t, _) -> walkType t - | _ -> () - - and walkComponentInfo isTypeExtensionOrAlias (ComponentInfo(Attributes attrs, typars, constraints, longIdent, _, _, _, _)) = - List.iter walkAttribute attrs - List.iter walkTyparDecl typars - List.iter walkTypeConstraint constraints - if isTypeExtensionOrAlias then - addLongIdent longIdent - - and walkTypeDefnRepr = function - | SynTypeDefnRepr.ObjectModel (_, defns, _) -> List.iter walkMember defns - | SynTypeDefnRepr.Simple(defn, _) -> walkTypeDefnSimple defn - | SynTypeDefnRepr.Exception _ -> () - - and walkTypeDefnSigRepr = function - | SynTypeDefnSigRepr.ObjectModel (_, defns, _) -> List.iter walkMemberSig defns - | SynTypeDefnSigRepr.Simple(defn, _) -> walkTypeDefnSimple defn - | SynTypeDefnSigRepr.Exception _ -> () - - and walkTypeDefn (TypeDefn (info, repr, members, _)) = - let isTypeExtensionOrAlias = - match repr with - | SynTypeDefnRepr.ObjectModel (SynTypeDefnKind.TyconAugmentation, _, _) - | SynTypeDefnRepr.ObjectModel (SynTypeDefnKind.TyconAbbrev, _, _) - | SynTypeDefnRepr.Simple (SynTypeDefnSimpleRepr.TypeAbbrev _, _) -> true - | _ -> false - walkComponentInfo isTypeExtensionOrAlias info - walkTypeDefnRepr repr - List.iter walkMember members - - and walkSynModuleDecl (decl: SynModuleDecl) = - match decl with - | SynModuleDecl.NamespaceFragment fragment -> walkSynModuleOrNamespace fragment - | SynModuleDecl.NestedModule (info, _, modules, _, _) -> - walkComponentInfo false info - List.iter walkSynModuleDecl modules - | SynModuleDecl.Let (_, bindings, _) -> List.iter walkBinding bindings - | SynModuleDecl.DoExpr (_, expr, _) -> walkExpr expr - | SynModuleDecl.Types (types, _) -> List.iter walkTypeDefn types - | SynModuleDecl.Attributes (Attributes attrs, _) -> List.iter walkAttribute attrs - | _ -> () - - match input with - | Some (ParsedInput.ImplFile input) -> - walkImplFileInput input - | _ -> () - //debug "%A" idents - upcast identsByEndPos - - let getLongIdentAt ast pos = - let idents = getLongIdents (Some ast) - match idents.TryGetValue pos with - | true, idents -> Some idents - | _ -> None - - type Scope = - { Idents: Idents - Kind: ScopeKind } - - let tryFindNearestPointAndModules (currentLine: int) (ast: ParsedInput) (insertionPoint: OpenStatementInsertionPoint) = - // We ignore all diagnostics during this operation - // - // Based on an initial review, no diagnostics should be generated. However the code should be checked more closely. - use _ignoreAllDiagnostics = new ErrorScope() - - let mutable result = None - let mutable ns = None - let modules = ResizeArray() - - let inline longIdentToIdents ident = ident |> Seq.map string |> Seq.toArray - - let addModule (longIdent: LongIdent, range: range) = - modules.Add - { Idents = longIdentToIdents longIdent - Range = range } - - let doRange kind (scope: LongIdent) line col = - if line <= currentLine then - match result, insertionPoint with - | None, _ -> - result <- Some ({ Idents = longIdentToIdents scope; Kind = kind }, mkPos line col, false) - | Some (_, _, true), _ -> () - | Some (oldScope, oldPos, false), OpenStatementInsertionPoint.TopLevel when kind <> OpenDeclaration -> - result <- Some (oldScope, oldPos, true) - | Some (oldScope, oldPos, _), _ -> - match kind, oldScope.Kind with - | (Namespace | NestedModule | TopModule), OpenDeclaration - | _ when oldPos.Line <= line -> - result <- - Some ({ Idents = - match scope with - | [] -> oldScope.Idents - | _ -> longIdentToIdents scope - Kind = kind }, - mkPos line col, - false) - | _ -> () - - let getMinColumn decls = - match decls with - | [] -> None - | firstDecl :: _ -> - match firstDecl with - | SynModuleDecl.NestedModule (_, _, _, _, r) - | SynModuleDecl.Let (_, _, r) - | SynModuleDecl.DoExpr (_, _, r) - | SynModuleDecl.Types (_, r) - | SynModuleDecl.Exception (_, r) - | SynModuleDecl.Open (_, r) - | SynModuleDecl.HashDirective (_, r) -> Some r - | _ -> None - |> Option.map (fun r -> r.StartColumn) - - - let rec walkImplFileInput (ParsedImplFileInput (modules = moduleOrNamespaceList)) = - List.iter (walkSynModuleOrNamespace []) moduleOrNamespaceList - - and walkSynModuleOrNamespace (parent: LongIdent) (SynModuleOrNamespace(ident, _, kind, decls, _, _, _, range)) = - if range.EndLine >= currentLine then - let isModule = kind.IsModule - match isModule, parent, ident with - | false, _, _ -> ns <- Some (longIdentToIdents ident) - // top level module with "inlined" namespace like Ns1.Ns2.TopModule - | true, [], _f :: _s :: _ -> - let ident = longIdentToIdents ident - ns <- Some (ident.[0..ident.Length - 2]) - | _ -> () - - let fullIdent = parent @ ident - - let startLine = - if isModule then range.StartLine - else range.StartLine - 1 - - let scopeKind = - match isModule, parent with - | true, [] -> TopModule - | true, _ -> NestedModule - | _ -> Namespace - - doRange scopeKind fullIdent startLine range.StartColumn - addModule (fullIdent, range) - List.iter (walkSynModuleDecl fullIdent) decls - - and walkSynModuleDecl (parent: LongIdent) (decl: SynModuleDecl) = - match decl with - | SynModuleDecl.NamespaceFragment fragment -> walkSynModuleOrNamespace parent fragment - | SynModuleDecl.NestedModule(ComponentInfo(_, _, _, ident, _, _, _, _), _, decls, _, range) -> - let fullIdent = parent @ ident - addModule (fullIdent, range) - if range.EndLine >= currentLine then - let moduleBodyIndentation = getMinColumn decls |> Option.defaultValue (range.StartColumn + 4) - doRange NestedModule fullIdent range.StartLine moduleBodyIndentation - List.iter (walkSynModuleDecl fullIdent) decls - | SynModuleDecl.Open (_, range) -> doRange OpenDeclaration [] range.EndLine (range.StartColumn - 5) - | SynModuleDecl.HashDirective (_, range) -> doRange HashDirective [] range.EndLine range.StartColumn - | _ -> () - - match ast with - | ParsedInput.SigFile _ -> () - | ParsedInput.ImplFile input -> walkImplFileInput input - - let res = - result - |> Option.map (fun (scope, pos, _) -> - let ns = ns |> Option.map longIdentToIdents - scope, ns, mkPos (pos.Line + 1) pos.Column) - - let modules = - modules - |> Seq.filter (fun x -> x.Range.EndLine < currentLine) - |> Seq.sortBy (fun x -> -x.Idents.Length) - |> Seq.toList - - res, modules - - let findBestPositionToInsertOpenDeclaration (modules: Module list) scope pos (entity: Idents) = - match modules |> List.filter (fun x -> entity |> Array.startsWith x.Idents) with - | [] -> { ScopeKind = scope.Kind; Pos = pos } - | m :: _ -> - //printfn "All modules: %A, Win module: %A" modules m - let scopeKind = - match scope.Kind with - | TopModule -> NestedModule - | x -> x - { ScopeKind = scopeKind - Pos = mkPos (Line.fromZ m.Range.EndLine) m.Range.StartColumn } - - let tryFindInsertionContext (currentLine: int) (ast: ParsedInput) (partiallyQualifiedName: MaybeUnresolvedIdents) (insertionPoint: OpenStatementInsertionPoint) = - let res, modules = tryFindNearestPointAndModules currentLine ast insertionPoint - // CLEANUP: does this really need to be a partial application with pre-computation? Can this be made more explicit? - fun (requiresQualifiedAccessParent: Idents option, autoOpenParent: Idents option, entityNamespace: Idents option, entity: Idents) -> - - // We ignore all diagnostics during this operation - // - // Based on an initial review, no diagnostics should be generated. However the code should be checked more closely. - use _ignoreAllDiagnostics = new ErrorScope() - match res with - | None -> [||] - | Some (scope, ns, pos) -> - Entity.tryCreate(ns, scope.Idents, partiallyQualifiedName, requiresQualifiedAccessParent, autoOpenParent, entityNamespace, entity) - |> Array.map (fun e -> e, findBestPositionToInsertOpenDeclaration modules scope pos entity) - - /// Corrects insertion line number based on kind of scope and text surrounding the insertion point. - let adjustInsertionPoint (getLineStr: int -> string) ctx = - let line = - match ctx.ScopeKind with - | ScopeKind.TopModule -> - if ctx.Pos.Line > 1 then - // it's an implicit module without any open declarations - let line = getLineStr (ctx.Pos.Line - 2) - let isImplicitTopLevelModule = - not (line.StartsWithOrdinal("module") && not (line.EndsWithOrdinal("="))) - if isImplicitTopLevelModule then 1 else ctx.Pos.Line - else 1 - | ScopeKind.Namespace -> - // for namespaces the start line is start line of the first nested entity - if ctx.Pos.Line > 1 then - [0..ctx.Pos.Line - 1] - |> List.mapi (fun i line -> i, getLineStr line) - |> List.tryPick (fun (i, lineStr) -> - if lineStr.StartsWithOrdinal("namespace") then Some i - else None) - |> function - // move to the next line below "namespace" and convert it to F# 1-based line number - | Some line -> line + 2 - | None -> ctx.Pos.Line - else 1 - | _ -> ctx.Pos.Line - - mkPos line ctx.Pos.Column - - let findNearestPointToInsertOpenDeclaration (currentLine: int) (ast: ParsedInput) (entity: Idents) (insertionPoint: OpenStatementInsertionPoint) = - match tryFindNearestPointAndModules currentLine ast insertionPoint with - | Some (scope, _, point), modules -> - findBestPositionToInsertOpenDeclaration modules scope point entity - | _ -> - // we failed to find insertion point because ast is empty for some reason, return top left point in this case - { ScopeKind = ScopeKind.TopModule - Pos = mkPos 1 0 } diff --git a/src/fsharp/service/ServiceAssemblyContent.fsi b/src/fsharp/service/ServiceAssemblyContent.fsi index b0cebf4c1ee..fef61a669e6 100644 --- a/src/fsharp/service/ServiceAssemblyContent.fsi +++ b/src/fsharp/service/ServiceAssemblyContent.fsi @@ -1,34 +1,19 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices - +namespace FSharp.Compiler.EditorServices open System -open System.Collections.Generic - -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Symbols /// Assembly content type. +[] type public AssemblyContentType = /// Public assembly content only. | Public /// All assembly content. | Full -/// Short identifier, i.e. an identifier that contains no dots. -type public ShortIdent = string - -/// An array of `ShortIdent`. -type public Idents = ShortIdent[] - -/// `ShortIdent` with a flag indicating if it's resolved in some scope. -type public MaybeUnresolvedIdent = - { Ident: ShortIdent; Resolved: bool } - -/// Array of `MaybeUnresolvedIdent`. -type public MaybeUnresolvedIdents = MaybeUnresolvedIdent[] - /// Entity lookup type. [] type public LookupType = @@ -48,19 +33,19 @@ type public AssemblySymbol = /// Entity name parts with removed module suffixes (Ns.M1Module.M2Module.M3.entity -> Ns.M1.M2.M3.entity) /// and replaced compiled names with display names (FSharpEntity.DisplayName, FSharpValueOrFunction.DisplayName). /// Note: *all* parts are cleaned, not the last one. - CleanedIdents: Idents + CleanedIdents: ShortIdents /// `FSharpEntity.Namespace`. - Namespace: Idents option + Namespace: ShortIdents option /// The most narrative parent module that has `RequireQualifiedAccess` attribute. - NearestRequireQualifiedAccessParent: Idents option + NearestRequireQualifiedAccessParent: ShortIdents option /// Parent module that has the largest scope and has `RequireQualifiedAccess` attribute. - TopRequireQualifiedAccessParent: Idents option + TopRequireQualifiedAccessParent: ShortIdents option /// Parent module that has `AutoOpen` attribute. - AutoOpenParent: Idents option + AutoOpenParent: ShortIdents option Symbol: FSharpSymbol @@ -104,112 +89,17 @@ type public EntityCache = /// Performs an operation on the cache in thread safe manner. member Locking : (IAssemblyContentCache -> 'T) -> 'T -/// Long identifier (i.e. it may contain dots). -type public StringLongIdent = string - -/// Helper data structure representing a symbol, suitable for implementing unresolved identifiers resolution code fixes. -type public Entity = - { - /// Full name, relative to the current scope. - FullRelativeName: StringLongIdent - - /// Ident parts needed to append to the current ident to make it resolvable in current scope. - Qualifier: StringLongIdent - - /// Namespace that is needed to open to make the entity resolvable in the current scope. - Namespace: StringLongIdent option - - /// Full display name (i.e. last ident plus modules with `RequireQualifiedAccess` attribute prefixed). - Name: StringLongIdent - - /// Last part of the entity's full name. - LastIdent: string - } - /// Provides assembly content. -module public AssemblyContentProvider = +module public AssemblyContent = /// Given a `FSharpAssemblySignature`, returns assembly content. - val getAssemblySignatureContent : AssemblyContentType -> FSharpAssemblySignature -> AssemblySymbol list + val GetAssemblySignatureContent : AssemblyContentType -> FSharpAssemblySignature -> AssemblySymbol list /// Returns (possibly cached) assembly content. - val getAssemblyContent : + val GetAssemblyContent : withCache: ((IAssemblyContentCache -> AssemblySymbol list) -> AssemblySymbol list) -> contentType: AssemblyContentType -> fileName: string option -> assemblies: FSharpAssembly list -> AssemblySymbol list -/// Kind of lexical scope. -type public ScopeKind = - | Namespace - | TopModule - | NestedModule - | OpenDeclaration - | HashDirective - -/// Insert open namespace context. -type public InsertContext = - { - /// Current scope kind. - ScopeKind: ScopeKind - - /// Current position (F# compiler line number). - Pos: pos - } - -/// Where open statements should be added. -type public OpenStatementInsertionPoint = - | TopLevel - | Nearest - -/// Parse AST helpers. -module public ParsedInput = - - /// Returns `InsertContext` based on current position and symbol idents. - val tryFindInsertionContext : - currentLine: int -> - ast: ParsedInput -> MaybeUnresolvedIdents -> - insertionPoint: OpenStatementInsertionPoint -> - (( (* requiresQualifiedAccessParent: *) Idents option * (* autoOpenParent: *) Idents option * (* entityNamespace *) Idents option * (* entity: *) Idents) -> (Entity * InsertContext)[]) - - /// Returns `InsertContext` based on current position and symbol idents. - val findNearestPointToInsertOpenDeclaration : currentLine: int -> ast: ParsedInput -> entity: Idents -> insertionPoint: OpenStatementInsertionPoint -> InsertContext - - /// Returns long identifier at position. - val getLongIdentAt : ast: ParsedInput -> pos: pos -> LongIdent option - - /// Corrects insertion line number based on kind of scope and text surrounding the insertion point. - val adjustInsertionPoint : getLineStr: (int -> string) -> ctx: InsertContext -> pos - -[] -module public Extensions = - type FSharpEntity with - /// Safe version of `FullName`. - member TryGetFullName : unit -> string option - - /// Safe version of `DisplayName`. - member TryGetFullDisplayName : unit -> string option - - /// Safe version of `CompiledName`. - member TryGetFullCompiledName : unit -> string option - - /// Public nested entities (methods, functions, values, nested modules). - member PublicNestedEntities : seq - - /// Safe version of `GetMembersFunctionsAndValues`. - member TryGetMembersFunctionsAndValues : IList - - type FSharpMemberOrFunctionOrValue with - /// Safe version of `FullType`. - member FullTypeSafe : FSharpType option - - /// Full name with last part replaced with display name. - member TryGetFullDisplayName : unit -> string option - - /// Full operator compiled name. - member TryGetFullCompiledOperatorNameIdents : unit -> Idents option - - type FSharpAssemblySignature with - /// Safe version of `Entities`. - member TryGetEntities : unit -> seq \ No newline at end of file diff --git a/src/fsharp/service/ServiceCompilerDiagnostics.fs b/src/fsharp/service/ServiceCompilerDiagnostics.fs index 008cb327bb0..abbedea37d2 100644 --- a/src/fsharp/service/ServiceCompilerDiagnostics.fs +++ b/src/fsharp/service/ServiceCompilerDiagnostics.fs @@ -1,14 +1,26 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.Diagnostics -type DiagnosticKind = +open FSharp.Compiler.ErrorResolutionHints + +[] +type FSharpDiagnosticKind = | AddIndexerDot | ReplaceWithSuggestion of suggestion:string [] module CompilerDiagnostics = - let getErrorMessage diagnosticKind = + + let GetErrorMessage diagnosticKind = match diagnosticKind with - | AddIndexerDot -> FSComp.SR.addIndexerDot() - | ReplaceWithSuggestion s -> FSComp.SR.replaceWithSuggestion(s) \ No newline at end of file + | FSharpDiagnosticKind.AddIndexerDot -> FSComp.SR.addIndexerDot() + | FSharpDiagnosticKind.ReplaceWithSuggestion s -> FSComp.SR.replaceWithSuggestion(s) + + let GetSuggestedNames (suggestionsF: FSharp.Compiler.ErrorLogger.Suggestions) (unresolvedIdentifier: string) = + let buffer = SuggestionBuffer(unresolvedIdentifier) + if buffer.Disabled then + Seq.empty + else + suggestionsF buffer.Add + buffer :> seq \ No newline at end of file diff --git a/src/fsharp/service/ServiceCompilerDiagnostics.fsi b/src/fsharp/service/ServiceCompilerDiagnostics.fsi index 4916b2c2f6b..fae4c0277b8 100644 --- a/src/fsharp/service/ServiceCompilerDiagnostics.fsi +++ b/src/fsharp/service/ServiceCompilerDiagnostics.fsi @@ -1,13 +1,19 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.Diagnostics /// Supported kinds of diagnostics by this service. -type DiagnosticKind = +[] +type FSharpDiagnosticKind = | AddIndexerDot | ReplaceWithSuggestion of suggestion:string /// Exposes compiler diagnostic error messages. module CompilerDiagnostics = + /// Given a DiagnosticKind, returns the string representing the error message for that diagnostic. - val getErrorMessage: diagnosticKind: DiagnosticKind -> string \ No newline at end of file + val GetErrorMessage: diagnosticKind: FSharpDiagnosticKind -> string + + /// Given a set of names, uses and a string representing an unresolved identifier, + /// returns a list of suggested names if there are any feasible candidates. + val GetSuggestedNames: suggestionsF: ((string -> unit) -> unit) -> unresolvedIdentifier: string -> seq diff --git a/src/fsharp/service/ServiceConstants.fs b/src/fsharp/service/ServiceConstants.fs index 1628a277a35..b93d0abdab6 100644 --- a/src/fsharp/service/ServiceConstants.fs +++ b/src/fsharp/service/ServiceConstants.fs @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.EditorServices [] type FSharpGlyph = diff --git a/src/fsharp/service/ServiceDeclarationLists.fs b/src/fsharp/service/ServiceDeclarationLists.fs index 587b31f1e41..744c51c17cb 100644 --- a/src/fsharp/service/ServiceDeclarationLists.fs +++ b/src/fsharp/service/ServiceDeclarationLists.fs @@ -5,27 +5,463 @@ // type checking and intellisense-like environment-reporting. //-------------------------------------------------------------------------- -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.EditorServices +open System.Collections.Immutable +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AccessibilityLogic +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.EditorServices open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Infos open FSharp.Compiler.InfoReader -open FSharp.Compiler.Layout -open FSharp.Compiler.Layout.TaggedTextOps -open FSharp.Compiler.Lib open FSharp.Compiler.NameResolution -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Range +open FSharp.Compiler.Symbols +open FSharp.Compiler.Symbols.SymbolHelpers +open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Layout +open FSharp.Compiler.Text.LayoutRender +open FSharp.Compiler.Text.TaggedText open FSharp.Compiler.TypedTree +open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps +/// A single data tip display element +[] +type ToolTipElementData = + { MainDescription: TaggedText[] + XmlDoc: FSharpXmlDoc + TypeMapping: TaggedText[] list + Remarks: TaggedText[] option + ParamName : string option } + + static member Create(layout, xml, ?typeMapping, ?paramName, ?remarks) = + { MainDescription=layout; XmlDoc=xml; TypeMapping=defaultArg typeMapping []; ParamName=paramName; Remarks=remarks } + +/// A single data tip display element +[] +type ToolTipElement = + | None + + /// A single type, method, etc with comment. May represent a method overload group. + | Group of elements: ToolTipElementData list + + /// An error occurred formatting this element + | CompositionError of errorText: string + + static member Single(layout, xml, ?typeMapping, ?paramName, ?remarks) = + Group [ ToolTipElementData.Create(layout, xml, ?typeMapping=typeMapping, ?paramName=paramName, ?remarks=remarks) ] + +/// Information for building a data tip box. +type ToolTipText = + /// A list of data tip elements to display. + | ToolTipText of ToolTipElement list + +[] +type CompletionItemKind = + | Field + | Property + | Method of isExtension : bool + | Event + | Argument + | CustomOperation + | Other + +type UnresolvedSymbol = + { FullName: string + DisplayName: string + Namespace: string[] } + +type CompletionItem = + { ItemWithInst: ItemWithInst + Kind: CompletionItemKind + IsOwnMember: bool + MinorPriority: int + Type: TyconRef option + Unresolved: UnresolvedSymbol option } + member x.Item = x.ItemWithInst.Item + +[] +module DeclarationListHelpers = + let mutable ToolTipFault = None + + /// Generate the structured tooltip for a method info + let FormatOverloadsToList (infoReader: InfoReader) m denv (item: ItemWithInst) minfos : ToolTipElement = + ToolTipFault |> Option.iter (fun msg -> + let exn = Error((0, msg), range.Zero) + let ph = PhasedDiagnostic.Create(exn, BuildPhase.TypeCheck) + simulateError ph) + + let layouts = + [ for minfo in minfos -> + let prettyTyparInst, layout = NicePrint.prettyLayoutOfMethInfoFreeStyle infoReader m denv item.TyparInst minfo + let xml = GetXmlCommentForMethInfoItem infoReader m item.Item minfo + let tpsL = FormatTyparMapping denv prettyTyparInst + let layout = LayoutRender.toArray layout + let tpsL = List.map LayoutRender.toArray tpsL + ToolTipElementData.Create(layout, xml, tpsL) ] + + ToolTipElement.Group layouts + + let CompletionItemDisplayPartialEquality g = + let itemComparer = ItemDisplayPartialEquality g + + { new IPartialEqualityComparer with + member x.InEqualityRelation item = itemComparer.InEqualityRelation item.Item + member x.Equals(item1, item2) = itemComparer.Equals(item1.Item, item2.Item) + member x.GetHashCode item = itemComparer.GetHashCode(item.Item) } + + /// Remove all duplicate items + let RemoveDuplicateCompletionItems g items = + if isNil items then items else + items |> IPartialEqualityComparer.partialDistinctBy (CompletionItemDisplayPartialEquality g) + + /// Filter types that are explicitly suppressed from the IntelliSense (such as uppercase "FSharpList", "Option", etc.) + let RemoveExplicitlySuppressedCompletionItems (g: TcGlobals) (items: CompletionItem list) = + items |> List.filter (fun item -> not (IsExplicitlySuppressed g item.Item)) + + // Remove items containing the same module references + let RemoveDuplicateModuleRefs modrefs = + modrefs |> IPartialEqualityComparer.partialDistinctBy + { new IPartialEqualityComparer with + member x.InEqualityRelation _ = true + member x.Equals(item1, item2) = (fullDisplayTextOfModRef item1 = fullDisplayTextOfModRef item2) + member x.GetHashCode item = hash item.Stamp } + + let OutputFullName isListItem ppF fnF r = + // Only display full names in quick info, not declaration lists or method lists + if not isListItem then + match ppF r with + | None -> emptyL + | Some _ -> wordL (tagText (FSComp.SR.typeInfoFullName())) ^^ RightL.colon ^^ (fnF r) + else emptyL + + let pubpathOfValRef (v: ValRef) = v.PublicPath + + let pubpathOfTyconRef (x: TyconRef) = x.PublicPath + + /// Output the quick info information of a language item + let rec FormatItemDescriptionToToolTipElement isListItem (infoReader: InfoReader) m denv (item: ItemWithInst) = + let g = infoReader.g + let amap = infoReader.amap + let denv = SimplerDisplayEnv denv + let xml = GetXmlCommentForItem infoReader m item.Item + match item.Item with + | Item.ImplicitOp(_, { contents = Some(TraitConstraintSln.FSMethSln(_, vref, _)) }) -> + // operator with solution + FormatItemDescriptionToToolTipElement isListItem infoReader m denv { item with Item = Item.Value vref } + + | Item.Value vref | Item.CustomBuilder (_, vref) -> + let prettyTyparInst, resL = NicePrint.layoutQualifiedValOrMember denv infoReader item.TyparInst vref + let remarks = OutputFullName isListItem pubpathOfValRef fullDisplayTextOfValRefAsLayout vref + let tpsL = FormatTyparMapping denv prettyTyparInst + let tpsL = List.map LayoutRender.toArray tpsL + let resL = LayoutRender.toArray resL + let remarks = LayoutRender.toArray remarks + ToolTipElement.Single(resL, xml, tpsL, remarks=remarks) + + // Union tags (constructors) + | Item.UnionCase(ucinfo, _) -> + let uc = ucinfo.UnionCase + let rty = generalizedTyconRef ucinfo.TyconRef + let recd = uc.RecdFields + let layout = + wordL (tagText (FSComp.SR.typeInfoUnionCase())) ^^ + NicePrint.layoutTyconRef denv ucinfo.TyconRef ^^ + sepL (tagPunctuation ".") ^^ + wordL (tagUnionCase (DecompileOpName uc.Id.idText) |> mkNav uc.DefinitionRange) ^^ + RightL.colon ^^ + (if List.isEmpty recd then emptyL else NicePrint.layoutUnionCases denv infoReader ucinfo.TyconRef recd ^^ WordL.arrow) ^^ + NicePrint.layoutType denv rty + let layout = LayoutRender.toArray layout + ToolTipElement.Single (layout, xml) + + // Active pattern tag inside the declaration (result) + | Item.ActivePatternResult(apinfo, ty, idx, _) -> + let items = apinfo.ActiveTags + let layout = + wordL (tagText ((FSComp.SR.typeInfoActivePatternResult()))) ^^ + wordL (tagActivePatternResult (List.item idx items) |> mkNav apinfo.Range) ^^ + RightL.colon ^^ + NicePrint.layoutType denv ty + let layout = LayoutRender.toArray layout + ToolTipElement.Single (layout, xml) + + // Active pattern tags + | Item.ActivePatternCase apref -> + let v = apref.ActivePatternVal + // Format the type parameters to get e.g. ('a -> 'a) rather than ('?1234 -> '?1234) + let tau = v.TauType + // REVIEW: use _cxs here + let (prettyTyparInst, ptau), _cxs = PrettyTypes.PrettifyInstAndType denv.g (item.TyparInst, tau) + let remarks = OutputFullName isListItem pubpathOfValRef fullDisplayTextOfValRefAsLayout v + let layout = + wordL (tagText (FSComp.SR.typeInfoActiveRecognizer())) ^^ + wordL (tagActivePatternCase apref.Name |> mkNav v.DefinitionRange) ^^ + RightL.colon ^^ + NicePrint.layoutType denv ptau + + let tpsL = FormatTyparMapping denv prettyTyparInst + + let layout = LayoutRender.toArray layout + let tpsL = List.map LayoutRender.toArray tpsL + let remarks = LayoutRender.toArray remarks + ToolTipElement.Single (layout, xml, tpsL, remarks=remarks) + + // F# exception names + | Item.ExnCase ecref -> + let layout = NicePrint.layoutExnDef denv infoReader ecref + let remarks = OutputFullName isListItem pubpathOfTyconRef fullDisplayTextOfExnRefAsLayout ecref + let layout = LayoutRender.toArray layout + let remarks = LayoutRender.toArray remarks + ToolTipElement.Single (layout, xml, remarks=remarks) + + | Item.RecdField rfinfo when rfinfo.TyconRef.IsExceptionDecl -> + let ty, _ = PrettyTypes.PrettifyType g rfinfo.FieldType + let id = rfinfo.RecdField.Id + let layout = + wordL (tagText (FSComp.SR.typeInfoArgument())) ^^ + wordL (tagParameter id.idText) ^^ + RightL.colon ^^ + NicePrint.layoutType denv ty + let layout = LayoutRender.toArray layout + ToolTipElement.Single (layout, xml, paramName = id.idText) + + // F# record field names + | Item.RecdField rfinfo -> + let rfield = rfinfo.RecdField + let ty, _cxs = PrettyTypes.PrettifyType g rfinfo.FieldType + let layout = + NicePrint.layoutTyconRef denv rfinfo.TyconRef ^^ + SepL.dot ^^ + wordL (tagRecordField (DecompileOpName rfield.Name) |> mkNav rfield.DefinitionRange) ^^ + RightL.colon ^^ + NicePrint.layoutType denv ty ^^ + ( + match rfinfo.LiteralValue with + | None -> emptyL + | Some lit -> try WordL.equals ^^ NicePrint.layoutConst denv.g ty lit with _ -> emptyL + ) + let layout = LayoutRender.toArray layout + ToolTipElement.Single (layout, xml) + + | Item.UnionCaseField (ucinfo, fieldIndex) -> + let rfield = ucinfo.UnionCase.GetFieldByIndex(fieldIndex) + let fieldTy, _ = PrettyTypes.PrettifyType g rfield.rfield_type + let id = rfield.Id + let layout = + wordL (tagText (FSComp.SR.typeInfoArgument())) ^^ + wordL (tagParameter id.idText) ^^ + RightL.colon ^^ + NicePrint.layoutType denv fieldTy + let layout = LayoutRender.toArray layout + ToolTipElement.Single (layout, xml, paramName = id.idText) + + // Not used + | Item.NewDef id -> + let layout = + wordL (tagText (FSComp.SR.typeInfoPatternVariable())) ^^ + wordL (tagUnknownEntity id.idText) + let layout = LayoutRender.toArray layout + ToolTipElement.Single (layout, xml) + + // .NET fields + | Item.ILField finfo -> + let layout = + wordL (tagText (FSComp.SR.typeInfoField())) ^^ + NicePrint.layoutType denv finfo.ApparentEnclosingAppType ^^ + SepL.dot ^^ + wordL (tagField finfo.FieldName) ^^ + RightL.colon ^^ + NicePrint.layoutType denv (finfo.FieldType(amap, m)) ^^ + ( + match finfo.LiteralValue with + | None -> emptyL + | Some v -> + WordL.equals ^^ + try NicePrint.layoutConst denv.g (finfo.FieldType(infoReader.amap, m)) (CheckExpressions.TcFieldInit m v) with _ -> emptyL + ) + let layout = LayoutRender.toArray layout + ToolTipElement.Single (layout, xml) + + // .NET events + | Item.Event einfo -> + let rty = PropTypOfEventInfo infoReader m AccessibleFromSomewhere einfo + let rty, _cxs = PrettyTypes.PrettifyType g rty + let layout = + wordL (tagText (FSComp.SR.typeInfoEvent())) ^^ + NicePrint.layoutTyconRef denv einfo.ApparentEnclosingTyconRef ^^ + SepL.dot ^^ + wordL (tagEvent einfo.EventName) ^^ + RightL.colon ^^ + NicePrint.layoutType denv rty + let layout = LayoutRender.toArray layout + ToolTipElement.Single (layout, xml) + + // F# and .NET properties + | Item.Property(_, pinfo :: _) -> + let layout = NicePrint.prettyLayoutOfPropInfoFreeStyle g amap m denv pinfo + let layout = LayoutRender.toArray layout + ToolTipElement.Single (layout, xml) + + // Custom operations in queries + | Item.CustomOperation (customOpName, usageText, Some minfo) -> + + // Build 'custom operation: where (bool) + // + // Calls QueryBuilder.Where' + let layout = + wordL (tagText (FSComp.SR.typeInfoCustomOperation())) ^^ + RightL.colon ^^ + ( + match usageText() with + | Some t -> wordL (tagText t) + | None -> + let argTys = ParamNameAndTypesOfUnaryCustomOperation g minfo |> List.map (fun (ParamNameAndType(_, ty)) -> ty) + let argTys, _ = PrettyTypes.PrettifyTypes g argTys + wordL (tagMethod customOpName) ^^ sepListL SepL.space (List.map (fun ty -> LeftL.leftParen ^^ NicePrint.layoutType denv ty ^^ SepL.rightParen) argTys) + ) ^^ + SepL.lineBreak ^^ SepL.lineBreak ^^ + wordL (tagText (FSComp.SR.typeInfoCallsWord())) ^^ + NicePrint.layoutTyconRef denv minfo.ApparentEnclosingTyconRef ^^ + SepL.dot ^^ + wordL (tagMethod minfo.DisplayName) + + let layout = LayoutRender.toArray layout + ToolTipElement.Single (layout, xml) + + // F# constructors and methods + | Item.CtorGroup(_, minfos) + | Item.MethodGroup(_, minfos, _) -> + FormatOverloadsToList infoReader m denv item minfos + + // The 'fake' zero-argument constructors of .NET interfaces. + // This ideally should never appear in intellisense, but we do get here in repros like: + // type IFoo = abstract F : int + // type II = IFoo // remove 'type II = ' and quickly hover over IFoo before it gets squiggled for 'invalid use of interface type' + // and in that case we'll just show the interface type name. + | Item.FakeInterfaceCtor ty -> + let ty, _ = PrettyTypes.PrettifyType g ty + let layout = NicePrint.layoutTyconRef denv (tcrefOfAppTy g ty) + let layout = LayoutRender.toArray layout + ToolTipElement.Single(layout, xml) + + // The 'fake' representation of constructors of .NET delegate types + | Item.DelegateCtor delty -> + let delty, _cxs = PrettyTypes.PrettifyType g delty + let (SigOfFunctionForDelegate(_, _, _, fty)) = GetSigOfFunctionForDelegate infoReader delty m AccessibleFromSomewhere + let layout = + NicePrint.layoutTyconRef denv (tcrefOfAppTy g delty) ^^ + LeftL.leftParen ^^ + NicePrint.layoutType denv fty ^^ + RightL.rightParen + let layout = LayoutRender.toArray layout + ToolTipElement.Single(layout, xml) + + // Types. + | Item.Types(_, ((TType_app(tcref, _)) :: _)) + | Item.UnqualifiedType (tcref :: _) -> + let denv = { denv with + // tooltips are space-constrained, so use shorter names + shortTypeNames = true + // tooltips are space-constrained, so don't include xml doc comments + // on types/members. The doc comments for the actual member will still + // be shown in the tip. + showDocumentation = false } + let layout = NicePrint.layoutTycon denv infoReader AccessibleFromSomewhere m (* width *) tcref.Deref + let remarks = OutputFullName isListItem pubpathOfTyconRef fullDisplayTextOfTyconRefAsLayout tcref + let layout = LayoutRender.toArray layout + let remarks = LayoutRender.toArray remarks + ToolTipElement.Single (layout, xml, remarks=remarks) + + // F# Modules and namespaces + | Item.ModuleOrNamespaces((modref :: _) as modrefs) -> + //let os = StringBuilder() + let modrefs = modrefs |> RemoveDuplicateModuleRefs + let definiteNamespace = modrefs |> List.forall (fun modref -> modref.IsNamespace) + let kind = + if definiteNamespace then FSComp.SR.typeInfoNamespace() + elif modrefs |> List.forall (fun modref -> modref.IsModule) then FSComp.SR.typeInfoModule() + else FSComp.SR.typeInfoNamespaceOrModule() + + let layout = + wordL (tagKeyword kind) ^^ + (if definiteNamespace then tagNamespace (fullDisplayTextOfModRef modref) else (tagModule modref.DemangledModuleOrNamespaceName) + |> mkNav modref.DefinitionRange + |> wordL) + if not definiteNamespace then + let namesToAdd = + ([], modrefs) + ||> Seq.fold (fun st modref -> + match fullDisplayTextOfParentOfModRef modref with + | ValueSome txt -> txt :: st + | _ -> st) + |> Seq.mapi (fun i x -> i, x) + |> Seq.toList + let layout = + layout ^^ + ( + if not (List.isEmpty namesToAdd) then + SepL.lineBreak ^^ + List.fold ( fun s (i, txt) -> + s ^^ + SepL.lineBreak ^^ + wordL (tagText ((if i = 0 then FSComp.SR.typeInfoFromFirst else FSComp.SR.typeInfoFromNext) txt)) + ) emptyL namesToAdd + else + emptyL + ) + let layout = LayoutRender.toArray layout + ToolTipElement.Single (layout, xml) + else + let layout = LayoutRender.toArray layout + ToolTipElement.Single (layout, xml) + + | Item.AnonRecdField(anon, argTys, i, _) -> + let argTy = argTys.[i] + let nm = anon.SortedNames.[i] + let argTy, _ = PrettyTypes.PrettifyType g argTy + let layout = + wordL (tagText (FSComp.SR.typeInfoAnonRecdField())) ^^ + wordL (tagRecordField nm) ^^ + RightL.colon ^^ + NicePrint.layoutType denv argTy + let layout = LayoutRender.toArray layout + ToolTipElement.Single (layout, FSharpXmlDoc.None) + + // Named parameters + | Item.ArgName (id, argTy, _) -> + let argTy, _ = PrettyTypes.PrettifyType g argTy + let layout = + wordL (tagText (FSComp.SR.typeInfoArgument())) ^^ + wordL (tagParameter id.idText) ^^ + RightL.colon ^^ + NicePrint.layoutType denv argTy + let layout = LayoutRender.toArray layout + ToolTipElement.Single (layout, xml, paramName = id.idText) + + | Item.SetterArg (_, item) -> + FormatItemDescriptionToToolTipElement isListItem infoReader m denv (ItemWithNoInst item) + + | _ -> + ToolTipElement.None + + /// Format the structured version of a tooltip for an item + let FormatStructuredDescriptionOfItem isDecl infoReader m denv item = + ErrorScope.Protect m + (fun () -> FormatItemDescriptionToToolTipElement isDecl infoReader m denv item) + (fun err -> ToolTipElement.CompositionError err) + [] /// Represents one parameter for one method (or other item) in a group. -type FSharpMethodGroupItemParameter(name: string, canonicalTypeTextForSorting: string, display: layout, isOptional: bool) = +type MethodGroupItemParameter(name: string, canonicalTypeTextForSorting: string, display: TaggedText[], isOptional: bool) = /// The name of the parameter. member _.ParameterName = name @@ -33,13 +469,9 @@ type FSharpMethodGroupItemParameter(name: string, canonicalTypeTextForSorting: s /// A key that can be used for sorting the parameters, used to help sort overloads. member _.CanonicalTypeTextForSorting = canonicalTypeTextForSorting - /// The structured representation for the parameter including its name, its type and visual indicators of other - /// information such as whether it is optional. - member _.StructuredDisplay = display - /// The text to display for the parameter including its name, its type and visual indicators of other /// information such as whether it is optional. - member _.Display = showL display + member _.Display = display /// Is the parameter optional member _.IsOptional = isOptional @@ -60,34 +492,40 @@ module internal DescriptionListsImpl = NicePrint.stringOfTy denv strippedType let PrettyParamOfRecdField g denv (f: RecdField) = - FSharpMethodGroupItemParameter( + let display = NicePrint.prettyLayoutOfType denv f.FormalType + let display = LayoutRender.toArray display + MethodGroupItemParameter( name = f.Name, canonicalTypeTextForSorting = printCanonicalizedTypeName g denv f.FormalType, // Note: the instantiation of any type parameters is currently incorporated directly into the type // rather than being returned separately. - display = NicePrint.prettyLayoutOfType denv f.FormalType, + display = display, isOptional=false) let PrettyParamOfUnionCaseField g denv isGenerated (i: int) (f: RecdField) = let initial = PrettyParamOfRecdField g denv f let display = if isGenerated i f then - initial.StructuredDisplay + initial.Display else // TODO: in this case ucinst is ignored - it gives the instantiation of the type parameters of // the union type containing this case. - NicePrint.layoutOfParamData denv (ParamData(false, false, false, NotOptional, NoCallerInfo, Some f.Id, ReflectedArgInfo.None, f.FormalType)) - FSharpMethodGroupItemParameter( + let display = NicePrint.layoutOfParamData denv (ParamData(false, false, false, NotOptional, NoCallerInfo, Some f.Id, ReflectedArgInfo.None, f.FormalType)) + LayoutRender.toArray display + + MethodGroupItemParameter( name=initial.ParameterName, canonicalTypeTextForSorting=initial.CanonicalTypeTextForSorting, display=display, isOptional=false) let ParamOfParamData g denv (ParamData(_isParamArrayArg, _isInArg, _isOutArg, optArgInfo, _callerInfo, nmOpt, _reflArgInfo, pty) as paramData) = - FSharpMethodGroupItemParameter( + let display = NicePrint.layoutOfParamData denv paramData + let display = LayoutRender.toArray display + MethodGroupItemParameter( name = (match nmOpt with None -> "" | Some pn -> pn.idText), canonicalTypeTextForSorting = printCanonicalizedTypeName g denv pty, - display = NicePrint.layoutOfParamData denv paramData, + display = display, isOptional=optArgInfo.IsOptional) // TODO this code is similar to NicePrint.fs:formatParamDataToBuffer, refactor or figure out why different? @@ -102,7 +540,7 @@ module internal DescriptionListsImpl = let nm = id.idText // detect parameter type, if ptyOpt is None - this is .NET style optional argument let pty = match ptyOpt with ValueSome x -> x | _ -> pty - (nm, isOptArg, SepL.questionMark ^^ (wordL (TaggedTextOps.tagParameter nm))), pty + (nm, isOptArg, SepL.questionMark ^^ (wordL (TaggedText.tagParameter nm))), pty // Layout an unnamed argument | None, _, _ -> ("", isOptArg, emptyL), pty @@ -112,11 +550,11 @@ module internal DescriptionListsImpl = let prefix = if isParamArrayArg then NicePrint.PrintUtilities.layoutBuiltinAttribute denv denv.g.attrib_ParamArrayAttribute ^^ - wordL (TaggedTextOps.tagParameter nm) ^^ + wordL (TaggedText.tagParameter nm) ^^ RightL.colon //sprintf "%s %s: " (NicePrint.PrintUtilities.layoutBuiltinAttribute denv denv.g.attrib_ParamArrayAttribute |> showL) nm else - wordL (TaggedTextOps.tagParameter nm) ^^ + wordL (TaggedText.tagParameter nm) ^^ RightL.colon //sprintf "%s: " nm (nm, isOptArg, prefix), pty) @@ -129,10 +567,12 @@ module internal DescriptionListsImpl = // Remake the params using the prettified versions let prettyParams = (paramInfo, prettyParamTys, prettyParamTysL) |||> List.map3 (fun (nm, isOptArg, paramPrefix) tau tyL -> - FSharpMethodGroupItemParameter( + let display = paramPrefix ^^ tyL + let display = LayoutRender.toArray display + MethodGroupItemParameter( name = nm, canonicalTypeTextForSorting = printCanonicalizedTypeName g denv tau, - display = paramPrefix ^^ tyL, + display = display, isOptional=isOptArg )) @@ -146,13 +586,13 @@ module internal DescriptionListsImpl = // Remake the params using the prettified versions let parameters = - (prettyParamTys, prettyParamTysL) - ||> List.zip - |> List.map (fun (tau, tyL) -> - FSharpMethodGroupItemParameter( + (prettyParamTys, prettyParamTysL) + ||> List.map2 (fun tau tyL -> + let display = LayoutRender.toArray tyL + MethodGroupItemParameter( name = "", canonicalTypeTextForSorting = printCanonicalizedTypeName g denv tau, - display = tyL, + display = display, isOptional=false )) @@ -174,10 +614,12 @@ module internal DescriptionListsImpl = let spKind = NicePrint.prettyLayoutOfType denv ty let spName = sp.PUntaint((fun sp -> sp.Name), m) let spOpt = sp.PUntaint((fun sp -> sp.IsOptional), m) - FSharpMethodGroupItemParameter( + let display = (if spOpt then SepL.questionMark else emptyL) ^^ wordL (TaggedText.tagParameter spName) ^^ RightL.colon ^^ spKind + let display = LayoutRender.toArray display + MethodGroupItemParameter( name = spName, canonicalTypeTextForSorting = showL spKind, - display = (if spOpt then SepL.questionMark else emptyL) ^^ wordL (TaggedTextOps.tagParameter spName) ^^ RightL.colon ^^ spKind, + display = display, //display = sprintf "%s%s: %s" (if spOpt then "?" else "") spName spKind, isOptional=spOpt)) | _ -> [| |] @@ -185,7 +627,7 @@ module internal DescriptionListsImpl = /// Get all the information about parameters and "prettify" the types by choosing nice type variable /// names. This is similar to the other variations on "show me an item" code. This version is - /// is used when presenting groups of methods (see FSharpMethodGroup). It is possible these different + /// is used when presenting groups of methods (see MethodGroup). It is possible these different /// versions could be better unified. let rec PrettyParamsAndReturnTypeOfItem (infoReader:InfoReader) m denv (item: ItemWithInst) = let amap = infoReader.amap @@ -473,49 +915,51 @@ module internal DescriptionListsImpl = /// An intellisense declaration [] -type FSharpDeclarationListItem(name: string, nameInCode: string, fullName: string, glyph: FSharpGlyph, info, accessibility: FSharpAccessibility option, +type DeclarationListItem(name: string, nameInCode: string, fullName: string, glyph: FSharpGlyph, info, accessibility: FSharpAccessibility, kind: CompletionItemKind, isOwnMember: bool, priority: int, isResolved: bool, namespaceToOpen: string option) = member _.Name = name - member _.NameInCode = nameInCode - member decl.StructuredDescriptionTextAsync = decl.StructuredDescriptionText |> async.Return + member _.NameInCode = nameInCode - member _.StructuredDescriptionText = + member _.Description = match info with | Choice1Of2 (items: CompletionItem list, infoReader, m, denv) -> - FSharpToolTipText(items |> List.map (fun x -> SymbolHelpers.FormatStructuredDescriptionOfItem true infoReader m denv x.ItemWithInst)) + ToolTipText(items |> List.map (fun x -> FormatStructuredDescriptionOfItem true infoReader m denv x.ItemWithInst)) | Choice2Of2 result -> result - member x.DescriptionTextAsync = x.DescriptionText |> async.Return - - member decl.DescriptionText = - decl.StructuredDescriptionText - |> Tooltips.ToFSharpToolTipText - member _.Glyph = glyph + member _.Accessibility = accessibility + member _.Kind = kind + member _.IsOwnMember = isOwnMember + member _.MinorPriority = priority + member _.FullName = fullName + member _.IsResolved = isResolved + member _.NamespaceToOpen = namespaceToOpen /// A table of declarations for Intellisense completion [] -type FSharpDeclarationListInfo(declarations: FSharpDeclarationListItem[], isForType: bool, isError: bool) = +type DeclarationListInfo(declarations: DeclarationListItem[], isForType: bool, isError: bool) = static let fsharpNamespace = [|"Microsoft"; "FSharp"|] member _.Items = declarations + member _.IsForType = isForType + member _.IsError = isError // Make a 'Declarations' object for a set of selected items - static member Create(infoReader:InfoReader, m: range, denv, getAccessibility, items: CompletionItem list, currentNamespace: string[] option, isAttributeApplicationContext: bool) = + static member Create(infoReader:InfoReader, m: range, denv, getAccessibility: (Item -> FSharpAccessibility), items: CompletionItem list, currentNamespace: string[] option, isAttributeApplicationContext: bool) = let g = infoReader.g let isForType = items |> List.exists (fun x -> x.Type.IsSome) - let items = items |> SymbolHelpers.RemoveExplicitlySuppressedCompletionItems g + let items = items |> RemoveExplicitlySuppressedCompletionItems g let tyconRefOptEq tref1 tref2 = match tref1, tref2 with @@ -557,7 +1001,7 @@ type FSharpDeclarationListInfo(declarations: FSharpDeclarationListItem[], isForT // Prefer items from file check results to ones from referenced assemblies via GetAssemblyContent ("all entities") |> List.sortBy (fun x -> x.Unresolved.IsSome) // Remove all duplicates. We've put the types first, so this removes the DelegateCtor and DefaultStructCtor's. - |> SymbolHelpers.RemoveDuplicateCompletionItems g + |> RemoveDuplicateCompletionItems g |> List.groupBy (fun x -> match x.Unresolved with | Some u -> @@ -655,18 +1099,18 @@ type FSharpDeclarationListInfo(declarations: FSharpDeclarationListItem[], isForT | [||] -> None | ns -> Some (System.String.Join(".", ns))) - FSharpDeclarationListItem( + DeclarationListItem( name, nameInCode, fullName, glyph, Choice1Of2 (items, infoReader, m, denv), getAccessibility item.Item, item.Kind, item.IsOwnMember, item.MinorPriority, item.Unresolved.IsNone, namespaceToOpen)) - new FSharpDeclarationListInfo(Array.ofList decls, isForType, false) + new DeclarationListInfo(Array.ofList decls, isForType, false) static member Error message = - new FSharpDeclarationListInfo( - [| FSharpDeclarationListItem("", "", "", FSharpGlyph.Error, Choice2Of2 (FSharpToolTipText [FSharpStructuredToolTipElement.CompositionError message]), - None, CompletionItemKind.Other, false, 0, false, None) |], false, true) + new DeclarationListInfo( + [| DeclarationListItem("", "", "", FSharpGlyph.Error, Choice2Of2 (ToolTipText [ToolTipElement.CompositionError message]), + FSharpAccessibility(taccessPublic), CompletionItemKind.Other, false, 0, false, None) |], false, true) - static member Empty = FSharpDeclarationListInfo([| |], false, false) + static member Empty = DeclarationListInfo([| |], false, false) @@ -674,24 +1118,18 @@ type FSharpDeclarationListInfo(declarations: FSharpDeclarationListItem[], isForT /// a single, non-overloaded item such as union case or a named function value. // Note: instances of this type do not hold any references to any compiler resources. [] -type FSharpMethodGroupItem(description: FSharpToolTipText, xmlDoc: FSharpXmlDoc, - returnType: layout, parameters: FSharpMethodGroupItemParameter[], - hasParameters: bool, hasParamArrayArg: bool, staticParameters: FSharpMethodGroupItemParameter[]) = +type MethodGroupItem(description: ToolTipText, xmlDoc: FSharpXmlDoc, + returnType: TaggedText[], parameters: MethodGroupItemParameter[], + hasParameters: bool, hasParamArrayArg: bool, staticParameters: MethodGroupItemParameter[]) = - /// The structured description representation for the method (or other item) - member _.StructuredDescription = description - - /// The formatted description text for the method (or other item) - member _.Description = Tooltips.ToFSharpToolTipText description + /// The description representation for the method (or other item) + member _.Description = description /// The documentation for the item member _.XmlDoc = xmlDoc - /// The The structured description representation for the method (or other item) - member _.StructuredReturnTypeText = returnType - - /// The formatted type text for the method (or other item) - member _.ReturnTypeText = showL returnType + /// The return type text for the method (or other item) + member _.ReturnTypeText = returnType /// The parameters of the method in the overload set member _.Parameters = parameters @@ -711,11 +1149,11 @@ type FSharpMethodGroupItem(description: FSharpToolTipText, xmlDoc: FShar // Note: this type does not hold any strong references to any compiler resources, nor does evaluating any of the properties execute any // code on the compiler thread. [] -type FSharpMethodGroup( name: string, unsortedMethods: FSharpMethodGroupItem[] ) = +type MethodGroup( name: string, unsortedMethods: MethodGroupItem[] ) = // BUG 413009 : [ParameterInfo] takes about 3 seconds to move from one overload parameter to another // cache allows to avoid recomputing parameterinfo for the same item #if !FX_NO_WEAKTABLE - static let methodOverloadsCache = System.Runtime.CompilerServices.ConditionalWeakTable() + static let methodOverloadsCache = System.Runtime.CompilerServices.ConditionalWeakTable() #endif let methods = @@ -724,7 +1162,7 @@ type FSharpMethodGroup( name: string, unsortedMethods: FSharpMethodGroupItem[] ) |> Array.map (fun meth -> let parms = meth.Parameters if parms.Length = 1 && parms.[0].CanonicalTypeTextForSorting="Microsoft.FSharp.Core.Unit" then - FSharpMethodGroupItem(meth.StructuredDescription, meth.XmlDoc, meth.StructuredReturnTypeText, [||], true, meth.HasParamArrayArg, meth.StaticParameters) + MethodGroupItem(meth.Description, meth.XmlDoc, meth.ReturnTypeText, [||], true, meth.HasParamArrayArg, meth.StaticParameters) else meth) // Fix the order of methods, to be stable for unit testing. @@ -738,7 +1176,7 @@ type FSharpMethodGroup( name: string, unsortedMethods: FSharpMethodGroupItem[] ) static member Create (infoReader: InfoReader, m, denv, items:ItemWithInst list) = let g = infoReader.g - if isNil items then new FSharpMethodGroup("", [| |]) else + if isNil items then new MethodGroup("", [| |]) else let name = items.Head.Item.DisplayName let methods = @@ -757,7 +1195,7 @@ type FSharpMethodGroup( name: string, unsortedMethods: FSharpMethodGroupItem[] ) (fun () -> PrettyParamsAndReturnTypeOfItem infoReader m denv { item with Item = flatItem }) (fun err -> [], wordL (tagText err)) - let description = FSharpToolTipText [SymbolHelpers.FormatStructuredDescriptionOfItem true infoReader m denv { item with Item = flatItem }] + let description = ToolTipText [FormatStructuredDescriptionOfItem true infoReader m denv { item with Item = flatItem }] let hasParamArrayArg = match flatItem with @@ -772,7 +1210,8 @@ type FSharpMethodGroup( name: string, unsortedMethods: FSharpMethodGroupItem[] ) #endif | _ -> true - FSharpMethodGroupItem( + let prettyRetTyL = LayoutRender.toArray prettyRetTyL + MethodGroupItem( description = description, returnType = prettyRetTyL, xmlDoc = SymbolHelpers.GetXmlCommentForItem infoReader m flatItem, @@ -791,7 +1230,7 @@ type FSharpMethodGroup( name: string, unsortedMethods: FSharpMethodGroupItem[] ) yield! methods |] - new FSharpMethodGroup(name, methods) + new MethodGroup(name, methods) diff --git a/src/fsharp/service/ServiceDeclarationLists.fsi b/src/fsharp/service/ServiceDeclarationLists.fsi index 68a5093d6d3..37c543c64e6 100644 --- a/src/fsharp/service/ServiceDeclarationLists.fsi +++ b/src/fsharp/service/ServiceDeclarationLists.fsi @@ -1,52 +1,123 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// API for declaration lists and method overload lists -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.EditorServices -open System open FSharp.Compiler.NameResolution open FSharp.Compiler.InfoReader -open FSharp.Compiler.Range +open FSharp.Compiler.Symbols +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text +open FSharp.Compiler.Text +open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps +/// A single data tip display element +[] +type public ToolTipElementData = + { + MainDescription: TaggedText[] + + XmlDoc: FSharpXmlDoc + + /// typar instantiation text, to go after xml + TypeMapping: TaggedText[] list + + /// Extra text, goes at the end + Remarks: TaggedText[] option + + /// Parameter name + ParamName: string option + } + +/// A single tool tip display element +// +// Note: instances of this type do not hold any references to any compiler resources. +[] +type public ToolTipElement = + | None + + /// A single type, method, etc with comment. May represent a method overload group. + | Group of elements: ToolTipElementData list + + /// An error occurred formatting this element + | CompositionError of errorText: string + + static member Single: layout: TaggedText[] * xml: FSharpXmlDoc * ?typeMapping: TaggedText[] list * ?paramName: string * ?remarks: TaggedText[] -> ToolTipElement + +/// Information for building a tool tip box. +// +// Note: instances of this type do not hold any references to any compiler resources. +type public ToolTipText = + + /// A list of data tip elements to display. + | ToolTipText of ToolTipElement list + +[] +type public CompletionItemKind = + | Field + | Property + | Method of isExtension: bool + | Event + | Argument + | CustomOperation + | Other + +type public UnresolvedSymbol = + { + FullName: string + + DisplayName: string + + Namespace: string[] + } + +type internal CompletionItem = + { + ItemWithInst: ItemWithInst + + Kind: CompletionItemKind + + IsOwnMember: bool + + MinorPriority: int + + Type: TyconRef option + + Unresolved: UnresolvedSymbol option + } + member Item: Item + [] /// Represents a declaration in F# source code, with information attached ready for display by an editor. /// Returned by GetDeclarations. // // Note: this type holds a weak reference to compiler resources. -type public FSharpDeclarationListItem = +type public DeclarationListItem = /// Get the display name for the declaration. - member Name : string + member Name: string /// Get the name for the declaration as it's presented in source code. - member NameInCode : string - - [] - member StructuredDescriptionTextAsync : Async - - /// Get the description text. - member StructuredDescriptionText : FSharpStructuredToolTipText - - [] - member DescriptionTextAsync : Async + member NameInCode: string - member DescriptionText : FSharpToolTipText + /// Get the description + member Description: ToolTipText - member Glyph : FSharpGlyph + member Glyph: FSharpGlyph - member Accessibility : FSharpAccessibility option + member Accessibility: FSharpAccessibility - member Kind : CompletionItemKind + member Kind: CompletionItemKind - member IsOwnMember : bool + member IsOwnMember: bool - member MinorPriority : int + member MinorPriority: int - member FullName : string + member FullName: string - member IsResolved : bool + member IsResolved: bool - member NamespaceToOpen : string option + member NamespaceToOpen: string option [] @@ -54,24 +125,32 @@ type public FSharpDeclarationListItem = /// Returned by GetDeclarations. // // Note: this type holds a weak reference to compiler resources. -type public FSharpDeclarationListInfo = +type public DeclarationListInfo = - member Items : FSharpDeclarationListItem[] + member Items: DeclarationListItem[] - member IsForType : bool + member IsForType: bool - member IsError : bool + member IsError: bool // Implementation details used by other code in the compiler - static member internal Create : infoReader:InfoReader * m:range * denv:DisplayEnv * getAccessibility:(Item -> FSharpAccessibility option) * items:CompletionItem list * currentNamespace:string[] option * isAttributeApplicationContext:bool -> FSharpDeclarationListInfo + static member internal Create: + infoReader:InfoReader * + m:range * + denv:DisplayEnv * + getAccessibility:(Item -> FSharpAccessibility) * + items:CompletionItem list * + currentNamespace:string[] option * + isAttributeApplicationContext:bool + -> DeclarationListInfo - static member internal Error : message:string -> FSharpDeclarationListInfo + static member internal Error: message:string -> DeclarationListInfo - static member Empty : FSharpDeclarationListInfo + static member Empty: DeclarationListInfo /// Represents one parameter for one method (or other item) in a group. [] -type public FSharpMethodGroupItemParameter = +type public MethodGroupItemParameter = /// The name of the parameter. member ParameterName: string @@ -79,13 +158,9 @@ type public FSharpMethodGroupItemParameter = /// A key that can be used for sorting the parameters, used to help sort overloads. member CanonicalTypeTextForSorting: string - /// The structured representation for the parameter including its name, its type and visual indicators of other + /// The representation for the parameter including its name, its type and visual indicators of other /// information such as whether it is optional. - member StructuredDisplay: Layout - - /// The text to display for the parameter including its name, its type and visual indicators of other - /// information such as whether it is optional. - member Display: string + member Display: TaggedText[] /// Is the parameter optional member IsOptional: bool @@ -93,25 +168,19 @@ type public FSharpMethodGroupItemParameter = /// Represents one method (or other item) in a method group. The item may represent either a method or /// a single, non-overloaded item such as union case or a named function value. [] -type public FSharpMethodGroupItem = +type public MethodGroupItem = /// The documentation for the item - member XmlDoc : FSharpXmlDoc - - /// The structured description representation for the method (or other item) - member StructuredDescription : FSharpStructuredToolTipText - - /// The formatted description text for the method (or other item) - member Description : FSharpToolTipText + member XmlDoc: FSharpXmlDoc - /// The The structured description representation for the method (or other item) - member StructuredReturnTypeText: Layout + /// The description representation for the method (or other item) + member Description: ToolTipText - /// The formatted type text for the method (or other item) - member ReturnTypeText: string + /// The tagged text for the return type for the method (or other item) + member ReturnTypeText: TaggedText[] /// The parameters of the method in the overload set - member Parameters: FSharpMethodGroupItemParameter[] + member Parameters: MethodGroupItemParameter[] /// Does the method support an arguments list? This is always true except for static type instantiations like TP<42,"foo">. member HasParameters: bool @@ -120,19 +189,28 @@ type public FSharpMethodGroupItem = member HasParamArrayArg: bool /// Does the type name or method support a static arguments list, like TP<42,"foo"> or conn.CreateCommand<42, "foo">(arg1, arg2)? - member StaticParameters: FSharpMethodGroupItemParameter[] + member StaticParameters: MethodGroupItemParameter[] /// Represents a group of methods (or other items) returned by GetMethods. [] -type public FSharpMethodGroup = +type public MethodGroup = - internal new : string * FSharpMethodGroupItem[] -> FSharpMethodGroup + internal new: string * MethodGroupItem[] -> MethodGroup /// The shared name of the methods (or other items) in the group member MethodName: string /// The methods (or other items) in the group - member Methods: FSharpMethodGroupItem[] + member Methods: MethodGroupItem[] + + static member internal Create: InfoReader * range * DisplayEnv * ItemWithInst list -> MethodGroup + +module internal DeclarationListHelpers = + val FormatStructuredDescriptionOfItem: isDecl:bool -> InfoReader -> range -> DisplayEnv -> ItemWithInst -> ToolTipElement + + val RemoveDuplicateCompletionItems: TcGlobals -> CompletionItem list -> CompletionItem list + + val RemoveExplicitlySuppressedCompletionItems: TcGlobals -> CompletionItem list -> CompletionItem list - static member internal Create : InfoReader * range * DisplayEnv * ItemWithInst list -> FSharpMethodGroup + val mutable ToolTipFault: string option diff --git a/src/fsharp/service/ServiceErrorResolutionHints.fs b/src/fsharp/service/ServiceErrorResolutionHints.fs index 79b4ad79e34..2998bdf4746 100644 --- a/src/fsharp/service/ServiceErrorResolutionHints.fs +++ b/src/fsharp/service/ServiceErrorResolutionHints.fs @@ -1,15 +1,8 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.Diagnostics open FSharp.Compiler.ErrorResolutionHints module ErrorResolutionHints = - let getSuggestedNames (suggestionsF: FSharp.Compiler.ErrorLogger.Suggestions) (unresolvedIdentifier: string) = - let buffer = SuggestionBuffer(unresolvedIdentifier) - if buffer.Disabled then - Seq.empty - else - suggestionsF buffer.Add - buffer :> seq \ No newline at end of file diff --git a/src/fsharp/service/ServiceErrorResolutionHints.fsi b/src/fsharp/service/ServiceErrorResolutionHints.fsi index 0d6b45fdcb6..4c9192bdf5e 100644 --- a/src/fsharp/service/ServiceErrorResolutionHints.fsi +++ b/src/fsharp/service/ServiceErrorResolutionHints.fsi @@ -1,10 +1,10 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.Diagnostics /// Exposes the string distance algorithm used to suggest names for mistyped identifiers. module ErrorResolutionHints = /// Given a set of names, uses and a string representing an unresolved identifier, /// returns a list of suggested names if there are any feasible candidates. - val getSuggestedNames: suggestionsF: ((string -> unit) -> unit) -> unresolvedIdentifier: string -> seq + val GetSuggestedNames: suggestionsF: ((string -> unit) -> unit) -> unresolvedIdentifier: string -> seq diff --git a/src/fsharp/service/ServiceInterfaceStubGenerator.fs b/src/fsharp/service/ServiceInterfaceStubGenerator.fs index e303bb39b75..9798191055d 100644 --- a/src/fsharp/service/ServiceInterfaceStubGenerator.fs +++ b/src/fsharp/service/ServiceInterfaceStubGenerator.fs @@ -1,18 +1,19 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.EditorServices open System open System.Diagnostics - -open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.Range -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.SyntaxTree +open Internal.Utilities.Library +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Symbols +open FSharp.Compiler.Symbols.FSharpSymbolPatterns +open FSharp.Compiler.Syntax open FSharp.Compiler.SyntaxTreeOps - -#if !FX_NO_INDENTED_TEXT_WRITER +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Tokenization + [] module internal CodeGenerationUtils = open System.IO @@ -22,33 +23,33 @@ module internal CodeGenerationUtils = let stringWriter = new StringWriter() let indentWriter = new IndentedTextWriter(stringWriter, " ") - member __.Write(s: string) = + member _.Write(s: string) = indentWriter.Write("{0}", s) - member __.Write(s: string, [] objs: obj []) = + member _.Write(s: string, [] objs: obj []) = indentWriter.Write(s, objs) - member __.WriteLine(s: string) = + member _.WriteLine(s: string) = indentWriter.WriteLine("{0}", s) - member __.WriteLine(s: string, [] objs: obj []) = + member _.WriteLine(s: string, [] objs: obj []) = indentWriter.WriteLine(s, objs) member x.WriteBlankLines count = for _ in 0 .. count - 1 do x.WriteLine "" - member __.Indent i = + member _.Indent i = indentWriter.Indent <- indentWriter.Indent + i - member __.Unindent i = + member _.Unindent i = indentWriter.Indent <- max 0 (indentWriter.Indent - i) - member __.Dump() = + member _.Dump() = indentWriter.InnerWriter.ToString() interface IDisposable with - member __.Dispose() = + member _.Dispose() = stringWriter.Dispose() indentWriter.Dispose() @@ -70,7 +71,7 @@ module internal CodeGenerationUtils = /// Represent environment where a captured identifier should be renamed type NamesWithIndices = Map> - let keywordSet = set PrettyNaming.KeywordNames + let keywordSet = set FSharpKeywords.KeywordNames /// Rename a given argument if the identifier has been used let normalizeArgName (namesWithIndices: NamesWithIndices) nm = @@ -103,14 +104,16 @@ module internal CodeGenerationUtils = /// Capture information about an interface in ASTs [] type InterfaceData = - | Interface of SynType * SynMemberDefns option - | ObjExpr of SynType * SynBinding list + | Interface of interfaceType: SynType * memberDefns: SynMemberDefns option + | ObjExpr of objType: SynType * bindings: SynBinding list + member x.Range = match x with | InterfaceData.Interface(ty, _) -> ty.Range | InterfaceData.ObjExpr(ty, _) -> ty.Range + member x.TypeParameters = match x with | InterfaceData.Interface(StripParenTypes ty, _) @@ -124,11 +127,11 @@ type InterfaceData = sprintf "- %s" s let rec (|TypeIdent|_|) = function - | SynType.Var(SynTypar.Typar(s, req, _), _) -> + | SynType.Var(SynTypar(s, req, _), _) -> match req with - | NoStaticReq -> + | TyparStaticReq.None -> Some ("'" + s.idText) - | HeadTypeStaticReq -> + | TyparStaticReq.HeadType -> Some ("^" + s.idText) | SynType.LongIdent(LongIdentWithDots(xs, _)) -> xs |> Seq.map (fun x -> x.idText) |> String.concat "." |> Some @@ -175,18 +178,25 @@ module InterfaceStubGenerator = type internal Context = { Writer: ColumnIndentedTextWriter + /// Map generic types to specific instances for specialized interface implementation TypeInstantations: Map + /// Data for interface instantiation ArgInstantiations: (FSharpGenericParameter * FSharpType) seq + /// Indentation inside method bodies Indentation: int + /// Object identifier of the interface e.g. 'x', 'this', '__', etc. ObjectIdent: string + /// A list of lines represents skeleton of each member MethodBody: string [] + /// Context in order to display types in the short form DisplayContext: FSharpDisplayContext + } // Adapt from MetadataFormat module in FSharp.Formatting @@ -222,7 +232,7 @@ module InterfaceStubGenerator = let nm, namesWithIndices = normalizeArgName namesWithIndices nm // Detect an optional argument - let isOptionalArg = Symbol.hasAttribute arg.Attributes + let isOptionalArg = arg.HasAttribute() let argName = if isOptionalArg then "?" + nm else nm (if hasTypeAnnotation && argName <> "()" then argName + ": " + formatType ctx arg.Type @@ -299,7 +309,7 @@ module InterfaceStubGenerator = else displayName let internal isEventMember (m: FSharpMemberOrFunctionOrValue) = - m.IsEvent || Symbol.hasAttribute m.Attributes + m.IsEvent || m.HasAttribute() let internal formatMember (ctx: Context) m verboseMode = let getParamArgs (argInfos: FSharpParameter list list) (ctx: Context) (v: FSharpMemberOrFunctionOrValue) = @@ -331,7 +341,7 @@ module InterfaceStubGenerator = | _, true, _, name -> name + parArgs // Ordinary functions or values | false, _, _, name when - not (Symbol.hasAttribute v.ApparentEnclosingEntity.Attributes) -> + not (v.ApparentEnclosingEntity.HasAttribute()) -> name + " " + parArgs // Ordinary static members or things (?) that require fully qualified access | _, _, _, name -> name + parArgs @@ -485,10 +495,10 @@ module InterfaceStubGenerator = |> Seq.distinct /// Get members in the decreasing order of inheritance chain - let getInterfaceMembers (e: FSharpEntity) = + let GetInterfaceMembers (entity: FSharpEntity) = seq { - for (iface, instantiations) in getInterfaces e do - yield! iface.TryGetMembersFunctionsAndValues + for (iface, instantiations) in getInterfaces entity do + yield! iface.TryGetMembersFunctionsAndValues() |> Seq.choose (fun m -> // Use this hack when FCS doesn't return enough information on .NET properties and events if m.IsProperty || m.IsEventAddMethod || m.IsEventRemoveMethod then @@ -497,8 +507,8 @@ module InterfaceStubGenerator = } /// Check whether an interface is empty - let hasNoInterfaceMember e = - getInterfaceMembers e |> Seq.isEmpty + let HasNoInterfaceMember entity = + GetInterfaceMembers entity |> Seq.isEmpty let internal (|LongIdentPattern|_|) = function | SynPat.LongIdent(LongIdentWithDots(xs, _), _, _, _, _, _) -> @@ -512,14 +522,14 @@ module InterfaceStubGenerator = // On merged properties (consisting both getters and setters), they have the same range values, // so we use 'get_' and 'set_' prefix to ensure corresponding symbols are retrieved correctly. let internal (|MemberNameAndRange|_|) = function - | Binding(_access, _bindingKind, _isInline, _isMutable, _attrs, _xmldoc, SynValData(Some mf, _, _), LongIdentPattern(name, range), - _retTy, _expr, _bindingRange, _seqPoint) when mf.MemberKind = MemberKind.PropertyGet -> + | SynBinding(_access, _bindingKind, _isInline, _isMutable, _attrs, _xmldoc, SynValData(Some mf, _, _), LongIdentPattern(name, range), + _retTy, _expr, _bindingRange, _seqPoint) when mf.MemberKind = SynMemberKind.PropertyGet -> if name.StartsWithOrdinal("get_") then Some(name, range) else Some("get_" + name, range) - | Binding(_access, _bindingKind, _isInline, _isMutable, _attrs, _xmldoc, SynValData(Some mf, _, _), LongIdentPattern(name, range), - _retTy, _expr, _bindingRange, _seqPoint) when mf.MemberKind = MemberKind.PropertySet -> + | SynBinding(_access, _bindingKind, _isInline, _isMutable, _attrs, _xmldoc, SynValData(Some mf, _, _), LongIdentPattern(name, range), + _retTy, _expr, _bindingRange, _seqPoint) when mf.MemberKind = SynMemberKind.PropertySet -> if name.StartsWithOrdinal("set_") then Some(name, range) else Some("set_" + name, range) - | Binding(_access, _bindingKind, _isInline, _isMutable, _attrs, _xmldoc, _valData, LongIdentPattern(name, range), - _retTy, _expr, _bindingRange, _seqPoint) -> + | SynBinding(_access, _bindingKind, _isInline, _isMutable, _attrs, _xmldoc, _valData, LongIdentPattern(name, range), + _retTy, _expr, _bindingRange, _seqPoint) -> Some(name, range) | _ -> None @@ -527,7 +537,8 @@ module InterfaceStubGenerator = /// Get associated member names and ranges /// In case of properties, intrinsic ranges might not be correct for the purpose of getting /// positions of 'member', which indicate the indentation for generating new members - let getMemberNameAndRanges = function + let GetMemberNameAndRanges interfaceData = + match interfaceData with | InterfaceData.Interface(_, None) -> [] | InterfaceData.Interface(_, Some memberDefns) -> @@ -549,7 +560,7 @@ module InterfaceStubGenerator = /// (1) Crack ASTs to get member names and their associated ranges /// (2) Check symbols of those members based on ranges /// (3) If any symbol found, capture its member signature - let getImplementedMemberSignatures (getMemberByLocation: string * range -> FSharpSymbolUse option) displayContext interfaceData = + let GetImplementedMemberSignatures (getMemberByLocation: string * range -> FSharpSymbolUse option) displayContext interfaceData = let formatMemberSignature (symbolUse: FSharpSymbolUse) = match symbolUse.Symbol with | :? FSharpMemberOrFunctionOrValue as m -> @@ -568,7 +579,7 @@ module InterfaceStubGenerator = None async { let symbolUses = - getMemberNameAndRanges interfaceData + GetMemberNameAndRanges interfaceData |> List.toArray |> Array.map getMemberByLocation return symbolUses |> Array.choose (Option.bind formatMemberSignature >> Option.map String.Concat) @@ -576,14 +587,14 @@ module InterfaceStubGenerator = } /// Check whether an entity is an interface or type abbreviation of an interface - let rec isInterface (e: FSharpEntity) = - e.IsInterface || (e.IsFSharpAbbreviation && isInterface e.AbbreviatedType.TypeDefinition) + let rec IsInterface (entity: FSharpEntity) = + entity.IsInterface || (entity.IsFSharpAbbreviation && IsInterface entity.AbbreviatedType.TypeDefinition) /// Generate stub implementation of an interface at a start column - let formatInterface startColumn indentation (typeInstances: string []) objectIdent + let FormatInterface startColumn indentation (typeInstances: string []) objectIdent (methodBody: string) (displayContext: FSharpDisplayContext) excludedMemberSignatures (e: FSharpEntity) verboseMode = - Debug.Assert(isInterface e, "The entity should be an interface.") + Debug.Assert(IsInterface e, "The entity should be an interface.") let lines = String.getLines methodBody use writer = new ColumnIndentedTextWriter() let typeParams = Seq.map getTypeParameterName e.GenericParameters @@ -604,7 +615,7 @@ module InterfaceStubGenerator = let ctx = { Writer = writer; TypeInstantations = instantiations; ArgInstantiations = Seq.empty; Indentation = indentation; ObjectIdent = objectIdent; MethodBody = lines; DisplayContext = displayContext } let missingMembers = - getInterfaceMembers e + GetInterfaceMembers e |> Seq.groupBy (fun (m, insts) -> match m with | _ when isEventMember m -> @@ -668,7 +679,7 @@ module InterfaceStubGenerator = writer.Dump() /// Find corresponding interface declaration at a given position - let tryFindInterfaceDeclaration (pos: pos) (parsedInput: ParsedInput) = + let TryFindInterfaceDeclaration (pos: pos) (parsedInput: ParsedInput) = let rec walkImplFileInput (ParsedImplFileInput (modules = moduleOrNamespaceList)) = List.tryPick walkSynModuleOrNamespace moduleOrNamespaceList @@ -702,7 +713,7 @@ module InterfaceStubGenerator = | SynModuleDecl.Open _ -> None - and walkSynTypeDefn(TypeDefn(_componentInfo, representation, members, range)) = + and walkSynTypeDefn(SynTypeDefn(_componentInfo, representation, members, _, range)) = if not <| rangeContainsPos range pos then None else @@ -747,7 +758,7 @@ module InterfaceStubGenerator = | SynMemberDefn.Inherit _ -> None | SynMemberDefn.ImplicitInherit (_, expr, _, _) -> walkExpr expr - and walkBinding (Binding(_access, _bindingKind, _isInline, _isMutable, _attrs, _xmldoc, _valData, _headPat, _retTy, expr, _bindingRange, _seqPoint)) = + and walkBinding (SynBinding(_access, _bindingKind, _isInline, _isMutable, _attrs, _xmldoc, _valData, _headPat, _retTy, expr, _bindingRange, _seqPoint)) = walkExpr expr and walkExpr expr = @@ -782,7 +793,7 @@ module InterfaceStubGenerator = if rangeContainsPos ty.Range pos then Some (InterfaceData.ObjExpr(ty, binds)) else - ifaces |> List.tryPick (fun (InterfaceImpl(ty, binds, range)) -> + ifaces |> List.tryPick (fun (SynInterfaceImpl(ty, binds, range)) -> if rangeContainsPos range pos then Some (InterfaceData.ObjExpr(ty, binds)) else None) @@ -806,10 +817,10 @@ module InterfaceStubGenerator = walkExpr synExpr | SynExpr.MatchLambda (_isExnMatch, _argm, synMatchClauseList, _spBind, _wholem) -> - synMatchClauseList |> List.tryPick (fun (Clause(_, _, e, _, _)) -> walkExpr e) + synMatchClauseList |> List.tryPick (fun (SynMatchClause(_, _, e, _, _)) -> walkExpr e) | SynExpr.Match (_sequencePointInfoForBinding, synExpr, synMatchClauseList, _range) -> walkExpr synExpr - |> Option.orElse (synMatchClauseList |> List.tryPick (fun (Clause(_, _, e, _, _)) -> walkExpr e)) + |> Option.orElse (synMatchClauseList |> List.tryPick (fun (SynMatchClause(_, _, e, _, _)) -> walkExpr e)) | SynExpr.Lazy (synExpr, _range) -> walkExpr synExpr @@ -927,4 +938,3 @@ module InterfaceStubGenerator = None | ParsedInput.ImplFile input -> walkImplFileInput input -#endif diff --git a/src/fsharp/service/ServiceInterfaceStubGenerator.fsi b/src/fsharp/service/ServiceInterfaceStubGenerator.fsi index 8d22896fdd3..c75748f962a 100644 --- a/src/fsharp/service/ServiceInterfaceStubGenerator.fsi +++ b/src/fsharp/service/ServiceInterfaceStubGenerator.fsi @@ -1,41 +1,43 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.EditorServices + +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Symbols +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text -open FSharp.Compiler.Range -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.SyntaxTree - -#if !FX_NO_INDENTED_TEXT_WRITER /// Capture information about an interface in ASTs [] type InterfaceData = - | Interface of SynType * SynMemberDefns option - | ObjExpr of SynType * SynBinding list - member Range : range - member TypeParameters : string[] + | Interface of interfaceType: SynType * memberDefns: SynMemberDefns option + | ObjExpr of objType: SynType * bindings: SynBinding list + + member Range: range + + member TypeParameters: string[] module InterfaceStubGenerator = /// Get members in the decreasing order of inheritance chain - val getInterfaceMembers : FSharpEntity -> seq> + val GetInterfaceMembers: entity: FSharpEntity -> seq> /// Check whether an interface is empty - val hasNoInterfaceMember : FSharpEntity -> bool + val HasNoInterfaceMember: entity: FSharpEntity -> bool - /// Get associated member names and ranges + /// Get associated member names and ranges. /// In case of properties, intrinsic ranges might not be correct for the purpose of getting /// positions of 'member', which indicate the indentation for generating new members - val getMemberNameAndRanges : InterfaceData -> (string * range) list + val GetMemberNameAndRanges: interfaceData: InterfaceData -> (string * range) list - val getImplementedMemberSignatures : getMemberByLocation: (string * range -> FSharpSymbolUse option) -> FSharpDisplayContext -> InterfaceData -> Async> + /// Get interface member signatures + val GetImplementedMemberSignatures: getMemberByLocation: (string * range -> FSharpSymbolUse option) -> FSharpDisplayContext -> InterfaceData -> Async> /// Check whether an entity is an interface or type abbreviation of an interface - val isInterface : FSharpEntity -> bool + val IsInterface: entity: FSharpEntity -> bool /// Generate stub implementation of an interface at a start column - val formatInterface : startColumn: int -> indentation: int -> typeInstances: string [] -> objectIdent: string -> methodBody: string -> displayContext: FSharpDisplayContext -> excludedMemberSignatures : Set -> FSharpEntity -> verboseMode : bool -> string + val FormatInterface: startColumn: int -> indentation: int -> typeInstances: string [] -> objectIdent: string -> methodBody: string -> displayContext: FSharpDisplayContext -> excludedMemberSignatures: Set -> FSharpEntity -> verboseMode: bool -> string /// Find corresponding interface declaration at a given position - val tryFindInterfaceDeclaration: pos -> parsedInput: ParsedInput -> InterfaceData option -#endif + val TryFindInterfaceDeclaration: pos: pos -> parsedInput: ParsedInput -> InterfaceData option diff --git a/src/fsharp/service/ServiceLexing.fs b/src/fsharp/service/ServiceLexing.fs old mode 100755 new mode 100644 index e868a953c94..b0b66a6f35d --- a/src/fsharp/service/ServiceLexing.fs +++ b/src/fsharp/service/ServiceLexing.fs @@ -1,41 +1,36 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -//---------------------------------------------------------------------------- -// Open up the compiler as an incremental service for lexing. -//-------------------------------------------------------------------------- - -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.Tokenization open System open System.Collections.Generic - +open System.Threading +open FSharp.Compiler.IO +open Internal.Utilities +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.Diagnostics open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features open FSharp.Compiler.Lexhelp -open FSharp.Compiler.Lib -open FSharp.Compiler.ParseAndCheckInputs open FSharp.Compiler.Parser open FSharp.Compiler.ParseHelpers -open FSharp.Compiler.Range - -open Internal.Utilities - -type Position = int * int - -type Range = Position * Position +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Position +open FSharp.Compiler.Text.Range module FSharpTokenTag = let Identifier = tagOfToken (IDENT "a") - let String = tagOfToken (STRING ("a", LexCont.Default)) + let String = tagOfToken (STRING ("a", SynStringKind.Regular, LexCont.Default)) let IDENT = tagOfToken (IDENT "a") + let HASH_IDENT = tagOfToken (HASH_IDENT "a") let STRING = String - let INTERP_STRING_BEGIN_END = tagOfToken (INTERP_STRING_BEGIN_END ("a", LexCont.Default)) - let INTERP_STRING_BEGIN_PART = tagOfToken (INTERP_STRING_BEGIN_PART ("a", LexCont.Default)) + let INTERP_STRING_BEGIN_END = tagOfToken (INTERP_STRING_BEGIN_END ("a", SynStringKind.Regular, LexCont.Default)) + let INTERP_STRING_BEGIN_PART = tagOfToken (INTERP_STRING_BEGIN_PART ("a", SynStringKind.Regular, LexCont.Default)) let INTERP_STRING_PART = tagOfToken (INTERP_STRING_PART ("a", LexCont.Default)) let INTERP_STRING_END = tagOfToken (INTERP_STRING_END ("a", LexCont.Default)) let LPAREN = tagOfToken LPAREN @@ -173,6 +168,7 @@ module internal TokenClassifications = let tokenInfo token = match token with + | HASH_IDENT s | IDENT s -> if s.Length <= 0 then System.Diagnostics.Debug.Assert(false, "BUG: Received zero length IDENT token.") @@ -374,15 +370,15 @@ module internal LexerStateEncoding = | COMMENT cont | LINE_COMMENT cont | STRING_TEXT cont - | EOF cont - | INTERP_STRING_BEGIN_PART (_, cont) + | EOF cont + | INTERP_STRING_BEGIN_PART (_, _, cont) | INTERP_STRING_PART (_, cont) - | INTERP_STRING_BEGIN_END (_, cont) + | INTERP_STRING_BEGIN_END (_, _, cont) | INTERP_STRING_END (_, cont) | LBRACE cont | RBRACE cont - | BYTEARRAY (_, cont) - | STRING (_, cont) -> cont + | BYTEARRAY (_, _, cont) + | STRING (_, _, cont) -> cont | _ -> prevLexcont // Note that this will discard all lexcont state, including the ifdefStack. @@ -400,7 +396,7 @@ module internal LexerStateEncoding = + hardwhiteNumBits + ifdefstackCountNumBits + ifdefstackNumBits - + stringKindBits + + stringKindBits + nestingBits <= 64) let lexstateStart = 0 @@ -429,13 +425,13 @@ module internal LexerStateEncoding = (int64 state <<< lexstateStart) &&& lexstateMask let encodeStringStyle kind = - match kind with + match kind with | LexerStringStyle.SingleQuote -> 0 | LexerStringStyle.Verbatim -> 1 | LexerStringStyle.TripleQuote -> 2 let decodeStringStyle kind = - match kind with + match kind with | 0 -> LexerStringStyle.SingleQuote | 1 -> LexerStringStyle.Verbatim | 2 -> LexerStringStyle.TripleQuote @@ -457,12 +453,12 @@ module internal LexerStateEncoding = (if stringKind.IsInterpolatedFirst then 0b001 else 0) let nestingValue = - let tag1, i1, kind1, rest = - match stringNest with + let tag1, i1, kind1, rest = + match stringNest with | [] -> false, 0, 0, [] | (i1, kind1, _)::rest -> true, i1, encodeStringStyle kind1, rest - let tag2, i2, kind2 = - match rest with + let tag2, i2, kind2 = + match rest with | [] -> false, 0, 0 | (i2, kind2, _)::_ -> true, i2, encodeStringStyle kind2 (if tag1 then 0b100000000000 else 0) ||| @@ -518,9 +514,9 @@ module internal LexerStateEncoding = let i2 = ((nestingValue &&& 0b000001110000) >>> 4) let kind1 = ((nestingValue &&& 0b000000001100) >>> 2) let kind2 = ((nestingValue &&& 0b000000000011) >>> 0) - [ if tag1 then + [ if tag1 then i1, decodeStringStyle kind1, range0 - if tag2 then + if tag2 then i2, decodeStringStyle kind2, range0 ] @@ -533,14 +529,14 @@ module internal LexerStateEncoding = | LexCont.IfDefSkip (ifdefs, stringNest, n, m) -> encodeLexCont (FSharpTokenizerColorState.IfDefSkip, int64 n, m.Start, ifdefs, lightStatus, LexerStringKind.String, stringNest) | LexCont.EndLine(ifdefs, stringNest, econt) -> - match econt with - | LexerEndlineContinuation.Skip(n, m) -> + match econt with + | LexerEndlineContinuation.Skip(n, m) -> encodeLexCont (FSharpTokenizerColorState.EndLineThenSkip, int64 n, m.Start, ifdefs, lightStatus, LexerStringKind.String, stringNest) | LexerEndlineContinuation.Token -> encodeLexCont (FSharpTokenizerColorState.EndLineThenToken, 0L, pos0, ifdefs, lightStatus, LexerStringKind.String, stringNest) | LexCont.String (ifdefs, stringNest, style, kind, m) -> - let state = - match style with + let state = + match style with | LexerStringStyle.SingleQuote -> FSharpTokenizerColorState.String | LexerStringStyle.Verbatim -> FSharpTokenizerColorState.VerbatimString | LexerStringStyle.TripleQuote -> FSharpTokenizerColorState.TripleQuoteString @@ -550,15 +546,15 @@ module internal LexerStateEncoding = | LexCont.SingleLineComment (ifdefs, stringNest, n, m) -> encodeLexCont (FSharpTokenizerColorState.SingleLineComment, int64 n, m.Start, ifdefs, lightStatus, LexerStringKind.String, stringNest) | LexCont.StringInComment (ifdefs, stringNest, style, n, m) -> - let state = - match style with + let state = + match style with | LexerStringStyle.SingleQuote -> FSharpTokenizerColorState.StringInComment | LexerStringStyle.Verbatim -> FSharpTokenizerColorState.VerbatimStringInComment | LexerStringStyle.TripleQuote -> FSharpTokenizerColorState.TripleQuoteStringInComment encodeLexCont (state, int64 n, m.Start, ifdefs, lightStatus, LexerStringKind.String, stringNest) | LexCont.MLOnly (ifdefs, stringNest, m) -> encodeLexCont (FSharpTokenizerColorState.CamlOnly, 0L, m.Start, ifdefs, lightStatus, LexerStringKind.String, stringNest) - + let decodeLexInt (state: FSharpTokenizerLexState) = let tag, n1, p1, ifdefs, lightSyntaxStatusInitial, stringKind, stringNest = decodeLexCont state let lexcont = @@ -585,7 +581,7 @@ module internal LexerStateEncoding = LexCont.String (ifdefs, stringNest, LexerStringStyle.Verbatim, stringKind, mkRange "file" p1 p1) | FSharpTokenizerColorState.TripleQuoteString -> LexCont.String (ifdefs, stringNest, LexerStringStyle.TripleQuote, stringKind, mkRange "file" p1 p1) - | FSharpTokenizerColorState.EndLineThenSkip -> + | FSharpTokenizerColorState.EndLineThenSkip -> LexCont.EndLine(ifdefs, stringNest, LexerEndlineContinuation.Skip(n1, mkRange "file" p1 p1)) | FSharpTokenizerColorState.EndLineThenToken -> LexCont.EndLine(ifdefs, stringNest, LexerEndlineContinuation.Token) @@ -613,7 +609,7 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, let skip = false // don't skip whitespace in the lexer let mutable singleLineTokenState = SingleLineTokenState.BeforeHash - let fsx = + let fsx = match filename with | None -> false | Some value -> ParseAndCheckInputs.IsScript value @@ -697,12 +693,12 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, lexargs.stringNest <- stringNest Lexer.endline cont lexargs skip lexbuf - | LexCont.Token (ifdefs, stringNest) -> + | LexCont.Token (ifdefs, stringNest) -> lexargs.ifdefStack <- ifdefs lexargs.stringNest <- stringNest Lexer.token lexargs skip lexbuf - | LexCont.IfDefSkip (ifdefs, stringNest, n, m) -> + | LexCont.IfDefSkip (ifdefs, stringNest, n, m) -> lexargs.ifdefStack <- ifdefs lexargs.stringNest <- stringNest Lexer.ifdefSkip n m lexargs skip lexbuf @@ -710,9 +706,9 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, | LexCont.String (ifdefs, stringNest, style, kind, m) -> lexargs.ifdefStack <- ifdefs lexargs.stringNest <- stringNest - let buf = ByteBuffer.Create 100 + use buf = ByteBuffer.Create (Lexer.StringCapacity) let args = (buf, LexerStringFinisher.Default, m, kind, lexargs) - match style with + match style with | LexerStringStyle.SingleQuote -> Lexer.singleQuoteString args skip lexbuf | LexerStringStyle.Verbatim -> Lexer.verbatimString args skip lexbuf | LexerStringStyle.TripleQuote -> Lexer.tripleQuoteString args skip lexbuf @@ -731,7 +727,7 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, | LexCont.StringInComment (ifdefs, stringNest, style, n, m) -> lexargs.ifdefStack <- ifdefs lexargs.stringNest <- stringNest - match style with + match style with | LexerStringStyle.SingleQuote -> Lexer.stringInComment n m lexargs skip lexbuf | LexerStringStyle.Verbatim -> Lexer.verbatimStringInComment n m lexargs skip lexbuf | LexerStringStyle.TripleQuote -> Lexer.tripleQuoteStringInComment n m lexargs skip lexbuf @@ -774,6 +770,9 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, false, processHashEndElse m.StartColumn lineStr 4 cont | HASH_ENDIF (m, lineStr, cont) when lineStr <> "" -> false, processHashEndElse m.StartColumn lineStr 5 cont + | HASH_IDENT(ident) -> + delayToken(IDENT (ident), leftc + 1, rightc) + false, (HASH, leftc, leftc) | RQUOTE_DOT (s, raw) -> delayToken(DOT, rightc, rightc) false, (RQUOTE (s, raw), leftc, rightc - 1) @@ -845,7 +844,7 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, let lexcontFinal = // If we're using token from cache, we don't move forward with lexing - if isCached then lexcont + if isCached then lexcont else LexerStateEncoding.computeNextLexState token lexcont let tokenTag = tagOfToken token @@ -923,604 +922,607 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, type FSharpSourceTokenizer(conditionalDefines: string list, filename: string option) = // Public callers are unable to answer LanguageVersion feature support questions. - // External Tools including the VS IDE will enable the default LanguageVersion + // External Tools including the VS IDE will enable the default LanguageVersion let isFeatureSupported (_featureId:LanguageFeature) = true - + let reportLibraryOnlyFeatures = true + let lexResourceManager = new Lexhelp.LexResourceManager() let lexargs = mkLexargs(conditionalDefines, LightSyntaxStatus(true, false), lexResourceManager, [], DiscardErrorsLogger, PathMap.empty) member _.CreateLineTokenizer(lineText: string) = - let lexbuf = UnicodeLexing.StringAsLexbuf(isFeatureSupported, lineText) + let lexbuf = UnicodeLexing.StringAsLexbuf(reportLibraryOnlyFeatures, isFeatureSupported, lineText) FSharpLineTokenizer(lexbuf, Some lineText.Length, filename, lexargs) member _.CreateBufferTokenizer bufferFiller = - let lexbuf = UnicodeLexing.FunctionAsLexbuf(isFeatureSupported, bufferFiller) + let lexbuf = UnicodeLexing.FunctionAsLexbuf(reportLibraryOnlyFeatures, isFeatureSupported, bufferFiller) FSharpLineTokenizer(lexbuf, None, filename, lexargs) -module Keywords = +module FSharpKeywords = open FSharp.Compiler.Lexhelp.Keywords let DoesIdentifierNeedQuotation s = DoesIdentifierNeedQuotation s + let QuoteIdentifierIfNeeded s = QuoteIdentifierIfNeeded s + let NormalizeIdentifierBackticks s = NormalizeIdentifierBackticks s + let KeywordsWithDescription = keywordsWithDescription -module Lexer = - - open System.Threading - open FSharp.Compiler.Text - - [] - type FSharpLexerFlags = - | Default = 0x11011 - | LightSyntaxOn = 0x00001 - | Compiling = 0x00010 - | CompilingFSharpCore = 0x00110 - | SkipTrivia = 0x01000 - | UseLexFilter = 0x10000 - - [] - type FSharpSyntaxTokenKind = - | None - | HashIf - | HashElse - | HashEndIf - | CommentTrivia - | WhitespaceTrivia - | HashLine - | HashLight - | InactiveCode - | LineCommentTrivia - | StringText - | Fixed - | OffsideInterfaceMember - | OffsideBlockEnd - | OffsideRightBlockEnd - | OffsideDeclEnd - | OffsideEnd - | OffsideBlockSep - | OffsideBlockBegin - | OffsideReset - | OffsideFun - | OffsideFunction - | OffsideWith - | OffsideElse - | OffsideThen - | OffsideDoBang - | OffsideDo - | OffsideBinder - | OffsideLet - | HighPrecedenceTypeApp - | HighPrecedenceParenthesisApp - | HighPrecedenceBracketApp - | Extern - | Void - | Public - | Private - | Internal - | Global - | Static - | Member - | Class - | Abstract - | Override - | Default - | Constructor - | Inherit - | GreaterRightBracket - | Struct - | Sig - | Bar - | RightBracket - | RightBrace - | Minus - | Dollar - | BarRightBracket - | BarRightBrace - | Underscore - | Semicolon - | SemicolonSemicolon - | LeftArrow - | Equals - | LeftBracket - | LeftBracketBar - | LeftBraceBar - | LeftBracketLess - | LeftBrace - | QuestionMark - | QuestionMarkQuestionMark - | Dot - | Colon - | ColonColon - | ColonGreater - | ColonQuestionMark - | ColonQuestionMarkGreater - | ColonEquals - | When - | While - | With - | Hash - | Ampersand - | AmpersandAmpersand - | Quote - | LeftParenthesis - | RightParenthesis - | Star - | Comma - | RightArrow - | GreaterBarRightBracket - | LeftParenthesisStarRightParenthesis - | Open - | Or - | Rec - | Then - | To - | True - | Try - | Type - | Val - | Inline - | Interface - | Instance - | Const - | Lazy - | OffsideLazy - | Match - | MatchBang - | Mutable - | New - | Of - | Exception - | False - | For - | Fun - | Function - | If - | In - | JoinIn - | Finally - | DoBang - | And - | As - | Assert - | OffsideAssert - | Begin - | Do - | Done - | DownTo - | Else - | Elif - | End - | DotDot - | DotDotHat - | BarBar - | Upcast - | Downcast - | Null - | Reserved - | Module - | Namespace - | Delegate - | Constraint - | Base - | LeftQuote - | RightQuote - | RightQuoteDot - | PercentOperator - | Binder - | Less - | Greater - | Let - | Yield - | YieldBang - | BigNumber - | Decimal - | Char - | Ieee64 - | Ieee32 - | NativeInt - | UNativeInt - | UInt64 - | UInt32 - | UInt16 - | UInt8 - | Int64 - | Int32 - | Int32DotDot - | Int16 - | Int8 - | FunkyOperatorName - | AdjacentPrefixOperator - | PlusMinusOperator - | InfixAmpersandOperator - | InfixStarDivideModuloOperator - | PrefixOperator - | InfixBarOperator - | InfixAtHatOperator - | InfixCompareOperator - | InfixStarStarOperator - | Identifier - | KeywordString - | String - | ByteArray - | Asr - | InfixAsr - | InfixLand - | InfixLor - | InfixLsl - | InfixLsr - | InfixLxor - | InfixMod - - [] - type FSharpSyntaxToken = - - val private tok: Parser.token - val private tokRange: range - - new (tok, tokRange) = { tok = tok; tokRange = tokRange } - - member this.Range = this.tokRange - - member this.Kind = - match this.tok with - | ASR -> FSharpSyntaxTokenKind.Asr - | INFIX_STAR_STAR_OP "asr" -> FSharpSyntaxTokenKind.Asr - | INFIX_STAR_DIV_MOD_OP "land" -> FSharpSyntaxTokenKind.InfixLand - | INFIX_STAR_DIV_MOD_OP "lor" -> FSharpSyntaxTokenKind.InfixLor - | INFIX_STAR_STAR_OP "lsl" -> FSharpSyntaxTokenKind.InfixLsl - | INFIX_STAR_STAR_OP "lsr" -> FSharpSyntaxTokenKind.InfixLsr - | INFIX_STAR_DIV_MOD_OP "lxor" -> FSharpSyntaxTokenKind.InfixLxor - | INFIX_STAR_DIV_MOD_OP "mod" -> FSharpSyntaxTokenKind.InfixMod - | HASH_IF _ -> FSharpSyntaxTokenKind.HashIf - | HASH_ELSE _ -> FSharpSyntaxTokenKind.HashElse - | HASH_ENDIF _ -> FSharpSyntaxTokenKind.HashEndIf - | COMMENT _ -> FSharpSyntaxTokenKind.CommentTrivia - | WHITESPACE _ -> FSharpSyntaxTokenKind.WhitespaceTrivia - | HASH_LINE _ -> FSharpSyntaxTokenKind.HashLine - | HASH_LIGHT _ -> FSharpSyntaxTokenKind.HashLight - | INACTIVECODE _ -> FSharpSyntaxTokenKind.InactiveCode - | LINE_COMMENT _ -> FSharpSyntaxTokenKind.LineCommentTrivia - | STRING_TEXT _ -> FSharpSyntaxTokenKind.StringText - | FIXED -> FSharpSyntaxTokenKind.Fixed - | OINTERFACE_MEMBER -> FSharpSyntaxTokenKind.OffsideInterfaceMember - | OBLOCKEND -> FSharpSyntaxTokenKind.OffsideBlockEnd - | ORIGHT_BLOCK_END -> FSharpSyntaxTokenKind.OffsideRightBlockEnd - | ODECLEND -> FSharpSyntaxTokenKind.OffsideDeclEnd - | OEND -> FSharpSyntaxTokenKind.OffsideEnd - | OBLOCKSEP -> FSharpSyntaxTokenKind.OffsideBlockSep - | OBLOCKBEGIN -> FSharpSyntaxTokenKind.OffsideBlockBegin - | ORESET -> FSharpSyntaxTokenKind.OffsideReset - | OFUN -> FSharpSyntaxTokenKind.OffsideFun - | OFUNCTION -> FSharpSyntaxTokenKind.OffsideFunction - | OWITH -> FSharpSyntaxTokenKind.OffsideWith - | OELSE -> FSharpSyntaxTokenKind.OffsideElse - | OTHEN -> FSharpSyntaxTokenKind.OffsideThen - | ODO_BANG -> FSharpSyntaxTokenKind.OffsideDoBang - | ODO -> FSharpSyntaxTokenKind.OffsideDo - | OBINDER _ -> FSharpSyntaxTokenKind.OffsideBinder - | OLET _ -> FSharpSyntaxTokenKind.OffsideLet - | HIGH_PRECEDENCE_TYAPP -> FSharpSyntaxTokenKind.HighPrecedenceTypeApp - | HIGH_PRECEDENCE_PAREN_APP -> FSharpSyntaxTokenKind.HighPrecedenceParenthesisApp - | HIGH_PRECEDENCE_BRACK_APP -> FSharpSyntaxTokenKind.HighPrecedenceBracketApp - | EXTERN -> FSharpSyntaxTokenKind.Extern - | VOID -> FSharpSyntaxTokenKind.Void - | PUBLIC -> FSharpSyntaxTokenKind.Public - | PRIVATE -> FSharpSyntaxTokenKind.Private - | INTERNAL -> FSharpSyntaxTokenKind.Internal - | GLOBAL -> FSharpSyntaxTokenKind.Global - | STATIC -> FSharpSyntaxTokenKind.Static - | MEMBER -> FSharpSyntaxTokenKind.Member - | CLASS -> FSharpSyntaxTokenKind.Class - | ABSTRACT -> FSharpSyntaxTokenKind.Abstract - | OVERRIDE -> FSharpSyntaxTokenKind.Override - | DEFAULT -> FSharpSyntaxTokenKind.Default - | CONSTRUCTOR -> FSharpSyntaxTokenKind.Constructor - | INHERIT -> FSharpSyntaxTokenKind.Inherit - | GREATER_RBRACK -> FSharpSyntaxTokenKind.GreaterRightBracket - | STRUCT -> FSharpSyntaxTokenKind.Struct - | SIG -> FSharpSyntaxTokenKind.Sig - | BAR -> FSharpSyntaxTokenKind.Bar - | RBRACK -> FSharpSyntaxTokenKind.RightBracket - | RBRACE _ -> FSharpSyntaxTokenKind.RightBrace - | MINUS -> FSharpSyntaxTokenKind.Minus - | DOLLAR -> FSharpSyntaxTokenKind.Dollar - | BAR_RBRACK -> FSharpSyntaxTokenKind.BarRightBracket - | BAR_RBRACE -> FSharpSyntaxTokenKind.BarRightBrace - | UNDERSCORE -> FSharpSyntaxTokenKind.Underscore - | SEMICOLON_SEMICOLON -> FSharpSyntaxTokenKind.SemicolonSemicolon - | LARROW -> FSharpSyntaxTokenKind.LeftArrow - | EQUALS -> FSharpSyntaxTokenKind.Equals - | LBRACK -> FSharpSyntaxTokenKind.LeftBracket - | LBRACK_BAR -> FSharpSyntaxTokenKind.LeftBracketBar - | LBRACE_BAR -> FSharpSyntaxTokenKind.LeftBraceBar - | LBRACK_LESS -> FSharpSyntaxTokenKind.LeftBracketLess - | LBRACE _ -> FSharpSyntaxTokenKind.LeftBrace - | QMARK -> FSharpSyntaxTokenKind.QuestionMark - | QMARK_QMARK -> FSharpSyntaxTokenKind.QuestionMarkQuestionMark - | DOT -> FSharpSyntaxTokenKind.Dot - | COLON -> FSharpSyntaxTokenKind.Colon - | COLON_COLON -> FSharpSyntaxTokenKind.ColonColon - | COLON_GREATER -> FSharpSyntaxTokenKind.ColonGreater - | COLON_QMARK_GREATER -> FSharpSyntaxTokenKind.ColonQuestionMarkGreater - | COLON_QMARK -> FSharpSyntaxTokenKind.ColonQuestionMark - | COLON_EQUALS -> FSharpSyntaxTokenKind.ColonEquals - | SEMICOLON -> FSharpSyntaxTokenKind.SemicolonSemicolon - | WHEN -> FSharpSyntaxTokenKind.When - | WHILE -> FSharpSyntaxTokenKind.While - | WITH -> FSharpSyntaxTokenKind.With - | HASH -> FSharpSyntaxTokenKind.Hash - | AMP -> FSharpSyntaxTokenKind.Ampersand - | AMP_AMP -> FSharpSyntaxTokenKind.AmpersandAmpersand - | QUOTE -> FSharpSyntaxTokenKind.RightQuote - | LPAREN -> FSharpSyntaxTokenKind.LeftParenthesis - | RPAREN -> FSharpSyntaxTokenKind.RightParenthesis - | STAR -> FSharpSyntaxTokenKind.Star - | COMMA -> FSharpSyntaxTokenKind.Comma - | RARROW -> FSharpSyntaxTokenKind.RightArrow - | GREATER_BAR_RBRACK -> FSharpSyntaxTokenKind.GreaterBarRightBracket - | LPAREN_STAR_RPAREN -> FSharpSyntaxTokenKind.LeftParenthesisStarRightParenthesis - | OPEN -> FSharpSyntaxTokenKind.Open - | OR -> FSharpSyntaxTokenKind.Or - | REC -> FSharpSyntaxTokenKind.Rec - | THEN -> FSharpSyntaxTokenKind.Then - | TO -> FSharpSyntaxTokenKind.To - | TRUE -> FSharpSyntaxTokenKind.True - | TRY -> FSharpSyntaxTokenKind.Try - | TYPE -> FSharpSyntaxTokenKind.Type - | VAL -> FSharpSyntaxTokenKind.Val - | INLINE -> FSharpSyntaxTokenKind.Inline - | INTERFACE -> FSharpSyntaxTokenKind.Interface - | INSTANCE -> FSharpSyntaxTokenKind.Instance - | CONST -> FSharpSyntaxTokenKind.Const - | LAZY -> FSharpSyntaxTokenKind.Lazy - | OLAZY -> FSharpSyntaxTokenKind.OffsideLazy - | MATCH -> FSharpSyntaxTokenKind.Match - | MATCH_BANG -> FSharpSyntaxTokenKind.MatchBang - | MUTABLE -> FSharpSyntaxTokenKind.Mutable - | NEW -> FSharpSyntaxTokenKind.New - | OF -> FSharpSyntaxTokenKind.Of - | EXCEPTION -> FSharpSyntaxTokenKind.Exception - | FALSE -> FSharpSyntaxTokenKind.False - | FOR -> FSharpSyntaxTokenKind.For - | FUN -> FSharpSyntaxTokenKind.Fun - | FUNCTION -> FSharpSyntaxTokenKind.Function - | IF -> FSharpSyntaxTokenKind.If - | IN -> FSharpSyntaxTokenKind.In - | JOIN_IN -> FSharpSyntaxTokenKind.JoinIn - | FINALLY -> FSharpSyntaxTokenKind.Finally - | DO_BANG -> FSharpSyntaxTokenKind.DoBang - | AND -> FSharpSyntaxTokenKind.And - | AS -> FSharpSyntaxTokenKind.As - | ASSERT -> FSharpSyntaxTokenKind.Assert - | OASSERT -> FSharpSyntaxTokenKind.OffsideAssert - | BEGIN -> FSharpSyntaxTokenKind.Begin - | DO -> FSharpSyntaxTokenKind.Do - | DONE -> FSharpSyntaxTokenKind.Done - | DOWNTO -> FSharpSyntaxTokenKind.DownTo - | ELSE -> FSharpSyntaxTokenKind.Else - | ELIF -> FSharpSyntaxTokenKind.Elif - | END -> FSharpSyntaxTokenKind.End - | DOT_DOT -> FSharpSyntaxTokenKind.DotDot - | DOT_DOT_HAT -> FSharpSyntaxTokenKind.DotDotHat - | BAR_BAR -> FSharpSyntaxTokenKind.BarBar - | UPCAST -> FSharpSyntaxTokenKind.Upcast - | DOWNCAST -> FSharpSyntaxTokenKind.Downcast - | NULL -> FSharpSyntaxTokenKind.Null - | RESERVED -> FSharpSyntaxTokenKind.Reserved - | MODULE -> FSharpSyntaxTokenKind.Module - | NAMESPACE -> FSharpSyntaxTokenKind.Namespace - | DELEGATE -> FSharpSyntaxTokenKind.Delegate - | CONSTRAINT -> FSharpSyntaxTokenKind.Constraint - | BASE -> FSharpSyntaxTokenKind.Base - | LQUOTE _ -> FSharpSyntaxTokenKind.LeftQuote - | RQUOTE _ -> FSharpSyntaxTokenKind.RightQuote - | RQUOTE_DOT _ -> FSharpSyntaxTokenKind.RightQuoteDot - | PERCENT_OP _ -> FSharpSyntaxTokenKind.PercentOperator - | BINDER _ -> FSharpSyntaxTokenKind.Binder - | LESS _ -> FSharpSyntaxTokenKind.Less - | GREATER _ -> FSharpSyntaxTokenKind.Greater - | LET _ -> FSharpSyntaxTokenKind.Let - | YIELD _ -> FSharpSyntaxTokenKind.Yield - | YIELD_BANG _ -> FSharpSyntaxTokenKind.YieldBang - | BIGNUM _ -> FSharpSyntaxTokenKind.BigNumber - | DECIMAL _ -> FSharpSyntaxTokenKind.Decimal - | CHAR _ -> FSharpSyntaxTokenKind.Char - | IEEE64 _ -> FSharpSyntaxTokenKind.Ieee64 - | IEEE32 _ -> FSharpSyntaxTokenKind.Ieee32 - | NATIVEINT _ -> FSharpSyntaxTokenKind.NativeInt - | UNATIVEINT _ -> FSharpSyntaxTokenKind.UNativeInt - | UINT64 _ -> FSharpSyntaxTokenKind.UInt64 - | UINT32 _ -> FSharpSyntaxTokenKind.UInt32 - | UINT16 _ -> FSharpSyntaxTokenKind.UInt16 - | UINT8 _ -> FSharpSyntaxTokenKind.UInt8 - | INT64 _ -> FSharpSyntaxTokenKind.UInt64 - | INT32 _ -> FSharpSyntaxTokenKind.Int32 - | INT32_DOT_DOT _ -> FSharpSyntaxTokenKind.Int32DotDot - | INT16 _ -> FSharpSyntaxTokenKind.Int16 - | INT8 _ -> FSharpSyntaxTokenKind.Int8 - | FUNKY_OPERATOR_NAME _ -> FSharpSyntaxTokenKind.FunkyOperatorName - | ADJACENT_PREFIX_OP _ -> FSharpSyntaxTokenKind.AdjacentPrefixOperator - | PLUS_MINUS_OP _ -> FSharpSyntaxTokenKind.PlusMinusOperator - | INFIX_AMP_OP _ -> FSharpSyntaxTokenKind.InfixAmpersandOperator - | INFIX_STAR_DIV_MOD_OP _ -> FSharpSyntaxTokenKind.InfixStarDivideModuloOperator - | PREFIX_OP _ -> FSharpSyntaxTokenKind.PrefixOperator - | INFIX_BAR_OP _ -> FSharpSyntaxTokenKind.InfixBarOperator - | INFIX_AT_HAT_OP _ -> FSharpSyntaxTokenKind.InfixAtHatOperator - | INFIX_COMPARE_OP _ -> FSharpSyntaxTokenKind.InfixCompareOperator - | INFIX_STAR_STAR_OP _ -> FSharpSyntaxTokenKind.InfixStarStarOperator - | IDENT _ -> FSharpSyntaxTokenKind.Identifier - | KEYWORD_STRING _ -> FSharpSyntaxTokenKind.KeywordString - | INTERP_STRING_BEGIN_END _ - | INTERP_STRING_BEGIN_PART _ - | INTERP_STRING_PART _ - | INTERP_STRING_END _ - | STRING _ -> FSharpSyntaxTokenKind.String - | BYTEARRAY _ -> FSharpSyntaxTokenKind.ByteArray - | _ -> FSharpSyntaxTokenKind.None - - member this.IsKeyword = - match this.Kind with - | FSharpSyntaxTokenKind.Abstract - | FSharpSyntaxTokenKind.And - | FSharpSyntaxTokenKind.As - | FSharpSyntaxTokenKind.Assert - | FSharpSyntaxTokenKind.OffsideAssert - | FSharpSyntaxTokenKind.Base - | FSharpSyntaxTokenKind.Begin - | FSharpSyntaxTokenKind.Class - | FSharpSyntaxTokenKind.Default - | FSharpSyntaxTokenKind.Delegate - | FSharpSyntaxTokenKind.Do - | FSharpSyntaxTokenKind.OffsideDo - | FSharpSyntaxTokenKind.Done - | FSharpSyntaxTokenKind.Downcast - | FSharpSyntaxTokenKind.DownTo - | FSharpSyntaxTokenKind.Elif - | FSharpSyntaxTokenKind.Else - | FSharpSyntaxTokenKind.OffsideElse - | FSharpSyntaxTokenKind.End - | FSharpSyntaxTokenKind.OffsideEnd - | FSharpSyntaxTokenKind.Exception - | FSharpSyntaxTokenKind.Extern - | FSharpSyntaxTokenKind.False - | FSharpSyntaxTokenKind.Finally - | FSharpSyntaxTokenKind.Fixed - | FSharpSyntaxTokenKind.For - | FSharpSyntaxTokenKind.Fun - | FSharpSyntaxTokenKind.OffsideFun - | FSharpSyntaxTokenKind.Function - | FSharpSyntaxTokenKind.OffsideFunction - | FSharpSyntaxTokenKind.Global - | FSharpSyntaxTokenKind.If - | FSharpSyntaxTokenKind.In - | FSharpSyntaxTokenKind.Inherit - | FSharpSyntaxTokenKind.Inline - | FSharpSyntaxTokenKind.Interface - | FSharpSyntaxTokenKind.OffsideInterfaceMember - | FSharpSyntaxTokenKind.Internal - | FSharpSyntaxTokenKind.Lazy - | FSharpSyntaxTokenKind.OffsideLazy - | FSharpSyntaxTokenKind.Let // "let" and "use" - | FSharpSyntaxTokenKind.OffsideLet - | FSharpSyntaxTokenKind.DoBang // "let!", "use!" and "do!" - | FSharpSyntaxTokenKind.OffsideDoBang - | FSharpSyntaxTokenKind.Match - | FSharpSyntaxTokenKind.MatchBang - | FSharpSyntaxTokenKind.Member - | FSharpSyntaxTokenKind.Module - | FSharpSyntaxTokenKind.Mutable - | FSharpSyntaxTokenKind.Namespace - | FSharpSyntaxTokenKind.New - // | FSharpSyntaxTokenKind.Not // Not actually a keyword. However, not struct in combination is used as a generic parameter constraint. - | FSharpSyntaxTokenKind.Null - | FSharpSyntaxTokenKind.Of - | FSharpSyntaxTokenKind.Open - | FSharpSyntaxTokenKind.Or - | FSharpSyntaxTokenKind.Override - | FSharpSyntaxTokenKind.Private - | FSharpSyntaxTokenKind.Public - | FSharpSyntaxTokenKind.Rec - | FSharpSyntaxTokenKind.Yield // "yield" and "return" - | FSharpSyntaxTokenKind.YieldBang // "yield!" and "return!" - | FSharpSyntaxTokenKind.Static - | FSharpSyntaxTokenKind.Struct - | FSharpSyntaxTokenKind.Then - | FSharpSyntaxTokenKind.To - | FSharpSyntaxTokenKind.True - | FSharpSyntaxTokenKind.Try - | FSharpSyntaxTokenKind.Type - | FSharpSyntaxTokenKind.Upcast - | FSharpSyntaxTokenKind.Val - | FSharpSyntaxTokenKind.Void - | FSharpSyntaxTokenKind.When - | FSharpSyntaxTokenKind.While - | FSharpSyntaxTokenKind.With - | FSharpSyntaxTokenKind.OffsideWith - - // * Reserved - from OCAML * - | FSharpSyntaxTokenKind.Asr - | FSharpSyntaxTokenKind.InfixAsr - | FSharpSyntaxTokenKind.InfixLand - | FSharpSyntaxTokenKind.InfixLor - | FSharpSyntaxTokenKind.InfixLsl - | FSharpSyntaxTokenKind.InfixLsr - | FSharpSyntaxTokenKind.InfixLxor - | FSharpSyntaxTokenKind.InfixMod - | FSharpSyntaxTokenKind.Sig - - // * Reserved - for future * - // atomic - // break - // checked - // component - // const - // constraint - // constructor - // continue - // eager - // event - // external - // functor - // include - // method - // mixin - // object - // parallel - // process - // protected - // pure - // sealed - // tailcall - // trait - // virtual - // volatile - | FSharpSyntaxTokenKind.Reserved - | FSharpSyntaxTokenKind.KeywordString - | FSharpSyntaxTokenKind.Binder - | FSharpSyntaxTokenKind.OffsideBinder -> true - | _ -> false - - member this.IsIdentifier = - match this.Kind with - | FSharpSyntaxTokenKind.Identifier -> true - | _ -> false - - member this.IsStringLiteral = - match this.Kind with - | FSharpSyntaxTokenKind.String -> true - | _ -> false - - member this.IsNumericLiteral = - match this.Kind with - | FSharpSyntaxTokenKind.UInt8 - | FSharpSyntaxTokenKind.UInt16 - | FSharpSyntaxTokenKind.UInt64 - | FSharpSyntaxTokenKind.Int8 - | FSharpSyntaxTokenKind.Int16 - | FSharpSyntaxTokenKind.Int32 - | FSharpSyntaxTokenKind.Int64 - | FSharpSyntaxTokenKind.Ieee32 - | FSharpSyntaxTokenKind.Ieee64 - | FSharpSyntaxTokenKind.BigNumber -> true - | _ -> false - - member this.IsCommentTrivia = - match this.Kind with - | FSharpSyntaxTokenKind.CommentTrivia - | FSharpSyntaxTokenKind.LineCommentTrivia -> true - | _ -> false - - let lexWithErrorLogger (text: ISourceText) conditionalCompilationDefines (flags: FSharpLexerFlags) supportsFeature errorLogger onToken pathMap (ct: CancellationToken) = + let KeywordNames = Lexhelp.Keywords.keywordNames + +[] +type FSharpLexerFlags = + | Default = 0x11011 + | LightSyntaxOn = 0x00001 + | Compiling = 0x00010 + | CompilingFSharpCore = 0x00110 + | SkipTrivia = 0x01000 + | UseLexFilter = 0x10000 + +[] +type FSharpTokenKind = + | None + | HashIf + | HashElse + | HashEndIf + | CommentTrivia + | WhitespaceTrivia + | HashLine + | HashLight + | InactiveCode + | LineCommentTrivia + | StringText + | Fixed + | OffsideInterfaceMember + | OffsideBlockEnd + | OffsideRightBlockEnd + | OffsideDeclEnd + | OffsideEnd + | OffsideBlockSep + | OffsideBlockBegin + | OffsideReset + | OffsideFun + | OffsideFunction + | OffsideWith + | OffsideElse + | OffsideThen + | OffsideDoBang + | OffsideDo + | OffsideBinder + | OffsideLet + | HighPrecedenceTypeApp + | HighPrecedenceParenthesisApp + | HighPrecedenceBracketApp + | Extern + | Void + | Public + | Private + | Internal + | Global + | Static + | Member + | Class + | Abstract + | Override + | Default + | Constructor + | Inherit + | GreaterRightBracket + | Struct + | Sig + | Bar + | RightBracket + | RightBrace + | Minus + | Dollar + | BarRightBracket + | BarRightBrace + | Underscore + | Semicolon + | SemicolonSemicolon + | LeftArrow + | Equals + | LeftBracket + | LeftBracketBar + | LeftBraceBar + | LeftBracketLess + | LeftBrace + | QuestionMark + | QuestionMarkQuestionMark + | Dot + | Colon + | ColonColon + | ColonGreater + | ColonQuestionMark + | ColonQuestionMarkGreater + | ColonEquals + | When + | While + | With + | Hash + | Ampersand + | AmpersandAmpersand + | Quote + | LeftParenthesis + | RightParenthesis + | Star + | Comma + | RightArrow + | GreaterBarRightBracket + | LeftParenthesisStarRightParenthesis + | Open + | Or + | Rec + | Then + | To + | True + | Try + | Type + | Val + | Inline + | Interface + | Instance + | Const + | Lazy + | OffsideLazy + | Match + | MatchBang + | Mutable + | New + | Of + | Exception + | False + | For + | Fun + | Function + | If + | In + | JoinIn + | Finally + | DoBang + | And + | As + | Assert + | OffsideAssert + | Begin + | Do + | Done + | DownTo + | Else + | Elif + | End + | DotDot + | DotDotHat + | BarBar + | Upcast + | Downcast + | Null + | Reserved + | Module + | Namespace + | Delegate + | Constraint + | Base + | LeftQuote + | RightQuote + | RightQuoteDot + | PercentOperator + | Binder + | Less + | Greater + | Let + | Yield + | YieldBang + | BigNumber + | Decimal + | Char + | Ieee64 + | Ieee32 + | NativeInt + | UNativeInt + | UInt64 + | UInt32 + | UInt16 + | UInt8 + | Int64 + | Int32 + | Int32DotDot + | Int16 + | Int8 + | FunkyOperatorName + | AdjacentPrefixOperator + | PlusMinusOperator + | InfixAmpersandOperator + | InfixStarDivideModuloOperator + | PrefixOperator + | InfixBarOperator + | InfixAtHatOperator + | InfixCompareOperator + | InfixStarStarOperator + | Identifier + | KeywordString + | String + | ByteArray + | Asr + | InfixAsr + | InfixLand + | InfixLor + | InfixLsl + | InfixLsr + | InfixLxor + | InfixMod + +[] +type FSharpToken = + + val private tok: Parser.token + val private tokRange: range + + new (tok, tokRange) = { tok = tok; tokRange = tokRange } + + member this.Range = this.tokRange + + member this.Kind = + match this.tok with + | ASR -> FSharpTokenKind.Asr + | INFIX_STAR_STAR_OP "asr" -> FSharpTokenKind.Asr + | INFIX_STAR_DIV_MOD_OP "land" -> FSharpTokenKind.InfixLand + | INFIX_STAR_DIV_MOD_OP "lor" -> FSharpTokenKind.InfixLor + | INFIX_STAR_STAR_OP "lsl" -> FSharpTokenKind.InfixLsl + | INFIX_STAR_STAR_OP "lsr" -> FSharpTokenKind.InfixLsr + | INFIX_STAR_DIV_MOD_OP "lxor" -> FSharpTokenKind.InfixLxor + | INFIX_STAR_DIV_MOD_OP "mod" -> FSharpTokenKind.InfixMod + | HASH_IF _ -> FSharpTokenKind.HashIf + | HASH_ELSE _ -> FSharpTokenKind.HashElse + | HASH_ENDIF _ -> FSharpTokenKind.HashEndIf + | COMMENT _ -> FSharpTokenKind.CommentTrivia + | WHITESPACE _ -> FSharpTokenKind.WhitespaceTrivia + | HASH_LINE _ -> FSharpTokenKind.HashLine + | HASH_LIGHT _ -> FSharpTokenKind.HashLight + | INACTIVECODE _ -> FSharpTokenKind.InactiveCode + | LINE_COMMENT _ -> FSharpTokenKind.LineCommentTrivia + | STRING_TEXT _ -> FSharpTokenKind.StringText + | FIXED -> FSharpTokenKind.Fixed + | OINTERFACE_MEMBER -> FSharpTokenKind.OffsideInterfaceMember + | OBLOCKEND -> FSharpTokenKind.OffsideBlockEnd + | ORIGHT_BLOCK_END -> FSharpTokenKind.OffsideRightBlockEnd + | ODECLEND -> FSharpTokenKind.OffsideDeclEnd + | OEND -> FSharpTokenKind.OffsideEnd + | OBLOCKSEP -> FSharpTokenKind.OffsideBlockSep + | OBLOCKBEGIN -> FSharpTokenKind.OffsideBlockBegin + | ORESET -> FSharpTokenKind.OffsideReset + | OFUN -> FSharpTokenKind.OffsideFun + | OFUNCTION -> FSharpTokenKind.OffsideFunction + | OWITH -> FSharpTokenKind.OffsideWith + | OELSE -> FSharpTokenKind.OffsideElse + | OTHEN -> FSharpTokenKind.OffsideThen + | ODO_BANG -> FSharpTokenKind.OffsideDoBang + | ODO -> FSharpTokenKind.OffsideDo + | OBINDER _ -> FSharpTokenKind.OffsideBinder + | OLET _ -> FSharpTokenKind.OffsideLet + | HIGH_PRECEDENCE_TYAPP -> FSharpTokenKind.HighPrecedenceTypeApp + | HIGH_PRECEDENCE_PAREN_APP -> FSharpTokenKind.HighPrecedenceParenthesisApp + | HIGH_PRECEDENCE_BRACK_APP -> FSharpTokenKind.HighPrecedenceBracketApp + | EXTERN -> FSharpTokenKind.Extern + | VOID -> FSharpTokenKind.Void + | PUBLIC -> FSharpTokenKind.Public + | PRIVATE -> FSharpTokenKind.Private + | INTERNAL -> FSharpTokenKind.Internal + | GLOBAL -> FSharpTokenKind.Global + | STATIC -> FSharpTokenKind.Static + | MEMBER -> FSharpTokenKind.Member + | CLASS -> FSharpTokenKind.Class + | ABSTRACT -> FSharpTokenKind.Abstract + | OVERRIDE -> FSharpTokenKind.Override + | DEFAULT -> FSharpTokenKind.Default + | CONSTRUCTOR -> FSharpTokenKind.Constructor + | INHERIT -> FSharpTokenKind.Inherit + | GREATER_RBRACK -> FSharpTokenKind.GreaterRightBracket + | STRUCT -> FSharpTokenKind.Struct + | SIG -> FSharpTokenKind.Sig + | BAR -> FSharpTokenKind.Bar + | RBRACK -> FSharpTokenKind.RightBracket + | RBRACE _ -> FSharpTokenKind.RightBrace + | MINUS -> FSharpTokenKind.Minus + | DOLLAR -> FSharpTokenKind.Dollar + | BAR_RBRACK -> FSharpTokenKind.BarRightBracket + | BAR_RBRACE -> FSharpTokenKind.BarRightBrace + | UNDERSCORE -> FSharpTokenKind.Underscore + | SEMICOLON_SEMICOLON -> FSharpTokenKind.SemicolonSemicolon + | LARROW -> FSharpTokenKind.LeftArrow + | EQUALS -> FSharpTokenKind.Equals + | LBRACK -> FSharpTokenKind.LeftBracket + | LBRACK_BAR -> FSharpTokenKind.LeftBracketBar + | LBRACE_BAR -> FSharpTokenKind.LeftBraceBar + | LBRACK_LESS -> FSharpTokenKind.LeftBracketLess + | LBRACE _ -> FSharpTokenKind.LeftBrace + | QMARK -> FSharpTokenKind.QuestionMark + | QMARK_QMARK -> FSharpTokenKind.QuestionMarkQuestionMark + | DOT -> FSharpTokenKind.Dot + | COLON -> FSharpTokenKind.Colon + | COLON_COLON -> FSharpTokenKind.ColonColon + | COLON_GREATER -> FSharpTokenKind.ColonGreater + | COLON_QMARK_GREATER -> FSharpTokenKind.ColonQuestionMarkGreater + | COLON_QMARK -> FSharpTokenKind.ColonQuestionMark + | COLON_EQUALS -> FSharpTokenKind.ColonEquals + | SEMICOLON -> FSharpTokenKind.SemicolonSemicolon + | WHEN -> FSharpTokenKind.When + | WHILE -> FSharpTokenKind.While + | WITH -> FSharpTokenKind.With + | HASH -> FSharpTokenKind.Hash + | AMP -> FSharpTokenKind.Ampersand + | AMP_AMP -> FSharpTokenKind.AmpersandAmpersand + | QUOTE -> FSharpTokenKind.RightQuote + | LPAREN -> FSharpTokenKind.LeftParenthesis + | RPAREN -> FSharpTokenKind.RightParenthesis + | STAR -> FSharpTokenKind.Star + | COMMA -> FSharpTokenKind.Comma + | RARROW -> FSharpTokenKind.RightArrow + | GREATER_BAR_RBRACK -> FSharpTokenKind.GreaterBarRightBracket + | LPAREN_STAR_RPAREN -> FSharpTokenKind.LeftParenthesisStarRightParenthesis + | OPEN -> FSharpTokenKind.Open + | OR -> FSharpTokenKind.Or + | REC -> FSharpTokenKind.Rec + | THEN -> FSharpTokenKind.Then + | TO -> FSharpTokenKind.To + | TRUE -> FSharpTokenKind.True + | TRY -> FSharpTokenKind.Try + | TYPE -> FSharpTokenKind.Type + | VAL -> FSharpTokenKind.Val + | INLINE -> FSharpTokenKind.Inline + | INTERFACE -> FSharpTokenKind.Interface + | INSTANCE -> FSharpTokenKind.Instance + | CONST -> FSharpTokenKind.Const + | LAZY -> FSharpTokenKind.Lazy + | OLAZY -> FSharpTokenKind.OffsideLazy + | MATCH -> FSharpTokenKind.Match + | MATCH_BANG -> FSharpTokenKind.MatchBang + | MUTABLE -> FSharpTokenKind.Mutable + | NEW -> FSharpTokenKind.New + | OF -> FSharpTokenKind.Of + | EXCEPTION -> FSharpTokenKind.Exception + | FALSE -> FSharpTokenKind.False + | FOR -> FSharpTokenKind.For + | FUN -> FSharpTokenKind.Fun + | FUNCTION -> FSharpTokenKind.Function + | IF -> FSharpTokenKind.If + | IN -> FSharpTokenKind.In + | JOIN_IN -> FSharpTokenKind.JoinIn + | FINALLY -> FSharpTokenKind.Finally + | DO_BANG -> FSharpTokenKind.DoBang + | AND -> FSharpTokenKind.And + | AS -> FSharpTokenKind.As + | ASSERT -> FSharpTokenKind.Assert + | OASSERT -> FSharpTokenKind.OffsideAssert + | BEGIN -> FSharpTokenKind.Begin + | DO -> FSharpTokenKind.Do + | DONE -> FSharpTokenKind.Done + | DOWNTO -> FSharpTokenKind.DownTo + | ELSE -> FSharpTokenKind.Else + | ELIF -> FSharpTokenKind.Elif + | END -> FSharpTokenKind.End + | DOT_DOT -> FSharpTokenKind.DotDot + | DOT_DOT_HAT -> FSharpTokenKind.DotDotHat + | BAR_BAR -> FSharpTokenKind.BarBar + | UPCAST -> FSharpTokenKind.Upcast + | DOWNCAST -> FSharpTokenKind.Downcast + | NULL -> FSharpTokenKind.Null + | RESERVED -> FSharpTokenKind.Reserved + | MODULE -> FSharpTokenKind.Module + | NAMESPACE -> FSharpTokenKind.Namespace + | DELEGATE -> FSharpTokenKind.Delegate + | CONSTRAINT -> FSharpTokenKind.Constraint + | BASE -> FSharpTokenKind.Base + | LQUOTE _ -> FSharpTokenKind.LeftQuote + | RQUOTE _ -> FSharpTokenKind.RightQuote + | RQUOTE_DOT _ -> FSharpTokenKind.RightQuoteDot + | PERCENT_OP _ -> FSharpTokenKind.PercentOperator + | BINDER _ -> FSharpTokenKind.Binder + | LESS _ -> FSharpTokenKind.Less + | GREATER _ -> FSharpTokenKind.Greater + | LET _ -> FSharpTokenKind.Let + | YIELD _ -> FSharpTokenKind.Yield + | YIELD_BANG _ -> FSharpTokenKind.YieldBang + | BIGNUM _ -> FSharpTokenKind.BigNumber + | DECIMAL _ -> FSharpTokenKind.Decimal + | CHAR _ -> FSharpTokenKind.Char + | IEEE64 _ -> FSharpTokenKind.Ieee64 + | IEEE32 _ -> FSharpTokenKind.Ieee32 + | NATIVEINT _ -> FSharpTokenKind.NativeInt + | UNATIVEINT _ -> FSharpTokenKind.UNativeInt + | UINT64 _ -> FSharpTokenKind.UInt64 + | UINT32 _ -> FSharpTokenKind.UInt32 + | UINT16 _ -> FSharpTokenKind.UInt16 + | UINT8 _ -> FSharpTokenKind.UInt8 + | INT64 _ -> FSharpTokenKind.UInt64 + | INT32 _ -> FSharpTokenKind.Int32 + | INT32_DOT_DOT _ -> FSharpTokenKind.Int32DotDot + | INT16 _ -> FSharpTokenKind.Int16 + | INT8 _ -> FSharpTokenKind.Int8 + | FUNKY_OPERATOR_NAME _ -> FSharpTokenKind.FunkyOperatorName + | ADJACENT_PREFIX_OP _ -> FSharpTokenKind.AdjacentPrefixOperator + | PLUS_MINUS_OP _ -> FSharpTokenKind.PlusMinusOperator + | INFIX_AMP_OP _ -> FSharpTokenKind.InfixAmpersandOperator + | INFIX_STAR_DIV_MOD_OP _ -> FSharpTokenKind.InfixStarDivideModuloOperator + | PREFIX_OP _ -> FSharpTokenKind.PrefixOperator + | INFIX_BAR_OP _ -> FSharpTokenKind.InfixBarOperator + | INFIX_AT_HAT_OP _ -> FSharpTokenKind.InfixAtHatOperator + | INFIX_COMPARE_OP _ -> FSharpTokenKind.InfixCompareOperator + | INFIX_STAR_STAR_OP _ -> FSharpTokenKind.InfixStarStarOperator + | IDENT _ -> FSharpTokenKind.Identifier + | KEYWORD_STRING _ -> FSharpTokenKind.KeywordString + | INTERP_STRING_BEGIN_END _ + | INTERP_STRING_BEGIN_PART _ + | INTERP_STRING_PART _ + | INTERP_STRING_END _ + | STRING _ -> FSharpTokenKind.String + | BYTEARRAY _ -> FSharpTokenKind.ByteArray + | _ -> FSharpTokenKind.None + + member this.IsKeyword = + match this.Kind with + | FSharpTokenKind.Abstract + | FSharpTokenKind.And + | FSharpTokenKind.As + | FSharpTokenKind.Assert + | FSharpTokenKind.OffsideAssert + | FSharpTokenKind.Base + | FSharpTokenKind.Begin + | FSharpTokenKind.Class + | FSharpTokenKind.Default + | FSharpTokenKind.Delegate + | FSharpTokenKind.Do + | FSharpTokenKind.OffsideDo + | FSharpTokenKind.Done + | FSharpTokenKind.Downcast + | FSharpTokenKind.DownTo + | FSharpTokenKind.Elif + | FSharpTokenKind.Else + | FSharpTokenKind.OffsideElse + | FSharpTokenKind.End + | FSharpTokenKind.OffsideEnd + | FSharpTokenKind.Exception + | FSharpTokenKind.Extern + | FSharpTokenKind.False + | FSharpTokenKind.Finally + | FSharpTokenKind.Fixed + | FSharpTokenKind.For + | FSharpTokenKind.Fun + | FSharpTokenKind.OffsideFun + | FSharpTokenKind.Function + | FSharpTokenKind.OffsideFunction + | FSharpTokenKind.Global + | FSharpTokenKind.If + | FSharpTokenKind.In + | FSharpTokenKind.Inherit + | FSharpTokenKind.Inline + | FSharpTokenKind.Interface + | FSharpTokenKind.OffsideInterfaceMember + | FSharpTokenKind.Internal + | FSharpTokenKind.Lazy + | FSharpTokenKind.OffsideLazy + | FSharpTokenKind.Let // "let" and "use" + | FSharpTokenKind.OffsideLet + | FSharpTokenKind.DoBang // "let!", "use!" and "do!" + | FSharpTokenKind.OffsideDoBang + | FSharpTokenKind.Match + | FSharpTokenKind.MatchBang + | FSharpTokenKind.Member + | FSharpTokenKind.Module + | FSharpTokenKind.Mutable + | FSharpTokenKind.Namespace + | FSharpTokenKind.New + // | FSharpTokenKind.Not // Not actually a keyword. However, not struct in combination is used as a generic parameter constraint. + | FSharpTokenKind.Null + | FSharpTokenKind.Of + | FSharpTokenKind.Open + | FSharpTokenKind.Or + | FSharpTokenKind.Override + | FSharpTokenKind.Private + | FSharpTokenKind.Public + | FSharpTokenKind.Rec + | FSharpTokenKind.Yield // "yield" and "return" + | FSharpTokenKind.YieldBang // "yield!" and "return!" + | FSharpTokenKind.Static + | FSharpTokenKind.Struct + | FSharpTokenKind.Then + | FSharpTokenKind.To + | FSharpTokenKind.True + | FSharpTokenKind.Try + | FSharpTokenKind.Type + | FSharpTokenKind.Upcast + | FSharpTokenKind.Val + | FSharpTokenKind.Void + | FSharpTokenKind.When + | FSharpTokenKind.While + | FSharpTokenKind.With + | FSharpTokenKind.OffsideWith + + // * Reserved - from OCAML * + | FSharpTokenKind.Asr + | FSharpTokenKind.InfixAsr + | FSharpTokenKind.InfixLand + | FSharpTokenKind.InfixLor + | FSharpTokenKind.InfixLsl + | FSharpTokenKind.InfixLsr + | FSharpTokenKind.InfixLxor + | FSharpTokenKind.InfixMod + | FSharpTokenKind.Sig + + // * Reserved - for future * + // atomic + // break + // checked + // component + // const + // constraint + // constructor + // continue + // eager + // event + // external + // functor + // include + // method + // mixin + // object + // parallel + // process + // protected + // pure + // sealed + // tailcall + // trait + // virtual + // volatile + | FSharpTokenKind.Reserved + | FSharpTokenKind.KeywordString + | FSharpTokenKind.Binder + | FSharpTokenKind.OffsideBinder -> true + | _ -> false + + member this.IsIdentifier = + match this.Kind with + | FSharpTokenKind.Identifier -> true + | _ -> false + + member this.IsStringLiteral = + match this.Kind with + | FSharpTokenKind.String -> true + | _ -> false + + member this.IsNumericLiteral = + match this.Kind with + | FSharpTokenKind.UInt8 + | FSharpTokenKind.UInt16 + | FSharpTokenKind.UInt64 + | FSharpTokenKind.Int8 + | FSharpTokenKind.Int16 + | FSharpTokenKind.Int32 + | FSharpTokenKind.Int64 + | FSharpTokenKind.Ieee32 + | FSharpTokenKind.Ieee64 + | FSharpTokenKind.BigNumber -> true + | _ -> false + + member this.IsCommentTrivia = + match this.Kind with + | FSharpTokenKind.CommentTrivia + | FSharpTokenKind.LineCommentTrivia -> true + | _ -> false + +[] +module FSharpLexerImpl = + let lexWithErrorLogger (text: ISourceText) conditionalCompilationDefines (flags: FSharpLexerFlags) reportLibraryOnlyFeatures supportsFeature errorLogger onToken pathMap (ct: CancellationToken) = let canSkipTrivia = (flags &&& FSharpLexerFlags.SkipTrivia) = FSharpLexerFlags.SkipTrivia let isLightSyntaxOn = (flags &&& FSharpLexerFlags.LightSyntaxOn) = FSharpLexerFlags.LightSyntaxOn let isCompiling = (flags &&& FSharpLexerFlags.Compiling) = FSharpLexerFlags.Compiling let isCompilingFSharpCore = (flags &&& FSharpLexerFlags.CompilingFSharpCore) = FSharpLexerFlags.CompilingFSharpCore let canUseLexFilter = (flags &&& FSharpLexerFlags.UseLexFilter) = FSharpLexerFlags.UseLexFilter - let lexbuf = UnicodeLexing.SourceTextAsLexbuf(supportsFeature, text) - let lightStatus = LightSyntaxStatus(isLightSyntaxOn, true) + let lexbuf = UnicodeLexing.SourceTextAsLexbuf(reportLibraryOnlyFeatures, supportsFeature, text) + let lightStatus = LightSyntaxStatus(isLightSyntaxOn, true) let lexargs = mkLexargs (conditionalCompilationDefines, lightStatus, Lexhelp.LexResourceManager(0), [], errorLogger, pathMap) let lexargs = { lexargs with applyLineDirectives = isCompiling } @@ -1541,32 +1543,32 @@ module Lexer = ct.ThrowIfCancellationRequested () onToken (getNextToken lexbuf) lexbuf.LexemeRange - let lex text conditionalCompilationDefines flags supportsFeature lexCallback pathMap ct = - let errorLogger = CompilationErrorLogger("Lexer", ErrorLogger.FSharpErrorSeverityOptions.Default) - lexWithErrorLogger text conditionalCompilationDefines flags supportsFeature errorLogger lexCallback pathMap ct + let lex text conditionalCompilationDefines flags reportLibraryOnlyFeatures supportsFeature lexCallback pathMap ct = + let errorLogger = CompilationErrorLogger("Lexer", FSharpDiagnosticOptions.Default) + lexWithErrorLogger text conditionalCompilationDefines flags reportLibraryOnlyFeatures supportsFeature errorLogger lexCallback pathMap ct - [] - type FSharpLexer = +[] +type FSharpLexer = - static member Lex(text: ISourceText, tokenCallback, ?langVersion, ?filePath: string, ?conditionalCompilationDefines, ?flags, ?pathMap, ?ct) = - let langVersion = defaultArg langVersion "latestmajor" - let flags = defaultArg flags FSharpLexerFlags.Default - ignore filePath // can be removed at later point - let conditionalCompilationDefines = defaultArg conditionalCompilationDefines [] - let pathMap = defaultArg pathMap Map.Empty - let ct = defaultArg ct CancellationToken.None + static member Tokenize(text: ISourceText, tokenCallback, ?langVersion, ?filePath: string, ?conditionalCompilationDefines, ?flags, ?pathMap, ?ct) = + let langVersion = defaultArg langVersion "latestmajor" + let flags = defaultArg flags FSharpLexerFlags.Default + ignore filePath // can be removed at later point + let conditionalCompilationDefines = defaultArg conditionalCompilationDefines [] + let pathMap = defaultArg pathMap Map.Empty + let ct = defaultArg ct CancellationToken.None - let supportsFeature = (LanguageVersion langVersion).SupportsFeature + let supportsFeature = (LanguageVersion langVersion).SupportsFeature - let pathMap = - (PathMap.empty, pathMap) - ||> Seq.fold (fun state pair -> state |> PathMap.addMapping pair.Key pair.Value) + let pathMap = + (PathMap.empty, pathMap) + ||> Seq.fold (fun state pair -> state |> PathMap.addMapping pair.Key pair.Value) - let onToken = - fun tok m -> - let fsTok = FSharpSyntaxToken(tok, m) - match fsTok.Kind with - | FSharpSyntaxTokenKind.None -> () - | _ -> tokenCallback fsTok + let onToken tok m = + let fsTok = FSharpToken(tok, m) + match fsTok.Kind with + | FSharpTokenKind.None -> () + | _ -> tokenCallback fsTok - lex text conditionalCompilationDefines flags supportsFeature onToken pathMap ct \ No newline at end of file + let reportLibraryOnlyFeatures = true + lex text conditionalCompilationDefines flags reportLibraryOnlyFeatures supportsFeature onToken pathMap ct diff --git a/src/fsharp/service/ServiceLexing.fsi b/src/fsharp/service/ServiceLexing.fsi index 653c7e9ce62..86848ea5990 100755 --- a/src/fsharp/service/ServiceLexing.fsi +++ b/src/fsharp/service/ServiceLexing.fsi @@ -1,16 +1,15 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.Tokenization -open FSharp.Compiler +open System +open System.Threading +open FSharp.Compiler +open FSharp.Compiler.Text // Prevents warnings of experimental APIs within the signature file itself. #nowarn "57" -type Position = int * int - -type Range = Position * Position - /// Represents encoded information for the end-of-line continuation of lexing [] type FSharpTokenizerLexState = @@ -82,130 +81,194 @@ type FSharpTokenCharKind = module FSharpTokenTag = /// Indicates the token is an identifier val Identifier: int + /// Indicates the token is a string val String : int + /// Indicates the token is an identifier (synonym for FSharpTokenTag.Identifier) val IDENT : int + /// Indicates the token is a string (synonym for FSharpTokenTag.String) val STRING : int + /// Indicates the token is a part of an interpolated string val INTERP_STRING_BEGIN_END : int + /// Indicates the token is a part of an interpolated string val INTERP_STRING_BEGIN_PART : int + /// Indicates the token is a part of an interpolated string val INTERP_STRING_PART : int + /// Indicates the token is a part of an interpolated string val INTERP_STRING_END : int + /// Indicates the token is a `(` val LPAREN : int + /// Indicates the token is a `)` val RPAREN : int + /// Indicates the token is a `[` val LBRACK : int + /// Indicates the token is a `]` val RBRACK : int + /// Indicates the token is a `{` val LBRACE : int + /// Indicates the token is a `}` val RBRACE : int + /// Indicates the token is a `[<` val LBRACK_LESS : int + /// Indicates the token is a `>]` val GREATER_RBRACK : int + /// Indicates the token is a `<` val LESS : int + /// Indicates the token is a `>` val GREATER : int + /// Indicates the token is a `[|` val LBRACK_BAR : int + /// Indicates the token is a `|]` val BAR_RBRACK : int + /// Indicates the token is a `+` or `-` val PLUS_MINUS_OP : int + /// Indicates the token is a `-` val MINUS : int + /// Indicates the token is a `*` val STAR : int + /// Indicates the token is a `%` val INFIX_STAR_DIV_MOD_OP : int + /// Indicates the token is a `%` val PERCENT_OP : int + /// Indicates the token is a `^` val INFIX_AT_HAT_OP : int + /// Indicates the token is a `?` val QMARK : int + /// Indicates the token is a `:` val COLON : int + /// Indicates the token is a `=` val EQUALS : int + /// Indicates the token is a `;` val SEMICOLON : int + /// Indicates the token is a `,` val COMMA : int + /// Indicates the token is a `.` val DOT : int + /// Indicates the token is a `..` val DOT_DOT : int + /// Indicates the token is a `..` val DOT_DOT_HAT : int + /// Indicates the token is a `..^` val INT32_DOT_DOT : int + /// Indicates the token is a `..` val UNDERSCORE : int + /// Indicates the token is a `_` val BAR : int + /// Indicates the token is a `:>` val COLON_GREATER : int + /// Indicates the token is a `:?>` val COLON_QMARK_GREATER : int + /// Indicates the token is a `:?` val COLON_QMARK : int + /// Indicates the token is a `|` val INFIX_BAR_OP : int + /// Indicates the token is a `|` val INFIX_COMPARE_OP : int + /// Indicates the token is a `::` val COLON_COLON : int + /// Indicates the token is a `@@` val AMP_AMP : int + /// Indicates the token is a `~` val PREFIX_OP : int + /// Indicates the token is a `:=` val COLON_EQUALS : int + /// Indicates the token is a `||` val BAR_BAR : int + /// Indicates the token is a `->` val RARROW : int + /// Indicates the token is a `<-` val LARROW : int + /// Indicates the token is a `"` val QUOTE : int + /// Indicates the token is a whitespace val WHITESPACE : int + /// Indicates the token is a comment + val COMMENT : int /// Indicates the token is a line comment + val LINE_COMMENT : int + /// Indicates the token is keyword `begin` val BEGIN : int + /// Indicates the token is keyword `do` val DO : int + /// Indicates the token is keyword `function` val FUNCTION : int + /// Indicates the token is keyword `then` val THEN : int + /// Indicates the token is keyword `else` val ELSE : int + /// Indicates the token is keyword `struct` val STRUCT : int + /// Indicates the token is keyword `class` val CLASS : int + /// Indicates the token is keyword `try` val TRY : int + /// Indicates the token is keyword `with` val WITH : int + /// Indicates the token is keyword `with` in #light val OWITH : int + /// Indicates the token is keyword `new` val NEW : int @@ -272,7 +335,7 @@ type FSharpSourceTokenizer = module internal TestExpose = val TokenInfo : Parser.token -> (FSharpTokenColorKind * FSharpTokenCharKind * FSharpTokenTriggerClass) -module Keywords = +module FSharpKeywords = /// Checks if adding backticks to identifier is needed. val DoesIdentifierNeedQuotation : string -> bool @@ -285,238 +348,237 @@ module Keywords = /// Keywords paired with their descriptions. Used in completion and quick info. val KeywordsWithDescription : (string * string) list -[] -module public Lexer = - - open System - open System.Threading - open FSharp.Compiler.Text - open FSharp.Compiler.Range - - [] - type public FSharpLexerFlags = - | Default = 0x11011 - | LightSyntaxOn = 0x00001 - | Compiling = 0x00010 - | CompilingFSharpCore = 0x00110 - | SkipTrivia = 0x01000 - | UseLexFilter = 0x10000 - - [] - type public FSharpSyntaxTokenKind = - | None - | HashIf - | HashElse - | HashEndIf - | CommentTrivia - | WhitespaceTrivia - | HashLine - | HashLight - | InactiveCode - | LineCommentTrivia - | StringText - | Fixed - | OffsideInterfaceMember - | OffsideBlockEnd - | OffsideRightBlockEnd - | OffsideDeclEnd - | OffsideEnd - | OffsideBlockSep - | OffsideBlockBegin - | OffsideReset - | OffsideFun - | OffsideFunction - | OffsideWith - | OffsideElse - | OffsideThen - | OffsideDoBang - | OffsideDo - | OffsideBinder - | OffsideLet - | HighPrecedenceTypeApp - | HighPrecedenceParenthesisApp - | HighPrecedenceBracketApp - | Extern - | Void - | Public - | Private - | Internal - | Global - | Static - | Member - | Class - | Abstract - | Override - | Default - | Constructor - | Inherit - | GreaterRightBracket - | Struct - | Sig - | Bar - | RightBracket - | RightBrace - | Minus - | Dollar - | BarRightBracket - | BarRightBrace - | Underscore - | Semicolon - | SemicolonSemicolon - | LeftArrow - | Equals - | LeftBracket - | LeftBracketBar - | LeftBraceBar - | LeftBracketLess - | LeftBrace - | QuestionMark - | QuestionMarkQuestionMark - | Dot - | Colon - | ColonColon - | ColonGreater - | ColonQuestionMark - | ColonQuestionMarkGreater - | ColonEquals - | When - | While - | With - | Hash - | Ampersand - | AmpersandAmpersand - | Quote - | LeftParenthesis - | RightParenthesis - | Star - | Comma - | RightArrow - | GreaterBarRightBracket - | LeftParenthesisStarRightParenthesis - | Open - | Or - | Rec - | Then - | To - | True - | Try - | Type - | Val - | Inline - | Interface - | Instance - | Const - | Lazy - | OffsideLazy - | Match - | MatchBang - | Mutable - | New - | Of - | Exception - | False - | For - | Fun - | Function - | If - | In - | JoinIn - | Finally - | DoBang - | And - | As - | Assert - | OffsideAssert - | Begin - | Do - | Done - | DownTo - | Else - | Elif - | End - | DotDot - | DotDotHat - | BarBar - | Upcast - | Downcast - | Null - | Reserved - | Module - | Namespace - | Delegate - | Constraint - | Base - | LeftQuote - | RightQuote - | RightQuoteDot - | PercentOperator - | Binder - | Less - | Greater - | Let - | Yield - | YieldBang - | BigNumber - | Decimal - | Char - | Ieee64 - | Ieee32 - | NativeInt - | UNativeInt - | UInt64 - | UInt32 - | UInt16 - | UInt8 - | Int64 - | Int32 - | Int32DotDot - | Int16 - | Int8 - | FunkyOperatorName - | AdjacentPrefixOperator - | PlusMinusOperator - | InfixAmpersandOperator - | InfixStarDivideModuloOperator - | PrefixOperator - | InfixBarOperator - | InfixAtHatOperator - | InfixCompareOperator - | InfixStarStarOperator - | Identifier - | KeywordString - | String - | ByteArray - | Asr - | InfixAsr - | InfixLand - | InfixLor - | InfixLsl - | InfixLsr - | InfixLxor - | InfixMod - - [] - type public FSharpSyntaxToken = - - val private tok: Parser.token - val private tokRange: range - - member Range: range - - member Kind: FSharpSyntaxTokenKind - - member IsIdentifier: bool - - member IsKeyword: bool - - member IsStringLiteral: bool - - member IsNumericLiteral: bool - - member IsCommentTrivia: bool - - [] - type public FSharpLexer = + /// A utility to help determine if an identifier needs to be quoted, this doesn't quote F# keywords. + val QuoteIdentifierIfNeeded: string -> string + + /// All the keywords in the F# language + val KeywordNames: string list + +[] +type public FSharpLexerFlags = + | Default = 0x11011 + | LightSyntaxOn = 0x00001 + | Compiling = 0x00010 + | CompilingFSharpCore = 0x00110 + | SkipTrivia = 0x01000 + | UseLexFilter = 0x10000 + +[] +type public FSharpTokenKind = + | None + | HashIf + | HashElse + | HashEndIf + | CommentTrivia + | WhitespaceTrivia + | HashLine + | HashLight + | InactiveCode + | LineCommentTrivia + | StringText + | Fixed + | OffsideInterfaceMember + | OffsideBlockEnd + | OffsideRightBlockEnd + | OffsideDeclEnd + | OffsideEnd + | OffsideBlockSep + | OffsideBlockBegin + | OffsideReset + | OffsideFun + | OffsideFunction + | OffsideWith + | OffsideElse + | OffsideThen + | OffsideDoBang + | OffsideDo + | OffsideBinder + | OffsideLet + | HighPrecedenceTypeApp + | HighPrecedenceParenthesisApp + | HighPrecedenceBracketApp + | Extern + | Void + | Public + | Private + | Internal + | Global + | Static + | Member + | Class + | Abstract + | Override + | Default + | Constructor + | Inherit + | GreaterRightBracket + | Struct + | Sig + | Bar + | RightBracket + | RightBrace + | Minus + | Dollar + | BarRightBracket + | BarRightBrace + | Underscore + | Semicolon + | SemicolonSemicolon + | LeftArrow + | Equals + | LeftBracket + | LeftBracketBar + | LeftBraceBar + | LeftBracketLess + | LeftBrace + | QuestionMark + | QuestionMarkQuestionMark + | Dot + | Colon + | ColonColon + | ColonGreater + | ColonQuestionMark + | ColonQuestionMarkGreater + | ColonEquals + | When + | While + | With + | Hash + | Ampersand + | AmpersandAmpersand + | Quote + | LeftParenthesis + | RightParenthesis + | Star + | Comma + | RightArrow + | GreaterBarRightBracket + | LeftParenthesisStarRightParenthesis + | Open + | Or + | Rec + | Then + | To + | True + | Try + | Type + | Val + | Inline + | Interface + | Instance + | Const + | Lazy + | OffsideLazy + | Match + | MatchBang + | Mutable + | New + | Of + | Exception + | False + | For + | Fun + | Function + | If + | In + | JoinIn + | Finally + | DoBang + | And + | As + | Assert + | OffsideAssert + | Begin + | Do + | Done + | DownTo + | Else + | Elif + | End + | DotDot + | DotDotHat + | BarBar + | Upcast + | Downcast + | Null + | Reserved + | Module + | Namespace + | Delegate + | Constraint + | Base + | LeftQuote + | RightQuote + | RightQuoteDot + | PercentOperator + | Binder + | Less + | Greater + | Let + | Yield + | YieldBang + | BigNumber + | Decimal + | Char + | Ieee64 + | Ieee32 + | NativeInt + | UNativeInt + | UInt64 + | UInt32 + | UInt16 + | UInt8 + | Int64 + | Int32 + | Int32DotDot + | Int16 + | Int8 + | FunkyOperatorName + | AdjacentPrefixOperator + | PlusMinusOperator + | InfixAmpersandOperator + | InfixStarDivideModuloOperator + | PrefixOperator + | InfixBarOperator + | InfixAtHatOperator + | InfixCompareOperator + | InfixStarStarOperator + | Identifier + | KeywordString + | String + | ByteArray + | Asr + | InfixAsr + | InfixLand + | InfixLor + | InfixLsl + | InfixLsr + | InfixLxor + | InfixMod + +[] +type public FSharpToken = + + val private tok: Parser.token + val private tokRange: range + + member Range: range + + member Kind: FSharpTokenKind + + member IsIdentifier: bool + + member IsKeyword: bool + + member IsStringLiteral: bool + + member IsNumericLiteral: bool + + member IsCommentTrivia: bool + +[] +type public FSharpLexer = - [] - static member Lex: text: ISourceText * tokenCallback: (FSharpSyntaxToken -> unit) * ?langVersion: string * ?filePath: string * ?conditionalCompilationDefines: string list * ?flags: FSharpLexerFlags * ?pathMap: Map * ?ct: CancellationToken -> unit \ No newline at end of file + [] + static member Tokenize: text: ISourceText * tokenCallback: (FSharpToken -> unit) * ?langVersion: string * ?filePath: string * ?conditionalCompilationDefines: string list * ?flags: FSharpLexerFlags * ?pathMap: Map * ?ct: CancellationToken -> unit + diff --git a/src/fsharp/service/ServiceNavigation.fs b/src/fsharp/service/ServiceNavigation.fs index eb9d70b0fd8..694502757f8 100755 --- a/src/fsharp/service/ServiceNavigation.fs +++ b/src/fsharp/service/ServiceNavigation.fs @@ -5,27 +5,30 @@ // type checking and intellisense-like environment-reporting. //-------------------------------------------------------------------------- -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.EditorServices +open System open System.Collections.Generic -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax open FSharp.Compiler.SyntaxTreeOps +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range /// Represents the different kinds of items that can appear in the navigation bar -type FSharpNavigationDeclarationItemKind = - | NamespaceDecl - | ModuleFileDecl - | ExnDecl - | ModuleDecl - | TypeDecl - | MethodDecl - | PropertyDecl - | FieldDecl - | OtherDecl +[] +type NavigationItemKind = + | Namespace + | ModuleFile + | Exception + | Module + | Type + | Method + | Property + | Field + | Other [] -type FSharpEnclosingEntityKind = +type NavigationEntityKind = | Namespace | Module | Class @@ -33,53 +36,53 @@ type FSharpEnclosingEntityKind = | Interface | Record | Enum - | DU + | Union /// Represents an item to be displayed in the navigation bar [] -type FSharpNavigationDeclarationItem(uniqueName: string, name: string, kind: FSharpNavigationDeclarationItemKind, glyph: FSharpGlyph, range: range, - bodyRange: range, singleTopLevel: bool, enclosingEntityKind: FSharpEnclosingEntityKind, isAbstract: bool, access: SynAccess option) = +type NavigationItem(uniqueName: string, name: string, kind: NavigationItemKind, glyph: FSharpGlyph, range: range, + bodyRange: range, singleTopLevel: bool, enclosingEntityKind: NavigationEntityKind, isAbstract: bool, access: SynAccess option) = - member x.bodyRange = bodyRange - member x.UniqueName = uniqueName - member x.Name = name - member x.Glyph = glyph - member x.Kind = kind - member x.Range = range - member x.BodyRange = bodyRange - member x.IsSingleTopLevel = singleTopLevel - member x.EnclosingEntityKind = enclosingEntityKind - member x.IsAbstract = isAbstract + member _.bodyRange = bodyRange + member _.UniqueName = uniqueName + member _.Name = name + member _.Glyph = glyph + member _.Kind = kind + member _.Range = range + member _.BodyRange = bodyRange + member _.IsSingleTopLevel = singleTopLevel + member _.EnclosingEntityKind = enclosingEntityKind + member _.IsAbstract = isAbstract - member x.Access = access + member _.Access = access - member x.WithUniqueName(uniqueName: string) = - FSharpNavigationDeclarationItem(uniqueName, name, kind, glyph, range, bodyRange, singleTopLevel, enclosingEntityKind, isAbstract, access) + member _.WithUniqueName(uniqueName: string) = + NavigationItem(uniqueName, name, kind, glyph, range, bodyRange, singleTopLevel, enclosingEntityKind, isAbstract, access) static member Create(name: string, kind, glyph: FSharpGlyph, range: range, bodyRange: range, singleTopLevel: bool, enclosingEntityKind, isAbstract, access: SynAccess option) = - FSharpNavigationDeclarationItem("", name, kind, glyph, range, bodyRange, singleTopLevel, enclosingEntityKind, isAbstract, access) + NavigationItem("", name, kind, glyph, range, bodyRange, singleTopLevel, enclosingEntityKind, isAbstract, access) /// Represents top-level declarations (that should be in the type drop-down) /// with nested declarations (that can be shown in the member drop-down) [] -type FSharpNavigationTopLevelDeclaration = - { Declaration: FSharpNavigationDeclarationItem - Nested: FSharpNavigationDeclarationItem[] } +type NavigationTopLevelDeclaration = + { Declaration: NavigationItem + Nested: NavigationItem[] } /// Represents result of 'GetNavigationItems' operation - this contains /// all the members and currently selected indices. First level correspond to /// types & modules and second level are methods etc. [] -type FSharpNavigationItems(declarations:FSharpNavigationTopLevelDeclaration[]) = - member x.Declarations = declarations +type NavigationItems(declarations:NavigationTopLevelDeclaration[]) = + member _.Declarations = declarations module NavigationImpl = let unionRangesChecked r1 r2 = - if FSharp.Compiler.Range.equals r1 range.Zero then r2 - elif FSharp.Compiler.Range.equals r2 range.Zero then r1 + if Range.equals r1 range.Zero then r2 + elif Range.equals r2 range.Zero then r1 else unionRanges r1 r2 let rangeOfDecls2 f decls = - match decls |> List.map (f >> (fun (d:FSharpNavigationDeclarationItem) -> d.bodyRange)) with + match decls |> List.map (f >> (fun (d:NavigationItem) -> d.bodyRange)) with | hd :: tl -> tl |> List.fold unionRangesChecked hd | [] -> range.Zero @@ -90,8 +93,8 @@ module NavigationImpl = let fldspecRange fldspec = match fldspec with - | UnionCaseFields(flds) -> flds |> List.fold (fun st (Field(_, _, _, _, _, _, _, m)) -> unionRangesChecked m st) range.Zero - | UnionCaseFullType(ty, _) -> ty.Range + | SynUnionCaseKind.Fields(flds) -> flds |> List.fold (fun st (SynField(_, _, _, _, _, _, _, m)) -> unionRangesChecked m st) range.Zero + | SynUnionCaseKind.FullType(ty, _) -> ty.Range let bodyRange mb decls = unionRangesChecked (rangeOfDecls decls) mb @@ -116,23 +119,23 @@ module NavigationImpl = // Create declaration (for the left dropdown) let createDeclLid(baseName, lid, kind, baseGlyph, m, bodym, nested, enclosingEntityKind, isAbstract, access) = let name = (if baseName <> "" then baseName + "." else "") + (textOfLid lid) - FSharpNavigationDeclarationItem.Create + NavigationItem.Create (name, kind, baseGlyph, m, bodym, false, enclosingEntityKind, isAbstract, access), (addItemName name), nested let createDecl(baseName, id:Ident, kind, baseGlyph, m, bodym, nested, enclosingEntityKind, isAbstract, access) = let name = (if baseName <> "" then baseName + "." else "") + (id.idText) - FSharpNavigationDeclarationItem.Create + NavigationItem.Create (name, kind, baseGlyph, m, bodym, false, enclosingEntityKind, isAbstract, access), (addItemName name), nested // Create member-kind-of-thing for the right dropdown let createMemberLid(lid, kind, baseGlyph, m, enclosingEntityKind, isAbstract, access) = - FSharpNavigationDeclarationItem.Create(textOfLid lid, kind, baseGlyph, m, m, false, enclosingEntityKind, isAbstract, access), (addItemName(textOfLid lid)) + NavigationItem.Create(textOfLid lid, kind, baseGlyph, m, m, false, enclosingEntityKind, isAbstract, access), (addItemName(textOfLid lid)) let createMember(id:Ident, kind, baseGlyph, m, enclosingEntityKind, isAbstract, access) = - FSharpNavigationDeclarationItem.Create(id.idText, kind, baseGlyph, m, m, false, enclosingEntityKind, isAbstract, access), (addItemName(id.idText)) + NavigationItem.Create(id.idText, kind, baseGlyph, m, m, false, enclosingEntityKind, isAbstract, access), (addItemName(id.idText)) // Process let-binding - let processBinding isMember enclosingEntityKind isAbstract (Binding(_, _, _, _, _, _, SynValData(memberOpt, _, _), synPat, _, synExpr, _, _)) = + let processBinding isMember enclosingEntityKind isAbstract (SynBinding(_, _, _, _, _, _, SynValData(memberOpt, _, _), synPat, _, synExpr, _, _)) = let m = match synExpr with | SynExpr.Typed (e, _, _) -> e.Range // fix range for properties with type annotations @@ -142,13 +145,13 @@ module NavigationImpl = | SynPat.LongIdent(longDotId=LongIdentWithDots(lid,_); accessibility=access), Some(flags) when isMember -> let icon, kind = match flags.MemberKind with - | MemberKind.ClassConstructor - | MemberKind.Constructor - | MemberKind.Member -> - (if flags.IsOverrideOrExplicitImpl then FSharpGlyph.OverridenMethod else FSharpGlyph.Method), MethodDecl - | MemberKind.PropertyGetSet - | MemberKind.PropertySet - | MemberKind.PropertyGet -> FSharpGlyph.Property, PropertyDecl + | SynMemberKind.ClassConstructor + | SynMemberKind.Constructor + | SynMemberKind.Member -> + (if flags.IsOverrideOrExplicitImpl then FSharpGlyph.OverridenMethod else FSharpGlyph.Method), NavigationItemKind.Method + | SynMemberKind.PropertyGetSet + | SynMemberKind.PropertySet + | SynMemberKind.PropertyGet -> FSharpGlyph.Property, NavigationItemKind.Property let lidShow, rangeMerge = match lid with | _thisVar :: nm :: _ -> (List.tail lid, nm.idRange) @@ -156,66 +159,66 @@ module NavigationImpl = | _ -> (lid, m) [ createMemberLid(lidShow, kind, icon, unionRanges rangeMerge m, enclosingEntityKind, isAbstract, access) ] | SynPat.LongIdent(LongIdentWithDots(lid,_), _, _, _, access, _), _ -> - [ createMemberLid(lid, FieldDecl, FSharpGlyph.Field, unionRanges (List.head lid).idRange m, enclosingEntityKind, isAbstract, access) ] - | SynPat.Named(_, id, _, access, _), _ -> + [ createMemberLid(lid, NavigationItemKind.Field, FSharpGlyph.Field, unionRanges (List.head lid).idRange m, enclosingEntityKind, isAbstract, access) ] + | SynPat.Named (id, _, access, _), _ | SynPat.As(_, SynPat.Named (id, _, access, _), _), _ -> let glyph = if isMember then FSharpGlyph.Method else FSharpGlyph.Field - [ createMember(id, FieldDecl, glyph, unionRanges id.idRange m, enclosingEntityKind, isAbstract, access) ] + [ createMember(id, NavigationItemKind.Field, glyph, unionRanges id.idRange m, enclosingEntityKind, isAbstract, access) ] | _ -> [] // Process a class declaration or F# type declaration - let rec processExnDefnRepr baseName nested (SynExceptionDefnRepr(_, (UnionCase(_, id, fldspec, _, _, _)), _, _, access, m)) = + let rec processExnDefnRepr baseName nested (SynExceptionDefnRepr(_, (SynUnionCase(_, id, fldspec, _, _, _)), _, _, access, m)) = // Exception declaration - [ createDecl(baseName, id, ExnDecl, FSharpGlyph.Exception, m, fldspecRange fldspec, nested, FSharpEnclosingEntityKind.Exception, false, access) ] + [ createDecl(baseName, id, NavigationItemKind.Exception, FSharpGlyph.Exception, m, fldspecRange fldspec, nested, NavigationEntityKind.Exception, false, access) ] // Process a class declaration or F# type declaration and processExnDefn baseName (SynExceptionDefn(repr, membDefns, _)) = - let nested = processMembers membDefns FSharpEnclosingEntityKind.Exception |> snd + let nested = processMembers membDefns NavigationEntityKind.Exception |> snd processExnDefnRepr baseName nested repr - and processTycon baseName (TypeDefn(ComponentInfo(_, _, _, lid, _, _, access, _), repr, membDefns, m)) = - let topMembers = processMembers membDefns FSharpEnclosingEntityKind.Class |> snd + and processTycon baseName (SynTypeDefn(SynComponentInfo(_, _, _, lid, _, _, access, _), repr, membDefns, _, m)) = + let topMembers = processMembers membDefns NavigationEntityKind.Class |> snd match repr with | SynTypeDefnRepr.Exception repr -> processExnDefnRepr baseName [] repr | SynTypeDefnRepr.ObjectModel(_, membDefns, mb) -> // F# class declaration - let members = processMembers membDefns FSharpEnclosingEntityKind.Class |> snd + let members = processMembers membDefns NavigationEntityKind.Class |> snd let nested = members@topMembers - ([ createDeclLid(baseName, lid, TypeDecl, FSharpGlyph.Class, m, bodyRange mb nested, nested, FSharpEnclosingEntityKind.Class, false, access) ]: ((FSharpNavigationDeclarationItem * int * _) list)) + ([ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Class, m, bodyRange mb nested, nested, NavigationEntityKind.Class, false, access) ]: ((NavigationItem * int * _) list)) | SynTypeDefnRepr.Simple(simple, _) -> // F# type declaration match simple with | SynTypeDefnSimpleRepr.Union(_, cases, mb) -> let cases = - [ for (UnionCase(_, id, fldspec, _, _, _)) in cases -> - createMember(id, OtherDecl, FSharpGlyph.Struct, unionRanges (fldspecRange fldspec) id.idRange, FSharpEnclosingEntityKind.DU, false, access) ] + [ for (SynUnionCase(_, id, fldspec, _, _, _)) in cases -> + createMember(id, NavigationItemKind.Other, FSharpGlyph.Struct, unionRanges (fldspecRange fldspec) id.idRange, NavigationEntityKind.Union, false, access) ] let nested = cases@topMembers - [ createDeclLid(baseName, lid, TypeDecl, FSharpGlyph.Union, m, bodyRange mb nested, nested, FSharpEnclosingEntityKind.DU, false, access) ] + [ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Union, m, bodyRange mb nested, nested, NavigationEntityKind.Union, false, access) ] | SynTypeDefnSimpleRepr.Enum(cases, mb) -> let cases = - [ for (EnumCase(_, id, _, _, m)) in cases -> - createMember(id, FieldDecl, FSharpGlyph.EnumMember, m, FSharpEnclosingEntityKind.Enum, false, access) ] + [ for (SynEnumCase(_, id, _, _, _, m)) in cases -> + createMember(id, NavigationItemKind.Field, FSharpGlyph.EnumMember, m, NavigationEntityKind.Enum, false, access) ] let nested = cases@topMembers - [ createDeclLid(baseName, lid, TypeDecl, FSharpGlyph.Enum, m, bodyRange mb nested, nested, FSharpEnclosingEntityKind.Enum, false, access) ] + [ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Enum, m, bodyRange mb nested, nested, NavigationEntityKind.Enum, false, access) ] | SynTypeDefnSimpleRepr.Record(_, fields, mb) -> let fields = - [ for (Field(_, _, id, _, _, _, _, m)) in fields do + [ for (SynField(_, _, id, _, _, _, _, m)) in fields do match id with | Some ident -> - yield createMember(ident, FieldDecl, FSharpGlyph.Field, m, FSharpEnclosingEntityKind.Record, false, access) + yield createMember(ident, NavigationItemKind.Field, FSharpGlyph.Field, m, NavigationEntityKind.Record, false, access) | _ -> () ] let nested = fields@topMembers - [ createDeclLid(baseName, lid, TypeDecl, FSharpGlyph.Type, m, bodyRange mb nested, nested, FSharpEnclosingEntityKind.Record, false, access) ] + [ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Type, m, bodyRange mb nested, nested, NavigationEntityKind.Record, false, access) ] | SynTypeDefnSimpleRepr.TypeAbbrev(_, _, mb) -> - [ createDeclLid(baseName, lid, TypeDecl, FSharpGlyph.Typedef, m, bodyRange mb topMembers, topMembers, FSharpEnclosingEntityKind.Class, false, access) ] + [ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Typedef, m, bodyRange mb topMembers, topMembers, NavigationEntityKind.Class, false, access) ] - //| SynTypeDefnSimpleRepr.General of TyconKind * (SynType * range * ident option) list * (valSpfn * MemberFlags) list * fieldDecls * bool * bool * range - //| SynTypeDefnSimpleRepr.LibraryOnlyILAssembly of ILType * range - //| TyconCore_repr_hidden of range + //| SynTypeDefnSimpleRepr.General of TyconKind * (SynType * Range * ident option) list * (valSpfn * MemberFlags) list * fieldDecls * bool * bool * Range + //| SynTypeDefnSimpleRepr.LibraryOnlyILAssembly of ILType * Range + //| TyconCore_repr_hidden of Range | _ -> [] // Returns class-members for the right dropdown - and processMembers members enclosingEntityKind : (range * list) = + and processMembers members enclosingEntityKind : (range * list) = let members = members |> List.groupBy (fun x -> x.Range) @@ -226,19 +229,19 @@ module NavigationImpl = match memb with | SynMemberDefn.LetBindings(binds, _, _, _) -> List.collect (processBinding false enclosingEntityKind false) binds | SynMemberDefn.Member(bind, _) -> processBinding true enclosingEntityKind false bind - | SynMemberDefn.ValField(Field(_, _, Some(rcid), _, _, _, access, range), _) -> - [ createMember(rcid, FieldDecl, FSharpGlyph.Field, range, enclosingEntityKind, false, access) ] + | SynMemberDefn.ValField(SynField(_, _, Some(rcid), _, _, _, access, range), _) -> + [ createMember(rcid, NavigationItemKind.Field, FSharpGlyph.Field, range, enclosingEntityKind, false, access) ] | SynMemberDefn.AutoProperty(_attribs,_isStatic,id,_tyOpt,_propKind,_,_xmlDoc, access,_synExpr, _, _) -> - [ createMember(id, FieldDecl, FSharpGlyph.Field, id.idRange, enclosingEntityKind, false, access) ] - | SynMemberDefn.AbstractSlot(ValSpfn(_, id, _, ty, _, _, _, _, access, _, _), _, _) -> - [ createMember(id, MethodDecl, FSharpGlyph.OverridenMethod, ty.Range, enclosingEntityKind, true, access) ] + [ createMember(id, NavigationItemKind.Field, FSharpGlyph.Field, id.idRange, enclosingEntityKind, false, access) ] + | SynMemberDefn.AbstractSlot(SynValSig(_, id, _, ty, _, _, _, _, access, _, _), _, _) -> + [ createMember(id, NavigationItemKind.Method, FSharpGlyph.OverridenMethod, ty.Range, enclosingEntityKind, true, access) ] | SynMemberDefn.NestedType _ -> failwith "tycon as member????" //processTycon tycon | SynMemberDefn.Interface(_, Some(membs), _) -> processMembers membs enclosingEntityKind |> snd | _ -> [] // can happen if one is a getter and one is a setter - | [SynMemberDefn.Member(memberDefn=Binding(headPat=SynPat.LongIdent(lid1, Some(info1),_,_,_,_)) as binding1) - SynMemberDefn.Member(memberDefn=Binding(headPat=SynPat.LongIdent(lid2, Some(info2),_,_,_,_)) as binding2)] -> + | [SynMemberDefn.Member(memberDefn=SynBinding(headPat=SynPat.LongIdent(lid1, Some(info1),_,_,_,_)) as binding1) + SynMemberDefn.Member(memberDefn=SynBinding(headPat=SynPat.LongIdent(lid2, Some(info2),_,_,_,_)) as binding2)] -> // ensure same long id assert((lid1.Lid,lid2.Lid) ||> List.forall2 (fun x y -> x.idText = y.idText)) // ensure one is getter, other is setter @@ -255,23 +258,23 @@ module NavigationImpl = // Process declarations in a module that belong to the right drop-down (let bindings) let processNestedDeclarations decls = decls |> List.collect (function - | SynModuleDecl.Let(_, binds, _) -> List.collect (processBinding false FSharpEnclosingEntityKind.Module false) binds + | SynModuleDecl.Let(_, binds, _) -> List.collect (processBinding false NavigationEntityKind.Module false) binds | _ -> []) // Process declarations nested in a module that should be displayed in the left dropdown // (such as type declarations, nested modules etc.) - let rec processFSharpNavigationTopLevelDeclarations(baseName, decls) = decls |> List.collect (function + let rec processNavigationTopLevelDeclarations(baseName, decls) = decls |> List.collect (function | SynModuleDecl.ModuleAbbrev(id, lid, m) -> - [ createDecl(baseName, id, ModuleDecl, FSharpGlyph.Module, m, rangeOfLid lid, [], FSharpEnclosingEntityKind.Namespace, false, None) ] + [ createDecl(baseName, id, NavigationItemKind.Module, FSharpGlyph.Module, m, rangeOfLid lid, [], NavigationEntityKind.Namespace, false, None) ] - | SynModuleDecl.NestedModule(ComponentInfo(_, _, _, lid, _, _, access, _), _isRec, decls, _, m) -> + | SynModuleDecl.NestedModule(SynComponentInfo(_, _, _, lid, _, _, access, _), _isRec, decls, _, m) -> // Find let bindings (for the right dropdown) let nested = processNestedDeclarations(decls) let newBaseName = (if (baseName = "") then "" else baseName+".") + (textOfLid lid) // Get nested modules and types (for the left dropdown) - let other = processFSharpNavigationTopLevelDeclarations(newBaseName, decls) - createDeclLid(baseName, lid, ModuleDecl, FSharpGlyph.Module, m, unionRangesChecked (rangeOfDecls nested) (moduleRange (rangeOfLid lid) other), nested, FSharpEnclosingEntityKind.Module, false, access) :: other + let other = processNavigationTopLevelDeclarations(newBaseName, decls) + createDeclLid(baseName, lid, NavigationItemKind.Module, FSharpGlyph.Module, m, unionRangesChecked (rangeOfDecls nested) (moduleRange (rangeOfLid lid) other), nested, NavigationEntityKind.Module, false, access) :: other | SynModuleDecl.Types(tydefs, _) -> tydefs |> List.collect (processTycon baseName) | SynModuleDecl.Exception (defn,_) -> processExnDefn baseName defn @@ -286,18 +289,18 @@ module NavigationImpl = // Find let bindings (for the right dropdown) let nested = processNestedDeclarations(decls) // Get nested modules and types (for the left dropdown) - let other = processFSharpNavigationTopLevelDeclarations(baseName, decls) + let other = processNavigationTopLevelDeclarations(baseName, decls) // Create explicitly - it can be 'single top level' thing that is hidden match id with | [] -> other | _ -> let decl = - FSharpNavigationDeclarationItem.Create - (textOfLid id, (if kind.IsModule then ModuleFileDecl else NamespaceDecl), + NavigationItem.Create + (textOfLid id, (if kind.IsModule then NavigationItemKind.ModuleFile else NavigationItemKind.Namespace), FSharpGlyph.Module, m, unionRangesChecked (rangeOfDecls nested) (moduleRange (rangeOfLid id) other), - singleTopLevel, FSharpEnclosingEntityKind.Module, false, access), (addItemName(textOfLid id)), nested + singleTopLevel, NavigationEntityKind.Module, false, access), (addItemName(textOfLid id)), nested decl :: other) let items = @@ -308,7 +311,7 @@ module NavigationImpl = nest |> Array.sortInPlaceWith (fun a b -> compare a.Name b.Name) { Declaration = d.WithUniqueName(uniqueName d.Name idx); Nested = nest } ) items |> Array.sortInPlaceWith (fun a b -> compare a.Declaration.Name b.Declaration.Name) - new FSharpNavigationItems(items) + new NavigationItems(items) /// Get information for signature file let getNavigationFromSigFile (modules: SynModuleOrNamespaceSig list) = @@ -325,26 +328,26 @@ module NavigationImpl = // Create declaration (for the left dropdown) let createDeclLid(baseName, lid, kind, baseGlyph, m, bodym, nested, enclosingEntityKind, isAbstract, access) = let name = (if baseName <> "" then baseName + "." else "") + (textOfLid lid) - FSharpNavigationDeclarationItem.Create + NavigationItem.Create (name, kind, baseGlyph, m, bodym, false, enclosingEntityKind, isAbstract, access), (addItemName name), nested let createDecl(baseName, id:Ident, kind, baseGlyph, m, bodym, nested, enclosingEntityKind, isAbstract, access) = let name = (if baseName <> "" then baseName + "." else "") + (id.idText) - FSharpNavigationDeclarationItem.Create + NavigationItem.Create (name, kind, baseGlyph, m, bodym, false, enclosingEntityKind, isAbstract, access), (addItemName name), nested let createMember(id:Ident, kind, baseGlyph, m, enclosingEntityKind, isAbstract, access) = - FSharpNavigationDeclarationItem.Create(id.idText, kind, baseGlyph, m, m, false, enclosingEntityKind, isAbstract, access), (addItemName(id.idText)) + NavigationItem.Create(id.idText, kind, baseGlyph, m, m, false, enclosingEntityKind, isAbstract, access), (addItemName(id.idText)) - let rec processExnRepr baseName nested (SynExceptionDefnRepr(_, (UnionCase(_, id, fldspec, _, _, _)), _, _, access, m)) = + let rec processExnRepr baseName nested (SynExceptionDefnRepr(_, (SynUnionCase(_, id, fldspec, _, _, _)), _, _, access, m)) = // Exception declaration - [ createDecl(baseName, id, ExnDecl, FSharpGlyph.Exception, m, fldspecRange fldspec, nested, FSharpEnclosingEntityKind.Exception, false, access) ] + [ createDecl(baseName, id, NavigationItemKind.Exception, FSharpGlyph.Exception, m, fldspecRange fldspec, nested, NavigationEntityKind.Exception, false, access) ] and processExnSig baseName (SynExceptionSig(repr, memberSigs, _)) = let nested = processSigMembers memberSigs processExnRepr baseName nested repr - and processTycon baseName (TypeDefnSig(ComponentInfo(_, _, _, lid, _, _, access, _), repr, membDefns, m)) = + and processTycon baseName (SynTypeDefnSig(SynComponentInfo(_, _, _, lid, _, _, access, _), repr, membDefns, m)) = let topMembers = processSigMembers membDefns match repr with | SynTypeDefnSigRepr.Exception repr -> processExnRepr baseName [] repr @@ -352,71 +355,71 @@ module NavigationImpl = // F# class declaration let members = processSigMembers membDefns let nested = members @ topMembers - ([ createDeclLid(baseName, lid, TypeDecl, FSharpGlyph.Class, m, bodyRange mb nested, nested, FSharpEnclosingEntityKind.Class, false, access) ]: ((FSharpNavigationDeclarationItem * int * _) list)) + ([ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Class, m, bodyRange mb nested, nested, NavigationEntityKind.Class, false, access) ]: ((NavigationItem * int * _) list)) | SynTypeDefnSigRepr.Simple(simple, _) -> // F# type declaration match simple with | SynTypeDefnSimpleRepr.Union(_, cases, mb) -> let cases = - [ for (UnionCase(_, id, fldspec, _, _, _)) in cases -> - createMember(id, OtherDecl, FSharpGlyph.Struct, unionRanges (fldspecRange fldspec) id.idRange, FSharpEnclosingEntityKind.DU, false, access) ] + [ for (SynUnionCase(_, id, fldspec, _, _, _)) in cases -> + createMember(id, NavigationItemKind.Other, FSharpGlyph.Struct, unionRanges (fldspecRange fldspec) id.idRange, NavigationEntityKind.Union, false, access) ] let nested = cases@topMembers - [ createDeclLid(baseName, lid, TypeDecl, FSharpGlyph.Union, m, bodyRange mb nested, nested, FSharpEnclosingEntityKind.DU, false, access) ] + [ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Union, m, bodyRange mb nested, nested, NavigationEntityKind.Union, false, access) ] | SynTypeDefnSimpleRepr.Enum(cases, mb) -> let cases = - [ for (EnumCase(_, id, _, _, m)) in cases -> - createMember(id, FieldDecl, FSharpGlyph.EnumMember, m, FSharpEnclosingEntityKind.Enum, false, access) ] + [ for (SynEnumCase(_, id, _, _, _, m)) in cases -> + createMember(id, NavigationItemKind.Field, FSharpGlyph.EnumMember, m, NavigationEntityKind.Enum, false, access) ] let nested = cases@topMembers - [ createDeclLid(baseName, lid, TypeDecl, FSharpGlyph.Enum, m, bodyRange mb nested, nested, FSharpEnclosingEntityKind.Enum, false, access) ] + [ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Enum, m, bodyRange mb nested, nested, NavigationEntityKind.Enum, false, access) ] | SynTypeDefnSimpleRepr.Record(_, fields, mb) -> let fields = - [ for (Field(_, _, id, _, _, _, _, m)) in fields do + [ for (SynField(_, _, id, _, _, _, _, m)) in fields do match id with | Some ident -> - yield createMember(ident, FieldDecl, FSharpGlyph.Field, m, FSharpEnclosingEntityKind.Record, false, access) + yield createMember(ident, NavigationItemKind.Field, FSharpGlyph.Field, m, NavigationEntityKind.Record, false, access) | _ -> () ] let nested = fields@topMembers - [ createDeclLid(baseName, lid, TypeDecl, FSharpGlyph.Type, m, bodyRange mb nested, nested, FSharpEnclosingEntityKind.Record, false, access) ] + [ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Type, m, bodyRange mb nested, nested, NavigationEntityKind.Record, false, access) ] | SynTypeDefnSimpleRepr.TypeAbbrev(_, _, mb) -> - [ createDeclLid(baseName, lid, TypeDecl, FSharpGlyph.Typedef, m, bodyRange mb topMembers, topMembers, FSharpEnclosingEntityKind.Class, false, access) ] + [ createDeclLid(baseName, lid, NavigationItemKind.Type, FSharpGlyph.Typedef, m, bodyRange mb topMembers, topMembers, NavigationEntityKind.Class, false, access) ] //| SynTypeDefnSimpleRepr.General of TyconKind * (SynType * range * ident option) list * (valSpfn * MemberFlags) list * fieldDecls * bool * bool * range //| SynTypeDefnSimpleRepr.LibraryOnlyILAssembly of ILType * range //| TyconCore_repr_hidden of range | _ -> [] - and processSigMembers (members: SynMemberSig list): list = + and processSigMembers (members: SynMemberSig list): list = [ for memb in members do match memb with - | SynMemberSig.Member(SynValSig.ValSpfn(_, id, _, _, _, _, _, _, access, _, m), _, _) -> - yield createMember(id, MethodDecl, FSharpGlyph.Method, m, FSharpEnclosingEntityKind.Class, false, access) - | SynMemberSig.ValField(Field(_, _, Some(rcid), ty, _, _, access, _), _) -> - yield createMember(rcid, FieldDecl, FSharpGlyph.Field, ty.Range, FSharpEnclosingEntityKind.Class, false, access) + | SynMemberSig.Member(SynValSig.SynValSig(_, id, _, _, _, _, _, _, access, _, m), _, _) -> + yield createMember(id, NavigationItemKind.Method, FSharpGlyph.Method, m, NavigationEntityKind.Class, false, access) + | SynMemberSig.ValField(SynField(_, _, Some(rcid), ty, _, _, access, _), _) -> + yield createMember(rcid, NavigationItemKind.Field, FSharpGlyph.Field, ty.Range, NavigationEntityKind.Class, false, access) | _ -> () ] // Process declarations in a module that belong to the right drop-down (let bindings) let processNestedSigDeclarations decls = decls |> List.collect (function - | SynModuleSigDecl.Val(SynValSig.ValSpfn(_, id, _, _, _, _, _, _, access, _, m), _) -> - [ createMember(id, MethodDecl, FSharpGlyph.Method, m, FSharpEnclosingEntityKind.Module, false, access) ] + | SynModuleSigDecl.Val(SynValSig.SynValSig(_, id, _, _, _, _, _, _, access, _, m), _) -> + [ createMember(id, NavigationItemKind.Method, FSharpGlyph.Method, m, NavigationEntityKind.Module, false, access) ] | _ -> [] ) // Process declarations nested in a module that should be displayed in the left dropdown // (such as type declarations, nested modules etc.) - let rec processFSharpNavigationTopLevelSigDeclarations(baseName, decls) = + let rec processNavigationTopLevelSigDeclarations(baseName, decls) = decls |> List.collect (function | SynModuleSigDecl.ModuleAbbrev(id, lid, m) -> - [ createDecl(baseName, id, ModuleDecl, FSharpGlyph.Module, m, rangeOfLid lid, [], FSharpEnclosingEntityKind.Module, false, None) ] + [ createDecl(baseName, id, NavigationItemKind.Module, FSharpGlyph.Module, m, rangeOfLid lid, [], NavigationEntityKind.Module, false, None) ] - | SynModuleSigDecl.NestedModule(ComponentInfo(_, _, _, lid, _, _, access, _), _, decls, m) -> + | SynModuleSigDecl.NestedModule(SynComponentInfo(_, _, _, lid, _, _, access, _), _, decls, m) -> // Find let bindings (for the right dropdown) let nested = processNestedSigDeclarations(decls) let newBaseName = (if baseName = "" then "" else baseName + ".") + (textOfLid lid) // Get nested modules and types (for the left dropdown) - let other = processFSharpNavigationTopLevelSigDeclarations(newBaseName, decls) - createDeclLid(baseName, lid, ModuleDecl, FSharpGlyph.Module, m, unionRangesChecked (rangeOfDecls nested) (moduleRange (rangeOfLid lid) other), nested, FSharpEnclosingEntityKind.Module, false, access) :: other + let other = processNavigationTopLevelSigDeclarations(newBaseName, decls) + createDeclLid(baseName, lid, NavigationItemKind.Module, FSharpGlyph.Module, m, unionRangesChecked (rangeOfDecls nested) (moduleRange (rangeOfLid lid) other), nested, NavigationEntityKind.Module, false, access) :: other | SynModuleSigDecl.Types(tydefs, _) -> tydefs |> List.collect (processTycon baseName) | SynModuleSigDecl.Exception (defn,_) -> processExnSig baseName defn @@ -431,15 +434,15 @@ module NavigationImpl = // Find let bindings (for the right dropdown) let nested = processNestedSigDeclarations(decls) // Get nested modules and types (for the left dropdown) - let other = processFSharpNavigationTopLevelSigDeclarations(baseName, decls) + let other = processNavigationTopLevelSigDeclarations(baseName, decls) // Create explicitly - it can be 'single top level' thing that is hidden let decl = - FSharpNavigationDeclarationItem.Create - (textOfLid id, (if kind.IsModule then ModuleFileDecl else NamespaceDecl), + NavigationItem.Create + (textOfLid id, (if kind.IsModule then NavigationItemKind.ModuleFile else NavigationItemKind.Namespace), FSharpGlyph.Module, m, unionRangesChecked (rangeOfDecls nested) (moduleRange (rangeOfLid id) other), - singleTopLevel, FSharpEnclosingEntityKind.Module, false, access), (addItemName(textOfLid id)), nested + singleTopLevel, NavigationEntityKind.Module, false, access), (addItemName(textOfLid id)), nested decl :: other) let items = @@ -452,56 +455,54 @@ module NavigationImpl = { Declaration = d.WithUniqueName(uniqueName d.Name idx); Nested = nest } ) items |> Array.sortInPlaceWith (fun a b -> compare a.Declaration.Name b.Declaration.Name) - new FSharpNavigationItems(items) + new NavigationItems(items) [] -module FSharpNavigation = +module Navigation = let getNavigation (parsedInput: ParsedInput) = match parsedInput with | ParsedInput.SigFile (ParsedSigFileInput (modules = modules)) -> NavigationImpl.getNavigationFromSigFile modules | ParsedInput.ImplFile (ParsedImplFileInput (modules = modules)) -> NavigationImpl.getNavigationFromImplFile modules - let empty = FSharpNavigationItems([||]) + let empty = NavigationItems([||]) [] -module NavigateTo = - open System - - [] - type NavigableItemKind = - | Module - | ModuleAbbreviation - | Exception - | Type - | ModuleValue - | Field - | Property - | Constructor - | Member - | EnumCase - | UnionCase - override x.ToString() = sprintf "%+A" x +type NavigableItemKind = + | Module + | ModuleAbbreviation + | Exception + | Type + | ModuleValue + | Field + | Property + | Constructor + | Member + | EnumCase + | UnionCase + override x.ToString() = sprintf "%+A" x - [] - type ContainerType = - | File - | Namespace - | Module - | Type - | Exception - - type Container = - { Type: ContainerType - Name: string } - - type NavigableItem = - { Name: string - Range: range - IsSignature: bool - Kind: NavigableItemKind - Container: Container } +[] +type NavigableContainerType = + | File + | Namespace + | Module + | Type + | Exception + +type NavigableContainer = + { Type: NavigableContainerType + Name: string } + +type NavigableItem = + { Name: string + Range: range + IsSignature: bool + Kind: NavigableItemKind + Container: NavigableContainer } - let getNavigableItems (parsedInput: ParsedInput) : NavigableItem [] = +[] +module NavigateTo = + let GetNavigableItems (parsedInput: ParsedInput) : NavigableItem [] = let rec lastInLid (lid: LongIdent) = match lid with | [x] -> Some x @@ -511,7 +512,7 @@ module NavigateTo = let formatLongIdent (lid: LongIdent) = lid |> List.map (fun id -> id.idText) |> String.concat "." let result = ResizeArray() - let addIdent kind (id: Ident) (isSignature: bool) (container: Container) = + let addIdent kind (id: Ident) (isSignature: bool) (container: NavigableContainer) = if not (String.IsNullOrEmpty id.idText) then let item = { Name = id.idText @@ -529,40 +530,40 @@ module NavigateTo = let addModuleAbbreviation (id: Ident) isSig container = addIdent NavigableItemKind.ModuleAbbreviation id isSig container - let addExceptionRepr (SynExceptionDefnRepr(_, UnionCase(_, id, _, _, _, _), _, _, _, _)) isSig container = + let addExceptionRepr (SynExceptionDefnRepr(_, SynUnionCase(_, id, _, _, _, _), _, _, _, _)) isSig container = addIdent NavigableItemKind.Exception id isSig container - { Type = ContainerType.Exception; Name = id.idText } + { Type = NavigableContainerType.Exception; Name = id.idText } - let addComponentInfo containerType kind (ComponentInfo(_, _, _, lid, _, _, _, _)) isSig container = + let addComponentInfo containerType kind (SynComponentInfo(_, _, _, lid, _, _, _, _)) isSig container = match lastInLid lid with | Some id -> addIdent kind id isSig container | _ -> () { Type = containerType; Name = formatLongIdent lid } - let addValSig kind (ValSpfn(_, id, _, _, _, _, _, _, _, _, _)) isSig container = + let addValSig kind (SynValSig(_, id, _, _, _, _, _, _, _, _, _)) isSig container = addIdent kind id isSig container - let addField(SynField.Field(_, _, id, _, _, _, _, _)) isSig container = + let addField(SynField(_, _, id, _, _, _, _, _)) isSig container = match id with | Some id -> addIdent NavigableItemKind.Field id isSig container | _ -> () - let addEnumCase(EnumCase(_, id, _, _, _)) isSig = + let addEnumCase(SynEnumCase(_, id, _, _, _, _)) isSig = addIdent NavigableItemKind.EnumCase id isSig - let addUnionCase(UnionCase(_, id, _, _, _, _)) isSig container = + let addUnionCase(SynUnionCase(_, id, _, _, _, _)) isSig container = addIdent NavigableItemKind.UnionCase id isSig container let mapMemberKind mk = match mk with - | MemberKind.ClassConstructor // ? - | MemberKind.Constructor -> NavigableItemKind.Constructor - | MemberKind.PropertyGet - | MemberKind.PropertySet - | MemberKind.PropertyGetSet -> NavigableItemKind.Property - | MemberKind.Member -> NavigableItemKind.Member + | SynMemberKind.ClassConstructor // ? + | SynMemberKind.Constructor -> NavigableItemKind.Constructor + | SynMemberKind.PropertyGet + | SynMemberKind.PropertySet + | SynMemberKind.PropertyGetSet -> NavigableItemKind.Property + | SynMemberKind.Member -> NavigableItemKind.Member - let addBinding (Binding(_, _, _, _, _, _, valData, headPat, _, _, _, _)) itemKind container = + let addBinding (SynBinding(_, _, _, _, _, _, valData, headPat, _, _, _, _)) itemKind container = let (SynValData(memberFlagsOpt, _, _)) = valData let kind = match itemKind with @@ -579,25 +580,25 @@ module NavigateTo = | SynPat.LongIdent(LongIdentWithDots([id], _), _, _, _, _, _) -> // functions addIdent kind id false container - | SynPat.Named(_, id, _, _, _) -> + | SynPat.Named (id, _, _, _) | SynPat.As(_, SynPat.Named (id, _, _, _), _) -> // values addIdent kind id false container | _ -> () - let addMember valSig (memberFlags: MemberFlags) isSig container = + let addMember valSig (memberFlags: SynMemberFlags) isSig container = let ctor = mapMemberKind memberFlags.MemberKind addValSig ctor valSig isSig container let rec walkSigFileInput (ParsedSigFileInput (fileName, _, _, _, moduleOrNamespaceList)) = for item in moduleOrNamespaceList do - walkSynModuleOrNamespaceSig item { Type = ContainerType.File; Name = fileName } + walkSynModuleOrNamespaceSig item { Type = NavigableContainerType.File; Name = fileName } and walkSynModuleOrNamespaceSig (SynModuleOrNamespaceSig(lid, _, kind, decls, _, _, _, _)) container = let isModule = kind.IsModule if isModule then addModule lid true container let container = - { Type = if isModule then ContainerType.Module else ContainerType.Namespace + { Type = if isModule then NavigableContainerType.Module else NavigableContainerType.Namespace Name = formatLongIdent lid } for decl in decls do walkSynModuleSigDecl decl container @@ -611,7 +612,7 @@ module NavigateTo = | SynModuleSigDecl.NamespaceFragment fragment -> walkSynModuleOrNamespaceSig fragment container | SynModuleSigDecl.NestedModule(componentInfo, _, nestedDecls, _) -> - let container = addComponentInfo ContainerType.Module NavigableItemKind.Module componentInfo true container + let container = addComponentInfo NavigableContainerType.Module NavigableItemKind.Module componentInfo true container for decl in nestedDecls do walkSynModuleSigDecl decl container | SynModuleSigDecl.Types(types, _) -> @@ -622,8 +623,8 @@ module NavigateTo = | SynModuleSigDecl.HashDirective _ | SynModuleSigDecl.Open _ -> () - and walkSynTypeDefnSig (TypeDefnSig(componentInfo, repr, members, _)) container = - let container = addComponentInfo ContainerType.Type NavigableItemKind.Type componentInfo true container + and walkSynTypeDefnSig (SynTypeDefnSig(componentInfo, repr, members, _)) container = + let container = addComponentInfo NavigableContainerType.Type NavigableItemKind.Type componentInfo true container for m in members do walkSynMemberSig m container match repr with @@ -646,7 +647,7 @@ module NavigateTo = | SynMemberSig.Interface _ -> () and walkImplFileInput (ParsedImplFileInput (fileName = fileName; modules = moduleOrNamespaceList)) = - let container = { Type = ContainerType.File; Name = fileName } + let container = { Type = NavigableContainerType.File; Name = fileName } for item in moduleOrNamespaceList do walkSynModuleOrNamespace item container @@ -655,7 +656,7 @@ module NavigateTo = if isModule then addModule lid false container let container = - { Type = if isModule then ContainerType.Module else ContainerType.Namespace + { Type = if isModule then NavigableContainerType.Module else NavigableContainerType.Namespace Name = formatLongIdent lid } for decl in decls do walkSynModuleDecl decl container @@ -674,7 +675,7 @@ module NavigateTo = | SynModuleDecl.NamespaceFragment(fragment) -> walkSynModuleOrNamespace fragment container | SynModuleDecl.NestedModule(componentInfo, _, modules, _, _) -> - let container = addComponentInfo ContainerType.Module NavigableItemKind.Module componentInfo false container + let container = addComponentInfo NavigableContainerType.Module NavigableItemKind.Module componentInfo false container for m in modules do walkSynModuleDecl m container | SynModuleDecl.Types(typeDefs, _range) -> @@ -685,8 +686,8 @@ module NavigateTo = | SynModuleDecl.HashDirective _ | SynModuleDecl.Open _ -> () - and walkSynTypeDefn(TypeDefn(componentInfo, representation, members, _)) container = - let container = addComponentInfo ContainerType.Type NavigableItemKind.Type componentInfo false container + and walkSynTypeDefn(SynTypeDefn(componentInfo, representation, members, _, _)) container = + let container = addComponentInfo NavigableContainerType.Type NavigableItemKind.Type componentInfo false container walkSynTypeDefnRepr representation container for m in members do walkSynMemberDefn m container diff --git a/src/fsharp/service/ServiceNavigation.fsi b/src/fsharp/service/ServiceNavigation.fsi index 297880e77e4..da4912ba818 100755 --- a/src/fsharp/service/ServiceNavigation.fsi +++ b/src/fsharp/service/ServiceNavigation.fsi @@ -5,25 +5,27 @@ // type checking and intellisense-like environment-reporting. //---------------------------------------------------------------------------- -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.EditorServices -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open System +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text /// Indicates a kind of item to show in an F# navigation bar -type public FSharpNavigationDeclarationItemKind = - | NamespaceDecl - | ModuleFileDecl - | ExnDecl - | ModuleDecl - | TypeDecl - | MethodDecl - | PropertyDecl - | FieldDecl - | OtherDecl +[] +type public NavigationItemKind = + | Namespace + | ModuleFile + | Exception + | Module + | Type + | Method + | Property + | Field + | Other [] -type public FSharpEnclosingEntityKind = +type public NavigationEntityKind = | Namespace | Module | Class @@ -31,73 +33,82 @@ type public FSharpEnclosingEntityKind = | Interface | Record | Enum - | DU + | Union /// Represents an item to be displayed in the navigation bar [] -type public FSharpNavigationDeclarationItem = - member Name : string - member UniqueName : string - member Glyph : FSharpGlyph - member Kind : FSharpNavigationDeclarationItemKind - member Range : range - member BodyRange : range - member IsSingleTopLevel : bool - member EnclosingEntityKind: FSharpEnclosingEntityKind +type public NavigationItem = + member Name: string + + member UniqueName: string + + member Glyph: FSharpGlyph + + member Kind: NavigationItemKind + + member Range: range + + member BodyRange: range + + member IsSingleTopLevel: bool + + member EnclosingEntityKind: NavigationEntityKind + member IsAbstract: bool - member Access : SynAccess option + + member Access: SynAccess option /// Represents top-level declarations (that should be in the type drop-down) /// with nested declarations (that can be shown in the member drop-down) [] -type public FSharpNavigationTopLevelDeclaration = - { Declaration : FSharpNavigationDeclarationItem - Nested : FSharpNavigationDeclarationItem[] } +type public NavigationTopLevelDeclaration = + { Declaration: NavigationItem + Nested: NavigationItem[] } /// Represents result of 'GetNavigationItems' operation - this contains /// all the members and currently selected indices. First level correspond to /// types & modules and second level are methods etc. [] -type public FSharpNavigationItems = - member Declarations : FSharpNavigationTopLevelDeclaration[] +type public NavigationItems = + member Declarations: NavigationTopLevelDeclaration[] // Functionality to access navigable F# items. -module public FSharpNavigation = - val internal empty : FSharpNavigationItems - val getNavigation : ParsedInput -> FSharpNavigationItems +module public Navigation = + val internal empty: NavigationItems + val getNavigation: ParsedInput -> NavigationItems -module public NavigateTo = - [] - type NavigableItemKind = - | Module - | ModuleAbbreviation - | Exception - | Type - | ModuleValue - | Field - | Property - | Constructor - | Member - | EnumCase - | UnionCase - - [] - type ContainerType = - | File - | Namespace - | Module - | Type - | Exception - - type Container = - { Type: ContainerType - Name: string } +[] +type NavigableItemKind = + | Module + | ModuleAbbreviation + | Exception + | Type + | ModuleValue + | Field + | Property + | Constructor + | Member + | EnumCase + | UnionCase + +[] +type NavigableContainerType = + | File + | Namespace + | Module + | Type + | Exception + +type NavigableContainer = + { Type: NavigableContainerType + Name: string } - type NavigableItem = - { Name: string - Range: range - IsSignature: bool - Kind: NavigableItemKind - Container: Container } - - val getNavigableItems : ParsedInput -> NavigableItem [] +type NavigableItem = + { Name: string + Range: range + IsSignature: bool + Kind: NavigableItemKind + Container: NavigableContainer } + +module public NavigateTo = + val GetNavigableItems: ParsedInput -> NavigableItem [] diff --git a/src/fsharp/service/ServiceParamInfoLocations.fs b/src/fsharp/service/ServiceParamInfoLocations.fs index 19bd9c4b9bb..5ee35ad6a62 100755 --- a/src/fsharp/service/ServiceParamInfoLocations.fs +++ b/src/fsharp/service/ServiceParamInfoLocations.fs @@ -1,13 +1,15 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.EditorServices -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Position +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Syntax open FSharp.Compiler.SyntaxTreeOps -open FSharp.Compiler.Range [] -type FSharpNoteworthyParamInfoLocations(longId: string list, longIdRange: range, openParenLocation: pos, tupleEndLocations: pos list, isThereACloseParen: bool, namedParamNames: string option list) = +type ParameterLocations(longId: string list, longIdRange: range, openParenLocation: pos, tupleEndLocations: pos list, isThereACloseParen: bool, namedParamNames: string option list) = let tupleEndLocations = Array.ofList tupleEndLocations let namedParamNames = Array.ofList namedParamNames @@ -30,7 +32,7 @@ type FSharpNoteworthyParamInfoLocations(longId: string list, longIdRange: range, member this.NamedParamNames = namedParamNames [] -module internal NoteworthyParamInfoLocationsImpl = +module internal ParameterLocationsImpl = let isStaticArg (StripParenTypes synType) = match synType with @@ -85,7 +87,7 @@ module internal NoteworthyParamInfoLocationsImpl = let inner = traverseSynExpr synExpr match inner with | None -> - if AstTraversal.rangeContainsPosLeftEdgeExclusiveAndRightEdgeInclusive parenRange pos then + if SyntaxTraversal.rangeContainsPosLeftEdgeExclusiveAndRightEdgeInclusive parenRange pos then Found (parenRange.Start, [(parenRange.End, getNamedParamName synExpr)], rpRangeOpt.IsSome), None else NotFound, None @@ -102,7 +104,7 @@ module internal NoteworthyParamInfoLocationsImpl = let inner = traverseSynExpr synExpr match inner with | None -> - if AstTraversal.rangeContainsPosLeftEdgeExclusiveAndRightEdgeInclusive parenRange pos then + if SyntaxTraversal.rangeContainsPosLeftEdgeExclusiveAndRightEdgeInclusive 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) r, None @@ -122,14 +124,14 @@ module internal NoteworthyParamInfoLocationsImpl = handleSingleArg traverseSynExpr (pos, synExpr, parenRange, rpRangeOpt) | SynExpr.ArbitraryAfterError (_debugStr, range) -> // single argument when e.g. after open paren you hit EOF - if AstTraversal.rangeContainsPosEdgesExclusive range pos then + if SyntaxTraversal.rangeContainsPosEdgesExclusive range pos then let r = Found (range.Start, [(range.End, None)], false) r, None else NotFound, None | SynExpr.Const (SynConst.Unit, unitRange) -> - if AstTraversal.rangeContainsPosEdgesExclusive unitRange pos then + if SyntaxTraversal.rangeContainsPosEdgesExclusive unitRange pos then let r = Found (unitRange.Start, [(unitRange.End, None)], true) r, None else @@ -139,7 +141,7 @@ module internal NoteworthyParamInfoLocationsImpl = let inner = traverseSynExpr e match inner with | None -> - if AstTraversal.rangeContainsPosEdgesExclusive e.Range pos then + if SyntaxTraversal.rangeContainsPosEdgesExclusive e.Range pos then // any other expression doesn't start with parens, so if it was the target of an App, then it must be a single argument e.g. "f x" Found (e.Range.Start, [ (e.Range.End, None) ], false), Some inner else @@ -151,16 +153,16 @@ module internal NoteworthyParamInfoLocationsImpl = | SynType.App(StripParenTypes (SynType.LongIdent(LongIdentWithDots(lid, _) as lidwd)), Some(openm), args, commas, closemOpt, _pf, wholem) -> let lidm = lidwd.Range let betweenTheBrackets = mkRange wholem.FileName openm.Start wholem.End - if AstTraversal.rangeContainsPosEdgesExclusive betweenTheBrackets pos && args |> List.forall isStaticArg then + if SyntaxTraversal.rangeContainsPosEdgesExclusive betweenTheBrackets pos && args |> List.forall isStaticArg then let commasAndCloseParen = [ for c in commas -> c.End ] @ [ wholem.End ] - Some (FSharpNoteworthyParamInfoLocations(pathOfLid lid, lidm, openm.Start, commasAndCloseParen, closemOpt.IsSome, args |> List.map digOutIdentFromStaticArg)) + Some (ParameterLocations(pathOfLid lid, lidm, openm.Start, commasAndCloseParen, closemOpt.IsSome, args |> List.map digOutIdentFromStaticArg)) else None | _ -> None let traverseInput(pos, parseTree) = - AstTraversal.Traverse(pos, parseTree, { new AstTraversal.AstVisitorBase<_>() with + SyntaxTraversal.Traverse(pos, parseTree, { new SyntaxVisitorBase<_>() with member this.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) = let expr = expr // fix debug locals match expr with @@ -171,7 +173,7 @@ module internal NoteworthyParamInfoLocationsImpl = match constrArgsResult, cacheOpt with | Found(parenLoc, args, isThereACloseParen), _ -> let typeName = getTypeName synType - Some (FSharpNoteworthyParamInfoLocations(typeName, synType.Range, parenLoc, args |> List.map fst, isThereACloseParen, args |> List.map snd)) + Some (ParameterLocations(typeName, synType.Range, parenLoc, args |> List.map fst, isThereACloseParen, args |> List.map snd)) | NotFound, Some cache -> cache | _ -> @@ -187,10 +189,10 @@ module internal NoteworthyParamInfoLocationsImpl = | Some _ -> fResult | _ -> let typeArgsm = mkRange openm.FileName openm.Start wholem.End - if AstTraversal.rangeContainsPosEdgesExclusive typeArgsm pos then + if SyntaxTraversal.rangeContainsPosEdgesExclusive typeArgsm pos then // We found it, dig out ident match digOutIdentFromFuncExpr synExpr with - | Some(lid, lidRange) -> Some (FSharpNoteworthyParamInfoLocations(lid, lidRange, op.idRange.Start, [ wholem.End ], false, [])) + | Some(lid, lidRange) -> Some (ParameterLocations(lid, lidRange, op.idRange.Start, [ wholem.End ], false, [])) | None -> None else None @@ -215,7 +217,7 @@ module internal NoteworthyParamInfoLocationsImpl = // For now, we don't support infix operators. None else - Some (FSharpNoteworthyParamInfoLocations(lid, lidRange, parenLoc, args |> List.map fst, isThereACloseParen, args |> List.map snd)) + Some (ParameterLocations(lid, lidRange, parenLoc, args |> List.map fst, isThereACloseParen, args |> List.map snd)) | None -> None | NotFound, Some cache -> cache | _ -> traverseSynExpr synExpr2 @@ -226,39 +228,39 @@ module internal NoteworthyParamInfoLocationsImpl = | Some _ as r -> r | None -> let typeArgsm = mkRange openm.FileName openm.Start wholem.End - if AstTraversal.rangeContainsPosEdgesExclusive typeArgsm pos && tyArgs |> List.forall isStaticArg then + if SyntaxTraversal.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) + let r = ParameterLocations(["dummy"], synExpr.Range, openm.Start, commasAndCloseParen, closemOpt.IsSome, tyArgs |> List.map digOutIdentFromStaticArg) Some r else None | _ -> defaultTraverse expr - member this.VisitTypeAbbrev(tyAbbrevRhs, _m) = + member this.VisitTypeAbbrev(_path, tyAbbrevRhs, _m) = match tyAbbrevRhs with | StaticParameters pos loc -> Some loc | _ -> None - member this.VisitImplicitInherit(defaultTraverse, ty, expr, m) = + member this.VisitImplicitInherit(_path, defaultTraverse, ty, expr, m) = match defaultTraverse expr with | Some _ as r -> r | None -> let inheritm = mkRange m.FileName m.Start m.End - if AstTraversal.rangeContainsPosEdgesExclusive inheritm pos then + if SyntaxTraversal.rangeContainsPosEdgesExclusive inheritm pos then // inherit ty(expr) --- treat it like an application (constructor call) let xResult, _cacheOpt = searchSynArgExpr defaultTraverse pos expr match xResult with | Found(parenLoc, args, isThereACloseParen) -> // we found it, dig out ident let typeName = getTypeName ty - let r = FSharpNoteworthyParamInfoLocations(typeName, ty.Range, parenLoc, args |> List.map fst, isThereACloseParen, args |> List.map snd) + let r = ParameterLocations(typeName, ty.Range, parenLoc, args |> List.map fst, isThereACloseParen, args |> List.map snd) Some r | NotFound -> None else None }) -type FSharpNoteworthyParamInfoLocations with +type ParameterLocations with static member Find(pos, parseTree) = match traverseInput(pos, parseTree) with | Some nwpl as r -> @@ -304,7 +306,7 @@ module internal SynExprAppLocationsImpl = | _ -> None, Some inner let getAllCurriedArgsAtPosition pos parseTree = - AstTraversal.Traverse(pos, parseTree, { new AstTraversal.AstVisitorBase<_>() with + SyntaxTraversal.Traverse(pos, parseTree, { new SyntaxVisitorBase<_>() with member _.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) = match expr with | SynExpr.App (_exprAtomicFlag, _isInfix, funcExpr, argExpr, range) when posEq pos range.Start -> diff --git a/src/fsharp/service/ServiceParamInfoLocations.fsi b/src/fsharp/service/ServiceParamInfoLocations.fsi index 21a630fa1e4..77fa2b46326 100755 --- a/src/fsharp/service/ServiceParamInfoLocations.fsi +++ b/src/fsharp/service/ServiceParamInfoLocations.fsi @@ -5,14 +5,14 @@ // type checking and intellisense-like environment-reporting. //---------------------------------------------------------------------------- -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.EditorServices -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text /// Represents the locations relevant to activating parameter info in an IDE [] -type public FSharpNoteworthyParamInfoLocations = +type public ParameterLocations = /// The text of the long identifier prior to the open-parentheses member LongId : string list @@ -36,7 +36,7 @@ type public FSharpNoteworthyParamInfoLocations = member NamedParamNames : string option [] /// Find the information about parameter info locations at a particular source location - static member Find : pos * ParsedInput -> FSharpNoteworthyParamInfoLocations option + static member Find : pos * ParsedInput -> ParameterLocations option module internal SynExprAppLocationsImpl = val getAllCurriedArgsAtPosition: pos: pos -> parseTree: ParsedInput -> range list option diff --git a/src/fsharp/service/ServiceParseTreeWalk.fs b/src/fsharp/service/ServiceParseTreeWalk.fs index 219b8cdeb9b..18dfb6536f5 100755 --- a/src/fsharp/service/ServiceParseTreeWalk.fs +++ b/src/fsharp/service/ServiceParseTreeWalk.fs @@ -5,14 +5,130 @@ // type checking and intellisense-like environment-reporting. //-------------------------------------------------------------------------- -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.Syntax -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler +open FSharp.Compiler.Syntax open FSharp.Compiler.SyntaxTreeOps +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Position +open FSharp.Compiler.Text.Range + +/// used to track route during traversal AST +[] +type SyntaxNode = + | SynPat of SynPat + | SynType of SynType + | SynExpr of SynExpr + | SynModule of SynModuleDecl + | SynModuleOrNamespace of SynModuleOrNamespace + | SynTypeDefn of SynTypeDefn + | SynMemberDefn of SynMemberDefn + | SynMatchClause of SynMatchClause + | SynBinding of SynBinding + +type SyntaxVisitorPath = SyntaxNode list + +[] +type SyntaxVisitorBase<'T>() = + abstract VisitExpr: path: SyntaxVisitorPath * traverseSynExpr: (SynExpr -> 'T option) * defaultTraverse: (SynExpr -> 'T option) * synExpr: SynExpr -> 'T option + default _.VisitExpr(path: SyntaxVisitorPath, traverseSynExpr: (SynExpr -> 'T option), defaultTraverse: (SynExpr -> 'T option), synExpr: SynExpr) = + ignore (path, traverseSynExpr, defaultTraverse, synExpr) + None + + /// VisitTypeAbbrev(ty,m), defaults to ignoring this leaf of the AST + abstract VisitTypeAbbrev: path: SyntaxVisitorPath * synType: SynType * range: range -> 'T option + default _.VisitTypeAbbrev(path, synType, range) = + ignore (path, synType, range) + None + + /// VisitImplicitInherit(defaultTraverse,ty,expr,m), defaults to just visiting expr + abstract VisitImplicitInherit: path: SyntaxVisitorPath * defaultTraverse: (SynExpr -> 'T option) * inheritedType: SynType * synArgs: SynExpr * range: range -> 'T option + default _.VisitImplicitInherit(path, defaultTraverse, inheritedType, synArgs, range) = + ignore (path, inheritedType, range) + defaultTraverse synArgs + + /// VisitModuleDecl allows overriding module declaration behavior + abstract VisitModuleDecl: path: SyntaxVisitorPath * defaultTraverse: (SynModuleDecl -> 'T option) * synModuleDecl: SynModuleDecl -> 'T option + default _.VisitModuleDecl(path, defaultTraverse, synModuleDecl) = + ignore path + defaultTraverse synModuleDecl + + /// VisitBinding allows overriding binding behavior (note: by default it would defaultTraverse expression) + abstract VisitBinding: path: SyntaxVisitorPath * defaultTraverse: (SynBinding -> 'T option) * synBinding: SynBinding -> 'T option + default _.VisitBinding(path, defaultTraverse, synBinding) = + ignore path + defaultTraverse synBinding + + /// VisitMatchClause allows overriding clause behavior (note: by default it would defaultTraverse expression) + abstract VisitMatchClause: path: SyntaxVisitorPath * defaultTraverse: (SynMatchClause -> 'T option) * matchClause: SynMatchClause -> 'T option + default _.VisitMatchClause(path, defaultTraverse, matchClause) = + ignore path + defaultTraverse matchClause + + /// VisitInheritSynMemberDefn allows overriding inherit behavior (by default do nothing) + abstract VisitInheritSynMemberDefn: path: SyntaxVisitorPath * componentInfo: SynComponentInfo * typeDefnKind: SynTypeDefnKind * SynType * SynMemberDefns * range -> 'T option + default _.VisitInheritSynMemberDefn(path, componentInfo, typeDefnKind, synType, members, range) = + ignore (path, componentInfo, typeDefnKind, synType, members, range) + None + + /// VisitInterfaceSynMemberDefnType allows overriding behavior for visiting interface member in types (by default - do nothing) + abstract VisitInterfaceSynMemberDefnType: path: SyntaxVisitorPath * synType: SynType -> 'T option + default _.VisitInterfaceSynMemberDefnType(path, synType) = + ignore (path, synType) + None + + /// VisitRecordField allows overriding behavior when visiting l.h.s. of constructed record instances + abstract VisitRecordField: path: SyntaxVisitorPath * copyOpt: SynExpr option * recordField: LongIdentWithDots option -> 'T option + default _.VisitRecordField (path, copyOpt, recordField) = + ignore (path, copyOpt, recordField) + None + + /// VisitHashDirective allows overriding behavior when visiting hash directives in FSX scripts, like #r, #load and #I. + abstract VisitHashDirective: path: SyntaxVisitorPath * hashDirective: ParsedHashDirective * range: range -> 'T option + default _.VisitHashDirective (path, hashDirective, range) = + ignore (path, hashDirective, range) + None + + /// VisitModuleOrNamespace allows overriding behavior when visiting module or namespaces + abstract VisitModuleOrNamespace: path: SyntaxVisitorPath * synModuleOrNamespace: SynModuleOrNamespace -> 'T option + default _.VisitModuleOrNamespace (path, synModuleOrNamespace) = + ignore (path, synModuleOrNamespace) + None + + /// VisitComponentInfo allows overriding behavior when visiting type component infos + abstract VisitComponentInfo: path: SyntaxVisitorPath * synComponentInfo: SynComponentInfo -> 'T option + default _.VisitComponentInfo (path, synComponentInfo) = + ignore (path, synComponentInfo) + None + + /// VisitLetOrUse allows overriding behavior when visiting module or local let or use bindings + abstract VisitLetOrUse: path: SyntaxVisitorPath * isRecursive: bool * defaultTraverse: (SynBinding -> 'T option) * bindings: SynBinding list * range: range -> 'T option + default _.VisitLetOrUse (path, isRecursive, defaultTraverse, bindings, range) = + ignore (path, isRecursive, defaultTraverse, bindings, range) + None + + /// VisitType allows overriding behavior when visiting simple pats + abstract VisitSimplePats: path: SyntaxVisitorPath * synPats: SynSimplePat list -> 'T option + default _.VisitSimplePats (path, synPats) = + ignore (path, synPats) + None + + /// VisitPat allows overriding behavior when visiting patterns + abstract VisitPat: path: SyntaxVisitorPath * defaultTraverse: (SynPat -> 'T option) * synPat: SynPat -> 'T option + default _.VisitPat (path, defaultTraverse, synPat) = + ignore path + defaultTraverse synPat + + /// VisitType allows overriding behavior when visiting type hints (x: ..., etc.) + abstract VisitType: path: SyntaxVisitorPath * defaultTraverse: (SynType -> 'T option) * synType: SynType -> 'T option + default _.VisitType (path, defaultTraverse, synType) = + ignore path + defaultTraverse synType /// A range of utility functions to assist with traversing an AST -module public AstTraversal = +module SyntaxTraversal = + // treat ranges as though they are half-open: [,) let rangeContainsPosLeftEdgeInclusive (m1:range) p = if posEq m1.Start m1.End then @@ -29,93 +145,10 @@ module public AstTraversal = let rangeContainsPosLeftEdgeExclusiveAndRightEdgeInclusive (m1:range) p = posGt p m1.Start && posGeq m1.End p - /// used to track route during traversal AST - [] - type TraverseStep = - | Expr of SynExpr - | Module of SynModuleDecl - | ModuleOrNamespace of SynModuleOrNamespace - | TypeDefn of SynTypeDefn - | MemberDefn of SynMemberDefn - | MatchClause of SynMatchClause - | Binding of SynBinding - - type TraversePath = TraverseStep list - - [] - type AstVisitorBase<'T>() = - /// VisitExpr(path, traverseSynExpr, defaultTraverse, expr) - /// controls the behavior when a SynExpr is reached; it can just do - /// defaultTraverse(expr) if you have no special logic for this node, and want the default processing to pick which sub-node to dive deeper into - /// or can inject non-default behavior, which might incorporate: - /// traverseSynExpr(subExpr) to recurse deeper on some particular sub-expression based on your own logic - /// path helps to track AST nodes that were passed during traversal - abstract VisitExpr : TraversePath * (SynExpr -> 'T option) * (SynExpr -> 'T option) * SynExpr -> 'T option - - /// VisitTypeAbbrev(ty,m), defaults to ignoring this leaf of the AST - abstract VisitTypeAbbrev : SynType * range -> 'T option - default this.VisitTypeAbbrev(_ty,_m) = None - - /// VisitImplicitInherit(defaultTraverse,ty,expr,m), defaults to just visiting expr - abstract VisitImplicitInherit : (SynExpr -> 'T option) * SynType * SynExpr * range -> 'T option - default this.VisitImplicitInherit(defaultTraverse, _ty, expr, _m) = defaultTraverse expr - - /// VisitModuleDecl allows overriding module declaration behavior - abstract VisitModuleDecl : (SynModuleDecl -> 'T option) * SynModuleDecl -> 'T option - default this.VisitModuleDecl(defaultTraverse, decl) = defaultTraverse decl - - /// VisitBinding allows overriding binding behavior (note: by default it would defaultTraverse expression) - abstract VisitBinding : (SynBinding -> 'T option) * SynBinding -> 'T option - default this.VisitBinding(defaultTraverse, binding) = defaultTraverse binding - - /// VisitMatchClause allows overriding clause behavior (note: by default it would defaultTraverse expression) - abstract VisitMatchClause : (SynMatchClause -> 'T option) * SynMatchClause -> 'T option - default this.VisitMatchClause(defaultTraverse, mc) = defaultTraverse mc - - /// VisitInheritSynMemberDefn allows overriding inherit behavior (by default do nothing) - abstract VisitInheritSynMemberDefn : SynComponentInfo * SynTypeDefnKind * SynType * SynMemberDefns * range -> 'T option - default this.VisitInheritSynMemberDefn(_componentInfo, _typeDefnKind, _synType, _members, _range) = None - - /// VisitInterfaceSynMemberDefnType allows overriding behavior for visiting interface member in types (by default - do nothing) - abstract VisitInterfaceSynMemberDefnType : SynType -> 'T option - default this.VisitInterfaceSynMemberDefnType(_synType) = None - - /// VisitRecordField allows overriding behavior when visiting l.h.s. of constructed record instances - abstract VisitRecordField : TraversePath * SynExpr option * LongIdentWithDots option -> 'T option - default this.VisitRecordField (_path, _copyOpt, _recordField) = None - - /// VisitHashDirective allows overriding behavior when visiting hash directives in FSX scripts, like #r, #load and #I. - abstract VisitHashDirective : range -> 'T option - default this.VisitHashDirective (_) = None - - /// VisitModuleOrNamespace allows overriding behavior when visiting module or namespaces - abstract VisitModuleOrNamespace : SynModuleOrNamespace -> 'T option - default this.VisitModuleOrNamespace (_) = None - - /// VisitComponentInfo allows overriding behavior when visiting type component infos - abstract VisitComponentInfo : SynComponentInfo -> 'T option - default this.VisitComponentInfo (_) = None - - /// VisitLetOrUse allows overriding behavior when visiting module or local let or use bindings - abstract VisitLetOrUse : TraversePath * (SynBinding -> 'T option) * SynBinding list * range -> 'T option - default this.VisitLetOrUse (_, _, _, _) = None - - /// VisitType allows overriding behavior when visiting simple pats - abstract VisitSimplePats : SynSimplePat list -> 'T option - default this.VisitSimplePats (_) = None - - /// VisitPat allows overriding behavior when visiting patterns - abstract VisitPat : (SynPat -> 'T option) * SynPat -> 'T option - default this.VisitPat (defaultTraverse, pat) = defaultTraverse pat - - /// VisitType allows overriding behavior when visiting type hints (x: ..., etc.) - abstract VisitType : (SynType -> 'T option) * SynType -> 'T option - default this.VisitType (defaultTraverse, ty) = defaultTraverse ty - let dive node range project = range,(fun() -> project node) - let pick pos (outerRange:range) (_debugObj:obj) (diveResults:list) = + let pick pos (outerRange:range) (debugObj:obj) (diveResults:list) = match diveResults with | [] -> None | _ -> @@ -158,48 +191,50 @@ module public AstTraversal = | _ -> #if DEBUG assert(false) - failwithf "multiple disjoint AST node ranges claimed to contain (%A) from %+A" pos _debugObj + failwithf "multiple disjoint AST node ranges claimed to contain (%A) from %+A" pos debugObj #else + ignore debugObj None #endif /// traverse an implementation file walking all the way down to SynExpr or TypeAbbrev at a particular location /// - let Traverse(pos:pos, parseTree, visitor:AstVisitorBase<'T>) = + let Traverse(pos:pos, parseTree, visitor:SyntaxVisitorBase<'T>) = let pick x = pick pos x - let rec traverseSynModuleDecl path (decl:SynModuleDecl) = + let rec traverseSynModuleDecl origPath (decl:SynModuleDecl) = let pick = pick decl.Range let defaultTraverse m = - let path = TraverseStep.Module m :: path + let path = SyntaxNode.SynModule m :: origPath match m with | SynModuleDecl.ModuleAbbrev(_ident, _longIdent, _range) -> None | SynModuleDecl.NestedModule(_synComponentInfo, _isRec, synModuleDecls, _, _range) -> synModuleDecls |> List.map (fun x -> dive x x.Range (traverseSynModuleDecl path)) |> pick decl - | SynModuleDecl.Let(_, synBindingList, range) -> - match visitor.VisitLetOrUse(path, traverseSynBinding path, synBindingList, range) with + | SynModuleDecl.Let(isRecursive, synBindingList, range) -> + match visitor.VisitLetOrUse(path, isRecursive, traverseSynBinding path, synBindingList, range) with | Some x -> Some x - | None -> synBindingList |> List.map (fun x -> dive x x.RangeOfBindingAndRhs (traverseSynBinding path)) |> pick decl + | None -> synBindingList |> List.map (fun x -> dive x x.RangeOfBindingWithRhs (traverseSynBinding path)) |> pick decl | SynModuleDecl.DoExpr(_sequencePointInfoForBinding, synExpr, _range) -> traverseSynExpr path synExpr | SynModuleDecl.Types(synTypeDefnList, _range) -> synTypeDefnList |> List.map (fun x -> dive x x.Range (traverseSynTypeDefn path)) |> pick decl | SynModuleDecl.Exception(_synExceptionDefn, _range) -> None | SynModuleDecl.Open(_target, _range) -> None | SynModuleDecl.Attributes(_synAttributes, _range) -> None - | SynModuleDecl.HashDirective(_parsedHashDirective, range) -> visitor.VisitHashDirective range + | SynModuleDecl.HashDirective(parsedHashDirective, range) -> visitor.VisitHashDirective (path, parsedHashDirective, range) | SynModuleDecl.NamespaceFragment(synModuleOrNamespace) -> traverseSynModuleOrNamespace path synModuleOrNamespace - visitor.VisitModuleDecl(defaultTraverse, decl) + visitor.VisitModuleDecl(origPath, defaultTraverse, decl) - and traverseSynModuleOrNamespace path (SynModuleOrNamespace(_longIdent, _isRec, _isModule, synModuleDecls, _preXmlDoc, _synAttributes, _synAccessOpt, range) as mors) = - match visitor.VisitModuleOrNamespace(mors) with + and traverseSynModuleOrNamespace origPath (SynModuleOrNamespace(_longIdent, _isRec, _isModule, synModuleDecls, _preXmlDoc, _synAttributes, _synAccessOpt, range) as mors) = + match visitor.VisitModuleOrNamespace(origPath, mors) with | Some x -> Some x | None -> - let path = TraverseStep.ModuleOrNamespace mors :: path + let path = SyntaxNode.SynModuleOrNamespace mors :: origPath synModuleDecls |> List.map (fun x -> dive x x.Range (traverseSynModuleDecl path)) |> pick range mors - and traverseSynExpr path (expr:SynExpr) = + and traverseSynExpr origPath (expr:SynExpr) = let pick = pick expr.Range let defaultTraverse e = - let origPath = path - let path = TraverseStep.Expr e :: path + let path = SyntaxNode.SynExpr e :: origPath let traverseSynExpr = traverseSynExpr path + let traverseSynType = traverseSynType path + let traversePat = traversePat path match e with | SynExpr.Paren (synExpr, _, _, _parenRange) -> traverseSynExpr synExpr @@ -211,7 +246,7 @@ module public AstTraversal = | SynExpr.Const (_synConst, _range) -> None - | SynExpr.InterpolatedString (parts, _) -> + | SynExpr.InterpolatedString (parts, _, _) -> [ for part in parts do match part with | SynInterpolatedStringPart.String _ -> () @@ -334,8 +369,8 @@ module public AstTraversal = | SynExpr.ObjExpr (ty,baseCallOpt,binds,ifaces,_range1,_range2) -> let result = ifaces - |> Seq.map (fun (InterfaceImpl(ty, _, _)) -> ty) - |> Seq.tryPick visitor.VisitInterfaceSynMemberDefnType + |> Seq.map (fun (SynInterfaceImpl(ty, _, _)) -> ty) + |> Seq.tryPick (fun ty -> visitor.VisitInterfaceSynMemberDefnType(path, ty)) if result.IsSome then result @@ -348,10 +383,10 @@ module public AstTraversal = yield dive newCall newCall.Range traverseSynExpr | _ -> () for b in binds do - yield dive b b.RangeOfBindingAndRhs (traverseSynBinding path) - for InterfaceImpl(_ty, binds, _range) in ifaces do + yield dive b b.RangeOfBindingWithRhs (traverseSynBinding path) + for SynInterfaceImpl(_ty, binds, _range) in ifaces do for b in binds do - yield dive b b.RangeOfBindingAndRhs (traverseSynBinding path) + yield dive b b.RangeOfBindingWithRhs (traverseSynBinding path) ] |> pick expr | SynExpr.While (_sequencePointInfoForWhileLoop, synExpr, synExpr2, _range) -> @@ -380,7 +415,7 @@ module public AstTraversal = // note: sequence expressions use SynExpr.CompExpr too - they need to be filtered out let isPartOfArrayOrList = match origPath with - | TraverseStep.Expr(SynExpr.ArrayOrListOfSeqExpr (_, _, _)) :: _ -> true + | SyntaxNode.SynExpr(SynExpr.ArrayOrListOfSeqExpr (_, _, _)) :: _ -> true | _ -> false let ok = match isPartOfArrayOrList, synExpr with @@ -394,7 +429,7 @@ module public AstTraversal = | SynExpr.Lambda (_, _, synSimplePats, synExpr, _, _range) -> match synSimplePats with | SynSimplePats.SimplePats(pats,_) -> - match visitor.VisitSimplePats(pats) with + match visitor.VisitSimplePats(path, pats) with | Some x -> Some x | None -> traverseSynExpr synExpr | _ -> traverseSynExpr synExpr @@ -427,11 +462,11 @@ module public AstTraversal = | SynExpr.TypeApp (synExpr, _, _synTypeList, _commas, _, _, _range) -> traverseSynExpr synExpr - | SynExpr.LetOrUse (_, _, synBindingList, synExpr, range) -> - match visitor.VisitLetOrUse(path, traverseSynBinding path, synBindingList, range) with + | SynExpr.LetOrUse (_, isRecursive, synBindingList, synExpr, range) -> + match visitor.VisitLetOrUse(path, isRecursive, traverseSynBinding path, synBindingList, range) with | Some x -> Some x | None -> - [yield! synBindingList |> List.map (fun x -> dive x x.RangeOfBindingAndRhs (traverseSynBinding path)) + [yield! synBindingList |> List.map (fun x -> dive x x.RangeOfBindingWithRhs (traverseSynBinding path)) yield dive synExpr synExpr.Range traverseSynExpr] |> pick expr @@ -566,49 +601,51 @@ module public AstTraversal = | SynExpr.DiscardAfterMissingQualificationAfterDot (synExpr, _range) -> traverseSynExpr synExpr - visitor.VisitExpr(path, traverseSynExpr path, defaultTraverse, expr) + visitor.VisitExpr(origPath, traverseSynExpr origPath, defaultTraverse, expr) - and traversePat (pat: SynPat) = + and traversePat origPath (pat: SynPat) = let defaultTraverse p = + let path = SyntaxNode.SynPat p :: origPath match p with - | SynPat.Paren (p, _) -> traversePat p - | SynPat.Or (p1, p2, _) -> [ p1; p2] |> List.tryPick traversePat + | SynPat.Paren (p, _) -> traversePat path p + | SynPat.Or (p1, p2, _) -> [ p1; p2] |> List.tryPick (traversePat path) | SynPat.Ands (ps, _) | SynPat.Tuple (_, ps, _) - | SynPat.ArrayOrList (_, ps, _) -> ps |> List.tryPick traversePat - | SynPat.Attrib (p, _, _) -> traversePat p + | SynPat.ArrayOrList (_, ps, _) -> ps |> List.tryPick (traversePat path) + | SynPat.Attrib (p, _, _) -> traversePat path p | SynPat.LongIdent(_, _, _, args, _, _) -> match args with - | SynArgPats.Pats ps -> ps |> List.tryPick traversePat + | SynArgPats.Pats ps -> ps |> List.tryPick (traversePat path) | SynArgPats.NamePatPairs (ps, _) -> - ps |> List.map snd |> List.tryPick traversePat + ps |> List.map snd |> List.tryPick (traversePat path) | SynPat.Typed (p, ty, _) -> - [ traversePat p; traverseSynType ty ] |> List.tryPick id + [ traversePat path p; traverseSynType path ty ] |> List.tryPick id | _ -> None - visitor.VisitPat (defaultTraverse, pat) + visitor.VisitPat (origPath, defaultTraverse, pat) - and traverseSynType (StripParenTypes ty) = + and traverseSynType origPath (StripParenTypes ty) = let defaultTraverse ty = + let path = SyntaxNode.SynType ty :: origPath match ty with | SynType.App (typeName, _, typeArgs, _, _, _, _) | SynType.LongIdentApp (typeName, _, _, typeArgs, _, _, _) -> [ yield typeName yield! typeArgs ] - |> List.tryPick traverseSynType - | SynType.Fun (ty1, ty2, _) -> [ty1; ty2] |> List.tryPick traverseSynType + |> List.tryPick (traverseSynType path) + | SynType.Fun (ty1, ty2, _) -> [ty1; ty2] |> List.tryPick (traverseSynType path) | SynType.MeasurePower (ty, _, _) | SynType.HashConstraint (ty, _) | SynType.WithGlobalConstraints (ty, _, _) - | SynType.Array (_, ty, _) -> traverseSynType ty + | SynType.Array (_, ty, _) -> traverseSynType path ty | SynType.StaticConstantNamed (ty1, ty2, _) - | SynType.MeasureDivide (ty1, ty2, _) -> [ty1; ty2] |> List.tryPick traverseSynType - | SynType.Tuple (_, tys, _) -> tys |> List.map snd |> List.tryPick traverseSynType + | SynType.MeasureDivide (ty1, ty2, _) -> [ty1; ty2] |> List.tryPick (traverseSynType path) + | SynType.Tuple (_, tys, _) -> tys |> List.map snd |> List.tryPick (traverseSynType path) | SynType.StaticConstantExpr (expr, _) -> traverseSynExpr [] expr | SynType.Anon _ -> None | _ -> None - visitor.VisitType (defaultTraverse, ty) + visitor.VisitType (origPath, defaultTraverse, ty) and normalizeMembersToDealWithPeculiaritiesOfGettersAndSetters path traverseInherit (synMemberDefns:SynMemberDefns) = synMemberDefns @@ -618,8 +655,8 @@ module public AstTraversal = match mems |> Seq.toList with | [mem] -> // the typical case, a single member has this range 'r' Some (dive mem r (traverseSynMemberDefn path traverseInherit)) - | [SynMemberDefn.Member(Binding(_,_,_,_,_,_,_,SynPat.LongIdent(lid1,Some(info1),_,_,_,_),_,_,_,_),_) as mem1 - SynMemberDefn.Member(Binding(_,_,_,_,_,_,_,SynPat.LongIdent(lid2,Some(info2),_,_,_,_),_,_,_,_),_) as mem2] -> // can happen if one is a getter and one is a setter + | [SynMemberDefn.Member(SynBinding(_,_,_,_,_,_,_,SynPat.LongIdent(lid1,Some(info1),_,_,_,_),_,_,_,_),_) as mem1 + SynMemberDefn.Member(SynBinding(_,_,_,_,_,_,_,SynPat.LongIdent(lid2,Some(info2),_,_,_,_),_,_,_,_),_) as mem2] -> // can happen if one is a getter and one is a setter // ensure same long id assert( (lid1.Lid,lid2.Lid) ||> List.forall2 (fun x y -> x.idText = y.idText) ) // ensure one is getter, other is setter @@ -650,10 +687,10 @@ module public AstTraversal = #endif ) - and traverseSynTypeDefn path (SynTypeDefn.TypeDefn(synComponentInfo, synTypeDefnRepr, synMemberDefns, tRange) as tydef) = - let path = TraverseStep.TypeDefn tydef :: path + and traverseSynTypeDefn origPath (SynTypeDefn(synComponentInfo, synTypeDefnRepr, synMemberDefns, _, tRange) as tydef) = + let path = SyntaxNode.SynTypeDefn tydef :: origPath - match visitor.VisitComponentInfo synComponentInfo with + match visitor.VisitComponentInfo (origPath, synComponentInfo) with | Some x -> Some x | None -> [ @@ -664,13 +701,13 @@ module public AstTraversal = () | SynTypeDefnRepr.ObjectModel(synTypeDefnKind, synMemberDefns, _oRange) -> // traverse inherit function is used to capture type specific data required for processing Inherit part - let traverseInherit (synType : SynType, range : range) = - visitor.VisitInheritSynMemberDefn(synComponentInfo, synTypeDefnKind, synType, synMemberDefns, range) + let traverseInherit (synType: SynType, range: range) = + visitor.VisitInheritSynMemberDefn(path, synComponentInfo, synTypeDefnKind, synType, synMemberDefns, range) yield! synMemberDefns |> normalizeMembersToDealWithPeculiaritiesOfGettersAndSetters path traverseInherit | SynTypeDefnRepr.Simple(synTypeDefnSimpleRepr, _range) -> match synTypeDefnSimpleRepr with | SynTypeDefnSimpleRepr.TypeAbbrev(_,synType,m) -> - yield dive synTypeDefnRepr synTypeDefnRepr.Range (fun _ -> visitor.VisitTypeAbbrev(synType,m)) + yield dive synTypeDefnRepr synTypeDefnRepr.Range (fun _ -> visitor.VisitTypeAbbrev(path, synType,m)) | _ -> () // enums/DUs/record definitions don't have any SynExprs inside them yield! synMemberDefns |> normalizeMembersToDealWithPeculiaritiesOfGettersAndSetters path (fun _ -> None) @@ -678,32 +715,32 @@ module public AstTraversal = and traverseSynMemberDefn path traverseInherit (m:SynMemberDefn) = let pick (debugObj:obj) = pick m.Range debugObj - let path = TraverseStep.MemberDefn m :: path + let path = SyntaxNode.SynMemberDefn m :: path match m with | SynMemberDefn.Open(_longIdent, _range) -> None | SynMemberDefn.Member(synBinding, _range) -> traverseSynBinding path synBinding | SynMemberDefn.ImplicitCtor(_synAccessOption, _synAttributes, simplePats, _identOption, _doc, _range) -> match simplePats with - | SynSimplePats.SimplePats(simplePats, _) -> visitor.VisitSimplePats(simplePats) + | SynSimplePats.SimplePats(simplePats, _) -> visitor.VisitSimplePats(path, simplePats) | _ -> None | SynMemberDefn.ImplicitInherit(synType, synExpr, _identOption, range) -> [ dive () synType.Range (fun () -> match traverseInherit (synType, range) with - | None -> visitor.VisitImplicitInherit(traverseSynExpr path, synType, synExpr, range) + | None -> visitor.VisitImplicitInherit(path, traverseSynExpr path, synType, synExpr, range) | x -> x) dive () synExpr.Range (fun() -> - visitor.VisitImplicitInherit(traverseSynExpr path, synType, synExpr, range) + visitor.VisitImplicitInherit(path, traverseSynExpr path, synType, synExpr, range) ) ] |> pick m | SynMemberDefn.AutoProperty(_attribs, _isStatic, _id, _tyOpt, _propKind, _, _xmlDoc, _access, synExpr, _, _) -> traverseSynExpr path synExpr - | SynMemberDefn.LetBindings(synBindingList, _, _, range) -> - match visitor.VisitLetOrUse(path, traverseSynBinding path, synBindingList, range) with + | SynMemberDefn.LetBindings(synBindingList, isRecursive, _, range) -> + match visitor.VisitLetOrUse(path, isRecursive, traverseSynBinding path, synBindingList, range) with | Some x -> Some x - | None -> synBindingList |> List.map (fun x -> dive x x.RangeOfBindingAndRhs (traverseSynBinding path)) |> pick m + | None -> synBindingList |> List.map (fun x -> dive x x.RangeOfBindingWithRhs (traverseSynBinding path)) |> pick m | SynMemberDefn.AbstractSlot(_synValSig, _memberFlags, _range) -> None | SynMemberDefn.Interface(synType, synMemberDefnsOption, _range) -> - match visitor.VisitInterfaceSynMemberDefnType(synType) with + match visitor.VisitInterfaceSynMemberDefnType(path, synType) with | None -> match synMemberDefnsOption with | None -> None @@ -713,12 +750,12 @@ module public AstTraversal = | SynMemberDefn.ValField(_synField, _range) -> None | SynMemberDefn.NestedType(synTypeDefn, _synAccessOption, _range) -> traverseSynTypeDefn path synTypeDefn - and traverseSynMatchClause path mc = - let path = TraverseStep.MatchClause mc :: path + and traverseSynMatchClause origPath mc = let defaultTraverse mc = + let path = SyntaxNode.SynMatchClause mc :: origPath match mc with - | (SynMatchClause.Clause(synPat, synExprOption, synExpr, _range, _sequencePointInfoForTarget) as all) -> - [dive synPat synPat.Range traversePat] + | (SynMatchClause(synPat, synExprOption, synExpr, _range, _sequencePointInfoForTarget) as all) -> + [dive synPat synPat.Range (traversePat path) ] @ ([ match synExprOption with @@ -728,17 +765,17 @@ module public AstTraversal = ] |> List.map (fun x -> dive x x.Range (traverseSynExpr path)) )|> pick all.Range all - visitor.VisitMatchClause(defaultTraverse,mc) + visitor.VisitMatchClause(origPath, defaultTraverse, mc) - and traverseSynBinding path b = + and traverseSynBinding origPath b = let defaultTraverse b = - let path = TraverseStep.Binding b :: path + let path = SyntaxNode.SynBinding b :: origPath match b with - | (SynBinding.Binding(_synAccessOption, _synBindingKind, _, _, _synAttributes, _preXmlDoc, _synValData, synPat, _synBindingReturnInfoOption, synExpr, _range, _sequencePointInfoForBinding)) -> - [ traversePat synPat + | (SynBinding(_synAccessOption, _synBindingKind, _, _, _synAttributes, _preXmlDoc, _synValData, synPat, _synBindingReturnInfoOption, synExpr, _range, _sequencePointInfoForBinding)) -> + [ traversePat path synPat traverseSynExpr path synExpr ] |> List.tryPick id - visitor.VisitBinding(defaultTraverse,b) + visitor.VisitBinding(origPath, defaultTraverse,b) match parseTree with | ParsedInput.ImplFile (ParsedImplFileInput (_,_,_,_,_,l,_))-> diff --git a/src/fsharp/service/ServiceParseTreeWalk.fsi b/src/fsharp/service/ServiceParseTreeWalk.fsi new file mode 100644 index 00000000000..d042d7199c1 --- /dev/null +++ b/src/fsharp/service/ServiceParseTreeWalk.fsi @@ -0,0 +1,92 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.Syntax + +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text + +/// Used to track route during traversal of syntax using SyntaxTraversal.Traverse +[] +type SyntaxNode = + | SynPat of SynPat + | SynType of SynType + | SynExpr of SynExpr + | SynModule of SynModuleDecl + | SynModuleOrNamespace of SynModuleOrNamespace + | SynTypeDefn of SynTypeDefn + | SynMemberDefn of SynMemberDefn + | SynMatchClause of SynMatchClause + | SynBinding of SynBinding + +type SyntaxVisitorPath = SyntaxNode list + +[] +type SyntaxVisitorBase<'T> = + new: unit -> SyntaxVisitorBase<'T> + + default VisitBinding: path: SyntaxVisitorPath * defaultTraverse: (SynBinding -> 'T option) * synBinding: SynBinding -> 'T option + abstract VisitBinding: path: SyntaxVisitorPath * defaultTraverse: (SynBinding -> 'T option) * synBinding: SynBinding -> 'T option + + default VisitComponentInfo: path: SyntaxVisitorPath * synComponentInfo: SynComponentInfo -> 'T option + abstract VisitComponentInfo: path: SyntaxVisitorPath * synComponentInfo: SynComponentInfo -> 'T option + + /// Controls the behavior when a SynExpr is reached; it can just do + /// defaultTraverse(expr) if you have no special logic for this node, and want the default processing to pick which sub-node to dive deeper into + /// or can inject non-default behavior, which might incorporate: + /// traverseSynExpr(subExpr) to recurse deeper on some particular sub-expression based on your own logic + /// path helps to track AST nodes that were passed during traversal + abstract VisitExpr: path: SyntaxVisitorPath * traverseSynExpr: (SynExpr -> 'T option) * defaultTraverse: (SynExpr -> 'T option) * synExpr: SynExpr -> 'T option + default VisitExpr: path: SyntaxVisitorPath * traverseSynExpr: (SynExpr -> 'T option) * defaultTraverse: (SynExpr -> 'T option) * synExpr: SynExpr -> 'T option + + abstract VisitHashDirective: path: SyntaxVisitorPath * hashDirective: ParsedHashDirective * range: range -> 'T option + default VisitHashDirective: path: SyntaxVisitorPath * hashDirective: ParsedHashDirective * range: range -> 'T option + + abstract VisitImplicitInherit: path: SyntaxVisitorPath * defaultTraverse: (SynExpr -> 'T option) * inheritedType: SynType * synArgs: SynExpr * range: range -> 'T option + default VisitImplicitInherit: path: SyntaxVisitorPath * defaultTraverse: (SynExpr -> 'T option) * inheritedType: SynType * synArgs: SynExpr * range: range -> 'T option + + abstract VisitInheritSynMemberDefn: path: SyntaxVisitorPath * componentInfo: SynComponentInfo * typeDefnKind: SynTypeDefnKind * synType: SynType * members: SynMemberDefns * range: range -> 'T option + default VisitInheritSynMemberDefn: path: SyntaxVisitorPath * componentInfo: SynComponentInfo * typeDefnKind: SynTypeDefnKind * synType: SynType * members: SynMemberDefns * range: range -> 'T option + + abstract VisitInterfaceSynMemberDefnType: path: SyntaxVisitorPath * synType: SynType -> 'T option + default VisitInterfaceSynMemberDefnType: path: SyntaxVisitorPath * synType: SynType -> 'T option + + abstract VisitLetOrUse: path: SyntaxVisitorPath * isRecursive: bool * defaultTraverse: (SynBinding -> 'T option) * bindings: SynBinding list * range: range -> 'T option + default VisitLetOrUse: path: SyntaxVisitorPath * isRecursive: bool * defaultTraverse: (SynBinding -> 'T option) * bindings: SynBinding list * range: range -> 'T option + + abstract VisitMatchClause: path: SyntaxVisitorPath * defaultTraverse: (SynMatchClause -> 'T option) * matchClause: SynMatchClause -> 'T option + default VisitMatchClause: path: SyntaxVisitorPath * defaultTraverse: (SynMatchClause -> 'T option) * matchClause: SynMatchClause -> 'T option + + abstract VisitModuleDecl: path: SyntaxVisitorPath * defaultTraverse: (SynModuleDecl -> 'T option) * synModuleDecl: SynModuleDecl -> 'T option + default VisitModuleDecl: path: SyntaxVisitorPath * defaultTraverse: (SynModuleDecl -> 'T option) * synModuleDecl: SynModuleDecl -> 'T option + + abstract VisitModuleOrNamespace: path: SyntaxVisitorPath * synModuleOrNamespace: SynModuleOrNamespace -> 'T option + default VisitModuleOrNamespace: path: SyntaxVisitorPath * synModuleOrNamespace: SynModuleOrNamespace -> 'T option + + abstract VisitPat: path: SyntaxVisitorPath * defaultTraverse: (SynPat -> 'T option) * synPat: SynPat -> 'T option + default VisitPat: path: SyntaxVisitorPath * defaultTraverse: (SynPat -> 'T option) * synPat: SynPat -> 'T option + + abstract VisitRecordField: path: SyntaxVisitorPath * copyOpt: SynExpr option * recordField: LongIdentWithDots option -> 'T option + default VisitRecordField: path: SyntaxVisitorPath * copyOpt: SynExpr option * recordField: LongIdentWithDots option -> 'T option + + abstract VisitSimplePats: path: SyntaxVisitorPath * synPats: SynSimplePat list -> 'T option + default VisitSimplePats: path: SyntaxVisitorPath * synPats: SynSimplePat list -> 'T option + + abstract VisitType: path: SyntaxVisitorPath * defaultTraverse: (SynType -> 'T option) * synType: SynType -> 'T option + default VisitType: path: SyntaxVisitorPath * defaultTraverse: (SynType -> 'T option) * synType: SynType -> 'T option + + abstract VisitTypeAbbrev: path: SyntaxVisitorPath * synType: SynType * range: range -> 'T option + default VisitTypeAbbrev: path: SyntaxVisitorPath * synType: SynType * range: range -> 'T option + +module public SyntaxTraversal = + + val internal rangeContainsPosLeftEdgeInclusive: m1: range -> p: pos -> bool + + val internal rangeContainsPosEdgesExclusive: m1: range -> p: pos -> bool + + val internal rangeContainsPosLeftEdgeExclusiveAndRightEdgeInclusive: m1: range -> p: pos -> bool + + val internal dive: node: 'a -> range: 'b -> project: ('a -> 'c) -> 'b * (unit -> 'c) + + val internal pick: pos: pos -> outerRange: range -> debugObj: obj -> diveResults: (range * (unit -> 'a option)) list -> 'a option + + val Traverse: pos: pos * parseTree: ParsedInput * visitor: SyntaxVisitorBase<'T> -> 'T option diff --git a/src/fsharp/service/ServiceUntypedParse.fs b/src/fsharp/service/ServiceParsedInputOps.fs old mode 100755 new mode 100644 similarity index 56% rename from src/fsharp/service/ServiceUntypedParse.fs rename to src/fsharp/service/ServiceParsedInputOps.fs index a37166c9ce2..73fac49f6ef --- a/src/fsharp/service/ServiceUntypedParse.fs +++ b/src/fsharp/service/ServiceParsedInputOps.fs @@ -1,44 +1,20 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -//---------------------------------------------------------------------------- -// Open up the compiler as an incremental service for parsing, -// type checking and intellisense-like environment-reporting. -//-------------------------------------------------------------------------- - -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.EditorServices open System open System.IO open System.Collections.Generic -open System.Diagnostics open System.Text.RegularExpressions - -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Library open FSharp.Compiler.CompilerConfig -open FSharp.Compiler.Lib -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.Syntax +open FSharp.Compiler.Syntax.PrettyNaming open FSharp.Compiler.SyntaxTreeOps - -/// Methods for dealing with F# sources files. -module SourceFile = - - /// Source file extensions - let private compilableExtensions = FSharpSigFileSuffixes @ FSharpImplFileSuffixes @ FSharpScriptFileSuffixes - - /// Single file projects extensions - let private singleFileProjectExtensions = FSharpScriptFileSuffixes - - /// Whether or not this file is compilable - let IsCompilable file = - let ext = Path.GetExtension file - compilableExtensions |> List.exists(fun e->0 = String.Compare(e, ext, StringComparison.OrdinalIgnoreCase)) - - /// Whether or not this file should be a single-file project - let MustBeSingleFileProject file = - let ext = Path.GetExtension file - singleFileProjectExtensions |> List.exists(fun e-> 0 = String.Compare(e, ext, StringComparison.OrdinalIgnoreCase)) +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Position +open FSharp.Compiler.Text.Range module SourceFileImpl = let IsInterfaceFile file = @@ -53,7 +29,7 @@ module SourceFileImpl = type CompletionPath = string list * string option // plid * residue [] -type InheritanceOrigin = +type FSharpInheritanceOrigin = | Class | Interface | Unknown @@ -66,606 +42,39 @@ type InheritanceContext = [] type RecordContext = - | CopyOnUpdate of range * CompletionPath // range of copy-expr + current field - | Constructor of string // typename - | New of CompletionPath + | CopyOnUpdate of range: range * path: CompletionPath + | Constructor of typeName: string + | New of path: CompletionPath [] type CompletionContext = - // completion context cannot be determined due to errors + /// Completion context cannot be determined due to errors | Invalid - // completing something after the inherit keyword - | Inherit of InheritanceContext * CompletionPath - // completing records field - | RecordField of RecordContext - | RangeOperator - // completing named parameters\setters in parameter list of constructor\method calls - // end of name ast node * list of properties\parameters that were already set - | ParameterList of pos * HashSet - | AttributeApplication - | OpenDeclaration of isOpenType: bool - /// completing pattern type (e.g. foo (x: |)) - | PatternType - -//---------------------------------------------------------------------------- -// FSharpParseFileResults -//---------------------------------------------------------------------------- - -[] -type FSharpParseFileResults(errors: FSharpErrorInfo[], input: ParsedInput option, parseHadErrors: bool, dependencyFiles: string[]) = - - member scope.Errors = errors - - member scope.ParseHadErrors = parseHadErrors - - member scope.ParseTree = input - member scope.TryRangeOfNameOfNearestOuterBindingContainingPos pos = - let tryGetIdentRangeFromBinding binding = - match binding with - | SynBinding.Binding (_, _, _, _, _, _, _, headPat, _, _, _, _) -> - match headPat with - | SynPat.LongIdent (longIdentWithDots, _, _, _, _, _) -> - Some longIdentWithDots.Range - | SynPat.Named(_, ident, false, _, _) -> - Some ident.idRange - | _ -> - None + /// Completing something after the inherit keyword + | Inherit of context: InheritanceContext * path: CompletionPath - let rec walkBinding expr workingRange = - match expr with + /// Completing records field + | RecordField of context: RecordContext - // This lets us dive into subexpressions that may contain the binding we're after - | SynExpr.Sequential (_, _, expr1, expr2, _) -> - if rangeContainsPos expr1.Range pos then - walkBinding expr1 workingRange - else - walkBinding expr2 workingRange + | RangeOperator + /// Completing named parameters\setters in parameter list of constructor\method calls + /// end of name ast node * list of properties\parameters that were already set + | ParameterList of pos * HashSet - | SynExpr.LetOrUse(_, _, bindings, bodyExpr, _) -> - let potentialNestedRange = - bindings - |> List.tryFind (fun binding -> rangeContainsPos binding.RangeOfBindingAndRhs pos) - |> Option.bind tryGetIdentRangeFromBinding - match potentialNestedRange with - | Some range -> - walkBinding bodyExpr range - | None -> - walkBinding bodyExpr workingRange + | AttributeApplication - - | _ -> - Some workingRange - - match scope.ParseTree with - | Some input -> - AstTraversal.Traverse(pos, input, { new AstTraversal.AstVisitorBase<_>() with - member _.VisitExpr(_, _, defaultTraverse, expr) = - defaultTraverse expr - - override _.VisitBinding(defaultTraverse, binding) = - match binding with - | SynBinding.Binding (_, _, _, _, _, _, _, _, _, expr, _range, _) as b when rangeContainsPos b.RangeOfBindingAndRhs pos -> - match tryGetIdentRangeFromBinding b with - | Some range -> walkBinding expr range - | None -> None - | _ -> defaultTraverse binding }) - | None -> None - - member scope.TryIdentOfPipelineContainingPosAndNumArgsApplied pos = - match scope.ParseTree with - | Some input -> - AstTraversal.Traverse(pos, input, { new AstTraversal.AstVisitorBase<_>() with - member _.VisitExpr(_, _, defaultTraverse, expr) = - match expr with - | SynExpr.App (_, _, SynExpr.App(_, true, SynExpr.Ident ident, _, _), argExpr, _) when rangeContainsPos argExpr.Range pos -> - if ident.idText = "op_PipeRight" then - Some (ident, 1) - elif ident.idText = "op_PipeRight2" then - Some (ident, 2) - elif ident.idText = "op_PipeRight3" then - Some (ident, 3) - else - None - | _ -> defaultTraverse expr - }) - | None -> None - - member scope.IsPosContainedInApplication pos = - match scope.ParseTree with - | Some input -> - let result = - AstTraversal.Traverse(pos, input, { new AstTraversal.AstVisitorBase<_>() with - member _.VisitExpr(_, _, defaultTraverse, expr) = - match expr with - | SynExpr.App (_, _, _, _, range) when rangeContainsPos range pos -> - Some range - | _ -> defaultTraverse expr - }) - result.IsSome - | None -> false - - member scope.TryRangeOfFunctionOrMethodBeingApplied pos = - let rec getIdentRangeForFuncExprInApp expr pos = - match expr with - | SynExpr.Ident ident -> ident.idRange - - | SynExpr.LongIdent(_, _, _, range) -> range - - | SynExpr.Paren(expr, _, _, range) when rangeContainsPos range pos -> - getIdentRangeForFuncExprInApp expr pos - - | SynExpr.App(_, _, funcExpr, argExpr, _) -> - match argExpr with - | SynExpr.App (_, _, _, _, range) when rangeContainsPos range pos -> - getIdentRangeForFuncExprInApp argExpr pos - | _ -> - match funcExpr with - | SynExpr.App (_, true, _, _, _) when rangeContainsPos argExpr.Range pos -> - // x |> List.map - // Don't dive into the funcExpr (the operator expr) - // because we dont want to offer sig help for that! - getIdentRangeForFuncExprInApp argExpr pos - | _ -> - // Generally, we want to dive into the func expr to get the range - // of the identifier of the function we're after - getIdentRangeForFuncExprInApp funcExpr pos - | expr -> expr.Range // Exhaustiveness, this shouldn't actually be necessary...right? - - match scope.ParseTree with - | Some input -> - AstTraversal.Traverse(pos, input, { new AstTraversal.AstVisitorBase<_>() with - member _.VisitExpr(_, _, defaultTraverse, expr) = - match expr with - | SynExpr.App (_, _, _funcExpr, _, range) as app when rangeContainsPos range pos -> - getIdentRangeForFuncExprInApp app pos - |> Some - | _ -> defaultTraverse expr - }) - | None -> None - - member scope.GetAllArgumentsForFunctionApplicationAtPostion pos = - match input with - | Some input -> SynExprAppLocationsImpl.getAllCurriedArgsAtPosition pos input - | None -> None - - member scope.TryRangeOfParenEnclosingOpEqualsGreaterUsage opGreaterEqualPos = - let (|Ident|_|) ofName = - function | SynExpr.Ident ident when ident.idText = ofName -> Some () - | _ -> None - let (|InfixAppOfOpEqualsGreater|_|) = - function | SynExpr.App(ExprAtomicFlag.NonAtomic, false, SynExpr.App(ExprAtomicFlag.NonAtomic, true, Ident "op_EqualsGreater", actualParamListExpr, _), actualLambdaBodyExpr, _) -> - Some (actualParamListExpr, actualLambdaBodyExpr) - | _ -> None - - match scope.ParseTree with - | Some parseTree -> - AstTraversal.Traverse(opGreaterEqualPos, parseTree, { new AstTraversal.AstVisitorBase<_>() with - member _.VisitExpr(_, _, defaultTraverse, expr) = - match expr with - | SynExpr.Paren((InfixAppOfOpEqualsGreater(lambdaArgs, lambdaBody) as app), _, _, _) -> - Some (app.Range, lambdaArgs.Range, lambdaBody.Range) - | _ -> defaultTraverse expr - member _.VisitBinding(defaultTraverse, binding) = - match binding with - | SynBinding.Binding (_, SynBindingKind.NormalBinding, _, _, _, _, _, _, _, (InfixAppOfOpEqualsGreater(lambdaArgs, lambdaBody) as app), _, _) -> - Some(app.Range, lambdaArgs.Range, lambdaBody.Range) - | _ -> defaultTraverse binding }) - | None -> None - - member scope.TryRangeOfExprInYieldOrReturn pos = - match scope.ParseTree with - | Some parseTree -> - AstTraversal.Traverse(pos, parseTree, { new AstTraversal.AstVisitorBase<_>() with - member __.VisitExpr(_path, _, defaultTraverse, expr) = - match expr with - | SynExpr.YieldOrReturn(_, expr, range) - | SynExpr.YieldOrReturnFrom(_, expr, range) when rangeContainsPos range pos -> - Some expr.Range - | _ -> defaultTraverse expr }) - | None -> None - - member scope.TryRangeOfRecordExpressionContainingPos pos = - match input with - | Some input -> - AstTraversal.Traverse(pos, input, { new AstTraversal.AstVisitorBase<_>() with - member _.VisitExpr(_, _, defaultTraverse, expr) = - match expr with - | SynExpr.Record(_, _, _, range) when rangeContainsPos range pos -> - Some range - | _ -> defaultTraverse expr }) - | None -> - None - - member scope.TryRangeOfRefCellDereferenceContainingPos expressionPos = - match input with - | Some input -> - AstTraversal.Traverse(expressionPos, input, { new AstTraversal.AstVisitorBase<_>() with - member _.VisitExpr(_, _, defaultTraverse, expr) = - match expr with - | SynExpr.App(_, false, SynExpr.Ident funcIdent, expr, _) -> - if funcIdent.idText = "op_Dereference" && rangeContainsPos expr.Range expressionPos then - Some funcIdent.idRange - else - None - | _ -> defaultTraverse expr }) - | None -> - None + | OpenDeclaration of isOpenType: bool - member scope.FindNoteworthyParamInfoLocations pos = - match input with - | Some input -> FSharpNoteworthyParamInfoLocations.Find(pos, input) - | _ -> None + /// Completing pattern type (e.g. foo (x: |)) + | PatternType - member scope.IsPositionContainedInACurriedParameter pos = - match input with - | Some input -> - let result = - AstTraversal.Traverse(pos, input, { new AstTraversal.AstVisitorBase<_>() with - member __.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) = - defaultTraverse(expr) - - override __.VisitBinding (_, binding) = - match binding with - | Binding(_, _, _, _, _, _, valData, _, _, _, range, _) when rangeContainsPos range pos -> - let info = valData.SynValInfo.CurriedArgInfos - let mutable found = false - for group in info do - for arg in group do - match arg.Ident with - | Some ident when rangeContainsPos ident.idRange pos -> - found <- true - | _ -> () - if found then Some range else None - | _ -> - None - }) - result.IsSome - | _ -> false - - /// Get declared items and the selected item at the specified location - member private scope.GetNavigationItemsImpl() = - ErrorScope.Protect range0 - (fun () -> - match input with - | Some (ParsedInput.ImplFile _ as p) -> - FSharpNavigation.getNavigation p - | Some (ParsedInput.SigFile _) -> - FSharpNavigation.empty - | _ -> - FSharpNavigation.empty) - (fun err -> - Trace.TraceInformation(sprintf "FCS: recovering from error in GetNavigationItemsImpl: '%s'" err) - FSharpNavigation.empty) - - member private scope.ValidateBreakpointLocationImpl pos = - let isMatchRange m = rangeContainsPos m pos || m.StartLine = pos.Line - - // Process let-binding - let findBreakPoints () = - let checkRange m = [ if isMatchRange m then yield m ] - let walkBindSeqPt sp = [ match sp with DebugPointAtBinding m -> yield! checkRange m | _ -> () ] - let walkForSeqPt sp = [ match sp with DebugPointAtFor.Yes m -> yield! checkRange m | _ -> () ] - let walkWhileSeqPt sp = [ match sp with DebugPointAtWhile.Yes m -> yield! checkRange m | _ -> () ] - let walkTrySeqPt sp = [ match sp with DebugPointAtTry.Yes m -> yield! checkRange m | _ -> () ] - let walkWithSeqPt sp = [ match sp with DebugPointAtWith.Yes m -> yield! checkRange m | _ -> () ] - let walkFinallySeqPt sp = [ match sp with DebugPointAtFinally.Yes m -> yield! checkRange m | _ -> () ] - - let rec walkBind (Binding(_, _, _, _, _, _, SynValData(memFlagsOpt, _, _), synPat, _, synExpr, _, spInfo)) = - [ // Don't yield the binding sequence point if there are any arguments, i.e. we're defining a function or a method - let isFunction = - Option.isSome memFlagsOpt || - match synPat with - | SynPat.LongIdent (_, _, _, SynArgPats.Pats args, _, _) when not (List.isEmpty args) -> true - | _ -> false - if not isFunction then - yield! walkBindSeqPt spInfo - - yield! walkExpr (isFunction || (match spInfo with DebugPointAtBinding _ -> false | _-> true)) synExpr ] - - and walkExprs es = List.collect (walkExpr false) es - and walkBinds es = List.collect walkBind es - and walkMatchClauses cl = - [ for (Clause(_, whenExpr, e, _, _)) in cl do - match whenExpr with - | Some e -> yield! walkExpr false e - | _ -> () - yield! walkExpr true e ] +type ShortIdent = string - and walkExprOpt (spAlways: bool) eOpt = [ match eOpt with Some e -> yield! walkExpr spAlways e | _ -> () ] - - and IsBreakableExpression e = - match e with - | SynExpr.Match _ - | SynExpr.IfThenElse _ - | SynExpr.For _ - | SynExpr.ForEach _ - | SynExpr.While _ -> true - | _ -> not (IsControlFlowExpression e) - - // Determine the breakpoint locations for an expression. spAlways indicates we always - // emit a breakpoint location for the expression unless it is a syntactic control flow construct - and walkExpr (spAlways: bool) e = - let m = e.Range - if not (isMatchRange m) then [] else - [ if spAlways && IsBreakableExpression e then - yield! checkRange m - - match e with - | SynExpr.ArbitraryAfterError _ - | SynExpr.LongIdent _ - | SynExpr.LibraryOnlyILAssembly _ - | SynExpr.LibraryOnlyStaticOptimization _ - | SynExpr.Null _ - | SynExpr.Ident _ - | SynExpr.ImplicitZero _ - | SynExpr.Const _ -> - () - - | SynExpr.Quote (_, _, e, _, _) - | SynExpr.TypeTest (e, _, _) - | SynExpr.Upcast (e, _, _) - | SynExpr.AddressOf (_, e, _, _) - | SynExpr.CompExpr (_, _, e, _) - | SynExpr.ArrayOrListOfSeqExpr (_, e, _) - | SynExpr.Typed (e, _, _) - | SynExpr.FromParseError (e, _) - | SynExpr.DiscardAfterMissingQualificationAfterDot (e, _) - | SynExpr.Do (e, _) - | SynExpr.Assert (e, _) - | SynExpr.Fixed (e, _) - | SynExpr.DotGet (e, _, _, _) - | SynExpr.LongIdentSet (_, e, _) - | SynExpr.New (_, _, e, _) - | SynExpr.TypeApp (e, _, _, _, _, _, _) - | SynExpr.LibraryOnlyUnionCaseFieldGet (e, _, _, _) - | SynExpr.Downcast (e, _, _) - | SynExpr.InferredUpcast (e, _) - | SynExpr.InferredDowncast (e, _) - | SynExpr.Lazy (e, _) - | SynExpr.TraitCall (_, _, e, _) - | SynExpr.Paren (e, _, _, _) -> - yield! walkExpr false e - - | SynExpr.InterpolatedString (parts, _) -> - yield! walkExprs [ for part in parts do - match part with - | SynInterpolatedStringPart.String _ -> () - | SynInterpolatedStringPart.FillExpr (fillExpr, _) -> yield fillExpr ] - - | SynExpr.YieldOrReturn (_, e, _) - | SynExpr.YieldOrReturnFrom (_, e, _) - | SynExpr.DoBang (e, _) -> - yield! checkRange e.Range - yield! walkExpr false e - - | SynExpr.NamedIndexedPropertySet (_, e1, e2, _) - | SynExpr.DotSet (e1, _, e2, _) - | SynExpr.Set (e1, e2, _) - | SynExpr.LibraryOnlyUnionCaseFieldSet (e1, _, _, e2, _) - | SynExpr.App (_, _, e1, e2, _) -> - yield! walkExpr false e1 - yield! walkExpr false e2 - - | SynExpr.ArrayOrList (_, es, _) - | SynExpr.Tuple (_, es, _, _) -> - yield! walkExprs es - - | SynExpr.Record (_, copyExprOpt, fs, _) -> - match copyExprOpt with - | Some (e, _) -> yield! walkExpr true e - | None -> () - yield! walkExprs (fs |> List.choose p23) - - | SynExpr.AnonRecd (_isStruct, copyExprOpt, fs, _) -> - match copyExprOpt with - | Some (e, _) -> yield! walkExpr true e - | None -> () - yield! walkExprs (fs |> List.map snd) - - | SynExpr.ObjExpr (_, args, bs, is, _, _) -> - match args with - | None -> () - | Some (arg, _) -> yield! walkExpr false arg - yield! walkBinds bs - for (InterfaceImpl(_, bs, _)) in is do yield! walkBinds bs - - | SynExpr.While (spWhile, e1, e2, _) -> - yield! walkWhileSeqPt spWhile - yield! walkExpr false e1 - yield! walkExpr true e2 - - | SynExpr.JoinIn (e1, _range, e2, _range2) -> - yield! walkExpr false e1 - yield! walkExpr false e2 - - | SynExpr.For (spFor, _, e1, _, e2, e3, _) -> - yield! walkForSeqPt spFor - yield! walkExpr false e1 - yield! walkExpr true e2 - yield! walkExpr true e3 - - | SynExpr.ForEach (spFor, _, _, _, e1, e2, _) -> - yield! walkForSeqPt spFor - yield! walkExpr false e1 - yield! walkExpr true e2 - - | SynExpr.MatchLambda (_isExnMatch, _argm, cl, spBind, _wholem) -> - yield! walkBindSeqPt spBind - for (Clause(_, whenExpr, e, _, _)) in cl do - yield! walkExprOpt false whenExpr - yield! walkExpr true e - - | SynExpr.Lambda (_, _, _, e, _, _) -> - yield! walkExpr true e - - | SynExpr.Match (spBind, e, cl, _) -> - yield! walkBindSeqPt spBind - yield! walkExpr false e - for (Clause(_, whenExpr, e, _, _)) in cl do - yield! walkExprOpt false whenExpr - yield! walkExpr true e - - | SynExpr.LetOrUse (_, _, bs, e, _) -> - yield! walkBinds bs - yield! walkExpr true e - - | SynExpr.TryWith (e, _, cl, _, _, spTry, spWith) -> - yield! walkTrySeqPt spTry - yield! walkWithSeqPt spWith - yield! walkExpr true e - yield! walkMatchClauses cl - - | SynExpr.TryFinally (e1, e2, _, spTry, spFinally) -> - yield! walkExpr true e1 - yield! walkExpr true e2 - yield! walkTrySeqPt spTry - yield! walkFinallySeqPt spFinally - - | SynExpr.SequentialOrImplicitYield (spSeq, e1, e2, _, _) - | SynExpr.Sequential (spSeq, _, e1, e2, _) -> - yield! walkExpr (match spSeq with DebugPointAtSequential.ExprOnly -> false | _ -> true) e1 - yield! walkExpr (match spSeq with DebugPointAtSequential.StmtOnly -> false | _ -> true) e2 - - | SynExpr.IfThenElse (e1, e2, e3opt, spBind, _, _, _) -> - yield! walkBindSeqPt spBind - yield! walkExpr false e1 - yield! walkExpr true e2 - yield! walkExprOpt true e3opt - - | SynExpr.DotIndexedGet (e1, es, _, _) -> - yield! walkExpr false e1 - yield! walkExprs [ for e in es do yield! e.Exprs ] - - | SynExpr.DotIndexedSet (e1, es, e2, _, _, _) -> - yield! walkExpr false e1 - yield! walkExprs [ for e in es do yield! e.Exprs ] - yield! walkExpr false e2 - - | SynExpr.DotNamedIndexedPropertySet (e1, _, e2, e3, _) -> - yield! walkExpr false e1 - yield! walkExpr false e2 - yield! walkExpr false e3 - - | SynExpr.LetOrUseBang (spBind, _, _, _, e1, es, e2, _) -> - yield! walkBindSeqPt spBind - yield! walkExpr true e1 - for (andBangSpBind,_,_,_,eAndBang,_) in es do - yield! walkBindSeqPt andBangSpBind - yield! walkExpr true eAndBang - yield! walkExpr true e2 - - | SynExpr.MatchBang (spBind, e, cl, _) -> - yield! walkBindSeqPt spBind - yield! walkExpr false e - for (Clause(_, whenExpr, e, _, _)) in cl do - yield! walkExprOpt false whenExpr - yield! walkExpr true e ] - - // Process a class declaration or F# type declaration - let rec walkTycon (TypeDefn(ComponentInfo(_, _, _, _, _, _, _, _), repr, membDefns, m)) = - if not (isMatchRange m) then [] else - [ for memb in membDefns do yield! walkMember memb - match repr with - | SynTypeDefnRepr.ObjectModel(_, membDefns, _) -> - for memb in membDefns do yield! walkMember memb - | _ -> () ] - - // Returns class-members for the right dropdown - and walkMember memb = - if not (rangeContainsPos memb.Range pos) then [] else - [ match memb with - | SynMemberDefn.LetBindings(binds, _, _, _) -> yield! walkBinds binds - | SynMemberDefn.AutoProperty(_attribs, _isStatic, _id, _tyOpt, _propKind, _, _xmlDoc, _access, synExpr, _, _) -> yield! walkExpr true synExpr - | SynMemberDefn.ImplicitCtor(_, _, _, _, _, m) -> yield! checkRange m - | SynMemberDefn.Member(bind, _) -> yield! walkBind bind - | SynMemberDefn.Interface(_, Some membs, _) -> for m in membs do yield! walkMember m - | SynMemberDefn.Inherit(_, _, m) -> - // can break on the "inherit" clause - yield! checkRange m - | SynMemberDefn.ImplicitInherit(_, arg, _, m) -> - // can break on the "inherit" clause - yield! checkRange m - yield! walkExpr true arg - | _ -> () ] - - // Process declarations nested in a module that should be displayed in the left dropdown - // (such as type declarations, nested modules etc.) - let rec walkDecl decl = - [ match decl with - | SynModuleDecl.Let(_, binds, m) when isMatchRange m -> - yield! walkBinds binds - | SynModuleDecl.DoExpr(spExpr, expr, m) when isMatchRange m -> - yield! walkBindSeqPt spExpr - yield! walkExpr false expr - | SynModuleDecl.ModuleAbbrev _ -> () - | SynModuleDecl.NestedModule(_, _isRec, decls, _, m) when isMatchRange m -> - for d in decls do yield! walkDecl d - | SynModuleDecl.Types(tydefs, m) when isMatchRange m -> - for d in tydefs do yield! walkTycon d - | SynModuleDecl.Exception(SynExceptionDefn(SynExceptionDefnRepr(_, _, _, _, _, _), membDefns, _), m) - when isMatchRange m -> - for m in membDefns do yield! walkMember m - | _ -> () ] - - // Collect all the items in a module - let walkModule (SynModuleOrNamespace(_, _, _, decls, _, _, _, m)) = - if isMatchRange m then - List.collect walkDecl decls - else - [] - - /// Get information for implementation file - let walkImplFile (modules: SynModuleOrNamespace list) = List.collect walkModule modules - - match input with - | Some (ParsedInput.ImplFile (ParsedImplFileInput (modules = modules))) -> walkImplFile modules - | _ -> [] - - ErrorScope.Protect range0 - (fun () -> - let locations = findBreakPoints() - - if pos.Column = 0 then - // we have a breakpoint that was set with mouse at line start - match locations |> List.filter (fun m -> m.StartLine = m.EndLine && pos.Line = m.StartLine) with - | [] -> - match locations |> List.filter (fun m -> rangeContainsPos m pos) with - | [] -> - match locations |> List.filter (fun m -> rangeBeforePos m pos |> not) with - | [] -> Seq.tryHead locations - | locationsAfterPos -> Seq.tryHead locationsAfterPos - | coveringLocations -> Seq.tryLast coveringLocations - | locationsOnSameLine -> Seq.tryHead locationsOnSameLine - else - match locations |> List.filter (fun m -> rangeContainsPos m pos) with - | [] -> - match locations |> List.filter (fun m -> rangeBeforePos m pos |> not) with - | [] -> Seq.tryHead locations - | locationsAfterPos -> Seq.tryHead locationsAfterPos - | coveringLocations -> Seq.tryLast coveringLocations) - (fun msg -> - Trace.TraceInformation(sprintf "FCS: recovering from error in ValidateBreakpointLocationImpl: '%s'" msg) - None) - - /// When these files appear or disappear the configuration for the current project is invalidated. - member scope.DependencyFiles = dependencyFiles - - member scope.FileName = - match input with - | Some (ParsedInput.ImplFile (ParsedImplFileInput (fileName = modname))) - | Some (ParsedInput.SigFile (ParsedSigFileInput (fileName = modname))) -> modname - | _ -> "" - - // Get items for the navigation drop down bar - member scope.GetNavigationItems() = - // This does not need to be run on the background thread - scope.GetNavigationItemsImpl() +type ShortIdents = ShortIdent[] - member scope.ValidateBreakpointLocation pos = - // This does not need to be run on the background thread - scope.ValidateBreakpointLocationImpl pos +type MaybeUnresolvedIdent = { Ident: ShortIdent; Resolved: bool } type ModuleKind = { IsAutoOpen: bool; HasModuleSuffix: bool } @@ -677,14 +86,114 @@ type EntityKind = | Module of ModuleKind override x.ToString() = sprintf "%A" x -module UntypedParseImpl = +type InsertionContextEntity = + { FullRelativeName: string + Qualifier: string + Namespace: string option + FullDisplayName: string + LastIdent: ShortIdent } + override x.ToString() = sprintf "%A" x + +type ScopeKind = + | Namespace + | TopModule + | NestedModule + | OpenDeclaration + | HashDirective + override x.ToString() = sprintf "%A" x + +type InsertionContext = + { ScopeKind: ScopeKind + Pos: pos } + +type FSharpModule = + { Idents: ShortIdents + Range: range } + +type OpenStatementInsertionPoint = + | TopLevel + | Nearest + +[] +module Entity = + let getRelativeNamespace (targetNs: ShortIdents) (sourceNs: ShortIdents) = + let rec loop index = + if index > targetNs.Length - 1 then sourceNs.[index..] + // target namespace is not a full parent of source namespace, keep the source ns as is + elif index > sourceNs.Length - 1 then sourceNs + elif targetNs.[index] = sourceNs.[index] then loop (index + 1) + else sourceNs.[index..] + if sourceNs.Length = 0 || targetNs.Length = 0 then sourceNs + else loop 0 + + let cutAutoOpenModules (autoOpenParent: ShortIdents option) (candidateNs: ShortIdents) = + let nsCount = + match autoOpenParent with + | Some parent when parent.Length > 0 -> + min (parent.Length - 1) candidateNs.Length + | _ -> candidateNs.Length + candidateNs.[0..nsCount - 1] + + let tryCreate (targetNamespace: ShortIdents option, targetScope: ShortIdents, partiallyQualifiedName: MaybeUnresolvedIdent[], + requiresQualifiedAccessParent: ShortIdents option, autoOpenParent: ShortIdents option, candidateNamespace: ShortIdents option, candidate: ShortIdents) = + match candidate with + | [||] -> [||] + | _ -> + partiallyQualifiedName + |> Array.heads + // long ident must contain an unresolved part, otherwise we show false positive suggestions like + // "open System" for `let _ = System.DateTime.Naaaw`. Here only "Naaw" is unresolved. + |> Array.filter (fun x -> x |> Array.exists (fun x -> not x.Resolved)) + |> Array.choose (fun parts -> + let parts = parts |> Array.map (fun x -> x.Ident) + if not (candidate |> Array.endsWith parts) then None + else + let identCount = parts.Length + let fullOpenableNs, restIdents = + let openableNsCount = + match requiresQualifiedAccessParent with + | Some parent -> min parent.Length candidate.Length + | None -> candidate.Length + candidate.[0..openableNsCount - 2], candidate.[openableNsCount - 1..] + + let openableNs = cutAutoOpenModules autoOpenParent fullOpenableNs + + let getRelativeNs ns = + match targetNamespace, candidateNamespace with + | Some targetNs, Some candidateNs when candidateNs = targetNs -> + getRelativeNamespace targetScope ns + | None, _ -> getRelativeNamespace targetScope ns + | _ -> ns + + let relativeNs = getRelativeNs openableNs + + match relativeNs, restIdents with + | [||], [||] -> None + | [||], [|_|] -> None + | _ -> + let fullRelativeName = Array.append (getRelativeNs fullOpenableNs) restIdents + let ns = + match relativeNs with + | [||] -> None + | _ when identCount > 1 && relativeNs.Length >= identCount -> + Some (relativeNs.[0..relativeNs.Length - identCount] |> String.concat ".") + | _ -> Some (relativeNs |> String.concat ".") + let qualifier = + if fullRelativeName.Length > 1 && fullRelativeName.Length >= identCount then + fullRelativeName.[0..fullRelativeName.Length - identCount] + else fullRelativeName + Some + { FullRelativeName = String.concat "." fullRelativeName //.[0..fullRelativeName.Length - identCount - 1] + Qualifier = String.concat "." qualifier + Namespace = ns + FullDisplayName = match restIdents with [|_|] -> "" | _ -> String.concat "." restIdents + LastIdent = Array.tryLast restIdents |> Option.defaultValue "" }) + +module ParsedInput = let emptyStringSet = HashSet() - let GetRangeOfExprLeftOfDot(pos: pos, parseTreeOpt) = - match parseTreeOpt with - | None -> None - | Some parseTree -> + let GetRangeOfExprLeftOfDot(pos: pos, parsedInput) = let CheckLongIdent(longIdent: LongIdent) = // find the longest prefix before the "pos" dot let mutable r = (List.head longIdent).idRange @@ -695,21 +204,21 @@ module UntypedParseImpl = couldBeBeforeFront <- false couldBeBeforeFront, r - AstTraversal.Traverse(pos, parseTree, { new AstTraversal.AstVisitorBase<_>() with - member this.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) = + SyntaxTraversal.Traverse(pos, parsedInput, { new SyntaxVisitorBase<_>() with + member _.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) = let expr = expr // fix debugger locals match expr with | SynExpr.LongIdent (_, LongIdentWithDots(longIdent, _), _altNameRefCell, _range) -> let _, r = CheckLongIdent longIdent Some r | SynExpr.LongIdentSet (LongIdentWithDots(longIdent, _), synExpr, _range) -> - if AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then + if SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then traverseSynExpr synExpr else let _, r = CheckLongIdent longIdent Some r | SynExpr.DotGet (synExpr, _dotm, LongIdentWithDots(longIdent, _), _range) -> - if AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then + if SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then traverseSynExpr synExpr else let inFront, r = CheckLongIdent longIdent @@ -719,16 +228,16 @@ module UntypedParseImpl = // see comment below for SynExpr.DotSet Some ((unionRanges synExpr.Range r)) | SynExpr.Set (synExpr, synExpr2, range) -> - if AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then + if SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then traverseSynExpr synExpr - elif AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr2.Range pos then + elif SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr2.Range pos then traverseSynExpr synExpr2 else Some range | SynExpr.DotSet (synExpr, LongIdentWithDots(longIdent, _), synExpr2, _range) -> - if AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then + if SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then traverseSynExpr synExpr - elif AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr2.Range pos then + elif SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr2.Range pos then traverseSynExpr synExpr2 else let inFront, r = CheckLongIdent longIdent @@ -742,11 +251,11 @@ module UntypedParseImpl = // ------ we want this value Some ((unionRanges synExpr.Range r)) | SynExpr.DotNamedIndexedPropertySet (synExpr, LongIdentWithDots(longIdent, _), synExpr2, synExpr3, _range) -> - if AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then + if SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then traverseSynExpr synExpr - elif AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr2.Range pos then + elif SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr2.Range pos then traverseSynExpr synExpr2 - elif AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr3.Range pos then + elif SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr3.Range pos then traverseSynExpr synExpr3 else let inFront, r = CheckLongIdent longIdent @@ -755,18 +264,18 @@ module UntypedParseImpl = else Some ((unionRanges synExpr.Range r)) | SynExpr.DiscardAfterMissingQualificationAfterDot (synExpr, _range) -> // get this for e.g. "bar()." - if AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then + if SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then traverseSynExpr synExpr else Some (synExpr.Range) | SynExpr.FromParseError (synExpr, range) -> - if AstTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then + if SyntaxTraversal.rangeContainsPosLeftEdgeInclusive synExpr.Range pos then traverseSynExpr synExpr else Some range | SynExpr.App (ExprAtomicFlag.NonAtomic, true, (SynExpr.Ident ident), rhs, _) when ident.idText = "op_ArrayLookup" - && not(AstTraversal.rangeContainsPosLeftEdgeInclusive rhs.Range pos) -> + && not(SyntaxTraversal.rangeContainsPosLeftEdgeInclusive rhs.Range pos) -> match defaultTraverse expr with | None -> // (expr).(expr) is an ML-deprecated array lookup, but we want intellisense on the dot @@ -778,10 +287,7 @@ module UntypedParseImpl = }) /// searches for the expression island suitable for the evaluation by the debugger - let TryFindExpressionIslandInPosition(pos: pos, parseTreeOpt) = - match parseTreeOpt with - | None -> None - | Some parseTree -> + let TryFindExpressionIslandInPosition(pos: pos, parsedInput) = let getLidParts (lid : LongIdent) = lid |> Seq.takeWhile (fun i -> posGeq pos i.idRange.Start) @@ -812,15 +318,15 @@ module UntypedParseImpl = | _ -> None let rec walker = - { new AstTraversal.AstVisitorBase<_>() with - member this.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) = + { new SyntaxVisitorBase<_>() with + member _.VisitExpr(_path, _traverseSynExpr, defaultTraverse, expr) = if rangeContainsPos expr.Range pos then match TryGetExpression false expr with | (Some parts) -> parts |> String.concat "." |> Some | _ -> defaultTraverse expr else None } - AstTraversal.Traverse(pos, parseTree, walker) + SyntaxTraversal.Traverse(pos, parsedInput, walker) // Given a cursor position here: // f(x) . ident @@ -834,14 +340,11 @@ module UntypedParseImpl = // ^ // would return None // TODO would be great to unify this with GetRangeOfExprLeftOfDot above, if possible, as they are similar - let TryFindExpressionASTLeftOfDotLeftOfCursor(pos, parseTreeOpt) = - match parseTreeOpt with - | None -> None - | Some parseTree -> - let dive x = AstTraversal.dive x - let pick x = AstTraversal.pick pos x + let TryFindExpressionASTLeftOfDotLeftOfCursor(pos, parsedInput) = + let dive x = SyntaxTraversal.dive x + let pick x = SyntaxTraversal.pick pos x let walker = - { new AstTraversal.AstVisitorBase<_>() with + { new SyntaxVisitorBase<_>() with member this.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) = let pick = pick expr.Range let traverseSynExpr, defaultTraverse, expr = traverseSynExpr, defaultTraverse, expr // for debugging: debugger does not get object expression params as local vars @@ -921,7 +424,7 @@ module UntypedParseImpl = | r -> r | SynExpr.App (ExprAtomicFlag.NonAtomic, true, (SynExpr.Ident ident), lhs, _m) when ident.idText = "op_ArrayLookup" - && not(AstTraversal.rangeContainsPosLeftEdgeInclusive lhs.Range pos) -> + && not(SyntaxTraversal.rangeContainsPosLeftEdgeInclusive lhs.Range pos) -> match defaultTraverse expr with | None -> // (expr).(expr) is an ML-deprecated array lookup, but we want intellisense on the dot @@ -929,12 +432,12 @@ module UntypedParseImpl = Some (lhs.Range.End, false) | x -> x // we found the answer deeper somewhere in the lhs | _ -> defaultTraverse expr } - AstTraversal.Traverse(pos, parseTree, walker) + SyntaxTraversal.Traverse(pos, parsedInput, walker) - let GetEntityKind (pos: pos, input: ParsedInput) : EntityKind option = + let GetEntityKind (pos: pos, parsedInput: ParsedInput) : EntityKind option = let (|ConstructorPats|) = function - | Pats ps -> ps - | NamePatPairs(xs, _) -> List.map snd xs + | SynArgPats.Pats ps -> ps + | SynArgPats.NamePatPairs(xs, _) -> List.map snd xs /// An recursive pattern that collect all sequential expressions to avoid StackOverflowException let rec (|Sequentials|_|) = function @@ -959,9 +462,9 @@ module UntypedParseImpl = if isPosInRange attr.Range then Some EntityKind.Attribute else None |> Option.orElse (walkExprWithKind (Some EntityKind.Type) attr.ArgExpr) - and walkTypar (Typar (ident, _, _)) = ifPosInRange ident.idRange (fun _ -> Some EntityKind.Type) + and walkTypar (SynTypar (ident, _, _)) = ifPosInRange ident.idRange (fun _ -> Some EntityKind.Type) - and walkTyparDecl (SynTyparDecl.TyparDecl (Attributes attrs, typar)) = + and walkTyparDecl (SynTyparDecl.SynTyparDecl (Attributes attrs, typar)) = List.tryPick walkAttribute attrs |> Option.orElse (walkTypar typar) @@ -981,9 +484,7 @@ module UntypedParseImpl = and walkPatWithKind (kind: EntityKind option) = function | SynPat.Ands (pats, _) -> List.tryPick walkPat pats - | SynPat.Named(SynPat.Wild nameRange as pat, _, _, _, _) -> - if isPosInRange nameRange then None - else walkPat pat + | SynPat.As (pat1, pat2, _) -> List.tryPick walkPat [pat1; pat2] | SynPat.Typed(pat, t, _) -> walkPat pat |> Option.orElse (walkType t) | SynPat.Attrib(pat, Attributes attrs, _) -> walkPat pat |> Option.orElse (List.tryPick walkAttribute attrs) | SynPat.Or(pat1, pat2, _) -> List.tryPick walkPat [pat1; pat2] @@ -991,7 +492,7 @@ module UntypedParseImpl = ifPosInRange r (fun _ -> kind) |> Option.orElse ( typars - |> Option.bind (fun (SynValTyparDecls (typars, _, constraints)) -> + |> Option.bind (fun (ValTyparDecls (typars, constraints, _)) -> List.tryPick walkTyparDecl typars |> Option.orElse (List.tryPick walkTypeConstraint constraints))) |> Option.orElse (List.tryPick walkPat pats) @@ -1004,7 +505,7 @@ module UntypedParseImpl = and walkPat = walkPatWithKind None - and walkBinding (SynBinding.Binding(_, _, _, _, Attributes attrs, _, _, pat, returnInfo, e, _, _)) = + and walkBinding (SynBinding(_, _, _, _, Attributes attrs, _, _, pat, returnInfo, e, _, _)) = List.tryPick walkAttribute attrs |> Option.orElse (walkPat pat) |> Option.orElse (walkExpr e) @@ -1013,7 +514,7 @@ module UntypedParseImpl = | Some (SynBindingReturnInfo (t, _, _)) -> walkType t | None -> None) - and walkInterfaceImpl (InterfaceImpl(_, bindings, _)) = + and walkInterfaceImpl (SynInterfaceImpl(_, bindings, _)) = List.tryPick walkBinding bindings and walkIndexerArg = function @@ -1023,7 +524,7 @@ module UntypedParseImpl = and walkType = function | SynType.LongIdent ident -> // we protect it with try..with because System.Exception : rangeOfLidwd may raise - // at FSharp.Compiler.SyntaxTree.LongIdentWithDots.get_Range() in D:\j\workspace\release_ci_pa---3f142ccc\src\fsharp\ast.fs: line 156 + // at FSharp.Compiler.Syntax.LongIdentWithDots.get_Range() in D:\j\workspace\release_ci_pa---3f142ccc\src\fsharp\ast.fs: line 156 try ifPosInRange ident.Range (fun _ -> Some EntityKind.Type) with _ -> None | SynType.App(ty, _, types, _, _, _, _) -> walkType ty |> Option.orElse (List.tryPick walkType types) @@ -1038,7 +539,7 @@ module UntypedParseImpl = | SynType.Paren(t, _) -> walkType t | _ -> None - and walkClause (Clause(pat, e1, e2, _, _)) = + and walkClause (SynMatchClause(pat, e1, e2, _, _)) = walkPatWithKind (Some EntityKind.Type) pat |> Option.orElse (walkExpr e2) |> Option.orElse (Option.bind walkExpr e1) @@ -1133,10 +634,10 @@ module UntypedParseImpl = | SynSimplePat.Typed(pat, t, _) -> walkSimplePat pat |> Option.orElse (walkType t) | _ -> None - and walkField (SynField.Field(Attributes attrs, _, _, t, _, _, _, _)) = + and walkField (SynField(Attributes attrs, _, _, t, _, _, _, _)) = List.tryPick walkAttribute attrs |> Option.orElse (walkType t) - and walkValSig (SynValSig.ValSpfn(Attributes attrs, _, _, t, _, _, _, _, _, _, _)) = + and walkValSig (SynValSig(Attributes attrs, _, _, t, _, _, _, _, _, _, _)) = List.tryPick walkAttribute attrs |> Option.orElse (walkType t) and walkMemberSig = function @@ -1144,7 +645,7 @@ module UntypedParseImpl = | SynMemberSig.Member(vs, _, _) -> walkValSig vs | SynMemberSig.Interface(t, _) -> walkType t | SynMemberSig.ValField(f, _) -> walkField f - | SynMemberSig.NestedType(SynTypeDefnSig.TypeDefnSig (info, repr, memberSigs, _), _) -> + | SynMemberSig.NestedType(SynTypeDefnSig.SynTypeDefnSig (info, repr, memberSigs, _), _) -> walkComponentInfo false info |> Option.orElse (walkTypeDefnSigRepr repr) |> Option.orElse (List.tryPick walkMemberSig memberSigs) @@ -1167,13 +668,13 @@ module UntypedParseImpl = |> Option.orElse (walkExpr e) | _ -> None - and walkEnumCase (EnumCase(Attributes attrs, _, _, _, _)) = List.tryPick walkAttribute attrs + and walkEnumCase (SynEnumCase(Attributes attrs, _, _, _, _, _)) = List.tryPick walkAttribute attrs and walkUnionCaseType = function - | SynUnionCaseType.UnionCaseFields fields -> List.tryPick walkField fields - | SynUnionCaseType.UnionCaseFullType(t, _) -> walkType t + | SynUnionCaseKind.Fields fields -> List.tryPick walkField fields + | SynUnionCaseKind.FullType(t, _) -> walkType t - and walkUnionCase (UnionCase(Attributes attrs, _, t, _, _, _)) = + and walkUnionCase (SynUnionCase(Attributes attrs, _, t, _, _, _)) = List.tryPick walkAttribute attrs |> Option.orElse (walkUnionCaseType t) and walkTypeDefnSimple = function @@ -1183,7 +684,8 @@ module UntypedParseImpl = | SynTypeDefnSimpleRepr.TypeAbbrev(_, t, _) -> walkType t | _ -> None - and walkComponentInfo isModule (ComponentInfo(Attributes attrs, typars, constraints, _, _, _, _, r)) = + and walkComponentInfo isModule (SynComponentInfo(Attributes attrs, TyparsAndConstraints (typars, cs1), cs2, _, _, _, _, r)) = + let constraints = cs1 @ cs2 if isModule then None else ifPosInRange r (fun _ -> Some EntityKind.Type) |> Option.orElse ( List.tryPick walkAttribute attrs @@ -1200,7 +702,7 @@ module UntypedParseImpl = | SynTypeDefnSigRepr.Simple(defn, _) -> walkTypeDefnSimple defn | SynTypeDefnSigRepr.Exception(_) -> None - and walkTypeDefn (TypeDefn (info, repr, members, _)) = + and walkTypeDefn (SynTypeDefn (info, repr, members, _, _)) = walkComponentInfo false info |> Option.orElse (walkTypeDefnRepr repr) |> Option.orElse (List.tryPick walkMember members) @@ -1217,11 +719,10 @@ module UntypedParseImpl = | SynModuleDecl.Types (types, _) -> List.tryPick walkTypeDefn types | _ -> None - match input with + match parsedInput with | ParsedInput.SigFile _ -> None | ParsedInput.ImplFile input -> walkImplFileInput input - type internal TS = AstTraversal.TraverseStep /// Matches the most nested [< and >] pair. let insideAttributeApplicationRegex = Regex(@"(?<=\[\<)(?(.*?))(?=\>\])", RegexOptions.Compiled ||| RegexOptions.ExplicitCapture) @@ -1287,7 +788,7 @@ module UntypedParseImpl = | false, false, true -> Struct | _ -> Invalid - let GetCompletionContextForInheritSynMember ((ComponentInfo(Attributes synAttributes, _, _, _, _, _, _, _)), typeDefnKind : SynTypeDefnKind, completionPath) = + let GetCompletionContextForInheritSynMember ((SynComponentInfo(Attributes synAttributes, _, _, _, _, _, _, _)), typeDefnKind : SynTypeDefnKind, completionPath) = let success k = Some (CompletionContext.Inherit (k, completionPath)) @@ -1296,18 +797,18 @@ module UntypedParseImpl = // - try to obtain it from attribute // - if no attributes present - infer kind from members match typeDefnKind with - | TyconClass -> + | SynTypeDefnKind.Class -> match synAttributes with | Class | Unknown -> success InheritanceContext.Class | _ -> Some CompletionContext.Invalid // non-matching attributes - | TyconInterface -> + | SynTypeDefnKind.Interface -> match synAttributes with | Interface | Unknown -> success InheritanceContext.Interface | _ -> Some CompletionContext.Invalid // non-matching attributes - | TyconStruct -> + | SynTypeDefnKind.Struct -> // display nothing for structs Some CompletionContext.Invalid - | TyconUnspecified -> + | SynTypeDefnKind.Unspecified -> match synAttributes with | Class -> success InheritanceContext.Class | Interface -> success InheritanceContext.Interface @@ -1326,9 +827,9 @@ module UntypedParseImpl = | _ -> None // checks if we are in rhs of the range operator - let isInRhsOfRangeOp (p : AstTraversal.TraversePath) = + let isInRhsOfRangeOp (p : SyntaxVisitorPath) = match p with - | TS.Expr(Operator "op_Range" _) :: _ -> true + | SyntaxNode.SynExpr(Operator "op_Range" _) :: _ -> true | _ -> false let (|Setter|_|) e = @@ -1397,9 +898,9 @@ module UntypedParseImpl = let (|PartOfParameterList|_|) precedingArgument path = match path with - | TS.Expr(SynExpr.Paren _) :: TS.Expr(NewObjectOrMethodCall args) :: _ -> + | SyntaxNode.SynExpr(SynExpr.Paren _) :: SyntaxNode.SynExpr(NewObjectOrMethodCall args) :: _ -> if Option.isSome precedingArgument then None else Some args - | TS.Expr(SynExpr.Tuple (false, elements, commas, _)) :: TS.Expr(SynExpr.Paren _) :: TS.Expr(NewObjectOrMethodCall args) :: _ -> + | SyntaxNode.SynExpr(SynExpr.Tuple (false, elements, commas, _)) :: SyntaxNode.SynExpr(SynExpr.Paren _) :: SyntaxNode.SynExpr(NewObjectOrMethodCall args) :: _ -> match precedingArgument with | None -> Some args | Some e -> @@ -1414,8 +915,8 @@ module UntypedParseImpl = let walker = { - new AstTraversal.AstVisitorBase<_>() with - member __.VisitExpr(path, _, defaultTraverse, expr) = + new SyntaxVisitorBase<_>() with + member _.VisitExpr(path, _, defaultTraverse, expr) = if isInRhsOfRangeOp path then match defaultTraverse expr with @@ -1426,7 +927,7 @@ module UntypedParseImpl = // new A($) | SynExpr.Const (SynConst.Unit, m) when rangeContainsPos m pos -> match path with - | TS.Expr(NewObjectOrMethodCall args) :: _ -> + | SyntaxNode.SynExpr(NewObjectOrMethodCall args) :: _ -> Some (CompletionContext.ParameterList args) | _ -> defaultTraverse expr @@ -1449,11 +950,11 @@ module UntypedParseImpl = | _ -> defaultTraverse expr - member __.VisitRecordField(path, copyOpt, field) = + member _.VisitRecordField(path, copyOpt, field) = let contextFromTreePath completionPath = // detect records usage in constructor match path with - | TS.Expr(_) :: TS.Binding(_) :: TS.MemberDefn(_) :: TS.TypeDefn(SynTypeDefn.TypeDefn(ComponentInfo(_, _, _, [id], _, _, _, _), _, _, _)) :: _ -> + | SyntaxNode.SynExpr(_) :: SyntaxNode.SynBinding(_) :: SyntaxNode.SynMemberDefn(_) :: SyntaxNode.SynTypeDefn(SynTypeDefn(SynComponentInfo(_, _, _, [id], _, _, _, _), _, _, _, _)) :: _ -> RecordContext.Constructor(id.idText) | _ -> RecordContext.New completionPath match field with @@ -1473,7 +974,7 @@ module UntypedParseImpl = | None -> contextFromTreePath ([], None) Some (CompletionContext.RecordField recordContext) - member __.VisitInheritSynMemberDefn(componentInfo, typeDefnKind, synType, _members, _range) = + member _.VisitInheritSynMemberDefn(_path, componentInfo, typeDefnKind, synType, _members, _range) = match synType with | SynType.LongIdent lidwd -> match parseLid lidwd with @@ -1482,13 +983,14 @@ module UntypedParseImpl = | _ -> None - member __.VisitBinding(defaultTraverse, (Binding(headPat = headPat) as synBinding)) = + member _.VisitBinding(_path, defaultTraverse, (SynBinding(headPat = headPat) as synBinding)) = let visitParam = function - | SynPat.Named (range = range) when rangeContainsPos range pos -> + | SynPat.Named (range = range) + | SynPat.As (_, SynPat.Named (range = range), _) when rangeContainsPos range pos -> // parameter without type hint, no completion Some CompletionContext.Invalid - | SynPat.Typed(SynPat.Named(SynPat.Wild range, _, _, _, _), _, _) when rangeContainsPos range pos -> + | SynPat.Typed(SynPat.Named(_, _, _, range), _, _) when rangeContainsPos range pos -> // parameter with type hint, but we are on its name, no completion Some CompletionContext.Invalid | _ -> defaultTraverse synBinding @@ -1513,16 +1015,17 @@ module UntypedParseImpl = | _ -> visitParam pat ) | _ -> defaultTraverse synBinding - | SynPat.Named(range = range) when rangeContainsPos range pos -> + | SynPat.Named(range = range) + | SynPat.As (_, SynPat.Named (range = range), _) when rangeContainsPos range pos -> // let fo|o = 1 Some CompletionContext.Invalid | _ -> defaultTraverse synBinding - member __.VisitHashDirective range = + member _.VisitHashDirective (_path, _directive, range) = if rangeContainsPos range pos then Some CompletionContext.Invalid else None - member __.VisitModuleOrNamespace(SynModuleOrNamespace(longId = idents)) = + member _.VisitModuleOrNamespace(_path, SynModuleOrNamespace(longId = idents)) = match List.tryLast idents with | Some lastIdent when pos.Line = lastIdent.idRange.EndLine && lastIdent.idRange.EndColumn >= 0 && pos.Column <= lineStr.Length -> let stringBetweenModuleNameAndPos = lineStr.[lastIdent.idRange.EndColumn..pos.Column - 1] @@ -1531,16 +1034,16 @@ module UntypedParseImpl = else None | _ -> None - member __.VisitComponentInfo(ComponentInfo(range = range)) = + member _.VisitComponentInfo(_path, SynComponentInfo(range = range)) = if rangeContainsPos range pos then Some CompletionContext.Invalid else None - member __.VisitLetOrUse(_, _, bindings, range) = + member _.VisitLetOrUse(_path, _, _, bindings, range) = match bindings with | [] when range.StartLine = pos.Line -> Some CompletionContext.Invalid | _ -> None - member __.VisitSimplePats pats = + member _.VisitSimplePats (_path, pats) = pats |> List.tryPick (fun pat -> match pat with | SynSimplePat.Id(range = range) @@ -1548,7 +1051,7 @@ module UntypedParseImpl = Some CompletionContext.Invalid | _ -> None) - member __.VisitModuleDecl(defaultTraverse, decl) = + member _.VisitModuleDecl(_path, defaultTraverse, decl) = match decl with | SynModuleDecl.Open(target, m) -> // in theory, this means we're "in an open" @@ -1568,14 +1071,14 @@ module UntypedParseImpl = None | _ -> defaultTraverse decl - member __.VisitType(defaultTraverse, ty) = + member _.VisitType(_path, defaultTraverse, ty) = match ty with | SynType.LongIdent _ when rangeContainsPos ty.Range pos -> Some CompletionContext.PatternType | _ -> defaultTraverse ty } - AstTraversal.Traverse(pos, parsedInput, walker) + SyntaxTraversal.Traverse(pos, parsedInput, walker) // Uncompleted attribute applications are not presented in the AST in any way. So, we have to parse source string. |> Option.orElseWith (fun _ -> let cutLeadingAttributes (str: string) = @@ -1619,17 +1122,566 @@ module UntypedParseImpl = | _ -> None) /// Check if we are at an "open" declaration - let GetFullNameOfSmallestModuleOrNamespaceAtPoint (parsedInput: ParsedInput, pos: pos) = + let GetFullNameOfSmallestModuleOrNamespaceAtPoint (pos: pos, parsedInput: ParsedInput) = let mutable path = [] let visitor = - { new AstTraversal.AstVisitorBase() with + { new SyntaxVisitorBase() with override this.VisitExpr(_path, _traverseSynExpr, defaultTraverse, expr) = // don't need to keep going, namespaces and modules never appear inside Exprs None - override this.VisitModuleOrNamespace(SynModuleOrNamespace(longId = longId; range = range)) = + override this.VisitModuleOrNamespace(_path, SynModuleOrNamespace(longId = longId; range = range)) = if rangeContainsPos range pos then path <- path @ longId None // we should traverse the rest of the AST to find the smallest module } - AstTraversal.Traverse(pos, parsedInput, visitor) |> ignore + SyntaxTraversal.Traverse(pos, parsedInput, visitor) |> ignore path |> List.map (fun x -> x.idText) |> List.toArray + + /// An recursive pattern that collect all sequential expressions to avoid StackOverflowException + let rec (|Sequentials|_|) = function + | SynExpr.Sequential (_, _, e, Sequentials es, _) -> + Some(e :: es) + | SynExpr.Sequential (_, _, e1, e2, _) -> + Some [e1; e2] + | _ -> None + + let (|ConstructorPats|) = function + | SynArgPats.Pats ps -> ps + | SynArgPats.NamePatPairs(xs, _) -> List.map snd xs + + /// Returns all `Ident`s and `LongIdent`s found in an untyped AST. + let getLongIdents (parsedInput: ParsedInput) : IDictionary = + let identsByEndPos = Dictionary() + + let addLongIdent (longIdent: LongIdent) = + for ident in longIdent do + identsByEndPos.[ident.idRange.End] <- longIdent + + let addLongIdentWithDots (LongIdentWithDots (longIdent, lids) as value) = + match longIdent with + | [] -> () + | [_] as idents -> identsByEndPos.[value.Range.End] <- idents + | idents -> + for dotRange in lids do + identsByEndPos.[Position.mkPos dotRange.EndLine (dotRange.EndColumn - 1)] <- idents + identsByEndPos.[value.Range.End] <- idents + + let addIdent (ident: Ident) = + identsByEndPos.[ident.idRange.End] <- [ident] + + let rec walkImplFileInput (ParsedImplFileInput (modules = moduleOrNamespaceList)) = + List.iter walkSynModuleOrNamespace moduleOrNamespaceList + + and walkSynModuleOrNamespace (SynModuleOrNamespace(_, _, _, decls, _, Attributes attrs, _, _)) = + List.iter walkAttribute attrs + List.iter walkSynModuleDecl decls + + and walkAttribute (attr: SynAttribute) = + addLongIdentWithDots attr.TypeName + walkExpr attr.ArgExpr + + and walkTyparDecl (SynTyparDecl.SynTyparDecl (Attributes attrs, typar)) = + List.iter walkAttribute attrs + walkTypar typar + + and walkTypeConstraint = function + | SynTypeConstraint.WhereTyparIsValueType (t, _) + | SynTypeConstraint.WhereTyparIsReferenceType (t, _) + | SynTypeConstraint.WhereTyparIsUnmanaged (t, _) + | SynTypeConstraint.WhereTyparSupportsNull (t, _) + | SynTypeConstraint.WhereTyparIsComparable (t, _) + | SynTypeConstraint.WhereTyparIsEquatable (t, _) -> walkTypar t + | SynTypeConstraint.WhereTyparDefaultsToType (t, ty, _) + | SynTypeConstraint.WhereTyparSubtypeOfType (t, ty, _) -> walkTypar t; walkType ty + | SynTypeConstraint.WhereTyparIsEnum (t, ts, _) + | SynTypeConstraint.WhereTyparIsDelegate (t, ts, _) -> walkTypar t; List.iter walkType ts + | SynTypeConstraint.WhereTyparSupportsMember (ts, sign, _) -> List.iter walkType ts; walkMemberSig sign + + and walkPat = function + | SynPat.Tuple (_,pats, _) + | SynPat.ArrayOrList (_, pats, _) + | SynPat.Ands (pats, _) -> List.iter walkPat pats + | SynPat.Named (ident, _, _, _) -> addIdent ident + | SynPat.Typed (pat, t, _) -> + walkPat pat + walkType t + | SynPat.Attrib (pat, Attributes attrs, _) -> + walkPat pat + List.iter walkAttribute attrs + | SynPat.As (pat1, pat2, _) + | SynPat.Or (pat1, pat2, _) -> List.iter walkPat [pat1; pat2] + | SynPat.LongIdent (ident, _, typars, ConstructorPats pats, _, _) -> + addLongIdentWithDots ident + typars + |> Option.iter (fun (ValTyparDecls (typars, constraints, _)) -> + List.iter walkTyparDecl typars + List.iter walkTypeConstraint constraints) + List.iter walkPat pats + | SynPat.Paren (pat, _) -> walkPat pat + | SynPat.IsInst (t, _) -> walkType t + | SynPat.QuoteExpr(e, _) -> walkExpr e + | _ -> () + + and walkTypar (SynTypar _) = () + + and walkBinding (SynBinding(_, _, _, _, Attributes attrs, _, _, pat, returnInfo, e, _, _)) = + List.iter walkAttribute attrs + walkPat pat + walkExpr e + returnInfo |> Option.iter (fun (SynBindingReturnInfo (t, _, _)) -> walkType t) + + and walkInterfaceImpl (SynInterfaceImpl(_, bindings, _)) = List.iter walkBinding bindings + + and walkIndexerArg = function + | SynIndexerArg.One (e, _, _) -> walkExpr e + | SynIndexerArg.Two (e1, _, e2, _, _, _) -> List.iter walkExpr [e1; e2] + + and walkType = function + | SynType.Array (_, t, _) + | SynType.HashConstraint (t, _) + | SynType.MeasurePower (t, _, _) + | SynType.Paren (t, _) -> walkType t + | SynType.Fun (t1, t2, _) + | SynType.MeasureDivide (t1, t2, _) -> walkType t1; walkType t2 + | SynType.LongIdent ident -> addLongIdentWithDots ident + | SynType.App (ty, _, types, _, _, _, _) -> walkType ty; List.iter walkType types + | SynType.LongIdentApp (_, _, _, types, _, _, _) -> List.iter walkType types + | SynType.Tuple (_, ts, _) -> ts |> List.iter (fun (_, t) -> walkType t) + | SynType.WithGlobalConstraints (t, typeConstraints, _) -> + walkType t; List.iter walkTypeConstraint typeConstraints + | _ -> () + + and walkClause (SynMatchClause (pat, e1, e2, _, _)) = + walkPat pat + walkExpr e2 + e1 |> Option.iter walkExpr + + and walkSimplePats = function + | SynSimplePats.SimplePats (pats, _) -> List.iter walkSimplePat pats + | SynSimplePats.Typed (pats, ty, _) -> + walkSimplePats pats + walkType ty + + and walkExpr = function + | SynExpr.Paren (e, _, _, _) + | SynExpr.Quote (_, _, e, _, _) + | SynExpr.Typed (e, _, _) + | SynExpr.InferredUpcast (e, _) + | SynExpr.InferredDowncast (e, _) + | SynExpr.AddressOf (_, e, _, _) + | SynExpr.DoBang (e, _) + | SynExpr.YieldOrReturn (_, e, _) + | SynExpr.ArrayOrListOfSeqExpr (_, e, _) + | SynExpr.CompExpr (_, _, e, _) + | SynExpr.Do (e, _) + | SynExpr.Assert (e, _) + | SynExpr.Lazy (e, _) + | SynExpr.YieldOrReturnFrom (_, e, _) -> walkExpr e + | SynExpr.Lambda (_, _, pats, e, _, _) -> + walkSimplePats pats + walkExpr e + | SynExpr.New (_, t, e, _) + | SynExpr.TypeTest (e, t, _) + | SynExpr.Upcast (e, t, _) + | SynExpr.Downcast (e, t, _) -> walkExpr e; walkType t + | SynExpr.Tuple (_, es, _, _) + | Sequentials es + | SynExpr.ArrayOrList (_, es, _) -> List.iter walkExpr es + | SynExpr.App (_, _, e1, e2, _) + | SynExpr.TryFinally (e1, e2, _, _, _) + | SynExpr.While (_, e1, e2, _) -> List.iter walkExpr [e1; e2] + | SynExpr.Record (_, _, fields, _) -> + fields |> List.iter (fun ((ident, _), e, _) -> + addLongIdentWithDots ident + e |> Option.iter walkExpr) + | SynExpr.Ident ident -> addIdent ident + | SynExpr.ObjExpr (ty, argOpt, bindings, ifaces, _, _) -> + argOpt |> Option.iter (fun (e, ident) -> + walkExpr e + ident |> Option.iter addIdent) + walkType ty + List.iter walkBinding bindings + List.iter walkInterfaceImpl ifaces + | SynExpr.LongIdent (_, ident, _, _) -> addLongIdentWithDots ident + | SynExpr.For (_, ident, e1, _, e2, e3, _) -> + addIdent ident + List.iter walkExpr [e1; e2; e3] + | SynExpr.ForEach (_, _, _, pat, e1, e2, _) -> + walkPat pat + List.iter walkExpr [e1; e2] + | SynExpr.MatchLambda (_, _, synMatchClauseList, _, _) -> + List.iter walkClause synMatchClauseList + | SynExpr.Match (_, e, synMatchClauseList, _) -> + walkExpr e + List.iter walkClause synMatchClauseList + | SynExpr.TypeApp (e, _, tys, _, _, _, _) -> + List.iter walkType tys; walkExpr e + | SynExpr.LetOrUse (_, _, bindings, e, _) -> + List.iter walkBinding bindings; walkExpr e + | SynExpr.TryWith (e, _, clauses, _, _, _, _) -> + List.iter walkClause clauses; walkExpr e + | SynExpr.IfThenElse (e1, e2, e3, _, _, _, _) -> + List.iter walkExpr [e1; e2] + e3 |> Option.iter walkExpr + | SynExpr.LongIdentSet (ident, e, _) + | SynExpr.DotGet (e, _, ident, _) -> + addLongIdentWithDots ident + walkExpr e + | SynExpr.DotSet (e1, idents, e2, _) -> + walkExpr e1 + addLongIdentWithDots idents + walkExpr e2 + | SynExpr.Set (e1, e2, _) -> + walkExpr e1 + walkExpr e2 + | SynExpr.DotIndexedGet (e, args, _, _) -> + walkExpr e + List.iter walkIndexerArg args + | SynExpr.DotIndexedSet (e1, args, e2, _, _, _) -> + walkExpr e1 + List.iter walkIndexerArg args + walkExpr e2 + | SynExpr.NamedIndexedPropertySet (ident, e1, e2, _) -> + addLongIdentWithDots ident + List.iter walkExpr [e1; e2] + | SynExpr.DotNamedIndexedPropertySet (e1, ident, e2, e3, _) -> + addLongIdentWithDots ident + List.iter walkExpr [e1; e2; e3] + | SynExpr.JoinIn (e1, _, e2, _) -> List.iter walkExpr [e1; e2] + | SynExpr.LetOrUseBang (_, _, _, pat, e1, es, e2, _) -> + walkPat pat + walkExpr e1 + for (_,_,_,patAndBang,eAndBang,_) in es do + walkPat patAndBang + walkExpr eAndBang + walkExpr e2 + | SynExpr.TraitCall (ts, sign, e, _) -> + List.iter walkTypar ts + walkMemberSig sign + walkExpr e + | SynExpr.Const (SynConst.Measure(_, _, m), _) -> walkMeasure m + | _ -> () + + and walkMeasure = function + | SynMeasure.Product (m1, m2, _) + | SynMeasure.Divide (m1, m2, _) -> walkMeasure m1; walkMeasure m2 + | SynMeasure.Named (longIdent, _) -> addLongIdent longIdent + | SynMeasure.Seq (ms, _) -> List.iter walkMeasure ms + | SynMeasure.Power (m, _, _) -> walkMeasure m + | SynMeasure.Var (ty, _) -> walkTypar ty + | SynMeasure.One + | SynMeasure.Anon _ -> () + + and walkSimplePat = function + | SynSimplePat.Attrib (pat, Attributes attrs, _) -> + walkSimplePat pat + List.iter walkAttribute attrs + | SynSimplePat.Typed(pat, t, _) -> + walkSimplePat pat + walkType t + | _ -> () + + and walkField (SynField(Attributes attrs, _, _, t, _, _, _, _)) = + List.iter walkAttribute attrs + walkType t + + and walkValSig (SynValSig(Attributes attrs, _, _, t, SynValInfo(argInfos, argInfo), _, _, _, _, _, _)) = + List.iter walkAttribute attrs + walkType t + argInfo :: (argInfos |> List.concat) + |> List.collect (fun (SynArgInfo(Attributes attrs, _, _)) -> attrs) + |> List.iter walkAttribute + + and walkMemberSig = function + | SynMemberSig.Inherit (t, _) + | SynMemberSig.Interface(t, _) -> walkType t + | SynMemberSig.Member(vs, _, _) -> walkValSig vs + | SynMemberSig.ValField(f, _) -> walkField f + | SynMemberSig.NestedType(SynTypeDefnSig.SynTypeDefnSig (info, repr, memberSigs, _), _) -> + let isTypeExtensionOrAlias = + match repr with + | SynTypeDefnSigRepr.Simple(SynTypeDefnSimpleRepr.TypeAbbrev _, _) + | SynTypeDefnSigRepr.ObjectModel(SynTypeDefnKind.Abbrev, _, _) + | SynTypeDefnSigRepr.ObjectModel(SynTypeDefnKind.Augmentation, _, _) -> true + | _ -> false + walkComponentInfo isTypeExtensionOrAlias info + walkTypeDefnSigRepr repr + List.iter walkMemberSig memberSigs + + and walkMember memb = + match memb with + | SynMemberDefn.AbstractSlot (valSig, _, _) -> walkValSig valSig + | SynMemberDefn.Member (binding, _) -> walkBinding binding + | SynMemberDefn.ImplicitCtor (_, Attributes attrs, SynSimplePats.SimplePats(simplePats, _), _, _, _) -> + List.iter walkAttribute attrs + List.iter walkSimplePat simplePats + | SynMemberDefn.ImplicitInherit (t, e, _, _) -> walkType t; walkExpr e + | SynMemberDefn.LetBindings (bindings, _, _, _) -> List.iter walkBinding bindings + | SynMemberDefn.Interface (t, members, _) -> + walkType t + members |> Option.iter (List.iter walkMember) + | SynMemberDefn.Inherit (t, _, _) -> walkType t + | SynMemberDefn.ValField (field, _) -> walkField field + | SynMemberDefn.NestedType (tdef, _, _) -> walkTypeDefn tdef + | SynMemberDefn.AutoProperty (Attributes attrs, _, _, t, _, _, _, _, e, _, _) -> + List.iter walkAttribute attrs + Option.iter walkType t + walkExpr e + | _ -> () + + and walkEnumCase (SynEnumCase(Attributes attrs, _, _, _, _, _)) = List.iter walkAttribute attrs + + and walkUnionCaseType = function + | SynUnionCaseKind.Fields fields -> List.iter walkField fields + | SynUnionCaseKind.FullType (t, _) -> walkType t + + and walkUnionCase (SynUnionCase(Attributes attrs, _, t, _, _, _)) = + List.iter walkAttribute attrs + walkUnionCaseType t + + and walkTypeDefnSimple = function + | SynTypeDefnSimpleRepr.Enum (cases, _) -> List.iter walkEnumCase cases + | SynTypeDefnSimpleRepr.Union (_, cases, _) -> List.iter walkUnionCase cases + | SynTypeDefnSimpleRepr.Record (_, fields, _) -> List.iter walkField fields + | SynTypeDefnSimpleRepr.TypeAbbrev (_, t, _) -> walkType t + | _ -> () + + and walkComponentInfo isTypeExtensionOrAlias (SynComponentInfo(Attributes attrs, TyparsAndConstraints (typars, cs1), cs2, longIdent, _, _, _, _)) = + let constraints = cs1 @ cs2 + List.iter walkAttribute attrs + List.iter walkTyparDecl typars + List.iter walkTypeConstraint constraints + if isTypeExtensionOrAlias then + addLongIdent longIdent + + and walkTypeDefnRepr = function + | SynTypeDefnRepr.ObjectModel (_, defns, _) -> List.iter walkMember defns + | SynTypeDefnRepr.Simple(defn, _) -> walkTypeDefnSimple defn + | SynTypeDefnRepr.Exception _ -> () + + and walkTypeDefnSigRepr = function + | SynTypeDefnSigRepr.ObjectModel (_, defns, _) -> List.iter walkMemberSig defns + | SynTypeDefnSigRepr.Simple(defn, _) -> walkTypeDefnSimple defn + | SynTypeDefnSigRepr.Exception _ -> () + + and walkTypeDefn (SynTypeDefn (info, repr, members, implicitCtor, _)) = + let isTypeExtensionOrAlias = + match repr with + | SynTypeDefnRepr.ObjectModel (SynTypeDefnKind.Augmentation, _, _) + | SynTypeDefnRepr.ObjectModel (SynTypeDefnKind.Abbrev, _, _) + | SynTypeDefnRepr.Simple (SynTypeDefnSimpleRepr.TypeAbbrev _, _) -> true + | _ -> false + walkComponentInfo isTypeExtensionOrAlias info + walkTypeDefnRepr repr + List.iter walkMember members + Option.iter walkMember implicitCtor + + and walkSynModuleDecl (decl: SynModuleDecl) = + match decl with + | SynModuleDecl.NamespaceFragment fragment -> walkSynModuleOrNamespace fragment + | SynModuleDecl.NestedModule (info, _, modules, _, _) -> + walkComponentInfo false info + List.iter walkSynModuleDecl modules + | SynModuleDecl.Let (_, bindings, _) -> List.iter walkBinding bindings + | SynModuleDecl.DoExpr (_, expr, _) -> walkExpr expr + | SynModuleDecl.Types (types, _) -> List.iter walkTypeDefn types + | SynModuleDecl.Attributes (Attributes attrs, _) -> List.iter walkAttribute attrs + | _ -> () + + match parsedInput with + | ParsedInput.ImplFile input -> + walkImplFileInput input + | _ -> () + //debug "%A" idents + upcast identsByEndPos + + let GetLongIdentAt parsedInput pos = + let idents = getLongIdents parsedInput + match idents.TryGetValue pos with + | true, idents -> Some idents + | _ -> None + + type Scope = + { ShortIdents: ShortIdents + Kind: ScopeKind } + + let tryFindNearestPointAndModules (currentLine: int) (ast: ParsedInput) (insertionPoint: OpenStatementInsertionPoint) = + // We ignore all diagnostics during this operation + // + // Based on an initial review, no diagnostics should be generated. However the code should be checked more closely. + use _ignoreAllDiagnostics = new ErrorScope() + + let mutable result = None + let mutable ns = None + let modules = ResizeArray() + + let inline longIdentToIdents ident = ident |> Seq.map string |> Seq.toArray + + let addModule (longIdent: LongIdent, range: range) = + modules.Add + { Idents = longIdentToIdents longIdent + Range = range } + + let doRange kind (scope: LongIdent) line col = + if line <= currentLine then + match result, insertionPoint with + | None, _ -> + result <- Some ({ ShortIdents = longIdentToIdents scope; Kind = kind }, mkPos line col, false) + | Some (_, _, true), _ -> () + | Some (oldScope, oldPos, false), OpenStatementInsertionPoint.TopLevel when kind <> OpenDeclaration -> + result <- Some (oldScope, oldPos, true) + | Some (oldScope, oldPos, _), _ -> + match kind, oldScope.Kind with + | (Namespace | NestedModule | TopModule), OpenDeclaration + | _ when oldPos.Line <= line -> + result <- + Some ({ ShortIdents = + match scope with + | [] -> oldScope.ShortIdents + | _ -> longIdentToIdents scope + Kind = kind }, + mkPos line col, + false) + | _ -> () + + let getMinColumn decls = + match decls with + | [] -> None + | firstDecl :: _ -> + match firstDecl with + | SynModuleDecl.NestedModule (_, _, _, _, r) + | SynModuleDecl.Let (_, _, r) + | SynModuleDecl.DoExpr (_, _, r) + | SynModuleDecl.Types (_, r) + | SynModuleDecl.Exception (_, r) + | SynModuleDecl.Open (_, r) + | SynModuleDecl.HashDirective (_, r) -> Some r + | _ -> None + |> Option.map (fun r -> r.StartColumn) + + + let rec walkImplFileInput (ParsedImplFileInput (modules = moduleOrNamespaceList)) = + List.iter (walkSynModuleOrNamespace []) moduleOrNamespaceList + + and walkSynModuleOrNamespace (parent: LongIdent) (SynModuleOrNamespace(ident, _, kind, decls, _, _, _, range)) = + if range.EndLine >= currentLine then + let isModule = kind.IsModule + match isModule, parent, ident with + | false, _, _ -> ns <- Some (longIdentToIdents ident) + // top level module with "inlined" namespace like Ns1.Ns2.TopModule + | true, [], _f :: _s :: _ -> + let ident = longIdentToIdents ident + ns <- Some (ident.[0..ident.Length - 2]) + | _ -> () + + let fullIdent = parent @ ident + + let startLine = + if isModule then range.StartLine + else range.StartLine - 1 + + let scopeKind = + match isModule, parent with + | true, [] -> TopModule + | true, _ -> NestedModule + | _ -> Namespace + + doRange scopeKind fullIdent startLine range.StartColumn + addModule (fullIdent, range) + List.iter (walkSynModuleDecl fullIdent) decls + + and walkSynModuleDecl (parent: LongIdent) (decl: SynModuleDecl) = + match decl with + | SynModuleDecl.NamespaceFragment fragment -> walkSynModuleOrNamespace parent fragment + | SynModuleDecl.NestedModule(SynComponentInfo(_, _, _, ident, _, _, _, _), _, decls, _, range) -> + let fullIdent = parent @ ident + addModule (fullIdent, range) + if range.EndLine >= currentLine then + let moduleBodyIndentation = getMinColumn decls |> Option.defaultValue (range.StartColumn + 4) + doRange NestedModule fullIdent range.StartLine moduleBodyIndentation + List.iter (walkSynModuleDecl fullIdent) decls + | SynModuleDecl.Open (_, range) -> doRange OpenDeclaration [] range.EndLine (range.StartColumn - 5) + | SynModuleDecl.HashDirective (_, range) -> doRange HashDirective [] range.EndLine range.StartColumn + | _ -> () + + match ast with + | ParsedInput.SigFile _ -> () + | ParsedInput.ImplFile input -> walkImplFileInput input + + let res = + result + |> Option.map (fun (scope, pos, _) -> + let ns = ns |> Option.map longIdentToIdents + scope, ns, mkPos (pos.Line + 1) pos.Column) + + let modules = + modules + |> Seq.filter (fun x -> x.Range.EndLine < currentLine) + |> Seq.sortBy (fun x -> -x.Idents.Length) + |> Seq.toList + + res, modules + + let findBestPositionToInsertOpenDeclaration (modules: FSharpModule list) scope pos (entity: ShortIdents) = + match modules |> List.filter (fun x -> entity |> Array.startsWith x.Idents) with + | [] -> { ScopeKind = scope.Kind; Pos = pos } + | m :: _ -> + //printfn "All modules: %A, Win module: %A" modules m + let scopeKind = + match scope.Kind with + | TopModule -> NestedModule + | x -> x + { ScopeKind = scopeKind + Pos = mkPos (Line.fromZ m.Range.EndLine) m.Range.StartColumn } + + let TryFindInsertionContext (currentLine: int) (parsedInput: ParsedInput) (partiallyQualifiedName: MaybeUnresolvedIdent[]) (insertionPoint: OpenStatementInsertionPoint) = + let res, modules = tryFindNearestPointAndModules currentLine parsedInput insertionPoint + fun (requiresQualifiedAccessParent: ShortIdents option, autoOpenParent: ShortIdents option, entityNamespace: ShortIdents option, entity: ShortIdents) -> + + // We ignore all diagnostics during this operation + // + // Based on an initial review, no diagnostics should be generated. However the code should be checked more closely. + use _ignoreAllDiagnostics = new ErrorScope() + match res with + | None -> [||] + | Some (scope, ns, pos) -> + Entity.tryCreate(ns, scope.ShortIdents, partiallyQualifiedName, requiresQualifiedAccessParent, autoOpenParent, entityNamespace, entity) + |> Array.map (fun e -> e, findBestPositionToInsertOpenDeclaration modules scope pos entity) + + /// Corrects insertion line number based on kind of scope and text surrounding the insertion point. + let AdjustInsertionPoint (getLineStr: int -> string) ctx = + let line = + match ctx.ScopeKind with + | ScopeKind.TopModule -> + if ctx.Pos.Line > 1 then + // it's an implicit module without any open declarations + let line = getLineStr (ctx.Pos.Line - 2) + let isImplicitTopLevelModule = + not (line.StartsWithOrdinal("module") && not (line.EndsWithOrdinal("="))) + if isImplicitTopLevelModule then 1 else ctx.Pos.Line + else 1 + | ScopeKind.Namespace -> + // for namespaces the start line is start line of the first nested entity + if ctx.Pos.Line > 1 then + [0..ctx.Pos.Line - 1] + |> List.mapi (fun i line -> i, getLineStr line) + |> List.tryPick (fun (i, lineStr) -> + if lineStr.StartsWithOrdinal("namespace") then Some i + else None) + |> function + // move to the next line below "namespace" and convert it to F# 1-based line number + | Some line -> line + 2 + | None -> ctx.Pos.Line + else 1 + | _ -> ctx.Pos.Line + + mkPos line ctx.Pos.Column + + let FindNearestPointToInsertOpenDeclaration (currentLine: int) (parsedInput: ParsedInput) (entity: ShortIdents) (insertionPoint: OpenStatementInsertionPoint) = + match tryFindNearestPointAndModules currentLine parsedInput insertionPoint with + | Some (scope, _, point), modules -> + findBestPositionToInsertOpenDeclaration modules scope point entity + | _ -> + // we failed to find insertion point because ast is empty for some reason, return top left point in this case + { ScopeKind = ScopeKind.TopModule + Pos = mkPos 1 0 } diff --git a/src/fsharp/service/ServiceParsedInputOps.fsi b/src/fsharp/service/ServiceParsedInputOps.fsi new file mode 100644 index 00000000000..d0c36e03cc9 --- /dev/null +++ b/src/fsharp/service/ServiceParsedInputOps.fsi @@ -0,0 +1,150 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.EditorServices + +open System.Collections.Generic +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text + +type public CompletionPath = string list * string option // plid * residue + +[] +type public InheritanceContext = + | Class + | Interface + | Unknown + +[] +type public RecordContext = + | CopyOnUpdate of range: range * path: CompletionPath + | Constructor of typeName: string + | New of path: CompletionPath + +[] +type public CompletionContext = + /// Completion context cannot be determined due to errors + | Invalid + + /// Completing something after the inherit keyword + | Inherit of context: InheritanceContext * path: CompletionPath + + /// Completing records field + | RecordField of context: RecordContext + + | RangeOperator + + /// Completing named parameters\setters in parameter list of constructor\method calls + /// end of name ast node * list of properties\parameters that were already set + | ParameterList of pos * HashSet + + | AttributeApplication + + | OpenDeclaration of isOpenType: bool + + /// Completing pattern type (e.g. foo (x: |)) + | PatternType + +type public ModuleKind = + { IsAutoOpen: bool + HasModuleSuffix: bool } + +[] +type public EntityKind = + | Attribute + | Type + | FunctionOrValue of isActivePattern:bool + | Module of ModuleKind + +/// Kind of lexical scope. +[] +type public ScopeKind = + | Namespace + | TopModule + | NestedModule + | OpenDeclaration + | HashDirective + +/// Insert open namespace context. +[] +type public InsertionContext = + { + /// Current scope kind. + ScopeKind: ScopeKind + + /// Current position (F# compiler line number). + Pos: pos + } + +/// Where open statements should be added. +[] +type public OpenStatementInsertionPoint = + | TopLevel + | Nearest + +/// Short identifier, i.e. an identifier that contains no dots. +type public ShortIdent = string + +/// An array of `ShortIdent`. +type public ShortIdents = ShortIdent[] + +/// `ShortIdent` with a flag indicating if it's resolved in some scope. +type public MaybeUnresolvedIdent = + { Ident: ShortIdent; Resolved: bool } + +/// Helper data structure representing a symbol, suitable for implementing unresolved identifiers resolution code fixes. +type public InsertionContextEntity = + { + /// Full name, relative to the current scope. + FullRelativeName: string + + /// Ident parts needed to append to the current ident to make it resolvable in current scope. + Qualifier: string + + /// Namespace that is needed to open to make the entity resolvable in the current scope. + Namespace: string option + + /// Full display name (i.e. last ident plus modules with `RequireQualifiedAccess` attribute prefixed). + FullDisplayName: string + + /// Last part of the entity's full name. + LastIdent: ShortIdent + } + +/// Operations querying the entire syntax tree +module public ParsedInput = + val TryFindExpressionASTLeftOfDotLeftOfCursor: pos: pos * parsedInput: ParsedInput -> (pos * bool) option + + val GetRangeOfExprLeftOfDot: pos: pos * parsedInput: ParsedInput -> range option + + val TryFindExpressionIslandInPosition: pos: pos * parsedInput: ParsedInput -> string option + + val TryGetCompletionContext: pos: pos * parsedInput: ParsedInput * lineStr: string -> CompletionContext option + + val GetEntityKind: pos: pos * parsedInput: ParsedInput -> EntityKind option + + val GetFullNameOfSmallestModuleOrNamespaceAtPoint: pos: pos * parsedInput: ParsedInput -> string[] + + /// Returns `InsertContext` based on current position and symbol idents. + val TryFindInsertionContext: + currentLine: int -> + parsedInput: ParsedInput -> + partiallyQualifiedName: MaybeUnresolvedIdent[] -> + insertionPoint: OpenStatementInsertionPoint -> + (( (* requiresQualifiedAccessParent: *) ShortIdents option * (* autoOpenParent: *) ShortIdents option * (* entityNamespace *) ShortIdents option * (* entity: *) ShortIdents) -> (InsertionContextEntity * InsertionContext)[]) + + /// Returns `InsertContext` based on current position and symbol idents. + val FindNearestPointToInsertOpenDeclaration: currentLine: int -> parsedInput: ParsedInput -> entity: ShortIdents -> insertionPoint: OpenStatementInsertionPoint -> InsertionContext + + /// Returns long identifier at position. + val GetLongIdentAt: parsedInput: ParsedInput -> pos: pos -> LongIdent option + + /// Corrects insertion line number based on kind of scope and text surrounding the insertion point. + val AdjustInsertionPoint: getLineStr: (int -> string) -> ctx: InsertionContext -> pos + +// implementation details used by other code in the compiler +module internal SourceFileImpl = + + val IsInterfaceFile: string -> bool + + val AdditionalDefinesForUseInEditor: isInteractive: bool -> string list + diff --git a/src/fsharp/service/ServiceStructure.fs b/src/fsharp/service/ServiceStructure.fs index bd6cf90273a..2e5f9fd3c76 100644 --- a/src/fsharp/service/ServiceStructure.fs +++ b/src/fsharp/service/ServiceStructure.fs @@ -1,12 +1,13 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.EditorServices -open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open Internal.Utilities.Library +open FSharp.Compiler.Syntax open FSharp.Compiler.SyntaxTreeOps +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Position +open FSharp.Compiler.Text.Range module Structure = @@ -56,7 +57,7 @@ module Structure = | [] -> other | ls -> ls - |> List.map (fun (TyparDecl (_, typarg)) -> typarg.Range) + |> List.map (fun (SynTyparDecl (_, typarg)) -> typarg.Range) |> List.reduce unionRanges let rangeOfSynPatsElse other (synPats:SynSimplePat list) = @@ -274,7 +275,7 @@ module Structure = | SynExpr.Match (seqPointAtBinding, _expr, clauses, r) | SynExpr.MatchBang (seqPointAtBinding, _expr, clauses, r) -> match seqPointAtBinding with - | DebugPointAtBinding sr -> + | DebugPointAtBinding.Yes sr -> let collapse = Range.endToEnd sr r rcheck Scope.Match Collapse.Same r collapse | _ -> () @@ -282,7 +283,7 @@ module Structure = | SynExpr.MatchLambda (_, caseRange, clauses, matchSeqPoint, r) -> let caseRange = match matchSeqPoint with - | DebugPointAtBinding r -> r + | DebugPointAtBinding.Yes r -> r | _ -> caseRange let collapse = Range.endToEnd caseRange r rcheck Scope.MatchLambda Collapse.Same r collapse @@ -349,7 +350,7 @@ module Structure = parseExpr finallyExpr | SynExpr.IfThenElse (ifExpr, thenExpr, elseExprOpt, spIfToThen, _, ifToThenRange, r) -> match spIfToThen with - | DebugPointAtBinding rt -> + | DebugPointAtBinding.Yes rt -> // Outline the entire IfThenElse let fullrange = Range.startToEnd rt r let collapse = Range.endToEnd ifExpr.Range r @@ -406,7 +407,7 @@ module Structure = rcheck Scope.Record Collapse.Same r <| Range.modBoth 1 1 r | _ -> () - and parseMatchClause (SynMatchClause.Clause(synPat, _, e, _r, _) as clause) = + and parseMatchClause (SynMatchClause(synPat, _, e, _r, _) as clause) = let rec getLastPat = function | SynPat.Or(_, pat, _) -> getLastPat pat | x -> x @@ -437,19 +438,18 @@ module Structure = for attr in attrs do parseExpr attr.ArgExpr - and parseBinding (SynBinding.Binding (_, kind, _, _, attrs, _, SynValData(memberFlags, _, _), _, _, expr, br, _) as binding) = + and parseBinding (SynBinding(_, kind, _, _, attrs, _, SynValData(memberFlags, _, _), _, _, expr, br, _) as binding) = match kind with - | NormalBinding -> - let collapse = Range.endToEnd binding.RangeOfBindingSansRhs binding.RangeOfBindingAndRhs + | SynBindingKind.Normal -> + let collapse = Range.endToEnd binding.RangeOfBindingWithoutRhs binding.RangeOfBindingWithRhs match memberFlags with - | Some ({MemberKind=MemberKind.Constructor}) -> - let collapse = Range.startToEnd expr.Range br - rcheck Scope.New Collapse.Below br collapse + | Some {MemberKind=SynMemberKind.Constructor} -> + rcheck Scope.New Collapse.Below binding.RangeOfBindingWithRhs collapse | Some _ -> - rcheck Scope.Member Collapse.Below binding.RangeOfBindingAndRhs collapse + rcheck Scope.Member Collapse.Below binding.RangeOfBindingWithRhs collapse | None -> - rcheck Scope.LetOrUse Collapse.Below binding.RangeOfBindingAndRhs collapse - | DoBinding -> + rcheck Scope.LetOrUse Collapse.Below binding.RangeOfBindingWithRhs collapse + | SynBindingKind.Do -> let r = Range.modStart 2 br rcheck Scope.Do Collapse.Below br r | _ -> () @@ -458,7 +458,7 @@ module Structure = and parseBindings sqs = for bind in sqs do parseBinding bind - and parseExprInterface (InterfaceImpl(synType, bindings, range)) = + and parseExprInterface (SynInterfaceImpl(synType, bindings, range)) = let collapse = Range.endToEnd synType.Range range |> Range.modEnd -1 rcheck Scope.Interface Collapse.Below range collapse parseBindings bindings @@ -467,12 +467,12 @@ module Structure = and parseSynMemberDefn (objectModelRange: range) d = match d with - | SynMemberDefn.Member(SynBinding.Binding (attributes=attrs; valData=valData; headPat=synPat; range=bindingRange) as binding, _) -> + | SynMemberDefn.Member(SynBinding.SynBinding (attributes=attrs; valData=valData; headPat=synPat; range=bindingRange) as binding, _) -> match valData with - | SynValData (Some { MemberKind=MemberKind.Constructor }, _, _) -> + | SynValData (Some { MemberKind=SynMemberKind.Constructor }, _, _) -> let collapse = Range.endToEnd synPat.Range d.Range rcheck Scope.New Collapse.Below d.Range collapse - | SynValData (Some { MemberKind=MemberKind.PropertyGet | MemberKind.PropertySet }, _, _) -> + | SynValData (Some { MemberKind=SynMemberKind.PropertyGet | SynMemberKind.PropertySet }, _, _) -> let range = mkRange d.Range.FileName @@ -500,7 +500,7 @@ module Structure = | None -> () | SynMemberDefn.NestedType (td, _, _) -> parseTypeDefn td - | SynMemberDefn.AbstractSlot (ValSpfn(synType=synt), _, r) -> + | SynMemberDefn.AbstractSlot (SynValSig(synType=synt), _, r) -> rcheck Scope.Member Collapse.Below d.Range (Range.startToEnd synt.Range r) | SynMemberDefn.AutoProperty (synExpr=e; range=r) -> rcheck Scope.Member Collapse.Below d.Range r @@ -520,28 +520,28 @@ module Structure = and parseSimpleRepr simple = match simple with | SynTypeDefnSimpleRepr.Enum (cases, _er) -> - for EnumCase (attrs, _, _, _, cr) in cases do + for SynEnumCase (attrs, _, _, _, _, cr) in cases do rcheck Scope.EnumCase Collapse.Below cr cr parseAttributes attrs | SynTypeDefnSimpleRepr.Record (_, fields, rr) -> rcheck Scope.RecordDefn Collapse.Same rr rr - for Field (attrs, _, _, _, _, _, _, fr) in fields do + for SynField (attrs, _, _, _, _, _, _, fr) in fields do rcheck Scope.RecordField Collapse.Below fr fr parseAttributes attrs | SynTypeDefnSimpleRepr.Union (_, cases, ur) -> rcheck Scope.UnionDefn Collapse.Same ur ur - for UnionCase (attrs, _, _, _, _, cr) in cases do + for SynUnionCase (attrs, _, _, _, _, cr) in cases do rcheck Scope.UnionCase Collapse.Below cr cr parseAttributes attrs | _ -> () - and parseTypeDefn (TypeDefn(ComponentInfo(_, typeArgs, _, _, _, _, _, r), objectModel, members, fullrange)) = + and parseTypeDefn (SynTypeDefn(SynComponentInfo(_, TyparDecls typeArgs, _, _, _, _, _, r), objectModel, members, _, fullrange)) = let typeArgsRange = rangeOfTypeArgsElse r typeArgs let collapse = Range.endToEnd (Range.modEnd 1 typeArgsRange) fullrange match objectModel with | SynTypeDefnRepr.ObjectModel (defnKind, objMembers, r) -> match defnKind with - | TyconAugmentation -> + | SynTypeDefnKind.Augmentation -> rcheck Scope.TypeExtension Collapse.Below fullrange collapse | _ -> rcheck Scope.Type Collapse.Below fullrange collapse @@ -600,14 +600,14 @@ module Structure = match decl with | SynModuleDecl.Let (_, bindings, r) -> for binding in bindings do - let collapse = Range.endToEnd binding.RangeOfBindingSansRhs r + let collapse = Range.endToEnd binding.RangeOfBindingWithoutRhs r rcheck Scope.LetOrUse Collapse.Below r collapse parseBindings bindings | SynModuleDecl.Types (types, _r) -> for t in types do parseTypeDefn t // Fold the attributes above a module - | SynModuleDecl.NestedModule (ComponentInfo (attrs, _, _, _, _, _, _, cmpRange), _, decls, _, _) -> + | SynModuleDecl.NestedModule (SynComponentInfo (attrs, _, _, _, _, _, _, cmpRange), _, decls, _, _) -> // Outline the full scope of the module let r = Range.endToEnd cmpRange decl.Range rcheck Scope.Module Collapse.Below decl.Range r @@ -628,7 +628,7 @@ module Structure = let collapse = Range.endToEnd idRange r // do not return range for top level implicit module in scripts - if kind = NamedModule then + if kind = SynModuleOrNamespaceKind.NamedModule then rcheck Scope.Module Collapse.Below fullrange collapse collectHashDirectives decls @@ -719,7 +719,7 @@ module Structure = match typeSigs with | [] -> range | ls -> - let (TypeDefnSig(_, _, memberSigs, r)) = List.last ls + let (SynTypeDefnSig(_, _, memberSigs, r)) = List.last ls lastMemberSigRangeElse r memberSigs let lastModuleSigDeclRangeElse range (sigDecls:SynModuleSigDecl list) = @@ -728,7 +728,7 @@ module Structure = | ls -> match List.last ls with | SynModuleSigDecl.Types (typeSigs, r) -> lastTypeDefnSigRangeElse r typeSigs - | SynModuleSigDecl.Val (ValSpfn(range=r), _) -> r + | SynModuleSigDecl.Val (SynValSig(range=r), _) -> r | SynModuleSigDecl.Exception(_, r) -> r | SynModuleSigDecl.Open(_, r) -> r | SynModuleSigDecl.ModuleAbbrev(_, _, r) -> r @@ -738,7 +738,7 @@ module Structure = | SynMemberSig.Member(valSigs, _, r) -> let collapse = Range.endToEnd valSigs.RangeOfId r rcheck Scope.Member Collapse.Below r collapse - | SynMemberSig.ValField(Field(attrs, _, _, _, _, _, _, fr), fullrange) -> + | SynMemberSig.ValField(SynField(attrs, _, _, _, _, _, _, fr), fullrange) -> let collapse = Range.endToEnd fr fullrange rcheck Scope.Val Collapse.Below fullrange collapse parseAttributes attrs @@ -748,7 +748,7 @@ module Structure = parseTypeDefnSig typeDefSig | _ -> () - and parseTypeDefnSig (TypeDefnSig (ComponentInfo(attribs, typeArgs, _, longId, _, _, _, r) as __, objectModel, memberSigs, _)) = + and parseTypeDefnSig (SynTypeDefnSig (SynComponentInfo(attribs, TyparDecls typeArgs, _, longId, _, _, _, r) as __, objectModel, memberSigs, _)) = parseAttributes attribs let makeRanges memberSigs = @@ -763,11 +763,11 @@ module Structure = match objectModel with // matches against a type declaration with <'T, ...> and (args, ...) | SynTypeDefnSigRepr.ObjectModel - (TyconUnspecified, objMembers, _) -> + (SynTypeDefnKind.Unspecified, objMembers, _) -> List.iter parseSynMemberDefnSig objMembers let fullrange, collapse = makeRanges objMembers rcheck Scope.Type Collapse.Below fullrange collapse - | SynTypeDefnSigRepr.ObjectModel (TyconAugmentation, objMembers, _) -> + | SynTypeDefnSigRepr.ObjectModel (SynTypeDefnKind.Augmentation, objMembers, _) -> let fullrange, collapse = makeRanges objMembers rcheck Scope.TypeExtension Collapse.Below fullrange collapse List.iter parseSynMemberDefnSig objMembers @@ -825,14 +825,14 @@ module Structure = let rec parseModuleSigDeclaration (decl: SynModuleSigDecl) = match decl with - | SynModuleSigDecl.Val ((ValSpfn(attrs, ident, _, _, _, _, _, _, _, _, valrange)), r) -> + | SynModuleSigDecl.Val ((SynValSig(attrs, ident, _, _, _, _, _, _, _, _, valrange)), r) -> let collapse = Range.endToEnd ident.idRange valrange rcheck Scope.Val Collapse.Below r collapse parseAttributes attrs | SynModuleSigDecl.Types (typeSigs, _) -> List.iter parseTypeDefnSig typeSigs // Fold the attributes above a module - | SynModuleSigDecl.NestedModule (ComponentInfo (attrs, _, _, _, _, _, _, cmpRange), _, decls, moduleRange) -> + | SynModuleSigDecl.NestedModule (SynComponentInfo (attrs, _, _, _, _, _, _, cmpRange), _, decls, moduleRange) -> let rangeEnd = lastModuleSigDeclRangeElse moduleRange decls // Outline the full scope of the module let collapse = Range.endToEnd cmpRange rangeEnd diff --git a/src/fsharp/service/ServiceStructure.fsi b/src/fsharp/service/ServiceStructure.fsi index 6d26607e7aa..3ed1eb0dbab 100644 --- a/src/fsharp/service/ServiceStructure.fsi +++ b/src/fsharp/service/ServiceStructure.fsi @@ -1,9 +1,9 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.EditorServices -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text module public Structure = @@ -75,7 +75,7 @@ module public Structure = /// HintSpan in BlockSpan Range: range /// TextSpan in BlockSpan - CollapseRange:range + CollapseRange: range } /// Returns outlining ranges for given parsed input. diff --git a/src/fsharp/service/ServiceUntypedParse.fsi b/src/fsharp/service/ServiceUntypedParse.fsi deleted file mode 100755 index d3f6dc8cd68..00000000000 --- a/src/fsharp/service/ServiceUntypedParse.fsi +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -//---------------------------------------------------------------------------- -// API to the compiler as an incremental service for parsing, -// type checking and intellisense-like environment-reporting. -//---------------------------------------------------------------------------- - -namespace FSharp.Compiler.SourceCodeServices - -open System.Collections.Generic - -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree - -[] -/// Represents the results of parsing an F# file -type public FSharpParseFileResults = - - /// The syntax tree resulting from the parse - member ParseTree : ParsedInput option - - /// Attempts to find the range of the name of the nearest outer binding that contains a given position. - member TryRangeOfNameOfNearestOuterBindingContainingPos: pos: pos -> Option - - /// Attempts to find the range of an attempted lambda expression or pattern, the argument range, and the expr range when writing a C#-style "lambda" (which is actually an operator application) - member TryRangeOfParenEnclosingOpEqualsGreaterUsage: opGreaterEqualPos: pos -> Option - - /// Attempts to find the range of an expression `expr` contained in a `yield expr` or `return expr` expression (and bang-variants). - member TryRangeOfExprInYieldOrReturn: pos: pos -> Option - - /// Attempts to find the range of a record expression containing the given position. - member TryRangeOfRecordExpressionContainingPos: pos: pos -> Option - - /// Attempts to find an Ident of a pipeline containing the given position, and the number of args already applied in that pipeline. - /// For example, '[1..10] |> List.map ' would give back the ident of '|>' and 1, because it applied 1 arg (the list) to 'List.map'. - member TryIdentOfPipelineContainingPosAndNumArgsApplied: pos: pos -> Option<(Ident * int)> - - /// Determines if the given position is inside a function or method application. - member IsPosContainedInApplication: pos: pos -> bool - - /// Attempts to find the range of a function or method that is being applied. Also accounts for functions in pipelines. - member TryRangeOfFunctionOrMethodBeingApplied: pos: pos -> Option - - /// Gets the ranges of all arguments, if they can be found, for a function application at the given position. - member GetAllArgumentsForFunctionApplicationAtPostion: pos: pos -> range list option - - /// - /// Given the position of an expression, attempts to find the range of the - /// '!' in a derefence operation of that expression, like: - /// '!expr', '!(expr)', etc. - /// - member TryRangeOfRefCellDereferenceContainingPos: expressionPos: pos -> Option - - /// Notable parse info for ParameterInfo at a given location - member FindNoteworthyParamInfoLocations : pos:pos -> FSharpNoteworthyParamInfoLocations option - - /// Determines if the given position is contained within a curried parameter in a binding. - member IsPositionContainedInACurriedParameter: pos: pos -> bool - - /// Name of the file for which this information were created - member FileName : string - - /// Get declared items and the selected item at the specified location - member GetNavigationItems : unit -> FSharpNavigationItems - - /// Return the inner-most range associated with a possible breakpoint location - member ValidateBreakpointLocation : pos:pos -> range option - - /// When these files change then the build is invalid - member DependencyFiles : string[] - - /// Get the errors and warnings for the parse - member Errors : FSharpErrorInfo[] - - /// Indicates if any errors occurred during the parse - member ParseHadErrors : bool - - internal new: errors: FSharpErrorInfo[] * input: ParsedInput option * parseHadErrors: bool * dependencyFiles: string[] -> FSharpParseFileResults - -/// Information about F# source file names -module public SourceFile = - - /// Whether or not this file is compilable - val IsCompilable : string -> bool - - /// Whether or not this file should be a single-file project - val MustBeSingleFileProject : string -> bool - -type public CompletionPath = string list * string option // plid * residue - -[] -type public InheritanceContext = - | Class - | Interface - | Unknown - -[] -type public RecordContext = - | CopyOnUpdate of range * CompletionPath // range - | Constructor of string // typename - | New of CompletionPath - -[] -type public CompletionContext = - - /// completion context cannot be determined due to errors - | Invalid - - /// completing something after the inherit keyword - | Inherit of InheritanceContext * CompletionPath - - /// completing records field - | RecordField of RecordContext - - | RangeOperator - - /// completing named parameters\setters in parameter list of constructor\method calls - /// end of name ast node * list of properties\parameters that were already set - | ParameterList of pos * HashSet - - | AttributeApplication - - | OpenDeclaration of isOpenType: bool - - /// completing pattern type (e.g. foo (x: |)) - | PatternType - -type public ModuleKind = { IsAutoOpen: bool; HasModuleSuffix: bool } - -[] -type public EntityKind = - | Attribute - | Type - | FunctionOrValue of isActivePattern:bool - | Module of ModuleKind - -// implementation details used by other code in the compiler -module public UntypedParseImpl = - val TryFindExpressionASTLeftOfDotLeftOfCursor : pos * ParsedInput option -> (pos * bool) option - - val GetRangeOfExprLeftOfDot : pos * ParsedInput option -> range option - - val TryFindExpressionIslandInPosition : pos * ParsedInput option -> string option - - val TryGetCompletionContext : pos * ParsedInput * lineStr: string -> CompletionContext option - - val GetEntityKind: pos * ParsedInput -> EntityKind option - - val GetFullNameOfSmallestModuleOrNamespaceAtPoint : ParsedInput * pos -> string[] - -// implementation details used by other code in the compiler -module internal SourceFileImpl = - - val IsInterfaceFile : string -> bool - - val AdditionalDefinesForUseInEditor: isInteractive: bool -> string list - diff --git a/src/fsharp/service/ServiceXmlDocParser.fs b/src/fsharp/service/ServiceXmlDocParser.fs index 5cd1347a7df..62a12a88429 100644 --- a/src/fsharp/service/ServiceXmlDocParser.fs +++ b/src/fsharp/service/ServiceXmlDocParser.fs @@ -1,12 +1,12 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.EditorServices -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open Internal.Utilities.Library +open FSharp.Compiler.Syntax open FSharp.Compiler.Text -open FSharp.Compiler.XmlDoc +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Xml /// Represent an Xml documentation block in source code type XmlDocable = @@ -15,12 +15,13 @@ type XmlDocable = module XmlDocParsing = let (|ConstructorPats|) = function - | Pats ps -> ps - | NamePatPairs(xs, _) -> List.map snd xs + | SynArgPats.Pats ps -> ps + | SynArgPats.NamePatPairs(xs, _) -> List.map snd xs let rec digNamesFrom pat = match pat with - | SynPat.Named(_innerPat,id,_isTheThisVar,_access,_range) -> [id.idText] + | SynPat.As (_, SynPat.Named(id,_isTheThisVar,_access,_range), _) + | SynPat.Named (id,_isTheThisVar,_access,_range) -> [id.idText] | SynPat.Typed(pat,_type,_range) -> digNamesFrom pat | SynPat.Attrib(pat,_attrs,_range) -> digNamesFrom pat | SynPat.LongIdent(_lid,_idOpt,_typDeclsOpt,ConstructorPats pats,_access,_range) -> @@ -28,6 +29,7 @@ module XmlDocParsing = | SynPat.Tuple(_,pats,_range) -> pats |> List.collect digNamesFrom | SynPat.Paren(pat,_range) -> digNamesFrom pat | SynPat.OptionalVal (id, _) -> [id.idText] + | SynPat.As _ // no one uses as in fun decls | SynPat.Or _ // no one uses ors in fun decls | SynPat.Ands _ // no one uses ands in fun decls | SynPat.ArrayOrList _ // no one uses this in fun decls @@ -41,7 +43,7 @@ module XmlDocParsing = | SynPat.InstanceMember _ | SynPat.FromParseError _ -> [] - let getXmlDocablesImpl(sourceText: ISourceText, input: ParsedInput option) = + let getXmlDocablesImpl(sourceText: ISourceText, input: ParsedInput) = let indentOf (lineNum: int) = let mutable i = 0 let line = sourceText.GetLineString(lineNum-1) // -1 because lineNum reported by xmldocs are 1-based, but array is 0-based @@ -58,15 +60,15 @@ module XmlDocParsing = (synModuleDecls |> List.collect getXmlDocablesSynModuleDecl) | SynModuleDecl.Let(_, synBindingList, range) -> let anyXmlDoc = - synBindingList |> List.exists (fun (SynBinding.Binding(_, _, _, _, _, preXmlDoc, _, _, _, _, _, _)) -> + synBindingList |> List.exists (fun (SynBinding(_, _, _, _, _, preXmlDoc, _, _, _, _, _, _)) -> not <| isEmptyXmlDoc preXmlDoc) if anyXmlDoc then [] else let synAttributes = - synBindingList |> List.collect (fun (SynBinding.Binding(_, _, _, _, a, _, _, _, _, _, _, _)) -> a) + synBindingList |> List.collect (fun (SynBinding(_, _, _, _, a, _, _, _, _, _, _, _)) -> a) let fullRange = synAttributes |> List.fold (fun r a -> unionRanges r a.Range) range let line = fullRange.StartLine let indent = indentOf line - [ for SynBinding.Binding(_, _, _, _, _, _, synValData, synPat, _, _, _, _) in synBindingList do + [ for SynBinding(_, _, _, _, _, _, synValData, synPat, _, _, _, _) in synBindingList do match synValData with | SynValData(_memberFlagsOpt, SynValInfo(args, _), _) when not (List.isEmpty args) -> let parameters = @@ -96,7 +98,7 @@ module XmlDocParsing = and getXmlDocablesSynModuleOrNamespace (SynModuleOrNamespace(_, _, _, synModuleDecls, _, _, _, _)) = (synModuleDecls |> List.collect getXmlDocablesSynModuleDecl) - and getXmlDocablesSynTypeDefn (SynTypeDefn.TypeDefn(ComponentInfo(synAttributes, _, _, _, preXmlDoc, _, _, compRange), synTypeDefnRepr, synMemberDefns, tRange)) = + and getXmlDocablesSynTypeDefn (SynTypeDefn(SynComponentInfo(synAttributes, _, _, _, preXmlDoc, _, _, compRange), synTypeDefnRepr, synMemberDefns, _, tRange)) = let stuff = match synTypeDefnRepr with | SynTypeDefnRepr.ObjectModel(_, synMemberDefns, _) -> (synMemberDefns |> List.collect getXmlDocablesSynMemberDefn) @@ -112,7 +114,7 @@ module XmlDocParsing = docForTypeDefn @ stuff @ (synMemberDefns |> List.collect getXmlDocablesSynMemberDefn) and getXmlDocablesSynMemberDefn = function - | SynMemberDefn.Member(SynBinding.Binding(_, _, _, _, synAttributes, preXmlDoc, _, synPat, _, _, _, _), memRange) -> + | SynMemberDefn.Member(SynBinding(_, _, _, _, synAttributes, preXmlDoc, _, synPat, _, _, _, _), memRange) -> if isEmptyXmlDoc preXmlDoc then let fullRange = synAttributes |> List.fold (fun r a -> unionRanges r a.Range) memRange let line = fullRange.StartLine @@ -120,7 +122,7 @@ module XmlDocParsing = let paramNames = digNamesFrom synPat [XmlDocable(line,indent,paramNames)] else [] - | SynMemberDefn.AbstractSlot(ValSpfn(synAttributes, _, _, _, synValInfo, _, _, preXmlDoc, _, _, _), _, range) -> + | SynMemberDefn.AbstractSlot(SynValSig(synAttributes, _, _, _, synValInfo, _, _, preXmlDoc, _, _, _), _, range) -> if isEmptyXmlDoc preXmlDoc then let fullRange = synAttributes |> List.fold (fun r a -> unionRanges r a.Range) range let line = fullRange.StartLine @@ -152,34 +154,29 @@ module XmlDocParsing = | ParsedInput.SigFile _ -> [] // Get compiler options for the 'project' implied by a single script file - match input with - | Some input -> - getXmlDocablesInput input - | None -> - // Should not fail here, just in case - [] + getXmlDocablesInput input module XmlDocComment = - let private ws (s: string, pos) = + let ws (s: string, pos) = let res = s.TrimStart() Some (res, pos + (s.Length - res.Length)) - let private str (prefix: string) (s: string, pos) = + let str (prefix: string) (s: string, pos) = match s.StartsWithOrdinal(prefix) with | true -> let res = s.Substring prefix.Length Some (res, pos + (s.Length - res.Length)) | _ -> None - let private eol (s: string, pos) = + let eol (s: string, pos) = match s with | "" -> Some ("", pos) | _ -> None - let inline private (>=>) f g = f >> Option.bind g + let (>=>) f g = f >> Option.bind g // if it's a blank XML comment with trailing "<", returns Some (index of the "<"), otherwise returns None - let isBlank (s: string) = + let IsBlank (s: string) = let parser = ws >=> str "///" >=> ws >=> str "<" >=> eol let res = parser (s.TrimEnd(), 0) |> Option.map snd |> Option.map (fun x -> x - 1) res @@ -187,5 +184,5 @@ module XmlDocComment = module XmlDocParser = /// Get the list of Xml documentation from current source code - let getXmlDocables (sourceText: ISourceText, input) = + let GetXmlDocables (sourceText: ISourceText, input) = XmlDocParsing.getXmlDocablesImpl (sourceText, input) \ No newline at end of file diff --git a/src/fsharp/service/ServiceXmlDocParser.fsi b/src/fsharp/service/ServiceXmlDocParser.fsi index 75c212fca5c..bf3ef76e2e4 100644 --- a/src/fsharp/service/ServiceXmlDocParser.fsi +++ b/src/fsharp/service/ServiceXmlDocParser.fsi @@ -1,8 +1,8 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.EditorServices -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax open FSharp.Compiler.Text /// Represent an Xml documentation block in source code @@ -12,10 +12,10 @@ type public XmlDocable = module public XmlDocComment = /// if it's a blank XML comment with trailing "<", returns Some (index of the "<"), otherwise returns None - val isBlank : string -> int option + val IsBlank: string -> int option module public XmlDocParser = /// Get the list of Xml documentation from current source code - val getXmlDocables : ISourceText * input: ParsedInput option -> XmlDocable list + val GetXmlDocables: ISourceText * input: ParsedInput -> XmlDocable list \ No newline at end of file diff --git a/src/fsharp/service/service.fs b/src/fsharp/service/service.fs index 508a85c4355..1ed29a76651 100644 --- a/src/fsharp/service/service.fs +++ b/src/fsharp/service/service.fs @@ -1,39 +1,39 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.CodeAnalysis open System open System.Collections.Concurrent open System.Diagnostics open System.IO open System.Reflection - +open System.Threading +open Internal.Utilities.Collections +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILBinaryReader -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Internal.Utils +open FSharp.Compiler.CodeAnalysis open FSharp.Compiler.CompilerConfig open FSharp.Compiler.CompilerDiagnostics open FSharp.Compiler.CompilerImports open FSharp.Compiler.CompilerOptions +open FSharp.Compiler.DependencyManager +open FSharp.Compiler.Diagnostics open FSharp.Compiler.Driver open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Lib +open FSharp.Compiler.IO open FSharp.Compiler.ParseAndCheckInputs -open FSharp.Compiler.Range open FSharp.Compiler.ScriptClosure -open FSharp.Compiler.SyntaxTree -open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Symbols +open FSharp.Compiler.Syntax +open FSharp.Compiler.Tokenization open FSharp.Compiler.Text - -open Microsoft.DotNet.DependencyManager - -open Internal.Utilities -open Internal.Utilities.Collections - -type internal Layout = StructuredFormat.Layout +open FSharp.Compiler.Text.Range +open FSharp.Compiler.TcGlobals +open FSharp.Compiler.BuildGraph [] module EnvMisc = @@ -46,54 +46,6 @@ module EnvMisc = let maxMBDefault = GetEnvInteger "FCS_MaxMB" 1000000 // a million MB = 1TB = disabled //let maxMBDefault = GetEnvInteger "FCS_maxMB" (if sizeof = 4 then 1700 else 3400) -type UnresolvedReferencesSet = UnresolvedReferencesSet of UnresolvedAssemblyReference list - -// NOTE: may be better just to move to optional arguments here -type FSharpProjectOptions = - { - ProjectFileName: string - ProjectId: string option - SourceFiles: string[] - OtherOptions: string[] - ReferencedProjects: (string * FSharpProjectOptions)[] - IsIncompleteTypeCheckEnvironment : bool - UseScriptResolutionRules : bool - LoadTime : System.DateTime - UnresolvedReferences : UnresolvedReferencesSet option - OriginalLoadReferences: (range * string * string) list - ExtraProjectInfo : obj option - Stamp : int64 option - } - member x.ProjectOptions = x.OtherOptions - /// Whether the two parse options refer to the same project. - static member UseSameProject(options1,options2) = - match options1.ProjectId, options2.ProjectId with - | Some(projectId1), Some(projectId2) when not (String.IsNullOrWhiteSpace(projectId1)) && not (String.IsNullOrWhiteSpace(projectId2)) -> - projectId1 = projectId2 - | Some(_), Some(_) - | None, None -> options1.ProjectFileName = options2.ProjectFileName - | _ -> false - - /// Compare two options sets with respect to the parts of the options that are important to building. - static member AreSameForChecking(options1,options2) = - match options1.Stamp, options2.Stamp with - | Some x, Some y -> (x = y) - | _ -> - FSharpProjectOptions.UseSameProject(options1, options2) && - options1.SourceFiles = options2.SourceFiles && - options1.OtherOptions = options2.OtherOptions && - options1.UnresolvedReferences = options2.UnresolvedReferences && - options1.OriginalLoadReferences = options2.OriginalLoadReferences && - options1.ReferencedProjects.Length = options2.ReferencedProjects.Length && - Array.forall2 (fun (n1,a) (n2,b) -> - n1 = n2 && - FSharpProjectOptions.AreSameForChecking(a,b)) options1.ReferencedProjects options2.ReferencedProjects && - options1.LoadTime = options2.LoadTime - - /// Compute the project directory. - member po.ProjectDirectory = System.IO.Path.GetDirectoryName(po.ProjectFileName) - override this.ToString() = "FSharpProjectOptions(" + this.ProjectFileName + ")" - //---------------------------------------------------------------------------- // BackgroundCompiler // @@ -118,14 +70,14 @@ module Helpers = && FSharpProjectOptions.UseSameProject(o1,o2) /// Determine whether two (fileName,sourceText,options) keys should be identical w.r.t. parsing - let AreSameForParsing((fileName1: string, source1Hash: int, options1), (fileName2, source2Hash, options2)) = + let AreSameForParsing((fileName1: string, source1Hash: int64, options1), (fileName2, source2Hash, options2)) = fileName1 = fileName2 && options1 = options2 && source1Hash = source2Hash let AreSimilarForParsing((fileName1, _, _), (fileName2, _, _)) = fileName1 = fileName2 /// Determine whether two (fileName,sourceText,options) keys should be identical w.r.t. checking - let AreSameForChecking3((fileName1: string, source1Hash: int, options1: FSharpProjectOptions), (fileName2, source2Hash, options2)) = + let AreSameForChecking3((fileName1: string, source1Hash: int64, options1: FSharpProjectOptions), (fileName2, source2Hash, options2)) = (fileName1 = fileName2) && FSharpProjectOptions.AreSameForChecking(options1,options2) && source1Hash = source2Hash @@ -141,14 +93,14 @@ module CompileHelpers = let errorSink isError exn = let mainError, relatedErrors = SplitRelatedDiagnostics exn - let oneError e = errors.Add(FSharpErrorInfo.CreateFromException (e, isError, Range.range0, true)) // Suggest names for errors + let oneError e = errors.Add(FSharpDiagnostic.CreateFromException (e, isError, Range.range0, true)) // Suggest names for errors oneError mainError List.iter oneError relatedErrors let errorLogger = { new ErrorLogger("CompileAPI") with member x.DiagnosticSink(exn, isError) = errorSink isError exn - member x.ErrorCount = errors |> Seq.filter (fun e -> e.Severity = FSharpErrorSeverity.Error) |> Seq.length } + member x.ErrorCount = errors |> Seq.filter (fun e -> e.Severity = FSharpDiagnosticSeverity.Error) |> Seq.length } let loggerProvider = { new ErrorLoggerProvider() with @@ -189,7 +141,7 @@ module CompileHelpers = errors.ToArray(), result - let createDynamicAssembly (ctok, debugInfo: bool, tcImportsRef: TcImports option ref, execute: bool, assemblyBuilderRef: _ option ref) (tcConfig: TcConfig, tcGlobals:TcGlobals, outfile, ilxMainModule) = + let createDynamicAssembly (debugInfo: bool, tcImportsRef: TcImports option ref, execute: bool, assemblyBuilderRef: _ option ref) (tcConfig: TcConfig, tcGlobals:TcGlobals, outfile, ilxMainModule) = // Create an assembly builder let assemblyName = System.Reflection.AssemblyName(System.IO.Path.GetFileNameWithoutExtension outfile) @@ -212,7 +164,7 @@ module CompileHelpers = // The function used to resolve types while emitting the code let assemblyResolver s = - match tcImportsRef.Value.Value.TryFindExistingFullyQualifiedPathByExactAssemblyRef (ctok, s) with + match tcImportsRef.Value.Value.TryFindExistingFullyQualifiedPathByExactAssemblyRef (s) with | Some res -> Some (Choice1Of2 res) | None -> None @@ -244,7 +196,8 @@ module CompileHelpers = System.Console.SetError error | None -> () -type SourceTextHash = int +type SourceTextHash = int64 +type CacheStamp = int64 type FileName = string type FilePath = string type ProjectPath = string @@ -253,22 +206,25 @@ type FileVersion = int type ParseCacheLockToken() = interface LockToken type ScriptClosureCacheToken() = interface LockToken +type CheckFileCacheKey = FileName * SourceTextHash * FSharpProjectOptions +type CheckFileCacheValue = FSharpParseFileResults * FSharpCheckFileResults * SourceTextHash * DateTime // There is only one instance of this type, held in FSharpChecker -type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors, keepAllBackgroundSymbolUses, enableBackgroundItemKeyStoreAndSemanticClassification, enablePartialTypeChecking) as self = - // STATIC ROOT: FSharpLanguageServiceTestable.FSharpChecker.backgroundCompiler.reactor: The one and only Reactor - let reactor = Reactor.Singleton - let beforeFileChecked = Event() - let fileParsed = Event() - let fileChecked = Event() - let projectChecked = Event() - - - let mutable implicitlyStartBackgroundWork = true - let reactorOps = - { new IReactorOperations with - member __.EnqueueAndAwaitOpAsync (userOpName, opName, opArg, op) = reactor.EnqueueAndAwaitOpAsync (userOpName, opName, opArg, op) - member __.EnqueueOp (userOpName, opName, opArg, op) = reactor.EnqueueOp (userOpName, opName, opArg, op) } +type BackgroundCompiler( + legacyReferenceResolver, + projectCacheSize, + keepAssemblyContents, + keepAllBackgroundResolutions, + tryGetMetadataSnapshot, + suggestNamesForErrors, + keepAllBackgroundSymbolUses, + enableBackgroundItemKeyStoreAndSemanticClassification, + enablePartialTypeChecking) as self = + + let beforeFileChecked = Event() + let fileParsed = Event() + let fileChecked = Event() + let projectChecked = Event() // STATIC ROOT: FSharpLanguageServiceTestable.FSharpChecker.backgroundCompiler.scriptClosureCache /// Information about the derived script closure. @@ -289,36 +245,67 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC /// CreateOneIncrementalBuilder (for background type checking). Note that fsc.fs also /// creates an incremental builder used by the command line compiler. - let CreateOneIncrementalBuilder (ctok, options:FSharpProjectOptions, userOpName) = - cancellable { + let CreateOneIncrementalBuilder (options:FSharpProjectOptions, userOpName) = + node { Trace.TraceInformation("FCS: {0}.{1} ({2})", userOpName, "CreateOneIncrementalBuilder", options.ProjectFileName) let projectReferences = - [ for (nm,opts) in options.ReferencedProjects do - - // Don't use cross-project references for FSharp.Core, since various bits of code require a concrete FSharp.Core to exist on-disk. - // The only solutions that have these cross-project references to FSharp.Core are VisualFSharp.sln and FSharp.sln. The only ramification - // of this is that you need to build FSharp.Core to get intellisense in those projects. - - if (try Path.GetFileNameWithoutExtension(nm) with _ -> "") <> GetFSharpCoreLibraryName() then - - yield - { new IProjectReference with - member x.EvaluateRawContents(ctok) = - cancellable { - Trace.TraceInformation("FCS: {0}.{1} ({2})", userOpName, "GetAssemblyData", nm) - return! self.GetAssemblyData(opts, ctok, userOpName + ".CheckReferencedProject("+nm+")") - } - member x.TryGetLogicalTimeStamp(cache, ctok) = - self.TryGetLogicalTimeStampForProject(cache, ctok, opts, userOpName + ".TimeStampReferencedProject("+nm+")") - member x.FileName = nm } ] + [ for r in options.ReferencedProjects do + + match r with + | FSharpReferencedProject.FSharpReference(nm,opts) -> + // Don't use cross-project references for FSharp.Core, since various bits of code require a concrete FSharp.Core to exist on-disk. + // The only solutions that have these cross-project references to FSharp.Core are VisualFSharp.sln and FSharp.sln. The only ramification + // of this is that you need to build FSharp.Core to get intellisense in those projects. + + if (try Path.GetFileNameWithoutExtension(nm) with _ -> "") <> GetFSharpCoreLibraryName() then + + yield + { new IProjectReference with + member x.EvaluateRawContents() = + node { + Trace.TraceInformation("FCS: {0}.{1} ({2})", userOpName, "GetAssemblyData", nm) + return! self.GetAssemblyData(opts, userOpName + ".CheckReferencedProject("+nm+")") + } + member x.TryGetLogicalTimeStamp(cache) = + self.TryGetLogicalTimeStampForProject(cache, opts) + member x.FileName = nm } + + | FSharpReferencedProject.PEReference(nm,stamp,delayedReader) -> + yield + { new IProjectReference with + member x.EvaluateRawContents() = + node { + let! ilReaderOpt = delayedReader.TryGetILModuleReader() |> NodeCode.FromCancellable + match ilReaderOpt with + | Some ilReader -> + let ilModuleDef, ilAsmRefs = ilReader.ILModuleDef, ilReader.ILAssemblyRefs + return RawFSharpAssemblyData(ilModuleDef, ilAsmRefs) :> IRawFSharpAssemblyData |> Some + | _ -> + return None + } + member x.TryGetLogicalTimeStamp(_) = stamp |> Some + member x.FileName = nm } + + | FSharpReferencedProject.ILModuleReference(nm,getStamp,getReader) -> + yield + { new IProjectReference with + member x.EvaluateRawContents() = + node { + let ilReader = getReader() + let ilModuleDef, ilAsmRefs = ilReader.ILModuleDef, ilReader.ILAssemblyRefs + return RawFSharpAssemblyData(ilModuleDef, ilAsmRefs) :> IRawFSharpAssemblyData |> Some + } + member x.TryGetLogicalTimeStamp(_) = getStamp() |> Some + member x.FileName = nm } + ] let loadClosure = scriptClosureCache.TryGet(AnyCallerThread, options) let! builderOpt, diagnostics = IncrementalBuilder.TryCreateIncrementalBuilderForProjectOptions - (ctok, legacyReferenceResolver, FSharpCheckerResultsSettings.defaultFSharpBinariesDir, frameworkTcImportsCache, loadClosure, Array.toList options.SourceFiles, + (legacyReferenceResolver, FSharpCheckerResultsSettings.defaultFSharpBinariesDir, frameworkTcImportsCache, loadClosure, Array.toList options.SourceFiles, Array.toList options.OtherOptions, projectReferences, options.ProjectDirectory, - options.UseScriptResolutionRules, keepAssemblyContents, keepAllBackgroundResolutions, FSharpCheckerResultsSettings.maxTimeShareMilliseconds, + options.UseScriptResolutionRules, keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors, keepAllBackgroundSymbolUses, enableBackgroundItemKeyStoreAndSemanticClassification, enablePartialTypeChecking, @@ -331,8 +318,7 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC #if !NO_EXTENSIONTYPING // Register the behaviour that responds to CCUs being invalidated because of type // provider Invalidate events. This invalidates the configuration in the build. - builder.ImportsInvalidatedByTypeProvider.Add (fun _ -> - self.InvalidateConfiguration(options, None, userOpName)) + builder.ImportsInvalidatedByTypeProvider.Add(fun () -> self.InvalidateConfiguration(options, userOpName)) #endif // Register the callback called just before a file is typechecked by the background builder (without recording @@ -340,10 +326,10 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC // // This indicates to the UI that the file type check state is dirty. If the file is open and visible then // the UI will sooner or later request a typecheck of the file, recording errors and intellisense information. - builder.BeforeFileChecked.Add (fun file -> beforeFileChecked.Trigger(file, options.ExtraProjectInfo)) - builder.FileParsed.Add (fun file -> fileParsed.Trigger(file, options.ExtraProjectInfo)) - builder.FileChecked.Add (fun file -> fileChecked.Trigger(file, options.ExtraProjectInfo)) - builder.ProjectChecked.Add (fun () -> projectChecked.Trigger (options.ProjectFileName, options.ExtraProjectInfo)) + builder.BeforeFileChecked.Add (fun file -> beforeFileChecked.Trigger(file, options)) + builder.FileParsed.Add (fun file -> fileParsed.Trigger(file, options)) + builder.FileChecked.Add (fun file -> fileChecked.Trigger(file, options)) + builder.ProjectChecked.Add (fun () -> projectChecked.Trigger (options)) return (builderOpt, diagnostics) } @@ -352,162 +338,237 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC // live information than anything else in the F# Language Service, since it holds up to 3 (projectCacheStrongSize) background project builds // strongly. // - /// Cache of builds keyed by options. + /// Cache of builds keyed by options. + let gate = obj() let incrementalBuildersCache = - MruCache + MruCache> (keepStrongly=projectCacheSize, keepMax=projectCacheSize, areSame = FSharpProjectOptions.AreSameForChecking, areSimilar = FSharpProjectOptions.UseSameProject) - let tryGetBuilder options = + let tryGetBuilderNode options = incrementalBuildersCache.TryGet (AnyCallerThread, options) - let tryGetSimilarBuilder options = + let tryGetBuilder options : NodeCode<(IncrementalBuilder option * FSharpDiagnostic[])> option = + tryGetBuilderNode options + |> Option.map (fun x -> x.GetOrComputeValue()) + + let tryGetSimilarBuilder options : NodeCode<(IncrementalBuilder option * FSharpDiagnostic[])> option = incrementalBuildersCache.TryGetSimilar (AnyCallerThread, options) + |> Option.map (fun x -> x.GetOrComputeValue()) - let tryGetAnyBuilder options = + let tryGetAnyBuilder options : NodeCode<(IncrementalBuilder option * FSharpDiagnostic[])> option = incrementalBuildersCache.TryGetAny (AnyCallerThread, options) + |> Option.map (fun x -> x.GetOrComputeValue()) + + let createBuilderNode (options, userOpName, ct: CancellationToken) = + lock gate (fun () -> + if ct.IsCancellationRequested then + GraphNode(node { return None, [||] }) + else + let getBuilderNode = + GraphNode(CreateOneIncrementalBuilder(options, userOpName)) + incrementalBuildersCache.Set (AnyCallerThread, options, getBuilderNode) + getBuilderNode + ) - let getOrCreateBuilder (ctok, options, userOpName) = - cancellable { - match tryGetBuilder options with - | Some (builderOpt,creationErrors) -> - Logger.Log LogCompilerFunctionId.Service_IncrementalBuildersCache_GettingCache - return builderOpt,creationErrors - | None -> - Logger.Log LogCompilerFunctionId.Service_IncrementalBuildersCache_BuildingNewCache - let! (builderOpt,creationErrors) as info = CreateOneIncrementalBuilder (ctok, options, userOpName) - incrementalBuildersCache.Set (AnyCallerThread, options, info) - return builderOpt, creationErrors - } + let createAndGetBuilder (options, userOpName) = + node { + let! ct = NodeCode.CancellationToken + let getBuilderNode = createBuilderNode (options, userOpName, ct) + return! getBuilderNode.GetOrComputeValue() + } - let getSimilarOrCreateBuilder (ctok, options, userOpName) = - RequireCompilationThread ctok + let getOrCreateBuilder (options, userOpName) : NodeCode<(IncrementalBuilder option * FSharpDiagnostic[])> = + match tryGetBuilder options with + | Some getBuilder -> + node { + match! getBuilder with + | builderOpt, creationDiags when builderOpt.IsNone || not builderOpt.Value.IsReferencesInvalidated -> + Logger.Log LogCompilerFunctionId.Service_IncrementalBuildersCache_GettingCache + return builderOpt,creationDiags + | _ -> + return! createAndGetBuilder (options, userOpName) + } + | _ -> + createAndGetBuilder (options, userOpName) + + let getSimilarOrCreateBuilder (options, userOpName) = match tryGetSimilarBuilder options with - | Some res -> Cancellable.ret res + | Some res -> res // The builder does not exist at all. Create it. - | None -> getOrCreateBuilder (ctok, options, userOpName) + | None -> getOrCreateBuilder (options, userOpName) - let getOrCreateBuilderWithInvalidationFlag (ctok, options, canInvalidateProject, userOpName) = + let getOrCreateBuilderWithInvalidationFlag (options, canInvalidateProject, userOpName) = if canInvalidateProject then - getOrCreateBuilder (ctok, options, userOpName) + getOrCreateBuilder (options, userOpName) else - getSimilarOrCreateBuilder (ctok, options, userOpName) + getSimilarOrCreateBuilder (options, userOpName) + + let getAnyBuilder (options, userOpName) = + match tryGetAnyBuilder options with + | Some getBuilder -> + Logger.Log LogCompilerFunctionId.Service_IncrementalBuildersCache_GettingCache + getBuilder + | _ -> + getOrCreateBuilder (options, userOpName) let parseCacheLock = Lock() // STATIC ROOT: FSharpLanguageServiceTestable.FSharpChecker.parseFileInProjectCache. Most recently used cache for parsing files. - let parseFileCache = MruCache(parseFileCacheSize, areSimilar = AreSimilarForParsing, areSame = AreSameForParsing) + let parseFileCache = MruCache(parseFileCacheSize, areSimilar = AreSimilarForParsing, areSame = AreSameForParsing) - // STATIC ROOT: FSharpLanguageServiceTestable.FSharpChecker.checkFileInProjectCachePossiblyStale // STATIC ROOT: FSharpLanguageServiceTestable.FSharpChecker.checkFileInProjectCache // /// Cache which holds recently seen type-checks. /// This cache may hold out-of-date entries, in two senses /// - there may be a more recent antecedent state available because the background build has made it available /// - the source for the file may have changed - - let checkFileInProjectCachePossiblyStale = - MruCache - (keepStrongly=checkFileInProjectCacheSize, - areSame=AreSameForChecking2, - areSimilar=AreSubsumable2) // Also keyed on source. This can only be out of date if the antecedent is out of date - let checkFileInProjectCache = - MruCache + let checkFileInProjectCache = + MruCache> (keepStrongly=checkFileInProjectCacheSize, areSame=AreSameForChecking3, areSimilar=AreSubsumable3) - /// Holds keys for files being currently checked. It's used to prevent checking same file in parallel (interleaving chunk queued to Reactor). - let beingCheckedFileTable = - ConcurrentDictionary - (HashIdentity.FromFunctions - hash - (fun (f1, o1, v1) (f2, o2, v2) -> f1 = f2 && v1 = v2 && FSharpProjectOptions.AreSameForChecking(o1, o2))) - - static let mutable foregroundParseCount = 0 - - static let mutable foregroundTypeCheckCount = 0 - - member __.RecordTypeCheckFileInProjectResults(filename,options,parsingOptions,parseResults,fileVersion,priorTimeStamp,checkAnswer,sourceText) = - match checkAnswer with - | None - | Some FSharpCheckFileAnswer.Aborted -> () - | Some (FSharpCheckFileAnswer.Succeeded typedResults) -> - foregroundTypeCheckCount <- foregroundTypeCheckCount + 1 - parseCacheLock.AcquireLock (fun ltok -> - checkFileInProjectCachePossiblyStale.Set(ltok, (filename,options),(parseResults,typedResults,fileVersion)) - checkFileInProjectCache.Set(ltok, (filename, sourceText, options),(parseResults,typedResults,fileVersion,priorTimeStamp)) - parseFileCache.Set(ltok, (filename, sourceText, parsingOptions), parseResults)) - - member bc.ImplicitlyStartCheckProjectInBackground(options, userOpName) = - if implicitlyStartBackgroundWork then - bc.CheckProjectInBackground(options, userOpName + ".ImplicitlyStartCheckProjectInBackground") - - member __.ParseFile(filename: string, sourceText: ISourceText, options: FSharpParsingOptions, userOpName: string) = + /// Should be a fast operation. Ensures that we have only one async lazy object per file and its hash. + let getCheckFileNode (parseResults, + sourceText, + fileName, + options, + _fileVersion, + builder, + tcPrior, + tcInfo, + creationDiags) (onComplete) = + + // Here we lock for the creation of the node, not its execution + parseCacheLock.AcquireLock (fun ltok -> + let key = (fileName, sourceText.GetHashCode() |> int64, options) + match checkFileInProjectCache.TryGet(ltok, key) with + | Some res -> res + | _ -> + let res = + GraphNode(node { + let! res = + self.CheckOneFileImplAux( + parseResults, + sourceText, + fileName, + options, + builder, + tcPrior, + tcInfo, + creationDiags) + onComplete() + return res + }) + checkFileInProjectCache.Set(ltok, key, res) + res + ) + + static let mutable actualParseFileCount = 0 + + static let mutable actualCheckFileCount = 0 + + member _.ParseFile(filename: string, sourceText: ISourceText, options: FSharpParsingOptions, cache: bool, userOpName: string) = async { - let hash = sourceText.GetHashCode() + if cache then + let hash = sourceText.GetHashCode() |> int64 match parseCacheLock.AcquireLock(fun ltok -> parseFileCache.TryGet(ltok, (filename, hash, options))) with | Some res -> return res | None -> - foregroundParseCount <- foregroundParseCount + 1 - let parseErrors, parseTreeOpt, anyErrors = ParseAndCheckFile.parseFile(sourceText, filename, options, userOpName, suggestNamesForErrors) - let res = FSharpParseFileResults(parseErrors, parseTreeOpt, anyErrors, options.SourceFiles) + Interlocked.Increment(&actualParseFileCount) |> ignore + let parseDiags, parseTree, anyErrors = ParseAndCheckFile.parseFile(sourceText, filename, options, userOpName, suggestNamesForErrors) + let res = FSharpParseFileResults(parseDiags, parseTree, anyErrors, options.SourceFiles) parseCacheLock.AcquireLock(fun ltok -> parseFileCache.Set(ltok, (filename, hash, options), res)) return res + else + let parseDiags, parseTree, anyErrors = ParseAndCheckFile.parseFile(sourceText, filename, options, userOpName, false) + return FSharpParseFileResults(parseDiags, parseTree, anyErrors, options.SourceFiles) } - member bc.ParseFileNoCache(filename, sourceText, options, userOpName) = - async { - let parseErrors, parseTreeOpt, anyErrors = ParseAndCheckFile.parseFile(sourceText, filename, options, userOpName, false) - return FSharpParseFileResults(parseErrors, parseTreeOpt, anyErrors, options.SourceFiles) + /// Fetch the parse information from the background compiler (which checks w.r.t. the FileSystem API) + member _.GetBackgroundParseResultsForFileInProject(filename, options, userOpName) = + node { + let! builderOpt, creationDiags = getOrCreateBuilder (options, userOpName) + match builderOpt with + | None -> + let parseTree = EmptyParsedInput(filename, (false, false)) + return FSharpParseFileResults(creationDiags, parseTree, true, [| |]) + | Some builder -> + let parseTree,_,_,parseDiags = builder.GetParseResultsForFile (filename) + let diagnostics = [| yield! creationDiags; yield! DiagnosticHelpers.CreateDiagnostics (builder.TcConfig.errorSeverityOptions, false, filename, parseDiags, suggestNamesForErrors) |] + return FSharpParseFileResults(diagnostics = diagnostics, input = parseTree, parseHadErrors = false, dependencyFiles = builder.AllDependenciesDeprecated) } - /// Fetch the parse information from the background compiler (which checks w.r.t. the FileSystem API) - member __.GetBackgroundParseResultsForFileInProject(filename, options, userOpName) = - reactor.EnqueueAndAwaitOpAsync(userOpName, "GetBackgroundParseResultsForFileInProject ", filename, fun ctok -> - cancellable { - let! builderOpt, creationErrors = getOrCreateBuilder (ctok, options, userOpName) - match builderOpt with - | None -> return FSharpParseFileResults(creationErrors, None, true, [| |]) - | Some builder -> - let! parseTreeOpt,_,_,parseErrors = builder.GetParseResultsForFile (ctok, filename) - let errors = [| yield! creationErrors; yield! ErrorHelpers.CreateErrorInfos (builder.TcConfig.errorSeverityOptions, false, filename, parseErrors, suggestNamesForErrors) |] - return FSharpParseFileResults(errors = errors, input = parseTreeOpt, parseHadErrors = false, dependencyFiles = builder.AllDependenciesDeprecated) - } - ) + member _.GetCachedCheckFileResult(builder: IncrementalBuilder, filename, sourceText: ISourceText, options) = + node { + let hash = sourceText.GetHashCode() |> int64 + let key = (filename, hash, options) + let cachedResultsOpt = parseCacheLock.AcquireLock(fun ltok -> checkFileInProjectCache.TryGet(ltok, key)) + + match cachedResultsOpt with + | Some cachedResults -> + match! cachedResults.GetOrComputeValue() with + | (parseResults, checkResults,_,priorTimeStamp) + when + (match builder.GetCheckResultsBeforeFileInProjectEvenIfStale filename with + | None -> false + | Some(tcPrior) -> + tcPrior.TimeStamp = priorTimeStamp && + builder.AreCheckResultsBeforeFileInProjectReady(filename)) -> + return Some (parseResults,checkResults) + | _ -> + parseCacheLock.AcquireLock(fun ltok -> checkFileInProjectCache.RemoveAnySimilar(ltok, key)) + return None + | _ -> + return None + } + + member private bc.CheckOneFileImplAux + (parseResults: FSharpParseFileResults, + sourceText: ISourceText, + fileName: string, + options: FSharpProjectOptions, + builder: IncrementalBuilder, + tcPrior: PartialCheckResults, + tcInfo: TcInfo, + creationDiags: FSharpDiagnostic[]) : NodeCode = + + node { + // Get additional script #load closure information if applicable. + // For scripts, this will have been recorded by GetProjectOptionsFromScript. + let tcConfig = tcPrior.TcConfig + let loadClosure = scriptClosureCache.TryGet(AnyCallerThread, options) + + let! checkAnswer = + FSharpCheckFileResults.CheckOneFile + (parseResults, + sourceText, + fileName, + options.ProjectFileName, + tcConfig, + tcPrior.TcGlobals, + tcPrior.TcImports, + tcInfo.tcState, + tcInfo.moduleNamesDict, + loadClosure, + tcInfo.TcErrors, + options.IsIncompleteTypeCheckEnvironment, + options, + builder, + Array.ofList tcInfo.tcDependencyFiles, + creationDiags, + parseResults.Diagnostics, + keepAssemblyContents, + suggestNamesForErrors) |> NodeCode.FromCancellable + GraphNode.SetPreferredUILang tcConfig.preferredUiLang + return (parseResults, checkAnswer, sourceText.GetHashCode() |> int64, tcPrior.TimeStamp) + } + - member __.GetCachedCheckFileResult(builder: IncrementalBuilder, filename, sourceText: ISourceText, options) = - // Check the cache. We can only use cached results when there is no work to do to bring the background builder up-to-date - let cachedResults = parseCacheLock.AcquireLock (fun ltok -> checkFileInProjectCache.TryGet(ltok, (filename, sourceText.GetHashCode(), options))) - - match cachedResults with -// | Some (parseResults, checkResults, _, _) when builder.AreCheckResultsBeforeFileInProjectReady(filename) -> - | Some (parseResults, checkResults,_,priorTimeStamp) - when - (match builder.GetCheckResultsBeforeFileInProjectEvenIfStale filename with - | None -> false - | Some(tcPrior) -> - tcPrior.TimeStamp = priorTimeStamp && - builder.AreCheckResultsBeforeFileInProjectReady(filename)) -> - Some (parseResults,checkResults) - | _ -> None - - /// 1. Repeatedly try to get cached file check results or get file "lock". - /// - /// 2. If it've got cached results, returns them. - /// - /// 3. If it've not got the lock for 1 minute, returns `FSharpCheckFileAnswer.Aborted`. - /// - /// 4. Type checks the file. - /// - /// 5. Records results in `BackgroundCompiler` caches. - /// - /// 6. Starts whole project background compilation. - /// - /// 7. Releases the file "lock". member private bc.CheckOneFileImpl (parseResults: FSharpParseFileResults, sourceText: ISourceText, @@ -515,230 +576,141 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC options: FSharpProjectOptions, fileVersion: int, builder: IncrementalBuilder, - tcConfig, - tcGlobals, - tcImports, - tcDependencyFiles, - timeStamp, - prevTcState, - prevModuleNamesDict, - prevTcErrors, - creationErrors: FSharpErrorInfo[], - userOpName: string) = - - async { - let beingCheckedFileKey = fileName, options, fileVersion - let stopwatch = Stopwatch.StartNew() - let rec loop() = - async { - // results may appear while we were waiting for the lock, let's recheck if it's the case - let cachedResults = bc.GetCachedCheckFileResult(builder, fileName, sourceText, options) - - match cachedResults with - | Some (_, checkResults) -> return FSharpCheckFileAnswer.Succeeded checkResults - | None -> - if beingCheckedFileTable.TryAdd(beingCheckedFileKey, ()) then - try - // Get additional script #load closure information if applicable. - // For scripts, this will have been recorded by GetProjectOptionsFromScript. - let loadClosure = scriptClosureCache.TryGet(AnyCallerThread, options) - let! checkAnswer = - FSharpCheckFileResults.CheckOneFile - (parseResults, - sourceText, - fileName, - options.ProjectFileName, - tcConfig, - tcGlobals, - tcImports, - prevTcState, - prevModuleNamesDict, - loadClosure, - prevTcErrors, - reactorOps, - userOpName, - options.IsIncompleteTypeCheckEnvironment, - builder, - Array.ofList tcDependencyFiles, - creationErrors, - parseResults.Errors, - keepAssemblyContents, - suggestNamesForErrors) - let parsingOptions = FSharpParsingOptions.FromTcConfig(tcConfig, Array.ofList builder.SourceFiles, options.UseScriptResolutionRules) - reactor.SetPreferredUILang tcConfig.preferredUiLang - bc.RecordTypeCheckFileInProjectResults(fileName, options, parsingOptions, parseResults, fileVersion, timeStamp, Some checkAnswer, sourceText.GetHashCode()) - return checkAnswer - finally - let dummy = ref () - beingCheckedFileTable.TryRemove(beingCheckedFileKey, dummy) |> ignore - else - do! Async.Sleep 100 - if stopwatch.Elapsed > TimeSpan.FromMinutes 1. then - return FSharpCheckFileAnswer.Aborted - else - return! loop() - } - return! loop() - } + tcPrior: PartialCheckResults, + tcInfo: TcInfo, + creationDiags: FSharpDiagnostic[]) = + + node { + match! bc.GetCachedCheckFileResult(builder, fileName, sourceText, options) with + | Some (_, results) -> return FSharpCheckFileAnswer.Succeeded results + | _ -> + let lazyCheckFile = + getCheckFileNode + (parseResults, sourceText, fileName, options, fileVersion, builder, tcPrior, tcInfo, creationDiags) + (fun () -> + Interlocked.Increment(&actualCheckFileCount) |> ignore + ) + + let! (_, results, _, _) = lazyCheckFile.GetOrComputeValue() + return FSharpCheckFileAnswer.Succeeded results + } /// Type-check the result obtained by parsing, but only if the antecedent type checking context is available. member bc.CheckFileInProjectAllowingStaleCachedResults(parseResults: FSharpParseFileResults, filename, fileVersion, sourceText: ISourceText, options, userOpName) = - let execWithReactorAsync action = reactor.EnqueueAndAwaitOpAsync(userOpName, "CheckFileInProjectAllowingStaleCachedResults ", filename, action) - async { - try - if implicitlyStartBackgroundWork then - reactor.CancelBackgroundOp() // cancel the background work, since we will start new work after we're done - - let! cachedResults = - execWithReactorAsync <| fun ctok -> - cancellable { - let! _builderOpt,_creationErrors = getOrCreateBuilder (ctok, options, userOpName) - - match tryGetAnyBuilder options with - | Some (Some builder, creationErrors) -> - match bc.GetCachedCheckFileResult(builder, filename, sourceText, options) with - | Some (_, checkResults) -> return Some (builder, creationErrors, Some (FSharpCheckFileAnswer.Succeeded checkResults)) - | _ -> return Some (builder, creationErrors, None) + node { + let! cachedResults = + node { + let! builderOpt, creationDiags = getAnyBuilder (options, userOpName) + + match builderOpt with + | Some builder -> + match! bc.GetCachedCheckFileResult(builder, filename, sourceText, options) with + | Some (_, checkResults) -> return Some (builder, creationDiags, Some (FSharpCheckFileAnswer.Succeeded checkResults)) + | _ -> return Some (builder, creationDiags, None) | _ -> return None // the builder wasn't ready - } + } - match cachedResults with - | None -> return None - | Some (_, _, Some x) -> return Some x - | Some (builder, creationErrors, None) -> - Trace.TraceInformation("FCS: {0}.{1} ({2})", userOpName, "CheckFileInProjectAllowingStaleCachedResults.CacheMiss", filename) - let! tcPrior = - execWithReactorAsync <| fun ctok -> - cancellable { - DoesNotRequireCompilerThreadTokenAndCouldPossiblyBeMadeConcurrent ctok - let tcPrior = builder.GetCheckResultsBeforeFileInProjectEvenIfStale filename - return - tcPrior - |> Option.map (fun tcPrior -> - (tcPrior, tcPrior.TcInfo ctok) - ) - } - - match tcPrior with - | Some(tcPrior, tcInfo) -> - let! checkResults = bc.CheckOneFileImpl(parseResults, sourceText, filename, options, fileVersion, builder, tcPrior.TcConfig, tcPrior.TcGlobals, tcPrior.TcImports, tcInfo.tcDependencyFiles, tcPrior.TimeStamp, tcInfo.tcState, tcInfo.moduleNamesDict, tcInfo.TcErrors, creationErrors, userOpName) + match cachedResults with + | None -> return None + | Some (_, _, Some x) -> return Some x + | Some (builder, creationDiags, None) -> + Trace.TraceInformation("FCS: {0}.{1} ({2})", userOpName, "CheckFileInProjectAllowingStaleCachedResults.CacheMiss", filename) + match builder.GetCheckResultsBeforeFileInProjectEvenIfStale filename with + | Some tcPrior -> + match tcPrior.TryPeekTcInfo() with + | Some tcInfo -> + let! checkResults = bc.CheckOneFileImpl(parseResults, sourceText, filename, options, fileVersion, builder, tcPrior, tcInfo, creationDiags) return Some checkResults - | None -> return None // the incremental builder was not up to date - finally - bc.ImplicitlyStartCheckProjectInBackground(options, userOpName) + | None -> + return None + | None -> return None // the incremental builder was not up to date } /// Type-check the result obtained by parsing. Force the evaluation of the antecedent type checking context if needed. member bc.CheckFileInProject(parseResults: FSharpParseFileResults, filename, fileVersion, sourceText: ISourceText, options, userOpName) = - let execWithReactorAsync action = reactor.EnqueueAndAwaitOpAsync(userOpName, "CheckFileInProject", filename, action) - async { - try - if implicitlyStartBackgroundWork then - reactor.CancelBackgroundOp() // cancel the background work, since we will start new work after we're done - let! builderOpt,creationErrors = execWithReactorAsync (fun ctok -> getOrCreateBuilder (ctok, options, userOpName)) - match builderOpt with - | None -> return FSharpCheckFileAnswer.Succeeded (FSharpCheckFileResults.MakeEmpty(filename, creationErrors, keepAssemblyContents)) - | Some builder -> - // Check the cache. We can only use cached results when there is no work to do to bring the background builder up-to-date - let cachedResults = bc.GetCachedCheckFileResult(builder, filename, sourceText, options) - - match cachedResults with - | Some (_, checkResults) -> return FSharpCheckFileAnswer.Succeeded checkResults - | _ -> - Trace.TraceInformation("FCS: {0}.{1} ({2})", userOpName, "CheckFileInProject.CacheMiss", filename) - let! tcPrior, tcInfo = - execWithReactorAsync <| fun ctok -> - cancellable { - let! tcPrior = builder.GetCheckResultsBeforeFileInProject (ctok, filename) - return (tcPrior, tcPrior.TcInfo ctok) - } - let! checkAnswer = bc.CheckOneFileImpl(parseResults, sourceText, filename, options, fileVersion, builder, tcPrior.TcConfig, tcPrior.TcGlobals, tcPrior.TcImports, tcInfo.tcDependencyFiles, tcPrior.TimeStamp, tcInfo.tcState, tcInfo.moduleNamesDict, tcInfo.TcErrors, creationErrors, userOpName) - return checkAnswer - finally - bc.ImplicitlyStartCheckProjectInBackground(options, userOpName) + node { + let! builderOpt,creationDiags = getOrCreateBuilder (options, userOpName) + match builderOpt with + | None -> return FSharpCheckFileAnswer.Succeeded (FSharpCheckFileResults.MakeEmpty(filename, creationDiags, keepAssemblyContents)) + | Some builder -> + // Check the cache. We can only use cached results when there is no work to do to bring the background builder up-to-date + let! cachedResults = bc.GetCachedCheckFileResult(builder, filename, sourceText, options) + + match cachedResults with + | Some (_, checkResults) -> return FSharpCheckFileAnswer.Succeeded checkResults + | _ -> + let! tcPrior = builder.GetCheckResultsBeforeFileInProject (filename) + let! tcInfo = tcPrior.GetOrComputeTcInfo() + return! bc.CheckOneFileImpl(parseResults, sourceText, filename, options, fileVersion, builder, tcPrior, tcInfo, creationDiags) } /// Parses and checks the source file and returns untyped AST and check results. member bc.ParseAndCheckFileInProject (filename:string, fileVersion, sourceText: ISourceText, options:FSharpProjectOptions, userOpName) = - let execWithReactorAsync action = reactor.EnqueueAndAwaitOpAsync(userOpName, "ParseAndCheckFileInProject", filename, action) - async { - try - let strGuid = "_ProjectId=" + (options.ProjectId |> Option.defaultValue "null") - Logger.LogBlockMessageStart (filename + strGuid) LogCompilerFunctionId.Service_ParseAndCheckFileInProject - - if implicitlyStartBackgroundWork then - Logger.LogMessage (filename + strGuid + "-Cancelling background work") LogCompilerFunctionId.Service_ParseAndCheckFileInProject - reactor.CancelBackgroundOp() // cancel the background work, since we will start new work after we're done - - let! builderOpt,creationErrors = execWithReactorAsync (fun ctok -> getOrCreateBuilder (ctok, options, userOpName)) - match builderOpt with - | None -> - Logger.LogBlockMessageStop (filename + strGuid + "-Failed_Aborted") LogCompilerFunctionId.Service_ParseAndCheckFileInProject - - let parseResults = FSharpParseFileResults(creationErrors, None, true, [| |]) - return (parseResults, FSharpCheckFileAnswer.Aborted) - - | Some builder -> - let cachedResults = bc.GetCachedCheckFileResult(builder, filename, sourceText, options) - - match cachedResults with - | Some (parseResults, checkResults) -> - Logger.LogBlockMessageStop (filename + strGuid + "-Successful_Cached") LogCompilerFunctionId.Service_ParseAndCheckFileInProject - - return parseResults, FSharpCheckFileAnswer.Succeeded checkResults - | _ -> - // todo this blocks the Reactor queue until all files up to the current are type checked. It's OK while editing the file, - // but results with non cooperative blocking when a firts file from a project opened. - let! tcPrior, tcInfo = - execWithReactorAsync <| fun ctok -> - cancellable { - let! tcPrior = builder.GetCheckResultsBeforeFileInProject (ctok, filename) - return (tcPrior, tcPrior.TcInfo ctok) - } - - // Do the parsing. - let parsingOptions = FSharpParsingOptions.FromTcConfig(builder.TcConfig, Array.ofList (builder.SourceFiles), options.UseScriptResolutionRules) - reactor.SetPreferredUILang tcPrior.TcConfig.preferredUiLang - let parseErrors, parseTreeOpt, anyErrors = ParseAndCheckFile.parseFile (sourceText, filename, parsingOptions, userOpName, suggestNamesForErrors) - let parseResults = FSharpParseFileResults(parseErrors, parseTreeOpt, anyErrors, builder.AllDependenciesDeprecated) - let! checkResults = bc.CheckOneFileImpl(parseResults, sourceText, filename, options, fileVersion, builder, tcPrior.TcConfig, tcPrior.TcGlobals, tcPrior.TcImports, tcInfo.tcDependencyFiles, tcPrior.TimeStamp, tcInfo.tcState, tcInfo.moduleNamesDict, tcInfo.TcErrors, creationErrors, userOpName) - - Logger.LogBlockMessageStop (filename + strGuid + "-Successful") LogCompilerFunctionId.Service_ParseAndCheckFileInProject - - return parseResults, checkResults - finally - bc.ImplicitlyStartCheckProjectInBackground(options, userOpName) + node { + let strGuid = "_ProjectId=" + (options.ProjectId |> Option.defaultValue "null") + Logger.LogBlockMessageStart (filename + strGuid) LogCompilerFunctionId.Service_ParseAndCheckFileInProject + + let! builderOpt,creationDiags = getOrCreateBuilder (options, userOpName) + match builderOpt with + | None -> + Logger.LogBlockMessageStop (filename + strGuid + "-Failed_Aborted") LogCompilerFunctionId.Service_ParseAndCheckFileInProject + + let parseTree = EmptyParsedInput(filename, (false, false)) + let parseResults = FSharpParseFileResults(creationDiags, parseTree, true, [| |]) + return (parseResults, FSharpCheckFileAnswer.Aborted) + + | Some builder -> + let! cachedResults = bc.GetCachedCheckFileResult(builder, filename, sourceText, options) + + match cachedResults with + | Some (parseResults, checkResults) -> + Logger.LogBlockMessageStop (filename + strGuid + "-Successful_Cached") LogCompilerFunctionId.Service_ParseAndCheckFileInProject + + return (parseResults, FSharpCheckFileAnswer.Succeeded checkResults) + | _ -> + let! tcPrior = builder.GetCheckResultsBeforeFileInProject (filename) + let! tcInfo = tcPrior.GetOrComputeTcInfo() + // Do the parsing. + let parsingOptions = FSharpParsingOptions.FromTcConfig(builder.TcConfig, Array.ofList (builder.SourceFiles), options.UseScriptResolutionRules) + GraphNode.SetPreferredUILang tcPrior.TcConfig.preferredUiLang + let parseDiags, parseTree, anyErrors = ParseAndCheckFile.parseFile (sourceText, filename, parsingOptions, userOpName, suggestNamesForErrors) + let parseResults = FSharpParseFileResults(parseDiags, parseTree, anyErrors, builder.AllDependenciesDeprecated) + let! checkResults = bc.CheckOneFileImpl(parseResults, sourceText, filename, options, fileVersion, builder, tcPrior, tcInfo, creationDiags) + + Logger.LogBlockMessageStop (filename + strGuid + "-Successful") LogCompilerFunctionId.Service_ParseAndCheckFileInProject + + return (parseResults, checkResults) } /// Fetch the check information from the background compiler (which checks w.r.t. the FileSystem API) - member __.GetBackgroundCheckResultsForFileInProject(filename, options, userOpName) = - reactor.EnqueueAndAwaitOpAsync(userOpName, "GetBackgroundCheckResultsForFileInProject", filename, fun ctok -> - cancellable { - let! builderOpt, creationErrors = getOrCreateBuilder (ctok, options, userOpName) + member _.GetBackgroundCheckResultsForFileInProject(filename, options, userOpName) = + node { + let! builderOpt, creationDiags = getOrCreateBuilder (options, userOpName) match builderOpt with | None -> - let parseResults = FSharpParseFileResults(creationErrors, None, true, [| |]) - let typedResults = FSharpCheckFileResults.MakeEmpty(filename, creationErrors, keepAssemblyContents) + let parseTree = EmptyParsedInput(filename, (false, false)) + let parseResults = FSharpParseFileResults(creationDiags, parseTree, true, [| |]) + let typedResults = FSharpCheckFileResults.MakeEmpty(filename, creationDiags, true) return (parseResults, typedResults) | Some builder -> - let! (parseTreeOpt, _, _, untypedErrors) = builder.GetParseResultsForFile (ctok, filename) - let! tcProj = builder.GetFullCheckResultsAfterFileInProject (ctok, filename) + let (parseTree, _, _, parseDiags) = builder.GetParseResultsForFile (filename) + let! tcProj = builder.GetFullCheckResultsAfterFileInProject (filename) - let tcInfo, tcInfoOptional = tcProj.TcInfoWithOptional ctok + let! tcInfo, tcInfoExtras = tcProj.GetOrComputeTcInfoWithExtras() - let tcResolutionsRev = tcInfoOptional.tcResolutionsRev - let tcSymbolUsesRev = tcInfoOptional.tcSymbolUsesRev - let tcOpenDeclarationsRev = tcInfoOptional.tcOpenDeclarationsRev + let tcResolutions = tcInfoExtras.tcResolutions + let tcSymbolUses = tcInfoExtras.tcSymbolUses + let tcOpenDeclarations = tcInfoExtras.tcOpenDeclarations let latestCcuSigForFile = tcInfo.latestCcuSigForFile let tcState = tcInfo.tcState let tcEnvAtEnd = tcInfo.tcEnvAtEndOfFile - let latestImplementationFile = tcInfoOptional.latestImplFile + let latestImplementationFile = tcInfoExtras.latestImplFile let tcDependencyFiles = tcInfo.tcDependencyFiles let tcErrors = tcInfo.TcErrors let errorOptions = builder.TcConfig.errorSeverityOptions - let untypedErrors = [| yield! creationErrors; yield! ErrorHelpers.CreateErrorInfos (errorOptions, false, filename, untypedErrors, suggestNamesForErrors) |] - let tcErrors = [| yield! creationErrors; yield! ErrorHelpers.CreateErrorInfos (errorOptions, false, filename, tcErrors, suggestNamesForErrors) |] - let parseResults = FSharpParseFileResults(errors = untypedErrors, input = parseTreeOpt, parseHadErrors = false, dependencyFiles = builder.AllDependenciesDeprecated) + let parseDiags = [| yield! creationDiags; yield! DiagnosticHelpers.CreateDiagnostics (errorOptions, false, filename, parseDiags, suggestNamesForErrors) |] + let tcErrors = [| yield! creationDiags; yield! DiagnosticHelpers.CreateDiagnostics (errorOptions, false, filename, tcErrors, suggestNamesForErrors) |] + let parseResults = FSharpParseFileResults(diagnostics=parseDiags, input=parseTree, parseHadErrors=false, dependencyFiles=builder.AllDependenciesDeprecated) let loadClosure = scriptClosureCache.TryGet(AnyCallerThread, options) let typedResults = FSharpCheckFileResults.Make @@ -748,116 +720,138 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC tcProj.TcGlobals, options.IsIncompleteTypeCheckEnvironment, builder, + options, Array.ofList tcDependencyFiles, - creationErrors, - parseResults.Errors, + creationDiags, + parseResults.Diagnostics, tcErrors, keepAssemblyContents, Option.get latestCcuSigForFile, tcState.Ccu, tcProj.TcImports, tcEnvAtEnd.AccessRights, - List.head tcResolutionsRev, - List.head tcSymbolUsesRev, + tcResolutions, + tcSymbolUses, tcEnvAtEnd.NameEnv, loadClosure, latestImplementationFile, - List.head tcOpenDeclarationsRev) + tcOpenDeclarations) return (parseResults, typedResults) } - ) - member __.FindReferencesInFile(filename: string, options: FSharpProjectOptions, symbol: FSharpSymbol, canInvalidateProject: bool, userOpName: string) = - reactor.EnqueueAndAwaitOpAsync(userOpName, "FindReferencesInFile", filename, fun ctok -> - cancellable { - let! builderOpt, _ = getOrCreateBuilderWithInvalidationFlag (ctok, options, canInvalidateProject, userOpName) + member _.FindReferencesInFile(filename: string, options: FSharpProjectOptions, symbol: FSharpSymbol, canInvalidateProject: bool, userOpName: string) = + node { + let! builderOpt, _ = getOrCreateBuilderWithInvalidationFlag (options, canInvalidateProject, userOpName) match builderOpt with | None -> return Seq.empty | Some builder -> if builder.ContainsFile filename then - let! checkResults = builder.GetFullCheckResultsAfterFileInProject (ctok, filename) - match checkResults.TryGetItemKeyStore ctok with + let! checkResults = builder.GetFullCheckResultsAfterFileInProject (filename) + let! keyStoreOpt = checkResults.GetOrComputeItemKeyStoreIfEnabled() + match keyStoreOpt with | None -> return Seq.empty | Some reader -> return reader.FindAll symbol.Item else - return Seq.empty }) + return Seq.empty + } - member __.GetSemanticClassificationForFile(filename: string, options: FSharpProjectOptions, userOpName: string) = - reactor.EnqueueAndAwaitOpAsync(userOpName, "GetSemanticClassificationForFile", filename, fun ctok -> - cancellable { - let! builderOpt, _ = getOrCreateBuilder (ctok, options, userOpName) - match builderOpt with - | None -> return [||] - | Some builder -> - let! checkResults = builder.GetFullCheckResultsAfterFileInProject (ctok, filename) - return checkResults.GetSemanticClassification ctok }) + member _.GetSemanticClassificationForFile(filename: string, options: FSharpProjectOptions, userOpName: string) = + node { + let! builderOpt, _ = getOrCreateBuilder (options, userOpName) + match builderOpt with + | None -> return None + | Some builder -> + let! checkResults = builder.GetFullCheckResultsAfterFileInProject (filename) + let! scopt = checkResults.GetOrComputeSemanticClassificationIfEnabled() + match scopt with + | None -> return None + | Some sc -> return Some (sc.GetView ()) + } /// Try to get recent approximate type check results for a file. - member __.TryGetRecentCheckResultsForFile(filename: string, options:FSharpProjectOptions, sourceText: ISourceText option, _userOpName: string) = - parseCacheLock.AcquireLock (fun ltok -> - match sourceText with - | Some sourceText -> - match checkFileInProjectCache.TryGet(ltok,(filename,sourceText.GetHashCode(),options)) with - | Some (a,b,c,_) -> Some (a,b,c) - | None -> checkFileInProjectCachePossiblyStale.TryGet(ltok,(filename,options)) - | None -> checkFileInProjectCachePossiblyStale.TryGet(ltok,(filename,options))) + member _.TryGetRecentCheckResultsForFile(filename: string, options:FSharpProjectOptions, sourceText: ISourceText option, _userOpName: string) = + match sourceText with + | Some sourceText -> + let hash = sourceText.GetHashCode() |> int64 + let resOpt = parseCacheLock.AcquireLock(fun ltok -> checkFileInProjectCache.TryGet(ltok,(filename,hash,options))) + match resOpt with + | Some res -> + match res.TryPeekValue() with + | ValueSome(a,b,c,_) -> + Some(a,b,c) + | ValueNone -> + None + | None -> + None + | None -> + None /// Parse and typecheck the whole project (the implementation, called recursively as project graph is evaluated) - member private __.ParseAndCheckProjectImpl(options, ctok, userOpName) = - cancellable { - let! builderOpt,creationErrors = getOrCreateBuilder (ctok, options, userOpName) - match builderOpt with - | None -> - return FSharpCheckProjectResults (options.ProjectFileName, None, keepAssemblyContents, creationErrors, None) - | Some builder -> - let! (tcProj, ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt) = builder.GetFullCheckResultsAndImplementationsForProject(ctok) - let errorOptions = tcProj.TcConfig.errorSeverityOptions - let fileName = TcGlobals.DummyFileNameForRangesWithoutASpecificLocation - - let tcInfo, tcInfoOptional = tcProj.TcInfoWithOptional ctok - - let tcSymbolUses = tcInfoOptional.TcSymbolUses - let topAttribs = tcInfo.topAttribs - let tcState = tcInfo.tcState - let tcEnvAtEnd = tcInfo.tcEnvAtEndOfFile - let tcErrors = tcInfo.TcErrors - let tcDependencyFiles = tcInfo.tcDependencyFiles - let errors = [| yield! creationErrors; yield! ErrorHelpers.CreateErrorInfos (errorOptions, true, fileName, tcErrors, suggestNamesForErrors) |] - return FSharpCheckProjectResults (options.ProjectFileName, Some tcProj.TcConfig, keepAssemblyContents, errors, - Some(tcProj.TcGlobals, tcProj.TcImports, tcState.Ccu, tcState.CcuSig, - tcSymbolUses, topAttribs, tcAssemblyDataOpt, ilAssemRef, - tcEnvAtEnd.AccessRights, tcAssemblyExprOpt, Array.ofList tcDependencyFiles)) + member private _.ParseAndCheckProjectImpl(options, userOpName) = + node { + let! builderOpt,creationDiags = getOrCreateBuilder (options, userOpName) + match builderOpt with + | None -> + return FSharpCheckProjectResults (options.ProjectFileName, None, keepAssemblyContents, creationDiags, None) + | Some builder -> + let! (tcProj, ilAssemRef, tcAssemblyDataOpt, tcAssemblyExprOpt) = builder.GetFullCheckResultsAndImplementationsForProject() + let errorOptions = tcProj.TcConfig.errorSeverityOptions + let fileName = TcGlobals.DummyFileNameForRangesWithoutASpecificLocation + + // Although we do not use 'tcInfoExtras', computing it will make sure we get an extra info. + let! tcInfo, _tcInfoExtras = tcProj.GetOrComputeTcInfoWithExtras() + + let topAttribs = tcInfo.topAttribs + let tcState = tcInfo.tcState + let tcEnvAtEnd = tcInfo.tcEnvAtEndOfFile + let tcErrors = tcInfo.TcErrors + let tcDependencyFiles = tcInfo.tcDependencyFiles + let diagnostics = + [| yield! creationDiags; + yield! DiagnosticHelpers.CreateDiagnostics (errorOptions, true, fileName, tcErrors, suggestNamesForErrors) |] + let results = + FSharpCheckProjectResults + (options.ProjectFileName, + Some tcProj.TcConfig, + keepAssemblyContents, + diagnostics, + Some(tcProj.TcGlobals, tcProj.TcImports, tcState.Ccu, tcState.CcuSig, + (Choice1Of2 builder), topAttribs, tcAssemblyDataOpt, ilAssemRef, + tcEnvAtEnd.AccessRights, tcAssemblyExprOpt, + Array.ofList tcDependencyFiles, + options)) + return results } - member _.GetAssemblyData(options, ctok, userOpName) = - cancellable { - let! builderOpt,_ = getOrCreateBuilder (ctok, options, userOpName) + member _.GetAssemblyData(options, userOpName) = + node { + let! builderOpt,_ = getOrCreateBuilder (options, userOpName) match builderOpt with | None -> return None | Some builder -> - let! (_, _, tcAssemblyDataOpt, _) = builder.GetCheckResultsAndImplementationsForProject(ctok) + let! (_, _, tcAssemblyDataOpt, _) = builder.GetCheckResultsAndImplementationsForProject() return tcAssemblyDataOpt } /// Get the timestamp that would be on the output if fully built immediately - member private __.TryGetLogicalTimeStampForProject(cache, ctok, options, userOpName: string) = - - // NOTE: This creation of the background builder is currently run as uncancellable. Creating background builders is generally - // cheap though the timestamp computations look suspicious for transitive project references. - let builderOpt,_creationErrors = getOrCreateBuilder (ctok, options, userOpName + ".TryGetLogicalTimeStampForProject") |> Cancellable.runWithoutCancellation - match builderOpt with - | None -> None - | Some builder -> Some (builder.GetLogicalTimeStampForProject(cache, ctok)) - + member private _.TryGetLogicalTimeStampForProject(cache, options) = + match tryGetBuilderNode options with + | Some lazyWork -> + match lazyWork.TryPeekValue() with + | ValueSome (Some builder, _) -> + Some(builder.GetLogicalTimeStampForProject(cache)) + | _ -> + None + | _ -> + None /// Parse and typecheck the whole project. member bc.ParseAndCheckProject(options, userOpName) = - reactor.EnqueueAndAwaitOpAsync(userOpName, "ParseAndCheckProject", options.ProjectFileName, fun ctok -> bc.ParseAndCheckProjectImpl(options, ctok, userOpName)) + bc.ParseAndCheckProjectImpl(options, userOpName) - member __.GetProjectOptionsFromScript(filename, sourceText, previewEnabled, loadedTimeStamp, otherFlags, useFsiAuxLib: bool option, useSdkRefs: bool option, assumeDotNetFramework: bool option, extraProjectInfo: obj option, optionsStamp: int64 option, userOpName) = - reactor.EnqueueAndAwaitOpAsync (userOpName, "GetProjectOptionsFromScript", filename, fun ctok -> + member _.GetProjectOptionsFromScript(filename, sourceText, previewEnabled, loadedTimeStamp, otherFlags, useFsiAuxLib: bool option, useSdkRefs: bool option, sdkDirOverride: string option, assumeDotNetFramework: bool option, optionsStamp: int64 option, _userOpName) = cancellable { use errors = new ErrorScope() @@ -886,15 +880,15 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC let fsiCompilerOptions = CompilerOptions.GetCoreFsiCompilerOptions tcConfigB CompilerOptions.ParseCompilerOptions (ignore, fsiCompilerOptions, Array.toList otherFlags) - let loadClosure = - LoadClosure.ComputeClosureOfScriptText(ctok, legacyReferenceResolver, + let loadClosure = + LoadClosure.ComputeClosureOfScriptText(legacyReferenceResolver, FSharpCheckerResultsSettings.defaultFSharpBinariesDir, filename, sourceText, - CodeContext.Editing, useSimpleResolution, useFsiAuxLib, useSdkRefs, new Lexhelp.LexResourceManager(), + CodeContext.Editing, useSimpleResolution, useFsiAuxLib, useSdkRefs, sdkDirOverride, new Lexhelp.LexResourceManager(), applyCompilerOptions, assumeDotNetFramework, tryGetMetadataSnapshot, reduceMemoryUsage, dependencyProviderForScripts) let otherFlags = - [| yield "--noframework"; yield "--warn:3"; + [| yield "--noframework"; yield "--warn:3"; yield! otherFlags for r in loadClosure.References do yield "-r:" + fst r for (code,_) in loadClosure.NoWarns do yield "--nowarn:" + code @@ -910,116 +904,77 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC IsIncompleteTypeCheckEnvironment = false UseScriptResolutionRules = true LoadTime = loadedTimeStamp - UnresolvedReferences = Some (UnresolvedReferencesSet(loadClosure.UnresolvedReferences)) + UnresolvedReferences = Some (FSharpUnresolvedReferencesSet(loadClosure.UnresolvedReferences)) OriginalLoadReferences = loadClosure.OriginalLoadReferences - ExtraProjectInfo=extraProjectInfo Stamp = optionsStamp } scriptClosureCache.Set(AnyCallerThread, options, loadClosure) // Save the full load closure for later correlation. - return options, errors.Diagnostics - }) + let diags = loadClosure.LoadClosureRootFileDiagnostics |> List.map (fun (exn, isError) -> FSharpDiagnostic.CreateFromException(exn, isError, range.Zero, false)) + return options, (diags @ errors.Diagnostics) + } + |> Cancellable.toAsync - member bc.InvalidateConfiguration(options : FSharpProjectOptions, startBackgroundCompileIfAlreadySeen, userOpName) = - let startBackgroundCompileIfAlreadySeen = defaultArg startBackgroundCompileIfAlreadySeen implicitlyStartBackgroundWork + member bc.InvalidateConfiguration(options: FSharpProjectOptions, userOpName) = + if incrementalBuildersCache.ContainsSimilarKey (AnyCallerThread, options) then + let _ = createBuilderNode (options, userOpName, CancellationToken.None) + () - // This operation can't currently be cancelled nor awaited - reactor.EnqueueOp(userOpName, "InvalidateConfiguration: Stamp(" + (options.Stamp |> Option.defaultValue 0L).ToString() + ")", options.ProjectFileName, fun ctok -> - // If there was a similar entry then re-establish an empty builder . This is a somewhat arbitrary choice - it - // will have the effect of releasing memory associated with the previous builder, but costs some time. + member bc.ClearCache(options: seq, _userOpName) = + lock gate (fun () -> + options + |> Seq.iter (fun options -> incrementalBuildersCache.RemoveAnySimilar(AnyCallerThread, options)) + ) + + member _.NotifyProjectCleaned (options: FSharpProjectOptions, userOpName) = + async { + let! ct = Async.CancellationToken + // If there was a similar entry (as there normally will have been) then re-establish an empty builder . This + // is a somewhat arbitrary choice - it will have the effect of releasing memory associated with the previous + // builder, but costs some time. if incrementalBuildersCache.ContainsSimilarKey (AnyCallerThread, options) then + let _ = createBuilderNode (options, userOpName, ct) + () + } - // We do not need to decrement here - it is done by disposal. - let newBuilderInfo = CreateOneIncrementalBuilder (ctok, options, userOpName) |> Cancellable.runWithoutCancellation - incrementalBuildersCache.Set(AnyCallerThread, options, newBuilderInfo) + member _.BeforeBackgroundFileCheck = beforeFileChecked.Publish - // Start working on the project. Also a somewhat arbitrary choice - if startBackgroundCompileIfAlreadySeen then - bc.CheckProjectInBackground(options, userOpName + ".StartBackgroundCompile")) + member _.FileParsed = fileParsed.Publish - member bc.ClearCache(options : FSharpProjectOptions seq, userOpName) = - // This operation can't currently be cancelled nor awaited - reactor.EnqueueOp(userOpName, "ClearCache", String.Empty, fun _ -> - options - |> Seq.iter (fun options -> incrementalBuildersCache.RemoveAnySimilar(AnyCallerThread, options))) - - member __.NotifyProjectCleaned (options : FSharpProjectOptions, userOpName) = - reactor.EnqueueAndAwaitOpAsync(userOpName, "NotifyProjectCleaned", options.ProjectFileName, fun ctok -> - cancellable { - // If there was a similar entry (as there normally will have been) then re-establish an empty builder . This - // is a somewhat arbitrary choice - it will have the effect of releasing memory associated with the previous - // builder, but costs some time. - if incrementalBuildersCache.ContainsSimilarKey (AnyCallerThread, options) then - // We do not need to decrement here - it is done by disposal. - let! newBuilderInfo = CreateOneIncrementalBuilder (ctok, options, userOpName) - incrementalBuildersCache.Set(AnyCallerThread, options, newBuilderInfo) - }) - - member __.CheckProjectInBackground (options, userOpName) = - reactor.SetBackgroundOp (Some (userOpName, "CheckProjectInBackground", options.ProjectFileName, (fun ctok ct -> - // The creation of the background builder can't currently be cancelled - match getOrCreateBuilder (ctok, options, userOpName) |> Cancellable.run ct with - | ValueOrCancelled.Cancelled _ -> false - | ValueOrCancelled.Value (builderOpt,_) -> - match builderOpt with - | None -> false - | Some builder -> - // The individual steps of the background build - match builder.Step(ctok) |> Cancellable.run ct with - | ValueOrCancelled.Value v -> v - | ValueOrCancelled.Cancelled _ -> false))) - - member __.StopBackgroundCompile () = - reactor.SetBackgroundOp(None) - - member __.WaitForBackgroundCompile() = - reactor.WaitForBackgroundOpCompletion() - - member __.CompleteAllQueuedOps() = - reactor.CompleteAllQueuedOps() - - member __.Reactor = reactor - - member __.ReactorOps = reactorOps - - member __.BeforeBackgroundFileCheck = beforeFileChecked.Publish - - member __.FileParsed = fileParsed.Publish - - member __.FileChecked = fileChecked.Publish - - member __.ProjectChecked = projectChecked.Publish - - member __.CurrentQueueLength = reactor.CurrentQueueLength - - member __.ClearCachesAsync (userOpName) = - reactor.EnqueueAndAwaitOpAsync (userOpName, "ClearCachesAsync", "", fun ctok -> - parseCacheLock.AcquireLock (fun ltok -> - checkFileInProjectCachePossiblyStale.Clear ltok - checkFileInProjectCache.Clear ltok - parseFileCache.Clear(ltok)) - incrementalBuildersCache.Clear(AnyCallerThread) - frameworkTcImportsCache.Clear ctok - scriptClosureCache.Clear (AnyCallerThread) - cancellable.Return ()) - - member __.DownsizeCaches(userOpName) = - reactor.EnqueueAndAwaitOpAsync (userOpName, "DownsizeCaches", "", fun ctok -> - parseCacheLock.AcquireLock (fun ltok -> - checkFileInProjectCachePossiblyStale.Resize(ltok, newKeepStrongly=1) - checkFileInProjectCache.Resize(ltok, newKeepStrongly=1) - parseFileCache.Resize(ltok, newKeepStrongly=1)) - incrementalBuildersCache.Resize(AnyCallerThread, newKeepStrongly=1, newKeepMax=1) - frameworkTcImportsCache.Downsize(ctok) - scriptClosureCache.Resize(AnyCallerThread,newKeepStrongly=1, newKeepMax=1) - cancellable.Return ()) - - member __.FrameworkImportsCache = frameworkTcImportsCache + member _.FileChecked = fileChecked.Publish - member __.ImplicitlyStartBackgroundWork with get() = implicitlyStartBackgroundWork and set v = implicitlyStartBackgroundWork <- v + member _.ProjectChecked = projectChecked.Publish - static member GlobalForegroundParseCountStatistic = foregroundParseCount + member _.ClearCachesAsync (_userOpName) = + async { + return + lock gate (fun () -> + parseCacheLock.AcquireLock (fun ltok -> + checkFileInProjectCache.Clear(ltok) + parseFileCache.Clear(ltok)) + incrementalBuildersCache.Clear(AnyCallerThread) + frameworkTcImportsCache.Clear() + scriptClosureCache.Clear (AnyCallerThread) + ) + } - static member GlobalForegroundTypeCheckCountStatistic = foregroundTypeCheckCount + member _.DownsizeCaches(_userOpName) = + async { + return + lock gate (fun () -> + parseCacheLock.AcquireLock (fun ltok -> + checkFileInProjectCache.Resize(ltok, newKeepStrongly=1) + parseFileCache.Resize(ltok, newKeepStrongly=1)) + incrementalBuildersCache.Resize(AnyCallerThread, newKeepStrongly=1, newKeepMax=1) + frameworkTcImportsCache.Downsize() + scriptClosureCache.Resize(AnyCallerThread,newKeepStrongly=1, newKeepMax=1) + ) + } + + member _.FrameworkImportsCache = frameworkTcImportsCache + + static member ActualParseFileCount = actualParseFileCount + + static member ActualCheckFileCount = actualCheckFileCount [] @@ -1034,7 +989,17 @@ type FSharpChecker(legacyReferenceResolver, enableBackgroundItemKeyStoreAndSemanticClassification, enablePartialTypeChecking) = - let backgroundCompiler = BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors, keepAllBackgroundSymbolUses, enableBackgroundItemKeyStoreAndSemanticClassification, enablePartialTypeChecking) + let backgroundCompiler = + BackgroundCompiler( + legacyReferenceResolver, + projectCacheSize, + keepAssemblyContents, + keepAllBackgroundResolutions, + tryGetMetadataSnapshot, + suggestNamesForErrors, + keepAllBackgroundSymbolUses, + enableBackgroundItemKeyStoreAndSemanticClassification, + enablePartialTypeChecking) static let globalInstance = lazy FSharpChecker.Create() @@ -1051,7 +1016,16 @@ type FSharpChecker(legacyReferenceResolver, let maxMemEvent = new Event() /// Instantiate an interactive checker. - static member Create(?projectCacheSize, ?keepAssemblyContents, ?keepAllBackgroundResolutions, ?legacyReferenceResolver, ?tryGetMetadataSnapshot, ?suggestNamesForErrors, ?keepAllBackgroundSymbolUses, ?enableBackgroundItemKeyStoreAndSemanticClassification, ?enablePartialTypeChecking) = + static member Create( + ?projectCacheSize, + ?keepAssemblyContents, + ?keepAllBackgroundResolutions, + ?legacyReferenceResolver, + ?tryGetMetadataSnapshot, + ?suggestNamesForErrors, + ?keepAllBackgroundSymbolUses, + ?enableBackgroundItemKeyStoreAndSemanticClassification, + ?enablePartialTypeChecking) = let legacyReferenceResolver = match legacyReferenceResolver with @@ -1070,13 +1044,21 @@ type FSharpChecker(legacyReferenceResolver, if keepAssemblyContents && enablePartialTypeChecking then invalidArg "enablePartialTypeChecking" "'keepAssemblyContents' and 'enablePartialTypeChecking' cannot be both enabled." - new FSharpChecker(legacyReferenceResolver, projectCacheSizeReal,keepAssemblyContents, keepAllBackgroundResolutions, tryGetMetadataSnapshot, suggestNamesForErrors, keepAllBackgroundSymbolUses, enableBackgroundItemKeyStoreAndSemanticClassification, enablePartialTypeChecking) + FSharpChecker(legacyReferenceResolver, + projectCacheSizeReal, + keepAssemblyContents, + keepAllBackgroundResolutions, + tryGetMetadataSnapshot, + suggestNamesForErrors, + keepAllBackgroundSymbolUses, + enableBackgroundItemKeyStoreAndSemanticClassification, + enablePartialTypeChecking) - member __.ReferenceResolver = legacyReferenceResolver + member _.ReferenceResolver = legacyReferenceResolver - member __.MatchBraces(filename, sourceText: ISourceText, options: FSharpParsingOptions, ?userOpName: string) = + member _.MatchBraces(filename, sourceText: ISourceText, options: FSharpParsingOptions, ?userOpName: string) = let userOpName = defaultArg userOpName "Unknown" - let hash = sourceText.GetHashCode() + let hash = sourceText.GetHashCode() |> int64 async { match braceMatchCache.TryGet(AnyCallerThread, (filename, hash, options)) with | Some res -> return res @@ -1096,54 +1078,50 @@ type FSharpChecker(legacyReferenceResolver, let argv = List.ofArray options.OtherOptions ic.GetParsingOptionsFromCommandLineArgs(sourceFiles, argv, options.UseScriptResolutionRules) - member ic.ParseFile(filename, sourceText, options, ?userOpName: string) = - let userOpName = defaultArg userOpName "Unknown" - ic.CheckMaxMemoryReached() - backgroundCompiler.ParseFile(filename, sourceText, options, userOpName) - - member ic.ParseFileNoCache(filename, sourceText, options, ?userOpName) = + member ic.ParseFile(filename, sourceText, options, ?cache, ?userOpName: string) = + let cache = defaultArg cache true let userOpName = defaultArg userOpName "Unknown" ic.CheckMaxMemoryReached() - backgroundCompiler.ParseFileNoCache(filename, sourceText, options, userOpName) + backgroundCompiler.ParseFile(filename, sourceText, options, cache, userOpName) - member ic.ParseFileInProject(filename, source: string, options, ?userOpName: string) = - let userOpName = defaultArg userOpName "Unknown" + member ic.ParseFileInProject(filename, source: string, options, ?cache: bool, ?userOpName: string) = let parsingOptions, _ = ic.GetParsingOptionsFromProjectOptions(options) - ic.ParseFile(filename, SourceText.ofString source, parsingOptions, userOpName) + ic.ParseFile(filename, SourceText.ofString source, parsingOptions, ?cache=cache, ?userOpName=userOpName) - member __.GetBackgroundParseResultsForFileInProject (filename,options, ?userOpName: string) = + member _.GetBackgroundParseResultsForFileInProject (filename,options, ?userOpName: string) = let userOpName = defaultArg userOpName "Unknown" backgroundCompiler.GetBackgroundParseResultsForFileInProject(filename, options, userOpName) + |> Async.AwaitNodeCode - member __.GetBackgroundCheckResultsForFileInProject (filename,options, ?userOpName: string) = + member _.GetBackgroundCheckResultsForFileInProject (filename,options, ?userOpName: string) = let userOpName = defaultArg userOpName "Unknown" backgroundCompiler.GetBackgroundCheckResultsForFileInProject(filename,options, userOpName) + |> Async.AwaitNodeCode /// Try to get recent approximate type check results for a file. - member __.TryGetRecentCheckResultsForFile(filename: string, options:FSharpProjectOptions, ?sourceText, ?userOpName: string) = + member _.TryGetRecentCheckResultsForFile(filename: string, options:FSharpProjectOptions, ?sourceText, ?userOpName: string) = let userOpName = defaultArg userOpName "Unknown" - backgroundCompiler.TryGetRecentCheckResultsForFile(filename,options,sourceText, userOpName) + backgroundCompiler.TryGetRecentCheckResultsForFile(filename,options,sourceText,userOpName) - member __.Compile(argv: string[], ?userOpName: string) = - let userOpName = defaultArg userOpName "Unknown" - backgroundCompiler.Reactor.EnqueueAndAwaitOpAsync (userOpName, "Compile", "", fun ctok -> - cancellable { - return CompileHelpers.compileFromArgs (ctok, argv, legacyReferenceResolver, None, None) - }) - - member __.Compile (ast:ParsedInput list, assemblyName:string, outFile:string, dependencies:string list, ?pdbFile:string, ?executable:bool, ?noframework:bool, ?userOpName: string) = - let userOpName = defaultArg userOpName "Unknown" - backgroundCompiler.Reactor.EnqueueAndAwaitOpAsync (userOpName, "Compile", assemblyName, fun ctok -> - cancellable { - let noframework = defaultArg noframework false - return CompileHelpers.compileFromAsts (ctok, legacyReferenceResolver, ast, assemblyName, outFile, dependencies, noframework, pdbFile, executable, None, None) - } - ) - - member __.CompileToDynamicAssembly (otherFlags: string[], execute: (TextWriter * TextWriter) option, ?userOpName: string) = - let userOpName = defaultArg userOpName "Unknown" - backgroundCompiler.Reactor.EnqueueAndAwaitOpAsync (userOpName, "CompileToDynamicAssembly", "", fun ctok -> - cancellable { + member _.Compile(argv: string[], ?userOpName: string) = + let _userOpName = defaultArg userOpName "Unknown" + async { + let ctok = CompilationThreadToken() + return CompileHelpers.compileFromArgs (ctok, argv, legacyReferenceResolver, None, None) + } + + member _.Compile (ast:ParsedInput list, assemblyName:string, outFile:string, dependencies:string list, ?pdbFile:string, ?executable:bool, ?noframework:bool, ?userOpName: string) = + let _userOpName = defaultArg userOpName "Unknown" + async { + let ctok = CompilationThreadToken() + let noframework = defaultArg noframework false + return CompileHelpers.compileFromAsts (ctok, legacyReferenceResolver, ast, assemblyName, outFile, dependencies, noframework, pdbFile, executable, None, None) + } + + member _.CompileToDynamicAssembly (otherFlags: string[], execute: (TextWriter * TextWriter) option, ?userOpName: string) = + let _userOpName = defaultArg userOpName "Unknown" + async { + let ctok = CompilationThreadToken() CompileHelpers.setOutputStreams execute // References used to capture the results of compilation @@ -1153,7 +1131,7 @@ type FSharpChecker(legacyReferenceResolver, // Function to generate and store the results of compilation let debugInfo = otherFlags |> Array.exists (fun arg -> arg = "-g" || arg = "--debug:+" || arg = "/debug:+") - let dynamicAssemblyCreator = Some (CompileHelpers.createDynamicAssembly (ctok, debugInfo, tcImportsRef, execute.IsSome, assemblyBuilderRef)) + let dynamicAssemblyCreator = Some (CompileHelpers.createDynamicAssembly (debugInfo, tcImportsRef, execute.IsSome, assemblyBuilderRef)) // Perform the compilation, given the above capturing function. let errorsAndWarnings, result = CompileHelpers.compileFromArgs (ctok, otherFlags, legacyReferenceResolver, tcImportsCapture, dynamicAssemblyCreator) @@ -1165,13 +1143,12 @@ type FSharpChecker(legacyReferenceResolver, | Some a -> Some (a :> System.Reflection.Assembly) return errorsAndWarnings, result, assemblyOpt - } - ) + } - member __.CompileToDynamicAssembly (ast:ParsedInput list, assemblyName:string, dependencies:string list, execute: (TextWriter * TextWriter) option, ?debug:bool, ?noframework:bool, ?userOpName: string) = - let userOpName = defaultArg userOpName "Unknown" - backgroundCompiler.Reactor.EnqueueAndAwaitOpAsync (userOpName, "CompileToDynamicAssembly", assemblyName, fun ctok -> - cancellable { + member _.CompileToDynamicAssembly (ast:ParsedInput list, assemblyName:string, dependencies:string list, execute: (TextWriter * TextWriter) option, ?debug:bool, ?noframework:bool, ?userOpName: string) = + let _userOpName = defaultArg userOpName "Unknown" + async { + let ctok = CompilationThreadToken() CompileHelpers.setOutputStreams execute // References used to capture the results of compilation @@ -1181,13 +1158,13 @@ type FSharpChecker(legacyReferenceResolver, let debugInfo = defaultArg debug false let noframework = defaultArg noframework false - let location = Path.Combine(Path.GetTempPath(),"test"+string(hash assemblyName)) + let location = Path.Combine(FileSystem.GetTempPathShim(),"test"+string(hash assemblyName)) try Directory.CreateDirectory(location) |> ignore with _ -> () let outFile = Path.Combine(location, assemblyName + ".dll") // Function to generate and store the results of compilation - let dynamicAssemblyCreator = Some (CompileHelpers.createDynamicAssembly (ctok, debugInfo, tcImportsRef, execute.IsSome, assemblyBuilderRef)) + let dynamicAssemblyCreator = Some (CompileHelpers.createDynamicAssembly (debugInfo, tcImportsRef, execute.IsSome, assemblyBuilderRef)) // Perform the compilation, given the above capturing function. let errorsAndWarnings, result = @@ -1200,15 +1177,14 @@ type FSharpChecker(legacyReferenceResolver, | Some a -> Some (a :> System.Reflection.Assembly) return errorsAndWarnings, result, assemblyOpt - } - ) + } /// This function is called when the entire environment is known to have changed for reasons not encoded in the ProjectOptions of any project/compilation. /// For example, the type provider approvals file may have changed. member ic.InvalidateAll() = ic.ClearCaches() - member __.ClearCachesAsync(?userOpName: string) = + member _.ClearCachesAsync(?userOpName: string) = let utok = AnyCallerThread let userOpName = defaultArg userOpName "Unknown" braceMatchCache.Clear(utok) @@ -1217,13 +1193,12 @@ type FSharpChecker(legacyReferenceResolver, member ic.ClearCaches(?userOpName) = ic.ClearCachesAsync(?userOpName=userOpName) |> Async.Start // this cache clearance is not synchronous, it will happen when the background op gets run - member __.CheckMaxMemoryReached() = + member _.CheckMaxMemoryReached() = if not maxMemoryReached && System.GC.GetTotalMemory(false) > int64 maxMB * 1024L * 1024L then Trace.TraceWarning("!!!!!!!! MAX MEMORY REACHED, DOWNSIZING F# COMPILER CACHES !!!!!!!!!!!!!!!") // If the maxMB limit is reached, drastic action is taken // - reduce strong cache sizes to a minimum let userOpName = "MaxMemoryReached" - backgroundCompiler.CompleteAllQueuedOps() maxMemoryReached <- true braceMatchCache.Resize(AnyCallerThread, newKeepStrongly=10) backgroundCompiler.DownsizeCaches(userOpName) |> Async.RunSynchronously @@ -1231,33 +1206,33 @@ type FSharpChecker(legacyReferenceResolver, // This is for unit testing only member ic.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() = - backgroundCompiler.CompleteAllQueuedOps() // flush AsyncOp ic.ClearCachesAsync() |> Async.RunSynchronously System.GC.Collect() System.GC.WaitForPendingFinalizers() - backgroundCompiler.CompleteAllQueuedOps() // flush AsyncOp + FxResolver.ClearStaticCaches() /// This function is called when the configuration is known to have changed for reasons not encoded in the ProjectOptions. /// For example, dependent references may have been deleted or created. - member __.InvalidateConfiguration(options: FSharpProjectOptions, ?startBackgroundCompile, ?userOpName: string) = + member _.InvalidateConfiguration(options: FSharpProjectOptions, ?userOpName: string) = let userOpName = defaultArg userOpName "Unknown" - backgroundCompiler.InvalidateConfiguration(options, startBackgroundCompile, userOpName) + backgroundCompiler.InvalidateConfiguration(options, userOpName) /// Clear the internal cache of the given projects. - member __.ClearCache(options: FSharpProjectOptions seq, ?userOpName: string) = + member _.ClearCache(options: FSharpProjectOptions seq, ?userOpName: string) = let userOpName = defaultArg userOpName "Unknown" backgroundCompiler.ClearCache(options, userOpName) /// This function is called when a project has been cleaned, and thus type providers should be refreshed. - member __.NotifyProjectCleaned(options: FSharpProjectOptions, ?userOpName: string) = + member _.NotifyProjectCleaned(options: FSharpProjectOptions, ?userOpName: string) = let userOpName = defaultArg userOpName "Unknown" backgroundCompiler.NotifyProjectCleaned (options, userOpName) /// Typecheck a source code file, returning a handle to the results of the /// parse including the reconstructed types in the file. - member __.CheckFileInProjectAllowingStaleCachedResults(parseResults:FSharpParseFileResults, filename:string, fileVersion:int, source:string, options:FSharpProjectOptions, ?userOpName: string) = + member _.CheckFileInProjectAllowingStaleCachedResults(parseResults:FSharpParseFileResults, filename:string, fileVersion:int, source:string, options:FSharpProjectOptions, ?userOpName: string) = let userOpName = defaultArg userOpName "Unknown" backgroundCompiler.CheckFileInProjectAllowingStaleCachedResults(parseResults,filename,fileVersion,SourceText.ofString source,options,userOpName) + |> Async.AwaitNodeCode /// Typecheck a source code file, returning a handle to the results of the /// parse including the reconstructed types in the file. @@ -1265,6 +1240,7 @@ type FSharpChecker(legacyReferenceResolver, let userOpName = defaultArg userOpName "Unknown" ic.CheckMaxMemoryReached() backgroundCompiler.CheckFileInProject(parseResults,filename,fileVersion,sourceText,options,userOpName) + |> Async.AwaitNodeCode /// Typecheck a source code file, returning a handle to the results of the /// parse including the reconstructed types in the file. @@ -1272,30 +1248,41 @@ type FSharpChecker(legacyReferenceResolver, let userOpName = defaultArg userOpName "Unknown" ic.CheckMaxMemoryReached() backgroundCompiler.ParseAndCheckFileInProject(filename, fileVersion, sourceText, options, userOpName) + |> Async.AwaitNodeCode member ic.ParseAndCheckProject(options, ?userOpName: string) = let userOpName = defaultArg userOpName "Unknown" ic.CheckMaxMemoryReached() backgroundCompiler.ParseAndCheckProject(options, userOpName) + |> Async.AwaitNodeCode member ic.FindBackgroundReferencesInFile(filename:string, options: FSharpProjectOptions, symbol: FSharpSymbol, ?canInvalidateProject: bool, ?userOpName: string) = let canInvalidateProject = defaultArg canInvalidateProject true let userOpName = defaultArg userOpName "Unknown" ic.CheckMaxMemoryReached() backgroundCompiler.FindReferencesInFile(filename, options, symbol, canInvalidateProject, userOpName) + |> Async.AwaitNodeCode member ic.GetBackgroundSemanticClassificationForFile(filename:string, options: FSharpProjectOptions, ?userOpName) = let userOpName = defaultArg userOpName "Unknown" ic.CheckMaxMemoryReached() backgroundCompiler.GetSemanticClassificationForFile(filename, options, userOpName) + |> Async.AwaitNodeCode /// For a given script file, get the ProjectOptions implied by the #load closure - member __.GetProjectOptionsFromScript(filename, source, ?previewEnabled, ?loadedTimeStamp, ?otherFlags, ?useFsiAuxLib, ?useSdkRefs, ?assumeDotNetFramework, ?extraProjectInfo: obj, ?optionsStamp: int64, ?userOpName: string) = + member _.GetProjectOptionsFromScript(filename, source, ?previewEnabled, ?loadedTimeStamp, ?otherFlags, ?useFsiAuxLib, ?useSdkRefs, ?assumeDotNetFramework, ?sdkDirOverride, ?optionsStamp: int64, ?userOpName: string) = let userOpName = defaultArg userOpName "Unknown" - backgroundCompiler.GetProjectOptionsFromScript(filename, source, previewEnabled, loadedTimeStamp, otherFlags, useFsiAuxLib, useSdkRefs, assumeDotNetFramework, extraProjectInfo, optionsStamp, userOpName) + backgroundCompiler.GetProjectOptionsFromScript(filename, source, previewEnabled, loadedTimeStamp, otherFlags, useFsiAuxLib, useSdkRefs, sdkDirOverride, assumeDotNetFramework, optionsStamp, userOpName) - member __.GetProjectOptionsFromCommandLineArgs(projectFileName, argv, ?loadedTimeStamp, ?extraProjectInfo: obj) = + member _.GetProjectOptionsFromCommandLineArgs(projectFileName, argv, ?loadedTimeStamp, ?isInteractive, ?isEditing) = + let isEditing = defaultArg isEditing false + let isInteractive = defaultArg isInteractive false let loadedTimeStamp = defaultArg loadedTimeStamp DateTime.MaxValue // Not 'now', we don't want to force reloading + let argv = + let define = if isInteractive then "--define:INTERACTIVE" else "--define:COMPILED" + Array.append argv [| define |] + let argv = + if isEditing then Array.append argv [| "--define:EDITING" |] else argv { ProjectFileName = projectFileName ProjectId = None SourceFiles = [| |] // the project file names will be inferred from the ProjectOptions @@ -1306,70 +1293,60 @@ type FSharpChecker(legacyReferenceResolver, LoadTime = loadedTimeStamp UnresolvedReferences = None OriginalLoadReferences=[] - ExtraProjectInfo=extraProjectInfo Stamp = None } - member __.GetParsingOptionsFromCommandLineArgs(sourceFiles, argv, ?isInteractive) = + member _.GetParsingOptionsFromCommandLineArgs(sourceFiles, argv, ?isInteractive, ?isEditing) = + let isEditing = defaultArg isEditing false let isInteractive = defaultArg isInteractive false use errorScope = new ErrorScope() - let tcConfigBuilder = TcConfigBuilder.Initial + let tcConfigB = + TcConfigBuilder.CreateNew(legacyReferenceResolver, + defaultFSharpBinariesDir=FSharpCheckerResultsSettings.defaultFSharpBinariesDir, + reduceMemoryUsage=ReduceMemoryFlag.Yes, + implicitIncludeDir="", + isInteractive=isInteractive, + isInvalidationSupported=false, + defaultCopyFSharpCore=CopyFSharpCoreFlag.No, + tryGetMetadataSnapshot=tryGetMetadataSnapshot, + sdkDirOverride=None, + rangeForErrors=range0) + + // These defines are implied by the F# compiler + tcConfigB.conditionalCompilationDefines <- + let define = if isInteractive then "INTERACTIVE" else "COMPILED" + define :: tcConfigB.conditionalCompilationDefines + if isEditing then + tcConfigB.conditionalCompilationDefines <- "EDITING":: tcConfigB.conditionalCompilationDefines // Apply command-line arguments and collect more source files if they are in the arguments - let sourceFilesNew = ApplyCommandLineArgs(tcConfigBuilder, sourceFiles, argv) - FSharpParsingOptions.FromTcConfigBuilder(tcConfigBuilder, Array.ofList sourceFilesNew, isInteractive), errorScope.Diagnostics - - member ic.GetParsingOptionsFromCommandLineArgs(argv, ?isInteractive: bool) = - ic.GetParsingOptionsFromCommandLineArgs([], argv, ?isInteractive=isInteractive) - - /// Begin background parsing the given project. - member __.StartBackgroundCompile(options, ?userOpName) = - let userOpName = defaultArg userOpName "Unknown" - backgroundCompiler.CheckProjectInBackground(options, userOpName) - - /// Begin background parsing the given project. - member ic.CheckProjectInBackground(options, ?userOpName) = - ic.StartBackgroundCompile(options, ?userOpName=userOpName) - - /// Stop the background compile. - member __.StopBackgroundCompile() = - backgroundCompiler.StopBackgroundCompile() - - /// Block until the background compile finishes. - // - // This is for unit testing only - member __.WaitForBackgroundCompile() = backgroundCompiler.WaitForBackgroundCompile() - - // Publish the ReactorOps from the background compiler for internal use - member ic.ReactorOps = backgroundCompiler.ReactorOps - - member __.CurrentQueueLength = backgroundCompiler.CurrentQueueLength - - member __.BeforeBackgroundFileCheck = backgroundCompiler.BeforeBackgroundFileCheck + let sourceFilesNew = ApplyCommandLineArgs(tcConfigB, sourceFiles, argv) + FSharpParsingOptions.FromTcConfigBuilder(tcConfigB, Array.ofList sourceFilesNew, isInteractive), errorScope.Diagnostics - member __.FileParsed = backgroundCompiler.FileParsed + member ic.GetParsingOptionsFromCommandLineArgs(argv, ?isInteractive: bool, ?isEditing) = + ic.GetParsingOptionsFromCommandLineArgs([], argv, ?isInteractive=isInteractive, ?isEditing=isEditing) - member __.FileChecked = backgroundCompiler.FileChecked + member _.BeforeBackgroundFileCheck = backgroundCompiler.BeforeBackgroundFileCheck - member __.ProjectChecked = backgroundCompiler.ProjectChecked + member _.FileParsed = backgroundCompiler.FileParsed - member __.ImplicitlyStartBackgroundWork with get() = backgroundCompiler.ImplicitlyStartBackgroundWork and set v = backgroundCompiler.ImplicitlyStartBackgroundWork <- v + member _.FileChecked = backgroundCompiler.FileChecked - member __.PauseBeforeBackgroundWork with get() = Reactor.Singleton.PauseBeforeBackgroundWork and set v = Reactor.Singleton.PauseBeforeBackgroundWork <- v + member _.ProjectChecked = backgroundCompiler.ProjectChecked - static member GlobalForegroundParseCountStatistic = BackgroundCompiler.GlobalForegroundParseCountStatistic + static member ActualParseFileCount = BackgroundCompiler.ActualParseFileCount - static member GlobalForegroundTypeCheckCountStatistic = BackgroundCompiler.GlobalForegroundTypeCheckCountStatistic + static member ActualCheckFileCount = BackgroundCompiler.ActualCheckFileCount - member __.MaxMemoryReached = maxMemEvent.Publish + member _.MaxMemoryReached = maxMemEvent.Publish - member __.MaxMemory with get() = maxMB and set v = maxMB <- v + member _.MaxMemory with get() = maxMB and set v = maxMB <- v static member Instance with get() = globalInstance.Force() - member internal __.FrameworkImportsCache = backgroundCompiler.FrameworkImportsCache + member internal _.FrameworkImportsCache = backgroundCompiler.FrameworkImportsCache /// Tokenize a single line, returning token information and a tokenization state represented by an integer - member __.TokenizeLine (line: string, state: FSharpTokenizerLexState) = + member _.TokenizeLine (line: string, state: FSharpTokenizerLexState) = let tokenizer = FSharpSourceTokenizer([], None) let lineTokenizer = tokenizer.CreateLineTokenizer line let mutable state = (None, state) @@ -1389,42 +1366,58 @@ type FSharpChecker(legacyReferenceResolver, yield tokens |] tokens -type CompilerEnvironment = - static member BinFolderOfDefaultFSharpCompiler(?probePoint) = - FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(probePoint) +namespace FSharp.Compiler -/// Information about the compilation environment -[] -module CompilerEnvironment = - /// These are the names of assemblies that should be referenced for .fs, .ml, .fsi, .mli files that - /// are not associated with a project - let DefaultReferencesForOrphanSources assumeDotNetFramework = DefaultReferencesForScriptsAndOutOfProjectSources assumeDotNetFramework +open System +open System.IO +open Internal.Utilities +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.CompilerConfig +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Text.Range +open FSharp.Compiler.ErrorLogger + +type CompilerEnvironment() = + /// Source file extensions + static let compilableExtensions = FSharpSigFileSuffixes @ FSharpImplFileSuffixes @ FSharpScriptFileSuffixes + + /// Single file projects extensions + static let singleFileProjectExtensions = FSharpScriptFileSuffixes + + static member BinFolderOfDefaultFSharpCompiler(?probePoint) = + FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(probePoint) + + // Legacy entry point, no longer used by FSharp.Editor + static member DefaultReferencesForOrphanSources assumeDotNetFramework = + let currentDirectory = Directory.GetCurrentDirectory() + let fxResolver = FxResolver(assumeDotNetFramework, currentDirectory, rangeForErrors=range0, useSdkRefs=true, isInteractive=false, sdkDirOverride=None) + let references, _ = fxResolver.GetDefaultReferences (useFsiAuxLib=false) + references /// Publish compiler-flags parsing logic. Must be fast because its used by the colorizer. - let GetCompilationDefinesForEditing (parsingOptions: FSharpParsingOptions) = + static member GetCompilationDefinesForEditing (parsingOptions: FSharpParsingOptions) = SourceFileImpl.AdditionalDefinesForUseInEditor(parsingOptions.IsInteractive) @ parsingOptions.ConditionalCompilationDefines /// Return true if this is a subcategory of error or warning message that the language service can emit - let IsCheckerSupportedSubcategory(subcategory:string) = + static member IsCheckerSupportedSubcategory(subcategory:string) = // Beware: This code logic is duplicated in DocumentTask.cs in the language service PhasedDiagnostic.IsSubcategoryOfCompile(subcategory) -/// Information about the debugging environment -module DebuggerEnvironment = /// Return the language ID, which is the expression evaluator id that the /// debugger will use. - let GetLanguageID() = + static member GetDebuggerLanguageID() = System.Guid(0xAB4F38C9u, 0xB6E6us, 0x43baus, 0xBEuy, 0x3Buy, 0x58uy, 0x08uy, 0x0Buy, 0x2Cuy, 0xCCuy, 0xE3uy) -module PrettyNaming = - let IsIdentifierPartCharacter x = FSharp.Compiler.PrettyNaming.IsIdentifierPartCharacter x - let IsLongIdentifierPartCharacter x = FSharp.Compiler.PrettyNaming.IsLongIdentifierPartCharacter x - let IsOperatorName x = FSharp.Compiler.PrettyNaming.IsOperatorName x - let GetLongNameFromString x = FSharp.Compiler.PrettyNaming.SplitNamesForILPath x - let FormatAndOtherOverloadsString remainingOverloads = FSComp.SR.typeInfoOtherOverloads(remainingOverloads) - let QuoteIdentifierIfNeeded id = Lexhelp.Keywords.QuoteIdentifierIfNeeded id - let KeywordNames = Lexhelp.Keywords.keywordNames - -module FSharpFileUtilities = - let isScriptFile (fileName: string) = ParseAndCheckInputs.IsScript fileName \ No newline at end of file + static member IsScriptFile (fileName: string) = ParseAndCheckInputs.IsScript fileName + + /// Whether or not this file is compilable + static member IsCompilable file = + let ext = Path.GetExtension file + compilableExtensions |> List.exists(fun e->0 = String.Compare(e, ext, StringComparison.OrdinalIgnoreCase)) + + /// Whether or not this file should be a single-file project + static member MustBeSingleFileProject file = + let ext = Path.GetExtension file + singleFileProjectExtensions |> List.exists(fun e-> 0 = String.Compare(e, ext, StringComparison.OrdinalIgnoreCase)) + diff --git a/src/fsharp/service/service.fsi b/src/fsharp/service/service.fsi old mode 100755 new mode 100644 index 09d6469860f..97b6f9f7983 --- a/src/fsharp/service/service.fsi +++ b/src/fsharp/service/service.fsi @@ -2,66 +2,18 @@ /// SourceCodeServices API to the compiler as an incremental service for parsing, /// type checking and intellisense-like environment-reporting. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.CodeAnalysis open System open System.IO - -open FSharp.Compiler open FSharp.Compiler.AbstractIL.ILBinaryReader -open FSharp.Compiler.SyntaxTree -open FSharp.Compiler.Range +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Symbols +open FSharp.Compiler.Syntax open FSharp.Compiler.Text - -/// Unused in this API -type public UnresolvedReferencesSet - -/// A set of information describing a project or script build configuration. -type public FSharpProjectOptions = - { - // Note that this may not reduce to just the project directory, because there may be two projects in the same directory. - ProjectFileName: string - - /// This is the unique identifier for the project, it is case sensitive. If it's None, will key off of ProjectFileName in our caching. - ProjectId: string option - - /// The files in the project - SourceFiles: string[] - - /// Additional command line argument options for the project. These can include additional files and references. - OtherOptions: string[] - - /// The command line arguments for the other projects referenced by this project, indexed by the - /// exact text used in the "-r:" reference in FSharpProjectOptions. - ReferencedProjects: (string * FSharpProjectOptions)[] - - /// When true, the typechecking environment is known a priori to be incomplete, for - /// example when a .fs file is opened outside of a project. In this case, the number of error - /// messages reported is reduced. - IsIncompleteTypeCheckEnvironment : bool - - /// When true, use the reference resolution rules for scripts rather than the rules for compiler. - UseScriptResolutionRules : bool - - /// Timestamp of project/script load, used to differentiate between different instances of a project load. - /// This ensures that a complete reload of the project or script type checking - /// context occurs on project or script unload/reload. - LoadTime : DateTime - - /// Unused in this API and should be 'None' when used as user-specified input - UnresolvedReferences : UnresolvedReferencesSet option - - /// Unused in this API and should be '[]' when used as user-specified input - OriginalLoadReferences: (range * string * string) list - - /// Extra information passed back on event trigger - ExtraProjectInfo : obj option - - /// An optional stamp to uniquely identify this set of options - /// If two sets of options both have stamps, then they are considered equal - /// if and only if the stamps are equal - Stamp: int64 option - } +open FSharp.Compiler.Tokenization [] /// Used to parse and check F# source code. @@ -73,7 +25,7 @@ type public FSharpChecker = /// The optional size of the project checking cache. /// Keep the checked contents of projects. /// If false, do not keep full intermediate checking results from background checking suitable for returning from GetBackgroundCheckResultsForFileInProject. This reduces memory usage. - /// An optional resolver for non-file references, for legacy purposes + /// An optional resolver for legacy MSBuild references /// An optional resolver to access the contents of .NET binaries in a memory-efficient way /// Indicate whether name suggestion should be enabled /// Indicate whether all symbol uses should be kept in background checking @@ -81,7 +33,7 @@ type public FSharpChecker = /// Indicates whether to perform partial type checking. Cannot be set to true if keepAssmeblyContents is true. If set to true, can cause duplicate type-checks when richer information on a file is needed, but can skip background type-checking entirely on implementation files with signature files. static member Create: ?projectCacheSize: int * ?keepAssemblyContents: bool * ?keepAllBackgroundResolutions: bool * - ?legacyReferenceResolver: ReferenceResolver.Resolver * ?tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot * + ?legacyReferenceResolver: LegacyReferenceResolver * ?tryGetMetadataSnapshot: ILReaderTryGetMetadataSnapshot * ?suggestNamesForErrors: bool * ?keepAllBackgroundSymbolUses: bool * ?enableBackgroundItemKeyStoreAndSemanticClassification: bool * ?enablePartialTypeChecking: bool -> FSharpChecker @@ -115,18 +67,9 @@ type public FSharpChecker = /// The path for the file. The file name is used as a module name for implicit top level modules (e.g. in scripts). /// The source to be parsed. /// Parsing options for the project or script. + /// Store the parse in a size-limited cache assocaited with the FSharpChecker. Default: true /// An optional string used for tracing compiler operations associated with this request. - member ParseFile: filename: string * sourceText: ISourceText * options: FSharpParsingOptions * ?userOpName: string -> Async - - /// - /// Parses a source code for a file. Returns an AST that can be traversed for various features. - /// - /// - /// The path for the file. The file name is also as a module name for implicit top level modules (e.g. in scripts). - /// The source to be parsed. - /// Parsing options for the project or script. - /// An optional string used for tracing compiler operations associated with this request. - member ParseFileNoCache: filename: string * sourceText: ISourceText * options: FSharpParsingOptions * ?userOpName: string -> Async + member ParseFile: filename: string * sourceText: ISourceText * options: FSharpParsingOptions * ?cache: bool * ?userOpName: string -> Async /// /// Parses a source code for a file. Returns an AST that can be traversed for various features. @@ -135,9 +78,10 @@ type public FSharpChecker = /// The path for the file. The file name is also as a module name for implicit top level modules (e.g. in scripts). /// The source to be parsed. /// Parsing options for the project or script. + /// Store the parse in a size-limited cache assocaited with the FSharpChecker. Default: true /// An optional string used for tracing compiler operations associated with this request. [] - member ParseFileInProject: filename: string * source: string * options: FSharpProjectOptions * ?userOpName: string -> Async + member ParseFileInProject: filename: string * source: string * options: FSharpProjectOptions * ?cache: bool * ?userOpName: string -> Async /// /// Check a source code file, returning a handle to the results of the parse including @@ -157,7 +101,7 @@ type public FSharpChecker = /// The options for the project or script. /// An optional string used for tracing compiler operations associated with this request. [] - member CheckFileInProjectAllowingStaleCachedResults : parseResults: FSharpParseFileResults * filename: string * fileVersion: int * source: string * options: FSharpProjectOptions * ?userOpName: string -> Async + member CheckFileInProjectAllowingStaleCachedResults: parseResults: FSharpParseFileResults * filename: string * fileVersion: int * source: string * options: FSharpProjectOptions * ?userOpName: string -> Async /// /// @@ -177,7 +121,7 @@ type public FSharpChecker = /// The full source for the file. /// The options for the project or script. /// An optional string used for tracing compiler operations associated with this request. - member CheckFileInProject : parseResults: FSharpParseFileResults * filename: string * fileVersion: int * sourceText: ISourceText * options: FSharpProjectOptions * ?userOpName: string -> Async + member CheckFileInProject: parseResults: FSharpParseFileResults * filename: string * fileVersion: int * sourceText: ISourceText * options: FSharpProjectOptions * ?userOpName: string -> Async /// /// @@ -196,7 +140,7 @@ type public FSharpChecker = /// The source for the file. /// The options for the project or script. /// An optional string used for tracing compiler operations associated with this request. - member ParseAndCheckFileInProject : filename: string * fileVersion: int * sourceText: ISourceText * options: FSharpProjectOptions * ?userOpName: string -> Async + member ParseAndCheckFileInProject: filename: string * fileVersion: int * sourceText: ISourceText * options: FSharpProjectOptions * ?userOpName: string -> Async /// /// Parse and typecheck all files in a project. @@ -206,7 +150,7 @@ type public FSharpChecker = /// /// The options for the project or script. /// An optional string used for tracing compiler operations associated with this request. - member ParseAndCheckProject : options: FSharpProjectOptions * ?userOpName: string -> Async + member ParseAndCheckProject: options: FSharpProjectOptions * ?userOpName: string -> Async /// /// For a given script file, get the FSharpProjectOptions implied by the #load closure. @@ -223,26 +167,39 @@ type public FSharpChecker = /// Add a default reference to the FSharp.Compiler.Interactive.Settings library. /// Use the implicit references from the .NET SDK. /// Set up compilation and analysis for .NET Framework scripts. - /// An extra data item added to the returned FSharpProjectOptions. + /// Override the .NET SDK used for default references. /// An optional unique stamp for the options. /// An optional string used for tracing compiler operations associated with this request. member GetProjectOptionsFromScript: - filename: string * source: ISourceText * ?previewEnabled:bool * ?loadedTimeStamp: DateTime * - ?otherFlags: string[] * ?useFsiAuxLib: bool * ?useSdkRefs: bool * ?assumeDotNetFramework: bool * - ?extraProjectInfo: obj * ?optionsStamp: int64 * ?userOpName: string - -> Async - - /// - /// Get the FSharpProjectOptions implied by a set of command line arguments. - /// + filename: string * + source: ISourceText * + ?previewEnabled:bool * + ?loadedTimeStamp: DateTime * + ?otherFlags: string[] * + ?useFsiAuxLib: bool * + ?useSdkRefs: bool * + ?assumeDotNetFramework: bool * + ?sdkDirOverride: string * + ?optionsStamp: int64 * + ?userOpName: string + -> Async + + /// Get the FSharpProjectOptions implied by a set of command line arguments. /// /// Used to differentiate between projects and for the base directory of the project. /// The command line arguments for the project build. /// Indicates when the script was loaded into the editing environment, + /// Indicates that compilation should assume the EDITING define and related settings + /// Indicates that compilation should assume the INTERACTIVE define and related settings /// so that an 'unload' and 'reload' action will cause the script to be considered as a new project, /// so that references are re-resolved. - /// An extra data item added to the returned FSharpProjectOptions. - member GetProjectOptionsFromCommandLineArgs : projectFileName: string * argv: string[] * ?loadedTimeStamp: DateTime * ?extraProjectInfo: obj -> FSharpProjectOptions + member GetProjectOptionsFromCommandLineArgs: + projectFileName: string * + argv: string[] * + ?loadedTimeStamp: DateTime * + ?isInteractive: bool * + ?isEditing: bool + -> FSharpProjectOptions /// /// Get the FSharpParsingOptions implied by a set of command line arguments and list of source files. @@ -251,7 +208,13 @@ type public FSharpChecker = /// Initial source files list. Additional files may be added during argv evaluation. /// The command line arguments for the project build. /// Indicates that parsing should assume the INTERACTIVE define and related settings - member GetParsingOptionsFromCommandLineArgs: sourceFiles: string list * argv: string list * ?isInteractive: bool -> FSharpParsingOptions * FSharpErrorInfo list + /// Indicates that compilation should assume the EDITING define and related settings + member GetParsingOptionsFromCommandLineArgs: + sourceFiles: string list * + argv: string list * + ?isInteractive: bool * + ?isEditing: bool + -> FSharpParsingOptions * FSharpDiagnostic list /// /// Get the FSharpParsingOptions implied by a set of command line arguments. @@ -259,14 +222,21 @@ type public FSharpChecker = /// /// The command line arguments for the project build. /// Indicates that parsing should assume the INTERACTIVE define and related settings - member GetParsingOptionsFromCommandLineArgs: argv: string list * ?isInteractive: bool -> FSharpParsingOptions * FSharpErrorInfo list + /// Indicates that compilation should assume the EDITING define and related settings + member GetParsingOptionsFromCommandLineArgs: + argv: string list * + ?isInteractive: bool * + ?isEditing: bool + -> FSharpParsingOptions * FSharpDiagnostic list /// /// Get the FSharpParsingOptions implied by a FSharpProjectOptions. /// /// /// The overall options. - member GetParsingOptionsFromProjectOptions: options: FSharpProjectOptions -> FSharpParsingOptions * FSharpErrorInfo list + member GetParsingOptionsFromProjectOptions: + options: FSharpProjectOptions + -> FSharpParsingOptions * FSharpDiagnostic list /// /// Like ParseFile, but uses results from the background builder. @@ -276,7 +246,7 @@ type public FSharpChecker = /// The filename for the file. /// The options for the project or script, used to determine active --define conditionals and other options relevant to parsing. /// An optional string used for tracing compiler operations associated with this request. - member GetBackgroundParseResultsForFileInProject : filename : string * options : FSharpProjectOptions * ?userOpName: string -> Async + member GetBackgroundParseResultsForFileInProject: filename: string * options: FSharpProjectOptions * ?userOpName: string -> Async /// /// Like CheckFileInProject, but uses the existing results from the background builder. @@ -287,7 +257,7 @@ type public FSharpChecker = /// The filename for the file. /// The options for the project or script, used to determine active --define conditionals and other options relevant to parsing. /// An optional string used for tracing compiler operations associated with this request. - member GetBackgroundCheckResultsForFileInProject : filename : string * options : FSharpProjectOptions * ?userOpName: string -> Async + member GetBackgroundCheckResultsForFileInProject: filename: string * options: FSharpProjectOptions * ?userOpName: string -> Async /// /// Optimized find references for a given symbol in a file of project. @@ -300,7 +270,7 @@ type public FSharpChecker = /// The symbol to find all uses in the file. /// Default: true. If true, this call can invalidate the current state of project if the options have changed. If false, the current state of the project will be used. /// An optional string used for tracing compiler operations associated with this request. - member FindBackgroundReferencesInFile : filename : string * options : FSharpProjectOptions * symbol: FSharpSymbol * ?canInvalidateProject: bool * ?userOpName: string -> Async + member FindBackgroundReferencesInFile: filename: string * options: FSharpProjectOptions * symbol: FSharpSymbol * ?canInvalidateProject: bool * ?userOpName: string -> Async /// /// Get semantic classification for a file. @@ -311,7 +281,7 @@ type public FSharpChecker = /// The filename for the file. /// The options for the project or script, used to determine active --define conditionals and other options relevant to parsing. /// An optional string used for tracing compiler operations associated with this request. - member GetBackgroundSemanticClassificationForFile : filename : string * options : FSharpProjectOptions * ?userOpName: string -> Async + member GetBackgroundSemanticClassificationForFile : filename : string * options : FSharpProjectOptions * ?userOpName: string -> Async /// /// Compile using the given flags. Source files names are resolved via the FileSystem API. @@ -321,7 +291,7 @@ type public FSharpChecker = /// /// The command line arguments for the project build. /// An optional string used for tracing compiler operations associated with this request. - member Compile: argv:string[] * ?userOpName: string -> Async + member Compile: argv:string[] * ?userOpName: string -> Async /// /// TypeCheck and compile provided AST @@ -335,7 +305,7 @@ type public FSharpChecker = /// Indicates if an executable is being produced. /// Enables the /noframework flag. /// An optional string used for tracing compiler operations associated with this request. - member Compile: ast:ParsedInput list * assemblyName:string * outFile:string * dependencies:string list * ?pdbFile:string * ?executable:bool * ?noframework:bool * ?userOpName: string -> Async + member Compile: ast:ParsedInput list * assemblyName:string * outFile:string * dependencies:string list * ?pdbFile:string * ?executable:bool * ?noframework:bool * ?userOpName: string -> Async /// /// Compiles to a dynamic assembly using the given flags. @@ -353,7 +323,7 @@ type public FSharpChecker = /// Other flags for compilation. /// An optional pair of output streams, enabling execution of the result. /// An optional string used for tracing compiler operations associated with this request. - member CompileToDynamicAssembly: otherFlags:string [] * execute:(TextWriter * TextWriter) option * ?userOpName: string -> Async + member CompileToDynamicAssembly: otherFlags:string [] * execute:(TextWriter * TextWriter) option * ?userOpName: string -> Async /// /// TypeCheck and compile provided AST @@ -366,7 +336,7 @@ type public FSharpChecker = /// Enabled debug symbols /// Enables the /noframework flag. /// An optional string used for tracing compiler operations associated with this request. - member CompileToDynamicAssembly: ast:ParsedInput list * assemblyName:string * dependencies:string list * execute:(TextWriter * TextWriter) option * ?debug:bool * ?noframework:bool * ?userOpName: string -> Async + member CompileToDynamicAssembly: ast:ParsedInput list * assemblyName:string * dependencies:string list * execute:(TextWriter * TextWriter) option * ?debug:bool * ?noframework:bool * ?userOpName: string -> Async /// /// Try to get type check results for a file. This looks up the results of recent type checks of the @@ -379,46 +349,32 @@ type public FSharpChecker = /// The options for the project or script, used to determine active --define conditionals and other options relevant to parsing. /// Optionally, specify source that must match the previous parse precisely. /// An optional string used for tracing compiler operations associated with this request. - member TryGetRecentCheckResultsForFile : filename: string * options:FSharpProjectOptions * ?sourceText: ISourceText * ?userOpName: string -> (FSharpParseFileResults * FSharpCheckFileResults * (*version*)int) option + member TryGetRecentCheckResultsForFile: filename: string * options:FSharpProjectOptions * ?sourceText: ISourceText * ?userOpName: string -> (FSharpParseFileResults * FSharpCheckFileResults * (* hash *)int64) option /// This function is called when the entire environment is known to have changed for reasons not encoded in the ProjectOptions of any project/compilation. - member InvalidateAll : unit -> unit + member InvalidateAll: unit -> unit - /// This function is called when the configuration is known to have changed for reasons not encoded in the ProjectOptions. - /// For example, dependent references may have been deleted or created. - /// Start a background compile of the project if a project with the same name has already been seen before. + /// + /// This function is called when the configuration is known to have changed for reasons not encoded in the ProjectOptions. + /// For example, dependent references may have been deleted or created. + /// + /// The options for the project or script, used to determine active --define conditionals and other options relevant to parsing. /// An optional string used for tracing compiler operations associated with this request. - member InvalidateConfiguration: options: FSharpProjectOptions * ?startBackgroundCompile: bool * ?userOpName: string -> unit + member InvalidateConfiguration: options: FSharpProjectOptions * ?userOpName: string -> unit - /// Clear the internal cache of the given projects. + /// Clear the internal cache of the given projects. /// The given project options. /// An optional string used for tracing compiler operations associated with this request. member ClearCache: options: FSharpProjectOptions seq * ?userOpName: string -> unit - /// Set the project to be checked in the background. Overrides any previous call to CheckProjectInBackground - member CheckProjectInBackground: options: FSharpProjectOptions * ?userOpName: string -> unit - - /// Stop the background compile. - //[] - member StopBackgroundCompile : unit -> unit - - /// Block until the background compile finishes. - //[] - member WaitForBackgroundCompile : unit -> unit - /// Report a statistic for testability - static member GlobalForegroundParseCountStatistic : int + static member ActualParseFileCount: int /// Report a statistic for testability - static member GlobalForegroundTypeCheckCountStatistic : int + static member ActualCheckFileCount: int /// Flush all caches and garbage collect - member ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients : unit -> unit - - /// Current queue length of the service, for debug purposes. - /// In addition, a single async operation or a step of a background build - /// may be in progress - such an operation is not counted in the queue length. - member CurrentQueueLength : int + member ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients: unit -> unit /// /// This function is called when a project has been cleaned/rebuilt, and thus any live type providers should be refreshed. @@ -426,52 +382,43 @@ type public FSharpChecker = /// /// The options describing the project that has been cleaned. /// An optional string used for tracing compiler operations associated with this request. + [] member NotifyProjectCleaned: options: FSharpProjectOptions * ?userOpName: string -> Async + /// /// Notify the host that the logical type checking context for a file has now been updated internally /// and that the file has become eligible to be re-typechecked for errors. - /// /// The event will be raised on a background thread. - member BeforeBackgroundFileCheck : IEvent + /// + member BeforeBackgroundFileCheck: IEvent /// Raised after a parse of a file in the background analysis. /// /// The event will be raised on a background thread. - member FileParsed : IEvent + member FileParsed: IEvent /// Raised after a check of a file in the background analysis. /// /// The event will be raised on a background thread. - member FileChecked : IEvent + member FileChecked: IEvent /// Raised after the maxMB memory threshold limit is reached - member MaxMemoryReached : IEvent - - /// A maximum number of megabytes of allocated memory. If the figure reported by System.GC.GetTotalMemory(false) goes over this limit, the FSharpChecker object will attempt to free memory and reduce cache sizes to a minimum. - member MaxMemory : int with get, set - - /// Get or set a flag which controls if background work is started implicitly. - /// - /// If true, calls to CheckFileInProject implicitly start a background check of that project, replacing - /// any other background checks in progress. This is useful in IDE applications with spare CPU cycles as - /// it prepares the project analysis results for use. The default is 'true'. - member ImplicitlyStartBackgroundWork: bool with get, set + member MaxMemoryReached: IEvent - /// Get or set the pause time in milliseconds before background work is started. - member PauseBeforeBackgroundWork: int with get, set + /// + /// A maximum number of megabytes of allocated memory. If the figure reported by System.GC.GetTotalMemory(false) goes over this limit, the FSharpChecker object will attempt to free memory and reduce cache sizes to a minimum. + /// + member MaxMemory: int with get, set /// Notify the host that a project has been fully checked in the background (using file contents provided by the file system API) /// /// The event may be raised on a background thread. - member ProjectChecked : IEvent - - // For internal use only - member internal ReactorOps : IReactorOperations + member ProjectChecked: IEvent [] - static member Instance : FSharpChecker - member internal FrameworkImportsCache : FrameworkImportsCache - member internal ReferenceResolver : ReferenceResolver.Resolver + static member Instance: FSharpChecker + member internal FrameworkImportsCache: FrameworkImportsCache + member internal ReferenceResolver: LegacyReferenceResolver /// Tokenize a single line, returning token information and a tokenization state represented by an integer member TokenizeLine: line:string * state:FSharpTokenizerLexState-> FSharpTokenInfo [] * FSharpTokenizerLexState @@ -479,46 +426,36 @@ type public FSharpChecker = /// Tokenize an entire file, line by line member TokenizeFile: source:string -> FSharpTokenInfo [] [] +namespace FSharp.Compiler + +open System +open FSharp.Compiler.CodeAnalysis + /// Information about the compilation environment [] type public CompilerEnvironment = /// The default location of FSharp.Core.dll and fsc.exe based on the version of fsc.exe that is running - static member BinFolderOfDefaultFSharpCompiler : ?probePoint: string -> string option + static member BinFolderOfDefaultFSharpCompiler: ?probePoint: string -> string option -/// Information about the compilation environment -[] -module public CompilerEnvironment = /// These are the names of assemblies that should be referenced for .fs or .fsi files that /// are not associated with a project. - val DefaultReferencesForOrphanSources: assumeDotNetFramework: bool -> string list - /// Return the compilation defines that should be used when editing the given file. - val GetCompilationDefinesForEditing: parsingOptions: FSharpParsingOptions -> string list - /// Return true if this is a subcategory of error or warning message that the language service can emit - val IsCheckerSupportedSubcategory: string -> bool - -/// Information about the debugging environment -module public DebuggerEnvironment = - /// Return the language ID, which is the expression evaluator id that the - /// debugger will use. - val GetLanguageID : unit -> Guid + static member DefaultReferencesForOrphanSources: assumeDotNetFramework: bool -> string list + /// Return the compilation defines that should be used when editing the given file. + static member GetCompilationDefinesForEditing: parsingOptions: FSharpParsingOptions -> string list -/// A set of helpers related to naming of identifiers -module public PrettyNaming = + /// Return true if this is a subcategory of error or warning message that the language service can emit + static member IsCheckerSupportedSubcategory: string -> bool - val IsIdentifierPartCharacter : char -> bool - val IsLongIdentifierPartCharacter : char -> bool - val IsOperatorName : string -> bool - val GetLongNameFromString : string -> string list + /// Return the language ID, which is the expression evaluator id that the debugger will use. + static member GetDebuggerLanguageID: unit -> Guid - val FormatAndOtherOverloadsString : int -> string + /// A helpers for dealing with F# files. + static member IsScriptFile: string -> bool - /// A utility to help determine if an identifier needs to be quoted - val QuoteIdentifierIfNeeded : string -> string + /// Whether or not this file is compilable + static member IsCompilable: string -> bool - /// All the keywords in the F# language - val KeywordNames : string list + /// Whether or not this file should be a single-file project + static member MustBeSingleFileProject: string -> bool -/// A set of helpers for dealing with F# files. -module FSharpFileUtilities = - val isScriptFile : string -> bool \ No newline at end of file diff --git a/src/fsharp/symbols/Exprs.fs b/src/fsharp/symbols/Exprs.fs index 8a44e51d379..c1b456e0948 100644 --- a/src/fsharp/symbols/Exprs.fs +++ b/src/fsharp/symbols/Exprs.fs @@ -1,16 +1,15 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.Symbols open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Library open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Lib open FSharp.Compiler.Infos open FSharp.Compiler.QuotationTranslator -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TypedTreeOps @@ -78,7 +77,7 @@ module ExprTranslationImpl = member env.BindCurriedVals vsl = (env, vsl) ||> List.fold (fun env vs -> env.BindVals vs) - exception IgnoringPartOfQuotedTermWarning of string * Range.range + exception IgnoringPartOfQuotedTermWarning of string * range let wfail (msg, m: range) = failwith (msg + sprintf " at %s" (m.ToString())) @@ -110,7 +109,7 @@ type E = | UnionCaseSet of FSharpExpr * FSharpType * FSharpUnionCase * FSharpField * FSharpExpr | UnionCaseTag of FSharpExpr * FSharpType | UnionCaseTest of FSharpExpr * FSharpType * FSharpUnionCase - | TraitCall of FSharpType list * string * MemberFlags * FSharpType list * FSharpType list * FSharpExpr list + | TraitCall of FSharpType list * string * SynMemberFlags * FSharpType list * FSharpType list * FSharpExpr list | NewTuple of FSharpType * FSharpExpr list | TupleGet of FSharpType * int * FSharpExpr | Coerce of FSharpType * FSharpExpr @@ -135,10 +134,10 @@ type E = /// Used to represent the information at an object expression member and [] FSharpObjectExprOverride(sgn: FSharpAbstractSignature, gps: FSharpGenericParameter list, args: FSharpMemberOrFunctionOrValue list list, body: FSharpExpr) = - member __.Signature = sgn - member __.GenericParameters = gps - member __.CurriedParameterGroups = args - member __.Body = body + member _.Signature = sgn + member _.GenericParameters = gps + member _.CurriedParameterGroups = args + member _.Body = body /// The type of expressions provided through the compiler API. and [] FSharpExpr (cenv, f: (unit -> FSharpExpr) option, e: E, m: range, ty) = @@ -726,12 +725,14 @@ module FSharpExprConvert = let elemTy = tyOfExpr cenv.g arg let nullVal = mkNull m elemTy let op = mkCallNotEqualsOperator cenv.g m elemTy arg nullVal + let env = { env with suppressWitnesses=true } ConvExprPrim cenv env op | TOp.ILAsm ([ I_ldlen; AI_conv DT_I4 ], _), _, [arr] -> let arrayTy = tyOfExpr cenv.g arr let elemTy = destArrayTy cenv.g arrayTy let op = mkCallArrayLength cenv.g m elemTy arr + let env = { env with suppressWitnesses=true } ConvExprPrim cenv env op | TOp.ILAsm ([ I_newarr (ILArrayShape [(Some 0, None)], _)], _), [elemTy], xa -> @@ -778,8 +779,8 @@ module FSharpExprConvert = | TOp.ILAsm ([ ILConvertOp convertOp ], [TType_app (tcref,_)]), _, [arg] -> let ty = tyOfExpr cenv.g arg let op = - if tyconRefEq cenv.g tcref cenv.g.char_tcr - then mkCallToCharOperator cenv.g m ty arg + if tyconRefEq cenv.g tcref cenv.g.char_tcr then + mkCallToCharOperator cenv.g m ty arg else convertOp cenv.g m ty arg ConvExprPrim cenv env op @@ -1276,8 +1277,10 @@ module FSharpExprConvert = E.IfThenElse (E.TypeTest (tyR, eR) |> Mk cenv m cenv.g.bool_ty, acc, ConvDecisionTree cenv env dtreeRetTy dtree m) | _ -> let ty = tyOfExpr cenv.g e1 - let eq = mkCallEqualsOperator cenv.g m ty e1 (Expr.Const (Const.Zero, m, ty)) - let eqR = ConvExpr cenv env eq + let eqR = + let eq = mkCallEqualsOperator cenv.g m ty e1 (Expr.Const (Const.Zero, m, ty)) + let env = { env with suppressWitnesses = true } + ConvExpr cenv env eq E.IfThenElse (eqR, ConvDecisionTree cenv env dtreeRetTy dtree m, acc) | DecisionTreeTest.IsInst (_srcty, tgty) -> let e1R = ConvExpr cenv env e1 @@ -1311,13 +1314,13 @@ type FSharpAssemblyContents(cenv: SymbolEnv, mimpls: TypedImplFile list) = new (tcGlobals, thisCcu, thisCcuType, tcImports, mimpls) = FSharpAssemblyContents(SymbolEnv(tcGlobals, thisCcu, thisCcuType, tcImports), mimpls) - member __.ImplementationFiles = + member _.ImplementationFiles = [ for mimpl in mimpls -> FSharpImplementationFileContents(cenv, mimpl)] and FSharpImplementationFileDeclaration = - | Entity of FSharpEntity * FSharpImplementationFileDeclaration list - | MemberOrFunctionOrValue of FSharpMemberOrFunctionOrValue * FSharpMemberOrFunctionOrValue list list * FSharpExpr - | InitAction of FSharpExpr + | Entity of entity: FSharpEntity * declarations: FSharpImplementationFileDeclaration list + | MemberOrFunctionOrValue of value: FSharpMemberOrFunctionOrValue * curriedArgs: FSharpMemberOrFunctionOrValue list list * body: FSharpExpr + | InitAction of action: FSharpExpr and FSharpImplementationFileContents(cenv, mimpl) = let (TImplFile (qname, _pragmas, ModuleOrNamespaceExprWithSig(_, mdef, _), hasExplicitEntryPoint, isScript, _anonRecdTypes)) = mimpl @@ -1357,59 +1360,105 @@ and FSharpImplementationFileContents(cenv, mimpl) = | TMDefs mdefs -> [ for mdef in mdefs do yield! getDecls mdef ] - member __.QualifiedName = qname.Text - member __.FileName = qname.Range.FileName - member __.Declarations = getDecls mdef - member __.HasExplicitEntryPoint = hasExplicitEntryPoint - member __.IsScript = isScript + member _.QualifiedName = qname.Text + member _.FileName = qname.Range.FileName + member _.Declarations = getDecls mdef + member _.HasExplicitEntryPoint = hasExplicitEntryPoint + member _.IsScript = isScript -module BasicPatterns = +module FSharpExprPatterns = let (|Value|_|) (e: FSharpExpr) = match e.E with E.Value v -> Some v | _ -> None + let (|Const|_|) (e: FSharpExpr) = match e.E with E.Const (v, ty) -> Some (v, ty) | _ -> None + let (|TypeLambda|_|) (e: FSharpExpr) = match e.E with E.TypeLambda (v, e) -> Some (v, e) | _ -> None + let (|Lambda|_|) (e: FSharpExpr) = match e.E with E.Lambda (v, e) -> Some (v, e) | _ -> None + let (|Application|_|) (e: FSharpExpr) = match e.E with E.Application (f, tys, e) -> Some (f, tys, e) | _ -> None + let (|IfThenElse|_|) (e: FSharpExpr) = match e.E with E.IfThenElse (e1, e2, e3) -> Some (e1, e2, e3) | _ -> None + let (|Let|_|) (e: FSharpExpr) = match e.E with E.Let ((v, e), b) -> Some ((v, e), b) | _ -> None + let (|LetRec|_|) (e: FSharpExpr) = match e.E with E.LetRec (ves, b) -> Some (ves, b) | _ -> None + let (|NewRecord|_|) (e: FSharpExpr) = match e.E with E.NewRecord (ty, es) -> Some (ty, es) | _ -> None + let (|NewAnonRecord|_|) (e: FSharpExpr) = match e.E with E.NewAnonRecord (ty, es) -> Some (ty, es) | _ -> None + let (|NewUnionCase|_|) (e: FSharpExpr) = match e.E with E.NewUnionCase (e, tys, es) -> Some (e, tys, es) | _ -> None + let (|NewTuple|_|) (e: FSharpExpr) = match e.E with E.NewTuple (ty, es) -> Some (ty, es) | _ -> None + let (|TupleGet|_|) (e: FSharpExpr) = match e.E with E.TupleGet (ty, n, es) -> Some (ty, n, es) | _ -> None + let (|Call|_|) (e: FSharpExpr) = match e.E with E.Call (a, b, c, d, _e, f) -> Some (a, b, c, d, f) | _ -> None + let (|CallWithWitnesses|_|) (e: FSharpExpr) = match e.E with E.Call (a, b, c, d, e, f) -> Some (a, b, c, d, e, f) | _ -> None + let (|NewObject|_|) (e: FSharpExpr) = match e.E with E.NewObject (a, b, c) -> Some (a, b, c) | _ -> None + let (|FSharpFieldGet|_|) (e: FSharpExpr) = match e.E with E.FSharpFieldGet (a, b, c) -> Some (a, b, c) | _ -> None + let (|AnonRecordGet|_|) (e: FSharpExpr) = match e.E with E.AnonRecordGet (a, b, c) -> Some (a, b, c) | _ -> None + let (|FSharpFieldSet|_|) (e: FSharpExpr) = match e.E with E.FSharpFieldSet (a, b, c, d) -> Some (a, b, c, d) | _ -> None + let (|UnionCaseGet|_|) (e: FSharpExpr) = match e.E with E.UnionCaseGet (a, b, c, d) -> Some (a, b, c, d) | _ -> None + let (|UnionCaseTag|_|) (e: FSharpExpr) = match e.E with E.UnionCaseTag (a, b) -> Some (a, b) | _ -> None + let (|UnionCaseTest|_|) (e: FSharpExpr) = match e.E with E.UnionCaseTest (a, b, c) -> Some (a, b, c) | _ -> None + let (|NewArray|_|) (e: FSharpExpr) = match e.E with E.NewArray (a, b) -> Some (a, b) | _ -> None + let (|Coerce|_|) (e: FSharpExpr) = match e.E with E.Coerce (a, b) -> Some (a, b) | _ -> None + let (|Quote|_|) (e: FSharpExpr) = match e.E with E.Quote a -> Some a | _ -> None + let (|TypeTest|_|) (e: FSharpExpr) = match e.E with E.TypeTest (a, b) -> Some (a, b) | _ -> None + let (|Sequential|_|) (e: FSharpExpr) = match e.E with E.Sequential (a, b) -> Some (a, b) | _ -> None + let (|FastIntegerForLoop|_|) (e: FSharpExpr) = match e.E with E.FastIntegerForLoop (a, b, c, d) -> Some (a, b, c, d) | _ -> None + let (|WhileLoop|_|) (e: FSharpExpr) = match e.E with E.WhileLoop (a, b) -> Some (a, b) | _ -> None + let (|TryFinally|_|) (e: FSharpExpr) = match e.E with E.TryFinally (a, b) -> Some (a, b) | _ -> None + let (|TryWith|_|) (e: FSharpExpr) = match e.E with E.TryWith (a, b, c, d, e) -> Some (a, b, c, d, e) | _ -> None + let (|NewDelegate|_|) (e: FSharpExpr) = match e.E with E.NewDelegate (ty, e) -> Some (ty, e) | _ -> None + let (|DefaultValue|_|) (e: FSharpExpr) = match e.E with E.DefaultValue ty -> Some ty | _ -> None + let (|AddressSet|_|) (e: FSharpExpr) = match e.E with E.AddressSet (a, b) -> Some (a, b) | _ -> None + let (|ValueSet|_|) (e: FSharpExpr) = match e.E with E.ValueSet (a, b) -> Some (a, b) | _ -> None + let (|AddressOf|_|) (e: FSharpExpr) = match e.E with E.AddressOf a -> Some a | _ -> None + let (|ThisValue|_|) (e: FSharpExpr) = match e.E with E.ThisValue a -> Some a | _ -> None + let (|BaseValue|_|) (e: FSharpExpr) = match e.E with E.BaseValue a -> Some a | _ -> None + let (|ILAsm|_|) (e: FSharpExpr) = match e.E with E.ILAsm (a, b, c) -> Some (a, b, c) | _ -> None + let (|ILFieldGet|_|) (e: FSharpExpr) = match e.E with E.ILFieldGet (a, b, c) -> Some (a, b, c) | _ -> None + let (|ILFieldSet|_|) (e: FSharpExpr) = match e.E with E.ILFieldSet (a, b, c, d) -> Some (a, b, c, d) | _ -> None + let (|ObjectExpr|_|) (e: FSharpExpr) = match e.E with E.ObjectExpr (a, b, c, d) -> Some (a, b, c, d) | _ -> None + let (|DecisionTree|_|) (e: FSharpExpr) = match e.E with E.DecisionTree (a, b) -> Some (a, b) | _ -> None + let (|DecisionTreeSuccess|_|) (e: FSharpExpr) = match e.E with E.DecisionTreeSuccess (a, b) -> Some (a, b) | _ -> None + let (|UnionCaseSet|_|) (e: FSharpExpr) = match e.E with E.UnionCaseSet (a, b, c, d, e) -> Some (a, b, c, d, e) | _ -> None + let (|TraitCall|_|) (e: FSharpExpr) = match e.E with E.TraitCall (a, b, c, d, e, f) -> Some (a, b, c, d, e, f) | _ -> None + let (|WitnessArg|_|) (e: FSharpExpr) = match e.E with E.WitnessArg n -> Some n | _ -> None diff --git a/src/fsharp/symbols/Exprs.fsi b/src/fsharp/symbols/Exprs.fsi index c585ab77c4b..30e1ecad8d9 100644 --- a/src/fsharp/symbols/Exprs.fsi +++ b/src/fsharp/symbols/Exprs.fsi @@ -1,24 +1,24 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace rec FSharp.Compiler.SourceCodeServices +namespace rec FSharp.Compiler.Symbols open FSharp.Compiler.CompilerImports -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax open FSharp.Compiler.TcGlobals +open FSharp.Compiler.Text open FSharp.Compiler.TypedTree /// Represents the definitional contents of an assembly, as seen by the F# language type public FSharpAssemblyContents = - internal new : tcGlobals: TcGlobals * thisCcu: CcuThunk * thisCcuType: ModuleOrNamespaceType option * tcImports: TcImports * mimpls: TypedImplFile list -> FSharpAssemblyContents + internal new: tcGlobals: TcGlobals * thisCcu: CcuThunk * thisCcuType: ModuleOrNamespaceType option * tcImports: TcImports * mimpls: TypedImplFile list -> FSharpAssemblyContents /// The contents of the implementation files in the assembly member ImplementationFiles: FSharpImplementationFileContents list /// Represents the definitional contents of a single file or fragment in an assembly, as seen by the F# language type public FSharpImplementationFileContents = - internal new : cenv: SymbolEnv * mimpl: TypedImplFile -> FSharpImplementationFileContents + internal new: cenv: SymbolEnv * mimpl: TypedImplFile -> FSharpImplementationFileContents /// The qualified name acts to fully-qualify module specifications and implementations member QualifiedName: string @@ -27,7 +27,7 @@ type public FSharpImplementationFileContents = member FileName: string /// Get the declarations that make up this implementation file - member Declarations : FSharpImplementationFileDeclaration list + member Declarations: FSharpImplementationFileDeclaration list /// Indicates if the implementation file is a script member IsScript: bool @@ -36,16 +36,17 @@ type public FSharpImplementationFileContents = member HasExplicitEntryPoint: bool /// Represents a declaration in an implementation file, as seen by the F# language -and public FSharpImplementationFileDeclaration = +[] +type public FSharpImplementationFileDeclaration = /// Represents the declaration of a type - | Entity of FSharpEntity * FSharpImplementationFileDeclaration list + | Entity of entity: FSharpEntity * declarations: FSharpImplementationFileDeclaration list /// Represents the declaration of a member, function or value, including the parameters and body of the member - | MemberOrFunctionOrValue of FSharpMemberOrFunctionOrValue * FSharpMemberOrFunctionOrValue list list * FSharpExpr + | MemberOrFunctionOrValue of value: FSharpMemberOrFunctionOrValue * curriedArgs: FSharpMemberOrFunctionOrValue list list * body: FSharpExpr /// Represents the declaration of a static initialization action - | InitAction of FSharpExpr + | InitAction of action: FSharpExpr /// Represents a checked and reduced expression, as seen by the F# language. The active patterns /// in 'FSharp.Compiler.SourceCodeServices' can be used to analyze information about the expression. @@ -55,172 +56,173 @@ and public FSharpImplementationFileDeclaration = [] type public FSharpExpr = /// The range of the expression - member Range : range + member Range: range /// The type of the expression - member Type : FSharpType + member Type: FSharpType /// The immediate sub-expressions of the expression. - member ImmediateSubExpressions : FSharpExpr list + member ImmediateSubExpressions: FSharpExpr list /// Represents a checked method in an object expression, as seen by the F# language. -and [] public FSharpObjectExprOverride = +[] +type public FSharpObjectExprOverride = /// The signature of the implemented abstract slot - member Signature : FSharpAbstractSignature + member Signature: FSharpAbstractSignature /// The generic parameters of the method - member GenericParameters : FSharpGenericParameter list + member GenericParameters: FSharpGenericParameter list /// The parameters of the method - member CurriedParameterGroups : FSharpMemberOrFunctionOrValue list list + member CurriedParameterGroups: FSharpMemberOrFunctionOrValue list list /// The expression that forms the body of the method - member Body : FSharpExpr + member Body: FSharpExpr /// A collection of active patterns to analyze expressions -module public BasicPatterns = +module public FSharpExprPatterns = /// Matches expressions which are uses of values - val (|Value|_|) : FSharpExpr -> FSharpMemberOrFunctionOrValue option + val (|Value|_|): FSharpExpr -> FSharpMemberOrFunctionOrValue option /// Matches expressions which are the application of function values - val (|Application|_|) : FSharpExpr -> (FSharpExpr * FSharpType list * FSharpExpr list) option + val (|Application|_|): FSharpExpr -> (FSharpExpr * FSharpType list * FSharpExpr list) option /// Matches expressions which are type abstractions - val (|TypeLambda|_|) : FSharpExpr -> (FSharpGenericParameter list * FSharpExpr) option + val (|TypeLambda|_|): FSharpExpr -> (FSharpGenericParameter list * FSharpExpr) option /// Matches expressions with a decision expression, each branch of which ends in DecisionTreeSuccess passing control and values to one of the targets. - val (|DecisionTree|_|) : FSharpExpr -> (FSharpExpr * (FSharpMemberOrFunctionOrValue list * FSharpExpr) list) option + val (|DecisionTree|_|): FSharpExpr -> (FSharpExpr * (FSharpMemberOrFunctionOrValue list * FSharpExpr) list) option /// Special expressions at the end of a conditional decision structure in the decision expression node of a DecisionTree . /// The given expressions are passed as values to the decision tree target. - val (|DecisionTreeSuccess|_|) : FSharpExpr -> (int * FSharpExpr list) option + val (|DecisionTreeSuccess|_|): FSharpExpr -> (int * FSharpExpr list) option /// Matches expressions which are lambda abstractions - val (|Lambda|_|) : FSharpExpr -> (FSharpMemberOrFunctionOrValue * FSharpExpr) option + val (|Lambda|_|): FSharpExpr -> (FSharpMemberOrFunctionOrValue * FSharpExpr) option /// Matches expressions which are conditionals - val (|IfThenElse|_|) : FSharpExpr -> (FSharpExpr * FSharpExpr * FSharpExpr) option + val (|IfThenElse|_|): FSharpExpr -> (FSharpExpr * FSharpExpr * FSharpExpr) option /// Matches expressions which are let definitions - val (|Let|_|) : FSharpExpr -> ((FSharpMemberOrFunctionOrValue * FSharpExpr) * FSharpExpr) option + val (|Let|_|): FSharpExpr -> ((FSharpMemberOrFunctionOrValue * FSharpExpr) * FSharpExpr) option /// Matches expressions which are calls to members or module-defined functions. When calling curried functions and members the /// arguments are collapsed to a single collection of arguments, as done in the compiled version of these. - val (|Call|_|) : FSharpExpr -> (FSharpExpr option * FSharpMemberOrFunctionOrValue * FSharpType list * FSharpType list * FSharpExpr list) option + val (|Call|_|): FSharpExpr -> (FSharpExpr option * FSharpMemberOrFunctionOrValue * FSharpType list * FSharpType list * FSharpExpr list) option /// Like Call but also indicates witness arguments - val (|CallWithWitnesses|_|) : FSharpExpr -> (FSharpExpr option * FSharpMemberOrFunctionOrValue * FSharpType list * FSharpType list * FSharpExpr list * FSharpExpr list) option + val (|CallWithWitnesses|_|): FSharpExpr -> (FSharpExpr option * FSharpMemberOrFunctionOrValue * FSharpType list * FSharpType list * FSharpExpr list * FSharpExpr list) option /// Matches expressions which are calls to object constructors - val (|NewObject|_|) : FSharpExpr -> (FSharpMemberOrFunctionOrValue * FSharpType list * FSharpExpr list) option + val (|NewObject|_|): FSharpExpr -> (FSharpMemberOrFunctionOrValue * FSharpType list * FSharpExpr list) option /// Matches expressions which are uses of the 'this' value - val (|ThisValue|_|) : FSharpExpr -> FSharpType option + val (|ThisValue|_|): FSharpExpr -> FSharpType option /// Matches expressions which are uses of the 'base' value - val (|BaseValue|_|) : FSharpExpr -> FSharpType option + val (|BaseValue|_|): FSharpExpr -> FSharpType option /// Matches expressions which are quotation literals - val (|Quote|_|) : FSharpExpr -> FSharpExpr option + val (|Quote|_|): FSharpExpr -> FSharpExpr option /// Matches expressions which are let-rec definitions - val (|LetRec|_|) : FSharpExpr -> ((FSharpMemberOrFunctionOrValue * FSharpExpr) list * FSharpExpr) option + val (|LetRec|_|): FSharpExpr -> ((FSharpMemberOrFunctionOrValue * FSharpExpr) list * FSharpExpr) option /// Matches record expressions - val (|NewRecord|_|) : FSharpExpr -> (FSharpType * FSharpExpr list) option + val (|NewRecord|_|): FSharpExpr -> (FSharpType * FSharpExpr list) option /// Matches anonymous record expressions - val (|NewAnonRecord|_|) : FSharpExpr -> (FSharpType * FSharpExpr list) option + val (|NewAnonRecord|_|): FSharpExpr -> (FSharpType * FSharpExpr list) option /// Matches expressions getting a field from an anonymous record. The integer represents the /// index into the sorted fields of the anonymous record. - val (|AnonRecordGet|_|) : FSharpExpr -> (FSharpExpr * FSharpType * int) option + val (|AnonRecordGet|_|): FSharpExpr -> (FSharpExpr * FSharpType * int) option /// Matches expressions which get a field from a record or class - val (|FSharpFieldGet|_|) : FSharpExpr -> (FSharpExpr option * FSharpType * FSharpField) option + val (|FSharpFieldGet|_|): FSharpExpr -> (FSharpExpr option * FSharpType * FSharpField) option /// Matches expressions which set a field in a record or class - val (|FSharpFieldSet|_|) : FSharpExpr -> (FSharpExpr option * FSharpType * FSharpField * FSharpExpr) option + val (|FSharpFieldSet|_|): FSharpExpr -> (FSharpExpr option * FSharpType * FSharpField * FSharpExpr) option /// Matches expressions which create an object corresponding to a union case - val (|NewUnionCase|_|) : FSharpExpr -> (FSharpType * FSharpUnionCase * FSharpExpr list) option + val (|NewUnionCase|_|): FSharpExpr -> (FSharpType * FSharpUnionCase * FSharpExpr list) option /// Matches expressions which get a field from a union case - val (|UnionCaseGet|_|) : FSharpExpr -> (FSharpExpr * FSharpType * FSharpUnionCase * FSharpField) option + val (|UnionCaseGet|_|): FSharpExpr -> (FSharpExpr * FSharpType * FSharpUnionCase * FSharpField) option /// Matches expressions which set a field from a union case (only used in FSharp.Core itself) - val (|UnionCaseSet|_|) : FSharpExpr -> (FSharpExpr * FSharpType * FSharpUnionCase * FSharpField * FSharpExpr) option + val (|UnionCaseSet|_|): FSharpExpr -> (FSharpExpr * FSharpType * FSharpUnionCase * FSharpField * FSharpExpr) option /// Matches expressions which gets the tag for a union case - val (|UnionCaseTag|_|) : FSharpExpr -> (FSharpExpr * FSharpType) option + val (|UnionCaseTag|_|): FSharpExpr -> (FSharpExpr * FSharpType) option /// Matches expressions which test if an expression corresponds to a particular union case - val (|UnionCaseTest|_|) : FSharpExpr -> (FSharpExpr * FSharpType * FSharpUnionCase) option + val (|UnionCaseTest|_|): FSharpExpr -> (FSharpExpr * FSharpType * FSharpUnionCase) option /// Matches tuple expressions - val (|NewTuple|_|) : FSharpExpr -> (FSharpType * FSharpExpr list) option + val (|NewTuple|_|): FSharpExpr -> (FSharpType * FSharpExpr list) option /// Matches expressions which get a value from a tuple - val (|TupleGet|_|) : FSharpExpr -> (FSharpType * int * FSharpExpr) option + val (|TupleGet|_|): FSharpExpr -> (FSharpType * int * FSharpExpr) option /// Matches expressions which coerce the type of a value - val (|Coerce|_|) : FSharpExpr -> (FSharpType * FSharpExpr) option + val (|Coerce|_|): FSharpExpr -> (FSharpType * FSharpExpr) option /// Matches array expressions - val (|NewArray|_|) : FSharpExpr -> (FSharpType * FSharpExpr list) option + val (|NewArray|_|): FSharpExpr -> (FSharpType * FSharpExpr list) option /// Matches expressions which test the runtime type of a value - val (|TypeTest|_|) : FSharpExpr -> (FSharpType * FSharpExpr) option + val (|TypeTest|_|): FSharpExpr -> (FSharpType * FSharpExpr) option /// Matches expressions which set the contents of an address - val (|AddressSet|_|) : FSharpExpr -> (FSharpExpr * FSharpExpr) option + val (|AddressSet|_|): FSharpExpr -> (FSharpExpr * FSharpExpr) option /// Matches expressions which set the contents of a mutable variable - val (|ValueSet|_|) : FSharpExpr -> (FSharpMemberOrFunctionOrValue * FSharpExpr) option + val (|ValueSet|_|): FSharpExpr -> (FSharpMemberOrFunctionOrValue * FSharpExpr) option /// Matches default-value expressions, including null expressions - val (|DefaultValue|_|) : FSharpExpr -> FSharpType option + val (|DefaultValue|_|): FSharpExpr -> FSharpType option /// Matches constant expressions, including signed and unsigned integers, strings, characters, booleans, arrays /// of bytes and arrays of unit16. - val (|Const|_|) : FSharpExpr -> (obj * FSharpType) option + val (|Const|_|): FSharpExpr -> (obj * FSharpType) option /// Matches expressions which take the address of a location - val (|AddressOf|_|) : FSharpExpr -> FSharpExpr option + val (|AddressOf|_|): FSharpExpr -> FSharpExpr option /// Matches sequential expressions - val (|Sequential|_|) : FSharpExpr -> (FSharpExpr * FSharpExpr) option + val (|Sequential|_|): FSharpExpr -> (FSharpExpr * FSharpExpr) option /// Matches fast-integer loops (up or down) - val (|FastIntegerForLoop|_|) : FSharpExpr -> (FSharpExpr * FSharpExpr * FSharpExpr * bool) option + val (|FastIntegerForLoop|_|): FSharpExpr -> (FSharpExpr * FSharpExpr * FSharpExpr * bool) option /// Matches while loops - val (|WhileLoop|_|) : FSharpExpr -> (FSharpExpr * FSharpExpr) option + val (|WhileLoop|_|): FSharpExpr -> (FSharpExpr * FSharpExpr) option /// Matches try/finally expressions - val (|TryFinally|_|) : FSharpExpr -> (FSharpExpr * FSharpExpr) option + val (|TryFinally|_|): FSharpExpr -> (FSharpExpr * FSharpExpr) option /// Matches try/with expressions - val (|TryWith|_|) : FSharpExpr -> (FSharpExpr * FSharpMemberOrFunctionOrValue * FSharpExpr * FSharpMemberOrFunctionOrValue * FSharpExpr) option + val (|TryWith|_|): FSharpExpr -> (FSharpExpr * FSharpMemberOrFunctionOrValue * FSharpExpr * FSharpMemberOrFunctionOrValue * FSharpExpr) option /// Matches expressions which create an instance of a delegate type - val (|NewDelegate|_|) : FSharpExpr -> (FSharpType * FSharpExpr) option + val (|NewDelegate|_|): FSharpExpr -> (FSharpType * FSharpExpr) option /// Matches expressions which are IL assembly code - val (|ILAsm|_|) : FSharpExpr -> (string * FSharpType list * FSharpExpr list) option + val (|ILAsm|_|): FSharpExpr -> (string * FSharpType list * FSharpExpr list) option /// Matches expressions which fetch a field from a .NET type - val (|ILFieldGet|_|) : FSharpExpr -> (FSharpExpr option * FSharpType * string) option + val (|ILFieldGet|_|): FSharpExpr -> (FSharpExpr option * FSharpType * string) option /// Matches expressions which set a field in a .NET type - val (|ILFieldSet|_|) : FSharpExpr -> (FSharpExpr option * FSharpType * string * FSharpExpr) option + val (|ILFieldSet|_|): FSharpExpr -> (FSharpExpr option * FSharpType * string * FSharpExpr) option /// Matches object expressions, returning the base type, the base call, the overrides and the interface implementations - val (|ObjectExpr|_|) : FSharpExpr -> (FSharpType * FSharpExpr * FSharpObjectExprOverride list * (FSharpType * FSharpObjectExprOverride list) list) option + val (|ObjectExpr|_|): FSharpExpr -> (FSharpType * FSharpExpr * FSharpObjectExprOverride list * (FSharpType * FSharpObjectExprOverride list) list) option /// Matches expressions for an unresolved call to a trait - val (|TraitCall|_|) : FSharpExpr -> (FSharpType list * string * MemberFlags * FSharpType list * FSharpType list * FSharpExpr list) option + val (|TraitCall|_|): FSharpExpr -> (FSharpType list * string * SynMemberFlags * FSharpType list * FSharpType list * FSharpExpr list) option /// Indicates a witness argument index from the witness arguments supplied to the enclosing method - val (|WitnessArg|_|) : FSharpExpr -> int option + val (|WitnessArg|_|): FSharpExpr -> int option diff --git a/src/fsharp/symbols/SymbolHelpers.fs b/src/fsharp/symbols/SymbolHelpers.fs index 0548770d56e..82a6a84f0c6 100644 --- a/src/fsharp/symbols/SymbolHelpers.fs +++ b/src/fsharp/symbols/SymbolHelpers.fs @@ -5,102 +5,96 @@ // type checking and intellisense-like environment-reporting. //-------------------------------------------------------------------------- -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.Diagnostics open System -open System.IO + +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras open FSharp.Core.Printf open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Diagnostics - -open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.CompilerDiagnostics +open FSharp.Compiler.Diagnostics open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.InfoReader -open FSharp.Compiler.Infos -open FSharp.Compiler.Layout -open FSharp.Compiler.Layout.TaggedTextOps -open FSharp.Compiler.Lib -open FSharp.Compiler.NameResolution -open FSharp.Compiler.PrettyNaming -open FSharp.Compiler.Range -open FSharp.Compiler.TypedTree -open FSharp.Compiler.TypedTreeBasics -open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.XmlDoc - -module EnvMisc2 = - let maxMembers = GetEnvInteger "FCS_MaxMembersInQuickInfo" 10 - -//---------------------------------------------------------------------------- -// Object model for diagnostics - -[] -type FSharpErrorSeverity = - | Warning - | Error +open FSharp.Compiler.Xml +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Position +open FSharp.Compiler.Text.Range -module FSharpErrorInfo = - let [] ObsoleteMessage = "Use FSharpErrorInfo.Range. This API will be removed in a future update." - -type FSharpErrorInfo(m: range, severity: FSharpErrorSeverity, message: string, subcategory: string, errorNum: int) = +type FSharpDiagnostic(m: range, severity: FSharpDiagnosticSeverity, message: string, subcategory: string, errorNum: int, numberPrefix: string) = member _.Range = m + member _.Severity = severity + member _.Message = message + member _.Subcategory = subcategory + member _.ErrorNumber = errorNum - [] member _.Start = m.Start - [] member _.End = m.End + member _.ErrorNumberPrefix = numberPrefix - [] member _.StartLine = Line.toZ m.Start.Line - [] member _.StartLineAlternate = m.Start.Line - [] member _.EndLine = Line.toZ m.End.Line - [] member _.EndLineAlternate = m.End.Line - [] member _.StartColumn = m.Start.Column - [] member _.EndColumn = m.End.Column - [] member _.FileName = m.FileName + member _.ErrorNumberText = numberPrefix + errorNum.ToString("0000") + + member _.Start = m.Start + + member _.End = m.End + + member _.StartLine = m.Start.Line + + member _.EndLine = m.End.Line + + member _.StartColumn = m.Start.Column + + member _.EndColumn = m.End.Column + + member _.FileName = m.FileName member _.WithStart newStart = let m = mkFileIndexRange m.FileIndex newStart m.End - FSharpErrorInfo(m, severity, message, subcategory, errorNum) + FSharpDiagnostic(m, severity, message, subcategory, errorNum, numberPrefix) member _.WithEnd newEnd = let m = mkFileIndexRange m.FileIndex m.Start newEnd - FSharpErrorInfo(m, severity, message, subcategory, errorNum) + FSharpDiagnostic(m, severity, message, subcategory, errorNum, numberPrefix) override _.ToString() = let fileName = m.FileName let s = m.Start let e = m.End - let severity = if severity=FSharpErrorSeverity.Warning then "warning" else "error" + let severity = if severity=FSharpDiagnosticSeverity.Warning then "warning" else "error" sprintf "%s (%d,%d)-(%d,%d) %s %s %s" fileName s.Line (s.Column + 1) e.Line (e.Column + 1) subcategory severity message /// Decompose a warning or error into parts: position, severity, message, error number - static member CreateFromException(exn, isError, fallbackRange: range, suggestNames: bool) = + static member CreateFromException(exn, severity, fallbackRange: range, suggestNames: bool) = let m = match GetRangeOfDiagnostic exn with Some m -> m | None -> fallbackRange - let severity = if isError then FSharpErrorSeverity.Error else FSharpErrorSeverity.Warning let msg = bufs (fun buf -> OutputPhasedDiagnostic buf exn false suggestNames) let errorNum = GetDiagnosticNumber exn - FSharpErrorInfo(m, severity, msg, exn.Subcategory(), errorNum) + FSharpDiagnostic(m, severity, msg, exn.Subcategory(), errorNum, "FS") /// Decompose a warning or error into parts: position, severity, message, error number - static member CreateFromExceptionAndAdjustEof(exn, isError, fallbackRange: range, (linesCount: int, lastLength: int), suggestNames: bool) = - let r = FSharpErrorInfo.CreateFromException(exn, isError, fallbackRange, suggestNames) + static member CreateFromExceptionAndAdjustEof(exn, severity, fallbackRange: range, (linesCount: int, lastLength: int), suggestNames: bool) = + let r = FSharpDiagnostic.CreateFromException(exn, severity, fallbackRange, suggestNames) // Adjust to make sure that errors reported at Eof are shown at the linesCount - let startline, schange = min (r.Range.StartLine, false) (linesCount, true) - let endline, echange = min (r.Range.EndLine, false) (linesCount, true) + let startline, schange = min (Line.toZ r.Range.StartLine, false) (linesCount, true) + let endline, echange = min (Line.toZ r.Range.EndLine, false) (linesCount, true) if not (schange || echange) then r else let r = if schange then r.WithStart(mkPos startline lastLength) else r - if echange then r.WithEnd(mkPos endline (1 + lastLength)) else r + if echange then r.WithEnd(mkPos endline (1 + lastLength)) else r + + static member NewlineifyErrorString(message) = ErrorLogger.NewlineifyErrorString(message) + static member NormalizeErrorString(text) = ErrorLogger.NormalizeErrorString(text) + static member Create(severity: FSharpDiagnosticSeverity, message: string, number: int, range: range, ?numberPrefix: string, ?subcategory: string) = + let subcategory = defaultArg subcategory BuildPhaseSubcategory.TypeCheck + let numberPrefix = defaultArg numberPrefix "FS" + FSharpDiagnostic(range, severity, message, subcategory, number, numberPrefix) + /// Use to reset error and warning handlers [] type ErrorScope() = @@ -110,16 +104,19 @@ type ErrorScope() = let unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _oldLogger -> { new ErrorLogger("ErrorScope") with - member x.DiagnosticSink(exn, isError) = - let err = FSharpErrorInfo.CreateFromException(exn, isError, range.Zero, false) + member x.DiagnosticSink(exn, severity) = + let err = FSharpDiagnostic.CreateFromException(exn, severity, range.Zero, false) errors <- err :: errors - if isError && firstError.IsNone then + if severity = FSharpDiagnosticSeverity.Error && firstError.IsNone then firstError <- Some err.Message member x.ErrorCount = errors.Length }) - member x.Errors = errors |> List.filter (fun error -> error.Severity = FSharpErrorSeverity.Error) - member x.Warnings = errors |> List.filter (fun error -> error.Severity = FSharpErrorSeverity.Warning) + member x.Errors = errors |> List.filter (fun error -> error.Severity = FSharpDiagnosticSeverity.Error) + + member x.Warnings = errors |> List.filter (fun error -> error.Severity = FSharpDiagnosticSeverity.Warning) + member x.Diagnostics = errors + member x.TryGetFirstErrorText() = match x.Errors with | error :: _ -> Some error.Message @@ -163,45 +160,36 @@ type ErrorScope() = | None -> err "" /// An error logger that capture errors, filtering them according to warning levels etc. -type internal CompilationErrorLogger (debugName: string, options: FSharpErrorSeverityOptions) = +type internal CompilationErrorLogger (debugName: string, options: FSharpDiagnosticOptions) = inherit ErrorLogger("CompilationErrorLogger("+debugName+")") let mutable errorCount = 0 let diagnostics = new ResizeArray<_>() - override x.DiagnosticSink(exn, isError) = - if isError || ReportWarningAsError options exn then - diagnostics.Add(exn, FSharpErrorSeverity.Error) + override x.DiagnosticSink(exn, severity) = + if severity = FSharpDiagnosticSeverity.Error || ReportWarningAsError options exn then + diagnostics.Add(exn, FSharpDiagnosticSeverity.Error) errorCount <- errorCount + 1 - else if ReportWarning options exn then - diagnostics.Add(exn, FSharpErrorSeverity.Warning) + elif ReportWarning options exn then + diagnostics.Add(exn, FSharpDiagnosticSeverity.Warning) override x.ErrorCount = errorCount - member x.GetErrors() = diagnostics.ToArray() + member x.GetDiagnostics() = diagnostics.ToArray() +module DiagnosticHelpers = -/// This represents the global state established as each task function runs as part of the build. -/// -/// Use to reset error and warning handlers. -type CompilationGlobalsScope(errorLogger: ErrorLogger, phase: BuildPhase) = - let unwindEL = PushErrorLoggerPhaseUntilUnwind(fun _ -> errorLogger) - let unwindBP = PushThreadBuildPhaseUntilUnwind phase - // Return the disposable object that cleans up - interface IDisposable with - member d.Dispose() = - unwindBP.Dispose() - unwindEL.Dispose() - -module ErrorHelpers = - let ReportError (options, allErrors, mainInputFileName, fileInfo, (exn, sev), suggestNames) = - [ let isError = (sev = FSharpErrorSeverity.Error) || ReportWarningAsError options exn - if (isError || ReportWarning options exn) then + let ReportDiagnostic (options: FSharpDiagnosticOptions, allErrors, mainInputFileName, fileInfo, (exn, severity), suggestNames) = + [ let severity = + if (severity = FSharpDiagnosticSeverity.Error) then severity + elif ReportWarningAsError options exn then FSharpDiagnosticSeverity.Error + else severity + if (severity = FSharpDiagnosticSeverity.Error || ReportWarning options exn) then let oneError exn = [ // We use the first line of the file as a fallbackRange for reporting unexpected errors. // Not ideal, but it's hard to see what else to do. let fallbackRange = rangeN mainInputFileName 1 - let ei = FSharpErrorInfo.CreateFromExceptionAndAdjustEof (exn, isError, fallbackRange, fileInfo, suggestNames) + let ei = FSharpDiagnostic.CreateFromExceptionAndAdjustEof (exn, severity, fallbackRange, fileInfo, suggestNames) let fileName = ei.Range.FileName if allErrors || fileName = mainInputFileName || fileName = TcGlobals.DummyFileNameForRangesWithoutASpecificLocation then yield ei ] @@ -211,119 +199,51 @@ module ErrorHelpers = for e in relatedErrors do yield! oneError e ] - let CreateErrorInfos (options, allErrors, mainInputFileName, errors, suggestNames) = + let CreateDiagnostics (options, allErrors, mainInputFileName, errors, suggestNames) = let fileInfo = (Int32.MaxValue, Int32.MaxValue) - [| for (exn, isError) in errors do - yield! ReportError (options, allErrors, mainInputFileName, fileInfo, (exn, isError), suggestNames) |] + [| for (exn, severity) in errors do + yield! ReportDiagnostic (options, allErrors, mainInputFileName, fileInfo, (exn, severity), suggestNames) |] -//---------------------------------------------------------------------------- -// Object model for tooltips and helpers for their generation from items +namespace FSharp.Compiler.Symbols + +open System +open System.IO -type public Layout = Internal.Utilities.StructuredFormat.Layout +open Internal.Utilities.Library +open Internal.Utilities.Library.Extras +open FSharp.Core.Printf +open FSharp.Compiler +open FSharp.Compiler.AbstractIL.Diagnostics +open FSharp.Compiler.ErrorLogger +open FSharp.Compiler.InfoReader +open FSharp.Compiler.Infos +open FSharp.Compiler.IO +open FSharp.Compiler.NameResolution +open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Text.Layout +open FSharp.Compiler.Text.TaggedText +open FSharp.Compiler.Xml +open FSharp.Compiler.TypedTree +open FSharp.Compiler.TypedTreeBasics +open FSharp.Compiler.TypedTreeOps +open FSharp.Compiler.TcGlobals /// Describe a comment as either a block of text or a file+signature reference into an intellidoc file. [] type FSharpXmlDoc = | None - | Text of unprocessedLines: string[] * elaboratedXmlLines: string[] - | XmlDocFileSignature of (*File and Signature*) string * string + | FromXmlText of XmlDoc + | FromXmlFile of dllName: string * xmlSig: string -/// A single data tip display element -[] -type FSharpToolTipElementData<'T> = - { MainDescription: 'T - XmlDoc: FSharpXmlDoc - /// typar instantiation text, to go after xml - TypeMapping: 'T list - Remarks: 'T option - ParamName : string option } - static member Create(layout:'T, xml, ?typeMapping, ?paramName, ?remarks) = - { MainDescription=layout; XmlDoc=xml; TypeMapping=defaultArg typeMapping []; ParamName=paramName; Remarks=remarks } - -/// A single data tip display element -[] -type FSharpToolTipElement<'T> = - | None - - /// A single type, method, etc with comment. May represent a method overload group. - | Group of FSharpToolTipElementData<'T> list - - /// An error occurred formatting this element - | CompositionError of string - - static member Single(layout, xml, ?typeMapping, ?paramName, ?remarks) = - Group [ FSharpToolTipElementData<'T>.Create(layout, xml, ?typeMapping=typeMapping, ?paramName=paramName, ?remarks=remarks) ] - -/// A single data tip display element with where text is expressed as string -type public FSharpToolTipElement = FSharpToolTipElement - - -/// A single data tip display element with where text is expressed as -type public FSharpStructuredToolTipElement = FSharpToolTipElement - -/// Information for building a data tip box. -type FSharpToolTipText<'T> = - /// A list of data tip elements to display. - | FSharpToolTipText of FSharpToolTipElement<'T> list - -type public FSharpToolTipText = FSharpToolTipText -type public FSharpStructuredToolTipText = FSharpToolTipText - -module Tooltips = - let ToFSharpToolTipElement tooltip = - match tooltip with - | FSharpStructuredToolTipElement.None -> - FSharpToolTipElement.None - | FSharpStructuredToolTipElement.Group l -> - FSharpToolTipElement.Group(l |> List.map(fun x -> - { MainDescription=showL x.MainDescription - XmlDoc=x.XmlDoc - TypeMapping=List.map showL x.TypeMapping - ParamName=x.ParamName - Remarks= Option.map showL x.Remarks })) - | FSharpStructuredToolTipElement.CompositionError text -> - FSharpToolTipElement.CompositionError text - - let ToFSharpToolTipText (FSharpStructuredToolTipText.FSharpToolTipText text) = - FSharpToolTipText(List.map ToFSharpToolTipElement text) - - -[] -type CompletionItemKind = - | Field - | Property - | Method of isExtension : bool - | Event - | Argument - | CustomOperation - | Other - -type UnresolvedSymbol = - { FullName: string - DisplayName: string - Namespace: string[] } - -type CompletionItem = - { ItemWithInst: ItemWithInst - Kind: CompletionItemKind - IsOwnMember: bool - MinorPriority: int - Type: TyconRef option - Unresolved: UnresolvedSymbol option } - member x.Item = x.ItemWithInst.Item - +module EnvMisc2 = + let maxMembers = GetEnvInteger "FCS_MaxMembersInQuickInfo" 10 [] module internal SymbolHelpers = - let OutputFullName isListItem ppF fnF r = - // Only display full names in quick info, not declaration lists or method lists - if not isListItem then - match ppF r with - | None -> emptyL - | Some _ -> wordL (tagText (FSComp.SR.typeInfoFullName())) ^^ RightL.colon ^^ (fnF r) - else emptyL - + let rangeOfValRef preferFlag (vref: ValRef) = match preferFlag with | None -> vref.Range @@ -335,7 +255,6 @@ module internal SymbolHelpers = | None -> eref.Range | Some false -> eref.DefinitionRange | Some true -> eref.SigRange - let rangeOfPropInfo preferFlag (pinfo: PropInfo) = match pinfo with @@ -418,7 +337,6 @@ module internal SymbolHelpers = |> Option.bind ccuOfValRef |> Option.orElseWith (fun () -> minfo.DeclaringTyconRef |> computeCcuOfTyconRef) - let rec ccuOfItem (g: TcGlobals) d = match d with | Item.Value vref | Item.CustomBuilder (_, vref) -> ccuOfValRef vref @@ -488,150 +406,30 @@ module internal SymbolHelpers = yield ParamNameAndType(argInfo.Name, ty) ] | _ -> [] - // Find the name of the metadata file for this external definition - let metaInfoOfEntityRef (infoReader: InfoReader) m tcref = - let g = infoReader.g - match tcref with - | ERefLocal _ -> None - | ERefNonLocal nlref -> - // Generalize to get a formal signature - let formalTypars = tcref.Typars m - let formalTypeInst = generalizeTypars formalTypars - let ty = TType_app(tcref, formalTypeInst) - if isILAppTy g ty then - let formalTypeInfo = ILTypeInfo.FromType g ty - Some(nlref.Ccu.FileName, formalTypars, formalTypeInfo) - else None - let mkXmlComment thing = match thing with - | Some (Some fileName, xmlDocSig) -> FSharpXmlDoc.XmlDocFileSignature(fileName, xmlDocSig) + | Some (Some fileName, xmlDocSig) -> FSharpXmlDoc.FromXmlFile(fileName, xmlDocSig) | _ -> FSharpXmlDoc.None - let GetXmlDocSigOfEntityRef infoReader m (eref: EntityRef) = - if eref.IsILTycon then - match metaInfoOfEntityRef infoReader m eref with - | None -> None - | Some (ccuFileName, _, formalTypeInfo) -> Some(ccuFileName, "T:"+formalTypeInfo.ILTypeRef.FullName) - else - let ccuFileName = libFileOfEntityRef eref - let m = eref.Deref - if m.XmlDocSig = "" then - m.XmlDocSig <- XmlDocSigOfEntity eref - Some (ccuFileName, m.XmlDocSig) - - let GetXmlDocSigOfScopedValRef g (tcref: TyconRef) (vref: ValRef) = - let ccuFileName = libFileOfEntityRef tcref - let v = vref.Deref - if v.XmlDocSig = "" && v.HasDeclaringEntity then - let ap = buildAccessPath vref.TopValDeclaringEntity.CompilationPathOpt - let path = - if vref.TopValDeclaringEntity.IsModule then - let sep = if ap.Length > 0 then "." else "" - ap + sep + vref.TopValDeclaringEntity.CompiledName - else - ap - v.XmlDocSig <- XmlDocSigOfVal g false path v - Some (ccuFileName, v.XmlDocSig) - - let GetXmlDocSigOfRecdFieldInfo (rfinfo: RecdFieldInfo) = - let tcref = rfinfo.TyconRef - let ccuFileName = libFileOfEntityRef tcref - if rfinfo.RecdField.XmlDocSig = "" then - rfinfo.RecdField.XmlDocSig <- XmlDocSigOfProperty [tcref.CompiledRepresentationForNamedType.FullName; rfinfo.Name] - Some (ccuFileName, rfinfo.RecdField.XmlDocSig) - - let GetXmlDocSigOfUnionCaseInfo (ucinfo: UnionCaseInfo) = - let tcref = ucinfo.TyconRef - let ccuFileName = libFileOfEntityRef tcref - if ucinfo.UnionCase.XmlDocSig = "" then - ucinfo.UnionCase.XmlDocSig <- XmlDocSigOfUnionCase [tcref.CompiledRepresentationForNamedType.FullName; ucinfo.Name] - Some (ccuFileName, ucinfo.UnionCase.XmlDocSig) - - let GetXmlDocSigOfMethInfo (infoReader: InfoReader) m (minfo: MethInfo) = - let amap = infoReader.amap - match minfo with - | FSMeth (g, _, vref, _) -> - GetXmlDocSigOfScopedValRef g minfo.DeclaringTyconRef vref - | ILMeth (g, ilminfo, _) -> - let actualTypeName = ilminfo.DeclaringTyconRef.CompiledRepresentationForNamedType.FullName - let fmtps = ilminfo.FormalMethodTypars - let genArity = if fmtps.Length=0 then "" else sprintf "``%d" fmtps.Length - - match metaInfoOfEntityRef infoReader m ilminfo.DeclaringTyconRef with - | None -> None - | Some (ccuFileName, formalTypars, formalTypeInfo) -> - let filminfo = ILMethInfo(g, formalTypeInfo.ToType, None, ilminfo.RawMetadata, fmtps) - let args = - match ilminfo.IsILExtensionMethod with - | true -> filminfo.GetRawArgTypes(amap, m, minfo.FormalMethodInst) - | false -> filminfo.GetParamTypes(amap, m, minfo.FormalMethodInst) - - // http://msdn.microsoft.com/en-us/library/fsbx0t7x.aspx - // If the name of the item itself has periods, they are replaced by the hash-sign ('#'). - // It is assumed that no item has a hash-sign directly in its name. For example, the fully - // qualified name of the String constructor would be "System.String.#ctor". - let normalizedName = ilminfo.ILName.Replace(".", "#") - - Some (ccuFileName, "M:"+actualTypeName+"."+normalizedName+genArity+XmlDocArgsEnc g (formalTypars, fmtps) args) - | DefaultStructCtor _ -> None -#if !NO_EXTENSIONTYPING - | ProvidedMeth _ -> None -#endif - - let GetXmlDocSigOfValRef g (vref: ValRef) = - if not vref.IsLocalRef then - let ccuFileName = vref.nlr.Ccu.FileName - let v = vref.Deref - if v.XmlDocSig = "" && v.HasDeclaringEntity then - v.XmlDocSig <- XmlDocSigOfVal g false vref.TopValDeclaringEntity.CompiledRepresentationForNamedType.Name v - Some (ccuFileName, v.XmlDocSig) - else - None - - let GetXmlDocSigOfProp infoReader m (pinfo: PropInfo) = - let g = pinfo.TcGlobals - match pinfo with -#if !NO_EXTENSIONTYPING - | ProvidedProp _ -> None // No signature is possible. If an xml comment existed it would have been returned by PropInfo.XmlDoc in infos.fs -#endif - | FSProp _ as fspinfo -> - match fspinfo.ArbitraryValRef with - | None -> None - | Some vref -> GetXmlDocSigOfScopedValRef g pinfo.DeclaringTyconRef vref - | ILProp(ILPropInfo(_, pdef)) -> - match metaInfoOfEntityRef infoReader m pinfo.DeclaringTyconRef with - | Some (ccuFileName, formalTypars, formalTypeInfo) -> - let filpinfo = ILPropInfo(formalTypeInfo, pdef) - Some (ccuFileName, "P:"+formalTypeInfo.ILTypeRef.FullName+"."+pdef.Name+XmlDocArgsEnc g (formalTypars, []) (filpinfo.GetParamTypes(infoReader.amap, m))) - | _ -> None - - let GetXmlDocSigOfEvent infoReader m (einfo: EventInfo) = - match einfo with - | ILEvent _ -> - match metaInfoOfEntityRef infoReader m einfo.DeclaringTyconRef with - | Some (ccuFileName, _, formalTypeInfo) -> - Some(ccuFileName, "E:"+formalTypeInfo.ILTypeRef.FullName+"."+einfo.EventName) - | _ -> None - | _ -> None - - let GetXmlDocSigOfILFieldInfo infoReader m (finfo: ILFieldInfo) = - match metaInfoOfEntityRef infoReader m finfo.DeclaringTyconRef with - | Some (ccuFileName, _, formalTypeInfo) -> - Some(ccuFileName, "F:"+formalTypeInfo.ILTypeRef.FullName+"."+finfo.FieldName) - | _ -> None + let GetXmlDocFromLoader (infoReader: InfoReader) xmlDoc = + match xmlDoc with + | FSharpXmlDoc.None + | FSharpXmlDoc.FromXmlText _ -> xmlDoc + | FSharpXmlDoc.FromXmlFile(dllName, xmlSig) -> + TryFindXmlDocByAssemblyNameAndSig infoReader (Path.GetFileNameWithoutExtension dllName) xmlSig + |> Option.map FSharpXmlDoc.FromXmlText + |> Option.defaultValue xmlDoc /// This function gets the signature to pass to Visual Studio to use its lookup functions for .NET stuff. let GetXmlDocHelpSigOfItemForLookup (infoReader: InfoReader) m d = let g = infoReader.g - match d with - | Item.ActivePatternCase (APElemRef(_, vref, _)) + | Item.ActivePatternCase (APElemRef(_, vref, _, _)) | Item.Value vref | Item.CustomBuilder (_, vref) -> mkXmlComment (GetXmlDocSigOfValRef g vref) - | Item.UnionCase (ucinfo, _) -> mkXmlComment (GetXmlDocSigOfUnionCaseInfo ucinfo) + | Item.UnionCase (ucinfo, _) -> mkXmlComment (GetXmlDocSigOfUnionCaseRef ucinfo.UnionCaseRef) | Item.ExnCase tcref -> mkXmlComment (GetXmlDocSigOfEntityRef infoReader m tcref) - | Item.RecdField rfinfo -> mkXmlComment (GetXmlDocSigOfRecdFieldInfo rfinfo) + | Item.RecdField rfinfo -> mkXmlComment (GetXmlDocSigOfRecdFieldRef rfinfo.RecdFieldRef) | Item.NewDef _ -> FSharpXmlDoc.None | Item.ILField finfo -> mkXmlComment (GetXmlDocSigOfILFieldInfo infoReader m finfo) | Item.Types(_, ((TType_app(tcref, _)) :: _)) -> mkXmlComment (GetXmlDocSigOfEntityRef infoReader m tcref) @@ -648,18 +446,18 @@ module internal SymbolHelpers = match argContainer with | ArgumentContainer.Method minfo -> mkXmlComment (GetXmlDocSigOfMethInfo infoReader m minfo) | ArgumentContainer.Type tcref -> mkXmlComment (GetXmlDocSigOfEntityRef infoReader m tcref) - | Item.UnionCaseField (ucinfo, _) -> mkXmlComment (GetXmlDocSigOfUnionCaseInfo ucinfo) + | Item.UnionCaseField (ucinfo, _) -> mkXmlComment (GetXmlDocSigOfUnionCaseRef ucinfo.UnionCaseRef) | _ -> FSharpXmlDoc.None + |> GetXmlDocFromLoader infoReader + /// Produce an XmlComment with a signature or raw text, given the F# comment and the item let GetXmlCommentForItemAux (xmlDoc: XmlDoc option) (infoReader: InfoReader) m d = match xmlDoc with | Some xmlDoc when not xmlDoc.IsEmpty -> - FSharpXmlDoc.Text (xmlDoc.UnprocessedLines, xmlDoc.GetElaboratedXmlLines()) + FSharpXmlDoc.FromXmlText xmlDoc | _ -> GetXmlDocHelpSigOfItemForLookup infoReader m d - let mutable ToolTipFault = None - let GetXmlCommentForMethInfoItem infoReader m d (minfo: MethInfo) = if minfo.HasDirectXmlComment || minfo.XmlDoc.NonEmpty then GetXmlCommentForItemAux (Some minfo.XmlDoc) infoReader m d @@ -670,27 +468,6 @@ module internal SymbolHelpers = [ for (tp, ty) in prettyTyparInst -> wordL (tagTypeParameter ("'" + tp.DisplayName)) ^^ wordL (tagText (FSComp.SR.descriptionWordIs())) ^^ NicePrint.layoutType denv ty ] - /// Generate the structured tooltip for a method info - let FormatOverloadsToList (infoReader: InfoReader) m denv (item: ItemWithInst) minfos : FSharpStructuredToolTipElement = - ToolTipFault |> Option.iter (fun msg -> - let exn = Error((0, msg), range.Zero) - let ph = PhasedDiagnostic.Create(exn, BuildPhase.TypeCheck) - simulateError ph) - - let layouts = - [ for minfo in minfos -> - let prettyTyparInst, layout = NicePrint.prettyLayoutOfMethInfoFreeStyle infoReader.amap m denv item.TyparInst minfo - let xml = GetXmlCommentForMethInfoItem infoReader m item.Item minfo - let tpsL = FormatTyparMapping denv prettyTyparInst - FSharpToolTipElementData<_>.Create(layout, xml, tpsL) ] - - FSharpStructuredToolTipElement.Group layouts - - - let pubpathOfValRef (v: ValRef) = v.PublicPath - let pubpathOfTyconRef (x: TyconRef) = x.PublicPath - - let (|ItemWhereTypIsPreferred|_|) item = match item with | Item.DelegateCtor ty @@ -764,24 +541,24 @@ module internal SymbolHelpers = MethInfo.MethInfosUseIdenticalDefinitions minfo1 minfo2) | (Item.Value vref1 | Item.CustomBuilder (_, vref1)), (Item.Value vref2 | Item.CustomBuilder (_, vref2)) -> valRefEq g vref1 vref2 - | Item.ActivePatternCase(APElemRef(_apinfo1, vref1, idx1)), Item.ActivePatternCase(APElemRef(_apinfo2, vref2, idx2)) -> + | Item.ActivePatternCase(APElemRef(_apinfo1, vref1, idx1, _)), Item.ActivePatternCase(APElemRef(_apinfo2, vref2, idx2, _)) -> idx1 = idx2 && valRefEq g vref1 vref2 | Item.UnionCase(UnionCaseInfo(_, ur1), _), Item.UnionCase(UnionCaseInfo(_, ur2), _) -> g.unionCaseRefEq ur1 ur2 | Item.RecdField(RecdFieldInfo(_, RecdFieldRef(tcref1, n1))), Item.RecdField(RecdFieldInfo(_, RecdFieldRef(tcref2, n2))) -> (tyconRefEq g tcref1 tcref2) && (n1 = n2) // there is no direct function as in the previous case | Item.Property(_, pi1s), Item.Property(_, pi2s) -> - List.zip pi1s pi2s |> List.forall(fun (pi1, pi2) -> PropInfo.PropInfosUseIdenticalDefinitions pi1 pi2) + (pi1s, pi2s) ||> List.forall2 (fun pi1 pi2 -> PropInfo.PropInfosUseIdenticalDefinitions pi1 pi2) | Item.Event evt1, Item.Event evt2 -> EventInfo.EventInfosUseIdenticalDefinitions evt1 evt2 | Item.AnonRecdField(anon1, _, i1, _), Item.AnonRecdField(anon2, _, i2, _) -> anonInfoEquiv anon1 anon2 && i1 = i2 | Item.CtorGroup(_, meths1), Item.CtorGroup(_, meths2) -> - List.zip meths1 meths2 - |> List.forall (fun (minfo1, minfo2) -> MethInfo.MethInfosUseIdenticalDefinitions minfo1 minfo2) + (meths1, meths2) + ||> List.forall2 (fun minfo1 minfo2 -> MethInfo.MethInfosUseIdenticalDefinitions minfo1 minfo2) | Item.UnqualifiedType tcRefs1, Item.UnqualifiedType tcRefs2 -> - List.zip tcRefs1 tcRefs2 - |> List.forall (fun (tcRef1, tcRef2) -> tyconRefEq g tcRef1 tcRef2) + (tcRefs1, tcRefs2) + ||> List.forall2 (fun tcRef1 tcRef2 -> tyconRefEq g tcRef1 tcRef2) | Item.Types(_, [TType.TType_app(tcRef1, _)]), Item.UnqualifiedType([tcRef2]) -> tyconRefEq g tcRef1 tcRef2 | Item.UnqualifiedType([tcRef1]), Item.Types(_, [TType.TType_app(tcRef2, _)]) -> tyconRefEq g tcRef1 tcRef2 | _ -> false) @@ -805,7 +582,7 @@ module internal SymbolHelpers = | Item.MethodGroup(_, meths, _) -> meths |> List.fold (fun st a -> st + a.ComputeHashCode()) 0 | Item.CtorGroup(name, meths) -> name.GetHashCode() + (meths |> List.fold (fun st a -> st + a.ComputeHashCode()) 0) | (Item.Value vref | Item.CustomBuilder (_, vref)) -> hash vref.LogicalName - | Item.ActivePatternCase(APElemRef(_apinfo, vref, idx)) -> hash (vref.LogicalName, idx) + | Item.ActivePatternCase(APElemRef(_apinfo, vref, idx, _)) -> hash (vref.LogicalName, idx) | Item.ExnCase tcref -> hash tcref.LogicalName | Item.UnionCase(UnionCaseInfo(_, UnionCaseRef(tcref, n)), _) -> hash(tcref.Stamp, n) | Item.RecdField(RecdFieldInfo(_, RecdFieldRef(tcref, n))) -> hash(tcref.Stamp, n) @@ -815,14 +592,6 @@ module internal SymbolHelpers = | Item.UnqualifiedType(tcref :: _) -> hash tcref.LogicalName | _ -> failwith "unreachable") } - let CompletionItemDisplayPartialEquality g = - let itemComparer = ItemDisplayPartialEquality g - - { new IPartialEqualityComparer with - member x.InEqualityRelation item = itemComparer.InEqualityRelation item.Item - member x.Equals(item1, item2) = itemComparer.Equals(item1.Item, item2.Item) - member x.GetHashCode item = itemComparer.GetHashCode(item.Item) } - let ItemWithTypeDisplayPartialEquality g = let itemComparer = ItemDisplayPartialEquality g @@ -831,24 +600,11 @@ module internal SymbolHelpers = member x.Equals((item1, _), (item2, _)) = itemComparer.Equals(item1, item2) member x.GetHashCode ((item, _)) = itemComparer.GetHashCode item } - // Remove items containing the same module references - let RemoveDuplicateModuleRefs modrefs = - modrefs |> IPartialEqualityComparer.partialDistinctBy - { new IPartialEqualityComparer with - member x.InEqualityRelation _ = true - member x.Equals(item1, item2) = (fullDisplayTextOfModRef item1 = fullDisplayTextOfModRef item2) - member x.GetHashCode item = hash item.Stamp } - /// Remove all duplicate items let RemoveDuplicateItems g (items: ItemWithInst list) = if isNil items then items else items |> IPartialEqualityComparer.partialDistinctBy (IPartialEqualityComparer.On (fun item -> item.Item) (ItemDisplayPartialEquality g)) - /// Remove all duplicate items - let RemoveDuplicateCompletionItems g items = - if isNil items then items else - items |> IPartialEqualityComparer.partialDistinctBy (CompletionItemDisplayPartialEquality g) - let IsExplicitlySuppressed (g: TcGlobals) (item: Item) = // This may explore assemblies that are not in the reference set. // In this case just assume the item is not suppressed. @@ -874,13 +630,8 @@ module internal SymbolHelpers = let RemoveExplicitlySuppressed (g: TcGlobals) (items: ItemWithInst list) = items |> List.filter (fun item -> not (IsExplicitlySuppressed g item.Item)) - /// Filter types that are explicitly suppressed from the IntelliSense (such as uppercase "FSharpList", "Option", etc.) - let RemoveExplicitlySuppressedCompletionItems (g: TcGlobals) (items: CompletionItem list) = - items |> List.filter (fun item -> not (IsExplicitlySuppressed g item.Item)) - let SimplerDisplayEnv denv = - { denv with suppressInlineKeyword=true - shortConstraints=true + { denv with shortConstraints=true showConstraintTyparAnnotations=false abbreviateAdditionalConstraints=false suppressNestedTypes=true @@ -1008,6 +759,8 @@ module internal SymbolHelpers = | _ -> GetXmlCommentForItemAux None infoReader m item + |> GetXmlDocFromLoader infoReader + let IsAttribute (infoReader: InfoReader) item = try let g = infoReader.g @@ -1020,280 +773,6 @@ module internal SymbolHelpers = | _ -> false with _ -> false - /// Output the quick info information of a language item - let rec FormatItemDescriptionToToolTipElement isListItem (infoReader: InfoReader) m denv (item: ItemWithInst) = - let g = infoReader.g - let amap = infoReader.amap - let denv = SimplerDisplayEnv denv - let xml = GetXmlCommentForItem infoReader m item.Item - match item.Item with - | Item.ImplicitOp(_, { contents = Some(TraitConstraintSln.FSMethSln(_, vref, _)) }) -> - // operator with solution - FormatItemDescriptionToToolTipElement isListItem infoReader m denv { item with Item = Item.Value vref } - - | Item.Value vref | Item.CustomBuilder (_, vref) -> - let prettyTyparInst, resL = NicePrint.layoutQualifiedValOrMember denv item.TyparInst vref.Deref - let remarks = OutputFullName isListItem pubpathOfValRef fullDisplayTextOfValRefAsLayout vref - let tpsL = FormatTyparMapping denv prettyTyparInst - FSharpStructuredToolTipElement.Single(resL, xml, tpsL, remarks=remarks) - - // Union tags (constructors) - | Item.UnionCase(ucinfo, _) -> - let uc = ucinfo.UnionCase - let rty = generalizedTyconRef ucinfo.TyconRef - let recd = uc.RecdFields - let layout = - wordL (tagText (FSComp.SR.typeInfoUnionCase())) ^^ - NicePrint.layoutTyconRef denv ucinfo.TyconRef ^^ - sepL (tagPunctuation ".") ^^ - wordL (tagUnionCase (DecompileOpName uc.Id.idText) |> mkNav uc.DefinitionRange) ^^ - RightL.colon ^^ - (if List.isEmpty recd then emptyL else NicePrint.layoutUnionCases denv recd ^^ WordL.arrow) ^^ - NicePrint.layoutType denv rty - FSharpStructuredToolTipElement.Single (layout, xml) - - // Active pattern tag inside the declaration (result) - | Item.ActivePatternResult(apinfo, ty, idx, _) -> - let items = apinfo.ActiveTags - let layout = - wordL (tagText ((FSComp.SR.typeInfoActivePatternResult()))) ^^ - wordL (tagActivePatternResult (List.item idx items) |> mkNav apinfo.Range) ^^ - RightL.colon ^^ - NicePrint.layoutType denv ty - FSharpStructuredToolTipElement.Single (layout, xml) - - // Active pattern tags - | Item.ActivePatternCase apref -> - let v = apref.ActivePatternVal - // Format the type parameters to get e.g. ('a -> 'a) rather than ('?1234 -> '?1234) - let tau = v.TauType - // REVIEW: use _cxs here - let (prettyTyparInst, ptau), _cxs = PrettyTypes.PrettifyInstAndType denv.g (item.TyparInst, tau) - let remarks = OutputFullName isListItem pubpathOfValRef fullDisplayTextOfValRefAsLayout v - let layout = - wordL (tagText (FSComp.SR.typeInfoActiveRecognizer())) ^^ - wordL (tagActivePatternCase apref.Name |> mkNav v.DefinitionRange) ^^ - RightL.colon ^^ - NicePrint.layoutType denv ptau - - let tpsL = FormatTyparMapping denv prettyTyparInst - - FSharpStructuredToolTipElement.Single (layout, xml, tpsL, remarks=remarks) - - // F# exception names - | Item.ExnCase ecref -> - let layout = NicePrint.layoutExnDef denv ecref.Deref - let remarks= OutputFullName isListItem pubpathOfTyconRef fullDisplayTextOfExnRefAsLayout ecref - FSharpStructuredToolTipElement.Single (layout, xml, remarks=remarks) - - | Item.RecdField rfinfo when rfinfo.TyconRef.IsExceptionDecl -> - let ty, _ = PrettyTypes.PrettifyType g rfinfo.FieldType - let id = rfinfo.RecdField.Id - let layout = - wordL (tagText (FSComp.SR.typeInfoArgument())) ^^ - wordL (tagParameter id.idText) ^^ - RightL.colon ^^ - NicePrint.layoutType denv ty - FSharpStructuredToolTipElement.Single (layout, xml, paramName = id.idText) - - // F# record field names - | Item.RecdField rfinfo -> - let rfield = rfinfo.RecdField - let ty, _cxs = PrettyTypes.PrettifyType g rfinfo.FieldType - let layout = - NicePrint.layoutTyconRef denv rfinfo.TyconRef ^^ - SepL.dot ^^ - wordL (tagRecordField (DecompileOpName rfield.Name) |> mkNav rfield.DefinitionRange) ^^ - RightL.colon ^^ - NicePrint.layoutType denv ty ^^ - ( - match rfinfo.LiteralValue with - | None -> emptyL - | Some lit -> try WordL.equals ^^ NicePrint.layoutConst denv.g ty lit with _ -> emptyL - ) - FSharpStructuredToolTipElement.Single (layout, xml) - - | Item.UnionCaseField (ucinfo, fieldIndex) -> - let rfield = ucinfo.UnionCase.GetFieldByIndex(fieldIndex) - let fieldTy, _ = PrettyTypes.PrettifyType g rfield.rfield_type - let id = rfield.Id - let layout = - wordL (tagText (FSComp.SR.typeInfoArgument())) ^^ - wordL (tagParameter id.idText) ^^ - RightL.colon ^^ - NicePrint.layoutType denv fieldTy - FSharpStructuredToolTipElement.Single (layout, xml, paramName = id.idText) - - // Not used - | Item.NewDef id -> - let layout = - wordL (tagText (FSComp.SR.typeInfoPatternVariable())) ^^ - wordL (tagUnknownEntity id.idText) - FSharpStructuredToolTipElement.Single (layout, xml) - - // .NET fields - | Item.ILField finfo -> - let layout = - wordL (tagText (FSComp.SR.typeInfoField())) ^^ - NicePrint.layoutType denv finfo.ApparentEnclosingAppType ^^ - SepL.dot ^^ - wordL (tagField finfo.FieldName) ^^ - RightL.colon ^^ - NicePrint.layoutType denv (finfo.FieldType(amap, m)) ^^ - ( - match finfo.LiteralValue with - | None -> emptyL - | Some v -> - WordL.equals ^^ - try NicePrint.layoutConst denv.g (finfo.FieldType(infoReader.amap, m)) (CheckExpressions.TcFieldInit m v) with _ -> emptyL - ) - FSharpStructuredToolTipElement.Single (layout, xml) - - // .NET events - | Item.Event einfo -> - let rty = PropTypOfEventInfo infoReader m AccessibleFromSomewhere einfo - let rty, _cxs = PrettyTypes.PrettifyType g rty - let layout = - wordL (tagText (FSComp.SR.typeInfoEvent())) ^^ - NicePrint.layoutTyconRef denv einfo.ApparentEnclosingTyconRef ^^ - SepL.dot ^^ - wordL (tagEvent einfo.EventName) ^^ - RightL.colon ^^ - NicePrint.layoutType denv rty - FSharpStructuredToolTipElement.Single (layout, xml) - - // F# and .NET properties - | Item.Property(_, pinfo :: _) -> - let layout = NicePrint.prettyLayoutOfPropInfoFreeStyle g amap m denv pinfo - FSharpStructuredToolTipElement.Single (layout, xml) - - // Custom operations in queries - | Item.CustomOperation (customOpName, usageText, Some minfo) -> - - // Build 'custom operation: where (bool) - // - // Calls QueryBuilder.Where' - let layout = - wordL (tagText (FSComp.SR.typeInfoCustomOperation())) ^^ - RightL.colon ^^ - ( - match usageText() with - | Some t -> wordL (tagText t) - | None -> - let argTys = ParamNameAndTypesOfUnaryCustomOperation g minfo |> List.map (fun (ParamNameAndType(_, ty)) -> ty) - let argTys, _ = PrettyTypes.PrettifyTypes g argTys - wordL (tagMethod customOpName) ^^ sepListL SepL.space (List.map (fun ty -> LeftL.leftParen ^^ NicePrint.layoutType denv ty ^^ SepL.rightParen) argTys) - ) ^^ - SepL.lineBreak ^^ SepL.lineBreak ^^ - wordL (tagText (FSComp.SR.typeInfoCallsWord())) ^^ - NicePrint.layoutTyconRef denv minfo.ApparentEnclosingTyconRef ^^ - SepL.dot ^^ - wordL (tagMethod minfo.DisplayName) - - FSharpStructuredToolTipElement.Single (layout, xml) - - // F# constructors and methods - | Item.CtorGroup(_, minfos) - | Item.MethodGroup(_, minfos, _) -> - FormatOverloadsToList infoReader m denv item minfos - - // The 'fake' zero-argument constructors of .NET interfaces. - // This ideally should never appear in intellisense, but we do get here in repros like: - // type IFoo = abstract F : int - // type II = IFoo // remove 'type II = ' and quickly hover over IFoo before it gets squiggled for 'invalid use of interface type' - // and in that case we'll just show the interface type name. - | Item.FakeInterfaceCtor ty -> - let ty, _ = PrettyTypes.PrettifyType g ty - let layout = NicePrint.layoutTyconRef denv (tcrefOfAppTy g ty) - FSharpStructuredToolTipElement.Single(layout, xml) - - // The 'fake' representation of constructors of .NET delegate types - | Item.DelegateCtor delty -> - let delty, _cxs = PrettyTypes.PrettifyType g delty - let (SigOfFunctionForDelegate(_, _, _, fty)) = GetSigOfFunctionForDelegate infoReader delty m AccessibleFromSomewhere - let layout = - NicePrint.layoutTyconRef denv (tcrefOfAppTy g delty) ^^ - LeftL.leftParen ^^ - NicePrint.layoutType denv fty ^^ - RightL.rightParen - FSharpStructuredToolTipElement.Single(layout, xml) - - // Types. - | Item.Types(_, ((TType_app(tcref, _)) :: _)) - | Item.UnqualifiedType (tcref :: _) -> - let denv = { denv with shortTypeNames = true } - let layout = NicePrint.layoutTycon denv infoReader AccessibleFromSomewhere m (* width *) tcref.Deref - let remarks = OutputFullName isListItem pubpathOfTyconRef fullDisplayTextOfTyconRefAsLayout tcref - FSharpStructuredToolTipElement.Single (layout, xml, remarks=remarks) - - // F# Modules and namespaces - | Item.ModuleOrNamespaces((modref :: _) as modrefs) -> - //let os = StringBuilder() - let modrefs = modrefs |> RemoveDuplicateModuleRefs - let definiteNamespace = modrefs |> List.forall (fun modref -> modref.IsNamespace) - let kind = - if definiteNamespace then FSComp.SR.typeInfoNamespace() - elif modrefs |> List.forall (fun modref -> modref.IsModule) then FSComp.SR.typeInfoModule() - else FSComp.SR.typeInfoNamespaceOrModule() - - let layout = - wordL (tagKeyword kind) ^^ - (if definiteNamespace then tagNamespace (fullDisplayTextOfModRef modref) else (tagModule modref.DemangledModuleOrNamespaceName) - |> mkNav modref.DefinitionRange - |> wordL) - if not definiteNamespace then - let namesToAdd = - ([], modrefs) - ||> Seq.fold (fun st modref -> - match fullDisplayTextOfParentOfModRef modref with - | ValueSome txt -> txt :: st - | _ -> st) - |> Seq.mapi (fun i x -> i, x) - |> Seq.toList - let layout = - layout ^^ - ( - if not (List.isEmpty namesToAdd) then - SepL.lineBreak ^^ - List.fold ( fun s (i, txt) -> - s ^^ - SepL.lineBreak ^^ - wordL (tagText ((if i = 0 then FSComp.SR.typeInfoFromFirst else FSComp.SR.typeInfoFromNext) txt)) - ) emptyL namesToAdd - else - emptyL - ) - FSharpStructuredToolTipElement.Single (layout, xml) - else - FSharpStructuredToolTipElement.Single (layout, xml) - - | Item.AnonRecdField(anon, argTys, i, _) -> - let argTy = argTys.[i] - let nm = anon.SortedNames.[i] - let argTy, _ = PrettyTypes.PrettifyType g argTy - let layout = - wordL (tagText (FSComp.SR.typeInfoAnonRecdField())) ^^ - wordL (tagRecordField nm) ^^ - RightL.colon ^^ - NicePrint.layoutType denv argTy - FSharpStructuredToolTipElement.Single (layout, FSharpXmlDoc.None) - - // Named parameters - | Item.ArgName (id, argTy, _) -> - let argTy, _ = PrettyTypes.PrettifyType g argTy - let layout = - wordL (tagText (FSComp.SR.typeInfoArgument())) ^^ - wordL (tagParameter id.idText) ^^ - RightL.colon ^^ - NicePrint.layoutType denv argTy - FSharpStructuredToolTipElement.Single (layout, xml, paramName = id.idText) - - | Item.SetterArg (_, item) -> - FormatItemDescriptionToToolTipElement isListItem infoReader m denv (ItemWithNoInst item) - - | _ -> - FSharpStructuredToolTipElement.None - #if !NO_EXTENSIONTYPING /// Determine if an item is a provided type @@ -1328,7 +807,6 @@ module internal SymbolHelpers = | _ -> None | _ -> None - let (|ItemIsProvidedMethodWithStaticArguments|_|) item = match item with // Prefer the static parameters from the uninstantiated method info @@ -1505,13 +983,6 @@ module internal SymbolHelpers = | Item.ActivePatternResult _ // "let (|Foo|Bar|) = .. Fo$o ..." - no keyword -> None - - /// Format the structured version of a tooltip for an item - let FormatStructuredDescriptionOfItem isDecl infoReader m denv item = - ErrorScope.Protect m - (fun () -> FormatItemDescriptionToToolTipElement isDecl infoReader m denv item) - (fun err -> FSharpStructuredToolTipElement.CompositionError err) - /// Get rid of groups of overloads an replace them with single items. let FlattenItems g (m: range) item = ignore m diff --git a/src/fsharp/symbols/SymbolHelpers.fsi b/src/fsharp/symbols/SymbolHelpers.fsi index 22537757271..760798ba036 100755 --- a/src/fsharp/symbols/SymbolHelpers.fsi +++ b/src/fsharp/symbols/SymbolHelpers.fsi @@ -4,245 +4,167 @@ // Helpers for quick info and information about items //---------------------------------------------------------------------------- -namespace FSharp.Compiler.SourceCodeServices - -open System -open FSharp.Compiler -open FSharp.Compiler.Range -open FSharp.Compiler.TcGlobals -open FSharp.Compiler.Infos -open FSharp.Compiler.NameResolution -open FSharp.Compiler.InfoReader -open FSharp.Compiler.TypedTree -open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.ErrorLogger - -[] -type public FSharpErrorSeverity = - | Warning - | Error - -/// Object model for diagnostics -[] -type public FSharpErrorInfo = - member FileName: string - member Start: pos - member End: pos - member StartLineAlternate: int - member EndLineAlternate: int - member StartColumn: int - member EndColumn: int - - member Range: range - member Severity: FSharpErrorSeverity - member Message: string - member Subcategory: string - member ErrorNumber: int - - static member internal CreateFromExceptionAndAdjustEof: PhasedDiagnostic * isError: bool * range * lastPosInFile: (int*int) * suggestNames: bool -> FSharpErrorInfo - static member internal CreateFromException: PhasedDiagnostic * isError: bool * range * suggestNames: bool -> FSharpErrorInfo - -/// Describe a comment as either a block of text or a file+signature reference into an intellidoc file. -// -// Note: instances of this type do not hold any references to any compiler resources. -[] -type public FSharpXmlDoc = - /// No documentation is available - | None - - /// The text for documentation for in-memory references. Here unprocessedText is the `\n` concatenated - /// text of the original source and processsedXmlLines is the - /// XML produced after all checking and processing by the F# compiler, including - /// insertion of summary tags, encoding and resolving of cross-references if - // supported. - | Text of unprocessedLines: string[] * elaboratedXmlLines: string[] +namespace FSharp.Compiler.Diagnostics - /// Indicates that the XML for the documentation can be found in a .xml documentation file, using the given signature key - | XmlDocFileSignature of (*File:*) string * (*Signature:*)string + open System + open FSharp.Compiler.Text + open FSharp.Compiler.ErrorLogger -type public Layout = Internal.Utilities.StructuredFormat.Layout + /// Represents a diagnostic produced by the F# compiler + [] + type public FSharpDiagnostic = -/// A single data tip display element -[] -type public FSharpToolTipElementData<'T> = - { - MainDescription: 'T + /// Gets the file name for the diagnostic + member FileName: string - XmlDoc: FSharpXmlDoc + /// Gets the start position for the diagnostic + member Start: Position - /// typar instantiation text, to go after xml - TypeMapping: 'T list + /// Gets the end position for the diagnostic + member End: Position - /// Extra text, goes at the end - Remarks: 'T option + /// Gets the start column for the diagnostic + member StartColumn: int - /// Parameter name - ParamName : string option - } + /// Gets the end column for the diagnostic + member EndColumn: int -/// A single tool tip display element -// -// Note: instances of this type do not hold any references to any compiler resources. -[] -type public FSharpToolTipElement<'T> = - | None + /// Gets the start column for the diagnostic + member StartLine: int - /// A single type, method, etc with comment. May represent a method overload group. - | Group of FSharpToolTipElementData<'T> list + /// Gets the end column for the diagnostic + member EndLine: int - /// An error occurred formatting this element - | CompositionError of string - static member Single : 'T * FSharpXmlDoc * ?typeMapping: 'T list * ?paramName: string * ?remarks : 'T -> FSharpToolTipElement<'T> + /// Gets the range for the diagnostic + member Range: range -/// A single data tip display element with where text is expressed as string -type public FSharpToolTipElement = FSharpToolTipElement + /// Gets the severity for the diagnostic + member Severity: FSharpDiagnosticSeverity -/// A single data tip display element with where text is expressed as -type public FSharpStructuredToolTipElement = FSharpToolTipElement + /// Gets the message for the diagnostic + member Message: string -/// Information for building a tool tip box. -// -// Note: instances of this type do not hold any references to any compiler resources. -type public FSharpToolTipText<'T> = + /// Gets the sub-category for the diagnostic + member Subcategory: string - /// A list of data tip elements to display. - | FSharpToolTipText of FSharpToolTipElement<'T> list + /// Gets the number for the diagnostic + member ErrorNumber: int -type public FSharpToolTipText = FSharpToolTipText + /// Gets the number prefix for the diagnostic, usually "FS" but may differ for analyzers + member ErrorNumberPrefix: string -type public FSharpStructuredToolTipText = FSharpToolTipText + /// Gets the full error number text e.g "FS0031" + member ErrorNumberText: string -[] -type public CompletionItemKind = - | Field - | Property - | Method of isExtension : bool - | Event - | Argument - | CustomOperation - | Other + /// Creates a diagnostic, e.g. for reporting from an analyzer + static member Create: severity: FSharpDiagnosticSeverity * message: string * number: int * range: range * ?numberPrefix: string * ?subcategory: string -> FSharpDiagnostic -type UnresolvedSymbol = - { - FullName: string + static member internal CreateFromExceptionAndAdjustEof: PhasedDiagnostic * severity: FSharpDiagnosticSeverity * range * lastPosInFile: (int*int) * suggestNames: bool -> FSharpDiagnostic - DisplayName: string + static member internal CreateFromException: PhasedDiagnostic * severity: FSharpDiagnosticSeverity * range * suggestNames: bool -> FSharpDiagnostic - Namespace: string[] - } + /// Newlines are recognized and replaced with (ASCII 29, the 'group separator'), + /// which is decoded by the IDE with 'NewlineifyErrorString' back into newlines, so that multi-line errors can be displayed in QuickInfo + static member NewlineifyErrorString: message:string -> string -type internal CompletionItem = - { - ItemWithInst: ItemWithInst + /// Newlines are recognized and replaced with (ASCII 29, the 'group separator'), + /// which is decoded by the IDE with 'NewlineifyErrorString' back into newlines, so that multi-line errors can be displayed in QuickInfo + static member NormalizeErrorString: text:string -> string - Kind: CompletionItemKind + //---------------------------------------------------------------------------- + // Internal only - IsOwnMember: bool + // Implementation details used by other code in the compiler + [] + type internal ErrorScope = + interface IDisposable + new : unit -> ErrorScope + member Diagnostics : FSharpDiagnostic list + static member Protect<'a> : range -> (unit->'a) -> (string->'a) -> 'a - MinorPriority: int + /// An error logger that capture errors, filtering them according to warning levels etc. + type internal CompilationErrorLogger = + inherit ErrorLogger - Type: TyconRef option - - Unresolved: UnresolvedSymbol option - } - member Item : Item - -module public Tooltips = - - val ToFSharpToolTipElement: FSharpStructuredToolTipElement -> FSharpToolTipElement - - val ToFSharpToolTipText: FSharpStructuredToolTipText -> FSharpToolTipText - -// Implementation details used by other code in the compiler -module internal SymbolHelpers = - val ParamNameAndTypesOfUnaryCustomOperation : TcGlobals -> MethInfo -> ParamNameAndType list - - val GetXmlDocSigOfEntityRef : InfoReader -> range -> EntityRef -> (string option * string) option - - val GetXmlDocSigOfScopedValRef : TcGlobals -> TyconRef -> ValRef -> (string option * string) option - - val GetXmlDocSigOfILFieldInfo : InfoReader -> range -> ILFieldInfo -> (string option * string) option - - val GetXmlDocSigOfRecdFieldInfo : RecdFieldInfo -> (string option * string) option + /// Create the diagnostics logger + new: debugName:string * options: FSharpDiagnosticOptions -> CompilationErrorLogger + + /// Get the captured diagnostics + member GetDiagnostics: unit -> (PhasedDiagnostic * FSharpDiagnosticSeverity)[] - val GetXmlDocSigOfUnionCaseInfo : UnionCaseInfo -> (string option * string) option + module internal DiagnosticHelpers = + val ReportDiagnostic: FSharpDiagnosticOptions * allErrors: bool * mainInputFileName: string * fileInfo: (int * int) * (PhasedDiagnostic * FSharpDiagnosticSeverity) * suggestNames: bool -> FSharpDiagnostic list - val GetXmlDocSigOfMethInfo : InfoReader -> range -> MethInfo -> (string option * string) option + val CreateDiagnostics: FSharpDiagnosticOptions * allErrors: bool * mainInputFileName: string * seq<(PhasedDiagnostic * FSharpDiagnosticSeverity)> * suggestNames: bool -> FSharpDiagnostic[] - val GetXmlDocSigOfValRef : TcGlobals -> ValRef -> (string option * string) option +namespace FSharp.Compiler.Symbols - val GetXmlDocSigOfProp : InfoReader -> range -> PropInfo -> (string option * string) option + open Internal.Utilities.Library + open FSharp.Compiler + open FSharp.Compiler.TcGlobals + open FSharp.Compiler.Infos + open FSharp.Compiler.NameResolution + open FSharp.Compiler.InfoReader + open FSharp.Compiler.Syntax + open FSharp.Compiler.Text + open FSharp.Compiler.Xml + open FSharp.Compiler.TypedTree + open FSharp.Compiler.TypedTreeOps - val GetXmlDocSigOfEvent : InfoReader -> range -> EventInfo -> (string option * string) option + /// Describe a comment as either a block of text or a file+signature reference into an intellidoc file. + // + // Note: instances of this type do not hold any references to any compiler resources. + [] + type public FSharpXmlDoc = + /// No documentation is available + | None - val GetXmlCommentForItem : InfoReader -> range -> Item -> FSharpXmlDoc + /// The text for documentation for in-memory references. + | FromXmlText of XmlDoc - val FormatStructuredDescriptionOfItem : isDecl:bool -> InfoReader -> range -> DisplayEnv -> ItemWithInst -> FSharpStructuredToolTipElement + /// Indicates that the XML for the documentation can be found in a .xml documentation file for the given DLL, using the given signature key + | FromXmlFile of dllName: string * xmlSig: string - val RemoveDuplicateItems : TcGlobals -> ItemWithInst list -> ItemWithInst list - val RemoveExplicitlySuppressed : TcGlobals -> ItemWithInst list -> ItemWithInst list + // Implementation details used by other code in the compiler + module internal SymbolHelpers = + val ParamNameAndTypesOfUnaryCustomOperation : TcGlobals -> MethInfo -> ParamNameAndType list - val RemoveDuplicateCompletionItems : TcGlobals -> CompletionItem list -> CompletionItem list + val GetXmlCommentForItem : InfoReader -> range -> Item -> FSharpXmlDoc - val RemoveExplicitlySuppressedCompletionItems : TcGlobals -> CompletionItem list -> CompletionItem list + val RemoveDuplicateItems : TcGlobals -> ItemWithInst list -> ItemWithInst list - val GetF1Keyword : TcGlobals -> Item -> string option + val RemoveExplicitlySuppressed : TcGlobals -> ItemWithInst list -> ItemWithInst list - val rangeOfItem : TcGlobals -> bool option -> Item -> range option + val GetF1Keyword : TcGlobals -> Item -> string option - val fileNameOfItem : TcGlobals -> string option -> range -> Item -> string + val rangeOfItem : TcGlobals -> bool option -> Item -> range option - val FullNameOfItem : TcGlobals -> Item -> string + val fileNameOfItem : TcGlobals -> string option -> range -> Item -> string - val ccuOfItem : TcGlobals -> Item -> CcuThunk option + val FullNameOfItem : TcGlobals -> Item -> string - val mutable ToolTipFault : string option + val ccuOfItem : TcGlobals -> Item -> CcuThunk option - val IsAttribute : InfoReader -> Item -> bool + val IsAttribute : InfoReader -> Item -> bool - val IsExplicitlySuppressed : TcGlobals -> Item -> bool + val IsExplicitlySuppressed : TcGlobals -> Item -> bool - val FlattenItems : TcGlobals -> range -> Item -> Item list + val FlattenItems : TcGlobals -> range -> Item -> Item list #if !NO_EXTENSIONTYPING - val (|ItemIsProvidedType|_|) : TcGlobals -> Item -> TyconRef option + val (|ItemIsProvidedType|_|) : TcGlobals -> Item -> TyconRef option - val (|ItemIsWithStaticArguments|_|): range -> TcGlobals -> Item -> Tainted[] option + val (|ItemIsWithStaticArguments|_|): range -> TcGlobals -> Item -> Tainted[] option - val (|ItemIsProvidedTypeWithStaticArguments|_|): range -> TcGlobals -> Item -> Tainted[] option + val (|ItemIsProvidedTypeWithStaticArguments|_|): range -> TcGlobals -> Item -> Tainted[] option #endif - val SimplerDisplayEnv : DisplayEnv -> DisplayEnv + val SimplerDisplayEnv : DisplayEnv -> DisplayEnv + + val ItemDisplayPartialEquality: g:TcGlobals -> IPartialEqualityComparer + + val GetXmlCommentForMethInfoItem: infoReader:InfoReader -> m:range -> d:Item -> minfo:MethInfo -> FSharpXmlDoc + + val FormatTyparMapping: denv:DisplayEnv -> prettyTyparInst:TyparInst -> Layout list -//---------------------------------------------------------------------------- -// Internal only - -// Implementation details used by other code in the compiler -[] -type internal ErrorScope = - interface IDisposable - new : unit -> ErrorScope - member Diagnostics : FSharpErrorInfo list - static member Protect<'a> : range -> (unit->'a) -> (string->'a) -> 'a - -/// An error logger that capture errors, filtering them according to warning levels etc. -type internal CompilationErrorLogger = - inherit ErrorLogger - - /// Create the error logger - new: debugName:string * options: FSharpErrorSeverityOptions -> CompilationErrorLogger - - /// Get the captured errors - member GetErrors: unit -> (PhasedDiagnostic * FSharpErrorSeverity)[] - -/// This represents the global state established as each task function runs as part of the build. -/// -/// Use to reset error and warning handlers. -type internal CompilationGlobalsScope = - new : ErrorLogger * BuildPhase -> CompilationGlobalsScope - interface IDisposable - -module internal ErrorHelpers = - val ReportError: FSharpErrorSeverityOptions * allErrors: bool * mainInputFileName: string * fileInfo: (int * int) * (PhasedDiagnostic * FSharpErrorSeverity) * suggestNames: bool -> FSharpErrorInfo list - val CreateErrorInfos: FSharpErrorSeverityOptions * allErrors: bool * mainInputFileName: string * seq<(PhasedDiagnostic * FSharpErrorSeverity)> * suggestNames: bool -> FSharpErrorInfo[] diff --git a/src/fsharp/symbols/SymbolPatterns.fs b/src/fsharp/symbols/SymbolPatterns.fs index fc6fce634ec..fe4c8f32c57 100644 --- a/src/fsharp/symbols/SymbolPatterns.fs +++ b/src/fsharp/symbols/SymbolPatterns.fs @@ -1,28 +1,20 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.Symbols open System.Text.RegularExpressions -open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal.Library +open Internal.Utilities.Library +open FSharp.Compiler.Syntax /// Patterns over FSharpSymbol and derivatives. [] -module Symbol = - - let isAttribute<'T> (attribute: FSharpAttribute) = - // CompiledName throws exception on DataContractAttribute generated by SQLProvider - try attribute.AttributeType.CompiledName = typeof<'T>.Name with _ -> false - - let tryGetAttribute<'T> (attributes: seq) = - attributes |> Seq.tryFind isAttribute<'T> +module FSharpSymbolPatterns = module Option = let attempt f = try Some(f()) with _ -> None let hasModuleSuffixAttribute (entity: FSharpEntity) = - entity.Attributes - |> tryGetAttribute + entity.TryGetAttribute() |> Option.bind (fun a -> Option.attempt (fun _ -> a.ConstructorArguments) |> Option.bind (fun args -> args |> Seq.tryPick (fun (_, arg) -> @@ -58,11 +50,6 @@ module Symbol = | abbreviatedType -> entity, Some abbreviatedType else entity, None - let rec getAbbreviatedType (fsharpType: FSharpType) = - if fsharpType.IsAbbreviation then - getAbbreviatedType fsharpType.AbbreviatedType - else fsharpType - let (|Attribute|_|) (entity: FSharpEntity) = let isAttribute (entity: FSharpEntity) = let getBaseType (entity: FSharpEntity) = @@ -81,11 +68,8 @@ module Symbol = isAttributeType (Some entity) if isAttribute entity then Some() else None - let hasAttribute<'T> (attributes: seq) = - attributes |> Seq.exists isAttribute<'T> - let (|ValueType|_|) (e: FSharpEntity) = - if e.IsEnum || e.IsValueType || hasAttribute e.Attributes then Some() + if e.IsEnum || e.IsValueType || e.HasAttribute() then Some() else None #if !NO_EXTENSIONTYPING @@ -100,12 +84,17 @@ module Symbol = #endif let (|Record|_|) (e: FSharpEntity) = if e.IsFSharpRecord then Some() else None + let (|UnionType|_|) (e: FSharpEntity) = if e.IsFSharpUnion then Some() else None + let (|Delegate|_|) (e: FSharpEntity) = if e.IsDelegate then Some() else None + let (|FSharpException|_|) (e: FSharpEntity) = if e.IsFSharpExceptionDeclaration then Some() else None + let (|Interface|_|) (e: FSharpEntity) = if e.IsInterface then Some() else None + let (|AbstractClass|_|) (e: FSharpEntity) = - if hasAttribute e.Attributes then Some() else None + if e.HasAttribute() then Some() else None let (|FSharpType|_|) (e: FSharpEntity) = if e.IsDelegate || e.IsFSharpExceptionDeclaration || e.IsFSharpRecord || e.IsFSharpUnion @@ -121,20 +110,24 @@ module Symbol = #endif let (|ByRef|_|) (e: FSharpEntity) = if e.IsByRef then Some() else None + let (|Array|_|) (e: FSharpEntity) = if e.IsArrayType then Some() else None + let (|FSharpModule|_|) (entity: FSharpEntity) = if entity.IsFSharpModule then Some() else None let (|Namespace|_|) (entity: FSharpEntity) = if entity.IsNamespace then Some() else None + #if !NO_EXTENSIONTYPING let (|ProvidedAndErasedType|_|) (entity: FSharpEntity) = if entity.IsProvidedAndErased then Some() else None #endif + let (|Enum|_|) (entity: FSharpEntity) = if entity.IsEnum then Some() else None let (|Tuple|_|) (ty: FSharpType) = if ty.IsTupleType then Some() else None let (|RefCell|_|) (ty: FSharpType) = - match getAbbreviatedType ty with + match ty.StripAbbreviations() with | TypeWithDefinition def when def.IsFSharpRecord && def.FullName = "Microsoft.FSharp.Core.FSharpRef`1" -> Some() | _ -> None @@ -149,10 +142,9 @@ module Symbol = | :? FSharpActivePatternCase -> Some() | _ -> None - /// Field (field, fieldAbbreviatedType) let (|Field|_|) (symbol: FSharpSymbol) = match symbol with - | :? FSharpField as field -> Some (field, getAbbreviatedType field.FieldType) + | :? FSharpField as field -> Some (field, field.FieldType.StripAbbreviations()) | _ -> None let (|MutableVar|_|) (symbol: FSharpSymbol) = @@ -207,7 +199,7 @@ module Symbol = | _ -> None let (|Function|_|) excluded (func: FSharpMemberOrFunctionOrValue) = - try let ty = func.FullType |> getAbbreviatedType + try let ty = func.FullType.StripAbbreviations() if ty.IsFunctionType && not func.IsPropertyGetterMethod && not func.IsPropertySetterMethod diff --git a/src/fsharp/symbols/SymbolPatterns.fsi b/src/fsharp/symbols/SymbolPatterns.fsi index a0209cae219..a99c977c5ef 100644 --- a/src/fsharp/symbols/SymbolPatterns.fsi +++ b/src/fsharp/symbols/SymbolPatterns.fsi @@ -1,97 +1,91 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Compiler.SourceCodeServices +namespace FSharp.Compiler.Symbols /// Patterns over FSharpSymbol and derivatives. -[] -module public Symbol = +[] +module public FSharpSymbolPatterns = - val isAttribute<'T> : FSharpAttribute -> bool + val (|AbbreviatedType|_|): FSharpEntity -> FSharpType option - val tryGetAttribute<'T> : seq -> FSharpAttribute option + val (|TypeWithDefinition|_|): FSharpType -> FSharpEntity option - val hasModuleSuffixAttribute : FSharpEntity -> bool + val (|Attribute|_|): FSharpEntity -> unit option - val isOperator : name: string -> bool + val (|ValueType|_|): FSharpEntity -> unit option - val isUnnamedUnionCaseField : FSharpField -> bool + val (|Class|_|): original: FSharpEntity * abbreviated: FSharpEntity * 'a -> unit option - val (|AbbreviatedType|_|) : FSharpEntity -> FSharpType option + val (|Record|_|): FSharpEntity -> unit option - val (|TypeWithDefinition|_|) : FSharpType -> FSharpEntity option + val (|UnionType|_|): FSharpEntity -> unit option - val getEntityAbbreviatedType : FSharpEntity -> (FSharpEntity * FSharpType option) + val (|Delegate|_|): FSharpEntity -> unit option - val getAbbreviatedType : FSharpType -> FSharpType + val (|FSharpException|_|): FSharpEntity -> unit option - val (|Attribute|_|) : FSharpEntity -> unit option + val (|Interface|_|): FSharpEntity -> unit option - val hasAttribute<'T> : seq -> bool + val (|AbstractClass|_|): FSharpEntity -> unit option - val (|ValueType|_|) : FSharpEntity -> unit option + val (|FSharpType|_|): FSharpEntity -> unit option - val (|Class|_|) : original: FSharpEntity * abbreviated: FSharpEntity * 'a -> unit option - - val (|Record|_|) : FSharpEntity -> unit option - - val (|UnionType|_|) : FSharpEntity -> unit option - - val (|Delegate|_|) : FSharpEntity -> unit option +#if !NO_EXTENSIONTYPING + val (|ProvidedType|_|): FSharpEntity -> unit option +#endif - val (|FSharpException|_|) : FSharpEntity -> unit option + val (|ByRef|_|): FSharpEntity -> unit option - val (|Interface|_|) : FSharpEntity -> unit option + val (|Array|_|): FSharpEntity -> unit option - val (|AbstractClass|_|) : FSharpEntity -> unit option + val (|FSharpModule|_|): FSharpEntity -> unit option - val (|FSharpType|_|) : FSharpEntity -> unit option + val (|Namespace|_|): FSharpEntity -> unit option #if !NO_EXTENSIONTYPING - val (|ProvidedType|_|) : FSharpEntity -> unit option -#endif + val (|ProvidedAndErasedType|_|): FSharpEntity -> unit option +#endif - val (|ByRef|_|) : FSharpEntity -> unit option + val (|Enum|_|): FSharpEntity -> unit option - val (|Array|_|) : FSharpEntity -> unit option + val (|Tuple|_|): FSharpType -> unit option - val (|FSharpModule|_|) : FSharpEntity -> unit option + val (|RefCell|_|): FSharpType -> unit option - val (|Namespace|_|) : FSharpEntity -> unit option + val (|FunctionType|_|): FSharpType -> unit option -#if !NO_EXTENSIONTYPING - val (|ProvidedAndErasedType|_|) : FSharpEntity -> unit option -#endif + val (|Pattern|_|): FSharpSymbol -> unit option - val (|Enum|_|) : FSharpEntity -> unit option + val (|Field|_|): FSharpSymbol -> (FSharpField * FSharpType) option - val (|Tuple|_|) : FSharpType -> unit option + val (|MutableVar|_|): FSharpSymbol -> unit option - val (|RefCell|_|) : FSharpType -> unit option + /// Returns (originalEntity, abbreviatedEntity, abbreviatedType) + val (|FSharpEntity|_|): FSharpSymbol -> (FSharpEntity * FSharpEntity * FSharpType option) option - val (|FunctionType|_|) : FSharpType -> unit option + val (|Parameter|_|): FSharpSymbol -> unit option - val (|Pattern|_|) : FSharpSymbol -> unit option + val (|UnionCase|_|): FSharpSymbol -> FSharpUnionCase option - val (|Field|_|) : FSharpSymbol -> (FSharpField * FSharpType) option + val (|RecordField|_|): FSharpSymbol -> FSharpField option - val (|MutableVar|_|) : FSharpSymbol -> unit option + val (|ActivePatternCase|_|): FSharpSymbol -> FSharpActivePatternCase option - val (|FSharpEntity|_|) : FSharpSymbol -> (FSharpEntity * FSharpEntity * FSharpType option) option + val (|MemberFunctionOrValue|_|): FSharpSymbol -> FSharpMemberOrFunctionOrValue option - val (|Parameter|_|) : FSharpSymbol -> unit option + val (|Constructor|_|): FSharpMemberOrFunctionOrValue -> FSharpEntity option - val (|UnionCase|_|) : FSharpSymbol -> FSharpUnionCase option + val (|Function|_|): excluded: bool -> FSharpMemberOrFunctionOrValue -> unit option - val (|RecordField|_|) : FSharpSymbol -> FSharpField option + val (|ExtensionMember|_|): FSharpMemberOrFunctionOrValue -> unit option - val (|ActivePatternCase|_|) : FSharpSymbol -> FSharpActivePatternCase option + val (|Event|_|): FSharpMemberOrFunctionOrValue -> unit option - val (|MemberFunctionOrValue|_|) : FSharpSymbol -> FSharpMemberOrFunctionOrValue option + val internal hasModuleSuffixAttribute: FSharpEntity -> bool - val (|Constructor|_|) : FSharpMemberOrFunctionOrValue -> FSharpEntity option + val internal isOperator: name: string -> bool - val (|Function|_|) : excluded: bool -> FSharpMemberOrFunctionOrValue -> unit option + val internal isUnnamedUnionCaseField: FSharpField -> bool - val (|ExtensionMember|_|) : FSharpMemberOrFunctionOrValue -> unit option + val internal getEntityAbbreviatedType: FSharpEntity -> (FSharpEntity * FSharpType option) - val (|Event|_|) : FSharpMemberOrFunctionOrValue -> unit option \ No newline at end of file diff --git a/src/fsharp/symbols/Symbols.fs b/src/fsharp/symbols/Symbols.fs index fd1ecb73e88..0cf4f677a4f 100644 --- a/src/fsharp/symbols/Symbols.fs +++ b/src/fsharp/symbols/Symbols.fs @@ -1,11 +1,12 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace rec FSharp.Compiler.SourceCodeServices +namespace rec FSharp.Compiler.Symbols +open System open System.Collections.Generic - +open Internal.Utilities.Collections +open Internal.Utilities.Library open FSharp.Compiler -open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AttributeChecking open FSharp.Compiler.AccessibilityLogic @@ -13,18 +14,18 @@ open FSharp.Compiler.CheckDeclarations open FSharp.Compiler.CompilerImports open FSharp.Compiler.Infos open FSharp.Compiler.InfoReader -open FSharp.Compiler.Lib open FSharp.Compiler.NameResolution -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax open FSharp.Compiler.SyntaxTreeOps +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Xml open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeBasics open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypedTreeOps -open FSharp.Compiler.XmlDoc - -open Internal.Utilities +open FSharp.Compiler.Syntax.PrettyNaming +open FSharp.Compiler.AbstractIL type FSharpAccessibility(a:Accessibility, ?isProtected) = let isProtected = defaultArg isProtected false @@ -83,7 +84,7 @@ module Impl = System.Collections.ObjectModel.ReadOnlyCollection<_>(Seq.toArray arr) :> IList<_> let makeXmlDoc (doc: XmlDoc) = - makeReadOnlyCollection doc.UnprocessedLines + FSharpXmlDoc.FromXmlText doc let makeElaboratedXmlDoc (doc: XmlDoc) = makeReadOnlyCollection (doc.GetElaboratedXmlLines()) @@ -196,7 +197,7 @@ module Impl = let getXmlDocSigForEntity (cenv: SymbolEnv) (ent:EntityRef)= - match SymbolHelpers.GetXmlDocSigOfEntityRef cenv.infoReader ent.Range ent with + match GetXmlDocSigOfEntityRef cenv.infoReader ent.Range ent with | Some (_, docsig) -> docsig | _ -> "" @@ -238,9 +239,9 @@ type FSharpSymbol(cenv: SymbolEnv, item: (unit -> Item), access: (FSharpSymbol - member x.GetEffectivelySameAsHash() = ItemsAreEffectivelyEqualHash cenv.g x.Item - member internal x.Item = item() + member internal _.Item = item() - member x.DisplayName = item().DisplayName + member _.DisplayName = item().DisplayName // This is actually overridden in all cases below. However some symbols are still just of type FSharpSymbol, // see 'FSharpSymbol.Create' further below. @@ -333,14 +334,18 @@ type FSharpSymbol(cenv: SymbolEnv, item: (unit -> Item), access: (FSharpSymbol - | Item.Types _ | Item.DelegateCtor _ -> dflt() - static member GetAccessibility (symbol: FSharpSymbol) = - match symbol with - | :? FSharpEntity as x -> Some x.Accessibility - | :? FSharpField as x -> Some x.Accessibility - | :? FSharpUnionCase as x -> Some x.Accessibility - | :? FSharpMemberFunctionOrValue as x -> Some x.Accessibility - | _ -> None + abstract Accessibility: FSharpAccessibility + default _.Accessibility = FSharpAccessibility(taccessPublic) + abstract Attributes: IList + default _.Attributes = makeReadOnlyCollection[] + + member sym.HasAttribute<'T> () = + sym.Attributes |> Seq.exists (fun attr -> attr.IsAttribute<'T>()) + + member sym.TryGetAttribute<'T>() = + sym.Attributes |> Seq.tryFind (fun attr -> attr.IsAttribute<'T>()) + type FSharpEntity(cenv: SymbolEnv, entity:EntityRef) = inherit FSharpSymbol(cenv, (fun () -> @@ -562,7 +567,7 @@ type FSharpEntity(cenv: SymbolEnv, entity:EntityRef) = | _ -> invalidOp "not a delegate type" - member _.Accessibility = + override _.Accessibility = if isUnresolved() then FSharpAccessibility taccessPublic else FSharpAccessibility(getApproxFSharpAccessibilityOfEntity entity) @@ -607,8 +612,6 @@ type FSharpEntity(cenv: SymbolEnv, entity:EntityRef) = member x.IsNamespace = entity.IsNamespace - member x.MembersOrValues = x.MembersFunctionsAndValues - member x.MembersFunctionsAndValues = if isUnresolved() then makeReadOnlyCollection[] else protect <| fun () -> @@ -642,10 +645,10 @@ type FSharpEntity(cenv: SymbolEnv, entity:EntityRef) = let vref = mkNestedValRef entity v yield FSharpMemberOrFunctionOrValue(cenv, V vref, Item.Value vref) match v.MemberInfo.Value.MemberFlags.MemberKind, v.ApparentEnclosingEntity with - | MemberKind.PropertyGet, Parent p -> + | SynMemberKind.PropertyGet, Parent p -> let pinfo = FSProp(cenv.g, generalizedTyconRef p, Some vref, None) yield FSharpMemberOrFunctionOrValue(cenv, P pinfo, Item.Property (pinfo.PropertyName, [pinfo])) - | MemberKind.PropertySet, Parent p -> + | SynMemberKind.PropertySet, Parent p -> let pinfo = FSProp(cenv.g, generalizedTyconRef p, None, Some vref) yield FSharpMemberOrFunctionOrValue(cenv, P pinfo, Item.Property (pinfo.PropertyName, [pinfo])) | _ -> () @@ -693,8 +696,6 @@ type FSharpEntity(cenv: SymbolEnv, entity:EntityRef) = |> List.map (fun x -> FSharpUnionCase(cenv, x)) |> makeReadOnlyCollection - member x.RecordFields = x.FSharpFields - member x.FSharpFields = if isUnresolved() then makeReadOnlyCollection[] else @@ -721,7 +722,7 @@ type FSharpEntity(cenv: SymbolEnv, entity:EntityRef) = | None -> invalidOp "not a type abbreviation" | Some ty -> FSharpType(cenv, ty) - member _.Attributes = + override _.Attributes = if isUnresolved() then makeReadOnlyCollection[] else GetAttribInfosOfEntity cenv.g cenv.amap range0 entity |> List.map (fun a -> FSharpAttribute(cenv, a)) @@ -761,12 +762,138 @@ type FSharpEntity(cenv: SymbolEnv, entity:EntityRef) = member x.ActivePatternCases = protect <| fun () -> - ActivePatternElemsOfModuleOrNamespace x.Entity + ActivePatternElemsOfModuleOrNamespace cenv.g x.Entity |> Map.toList |> List.map (fun (_, apref) -> let item = Item.ActivePatternCase apref FSharpActivePatternCase(cenv, apref.ActivePatternInfo, apref.ActivePatternVal.Type, apref.CaseIndex, Some apref.ActivePatternVal, item)) + member x.TryGetFullName() = + try x.TryFullName + with _ -> + try Some(String.Join(".", x.AccessPath, x.DisplayName)) + with _ -> None + + member x.TryGetFullDisplayName() = + let fullName = x.TryGetFullName() |> Option.map (fun fullName -> fullName.Split '.') + let res = + match fullName with + | Some fullName -> + match Option.attempt (fun _ -> x.DisplayName) with + | Some shortDisplayName when not (shortDisplayName.Contains ".") -> + Some (fullName |> Array.replace (fullName.Length - 1) shortDisplayName) + | _ -> Some fullName + | None -> None + |> Option.map (fun fullDisplayName -> String.Join (".", fullDisplayName)) + //debug "GetFullDisplayName: FullName = %A, Result = %A" fullName res + res + + member x.TryGetFullCompiledName() = + let fullName = x.TryGetFullName() |> Option.map (fun fullName -> fullName.Split '.') + let res = + match fullName with + | Some fullName -> + match Option.attempt (fun _ -> x.CompiledName) with + | Some shortCompiledName when not (shortCompiledName.Contains ".") -> + Some (fullName |> Array.replace (fullName.Length - 1) shortCompiledName) + | _ -> Some fullName + | None -> None + |> Option.map (fun fullDisplayName -> String.Join (".", fullDisplayName)) + //debug "GetFullCompiledName: FullName = %A, Result = %A" fullName res + res + + member x.GetPublicNestedEntities() = + x.NestedEntities |> Seq.filter (fun entity -> entity.Accessibility.IsPublic) + + member x.TryGetMembersFunctionsAndValues() = + try x.MembersFunctionsAndValues with _ -> [||] :> _ + + member this.TryGetMetadataText() = + match entity.TryDeref with + | ValueSome _ -> + if entity.IsNamespace then None + else + + let denv = DisplayEnv.InitialForSigFileGeneration cenv.g + + let extraOpenPath = + match entity.CompilationPathOpt with + | Some cpath -> + let rec getOpenPath accessPath acc = + match accessPath with + | [] -> acc + | (name, ModuleOrNamespaceKind.ModuleOrType) :: accessPath -> + getOpenPath accessPath (name :: acc) + | (name, ModuleOrNamespaceKind.Namespace) :: accessPath -> + getOpenPath accessPath (name :: acc) + | (name, ModuleOrNamespaceKind.FSharpModuleWithSuffix) :: accessPath -> + getOpenPath accessPath (name :: acc) + + getOpenPath cpath.AccessPath [] + | _ -> + [] + |> List.rev + + let needOpenType = + match entity.CompilationPathOpt with + | Some cpath -> + match cpath.AccessPath with + | (_, ModuleOrNamespaceKind.ModuleOrType) :: _ -> + match this.DeclaringEntity with + | Some (declaringEntity: FSharpEntity) -> not declaringEntity.IsFSharpModule + | _ -> false + | _ -> false + | _ -> + false + + let denv = denv.AddOpenPath extraOpenPath + + let infoReader = cenv.infoReader + + let openPathL = + extraOpenPath + |> List.map (fun x -> Layout.wordL (TaggedText.tagUnknownEntity x)) + + let pathL = + if List.isEmpty extraOpenPath then + Layout.emptyL + else + Layout.sepListL (Layout.sepL TaggedText.dot) openPathL + + let headerL = + if List.isEmpty extraOpenPath then + Layout.emptyL + else + Layout.(^^) + (Layout.wordL (TaggedText.tagKeyword "namespace")) + pathL + + let openL = + if List.isEmpty openPathL then Layout.emptyL + else + let openKeywordL = + if needOpenType then + Layout.(^^) + (Layout.wordL (TaggedText.tagKeyword "open")) + (Layout.wordL TaggedText.keywordType) + else + Layout.wordL (TaggedText.tagKeyword "open") + Layout.(^^) + openKeywordL + pathL + + Layout.aboveListL + [ + (Layout.(^^) headerL (Layout.sepL TaggedText.lineBreak)) + (Layout.(^^) openL (Layout.sepL TaggedText.lineBreak)) + (NicePrint.layoutEntityRef denv infoReader AccessibleFromSomewhere range0 entity) + ] + |> LayoutRender.showL + |> SourceText.ofString + |> Some + | _ -> + None + override x.Equals(other: obj) = box x === other || match other with @@ -813,7 +940,7 @@ type FSharpUnionCase(cenv, v: UnionCaseRef) = if isUnresolved() then false else v.UnionCase.RecdFieldsArray.Length <> 0 - member _.UnionCaseFields = + member _.Fields = if isUnresolved() then makeReadOnlyCollection [] else v.UnionCase.RecdFieldsArray |> Array.mapi (fun i _ -> FSharpField(cenv, FSharpFieldData.Union (v, i))) |> makeReadOnlyCollection @@ -828,7 +955,7 @@ type FSharpUnionCase(cenv, v: UnionCaseRef) = member _.XmlDocSig = checkIsResolved() let unionCase = UnionCaseInfo(generalizeTypars v.TyconRef.TyparsNoRange, v) - match SymbolHelpers.GetXmlDocSigOfUnionCaseInfo unionCase with + match GetXmlDocSigOfUnionCaseRef unionCase.UnionCaseRef with | Some (_, docsig) -> docsig | _ -> "" @@ -840,11 +967,11 @@ type FSharpUnionCase(cenv, v: UnionCaseRef) = if isUnresolved() then XmlDoc.Empty |> makeElaboratedXmlDoc else v.UnionCase.XmlDoc |> makeElaboratedXmlDoc - member _.Attributes = + override _.Attributes = if isUnresolved() then makeReadOnlyCollection [] else v.Attribs |> List.map (fun a -> FSharpAttribute(cenv, AttribInfo.FSAttribInfo(cenv.g, a))) |> makeReadOnlyCollection - member _.Accessibility = + override _.Accessibility = if isUnresolved() then FSharpAccessibility taccessPublic else FSharpAccessibility(v.UnionCase.Accessibility) @@ -1003,12 +1130,12 @@ type FSharpField(cenv: SymbolEnv, d: FSharpFieldData) = match d with | RecdOrClass v -> let recd = RecdFieldInfo(generalizeTypars v.TyconRef.TyparsNoRange, v) - SymbolHelpers.GetXmlDocSigOfRecdFieldInfo recd + GetXmlDocSigOfRecdFieldRef recd.RecdFieldRef | Union (v, _) -> let unionCase = UnionCaseInfo(generalizeTypars v.TyconRef.TyparsNoRange, v) - SymbolHelpers.GetXmlDocSigOfUnionCaseInfo unionCase + GetXmlDocSigOfUnionCaseRef unionCase.UnionCaseRef | ILField f -> - SymbolHelpers.GetXmlDocSigOfILFieldInfo cenv.infoReader range0 f + GetXmlDocSigOfILFieldInfo cenv.infoReader range0 f | AnonField _ -> None match xmlsig with | Some (_, docsig) -> docsig @@ -1089,7 +1216,7 @@ type FSharpField(cenv: SymbolEnv, d: FSharpFieldData) = | Choice3Of3 _ -> [] |> makeReadOnlyCollection - member _.Accessibility: FSharpAccessibility = + override _.Accessibility: FSharpAccessibility = if isUnresolved() then FSharpAccessibility taccessPublic else let access = match d.TryRecdField with @@ -1115,8 +1242,6 @@ type FSharpField(cenv: SymbolEnv, d: FSharpFieldData) = override x.ToString() = "field " + x.Name -type [] FSharpRecordField = FSharpField - type [] FSharpAccessibilityRights(thisCcu: CcuThunk, ad:AccessorDomain) = member internal _.ThisCcu = thisCcu @@ -1147,7 +1272,7 @@ type FSharpActivePatternCase(cenv, apinfo: PrettyNaming.ActivePatternInfo, ty, n member _.XmlDocSig = let xmlsig = match valOpt with - | Some valref -> SymbolHelpers.GetXmlDocSigOfValRef cenv.g valref + | Some valref -> GetXmlDocSigOfValRef cenv.g valref | None -> None match xmlsig with | Some (_, docsig) -> docsig @@ -1190,9 +1315,9 @@ type FSharpGenericParameter(cenv, v:Typar) = member _.ElaboratedXmlDoc = v.XmlDoc |> makeElaboratedXmlDoc - member _.IsSolveAtCompileTime = (v.StaticReq = TyparStaticReq.HeadTypeStaticReq) + member _.IsSolveAtCompileTime = (v.StaticReq = TyparStaticReq.HeadType) - member _.Attributes = + override _.Attributes = // INCOMPLETENESS: If the type parameter comes from .NET then the .NET metadata for the type parameter // has been lost (it is not accessible via Typar). So we can't easily report the attributes in this // case. @@ -1475,7 +1600,7 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = | Some v -> Some v.Range | None -> base.DeclarationLocation - member x.Overloads matchParameterNumber = + member x.GetOverloads matchParameterNumber = checkIsResolved() match d with | M m | C m -> @@ -1678,8 +1803,11 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = member _.IsEventAddMethod = if isUnresolved() then false else match d with - | M m when m.LogicalName.StartsWithOrdinal("add_") -> - let eventName = m.LogicalName.[4..] + | M m -> + let logicalName = m.LogicalName + logicalName.Length > 4 && logicalName.StartsWithOrdinal("add_") && + + let eventName = logicalName.[4..] let entityTy = generalizedTyconRef m.DeclaringTyconRef not (isNil (cenv.infoReader.GetImmediateIntrinsicEventsOfType (Some eventName, AccessibleFromSomeFSharpCode, range0, entityTy))) || let declaringTy = generalizedTyconRef m.DeclaringTyconRef @@ -1692,8 +1820,11 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = member _.IsEventRemoveMethod = if isUnresolved() then false else match d with - | M m when m.LogicalName.StartsWithOrdinal("remove_") -> - let eventName = m.LogicalName.[7..] + | M m -> + let logicalName = m.LogicalName + logicalName.Length > 4 && logicalName.StartsWithOrdinal("remove_") && + + let eventName = logicalName.[7..] let entityTy = generalizedTyconRef m.DeclaringTyconRef not (isNil (cenv.infoReader.GetImmediateIntrinsicEventsOfType (Some eventName, AccessibleFromSomeFSharpCode, range0, entityTy))) || let declaringTy = generalizedTyconRef m.DeclaringTyconRef @@ -1702,25 +1833,14 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = | _ -> false | _ -> false - member x.IsGetterMethod = - if isUnresolved() then false else - x.IsPropertyGetterMethod || - match fsharpInfo() with - | None -> false - | Some v -> v.IsPropertyGetterMethod - - member x.IsSetterMethod = - if isUnresolved() then false else - x.IsPropertySetterMethod || - match fsharpInfo() with - | None -> false - | Some v -> v.IsPropertySetterMethod - member _.IsPropertyGetterMethod = if isUnresolved() then false else match d with - | M m when m.LogicalName.StartsWithOrdinal("get_") -> - let propName = PrettyNaming.ChopPropertyName(m.LogicalName) + | M m -> + let logicalName = m.LogicalName + logicalName.Length > 4 && logicalName.StartsWithOrdinal("get_") && + + let propName = PrettyNaming.ChopPropertyName(logicalName) let declaringTy = generalizedTyconRef m.DeclaringTyconRef not (isNil (GetImmediateIntrinsicPropInfosOfType (Some propName, AccessibleFromSomeFSharpCode) cenv.g cenv.amap range0 declaringTy)) | V v -> v.IsPropertyGetterMethod @@ -1729,9 +1849,11 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = member _.IsPropertySetterMethod = if isUnresolved() then false else match d with - // Look for a matching property with the right name. - | M m when m.LogicalName.StartsWithOrdinal("set_") -> - let propName = PrettyNaming.ChopPropertyName(m.LogicalName) + | M m -> + let logicalName = m.LogicalName + logicalName.Length > 4 && logicalName.StartsWithOrdinal("set_") && + + let propName = PrettyNaming.ChopPropertyName(logicalName) let declaringTy = generalizedTyconRef m.DeclaringTyconRef not (isNil (GetImmediateIntrinsicPropInfosOfType (Some propName, AccessibleFromSomeFSharpCode) cenv.g cenv.amap range0 declaringTy)) | V v -> v.IsPropertySetterMethod @@ -1763,8 +1885,6 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = | V v -> v.IsExtensionMember | C _ -> false - member x.IsOverrideOrExplicitMember = x.IsOverrideOrExplicitInterfaceImplementation - member _.IsOverrideOrExplicitInterfaceImplementation = if isUnresolved() then false else match d with @@ -1841,23 +1961,23 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = match d with | E e -> let range = defaultArg sym.DeclarationLocationOpt range0 - match SymbolHelpers.GetXmlDocSigOfEvent cenv.infoReader range e with + match GetXmlDocSigOfEvent cenv.infoReader range e with | Some (_, docsig) -> docsig | _ -> "" | P p -> let range = defaultArg sym.DeclarationLocationOpt range0 - match SymbolHelpers.GetXmlDocSigOfProp cenv.infoReader range p with + match GetXmlDocSigOfProp cenv.infoReader range p with | Some (_, docsig) -> docsig | _ -> "" | M m | C m -> let range = defaultArg sym.DeclarationLocationOpt range0 - match SymbolHelpers.GetXmlDocSigOfMethInfo cenv.infoReader range m with + match GetXmlDocSigOfMethInfo cenv.infoReader range m with | Some (_, docsig) -> docsig | _ -> "" | V v -> match v.DeclaringEntity with | Parent entityRef -> - match SymbolHelpers.GetXmlDocSigOfScopedValRef cenv.g entityRef v with + match GetXmlDocSigOfScopedValRef cenv.g entityRef v with | Some (_, docsig) -> docsig | _ -> "" | ParentNone -> "" @@ -1883,11 +2003,11 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = match d with | P p -> [ [ for (ParamData(isParamArrayArg, isInArg, isOutArg, optArgInfo, _callerInfo, nmOpt, _reflArgInfo, pty)) in p.GetParamDatas(cenv.amap, range0) do - // INCOMPLETENESS: Attribs is empty here, so we can't look at attributes for - // either .NET or F# parameters - let argInfo: ArgReprInfo = { Name=nmOpt; Attribs= [] } - yield FSharpParameter(cenv, pty, argInfo, None, x.DeclarationLocationOpt, isParamArrayArg, isInArg, isOutArg, optArgInfo.IsOptional, false) ] - |> makeReadOnlyCollection ] + // INCOMPLETENESS: Attribs is empty here, so we can't look at attributes for + // either .NET or F# parameters + let argInfo: ArgReprInfo = { Name=nmOpt; Attribs= [] } + yield FSharpParameter(cenv, pty, argInfo, None, x.DeclarationLocationOpt, isParamArrayArg, isInArg, isOutArg, optArgInfo.IsOptional, false) ] + |> makeReadOnlyCollection ] |> makeReadOnlyCollection | E _ -> [] |> makeReadOnlyCollection @@ -1966,7 +2086,7 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = FSharpParameter(cenv, rty, retInfo, x.DeclarationLocationOpt) - member _.Attributes = + override _.Attributes = if isUnresolved() then makeReadOnlyCollection [] else let m = range0 match d with @@ -2009,7 +2129,7 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = | V v -> getLiteralValue v.LiteralValue /// How visible is this? - member this.Accessibility: FSharpAccessibility = + override this.Accessibility: FSharpAccessibility = if isUnresolved() then FSharpAccessibility taccessPublic else match fsharpInfo() with | Some v -> FSharpAccessibility(v.Accessibility) @@ -2069,6 +2189,11 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = | V valRef -> not (isForallFunctionTy cenv.g valRef.Type) | _ -> false + member x.IsFunction = + match d with + | V valRef -> isForallFunctionTy cenv.g valRef.Type + | _ -> false + override x.Equals(other: obj) = box x === other || match other with @@ -2093,6 +2218,7 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = match x.IsMember, d with | true, V v -> NicePrint.prettyLayoutOfMemberNoInstShort { (context.Contents cenv.g) with showMemberContainers=true } v.Deref + |> LayoutRender.toArray | _,_ -> checkIsResolved() let ty = @@ -2105,6 +2231,7 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = mkIteratedFunTy (List.map (mkRefTupledTy cenv.g) argtysl) rty | V v -> v.TauType NicePrint.prettyLayoutOfTypeNoCx (context.Contents cenv.g) ty + |> LayoutRender.toArray member x.GetWitnessPassingInfo() = let witnessInfos = @@ -2134,6 +2261,29 @@ type FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = let witnessMethName = PrettyNaming.ExtraWitnessMethodName x.CompiledName Some (witnessMethName, makeReadOnlyCollection witnessParams) + // FullType may raise exceptions (see https://github.com/fsharp/fsharp/issues/307). + member x.FullTypeSafe = Option.attempt (fun _ -> x.FullType) + + member x.TryGetFullDisplayName() = + let fullName = Option.attempt (fun _ -> x.FullName.Split '.') + match fullName with + | Some fullName -> + match Option.attempt (fun _ -> x.DisplayName) with + | Some shortDisplayName when not (shortDisplayName.Contains ".") -> + Some (fullName |> Array.replace (fullName.Length - 1) shortDisplayName) + | _ -> Some fullName + | None -> None + |> Option.map (fun fullDisplayName -> String.Join (".", fullDisplayName)) + + member x.TryGetFullCompiledOperatorNameIdents() : string[] option = + // For operator ++ displayName is ( ++ ) compiledName is op_PlusPlus + if PrettyNaming.IsOperatorName x.DisplayName && x.DisplayName <> x.CompiledName then + x.DeclaringEntity + |> Option.bind (fun e -> e.TryGetFullName()) + |> Option.map (fun enclosingEntityFullName -> + Array.append (enclosingEntityFullName.Split '.') [| x.CompiledName |]) + else None + type FSharpType(cenv, ty:TType) = let isUnresolved() = @@ -2173,9 +2323,6 @@ type FSharpType(cenv, ty:TType) = | TType_tuple (tupInfo, _) -> evalTupInfoIsStruct tupInfo | _ -> false - member x.IsNamedType = x.HasTypeDefinition - member x.NamedEntity = x.TypeDefinition - member _.TypeDefinition = protect <| fun () -> match stripTyparEqns ty with @@ -2249,17 +2396,17 @@ type FSharpType(cenv, ty:TType) = FSharpGenericParameter (cenv, tp) | _ -> invalidOp "not a generic parameter type" - member x.AllInterfaces = + member _.AllInterfaces = if isUnresolved() then makeReadOnlyCollection [] else [ for ty in AllInterfacesOfType cenv.g cenv.amap range0 AllowMultiIntfInstantiations.Yes ty do yield FSharpType(cenv, ty) ] |> makeReadOnlyCollection - member x.BaseType = + member _.BaseType = GetSuperTypeOfType cenv.g cenv.amap range0 ty |> Option.map (fun ty -> FSharpType(cenv, ty)) - member x.Instantiate(instantiation:(FSharpGenericParameter * FSharpType) list) = + member _.Instantiate(instantiation:(FSharpGenericParameter * FSharpType) list) = let typI = instType (instantiation |> List.map (fun (tyv, ty) -> tyv.V, ty.V)) ty FSharpType(cenv, typI) @@ -2277,7 +2424,7 @@ type FSharpType(cenv, ty:TType) = | _ -> false // Note: This equivalence relation is modulo type abbreviations. The hash is less than perfect. - override x.GetHashCode() = + override _.GetHashCode() = let rec hashType ty = let ty = stripTyEqnsWrtErasure EraseNone cenv.g ty match ty with @@ -2291,15 +2438,25 @@ type FSharpType(cenv, ty:TType) = | TType_anon (_,l1) -> 10800 + List.sumBy hashType l1 hashType ty - member x.Format(context: FSharpDisplayContext) = + member _.Format(context: FSharpDisplayContext) = protect <| fun () -> - NicePrint.prettyStringOfTyNoCx (context.Contents cenv.g) ty + NicePrint.prettyStringOfTyNoCx (context.Contents cenv.g) ty + + member _.FormatWithConstraints(context: FSharpDisplayContext) = + protect <| fun () -> + NicePrint.prettyStringOfTy (context.Contents cenv.g) ty - member x.FormatLayout(context: FSharpDisplayContext) = + member _.FormatLayout(context: FSharpDisplayContext) = protect <| fun () -> - NicePrint.prettyLayoutOfTypeNoCx (context.Contents cenv.g) ty + NicePrint.prettyLayoutOfTypeNoCx (context.Contents cenv.g) ty + |> LayoutRender.toArray - override x.ToString() = + member _.FormatLayoutWithConstraints(context: FSharpDisplayContext) = + protect <| fun () -> + NicePrint.prettyLayoutOfType (context.Contents cenv.g) ty + |> LayoutRender.toArray + + override _.ToString() = protect <| fun () -> "type " + NicePrint.prettyStringOfTyNoCx (DisplayEnv.Empty(cenv.g)) ty @@ -2349,6 +2506,11 @@ type FSharpType(cenv, ty:TType) = let ps = (xs, prettyTys) ||> List.map2 (List.map2 (fun p pty -> p.AdjustType pty)) |> List.map makeReadOnlyCollection |> makeReadOnlyCollection ps, returnParameter.AdjustType prettyRetTy + member x.StripAbbreviations() = + if x.IsAbbreviation then + x.AbbreviatedType.StripAbbreviations() + else x + type FSharpAttribute(cenv: SymbolEnv, attrib: AttribInfo) = let rec resolveArgObj (arg: obj) = @@ -2378,7 +2540,7 @@ type FSharpAttribute(cenv: SymbolEnv, attrib: AttribInfo) = | AttribInfo.FSAttribInfo(g, attrib) -> NicePrint.stringOfFSAttrib (context.Contents g) attrib | AttribInfo.ILAttribInfo (g, _, _scoref, cattr, _) -> - let parms, _args = decodeILAttribData g.ilg cattr + let parms, _args = decodeILAttribData cattr NicePrint.stringOfILAttrib (context.Contents g) (cattr.Method.DeclaringType, parms) member _.Range = attrib.Range @@ -2386,6 +2548,10 @@ type FSharpAttribute(cenv: SymbolEnv, attrib: AttribInfo) = override _.ToString() = if entityIsUnresolved attrib.TyconRef then "attribute ???" else "attribute " + attrib.TyconRef.CompiledName + "(...)" + member attr.IsAttribute<'T> () = + // CompiledName throws exception on DataContractAttribute generated by SQLProvider + try attr.AttributeType.CompiledName = typeof<'T>.Name with _ -> false + #if !NO_EXTENSIONTYPING type FSharpStaticParameter(cenv, sp: Tainted< ExtensionTyping.ProvidedParameterInfo >, m) = inherit FSharpSymbol(cenv, @@ -2468,7 +2634,7 @@ type FSharpParameter(cenv, paramTy: TType, topArgInfo: ArgReprInfo, ownerOpt, ow | Some (ArgumentContainer.Method minfo) -> Some (FSharpMemberOrFunctionOrValue (cenv, minfo) :> FSharpSymbol) | _ -> None - member _.Attributes = + override _.Attributes = topArgInfo.Attribs |> List.map (fun a -> FSharpAttribute(cenv, AttribInfo.FSAttribInfo(cenv.g, a))) |> makeReadOnlyCollection member _.IsParamArrayArg = isParamArrayArg @@ -2551,6 +2717,8 @@ type FSharpAssemblySignature (cenv, topAttribs: TopAttribs option, optViewedCcu: |> Option.map (fun e -> FSharpEntity(cenv, rescopeEntity optViewedCcu e)) | _ -> None + member x.TryGetEntities() = try x.Entities :> _ seq with _ -> Seq.empty + override x.ToString() = "" type FSharpAssembly internal (cenv, ccu: CcuThunk) = @@ -2562,8 +2730,6 @@ type FSharpAssembly internal (cenv, ccu: CcuThunk) = member _.QualifiedName = match ccu.QualifiedName with None -> "" | Some s -> s - member _.CodeLocation = ccu.SourceCodeDirectory - member _.FileName = ccu.FileName member _.SimpleName = ccu.AssemblyName @@ -2610,64 +2776,3 @@ type FSharpOpenDeclaration(target: SynOpenDeclTarget, range: range option, modul member _.IsOwnNamespace = isOwnNamespace -[] -type FSharpSymbolUse(g:TcGlobals, denv: DisplayEnv, symbol:FSharpSymbol, itemOcc, range: range) = - - member _.Symbol = symbol - - member _.DisplayContext = FSharpDisplayContext(fun _ -> denv) - - member x.IsDefinition = x.IsFromDefinition - - member _.IsFromDefinition = itemOcc = ItemOccurence.Binding - - member _.IsFromPattern = itemOcc = ItemOccurence.Pattern - - member _.IsFromType = itemOcc = ItemOccurence.UseInType - - member _.IsFromAttribute = itemOcc = ItemOccurence.UseInAttribute - - member _.IsFromDispatchSlotImplementation = itemOcc = ItemOccurence.Implemented - - member _.IsFromComputationExpression = - match symbol.Item, itemOcc with - // 'seq' in 'seq { ... }' gets colored as keywords - | (Item.Value vref), ItemOccurence.Use when valRefEq g g.seq_vref vref -> true - // custom builders, custom operations get colored as keywords - | (Item.CustomBuilder _ | Item.CustomOperation _), ItemOccurence.Use -> true - | _ -> false - - member _.IsFromOpenStatement = itemOcc = ItemOccurence.Open - - member _.FileName = range.FileName - - member _.Range = Range.toZ range - - member _.RangeAlternate = range - - member this.IsPrivateToFile = - let isPrivate = - match this.Symbol with - | :? FSharpMemberOrFunctionOrValue as m -> not m.IsModuleValueOrMember || m.Accessibility.IsPrivate - | :? FSharpEntity as m -> m.Accessibility.IsPrivate - | :? FSharpGenericParameter -> true - | :? FSharpUnionCase as m -> m.Accessibility.IsPrivate - | :? FSharpField as m -> m.Accessibility.IsPrivate - | _ -> false - - let declarationLocation = - match this.Symbol.SignatureLocation with - | Some x -> Some x - | _ -> - match this.Symbol.DeclarationLocation with - | Some x -> Some x - | _ -> this.Symbol.ImplementationLocation - - let declaredInTheFile = - match declarationLocation with - | Some declRange -> declRange.FileName = this.RangeAlternate.FileName - | _ -> false - - isPrivate && declaredInTheFile - - override _.ToString() = sprintf "%O, %O, %O" symbol itemOcc range diff --git a/src/fsharp/symbols/Symbols.fsi b/src/fsharp/symbols/Symbols.fsi index d180c9697b1..ba09617f18b 100644 --- a/src/fsharp/symbols/Symbols.fsi +++ b/src/fsharp/symbols/Symbols.fsi @@ -1,8 +1,9 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace rec FSharp.Compiler.SourceCodeServices +namespace rec FSharp.Compiler.Symbols open System.Collections.Generic +open System.Collections.Immutable open FSharp.Compiler open FSharp.Compiler.AccessibilityLogic @@ -11,8 +12,9 @@ open FSharp.Compiler.CompilerImports open FSharp.Compiler.Import open FSharp.Compiler.InfoReader open FSharp.Compiler.NameResolution -open FSharp.Compiler.Range -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Text open FSharp.Compiler.TypedTree open FSharp.Compiler.TypedTreeOps open FSharp.Compiler.TcGlobals @@ -20,9 +22,13 @@ open FSharp.Compiler.TcGlobals // Implementation details used by other code in the compiler type internal SymbolEnv = new: TcGlobals * thisCcu: CcuThunk * thisCcuTyp: ModuleOrNamespaceType option * tcImports: TcImports -> SymbolEnv + new: TcGlobals * thisCcu: CcuThunk * thisCcuTyp: ModuleOrNamespaceType option * tcImports: TcImports * amap: ImportMap * infoReader: InfoReader -> SymbolEnv + member amap: ImportMap + member g: TcGlobals + member tcValF: ConstraintSolver.TcValF /// Indicates the accessibility of a symbol, as seen by the F# language @@ -44,7 +50,6 @@ type FSharpAccessibility = /// The underlying Accessibility member internal Contents: Accessibility - /// Represents the information needed to format types and other information in a style /// suitable for use in F# source text at a particular source location. /// @@ -69,7 +74,7 @@ type FSharpDisplayContext = /// The subtype of the symbol may reveal further information and can be one of FSharpEntity, FSharpUnionCase /// FSharpField, FSharpGenericParameter, FSharpStaticParameter, FSharpMemberOrFunctionOrValue, FSharpParameter, /// or FSharpActivePatternCase. -[] +[] type FSharpSymbol = static member internal Create: g: TcGlobals * thisCcu: CcuThunk * thisCcuTyp: ModuleOrNamespaceType * tcImports: TcImports * item: NameResolution.Item -> FSharpSymbol static member internal Create: cenv: SymbolEnv * item: NameResolution.Item -> FSharpSymbol @@ -112,7 +117,17 @@ type FSharpSymbol = member IsExplicitlySuppressed: bool - static member GetAccessibility: FSharpSymbol -> FSharpAccessibility option + /// Get the declared accessibility of the symbol, if any + abstract Accessibility: FSharpAccessibility + + /// Get the attributes for the symbol, if any + abstract Attributes: IList + + /// Try to get an attribute matching the full name of the given type parameter + member TryGetAttribute<'T> : unit -> FSharpAttribute option + + /// Indicates if this symbol has an attribute matching the full name of the given type parameter + member HasAttribute<'T> : unit -> bool /// Represents an assembly as seen by the F# language type FSharpAssembly = @@ -122,9 +137,6 @@ type FSharpAssembly = /// The qualified name of the assembly member QualifiedName: string - [] - member CodeLocation: string - /// The contents of the this assembly member Contents: FSharpAssemblySignature @@ -153,6 +165,8 @@ type FSharpAssemblySignature = /// Find entity using compiled names member FindEntityByPath: string list -> FSharpEntity option + /// Safe version of `Entities`. + member TryGetEntities : unit -> seq /// A subtype of FSharpSymbol that represents a type definition or module as seen by the F# language type FSharpEntity = @@ -270,12 +284,8 @@ type FSharpEntity = /// Indicates if the entity is a part of a namespace path member IsNamespace: bool - /// Get the in-memory XML documentation for the entity, used when code is checked in-memory - member XmlDoc: IList - - /// Get the elaborated XML documentation for the entity, used when code is checked in-memory, - /// after any checking and processing to XML performed by the F# compiler - member ElaboratedXmlDoc: IList + /// Get the XML documentation for the entity + member XmlDoc: FSharpXmlDoc /// Get the XML documentation signature for the entity, used for .xml file lookup for compiled code member XmlDocSig: string @@ -288,7 +298,7 @@ type FSharpEntity = member UsesPrefixDisplay: bool /// Get the declared attributes for the type - member Attributes: IList + override Attributes: IList /// Get the declared interface implementations member DeclaredInterfaces: IList @@ -305,9 +315,6 @@ type FSharpEntity = /// Get the properties, events and methods of a type definitions, or the functions and values of a module member MembersFunctionsAndValues: IList - [] - member MembersOrValues: IList - /// Get the modules and types defined in a module, or the nested types of a type member NestedEntities: IList @@ -316,9 +323,6 @@ type FSharpEntity = /// For classes, the list may include compiler generated fields implied by the use of primary constructors. member FSharpFields: IList - [] - member RecordFields: IList - /// Get the type abbreviated by an F# type abbreviation member AbbreviatedType: FSharpType @@ -329,7 +333,7 @@ type FSharpEntity = member FSharpDelegateSignature: FSharpDelegateSignature /// Get the declared accessibility of the type - member Accessibility: FSharpAccessibility + override Accessibility: FSharpAccessibility /// Get the declared accessibility of the representation, not taking signatures into account member RepresentationAccessibility: FSharpAccessibility @@ -340,6 +344,24 @@ type FSharpEntity = /// Get all active pattern cases defined in all active patterns in the module. member ActivePatternCases: FSharpActivePatternCase list + /// Safe version of `FullName`. + member TryGetFullName: unit -> string option + + /// Safe version of `DisplayName`. + member TryGetFullDisplayName: unit -> string option + + /// Safe version of `CompiledName`. + member TryGetFullCompiledName: unit -> string option + + /// Public nested entities (methods, functions, values, nested modules). + member GetPublicNestedEntities: unit -> seq + + /// Safe version of `GetMembersFunctionsAndValues`. + member TryGetMembersFunctionsAndValues: unit -> IList + + /// Get the source text of the entity's signature to be used as metadata. + member TryGetMetadataText: unit -> ISourceText option + /// Represents a delegate signature in an F# symbol [] type FSharpDelegateSignature = @@ -410,7 +432,7 @@ type FSharpUnionCase = member HasFields: bool /// Get the data carried by the case. - member UnionCaseFields: IList + member Fields: IList /// Get the type constructed by the case. Normally exactly the type of the enclosing type, sometimes an abbreviation of it member ReturnType: FSharpType @@ -418,21 +440,17 @@ type FSharpUnionCase = /// Get the name of the case in generated IL code member CompiledName: string - /// Get the in-memory XML documentation for the union case, used when code is checked in-memory - member XmlDoc: IList - - /// Get the elaborated XML documentation for the union case, used when code is checked in-memory, - /// after any checking and processing to XML performed by the F# compiler - member ElaboratedXmlDoc: IList + /// Get the XML documentation for the entity + member XmlDoc: FSharpXmlDoc /// Get the XML documentation signature for .xml file lookup for the union case, used for .xml file lookup for compiled code member XmlDocSig: string /// Indicates if the declared visibility of the union constructor, not taking signatures into account - member Accessibility: FSharpAccessibility + override Accessibility: FSharpAccessibility /// Get the attributes for the case, attached to the generated static method to make instances of the case - member Attributes: IList + override Attributes: IList /// Indicates if the union case is for a type in an unresolved assembly member IsUnresolved: bool @@ -498,12 +516,8 @@ type FSharpField = /// This API returns true for source defined symbols only. member IsNameGenerated: bool - /// Get the in-memory XML documentation for the field, used when code is checked in-memory - member XmlDoc: IList - - /// Get the elaborated XML documentation for the field, used when code is checked in-memory, - /// after any checking and processing to XML performed by the F# compiler - member ElaboratedXmlDoc: IList + /// Get the XML documentation for the entity + member XmlDoc: FSharpXmlDoc /// Get the XML documentation signature for .xml file lookup for the field, used for .xml file lookup for compiled code member XmlDocSig: string @@ -527,7 +541,7 @@ type FSharpField = member LiteralValue: obj option /// Indicates if the declared visibility of the field, not taking signatures into account - member Accessibility: FSharpAccessibility + override Accessibility: FSharpAccessibility /// Indicates if the record field is for a type in an unresolved assembly member IsUnresolved: bool @@ -554,12 +568,8 @@ type FSharpGenericParameter = /// Indicates if this is a measure variable member IsMeasure: bool - /// Get the in-memory XML documentation for the type parameter, used when code is checked in-memory - member XmlDoc: IList - - /// Get the elaborated XML documentation for the type parameter, used when code is checked in-memory, - /// after any checking and processing to XML performed by the F# compiler - member ElaboratedXmlDoc: IList + /// Get the XML documentation for the entity + member XmlDoc: FSharpXmlDoc /// Indicates if this is a statically resolved type variable member IsSolveAtCompileTime: bool @@ -568,7 +578,7 @@ type FSharpGenericParameter = member IsCompilerGenerated: bool /// Get the declared attributes of the type parameter. - member Attributes: IList + override Attributes: IList /// Get the declared or inferred constraints for the type parameter member Constraints: IList @@ -762,9 +772,6 @@ type FSharpMemberOrFunctionOrValue = /// Indicates if this is an extension member? member IsExtensionMember: bool - [] - member IsOverrideOrExplicitMember: bool - /// Indicates if this is an 'override', 'default' or an explicit implementation of an interface member member IsOverrideOrExplicitInterfaceImplementation: bool @@ -819,14 +826,6 @@ type FSharpMemberOrFunctionOrValue = /// Indicates if this is an abstract member? member IsDispatchSlot: bool - /// Indicates if this is a getter method for a property, or a use of a property in getter mode - [] - member IsGetterMethod: bool - - /// Indicates if this is a setter method for a property, or a use of a property in setter mode - [] - member IsSetterMethod: bool - /// Indicates if this is a getter method for a property, or a use of a property in getter mode member IsPropertyGetterMethod: bool @@ -868,22 +867,21 @@ type FSharpMemberOrFunctionOrValue = member CurriedParameterGroups: IList> - /// Gets the overloads for the current method - /// matchParameterNumber indicates whether to filter the overloads to match the number of parameters in the current symbol - member Overloads: bool -> IList option + /// Gets the overloads for the current method. + /// + /// + /// Indicates whether to filter the overloads to match the number of parameters in the current symbol + /// + member GetOverloads: matchParameterNumber: bool -> IList option member ReturnParameter: FSharpParameter /// Custom attributes attached to the value. These contain references to other values (i.e. constructors in types). Mutable to fixup /// these value references after copying a collection of values. - member Attributes: IList + override Attributes: IList - /// Get the in-memory XML documentation for the value, used when code is checked in-memory - member XmlDoc: IList - - /// Get the elaborated XML documentation for the value, used when code is checked in-memory, - /// after any checking and processing to XML performed by the F# compiler - member ElaboratedXmlDoc: IList + /// Get the XML documentation for the entity + member XmlDoc: FSharpXmlDoc /// XML documentation signature for the value, used for .xml file lookup for compiled code member XmlDocSig: string @@ -901,10 +899,13 @@ type FSharpMemberOrFunctionOrValue = member LiteralValue: obj option /// Get the accessibility information for the member, function or value - member Accessibility: FSharpAccessibility + override Accessibility: FSharpAccessibility /// Indicated if this is a value compiled to a method member IsValCompiledAsMethod: bool + + /// Indicates if this is a function + member IsFunction: bool /// Indicated if this is a value member IsValue: bool @@ -913,12 +914,21 @@ type FSharpMemberOrFunctionOrValue = member IsConstructor: bool /// Format the type using the rules of the given display context - member FormatLayout: context: FSharpDisplayContext -> Layout + member FormatLayout: context: FSharpDisplayContext -> TaggedText[] /// Check if this method has an entrpoint that accepts witness arguments and if so return /// the name of that entrypoint and information about the additional witness arguments member GetWitnessPassingInfo: unit -> (string * IList) option + /// Safe version of `FullType`. + member FullTypeSafe : FSharpType option + + /// Full name with last part replaced with display name. + member TryGetFullDisplayName : unit -> string option + + /// Full operator compiled name. + member TryGetFullCompiledOperatorNameIdents : unit -> string[] option + /// A subtype of FSharpSymbol that represents a parameter [] type FSharpParameter = @@ -935,7 +945,7 @@ type FSharpParameter = member Type: FSharpType /// The declared attributes of the parameter - member Attributes: IList + override Attributes: IList /// Indicate this is a param array argument member IsParamArrayArg: bool @@ -968,12 +978,8 @@ type FSharpActivePatternCase = /// The group of active pattern cases this belongs to member Group: FSharpActivePatternGroup - /// Get the in-memory XML documentation for the active pattern case, used when code is checked in-memory - member XmlDoc: IList - - /// Get the elaborated XML documentation for the active pattern case, used when code is checked in-memory, - /// after any checking and processing to XML performed by the F# compiler - member ElaboratedXmlDoc: IList + /// Get the XML documentation for the entity + member XmlDoc: FSharpXmlDoc /// XML documentation signature for the active pattern case, used for .xml file lookup for compiled code member XmlDocSig: string @@ -1043,11 +1049,17 @@ type FSharpType = /// Get the generic parameter data for a generic parameter type member GenericParameter: FSharpGenericParameter - /// Format the type using the rules of the given display context + /// Format the type using the rules of the given display context, skipping type constraints member Format: context: FSharpDisplayContext -> string + /// Format the type using the rules of the given display context + member FormatWithConstraints: context: FSharpDisplayContext -> string + /// Format the type using the rules of the given display context - member FormatLayout: context: FSharpDisplayContext -> Layout + member FormatLayout: context: FSharpDisplayContext -> TaggedText[] + + /// Format the type - with constraints - using the rules of the given display context + member FormatLayoutWithConstraints: context: FSharpDisplayContext -> TaggedText[] /// Instantiate generic type parameters in a type member Instantiate: (FSharpGenericParameter * FSharpType) list -> FSharpType @@ -1084,12 +1096,8 @@ type FSharpType = /// systematically with lower-case type inference variables such as 'a. static member Prettify: parameters: IList> * returnParameter: FSharpParameter -> IList> * FSharpParameter - [] - member IsNamedType: bool - - [] - member NamedEntity: FSharpEntity - + /// Strip any outer abbreviations from the type + member StripAbbreviations: unit -> FSharpType /// Represents a custom attribute attached to F# source code or a compiler .NET component [] @@ -1113,6 +1121,9 @@ type FSharpAttribute = /// Get the range of the name of the attribute member Range: range + /// Indicates if attribute matchies the full name of the given type parameter + member IsAttribute<'T> : unit -> bool + /// Represents open declaration in F# code. [] type FSharpOpenDeclaration = @@ -1139,47 +1150,3 @@ type FSharpOpenDeclaration = /// If it's `namespace Xxx.Yyy` declaration. member IsOwnNamespace: bool - -/// Represents the use of an F# symbol from F# source code -[] -type FSharpSymbolUse = - - // For internal use only - internal new: g:TcGlobals * denv: DisplayEnv * symbol:FSharpSymbol * itemOcc:ItemOccurence * range: range -> FSharpSymbolUse - - /// The symbol referenced - member Symbol: FSharpSymbol - - /// The display context active at the point where the symbol is used. Can be passed to FSharpType.Format - /// and other methods to format items in a way that is suitable for a specific source code location. - member DisplayContext: FSharpDisplayContext - - /// Indicates if the reference is a definition for the symbol, either in a signature or implementation - member IsFromDefinition: bool - - /// Indicates if the reference is in a pattern - member IsFromPattern: bool - - /// Indicates if the reference is in a syntactic type - member IsFromType: bool - - /// Indicates if the reference is in an attribute - member IsFromAttribute: bool - - /// Indicates if the reference is via the member being implemented in a class or object expression - member IsFromDispatchSlotImplementation: bool - - /// Indicates if the reference is either a builder or a custom operation in a computation expression - member IsFromComputationExpression: bool - - /// Indicates if the reference is in open statement - member IsFromOpenStatement: bool - - /// The file name the reference occurs in - member FileName: string - - /// The range of text representing the reference to the symbol - member RangeAlternate: range - - /// Indicates if the FSharpSymbolUse is declared as private - member IsPrivateToFile: bool diff --git a/src/fsharp/tainted.fs b/src/fsharp/tainted.fs index be352384b57..32bf469600e 100644 --- a/src/fsharp/tainted.fs +++ b/src/fsharp/tainted.fs @@ -5,10 +5,11 @@ namespace FSharp.Compiler #if !NO_EXTENSIONTYPING open System -open FSharp.Compiler.Range -open Microsoft.FSharp.Core.CompilerServices +open Internal.Utilities.Library +open FSharp.Core.CompilerServices open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range [] type internal TypeProviderToken() = interface LockToken @@ -19,26 +20,26 @@ type internal TypeProviderLock() = type internal TypeProviderError ( - errNum : int, - tpDesignation : string, - m:FSharp.Compiler.Range.range, - errors : string list, - typeNameContext : string option, - methodNameContext : string option + errNum: int, + tpDesignation: string, + m: range, + errors: string list, + typeNameContext: string option, + methodNameContext: string option ) = - inherit System.Exception() + inherit Exception() - new((errNum, msg : string), tpDesignation,m) = + new((errNum, msg: string), tpDesignation,m) = TypeProviderError(errNum, tpDesignation, m, [msg]) - new(errNum, tpDesignation, m, messages : seq) = + new(errNum, tpDesignation, m, messages: seq) = TypeProviderError(errNum, tpDesignation, m, List.ofSeq messages, None, None) - member this.Number = errNum - member this.Range = m + member _.Number = errNum + member _.Range = m - override this.Message = + override _.Message = match errors with | [text] -> text | inner -> @@ -47,11 +48,11 @@ type internal TypeProviderError inner |> String.concat Environment.NewLine - member this.MapText(f, tpDesignation, m) = - let (errNum : int), _ = f "" + member _.MapText(f, tpDesignation, m) = + let (errNum: int), _ = f "" new TypeProviderError(errNum, tpDesignation, m, (Seq.map (f >> snd) errors)) - member this.WithContext(typeNameContext:string, methodNameContext:string) = + member _.WithContext(typeNameContext:string, methodNameContext:string) = new TypeProviderError(errNum, tpDesignation, m, errors, Some typeNameContext, Some methodNameContext) // .Message is just the error, whereas .ContextualErrorMessage has contextual prefix information @@ -76,10 +77,10 @@ type internal TypeProviderError for msg in errors do f (new TypeProviderError(errNum, tpDesignation, m, [msg], typeNameContext, methodNameContext)) -type TaintedContext = { TypeProvider : ITypeProvider; TypeProviderAssemblyRef : ILScopeRef; Lock: TypeProviderLock } +type TaintedContext = { TypeProvider: ITypeProvider; TypeProviderAssemblyRef: ILScopeRef; Lock: TypeProviderLock } [][] -type internal Tainted<'T> (context : TaintedContext, value : 'T) = +type internal Tainted<'T> (context: TaintedContext, value: 'T) = do match box context.TypeProvider with | null -> @@ -87,10 +88,10 @@ type internal Tainted<'T> (context : TaintedContext, value : 'T) = failwith "null ITypeProvider in Tainted constructor" | _ -> () - member this.TypeProviderDesignation = + member _.TypeProviderDesignation = context.TypeProvider.GetType().FullName - member this.TypeProviderAssemblyRef = + member _.TypeProviderAssemblyRef = context.TypeProviderAssemblyRef member this.Protect f (range:range) = @@ -136,7 +137,6 @@ type internal Tainted<'T> (context : TaintedContext, value : 'T) = | null -> raise <| TypeProviderError(FSComp.SR.etProviderReturnedNull(methodName), this.TypeProviderDesignation, range) | _ -> a |> Array.map (fun u -> Tainted(context,u)) - member this.PApplyOption(f,range:range) = let a = this.Protect f range match a with @@ -148,7 +148,7 @@ type internal Tainted<'T> (context : TaintedContext, value : 'T) = /// Access the target object directly. Use with extreme caution. member this.AccessObjectDirectly = value - static member CreateAll(providerSpecs : (ITypeProvider * ILScopeRef) list) = + static member CreateAll(providerSpecs: (ITypeProvider * ILScopeRef) list) = [for (tp,nm) in providerSpecs do yield Tainted<_>({ TypeProvider=tp; TypeProviderAssemblyRef=nm; Lock=TypeProviderLock() },tp) ] diff --git a/src/fsharp/tainted.fsi b/src/fsharp/tainted.fsi index 9b1e8cb2198..06127f5a622 100644 --- a/src/fsharp/tainted.fsi +++ b/src/fsharp/tainted.fsi @@ -4,13 +4,10 @@ namespace FSharp.Compiler #if !NO_EXTENSIONTYPING - -open System -open System.Reflection -open Microsoft.FSharp.Core.CompilerServices -open FSharp.Compiler.Range +open Internal.Utilities.Library +open FSharp.Core.CompilerServices open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.Text [] type internal TypeProviderToken = @@ -100,7 +97,6 @@ type internal Tainted<'T> = /// If coercion fails, the failure will be blamed on a type provider member Coerce<'U> : range:range -> Tainted<'U> - [] module internal Tainted = diff --git a/src/fsharp/utils/CompilerLocationUtils.fs b/src/fsharp/utils/CompilerLocationUtils.fs index 5bff0b5930d..ec674dfc681 100644 --- a/src/fsharp/utils/CompilerLocationUtils.fs +++ b/src/fsharp/utils/CompilerLocationUtils.fs @@ -10,10 +10,12 @@ open System.Runtime.InteropServices open Microsoft.Win32 open Microsoft.FSharp.Core -#nowarn "44" // ConfigurationSettings is obsolete but the new stuff is horribly complicated. +#nowarn "44" // ConfigurationSettings is obsolete but the new stuff is horribly complicated. module internal FSharpEnvironment = + type private TypeInThisAssembly = class end + /// The F# version reported in the banner let FSharpBannerVersion = UtilsStrings.SR.fSharpBannerVersion(FSharp.BuildProperties.fsProductVersion, FSharp.BuildProperties.fsLanguageVersion) @@ -29,7 +31,7 @@ module internal FSharpEnvironment = | s -> Some(s) with _ -> None - // The F# binary format revision number. The first three digits of this form the significant part of the + // The F# binary format revision number. The first three digits of this form the significant part of the // format revision number for F# binary signature and optimization metadata. The last digit is not significant. // // WARNING: Do not change this revision number unless you absolutely know what you're doing. @@ -48,13 +50,13 @@ module internal FSharpEnvironment = [] extern uint32 RegCloseKey(UIntPtr _hKey) #endif - module Option = + module Option = /// Convert string into Option string where null and String.Empty result in None - let ofString s = + let ofString s = if String.IsNullOrEmpty(s) then None else Some(s) - // MaxPath accounts for the null-terminating character, for example, the maximum path on the D drive is "D:\<256 chars>\0". + // MaxPath accounts for the null-terminating character, for example, the maximum path on the D drive is "D:\<256 chars>\0". // See: ndp\clr\src\BCL\System\IO\Path.cs let maxPath = 260; let maxDataLength = (new System.Text.UTF32Encoding()).GetMaxByteCount(maxPath) @@ -76,11 +78,11 @@ module internal FSharpEnvironment = #endif null) - let Get32BitRegistryStringValueViaPInvoke(subKey:string) = + let Get32BitRegistryStringValueViaPInvoke(subKey:string) = Option.ofString - (try + (try // 64 bit flag is not available <= Win2k - let options = + let options = let hasWow6432Node = use x = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node") x <> null @@ -104,14 +106,14 @@ module internal FSharpEnvironment = if (res = 0u && cbData > 0 && cbData <= maxDataLength) then Marshal.PtrToStringUni(pathResult, (cbData - 2)/2); - else + else null else null finally if hkey <> UIntPtr.Zero then RegCloseKey(hkey) |> ignore - + if pathResult <> IntPtr.Zero then Marshal.FreeCoTaskMem(pathResult) with e-> @@ -124,10 +126,10 @@ module internal FSharpEnvironment = let runningOnMono = try System.Type.GetType("Mono.Runtime") <> null with e-> false - let tryRegKey(subKey:string) = + let tryRegKey(subKey:string) = //if we are running on mono simply return None - // GetDefaultRegistryStringValueViaDotNet will result in an access denied by default, + // GetDefaultRegistryStringValueViaDotNet will result in an access denied by default, // and Get32BitRegistryStringValueViaPInvoke will fail due to Advapi32.dll not existing if runningOnMono then None else if is32Bit then @@ -140,7 +142,7 @@ module internal FSharpEnvironment = #endif s else - Get32BitRegistryStringValueViaPInvoke(subKey) + Get32BitRegistryStringValueViaPInvoke(subKey) #endif let internal tryCurrentDomain() = @@ -154,12 +156,12 @@ module internal FSharpEnvironment = #if FX_NO_SYSTEM_CONFIGURATION let internal tryAppConfig (_appConfigKey:string) = None #else - let internal tryAppConfig (_appConfigKey:string) = + let internal tryAppConfig (_appConfigKey:string) = let locationFromAppConfig = System.Configuration.ConfigurationSettings.AppSettings.[_appConfigKey] #if DEBUG - Debug.Print(sprintf "Considering _appConfigKey %s which has value '%s'" _appConfigKey locationFromAppConfig) + Debug.Print(sprintf "Considering _appConfigKey %s which has value '%s'" _appConfigKey locationFromAppConfig) #endif - if String.IsNullOrEmpty(locationFromAppConfig) then + if String.IsNullOrEmpty(locationFromAppConfig) then None else let exeAssemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) @@ -194,8 +196,8 @@ module internal FSharpEnvironment = let safeExists f = (try File.Exists(f) with _ -> false) // Look in the probePoint if given, e.g. look for a compiler alongside of FSharp.Build.dll - match probePoint with - | Some p when safeExists (Path.Combine(p,"FSharp.Core.dll")) -> Some p + match probePoint with + | Some p when safeExists (Path.Combine(p,"FSharp.Core.dll")) -> Some p | _ -> // For the prototype compiler, we can just use the current domain tryCurrentDomain() @@ -206,13 +208,13 @@ module internal FSharpEnvironment = // The reg key is disposed at the end of the scope. let useKey subKey f = let key = Registry.LocalMachine.OpenSubKey subKey - try f key - finally - match key with - | null -> () + try f key + finally + match key with + | null -> () | _ -> key.Dispose() - // Check if the framework version 4.5 or above is installed at the given key entry + // Check if the framework version 4.5 or above is installed at the given key entry let IsNetFx45OrAboveInstalledAt subKey = try useKey subKey (fun regKey -> @@ -220,17 +222,17 @@ module internal FSharpEnvironment = | null -> false | _ -> regKey.GetValue("Release", 0) :?> int |> (fun s -> s >= 0x50000)) // 0x50000 implies 4.5.0 with _ -> false - + // Check if the framework version 4.5 or above is installed let IsNetFx45OrAboveInstalled = IsNetFx45OrAboveInstalledAt @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client" || IsNetFx45OrAboveInstalledAt @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" || runningOnMono - + // Check if the running framework version is 4.5 or above. // Use the presence of v4.5.x in the registry to distinguish between 4.0 and 4.5 let IsRunningOnNetFx45OrAbove = - let version = new Version(versionOf) + let version = new Version(versionOf) let major = version.Major major > 4 || (major = 4 && IsNetFx45OrAboveInstalled) @@ -251,7 +253,7 @@ module internal FSharpEnvironment = if typeof.Assembly.GetName().Name = "mscorlib" then [| "net48"; "net472"; "net471";"net47";"net462";"net461"; "net452"; "net451"; "net45"; "netstandard2.0" |] elif typeof.Assembly.GetName().Name = "System.Private.CoreLib" then - [| "netcoreapp3.1"; "netcoreapp3.0"; "netstandard2.1"; "netcoreapp2.2"; "netcoreapp2.1"; "netcoreapp2.0"; "netstandard2.0" |] + [| "net5.0"; "netcoreapp3.1"; "netcoreapp3.0"; "netstandard2.1"; "netcoreapp2.2"; "netcoreapp2.1"; "netcoreapp2.0"; "netstandard2.0" |] else System.Diagnostics.Debug.Assert(false, "Couldn't determine runtime tooling context, assuming it supports at least .NET Standard 2.0") [| "netstandard2.0" |] @@ -265,15 +267,15 @@ module internal FSharpEnvironment = yield Path.Combine(toolPath, protocol, netRuntime) ] - let rec searchToolPaths path compilerToolPaths = + let searchToolPath compilerToolPath = seq { - let searchToolPath path = - seq { - yield path - for toolPath in toolingCompatiblePaths() do - yield Path.Combine (path, toolPath) - } + yield compilerToolPath + for toolPath in toolingCompatiblePaths() do + yield Path.Combine (compilerToolPath, toolPath) + } + let rec searchToolPaths path compilerToolPaths = + seq { for toolPath in compilerToolPaths do yield! searchToolPath toolPath @@ -324,7 +326,7 @@ module internal FSharpEnvironment = // string specification. The Name=FullName comparison is particularly strange, and was there to support // design-time DLLs specified using "x.DesignTIme, Version= ..." long assembly names and GAC loads. // These kind of design-time assembly specifications are no longer used to our knowledge so that comparison is basically legacy - // and will always succeed. + // and will always succeed. let name = AssemblyName (Path.GetFileNameWithoutExtension designTimeAssemblyName) if name.Name.Equals(name.FullName, StringComparison.OrdinalIgnoreCase) then let designTimeFileName = designTimeAssemblyName + ".dll" @@ -338,5 +340,110 @@ module internal FSharpEnvironment = with e -> raiseError None e - let getCompilerToolsDesignTimeAssemblyPaths compilerToolPaths = + let getCompilerToolsDesignTimeAssemblyPaths compilerToolPaths = searchToolPaths None compilerToolPaths + + let getFSharpCoreLibraryName = "FSharp.Core" + let fsiLibraryName = "FSharp.Compiler.Interactive.Settings" + + let getFSharpCompilerLocation() = + let location = Path.GetDirectoryName(typeof.Assembly.Location) + match BinFolderOfDefaultFSharpCompiler (Some location) with + | Some path -> path + | None -> + #if DEBUG + Debug.Print(sprintf """FSharpEnvironment.BinFolderOfDefaultFSharpCompiler (Some '%s') returned None Location + customized incorrectly: algorithm here: https://github.com/dotnet/fsharp/blob/03f3f1c35f82af26593d025dabca57a6ef3ea9a1/src/utils/CompilerLocationUtils.fs#L171""" + location) + #endif + // Use the location of this dll + location + + let getDefaultFSharpCoreLocation() = Path.Combine(getFSharpCompilerLocation(), getFSharpCoreLibraryName + ".dll") + let getDefaultFsiLibraryLocation() = Path.Combine(getFSharpCompilerLocation(), fsiLibraryName + ".dll") + + // Path to the directory containing the fsharp compilers + let fsharpCompilerPath = Path.Combine(Path.GetDirectoryName(typeof.GetTypeInfo().Assembly.Location), "Tools") + + let isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) + + let dotnet = if isWindows then "dotnet.exe" else "dotnet" + + let fileExists pathToFile = + try + if File.Exists(pathToFile) then + true + else + false + with | _ -> false + + // Look for global install of dotnet sdk + let getDotnetGlobalHostPath() = + let pf = Environment.GetEnvironmentVariable("ProgramW6432") + let pf = if String.IsNullOrEmpty(pf) then Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) else pf + let candidate = Path.Combine(pf, "dotnet", dotnet) + if fileExists candidate then + Some candidate + else + // Can't find it --- give up + None + + let getDotnetHostPath() = + // How to find dotnet.exe --- woe is me; probing rules make me sad. + // Algorithm: + // 1. Look for DOTNET_HOST_PATH environment variable + // this is the main user programable override .. provided by user to find a specific dotnet.exe + // 2. Probe for are we part of an .NetSDK install + // In an sdk install we are always installed in: sdk\3.0.100-rc2-014234\FSharp + // dotnet or dotnet.exe will be found in the directory that contains the sdk directory + // 3. We are loaded in-process to some other application ... Eg. try .net + // See if the host is dotnet.exe ... from net5.0 on this is fairly unlikely + // 4. If it's none of the above we are going to have to rely on the path containing the way to find dotnet.exe + // Use the path to search for dotnet.exe + let probePathForDotnetHost() = + let paths = + let p = Environment.GetEnvironmentVariable("PATH") + if not(isNull p) then p.Split(Path.PathSeparator) + else [||] + paths |> Array.tryFind (fun f -> fileExists (Path.Combine(f, dotnet))) + + match (Environment.GetEnvironmentVariable("DOTNET_HOST_PATH")) with + // Value set externally + | value when not (String.IsNullOrEmpty(value)) && fileExists value -> Some value + | _ -> + // Probe for netsdk install, dotnet. and dotnet.exe is a constant offset from the location of System.Int32 + let candidate = + let assemblyLocation = Path.GetDirectoryName(typeof.GetTypeInfo().Assembly.Location) + Path.GetFullPath(Path.Combine(assemblyLocation, "..", "..", "..", dotnet)) + if fileExists candidate then + Some candidate + else + match probePathForDotnetHost () with + | Some f -> Some (Path.Combine(f, dotnet)) + | None -> getDotnetGlobalHostPath() + + let getDotnetHostDirectories() = + let isDotnetMultilevelLookup = (Int32.TryParse(Environment.GetEnvironmentVariable("DOTNET_MULTILEVEL_LOOKUP")) |> snd) <> 0 + [| + match getDotnetHostPath(), getDotnetGlobalHostPath() with + | Some hostPath, Some globalHostPath -> + yield Path.GetDirectoryName(hostPath) + if isDotnetMultilevelLookup && hostPath <> globalHostPath then + yield Path.GetDirectoryName(globalHostPath) + | Some hostPath, None -> + yield Path.GetDirectoryName(hostPath) + | None, Some globalHostPath -> + yield Path.GetDirectoryName(globalHostPath) + | None, None -> + () + |] + + let getDotnetHostDirectory() = getDotnetHostDirectories() |> Array.tryHead + + let getDotnetHostSubDirectories(path: string) = + [| + for directory in getDotnetHostDirectories() do + let subdirectory = Path.Combine(directory, path) + if Directory.Exists(subdirectory) then + yield! DirectoryInfo(subdirectory).GetDirectories() + |] diff --git a/src/fsharp/utils/CompilerLocationUtils.fsi b/src/fsharp/utils/CompilerLocationUtils.fsi index 3301f19f931..539c2a6e225 100644 --- a/src/fsharp/utils/CompilerLocationUtils.fsi +++ b/src/fsharp/utils/CompilerLocationUtils.fsi @@ -3,6 +3,7 @@ namespace Internal.Utilities open Microsoft.FSharp.Core +open System.IO module internal FSharpEnvironment = @@ -29,8 +30,7 @@ module internal FSharpEnvironment = val toolingCompatiblePaths: unit -> string list - val searchToolPaths: - path:string option -> compilerToolPaths:seq -> seq + val searchToolPaths: path:string option -> compilerToolPaths:seq -> seq val getTypeProviderAssembly: runTimeAssemblyFileName:string * @@ -39,4 +39,26 @@ module internal FSharpEnvironment = raiseError:(string option -> exn -> System.Reflection.Assembly option) -> System.Reflection.Assembly option - val getCompilerToolsDesignTimeAssemblyPaths: compilerToolPaths:seq -> seq \ No newline at end of file + val getFSharpCompilerLocation: unit -> string + + val getDefaultFSharpCoreLocation: unit -> string + + val getDefaultFsiLibraryLocation: unit -> string + + val getCompilerToolsDesignTimeAssemblyPaths: compilerToolPaths:seq -> seq + + val fsiLibraryName: string + + val getFSharpCoreLibraryName: string + + val isWindows: bool + + val dotnet: string + + val getDotnetHostPath: unit -> string option + + val getDotnetHostDirectories: unit -> string [] + + val getDotnetHostDirectory: unit -> string option + + val getDotnetHostSubDirectories: string -> DirectoryInfo [] diff --git a/src/fsharp/utils/FileSystem.fs b/src/fsharp/utils/FileSystem.fs new file mode 100644 index 00000000000..9346e6ab1a8 --- /dev/null +++ b/src/fsharp/utils/FileSystem.fs @@ -0,0 +1,949 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. +namespace FSharp.Compiler.IO +open System +open System.IO +open System.IO.MemoryMappedFiles +open System.Buffers +open System.Reflection +open System.Threading +open System.Runtime.InteropServices +open FSharp.NativeInterop +open Internal.Utilities.Library + +open System.Text + +exception IllegalFileNameChar of string * char + +#nowarn "9" +module internal Bytes = + let b0 n = (n &&& 0xFF) + let b1 n = ((n >>> 8) &&& 0xFF) + let b2 n = ((n >>> 16) &&& 0xFF) + let b3 n = ((n >>> 24) &&& 0xFF) + + let dWw1 n = int32 ((n >>> 32) &&& 0xFFFFFFFFL) + let dWw0 n = int32 (n &&& 0xFFFFFFFFL) + + let get (b:byte[]) n = int32 (Array.get b n) + let zeroCreate n : byte[] = Array.zeroCreate n + + let sub ( b:byte[]) s l = Array.sub b s l + let blit (a:byte[]) b c d e = Array.blit a b c d e + + let ofInt32Array (arr:int[]) = Array.init arr.Length (fun i -> byte arr.[i]) + + let stringAsUtf8NullTerminated (s:string) = + Array.append (Encoding.UTF8.GetBytes s) (ofInt32Array [| 0x0 |]) + + let stringAsUnicodeNullTerminated (s:string) = + Array.append (Encoding.Unicode.GetBytes s) (ofInt32Array [| 0x0;0x0 |]) + +[] +[] +type ByteMemory() = + abstract Item: int -> byte with get, set + abstract Length: int + abstract ReadAllBytes: unit -> byte[] + abstract ReadBytes: pos: int * count: int -> byte[] + abstract ReadInt32: pos: int -> int + abstract ReadUInt16: pos: int -> uint16 + abstract ReadUtf8String: pos: int * count: int -> string + abstract Slice: pos: int * count: int -> ByteMemory + abstract CopyTo: Stream -> unit + abstract Copy: srcOffset: int * dest: byte[] * destOffset: int * count: int -> unit + abstract ToArray: unit -> byte[] + abstract AsStream: unit -> Stream + abstract AsReadOnlyStream: unit -> Stream + +[] +[] +type ByteArrayMemory(bytes: byte[], offset, length) = + inherit ByteMemory() + + let checkCount count = + if count < 0 then + raise (ArgumentOutOfRangeException("count", "Count is less than zero.")) + + do + if length < 0 || length > bytes.Length then + raise (ArgumentOutOfRangeException("length")) + + if offset < 0 || (offset + length) > bytes.Length then + raise (ArgumentOutOfRangeException("offset")) + + override _.Item + with get i = bytes.[offset + i] + and set i v = bytes.[offset + i] <- v + + override _.Length = length + + override _.ReadAllBytes () = bytes + + override _.ReadBytes(pos, count) = + checkCount count + if count > 0 then + Array.sub bytes (offset + pos) count + else + Array.empty + + override _.ReadInt32 pos = + let finalOffset = offset + pos + (uint32 bytes.[finalOffset]) ||| + ((uint32 bytes.[finalOffset + 1]) <<< 8) ||| + ((uint32 bytes.[finalOffset + 2]) <<< 16) ||| + ((uint32 bytes.[finalOffset + 3]) <<< 24) + |> int + + override _.ReadUInt16 pos = + let finalOffset = offset + pos + (uint16 bytes.[finalOffset]) ||| + ((uint16 bytes.[finalOffset + 1]) <<< 8) + + override _.ReadUtf8String(pos, count) = + checkCount count + if count > 0 then + Encoding.UTF8.GetString(bytes, offset + pos, count) + else + String.Empty + + override _.Slice(pos, count) = + checkCount count + if count > 0 then + ByteArrayMemory(bytes, offset + pos, count) :> ByteMemory + else + ByteArrayMemory(Array.empty, 0, 0) :> ByteMemory + + override _.CopyTo stream = + if length > 0 then + stream.Write(bytes, offset, length) + + override _.Copy(srcOffset, dest, destOffset, count) = + checkCount count + if count > 0 then + Array.blit bytes (offset + srcOffset) dest destOffset count + + override _.ToArray() = + if length > 0 then + Array.sub bytes offset length + else + Array.empty + + override _.AsStream() = + if length > 0 then + new MemoryStream(bytes, offset, length) :> Stream + else + new MemoryStream([||], 0, 0, false) :> Stream + + override _.AsReadOnlyStream() = + if length > 0 then + new MemoryStream(bytes, offset, length, false) :> Stream + else + new MemoryStream([||], 0, 0, false) :> Stream + +[] +[] +type SafeUnmanagedMemoryStream = + inherit UnmanagedMemoryStream + + val mutable private holder: obj + val mutable private isDisposed: bool + + new (addr, length, holder) = + { + inherit UnmanagedMemoryStream(addr, length) + holder = holder + isDisposed = false + } + + new (addr: nativeptr, length: int64, capacity: int64, access: FileAccess, holder) = + { + inherit UnmanagedMemoryStream(addr, length, capacity, access) + holder = holder + isDisposed = false + } + + override x.Dispose disposing = + base.Dispose disposing + x.holder <- null // Null out so it can be collected. + +type internal MemoryMappedStream(mmf: MemoryMappedFile, length: int64) = + inherit Stream() + + let viewStream = mmf.CreateViewStream(0L, length, MemoryMappedFileAccess.Read) + + member _.ViewStream = viewStream + + override x.CanRead = viewStream.CanRead + override x.CanWrite = viewStream.CanWrite + override x.CanSeek = viewStream.CanSeek + override x.Position with get() = viewStream.Position and set v = (viewStream.Position <- v) + override x.Length = viewStream.Length + override x.Flush() = viewStream.Flush() + override x.Seek(offset, origin) = viewStream.Seek(offset, origin) + override x.SetLength(value) = viewStream.SetLength(value) + override x.Write(buffer, offset, count) = viewStream.Write(buffer, offset, count) + override x.Read(buffer, offset, count) = viewStream.Read(buffer, offset, count) + + override x.Finalize() = + x.Dispose() + + interface IDisposable with + override x.Dispose() = + GC.SuppressFinalize x + mmf.Dispose() + viewStream.Dispose() + + +[] +type RawByteMemory(addr: nativeptr, length: int, holder: obj) = + inherit ByteMemory () + + let check i = + if i < 0 || i >= length then + raise (ArgumentOutOfRangeException(nameof i)) + + let checkCount count = + if count < 0 then + raise (ArgumentOutOfRangeException(nameof count, "Count is less than zero.")) + + do + if length < 0 then + raise (ArgumentOutOfRangeException(nameof length)) + + override _.Item + with get i = + check i + NativePtr.add addr i + |> NativePtr.read + and set i v = + check i + NativePtr.set addr i v + + override _.Length = length + + override this.ReadAllBytes() = + this.ReadBytes(0, length) + + override _.ReadBytes(pos, count) = + checkCount count + if count > 0 then + check pos + check (pos + count - 1) + let res = Bytes.zeroCreate count + Marshal.Copy(NativePtr.toNativeInt addr + nativeint pos, res, 0, count) + res + else + Array.empty + + override _.ReadInt32 pos = + check pos + check (pos + 3) + let finalAddr = NativePtr.toNativeInt addr + nativeint pos + uint32(Marshal.ReadByte(finalAddr, 0)) ||| + (uint32(Marshal.ReadByte(finalAddr, 1)) <<< 8) ||| + (uint32(Marshal.ReadByte(finalAddr, 2)) <<< 16) ||| + (uint32(Marshal.ReadByte(finalAddr, 3)) <<< 24) + |> int + + override _.ReadUInt16 pos = + check pos + check (pos + 1) + let finalAddr = NativePtr.toNativeInt addr + nativeint pos + uint16(Marshal.ReadByte(finalAddr, 0)) ||| + (uint16(Marshal.ReadByte(finalAddr, 1)) <<< 8) + + override _.ReadUtf8String(pos, count) = + checkCount count + if count > 0 then + check pos + check (pos + count - 1) + Encoding.UTF8.GetString(NativePtr.add addr pos, count) + else + String.Empty + + override _.Slice(pos, count) = + checkCount count + if count > 0 then + check pos + check (pos + count - 1) + RawByteMemory(NativePtr.add addr pos, count, holder) :> ByteMemory + else + ByteArrayMemory(Array.empty, 0, 0) :> ByteMemory + + override x.CopyTo stream = + if length > 0 then + use stream2 = x.AsStream() + stream2.CopyTo stream + + override _.Copy(srcOffset, dest, destOffset, count) = + checkCount count + if count > 0 then + check srcOffset + Marshal.Copy(NativePtr.toNativeInt addr + nativeint srcOffset, dest, destOffset, count) + + override _.ToArray() = + if length > 0 then + let res = Array.zeroCreate length + Marshal.Copy(NativePtr.toNativeInt addr, res, 0, res.Length) + res + else + Array.empty + + override _.AsStream() = + if length > 0 then + new SafeUnmanagedMemoryStream(addr, int64 length, holder) :> Stream + else + new MemoryStream([||], 0, 0, false) :> Stream + + override _.AsReadOnlyStream() = + if length > 0 then + new SafeUnmanagedMemoryStream(addr, int64 length, int64 length, FileAccess.Read, holder) :> Stream + else + new MemoryStream([||], 0, 0, false) :> Stream + +[] +type ReadOnlyByteMemory(bytes: ByteMemory) = + member _.Item with get i = bytes.[i] + member _.Length with get () = bytes.Length + member _.ReadAllBytes() = bytes.ReadAllBytes() + member _.ReadBytes(pos, count) = bytes.ReadBytes(pos, count) + member _.ReadInt32 pos = bytes.ReadInt32 pos + member _.ReadUInt16 pos = bytes.ReadUInt16 pos + member _.ReadUtf8String(pos, count) = bytes.ReadUtf8String(pos, count) + member _.Slice(pos, count) = bytes.Slice(pos, count) |> ReadOnlyByteMemory + member _.CopyTo stream = bytes.CopyTo stream + member _.Copy(srcOffset, dest, destOffset, count) = bytes.Copy(srcOffset, dest, destOffset, count) + member _.ToArray() = bytes.ToArray() + member _.AsStream() = bytes.AsReadOnlyStream() + member _.Underlying = bytes + +[] +module MemoryMappedFileExtensions = + + let private trymmf length copyTo = + let length = int64 length + if length = 0L then + None + else + if runningOnMono then + // mono's MemoryMappedFile implementation throws with null `mapName`, so we use byte arrays instead: https://github.com/mono/mono/issues/1024 + None + else + // Try to create a memory mapped file and copy the contents of the given bytes to it. + // If this fails, then we clean up and return None. + try + let mmf = MemoryMappedFile.CreateNew(null, length, MemoryMappedFileAccess.ReadWrite, MemoryMappedFileOptions.None, HandleInheritability.None) + try + use stream = mmf.CreateViewStream(0L, length, MemoryMappedFileAccess.ReadWrite) + copyTo stream + Some mmf + with + | _ -> + mmf.Dispose() + None + with + | _ -> + None + + type MemoryMappedFile with + static member TryFromByteMemory(bytes: ReadOnlyByteMemory) = + trymmf (int64 bytes.Length) bytes.CopyTo + + static member TryFromMemory(bytes: ReadOnlyMemory) = + let length = int64 bytes.Length + trymmf length + (fun stream -> + stream.SetLength(stream.Length + length) + let span = Span(stream.PositionPointer |> NativePtr.toVoidPtr, int length) + bytes.Span.CopyTo(span) + stream.Position <- stream.Position + length + ) + +[] +module internal FileSystemUtils = + let checkPathForIllegalChars = + let chars = new System.Collections.Generic.HashSet<_>(Path.GetInvalidPathChars()) + (fun (path:string) -> + for c in path do + if chars.Contains c then raise(IllegalFileNameChar(path, c))) + + let checkSuffix (x:string) (y:string) = x.EndsWithOrdinal(y) + + let hasExtensionWithValidate (validate:bool) (s:string) = + if validate then (checkPathForIllegalChars s) |> ignore + let sLen = s.Length + (sLen >= 1 && s.[sLen - 1] = '.' && s <> ".." && s <> ".") + || Path.HasExtension(s) + + let hasExtension (s:string) = hasExtensionWithValidate true s + + let chopExtension (s:string) = + checkPathForIllegalChars s + if s = "." then "" else // for OCaml compatibility + if not (hasExtensionWithValidate false s) then + raise (System.ArgumentException("chopExtension")) // message has to be precisely this, for OCaml compatibility, and no argument name can be set + Path.Combine (Path.GetDirectoryName s, Path.GetFileNameWithoutExtension(s)) + + let fileNameOfPath s = + checkPathForIllegalChars s + Path.GetFileName(s) + + let fileNameWithoutExtensionWithValidate (validate:bool) s = + if validate then checkPathForIllegalChars s |> ignore + Path.GetFileNameWithoutExtension(s) + + let fileNameWithoutExtension s = fileNameWithoutExtensionWithValidate true s + + let trimQuotes (s:string) = + s.Trim( [|' '; '\"'|] ) + + let hasSuffixCaseInsensitive suffix filename = (* case-insensitive *) + checkSuffix (String.lowercase filename) (String.lowercase suffix) + + let isDll file = hasSuffixCaseInsensitive ".dll" file + +[] +type IAssemblyLoader = + abstract AssemblyLoadFrom: fileName: string -> Assembly + abstract AssemblyLoad: assemblyName: AssemblyName -> Assembly + +[] +type DefaultAssemblyLoader() = + interface IAssemblyLoader with + member _.AssemblyLoadFrom(fileName: string) = Assembly.UnsafeLoadFrom fileName + member _.AssemblyLoad(assemblyName: AssemblyName) = Assembly.Load assemblyName + +[] +type IFileSystem = + abstract AssemblyLoader: IAssemblyLoader + abstract OpenFileForReadShim: filePath: string * ?useMemoryMappedFile: bool * ?shouldShadowCopy: bool -> Stream + abstract OpenFileForWriteShim: filePath: string * ?fileMode: FileMode * ?fileAccess: FileAccess * ?fileShare: FileShare -> Stream + abstract GetFullPathShim: fileName: string -> string + abstract GetFullFilePathInDirectoryShim: dir: string -> fileName: string -> string + abstract IsPathRootedShim: path: string -> bool + abstract NormalizePathShim: path: string -> string + abstract IsInvalidPathShim: path: string -> bool + abstract GetTempPathShim: unit -> string + abstract GetDirectoryNameShim: path: string -> string + abstract GetLastWriteTimeShim: fileName: string -> DateTime + abstract GetCreationTimeShim: path: string -> DateTime + abstract CopyShim: src: string * dest: string * overwrite: bool -> unit + abstract FileExistsShim: fileName: string -> bool + abstract FileDeleteShim: fileName: string -> unit + abstract DirectoryCreateShim: path: string -> DirectoryInfo + abstract DirectoryExistsShim: path: string -> bool + abstract DirectoryDeleteShim: path: string -> unit + abstract EnumerateFilesShim: path: string * pattern: string -> string seq + abstract EnumerateDirectoriesShim: path: string -> string seq + abstract IsStableFileHeuristic: fileName: string -> bool + +[] +type DefaultFileSystem() as this = + abstract AssemblyLoader : IAssemblyLoader + default _.AssemblyLoader = DefaultAssemblyLoader() :> IAssemblyLoader + + abstract OpenFileForReadShim: filePath: string * ?useMemoryMappedFile: bool * ?shouldShadowCopy: bool -> Stream + default _.OpenFileForReadShim(filePath: string, ?useMemoryMappedFile: bool, ?shouldShadowCopy: bool) : Stream = + let fileMode = FileMode.Open + let fileAccess = FileAccess.Read + let fileShare = FileShare.Delete ||| FileShare.ReadWrite + let shouldShadowCopy = defaultArg shouldShadowCopy false + let useMemoryMappedFile = defaultArg useMemoryMappedFile false + let fileStream = new FileStream(filePath, fileMode, fileAccess, fileShare) + let length = fileStream.Length + + // We want to use mmaped files only when: + // - Opening large binary files (no need to use for source or resource files really) + // - Running on mono, since its MemoryMappedFile implementation throws when "mapName" is not provided (is null). + // (See: https://github.com/mono/mono/issues/10245) + + if runningOnMono || (not useMemoryMappedFile) then + fileStream :> Stream + else + let mmf = + if shouldShadowCopy then + let mmf = + MemoryMappedFile.CreateNew( + null, + length, + MemoryMappedFileAccess.Read, + MemoryMappedFileOptions.None, + HandleInheritability.None) + use stream = mmf.CreateViewStream(0L, length, MemoryMappedFileAccess.Read) + fileStream.CopyTo(stream) + fileStream.Dispose() + mmf + else + MemoryMappedFile.CreateFromFile( + fileStream, + null, + length, + MemoryMappedFileAccess.Read, + HandleInheritability.None, + leaveOpen=false) + + let stream = new MemoryMappedStream(mmf, length) + + if not stream.CanRead then + invalidOp "Cannot read file" + stream :> Stream + + + abstract OpenFileForWriteShim: filePath: string * ?fileMode: FileMode * ?fileAccess: FileAccess * ?fileShare: FileShare -> Stream + default _.OpenFileForWriteShim(filePath: string, ?fileMode: FileMode, ?fileAccess: FileAccess, ?fileShare: FileShare) : Stream = + let fileMode = defaultArg fileMode FileMode.OpenOrCreate + let fileAccess = defaultArg fileAccess FileAccess.ReadWrite + let fileShare = defaultArg fileShare FileShare.Delete ||| FileShare.ReadWrite + + new FileStream(filePath, fileMode, fileAccess, fileShare) :> Stream + + abstract GetFullPathShim: fileName: string -> string + default _.GetFullPathShim (fileName: string) = Path.GetFullPath fileName + + abstract GetFullFilePathInDirectoryShim: dir: string -> fileName: string -> string + default this.GetFullFilePathInDirectoryShim (dir: string) (fileName: string) = + let p = if (this :> IFileSystem).IsPathRootedShim(fileName) then fileName else Path.Combine(dir, fileName) + try (this :> IFileSystem).GetFullPathShim(p) with + | :? ArgumentException + | :? ArgumentNullException + | :? NotSupportedException + | :? PathTooLongException + | :? System.Security.SecurityException -> p + + abstract IsPathRootedShim: path: string -> bool + default _.IsPathRootedShim (path: string) = Path.IsPathRooted path + + abstract NormalizePathShim: path: string -> string + default _.NormalizePathShim (path: string) = + try + let ifs = this :> IFileSystem + if ifs.IsPathRootedShim path then + ifs.GetFullPathShim path + else + path + with _ -> path + + abstract IsInvalidPathShim: path: string -> bool + default _.IsInvalidPathShim(path: string) = + let isInvalidPath(p: string) = + String.IsNullOrEmpty p || p.IndexOfAny(Path.GetInvalidPathChars()) <> -1 + + let isInvalidFilename(p: string) = + String.IsNullOrEmpty p || p.IndexOfAny(Path.GetInvalidFileNameChars()) <> -1 + + let isInvalidDirectory(d: string) = + d=null || d.IndexOfAny(Path.GetInvalidPathChars()) <> -1 + + isInvalidPath path || + let directory = Path.GetDirectoryName path + let filename = Path.GetFileName path + isInvalidDirectory directory || isInvalidFilename filename + + abstract GetTempPathShim: unit -> string + default _.GetTempPathShim() = Path.GetTempPath() + + abstract GetDirectoryNameShim: path: string -> string + default _.GetDirectoryNameShim(path:string) = + FileSystemUtils.checkPathForIllegalChars path + if path = "" then "." + else + match Path.GetDirectoryName(path) with + | null -> if (this :> IFileSystem).IsPathRootedShim(path) then path else "." + | res -> if res = "" then "." else res + + abstract GetLastWriteTimeShim: fileName: string -> DateTime + default _.GetLastWriteTimeShim (fileName: string) = File.GetLastWriteTimeUtc fileName + + abstract GetCreationTimeShim: path: string -> DateTime + default _.GetCreationTimeShim (path: string) = File.GetCreationTimeUtc path + + abstract CopyShim: src: string * dest: string * overwrite: bool -> unit + default _.CopyShim (src: string, dest: string, overwrite: bool) = File.Copy(src, dest, overwrite) + + abstract FileExistsShim: fileName: string -> bool + default _.FileExistsShim (fileName: string) = File.Exists fileName + + abstract FileDeleteShim: fileName: string -> unit + default _.FileDeleteShim (fileName: string) = File.Delete fileName + + abstract DirectoryCreateShim: path: string -> DirectoryInfo + default _.DirectoryCreateShim (path: string) = Directory.CreateDirectory path + + abstract DirectoryExistsShim: path: string -> bool + default _.DirectoryExistsShim (path: string) = Directory.Exists path + + abstract DirectoryDeleteShim: path: string -> unit + default _.DirectoryDeleteShim (path: string) = Directory.Delete path + + abstract EnumerateFilesShim: path: string * pattern: string -> string seq + default _.EnumerateFilesShim(path: string, pattern: string) = Directory.EnumerateFiles(path, pattern) + + abstract EnumerateDirectoriesShim: path: string -> string seq + default _.EnumerateDirectoriesShim(path: string) = Directory.EnumerateDirectories(path) + + abstract IsStableFileHeuristic: fileName: string -> bool + default _.IsStableFileHeuristic (fileName: string) = + let directory = Path.GetDirectoryName fileName + directory.Contains("Reference Assemblies/") || + directory.Contains("Reference Assemblies\\") || + directory.Contains("packages/") || + directory.Contains("packages\\") || + directory.Contains("lib/mono/") + + interface IFileSystem with + member _.AssemblyLoader = this.AssemblyLoader + + member _.OpenFileForReadShim(filePath: string, ?useMemoryMappedFile: bool, ?shouldShadowCopy: bool) : Stream = + let shouldShadowCopy = defaultArg shouldShadowCopy false + let useMemoryMappedFile = defaultArg useMemoryMappedFile false + this.OpenFileForReadShim(filePath, useMemoryMappedFile, shouldShadowCopy) + + member _.OpenFileForWriteShim(filePath: string, ?fileMode: FileMode, ?fileAccess: FileAccess, ?fileShare: FileShare) : Stream = + let fileMode = defaultArg fileMode FileMode.OpenOrCreate + let fileAccess = defaultArg fileAccess FileAccess.ReadWrite + let fileShare = defaultArg fileShare FileShare.Delete ||| FileShare.ReadWrite + this.OpenFileForWriteShim(filePath, fileMode, fileAccess, fileShare) + + member _.GetFullPathShim (fileName: string) = this.GetFullPathShim fileName + member _.GetFullFilePathInDirectoryShim (dir: string) (fileName: string) = this.GetFullFilePathInDirectoryShim dir fileName + member _.IsPathRootedShim (path: string) = this.IsPathRootedShim path + member _.NormalizePathShim (path: string) = this.NormalizePathShim path + member _.IsInvalidPathShim(path: string) = this.IsInvalidPathShim path + member _.GetTempPathShim() = this.GetTempPathShim() + member _.GetDirectoryNameShim(s:string) = this.GetDirectoryNameShim s + member _.GetLastWriteTimeShim (fileName: string) = this.GetLastWriteTimeShim fileName + member _.GetCreationTimeShim (path: string) = this.GetCreationTimeShim path + member _.CopyShim (src: string, dest: string, overwrite: bool) = this.CopyShim(src, dest, overwrite) + member _.FileExistsShim (fileName: string) = this.FileExistsShim fileName + member _.FileDeleteShim (fileName: string) = this.FileDeleteShim fileName + member _.DirectoryCreateShim (path: string) = this.DirectoryCreateShim path + member _.DirectoryExistsShim (path: string) = this.DirectoryExistsShim path + member _.DirectoryDeleteShim (path: string) = this.DirectoryDeleteShim path + member _.EnumerateFilesShim(path: string, pattern: string) = this.EnumerateFilesShim(path, pattern) + member _.EnumerateDirectoriesShim(path: string) = this.EnumerateDirectoriesShim path + member _.IsStableFileHeuristic (fileName: string) = this.IsStableFileHeuristic fileName + +[] +module public StreamExtensions = + let utf8noBOM = new UTF8Encoding(false, true) :> Encoding + type System.IO.Stream with + member s.GetWriter(?encoding: Encoding) : TextWriter = + let encoding = defaultArg encoding utf8noBOM + new StreamWriter(s, encoding) :> TextWriter + + member s.WriteAllLines(contents: string seq, ?encoding: Encoding) = + let encoding = defaultArg encoding utf8noBOM + use writer = s.GetWriter(encoding) + for l in contents do + writer.WriteLine(l) + + member s.Write (data: 'a) : unit = + use sw = s.GetWriter() + sw.Write(data) + + member s.GetReader(codePage: int option, ?retryLocked: bool) = + let retryLocked = defaultArg retryLocked false + let retryDelayMilliseconds = 50 + let numRetries = 60 + let rec getSource retryNumber = + try + // Use the .NET functionality to auto-detect the unicode encoding + match codePage with + | None -> new StreamReader(s, true) + | Some n -> new StreamReader(s, Encoding.GetEncoding(n)) + with + // We can get here if the file is locked--like when VS is saving a file--we don't have direct + // access to the HRESULT to see that this is EONOACCESS. + | :? IOException as err when retryLocked && err.GetType() = typeof -> + // This second check is to make sure the exception is exactly IOException and none of these for example: + // DirectoryNotFoundException + // EndOfStreamException + // FileNotFoundException + // FileLoadException + // PathTooLongException + if retryNumber < numRetries then + System.Threading.Thread.Sleep (retryDelayMilliseconds) + getSource (retryNumber + 1) + else + reraise() + getSource 0 + + member s.ReadBytes (start, len) = + s.Seek(int64 start, SeekOrigin.Begin) |> ignore + let buffer = Array.zeroCreate len + let mutable n = 0 + while n < len do + n <- n + s.Read(buffer, n, len-n) + buffer + + member s.ReadAllBytes() = + use reader = new BinaryReader(s) + let count = (int s.Length) + reader.ReadBytes(count) + + member s.ReadAllText(?encoding: Encoding) = + let encoding = defaultArg encoding Encoding.UTF8 + use sr = new StreamReader(s, encoding, true) + sr.ReadToEnd() + + member s.ReadLines(?encoding: Encoding) : string seq = + let encoding = defaultArg encoding Encoding.UTF8 + seq { + use sr = new StreamReader(s, encoding, true) + while not <| sr.EndOfStream do + yield sr.ReadLine() + } + member s.ReadAllLines(?encoding: Encoding) : string array = + let encoding = defaultArg encoding Encoding.UTF8 + s.ReadLines(encoding) |> Seq.toArray + + /// If we are working with the view stream from mmf, we wrap it in RawByteMemory (which does zero copy, bu just using handle from the views stream). + /// However, when we use any other stream (FileStream, MemoryStream, etc) - we just read everything from it and expose via ByteArrayMemory. + member s.AsByteMemory() : ByteMemory = + match s with + | :? MemoryMappedStream as mmfs -> + let length = mmfs.Length + RawByteMemory( + NativePtr.ofNativeInt (mmfs.ViewStream.SafeMemoryMappedViewHandle.DangerousGetHandle()), + int length, + mmfs) :> ByteMemory + + | _ -> + let bytes = s.ReadAllBytes() + let byteArrayMemory = if bytes.Length = 0 then ByteArrayMemory([||], 0, 0) else ByteArrayMemory(bytes, 0, bytes.Length) + byteArrayMemory :> ByteMemory + +[] +module public FileSystemAutoOpens = + /// The global hook into the file system + let mutable FileSystem: IFileSystem = DefaultFileSystem() :> IFileSystem + +type ByteMemory with + + member x.AsReadOnly() = ReadOnlyByteMemory x + + static member Empty = ByteArrayMemory([||], 0, 0) :> ByteMemory + + static member FromMemoryMappedFile(mmf: MemoryMappedFile) = + let accessor = mmf.CreateViewAccessor() + RawByteMemory.FromUnsafePointer(accessor.SafeMemoryMappedViewHandle.DangerousGetHandle(), int accessor.Capacity, (mmf, accessor)) + + static member FromUnsafePointer(addr, length, holder: obj) = + RawByteMemory(NativePtr.ofNativeInt addr, length, holder) :> ByteMemory + + static member FromArray(bytes, offset, length) = + ByteArrayMemory(bytes, offset, length) :> ByteMemory + + static member FromArray (bytes: byte array) = + if bytes.Length = 0 then + ByteMemory.Empty + else + ByteArrayMemory.FromArray(bytes, 0, bytes.Length) + +type internal ByteStream = + { bytes: ReadOnlyByteMemory + mutable pos: int + max: int } + member b.ReadByte() = + if b.pos >= b.max then failwith "end of stream" + let res = b.bytes.[b.pos] + b.pos <- b.pos + 1 + res + member b.ReadUtf8String n = + let res = b.bytes.ReadUtf8String(b.pos,n) + b.pos <- b.pos + n; res + + static member FromBytes (b: ReadOnlyByteMemory,start,length) = + if start < 0 || (start+length) > b.Length then failwith "FromBytes" + { bytes = b; pos = start; max = start+length } + + member b.ReadBytes n = + if b.pos + n > b.max then failwith "ReadBytes: end of stream" + let res = b.bytes.Slice(b.pos, n) + b.pos <- b.pos + n + res + + member b.Position = b.pos +#if LAZY_UNPICKLE + member b.CloneAndSeek = { bytes=b.bytes; pos=pos; max=b.max } + member b.Skip = b.pos <- b.pos + n +#endif + + +type internal ByteBuffer = + { useArrayPool: bool + mutable isDisposed: bool + mutable bbArray: byte[] + mutable bbCurrent: int } + + member inline private buf.CheckDisposed() = + if buf.isDisposed then + raise(ObjectDisposedException(nameof(ByteBuffer))) + + member private buf.Ensure newSize = + let oldBufSize = buf.bbArray.Length + if newSize > oldBufSize then + let old = buf.bbArray + buf.bbArray <- + if buf.useArrayPool then + ArrayPool.Shared.Rent (max newSize (oldBufSize * 2)) + else + Bytes.zeroCreate (max newSize (oldBufSize * 2)) + Bytes.blit old 0 buf.bbArray 0 buf.bbCurrent + if buf.useArrayPool then + ArrayPool.Shared.Return old + + member buf.AsMemory() = + buf.CheckDisposed() + ReadOnlyMemory(buf.bbArray, 0, buf.bbCurrent) + + member buf.EmitIntAsByte (i:int) = + buf.CheckDisposed() + let newSize = buf.bbCurrent + 1 + buf.Ensure newSize + buf.bbArray.[buf.bbCurrent] <- byte i + buf.bbCurrent <- newSize + + member buf.EmitByte (b:byte) = + buf.CheckDisposed() + buf.EmitIntAsByte (int b) + + member buf.EmitIntsAsBytes (arr:int[]) = + buf.CheckDisposed() + let n = arr.Length + let newSize = buf.bbCurrent + n + buf.Ensure newSize + let bbArr = buf.bbArray + let bbBase = buf.bbCurrent + for i = 0 to n - 1 do + bbArr.[bbBase + i] <- byte arr.[i] + buf.bbCurrent <- newSize + + member bb.FixupInt32 pos value = + bb.CheckDisposed() + bb.bbArray.[pos] <- (Bytes.b0 value |> byte) + bb.bbArray.[pos + 1] <- (Bytes.b1 value |> byte) + bb.bbArray.[pos + 2] <- (Bytes.b2 value |> byte) + bb.bbArray.[pos + 3] <- (Bytes.b3 value |> byte) + + member buf.EmitInt32 n = + buf.CheckDisposed() + let newSize = buf.bbCurrent + 4 + buf.Ensure newSize + buf.FixupInt32 buf.bbCurrent n + buf.bbCurrent <- newSize + + member buf.EmitBytes (i:byte[]) = + buf.CheckDisposed() + let n = i.Length + let newSize = buf.bbCurrent + n + buf.Ensure newSize + Bytes.blit i 0 buf.bbArray buf.bbCurrent n + buf.bbCurrent <- newSize + + member buf.EmitMemory (i:ReadOnlyMemory) = + buf.CheckDisposed() + let n = i.Length + let newSize = buf.bbCurrent + n + buf.Ensure newSize + i.CopyTo(Memory(buf.bbArray, buf.bbCurrent, n)) + buf.bbCurrent <- newSize + + member buf.EmitByteMemory (i:ReadOnlyByteMemory) = + buf.CheckDisposed() + let n = i.Length + let newSize = buf.bbCurrent + n + buf.Ensure newSize + i.Copy(0, buf.bbArray, buf.bbCurrent, n) + buf.bbCurrent <- newSize + + member buf.EmitInt32AsUInt16 n = + buf.CheckDisposed() + let newSize = buf.bbCurrent + 2 + buf.Ensure newSize + buf.bbArray.[buf.bbCurrent] <- (Bytes.b0 n |> byte) + buf.bbArray.[buf.bbCurrent + 1] <- (Bytes.b1 n |> byte) + buf.bbCurrent <- newSize + + member buf.EmitBoolAsByte (b:bool) = + buf.CheckDisposed() + buf.EmitIntAsByte (if b then 1 else 0) + + member buf.EmitUInt16 (x:uint16) = + buf.CheckDisposed() + buf.EmitInt32AsUInt16 (int32 x) + + member buf.EmitInt64 x = + buf.CheckDisposed() + buf.EmitInt32 (Bytes.dWw0 x) + buf.EmitInt32 (Bytes.dWw1 x) + + member buf.Position = + buf.CheckDisposed() + buf.bbCurrent + + static member Create(capacity, useArrayPool) = + let useArrayPool = defaultArg useArrayPool false + { useArrayPool = useArrayPool + isDisposed = false + bbArray = if useArrayPool then ArrayPool.Shared.Rent capacity else Bytes.zeroCreate capacity + bbCurrent = 0 } + + interface IDisposable with + + member this.Dispose() = + if not this.isDisposed then + this.isDisposed <- true + if this.useArrayPool then + ArrayPool.Shared.Return this.bbArray + +[] +type ByteStorage(getByteMemory: unit -> ReadOnlyByteMemory) = + + let mutable cached = Unchecked.defaultof> + + let getAndCache () = + let byteMemory = getByteMemory () + cached <- WeakReference(byteMemory.Underlying) + byteMemory + + member _.GetByteMemory() = + match cached with + | null -> getAndCache () + | _ -> + match cached.TryGetTarget() with + | true, byteMemory -> byteMemory.AsReadOnly() + | _ -> getAndCache () + + static member FromByteArray(bytes: byte []) = + ByteStorage.FromByteMemory(ByteMemory.FromArray(bytes).AsReadOnly()) + + static member FromByteMemory(bytes: ReadOnlyByteMemory) = + ByteStorage(fun () -> bytes) + + static member FromByteMemoryAndCopy(bytes: ReadOnlyByteMemory, useBackingMemoryMappedFile: bool) = + if useBackingMemoryMappedFile then + match MemoryMappedFile.TryFromByteMemory(bytes) with + | Some mmf -> + ByteStorage(fun () -> ByteMemory.FromMemoryMappedFile(mmf).AsReadOnly()) + | _ -> + let copiedBytes = ByteMemory.FromArray(bytes.ToArray()).AsReadOnly() + ByteStorage.FromByteMemory(copiedBytes) + else + let copiedBytes = ByteMemory.FromArray(bytes.ToArray()).AsReadOnly() + ByteStorage.FromByteMemory(copiedBytes) + + static member FromMemoryAndCopy(bytes: ReadOnlyMemory, useBackingMemoryMappedFile: bool) = + if useBackingMemoryMappedFile then + match MemoryMappedFile.TryFromMemory(bytes) with + | Some mmf -> + ByteStorage(fun () -> ByteMemory.FromMemoryMappedFile(mmf).AsReadOnly()) + | _ -> + let copiedBytes = ByteMemory.FromArray(bytes.ToArray()).AsReadOnly() + ByteStorage.FromByteMemory(copiedBytes) + else + let copiedBytes = ByteMemory.FromArray(bytes.ToArray()).AsReadOnly() + ByteStorage.FromByteMemory(copiedBytes) + + static member FromByteArrayAndCopy(bytes: byte [], useBackingMemoryMappedFile: bool) = + ByteStorage.FromByteMemoryAndCopy(ByteMemory.FromArray(bytes).AsReadOnly(), useBackingMemoryMappedFile) diff --git a/src/fsharp/utils/FileSystem.fsi b/src/fsharp/utils/FileSystem.fsi new file mode 100644 index 00000000000..14bc45a9850 --- /dev/null +++ b/src/fsharp/utils/FileSystem.fsi @@ -0,0 +1,405 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. +// This file contains public types related to the "file system hook" of the FCS API which are used throughout the F# compiler. +namespace FSharp.Compiler.IO + +open System +open System.IO +open System.IO.MemoryMappedFiles +open System.Reflection +open System.Runtime.InteropServices +open System.Text +open System.Runtime.CompilerServices + +open FSharp.NativeInterop + +open Internal.Utilities.Library + +exception IllegalFileNameChar of string * char + +module internal Bytes = + /// returned int will be 0 <= x <= 255 + val get: byte[] -> int -> int + val zeroCreate: int -> byte[] + /// each int must be 0 <= x <= 255 + val ofInt32Array: int[] -> byte[] + /// each int will be 0 <= x <= 255 + val blit: byte[] -> int -> byte[] -> int -> int -> unit + + val stringAsUnicodeNullTerminated: string -> byte[] + val stringAsUtf8NullTerminated: string -> byte[] + +/// A view over bytes. +/// May be backed by managed or unmanaged memory, or memory mapped file. +[] +type public ByteMemory = + + abstract Item: int -> byte with get + + abstract Length: int + + abstract ReadAllBytes: unit -> byte[] + + abstract ReadBytes: pos: int * count: int -> byte[] + + abstract ReadInt32: pos: int -> int + + abstract ReadUInt16: pos: int -> uint16 + + abstract ReadUtf8String: pos: int * count: int -> string + + abstract Slice: pos: int * count: int -> ByteMemory + + abstract CopyTo: Stream -> unit + + abstract Copy: srcOffset: int * dest: byte[] * destOffset: int * count: int -> unit + + abstract ToArray: unit -> byte[] + + /// Get a stream representation of the backing memory. + /// Disposing this will not free up any of the backing memory. + abstract AsStream: unit -> Stream + + /// Get a stream representation of the backing memory. + /// Disposing this will not free up any of the backing memory. + /// Stream cannot be written to. + abstract AsReadOnlyStream: unit -> Stream + +[] +type internal ReadOnlyByteMemory = + + new: ByteMemory -> ReadOnlyByteMemory + + member Item: int -> byte with get + + member Length: int + + member ReadAllBytes: unit -> byte[] + + member ReadBytes: pos: int * count: int -> byte[] + + member ReadInt32: pos: int -> int + + member ReadUInt16: pos: int -> uint16 + + member ReadUtf8String: pos: int * count: int -> string + + member Slice: pos: int * count: int -> ReadOnlyByteMemory + + member CopyTo: Stream -> unit + + member Copy: srcOffset: int * dest: byte[] * destOffset: int * count: int -> unit + + member ToArray: unit -> byte[] + + member AsStream: unit -> Stream + +/// MemoryMapped extensions +module internal MemoryMappedFileExtensions = + type MemoryMappedFile with + static member TryFromByteMemory : bytes: ReadOnlyByteMemory -> MemoryMappedFile option + static member TryFromMemory : bytes: ReadOnlyMemory -> MemoryMappedFile option + +/// Filesystem helpers +module internal FileSystemUtils = + val checkPathForIllegalChars: (string -> unit) + + /// checkSuffix f s returns True if filename "f" ends in suffix "s", + /// e.g. checkSuffix "abc.fs" ".fs" returns true. + val checkSuffix: string -> string -> bool + + /// chopExtension f removes the extension from the given + /// filename. Raises ArgumentException if no extension is present. + val chopExtension: string -> string + + /// Return True if the filename has a "." extension. + val hasExtension: string -> bool + + /// Get the filename of the given path. + val fileNameOfPath: string -> string + + /// Get the filename without extension of the given path. + val fileNameWithoutExtensionWithValidate: bool -> string -> string + val fileNameWithoutExtension: string -> string + + /// Trim the quotes and spaces from either end of a string + val trimQuotes: string -> string + + /// Checks whether filename ends in suffix, ignoring case. + val hasSuffixCaseInsensitive: string -> string -> bool + + /// Checks whether file is dll (ends in .dll) + val isDll: string -> bool + +/// Type which we use to load assemblies. +type public IAssemblyLoader = + /// Used to load a dependency for F# Interactive and in an unused corner-case of type provider loading + abstract member AssemblyLoad: assemblyName:System.Reflection.AssemblyName -> System.Reflection.Assembly + + /// Used to load type providers and located assemblies in F# Interactive + abstract member AssemblyLoadFrom: fileName:string -> System.Reflection.Assembly + +/// Default implementation for IAssemblyLoader +type DefaultAssemblyLoader = + new: unit -> DefaultAssemblyLoader + interface IAssemblyLoader + +/// Represents a shim for the file system +type public IFileSystem = + + // Assembly loader. + abstract member AssemblyLoader : IAssemblyLoader + + /// Open the file for read, returns ByteMemory, uses either FileStream (for smaller files) or MemoryMappedFile (for potentially big files, such as dlls). + abstract member OpenFileForReadShim: filePath: string * ?useMemoryMappedFile: bool * ?shouldShadowCopy: bool -> Stream + + /// Open the file for writing. Returns a Stream. + abstract member OpenFileForWriteShim: filePath: string * ?fileMode: FileMode * ?fileAccess: FileAccess * ?fileShare: FileShare -> Stream + + /// Take in a filename with an absolute path, and return the same filename + /// but canonicalized with respect to extra path separators (e.g. C:\\\\foo.txt) + /// and '..' portions + abstract member GetFullPathShim: fileName:string -> string + + /// Take in a directory, filename, and return canonicalized path to the filename in directory. + /// If filename path is rooted, ignores directory and returns filename path. + /// Otherwise, combines directory with filename and gets full path via GetFullPathShim(string). + abstract member GetFullFilePathInDirectoryShim: dir: string -> fileName: string -> string + + /// A shim over Path.IsPathRooted + abstract member IsPathRootedShim: path:string -> bool + + /// Removes relative parts from any full paths + abstract member NormalizePathShim: path: string -> string + + /// A shim over Path.IsInvalidPath + abstract member IsInvalidPathShim: path:string -> bool + + /// A shim over Path.GetTempPath + abstract member GetTempPathShim: unit -> string + + /// A shim for getting directory name from path + abstract member GetDirectoryNameShim: path: string -> string + + /// Utc time of the last modification + abstract member GetLastWriteTimeShim: fileName:string -> DateTime + + // Utc time of creation + abstract member GetCreationTimeShim: path: string -> DateTime + + // A shim over file copying. + abstract member CopyShim: src: string * dest: string * overwrite: bool -> unit + + /// A shim over File.Exists + abstract member FileExistsShim: fileName: string -> bool + + /// A shim over File.Delete + abstract member FileDeleteShim: fileName: string -> unit + + /// A shim over Directory.Exists + abstract member DirectoryCreateShim: path: string -> DirectoryInfo + + /// A shim over Directory.Exists + abstract member DirectoryExistsShim: path: string -> bool + + /// A shim over Directory.Delete + abstract member DirectoryDeleteShim: path: string -> unit + + /// A shim over Directory.EnumerateFiles + abstract member EnumerateFilesShim: path: string * pattern: string -> string seq + + /// A shim over Directory.EnumerateDirectories + abstract member EnumerateDirectoriesShim: path: string -> string seq + + /// Used to determine if a file will not be subject to deletion during the lifetime of a typical client process. + abstract member IsStableFileHeuristic: fileName:string -> bool + + +/// Represents a default (memory-mapped) implementation of the file system +type DefaultFileSystem = + /// Create a default implementation of the file system + new: unit -> DefaultFileSystem + abstract member AssemblyLoader: IAssemblyLoader + override AssemblyLoader: IAssemblyLoader + + abstract member OpenFileForReadShim: filePath: string * ?useMemoryMappedFile: bool * ?shouldShadowCopy: bool -> Stream + override OpenFileForReadShim: filePath: string * ?useMemoryMappedFile: bool * ?shouldShadowCopy: bool -> Stream + + abstract member OpenFileForWriteShim: filePath: string * ?fileMode: FileMode * ?fileAccess: FileAccess * ?fileShare: FileShare -> Stream + override OpenFileForWriteShim: filePath: string * ?fileMode: FileMode * ?fileAccess: FileAccess * ?fileShare: FileShare -> Stream + + abstract member GetFullPathShim: fileName: string -> string + override GetFullPathShim: fileName: string -> string + + abstract member GetFullFilePathInDirectoryShim: dir: string -> fileName: string -> string + override GetFullFilePathInDirectoryShim: dir: string -> fileName: string -> string + + abstract member IsPathRootedShim: path: string -> bool + override IsPathRootedShim: path: string -> bool + + abstract member NormalizePathShim: path: string -> string + override NormalizePathShim: path: string -> string + + abstract member IsInvalidPathShim: path: string -> bool + override IsInvalidPathShim: path: string -> bool + + abstract member GetTempPathShim: unit -> string + override GetTempPathShim: unit -> string + + abstract member GetDirectoryNameShim: path: string -> string + override GetDirectoryNameShim: path: string -> string + + abstract member GetLastWriteTimeShim: fileName: string -> DateTime + override GetLastWriteTimeShim: fileName: string -> DateTime + + abstract member GetCreationTimeShim: path: string -> DateTime + override GetCreationTimeShim: path: string -> DateTime + + abstract member CopyShim: src: string * dest: string * overwrite: bool -> unit + override CopyShim: src: string * dest: string * overwrite: bool -> unit + + abstract member FileExistsShim: fileName: string -> bool + override FileExistsShim: fileName: string -> bool + + abstract member FileDeleteShim: fileName: string -> unit + override FileDeleteShim: fileName: string -> unit + + abstract member DirectoryCreateShim: path: string -> DirectoryInfo + override DirectoryCreateShim: path: string -> DirectoryInfo + + abstract member DirectoryExistsShim: path: string -> bool + override DirectoryExistsShim: path: string -> bool + + abstract member DirectoryDeleteShim: path: string -> unit + override DirectoryDeleteShim: path: string -> unit + + abstract member EnumerateFilesShim: path: string * pattern: string -> string seq + override EnumerateFilesShim: path: string * pattern: string -> string seq + + abstract member EnumerateDirectoriesShim: path: string -> string seq + override EnumerateDirectoriesShim: path: string -> string seq + + abstract member IsStableFileHeuristic: fileName: string -> bool + override IsStableFileHeuristic: fileName: string -> bool + + interface IFileSystem + +[] +module public StreamExtensions = + + type System.IO.Stream with + member GetWriter : ?encoding: Encoding -> TextWriter + member WriteAllLines : contents: string seq * ?encoding: Encoding -> unit + member Write<'a> : data:'a -> unit + member GetReader : codePage: int option * ?retryLocked: bool -> StreamReader + member ReadBytes : start: int * len: int -> byte[] + member ReadAllBytes : unit -> byte[] + member ReadAllText : ?encoding: Encoding -> string + member ReadLines : ?encoding: Encoding -> string seq + member ReadAllLines : ?encoding: Encoding -> string array + member AsByteMemory : unit -> ByteMemory + +[] +module public FileSystemAutoOpens = + /// The global hook into the file system + val mutable FileSystem: IFileSystem + +type internal ByteMemory with + + member AsReadOnly: unit -> ReadOnlyByteMemory + + /// Empty byte memory. + static member Empty: ByteMemory + + /// Create a ByteMemory object that has a backing memory mapped file. + static member FromMemoryMappedFile: MemoryMappedFile -> ByteMemory + + /// Creates a ByteMemory object that is backed by a raw pointer. + /// Use with care. + static member FromUnsafePointer: addr: nativeint * length: int * holder: obj -> ByteMemory + + /// Creates a ByteMemory object that is backed by a byte array with the specified offset and length. + static member FromArray: bytes: byte[] * offset: int * length: int -> ByteMemory + + /// Creates a ByteMemory object that is backed by a byte array. + static member FromArray: bytes: byte[] -> ByteMemory + +[] +type internal ByteStream = + member ReadByte : unit -> byte + member ReadBytes : int -> ReadOnlyByteMemory + member ReadUtf8String : int -> string + member Position : int + static member FromBytes : ReadOnlyByteMemory * start:int * length:int -> ByteStream + +#if LAZY_UNPICKLE + member CloneAndSeek : int -> ByteStream + member Skip : int -> unit +#endif + +/// Imperative buffers and streams of byte[] +/// Not thread safe. +[] +type internal ByteBuffer = + interface IDisposable + + [] + member AsMemory : unit -> ReadOnlyMemory + + [] + member EmitIntAsByte : int -> unit + + [] + member EmitIntsAsBytes : int[] -> unit + + [] + member EmitByte : byte -> unit + + [] + member EmitBytes : byte[] -> unit + + [] + member EmitMemory : ReadOnlyMemory -> unit + + [] + member EmitByteMemory : ReadOnlyByteMemory -> unit + + [] + member EmitInt32 : int32 -> unit + + [] + member EmitInt64 : int64 -> unit + + [] + member FixupInt32 : pos: int -> value: int32 -> unit + + [] + member EmitInt32AsUInt16 : int32 -> unit + + [] + member EmitBoolAsByte : bool -> unit + + [] + member EmitUInt16 : uint16 -> unit + + member Position : int + static member Create : capacity: int * ?useArrayPool: bool -> ByteBuffer + +[] +type internal ByteStorage = + + member GetByteMemory : unit -> ReadOnlyByteMemory + + /// Creates a ByteStorage whose backing bytes are the given ByteMemory. Does not make a copy. + static member FromByteMemory : ReadOnlyByteMemory -> ByteStorage + + /// Creates a ByteStorage whose backing bytes are the given byte array. Does not make a copy. + static member FromByteArray : byte [] -> ByteStorage + + /// Creates a ByteStorage that has a copy of the given ByteMemory. + static member FromByteMemoryAndCopy : ReadOnlyByteMemory * useBackingMemoryMappedFile: bool -> ByteStorage + + /// Creates a ByteStorage that has a copy of the given Memory. + static member FromMemoryAndCopy : ReadOnlyMemory * useBackingMemoryMappedFile: bool -> ByteStorage + + /// Creates a ByteStorage that has a copy of the given byte array. + static member FromByteArrayAndCopy : byte [] * useBackingMemoryMappedFile: bool -> ByteStorage diff --git a/src/fsharp/utils/HashMultiMap.fs b/src/fsharp/utils/HashMultiMap.fs index 673a31a2a59..ed95a9b40b3 100644 --- a/src/fsharp/utils/HashMultiMap.fs +++ b/src/fsharp/utils/HashMultiMap.fs @@ -3,7 +3,6 @@ namespace Internal.Utilities.Collections open System.Collections.Generic -open Microsoft.FSharp.Collections // Each entry in the HashMultiMap dictionary has at least one entry. Under normal usage each entry has _only_ // one entry. So use two hash tables: one for the main entries and one for the overflow. diff --git a/src/fsharp/utils/HashMultiMap.fsi b/src/fsharp/utils/HashMultiMap.fsi index bd05cfc1d7a..0d2738f955f 100644 --- a/src/fsharp/utils/HashMultiMap.fsi +++ b/src/fsharp/utils/HashMultiMap.fsi @@ -2,10 +2,8 @@ namespace Internal.Utilities.Collections -open System open System.Collections.Generic - /// Hash tables, by default based on F# structural "hash" and (=) functions. /// The table may map a single key to multiple bindings. [] diff --git a/src/fsharp/utils/PathMap.fs b/src/fsharp/utils/PathMap.fs index 3e4f6fad96c..906c3831e6d 100644 --- a/src/fsharp/utils/PathMap.fs +++ b/src/fsharp/utils/PathMap.fs @@ -6,6 +6,8 @@ namespace Internal.Utilities open System open System.IO +open FSharp.Compiler.IO + type PathMap = PathMap of Map [] @@ -17,7 +19,7 @@ module internal PathMap = let addMapping (src : string) (dst : string) (PathMap map) : PathMap = // Normalise the path - let normalSrc = Path.GetFullPath src + let normalSrc = FileSystem.GetFullPathShim src let oldPrefix = if normalSrc.EndsWith dirSepStr then normalSrc diff --git a/src/fsharp/utils/PathMap.fsi b/src/fsharp/utils/PathMap.fsi index 8cf4e2f2485..061b623c53d 100644 --- a/src/fsharp/utils/PathMap.fsi +++ b/src/fsharp/utils/PathMap.fsi @@ -3,7 +3,7 @@ /// Functions to map real paths to paths to be written to PDB/IL namespace Internal.Utilities -type PathMap +type internal PathMap [] module internal PathMap = diff --git a/src/fsharp/utils/ResizeArray.fs b/src/fsharp/utils/ResizeArray.fs index 597f37d16b1..d7a2338670d 100644 --- a/src/fsharp/utils/ResizeArray.fs +++ b/src/fsharp/utils/ResizeArray.fs @@ -2,9 +2,7 @@ namespace Internal.Utilities -open Microsoft.FSharp.Core -open Microsoft.FSharp.Core.OptimizedClosures - +open FSharp.Core.OptimizedClosures [] module internal ResizeArray = diff --git a/src/fsharp/utils/ResizeArray.fsi b/src/fsharp/utils/ResizeArray.fsi index 55eb7afddc5..cdc216aaab9 100644 --- a/src/fsharp/utils/ResizeArray.fsi +++ b/src/fsharp/utils/ResizeArray.fsi @@ -2,12 +2,6 @@ namespace Internal.Utilities - -open System -open System.Collections.Generic -open Microsoft.FSharp.Core -open Microsoft.FSharp.Collections - [] /// Generic operations on the type System.Collections.Generic.List, which is called ResizeArray in the F# libraries. module internal ResizeArray = diff --git a/src/fsharp/utils/TaggedCollections.fs b/src/fsharp/utils/TaggedCollections.fs index cc52374fab4..b7c764a0f6f 100644 --- a/src/fsharp/utils/TaggedCollections.fs +++ b/src/fsharp/utils/TaggedCollections.fs @@ -48,19 +48,6 @@ namespace Internal.Utilities.Collections.Tagged | :? SetTreeNode<'T> as tn -> tn.Height | _ -> 1 -#if CHECKED - let rec checkInvariant (t:SetTree<'T>) = - // A good sanity check, loss of balance can hit perf - if isEmpty t then true - else - match t with - | :? SetTreeNode<'T> as tn -> - let h1 = height tn.Left - let h2 = height tn.Right - (-2 <= (h1 - h2) && (h1 - h2) <= 2) && checkInvariant tn.Left && checkInvariant tn.Right - | _ -> true -#endif - [] let tolerance = 2 @@ -520,10 +507,6 @@ namespace Internal.Utilities.Collections.Tagged member s.Contains(x) = SetTree.contains comparer x tree member s.Iterate(x) = SetTree.iter x tree member s.Fold f x = SetTree.fold f tree x - -#if CHECKED - member s.CheckBalanceInvariant = checkInvariant tree // diagnostics... -#endif member s.IsEmpty = SetTree.isEmpty tree member s.Partition predicate : Set<'T,'ComparerTag> * Set<'T,'ComparerTag> = diff --git a/src/fsharp/utils/filename.fs b/src/fsharp/utils/filename.fs deleted file mode 100644 index 9dd20134da1..00000000000 --- a/src/fsharp/utils/filename.fs +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -module internal Internal.Utilities.Filename - -open System.IO -open FSharp.Compiler.AbstractIL.Internal.Library - -exception IllegalFileNameChar of string * char - -let checkPathForIllegalChars = - let chars = new System.Collections.Generic.HashSet<_>(Path.GetInvalidPathChars()) - (fun (path:string) -> - for c in path do - if chars.Contains c then raise(IllegalFileNameChar(path, c))) - -// Case sensitive (original behaviour preserved). -let checkSuffix (x:string) (y:string) = x.EndsWithOrdinal(y) - -let hasExtensionWithValidate (validate:bool) (s:string) = - if validate then (checkPathForIllegalChars s) |> ignore - let sLen = s.Length - (sLen >= 1 && s.[sLen - 1] = '.' && s <> ".." && s <> ".") - || Path.HasExtension(s) - -let hasExtension (s:string) = hasExtensionWithValidate true s - -let chopExtension (s:string) = - checkPathForIllegalChars s - if s = "." then "" else // for OCaml compatibility - if not (hasExtensionWithValidate false s) then - raise (System.ArgumentException("chopExtension")) // message has to be precisely this, for OCaml compatibility, and no argument name can be set - Path.Combine (Path.GetDirectoryName s,Path.GetFileNameWithoutExtension(s)) - -let directoryName (s:string) = - checkPathForIllegalChars s - if s = "" then "." - else - match Path.GetDirectoryName(s) with - | null -> if FileSystem.IsPathRootedShim(s) then s else "." - | res -> if res = "" then "." else res - -let fileNameOfPath s = - checkPathForIllegalChars s - Path.GetFileName(s) - -let fileNameWithoutExtensionWithValidate (validate:bool) s = - if validate then checkPathForIllegalChars s |> ignore - Path.GetFileNameWithoutExtension(s) - -let fileNameWithoutExtension s = fileNameWithoutExtensionWithValidate true s - -let trimQuotes (s:string) = - s.Trim( [|' '; '\"'|] ) diff --git a/src/fsharp/utils/filename.fsi b/src/fsharp/utils/filename.fsi deleted file mode 100644 index 6edc831b4f9..00000000000 --- a/src/fsharp/utils/filename.fsi +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -/// Some filename operations. -module internal Internal.Utilities.Filename - -exception IllegalFileNameChar of string * char - -/// checkSuffix f s returns True if filename "f" ends in suffix "s", -/// e.g. checkSuffix "abc.fs" ".fs" returns true. -val checkSuffix: string -> string -> bool - -/// chopExtension f removes the extension from the given -/// filename. Raises ArgumentException if no extension is present. -val chopExtension: string -> string - -/// "directoryName" " decomposes a filename into a directory name. -val directoryName: string -> string - -/// Return True if the filename has a "." extension. -val hasExtension: string -> bool - -/// Get the filename of the given path. -val fileNameOfPath: string -> string - -/// Get the filename without extension of the given path. -val fileNameWithoutExtensionWithValidate: bool -> string -> string -val fileNameWithoutExtension: string -> string - -/// Trim the quotes and spaces from either end of a string -val trimQuotes: string -> string diff --git a/src/fsharp/utils/prim-lexing.fs b/src/fsharp/utils/prim-lexing.fs index 401c9852fe0..f5d4edee585 100644 --- a/src/fsharp/utils/prim-lexing.fs +++ b/src/fsharp/utils/prim-lexing.fs @@ -9,23 +9,23 @@ open System.IO type ISourceText = - abstract Item : int -> char with get + abstract Item: index: int -> char with get - abstract GetLineString : lineIndex: int -> string + abstract GetLineString: lineIndex: int -> string - abstract GetLineCount : unit -> int + abstract GetLineCount: unit -> int - abstract GetLastCharacterPosition : unit -> int * int + abstract GetLastCharacterPosition: unit -> int * int - abstract GetSubTextString : start: int * length: int -> string + abstract GetSubTextString: start: int * length: int -> string - abstract SubTextEquals : target: string * startIndex: int -> bool + abstract SubTextEquals: target: string * startIndex: int -> bool - abstract Length : int + abstract Length: int - abstract ContentEquals : sourceText: ISourceText -> bool + abstract ContentEquals: sourceText: ISourceText -> bool - abstract CopyTo : sourceIndex: int * destination: char [] * destinationIndex: int * count: int -> unit + abstract CopyTo: sourceIndex: int * destination: char [] * destinationIndex: int * count: int -> unit [] type StringText(str: string) = @@ -49,36 +49,36 @@ type StringText(str: string) = // So, it's ok that we do this for now. lazy getLines str - member __.String = str + member _.String = str - override __.GetHashCode() = str.GetHashCode() - override __.Equals(obj: obj) = + override _.GetHashCode() = str.GetHashCode() + override _.Equals(obj: obj) = match obj with | :? StringText as other -> other.String.Equals(str) | :? string as other -> other.Equals(str) | _ -> false - override __.ToString() = str + override _.ToString() = str interface ISourceText with - member __.Item with get index = str.[index] + member _.Item with get index = str.[index] - member __.GetLastCharacterPosition() = + member _.GetLastCharacterPosition() = let lines = getLines.Value if lines.Length > 0 then (lines.Length, lines.[lines.Length - 1].Length) else (0, 0) - member __.GetLineString(lineIndex) = + member _.GetLineString(lineIndex) = getLines.Value.[lineIndex] - member __.GetLineCount() = getLines.Value.Length + member _.GetLineCount() = getLines.Value.Length - member __.GetSubTextString(start, length) = + member _.GetSubTextString(start, length) = str.Substring(start, length) - member __.SubTextEquals(target, startIndex) = + member _.SubTextEquals(target, startIndex) = if startIndex < 0 || startIndex >= str.Length then invalidArg "startIndex" "Out of range." @@ -91,14 +91,14 @@ type StringText(str: string) = str.IndexOf(target, startIndex, target.Length) <> -1 - member __.Length = str.Length + member _.Length = str.Length member this.ContentEquals(sourceText) = match sourceText with | :? StringText as sourceText when sourceText = this || sourceText.String = str -> true | _ -> false - member __.CopyTo(sourceIndex, destination, destinationIndex, count) = + member _.CopyTo(sourceIndex, destination, destinationIndex, count) = str.CopyTo(sourceIndex, destination, destinationIndex, count) module SourceText = @@ -177,7 +177,7 @@ namespace Internal.Utilities.Text.Lexing type internal LexBufferFiller<'Char> = (LexBuffer<'Char> -> unit) and [] - internal LexBuffer<'Char>(filler: LexBufferFiller<'Char>, supportsFeature:LanguageFeature -> bool) = + internal LexBuffer<'Char>(filler: LexBufferFiller<'Char>, reportLibraryOnlyFeatures: bool, supportsFeature:LanguageFeature -> bool) = let context = new Dictionary(1) let mutable buffer = [||] /// number of valid characters beyond bufferScanStart. @@ -247,35 +247,36 @@ namespace Internal.Utilities.Text.Lexing Array.blit buffer bufferScanStart repl bufferScanStart bufferScanLength buffer <- repl - member __.SupportsFeature featureId = supportsFeature featureId + member _.ReportLibraryOnlyFeatures = reportLibraryOnlyFeatures + member _.SupportsFeature featureId = supportsFeature featureId - static member FromFunction (supportsFeature:LanguageFeature -> bool, f : 'Char[] * int * int -> int) : LexBuffer<'Char> = + static member FromFunction (reportLibraryOnlyFeatures, supportsFeature:LanguageFeature -> bool, f : 'Char[] * int * int -> int) : LexBuffer<'Char> = 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.BufferMaxScanLength <- lexBuffer.BufferScanLength + n - new LexBuffer<'Char>(filler, supportsFeature) + new LexBuffer<'Char>(filler, reportLibraryOnlyFeatures, supportsFeature) // Important: This method takes ownership of the array - static member FromArrayNoCopy (supportsFeature:LanguageFeature -> bool, buffer: 'Char[]) : LexBuffer<'Char> = - let lexBuffer = new LexBuffer<'Char>((fun _ -> ()), supportsFeature) + static member FromArrayNoCopy (reportLibraryOnlyFeatures, supportsFeature:LanguageFeature -> bool, buffer: 'Char[]) : LexBuffer<'Char> = + let lexBuffer = new LexBuffer<'Char>((fun _ -> ()), reportLibraryOnlyFeatures, supportsFeature) lexBuffer.Buffer <- buffer lexBuffer.BufferMaxScanLength <- buffer.Length lexBuffer // Important: this method does copy the array - static member FromArray (supportsFeature: LanguageFeature -> bool, s: 'Char[]) : LexBuffer<'Char> = + static member FromArray (reportLibraryOnlyFeatures, supportsFeature: LanguageFeature -> bool, s: 'Char[]) : LexBuffer<'Char> = let buffer = Array.copy s - LexBuffer<'Char>.FromArrayNoCopy(supportsFeature, buffer) + LexBuffer<'Char>.FromArrayNoCopy(reportLibraryOnlyFeatures, supportsFeature, buffer) // Important: This method takes ownership of the array - static member FromChars (supportsFeature:LanguageFeature -> bool, arr:char[]) = LexBuffer.FromArrayNoCopy (supportsFeature, arr) + static member FromChars (reportLibraryOnlyFeatures, supportsFeature:LanguageFeature -> bool, arr:char[]) = LexBuffer.FromArrayNoCopy (reportLibraryOnlyFeatures, supportsFeature, arr) - static member FromSourceText (supportsFeature: LanguageFeature -> bool, sourceText: ISourceText) = + static member FromSourceText (reportLibraryOnlyFeatures, supportsFeature: LanguageFeature -> bool, sourceText: ISourceText) = let mutable currentSourceIndex = 0 - LexBuffer.FromFunction(supportsFeature, fun (chars, start, length) -> + LexBuffer.FromFunction(reportLibraryOnlyFeatures, supportsFeature, fun (chars, start, length) -> let lengthToCopy = if currentSourceIndex + length <= sourceText.Length then length diff --git a/src/fsharp/utils/prim-lexing.fsi b/src/fsharp/utils/prim-lexing.fsi index 957fb698cb3..d8023a76f6d 100644 --- a/src/fsharp/utils/prim-lexing.fsi +++ b/src/fsharp/utils/prim-lexing.fsi @@ -5,29 +5,41 @@ namespace FSharp.Compiler.Text +/// Represents an input to the F# compiler type ISourceText = - abstract Item : int -> char with get + /// Gets a character in an input based on an index of characters from the start of the file + abstract Item: index: int -> char with get - abstract GetLineString : lineIndex: int -> string + /// Gets a line of an input by index + abstract GetLineString: lineIndex: int -> string - abstract GetLineCount : unit -> int + /// Gets the count of lines in the input + abstract GetLineCount: unit -> int - abstract GetLastCharacterPosition : unit -> int * int + /// Gets the last character position in the input, returning line and column + abstract GetLastCharacterPosition: unit -> int * int - abstract GetSubTextString : start: int * length: int -> string + /// Gets a section of the input + abstract GetSubTextString: start: int * length: int -> string - abstract SubTextEquals : target: string * startIndex: int -> bool + /// Checks if a section of the input is equal to the given string + abstract SubTextEquals: target: string * startIndex: int -> bool - abstract Length : int + /// Gets the total length of the input in characters + abstract Length: int - abstract ContentEquals : sourceText: ISourceText -> bool + /// Checks if one input is equal to another + abstract ContentEquals: sourceText: ISourceText -> bool - abstract CopyTo : sourceIndex: int * destination: char [] * destinationIndex: int * count: int -> unit + /// Copies a section of the input to the given destination ad the given index + abstract CopyTo: sourceIndex: int * destination: char [] * destinationIndex: int * count: int -> unit +/// Functions related to ISourceText objects module SourceText = - val ofString : string -> ISourceText + /// Creates an ISourceText object from the given string + val ofString: string -> ISourceText // // NOTE: the code in this file is a drop-in replacement runtime for Lexing.fsi from the FsLexYacc repository @@ -37,36 +49,34 @@ namespace Internal.Utilities.Text.Lexing open System.Collections.Generic open FSharp.Compiler.Text -open Microsoft.FSharp.Core -open Microsoft.FSharp.Control open FSharp.Compiler.Features /// Position information stored for lexing tokens [] type internal Position = - /// The file index for the file associated with the input stream, use fileOfFileIndex in range.fs to decode - val FileIndex : int + /// The file index for the file associated with the input stream, use fileOfFileIndex to decode + val FileIndex: int /// The line number in the input stream, assuming fresh positions have been updated /// for the new line by modifying the EndPos property of the LexBuffer. - val Line : int + val Line: int /// The line number for the position in the input stream, assuming fresh positions have been updated /// using for the new line. - val OriginalLine : int + val OriginalLine: int /// The character number in the input stream. - val AbsoluteOffset : int + val AbsoluteOffset: int /// Return absolute offset of the start of the line marked by the position. - val StartOfLineAbsoluteOffset : int + val StartOfLineAbsoluteOffset: int /// Return the column number marked by the position, /// i.e. the difference between the AbsoluteOffset and the StartOfLineAbsoluteOffset - member Column : int + member Column: int /// Given a position just beyond the end of a line, return a position at the start of the next line. - member NextLine : Position + member NextLine: Position /// Given a position at the start of a token of length n, return a position just beyond the end of the token. member EndOfToken: n:int -> Position @@ -75,15 +85,15 @@ type internal Position = member ShiftColumnBy: by:int -> Position /// Same line, column -1. - member ColumnMinusOne : Position + member ColumnMinusOne: Position /// Apply a #line directive. - member ApplyLineDirective : fileIdx:int * line:int -> Position + member ApplyLineDirective: fileIdx:int * line:int -> Position /// Get an arbitrary position, with the empty string as filename. - static member Empty : Position + static member Empty: Position - static member FirstLine : fileIdx:int -> Position + static member FirstLine: fileIdx:int -> Position [] /// Input buffers consumed by lexers generated by fslex.exe. @@ -106,33 +116,36 @@ type internal LexBuffer<'Char> = member LexemeContains: 'Char -> bool /// Fast helper to turn the matched characters into a string, avoiding an intermediate array. - static member LexemeString : LexBuffer -> string + static member LexemeString: LexBuffer -> string /// Dynamically typed, non-lexically scoped parameter table. - member BufferLocalStore : IDictionary + member BufferLocalStore: IDictionary /// True if the refill of the buffer ever failed , or if explicitly set to True. member IsPastEndOfStream: bool with get,set + /// Determines if the parser can report FSharpCore library-only features. + member ReportLibraryOnlyFeatures: bool + /// True if the refill of the buffer ever failed , or if explicitly set to True. member SupportsFeature:LanguageFeature -> bool /// Create a lex buffer suitable for Unicode lexing that reads characters from the given array. /// Important: does take ownership of the array. - static member FromChars: (LanguageFeature -> bool) * char[] -> LexBuffer + static member FromChars: reportLibraryOnlyFeatures: bool * (LanguageFeature -> bool) * char[] -> LexBuffer /// Create a lex buffer that reads character or byte inputs by using the given function. - static member FromFunction: (LanguageFeature -> bool) * ('Char[] * int * int -> int) -> LexBuffer<'Char> + static member FromFunction: reportLibraryOnlyFeatures: bool * (LanguageFeature -> bool) * ('Char[] * int * int -> int) -> LexBuffer<'Char> /// Create a lex buffer backed by source text. - static member FromSourceText : (LanguageFeature -> bool) * ISourceText -> LexBuffer + static member FromSourceText: reportLibraryOnlyFeatures: bool * (LanguageFeature -> bool) * ISourceText -> LexBuffer /// The type of tables for an unicode lexer generated by fslex.exe. [] type internal UnicodeTables = /// Create the tables from raw data - static member Create : uint16[][] * uint16[] -> UnicodeTables + static member Create: uint16[][] * uint16[] -> UnicodeTables /// Interpret tables for a unicode lexer generated by fslex.exe. member Interpret: initialState:int * LexBuffer -> int diff --git a/src/fsharp/utils/sformat.fs b/src/fsharp/utils/sformat.fs index 5798154b5e0..2b28a8085c4 100644 --- a/src/fsharp/utils/sformat.fs +++ b/src/fsharp/utils/sformat.fs @@ -11,7 +11,7 @@ #nowarn "52" // The value has been copied to ensure the original is not mutated by this operation #if COMPILER -namespace Internal.Utilities.StructuredFormat +namespace FSharp.Compiler.Text #else // FSharp.Core.dll: namespace Microsoft.FSharp.Text.StructuredPrintfImpl @@ -31,7 +31,7 @@ open Microsoft.FSharp.Reflection open Microsoft.FSharp.Collections [] -type LayoutTag = +type TextTag = | ActivePatternCase | ActivePatternResult | Alias @@ -67,9 +67,10 @@ type LayoutTag = | UnknownType | UnknownEntity -type TaggedText = - abstract Tag: LayoutTag - abstract Text: string +type TaggedText(tag: TextTag, text: string) = + member x.Tag = tag + member x.Text = text + override x.ToString() = text + "(tag: " + tag.ToString() + ")" type TaggedTextWriter = abstract Write: t: TaggedText -> unit @@ -115,16 +116,41 @@ type IEnvironment = abstract MaxColumns: int abstract MaxRows: int -module TaggedTextOps = - let mkTag tag text = - { new TaggedText with - member _.Tag = tag - member _.Text = text } +[] +module TaggedText = + let mkTag tag text = TaggedText(tag, text) let length (tt: TaggedText) = tt.Text.Length let toText (tt: TaggedText) = tt.Text + let tagClass name = mkTag TextTag.Class name + let tagUnionCase t = mkTag TextTag.UnionCase t + let tagField t = mkTag TextTag.Field t + let tagNumericLiteral t = mkTag TextTag.NumericLiteral t + let tagKeyword t = mkTag TextTag.Keyword t + let tagStringLiteral t = mkTag TextTag.StringLiteral t + let tagLocal t = mkTag TextTag.Local t + let tagText t = mkTag TextTag.Text t + let tagRecordField t = mkTag TextTag.RecordField t + let tagProperty t = mkTag TextTag.Property t + let tagMethod t = mkTag TextTag.Method t + let tagPunctuation t = mkTag TextTag.Punctuation t + let tagOperator t = mkTag TextTag.Operator t + let tagSpace t = mkTag TextTag.Space t + + let leftParen = tagPunctuation "(" + let rightParen = tagPunctuation ")" + let comma = tagPunctuation "," + let semicolon = tagPunctuation ";" + let questionMark = tagPunctuation "?" + let leftBracket = tagPunctuation "[" + let rightBracket = tagPunctuation "]" + let leftBrace= tagPunctuation "{" + let rightBrace = tagPunctuation "}" + let space = tagSpace " " + let equals = tagOperator "=" - let tagAlias t = mkTag LayoutTag.Alias t +#if COMPILER + let tagAlias t = mkTag TextTag.Alias t let keywordFunctions = [ "raise" @@ -156,81 +182,98 @@ module TaggedTextOps = "unativeint" ] |> Set.ofList - let tagClass name = mkTag LayoutTag.Class name - let tagUnionCase t = mkTag LayoutTag.UnionCase t - let tagDelegate t = mkTag LayoutTag.Delegate t - let tagEnum t = mkTag LayoutTag.Enum t - let tagEvent t = mkTag LayoutTag.Event t - let tagField t = mkTag LayoutTag.Field t - let tagInterface t = mkTag LayoutTag.Interface t - let tagKeyword t = mkTag LayoutTag.Keyword t - let tagLineBreak t = mkTag LayoutTag.LineBreak t - let tagLocal t = mkTag LayoutTag.Local t - let tagRecord t = mkTag LayoutTag.Record t - let tagRecordField t = mkTag LayoutTag.RecordField t - let tagMethod t = mkTag LayoutTag.Method t - let tagModule t = mkTag LayoutTag.Module t - let tagModuleBinding name = if keywordFunctions.Contains name then mkTag LayoutTag.Keyword name else mkTag LayoutTag.ModuleBinding name - let tagFunction t = mkTag LayoutTag.Function t - let tagNamespace t = mkTag LayoutTag.Namespace t - let tagNumericLiteral t = mkTag LayoutTag.NumericLiteral t - let tagOperator t = mkTag LayoutTag.Operator t - let tagParameter t = mkTag LayoutTag.Parameter t - let tagProperty t = mkTag LayoutTag.Property t - let tagSpace t = mkTag LayoutTag.Space t - let tagStringLiteral t = mkTag LayoutTag.StringLiteral t - let tagStruct t = mkTag LayoutTag.Struct t - let tagTypeParameter t = mkTag LayoutTag.TypeParameter t - let tagText t = mkTag LayoutTag.Text t - let tagPunctuation t = mkTag LayoutTag.Punctuation t - - module Literals = - // common tagged literals - let lineBreak = tagLineBreak "\n" - let space = tagSpace " " - let comma = tagPunctuation "," - let semicolon = tagPunctuation ";" - let leftParen = tagPunctuation "(" - let rightParen = tagPunctuation ")" - let leftBracket = tagPunctuation "[" - let rightBracket = tagPunctuation "]" - let leftBrace= tagPunctuation "{" - let rightBrace = tagPunctuation "}" - let leftBraceBar = tagPunctuation "{|" - let rightBraceBar = tagPunctuation "|}" - let equals = tagOperator "=" - let arrow = tagPunctuation "->" - let questionMark = tagPunctuation "?" - -module LayoutOps = - open TaggedTextOps - - let mkNode l r joint = - Node(l, r, joint) + let tagDelegate t = mkTag TextTag.Delegate t + let tagEnum t = mkTag TextTag.Enum t + let tagEvent t = mkTag TextTag.Event t + let tagInterface t = mkTag TextTag.Interface t + let tagLineBreak t = mkTag TextTag.LineBreak t + let tagRecord t = mkTag TextTag.Record t + let tagModule t = mkTag TextTag.Module t + let tagModuleBinding name = if keywordFunctions.Contains name then mkTag TextTag.Keyword name else mkTag TextTag.ModuleBinding name + let tagFunction t = mkTag TextTag.Function t + let tagNamespace t = mkTag TextTag.Namespace t + let tagParameter t = mkTag TextTag.Parameter t + let tagStruct t = mkTag TextTag.Struct t + let tagTypeParameter t = mkTag TextTag.TypeParameter t + let tagActivePatternCase t = mkTag TextTag.ActivePatternCase t + let tagActivePatternResult t = mkTag TextTag.ActivePatternResult t + let tagUnion t = mkTag TextTag.Union t + let tagMember t = mkTag TextTag.Member t + let tagUnknownEntity t = mkTag TextTag.UnknownEntity t + let tagUnknownType t = mkTag TextTag.UnknownType t + + // common tagged literals + let lineBreak = tagLineBreak "\n" + let leftBraceBar = tagPunctuation "{|" + let rightBraceBar = tagPunctuation "|}" + let arrow = tagPunctuation "->" + let dot = tagPunctuation "." + let leftAngle = tagPunctuation "<" + let rightAngle = tagPunctuation ">" + let colon = tagPunctuation ":" + let minus = tagPunctuation "-" + let keywordTrue = tagKeyword "true" + let keywordFalse = tagKeyword "false" + let structUnit = tagStruct "unit" + let keywordStatic = tagKeyword "static" + let keywordMember = tagKeyword "member" + let keywordVal = tagKeyword "val" + let keywordEvent = tagKeyword "event" + let keywordWith = tagKeyword "with" + let keywordSet = tagKeyword "set" + let keywordGet = tagKeyword "get" + let bar = tagPunctuation "|" + let keywordStruct = tagKeyword "struct" + let keywordInherit = tagKeyword "inherit" + let keywordEnd = tagKeyword "end" + let keywordNested = tagKeyword "nested" + let keywordType = tagKeyword "type" + let keywordDelegate = tagKeyword "delegate" + let keywordOf = tagKeyword "of" + let keywordInternal = tagKeyword "internal" + let keywordPrivate = tagKeyword "private" + let keywordAbstract = tagKeyword "abstract" + let keywordOverride = tagKeyword "override" + let keywordEnum = tagKeyword "enum" + let leftBracketBar = tagPunctuation "[|" + let rightBracketBar = tagPunctuation "|]" + let keywordTypeof = tagKeyword "typeof" + let keywordTypedefof = tagKeyword "typedefof" + let leftBracketAngle = tagPunctuation "[<" + let rightBracketAngle = tagPunctuation ">]" + let star = tagOperator "*" + let keywordNew = tagKeyword "new" +#endif + +[] +module Layout = // constructors let objL (value:obj) = match value with - | :? string as s -> Leaf (false, mkTag LayoutTag.Text s, false) + | :? string as s -> Leaf (false, mkTag TextTag.Text s, false) | o -> ObjLeaf (false, o, false) - let sLeaf (l, t, r) = Leaf (l, t, r) - - let wordL text = sLeaf (false, text, false) + let wordL text = Leaf (false, text, false) - let sepL text = sLeaf (true , text, true) + let sepL text = Leaf (true , text, true) - let rightL text = sLeaf (true , text, false) + let rightL text = Leaf (true , text, false) - let leftL text = sLeaf (false, text, true) + let leftL text = Leaf (false, text, true) - let emptyL = sLeaf (true, mkTag LayoutTag.Text "", true) + let emptyL = Leaf (true, mkTag TextTag.Text "", true) let isEmptyL layout = match layout with | Leaf(true, s, true) -> s.Text = "" | _ -> false + let mkNode l r joint = + if isEmptyL l then r else + if isEmptyL r then l else + Node(l, r, joint) + let aboveL layout1 layout2 = mkNode layout1 layout2 (Broken 0) let tagAttrL text maps layout = Attr(text, maps, layout) @@ -248,11 +291,19 @@ module LayoutOps = let (---) layout1 layout2 = mkNode layout1 layout2 (Breakable 2) + let (----) layout1 layout2 = mkNode layout1 layout2 (Breakable 3) + + let (-----) layout1 layout2 = mkNode layout1 layout2 (Breakable 4) + let (@@) layout1 layout2 = apply2 (fun l r -> mkNode l r (Broken 0)) layout1 layout2 let (@@-) layout1 layout2 = apply2 (fun l r -> mkNode l r (Broken 1)) layout1 layout2 let (@@--) layout1 layout2 = apply2 (fun l r -> mkNode l r (Broken 2)) layout1 layout2 + + let (@@---) layout1 layout2 = apply2 (fun l r -> mkNode l r (Broken 3)) layout1 layout2 + + let (@@----) layout1 layout2 = apply2 (fun l r -> mkNode l r (Broken 4)) layout1 layout2 let tagListL tagger els = match els with @@ -265,17 +316,17 @@ module LayoutOps = | y :: ys -> process' (tagger prefixL ++ y) ys process' x xs - let commaListL layouts = tagListL (fun prefixL -> prefixL ^^ rightL Literals.comma) layouts + let commaListL layouts = tagListL (fun prefixL -> prefixL ^^ rightL comma) layouts - let semiListL layouts = tagListL (fun prefixL -> prefixL ^^ rightL Literals.semicolon) layouts + let semiListL layouts = tagListL (fun prefixL -> prefixL ^^ rightL semicolon) layouts let spaceListL layouts = tagListL (fun prefixL -> prefixL) layouts let sepListL layout1 layouts = tagListL (fun prefixL -> prefixL ^^ layout1) layouts - let bracketL layout = leftL Literals.leftParen ^^ layout ^^ rightL Literals.rightParen + let bracketL layout = leftL leftParen ^^ layout ^^ rightL rightParen - let tupleL layouts = bracketL (sepListL (sepL Literals.comma) layouts) + let tupleL layouts = bracketL (sepListL (sepL comma) layouts) let aboveListL layouts = match layouts with @@ -289,13 +340,13 @@ module LayoutOps = | Some x -> wordL (tagUnionCase "Some") -- (selector x) let listL selector value = - leftL Literals.leftBracket ^^ sepListL (sepL Literals.semicolon) (List.map selector value) ^^ rightL Literals.rightBracket + leftL leftBracket ^^ sepListL (sepL semicolon) (List.map selector value) ^^ rightL rightBracket let squareBracketL layout = - leftL Literals.leftBracket ^^ layout ^^ rightL Literals.rightBracket + leftL leftBracket ^^ layout ^^ rightL rightBracket let braceL layout = - leftL Literals.leftBrace ^^ layout ^^ rightL Literals.rightBrace + leftL leftBrace ^^ layout ^^ rightL rightBrace let boundedUnfoldL (itemL: 'a -> Layout) @@ -471,9 +522,7 @@ module ReflectUtils = module Display = open ReflectUtils - open LayoutOps - open TaggedTextOps - + let string_of_int (i:int) = i.ToString() let typeUsesSystemObjectToString (ty:System.Type) = @@ -690,7 +739,7 @@ module Display = | Node (l, r, _) -> let jm = Layout.JuxtapositionMiddle (l, r) let z = addL z pos l - let z = if jm then z else addText z Literals.space + let z = if jm then z else addText z space let pos = index z let z = addL z pos r z @@ -724,8 +773,8 @@ module Display = let unitL = wordL (tagPunctuation "()") let makeRecordL nameXs = - let itemL (name, xL) = (wordL name ^^ wordL Literals.equals) -- xL - let braceL xs = (wordL Literals.leftBrace) ^^ xs ^^ (wordL Literals.rightBrace) + let itemL (name, xL) = (wordL name ^^ wordL equals) -- xL + let braceL xs = (wordL leftBrace) ^^ xs ^^ (wordL rightBrace) nameXs |> List.map itemL @@ -735,25 +784,25 @@ module Display = let makePropertiesL nameXs = let itemL (name, v) = let labelL = wordL name - (labelL ^^ wordL Literals.equals) + (labelL ^^ wordL equals) ^^ (match v with - | None -> wordL Literals.questionMark + | None -> wordL questionMark | Some xL -> xL) - ^^ (rightL Literals.semicolon) - let braceL xs = (leftL Literals.leftBrace) ^^ xs ^^ (rightL Literals.rightBrace) + ^^ (rightL semicolon) + let braceL xs = (leftL leftBrace) ^^ xs ^^ (rightL rightBrace) braceL (aboveListL (List.map itemL nameXs)) let makeListL itemLs = - (leftL Literals.leftBracket) - ^^ sepListL (rightL Literals.semicolon) itemLs - ^^ (rightL Literals.rightBracket) + (leftL leftBracket) + ^^ sepListL (rightL semicolon) itemLs + ^^ (rightL rightBracket) let makeArrayL xs = (leftL (tagPunctuation "[|")) - ^^ sepListL (rightL Literals.semicolon) xs + ^^ sepListL (rightL semicolon) xs ^^ (rightL (tagPunctuation "|]")) - let makeArray2L xs = leftL Literals.leftBracket ^^ aboveListL xs ^^ rightL Literals.rightBracket + let makeArray2L xs = leftL leftBracket ^^ aboveListL xs ^^ rightL rightBracket let getProperty (ty: Type) (obj: obj) name = ty.InvokeMember(name, (BindingFlags.GetProperty ||| BindingFlags.Instance ||| BindingFlags.Public ||| BindingFlags.NonPublic), null, obj, [| |],CultureInfo.InvariantCulture) @@ -977,13 +1026,13 @@ module Display = // tuples up args to UnionConstruction or ExceptionConstructor. no node count. match recd with | [(_,x)] -> nestedObjL depthLim Precedence.BracketIfTupleOrNotAtomic x - | txs -> leftL Literals.leftParen ^^ commaListL (List.map (snd >> nestedObjL depthLim Precedence.BracketIfTuple) txs) ^^ rightL Literals.rightParen + | txs -> leftL leftParen ^^ commaListL (List.map (snd >> nestedObjL depthLim Precedence.BracketIfTuple) txs) ^^ rightL rightParen and bracketIfL flag basicL = - if flag then (leftL Literals.leftParen) ^^ basicL ^^ (rightL Literals.rightParen) else basicL + if flag then (leftL leftParen) ^^ basicL ^^ (rightL rightParen) else basicL and tupleValueL depthLim prec vals tupleType = - let basicL = sepListL (rightL Literals.comma) (List.map (nestedObjL depthLim Precedence.BracketIfTuple ) (Array.toList vals)) + let basicL = sepListL (rightL comma) (List.map (nestedObjL depthLim Precedence.BracketIfTuple ) (Array.toList vals)) let fields = bracketIfL (prec <= Precedence.BracketIfTuple) basicL match tupleType with | TupleType.Value -> structL ^^ fields @@ -1118,7 +1167,7 @@ module Display = and objectValueWithPropertiesL depthLim (ty: Type) (obj: obj) = // This buries an obj in the layout, rendered at squash time via a leafFormatter. - let basicL = LayoutOps.objL obj + let basicL = Layout.objL obj let props = ty.GetProperties(BindingFlags.GetField ||| BindingFlags.Instance ||| BindingFlags.Public) let fields = ty.GetFields(BindingFlags.Instance ||| BindingFlags.Public) |> Array.map (fun i -> i :> MemberInfo) let propsAndFields = @@ -1210,7 +1259,7 @@ module Display = | _ -> countNodes 1 // This buries an obj in the layout, rendered at squash time via a leafFormatter. - LayoutOps.objL obj + Layout.objL obj member _.Format(showMode, x:'a, xty:Type) = objL showMode opts.PrintDepth Precedence.BracketIfTuple (x, xty) @@ -1285,8 +1334,8 @@ module Display = let asTaggedTextWriter (writer: TextWriter) = { new TaggedTextWriter with - member __.Write(t) = writer.Write t.Text - member __.WriteLine() = writer.WriteLine() } + member _.Write(t) = writer.Write t.Text + member _.WriteLine() = writer.WriteLine() } let output_layout_tagged options writer layout = layout |> squash_layout options diff --git a/src/fsharp/utils/sformat.fsi b/src/fsharp/utils/sformat.fsi index 6ef3ff8fcd6..dd0799c6b66 100644 --- a/src/fsharp/utils/sformat.fsi +++ b/src/fsharp/utils/sformat.fsi @@ -1,25 +1,20 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -// This file is compiled 2(!) times in the codebase +// This file is compiled twice in the codebase // - as the internal implementation of printf '%A' formatting -// defines: FSHARP_CORE -// - as the internal implementation of structured formatting in FSharp.Compiler.Service.dll +// - as the internal implementation of structured formatting in FSharp.Compiler.Service/Private.dll // defines: COMPILER -// NOTE: this implementation is used by fsi.exe. This is very important. +// NOTE: this implementation is used by fsi.exe. // -// The one implementation file is used because we very much want to keep the implementations of +// The one implementation file is used to keep the implementations of // structured formatting the same for fsi.exe and '%A' printing. However fsi.exe may have // a richer feature set. // -// Note no layout objects are ever transferred between the above implementations, and in -// all 4 cases the layout types are really different types. +// Note no layout objects are ever transferred between the above implementations. #if COMPILER -// fsc.exe: -// FSharp.Compiler.Service.dll: -namespace Internal.Utilities.StructuredFormat +namespace FSharp.Compiler.Text #else -// FSharp.Core.dll: namespace Microsoft.FSharp.Text.StructuredPrintfImpl #endif @@ -29,28 +24,19 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl open Microsoft.FSharp.Collections open Microsoft.FSharp.Primitives.Basics -#if FSHARP_CORE - /// Data representing structured layouts of terms. - // FSharp.Core.dll makes things internal and hides representations - type internal Layout - - type internal LayoutTag - - type internal TaggedText = - abstract Tag: LayoutTag - abstract Text: string -#else // FSharp.Compiler.Service.dll, fsc.exe +#if COMPILER /// Data representing joints in structured layouts of terms. The representation /// of this data type is only for the consumption of formatting engines. [] - type public Joint = + type internal Joint = | Unbreakable | Breakable of indentation: int | Broken of indentation: int - [] - type public LayoutTag = + /// Represents the tag of some tagged text + [] + type TextTag = | ActivePatternCase | ActivePatternResult | Alias @@ -86,83 +72,145 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl | UnknownType | UnknownEntity + /// Represents text with a tag type public TaggedText = - abstract Tag: LayoutTag - abstract Text: string + /// Creates text with a tag + new: tag: TextTag * text: string -> TaggedText + /// Gets the tag + member Tag: TextTag + + /// Gets the text + member Text: string - type public TaggedTextWriter = + type internal TaggedTextWriter = abstract Write: t: TaggedText -> unit abstract WriteLine: unit -> unit - /// Data representing structured layouts of terms. The representation - /// of this data type is only for the consumption of formatting engines. + /// Data representing structured layouts of terms. [] - type public Layout = + type internal Layout = | ObjLeaf of juxtLeft: bool * object: obj * juxtRight: bool | Leaf of juxtLeft: bool * text: TaggedText * justRight: bool | Node of leftLayout: Layout * rightLayout: Layout * joint: Joint | Attr of text: string * attributes: (string * string) list * layout: Layout - static member JuxtapositionMiddle: left: Layout * right: Layout -> bool + static member internal JuxtapositionMiddle: left: Layout * right: Layout -> bool + +#else // FSharp.Compiler.Service.dll, fsc.exe + /// Data representing structured layouts of terms. + // FSharp.Core.dll makes things internal and hides representations + type internal Layout + + type internal TextTag + + [] + type internal TaggedText = + member Tag: TextTag + member Text: string #endif #if COMPILER - module public TaggedTextOps = + module public TaggedText = #else - module internal TaggedTextOps = + module internal TaggedText = #endif - val mkTag: LayoutTag -> string -> TaggedText - val keywordFunctions: Set - val tagAlias: string -> TaggedText + val tagText: string -> TaggedText val tagClass: string -> TaggedText - val tagUnionCase: string -> TaggedText - val tagDelegate: string -> TaggedText - val tagEnum: string -> TaggedText - val tagEvent: string -> TaggedText - val tagField: string -> TaggedText - val tagInterface: string -> TaggedText - val tagKeyword: string -> TaggedText - val tagLineBreak: string -> TaggedText - val tagMethod: string -> TaggedText - val tagModuleBinding: string -> TaggedText - val tagFunction : string -> TaggedText - val tagLocal: string -> TaggedText - val tagRecord: string -> TaggedText - val tagRecordField: string -> TaggedText - val tagModule: string -> TaggedText + val internal tagField: string -> TaggedText + val internal tagKeyword: string -> TaggedText + val internal tagLocal: string -> TaggedText + val internal tagProperty: string -> TaggedText + val internal tagMethod: string -> TaggedText + val internal tagUnionCase: string -> TaggedText + + val comma: TaggedText + +#if COMPILER val tagNamespace: string -> TaggedText - val tagNumericLiteral: string -> TaggedText - val tagOperator: string -> TaggedText val tagParameter: string -> TaggedText - val tagProperty: string -> TaggedText val tagSpace: string -> TaggedText - val tagStringLiteral: string -> TaggedText - val tagStruct: string -> TaggedText - val tagTypeParameter: string -> TaggedText - val tagText: string -> TaggedText - val tagPunctuation: string -> TaggedText - - module Literals = - // common tagged literals - val lineBreak: TaggedText - val space: TaggedText - val comma: TaggedText - val semicolon: TaggedText - val leftParen: TaggedText - val rightParen: TaggedText - val leftBracket: TaggedText - val rightBracket: TaggedText - val leftBrace: TaggedText - val rightBrace: TaggedText - val leftBraceBar: TaggedText - val rightBraceBar: TaggedText - val equals: TaggedText - val arrow: TaggedText - val questionMark: TaggedText -#if COMPILER - type public IEnvironment = + // common tagged literals + val dot: TaggedText + val colon: TaggedText + val minus: TaggedText + val lineBreak: TaggedText + val space: TaggedText + + val internal mkTag: TextTag -> string -> TaggedText + val internal keywordFunctions: Set + val internal tagAlias: string -> TaggedText + val internal tagDelegate: string -> TaggedText + val internal tagEnum: string -> TaggedText + val internal tagEvent: string -> TaggedText + val internal tagInterface: string -> TaggedText + val internal tagLineBreak: string -> TaggedText + val internal tagModuleBinding: string -> TaggedText + val internal tagFunction: string -> TaggedText + val internal tagRecord: string -> TaggedText + val internal tagRecordField: string -> TaggedText + val internal tagModule: string -> TaggedText + val internal tagNumericLiteral: string -> TaggedText + val internal tagOperator: string -> TaggedText + val internal tagStringLiteral: string -> TaggedText + val internal tagStruct: string -> TaggedText + val internal tagTypeParameter: string -> TaggedText + val internal tagPunctuation: string -> TaggedText + val internal tagActivePatternCase: string -> TaggedText + val internal tagActivePatternResult: string -> TaggedText + val internal tagUnion: string -> TaggedText + val internal tagMember: string -> TaggedText + val internal tagUnknownEntity: string -> TaggedText + val internal tagUnknownType: string -> TaggedText + + val internal leftAngle: TaggedText + val internal rightAngle: TaggedText + val internal keywordTrue: TaggedText + val internal keywordFalse: TaggedText + val internal semicolon: TaggedText + val internal leftParen: TaggedText + val internal rightParen: TaggedText + val internal leftBracket: TaggedText + val internal rightBracket: TaggedText + val internal leftBrace: TaggedText + val internal rightBrace: TaggedText + val internal leftBraceBar: TaggedText + val internal rightBraceBar: TaggedText + val internal equals: TaggedText + val internal arrow: TaggedText + val internal questionMark: TaggedText + val internal structUnit: TaggedText + val internal keywordStatic: TaggedText + val internal keywordMember: TaggedText + val internal keywordVal: TaggedText + val internal keywordEvent: TaggedText + val internal keywordWith: TaggedText + val internal keywordSet: TaggedText + val internal keywordGet: TaggedText + val internal bar: TaggedText + val internal keywordStruct: TaggedText + val internal keywordInherit: TaggedText + val internal keywordEnd: TaggedText + val internal keywordNested: TaggedText + val internal keywordType: TaggedText + val internal keywordDelegate: TaggedText + val internal keywordOf: TaggedText + val internal keywordInternal: TaggedText + val internal keywordPrivate: TaggedText + val internal keywordAbstract: TaggedText + val internal keywordOverride: TaggedText + val internal keywordEnum: TaggedText + val internal leftBracketBar: TaggedText + val internal rightBracketBar: TaggedText + val internal keywordTypeof: TaggedText + val internal keywordTypedefof: TaggedText + val internal leftBracketAngle: TaggedText + val internal rightBracketAngle: TaggedText + val internal star: TaggedText + val internal keywordNew: TaggedText + + type internal IEnvironment = /// Return to the layout-generation /// environment to layout any otherwise uninterpreted object abstract GetLayout: obj -> Layout @@ -183,14 +231,9 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl /// A joint is either unbreakable, breakable or broken. /// If a joint is broken the RHS layout occurs on the next line with optional indentation. /// A layout can be squashed to for given width which forces breaks as required. -#if COMPILER - module public LayoutOps = -#else - module internal LayoutOps = -#endif - + module internal Layout = /// The empty layout - val emptyL : Layout + val emptyL: Layout /// Is it the empty layout? val isEmptyL: layout:Layout -> bool @@ -198,40 +241,52 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl /// An uninterpreted leaf, to be interpreted into a string /// by the layout engine. This allows leaf layouts for numbers, strings and /// other atoms to be customized according to culture. - val objL : value:obj -> Layout + val objL : value:obj -> Layout /// An string leaf - val wordL : text:TaggedText -> Layout + val wordL : text:TaggedText -> Layout /// An string which requires no spaces either side. - val sepL : text:TaggedText -> Layout + val sepL : text:TaggedText -> Layout /// An string which is right parenthesis (no space on the left). - val rightL : text:TaggedText -> Layout + val rightL: text:TaggedText -> Layout /// An string which is left parenthesis (no space on the right). - val leftL : text:TaggedText -> Layout + val leftL : text:TaggedText -> Layout /// Join, unbreakable. - val ( ^^ ) : layout1:Layout -> layout2:Layout -> Layout + val ( ^^ ): layout1:Layout -> layout2:Layout -> Layout /// Join, possible break with indent=0 - val ( ++ ) : layout1:Layout -> layout2:Layout -> Layout + val ( ++ ): layout1:Layout -> layout2:Layout -> Layout /// Join, possible break with indent=1 - val ( -- ) : layout1:Layout -> layout2:Layout -> Layout + val ( -- ): layout1:Layout -> layout2:Layout -> Layout /// Join, possible break with indent=2 val ( --- ): layout1:Layout -> layout2:Layout -> Layout + /// optional break, indent=3 + val internal ( ---- ) : Layout -> Layout -> Layout + + /// optional break, indent=4 + val internal ( ----- ) : Layout -> Layout -> Layout + /// Join broken with ident=0 - val ( @@ ) : layout1:Layout -> layout2:Layout -> Layout + val ( @@ ): layout1:Layout -> layout2:Layout -> Layout /// Join broken with ident=1 val ( @@- ): layout1:Layout -> layout2:Layout -> Layout /// Join broken with ident=2 val ( @@-- ): layout1:Layout -> layout2:Layout -> Layout + + /// Join broken with ident=3 + val (@@---): layout1:Layout -> layout2:Layout -> Layout + + /// Join broken with ident=4 + val (@@----): layout1:Layout -> layout2:Layout -> Layout /// Join layouts into a comma separated list. val commaListL: layouts:Layout list -> Layout @@ -252,13 +307,13 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl val squareBracketL: layout:Layout -> Layout /// Wrap braces around layout. - val braceL : layout:Layout -> Layout + val braceL: layout:Layout -> Layout /// Form tuple of layouts. - val tupleL : layouts:Layout list -> Layout + val tupleL: layouts:Layout list -> Layout /// Layout two vertically. - val aboveL : layout1:Layout -> layout2:Layout -> Layout + val aboveL: layout1:Layout -> layout2:Layout -> Layout /// Layout list vertically. val aboveListL: layouts:Layout list -> Layout @@ -267,7 +322,7 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl val optionL: selector:('T -> Layout) -> value:'T option -> Layout /// Layout like an F# list. - val listL : selector:('T -> Layout) -> value:'T list -> Layout + val listL : selector:('T -> Layout) -> value:'T list -> Layout /// See tagL val tagAttrL: text:string -> maps:(string * string) list -> layout:Layout -> Layout @@ -299,11 +354,7 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl /// /// [] -#if COMPILER - type public FormatOptions = -#else type internal FormatOptions = -#endif { FloatingPointFormat: string AttributeProcessor: (string -> (string * string) list -> bool -> unit) #if COMPILER // FSharp.Core.dll: PrintIntercepts aren't used there @@ -321,17 +372,9 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl static member Default: FormatOptions -#if COMPILER - module public Display = -#else module internal Display = -#endif - -#if FSHARP_CORE - // Most functions aren't needed in FSharp.Core.dll, but we add one inernal entry for printf - val anyToStringForPrintf: options:FormatOptions -> bindingFlags:System.Reflection.BindingFlags -> value:'T * Type -> string -#else +#if COMPILER val asTaggedTextWriter: writer: TextWriter -> TaggedTextWriter @@ -346,11 +389,15 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl val output_layout: options:FormatOptions -> writer:TextWriter -> layout:Layout -> unit val layout_as_string: options:FormatOptions -> value:'T * typValue:Type -> string +#else + + // Most functions aren't needed in FSharp.Core.dll, but we add one inernal entry for printf + val anyToStringForPrintf: options:FormatOptions -> bindingFlags:System.Reflection.BindingFlags -> value:'T * Type -> string #endif /// Convert any value to a layout using the given formatting options. The /// layout can then be processed using formatting display engines such as - /// those in the LayoutOps module. any_to_string and output_any are + /// those in the Layout module. any_to_string and output_any are /// built using any_to_layout with default format options. val layout_to_string: options:FormatOptions -> layout:Layout -> string diff --git a/src/fsharp/xlf/FSComp.txt.cs.xlf b/src/fsharp/xlf/FSComp.txt.cs.xlf index 979f2af287f..6273fe0e00c 100644 --- a/src/fsharp/xlf/FSComp.txt.cs.xlf +++ b/src/fsharp/xlf/FSComp.txt.cs.xlf @@ -17,6 +17,16 @@ Funkce {0} vyžaduje knihovnu F# pro verzi jazyka {1} nebo novější. + + The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. + Atribut AssemblyKeyNameAttribute je zastaralý. Použijte místo něj AssemblyKeyFileAttribute. + + + + Key container signing is not supported on this platform. + Podepisování kontejneru klíčů se na této platformě nepodporuje. + + Available overloads:\n{0} Dostupná přetížení:\n{0} @@ -87,6 +97,11 @@ využití člena výchozího rozhraní + + discard pattern in use binding + vzor discard ve vazbě použití + + dotless float32 literal literál float32 bez tečky @@ -122,6 +137,11 @@ nameof + + non-variable patterns to the right of 'as' patterns + neproměnné vzory napravo od vzorů typu „jako“ + + nullable optional interop nepovinný zprostředkovatel komunikace s možnou hodnotou null @@ -142,6 +162,11 @@ správa balíčků + + binary formatting for integers + formátování typu binary pro integery + + whitespace relexation uvolnění prázdných znaků @@ -157,6 +182,11 @@ interpolace řetězce + + struct representation for active patterns + reprezentace struktury aktivních vzorů + + wild card in for loop zástupný znak ve smyčce for @@ -237,6 +267,11 @@ Hlavička zdroje začínající na posunu {0} má chybný formát. + + Print the inferred interfaces of all compilation files to associated signature files + Vytiskněte odvozená rozhraní všech kompilovaných souborů do přidružených souborů podpisu. + + Display the allowed values for language version, specify language version such as 'latest' or 'preview' Zobrazte si povolené hodnoty verze jazyka a pak zadejte požadovanou verzi, například latest nebo preview. @@ -257,6 +292,11 @@ Zobrazit banner verze kompilátoru a ukončit + + Specify a Win32 icon file (.ico) + Zadejte soubor ikony Win32 (.ico). + + The package management feature requires language version 5.0 use /langversion:preview Funkce správy balíčků vyžaduje jazykovou verzi 5.0, použijte /langversion:preview. @@ -312,6 +352,21 @@ Registrovaní správci PackageManagers nepodporují #i. + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. + Sadu .NET SDK pro tento skript nešlo určit. Pokud se skript nachází v adresáři používajícím global.json, zkontrolujte, jestli je nainstalovaná odpovídající sada .NET SDK. Výstup ze zadání {0} --version v adresáři {1} byl {2} a ukončovací kód byl {3}. + + + + The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. + The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. + + + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. + Sadu .NET SDK pro tento skript nešlo určit. Pokud se skript nachází v adresáři používajícím global.json, zkontrolujte, jestli je nainstalovaná odpovídající sada .NET SDK. Neočekávaná chyba {0}. + + This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. Tato funkce se v této verzi jazyka F# nepodporuje. Abyste mohli tuto funkci používat, možná bude nutné přidat /langversion:preview. @@ -357,11 +412,21 @@ Neplatné zarovnání v interpolovaném řetězci + + The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions + Použití [<Struct>] u hodnot, funkcí a metod je povolené jenom u částečných aktivních definic vzorů. + + use! may not be combined with and! use! se nedá kombinovat s and!. + + A [<Literal>] declaration cannot use an active pattern for its identifier + Deklarace [<Literal>] nemůže používat aktivní vzor jako svůj identifikátor. + + Cannot assign a value to another value marked literal Hodnota se nedá přiřadit k jiné hodnotě, která je označená jako literál. @@ -2748,8 +2813,8 @@ - MemberKind.PropertyGetSet only expected in parse trees - MemberKind.PropertyGetSet se očekává jenom ve stromech pro analýzu. + SynMemberKind.PropertyGetSet only expected in parse trees + SynMemberKind.PropertyGetSet se očekává jen ve stromech analýzy. diff --git a/src/fsharp/xlf/FSComp.txt.de.xlf b/src/fsharp/xlf/FSComp.txt.de.xlf index 56bb041273f..deb01a0ac2e 100644 --- a/src/fsharp/xlf/FSComp.txt.de.xlf +++ b/src/fsharp/xlf/FSComp.txt.de.xlf @@ -17,6 +17,16 @@ Für das Feature "{0}" ist die F#-Bibliothek für die Sprachversion {1} oder höher erforderlich. + + The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. + "AssemblyKeyNameAttribute" gilt als veraltet. Verwenden Sie stattdessen "AssemblyKeyFileAttribute". + + + + Key container signing is not supported on this platform. + Das Signieren von Schlüsselcontainern wird auf dieser Plattform nicht unterstützt. + + Available overloads:\n{0} Verfügbare Überladungen:\n{0} @@ -87,6 +97,11 @@ standardmäßige Schnittstellenmembernutzung + + discard pattern in use binding + Das Verwerfen des verwendeten Musters ist verbindlich. + + dotless float32 literal punktloses float32-Literal @@ -122,6 +137,11 @@ nameof + + non-variable patterns to the right of 'as' patterns + Nicht-Variablenmuster rechts neben as-Mustern + + nullable optional interop Interop, NULL-Werte zulassend, optional @@ -142,6 +162,11 @@ Paketverwaltung + + binary formatting for integers + binäre Formatierung für ganze Zahlen + + whitespace relexation Lockerung für Leerraum @@ -157,6 +182,11 @@ Zeichenfolgeninterpolation + + struct representation for active patterns + Strukturdarstellung für aktive Muster + + wild card in for loop Platzhalter in for-Schleife @@ -237,6 +267,11 @@ Der Ressourcenheader, der am Offset {0} beginnt, ist fehlerhaft formatiert. + + Print the inferred interfaces of all compilation files to associated signature files + Drucken der abgeleiteten Schnittstellen aller Dateien an zugehörige Signaturdateien + + Display the allowed values for language version, specify language version such as 'latest' or 'preview' Zeigen Sie die zulässigen Werte für die Sprachversion an. Geben Sie die Sprachversion als "latest" oder "preview" an. @@ -257,6 +292,11 @@ Banner zur Compilerversion anzeigen und beenden + + Specify a Win32 icon file (.ico) + Win32-Symboldatei (ICO) angeben + + The package management feature requires language version 5.0 use /langversion:preview Für das Paketverwaltungsfeature ist Sprachversion 5.0 erforderlich. Verwenden Sie /langversion:preview. @@ -312,6 +352,21 @@ #i wird von den registrierten PackageManagers nicht unterstützt. + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. + Das .NET SDK für dieses Skript konnte nicht ermittelt werden. Wenn sich das Skript in einem Verzeichnis mit "global.json" befindet, stellen Sie sicher, dass das entsprechende .NET SDK installiert ist. Ausgabe von "{0} --version" im Verzeichnis "{1}": {2}. Exitcode: {3}. + + + + The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. + The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. + + + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. + Das .NET SDK für dieses Skript konnte nicht ermittelt werden. Wenn sich das Skript in einem Verzeichnis mit "global.json" befindet, stellen Sie sicher, dass das entsprechende .NET SDK installiert ist. Unerwarteter Fehler: {0}. + + This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. Dieses Feature wird in dieser Version von F# nicht unterstützt. Möglicherweise müssen Sie "/langversion:preview" hinzufügen, um dieses Feature zu verwenden. @@ -357,11 +412,21 @@ Ungültige Ausrichtung in interpolierter Zeichenfolge. + + The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions + Die Verwendung von "[<Struct>]" für Werte, Funktionen und Methoden ist nur für partielle aktive Musterdefinitionen zulässig. + + use! may not be combined with and! "use!" darf nicht mit "and!" kombiniert werden. + + A [<Literal>] declaration cannot use an active pattern for its identifier + Eine [<Literal>]-Deklaration kann kein aktives Muster für ihren Bezeichner verwenden. + + Cannot assign a value to another value marked literal Ein Wert kann keinem anderen als Literal markierten Wert zugewiesen werden. @@ -2748,8 +2813,8 @@ - MemberKind.PropertyGetSet only expected in parse trees - MemberKind.PropertyGetSet wird nur in Analysestrukturen erwartet. + SynMemberKind.PropertyGetSet only expected in parse trees + "SynMemberKind.PropertyGetSet" wird nur in Analysestrukturen erwartet. @@ -7409,7 +7474,7 @@ A byref pointer returned by a function or method is implicitly dereferenced as of F# 4.5. To acquire the return value as a pointer, use the address-of operator, e.g. '&f(x)' or '&obj.Method(arg1, arg2)'. - Ein byref-Zeiger, der von einer Funktion oder Methode zurückgegeben wird, wird explizit als von F# 4.5 stammend dereferenziert. Verwenden Sie den &-Operator (z.B. "&f(x)" oder "&obj.Method(arg1, arg2)"), um den Rückgabewert als Zeiger abzurufen. + Ein byref-Zeiger, der von einer Funktion oder Methode zurückgegeben wird, wird explizit als von F# 4.5 stammend dereferenziert. Verwenden Sie den Operator (z.B. "&f(x)" oder "&obj.Method(arg1, arg2)"), um den Rückgabewert als Zeiger abzurufen. diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index 96391a29ad7..ea47b7e40a3 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -17,6 +17,16 @@ La característica "{0}" requiere la biblioteca de F# para la versión de lenguaje {1} o superior. + + The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. + El elemento "AssemblyKeyNameAttribute" está en desuso. Use "AssemblyKeyFileAttribute" en su lugar. + + + + Key container signing is not supported on this platform. + La firma del contenedor de claves no se admite en esta plataforma. + + Available overloads:\n{0} Sobrecargas disponibles:\n{0} @@ -87,6 +97,11 @@ consumo de miembros de interfaz predeterminados + + discard pattern in use binding + descartar enlace de patrón en uso + + dotless float32 literal literal float32 sin punto @@ -122,6 +137,11 @@ nameof + + non-variable patterns to the right of 'as' patterns + patrones no variables a la derecha de los patrones "as" + + nullable optional interop interoperabilidad opcional que admite valores NULL @@ -142,6 +162,11 @@ administración de paquetes + + binary formatting for integers + formato binario para enteros + + whitespace relexation relajación de espacio en blanco @@ -157,6 +182,11 @@ interpolación de cadena + + struct representation for active patterns + representación de struct para modelos activos + + wild card in for loop carácter comodín en bucle for @@ -237,6 +267,11 @@ El encabezado de los recursos que comienza en el desplazamiento {0} está mal formado. + + Print the inferred interfaces of all compilation files to associated signature files + Imprimir las interfaces deducidas de todos los archivos de compilación en los archivos de signatura asociados + + Display the allowed values for language version, specify language version such as 'latest' or 'preview' Mostrar los valores permitidos para la versión de idioma, especificar la versión de idioma como "latest" "preview" @@ -257,6 +292,11 @@ Mostrar el banner de versión del compilador y salir + + Specify a Win32 icon file (.ico) + Especificar un archivo de icono Win32 (.ico) + + The package management feature requires language version 5.0 use /langversion:preview La característica de administración de paquetes requiere la versión de lenguaje 5.0; use /langversion:preview @@ -312,6 +352,21 @@ Los elementos PackageManager registrados no admiten #i + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. + No se pudo determinar el SDK de .NET para este script. Si el script está en un directorio que usa una instancia de "global.json", asegúrese de que el SDK de .NET pertinente esté instalado. La salida de "{0} --version" en el directorio "{1}" era "{2}", con el código de salida "{3}". + + + + The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. + No se pudo determinar el SDK de .NET para este script. No se encontró dotnet.exe. Asegúrese de tener instalado un SDK de .NET. + + + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. + No se pudo determinar el SDK de .NET para este script. Si el script está en un directorio que usa una instancia de "global.json", asegúrese de que el SDK de .NET pertinente esté instalado. Error inesperado: "{0}". + + This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. Esta versión de F# no admite esta característica. Es posible que tenga que agregar /langversion:preview para usarla. @@ -357,11 +412,21 @@ Alineación no válida en la cadena interpolada + + The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions + El uso de «[<Struct>]» en valores, funciones y métodos solo se permite en definiciones de modelos activos parciales. + + use! may not be combined with and! No se puede combinar use! con and! + + A [<Literal>] declaration cannot use an active pattern for its identifier + Una declaración [<Literal>] no puede usar un modelo activo para su identificador + + Cannot assign a value to another value marked literal No se puede asignar un valor a otro marcado como literal @@ -2748,8 +2813,8 @@ - MemberKind.PropertyGetSet only expected in parse trees - MemberKind.PropertyGetSet se espera solo en árboles de análisis. + SynMemberKind.PropertyGetSet only expected in parse trees + SynMemberKind.PropertyGetSet se espera solo en árboles de análisis. diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf index 8668557aa35..0526f8c7fa3 100644 --- a/src/fsharp/xlf/FSComp.txt.fr.xlf +++ b/src/fsharp/xlf/FSComp.txt.fr.xlf @@ -17,6 +17,16 @@ La fonctionnalité '{0}' nécessite la bibliothèque F# pour le langage version {1} ou ultérieure. + + The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. + 'AssemblyKeyNameAttribute' a été déprécié. Utilisez 'AssemblyKeyFileAttribute' à la place. + + + + Key container signing is not supported on this platform. + La signature de conteneurs de clés n'est pas prise en charge sur cette plateforme. + + Available overloads:\n{0} Surcharges disponibles :\n{0} @@ -87,6 +97,11 @@ consommation par défaut des membres d'interface + + discard pattern in use binding + annuler le modèle dans la liaison d’utilisation + + dotless float32 literal littéral float32 sans point @@ -122,6 +137,11 @@ nameof + + non-variable patterns to the right of 'as' patterns + modèles non variables à droite de modèles « as » + + nullable optional interop interopérabilité facultative pouvant accepter une valeur null @@ -142,6 +162,11 @@ Package Management + + binary formatting for integers + mise en forme binaire pour les entiers + + whitespace relexation assouplissement de la mise en retrait avec des espaces blancs @@ -157,6 +182,11 @@ interpolation de chaîne + + struct representation for active patterns + représentation de structure pour les modèles actifs + + wild card in for loop caractère générique dans une boucle for @@ -237,6 +267,11 @@ L'en-tête de ressource commençant au décalage {0} est mal formé. + + Print the inferred interfaces of all compilation files to associated signature files + Imprimer les interfaces inférées de tous les fichiers de compilation sur les fichiers de signature associés + + Display the allowed values for language version, specify language version such as 'latest' or 'preview' Afficher les valeurs autorisées pour la version du langage, spécifier la version du langage comme 'dernière' ou 'préversion' @@ -257,6 +292,11 @@ Afficher la bannière de la version du compilateur et quitter + + Specify a Win32 icon file (.ico) + Spécifier un fichier icône (.ico) Win32 + + The package management feature requires language version 5.0 use /langversion:preview La fonctionnalité de gestion des packages nécessite la version 5.0 du langage. Utilisez /langversion:preview @@ -312,6 +352,21 @@ #i n'est pas pris en charge par les PackageManagers inscrits + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. + Le kit SDK .NET de ce script n'a pas pu être déterminé. Si le script se trouve dans un répertoire utilisant un fichier 'global.json', vérifiez que le kit SDK .NET approprié est installé. La sortie de '{0} --version' dans le répertoire '{1}' était '{2}', et le code de sortie était '{3}'. + + + + The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. + Impossible de déterminer le Kit de développement logiciel (SDK) .NET pour ce script. dotnet.exe est introuvable pour garantir l’installation d’un kit SDK .NET. + + + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. + Le kit SDK .NET de ce script n'a pas pu être déterminé. Si le script se trouve dans un répertoire utilisant un fichier 'global.json', vérifiez que le kit SDK .NET approprié est installé. Erreur inattendue '{0}'. + + This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. Cette fonctionnalité n'est pas prise en charge dans cette version de F#. Vous devrez peut-être ajouter /langversion:preview pour pouvoir utiliser cette fonctionnalité. @@ -357,11 +412,21 @@ Alignement non valide dans la chaîne interpolée + + The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions + L’utilisation de' [<Struct>] 'sur les valeurs, les fonctions et les méthodes n’est autorisée que sur les définitions de modèle actif partiel + + use! may not be combined with and! use! ne peut pas être combiné avec and! + + A [<Literal>] declaration cannot use an active pattern for its identifier + Une déclaration [<Literal>] ne peut pas utiliser un modèle actif en tant qu'identificateur + + Cannot assign a value to another value marked literal Impossible d'affecter une valeur à une autre valeur marquée comme littérale @@ -2748,8 +2813,8 @@ - MemberKind.PropertyGetSet only expected in parse trees - MemberKind.PropertyGetSet attendu uniquement dans les arborescences d'analyse + SynMemberKind.PropertyGetSet only expected in parse trees + SynMemberKind.PropertyGetSet attendu uniquement dans les arborescences d'analyse diff --git a/src/fsharp/xlf/FSComp.txt.it.xlf b/src/fsharp/xlf/FSComp.txt.it.xlf index 9f703a7cb8c..3d2019925fd 100644 --- a/src/fsharp/xlf/FSComp.txt.it.xlf +++ b/src/fsharp/xlf/FSComp.txt.it.xlf @@ -17,6 +17,16 @@ Con la funzionalità '{0}' è richiesta la libreria F# per la versione {1} o successiva del linguaggio. + + The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. + L'attributo 'AssemblyKeyNameAttribute' è deprecato. In alternativa, usare 'AssemblyKeyFileAttribute'. + + + + Key container signing is not supported on this platform. + La firma del contenitore di chiavi non è supportata in questa piattaforma. + + Available overloads:\n{0} Overload disponibili:\n{0} @@ -87,6 +97,11 @@ utilizzo predefinito dei membri di interfaccia + + discard pattern in use binding + rimuovi criterio nell'utilizzo dell'associazione + + dotless float32 literal valore letterale float32 senza punti @@ -122,6 +137,11 @@ nameof + + non-variable patterns to the right of 'as' patterns + modelli non variabili a destra dei modelli 'as' + + nullable optional interop Interop facoltativo nullable @@ -142,6 +162,11 @@ gestione pacchetti + + binary formatting for integers + formattazione binaria per interi + + whitespace relexation uso meno restrittivo degli spazi vuoti @@ -157,6 +182,11 @@ interpolazione di stringhe + + struct representation for active patterns + rappresentazione struct per criteri attivi + + wild card in for loop carattere jolly nel ciclo for @@ -237,6 +267,11 @@ L'intestazione di risorsa che inizia a partire dall'offset {0} non è valida. + + Print the inferred interfaces of all compilation files to associated signature files + Stampare le interfacce derivate di tutti i file di compilazione nei file di firma associati + + Display the allowed values for language version, specify language version such as 'latest' or 'preview' Visualizza i valori consentiti per la versione del linguaggio. Specificare la versione del linguaggio, ad esempio 'latest' o 'preview' @@ -257,6 +292,11 @@ Visualizza il banner della versione del compilatore ed esce + + Specify a Win32 icon file (.ico) + Specifica un file icona Win32 (.ico) + + The package management feature requires language version 5.0 use /langversion:preview Con la funzionalità di gestione pacchetti è richiesta la versione 5.0 del linguaggio. Usare /langversion:preview @@ -312,6 +352,21 @@ #i non è supportato dagli elementi PackageManager registrati + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. + Non è stato possibile determinare la versione di .NET SDK per questo script. Se lo script si trova in una directory che usa un file 'global.json', assicurarsi che sia installata la versione pertinente di .NET SDK. L'output di '{0} --version' nella directory '{1}' è '{2}' e il codice di uscita è '{3}'. + + + + The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. + Non e stato possibile determinare il Software Development Kit .NET per questo script. Non è stato possibile trovare dotnet.exe; assicurarsi che sia installato un Software Development Kit .NET. + + + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. + Non è stato possibile determinare la versione di .NET SDK per questo script. Se lo script si trova in una directory che usa un file 'global.json', assicurarsi che sia installata la versione pertinente di .NET SDK. Errore imprevisto: '{0}'. + + This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. Questa funzionalità non è supportata in questa versione di F#. Per usare questa funzionalità, potrebbe essere necessario aggiungere /langversion:preview. @@ -357,11 +412,21 @@ Allineamento non valido nella stringa interpolata + + The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions + L'utilizzo di '[<Struct>]' su valori, funzioni e metodi è consentito solo per definizioni di criteri attivi parziali + + use! may not be combined with and! Non è possibile combinare use! con and! + + A [<Literal>] declaration cannot use an active pattern for its identifier + Una dichiarazione [<Literal>] non può usare un criterio attivo per il relativo identificatore + + Cannot assign a value to another value marked literal Non è possibile assegnare un valore a un altro valore contrassegnato come letterale @@ -2748,8 +2813,8 @@ - MemberKind.PropertyGetSet only expected in parse trees - MemberKind.PropertyGetSet previsto solo in strutture ad albero di analisi + SynMemberKind.PropertyGetSet only expected in parse trees + SynMemberKind.PropertyGetSet previsto solo in strutture ad albero di analisi diff --git a/src/fsharp/xlf/FSComp.txt.ja.xlf b/src/fsharp/xlf/FSComp.txt.ja.xlf index ba1d0417d02..753e38d1b3a 100644 --- a/src/fsharp/xlf/FSComp.txt.ja.xlf +++ b/src/fsharp/xlf/FSComp.txt.ja.xlf @@ -17,6 +17,16 @@ 機能 '{0}' を使用するには、言語バージョン {1} 以上の F# ライブラリが必要です。 + + The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. + 'AssemblyKeyNameAttribute' は非推奨になりました。代わりに 'AssemblyKeyFileAttribute' を使用してください。 + + + + Key container signing is not supported on this platform. + キー コンテナーの署名は、このプラットフォームではサポートされていません。 + + Available overloads:\n{0} 使用可能なオーバーロード:\n{0} @@ -87,6 +97,11 @@ 既定のインターフェイス メンバーの消費 + + discard pattern in use binding + 使用バインドでパターンを破棄する + + dotless float32 literal ドットなしの float32 リテラル @@ -122,6 +137,11 @@ nameof + + non-variable patterns to the right of 'as' patterns + 'as' パターンの右側の非変数パターン + + nullable optional interop Null 許容のオプションの相互運用 @@ -142,6 +162,11 @@ パッケージの管理 + + binary formatting for integers + 整数のバイナリ形式 + + whitespace relexation 空白の緩和 @@ -157,6 +182,11 @@ 文字列の補間 + + struct representation for active patterns + アクティブなパターンの構造体表現 + + wild card in for loop for ループのワイルド カード @@ -237,6 +267,11 @@ オフセット {0} で始まるリソース ヘッダーの形式に誤りがあります。 + + Print the inferred interfaces of all compilation files to associated signature files + すべてのコンパイル ファイルの推定されたインターフェイスを関連する署名ファイルに印刷します + + Display the allowed values for language version, specify language version such as 'latest' or 'preview' 言語バージョンで許可された値を表示し、'最新' や 'プレビュー' などの言語バージョンを指定する @@ -257,6 +292,11 @@ コンパイラ バージョンのバナーを表示して終了する + + Specify a Win32 icon file (.ico) + Win32 アイコン ファイル (.ico) を指定する + + The package management feature requires language version 5.0 use /langversion:preview パッケージ管理機能では、言語バージョン 5.0 で /langversion:preview を使用する必要があります @@ -312,6 +352,21 @@ 登録された PackageManager によって、#i はサポートされていません + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. + このスクリプトの .NET SDK を特定できませんでした。このスクリプトが、'global.json' が使用されているディレクトリにある場合は、関連する .NET SDK がインストールされていることを確認してください。ディレクトリ '{1}' の '{0} --version' からの出力は '{2}' で、終了コードは '{3}' でした。 + + + + The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. + このスクリプトの .NET SDK を特定できませんでした。dotnet.exe が見つかりませんでした。 .NET SDK がインストールされていることをご確認ください。 + + + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. + このスクリプトの .NET SDK を特定できませんでした。このスクリプトが、'global.json' が使用されているディレクトリにある場合は、関連する .NET SDK がインストールされていることを確認してください。予期しないエラー '{0}'。 + + This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. この機能は、このバージョンの F# ではサポートされていません。この機能を使用するには、/langversion:preview の追加が必要な場合があります。 @@ -357,11 +412,21 @@ 補間された文字列内の配置が無効です + + The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions + 値、関数、およびメソッドでの '[<Struct>]' は、部分的なアクティブ パターンの定義でのみ使うことができます + + use! may not be combined with and! use! を and! と組み合わせて使用することはできません + + A [<Literal>] declaration cannot use an active pattern for its identifier + [<Literal>] 宣言では、その識別子に対してアクティブ パターンを使用することはできません + + Cannot assign a value to another value marked literal リテラルとしてマークされた別の値に値を割り当てることはできません @@ -2748,8 +2813,8 @@ - MemberKind.PropertyGetSet only expected in parse trees - 解析ツリーに使用できるのは MemberKind.PropertyGetSet のみです + SynMemberKind.PropertyGetSet only expected in parse trees + 解析ツリーに使用できるのは SynMemberKind.PropertyGetSet のみです diff --git a/src/fsharp/xlf/FSComp.txt.ko.xlf b/src/fsharp/xlf/FSComp.txt.ko.xlf index bf8d6b3cbdc..52f54536e9b 100644 --- a/src/fsharp/xlf/FSComp.txt.ko.xlf +++ b/src/fsharp/xlf/FSComp.txt.ko.xlf @@ -17,6 +17,16 @@ 언어 버전 {1} 이상에서 '{0}' 기능을 사용하려면 F# 라이브러리가 필요합니다. + + The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. + 'AssemblyKeyNameAttribute'는 사용되지 않습니다. 대신 'AssemblyKeyFileAttribute'를 사용하세요. + + + + Key container signing is not supported on this platform. + 키 컨테이너 서명은 이 플랫폼에서 지원되지 않습니다. + + Available overloads:\n{0} 사용 가능한 오버로드:\n{0} @@ -87,6 +97,11 @@ 기본 인터페이스 멤버 사용 + + discard pattern in use binding + 사용 중인 패턴 바인딩 무시 + + dotless float32 literal 점이 없는 float32 리터럴 @@ -122,6 +137,11 @@ nameof + + non-variable patterns to the right of 'as' patterns + 'as' 패턴의 오른쪽에 있는 변수가 아닌 패턴 + + nullable optional interop nullable 선택적 interop @@ -142,6 +162,11 @@ 패키지 관리 + + binary formatting for integers + 정수에 대한 이진 서식 지정 + + whitespace relexation 공백 완화 @@ -157,6 +182,11 @@ 문자열 보간 + + struct representation for active patterns + 활성 패턴에 대한 구조체 표현 + + wild card in for loop for 루프의 와일드카드 @@ -237,6 +267,11 @@ 오프셋 {0}에서 시작하는 리소스 헤더의 형식이 잘못되었습니다. + + Print the inferred interfaces of all compilation files to associated signature files + 모든 컴파일 파일의 유추된 인터페이스를 관련 서명 파일로 인쇄합니다. + + Display the allowed values for language version, specify language version such as 'latest' or 'preview' 언어 버전의 허용된 값을 표시하고 '최신' 또는 '미리 보기'와 같은 언어 버전을 지정합니다. @@ -257,6 +292,11 @@ 컴파일러 버전 배너를 표시하고 종료 + + Specify a Win32 icon file (.ico) + Win32 아이콘 파일(.ico) 지정 + + The package management feature requires language version 5.0 use /langversion:preview 패키지 관리 기능을 사용하려면 언어 버전 5.0이 필요합니다. /langversion:preview를 사용하세요. @@ -312,6 +352,21 @@ #i는 등록된 PackageManagers에서 지원하지 않습니다. + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. + 이 스크립트에 대한 .NET SDK를 확인할 수 없습니다. 스크립트가 'global.json'을 사용하는 디렉터리에 있는 경우 관련 .NET SDK가 설치되어 있는지 확인하세요. '{1}' 디렉터리에 있는 '{0} --version'의 출력은 '{2}'이고 종료 코드는 '{3}'입니다. + + + + The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. + 이 스크립트의 .NET SDK를 확인할 수 없습니다. dotnet.exe를 찾을 수 없습니다. .NET SDK가 설치되어 있는지 확인하세요. + + + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. + 이 스크립트에 대한 .NET SDK를 확인할 수 없습니다. 스크립트가 'global.json'을 사용하는 디렉터리에 있는 경우 관련 .NET SDK가 설치되어 있는지 확인하세요. 예기치 않은 오류 '{0}'. + + This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. 이 기능은 이 F# 버전에서 지원되지 않습니다. 이 기능을 사용하기 위해 /langversion:preview를 추가해야 할 수도 있습니다. @@ -357,11 +412,21 @@ 보간 문자열의 잘못된 정렬 + + The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions + 값, 함수 및 메서드에 '[<Struct>]'을(를) 사용하는 것은 부분 활성 패턴 정의에서만 허용됩니다. + + use! may not be combined with and! use!는 and!와 함께 사용할 수 없습니다. + + A [<Literal>] declaration cannot use an active pattern for its identifier + [<Literal>] 선언은 해당 식별자에 대한 활성 패턴을 사용할 수 없습니다. + + Cannot assign a value to another value marked literal 리터럴로 표시된 다른 값에 값을 할당할 수 없습니다. @@ -2748,8 +2813,8 @@ - MemberKind.PropertyGetSet only expected in parse trees - MemberKind.PropertyGetSet은 구문 분석 트리에만 필요합니다. + SynMemberKind.PropertyGetSet only expected in parse trees + SynMemberKind.PropertyGetSet은 구문 분석 트리에만 필요합니다. diff --git a/src/fsharp/xlf/FSComp.txt.pl.xlf b/src/fsharp/xlf/FSComp.txt.pl.xlf index 3027e6cc40e..1df89f793e6 100644 --- a/src/fsharp/xlf/FSComp.txt.pl.xlf +++ b/src/fsharp/xlf/FSComp.txt.pl.xlf @@ -17,6 +17,16 @@ Funkcja „{0}” wymaga biblioteki języka F# dla wersji językowej {1} lub nowszej. + + The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. + Element „AssemblyKeyNameAttribute” jest przestarzały. Zamiast niego użyj elementu „AssemblyKeyFileAttribute”. + + + + Key container signing is not supported on this platform. + Podpisywanie kontenerów kluczy nie jest obsługiwane na tej platformie. + + Available overloads:\n{0} Dostępne przeciążenia:\n{0} @@ -87,6 +97,11 @@ domyślne użycie składowej interfejsu + + discard pattern in use binding + odrzuć wzorzec w powiązaniu użycia + + dotless float32 literal bezkropkowy literał float32 @@ -122,6 +137,11 @@ nameof + + non-variable patterns to the right of 'as' patterns + stałe wzorce po prawej stronie wzorców typu „as” + + nullable optional interop opcjonalna międzyoperacyjność dopuszczająca wartość null @@ -142,6 +162,11 @@ zarządzanie pakietami + + binary formatting for integers + formatowanie danych binarnych dla liczb całkowitych + + whitespace relexation rozluźnianie reguł dotyczących odstępów @@ -157,6 +182,11 @@ interpolacja ciągu + + struct representation for active patterns + reprezentacja struktury aktywnych wzorców + + wild card in for loop symbol wieloznaczny w pętli for @@ -237,6 +267,11 @@ Nagłówek zasobu rozpoczynający się od przesunięcia {0} jest nieprawidłowo sformułowany. + + Print the inferred interfaces of all compilation files to associated signature files + Drukowanie wywnioskowanych interfejsów wszystkich plików kompilacji do skojarzonych plików sygnatur + + Display the allowed values for language version, specify language version such as 'latest' or 'preview' Wyświetl dozwolone wartości dla wersji językowej; określ wersję językową, np. „latest” lub „preview” @@ -257,6 +292,11 @@ Wyświetl baner wersji kompilatora i zakończ + + Specify a Win32 icon file (.ico) + Określ plik ikony systemu Win32 (ico) + + The package management feature requires language version 5.0 use /langversion:preview Funkcja zarządzania pakietami wymaga języka w wersji 5.0, użyj parametru /langversion:preview @@ -312,6 +352,21 @@ Element #i nie jest obsługiwany przez zarejestrowanych menedżerów pakietów + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. + Nie można określić zestawu .NET SDK dla tego skryptu. Jeśli skrypt znajduje się w katalogu korzystającym z pliku „global.json”, upewnij się, że zainstalowano odpowiedni zestaw .NET SDK. Dane wyjściowe polecenia „{0} --version” w katalogu „{1}” to „{2}”, a kod zakończenia to „{3}”. + + + + The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. + The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. + + + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. + Nie można określić zestawu .NET SDK dla tego skryptu. Jeśli skrypt znajduje się w katalogu korzystającym z pliku „global.json”, upewnij się, że zainstalowano odpowiedni zestaw .NET SDK. Nieoczekiwany błąd: „{0}”. + + This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. Ta funkcja nie jest obsługiwana w tej wersji języka F#. Aby korzystać z tej funkcji, może być konieczne dodanie parametru /langversion:preview. @@ -357,11 +412,21 @@ Nieprawidłowe wyrównanie w ciągu interpolowanym + + The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions + Używanie elementu "[<Struct>]" na wartościach, funkcjach i metodach jest dozwolone tylko w definicjach częściowo aktywnego wzorca + + use! may not be combined with and! Elementu use! nie można łączyć z elementem and! + + A [<Literal>] declaration cannot use an active pattern for its identifier + Deklaracja [<Literal>] nie może używać aktywnego wzorca dla swojego identyfikatora + + Cannot assign a value to another value marked literal Nie można przypisać wartości do innej wartości oznaczonej jako literał @@ -2748,7 +2813,7 @@ - MemberKind.PropertyGetSet only expected in parse trees + SynMemberKind.PropertyGetSet only expected in parse trees Element MemberKind.PropertyGetSet jest oczekiwany tylko w drzewach analizy diff --git a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf index 48e18e83cc9..a216008109b 100644 --- a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf +++ b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf @@ -17,6 +17,16 @@ O recurso '{0}' exige a biblioteca F# para a versão da linguagem {1} ou posterior. + + The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. + O 'AssemblyKeyNameAttribute' foi preterido. Use o 'AssemblyKeyFileAttribute'. + + + + Key container signing is not supported on this platform. + Não há suporte para a assinatura do contêiner de chave nesta plataforma. + + Available overloads:\n{0} Sobrecargas disponíveis:\n{0} @@ -87,6 +97,11 @@ consumo de membro da interface padrão + + discard pattern in use binding + descartar o padrão em uso de associação + + dotless float32 literal literal float32 sem ponto @@ -122,6 +137,11 @@ nameof + + non-variable patterns to the right of 'as' patterns + padrões não-variáveis à direita dos padrões 'as'. + + nullable optional interop interoperabilidade opcional anulável @@ -142,6 +162,11 @@ gerenciamento de pacotes + + binary formatting for integers + formatação binária para números inteiros + + whitespace relexation atenuação de espaço em branco @@ -157,6 +182,11 @@ interpolação da cadeia de caracteres + + struct representation for active patterns + representação estrutural para padrões ativos + + wild card in for loop curinga para loop @@ -237,6 +267,11 @@ O cabeçalho do recurso que começa no deslocamento {0} está malformado. + + Print the inferred interfaces of all compilation files to associated signature files + Imprimir as interfaces inferidas de todos os arquivos de compilação para os arquivos de assinatura associados + + Display the allowed values for language version, specify language version such as 'latest' or 'preview' Exibe os valores permitidos para a versão do idioma, especifica a versão do idioma, como 'mais recente ' ou 'prévia' @@ -257,6 +292,11 @@ Exibir a faixa de versão do compilador e sair + + Specify a Win32 icon file (.ico) + Especificar um arquivo de ícone do Win32 (.ico) + + The package management feature requires language version 5.0 use /langversion:preview O recurso de gerenciamento de pacotes requer a versão de idioma 5.0. Use /langversion:preview @@ -312,6 +352,21 @@ O PackageManagers registrado não dá suporte a #i + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. + Não foi possível determinar o SDK do .NET para esse script. Se o script estiver em um diretório usando um 'global.json', verifique se o SDK relevante do .NET está instalado. A saída de '{0} --version' no diretório '{1}' foi: '{2}' e o código de saída foi '{3}'. + + + + The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. + The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. + + + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. + Não foi possível determinar o SDK do .NET deste script. Se o script estiver em um diretório que usa um 'global.json', verifique se o SDK do .NET relevante está instalado. Erro inesperado '{0}'. + + This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. Este recurso não tem suporte nesta versão do F#. Talvez seja necessário adicionar /langversion:preview para usar este recurso. @@ -357,11 +412,21 @@ Alinhamento inválido na cadeia de caracteres interpolada + + The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions + O uso de '[<Struct>]' em valores, funções e métodos somente é permitido em definições de padrões ativos parciais + + use! may not be combined with and! use! não pode ser combinado com and! + + A [<Literal>] declaration cannot use an active pattern for its identifier + Uma declaração [<Literal>] não pode usar um padrão ativo para seu identificador + + Cannot assign a value to another value marked literal Não é possível atribuir um valor a outro valor marcado como literal @@ -2748,8 +2813,8 @@ - MemberKind.PropertyGetSet only expected in parse trees - MemberKind.PropertyGetSet só é esperado em árvores de análise + SynMemberKind.PropertyGetSet only expected in parse trees + SynMemberKind.PropertyGetSet só é esperado em árvores de análise diff --git a/src/fsharp/xlf/FSComp.txt.ru.xlf b/src/fsharp/xlf/FSComp.txt.ru.xlf index 63ec608688b..0e6e8ad79af 100644 --- a/src/fsharp/xlf/FSComp.txt.ru.xlf +++ b/src/fsharp/xlf/FSComp.txt.ru.xlf @@ -17,6 +17,16 @@ Компоненту "{0}" требуется библиотека F# для языка версии {1} или более поздней. + + The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. + Атрибут "AssemblyKeyNameAttribute" является устаревшим. Используйте вместо него атрибут "AssemblyKeyFileAttribute". + + + + Key container signing is not supported on this platform. + Подписывание контейнера ключей не поддерживается на этой платформе. + + Available overloads:\n{0} Доступные перегрузки:\n{0} @@ -87,6 +97,11 @@ использование элемента интерфейса по умолчанию + + discard pattern in use binding + шаблон отмены в привязке использования + + dotless float32 literal литерал float32 без точки @@ -122,6 +137,11 @@ nameof + + non-variable patterns to the right of 'as' patterns + шаблоны без переменных справа от шаблонов "as" + + nullable optional interop необязательное взаимодействие, допускающее значение NULL @@ -142,6 +162,11 @@ управление пакетами + + binary formatting for integers + двоичное форматирование для целых чисел + + whitespace relexation уменьшение строгости для пробелов @@ -157,6 +182,11 @@ интерполяция строк + + struct representation for active patterns + представление структуры для активных шаблонов + + wild card in for loop подстановочный знак в цикле for @@ -237,6 +267,11 @@ Заголовок ресурса некорректен начиная со смещения {0}. + + Print the inferred interfaces of all compilation files to associated signature files + Печать определяемых интерфейсов всех файлов компиляции в связанные файлы подписей + + Display the allowed values for language version, specify language version such as 'latest' or 'preview' Отображение допустимых значений для версии языка. Укажите версию языка, например, "latest" или "preview". @@ -257,6 +292,11 @@ Отобразить окно с версией компилятора и выйти + + Specify a Win32 icon file (.ico) + Укажите файл значка Win32 (ICO) + + The package management feature requires language version 5.0 use /langversion:preview Для функции управления пакетами требуется версия языка 5.0, используйте параметр /langversion:preview @@ -312,6 +352,21 @@ #i не поддерживается зарегистрированными диспетчерами пакетов + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. + Не удалось определить пакет SDK .NET для этого сценария. Если сценарий находится в каталоге с использованием "global.json", убедитесь, что установлен соответствующий пакет SDK .NET. Выходные данные команды "{0} --version" в каталоге "{1}" — "{2}", а код выхода — "{3}". + + + + The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. + Не удалось определить пакет SDK .NET для этого сценария. Не удалось найти dotnet.exe. Убедитесь, что пакет SDK .NET установлен. + + + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. + Не удалось определить пакет SDK .NET для этого скрипта. Если сценарий находится в каталоге с использованием файла "global.json", убедитесь, что установлен соответствующий пакет SDK .NET. Непредвиденная ошибка "{0}". + + This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. Эта функция не поддерживается в данной версии F#. Возможно, потребуется добавить/langversion:preview, чтобы использовать эту функцию. @@ -357,11 +412,21 @@ Недопустимое выравнивание в интерполированной строке + + The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions + Использование "[<Struct>]" для значений, функций и методов разрешено только для определений частичных активных шаблонов + + use! may not be combined with and! use! запрещено сочетать с and! + + A [<Literal>] declaration cannot use an active pattern for its identifier + Объявление [<Literal>] не может использовать активный шаблон для своего идентификатора. + + Cannot assign a value to another value marked literal Невозможно присвоить значение другому значению, помеченному как литерал @@ -2748,8 +2813,8 @@ - MemberKind.PropertyGetSet only expected in parse trees - MemberKind.PropertyGetSet требуется только в деревьях синтаксического анализа + SynMemberKind.PropertyGetSet only expected in parse trees + SynMemberKind.PropertyGetSet используется только в деревьях синтаксического анализа diff --git a/src/fsharp/xlf/FSComp.txt.tr.xlf b/src/fsharp/xlf/FSComp.txt.tr.xlf index 70484967db7..07a561ce588 100644 --- a/src/fsharp/xlf/FSComp.txt.tr.xlf +++ b/src/fsharp/xlf/FSComp.txt.tr.xlf @@ -17,6 +17,16 @@ '{0}' özelliği için F# kitaplığının {1} veya üstü dil sürümü gerekir. + + The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. + 'AssemblyKeyNameAttribute' kullanım dışı bırakıldı. Bunun yerine 'AssemblyKeyFileAttribute' kullanın. + + + + Key container signing is not supported on this platform. + Anahtar kapsayıcısı imzalama bu platformda desteklenmiyor. + + Available overloads:\n{0} Kullanılabilir aşırı yüklemeler:\n{0} @@ -87,6 +97,11 @@ varsayılan arabirim üyesi tüketimi + + discard pattern in use binding + kullanım bağlamasında deseni at + + dotless float32 literal noktasız float32 sabit değeri @@ -122,6 +137,11 @@ nameof + + non-variable patterns to the right of 'as' patterns + 'as' desenlerinin sağındaki değişken olmayan desenler + + nullable optional interop null atanabilir isteğe bağlı birlikte çalışma @@ -142,6 +162,11 @@ paket yönetimi + + binary formatting for integers + tamsayılar için ikili biçim + + whitespace relexation boşluk genişlemesi @@ -157,6 +182,11 @@ dizede düz metin arasına kod ekleme + + struct representation for active patterns + etkin desenler için yapı gösterimi + + wild card in for loop for döngüsünde joker karakter @@ -237,6 +267,11 @@ {0} uzaklığında başlayan kaynak üst bilgisi hatalı biçimlendirilmiş. + + Print the inferred interfaces of all compilation files to associated signature files + Tüm derleme dosyalarının çıkarsanan arabirimlerini ilişkili imza dosyalarına yazdır + + Display the allowed values for language version, specify language version such as 'latest' or 'preview' Dil sürümü için izin verilen değerleri görüntüleyin, dil sürümünü 'en son' veya 'önizleme' örneklerindeki gibi belirtin @@ -257,6 +292,11 @@ Derleyici sürümü başlığını görüntüle ve çık + + Specify a Win32 icon file (.ico) + Win32 simge dosyası (.ico) belirtin + + The package management feature requires language version 5.0 use /langversion:preview Paket yönetimi özelliği dil sürümü 5.0 gerektiriyor, /langversion:preview kullanın @@ -312,6 +352,21 @@ #i, kayıtlı PackageManagers tarafından desteklenmiyor + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. + Bu betik için .NET SDK belirlenemedi. Betik 'global.json' kullanan bir dizindeyse, ilgili .NET SDK'nın yüklü olduğundan emin olun. '{1}' dizinindeki '{0} --version' çıkışı: '{2}' ve çıkış kodu: '{3}'. + + + + The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. + The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. + + + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. + Bu betik için .NET SDK belirlenemedi. Betik 'global.json' kullanan bir dizindeyse, ilgili .NET SDK'nın yüklü olduğundan emin olun. Beklenmeyen hata '{0}'. + + This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. Bu özellik, bu F# sürümünde desteklenmiyor. Bu özelliği kullanabilmeniz için /langversion:preview eklemeniz gerekebilir. @@ -357,11 +412,21 @@ Düz metin arasına kod eklenmiş dizede geçersiz hizalama + + The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions + Değerlerde, işlevlerde ve yöntemlerde '[<Struct>]' kullanımına yalnızca kısmi etkin desen tanımlarında izin veriliyor + + use! may not be combined with and! use!, and! ile birleştirilemez + + A [<Literal>] declaration cannot use an active pattern for its identifier + [<Literal>] bildirimi, tanımlayıcısı için etkin desen kullanamaz + + Cannot assign a value to another value marked literal Sabit değer olarak işaretlenen bir değere başka bir değer atanamaz @@ -2748,8 +2813,8 @@ - MemberKind.PropertyGetSet only expected in parse trees - MemberKind.PropertyGetSet yalnızca ayrıştırma ağaçlarında beklenir + SynMemberKind.PropertyGetSet only expected in parse trees + SynMemberKind.PropertyGetSet yalnızca ayrıştırma ağaçlarında beklenir diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf index e5b0a72a97c..f6f3250b78e 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf @@ -17,6 +17,16 @@ 功能“{0}”需要 {1} 或更高语言版本的 F# 库。 + + The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. + "AssemblyKeyNameAttribute" 已被弃用。请改为使用 "AssemblyKeyFileAttribute"。 + + + + Key container signing is not supported on this platform. + 此平台上不支持密钥容器签名。 + + Available overloads:\n{0} 可用重载:\n{0} @@ -87,6 +97,11 @@ 默认接口成员消耗 + + discard pattern in use binding + 放弃使用绑定模式 + + dotless float32 literal 无点 float32 文本 @@ -122,6 +137,11 @@ nameof + + non-variable patterns to the right of 'as' patterns + "as" 模式右侧的非变量模式 + + nullable optional interop 可以为 null 的可选互操作 @@ -142,6 +162,11 @@ 包管理 + + binary formatting for integers + 整数的二进制格式设置 + + whitespace relexation 空格松弛法 @@ -157,6 +182,11 @@ 字符串内插 + + struct representation for active patterns + 活动模式的结构表示形式 + + wild card in for loop for 循环中的通配符 @@ -237,6 +267,11 @@ 以偏移量 {0} 开始的资源标头格式不正确。 + + Print the inferred interfaces of all compilation files to associated signature files + 将所有编译文件的推断接口打印到关联的签名文件 + + Display the allowed values for language version, specify language version such as 'latest' or 'preview' 显示语言版本的允许值,指定语言版本,如“最新”或“预览” @@ -257,6 +292,11 @@ 显示编译器版本横幅并退出 + + Specify a Win32 icon file (.ico) + 指定 Win32 图标文件(.ico) + + The package management feature requires language version 5.0 use /langversion:preview 包管理功能需要语言版本 5.0,请使用 /langversion:preview @@ -312,6 +352,21 @@ 注册的 PackageManager 不支持 #i + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. + 无法确定此脚本的 .NET SDK。如果脚本在使用 "global.json" 的目录中,请确保已安装相关的 .NET SDK。目录“{1}”中 "{0} --version" 的输出为“{2}”,退出代码为“{3}”。 + + + + The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. + The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. + + + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. + 无法确定此脚本的 .NET SDK。如果脚本在使用 "global.json" 的目录中,请确保已安装相关的 .NET SDK。出现意外错误“{0}”。 + + This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. 此版本的 F# 不支持此功能。你可能需要添加 /langversion:preview 才可使用此功能。 @@ -357,11 +412,21 @@ 内插字符串中的对齐无效 + + The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions + 只允许在部分活动模式定义中对值、函数和方法使用 "[<Struct>]" + + use! may not be combined with and! use! 不得与 and! 结合使用 + + A [<Literal>] declaration cannot use an active pattern for its identifier + [<Literal>] 声明不能对其标识符使用活动模式 + + Cannot assign a value to another value marked literal 无法将值分配给标记为文本的其他值 @@ -2748,8 +2813,8 @@ - MemberKind.PropertyGetSet only expected in parse trees - 仅分析树中需要 MemberKind.PropertyGetSet + SynMemberKind.PropertyGetSet only expected in parse trees + 分析树中只应有 SynMemberKind.PropertyGetSet diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf index 95ddbdce3fa..6bf3879256a 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf @@ -17,6 +17,16 @@ 功能 '{0}' 需要語言版本 {1} 或更高的 F# 程式庫。 + + The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. + 'AssemblyKeyNameAttribute' 已淘汰。請改用 'AssemblyKeyFileAttribute'。 + + + + Key container signing is not supported on this platform. + 此平台不支援金鑰容器簽署。 + + Available overloads:\n{0} 可用的多載:\n{0} @@ -87,6 +97,11 @@ 預設介面成員使用 + + discard pattern in use binding + 捨棄使用繫結中的模式 + + dotless float32 literal 無點號的 float32 常值 @@ -122,6 +137,11 @@ nameof + + non-variable patterns to the right of 'as' patterns + 'as' 模式右邊的非變數模式 + + nullable optional interop 可為 Null 的選擇性 Interop @@ -142,6 +162,11 @@ 套件管理 + + binary formatting for integers + 整數的二進位格式化 + + whitespace relexation 空白字元放寬 @@ -157,6 +182,11 @@ 字串內插補點 + + struct representation for active patterns + 現用模式的結構表示法 + + wild card in for loop for 迴圈中的萬用字元 @@ -237,6 +267,11 @@ 從位移 {0} 開始的資源標頭格式錯誤。 + + Print the inferred interfaces of all compilation files to associated signature files + 將所有編譯檔案的推斷介面列印至相關聯的簽章檔案 + + Display the allowed values for language version, specify language version such as 'latest' or 'preview' 顯示語言版本允許的值,指定 'latest' 或 'preview' 等語言版本 @@ -257,6 +292,11 @@ 顯示編譯器版本橫幅並結束 + + Specify a Win32 icon file (.ico) + 指定 Win32 圖示檔 (.ico) + + The package management feature requires language version 5.0 use /langversion:preview 套件管理功能需要語言版本 5.0,請使用 /langversion:preview @@ -312,6 +352,21 @@ 註冊的 PackageManagers 不支援 #i + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. The output from '{0} --version' in the directory '{1}' was: '{2}' and the exit code was '{3}'. + 無法判斷這個指令碼的 .NET SDK。如果指令碼位於使用 'global.json' 的目錄中,請確認已安裝相關的 .NET SDK。目錄 '{1}' 中 '{0} --version' 的輸出為: '{2}',結束代碼為 '{3}'。 + + + + The .NET SDK for this script could not be determined. dotnet.exe could not be found ensure a .NET SDK is installed. + 無法判斷此指令碼的 .NET SDK。找不到 dotnet.exe,請確保已安裝 .NET SDK。 + + + + The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' then ensure the relevant .NET SDK is installed. Unexpected error '{0}'. + 無法判斷這個指令碼的 .NET SDK。如果指令碼位於使用 'global.json' 的目錄中,請確認已安裝相關的 .NET SDK。未預期的錯誤 '{0}'。 + + This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature. 此版本的 F# 不支援此功能。您可能需要新增 /langversion:preview 才能使用此功能。 @@ -357,11 +412,21 @@ 插補字串中的對齊無效 + + The use of '[<Struct>]' on values, functions and methods is only allowed on partial active pattern definitions + 只允許在部分現用模式定義上對值、函式和方法使用 '[<Struct>]' + + use! may not be combined with and! use! 不可與 and! 合併 + + A [<Literal>] declaration cannot use an active pattern for its identifier + [<Literal>] 宣告不能對其識別碼使用現用模式 + + Cannot assign a value to another value marked literal 無法將值指派給標記為常值的其他值 @@ -2748,8 +2813,8 @@ - MemberKind.PropertyGetSet only expected in parse trees - 只有剖析樹狀目錄中需要 MemberKind.PropertyGetSet + SynMemberKind.PropertyGetSet only expected in parse trees + 只有剖析樹狀目錄中需要 SynMemberKind.PropertyGetSet diff --git a/src/scripts/scriptlib.fsx b/src/scripts/scriptlib.fsx index 71c57aee036..0cf23b4b295 100644 --- a/src/scripts/scriptlib.fsx +++ b/src/scripts/scriptlib.fsx @@ -166,7 +166,7 @@ module Scripting = type OutPipe (writer: TextWriter) = member x.Post (msg:string) = lock writer (fun () -> writer.WriteLine(msg)) interface System.IDisposable with - member __.Dispose() = writer.Flush() + member _.Dispose() = writer.Flush() let redirectTo (writer: TextWriter) = new OutPipe (writer) diff --git a/tests/EndToEndBuildTests/BasicProvider/BasicProvider.DesignTime/BasicProvider.DesignTime.fsproj b/tests/EndToEndBuildTests/BasicProvider/BasicProvider.DesignTime/BasicProvider.DesignTime.fsproj index 84caced58f2..e027c0f02eb 100644 --- a/tests/EndToEndBuildTests/BasicProvider/BasicProvider.DesignTime/BasicProvider.DesignTime.fsproj +++ b/tests/EndToEndBuildTests/BasicProvider/BasicProvider.DesignTime/BasicProvider.DesignTime.fsproj @@ -2,7 +2,7 @@ Library - netcoreapp3.1;net472 + net5.0;net472 typeproviders NO_GENERATIVE IS_DESIGNTIME diff --git a/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/BasicProvider.Tests.fsproj b/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/BasicProvider.Tests.fsproj index f6d202a0d55..358a6059411 100644 --- a/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/BasicProvider.Tests.fsproj +++ b/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/BasicProvider.Tests.fsproj @@ -2,7 +2,7 @@ Library - netcoreapp3.1 + net5.0 $(TestTargetFramework) false NO_GENERATIVE diff --git a/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/NuGet.config b/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/NuGet.config index 82abc6e8d3e..261d597dfa2 100644 --- a/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/NuGet.config +++ b/tests/EndToEndBuildTests/BasicProvider/BasicProvider.Tests/NuGet.config @@ -3,6 +3,6 @@ - + diff --git a/tests/EndToEndBuildTests/BasicProvider/BasicProvider/BasicProvider.fsproj b/tests/EndToEndBuildTests/BasicProvider/BasicProvider/BasicProvider.fsproj index 9e6714f99d8..b2125ad9b94 100644 --- a/tests/EndToEndBuildTests/BasicProvider/BasicProvider/BasicProvider.fsproj +++ b/tests/EndToEndBuildTests/BasicProvider/BasicProvider/BasicProvider.fsproj @@ -2,7 +2,7 @@ Library - netcoreapp3.1;net472 + net5.0;net472 typeproviders $(FSharpCoreShippedPackageVersion) typeproviders diff --git a/tests/EndToEndBuildTests/BasicProvider/TestBasicProvider.cmd b/tests/EndToEndBuildTests/BasicProvider/TestBasicProvider.cmd index bce9551e2c9..2abd059cc48 100644 --- a/tests/EndToEndBuildTests/BasicProvider/TestBasicProvider.cmd +++ b/tests/EndToEndBuildTests/BasicProvider/TestBasicProvider.cmd @@ -42,8 +42,8 @@ echo dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuratio dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net472 -p:FSharpTestCompilerVersion=net40 if ERRORLEVEL 1 echo Error: TestBasicProvider failed && goto :failure -echo dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=netcoreapp3.1 -p:FSharpTestCompilerVersion=coreclr - dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=netcoreapp3.1 -p:FSharpTestCompilerVersion=coreclr +echo dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net5.0 -p:FSharpTestCompilerVersion=coreclr + dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net5.0 -p:FSharpTestCompilerVersion=coreclr if ERRORLEVEL 1 echo Error: TestBasicProvider failed && goto :failure rem @@ -60,8 +60,8 @@ echo dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuratio dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net472 -p:FSharpTestCompilerVersion=net40 if ERRORLEVEL 1 echo Error: TestBasicProvider failed && goto :failure -echo dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=netcoreapp3.1 -p:FSharpTestCompilerVersion=coreclr - dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=netcoreapp3.1 -p:FSharpTestCompilerVersion=coreclr +echo dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net5.0 -p:FSharpTestCompilerVersion=coreclr + dotnet test BasicProvider.Tests\BasicProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net5.0 -p:FSharpTestCompilerVersion=coreclr if ERRORLEVEL 1 echo Error: TestBasicProvider failed && goto :failure :success diff --git a/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/ComboProvider.Tests.fsproj b/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/ComboProvider.Tests.fsproj index 21a2234258d..36c83c024b4 100644 --- a/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/ComboProvider.Tests.fsproj +++ b/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/ComboProvider.Tests.fsproj @@ -2,7 +2,7 @@ Library - netcoreapp3.1 + net5.0 $(TestTargetFramework) false $(FSharpCoreShippedPackageVersion) diff --git a/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/NuGet.config b/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/NuGet.config index 82abc6e8d3e..261d597dfa2 100644 --- a/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/NuGet.config +++ b/tests/EndToEndBuildTests/ComboProvider/ComboProvider.Tests/NuGet.config @@ -3,6 +3,6 @@ - + diff --git a/tests/EndToEndBuildTests/ComboProvider/ComboProvider/ComboProvider.fsproj b/tests/EndToEndBuildTests/ComboProvider/ComboProvider/ComboProvider.fsproj index 0b35bb4aac3..640b505aaf9 100644 --- a/tests/EndToEndBuildTests/ComboProvider/ComboProvider/ComboProvider.fsproj +++ b/tests/EndToEndBuildTests/ComboProvider/ComboProvider/ComboProvider.fsproj @@ -2,9 +2,9 @@ Library - netcoreapp3.1;net472 + net5.0;net472 $(FSharpCoreShippedPackageVersion) - netcoreapp3.1;net472 + net5.0;net472 diff --git a/tests/EndToEndBuildTests/ComboProvider/TestComboProvider.cmd b/tests/EndToEndBuildTests/ComboProvider/TestComboProvider.cmd index b8e68e24134..f14f2685652 100644 --- a/tests/EndToEndBuildTests/ComboProvider/TestComboProvider.cmd +++ b/tests/EndToEndBuildTests/ComboProvider/TestComboProvider.cmd @@ -42,8 +42,8 @@ echo dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuratio dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net472 -p:FSharpTestCompilerVersion=net40 if ERRORLEVEL 1 echo Error: TestComboProvider failed && goto :failure -echo dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=netcoreapp3.1 -p:FSharpTestCompilerVersion=coreclr - dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=netcoreapp3.1 -p:FSharpTestCompilerVersion=coreclr +echo dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net5.0 -p:FSharpTestCompilerVersion=coreclr + dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net5.0 -p:FSharpTestCompilerVersion=coreclr if ERRORLEVEL 1 echo Error: TestComboProvider failed && goto :failure rem @@ -60,8 +60,8 @@ echo dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuratio dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net472 -p:FSharpTestCompilerVersion=net40 if ERRORLEVEL 1 echo Error: TestComboProvider failed && goto :failure -echo dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -v %configuration% -p:TestTargetFramework=netcoreapp3.1 -p:FSharpTestCompilerVersion=coreclr - dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=netcoreapp3.1 -p:FSharpTestCompilerVersion=coreclr +echo dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -v %configuration% -p:TestTargetFramework=net5.0 -p:FSharpTestCompilerVersion=coreclr + dotnet test ComboProvider.Tests\ComboProvider.Tests.fsproj -c %configuration% -v minimal -p:TestTargetFramework=net5.0 -p:FSharpTestCompilerVersion=coreclr if ERRORLEVEL 1 echo Error: TestComboProvider failed && goto :failure :success diff --git a/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj b/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj index ffc6aa91e4b..2572d28cc62 100644 --- a/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj +++ b/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj @@ -3,8 +3,8 @@ - net472;netcoreapp3.1 - netcoreapp3.1 + net472;net5.0 + net5.0 Library true nunit diff --git a/tests/FSharp.Compiler.ComponentTests/Conformance/DeclarationElements/LetBindings/UseBindings.fs b/tests/FSharp.Compiler.ComponentTests/Conformance/DeclarationElements/LetBindings/UseBindings.fs new file mode 100644 index 00000000000..7cabf8b5e20 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/Conformance/DeclarationElements/LetBindings/UseBindings.fs @@ -0,0 +1,62 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.ComponentTests.Conformance.DeclarationElements.LetBindings + +open Xunit +open FSharp.Test.Utilities.Compiler +open FSharp.Test.Utilities.Xunit.Attributes + +module UseBindings = + + [] + let ``UseBindings - UseBindingDiscard01.fs - Compiles`` compilation = + compilation + |> asFsx + |> withOptions ["--langversion:preview"] + |> compile + |> shouldSucceed + |> ignore + + [] + let ``UseBindings - UseBindingDiscard01.fs - Bad LangVersion`` compilation = + compilation + |> asFsx + |> withOptions ["--langversion:5.0"] + |> compile + |> shouldFail + |> withErrorCode 3350 + |> withDiagnosticMessageMatches "Feature 'discard pattern in use binding' is not available.*" + + [] + let ``Dispose called for discarded value of use binding`` () = + Fsx """ +type private Disposable() = + [] static val mutable private disposedTimes: int + [] static val mutable private constructedTimes: int + + do Disposable.constructedTimes <- Disposable.constructedTimes + 1 + + static member DisposeCallCount() = Disposable.disposedTimes + static member ConsturctorCallCount() = Disposable.constructedTimes + + interface System.IDisposable with + member _.Dispose() = + Disposable.disposedTimes <- Disposable.disposedTimes + 1 + +let _scope = + use _ = new Disposable() + () + +let disposeCalls = Disposable.DisposeCallCount() +if disposeCalls <> 1 then + failwith "was not disposed or disposed too many times" + +let ctorCalls = Disposable.ConsturctorCallCount() +if ctorCalls <> 1 then + failwithf "unexpected constructor call count: %i" ctorCalls + + """ + |> asExe + |> withLangVersionPreview + |> compileAndRun + |> shouldSucceed \ No newline at end of file diff --git a/tests/FSharp.Compiler.ComponentTests/Conformance/PatternMatching/Simple.fs b/tests/FSharp.Compiler.ComponentTests/Conformance/PatternMatching/Simple.fs index 2d2123f581c..62eeaf555f7 100644 --- a/tests/FSharp.Compiler.ComponentTests/Conformance/PatternMatching/Simple.fs +++ b/tests/FSharp.Compiler.ComponentTests/Conformance/PatternMatching/Simple.fs @@ -47,3 +47,16 @@ module Simple = |> withDiagnosticMessageMatches "Uppercase variable identifiers should not generally be used in patterns, and may indicate a missing open declaration or a misspelt pattern name" |> ignore + [] + let ``As patterns``() = + Fsx """ + let (|Id|) = id + let a = [1..4] + match a with + | 1 | 1 as b::(Id 2 as c as c2)::[d as 3; Id e & Id _ as Id 4] as Id f when b = 1 && c = 2 && c2 = 2 && d = 3 && e = 4 && a = f -> () + | _ -> failwith "Match failed" + """ + |> asExe + |> withLangVersionPreview + |> compileExeAndRun + |> shouldSucceed \ No newline at end of file diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Misc.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Misc.fs new file mode 100644 index 00000000000..88410a24e11 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Misc.fs @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.ComponentTests.EmittedIL + +open Xunit +open FSharp.Test.Utilities.Compiler + +module ``Misc`` = + [] + let ``Empty array construct compiles to System.Array.Empty<_>()``() = + FSharp """ +module Misc + +let zInt (): int[] = [||] + +let zString (): string[] = [||] + +let zGeneric<'a> (): 'a[] = [||] + """ + |> compile + |> shouldSucceed + |> verifyIL [""" +IL_0000: call !!0[] [runtime]System.Array::Empty() +IL_0005: ret""" + """ + +IL_0000: call !!0[] [runtime]System.Array::Empty() +IL_0005: ret""" + + """ +IL_0000: call !!0[] [runtime]System.Array::Empty() +IL_0005: ret""" ] diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/SkipLocalsInit.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/SkipLocalsInit.fs new file mode 100644 index 00000000000..cd484f2cfe7 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/SkipLocalsInit.fs @@ -0,0 +1,133 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.ComponentTests.EmittedIL + +open Xunit +open FSharp.Test.Utilities.Compiler + +#if NETCOREAPP +module ``SkipLocalsInit`` = + [] + let ``Init in function and closure not emitted when applied on function``() = + FSharp """ +module SkipLocalsInit + +[] +let x () = + [||] |> Array.filter (fun x -> let y = "".Length in y + y = x) |> ignore +""" + |> compile + |> shouldSucceed + |> verifyIL [""" +.method public static void x() cil managed +{ + .custom instance void [runtime]System.Runtime.CompilerServices.SkipLocalsInitAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals (int32[] V_0) +""" + + """ +.method public strict virtual instance bool + Invoke(int32 x) cil managed +{ + + .maxstack 6 + .locals (int32 V_0)"""] + + [] + let ``Init in static method not emitted when applied on class``() = + FSharp """ +module SkipLocalsInit + +[] +type X () = + static member Y () = + let x = "ssa".Length + x + x + """ + |> compile + |> shouldSucceed + |> verifyIL [""" +.custom instance void [runtime]System.Runtime.CompilerServices.SkipLocalsInitAttribute::.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 ) +""" + + """ +.method public static int32 Y() cil managed +{ + + .maxstack 4 + .locals (int32 V_0)"""] + + [] + let ``Init in static method and function not emitted when applied on module``() = + FSharp """ +[] +module SkipLocalsInit + +let x () = + let x = "ssa".Length + x + x + +type X () = + static member Y () = + let x = "ssa".Length + x + x + """ + |> compile + |> shouldSucceed + |> verifyIL [""" +.custom instance void [runtime]System.Runtime.CompilerServices.SkipLocalsInitAttribute::.ctor() = ( 01 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 int32 x() cil managed +{ + + .maxstack 4 + .locals (int32 V_0) +""" + + """ +.method public static int32 Y() cil managed +{ + + .maxstack 4 + .locals (int32 V_0)"""] + + [] + let ``Init in method and closure not emitted when applied on method``() = + FSharp """ +module SkipLocalsInit + +type X () = + [] + member _.Y () = + [||] |> Array.filter (fun x -> let y = "".Length in y + y = x) |> ignore + let x = "ssa".Length + x + x + """ + |> compile + |> shouldSucceed + |> verifyIL [""" +.method public hidebysig instance int32 + Y() cil managed +{ + .custom instance void [runtime]System.Runtime.CompilerServices.SkipLocalsInitAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals (int32[] V_0, + int32 V_1) +""" + + """ +.method public strict virtual instance bool + Invoke(int32 x) cil managed +{ + + .maxstack 6 + .locals (int32 V_0) +"""] +#endif \ No newline at end of file diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/TupleElimination.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/TupleElimination.fs new file mode 100644 index 00000000000..a83e71a1960 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/TupleElimination.fs @@ -0,0 +1,799 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.ComponentTests.EmittedIL + +open Xunit +open FSharp.Test.Utilities.Compiler + +module ``TupleElimination`` = + + [] + let ``Sequence expressions with potential side effects do not prevent tuple elimination``() = + FSharp """ +module TupleElimination +open System.Runtime.CompilerServices + +[] +let f () = 3 + +[] +let sideEffect () = () + +type Test = + [] + static member test(x: int32 * int32) = x + +let v () = + let a, b = + "".ToString () |> ignore + System.DateTime.Now |> ignore + "3".ToString () |> ignore + 2L, f () + System.DateTime.Now |> ignore + a, b + +let w () = + let (a, b) as t = + "".ToString () |> ignore + System.DateTime.Now |> ignore + "3".ToString () |> ignore + 2, f () + System.DateTime.Now |> ignore + let _ = Test.test(t) + a + b + +let x () = + let a, b = + "".ToString () |> ignore + System.DateTime.Now |> ignore + "3".ToString () |> ignore + 2, f () + System.DateTime.Now |> ignore + a + b + +let y () = + let a, b, c = + let a = f () + sideEffect () + a, f (), f () + a + b + c + +let z () = + let a, b, c = + let u, v = 3, 4 + sideEffect () + f (), f () + u, f () + v + a + b + c + """ + |> compile + |> shouldSucceed + |> verifyIL [ + +(* +public static Tuple v() +{ + string text = "".ToString(); + DateTime now = DateTime.Now; + text = "3".ToString(); + int item = TupleElimination.f(); + now = DateTime.Now; + return new Tuple(2L, item); +} +*) + """ +.method public static class [runtime]System.Tuple`2 + v() cil managed +{ + + .maxstack 4 + .locals init (string V_0, + valuetype [runtime]System.DateTime V_1, + int32 V_2) + IL_0000: ldstr "" + IL_0005: callvirt instance string [runtime]System.Object::ToString() + IL_000a: stloc.0 + IL_000b: call valuetype [runtime]System.DateTime [runtime]System.DateTime::get_Now() + IL_0010: stloc.1 + IL_0011: ldstr "3" + IL_0016: callvirt instance string [runtime]System.Object::ToString() + IL_001b: stloc.0 + IL_001c: call int32 TupleElimination::f() + IL_0021: stloc.2 + IL_0022: call valuetype [runtime]System.DateTime [runtime]System.DateTime::get_Now() + IL_0027: stloc.1 + IL_0028: ldc.i4.2 + IL_0029: conv.i8 + IL_002a: ldloc.2 + IL_002b: newobj instance void class [runtime]System.Tuple`2::.ctor(!0, + !1) + IL_0030: ret +} +""" + +(* +public static int w() +{ + string text = "".ToString(); + DateTime now = DateTime.Now; + text = "3".ToString(); + int num = TupleElimination.f(); + Tuple x = new Tuple(2, num); + now = DateTime.Now; + TupleElimination.Test.test(x); + return 2 + num; +} +*) + """ +.method public static int32 w() cil managed +{ + + .maxstack 4 + .locals init (string V_0, + valuetype [runtime]System.DateTime V_1, + int32 V_2, + class [runtime]System.Tuple`2 V_3) + IL_0000: ldstr "" + IL_0005: callvirt instance string [runtime]System.Object::ToString() + IL_000a: stloc.0 + IL_000b: call valuetype [runtime]System.DateTime [runtime]System.DateTime::get_Now() + IL_0010: stloc.1 + IL_0011: ldstr "3" + IL_0016: callvirt instance string [runtime]System.Object::ToString() + IL_001b: stloc.0 + IL_001c: call int32 TupleElimination::f() + IL_0021: stloc.2 + IL_0022: ldc.i4.2 + IL_0023: ldloc.2 + IL_0024: newobj instance void class [runtime]System.Tuple`2::.ctor(!0, + !1) + IL_0029: stloc.3 + IL_002a: call valuetype [runtime]System.DateTime [runtime]System.DateTime::get_Now() + IL_002f: stloc.1 + IL_0030: ldloc.3 + IL_0031: call class [runtime]System.Tuple`2 TupleElimination/Test::test(class [runtime]System.Tuple`2) + IL_0036: pop + IL_0037: ldc.i4.2 + IL_0038: ldloc.2 + IL_0039: add + IL_003a: ret +} +""" + +(* +public static int x() +{ + string text = "".ToString(); + DateTime now = DateTime.Now; + text = "3".ToString(); + int num = TupleElimination.f(); + now = DateTime.Now; + return 2 + num; +} +*) + """ +.method public static int32 x() cil managed +{ + + .maxstack 4 + .locals init (string V_0, + valuetype [runtime]System.DateTime V_1, + int32 V_2) + IL_0000: ldstr "" + IL_0005: callvirt instance string [runtime]System.Object::ToString() + IL_000a: stloc.0 + IL_000b: call valuetype [runtime]System.DateTime [runtime]System.DateTime::get_Now() + IL_0010: stloc.1 + IL_0011: ldstr "3" + IL_0016: callvirt instance string [runtime]System.Object::ToString() + IL_001b: stloc.0 + IL_001c: call int32 TupleElimination::f() + IL_0021: stloc.2 + IL_0022: call valuetype [runtime]System.DateTime [runtime]System.DateTime::get_Now() + IL_0027: stloc.1 + IL_0028: ldc.i4.2 + IL_0029: ldloc.2 + IL_002a: add + IL_002b: ret +} +""" + +(* +public static int y() +{ + int num = TupleElimination.f(); + TupleElimination.sideEffect(); + return num + TupleElimination.f() + TupleElimination.f(); +} +*) + """ +.method public static int32 y() cil managed +{ + + .maxstack 4 + .locals init (int32 V_0) + IL_0000: call int32 TupleElimination::f() + IL_0005: stloc.0 + IL_0006: call void TupleElimination::sideEffect() + IL_000b: ldloc.0 + IL_000c: call int32 TupleElimination::f() + IL_0011: add + IL_0012: call int32 TupleElimination::f() + IL_0017: add + IL_0018: ret +} +""" + +(* +public static int z() +{ + TupleElimination.sideEffect(); + return TupleElimination.f() + (TupleElimination.f() + 3) + (TupleElimination.f() + 4); +} +*) + """ +.method public static int32 z() cil managed +{ + + .maxstack 8 + IL_0000: call void TupleElimination::sideEffect() + IL_0005: call int32 TupleElimination::f() + IL_000a: call int32 TupleElimination::f() + IL_000f: ldc.i4.3 + IL_0010: add + IL_0011: add + IL_0012: call int32 TupleElimination::f() + IL_0017: ldc.i4.4 + IL_0018: add + IL_0019: add + IL_001a: ret +} +""" ] + + [] + let ``First class use of tuple prevents elimination``() = + FSharp """ +module TupleElimination +open System.Runtime.CompilerServices + +[] +let f () = 3 + +[] +let cond () = true + +type Test = + [] + static member test(x: int32 * int32) = x + +let y () = + let a, b = + if cond () then + 1, 2 + else + Test.test(3, 4) + a + b + +let z () = + let a, b = + "".ToString () |> ignore + System.DateTime.Now |> ignore + "3".ToString () |> ignore + Test.test(2, f ()) + System.DateTime.Now |> ignore + a + b + """ + |> compile + |> shouldSucceed + |> verifyIL [ + +(* +public static int y() +{ + Tuple tuple = (!TupleElimination.cond()) ? TupleElimination.Test.test(new Tuple(3, 4)) : new Tuple(1, 2); + return tuple.Item1 + tuple.Item2; +} +*) + """ +.method public static int32 y() cil managed +{ + + .maxstack 4 + .locals init (class [runtime]System.Tuple`2 V_0) + IL_0000: call bool TupleElimination::cond() + IL_0005: brfalse.s IL_0010 + + IL_0007: ldc.i4.1 + IL_0008: ldc.i4.2 + IL_0009: newobj instance void class [runtime]System.Tuple`2::.ctor(!0, + !1) + IL_000e: br.s IL_001c + + IL_0010: ldc.i4.3 + IL_0011: ldc.i4.4 + IL_0012: newobj instance void class [runtime]System.Tuple`2::.ctor(!0, + !1) + IL_0017: call class [runtime]System.Tuple`2 TupleElimination/Test::test(class [runtime]System.Tuple`2) + IL_001c: stloc.0 + IL_001d: ldloc.0 + IL_001e: call instance !0 class [runtime]System.Tuple`2::get_Item1() + IL_0023: ldloc.0 + IL_0024: call instance !1 class [runtime]System.Tuple`2::get_Item2() + IL_0029: add + IL_002a: ret +} +""" + +(* +public static int z() +{ + string text = "".ToString(); + DateTime now = DateTime.Now; + text = "3".ToString(); + Tuple tuple = TupleElimination.Test.test(new Tuple(2, TupleElimination.f())); + int item = tuple.Item2; + int item2 = tuple.Item1; + now = DateTime.Now; + return item2 + item; +} +*) + """ +.method public static int32 z() cil managed +{ + + .maxstack 4 + .locals init (class [runtime]System.Tuple`2 V_0, + string V_1, + valuetype [runtime]System.DateTime V_2, + int32 V_3, + int32 V_4) + IL_0000: ldstr "" + IL_0005: callvirt instance string [runtime]System.Object::ToString() + IL_000a: stloc.1 + IL_000b: call valuetype [runtime]System.DateTime [runtime]System.DateTime::get_Now() + IL_0010: stloc.2 + IL_0011: ldstr "3" + IL_0016: callvirt instance string [runtime]System.Object::ToString() + IL_001b: stloc.1 + IL_001c: ldc.i4.2 + IL_001d: call int32 TupleElimination::f() + IL_0022: newobj instance void class [runtime]System.Tuple`2::.ctor(!0, + !1) + IL_0027: call class [runtime]System.Tuple`2 TupleElimination/Test::test(class [runtime]System.Tuple`2) + IL_002c: stloc.0 + IL_002d: ldloc.0 + IL_002e: call instance !1 class [runtime]System.Tuple`2::get_Item2() + IL_0033: stloc.3 + IL_0034: ldloc.0 + IL_0035: call instance !0 class [runtime]System.Tuple`2::get_Item1() + IL_003a: stloc.s V_4 + IL_003c: call valuetype [runtime]System.DateTime [runtime]System.DateTime::get_Now() + IL_0041: stloc.2 + IL_0042: ldloc.s V_4 + IL_0044: ldloc.3 + IL_0045: add + IL_0046: ret +}""" ] + + [] + let ``Branching let binding rhs does not prevent tuple elimination``() = + FSharp """ +module TupleElimination +open System.Runtime.CompilerServices + +[] +let f () = 3 + +[] +let sideEffect () = () + +[] +let cond () = true + +type Test = + [] + static member test(x: int32 * int32) = x + +let x () = + let a, b = + sideEffect () + if cond () then + let v = "yep" + let v2 = if cond () then 1 else 3 + v, v2 + else + "", f () + a, b + +let rec y () = + let a, b, c = + if cond () then + "".ToString () |> ignore + 1, f (), 3 + else + if cond () then + 2, 2, 3 + else + match 1 / 0 with + | 1 -> + if 2 / 3 = 1 then + 5, 6, 7 + else + "".ToString () |> ignore + 6, 5, 4 + | 2 -> 6, 6, 6 + | 3 -> f (), 7, f () + | _ -> 8, y (), y () + + a + b + (2 * c) + +let z () = + let a, b = + if cond () then + 1, 3 + else + 3, 4 + a + b + """ + |> compile + |> shouldSucceed + |> verifyIL [ + +(* +public static Tuple x() +{ + TupleElimination.sideEffect(); + string item; + int item2; + if (TupleElimination.cond()) + { + int num = (!TupleElimination.cond()) ? 3 : 1; + item = "yep"; + item2 = num; + } + else + { + item = ""; + item2 = TupleElimination.f(); + } + return new Tuple(item, item2); +} +*) + """ +.method public static class [runtime]System.Tuple`2 + x() cil managed +{ + + .maxstack 4 + .locals init (string V_0, + int32 V_1, + int32 V_2) + IL_0000: call void TupleElimination::sideEffect() + IL_0005: call bool TupleElimination::cond() + IL_000a: brfalse.s IL_0022 + + IL_000c: call bool TupleElimination::cond() + IL_0011: brfalse.s IL_0016 + + IL_0013: ldc.i4.1 + IL_0014: br.s IL_0017 + + IL_0016: ldc.i4.3 + IL_0017: stloc.2 + IL_0018: ldstr "yep" + IL_001d: stloc.0 + IL_001e: ldloc.2 + IL_001f: stloc.1 + IL_0020: br.s IL_002e + + IL_0022: ldstr "" + IL_0027: stloc.0 + IL_0028: call int32 TupleElimination::f() + IL_002d: stloc.1 + IL_002e: ldloc.0 + IL_002f: ldloc.1 + IL_0030: newobj instance void class [runtime]System.Tuple`2::.ctor(!0, + !1) + IL_0035: ret +} +""" + +(* +public static int y() +{ + int num; + int num2; + int num3; + if (TupleElimination.cond()) + { + string text = "".ToString(); + num = 1; + num2 = TupleElimination.f(); + num3 = 3; + } + else if (TupleElimination.cond()) + { + num = 2; + num2 = 2; + num3 = 3; + } + else + { + switch (1 / 0) + { + case 1: + if (2 / 3 == 1) + { + num = 5; + num2 = 6; + num3 = 7; + } + else + { + string text = "".ToString(); + num = 6; + num2 = 5; + num3 = 4; + } + break; + case 2: + num = 6; + num2 = 6; + num3 = 6; + break; + case 3: + num = TupleElimination.f(); + num2 = 7; + num3 = TupleElimination.f(); + break; + default: + num = 8; + num2 = TupleElimination.y(); + num3 = TupleElimination.y(); + break; + } + } + return num + num2 + 2 * num3; +} +*) + """ +.method public static int32 y() cil managed +{ + + .maxstack 5 + .locals init (int32 V_0, + int32 V_1, + int32 V_2, + string V_3) + IL_0000: ldc.i4.0 + IL_0001: stloc.0 + IL_0002: ldc.i4.0 + IL_0003: stloc.1 + IL_0004: ldc.i4.0 + IL_0005: stloc.2 + IL_0006: call bool TupleElimination::cond() + IL_000b: brfalse.s IL_0027 + + IL_000d: ldstr "" + IL_0012: callvirt instance string [runtime]System.Object::ToString() + IL_0017: stloc.3 + IL_0018: ldc.i4.1 + IL_0019: stloc.0 + IL_001a: call int32 TupleElimination::f() + IL_001f: stloc.1 + IL_0020: ldc.i4.3 + IL_0021: stloc.2 + IL_0022: br IL_0095 + + IL_0027: call bool TupleElimination::cond() + IL_002c: brfalse.s IL_0036 + + IL_002e: ldc.i4.2 + IL_002f: stloc.0 + IL_0030: ldc.i4.2 + IL_0031: stloc.1 + IL_0032: ldc.i4.3 + IL_0033: stloc.2 + IL_0034: br.s IL_0095 + + IL_0036: ldc.i4.1 + IL_0037: ldc.i4.0 + IL_0038: div + IL_0039: ldc.i4.1 + IL_003a: sub + IL_003b: switch ( + IL_004e, + IL_006f, + IL_0077) + IL_004c: br.s IL_0087 + + IL_004e: ldc.i4.2 + IL_004f: ldc.i4.3 + IL_0050: div + IL_0051: ldc.i4.1 + IL_0052: bne.un.s IL_005c + + IL_0054: ldc.i4.5 + IL_0055: stloc.0 + IL_0056: ldc.i4.6 + IL_0057: stloc.1 + IL_0058: ldc.i4.7 + IL_0059: stloc.2 + IL_005a: br.s IL_0095 + + IL_005c: ldstr "" + IL_0061: callvirt instance string [runtime]System.Object::ToString() + IL_0066: stloc.3 + IL_0067: ldc.i4.6 + IL_0068: stloc.0 + IL_0069: ldc.i4.5 + IL_006a: stloc.1 + IL_006b: ldc.i4.4 + IL_006c: stloc.2 + IL_006d: br.s IL_0095 + + IL_006f: ldc.i4.6 + IL_0070: stloc.0 + IL_0071: ldc.i4.6 + IL_0072: stloc.1 + IL_0073: ldc.i4.6 + IL_0074: stloc.2 + IL_0075: br.s IL_0095 + + IL_0077: call int32 TupleElimination::f() + IL_007c: stloc.0 + IL_007d: ldc.i4.7 + IL_007e: stloc.1 + IL_007f: call int32 TupleElimination::f() + IL_0084: stloc.2 + IL_0085: br.s IL_0095 + + IL_0087: ldc.i4.8 + IL_0088: stloc.0 + IL_0089: call int32 TupleElimination::y() + IL_008e: stloc.1 + IL_008f: call int32 TupleElimination::y() + IL_0094: stloc.2 + IL_0095: ldloc.0 + IL_0096: ldloc.1 + IL_0097: add + IL_0098: ldc.i4.2 + IL_0099: ldloc.2 + IL_009a: mul + IL_009b: add + IL_009c: ret +} +""" + +(* +public static int z() +{ + int num; + int num2; + if (TupleElimination.cond()) + { + num = 1; + num2 = 3; + } + else + { + num = 3; + num2 = 4; + } + return num + num2; +} +*) + """ +.method public static int32 z() cil managed +{ + + .maxstack 4 + .locals init (int32 V_0, + int32 V_1) + IL_0000: call bool TupleElimination::cond() + IL_0005: brfalse.s IL_000d + + IL_0007: ldc.i4.1 + IL_0008: stloc.0 + IL_0009: ldc.i4.3 + IL_000a: stloc.1 + IL_000b: br.s IL_0011 + + IL_000d: ldc.i4.3 + IL_000e: stloc.0 + IL_000f: ldc.i4.4 + IL_0010: stloc.1 + IL_0011: ldloc.0 + IL_0012: ldloc.1 + IL_0013: add + IL_0014: ret +}""" ] + + + + + [] + let ``Branching let binding of tuple with capture doesn't promote``() = + FSharp """ +module TupleElimination +open System.Runtime.CompilerServices + +let testFunction(a,b) = + let x,y = printfn "hello"; b*a,a*b + (fun () -> x + y) + """ + |> compile + |> shouldSucceed + |> verifyIL [ + // Checks the captured 'x' and 'y' are not promoted onto the heap + """ +.method public static class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 + testFunction(int32 a, + int32 b) cil managed +{ + + .maxstack 4 + .locals init (class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4 V_0, + int32 V_1, + int32 V_2) + IL_0000: ldstr "hello" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_000a: stloc.0 + IL_000b: call class [netstandard]System.IO.TextWriter [netstandard]System.Console::get_Out() + IL_0010: ldloc.0 + IL_0011: call !!0 [FSharp.Core]Microsoft.FSharp.Core.PrintfModule::PrintFormatLineToTextWriter(class [runtime]System.IO.TextWriter, + class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_0016: pop + IL_0017: ldarg.1 + IL_0018: ldarg.0 + IL_0019: mul + IL_001a: stloc.1 + IL_001b: ldarg.0 + IL_001c: ldarg.1 + IL_001d: mul + IL_001e: stloc.2 + IL_001f: ldloc.1 + IL_0020: ldloc.2 + IL_0021: newobj instance void TupleElimination/testFunction@7::.ctor(int32, + int32) + IL_0026: ret +} + +""" ] + + + + + [] + let ``Branching let binding of tuple gives good names in closure``() = + FSharp """ +module TupleElimination +open System.Runtime.CompilerServices + +let testFunction(a,b) = + let x,y = printfn "hello"; b*a,a*b + (fun () -> x + y) + """ + |> compile + |> shouldSucceed + |> verifyIL [ + + // Checks the names of captured 'x' and 'y'. + """ + + .method public strict virtual instance int32 + Invoke(class [FSharp.Core]Microsoft.FSharp.Core.Unit unitVar0) cil managed + { + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 TupleElimination/testFunction@7::x + IL_0006: ldarg.0 + IL_0007: ldfld int32 TupleElimination/testFunction@7::y + IL_000c: add + IL_000d: ret + } +""" ] + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/ErrorMessages/AccessOfTypeAbbreviationTests.fs b/tests/FSharp.Compiler.ComponentTests/ErrorMessages/AccessOfTypeAbbreviationTests.fs index df9acf7efca..623244da2f5 100644 --- a/tests/FSharp.Compiler.ComponentTests/ErrorMessages/AccessOfTypeAbbreviationTests.fs +++ b/tests/FSharp.Compiler.ComponentTests/ErrorMessages/AccessOfTypeAbbreviationTests.fs @@ -4,7 +4,7 @@ namespace FSharp.Compiler.ComponentTests.ErrorMessages open Xunit open FSharp.Test.Utilities.Compiler -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics module ``Access Of Type Abbreviation`` = diff --git a/tests/FSharp.Compiler.ComponentTests/ErrorMessages/InvalidLiteralTests.fs b/tests/FSharp.Compiler.ComponentTests/ErrorMessages/InvalidLiteralTests.fs new file mode 100644 index 00000000000..fb44f2b717b --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/ErrorMessages/InvalidLiteralTests.fs @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.ComponentTests.ErrorMessages + +open Xunit +open FSharp.Test.Utilities.Compiler + +module ``Invalid literals`` = + + [] + let ``Using Active Pattern``() = + FSharp """ +let (|A|) x = x + 1 +let [] (A x) = 1 + """ + |> typecheck + |> shouldFail + |> withSingleDiagnostic (Error 3391, Line 3, Col 5, Line 3, Col 22, "A [] declaration cannot use an active pattern for its identifier") diff --git a/tests/FSharp.Compiler.ComponentTests/ErrorMessages/InvalidNumericLiteralTests.fs b/tests/FSharp.Compiler.ComponentTests/ErrorMessages/InvalidNumericLiteralTests.fs index e88cc641b3c..caf05fb29e6 100644 --- a/tests/FSharp.Compiler.ComponentTests/ErrorMessages/InvalidNumericLiteralTests.fs +++ b/tests/FSharp.Compiler.ComponentTests/ErrorMessages/InvalidNumericLiteralTests.fs @@ -5,8 +5,8 @@ namespace FSharp.Compiler.ComponentTests.ErrorMessages open Xunit open FSharp.Test.Utilities open FSharp.Test.Utilities.Compiler -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.AbstractIL.Internal +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.AbstractIL module ``Numeric Literals`` = @@ -59,8 +59,6 @@ module ``Numeric Literals`` = [] let ``1N is invalid numeric literal in FSI``() = - if Utils.runningOnMono then () - else CompilerAssert.RunScriptWithOptions [| "--langversion:5.0"; "--test:ErrorRanges" |] """ let x = 1N diff --git a/tests/FSharp.Compiler.ComponentTests/ErrorMessages/TypeEqualsMissingTests.fs b/tests/FSharp.Compiler.ComponentTests/ErrorMessages/TypeEqualsMissingTests.fs index 70d7beebc92..63a16ff2a71 100644 --- a/tests/FSharp.Compiler.ComponentTests/ErrorMessages/TypeEqualsMissingTests.fs +++ b/tests/FSharp.Compiler.ComponentTests/ErrorMessages/TypeEqualsMissingTests.fs @@ -4,7 +4,7 @@ namespace FSharp.Compiler.ComponentTests.ErrorMessages open Xunit open FSharp.Test.Utilities -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics module ``Type definition missing equals`` = @@ -15,7 +15,7 @@ module ``Type definition missing equals`` = """ type X | A | B """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 3360 (2, 8, 2, 9) "Unexpected token in type definition. Expected '=' after the type 'X'." diff --git a/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj b/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj index fb960abd3ad..b4b0d58df6a 100644 --- a/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj +++ b/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj @@ -2,8 +2,8 @@ - net472;netcoreapp3.1 - netcoreapp3.1 + net472;net5.0 + net5.0 Library true false @@ -21,7 +21,10 @@ + + + @@ -29,7 +32,8 @@ - + + @@ -42,10 +46,12 @@ + + @@ -60,6 +66,7 @@ + @@ -90,7 +97,7 @@ - + diff --git a/tests/FSharp.Compiler.ComponentTests/Language/AttributeCheckingTests.fs b/tests/FSharp.Compiler.ComponentTests/Language/AttributeCheckingTests.fs new file mode 100644 index 00000000000..20b75ea9a36 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/Language/AttributeCheckingTests.fs @@ -0,0 +1,44 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.ComponentTests.AttributeChecking + +open Xunit +open FSharp.Test.Utilities.Compiler + +module AttributeCheckingTests = + + [] + let ``attributes check inherited AllowMultiple`` () = + Fsx """ +open System + +[] +type HttpMethodAttribute() = inherit Attribute() +type HttpGetAttribute() = inherit HttpMethodAttribute() + +[] // this shouldn't error like +[] // this doesn't +type C() = + member _.M() = () + """ + |> ignoreWarnings + |> compile + |> shouldSucceed + + [] + let ``AllowMultiple=false allows adding attribute to both property and getter/setter`` () = + Fsx """ +open System + +[] +type FooAttribute() = inherit Attribute() + +type C() = + [] + member _.Foo + with [] get () = "bar" + and [] set (v: string) = () + """ + |> ignoreWarnings + |> compile + |> shouldSucceed \ No newline at end of file diff --git a/tests/FSharp.Compiler.ComponentTests/Language/CastingTests.fs b/tests/FSharp.Compiler.ComponentTests/Language/CastingTests.fs new file mode 100644 index 00000000000..eea1385a6ae --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/Language/CastingTests.fs @@ -0,0 +1,113 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.ComponentTests + +open Xunit +open FSharp.Test.Utilities.Compiler + +module CastingTests = + + [] + let ``Compile: ValueTuple.Create(1,1) :> IComparable>`` () = + FSharp """ +module One +open System + +let y = ValueTuple.Create(1,1) :> IComparable> +printfn "%A" y + """ + |> ignoreWarnings + |> compile + |> shouldSucceed + + [] + let ``Compile: struct (1,2) :> IComparable>`` () = + FSharp """ +module One +open System + +let y = struct (1,2) :> IComparable> +printfn "%A" y + """ + |> ignoreWarnings + |> compile + |> shouldSucceed + + [] + let ``Compile: let x = struct (1,3); x :> IComparable>`` () = + FSharp """ +module One +open System + +let y = struct (1,3) :> IComparable> +printfn "%A" y + """ + |> ignoreWarnings + |> compile + |> shouldSucceed + + [] + let ``Script: ValueTuple.Create(0,0) :> IComparable>`` () = + Fsx """ +module One +open System + +let y = ValueTuple.Create(1,1) :> IComparable> +printfn "%A" y + """ + |> ignoreWarnings + |> compile + |> shouldSucceed + + [] + let ``Script: struct (1,2) :> IComparable>`` () = + Fsx """ +module One +open System + +let y = struct (0,0) :> IComparable> +printfn "%A" y + """ + |> ignoreWarnings + |> compile + |> shouldSucceed + + [] + let ``Script: let x = struct (1,3); x :> IComparable>`` () = + Fsx """ +module One +open System + +let x = struct (1,3) +let y = x :> IComparable> +printfn "%A" y + """ + |> ignoreWarnings + |> compile + |> shouldSucceed + + [] + let ``Compile: (box (System.ValueTuple.Create(1,2)) :?> System.IComparable>)`` () = + FSharp """ +module One +open System + +let y = (box (System.ValueTuple.Create(1,2)) :?> System.IComparable>) +printfn "%A" y + """ + |> ignoreWarnings + |> compile + |> shouldSucceed + + [] + let ``Script: (box (System.ValueTuple.Create(1,2)) :?> System.IComparable>)`` () = + FSharp """ +module One +open System + +let y = (box (System.ValueTuple.Create(1,2)) :?> System.IComparable>) +printfn "%A" y + """ + |> ignoreWarnings + |> compile + |> shouldSucceed diff --git a/tests/FSharp.Compiler.ComponentTests/Language/ComputationExpressionTests.fs b/tests/FSharp.Compiler.ComponentTests/Language/ComputationExpressionTests.fs index 0b567ee9a9c..95f036d4ca2 100644 --- a/tests/FSharp.Compiler.ComponentTests/Language/ComputationExpressionTests.fs +++ b/tests/FSharp.Compiler.ComponentTests/Language/ComputationExpressionTests.fs @@ -11,9 +11,9 @@ module ComputationExpressionTests = FSharp """ module ComputationExpressionTests type ListBuilder () = - member __.Combine (a: List<'T>, b) = a @ b - member __.Yield x = List.singleton x - member __.Delay expr = expr () : List<'T> + member _.Combine (a: List<'T>, b) = a @ b + member _.Yield x = List.singleton x + member _.Delay expr = expr () : List<'T> let lb = ListBuilder () @@ -28,9 +28,9 @@ let x = lb {1; 2;} FSharp """ module ComputationExpressionTests type ListBuilder () = - member __.Combine (a: List<'T>, b) = a @ b - member __.Yield x = List.singleton x - member __.Delay expr = expr () : List<'T> + member _.Combine (a: List<'T>, b) = a @ b + member _.Yield x = List.singleton x + member _.Delay expr = expr () : List<'T> let lb = ListBuilder () @@ -46,10 +46,10 @@ let x = lb {1; 2;()} FSharp """ module ComputationExpressionTests type ListBuilder () = - member __.Zero () = [] - member __.Combine (a: List<'T>, b) = a @ b - member __.Yield x = List.singleton x - member __.Delay expr = expr () : List<'T> + member _.Zero () = [] + member _.Combine (a: List<'T>, b) = a @ b + member _.Yield x = List.singleton x + member _.Delay expr = expr () : List<'T> let lb = ListBuilder () @@ -64,9 +64,9 @@ let x = lb {1; 2;()} FSharp """ module ComputationExpressionTests type ListBuilder () = - member __.Combine (a: List<'T>, b) = a @ b - member __.Yield x = List.singleton x - member __.Delay expr = expr () : List<'T> + member _.Combine (a: List<'T>, b) = a @ b + member _.Yield x = List.singleton x + member _.Delay expr = expr () : List<'T> let lb = ListBuilder () @@ -81,9 +81,9 @@ let x = lb {1; 2; if true then 3 else 4;} FSharp """ module ComputationExpressionTests type ListBuilder () = - member __.Combine (a: List<'T>, b) = a @ b - member __.Yield x = List.singleton x - member __.Delay expr = expr () : List<'T> + member _.Combine (a: List<'T>, b) = a @ b + member _.Yield x = List.singleton x + member _.Delay expr = expr () : List<'T> let lb = ListBuilder () diff --git a/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs b/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs index a2336eaa053..c1caf715618 100644 --- a/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs +++ b/tests/FSharp.Compiler.ComponentTests/Language/XmlComments.fs @@ -13,14 +13,14 @@ module XmlCommentChecking = /// let x = 1 -/// +/// /// Yo /// Yo module M = /// < let y = 1 - """ + """ |> withXmlCommentChecking |> ignoreWarnings |> compile @@ -39,7 +39,7 @@ module M = /// Return /// the parameter let f a = a - """ + """ |> withXmlCommentChecking |> ignoreWarnings |> compile @@ -55,7 +55,7 @@ module M = /// Return /// the parameter let f a = a - """ + """ |> withXmlCommentChecking |> ignoreWarnings |> compile @@ -74,7 +74,7 @@ module M = /// the parameter /// the parameter let f a = a - """ + """ |> withXmlCommentChecking |> ignoreWarnings |> compile @@ -90,7 +90,7 @@ module M = /// Return /// the parameter let f a = a - """ + """ |> withXmlCommentChecking |> ignoreWarnings |> compile @@ -118,7 +118,7 @@ module M = /// The instance method /// the other parameter member x.OtherM((a,b): (string * string), p2: string) = ((a,b), p2) - """ + """ |> withXmlCommentChecking |> ignoreWarnings |> compile @@ -137,7 +137,7 @@ module M = let _unused = (x1, x2) member x.M(p1: string, p2: string) = (p1, p2) - """ + """ |> withXmlCommentChecking |> ignoreWarnings |> compile @@ -156,7 +156,24 @@ module M = let _unused = (x1, x2) member x.M(p1: string, p2: string) = (p1, p2) - """ + """ + |> withXmlCommentChecking + |> ignoreWarnings + |> compile + |> shouldSucceed + |> withDiagnostics [ ] + + [] + let ``valid parameter names are reported for documented implicit constructor`` () = + Fsx""" + /// The type with an implicit constructor with visibility + /// the first parameter + /// the second parameter + type C (x1: string, x2: string) = + let _unused = (x1, x2) + + member x.M(p1: string, p2: string) = (p1, p2) + """ |> withXmlCommentChecking |> ignoreWarnings |> compile @@ -170,9 +187,23 @@ module M = /// The sender /// The args type C = delegate of sender: obj * args: int -> C - """ + """ |> withXmlCommentChecking |> ignoreWarnings |> compile |> shouldSucceed |> withDiagnostics [ ] + + [] + let ``function parameters use names from as patterns`` () = + Fsx""" + type Thing = Inner of s: string + /// A function with an extracted inner value + /// The innver value to unwrap + let doer ((Inner s) as inner) = ignore s; ignore inner + """ + |> withXmlCommentChecking + |> ignoreWarnings + |> compile + |> shouldSucceed + |> withDiagnostics [ ] \ No newline at end of file diff --git a/tests/FSharp.Compiler.ComponentTests/resources/tests/Conformance/DeclarationElements/LetBindings/UseBindingDiscard01.fs b/tests/FSharp.Compiler.ComponentTests/resources/tests/Conformance/DeclarationElements/LetBindings/UseBindingDiscard01.fs new file mode 100644 index 00000000000..28a6d38806f --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/resources/tests/Conformance/DeclarationElements/LetBindings/UseBindingDiscard01.fs @@ -0,0 +1,6 @@ +// #DeclarationElements #LetBindings +// + +let answer = + use _ = new System.IO.MemoryStream() + 42 diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/CompletionTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/CompletionTests.fs index 89c4cc20116..8355739c4a7 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/CompletionTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/CompletionTests.fs @@ -4,7 +4,7 @@ namespace FSharp.Compiler.Scripting.UnitTests open System open System.Threading.Tasks -open FSharp.Compiler.Scripting +open FSharp.Test.ScriptHelpers open Xunit type CompletionTests() = diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/ConsoleHelpers.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/ConsoleHelpers.fs deleted file mode 100644 index 6df77c83b38..00000000000 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/ConsoleHelpers.fs +++ /dev/null @@ -1,64 +0,0 @@ -namespace FSharp.Compiler.Scripting.UnitTests - -open System -open System.Collections.Generic -open System.IO -open System.Text - -type internal CapturedTextReader() = - inherit TextReader() - let queue = Queue() - member _.ProvideInput(text: string) = - for c in text.ToCharArray() do - queue.Enqueue(c) - override _.Peek() = - if queue.Count > 0 then queue.Peek() |> int else -1 - override _.Read() = - if queue.Count > 0 then queue.Dequeue() |> int else -1 - -type internal RedirectConsoleInput() = - let oldStdIn = Console.In - let newStdIn = new CapturedTextReader() - do Console.SetIn(newStdIn) - member _.ProvideInput(text: string) = - newStdIn.ProvideInput(text) - interface IDisposable with - member __.Dispose() = - Console.SetIn(oldStdIn) - newStdIn.Dispose() - -type internal EventedTextWriter() = - inherit TextWriter() - let sb = StringBuilder() - let lineWritten = Event() - member _.LineWritten = lineWritten.Publish - override _.Encoding = Encoding.UTF8 - override _.Write(c: char) = - if c = '\n' then - let line = - let v = sb.ToString() - if v.EndsWith("\r") then v.Substring(0, v.Length - 1) - else v - sb.Clear() |> ignore - lineWritten.Trigger(line) - else sb.Append(c) |> ignore - -type internal RedirectConsoleOutput() = - let outputProduced = Event() - let errorProduced = Event() - let oldStdOut = Console.Out - let oldStdErr = Console.Error - let newStdOut = new EventedTextWriter() - let newStdErr = new EventedTextWriter() - do newStdOut.LineWritten.Add outputProduced.Trigger - do newStdErr.LineWritten.Add errorProduced.Trigger - do Console.SetOut(newStdOut) - do Console.SetError(newStdErr) - member _.OutputProduced = outputProduced.Publish - member _.ErrorProduced = errorProduced.Publish - interface IDisposable with - member __.Dispose() = - Console.SetOut(oldStdOut) - Console.SetError(oldStdErr) - newStdOut.Dispose() - newStdErr.Dispose() diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerInteractiveTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerInteractiveTests.fs index fcfa3b3b0a3..ade8a343b41 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerInteractiveTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerInteractiveTests.fs @@ -9,11 +9,10 @@ open System.Runtime.InteropServices open System.Threading open FSharp.Compiler.Interactive.Shell -open FSharp.Compiler.Scripting -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Scripting.UnitTests +open FSharp.Compiler.DependencyManager +open FSharp.Compiler.Diagnostics +open FSharp.Test.ScriptHelpers open FSharp.DependencyManager.Nuget -open Microsoft.DotNet.DependencyManager open Internal.Utilities @@ -27,20 +26,20 @@ type scriptHost (?langVersion: LangVersion) = inherit FSharpScript(langVersion=d type DependencyManagerInteractiveTests() = - let getValue ((value: Result), (errors: FSharpErrorInfo[])) = + let getValue ((value: Result), (errors: FSharpDiagnostic[])) = if errors.Length > 0 then failwith <| sprintf "Evaluation returned %d errors:\r\n\t%s" errors.Length (String.Join("\r\n\t", errors)) match value with | Ok(value) -> value | Error ex -> raise ex - let getErrors ((_value: Result), (errors: FSharpErrorInfo[])) = + let getErrors ((_value: Result), (errors: FSharpDiagnostic[])) = errors let ignoreValue = getValue >> ignore [] - member __.``SmokeTest - #r nuget``() = + member _.``SmokeTest - #r nuget``() = let text = """ #r @"nuget:Newtonsoft.Json, Version=9.0.1" 0""" @@ -51,7 +50,7 @@ type DependencyManagerInteractiveTests() = Assert.Equal(0, value.ReflectionValue :?> int) [] - member __.``SmokeTest - #r nuget package not found``() = + member _.``SmokeTest - #r nuget package not found``() = let text = """ #r @"nuget:System.Collections.Immutable.DoesNotExist, version=1.5.0" 0""" @@ -62,13 +61,13 @@ type DependencyManagerInteractiveTests() = (* [] [] - member __.``syntax produces error messages in FSharp 4.7``(code:string, message: string) = + member _.``syntax produces error messages in FSharp 4.7``(code:string, message: string) = use script = new scriptHost() let errors = script.Eval(code) |> getErrors Assert.Contains(message, errors |> Array.map(fun e -> e.Message)) *) [] - member __.``Use Dependency Manager to resolve dependency FSharp.Data``() = + member _.``Use Dependency Manager to resolve dependency FSharp.Data``() = let nativeProbingRoots () = Seq.empty @@ -83,13 +82,13 @@ type DependencyManagerInteractiveTests() = let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") if RuntimeInformation.IsOSPlatform(OSPlatform.Windows) then - let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data"|], reportError, "net472") + let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, "net472") Assert.Equal(true, result.Success) Assert.Equal(1, result.Resolutions |> Seq.length) Assert.Equal(1, result.SourceFiles |> Seq.length) Assert.Equal(2, result.Roots |> Seq.length) - let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data"|], reportError, "netcoreapp3.1") + let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, "net5.0") Assert.Equal(true, result.Success) Assert.Equal(1, result.Resolutions |> Seq.length) Assert.Equal(1, result.SourceFiles |> Seq.length) @@ -97,7 +96,7 @@ type DependencyManagerInteractiveTests() = () [] - member __.``Dependency Manager Reports package root for nuget package with no build artifacts``() = + member _.``Dependency Manager Reports package root for nuget package with no build artifacts``() = let nativeProbingRoots () = Seq.empty @@ -111,7 +110,7 @@ type DependencyManagerInteractiveTests() = let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") - let result = dp.Resolve(idm, ".fsx", [|"r", "Microsoft.Data.Sqlite, 3.1.8"|], reportError, "netcoreapp3.1") + let result = dp.Resolve(idm, ".fsx", [|"r", "Microsoft.Data.Sqlite, 3.1.8"|], reportError, "net5.0") Assert.Equal(true, result.Success) Assert.True((result.Resolutions |> Seq.length) > 1) Assert.Equal(1, result.SourceFiles |> Seq.length) @@ -120,7 +119,7 @@ type DependencyManagerInteractiveTests() = [] - member __.``Dependency add with nonexistent package should fail``() = + member _.``Dependency add with nonexistent package should fail``() = let nativeProbingRoots () = Seq.empty @@ -141,7 +140,7 @@ type DependencyManagerInteractiveTests() = Assert.Equal(0, result.SourceFiles |> Seq.length) Assert.Equal(0, result.Roots |> Seq.length) - let result = dp.Resolve(idm, ".fsx", [|"r", "System.Collections.Immutable.DoesNotExist"|], reportError, "netcoreapp3.1") + let result = dp.Resolve(idm, ".fsx", [|"r", "System.Collections.Immutable.DoesNotExist"|], reportError, "net5.0") Assert.Equal(false, result.Success) Assert.Equal(0, result.Resolutions |> Seq.length) Assert.Equal(0, result.SourceFiles |> Seq.length) @@ -149,8 +148,8 @@ type DependencyManagerInteractiveTests() = () - [] - member __.``Multiple Instances of DependencyProvider should be isolated``() = + [] + member _.``Multiple Instances of DependencyProvider should be isolated``() = let assemblyProbingPaths () = Seq.empty let nativeProbingRoots () = Seq.empty @@ -165,7 +164,7 @@ type DependencyManagerInteractiveTests() = let idm1 = dp1.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") if RuntimeInformation.IsOSPlatform(OSPlatform.Windows) then - let result1 = dp1.Resolve(idm1, ".fsx", [|"r", "FSharp.Data"|], reportError, "net472") + let result1 = dp1.Resolve(idm1, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, "net472") Assert.Equal(true, result1.Success) Assert.Equal(1, result1.Resolutions |> Seq.length) Assert.True((result1.Resolutions |> Seq.head).Contains("/net45/")) @@ -174,7 +173,7 @@ type DependencyManagerInteractiveTests() = Assert.True((result1.Roots |> Seq.head).EndsWith("/fsharp.data/3.3.3/")) Assert.True((result1.Roots |> Seq.last).EndsWith("/microsoft.netframework.referenceassemblies/1.0.0/")) - let result2 = dp1.Resolve(idm1, ".fsx", [|"r", "FSharp.Data, 3.3.3"|], reportError, "netcoreapp3.1") + let result2 = dp1.Resolve(idm1, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, "net5.0") Assert.Equal(true, result2.Success) Assert.Equal(1, result2.Resolutions |> Seq.length) let expected2 = "/netstandard2.0/" @@ -195,7 +194,7 @@ type DependencyManagerInteractiveTests() = Assert.Equal(1, result3.SourceFiles |> Seq.length) Assert.True((result3.Roots |> Seq.head).EndsWith("/system.json/4.6.0/")) - let result4 = dp2.Resolve(idm2, ".fsx", [|"r", "System.Json, Version=4.6.0"|], reportError, "netcoreapp3.1") + let result4 = dp2.Resolve(idm2, ".fsx", [|"r", "System.Json, Version=4.6.0"|], reportError, "net5.0") Assert.Equal(true, result4.Success) Assert.Equal(1, result4.Resolutions |> Seq.length) let expected4 = "/netstandard2.0/" @@ -206,7 +205,7 @@ type DependencyManagerInteractiveTests() = () [] - member __.``Nuget Reference package with dependencies we should get package roots and dependent references``() = + member _.``Nuget Reference package with dependencies we should get package roots and dependent references``() = let nativeProbingRoots () = Seq.empty @@ -231,7 +230,7 @@ type DependencyManagerInteractiveTests() = // Netstandard gets fewer dependencies than desktop, because desktop framework doesn't contain assemblies like System.Memory // Those assemblies must be delivered by nuget for desktop apps - let result2 = dp1.Resolve(idm1, ".fsx", [|"r", "Microsoft.Extensions.Configuration.Abstractions, 3.1.1"|], reportError, "netcoreapp3.1") + let result2 = dp1.Resolve(idm1, ".fsx", [|"r", "Microsoft.Extensions.Configuration.Abstractions, 3.1.1"|], reportError, "net5.0") Assert.Equal(true, result2.Success) Assert.Equal(2, result2.Resolutions |> Seq.length) let expected = "/netcoreapp3.1/" @@ -244,7 +243,7 @@ type DependencyManagerInteractiveTests() = /// Native dll resolution is not implemented on desktop #if NETCOREAPP [] - member __.``Script using TorchSharp``() = + member _.``Script using TorchSharp``() = let text = """ #r "nuget:RestoreSources=https://donsyme.pkgs.visualstudio.com/TorchSharp/_packaging/packages2/nuget/v3/index.json" #r "nuget:libtorch-cpu,0.3.52118" @@ -263,7 +262,7 @@ TorchSharp.Tensor.LongTensor.From([| 0L .. 100L |]).Device [] - member __.``Use Dependency Manager to restore packages with native dependencies, build and run script that depends on the results``() = + member _.``Use Dependency Manager to restore packages with native dependencies, build and run script that depends on the results``() = let packagemanagerlines = [| "r", "Microsoft.ML,version=1.4.0-preview" "r", "Microsoft.ML.AutoML,version=0.16.0-preview" @@ -288,7 +287,7 @@ TorchSharp.Tensor.LongTensor.From([| 0L .. 100L |]).Device let result = use dp = new DependencyProvider(AssemblyResolutionProbe(assemblyProbingPaths), NativeResolutionProbe(nativeProbingRoots)) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") - dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, "netcoreapp3.1") + dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, "net5.0") Assert.True(result.Success, "resolve failed") @@ -359,7 +358,7 @@ printfn ""%A"" result Assert.Equal(123, value.ReflectionValue :?> int32) [] - member __.``Use NativeResolver to resolve native dlls.``() = + member _.``Use NativeResolver to resolve native dlls.``() = let packagemanagerlines = [| "r", "Microsoft.ML,version=1.4.0-preview" "r", "Microsoft.ML.AutoML,version=0.16.0-preview" @@ -384,7 +383,7 @@ printfn ""%A"" result let result = use dp = new DependencyProvider(NativeResolutionProbe(nativeProbingRoots)) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") - dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, "netcoreapp3.1") + dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, "net5.0") Assert.True(result.Success, "resolve failed") @@ -441,7 +440,7 @@ printfn ""%A"" result Assert.Equal(123, value.ReflectionValue :?> int32) [] - member __.``Use AssemblyResolver to resolve assemblies``() = + member _.``Use AssemblyResolver to resolve assemblies``() = let packagemanagerlines = [| "r", "Microsoft.ML,version=1.4.0-preview" "r", "Microsoft.ML.AutoML,version=0.16.0-preview" @@ -465,7 +464,7 @@ printfn ""%A"" result let result = use dp = new DependencyProvider(NativeResolutionProbe(nativeProbingRoots)) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") - dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, "netcoreapp3.1") + dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, "net5.0") Assert.True(result.Success, "resolve failed") @@ -502,7 +501,7 @@ x |> Seq.iter(fun r -> Assert.Equal(123, value.ReflectionValue :?> int32) [] - member __.``Verify that referencing FSharp.Core fails with FSharp Scripts``() = + member _.``Verify that referencing FSharp.Core fails with FSharp Scripts``() = let packagemanagerlines = [| "r", "FSharp.Core,version=4.7.1" |] let reportError = @@ -522,13 +521,13 @@ x |> Seq.iter(fun r -> let result = use dp = new DependencyProvider(NativeResolutionProbe(nativeProbingRoots)) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") - dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, "netcoreapp3.1") + dp.Resolve(idm, ".fsx", packagemanagerlines, reportError, "net5.0") // Expected: error FS3217: PackageManager can not reference the System Package 'FSharp.Core' Assert.False(result.Success, "resolve succeeded but should have failed") [] - member __.``Verify that referencing FSharp.Core succeeds with CSharp Scripts``() = + member _.``Verify that referencing FSharp.Core succeeds with CSharp Scripts``() = let packagemanagerlines = [| "r", "FSharp.Core,version=4.7.1" |] let reportError = @@ -548,13 +547,13 @@ x |> Seq.iter(fun r -> let result = use dp = new DependencyProvider(NativeResolutionProbe(nativeProbingRoots)) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") - dp.Resolve(idm, ".csx", packagemanagerlines, reportError, "netcoreapp3.1") + dp.Resolve(idm, ".csx", packagemanagerlines, reportError, "net5.0") Assert.True(result.Success, "resolve failed but should have succeeded") [] - member __.``Verify that Dispose on DependencyProvider unhooks ResolvingUnmanagedDll event handler``() = + member _.``Verify that Dispose on DependencyProvider unhooks ResolvingUnmanagedDll event handler``() = let mutable found = false let nativeProbingRoots () = @@ -585,13 +584,13 @@ x |> Seq.iter(fun r -> let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") if RuntimeInformation.IsOSPlatform(OSPlatform.Windows) then - let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data"|], reportError, "net472") + let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, "net472") Assert.Equal(true, result.Success) Assert.Equal(1, result.Resolutions |> Seq.length) Assert.Equal(1, result.SourceFiles |> Seq.length) Assert.Equal(2, result.Roots |> Seq.length) - let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data"|], reportError, "netcoreapp3.1") + let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, "net5.0") Assert.Equal(true, result.Success) Assert.Equal(1, result.Resolutions |> Seq.length) Assert.Equal(1, result.SourceFiles |> Seq.length) @@ -600,7 +599,7 @@ x |> Seq.iter(fun r -> [] - member __.``Verify that Dispose on DependencyProvider unhooks ResolvingUnmanagedDll and AssemblyResolver event handler``() = + member _.``Verify that Dispose on DependencyProvider unhooks ResolvingUnmanagedDll and AssemblyResolver event handler``() = let mutable assemblyFound = false let assemblyProbingPaths () = @@ -636,7 +635,7 @@ x |> Seq.iter(fun r -> #endif [] - member __.``Verify that Dispose on AssemblyResolveHandler unhooks AssemblyResolve event handler``() = + member _.``Verify that Dispose on AssemblyResolveHandler unhooks AssemblyResolve event handler``() = let mutable assemblyFound = false let assemblyProbingPaths () = @@ -658,7 +657,7 @@ x |> Seq.iter(fun r -> Assert.False (assemblyFound, "Invoke the assemblyProbingRoots callback -- Error the AssemblyResolve still fired ") [] - member __.``Verify that Dispose cleans up the native paths added``() = + member _.``Verify that Dispose cleans up the native paths added``() = let nativeProbingRoots () = Seq.empty let appendSemiColon (p:string) = @@ -698,7 +697,7 @@ x |> Seq.iter(fun r -> let mutable currentPath:string = null use dp = new DependencyProvider(NativeResolutionProbe(nativeProbingRoots)) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") - let result = dp.Resolve(idm, ".fsx", [|"r", "Microsoft.Data.Sqlite,3.1.7"|], reportError, "netcoreapp3.1") + let result = dp.Resolve(idm, ".fsx", [|"r", "Microsoft.Data.Sqlite,3.1.7"|], reportError, "net5.0") Assert.Equal(true, result.Success) currentPath <- appendSemiColon (Environment.GetEnvironmentVariable("PATH")) finalPath <- appendSemiColon (Environment.GetEnvironmentVariable("PATH")) @@ -708,7 +707,7 @@ x |> Seq.iter(fun r -> () [] - member __.``Verify that #help produces help text for fsi + dependency manager``() = + member _.``Verify that #help produces help text for fsi + dependency manager``() = let expected = [| """ F# Interactive directives:""" """""" @@ -755,7 +754,7 @@ x |> Seq.iter(fun r -> [] - member __.``Verify that #help produces help text for fsi + dependency manager language version preview``() = + member _.``Verify that #help produces help text for fsi + dependency manager language version preview``() = let expected = [| """ F# Interactive directives:""" """""" @@ -804,7 +803,7 @@ x |> Seq.iter(fun r -> [] - member __.``Verify that timeout --- times out and fails``() = + member _.``Verify that timeout --- times out and fails``() = let nativeProbingRoots () = Seq.empty let mutable foundCorrectError = false let mutable foundWrongError = false @@ -814,20 +813,20 @@ x |> Seq.iter(fun r -> let report errorType code message = match errorType with | ErrorReportType.Error -> - if code = 3401 then foundCorrectError <- true + if code = 3217 then foundCorrectError <- true else foundWrongError <- true | ErrorReportType.Warning -> printfn "PackageManagementWarning %d : %s" code message ResolvingErrorReport (report) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") - let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data"|], reportError, "netcoreapp3.1", timeout=0) // Fail in 0 milliseconds + let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"|], reportError, "net5.0", timeout=0) // Fail in 0 milliseconds Assert.Equal(false, result.Success) Assert.Equal(foundCorrectError, true) Assert.Equal(foundWrongError, false) () [] - member __.``Verify that script based timeout overrides api based - timeout on script``() = + member _.``Verify that script based timeout overrides api based - timeout on script``() = let nativeProbingRoots () = Seq.empty let mutable foundCorrectError = false let mutable foundWrongError = false @@ -837,20 +836,20 @@ x |> Seq.iter(fun r -> let report errorType code message = match errorType with | ErrorReportType.Error -> - if code = 3401 then foundCorrectError <- true + if code = 3217 then foundCorrectError <- true else foundWrongError <- true | ErrorReportType.Warning -> printfn "PackageManagementWarning %d : %s" code message ResolvingErrorReport (report) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") - let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data"; "r", "timeout=0"|], reportError, "netcoreapp3.1", null, "", "", "", -1) // Wait forever + let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"; "r", "timeout=0"|], reportError, "net5.0", null, "", "", "", -1) // Wait forever Assert.Equal(false, result.Success) Assert.Equal(foundCorrectError, true) Assert.Equal(foundWrongError, false) () [] - member __.``Verify that script based timeout overrides api based - timeout on api , forever on script``() = + member _.``Verify that script based timeout overrides api based - timeout on api , forever on script``() = let nativeProbingRoots () = Seq.empty let mutable foundCorrectError = false let mutable foundWrongError = false @@ -866,7 +865,7 @@ x |> Seq.iter(fun r -> ResolvingErrorReport (report) let idm = dp.TryFindDependencyManagerByKey(Seq.empty, "", reportError, "nuget") - let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data"; "r", "timeout=none"|], reportError, "netcoreapp3.1", null, "", "", "", 0) // Wait forever + let result = dp.Resolve(idm, ".fsx", [|"r", "FSharp.Data,3.3.3"; "r", "timeout=none"|], reportError, "net5.0", null, "", "", "", -1) // Wait forever Assert.Equal(true, result.Success) Assert.Equal(foundCorrectError, false) Assert.Equal(foundWrongError, false) diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerLineParserTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerLineParserTests.fs index 4ebc8568884..780fc0d5e44 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerLineParserTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/DependencyManagerLineParserTests.fs @@ -20,94 +20,94 @@ type DependencyManagerLineParserTests() = packageReferences.Single() [] - member __.``Binary logging defaults to disabled``() = + member _.``Binary logging defaults to disabled``() = let _, binLogPath, _ = FSharpDependencyManager.parsePackageReference ".fsx" [] Assert.Equal(None, binLogPath) [] - member __.``Binary logging can be set to default path``() = + member _.``Binary logging can be set to default path``() = let binLogPath = parseBinLogPath "bl=true" Assert.Equal(Some (None: string option), binLogPath) [] - member __.``Binary logging can be disabled``() = + member _.``Binary logging can be disabled``() = let binLogPath = parseBinLogPath "bl=false" Assert.Equal(None, binLogPath) [] - member __.``Binary logging can be set to specific location``() = + member _.``Binary logging can be set to specific location``() = let binLogPath = parseBinLogPath "bl=path/to/file.binlog" Assert.Equal(Some(Some "path/to/file.binlog"), binLogPath) [] - member __.``Bare binary log argument isn't parsed as a package name: before``() = + member _.``Bare binary log argument isn't parsed as a package name: before``() = let packageReferences, binLogPath, _ = FSharpDependencyManager.parsePackageReference ".fsx" ["bl, MyPackage"] Assert.Equal("MyPackage", packageReferences.Single().Include) Assert.Equal(Some (None: string option), binLogPath) [] - member __.``Bare binary log argument isn't parsed as a package name: middle``() = + member _.``Bare binary log argument isn't parsed as a package name: middle``() = let packageReferences, binLogPath, _ = FSharpDependencyManager.parsePackageReference ".fsx" ["MyPackage, bl, 1.2.3.4"] Assert.Equal("MyPackage", packageReferences.Single().Include) Assert.Equal("1.2.3.4", packageReferences.Single().Version) Assert.Equal(Some (None: string option), binLogPath) [] - member __.``Bare binary log argument isn't parsed as a package name: after``() = + member _.``Bare binary log argument isn't parsed as a package name: after``() = let packageReferences, binLogPath, _ = FSharpDependencyManager.parsePackageReference ".fsx" ["MyPackage, bl"] Assert.Equal("MyPackage", packageReferences.Single().Include) Assert.Equal(Some (None: string option), binLogPath) [] - member __.``Package named 'bl' can be explicitly referenced``() = + member _.``Package named 'bl' can be explicitly referenced``() = let packageReferences, binLogPath, _ = FSharpDependencyManager.parsePackageReference ".fsx" ["Include=bl"] Assert.Equal("bl", packageReferences.Single().Include) Assert.Equal(None, binLogPath) [] - member __.``Package named 'bl' can be explicitly referenced with binary logging``() = + member _.``Package named 'bl' can be explicitly referenced with binary logging``() = let packageReferences, binLogPath, _ = FSharpDependencyManager.parsePackageReference ".fsx" ["Include=bl,bl"] Assert.Equal("bl", packageReferences.Single().Include) Assert.Equal(Some (None: string option), binLogPath) [] - member __.``Parse explicitly specified package name``() = + member _.``Parse explicitly specified package name``() = let pr = parseSingleReference "Include=MyPackage" Assert.Equal("MyPackage", pr.Include) [] - member __.``Parse implicitly specified package name``() = + member _.``Parse implicitly specified package name``() = let pr = parseSingleReference "MyPackage" Assert.Equal("MyPackage", pr.Include) [] - member __.``Parse version number``() = + member _.``Parse version number``() = let pr = parseSingleReference "MyPackage, Version=1.2.3.4" Assert.Equal("1.2.3.4", pr.Version) [] - member __.``Parse implicitly specified package name and implicitly specified version number``() = + member _.``Parse implicitly specified package name and implicitly specified version number``() = let pr = parseSingleReference "MyPackage, 1.2.3.4" Assert.Equal("MyPackage", pr.Include) Assert.Equal("1.2.3.4", pr.Version) [] - member __.``Parse single restore source``() = + member _.``Parse single restore source``() = let pr = parseSingleReference "MyPackage, RestoreSources=MyRestoreSource" Assert.Equal("MyRestoreSource", pr.RestoreSources) [] - member __.``Parse multiple restore sources``() = + member _.``Parse multiple restore sources``() = let pr = parseSingleReference "MyPackage, RestoreSources=MyRestoreSource1, RestoreSources=MyRestoreSource2" Assert.Equal("MyRestoreSource1;MyRestoreSource2", pr.RestoreSources) [] - member __.``Parse script``() = + member _.``Parse script``() = let pr = parseSingleReference "MyPackage, Script=SomeScript" Assert.Equal("SomeScript", pr.Script) [] - member __.``Include strings that look different but parse the same are reduced to a single item``() = + member _.``Include strings that look different but parse the same are reduced to a single item``() = let prs, _, _ = [ "MyPackage, Version=1.2.3.4" "Include=MyPackage, Version=1.2.3.4" ] @@ -116,28 +116,28 @@ type DependencyManagerLineParserTests() = Assert.Equal("MyPackage", pr.Include) [] - member __.``Timeout none is -1``() = + member _.``Timeout none is -1``() = let _, _, timeout = [ "timeout=none" ] |> FSharpDependencyManager.parsePackageReference ".fsx" Assert.Equal(timeout, Some -1) [] - member __.``Timeout 1000 is 1000``() = + member _.``Timeout 1000 is 1000``() = let _, _, timeout = [ "timeout=1000" ] |> FSharpDependencyManager.parsePackageReference ".fsx" Assert.Equal(timeout, Some 1000) [] - member __.``Timeout 0 is 0``() = + member _.``Timeout 0 is 0``() = let _, _, timeout = [ "timeout=0" ] |> FSharpDependencyManager.parsePackageReference ".fsx" Assert.Equal(timeout, Some 0) [] - member __.``Timeout for many values is the last specified ascending``() = + member _.``Timeout for many values is the last specified ascending``() = let _, _, timeout = [ "timeout=none" "timeout=1" @@ -148,7 +148,7 @@ type DependencyManagerLineParserTests() = Assert.Equal(timeout, Some 100) [] - member __.``Timeout for many values is the last specified descending``() = + member _.``Timeout for many values is the last specified descending``() = let _, _, timeout = [ "timeout=10000" "timeout=1000" @@ -159,7 +159,7 @@ type DependencyManagerLineParserTests() = Assert.Equal(timeout, Some 10) [] - member __.``Timeout invalid : timeout``() = + member _.``Timeout invalid : timeout``() = try [ "timeout" ] |> FSharpDependencyManager.parsePackageReference ".fsx" |> ignore @@ -169,7 +169,7 @@ type DependencyManagerLineParserTests() = | _ -> Assert.True(false, "ArgumentException expected") //Assert.Fail [] - member __.``Timeout invalid timeout=``() = + member _.``Timeout invalid timeout=``() = try [ "timeout=" ] |> FSharpDependencyManager.parsePackageReference ".fsx" |> ignore @@ -179,7 +179,7 @@ type DependencyManagerLineParserTests() = | _ -> Assert.True(false, "ArgumentException expected") //Assert.Fail [] - member __.``Timeout invalid timeout=nonesuch``() = + member _.``Timeout invalid timeout=nonesuch``() = try [ "timeout=nonesuch" ] |> FSharpDependencyManager.parsePackageReference ".fsx" |> ignore @@ -190,7 +190,7 @@ type DependencyManagerLineParserTests() = [] - member __.``Timeout invalid timeout=-20``() = + member _.``Timeout invalid timeout=-20``() = try [ "timeout=-20" ] |> FSharpDependencyManager.parsePackageReference ".fsx" |> ignore diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj index a45c66c348f..d30dd32729c 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj @@ -2,8 +2,8 @@ - net472;netcoreapp3.1 - netcoreapp3.1 + net472;net5.0 + net5.0 Library true xunit @@ -11,9 +11,7 @@ - - @@ -26,10 +24,9 @@ + - - - + diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs index 8deed2f994d..431ac983ec4 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs @@ -10,14 +10,14 @@ open System.Runtime.InteropServices open System.Threading open System.Threading.Tasks open FSharp.Compiler.Interactive.Shell -open FSharp.Compiler.Scripting +open FSharp.Test.ScriptHelpers open Xunit type InteractiveTests() = [] - member __.``Eval object value``() = + member _.``Eval object value``() = use script = new FSharpScript() let opt = script.Eval("1+1") |> getValue let value = opt.Value @@ -25,7 +25,7 @@ type InteractiveTests() = Assert.Equal(2, value.ReflectionValue :?> int) [] - member __.``Declare and eval object value``() = + member _.``Declare and eval object value``() = use script = new FSharpScript() let opt = script.Eval("let x = 1 + 2\r\nx") |> getValue let value = opt.Value @@ -33,7 +33,7 @@ type InteractiveTests() = Assert.Equal(3, value.ReflectionValue :?> int) [] - member __.``Capture console input``() = + member _.``Capture console input``() = use input = new RedirectConsoleInput() use script = new FSharpScript() input.ProvideInput "stdin:1234\r\n" @@ -43,7 +43,7 @@ type InteractiveTests() = Assert.Equal("stdin:1234", downcast value.ReflectionValue) [] - member __.``Capture console output/error``() = + member _.``Capture console output/error``() = use output = new RedirectConsoleOutput() use script = new FSharpScript() use sawOutputSentinel = new ManualResetEvent(false) @@ -55,7 +55,7 @@ type InteractiveTests() = Assert.True(sawErrorSentinel.WaitOne(TimeSpan.FromSeconds(5.0)), "Expected to see error sentinel value written") [] - member __.``Maintain state between submissions``() = + member _.``Maintain state between submissions``() = use script = new FSharpScript() script.Eval("let add x y = x + y") |> ignoreValue let opt = script.Eval("add 2 3") |> getValue @@ -64,7 +64,7 @@ type InteractiveTests() = Assert.Equal(5, downcast value.ReflectionValue) [] - member __.``Assembly reference event successful``() = + member _.``Assembly reference event successful``() = use script = new FSharpScript() let testCode = """ #r "System.dll" @@ -76,7 +76,7 @@ stacktype.Name = "Stack" Assert.Equal(true, downcast value.ReflectionValue) [] - member __.``Assembly reference unsuccessful``() = + member _.``Assembly reference unsuccessful``() = use script = new FSharpScript() let testAssembly = "not-an-assembly-that-can-be-found.dll" let _result, errors = script.Eval(sprintf "#r \"%s\"" testAssembly) @@ -143,7 +143,7 @@ System.Configuration.ConfigurationManager.AppSettings.Item "Environment" <- "LOC [] [] + "input.fsx (1,1)-(1,3) interactive warning Invalid directive '#i '")>] member _.``Script with more #i syntax errors fail``(code, error0, error1) = use script = new FSharpScript() let result, errors = script.Eval(code) @@ -197,7 +197,7 @@ System.Configuration.ConfigurationManager.AppSettings.Item "Environment" <- "LOC /// Native dll resolution is not implemented on desktop #if NETSTANDARD [] - member __.``ML - use assembly with native dependencies``() = + member _.``ML - use assembly with native dependencies``() = let code = @" #r ""nuget:Microsoft.ML,version=1.4.0-preview"" #r ""nuget:Microsoft.ML.AutoML,version=0.16.0-preview"" @@ -243,7 +243,7 @@ printfn ""%A"" result #endif [] - member __.``Eval script with package manager invalid key``() = + member _.``Eval script with package manager invalid key``() = use script = new FSharpScript(additionalArgs=[|"/langversion:preview"|]) let result, _errors = script.Eval(@"#r ""nugt:FSharp.Data""") match result with @@ -251,7 +251,7 @@ printfn ""%A"" result | Error(ex) -> Assert.IsAssignableFrom(typeof, ex) [] - member __.``Eval script with invalid PackageName should fail immediately``() = + member _.``Eval script with invalid PackageName should fail immediately``() = use output = new RedirectConsoleOutput() use script = new FSharpScript(additionalArgs=[|"/langversion:preview"|]) let mutable found = 0 @@ -267,7 +267,7 @@ printfn ""%A"" result Assert.True( errors |> Seq.exists (fun error -> error.Message.Contains("FSharp.Really.Not.A.Package")), "Expect to error containing 'FSharp.Really.Not.A.Package'") [] - member __.``Eval script with invalid PackageName should fail immediately and resolve one time only``() = + member _.``Eval script with invalid PackageName should fail immediately and resolve one time only``() = use output = new RedirectConsoleOutput() use script = new FSharpScript(additionalArgs=[|"/langversion:preview"|]) let mutable foundResolve = 0 @@ -283,7 +283,7 @@ printfn ""%A"" result Assert.Equal(1, (errors |> Seq.filter (fun error -> error.Message.Contains("FSharp.Really.Not.Another.Package")) |> Seq.length)) [] - member __.``ML - use assembly with ref dependencies``() = + member _.``ML - use assembly with ref dependencies``() = let code = """ #r "nuget:Microsoft.ML.OnnxTransformer,1.4.0" #r "nuget:System.Memory,4.5.4" @@ -300,7 +300,7 @@ tInput.Length Assert.Equal(4L, downcast value.ReflectionValue) [] - member __.``System.Device.Gpio - Ensure we reference the runtime version of the assembly``() = + member _.``System.Device.Gpio - Ensure we reference the runtime version of the assembly``() = let code = """ #r "nuget:System.Device.Gpio, 1.0.0" typeof.Assembly.Location @@ -318,7 +318,20 @@ typeof.Assembly.Location () [] - member __.``Simple pinvoke should not be impacted by native resolver``() = + member _.``Reference -- Azure.ResourceManager.Resources``() = + let code = """ +#r "nuget: Azure.Identity, 1.3.0" +#r "nuget: Azure.ResourceManager.Resources, 1.0.0-preview.2" +let creds = Azure.Identity.DefaultAzureCredential() +let client = Azure.ResourceManager.Resources.ResourcesManagementClient("mySubscriptionId", creds) +true""" + use script = new FSharpScript(additionalArgs=[|"/langversion:preview"|]) + let opt = script.Eval(code) |> getValue + let value = opt.Value + Assert.True(true = downcast value.ReflectionValue) + + [] + member _.``Simple pinvoke should not be impacted by native resolver``() = let code = @" open System open System.Runtime.InteropServices diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/TestHelpers.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/TestHelpers.fs deleted file mode 100644 index b0ab7a0eaf1..00000000000 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/TestHelpers.fs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace FSharp.Compiler.Scripting.UnitTests - -open System -open System.IO -open FSharp.Compiler.Interactive.Shell -open FSharp.Compiler.SourceCodeServices - -[] -module TestHelpers = - - let getValue ((value: Result), (errors: FSharpErrorInfo[])) = - if errors.Length > 0 then - failwith <| sprintf "Evaluation returned %d errors:\r\n\t%s" errors.Length (String.Join("\r\n\t", errors)) - match value with - | Ok(value) -> value - | Error ex -> raise ex - - let ignoreValue = getValue >> ignore - - let getTempDir () = - let sysTempDir = Path.GetTempPath() - let customTempDirName = Guid.NewGuid().ToString("D") - let fullDirName = Path.Combine(sysTempDir, customTempDirName) - let dirInfo = Directory.CreateDirectory(fullDirName) - { new Object() with - member __.ToString() = dirInfo.FullName - interface IDisposable with - member __.Dispose() = - dirInfo.Delete(true) - } diff --git a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj index e7d9d79f34d..ec7f2fa2f84 100644 --- a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj +++ b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.Tests.fsproj @@ -2,7 +2,7 @@ Exe - netcoreapp3.1 + net472;net5.0 $(NoWarn);44;75; true false @@ -70,7 +70,7 @@ ParserTests.fs - + Program.fs diff --git a/tests/FSharp.Compiler.Service.Tests/LibraryTestFx.fs b/tests/FSharp.Compiler.Service.Tests/LibraryTestFx.fs index cedeac7da92..cf3db4c5f89 100644 --- a/tests/FSharp.Compiler.Service.Tests/LibraryTestFx.fs +++ b/tests/FSharp.Compiler.Service.Tests/LibraryTestFx.fs @@ -1,11 +1,14 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -module FSharp.Core.UnitTests.LibraryTestFx +module Tests.Service.SurfaceArea.LibraryTestFx open System open System.Collections.Generic open System.IO open System.Reflection +open System.Text.RegularExpressions + +open FSharp.Compiler.IO open NUnit.Framework @@ -17,9 +20,6 @@ let sleep(n : int32) = System.Threading.Thread.Sleep(n) module SurfaceArea = - open System.Reflection - open System - open System.Text.RegularExpressions // gets string form of public surface area for FSharp.CompilerService let private getActual () = @@ -28,7 +28,6 @@ module SurfaceArea = let path = Path.Combine(Path.GetDirectoryName(typeof.Assembly.Location), "FSharp.Compiler.Service.dll") let name = AssemblyName.GetAssemblyName (path) let asm = Assembly.Load(name) - let fsCompilerServiceFullName = asm.FullName // public types only let types = asm.ExportedTypes |> Seq.filter (fun ty -> let ti = ty.GetTypeInfo() in ti.IsPublic || ti.IsNestedPublic) |> Array.ofSeq @@ -39,18 +38,20 @@ module SurfaceArea = let getMembers (t : Type) = let ti = t.GetTypeInfo() let cast (info: #MemberInfo) = (t, info :> MemberInfo) - let isDeclaredInFSharpCompilerService (m:MemberInfo) = m.DeclaringType.Assembly.FullName = fsCompilerServiceFullName seq { - yield! t.GetRuntimeEvents() |> Seq.filter (fun m -> m.AddMethod.IsPublic && m |> isDeclaredInFSharpCompilerService) |> Seq.map cast - yield! t.GetRuntimeProperties() |> Seq.filter (fun m -> m.GetMethod.IsPublic && m |> isDeclaredInFSharpCompilerService) |> Seq.map cast - yield! t.GetRuntimeMethods() |> Seq.filter (fun m -> m.IsPublic && m |> isDeclaredInFSharpCompilerService) |> Seq.map cast - yield! t.GetRuntimeFields() |> Seq.filter (fun m -> m.IsPublic && m |> isDeclaredInFSharpCompilerService) |> Seq.map cast + yield! ti.DeclaredEvents |> Seq.filter (fun m -> m.AddMethod.IsPublic) |> Seq.map cast + yield! ti.DeclaredProperties |> Seq.filter (fun m -> m.GetMethod.IsPublic) |> Seq.map cast + yield! ti.DeclaredMethods |> Seq.filter (fun m -> m.IsPublic) |> Seq.map cast + yield! ti.DeclaredFields |> Seq.filter (fun m -> m.IsPublic) |> Seq.map cast yield! ti.DeclaredConstructors |> Seq.filter (fun m -> m.IsPublic) |> Seq.map cast yield! ti.DeclaredNestedTypes |> Seq.filter (fun ty -> ty.IsNestedPublic) |> Seq.map cast } |> Array.ofSeq - getMembers t - |> Array.map (fun (ty, m) -> sprintf "%s: %s" (ty.ToString()) (m.ToString())) + [| for (ty,m) in getMembers t do + yield sprintf "%s: %s" (ty.ToString()) (m.ToString()) + if not t.IsNested then + yield t.ToString() + |] let actual = types |> Array.collect getTypeMemberStrings @@ -65,7 +66,7 @@ module SurfaceArea = let asm, actualNotNormalized = getActual () let actual = actualNotNormalized |> Seq.map normalize |> Seq.filter (String.IsNullOrWhiteSpace >> not) |> set - + let expected = // Split the "expected" string into individual lines, then normalize it. (normalize expected).Split([|"\r\n"; "\n"; "\r"|], StringSplitOptions.RemoveEmptyEntries) @@ -92,7 +93,7 @@ module SurfaceArea = let workDir = TestContext.CurrentContext.WorkDirectory sprintf "%s\\FSharp.CompilerService.SurfaceArea.%s.txt" workDir platform - System.IO.File.WriteAllText(logFile, String.Join("\r\n", actual)) + FileSystem.OpenFileForWriteShim(logFile).Write(String.Join("\r\n", actual)) // The surface areas don't match; prepare an easily-readable output message. let msg = @@ -104,8 +105,11 @@ module SurfaceArea = Printf.bprintf sb " windiff %s %s" baseline logFile newLine sb newLine sb - sb.AppendLine "To update the baseline run:" |> ignore - Printf.bprintf sb " copy /y %s %s" logFile baseline + sb.AppendLine "To update the baseline copy the contents of this:" |> ignore + Printf.bprintf sb " %s" logFile + newLine sb + sb.AppendLine "into this:" |> ignore + Printf.bprintf sb " %s" baseline newLine sb newLine sb sb.Append "Unexpectedly missing (expected, not actual):" |> ignore diff --git a/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs b/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs index c488d917361..b8b5c504c06 100644 --- a/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs +++ b/tests/FSharp.Compiler.Service.Tests/SurfaceArea.netstandard.fs @@ -1,46 +1,15 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace FSharp.Core.UnitTests.Portable.SurfaceArea +namespace Tests.Service.SurfaceArea -open FSharp.Core.UnitTests.LibraryTestFx +open Tests.Service.SurfaceArea.LibraryTestFx open NUnit.Framework type SurfaceAreaTest() = [] - member this.VerifyArea() = + member _.VerifyArea() = let expected = @" -FSharp.Compiler.AbstractIL.IL+ILAlignment+Tags: Int32 Aligned -FSharp.Compiler.AbstractIL.IL+ILAlignment+Tags: Int32 Unaligned1 -FSharp.Compiler.AbstractIL.IL+ILAlignment+Tags: Int32 Unaligned2 -FSharp.Compiler.AbstractIL.IL+ILAlignment+Tags: Int32 Unaligned4 -FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean Equals(ILAlignment) -FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean IsAligned -FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean IsUnaligned1 -FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean IsUnaligned2 -FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean IsUnaligned4 -FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean get_IsAligned() -FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean get_IsUnaligned1() -FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean get_IsUnaligned2() -FSharp.Compiler.AbstractIL.IL+ILAlignment: Boolean get_IsUnaligned4() -FSharp.Compiler.AbstractIL.IL+ILAlignment: FSharp.Compiler.AbstractIL.IL+ILAlignment+Tags -FSharp.Compiler.AbstractIL.IL+ILAlignment: ILAlignment Aligned -FSharp.Compiler.AbstractIL.IL+ILAlignment: ILAlignment Unaligned1 -FSharp.Compiler.AbstractIL.IL+ILAlignment: ILAlignment Unaligned2 -FSharp.Compiler.AbstractIL.IL+ILAlignment: ILAlignment Unaligned4 -FSharp.Compiler.AbstractIL.IL+ILAlignment: ILAlignment get_Aligned() -FSharp.Compiler.AbstractIL.IL+ILAlignment: ILAlignment get_Unaligned1() -FSharp.Compiler.AbstractIL.IL+ILAlignment: ILAlignment get_Unaligned2() -FSharp.Compiler.AbstractIL.IL+ILAlignment: ILAlignment get_Unaligned4() -FSharp.Compiler.AbstractIL.IL+ILAlignment: Int32 CompareTo(ILAlignment) -FSharp.Compiler.AbstractIL.IL+ILAlignment: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAlignment: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILAlignment: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILAlignment: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAlignment: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILAlignment: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILAlignment: System.String ToString() +FSharp.Compiler.AbstractIL.IL FSharp.Compiler.AbstractIL.IL+ILArgConvention+Tags: Int32 CDecl FSharp.Compiler.AbstractIL.IL+ILArgConvention+Tags: Int32 Default FSharp.Compiler.AbstractIL.IL+ILArgConvention+Tags: Int32 FastCall @@ -87,7 +56,6 @@ FSharp.Compiler.AbstractIL.IL+ILArrayShape: Boolean Equals(ILArrayShape) FSharp.Compiler.AbstractIL.IL+ILArrayShape: Boolean Equals(System.Object) FSharp.Compiler.AbstractIL.IL+ILArrayShape: Boolean Equals(System.Object, System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILArrayShape: ILArrayShape FromRank(Int32) -FSharp.Compiler.AbstractIL.IL+ILArrayShape: ILArrayShape NewILArrayShape(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[System.Int32],Microsoft.FSharp.Core.FSharpOption`1[System.Int32]]]) FSharp.Compiler.AbstractIL.IL+ILArrayShape: ILArrayShape SingleDimensional FSharp.Compiler.AbstractIL.IL+ILArrayShape: ILArrayShape get_SingleDimensional() FSharp.Compiler.AbstractIL.IL+ILArrayShape: Int32 CompareTo(ILArrayShape) @@ -96,48 +64,18 @@ FSharp.Compiler.AbstractIL.IL+ILArrayShape: Int32 CompareTo(System.Object, Syste FSharp.Compiler.AbstractIL.IL+ILArrayShape: Int32 GetHashCode() FSharp.Compiler.AbstractIL.IL+ILArrayShape: Int32 GetHashCode(System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILArrayShape: Int32 Rank -FSharp.Compiler.AbstractIL.IL+ILArrayShape: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILArrayShape: Int32 get_Rank() -FSharp.Compiler.AbstractIL.IL+ILArrayShape: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILArrayShape: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[System.Int32],Microsoft.FSharp.Core.FSharpOption`1[System.Int32]]] Item -FSharp.Compiler.AbstractIL.IL+ILArrayShape: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[System.Int32],Microsoft.FSharp.Core.FSharpOption`1[System.Int32]]] get_Item() FSharp.Compiler.AbstractIL.IL+ILArrayShape: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity+Tags: Int32 Library -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity+Tags: Int32 PlatformAppDomain -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity+Tags: Int32 PlatformProcess -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity+Tags: Int32 PlatformSystem -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity+Tags: Int32 Unspecified FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean Equals(ILAssemblyLongevity) FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean Equals(System.Object) FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean IsLibrary -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean IsPlatformAppDomain -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean IsPlatformProcess -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean IsPlatformSystem -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean IsUnspecified -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean get_IsLibrary() -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean get_IsPlatformAppDomain() -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean get_IsPlatformProcess() -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean get_IsPlatformSystem() -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Boolean get_IsUnspecified() -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity+Tags -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity Library -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity PlatformAppDomain -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity PlatformProcess -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity PlatformSystem -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity Unspecified -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity get_Library() -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity get_PlatformAppDomain() -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity get_PlatformProcess() -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity get_PlatformSystem() -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity get_Unspecified() +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity Default +FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: ILAssemblyLongevity get_Default() FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Int32 CompareTo(ILAssemblyLongevity) FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Int32 CompareTo(System.Object) FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Int32 CompareTo(System.Object, System.Collections.IComparer) FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Int32 GetHashCode() FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILAssemblyManifest: Boolean DisableJitOptimizations FSharp.Compiler.AbstractIL.IL+ILAssemblyManifest: Boolean IgnoreSymbolStoreSequencePoints @@ -194,525 +132,30 @@ FSharp.Compiler.AbstractIL.IL+ILAssemblyRef: System.String Name FSharp.Compiler.AbstractIL.IL+ILAssemblyRef: System.String QualifiedName FSharp.Compiler.AbstractIL.IL+ILAssemblyRef: System.String get_Name() FSharp.Compiler.AbstractIL.IL+ILAssemblyRef: System.String get_QualifiedName() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean Equals(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsSByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsType -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsTypeRef -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsSByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsType() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsTypeRef() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Boolean get_IsUInt64() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: ILType Item1 FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: ILType get_Item1() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Int32 CompareTo(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] Item2 FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] get_Item2() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Array: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean Equals(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsSByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsType -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsTypeRef -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean IsUInt64 FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean Item -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsSByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsType() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsTypeRef() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_IsUInt64() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Boolean get_Item() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Int32 CompareTo(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Bool: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean Equals(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsSByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsType -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsTypeRef -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsSByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsType() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsTypeRef() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Boolean get_IsUInt64() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Byte Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Byte get_Item() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Int32 CompareTo(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Byte: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean Equals(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsSByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsType -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsTypeRef -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsSByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsType() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsTypeRef() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Boolean get_IsUInt64() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Char Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Char get_Item() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Int32 CompareTo(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Char: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean Equals(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsSByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsType -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsTypeRef -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsSByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsType() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsTypeRef() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Boolean get_IsUInt64() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Double Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Double get_Item() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Int32 CompareTo(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Double: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean Equals(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsSByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsType -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsTypeRef -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsSByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsType() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsTypeRef() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Boolean get_IsUInt64() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Int16 Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Int16 get_Item() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Int32 CompareTo(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int16: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean Equals(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsSByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsType -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsTypeRef -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsSByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsType() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsTypeRef() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Int32 CompareTo(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Int32 GetHashCode(System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Int32 Item -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Int32 get_Item() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int32: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean Equals(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsSByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsType -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsTypeRef -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsSByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsType() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsTypeRef() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Int32 CompareTo(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Int64 Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: Int64 get_Item() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Int64: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean Equals(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsSByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsType -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsTypeRef -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsSByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsType() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsTypeRef() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Int32 CompareTo(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: SByte Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: SByte get_Item() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+SByte: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean Equals(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsSByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsType -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsTypeRef -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsSByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsType() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsTypeRef() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Int32 CompareTo(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Single Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: Single get_Item() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Single: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean Equals(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsSByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsType -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsTypeRef -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsSByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsType() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsTypeRef() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Int32 CompareTo(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Microsoft.FSharp.Core.FSharpOption`1[System.String] Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Item() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+String: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Tags: Int32 Array FSharp.Compiler.AbstractIL.IL+ILAttribElem+Tags: Int32 Bool FSharp.Compiler.AbstractIL.IL+ILAttribElem+Tags: Int32 Byte @@ -730,239 +173,14 @@ FSharp.Compiler.AbstractIL.IL+ILAttribElem+Tags: Int32 TypeRef FSharp.Compiler.AbstractIL.IL+ILAttribElem+Tags: Int32 UInt16 FSharp.Compiler.AbstractIL.IL+ILAttribElem+Tags: Int32 UInt32 FSharp.Compiler.AbstractIL.IL+ILAttribElem+Tags: Int32 UInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean Equals(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsSByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsType -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsTypeRef -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsSByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsType() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsTypeRef() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Int32 CompareTo(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILType] Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILType] get_Item() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+Type: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean Equals(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsSByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsType -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsTypeRef -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsSByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsType() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsTypeRef() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Int32 CompareTo(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILTypeRef] Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILTypeRef] get_Item() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+TypeRef: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean Equals(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsSByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsType -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsTypeRef -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsSByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsType() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsTypeRef() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Int32 CompareTo(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: UInt16 Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt16: UInt16 get_Item() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean Equals(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsSByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsType -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsTypeRef -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsSByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsType() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsTypeRef() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Int32 CompareTo(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: UInt32 Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt32: UInt32 get_Item() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean Equals(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsSByte -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsType -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsTypeRef -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsSByte() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsType() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsTypeRef() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Int32 CompareTo(ILAttribElem) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: UInt64 Item FSharp.Compiler.AbstractIL.IL+ILAttribElem+UInt64: UInt64 get_Item() FSharp.Compiler.AbstractIL.IL+ILAttribElem: Boolean Equals(ILAttribElem) @@ -1045,58 +263,18 @@ FSharp.Compiler.AbstractIL.IL+ILAttribElem: Int32 GetHashCode(System.Collections FSharp.Compiler.AbstractIL.IL+ILAttribElem: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILAttribElem: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILAttribElem: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Boolean Equals(ILAttribute) -FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Boolean IsDecoded -FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Boolean IsEncoded -FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Boolean get_IsDecoded() -FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Boolean get_IsEncoded() -FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: ILAttribute WithMethod(ILMethodSpec) -FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: ILMethodSpec Method -FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: ILMethodSpec get_Method() FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: ILMethodSpec get_method() FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: ILMethodSpec method -FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Int32 CompareTo(ILAttribute) -FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] Elements FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] fixedArgs -FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] get_Elements() FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] get_fixedArgs() FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`4[System.String,FSharp.Compiler.AbstractIL.IL+ILType,System.Boolean,FSharp.Compiler.AbstractIL.IL+ILAttribElem]] get_namedArgs() FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`4[System.String,FSharp.Compiler.AbstractIL.IL+ILType,System.Boolean,FSharp.Compiler.AbstractIL.IL+ILAttribElem]] namedArgs -FSharp.Compiler.AbstractIL.IL+ILAttribute+Decoded: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Boolean Equals(ILAttribute) -FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Boolean IsDecoded -FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Boolean IsEncoded -FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Boolean get_IsDecoded() -FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Boolean get_IsEncoded() FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Byte[] data FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Byte[] get_data() -FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: ILAttribute WithMethod(ILMethodSpec) -FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: ILMethodSpec Method -FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: ILMethodSpec get_Method() FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: ILMethodSpec get_method() FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: ILMethodSpec method -FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Int32 CompareTo(ILAttribute) -FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] Elements FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] elements -FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] get_Elements() FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] get_elements() -FSharp.Compiler.AbstractIL.IL+ILAttribute+Encoded: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILAttribute+Tags: Int32 Decoded FSharp.Compiler.AbstractIL.IL+ILAttribute+Tags: Int32 Encoded FSharp.Compiler.AbstractIL.IL+ILAttribute: Boolean Equals(ILAttribute) @@ -1111,9 +289,6 @@ FSharp.Compiler.AbstractIL.IL+ILAttribute: FSharp.Compiler.AbstractIL.IL+ILAttri FSharp.Compiler.AbstractIL.IL+ILAttribute: FSharp.Compiler.AbstractIL.IL+ILAttribute+Tags FSharp.Compiler.AbstractIL.IL+ILAttribute: ILAttribute NewDecoded(ILMethodSpec, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`4[System.String,FSharp.Compiler.AbstractIL.IL+ILType,System.Boolean,FSharp.Compiler.AbstractIL.IL+ILAttribElem]]) FSharp.Compiler.AbstractIL.IL+ILAttribute: ILAttribute NewEncoded(ILMethodSpec, Byte[], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem]) -FSharp.Compiler.AbstractIL.IL+ILAttribute: ILAttribute WithMethod(ILMethodSpec) -FSharp.Compiler.AbstractIL.IL+ILAttribute: ILMethodSpec Method -FSharp.Compiler.AbstractIL.IL+ILAttribute: ILMethodSpec get_Method() FSharp.Compiler.AbstractIL.IL+ILAttribute: Int32 CompareTo(ILAttribute) FSharp.Compiler.AbstractIL.IL+ILAttribute: Int32 CompareTo(System.Object) FSharp.Compiler.AbstractIL.IL+ILAttribute: Int32 CompareTo(System.Object, System.Collections.IComparer) @@ -1121,130 +296,16 @@ FSharp.Compiler.AbstractIL.IL+ILAttribute: Int32 GetHashCode() FSharp.Compiler.AbstractIL.IL+ILAttribute: Int32 GetHashCode(System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILAttribute: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILAttribute: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILAttribute: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] Elements -FSharp.Compiler.AbstractIL.IL+ILAttribute: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem] get_Elements() FSharp.Compiler.AbstractIL.IL+ILAttribute: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILAttributes: ILAttribute[] AsArray FSharp.Compiler.AbstractIL.IL+ILAttributes: ILAttribute[] get_AsArray() FSharp.Compiler.AbstractIL.IL+ILAttributes: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribute] AsList FSharp.Compiler.AbstractIL.IL+ILAttributes: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribute] get_AsList() FSharp.Compiler.AbstractIL.IL+ILAttributesStored: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_I -FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_I1 -FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_I2 -FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_I4 -FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_I8 -FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_R -FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_R4 -FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_R8 -FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_REF -FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_U -FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_U1 -FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_U2 -FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_U4 -FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags: Int32 DT_U8 -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean Equals(ILBasicType) -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_I -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_I1 -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_I2 -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_I4 -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_I8 -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_R -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_R4 -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_R8 -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_REF -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_U -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_U1 -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_U2 -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_U4 -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean IsDT_U8 -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_I() -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_I1() -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_I2() -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_I4() -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_I8() -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_R() -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_R4() -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_R8() -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_REF() -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_U() -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_U1() -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_U2() -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_U4() -FSharp.Compiler.AbstractIL.IL+ILBasicType: Boolean get_IsDT_U8() -FSharp.Compiler.AbstractIL.IL+ILBasicType: FSharp.Compiler.AbstractIL.IL+ILBasicType+Tags -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_I -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_I1 -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_I2 -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_I4 -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_I8 -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_R -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_R4 -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_R8 -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_REF -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_U -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_U1 -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_U2 -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_U4 -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType DT_U8 -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_I() -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_I1() -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_I2() -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_I4() -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_I8() -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_R() -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_R4() -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_R8() -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_REF() -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_U() -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_U1() -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_U2() -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_U4() -FSharp.Compiler.AbstractIL.IL+ILBasicType: ILBasicType get_DT_U8() -FSharp.Compiler.AbstractIL.IL+ILBasicType: Int32 CompareTo(ILBasicType) -FSharp.Compiler.AbstractIL.IL+ILBasicType: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILBasicType: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILBasicType: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILBasicType: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILBasicType: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILBasicType: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILBasicType: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILBoxity+Tags: Int32 AsObject -FSharp.Compiler.AbstractIL.IL+ILBoxity+Tags: Int32 AsValue -FSharp.Compiler.AbstractIL.IL+ILBoxity: Boolean Equals(ILBoxity) -FSharp.Compiler.AbstractIL.IL+ILBoxity: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILBoxity: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILBoxity: Boolean IsAsObject -FSharp.Compiler.AbstractIL.IL+ILBoxity: Boolean IsAsValue -FSharp.Compiler.AbstractIL.IL+ILBoxity: Boolean get_IsAsObject() -FSharp.Compiler.AbstractIL.IL+ILBoxity: Boolean get_IsAsValue() -FSharp.Compiler.AbstractIL.IL+ILBoxity: FSharp.Compiler.AbstractIL.IL+ILBoxity+Tags -FSharp.Compiler.AbstractIL.IL+ILBoxity: ILBoxity AsObject -FSharp.Compiler.AbstractIL.IL+ILBoxity: ILBoxity AsValue -FSharp.Compiler.AbstractIL.IL+ILBoxity: ILBoxity get_AsObject() -FSharp.Compiler.AbstractIL.IL+ILBoxity: ILBoxity get_AsValue() -FSharp.Compiler.AbstractIL.IL+ILBoxity: Int32 CompareTo(ILBoxity) -FSharp.Compiler.AbstractIL.IL+ILBoxity: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILBoxity: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILBoxity: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILBoxity: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILBoxity: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILBoxity: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILBoxity: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILCallingConv: Boolean Equals(ILCallingConv) FSharp.Compiler.AbstractIL.IL+ILCallingConv: Boolean Equals(System.Object) FSharp.Compiler.AbstractIL.IL+ILCallingConv: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILCallingConv: Boolean IsInstance -FSharp.Compiler.AbstractIL.IL+ILCallingConv: Boolean IsInstanceExplicit -FSharp.Compiler.AbstractIL.IL+ILCallingConv: Boolean IsStatic -FSharp.Compiler.AbstractIL.IL+ILCallingConv: Boolean get_IsInstance() -FSharp.Compiler.AbstractIL.IL+ILCallingConv: Boolean get_IsInstanceExplicit() -FSharp.Compiler.AbstractIL.IL+ILCallingConv: Boolean get_IsStatic() -FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILArgConvention BasicConv FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILArgConvention Item2 -FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILArgConvention get_BasicConv() FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILArgConvention get_Item2() FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILCallingConv Instance FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILCallingConv NewCallconv(ILThisConvention, ILArgConvention) @@ -1252,9 +313,7 @@ FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILCallingConv Static FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILCallingConv get_Instance() FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILCallingConv get_Static() FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILThisConvention Item1 -FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILThisConvention ThisConv FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILThisConvention get_Item1() -FSharp.Compiler.AbstractIL.IL+ILCallingConv: ILThisConvention get_ThisConv() FSharp.Compiler.AbstractIL.IL+ILCallingConv: Int32 CompareTo(ILCallingConv) FSharp.Compiler.AbstractIL.IL+ILCallingConv: Int32 CompareTo(System.Object) FSharp.Compiler.AbstractIL.IL+ILCallingConv: Int32 CompareTo(System.Object, System.Collections.IComparer) @@ -1279,204 +338,6 @@ FSharp.Compiler.AbstractIL.IL+ILCallingSignature: Microsoft.FSharp.Collections.F FSharp.Compiler.AbstractIL.IL+ILCallingSignature: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] get_ArgTypes() FSharp.Compiler.AbstractIL.IL+ILCallingSignature: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILCallingSignature: Void .ctor(ILCallingConv, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType) -FSharp.Compiler.AbstractIL.IL+ILCode: ILInstr[] Instrs -FSharp.Compiler.AbstractIL.IL+ILCode: ILInstr[] get_Instrs() -FSharp.Compiler.AbstractIL.IL+ILCode: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILExceptionSpec] Exceptions -FSharp.Compiler.AbstractIL.IL+ILCode: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILExceptionSpec] get_Exceptions() -FSharp.Compiler.AbstractIL.IL+ILCode: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo] Locals -FSharp.Compiler.AbstractIL.IL+ILCode: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo] get_Locals() -FSharp.Compiler.AbstractIL.IL+ILCode: System.Collections.Generic.Dictionary`2[System.Int32,System.Int32] Labels -FSharp.Compiler.AbstractIL.IL+ILCode: System.Collections.Generic.Dictionary`2[System.Int32,System.Int32] get_Labels() -FSharp.Compiler.AbstractIL.IL+ILCode: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILCode: Void .ctor(System.Collections.Generic.Dictionary`2[System.Int32,System.Int32], ILInstr[], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILExceptionSpec], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo]) -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_beq -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_bge -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_bge_un -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_bgt -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_bgt_un -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_ble -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_ble_un -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_blt -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_blt_un -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_bne_un -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_brfalse -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags: Int32 BI_brtrue -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean Equals(ILComparisonInstr) -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_beq -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_bge -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_bge_un -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_bgt -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_bgt_un -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_ble -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_ble_un -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_blt -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_blt_un -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_bne_un -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_brfalse -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean IsBI_brtrue -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_beq() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_bge() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_bge_un() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_bgt() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_bgt_un() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_ble() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_ble_un() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_blt() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_blt_un() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_bne_un() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_brfalse() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Boolean get_IsBI_brtrue() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: FSharp.Compiler.AbstractIL.IL+ILComparisonInstr+Tags -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_beq -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_bge -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_bge_un -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_bgt -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_bgt_un -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_ble -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_ble_un -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_blt -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_blt_un -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_bne_un -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_brfalse -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr BI_brtrue -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_beq() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_bge() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_bge_un() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_bgt() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_bgt_un() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_ble() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_ble_un() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_blt() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_blt_un() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_bne_un() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_brfalse() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: ILComparisonInstr get_BI_brtrue() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Int32 CompareTo(ILComparisonInstr) -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILComparisonInstr: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean Equals(ILConst) -FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean IsI4 -FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean IsI8 -FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean IsR4 -FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean IsR8 -FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean get_IsI4() -FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean get_IsI8() -FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean get_IsR4() -FSharp.Compiler.AbstractIL.IL+ILConst+I4: Boolean get_IsR8() -FSharp.Compiler.AbstractIL.IL+ILConst+I4: Int32 CompareTo(ILConst) -FSharp.Compiler.AbstractIL.IL+ILConst+I4: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILConst+I4: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILConst+I4: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILConst+I4: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILConst+I4: Int32 Item -FSharp.Compiler.AbstractIL.IL+ILConst+I4: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILConst+I4: Int32 get_Item() -FSharp.Compiler.AbstractIL.IL+ILConst+I4: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILConst+I4: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean Equals(ILConst) -FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean IsI4 -FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean IsI8 -FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean IsR4 -FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean IsR8 -FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean get_IsI4() -FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean get_IsI8() -FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean get_IsR4() -FSharp.Compiler.AbstractIL.IL+ILConst+I8: Boolean get_IsR8() -FSharp.Compiler.AbstractIL.IL+ILConst+I8: Int32 CompareTo(ILConst) -FSharp.Compiler.AbstractIL.IL+ILConst+I8: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILConst+I8: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILConst+I8: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILConst+I8: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILConst+I8: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILConst+I8: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILConst+I8: Int64 Item -FSharp.Compiler.AbstractIL.IL+ILConst+I8: Int64 get_Item() -FSharp.Compiler.AbstractIL.IL+ILConst+I8: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean Equals(ILConst) -FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean IsI4 -FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean IsI8 -FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean IsR4 -FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean IsR8 -FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean get_IsI4() -FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean get_IsI8() -FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean get_IsR4() -FSharp.Compiler.AbstractIL.IL+ILConst+R4: Boolean get_IsR8() -FSharp.Compiler.AbstractIL.IL+ILConst+R4: Int32 CompareTo(ILConst) -FSharp.Compiler.AbstractIL.IL+ILConst+R4: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILConst+R4: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILConst+R4: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILConst+R4: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILConst+R4: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILConst+R4: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILConst+R4: Single Item -FSharp.Compiler.AbstractIL.IL+ILConst+R4: Single get_Item() -FSharp.Compiler.AbstractIL.IL+ILConst+R4: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean Equals(ILConst) -FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean IsI4 -FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean IsI8 -FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean IsR4 -FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean IsR8 -FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean get_IsI4() -FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean get_IsI8() -FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean get_IsR4() -FSharp.Compiler.AbstractIL.IL+ILConst+R8: Boolean get_IsR8() -FSharp.Compiler.AbstractIL.IL+ILConst+R8: Double Item -FSharp.Compiler.AbstractIL.IL+ILConst+R8: Double get_Item() -FSharp.Compiler.AbstractIL.IL+ILConst+R8: Int32 CompareTo(ILConst) -FSharp.Compiler.AbstractIL.IL+ILConst+R8: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILConst+R8: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILConst+R8: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILConst+R8: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILConst+R8: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILConst+R8: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILConst+R8: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILConst+Tags: Int32 I4 -FSharp.Compiler.AbstractIL.IL+ILConst+Tags: Int32 I8 -FSharp.Compiler.AbstractIL.IL+ILConst+Tags: Int32 R4 -FSharp.Compiler.AbstractIL.IL+ILConst+Tags: Int32 R8 -FSharp.Compiler.AbstractIL.IL+ILConst: Boolean Equals(ILConst) -FSharp.Compiler.AbstractIL.IL+ILConst: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILConst: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILConst: Boolean IsI4 -FSharp.Compiler.AbstractIL.IL+ILConst: Boolean IsI8 -FSharp.Compiler.AbstractIL.IL+ILConst: Boolean IsR4 -FSharp.Compiler.AbstractIL.IL+ILConst: Boolean IsR8 -FSharp.Compiler.AbstractIL.IL+ILConst: Boolean get_IsI4() -FSharp.Compiler.AbstractIL.IL+ILConst: Boolean get_IsI8() -FSharp.Compiler.AbstractIL.IL+ILConst: Boolean get_IsR4() -FSharp.Compiler.AbstractIL.IL+ILConst: Boolean get_IsR8() -FSharp.Compiler.AbstractIL.IL+ILConst: FSharp.Compiler.AbstractIL.IL+ILConst+I4 -FSharp.Compiler.AbstractIL.IL+ILConst: FSharp.Compiler.AbstractIL.IL+ILConst+I8 -FSharp.Compiler.AbstractIL.IL+ILConst: FSharp.Compiler.AbstractIL.IL+ILConst+R4 -FSharp.Compiler.AbstractIL.IL+ILConst: FSharp.Compiler.AbstractIL.IL+ILConst+R8 -FSharp.Compiler.AbstractIL.IL+ILConst: FSharp.Compiler.AbstractIL.IL+ILConst+Tags -FSharp.Compiler.AbstractIL.IL+ILConst: ILConst NewI4(Int32) -FSharp.Compiler.AbstractIL.IL+ILConst: ILConst NewI8(Int64) -FSharp.Compiler.AbstractIL.IL+ILConst: ILConst NewR4(Single) -FSharp.Compiler.AbstractIL.IL+ILConst: ILConst NewR8(Double) -FSharp.Compiler.AbstractIL.IL+ILConst: Int32 CompareTo(ILConst) -FSharp.Compiler.AbstractIL.IL+ILConst: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILConst: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILConst: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILConst: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILConst: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILConst: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILConst: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILDefaultPInvokeEncoding+Tags: Int32 Ansi FSharp.Compiler.AbstractIL.IL+ILDefaultPInvokeEncoding+Tags: Int32 Auto FSharp.Compiler.AbstractIL.IL+ILDefaultPInvokeEncoding+Tags: Int32 Unicode @@ -1504,27 +365,12 @@ FSharp.Compiler.AbstractIL.IL+ILDefaultPInvokeEncoding: Int32 GetHashCode(System FSharp.Compiler.AbstractIL.IL+ILDefaultPInvokeEncoding: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILDefaultPInvokeEncoding: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILDefaultPInvokeEncoding: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Boolean Equals(ILEnumInfo) -FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILEnumInfo: ILType enumType -FSharp.Compiler.AbstractIL.IL+ILEnumInfo: ILType get_enumType() -FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Int32 CompareTo(ILEnumInfo) -FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.AbstractIL.IL+ILFieldInit]] enumValues -FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.AbstractIL.IL+ILFieldInit]] get_enumValues() -FSharp.Compiler.AbstractIL.IL+ILEnumInfo: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILEnumInfo: Void .ctor(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.AbstractIL.IL+ILFieldInit]], ILType) FSharp.Compiler.AbstractIL.IL+ILEventDef: Boolean IsRTSpecialName FSharp.Compiler.AbstractIL.IL+ILEventDef: Boolean IsSpecialName FSharp.Compiler.AbstractIL.IL+ILEventDef: Boolean get_IsRTSpecialName() FSharp.Compiler.AbstractIL.IL+ILEventDef: Boolean get_IsSpecialName() FSharp.Compiler.AbstractIL.IL+ILEventDef: ILAttributes CustomAttrs FSharp.Compiler.AbstractIL.IL+ILEventDef: ILAttributes get_CustomAttrs() -FSharp.Compiler.AbstractIL.IL+ILEventDef: ILEventDef With(Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILType]], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.EventAttributes], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef]], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILAttributes]) FSharp.Compiler.AbstractIL.IL+ILEventDef: ILMethodRef AddMethod FSharp.Compiler.AbstractIL.IL+ILEventDef: ILMethodRef RemoveMethod FSharp.Compiler.AbstractIL.IL+ILEventDef: ILMethodRef get_AddMethod() @@ -1541,151 +387,7 @@ FSharp.Compiler.AbstractIL.IL+ILEventDef: System.String Name FSharp.Compiler.AbstractIL.IL+ILEventDef: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILEventDef: System.String get_Name() FSharp.Compiler.AbstractIL.IL+ILEventDef: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILType], System.String, System.Reflection.EventAttributes, ILMethodRef, ILMethodRef, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef], ILAttributes) -FSharp.Compiler.AbstractIL.IL+ILEventDef: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILType], System.String, System.Reflection.EventAttributes, ILMethodRef, ILMethodRef, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef], ILAttributesStored, Int32) -FSharp.Compiler.AbstractIL.IL+ILEventDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILEventDef] AsList -FSharp.Compiler.AbstractIL.IL+ILEventDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILEventDef] LookupByName(System.String) -FSharp.Compiler.AbstractIL.IL+ILEventDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILEventDef] get_AsList() FSharp.Compiler.AbstractIL.IL+ILEventDefs: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILEventRef: Boolean Equals(ILEventRef) -FSharp.Compiler.AbstractIL.IL+ILEventRef: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILEventRef: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILEventRef: ILEventRef Create(ILTypeRef, System.String) -FSharp.Compiler.AbstractIL.IL+ILEventRef: ILTypeRef DeclaringTypeRef -FSharp.Compiler.AbstractIL.IL+ILEventRef: ILTypeRef get_DeclaringTypeRef() -FSharp.Compiler.AbstractIL.IL+ILEventRef: Int32 CompareTo(ILEventRef) -FSharp.Compiler.AbstractIL.IL+ILEventRef: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILEventRef: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILEventRef: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILEventRef: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILEventRef: System.String Name -FSharp.Compiler.AbstractIL.IL+ILEventRef: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILEventRef: System.String get_Name() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean Equals(ILExceptionClause) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean IsFault -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean IsFilterCatch -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean IsFinally -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean IsTypeCatch -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean get_IsFault() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean get_IsFilterCatch() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean get_IsFinally() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Boolean get_IsTypeCatch() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Int32 CompareTo(ILExceptionClause) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: System.Tuple`2[System.Int32,System.Int32] Item -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault: System.Tuple`2[System.Int32,System.Int32] get_Item() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean Equals(ILExceptionClause) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean IsFault -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean IsFilterCatch -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean IsFinally -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean IsTypeCatch -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean get_IsFault() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean get_IsFilterCatch() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean get_IsFinally() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Boolean get_IsTypeCatch() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Int32 CompareTo(ILExceptionClause) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: System.Tuple`2[System.Int32,System.Int32] filterRange -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: System.Tuple`2[System.Int32,System.Int32] handlerRange -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: System.Tuple`2[System.Int32,System.Int32] get_filterRange() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch: System.Tuple`2[System.Int32,System.Int32] get_handlerRange() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean Equals(ILExceptionClause) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean IsFault -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean IsFilterCatch -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean IsFinally -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean IsTypeCatch -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean get_IsFault() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean get_IsFilterCatch() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean get_IsFinally() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Boolean get_IsTypeCatch() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Int32 CompareTo(ILExceptionClause) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: System.Tuple`2[System.Int32,System.Int32] Item -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally: System.Tuple`2[System.Int32,System.Int32] get_Item() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Tags: Int32 Fault -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Tags: Int32 FilterCatch -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Tags: Int32 Finally -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Tags: Int32 TypeCatch -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean Equals(ILExceptionClause) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean IsFault -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean IsFilterCatch -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean IsFinally -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean IsTypeCatch -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean get_IsFault() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean get_IsFilterCatch() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean get_IsFinally() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Boolean get_IsTypeCatch() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: ILType Item1 -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: ILType get_Item1() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Int32 CompareTo(ILExceptionClause) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: System.Tuple`2[System.Int32,System.Int32] Item2 -FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch: System.Tuple`2[System.Int32,System.Int32] get_Item2() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean Equals(ILExceptionClause) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean IsFault -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean IsFilterCatch -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean IsFinally -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean IsTypeCatch -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean get_IsFault() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean get_IsFilterCatch() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean get_IsFinally() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Boolean get_IsTypeCatch() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Fault -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: FSharp.Compiler.AbstractIL.IL+ILExceptionClause+FilterCatch -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Finally -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: FSharp.Compiler.AbstractIL.IL+ILExceptionClause+Tags -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: FSharp.Compiler.AbstractIL.IL+ILExceptionClause+TypeCatch -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: ILExceptionClause NewFault(System.Tuple`2[System.Int32,System.Int32]) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: ILExceptionClause NewFilterCatch(System.Tuple`2[System.Int32,System.Int32], System.Tuple`2[System.Int32,System.Int32]) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: ILExceptionClause NewFinally(System.Tuple`2[System.Int32,System.Int32]) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: ILExceptionClause NewTypeCatch(ILType, System.Tuple`2[System.Int32,System.Int32]) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Int32 CompareTo(ILExceptionClause) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILExceptionClause: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILExceptionSpec: ILExceptionClause Clause -FSharp.Compiler.AbstractIL.IL+ILExceptionSpec: ILExceptionClause get_Clause() -FSharp.Compiler.AbstractIL.IL+ILExceptionSpec: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILExceptionSpec: System.Tuple`2[System.Int32,System.Int32] Range -FSharp.Compiler.AbstractIL.IL+ILExceptionSpec: System.Tuple`2[System.Int32,System.Int32] get_Range() -FSharp.Compiler.AbstractIL.IL+ILExceptionSpec: Void .ctor(System.Tuple`2[System.Int32,System.Int32], ILExceptionClause) FSharp.Compiler.AbstractIL.IL+ILExportedTypeOrForwarder: Boolean IsForwarder FSharp.Compiler.AbstractIL.IL+ILExportedTypeOrForwarder: Boolean get_IsForwarder() FSharp.Compiler.AbstractIL.IL+ILExportedTypeOrForwarder: ILAttributes CustomAttrs @@ -1711,9 +413,6 @@ FSharp.Compiler.AbstractIL.IL+ILExportedTypesAndForwarders: Boolean Equals(Syste FSharp.Compiler.AbstractIL.IL+ILExportedTypesAndForwarders: Boolean Equals(System.Object, System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILExportedTypesAndForwarders: Int32 GetHashCode() FSharp.Compiler.AbstractIL.IL+ILExportedTypesAndForwarders: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILExportedTypesAndForwarders: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILExportedTypeOrForwarder] AsList -FSharp.Compiler.AbstractIL.IL+ILExportedTypesAndForwarders: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILExportedTypeOrForwarder] get_AsList() -FSharp.Compiler.AbstractIL.IL+ILExportedTypesAndForwarders: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILExportedTypeOrForwarder] TryFindByName(System.String) FSharp.Compiler.AbstractIL.IL+ILExportedTypesAndForwarders: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILFieldDef: Boolean IsInitOnly FSharp.Compiler.AbstractIL.IL+ILFieldDef: Boolean IsLiteral @@ -1727,14 +426,6 @@ FSharp.Compiler.AbstractIL.IL+ILFieldDef: Boolean get_IsStatic() FSharp.Compiler.AbstractIL.IL+ILFieldDef: Boolean get_NotSerialized() FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILAttributes CustomAttrs FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILAttributes get_CustomAttrs() -FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILFieldDef With(Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILType], Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.FieldAttributes], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpOption`1[System.Byte[]]], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldInit]], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpOption`1[System.Int32]], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILNativeType]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILAttributes]) -FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILFieldDef WithAccess(ILMemberAccess) -FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILFieldDef WithFieldMarshal(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILNativeType]) -FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILFieldDef WithInitOnly(Boolean) -FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILFieldDef WithLiteralDefaultValue(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldInit]) -FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILFieldDef WithNotSerialized(Boolean) -FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILFieldDef WithSpecialName(Boolean) -FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILFieldDef WithStatic(Boolean) FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILMemberAccess Access FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILMemberAccess get_Access() FSharp.Compiler.AbstractIL.IL+ILFieldDef: ILType FieldType @@ -1752,384 +443,29 @@ FSharp.Compiler.AbstractIL.IL+ILFieldDef: System.Reflection.FieldAttributes get_ FSharp.Compiler.AbstractIL.IL+ILFieldDef: System.String Name FSharp.Compiler.AbstractIL.IL+ILFieldDef: System.String get_Name() FSharp.Compiler.AbstractIL.IL+ILFieldDef: Void .ctor(System.String, ILType, System.Reflection.FieldAttributes, Microsoft.FSharp.Core.FSharpOption`1[System.Byte[]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldInit], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILNativeType], ILAttributes) -FSharp.Compiler.AbstractIL.IL+ILFieldDef: Void .ctor(System.String, ILType, System.Reflection.FieldAttributes, Microsoft.FSharp.Core.FSharpOption`1[System.Byte[]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldInit], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILNativeType], ILAttributesStored, Int32) FSharp.Compiler.AbstractIL.IL+ILFieldDefs: Boolean Equals(ILFieldDefs) FSharp.Compiler.AbstractIL.IL+ILFieldDefs: Boolean Equals(System.Object) FSharp.Compiler.AbstractIL.IL+ILFieldDefs: Boolean Equals(System.Object, System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILFieldDefs: Int32 GetHashCode() FSharp.Compiler.AbstractIL.IL+ILFieldDefs: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILFieldDef] AsList -FSharp.Compiler.AbstractIL.IL+ILFieldDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILFieldDef] LookupByName(System.String) -FSharp.Compiler.AbstractIL.IL+ILFieldDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILFieldDef] get_AsList() FSharp.Compiler.AbstractIL.IL+ILFieldDefs: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean Equals(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean IsUInt8 FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean Item -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_IsUInt8() FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Boolean get_Item() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Int32 CompareTo(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean Equals(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean IsUInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Boolean get_IsUInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Int32 CompareTo(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: UInt16 Item FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: UInt16 get_Item() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean Equals(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean IsUInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Boolean get_IsUInt8() FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Double Item FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Double get_Item() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Int32 CompareTo(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean Equals(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean IsUInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Boolean get_IsUInt8() FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Int16 Item FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Int16 get_Item() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Int32 CompareTo(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean Equals(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean IsUInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Boolean get_IsUInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Int32 CompareTo(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Int32 GetHashCode(System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Int32 Item -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Int32 get_Item() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean Equals(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean IsUInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Boolean get_IsUInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Int32 CompareTo(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Int64 Item FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: Int64 get_Item() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean Equals(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean IsUInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Boolean get_IsUInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Int32 CompareTo(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: SByte Item FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: SByte get_Item() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean Equals(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean IsUInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Boolean get_IsUInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Int32 CompareTo(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Single Item FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: Single get_Item() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean Equals(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean IsUInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Boolean get_IsUInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Int32 CompareTo(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: System.String Item -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: System.String get_Item() FSharp.Compiler.AbstractIL.IL+ILFieldInit+Tags: Int32 Bool FSharp.Compiler.AbstractIL.IL+ILFieldInit+Tags: Int32 Char @@ -2145,170 +481,14 @@ FSharp.Compiler.AbstractIL.IL+ILFieldInit+Tags: Int32 UInt16 FSharp.Compiler.AbstractIL.IL+ILFieldInit+Tags: Int32 UInt32 FSharp.Compiler.AbstractIL.IL+ILFieldInit+Tags: Int32 UInt64 FSharp.Compiler.AbstractIL.IL+ILFieldInit+Tags: Int32 UInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean Equals(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean IsUInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Boolean get_IsUInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Int32 CompareTo(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: UInt16 Item FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: UInt16 get_Item() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean Equals(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean IsUInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Boolean get_IsUInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Int32 CompareTo(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: UInt32 Item FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: UInt32 get_Item() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean Equals(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean IsUInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Boolean get_IsUInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Int32 CompareTo(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: UInt64 Item FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: UInt64 get_Item() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean Equals(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsChar -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsString -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean IsUInt8 -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsChar() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Boolean get_IsUInt8() FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Byte Item FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Byte get_Item() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Int32 CompareTo(ILFieldInit) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILFieldInit: Boolean Equals(ILFieldInit) FSharp.Compiler.AbstractIL.IL+ILFieldInit: Boolean Equals(System.Object) FSharp.Compiler.AbstractIL.IL+ILFieldInit: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2376,21 +556,8 @@ FSharp.Compiler.AbstractIL.IL+ILFieldInit: Int32 GetHashCode() FSharp.Compiler.AbstractIL.IL+ILFieldInit: Int32 GetHashCode(System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILFieldInit: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILFieldInit: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILFieldInit: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Bool: System.Object AsObject() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Char: System.Object AsObject() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Double: System.Object AsObject() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int16: System.Object AsObject() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int32: System.Object AsObject() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int64: System.Object AsObject() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Int8: System.Object AsObject() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+Single: System.Object AsObject() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+String: System.Object AsObject() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt16: System.Object AsObject() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt32: System.Object AsObject() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt64: System.Object AsObject() -FSharp.Compiler.AbstractIL.IL+ILFieldInit+UInt8: System.Object AsObject() FSharp.Compiler.AbstractIL.IL+ILFieldInit: System.Object AsObject() +FSharp.Compiler.AbstractIL.IL+ILFieldInit: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILFieldRef: Boolean Equals(ILFieldRef) FSharp.Compiler.AbstractIL.IL+ILFieldRef: Boolean Equals(System.Object) FSharp.Compiler.AbstractIL.IL+ILFieldRef: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2476,11752 +643,6 @@ FSharp.Compiler.AbstractIL.IL+ILGenericVariance: Int32 GetHashCode(System.Collec FSharp.Compiler.AbstractIL.IL+ILGenericVariance: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILGenericVariance: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILGenericVariance: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILGlobals: Boolean IsPossiblePrimaryAssemblyRef(ILAssemblyRef) -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILAssemblyRef get_primaryAssemblyRef() -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILAssemblyRef primaryAssemblyRef -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILScopeRef get_primaryAssemblyScopeRef() -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILScopeRef primaryAssemblyScopeRef -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Array() -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Bool() -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Byte() -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Char() -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Double() -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Int16() -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Int32() -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Int64() -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_IntPtr() -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Object() -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_SByte() -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Single() -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_String() -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_Type() -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_TypedReference() -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_UInt16() -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_UInt32() -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_UInt64() -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType get_typ_UIntPtr() -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Array -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Bool -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Byte -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Char -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Double -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Int16 -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Int32 -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Int64 -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_IntPtr -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Object -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_SByte -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Single -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_String -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_Type -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_TypedReference -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_UInt16 -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_UInt32 -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_UInt64 -FSharp.Compiler.AbstractIL.IL+ILGlobals: ILType typ_UIntPtr -FSharp.Compiler.AbstractIL.IL+ILGlobals: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILGlobals: System.String get_primaryAssemblyName() -FSharp.Compiler.AbstractIL.IL+ILGlobals: System.String primaryAssemblyName -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: ILBasicType Item -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: ILBasicType get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: ILBasicType Item -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: ILBasicType get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: ILBasicType Item -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: ILBasicType get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: ILBasicType Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: ILBasicType get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: ILConst Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: ILConst get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: ILType Item -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: ILType get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Int32 Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Int32 Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Int32 get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Int32 get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: ILType Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: ILType get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_box: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Int32 Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Int32 get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_br: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: ILComparisonInstr Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: ILComparisonInstr get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Int32 Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Int32 get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: ILMethodSpec Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: ILMethodSpec get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: ILTailcall Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: ILTailcall get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]] Item3 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]] get_Item3() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_call: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: ILMethodSpec Item3 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: ILMethodSpec get_Item3() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: ILTailcall Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: ILTailcall get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: ILType Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: ILType get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]] Item4 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]] get_Item4() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: ILCallingSignature Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: ILCallingSignature get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: ILTailcall Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: ILTailcall get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]] Item3 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]] get_Item3() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: ILMethodSpec Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: ILMethodSpec get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: ILTailcall Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: ILTailcall get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]] Item3 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]] get_Item3() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: ILType Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: ILType get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: ILAlignment Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: ILAlignment get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: ILVolatility Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: ILVolatility get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: ILType Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: ILType get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: ILAlignment Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: ILAlignment get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: ILVolatility Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: ILVolatility get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: ILType Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: ILType get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: ILType Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: ILType get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: ILMethodSpec Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: ILMethodSpec get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: UInt16 Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg: UInt16 get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: UInt16 Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga: UInt16 get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: ILBasicType Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: ILBasicType get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: ILArrayShape Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: ILArrayShape get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: ILType Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: ILType get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Boolean get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: ILArrayShape Item3 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: ILArrayShape get_Item3() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: ILReadonly Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: ILReadonly get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: ILType Item4 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: ILType get_Item4() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: ILAlignment Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: ILAlignment get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: ILFieldSpec Item3 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: ILFieldSpec get_Item3() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: ILVolatility Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: ILVolatility get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: ILFieldSpec Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: ILFieldSpec get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: ILMethodSpec Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: ILMethodSpec get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: ILAlignment Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: ILAlignment get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: ILBasicType Item3 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: ILBasicType get_Item3() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: ILVolatility Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: ILVolatility get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: UInt16 Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc: UInt16 get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: UInt16 Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca: UInt16 get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: ILAlignment Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: ILAlignment get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: ILType Item3 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: ILType get_Item3() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: ILVolatility Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: ILVolatility get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: ILFieldSpec Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: ILFieldSpec get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: ILVolatility Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: ILVolatility get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: ILFieldSpec Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: ILFieldSpec get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: System.String Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr: System.String get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: ILToken Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: ILToken get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: ILMethodSpec Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: ILMethodSpec get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Int32 Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Int32 get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: ILType Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: ILType get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: ILArrayShape Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: ILArrayShape get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: ILType Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: ILType get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: ILMethodSpec Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: ILMethodSpec get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]] Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]] get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: ILType Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: ILType get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: ILSourceMarker Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: ILSourceMarker get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: ILType Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: ILType get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: UInt16 Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg: UInt16 get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: ILBasicType Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: ILBasicType get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: ILArrayShape Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: ILArrayShape get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: ILType Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: ILType get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: ILAlignment Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: ILAlignment get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: ILFieldSpec Item3 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: ILFieldSpec get_Item3() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: ILVolatility Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: ILVolatility get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: ILAlignment Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: ILAlignment get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: ILBasicType Item3 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: ILBasicType get_Item3() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: ILVolatility Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: ILVolatility get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: UInt16 Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc: UInt16 get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: ILAlignment Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: ILAlignment get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: ILType Item3 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: ILType get_Item3() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: ILVolatility Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: ILVolatility get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: ILFieldSpec Item2 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: ILFieldSpec get_Item2() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: ILVolatility Item1 -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: ILVolatility get_Item1() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: ILType Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: ILType get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: ILType Item -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: ILType get_Item() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_add -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_and -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_div -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_not -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_or -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 AI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 EI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 EI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_box -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_br -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_break -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_call -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_calli -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_leave -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_ret -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_starg -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_stind -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_switch -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_throw -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr+Tags: Int32 I_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean Equals(ILInstr) -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_add -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_and -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_div -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_not -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_or -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsAI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsEI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsEI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_box -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_br -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_break -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_call -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_calli -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_leave -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_ret -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_starg -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_stind -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_switch -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_throw -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean IsI_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_conv() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_conv_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_conv_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_ldc() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsAI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsEI_ilzero() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsEI_ldlen_multi() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_box() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_br() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_brcmp() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_break() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_call() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_callconstraint() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_calli() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_callvirt() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_castclass() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_cpblk() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_cpobj() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_initblk() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_initobj() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_isinst() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_jmp() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldarg() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldarga() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldelem() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldelema() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldfld() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldflda() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldftn() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldind() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldloc() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldloca() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldobj() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldsflda() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldstr() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldtoken() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ldvirtftn() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_leave() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_mkrefany() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_newarr() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_newobj() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_refanyval() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_seqpoint() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_sizeof() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_starg() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_stelem() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_stelem_any() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_stfld() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_stind() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_stloc() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_stobj() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_stsfld() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_switch() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_unbox() -FSharp.Compiler.AbstractIL.IL+ILInstr: Boolean get_IsI_unbox_any() -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+AI_conv_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+AI_ldc -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ilzero -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+EI_ldlen_multi -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_box -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_br -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_brcmp -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_call -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_callconstraint -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_calli -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_callvirt -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_castclass -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpblk -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_cpobj -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_initblk -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_initobj -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_isinst -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_jmp -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarg -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldarga -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldelema -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldfld -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldflda -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldftn -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldind -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloc -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldloca -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldobj -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsfld -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldsflda -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldstr -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldtoken -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_ldvirtftn -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_leave -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_mkrefany -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_newarr -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_newobj -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_refanyval -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_seqpoint -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_sizeof -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_starg -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_stelem_any -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_stfld -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_stind -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_stloc -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_stobj -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_stsfld -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_switch -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+I_unbox_any -FSharp.Compiler.AbstractIL.IL+ILInstr: FSharp.Compiler.AbstractIL.IL+ILInstr+Tags -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_add -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_add_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_add_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_and -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_ceq -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_cgt -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_cgt_un -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_ckfinite -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_clt -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_clt_un -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_div -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_div_un -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_dup -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_ldnull -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_mul -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_mul_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_mul_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_neg -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_nop -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_not -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_or -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_pop -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_rem -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_rem_un -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_shl -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_shr -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_shr_un -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_sub -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_sub_ovf -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_sub_ovf_un -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr AI_xor -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr I_arglist -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr I_break -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr I_endfilter -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr I_endfinally -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr I_ldlen -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr I_localloc -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr I_refanytype -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr I_ret -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr I_rethrow -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr I_throw -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewAI_conv(ILBasicType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewAI_conv_ovf(ILBasicType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewAI_conv_ovf_un(ILBasicType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewAI_ldc(ILBasicType, ILConst) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewEI_ilzero(ILType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewEI_ldlen_multi(Int32, Int32) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_box(ILType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_br(Int32) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_brcmp(ILComparisonInstr, Int32) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_call(ILTailcall, ILMethodSpec, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]]) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_callconstraint(ILTailcall, ILType, ILMethodSpec, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]]) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_calli(ILTailcall, ILCallingSignature, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]]) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_callvirt(ILTailcall, ILMethodSpec, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]]) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_castclass(ILType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_cpblk(ILAlignment, ILVolatility) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_cpobj(ILType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_initblk(ILAlignment, ILVolatility) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_initobj(ILType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_isinst(ILType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_jmp(ILMethodSpec) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldarg(UInt16) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldarga(UInt16) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldelem(ILBasicType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldelem_any(ILArrayShape, ILType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldelema(ILReadonly, Boolean, ILArrayShape, ILType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldfld(ILAlignment, ILVolatility, ILFieldSpec) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldflda(ILFieldSpec) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldftn(ILMethodSpec) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldind(ILAlignment, ILVolatility, ILBasicType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldloc(UInt16) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldloca(UInt16) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldobj(ILAlignment, ILVolatility, ILType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldsfld(ILVolatility, ILFieldSpec) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldsflda(ILFieldSpec) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldstr(System.String) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldtoken(ILToken) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_ldvirtftn(ILMethodSpec) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_leave(Int32) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_mkrefany(ILType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_newarr(ILArrayShape, ILType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_newobj(ILMethodSpec, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]]) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_refanyval(ILType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_seqpoint(ILSourceMarker) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_sizeof(ILType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_starg(UInt16) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_stelem(ILBasicType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_stelem_any(ILArrayShape, ILType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_stfld(ILAlignment, ILVolatility, ILFieldSpec) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_stind(ILAlignment, ILVolatility, ILBasicType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_stloc(UInt16) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_stobj(ILAlignment, ILVolatility, ILType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_stsfld(ILVolatility, ILFieldSpec) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_switch(Microsoft.FSharp.Collections.FSharpList`1[System.Int32]) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_unbox(ILType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr NewI_unbox_any(ILType) -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_add() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_add_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_add_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_and() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_ceq() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_cgt() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_cgt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_ckfinite() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_clt() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_clt_un() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_div() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_div_un() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_dup() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_ldnull() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_mul() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_mul_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_mul_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_neg() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_nop() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_not() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_or() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_pop() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_rem() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_rem_un() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_shl() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_shr() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_shr_un() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_sub() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_sub_ovf() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_sub_ovf_un() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_AI_xor() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_I_arglist() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_I_break() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_I_endfilter() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_I_endfinally() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_I_ldlen() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_I_localloc() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_I_refanytype() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_I_ret() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_I_rethrow() -FSharp.Compiler.AbstractIL.IL+ILInstr: ILInstr get_I_throw() -FSharp.Compiler.AbstractIL.IL+ILInstr: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILInstr: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILInstr: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILInstr: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILInstr: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILLazyMethodBody: Boolean Equals(ILLazyMethodBody) -FSharp.Compiler.AbstractIL.IL+ILLazyMethodBody: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILLazyMethodBody: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILLazyMethodBody: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILLazyMethodBody: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILLazyMethodBody: MethodBody Contents -FSharp.Compiler.AbstractIL.IL+ILLazyMethodBody: MethodBody get_Contents() -FSharp.Compiler.AbstractIL.IL+ILLazyMethodBody: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILLocal: Boolean IsPinned -FSharp.Compiler.AbstractIL.IL+ILLocal: Boolean get_IsPinned() -FSharp.Compiler.AbstractIL.IL+ILLocal: ILType Type -FSharp.Compiler.AbstractIL.IL+ILLocal: ILType get_Type() -FSharp.Compiler.AbstractIL.IL+ILLocal: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.String,System.Int32,System.Int32]] DebugInfo -FSharp.Compiler.AbstractIL.IL+ILLocal: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.String,System.Int32,System.Int32]] get_DebugInfo() -FSharp.Compiler.AbstractIL.IL+ILLocal: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILLocal: Void .ctor(ILType, Boolean, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.String,System.Int32,System.Int32]]) -FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocalDebugMapping] DebugMappings -FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocalDebugMapping] get_DebugMappings() -FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo: System.Tuple`2[System.Int32,System.Int32] Range -FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo: System.Tuple`2[System.Int32,System.Int32] get_Range() -FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo: Void .ctor(System.Tuple`2[System.Int32,System.Int32], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocalDebugMapping]) -FSharp.Compiler.AbstractIL.IL+ILLocalDebugMapping: Int32 LocalIndex -FSharp.Compiler.AbstractIL.IL+ILLocalDebugMapping: Int32 get_LocalIndex() -FSharp.Compiler.AbstractIL.IL+ILLocalDebugMapping: System.String LocalName -FSharp.Compiler.AbstractIL.IL+ILLocalDebugMapping: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILLocalDebugMapping: System.String get_LocalName() -FSharp.Compiler.AbstractIL.IL+ILLocalDebugMapping: Void .ctor(Int32, System.String) -FSharp.Compiler.AbstractIL.IL+ILLocalsAllocator: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocal] Close() -FSharp.Compiler.AbstractIL.IL+ILLocalsAllocator: UInt16 AllocLocal(ILLocal) -FSharp.Compiler.AbstractIL.IL+ILLocalsAllocator: Void .ctor(Int32) FSharp.Compiler.AbstractIL.IL+ILMemberAccess+Tags: Int32 Assembly FSharp.Compiler.AbstractIL.IL+ILMemberAccess+Tags: Int32 CompilerControlled FSharp.Compiler.AbstractIL.IL+ILMemberAccess+Tags: Int32 Family @@ -14269,22 +690,6 @@ FSharp.Compiler.AbstractIL.IL+ILMemberAccess: Int32 GetHashCode(System.Collectio FSharp.Compiler.AbstractIL.IL+ILMemberAccess: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILMemberAccess: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILMemberAccess: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILMethodBody: Boolean AggressiveInlining -FSharp.Compiler.AbstractIL.IL+ILMethodBody: Boolean IsZeroInit -FSharp.Compiler.AbstractIL.IL+ILMethodBody: Boolean NoInlining -FSharp.Compiler.AbstractIL.IL+ILMethodBody: Boolean get_AggressiveInlining() -FSharp.Compiler.AbstractIL.IL+ILMethodBody: Boolean get_IsZeroInit() -FSharp.Compiler.AbstractIL.IL+ILMethodBody: Boolean get_NoInlining() -FSharp.Compiler.AbstractIL.IL+ILMethodBody: ILCode Code -FSharp.Compiler.AbstractIL.IL+ILMethodBody: ILCode get_Code() -FSharp.Compiler.AbstractIL.IL+ILMethodBody: Int32 MaxStack -FSharp.Compiler.AbstractIL.IL+ILMethodBody: Int32 get_MaxStack() -FSharp.Compiler.AbstractIL.IL+ILMethodBody: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocal] Locals -FSharp.Compiler.AbstractIL.IL+ILMethodBody: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocal] get_Locals() -FSharp.Compiler.AbstractIL.IL+ILMethodBody: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSourceMarker] SourceMarker -FSharp.Compiler.AbstractIL.IL+ILMethodBody: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSourceMarker] get_SourceMarker() -FSharp.Compiler.AbstractIL.IL+ILMethodBody: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILMethodBody: Void .ctor(Boolean, Int32, Boolean, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocal], ILCode, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSourceMarker]) FSharp.Compiler.AbstractIL.IL+ILMethodDef: Boolean HasSecurity FSharp.Compiler.AbstractIL.IL+ILMethodDef: Boolean IsAbstract FSharp.Compiler.AbstractIL.IL+ILMethodDef: Boolean IsAggressiveInline @@ -14341,35 +746,18 @@ FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILCallingConv CallingConv FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILCallingConv get_CallingConv() FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILCallingSignature CallingSignature FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILCallingSignature get_CallingSignature() -FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILLazyMethodBody Body -FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILLazyMethodBody get_Body() FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMemberAccess Access FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMemberAccess get_Access() FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodBody MethodBody FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodBody get_MethodBody() -FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef With(Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.MethodAttributes], Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.MethodImplAttributes], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILCallingConv], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILReturn], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILLazyMethodBody], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSecurityDecls], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILAttributes]) -FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithAbstract(Boolean) -FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithAccess(ILMemberAccess) -FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithAggressiveInlining(Boolean) -FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithFinal(Boolean) -FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithHideBySig() -FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithHideBySig(Boolean) -FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithNewSlot -FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithNoInlining(Boolean) -FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithPInvoke(Boolean) -FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithPreserveSig(Boolean) -FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithRuntime(Boolean) -FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithSecurity(Boolean) -FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithSpecialName -FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef WithSynchronized(Boolean) -FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef get_WithNewSlot() -FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILMethodDef get_WithSpecialName() FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILReturn Return FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILReturn get_Return() FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILSecurityDecls SecurityDecls FSharp.Compiler.AbstractIL.IL+ILMethodDef: ILSecurityDecls get_SecurityDecls() FSharp.Compiler.AbstractIL.IL+ILMethodDef: Int32 MaxStack FSharp.Compiler.AbstractIL.IL+ILMethodDef: Int32 get_MaxStack() +FSharp.Compiler.AbstractIL.IL+ILMethodDef: MethodBody Body +FSharp.Compiler.AbstractIL.IL+ILMethodDef: MethodBody get_Body() FSharp.Compiler.AbstractIL.IL+ILMethodDef: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef] GenericParams FSharp.Compiler.AbstractIL.IL+ILMethodDef: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef] get_GenericParams() FSharp.Compiler.AbstractIL.IL+ILMethodDef: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocal] Locals @@ -14386,8 +774,7 @@ FSharp.Compiler.AbstractIL.IL+ILMethodDef: System.Reflection.MethodImplAttribute FSharp.Compiler.AbstractIL.IL+ILMethodDef: System.Reflection.MethodImplAttributes get_ImplAttributes() FSharp.Compiler.AbstractIL.IL+ILMethodDef: System.String Name FSharp.Compiler.AbstractIL.IL+ILMethodDef: System.String get_Name() -FSharp.Compiler.AbstractIL.IL+ILMethodDef: Void .ctor(System.String, System.Reflection.MethodAttributes, System.Reflection.MethodImplAttributes, ILCallingConv, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], ILReturn, ILLazyMethodBody, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef], ILSecurityDecls, ILAttributes) -FSharp.Compiler.AbstractIL.IL+ILMethodDef: Void .ctor(System.String, System.Reflection.MethodAttributes, System.Reflection.MethodImplAttributes, ILCallingConv, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], ILReturn, ILLazyMethodBody, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef], ILSecurityDeclsStored, ILAttributesStored, Int32) +FSharp.Compiler.AbstractIL.IL+ILMethodDef: Void .ctor(System.String, System.Reflection.MethodAttributes, System.Reflection.MethodImplAttributes, ILCallingConv, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], ILReturn, System.Lazy`1[FSharp.Compiler.AbstractIL.IL+MethodBody], Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef], ILSecurityDecls, ILAttributes) FSharp.Compiler.AbstractIL.IL+ILMethodDefs: ILMethodDef[] AsArray FSharp.Compiler.AbstractIL.IL+ILMethodDefs: ILMethodDef[] get_AsArray() FSharp.Compiler.AbstractIL.IL+ILMethodDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILMethodDef] AsList @@ -14413,8 +800,6 @@ FSharp.Compiler.AbstractIL.IL+ILMethodImplDefs: Boolean Equals(System.Object) FSharp.Compiler.AbstractIL.IL+ILMethodImplDefs: Boolean Equals(System.Object, System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILMethodImplDefs: Int32 GetHashCode() FSharp.Compiler.AbstractIL.IL+ILMethodImplDefs: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILMethodImplDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILMethodImplDef] AsList -FSharp.Compiler.AbstractIL.IL+ILMethodImplDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILMethodImplDef] get_AsList() FSharp.Compiler.AbstractIL.IL+ILMethodImplDefs: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILMethodRef: Boolean Equals(ILMethodRef) FSharp.Compiler.AbstractIL.IL+ILMethodRef: Boolean Equals(System.Object) @@ -14468,24 +853,6 @@ FSharp.Compiler.AbstractIL.IL+ILMethodSpec: Microsoft.FSharp.Collections.FSharpL FSharp.Compiler.AbstractIL.IL+ILMethodSpec: System.String Name FSharp.Compiler.AbstractIL.IL+ILMethodSpec: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILMethodSpec: System.String get_Name() -FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean Equals(ILMethodVirtualInfo) -FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean IsAbstract -FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean IsCheckAccessOnOverride -FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean IsFinal -FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean IsNewSlot -FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean get_IsAbstract() -FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean get_IsCheckAccessOnOverride() -FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean get_IsFinal() -FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Boolean get_IsNewSlot() -FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Int32 CompareTo(ILMethodVirtualInfo) -FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo: Void .ctor(Boolean, Boolean, Boolean, Boolean) FSharp.Compiler.AbstractIL.IL+ILModuleDef: Boolean HasManifest FSharp.Compiler.AbstractIL.IL+ILModuleDef: Boolean Is32Bit FSharp.Compiler.AbstractIL.IL+ILModuleDef: Boolean Is32BitPreferred @@ -14552,523 +919,35 @@ FSharp.Compiler.AbstractIL.IL+ILModuleRef: Microsoft.FSharp.Core.FSharpOption`1[ FSharp.Compiler.AbstractIL.IL+ILModuleRef: System.String Name FSharp.Compiler.AbstractIL.IL+ILModuleRef: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILModuleRef: System.String get_Name() -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Boolean Equals(ILNativeResource) -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Boolean IsIn -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Boolean IsOut -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Boolean get_IsIn() -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Boolean get_IsOut() -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 CompareTo(ILNativeResource) -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 get_linkedResourceBase() -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 get_linkedResourceLength() -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 get_linkedResourceStart() -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 linkedResourceBase -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 linkedResourceLength -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: Int32 linkedResourceStart -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: System.String fileName -FSharp.Compiler.AbstractIL.IL+ILNativeResource+In: System.String get_fileName() -FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Boolean Equals(ILNativeResource) -FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Boolean IsIn -FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Boolean IsOut -FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Boolean get_IsIn() -FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Boolean get_IsOut() -FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Byte[] get_unlinkedResource() -FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Byte[] unlinkedResource -FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Int32 CompareTo(ILNativeResource) -FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILNativeResource+Tags: Int32 In -FSharp.Compiler.AbstractIL.IL+ILNativeResource+Tags: Int32 Out FSharp.Compiler.AbstractIL.IL+ILNativeResource: Boolean Equals(ILNativeResource) FSharp.Compiler.AbstractIL.IL+ILNativeResource: Boolean Equals(System.Object) FSharp.Compiler.AbstractIL.IL+ILNativeResource: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeResource: Boolean IsIn -FSharp.Compiler.AbstractIL.IL+ILNativeResource: Boolean IsOut -FSharp.Compiler.AbstractIL.IL+ILNativeResource: Boolean get_IsIn() -FSharp.Compiler.AbstractIL.IL+ILNativeResource: Boolean get_IsOut() -FSharp.Compiler.AbstractIL.IL+ILNativeResource: FSharp.Compiler.AbstractIL.IL+ILNativeResource+In -FSharp.Compiler.AbstractIL.IL+ILNativeResource: FSharp.Compiler.AbstractIL.IL+ILNativeResource+Out -FSharp.Compiler.AbstractIL.IL+ILNativeResource: FSharp.Compiler.AbstractIL.IL+ILNativeResource+Tags -FSharp.Compiler.AbstractIL.IL+ILNativeResource: ILNativeResource NewIn(System.String, Int32, Int32, Int32) -FSharp.Compiler.AbstractIL.IL+ILNativeResource: ILNativeResource NewOut(Byte[]) FSharp.Compiler.AbstractIL.IL+ILNativeResource: Int32 CompareTo(ILNativeResource) FSharp.Compiler.AbstractIL.IL+ILNativeResource: Int32 CompareTo(System.Object) FSharp.Compiler.AbstractIL.IL+ILNativeResource: Int32 CompareTo(System.Object, System.Collections.IComparer) FSharp.Compiler.AbstractIL.IL+ILNativeResource: Int32 GetHashCode() FSharp.Compiler.AbstractIL.IL+ILNativeResource: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeResource: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILNativeResource: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILNativeResource: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean Equals(ILNativeType) -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsANSIBSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsAsAny -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsBSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsByValStr -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsByte -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsCurrency -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsCustom -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsEmpty -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsError -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsFixedArray -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsFixedSysString -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsIDispatch -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsIUnknown -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsInt -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsInterface -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsLPSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsLPSTRUCT -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsLPTSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsLPUTF8STR -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsLPWSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsMethod -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsSafeArray -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsStruct -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsTBSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsUInt -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsVariantBool -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean IsVoid -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsANSIBSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsAsAny() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsBSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsByValStr() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsByte() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsCurrency() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsCustom() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsEmpty() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsError() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsFixedArray() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsFixedSysString() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsIDispatch() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsIUnknown() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsInt() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsInterface() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsLPSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsLPSTRUCT() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsLPTSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsLPUTF8STR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsLPWSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsMethod() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsSafeArray() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsStruct() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsTBSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsUInt() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsVariantBool() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Boolean get_IsVoid() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Int32 CompareTo(ILNativeType) -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILNativeType] Item1 FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILNativeType] get_Item1() FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Int32,Microsoft.FSharp.Core.FSharpOption`1[System.Int32]]] Item2 FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Int32,Microsoft.FSharp.Core.FSharpOption`1[System.Int32]]] get_Item2() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Array: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean Equals(ILNativeType) -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsANSIBSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsAsAny -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsBSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsByValStr -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsByte -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsCurrency -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsCustom -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsEmpty -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsError -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsFixedArray -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsFixedSysString -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsIDispatch -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsIUnknown -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsInt -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsInterface -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsLPSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsLPSTRUCT -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsLPTSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsLPUTF8STR -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsLPWSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsMethod -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsSafeArray -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsStruct -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsTBSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsUInt -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsVariantBool -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean IsVoid -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsANSIBSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsAsAny() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsBSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsByValStr() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsByte() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsCurrency() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsCustom() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsEmpty() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsError() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsFixedArray() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsFixedSysString() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsIDispatch() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsIUnknown() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsInt() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsInterface() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsLPSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsLPSTRUCT() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsLPTSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsLPUTF8STR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsLPWSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsMethod() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsSafeArray() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsStruct() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsTBSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsUInt() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsVariantBool() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Boolean get_IsVoid() FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Byte[] Item1 FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Byte[] cookieString FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Byte[] get_Item1() FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Byte[] get_cookieString() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Int32 CompareTo(ILNativeType) -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: System.String nativeTypeName FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: System.String custMarshallerName -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: System.String get_nativeTypeName() FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: System.String get_custMarshallerName() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean Equals(ILNativeType) -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsANSIBSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsAsAny -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsBSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsByValStr -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsByte -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsCurrency -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsCustom -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsEmpty -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsError -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsFixedArray -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsFixedSysString -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsIDispatch -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsIUnknown -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsInt -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsInterface -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsLPSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsLPSTRUCT -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsLPTSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsLPUTF8STR -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsLPWSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsMethod -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsSafeArray -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsStruct -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsTBSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsUInt -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsVariantBool -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean IsVoid -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsANSIBSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsAsAny() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsBSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsByValStr() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsByte() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsCurrency() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsCustom() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsEmpty() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsError() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsFixedArray() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsFixedSysString() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsIDispatch() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsIUnknown() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsInt() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsInterface() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsLPSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsLPSTRUCT() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsLPTSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsLPUTF8STR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsLPWSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsMethod() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsSafeArray() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsStruct() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsTBSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsUInt() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsVariantBool() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Boolean get_IsVoid() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Int32 CompareTo(ILNativeType) -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: System.String get_nativeTypeName() +FSharp.Compiler.AbstractIL.IL+ILNativeType+Custom: System.String nativeTypeName FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Int32 Item -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Int32 get_Item() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedArray: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean Equals(ILNativeType) -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsANSIBSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsAsAny -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsBSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsByValStr -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsByte -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsCurrency -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsCustom -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsEmpty -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsError -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsFixedArray -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsFixedSysString -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsIDispatch -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsIUnknown -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsInt -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsInterface -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsLPSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsLPSTRUCT -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsLPTSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsLPUTF8STR -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsLPWSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsMethod -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsSafeArray -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsStruct -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsTBSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsUInt -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsVariantBool -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean IsVoid -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsANSIBSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsAsAny() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsBSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsByValStr() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsByte() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsCurrency() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsCustom() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsEmpty() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsError() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsFixedArray() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsFixedSysString() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsIDispatch() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsIUnknown() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsInt() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsInterface() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsLPSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsLPSTRUCT() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsLPTSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsLPUTF8STR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsLPWSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsMethod() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsSafeArray() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsStruct() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsTBSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsUInt() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsVariantBool() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Boolean get_IsVoid() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Int32 CompareTo(ILNativeType) -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Int32 GetHashCode(System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Int32 Item -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Int32 get_Item() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILNativeType+FixedSysString: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean Equals(ILNativeType) -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsANSIBSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsAsAny -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsBSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsByValStr -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsByte -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsCurrency -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsCustom -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsEmpty -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsError -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsFixedArray -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsFixedSysString -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsIDispatch -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsIUnknown -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsInt -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsInterface -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsLPSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsLPSTRUCT -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsLPTSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsLPUTF8STR -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsLPWSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsMethod -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsSafeArray -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsStruct -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsTBSTR -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsUInt -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsVariantBool -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean IsVoid -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsANSIBSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsAsAny() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsBSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsByValStr() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsByte() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsCurrency() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsCustom() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsEmpty() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsError() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsFixedArray() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsFixedSysString() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsIDispatch() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsIUnknown() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsInt() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsInterface() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsLPSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsLPSTRUCT() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsLPTSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsLPUTF8STR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsLPWSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsMethod() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsSafeArray() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsStruct() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsTBSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsUInt() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsVariantBool() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Boolean get_IsVoid() FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: ILNativeVariant Item1 FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: ILNativeVariant get_Item1() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Int32 CompareTo(ILNativeType) -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Microsoft.FSharp.Core.FSharpOption`1[System.String] Item2 FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Item2() -FSharp.Compiler.AbstractIL.IL+ILNativeType+SafeArray: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILNativeType+Tags: Int32 ANSIBSTR FSharp.Compiler.AbstractIL.IL+ILNativeType+Tags: Int32 Array FSharp.Compiler.AbstractIL.IL+ILNativeType+Tags: Int32 AsAny @@ -15271,541 +1150,6 @@ FSharp.Compiler.AbstractIL.IL+ILNativeType: Int32 GetHashCode(System.Collections FSharp.Compiler.AbstractIL.IL+ILNativeType: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILNativeType: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILNativeType: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean Equals(ILNativeVariant) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsBSTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsBlob -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsBlobObject -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsByref -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsCArray -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsCF -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsCLSID -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsCurrency -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsDate -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsDecimal -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsEmpty -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsError -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsFileTime -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsHRESULT -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsIDispatch -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsIUnknown -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsInt -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsLPSTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsLPWSTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsPTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsRecord -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsSafeArray -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsStorage -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsStoredObject -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsStream -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsStreamedObject -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsUInt -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsUInt8 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsUserDefined -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsVariant -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsVector -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean IsVoid -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsBSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsBlob() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsBlobObject() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsByref() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsCArray() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsCF() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsCLSID() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsCurrency() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsDate() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsDecimal() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsEmpty() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsError() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsFileTime() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsHRESULT() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsIDispatch() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsIUnknown() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsInt() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsLPSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsLPWSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsPTR() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsRecord() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsSafeArray() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsStorage() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsStoredObject() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsStream() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsStreamedObject() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsUInt() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsUInt8() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsUserDefined() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsVariant() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsVector() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Boolean get_IsVoid() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: ILNativeVariant Item -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: ILNativeVariant get_Item() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Int32 CompareTo(ILNativeVariant) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean Equals(ILNativeVariant) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsBSTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsBlob -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsBlobObject -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsByref -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsCArray -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsCF -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsCLSID -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsCurrency -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsDate -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsDecimal -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsEmpty -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsError -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsFileTime -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsHRESULT -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsIDispatch -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsIUnknown -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsInt -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsLPSTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsLPWSTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsPTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsRecord -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsSafeArray -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsStorage -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsStoredObject -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsStream -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsStreamedObject -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsUInt -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsUInt8 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsUserDefined -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsVariant -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsVector -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean IsVoid -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsBSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsBlob() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsBlobObject() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsByref() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsCArray() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsCF() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsCLSID() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsCurrency() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsDate() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsDecimal() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsEmpty() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsError() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsFileTime() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsHRESULT() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsIDispatch() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsIUnknown() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsInt() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsLPSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsLPWSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsPTR() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsRecord() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsSafeArray() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsStorage() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsStoredObject() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsStream() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsStreamedObject() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsUInt() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsUInt8() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsUserDefined() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsVariant() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsVector() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Boolean get_IsVoid() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: ILNativeVariant Item -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: ILNativeVariant get_Item() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Int32 CompareTo(ILNativeVariant) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Array -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 BSTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Blob -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 BlobObject -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Bool -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Byref -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 CArray -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 CF -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 CLSID -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Currency -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Date -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Decimal -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Double -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Empty -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Error -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 FileTime -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 HRESULT -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 IDispatch -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 IUnknown -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Int -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Int16 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Int32 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Int64 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Int8 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 LPSTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 LPWSTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Null -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 PTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Record -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 SafeArray -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Single -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Storage -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 StoredObject -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Stream -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 StreamedObject -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 UInt -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 UInt16 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 UInt32 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 UInt64 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 UInt8 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 UserDefined -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Variant -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Vector -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags: Int32 Void -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean Equals(ILNativeVariant) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsBSTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsBlob -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsBlobObject -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsByref -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsCArray -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsCF -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsCLSID -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsCurrency -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsDate -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsDecimal -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsEmpty -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsError -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsFileTime -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsHRESULT -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsIDispatch -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsIUnknown -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsInt -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsLPSTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsLPWSTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsPTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsRecord -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsSafeArray -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsStorage -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsStoredObject -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsStream -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsStreamedObject -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsUInt -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsUInt8 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsUserDefined -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsVariant -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsVector -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean IsVoid -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsBSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsBlob() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsBlobObject() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsByref() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsCArray() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsCF() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsCLSID() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsCurrency() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsDate() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsDecimal() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsEmpty() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsError() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsFileTime() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsHRESULT() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsIDispatch() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsIUnknown() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsInt() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsLPSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsLPWSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsPTR() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsRecord() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsSafeArray() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsStorage() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsStoredObject() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsStream() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsStreamedObject() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsUInt() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsUInt8() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsUserDefined() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsVariant() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsVector() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Boolean get_IsVoid() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: ILNativeVariant Item -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: ILNativeVariant get_Item() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Int32 CompareTo(ILNativeVariant) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean Equals(ILNativeVariant) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsBSTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsBlob -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsBlobObject -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsBool -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsByref -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsCArray -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsCF -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsCLSID -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsCurrency -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsDate -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsDecimal -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsDouble -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsEmpty -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsError -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsFileTime -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsHRESULT -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsIDispatch -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsIUnknown -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsInt -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsInt16 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsInt32 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsInt64 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsInt8 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsLPSTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsLPWSTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsNull -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsPTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsRecord -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsSafeArray -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsSingle -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsStorage -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsStoredObject -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsStream -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsStreamedObject -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsUInt -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsUInt16 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsUInt32 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsUInt64 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsUInt8 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsUserDefined -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsVariant -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsVector -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean IsVoid -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsBSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsBlob() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsBlobObject() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsBool() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsByref() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsCArray() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsCF() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsCLSID() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsCurrency() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsDate() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsDecimal() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsDouble() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsEmpty() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsError() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsFileTime() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsHRESULT() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsIDispatch() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsIUnknown() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsInt() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsInt16() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsInt32() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsInt64() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsInt8() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsLPSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsLPWSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsNull() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsPTR() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsRecord() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsSafeArray() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsSingle() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsStorage() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsStoredObject() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsStream() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsStreamedObject() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsUInt() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsUInt16() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsUInt32() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsUInt64() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsUInt8() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsUserDefined() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsVariant() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsVector() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Boolean get_IsVoid() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Array -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Byref -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Tags -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: FSharp.Compiler.AbstractIL.IL+ILNativeVariant+Vector -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant BSTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Blob -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant BlobObject -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Bool -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant CArray -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant CF -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant CLSID -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Currency -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Date -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Decimal -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Double -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Empty -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Error -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant FileTime -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant HRESULT -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant IDispatch -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant IUnknown -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Int -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Int16 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Int32 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Int64 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Int8 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant LPSTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant LPWSTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant NewArray(ILNativeVariant) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant NewByref(ILNativeVariant) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant NewVector(ILNativeVariant) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Null -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant PTR -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Record -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant SafeArray -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Single -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Storage -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant StoredObject -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Stream -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant StreamedObject -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant UInt -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant UInt16 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant UInt32 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant UInt64 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant UInt8 -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant UserDefined -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Variant -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant Void -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_BSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Blob() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_BlobObject() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Bool() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_CArray() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_CF() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_CLSID() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Currency() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Date() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Decimal() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Double() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Empty() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Error() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_FileTime() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_HRESULT() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_IDispatch() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_IUnknown() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Int() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Int16() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Int32() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Int64() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Int8() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_LPSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_LPWSTR() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Null() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_PTR() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Record() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_SafeArray() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Single() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Storage() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_StoredObject() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Stream() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_StreamedObject() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_UInt() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_UInt16() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_UInt32() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_UInt64() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_UInt8() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_UserDefined() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Variant() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: ILNativeVariant get_Void() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Int32 CompareTo(ILNativeVariant) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILNativeVariant: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILNestedExportedType: ILAttributes CustomAttrs FSharp.Compiler.AbstractIL.IL+ILNestedExportedType: ILAttributes get_CustomAttrs() FSharp.Compiler.AbstractIL.IL+ILNestedExportedType: ILAttributesStored CustomAttrsStored @@ -15825,29 +1169,7 @@ FSharp.Compiler.AbstractIL.IL+ILNestedExportedTypes: Boolean Equals(System.Objec FSharp.Compiler.AbstractIL.IL+ILNestedExportedTypes: Boolean Equals(System.Object, System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+ILNestedExportedTypes: Int32 GetHashCode() FSharp.Compiler.AbstractIL.IL+ILNestedExportedTypes: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILNestedExportedTypes: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILNestedExportedType] AsList -FSharp.Compiler.AbstractIL.IL+ILNestedExportedTypes: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILNestedExportedType] get_AsList() FSharp.Compiler.AbstractIL.IL+ILNestedExportedTypes: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: Boolean Equals(ILOverridesSpec) -FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: ILMethodRef Item1 -FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: ILMethodRef MethodRef -FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: ILMethodRef get_Item1() -FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: ILMethodRef get_MethodRef() -FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: ILOverridesSpec NewOverridesSpec(ILMethodRef, ILType) -FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: ILType DeclaringType -FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: ILType Item2 -FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: ILType get_DeclaringType() -FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: ILType get_Item2() -FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: Int32 CompareTo(ILOverridesSpec) -FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILOverridesSpec: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILParameter: Boolean IsIn FSharp.Compiler.AbstractIL.IL+ILParameter: Boolean IsOptional FSharp.Compiler.AbstractIL.IL+ILParameter: Boolean IsOut @@ -15870,32 +1192,14 @@ FSharp.Compiler.AbstractIL.IL+ILParameter: Microsoft.FSharp.Core.FSharpOption`1[ FSharp.Compiler.AbstractIL.IL+ILParameter: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Name() FSharp.Compiler.AbstractIL.IL+ILParameter: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILParameter: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[System.String], ILType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldInit], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILNativeType], Boolean, Boolean, Boolean, ILAttributesStored, Int32) -FSharp.Compiler.AbstractIL.IL+ILPlatform+Tags: Int32 AMD64 -FSharp.Compiler.AbstractIL.IL+ILPlatform+Tags: Int32 IA64 -FSharp.Compiler.AbstractIL.IL+ILPlatform+Tags: Int32 X86 FSharp.Compiler.AbstractIL.IL+ILPlatform: Boolean Equals(ILPlatform) FSharp.Compiler.AbstractIL.IL+ILPlatform: Boolean Equals(System.Object) FSharp.Compiler.AbstractIL.IL+ILPlatform: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILPlatform: Boolean IsAMD64 -FSharp.Compiler.AbstractIL.IL+ILPlatform: Boolean IsIA64 -FSharp.Compiler.AbstractIL.IL+ILPlatform: Boolean IsX86 -FSharp.Compiler.AbstractIL.IL+ILPlatform: Boolean get_IsAMD64() -FSharp.Compiler.AbstractIL.IL+ILPlatform: Boolean get_IsIA64() -FSharp.Compiler.AbstractIL.IL+ILPlatform: Boolean get_IsX86() -FSharp.Compiler.AbstractIL.IL+ILPlatform: FSharp.Compiler.AbstractIL.IL+ILPlatform+Tags -FSharp.Compiler.AbstractIL.IL+ILPlatform: ILPlatform AMD64 -FSharp.Compiler.AbstractIL.IL+ILPlatform: ILPlatform IA64 -FSharp.Compiler.AbstractIL.IL+ILPlatform: ILPlatform X86 -FSharp.Compiler.AbstractIL.IL+ILPlatform: ILPlatform get_AMD64() -FSharp.Compiler.AbstractIL.IL+ILPlatform: ILPlatform get_IA64() -FSharp.Compiler.AbstractIL.IL+ILPlatform: ILPlatform get_X86() FSharp.Compiler.AbstractIL.IL+ILPlatform: Int32 CompareTo(ILPlatform) FSharp.Compiler.AbstractIL.IL+ILPlatform: Int32 CompareTo(System.Object) FSharp.Compiler.AbstractIL.IL+ILPlatform: Int32 CompareTo(System.Object, System.Collections.IComparer) FSharp.Compiler.AbstractIL.IL+ILPlatform: Int32 GetHashCode() FSharp.Compiler.AbstractIL.IL+ILPlatform: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILPlatform: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILPlatform: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILPlatform: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILPreTypeDef: ILTypeDef GetTypeDef() FSharp.Compiler.AbstractIL.IL+ILPreTypeDef: Microsoft.FSharp.Collections.FSharpList`1[System.String] Namespace @@ -15908,7 +1212,6 @@ FSharp.Compiler.AbstractIL.IL+ILPropertyDef: Boolean get_IsRTSpecialName() FSharp.Compiler.AbstractIL.IL+ILPropertyDef: Boolean get_IsSpecialName() FSharp.Compiler.AbstractIL.IL+ILPropertyDef: ILAttributes CustomAttrs FSharp.Compiler.AbstractIL.IL+ILPropertyDef: ILAttributes get_CustomAttrs() -FSharp.Compiler.AbstractIL.IL+ILPropertyDef: ILPropertyDef With(Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.PropertyAttributes], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef]], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILThisConvention], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILType], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldInit]], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILAttributes]) FSharp.Compiler.AbstractIL.IL+ILPropertyDef: ILThisConvention CallingConv FSharp.Compiler.AbstractIL.IL+ILPropertyDef: ILThisConvention get_CallingConv() FSharp.Compiler.AbstractIL.IL+ILPropertyDef: ILType PropertyType @@ -15927,100 +1230,7 @@ FSharp.Compiler.AbstractIL.IL+ILPropertyDef: System.String Name FSharp.Compiler.AbstractIL.IL+ILPropertyDef: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILPropertyDef: System.String get_Name() FSharp.Compiler.AbstractIL.IL+ILPropertyDef: Void .ctor(System.String, System.Reflection.PropertyAttributes, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef], ILThisConvention, ILType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldInit], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILAttributes) -FSharp.Compiler.AbstractIL.IL+ILPropertyDef: Void .ctor(System.String, System.Reflection.PropertyAttributes, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodRef], ILThisConvention, ILType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldInit], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILAttributesStored, Int32) -FSharp.Compiler.AbstractIL.IL+ILPropertyDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILPropertyDef] AsList -FSharp.Compiler.AbstractIL.IL+ILPropertyDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILPropertyDef] LookupByName(System.String) -FSharp.Compiler.AbstractIL.IL+ILPropertyDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILPropertyDef] get_AsList() FSharp.Compiler.AbstractIL.IL+ILPropertyDefs: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILPropertyRef: Boolean Equals(ILPropertyRef) -FSharp.Compiler.AbstractIL.IL+ILPropertyRef: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILPropertyRef: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILPropertyRef: ILPropertyRef Create(ILTypeRef, System.String) -FSharp.Compiler.AbstractIL.IL+ILPropertyRef: ILTypeRef DeclaringTypeRef -FSharp.Compiler.AbstractIL.IL+ILPropertyRef: ILTypeRef get_DeclaringTypeRef() -FSharp.Compiler.AbstractIL.IL+ILPropertyRef: Int32 CompareTo(ILPropertyRef) -FSharp.Compiler.AbstractIL.IL+ILPropertyRef: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILPropertyRef: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILPropertyRef: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILPropertyRef: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILPropertyRef: System.String Name -FSharp.Compiler.AbstractIL.IL+ILPropertyRef: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILPropertyRef: System.String get_Name() -FSharp.Compiler.AbstractIL.IL+ILReadonly+Tags: Int32 NormalAddress -FSharp.Compiler.AbstractIL.IL+ILReadonly+Tags: Int32 ReadonlyAddress -FSharp.Compiler.AbstractIL.IL+ILReadonly: Boolean Equals(ILReadonly) -FSharp.Compiler.AbstractIL.IL+ILReadonly: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILReadonly: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILReadonly: Boolean IsNormalAddress -FSharp.Compiler.AbstractIL.IL+ILReadonly: Boolean IsReadonlyAddress -FSharp.Compiler.AbstractIL.IL+ILReadonly: Boolean get_IsNormalAddress() -FSharp.Compiler.AbstractIL.IL+ILReadonly: Boolean get_IsReadonlyAddress() -FSharp.Compiler.AbstractIL.IL+ILReadonly: FSharp.Compiler.AbstractIL.IL+ILReadonly+Tags -FSharp.Compiler.AbstractIL.IL+ILReadonly: ILReadonly NormalAddress -FSharp.Compiler.AbstractIL.IL+ILReadonly: ILReadonly ReadonlyAddress -FSharp.Compiler.AbstractIL.IL+ILReadonly: ILReadonly get_NormalAddress() -FSharp.Compiler.AbstractIL.IL+ILReadonly: ILReadonly get_ReadonlyAddress() -FSharp.Compiler.AbstractIL.IL+ILReadonly: Int32 CompareTo(ILReadonly) -FSharp.Compiler.AbstractIL.IL+ILReadonly: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILReadonly: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILReadonly: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILReadonly: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILReadonly: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILReadonly: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILReadonly: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILReferences: Boolean Equals(ILReferences) -FSharp.Compiler.AbstractIL.IL+ILReferences: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILReferences: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILReferences: Int32 CompareTo(ILReferences) -FSharp.Compiler.AbstractIL.IL+ILReferences: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILReferences: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILReferences: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILReferences: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILReferences: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAssemblyRef] AssemblyReferences -FSharp.Compiler.AbstractIL.IL+ILReferences: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAssemblyRef] get_AssemblyReferences() -FSharp.Compiler.AbstractIL.IL+ILReferences: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILModuleRef] ModuleReferences -FSharp.Compiler.AbstractIL.IL+ILReferences: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILModuleRef] get_ModuleReferences() -FSharp.Compiler.AbstractIL.IL+ILReferences: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILReferences: Void .ctor(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAssemblyRef], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILModuleRef]) -FSharp.Compiler.AbstractIL.IL+ILResource: ILAttributes CustomAttrs -FSharp.Compiler.AbstractIL.IL+ILResource: ILAttributes get_CustomAttrs() -FSharp.Compiler.AbstractIL.IL+ILResource: ILAttributesStored CustomAttrsStored -FSharp.Compiler.AbstractIL.IL+ILResource: ILAttributesStored get_CustomAttrsStored() -FSharp.Compiler.AbstractIL.IL+ILResource: ILResourceAccess Access -FSharp.Compiler.AbstractIL.IL+ILResource: ILResourceAccess get_Access() -FSharp.Compiler.AbstractIL.IL+ILResource: ILResourceLocation Location -FSharp.Compiler.AbstractIL.IL+ILResource: ILResourceLocation get_Location() -FSharp.Compiler.AbstractIL.IL+ILResource: Int32 MetadataIndex -FSharp.Compiler.AbstractIL.IL+ILResource: Int32 get_MetadataIndex() -FSharp.Compiler.AbstractIL.IL+ILResource: System.String Name -FSharp.Compiler.AbstractIL.IL+ILResource: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILResource: System.String get_Name() -FSharp.Compiler.AbstractIL.IL+ILResource: Void .ctor(System.String, ILResourceLocation, ILResourceAccess, ILAttributesStored, Int32) -FSharp.Compiler.AbstractIL.IL+ILResourceAccess+Tags: Int32 Private -FSharp.Compiler.AbstractIL.IL+ILResourceAccess+Tags: Int32 Public -FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Boolean Equals(ILResourceAccess) -FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Boolean IsPrivate -FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Boolean IsPublic -FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Boolean get_IsPrivate() -FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Boolean get_IsPublic() -FSharp.Compiler.AbstractIL.IL+ILResourceAccess: FSharp.Compiler.AbstractIL.IL+ILResourceAccess+Tags -FSharp.Compiler.AbstractIL.IL+ILResourceAccess: ILResourceAccess Private -FSharp.Compiler.AbstractIL.IL+ILResourceAccess: ILResourceAccess Public -FSharp.Compiler.AbstractIL.IL+ILResourceAccess: ILResourceAccess get_Private() -FSharp.Compiler.AbstractIL.IL+ILResourceAccess: ILResourceAccess get_Public() -FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Int32 CompareTo(ILResourceAccess) -FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILResourceAccess: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILResourceAccess: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILResourceLocation: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILResources: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILResource] AsList -FSharp.Compiler.AbstractIL.IL+ILResources: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILResource] get_AsList() FSharp.Compiler.AbstractIL.IL+ILResources: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILReturn: ILAttributes CustomAttrs FSharp.Compiler.AbstractIL.IL+ILReturn: ILAttributes get_CustomAttrs() @@ -16035,56 +1245,10 @@ FSharp.Compiler.AbstractIL.IL+ILReturn: Microsoft.FSharp.Core.FSharpOption`1[FSh FSharp.Compiler.AbstractIL.IL+ILReturn: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILNativeType] get_Marshal() FSharp.Compiler.AbstractIL.IL+ILReturn: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILReturn: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILNativeType], ILType, ILAttributesStored, Int32) -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean Equals(ILScopeRef) -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean IsAssembly -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean IsLocal -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean IsLocalRef -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean IsModule -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean IsPrimaryAssembly -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean get_IsAssembly() -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean get_IsLocal() -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean get_IsLocalRef() -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean get_IsModule() -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Boolean get_IsPrimaryAssembly() FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: ILAssemblyRef Item FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: ILAssemblyRef get_Item() -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Int32 CompareTo(ILScopeRef) -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: System.String QualifiedName -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Assembly: System.String get_QualifiedName() -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean Equals(ILScopeRef) -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean IsAssembly -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean IsLocal -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean IsLocalRef -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean IsModule -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean IsPrimaryAssembly -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean get_IsAssembly() -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean get_IsLocal() -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean get_IsLocalRef() -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean get_IsModule() -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Boolean get_IsPrimaryAssembly() FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: ILModuleRef Item FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: ILModuleRef get_Item() -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Int32 CompareTo(ILScopeRef) -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: System.String QualifiedName -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILScopeRef+Module: System.String get_QualifiedName() FSharp.Compiler.AbstractIL.IL+ILScopeRef+Tags: Int32 Assembly FSharp.Compiler.AbstractIL.IL+ILScopeRef+Tags: Int32 Local FSharp.Compiler.AbstractIL.IL+ILScopeRef+Tags: Int32 Module @@ -16121,126 +1285,6 @@ FSharp.Compiler.AbstractIL.IL+ILScopeRef: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILScopeRef: System.String QualifiedName FSharp.Compiler.AbstractIL.IL+ILScopeRef: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILScopeRef: System.String get_QualifiedName() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 Assert -FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 Demand -FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 DemandChoice -FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 Deny -FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 InheritCheck -FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 InheritanceDemandChoice -FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 LinkCheck -FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 LinkDemandChoice -FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 NonCasDemand -FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 NonCasInheritance -FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 NonCasLinkDemand -FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 PermitOnly -FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 PreJitDeny -FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 PreJitGrant -FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 ReqMin -FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 ReqOpt -FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 ReqRefuse -FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags: Int32 Request -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean Equals(ILSecurityAction) -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsAssert -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsDemand -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsDemandChoice -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsDeny -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsInheritCheck -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsInheritanceDemandChoice -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsLinkCheck -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsLinkDemandChoice -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsNonCasDemand -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsNonCasInheritance -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsNonCasLinkDemand -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsPermitOnly -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsPreJitDeny -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsPreJitGrant -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsReqMin -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsReqOpt -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsReqRefuse -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean IsRequest -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsAssert() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsDemand() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsDemandChoice() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsDeny() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsInheritCheck() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsInheritanceDemandChoice() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsLinkCheck() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsLinkDemandChoice() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsNonCasDemand() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsNonCasInheritance() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsNonCasLinkDemand() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsPermitOnly() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsPreJitDeny() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsPreJitGrant() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsReqMin() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsReqOpt() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsReqRefuse() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Boolean get_IsRequest() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: FSharp.Compiler.AbstractIL.IL+ILSecurityAction+Tags -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction Assert -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction Demand -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction DemandChoice -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction Deny -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction InheritCheck -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction InheritanceDemandChoice -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction LinkCheck -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction LinkDemandChoice -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction NonCasDemand -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction NonCasInheritance -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction NonCasLinkDemand -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction PermitOnly -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction PreJitDeny -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction PreJitGrant -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction ReqMin -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction ReqOpt -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction ReqRefuse -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction Request -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_Assert() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_Demand() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_DemandChoice() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_Deny() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_InheritCheck() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_InheritanceDemandChoice() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_LinkCheck() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_LinkDemandChoice() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_NonCasDemand() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_NonCasInheritance() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_NonCasLinkDemand() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_PermitOnly() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_PreJitDeny() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_PreJitGrant() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_ReqMin() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_ReqOpt() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_ReqRefuse() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: ILSecurityAction get_Request() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Int32 CompareTo(ILSecurityAction) -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILSecurityAction: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Boolean Equals(ILSecurityDecl) -FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Byte[] Item2 -FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Byte[] get_Item2() -FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: ILSecurityAction Item1 -FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: ILSecurityAction get_Item1() -FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: ILSecurityDecl NewILSecurityDecl(ILSecurityAction, Byte[]) -FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Int32 CompareTo(ILSecurityDecl) -FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILSecurityDecl: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILSecurityDecls: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILSecurityDecl] AsList -FSharp.Compiler.AbstractIL.IL+ILSecurityDecls: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILSecurityDecl] get_AsList() FSharp.Compiler.AbstractIL.IL+ILSecurityDeclsStored: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILSourceDocument: Boolean Equals(ILSourceDocument) FSharp.Compiler.AbstractIL.IL+ILSourceDocument: Boolean Equals(System.Object) @@ -16260,48 +1304,6 @@ FSharp.Compiler.AbstractIL.IL+ILSourceDocument: Microsoft.FSharp.Core.FSharpOpti FSharp.Compiler.AbstractIL.IL+ILSourceDocument: System.String File FSharp.Compiler.AbstractIL.IL+ILSourceDocument: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILSourceDocument: System.String get_File() -FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Boolean Equals(ILSourceMarker) -FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILSourceMarker: ILSourceDocument Document -FSharp.Compiler.AbstractIL.IL+ILSourceMarker: ILSourceDocument get_Document() -FSharp.Compiler.AbstractIL.IL+ILSourceMarker: ILSourceMarker Create(ILSourceDocument, Int32, Int32, Int32, Int32) -FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 Column -FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 CompareTo(ILSourceMarker) -FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 EndColumn -FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 EndLine -FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 Line -FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 get_Column() -FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 get_EndColumn() -FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 get_EndLine() -FSharp.Compiler.AbstractIL.IL+ILSourceMarker: Int32 get_Line() -FSharp.Compiler.AbstractIL.IL+ILSourceMarker: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILTailcall+Tags: Int32 Normalcall -FSharp.Compiler.AbstractIL.IL+ILTailcall+Tags: Int32 Tailcall -FSharp.Compiler.AbstractIL.IL+ILTailcall: Boolean Equals(ILTailcall) -FSharp.Compiler.AbstractIL.IL+ILTailcall: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILTailcall: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILTailcall: Boolean IsNormalcall -FSharp.Compiler.AbstractIL.IL+ILTailcall: Boolean IsTailcall -FSharp.Compiler.AbstractIL.IL+ILTailcall: Boolean get_IsNormalcall() -FSharp.Compiler.AbstractIL.IL+ILTailcall: Boolean get_IsTailcall() -FSharp.Compiler.AbstractIL.IL+ILTailcall: FSharp.Compiler.AbstractIL.IL+ILTailcall+Tags -FSharp.Compiler.AbstractIL.IL+ILTailcall: ILTailcall Normalcall -FSharp.Compiler.AbstractIL.IL+ILTailcall: ILTailcall Tailcall -FSharp.Compiler.AbstractIL.IL+ILTailcall: ILTailcall get_Normalcall() -FSharp.Compiler.AbstractIL.IL+ILTailcall: ILTailcall get_Tailcall() -FSharp.Compiler.AbstractIL.IL+ILTailcall: Int32 CompareTo(ILTailcall) -FSharp.Compiler.AbstractIL.IL+ILTailcall: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILTailcall: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILTailcall: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILTailcall: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILTailcall: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILTailcall: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILTailcall: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILThisConvention+Tags: Int32 Instance FSharp.Compiler.AbstractIL.IL+ILThisConvention+Tags: Int32 InstanceExplicit FSharp.Compiler.AbstractIL.IL+ILThisConvention+Tags: Int32 Static @@ -16329,378 +1331,24 @@ FSharp.Compiler.AbstractIL.IL+ILThisConvention: Int32 GetHashCode(System.Collect FSharp.Compiler.AbstractIL.IL+ILThisConvention: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILThisConvention: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILThisConvention: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Boolean Equals(ILToken) -FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Boolean IsILField -FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Boolean IsILMethod -FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Boolean IsILType -FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Boolean get_IsILField() -FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Boolean get_IsILMethod() -FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Boolean get_IsILType() -FSharp.Compiler.AbstractIL.IL+ILToken+ILField: ILFieldSpec Item -FSharp.Compiler.AbstractIL.IL+ILToken+ILField: ILFieldSpec get_Item() -FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Int32 CompareTo(ILToken) -FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILToken+ILField: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILToken+ILField: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Boolean Equals(ILToken) -FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Boolean IsILField -FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Boolean IsILMethod -FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Boolean IsILType -FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Boolean get_IsILField() -FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Boolean get_IsILMethod() -FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Boolean get_IsILType() -FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: ILMethodSpec Item -FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: ILMethodSpec get_Item() -FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Int32 CompareTo(ILToken) -FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Boolean Equals(ILToken) -FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Boolean IsILField -FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Boolean IsILMethod -FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Boolean IsILType -FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Boolean get_IsILField() -FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Boolean get_IsILMethod() -FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Boolean get_IsILType() -FSharp.Compiler.AbstractIL.IL+ILToken+ILType: ILType Item -FSharp.Compiler.AbstractIL.IL+ILToken+ILType: ILType get_Item() -FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Int32 CompareTo(ILToken) -FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILToken+ILType: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILToken+ILType: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILToken+Tags: Int32 ILField -FSharp.Compiler.AbstractIL.IL+ILToken+Tags: Int32 ILMethod -FSharp.Compiler.AbstractIL.IL+ILToken+Tags: Int32 ILType -FSharp.Compiler.AbstractIL.IL+ILToken: Boolean Equals(ILToken) -FSharp.Compiler.AbstractIL.IL+ILToken: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILToken: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILToken: Boolean IsILField -FSharp.Compiler.AbstractIL.IL+ILToken: Boolean IsILMethod -FSharp.Compiler.AbstractIL.IL+ILToken: Boolean IsILType -FSharp.Compiler.AbstractIL.IL+ILToken: Boolean get_IsILField() -FSharp.Compiler.AbstractIL.IL+ILToken: Boolean get_IsILMethod() -FSharp.Compiler.AbstractIL.IL+ILToken: Boolean get_IsILType() -FSharp.Compiler.AbstractIL.IL+ILToken: FSharp.Compiler.AbstractIL.IL+ILToken+ILField -FSharp.Compiler.AbstractIL.IL+ILToken: FSharp.Compiler.AbstractIL.IL+ILToken+ILMethod -FSharp.Compiler.AbstractIL.IL+ILToken: FSharp.Compiler.AbstractIL.IL+ILToken+ILType -FSharp.Compiler.AbstractIL.IL+ILToken: FSharp.Compiler.AbstractIL.IL+ILToken+Tags -FSharp.Compiler.AbstractIL.IL+ILToken: ILToken NewILField(ILFieldSpec) -FSharp.Compiler.AbstractIL.IL+ILToken: ILToken NewILMethod(ILMethodSpec) -FSharp.Compiler.AbstractIL.IL+ILToken: ILToken NewILType(ILType) -FSharp.Compiler.AbstractIL.IL+ILToken: Int32 CompareTo(ILToken) -FSharp.Compiler.AbstractIL.IL+ILToken: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILToken: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILToken: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILToken: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILToken: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILToken: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILToken: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean Equals(ILType) -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsBoxed -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsByref -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsFunctionPointer -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsModified -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsNominal -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsPtr -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsTypeVar -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsTyvar -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsValue -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean IsVoid -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsBoxed() -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsByref() -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsFunctionPointer() -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsModified() -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsNominal() -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsPtr() -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsTypeVar() -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsTyvar() -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsValue() -FSharp.Compiler.AbstractIL.IL+ILType+Array: Boolean get_IsVoid() FSharp.Compiler.AbstractIL.IL+ILType+Array: ILArrayShape Item1 FSharp.Compiler.AbstractIL.IL+ILType+Array: ILArrayShape get_Item1() -FSharp.Compiler.AbstractIL.IL+ILType+Array: ILBoxity Boxity -FSharp.Compiler.AbstractIL.IL+ILType+Array: ILBoxity get_Boxity() FSharp.Compiler.AbstractIL.IL+ILType+Array: ILType Item2 FSharp.Compiler.AbstractIL.IL+ILType+Array: ILType get_Item2() -FSharp.Compiler.AbstractIL.IL+ILType+Array: ILTypeRef TypeRef -FSharp.Compiler.AbstractIL.IL+ILType+Array: ILTypeRef get_TypeRef() -FSharp.Compiler.AbstractIL.IL+ILType+Array: ILTypeSpec TypeSpec -FSharp.Compiler.AbstractIL.IL+ILType+Array: ILTypeSpec get_TypeSpec() -FSharp.Compiler.AbstractIL.IL+ILType+Array: Int32 CompareTo(ILType) -FSharp.Compiler.AbstractIL.IL+ILType+Array: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILType+Array: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILType+Array: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILType+Array: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILType+Array: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILType+Array: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILType+Array: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] GenericArgs -FSharp.Compiler.AbstractIL.IL+ILType+Array: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] get_GenericArgs() -FSharp.Compiler.AbstractIL.IL+ILType+Array: System.String BasicQualifiedName -FSharp.Compiler.AbstractIL.IL+ILType+Array: System.String QualifiedName -FSharp.Compiler.AbstractIL.IL+ILType+Array: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILType+Array: System.String get_BasicQualifiedName() -FSharp.Compiler.AbstractIL.IL+ILType+Array: System.String get_QualifiedName() -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean Equals(ILType) -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsBoxed -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsByref -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsFunctionPointer -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsModified -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsNominal -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsPtr -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsTypeVar -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsTyvar -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsValue -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean IsVoid -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsBoxed() -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsByref() -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsFunctionPointer() -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsModified() -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsNominal() -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsPtr() -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsTypeVar() -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsTyvar() -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsValue() -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Boolean get_IsVoid() -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: ILBoxity Boxity -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: ILBoxity get_Boxity() -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: ILTypeRef TypeRef -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: ILTypeRef get_TypeRef() FSharp.Compiler.AbstractIL.IL+ILType+Boxed: ILTypeSpec Item -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: ILTypeSpec TypeSpec FSharp.Compiler.AbstractIL.IL+ILType+Boxed: ILTypeSpec get_Item() -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: ILTypeSpec get_TypeSpec() -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Int32 CompareTo(ILType) -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] GenericArgs -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] get_GenericArgs() -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: System.String BasicQualifiedName -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: System.String QualifiedName -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: System.String get_BasicQualifiedName() -FSharp.Compiler.AbstractIL.IL+ILType+Boxed: System.String get_QualifiedName() -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean Equals(ILType) -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsBoxed -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsByref -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsFunctionPointer -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsModified -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsNominal -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsPtr -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsTypeVar -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsTyvar -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsValue -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean IsVoid -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsBoxed() -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsByref() -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsFunctionPointer() -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsModified() -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsNominal() -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsPtr() -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsTypeVar() -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsTyvar() -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsValue() -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Boolean get_IsVoid() -FSharp.Compiler.AbstractIL.IL+ILType+Byref: ILBoxity Boxity -FSharp.Compiler.AbstractIL.IL+ILType+Byref: ILBoxity get_Boxity() FSharp.Compiler.AbstractIL.IL+ILType+Byref: ILType Item FSharp.Compiler.AbstractIL.IL+ILType+Byref: ILType get_Item() -FSharp.Compiler.AbstractIL.IL+ILType+Byref: ILTypeRef TypeRef -FSharp.Compiler.AbstractIL.IL+ILType+Byref: ILTypeRef get_TypeRef() -FSharp.Compiler.AbstractIL.IL+ILType+Byref: ILTypeSpec TypeSpec -FSharp.Compiler.AbstractIL.IL+ILType+Byref: ILTypeSpec get_TypeSpec() -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Int32 CompareTo(ILType) -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] GenericArgs -FSharp.Compiler.AbstractIL.IL+ILType+Byref: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] get_GenericArgs() -FSharp.Compiler.AbstractIL.IL+ILType+Byref: System.String BasicQualifiedName -FSharp.Compiler.AbstractIL.IL+ILType+Byref: System.String QualifiedName -FSharp.Compiler.AbstractIL.IL+ILType+Byref: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILType+Byref: System.String get_BasicQualifiedName() -FSharp.Compiler.AbstractIL.IL+ILType+Byref: System.String get_QualifiedName() -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean Equals(ILType) -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsBoxed -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsByref -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsFunctionPointer -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsModified -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsNominal -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsPtr -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsTypeVar -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsTyvar -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsValue -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean IsVoid -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsBoxed() -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsByref() -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsFunctionPointer() -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsModified() -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsNominal() -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsPtr() -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsTypeVar() -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsTyvar() -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsValue() -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Boolean get_IsVoid() -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: ILBoxity Boxity -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: ILBoxity get_Boxity() FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: ILCallingSignature Item FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: ILCallingSignature get_Item() -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: ILTypeRef TypeRef -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: ILTypeRef get_TypeRef() -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: ILTypeSpec TypeSpec -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: ILTypeSpec get_TypeSpec() -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Int32 CompareTo(ILType) -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] GenericArgs -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] get_GenericArgs() -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: System.String BasicQualifiedName -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: System.String QualifiedName -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: System.String get_BasicQualifiedName() -FSharp.Compiler.AbstractIL.IL+ILType+FunctionPointer: System.String get_QualifiedName() -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean Equals(ILType) -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsBoxed -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsByref -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsFunctionPointer -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsModified -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsNominal -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsPtr -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsTypeVar -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsTyvar -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsValue -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean IsVoid FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean Item1 -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsBoxed() -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsByref() -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsFunctionPointer() -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsModified() -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsNominal() -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsPtr() -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsTypeVar() -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsTyvar() -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsValue() -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_IsVoid() FSharp.Compiler.AbstractIL.IL+ILType+Modified: Boolean get_Item1() -FSharp.Compiler.AbstractIL.IL+ILType+Modified: ILBoxity Boxity -FSharp.Compiler.AbstractIL.IL+ILType+Modified: ILBoxity get_Boxity() FSharp.Compiler.AbstractIL.IL+ILType+Modified: ILType Item3 FSharp.Compiler.AbstractIL.IL+ILType+Modified: ILType get_Item3() FSharp.Compiler.AbstractIL.IL+ILType+Modified: ILTypeRef Item2 -FSharp.Compiler.AbstractIL.IL+ILType+Modified: ILTypeRef TypeRef FSharp.Compiler.AbstractIL.IL+ILType+Modified: ILTypeRef get_Item2() -FSharp.Compiler.AbstractIL.IL+ILType+Modified: ILTypeRef get_TypeRef() -FSharp.Compiler.AbstractIL.IL+ILType+Modified: ILTypeSpec TypeSpec -FSharp.Compiler.AbstractIL.IL+ILType+Modified: ILTypeSpec get_TypeSpec() -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Int32 CompareTo(ILType) -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] GenericArgs -FSharp.Compiler.AbstractIL.IL+ILType+Modified: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] get_GenericArgs() -FSharp.Compiler.AbstractIL.IL+ILType+Modified: System.String BasicQualifiedName -FSharp.Compiler.AbstractIL.IL+ILType+Modified: System.String QualifiedName -FSharp.Compiler.AbstractIL.IL+ILType+Modified: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILType+Modified: System.String get_BasicQualifiedName() -FSharp.Compiler.AbstractIL.IL+ILType+Modified: System.String get_QualifiedName() -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean Equals(ILType) -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsBoxed -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsByref -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsFunctionPointer -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsModified -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsNominal -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsPtr -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsTypeVar -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsTyvar -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsValue -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean IsVoid -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsBoxed() -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsByref() -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsFunctionPointer() -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsModified() -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsNominal() -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsPtr() -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsTypeVar() -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsTyvar() -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsValue() -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Boolean get_IsVoid() -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: ILBoxity Boxity -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: ILBoxity get_Boxity() FSharp.Compiler.AbstractIL.IL+ILType+Ptr: ILType Item FSharp.Compiler.AbstractIL.IL+ILType+Ptr: ILType get_Item() -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: ILTypeRef TypeRef -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: ILTypeRef get_TypeRef() -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: ILTypeSpec TypeSpec -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: ILTypeSpec get_TypeSpec() -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Int32 CompareTo(ILType) -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] GenericArgs -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] get_GenericArgs() -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: System.String BasicQualifiedName -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: System.String QualifiedName -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: System.String get_BasicQualifiedName() -FSharp.Compiler.AbstractIL.IL+ILType+Ptr: System.String get_QualifiedName() FSharp.Compiler.AbstractIL.IL+ILType+Tags: Int32 Array FSharp.Compiler.AbstractIL.IL+ILType+Tags: Int32 Boxed FSharp.Compiler.AbstractIL.IL+ILType+Tags: Int32 Byref @@ -16710,100 +1358,10 @@ FSharp.Compiler.AbstractIL.IL+ILType+Tags: Int32 Ptr FSharp.Compiler.AbstractIL.IL+ILType+Tags: Int32 TypeVar FSharp.Compiler.AbstractIL.IL+ILType+Tags: Int32 Value FSharp.Compiler.AbstractIL.IL+ILType+Tags: Int32 Void -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean Equals(ILType) -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsBoxed -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsByref -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsFunctionPointer -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsModified -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsNominal -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsPtr -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsTypeVar -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsTyvar -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsValue -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean IsVoid -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsBoxed() -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsByref() -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsFunctionPointer() -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsModified() -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsNominal() -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsPtr() -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsTypeVar() -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsTyvar() -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsValue() -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Boolean get_IsVoid() -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: ILBoxity Boxity -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: ILBoxity get_Boxity() -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: ILTypeRef TypeRef -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: ILTypeRef get_TypeRef() -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: ILTypeSpec TypeSpec -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: ILTypeSpec get_TypeSpec() -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Int32 CompareTo(ILType) -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] GenericArgs -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] get_GenericArgs() -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: System.String BasicQualifiedName -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: System.String QualifiedName -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: System.String get_BasicQualifiedName() -FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: System.String get_QualifiedName() FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: UInt16 Item FSharp.Compiler.AbstractIL.IL+ILType+TypeVar: UInt16 get_Item() -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean Equals(ILType) -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsArray -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsBoxed -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsByref -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsFunctionPointer -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsModified -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsNominal -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsPtr -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsTypeVar -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsTyvar -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsValue -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean IsVoid -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsArray() -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsBoxed() -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsByref() -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsFunctionPointer() -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsModified() -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsNominal() -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsPtr() -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsTypeVar() -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsTyvar() -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsValue() -FSharp.Compiler.AbstractIL.IL+ILType+Value: Boolean get_IsVoid() -FSharp.Compiler.AbstractIL.IL+ILType+Value: ILBoxity Boxity -FSharp.Compiler.AbstractIL.IL+ILType+Value: ILBoxity get_Boxity() -FSharp.Compiler.AbstractIL.IL+ILType+Value: ILTypeRef TypeRef -FSharp.Compiler.AbstractIL.IL+ILType+Value: ILTypeRef get_TypeRef() FSharp.Compiler.AbstractIL.IL+ILType+Value: ILTypeSpec Item -FSharp.Compiler.AbstractIL.IL+ILType+Value: ILTypeSpec TypeSpec FSharp.Compiler.AbstractIL.IL+ILType+Value: ILTypeSpec get_Item() -FSharp.Compiler.AbstractIL.IL+ILType+Value: ILTypeSpec get_TypeSpec() -FSharp.Compiler.AbstractIL.IL+ILType+Value: Int32 CompareTo(ILType) -FSharp.Compiler.AbstractIL.IL+ILType+Value: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILType+Value: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILType+Value: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILType+Value: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILType+Value: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILType+Value: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILType+Value: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] GenericArgs -FSharp.Compiler.AbstractIL.IL+ILType+Value: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] get_GenericArgs() -FSharp.Compiler.AbstractIL.IL+ILType+Value: System.String BasicQualifiedName -FSharp.Compiler.AbstractIL.IL+ILType+Value: System.String QualifiedName -FSharp.Compiler.AbstractIL.IL+ILType+Value: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILType+Value: System.String get_BasicQualifiedName() -FSharp.Compiler.AbstractIL.IL+ILType+Value: System.String get_QualifiedName() FSharp.Compiler.AbstractIL.IL+ILType: Boolean Equals(ILType) FSharp.Compiler.AbstractIL.IL+ILType: Boolean Equals(System.Object) FSharp.Compiler.AbstractIL.IL+ILType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -16838,8 +1396,6 @@ FSharp.Compiler.AbstractIL.IL+ILType: FSharp.Compiler.AbstractIL.IL+ILType+Ptr FSharp.Compiler.AbstractIL.IL+ILType: FSharp.Compiler.AbstractIL.IL+ILType+Tags FSharp.Compiler.AbstractIL.IL+ILType: FSharp.Compiler.AbstractIL.IL+ILType+TypeVar FSharp.Compiler.AbstractIL.IL+ILType: FSharp.Compiler.AbstractIL.IL+ILType+Value -FSharp.Compiler.AbstractIL.IL+ILType: ILBoxity Boxity -FSharp.Compiler.AbstractIL.IL+ILType: ILBoxity get_Boxity() FSharp.Compiler.AbstractIL.IL+ILType: ILType NewArray(ILArrayShape, ILType) FSharp.Compiler.AbstractIL.IL+ILType: ILType NewBoxed(ILTypeSpec) FSharp.Compiler.AbstractIL.IL+ILType: ILType NewByref(ILType) @@ -16909,18 +1465,6 @@ FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILPropertyDefs get_Properties() FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILSecurityDecls SecurityDecls FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILSecurityDecls get_SecurityDecls() FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef With(Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.TypeAttributes], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef]], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILType]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodDefs], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILTypeDefs], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldDefs], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILMethodImplDefs], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILEventDefs], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILPropertyDefs], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILAttributes], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSecurityDecls]) -FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithAbstract(Boolean) -FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithAccess(ILTypeDefAccess) -FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithEncoding(ILDefaultPInvokeEncoding) -FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithHasSecurity(Boolean) -FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithImport(Boolean) -FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithInitSemantics(ILTypeInit) -FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithKind(ILTypeDefKind) -FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithLayout(ILTypeDefLayout) -FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithNestedAccess(ILMemberAccess) -FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithSealed(Boolean) -FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithSerializable(Boolean) -FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDef WithSpecialName(Boolean) FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDefAccess Access FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDefAccess get_Access() FSharp.Compiler.AbstractIL.IL+ILTypeDef: ILTypeDefLayout Layout @@ -16938,26 +1482,8 @@ FSharp.Compiler.AbstractIL.IL+ILTypeDef: System.Reflection.TypeAttributes get_At FSharp.Compiler.AbstractIL.IL+ILTypeDef: System.String Name FSharp.Compiler.AbstractIL.IL+ILTypeDef: System.String get_Name() FSharp.Compiler.AbstractIL.IL+ILTypeDef: Void .ctor(System.String, System.Reflection.TypeAttributes, ILTypeDefLayout, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILType], ILMethodDefs, ILTypeDefs, ILFieldDefs, ILMethodImplDefs, ILEventDefs, ILPropertyDefs, ILSecurityDecls, ILAttributes) -FSharp.Compiler.AbstractIL.IL+ILTypeDef: Void .ctor(System.String, System.Reflection.TypeAttributes, ILTypeDefLayout, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILType], ILMethodDefs, ILTypeDefs, ILFieldDefs, ILMethodImplDefs, ILEventDefs, ILPropertyDefs, ILSecurityDeclsStored, ILAttributesStored, Int32) -FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Boolean Equals(ILTypeDefAccess) -FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Boolean IsNested -FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Boolean IsPrivate -FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Boolean IsPublic -FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Boolean get_IsNested() -FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Boolean get_IsPrivate() -FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Boolean get_IsPublic() FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: ILMemberAccess Item FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: ILMemberAccess get_Item() -FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Int32 CompareTo(ILTypeDefAccess) -FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Nested: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Tags: Int32 Nested FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Tags: Int32 Private FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess+Tags: Int32 Public @@ -17022,44 +1548,10 @@ FSharp.Compiler.AbstractIL.IL+ILTypeDefKind: Int32 GetHashCode(System.Collection FSharp.Compiler.AbstractIL.IL+ILTypeDefKind: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILTypeDefKind: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILTypeDefKind: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Boolean Equals(ILTypeDefLayout) -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Boolean IsAuto -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Boolean IsExplicit -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Boolean IsSequential -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Boolean get_IsAuto() -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Boolean get_IsExplicit() -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Boolean get_IsSequential() FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: ILTypeDefLayoutInfo Item FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: ILTypeDefLayoutInfo get_Item() -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Int32 CompareTo(ILTypeDefLayout) -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Explicit: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Boolean Equals(ILTypeDefLayout) -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Boolean IsAuto -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Boolean IsExplicit -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Boolean IsSequential -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Boolean get_IsAuto() -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Boolean get_IsExplicit() -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Boolean get_IsSequential() FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: ILTypeDefLayoutInfo Item FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: ILTypeDefLayoutInfo get_Item() -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Int32 CompareTo(ILTypeDefLayout) -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Sequential: System.String ToString() FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Tags: Int32 Auto FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Tags: Int32 Explicit FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout+Tags: Int32 Sequential @@ -17087,28 +1579,6 @@ FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout: Int32 GetHashCode(System.Collecti FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout: Int32 Tag FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Boolean Equals(ILTypeDefLayoutInfo) -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Int32 CompareTo(ILTypeDefLayoutInfo) -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] Size -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] get_Size() -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Microsoft.FSharp.Core.FSharpOption`1[System.UInt16] Pack -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Microsoft.FSharp.Core.FSharpOption`1[System.UInt16] get_Pack() -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.UInt16]) -FSharp.Compiler.AbstractIL.IL+ILTypeDefStored: System.String ToString() -FSharp.Compiler.AbstractIL.IL+ILTypeDefs: ILPreTypeDef[] AsArrayOfPreTypeDefs -FSharp.Compiler.AbstractIL.IL+ILTypeDefs: ILPreTypeDef[] get_AsArrayOfPreTypeDefs() -FSharp.Compiler.AbstractIL.IL+ILTypeDefs: ILTypeDef FindByName(System.String) -FSharp.Compiler.AbstractIL.IL+ILTypeDefs: ILTypeDef[] AsArray -FSharp.Compiler.AbstractIL.IL+ILTypeDefs: ILTypeDef[] get_AsArray() -FSharp.Compiler.AbstractIL.IL+ILTypeDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILTypeDef] AsList -FSharp.Compiler.AbstractIL.IL+ILTypeDefs: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILTypeDef] get_AsList() FSharp.Compiler.AbstractIL.IL+ILTypeInit+Tags: Int32 BeforeField FSharp.Compiler.AbstractIL.IL+ILTypeInit+Tags: Int32 OnAny FSharp.Compiler.AbstractIL.IL+ILTypeInit: Boolean Equals(ILTypeInit) @@ -17187,63 +1657,18 @@ FSharp.Compiler.AbstractIL.IL+ILVersionInfo: UInt16 get_Major() FSharp.Compiler.AbstractIL.IL+ILVersionInfo: UInt16 get_Minor() FSharp.Compiler.AbstractIL.IL+ILVersionInfo: UInt16 get_Revision() FSharp.Compiler.AbstractIL.IL+ILVersionInfo: Void .ctor(UInt16, UInt16, UInt16, UInt16) -FSharp.Compiler.AbstractIL.IL+ILVolatility+Tags: Int32 Nonvolatile -FSharp.Compiler.AbstractIL.IL+ILVolatility+Tags: Int32 Volatile -FSharp.Compiler.AbstractIL.IL+ILVolatility: Boolean Equals(ILVolatility) -FSharp.Compiler.AbstractIL.IL+ILVolatility: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+ILVolatility: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILVolatility: Boolean IsNonvolatile -FSharp.Compiler.AbstractIL.IL+ILVolatility: Boolean IsVolatile -FSharp.Compiler.AbstractIL.IL+ILVolatility: Boolean get_IsNonvolatile() -FSharp.Compiler.AbstractIL.IL+ILVolatility: Boolean get_IsVolatile() -FSharp.Compiler.AbstractIL.IL+ILVolatility: FSharp.Compiler.AbstractIL.IL+ILVolatility+Tags -FSharp.Compiler.AbstractIL.IL+ILVolatility: ILVolatility Nonvolatile -FSharp.Compiler.AbstractIL.IL+ILVolatility: ILVolatility Volatile -FSharp.Compiler.AbstractIL.IL+ILVolatility: ILVolatility get_Nonvolatile() -FSharp.Compiler.AbstractIL.IL+ILVolatility: ILVolatility get_Volatile() -FSharp.Compiler.AbstractIL.IL+ILVolatility: Int32 CompareTo(ILVolatility) -FSharp.Compiler.AbstractIL.IL+ILVolatility: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+ILVolatility: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+ILVolatility: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+ILVolatility: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+ILVolatility: Int32 Tag -FSharp.Compiler.AbstractIL.IL+ILVolatility: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+ILVolatility: System.String ToString() -FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Boolean IsAbstract -FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Boolean IsIL -FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Boolean IsNative -FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Boolean IsNotAvailable -FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Boolean IsPInvoke -FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Boolean get_IsAbstract() -FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Boolean get_IsIL() -FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Boolean get_IsNative() -FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Boolean get_IsNotAvailable() -FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Boolean get_IsPInvoke() -FSharp.Compiler.AbstractIL.IL+MethodBody+IL: ILMethodBody Item -FSharp.Compiler.AbstractIL.IL+MethodBody+IL: ILMethodBody get_Item() -FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Int32 Tag -FSharp.Compiler.AbstractIL.IL+MethodBody+IL: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+MethodBody+IL: System.String ToString() -FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Boolean IsAbstract -FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Boolean IsIL -FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Boolean IsNative -FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Boolean IsNotAvailable -FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Boolean IsPInvoke -FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Boolean get_IsAbstract() -FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Boolean get_IsIL() -FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Boolean get_IsNative() -FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Boolean get_IsNotAvailable() -FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Boolean get_IsPInvoke() -FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Int32 Tag -FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: PInvokeMethod Item -FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: PInvokeMethod get_Item() -FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: System.String ToString() +FSharp.Compiler.AbstractIL.IL+MethodBody+IL: System.Lazy`1[FSharp.Compiler.AbstractIL.IL+ILMethodBody] Item +FSharp.Compiler.AbstractIL.IL+MethodBody+IL: System.Lazy`1[FSharp.Compiler.AbstractIL.IL+ILMethodBody] get_Item() +FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: System.Lazy`1[FSharp.Compiler.AbstractIL.IL+PInvokeMethod] Item +FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke: System.Lazy`1[FSharp.Compiler.AbstractIL.IL+PInvokeMethod] get_Item() FSharp.Compiler.AbstractIL.IL+MethodBody+Tags: Int32 Abstract FSharp.Compiler.AbstractIL.IL+MethodBody+Tags: Int32 IL FSharp.Compiler.AbstractIL.IL+MethodBody+Tags: Int32 Native FSharp.Compiler.AbstractIL.IL+MethodBody+Tags: Int32 NotAvailable FSharp.Compiler.AbstractIL.IL+MethodBody+Tags: Int32 PInvoke +FSharp.Compiler.AbstractIL.IL+MethodBody: Boolean Equals(MethodBody) +FSharp.Compiler.AbstractIL.IL+MethodBody: Boolean Equals(System.Object) +FSharp.Compiler.AbstractIL.IL+MethodBody: Boolean Equals(System.Object, System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+MethodBody: Boolean IsAbstract FSharp.Compiler.AbstractIL.IL+MethodBody: Boolean IsIL FSharp.Compiler.AbstractIL.IL+MethodBody: Boolean IsNative @@ -17257,329 +1682,23 @@ FSharp.Compiler.AbstractIL.IL+MethodBody: Boolean get_IsPInvoke() FSharp.Compiler.AbstractIL.IL+MethodBody: FSharp.Compiler.AbstractIL.IL+MethodBody+IL FSharp.Compiler.AbstractIL.IL+MethodBody: FSharp.Compiler.AbstractIL.IL+MethodBody+PInvoke FSharp.Compiler.AbstractIL.IL+MethodBody: FSharp.Compiler.AbstractIL.IL+MethodBody+Tags +FSharp.Compiler.AbstractIL.IL+MethodBody: Int32 GetHashCode() +FSharp.Compiler.AbstractIL.IL+MethodBody: Int32 GetHashCode(System.Collections.IEqualityComparer) FSharp.Compiler.AbstractIL.IL+MethodBody: Int32 Tag FSharp.Compiler.AbstractIL.IL+MethodBody: Int32 get_Tag() FSharp.Compiler.AbstractIL.IL+MethodBody: MethodBody Abstract FSharp.Compiler.AbstractIL.IL+MethodBody: MethodBody Native -FSharp.Compiler.AbstractIL.IL+MethodBody: MethodBody NewIL(ILMethodBody) -FSharp.Compiler.AbstractIL.IL+MethodBody: MethodBody NewPInvoke(PInvokeMethod) +FSharp.Compiler.AbstractIL.IL+MethodBody: MethodBody NewIL(System.Lazy`1[FSharp.Compiler.AbstractIL.IL+ILMethodBody]) +FSharp.Compiler.AbstractIL.IL+MethodBody: MethodBody NewPInvoke(System.Lazy`1[FSharp.Compiler.AbstractIL.IL+PInvokeMethod]) FSharp.Compiler.AbstractIL.IL+MethodBody: MethodBody NotAvailable FSharp.Compiler.AbstractIL.IL+MethodBody: MethodBody get_Abstract() FSharp.Compiler.AbstractIL.IL+MethodBody: MethodBody get_Native() FSharp.Compiler.AbstractIL.IL+MethodBody: MethodBody get_NotAvailable() FSharp.Compiler.AbstractIL.IL+MethodBody: System.String ToString() -FSharp.Compiler.AbstractIL.IL+MethodCodeKind+Tags: Int32 IL -FSharp.Compiler.AbstractIL.IL+MethodCodeKind+Tags: Int32 Native -FSharp.Compiler.AbstractIL.IL+MethodCodeKind+Tags: Int32 Runtime -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Boolean Equals(MethodCodeKind) -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Boolean IsIL -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Boolean IsNative -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Boolean IsRuntime -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Boolean get_IsIL() -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Boolean get_IsNative() -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Boolean get_IsRuntime() -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: FSharp.Compiler.AbstractIL.IL+MethodCodeKind+Tags -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Int32 CompareTo(MethodCodeKind) -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Int32 Tag -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: MethodCodeKind IL -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: MethodCodeKind Native -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: MethodCodeKind Runtime -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: MethodCodeKind get_IL() -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: MethodCodeKind get_Native() -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: MethodCodeKind get_Runtime() -FSharp.Compiler.AbstractIL.IL+MethodCodeKind: System.String ToString() -FSharp.Compiler.AbstractIL.IL+MethodKind+Tags: Int32 Cctor -FSharp.Compiler.AbstractIL.IL+MethodKind+Tags: Int32 Ctor -FSharp.Compiler.AbstractIL.IL+MethodKind+Tags: Int32 NonVirtual -FSharp.Compiler.AbstractIL.IL+MethodKind+Tags: Int32 Static -FSharp.Compiler.AbstractIL.IL+MethodKind+Tags: Int32 Virtual -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean Equals(MethodKind) -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean IsCctor -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean IsCtor -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean IsNonVirtual -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean IsStatic -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean IsVirtual -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean get_IsCctor() -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean get_IsCtor() -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean get_IsNonVirtual() -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean get_IsStatic() -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Boolean get_IsVirtual() -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: ILMethodVirtualInfo Item -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: ILMethodVirtualInfo get_Item() -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Int32 CompareTo(MethodKind) -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Int32 Tag -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual: System.String ToString() -FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean Equals(MethodKind) -FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean IsCctor -FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean IsCtor -FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean IsNonVirtual -FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean IsStatic -FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean IsVirtual -FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean get_IsCctor() -FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean get_IsCtor() -FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean get_IsNonVirtual() -FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean get_IsStatic() -FSharp.Compiler.AbstractIL.IL+MethodKind: Boolean get_IsVirtual() -FSharp.Compiler.AbstractIL.IL+MethodKind: FSharp.Compiler.AbstractIL.IL+MethodKind+Tags -FSharp.Compiler.AbstractIL.IL+MethodKind: FSharp.Compiler.AbstractIL.IL+MethodKind+Virtual -FSharp.Compiler.AbstractIL.IL+MethodKind: Int32 CompareTo(MethodKind) -FSharp.Compiler.AbstractIL.IL+MethodKind: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+MethodKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+MethodKind: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+MethodKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+MethodKind: Int32 Tag -FSharp.Compiler.AbstractIL.IL+MethodKind: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+MethodKind: MethodKind Cctor -FSharp.Compiler.AbstractIL.IL+MethodKind: MethodKind Ctor -FSharp.Compiler.AbstractIL.IL+MethodKind: MethodKind NewVirtual(ILMethodVirtualInfo) -FSharp.Compiler.AbstractIL.IL+MethodKind: MethodKind NonVirtual -FSharp.Compiler.AbstractIL.IL+MethodKind: MethodKind Static -FSharp.Compiler.AbstractIL.IL+MethodKind: MethodKind get_Cctor() -FSharp.Compiler.AbstractIL.IL+MethodKind: MethodKind get_Ctor() -FSharp.Compiler.AbstractIL.IL+MethodKind: MethodKind get_NonVirtual() -FSharp.Compiler.AbstractIL.IL+MethodKind: MethodKind get_Static() -FSharp.Compiler.AbstractIL.IL+MethodKind: System.String ToString() -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention+Tags: Int32 Cdecl -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention+Tags: Int32 Fastcall -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention+Tags: Int32 None -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention+Tags: Int32 Stdcall -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention+Tags: Int32 Thiscall -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention+Tags: Int32 WinApi -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean Equals(PInvokeCallingConvention) -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean IsCdecl -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean IsFastcall -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean IsNone -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean IsStdcall -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean IsThiscall -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean IsWinApi -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean get_IsCdecl() -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean get_IsFastcall() -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean get_IsNone() -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean get_IsStdcall() -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean get_IsThiscall() -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Boolean get_IsWinApi() -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention+Tags -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Int32 CompareTo(PInvokeCallingConvention) -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Int32 Tag -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention Cdecl -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention Fastcall -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention None -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention Stdcall -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention Thiscall -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention WinApi -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention get_Cdecl() -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention get_Fastcall() -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention get_None() -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention get_Stdcall() -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention get_Thiscall() -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: PInvokeCallingConvention get_WinApi() -FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention: System.String ToString() -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit+Tags: Int32 Disabled -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit+Tags: Int32 Enabled -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit+Tags: Int32 UseAssembly -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Boolean Equals(PInvokeCharBestFit) -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Boolean IsDisabled -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Boolean IsEnabled -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Boolean IsUseAssembly -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Boolean get_IsDisabled() -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Boolean get_IsEnabled() -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Boolean get_IsUseAssembly() -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit+Tags -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Int32 CompareTo(PInvokeCharBestFit) -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Int32 Tag -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: PInvokeCharBestFit Disabled -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: PInvokeCharBestFit Enabled -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: PInvokeCharBestFit UseAssembly -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: PInvokeCharBestFit get_Disabled() -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: PInvokeCharBestFit get_Enabled() -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: PInvokeCharBestFit get_UseAssembly() -FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit: System.String ToString() -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding+Tags: Int32 Ansi -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding+Tags: Int32 Auto -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding+Tags: Int32 None -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding+Tags: Int32 Unicode -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean Equals(PInvokeCharEncoding) -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean IsAnsi -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean IsAuto -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean IsNone -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean IsUnicode -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean get_IsAnsi() -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean get_IsAuto() -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean get_IsNone() -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Boolean get_IsUnicode() -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding+Tags -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Int32 CompareTo(PInvokeCharEncoding) -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Int32 Tag -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: PInvokeCharEncoding Ansi -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: PInvokeCharEncoding Auto -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: PInvokeCharEncoding None -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: PInvokeCharEncoding Unicode -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: PInvokeCharEncoding get_Ansi() -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: PInvokeCharEncoding get_Auto() -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: PInvokeCharEncoding get_None() -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: PInvokeCharEncoding get_Unicode() -FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding: System.String ToString() -FSharp.Compiler.AbstractIL.IL+PInvokeMethod: Boolean LastError -FSharp.Compiler.AbstractIL.IL+PInvokeMethod: Boolean NoMangle -FSharp.Compiler.AbstractIL.IL+PInvokeMethod: Boolean get_LastError() -FSharp.Compiler.AbstractIL.IL+PInvokeMethod: Boolean get_NoMangle() -FSharp.Compiler.AbstractIL.IL+PInvokeMethod: ILModuleRef Where -FSharp.Compiler.AbstractIL.IL+PInvokeMethod: ILModuleRef get_Where() -FSharp.Compiler.AbstractIL.IL+PInvokeMethod: PInvokeCallingConvention CallingConv -FSharp.Compiler.AbstractIL.IL+PInvokeMethod: PInvokeCallingConvention get_CallingConv() -FSharp.Compiler.AbstractIL.IL+PInvokeMethod: PInvokeCharBestFit CharBestFit -FSharp.Compiler.AbstractIL.IL+PInvokeMethod: PInvokeCharBestFit get_CharBestFit() -FSharp.Compiler.AbstractIL.IL+PInvokeMethod: PInvokeCharEncoding CharEncoding -FSharp.Compiler.AbstractIL.IL+PInvokeMethod: PInvokeCharEncoding get_CharEncoding() -FSharp.Compiler.AbstractIL.IL+PInvokeMethod: PInvokeThrowOnUnmappableChar ThrowOnUnmappableChar -FSharp.Compiler.AbstractIL.IL+PInvokeMethod: PInvokeThrowOnUnmappableChar get_ThrowOnUnmappableChar() -FSharp.Compiler.AbstractIL.IL+PInvokeMethod: System.String Name -FSharp.Compiler.AbstractIL.IL+PInvokeMethod: System.String ToString() -FSharp.Compiler.AbstractIL.IL+PInvokeMethod: System.String get_Name() -FSharp.Compiler.AbstractIL.IL+PInvokeMethod: Void .ctor(ILModuleRef, System.String, PInvokeCallingConvention, PInvokeCharEncoding, Boolean, Boolean, PInvokeThrowOnUnmappableChar, PInvokeCharBestFit) -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar+Tags: Int32 Disabled -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar+Tags: Int32 Enabled -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar+Tags: Int32 UseAssembly -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Boolean Equals(PInvokeThrowOnUnmappableChar) -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Boolean IsDisabled -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Boolean IsEnabled -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Boolean IsUseAssembly -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Boolean get_IsDisabled() -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Boolean get_IsEnabled() -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Boolean get_IsUseAssembly() -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar+Tags -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Int32 CompareTo(PInvokeThrowOnUnmappableChar) -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Int32 Tag -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: PInvokeThrowOnUnmappableChar Disabled -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: PInvokeThrowOnUnmappableChar Enabled -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: PInvokeThrowOnUnmappableChar UseAssembly -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: PInvokeThrowOnUnmappableChar get_Disabled() -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: PInvokeThrowOnUnmappableChar get_Enabled() -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: PInvokeThrowOnUnmappableChar get_UseAssembly() -FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar: System.String ToString() -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly+Tags: Int32 Mscorlib -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly+Tags: Int32 NetStandard -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly+Tags: Int32 System_Runtime -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Boolean Equals(PrimaryAssembly) -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Boolean IsMscorlib -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Boolean IsNetStandard -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Boolean IsSystem_Runtime -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Boolean get_IsMscorlib() -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Boolean get_IsNetStandard() -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Boolean get_IsSystem_Runtime() -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: FSharp.Compiler.AbstractIL.IL+PrimaryAssembly+Tags -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Int32 CompareTo(PrimaryAssembly) -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Int32 Tag -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: PrimaryAssembly Mscorlib -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: PrimaryAssembly NetStandard -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: PrimaryAssembly System_Runtime -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: PrimaryAssembly get_Mscorlib() -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: PrimaryAssembly get_NetStandard() -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: PrimaryAssembly get_System_Runtime() -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: System.String Name -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: System.String ToString() -FSharp.Compiler.AbstractIL.IL+PrimaryAssembly: System.String get_Name() -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean Equals(PublicKey) -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean IsKey -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean IsKeyToken -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean IsPublicKey -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean IsPublicKeyToken -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean get_IsKey() -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean get_IsKeyToken() -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean get_IsPublicKey() -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Boolean get_IsPublicKeyToken() FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Byte[] Item -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Byte[] Key -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Byte[] KeyToken FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Byte[] get_Item() -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Byte[] get_Key() -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Byte[] get_KeyToken() -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Int32 CompareTo(PublicKey) -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Int32 Tag -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKey: System.String ToString() -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean Equals(PublicKey) -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean IsKey -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean IsKeyToken -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean IsPublicKey -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean IsPublicKeyToken -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean get_IsKey() -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean get_IsKeyToken() -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean get_IsPublicKey() -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Boolean get_IsPublicKeyToken() FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Byte[] Item -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Byte[] Key -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Byte[] KeyToken FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Byte[] get_Item() -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Byte[] get_Key() -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Byte[] get_KeyToken() -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Int32 CompareTo(PublicKey) -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Int32 Tag -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: Int32 get_Tag() -FSharp.Compiler.AbstractIL.IL+PublicKey+PublicKeyToken: System.String ToString() FSharp.Compiler.AbstractIL.IL+PublicKey+Tags: Int32 PublicKey FSharp.Compiler.AbstractIL.IL+PublicKey+Tags: Int32 PublicKeyToken FSharp.Compiler.AbstractIL.IL+PublicKey: Boolean Equals(PublicKey) @@ -17611,28 +1730,6 @@ FSharp.Compiler.AbstractIL.IL+PublicKey: PublicKey KeyAsToken(Byte[]) FSharp.Compiler.AbstractIL.IL+PublicKey: PublicKey NewPublicKey(Byte[]) FSharp.Compiler.AbstractIL.IL+PublicKey: PublicKey NewPublicKeyToken(Byte[]) FSharp.Compiler.AbstractIL.IL+PublicKey: System.String ToString() -FSharp.Compiler.AbstractIL.IL: Boolean isILArrTy(ILType) -FSharp.Compiler.AbstractIL.IL: Boolean isILBoolTy(ILGlobals, ILType) -FSharp.Compiler.AbstractIL.IL: Boolean isILByteTy(ILGlobals, ILType) -FSharp.Compiler.AbstractIL.IL: Boolean isILCharTy(ILGlobals, ILType) -FSharp.Compiler.AbstractIL.IL: Boolean isILDoubleTy(ILGlobals, ILType) -FSharp.Compiler.AbstractIL.IL: Boolean isILInt16Ty(ILGlobals, ILType) -FSharp.Compiler.AbstractIL.IL: Boolean isILInt32Ty(ILGlobals, ILType) -FSharp.Compiler.AbstractIL.IL: Boolean isILInt64Ty(ILGlobals, ILType) -FSharp.Compiler.AbstractIL.IL: Boolean isILIntPtrTy(ILGlobals, ILType) -FSharp.Compiler.AbstractIL.IL: Boolean isILObjectTy(ILGlobals, ILType) -FSharp.Compiler.AbstractIL.IL: Boolean isILSByteTy(ILGlobals, ILType) -FSharp.Compiler.AbstractIL.IL: Boolean isILSingleTy(ILGlobals, ILType) -FSharp.Compiler.AbstractIL.IL: Boolean isILStringTy(ILGlobals, ILType) -FSharp.Compiler.AbstractIL.IL: Boolean isILTypedReferenceTy(ILGlobals, ILType) -FSharp.Compiler.AbstractIL.IL: Boolean isILUInt16Ty(ILGlobals, ILType) -FSharp.Compiler.AbstractIL.IL: Boolean isILUInt32Ty(ILGlobals, ILType) -FSharp.Compiler.AbstractIL.IL: Boolean isILUInt64Ty(ILGlobals, ILType) -FSharp.Compiler.AbstractIL.IL: Boolean isILUIntPtrTy(ILGlobals, ILType) -FSharp.Compiler.AbstractIL.IL: Boolean isTypeNameForGlobalFunctions(System.String) -FSharp.Compiler.AbstractIL.IL: Byte[] getCustomAttrData(ILGlobals, ILAttribute) -FSharp.Compiler.AbstractIL.IL: Byte[] sha1HashBytes(Byte[]) -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILAlignment FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILArgConvention FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILArrayShape FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILAssemblyLongevity @@ -17642,20 +1739,11 @@ FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILAttribElem FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILAttribute FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILAttributes FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILAttributesStored -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILBasicType -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILBoxity FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILCallingConv FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILCallingSignature -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILCode -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILComparisonInstr -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILConst FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILDefaultPInvokeEncoding -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILEnumInfo FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILEventDef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILEventDefs -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILEventRef -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILExceptionClause -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILExceptionSpec FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILExportedTypeOrForwarder FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILExportedTypesAndForwarders FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILFieldDef @@ -17665,160 +1753,56 @@ FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILFieldRef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILFieldSpec FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILGenericVariance -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILGlobals -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILInstr -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILLazyMethodBody -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILLocal -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILLocalDebugMapping -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILLocalsAllocator FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILMemberAccess -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILMethodBody FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILMethodDef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILMethodDefs FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILMethodImplDef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILMethodImplDefs FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILMethodRef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILMethodSpec -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILMethodVirtualInfo FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILModuleDef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILModuleRef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILNativeResource FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILNativeType -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILNativeVariant FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILNestedExportedType FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILNestedExportedTypes -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILOverridesSpec FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILParameter FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILPlatform FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILPreTypeDef -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILPreTypeDefImpl FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILPropertyDef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILPropertyDefs -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILPropertyRef -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILReadonly -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILReferences -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILResource -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILResourceAccess -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILResourceLocation FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILResources FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILReturn FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILScopeRef -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILSecurityAction -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILSecurityDecl -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILSecurityDecls FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILSecurityDeclsStored FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILSourceDocument -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILSourceMarker -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTailcall FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILThisConvention -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILToken FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILType FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTypeDef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTypeDefAccess FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTypeDefKind FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTypeDefLayout -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTypeDefLayoutInfo -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTypeDefStored FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTypeDefs FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTypeInit FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTypeRef FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILTypeSpec FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILVersionInfo -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+ILVolatility FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+MethodBody -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+MethodCodeKind -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+MethodKind -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+PInvokeCallingConvention -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+PInvokeCharBestFit -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+PInvokeCharEncoding -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+PInvokeMethod -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+PInvokeThrowOnUnmappableChar -FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+PrimaryAssembly FSharp.Compiler.AbstractIL.IL: FSharp.Compiler.AbstractIL.IL+PublicKey -FSharp.Compiler.AbstractIL.IL: ILAssemblyRef mkRefToILAssembly(ILAssemblyManifest) -FSharp.Compiler.AbstractIL.IL: ILAssemblyRef mkSimpleAssemblyRef(System.String) -FSharp.Compiler.AbstractIL.IL: ILAttribute mkILCustomAttribMethRef(ILGlobals, ILMethodSpec, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`4[System.String,FSharp.Compiler.AbstractIL.IL+ILType,System.Boolean,FSharp.Compiler.AbstractIL.IL+ILAttribElem]]) -FSharp.Compiler.AbstractIL.IL: ILAttribute mkILCustomAttribute(ILGlobals, ILTypeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`4[System.String,FSharp.Compiler.AbstractIL.IL+ILType,System.Boolean,FSharp.Compiler.AbstractIL.IL+ILAttribElem]]) FSharp.Compiler.AbstractIL.IL: ILAttributes emptyILCustomAttrs FSharp.Compiler.AbstractIL.IL: ILAttributes get_emptyILCustomAttrs() FSharp.Compiler.AbstractIL.IL: ILAttributes mkILCustomAttrs(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribute]) FSharp.Compiler.AbstractIL.IL: ILAttributes mkILCustomAttrsFromArray(ILAttribute[]) -FSharp.Compiler.AbstractIL.IL: ILAttributesStored mkILCustomAttrsReader(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,FSharp.Compiler.AbstractIL.IL+ILAttribute[]]) FSharp.Compiler.AbstractIL.IL: ILAttributesStored storeILCustomAttrs(ILAttributes) -FSharp.Compiler.AbstractIL.IL: ILCallingSignature mkILCallSig(ILCallingConv, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType) -FSharp.Compiler.AbstractIL.IL: ILCode buildILCode(System.String, System.Collections.Generic.Dictionary`2[System.Int32,System.Int32], ILInstr[], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILExceptionSpec], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocalDebugInfo]) -FSharp.Compiler.AbstractIL.IL: ILCode nonBranchingInstrsToCode(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILInstr]) -FSharp.Compiler.AbstractIL.IL: ILCode prependInstrsToCode(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILInstr], ILCode) -FSharp.Compiler.AbstractIL.IL: ILEnumInfo computeILEnumInfo(System.String, ILFieldDefs) FSharp.Compiler.AbstractIL.IL: ILEventDefs emptyILEvents FSharp.Compiler.AbstractIL.IL: ILEventDefs get_emptyILEvents() FSharp.Compiler.AbstractIL.IL: ILEventDefs mkILEvents(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILEventDef]) FSharp.Compiler.AbstractIL.IL: ILEventDefs mkILEventsLazy(System.Lazy`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILEventDef]]) -FSharp.Compiler.AbstractIL.IL: ILExportedTypeOrForwarder mkTypeForwarder(ILScopeRef, System.String, ILNestedExportedTypes, ILAttributes, ILTypeDefAccess) FSharp.Compiler.AbstractIL.IL: ILExportedTypesAndForwarders mkILExportedTypes(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILExportedTypeOrForwarder]) -FSharp.Compiler.AbstractIL.IL: ILExportedTypesAndForwarders mkILExportedTypesLazy(System.Lazy`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILExportedTypeOrForwarder]]) -FSharp.Compiler.AbstractIL.IL: ILFieldDef mkILInstanceField(System.String, ILType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldInit], ILMemberAccess) -FSharp.Compiler.AbstractIL.IL: ILFieldDef mkILLiteralField(System.String, ILType, ILFieldInit, Microsoft.FSharp.Core.FSharpOption`1[System.Byte[]], ILMemberAccess) -FSharp.Compiler.AbstractIL.IL: ILFieldDef mkILStaticField(System.String, ILType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILFieldInit], Microsoft.FSharp.Core.FSharpOption`1[System.Byte[]], ILMemberAccess) FSharp.Compiler.AbstractIL.IL: ILFieldDefs emptyILFields FSharp.Compiler.AbstractIL.IL: ILFieldDefs get_emptyILFields() FSharp.Compiler.AbstractIL.IL: ILFieldDefs mkILFields(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILFieldDef]) FSharp.Compiler.AbstractIL.IL: ILFieldDefs mkILFieldsLazy(System.Lazy`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILFieldDef]]) -FSharp.Compiler.AbstractIL.IL: ILFieldRef mkILFieldRef(ILTypeRef, System.String, ILType) -FSharp.Compiler.AbstractIL.IL: ILFieldRef mkRefForILField(ILScopeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILTypeDef], ILTypeDef, ILFieldDef) -FSharp.Compiler.AbstractIL.IL: ILFieldRef mkRefToILField(ILTypeRef, ILFieldDef) -FSharp.Compiler.AbstractIL.IL: ILFieldRef rescopeILFieldRef(ILScopeRef, ILFieldRef) -FSharp.Compiler.AbstractIL.IL: ILFieldSpec mkILFieldSpec(ILFieldRef, ILType) -FSharp.Compiler.AbstractIL.IL: ILFieldSpec mkILFieldSpecInTy(ILType, System.String, ILType) -FSharp.Compiler.AbstractIL.IL: ILGenericParameterDef mkILSimpleTypar(System.String) -FSharp.Compiler.AbstractIL.IL: ILGlobals EcmaMscorlibILGlobals -FSharp.Compiler.AbstractIL.IL: ILGlobals PrimaryAssemblyILGlobals -FSharp.Compiler.AbstractIL.IL: ILGlobals get_EcmaMscorlibILGlobals() -FSharp.Compiler.AbstractIL.IL: ILGlobals get_PrimaryAssemblyILGlobals() -FSharp.Compiler.AbstractIL.IL: ILGlobals mkILGlobals(ILScopeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAssemblyRef]) -FSharp.Compiler.AbstractIL.IL: ILInstr get_mkLdarg0() -FSharp.Compiler.AbstractIL.IL: ILInstr mkLdarg(UInt16) -FSharp.Compiler.AbstractIL.IL: ILInstr mkLdarg0 -FSharp.Compiler.AbstractIL.IL: ILInstr mkLdcInt32(Int32) -FSharp.Compiler.AbstractIL.IL: ILInstr mkLdloc(UInt16) -FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalCall(ILMethodSpec) -FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalCallconstraint(ILType, ILMethodSpec) -FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalCallvirt(ILMethodSpec) -FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalLdfld(ILFieldSpec) -FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalLdflda(ILFieldSpec) -FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalLdobj(ILType) -FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalLdsfld(ILFieldSpec) -FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalNewobj(ILMethodSpec) -FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalStfld(ILFieldSpec) -FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalStobj(ILType) -FSharp.Compiler.AbstractIL.IL: ILInstr mkNormalStsfld(ILFieldSpec) -FSharp.Compiler.AbstractIL.IL: ILInstr mkStloc(UInt16) -FSharp.Compiler.AbstractIL.IL: ILLazyMethodBody get_methBodyAbstract() -FSharp.Compiler.AbstractIL.IL: ILLazyMethodBody get_methBodyNative() -FSharp.Compiler.AbstractIL.IL: ILLazyMethodBody get_methBodyNotAvailable() -FSharp.Compiler.AbstractIL.IL: ILLazyMethodBody methBodyAbstract -FSharp.Compiler.AbstractIL.IL: ILLazyMethodBody methBodyNative -FSharp.Compiler.AbstractIL.IL: ILLazyMethodBody methBodyNotAvailable -FSharp.Compiler.AbstractIL.IL: ILLazyMethodBody mkMethBodyAux(MethodBody) -FSharp.Compiler.AbstractIL.IL: ILLazyMethodBody mkMethBodyLazyAux(System.Lazy`1[FSharp.Compiler.AbstractIL.IL+MethodBody]) -FSharp.Compiler.AbstractIL.IL: ILLocal mkILLocal(ILType, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.String,System.Int32,System.Int32]]) -FSharp.Compiler.AbstractIL.IL: ILMethodBody mkILMethodBody(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocal], Int32, ILCode, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSourceMarker]) -FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILClassCtor(MethodBody) -FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILCtor(ILMemberAccess, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], MethodBody) -FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILGenericNonVirtualMethod(System.String, ILMemberAccess, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], ILReturn, MethodBody) -FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILGenericVirtualMethod(System.String, ILMemberAccess, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], ILReturn, MethodBody) -FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILNonGenericEmptyCtor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSourceMarker], ILType) -FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILNonGenericInstanceMethod(System.String, ILMemberAccess, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], ILReturn, MethodBody) -FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILNonGenericStaticMethod(System.String, ILMemberAccess, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], ILReturn, MethodBody) -FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILNonGenericVirtualMethod(System.String, ILMemberAccess, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], ILReturn, MethodBody) -FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILSimpleStorageCtor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSourceMarker], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILTypeSpec], ILType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.AbstractIL.IL+ILType]], ILMemberAccess) -FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILSimpleStorageCtorWithParamNames(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSourceMarker], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILTypeSpec], ILType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.String,System.String,FSharp.Compiler.AbstractIL.IL+ILType]], ILMemberAccess) -FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILStaticMethod(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef], System.String, ILMemberAccess, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], ILReturn, MethodBody) -FSharp.Compiler.AbstractIL.IL: ILMethodDef mkILStorageCtor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSourceMarker], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILInstr], ILType, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.AbstractIL.IL+ILType]], ILMemberAccess) -FSharp.Compiler.AbstractIL.IL: ILMethodDef prependInstrsToMethod(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILInstr], ILMethodDef) -FSharp.Compiler.AbstractIL.IL: ILMethodDef resolveILMethodRef(ILTypeDef, ILMethodRef) -FSharp.Compiler.AbstractIL.IL: ILMethodDef resolveILMethodRefWithRescope(Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.AbstractIL.IL+ILType,FSharp.Compiler.AbstractIL.IL+ILType], ILTypeDef, ILMethodRef) FSharp.Compiler.AbstractIL.IL: ILMethodDefs emptyILMethods FSharp.Compiler.AbstractIL.IL: ILMethodDefs get_emptyILMethods() FSharp.Compiler.AbstractIL.IL: ILMethodDefs mkILMethods(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILMethodDef]) @@ -17828,113 +1812,27 @@ FSharp.Compiler.AbstractIL.IL: ILMethodImplDefs emptyILMethodImpls FSharp.Compiler.AbstractIL.IL: ILMethodImplDefs get_emptyILMethodImpls() FSharp.Compiler.AbstractIL.IL: ILMethodImplDefs mkILMethodImpls(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILMethodImplDef]) FSharp.Compiler.AbstractIL.IL: ILMethodImplDefs mkILMethodImplsLazy(System.Lazy`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILMethodImplDef]]) -FSharp.Compiler.AbstractIL.IL: ILMethodRef mkILMethRef(ILTypeRef, ILCallingConv, System.String, Int32, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType) -FSharp.Compiler.AbstractIL.IL: ILMethodRef mkRefForILMethod(ILScopeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILTypeDef], ILTypeDef, ILMethodDef) -FSharp.Compiler.AbstractIL.IL: ILMethodRef mkRefToILMethod(ILTypeRef, ILMethodDef) -FSharp.Compiler.AbstractIL.IL: ILMethodRef rescopeILMethodRef(ILScopeRef, ILMethodRef) -FSharp.Compiler.AbstractIL.IL: ILMethodSpec mkCtorMethSpecForDelegate(ILGlobals, ILType, Boolean) -FSharp.Compiler.AbstractIL.IL: ILMethodSpec mkILCtorMethSpecForTy(ILType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) -FSharp.Compiler.AbstractIL.IL: ILMethodSpec mkILInstanceMethSpecInTy(ILType, System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) -FSharp.Compiler.AbstractIL.IL: ILMethodSpec mkILMethSpec(ILMethodRef, ILBoxity, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) -FSharp.Compiler.AbstractIL.IL: ILMethodSpec mkILMethSpecForMethRefInTy(ILMethodRef, ILType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) -FSharp.Compiler.AbstractIL.IL: ILMethodSpec mkILMethSpecInTy(ILType, ILCallingConv, System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) -FSharp.Compiler.AbstractIL.IL: ILMethodSpec mkILNonGenericInstanceMethSpecInTy(ILType, System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType) -FSharp.Compiler.AbstractIL.IL: ILMethodSpec mkILNonGenericMethSpecInTy(ILType, ILCallingConv, System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType) -FSharp.Compiler.AbstractIL.IL: ILMethodSpec mkILNonGenericStaticMethSpecInTy(ILType, System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType) -FSharp.Compiler.AbstractIL.IL: ILMethodSpec mkILStaticMethSpecInTy(ILType, System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) FSharp.Compiler.AbstractIL.IL: ILModuleDef mkILSimpleModule(System.String, System.String, Boolean, System.Tuple`2[System.Int32,System.Int32], Boolean, ILTypeDefs, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.String], Int32, ILExportedTypesAndForwarders, System.String) -FSharp.Compiler.AbstractIL.IL: ILModuleRef mkRefToILModule(ILModuleDef) -FSharp.Compiler.AbstractIL.IL: ILModuleRef mkSimpleModRef(System.String) FSharp.Compiler.AbstractIL.IL: ILNestedExportedTypes mkILNestedExportedTypes(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILNestedExportedType]) -FSharp.Compiler.AbstractIL.IL: ILNestedExportedTypes mkILNestedExportedTypesLazy(System.Lazy`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILNestedExportedType]]) -FSharp.Compiler.AbstractIL.IL: ILParameter mkILParam(Microsoft.FSharp.Core.FSharpOption`1[System.String], ILType) -FSharp.Compiler.AbstractIL.IL: ILParameter mkILParamAnon(ILType) -FSharp.Compiler.AbstractIL.IL: ILParameter mkILParamNamed(System.String, ILType) -FSharp.Compiler.AbstractIL.IL: ILPreTypeDef mkILPreTypeDef(ILTypeDef) -FSharp.Compiler.AbstractIL.IL: ILPreTypeDef mkILPreTypeDefComputed(Microsoft.FSharp.Collections.FSharpList`1[System.String], System.String, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.AbstractIL.IL+ILTypeDef]) -FSharp.Compiler.AbstractIL.IL: ILPreTypeDef mkILPreTypeDefRead(Microsoft.FSharp.Collections.FSharpList`1[System.String], System.String, Int32, ILTypeDefStored) FSharp.Compiler.AbstractIL.IL: ILPropertyDefs emptyILProperties FSharp.Compiler.AbstractIL.IL: ILPropertyDefs get_emptyILProperties() FSharp.Compiler.AbstractIL.IL: ILPropertyDefs mkILProperties(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILPropertyDef]) FSharp.Compiler.AbstractIL.IL: ILPropertyDefs mkILPropertiesLazy(System.Lazy`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILPropertyDef]]) -FSharp.Compiler.AbstractIL.IL: ILReferences computeILRefs(ILGlobals, ILModuleDef) -FSharp.Compiler.AbstractIL.IL: ILReferences emptyILRefs -FSharp.Compiler.AbstractIL.IL: ILReferences get_emptyILRefs() -FSharp.Compiler.AbstractIL.IL: ILResources mkILResources(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILResource]) +FSharp.Compiler.AbstractIL.IL: ILResources emptyILResources +FSharp.Compiler.AbstractIL.IL: ILResources get_emptyILResources() FSharp.Compiler.AbstractIL.IL: ILReturn mkILReturn(ILType) -FSharp.Compiler.AbstractIL.IL: ILScopeRef rescopeILScopeRef(ILScopeRef, ILScopeRef) -FSharp.Compiler.AbstractIL.IL: ILSecurityDecl mkPermissionSet(ILGlobals, ILSecurityAction, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.AbstractIL.IL+ILTypeRef,Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.String,FSharp.Compiler.AbstractIL.IL+ILType,FSharp.Compiler.AbstractIL.IL+ILAttribElem]]]]) FSharp.Compiler.AbstractIL.IL: ILSecurityDecls emptyILSecurityDecls FSharp.Compiler.AbstractIL.IL: ILSecurityDecls get_emptyILSecurityDecls() FSharp.Compiler.AbstractIL.IL: ILSecurityDecls mkILSecurityDecls(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILSecurityDecl]) -FSharp.Compiler.AbstractIL.IL: ILSecurityDeclsStored mkILSecurityDeclsReader(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,FSharp.Compiler.AbstractIL.IL+ILSecurityDecl[]]) FSharp.Compiler.AbstractIL.IL: ILSecurityDeclsStored storeILSecurityDecls(ILSecurityDecls) -FSharp.Compiler.AbstractIL.IL: ILTailcall andTailness(ILTailcall, Boolean) -FSharp.Compiler.AbstractIL.IL: ILType getTyOfILEnumInfo(ILEnumInfo) -FSharp.Compiler.AbstractIL.IL: ILType instILType(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType) -FSharp.Compiler.AbstractIL.IL: ILType instILTypeAux(Int32, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILType) -FSharp.Compiler.AbstractIL.IL: ILType mkILArr1DTy(ILType) -FSharp.Compiler.AbstractIL.IL: ILType mkILArrTy(ILType, ILArrayShape) -FSharp.Compiler.AbstractIL.IL: ILType mkILBoxedTy(ILTypeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) -FSharp.Compiler.AbstractIL.IL: ILType mkILBoxedType(ILTypeSpec) -FSharp.Compiler.AbstractIL.IL: ILType mkILFormalBoxedTy(ILTypeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef]) -FSharp.Compiler.AbstractIL.IL: ILType mkILFormalNamedTy(ILBoxity, ILTypeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef]) -FSharp.Compiler.AbstractIL.IL: ILType mkILNamedTy(ILBoxity, ILTypeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) -FSharp.Compiler.AbstractIL.IL: ILType mkILNonGenericBoxedTy(ILTypeRef) -FSharp.Compiler.AbstractIL.IL: ILType mkILNonGenericValueTy(ILTypeRef) -FSharp.Compiler.AbstractIL.IL: ILType mkILTy(ILBoxity, ILTypeSpec) -FSharp.Compiler.AbstractIL.IL: ILType mkILTypeForGlobalFunctions(ILScopeRef) -FSharp.Compiler.AbstractIL.IL: ILType mkILTyvarTy(UInt16) -FSharp.Compiler.AbstractIL.IL: ILType mkILValueTy(ILTypeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) -FSharp.Compiler.AbstractIL.IL: ILType rescopeILType(ILScopeRef, ILType) -FSharp.Compiler.AbstractIL.IL: ILType unscopeILType(ILType) -FSharp.Compiler.AbstractIL.IL: ILTypeDef mkILGenericClass(System.String, ILTypeDefAccess, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef], ILType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType], ILMethodDefs, ILFieldDefs, ILTypeDefs, ILPropertyDefs, ILEventDefs, ILAttributes, ILTypeInit) -FSharp.Compiler.AbstractIL.IL: ILTypeDef mkILSimpleClass(ILGlobals, System.String, ILTypeDefAccess, ILMethodDefs, ILFieldDefs, ILTypeDefs, ILPropertyDefs, ILEventDefs, ILAttributes, ILTypeInit) -FSharp.Compiler.AbstractIL.IL: ILTypeDef mkILTypeDefForGlobalFunctions(ILGlobals, ILMethodDefs, ILFieldDefs) -FSharp.Compiler.AbstractIL.IL: ILTypeDef mkRawDataValueTypeDef(ILType, System.String, Int32, UInt16) -FSharp.Compiler.AbstractIL.IL: ILTypeDef prependInstrsToClassCtor(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILInstr], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSourceMarker], ILTypeDef) -FSharp.Compiler.AbstractIL.IL: ILTypeDefStored mkILTypeDefReader(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,FSharp.Compiler.AbstractIL.IL+ILTypeDef]) -FSharp.Compiler.AbstractIL.IL: ILTypeDefs addILTypeDef(ILTypeDef, ILTypeDefs) FSharp.Compiler.AbstractIL.IL: ILTypeDefs emptyILTypeDefs FSharp.Compiler.AbstractIL.IL: ILTypeDefs get_emptyILTypeDefs() FSharp.Compiler.AbstractIL.IL: ILTypeDefs mkILTypeDefs(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILTypeDef]) FSharp.Compiler.AbstractIL.IL: ILTypeDefs mkILTypeDefsComputed(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.AbstractIL.IL+ILPreTypeDef[]]) FSharp.Compiler.AbstractIL.IL: ILTypeDefs mkILTypeDefsFromArray(ILTypeDef[]) -FSharp.Compiler.AbstractIL.IL: ILTypeRef mkILNestedTyRef(ILScopeRef, Microsoft.FSharp.Collections.FSharpList`1[System.String], System.String) -FSharp.Compiler.AbstractIL.IL: ILTypeRef mkILTyRef(ILScopeRef, System.String) -FSharp.Compiler.AbstractIL.IL: ILTypeRef mkILTyRefInTyRef(ILTypeRef, System.String) -FSharp.Compiler.AbstractIL.IL: ILTypeRef mkRefForNestedILTypeDef(ILScopeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILTypeDef], ILTypeDef) -FSharp.Compiler.AbstractIL.IL: ILTypeSpec mkILNonGenericTySpec(ILTypeRef) -FSharp.Compiler.AbstractIL.IL: ILTypeSpec mkILTySpec(ILTypeRef, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) -FSharp.Compiler.AbstractIL.IL: ILTypeSpec rescopeILTypeSpec(ILScopeRef, ILTypeSpec) -FSharp.Compiler.AbstractIL.IL: ILVersionInfo parseILVersion(System.String) FSharp.Compiler.AbstractIL.IL: Int32 NoMetadataIdx -FSharp.Compiler.AbstractIL.IL: Int32 compareILVersions(ILVersionInfo, ILVersionInfo) -FSharp.Compiler.AbstractIL.IL: Int32 generateCodeLabel() FSharp.Compiler.AbstractIL.IL: Int32 get_NoMetadataIdx() -FSharp.Compiler.AbstractIL.IL: Int64 sha1HashInt64(Byte[]) -FSharp.Compiler.AbstractIL.IL: MethodBody mkMethodBody(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILLocal], Int32, ILCode, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.AbstractIL.IL+ILSourceMarker]) -FSharp.Compiler.AbstractIL.IL: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef] get_mkILEmptyGenericParams() -FSharp.Compiler.AbstractIL.IL: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef] mkILEmptyGenericParams -FSharp.Compiler.AbstractIL.IL: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef] mkILFormalTypars(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) -FSharp.Compiler.AbstractIL.IL: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILInstr] mkCallBaseConstructor(ILType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType]) -FSharp.Compiler.AbstractIL.IL: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILMethodDef] mkILDelegateMethods(ILMemberAccess, ILGlobals, ILType, ILType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter], ILReturn) -FSharp.Compiler.AbstractIL.IL: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILTypeDef] destTypeDefsWithGlobalFunctionsFirst(ILGlobals, ILTypeDefs) -FSharp.Compiler.AbstractIL.IL: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] mkILFormalGenericArgs(Int32, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILGenericParameterDef]) -FSharp.Compiler.AbstractIL.IL: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILType] typesOfILParams(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILParameter]) -FSharp.Compiler.AbstractIL.IL: Microsoft.FSharp.Collections.FSharpList`1[System.String] splitNamespace(System.String) -FSharp.Compiler.AbstractIL.IL: PublicKey ecmaPublicKey -FSharp.Compiler.AbstractIL.IL: PublicKey get_ecmaPublicKey() -FSharp.Compiler.AbstractIL.IL: System.String formatCodeLabel(Int32) -FSharp.Compiler.AbstractIL.IL: System.String formatILVersion(ILVersionInfo) -FSharp.Compiler.AbstractIL.IL: System.String get_typeNameForGlobalFunctions() -FSharp.Compiler.AbstractIL.IL: System.String typeNameForGlobalFunctions -FSharp.Compiler.AbstractIL.IL: System.String[] splitNamespaceToArray(System.String) -FSharp.Compiler.AbstractIL.IL: System.Tuple`2[FSharp.Compiler.AbstractIL.IL+ILArrayShape,FSharp.Compiler.AbstractIL.IL+ILType] destILArrTy(ILType) -FSharp.Compiler.AbstractIL.IL: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAttribElem],Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`4[System.String,FSharp.Compiler.AbstractIL.IL+ILType,System.Boolean,FSharp.Compiler.AbstractIL.IL+ILAttribElem]]] decodeILAttribData(ILGlobals, ILAttribute) -FSharp.Compiler.AbstractIL.IL: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],System.String] splitILTypeName(System.String) -FSharp.Compiler.AbstractIL.IL: System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[System.String],System.String] splitTypeNameRight(System.String) -FSharp.Compiler.AbstractIL.IL: System.Tuple`2[System.String[],System.String] splitILTypeNameWithPossibleStaticArguments(System.String) +FSharp.Compiler.AbstractIL.ILBinaryReader FSharp.Compiler.AbstractIL.ILBinaryReader+ILModuleReader: ILModuleDef ILModuleDef FSharp.Compiler.AbstractIL.ILBinaryReader+ILModuleReader: ILModuleDef get_ILModuleDef() FSharp.Compiler.AbstractIL.ILBinaryReader+ILModuleReader: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.AbstractIL.IL+ILAssemblyRef] ILAssemblyRefs @@ -17994,1007 +1892,2197 @@ FSharp.Compiler.AbstractIL.ILBinaryReader+ReduceMemoryFlag: ReduceMemoryFlag get FSharp.Compiler.AbstractIL.ILBinaryReader+ReduceMemoryFlag: ReduceMemoryFlag get_Yes() FSharp.Compiler.AbstractIL.ILBinaryReader+ReduceMemoryFlag: System.String ToString() FSharp.Compiler.AbstractIL.ILBinaryReader+Shim+IAssemblyReader: ILModuleReader GetILModuleReader(System.String, ILReaderOptions) -FSharp.Compiler.AbstractIL.ILBinaryReader+Shim: FSharp.Compiler.AbstractIL.ILBinaryReader+Shim+DefaultAssemblyReader FSharp.Compiler.AbstractIL.ILBinaryReader+Shim: FSharp.Compiler.AbstractIL.ILBinaryReader+Shim+IAssemblyReader FSharp.Compiler.AbstractIL.ILBinaryReader+Shim: IAssemblyReader AssemblyReader FSharp.Compiler.AbstractIL.ILBinaryReader+Shim: IAssemblyReader get_AssemblyReader() FSharp.Compiler.AbstractIL.ILBinaryReader+Shim: Void set_AssemblyReader(IAssemblyReader) -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Boolean Equals(Statistics) -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 CompareTo(Statistics) -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 CompareTo(System.Object) -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 byteFileCount -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 byteFileCount@ -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 get_byteFileCount() -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 get_memoryMapFileClosedCount() -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 get_memoryMapFileOpenedCount() -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 get_rawMemoryFileCount() -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 get_weakByteFileCount() -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 memoryMapFileClosedCount -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 memoryMapFileClosedCount@ -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 memoryMapFileOpenedCount -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 memoryMapFileOpenedCount@ -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 rawMemoryFileCount -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 rawMemoryFileCount@ -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 weakByteFileCount -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Int32 weakByteFileCount@ -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: System.String ToString() -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Void .ctor(Int32, Int32, Int32, Int32, Int32) -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Void set_byteFileCount(Int32) -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Void set_memoryMapFileClosedCount(Int32) -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Void set_memoryMapFileOpenedCount(Int32) -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Void set_rawMemoryFileCount(Int32) -FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics: Void set_weakByteFileCount(Int32) FSharp.Compiler.AbstractIL.ILBinaryReader: FSharp.Compiler.AbstractIL.ILBinaryReader+ILModuleReader FSharp.Compiler.AbstractIL.ILBinaryReader: FSharp.Compiler.AbstractIL.ILBinaryReader+ILReaderOptions FSharp.Compiler.AbstractIL.ILBinaryReader: FSharp.Compiler.AbstractIL.ILBinaryReader+MetadataOnlyFlag FSharp.Compiler.AbstractIL.ILBinaryReader: FSharp.Compiler.AbstractIL.ILBinaryReader+ReduceMemoryFlag FSharp.Compiler.AbstractIL.ILBinaryReader: FSharp.Compiler.AbstractIL.ILBinaryReader+Shim -FSharp.Compiler.AbstractIL.ILBinaryReader: FSharp.Compiler.AbstractIL.ILBinaryReader+Statistics -FSharp.Compiler.AbstractIL.ILBinaryReader: Statistics GetStatistics() -FSharp.Compiler.AbstractIL.Internal.Library+AnyCallerThreadToken: Void .ctor() -FSharp.Compiler.AbstractIL.Internal.Library+Array: Boolean areEqual[T](T[], T[]) -FSharp.Compiler.AbstractIL.Internal.Library+Array: Boolean endsWith[a](a[], a[]) -FSharp.Compiler.AbstractIL.Internal.Library+Array: Boolean existsOne[a](Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean], a[]) -FSharp.Compiler.AbstractIL.Internal.Library+Array: Boolean existsTrue(Boolean[]) -FSharp.Compiler.AbstractIL.Internal.Library+Array: Boolean isSubArray[T](T[], T[], Int32) -FSharp.Compiler.AbstractIL.Internal.Library+Array: Boolean lengthsEqAndForall2[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,System.Boolean]], a[], b[]) -FSharp.Compiler.AbstractIL.Internal.Library+Array: Boolean startsWith[a](a[], a[]) -FSharp.Compiler.AbstractIL.Internal.Library+Array: Int32 findFirstIndexWhereTrue[a](a[], Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean]) -FSharp.Compiler.AbstractIL.Internal.Library+Array: Microsoft.FSharp.Control.FSharpAsync`1[U[]] mapAsync[T,U](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[U]], T[]) -FSharp.Compiler.AbstractIL.Internal.Library+Array: System.Collections.Generic.IComparer`1[T[]] order[T](System.Collections.Generic.IComparer`1[T]) -FSharp.Compiler.AbstractIL.Internal.Library+Array: T[][] heads[T](T[]) -FSharp.Compiler.AbstractIL.Internal.Library+Array: Void revInPlace[T](T[]) -FSharp.Compiler.AbstractIL.Internal.Library+Array: a[] mapq[a](Microsoft.FSharp.Core.FSharpFunc`2[a,a], a[]) -FSharp.Compiler.AbstractIL.Internal.Library+Array: a[] replace[a](Int32, a, a[]) -FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: Cancellable`1 Bind[k,l](Cancellable`1, Microsoft.FSharp.Core.FSharpFunc`2[k,FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[l]]) -FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: Cancellable`1 Combine[h](Cancellable`1, Cancellable`1) -FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: Cancellable`1 Delay[a](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[a]]) -FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: Cancellable`1 For[f,g](System.Collections.Generic.IEnumerable`1[f], Microsoft.FSharp.Core.FSharpFunc`2[f,FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[g]]) -FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: Cancellable`1 Return[j](j) -FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: Cancellable`1 TryFinally[b](Cancellable`1, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: Cancellable`1 TryWith[e](Cancellable`1, Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[e]]) -FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: Cancellable`1 Using[c,d](c, Microsoft.FSharp.Core.FSharpFunc`2[c,FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[d]]) -FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: Cancellable`1 Zero() -FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: Void .ctor() -FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder: i ReturnFrom[i](i) -FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: Cancellable`1 bind[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[b]], Cancellable`1) -FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: Cancellable`1 canceled[a]() -FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: Cancellable`1 delay[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[T]]) -FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: Cancellable`1 each[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[b]], System.Collections.Generic.IEnumerable`1[a]) -FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: Cancellable`1 fold[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[a]]], a, System.Collections.Generic.IEnumerable`1[b]) -FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: Cancellable`1 map[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,b], Cancellable`1) -FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: Cancellable`1 ret[a](a) -FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: Cancellable`1 token() -FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: Cancellable`1 tryFinally[a](Cancellable`1, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: Cancellable`1 tryWith[a](Cancellable`1, Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[a]]) -FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: ValueOrCancelled`1 run[a](System.Threading.CancellationToken, Cancellable`1) -FSharp.Compiler.AbstractIL.Internal.Library+Cancellable: a runWithoutCancellation[a](Cancellable`1) -FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[TResult]: Cancellable`1 NewCancellable(Microsoft.FSharp.Core.FSharpFunc`2[System.Threading.CancellationToken,FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]]) -FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[TResult]: Int32 Tag -FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[TResult]: Int32 get_Tag() -FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[TResult]: Microsoft.FSharp.Core.FSharpFunc`2[System.Threading.CancellationToken,FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]] Item -FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[TResult]: Microsoft.FSharp.Core.FSharpFunc`2[System.Threading.CancellationToken,FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]] get_Item() -FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[TResult]: System.String ToString() -FSharp.Compiler.AbstractIL.Internal.Library+CompilationThreadToken: Void .ctor() -FSharp.Compiler.AbstractIL.Internal.Library+Dictionary: System.Collections.Generic.Dictionary`2[a,b] newWithSize[a,b](Int32) -FSharp.Compiler.AbstractIL.Internal.Library+DictionaryExtensions: Boolean BagExistsValueForKey[key,value](System.Collections.Generic.Dictionary`2[key,Microsoft.FSharp.Collections.FSharpList`1[value]], key, Microsoft.FSharp.Core.FSharpFunc`2[value,System.Boolean]) -FSharp.Compiler.AbstractIL.Internal.Library+DictionaryExtensions: Void BagAdd[key,value](System.Collections.Generic.Dictionary`2[key,Microsoft.FSharp.Collections.FSharpList`1[value]], key, value) -FSharp.Compiler.AbstractIL.Internal.Library+EventuallyBuilder: Eventually`1 Bind[g,h](Eventually`1, Microsoft.FSharp.Core.FSharpFunc`2[g,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[h]]) -FSharp.Compiler.AbstractIL.Internal.Library+EventuallyBuilder: Eventually`1 Combine[d](Eventually`1, Eventually`1) -FSharp.Compiler.AbstractIL.Internal.Library+EventuallyBuilder: Eventually`1 Delay[a](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[a]]) -FSharp.Compiler.AbstractIL.Internal.Library+EventuallyBuilder: Eventually`1 Return[f](f) -FSharp.Compiler.AbstractIL.Internal.Library+EventuallyBuilder: Eventually`1 TryFinally[b](Eventually`1, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -FSharp.Compiler.AbstractIL.Internal.Library+EventuallyBuilder: Eventually`1 TryWith[c](Eventually`1, Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[c]]) -FSharp.Compiler.AbstractIL.Internal.Library+EventuallyBuilder: Eventually`1 Zero() -FSharp.Compiler.AbstractIL.Internal.Library+EventuallyBuilder: e ReturnFrom[e](e) -FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Eventually`1 bind[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[b]], Eventually`1) -FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Eventually`1 box[a](Eventually`1) -FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Eventually`1 catch[a](Eventually`1) -FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Eventually`1 delay[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]]) -FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Eventually`1 fold[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[a]]], a, System.Collections.Generic.IEnumerable`1[b]) -FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Eventually`1 get_token() -FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Eventually`1 repeatedlyProgressUntilDoneOrTimeShareOverOrCanceled[?,b](Int64, System.Threading.CancellationToken, Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.AbstractIL.Internal.Library+CompilationThreadToken,Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[?,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[b]],FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[b]]], Eventually`1) -FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Eventually`1 token -FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Eventually`1 tryFinally[a](Eventually`1, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Eventually`1 tryWith[a](Eventually`1, Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[a]]) -FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] forceAsync[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.AbstractIL.Internal.Library+CompilationThreadToken,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]],Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]]], Eventually`1) -FSharp.Compiler.AbstractIL.Internal.Library+Eventually: Microsoft.FSharp.Core.FSharpOption`1[a] forceWhile[a](CompilationThreadToken, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], Eventually`1) -FSharp.Compiler.AbstractIL.Internal.Library+Eventually: a force[a](CompilationThreadToken, Eventually`1) -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Done[T]: Boolean IsDone -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Done[T]: Boolean IsNotYetDone -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Done[T]: Boolean get_IsDone() -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Done[T]: Boolean get_IsNotYetDone() -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Done[T]: Int32 Tag -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Done[T]: Int32 get_Tag() -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Done[T]: System.String ToString() -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Done[T]: T Item -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Done[T]: T get_Item() -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+NotYetDone[T]: Boolean IsDone -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+NotYetDone[T]: Boolean IsNotYetDone -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+NotYetDone[T]: Boolean get_IsDone() -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+NotYetDone[T]: Boolean get_IsNotYetDone() -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+NotYetDone[T]: Int32 Tag -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+NotYetDone[T]: Int32 get_Tag() -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+NotYetDone[T]: Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.AbstractIL.Internal.Library+CompilationThreadToken,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]] Item -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+NotYetDone[T]: Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.AbstractIL.Internal.Library+CompilationThreadToken,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]] get_Item() -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+NotYetDone[T]: System.String ToString() -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Tags[T]: Int32 Done -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Tags[T]: Int32 NotYetDone -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: Boolean IsDone -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: Boolean IsNotYetDone -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: Boolean get_IsDone() -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: Boolean get_IsNotYetDone() -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: Eventually`1 NewDone(T) -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: Eventually`1 NewNotYetDone(Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.AbstractIL.Internal.Library+CompilationThreadToken,FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]]) -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Done[T] -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+NotYetDone[T] -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1+Tags[T] -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: Int32 Tag -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: Int32 get_Tag() -FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T]: System.String ToString() -FSharp.Compiler.AbstractIL.Internal.Library+IPartialEqualityComparer: IPartialEqualityComparer`1 On[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,b], IPartialEqualityComparer`1) -FSharp.Compiler.AbstractIL.Internal.Library+IPartialEqualityComparer: Microsoft.FSharp.Collections.FSharpList`1[T] partialDistinctBy[T](IPartialEqualityComparer`1, Microsoft.FSharp.Collections.FSharpList`1[T]) -FSharp.Compiler.AbstractIL.Internal.Library+IPartialEqualityComparer`1[T]: Boolean InEqualityRelation(T) -FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T]: Boolean Equals(InlineDelayInit`1) -FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T]: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T]: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T]: System.Func`1[T] func -FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T]: T Value -FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T]: T get_Value() -FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T]: T store -FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T]: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) -FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: LayeredMultiMap`2 Add(Key, Value) -FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: LayeredMultiMap`2 AddAndMarkAsCollapsible(System.Collections.Generic.KeyValuePair`2[Key,Value][]) -FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: LayeredMultiMap`2 Empty -FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: LayeredMultiMap`2 MarkAsCollapsible() -FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: LayeredMultiMap`2 get_Empty() -FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: Microsoft.FSharp.Collections.FSharpList`1[Value] Item [Key] -FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: Microsoft.FSharp.Collections.FSharpList`1[Value] Values -FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: Microsoft.FSharp.Collections.FSharpList`1[Value] get_Item(Key) -FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: Microsoft.FSharp.Collections.FSharpList`1[Value] get_Values() -FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Value]] TryFind(Key) -FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: System.Tuple`2[System.Boolean,Microsoft.FSharp.Collections.FSharpList`1[Value]] TryGetValue(Key) -FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value]: Void .ctor(Microsoft.FSharp.Collections.FSharpMap`2[Key,Microsoft.FSharp.Collections.FSharpList`1[Value]]) -FSharp.Compiler.AbstractIL.Internal.Library+Lazy: T force[T](System.Lazy`1[T]) -FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContextFailure: LazyWithContextFailure Undefined -FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContextFailure: LazyWithContextFailure get_Undefined() -FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContextFailure: System.Exception Exception -FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContextFailure: System.Exception get_Exception() -FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContextFailure: Void .ctor(System.Exception) -FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContext`2[T,ctxt]: Boolean IsDelayed -FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContext`2[T,ctxt]: Boolean IsForced -FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContext`2[T,ctxt]: Boolean get_IsDelayed() -FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContext`2[T,ctxt]: Boolean get_IsForced() -FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContext`2[T,ctxt]: LazyWithContext`2 Create(Microsoft.FSharp.Core.FSharpFunc`2[ctxt,T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,System.Exception]) -FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContext`2[T,ctxt]: LazyWithContext`2 NotLazy(T) -FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContext`2[T,ctxt]: System.String ToString() -FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContext`2[T,ctxt]: T Force(ctxt) -FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContext`2[T,ctxt]: T UnsynchronizedForce(ctxt) -FSharp.Compiler.AbstractIL.Internal.Library+List: Boolean checkq[a](Microsoft.FSharp.Collections.FSharpList`1[a], Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.AbstractIL.Internal.Library+List: Boolean existsSquared[a](Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[a]]) -FSharp.Compiler.AbstractIL.Internal.Library+List: Boolean existsi[a](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.AbstractIL.Internal.Library+List: Boolean forallSquared[a](Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[a]]) -FSharp.Compiler.AbstractIL.Internal.Library+List: Boolean lengthsEqAndForall2[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[a], Microsoft.FSharp.Collections.FSharpList`1[b]) -FSharp.Compiler.AbstractIL.Internal.Library+List: Boolean memAssoc[a,b](a, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[a,b]]) -FSharp.Compiler.AbstractIL.Internal.Library+List: Boolean memq[a](a, Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.AbstractIL.Internal.Library+List: Int32 count[a](Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[b]] mapSquared[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,b], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[a]]) -FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[b]] mapiSquared[a,b](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[a,b]]], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[a]]) -FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`4[a,b,c,d]] zip4[a,b,c,d](Microsoft.FSharp.Collections.FSharpList`1[a], Microsoft.FSharp.Collections.FSharpList`1[b], Microsoft.FSharp.Collections.FSharpList`1[c], Microsoft.FSharp.Collections.FSharpList`1[d]) -FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Collections.FSharpList`1[T] mapq[T](Microsoft.FSharp.Core.FSharpFunc`2[T,T], Microsoft.FSharp.Collections.FSharpList`1[T]) -FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Collections.FSharpList`1[T] sortWithOrder[T](System.Collections.Generic.IComparer`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) -FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Collections.FSharpList`1[a] mapNth[a](Int32, Microsoft.FSharp.Core.FSharpFunc`2[a,a], Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Collections.FSharpList`1[b] collectSquared[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Collections.FSharpList`1[b]], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[a]]) -FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Collections.FSharpList`1[b] mapHeadTail[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,b], Microsoft.FSharp.Core.FSharpFunc`2[a,b], Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Collections.FSharpList`1[c] collect2[a,b,c](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,Microsoft.FSharp.Collections.FSharpList`1[c]]], Microsoft.FSharp.Collections.FSharpList`1[a], Microsoft.FSharp.Collections.FSharpList`1[b]) -FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[a,Microsoft.FSharp.Collections.FSharpList`1[a]]] tryRemove[a](Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[a,System.Int32]] findi[a](Int32, Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.AbstractIL.Internal.Library+List: System.Collections.Generic.IComparer`1[Microsoft.FSharp.Collections.FSharpList`1[T]] order[T](System.Collections.Generic.IComparer`1[T]) -FSharp.Compiler.AbstractIL.Internal.Library+List: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[c]],a] mapFoldSquared[a,b,c](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,System.Tuple`2[c,a]]], a, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[b]]) -FSharp.Compiler.AbstractIL.Internal.Library+List: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[c]],a] mapiFoldSquared[a,b,c](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[System.Int32,System.Int32,b],System.Tuple`2[c,a]]], a, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[b]]) -FSharp.Compiler.AbstractIL.Internal.Library+List: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[a],Microsoft.FSharp.Collections.FSharpList`1[a]] splitAfter[a](Int32, Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.AbstractIL.Internal.Library+List: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[a],Microsoft.FSharp.Collections.FSharpList`1[a]] takeUntil[a](Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.AbstractIL.Internal.Library+List: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[a],a] frontAndBack[a](Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.AbstractIL.Internal.Library+List: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[b],Microsoft.FSharp.Collections.FSharpList`1[c]] splitChoose[a,b,c](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpChoice`2[b,c]], Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.AbstractIL.Internal.Library+List: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[c],a] collectFold[a,b,c](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[c],a]]], a, Microsoft.FSharp.Collections.FSharpList`1[b]) -FSharp.Compiler.AbstractIL.Internal.Library+List: System.Tuple`2[a,Microsoft.FSharp.Collections.FSharpList`1[a]] headAndTail[a](Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.AbstractIL.Internal.Library+List: System.Tuple`4[Microsoft.FSharp.Collections.FSharpList`1[a],Microsoft.FSharp.Collections.FSharpList`1[b],Microsoft.FSharp.Collections.FSharpList`1[c],Microsoft.FSharp.Collections.FSharpList`1[d]] unzip4[a,b,c,d](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`4[a,b,c,d]]) -FSharp.Compiler.AbstractIL.Internal.Library+List: Void iter3[a,b,c](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,Microsoft.FSharp.Core.FSharpFunc`2[c,Microsoft.FSharp.Core.Unit]]], Microsoft.FSharp.Collections.FSharpList`1[a], Microsoft.FSharp.Collections.FSharpList`1[b], Microsoft.FSharp.Collections.FSharpList`1[c]) -FSharp.Compiler.AbstractIL.Internal.Library+List: Void iterSquared[a](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[a]]) -FSharp.Compiler.AbstractIL.Internal.Library+List: a indexNotFound[a]() -FSharp.Compiler.AbstractIL.Internal.Library+List: a[][] toArraySquared[a](Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[a]]) -FSharp.Compiler.AbstractIL.Internal.Library+List: b assoc[a,b](a, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[a,b]]) -FSharp.Compiler.AbstractIL.Internal.Library+List: Microsoft.FSharp.Collections.FSharpList`1[T] duplicates[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -FSharp.Compiler.AbstractIL.Internal.Library+Lock`1[LockTokenType]: Void .ctor() -FSharp.Compiler.AbstractIL.Internal.Library+Lock`1[LockTokenType]: a AcquireLock[a](Microsoft.FSharp.Core.FSharpFunc`2[LockTokenType,a]) -FSharp.Compiler.AbstractIL.Internal.Library+Map: Microsoft.FSharp.Collections.FSharpList`1[b] tryFindMulti[a,b](a, Microsoft.FSharp.Collections.FSharpMap`2[a,Microsoft.FSharp.Collections.FSharpList`1[b]]) -FSharp.Compiler.AbstractIL.Internal.Library+MemoizationTable`2[T,U]: U Apply(T) -FSharp.Compiler.AbstractIL.Internal.Library+MemoizationTable`2[T,U]: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[T,U], System.Collections.Generic.IEqualityComparer`1[T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]]) -FSharp.Compiler.AbstractIL.Internal.Library+MultiMap: Boolean existsInRange[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean], Microsoft.FSharp.Collections.FSharpMap`2[b,Microsoft.FSharp.Collections.FSharpList`1[a]]) -FSharp.Compiler.AbstractIL.Internal.Library+MultiMap: Microsoft.FSharp.Collections.FSharpList`1[b] find[a,b](a, Microsoft.FSharp.Collections.FSharpMap`2[a,Microsoft.FSharp.Collections.FSharpList`1[b]]) -FSharp.Compiler.AbstractIL.Internal.Library+MultiMap: Microsoft.FSharp.Collections.FSharpList`1[b] range[a,b](Microsoft.FSharp.Collections.FSharpMap`2[a,Microsoft.FSharp.Collections.FSharpList`1[b]]) -FSharp.Compiler.AbstractIL.Internal.Library+MultiMap: Microsoft.FSharp.Collections.FSharpMap`2[a,Microsoft.FSharp.Collections.FSharpList`1[b]] add[a,b](a, b, Microsoft.FSharp.Collections.FSharpMap`2[a,Microsoft.FSharp.Collections.FSharpList`1[b]]) -FSharp.Compiler.AbstractIL.Internal.Library+MultiMap: Microsoft.FSharp.Collections.FSharpMap`2[a,Microsoft.FSharp.Collections.FSharpList`1[b]] empty[a,b]() -FSharp.Compiler.AbstractIL.Internal.Library+MultiMap: Microsoft.FSharp.Collections.FSharpMap`2[b,Microsoft.FSharp.Collections.FSharpList`1[a]] initBy[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,b], System.Collections.Generic.IEnumerable`1[a]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Boolean existsInRange[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean], Microsoft.FSharp.Collections.FSharpMap`2[b,a]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Boolean exists[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[a,b]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Boolean forall[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[a,b]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Boolean isEmpty[T](Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Boolean mem[T](System.String, Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Boolean suball2[a,b,c](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,System.Boolean]], Microsoft.FSharp.Core.FSharpFunc`2[c,Microsoft.FSharp.Core.FSharpFunc`2[b,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[a,c], Microsoft.FSharp.Collections.FSharpMap`2[a,b]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,T]] toList[T](Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpList`1[b] range[a,b](Microsoft.FSharp.Collections.FSharpMap`2[a,b]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,T] add[T](System.String, T, Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,T] filterRange[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,T] layer[T](Microsoft.FSharp.Collections.FSharpMap`2[System.String,T], Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,T] ofList[T](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,T]]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,T] ofSeq[T](System.Collections.Generic.IEnumerable`1[System.Tuple`2[System.String,T]]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,a] mapFilter[T,a](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[a]], Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,a] map[T,a](Microsoft.FSharp.Core.FSharpFunc`2[T,a], Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,b] union[a,b](Microsoft.FSharp.Core.FSharpFunc`2[System.Collections.Generic.IEnumerable`1[a],b], System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpMap`2[System.String,a]]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[a,b] empty[a,b]() -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[b,a] ofKeyedList[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,b], Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Collections.FSharpMap`2[c,Microsoft.FSharp.Collections.FSharpList`1[a]] layerAdditive[a,b,c](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Collections.FSharpList`1[a],Microsoft.FSharp.Core.FSharpFunc`2[b,Microsoft.FSharp.Collections.FSharpList`1[a]]], Microsoft.FSharp.Collections.FSharpMap`2[c,b], Microsoft.FSharp.Collections.FSharpMap`2[c,Microsoft.FSharp.Collections.FSharpList`1[a]]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Core.FSharpOption`1[T] tryFind[T](System.String, Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Microsoft.FSharp.Core.FSharpOption`1[a] tryFindInRange[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,System.Boolean], Microsoft.FSharp.Collections.FSharpMap`2[b,a]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: System.Tuple`2[Microsoft.FSharp.Collections.FSharpMap`2[System.String,T],Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]] partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: System.Tuple`2[Microsoft.FSharp.Collections.FSharpMap`2[System.String,b],a] mapFold[a,T,b](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[b,a]]]], a, Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: T find[T](System.String, Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: Void iter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpMap`2[System.String,T]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: a foldBackRange[T,a](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[a,a]], Microsoft.FSharp.Collections.FSharpMap`2[System.String,T], a) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: a foldBack[T,a](Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[a,a]]], Microsoft.FSharp.Collections.FSharpMap`2[System.String,T], a) -FSharp.Compiler.AbstractIL.Internal.Library+NameMap: c subfold2[a,b,c,d](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,c]], Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[d,Microsoft.FSharp.Core.FSharpFunc`2[b,Microsoft.FSharp.Core.FSharpFunc`2[c,c]]]], Microsoft.FSharp.Collections.FSharpMap`2[a,d], Microsoft.FSharp.Collections.FSharpMap`2[a,b], c) -FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap: Boolean existsInRange[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap: Microsoft.FSharp.Collections.FSharpList`1[T] find[T](System.String, Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap: Microsoft.FSharp.Collections.FSharpList`1[T] rangeReversingEachBucket[T](Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap: Microsoft.FSharp.Collections.FSharpList`1[T] range[T](Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap: Microsoft.FSharp.Collections.FSharpList`1[a] chooseRange[T,a](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[a]], Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]] add[T](System.String, T, Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]] empty[T]() -FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]] initBy[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.String], System.Collections.Generic.IEnumerable`1[T]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]] ofList[T](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,T]]) -FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap: Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[a]] map[T,a](Microsoft.FSharp.Core.FSharpFunc`2[T,a], Microsoft.FSharp.Collections.FSharpMap`2[System.String,Microsoft.FSharp.Collections.FSharpList`1[T]]) -FSharp.Compiler.AbstractIL.Internal.Library+Option: Microsoft.FSharp.Core.FSharpOption`1[T] attempt[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) -FSharp.Compiler.AbstractIL.Internal.Library+Option: System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[c],a] mapFold[a,b,c](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,System.Tuple`2[c,a]]], a, Microsoft.FSharp.Core.FSharpOption`1[b]) -FSharp.Compiler.AbstractIL.Internal.Library+Order: Int32 toFunction[U](System.Collections.Generic.IComparer`1[U], U, U) -FSharp.Compiler.AbstractIL.Internal.Library+Order: System.Collections.Generic.IComparer`1[T] orderBy[T,U](Microsoft.FSharp.Core.FSharpFunc`2[T,U]) -FSharp.Compiler.AbstractIL.Internal.Library+Order: System.Collections.Generic.IComparer`1[T] orderOn[T,U](Microsoft.FSharp.Core.FSharpFunc`2[T,U], System.Collections.Generic.IComparer`1[U]) -FSharp.Compiler.AbstractIL.Internal.Library+ResizeArray: a[][] chunkBySize[t,a](Int32, Microsoft.FSharp.Core.FSharpFunc`2[t,a], System.Collections.Generic.List`1[t]) -FSharp.Compiler.AbstractIL.Internal.Library+ResizeArray: a[][] mapToSmallArrayChunks[t,a](Microsoft.FSharp.Core.FSharpFunc`2[t,a], System.Collections.Generic.List`1[t]) -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException: ResultOrException`1 op_BarQmarkGreater[a,b](ResultOrException`1, Microsoft.FSharp.Core.FSharpFunc`2[a,b]) -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException: ResultOrException`1 otherwise[a](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[a]], ResultOrException`1) -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException: ResultOrException`1 raze[a](System.Exception) -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException: ResultOrException`1 success[a](a) -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException: a ForceRaise[a](ResultOrException`1) -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Boolean Equals(ResultOrException`1) -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Boolean IsException -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Boolean IsResult -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Boolean get_IsException() -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Boolean get_IsResult() -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Int32 Tag -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: Int32 get_Tag() -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: System.Exception Item -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: System.Exception get_Item() -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult]: System.String ToString() -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Boolean Equals(ResultOrException`1) -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Boolean IsException -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Boolean IsResult -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Boolean get_IsException() -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Boolean get_IsResult() -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Int32 Tag -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: Int32 get_Tag() -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: System.String ToString() -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: TResult Item -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult]: TResult get_Item() -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Tags[TResult]: Int32 Exception -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Tags[TResult]: Int32 Result -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Boolean Equals(ResultOrException`1) -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Boolean IsException -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Boolean IsResult -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Boolean get_IsException() -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Boolean get_IsResult() -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Exception[TResult] -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Result[TResult] -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1+Tags[TResult] -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Int32 Tag -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: Int32 get_Tag() -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: ResultOrException`1 NewException(System.Exception) -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: ResultOrException`1 NewResult(TResult) -FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult]: System.String ToString() -FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: Boolean IsInvalidPathShim(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: Boolean IsPathRootedShim(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: Boolean IsStableFileHeuristic(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: Boolean SafeExists(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: Byte[] ReadAllBytesShim(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: System.DateTime GetLastWriteTimeShim(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: System.IO.Stream FileStreamCreateShim(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: System.IO.Stream FileStreamReadShim(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: System.IO.Stream FileStreamWriteExistingShim(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: System.Reflection.Assembly AssemblyLoad(System.Reflection.AssemblyName) -FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: System.Reflection.Assembly AssemblyLoadFrom(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: System.String GetFullPathShim(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: System.String GetTempPathShim() -FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem: Void FileDelete(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+Shim: Byte[] File.ReadBinaryChunk.Static(System.String, Int32, Int32) -FSharp.Compiler.AbstractIL.Internal.Library+Shim: FSharp.Compiler.AbstractIL.Internal.Library+Shim+IFileSystem -FSharp.Compiler.AbstractIL.Internal.Library+Shim: IFileSystem FileSystem -FSharp.Compiler.AbstractIL.Internal.Library+Shim: IFileSystem get_FileSystem() -FSharp.Compiler.AbstractIL.Internal.Library+Shim: System.IO.StreamReader File.OpenReaderAndRetry.Static(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Boolean) -FSharp.Compiler.AbstractIL.Internal.Library+Shim: Void set_FileSystem(IFileSystem) -FSharp.Compiler.AbstractIL.Internal.Library+String: Boolean contains(System.String, Char) -FSharp.Compiler.AbstractIL.Internal.Library+String: Boolean isLeadingIdentifierCharacterUpperCase(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+String: Char get(System.String, Int32) -FSharp.Compiler.AbstractIL.Internal.Library+String: Char[] toCharArray(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+String: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Contains|_|(System.String, System.String) -FSharp.Compiler.AbstractIL.Internal.Library+String: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |StartsWith|_|(System.String, System.String) -FSharp.Compiler.AbstractIL.Internal.Library+String: System.Collections.Generic.IComparer`1[System.String] get_order() -FSharp.Compiler.AbstractIL.Internal.Library+String: System.Collections.Generic.IComparer`1[System.String] order -FSharp.Compiler.AbstractIL.Internal.Library+String: System.String capitalize(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+String: System.String dropPrefix(System.String, System.String) -FSharp.Compiler.AbstractIL.Internal.Library+String: System.String dropSuffix(System.String, System.String) -FSharp.Compiler.AbstractIL.Internal.Library+String: System.String lowerCaseFirstChar(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+String: System.String lowercase(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+String: System.String make(Int32, Char) -FSharp.Compiler.AbstractIL.Internal.Library+String: System.String sub(System.String, Int32, Int32) -FSharp.Compiler.AbstractIL.Internal.Library+String: System.String trim(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+String: System.String uncapitalize(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+String: System.String uppercase(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+String: System.String[] getLines(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+String: System.String[] split(System.StringSplitOptions, System.String[], System.String) -FSharp.Compiler.AbstractIL.Internal.Library+String: System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Int32]] extractTrailingIndex(System.String) -FSharp.Compiler.AbstractIL.Internal.Library+Tables: Microsoft.FSharp.Core.FSharpFunc`2[a,b] memoize[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,b]) -FSharp.Compiler.AbstractIL.Internal.Library+UndefinedException: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.Internal.Library+UndefinedException: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.Internal.Library+UndefinedException: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.Internal.Library+UndefinedException: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.Internal.Library+UndefinedException: Void .ctor() -FSharp.Compiler.AbstractIL.Internal.Library+UniqueStampGenerator`1[T]: Int32 Encode(T) -FSharp.Compiler.AbstractIL.Internal.Library+UniqueStampGenerator`1[T]: System.Collections.Generic.ICollection`1[T] Table -FSharp.Compiler.AbstractIL.Internal.Library+UniqueStampGenerator`1[T]: System.Collections.Generic.ICollection`1[T] get_Table() -FSharp.Compiler.AbstractIL.Internal.Library+UniqueStampGenerator`1[T]: Void .ctor() -FSharp.Compiler.AbstractIL.Internal.Library+ValueOptionInternal: Microsoft.FSharp.Core.FSharpValueOption`1[a] ofOption[a](Microsoft.FSharp.Core.FSharpOption`1[a]) -FSharp.Compiler.AbstractIL.Internal.Library+ValueOptionInternal: Microsoft.FSharp.Core.FSharpValueOption`1[b] bind[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpValueOption`1[b]], Microsoft.FSharp.Core.FSharpValueOption`1[a]) -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Boolean Equals(ValueOrCancelled`1) -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Boolean IsCancelled -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Boolean IsValue -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Boolean get_IsCancelled() -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Boolean get_IsValue() -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Int32 Tag -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: Int32 get_Tag() -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: System.OperationCanceledException Item -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: System.OperationCanceledException get_Item() -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult]: System.String ToString() -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Tags[TResult]: Int32 Cancelled -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Tags[TResult]: Int32 Value -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Boolean Equals(ValueOrCancelled`1) -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Boolean IsCancelled -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Boolean IsValue -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Boolean get_IsCancelled() -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Boolean get_IsValue() -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Int32 Tag -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: Int32 get_Tag() -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: System.String ToString() -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: TResult Item -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult]: TResult get_Item() -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Boolean Equals(System.Object) -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Boolean Equals(ValueOrCancelled`1) -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Boolean IsCancelled -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Boolean IsValue -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Boolean get_IsCancelled() -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Boolean get_IsValue() -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Cancelled[TResult] -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Tags[TResult] -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1+Value[TResult] -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Int32 GetHashCode() -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Int32 Tag -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: Int32 get_Tag() -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: System.String ToString() -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: ValueOrCancelled`1 NewCancelled(System.OperationCanceledException) -FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult]: ValueOrCancelled`1 NewValue(TResult) -FSharp.Compiler.AbstractIL.Internal.Library: AnyCallerThreadToken AnyCallerThread -FSharp.Compiler.AbstractIL.Internal.Library: AnyCallerThreadToken get_AnyCallerThread() -FSharp.Compiler.AbstractIL.Internal.Library: Boolean String.EndsWithOrdinal(System.String, System.String) -FSharp.Compiler.AbstractIL.Internal.Library: Boolean String.StartsWithOrdinal(System.String, System.String) -FSharp.Compiler.AbstractIL.Internal.Library: Boolean isNilOrSingleton[a](Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.AbstractIL.Internal.Library: Boolean isNil[a](Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.AbstractIL.Internal.Library: Boolean isNonNull[a](a) -FSharp.Compiler.AbstractIL.Internal.Library: Boolean isSingleton[a](Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.AbstractIL.Internal.Library: Boolean op_EqualsEqualsEquals[a](a, a) -FSharp.Compiler.AbstractIL.Internal.Library: CancellableBuilder cancellable -FSharp.Compiler.AbstractIL.Internal.Library: CancellableBuilder get_cancellable() -FSharp.Compiler.AbstractIL.Internal.Library: CompilationThreadToken AssumeCompilationThreadWithoutEvidence() -FSharp.Compiler.AbstractIL.Internal.Library: ? AssumeLockWithoutEvidence[?]() -FSharp.Compiler.AbstractIL.Internal.Library: EventuallyBuilder eventually -FSharp.Compiler.AbstractIL.Internal.Library: EventuallyBuilder get_eventually() -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+AnyCallerThreadToken -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Array -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+CancellableBuilder -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Cancellable -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Eventually -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Cancellable`1[TResult] -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+CompilationThreadToken -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Dictionary -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+DictionaryExtensions -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+EventuallyBuilder -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Eventually`1[T] -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+ExecutionToken -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+IPartialEqualityComparer -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+IPartialEqualityComparer`1[T] -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+InlineDelayInit`1[T] -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+LayeredMultiMap`2[Key,Value] -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Lazy -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContextFailure -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+LazyWithContext`2[T,ctxt] -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+List -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+LockToken -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Lock`1[LockTokenType] -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Map -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+MemoizationTable`2[T,U] -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+MultiMap -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+NameMap -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+NameMultiMap -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Option -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Order -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+ResizeArray -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+ResultOrException`1[TResult] -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Shim -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+String -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+Tables -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+UndefinedException -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+UniqueStampGenerator`1[T] -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+ValueOptionInternal -FSharp.Compiler.AbstractIL.Internal.Library: FSharp.Compiler.AbstractIL.Internal.Library+ValueOrCancelled`1[TResult] -FSharp.Compiler.AbstractIL.Internal.Library: Int32 LOH_SIZE_THRESHOLD_BYTES -FSharp.Compiler.AbstractIL.Internal.Library: Int32 get_LOH_SIZE_THRESHOLD_BYTES() -FSharp.Compiler.AbstractIL.Internal.Library: Int32 op_GreaterGreaterGreaterAmp(Int32, Int32) -FSharp.Compiler.AbstractIL.Internal.Library: Microsoft.FSharp.Collections.FSharpList`1[Value] Map`2.get_Values[Key,Value](Microsoft.FSharp.Collections.FSharpMap`2[Key,Value]) -FSharp.Compiler.AbstractIL.Internal.Library: Microsoft.FSharp.Collections.FSharpMap`2[Key,Value] Map`2.AddAndMarkAsCollapsible[Key,Value](Microsoft.FSharp.Collections.FSharpMap`2[Key,Value], System.Collections.Generic.KeyValuePair`2[Key,Value][]) -FSharp.Compiler.AbstractIL.Internal.Library: Microsoft.FSharp.Collections.FSharpMap`2[Key,Value] Map`2.LinearTryModifyThenLaterFlatten[Key,Value](Microsoft.FSharp.Collections.FSharpMap`2[Key,Value], Key, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpOption`1[Value],Value]) -FSharp.Compiler.AbstractIL.Internal.Library: Microsoft.FSharp.Collections.FSharpMap`2[Key,Value] Map`2.MarkAsCollapsible[Key,Value](Microsoft.FSharp.Collections.FSharpMap`2[Key,Value]) -FSharp.Compiler.AbstractIL.Internal.Library: Microsoft.FSharp.Collections.FSharpMap`2[Key,Value] Map`2.get_Empty.Static[Key,Value]() -FSharp.Compiler.AbstractIL.Internal.Library: Microsoft.FSharp.Core.FSharpFunc`2[System.Boolean,Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit]] get_reportTime() -FSharp.Compiler.AbstractIL.Internal.Library: Microsoft.FSharp.Core.FSharpFunc`2[System.Boolean,Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit]] reportTime -FSharp.Compiler.AbstractIL.Internal.Library: System.Lazy`1[a] notlazy[a](a) -FSharp.Compiler.AbstractIL.Internal.Library: Void DoesNotRequireCompilerThreadTokenAndCouldPossiblyBeMadeConcurrent(CompilationThreadToken) -FSharp.Compiler.AbstractIL.Internal.Library: Void RequireCompilationThread(CompilationThreadToken) -FSharp.Compiler.AbstractIL.Internal.Library: a getHole[a](Microsoft.FSharp.Core.FSharpRef`1[Microsoft.FSharp.Core.FSharpOption`1[a]]) -FSharp.Compiler.AbstractIL.Internal.Library: a nonNull[a](System.String, a) -FSharp.Compiler.AbstractIL.Internal.Library: a notFound[a]() -FSharp.Compiler.AbstractIL.Internal.Library: d foldOn[a,b,c,d](Microsoft.FSharp.Core.FSharpFunc`2[a,b], Microsoft.FSharp.Core.FSharpFunc`2[c,Microsoft.FSharp.Core.FSharpFunc`2[b,d]], c, a) -FSharp.Compiler.AbstractIL.Internal.Utils: Boolean get_runningOnMono() -FSharp.Compiler.AbstractIL.Internal.Utils: Boolean runningOnMono -FSharp.Compiler.CompilerGlobalState+NiceNameGenerator: System.String FreshCompilerGeneratedName(System.String, range) -FSharp.Compiler.CompilerGlobalState+NiceNameGenerator: Void .ctor() -FSharp.Compiler.CompilerGlobalState+NiceNameGenerator: Void Reset() -FSharp.Compiler.CompilerGlobalState+StableNiceNameGenerator: System.String GetUniqueCompilerGeneratedName(System.String, range, Int64) -FSharp.Compiler.CompilerGlobalState+StableNiceNameGenerator: Void .ctor() -FSharp.Compiler.CompilerGlobalState+StableNiceNameGenerator: Void Reset() -FSharp.Compiler.CompilerGlobalState: FSharp.Compiler.CompilerGlobalState+NiceNameGenerator -FSharp.Compiler.CompilerGlobalState: FSharp.Compiler.CompilerGlobalState+StableNiceNameGenerator -FSharp.Compiler.CompilerGlobalState: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Int64] get_newStamp() -FSharp.Compiler.CompilerGlobalState: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Int64] get_newUnique() -FSharp.Compiler.CompilerGlobalState: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Int64] newStamp -FSharp.Compiler.CompilerGlobalState: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Int64] newUnique -FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 CodeGen -FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 Compile -FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 DefaultPhase -FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 IlGen -FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 IlxGen -FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 Interactive -FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 Optimize -FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 Output -FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 Parameter -FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 Parse -FSharp.Compiler.ErrorLogger+BuildPhase+Tags: Int32 TypeCheck -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean Equals(BuildPhase) -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean Equals(System.Object) -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsCodeGen -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsCompile -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsDefaultPhase -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsIlGen -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsIlxGen -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsInteractive -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsOptimize -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsOutput -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsParameter -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsParse -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean IsTypeCheck -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsCodeGen() -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsCompile() -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsDefaultPhase() -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsIlGen() -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsIlxGen() -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsInteractive() -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsOptimize() -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsOutput() -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsParameter() -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsParse() -FSharp.Compiler.ErrorLogger+BuildPhase: Boolean get_IsTypeCheck() -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase CodeGen -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase Compile -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase DefaultPhase -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase IlGen -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase IlxGen -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase Interactive -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase Optimize -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase Output -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase Parameter -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase Parse -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase TypeCheck -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_CodeGen() -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_Compile() -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_DefaultPhase() -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_IlGen() -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_IlxGen() -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_Interactive() -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_Optimize() -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_Output() -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_Parameter() -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_Parse() -FSharp.Compiler.ErrorLogger+BuildPhase: BuildPhase get_TypeCheck() -FSharp.Compiler.ErrorLogger+BuildPhase: FSharp.Compiler.ErrorLogger+BuildPhase+Tags -FSharp.Compiler.ErrorLogger+BuildPhase: Int32 CompareTo(BuildPhase) -FSharp.Compiler.ErrorLogger+BuildPhase: Int32 CompareTo(System.Object) -FSharp.Compiler.ErrorLogger+BuildPhase: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.ErrorLogger+BuildPhase: Int32 GetHashCode() -FSharp.Compiler.ErrorLogger+BuildPhase: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+BuildPhase: Int32 Tag -FSharp.Compiler.ErrorLogger+BuildPhase: Int32 get_Tag() -FSharp.Compiler.ErrorLogger+BuildPhase: System.String ToString() -FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String CodeGen -FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String Compile -FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String DefaultPhase -FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String IlGen -FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String IlxGen -FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String Interactive -FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String Internal -FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String Optimize -FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String Output -FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String Parameter -FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String Parse -FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory: System.String TypeCheck -FSharp.Compiler.ErrorLogger+CapturingErrorLogger: Int32 ErrorCount -FSharp.Compiler.ErrorLogger+CapturingErrorLogger: Int32 get_ErrorCount() -FSharp.Compiler.ErrorLogger+CapturingErrorLogger: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ErrorLogger+PhasedDiagnostic,System.Boolean]] Diagnostics -FSharp.Compiler.ErrorLogger+CapturingErrorLogger: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ErrorLogger+PhasedDiagnostic,System.Boolean]] get_Diagnostics() -FSharp.Compiler.ErrorLogger+CapturingErrorLogger: System.String DebugDisplay() -FSharp.Compiler.ErrorLogger+CapturingErrorLogger: Void .ctor(System.String) -FSharp.Compiler.ErrorLogger+CapturingErrorLogger: Void CommitDelayedDiagnostics(ErrorLogger) -FSharp.Compiler.ErrorLogger+CapturingErrorLogger: Void DiagnosticSink(PhasedDiagnostic, Boolean) -FSharp.Compiler.ErrorLogger+Deprecated: Boolean Equals(System.Object) -FSharp.Compiler.ErrorLogger+Deprecated: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+Deprecated: Int32 GetHashCode() -FSharp.Compiler.ErrorLogger+Deprecated: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+Deprecated: System.String Data0 -FSharp.Compiler.ErrorLogger+Deprecated: System.String get_Data0() -FSharp.Compiler.ErrorLogger+Deprecated: Void .ctor() -FSharp.Compiler.ErrorLogger+Deprecated: Void .ctor(System.String, range) -FSharp.Compiler.ErrorLogger+Deprecated: range Data1 -FSharp.Compiler.ErrorLogger+Deprecated: range get_Data1() -FSharp.Compiler.ErrorLogger+Error: Boolean Equals(System.Object) -FSharp.Compiler.ErrorLogger+Error: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+Error: Int32 GetHashCode() -FSharp.Compiler.ErrorLogger+Error: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+Error: System.String Message -FSharp.Compiler.ErrorLogger+Error: System.String get_Message() -FSharp.Compiler.ErrorLogger+Error: System.Tuple`2[System.Int32,System.String] Data0 -FSharp.Compiler.ErrorLogger+Error: System.Tuple`2[System.Int32,System.String] get_Data0() -FSharp.Compiler.ErrorLogger+Error: Void .ctor() -FSharp.Compiler.ErrorLogger+Error: Void .ctor(System.Tuple`2[System.Int32,System.String], range) -FSharp.Compiler.ErrorLogger+Error: range Data1 -FSharp.Compiler.ErrorLogger+Error: range get_Data1() -FSharp.Compiler.ErrorLogger+ErrorLogger: Int32 ErrorCount -FSharp.Compiler.ErrorLogger+ErrorLogger: Int32 get_ErrorCount() -FSharp.Compiler.ErrorLogger+ErrorLogger: System.String DebugDisplay() -FSharp.Compiler.ErrorLogger+ErrorLogger: Void .ctor(System.String) -FSharp.Compiler.ErrorLogger+ErrorLogger: Void DiagnosticSink(PhasedDiagnostic, Boolean) -FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: Boolean get_tryAndDetectDev15() -FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: Boolean tryAndDetectDev15 -FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: Void ErrorLogger.ErrorR(ErrorLogger, System.Exception) -FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: Void ErrorLogger.ErrorRecovery(ErrorLogger, System.Exception, range) -FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: Void ErrorLogger.ErrorRecoveryNoRange(ErrorLogger, System.Exception) -FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: Void ErrorLogger.StopProcessingRecovery(ErrorLogger, System.Exception, range) -FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: Void ErrorLogger.Warning(ErrorLogger, System.Exception) -FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: Void PreserveStackTrace[a](a) -FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: Void ReraiseIfWatsonable(System.Exception) -FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: a ErrorLogger.SimulateError[a](ErrorLogger, PhasedDiagnostic) -FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions: b ErrorLogger.Error[b](ErrorLogger, System.Exception) -FSharp.Compiler.ErrorLogger+ErrorStyle+Tags: Int32 DefaultErrors -FSharp.Compiler.ErrorLogger+ErrorStyle+Tags: Int32 EmacsErrors -FSharp.Compiler.ErrorLogger+ErrorStyle+Tags: Int32 GccErrors -FSharp.Compiler.ErrorLogger+ErrorStyle+Tags: Int32 TestErrors -FSharp.Compiler.ErrorLogger+ErrorStyle+Tags: Int32 VSErrors -FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean Equals(ErrorStyle) -FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean Equals(System.Object) -FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean IsDefaultErrors -FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean IsEmacsErrors -FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean IsGccErrors -FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean IsTestErrors -FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean IsVSErrors -FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean get_IsDefaultErrors() -FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean get_IsEmacsErrors() -FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean get_IsGccErrors() -FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean get_IsTestErrors() -FSharp.Compiler.ErrorLogger+ErrorStyle: Boolean get_IsVSErrors() -FSharp.Compiler.ErrorLogger+ErrorStyle: ErrorStyle DefaultErrors -FSharp.Compiler.ErrorLogger+ErrorStyle: ErrorStyle EmacsErrors -FSharp.Compiler.ErrorLogger+ErrorStyle: ErrorStyle GccErrors -FSharp.Compiler.ErrorLogger+ErrorStyle: ErrorStyle TestErrors -FSharp.Compiler.ErrorLogger+ErrorStyle: ErrorStyle VSErrors -FSharp.Compiler.ErrorLogger+ErrorStyle: ErrorStyle get_DefaultErrors() -FSharp.Compiler.ErrorLogger+ErrorStyle: ErrorStyle get_EmacsErrors() -FSharp.Compiler.ErrorLogger+ErrorStyle: ErrorStyle get_GccErrors() -FSharp.Compiler.ErrorLogger+ErrorStyle: ErrorStyle get_TestErrors() -FSharp.Compiler.ErrorLogger+ErrorStyle: ErrorStyle get_VSErrors() -FSharp.Compiler.ErrorLogger+ErrorStyle: FSharp.Compiler.ErrorLogger+ErrorStyle+Tags -FSharp.Compiler.ErrorLogger+ErrorStyle: Int32 CompareTo(ErrorStyle) -FSharp.Compiler.ErrorLogger+ErrorStyle: Int32 CompareTo(System.Object) -FSharp.Compiler.ErrorLogger+ErrorStyle: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.ErrorLogger+ErrorStyle: Int32 GetHashCode() -FSharp.Compiler.ErrorLogger+ErrorStyle: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+ErrorStyle: Int32 Tag -FSharp.Compiler.ErrorLogger+ErrorStyle: Int32 get_Tag() -FSharp.Compiler.ErrorLogger+ErrorStyle: System.String ToString() -FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit] Data3 -FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit] get_Data3() -FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: System.String Data2 -FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: System.String Message -FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: System.String get_Data2() -FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: System.String get_Message() -FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: System.Tuple`2[System.Int32,System.String] Data0 -FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: System.Tuple`2[System.Int32,System.String] get_Data0() -FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: Void .ctor() -FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: Void .ctor(System.Tuple`2[System.Int32,System.String], range, System.String, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit]) -FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: range Data1 -FSharp.Compiler.ErrorLogger+ErrorWithSuggestions: range get_Data1() -FSharp.Compiler.ErrorLogger+Exiter: T Exit[T](Int32) -FSharp.Compiler.ErrorLogger+Experimental: Boolean Equals(System.Object) -FSharp.Compiler.ErrorLogger+Experimental: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+Experimental: Int32 GetHashCode() -FSharp.Compiler.ErrorLogger+Experimental: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+Experimental: System.String Data0 -FSharp.Compiler.ErrorLogger+Experimental: System.String get_Data0() -FSharp.Compiler.ErrorLogger+Experimental: Void .ctor() -FSharp.Compiler.ErrorLogger+Experimental: Void .ctor(System.String, range) -FSharp.Compiler.ErrorLogger+Experimental: range Data1 -FSharp.Compiler.ErrorLogger+Experimental: range get_Data1() -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Boolean Equals(FSharpErrorSeverityOptions) -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Boolean Equals(System.Object) -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Boolean GlobalWarnAsError -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Boolean get_GlobalWarnAsError() -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: FSharpErrorSeverityOptions Default -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: FSharpErrorSeverityOptions get_Default() -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Int32 CompareTo(FSharpErrorSeverityOptions) -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Int32 CompareTo(System.Object) -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Int32 GetHashCode() -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Int32 WarnLevel -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Int32 get_WarnLevel() -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] WarnAsError -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] WarnAsWarn -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] WarnOff -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] WarnOn -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] get_WarnAsError() -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] get_WarnAsWarn() -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] get_WarnOff() -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] get_WarnOn() -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: System.String ToString() -FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions: Void .ctor(Int32, Boolean, Microsoft.FSharp.Collections.FSharpList`1[System.Int32], Microsoft.FSharp.Collections.FSharpList`1[System.Int32], Microsoft.FSharp.Collections.FSharpList`1[System.Int32], Microsoft.FSharp.Collections.FSharpList`1[System.Int32]) -FSharp.Compiler.ErrorLogger+InternalError: Boolean Equals(System.Object) -FSharp.Compiler.ErrorLogger+InternalError: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+InternalError: Int32 GetHashCode() -FSharp.Compiler.ErrorLogger+InternalError: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+InternalError: System.String Message -FSharp.Compiler.ErrorLogger+InternalError: System.String get_Message() -FSharp.Compiler.ErrorLogger+InternalError: System.String get_msg() -FSharp.Compiler.ErrorLogger+InternalError: System.String msg -FSharp.Compiler.ErrorLogger+InternalError: Void .ctor() -FSharp.Compiler.ErrorLogger+InternalError: Void .ctor(System.String, range) -FSharp.Compiler.ErrorLogger+InternalError: range Data1 -FSharp.Compiler.ErrorLogger+InternalError: range get_Data1() -FSharp.Compiler.ErrorLogger+LibraryUseOnly: Boolean Equals(System.Object) -FSharp.Compiler.ErrorLogger+LibraryUseOnly: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+LibraryUseOnly: Int32 GetHashCode() -FSharp.Compiler.ErrorLogger+LibraryUseOnly: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+LibraryUseOnly: Void .ctor() -FSharp.Compiler.ErrorLogger+LibraryUseOnly: Void .ctor(range) -FSharp.Compiler.ErrorLogger+LibraryUseOnly: range Data0 -FSharp.Compiler.ErrorLogger+LibraryUseOnly: range get_Data0() -FSharp.Compiler.ErrorLogger+NumberedError: Boolean Equals(System.Object) -FSharp.Compiler.ErrorLogger+NumberedError: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+NumberedError: Int32 GetHashCode() -FSharp.Compiler.ErrorLogger+NumberedError: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+NumberedError: System.String Message -FSharp.Compiler.ErrorLogger+NumberedError: System.String get_Message() -FSharp.Compiler.ErrorLogger+NumberedError: System.Tuple`2[System.Int32,System.String] Data0 -FSharp.Compiler.ErrorLogger+NumberedError: System.Tuple`2[System.Int32,System.String] get_Data0() -FSharp.Compiler.ErrorLogger+NumberedError: Void .ctor() -FSharp.Compiler.ErrorLogger+NumberedError: Void .ctor(System.Tuple`2[System.Int32,System.String], range) -FSharp.Compiler.ErrorLogger+NumberedError: range Data1 -FSharp.Compiler.ErrorLogger+NumberedError: range get_Data1() -FSharp.Compiler.ErrorLogger+OperationResult: OperationResult`1 ignore[a](OperationResult`1) -FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: Boolean IsErrorResult -FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: Boolean IsOkResult -FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: Boolean get_IsErrorResult() -FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: Boolean get_IsOkResult() -FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: Microsoft.FSharp.Collections.FSharpList`1[System.Exception] get_warnings() -FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: Microsoft.FSharp.Collections.FSharpList`1[System.Exception] warnings -FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: Int32 Tag -FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: Int32 get_Tag() -FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: System.Exception Item2 -FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: System.Exception get_Item2() -FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T]: System.String ToString() -FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: Boolean IsErrorResult -FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: Boolean IsOkResult -FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: Boolean get_IsErrorResult() -FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: Boolean get_IsOkResult() -FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: Int32 Tag -FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: Int32 get_Tag() -FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: System.String ToString() -FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: T Item2 -FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: T get_Item2() -FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: Microsoft.FSharp.Collections.FSharpList`1[System.Exception] get_warnings() -FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T]: Microsoft.FSharp.Collections.FSharpList`1[System.Exception] warnings -FSharp.Compiler.ErrorLogger+OperationResult`1+Tags[T]: Int32 ErrorResult -FSharp.Compiler.ErrorLogger+OperationResult`1+Tags[T]: Int32 OkResult -FSharp.Compiler.ErrorLogger+OperationResult`1[T]: Boolean IsErrorResult -FSharp.Compiler.ErrorLogger+OperationResult`1[T]: Boolean IsOkResult -FSharp.Compiler.ErrorLogger+OperationResult`1[T]: Boolean get_IsErrorResult() -FSharp.Compiler.ErrorLogger+OperationResult`1[T]: Boolean get_IsOkResult() -FSharp.Compiler.ErrorLogger+OperationResult`1[T]: FSharp.Compiler.ErrorLogger+OperationResult`1+ErrorResult[T] -FSharp.Compiler.ErrorLogger+OperationResult`1[T]: FSharp.Compiler.ErrorLogger+OperationResult`1+OkResult[T] -FSharp.Compiler.ErrorLogger+OperationResult`1[T]: FSharp.Compiler.ErrorLogger+OperationResult`1+Tags[T] -FSharp.Compiler.ErrorLogger+OperationResult`1[T]: Int32 Tag -FSharp.Compiler.ErrorLogger+OperationResult`1[T]: Int32 get_Tag() -FSharp.Compiler.ErrorLogger+OperationResult`1[T]: OperationResult`1 NewErrorResult(Microsoft.FSharp.Collections.FSharpList`1[System.Exception], System.Exception) -FSharp.Compiler.ErrorLogger+OperationResult`1[T]: OperationResult`1 NewOkResult(Microsoft.FSharp.Collections.FSharpList`1[System.Exception], T) -FSharp.Compiler.ErrorLogger+OperationResult`1[T]: System.String ToString() -FSharp.Compiler.ErrorLogger+PhasedDiagnostic: Boolean Equals(PhasedDiagnostic) -FSharp.Compiler.ErrorLogger+PhasedDiagnostic: Boolean Equals(System.Object) -FSharp.Compiler.ErrorLogger+PhasedDiagnostic: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+PhasedDiagnostic: Boolean IsPhaseInCompile() -FSharp.Compiler.ErrorLogger+PhasedDiagnostic: Boolean IsSubcategoryOfCompile(System.String) -FSharp.Compiler.ErrorLogger+PhasedDiagnostic: BuildPhase Phase -FSharp.Compiler.ErrorLogger+PhasedDiagnostic: BuildPhase get_Phase() -FSharp.Compiler.ErrorLogger+PhasedDiagnostic: Int32 GetHashCode() -FSharp.Compiler.ErrorLogger+PhasedDiagnostic: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+PhasedDiagnostic: PhasedDiagnostic Create(System.Exception, BuildPhase) -FSharp.Compiler.ErrorLogger+PhasedDiagnostic: System.Exception Exception -FSharp.Compiler.ErrorLogger+PhasedDiagnostic: System.Exception get_Exception() -FSharp.Compiler.ErrorLogger+PhasedDiagnostic: System.String DebugDisplay() -FSharp.Compiler.ErrorLogger+PhasedDiagnostic: System.String Subcategory() -FSharp.Compiler.ErrorLogger+PhasedDiagnostic: System.String ToString() -FSharp.Compiler.ErrorLogger+PhasedDiagnostic: Void .ctor(System.Exception, BuildPhase) -FSharp.Compiler.ErrorLogger+PossibleUnverifiableCode: Boolean Equals(System.Object) -FSharp.Compiler.ErrorLogger+PossibleUnverifiableCode: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+PossibleUnverifiableCode: Int32 GetHashCode() -FSharp.Compiler.ErrorLogger+PossibleUnverifiableCode: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+PossibleUnverifiableCode: Void .ctor() -FSharp.Compiler.ErrorLogger+PossibleUnverifiableCode: Void .ctor(range) -FSharp.Compiler.ErrorLogger+PossibleUnverifiableCode: range Data0 -FSharp.Compiler.ErrorLogger+PossibleUnverifiableCode: range get_Data0() -FSharp.Compiler.ErrorLogger+ReportedError: Boolean Equals(System.Object) -FSharp.Compiler.ErrorLogger+ReportedError: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+ReportedError: Int32 GetHashCode() -FSharp.Compiler.ErrorLogger+ReportedError: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+ReportedError: Microsoft.FSharp.Core.FSharpOption`1[System.Exception] Data0 -FSharp.Compiler.ErrorLogger+ReportedError: Microsoft.FSharp.Core.FSharpOption`1[System.Exception] get_Data0() -FSharp.Compiler.ErrorLogger+ReportedError: System.String Message -FSharp.Compiler.ErrorLogger+ReportedError: System.String get_Message() -FSharp.Compiler.ErrorLogger+ReportedError: Void .ctor() -FSharp.Compiler.ErrorLogger+ReportedError: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[System.Exception]) -FSharp.Compiler.ErrorLogger+StopProcessingExn: Boolean Equals(System.Object) -FSharp.Compiler.ErrorLogger+StopProcessingExn: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+StopProcessingExn: Int32 GetHashCode() -FSharp.Compiler.ErrorLogger+StopProcessingExn: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+StopProcessingExn: Microsoft.FSharp.Core.FSharpOption`1[System.Exception] Data0 -FSharp.Compiler.ErrorLogger+StopProcessingExn: Microsoft.FSharp.Core.FSharpOption`1[System.Exception] get_Data0() -FSharp.Compiler.ErrorLogger+StopProcessingExn: System.String Message -FSharp.Compiler.ErrorLogger+StopProcessingExn: System.String ToString() -FSharp.Compiler.ErrorLogger+StopProcessingExn: System.String get_Message() -FSharp.Compiler.ErrorLogger+StopProcessingExn: Void .ctor() -FSharp.Compiler.ErrorLogger+StopProcessingExn: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[System.Exception]) -FSharp.Compiler.ErrorLogger+TrackErrorsBuilder: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,b] Delay[b](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,b]) -FSharp.Compiler.ErrorLogger+TrackErrorsBuilder: OperationResult`1 Bind[h,i](OperationResult`1, Microsoft.FSharp.Core.FSharpFunc`2[h,FSharp.Compiler.ErrorLogger+OperationResult`1[i]]) -FSharp.Compiler.ErrorLogger+TrackErrorsBuilder: OperationResult`1 Combine[c,d](OperationResult`1, Microsoft.FSharp.Core.FSharpFunc`2[c,FSharp.Compiler.ErrorLogger+OperationResult`1[d]]) -FSharp.Compiler.ErrorLogger+TrackErrorsBuilder: OperationResult`1 For[e](Microsoft.FSharp.Collections.FSharpList`1[e], Microsoft.FSharp.Core.FSharpFunc`2[e,FSharp.Compiler.ErrorLogger+OperationResult`1[Microsoft.FSharp.Core.Unit]]) -FSharp.Compiler.ErrorLogger+TrackErrorsBuilder: OperationResult`1 Return[g](g) -FSharp.Compiler.ErrorLogger+TrackErrorsBuilder: OperationResult`1 While(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.ErrorLogger+OperationResult`1[Microsoft.FSharp.Core.Unit]]) -FSharp.Compiler.ErrorLogger+TrackErrorsBuilder: OperationResult`1 Zero() -FSharp.Compiler.ErrorLogger+TrackErrorsBuilder: Void .ctor() -FSharp.Compiler.ErrorLogger+TrackErrorsBuilder: a Run[a](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,a]) -FSharp.Compiler.ErrorLogger+TrackErrorsBuilder: f ReturnFrom[f](f) -FSharp.Compiler.ErrorLogger+UnresolvedPathReference: Boolean Equals(System.Object) -FSharp.Compiler.ErrorLogger+UnresolvedPathReference: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+UnresolvedPathReference: Int32 GetHashCode() -FSharp.Compiler.ErrorLogger+UnresolvedPathReference: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+UnresolvedPathReference: System.String Data0 -FSharp.Compiler.ErrorLogger+UnresolvedPathReference: System.String Data1 -FSharp.Compiler.ErrorLogger+UnresolvedPathReference: System.String get_Data0() -FSharp.Compiler.ErrorLogger+UnresolvedPathReference: System.String get_Data1() -FSharp.Compiler.ErrorLogger+UnresolvedPathReference: Void .ctor() -FSharp.Compiler.ErrorLogger+UnresolvedPathReference: Void .ctor(System.String, System.String, range) -FSharp.Compiler.ErrorLogger+UnresolvedPathReference: range Data2 -FSharp.Compiler.ErrorLogger+UnresolvedPathReference: range get_Data2() -FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: Boolean Equals(System.Object) -FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: Int32 GetHashCode() -FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: System.String Data0 -FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: System.String Data1 -FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: System.String Message -FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: System.String get_Data0() -FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: System.String get_Data1() -FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: System.String get_Message() -FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: Void .ctor() -FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange: Void .ctor(System.String, System.String) -FSharp.Compiler.ErrorLogger+UnresolvedReferenceError: Boolean Equals(System.Object) -FSharp.Compiler.ErrorLogger+UnresolvedReferenceError: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+UnresolvedReferenceError: Int32 GetHashCode() -FSharp.Compiler.ErrorLogger+UnresolvedReferenceError: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+UnresolvedReferenceError: System.String Data0 -FSharp.Compiler.ErrorLogger+UnresolvedReferenceError: System.String get_Data0() -FSharp.Compiler.ErrorLogger+UnresolvedReferenceError: Void .ctor() -FSharp.Compiler.ErrorLogger+UnresolvedReferenceError: Void .ctor(System.String, range) -FSharp.Compiler.ErrorLogger+UnresolvedReferenceError: range Data1 -FSharp.Compiler.ErrorLogger+UnresolvedReferenceError: range get_Data1() -FSharp.Compiler.ErrorLogger+UnresolvedReferenceNoRange: Boolean Equals(System.Object) -FSharp.Compiler.ErrorLogger+UnresolvedReferenceNoRange: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+UnresolvedReferenceNoRange: Int32 GetHashCode() -FSharp.Compiler.ErrorLogger+UnresolvedReferenceNoRange: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+UnresolvedReferenceNoRange: System.String Data0 -FSharp.Compiler.ErrorLogger+UnresolvedReferenceNoRange: System.String get_Data0() -FSharp.Compiler.ErrorLogger+UnresolvedReferenceNoRange: Void .ctor() -FSharp.Compiler.ErrorLogger+UnresolvedReferenceNoRange: Void .ctor(System.String) -FSharp.Compiler.ErrorLogger+UserCompilerMessage: Boolean Equals(System.Object) -FSharp.Compiler.ErrorLogger+UserCompilerMessage: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+UserCompilerMessage: Int32 Data1 -FSharp.Compiler.ErrorLogger+UserCompilerMessage: Int32 GetHashCode() -FSharp.Compiler.ErrorLogger+UserCompilerMessage: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+UserCompilerMessage: Int32 get_Data1() -FSharp.Compiler.ErrorLogger+UserCompilerMessage: System.String Data0 -FSharp.Compiler.ErrorLogger+UserCompilerMessage: System.String get_Data0() -FSharp.Compiler.ErrorLogger+UserCompilerMessage: Void .ctor() -FSharp.Compiler.ErrorLogger+UserCompilerMessage: Void .ctor(System.String, Int32, range) -FSharp.Compiler.ErrorLogger+UserCompilerMessage: range Data2 -FSharp.Compiler.ErrorLogger+UserCompilerMessage: range get_Data2() -FSharp.Compiler.ErrorLogger+WrappedError: Boolean Equals(System.Object) -FSharp.Compiler.ErrorLogger+WrappedError: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+WrappedError: Int32 GetHashCode() -FSharp.Compiler.ErrorLogger+WrappedError: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ErrorLogger+WrappedError: System.Exception Data0 -FSharp.Compiler.ErrorLogger+WrappedError: System.Exception get_Data0() -FSharp.Compiler.ErrorLogger+WrappedError: System.String Message -FSharp.Compiler.ErrorLogger+WrappedError: System.String get_Message() -FSharp.Compiler.ErrorLogger+WrappedError: Void .ctor() -FSharp.Compiler.ErrorLogger+WrappedError: Void .ctor(System.Exception, range) -FSharp.Compiler.ErrorLogger+WrappedError: range Data1 -FSharp.Compiler.ErrorLogger+WrappedError: range get_Data1() -FSharp.Compiler.ErrorLogger: Boolean get_reportLibraryOnlyFeatures() -FSharp.Compiler.ErrorLogger: Boolean reportLibraryOnlyFeatures -FSharp.Compiler.ErrorLogger: ErrorLogger AssertFalseErrorLogger -FSharp.Compiler.ErrorLogger: ErrorLogger DiscardErrorsLogger -FSharp.Compiler.ErrorLogger: ErrorLogger get_AssertFalseErrorLogger() -FSharp.Compiler.ErrorLogger: ErrorLogger get_DiscardErrorsLogger() -FSharp.Compiler.ErrorLogger: Exiter QuitProcessExiter -FSharp.Compiler.ErrorLogger: Exiter get_QuitProcessExiter() -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+BuildPhase -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+BuildPhaseSubcategory -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+CapturingErrorLogger -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+Deprecated -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+Error -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+ErrorLogger -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+ErrorLoggerExtensions -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+ErrorStyle -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+ErrorWithSuggestions -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+Exiter -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+Experimental -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+FSharpErrorSeverityOptions -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+InternalError -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+LibraryUseOnly -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+NumberedError -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+OperationResult -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+OperationResult`1[T] -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+PhasedDiagnostic -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+PossibleUnverifiableCode -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+ReportedError -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+StopProcessingExn -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+TrackErrorsBuilder -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+UnresolvedPathReference -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+UnresolvedPathReferenceNoRange -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+UnresolvedReferenceError -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+UnresolvedReferenceNoRange -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+UserCompilerMessage -FSharp.Compiler.ErrorLogger: FSharp.Compiler.ErrorLogger+WrappedError -FSharp.Compiler.ErrorLogger: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit] NoSuggestions -FSharp.Compiler.ErrorLogger: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit] get_NoSuggestions() -FSharp.Compiler.ErrorLogger: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.Exception]] CheckNoErrorsAndGetWarnings[a](OperationResult`1) -FSharp.Compiler.ErrorLogger: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |StopProcessing|_|(System.Exception) -FSharp.Compiler.ErrorLogger: OperationResult`1 AtLeastOneD[a](Microsoft.FSharp.Core.FSharpFunc`2[a,FSharp.Compiler.ErrorLogger+OperationResult`1[System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.ErrorLogger: OperationResult`1 CompleteD -FSharp.Compiler.ErrorLogger: OperationResult`1 ErrorD[a](System.Exception) -FSharp.Compiler.ErrorLogger: OperationResult`1 Iterate2D[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,Microsoft.FSharp.Core.FSharpFunc`2[b,FSharp.Compiler.ErrorLogger+OperationResult`1[Microsoft.FSharp.Core.Unit]]], Microsoft.FSharp.Collections.FSharpList`1[a], Microsoft.FSharp.Collections.FSharpList`1[b]) -FSharp.Compiler.ErrorLogger: OperationResult`1 IterateD[a](Microsoft.FSharp.Core.FSharpFunc`2[a,FSharp.Compiler.ErrorLogger+OperationResult`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.ErrorLogger: OperationResult`1 IterateIdxD[a](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[a,FSharp.Compiler.ErrorLogger+OperationResult`1[Microsoft.FSharp.Core.Unit]]], Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.ErrorLogger: OperationResult`1 MapD[a,b](Microsoft.FSharp.Core.FSharpFunc`2[a,FSharp.Compiler.ErrorLogger+OperationResult`1[b]], Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.ErrorLogger: OperationResult`1 OptionD[a](Microsoft.FSharp.Core.FSharpFunc`2[a,FSharp.Compiler.ErrorLogger+OperationResult`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[a]) -FSharp.Compiler.ErrorLogger: OperationResult`1 RepeatWhileD(Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,FSharp.Compiler.ErrorLogger+OperationResult`1[System.Boolean]]) -FSharp.Compiler.ErrorLogger: OperationResult`1 ResultD[a](a) -FSharp.Compiler.ErrorLogger: OperationResult`1 TryD[a](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.ErrorLogger+OperationResult`1[a]], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,FSharp.Compiler.ErrorLogger+OperationResult`1[a]]) -FSharp.Compiler.ErrorLogger: OperationResult`1 WarnD(System.Exception) -FSharp.Compiler.ErrorLogger: OperationResult`1 WhileD(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.ErrorLogger+OperationResult`1[Microsoft.FSharp.Core.Unit]]) -FSharp.Compiler.ErrorLogger: OperationResult`1 get_CompleteD() -FSharp.Compiler.ErrorLogger: OperationResult`1 op_PlusPlus[a,b](OperationResult`1, Microsoft.FSharp.Core.FSharpFunc`2[a,FSharp.Compiler.ErrorLogger+OperationResult`1[b]]) -FSharp.Compiler.ErrorLogger: System.Exception AttachRange(range, System.Exception) -FSharp.Compiler.ErrorLogger: System.Exception StopProcessing[T]() -FSharp.Compiler.ErrorLogger: System.Exception findOriginalException(System.Exception) -FSharp.Compiler.ErrorLogger: System.IDisposable PushThreadBuildPhaseUntilUnwind(BuildPhase) -FSharp.Compiler.ErrorLogger: System.String NewlineifyErrorString(System.String) -FSharp.Compiler.ErrorLogger: System.String NormalizeErrorString(System.String) -FSharp.Compiler.ErrorLogger: System.String get_stringThatIsAProxyForANewlineInFlatErrors() -FSharp.Compiler.ErrorLogger: System.String stringThatIsAProxyForANewlineInFlatErrors -FSharp.Compiler.ErrorLogger: TrackErrorsBuilder get_trackErrors() -FSharp.Compiler.ErrorLogger: TrackErrorsBuilder trackErrors -FSharp.Compiler.ErrorLogger: Void RaiseOperationResult(OperationResult`1) -FSharp.Compiler.ErrorLogger: Void SetThreadBuildPhaseNoUnwind(BuildPhase) -FSharp.Compiler.ErrorLogger: Void SetThreadErrorLoggerNoUnwind(ErrorLogger) -FSharp.Compiler.ErrorLogger: Void deprecatedOperator(range) -FSharp.Compiler.ErrorLogger: Void deprecatedWithError(System.String, range) -FSharp.Compiler.ErrorLogger: Void diagnosticSink(PhasedDiagnostic, Boolean) -FSharp.Compiler.ErrorLogger: Void errorR(System.Exception) -FSharp.Compiler.ErrorLogger: Void errorRecovery(System.Exception, range) -FSharp.Compiler.ErrorLogger: Void errorRecoveryNoRange(System.Exception) -FSharp.Compiler.ErrorLogger: Void errorSink(PhasedDiagnostic) -FSharp.Compiler.ErrorLogger: Void libraryOnlyError(range) -FSharp.Compiler.ErrorLogger: Void libraryOnlyWarning(range) -FSharp.Compiler.ErrorLogger: Void mlCompatWarning(System.String, range) -FSharp.Compiler.ErrorLogger: Void set_reportLibraryOnlyFeatures(Boolean) -FSharp.Compiler.ErrorLogger: Void stopProcessingRecovery(System.Exception, range) -FSharp.Compiler.ErrorLogger: Void warnSink(PhasedDiagnostic) -FSharp.Compiler.ErrorLogger: Void warning(System.Exception) -FSharp.Compiler.ErrorLogger: a CommitOperationResult[a](OperationResult`1) -FSharp.Compiler.ErrorLogger: a conditionallySuppressErrorReporting[a](Boolean, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,a]) -FSharp.Compiler.ErrorLogger: a error[a](System.Exception) -FSharp.Compiler.ErrorLogger: a protectAssemblyExplorationF[a](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.String,System.String],a], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,a]) -FSharp.Compiler.ErrorLogger: a protectAssemblyExplorationNoReraise[a](a, a, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,a]) -FSharp.Compiler.ErrorLogger: a protectAssemblyExploration[a](a, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,a]) -FSharp.Compiler.ErrorLogger: a report[a](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,a]) -FSharp.Compiler.ErrorLogger: a simulateError[a](PhasedDiagnostic) -FSharp.Compiler.ErrorLogger: a suppressErrorReporting[a](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,a]) +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer+Succeeded: FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults Item +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer+Succeeded: FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults get_Item() +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer+Tags: Int32 Aborted +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer+Tags: Int32 Succeeded +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Boolean Equals(FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer) +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Boolean Equals(System.Object) +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Boolean IsAborted +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Boolean IsSucceeded +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Boolean get_IsAborted() +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Boolean get_IsSucceeded() +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer Aborted +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer NewSucceeded(FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults) +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer get_Aborted() +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer+Succeeded +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer+Tags +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Int32 GetHashCode() +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Int32 Tag +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: Int32 get_Tag() +FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer: System.String ToString() +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Boolean HasFullTypeCheckInfo +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Boolean IsRelativeNameResolvableFromSymbol(FSharp.Compiler.Text.Position, Microsoft.FSharp.Collections.FSharpList`1[System.String], FSharp.Compiler.Symbols.FSharpSymbol) +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Boolean get_HasFullTypeCheckInfo() +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.CodeAnalysis.FSharpProjectContext ProjectContext +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.CodeAnalysis.FSharpProjectContext get_ProjectContext() +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.CodeAnalysis.FSharpSymbolUse[] GetUsesOfSymbolInFile(FSharp.Compiler.Symbols.FSharpSymbol, Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.Diagnostics.FSharpDiagnostic[] Diagnostics +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.Diagnostics.FSharpDiagnostic[] get_Diagnostics() +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.EditorServices.DeclarationListInfo GetDeclarationListInfo(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.FSharpParseFileResults], Int32, System.String, FSharp.Compiler.EditorServices.PartialLongName, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.AssemblySymbol]]]) +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.EditorServices.FindDeclResult GetDeclarationLocation(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.EditorServices.MethodGroup GetMethods(Int32, Int32, System.String, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.EditorServices.SemanticClassificationItem[] GetSemanticClassification(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range]) +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.EditorServices.ToolTipText GetToolTip(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], Int32) +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.Symbols.FSharpAssemblySignature PartialAssemblySignature +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.Symbols.FSharpAssemblySignature get_PartialAssemblySignature() +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.Symbols.FSharpOpenDeclaration[] OpenDeclarations +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.Symbols.FSharpOpenDeclaration[] get_OpenDeclarations() +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: FSharp.Compiler.Text.Range[] GetFormatSpecifierLocations() +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.CodeAnalysis.FSharpSymbolUse]] GetDeclarationListSymbols(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.FSharpParseFileResults], Int32, System.String, FSharp.Compiler.EditorServices.PartialLongName, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.AssemblySymbol]]]) +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.FSharpSymbolUse] GetSymbolUseAtLocation(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpDisplayContext] GetDisplayContextForPos(FSharp.Compiler.Text.Position) +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpImplementationFileContents] ImplementationFile +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpImplementationFileContents] get_ImplementationFile() +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.ISourceText] GenerateSignature() +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.CodeAnalysis.FSharpSymbolUse]] GetMethodsAsSymbols(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[System.String] GetF1Keyword(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: System.Collections.Generic.IEnumerable`1[FSharp.Compiler.CodeAnalysis.FSharpSymbolUse] GetAllUsesOfAllSymbolsInFile(Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: System.String ToString() +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: System.String[] DependencyFiles +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: System.String[] get_DependencyFiles() +FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults: System.Tuple`2[FSharp.Compiler.Text.Range,System.Int32][] GetFormatSpecifierLocationsAndArity() +FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults +FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: Boolean HasCriticalErrors +FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: Boolean get_HasCriticalErrors() +FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.CodeAnalysis.FSharpProjectContext ProjectContext +FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.CodeAnalysis.FSharpProjectContext get_ProjectContext() +FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.CodeAnalysis.FSharpSymbolUse[] GetAllUsesOfAllSymbols(Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.CodeAnalysis.FSharpSymbolUse[] GetUsesOfSymbol(FSharp.Compiler.Symbols.FSharpSymbol, Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.Diagnostics.FSharpDiagnostic[] Diagnostics +FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.Diagnostics.FSharpDiagnostic[] get_Diagnostics() +FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.Symbols.FSharpAssemblyContents AssemblyContents +FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.Symbols.FSharpAssemblyContents GetOptimizedAssemblyContents() +FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.Symbols.FSharpAssemblyContents get_AssemblyContents() +FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.Symbols.FSharpAssemblySignature AssemblySignature +FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: FSharp.Compiler.Symbols.FSharpAssemblySignature get_AssemblySignature() +FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: System.String ToString() +FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: System.String[] DependencyFiles +FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults: System.String[] get_DependencyFiles() +FSharp.Compiler.CodeAnalysis.FSharpChecker +FSharp.Compiler.CodeAnalysis.FSharpChecker: FSharp.Compiler.CodeAnalysis.FSharpChecker Create(Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.LegacyReferenceResolver], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.String,System.DateTime],Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Object,System.IntPtr,System.Int32]]]], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: FSharp.Compiler.CodeAnalysis.FSharpChecker Instance +FSharp.Compiler.CodeAnalysis.FSharpChecker: FSharp.Compiler.CodeAnalysis.FSharpChecker get_Instance() +FSharp.Compiler.CodeAnalysis.FSharpChecker: FSharp.Compiler.CodeAnalysis.FSharpProjectOptions GetProjectOptionsFromCommandLineArgs(System.String, System.String[], Microsoft.FSharp.Core.FSharpOption`1[System.DateTime], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: FSharp.Compiler.Tokenization.FSharpTokenInfo[][] TokenizeFile(System.String) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Int32 ActualCheckFileCount +FSharp.Compiler.CodeAnalysis.FSharpChecker: Int32 ActualParseFileCount +FSharp.Compiler.CodeAnalysis.FSharpChecker: Int32 MaxMemory +FSharp.Compiler.CodeAnalysis.FSharpChecker: Int32 get_ActualCheckFileCount() +FSharp.Compiler.CodeAnalysis.FSharpChecker: Int32 get_ActualParseFileCount() +FSharp.Compiler.CodeAnalysis.FSharpChecker: Int32 get_MaxMemory() +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer] CheckFileInProject(FSharp.Compiler.CodeAnalysis.FSharpParseFileResults, System.String, Int32, FSharp.Compiler.Text.ISourceText, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults] ParseAndCheckProject(FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.CodeAnalysis.FSharpParseFileResults] GetBackgroundParseResultsForFileInProject(System.String, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.CodeAnalysis.FSharpParseFileResults] ParseFile(System.String, FSharp.Compiler.Text.ISourceText, FSharp.Compiler.CodeAnalysis.FSharpParsingOptions, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.CodeAnalysis.FSharpParseFileResults] ParseFileInProject(System.String, System.String, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer]] CheckFileInProjectAllowingStaleCachedResults(FSharp.Compiler.CodeAnalysis.FSharpParseFileResults, System.String, Int32, System.String, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.EditorServices.SemanticClassificationView]] GetBackgroundSemanticClassificationForFile(System.String, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] NotifyProjectCleaned(FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Collections.Generic.IEnumerable`1[FSharp.Compiler.Text.Range]] FindBackgroundReferencesInFile(System.String, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, FSharp.Compiler.Symbols.FSharpSymbol, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.CodeAnalysis.FSharpParseFileResults,FSharp.Compiler.CodeAnalysis.FSharpCheckFileAnswer]] ParseAndCheckFileInProject(System.String, Int32, FSharp.Compiler.Text.ISourceText, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.CodeAnalysis.FSharpParseFileResults,FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults]] GetBackgroundCheckResultsForFileInProject(System.String, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.CodeAnalysis.FSharpProjectOptions,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Diagnostics.FSharpDiagnostic]]] GetProjectOptionsFromScript(System.String, FSharp.Compiler.Text.ISourceText, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.DateTime], Microsoft.FSharp.Core.FSharpOption`1[System.String[]], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Int64], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.Diagnostics.FSharpDiagnostic[],System.Int32]] Compile(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedInput], System.String, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.Diagnostics.FSharpDiagnostic[],System.Int32]] Compile(System.String[], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.Text.Range,FSharp.Compiler.Text.Range][]] MatchBraces(System.String, FSharp.Compiler.Text.ISourceText, FSharp.Compiler.CodeAnalysis.FSharpParsingOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.Text.Range,FSharp.Compiler.Text.Range][]] MatchBraces(System.String, System.String, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`3[FSharp.Compiler.Diagnostics.FSharpDiagnostic[],System.Int32,Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.Assembly]]] CompileToDynamicAssembly(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedInput], System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.IO.TextWriter,System.IO.TextWriter]], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`3[FSharp.Compiler.Diagnostics.FSharpDiagnostic[],System.Int32,Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.Assembly]]] CompileToDynamicAssembly(System.String[], Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.IO.TextWriter,System.IO.TextWriter]], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[FSharp.Compiler.CodeAnalysis.FSharpProjectOptions],FSharp.Compiler.CodeAnalysis.FSharpProjectOptions] ProjectChecked +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[FSharp.Compiler.CodeAnalysis.FSharpProjectOptions],FSharp.Compiler.CodeAnalysis.FSharpProjectOptions] get_ProjectChecked() +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit] MaxMemoryReached +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit] get_MaxMemoryReached() +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]],System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]] BeforeBackgroundFileCheck +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]],System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]] FileChecked +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]],System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]] FileParsed +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]],System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]] get_BeforeBackgroundFileCheck() +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]],System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]] get_FileChecked() +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]],System.Tuple`2[System.String,FSharp.Compiler.CodeAnalysis.FSharpProjectOptions]] get_FileParsed() +FSharp.Compiler.CodeAnalysis.FSharpChecker: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.CodeAnalysis.FSharpParseFileResults,FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults,System.Int64]] TryGetRecentCheckResultsForFile(System.String, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.ISourceText], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: System.Tuple`2[FSharp.Compiler.CodeAnalysis.FSharpParsingOptions,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Diagnostics.FSharpDiagnostic]] GetParsingOptionsFromCommandLineArgs(Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: System.Tuple`2[FSharp.Compiler.CodeAnalysis.FSharpParsingOptions,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Diagnostics.FSharpDiagnostic]] GetParsingOptionsFromCommandLineArgs(Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: System.Tuple`2[FSharp.Compiler.CodeAnalysis.FSharpParsingOptions,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Diagnostics.FSharpDiagnostic]] GetParsingOptionsFromProjectOptions(FSharp.Compiler.CodeAnalysis.FSharpProjectOptions) +FSharp.Compiler.CodeAnalysis.FSharpChecker: System.Tuple`2[FSharp.Compiler.Tokenization.FSharpTokenInfo[],FSharp.Compiler.Tokenization.FSharpTokenizerLexState] TokenizeLine(System.String, FSharp.Compiler.Tokenization.FSharpTokenizerLexState) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Void ClearCache(System.Collections.Generic.IEnumerable`1[FSharp.Compiler.CodeAnalysis.FSharpProjectOptions], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Void ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() +FSharp.Compiler.CodeAnalysis.FSharpChecker: Void InvalidateAll() +FSharp.Compiler.CodeAnalysis.FSharpChecker: Void InvalidateConfiguration(FSharp.Compiler.CodeAnalysis.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CodeAnalysis.FSharpChecker: Void set_MaxMemory(Int32) +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Boolean IsBindingALambdaAtPosition(FSharp.Compiler.Text.Position) +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Boolean IsPosContainedInApplication(FSharp.Compiler.Text.Position) +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Boolean IsPositionContainedInACurriedParameter(FSharp.Compiler.Text.Position) +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Boolean IsTypeAnnotationGivenAtPosition(FSharp.Compiler.Text.Position) +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Boolean ParseHadErrors +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Boolean get_ParseHadErrors() +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: FSharp.Compiler.Diagnostics.FSharpDiagnostic[] Diagnostics +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: FSharp.Compiler.Diagnostics.FSharpDiagnostic[] get_Diagnostics() +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: FSharp.Compiler.EditorServices.NavigationItems GetNavigationItems() +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: FSharp.Compiler.Syntax.ParsedInput ParseTree +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: FSharp.Compiler.Syntax.ParsedInput get_ParseTree() +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.EditorServices.ParameterLocations] FindParameterLocations(FSharp.Compiler.Text.Position) +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] TryRangeOfExprInYieldOrReturn(FSharp.Compiler.Text.Position) +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] TryRangeOfExpressionBeingDereferencedContainingPos(FSharp.Compiler.Text.Position) +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] TryRangeOfFunctionOrMethodBeingApplied(FSharp.Compiler.Text.Position) +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] TryRangeOfNameOfNearestOuterBindingContainingPos(FSharp.Compiler.Text.Position) +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] TryRangeOfRecordExpressionContainingPos(FSharp.Compiler.Text.Position) +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] TryRangeOfRefCellDereferenceContainingPos(FSharp.Compiler.Text.Position) +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] ValidateBreakpointLocation(FSharp.Compiler.Text.Position) +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range]] GetAllArgumentsForFunctionApplicationAtPostion(FSharp.Compiler.Text.Position) +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,System.Int32]] TryIdentOfPipelineContainingPosAndNumArgsApplied(FSharp.Compiler.Text.Position) +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.Text.Range,FSharp.Compiler.Text.Range,FSharp.Compiler.Text.Range]] TryRangeOfParenEnclosingOpEqualsGreaterUsage(FSharp.Compiler.Text.Position) +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: System.String FileName +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: System.String get_FileName() +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: System.String[] DependencyFiles +FSharp.Compiler.CodeAnalysis.FSharpParseFileResults: System.String[] get_DependencyFiles() +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Boolean CompilingFsLib +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Boolean Equals(FSharp.Compiler.CodeAnalysis.FSharpParsingOptions) +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Boolean Equals(System.Object) +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Boolean IsExe +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Boolean IsInteractive +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Boolean get_CompilingFsLib() +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Boolean get_IsExe() +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Boolean get_IsInteractive() +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: FSharp.Compiler.CodeAnalysis.FSharpParsingOptions Default +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: FSharp.Compiler.CodeAnalysis.FSharpParsingOptions get_Default() +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions ErrorSeverityOptions +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions get_ErrorSeverityOptions() +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Int32 CompareTo(FSharp.Compiler.CodeAnalysis.FSharpParsingOptions) +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Int32 CompareTo(System.Object) +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Int32 GetHashCode() +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Microsoft.FSharp.Collections.FSharpList`1[System.String] ConditionalCompilationDefines +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_ConditionalCompilationDefines() +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Microsoft.FSharp.Core.FSharpOption`1[System.Boolean] LightSyntax +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Microsoft.FSharp.Core.FSharpOption`1[System.Boolean] get_LightSyntax() +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: System.String ToString() +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: System.String[] SourceFiles +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: System.String[] get_SourceFiles() +FSharp.Compiler.CodeAnalysis.FSharpParsingOptions: Void .ctor(System.String[], Microsoft.FSharp.Collections.FSharpList`1[System.String], FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions, Boolean, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Boolean, Boolean) +FSharp.Compiler.CodeAnalysis.FSharpProjectContext +FSharp.Compiler.CodeAnalysis.FSharpProjectContext: FSharp.Compiler.CodeAnalysis.FSharpProjectOptions ProjectOptions +FSharp.Compiler.CodeAnalysis.FSharpProjectContext: FSharp.Compiler.CodeAnalysis.FSharpProjectOptions get_ProjectOptions() +FSharp.Compiler.CodeAnalysis.FSharpProjectContext: FSharp.Compiler.Symbols.FSharpAccessibilityRights AccessibilityRights +FSharp.Compiler.CodeAnalysis.FSharpProjectContext: FSharp.Compiler.Symbols.FSharpAccessibilityRights get_AccessibilityRights() +FSharp.Compiler.CodeAnalysis.FSharpProjectContext: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpAssembly] GetReferencedAssemblies() +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Boolean Equals(FSharp.Compiler.CodeAnalysis.FSharpProjectOptions) +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Boolean Equals(System.Object) +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Boolean IsIncompleteTypeCheckEnvironment +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Boolean UseScriptResolutionRules +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Boolean get_IsIncompleteTypeCheckEnvironment() +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Boolean get_UseScriptResolutionRules() +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: FSharp.Compiler.CodeAnalysis.FSharpReferencedProject[] ReferencedProjects +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: FSharp.Compiler.CodeAnalysis.FSharpReferencedProject[] get_ReferencedProjects() +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Int32 GetHashCode() +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Text.Range,System.String,System.String]] OriginalLoadReferences +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Text.Range,System.String,System.String]] get_OriginalLoadReferences() +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet] UnresolvedReferences +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet] get_UnresolvedReferences() +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[System.Int64] Stamp +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[System.Int64] get_Stamp() +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[System.String] ProjectId +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_ProjectId() +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: System.DateTime LoadTime +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: System.DateTime get_LoadTime() +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: System.String ProjectFileName +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: System.String ToString() +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: System.String get_ProjectFileName() +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: System.String[] OtherOptions +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: System.String[] SourceFiles +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: System.String[] get_OtherOptions() +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: System.String[] get_SourceFiles() +FSharp.Compiler.CodeAnalysis.FSharpProjectOptions: Void .ctor(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.String], System.String[], System.String[], FSharp.Compiler.CodeAnalysis.FSharpReferencedProject[], Boolean, Boolean, System.DateTime, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Text.Range,System.String,System.String]], Microsoft.FSharp.Core.FSharpOption`1[System.Int64]) +FSharp.Compiler.CodeAnalysis.FSharpReferencedProject +FSharp.Compiler.CodeAnalysis.FSharpReferencedProject: Boolean Equals(System.Object) +FSharp.Compiler.CodeAnalysis.FSharpReferencedProject: FSharp.Compiler.CodeAnalysis.FSharpReferencedProject CreateFSharp(System.String, FSharp.Compiler.CodeAnalysis.FSharpProjectOptions) +FSharp.Compiler.CodeAnalysis.FSharpReferencedProject: FSharp.Compiler.CodeAnalysis.FSharpReferencedProject CreateFromILModuleReader(System.String, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.DateTime], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,FSharp.Compiler.AbstractIL.ILBinaryReader+ILModuleReader]) +FSharp.Compiler.CodeAnalysis.FSharpReferencedProject: FSharp.Compiler.CodeAnalysis.FSharpReferencedProject CreatePortableExecutable(System.String, System.DateTime, Microsoft.FSharp.Core.FSharpFunc`2[System.Threading.CancellationToken,Microsoft.FSharp.Core.FSharpOption`1[System.IO.Stream]]) +FSharp.Compiler.CodeAnalysis.FSharpReferencedProject: Int32 GetHashCode() +FSharp.Compiler.CodeAnalysis.FSharpReferencedProject: System.String FileName +FSharp.Compiler.CodeAnalysis.FSharpReferencedProject: System.String ToString() +FSharp.Compiler.CodeAnalysis.FSharpReferencedProject: System.String get_FileName() +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean IsFromAttribute +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean IsFromComputationExpression +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean IsFromDefinition +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean IsFromDispatchSlotImplementation +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean IsFromOpenStatement +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean IsFromPattern +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean IsFromType +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean IsPrivateToFile +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean get_IsFromAttribute() +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean get_IsFromComputationExpression() +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean get_IsFromDefinition() +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean get_IsFromDispatchSlotImplementation() +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean get_IsFromOpenStatement() +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean get_IsFromPattern() +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean get_IsFromType() +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: Boolean get_IsPrivateToFile() +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: FSharp.Compiler.Symbols.FSharpDisplayContext DisplayContext +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: FSharp.Compiler.Symbols.FSharpDisplayContext get_DisplayContext() +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: FSharp.Compiler.Symbols.FSharpSymbol Symbol +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: FSharp.Compiler.Symbols.FSharpSymbol get_Symbol() +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: FSharp.Compiler.Text.Range Range +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: System.String FileName +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: System.String ToString() +FSharp.Compiler.CodeAnalysis.FSharpSymbolUse: System.String get_FileName() +FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet +FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet: Boolean Equals(FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet) +FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet: Boolean Equals(System.Object) +FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet: Int32 GetHashCode() +FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.CodeAnalysis.FSharpUnresolvedReferencesSet: System.String ToString() +FSharp.Compiler.CodeAnalysis.LegacyMSBuildReferenceResolver +FSharp.Compiler.CodeAnalysis.LegacyMSBuildReferenceResolver: FSharp.Compiler.CodeAnalysis.LegacyReferenceResolver getResolver() +FSharp.Compiler.CodeAnalysis.LegacyReferenceResolver +FSharp.Compiler.CompilerEnvironment +FSharp.Compiler.CompilerEnvironment: Boolean IsCheckerSupportedSubcategory(System.String) +FSharp.Compiler.CompilerEnvironment: Boolean IsCompilable(System.String) +FSharp.Compiler.CompilerEnvironment: Boolean IsScriptFile(System.String) +FSharp.Compiler.CompilerEnvironment: Boolean MustBeSingleFileProject(System.String) +FSharp.Compiler.CompilerEnvironment: Microsoft.FSharp.Collections.FSharpList`1[System.String] DefaultReferencesForOrphanSources(Boolean) +FSharp.Compiler.CompilerEnvironment: Microsoft.FSharp.Collections.FSharpList`1[System.String] GetCompilationDefinesForEditing(FSharp.Compiler.CodeAnalysis.FSharpParsingOptions) +FSharp.Compiler.CompilerEnvironment: Microsoft.FSharp.Core.FSharpOption`1[System.String] BinFolderOfDefaultFSharpCompiler(Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.CompilerEnvironment: System.Guid GetDebuggerLanguageID() +FSharp.Compiler.DependencyManager.AssemblyResolutionProbe +FSharp.Compiler.DependencyManager.AssemblyResolutionProbe: System.Collections.Generic.IEnumerable`1[System.String] EndInvoke(System.IAsyncResult) +FSharp.Compiler.DependencyManager.AssemblyResolutionProbe: System.Collections.Generic.IEnumerable`1[System.String] Invoke() +FSharp.Compiler.DependencyManager.AssemblyResolutionProbe: System.IAsyncResult BeginInvoke(System.AsyncCallback, System.Object) +FSharp.Compiler.DependencyManager.AssemblyResolutionProbe: Void .ctor(System.Object, IntPtr) +FSharp.Compiler.DependencyManager.AssemblyResolveHandler +FSharp.Compiler.DependencyManager.AssemblyResolveHandler: Void .ctor(FSharp.Compiler.DependencyManager.AssemblyResolutionProbe) +FSharp.Compiler.DependencyManager.DependencyProvider +FSharp.Compiler.DependencyManager.DependencyProvider: FSharp.Compiler.DependencyManager.IDependencyManagerProvider TryFindDependencyManagerByKey(System.Collections.Generic.IEnumerable`1[System.String], System.String, FSharp.Compiler.DependencyManager.ResolvingErrorReport, System.String) +FSharp.Compiler.DependencyManager.DependencyProvider: FSharp.Compiler.DependencyManager.IResolveDependenciesResult Resolve(FSharp.Compiler.DependencyManager.IDependencyManagerProvider, System.String, System.Collections.Generic.IEnumerable`1[System.Tuple`2[System.String,System.String]], FSharp.Compiler.DependencyManager.ResolvingErrorReport, System.String, System.String, System.String, System.String, System.String, Int32) +FSharp.Compiler.DependencyManager.DependencyProvider: System.String[] GetRegisteredDependencyManagerHelpText(System.Collections.Generic.IEnumerable`1[System.String], System.String, FSharp.Compiler.DependencyManager.ResolvingErrorReport) +FSharp.Compiler.DependencyManager.DependencyProvider: System.Tuple`2[System.Int32,System.String] CreatePackageManagerUnknownError(System.Collections.Generic.IEnumerable`1[System.String], System.String, System.String, FSharp.Compiler.DependencyManager.ResolvingErrorReport) +FSharp.Compiler.DependencyManager.DependencyProvider: System.Tuple`2[System.String,FSharp.Compiler.DependencyManager.IDependencyManagerProvider] TryFindDependencyManagerInPath(System.Collections.Generic.IEnumerable`1[System.String], System.String, FSharp.Compiler.DependencyManager.ResolvingErrorReport, System.String) +FSharp.Compiler.DependencyManager.DependencyProvider: Void .ctor() +FSharp.Compiler.DependencyManager.DependencyProvider: Void .ctor(FSharp.Compiler.DependencyManager.AssemblyResolutionProbe, FSharp.Compiler.DependencyManager.NativeResolutionProbe) +FSharp.Compiler.DependencyManager.DependencyProvider: Void .ctor(FSharp.Compiler.DependencyManager.NativeResolutionProbe) +FSharp.Compiler.DependencyManager.ErrorReportType +FSharp.Compiler.DependencyManager.ErrorReportType+Tags: Int32 Error +FSharp.Compiler.DependencyManager.ErrorReportType+Tags: Int32 Warning +FSharp.Compiler.DependencyManager.ErrorReportType: Boolean Equals(FSharp.Compiler.DependencyManager.ErrorReportType) +FSharp.Compiler.DependencyManager.ErrorReportType: Boolean Equals(System.Object) +FSharp.Compiler.DependencyManager.ErrorReportType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.DependencyManager.ErrorReportType: Boolean IsError +FSharp.Compiler.DependencyManager.ErrorReportType: Boolean IsWarning +FSharp.Compiler.DependencyManager.ErrorReportType: Boolean get_IsError() +FSharp.Compiler.DependencyManager.ErrorReportType: Boolean get_IsWarning() +FSharp.Compiler.DependencyManager.ErrorReportType: FSharp.Compiler.DependencyManager.ErrorReportType Error +FSharp.Compiler.DependencyManager.ErrorReportType: FSharp.Compiler.DependencyManager.ErrorReportType Warning +FSharp.Compiler.DependencyManager.ErrorReportType: FSharp.Compiler.DependencyManager.ErrorReportType get_Error() +FSharp.Compiler.DependencyManager.ErrorReportType: FSharp.Compiler.DependencyManager.ErrorReportType get_Warning() +FSharp.Compiler.DependencyManager.ErrorReportType: FSharp.Compiler.DependencyManager.ErrorReportType+Tags +FSharp.Compiler.DependencyManager.ErrorReportType: Int32 CompareTo(FSharp.Compiler.DependencyManager.ErrorReportType) +FSharp.Compiler.DependencyManager.ErrorReportType: Int32 CompareTo(System.Object) +FSharp.Compiler.DependencyManager.ErrorReportType: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.DependencyManager.ErrorReportType: Int32 GetHashCode() +FSharp.Compiler.DependencyManager.ErrorReportType: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.DependencyManager.ErrorReportType: Int32 Tag +FSharp.Compiler.DependencyManager.ErrorReportType: Int32 get_Tag() +FSharp.Compiler.DependencyManager.ErrorReportType: System.String ToString() +FSharp.Compiler.DependencyManager.IDependencyManagerProvider +FSharp.Compiler.DependencyManager.IDependencyManagerProvider: FSharp.Compiler.DependencyManager.IResolveDependenciesResult ResolveDependencies(System.String, System.String, System.String, System.String, System.Collections.Generic.IEnumerable`1[System.Tuple`2[System.String,System.String]], System.String, System.String, Int32) +FSharp.Compiler.DependencyManager.IDependencyManagerProvider: System.String Key +FSharp.Compiler.DependencyManager.IDependencyManagerProvider: System.String Name +FSharp.Compiler.DependencyManager.IDependencyManagerProvider: System.String get_Key() +FSharp.Compiler.DependencyManager.IDependencyManagerProvider: System.String get_Name() +FSharp.Compiler.DependencyManager.IDependencyManagerProvider: System.String[] HelpMessages +FSharp.Compiler.DependencyManager.IDependencyManagerProvider: System.String[] get_HelpMessages() +FSharp.Compiler.DependencyManager.IResolveDependenciesResult +FSharp.Compiler.DependencyManager.IResolveDependenciesResult: Boolean Success +FSharp.Compiler.DependencyManager.IResolveDependenciesResult: Boolean get_Success() +FSharp.Compiler.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] Resolutions +FSharp.Compiler.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] Roots +FSharp.Compiler.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] SourceFiles +FSharp.Compiler.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] get_Resolutions() +FSharp.Compiler.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] get_Roots() +FSharp.Compiler.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] get_SourceFiles() +FSharp.Compiler.DependencyManager.IResolveDependenciesResult: System.String[] StdError +FSharp.Compiler.DependencyManager.IResolveDependenciesResult: System.String[] StdOut +FSharp.Compiler.DependencyManager.IResolveDependenciesResult: System.String[] get_StdError() +FSharp.Compiler.DependencyManager.IResolveDependenciesResult: System.String[] get_StdOut() +FSharp.Compiler.DependencyManager.NativeDllResolveHandler +FSharp.Compiler.DependencyManager.NativeDllResolveHandler: Void .ctor(FSharp.Compiler.DependencyManager.NativeResolutionProbe) +FSharp.Compiler.DependencyManager.NativeResolutionProbe +FSharp.Compiler.DependencyManager.NativeResolutionProbe: System.Collections.Generic.IEnumerable`1[System.String] EndInvoke(System.IAsyncResult) +FSharp.Compiler.DependencyManager.NativeResolutionProbe: System.Collections.Generic.IEnumerable`1[System.String] Invoke() +FSharp.Compiler.DependencyManager.NativeResolutionProbe: System.IAsyncResult BeginInvoke(System.AsyncCallback, System.Object) +FSharp.Compiler.DependencyManager.NativeResolutionProbe: Void .ctor(System.Object, IntPtr) +FSharp.Compiler.DependencyManager.ResolvingErrorReport +FSharp.Compiler.DependencyManager.ResolvingErrorReport: System.IAsyncResult BeginInvoke(FSharp.Compiler.DependencyManager.ErrorReportType, Int32, System.String, System.AsyncCallback, System.Object) +FSharp.Compiler.DependencyManager.ResolvingErrorReport: Void .ctor(System.Object, IntPtr) +FSharp.Compiler.DependencyManager.ResolvingErrorReport: Void EndInvoke(System.IAsyncResult) +FSharp.Compiler.DependencyManager.ResolvingErrorReport: Void Invoke(FSharp.Compiler.DependencyManager.ErrorReportType, Int32, System.String) +FSharp.Compiler.Diagnostics.CompilerDiagnostics +FSharp.Compiler.Diagnostics.CompilerDiagnostics: System.Collections.Generic.IEnumerable`1[System.String] GetSuggestedNames(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit], System.String) +FSharp.Compiler.Diagnostics.CompilerDiagnostics: System.String GetErrorMessage(FSharp.Compiler.Diagnostics.FSharpDiagnosticKind) +FSharp.Compiler.Diagnostics.FSharpDiagnostic +FSharp.Compiler.Diagnostics.FSharpDiagnostic: FSharp.Compiler.Diagnostics.FSharpDiagnostic Create(FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity, System.String, Int32, FSharp.Compiler.Text.Range, Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.Diagnostics.FSharpDiagnostic: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity Severity +FSharp.Compiler.Diagnostics.FSharpDiagnostic: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity get_Severity() +FSharp.Compiler.Diagnostics.FSharpDiagnostic: FSharp.Compiler.Text.Position End +FSharp.Compiler.Diagnostics.FSharpDiagnostic: FSharp.Compiler.Text.Position Start +FSharp.Compiler.Diagnostics.FSharpDiagnostic: FSharp.Compiler.Text.Position get_End() +FSharp.Compiler.Diagnostics.FSharpDiagnostic: FSharp.Compiler.Text.Position get_Start() +FSharp.Compiler.Diagnostics.FSharpDiagnostic: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Diagnostics.FSharpDiagnostic: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Diagnostics.FSharpDiagnostic: Int32 EndColumn +FSharp.Compiler.Diagnostics.FSharpDiagnostic: Int32 EndLine +FSharp.Compiler.Diagnostics.FSharpDiagnostic: Int32 ErrorNumber +FSharp.Compiler.Diagnostics.FSharpDiagnostic: Int32 StartColumn +FSharp.Compiler.Diagnostics.FSharpDiagnostic: Int32 StartLine +FSharp.Compiler.Diagnostics.FSharpDiagnostic: Int32 get_EndColumn() +FSharp.Compiler.Diagnostics.FSharpDiagnostic: Int32 get_EndLine() +FSharp.Compiler.Diagnostics.FSharpDiagnostic: Int32 get_ErrorNumber() +FSharp.Compiler.Diagnostics.FSharpDiagnostic: Int32 get_StartColumn() +FSharp.Compiler.Diagnostics.FSharpDiagnostic: Int32 get_StartLine() +FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String ErrorNumberPrefix +FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String ErrorNumberText +FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String FileName +FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String Message +FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String NewlineifyErrorString(System.String) +FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String NormalizeErrorString(System.String) +FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String Subcategory +FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String ToString() +FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String get_ErrorNumberPrefix() +FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String get_ErrorNumberText() +FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String get_FileName() +FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String get_Message() +FSharp.Compiler.Diagnostics.FSharpDiagnostic: System.String get_Subcategory() +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind+ReplaceWithSuggestion: System.String get_suggestion() +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind+ReplaceWithSuggestion: System.String suggestion +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind+Tags: Int32 AddIndexerDot +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind+Tags: Int32 ReplaceWithSuggestion +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Boolean Equals(FSharp.Compiler.Diagnostics.FSharpDiagnosticKind) +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Boolean Equals(System.Object) +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Boolean IsAddIndexerDot +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Boolean IsReplaceWithSuggestion +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Boolean get_IsAddIndexerDot() +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Boolean get_IsReplaceWithSuggestion() +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: FSharp.Compiler.Diagnostics.FSharpDiagnosticKind AddIndexerDot +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: FSharp.Compiler.Diagnostics.FSharpDiagnosticKind NewReplaceWithSuggestion(System.String) +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: FSharp.Compiler.Diagnostics.FSharpDiagnosticKind get_AddIndexerDot() +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: FSharp.Compiler.Diagnostics.FSharpDiagnosticKind+ReplaceWithSuggestion +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: FSharp.Compiler.Diagnostics.FSharpDiagnosticKind+Tags +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Int32 CompareTo(FSharp.Compiler.Diagnostics.FSharpDiagnosticKind) +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Int32 CompareTo(System.Object) +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Int32 GetHashCode() +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Int32 Tag +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: Int32 get_Tag() +FSharp.Compiler.Diagnostics.FSharpDiagnosticKind: System.String ToString() +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Boolean Equals(FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions) +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Boolean Equals(System.Object) +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Boolean GlobalWarnAsError +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Boolean get_GlobalWarnAsError() +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions Default +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions get_Default() +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Int32 CompareTo(FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions) +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Int32 CompareTo(System.Object) +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Int32 GetHashCode() +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Int32 WarnLevel +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Int32 get_WarnLevel() +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] WarnAsError +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] WarnAsWarn +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] WarnOff +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] WarnOn +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] get_WarnAsError() +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] get_WarnAsWarn() +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] get_WarnOff() +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] get_WarnOn() +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: System.String ToString() +FSharp.Compiler.Diagnostics.FSharpDiagnosticOptions: Void .ctor(Int32, Boolean, Microsoft.FSharp.Collections.FSharpList`1[System.Int32], Microsoft.FSharp.Collections.FSharpList`1[System.Int32], Microsoft.FSharp.Collections.FSharpList`1[System.Int32], Microsoft.FSharp.Collections.FSharpList`1[System.Int32]) +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity+Tags: Int32 Error +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity+Tags: Int32 Hidden +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity+Tags: Int32 Info +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity+Tags: Int32 Warning +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean Equals(FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity) +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean Equals(System.Object) +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean IsError +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean IsHidden +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean IsInfo +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean IsWarning +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean get_IsError() +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean get_IsHidden() +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean get_IsInfo() +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Boolean get_IsWarning() +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity Error +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity Hidden +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity Info +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity Warning +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity get_Error() +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity get_Hidden() +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity get_Info() +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity get_Warning() +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity+Tags +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Int32 CompareTo(FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity) +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Int32 CompareTo(System.Object) +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Int32 GetHashCode() +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Int32 Tag +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: Int32 get_Tag() +FSharp.Compiler.Diagnostics.FSharpDiagnosticSeverity: System.String ToString() +FSharp.Compiler.EditorServices.AssemblyContent +FSharp.Compiler.EditorServices.AssemblyContent: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.AssemblySymbol] GetAssemblyContent(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.EditorServices.IAssemblyContentCache,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.AssemblySymbol]],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.AssemblySymbol]], FSharp.Compiler.EditorServices.AssemblyContentType, Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpAssembly]) +FSharp.Compiler.EditorServices.AssemblyContent: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.AssemblySymbol] GetAssemblySignatureContent(FSharp.Compiler.EditorServices.AssemblyContentType, FSharp.Compiler.Symbols.FSharpAssemblySignature) +FSharp.Compiler.EditorServices.AssemblyContentType +FSharp.Compiler.EditorServices.AssemblyContentType+Tags: Int32 Full +FSharp.Compiler.EditorServices.AssemblyContentType+Tags: Int32 Public +FSharp.Compiler.EditorServices.AssemblyContentType: Boolean Equals(FSharp.Compiler.EditorServices.AssemblyContentType) +FSharp.Compiler.EditorServices.AssemblyContentType: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.AssemblyContentType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.AssemblyContentType: Boolean IsFull +FSharp.Compiler.EditorServices.AssemblyContentType: Boolean IsPublic +FSharp.Compiler.EditorServices.AssemblyContentType: Boolean get_IsFull() +FSharp.Compiler.EditorServices.AssemblyContentType: Boolean get_IsPublic() +FSharp.Compiler.EditorServices.AssemblyContentType: FSharp.Compiler.EditorServices.AssemblyContentType Full +FSharp.Compiler.EditorServices.AssemblyContentType: FSharp.Compiler.EditorServices.AssemblyContentType Public +FSharp.Compiler.EditorServices.AssemblyContentType: FSharp.Compiler.EditorServices.AssemblyContentType get_Full() +FSharp.Compiler.EditorServices.AssemblyContentType: FSharp.Compiler.EditorServices.AssemblyContentType get_Public() +FSharp.Compiler.EditorServices.AssemblyContentType: FSharp.Compiler.EditorServices.AssemblyContentType+Tags +FSharp.Compiler.EditorServices.AssemblyContentType: Int32 CompareTo(FSharp.Compiler.EditorServices.AssemblyContentType) +FSharp.Compiler.EditorServices.AssemblyContentType: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.AssemblyContentType: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.AssemblyContentType: Int32 GetHashCode() +FSharp.Compiler.EditorServices.AssemblyContentType: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.AssemblyContentType: Int32 Tag +FSharp.Compiler.EditorServices.AssemblyContentType: Int32 get_Tag() +FSharp.Compiler.EditorServices.AssemblyContentType: System.String ToString() +FSharp.Compiler.EditorServices.AssemblySymbol +FSharp.Compiler.EditorServices.AssemblySymbol: FSharp.Compiler.EditorServices.UnresolvedSymbol UnresolvedSymbol +FSharp.Compiler.EditorServices.AssemblySymbol: FSharp.Compiler.EditorServices.UnresolvedSymbol get_UnresolvedSymbol() +FSharp.Compiler.EditorServices.AssemblySymbol: FSharp.Compiler.Symbols.FSharpSymbol Symbol +FSharp.Compiler.EditorServices.AssemblySymbol: FSharp.Compiler.Symbols.FSharpSymbol get_Symbol() +FSharp.Compiler.EditorServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.EditorServices.LookupType,FSharp.Compiler.EditorServices.EntityKind] Kind +FSharp.Compiler.EditorServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.EditorServices.LookupType,FSharp.Compiler.EditorServices.EntityKind] get_Kind() +FSharp.Compiler.EditorServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] AutoOpenParent +FSharp.Compiler.EditorServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] Namespace +FSharp.Compiler.EditorServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] NearestRequireQualifiedAccessParent +FSharp.Compiler.EditorServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] TopRequireQualifiedAccessParent +FSharp.Compiler.EditorServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] get_AutoOpenParent() +FSharp.Compiler.EditorServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] get_Namespace() +FSharp.Compiler.EditorServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] get_NearestRequireQualifiedAccessParent() +FSharp.Compiler.EditorServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] get_TopRequireQualifiedAccessParent() +FSharp.Compiler.EditorServices.AssemblySymbol: System.String FullName +FSharp.Compiler.EditorServices.AssemblySymbol: System.String ToString() +FSharp.Compiler.EditorServices.AssemblySymbol: System.String get_FullName() +FSharp.Compiler.EditorServices.AssemblySymbol: System.String[] CleanedIdents +FSharp.Compiler.EditorServices.AssemblySymbol: System.String[] get_CleanedIdents() +FSharp.Compiler.EditorServices.AssemblySymbol: Void .ctor(System.String, System.String[], Microsoft.FSharp.Core.FSharpOption`1[System.String[]], Microsoft.FSharp.Core.FSharpOption`1[System.String[]], Microsoft.FSharp.Core.FSharpOption`1[System.String[]], Microsoft.FSharp.Core.FSharpOption`1[System.String[]], FSharp.Compiler.Symbols.FSharpSymbol, Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.EditorServices.LookupType,FSharp.Compiler.EditorServices.EntityKind], FSharp.Compiler.EditorServices.UnresolvedSymbol) +FSharp.Compiler.EditorServices.CompletionContext +FSharp.Compiler.EditorServices.CompletionContext+Inherit: FSharp.Compiler.EditorServices.InheritanceContext context +FSharp.Compiler.EditorServices.CompletionContext+Inherit: FSharp.Compiler.EditorServices.InheritanceContext get_context() +FSharp.Compiler.EditorServices.CompletionContext+Inherit: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] get_path() +FSharp.Compiler.EditorServices.CompletionContext+Inherit: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] path +FSharp.Compiler.EditorServices.CompletionContext+OpenDeclaration: Boolean get_isOpenType() +FSharp.Compiler.EditorServices.CompletionContext+OpenDeclaration: Boolean isOpenType +FSharp.Compiler.EditorServices.CompletionContext+ParameterList: FSharp.Compiler.Text.Position Item1 +FSharp.Compiler.EditorServices.CompletionContext+ParameterList: FSharp.Compiler.Text.Position get_Item1() +FSharp.Compiler.EditorServices.CompletionContext+ParameterList: System.Collections.Generic.HashSet`1[System.String] Item2 +FSharp.Compiler.EditorServices.CompletionContext+ParameterList: System.Collections.Generic.HashSet`1[System.String] get_Item2() +FSharp.Compiler.EditorServices.CompletionContext+RecordField: FSharp.Compiler.EditorServices.RecordContext context +FSharp.Compiler.EditorServices.CompletionContext+RecordField: FSharp.Compiler.EditorServices.RecordContext get_context() +FSharp.Compiler.EditorServices.CompletionContext+Tags: Int32 AttributeApplication +FSharp.Compiler.EditorServices.CompletionContext+Tags: Int32 Inherit +FSharp.Compiler.EditorServices.CompletionContext+Tags: Int32 Invalid +FSharp.Compiler.EditorServices.CompletionContext+Tags: Int32 OpenDeclaration +FSharp.Compiler.EditorServices.CompletionContext+Tags: Int32 ParameterList +FSharp.Compiler.EditorServices.CompletionContext+Tags: Int32 PatternType +FSharp.Compiler.EditorServices.CompletionContext+Tags: Int32 RangeOperator +FSharp.Compiler.EditorServices.CompletionContext+Tags: Int32 RecordField +FSharp.Compiler.EditorServices.CompletionContext: Boolean Equals(FSharp.Compiler.EditorServices.CompletionContext) +FSharp.Compiler.EditorServices.CompletionContext: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.CompletionContext: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.CompletionContext: Boolean IsAttributeApplication +FSharp.Compiler.EditorServices.CompletionContext: Boolean IsInherit +FSharp.Compiler.EditorServices.CompletionContext: Boolean IsInvalid +FSharp.Compiler.EditorServices.CompletionContext: Boolean IsOpenDeclaration +FSharp.Compiler.EditorServices.CompletionContext: Boolean IsParameterList +FSharp.Compiler.EditorServices.CompletionContext: Boolean IsPatternType +FSharp.Compiler.EditorServices.CompletionContext: Boolean IsRangeOperator +FSharp.Compiler.EditorServices.CompletionContext: Boolean IsRecordField +FSharp.Compiler.EditorServices.CompletionContext: Boolean get_IsAttributeApplication() +FSharp.Compiler.EditorServices.CompletionContext: Boolean get_IsInherit() +FSharp.Compiler.EditorServices.CompletionContext: Boolean get_IsInvalid() +FSharp.Compiler.EditorServices.CompletionContext: Boolean get_IsOpenDeclaration() +FSharp.Compiler.EditorServices.CompletionContext: Boolean get_IsParameterList() +FSharp.Compiler.EditorServices.CompletionContext: Boolean get_IsPatternType() +FSharp.Compiler.EditorServices.CompletionContext: Boolean get_IsRangeOperator() +FSharp.Compiler.EditorServices.CompletionContext: Boolean get_IsRecordField() +FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext AttributeApplication +FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext Invalid +FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext NewInherit(FSharp.Compiler.EditorServices.InheritanceContext, System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]]) +FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext NewOpenDeclaration(Boolean) +FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext NewParameterList(FSharp.Compiler.Text.Position, System.Collections.Generic.HashSet`1[System.String]) +FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext NewRecordField(FSharp.Compiler.EditorServices.RecordContext) +FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext PatternType +FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext RangeOperator +FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext get_AttributeApplication() +FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext get_Invalid() +FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext get_PatternType() +FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext get_RangeOperator() +FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext+Inherit +FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext+OpenDeclaration +FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext+ParameterList +FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext+RecordField +FSharp.Compiler.EditorServices.CompletionContext: FSharp.Compiler.EditorServices.CompletionContext+Tags +FSharp.Compiler.EditorServices.CompletionContext: Int32 GetHashCode() +FSharp.Compiler.EditorServices.CompletionContext: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.CompletionContext: Int32 Tag +FSharp.Compiler.EditorServices.CompletionContext: Int32 get_Tag() +FSharp.Compiler.EditorServices.CompletionContext: System.String ToString() +FSharp.Compiler.EditorServices.CompletionItemKind +FSharp.Compiler.EditorServices.CompletionItemKind+Method: Boolean get_isExtension() +FSharp.Compiler.EditorServices.CompletionItemKind+Method: Boolean isExtension +FSharp.Compiler.EditorServices.CompletionItemKind+Tags: Int32 Argument +FSharp.Compiler.EditorServices.CompletionItemKind+Tags: Int32 CustomOperation +FSharp.Compiler.EditorServices.CompletionItemKind+Tags: Int32 Event +FSharp.Compiler.EditorServices.CompletionItemKind+Tags: Int32 Field +FSharp.Compiler.EditorServices.CompletionItemKind+Tags: Int32 Method +FSharp.Compiler.EditorServices.CompletionItemKind+Tags: Int32 Other +FSharp.Compiler.EditorServices.CompletionItemKind+Tags: Int32 Property +FSharp.Compiler.EditorServices.CompletionItemKind: Boolean Equals(FSharp.Compiler.EditorServices.CompletionItemKind) +FSharp.Compiler.EditorServices.CompletionItemKind: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.CompletionItemKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.CompletionItemKind: Boolean IsArgument +FSharp.Compiler.EditorServices.CompletionItemKind: Boolean IsCustomOperation +FSharp.Compiler.EditorServices.CompletionItemKind: Boolean IsEvent +FSharp.Compiler.EditorServices.CompletionItemKind: Boolean IsField +FSharp.Compiler.EditorServices.CompletionItemKind: Boolean IsMethod +FSharp.Compiler.EditorServices.CompletionItemKind: Boolean IsOther +FSharp.Compiler.EditorServices.CompletionItemKind: Boolean IsProperty +FSharp.Compiler.EditorServices.CompletionItemKind: Boolean get_IsArgument() +FSharp.Compiler.EditorServices.CompletionItemKind: Boolean get_IsCustomOperation() +FSharp.Compiler.EditorServices.CompletionItemKind: Boolean get_IsEvent() +FSharp.Compiler.EditorServices.CompletionItemKind: Boolean get_IsField() +FSharp.Compiler.EditorServices.CompletionItemKind: Boolean get_IsMethod() +FSharp.Compiler.EditorServices.CompletionItemKind: Boolean get_IsOther() +FSharp.Compiler.EditorServices.CompletionItemKind: Boolean get_IsProperty() +FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind Argument +FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind CustomOperation +FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind Event +FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind Field +FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind NewMethod(Boolean) +FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind Other +FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind Property +FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind get_Argument() +FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind get_CustomOperation() +FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind get_Event() +FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind get_Field() +FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind get_Other() +FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind get_Property() +FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind+Method +FSharp.Compiler.EditorServices.CompletionItemKind: FSharp.Compiler.EditorServices.CompletionItemKind+Tags +FSharp.Compiler.EditorServices.CompletionItemKind: Int32 CompareTo(FSharp.Compiler.EditorServices.CompletionItemKind) +FSharp.Compiler.EditorServices.CompletionItemKind: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.CompletionItemKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.CompletionItemKind: Int32 GetHashCode() +FSharp.Compiler.EditorServices.CompletionItemKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.CompletionItemKind: Int32 Tag +FSharp.Compiler.EditorServices.CompletionItemKind: Int32 get_Tag() +FSharp.Compiler.EditorServices.CompletionItemKind: System.String ToString() +FSharp.Compiler.EditorServices.DeclarationListInfo +FSharp.Compiler.EditorServices.DeclarationListInfo: Boolean IsError +FSharp.Compiler.EditorServices.DeclarationListInfo: Boolean IsForType +FSharp.Compiler.EditorServices.DeclarationListInfo: Boolean get_IsError() +FSharp.Compiler.EditorServices.DeclarationListInfo: Boolean get_IsForType() +FSharp.Compiler.EditorServices.DeclarationListInfo: FSharp.Compiler.EditorServices.DeclarationListInfo Empty +FSharp.Compiler.EditorServices.DeclarationListInfo: FSharp.Compiler.EditorServices.DeclarationListInfo get_Empty() +FSharp.Compiler.EditorServices.DeclarationListInfo: FSharp.Compiler.EditorServices.DeclarationListItem[] Items +FSharp.Compiler.EditorServices.DeclarationListInfo: FSharp.Compiler.EditorServices.DeclarationListItem[] get_Items() +FSharp.Compiler.EditorServices.DeclarationListItem +FSharp.Compiler.EditorServices.DeclarationListItem: Boolean IsOwnMember +FSharp.Compiler.EditorServices.DeclarationListItem: Boolean IsResolved +FSharp.Compiler.EditorServices.DeclarationListItem: Boolean get_IsOwnMember() +FSharp.Compiler.EditorServices.DeclarationListItem: Boolean get_IsResolved() +FSharp.Compiler.EditorServices.DeclarationListItem: FSharp.Compiler.EditorServices.CompletionItemKind Kind +FSharp.Compiler.EditorServices.DeclarationListItem: FSharp.Compiler.EditorServices.CompletionItemKind get_Kind() +FSharp.Compiler.EditorServices.DeclarationListItem: FSharp.Compiler.EditorServices.FSharpGlyph Glyph +FSharp.Compiler.EditorServices.DeclarationListItem: FSharp.Compiler.EditorServices.FSharpGlyph get_Glyph() +FSharp.Compiler.EditorServices.DeclarationListItem: FSharp.Compiler.EditorServices.ToolTipText Description +FSharp.Compiler.EditorServices.DeclarationListItem: FSharp.Compiler.EditorServices.ToolTipText get_Description() +FSharp.Compiler.EditorServices.DeclarationListItem: FSharp.Compiler.Symbols.FSharpAccessibility Accessibility +FSharp.Compiler.EditorServices.DeclarationListItem: FSharp.Compiler.Symbols.FSharpAccessibility get_Accessibility() +FSharp.Compiler.EditorServices.DeclarationListItem: Int32 MinorPriority +FSharp.Compiler.EditorServices.DeclarationListItem: Int32 get_MinorPriority() +FSharp.Compiler.EditorServices.DeclarationListItem: Microsoft.FSharp.Core.FSharpOption`1[System.String] NamespaceToOpen +FSharp.Compiler.EditorServices.DeclarationListItem: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_NamespaceToOpen() +FSharp.Compiler.EditorServices.DeclarationListItem: System.String FullName +FSharp.Compiler.EditorServices.DeclarationListItem: System.String Name +FSharp.Compiler.EditorServices.DeclarationListItem: System.String NameInCode +FSharp.Compiler.EditorServices.DeclarationListItem: System.String get_FullName() +FSharp.Compiler.EditorServices.DeclarationListItem: System.String get_Name() +FSharp.Compiler.EditorServices.DeclarationListItem: System.String get_NameInCode() +FSharp.Compiler.EditorServices.EntityCache +FSharp.Compiler.EditorServices.EntityCache: T Locking[T](Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.EditorServices.IAssemblyContentCache,T]) +FSharp.Compiler.EditorServices.EntityCache: Void .ctor() +FSharp.Compiler.EditorServices.EntityCache: Void Clear() +FSharp.Compiler.EditorServices.EntityKind +FSharp.Compiler.EditorServices.EntityKind+FunctionOrValue: Boolean get_isActivePattern() +FSharp.Compiler.EditorServices.EntityKind+FunctionOrValue: Boolean isActivePattern +FSharp.Compiler.EditorServices.EntityKind+Module: FSharp.Compiler.EditorServices.ModuleKind Item +FSharp.Compiler.EditorServices.EntityKind+Module: FSharp.Compiler.EditorServices.ModuleKind get_Item() +FSharp.Compiler.EditorServices.EntityKind+Tags: Int32 Attribute +FSharp.Compiler.EditorServices.EntityKind+Tags: Int32 FunctionOrValue +FSharp.Compiler.EditorServices.EntityKind+Tags: Int32 Module +FSharp.Compiler.EditorServices.EntityKind+Tags: Int32 Type +FSharp.Compiler.EditorServices.EntityKind: Boolean Equals(FSharp.Compiler.EditorServices.EntityKind) +FSharp.Compiler.EditorServices.EntityKind: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.EntityKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.EntityKind: Boolean IsAttribute +FSharp.Compiler.EditorServices.EntityKind: Boolean IsFunctionOrValue +FSharp.Compiler.EditorServices.EntityKind: Boolean IsModule +FSharp.Compiler.EditorServices.EntityKind: Boolean IsType +FSharp.Compiler.EditorServices.EntityKind: Boolean get_IsAttribute() +FSharp.Compiler.EditorServices.EntityKind: Boolean get_IsFunctionOrValue() +FSharp.Compiler.EditorServices.EntityKind: Boolean get_IsModule() +FSharp.Compiler.EditorServices.EntityKind: Boolean get_IsType() +FSharp.Compiler.EditorServices.EntityKind: FSharp.Compiler.EditorServices.EntityKind Attribute +FSharp.Compiler.EditorServices.EntityKind: FSharp.Compiler.EditorServices.EntityKind NewFunctionOrValue(Boolean) +FSharp.Compiler.EditorServices.EntityKind: FSharp.Compiler.EditorServices.EntityKind NewModule(FSharp.Compiler.EditorServices.ModuleKind) +FSharp.Compiler.EditorServices.EntityKind: FSharp.Compiler.EditorServices.EntityKind Type +FSharp.Compiler.EditorServices.EntityKind: FSharp.Compiler.EditorServices.EntityKind get_Attribute() +FSharp.Compiler.EditorServices.EntityKind: FSharp.Compiler.EditorServices.EntityKind get_Type() +FSharp.Compiler.EditorServices.EntityKind: FSharp.Compiler.EditorServices.EntityKind+FunctionOrValue +FSharp.Compiler.EditorServices.EntityKind: FSharp.Compiler.EditorServices.EntityKind+Module +FSharp.Compiler.EditorServices.EntityKind: FSharp.Compiler.EditorServices.EntityKind+Tags +FSharp.Compiler.EditorServices.EntityKind: Int32 CompareTo(FSharp.Compiler.EditorServices.EntityKind) +FSharp.Compiler.EditorServices.EntityKind: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.EntityKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.EntityKind: Int32 GetHashCode() +FSharp.Compiler.EditorServices.EntityKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.EntityKind: Int32 Tag +FSharp.Compiler.EditorServices.EntityKind: Int32 get_Tag() +FSharp.Compiler.EditorServices.EntityKind: System.String ToString() +FSharp.Compiler.EditorServices.FSharpGlyph +FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Class +FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Constant +FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Delegate +FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Enum +FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 EnumMember +FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Error +FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Event +FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Exception +FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 ExtensionMethod +FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Field +FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Interface +FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Method +FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Module +FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 NameSpace +FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 OverridenMethod +FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Property +FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Struct +FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Type +FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Typedef +FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Union +FSharp.Compiler.EditorServices.FSharpGlyph+Tags: Int32 Variable +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean Equals(FSharp.Compiler.EditorServices.FSharpGlyph) +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsClass +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsConstant +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsDelegate +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsEnum +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsEnumMember +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsError +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsEvent +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsException +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsExtensionMethod +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsField +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsInterface +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsMethod +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsModule +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsNameSpace +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsOverridenMethod +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsProperty +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsStruct +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsType +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsTypedef +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsUnion +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean IsVariable +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsClass() +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsConstant() +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsDelegate() +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsEnum() +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsEnumMember() +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsError() +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsEvent() +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsException() +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsExtensionMethod() +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsField() +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsInterface() +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsMethod() +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsModule() +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsNameSpace() +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsOverridenMethod() +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsProperty() +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsStruct() +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsType() +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsTypedef() +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsUnion() +FSharp.Compiler.EditorServices.FSharpGlyph: Boolean get_IsVariable() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Class +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Constant +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Delegate +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Enum +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph EnumMember +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Error +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Event +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Exception +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph ExtensionMethod +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Field +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Interface +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Method +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Module +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph NameSpace +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph OverridenMethod +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Property +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Struct +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Type +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Typedef +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Union +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph Variable +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Class() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Constant() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Delegate() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Enum() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_EnumMember() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Error() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Event() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Exception() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_ExtensionMethod() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Field() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Interface() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Method() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Module() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_NameSpace() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_OverridenMethod() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Property() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Struct() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Type() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Typedef() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Union() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph get_Variable() +FSharp.Compiler.EditorServices.FSharpGlyph: FSharp.Compiler.EditorServices.FSharpGlyph+Tags +FSharp.Compiler.EditorServices.FSharpGlyph: Int32 CompareTo(FSharp.Compiler.EditorServices.FSharpGlyph) +FSharp.Compiler.EditorServices.FSharpGlyph: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.FSharpGlyph: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.FSharpGlyph: Int32 GetHashCode() +FSharp.Compiler.EditorServices.FSharpGlyph: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.FSharpGlyph: Int32 Tag +FSharp.Compiler.EditorServices.FSharpGlyph: Int32 get_Tag() +FSharp.Compiler.EditorServices.FSharpGlyph: System.String ToString() +FSharp.Compiler.EditorServices.FindDeclExternalParam +FSharp.Compiler.EditorServices.FindDeclExternalParam: Boolean Equals(FSharp.Compiler.EditorServices.FindDeclExternalParam) +FSharp.Compiler.EditorServices.FindDeclExternalParam: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.FindDeclExternalParam: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.FindDeclExternalParam: Boolean IsByRef +FSharp.Compiler.EditorServices.FindDeclExternalParam: Boolean get_IsByRef() +FSharp.Compiler.EditorServices.FindDeclExternalParam: FSharp.Compiler.EditorServices.FindDeclExternalParam Create(FSharp.Compiler.EditorServices.FindDeclExternalType, Boolean) +FSharp.Compiler.EditorServices.FindDeclExternalParam: FSharp.Compiler.EditorServices.FindDeclExternalType ParameterType +FSharp.Compiler.EditorServices.FindDeclExternalParam: FSharp.Compiler.EditorServices.FindDeclExternalType get_ParameterType() +FSharp.Compiler.EditorServices.FindDeclExternalParam: Int32 CompareTo(FSharp.Compiler.EditorServices.FindDeclExternalParam) +FSharp.Compiler.EditorServices.FindDeclExternalParam: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.FindDeclExternalParam: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.FindDeclExternalParam: Int32 GetHashCode() +FSharp.Compiler.EditorServices.FindDeclExternalParam: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.FindDeclExternalParam: System.String ToString() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Constructor: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.FindDeclExternalParam] args +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Constructor: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.FindDeclExternalParam] get_args() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Constructor: System.String get_typeName() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Constructor: System.String typeName +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Event: System.String get_name() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Event: System.String get_typeName() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Event: System.String name +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Event: System.String typeName +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Field: System.String get_name() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Field: System.String get_typeName() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Field: System.String name +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Field: System.String typeName +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Method: Int32 genericArity +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Method: Int32 get_genericArity() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Method: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.FindDeclExternalParam] get_paramSyms() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Method: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.FindDeclExternalParam] paramSyms +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Method: System.String get_name() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Method: System.String get_typeName() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Method: System.String name +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Method: System.String typeName +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Property: System.String get_name() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Property: System.String get_typeName() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Property: System.String name +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Property: System.String typeName +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Tags: Int32 Constructor +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Tags: Int32 Event +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Tags: Int32 Field +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Tags: Int32 Method +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Tags: Int32 Property +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Tags: Int32 Type +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Type: System.String fullName +FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Type: System.String get_fullName() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean Equals(FSharp.Compiler.EditorServices.FindDeclExternalSymbol) +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean IsConstructor +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean IsEvent +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean IsField +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean IsMethod +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean IsProperty +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean IsType +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean get_IsConstructor() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean get_IsEvent() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean get_IsField() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean get_IsMethod() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean get_IsProperty() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Boolean get_IsType() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol NewConstructor(System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.FindDeclExternalParam]) +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol NewEvent(System.String, System.String) +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol NewField(System.String, System.String) +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol NewMethod(System.String, System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.FindDeclExternalParam], Int32) +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol NewProperty(System.String, System.String) +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol NewType(System.String) +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Constructor +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Event +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Field +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Method +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Property +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Tags +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: FSharp.Compiler.EditorServices.FindDeclExternalSymbol+Type +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Int32 CompareTo(FSharp.Compiler.EditorServices.FindDeclExternalSymbol) +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Int32 GetHashCode() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Int32 Tag +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: Int32 get_Tag() +FSharp.Compiler.EditorServices.FindDeclExternalSymbol: System.String ToString() +FSharp.Compiler.EditorServices.FindDeclExternalType +FSharp.Compiler.EditorServices.FindDeclExternalType+Array: FSharp.Compiler.EditorServices.FindDeclExternalType get_inner() +FSharp.Compiler.EditorServices.FindDeclExternalType+Array: FSharp.Compiler.EditorServices.FindDeclExternalType inner +FSharp.Compiler.EditorServices.FindDeclExternalType+Pointer: FSharp.Compiler.EditorServices.FindDeclExternalType get_inner() +FSharp.Compiler.EditorServices.FindDeclExternalType+Pointer: FSharp.Compiler.EditorServices.FindDeclExternalType inner +FSharp.Compiler.EditorServices.FindDeclExternalType+Tags: Int32 Array +FSharp.Compiler.EditorServices.FindDeclExternalType+Tags: Int32 Pointer +FSharp.Compiler.EditorServices.FindDeclExternalType+Tags: Int32 Type +FSharp.Compiler.EditorServices.FindDeclExternalType+Tags: Int32 TypeVar +FSharp.Compiler.EditorServices.FindDeclExternalType+Type: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.FindDeclExternalType] genericArgs +FSharp.Compiler.EditorServices.FindDeclExternalType+Type: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.FindDeclExternalType] get_genericArgs() +FSharp.Compiler.EditorServices.FindDeclExternalType+Type: System.String fullName +FSharp.Compiler.EditorServices.FindDeclExternalType+Type: System.String get_fullName() +FSharp.Compiler.EditorServices.FindDeclExternalType+TypeVar: System.String get_typeName() +FSharp.Compiler.EditorServices.FindDeclExternalType+TypeVar: System.String typeName +FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean Equals(FSharp.Compiler.EditorServices.FindDeclExternalType) +FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean IsArray +FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean IsPointer +FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean IsType +FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean IsTypeVar +FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean get_IsArray() +FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean get_IsPointer() +FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean get_IsType() +FSharp.Compiler.EditorServices.FindDeclExternalType: Boolean get_IsTypeVar() +FSharp.Compiler.EditorServices.FindDeclExternalType: FSharp.Compiler.EditorServices.FindDeclExternalType NewArray(FSharp.Compiler.EditorServices.FindDeclExternalType) +FSharp.Compiler.EditorServices.FindDeclExternalType: FSharp.Compiler.EditorServices.FindDeclExternalType NewPointer(FSharp.Compiler.EditorServices.FindDeclExternalType) +FSharp.Compiler.EditorServices.FindDeclExternalType: FSharp.Compiler.EditorServices.FindDeclExternalType NewType(System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.FindDeclExternalType]) +FSharp.Compiler.EditorServices.FindDeclExternalType: FSharp.Compiler.EditorServices.FindDeclExternalType NewTypeVar(System.String) +FSharp.Compiler.EditorServices.FindDeclExternalType: FSharp.Compiler.EditorServices.FindDeclExternalType+Array +FSharp.Compiler.EditorServices.FindDeclExternalType: FSharp.Compiler.EditorServices.FindDeclExternalType+Pointer +FSharp.Compiler.EditorServices.FindDeclExternalType: FSharp.Compiler.EditorServices.FindDeclExternalType+Tags +FSharp.Compiler.EditorServices.FindDeclExternalType: FSharp.Compiler.EditorServices.FindDeclExternalType+Type +FSharp.Compiler.EditorServices.FindDeclExternalType: FSharp.Compiler.EditorServices.FindDeclExternalType+TypeVar +FSharp.Compiler.EditorServices.FindDeclExternalType: Int32 CompareTo(FSharp.Compiler.EditorServices.FindDeclExternalType) +FSharp.Compiler.EditorServices.FindDeclExternalType: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.FindDeclExternalType: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.FindDeclExternalType: Int32 GetHashCode() +FSharp.Compiler.EditorServices.FindDeclExternalType: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.FindDeclExternalType: Int32 Tag +FSharp.Compiler.EditorServices.FindDeclExternalType: Int32 get_Tag() +FSharp.Compiler.EditorServices.FindDeclExternalType: System.String ToString() +FSharp.Compiler.EditorServices.FindDeclFailureReason +FSharp.Compiler.EditorServices.FindDeclFailureReason+ProvidedMember: System.String get_memberName() +FSharp.Compiler.EditorServices.FindDeclFailureReason+ProvidedMember: System.String memberName +FSharp.Compiler.EditorServices.FindDeclFailureReason+ProvidedType: System.String get_typeName() +FSharp.Compiler.EditorServices.FindDeclFailureReason+ProvidedType: System.String typeName +FSharp.Compiler.EditorServices.FindDeclFailureReason+Tags: Int32 NoSourceCode +FSharp.Compiler.EditorServices.FindDeclFailureReason+Tags: Int32 ProvidedMember +FSharp.Compiler.EditorServices.FindDeclFailureReason+Tags: Int32 ProvidedType +FSharp.Compiler.EditorServices.FindDeclFailureReason+Tags: Int32 Unknown +FSharp.Compiler.EditorServices.FindDeclFailureReason+Unknown: System.String get_message() +FSharp.Compiler.EditorServices.FindDeclFailureReason+Unknown: System.String message +FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean Equals(FSharp.Compiler.EditorServices.FindDeclFailureReason) +FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean IsNoSourceCode +FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean IsProvidedMember +FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean IsProvidedType +FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean IsUnknown +FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean get_IsNoSourceCode() +FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean get_IsProvidedMember() +FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean get_IsProvidedType() +FSharp.Compiler.EditorServices.FindDeclFailureReason: Boolean get_IsUnknown() +FSharp.Compiler.EditorServices.FindDeclFailureReason: FSharp.Compiler.EditorServices.FindDeclFailureReason NewProvidedMember(System.String) +FSharp.Compiler.EditorServices.FindDeclFailureReason: FSharp.Compiler.EditorServices.FindDeclFailureReason NewProvidedType(System.String) +FSharp.Compiler.EditorServices.FindDeclFailureReason: FSharp.Compiler.EditorServices.FindDeclFailureReason NewUnknown(System.String) +FSharp.Compiler.EditorServices.FindDeclFailureReason: FSharp.Compiler.EditorServices.FindDeclFailureReason NoSourceCode +FSharp.Compiler.EditorServices.FindDeclFailureReason: FSharp.Compiler.EditorServices.FindDeclFailureReason get_NoSourceCode() +FSharp.Compiler.EditorServices.FindDeclFailureReason: FSharp.Compiler.EditorServices.FindDeclFailureReason+ProvidedMember +FSharp.Compiler.EditorServices.FindDeclFailureReason: FSharp.Compiler.EditorServices.FindDeclFailureReason+ProvidedType +FSharp.Compiler.EditorServices.FindDeclFailureReason: FSharp.Compiler.EditorServices.FindDeclFailureReason+Tags +FSharp.Compiler.EditorServices.FindDeclFailureReason: FSharp.Compiler.EditorServices.FindDeclFailureReason+Unknown +FSharp.Compiler.EditorServices.FindDeclFailureReason: Int32 CompareTo(FSharp.Compiler.EditorServices.FindDeclFailureReason) +FSharp.Compiler.EditorServices.FindDeclFailureReason: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.FindDeclFailureReason: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.FindDeclFailureReason: Int32 GetHashCode() +FSharp.Compiler.EditorServices.FindDeclFailureReason: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.FindDeclFailureReason: Int32 Tag +FSharp.Compiler.EditorServices.FindDeclFailureReason: Int32 get_Tag() +FSharp.Compiler.EditorServices.FindDeclFailureReason: System.String ToString() +FSharp.Compiler.EditorServices.FindDeclResult +FSharp.Compiler.EditorServices.FindDeclResult+DeclFound: FSharp.Compiler.Text.Range get_location() +FSharp.Compiler.EditorServices.FindDeclResult+DeclFound: FSharp.Compiler.Text.Range location +FSharp.Compiler.EditorServices.FindDeclResult+DeclNotFound: FSharp.Compiler.EditorServices.FindDeclFailureReason Item +FSharp.Compiler.EditorServices.FindDeclResult+DeclNotFound: FSharp.Compiler.EditorServices.FindDeclFailureReason get_Item() +FSharp.Compiler.EditorServices.FindDeclResult+ExternalDecl: FSharp.Compiler.EditorServices.FindDeclExternalSymbol externalSym +FSharp.Compiler.EditorServices.FindDeclResult+ExternalDecl: FSharp.Compiler.EditorServices.FindDeclExternalSymbol get_externalSym() +FSharp.Compiler.EditorServices.FindDeclResult+ExternalDecl: System.String assembly +FSharp.Compiler.EditorServices.FindDeclResult+ExternalDecl: System.String get_assembly() +FSharp.Compiler.EditorServices.FindDeclResult+Tags: Int32 DeclFound +FSharp.Compiler.EditorServices.FindDeclResult+Tags: Int32 DeclNotFound +FSharp.Compiler.EditorServices.FindDeclResult+Tags: Int32 ExternalDecl +FSharp.Compiler.EditorServices.FindDeclResult: Boolean Equals(FSharp.Compiler.EditorServices.FindDeclResult) +FSharp.Compiler.EditorServices.FindDeclResult: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.FindDeclResult: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.FindDeclResult: Boolean IsDeclFound +FSharp.Compiler.EditorServices.FindDeclResult: Boolean IsDeclNotFound +FSharp.Compiler.EditorServices.FindDeclResult: Boolean IsExternalDecl +FSharp.Compiler.EditorServices.FindDeclResult: Boolean get_IsDeclFound() +FSharp.Compiler.EditorServices.FindDeclResult: Boolean get_IsDeclNotFound() +FSharp.Compiler.EditorServices.FindDeclResult: Boolean get_IsExternalDecl() +FSharp.Compiler.EditorServices.FindDeclResult: FSharp.Compiler.EditorServices.FindDeclResult NewDeclFound(FSharp.Compiler.Text.Range) +FSharp.Compiler.EditorServices.FindDeclResult: FSharp.Compiler.EditorServices.FindDeclResult NewDeclNotFound(FSharp.Compiler.EditorServices.FindDeclFailureReason) +FSharp.Compiler.EditorServices.FindDeclResult: FSharp.Compiler.EditorServices.FindDeclResult NewExternalDecl(System.String, FSharp.Compiler.EditorServices.FindDeclExternalSymbol) +FSharp.Compiler.EditorServices.FindDeclResult: FSharp.Compiler.EditorServices.FindDeclResult+DeclFound +FSharp.Compiler.EditorServices.FindDeclResult: FSharp.Compiler.EditorServices.FindDeclResult+DeclNotFound +FSharp.Compiler.EditorServices.FindDeclResult: FSharp.Compiler.EditorServices.FindDeclResult+ExternalDecl +FSharp.Compiler.EditorServices.FindDeclResult: FSharp.Compiler.EditorServices.FindDeclResult+Tags +FSharp.Compiler.EditorServices.FindDeclResult: Int32 GetHashCode() +FSharp.Compiler.EditorServices.FindDeclResult: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.FindDeclResult: Int32 Tag +FSharp.Compiler.EditorServices.FindDeclResult: Int32 get_Tag() +FSharp.Compiler.EditorServices.FindDeclResult: System.String ToString() +FSharp.Compiler.EditorServices.IAssemblyContentCache +FSharp.Compiler.EditorServices.IAssemblyContentCache: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.EditorServices.AssemblyContentCacheEntry] TryGet(System.String) +FSharp.Compiler.EditorServices.IAssemblyContentCache: Void Set(System.String, FSharp.Compiler.EditorServices.AssemblyContentCacheEntry) +FSharp.Compiler.EditorServices.InheritanceContext +FSharp.Compiler.EditorServices.InheritanceContext+Tags: Int32 Class +FSharp.Compiler.EditorServices.InheritanceContext+Tags: Int32 Interface +FSharp.Compiler.EditorServices.InheritanceContext+Tags: Int32 Unknown +FSharp.Compiler.EditorServices.InheritanceContext: Boolean Equals(FSharp.Compiler.EditorServices.InheritanceContext) +FSharp.Compiler.EditorServices.InheritanceContext: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.InheritanceContext: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.InheritanceContext: Boolean IsClass +FSharp.Compiler.EditorServices.InheritanceContext: Boolean IsInterface +FSharp.Compiler.EditorServices.InheritanceContext: Boolean IsUnknown +FSharp.Compiler.EditorServices.InheritanceContext: Boolean get_IsClass() +FSharp.Compiler.EditorServices.InheritanceContext: Boolean get_IsInterface() +FSharp.Compiler.EditorServices.InheritanceContext: Boolean get_IsUnknown() +FSharp.Compiler.EditorServices.InheritanceContext: FSharp.Compiler.EditorServices.InheritanceContext Class +FSharp.Compiler.EditorServices.InheritanceContext: FSharp.Compiler.EditorServices.InheritanceContext Interface +FSharp.Compiler.EditorServices.InheritanceContext: FSharp.Compiler.EditorServices.InheritanceContext Unknown +FSharp.Compiler.EditorServices.InheritanceContext: FSharp.Compiler.EditorServices.InheritanceContext get_Class() +FSharp.Compiler.EditorServices.InheritanceContext: FSharp.Compiler.EditorServices.InheritanceContext get_Interface() +FSharp.Compiler.EditorServices.InheritanceContext: FSharp.Compiler.EditorServices.InheritanceContext get_Unknown() +FSharp.Compiler.EditorServices.InheritanceContext: FSharp.Compiler.EditorServices.InheritanceContext+Tags +FSharp.Compiler.EditorServices.InheritanceContext: Int32 CompareTo(FSharp.Compiler.EditorServices.InheritanceContext) +FSharp.Compiler.EditorServices.InheritanceContext: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.InheritanceContext: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.InheritanceContext: Int32 GetHashCode() +FSharp.Compiler.EditorServices.InheritanceContext: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.InheritanceContext: Int32 Tag +FSharp.Compiler.EditorServices.InheritanceContext: Int32 get_Tag() +FSharp.Compiler.EditorServices.InheritanceContext: System.String ToString() +FSharp.Compiler.EditorServices.InsertionContext +FSharp.Compiler.EditorServices.InsertionContext: Boolean Equals(FSharp.Compiler.EditorServices.InsertionContext) +FSharp.Compiler.EditorServices.InsertionContext: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.InsertionContext: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.InsertionContext: FSharp.Compiler.EditorServices.ScopeKind ScopeKind +FSharp.Compiler.EditorServices.InsertionContext: FSharp.Compiler.EditorServices.ScopeKind get_ScopeKind() +FSharp.Compiler.EditorServices.InsertionContext: FSharp.Compiler.Text.Position Pos +FSharp.Compiler.EditorServices.InsertionContext: FSharp.Compiler.Text.Position get_Pos() +FSharp.Compiler.EditorServices.InsertionContext: Int32 GetHashCode() +FSharp.Compiler.EditorServices.InsertionContext: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.InsertionContext: System.String ToString() +FSharp.Compiler.EditorServices.InsertionContext: Void .ctor(FSharp.Compiler.EditorServices.ScopeKind, FSharp.Compiler.Text.Position) +FSharp.Compiler.EditorServices.InsertionContextEntity +FSharp.Compiler.EditorServices.InsertionContextEntity: Boolean Equals(FSharp.Compiler.EditorServices.InsertionContextEntity) +FSharp.Compiler.EditorServices.InsertionContextEntity: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.InsertionContextEntity: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.InsertionContextEntity: Int32 CompareTo(FSharp.Compiler.EditorServices.InsertionContextEntity) +FSharp.Compiler.EditorServices.InsertionContextEntity: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.InsertionContextEntity: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.InsertionContextEntity: Int32 GetHashCode() +FSharp.Compiler.EditorServices.InsertionContextEntity: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.InsertionContextEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] Namespace +FSharp.Compiler.EditorServices.InsertionContextEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Namespace() +FSharp.Compiler.EditorServices.InsertionContextEntity: System.String FullDisplayName +FSharp.Compiler.EditorServices.InsertionContextEntity: System.String FullRelativeName +FSharp.Compiler.EditorServices.InsertionContextEntity: System.String LastIdent +FSharp.Compiler.EditorServices.InsertionContextEntity: System.String Qualifier +FSharp.Compiler.EditorServices.InsertionContextEntity: System.String ToString() +FSharp.Compiler.EditorServices.InsertionContextEntity: System.String get_FullDisplayName() +FSharp.Compiler.EditorServices.InsertionContextEntity: System.String get_FullRelativeName() +FSharp.Compiler.EditorServices.InsertionContextEntity: System.String get_LastIdent() +FSharp.Compiler.EditorServices.InsertionContextEntity: System.String get_Qualifier() +FSharp.Compiler.EditorServices.InsertionContextEntity: Void .ctor(System.String, System.String, Microsoft.FSharp.Core.FSharpOption`1[System.String], System.String, System.String) +FSharp.Compiler.EditorServices.InterfaceData +FSharp.Compiler.EditorServices.InterfaceData+Interface: FSharp.Compiler.Syntax.SynType get_interfaceType() +FSharp.Compiler.EditorServices.InterfaceData+Interface: FSharp.Compiler.Syntax.SynType interfaceType +FSharp.Compiler.EditorServices.InterfaceData+Interface: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]] get_memberDefns() +FSharp.Compiler.EditorServices.InterfaceData+Interface: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]] memberDefns +FSharp.Compiler.EditorServices.InterfaceData+ObjExpr: FSharp.Compiler.Syntax.SynType get_objType() +FSharp.Compiler.EditorServices.InterfaceData+ObjExpr: FSharp.Compiler.Syntax.SynType objType +FSharp.Compiler.EditorServices.InterfaceData+ObjExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] bindings +FSharp.Compiler.EditorServices.InterfaceData+ObjExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] get_bindings() +FSharp.Compiler.EditorServices.InterfaceData+Tags: Int32 Interface +FSharp.Compiler.EditorServices.InterfaceData+Tags: Int32 ObjExpr +FSharp.Compiler.EditorServices.InterfaceData: Boolean IsInterface +FSharp.Compiler.EditorServices.InterfaceData: Boolean IsObjExpr +FSharp.Compiler.EditorServices.InterfaceData: Boolean get_IsInterface() +FSharp.Compiler.EditorServices.InterfaceData: Boolean get_IsObjExpr() +FSharp.Compiler.EditorServices.InterfaceData: FSharp.Compiler.EditorServices.InterfaceData NewInterface(FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]]) +FSharp.Compiler.EditorServices.InterfaceData: FSharp.Compiler.EditorServices.InterfaceData NewObjExpr(FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding]) +FSharp.Compiler.EditorServices.InterfaceData: FSharp.Compiler.EditorServices.InterfaceData+Interface +FSharp.Compiler.EditorServices.InterfaceData: FSharp.Compiler.EditorServices.InterfaceData+ObjExpr +FSharp.Compiler.EditorServices.InterfaceData: FSharp.Compiler.EditorServices.InterfaceData+Tags +FSharp.Compiler.EditorServices.InterfaceData: FSharp.Compiler.Text.Range Range +FSharp.Compiler.EditorServices.InterfaceData: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.EditorServices.InterfaceData: Int32 Tag +FSharp.Compiler.EditorServices.InterfaceData: Int32 get_Tag() +FSharp.Compiler.EditorServices.InterfaceData: System.String ToString() +FSharp.Compiler.EditorServices.InterfaceData: System.String[] TypeParameters +FSharp.Compiler.EditorServices.InterfaceData: System.String[] get_TypeParameters() +FSharp.Compiler.EditorServices.InterfaceStubGenerator +FSharp.Compiler.EditorServices.InterfaceStubGenerator: Boolean HasNoInterfaceMember(FSharp.Compiler.Symbols.FSharpEntity) +FSharp.Compiler.EditorServices.InterfaceStubGenerator: Boolean IsInterface(FSharp.Compiler.Symbols.FSharpEntity) +FSharp.Compiler.EditorServices.InterfaceStubGenerator: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.Text.Range]] GetMemberNameAndRanges(FSharp.Compiler.EditorServices.InterfaceData) +FSharp.Compiler.EditorServices.InterfaceStubGenerator: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Collections.FSharpSet`1[System.String]] GetImplementedMemberSignatures(Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.String,FSharp.Compiler.Text.Range],Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.FSharpSymbolUse]], FSharp.Compiler.Symbols.FSharpDisplayContext, FSharp.Compiler.EditorServices.InterfaceData) +FSharp.Compiler.EditorServices.InterfaceStubGenerator: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.EditorServices.InterfaceData] TryFindInterfaceDeclaration(FSharp.Compiler.Text.Position, FSharp.Compiler.Syntax.ParsedInput) +FSharp.Compiler.EditorServices.InterfaceStubGenerator: System.Collections.Generic.IEnumerable`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue,System.Collections.Generic.IEnumerable`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpGenericParameter,FSharp.Compiler.Symbols.FSharpType]]]] GetInterfaceMembers(FSharp.Compiler.Symbols.FSharpEntity) +FSharp.Compiler.EditorServices.InterfaceStubGenerator: System.String FormatInterface(Int32, Int32, System.String[], System.String, System.String, FSharp.Compiler.Symbols.FSharpDisplayContext, Microsoft.FSharp.Collections.FSharpSet`1[System.String], FSharp.Compiler.Symbols.FSharpEntity, Boolean) +FSharp.Compiler.EditorServices.LookupType +FSharp.Compiler.EditorServices.LookupType+Tags: Int32 Fuzzy +FSharp.Compiler.EditorServices.LookupType+Tags: Int32 Precise +FSharp.Compiler.EditorServices.LookupType: Boolean Equals(FSharp.Compiler.EditorServices.LookupType) +FSharp.Compiler.EditorServices.LookupType: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.LookupType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.LookupType: Boolean IsFuzzy +FSharp.Compiler.EditorServices.LookupType: Boolean IsPrecise +FSharp.Compiler.EditorServices.LookupType: Boolean get_IsFuzzy() +FSharp.Compiler.EditorServices.LookupType: Boolean get_IsPrecise() +FSharp.Compiler.EditorServices.LookupType: FSharp.Compiler.EditorServices.LookupType Fuzzy +FSharp.Compiler.EditorServices.LookupType: FSharp.Compiler.EditorServices.LookupType Precise +FSharp.Compiler.EditorServices.LookupType: FSharp.Compiler.EditorServices.LookupType get_Fuzzy() +FSharp.Compiler.EditorServices.LookupType: FSharp.Compiler.EditorServices.LookupType get_Precise() +FSharp.Compiler.EditorServices.LookupType: FSharp.Compiler.EditorServices.LookupType+Tags +FSharp.Compiler.EditorServices.LookupType: Int32 CompareTo(FSharp.Compiler.EditorServices.LookupType) +FSharp.Compiler.EditorServices.LookupType: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.LookupType: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.LookupType: Int32 GetHashCode() +FSharp.Compiler.EditorServices.LookupType: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.LookupType: Int32 Tag +FSharp.Compiler.EditorServices.LookupType: Int32 get_Tag() +FSharp.Compiler.EditorServices.LookupType: System.String ToString() +FSharp.Compiler.EditorServices.MaybeUnresolvedIdent +FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Boolean Equals(FSharp.Compiler.EditorServices.MaybeUnresolvedIdent) +FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Boolean Resolved +FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Boolean get_Resolved() +FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Int32 CompareTo(FSharp.Compiler.EditorServices.MaybeUnresolvedIdent) +FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Int32 GetHashCode() +FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: System.String Ident +FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: System.String ToString() +FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: System.String get_Ident() +FSharp.Compiler.EditorServices.MaybeUnresolvedIdent: Void .ctor(System.String, Boolean) +FSharp.Compiler.EditorServices.MethodGroup +FSharp.Compiler.EditorServices.MethodGroup: FSharp.Compiler.EditorServices.MethodGroupItem[] Methods +FSharp.Compiler.EditorServices.MethodGroup: FSharp.Compiler.EditorServices.MethodGroupItem[] get_Methods() +FSharp.Compiler.EditorServices.MethodGroup: System.String MethodName +FSharp.Compiler.EditorServices.MethodGroup: System.String get_MethodName() +FSharp.Compiler.EditorServices.MethodGroupItem +FSharp.Compiler.EditorServices.MethodGroupItem: Boolean HasParamArrayArg +FSharp.Compiler.EditorServices.MethodGroupItem: Boolean HasParameters +FSharp.Compiler.EditorServices.MethodGroupItem: Boolean get_HasParamArrayArg() +FSharp.Compiler.EditorServices.MethodGroupItem: Boolean get_HasParameters() +FSharp.Compiler.EditorServices.MethodGroupItem: FSharp.Compiler.EditorServices.MethodGroupItemParameter[] Parameters +FSharp.Compiler.EditorServices.MethodGroupItem: FSharp.Compiler.EditorServices.MethodGroupItemParameter[] StaticParameters +FSharp.Compiler.EditorServices.MethodGroupItem: FSharp.Compiler.EditorServices.MethodGroupItemParameter[] get_Parameters() +FSharp.Compiler.EditorServices.MethodGroupItem: FSharp.Compiler.EditorServices.MethodGroupItemParameter[] get_StaticParameters() +FSharp.Compiler.EditorServices.MethodGroupItem: FSharp.Compiler.EditorServices.ToolTipText Description +FSharp.Compiler.EditorServices.MethodGroupItem: FSharp.Compiler.EditorServices.ToolTipText get_Description() +FSharp.Compiler.EditorServices.MethodGroupItem: FSharp.Compiler.Symbols.FSharpXmlDoc XmlDoc +FSharp.Compiler.EditorServices.MethodGroupItem: FSharp.Compiler.Symbols.FSharpXmlDoc get_XmlDoc() +FSharp.Compiler.EditorServices.MethodGroupItem: FSharp.Compiler.Text.TaggedText[] ReturnTypeText +FSharp.Compiler.EditorServices.MethodGroupItem: FSharp.Compiler.Text.TaggedText[] get_ReturnTypeText() +FSharp.Compiler.EditorServices.MethodGroupItemParameter +FSharp.Compiler.EditorServices.MethodGroupItemParameter: Boolean IsOptional +FSharp.Compiler.EditorServices.MethodGroupItemParameter: Boolean get_IsOptional() +FSharp.Compiler.EditorServices.MethodGroupItemParameter: FSharp.Compiler.Text.TaggedText[] Display +FSharp.Compiler.EditorServices.MethodGroupItemParameter: FSharp.Compiler.Text.TaggedText[] get_Display() +FSharp.Compiler.EditorServices.MethodGroupItemParameter: System.String CanonicalTypeTextForSorting +FSharp.Compiler.EditorServices.MethodGroupItemParameter: System.String ParameterName +FSharp.Compiler.EditorServices.MethodGroupItemParameter: System.String get_CanonicalTypeTextForSorting() +FSharp.Compiler.EditorServices.MethodGroupItemParameter: System.String get_ParameterName() +FSharp.Compiler.EditorServices.ModuleKind +FSharp.Compiler.EditorServices.ModuleKind: Boolean Equals(FSharp.Compiler.EditorServices.ModuleKind) +FSharp.Compiler.EditorServices.ModuleKind: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.ModuleKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.ModuleKind: Boolean HasModuleSuffix +FSharp.Compiler.EditorServices.ModuleKind: Boolean IsAutoOpen +FSharp.Compiler.EditorServices.ModuleKind: Boolean get_HasModuleSuffix() +FSharp.Compiler.EditorServices.ModuleKind: Boolean get_IsAutoOpen() +FSharp.Compiler.EditorServices.ModuleKind: Int32 CompareTo(FSharp.Compiler.EditorServices.ModuleKind) +FSharp.Compiler.EditorServices.ModuleKind: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.ModuleKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.ModuleKind: Int32 GetHashCode() +FSharp.Compiler.EditorServices.ModuleKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.ModuleKind: System.String ToString() +FSharp.Compiler.EditorServices.ModuleKind: Void .ctor(Boolean, Boolean) +FSharp.Compiler.EditorServices.NavigableContainer +FSharp.Compiler.EditorServices.NavigableContainer: Boolean Equals(FSharp.Compiler.EditorServices.NavigableContainer) +FSharp.Compiler.EditorServices.NavigableContainer: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.NavigableContainer: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.NavigableContainer: FSharp.Compiler.EditorServices.NavigableContainerType Type +FSharp.Compiler.EditorServices.NavigableContainer: FSharp.Compiler.EditorServices.NavigableContainerType get_Type() +FSharp.Compiler.EditorServices.NavigableContainer: Int32 CompareTo(FSharp.Compiler.EditorServices.NavigableContainer) +FSharp.Compiler.EditorServices.NavigableContainer: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.NavigableContainer: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.NavigableContainer: Int32 GetHashCode() +FSharp.Compiler.EditorServices.NavigableContainer: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.NavigableContainer: System.String Name +FSharp.Compiler.EditorServices.NavigableContainer: System.String ToString() +FSharp.Compiler.EditorServices.NavigableContainer: System.String get_Name() +FSharp.Compiler.EditorServices.NavigableContainer: Void .ctor(FSharp.Compiler.EditorServices.NavigableContainerType, System.String) +FSharp.Compiler.EditorServices.NavigableContainerType +FSharp.Compiler.EditorServices.NavigableContainerType+Tags: Int32 Exception +FSharp.Compiler.EditorServices.NavigableContainerType+Tags: Int32 File +FSharp.Compiler.EditorServices.NavigableContainerType+Tags: Int32 Module +FSharp.Compiler.EditorServices.NavigableContainerType+Tags: Int32 Namespace +FSharp.Compiler.EditorServices.NavigableContainerType+Tags: Int32 Type +FSharp.Compiler.EditorServices.NavigableContainerType: Boolean Equals(FSharp.Compiler.EditorServices.NavigableContainerType) +FSharp.Compiler.EditorServices.NavigableContainerType: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.NavigableContainerType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.NavigableContainerType: Boolean IsException +FSharp.Compiler.EditorServices.NavigableContainerType: Boolean IsFile +FSharp.Compiler.EditorServices.NavigableContainerType: Boolean IsModule +FSharp.Compiler.EditorServices.NavigableContainerType: Boolean IsNamespace +FSharp.Compiler.EditorServices.NavigableContainerType: Boolean IsType +FSharp.Compiler.EditorServices.NavigableContainerType: Boolean get_IsException() +FSharp.Compiler.EditorServices.NavigableContainerType: Boolean get_IsFile() +FSharp.Compiler.EditorServices.NavigableContainerType: Boolean get_IsModule() +FSharp.Compiler.EditorServices.NavigableContainerType: Boolean get_IsNamespace() +FSharp.Compiler.EditorServices.NavigableContainerType: Boolean get_IsType() +FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType Exception +FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType File +FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType Module +FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType Namespace +FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType Type +FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType get_Exception() +FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType get_File() +FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType get_Module() +FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType get_Namespace() +FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType get_Type() +FSharp.Compiler.EditorServices.NavigableContainerType: FSharp.Compiler.EditorServices.NavigableContainerType+Tags +FSharp.Compiler.EditorServices.NavigableContainerType: Int32 CompareTo(FSharp.Compiler.EditorServices.NavigableContainerType) +FSharp.Compiler.EditorServices.NavigableContainerType: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.NavigableContainerType: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.NavigableContainerType: Int32 GetHashCode() +FSharp.Compiler.EditorServices.NavigableContainerType: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.NavigableContainerType: Int32 Tag +FSharp.Compiler.EditorServices.NavigableContainerType: Int32 get_Tag() +FSharp.Compiler.EditorServices.NavigableContainerType: System.String ToString() +FSharp.Compiler.EditorServices.NavigableItem +FSharp.Compiler.EditorServices.NavigableItem: Boolean Equals(FSharp.Compiler.EditorServices.NavigableItem) +FSharp.Compiler.EditorServices.NavigableItem: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.NavigableItem: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.NavigableItem: Boolean IsSignature +FSharp.Compiler.EditorServices.NavigableItem: Boolean get_IsSignature() +FSharp.Compiler.EditorServices.NavigableItem: FSharp.Compiler.EditorServices.NavigableContainer Container +FSharp.Compiler.EditorServices.NavigableItem: FSharp.Compiler.EditorServices.NavigableContainer get_Container() +FSharp.Compiler.EditorServices.NavigableItem: FSharp.Compiler.EditorServices.NavigableItemKind Kind +FSharp.Compiler.EditorServices.NavigableItem: FSharp.Compiler.EditorServices.NavigableItemKind get_Kind() +FSharp.Compiler.EditorServices.NavigableItem: FSharp.Compiler.Text.Range Range +FSharp.Compiler.EditorServices.NavigableItem: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.EditorServices.NavigableItem: Int32 GetHashCode() +FSharp.Compiler.EditorServices.NavigableItem: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.NavigableItem: System.String Name +FSharp.Compiler.EditorServices.NavigableItem: System.String ToString() +FSharp.Compiler.EditorServices.NavigableItem: System.String get_Name() +FSharp.Compiler.EditorServices.NavigableItem: Void .ctor(System.String, FSharp.Compiler.Text.Range, Boolean, FSharp.Compiler.EditorServices.NavigableItemKind, FSharp.Compiler.EditorServices.NavigableContainer) +FSharp.Compiler.EditorServices.NavigableItemKind +FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 Constructor +FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 EnumCase +FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 Exception +FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 Field +FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 Member +FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 Module +FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 ModuleAbbreviation +FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 ModuleValue +FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 Property +FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 Type +FSharp.Compiler.EditorServices.NavigableItemKind+Tags: Int32 UnionCase +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean Equals(FSharp.Compiler.EditorServices.NavigableItemKind) +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsConstructor +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsEnumCase +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsException +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsField +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsMember +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsModule +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsModuleAbbreviation +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsModuleValue +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsProperty +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsType +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean IsUnionCase +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsConstructor() +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsEnumCase() +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsException() +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsField() +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsMember() +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsModule() +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsModuleAbbreviation() +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsModuleValue() +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsProperty() +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsType() +FSharp.Compiler.EditorServices.NavigableItemKind: Boolean get_IsUnionCase() +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind Constructor +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind EnumCase +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind Exception +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind Field +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind Member +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind Module +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind ModuleAbbreviation +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind ModuleValue +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind Property +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind Type +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind UnionCase +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_Constructor() +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_EnumCase() +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_Exception() +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_Field() +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_Member() +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_Module() +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_ModuleAbbreviation() +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_ModuleValue() +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_Property() +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_Type() +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind get_UnionCase() +FSharp.Compiler.EditorServices.NavigableItemKind: FSharp.Compiler.EditorServices.NavigableItemKind+Tags +FSharp.Compiler.EditorServices.NavigableItemKind: Int32 CompareTo(FSharp.Compiler.EditorServices.NavigableItemKind) +FSharp.Compiler.EditorServices.NavigableItemKind: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.NavigableItemKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.NavigableItemKind: Int32 GetHashCode() +FSharp.Compiler.EditorServices.NavigableItemKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.NavigableItemKind: Int32 Tag +FSharp.Compiler.EditorServices.NavigableItemKind: Int32 get_Tag() +FSharp.Compiler.EditorServices.NavigableItemKind: System.String ToString() +FSharp.Compiler.EditorServices.NavigateTo +FSharp.Compiler.EditorServices.NavigateTo: FSharp.Compiler.EditorServices.NavigableItem[] GetNavigableItems(FSharp.Compiler.Syntax.ParsedInput) +FSharp.Compiler.EditorServices.Navigation +FSharp.Compiler.EditorServices.Navigation: FSharp.Compiler.EditorServices.NavigationItems getNavigation(FSharp.Compiler.Syntax.ParsedInput) +FSharp.Compiler.EditorServices.NavigationEntityKind +FSharp.Compiler.EditorServices.NavigationEntityKind+Tags: Int32 Class +FSharp.Compiler.EditorServices.NavigationEntityKind+Tags: Int32 Enum +FSharp.Compiler.EditorServices.NavigationEntityKind+Tags: Int32 Exception +FSharp.Compiler.EditorServices.NavigationEntityKind+Tags: Int32 Interface +FSharp.Compiler.EditorServices.NavigationEntityKind+Tags: Int32 Module +FSharp.Compiler.EditorServices.NavigationEntityKind+Tags: Int32 Namespace +FSharp.Compiler.EditorServices.NavigationEntityKind+Tags: Int32 Record +FSharp.Compiler.EditorServices.NavigationEntityKind+Tags: Int32 Union +FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean Equals(FSharp.Compiler.EditorServices.NavigationEntityKind) +FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean IsClass +FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean IsEnum +FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean IsException +FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean IsInterface +FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean IsModule +FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean IsNamespace +FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean IsRecord +FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean IsUnion +FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean get_IsClass() +FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean get_IsEnum() +FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean get_IsException() +FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean get_IsInterface() +FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean get_IsModule() +FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean get_IsNamespace() +FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean get_IsRecord() +FSharp.Compiler.EditorServices.NavigationEntityKind: Boolean get_IsUnion() +FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind Class +FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind Enum +FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind Exception +FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind Interface +FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind Module +FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind Namespace +FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind Record +FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind Union +FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind get_Class() +FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind get_Enum() +FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind get_Exception() +FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind get_Interface() +FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind get_Module() +FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind get_Namespace() +FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind get_Record() +FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind get_Union() +FSharp.Compiler.EditorServices.NavigationEntityKind: FSharp.Compiler.EditorServices.NavigationEntityKind+Tags +FSharp.Compiler.EditorServices.NavigationEntityKind: Int32 CompareTo(FSharp.Compiler.EditorServices.NavigationEntityKind) +FSharp.Compiler.EditorServices.NavigationEntityKind: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.NavigationEntityKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.NavigationEntityKind: Int32 GetHashCode() +FSharp.Compiler.EditorServices.NavigationEntityKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.NavigationEntityKind: Int32 Tag +FSharp.Compiler.EditorServices.NavigationEntityKind: Int32 get_Tag() +FSharp.Compiler.EditorServices.NavigationEntityKind: System.String ToString() +FSharp.Compiler.EditorServices.NavigationItem +FSharp.Compiler.EditorServices.NavigationItem: Boolean IsAbstract +FSharp.Compiler.EditorServices.NavigationItem: Boolean IsSingleTopLevel +FSharp.Compiler.EditorServices.NavigationItem: Boolean get_IsAbstract() +FSharp.Compiler.EditorServices.NavigationItem: Boolean get_IsSingleTopLevel() +FSharp.Compiler.EditorServices.NavigationItem: FSharp.Compiler.EditorServices.FSharpGlyph Glyph +FSharp.Compiler.EditorServices.NavigationItem: FSharp.Compiler.EditorServices.FSharpGlyph get_Glyph() +FSharp.Compiler.EditorServices.NavigationItem: FSharp.Compiler.EditorServices.NavigationEntityKind EnclosingEntityKind +FSharp.Compiler.EditorServices.NavigationItem: FSharp.Compiler.EditorServices.NavigationEntityKind get_EnclosingEntityKind() +FSharp.Compiler.EditorServices.NavigationItem: FSharp.Compiler.EditorServices.NavigationItemKind Kind +FSharp.Compiler.EditorServices.NavigationItem: FSharp.Compiler.EditorServices.NavigationItemKind get_Kind() +FSharp.Compiler.EditorServices.NavigationItem: FSharp.Compiler.Text.Range BodyRange +FSharp.Compiler.EditorServices.NavigationItem: FSharp.Compiler.Text.Range Range +FSharp.Compiler.EditorServices.NavigationItem: FSharp.Compiler.Text.Range get_BodyRange() +FSharp.Compiler.EditorServices.NavigationItem: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.EditorServices.NavigationItem: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] Access +FSharp.Compiler.EditorServices.NavigationItem: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_Access() +FSharp.Compiler.EditorServices.NavigationItem: System.String Name +FSharp.Compiler.EditorServices.NavigationItem: System.String UniqueName +FSharp.Compiler.EditorServices.NavigationItem: System.String get_Name() +FSharp.Compiler.EditorServices.NavigationItem: System.String get_UniqueName() +FSharp.Compiler.EditorServices.NavigationItemKind +FSharp.Compiler.EditorServices.NavigationItemKind+Tags: Int32 Exception +FSharp.Compiler.EditorServices.NavigationItemKind+Tags: Int32 Field +FSharp.Compiler.EditorServices.NavigationItemKind+Tags: Int32 Method +FSharp.Compiler.EditorServices.NavigationItemKind+Tags: Int32 Module +FSharp.Compiler.EditorServices.NavigationItemKind+Tags: Int32 ModuleFile +FSharp.Compiler.EditorServices.NavigationItemKind+Tags: Int32 Namespace +FSharp.Compiler.EditorServices.NavigationItemKind+Tags: Int32 Other +FSharp.Compiler.EditorServices.NavigationItemKind+Tags: Int32 Property +FSharp.Compiler.EditorServices.NavigationItemKind+Tags: Int32 Type +FSharp.Compiler.EditorServices.NavigationItemKind: Boolean Equals(FSharp.Compiler.EditorServices.NavigationItemKind) +FSharp.Compiler.EditorServices.NavigationItemKind: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.NavigationItemKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.NavigationItemKind: Boolean IsException +FSharp.Compiler.EditorServices.NavigationItemKind: Boolean IsField +FSharp.Compiler.EditorServices.NavigationItemKind: Boolean IsMethod +FSharp.Compiler.EditorServices.NavigationItemKind: Boolean IsModule +FSharp.Compiler.EditorServices.NavigationItemKind: Boolean IsModuleFile +FSharp.Compiler.EditorServices.NavigationItemKind: Boolean IsNamespace +FSharp.Compiler.EditorServices.NavigationItemKind: Boolean IsOther +FSharp.Compiler.EditorServices.NavigationItemKind: Boolean IsProperty +FSharp.Compiler.EditorServices.NavigationItemKind: Boolean IsType +FSharp.Compiler.EditorServices.NavigationItemKind: Boolean get_IsException() +FSharp.Compiler.EditorServices.NavigationItemKind: Boolean get_IsField() +FSharp.Compiler.EditorServices.NavigationItemKind: Boolean get_IsMethod() +FSharp.Compiler.EditorServices.NavigationItemKind: Boolean get_IsModule() +FSharp.Compiler.EditorServices.NavigationItemKind: Boolean get_IsModuleFile() +FSharp.Compiler.EditorServices.NavigationItemKind: Boolean get_IsNamespace() +FSharp.Compiler.EditorServices.NavigationItemKind: Boolean get_IsOther() +FSharp.Compiler.EditorServices.NavigationItemKind: Boolean get_IsProperty() +FSharp.Compiler.EditorServices.NavigationItemKind: Boolean get_IsType() +FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind Exception +FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind Field +FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind Method +FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind Module +FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind ModuleFile +FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind Namespace +FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind Other +FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind Property +FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind Type +FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind get_Exception() +FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind get_Field() +FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind get_Method() +FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind get_Module() +FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind get_ModuleFile() +FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind get_Namespace() +FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind get_Other() +FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind get_Property() +FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind get_Type() +FSharp.Compiler.EditorServices.NavigationItemKind: FSharp.Compiler.EditorServices.NavigationItemKind+Tags +FSharp.Compiler.EditorServices.NavigationItemKind: Int32 CompareTo(FSharp.Compiler.EditorServices.NavigationItemKind) +FSharp.Compiler.EditorServices.NavigationItemKind: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.NavigationItemKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.NavigationItemKind: Int32 GetHashCode() +FSharp.Compiler.EditorServices.NavigationItemKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.NavigationItemKind: Int32 Tag +FSharp.Compiler.EditorServices.NavigationItemKind: Int32 get_Tag() +FSharp.Compiler.EditorServices.NavigationItemKind: System.String ToString() +FSharp.Compiler.EditorServices.NavigationItems +FSharp.Compiler.EditorServices.NavigationItems: FSharp.Compiler.EditorServices.NavigationTopLevelDeclaration[] Declarations +FSharp.Compiler.EditorServices.NavigationItems: FSharp.Compiler.EditorServices.NavigationTopLevelDeclaration[] get_Declarations() +FSharp.Compiler.EditorServices.NavigationTopLevelDeclaration +FSharp.Compiler.EditorServices.NavigationTopLevelDeclaration: FSharp.Compiler.EditorServices.NavigationItem Declaration +FSharp.Compiler.EditorServices.NavigationTopLevelDeclaration: FSharp.Compiler.EditorServices.NavigationItem get_Declaration() +FSharp.Compiler.EditorServices.NavigationTopLevelDeclaration: FSharp.Compiler.EditorServices.NavigationItem[] Nested +FSharp.Compiler.EditorServices.NavigationTopLevelDeclaration: FSharp.Compiler.EditorServices.NavigationItem[] get_Nested() +FSharp.Compiler.EditorServices.NavigationTopLevelDeclaration: System.String ToString() +FSharp.Compiler.EditorServices.NavigationTopLevelDeclaration: Void .ctor(FSharp.Compiler.EditorServices.NavigationItem, FSharp.Compiler.EditorServices.NavigationItem[]) +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint+Tags: Int32 Nearest +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint+Tags: Int32 TopLevel +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Boolean Equals(FSharp.Compiler.EditorServices.OpenStatementInsertionPoint) +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Boolean IsNearest +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Boolean IsTopLevel +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Boolean get_IsNearest() +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Boolean get_IsTopLevel() +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: FSharp.Compiler.EditorServices.OpenStatementInsertionPoint Nearest +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: FSharp.Compiler.EditorServices.OpenStatementInsertionPoint TopLevel +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: FSharp.Compiler.EditorServices.OpenStatementInsertionPoint get_Nearest() +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: FSharp.Compiler.EditorServices.OpenStatementInsertionPoint get_TopLevel() +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: FSharp.Compiler.EditorServices.OpenStatementInsertionPoint+Tags +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Int32 CompareTo(FSharp.Compiler.EditorServices.OpenStatementInsertionPoint) +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Int32 GetHashCode() +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Int32 Tag +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: Int32 get_Tag() +FSharp.Compiler.EditorServices.OpenStatementInsertionPoint: System.String ToString() +FSharp.Compiler.EditorServices.ParameterLocations +FSharp.Compiler.EditorServices.ParameterLocations: Boolean IsThereACloseParen +FSharp.Compiler.EditorServices.ParameterLocations: Boolean get_IsThereACloseParen() +FSharp.Compiler.EditorServices.ParameterLocations: FSharp.Compiler.Text.Position LongIdEndLocation +FSharp.Compiler.EditorServices.ParameterLocations: FSharp.Compiler.Text.Position LongIdStartLocation +FSharp.Compiler.EditorServices.ParameterLocations: FSharp.Compiler.Text.Position OpenParenLocation +FSharp.Compiler.EditorServices.ParameterLocations: FSharp.Compiler.Text.Position get_LongIdEndLocation() +FSharp.Compiler.EditorServices.ParameterLocations: FSharp.Compiler.Text.Position get_LongIdStartLocation() +FSharp.Compiler.EditorServices.ParameterLocations: FSharp.Compiler.Text.Position get_OpenParenLocation() +FSharp.Compiler.EditorServices.ParameterLocations: FSharp.Compiler.Text.Position[] TupleEndLocations +FSharp.Compiler.EditorServices.ParameterLocations: FSharp.Compiler.Text.Position[] get_TupleEndLocations() +FSharp.Compiler.EditorServices.ParameterLocations: Microsoft.FSharp.Collections.FSharpList`1[System.String] LongId +FSharp.Compiler.EditorServices.ParameterLocations: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_LongId() +FSharp.Compiler.EditorServices.ParameterLocations: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.EditorServices.ParameterLocations] Find(FSharp.Compiler.Text.Position, FSharp.Compiler.Syntax.ParsedInput) +FSharp.Compiler.EditorServices.ParameterLocations: Microsoft.FSharp.Core.FSharpOption`1[System.String][] NamedParamNames +FSharp.Compiler.EditorServices.ParameterLocations: Microsoft.FSharp.Core.FSharpOption`1[System.String][] get_NamedParamNames() +FSharp.Compiler.EditorServices.ParsedInput +FSharp.Compiler.EditorServices.ParsedInput: FSharp.Compiler.EditorServices.InsertionContext FindNearestPointToInsertOpenDeclaration(Int32, FSharp.Compiler.Syntax.ParsedInput, System.String[], FSharp.Compiler.EditorServices.OpenStatementInsertionPoint) +FSharp.Compiler.EditorServices.ParsedInput: FSharp.Compiler.Text.Position AdjustInsertionPoint(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String], FSharp.Compiler.EditorServices.InsertionContext) +FSharp.Compiler.EditorServices.ParsedInput: Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`4[Microsoft.FSharp.Core.FSharpOption`1[System.String[]],Microsoft.FSharp.Core.FSharpOption`1[System.String[]],Microsoft.FSharp.Core.FSharpOption`1[System.String[]],System.String[]],System.Tuple`2[FSharp.Compiler.EditorServices.InsertionContextEntity,FSharp.Compiler.EditorServices.InsertionContext][]] TryFindInsertionContext(Int32, FSharp.Compiler.Syntax.ParsedInput, FSharp.Compiler.EditorServices.MaybeUnresolvedIdent[], FSharp.Compiler.EditorServices.OpenStatementInsertionPoint) +FSharp.Compiler.EditorServices.ParsedInput: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.EditorServices.CompletionContext] TryGetCompletionContext(FSharp.Compiler.Text.Position, FSharp.Compiler.Syntax.ParsedInput, System.String) +FSharp.Compiler.EditorServices.ParsedInput: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.EditorServices.EntityKind] GetEntityKind(FSharp.Compiler.Text.Position, FSharp.Compiler.Syntax.ParsedInput) +FSharp.Compiler.EditorServices.ParsedInput: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] GetRangeOfExprLeftOfDot(FSharp.Compiler.Text.Position, FSharp.Compiler.Syntax.ParsedInput) +FSharp.Compiler.EditorServices.ParsedInput: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident]] GetLongIdentAt(FSharp.Compiler.Syntax.ParsedInput, FSharp.Compiler.Text.Position) +FSharp.Compiler.EditorServices.ParsedInput: Microsoft.FSharp.Core.FSharpOption`1[System.String] TryFindExpressionIslandInPosition(FSharp.Compiler.Text.Position, FSharp.Compiler.Syntax.ParsedInput) +FSharp.Compiler.EditorServices.ParsedInput: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Position,System.Boolean]] TryFindExpressionASTLeftOfDotLeftOfCursor(FSharp.Compiler.Text.Position, FSharp.Compiler.Syntax.ParsedInput) +FSharp.Compiler.EditorServices.ParsedInput: System.String[] GetFullNameOfSmallestModuleOrNamespaceAtPoint(FSharp.Compiler.Text.Position, FSharp.Compiler.Syntax.ParsedInput) +FSharp.Compiler.EditorServices.PartialLongName +FSharp.Compiler.EditorServices.PartialLongName: Boolean Equals(FSharp.Compiler.EditorServices.PartialLongName) +FSharp.Compiler.EditorServices.PartialLongName: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.PartialLongName: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.PartialLongName: FSharp.Compiler.EditorServices.PartialLongName Empty(Int32) +FSharp.Compiler.EditorServices.PartialLongName: Int32 CompareTo(FSharp.Compiler.EditorServices.PartialLongName) +FSharp.Compiler.EditorServices.PartialLongName: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.PartialLongName: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.PartialLongName: Int32 EndColumn +FSharp.Compiler.EditorServices.PartialLongName: Int32 GetHashCode() +FSharp.Compiler.EditorServices.PartialLongName: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.PartialLongName: Int32 get_EndColumn() +FSharp.Compiler.EditorServices.PartialLongName: Microsoft.FSharp.Collections.FSharpList`1[System.String] QualifyingIdents +FSharp.Compiler.EditorServices.PartialLongName: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_QualifyingIdents() +FSharp.Compiler.EditorServices.PartialLongName: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] LastDotPos +FSharp.Compiler.EditorServices.PartialLongName: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] get_LastDotPos() +FSharp.Compiler.EditorServices.PartialLongName: System.String PartialIdent +FSharp.Compiler.EditorServices.PartialLongName: System.String ToString() +FSharp.Compiler.EditorServices.PartialLongName: System.String get_PartialIdent() +FSharp.Compiler.EditorServices.PartialLongName: Void .ctor(Microsoft.FSharp.Collections.FSharpList`1[System.String], System.String, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +FSharp.Compiler.EditorServices.QuickParse +FSharp.Compiler.EditorServices.QuickParse: Boolean TestMemberOrOverrideDeclaration(FSharp.Compiler.Tokenization.FSharpTokenInfo[]) +FSharp.Compiler.EditorServices.QuickParse: FSharp.Compiler.EditorServices.PartialLongName GetPartialLongNameEx(System.String, Int32) +FSharp.Compiler.EditorServices.QuickParse: Int32 CorrectIdentifierToken(System.String, Int32) +FSharp.Compiler.EditorServices.QuickParse: Int32 MagicalAdjustmentConstant +FSharp.Compiler.EditorServices.QuickParse: Int32 get_MagicalAdjustmentConstant() +FSharp.Compiler.EditorServices.QuickParse: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.String,System.Int32,System.Boolean]] GetCompleteIdentifierIsland(Boolean, System.String, Int32) +FSharp.Compiler.EditorServices.QuickParse: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],System.String] GetPartialLongName(System.String, Int32) +FSharp.Compiler.EditorServices.RecordContext +FSharp.Compiler.EditorServices.RecordContext+Constructor: System.String get_typeName() +FSharp.Compiler.EditorServices.RecordContext+Constructor: System.String typeName +FSharp.Compiler.EditorServices.RecordContext+CopyOnUpdate: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.EditorServices.RecordContext+CopyOnUpdate: FSharp.Compiler.Text.Range range +FSharp.Compiler.EditorServices.RecordContext+CopyOnUpdate: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] get_path() +FSharp.Compiler.EditorServices.RecordContext+CopyOnUpdate: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] path +FSharp.Compiler.EditorServices.RecordContext+New: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] get_path() +FSharp.Compiler.EditorServices.RecordContext+New: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] path +FSharp.Compiler.EditorServices.RecordContext+Tags: Int32 Constructor +FSharp.Compiler.EditorServices.RecordContext+Tags: Int32 CopyOnUpdate +FSharp.Compiler.EditorServices.RecordContext+Tags: Int32 New +FSharp.Compiler.EditorServices.RecordContext: Boolean Equals(FSharp.Compiler.EditorServices.RecordContext) +FSharp.Compiler.EditorServices.RecordContext: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.RecordContext: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.RecordContext: Boolean IsConstructor +FSharp.Compiler.EditorServices.RecordContext: Boolean IsCopyOnUpdate +FSharp.Compiler.EditorServices.RecordContext: Boolean IsNew +FSharp.Compiler.EditorServices.RecordContext: Boolean get_IsConstructor() +FSharp.Compiler.EditorServices.RecordContext: Boolean get_IsCopyOnUpdate() +FSharp.Compiler.EditorServices.RecordContext: Boolean get_IsNew() +FSharp.Compiler.EditorServices.RecordContext: FSharp.Compiler.EditorServices.RecordContext NewConstructor(System.String) +FSharp.Compiler.EditorServices.RecordContext: FSharp.Compiler.EditorServices.RecordContext NewCopyOnUpdate(FSharp.Compiler.Text.Range, System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]]) +FSharp.Compiler.EditorServices.RecordContext: FSharp.Compiler.EditorServices.RecordContext NewNew(System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]]) +FSharp.Compiler.EditorServices.RecordContext: FSharp.Compiler.EditorServices.RecordContext+Constructor +FSharp.Compiler.EditorServices.RecordContext: FSharp.Compiler.EditorServices.RecordContext+CopyOnUpdate +FSharp.Compiler.EditorServices.RecordContext: FSharp.Compiler.EditorServices.RecordContext+New +FSharp.Compiler.EditorServices.RecordContext: FSharp.Compiler.EditorServices.RecordContext+Tags +FSharp.Compiler.EditorServices.RecordContext: Int32 GetHashCode() +FSharp.Compiler.EditorServices.RecordContext: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.RecordContext: Int32 Tag +FSharp.Compiler.EditorServices.RecordContext: Int32 get_Tag() +FSharp.Compiler.EditorServices.RecordContext: System.String ToString() +FSharp.Compiler.EditorServices.ScopeKind +FSharp.Compiler.EditorServices.ScopeKind+Tags: Int32 HashDirective +FSharp.Compiler.EditorServices.ScopeKind+Tags: Int32 Namespace +FSharp.Compiler.EditorServices.ScopeKind+Tags: Int32 NestedModule +FSharp.Compiler.EditorServices.ScopeKind+Tags: Int32 OpenDeclaration +FSharp.Compiler.EditorServices.ScopeKind+Tags: Int32 TopModule +FSharp.Compiler.EditorServices.ScopeKind: Boolean Equals(FSharp.Compiler.EditorServices.ScopeKind) +FSharp.Compiler.EditorServices.ScopeKind: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.ScopeKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.ScopeKind: Boolean IsHashDirective +FSharp.Compiler.EditorServices.ScopeKind: Boolean IsNamespace +FSharp.Compiler.EditorServices.ScopeKind: Boolean IsNestedModule +FSharp.Compiler.EditorServices.ScopeKind: Boolean IsOpenDeclaration +FSharp.Compiler.EditorServices.ScopeKind: Boolean IsTopModule +FSharp.Compiler.EditorServices.ScopeKind: Boolean get_IsHashDirective() +FSharp.Compiler.EditorServices.ScopeKind: Boolean get_IsNamespace() +FSharp.Compiler.EditorServices.ScopeKind: Boolean get_IsNestedModule() +FSharp.Compiler.EditorServices.ScopeKind: Boolean get_IsOpenDeclaration() +FSharp.Compiler.EditorServices.ScopeKind: Boolean get_IsTopModule() +FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind HashDirective +FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind Namespace +FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind NestedModule +FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind OpenDeclaration +FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind TopModule +FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind get_HashDirective() +FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind get_Namespace() +FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind get_NestedModule() +FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind get_OpenDeclaration() +FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind get_TopModule() +FSharp.Compiler.EditorServices.ScopeKind: FSharp.Compiler.EditorServices.ScopeKind+Tags +FSharp.Compiler.EditorServices.ScopeKind: Int32 CompareTo(FSharp.Compiler.EditorServices.ScopeKind) +FSharp.Compiler.EditorServices.ScopeKind: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.ScopeKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.ScopeKind: Int32 GetHashCode() +FSharp.Compiler.EditorServices.ScopeKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.ScopeKind: Int32 Tag +FSharp.Compiler.EditorServices.ScopeKind: Int32 get_Tag() +FSharp.Compiler.EditorServices.ScopeKind: System.String ToString() +FSharp.Compiler.EditorServices.SemanticClassificationItem +FSharp.Compiler.EditorServices.SemanticClassificationItem: Boolean Equals(FSharp.Compiler.EditorServices.SemanticClassificationItem) +FSharp.Compiler.EditorServices.SemanticClassificationItem: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.SemanticClassificationItem: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.SemanticClassificationItem: FSharp.Compiler.EditorServices.SemanticClassificationType Type +FSharp.Compiler.EditorServices.SemanticClassificationItem: FSharp.Compiler.EditorServices.SemanticClassificationType get_Type() +FSharp.Compiler.EditorServices.SemanticClassificationItem: FSharp.Compiler.Text.Range Range +FSharp.Compiler.EditorServices.SemanticClassificationItem: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.EditorServices.SemanticClassificationItem: Int32 GetHashCode() +FSharp.Compiler.EditorServices.SemanticClassificationItem: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.SemanticClassificationItem: Void .ctor(System.Tuple`2[FSharp.Compiler.Text.Range,FSharp.Compiler.EditorServices.SemanticClassificationType]) +FSharp.Compiler.EditorServices.SemanticClassificationType +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType ComputationExpression +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType ConstructorForReferenceType +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType ConstructorForValueType +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Delegate +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType DisposableLocalValue +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType DisposableTopLevelValue +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType DisposableType +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Enumeration +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Event +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Exception +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType ExtensionMethod +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Field +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Function +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Interface +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType IntrinsicFunction +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Literal +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType LocalValue +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Method +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Module +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType MutableRecordField +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType MutableVar +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType NamedArgument +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Namespace +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Operator +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Plaintext +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Printf +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Property +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType RecordField +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType RecordFieldAsFunction +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType ReferenceType +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Type +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType TypeArgument +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType TypeDef +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType UnionCase +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType UnionCaseField +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType Value +FSharp.Compiler.EditorServices.SemanticClassificationType: FSharp.Compiler.EditorServices.SemanticClassificationType ValueType +FSharp.Compiler.EditorServices.SemanticClassificationType: Int32 value__ +FSharp.Compiler.EditorServices.SemanticClassificationView +FSharp.Compiler.EditorServices.SemanticClassificationView: Void ForEach(Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.EditorServices.SemanticClassificationItem,Microsoft.FSharp.Core.Unit]) +FSharp.Compiler.EditorServices.SimplifyNames +FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: Boolean Equals(SimplifiableRange) +FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: FSharp.Compiler.Text.Range Range +FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: Int32 GetHashCode() +FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: System.String RelativeName +FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: System.String ToString() +FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: System.String get_RelativeName() +FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange: Void .ctor(FSharp.Compiler.Text.Range, System.String) +FSharp.Compiler.EditorServices.SimplifyNames: FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange +FSharp.Compiler.EditorServices.SimplifyNames: Microsoft.FSharp.Control.FSharpAsync`1[System.Collections.Generic.IEnumerable`1[FSharp.Compiler.EditorServices.SimplifyNames+SimplifiableRange]] getSimplifiableNames(FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String]) +FSharp.Compiler.EditorServices.Structure +FSharp.Compiler.EditorServices.Structure+Collapse+Tags: Int32 Below +FSharp.Compiler.EditorServices.Structure+Collapse+Tags: Int32 Same +FSharp.Compiler.EditorServices.Structure+Collapse: Boolean Equals(Collapse) +FSharp.Compiler.EditorServices.Structure+Collapse: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.Structure+Collapse: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.Structure+Collapse: Boolean IsBelow +FSharp.Compiler.EditorServices.Structure+Collapse: Boolean IsSame +FSharp.Compiler.EditorServices.Structure+Collapse: Boolean get_IsBelow() +FSharp.Compiler.EditorServices.Structure+Collapse: Boolean get_IsSame() +FSharp.Compiler.EditorServices.Structure+Collapse: Collapse Below +FSharp.Compiler.EditorServices.Structure+Collapse: Collapse Same +FSharp.Compiler.EditorServices.Structure+Collapse: Collapse get_Below() +FSharp.Compiler.EditorServices.Structure+Collapse: Collapse get_Same() +FSharp.Compiler.EditorServices.Structure+Collapse: FSharp.Compiler.EditorServices.Structure+Collapse+Tags +FSharp.Compiler.EditorServices.Structure+Collapse: Int32 CompareTo(Collapse) +FSharp.Compiler.EditorServices.Structure+Collapse: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.Structure+Collapse: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.Structure+Collapse: Int32 GetHashCode() +FSharp.Compiler.EditorServices.Structure+Collapse: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.Structure+Collapse: Int32 Tag +FSharp.Compiler.EditorServices.Structure+Collapse: Int32 get_Tag() +FSharp.Compiler.EditorServices.Structure+Collapse: System.String ToString() +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 ArrayOrList +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Attribute +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Comment +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 CompExpr +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 CompExprInternal +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Do +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 ElseInIfThenElse +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 EnumCase +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 FinallyInTryFinally +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 For +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 HashDirective +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 IfThenElse +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Interface +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Lambda +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 LetOrUse +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 LetOrUseBang +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Match +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 MatchBang +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 MatchClause +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 MatchLambda +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Member +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Module +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Namespace +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 New +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 ObjExpr +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Open +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Quote +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Record +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 RecordDefn +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 RecordField +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 SpecialFunc +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 ThenInIfThenElse +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 TryFinally +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 TryInTryFinally +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 TryInTryWith +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 TryWith +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Tuple +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Type +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 TypeExtension +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 UnionCase +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 UnionDefn +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 Val +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 While +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 WithInTryWith +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 XmlDocComment +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 YieldOrReturn +FSharp.Compiler.EditorServices.Structure+Scope+Tags: Int32 YieldOrReturnBang +FSharp.Compiler.EditorServices.Structure+Scope: Boolean Equals(Scope) +FSharp.Compiler.EditorServices.Structure+Scope: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.Structure+Scope: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsArrayOrList +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsAttribute +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsComment +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsCompExpr +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsCompExprInternal +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsDo +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsElseInIfThenElse +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsEnumCase +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsFinallyInTryFinally +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsFor +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsHashDirective +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsIfThenElse +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsInterface +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsLambda +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsLetOrUse +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsLetOrUseBang +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsMatch +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsMatchBang +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsMatchClause +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsMatchLambda +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsMember +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsModule +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsNamespace +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsNew +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsObjExpr +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsOpen +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsQuote +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsRecord +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsRecordDefn +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsRecordField +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsSpecialFunc +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsThenInIfThenElse +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsTryFinally +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsTryInTryFinally +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsTryInTryWith +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsTryWith +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsTuple +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsType +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsTypeExtension +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsUnionCase +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsUnionDefn +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsVal +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsWhile +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsWithInTryWith +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsXmlDocComment +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsYieldOrReturn +FSharp.Compiler.EditorServices.Structure+Scope: Boolean IsYieldOrReturnBang +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsArrayOrList() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsAttribute() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsComment() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsCompExpr() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsCompExprInternal() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsDo() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsElseInIfThenElse() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsEnumCase() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsFinallyInTryFinally() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsFor() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsHashDirective() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsIfThenElse() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsInterface() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsLambda() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsLetOrUse() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsLetOrUseBang() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsMatch() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsMatchBang() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsMatchClause() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsMatchLambda() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsMember() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsModule() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsNamespace() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsNew() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsObjExpr() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsOpen() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsQuote() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsRecord() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsRecordDefn() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsRecordField() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsSpecialFunc() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsThenInIfThenElse() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsTryFinally() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsTryInTryFinally() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsTryInTryWith() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsTryWith() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsTuple() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsType() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsTypeExtension() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsUnionCase() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsUnionDefn() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsVal() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsWhile() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsWithInTryWith() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsXmlDocComment() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsYieldOrReturn() +FSharp.Compiler.EditorServices.Structure+Scope: Boolean get_IsYieldOrReturnBang() +FSharp.Compiler.EditorServices.Structure+Scope: FSharp.Compiler.EditorServices.Structure+Scope+Tags +FSharp.Compiler.EditorServices.Structure+Scope: Int32 CompareTo(Scope) +FSharp.Compiler.EditorServices.Structure+Scope: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.Structure+Scope: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.Structure+Scope: Int32 GetHashCode() +FSharp.Compiler.EditorServices.Structure+Scope: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.Structure+Scope: Int32 Tag +FSharp.Compiler.EditorServices.Structure+Scope: Int32 get_Tag() +FSharp.Compiler.EditorServices.Structure+Scope: Scope ArrayOrList +FSharp.Compiler.EditorServices.Structure+Scope: Scope Attribute +FSharp.Compiler.EditorServices.Structure+Scope: Scope Comment +FSharp.Compiler.EditorServices.Structure+Scope: Scope CompExpr +FSharp.Compiler.EditorServices.Structure+Scope: Scope CompExprInternal +FSharp.Compiler.EditorServices.Structure+Scope: Scope Do +FSharp.Compiler.EditorServices.Structure+Scope: Scope ElseInIfThenElse +FSharp.Compiler.EditorServices.Structure+Scope: Scope EnumCase +FSharp.Compiler.EditorServices.Structure+Scope: Scope FinallyInTryFinally +FSharp.Compiler.EditorServices.Structure+Scope: Scope For +FSharp.Compiler.EditorServices.Structure+Scope: Scope HashDirective +FSharp.Compiler.EditorServices.Structure+Scope: Scope IfThenElse +FSharp.Compiler.EditorServices.Structure+Scope: Scope Interface +FSharp.Compiler.EditorServices.Structure+Scope: Scope Lambda +FSharp.Compiler.EditorServices.Structure+Scope: Scope LetOrUse +FSharp.Compiler.EditorServices.Structure+Scope: Scope LetOrUseBang +FSharp.Compiler.EditorServices.Structure+Scope: Scope Match +FSharp.Compiler.EditorServices.Structure+Scope: Scope MatchBang +FSharp.Compiler.EditorServices.Structure+Scope: Scope MatchClause +FSharp.Compiler.EditorServices.Structure+Scope: Scope MatchLambda +FSharp.Compiler.EditorServices.Structure+Scope: Scope Member +FSharp.Compiler.EditorServices.Structure+Scope: Scope Module +FSharp.Compiler.EditorServices.Structure+Scope: Scope Namespace +FSharp.Compiler.EditorServices.Structure+Scope: Scope New +FSharp.Compiler.EditorServices.Structure+Scope: Scope ObjExpr +FSharp.Compiler.EditorServices.Structure+Scope: Scope Open +FSharp.Compiler.EditorServices.Structure+Scope: Scope Quote +FSharp.Compiler.EditorServices.Structure+Scope: Scope Record +FSharp.Compiler.EditorServices.Structure+Scope: Scope RecordDefn +FSharp.Compiler.EditorServices.Structure+Scope: Scope RecordField +FSharp.Compiler.EditorServices.Structure+Scope: Scope SpecialFunc +FSharp.Compiler.EditorServices.Structure+Scope: Scope ThenInIfThenElse +FSharp.Compiler.EditorServices.Structure+Scope: Scope TryFinally +FSharp.Compiler.EditorServices.Structure+Scope: Scope TryInTryFinally +FSharp.Compiler.EditorServices.Structure+Scope: Scope TryInTryWith +FSharp.Compiler.EditorServices.Structure+Scope: Scope TryWith +FSharp.Compiler.EditorServices.Structure+Scope: Scope Tuple +FSharp.Compiler.EditorServices.Structure+Scope: Scope Type +FSharp.Compiler.EditorServices.Structure+Scope: Scope TypeExtension +FSharp.Compiler.EditorServices.Structure+Scope: Scope UnionCase +FSharp.Compiler.EditorServices.Structure+Scope: Scope UnionDefn +FSharp.Compiler.EditorServices.Structure+Scope: Scope Val +FSharp.Compiler.EditorServices.Structure+Scope: Scope While +FSharp.Compiler.EditorServices.Structure+Scope: Scope WithInTryWith +FSharp.Compiler.EditorServices.Structure+Scope: Scope XmlDocComment +FSharp.Compiler.EditorServices.Structure+Scope: Scope YieldOrReturn +FSharp.Compiler.EditorServices.Structure+Scope: Scope YieldOrReturnBang +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_ArrayOrList() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Attribute() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Comment() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_CompExpr() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_CompExprInternal() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Do() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_ElseInIfThenElse() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_EnumCase() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_FinallyInTryFinally() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_For() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_HashDirective() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_IfThenElse() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Interface() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Lambda() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_LetOrUse() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_LetOrUseBang() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Match() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_MatchBang() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_MatchClause() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_MatchLambda() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Member() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Module() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Namespace() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_New() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_ObjExpr() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Open() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Quote() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Record() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_RecordDefn() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_RecordField() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_SpecialFunc() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_ThenInIfThenElse() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_TryFinally() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_TryInTryFinally() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_TryInTryWith() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_TryWith() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Tuple() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Type() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_TypeExtension() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_UnionCase() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_UnionDefn() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_Val() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_While() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_WithInTryWith() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_XmlDocComment() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_YieldOrReturn() +FSharp.Compiler.EditorServices.Structure+Scope: Scope get_YieldOrReturnBang() +FSharp.Compiler.EditorServices.Structure+Scope: System.String ToString() +FSharp.Compiler.EditorServices.Structure+ScopeRange: Boolean Equals(ScopeRange) +FSharp.Compiler.EditorServices.Structure+ScopeRange: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.Structure+ScopeRange: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.Structure+ScopeRange: Collapse Collapse +FSharp.Compiler.EditorServices.Structure+ScopeRange: Collapse get_Collapse() +FSharp.Compiler.EditorServices.Structure+ScopeRange: FSharp.Compiler.Text.Range CollapseRange +FSharp.Compiler.EditorServices.Structure+ScopeRange: FSharp.Compiler.Text.Range Range +FSharp.Compiler.EditorServices.Structure+ScopeRange: FSharp.Compiler.Text.Range get_CollapseRange() +FSharp.Compiler.EditorServices.Structure+ScopeRange: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.EditorServices.Structure+ScopeRange: Int32 GetHashCode() +FSharp.Compiler.EditorServices.Structure+ScopeRange: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.Structure+ScopeRange: Scope Scope +FSharp.Compiler.EditorServices.Structure+ScopeRange: Scope get_Scope() +FSharp.Compiler.EditorServices.Structure+ScopeRange: System.String ToString() +FSharp.Compiler.EditorServices.Structure+ScopeRange: Void .ctor(Scope, Collapse, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.EditorServices.Structure: FSharp.Compiler.EditorServices.Structure+Collapse +FSharp.Compiler.EditorServices.Structure: FSharp.Compiler.EditorServices.Structure+Scope +FSharp.Compiler.EditorServices.Structure: FSharp.Compiler.EditorServices.Structure+ScopeRange +FSharp.Compiler.EditorServices.Structure: System.Collections.Generic.IEnumerable`1[FSharp.Compiler.EditorServices.Structure+ScopeRange] getOutliningRanges(System.String[], FSharp.Compiler.Syntax.ParsedInput) +FSharp.Compiler.EditorServices.ToolTipElement +FSharp.Compiler.EditorServices.ToolTipElement+CompositionError: System.String errorText +FSharp.Compiler.EditorServices.ToolTipElement+CompositionError: System.String get_errorText() +FSharp.Compiler.EditorServices.ToolTipElement+Group: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.ToolTipElementData] elements +FSharp.Compiler.EditorServices.ToolTipElement+Group: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.ToolTipElementData] get_elements() +FSharp.Compiler.EditorServices.ToolTipElement+Tags: Int32 CompositionError +FSharp.Compiler.EditorServices.ToolTipElement+Tags: Int32 Group +FSharp.Compiler.EditorServices.ToolTipElement+Tags: Int32 None +FSharp.Compiler.EditorServices.ToolTipElement: Boolean Equals(FSharp.Compiler.EditorServices.ToolTipElement) +FSharp.Compiler.EditorServices.ToolTipElement: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.ToolTipElement: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.ToolTipElement: Boolean IsCompositionError +FSharp.Compiler.EditorServices.ToolTipElement: Boolean IsGroup +FSharp.Compiler.EditorServices.ToolTipElement: Boolean IsNone +FSharp.Compiler.EditorServices.ToolTipElement: Boolean get_IsCompositionError() +FSharp.Compiler.EditorServices.ToolTipElement: Boolean get_IsGroup() +FSharp.Compiler.EditorServices.ToolTipElement: Boolean get_IsNone() +FSharp.Compiler.EditorServices.ToolTipElement: FSharp.Compiler.EditorServices.ToolTipElement NewCompositionError(System.String) +FSharp.Compiler.EditorServices.ToolTipElement: FSharp.Compiler.EditorServices.ToolTipElement NewGroup(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.ToolTipElementData]) +FSharp.Compiler.EditorServices.ToolTipElement: FSharp.Compiler.EditorServices.ToolTipElement None +FSharp.Compiler.EditorServices.ToolTipElement: FSharp.Compiler.EditorServices.ToolTipElement Single(FSharp.Compiler.Text.TaggedText[], FSharp.Compiler.Symbols.FSharpXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.TaggedText[]]], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.TaggedText[]]) +FSharp.Compiler.EditorServices.ToolTipElement: FSharp.Compiler.EditorServices.ToolTipElement get_None() +FSharp.Compiler.EditorServices.ToolTipElement: FSharp.Compiler.EditorServices.ToolTipElement+CompositionError +FSharp.Compiler.EditorServices.ToolTipElement: FSharp.Compiler.EditorServices.ToolTipElement+Group +FSharp.Compiler.EditorServices.ToolTipElement: FSharp.Compiler.EditorServices.ToolTipElement+Tags +FSharp.Compiler.EditorServices.ToolTipElement: Int32 GetHashCode() +FSharp.Compiler.EditorServices.ToolTipElement: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.ToolTipElement: Int32 Tag +FSharp.Compiler.EditorServices.ToolTipElement: Int32 get_Tag() +FSharp.Compiler.EditorServices.ToolTipElement: System.String ToString() +FSharp.Compiler.EditorServices.ToolTipElementData +FSharp.Compiler.EditorServices.ToolTipElementData: Boolean Equals(FSharp.Compiler.EditorServices.ToolTipElementData) +FSharp.Compiler.EditorServices.ToolTipElementData: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.ToolTipElementData: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.ToolTipElementData: FSharp.Compiler.Symbols.FSharpXmlDoc XmlDoc +FSharp.Compiler.EditorServices.ToolTipElementData: FSharp.Compiler.Symbols.FSharpXmlDoc get_XmlDoc() +FSharp.Compiler.EditorServices.ToolTipElementData: FSharp.Compiler.Text.TaggedText[] MainDescription +FSharp.Compiler.EditorServices.ToolTipElementData: FSharp.Compiler.Text.TaggedText[] get_MainDescription() +FSharp.Compiler.EditorServices.ToolTipElementData: Int32 GetHashCode() +FSharp.Compiler.EditorServices.ToolTipElementData: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.ToolTipElementData: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.TaggedText[]] TypeMapping +FSharp.Compiler.EditorServices.ToolTipElementData: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.TaggedText[]] get_TypeMapping() +FSharp.Compiler.EditorServices.ToolTipElementData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.TaggedText[]] Remarks +FSharp.Compiler.EditorServices.ToolTipElementData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.TaggedText[]] get_Remarks() +FSharp.Compiler.EditorServices.ToolTipElementData: Microsoft.FSharp.Core.FSharpOption`1[System.String] ParamName +FSharp.Compiler.EditorServices.ToolTipElementData: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_ParamName() +FSharp.Compiler.EditorServices.ToolTipElementData: System.String ToString() +FSharp.Compiler.EditorServices.ToolTipElementData: Void .ctor(FSharp.Compiler.Text.TaggedText[], FSharp.Compiler.Symbols.FSharpXmlDoc, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.TaggedText[]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.TaggedText[]], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.EditorServices.ToolTipText +FSharp.Compiler.EditorServices.ToolTipText: Boolean Equals(FSharp.Compiler.EditorServices.ToolTipText) +FSharp.Compiler.EditorServices.ToolTipText: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.ToolTipText: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.ToolTipText: FSharp.Compiler.EditorServices.ToolTipText NewToolTipText(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.ToolTipElement]) +FSharp.Compiler.EditorServices.ToolTipText: Int32 GetHashCode() +FSharp.Compiler.EditorServices.ToolTipText: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.ToolTipText: Int32 Tag +FSharp.Compiler.EditorServices.ToolTipText: Int32 get_Tag() +FSharp.Compiler.EditorServices.ToolTipText: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.ToolTipElement] Item +FSharp.Compiler.EditorServices.ToolTipText: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.ToolTipElement] get_Item() +FSharp.Compiler.EditorServices.ToolTipText: System.String ToString() +FSharp.Compiler.EditorServices.UnresolvedSymbol +FSharp.Compiler.EditorServices.UnresolvedSymbol: Boolean Equals(FSharp.Compiler.EditorServices.UnresolvedSymbol) +FSharp.Compiler.EditorServices.UnresolvedSymbol: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.UnresolvedSymbol: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.UnresolvedSymbol: Int32 CompareTo(FSharp.Compiler.EditorServices.UnresolvedSymbol) +FSharp.Compiler.EditorServices.UnresolvedSymbol: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.UnresolvedSymbol: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.UnresolvedSymbol: Int32 GetHashCode() +FSharp.Compiler.EditorServices.UnresolvedSymbol: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.UnresolvedSymbol: System.String DisplayName +FSharp.Compiler.EditorServices.UnresolvedSymbol: System.String FullName +FSharp.Compiler.EditorServices.UnresolvedSymbol: System.String ToString() +FSharp.Compiler.EditorServices.UnresolvedSymbol: System.String get_DisplayName() +FSharp.Compiler.EditorServices.UnresolvedSymbol: System.String get_FullName() +FSharp.Compiler.EditorServices.UnresolvedSymbol: System.String[] Namespace +FSharp.Compiler.EditorServices.UnresolvedSymbol: System.String[] get_Namespace() +FSharp.Compiler.EditorServices.UnresolvedSymbol: Void .ctor(System.String, System.String, System.String[]) +FSharp.Compiler.EditorServices.UnusedDeclarations +FSharp.Compiler.EditorServices.UnusedDeclarations: Microsoft.FSharp.Control.FSharpAsync`1[System.Collections.Generic.IEnumerable`1[FSharp.Compiler.Text.Range]] getUnusedDeclarations(FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults, Boolean) +FSharp.Compiler.EditorServices.UnusedOpens +FSharp.Compiler.EditorServices.UnusedOpens: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range]] getUnusedOpens(FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String]) +FSharp.Compiler.EditorServices.XmlDocComment +FSharp.Compiler.EditorServices.XmlDocComment: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] IsBlank(System.String) +FSharp.Compiler.EditorServices.XmlDocParser +FSharp.Compiler.EditorServices.XmlDocParser: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.EditorServices.XmlDocable] GetXmlDocables(FSharp.Compiler.Text.ISourceText, FSharp.Compiler.Syntax.ParsedInput) +FSharp.Compiler.EditorServices.XmlDocable +FSharp.Compiler.EditorServices.XmlDocable: Boolean Equals(FSharp.Compiler.EditorServices.XmlDocable) +FSharp.Compiler.EditorServices.XmlDocable: Boolean Equals(System.Object) +FSharp.Compiler.EditorServices.XmlDocable: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.XmlDocable: FSharp.Compiler.EditorServices.XmlDocable NewXmlDocable(Int32, Int32, Microsoft.FSharp.Collections.FSharpList`1[System.String]) +FSharp.Compiler.EditorServices.XmlDocable: Int32 CompareTo(FSharp.Compiler.EditorServices.XmlDocable) +FSharp.Compiler.EditorServices.XmlDocable: Int32 CompareTo(System.Object) +FSharp.Compiler.EditorServices.XmlDocable: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.EditorServices.XmlDocable: Int32 GetHashCode() +FSharp.Compiler.EditorServices.XmlDocable: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.EditorServices.XmlDocable: Int32 Tag +FSharp.Compiler.EditorServices.XmlDocable: Int32 get_Tag() +FSharp.Compiler.EditorServices.XmlDocable: Int32 get_indent() +FSharp.Compiler.EditorServices.XmlDocable: Int32 get_line() +FSharp.Compiler.EditorServices.XmlDocable: Int32 indent +FSharp.Compiler.EditorServices.XmlDocable: Int32 line +FSharp.Compiler.EditorServices.XmlDocable: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_paramNames() +FSharp.Compiler.EditorServices.XmlDocable: Microsoft.FSharp.Collections.FSharpList`1[System.String] paramNames +FSharp.Compiler.EditorServices.XmlDocable: System.String ToString() +FSharp.Compiler.IO.ByteMemory +FSharp.Compiler.IO.ByteMemory: Byte Item [Int32] +FSharp.Compiler.IO.ByteMemory: Byte get_Item(Int32) +FSharp.Compiler.IO.ByteMemory: Byte[] ReadAllBytes() +FSharp.Compiler.IO.ByteMemory: Byte[] ReadBytes(Int32, Int32) +FSharp.Compiler.IO.ByteMemory: Byte[] ToArray() +FSharp.Compiler.IO.ByteMemory: FSharp.Compiler.IO.ByteMemory Empty +FSharp.Compiler.IO.ByteMemory: FSharp.Compiler.IO.ByteMemory FromArray(Byte[]) +FSharp.Compiler.IO.ByteMemory: FSharp.Compiler.IO.ByteMemory FromArray(Byte[], Int32, Int32) +FSharp.Compiler.IO.ByteMemory: FSharp.Compiler.IO.ByteMemory FromMemoryMappedFile(System.IO.MemoryMappedFiles.MemoryMappedFile) +FSharp.Compiler.IO.ByteMemory: FSharp.Compiler.IO.ByteMemory FromUnsafePointer(IntPtr, Int32, System.Object) +FSharp.Compiler.IO.ByteMemory: FSharp.Compiler.IO.ByteMemory Slice(Int32, Int32) +FSharp.Compiler.IO.ByteMemory: FSharp.Compiler.IO.ByteMemory get_Empty() +FSharp.Compiler.IO.ByteMemory: FSharp.Compiler.IO.ReadOnlyByteMemory AsReadOnly() +FSharp.Compiler.IO.ByteMemory: Int32 Length +FSharp.Compiler.IO.ByteMemory: Int32 ReadInt32(Int32) +FSharp.Compiler.IO.ByteMemory: Int32 get_Length() +FSharp.Compiler.IO.ByteMemory: System.IO.Stream AsReadOnlyStream() +FSharp.Compiler.IO.ByteMemory: System.IO.Stream AsStream() +FSharp.Compiler.IO.ByteMemory: System.String ReadUtf8String(Int32, Int32) +FSharp.Compiler.IO.ByteMemory: UInt16 ReadUInt16(Int32) +FSharp.Compiler.IO.ByteMemory: Void Copy(Int32, Byte[], Int32, Int32) +FSharp.Compiler.IO.ByteMemory: Void CopyTo(System.IO.Stream) +FSharp.Compiler.IO.ByteMemory: Void set_Item(Int32, Byte) +FSharp.Compiler.IO.DefaultAssemblyLoader +FSharp.Compiler.IO.DefaultAssemblyLoader: Void .ctor() +FSharp.Compiler.IO.DefaultFileSystem +FSharp.Compiler.IO.DefaultFileSystem: Boolean DirectoryExistsShim(System.String) +FSharp.Compiler.IO.DefaultFileSystem: Boolean FileExistsShim(System.String) +FSharp.Compiler.IO.DefaultFileSystem: Boolean IsInvalidPathShim(System.String) +FSharp.Compiler.IO.DefaultFileSystem: Boolean IsPathRootedShim(System.String) +FSharp.Compiler.IO.DefaultFileSystem: Boolean IsStableFileHeuristic(System.String) +FSharp.Compiler.IO.DefaultFileSystem: FSharp.Compiler.IO.IAssemblyLoader AssemblyLoader +FSharp.Compiler.IO.DefaultFileSystem: FSharp.Compiler.IO.IAssemblyLoader get_AssemblyLoader() +FSharp.Compiler.IO.DefaultFileSystem: System.Collections.Generic.IEnumerable`1[System.String] EnumerateDirectoriesShim(System.String) +FSharp.Compiler.IO.DefaultFileSystem: System.Collections.Generic.IEnumerable`1[System.String] EnumerateFilesShim(System.String, System.String) +FSharp.Compiler.IO.DefaultFileSystem: System.DateTime GetCreationTimeShim(System.String) +FSharp.Compiler.IO.DefaultFileSystem: System.DateTime GetLastWriteTimeShim(System.String) +FSharp.Compiler.IO.DefaultFileSystem: System.IO.DirectoryInfo DirectoryCreateShim(System.String) +FSharp.Compiler.IO.DefaultFileSystem: System.IO.Stream OpenFileForReadShim(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +FSharp.Compiler.IO.DefaultFileSystem: System.IO.Stream OpenFileForWriteShim(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.IO.FileMode], Microsoft.FSharp.Core.FSharpOption`1[System.IO.FileAccess], Microsoft.FSharp.Core.FSharpOption`1[System.IO.FileShare]) +FSharp.Compiler.IO.DefaultFileSystem: System.String GetDirectoryNameShim(System.String) +FSharp.Compiler.IO.DefaultFileSystem: System.String GetFullFilePathInDirectoryShim(System.String, System.String) +FSharp.Compiler.IO.DefaultFileSystem: System.String GetFullPathShim(System.String) +FSharp.Compiler.IO.DefaultFileSystem: System.String GetTempPathShim() +FSharp.Compiler.IO.DefaultFileSystem: System.String NormalizePathShim(System.String) +FSharp.Compiler.IO.DefaultFileSystem: Void .ctor() +FSharp.Compiler.IO.DefaultFileSystem: Void CopyShim(System.String, System.String, Boolean) +FSharp.Compiler.IO.DefaultFileSystem: Void DirectoryDeleteShim(System.String) +FSharp.Compiler.IO.DefaultFileSystem: Void FileDeleteShim(System.String) +FSharp.Compiler.IO.FileSystemAutoOpens +FSharp.Compiler.IO.FileSystemAutoOpens: FSharp.Compiler.IO.IFileSystem FileSystem +FSharp.Compiler.IO.FileSystemAutoOpens: FSharp.Compiler.IO.IFileSystem get_FileSystem() +FSharp.Compiler.IO.FileSystemAutoOpens: Void set_FileSystem(FSharp.Compiler.IO.IFileSystem) +FSharp.Compiler.IO.IAssemblyLoader +FSharp.Compiler.IO.IAssemblyLoader: System.Reflection.Assembly AssemblyLoad(System.Reflection.AssemblyName) +FSharp.Compiler.IO.IAssemblyLoader: System.Reflection.Assembly AssemblyLoadFrom(System.String) +FSharp.Compiler.IO.IFileSystem +FSharp.Compiler.IO.IFileSystem: Boolean DirectoryExistsShim(System.String) +FSharp.Compiler.IO.IFileSystem: Boolean FileExistsShim(System.String) +FSharp.Compiler.IO.IFileSystem: Boolean IsInvalidPathShim(System.String) +FSharp.Compiler.IO.IFileSystem: Boolean IsPathRootedShim(System.String) +FSharp.Compiler.IO.IFileSystem: Boolean IsStableFileHeuristic(System.String) +FSharp.Compiler.IO.IFileSystem: FSharp.Compiler.IO.IAssemblyLoader AssemblyLoader +FSharp.Compiler.IO.IFileSystem: FSharp.Compiler.IO.IAssemblyLoader get_AssemblyLoader() +FSharp.Compiler.IO.IFileSystem: System.Collections.Generic.IEnumerable`1[System.String] EnumerateDirectoriesShim(System.String) +FSharp.Compiler.IO.IFileSystem: System.Collections.Generic.IEnumerable`1[System.String] EnumerateFilesShim(System.String, System.String) +FSharp.Compiler.IO.IFileSystem: System.DateTime GetCreationTimeShim(System.String) +FSharp.Compiler.IO.IFileSystem: System.DateTime GetLastWriteTimeShim(System.String) +FSharp.Compiler.IO.IFileSystem: System.IO.DirectoryInfo DirectoryCreateShim(System.String) +FSharp.Compiler.IO.IFileSystem: System.IO.Stream OpenFileForReadShim(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +FSharp.Compiler.IO.IFileSystem: System.IO.Stream OpenFileForWriteShim(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.IO.FileMode], Microsoft.FSharp.Core.FSharpOption`1[System.IO.FileAccess], Microsoft.FSharp.Core.FSharpOption`1[System.IO.FileShare]) +FSharp.Compiler.IO.IFileSystem: System.String GetDirectoryNameShim(System.String) +FSharp.Compiler.IO.IFileSystem: System.String GetFullFilePathInDirectoryShim(System.String, System.String) +FSharp.Compiler.IO.IFileSystem: System.String GetFullPathShim(System.String) +FSharp.Compiler.IO.IFileSystem: System.String GetTempPathShim() +FSharp.Compiler.IO.IFileSystem: System.String NormalizePathShim(System.String) +FSharp.Compiler.IO.IFileSystem: Void CopyShim(System.String, System.String, Boolean) +FSharp.Compiler.IO.IFileSystem: Void DirectoryDeleteShim(System.String) +FSharp.Compiler.IO.IFileSystem: Void FileDeleteShim(System.String) +FSharp.Compiler.IO.IllegalFileNameChar +FSharp.Compiler.IO.IllegalFileNameChar: Boolean Equals(System.Object) +FSharp.Compiler.IO.IllegalFileNameChar: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.IO.IllegalFileNameChar: Char Data1 +FSharp.Compiler.IO.IllegalFileNameChar: Char get_Data1() +FSharp.Compiler.IO.IllegalFileNameChar: Int32 GetHashCode() +FSharp.Compiler.IO.IllegalFileNameChar: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.IO.IllegalFileNameChar: System.String Data0 +FSharp.Compiler.IO.IllegalFileNameChar: System.String get_Data0() +FSharp.Compiler.IO.IllegalFileNameChar: Void .ctor() +FSharp.Compiler.IO.IllegalFileNameChar: Void .ctor(System.String, Char) +FSharp.Compiler.IO.StreamExtensions +FSharp.Compiler.IO.StreamExtensions: Byte[] Stream.ReadAllBytes(System.IO.Stream) +FSharp.Compiler.IO.StreamExtensions: Byte[] Stream.ReadBytes(System.IO.Stream, Int32, Int32) +FSharp.Compiler.IO.StreamExtensions: FSharp.Compiler.IO.ByteMemory Stream.AsByteMemory(System.IO.Stream) +FSharp.Compiler.IO.StreamExtensions: System.Collections.Generic.IEnumerable`1[System.String] Stream.ReadLines(System.IO.Stream, Microsoft.FSharp.Core.FSharpOption`1[System.Text.Encoding]) +FSharp.Compiler.IO.StreamExtensions: System.IO.StreamReader Stream.GetReader(System.IO.Stream, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +FSharp.Compiler.IO.StreamExtensions: System.IO.TextWriter Stream.GetWriter(System.IO.Stream, Microsoft.FSharp.Core.FSharpOption`1[System.Text.Encoding]) +FSharp.Compiler.IO.StreamExtensions: System.String Stream.ReadAllText(System.IO.Stream, Microsoft.FSharp.Core.FSharpOption`1[System.Text.Encoding]) +FSharp.Compiler.IO.StreamExtensions: System.String[] Stream.ReadAllLines(System.IO.Stream, Microsoft.FSharp.Core.FSharpOption`1[System.Text.Encoding]) +FSharp.Compiler.IO.StreamExtensions: Void Stream.WriteAllLines(System.IO.Stream, System.Collections.Generic.IEnumerable`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Text.Encoding]) +FSharp.Compiler.IO.StreamExtensions: Void Stream.Write[a](System.IO.Stream, a) +FSharp.Compiler.Interactive.Shell FSharp.Compiler.Interactive.Shell+CompilerInputStream: Boolean CanRead FSharp.Compiler.Interactive.Shell+CompilerInputStream: Boolean CanSeek FSharp.Compiler.Interactive.Shell+CompilerInputStream: Boolean CanWrite @@ -19031,12 +4119,12 @@ FSharp.Compiler.Interactive.Shell+CompilerOutputStream: Void Flush() FSharp.Compiler.Interactive.Shell+CompilerOutputStream: Void SetLength(Int64) FSharp.Compiler.Interactive.Shell+CompilerOutputStream: Void Write(Byte[], Int32, Int32) FSharp.Compiler.Interactive.Shell+CompilerOutputStream: Void set_Position(Int64) -FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration ImplementationDeclaration -FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration get_ImplementationDeclaration() -FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.SourceCodeServices.FSharpSymbol Symbol -FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.SourceCodeServices.FSharpSymbol get_Symbol() -FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.SourceCodeServices.FSharpSymbolUse SymbolUse -FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.SourceCodeServices.FSharpSymbolUse get_SymbolUse() +FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.CodeAnalysis.FSharpSymbolUse SymbolUse +FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.CodeAnalysis.FSharpSymbolUse get_SymbolUse() +FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration ImplementationDeclaration +FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration get_ImplementationDeclaration() +FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.Symbols.FSharpSymbol Symbol +FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: FSharp.Compiler.Symbols.FSharpSymbol get_Symbol() FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Interactive.Shell+FsiValue] FsiValue FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Interactive.Shell+FsiValue] get_FsiValue() FSharp.Compiler.Interactive.Shell+EvaluationEventArgs: System.String Name @@ -19045,21 +4133,20 @@ FSharp.Compiler.Interactive.Shell+FsiBoundValue: FsiValue Value FSharp.Compiler.Interactive.Shell+FsiBoundValue: FsiValue get_Value() FSharp.Compiler.Interactive.Shell+FsiBoundValue: System.String Name FSharp.Compiler.Interactive.Shell+FsiBoundValue: System.String get_Name() -FSharp.Compiler.Interactive.Shell+FsiCompilationException: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[]] ErrorInfos -FSharp.Compiler.Interactive.Shell+FsiCompilationException: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[]] get_ErrorInfos() -FSharp.Compiler.Interactive.Shell+FsiCompilationException: Void .ctor(System.String, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[]]) +FSharp.Compiler.Interactive.Shell+FsiCompilationException: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Diagnostics.FSharpDiagnostic[]] ErrorInfos +FSharp.Compiler.Interactive.Shell+FsiCompilationException: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Diagnostics.FSharpDiagnostic[]] get_ErrorInfos() +FSharp.Compiler.Interactive.Shell+FsiCompilationException: Void .ctor(System.String, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Diagnostics.FSharpDiagnostic[]]) FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: Boolean IsGui FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: Boolean get_IsGui() -FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature CurrentPartialAssemblySignature -FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature get_CurrentPartialAssemblySignature() -FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FSharp.Compiler.SourceCodeServices.FSharpChecker InteractiveChecker -FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FSharp.Compiler.SourceCodeServices.FSharpChecker get_InteractiveChecker() -FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FsiEvaluationSession Create(FsiEvaluationSessionHostConfig, System.String[], System.IO.TextReader, System.IO.TextWriter, System.IO.TextWriter, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.ReferenceResolver+Resolver]) +FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FSharp.Compiler.CodeAnalysis.FSharpChecker InteractiveChecker +FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FSharp.Compiler.CodeAnalysis.FSharpChecker get_InteractiveChecker() +FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FSharp.Compiler.Symbols.FSharpAssemblySignature CurrentPartialAssemblySignature +FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FSharp.Compiler.Symbols.FSharpAssemblySignature get_CurrentPartialAssemblySignature() +FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FsiEvaluationSession Create(FsiEvaluationSessionHostConfig, System.String[], System.IO.TextReader, System.IO.TextWriter, System.IO.TextWriter, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.CodeAnalysis.LegacyReferenceResolver]) FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FsiEvaluationSessionHostConfig GetDefaultConfiguration() FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FsiEvaluationSessionHostConfig GetDefaultConfiguration(System.Object) FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: FsiEvaluationSessionHostConfig GetDefaultConfiguration(System.Object, Boolean) FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Interactive.Shell+FsiBoundValue] GetBoundValues() -FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpParseFileResults,FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults,FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults]] ParseAndCheckInteraction(System.String) FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit] PartialAssemblySignatureUpdated FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit] get_PartialAssemblySignatureUpdated() FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`3[System.Object,System.Type,System.String]],System.Tuple`3[System.Object,System.Type,System.String]] ValueBound @@ -19072,9 +4159,10 @@ FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.Collections.Gener FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.Reflection.Assembly DynamicAssembly FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.Reflection.Assembly get_DynamicAssembly() FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.String FormatValue(System.Object, System.Type) -FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.Tuple`2[Microsoft.FSharp.Core.FSharpChoice`2[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Interactive.Shell+FsiValue],System.Exception],FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[]] EvalExpressionNonThrowing(System.String) -FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.Tuple`2[Microsoft.FSharp.Core.FSharpChoice`2[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Interactive.Shell+FsiValue],System.Exception],FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[]] EvalInteractionNonThrowing(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.Tuple`2[Microsoft.FSharp.Core.FSharpChoice`2[Microsoft.FSharp.Core.Unit,System.Exception],FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[]] EvalScriptNonThrowing(System.String) +FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.Tuple`2[Microsoft.FSharp.Core.FSharpChoice`2[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Interactive.Shell+FsiValue],System.Exception],FSharp.Compiler.Diagnostics.FSharpDiagnostic[]] EvalExpressionNonThrowing(System.String) +FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.Tuple`2[Microsoft.FSharp.Core.FSharpChoice`2[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Interactive.Shell+FsiValue],System.Exception],FSharp.Compiler.Diagnostics.FSharpDiagnostic[]] EvalInteractionNonThrowing(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.Tuple`2[Microsoft.FSharp.Core.FSharpChoice`2[Microsoft.FSharp.Core.Unit,System.Exception],FSharp.Compiler.Diagnostics.FSharpDiagnostic[]] EvalScriptNonThrowing(System.String) +FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: System.Tuple`3[FSharp.Compiler.CodeAnalysis.FSharpParseFileResults,FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults,FSharp.Compiler.CodeAnalysis.FSharpCheckProjectResults] ParseAndCheckInteraction(System.String) FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: Void AddBoundValue(System.String, System.Object) FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: Void EvalInteraction(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) FSharp.Compiler.Interactive.Shell+FsiEvaluationSession: Void EvalScript(System.String) @@ -19112,6 +4200,8 @@ FSharp.Compiler.Interactive.Shell+FsiEvaluationSessionHostConfig: Void .ctor() FSharp.Compiler.Interactive.Shell+FsiEvaluationSessionHostConfig: Void EventLoopScheduleRestart() FSharp.Compiler.Interactive.Shell+FsiEvaluationSessionHostConfig: Void ReportUserCommandLineArgs(System.String[]) FSharp.Compiler.Interactive.Shell+FsiEvaluationSessionHostConfig: Void StartServer(System.String) +FSharp.Compiler.Interactive.Shell+FsiValue: FSharp.Compiler.Symbols.FSharpType FSharpType +FSharp.Compiler.Interactive.Shell+FsiValue: FSharp.Compiler.Symbols.FSharpType get_FSharpType() FSharp.Compiler.Interactive.Shell+FsiValue: System.Object ReflectionValue FSharp.Compiler.Interactive.Shell+FsiValue: System.Object get_ReflectionValue() FSharp.Compiler.Interactive.Shell+FsiValue: System.Type ReflectionType @@ -19167,22674 +4257,4653 @@ FSharp.Compiler.Interactive.Shell: FSharp.Compiler.Interactive.Shell+FsiEvaluati FSharp.Compiler.Interactive.Shell: FSharp.Compiler.Interactive.Shell+FsiEvaluationSessionHostConfig FSharp.Compiler.Interactive.Shell: FSharp.Compiler.Interactive.Shell+FsiValue FSharp.Compiler.Interactive.Shell: FSharp.Compiler.Interactive.Shell+Settings -FSharp.Compiler.Layout+LayoutRenderer`2[a,b]: a Finish(b) -FSharp.Compiler.Layout+LayoutRenderer`2[a,b]: b AddBreak(b, Int32) -FSharp.Compiler.Layout+LayoutRenderer`2[a,b]: b AddTag(b, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]], Boolean) -FSharp.Compiler.Layout+LayoutRenderer`2[a,b]: b AddText(b, Internal.Utilities.StructuredFormat.TaggedText) -FSharp.Compiler.Layout+LayoutRenderer`2[a,b]: b Start() -FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout colon -FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout get_colon() -FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout get_keywordTypedefof() -FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout get_keywordTypeof() -FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout get_leftBracketAngle() -FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout get_leftBracketBar() -FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout get_leftParen() -FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout get_questionMark() -FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout keywordTypedefof -FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout keywordTypeof -FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout leftBracketAngle -FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout leftBracketBar -FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout leftParen -FSharp.Compiler.Layout+LeftL: Internal.Utilities.StructuredFormat.Layout questionMark -FSharp.Compiler.Layout+NavigableTaggedText: Void .ctor(Internal.Utilities.StructuredFormat.TaggedText, range) -FSharp.Compiler.Layout+NavigableTaggedText: range Range -FSharp.Compiler.Layout+NavigableTaggedText: range get_Range() -FSharp.Compiler.Layout+NoResult: Boolean Equals(NoResult) -FSharp.Compiler.Layout+NoResult: Boolean Equals(System.Object) -FSharp.Compiler.Layout+NoResult: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Layout+NoResult: Int32 CompareTo(NoResult) -FSharp.Compiler.Layout+NoResult: Int32 CompareTo(System.Object) -FSharp.Compiler.Layout+NoResult: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.Layout+NoResult: Int32 GetHashCode() -FSharp.Compiler.Layout+NoResult: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Layout+NoResult: Int32 Tag -FSharp.Compiler.Layout+NoResult: Int32 get_Tag() -FSharp.Compiler.Layout+NoResult: NoResult NoResult -FSharp.Compiler.Layout+NoResult: NoResult get_NoResult() -FSharp.Compiler.Layout+NoResult: System.String ToString() -FSharp.Compiler.Layout+NoState: Boolean Equals(NoState) -FSharp.Compiler.Layout+NoState: Boolean Equals(System.Object) -FSharp.Compiler.Layout+NoState: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.Layout+NoState: Int32 CompareTo(NoState) -FSharp.Compiler.Layout+NoState: Int32 CompareTo(System.Object) -FSharp.Compiler.Layout+NoState: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.Layout+NoState: Int32 GetHashCode() -FSharp.Compiler.Layout+NoState: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.Layout+NoState: Int32 Tag -FSharp.Compiler.Layout+NoState: Int32 get_Tag() -FSharp.Compiler.Layout+NoState: NoState NoState -FSharp.Compiler.Layout+NoState: NoState get_NoState() -FSharp.Compiler.Layout+NoState: System.String ToString() -FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout colon -FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout comma -FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout get_colon() -FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout get_comma() -FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout get_rightAngle() -FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout get_rightBracket() -FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout get_rightBracketAngle() -FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout get_rightBracketBar() -FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout get_rightParen() -FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout rightAngle -FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout rightBracket -FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout rightBracketAngle -FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout rightBracketBar -FSharp.Compiler.Layout+RightL: Internal.Utilities.StructuredFormat.Layout rightParen -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout colon -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout comma -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout dot -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_colon() -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_comma() -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_dot() -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_leftAngle() -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_leftBracket() -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_leftParen() -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_lineBreak() -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_questionMark() -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_rightParen() -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_space() -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout get_star() -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout leftAngle -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout leftBracket -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout leftParen -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout lineBreak -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout questionMark -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout rightParen -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout space -FSharp.Compiler.Layout+SepL: Internal.Utilities.StructuredFormat.Layout star -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText arrow -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText colon -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText comma -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText dot -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText equals -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_arrow() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_colon() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_comma() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_dot() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_equals() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_keywordFalse() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_keywordTrue() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_leftAngle() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_leftBrace() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_leftBraceBar() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_leftBracket() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_leftParen() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_lineBreak() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_minus() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_questionMark() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_rightAngle() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_rightBrace() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_rightBraceBar() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_rightBracket() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_rightParen() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_semicolon() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_space() -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText keywordFalse -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText keywordTrue -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText leftAngle -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText leftBrace -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText leftBraceBar -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText leftBracket -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText leftParen -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText lineBreak -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText minus -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText questionMark -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText rightAngle -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText rightBrace -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText rightBraceBar -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText rightBracket -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText rightParen -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText semicolon -FSharp.Compiler.Layout+TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText space -FSharp.Compiler.Layout+TaggedTextOps: FSharp.Compiler.Layout+TaggedTextOps+Literals -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagActivePatternCase() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagActivePatternResult() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagAlias() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagClass() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagDelegate() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagEnum() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagEvent() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagField() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagInterface() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagKeyword() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagLineBreak() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagLocal() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagMember() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagMethod() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagModule() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagModuleBinding() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagFunction() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagNamespace() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagNumericLiteral() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagOperator() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagParameter() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagProperty() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagPunctuation() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagRecord() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagRecordField() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagSpace() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagStringLiteral() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagStruct() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagText() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagTypeParameter() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagUnion() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagUnionCase() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagUnknownEntity() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] get_tagUnknownType() -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagActivePatternCase -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagActivePatternResult -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagAlias -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagClass -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagDelegate -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagEnum -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagEvent -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagField -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagInterface -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagKeyword -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagLineBreak -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagLocal -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagMember -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagMethod -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagModule -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagModuleBinding -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagFunction -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagNamespace -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagNumericLiteral -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagOperator -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagParameter -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagProperty -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagPunctuation -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagRecord -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagRecordField -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagSpace -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagStringLiteral -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagStruct -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagText -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagTypeParameter -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagUnion -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagUnionCase -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagUnknownEntity -FSharp.Compiler.Layout+TaggedTextOps: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Internal.Utilities.StructuredFormat.TaggedText] tagUnknownType -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout arrow -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout bar -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout colon -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout equals -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_arrow() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_bar() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_colon() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_equals() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordAbstract() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordDelegate() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordEnd() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordEnum() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordEvent() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordFalse() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordGet() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordInherit() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordInternal() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordMember() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordNested() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordNew() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordOf() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordOverride() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordPrivate() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordSet() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordStatic() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordStruct() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordTrue() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordType() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordVal() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_keywordWith() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_star() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout get_structUnit() -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordAbstract -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordDelegate -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordEnd -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordEnum -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordEvent -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordFalse -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordGet -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordInherit -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordInternal -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordMember -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordNested -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordNew -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordOf -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordOverride -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordPrivate -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordSet -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordStatic -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordStruct -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordTrue -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordType -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordVal -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout keywordWith -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout star -FSharp.Compiler.Layout+WordL: Internal.Utilities.StructuredFormat.Layout structUnit -FSharp.Compiler.Layout: Boolean isEmptyL(Internal.Utilities.StructuredFormat.Layout) -FSharp.Compiler.Layout: FSharp.Compiler.Layout+LayoutRenderer`2[a,b] -FSharp.Compiler.Layout: FSharp.Compiler.Layout+LeftL -FSharp.Compiler.Layout: FSharp.Compiler.Layout+NavigableTaggedText -FSharp.Compiler.Layout: FSharp.Compiler.Layout+NoResult -FSharp.Compiler.Layout: FSharp.Compiler.Layout+NoState -FSharp.Compiler.Layout: FSharp.Compiler.Layout+RightL -FSharp.Compiler.Layout: FSharp.Compiler.Layout+SepL -FSharp.Compiler.Layout: FSharp.Compiler.Layout+TaggedTextOps -FSharp.Compiler.Layout: FSharp.Compiler.Layout+WordL -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout aboveL(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout aboveListL(Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout bracketL(Internal.Utilities.StructuredFormat.Layout) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout commaListL(Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout emptyL -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout get_emptyL() -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout leftL(Internal.Utilities.StructuredFormat.TaggedText) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout listL[a](Microsoft.FSharp.Core.FSharpFunc`2[a,Internal.Utilities.StructuredFormat.Layout], Microsoft.FSharp.Collections.FSharpList`1[a]) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout op_AtAt(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout op_AtAtMinus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout op_AtAtMinusMinus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout op_HatHat(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout op_MinusMinus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout op_MinusMinusMinus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout op_MinusMinusMinusMinus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout op_MinusMinusMinusMinusMinus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout op_PlusPlus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout optionL[a](Microsoft.FSharp.Core.FSharpFunc`2[a,Internal.Utilities.StructuredFormat.Layout], Microsoft.FSharp.Core.FSharpOption`1[a]) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout rightL(Internal.Utilities.StructuredFormat.TaggedText) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout semiListL(Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout sepL(Internal.Utilities.StructuredFormat.TaggedText) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout sepListL(Internal.Utilities.StructuredFormat.Layout, Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout spaceListL(Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout tupleL(Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.Layout wordL(Internal.Utilities.StructuredFormat.TaggedText) -FSharp.Compiler.Layout: Internal.Utilities.StructuredFormat.TaggedText mkNav(range, Internal.Utilities.StructuredFormat.TaggedText) -FSharp.Compiler.Layout: LayoutRenderer`2 bufferR(System.Text.StringBuilder) -FSharp.Compiler.Layout: LayoutRenderer`2 channelR(System.IO.TextWriter) -FSharp.Compiler.Layout: LayoutRenderer`2 get_stringR() -FSharp.Compiler.Layout: LayoutRenderer`2 stringR -FSharp.Compiler.Layout: LayoutRenderer`2 taggedTextListR(Microsoft.FSharp.Core.FSharpFunc`2[Internal.Utilities.StructuredFormat.TaggedText,Microsoft.FSharp.Core.Unit]) -FSharp.Compiler.Layout: System.String showL(Internal.Utilities.StructuredFormat.Layout) -FSharp.Compiler.Layout: Void bufferL(System.Text.StringBuilder, Internal.Utilities.StructuredFormat.Layout) -FSharp.Compiler.Layout: Void outL(System.IO.TextWriter, Internal.Utilities.StructuredFormat.Layout) -FSharp.Compiler.Layout: b renderL[b,a](LayoutRenderer`2, Internal.Utilities.StructuredFormat.Layout) -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean IsComment -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean IsEndLine -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean IsIfDefSkip -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean IsMLOnly -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean IsSingleLineComment -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean IsString -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean IsStringInComment -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean IsToken -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean get_IsComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean get_IsEndLine() -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean get_IsIfDefSkip() -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean get_IsMLOnly() -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean get_IsSingleLineComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean get_IsString() -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean get_IsStringInComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Boolean get_IsToken() -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Int32 Item3 -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Int32 Tag -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Int32 get_Item3() -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Int32 get_Tag() -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] LexerIfdefStack -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_LexerIfdefStack() -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_ifdef() -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] ifdef -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] LexerInterpStringNesting -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_LexerInterpStringNesting() -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_nesting() -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] nesting -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: System.String ToString() -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: range get_range() -FSharp.Compiler.ParseHelpers+LexerContinuation+Comment: range range -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean IsComment -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean IsEndLine -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean IsIfDefSkip -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean IsMLOnly -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean IsSingleLineComment -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean IsString -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean IsStringInComment -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean IsToken -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean get_IsComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean get_IsEndLine() -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean get_IsIfDefSkip() -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean get_IsMLOnly() -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean get_IsSingleLineComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean get_IsString() -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean get_IsStringInComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Boolean get_IsToken() -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Int32 Tag -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Int32 get_Tag() -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: LexerEndlineContinuation Item3 -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: LexerEndlineContinuation get_Item3() -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] LexerIfdefStack -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_LexerIfdefStack() -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_ifdef() -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] ifdef -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] LexerInterpStringNesting -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_LexerInterpStringNesting() -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_nesting() -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] nesting -FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine: System.String ToString() -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean IsComment -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean IsEndLine -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean IsIfDefSkip -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean IsMLOnly -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean IsSingleLineComment -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean IsString -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean IsStringInComment -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean IsToken -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean get_IsComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean get_IsEndLine() -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean get_IsIfDefSkip() -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean get_IsMLOnly() -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean get_IsSingleLineComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean get_IsString() -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean get_IsStringInComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Boolean get_IsToken() -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Int32 Item3 -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Int32 Tag -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Int32 get_Item3() -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Int32 get_Tag() -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] LexerIfdefStack -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_LexerIfdefStack() -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_ifdef() -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] ifdef -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] LexerInterpStringNesting -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_LexerInterpStringNesting() -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_nesting() -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] nesting -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: System.String ToString() -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: range get_range() -FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip: range range -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean IsComment -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean IsEndLine -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean IsIfDefSkip -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean IsMLOnly -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean IsSingleLineComment -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean IsString -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean IsStringInComment -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean IsToken -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean get_IsComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean get_IsEndLine() -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean get_IsIfDefSkip() -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean get_IsMLOnly() -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean get_IsSingleLineComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean get_IsString() -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean get_IsStringInComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Boolean get_IsToken() -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Int32 Tag -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Int32 get_Tag() -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] LexerIfdefStack -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_LexerIfdefStack() -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_ifdef() -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] ifdef -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] LexerInterpStringNesting -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_LexerInterpStringNesting() -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_nesting() -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] nesting -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: System.String ToString() -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: range get_range() -FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly: range range -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean IsComment -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean IsEndLine -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean IsIfDefSkip -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean IsMLOnly -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean IsSingleLineComment -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean IsString -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean IsStringInComment -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean IsToken -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean get_IsComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean get_IsEndLine() -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean get_IsIfDefSkip() -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean get_IsMLOnly() -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean get_IsSingleLineComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean get_IsString() -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean get_IsStringInComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Boolean get_IsToken() -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Int32 Item3 -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Int32 Tag -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Int32 get_Item3() -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Int32 get_Tag() -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] LexerIfdefStack -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_LexerIfdefStack() -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_ifdef() -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] ifdef -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] LexerInterpStringNesting -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_LexerInterpStringNesting() -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_nesting() -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] nesting -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: System.String ToString() -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: range get_range() -FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment: range range -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean IsComment -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean IsEndLine -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean IsIfDefSkip -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean IsMLOnly -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean IsSingleLineComment -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean IsString -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean IsStringInComment -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean IsToken -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean get_IsComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean get_IsEndLine() -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean get_IsIfDefSkip() -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean get_IsMLOnly() -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean get_IsSingleLineComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean get_IsString() -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean get_IsStringInComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Boolean get_IsToken() -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Int32 Tag -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Int32 get_Tag() -FSharp.Compiler.ParseHelpers+LexerContinuation+String: LexerStringKind get_kind() -FSharp.Compiler.ParseHelpers+LexerContinuation+String: LexerStringKind kind -FSharp.Compiler.ParseHelpers+LexerContinuation+String: LexerStringStyle get_style() -FSharp.Compiler.ParseHelpers+LexerContinuation+String: LexerStringStyle style -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] LexerIfdefStack -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_LexerIfdefStack() -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_ifdef() -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] ifdef -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] LexerInterpStringNesting -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_LexerInterpStringNesting() -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_nesting() -FSharp.Compiler.ParseHelpers+LexerContinuation+String: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] nesting -FSharp.Compiler.ParseHelpers+LexerContinuation+String: System.String ToString() -FSharp.Compiler.ParseHelpers+LexerContinuation+String: range get_range() -FSharp.Compiler.ParseHelpers+LexerContinuation+String: range range -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean IsComment -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean IsEndLine -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean IsIfDefSkip -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean IsMLOnly -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean IsSingleLineComment -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean IsString -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean IsStringInComment -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean IsToken -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean get_IsComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean get_IsEndLine() -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean get_IsIfDefSkip() -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean get_IsMLOnly() -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean get_IsSingleLineComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean get_IsString() -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean get_IsStringInComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Boolean get_IsToken() -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Int32 Item4 -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Int32 Tag -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Int32 get_Item4() -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Int32 get_Tag() -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: LexerStringStyle get_style() -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: LexerStringStyle style -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] LexerIfdefStack -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_LexerIfdefStack() -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_ifdef() -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] ifdef -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] LexerInterpStringNesting -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_LexerInterpStringNesting() -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_nesting() -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] nesting -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: System.String ToString() -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: range get_range() -FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment: range range -FSharp.Compiler.ParseHelpers+LexerContinuation+Tags: Int32 Comment -FSharp.Compiler.ParseHelpers+LexerContinuation+Tags: Int32 EndLine -FSharp.Compiler.ParseHelpers+LexerContinuation+Tags: Int32 IfDefSkip -FSharp.Compiler.ParseHelpers+LexerContinuation+Tags: Int32 MLOnly -FSharp.Compiler.ParseHelpers+LexerContinuation+Tags: Int32 SingleLineComment -FSharp.Compiler.ParseHelpers+LexerContinuation+Tags: Int32 String -FSharp.Compiler.ParseHelpers+LexerContinuation+Tags: Int32 StringInComment -FSharp.Compiler.ParseHelpers+LexerContinuation+Tags: Int32 Token -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean IsComment -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean IsEndLine -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean IsIfDefSkip -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean IsMLOnly -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean IsSingleLineComment -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean IsString -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean IsStringInComment -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean IsToken -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean get_IsComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean get_IsEndLine() -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean get_IsIfDefSkip() -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean get_IsMLOnly() -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean get_IsSingleLineComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean get_IsString() -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean get_IsStringInComment() -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Boolean get_IsToken() -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Int32 Tag -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Int32 get_Tag() -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] LexerIfdefStack -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_LexerIfdefStack() -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_ifdef() -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] ifdef -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] LexerInterpStringNesting -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_LexerInterpStringNesting() -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_nesting() -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] nesting -FSharp.Compiler.ParseHelpers+LexerContinuation+Token: System.String ToString() -FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean IsComment -FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean IsEndLine -FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean IsIfDefSkip -FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean IsMLOnly -FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean IsSingleLineComment -FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean IsString -FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean IsStringInComment -FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean IsToken -FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean get_IsComment() -FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean get_IsEndLine() -FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean get_IsIfDefSkip() -FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean get_IsMLOnly() -FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean get_IsSingleLineComment() -FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean get_IsString() -FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean get_IsStringInComment() -FSharp.Compiler.ParseHelpers+LexerContinuation: Boolean get_IsToken() -FSharp.Compiler.ParseHelpers+LexerContinuation: FSharp.Compiler.ParseHelpers+LexerContinuation+Comment -FSharp.Compiler.ParseHelpers+LexerContinuation: FSharp.Compiler.ParseHelpers+LexerContinuation+EndLine -FSharp.Compiler.ParseHelpers+LexerContinuation: FSharp.Compiler.ParseHelpers+LexerContinuation+IfDefSkip -FSharp.Compiler.ParseHelpers+LexerContinuation: FSharp.Compiler.ParseHelpers+LexerContinuation+MLOnly -FSharp.Compiler.ParseHelpers+LexerContinuation: FSharp.Compiler.ParseHelpers+LexerContinuation+SingleLineComment -FSharp.Compiler.ParseHelpers+LexerContinuation: FSharp.Compiler.ParseHelpers+LexerContinuation+String -FSharp.Compiler.ParseHelpers+LexerContinuation: FSharp.Compiler.ParseHelpers+LexerContinuation+StringInComment -FSharp.Compiler.ParseHelpers+LexerContinuation: FSharp.Compiler.ParseHelpers+LexerContinuation+Tags -FSharp.Compiler.ParseHelpers+LexerContinuation: FSharp.Compiler.ParseHelpers+LexerContinuation+Token -FSharp.Compiler.ParseHelpers+LexerContinuation: Int32 Tag -FSharp.Compiler.ParseHelpers+LexerContinuation: Int32 get_Tag() -FSharp.Compiler.ParseHelpers+LexerContinuation: LexerContinuation Default -FSharp.Compiler.ParseHelpers+LexerContinuation: LexerContinuation NewComment(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]], Int32, range) -FSharp.Compiler.ParseHelpers+LexerContinuation: LexerContinuation NewEndLine(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]], LexerEndlineContinuation) -FSharp.Compiler.ParseHelpers+LexerContinuation: LexerContinuation NewIfDefSkip(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]], Int32, range) -FSharp.Compiler.ParseHelpers+LexerContinuation: LexerContinuation NewMLOnly(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]], range) -FSharp.Compiler.ParseHelpers+LexerContinuation: LexerContinuation NewSingleLineComment(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]], Int32, range) -FSharp.Compiler.ParseHelpers+LexerContinuation: LexerContinuation NewString(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]], LexerStringStyle, LexerStringKind, range) -FSharp.Compiler.ParseHelpers+LexerContinuation: LexerContinuation NewStringInComment(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]], LexerStringStyle, Int32, range) -FSharp.Compiler.ParseHelpers+LexerContinuation: LexerContinuation NewToken(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]]) -FSharp.Compiler.ParseHelpers+LexerContinuation: LexerContinuation get_Default() -FSharp.Compiler.ParseHelpers+LexerContinuation: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] LexerIfdefStack -FSharp.Compiler.ParseHelpers+LexerContinuation: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry,FSharp.Compiler.Range+range]] get_LexerIfdefStack() -FSharp.Compiler.ParseHelpers+LexerContinuation: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] LexerInterpStringNesting -FSharp.Compiler.ParseHelpers+LexerContinuation: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Int32,FSharp.Compiler.ParseHelpers+LexerStringStyle,FSharp.Compiler.Range+range]] get_LexerInterpStringNesting() -FSharp.Compiler.ParseHelpers+LexerContinuation: System.String ToString() -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Boolean Equals(LexerEndlineContinuation) -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Boolean Equals(System.Object) -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Boolean IsSkip -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Boolean IsToken -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Boolean get_IsSkip() -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Boolean get_IsToken() -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Int32 GetHashCode() -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Int32 Item1 -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Int32 Tag -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Int32 get_Item1() -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: Int32 get_Tag() -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: System.String ToString() -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: range get_range() -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip: range range -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Tags: Int32 Skip -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Tags: Int32 Token -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Boolean Equals(LexerEndlineContinuation) -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Boolean Equals(System.Object) -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Boolean IsSkip -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Boolean IsToken -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Boolean get_IsSkip() -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Boolean get_IsToken() -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Skip -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: FSharp.Compiler.ParseHelpers+LexerEndlineContinuation+Tags -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Int32 GetHashCode() -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Int32 Tag -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: Int32 get_Tag() -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: LexerEndlineContinuation NewSkip(Int32, range) -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: LexerEndlineContinuation Token -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: LexerEndlineContinuation get_Token() -FSharp.Compiler.ParseHelpers+LexerEndlineContinuation: System.String ToString() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean Equals(LexerIfdefExpression) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean Equals(System.Object) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean IsIfdefAnd -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean IsIfdefId -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean IsIfdefNot -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean IsIfdefOr -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean get_IsIfdefAnd() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean get_IsIfdefId() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean get_IsIfdefNot() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Boolean get_IsIfdefOr() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Int32 CompareTo(LexerIfdefExpression) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Int32 CompareTo(System.Object) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Int32 GetHashCode() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Int32 Tag -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: Int32 get_Tag() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: LexerIfdefExpression Item1 -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: LexerIfdefExpression Item2 -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: LexerIfdefExpression get_Item1() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: LexerIfdefExpression get_Item2() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd: System.String ToString() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean Equals(LexerIfdefExpression) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean Equals(System.Object) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean IsIfdefAnd -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean IsIfdefId -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean IsIfdefNot -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean IsIfdefOr -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean get_IsIfdefAnd() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean get_IsIfdefId() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean get_IsIfdefNot() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Boolean get_IsIfdefOr() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Int32 CompareTo(LexerIfdefExpression) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Int32 CompareTo(System.Object) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Int32 GetHashCode() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Int32 Tag -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: Int32 get_Tag() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: System.String Item -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: System.String ToString() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId: System.String get_Item() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean Equals(LexerIfdefExpression) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean Equals(System.Object) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean IsIfdefAnd -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean IsIfdefId -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean IsIfdefNot -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean IsIfdefOr -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean get_IsIfdefAnd() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean get_IsIfdefId() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean get_IsIfdefNot() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Boolean get_IsIfdefOr() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Int32 CompareTo(LexerIfdefExpression) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Int32 CompareTo(System.Object) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Int32 GetHashCode() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Int32 Tag -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: Int32 get_Tag() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: LexerIfdefExpression Item -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: LexerIfdefExpression get_Item() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot: System.String ToString() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean Equals(LexerIfdefExpression) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean Equals(System.Object) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean IsIfdefAnd -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean IsIfdefId -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean IsIfdefNot -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean IsIfdefOr -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean get_IsIfdefAnd() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean get_IsIfdefId() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean get_IsIfdefNot() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Boolean get_IsIfdefOr() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Int32 CompareTo(LexerIfdefExpression) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Int32 CompareTo(System.Object) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Int32 GetHashCode() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Int32 Tag -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: Int32 get_Tag() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: LexerIfdefExpression Item1 -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: LexerIfdefExpression Item2 -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: LexerIfdefExpression get_Item1() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: LexerIfdefExpression get_Item2() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr: System.String ToString() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+Tags: Int32 IfdefAnd -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+Tags: Int32 IfdefId -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+Tags: Int32 IfdefNot -FSharp.Compiler.ParseHelpers+LexerIfdefExpression+Tags: Int32 IfdefOr -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean Equals(LexerIfdefExpression) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean Equals(System.Object) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean IsIfdefAnd -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean IsIfdefId -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean IsIfdefNot -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean IsIfdefOr -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean get_IsIfdefAnd() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean get_IsIfdefId() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean get_IsIfdefNot() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Boolean get_IsIfdefOr() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefAnd -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefId -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefNot -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: FSharp.Compiler.ParseHelpers+LexerIfdefExpression+IfdefOr -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: FSharp.Compiler.ParseHelpers+LexerIfdefExpression+Tags -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Int32 CompareTo(LexerIfdefExpression) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Int32 CompareTo(System.Object) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Int32 GetHashCode() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Int32 Tag -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: Int32 get_Tag() -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: LexerIfdefExpression NewIfdefAnd(LexerIfdefExpression, LexerIfdefExpression) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: LexerIfdefExpression NewIfdefId(System.String) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: LexerIfdefExpression NewIfdefNot(LexerIfdefExpression) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: LexerIfdefExpression NewIfdefOr(LexerIfdefExpression, LexerIfdefExpression) -FSharp.Compiler.ParseHelpers+LexerIfdefExpression: System.String ToString() -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry+Tags: Int32 IfDefElse -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry+Tags: Int32 IfDefIf -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Boolean Equals(LexerIfdefStackEntry) -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Boolean Equals(System.Object) -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Boolean IsIfDefElse -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Boolean IsIfDefIf -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Boolean get_IsIfDefElse() -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Boolean get_IsIfDefIf() -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry+Tags -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Int32 CompareTo(LexerIfdefStackEntry) -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Int32 CompareTo(System.Object) -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Int32 GetHashCode() -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Int32 Tag -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: Int32 get_Tag() -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: LexerIfdefStackEntry IfDefElse -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: LexerIfdefStackEntry IfDefIf -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: LexerIfdefStackEntry get_IfDefElse() -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: LexerIfdefStackEntry get_IfDefIf() -FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry: System.String ToString() -FSharp.Compiler.ParseHelpers+LexerStringKind: Boolean Equals(LexerStringKind) -FSharp.Compiler.ParseHelpers+LexerStringKind: Boolean Equals(System.Object) -FSharp.Compiler.ParseHelpers+LexerStringKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+LexerStringKind: Boolean IsByteString -FSharp.Compiler.ParseHelpers+LexerStringKind: Boolean IsInterpolated -FSharp.Compiler.ParseHelpers+LexerStringKind: Boolean IsInterpolatedFirst -FSharp.Compiler.ParseHelpers+LexerStringKind: Boolean get_IsByteString() -FSharp.Compiler.ParseHelpers+LexerStringKind: Boolean get_IsInterpolated() -FSharp.Compiler.ParseHelpers+LexerStringKind: Boolean get_IsInterpolatedFirst() -FSharp.Compiler.ParseHelpers+LexerStringKind: Int32 CompareTo(LexerStringKind) -FSharp.Compiler.ParseHelpers+LexerStringKind: Int32 CompareTo(System.Object) -FSharp.Compiler.ParseHelpers+LexerStringKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.ParseHelpers+LexerStringKind: Int32 GetHashCode() -FSharp.Compiler.ParseHelpers+LexerStringKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+LexerStringKind: LexerStringKind ByteString -FSharp.Compiler.ParseHelpers+LexerStringKind: LexerStringKind InterpolatedStringFirst -FSharp.Compiler.ParseHelpers+LexerStringKind: LexerStringKind InterpolatedStringPart -FSharp.Compiler.ParseHelpers+LexerStringKind: LexerStringKind String -FSharp.Compiler.ParseHelpers+LexerStringKind: LexerStringKind get_ByteString() -FSharp.Compiler.ParseHelpers+LexerStringKind: LexerStringKind get_InterpolatedStringFirst() -FSharp.Compiler.ParseHelpers+LexerStringKind: LexerStringKind get_InterpolatedStringPart() -FSharp.Compiler.ParseHelpers+LexerStringKind: LexerStringKind get_String() -FSharp.Compiler.ParseHelpers+LexerStringKind: System.String ToString() -FSharp.Compiler.ParseHelpers+LexerStringKind: Void .ctor(Boolean, Boolean, Boolean) -FSharp.Compiler.ParseHelpers+LexerStringStyle+Tags: Int32 SingleQuote -FSharp.Compiler.ParseHelpers+LexerStringStyle+Tags: Int32 TripleQuote -FSharp.Compiler.ParseHelpers+LexerStringStyle+Tags: Int32 Verbatim -FSharp.Compiler.ParseHelpers+LexerStringStyle: Boolean Equals(LexerStringStyle) -FSharp.Compiler.ParseHelpers+LexerStringStyle: Boolean Equals(System.Object) -FSharp.Compiler.ParseHelpers+LexerStringStyle: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+LexerStringStyle: Boolean IsSingleQuote -FSharp.Compiler.ParseHelpers+LexerStringStyle: Boolean IsTripleQuote -FSharp.Compiler.ParseHelpers+LexerStringStyle: Boolean IsVerbatim -FSharp.Compiler.ParseHelpers+LexerStringStyle: Boolean get_IsSingleQuote() -FSharp.Compiler.ParseHelpers+LexerStringStyle: Boolean get_IsTripleQuote() -FSharp.Compiler.ParseHelpers+LexerStringStyle: Boolean get_IsVerbatim() -FSharp.Compiler.ParseHelpers+LexerStringStyle: FSharp.Compiler.ParseHelpers+LexerStringStyle+Tags -FSharp.Compiler.ParseHelpers+LexerStringStyle: Int32 CompareTo(LexerStringStyle) -FSharp.Compiler.ParseHelpers+LexerStringStyle: Int32 CompareTo(System.Object) -FSharp.Compiler.ParseHelpers+LexerStringStyle: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.ParseHelpers+LexerStringStyle: Int32 GetHashCode() -FSharp.Compiler.ParseHelpers+LexerStringStyle: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+LexerStringStyle: Int32 Tag -FSharp.Compiler.ParseHelpers+LexerStringStyle: Int32 get_Tag() -FSharp.Compiler.ParseHelpers+LexerStringStyle: LexerStringStyle SingleQuote -FSharp.Compiler.ParseHelpers+LexerStringStyle: LexerStringStyle TripleQuote -FSharp.Compiler.ParseHelpers+LexerStringStyle: LexerStringStyle Verbatim -FSharp.Compiler.ParseHelpers+LexerStringStyle: LexerStringStyle get_SingleQuote() -FSharp.Compiler.ParseHelpers+LexerStringStyle: LexerStringStyle get_TripleQuote() -FSharp.Compiler.ParseHelpers+LexerStringStyle: LexerStringStyle get_Verbatim() -FSharp.Compiler.ParseHelpers+LexerStringStyle: System.String ToString() -FSharp.Compiler.ParseHelpers+SyntaxError: System.Object Data0 -FSharp.Compiler.ParseHelpers+SyntaxError: System.Object get_Data0() -FSharp.Compiler.ParseHelpers+SyntaxError: Void .ctor() -FSharp.Compiler.ParseHelpers+SyntaxError: Void .ctor(System.Object, range) -FSharp.Compiler.ParseHelpers+SyntaxError: range get_range() -FSharp.Compiler.ParseHelpers+SyntaxError: range range -FSharp.Compiler.ParseHelpers: Boolean LexerIfdefEval(Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.Boolean], LexerIfdefExpression) -FSharp.Compiler.ParseHelpers: FSharp.Compiler.ParseHelpers+LexbufLocalXmlDocStore -FSharp.Compiler.ParseHelpers: FSharp.Compiler.ParseHelpers+LexerContinuation -FSharp.Compiler.ParseHelpers: FSharp.Compiler.ParseHelpers+LexerEndlineContinuation -FSharp.Compiler.ParseHelpers: FSharp.Compiler.ParseHelpers+LexerIfdefExpression -FSharp.Compiler.ParseHelpers: FSharp.Compiler.ParseHelpers+LexerIfdefStackEntry -FSharp.Compiler.ParseHelpers: FSharp.Compiler.ParseHelpers+LexerStringKind -FSharp.Compiler.ParseHelpers: FSharp.Compiler.ParseHelpers+LexerStringStyle -FSharp.Compiler.ParseHelpers: FSharp.Compiler.ParseHelpers+SyntaxError -FSharp.Compiler.ParseHelpers: ILType ParseAssemblyCodeType(System.String, range) -FSharp.Compiler.ParseHelpers+IndentationProblem: Boolean Equals(System.Object) -FSharp.Compiler.ParseHelpers+IndentationProblem: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+IndentationProblem: Int32 GetHashCode() -FSharp.Compiler.ParseHelpers+IndentationProblem: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ParseHelpers+IndentationProblem: System.String Data0 -FSharp.Compiler.ParseHelpers+IndentationProblem: System.String get_Data0() -FSharp.Compiler.ParseHelpers+IndentationProblem: Void .ctor() -FSharp.Compiler.ParseHelpers+IndentationProblem: Void .ctor(System.String, range) -FSharp.Compiler.ParseHelpers+IndentationProblem: range Data1 -FSharp.Compiler.ParseHelpers+IndentationProblem: range get_Data1() -FSharp.Compiler.ParseHelpers: FSharp.Compiler.ParseHelpers+IndentationProblem -FSharp.Compiler.ParseHelpers: System.String warningStringOfCoords(Int32, Int32) -FSharp.Compiler.ParseHelpers: System.String warningStringOfPos(pos) -FSharp.Compiler.PartialLongName: Boolean Equals(FSharp.Compiler.PartialLongName) -FSharp.Compiler.PartialLongName: Boolean Equals(System.Object) -FSharp.Compiler.PartialLongName: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.PartialLongName: FSharp.Compiler.PartialLongName Empty(Int32) -FSharp.Compiler.PartialLongName: Int32 CompareTo(FSharp.Compiler.PartialLongName) -FSharp.Compiler.PartialLongName: Int32 CompareTo(System.Object) -FSharp.Compiler.PartialLongName: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.PartialLongName: Int32 EndColumn -FSharp.Compiler.PartialLongName: Int32 GetHashCode() -FSharp.Compiler.PartialLongName: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.PartialLongName: Int32 get_EndColumn() -FSharp.Compiler.PartialLongName: Microsoft.FSharp.Collections.FSharpList`1[System.String] QualifyingIdents -FSharp.Compiler.PartialLongName: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_QualifyingIdents() -FSharp.Compiler.PartialLongName: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] LastDotPos -FSharp.Compiler.PartialLongName: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] get_LastDotPos() -FSharp.Compiler.PartialLongName: System.String PartialIdent -FSharp.Compiler.PartialLongName: System.String ToString() -FSharp.Compiler.PartialLongName: System.String get_PartialIdent() -FSharp.Compiler.PartialLongName: Void .ctor(Microsoft.FSharp.Collections.FSharpList`1[System.String], System.String, Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -FSharp.Compiler.PrettyNaming+ActivePatternInfo: ActivePatternInfo NewAPInfo(Boolean, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.Range+range]], range) -FSharp.Compiler.PrettyNaming+ActivePatternInfo: Boolean Equals(ActivePatternInfo) -FSharp.Compiler.PrettyNaming+ActivePatternInfo: Boolean Equals(System.Object) -FSharp.Compiler.PrettyNaming+ActivePatternInfo: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.PrettyNaming+ActivePatternInfo: Boolean IsTotal -FSharp.Compiler.PrettyNaming+ActivePatternInfo: Boolean Item1 -FSharp.Compiler.PrettyNaming+ActivePatternInfo: Boolean get_IsTotal() -FSharp.Compiler.PrettyNaming+ActivePatternInfo: Boolean get_Item1() -FSharp.Compiler.PrettyNaming+ActivePatternInfo: Int32 GetHashCode() -FSharp.Compiler.PrettyNaming+ActivePatternInfo: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.PrettyNaming+ActivePatternInfo: Int32 Tag -FSharp.Compiler.PrettyNaming+ActivePatternInfo: Int32 get_Tag() -FSharp.Compiler.PrettyNaming+ActivePatternInfo: Microsoft.FSharp.Collections.FSharpList`1[System.String] ActiveTags -FSharp.Compiler.PrettyNaming+ActivePatternInfo: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_ActiveTags() -FSharp.Compiler.PrettyNaming+ActivePatternInfo: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.Range+range]] ActiveTagsWithRanges -FSharp.Compiler.PrettyNaming+ActivePatternInfo: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.Range+range]] Item2 -FSharp.Compiler.PrettyNaming+ActivePatternInfo: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.Range+range]] get_ActiveTagsWithRanges() -FSharp.Compiler.PrettyNaming+ActivePatternInfo: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,FSharp.Compiler.Range+range]] get_Item2() -FSharp.Compiler.PrettyNaming+ActivePatternInfo: System.String ToString() -FSharp.Compiler.PrettyNaming+ActivePatternInfo: range Item3 -FSharp.Compiler.PrettyNaming+ActivePatternInfo: range Range -FSharp.Compiler.PrettyNaming+ActivePatternInfo: range get_Item3() -FSharp.Compiler.PrettyNaming+ActivePatternInfo: range get_Range() -FSharp.Compiler.PrettyNaming+CustomOperations: System.String Into -FSharp.Compiler.PrettyNaming+FSharpLib: Microsoft.FSharp.Collections.FSharpList`1[System.String] CorePath -FSharp.Compiler.PrettyNaming+FSharpLib: Microsoft.FSharp.Collections.FSharpList`1[System.String] RootPath -FSharp.Compiler.PrettyNaming+FSharpLib: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_CorePath() -FSharp.Compiler.PrettyNaming+FSharpLib: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_RootPath() -FSharp.Compiler.PrettyNaming+FSharpLib: System.String Core -FSharp.Compiler.PrettyNaming+FSharpLib: System.String Root -FSharp.Compiler.PrettyNaming+FSharpLib: System.String get_Core() -FSharp.Compiler.PrettyNaming+FSharpLib: System.String get_Root() -FSharp.Compiler.PrettyNaming+InvalidMangledStaticArg: Boolean Equals(System.Object) -FSharp.Compiler.PrettyNaming+InvalidMangledStaticArg: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.PrettyNaming+InvalidMangledStaticArg: Int32 GetHashCode() -FSharp.Compiler.PrettyNaming+InvalidMangledStaticArg: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.PrettyNaming+InvalidMangledStaticArg: System.String Data0 -FSharp.Compiler.PrettyNaming+InvalidMangledStaticArg: System.String get_Data0() -FSharp.Compiler.PrettyNaming+InvalidMangledStaticArg: Void .ctor() -FSharp.Compiler.PrettyNaming+InvalidMangledStaticArg: Void .ctor(System.String) -FSharp.Compiler.PrettyNaming+NameArityPair: Boolean Equals(NameArityPair) -FSharp.Compiler.PrettyNaming+NameArityPair: Boolean Equals(System.Object) -FSharp.Compiler.PrettyNaming+NameArityPair: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.PrettyNaming+NameArityPair: Int32 CompareTo(NameArityPair) -FSharp.Compiler.PrettyNaming+NameArityPair: Int32 CompareTo(System.Object) -FSharp.Compiler.PrettyNaming+NameArityPair: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.PrettyNaming+NameArityPair: Int32 GetHashCode() -FSharp.Compiler.PrettyNaming+NameArityPair: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.PrettyNaming+NameArityPair: Int32 Item2 -FSharp.Compiler.PrettyNaming+NameArityPair: Int32 Tag -FSharp.Compiler.PrettyNaming+NameArityPair: Int32 get_Item2() -FSharp.Compiler.PrettyNaming+NameArityPair: Int32 get_Tag() -FSharp.Compiler.PrettyNaming+NameArityPair: NameArityPair NewNameArityPair(System.String, Int32) -FSharp.Compiler.PrettyNaming+NameArityPair: System.String Item1 -FSharp.Compiler.PrettyNaming+NameArityPair: System.String ToString() -FSharp.Compiler.PrettyNaming+NameArityPair: System.String get_Item1() -FSharp.Compiler.PrettyNaming: Boolean IsActivePatternName(System.String) -FSharp.Compiler.PrettyNaming: Boolean IsCompilerGeneratedName(System.String) -FSharp.Compiler.PrettyNaming: Boolean IsIdentifierFirstCharacter(Char) -FSharp.Compiler.PrettyNaming: Boolean IsIdentifierPartCharacter(Char) -FSharp.Compiler.PrettyNaming: Boolean IsLongIdentifierPartCharacter(Char) -FSharp.Compiler.PrettyNaming: Boolean IsMangledOpName(System.String) -FSharp.Compiler.PrettyNaming: Boolean IsOperatorName(System.String) -FSharp.Compiler.PrettyNaming: Boolean IsOperatorOrBacktickedName(System.String) -FSharp.Compiler.PrettyNaming: Boolean IsPrefixOperator(System.String) -FSharp.Compiler.PrettyNaming: Boolean IsPunctuation(System.String) -FSharp.Compiler.PrettyNaming: Boolean IsTernaryOperator(System.String) -FSharp.Compiler.PrettyNaming: Boolean IsValidPrefixOperatorDefinitionName(System.String) -FSharp.Compiler.PrettyNaming: Boolean IsValidPrefixOperatorUse(System.String) -FSharp.Compiler.PrettyNaming: Boolean isTildeOnlyString(System.String) -FSharp.Compiler.PrettyNaming: Char[] IllegalCharactersInTypeAndNamespaceNames -FSharp.Compiler.PrettyNaming: Char[] get_IllegalCharactersInTypeAndNamespaceNames() -FSharp.Compiler.PrettyNaming: FSharp.Compiler.PrettyNaming+ActivePatternInfo -FSharp.Compiler.PrettyNaming: FSharp.Compiler.PrettyNaming+CustomOperations -FSharp.Compiler.PrettyNaming: FSharp.Compiler.PrettyNaming+FSharpLib -FSharp.Compiler.PrettyNaming: FSharp.Compiler.PrettyNaming+InvalidMangledStaticArg -FSharp.Compiler.PrettyNaming: FSharp.Compiler.PrettyNaming+NameArityPair -FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Collections.FSharpList`1[System.String] SplitNamesForILPath(System.String) -FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpChoice`6[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit] |Control|Equality|Relational|Indexer|FixedTypes|Other|(System.String) -FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String]] get_mkUnionCaseFieldName() -FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String]] mkUnionCaseFieldName -FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String] get_mkExceptionFieldName() -FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String] mkExceptionFieldName -FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.Boolean] IsInfixOperator -FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.Boolean] get_IsInfixOperator() -FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.String] CompileOpName -FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.String] DecompileOpName -FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.String] get_CompileOpName() -FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.String] get_DecompileOpName() -FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.PrettyNaming+ActivePatternInfo] ActivePatternInfoOfValName(System.String, range) -FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpOption`1[System.String] TryChopPropertyName(System.String) -FSharp.Compiler.PrettyNaming: Microsoft.FSharp.Core.FSharpValueOption`1[System.Int32] TryDemangleGenericNameAndPos(System.String) -FSharp.Compiler.PrettyNaming: NameArityPair DecodeGenericTypeName(System.String) -FSharp.Compiler.PrettyNaming: NameArityPair DecodeGenericTypeNameWithPos(Int32, System.String) -FSharp.Compiler.PrettyNaming: System.String ChopPropertyName(System.String) -FSharp.Compiler.PrettyNaming: System.String CompilerGeneratedName(System.String) -FSharp.Compiler.PrettyNaming: System.String CompilerGeneratedNameSuffix(System.String, System.String) -FSharp.Compiler.PrettyNaming: System.String DemangleGenericTypeName(System.String) -FSharp.Compiler.PrettyNaming: System.String DemangleGenericTypeNameWithPos(Int32, System.String) -FSharp.Compiler.PrettyNaming: System.String DemangleOperatorName(System.String) -FSharp.Compiler.PrettyNaming: System.String ExtraWitnessMethodName(System.String) -FSharp.Compiler.PrettyNaming: System.String FSharpModuleSuffix -FSharp.Compiler.PrettyNaming: System.String FSharpOptimizationDataResourceName -FSharp.Compiler.PrettyNaming: System.String FSharpOptimizationDataResourceName2 -FSharp.Compiler.PrettyNaming: System.String FSharpSignatureDataResourceName -FSharp.Compiler.PrettyNaming: System.String FSharpSignatureDataResourceName2 -FSharp.Compiler.PrettyNaming: System.String FsiDynamicModulePrefix -FSharp.Compiler.PrettyNaming: System.String GetBasicNameOfPossibleCompilerGeneratedName(System.String) -FSharp.Compiler.PrettyNaming: System.String MangledGlobalName -FSharp.Compiler.PrettyNaming: System.String computeMangledNameWithoutDefaultArgValues[a](System.String, a[], System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.String]][]) -FSharp.Compiler.PrettyNaming: System.String get_FSharpOptimizationDataResourceName() -FSharp.Compiler.PrettyNaming: System.String get_FSharpOptimizationDataResourceName2() -FSharp.Compiler.PrettyNaming: System.String get_FSharpSignatureDataResourceName() -FSharp.Compiler.PrettyNaming: System.String get_FSharpSignatureDataResourceName2() -FSharp.Compiler.PrettyNaming: System.String get_FsiDynamicModulePrefix() -FSharp.Compiler.PrettyNaming: System.String get_opNameCons() -FSharp.Compiler.PrettyNaming: System.String get_opNameEquals() -FSharp.Compiler.PrettyNaming: System.String get_opNameEqualsNullable() -FSharp.Compiler.PrettyNaming: System.String get_opNameNil() -FSharp.Compiler.PrettyNaming: System.String get_opNameNullableEquals() -FSharp.Compiler.PrettyNaming: System.String get_opNameNullableEqualsNullable() -FSharp.Compiler.PrettyNaming: System.String get_outArgCompilerGeneratedName() -FSharp.Compiler.PrettyNaming: System.String get_unassignedTyparName() -FSharp.Compiler.PrettyNaming: System.String mangleProvidedTypeName(System.String, System.Tuple`2[System.String,System.String][]) -FSharp.Compiler.PrettyNaming: System.String opNameCons -FSharp.Compiler.PrettyNaming: System.String opNameEquals -FSharp.Compiler.PrettyNaming: System.String opNameEqualsNullable -FSharp.Compiler.PrettyNaming: System.String opNameNil -FSharp.Compiler.PrettyNaming: System.String opNameNullableEquals -FSharp.Compiler.PrettyNaming: System.String opNameNullableEqualsNullable -FSharp.Compiler.PrettyNaming: System.String opNamePrefix -FSharp.Compiler.PrettyNaming: System.String outArgCompilerGeneratedName -FSharp.Compiler.PrettyNaming: System.String parenGet -FSharp.Compiler.PrettyNaming: System.String parenSet -FSharp.Compiler.PrettyNaming: System.String qmark -FSharp.Compiler.PrettyNaming: System.String qmarkSet -FSharp.Compiler.PrettyNaming: System.String unassignedTyparName -FSharp.Compiler.PrettyNaming: System.Tuple`2[System.String,System.Tuple`2[System.String,System.String][]] demangleProvidedTypeName(System.String) -FSharp.Compiler.QuickParse: Boolean TestMemberOrOverrideDeclaration(FSharp.Compiler.SourceCodeServices.FSharpTokenInfo[]) -FSharp.Compiler.QuickParse: FSharp.Compiler.PartialLongName GetPartialLongNameEx(System.String, Int32) -FSharp.Compiler.QuickParse: Int32 CorrectIdentifierToken(System.String, Int32) -FSharp.Compiler.QuickParse: Int32 MagicalAdjustmentConstant -FSharp.Compiler.QuickParse: Int32 get_MagicalAdjustmentConstant() -FSharp.Compiler.QuickParse: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.String,System.Int32,System.Boolean]] GetCompleteIdentifierIsland(Boolean, System.String, Int32) -FSharp.Compiler.QuickParse: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],System.String] GetPartialLongName(System.String, Int32) -FSharp.Compiler.Range+Line: Int32 fromZ(Int32) -FSharp.Compiler.Range+Line: Int32 toZ(Int32) -FSharp.Compiler.Range+Pos: System.Tuple`2[System.Int32,System.Int32] toZ(pos) -FSharp.Compiler.Range+Pos: pos fromZ(Int32, Int32) -FSharp.Compiler.Range+Range: System.Collections.Generic.IEqualityComparer`1[FSharp.Compiler.Range+range] comparer -FSharp.Compiler.Range+Range: System.Collections.Generic.IEqualityComparer`1[FSharp.Compiler.Range+range] get_comparer() -FSharp.Compiler.Range+Range: System.Tuple`2[System.String,System.Tuple`2[System.Tuple`2[System.Int32,System.Int32],System.Tuple`2[System.Int32,System.Int32]]] toFileZ(range) -FSharp.Compiler.Range+Range: System.Tuple`2[System.Tuple`2[System.Int32,System.Int32],System.Tuple`2[System.Int32,System.Int32]] toZ(range) -FSharp.Compiler.Range+pos: Boolean Equals(System.Object) -FSharp.Compiler.Range+pos: Int32 Column -FSharp.Compiler.Range+pos: Int32 EncodingSize -FSharp.Compiler.Range+pos: Int32 GetHashCode() -FSharp.Compiler.Range+pos: Int32 Line -FSharp.Compiler.Range+pos: Int32 get_Column() -FSharp.Compiler.Range+pos: Int32 get_EncodingSize() -FSharp.Compiler.Range+pos: Int32 get_Line() -FSharp.Compiler.Range+pos: Int64 Encoding -FSharp.Compiler.Range+pos: Int64 get_Encoding() -FSharp.Compiler.Range+pos: System.String ToString() -FSharp.Compiler.Range+pos: pos Decode(Int64) -FSharp.Compiler.Range+range: Boolean Equals(System.Object) -FSharp.Compiler.Range+range: Boolean IsSynthetic -FSharp.Compiler.Range+range: Boolean get_IsSynthetic() -FSharp.Compiler.Range+range: Int32 EndColumn -FSharp.Compiler.Range+range: Int32 EndLine -FSharp.Compiler.Range+range: Int32 FileIndex -FSharp.Compiler.Range+range: Int32 GetHashCode() -FSharp.Compiler.Range+range: Int32 StartColumn -FSharp.Compiler.Range+range: Int32 StartLine -FSharp.Compiler.Range+range: Int32 get_EndColumn() -FSharp.Compiler.Range+range: Int32 get_EndLine() -FSharp.Compiler.Range+range: Int32 get_FileIndex() -FSharp.Compiler.Range+range: Int32 get_StartColumn() -FSharp.Compiler.Range+range: Int32 get_StartLine() -FSharp.Compiler.Range+range: System.String FileName -FSharp.Compiler.Range+range: System.String ToShortString() -FSharp.Compiler.Range+range: System.String ToString() -FSharp.Compiler.Range+range: System.String get_FileName() -FSharp.Compiler.Range+range: pos End -FSharp.Compiler.Range+range: pos Start -FSharp.Compiler.Range+range: pos get_End() -FSharp.Compiler.Range+range: pos get_Start() -FSharp.Compiler.Range+range: range EndRange -FSharp.Compiler.Range+range: range MakeSynthetic() -FSharp.Compiler.Range+range: range StartRange -FSharp.Compiler.Range+range: range Zero -FSharp.Compiler.Range+range: range get_EndRange() -FSharp.Compiler.Range+range: range get_StartRange() -FSharp.Compiler.Range+range: range get_Zero() -FSharp.Compiler.Range: Boolean equals(range, range) -FSharp.Compiler.Range: Boolean posEq(pos, pos) -FSharp.Compiler.Range: Boolean posGeq(pos, pos) -FSharp.Compiler.Range: Boolean posGt(pos, pos) -FSharp.Compiler.Range: Boolean posLt(pos, pos) -FSharp.Compiler.Range: Boolean rangeBeforePos(range, pos) -FSharp.Compiler.Range: Boolean rangeContainsPos(range, pos) -FSharp.Compiler.Range: Boolean rangeContainsRange(range, range) -FSharp.Compiler.Range: FSharp.Compiler.Range+Line -FSharp.Compiler.Range: FSharp.Compiler.Range+Pos -FSharp.Compiler.Range: FSharp.Compiler.Range+Range -FSharp.Compiler.Range: FSharp.Compiler.Range+pos -FSharp.Compiler.Range: FSharp.Compiler.Range+range -FSharp.Compiler.Range: Int32 fileIndexOfFile(System.String) -FSharp.Compiler.Range: System.Collections.Generic.IComparer`1[FSharp.Compiler.Range+pos] get_posOrder() -FSharp.Compiler.Range: System.Collections.Generic.IComparer`1[FSharp.Compiler.Range+pos] posOrder -FSharp.Compiler.Range: System.Collections.Generic.IComparer`1[FSharp.Compiler.Range+range] get_rangeOrder() -FSharp.Compiler.Range: System.Collections.Generic.IComparer`1[FSharp.Compiler.Range+range] rangeOrder -FSharp.Compiler.Range: System.String commandLineArgsFileName -FSharp.Compiler.Range: System.String fileOfFileIndex(Int32) -FSharp.Compiler.Range: System.String get_commandLineArgsFileName() -FSharp.Compiler.Range: System.String get_startupFileName() -FSharp.Compiler.Range: System.String get_unknownFileName() -FSharp.Compiler.Range: System.String startupFileName -FSharp.Compiler.Range: System.String stringOfPos(pos) -FSharp.Compiler.Range: System.String stringOfRange(range) -FSharp.Compiler.Range: System.String unknownFileName -FSharp.Compiler.Range: Void outputPos(System.IO.TextWriter, pos) -FSharp.Compiler.Range: Void outputRange(System.IO.TextWriter, range) -FSharp.Compiler.Range: pos get_pos0() -FSharp.Compiler.Range: pos mkPos(Int32, Int32) -FSharp.Compiler.Range: pos pos0 -FSharp.Compiler.Range: range get_range0() -FSharp.Compiler.Range: range get_rangeCmdArgs() -FSharp.Compiler.Range: range get_rangeStartup() -FSharp.Compiler.Range: range mkFileIndexRange(Int32, pos, pos) -FSharp.Compiler.Range: range mkRange(System.String, pos, pos) -FSharp.Compiler.Range: range range0 -FSharp.Compiler.Range: range rangeCmdArgs -FSharp.Compiler.Range: range rangeN(System.String, Int32) -FSharp.Compiler.Range: range rangeStartup -FSharp.Compiler.Range: range trimRangeToLine(range) -FSharp.Compiler.Range: range unionRanges(range, range) -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Boolean Equals(ResolutionEnvironment) -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Boolean Equals(System.Object) -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Boolean IsCompilationAndEvaluation -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Boolean IsEditingOrCompilation -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Boolean get_IsCompilationAndEvaluation() -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Boolean get_IsEditingOrCompilation() -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Boolean get_isEditing() -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Boolean isEditing -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Int32 CompareTo(ResolutionEnvironment) -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Int32 CompareTo(System.Object) -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Int32 GetHashCode() -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Int32 Tag -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: Int32 get_Tag() -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation: System.String ToString() -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+Tags: Int32 CompilationAndEvaluation -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+Tags: Int32 EditingOrCompilation -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Boolean Equals(ResolutionEnvironment) -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Boolean Equals(System.Object) -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Boolean IsCompilationAndEvaluation -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Boolean IsEditingOrCompilation -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Boolean get_IsCompilationAndEvaluation() -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Boolean get_IsEditingOrCompilation() -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+EditingOrCompilation -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: FSharp.Compiler.ReferenceResolver+ResolutionEnvironment+Tags -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Int32 CompareTo(ResolutionEnvironment) -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Int32 CompareTo(System.Object) -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Int32 GetHashCode() -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Int32 Tag -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: Int32 get_Tag() -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: ResolutionEnvironment CompilationAndEvaluation -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: ResolutionEnvironment NewEditingOrCompilation(Boolean) -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: ResolutionEnvironment get_CompilationAndEvaluation() -FSharp.Compiler.ReferenceResolver+ResolutionEnvironment: System.String ToString() -FSharp.Compiler.ReferenceResolver+ResolvedFile: Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.String,System.String],System.String] get_prepareToolTip() -FSharp.Compiler.ReferenceResolver+ResolvedFile: Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.String,System.String],System.String] prepareToolTip -FSharp.Compiler.ReferenceResolver+ResolvedFile: System.String ToString() -FSharp.Compiler.ReferenceResolver+ResolvedFile: System.String baggage -FSharp.Compiler.ReferenceResolver+ResolvedFile: System.String get_baggage() -FSharp.Compiler.ReferenceResolver+ResolvedFile: System.String get_itemSpec() -FSharp.Compiler.ReferenceResolver+ResolvedFile: System.String itemSpec -FSharp.Compiler.ReferenceResolver+ResolvedFile: Void .ctor(System.String, Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.String,System.String],System.String], System.String) -FSharp.Compiler.ReferenceResolver+Resolver: ResolvedFile[] Resolve(ResolutionEnvironment, System.Tuple`2[System.String,System.String][], System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], System.String, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], System.String, Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.Boolean,Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit]]]) -FSharp.Compiler.ReferenceResolver+Resolver: System.String DotNetFrameworkReferenceAssembliesRootDirectory -FSharp.Compiler.ReferenceResolver+Resolver: System.String HighestInstalledNetFrameworkVersion() -FSharp.Compiler.ReferenceResolver+Resolver: System.String get_DotNetFrameworkReferenceAssembliesRootDirectory() -FSharp.Compiler.ReferenceResolver: FSharp.Compiler.ReferenceResolver+ResolutionEnvironment -FSharp.Compiler.ReferenceResolver: FSharp.Compiler.ReferenceResolver+ResolvedFile -FSharp.Compiler.ReferenceResolver: FSharp.Compiler.ReferenceResolver+Resolver -FSharp.Compiler.SourceCodeServices.AssemblyContentProvider: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.AssemblySymbol] getAssemblyContent(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SourceCodeServices.IAssemblyContentCache,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.AssemblySymbol]],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.AssemblySymbol]], FSharp.Compiler.SourceCodeServices.AssemblyContentType, Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpAssembly]) -FSharp.Compiler.SourceCodeServices.AssemblyContentProvider: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.AssemblySymbol] getAssemblySignatureContent(FSharp.Compiler.SourceCodeServices.AssemblyContentType, FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature) -FSharp.Compiler.SourceCodeServices.AssemblyContentType+Tags: Int32 Full -FSharp.Compiler.SourceCodeServices.AssemblyContentType+Tags: Int32 Public -FSharp.Compiler.SourceCodeServices.AssemblyContentType: Boolean Equals(FSharp.Compiler.SourceCodeServices.AssemblyContentType) -FSharp.Compiler.SourceCodeServices.AssemblyContentType: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.AssemblyContentType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.AssemblyContentType: Boolean IsFull -FSharp.Compiler.SourceCodeServices.AssemblyContentType: Boolean IsPublic -FSharp.Compiler.SourceCodeServices.AssemblyContentType: Boolean get_IsFull() -FSharp.Compiler.SourceCodeServices.AssemblyContentType: Boolean get_IsPublic() -FSharp.Compiler.SourceCodeServices.AssemblyContentType: FSharp.Compiler.SourceCodeServices.AssemblyContentType Full -FSharp.Compiler.SourceCodeServices.AssemblyContentType: FSharp.Compiler.SourceCodeServices.AssemblyContentType Public -FSharp.Compiler.SourceCodeServices.AssemblyContentType: FSharp.Compiler.SourceCodeServices.AssemblyContentType get_Full() -FSharp.Compiler.SourceCodeServices.AssemblyContentType: FSharp.Compiler.SourceCodeServices.AssemblyContentType get_Public() -FSharp.Compiler.SourceCodeServices.AssemblyContentType: FSharp.Compiler.SourceCodeServices.AssemblyContentType+Tags -FSharp.Compiler.SourceCodeServices.AssemblyContentType: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.AssemblyContentType) -FSharp.Compiler.SourceCodeServices.AssemblyContentType: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.AssemblyContentType: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.AssemblyContentType: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.AssemblyContentType: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.AssemblyContentType: Int32 Tag -FSharp.Compiler.SourceCodeServices.AssemblyContentType: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.AssemblyContentType: System.String ToString() -FSharp.Compiler.SourceCodeServices.AssemblySymbol: FSharp.Compiler.SourceCodeServices.FSharpSymbol Symbol -FSharp.Compiler.SourceCodeServices.AssemblySymbol: FSharp.Compiler.SourceCodeServices.FSharpSymbol get_Symbol() -FSharp.Compiler.SourceCodeServices.AssemblySymbol: FSharp.Compiler.SourceCodeServices.UnresolvedSymbol UnresolvedSymbol -FSharp.Compiler.SourceCodeServices.AssemblySymbol: FSharp.Compiler.SourceCodeServices.UnresolvedSymbol get_UnresolvedSymbol() -FSharp.Compiler.SourceCodeServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SourceCodeServices.LookupType,FSharp.Compiler.SourceCodeServices.EntityKind] Kind -FSharp.Compiler.SourceCodeServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SourceCodeServices.LookupType,FSharp.Compiler.SourceCodeServices.EntityKind] get_Kind() -FSharp.Compiler.SourceCodeServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] AutoOpenParent -FSharp.Compiler.SourceCodeServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] Namespace -FSharp.Compiler.SourceCodeServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] NearestRequireQualifiedAccessParent -FSharp.Compiler.SourceCodeServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] TopRequireQualifiedAccessParent -FSharp.Compiler.SourceCodeServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] get_AutoOpenParent() -FSharp.Compiler.SourceCodeServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] get_Namespace() -FSharp.Compiler.SourceCodeServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] get_NearestRequireQualifiedAccessParent() -FSharp.Compiler.SourceCodeServices.AssemblySymbol: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] get_TopRequireQualifiedAccessParent() -FSharp.Compiler.SourceCodeServices.AssemblySymbol: System.String FullName -FSharp.Compiler.SourceCodeServices.AssemblySymbol: System.String ToString() -FSharp.Compiler.SourceCodeServices.AssemblySymbol: System.String get_FullName() -FSharp.Compiler.SourceCodeServices.AssemblySymbol: System.String[] CleanedIdents -FSharp.Compiler.SourceCodeServices.AssemblySymbol: System.String[] get_CleanedIdents() -FSharp.Compiler.SourceCodeServices.AssemblySymbol: Void .ctor(System.String, System.String[], Microsoft.FSharp.Core.FSharpOption`1[System.String[]], Microsoft.FSharp.Core.FSharpOption`1[System.String[]], Microsoft.FSharp.Core.FSharpOption`1[System.String[]], Microsoft.FSharp.Core.FSharpOption`1[System.String[]], FSharp.Compiler.SourceCodeServices.FSharpSymbol, Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SourceCodeServices.LookupType,FSharp.Compiler.SourceCodeServices.EntityKind], FSharp.Compiler.SourceCodeServices.UnresolvedSymbol) -FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitBinding(Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynBinding,Microsoft.FSharp.Core.FSharpOption`1[T]], SynBinding) -FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitComponentInfo(SynComponentInfo) -FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitExpr(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynExpr,Microsoft.FSharp.Core.FSharpOption`1[T]], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynExpr,Microsoft.FSharp.Core.FSharpOption`1[T]], SynExpr) -FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitHashDirective(range) -FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitImplicitInherit(Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynExpr,Microsoft.FSharp.Core.FSharpOption`1[T]], SynType, SynExpr, range) -FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitInheritSynMemberDefn(SynComponentInfo, SynTypeDefnKind, SynType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn], range) -FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitInterfaceSynMemberDefnType(SynType) -FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitLetOrUse(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynBinding,Microsoft.FSharp.Core.FSharpOption`1[T]], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding], range) -FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitMatchClause(Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynMatchClause,Microsoft.FSharp.Core.FSharpOption`1[T]], SynMatchClause) -FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitModuleDecl(Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynModuleDecl,Microsoft.FSharp.Core.FSharpOption`1[T]], SynModuleDecl) -FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitModuleOrNamespace(SynModuleOrNamespace) -FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitPat(Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynPat,Microsoft.FSharp.Core.FSharpOption`1[T]], SynPat) -FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitRecordField(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+LongIdentWithDots]) -FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitSimplePats(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynSimplePat]) -FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitType(Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynType,Microsoft.FSharp.Core.FSharpOption`1[T]], SynType) -FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitTypeAbbrev(SynType, range) -FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T]: Void .ctor() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean IsBinding -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean IsExpr -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean IsMatchClause -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean IsMemberDefn -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean IsModule -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean IsModuleOrNamespace -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean IsTypeDefn -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean get_IsBinding() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean get_IsExpr() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean get_IsMatchClause() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean get_IsMemberDefn() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean get_IsModule() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean get_IsModuleOrNamespace() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Boolean get_IsTypeDefn() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Int32 Tag -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: SynBinding Item -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: SynBinding get_Item() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding: System.String ToString() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean IsBinding -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean IsExpr -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean IsMatchClause -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean IsMemberDefn -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean IsModule -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean IsModuleOrNamespace -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean IsTypeDefn -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean get_IsBinding() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean get_IsExpr() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean get_IsMatchClause() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean get_IsMemberDefn() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean get_IsModule() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean get_IsModuleOrNamespace() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Boolean get_IsTypeDefn() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Int32 Tag -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: SynExpr Item -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: SynExpr get_Item() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr: System.String ToString() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean IsBinding -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean IsExpr -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean IsMatchClause -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean IsMemberDefn -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean IsModule -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean IsModuleOrNamespace -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean IsTypeDefn -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean get_IsBinding() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean get_IsExpr() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean get_IsMatchClause() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean get_IsMemberDefn() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean get_IsModule() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean get_IsModuleOrNamespace() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Boolean get_IsTypeDefn() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Int32 Tag -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: SynMatchClause Item -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: SynMatchClause get_Item() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause: System.String ToString() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean IsBinding -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean IsExpr -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean IsMatchClause -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean IsMemberDefn -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean IsModule -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean IsModuleOrNamespace -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean IsTypeDefn -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean get_IsBinding() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean get_IsExpr() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean get_IsMatchClause() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean get_IsMemberDefn() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean get_IsModule() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean get_IsModuleOrNamespace() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Boolean get_IsTypeDefn() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Int32 Tag -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: SynMemberDefn Item -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: SynMemberDefn get_Item() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn: System.String ToString() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean IsBinding -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean IsExpr -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean IsMatchClause -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean IsMemberDefn -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean IsModule -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean IsModuleOrNamespace -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean IsTypeDefn -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean get_IsBinding() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean get_IsExpr() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean get_IsMatchClause() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean get_IsMemberDefn() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean get_IsModule() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean get_IsModuleOrNamespace() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Boolean get_IsTypeDefn() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Int32 Tag -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: SynModuleDecl Item -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: SynModuleDecl get_Item() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module: System.String ToString() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean IsBinding -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean IsExpr -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean IsMatchClause -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean IsMemberDefn -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean IsModule -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean IsModuleOrNamespace -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean IsTypeDefn -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean get_IsBinding() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean get_IsExpr() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean get_IsMatchClause() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean get_IsMemberDefn() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean get_IsModule() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean get_IsModuleOrNamespace() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Boolean get_IsTypeDefn() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Int32 Tag -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: SynModuleOrNamespace Item -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: SynModuleOrNamespace get_Item() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace: System.String ToString() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Tags: Int32 Binding -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Tags: Int32 Expr -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Tags: Int32 MatchClause -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Tags: Int32 MemberDefn -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Tags: Int32 Module -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Tags: Int32 ModuleOrNamespace -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Tags: Int32 TypeDefn -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean IsBinding -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean IsExpr -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean IsMatchClause -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean IsMemberDefn -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean IsModule -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean IsModuleOrNamespace -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean IsTypeDefn -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean get_IsBinding() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean get_IsExpr() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean get_IsMatchClause() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean get_IsMemberDefn() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean get_IsModule() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean get_IsModuleOrNamespace() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Boolean get_IsTypeDefn() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Int32 Tag -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: SynTypeDefn Item -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: SynTypeDefn get_Item() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn: System.String ToString() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean IsBinding -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean IsExpr -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean IsMatchClause -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean IsMemberDefn -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean IsModule -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean IsModuleOrNamespace -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean IsTypeDefn -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean get_IsBinding() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean get_IsExpr() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean get_IsMatchClause() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean get_IsMemberDefn() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean get_IsModule() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean get_IsModuleOrNamespace() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Boolean get_IsTypeDefn() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Binding -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Expr -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MatchClause -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+MemberDefn -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Module -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+ModuleOrNamespace -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+Tags -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep+TypeDefn -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Int32 Tag -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: System.String ToString() -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: TraverseStep NewBinding(SynBinding) -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: TraverseStep NewExpr(SynExpr) -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: TraverseStep NewMatchClause(SynMatchClause) -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: TraverseStep NewMemberDefn(SynMemberDefn) -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: TraverseStep NewModule(SynModuleDecl) -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: TraverseStep NewModuleOrNamespace(SynModuleOrNamespace) -FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep: TraverseStep NewTypeDefn(SynTypeDefn) -FSharp.Compiler.SourceCodeServices.AstTraversal: Boolean rangeContainsPosEdgesExclusive(range, pos) -FSharp.Compiler.SourceCodeServices.AstTraversal: Boolean rangeContainsPosLeftEdgeExclusiveAndRightEdgeInclusive(range, pos) -FSharp.Compiler.SourceCodeServices.AstTraversal: Boolean rangeContainsPosLeftEdgeInclusive(range, pos) -FSharp.Compiler.SourceCodeServices.AstTraversal: FSharp.Compiler.SourceCodeServices.AstTraversal+AstVisitorBase`1[T] -FSharp.Compiler.SourceCodeServices.AstTraversal: FSharp.Compiler.SourceCodeServices.AstTraversal+TraverseStep -FSharp.Compiler.SourceCodeServices.AstTraversal: Microsoft.FSharp.Core.FSharpOption`1[T] Traverse[T](pos, ParsedInput, AstVisitorBase`1) -FSharp.Compiler.SourceCodeServices.AstTraversal: Microsoft.FSharp.Core.FSharpOption`1[a] pick[a](pos, range, System.Object, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.FSharpOption`1[a]]]]) -FSharp.Compiler.SourceCodeServices.AstTraversal: System.Tuple`2[b,Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,c]] dive[a,b,c](a, b, Microsoft.FSharp.Core.FSharpFunc`2[a,c]) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpExpr] |AddressOf|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpExpr] |Quote|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue] |Value|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType] |BaseValue|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType] |DefaultValue|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType] |ThisValue|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |AddressSet|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |Sequential|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |TryFinally|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |WhileLoop|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpType]] |UnionCaseTag|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpExpr,Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue],FSharp.Compiler.SourceCodeServices.FSharpExpr]]]] |DecisionTree|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |Lambda|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |ValueSet|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpType,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |Coerce|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpType,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |NewDelegate|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpType,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |TypeTest|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpType,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |NewAnonRecord|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpType,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |NewArray|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpType,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |NewRecord|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpType,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |NewTuple|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter],FSharp.Compiler.SourceCodeServices.FSharpExpr]] |TypeLambda|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue,FSharp.Compiler.SourceCodeServices.FSharpExpr]],FSharp.Compiler.SourceCodeServices.FSharpExpr]] |LetRec|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Int32,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |DecisionTreeSuccess|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Object,FSharp.Compiler.SourceCodeServices.FSharpType]] |Const|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue,FSharp.Compiler.SourceCodeServices.FSharpExpr],FSharp.Compiler.SourceCodeServices.FSharpExpr]] |Let|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |IfThenElse|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpType,FSharp.Compiler.SourceCodeServices.FSharpUnionCase]] |UnionCaseTest|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpType,System.Int32]] |AnonRecordGet|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpExpr,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |Application|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |NewObject|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpType,FSharp.Compiler.SourceCodeServices.FSharpUnionCase,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |NewUnionCase|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpType,System.Int32,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |TupleGet|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpExpr],FSharp.Compiler.SourceCodeServices.FSharpType,FSharp.Compiler.SourceCodeServices.FSharpField]] |FSharpFieldGet|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpExpr],FSharp.Compiler.SourceCodeServices.FSharpType,System.String]] |ILFieldGet|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.String,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |ILAsm|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpExpr,System.Boolean]] |FastIntegerForLoop|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpType,FSharp.Compiler.SourceCodeServices.FSharpUnionCase,FSharp.Compiler.SourceCodeServices.FSharpField]] |UnionCaseGet|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[FSharp.Compiler.SourceCodeServices.FSharpType,FSharp.Compiler.SourceCodeServices.FSharpExpr,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpObjectExprOverride],Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpType,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpObjectExprOverride]]]]] |ObjectExpr|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpExpr],FSharp.Compiler.SourceCodeServices.FSharpType,FSharp.Compiler.SourceCodeServices.FSharpField,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |FSharpFieldSet|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpExpr],FSharp.Compiler.SourceCodeServices.FSharpType,System.String,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |ILFieldSet|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue,FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |TryWith|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.SourceCodeServices.FSharpExpr,FSharp.Compiler.SourceCodeServices.FSharpType,FSharp.Compiler.SourceCodeServices.FSharpUnionCase,FSharp.Compiler.SourceCodeServices.FSharpField,FSharp.Compiler.SourceCodeServices.FSharpExpr]] |UnionCaseSet|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpExpr],FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |Call|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`6[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType],System.String,FSharp.Compiler.SyntaxTree+MemberFlags,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |TraitCall|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] |WitnessArg|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.BasicPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`6[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpExpr],FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr]]] |CallWithWitnesses|_|(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.CompilerEnvironment: Microsoft.FSharp.Core.FSharpOption`1[System.String] BinFolderOfDefaultFSharpCompiler(Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.CompilerEnvironmentModule: Boolean IsCheckerSupportedSubcategory(System.String) -FSharp.Compiler.SourceCodeServices.CompilerEnvironmentModule: Microsoft.FSharp.Collections.FSharpList`1[System.String] DefaultReferencesForOrphanSources(Boolean) -FSharp.Compiler.SourceCodeServices.CompilerEnvironmentModule: Microsoft.FSharp.Collections.FSharpList`1[System.String] GetCompilationDefinesForEditing(FSharp.Compiler.SourceCodeServices.FSharpParsingOptions) -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean Equals(FSharp.Compiler.SourceCodeServices.CompletionContext) -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean IsAttributeApplication -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean IsInherit -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean IsInvalid -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean IsOpenDeclaration -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean IsParameterList -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean IsPatternType -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean IsRangeOperator -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean IsRecordField -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean get_IsAttributeApplication() -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean get_IsInherit() -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean get_IsInvalid() -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean get_IsOpenDeclaration() -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean get_IsParameterList() -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean get_IsPatternType() -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean get_IsRangeOperator() -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Boolean get_IsRecordField() -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: FSharp.Compiler.SourceCodeServices.InheritanceContext Item1 -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: FSharp.Compiler.SourceCodeServices.InheritanceContext get_Item1() -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Int32 Tag -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: System.String ToString() -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] Item2 -FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] get_Item2() -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean Equals(FSharp.Compiler.SourceCodeServices.CompletionContext) -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean IsAttributeApplication -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean IsInherit -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean IsInvalid -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean IsOpenDeclaration -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean IsParameterList -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean IsPatternType -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean IsRangeOperator -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean IsRecordField -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean get_IsAttributeApplication() -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean get_IsInherit() -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean get_IsInvalid() -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean get_IsOpenDeclaration() -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean get_IsParameterList() -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean get_IsPatternType() -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean get_IsRangeOperator() -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean get_IsRecordField() -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean get_isOpenType() -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Boolean isOpenType -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Int32 Tag -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration: System.String ToString() -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean Equals(FSharp.Compiler.SourceCodeServices.CompletionContext) -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean IsAttributeApplication -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean IsInherit -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean IsInvalid -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean IsOpenDeclaration -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean IsParameterList -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean IsPatternType -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean IsRangeOperator -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean IsRecordField -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean get_IsAttributeApplication() -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean get_IsInherit() -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean get_IsInvalid() -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean get_IsOpenDeclaration() -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean get_IsParameterList() -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean get_IsPatternType() -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean get_IsRangeOperator() -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Boolean get_IsRecordField() -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Int32 Tag -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: System.Collections.Generic.HashSet`1[System.String] Item2 -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: System.Collections.Generic.HashSet`1[System.String] get_Item2() -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: System.String ToString() -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: pos Item1 -FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList: pos get_Item1() -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean Equals(FSharp.Compiler.SourceCodeServices.CompletionContext) -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean IsAttributeApplication -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean IsInherit -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean IsInvalid -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean IsOpenDeclaration -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean IsParameterList -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean IsPatternType -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean IsRangeOperator -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean IsRecordField -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean get_IsAttributeApplication() -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean get_IsInherit() -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean get_IsInvalid() -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean get_IsOpenDeclaration() -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean get_IsParameterList() -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean get_IsPatternType() -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean get_IsRangeOperator() -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Boolean get_IsRecordField() -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: FSharp.Compiler.SourceCodeServices.RecordContext Item -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: FSharp.Compiler.SourceCodeServices.RecordContext get_Item() -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Int32 Tag -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField: System.String ToString() -FSharp.Compiler.SourceCodeServices.CompletionContext+Tags: Int32 AttributeApplication -FSharp.Compiler.SourceCodeServices.CompletionContext+Tags: Int32 Inherit -FSharp.Compiler.SourceCodeServices.CompletionContext+Tags: Int32 Invalid -FSharp.Compiler.SourceCodeServices.CompletionContext+Tags: Int32 OpenDeclaration -FSharp.Compiler.SourceCodeServices.CompletionContext+Tags: Int32 ParameterList -FSharp.Compiler.SourceCodeServices.CompletionContext+Tags: Int32 PatternType -FSharp.Compiler.SourceCodeServices.CompletionContext+Tags: Int32 RangeOperator -FSharp.Compiler.SourceCodeServices.CompletionContext+Tags: Int32 RecordField -FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean Equals(FSharp.Compiler.SourceCodeServices.CompletionContext) -FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean IsAttributeApplication -FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean IsInherit -FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean IsInvalid -FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean IsOpenDeclaration -FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean IsParameterList -FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean IsPatternType -FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean IsRangeOperator -FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean IsRecordField -FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean get_IsAttributeApplication() -FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean get_IsInherit() -FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean get_IsInvalid() -FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean get_IsOpenDeclaration() -FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean get_IsParameterList() -FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean get_IsPatternType() -FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean get_IsRangeOperator() -FSharp.Compiler.SourceCodeServices.CompletionContext: Boolean get_IsRecordField() -FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext AttributeApplication -FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext Invalid -FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext NewInherit(FSharp.Compiler.SourceCodeServices.InheritanceContext, System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]]) -FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext NewOpenDeclaration(Boolean) -FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext NewParameterList(pos, System.Collections.Generic.HashSet`1[System.String]) -FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext NewRecordField(FSharp.Compiler.SourceCodeServices.RecordContext) -FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext PatternType -FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext RangeOperator -FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext get_AttributeApplication() -FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext get_Invalid() -FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext get_PatternType() -FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext get_RangeOperator() -FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext+Inherit -FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext+OpenDeclaration -FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext+ParameterList -FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext+RecordField -FSharp.Compiler.SourceCodeServices.CompletionContext: FSharp.Compiler.SourceCodeServices.CompletionContext+Tags -FSharp.Compiler.SourceCodeServices.CompletionContext: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.CompletionContext: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.CompletionContext: Int32 Tag -FSharp.Compiler.SourceCodeServices.CompletionContext: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.CompletionContext: System.String ToString() -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean Equals(FSharp.Compiler.SourceCodeServices.CompletionItemKind) -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean IsArgument -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean IsCustomOperation -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean IsEvent -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean IsField -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean IsMethod -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean IsOther -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean IsProperty -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean get_IsArgument() -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean get_IsCustomOperation() -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean get_IsEvent() -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean get_IsField() -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean get_IsMethod() -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean get_IsOther() -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean get_IsProperty() -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean get_isExtension() -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Boolean isExtension -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.CompletionItemKind) -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Int32 Tag -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method: System.String ToString() -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Tags: Int32 Argument -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Tags: Int32 CustomOperation -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Tags: Int32 Event -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Tags: Int32 Field -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Tags: Int32 Method -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Tags: Int32 Other -FSharp.Compiler.SourceCodeServices.CompletionItemKind+Tags: Int32 Property -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean Equals(FSharp.Compiler.SourceCodeServices.CompletionItemKind) -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean IsArgument -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean IsCustomOperation -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean IsEvent -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean IsField -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean IsMethod -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean IsOther -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean IsProperty -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean get_IsArgument() -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean get_IsCustomOperation() -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean get_IsEvent() -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean get_IsField() -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean get_IsMethod() -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean get_IsOther() -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Boolean get_IsProperty() -FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind Argument -FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind CustomOperation -FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind Event -FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind Field -FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind NewMethod(Boolean) -FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind Other -FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind Property -FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind get_Argument() -FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind get_CustomOperation() -FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind get_Event() -FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind get_Field() -FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind get_Other() -FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind get_Property() -FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind+Method -FSharp.Compiler.SourceCodeServices.CompletionItemKind: FSharp.Compiler.SourceCodeServices.CompletionItemKind+Tags -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.CompletionItemKind) -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Int32 Tag -FSharp.Compiler.SourceCodeServices.CompletionItemKind: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.CompletionItemKind: System.String ToString() -FSharp.Compiler.SourceCodeServices.DebuggerEnvironment: System.Guid GetLanguageID() -FSharp.Compiler.SourceCodeServices.Entity: Boolean Equals(FSharp.Compiler.SourceCodeServices.Entity) -FSharp.Compiler.SourceCodeServices.Entity: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.Entity: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.Entity: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.Entity) -FSharp.Compiler.SourceCodeServices.Entity: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.Entity: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.Entity: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.Entity: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.Entity: Microsoft.FSharp.Core.FSharpOption`1[System.String] Namespace -FSharp.Compiler.SourceCodeServices.Entity: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Namespace() -FSharp.Compiler.SourceCodeServices.Entity: System.String FullRelativeName -FSharp.Compiler.SourceCodeServices.Entity: System.String LastIdent -FSharp.Compiler.SourceCodeServices.Entity: System.String Name -FSharp.Compiler.SourceCodeServices.Entity: System.String Qualifier -FSharp.Compiler.SourceCodeServices.Entity: System.String ToString() -FSharp.Compiler.SourceCodeServices.Entity: System.String get_FullRelativeName() -FSharp.Compiler.SourceCodeServices.Entity: System.String get_LastIdent() -FSharp.Compiler.SourceCodeServices.Entity: System.String get_Name() -FSharp.Compiler.SourceCodeServices.Entity: System.String get_Qualifier() -FSharp.Compiler.SourceCodeServices.Entity: Void .ctor(System.String, System.String, Microsoft.FSharp.Core.FSharpOption`1[System.String], System.String, System.String) -FSharp.Compiler.SourceCodeServices.EntityCache: T Locking[T](Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SourceCodeServices.IAssemblyContentCache,T]) -FSharp.Compiler.SourceCodeServices.EntityCache: Void .ctor() -FSharp.Compiler.SourceCodeServices.EntityCache: Void Clear() -FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean Equals(FSharp.Compiler.SourceCodeServices.EntityKind) -FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean IsAttribute -FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean IsFunctionOrValue -FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean IsModule -FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean IsType -FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean get_IsAttribute() -FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean get_IsFunctionOrValue() -FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean get_IsModule() -FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean get_IsType() -FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean get_isActivePattern() -FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Boolean isActivePattern -FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.EntityKind) -FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Int32 Tag -FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue: System.String ToString() -FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean Equals(FSharp.Compiler.SourceCodeServices.EntityKind) -FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean IsAttribute -FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean IsFunctionOrValue -FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean IsModule -FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean IsType -FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean get_IsAttribute() -FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean get_IsFunctionOrValue() -FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean get_IsModule() -FSharp.Compiler.SourceCodeServices.EntityKind+Module: Boolean get_IsType() -FSharp.Compiler.SourceCodeServices.EntityKind+Module: FSharp.Compiler.SourceCodeServices.ModuleKind Item -FSharp.Compiler.SourceCodeServices.EntityKind+Module: FSharp.Compiler.SourceCodeServices.ModuleKind get_Item() -FSharp.Compiler.SourceCodeServices.EntityKind+Module: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.EntityKind) -FSharp.Compiler.SourceCodeServices.EntityKind+Module: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.EntityKind+Module: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.EntityKind+Module: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.EntityKind+Module: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.EntityKind+Module: Int32 Tag -FSharp.Compiler.SourceCodeServices.EntityKind+Module: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.EntityKind+Module: System.String ToString() -FSharp.Compiler.SourceCodeServices.EntityKind+Tags: Int32 Attribute -FSharp.Compiler.SourceCodeServices.EntityKind+Tags: Int32 FunctionOrValue -FSharp.Compiler.SourceCodeServices.EntityKind+Tags: Int32 Module -FSharp.Compiler.SourceCodeServices.EntityKind+Tags: Int32 Type -FSharp.Compiler.SourceCodeServices.EntityKind: Boolean Equals(FSharp.Compiler.SourceCodeServices.EntityKind) -FSharp.Compiler.SourceCodeServices.EntityKind: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.EntityKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.EntityKind: Boolean IsAttribute -FSharp.Compiler.SourceCodeServices.EntityKind: Boolean IsFunctionOrValue -FSharp.Compiler.SourceCodeServices.EntityKind: Boolean IsModule -FSharp.Compiler.SourceCodeServices.EntityKind: Boolean IsType -FSharp.Compiler.SourceCodeServices.EntityKind: Boolean get_IsAttribute() -FSharp.Compiler.SourceCodeServices.EntityKind: Boolean get_IsFunctionOrValue() -FSharp.Compiler.SourceCodeServices.EntityKind: Boolean get_IsModule() -FSharp.Compiler.SourceCodeServices.EntityKind: Boolean get_IsType() -FSharp.Compiler.SourceCodeServices.EntityKind: FSharp.Compiler.SourceCodeServices.EntityKind Attribute -FSharp.Compiler.SourceCodeServices.EntityKind: FSharp.Compiler.SourceCodeServices.EntityKind NewFunctionOrValue(Boolean) -FSharp.Compiler.SourceCodeServices.EntityKind: FSharp.Compiler.SourceCodeServices.EntityKind NewModule(FSharp.Compiler.SourceCodeServices.ModuleKind) -FSharp.Compiler.SourceCodeServices.EntityKind: FSharp.Compiler.SourceCodeServices.EntityKind Type -FSharp.Compiler.SourceCodeServices.EntityKind: FSharp.Compiler.SourceCodeServices.EntityKind get_Attribute() -FSharp.Compiler.SourceCodeServices.EntityKind: FSharp.Compiler.SourceCodeServices.EntityKind get_Type() -FSharp.Compiler.SourceCodeServices.EntityKind: FSharp.Compiler.SourceCodeServices.EntityKind+FunctionOrValue -FSharp.Compiler.SourceCodeServices.EntityKind: FSharp.Compiler.SourceCodeServices.EntityKind+Module -FSharp.Compiler.SourceCodeServices.EntityKind: FSharp.Compiler.SourceCodeServices.EntityKind+Tags -FSharp.Compiler.SourceCodeServices.EntityKind: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.EntityKind) -FSharp.Compiler.SourceCodeServices.EntityKind: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.EntityKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.EntityKind: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.EntityKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.EntityKind: Int32 Tag -FSharp.Compiler.SourceCodeServices.EntityKind: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.EntityKind: System.String ToString() -FSharp.Compiler.SourceCodeServices.Extensions: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType] FSharpMemberOrFunctionOrValue.get_FullTypeSafe(FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue) -FSharp.Compiler.SourceCodeServices.Extensions: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] FSharpMemberOrFunctionOrValue.TryGetFullCompiledOperatorNameIdents(FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue) -FSharp.Compiler.SourceCodeServices.Extensions: Microsoft.FSharp.Core.FSharpOption`1[System.String] FSharpEntity.TryGetFullCompiledName(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Extensions: Microsoft.FSharp.Core.FSharpOption`1[System.String] FSharpEntity.TryGetFullDisplayName(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Extensions: Microsoft.FSharp.Core.FSharpOption`1[System.String] FSharpEntity.TryGetFullName(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Extensions: Microsoft.FSharp.Core.FSharpOption`1[System.String] FSharpMemberOrFunctionOrValue.TryGetFullDisplayName(FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue) -FSharp.Compiler.SourceCodeServices.Extensions: System.Collections.Generic.IEnumerable`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] FSharpAssemblySignature.TryGetEntities(FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature) -FSharp.Compiler.SourceCodeServices.Extensions: System.Collections.Generic.IEnumerable`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] FSharpEntity.get_PublicNestedEntities(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Extensions: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue] FSharpEntity.get_TryGetMembersFunctionsAndValues(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalSymbol) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean IsConstructor -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean IsEvent -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean IsField -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean IsMethod -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean IsProperty -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean IsType -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean get_IsConstructor() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean get_IsEvent() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean get_IsField() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean get_IsMethod() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean get_IsProperty() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Boolean get_IsType() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalSymbol) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Int32 Tag -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.ParamTypeSymbol] args -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.ParamTypeSymbol] get_args() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: System.String ToString() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: System.String get_typeName() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor: System.String typeName -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalSymbol) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean IsConstructor -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean IsEvent -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean IsField -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean IsMethod -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean IsProperty -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean IsType -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean get_IsConstructor() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean get_IsEvent() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean get_IsField() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean get_IsMethod() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean get_IsProperty() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Boolean get_IsType() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalSymbol) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Int32 Tag -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: System.String ToString() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: System.String get_name() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: System.String get_typeName() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: System.String name -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event: System.String typeName -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalSymbol) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean IsConstructor -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean IsEvent -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean IsField -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean IsMethod -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean IsProperty -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean IsType -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean get_IsConstructor() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean get_IsEvent() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean get_IsField() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean get_IsMethod() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean get_IsProperty() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Boolean get_IsType() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalSymbol) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Int32 Tag -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: System.String ToString() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: System.String get_name() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: System.String get_typeName() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: System.String name -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field: System.String typeName -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalSymbol) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean IsConstructor -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean IsEvent -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean IsField -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean IsMethod -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean IsProperty -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean IsType -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean get_IsConstructor() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean get_IsEvent() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean get_IsField() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean get_IsMethod() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean get_IsProperty() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Boolean get_IsType() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalSymbol) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Int32 Tag -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Int32 genericArity -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Int32 get_genericArity() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.ParamTypeSymbol] get_paramSyms() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.ParamTypeSymbol] paramSyms -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: System.String ToString() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: System.String get_name() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: System.String get_typeName() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: System.String name -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method: System.String typeName -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalSymbol) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean IsConstructor -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean IsEvent -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean IsField -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean IsMethod -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean IsProperty -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean IsType -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean get_IsConstructor() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean get_IsEvent() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean get_IsField() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean get_IsMethod() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean get_IsProperty() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Boolean get_IsType() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalSymbol) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Int32 Tag -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: System.String ToString() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: System.String get_name() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: System.String get_typeName() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: System.String name -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property: System.String typeName -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Tags: Int32 Constructor -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Tags: Int32 Event -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Tags: Int32 Field -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Tags: Int32 Method -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Tags: Int32 Property -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Tags: Int32 Type -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalSymbol) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean IsConstructor -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean IsEvent -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean IsField -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean IsMethod -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean IsProperty -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean IsType -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean get_IsConstructor() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean get_IsEvent() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean get_IsField() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean get_IsMethod() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean get_IsProperty() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Boolean get_IsType() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalSymbol) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Int32 Tag -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: System.String ToString() -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: System.String fullName -FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type: System.String get_fullName() -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalSymbol) -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean IsConstructor -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean IsEvent -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean IsField -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean IsMethod -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean IsProperty -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean IsType -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean get_IsConstructor() -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean get_IsEvent() -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean get_IsField() -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean get_IsMethod() -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean get_IsProperty() -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Boolean get_IsType() -FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol NewConstructor(System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.ParamTypeSymbol]) -FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol NewEvent(System.String, System.String) -FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol NewField(System.String, System.String) -FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol NewMethod(System.String, System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.ParamTypeSymbol], Int32) -FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol NewProperty(System.String, System.String) -FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol NewType(System.String) -FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol+Constructor -FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol+Event -FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol+Field -FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol+Method -FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol+Property -FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol+Tags -FSharp.Compiler.SourceCodeServices.ExternalSymbol: FSharp.Compiler.SourceCodeServices.ExternalSymbol+Type -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalSymbol) -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Int32 Tag -FSharp.Compiler.SourceCodeServices.ExternalSymbol: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.ExternalSymbol: System.String ToString() -FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalType) -FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean IsArray -FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean IsPointer -FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean IsType -FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean IsTypeVar -FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean get_IsArray() -FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean get_IsPointer() -FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean get_IsType() -FSharp.Compiler.SourceCodeServices.ExternalType+Array: Boolean get_IsTypeVar() -FSharp.Compiler.SourceCodeServices.ExternalType+Array: FSharp.Compiler.SourceCodeServices.ExternalType get_inner() -FSharp.Compiler.SourceCodeServices.ExternalType+Array: FSharp.Compiler.SourceCodeServices.ExternalType inner -FSharp.Compiler.SourceCodeServices.ExternalType+Array: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalType) -FSharp.Compiler.SourceCodeServices.ExternalType+Array: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalType+Array: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.ExternalType+Array: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.ExternalType+Array: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalType+Array: Int32 Tag -FSharp.Compiler.SourceCodeServices.ExternalType+Array: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.ExternalType+Array: System.String ToString() -FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalType) -FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean IsArray -FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean IsPointer -FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean IsType -FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean IsTypeVar -FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean get_IsArray() -FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean get_IsPointer() -FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean get_IsType() -FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Boolean get_IsTypeVar() -FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: FSharp.Compiler.SourceCodeServices.ExternalType get_inner() -FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: FSharp.Compiler.SourceCodeServices.ExternalType inner -FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalType) -FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Int32 Tag -FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.ExternalType+Pointer: System.String ToString() -FSharp.Compiler.SourceCodeServices.ExternalType+Tags: Int32 Array -FSharp.Compiler.SourceCodeServices.ExternalType+Tags: Int32 Pointer -FSharp.Compiler.SourceCodeServices.ExternalType+Tags: Int32 Type -FSharp.Compiler.SourceCodeServices.ExternalType+Tags: Int32 TypeVar -FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalType) -FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean IsArray -FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean IsPointer -FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean IsType -FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean IsTypeVar -FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean get_IsArray() -FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean get_IsPointer() -FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean get_IsType() -FSharp.Compiler.SourceCodeServices.ExternalType+Type: Boolean get_IsTypeVar() -FSharp.Compiler.SourceCodeServices.ExternalType+Type: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalType) -FSharp.Compiler.SourceCodeServices.ExternalType+Type: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalType+Type: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.ExternalType+Type: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.ExternalType+Type: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalType+Type: Int32 Tag -FSharp.Compiler.SourceCodeServices.ExternalType+Type: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.ExternalType+Type: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.ExternalType] genericArgs -FSharp.Compiler.SourceCodeServices.ExternalType+Type: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.ExternalType] get_genericArgs() -FSharp.Compiler.SourceCodeServices.ExternalType+Type: System.String ToString() -FSharp.Compiler.SourceCodeServices.ExternalType+Type: System.String fullName -FSharp.Compiler.SourceCodeServices.ExternalType+Type: System.String get_fullName() -FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalType) -FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean IsArray -FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean IsPointer -FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean IsType -FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean IsTypeVar -FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean get_IsArray() -FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean get_IsPointer() -FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean get_IsType() -FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Boolean get_IsTypeVar() -FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalType) -FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Int32 Tag -FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: System.String ToString() -FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: System.String get_typeName() -FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar: System.String typeName -FSharp.Compiler.SourceCodeServices.ExternalType: Boolean Equals(FSharp.Compiler.SourceCodeServices.ExternalType) -FSharp.Compiler.SourceCodeServices.ExternalType: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalType: Boolean IsArray -FSharp.Compiler.SourceCodeServices.ExternalType: Boolean IsPointer -FSharp.Compiler.SourceCodeServices.ExternalType: Boolean IsType -FSharp.Compiler.SourceCodeServices.ExternalType: Boolean IsTypeVar -FSharp.Compiler.SourceCodeServices.ExternalType: Boolean get_IsArray() -FSharp.Compiler.SourceCodeServices.ExternalType: Boolean get_IsPointer() -FSharp.Compiler.SourceCodeServices.ExternalType: Boolean get_IsType() -FSharp.Compiler.SourceCodeServices.ExternalType: Boolean get_IsTypeVar() -FSharp.Compiler.SourceCodeServices.ExternalType: FSharp.Compiler.SourceCodeServices.ExternalType NewArray(FSharp.Compiler.SourceCodeServices.ExternalType) -FSharp.Compiler.SourceCodeServices.ExternalType: FSharp.Compiler.SourceCodeServices.ExternalType NewPointer(FSharp.Compiler.SourceCodeServices.ExternalType) -FSharp.Compiler.SourceCodeServices.ExternalType: FSharp.Compiler.SourceCodeServices.ExternalType NewType(System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.ExternalType]) -FSharp.Compiler.SourceCodeServices.ExternalType: FSharp.Compiler.SourceCodeServices.ExternalType NewTypeVar(System.String) -FSharp.Compiler.SourceCodeServices.ExternalType: FSharp.Compiler.SourceCodeServices.ExternalType+Array -FSharp.Compiler.SourceCodeServices.ExternalType: FSharp.Compiler.SourceCodeServices.ExternalType+Pointer -FSharp.Compiler.SourceCodeServices.ExternalType: FSharp.Compiler.SourceCodeServices.ExternalType+Tags -FSharp.Compiler.SourceCodeServices.ExternalType: FSharp.Compiler.SourceCodeServices.ExternalType+Type -FSharp.Compiler.SourceCodeServices.ExternalType: FSharp.Compiler.SourceCodeServices.ExternalType+TypeVar -FSharp.Compiler.SourceCodeServices.ExternalType: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ExternalType) -FSharp.Compiler.SourceCodeServices.ExternalType: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.ExternalType: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.ExternalType: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.ExternalType: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ExternalType: Int32 Tag -FSharp.Compiler.SourceCodeServices.ExternalType: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.ExternalType: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: Boolean IsInArg -FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: Boolean IsOptionalArg -FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: Boolean IsOutArg -FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: Boolean get_IsInArg() -FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: Boolean get_IsOptionalArg() -FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: Boolean get_IsOutArg() -FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: FSharp.Compiler.SourceCodeServices.FSharpType Type -FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: FSharp.Compiler.SourceCodeServices.FSharpType get_Type() -FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: Microsoft.FSharp.Core.FSharpOption`1[System.String] Name -FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Name() -FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] Attributes -FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_Attributes() -FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: FSharp.Compiler.SourceCodeServices.FSharpType AbstractReturnType -FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: FSharp.Compiler.SourceCodeServices.FSharpType DeclaringType -FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: FSharp.Compiler.SourceCodeServices.FSharpType get_AbstractReturnType() -FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: FSharp.Compiler.SourceCodeServices.FSharpType get_DeclaringType() -FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] DeclaringTypeGenericParameters -FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] MethodGenericParameters -FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] get_DeclaringTypeGenericParameters() -FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] get_MethodGenericParameters() -FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter]] AbstractArguments -FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAbstractParameter]] get_AbstractArguments() -FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: System.String Name -FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature: System.String get_Name() -FSharp.Compiler.SourceCodeServices.FSharpAccessibility: Boolean IsInternal -FSharp.Compiler.SourceCodeServices.FSharpAccessibility: Boolean IsPrivate -FSharp.Compiler.SourceCodeServices.FSharpAccessibility: Boolean IsProtected -FSharp.Compiler.SourceCodeServices.FSharpAccessibility: Boolean IsPublic -FSharp.Compiler.SourceCodeServices.FSharpAccessibility: Boolean get_IsInternal() -FSharp.Compiler.SourceCodeServices.FSharpAccessibility: Boolean get_IsPrivate() -FSharp.Compiler.SourceCodeServices.FSharpAccessibility: Boolean get_IsProtected() -FSharp.Compiler.SourceCodeServices.FSharpAccessibility: Boolean get_IsPublic() -FSharp.Compiler.SourceCodeServices.FSharpAccessibility: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Boolean IsAccessible(FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights) -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Boolean IsEffectivelySameAs(FSharp.Compiler.SourceCodeServices.FSharpSymbol) -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Boolean IsExplicitlySuppressed -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Boolean get_IsExplicitlySuppressed() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup Group -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup get_Group() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: FSharp.Compiler.SourceCodeServices.FSharpAssembly Assembly -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: FSharp.Compiler.SourceCodeServices.FSharpAssembly get_Assembly() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Int32 GetEffectivelySameAsHash() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Int32 Index -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Int32 get_Index() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] DeclarationLocation -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] ImplementationLocation -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] SignatureLocation -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_DeclarationLocation() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] XmlDoc -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.Collections.Generic.IList`1[System.String] get_XmlDoc() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String DisplayName -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String FullName -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String Name -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String XmlDocSig -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String get_DisplayName() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String get_FullName() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String get_Name() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: System.String get_XmlDocSig() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: range DeclarationLocation -FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase: range get_DeclarationLocation() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup: Boolean IsTotal -FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup: Boolean get_IsTotal() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup: FSharp.Compiler.SourceCodeServices.FSharpType OverallType -FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup: FSharp.Compiler.SourceCodeServices.FSharpType get_OverallType() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] DeclaringEntity -FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] get_DeclaringEntity() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup: Microsoft.FSharp.Core.FSharpOption`1[System.String] Name -FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Name() -FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup: System.Collections.Generic.IList`1[System.String] Names -FSharp.Compiler.SourceCodeServices.FSharpActivePatternGroup: System.Collections.Generic.IList`1[System.String] get_Names() -FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails: FSharp.Compiler.SourceCodeServices.FSharpAssembly Assembly -FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails: FSharp.Compiler.SourceCodeServices.FSharpAssembly get_Assembly() -FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails: Microsoft.FSharp.Collections.FSharpList`1[System.String] EnclosingCompiledTypeNames -FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_EnclosingCompiledTypeNames() -FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails: System.String CompiledName -FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails: System.String get_CompiledName() -FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails: System.String[] SortedFieldNames -FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails: System.String[] get_SortedFieldNames() -FSharp.Compiler.SourceCodeServices.FSharpAssembly: Boolean IsProviderGenerated -FSharp.Compiler.SourceCodeServices.FSharpAssembly: Boolean get_IsProviderGenerated() -FSharp.Compiler.SourceCodeServices.FSharpAssembly: FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature Contents -FSharp.Compiler.SourceCodeServices.FSharpAssembly: FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature get_Contents() -FSharp.Compiler.SourceCodeServices.FSharpAssembly: Microsoft.FSharp.Core.FSharpOption`1[System.String] FileName -FSharp.Compiler.SourceCodeServices.FSharpAssembly: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_FileName() -FSharp.Compiler.SourceCodeServices.FSharpAssembly: System.String CodeLocation -FSharp.Compiler.SourceCodeServices.FSharpAssembly: System.String QualifiedName -FSharp.Compiler.SourceCodeServices.FSharpAssembly: System.String SimpleName -FSharp.Compiler.SourceCodeServices.FSharpAssembly: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpAssembly: System.String get_CodeLocation() -FSharp.Compiler.SourceCodeServices.FSharpAssembly: System.String get_QualifiedName() -FSharp.Compiler.SourceCodeServices.FSharpAssembly: System.String get_SimpleName() -FSharp.Compiler.SourceCodeServices.FSharpAssemblyContents: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents] ImplementationFiles -FSharp.Compiler.SourceCodeServices.FSharpAssemblyContents: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents] get_ImplementationFiles() -FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] FindEntityByPath(Microsoft.FSharp.Collections.FSharpList`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] Attributes -FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_Attributes() -FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] Entities -FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] get_Entities() -FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpAttribute: Boolean IsUnresolved -FSharp.Compiler.SourceCodeServices.FSharpAttribute: Boolean get_IsUnresolved() -FSharp.Compiler.SourceCodeServices.FSharpAttribute: FSharp.Compiler.SourceCodeServices.FSharpEntity AttributeType -FSharp.Compiler.SourceCodeServices.FSharpAttribute: FSharp.Compiler.SourceCodeServices.FSharpEntity get_AttributeType() -FSharp.Compiler.SourceCodeServices.FSharpAttribute: System.Collections.Generic.IList`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpType,System.Object]] ConstructorArguments -FSharp.Compiler.SourceCodeServices.FSharpAttribute: System.Collections.Generic.IList`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpType,System.Object]] get_ConstructorArguments() -FSharp.Compiler.SourceCodeServices.FSharpAttribute: System.Collections.Generic.IList`1[System.Tuple`4[FSharp.Compiler.SourceCodeServices.FSharpType,System.String,System.Boolean,System.Object]] NamedArguments -FSharp.Compiler.SourceCodeServices.FSharpAttribute: System.Collections.Generic.IList`1[System.Tuple`4[FSharp.Compiler.SourceCodeServices.FSharpType,System.String,System.Boolean,System.Object]] get_NamedArguments() -FSharp.Compiler.SourceCodeServices.FSharpAttribute: System.String Format(FSharp.Compiler.SourceCodeServices.FSharpDisplayContext) -FSharp.Compiler.SourceCodeServices.FSharpAttribute: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpAttribute: range Range -FSharp.Compiler.SourceCodeServices.FSharpAttribute: range get_Range() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Boolean IsAborted -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Boolean IsSucceeded -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Boolean get_IsAborted() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Boolean get_IsSucceeded() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults Item -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults get_Item() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Tags: Int32 Aborted -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Tags: Int32 Succeeded -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Boolean IsAborted -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Boolean IsSucceeded -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Boolean get_IsAborted() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Boolean get_IsSucceeded() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer Aborted -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer NewSucceeded(FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer get_Aborted() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Succeeded -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer+Tags -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: Boolean HasFullTypeCheckInfo -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: Boolean get_HasFullTypeCheckInfo() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature PartialAssemblySignature -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature get_PartialAssemblySignature() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[] Errors -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[] get_Errors() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration[] OpenDeclarations -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration[] get_OpenDeclarations() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpProjectContext ProjectContext -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpProjectContext get_ProjectContext() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo GetDeclarationListInfo(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpParseFileResults], Int32, System.String, FSharp.Compiler.PartialLongName, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.AssemblySymbol]]]) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult GetDeclarationLocation(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpMethodGroup GetMethods(Int32, Int32, System.String, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: System.Collections.Generic.IEnumerable`1[FSharp.Compiler.SourceCodeServices.FSharpSymbolUse] GetAllUsesOfAllSymbolsInFile(Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpSymbolUse[] GetUsesOfSymbolInFile(FSharp.Compiler.SourceCodeServices.FSharpSymbol, Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[Internal.Utilities.StructuredFormat.Layout] GetStructuredToolTipText(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], Int32) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[System.String] GetToolTipText(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], Int32) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpSymbolUse]] GetDeclarationListSymbols(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpParseFileResults], Int32, System.String, FSharp.Compiler.PartialLongName, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.AssemblySymbol]]]) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpDisplayContext] GetDisplayContextForPos(pos) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpSymbolUse] GetSymbolUseAtLocation(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpSymbolUse]] GetMethodsAsSymbols(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[System.String] GetF1Keyword(Int32, Int32, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: Boolean IsRelativeNameResolvableFromSymbol(pos, Microsoft.FSharp.Collections.FSharpList`1[System.String], FSharp.Compiler.SourceCodeServices.FSharpSymbol) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents] ImplementationFile -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents] get_ImplementationFile() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: System.String[] DependencyFiles -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: System.String[] get_DependencyFiles() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: System.Tuple`2[FSharp.Compiler.Range+range,System.Int32][] GetFormatSpecifierLocationsAndArity() -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: System.ValueTuple`2[FSharp.Compiler.Range+range,FSharp.Compiler.SourceCodeServices.SemanticClassificationType][] GetSemanticClassification(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range]) -FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults: range[] GetFormatSpecifierLocations() -FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: Boolean HasCriticalErrors -FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: Boolean get_HasCriticalErrors() -FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpAssemblyContents AssemblyContents -FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpAssemblyContents GetOptimizedAssemblyContents() -FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpAssemblyContents get_AssemblyContents() -FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature AssemblySignature -FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpAssemblySignature get_AssemblySignature() -FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[] Errors -FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[] get_Errors() -FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpProjectContext ProjectContext -FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpProjectContext get_ProjectContext() -FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpSymbolUse[] GetAllUsesOfAllSymbols(Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: FSharp.Compiler.SourceCodeServices.FSharpSymbolUse[] GetUsesOfSymbol(FSharp.Compiler.SourceCodeServices.FSharpSymbol, Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: System.String[] DependencyFiles -FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults: System.String[] get_DependencyFiles() -FSharp.Compiler.SourceCodeServices.FSharpChecker: Boolean ImplicitlyStartBackgroundWork -FSharp.Compiler.SourceCodeServices.FSharpChecker: Boolean get_ImplicitlyStartBackgroundWork() -FSharp.Compiler.SourceCodeServices.FSharpChecker: FSharp.Compiler.SourceCodeServices.FSharpChecker Create(Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.ReferenceResolver+Resolver], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.String,System.DateTime],Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Object,System.IntPtr,System.Int32]]]], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: FSharp.Compiler.SourceCodeServices.FSharpChecker Instance -FSharp.Compiler.SourceCodeServices.FSharpChecker: FSharp.Compiler.SourceCodeServices.FSharpChecker get_Instance() -FSharp.Compiler.SourceCodeServices.FSharpChecker: FSharp.Compiler.SourceCodeServices.FSharpProjectOptions GetProjectOptionsFromCommandLineArgs(System.String, System.String[], Microsoft.FSharp.Core.FSharpOption`1[System.DateTime], Microsoft.FSharp.Core.FSharpOption`1[System.Object]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: FSharp.Compiler.SourceCodeServices.FSharpTokenInfo[][] TokenizeFile(System.String) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Int32 CurrentQueueLength -FSharp.Compiler.SourceCodeServices.FSharpChecker: Int32 GlobalForegroundParseCountStatistic -FSharp.Compiler.SourceCodeServices.FSharpChecker: Int32 GlobalForegroundTypeCheckCountStatistic -FSharp.Compiler.SourceCodeServices.FSharpChecker: Int32 MaxMemory -FSharp.Compiler.SourceCodeServices.FSharpChecker: Int32 PauseBeforeBackgroundWork -FSharp.Compiler.SourceCodeServices.FSharpChecker: Int32 get_CurrentQueueLength() -FSharp.Compiler.SourceCodeServices.FSharpChecker: Int32 get_GlobalForegroundParseCountStatistic() -FSharp.Compiler.SourceCodeServices.FSharpChecker: Int32 get_GlobalForegroundTypeCheckCountStatistic() -FSharp.Compiler.SourceCodeServices.FSharpChecker: Int32 get_MaxMemory() -FSharp.Compiler.SourceCodeServices.FSharpChecker: Int32 get_PauseBeforeBackgroundWork() -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer] CheckFileInProject(FSharp.Compiler.SourceCodeServices.FSharpParseFileResults, System.String, Int32, FSharp.Compiler.Text.ISourceText, FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.SourceCodeServices.FSharpCheckProjectResults] ParseAndCheckProject(FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.SourceCodeServices.FSharpParseFileResults] GetBackgroundParseResultsForFileInProject(System.String, FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.SourceCodeServices.FSharpParseFileResults] ParseFile(System.String, FSharp.Compiler.Text.ISourceText, FSharp.Compiler.SourceCodeServices.FSharpParsingOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.SourceCodeServices.FSharpParseFileResults] ParseFileInProject(System.String, System.String, FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.SourceCodeServices.FSharpParseFileResults] ParseFileNoCache(System.String, FSharp.Compiler.Text.ISourceText, FSharp.Compiler.SourceCodeServices.FSharpParsingOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer]] CheckFileInProjectAllowingStaleCachedResults(FSharp.Compiler.SourceCodeServices.FSharpParseFileResults, System.String, Int32, System.String, FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] NotifyProjectCleaned(FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Collections.Generic.IEnumerable`1[FSharp.Compiler.Range+range]] FindBackgroundReferencesInFile(System.String, FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, FSharp.Compiler.SourceCodeServices.FSharpSymbol, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.Range+range,FSharp.Compiler.Range+range][]] MatchBraces(System.String, FSharp.Compiler.Text.ISourceText, FSharp.Compiler.SourceCodeServices.FSharpParsingOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.Range+range,FSharp.Compiler.Range+range][]] MatchBraces(System.String, System.String, FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[],System.Int32]] Compile(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedInput], System.String, System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[],System.Int32]] Compile(System.String[], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpParseFileResults,FSharp.Compiler.SourceCodeServices.FSharpCheckFileAnswer]] ParseAndCheckFileInProject(System.String, Int32, FSharp.Compiler.Text.ISourceText, FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpParseFileResults,FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults]] GetBackgroundCheckResultsForFileInProject(System.String, FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpProjectOptions,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo]]] GetProjectOptionsFromScript(System.String, FSharp.Compiler.Text.ISourceText, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.DateTime], Microsoft.FSharp.Core.FSharpOption`1[System.String[]], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Object], Microsoft.FSharp.Core.FSharpOption`1[System.Int64], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[],System.Int32,Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.Assembly]]] CompileToDynamicAssembly(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedInput], System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.IO.TextWriter,System.IO.TextWriter]], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[],System.Int32,Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.Assembly]]] CompileToDynamicAssembly(System.String[], Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.IO.TextWriter,System.IO.TextWriter]], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.FSharpAsync`1[System.ValueTuple`2[FSharp.Compiler.Range+range,FSharp.Compiler.SourceCodeServices.SemanticClassificationType][]] GetBackgroundSemanticClassificationForFile(System.String, FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit] MaxMemoryReached -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit] get_MaxMemoryReached() -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]],System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]] BeforeBackgroundFileCheck -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]],System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]] FileChecked -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]],System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]] FileParsed -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]],System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]] ProjectChecked -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]],System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]] get_BeforeBackgroundFileCheck() -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]],System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]] get_FileChecked() -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]],System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]] get_FileParsed() -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]],System.Tuple`2[System.String,Microsoft.FSharp.Core.FSharpOption`1[System.Object]]] get_ProjectChecked() -FSharp.Compiler.SourceCodeServices.FSharpChecker: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpParseFileResults,FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults,System.Int32]] TryGetRecentCheckResultsForFile(System.String, FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.ISourceText], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpParsingOptions,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo]] GetParsingOptionsFromCommandLineArgs(Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpParsingOptions,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo]] GetParsingOptionsFromCommandLineArgs(Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpParsingOptions,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpErrorInfo]] GetParsingOptionsFromProjectOptions(FSharp.Compiler.SourceCodeServices.FSharpProjectOptions) -FSharp.Compiler.SourceCodeServices.FSharpChecker: System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpTokenInfo[],FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState] TokenizeLine(System.String, FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Void CheckProjectInBackground(FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Void ClearCache(System.Collections.Generic.IEnumerable`1[FSharp.Compiler.SourceCodeServices.FSharpProjectOptions], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Void ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() -FSharp.Compiler.SourceCodeServices.FSharpChecker: Void InvalidateAll() -FSharp.Compiler.SourceCodeServices.FSharpChecker: Void InvalidateConfiguration(FSharp.Compiler.SourceCodeServices.FSharpProjectOptions, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Void StopBackgroundCompile() -FSharp.Compiler.SourceCodeServices.FSharpChecker: Void WaitForBackgroundCompile() -FSharp.Compiler.SourceCodeServices.FSharpChecker: Void set_ImplicitlyStartBackgroundWork(Boolean) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Void set_MaxMemory(Int32) -FSharp.Compiler.SourceCodeServices.FSharpChecker: Void set_PauseBeforeBackgroundWork(Int32) -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo: Boolean IsError -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo: Boolean IsForType -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo: Boolean get_IsError() -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo: Boolean get_IsForType() -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo: FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo Empty -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo: FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo get_Empty() -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo: FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem[] Items -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListInfo: FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem[] get_Items() -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Boolean IsOwnMember -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Boolean IsResolved -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Boolean get_IsOwnMember() -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Boolean get_IsResolved() -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: FSharp.Compiler.SourceCodeServices.CompletionItemKind Kind -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: FSharp.Compiler.SourceCodeServices.CompletionItemKind get_Kind() -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: FSharp.Compiler.SourceCodeServices.FSharpGlyph Glyph -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Glyph() -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Int32 MinorPriority -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Int32 get_MinorPriority() -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[Internal.Utilities.StructuredFormat.Layout]] StructuredDescriptionTextAsync -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[Internal.Utilities.StructuredFormat.Layout]] get_StructuredDescriptionTextAsync() -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[System.String]] DescriptionTextAsync -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Microsoft.FSharp.Control.FSharpAsync`1[FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[System.String]] get_DescriptionTextAsync() -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[Internal.Utilities.StructuredFormat.Layout] StructuredDescriptionText -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[Internal.Utilities.StructuredFormat.Layout] get_StructuredDescriptionText() -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[System.String] DescriptionText -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[System.String] get_DescriptionText() -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpAccessibility] Accessibility -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpAccessibility] get_Accessibility() -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Microsoft.FSharp.Core.FSharpOption`1[System.String] NamespaceToOpen -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_NamespaceToOpen() -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: System.String FullName -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: System.String Name -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: System.String NameInCode -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: System.String get_FullName() -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: System.String get_Name() -FSharp.Compiler.SourceCodeServices.FSharpDeclarationListItem: System.String get_NameInCode() -FSharp.Compiler.SourceCodeServices.FSharpDelegateSignature: FSharp.Compiler.SourceCodeServices.FSharpType DelegateReturnType -FSharp.Compiler.SourceCodeServices.FSharpDelegateSignature: FSharp.Compiler.SourceCodeServices.FSharpType get_DelegateReturnType() -FSharp.Compiler.SourceCodeServices.FSharpDelegateSignature: System.Collections.Generic.IList`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[System.String],FSharp.Compiler.SourceCodeServices.FSharpType]] DelegateArguments -FSharp.Compiler.SourceCodeServices.FSharpDelegateSignature: System.Collections.Generic.IList`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[System.String],FSharp.Compiler.SourceCodeServices.FSharpType]] get_DelegateArguments() -FSharp.Compiler.SourceCodeServices.FSharpDelegateSignature: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpDisplayContext: FSharp.Compiler.SourceCodeServices.FSharpDisplayContext Empty -FSharp.Compiler.SourceCodeServices.FSharpDisplayContext: FSharp.Compiler.SourceCodeServices.FSharpDisplayContext WithShortTypeNames(Boolean) -FSharp.Compiler.SourceCodeServices.FSharpDisplayContext: FSharp.Compiler.SourceCodeServices.FSharpDisplayContext get_Empty() -FSharp.Compiler.SourceCodeServices.FSharpDisplayContext: FSharp.Compiler.SourceCodeServices.FSharpDisplayContext WithPrefixGenericParameters() -FSharp.Compiler.SourceCodeServices.FSharpDisplayContext: FSharp.Compiler.SourceCodeServices.FSharpDisplayContext WithSuffixGenericParameters() -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind+Tags: Int32 Class -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind+Tags: Int32 DU -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind+Tags: Int32 Enum -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind+Tags: Int32 Exception -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind+Tags: Int32 Interface -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind+Tags: Int32 Module -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind+Tags: Int32 Namespace -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind+Tags: Int32 Record -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind) -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean IsClass -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean IsDU -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean IsEnum -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean IsException -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean IsInterface -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean IsModule -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean IsNamespace -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean IsRecord -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean get_IsClass() -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean get_IsDU() -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean get_IsEnum() -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean get_IsException() -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean get_IsInterface() -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean get_IsModule() -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean get_IsNamespace() -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Boolean get_IsRecord() -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind Class -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind DU -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind Enum -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind Exception -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind Interface -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind Module -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind Namespace -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind Record -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind get_Class() -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind get_DU() -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind get_Enum() -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind get_Exception() -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind get_Interface() -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind get_Module() -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind get_Namespace() -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind get_Record() -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind+Tags -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind) -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean HasAssemblyCodeRepresentation -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean HasFSharpModuleSuffix -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsAccessible(FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights) -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsArrayType -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsAttributeType -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsByRef -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsClass -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsDelegate -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsEffectivelySameAs(FSharp.Compiler.SourceCodeServices.FSharpSymbol) -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsEnum -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsExplicitlySuppressed -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsFSharp -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsFSharpAbbreviation -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsFSharpExceptionDeclaration -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsFSharpModule -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsFSharpRecord -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsFSharpUnion -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsInterface -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsMeasure -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsNamespace -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsOpaque -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsProvided -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsProvidedAndErased -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsProvidedAndGenerated -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsStaticInstantiation -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsUnresolved -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsValueType -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean UsesPrefixDisplay -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_HasAssemblyCodeRepresentation() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_HasFSharpModuleSuffix() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsArrayType() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsAttributeType() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsByRef() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsClass() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsDelegate() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsEnum() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsExplicitlySuppressed() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsFSharp() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsFSharpAbbreviation() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsFSharpExceptionDeclaration() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsFSharpModule() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsFSharpRecord() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsFSharpUnion() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsInterface() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsMeasure() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsNamespace() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsOpaque() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsProvided() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsProvidedAndErased() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsProvidedAndGenerated() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsStaticInstantiation() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsUnresolved() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsValueType() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_UsesPrefixDisplay() -FSharp.Compiler.SourceCodeServices.FSharpEntity: FSharp.Compiler.SourceCodeServices.FSharpAccessibility Accessibility -FSharp.Compiler.SourceCodeServices.FSharpEntity: FSharp.Compiler.SourceCodeServices.FSharpAccessibility RepresentationAccessibility -FSharp.Compiler.SourceCodeServices.FSharpEntity: FSharp.Compiler.SourceCodeServices.FSharpAccessibility get_Accessibility() -FSharp.Compiler.SourceCodeServices.FSharpEntity: FSharp.Compiler.SourceCodeServices.FSharpAccessibility get_RepresentationAccessibility() -FSharp.Compiler.SourceCodeServices.FSharpEntity: FSharp.Compiler.SourceCodeServices.FSharpAssembly Assembly -FSharp.Compiler.SourceCodeServices.FSharpEntity: FSharp.Compiler.SourceCodeServices.FSharpAssembly get_Assembly() -FSharp.Compiler.SourceCodeServices.FSharpEntity: FSharp.Compiler.SourceCodeServices.FSharpDelegateSignature FSharpDelegateSignature -FSharp.Compiler.SourceCodeServices.FSharpEntity: FSharp.Compiler.SourceCodeServices.FSharpDelegateSignature get_FSharpDelegateSignature() -FSharp.Compiler.SourceCodeServices.FSharpEntity: FSharp.Compiler.SourceCodeServices.FSharpType AbbreviatedType -FSharp.Compiler.SourceCodeServices.FSharpEntity: FSharp.Compiler.SourceCodeServices.FSharpType get_AbbreviatedType() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Int32 ArrayRank -FSharp.Compiler.SourceCodeServices.FSharpEntity: Int32 GetEffectivelySameAsHash() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Int32 get_ArrayRank() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase] ActivePatternCases -FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase] get_ActivePatternCases() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Collections.FSharpList`1[System.String] AllCompilationPaths -FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_AllCompilationPaths() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] DeclarationLocation -FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] ImplementationLocation -FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] SignatureLocation -FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_DeclarationLocation() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] DeclaringEntity -FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] get_DeclaringEntity() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType] BaseType -FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_BaseType() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] Namespace -FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] TryFullName -FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Namespace() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_TryFullName() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] Attributes -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_Attributes() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] NestedEntities -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] get_NestedEntities() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpField] FSharpFields -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpField] RecordFields -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpField] get_FSharpFields() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpField] get_RecordFields() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] GenericParameters -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] get_GenericParameters() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue] MembersFunctionsAndValues -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue] MembersOrValues -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue] get_MembersFunctionsAndValues() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue] get_MembersOrValues() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpStaticParameter] StaticParameters -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpStaticParameter] get_StaticParameters() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] AllInterfaces -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] DeclaredInterfaces -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_AllInterfaces() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_DeclaredInterfaces() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpUnionCase] UnionCases -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpUnionCase] get_UnionCases() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] XmlDoc -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.Collections.Generic.IList`1[System.String] get_XmlDoc() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String AccessPath -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String CompiledName -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String DisplayName -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String FullName -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String LogicalName -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String QualifiedName -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String XmlDocSig -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String get_AccessPath() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String get_CompiledName() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String get_DisplayName() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String get_FullName() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String get_LogicalName() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String get_QualifiedName() -FSharp.Compiler.SourceCodeServices.FSharpEntity: System.String get_XmlDocSig() -FSharp.Compiler.SourceCodeServices.FSharpEntity: range DeclarationLocation -FSharp.Compiler.SourceCodeServices.FSharpEntity: range get_DeclarationLocation() -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean IsAbstractClass -FSharp.Compiler.SourceCodeServices.FSharpEntity: Boolean get_IsAbstractClass() -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity Severity -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity get_Severity() -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: Int32 EndColumn -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: Int32 EndLineAlternate -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: Int32 ErrorNumber -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: Int32 StartColumn -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: Int32 StartLineAlternate -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: Int32 get_EndColumn() -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: Int32 get_EndLineAlternate() -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: Int32 get_ErrorNumber() -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: Int32 get_StartColumn() -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: Int32 get_StartLineAlternate() -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: System.String FileName -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: System.String Message -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: System.String Subcategory -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: System.String get_FileName() -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: System.String get_Message() -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: System.String get_Subcategory() -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: pos End -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: pos Start -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: pos get_End() -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: pos get_Start() -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: range Range -FSharp.Compiler.SourceCodeServices.FSharpErrorInfo: range get_Range() -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity+Tags: Int32 Error -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity+Tags: Int32 Warning -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity) -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Boolean IsError -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Boolean IsWarning -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Boolean get_IsError() -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Boolean get_IsWarning() -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity Error -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity Warning -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity get_Error() -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity get_Warning() -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity+Tags -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity) -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpExpr: FSharp.Compiler.SourceCodeServices.FSharpType Type -FSharp.Compiler.SourceCodeServices.FSharpExpr: FSharp.Compiler.SourceCodeServices.FSharpType get_Type() -FSharp.Compiler.SourceCodeServices.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr] ImmediateSubExpressions -FSharp.Compiler.SourceCodeServices.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpExpr] get_ImmediateSubExpressions() -FSharp.Compiler.SourceCodeServices.FSharpExpr: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpExpr: range Range -FSharp.Compiler.SourceCodeServices.FSharpExpr: range get_Range() -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsAccessible(FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights) -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsAnonRecordField -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsCompilerGenerated -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsDefaultValue -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsEffectivelySameAs(FSharp.Compiler.SourceCodeServices.FSharpSymbol) -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsExplicitlySuppressed -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsLiteral -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsMutable -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsNameGenerated -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsStatic -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsUnionCaseField -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsUnresolved -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean IsVolatile -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsAnonRecordField() -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsCompilerGenerated() -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsDefaultValue() -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsExplicitlySuppressed() -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsLiteral() -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsMutable() -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsNameGenerated() -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsStatic() -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsUnionCaseField() -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsUnresolved() -FSharp.Compiler.SourceCodeServices.FSharpField: Boolean get_IsVolatile() -FSharp.Compiler.SourceCodeServices.FSharpField: FSharp.Compiler.SourceCodeServices.FSharpAccessibility Accessibility -FSharp.Compiler.SourceCodeServices.FSharpField: FSharp.Compiler.SourceCodeServices.FSharpAccessibility get_Accessibility() -FSharp.Compiler.SourceCodeServices.FSharpField: FSharp.Compiler.SourceCodeServices.FSharpAssembly Assembly -FSharp.Compiler.SourceCodeServices.FSharpField: FSharp.Compiler.SourceCodeServices.FSharpAssembly get_Assembly() -FSharp.Compiler.SourceCodeServices.FSharpField: FSharp.Compiler.SourceCodeServices.FSharpType FieldType -FSharp.Compiler.SourceCodeServices.FSharpField: FSharp.Compiler.SourceCodeServices.FSharpType get_FieldType() -FSharp.Compiler.SourceCodeServices.FSharpField: Int32 GetEffectivelySameAsHash() -FSharp.Compiler.SourceCodeServices.FSharpField: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] DeclarationLocation -FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] ImplementationLocation -FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] SignatureLocation -FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_DeclarationLocation() -FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() -FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() -FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] DeclaringEntity -FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] get_DeclaringEntity() -FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpUnionCase] DeclaringUnionCase -FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpUnionCase] get_DeclaringUnionCase() -FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[System.Object] LiteralValue -FSharp.Compiler.SourceCodeServices.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[System.Object] get_LiteralValue() -FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] FieldAttributes -FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] PropertyAttributes -FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_FieldAttributes() -FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_PropertyAttributes() -FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc -FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] XmlDoc -FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() -FSharp.Compiler.SourceCodeServices.FSharpField: System.Collections.Generic.IList`1[System.String] get_XmlDoc() -FSharp.Compiler.SourceCodeServices.FSharpField: System.String DisplayName -FSharp.Compiler.SourceCodeServices.FSharpField: System.String FullName -FSharp.Compiler.SourceCodeServices.FSharpField: System.String Name -FSharp.Compiler.SourceCodeServices.FSharpField: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpField: System.String XmlDocSig -FSharp.Compiler.SourceCodeServices.FSharpField: System.String get_DisplayName() -FSharp.Compiler.SourceCodeServices.FSharpField: System.String get_FullName() -FSharp.Compiler.SourceCodeServices.FSharpField: System.String get_Name() -FSharp.Compiler.SourceCodeServices.FSharpField: System.String get_XmlDocSig() -FSharp.Compiler.SourceCodeServices.FSharpField: System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails,FSharp.Compiler.SourceCodeServices.FSharpType[],System.Int32] AnonRecordFieldDetails -FSharp.Compiler.SourceCodeServices.FSharpField: System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails,FSharp.Compiler.SourceCodeServices.FSharpType[],System.Int32] get_AnonRecordFieldDetails() -FSharp.Compiler.SourceCodeServices.FSharpField: range DeclarationLocation -FSharp.Compiler.SourceCodeServices.FSharpField: range get_DeclarationLocation() -FSharp.Compiler.SourceCodeServices.FSharpFileUtilities: Boolean isScriptFile(System.String) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean IsNoSourceCode -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean IsProvidedMember -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean IsProvidedType -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean IsUnknown -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean get_IsNoSourceCode() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean get_IsProvidedMember() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean get_IsProvidedType() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Boolean get_IsUnknown() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: System.String Item -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember: System.String get_Item() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean IsNoSourceCode -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean IsProvidedMember -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean IsProvidedType -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean IsUnknown -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean get_IsNoSourceCode() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean get_IsProvidedMember() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean get_IsProvidedType() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Boolean get_IsUnknown() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: System.String Item -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType: System.String get_Item() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Tags: Int32 NoSourceCode -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Tags: Int32 ProvidedMember -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Tags: Int32 ProvidedType -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Tags: Int32 Unknown -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean IsNoSourceCode -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean IsProvidedMember -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean IsProvidedType -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean IsUnknown -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean get_IsNoSourceCode() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean get_IsProvidedMember() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean get_IsProvidedType() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Boolean get_IsUnknown() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: System.String get_message() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown: System.String message -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean IsNoSourceCode -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean IsProvidedMember -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean IsProvidedType -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean IsUnknown -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean get_IsNoSourceCode() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean get_IsProvidedMember() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean get_IsProvidedType() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Boolean get_IsUnknown() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason NewProvidedMember(System.String) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason NewProvidedType(System.String) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason NewUnknown(System.String) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason NoSourceCode -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason get_NoSourceCode() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedMember -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+ProvidedType -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Tags -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason+Unknown -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Boolean IsDeclFound -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Boolean IsDeclNotFound -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Boolean IsExternalDecl -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Boolean get_IsDeclFound() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Boolean get_IsDeclNotFound() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Boolean get_IsExternalDecl() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: range Item -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound: range get_Item() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Boolean IsDeclFound -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Boolean IsDeclNotFound -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Boolean IsExternalDecl -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Boolean get_IsDeclFound() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Boolean get_IsDeclNotFound() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Boolean get_IsExternalDecl() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason Item -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason get_Item() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Boolean IsDeclFound -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Boolean IsDeclNotFound -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Boolean IsExternalDecl -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Boolean get_IsDeclFound() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Boolean get_IsDeclNotFound() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Boolean get_IsExternalDecl() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: FSharp.Compiler.SourceCodeServices.ExternalSymbol externalSym -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: FSharp.Compiler.SourceCodeServices.ExternalSymbol get_externalSym() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: System.String assembly -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl: System.String get_assembly() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+Tags: Int32 DeclFound -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+Tags: Int32 DeclNotFound -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+Tags: Int32 ExternalDecl -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Boolean IsDeclFound -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Boolean IsDeclNotFound -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Boolean IsExternalDecl -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Boolean get_IsDeclFound() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Boolean get_IsDeclNotFound() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Boolean get_IsExternalDecl() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult NewDeclFound(range) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult NewDeclNotFound(FSharp.Compiler.SourceCodeServices.FSharpFindDeclFailureReason) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult NewExternalDecl(System.String, FSharp.Compiler.SourceCodeServices.ExternalSymbol) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclFound -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+DeclNotFound -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+ExternalDecl -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult+Tags -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpFindDeclResult: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean IsAccessible(FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights) -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean IsCompilerGenerated -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean IsEffectivelySameAs(FSharp.Compiler.SourceCodeServices.FSharpSymbol) -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean IsExplicitlySuppressed -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean IsMeasure -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean IsSolveAtCompileTime -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean get_IsCompilerGenerated() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean get_IsExplicitlySuppressed() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean get_IsMeasure() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Boolean get_IsSolveAtCompileTime() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: FSharp.Compiler.SourceCodeServices.FSharpAssembly Assembly -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: FSharp.Compiler.SourceCodeServices.FSharpAssembly get_Assembly() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Int32 GetEffectivelySameAsHash() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] DeclarationLocation -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] ImplementationLocation -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] SignatureLocation -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_DeclarationLocation() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] Attributes -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_Attributes() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint] Constraints -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint] get_Constraints() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] XmlDoc -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.Collections.Generic.IList`1[System.String] get_XmlDoc() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String DisplayName -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String FullName -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String Name -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String get_DisplayName() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String get_FullName() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: System.String get_Name() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: range DeclarationLocation -FSharp.Compiler.SourceCodeServices.FSharpGenericParameter: range get_DeclarationLocation() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsCoercesToConstraint -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsComparisonConstraint -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsDefaultsToConstraint -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsDelegateConstraint -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsEnumConstraint -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsEqualityConstraint -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsMemberConstraint -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsNonNullableValueTypeConstraint -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsReferenceTypeConstraint -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsRequiresDefaultConstructorConstraint -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsSimpleChoiceConstraint -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsSupportsNullConstraint -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean IsUnmanagedConstraint -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsCoercesToConstraint() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsComparisonConstraint() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsDefaultsToConstraint() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsDelegateConstraint() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsEnumConstraint() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsEqualityConstraint() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsMemberConstraint() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsNonNullableValueTypeConstraint() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsReferenceTypeConstraint() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsRequiresDefaultConstructorConstraint() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsSimpleChoiceConstraint() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsSupportsNullConstraint() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: Boolean get_IsUnmanagedConstraint() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDefaultsToConstraint DefaultsToConstraintData -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDefaultsToConstraint get_DefaultsToConstraintData() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDelegateConstraint DelegateConstraintData -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDelegateConstraint get_DelegateConstraintData() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint MemberConstraintData -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint get_MemberConstraintData() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: FSharp.Compiler.SourceCodeServices.FSharpType CoercesToTarget -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: FSharp.Compiler.SourceCodeServices.FSharpType EnumConstraintTarget -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: FSharp.Compiler.SourceCodeServices.FSharpType get_CoercesToTarget() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: FSharp.Compiler.SourceCodeServices.FSharpType get_EnumConstraintTarget() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] SimpleChoices -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_SimpleChoices() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterConstraint: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDefaultsToConstraint: FSharp.Compiler.SourceCodeServices.FSharpType DefaultsToTarget -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDefaultsToConstraint: FSharp.Compiler.SourceCodeServices.FSharpType get_DefaultsToTarget() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDefaultsToConstraint: Int32 DefaultsToPriority -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDefaultsToConstraint: Int32 get_DefaultsToPriority() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDefaultsToConstraint: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDelegateConstraint: FSharp.Compiler.SourceCodeServices.FSharpType DelegateReturnType -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDelegateConstraint: FSharp.Compiler.SourceCodeServices.FSharpType DelegateTupledArgumentType -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDelegateConstraint: FSharp.Compiler.SourceCodeServices.FSharpType get_DelegateReturnType() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDelegateConstraint: FSharp.Compiler.SourceCodeServices.FSharpType get_DelegateTupledArgumentType() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterDelegateConstraint: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: Boolean MemberIsStatic -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: Boolean get_MemberIsStatic() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: FSharp.Compiler.SourceCodeServices.FSharpType MemberReturnType -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: FSharp.Compiler.SourceCodeServices.FSharpType get_MemberReturnType() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] MemberArgumentTypes -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] MemberSources -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_MemberArgumentTypes() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_MemberSources() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: System.String MemberName -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpGenericParameterMemberConstraint: System.String get_MemberName() -FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Class -FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Constant -FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Delegate -FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Enum -FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 EnumMember -FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Error -FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Event -FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Exception -FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 ExtensionMethod -FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Field -FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Interface -FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Method -FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Module -FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 NameSpace -FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 OverridenMethod -FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Property -FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Struct -FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Type -FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Typedef -FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Union -FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags: Int32 Variable -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpGlyph) -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsClass -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsConstant -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsDelegate -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsEnum -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsEnumMember -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsError -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsEvent -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsException -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsExtensionMethod -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsField -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsInterface -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsMethod -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsModule -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsNameSpace -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsOverridenMethod -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsProperty -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsStruct -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsType -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsTypedef -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsUnion -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean IsVariable -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsClass() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsConstant() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsDelegate() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsEnum() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsEnumMember() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsError() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsEvent() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsException() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsExtensionMethod() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsField() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsInterface() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsMethod() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsModule() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsNameSpace() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsOverridenMethod() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsProperty() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsStruct() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsType() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsTypedef() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsUnion() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Boolean get_IsVariable() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Class -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Constant -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Delegate -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Enum -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph EnumMember -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Error -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Event -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Exception -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph ExtensionMethod -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Field -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Interface -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Method -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Module -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph NameSpace -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph OverridenMethod -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Property -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Struct -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Type -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Typedef -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Union -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph Variable -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Class() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Constant() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Delegate() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Enum() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_EnumMember() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Error() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Event() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Exception() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_ExtensionMethod() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Field() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Interface() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Method() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Module() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_NameSpace() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_OverridenMethod() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Property() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Struct() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Type() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Typedef() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Union() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Variable() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: FSharp.Compiler.SourceCodeServices.FSharpGlyph+Tags -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpGlyph) -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpGlyph: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpGlyph: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents: Boolean HasExplicitEntryPoint -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents: Boolean IsScript -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents: Boolean get_HasExplicitEntryPoint() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents: Boolean get_IsScript() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration] Declarations -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration] get_Declarations() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents: System.String FileName -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents: System.String QualifiedName -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents: System.String get_FileName() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileContents: System.String get_QualifiedName() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration) -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Boolean IsEntity -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Boolean IsInitAction -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Boolean IsMemberOrFunctionOrValue -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Boolean get_IsEntity() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Boolean get_IsInitAction() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Boolean get_IsMemberOrFunctionOrValue() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: FSharp.Compiler.SourceCodeServices.FSharpEntity Item1 -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: FSharp.Compiler.SourceCodeServices.FSharpEntity get_Item1() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration] Item2 -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration] get_Item2() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration) -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Boolean IsEntity -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Boolean IsInitAction -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Boolean IsMemberOrFunctionOrValue -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Boolean get_IsEntity() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Boolean get_IsInitAction() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Boolean get_IsMemberOrFunctionOrValue() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: FSharp.Compiler.SourceCodeServices.FSharpExpr Item -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: FSharp.Compiler.SourceCodeServices.FSharpExpr get_Item() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration) -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Boolean IsEntity -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Boolean IsInitAction -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Boolean IsMemberOrFunctionOrValue -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Boolean get_IsEntity() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Boolean get_IsInitAction() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Boolean get_IsMemberOrFunctionOrValue() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpExpr Item3 -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpExpr get_Item3() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue Item1 -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue get_Item1() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue]] Item2 -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue]] get_Item2() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Tags: Int32 Entity -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Tags: Int32 InitAction -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Tags: Int32 MemberOrFunctionOrValue -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration) -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Boolean IsEntity -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Boolean IsInitAction -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Boolean IsMemberOrFunctionOrValue -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Boolean get_IsEntity() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Boolean get_IsInitAction() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Boolean get_IsMemberOrFunctionOrValue() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration NewEntity(FSharp.Compiler.SourceCodeServices.FSharpEntity, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration]) -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration NewInitAction(FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration NewMemberOrFunctionOrValue(FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue]], FSharp.Compiler.SourceCodeServices.FSharpExpr) -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Entity -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+InitAction -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration+Tags -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpImplementationFileDeclaration: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation+Tags: Int32 AggressiveInline -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation+Tags: Int32 AlwaysInline -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation+Tags: Int32 NeverInline -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation+Tags: Int32 OptionalInline -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation+Tags: Int32 PseudoValue -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation) -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean IsAggressiveInline -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean IsAlwaysInline -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean IsNeverInline -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean IsOptionalInline -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean IsPseudoValue -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean get_IsAggressiveInline() -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean get_IsAlwaysInline() -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean get_IsNeverInline() -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean get_IsOptionalInline() -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Boolean get_IsPseudoValue() -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation AggressiveInline -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation AlwaysInline -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation NeverInline -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation OptionalInline -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation PseudoValue -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation get_AggressiveInline() -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation get_AlwaysInline() -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation get_NeverInline() -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation get_OptionalInline() -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation get_PseudoValue() -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation+Tags -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation) -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpLineTokenizer: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState ColorStateOfLexState(FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState) -FSharp.Compiler.SourceCodeServices.FSharpLineTokenizer: FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState LexStateOfColorState(FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState) -FSharp.Compiler.SourceCodeServices.FSharpLineTokenizer: System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpTokenInfo],FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState] ScanToken(FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState) -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean EventIsStandard -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean HasGetterMethod -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean HasSetterMethod -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsAccessible(FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights) -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsActivePattern -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsBaseValue -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsCompilerGenerated -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsConstructor -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsConstructorThisValue -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsDispatchSlot -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsEffectivelySameAs(FSharp.Compiler.SourceCodeServices.FSharpSymbol) -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsEvent -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsEventAddMethod -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsEventRemoveMethod -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsExplicitInterfaceImplementation -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsExplicitlySuppressed -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsExtensionMember -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsGetterMethod -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsImplicitConstructor -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsInstanceMember -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsInstanceMemberInCompiledCode -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsMember -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsMemberThisValue -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsModuleValueOrMember -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsMutable -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsOverrideOrExplicitInterfaceImplementation -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsOverrideOrExplicitMember -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsProperty -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsPropertyGetterMethod -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsPropertySetterMethod -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsSetterMethod -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsTypeFunction -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsUnresolved -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsValCompiledAsMethod -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean IsValue -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_EventIsStandard() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_HasGetterMethod() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_HasSetterMethod() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsActivePattern() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsBaseValue() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsCompilerGenerated() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsConstructor() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsConstructorThisValue() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsDispatchSlot() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsEvent() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsEventAddMethod() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsEventRemoveMethod() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsExplicitInterfaceImplementation() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsExplicitlySuppressed() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsExtensionMember() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsGetterMethod() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsImplicitConstructor() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsInstanceMember() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsInstanceMemberInCompiledCode() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsMember() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsMemberThisValue() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsModuleValueOrMember() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsMutable() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsOverrideOrExplicitInterfaceImplementation() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsOverrideOrExplicitMember() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsProperty() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsPropertyGetterMethod() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsPropertySetterMethod() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsSetterMethod() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsTypeFunction() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsUnresolved() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsValCompiledAsMethod() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Boolean get_IsValue() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpAccessibility Accessibility -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpAccessibility get_Accessibility() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpAssembly Assembly -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpAssembly get_Assembly() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpEntity ApparentEnclosingEntity -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpEntity get_ApparentEnclosingEntity() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation InlineAnnotation -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpInlineAnnotation get_InlineAnnotation() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue EventAddMethod -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue EventRemoveMethod -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue GetterMethod -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue SetterMethod -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue get_EventAddMethod() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue get_EventRemoveMethod() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue get_GetterMethod() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue get_SetterMethod() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpParameter ReturnParameter -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpParameter get_ReturnParameter() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpType EventDelegateType -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpType FullType -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpType get_EventDelegateType() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: FSharp.Compiler.SourceCodeServices.FSharpType get_FullType() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Int32 GetEffectivelySameAsHash() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Internal.Utilities.StructuredFormat.Layout FormatLayout(FSharp.Compiler.SourceCodeServices.FSharpDisplayContext) -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] DeclarationLocation -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] ImplementationLocation -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] SignatureLocation -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_DeclarationLocation() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] DeclaringEntity -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] get_DeclaringEntity() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue] EventForFSharpProperty -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue] get_EventForFSharpProperty() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue]] Overloads(Boolean) -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[System.Object] LiteralValue -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[System.Object] get_LiteralValue() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature] ImplementedAbstractSignatures -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature] get_ImplementedAbstractSignatures() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] Attributes -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_Attributes() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] GenericParameters -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] get_GenericParameters() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]] CurriedParameterGroups -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]] get_CurriedParameterGroups() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] XmlDoc -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.String] get_XmlDoc() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String CompiledName -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String DisplayName -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String FullName -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String LogicalName -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String XmlDocSig -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String get_CompiledName() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String get_DisplayName() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String get_FullName() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String get_LogicalName() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: System.String get_XmlDocSig() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: range DeclarationLocation -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: range get_DeclarationLocation() -FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.String,System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]]] GetWitnessPassingInfo() -FSharp.Compiler.SourceCodeServices.FSharpMethodGroup: FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem[] Methods -FSharp.Compiler.SourceCodeServices.FSharpMethodGroup: FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem[] get_Methods() -FSharp.Compiler.SourceCodeServices.FSharpMethodGroup: System.String MethodName -FSharp.Compiler.SourceCodeServices.FSharpMethodGroup: System.String get_MethodName() -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: Boolean HasParamArrayArg -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: Boolean HasParameters -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: Boolean get_HasParamArrayArg() -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: Boolean get_HasParameters() -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter[] Parameters -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter[] StaticParameters -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter[] get_Parameters() -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter[] get_StaticParameters() -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[Internal.Utilities.StructuredFormat.Layout] StructuredDescription -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[Internal.Utilities.StructuredFormat.Layout] get_StructuredDescription() -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[System.String] Description -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[System.String] get_Description() -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc XmlDoc -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc get_XmlDoc() -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: Internal.Utilities.StructuredFormat.Layout StructuredReturnTypeText -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: Internal.Utilities.StructuredFormat.Layout get_StructuredReturnTypeText() -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: System.String ReturnTypeText -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItem: System.String get_ReturnTypeText() -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter: Boolean IsOptional -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter: Boolean get_IsOptional() -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter: Internal.Utilities.StructuredFormat.Layout StructuredDisplay -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter: Internal.Utilities.StructuredFormat.Layout get_StructuredDisplay() -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter: System.String CanonicalTypeTextForSorting -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter: System.String Display -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter: System.String ParameterName -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter: System.String get_CanonicalTypeTextForSorting() -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter: System.String get_Display() -FSharp.Compiler.SourceCodeServices.FSharpMethodGroupItemParameter: System.String get_ParameterName() -FSharp.Compiler.SourceCodeServices.FSharpNavigation: FSharp.Compiler.SourceCodeServices.FSharpNavigationItems getNavigation(ParsedInput) -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: Boolean IsAbstract -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: Boolean IsSingleTopLevel -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: Boolean get_IsAbstract() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: Boolean get_IsSingleTopLevel() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind EnclosingEntityKind -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: FSharp.Compiler.SourceCodeServices.FSharpEnclosingEntityKind get_EnclosingEntityKind() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: FSharp.Compiler.SourceCodeServices.FSharpGlyph Glyph -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: FSharp.Compiler.SourceCodeServices.FSharpGlyph get_Glyph() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind Kind -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind get_Kind() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] Access -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_Access() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: System.String Name -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: System.String UniqueName -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: System.String get_Name() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: System.String get_UniqueName() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: range BodyRange -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: range Range -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: range get_BodyRange() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem: range get_Range() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind+Tags: Int32 ExnDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind+Tags: Int32 FieldDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind+Tags: Int32 MethodDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind+Tags: Int32 ModuleDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind+Tags: Int32 ModuleFileDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind+Tags: Int32 NamespaceDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind+Tags: Int32 OtherDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind+Tags: Int32 PropertyDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind+Tags: Int32 TypeDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind) -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean IsExnDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean IsFieldDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean IsMethodDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean IsModuleDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean IsModuleFileDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean IsNamespaceDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean IsOtherDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean IsPropertyDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean IsTypeDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean get_IsExnDecl() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean get_IsFieldDecl() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean get_IsMethodDecl() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean get_IsModuleDecl() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean get_IsModuleFileDecl() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean get_IsNamespaceDecl() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean get_IsOtherDecl() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean get_IsPropertyDecl() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Boolean get_IsTypeDecl() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind ExnDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind FieldDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind MethodDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind ModuleDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind ModuleFileDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind NamespaceDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind OtherDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind PropertyDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind TypeDecl -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind get_ExnDecl() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind get_FieldDecl() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind get_MethodDecl() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind get_ModuleDecl() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind get_ModuleFileDecl() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind get_NamespaceDecl() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind get_OtherDecl() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind get_PropertyDecl() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind get_TypeDecl() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind+Tags -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind) -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItemKind: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpNavigationItems: FSharp.Compiler.SourceCodeServices.FSharpNavigationTopLevelDeclaration[] Declarations -FSharp.Compiler.SourceCodeServices.FSharpNavigationItems: FSharp.Compiler.SourceCodeServices.FSharpNavigationTopLevelDeclaration[] get_Declarations() -FSharp.Compiler.SourceCodeServices.FSharpNavigationTopLevelDeclaration: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem Declaration -FSharp.Compiler.SourceCodeServices.FSharpNavigationTopLevelDeclaration: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem get_Declaration() -FSharp.Compiler.SourceCodeServices.FSharpNavigationTopLevelDeclaration: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem[] Nested -FSharp.Compiler.SourceCodeServices.FSharpNavigationTopLevelDeclaration: FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem[] get_Nested() -FSharp.Compiler.SourceCodeServices.FSharpNavigationTopLevelDeclaration: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpNavigationTopLevelDeclaration: Void .ctor(FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem, FSharp.Compiler.SourceCodeServices.FSharpNavigationDeclarationItem[]) -FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: Boolean IsThereACloseParen -FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: Boolean get_IsThereACloseParen() -FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: Microsoft.FSharp.Collections.FSharpList`1[System.String] LongId -FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_LongId() -FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations] Find(pos, ParsedInput) -FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: Microsoft.FSharp.Core.FSharpOption`1[System.String][] NamedParamNames -FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: Microsoft.FSharp.Core.FSharpOption`1[System.String][] get_NamedParamNames() -FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: pos LongIdEndLocation -FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: pos LongIdStartLocation -FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: pos OpenParenLocation -FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: pos get_LongIdEndLocation() -FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: pos get_LongIdStartLocation() -FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: pos get_OpenParenLocation() -FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: pos[] TupleEndLocations -FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations: pos[] get_TupleEndLocations() -FSharp.Compiler.SourceCodeServices.FSharpObjectExprOverride: FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature Signature -FSharp.Compiler.SourceCodeServices.FSharpObjectExprOverride: FSharp.Compiler.SourceCodeServices.FSharpAbstractSignature get_Signature() -FSharp.Compiler.SourceCodeServices.FSharpObjectExprOverride: FSharp.Compiler.SourceCodeServices.FSharpExpr Body -FSharp.Compiler.SourceCodeServices.FSharpObjectExprOverride: FSharp.Compiler.SourceCodeServices.FSharpExpr get_Body() -FSharp.Compiler.SourceCodeServices.FSharpObjectExprOverride: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] GenericParameters -FSharp.Compiler.SourceCodeServices.FSharpObjectExprOverride: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter] get_GenericParameters() -FSharp.Compiler.SourceCodeServices.FSharpObjectExprOverride: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue]] CurriedParameterGroups -FSharp.Compiler.SourceCodeServices.FSharpObjectExprOverride: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue]] get_CurriedParameterGroups() -FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: Boolean IsOwnNamespace -FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: Boolean get_IsOwnNamespace() -FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] Modules -FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] get_Modules() -FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType] Types -FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_Types() -FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] LongId -FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_LongId() -FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] Range -FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_Range() -FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: SynOpenDeclTarget Target -FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: SynOpenDeclTarget get_Target() -FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: range AppliedScope -FSharp.Compiler.SourceCodeServices.FSharpOpenDeclaration: range get_AppliedScope() -FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean IsAccessible(FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights) -FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean IsEffectivelySameAs(FSharp.Compiler.SourceCodeServices.FSharpSymbol) -FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean IsExplicitlySuppressed -FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean IsInArg -FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean IsOptionalArg -FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean IsOutArg -FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean IsParamArrayArg -FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean get_IsExplicitlySuppressed() -FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean get_IsInArg() -FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean get_IsOptionalArg() -FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean get_IsOutArg() -FSharp.Compiler.SourceCodeServices.FSharpParameter: Boolean get_IsParamArrayArg() -FSharp.Compiler.SourceCodeServices.FSharpParameter: FSharp.Compiler.SourceCodeServices.FSharpAssembly Assembly -FSharp.Compiler.SourceCodeServices.FSharpParameter: FSharp.Compiler.SourceCodeServices.FSharpAssembly get_Assembly() -FSharp.Compiler.SourceCodeServices.FSharpParameter: FSharp.Compiler.SourceCodeServices.FSharpType Type -FSharp.Compiler.SourceCodeServices.FSharpParameter: FSharp.Compiler.SourceCodeServices.FSharpType get_Type() -FSharp.Compiler.SourceCodeServices.FSharpParameter: Int32 GetEffectivelySameAsHash() -FSharp.Compiler.SourceCodeServices.FSharpParameter: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] DeclarationLocation -FSharp.Compiler.SourceCodeServices.FSharpParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] ImplementationLocation -FSharp.Compiler.SourceCodeServices.FSharpParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] SignatureLocation -FSharp.Compiler.SourceCodeServices.FSharpParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_DeclarationLocation() -FSharp.Compiler.SourceCodeServices.FSharpParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() -FSharp.Compiler.SourceCodeServices.FSharpParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() -FSharp.Compiler.SourceCodeServices.FSharpParameter: Microsoft.FSharp.Core.FSharpOption`1[System.String] Name -FSharp.Compiler.SourceCodeServices.FSharpParameter: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Name() -FSharp.Compiler.SourceCodeServices.FSharpParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] Attributes -FSharp.Compiler.SourceCodeServices.FSharpParameter: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_Attributes() -FSharp.Compiler.SourceCodeServices.FSharpParameter: System.String DisplayName -FSharp.Compiler.SourceCodeServices.FSharpParameter: System.String FullName -FSharp.Compiler.SourceCodeServices.FSharpParameter: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpParameter: System.String get_DisplayName() -FSharp.Compiler.SourceCodeServices.FSharpParameter: System.String get_FullName() -FSharp.Compiler.SourceCodeServices.FSharpParameter: range DeclarationLocation -FSharp.Compiler.SourceCodeServices.FSharpParameter: range get_DeclarationLocation() -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Boolean ParseHadErrors -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Boolean get_ParseHadErrors() -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[] Errors -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: FSharp.Compiler.SourceCodeServices.FSharpErrorInfo[] get_Errors() -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: FSharp.Compiler.SourceCodeServices.FSharpNavigationItems GetNavigationItems() -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] TryRangeOfNameOfNearestOuterBindingContainingPos(pos) -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] TryRangeOfRefCellDereferenceContainingPos(pos) -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] TryRangeOfRecordExpressionContainingPos(pos) -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] TryRangeOfExprInYieldOrReturn(pos) -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.Range+range,FSharp.Compiler.Range+range,FSharp.Compiler.Range+range]] TryRangeOfParenEnclosingOpEqualsGreaterUsage(pos) -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] ValidateBreakpointLocation(pos) -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpNoteworthyParamInfoLocations] FindNoteworthyParamInfoLocations(pos) -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Boolean IsPositionContainedInACurriedParameter(pos) -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Boolean IsPosContainedInApplication(pos) -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] TryRangeOfFunctionOrMethodBeingApplied(pos) -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range]] GetAllArgumentsForFunctionApplicationAtPostion(pos) -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+Ident,System.Int32]] TryIdentOfPipelineContainingPosAndNumArgsApplied(pos) -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+ParsedInput] ParseTree -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+ParsedInput] get_ParseTree() -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: System.String FileName -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: System.String get_FileName() -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: System.String[] DependencyFiles -FSharp.Compiler.SourceCodeServices.FSharpParseFileResults: System.String[] get_DependencyFiles() -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Boolean CompilingFsLib -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpParsingOptions) -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Boolean IsExe -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Boolean IsInteractive -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Boolean get_CompilingFsLib() -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Boolean get_IsExe() -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Boolean get_IsInteractive() -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: FSharp.Compiler.SourceCodeServices.FSharpParsingOptions Default -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: FSharp.Compiler.SourceCodeServices.FSharpParsingOptions get_Default() -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: FSharpErrorSeverityOptions ErrorSeverityOptions -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: FSharpErrorSeverityOptions get_ErrorSeverityOptions() -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpParsingOptions) -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Microsoft.FSharp.Collections.FSharpList`1[System.String] ConditionalCompilationDefines -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_ConditionalCompilationDefines() -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Microsoft.FSharp.Core.FSharpOption`1[System.Boolean] LightSyntax -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Microsoft.FSharp.Core.FSharpOption`1[System.Boolean] get_LightSyntax() -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: System.String[] SourceFiles -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: System.String[] get_SourceFiles() -FSharp.Compiler.SourceCodeServices.FSharpParsingOptions: Void .ctor(System.String[], Microsoft.FSharp.Collections.FSharpList`1[System.String], FSharpErrorSeverityOptions, Boolean, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean], Boolean, Boolean) -FSharp.Compiler.SourceCodeServices.FSharpProjectContext: FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights AccessibilityRights -FSharp.Compiler.SourceCodeServices.FSharpProjectContext: FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights get_AccessibilityRights() -FSharp.Compiler.SourceCodeServices.FSharpProjectContext: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpAssembly] GetReferencedAssemblies() -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpProjectOptions) -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Boolean IsIncompleteTypeCheckEnvironment -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Boolean UseScriptResolutionRules -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Boolean get_IsIncompleteTypeCheckEnvironment() -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Boolean get_UseScriptResolutionRules() -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Range+range,System.String,System.String]] OriginalLoadReferences -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Range+range,System.String,System.String]] get_OriginalLoadReferences() -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.UnresolvedReferencesSet] UnresolvedReferences -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.UnresolvedReferencesSet] get_UnresolvedReferences() -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[System.Int64] Stamp -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[System.Int64] get_Stamp() -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[System.Object] ExtraProjectInfo -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[System.Object] get_ExtraProjectInfo() -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[System.String] ProjectId -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_ProjectId() -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.DateTime LoadTime -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.DateTime get_LoadTime() -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.String ProjectFileName -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.String get_ProjectFileName() -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.String[] OtherOptions -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.String[] SourceFiles -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.String[] get_OtherOptions() -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.String[] get_SourceFiles() -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.Tuple`2[System.String,FSharp.Compiler.SourceCodeServices.FSharpProjectOptions][] ReferencedProjects -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: System.Tuple`2[System.String,FSharp.Compiler.SourceCodeServices.FSharpProjectOptions][] get_ReferencedProjects() -FSharp.Compiler.SourceCodeServices.FSharpProjectOptions: Void .ctor(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.String], System.String[], System.String[], System.Tuple`2[System.String,FSharp.Compiler.SourceCodeServices.FSharpProjectOptions][], Boolean, Boolean, System.DateTime, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.UnresolvedReferencesSet], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Range+range,System.String,System.String]], Microsoft.FSharp.Core.FSharpOption`1[System.Object], Microsoft.FSharp.Core.FSharpOption`1[System.Int64]) -FSharp.Compiler.SourceCodeServices.FSharpSourceTokenizer: FSharp.Compiler.SourceCodeServices.FSharpLineTokenizer CreateBufferTokenizer(Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[System.Char[],System.Int32,System.Int32],System.Int32]) -FSharp.Compiler.SourceCodeServices.FSharpSourceTokenizer: FSharp.Compiler.SourceCodeServices.FSharpLineTokenizer CreateLineTokenizer(System.String) -FSharp.Compiler.SourceCodeServices.FSharpSourceTokenizer: Void .ctor(Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Boolean HasDefaultValue -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Boolean IsAccessible(FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights) -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Boolean IsEffectivelySameAs(FSharp.Compiler.SourceCodeServices.FSharpSymbol) -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Boolean IsExplicitlySuppressed -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Boolean IsOptional -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Boolean get_HasDefaultValue() -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Boolean get_IsExplicitlySuppressed() -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Boolean get_IsOptional() -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: FSharp.Compiler.SourceCodeServices.FSharpAssembly Assembly -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: FSharp.Compiler.SourceCodeServices.FSharpAssembly get_Assembly() -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: FSharp.Compiler.SourceCodeServices.FSharpType Kind -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: FSharp.Compiler.SourceCodeServices.FSharpType get_Kind() -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Int32 GetEffectivelySameAsHash() -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] DeclarationLocation -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] ImplementationLocation -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] SignatureLocation -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_DeclarationLocation() -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: System.Object DefaultValue -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: System.Object get_DefaultValue() -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: System.String DisplayName -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: System.String FullName -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: System.String Name -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: System.String get_DisplayName() -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: System.String get_FullName() -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: System.String get_Name() -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: range DeclarationLocation -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: range get_DeclarationLocation() -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: range Range -FSharp.Compiler.SourceCodeServices.FSharpStaticParameter: range get_Range() -FSharp.Compiler.SourceCodeServices.FSharpSymbol: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpSymbol: Boolean IsAccessible(FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights) -FSharp.Compiler.SourceCodeServices.FSharpSymbol: Boolean IsEffectivelySameAs(FSharp.Compiler.SourceCodeServices.FSharpSymbol) -FSharp.Compiler.SourceCodeServices.FSharpSymbol: Boolean IsExplicitlySuppressed -FSharp.Compiler.SourceCodeServices.FSharpSymbol: Boolean get_IsExplicitlySuppressed() -FSharp.Compiler.SourceCodeServices.FSharpSymbol: FSharp.Compiler.SourceCodeServices.FSharpAssembly Assembly -FSharp.Compiler.SourceCodeServices.FSharpSymbol: FSharp.Compiler.SourceCodeServices.FSharpAssembly get_Assembly() -FSharp.Compiler.SourceCodeServices.FSharpSymbol: Int32 GetEffectivelySameAsHash() -FSharp.Compiler.SourceCodeServices.FSharpSymbol: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] DeclarationLocation -FSharp.Compiler.SourceCodeServices.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] ImplementationLocation -FSharp.Compiler.SourceCodeServices.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] SignatureLocation -FSharp.Compiler.SourceCodeServices.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_DeclarationLocation() -FSharp.Compiler.SourceCodeServices.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() -FSharp.Compiler.SourceCodeServices.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() -FSharp.Compiler.SourceCodeServices.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpAccessibility] GetAccessibility(FSharp.Compiler.SourceCodeServices.FSharpSymbol) -FSharp.Compiler.SourceCodeServices.FSharpSymbol: System.String DisplayName -FSharp.Compiler.SourceCodeServices.FSharpSymbol: System.String FullName -FSharp.Compiler.SourceCodeServices.FSharpSymbol: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpSymbol: System.String get_DisplayName() -FSharp.Compiler.SourceCodeServices.FSharpSymbol: System.String get_FullName() -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean IsFromAttribute -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean IsFromComputationExpression -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean IsFromDefinition -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean IsFromDispatchSlotImplementation -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean IsFromOpenStatement -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean IsFromPattern -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean IsFromType -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean IsPrivateToFile -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean get_IsFromAttribute() -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean get_IsFromComputationExpression() -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean get_IsFromDefinition() -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean get_IsFromDispatchSlotImplementation() -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean get_IsFromOpenStatement() -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean get_IsFromPattern() -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean get_IsFromType() -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: Boolean get_IsPrivateToFile() -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: FSharp.Compiler.SourceCodeServices.FSharpDisplayContext DisplayContext -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: FSharp.Compiler.SourceCodeServices.FSharpDisplayContext get_DisplayContext() -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: FSharp.Compiler.SourceCodeServices.FSharpSymbol Symbol -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: FSharp.Compiler.SourceCodeServices.FSharpSymbol get_Symbol() -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: System.String FileName -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: System.String get_FileName() -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: range RangeAlternate -FSharp.Compiler.SourceCodeServices.FSharpSymbolUse: range get_RangeAlternate() -FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind Comment -FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind Default -FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind Delimiter -FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind Identifier -FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind Keyword -FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind LineComment -FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind Literal -FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind Operator -FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind String -FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind Text -FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind WhiteSpace -FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind: Int32 value__ -FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind Comment -FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind Default -FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind Identifier -FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind InactiveCode -FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind Keyword -FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind Number -FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind Operator -FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind PreprocessorKeyword -FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind Punctuation -FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind String -FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind Text -FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind UpperIdentifier -FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind: Int32 value__ -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpTokenInfo) -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind CharClass -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind get_CharClass() -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind ColorClass -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind get_ColorClass() -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass FSharpTokenTriggerClass -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass get_FSharpTokenTriggerClass() -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpTokenInfo) -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 FullMatchedLength -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 LeftColumn -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 RightColumn -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 get_FullMatchedLength() -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 get_LeftColumn() -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 get_RightColumn() -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: System.String TokenName -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: System.String get_TokenName() -FSharp.Compiler.SourceCodeServices.FSharpTokenInfo: Void .ctor(Int32, Int32, FSharp.Compiler.SourceCodeServices.FSharpTokenColorKind, FSharp.Compiler.SourceCodeServices.FSharpTokenCharKind, FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass, Int32, System.String, Int32) -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 AMP_AMP -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 BAR -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 BAR_BAR -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 BAR_RBRACK -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 BEGIN -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 CLASS -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 COLON -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 COLON_COLON -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 COLON_EQUALS -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 COLON_GREATER -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 COLON_QMARK -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 COLON_QMARK_GREATER -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 COMMA -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 COMMENT -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 DO -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 DOT -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 DOT_DOT -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 DOT_DOT_HAT -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 ELSE -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 EQUALS -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 FUNCTION -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 GREATER -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 GREATER_RBRACK -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 IDENT -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 INFIX_AT_HAT_OP -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 INFIX_BAR_OP -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 INFIX_COMPARE_OP -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 INFIX_STAR_DIV_MOD_OP -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 INT32_DOT_DOT -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 INTERP_STRING_BEGIN_END -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 INTERP_STRING_BEGIN_PART -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 INTERP_STRING_END -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 INTERP_STRING_PART -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 Identifier -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 LARROW -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 LBRACE -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 LBRACK -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 LBRACK_BAR -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 LBRACK_LESS -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 LESS -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 LINE_COMMENT -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 LPAREN -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 MINUS -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 NEW -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 OWITH -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 PERCENT_OP -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 PLUS_MINUS_OP -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 PREFIX_OP -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 QMARK -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 QUOTE -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 RARROW -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 RBRACE -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 RBRACK -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 RPAREN -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 SEMICOLON -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 STAR -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 STRING -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 STRUCT -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 String -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 THEN -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 TRY -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 UNDERSCORE -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 WHITESPACE -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 WITH -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_AMP_AMP() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_BAR() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_BAR_BAR() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_BAR_RBRACK() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_BEGIN() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_CLASS() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_COLON() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_COLON_COLON() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_COLON_EQUALS() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_COLON_GREATER() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_COLON_QMARK() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_COLON_QMARK_GREATER() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_COMMA() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_COMMENT() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_DO() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_DOT() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_DOT_DOT() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_DOT_DOT_HAT() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_ELSE() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_EQUALS() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_FUNCTION() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_GREATER() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_GREATER_RBRACK() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_IDENT() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_INFIX_AT_HAT_OP() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_INFIX_BAR_OP() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_INFIX_COMPARE_OP() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_INFIX_STAR_DIV_MOD_OP() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_INT32_DOT_DOT() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_INTERP_STRING_BEGIN_END() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_INTERP_STRING_BEGIN_PART() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_INTERP_STRING_END() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_INTERP_STRING_PART() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_Identifier() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_LARROW() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_LBRACE() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_LBRACK() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_LBRACK_BAR() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_LBRACK_LESS() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_LESS() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_LINE_COMMENT() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_LPAREN() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_MINUS() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_NEW() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_OWITH() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_PERCENT_OP() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_PLUS_MINUS_OP() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_PREFIX_OP() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_QMARK() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_QUOTE() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_RARROW() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_RBRACE() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_RBRACK() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_RPAREN() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_SEMICOLON() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_STAR() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_STRING() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_STRUCT() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_String() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_THEN() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_TRY() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_UNDERSCORE() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_WHITESPACE() -FSharp.Compiler.SourceCodeServices.FSharpTokenTag: Int32 get_WITH() -FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass: FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass ChoiceSelect -FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass: FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass MatchBraces -FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass: FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass MemberSelect -FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass: FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass MethodTip -FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass: FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass None -FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass: FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass ParamEnd -FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass: FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass ParamNext -FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass: FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass ParamStart -FSharp.Compiler.SourceCodeServices.FSharpTokenTriggerClass: Int32 value__ -FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState CamlOnly -FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState Comment -FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState EndLineThenSkip -FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState EndLineThenToken -FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState IfDefSkip -FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState InitialState -FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState SingleLineComment -FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState String -FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState StringInComment -FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState Token -FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState TripleQuoteString -FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState TripleQuoteStringInComment -FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState VerbatimString -FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState VerbatimStringInComment -FSharp.Compiler.SourceCodeServices.FSharpTokenizerColorState: Int32 value__ -FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState) -FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState Initial -FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState get_Initial() -FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: Int64 OtherBits -FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: Int64 PosBits -FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: Int64 get_OtherBits() -FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: Int64 get_PosBits() -FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpTokenizerLexState: Void .ctor(Int64, Int64) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc XmlDoc -FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc get_XmlDoc() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] TypeMapping -FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_TypeMapping() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Microsoft.FSharp.Core.FSharpOption`1[System.String] ParamName -FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_ParamName() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] Remarks -FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] get_Remarks() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: T MainDescription -FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: T get_MainDescription() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]: Void .ctor(T, FSharp.Compiler.SourceCodeServices.FSharpXmlDoc, Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Core.FSharpOption`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.String]) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Boolean IsCompositionError -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Boolean IsGroup -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Boolean IsNone -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Boolean get_IsCompositionError() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Boolean get_IsGroup() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Boolean get_IsNone() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: System.String Item -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T]: System.String get_Item() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Boolean IsCompositionError -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Boolean IsGroup -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Boolean IsNone -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Boolean get_IsCompositionError() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Boolean get_IsGroup() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Boolean get_IsNone() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]] Item -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]] get_Item() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T]: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Tags[T]: Int32 CompositionError -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Tags[T]: Int32 Group -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Tags[T]: Int32 None -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Boolean IsCompositionError -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Boolean IsGroup -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Boolean IsNone -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Boolean get_IsCompositionError() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Boolean get_IsGroup() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Boolean get_IsNone() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+CompositionError[T] -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Group[T] -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1+Tags[T] -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T] NewCompositionError(System.String) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T] NewGroup(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpToolTipElementData`1[T]]) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T] None -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T] Single(T, FSharp.Compiler.SourceCodeServices.FSharpXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[T]], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[T]) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T] get_None() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]) -FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T] NewFSharpToolTipText(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]]) -FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]) -FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]] Item -FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[T]] get_Item() -FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[T]: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpType: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpType: Boolean HasTypeDefinition -FSharp.Compiler.SourceCodeServices.FSharpType: Boolean IsAbbreviation -FSharp.Compiler.SourceCodeServices.FSharpType: Boolean IsAnonRecordType -FSharp.Compiler.SourceCodeServices.FSharpType: Boolean IsFunctionType -FSharp.Compiler.SourceCodeServices.FSharpType: Boolean IsGenericParameter -FSharp.Compiler.SourceCodeServices.FSharpType: Boolean IsNamedType -FSharp.Compiler.SourceCodeServices.FSharpType: Boolean IsStructTupleType -FSharp.Compiler.SourceCodeServices.FSharpType: Boolean IsTupleType -FSharp.Compiler.SourceCodeServices.FSharpType: Boolean IsUnresolved -FSharp.Compiler.SourceCodeServices.FSharpType: Boolean get_HasTypeDefinition() -FSharp.Compiler.SourceCodeServices.FSharpType: Boolean get_IsAbbreviation() -FSharp.Compiler.SourceCodeServices.FSharpType: Boolean get_IsAnonRecordType() -FSharp.Compiler.SourceCodeServices.FSharpType: Boolean get_IsFunctionType() -FSharp.Compiler.SourceCodeServices.FSharpType: Boolean get_IsGenericParameter() -FSharp.Compiler.SourceCodeServices.FSharpType: Boolean get_IsNamedType() -FSharp.Compiler.SourceCodeServices.FSharpType: Boolean get_IsStructTupleType() -FSharp.Compiler.SourceCodeServices.FSharpType: Boolean get_IsTupleType() -FSharp.Compiler.SourceCodeServices.FSharpType: Boolean get_IsUnresolved() -FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails AnonRecordTypeDetails -FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpAnonRecordTypeDetails get_AnonRecordTypeDetails() -FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpEntity NamedEntity -FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpEntity TypeDefinition -FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpEntity get_NamedEntity() -FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpEntity get_TypeDefinition() -FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpGenericParameter GenericParameter -FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpGenericParameter get_GenericParameter() -FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpParameter Prettify(FSharp.Compiler.SourceCodeServices.FSharpParameter) -FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpType AbbreviatedType -FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpType Instantiate(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpGenericParameter,FSharp.Compiler.SourceCodeServices.FSharpType]]) -FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpType Prettify(FSharp.Compiler.SourceCodeServices.FSharpType) -FSharp.Compiler.SourceCodeServices.FSharpType: FSharp.Compiler.SourceCodeServices.FSharpType get_AbbreviatedType() -FSharp.Compiler.SourceCodeServices.FSharpType: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpType: Internal.Utilities.StructuredFormat.Layout FormatLayout(FSharp.Compiler.SourceCodeServices.FSharpDisplayContext) -FSharp.Compiler.SourceCodeServices.FSharpType: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType] BaseType -FSharp.Compiler.SourceCodeServices.FSharpType: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_BaseType() -FSharp.Compiler.SourceCodeServices.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter] Prettify(System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]) -FSharp.Compiler.SourceCodeServices.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] AllInterfaces -FSharp.Compiler.SourceCodeServices.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] GenericArguments -FSharp.Compiler.SourceCodeServices.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] Prettify(System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType]) -FSharp.Compiler.SourceCodeServices.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_AllInterfaces() -FSharp.Compiler.SourceCodeServices.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpType] get_GenericArguments() -FSharp.Compiler.SourceCodeServices.FSharpType: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]] Prettify(System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]]) -FSharp.Compiler.SourceCodeServices.FSharpType: System.String Format(FSharp.Compiler.SourceCodeServices.FSharpDisplayContext) -FSharp.Compiler.SourceCodeServices.FSharpType: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpType: System.Tuple`2[System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]],FSharp.Compiler.SourceCodeServices.FSharpParameter] Prettify(System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpParameter]], FSharp.Compiler.SourceCodeServices.FSharpParameter) -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Boolean HasFields -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Boolean IsAccessible(FSharp.Compiler.SourceCodeServices.FSharpAccessibilityRights) -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Boolean IsEffectivelySameAs(FSharp.Compiler.SourceCodeServices.FSharpSymbol) -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Boolean IsExplicitlySuppressed -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Boolean IsUnresolved -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Boolean get_HasFields() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Boolean get_IsExplicitlySuppressed() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Boolean get_IsUnresolved() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: FSharp.Compiler.SourceCodeServices.FSharpAccessibility Accessibility -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: FSharp.Compiler.SourceCodeServices.FSharpAccessibility get_Accessibility() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: FSharp.Compiler.SourceCodeServices.FSharpAssembly Assembly -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: FSharp.Compiler.SourceCodeServices.FSharpAssembly get_Assembly() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: FSharp.Compiler.SourceCodeServices.FSharpType ReturnType -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: FSharp.Compiler.SourceCodeServices.FSharpType get_ReturnType() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Int32 GetEffectivelySameAsHash() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] DeclarationLocation -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] ImplementationLocation -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] SignatureLocation -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_DeclarationLocation() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_ImplementationLocation() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_SignatureLocation() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] Attributes -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] get_Attributes() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpField] UnionCaseFields -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.SourceCodeServices.FSharpField] get_UnionCaseFields() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] ElaboratedXmlDoc -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] XmlDoc -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] get_ElaboratedXmlDoc() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.Collections.Generic.IList`1[System.String] get_XmlDoc() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String CompiledName -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String DisplayName -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String FullName -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String Name -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String XmlDocSig -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String get_CompiledName() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String get_DisplayName() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String get_FullName() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String get_Name() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: System.String get_XmlDocSig() -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: range DeclarationLocation -FSharp.Compiler.SourceCodeServices.FSharpUnionCase: range get_DeclarationLocation() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Tags: Int32 None -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Tags: Int32 Text -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Tags: Int32 XmlDocFileSignature -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpXmlDoc) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Boolean IsNone -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Boolean IsText -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Boolean IsXmlDocFileSignature -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Boolean get_IsNone() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Boolean get_IsText() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Boolean get_IsXmlDocFileSignature() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpXmlDoc) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String[] elaboratedXmlLines -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String[] get_elaboratedXmlLines() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String[] get_unprocessedLines() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text: System.String[] unprocessedLines -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpXmlDoc) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean IsNone -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean IsText -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean IsXmlDocFileSignature -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean get_IsNone() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean get_IsText() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Boolean get_IsXmlDocFileSignature() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpXmlDoc) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: System.String Item1 -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: System.String Item2 -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: System.String ToString() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: System.String get_Item1() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature: System.String get_Item2() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean Equals(FSharp.Compiler.SourceCodeServices.FSharpXmlDoc) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean IsNone -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean IsText -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean IsXmlDocFileSignature -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean get_IsNone() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean get_IsText() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Boolean get_IsXmlDocFileSignature() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc NewText(System.String[], System.String[]) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc NewXmlDocFileSignature(System.String, System.String) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc None -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc get_None() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Tags -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+Text -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: FSharp.Compiler.SourceCodeServices.FSharpXmlDoc+XmlDocFileSignature -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.FSharpXmlDoc) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Int32 Tag -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.FSharpXmlDoc: System.String ToString() -FSharp.Compiler.SourceCodeServices.IAssemblyContentCache: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.AssemblyContentCacheEntry] TryGet(System.String) -FSharp.Compiler.SourceCodeServices.IAssemblyContentCache: Void Set(System.String, FSharp.Compiler.SourceCodeServices.AssemblyContentCacheEntry) -FSharp.Compiler.SourceCodeServices.InheritanceContext+Tags: Int32 Class -FSharp.Compiler.SourceCodeServices.InheritanceContext+Tags: Int32 Interface -FSharp.Compiler.SourceCodeServices.InheritanceContext+Tags: Int32 Unknown -FSharp.Compiler.SourceCodeServices.InheritanceContext: Boolean Equals(FSharp.Compiler.SourceCodeServices.InheritanceContext) -FSharp.Compiler.SourceCodeServices.InheritanceContext: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.InheritanceContext: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.InheritanceContext: Boolean IsClass -FSharp.Compiler.SourceCodeServices.InheritanceContext: Boolean IsInterface -FSharp.Compiler.SourceCodeServices.InheritanceContext: Boolean IsUnknown -FSharp.Compiler.SourceCodeServices.InheritanceContext: Boolean get_IsClass() -FSharp.Compiler.SourceCodeServices.InheritanceContext: Boolean get_IsInterface() -FSharp.Compiler.SourceCodeServices.InheritanceContext: Boolean get_IsUnknown() -FSharp.Compiler.SourceCodeServices.InheritanceContext: FSharp.Compiler.SourceCodeServices.InheritanceContext Class -FSharp.Compiler.SourceCodeServices.InheritanceContext: FSharp.Compiler.SourceCodeServices.InheritanceContext Interface -FSharp.Compiler.SourceCodeServices.InheritanceContext: FSharp.Compiler.SourceCodeServices.InheritanceContext Unknown -FSharp.Compiler.SourceCodeServices.InheritanceContext: FSharp.Compiler.SourceCodeServices.InheritanceContext get_Class() -FSharp.Compiler.SourceCodeServices.InheritanceContext: FSharp.Compiler.SourceCodeServices.InheritanceContext get_Interface() -FSharp.Compiler.SourceCodeServices.InheritanceContext: FSharp.Compiler.SourceCodeServices.InheritanceContext get_Unknown() -FSharp.Compiler.SourceCodeServices.InheritanceContext: FSharp.Compiler.SourceCodeServices.InheritanceContext+Tags -FSharp.Compiler.SourceCodeServices.InheritanceContext: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.InheritanceContext) -FSharp.Compiler.SourceCodeServices.InheritanceContext: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.InheritanceContext: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.InheritanceContext: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.InheritanceContext: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.InheritanceContext: Int32 Tag -FSharp.Compiler.SourceCodeServices.InheritanceContext: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.InheritanceContext: System.String ToString() -FSharp.Compiler.SourceCodeServices.InsertContext: Boolean Equals(FSharp.Compiler.SourceCodeServices.InsertContext) -FSharp.Compiler.SourceCodeServices.InsertContext: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.InsertContext: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.InsertContext: FSharp.Compiler.SourceCodeServices.ScopeKind ScopeKind -FSharp.Compiler.SourceCodeServices.InsertContext: FSharp.Compiler.SourceCodeServices.ScopeKind get_ScopeKind() -FSharp.Compiler.SourceCodeServices.InsertContext: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.InsertContext: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.InsertContext: System.String ToString() -FSharp.Compiler.SourceCodeServices.InsertContext: Void .ctor(FSharp.Compiler.SourceCodeServices.ScopeKind, pos) -FSharp.Compiler.SourceCodeServices.InsertContext: pos Pos -FSharp.Compiler.SourceCodeServices.InsertContext: pos get_Pos() -FSharp.Compiler.SourceCodeServices.Keywords: Boolean DoesIdentifierNeedQuotation(System.String) -FSharp.Compiler.SourceCodeServices.Keywords: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] KeywordsWithDescription -FSharp.Compiler.SourceCodeServices.Keywords: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] get_KeywordsWithDescription() -FSharp.Compiler.SourceCodeServices.Keywords: System.String NormalizeIdentifierBackticks(System.String) -FSharp.Compiler.SourceCodeServices.Keywords: System.String QuoteIdentifierIfNeeded(System.String) -FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexer: Void Lex(FSharp.Compiler.Text.ISourceText, Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexerFlags], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpMap`2[System.String,System.String]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexerFlags: FSharpLexerFlags Compiling -FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexerFlags: FSharpLexerFlags CompilingFSharpCore -FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexerFlags: FSharpLexerFlags Default -FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexerFlags: FSharpLexerFlags LightSyntaxOn -FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexerFlags: FSharpLexerFlags SkipTrivia -FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexerFlags: FSharpLexerFlags UseLexFilter -FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexerFlags: Int32 value__ -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: Boolean IsCommentTrivia -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: Boolean IsIdentifier -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: Boolean IsKeyword -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: Boolean IsNumericLiteral -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: Boolean IsStringLiteral -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: Boolean get_IsCommentTrivia() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: Boolean get_IsIdentifier() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: Boolean get_IsKeyword() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: Boolean get_IsNumericLiteral() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: Boolean get_IsStringLiteral() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: FSharpSyntaxTokenKind Kind -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: FSharpSyntaxTokenKind get_Kind() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: range Range -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken: range get_Range() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Abstract -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 AdjacentPrefixOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Ampersand -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 AmpersandAmpersand -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 And -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 As -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Asr -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Assert -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Bar -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 BarBar -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 BarRightBrace -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 BarRightBracket -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Base -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Begin -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 BigNumber -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Binder -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 ByteArray -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Char -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Class -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Colon -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 ColonColon -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 ColonEquals -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 ColonGreater -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 ColonQuestionMark -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 ColonQuestionMarkGreater -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Comma -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 CommentTrivia -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Const -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Constraint -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Constructor -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Decimal -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Default -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Delegate -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Do -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 DoBang -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Dollar -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Done -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Dot -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 DotDot -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 DotDotHat -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 DownTo -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Downcast -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Elif -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Else -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 End -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Equals -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Exception -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Extern -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 False -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Finally -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Fixed -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 For -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Fun -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Function -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 FunkyOperatorName -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Global -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Greater -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 GreaterBarRightBracket -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 GreaterRightBracket -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Hash -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 HashElse -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 HashEndIf -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 HashIf -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 HashLight -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 HashLine -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 HighPrecedenceBracketApp -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 HighPrecedenceParenthesisApp -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 HighPrecedenceTypeApp -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Identifier -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Ieee32 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Ieee64 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 If -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 In -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InactiveCode -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixAmpersandOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixAsr -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixAtHatOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixBarOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixCompareOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixLand -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixLor -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixLsl -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixLsr -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixLxor -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixMod -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixStarDivideModuloOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 InfixStarStarOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Inherit -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Inline -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Instance -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Int16 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Int32 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Int32DotDot -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Int64 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Int8 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Interface -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Internal -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 JoinIn -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 KeywordString -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Lazy -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 LeftArrow -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 LeftBrace -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 LeftBraceBar -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 LeftBracket -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 LeftBracketBar -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 LeftBracketLess -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 LeftParenthesis -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 LeftParenthesisStarRightParenthesis -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 LeftQuote -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Less -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Let -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 LineCommentTrivia -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Match -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 MatchBang -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Member -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Minus -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Module -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Mutable -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Namespace -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 NativeInt -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 New -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 None -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Null -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Of -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideAssert -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideBinder -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideBlockBegin -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideBlockEnd -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideBlockSep -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideDeclEnd -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideDo -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideDoBang -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideElse -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideEnd -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideFun -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideFunction -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideInterfaceMember -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideLazy -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideLet -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideReset -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideRightBlockEnd -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideThen -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 OffsideWith -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Open -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Or -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Override -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 PercentOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 PlusMinusOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 PrefixOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Private -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Public -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 QuestionMark -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 QuestionMarkQuestionMark -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Quote -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Rec -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Reserved -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 RightArrow -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 RightBrace -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 RightBracket -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 RightParenthesis -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 RightQuote -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 RightQuoteDot -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Semicolon -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 SemicolonSemicolon -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Sig -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Star -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Static -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 String -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 StringText -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Struct -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Then -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 To -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 True -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Try -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Type -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 UInt16 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 UInt32 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 UInt64 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 UInt8 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 UNativeInt -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Underscore -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Upcast -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Val -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Void -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 When -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 While -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 WhitespaceTrivia -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 With -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 Yield -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags: Int32 YieldBang -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean Equals(FSharpSyntaxTokenKind) -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsAbstract -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsAdjacentPrefixOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsAmpersand -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsAmpersandAmpersand -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsAnd -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsAs -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsAsr -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsAssert -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsBar -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsBarBar -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsBarRightBrace -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsBarRightBracket -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsBase -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsBegin -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsBigNumber -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsBinder -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsByteArray -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsChar -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsClass -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsColon -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsColonColon -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsColonEquals -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsColonGreater -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsColonQuestionMark -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsColonQuestionMarkGreater -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsComma -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsCommentTrivia -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsConst -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsConstraint -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsConstructor -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDecimal -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDefault -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDelegate -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDo -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDoBang -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDollar -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDone -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDot -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDotDot -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDotDotHat -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDownTo -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsDowncast -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsElif -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsElse -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsEnd -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsEquals -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsException -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsExtern -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsFalse -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsFinally -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsFixed -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsFor -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsFun -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsFunction -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsFunkyOperatorName -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsGlobal -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsGreater -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsGreaterBarRightBracket -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsGreaterRightBracket -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsHash -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsHashElse -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsHashEndIf -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsHashIf -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsHashLight -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsHashLine -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsHighPrecedenceBracketApp -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsHighPrecedenceParenthesisApp -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsHighPrecedenceTypeApp -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsIdentifier -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsIeee32 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsIeee64 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsIf -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsIn -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInactiveCode -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixAmpersandOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixAsr -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixAtHatOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixBarOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixCompareOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixLand -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixLor -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixLsl -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixLsr -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixLxor -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixMod -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixStarDivideModuloOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInfixStarStarOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInherit -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInline -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInstance -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInt16 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInt32 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInt32DotDot -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInt64 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInt8 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInterface -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsInternal -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsJoinIn -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsKeywordString -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLazy -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLeftArrow -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLeftBrace -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLeftBraceBar -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLeftBracket -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLeftBracketBar -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLeftBracketLess -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLeftParenthesis -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLeftParenthesisStarRightParenthesis -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLeftQuote -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLess -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLet -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsLineCommentTrivia -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsMatch -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsMatchBang -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsMember -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsMinus -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsModule -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsMutable -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsNamespace -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsNativeInt -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsNew -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsNone -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsNull -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOf -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideAssert -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideBinder -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideBlockBegin -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideBlockEnd -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideBlockSep -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideDeclEnd -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideDo -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideDoBang -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideElse -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideEnd -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideFun -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideFunction -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideInterfaceMember -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideLazy -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideLet -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideReset -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideRightBlockEnd -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideThen -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOffsideWith -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOpen -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOr -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsOverride -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsPercentOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsPlusMinusOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsPrefixOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsPrivate -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsPublic -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsQuestionMark -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsQuestionMarkQuestionMark -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsQuote -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsRec -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsReserved -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsRightArrow -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsRightBrace -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsRightBracket -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsRightParenthesis -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsRightQuote -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsRightQuoteDot -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsSemicolon -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsSemicolonSemicolon -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsSig -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsStar -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsStatic -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsString -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsStringText -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsStruct -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsThen -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsTo -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsTrue -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsTry -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsType -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsUInt16 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsUInt32 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsUInt64 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsUInt8 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsUNativeInt -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsUnderscore -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsUpcast -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsVal -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsVoid -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsWhen -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsWhile -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsWhitespaceTrivia -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsWith -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsYield -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean IsYieldBang -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsAbstract() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsAdjacentPrefixOperator() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsAmpersand() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsAmpersandAmpersand() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsAnd() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsAs() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsAsr() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsAssert() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsBar() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsBarBar() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsBarRightBrace() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsBarRightBracket() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsBase() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsBegin() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsBigNumber() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsBinder() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsByteArray() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsChar() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsClass() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsColon() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsColonColon() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsColonEquals() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsColonGreater() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsColonQuestionMark() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsColonQuestionMarkGreater() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsComma() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsCommentTrivia() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsConst() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsConstraint() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsConstructor() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDecimal() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDefault() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDelegate() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDo() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDoBang() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDollar() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDone() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDot() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDotDot() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDotDotHat() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDownTo() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsDowncast() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsElif() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsElse() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsEnd() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsEquals() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsException() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsExtern() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsFalse() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsFinally() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsFixed() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsFor() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsFun() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsFunction() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsFunkyOperatorName() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsGlobal() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsGreater() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsGreaterBarRightBracket() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsGreaterRightBracket() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsHash() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsHashElse() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsHashEndIf() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsHashIf() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsHashLight() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsHashLine() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsHighPrecedenceBracketApp() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsHighPrecedenceParenthesisApp() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsHighPrecedenceTypeApp() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsIdentifier() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsIeee32() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsIeee64() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsIf() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsIn() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInactiveCode() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixAmpersandOperator() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixAsr() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixAtHatOperator() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixBarOperator() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixCompareOperator() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixLand() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixLor() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixLsl() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixLsr() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixLxor() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixMod() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixStarDivideModuloOperator() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInfixStarStarOperator() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInherit() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInline() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInstance() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInt16() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInt32() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInt32DotDot() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInt64() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInt8() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInterface() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsInternal() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsJoinIn() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsKeywordString() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLazy() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLeftArrow() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLeftBrace() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLeftBraceBar() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLeftBracket() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLeftBracketBar() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLeftBracketLess() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLeftParenthesis() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLeftParenthesisStarRightParenthesis() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLeftQuote() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLess() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLet() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsLineCommentTrivia() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsMatch() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsMatchBang() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsMember() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsMinus() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsModule() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsMutable() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsNamespace() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsNativeInt() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsNew() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsNone() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsNull() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOf() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideAssert() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideBinder() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideBlockBegin() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideBlockEnd() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideBlockSep() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideDeclEnd() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideDo() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideDoBang() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideElse() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideEnd() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideFun() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideFunction() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideInterfaceMember() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideLazy() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideLet() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideReset() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideRightBlockEnd() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideThen() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOffsideWith() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOpen() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOr() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsOverride() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsPercentOperator() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsPlusMinusOperator() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsPrefixOperator() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsPrivate() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsPublic() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsQuestionMark() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsQuestionMarkQuestionMark() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsQuote() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsRec() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsReserved() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsRightArrow() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsRightBrace() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsRightBracket() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsRightParenthesis() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsRightQuote() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsRightQuoteDot() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsSemicolon() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsSemicolonSemicolon() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsSig() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsStar() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsStatic() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsString() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsStringText() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsStruct() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsThen() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsTo() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsTrue() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsTry() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsType() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsUInt16() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsUInt32() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsUInt64() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsUInt8() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsUNativeInt() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsUnderscore() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsUpcast() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsVal() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsVoid() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsWhen() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsWhile() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsWhitespaceTrivia() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsWith() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsYield() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Boolean get_IsYieldBang() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind+Tags -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Abstract -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind AdjacentPrefixOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Ampersand -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind AmpersandAmpersand -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind And -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind As -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Asr -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Assert -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Bar -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind BarBar -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind BarRightBrace -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind BarRightBracket -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Base -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Begin -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind BigNumber -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Binder -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind ByteArray -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Char -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Class -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Colon -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind ColonColon -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind ColonEquals -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind ColonGreater -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind ColonQuestionMark -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind ColonQuestionMarkGreater -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Comma -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind CommentTrivia -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Const -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Constraint -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Constructor -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Decimal -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Default -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Delegate -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Do -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind DoBang -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Dollar -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Done -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Dot -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind DotDot -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind DotDotHat -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind DownTo -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Downcast -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Elif -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Else -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind End -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Equals -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Exception -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Extern -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind False -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Finally -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Fixed -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind For -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Fun -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Function -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind FunkyOperatorName -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Global -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Greater -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind GreaterBarRightBracket -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind GreaterRightBracket -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Hash -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind HashElse -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind HashEndIf -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind HashIf -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind HashLight -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind HashLine -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind HighPrecedenceBracketApp -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind HighPrecedenceParenthesisApp -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind HighPrecedenceTypeApp -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Identifier -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Ieee32 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Ieee64 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind If -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind In -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InactiveCode -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixAmpersandOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixAsr -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixAtHatOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixBarOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixCompareOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixLand -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixLor -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixLsl -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixLsr -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixLxor -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixMod -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixStarDivideModuloOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind InfixStarStarOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Inherit -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Inline -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Instance -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Int16 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Int32 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Int32DotDot -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Int64 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Int8 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Interface -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Internal -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind JoinIn -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind KeywordString -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Lazy -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind LeftArrow -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind LeftBrace -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind LeftBraceBar -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind LeftBracket -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind LeftBracketBar -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind LeftBracketLess -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind LeftParenthesis -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind LeftParenthesisStarRightParenthesis -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind LeftQuote -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Less -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Let -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind LineCommentTrivia -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Match -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind MatchBang -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Member -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Minus -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Module -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Mutable -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Namespace -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind NativeInt -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind New -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind None -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Null -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Of -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideAssert -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideBinder -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideBlockBegin -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideBlockEnd -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideBlockSep -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideDeclEnd -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideDo -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideDoBang -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideElse -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideEnd -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideFun -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideFunction -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideInterfaceMember -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideLazy -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideLet -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideReset -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideRightBlockEnd -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideThen -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind OffsideWith -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Open -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Or -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Override -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind PercentOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind PlusMinusOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind PrefixOperator -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Private -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Public -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind QuestionMark -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind QuestionMarkQuestionMark -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Quote -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Rec -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Reserved -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind RightArrow -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind RightBrace -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind RightBracket -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind RightParenthesis -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind RightQuote -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind RightQuoteDot -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Semicolon -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind SemicolonSemicolon -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Sig -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Star -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Static -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind String -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind StringText -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Struct -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Then -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind To -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind True -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Try -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Type -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind UInt16 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind UInt32 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind UInt64 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind UInt8 -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind UNativeInt -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Underscore -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Upcast -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Val -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Void -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind When -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind While -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind WhitespaceTrivia -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind With -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind Yield -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind YieldBang -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Abstract() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_AdjacentPrefixOperator() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Ampersand() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_AmpersandAmpersand() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_And() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_As() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Asr() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Assert() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Bar() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_BarBar() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_BarRightBrace() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_BarRightBracket() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Base() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Begin() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_BigNumber() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Binder() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_ByteArray() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Char() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Class() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Colon() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_ColonColon() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_ColonEquals() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_ColonGreater() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_ColonQuestionMark() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_ColonQuestionMarkGreater() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Comma() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_CommentTrivia() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Const() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Constraint() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Constructor() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Decimal() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Default() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Delegate() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Do() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_DoBang() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Dollar() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Done() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Dot() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_DotDot() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_DotDotHat() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_DownTo() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Downcast() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Elif() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Else() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_End() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Equals() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Exception() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Extern() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_False() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Finally() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Fixed() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_For() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Fun() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Function() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_FunkyOperatorName() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Global() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Greater() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_GreaterBarRightBracket() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_GreaterRightBracket() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Hash() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_HashElse() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_HashEndIf() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_HashIf() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_HashLight() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_HashLine() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_HighPrecedenceBracketApp() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_HighPrecedenceParenthesisApp() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_HighPrecedenceTypeApp() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Identifier() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Ieee32() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Ieee64() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_If() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_In() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InactiveCode() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixAmpersandOperator() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixAsr() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixAtHatOperator() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixBarOperator() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixCompareOperator() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixLand() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixLor() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixLsl() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixLsr() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixLxor() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixMod() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixStarDivideModuloOperator() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_InfixStarStarOperator() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Inherit() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Inline() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Instance() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Int16() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Int32() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Int32DotDot() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Int64() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Int8() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Interface() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Internal() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_JoinIn() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_KeywordString() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Lazy() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_LeftArrow() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_LeftBrace() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_LeftBraceBar() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_LeftBracket() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_LeftBracketBar() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_LeftBracketLess() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_LeftParenthesis() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_LeftParenthesisStarRightParenthesis() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_LeftQuote() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Less() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Let() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_LineCommentTrivia() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Match() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_MatchBang() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Member() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Minus() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Module() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Mutable() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Namespace() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_NativeInt() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_New() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_None() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Null() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Of() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideAssert() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideBinder() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideBlockBegin() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideBlockEnd() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideBlockSep() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideDeclEnd() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideDo() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideDoBang() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideElse() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideEnd() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideFun() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideFunction() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideInterfaceMember() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideLazy() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideLet() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideReset() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideRightBlockEnd() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideThen() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_OffsideWith() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Open() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Or() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Override() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_PercentOperator() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_PlusMinusOperator() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_PrefixOperator() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Private() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Public() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_QuestionMark() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_QuestionMarkQuestionMark() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Quote() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Rec() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Reserved() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_RightArrow() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_RightBrace() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_RightBracket() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_RightParenthesis() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_RightQuote() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_RightQuoteDot() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Semicolon() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_SemicolonSemicolon() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Sig() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Star() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Static() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_String() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_StringText() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Struct() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Then() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_To() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_True() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Try() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Type() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_UInt16() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_UInt32() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_UInt64() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_UInt8() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_UNativeInt() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Underscore() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Upcast() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Val() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Void() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_When() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_While() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_WhitespaceTrivia() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_With() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_Yield() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: FSharpSyntaxTokenKind get_YieldBang() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Int32 CompareTo(FSharpSyntaxTokenKind) -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Int32 Tag -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind: System.String ToString() -FSharp.Compiler.SourceCodeServices.Lexer: FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexer -FSharp.Compiler.SourceCodeServices.Lexer: FSharp.Compiler.SourceCodeServices.Lexer+FSharpLexerFlags -FSharp.Compiler.SourceCodeServices.Lexer: FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxToken -FSharp.Compiler.SourceCodeServices.Lexer: FSharp.Compiler.SourceCodeServices.Lexer+FSharpSyntaxTokenKind -FSharp.Compiler.SourceCodeServices.LookupType+Tags: Int32 Fuzzy -FSharp.Compiler.SourceCodeServices.LookupType+Tags: Int32 Precise -FSharp.Compiler.SourceCodeServices.LookupType: Boolean Equals(FSharp.Compiler.SourceCodeServices.LookupType) -FSharp.Compiler.SourceCodeServices.LookupType: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.LookupType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.LookupType: Boolean IsFuzzy -FSharp.Compiler.SourceCodeServices.LookupType: Boolean IsPrecise -FSharp.Compiler.SourceCodeServices.LookupType: Boolean get_IsFuzzy() -FSharp.Compiler.SourceCodeServices.LookupType: Boolean get_IsPrecise() -FSharp.Compiler.SourceCodeServices.LookupType: FSharp.Compiler.SourceCodeServices.LookupType Fuzzy -FSharp.Compiler.SourceCodeServices.LookupType: FSharp.Compiler.SourceCodeServices.LookupType Precise -FSharp.Compiler.SourceCodeServices.LookupType: FSharp.Compiler.SourceCodeServices.LookupType get_Fuzzy() -FSharp.Compiler.SourceCodeServices.LookupType: FSharp.Compiler.SourceCodeServices.LookupType get_Precise() -FSharp.Compiler.SourceCodeServices.LookupType: FSharp.Compiler.SourceCodeServices.LookupType+Tags -FSharp.Compiler.SourceCodeServices.LookupType: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.LookupType) -FSharp.Compiler.SourceCodeServices.LookupType: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.LookupType: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.LookupType: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.LookupType: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.LookupType: Int32 Tag -FSharp.Compiler.SourceCodeServices.LookupType: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.LookupType: System.String ToString() -FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Boolean Equals(FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent) -FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Boolean Resolved -FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Boolean get_Resolved() -FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent) -FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: System.String Ident -FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: System.String ToString() -FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: System.String get_Ident() -FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent: Void .ctor(System.String, Boolean) -FSharp.Compiler.SourceCodeServices.ModuleKind: Boolean Equals(FSharp.Compiler.SourceCodeServices.ModuleKind) -FSharp.Compiler.SourceCodeServices.ModuleKind: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.ModuleKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ModuleKind: Boolean HasModuleSuffix -FSharp.Compiler.SourceCodeServices.ModuleKind: Boolean IsAutoOpen -FSharp.Compiler.SourceCodeServices.ModuleKind: Boolean get_HasModuleSuffix() -FSharp.Compiler.SourceCodeServices.ModuleKind: Boolean get_IsAutoOpen() -FSharp.Compiler.SourceCodeServices.ModuleKind: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ModuleKind) -FSharp.Compiler.SourceCodeServices.ModuleKind: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.ModuleKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.ModuleKind: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.ModuleKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ModuleKind: System.String ToString() -FSharp.Compiler.SourceCodeServices.ModuleKind: Void .ctor(Boolean, Boolean) -FSharp.Compiler.SourceCodeServices.NavigateTo+Container: Boolean Equals(Container) -FSharp.Compiler.SourceCodeServices.NavigateTo+Container: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.NavigateTo+Container: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.NavigateTo+Container: ContainerType Type -FSharp.Compiler.SourceCodeServices.NavigateTo+Container: ContainerType get_Type() -FSharp.Compiler.SourceCodeServices.NavigateTo+Container: Int32 CompareTo(Container) -FSharp.Compiler.SourceCodeServices.NavigateTo+Container: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.NavigateTo+Container: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.NavigateTo+Container: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.NavigateTo+Container: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.NavigateTo+Container: System.String Name -FSharp.Compiler.SourceCodeServices.NavigateTo+Container: System.String ToString() -FSharp.Compiler.SourceCodeServices.NavigateTo+Container: System.String get_Name() -FSharp.Compiler.SourceCodeServices.NavigateTo+Container: Void .ctor(ContainerType, System.String) -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType+Tags: Int32 Exception -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType+Tags: Int32 File -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType+Tags: Int32 Module -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType+Tags: Int32 Namespace -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType+Tags: Int32 Type -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean Equals(ContainerType) -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean IsException -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean IsFile -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean IsModule -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean IsNamespace -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean IsType -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean get_IsException() -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean get_IsFile() -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean get_IsModule() -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean get_IsNamespace() -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Boolean get_IsType() -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: ContainerType Exception -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: ContainerType File -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: ContainerType Module -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: ContainerType Namespace -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: ContainerType Type -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: ContainerType get_Exception() -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: ContainerType get_File() -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: ContainerType get_Module() -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: ContainerType get_Namespace() -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: ContainerType get_Type() -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType+Tags -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Int32 CompareTo(ContainerType) -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Int32 Tag -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType: System.String ToString() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: Boolean Equals(NavigableItem) -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: Boolean IsSignature -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: Boolean get_IsSignature() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: Container Container -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: Container get_Container() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: NavigableItemKind Kind -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: NavigableItemKind get_Kind() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: System.String Name -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: System.String ToString() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: System.String get_Name() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: Void .ctor(System.String, range, Boolean, NavigableItemKind, Container) -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: range Range -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem: range get_Range() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 Constructor -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 EnumCase -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 Exception -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 Field -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 Member -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 Module -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 ModuleAbbreviation -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 ModuleValue -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 Property -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 Type -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags: Int32 UnionCase -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean Equals(NavigableItemKind) -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsConstructor -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsEnumCase -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsException -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsField -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsMember -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsModule -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsModuleAbbreviation -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsModuleValue -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsProperty -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsType -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean IsUnionCase -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsConstructor() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsEnumCase() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsException() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsField() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsMember() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsModule() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsModuleAbbreviation() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsModuleValue() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsProperty() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsType() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Boolean get_IsUnionCase() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind+Tags -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Int32 CompareTo(NavigableItemKind) -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Int32 Tag -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind Constructor -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind EnumCase -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind Exception -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind Field -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind Member -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind Module -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind ModuleAbbreviation -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind ModuleValue -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind Property -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind Type -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind UnionCase -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_Constructor() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_EnumCase() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_Exception() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_Field() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_Member() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_Module() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_ModuleAbbreviation() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_ModuleValue() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_Property() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_Type() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: NavigableItemKind get_UnionCase() -FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind: System.String ToString() -FSharp.Compiler.SourceCodeServices.NavigateTo: FSharp.Compiler.SourceCodeServices.NavigateTo+Container -FSharp.Compiler.SourceCodeServices.NavigateTo: FSharp.Compiler.SourceCodeServices.NavigateTo+ContainerType -FSharp.Compiler.SourceCodeServices.NavigateTo: FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItem -FSharp.Compiler.SourceCodeServices.NavigateTo: FSharp.Compiler.SourceCodeServices.NavigateTo+NavigableItemKind -FSharp.Compiler.SourceCodeServices.NavigateTo: NavigableItem[] getNavigableItems(ParsedInput) -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint+Tags: Int32 Nearest -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint+Tags: Int32 TopLevel -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Boolean Equals(FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint) -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Boolean IsNearest -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Boolean IsTopLevel -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Boolean get_IsNearest() -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Boolean get_IsTopLevel() -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint Nearest -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint TopLevel -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint get_Nearest() -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint get_TopLevel() -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint+Tags -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint) -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Int32 Tag -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint: System.String ToString() -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Boolean Equals(FSharp.Compiler.SourceCodeServices.ParamTypeSymbol) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Boolean IsByref -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Boolean IsParam -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Boolean get_IsByref() -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Boolean get_IsParam() -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: FSharp.Compiler.SourceCodeServices.ExternalType Item -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: FSharp.Compiler.SourceCodeServices.ExternalType get_Item() -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ParamTypeSymbol) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Int32 Tag -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref: System.String ToString() -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Boolean Equals(FSharp.Compiler.SourceCodeServices.ParamTypeSymbol) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Boolean IsByref -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Boolean IsParam -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Boolean get_IsByref() -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Boolean get_IsParam() -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: FSharp.Compiler.SourceCodeServices.ExternalType Item -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: FSharp.Compiler.SourceCodeServices.ExternalType get_Item() -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ParamTypeSymbol) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Int32 Tag -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param: System.String ToString() -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Tags: Int32 Byref -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Tags: Int32 Param -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Boolean Equals(FSharp.Compiler.SourceCodeServices.ParamTypeSymbol) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Boolean IsByref -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Boolean IsParam -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Boolean get_IsByref() -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Boolean get_IsParam() -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: FSharp.Compiler.SourceCodeServices.ParamTypeSymbol NewByref(FSharp.Compiler.SourceCodeServices.ExternalType) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: FSharp.Compiler.SourceCodeServices.ParamTypeSymbol NewParam(FSharp.Compiler.SourceCodeServices.ExternalType) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Byref -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Param -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: FSharp.Compiler.SourceCodeServices.ParamTypeSymbol+Tags -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ParamTypeSymbol) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Int32 Tag -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.ParamTypeSymbol: System.String ToString() -FSharp.Compiler.SourceCodeServices.ParsedInput: FSharp.Compiler.SourceCodeServices.InsertContext findNearestPointToInsertOpenDeclaration(Int32, ParsedInput, System.String[], FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint) -FSharp.Compiler.SourceCodeServices.ParsedInput: Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`4[Microsoft.FSharp.Core.FSharpOption`1[System.String[]],Microsoft.FSharp.Core.FSharpOption`1[System.String[]],Microsoft.FSharp.Core.FSharpOption`1[System.String[]],System.String[]],System.Tuple`2[FSharp.Compiler.SourceCodeServices.Entity,FSharp.Compiler.SourceCodeServices.InsertContext][]] tryFindInsertionContext(Int32, ParsedInput, FSharp.Compiler.SourceCodeServices.MaybeUnresolvedIdent[], FSharp.Compiler.SourceCodeServices.OpenStatementInsertionPoint) -FSharp.Compiler.SourceCodeServices.ParsedInput: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident]] getLongIdentAt(ParsedInput, pos) -FSharp.Compiler.SourceCodeServices.ParsedInput: pos adjustInsertionPoint(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String], FSharp.Compiler.SourceCodeServices.InsertContext) -FSharp.Compiler.SourceCodeServices.PrettyNaming: Boolean IsIdentifierPartCharacter(Char) -FSharp.Compiler.SourceCodeServices.PrettyNaming: Boolean IsLongIdentifierPartCharacter(Char) -FSharp.Compiler.SourceCodeServices.PrettyNaming: Boolean IsOperatorName(System.String) -FSharp.Compiler.SourceCodeServices.PrettyNaming: Microsoft.FSharp.Collections.FSharpList`1[System.String] GetLongNameFromString(System.String) -FSharp.Compiler.SourceCodeServices.PrettyNaming: Microsoft.FSharp.Collections.FSharpList`1[System.String] KeywordNames -FSharp.Compiler.SourceCodeServices.PrettyNaming: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_KeywordNames() -FSharp.Compiler.SourceCodeServices.PrettyNaming: System.String FormatAndOtherOverloadsString(Int32) -FSharp.Compiler.SourceCodeServices.PrettyNaming: System.String QuoteIdentifierIfNeeded(System.String) -FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Boolean Equals(FSharp.Compiler.SourceCodeServices.RecordContext) -FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Boolean IsConstructor -FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Boolean IsCopyOnUpdate -FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Boolean IsNew -FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Boolean get_IsConstructor() -FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Boolean get_IsCopyOnUpdate() -FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Boolean get_IsNew() -FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Int32 Tag -FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: System.String Item -FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: System.String ToString() -FSharp.Compiler.SourceCodeServices.RecordContext+Constructor: System.String get_Item() -FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Boolean Equals(FSharp.Compiler.SourceCodeServices.RecordContext) -FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Boolean IsConstructor -FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Boolean IsCopyOnUpdate -FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Boolean IsNew -FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Boolean get_IsConstructor() -FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Boolean get_IsCopyOnUpdate() -FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Boolean get_IsNew() -FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Int32 Tag -FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: System.String ToString() -FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] Item2 -FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] get_Item2() -FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: range Item1 -FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate: range get_Item1() -FSharp.Compiler.SourceCodeServices.RecordContext+New: Boolean Equals(FSharp.Compiler.SourceCodeServices.RecordContext) -FSharp.Compiler.SourceCodeServices.RecordContext+New: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.RecordContext+New: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.RecordContext+New: Boolean IsConstructor -FSharp.Compiler.SourceCodeServices.RecordContext+New: Boolean IsCopyOnUpdate -FSharp.Compiler.SourceCodeServices.RecordContext+New: Boolean IsNew -FSharp.Compiler.SourceCodeServices.RecordContext+New: Boolean get_IsConstructor() -FSharp.Compiler.SourceCodeServices.RecordContext+New: Boolean get_IsCopyOnUpdate() -FSharp.Compiler.SourceCodeServices.RecordContext+New: Boolean get_IsNew() -FSharp.Compiler.SourceCodeServices.RecordContext+New: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.RecordContext+New: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.RecordContext+New: Int32 Tag -FSharp.Compiler.SourceCodeServices.RecordContext+New: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.RecordContext+New: System.String ToString() -FSharp.Compiler.SourceCodeServices.RecordContext+New: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] Item -FSharp.Compiler.SourceCodeServices.RecordContext+New: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]] get_Item() -FSharp.Compiler.SourceCodeServices.RecordContext+Tags: Int32 Constructor -FSharp.Compiler.SourceCodeServices.RecordContext+Tags: Int32 CopyOnUpdate -FSharp.Compiler.SourceCodeServices.RecordContext+Tags: Int32 New -FSharp.Compiler.SourceCodeServices.RecordContext: Boolean Equals(FSharp.Compiler.SourceCodeServices.RecordContext) -FSharp.Compiler.SourceCodeServices.RecordContext: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.RecordContext: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.RecordContext: Boolean IsConstructor -FSharp.Compiler.SourceCodeServices.RecordContext: Boolean IsCopyOnUpdate -FSharp.Compiler.SourceCodeServices.RecordContext: Boolean IsNew -FSharp.Compiler.SourceCodeServices.RecordContext: Boolean get_IsConstructor() -FSharp.Compiler.SourceCodeServices.RecordContext: Boolean get_IsCopyOnUpdate() -FSharp.Compiler.SourceCodeServices.RecordContext: Boolean get_IsNew() -FSharp.Compiler.SourceCodeServices.RecordContext: FSharp.Compiler.SourceCodeServices.RecordContext NewConstructor(System.String) -FSharp.Compiler.SourceCodeServices.RecordContext: FSharp.Compiler.SourceCodeServices.RecordContext NewCopyOnUpdate(range, System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]]) -FSharp.Compiler.SourceCodeServices.RecordContext: FSharp.Compiler.SourceCodeServices.RecordContext NewNew(System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.String],Microsoft.FSharp.Core.FSharpOption`1[System.String]]) -FSharp.Compiler.SourceCodeServices.RecordContext: FSharp.Compiler.SourceCodeServices.RecordContext+Constructor -FSharp.Compiler.SourceCodeServices.RecordContext: FSharp.Compiler.SourceCodeServices.RecordContext+CopyOnUpdate -FSharp.Compiler.SourceCodeServices.RecordContext: FSharp.Compiler.SourceCodeServices.RecordContext+New -FSharp.Compiler.SourceCodeServices.RecordContext: FSharp.Compiler.SourceCodeServices.RecordContext+Tags -FSharp.Compiler.SourceCodeServices.RecordContext: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.RecordContext: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.RecordContext: Int32 Tag -FSharp.Compiler.SourceCodeServices.RecordContext: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.RecordContext: System.String ToString() -FSharp.Compiler.SourceCodeServices.ScopeKind+Tags: Int32 HashDirective -FSharp.Compiler.SourceCodeServices.ScopeKind+Tags: Int32 Namespace -FSharp.Compiler.SourceCodeServices.ScopeKind+Tags: Int32 NestedModule -FSharp.Compiler.SourceCodeServices.ScopeKind+Tags: Int32 OpenDeclaration -FSharp.Compiler.SourceCodeServices.ScopeKind+Tags: Int32 TopModule -FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean Equals(FSharp.Compiler.SourceCodeServices.ScopeKind) -FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean IsHashDirective -FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean IsNamespace -FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean IsNestedModule -FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean IsOpenDeclaration -FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean IsTopModule -FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean get_IsHashDirective() -FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean get_IsNamespace() -FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean get_IsNestedModule() -FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean get_IsOpenDeclaration() -FSharp.Compiler.SourceCodeServices.ScopeKind: Boolean get_IsTopModule() -FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind HashDirective -FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind Namespace -FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind NestedModule -FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind OpenDeclaration -FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind TopModule -FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind get_HashDirective() -FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind get_Namespace() -FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind get_NestedModule() -FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind get_OpenDeclaration() -FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind get_TopModule() -FSharp.Compiler.SourceCodeServices.ScopeKind: FSharp.Compiler.SourceCodeServices.ScopeKind+Tags -FSharp.Compiler.SourceCodeServices.ScopeKind: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.ScopeKind) -FSharp.Compiler.SourceCodeServices.ScopeKind: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.ScopeKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.ScopeKind: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.ScopeKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.ScopeKind: Int32 Tag -FSharp.Compiler.SourceCodeServices.ScopeKind: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.ScopeKind: System.String ToString() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 ComputationExpression -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 ConstructorForReferenceType -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 ConstructorForValueType -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Delegate -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 DisposableLocalValue -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 DisposableTopLevelValue -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 DisposableType -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Enumeration -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Event -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Exception -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 ExtensionMethod -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Field -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Function -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Interface -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 IntrinsicFunction -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Literal -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 LocalValue -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Method -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Module -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 MutableRecordField -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 MutableVar -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 NamedArgument -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Namespace -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Operator -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Plaintext -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Printf -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Property -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 RecordField -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 RecordFieldAsFunction -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 ReferenceType -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Type -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 TypeArgument -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 TypeDef -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 UnionCase -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 UnionCaseField -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 Value -FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags: Int32 ValueType -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean Equals(FSharp.Compiler.SourceCodeServices.SemanticClassificationType) -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsComputationExpression -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsConstructorForReferenceType -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsConstructorForValueType -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsDelegate -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsDisposableLocalValue -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsDisposableTopLevelValue -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsDisposableType -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsEnumeration -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsEvent -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsException -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsExtensionMethod -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsField -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsFunction -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsInterface -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsIntrinsicFunction -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsLiteral -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsLocalValue -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsMethod -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsModule -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsMutableRecordField -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsMutableVar -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsNamedArgument -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsNamespace -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsOperator -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsPlaintext -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsPrintf -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsProperty -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsRecordField -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsRecordFieldAsFunction -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsReferenceType -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsType -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsTypeArgument -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsTypeDef -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsUnionCase -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsUnionCaseField -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsValue -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean IsValueType -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsComputationExpression() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsConstructorForReferenceType() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsConstructorForValueType() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsDelegate() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsDisposableLocalValue() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsDisposableTopLevelValue() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsDisposableType() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsEnumeration() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsEvent() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsException() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsExtensionMethod() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsField() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsFunction() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsInterface() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsIntrinsicFunction() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsLiteral() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsLocalValue() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsMethod() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsModule() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsMutableRecordField() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsMutableVar() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsNamedArgument() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsNamespace() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsOperator() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsPlaintext() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsPrintf() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsProperty() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsRecordField() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsRecordFieldAsFunction() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsReferenceType() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsType() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsTypeArgument() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsTypeDef() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsUnionCase() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsUnionCaseField() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsValue() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Boolean get_IsValueType() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType ComputationExpression -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType ConstructorForReferenceType -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType ConstructorForValueType -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Delegate -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType DisposableLocalValue -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType DisposableTopLevelValue -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType DisposableType -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Enumeration -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Event -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Exception -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType ExtensionMethod -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Field -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Function -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Interface -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType IntrinsicFunction -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Literal -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType LocalValue -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Method -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Module -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType MutableRecordField -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType MutableVar -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType NamedArgument -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Namespace -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Operator -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Plaintext -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Printf -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Property -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType RecordField -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType RecordFieldAsFunction -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType ReferenceType -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Type -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType TypeArgument -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType TypeDef -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType UnionCase -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType UnionCaseField -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType Value -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType ValueType -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_ComputationExpression() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_ConstructorForReferenceType() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_ConstructorForValueType() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Delegate() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_DisposableLocalValue() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_DisposableTopLevelValue() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_DisposableType() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Enumeration() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Event() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Exception() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_ExtensionMethod() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Field() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Function() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Interface() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_IntrinsicFunction() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Literal() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_LocalValue() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Method() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Module() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_MutableRecordField() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_MutableVar() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_NamedArgument() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Namespace() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Operator() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Plaintext() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Printf() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Property() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_RecordField() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_RecordFieldAsFunction() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_ReferenceType() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Type() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_TypeArgument() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_TypeDef() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_UnionCase() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_UnionCaseField() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_Value() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType get_ValueType() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: FSharp.Compiler.SourceCodeServices.SemanticClassificationType+Tags -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.SemanticClassificationType) -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Int32 Tag -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.SemanticClassificationType: System.String ToString() -FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: Boolean Equals(SimplifiableRange) -FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: System.String RelativeName -FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: System.String ToString() -FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: System.String get_RelativeName() -FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: Void .ctor(range, System.String) -FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: range Range -FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange: range get_Range() -FSharp.Compiler.SourceCodeServices.SimplifyNames: FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange -FSharp.Compiler.SourceCodeServices.SimplifyNames: Microsoft.FSharp.Control.FSharpAsync`1[System.Collections.Generic.IEnumerable`1[FSharp.Compiler.SourceCodeServices.SimplifyNames+SimplifiableRange]] getSimplifiableNames(FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String]) -FSharp.Compiler.SourceCodeServices.SourceFile: Boolean IsCompilable(System.String) -FSharp.Compiler.SourceCodeServices.SourceFile: Boolean MustBeSingleFileProject(System.String) -FSharp.Compiler.SourceCodeServices.Structure+Collapse+Tags: Int32 Below -FSharp.Compiler.SourceCodeServices.Structure+Collapse+Tags: Int32 Same -FSharp.Compiler.SourceCodeServices.Structure+Collapse: Boolean Equals(Collapse) -FSharp.Compiler.SourceCodeServices.Structure+Collapse: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.Structure+Collapse: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.Structure+Collapse: Boolean IsBelow -FSharp.Compiler.SourceCodeServices.Structure+Collapse: Boolean IsSame -FSharp.Compiler.SourceCodeServices.Structure+Collapse: Boolean get_IsBelow() -FSharp.Compiler.SourceCodeServices.Structure+Collapse: Boolean get_IsSame() -FSharp.Compiler.SourceCodeServices.Structure+Collapse: Collapse Below -FSharp.Compiler.SourceCodeServices.Structure+Collapse: Collapse Same -FSharp.Compiler.SourceCodeServices.Structure+Collapse: Collapse get_Below() -FSharp.Compiler.SourceCodeServices.Structure+Collapse: Collapse get_Same() -FSharp.Compiler.SourceCodeServices.Structure+Collapse: FSharp.Compiler.SourceCodeServices.Structure+Collapse+Tags -FSharp.Compiler.SourceCodeServices.Structure+Collapse: Int32 CompareTo(Collapse) -FSharp.Compiler.SourceCodeServices.Structure+Collapse: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.Structure+Collapse: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.Structure+Collapse: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.Structure+Collapse: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.Structure+Collapse: Int32 Tag -FSharp.Compiler.SourceCodeServices.Structure+Collapse: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.Structure+Collapse: System.String ToString() -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 ArrayOrList -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Attribute -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Comment -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 CompExpr -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 CompExprInternal -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Do -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 ElseInIfThenElse -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 EnumCase -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 FinallyInTryFinally -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 For -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 HashDirective -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 IfThenElse -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Interface -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Lambda -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 LetOrUse -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 LetOrUseBang -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Match -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 MatchBang -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 MatchClause -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 MatchLambda -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Member -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Module -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Namespace -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 New -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 ObjExpr -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Open -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Quote -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Record -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 RecordDefn -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 RecordField -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 SpecialFunc -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 ThenInIfThenElse -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 TryFinally -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 TryInTryFinally -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 TryInTryWith -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 TryWith -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Tuple -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Type -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 TypeExtension -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 UnionCase -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 UnionDefn -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 Val -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 While -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 WithInTryWith -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 XmlDocComment -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 YieldOrReturn -FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags: Int32 YieldOrReturnBang -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean Equals(Scope) -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsArrayOrList -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsAttribute -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsComment -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsCompExpr -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsCompExprInternal -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsDo -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsElseInIfThenElse -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsEnumCase -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsFinallyInTryFinally -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsFor -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsHashDirective -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsIfThenElse -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsInterface -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsLambda -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsLetOrUse -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsLetOrUseBang -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsMatch -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsMatchBang -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsMatchClause -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsMatchLambda -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsMember -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsModule -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsNamespace -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsNew -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsObjExpr -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsOpen -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsQuote -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsRecord -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsRecordDefn -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsRecordField -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsSpecialFunc -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsThenInIfThenElse -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsTryFinally -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsTryInTryFinally -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsTryInTryWith -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsTryWith -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsTuple -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsType -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsTypeExtension -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsUnionCase -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsUnionDefn -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsVal -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsWhile -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsWithInTryWith -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsXmlDocComment -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsYieldOrReturn -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean IsYieldOrReturnBang -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsArrayOrList() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsAttribute() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsComment() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsCompExpr() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsCompExprInternal() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsDo() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsElseInIfThenElse() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsEnumCase() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsFinallyInTryFinally() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsFor() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsHashDirective() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsIfThenElse() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsInterface() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsLambda() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsLetOrUse() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsMatch() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsMatchBang() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsMatchClause() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsMatchLambda() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsMember() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsModule() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsNamespace() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsNew() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsObjExpr() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsOpen() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsQuote() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsRecord() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsRecordDefn() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsRecordField() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsSpecialFunc() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsThenInIfThenElse() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsTryFinally() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsTryInTryFinally() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsTryInTryWith() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsTryWith() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsTuple() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsType() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsTypeExtension() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsUnionCase() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsUnionDefn() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsVal() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsWhile() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsWithInTryWith() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsXmlDocComment() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Boolean get_IsYieldOrReturnBang() -FSharp.Compiler.SourceCodeServices.Structure+Scope: FSharp.Compiler.SourceCodeServices.Structure+Scope+Tags -FSharp.Compiler.SourceCodeServices.Structure+Scope: Int32 CompareTo(Scope) -FSharp.Compiler.SourceCodeServices.Structure+Scope: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.Structure+Scope: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.Structure+Scope: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.Structure+Scope: Int32 Tag -FSharp.Compiler.SourceCodeServices.Structure+Scope: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope ArrayOrList -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Attribute -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Comment -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope CompExpr -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope CompExprInternal -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Do -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope ElseInIfThenElse -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope EnumCase -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope FinallyInTryFinally -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope For -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope HashDirective -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope IfThenElse -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Interface -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Lambda -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope LetOrUse -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope LetOrUseBang -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Match -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope MatchBang -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope MatchClause -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope MatchLambda -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Member -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Module -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Namespace -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope New -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope ObjExpr -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Open -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Quote -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Record -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope RecordDefn -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope RecordField -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope SpecialFunc -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope ThenInIfThenElse -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope TryFinally -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope TryInTryFinally -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope TryInTryWith -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope TryWith -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Tuple -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Type -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope TypeExtension -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope UnionCase -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope UnionDefn -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope Val -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope While -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope WithInTryWith -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope XmlDocComment -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope YieldOrReturn -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope YieldOrReturnBang -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_ArrayOrList() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Attribute() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Comment() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_CompExpr() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_CompExprInternal() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Do() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_ElseInIfThenElse() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_EnumCase() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_FinallyInTryFinally() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_For() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_HashDirective() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_IfThenElse() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Interface() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Lambda() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_LetOrUse() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_LetOrUseBang() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Match() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_MatchBang() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_MatchClause() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_MatchLambda() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Member() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Module() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Namespace() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_New() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_ObjExpr() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Open() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Quote() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Record() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_RecordDefn() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_RecordField() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_SpecialFunc() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_ThenInIfThenElse() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_TryFinally() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_TryInTryFinally() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_TryInTryWith() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_TryWith() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Tuple() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Type() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_TypeExtension() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_UnionCase() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_UnionDefn() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_Val() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_While() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_WithInTryWith() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_XmlDocComment() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_YieldOrReturn() -FSharp.Compiler.SourceCodeServices.Structure+Scope: Scope get_YieldOrReturnBang() -FSharp.Compiler.SourceCodeServices.Structure+Scope: System.String ToString() -FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: Boolean Equals(ScopeRange) -FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: Collapse Collapse -FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: Collapse get_Collapse() -FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: Scope Scope -FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: Scope get_Scope() -FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: System.String ToString() -FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: Void .ctor(Scope, Collapse, range, range) -FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: range CollapseRange -FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: range Range -FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: range get_CollapseRange() -FSharp.Compiler.SourceCodeServices.Structure+ScopeRange: range get_Range() -FSharp.Compiler.SourceCodeServices.Structure: FSharp.Compiler.SourceCodeServices.Structure+Collapse -FSharp.Compiler.SourceCodeServices.Structure: FSharp.Compiler.SourceCodeServices.Structure+Scope -FSharp.Compiler.SourceCodeServices.Structure: FSharp.Compiler.SourceCodeServices.Structure+ScopeRange -FSharp.Compiler.SourceCodeServices.Structure: System.Collections.Generic.IEnumerable`1[FSharp.Compiler.SourceCodeServices.Structure+ScopeRange] getOutliningRanges(System.String[], ParsedInput) -FSharp.Compiler.SourceCodeServices.Symbol: Boolean hasAttribute[T](System.Collections.Generic.IEnumerable`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute]) -FSharp.Compiler.SourceCodeServices.Symbol: Boolean hasModuleSuffixAttribute(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Symbol: Boolean isAttribute[T](FSharp.Compiler.SourceCodeServices.FSharpAttribute) -FSharp.Compiler.SourceCodeServices.Symbol: Boolean isOperator(System.String) -FSharp.Compiler.SourceCodeServices.Symbol: Boolean isUnnamedUnionCaseField(FSharp.Compiler.SourceCodeServices.FSharpField) -FSharp.Compiler.SourceCodeServices.Symbol: FSharp.Compiler.SourceCodeServices.FSharpType getAbbreviatedType(FSharp.Compiler.SourceCodeServices.FSharpType) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpActivePatternCase] |ActivePatternCase|_|(FSharp.Compiler.SourceCodeServices.FSharpSymbol) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute] tryGetAttribute[T](System.Collections.Generic.IEnumerable`1[FSharp.Compiler.SourceCodeServices.FSharpAttribute]) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] |Constructor|_|(FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpEntity] |TypeWithDefinition|_|(FSharp.Compiler.SourceCodeServices.FSharpType) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpField] |RecordField|_|(FSharp.Compiler.SourceCodeServices.FSharpSymbol) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue] |MemberFunctionOrValue|_|(FSharp.Compiler.SourceCodeServices.FSharpSymbol) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType] |AbbreviatedType|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpUnionCase] |UnionCase|_|(FSharp.Compiler.SourceCodeServices.FSharpSymbol) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |AbstractClass|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Array|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Attribute|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |ByRef|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Class|_|[a](FSharp.Compiler.SourceCodeServices.FSharpEntity, FSharp.Compiler.SourceCodeServices.FSharpEntity, a) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Delegate|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Enum|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Event|_|(FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |ExtensionMember|_|(FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |FSharpException|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |FSharpModule|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |FSharpType|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |FunctionType|_|(FSharp.Compiler.SourceCodeServices.FSharpType) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Function|_|(Boolean, FSharp.Compiler.SourceCodeServices.FSharpMemberOrFunctionOrValue) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Interface|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |MutableVar|_|(FSharp.Compiler.SourceCodeServices.FSharpSymbol) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Namespace|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Parameter|_|(FSharp.Compiler.SourceCodeServices.FSharpSymbol) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Pattern|_|(FSharp.Compiler.SourceCodeServices.FSharpSymbol) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |ProvidedAndErasedType|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |ProvidedType|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Record|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |RefCell|_|(FSharp.Compiler.SourceCodeServices.FSharpType) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Tuple|_|(FSharp.Compiler.SourceCodeServices.FSharpType) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |UnionType|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |ValueType|_|(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpField,FSharp.Compiler.SourceCodeServices.FSharpType]] |Field|_|(FSharp.Compiler.SourceCodeServices.FSharpSymbol) -FSharp.Compiler.SourceCodeServices.Symbol: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.SourceCodeServices.FSharpEntity,FSharp.Compiler.SourceCodeServices.FSharpEntity,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType]]] |FSharpEntity|_|(FSharp.Compiler.SourceCodeServices.FSharpSymbol) -FSharp.Compiler.SourceCodeServices.Symbol: System.Tuple`2[FSharp.Compiler.SourceCodeServices.FSharpEntity,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.FSharpType]] getEntityAbbreviatedType(FSharp.Compiler.SourceCodeServices.FSharpEntity) -FSharp.Compiler.SourceCodeServices.Tooltips: FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[System.String] ToFSharpToolTipElement(FSharp.Compiler.SourceCodeServices.FSharpToolTipElement`1[Internal.Utilities.StructuredFormat.Layout]) -FSharp.Compiler.SourceCodeServices.Tooltips: FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[System.String] ToFSharpToolTipText(FSharp.Compiler.SourceCodeServices.FSharpToolTipText`1[Internal.Utilities.StructuredFormat.Layout]) -FSharp.Compiler.SourceCodeServices.UnresolvedReferencesSet: Boolean Equals(FSharp.Compiler.SourceCodeServices.UnresolvedReferencesSet) -FSharp.Compiler.SourceCodeServices.UnresolvedReferencesSet: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.UnresolvedReferencesSet: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.UnresolvedReferencesSet: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.UnresolvedReferencesSet: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.UnresolvedReferencesSet: System.String ToString() -FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: Boolean Equals(FSharp.Compiler.SourceCodeServices.UnresolvedSymbol) -FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.UnresolvedSymbol) -FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: System.String DisplayName -FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: System.String FullName -FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: System.String ToString() -FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: System.String get_DisplayName() -FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: System.String get_FullName() -FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: System.String[] Namespace -FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: System.String[] get_Namespace() -FSharp.Compiler.SourceCodeServices.UnresolvedSymbol: Void .ctor(System.String, System.String, System.String[]) -FSharp.Compiler.SourceCodeServices.UntypedParseImpl: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] GetRangeOfExprLeftOfDot(pos, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+ParsedInput]) -FSharp.Compiler.SourceCodeServices.UntypedParseImpl: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.CompletionContext] TryGetCompletionContext(pos, ParsedInput, System.String) -FSharp.Compiler.SourceCodeServices.UntypedParseImpl: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SourceCodeServices.EntityKind] GetEntityKind(pos, ParsedInput) -FSharp.Compiler.SourceCodeServices.UntypedParseImpl: Microsoft.FSharp.Core.FSharpOption`1[System.String] TryFindExpressionIslandInPosition(pos, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+ParsedInput]) -FSharp.Compiler.SourceCodeServices.UntypedParseImpl: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Range+pos,System.Boolean]] TryFindExpressionASTLeftOfDotLeftOfCursor(pos, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+ParsedInput]) -FSharp.Compiler.SourceCodeServices.UntypedParseImpl: System.String[] GetFullNameOfSmallestModuleOrNamespaceAtPoint(ParsedInput, pos) -FSharp.Compiler.SourceCodeServices.UnusedDeclarations: Microsoft.FSharp.Control.FSharpAsync`1[System.Collections.Generic.IEnumerable`1[FSharp.Compiler.Range+range]] getUnusedDeclarations(FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults, Boolean) -FSharp.Compiler.SourceCodeServices.UnusedOpens: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range]] getUnusedOpens(FSharp.Compiler.SourceCodeServices.FSharpCheckFileResults, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String]) -FSharp.Compiler.SourceCodeServices.XmlDocComment: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] isBlank(System.String) -FSharp.Compiler.SourceCodeServices.XmlDocParser: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SourceCodeServices.XmlDocable] getXmlDocables(FSharp.Compiler.Text.ISourceText, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+ParsedInput]) -FSharp.Compiler.SourceCodeServices.XmlDocable: Boolean Equals(FSharp.Compiler.SourceCodeServices.XmlDocable) -FSharp.Compiler.SourceCodeServices.XmlDocable: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.XmlDocable: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.XmlDocable: FSharp.Compiler.SourceCodeServices.XmlDocable NewXmlDocable(Int32, Int32, Microsoft.FSharp.Collections.FSharpList`1[System.String]) -FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.XmlDocable) -FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 Tag -FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 get_indent() -FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 get_line() -FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 indent -FSharp.Compiler.SourceCodeServices.XmlDocable: Int32 line -FSharp.Compiler.SourceCodeServices.XmlDocable: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_paramNames() -FSharp.Compiler.SourceCodeServices.XmlDocable: Microsoft.FSharp.Collections.FSharpList`1[System.String] paramNames -FSharp.Compiler.SourceCodeServices.XmlDocable: System.String ToString() -FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Tags: Int32 No -FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Tags: Int32 Yes -FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Boolean Equals(DebugPointAtFinally) -FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Boolean IsNo -FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Boolean IsYes -FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Boolean get_IsNo() -FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Boolean get_IsYes() -FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Int32 Tag -FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: System.String ToString() -FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: range get_range() -FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes: range range -FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Boolean Equals(DebugPointAtFinally) -FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Boolean IsNo -FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Boolean IsYes -FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Boolean get_IsNo() -FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Boolean get_IsYes() -FSharp.Compiler.SyntaxTree+DebugPointAtFinally: DebugPointAtFinally NewYes(range) -FSharp.Compiler.SyntaxTree+DebugPointAtFinally: DebugPointAtFinally No -FSharp.Compiler.SyntaxTree+DebugPointAtFinally: DebugPointAtFinally get_No() -FSharp.Compiler.SyntaxTree+DebugPointAtFinally: FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Tags -FSharp.Compiler.SyntaxTree+DebugPointAtFinally: FSharp.Compiler.SyntaxTree+DebugPointAtFinally+Yes -FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Int32 Tag -FSharp.Compiler.SyntaxTree+DebugPointAtFinally: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+DebugPointAtFinally: System.String ToString() -FSharp.Compiler.SyntaxTree+DebugPointAtFor+Tags: Int32 No -FSharp.Compiler.SyntaxTree+DebugPointAtFor+Tags: Int32 Yes -FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Boolean Equals(DebugPointAtFor) -FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Boolean IsNo -FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Boolean IsYes -FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Boolean get_IsNo() -FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Boolean get_IsYes() -FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Int32 Tag -FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: System.String ToString() -FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: range get_range() -FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes: range range -FSharp.Compiler.SyntaxTree+DebugPointAtFor: Boolean Equals(DebugPointAtFor) -FSharp.Compiler.SyntaxTree+DebugPointAtFor: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+DebugPointAtFor: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtFor: Boolean IsNo -FSharp.Compiler.SyntaxTree+DebugPointAtFor: Boolean IsYes -FSharp.Compiler.SyntaxTree+DebugPointAtFor: Boolean get_IsNo() -FSharp.Compiler.SyntaxTree+DebugPointAtFor: Boolean get_IsYes() -FSharp.Compiler.SyntaxTree+DebugPointAtFor: DebugPointAtFor NewYes(range) -FSharp.Compiler.SyntaxTree+DebugPointAtFor: DebugPointAtFor No -FSharp.Compiler.SyntaxTree+DebugPointAtFor: DebugPointAtFor get_No() -FSharp.Compiler.SyntaxTree+DebugPointAtFor: FSharp.Compiler.SyntaxTree+DebugPointAtFor+Tags -FSharp.Compiler.SyntaxTree+DebugPointAtFor: FSharp.Compiler.SyntaxTree+DebugPointAtFor+Yes -FSharp.Compiler.SyntaxTree+DebugPointAtFor: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+DebugPointAtFor: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtFor: Int32 Tag -FSharp.Compiler.SyntaxTree+DebugPointAtFor: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+DebugPointAtFor: System.String ToString() -FSharp.Compiler.SyntaxTree+DebugPointAtSequential+Tags: Int32 Both -FSharp.Compiler.SyntaxTree+DebugPointAtSequential+Tags: Int32 ExprOnly -FSharp.Compiler.SyntaxTree+DebugPointAtSequential+Tags: Int32 StmtOnly -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Boolean Equals(DebugPointAtSequential) -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Boolean IsBoth -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Boolean IsExprOnly -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Boolean IsStmtOnly -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Boolean get_IsBoth() -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Boolean get_IsExprOnly() -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Boolean get_IsStmtOnly() -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: DebugPointAtSequential Both -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: DebugPointAtSequential ExprOnly -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: DebugPointAtSequential StmtOnly -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: DebugPointAtSequential get_Both() -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: DebugPointAtSequential get_ExprOnly() -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: DebugPointAtSequential get_StmtOnly() -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: FSharp.Compiler.SyntaxTree+DebugPointAtSequential+Tags -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Int32 CompareTo(DebugPointAtSequential) -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Int32 CompareTo(System.Object) -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Int32 Tag -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+DebugPointAtSequential: System.String ToString() -FSharp.Compiler.SyntaxTree+DebugPointAtTry+Tags: Int32 Body -FSharp.Compiler.SyntaxTree+DebugPointAtTry+Tags: Int32 No -FSharp.Compiler.SyntaxTree+DebugPointAtTry+Tags: Int32 Yes -FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Boolean Equals(DebugPointAtTry) -FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Boolean IsBody -FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Boolean IsNo -FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Boolean IsYes -FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Boolean get_IsBody() -FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Boolean get_IsNo() -FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Boolean get_IsYes() -FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Int32 Tag -FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: System.String ToString() -FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: range get_range() -FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes: range range -FSharp.Compiler.SyntaxTree+DebugPointAtTry: Boolean Equals(DebugPointAtTry) -FSharp.Compiler.SyntaxTree+DebugPointAtTry: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+DebugPointAtTry: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtTry: Boolean IsBody -FSharp.Compiler.SyntaxTree+DebugPointAtTry: Boolean IsNo -FSharp.Compiler.SyntaxTree+DebugPointAtTry: Boolean IsYes -FSharp.Compiler.SyntaxTree+DebugPointAtTry: Boolean get_IsBody() -FSharp.Compiler.SyntaxTree+DebugPointAtTry: Boolean get_IsNo() -FSharp.Compiler.SyntaxTree+DebugPointAtTry: Boolean get_IsYes() -FSharp.Compiler.SyntaxTree+DebugPointAtTry: DebugPointAtTry Body -FSharp.Compiler.SyntaxTree+DebugPointAtTry: DebugPointAtTry NewYes(range) -FSharp.Compiler.SyntaxTree+DebugPointAtTry: DebugPointAtTry No -FSharp.Compiler.SyntaxTree+DebugPointAtTry: DebugPointAtTry get_Body() -FSharp.Compiler.SyntaxTree+DebugPointAtTry: DebugPointAtTry get_No() -FSharp.Compiler.SyntaxTree+DebugPointAtTry: FSharp.Compiler.SyntaxTree+DebugPointAtTry+Tags -FSharp.Compiler.SyntaxTree+DebugPointAtTry: FSharp.Compiler.SyntaxTree+DebugPointAtTry+Yes -FSharp.Compiler.SyntaxTree+DebugPointAtTry: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+DebugPointAtTry: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtTry: Int32 Tag -FSharp.Compiler.SyntaxTree+DebugPointAtTry: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+DebugPointAtTry: System.String ToString() -FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Tags: Int32 No -FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Tags: Int32 Yes -FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Boolean Equals(DebugPointAtWhile) -FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Boolean IsNo -FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Boolean IsYes -FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Boolean get_IsNo() -FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Boolean get_IsYes() -FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Int32 Tag -FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: System.String ToString() -FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: range get_range() -FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes: range range -FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Boolean Equals(DebugPointAtWhile) -FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Boolean IsNo -FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Boolean IsYes -FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Boolean get_IsNo() -FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Boolean get_IsYes() -FSharp.Compiler.SyntaxTree+DebugPointAtWhile: DebugPointAtWhile NewYes(range) -FSharp.Compiler.SyntaxTree+DebugPointAtWhile: DebugPointAtWhile No -FSharp.Compiler.SyntaxTree+DebugPointAtWhile: DebugPointAtWhile get_No() -FSharp.Compiler.SyntaxTree+DebugPointAtWhile: FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Tags -FSharp.Compiler.SyntaxTree+DebugPointAtWhile: FSharp.Compiler.SyntaxTree+DebugPointAtWhile+Yes -FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Int32 Tag -FSharp.Compiler.SyntaxTree+DebugPointAtWhile: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+DebugPointAtWhile: System.String ToString() -FSharp.Compiler.SyntaxTree+DebugPointAtWith+Tags: Int32 No -FSharp.Compiler.SyntaxTree+DebugPointAtWith+Tags: Int32 Yes -FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Boolean Equals(DebugPointAtWith) -FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Boolean IsNo -FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Boolean IsYes -FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Boolean get_IsNo() -FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Boolean get_IsYes() -FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Int32 Tag -FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: System.String ToString() -FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: range get_range() -FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes: range range -FSharp.Compiler.SyntaxTree+DebugPointAtWith: Boolean Equals(DebugPointAtWith) -FSharp.Compiler.SyntaxTree+DebugPointAtWith: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+DebugPointAtWith: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtWith: Boolean IsNo -FSharp.Compiler.SyntaxTree+DebugPointAtWith: Boolean IsYes -FSharp.Compiler.SyntaxTree+DebugPointAtWith: Boolean get_IsNo() -FSharp.Compiler.SyntaxTree+DebugPointAtWith: Boolean get_IsYes() -FSharp.Compiler.SyntaxTree+DebugPointAtWith: DebugPointAtWith NewYes(range) -FSharp.Compiler.SyntaxTree+DebugPointAtWith: DebugPointAtWith No -FSharp.Compiler.SyntaxTree+DebugPointAtWith: DebugPointAtWith get_No() -FSharp.Compiler.SyntaxTree+DebugPointAtWith: FSharp.Compiler.SyntaxTree+DebugPointAtWith+Tags -FSharp.Compiler.SyntaxTree+DebugPointAtWith: FSharp.Compiler.SyntaxTree+DebugPointAtWith+Yes -FSharp.Compiler.SyntaxTree+DebugPointAtWith: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+DebugPointAtWith: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointAtWith: Int32 Tag -FSharp.Compiler.SyntaxTree+DebugPointAtWith: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+DebugPointAtWith: System.String ToString() -FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean Equals(DebugPointForBinding) -FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean IsDebugPointAtBinding -FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean IsNoDebugPointAtDoBinding -FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean IsNoDebugPointAtInvisibleBinding -FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean IsNoDebugPointAtLetBinding -FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean IsNoDebugPointAtStickyBinding -FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean get_IsDebugPointAtBinding() -FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean get_IsNoDebugPointAtDoBinding() -FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean get_IsNoDebugPointAtInvisibleBinding() -FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean get_IsNoDebugPointAtLetBinding() -FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Boolean get_IsNoDebugPointAtStickyBinding() -FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: DebugPointForBinding Combine(DebugPointForBinding) -FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Int32 Tag -FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: System.String ToString() -FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: range get_range() -FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding: range range -FSharp.Compiler.SyntaxTree+DebugPointForBinding+Tags: Int32 DebugPointAtBinding -FSharp.Compiler.SyntaxTree+DebugPointForBinding+Tags: Int32 NoDebugPointAtDoBinding -FSharp.Compiler.SyntaxTree+DebugPointForBinding+Tags: Int32 NoDebugPointAtInvisibleBinding -FSharp.Compiler.SyntaxTree+DebugPointForBinding+Tags: Int32 NoDebugPointAtLetBinding -FSharp.Compiler.SyntaxTree+DebugPointForBinding+Tags: Int32 NoDebugPointAtStickyBinding -FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean Equals(DebugPointForBinding) -FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean IsDebugPointAtBinding -FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean IsNoDebugPointAtDoBinding -FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean IsNoDebugPointAtInvisibleBinding -FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean IsNoDebugPointAtLetBinding -FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean IsNoDebugPointAtStickyBinding -FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean get_IsDebugPointAtBinding() -FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean get_IsNoDebugPointAtDoBinding() -FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean get_IsNoDebugPointAtInvisibleBinding() -FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean get_IsNoDebugPointAtLetBinding() -FSharp.Compiler.SyntaxTree+DebugPointForBinding: Boolean get_IsNoDebugPointAtStickyBinding() -FSharp.Compiler.SyntaxTree+DebugPointForBinding: DebugPointForBinding Combine(DebugPointForBinding) -FSharp.Compiler.SyntaxTree+DebugPointForBinding: DebugPointForBinding NewDebugPointAtBinding(range) -FSharp.Compiler.SyntaxTree+DebugPointForBinding: DebugPointForBinding NoDebugPointAtDoBinding -FSharp.Compiler.SyntaxTree+DebugPointForBinding: DebugPointForBinding NoDebugPointAtInvisibleBinding -FSharp.Compiler.SyntaxTree+DebugPointForBinding: DebugPointForBinding NoDebugPointAtLetBinding -FSharp.Compiler.SyntaxTree+DebugPointForBinding: DebugPointForBinding NoDebugPointAtStickyBinding -FSharp.Compiler.SyntaxTree+DebugPointForBinding: DebugPointForBinding get_NoDebugPointAtDoBinding() -FSharp.Compiler.SyntaxTree+DebugPointForBinding: DebugPointForBinding get_NoDebugPointAtInvisibleBinding() -FSharp.Compiler.SyntaxTree+DebugPointForBinding: DebugPointForBinding get_NoDebugPointAtLetBinding() -FSharp.Compiler.SyntaxTree+DebugPointForBinding: DebugPointForBinding get_NoDebugPointAtStickyBinding() -FSharp.Compiler.SyntaxTree+DebugPointForBinding: FSharp.Compiler.SyntaxTree+DebugPointForBinding+DebugPointAtBinding -FSharp.Compiler.SyntaxTree+DebugPointForBinding: FSharp.Compiler.SyntaxTree+DebugPointForBinding+Tags -FSharp.Compiler.SyntaxTree+DebugPointForBinding: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+DebugPointForBinding: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointForBinding: Int32 Tag -FSharp.Compiler.SyntaxTree+DebugPointForBinding: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+DebugPointForBinding: System.String ToString() -FSharp.Compiler.SyntaxTree+DebugPointForTarget+Tags: Int32 No -FSharp.Compiler.SyntaxTree+DebugPointForTarget+Tags: Int32 Yes -FSharp.Compiler.SyntaxTree+DebugPointForTarget: Boolean Equals(DebugPointForTarget) -FSharp.Compiler.SyntaxTree+DebugPointForTarget: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+DebugPointForTarget: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointForTarget: Boolean IsNo -FSharp.Compiler.SyntaxTree+DebugPointForTarget: Boolean IsYes -FSharp.Compiler.SyntaxTree+DebugPointForTarget: Boolean get_IsNo() -FSharp.Compiler.SyntaxTree+DebugPointForTarget: Boolean get_IsYes() -FSharp.Compiler.SyntaxTree+DebugPointForTarget: DebugPointForTarget No -FSharp.Compiler.SyntaxTree+DebugPointForTarget: DebugPointForTarget Yes -FSharp.Compiler.SyntaxTree+DebugPointForTarget: DebugPointForTarget get_No() -FSharp.Compiler.SyntaxTree+DebugPointForTarget: DebugPointForTarget get_Yes() -FSharp.Compiler.SyntaxTree+DebugPointForTarget: FSharp.Compiler.SyntaxTree+DebugPointForTarget+Tags -FSharp.Compiler.SyntaxTree+DebugPointForTarget: Int32 CompareTo(DebugPointForTarget) -FSharp.Compiler.SyntaxTree+DebugPointForTarget: Int32 CompareTo(System.Object) -FSharp.Compiler.SyntaxTree+DebugPointForTarget: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SyntaxTree+DebugPointForTarget: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+DebugPointForTarget: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+DebugPointForTarget: Int32 Tag -FSharp.Compiler.SyntaxTree+DebugPointForTarget: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+DebugPointForTarget: System.String ToString() -FSharp.Compiler.SyntaxTree+ExprAtomicFlag: ExprAtomicFlag Atomic -FSharp.Compiler.SyntaxTree+ExprAtomicFlag: ExprAtomicFlag NonAtomic -FSharp.Compiler.SyntaxTree+ExprAtomicFlag: Int32 value__ -FSharp.Compiler.SyntaxTree+Ident: System.String ToString() -FSharp.Compiler.SyntaxTree+Ident: System.String get_idText() -FSharp.Compiler.SyntaxTree+Ident: System.String idText -FSharp.Compiler.SyntaxTree+Ident: Void .ctor(System.String, range) -FSharp.Compiler.SyntaxTree+Ident: range get_idRange() -FSharp.Compiler.SyntaxTree+Ident: range idRange -FSharp.Compiler.SyntaxTree+LongIdentWithDots: Boolean ThereIsAnExtraDotAtTheEnd -FSharp.Compiler.SyntaxTree+LongIdentWithDots: Boolean get_ThereIsAnExtraDotAtTheEnd() -FSharp.Compiler.SyntaxTree+LongIdentWithDots: Int32 Tag -FSharp.Compiler.SyntaxTree+LongIdentWithDots: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+LongIdentWithDots: LongIdentWithDots NewLongIdentWithDots(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range]) -FSharp.Compiler.SyntaxTree+LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range] dotms -FSharp.Compiler.SyntaxTree+LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range] get_dotms() -FSharp.Compiler.SyntaxTree+LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] Lid -FSharp.Compiler.SyntaxTree+LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_Lid() -FSharp.Compiler.SyntaxTree+LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_id() -FSharp.Compiler.SyntaxTree+LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] id -FSharp.Compiler.SyntaxTree+LongIdentWithDots: System.String ToString() -FSharp.Compiler.SyntaxTree+LongIdentWithDots: range Range -FSharp.Compiler.SyntaxTree+LongIdentWithDots: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+LongIdentWithDots: range get_Range() -FSharp.Compiler.SyntaxTree+LongIdentWithDots: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+MemberFlags: Boolean Equals(MemberFlags) -FSharp.Compiler.SyntaxTree+MemberFlags: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+MemberFlags: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+MemberFlags: Boolean IsDispatchSlot -FSharp.Compiler.SyntaxTree+MemberFlags: Boolean IsFinal -FSharp.Compiler.SyntaxTree+MemberFlags: Boolean IsInstance -FSharp.Compiler.SyntaxTree+MemberFlags: Boolean IsOverrideOrExplicitImpl -FSharp.Compiler.SyntaxTree+MemberFlags: Boolean get_IsDispatchSlot() -FSharp.Compiler.SyntaxTree+MemberFlags: Boolean get_IsFinal() -FSharp.Compiler.SyntaxTree+MemberFlags: Boolean get_IsInstance() -FSharp.Compiler.SyntaxTree+MemberFlags: Boolean get_IsOverrideOrExplicitImpl() -FSharp.Compiler.SyntaxTree+MemberFlags: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+MemberFlags: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+MemberFlags: MemberKind MemberKind -FSharp.Compiler.SyntaxTree+MemberFlags: MemberKind get_MemberKind() -FSharp.Compiler.SyntaxTree+MemberFlags: System.String ToString() -FSharp.Compiler.SyntaxTree+MemberFlags: Void .ctor(Boolean, Boolean, Boolean, Boolean, MemberKind) -FSharp.Compiler.SyntaxTree+MemberKind+Tags: Int32 ClassConstructor -FSharp.Compiler.SyntaxTree+MemberKind+Tags: Int32 Constructor -FSharp.Compiler.SyntaxTree+MemberKind+Tags: Int32 Member -FSharp.Compiler.SyntaxTree+MemberKind+Tags: Int32 PropertyGet -FSharp.Compiler.SyntaxTree+MemberKind+Tags: Int32 PropertyGetSet -FSharp.Compiler.SyntaxTree+MemberKind+Tags: Int32 PropertySet -FSharp.Compiler.SyntaxTree+MemberKind: Boolean Equals(MemberKind) -FSharp.Compiler.SyntaxTree+MemberKind: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+MemberKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+MemberKind: Boolean IsClassConstructor -FSharp.Compiler.SyntaxTree+MemberKind: Boolean IsConstructor -FSharp.Compiler.SyntaxTree+MemberKind: Boolean IsMember -FSharp.Compiler.SyntaxTree+MemberKind: Boolean IsPropertyGet -FSharp.Compiler.SyntaxTree+MemberKind: Boolean IsPropertyGetSet -FSharp.Compiler.SyntaxTree+MemberKind: Boolean IsPropertySet -FSharp.Compiler.SyntaxTree+MemberKind: Boolean get_IsClassConstructor() -FSharp.Compiler.SyntaxTree+MemberKind: Boolean get_IsConstructor() -FSharp.Compiler.SyntaxTree+MemberKind: Boolean get_IsMember() -FSharp.Compiler.SyntaxTree+MemberKind: Boolean get_IsPropertyGet() -FSharp.Compiler.SyntaxTree+MemberKind: Boolean get_IsPropertyGetSet() -FSharp.Compiler.SyntaxTree+MemberKind: Boolean get_IsPropertySet() -FSharp.Compiler.SyntaxTree+MemberKind: FSharp.Compiler.SyntaxTree+MemberKind+Tags -FSharp.Compiler.SyntaxTree+MemberKind: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+MemberKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+MemberKind: Int32 Tag -FSharp.Compiler.SyntaxTree+MemberKind: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+MemberKind: MemberKind ClassConstructor -FSharp.Compiler.SyntaxTree+MemberKind: MemberKind Constructor -FSharp.Compiler.SyntaxTree+MemberKind: MemberKind Member -FSharp.Compiler.SyntaxTree+MemberKind: MemberKind PropertyGet -FSharp.Compiler.SyntaxTree+MemberKind: MemberKind PropertyGetSet -FSharp.Compiler.SyntaxTree+MemberKind: MemberKind PropertySet -FSharp.Compiler.SyntaxTree+MemberKind: MemberKind get_ClassConstructor() -FSharp.Compiler.SyntaxTree+MemberKind: MemberKind get_Constructor() -FSharp.Compiler.SyntaxTree+MemberKind: MemberKind get_Member() -FSharp.Compiler.SyntaxTree+MemberKind: MemberKind get_PropertyGet() -FSharp.Compiler.SyntaxTree+MemberKind: MemberKind get_PropertyGetSet() -FSharp.Compiler.SyntaxTree+MemberKind: MemberKind get_PropertySet() -FSharp.Compiler.SyntaxTree+MemberKind: System.String ToString() -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: Boolean IsIDefns -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: Boolean IsIHash -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: Boolean get_IsIDefns() -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: Boolean get_IsIHash() -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: Int32 Tag -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl] defns -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl] get_defns() -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: System.String ToString() -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: range get_range() -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns: range range -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: Boolean IsIDefns -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: Boolean IsIHash -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: Boolean get_IsIDefns() -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: Boolean get_IsIHash() -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: Int32 Tag -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: ParsedHashDirective get_hashDirective() -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: ParsedHashDirective hashDirective -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: System.String ToString() -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: range get_range() -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash: range range -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+Tags: Int32 IDefns -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+Tags: Int32 IHash -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: Boolean IsIDefns -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: Boolean IsIHash -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: Boolean get_IsIDefns() -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: Boolean get_IsIHash() -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IDefns -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+IHash -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: FSharp.Compiler.SyntaxTree+ParsedFsiInteraction+Tags -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: Int32 Tag -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: ParsedFsiInteraction NewIDefns(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl], range) -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: ParsedFsiInteraction NewIHash(ParsedHashDirective, range) -FSharp.Compiler.SyntaxTree+ParsedFsiInteraction: System.String ToString() -FSharp.Compiler.SyntaxTree+ParsedHashDirective: Int32 Tag -FSharp.Compiler.SyntaxTree+ParsedHashDirective: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+ParsedHashDirective: Microsoft.FSharp.Collections.FSharpList`1[System.String] args -FSharp.Compiler.SyntaxTree+ParsedHashDirective: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_args() -FSharp.Compiler.SyntaxTree+ParsedHashDirective: ParsedHashDirective NewParsedHashDirective(System.String, Microsoft.FSharp.Collections.FSharpList`1[System.String], range) -FSharp.Compiler.SyntaxTree+ParsedHashDirective: System.String ToString() -FSharp.Compiler.SyntaxTree+ParsedHashDirective: System.String get_ident() -FSharp.Compiler.SyntaxTree+ParsedHashDirective: System.String ident -FSharp.Compiler.SyntaxTree+ParsedHashDirective: range get_range() -FSharp.Compiler.SyntaxTree+ParsedHashDirective: range range -FSharp.Compiler.SyntaxTree+ParsedImplFile: Int32 Tag -FSharp.Compiler.SyntaxTree+ParsedImplFile: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+ParsedImplFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective] get_hashDirectives() -FSharp.Compiler.SyntaxTree+ParsedImplFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective] hashDirectives -FSharp.Compiler.SyntaxTree+ParsedImplFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedImplFileFragment] fragments -FSharp.Compiler.SyntaxTree+ParsedImplFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedImplFileFragment] get_fragments() -FSharp.Compiler.SyntaxTree+ParsedImplFile: ParsedImplFile NewParsedImplFile(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedImplFileFragment]) -FSharp.Compiler.SyntaxTree+ParsedImplFile: System.String ToString() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: Boolean IsAnonModule -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: Boolean IsNamedModule -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: Boolean get_IsAnonModule() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: Boolean get_IsNamedModule() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: Int32 Tag -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl] decls -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl] get_decls() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: System.String ToString() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: range get_range() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule: range range -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: Boolean IsAnonModule -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: Boolean IsNamedModule -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: Boolean get_IsAnonModule() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: Boolean get_IsNamedModule() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: Int32 Tag -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: SynModuleOrNamespace get_namedModule() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: SynModuleOrNamespace namedModule -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule: System.String ToString() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Boolean IsAnonModule -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Boolean IsNamedModule -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Boolean get_IsAnonModule() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Boolean get_IsNamedModule() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Boolean get_isRecursive() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Boolean isRecursive -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Int32 Tag -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl] decls -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl] get_decls() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: PreXmlDoc get_xmlDoc() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: PreXmlDoc xmlDoc -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: SynModuleOrNamespaceKind get_kind() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: SynModuleOrNamespaceKind kind -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: System.String ToString() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: range get_range() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment: range range -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+Tags: Int32 AnonModule -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+Tags: Int32 NamedModule -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+Tags: Int32 NamespaceFragment -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: Boolean IsAnonModule -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: Boolean IsNamedModule -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: Boolean get_IsAnonModule() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: Boolean get_IsNamedModule() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+AnonModule -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamedModule -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+NamespaceFragment -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: FSharp.Compiler.SyntaxTree+ParsedImplFileFragment+Tags -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: Int32 Tag -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: ParsedImplFileFragment NewAnonModule(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl], range) -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: ParsedImplFileFragment NewNamedModule(SynModuleOrNamespace) -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: ParsedImplFileFragment NewNamespaceFragment(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], Boolean, SynModuleOrNamespaceKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl], PreXmlDoc, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], range) -FSharp.Compiler.SyntaxTree+ParsedImplFileFragment: System.String ToString() -FSharp.Compiler.SyntaxTree+ParsedImplFileInput: Boolean get_isScript() -FSharp.Compiler.SyntaxTree+ParsedImplFileInput: Boolean isScript -FSharp.Compiler.SyntaxTree+ParsedImplFileInput: Int32 Tag -FSharp.Compiler.SyntaxTree+ParsedImplFileInput: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective] get_hashDirectives() -FSharp.Compiler.SyntaxTree+ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective] hashDirectives -FSharp.Compiler.SyntaxTree+ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ScopedPragma] get_scopedPragmas() -FSharp.Compiler.SyntaxTree+ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ScopedPragma] scopedPragmas -FSharp.Compiler.SyntaxTree+ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleOrNamespace] get_modules() -FSharp.Compiler.SyntaxTree+ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleOrNamespace] modules -FSharp.Compiler.SyntaxTree+ParsedImplFileInput: ParsedImplFileInput NewParsedImplFileInput(System.String, Boolean, QualifiedNameOfFile, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ScopedPragma], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleOrNamespace], System.Tuple`2[System.Boolean,System.Boolean]) -FSharp.Compiler.SyntaxTree+ParsedImplFileInput: QualifiedNameOfFile get_qualifiedNameOfFile() -FSharp.Compiler.SyntaxTree+ParsedImplFileInput: QualifiedNameOfFile qualifiedNameOfFile -FSharp.Compiler.SyntaxTree+ParsedImplFileInput: System.String ToString() -FSharp.Compiler.SyntaxTree+ParsedImplFileInput: System.String fileName -FSharp.Compiler.SyntaxTree+ParsedImplFileInput: System.String get_fileName() -FSharp.Compiler.SyntaxTree+ParsedImplFileInput: System.Tuple`2[System.Boolean,System.Boolean] get_isLastCompiland() -FSharp.Compiler.SyntaxTree+ParsedImplFileInput: System.Tuple`2[System.Boolean,System.Boolean] isLastCompiland -FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: Boolean IsImplFile -FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: Boolean IsSigFile -FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: Boolean get_IsImplFile() -FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: Boolean get_IsSigFile() -FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: Int32 Tag -FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: ParsedImplFileInput Item -FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: ParsedImplFileInput get_Item() -FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: System.String ToString() -FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: range Range -FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile: range get_Range() -FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: Boolean IsImplFile -FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: Boolean IsSigFile -FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: Boolean get_IsImplFile() -FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: Boolean get_IsSigFile() -FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: Int32 Tag -FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: ParsedSigFileInput Item -FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: ParsedSigFileInput get_Item() -FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: System.String ToString() -FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: range Range -FSharp.Compiler.SyntaxTree+ParsedInput+SigFile: range get_Range() -FSharp.Compiler.SyntaxTree+ParsedInput+Tags: Int32 ImplFile -FSharp.Compiler.SyntaxTree+ParsedInput+Tags: Int32 SigFile -FSharp.Compiler.SyntaxTree+ParsedInput: Boolean IsImplFile -FSharp.Compiler.SyntaxTree+ParsedInput: Boolean IsSigFile -FSharp.Compiler.SyntaxTree+ParsedInput: Boolean get_IsImplFile() -FSharp.Compiler.SyntaxTree+ParsedInput: Boolean get_IsSigFile() -FSharp.Compiler.SyntaxTree+ParsedInput: FSharp.Compiler.SyntaxTree+ParsedInput+ImplFile -FSharp.Compiler.SyntaxTree+ParsedInput: FSharp.Compiler.SyntaxTree+ParsedInput+SigFile -FSharp.Compiler.SyntaxTree+ParsedInput: FSharp.Compiler.SyntaxTree+ParsedInput+Tags -FSharp.Compiler.SyntaxTree+ParsedInput: Int32 Tag -FSharp.Compiler.SyntaxTree+ParsedInput: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+ParsedInput: ParsedInput NewImplFile(ParsedImplFileInput) -FSharp.Compiler.SyntaxTree+ParsedInput: ParsedInput NewSigFile(ParsedSigFileInput) -FSharp.Compiler.SyntaxTree+ParsedInput: System.String ToString() -FSharp.Compiler.SyntaxTree+ParsedInput: range Range -FSharp.Compiler.SyntaxTree+ParsedInput: range get_Range() -FSharp.Compiler.SyntaxTree+ParsedSigFile: Int32 Tag -FSharp.Compiler.SyntaxTree+ParsedSigFile: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+ParsedSigFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective] get_hashDirectives() -FSharp.Compiler.SyntaxTree+ParsedSigFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective] hashDirectives -FSharp.Compiler.SyntaxTree+ParsedSigFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedSigFileFragment] fragments -FSharp.Compiler.SyntaxTree+ParsedSigFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedSigFileFragment] get_fragments() -FSharp.Compiler.SyntaxTree+ParsedSigFile: ParsedSigFile NewParsedSigFile(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedSigFileFragment]) -FSharp.Compiler.SyntaxTree+ParsedSigFile: System.String ToString() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: Boolean IsAnonModule -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: Boolean IsNamedModule -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: Boolean get_IsAnonModule() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: Boolean get_IsNamedModule() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: Int32 Tag -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl] decls -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl] get_decls() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: System.String ToString() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: range get_range() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule: range range -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: Boolean IsAnonModule -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: Boolean IsNamedModule -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: Boolean get_IsAnonModule() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: Boolean get_IsNamedModule() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: Int32 Tag -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: SynModuleOrNamespaceSig get_namedModule() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: SynModuleOrNamespaceSig namedModule -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule: System.String ToString() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Boolean IsAnonModule -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Boolean IsNamedModule -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Boolean get_IsAnonModule() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Boolean get_IsNamedModule() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Boolean get_isRecursive() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Boolean isRecursive -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Int32 Tag -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl] decls -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl] get_decls() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: PreXmlDoc get_xmlDoc() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: PreXmlDoc xmlDoc -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: SynModuleOrNamespaceKind get_kind() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: SynModuleOrNamespaceKind kind -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: System.String ToString() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: range get_range() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment: range range -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+Tags: Int32 AnonModule -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+Tags: Int32 NamedModule -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+Tags: Int32 NamespaceFragment -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: Boolean IsAnonModule -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: Boolean IsNamedModule -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: Boolean get_IsAnonModule() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: Boolean get_IsNamedModule() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+AnonModule -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamedModule -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+NamespaceFragment -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: FSharp.Compiler.SyntaxTree+ParsedSigFileFragment+Tags -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: Int32 Tag -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: ParsedSigFileFragment NewAnonModule(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl], range) -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: ParsedSigFileFragment NewNamedModule(SynModuleOrNamespaceSig) -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: ParsedSigFileFragment NewNamespaceFragment(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], Boolean, SynModuleOrNamespaceKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl], PreXmlDoc, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], range) -FSharp.Compiler.SyntaxTree+ParsedSigFileFragment: System.String ToString() -FSharp.Compiler.SyntaxTree+ParsedSigFileInput: Int32 Tag -FSharp.Compiler.SyntaxTree+ParsedSigFileInput: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective] get_hashDirectives() -FSharp.Compiler.SyntaxTree+ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective] hashDirectives -FSharp.Compiler.SyntaxTree+ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ScopedPragma] get_scopedPragmas() -FSharp.Compiler.SyntaxTree+ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ScopedPragma] scopedPragmas -FSharp.Compiler.SyntaxTree+ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig] get_modules() -FSharp.Compiler.SyntaxTree+ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig] modules -FSharp.Compiler.SyntaxTree+ParsedSigFileInput: ParsedSigFileInput NewParsedSigFileInput(System.String, QualifiedNameOfFile, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ScopedPragma], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+ParsedHashDirective], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig]) -FSharp.Compiler.SyntaxTree+ParsedSigFileInput: QualifiedNameOfFile get_qualifiedNameOfFile() -FSharp.Compiler.SyntaxTree+ParsedSigFileInput: QualifiedNameOfFile qualifiedNameOfFile -FSharp.Compiler.SyntaxTree+ParsedSigFileInput: System.String ToString() -FSharp.Compiler.SyntaxTree+ParsedSigFileInput: System.String fileName -FSharp.Compiler.SyntaxTree+ParsedSigFileInput: System.String get_fileName() -FSharp.Compiler.SyntaxTree+ParserDetail+Tags: Int32 ErrorRecovery -FSharp.Compiler.SyntaxTree+ParserDetail+Tags: Int32 Ok -FSharp.Compiler.SyntaxTree+ParserDetail: Boolean Equals(ParserDetail) -FSharp.Compiler.SyntaxTree+ParserDetail: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+ParserDetail: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+ParserDetail: Boolean IsErrorRecovery -FSharp.Compiler.SyntaxTree+ParserDetail: Boolean IsOk -FSharp.Compiler.SyntaxTree+ParserDetail: Boolean get_IsErrorRecovery() -FSharp.Compiler.SyntaxTree+ParserDetail: Boolean get_IsOk() -FSharp.Compiler.SyntaxTree+ParserDetail: FSharp.Compiler.SyntaxTree+ParserDetail+Tags -FSharp.Compiler.SyntaxTree+ParserDetail: Int32 CompareTo(ParserDetail) -FSharp.Compiler.SyntaxTree+ParserDetail: Int32 CompareTo(System.Object) -FSharp.Compiler.SyntaxTree+ParserDetail: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SyntaxTree+ParserDetail: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+ParserDetail: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+ParserDetail: Int32 Tag -FSharp.Compiler.SyntaxTree+ParserDetail: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+ParserDetail: ParserDetail ErrorRecovery -FSharp.Compiler.SyntaxTree+ParserDetail: ParserDetail Ok -FSharp.Compiler.SyntaxTree+ParserDetail: ParserDetail get_ErrorRecovery() -FSharp.Compiler.SyntaxTree+ParserDetail: ParserDetail get_Ok() -FSharp.Compiler.SyntaxTree+ParserDetail: System.String ToString() -FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: Ident Id -FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: Ident Item -FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: Ident get_Id() -FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: Ident get_Item() -FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: Int32 Tag -FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: QualifiedNameOfFile NewQualifiedNameOfFile(Ident) -FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: System.String Text -FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: System.String ToString() -FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: System.String get_Text() -FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: range Range -FSharp.Compiler.SyntaxTree+QualifiedNameOfFile: range get_Range() -FSharp.Compiler.SyntaxTree+ScopedPragma: Boolean Equals(ScopedPragma) -FSharp.Compiler.SyntaxTree+ScopedPragma: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+ScopedPragma: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+ScopedPragma: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+ScopedPragma: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+ScopedPragma: Int32 Tag -FSharp.Compiler.SyntaxTree+ScopedPragma: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+ScopedPragma: Int32 get_warningNumber() -FSharp.Compiler.SyntaxTree+ScopedPragma: Int32 warningNumber -FSharp.Compiler.SyntaxTree+ScopedPragma: ScopedPragma NewWarningOff(range, Int32) -FSharp.Compiler.SyntaxTree+ScopedPragma: System.String ToString() -FSharp.Compiler.SyntaxTree+ScopedPragma: range get_range() -FSharp.Compiler.SyntaxTree+ScopedPragma: range range -FSharp.Compiler.SyntaxTree+SeqExprOnly: Boolean Equals(SeqExprOnly) -FSharp.Compiler.SyntaxTree+SeqExprOnly: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+SeqExprOnly: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+SeqExprOnly: Boolean Item -FSharp.Compiler.SyntaxTree+SeqExprOnly: Boolean get_Item() -FSharp.Compiler.SyntaxTree+SeqExprOnly: Int32 CompareTo(SeqExprOnly) -FSharp.Compiler.SyntaxTree+SeqExprOnly: Int32 CompareTo(System.Object) -FSharp.Compiler.SyntaxTree+SeqExprOnly: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SyntaxTree+SeqExprOnly: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+SeqExprOnly: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+SeqExprOnly: Int32 Tag -FSharp.Compiler.SyntaxTree+SeqExprOnly: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SeqExprOnly: SeqExprOnly NewSeqExprOnly(Boolean) -FSharp.Compiler.SyntaxTree+SeqExprOnly: System.String ToString() -FSharp.Compiler.SyntaxTree+SynAccess+Tags: Int32 Internal -FSharp.Compiler.SyntaxTree+SynAccess+Tags: Int32 Private -FSharp.Compiler.SyntaxTree+SynAccess+Tags: Int32 Public -FSharp.Compiler.SyntaxTree+SynAccess: Boolean Equals(SynAccess) -FSharp.Compiler.SyntaxTree+SynAccess: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+SynAccess: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+SynAccess: Boolean IsInternal -FSharp.Compiler.SyntaxTree+SynAccess: Boolean IsPrivate -FSharp.Compiler.SyntaxTree+SynAccess: Boolean IsPublic -FSharp.Compiler.SyntaxTree+SynAccess: Boolean get_IsInternal() -FSharp.Compiler.SyntaxTree+SynAccess: Boolean get_IsPrivate() -FSharp.Compiler.SyntaxTree+SynAccess: Boolean get_IsPublic() -FSharp.Compiler.SyntaxTree+SynAccess: FSharp.Compiler.SyntaxTree+SynAccess+Tags -FSharp.Compiler.SyntaxTree+SynAccess: Int32 CompareTo(SynAccess) -FSharp.Compiler.SyntaxTree+SynAccess: Int32 CompareTo(System.Object) -FSharp.Compiler.SyntaxTree+SynAccess: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SyntaxTree+SynAccess: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+SynAccess: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+SynAccess: Int32 Tag -FSharp.Compiler.SyntaxTree+SynAccess: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynAccess: SynAccess Internal -FSharp.Compiler.SyntaxTree+SynAccess: SynAccess Private -FSharp.Compiler.SyntaxTree+SynAccess: SynAccess Public -FSharp.Compiler.SyntaxTree+SynAccess: SynAccess get_Internal() -FSharp.Compiler.SyntaxTree+SynAccess: SynAccess get_Private() -FSharp.Compiler.SyntaxTree+SynAccess: SynAccess get_Public() -FSharp.Compiler.SyntaxTree+SynAccess: System.String ToString() -FSharp.Compiler.SyntaxTree+SynArgInfo: Boolean get_optional() -FSharp.Compiler.SyntaxTree+SynArgInfo: Boolean optional -FSharp.Compiler.SyntaxTree+SynArgInfo: Int32 Tag -FSharp.Compiler.SyntaxTree+SynArgInfo: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes -FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() -FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] Ident -FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_Ident() -FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_ident() -FSharp.Compiler.SyntaxTree+SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] ident -FSharp.Compiler.SyntaxTree+SynArgInfo: SynArgInfo NewSynArgInfo(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]) -FSharp.Compiler.SyntaxTree+SynArgInfo: System.String ToString() -FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: Boolean IsNamePatPairs -FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: Boolean IsPats -FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: Boolean get_IsNamePatPairs() -FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: Boolean get_IsPats() -FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: Int32 Tag -FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+Ident,FSharp.Compiler.SyntaxTree+SynPat]] get_pats() -FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+Ident,FSharp.Compiler.SyntaxTree+SynPat]] pats -FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: System.String ToString() -FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: range get_range() -FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs: range range -FSharp.Compiler.SyntaxTree+SynArgPats+Pats: Boolean IsNamePatPairs -FSharp.Compiler.SyntaxTree+SynArgPats+Pats: Boolean IsPats -FSharp.Compiler.SyntaxTree+SynArgPats+Pats: Boolean get_IsNamePatPairs() -FSharp.Compiler.SyntaxTree+SynArgPats+Pats: Boolean get_IsPats() -FSharp.Compiler.SyntaxTree+SynArgPats+Pats: Int32 Tag -FSharp.Compiler.SyntaxTree+SynArgPats+Pats: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynArgPats+Pats: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat] get_pats() -FSharp.Compiler.SyntaxTree+SynArgPats+Pats: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat] pats -FSharp.Compiler.SyntaxTree+SynArgPats+Pats: System.String ToString() -FSharp.Compiler.SyntaxTree+SynArgPats+Tags: Int32 NamePatPairs -FSharp.Compiler.SyntaxTree+SynArgPats+Tags: Int32 Pats -FSharp.Compiler.SyntaxTree+SynArgPats: Boolean IsNamePatPairs -FSharp.Compiler.SyntaxTree+SynArgPats: Boolean IsPats -FSharp.Compiler.SyntaxTree+SynArgPats: Boolean get_IsNamePatPairs() -FSharp.Compiler.SyntaxTree+SynArgPats: Boolean get_IsPats() -FSharp.Compiler.SyntaxTree+SynArgPats: FSharp.Compiler.SyntaxTree+SynArgPats+NamePatPairs -FSharp.Compiler.SyntaxTree+SynArgPats: FSharp.Compiler.SyntaxTree+SynArgPats+Pats -FSharp.Compiler.SyntaxTree+SynArgPats: FSharp.Compiler.SyntaxTree+SynArgPats+Tags -FSharp.Compiler.SyntaxTree+SynArgPats: Int32 Tag -FSharp.Compiler.SyntaxTree+SynArgPats: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynArgPats: SynArgPats NewNamePatPairs(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+Ident,FSharp.Compiler.SyntaxTree+SynPat]], range) -FSharp.Compiler.SyntaxTree+SynArgPats: SynArgPats NewPats(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat]) -FSharp.Compiler.SyntaxTree+SynArgPats: System.String ToString() -FSharp.Compiler.SyntaxTree+SynAttribute: Boolean AppliesToGetterAndSetter -FSharp.Compiler.SyntaxTree+SynAttribute: Boolean get_AppliesToGetterAndSetter() -FSharp.Compiler.SyntaxTree+SynAttribute: LongIdentWithDots TypeName -FSharp.Compiler.SyntaxTree+SynAttribute: LongIdentWithDots get_TypeName() -FSharp.Compiler.SyntaxTree+SynAttribute: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] Target -FSharp.Compiler.SyntaxTree+SynAttribute: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_Target() -FSharp.Compiler.SyntaxTree+SynAttribute: SynExpr ArgExpr -FSharp.Compiler.SyntaxTree+SynAttribute: SynExpr get_ArgExpr() -FSharp.Compiler.SyntaxTree+SynAttribute: System.String ToString() -FSharp.Compiler.SyntaxTree+SynAttribute: Void .ctor(LongIdentWithDots, SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], Boolean, range) -FSharp.Compiler.SyntaxTree+SynAttribute: range Range -FSharp.Compiler.SyntaxTree+SynAttribute: range get_Range() -FSharp.Compiler.SyntaxTree+SynAttributeList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttribute] Attributes -FSharp.Compiler.SyntaxTree+SynAttributeList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttribute] get_Attributes() -FSharp.Compiler.SyntaxTree+SynAttributeList: System.String ToString() -FSharp.Compiler.SyntaxTree+SynAttributeList: Void .ctor(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttribute], range) -FSharp.Compiler.SyntaxTree+SynAttributeList: range Range -FSharp.Compiler.SyntaxTree+SynAttributeList: range get_Range() -FSharp.Compiler.SyntaxTree+SynBinding: Boolean get_isMutable() -FSharp.Compiler.SyntaxTree+SynBinding: Boolean get_mustInline() -FSharp.Compiler.SyntaxTree+SynBinding: Boolean isMutable -FSharp.Compiler.SyntaxTree+SynBinding: Boolean mustInline -FSharp.Compiler.SyntaxTree+SynBinding: DebugPointForBinding get_seqPoint() -FSharp.Compiler.SyntaxTree+SynBinding: DebugPointForBinding seqPoint -FSharp.Compiler.SyntaxTree+SynBinding: Int32 Tag -FSharp.Compiler.SyntaxTree+SynBinding: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynBinding: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes -FSharp.Compiler.SyntaxTree+SynBinding: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() -FSharp.Compiler.SyntaxTree+SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility -FSharp.Compiler.SyntaxTree+SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() -FSharp.Compiler.SyntaxTree+SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynBindingReturnInfo] get_returnInfo() -FSharp.Compiler.SyntaxTree+SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynBindingReturnInfo] returnInfo -FSharp.Compiler.SyntaxTree+SynBinding: PreXmlDoc get_xmlDoc() -FSharp.Compiler.SyntaxTree+SynBinding: PreXmlDoc xmlDoc -FSharp.Compiler.SyntaxTree+SynBinding: SynBinding NewBinding(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], SynBindingKind, Boolean, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], PreXmlDoc, SynValData, SynPat, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynBindingReturnInfo], SynExpr, range, DebugPointForBinding) -FSharp.Compiler.SyntaxTree+SynBinding: SynBindingKind get_kind() -FSharp.Compiler.SyntaxTree+SynBinding: SynBindingKind kind -FSharp.Compiler.SyntaxTree+SynBinding: SynExpr expr -FSharp.Compiler.SyntaxTree+SynBinding: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynBinding: SynPat get_headPat() -FSharp.Compiler.SyntaxTree+SynBinding: SynPat headPat -FSharp.Compiler.SyntaxTree+SynBinding: SynValData get_valData() -FSharp.Compiler.SyntaxTree+SynBinding: SynValData valData -FSharp.Compiler.SyntaxTree+SynBinding: System.String ToString() -FSharp.Compiler.SyntaxTree+SynBinding: range RangeOfBindingAndRhs -FSharp.Compiler.SyntaxTree+SynBinding: range RangeOfBindingSansRhs -FSharp.Compiler.SyntaxTree+SynBinding: range RangeOfHeadPat -FSharp.Compiler.SyntaxTree+SynBinding: range get_RangeOfBindingAndRhs() -FSharp.Compiler.SyntaxTree+SynBinding: range get_RangeOfBindingSansRhs() -FSharp.Compiler.SyntaxTree+SynBinding: range get_RangeOfHeadPat() -FSharp.Compiler.SyntaxTree+SynBinding: range get_range() -FSharp.Compiler.SyntaxTree+SynBinding: range range -FSharp.Compiler.SyntaxTree+SynBindingKind+Tags: Int32 DoBinding -FSharp.Compiler.SyntaxTree+SynBindingKind+Tags: Int32 NormalBinding -FSharp.Compiler.SyntaxTree+SynBindingKind+Tags: Int32 StandaloneExpression -FSharp.Compiler.SyntaxTree+SynBindingKind: Boolean Equals(SynBindingKind) -FSharp.Compiler.SyntaxTree+SynBindingKind: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+SynBindingKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+SynBindingKind: Boolean IsDoBinding -FSharp.Compiler.SyntaxTree+SynBindingKind: Boolean IsNormalBinding -FSharp.Compiler.SyntaxTree+SynBindingKind: Boolean IsStandaloneExpression -FSharp.Compiler.SyntaxTree+SynBindingKind: Boolean get_IsDoBinding() -FSharp.Compiler.SyntaxTree+SynBindingKind: Boolean get_IsNormalBinding() -FSharp.Compiler.SyntaxTree+SynBindingKind: Boolean get_IsStandaloneExpression() -FSharp.Compiler.SyntaxTree+SynBindingKind: FSharp.Compiler.SyntaxTree+SynBindingKind+Tags -FSharp.Compiler.SyntaxTree+SynBindingKind: Int32 CompareTo(SynBindingKind) -FSharp.Compiler.SyntaxTree+SynBindingKind: Int32 CompareTo(System.Object) -FSharp.Compiler.SyntaxTree+SynBindingKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SyntaxTree+SynBindingKind: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+SynBindingKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+SynBindingKind: Int32 Tag -FSharp.Compiler.SyntaxTree+SynBindingKind: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynBindingKind: SynBindingKind DoBinding -FSharp.Compiler.SyntaxTree+SynBindingKind: SynBindingKind NormalBinding -FSharp.Compiler.SyntaxTree+SynBindingKind: SynBindingKind StandaloneExpression -FSharp.Compiler.SyntaxTree+SynBindingKind: SynBindingKind get_DoBinding() -FSharp.Compiler.SyntaxTree+SynBindingKind: SynBindingKind get_NormalBinding() -FSharp.Compiler.SyntaxTree+SynBindingKind: SynBindingKind get_StandaloneExpression() -FSharp.Compiler.SyntaxTree+SynBindingKind: System.String ToString() -FSharp.Compiler.SyntaxTree+SynBindingReturnInfo: Int32 Tag -FSharp.Compiler.SyntaxTree+SynBindingReturnInfo: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynBindingReturnInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes -FSharp.Compiler.SyntaxTree+SynBindingReturnInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() -FSharp.Compiler.SyntaxTree+SynBindingReturnInfo: SynBindingReturnInfo NewSynBindingReturnInfo(SynType, range, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList]) -FSharp.Compiler.SyntaxTree+SynBindingReturnInfo: SynType get_typeName() -FSharp.Compiler.SyntaxTree+SynBindingReturnInfo: SynType typeName -FSharp.Compiler.SyntaxTree+SynBindingReturnInfo: System.String ToString() -FSharp.Compiler.SyntaxTree+SynBindingReturnInfo: range get_range() -FSharp.Compiler.SyntaxTree+SynBindingReturnInfo: range range -FSharp.Compiler.SyntaxTree+SynComponentInfo: Boolean get_preferPostfix() -FSharp.Compiler.SyntaxTree+SynComponentInfo: Boolean preferPostfix -FSharp.Compiler.SyntaxTree+SynComponentInfo: Int32 Tag -FSharp.Compiler.SyntaxTree+SynComponentInfo: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() -FSharp.Compiler.SyntaxTree+SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId -FSharp.Compiler.SyntaxTree+SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes -FSharp.Compiler.SyntaxTree+SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() -FSharp.Compiler.SyntaxTree+SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTyparDecl] get_typeParams() -FSharp.Compiler.SyntaxTree+SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTyparDecl] typeParams -FSharp.Compiler.SyntaxTree+SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeConstraint] constraints -FSharp.Compiler.SyntaxTree+SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeConstraint] get_constraints() -FSharp.Compiler.SyntaxTree+SynComponentInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility -FSharp.Compiler.SyntaxTree+SynComponentInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() -FSharp.Compiler.SyntaxTree+SynComponentInfo: PreXmlDoc get_xmlDoc() -FSharp.Compiler.SyntaxTree+SynComponentInfo: PreXmlDoc xmlDoc -FSharp.Compiler.SyntaxTree+SynComponentInfo: SynComponentInfo NewComponentInfo(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTyparDecl], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeConstraint], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], PreXmlDoc, Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) -FSharp.Compiler.SyntaxTree+SynComponentInfo: System.String ToString() -FSharp.Compiler.SyntaxTree+SynComponentInfo: range Range -FSharp.Compiler.SyntaxTree+SynComponentInfo: range get_Range() -FSharp.Compiler.SyntaxTree+SynComponentInfo: range get_range() -FSharp.Compiler.SyntaxTree+SynComponentInfo: range range -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsBool -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsByte -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsBytes -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsChar -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsDecimal -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsDouble -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsInt16 -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsInt32 -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsInt64 -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsMeasure -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsSByte -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsSingle -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsString -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsUInt16 -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsUInt16s -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsUInt32 -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsUInt64 -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsUIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsUnit -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean IsUserNum -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean Item -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsBool() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsByte() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsBytes() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsChar() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsDecimal() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsDouble() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsInt16() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsInt32() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsInt64() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsMeasure() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsSByte() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsSingle() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsUInt16() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsUInt16s() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsUInt32() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsUInt64() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsUIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsUnit() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_IsUserNum() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Boolean get_Item() -FSharp.Compiler.SyntaxTree+SynConst+Bool: Int32 Tag -FSharp.Compiler.SyntaxTree+SynConst+Bool: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynConst+Bool: System.String ToString() -FSharp.Compiler.SyntaxTree+SynConst+Bool: range Range(range) -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsBool -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsByte -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsBytes -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsChar -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsDecimal -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsDouble -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsInt16 -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsInt32 -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsInt64 -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsMeasure -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsSByte -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsSingle -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsString -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsUInt16 -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsUInt16s -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsUInt32 -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsUInt64 -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsUIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsUnit -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean IsUserNum -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsBool() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsByte() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsBytes() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsChar() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsDecimal() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsDouble() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsInt16() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsInt32() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsInt64() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsMeasure() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsSByte() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsSingle() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsUInt16() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsUInt16s() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsUInt32() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsUInt64() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsUIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsUnit() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Boolean get_IsUserNum() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Byte Item -FSharp.Compiler.SyntaxTree+SynConst+Byte: Byte get_Item() -FSharp.Compiler.SyntaxTree+SynConst+Byte: Int32 Tag -FSharp.Compiler.SyntaxTree+SynConst+Byte: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynConst+Byte: System.String ToString() -FSharp.Compiler.SyntaxTree+SynConst+Byte: range Range(range) -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsBool -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsByte -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsBytes -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsChar -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsDecimal -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsDouble -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsInt16 -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsInt32 -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsInt64 -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsMeasure -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsSByte -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsSingle -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsString -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsUInt16 -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsUInt16s -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsUInt32 -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsUInt64 -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsUIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsUnit -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean IsUserNum -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsBool() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsByte() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsBytes() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsChar() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsDecimal() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsDouble() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsInt16() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsInt32() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsInt64() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsMeasure() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsSByte() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsSingle() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsUInt16() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsUInt16s() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsUInt32() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsUInt64() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsUIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsUnit() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Boolean get_IsUserNum() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Byte[] bytes -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Byte[] get_bytes() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Int32 Tag -FSharp.Compiler.SyntaxTree+SynConst+Bytes: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: System.String ToString() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: range Range(range) -FSharp.Compiler.SyntaxTree+SynConst+Bytes: range get_range() -FSharp.Compiler.SyntaxTree+SynConst+Bytes: range range -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsBool -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsByte -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsBytes -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsChar -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsDecimal -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsDouble -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsInt16 -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsInt32 -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsInt64 -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsMeasure -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsSByte -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsSingle -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsString -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsUInt16 -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsUInt16s -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsUInt32 -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsUInt64 -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsUIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsUnit -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean IsUserNum -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsBool() -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsByte() -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsBytes() -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsChar() -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsDecimal() -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsDouble() -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsInt16() -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsInt32() -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsInt64() -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsMeasure() -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsSByte() -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsSingle() -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsUInt16() -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsUInt16s() -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsUInt32() -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsUInt64() -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsUIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsUnit() -FSharp.Compiler.SyntaxTree+SynConst+Char: Boolean get_IsUserNum() -FSharp.Compiler.SyntaxTree+SynConst+Char: Char Item -FSharp.Compiler.SyntaxTree+SynConst+Char: Char get_Item() -FSharp.Compiler.SyntaxTree+SynConst+Char: Int32 Tag -FSharp.Compiler.SyntaxTree+SynConst+Char: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynConst+Char: System.String ToString() -FSharp.Compiler.SyntaxTree+SynConst+Char: range Range(range) -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsBool -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsByte -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsBytes -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsChar -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsDecimal -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsDouble -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsInt16 -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsInt32 -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsInt64 -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsMeasure -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsSByte -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsSingle -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsString -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsUInt16 -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsUInt16s -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsUInt32 -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsUInt64 -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsUIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsUnit -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean IsUserNum -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsBool() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsByte() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsBytes() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsChar() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsDecimal() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsDouble() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsInt16() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsInt32() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsInt64() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsMeasure() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsSByte() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsSingle() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsUInt16() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsUInt16s() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsUInt32() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsUInt64() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsUIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsUnit() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Boolean get_IsUserNum() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Int32 Tag -FSharp.Compiler.SyntaxTree+SynConst+Decimal: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: System.Decimal Item -FSharp.Compiler.SyntaxTree+SynConst+Decimal: System.Decimal get_Item() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: System.String ToString() -FSharp.Compiler.SyntaxTree+SynConst+Decimal: range Range(range) -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsBool -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsByte -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsBytes -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsChar -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsDecimal -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsDouble -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsInt16 -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsInt32 -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsInt64 -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsMeasure -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsSByte -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsSingle -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsString -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsUInt16 -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsUInt16s -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsUInt32 -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsUInt64 -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsUIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsUnit -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean IsUserNum -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsBool() -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsByte() -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsBytes() -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsChar() -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsDecimal() -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsDouble() -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsInt16() -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsInt32() -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsInt64() -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsMeasure() -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsSByte() -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsSingle() -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsUInt16() -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsUInt16s() -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsUInt32() -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsUInt64() -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsUIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsUnit() -FSharp.Compiler.SyntaxTree+SynConst+Double: Boolean get_IsUserNum() -FSharp.Compiler.SyntaxTree+SynConst+Double: Double Item -FSharp.Compiler.SyntaxTree+SynConst+Double: Double get_Item() -FSharp.Compiler.SyntaxTree+SynConst+Double: Int32 Tag -FSharp.Compiler.SyntaxTree+SynConst+Double: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynConst+Double: System.String ToString() -FSharp.Compiler.SyntaxTree+SynConst+Double: range Range(range) -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsBool -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsByte -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsBytes -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsChar -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsDecimal -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsDouble -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsInt16 -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsInt32 -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsInt64 -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsMeasure -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsSByte -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsSingle -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsString -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsUInt16 -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsUInt16s -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsUInt32 -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsUInt64 -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsUIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsUnit -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean IsUserNum -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsBool() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsByte() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsBytes() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsChar() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsDecimal() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsDouble() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsInt16() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsInt32() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsInt64() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsMeasure() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsSByte() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsSingle() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsUInt16() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsUInt16s() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsUInt32() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsUInt64() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsUIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsUnit() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Boolean get_IsUserNum() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Int16 Item -FSharp.Compiler.SyntaxTree+SynConst+Int16: Int16 get_Item() -FSharp.Compiler.SyntaxTree+SynConst+Int16: Int32 Tag -FSharp.Compiler.SyntaxTree+SynConst+Int16: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynConst+Int16: System.String ToString() -FSharp.Compiler.SyntaxTree+SynConst+Int16: range Range(range) -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsBool -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsByte -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsBytes -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsChar -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsDecimal -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsDouble -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsInt16 -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsInt32 -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsInt64 -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsMeasure -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsSByte -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsSingle -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsString -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsUInt16 -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsUInt16s -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsUInt32 -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsUInt64 -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsUIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsUnit -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean IsUserNum -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsBool() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsByte() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsBytes() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsChar() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsDecimal() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsDouble() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsInt16() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsInt32() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsInt64() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsMeasure() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsSByte() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsSingle() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsUInt16() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsUInt16s() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsUInt32() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsUInt64() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsUIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsUnit() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Boolean get_IsUserNum() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Int32 Item -FSharp.Compiler.SyntaxTree+SynConst+Int32: Int32 Tag -FSharp.Compiler.SyntaxTree+SynConst+Int32: Int32 get_Item() -FSharp.Compiler.SyntaxTree+SynConst+Int32: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynConst+Int32: System.String ToString() -FSharp.Compiler.SyntaxTree+SynConst+Int32: range Range(range) -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsBool -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsByte -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsBytes -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsChar -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsDecimal -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsDouble -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsInt16 -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsInt32 -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsInt64 -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsMeasure -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsSByte -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsSingle -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsString -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsUInt16 -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsUInt16s -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsUInt32 -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsUInt64 -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsUIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsUnit -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean IsUserNum -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsBool() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsByte() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsBytes() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsChar() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsDecimal() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsDouble() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsInt16() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsInt32() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsInt64() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsMeasure() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsSByte() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsSingle() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsUInt16() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsUInt16s() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsUInt32() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsUInt64() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsUIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsUnit() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Boolean get_IsUserNum() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Int32 Tag -FSharp.Compiler.SyntaxTree+SynConst+Int64: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynConst+Int64: Int64 Item -FSharp.Compiler.SyntaxTree+SynConst+Int64: Int64 get_Item() -FSharp.Compiler.SyntaxTree+SynConst+Int64: System.String ToString() -FSharp.Compiler.SyntaxTree+SynConst+Int64: range Range(range) -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsBool -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsByte -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsBytes -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsChar -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsDecimal -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsDouble -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsInt16 -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsInt32 -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsInt64 -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsIntPtr -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsMeasure -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsSByte -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsSingle -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsString -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsUInt16 -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsUInt16s -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsUInt32 -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsUInt64 -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsUIntPtr -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsUnit -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean IsUserNum -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsBool() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsByte() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsBytes() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsChar() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsDecimal() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsDouble() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsInt16() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsInt32() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsInt64() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsMeasure() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsSByte() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsSingle() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsUInt16() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsUInt16s() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsUInt32() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsUInt64() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsUIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsUnit() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Boolean get_IsUserNum() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Int32 Tag -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Int64 Item -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: Int64 get_Item() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: System.String ToString() -FSharp.Compiler.SyntaxTree+SynConst+IntPtr: range Range(range) -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsBool -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsByte -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsBytes -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsChar -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsDecimal -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsDouble -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsInt16 -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsInt32 -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsInt64 -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsMeasure -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsSByte -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsSingle -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsString -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsUInt16 -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsUInt16s -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsUInt32 -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsUInt64 -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsUIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsUnit -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean IsUserNum -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsBool() -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsByte() -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsBytes() -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsChar() -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsDecimal() -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsDouble() -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsInt16() -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsInt32() -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsInt64() -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsMeasure() -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsSByte() -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsSingle() -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsUInt16() -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsUInt16s() -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsUInt32() -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsUInt64() -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsUIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsUnit() -FSharp.Compiler.SyntaxTree+SynConst+Measure: Boolean get_IsUserNum() -FSharp.Compiler.SyntaxTree+SynConst+Measure: Int32 Tag -FSharp.Compiler.SyntaxTree+SynConst+Measure: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynConst+Measure: SynConst constant -FSharp.Compiler.SyntaxTree+SynConst+Measure: SynConst get_constant() -FSharp.Compiler.SyntaxTree+SynConst+Measure: SynMeasure Item2 -FSharp.Compiler.SyntaxTree+SynConst+Measure: SynMeasure get_Item2() -FSharp.Compiler.SyntaxTree+SynConst+Measure: System.String ToString() -FSharp.Compiler.SyntaxTree+SynConst+Measure: range Range(range) -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsBool -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsByte -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsBytes -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsChar -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsDecimal -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsDouble -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsInt16 -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsInt32 -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsInt64 -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsIntPtr -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsMeasure -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsSByte -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsSingle -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsString -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsUInt16 -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsUInt16s -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsUInt32 -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsUInt64 -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsUIntPtr -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsUnit -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean IsUserNum -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsBool() -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsByte() -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsBytes() -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsChar() -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsDecimal() -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsDouble() -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsInt16() -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsInt32() -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsInt64() -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsMeasure() -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsSByte() -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsSingle() -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsUInt16() -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsUInt16s() -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsUInt32() -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsUInt64() -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsUIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsUnit() -FSharp.Compiler.SyntaxTree+SynConst+SByte: Boolean get_IsUserNum() -FSharp.Compiler.SyntaxTree+SynConst+SByte: Int32 Tag -FSharp.Compiler.SyntaxTree+SynConst+SByte: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynConst+SByte: SByte Item -FSharp.Compiler.SyntaxTree+SynConst+SByte: SByte get_Item() -FSharp.Compiler.SyntaxTree+SynConst+SByte: System.String ToString() -FSharp.Compiler.SyntaxTree+SynConst+SByte: range Range(range) -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsBool -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsByte -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsBytes -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsChar -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsDecimal -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsDouble -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsInt16 -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsInt32 -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsInt64 -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsMeasure -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsSByte -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsSingle -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsString -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsUInt16 -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsUInt16s -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsUInt32 -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsUInt64 -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsUIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsUnit -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean IsUserNum -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsBool() -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsByte() -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsBytes() -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsChar() -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsDecimal() -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsDouble() -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsInt16() -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsInt32() -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsInt64() -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsMeasure() -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsSByte() -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsSingle() -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsUInt16() -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsUInt16s() -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsUInt32() -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsUInt64() -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsUIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsUnit() -FSharp.Compiler.SyntaxTree+SynConst+Single: Boolean get_IsUserNum() -FSharp.Compiler.SyntaxTree+SynConst+Single: Int32 Tag -FSharp.Compiler.SyntaxTree+SynConst+Single: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynConst+Single: Single Item -FSharp.Compiler.SyntaxTree+SynConst+Single: Single get_Item() -FSharp.Compiler.SyntaxTree+SynConst+Single: System.String ToString() -FSharp.Compiler.SyntaxTree+SynConst+Single: range Range(range) -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsBool -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsByte -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsBytes -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsChar -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsDecimal -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsDouble -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsInt16 -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsInt32 -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsInt64 -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsIntPtr -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsMeasure -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsSByte -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsSingle -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsString -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsUInt16 -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsUInt16s -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsUInt32 -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsUInt64 -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsUIntPtr -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsUnit -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean IsUserNum -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsBool() -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsByte() -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsBytes() -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsChar() -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsDecimal() -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsDouble() -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsInt16() -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsInt32() -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsInt64() -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsMeasure() -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsSByte() -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsSingle() -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsUInt16() -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsUInt16s() -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsUInt32() -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsUInt64() -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsUIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsUnit() -FSharp.Compiler.SyntaxTree+SynConst+String: Boolean get_IsUserNum() -FSharp.Compiler.SyntaxTree+SynConst+String: Int32 Tag -FSharp.Compiler.SyntaxTree+SynConst+String: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynConst+String: System.String ToString() -FSharp.Compiler.SyntaxTree+SynConst+String: System.String get_text() -FSharp.Compiler.SyntaxTree+SynConst+String: System.String text -FSharp.Compiler.SyntaxTree+SynConst+String: range Range(range) -FSharp.Compiler.SyntaxTree+SynConst+String: range get_range() -FSharp.Compiler.SyntaxTree+SynConst+String: range range -FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Bool -FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Byte -FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Bytes -FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Char -FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Decimal -FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Double -FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Int16 -FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Int32 -FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Int64 -FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 IntPtr -FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Measure -FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 SByte -FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Single -FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 String -FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 UInt16 -FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 UInt16s -FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 UInt32 -FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 UInt64 -FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 UIntPtr -FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 Unit -FSharp.Compiler.SyntaxTree+SynConst+Tags: Int32 UserNum -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsBool -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsByte -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsBytes -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsChar -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsDecimal -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsDouble -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsInt16 -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsInt32 -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsInt64 -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsIntPtr -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsMeasure -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsSByte -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsSingle -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsString -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsUInt16 -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsUInt16s -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsUInt32 -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsUInt64 -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsUIntPtr -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsUnit -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean IsUserNum -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsBool() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsByte() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsBytes() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsChar() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsDecimal() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsDouble() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsInt16() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsInt32() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsInt64() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsMeasure() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsSByte() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsSingle() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsUInt16() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsUInt16s() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsUInt32() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsUInt64() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsUIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsUnit() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Boolean get_IsUserNum() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Int32 Tag -FSharp.Compiler.SyntaxTree+SynConst+UInt16: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: System.String ToString() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: UInt16 Item -FSharp.Compiler.SyntaxTree+SynConst+UInt16: UInt16 get_Item() -FSharp.Compiler.SyntaxTree+SynConst+UInt16: range Range(range) -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsBool -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsByte -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsBytes -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsChar -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsDecimal -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsDouble -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsInt16 -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsInt32 -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsInt64 -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsIntPtr -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsMeasure -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsSByte -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsSingle -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsString -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsUInt16 -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsUInt16s -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsUInt32 -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsUInt64 -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsUIntPtr -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsUnit -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean IsUserNum -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsBool() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsByte() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsBytes() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsChar() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsDecimal() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsDouble() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsInt16() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsInt32() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsInt64() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsMeasure() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsSByte() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsSingle() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsUInt16() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsUInt16s() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsUInt32() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsUInt64() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsUIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsUnit() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Boolean get_IsUserNum() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Int32 Tag -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: System.String ToString() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: UInt16[] Item -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: UInt16[] get_Item() -FSharp.Compiler.SyntaxTree+SynConst+UInt16s: range Range(range) -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsBool -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsByte -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsBytes -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsChar -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsDecimal -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsDouble -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsInt16 -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsInt32 -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsInt64 -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsIntPtr -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsMeasure -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsSByte -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsSingle -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsString -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsUInt16 -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsUInt16s -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsUInt32 -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsUInt64 -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsUIntPtr -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsUnit -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean IsUserNum -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsBool() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsByte() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsBytes() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsChar() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsDecimal() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsDouble() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsInt16() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsInt32() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsInt64() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsMeasure() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsSByte() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsSingle() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsUInt16() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsUInt16s() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsUInt32() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsUInt64() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsUIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsUnit() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Boolean get_IsUserNum() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Int32 Tag -FSharp.Compiler.SyntaxTree+SynConst+UInt32: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: System.String ToString() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: UInt32 Item -FSharp.Compiler.SyntaxTree+SynConst+UInt32: UInt32 get_Item() -FSharp.Compiler.SyntaxTree+SynConst+UInt32: range Range(range) -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsBool -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsByte -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsBytes -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsChar -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsDecimal -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsDouble -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsInt16 -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsInt32 -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsInt64 -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsIntPtr -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsMeasure -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsSByte -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsSingle -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsString -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsUInt16 -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsUInt16s -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsUInt32 -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsUInt64 -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsUIntPtr -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsUnit -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean IsUserNum -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsBool() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsByte() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsBytes() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsChar() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsDecimal() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsDouble() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsInt16() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsInt32() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsInt64() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsMeasure() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsSByte() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsSingle() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsUInt16() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsUInt16s() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsUInt32() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsUInt64() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsUIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsUnit() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Boolean get_IsUserNum() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Int32 Tag -FSharp.Compiler.SyntaxTree+SynConst+UInt64: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: System.String ToString() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: UInt64 Item -FSharp.Compiler.SyntaxTree+SynConst+UInt64: UInt64 get_Item() -FSharp.Compiler.SyntaxTree+SynConst+UInt64: range Range(range) -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsBool -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsByte -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsBytes -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsChar -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsDecimal -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsDouble -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsInt16 -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsInt32 -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsInt64 -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsIntPtr -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsMeasure -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsSByte -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsSingle -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsString -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsUInt16 -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsUInt16s -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsUInt32 -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsUInt64 -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsUIntPtr -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsUnit -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean IsUserNum -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsBool() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsByte() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsBytes() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsChar() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsDecimal() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsDouble() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsInt16() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsInt32() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsInt64() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsMeasure() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsSByte() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsSingle() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsUInt16() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsUInt16s() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsUInt32() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsUInt64() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsUIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsUnit() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Boolean get_IsUserNum() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Int32 Tag -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: System.String ToString() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: UInt64 Item -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: UInt64 get_Item() -FSharp.Compiler.SyntaxTree+SynConst+UIntPtr: range Range(range) -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsBool -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsByte -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsBytes -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsChar -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsDecimal -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsDouble -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsInt16 -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsInt32 -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsInt64 -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsIntPtr -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsMeasure -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsSByte -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsSingle -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsString -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsUInt16 -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsUInt16s -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsUInt32 -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsUInt64 -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsUIntPtr -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsUnit -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean IsUserNum -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsBool() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsByte() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsBytes() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsChar() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsDecimal() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsDouble() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsInt16() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsInt32() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsInt64() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsMeasure() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsSByte() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsSingle() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsUInt16() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsUInt16s() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsUInt32() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsUInt64() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsUIntPtr() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsUnit() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Boolean get_IsUserNum() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Int32 Tag -FSharp.Compiler.SyntaxTree+SynConst+UserNum: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: System.String ToString() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: System.String get_suffix() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: System.String get_value() -FSharp.Compiler.SyntaxTree+SynConst+UserNum: System.String suffix -FSharp.Compiler.SyntaxTree+SynConst+UserNum: System.String value -FSharp.Compiler.SyntaxTree+SynConst+UserNum: range Range(range) -FSharp.Compiler.SyntaxTree+SynConst: Boolean IsBool -FSharp.Compiler.SyntaxTree+SynConst: Boolean IsByte -FSharp.Compiler.SyntaxTree+SynConst: Boolean IsBytes -FSharp.Compiler.SyntaxTree+SynConst: Boolean IsChar -FSharp.Compiler.SyntaxTree+SynConst: Boolean IsDecimal -FSharp.Compiler.SyntaxTree+SynConst: Boolean IsDouble -FSharp.Compiler.SyntaxTree+SynConst: Boolean IsInt16 -FSharp.Compiler.SyntaxTree+SynConst: Boolean IsInt32 -FSharp.Compiler.SyntaxTree+SynConst: Boolean IsInt64 -FSharp.Compiler.SyntaxTree+SynConst: Boolean IsIntPtr -FSharp.Compiler.SyntaxTree+SynConst: Boolean IsMeasure -FSharp.Compiler.SyntaxTree+SynConst: Boolean IsSByte -FSharp.Compiler.SyntaxTree+SynConst: Boolean IsSingle -FSharp.Compiler.SyntaxTree+SynConst: Boolean IsString -FSharp.Compiler.SyntaxTree+SynConst: Boolean IsUInt16 -FSharp.Compiler.SyntaxTree+SynConst: Boolean IsUInt16s -FSharp.Compiler.SyntaxTree+SynConst: Boolean IsUInt32 -FSharp.Compiler.SyntaxTree+SynConst: Boolean IsUInt64 -FSharp.Compiler.SyntaxTree+SynConst: Boolean IsUIntPtr -FSharp.Compiler.SyntaxTree+SynConst: Boolean IsUnit -FSharp.Compiler.SyntaxTree+SynConst: Boolean IsUserNum -FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsBool() -FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsByte() -FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsBytes() -FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsChar() -FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsDecimal() -FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsDouble() -FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsInt16() -FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsInt32() -FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsInt64() -FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsIntPtr() -FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsMeasure() -FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsSByte() -FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsSingle() -FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsUInt16() -FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsUInt16s() -FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsUInt32() -FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsUInt64() -FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsUIntPtr() -FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsUnit() -FSharp.Compiler.SyntaxTree+SynConst: Boolean get_IsUserNum() -FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Bool -FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Byte -FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Bytes -FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Char -FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Decimal -FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Double -FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Int16 -FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Int32 -FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Int64 -FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+IntPtr -FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Measure -FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+SByte -FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Single -FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+String -FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+Tags -FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+UInt16 -FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+UInt16s -FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+UInt32 -FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+UInt64 -FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+UIntPtr -FSharp.Compiler.SyntaxTree+SynConst: FSharp.Compiler.SyntaxTree+SynConst+UserNum -FSharp.Compiler.SyntaxTree+SynConst: Int32 Tag -FSharp.Compiler.SyntaxTree+SynConst: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynConst: SynConst NewBool(Boolean) -FSharp.Compiler.SyntaxTree+SynConst: SynConst NewByte(Byte) -FSharp.Compiler.SyntaxTree+SynConst: SynConst NewBytes(Byte[], range) -FSharp.Compiler.SyntaxTree+SynConst: SynConst NewChar(Char) -FSharp.Compiler.SyntaxTree+SynConst: SynConst NewDecimal(System.Decimal) -FSharp.Compiler.SyntaxTree+SynConst: SynConst NewDouble(Double) -FSharp.Compiler.SyntaxTree+SynConst: SynConst NewInt16(Int16) -FSharp.Compiler.SyntaxTree+SynConst: SynConst NewInt32(Int32) -FSharp.Compiler.SyntaxTree+SynConst: SynConst NewInt64(Int64) -FSharp.Compiler.SyntaxTree+SynConst: SynConst NewIntPtr(Int64) -FSharp.Compiler.SyntaxTree+SynConst: SynConst NewMeasure(SynConst, SynMeasure) -FSharp.Compiler.SyntaxTree+SynConst: SynConst NewSByte(SByte) -FSharp.Compiler.SyntaxTree+SynConst: SynConst NewSingle(Single) -FSharp.Compiler.SyntaxTree+SynConst: SynConst NewString(System.String, range) -FSharp.Compiler.SyntaxTree+SynConst: SynConst NewUInt16(UInt16) -FSharp.Compiler.SyntaxTree+SynConst: SynConst NewUInt16s(UInt16[]) -FSharp.Compiler.SyntaxTree+SynConst: SynConst NewUInt32(UInt32) -FSharp.Compiler.SyntaxTree+SynConst: SynConst NewUInt64(UInt64) -FSharp.Compiler.SyntaxTree+SynConst: SynConst NewUIntPtr(UInt64) -FSharp.Compiler.SyntaxTree+SynConst: SynConst NewUserNum(System.String, System.String) -FSharp.Compiler.SyntaxTree+SynConst: SynConst Unit -FSharp.Compiler.SyntaxTree+SynConst: SynConst get_Unit() -FSharp.Compiler.SyntaxTree+SynConst: System.String ToString() -FSharp.Compiler.SyntaxTree+SynConst: range Range(range) -FSharp.Compiler.SyntaxTree+SynEnumCase: Ident get_ident() -FSharp.Compiler.SyntaxTree+SynEnumCase: Ident ident -FSharp.Compiler.SyntaxTree+SynEnumCase: Int32 Tag -FSharp.Compiler.SyntaxTree+SynEnumCase: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynEnumCase: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes -FSharp.Compiler.SyntaxTree+SynEnumCase: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() -FSharp.Compiler.SyntaxTree+SynEnumCase: PreXmlDoc get_xmldoc() -FSharp.Compiler.SyntaxTree+SynEnumCase: PreXmlDoc xmldoc -FSharp.Compiler.SyntaxTree+SynEnumCase: SynConst Item3 -FSharp.Compiler.SyntaxTree+SynEnumCase: SynConst get_Item3() -FSharp.Compiler.SyntaxTree+SynEnumCase: SynEnumCase NewEnumCase(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Ident, SynConst, PreXmlDoc, range) -FSharp.Compiler.SyntaxTree+SynEnumCase: System.String ToString() -FSharp.Compiler.SyntaxTree+SynEnumCase: range Range -FSharp.Compiler.SyntaxTree+SynEnumCase: range get_Range() -FSharp.Compiler.SyntaxTree+SynEnumCase: range get_range() -FSharp.Compiler.SyntaxTree+SynEnumCase: range range -FSharp.Compiler.SyntaxTree+SynExceptionDefn: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExceptionDefn: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExceptionDefn: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn] get_members() -FSharp.Compiler.SyntaxTree+SynExceptionDefn: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn] members -FSharp.Compiler.SyntaxTree+SynExceptionDefn: SynExceptionDefn NewSynExceptionDefn(SynExceptionDefnRepr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn], range) -FSharp.Compiler.SyntaxTree+SynExceptionDefn: SynExceptionDefnRepr exnRepr -FSharp.Compiler.SyntaxTree+SynExceptionDefn: SynExceptionDefnRepr get_exnRepr() -FSharp.Compiler.SyntaxTree+SynExceptionDefn: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExceptionDefn: range Range -FSharp.Compiler.SyntaxTree+SynExceptionDefn: range get_Range() -FSharp.Compiler.SyntaxTree+SynExceptionDefn: range get_range() -FSharp.Compiler.SyntaxTree+SynExceptionDefn: range range -FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes -FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() -FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility -FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() -FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident]] get_longId() -FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident]] longId -FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: PreXmlDoc get_xmlDoc() -FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: PreXmlDoc xmlDoc -FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: SynExceptionDefnRepr NewSynExceptionDefnRepr(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], SynUnionCase, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident]], PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) -FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: SynUnionCase caseName -FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: SynUnionCase get_caseName() -FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: range Range -FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: range get_Range() -FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: range get_range() -FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr: range range -FSharp.Compiler.SyntaxTree+SynExceptionSig: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExceptionSig: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExceptionSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberSig] get_members() -FSharp.Compiler.SyntaxTree+SynExceptionSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberSig] members -FSharp.Compiler.SyntaxTree+SynExceptionSig: SynExceptionDefnRepr exnRepr -FSharp.Compiler.SyntaxTree+SynExceptionSig: SynExceptionDefnRepr get_exnRepr() -FSharp.Compiler.SyntaxTree+SynExceptionSig: SynExceptionSig NewSynExceptionSig(SynExceptionDefnRepr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberSig], range) -FSharp.Compiler.SyntaxTree+SynExceptionSig: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExceptionSig: range get_range() -FSharp.Compiler.SyntaxTree+SynExceptionSig: range range -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean get_isByref() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Boolean isByref -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: range Range -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: range get_opRange() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: range opRange -FSharp.Compiler.SyntaxTree+SynExpr+AddressOf: range range -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean get_isStruct() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Boolean isStruct -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+Ident,FSharp.Compiler.SyntaxTree+SynExpr]] get_recordFields() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+Ident,FSharp.Compiler.SyntaxTree+SynExpr]] recordFields -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynExpr,System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]]] copyInfo -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynExpr,System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]]] get_copyInfo() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: range Range -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd: range range -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean get_isInfix() -FSharp.Compiler.SyntaxTree+SynExpr+App: Boolean isInfix -FSharp.Compiler.SyntaxTree+SynExpr+App: ExprAtomicFlag flag -FSharp.Compiler.SyntaxTree+SynExpr+App: ExprAtomicFlag get_flag() -FSharp.Compiler.SyntaxTree+SynExpr+App: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+App: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+App: SynExpr argExpr -FSharp.Compiler.SyntaxTree+SynExpr+App: SynExpr funcExpr -FSharp.Compiler.SyntaxTree+SynExpr+App: SynExpr get_argExpr() -FSharp.Compiler.SyntaxTree+SynExpr+App: SynExpr get_funcExpr() -FSharp.Compiler.SyntaxTree+SynExpr+App: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+App: range Range -FSharp.Compiler.SyntaxTree+SynExpr+App: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+App: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+App: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+App: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+App: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+App: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+App: range range -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: System.String debugStr -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: System.String get_debugStr() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: range Range -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError: range range -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean get_isList() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Boolean isList -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] exprs -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] get_exprs() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: range Range -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList: range range -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean get_isArray() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Boolean isArray -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: range Range -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr: range range -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+Assert: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+Assert: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: range Range -FSharp.Compiler.SyntaxTree+SynExpr+Assert: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+Assert: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+Assert: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+Assert: range range -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean get_isArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Boolean isArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Microsoft.FSharp.Core.FSharpRef`1[System.Boolean] get_isNotNakedRefCell() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: Microsoft.FSharp.Core.FSharpRef`1[System.Boolean] isNotNakedRefCell -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: range Range -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+CompExpr: range range -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+Const: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+Const: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+Const: SynConst constant -FSharp.Compiler.SyntaxTree+SynExpr+Const: SynConst get_constant() -FSharp.Compiler.SyntaxTree+SynExpr+Const: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+Const: range Range -FSharp.Compiler.SyntaxTree+SynExpr+Const: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+Const: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+Const: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+Const: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+Const: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+Const: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+Const: range range -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: range Range -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot: range range -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+Do: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+Do: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+Do: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+Do: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+Do: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+Do: range Range -FSharp.Compiler.SyntaxTree+SynExpr+Do: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+Do: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+Do: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+Do: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+Do: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+Do: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+Do: range range -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: range Range -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+DoBang: range range -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: LongIdentWithDots get_longDotId() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: LongIdentWithDots longDotId -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: range Range -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: range get_rangeOfDot() -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: range range -FSharp.Compiler.SyntaxTree+SynExpr+DotGet: range rangeOfDot -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynIndexerArg] get_indexExprs() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynIndexerArg] indexExprs -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: SynExpr get_objectExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: SynExpr objectExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: range Range -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: range dotRange -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: range get_dotRange() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet: range range -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynIndexerArg] get_indexExprs() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynIndexerArg] indexExprs -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: SynExpr get_objectExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: SynExpr get_valueExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: SynExpr objectExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: SynExpr valueExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range Range -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range dotRange -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range get_dotRange() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range get_leftOfSetRange() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range leftOfSetRange -FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet: range range -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: LongIdentWithDots get_longDotId() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: LongIdentWithDots longDotId -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: SynExpr argExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: SynExpr get_argExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: SynExpr get_rhsExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: SynExpr get_targetExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: SynExpr rhsExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: SynExpr targetExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: range Range -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet: range range -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: LongIdentWithDots get_longDotId() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: LongIdentWithDots longDotId -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: SynExpr get_rhsExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: SynExpr get_targetExpr() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: SynExpr rhsExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: SynExpr targetExpr -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: range Range -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+DotSet: range range -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: SynType get_targetType() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: SynType targetType -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: range Range -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+Downcast: range range -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: range Range -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+Fixed: range range -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean direction -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+For: Boolean get_direction() -FSharp.Compiler.SyntaxTree+SynExpr+For: DebugPointAtFor forSeqPoint -FSharp.Compiler.SyntaxTree+SynExpr+For: DebugPointAtFor get_forSeqPoint() -FSharp.Compiler.SyntaxTree+SynExpr+For: Ident get_ident() -FSharp.Compiler.SyntaxTree+SynExpr+For: Ident ident -FSharp.Compiler.SyntaxTree+SynExpr+For: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+For: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+For: SynExpr doBody -FSharp.Compiler.SyntaxTree+SynExpr+For: SynExpr get_doBody() -FSharp.Compiler.SyntaxTree+SynExpr+For: SynExpr get_identBody() -FSharp.Compiler.SyntaxTree+SynExpr+For: SynExpr get_toBody() -FSharp.Compiler.SyntaxTree+SynExpr+For: SynExpr identBody -FSharp.Compiler.SyntaxTree+SynExpr+For: SynExpr toBody -FSharp.Compiler.SyntaxTree+SynExpr+For: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+For: range Range -FSharp.Compiler.SyntaxTree+SynExpr+For: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+For: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+For: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+For: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+For: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+For: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+For: range range -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean get_isFromSource() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Boolean isFromSource -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: DebugPointAtFor forSeqPoint -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: DebugPointAtFor get_forSeqPoint() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: SeqExprOnly get_seqExprOnly() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: SeqExprOnly seqExprOnly -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: SynExpr bodyExpr -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: SynExpr enumExpr -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: SynExpr get_bodyExpr() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: SynExpr get_enumExpr() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: SynPat get_pat() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: SynPat pat -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: range Range -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+ForEach: range range -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: range Range -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+FromParseError: range range -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Ident get_ident() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Ident ident -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+Ident: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: range Range -FSharp.Compiler.SyntaxTree+SynExpr+Ident: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+Ident: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+Ident: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+Ident: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean get_isFromErrorRecovery() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Boolean isFromErrorRecovery -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: DebugPointForBinding get_spIfToThen() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: DebugPointForBinding spIfToThen -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr] elseExpr -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr] get_elseExpr() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: SynExpr get_ifExpr() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: SynExpr get_thenExpr() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: SynExpr ifExpr -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: SynExpr thenExpr -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: range Range -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: range get_ifToThenRange() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: range ifToThenRange -FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse: range range -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: range Range -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero: range range -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: range Range -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast: range range -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: range Range -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast: range range -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart] contents -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart] get_contents() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: range Range -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString: range range -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: SynExpr get_lhsExpr() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: SynExpr get_rhsExpr() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: SynExpr lhsExpr -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: SynExpr rhsExpr -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: range Range -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: range get_lhsRange() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: range lhsRange -FSharp.Compiler.SyntaxTree+SynExpr+JoinIn: range range -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean fromMethod -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_fromMethod() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean get_inLambdaSeq() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Boolean inLambdaSeq -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: SynExpr body -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: SynExpr get_body() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: SynSimplePats args -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: SynSimplePats get_args() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat],FSharp.Compiler.SyntaxTree+SynExpr]] parsedData -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat],FSharp.Compiler.SyntaxTree+SynExpr]] get_parsedData() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: range Range -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+Lambda: range range -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: range Range -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+Lazy: range range -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_isRecursive() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean get_isUse() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean isRecursive -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Boolean isUse -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding] bindings -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding] get_bindings() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: SynExpr body -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: SynExpr get_body() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: range Range -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse: range range -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_isFromSource() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean get_isUse() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean isFromSource -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Boolean isUse -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: DebugPointForBinding bindSeqPoint -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: DebugPointForBinding get_bindSeqPoint() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`6[FSharp.Compiler.SyntaxTree+DebugPointForBinding,System.Boolean,System.Boolean,FSharp.Compiler.SyntaxTree+SynPat,FSharp.Compiler.SyntaxTree+SynExpr,FSharp.Compiler.Range+range]] andBangs -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`6[FSharp.Compiler.SyntaxTree+DebugPointForBinding,System.Boolean,System.Boolean,FSharp.Compiler.SyntaxTree+SynPat,FSharp.Compiler.SyntaxTree+SynExpr,FSharp.Compiler.Range+range]] get_andBangs() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: SynExpr body -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: SynExpr get_body() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: SynExpr get_rhs() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: SynExpr rhs -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: SynPat get_pat() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: SynPat pat -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: range Range -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang: range range -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: ILInstr[] get_ilCode() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: ILInstr[] ilCode -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] args -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] get_args() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] get_retTy() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] get_typeArgs() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] retTy -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] typeArgs -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: range Range -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly: range range -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint] constraints -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint] get_constraints() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: SynExpr get_optimizedExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: SynExpr optimizedExpr -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: range Range -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization: range range -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Int32 fieldNum -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Int32 get_fieldNum() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: range Range -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet: range range -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Int32 fieldNum -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Int32 get_fieldNum() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: SynExpr get_rhsExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: SynExpr rhsExpr -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: range Range -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet: range range -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean get_isOptional() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Boolean isOptional -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: LongIdentWithDots get_longDotId() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: LongIdentWithDots longDotId -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo]] altNameRefCell -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo]] get_altNameRefCell() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: range Range -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdent: range range -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: LongIdentWithDots get_longDotId() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: LongIdentWithDots longDotId -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: range Range -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet: range range -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+Match: DebugPointForBinding get_matchSeqPoint() -FSharp.Compiler.SyntaxTree+SynExpr+Match: DebugPointForBinding matchSeqPoint -FSharp.Compiler.SyntaxTree+SynExpr+Match: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+Match: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+Match: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause] clauses -FSharp.Compiler.SyntaxTree+SynExpr+Match: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause] get_clauses() -FSharp.Compiler.SyntaxTree+SynExpr+Match: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+Match: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+Match: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+Match: range Range -FSharp.Compiler.SyntaxTree+SynExpr+Match: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+Match: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+Match: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+Match: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+Match: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+Match: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+Match: range range -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: DebugPointForBinding get_matchSeqPoint() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: DebugPointForBinding matchSeqPoint -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause] clauses -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause] get_clauses() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: range Range -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+MatchBang: range range -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean get_isExnMatch() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Boolean isExnMatch -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: DebugPointForBinding get_matchSeqPoint() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: DebugPointForBinding matchSeqPoint -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause] get_matchClauses() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause] matchClauses -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: range Range -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: range get_keywordRange() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: range keywordRange -FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda: range range -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: LongIdentWithDots get_longDotId() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: LongIdentWithDots longDotId -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: SynExpr expr1 -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: SynExpr expr2 -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: SynExpr get_expr1() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: SynExpr get_expr2() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: range Range -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet: range range -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean get_isProtected() -FSharp.Compiler.SyntaxTree+SynExpr+New: Boolean isProtected -FSharp.Compiler.SyntaxTree+SynExpr+New: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+New: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+New: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+New: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+New: SynType get_targetType() -FSharp.Compiler.SyntaxTree+SynExpr+New: SynType targetType -FSharp.Compiler.SyntaxTree+SynExpr+New: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+New: range Range -FSharp.Compiler.SyntaxTree+SynExpr+New: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+New: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+New: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+New: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+New: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+New: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+New: range range -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+Null: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+Null: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+Null: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+Null: range Range -FSharp.Compiler.SyntaxTree+SynExpr+Null: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+Null: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+Null: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+Null: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+Null: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+Null: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+Null: range range -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding] bindings -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding] get_bindings() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynInterfaceImpl] extraImpls -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynInterfaceImpl] get_extraImpls() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynExpr,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]]] argOptions -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynExpr,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]]] get_argOptions() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: SynType get_objType() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: SynType objType -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: range Range -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: range get_newExprRange() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: range newExprRange -FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr: range range -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_rightParenRange() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] rightParenRange -FSharp.Compiler.SyntaxTree+SynExpr+Paren: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+Paren: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: range Range -FSharp.Compiler.SyntaxTree+SynExpr+Paren: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+Paren: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+Paren: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: range get_leftParenRange() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+Paren: range leftParenRange -FSharp.Compiler.SyntaxTree+SynExpr+Paren: range range -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_isFromQueryExpression() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean get_isRaw() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean isFromQueryExpression -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Boolean isRaw -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+Quote: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: SynExpr get_operator() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: SynExpr get_quotedExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: SynExpr operator -FSharp.Compiler.SyntaxTree+SynExpr+Quote: SynExpr quotedExpr -FSharp.Compiler.SyntaxTree+SynExpr+Quote: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: range Range -FSharp.Compiler.SyntaxTree+SynExpr+Quote: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+Quote: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+Quote: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+Quote: range range -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+Record: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Tuple`2[FSharp.Compiler.SyntaxTree+LongIdentWithDots,System.Boolean],Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr],Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]]]] get_recordFields() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Tuple`2[FSharp.Compiler.SyntaxTree+LongIdentWithDots,System.Boolean],Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr],Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]]]] recordFields -FSharp.Compiler.SyntaxTree+SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynExpr,System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]]] copyInfo -FSharp.Compiler.SyntaxTree+SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynExpr,System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]]] get_copyInfo() -FSharp.Compiler.SyntaxTree+SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.SyntaxTree+SynType,FSharp.Compiler.SyntaxTree+SynExpr,FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]],FSharp.Compiler.Range+range]] baseInfo -FSharp.Compiler.SyntaxTree+SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.SyntaxTree+SynType,FSharp.Compiler.SyntaxTree+SynExpr,FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]],FSharp.Compiler.Range+range]] get_baseInfo() -FSharp.Compiler.SyntaxTree+SynExpr+Record: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+Record: range Range -FSharp.Compiler.SyntaxTree+SynExpr+Record: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+Record: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+Record: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+Record: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+Record: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+Record: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+Record: range range -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean get_isTrueSeq() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Boolean isTrueSeq -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: DebugPointAtSequential get_seqPoint() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: DebugPointAtSequential seqPoint -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: SynExpr expr1 -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: SynExpr expr2 -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: SynExpr get_expr1() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: SynExpr get_expr2() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: range Range -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+Sequential: range range -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: DebugPointAtSequential get_seqPoint() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: DebugPointAtSequential seqPoint -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: SynExpr expr1 -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: SynExpr expr2 -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: SynExpr get_expr1() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: SynExpr get_expr2() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: SynExpr get_ifNotStmt() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: SynExpr ifNotStmt -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: range Range -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield: range range -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+Set: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+Set: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+Set: SynExpr get_rhsExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Set: SynExpr get_targetExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Set: SynExpr rhsExpr -FSharp.Compiler.SyntaxTree+SynExpr+Set: SynExpr targetExpr -FSharp.Compiler.SyntaxTree+SynExpr+Set: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+Set: range Range -FSharp.Compiler.SyntaxTree+SynExpr+Set: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+Set: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+Set: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+Set: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+Set: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+Set: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+Set: range range -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 AddressOf -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 AnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 App -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 ArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 ArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 ArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Assert -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 CompExpr -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Const -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 DiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Do -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 DoBang -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 DotGet -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 DotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 DotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 DotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 DotSet -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Downcast -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Fixed -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 For -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 ForEach -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 FromParseError -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Ident -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 IfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 ImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 InferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 InferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 InterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 JoinIn -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Lambda -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Lazy -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 LetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 LetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 LibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 LibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 LibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 LibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 LongIdent -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 LongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Match -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 MatchBang -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 MatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 NamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 New -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Null -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 ObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Paren -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Quote -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Record -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Sequential -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 SequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Set -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 TraitCall -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 TryFinally -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 TryWith -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Tuple -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 TypeApp -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 TypeTest -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Typed -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 Upcast -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 While -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 YieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+Tags: Int32 YieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypar] get_supportTys() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypar] supportTys -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: SynExpr argExpr -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: SynExpr get_argExpr() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: SynMemberSig get_traitSig() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: SynMemberSig traitSig -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: range Range -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+TraitCall: range range -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: DebugPointAtFinally finallySeqPoint -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: DebugPointAtFinally get_finallySeqPoint() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: DebugPointAtTry get_trySeqPoint() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: DebugPointAtTry trySeqPoint -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: SynExpr finallyExpr -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: SynExpr get_finallyExpr() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: SynExpr get_tryExpr() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: SynExpr tryExpr -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: range Range -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+TryFinally: range range -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: DebugPointAtTry get_trySeqPoint() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: DebugPointAtTry trySeqPoint -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: DebugPointAtWith get_withSeqPoint() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: DebugPointAtWith withSeqPoint -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause] get_withCases() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause] withCases -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: SynExpr get_tryExpr() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: SynExpr tryExpr -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range Range -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range get_tryRange() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range get_withRange() -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range range -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range tryRange -FSharp.Compiler.SyntaxTree+SynExpr+TryWith: range withRange -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean get_isStruct() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Boolean isStruct -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range] commaRanges -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range] get_commaRanges() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] exprs -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] get_exprs() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: range Range -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+Tuple: range range -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range] commaRanges -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range] get_commaRanges() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] get_typeArgs() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] typeArgs -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_greaterRange() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] greaterRange -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range Range -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range get_lessRange() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range get_typeArgsRange() -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range lessRange -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range range -FSharp.Compiler.SyntaxTree+SynExpr+TypeApp: range typeArgsRange -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: SynType get_targetType() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: SynType targetType -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: range Range -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+TypeTest: range range -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+Typed: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+Typed: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: SynType get_targetType() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: SynType targetType -FSharp.Compiler.SyntaxTree+SynExpr+Typed: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: range Range -FSharp.Compiler.SyntaxTree+SynExpr+Typed: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+Typed: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+Typed: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+Typed: range range -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: SynType get_targetType() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: SynType targetType -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: range Range -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+Upcast: range range -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+While: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+While: DebugPointAtWhile get_whileSeqPoint() -FSharp.Compiler.SyntaxTree+SynExpr+While: DebugPointAtWhile whileSeqPoint -FSharp.Compiler.SyntaxTree+SynExpr+While: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+While: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+While: SynExpr doExpr -FSharp.Compiler.SyntaxTree+SynExpr+While: SynExpr get_doExpr() -FSharp.Compiler.SyntaxTree+SynExpr+While: SynExpr get_whileExpr() -FSharp.Compiler.SyntaxTree+SynExpr+While: SynExpr whileExpr -FSharp.Compiler.SyntaxTree+SynExpr+While: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+While: range Range -FSharp.Compiler.SyntaxTree+SynExpr+While: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+While: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+While: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+While: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+While: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+While: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+While: range range -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: System.Tuple`2[System.Boolean,System.Boolean] flags -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: System.Tuple`2[System.Boolean,System.Boolean] get_flags() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: range Range -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn: range range -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: SynExpr expr -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: System.Tuple`2[System.Boolean,System.Boolean] flags -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: System.Tuple`2[System.Boolean,System.Boolean] get_flags() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: range Range -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: range get_range() -FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom: range range -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsAddressOf -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsArbExprAndThusAlreadyReportedError -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsAssert -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsCompExpr -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsDiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsDo -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsDoBang -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsDotGet -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsDotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsDotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsDotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsDotSet -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsDowncast -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsFixed -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsFor -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsForEach -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsIdent -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsIfThenElse -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsInferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsInferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsInterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsJoinIn -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsLambda -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsLazy -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsLetOrUse -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsLetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsLibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsLibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsLibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsLongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsMatch -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsMatchBang -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsMatchLambda -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsNew -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsObjExpr -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsQuote -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsSequential -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsSequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsSet -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsTraitCall -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsTryFinally -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsTryWith -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsTypeApp -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsTypeTest -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsUpcast -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsWhile -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsYieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr: Boolean IsYieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsAddressOf() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsArbExprAndThusAlreadyReportedError() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsArbitraryAfterError() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsArrayOrListOfSeqExpr() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsAssert() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsCompExpr() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsDiscardAfterMissingQualificationAfterDot() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsDo() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsDoBang() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsDotGet() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsDotIndexedGet() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsDotIndexedSet() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsDotNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsDotSet() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsDowncast() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsFixed() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsFor() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsForEach() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsIdent() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsIfThenElse() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsImplicitZero() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsInferredDowncast() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsInferredUpcast() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsInterpolatedString() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsJoinIn() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsLambda() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsLazy() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsLetOrUse() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsLetOrUseBang() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsLibraryOnlyStaticOptimization() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsLibraryOnlyUnionCaseFieldGet() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsLibraryOnlyUnionCaseFieldSet() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsLongIdentSet() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsMatch() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsMatchBang() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsMatchLambda() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsNamedIndexedPropertySet() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsNew() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsObjExpr() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsQuote() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsSequential() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsSequentialOrImplicitYield() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsSet() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsTraitCall() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsTryFinally() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsTryWith() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsTypeApp() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsTypeTest() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsUpcast() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsWhile() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsYieldOrReturn() -FSharp.Compiler.SyntaxTree+SynExpr: Boolean get_IsYieldOrReturnFrom() -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+AddressOf -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+AnonRecd -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+App -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+ArbitraryAfterError -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrList -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+ArrayOrListOfSeqExpr -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Assert -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+CompExpr -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Const -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+DiscardAfterMissingQualificationAfterDot -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Do -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+DoBang -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+DotGet -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedGet -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+DotIndexedSet -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+DotNamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+DotSet -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Downcast -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Fixed -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+For -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+ForEach -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+FromParseError -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Ident -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+IfThenElse -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+ImplicitZero -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+InferredDowncast -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+InferredUpcast -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+InterpolatedString -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+JoinIn -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Lambda -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Lazy -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+LetOrUse -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+LetOrUseBang -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyStaticOptimization -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldGet -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+LibraryOnlyUnionCaseFieldSet -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+LongIdent -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+LongIdentSet -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Match -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+MatchBang -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+MatchLambda -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+NamedIndexedPropertySet -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+New -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Null -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+ObjExpr -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Paren -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Quote -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Record -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Sequential -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+SequentialOrImplicitYield -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Set -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Tags -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+TraitCall -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+TryFinally -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+TryWith -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Tuple -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+TypeApp -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+TypeTest -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Typed -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+Upcast -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+While -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturn -FSharp.Compiler.SyntaxTree+SynExpr: FSharp.Compiler.SyntaxTree+SynExpr+YieldOrReturnFrom -FSharp.Compiler.SyntaxTree+SynExpr: Int32 Tag -FSharp.Compiler.SyntaxTree+SynExpr: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewAddressOf(Boolean, SynExpr, range, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewAnonRecd(Boolean, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynExpr,System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+Ident,FSharp.Compiler.SyntaxTree+SynExpr]], range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewApp(ExprAtomicFlag, Boolean, SynExpr, SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewArbitraryAfterError(System.String, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewArrayOrList(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr], range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewArrayOrListOfSeqExpr(Boolean, SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewAssert(SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewCompExpr(Boolean, Microsoft.FSharp.Core.FSharpRef`1[System.Boolean], SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewConst(SynConst, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewDiscardAfterMissingQualificationAfterDot(SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewDo(SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewDoBang(SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewDotGet(SynExpr, range, LongIdentWithDots, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewDotIndexedGet(SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynIndexerArg], range, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewDotIndexedSet(SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynIndexerArg], SynExpr, range, range, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewDotNamedIndexedPropertySet(SynExpr, LongIdentWithDots, SynExpr, SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewDotSet(SynExpr, LongIdentWithDots, SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewDowncast(SynExpr, SynType, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewFixed(SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewFor(DebugPointAtFor, Ident, SynExpr, Boolean, SynExpr, SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewForEach(DebugPointAtFor, SeqExprOnly, Boolean, SynPat, SynExpr, SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewFromParseError(SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewIdent(Ident) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewIfThenElse(SynExpr, SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr], DebugPointForBinding, Boolean, range, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewImplicitZero(range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewInferredDowncast(SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewInferredUpcast(SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewInterpolatedString(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart], range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewJoinIn(SynExpr, range, SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewLambda(Boolean, Boolean, SynSimplePats, SynExpr, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat],FSharp.Compiler.SyntaxTree+SynExpr]], range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewLazy(SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewLetOrUse(Boolean, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding], SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewLetOrUseBang(DebugPointForBinding, Boolean, Boolean, SynPat, SynExpr, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`6[FSharp.Compiler.SyntaxTree+DebugPointForBinding,System.Boolean,System.Boolean,FSharp.Compiler.SyntaxTree+SynPat,FSharp.Compiler.SyntaxTree+SynExpr,FSharp.Compiler.Range+range]], SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewLibraryOnlyILAssembly(ILInstr[], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType], range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewLibraryOnlyStaticOptimization(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint], SynExpr, SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewLibraryOnlyUnionCaseFieldGet(SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], Int32, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewLibraryOnlyUnionCaseFieldSet(SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], Int32, SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewLongIdent(Boolean, LongIdentWithDots, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo]], range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewLongIdentSet(LongIdentWithDots, SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewMatch(DebugPointForBinding, SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause], range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewMatchBang(DebugPointForBinding, SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause], range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewMatchLambda(Boolean, range, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause], DebugPointForBinding, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewNamedIndexedPropertySet(LongIdentWithDots, SynExpr, SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewNew(Boolean, SynType, SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewNull(range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewObjExpr(SynType, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynExpr,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]]], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynInterfaceImpl], range, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewParen(SynExpr, range, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range], range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewQuote(SynExpr, Boolean, SynExpr, Boolean, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewRecord(Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.SyntaxTree+SynType,FSharp.Compiler.SyntaxTree+SynExpr,FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]],FSharp.Compiler.Range+range]], Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynExpr,System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Tuple`2[FSharp.Compiler.SyntaxTree+LongIdentWithDots,System.Boolean],Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr],Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+pos]]]]], range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewSequential(DebugPointAtSequential, Boolean, SynExpr, SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewSequentialOrImplicitYield(DebugPointAtSequential, SynExpr, SynExpr, SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewSet(SynExpr, SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewTraitCall(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypar], SynMemberSig, SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewTryFinally(SynExpr, SynExpr, range, DebugPointAtTry, DebugPointAtFinally) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewTryWith(SynExpr, range, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMatchClause], range, range, DebugPointAtTry, DebugPointAtWith) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewTuple(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range], range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewTypeApp(SynExpr, range, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range], range, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewTypeTest(SynExpr, SynType, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewTyped(SynExpr, SynType, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewUpcast(SynExpr, SynType, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewWhile(DebugPointAtWhile, SynExpr, SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewYieldOrReturn(System.Tuple`2[System.Boolean,System.Boolean], SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: SynExpr NewYieldOrReturnFrom(System.Tuple`2[System.Boolean,System.Boolean], SynExpr, range) -FSharp.Compiler.SyntaxTree+SynExpr: System.String ToString() -FSharp.Compiler.SyntaxTree+SynExpr: range Range -FSharp.Compiler.SyntaxTree+SynExpr: range RangeOfFirstPortion -FSharp.Compiler.SyntaxTree+SynExpr: range RangeSansAnyExtraDot -FSharp.Compiler.SyntaxTree+SynExpr: range get_Range() -FSharp.Compiler.SyntaxTree+SynExpr: range get_RangeOfFirstPortion() -FSharp.Compiler.SyntaxTree+SynExpr: range get_RangeSansAnyExtraDot() -FSharp.Compiler.SyntaxTree+SynField: Boolean get_isMutable() -FSharp.Compiler.SyntaxTree+SynField: Boolean get_isStatic() -FSharp.Compiler.SyntaxTree+SynField: Boolean isMutable -FSharp.Compiler.SyntaxTree+SynField: Boolean isStatic -FSharp.Compiler.SyntaxTree+SynField: Int32 Tag -FSharp.Compiler.SyntaxTree+SynField: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynField: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes -FSharp.Compiler.SyntaxTree+SynField: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() -FSharp.Compiler.SyntaxTree+SynField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_idOpt() -FSharp.Compiler.SyntaxTree+SynField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] idOpt -FSharp.Compiler.SyntaxTree+SynField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility -FSharp.Compiler.SyntaxTree+SynField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() -FSharp.Compiler.SyntaxTree+SynField: PreXmlDoc get_xmlDoc() -FSharp.Compiler.SyntaxTree+SynField: PreXmlDoc xmlDoc -FSharp.Compiler.SyntaxTree+SynField: SynField NewField(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], SynType, Boolean, PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) -FSharp.Compiler.SyntaxTree+SynField: SynType fieldType -FSharp.Compiler.SyntaxTree+SynField: SynType get_fieldType() -FSharp.Compiler.SyntaxTree+SynField: System.String ToString() -FSharp.Compiler.SyntaxTree+SynField: range get_range() -FSharp.Compiler.SyntaxTree+SynField: range range -FSharp.Compiler.SyntaxTree+SynIndexerArg+One: Boolean IsOne -FSharp.Compiler.SyntaxTree+SynIndexerArg+One: Boolean IsTwo -FSharp.Compiler.SyntaxTree+SynIndexerArg+One: Boolean fromEnd -FSharp.Compiler.SyntaxTree+SynIndexerArg+One: Boolean get_IsOne() -FSharp.Compiler.SyntaxTree+SynIndexerArg+One: Boolean get_IsTwo() -FSharp.Compiler.SyntaxTree+SynIndexerArg+One: Boolean get_fromEnd() -FSharp.Compiler.SyntaxTree+SynIndexerArg+One: Int32 Tag -FSharp.Compiler.SyntaxTree+SynIndexerArg+One: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynIndexerArg+One: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] Exprs -FSharp.Compiler.SyntaxTree+SynIndexerArg+One: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] get_Exprs() -FSharp.Compiler.SyntaxTree+SynIndexerArg+One: SynExpr expr -FSharp.Compiler.SyntaxTree+SynIndexerArg+One: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynIndexerArg+One: System.String ToString() -FSharp.Compiler.SyntaxTree+SynIndexerArg+One: range Item3 -FSharp.Compiler.SyntaxTree+SynIndexerArg+One: range Range -FSharp.Compiler.SyntaxTree+SynIndexerArg+One: range get_Item3() -FSharp.Compiler.SyntaxTree+SynIndexerArg+One: range get_Range() -FSharp.Compiler.SyntaxTree+SynIndexerArg+Tags: Int32 One -FSharp.Compiler.SyntaxTree+SynIndexerArg+Tags: Int32 Two -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Boolean IsOne -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Boolean IsTwo -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Boolean fromEnd1 -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Boolean fromEnd2 -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Boolean get_IsOne() -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Boolean get_IsTwo() -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Boolean get_fromEnd1() -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Boolean get_fromEnd2() -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Int32 Tag -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] Exprs -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] get_Exprs() -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: SynExpr expr1 -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: SynExpr expr2 -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: SynExpr get_expr1() -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: SynExpr get_expr2() -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: System.String ToString() -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: range Range -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: range get_Range() -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: range get_range1() -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: range get_range2() -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: range range1 -FSharp.Compiler.SyntaxTree+SynIndexerArg+Two: range range2 -FSharp.Compiler.SyntaxTree+SynIndexerArg: Boolean IsOne -FSharp.Compiler.SyntaxTree+SynIndexerArg: Boolean IsTwo -FSharp.Compiler.SyntaxTree+SynIndexerArg: Boolean get_IsOne() -FSharp.Compiler.SyntaxTree+SynIndexerArg: Boolean get_IsTwo() -FSharp.Compiler.SyntaxTree+SynIndexerArg: FSharp.Compiler.SyntaxTree+SynIndexerArg+One -FSharp.Compiler.SyntaxTree+SynIndexerArg: FSharp.Compiler.SyntaxTree+SynIndexerArg+Tags -FSharp.Compiler.SyntaxTree+SynIndexerArg: FSharp.Compiler.SyntaxTree+SynIndexerArg+Two -FSharp.Compiler.SyntaxTree+SynIndexerArg: Int32 Tag -FSharp.Compiler.SyntaxTree+SynIndexerArg: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynIndexerArg: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] Exprs -FSharp.Compiler.SyntaxTree+SynIndexerArg: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynExpr] get_Exprs() -FSharp.Compiler.SyntaxTree+SynIndexerArg: SynIndexerArg NewOne(SynExpr, Boolean, range) -FSharp.Compiler.SyntaxTree+SynIndexerArg: SynIndexerArg NewTwo(SynExpr, Boolean, SynExpr, Boolean, range, range) -FSharp.Compiler.SyntaxTree+SynIndexerArg: System.String ToString() -FSharp.Compiler.SyntaxTree+SynIndexerArg: range Range -FSharp.Compiler.SyntaxTree+SynIndexerArg: range get_Range() -FSharp.Compiler.SyntaxTree+SynInterfaceImpl: Int32 Tag -FSharp.Compiler.SyntaxTree+SynInterfaceImpl: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynInterfaceImpl: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding] Item2 -FSharp.Compiler.SyntaxTree+SynInterfaceImpl: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding] get_Item2() -FSharp.Compiler.SyntaxTree+SynInterfaceImpl: SynInterfaceImpl NewInterfaceImpl(SynType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding], range) -FSharp.Compiler.SyntaxTree+SynInterfaceImpl: SynType Item1 -FSharp.Compiler.SyntaxTree+SynInterfaceImpl: SynType get_Item1() -FSharp.Compiler.SyntaxTree+SynInterfaceImpl: System.String ToString() -FSharp.Compiler.SyntaxTree+SynInterfaceImpl: range get_range() -FSharp.Compiler.SyntaxTree+SynInterfaceImpl: range range -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: Boolean IsFillExpr -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: Boolean IsString -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: Boolean get_IsFillExpr() -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: Int32 Tag -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] Item2 -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_Item2() -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: SynExpr Item1 -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: SynExpr get_Item1() -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr: System.String ToString() -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: Boolean IsFillExpr -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: Boolean IsString -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: Boolean get_IsFillExpr() -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: Int32 Tag -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: System.String Item1 -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: System.String ToString() -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: System.String get_Item1() -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: range Item2 -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String: range get_Item2() -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+Tags: Int32 FillExpr -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+Tags: Int32 String -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: Boolean IsFillExpr -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: Boolean IsString -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: Boolean get_IsFillExpr() -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: Boolean get_IsString() -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+FillExpr -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+String -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart+Tags -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: Int32 Tag -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: SynInterpolatedStringPart NewFillExpr(SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]) -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: SynInterpolatedStringPart NewString(System.String, range) -FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMatchClause: DebugPointForTarget get_spInfo() -FSharp.Compiler.SyntaxTree+SynMatchClause: DebugPointForTarget spInfo -FSharp.Compiler.SyntaxTree+SynMatchClause: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMatchClause: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMatchClause: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr] get_whenExpr() -FSharp.Compiler.SyntaxTree+SynMatchClause: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr] whenExpr -FSharp.Compiler.SyntaxTree+SynMatchClause: SynExpr get_resultExpr() -FSharp.Compiler.SyntaxTree+SynMatchClause: SynExpr resultExpr -FSharp.Compiler.SyntaxTree+SynMatchClause: SynMatchClause NewClause(SynPat, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr], SynExpr, range, DebugPointForTarget) -FSharp.Compiler.SyntaxTree+SynMatchClause: SynPat get_pat() -FSharp.Compiler.SyntaxTree+SynMatchClause: SynPat pat -FSharp.Compiler.SyntaxTree+SynMatchClause: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMatchClause: range Range -FSharp.Compiler.SyntaxTree+SynMatchClause: range RangeOfGuardAndRhs -FSharp.Compiler.SyntaxTree+SynMatchClause: range get_Range() -FSharp.Compiler.SyntaxTree+SynMatchClause: range get_RangeOfGuardAndRhs() -FSharp.Compiler.SyntaxTree+SynMatchClause: range get_range() -FSharp.Compiler.SyntaxTree+SynMatchClause: range range -FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean IsDivide -FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean IsOne -FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean IsPower -FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean IsProduct -FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean IsSeq -FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean get_IsDivide() -FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean get_IsOne() -FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean get_IsPower() -FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean get_IsProduct() -FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean get_IsSeq() -FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMeasure+Anon: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMeasure+Anon: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMeasure+Anon: range get_range() -FSharp.Compiler.SyntaxTree+SynMeasure+Anon: range range -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean IsDivide -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean IsOne -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean IsPower -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean IsProduct -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean IsSeq -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean get_IsDivide() -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean get_IsOne() -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean get_IsPower() -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean get_IsProduct() -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean get_IsSeq() -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: SynMeasure Item1 -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: SynMeasure Item2 -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: SynMeasure get_Item1() -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: SynMeasure get_Item2() -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: range get_range() -FSharp.Compiler.SyntaxTree+SynMeasure+Divide: range range -FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean IsDivide -FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean IsOne -FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean IsPower -FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean IsProduct -FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean IsSeq -FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean get_IsDivide() -FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean get_IsOne() -FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean get_IsPower() -FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean get_IsProduct() -FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean get_IsSeq() -FSharp.Compiler.SyntaxTree+SynMeasure+Named: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynMeasure+Named: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMeasure+Named: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMeasure+Named: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() -FSharp.Compiler.SyntaxTree+SynMeasure+Named: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId -FSharp.Compiler.SyntaxTree+SynMeasure+Named: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMeasure+Named: range get_range() -FSharp.Compiler.SyntaxTree+SynMeasure+Named: range range -FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean IsDivide -FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean IsOne -FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean IsPower -FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean IsProduct -FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean IsSeq -FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean get_IsDivide() -FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean get_IsOne() -FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean get_IsPower() -FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean get_IsProduct() -FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean get_IsSeq() -FSharp.Compiler.SyntaxTree+SynMeasure+Power: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynMeasure+Power: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMeasure+Power: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMeasure+Power: SynMeasure Item1 -FSharp.Compiler.SyntaxTree+SynMeasure+Power: SynMeasure get_Item1() -FSharp.Compiler.SyntaxTree+SynMeasure+Power: SynRationalConst Item2 -FSharp.Compiler.SyntaxTree+SynMeasure+Power: SynRationalConst get_Item2() -FSharp.Compiler.SyntaxTree+SynMeasure+Power: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMeasure+Power: range get_range() -FSharp.Compiler.SyntaxTree+SynMeasure+Power: range range -FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean IsDivide -FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean IsOne -FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean IsPower -FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean IsProduct -FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean IsSeq -FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean get_IsDivide() -FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean get_IsOne() -FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean get_IsPower() -FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean get_IsProduct() -FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean get_IsSeq() -FSharp.Compiler.SyntaxTree+SynMeasure+Product: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynMeasure+Product: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMeasure+Product: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMeasure+Product: SynMeasure Item1 -FSharp.Compiler.SyntaxTree+SynMeasure+Product: SynMeasure Item2 -FSharp.Compiler.SyntaxTree+SynMeasure+Product: SynMeasure get_Item1() -FSharp.Compiler.SyntaxTree+SynMeasure+Product: SynMeasure get_Item2() -FSharp.Compiler.SyntaxTree+SynMeasure+Product: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMeasure+Product: range get_range() -FSharp.Compiler.SyntaxTree+SynMeasure+Product: range range -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean IsDivide -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean IsOne -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean IsPower -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean IsProduct -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean IsSeq -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean get_IsDivide() -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean get_IsOne() -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean get_IsPower() -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean get_IsProduct() -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean get_IsSeq() -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMeasure] Item1 -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMeasure] get_Item1() -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: range get_range() -FSharp.Compiler.SyntaxTree+SynMeasure+Seq: range range -FSharp.Compiler.SyntaxTree+SynMeasure+Tags: Int32 Anon -FSharp.Compiler.SyntaxTree+SynMeasure+Tags: Int32 Divide -FSharp.Compiler.SyntaxTree+SynMeasure+Tags: Int32 Named -FSharp.Compiler.SyntaxTree+SynMeasure+Tags: Int32 One -FSharp.Compiler.SyntaxTree+SynMeasure+Tags: Int32 Power -FSharp.Compiler.SyntaxTree+SynMeasure+Tags: Int32 Product -FSharp.Compiler.SyntaxTree+SynMeasure+Tags: Int32 Seq -FSharp.Compiler.SyntaxTree+SynMeasure+Tags: Int32 Var -FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean IsDivide -FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean IsOne -FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean IsPower -FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean IsProduct -FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean IsSeq -FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean get_IsDivide() -FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean get_IsOne() -FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean get_IsPower() -FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean get_IsProduct() -FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean get_IsSeq() -FSharp.Compiler.SyntaxTree+SynMeasure+Var: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynMeasure+Var: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMeasure+Var: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMeasure+Var: SynTypar Item1 -FSharp.Compiler.SyntaxTree+SynMeasure+Var: SynTypar get_Item1() -FSharp.Compiler.SyntaxTree+SynMeasure+Var: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMeasure+Var: range get_range() -FSharp.Compiler.SyntaxTree+SynMeasure+Var: range range -FSharp.Compiler.SyntaxTree+SynMeasure: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynMeasure: Boolean IsDivide -FSharp.Compiler.SyntaxTree+SynMeasure: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynMeasure: Boolean IsOne -FSharp.Compiler.SyntaxTree+SynMeasure: Boolean IsPower -FSharp.Compiler.SyntaxTree+SynMeasure: Boolean IsProduct -FSharp.Compiler.SyntaxTree+SynMeasure: Boolean IsSeq -FSharp.Compiler.SyntaxTree+SynMeasure: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynMeasure: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynMeasure: Boolean get_IsDivide() -FSharp.Compiler.SyntaxTree+SynMeasure: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynMeasure: Boolean get_IsOne() -FSharp.Compiler.SyntaxTree+SynMeasure: Boolean get_IsPower() -FSharp.Compiler.SyntaxTree+SynMeasure: Boolean get_IsProduct() -FSharp.Compiler.SyntaxTree+SynMeasure: Boolean get_IsSeq() -FSharp.Compiler.SyntaxTree+SynMeasure: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynMeasure: FSharp.Compiler.SyntaxTree+SynMeasure+Anon -FSharp.Compiler.SyntaxTree+SynMeasure: FSharp.Compiler.SyntaxTree+SynMeasure+Divide -FSharp.Compiler.SyntaxTree+SynMeasure: FSharp.Compiler.SyntaxTree+SynMeasure+Named -FSharp.Compiler.SyntaxTree+SynMeasure: FSharp.Compiler.SyntaxTree+SynMeasure+Power -FSharp.Compiler.SyntaxTree+SynMeasure: FSharp.Compiler.SyntaxTree+SynMeasure+Product -FSharp.Compiler.SyntaxTree+SynMeasure: FSharp.Compiler.SyntaxTree+SynMeasure+Seq -FSharp.Compiler.SyntaxTree+SynMeasure: FSharp.Compiler.SyntaxTree+SynMeasure+Tags -FSharp.Compiler.SyntaxTree+SynMeasure: FSharp.Compiler.SyntaxTree+SynMeasure+Var -FSharp.Compiler.SyntaxTree+SynMeasure: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMeasure: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMeasure: SynMeasure NewAnon(range) -FSharp.Compiler.SyntaxTree+SynMeasure: SynMeasure NewDivide(SynMeasure, SynMeasure, range) -FSharp.Compiler.SyntaxTree+SynMeasure: SynMeasure NewNamed(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], range) -FSharp.Compiler.SyntaxTree+SynMeasure: SynMeasure NewPower(SynMeasure, SynRationalConst, range) -FSharp.Compiler.SyntaxTree+SynMeasure: SynMeasure NewProduct(SynMeasure, SynMeasure, range) -FSharp.Compiler.SyntaxTree+SynMeasure: SynMeasure NewSeq(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMeasure], range) -FSharp.Compiler.SyntaxTree+SynMeasure: SynMeasure NewVar(SynTypar, range) -FSharp.Compiler.SyntaxTree+SynMeasure: SynMeasure One -FSharp.Compiler.SyntaxTree+SynMeasure: SynMeasure get_One() -FSharp.Compiler.SyntaxTree+SynMeasure: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsAbstractSlot -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsAutoProperty -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsImplicitCtor -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsImplicitInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsInterface -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsLetBindings -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsMember -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsNestedType -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean IsValField -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsAbstractSlot() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsAutoProperty() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsImplicitCtor() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsImplicitInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsInterface() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsLetBindings() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsMember() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsNestedType() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Boolean get_IsValField() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: MemberFlags flags -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: MemberFlags get_flags() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: SynValSig get_slotSig() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: SynValSig slotSig -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: range Range -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: range get_Range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: range get_range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot: range range -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsAbstractSlot -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsAutoProperty -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsImplicitCtor -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsImplicitInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsInterface -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsLetBindings -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsMember -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsNestedType -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean IsValField -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsAbstractSlot() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsAutoProperty() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsImplicitCtor() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsImplicitInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsInterface() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsLetBindings() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsMember() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsNestedType() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_IsValField() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean get_isStatic() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Boolean isStatic -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Ident get_ident() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Ident ident -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: MemberKind get_propKind() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: MemberKind propKind -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+MemberKind,FSharp.Compiler.SyntaxTree+MemberFlags] get_memberFlags() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+MemberKind,FSharp.Compiler.SyntaxTree+MemberFlags] memberFlags -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] getSetRange -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_getSetRange() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynType] get_typeOpt() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynType] typeOpt -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: PreXmlDoc get_xmlDoc() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: PreXmlDoc xmlDoc -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: SynExpr get_synExpr() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: SynExpr synExpr -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: range Range -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: range get_Range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: range get_range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty: range range -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsAbstractSlot -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsAutoProperty -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsImplicitCtor -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsImplicitInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsInterface -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsLetBindings -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsMember -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsNestedType -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean IsValField -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsAbstractSlot() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsAutoProperty() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsImplicitCtor() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsImplicitInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsInterface() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsLetBindings() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsMember() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsNestedType() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Boolean get_IsValField() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_selfIdentifier() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] selfIdentifier -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: PreXmlDoc doc -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: PreXmlDoc get_doc() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: SynSimplePats ctorArgs -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: SynSimplePats get_ctorArgs() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: range Range -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: range get_Range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: range get_range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor: range range -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsAbstractSlot -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsAutoProperty -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsImplicitCtor -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsImplicitInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsInterface -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsLetBindings -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsMember -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsNestedType -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean IsValField -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsAbstractSlot() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsAutoProperty() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsImplicitCtor() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsImplicitInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsInterface() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsLetBindings() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsMember() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsNestedType() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Boolean get_IsValField() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_inheritAlias() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] inheritAlias -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: SynExpr get_inheritArgs() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: SynExpr inheritArgs -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: SynType get_inheritType() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: SynType inheritType -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: range Range -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: range get_Range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: range get_range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit: range range -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsAbstractSlot -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsAutoProperty -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsImplicitCtor -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsImplicitInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsInterface -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsLetBindings -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsMember -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsNestedType -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean IsValField -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsAbstractSlot() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsAutoProperty() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsImplicitCtor() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsImplicitInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsInterface() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsLetBindings() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsMember() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsNestedType() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Boolean get_IsValField() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] asIdent -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_asIdent() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: SynType baseType -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: SynType get_baseType() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: range Range -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: range get_Range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: range get_range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit: range range -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsAbstractSlot -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsAutoProperty -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsImplicitCtor -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsImplicitInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsInterface -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsLetBindings -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsMember -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsNestedType -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean IsValField -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsAbstractSlot() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsAutoProperty() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsImplicitCtor() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsImplicitInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsInterface() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsLetBindings() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsMember() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsNestedType() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Boolean get_IsValField() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn]] get_members() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn]] members -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: SynType get_interfaceType() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: SynType interfaceType -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: range Range -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: range get_Range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: range get_range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface: range range -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsAbstractSlot -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsAutoProperty -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsImplicitCtor -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsImplicitInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsInterface -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsLetBindings -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsMember -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsNestedType -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean IsValField -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsAbstractSlot() -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsAutoProperty() -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsImplicitCtor() -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsImplicitInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsInterface() -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsLetBindings() -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsMember() -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsNestedType() -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_IsValField() -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_isRecursive() -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean get_isStatic() -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean isRecursive -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Boolean isStatic -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding] bindings -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding] get_bindings() -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: range Range -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: range get_Range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: range get_range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings: range range -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsAbstractSlot -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsAutoProperty -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsImplicitCtor -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsImplicitInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsInterface -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsLetBindings -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsMember -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsNestedType -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean IsValField -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsAbstractSlot() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsAutoProperty() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsImplicitCtor() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsImplicitInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsInterface() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsLetBindings() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsMember() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsNestedType() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Boolean get_IsValField() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: SynBinding get_memberDefn() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: SynBinding memberDefn -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: range Range -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: range get_Range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: range get_range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Member: range range -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsAbstractSlot -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsAutoProperty -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsImplicitCtor -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsImplicitInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsInterface -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsLetBindings -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsMember -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsNestedType -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean IsValField -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsAbstractSlot() -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsAutoProperty() -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsImplicitCtor() -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsImplicitInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsInterface() -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsLetBindings() -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsMember() -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsNestedType() -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Boolean get_IsValField() -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: SynTypeDefn get_typeDefn() -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: SynTypeDefn typeDefn -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: range Range -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: range get_Range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: range get_range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType: range range -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsAbstractSlot -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsAutoProperty -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsImplicitCtor -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsImplicitInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsInterface -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsLetBindings -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsMember -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsNestedType -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean IsValField -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsAbstractSlot() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsAutoProperty() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsImplicitCtor() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsImplicitInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsInterface() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsLetBindings() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsMember() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsNestedType() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Boolean get_IsValField() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: SynOpenDeclTarget get_target() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: SynOpenDeclTarget target -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: range Range -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: range get_Range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: range get_range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+Open: range range -FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 AbstractSlot -FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 AutoProperty -FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 ImplicitCtor -FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 ImplicitInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 Inherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 Interface -FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 LetBindings -FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 Member -FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 NestedType -FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 Open -FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags: Int32 ValField -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsAbstractSlot -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsAutoProperty -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsImplicitCtor -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsImplicitInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsInterface -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsLetBindings -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsMember -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsNestedType -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean IsValField -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsAbstractSlot() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsAutoProperty() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsImplicitCtor() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsImplicitInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsInterface() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsLetBindings() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsMember() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsNestedType() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Boolean get_IsValField() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: SynField fieldInfo -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: SynField get_fieldInfo() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: range Range -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: range get_Range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: range get_range() -FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField: range range -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsAbstractSlot -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsAutoProperty -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsImplicitCtor -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsImplicitInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsInterface -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsLetBindings -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsMember -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsNestedType -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean IsValField -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsAbstractSlot() -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsAutoProperty() -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsImplicitCtor() -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsImplicitInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsInherit() -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsInterface() -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsLetBindings() -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsMember() -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsNestedType() -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynMemberDefn: Boolean get_IsValField() -FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+AbstractSlot -FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+AutoProperty -FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitCtor -FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+ImplicitInherit -FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+Inherit -FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+Interface -FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+LetBindings -FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+Member -FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+NestedType -FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+Open -FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+Tags -FSharp.Compiler.SyntaxTree+SynMemberDefn: FSharp.Compiler.SyntaxTree+SynMemberDefn+ValField -FSharp.Compiler.SyntaxTree+SynMemberDefn: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMemberDefn: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewAbstractSlot(SynValSig, MemberFlags, range) -FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewAutoProperty(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Boolean, Ident, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynType], MemberKind, Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+MemberKind,FSharp.Compiler.SyntaxTree+MemberFlags], PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range], range) -FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewImplicitCtor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], SynSimplePats, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], PreXmlDoc, range) -FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewImplicitInherit(SynType, SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], range) -FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewInherit(SynType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], range) -FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewInterface(SynType, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn]], range) -FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewLetBindings(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding], Boolean, Boolean, range) -FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewMember(SynBinding, range) -FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewNestedType(SynTypeDefn, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) -FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewOpen(SynOpenDeclTarget, range) -FSharp.Compiler.SyntaxTree+SynMemberDefn: SynMemberDefn NewValField(SynField, range) -FSharp.Compiler.SyntaxTree+SynMemberDefn: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMemberDefn: range Range -FSharp.Compiler.SyntaxTree+SynMemberDefn: range get_Range() -FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Boolean IsInherit -FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Boolean IsInterface -FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Boolean IsMember -FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Boolean IsNestedType -FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Boolean IsValField -FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Boolean get_IsInherit() -FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Boolean get_IsInterface() -FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Boolean get_IsMember() -FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Boolean get_IsNestedType() -FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Boolean get_IsValField() -FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: SynType get_inheritedType() -FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: SynType inheritedType -FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: range get_range() -FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit: range range -FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Boolean IsInherit -FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Boolean IsInterface -FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Boolean IsMember -FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Boolean IsNestedType -FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Boolean IsValField -FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Boolean get_IsInherit() -FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Boolean get_IsInterface() -FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Boolean get_IsMember() -FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Boolean get_IsNestedType() -FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Boolean get_IsValField() -FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: SynType get_interfaceType() -FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: SynType interfaceType -FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: range get_range() -FSharp.Compiler.SyntaxTree+SynMemberSig+Interface: range range -FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Boolean IsInherit -FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Boolean IsInterface -FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Boolean IsMember -FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Boolean IsNestedType -FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Boolean IsValField -FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Boolean get_IsInherit() -FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Boolean get_IsInterface() -FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Boolean get_IsMember() -FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Boolean get_IsNestedType() -FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Boolean get_IsValField() -FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMemberSig+Member: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMemberSig+Member: MemberFlags flags -FSharp.Compiler.SyntaxTree+SynMemberSig+Member: MemberFlags get_flags() -FSharp.Compiler.SyntaxTree+SynMemberSig+Member: SynValSig get_memberSig() -FSharp.Compiler.SyntaxTree+SynMemberSig+Member: SynValSig memberSig -FSharp.Compiler.SyntaxTree+SynMemberSig+Member: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMemberSig+Member: range get_range() -FSharp.Compiler.SyntaxTree+SynMemberSig+Member: range range -FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Boolean IsInherit -FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Boolean IsInterface -FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Boolean IsMember -FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Boolean IsNestedType -FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Boolean IsValField -FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Boolean get_IsInherit() -FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Boolean get_IsInterface() -FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Boolean get_IsMember() -FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Boolean get_IsNestedType() -FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Boolean get_IsValField() -FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: SynTypeDefnSig get_nestedType() -FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: SynTypeDefnSig nestedType -FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: range get_range() -FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType: range range -FSharp.Compiler.SyntaxTree+SynMemberSig+Tags: Int32 Inherit -FSharp.Compiler.SyntaxTree+SynMemberSig+Tags: Int32 Interface -FSharp.Compiler.SyntaxTree+SynMemberSig+Tags: Int32 Member -FSharp.Compiler.SyntaxTree+SynMemberSig+Tags: Int32 NestedType -FSharp.Compiler.SyntaxTree+SynMemberSig+Tags: Int32 ValField -FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Boolean IsInherit -FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Boolean IsInterface -FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Boolean IsMember -FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Boolean IsNestedType -FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Boolean IsValField -FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Boolean get_IsInherit() -FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Boolean get_IsInterface() -FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Boolean get_IsMember() -FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Boolean get_IsNestedType() -FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Boolean get_IsValField() -FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: SynField field -FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: SynField get_field() -FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: System.String ToString() -FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: range get_range() -FSharp.Compiler.SyntaxTree+SynMemberSig+ValField: range range -FSharp.Compiler.SyntaxTree+SynMemberSig: Boolean IsInherit -FSharp.Compiler.SyntaxTree+SynMemberSig: Boolean IsInterface -FSharp.Compiler.SyntaxTree+SynMemberSig: Boolean IsMember -FSharp.Compiler.SyntaxTree+SynMemberSig: Boolean IsNestedType -FSharp.Compiler.SyntaxTree+SynMemberSig: Boolean IsValField -FSharp.Compiler.SyntaxTree+SynMemberSig: Boolean get_IsInherit() -FSharp.Compiler.SyntaxTree+SynMemberSig: Boolean get_IsInterface() -FSharp.Compiler.SyntaxTree+SynMemberSig: Boolean get_IsMember() -FSharp.Compiler.SyntaxTree+SynMemberSig: Boolean get_IsNestedType() -FSharp.Compiler.SyntaxTree+SynMemberSig: Boolean get_IsValField() -FSharp.Compiler.SyntaxTree+SynMemberSig: FSharp.Compiler.SyntaxTree+SynMemberSig+Inherit -FSharp.Compiler.SyntaxTree+SynMemberSig: FSharp.Compiler.SyntaxTree+SynMemberSig+Interface -FSharp.Compiler.SyntaxTree+SynMemberSig: FSharp.Compiler.SyntaxTree+SynMemberSig+Member -FSharp.Compiler.SyntaxTree+SynMemberSig: FSharp.Compiler.SyntaxTree+SynMemberSig+NestedType -FSharp.Compiler.SyntaxTree+SynMemberSig: FSharp.Compiler.SyntaxTree+SynMemberSig+Tags -FSharp.Compiler.SyntaxTree+SynMemberSig: FSharp.Compiler.SyntaxTree+SynMemberSig+ValField -FSharp.Compiler.SyntaxTree+SynMemberSig: Int32 Tag -FSharp.Compiler.SyntaxTree+SynMemberSig: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynMemberSig: SynMemberSig NewInherit(SynType, range) -FSharp.Compiler.SyntaxTree+SynMemberSig: SynMemberSig NewInterface(SynType, range) -FSharp.Compiler.SyntaxTree+SynMemberSig: SynMemberSig NewMember(SynValSig, MemberFlags, range) -FSharp.Compiler.SyntaxTree+SynMemberSig: SynMemberSig NewNestedType(SynTypeDefnSig, range) -FSharp.Compiler.SyntaxTree+SynMemberSig: SynMemberSig NewValField(SynField, range) -FSharp.Compiler.SyntaxTree+SynMemberSig: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean IsAttributes -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean IsDoExpr -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean IsException -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean IsHashDirective -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean IsLet -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean IsModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean IsNestedModule -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean IsTypes -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean get_IsAttributes() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean get_IsDoExpr() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean get_IsHashDirective() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean get_IsLet() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean get_IsModuleAbbrev() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean get_IsNestedModule() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Boolean get_IsTypes() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: range Range -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: range get_Range() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: range get_range() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes: range range -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean IsAttributes -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean IsDoExpr -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean IsException -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean IsHashDirective -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean IsLet -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean IsModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean IsNestedModule -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean IsTypes -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean get_IsAttributes() -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean get_IsDoExpr() -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean get_IsHashDirective() -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean get_IsLet() -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean get_IsModuleAbbrev() -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean get_IsNestedModule() -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Boolean get_IsTypes() -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: DebugPointForBinding get_spInfo() -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: DebugPointForBinding spInfo -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: SynExpr expr -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: range Range -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: range get_Range() -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: range get_range() -FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr: range range -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean IsAttributes -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean IsDoExpr -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean IsException -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean IsHashDirective -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean IsLet -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean IsModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean IsNestedModule -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean IsTypes -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean get_IsAttributes() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean get_IsDoExpr() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean get_IsHashDirective() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean get_IsLet() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean get_IsModuleAbbrev() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean get_IsNestedModule() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Boolean get_IsTypes() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: SynExceptionDefn exnDefn -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: SynExceptionDefn get_exnDefn() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: range Range -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: range get_Range() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: range get_range() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception: range range -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean IsAttributes -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean IsDoExpr -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean IsException -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean IsHashDirective -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean IsLet -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean IsModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean IsNestedModule -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean IsTypes -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean get_IsAttributes() -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean get_IsDoExpr() -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean get_IsHashDirective() -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean get_IsLet() -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean get_IsModuleAbbrev() -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean get_IsNestedModule() -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Boolean get_IsTypes() -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: ParsedHashDirective get_hashDirective() -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: ParsedHashDirective hashDirective -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: range Range -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: range get_Range() -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: range get_range() -FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective: range range -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean IsAttributes -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean IsDoExpr -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean IsException -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean IsHashDirective -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean IsLet -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean IsModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean IsNestedModule -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean IsTypes -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_IsAttributes() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_IsDoExpr() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_IsHashDirective() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_IsLet() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_IsModuleAbbrev() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_IsNestedModule() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_IsTypes() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean get_isRecursive() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Boolean isRecursive -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding] bindings -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding] get_bindings() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: range Range -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: range get_Range() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: range get_range() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Let: range range -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean IsAttributes -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean IsDoExpr -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean IsException -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean IsHashDirective -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean IsLet -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean IsModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean IsNestedModule -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean IsTypes -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean get_IsAttributes() -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean get_IsDoExpr() -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean get_IsHashDirective() -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean get_IsLet() -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean get_IsModuleAbbrev() -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean get_IsNestedModule() -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Boolean get_IsTypes() -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Ident get_ident() -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Ident ident -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: range Range -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: range get_Range() -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: range get_range() -FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev: range range -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean IsAttributes -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean IsDoExpr -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean IsException -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean IsHashDirective -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean IsLet -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean IsModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean IsNestedModule -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean IsTypes -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean get_IsAttributes() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean get_IsDoExpr() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean get_IsHashDirective() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean get_IsLet() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean get_IsModuleAbbrev() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean get_IsNestedModule() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Boolean get_IsTypes() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: SynModuleOrNamespace fragment -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: SynModuleOrNamespace get_fragment() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: range Range -FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment: range get_Range() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean IsAttributes -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean IsDoExpr -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean IsException -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean IsHashDirective -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean IsLet -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean IsModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean IsNestedModule -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean IsTypes -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_IsAttributes() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_IsDoExpr() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_IsHashDirective() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_IsLet() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_IsModuleAbbrev() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_IsNestedModule() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_IsTypes() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_isContinuing() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean get_isRecursive() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean isContinuing -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Boolean isRecursive -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl] decls -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl] get_decls() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: SynComponentInfo get_moduleInfo() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: SynComponentInfo moduleInfo -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: range Range -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: range get_Range() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: range get_range() -FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule: range range -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean IsAttributes -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean IsDoExpr -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean IsException -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean IsHashDirective -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean IsLet -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean IsModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean IsNestedModule -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean IsTypes -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean get_IsAttributes() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean get_IsDoExpr() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean get_IsHashDirective() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean get_IsLet() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean get_IsModuleAbbrev() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean get_IsNestedModule() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Boolean get_IsTypes() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: SynOpenDeclTarget get_target() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: SynOpenDeclTarget target -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: range Range -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: range get_Range() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: range get_range() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Open: range range -FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags: Int32 Attributes -FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags: Int32 DoExpr -FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags: Int32 Exception -FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags: Int32 HashDirective -FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags: Int32 Let -FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags: Int32 ModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags: Int32 NamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags: Int32 NestedModule -FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags: Int32 Open -FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags: Int32 Types -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean IsAttributes -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean IsDoExpr -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean IsException -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean IsHashDirective -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean IsLet -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean IsModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean IsNestedModule -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean IsTypes -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean get_IsAttributes() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean get_IsDoExpr() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean get_IsHashDirective() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean get_IsLet() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean get_IsModuleAbbrev() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean get_IsNestedModule() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Boolean get_IsTypes() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeDefn] get_typeDefns() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeDefn] typeDefns -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: range Range -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: range get_Range() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: range get_range() -FSharp.Compiler.SyntaxTree+SynModuleDecl+Types: range range -FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean IsAttributes -FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean IsDoExpr -FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean IsException -FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean IsHashDirective -FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean IsLet -FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean IsModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean IsNestedModule -FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean IsTypes -FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean get_IsAttributes() -FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean get_IsDoExpr() -FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean get_IsHashDirective() -FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean get_IsLet() -FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean get_IsModuleAbbrev() -FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean get_IsNestedModule() -FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynModuleDecl: Boolean get_IsTypes() -FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+Attributes -FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+DoExpr -FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+Exception -FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+HashDirective -FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+Let -FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+ModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+NamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+NestedModule -FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+Open -FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+Tags -FSharp.Compiler.SyntaxTree+SynModuleDecl: FSharp.Compiler.SyntaxTree+SynModuleDecl+Types -FSharp.Compiler.SyntaxTree+SynModuleDecl: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleDecl: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleDecl: SynModuleDecl NewAttributes(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], range) -FSharp.Compiler.SyntaxTree+SynModuleDecl: SynModuleDecl NewDoExpr(DebugPointForBinding, SynExpr, range) -FSharp.Compiler.SyntaxTree+SynModuleDecl: SynModuleDecl NewException(SynExceptionDefn, range) -FSharp.Compiler.SyntaxTree+SynModuleDecl: SynModuleDecl NewHashDirective(ParsedHashDirective, range) -FSharp.Compiler.SyntaxTree+SynModuleDecl: SynModuleDecl NewLet(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynBinding], range) -FSharp.Compiler.SyntaxTree+SynModuleDecl: SynModuleDecl NewModuleAbbrev(Ident, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], range) -FSharp.Compiler.SyntaxTree+SynModuleDecl: SynModuleDecl NewNamespaceFragment(SynModuleOrNamespace) -FSharp.Compiler.SyntaxTree+SynModuleDecl: SynModuleDecl NewNestedModule(SynComponentInfo, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl], Boolean, range) -FSharp.Compiler.SyntaxTree+SynModuleDecl: SynModuleDecl NewOpen(SynOpenDeclTarget, range) -FSharp.Compiler.SyntaxTree+SynModuleDecl: SynModuleDecl NewTypes(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeDefn], range) -FSharp.Compiler.SyntaxTree+SynModuleDecl: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleDecl: range Range -FSharp.Compiler.SyntaxTree+SynModuleDecl: range get_Range() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Boolean get_isRecursive() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Boolean isRecursive -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attribs -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attribs() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl] decls -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl] get_decls() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: PreXmlDoc get_xmlDoc() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: PreXmlDoc xmlDoc -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: SynModuleOrNamespace NewSynModuleOrNamespace(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], Boolean, SynModuleOrNamespaceKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleDecl], PreXmlDoc, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: SynModuleOrNamespaceKind get_kind() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: SynModuleOrNamespaceKind kind -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: range Range -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: range get_Range() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: range get_range() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespace: range range -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind+Tags: Int32 AnonModule -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind+Tags: Int32 DeclaredNamespace -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind+Tags: Int32 GlobalNamespace -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind+Tags: Int32 NamedModule -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean Equals(SynModuleOrNamespaceKind) -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean IsAnonModule -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean IsDeclaredNamespace -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean IsGlobalNamespace -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean IsModule -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean IsNamedModule -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean get_IsAnonModule() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean get_IsDeclaredNamespace() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean get_IsGlobalNamespace() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean get_IsModule() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Boolean get_IsNamedModule() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind+Tags -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Int32 CompareTo(SynModuleOrNamespaceKind) -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Int32 CompareTo(System.Object) -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: SynModuleOrNamespaceKind AnonModule -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: SynModuleOrNamespaceKind DeclaredNamespace -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: SynModuleOrNamespaceKind GlobalNamespace -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: SynModuleOrNamespaceKind NamedModule -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: SynModuleOrNamespaceKind get_AnonModule() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: SynModuleOrNamespaceKind get_DeclaredNamespace() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: SynModuleOrNamespaceKind get_GlobalNamespace() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: SynModuleOrNamespaceKind get_NamedModule() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Boolean get_isRecursive() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Boolean isRecursive -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attribs -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attribs() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl] decls -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl] get_decls() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: PreXmlDoc get_xmlDoc() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: PreXmlDoc xmlDoc -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: SynModuleOrNamespaceKind get_kind() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: SynModuleOrNamespaceKind kind -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: SynModuleOrNamespaceSig NewSynModuleOrNamespaceSig(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], Boolean, SynModuleOrNamespaceKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl], PreXmlDoc, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: range get_range() -FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig: range range -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean IsException -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean IsHashDirective -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean IsModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean IsNestedModule -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean IsTypes -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean IsVal -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean get_IsHashDirective() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean get_IsModuleAbbrev() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean get_IsNestedModule() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean get_IsTypes() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Boolean get_IsVal() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: SynExceptionSig exnSig -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: SynExceptionSig get_exnSig() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: range Range -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: range get_Range() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: range get_range() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception: range range -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean IsException -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean IsHashDirective -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean IsModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean IsNestedModule -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean IsTypes -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean IsVal -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean get_IsHashDirective() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean get_IsModuleAbbrev() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean get_IsNestedModule() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean get_IsTypes() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Boolean get_IsVal() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: ParsedHashDirective get_hashDirective() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: ParsedHashDirective hashDirective -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: range Range -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: range get_Range() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: range get_range() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective: range range -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean IsException -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean IsHashDirective -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean IsModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean IsNestedModule -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean IsTypes -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean IsVal -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean get_IsHashDirective() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean get_IsModuleAbbrev() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean get_IsNestedModule() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean get_IsTypes() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Boolean get_IsVal() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Ident get_ident() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Ident ident -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: range Range -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: range get_Range() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: range get_range() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev: range range -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean IsException -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean IsHashDirective -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean IsModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean IsNestedModule -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean IsTypes -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean IsVal -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean get_IsHashDirective() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean get_IsModuleAbbrev() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean get_IsNestedModule() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean get_IsTypes() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Boolean get_IsVal() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: SynModuleOrNamespaceSig Item -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: SynModuleOrNamespaceSig get_Item() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: range Range -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment: range get_Range() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean IsException -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean IsHashDirective -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean IsModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean IsNestedModule -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean IsTypes -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean IsVal -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean get_IsHashDirective() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean get_IsModuleAbbrev() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean get_IsNestedModule() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean get_IsTypes() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean get_IsVal() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean get_isRecursive() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Boolean isRecursive -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl] get_moduleDecls() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl] moduleDecls -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: SynComponentInfo get_moduleInfo() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: SynComponentInfo moduleInfo -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: range Range -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: range get_Range() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: range get_range() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule: range range -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean IsException -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean IsHashDirective -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean IsModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean IsNestedModule -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean IsTypes -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean IsVal -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean get_IsHashDirective() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean get_IsModuleAbbrev() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean get_IsNestedModule() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean get_IsTypes() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Boolean get_IsVal() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: SynOpenDeclTarget get_target() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: SynOpenDeclTarget target -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: range Range -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: range get_Range() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: range get_range() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open: range range -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Tags: Int32 Exception -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Tags: Int32 HashDirective -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Tags: Int32 ModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Tags: Int32 NamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Tags: Int32 NestedModule -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Tags: Int32 Open -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Tags: Int32 Types -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Tags: Int32 Val -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean IsException -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean IsHashDirective -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean IsModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean IsNestedModule -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean IsTypes -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean IsVal -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean get_IsHashDirective() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean get_IsModuleAbbrev() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean get_IsNestedModule() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean get_IsTypes() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Boolean get_IsVal() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeDefnSig] get_types() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeDefnSig] types -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: range Range -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: range get_Range() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: range get_range() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types: range range -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean IsException -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean IsHashDirective -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean IsModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean IsNestedModule -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean IsTypes -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean IsVal -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean get_IsHashDirective() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean get_IsModuleAbbrev() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean get_IsNestedModule() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean get_IsTypes() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Boolean get_IsVal() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: SynValSig get_valSig() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: SynValSig valSig -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: range Range -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: range get_Range() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: range get_range() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val: range range -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean IsException -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean IsHashDirective -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean IsModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean IsNamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean IsNestedModule -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean IsOpen -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean IsTypes -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean IsVal -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean get_IsHashDirective() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean get_IsModuleAbbrev() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean get_IsNamespaceFragment() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean get_IsNestedModule() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean get_IsOpen() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean get_IsTypes() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Boolean get_IsVal() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Exception -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: FSharp.Compiler.SyntaxTree+SynModuleSigDecl+HashDirective -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: FSharp.Compiler.SyntaxTree+SynModuleSigDecl+ModuleAbbrev -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NamespaceFragment -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: FSharp.Compiler.SyntaxTree+SynModuleSigDecl+NestedModule -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Open -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Tags -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Types -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: FSharp.Compiler.SyntaxTree+SynModuleSigDecl+Val -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Int32 Tag -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: SynModuleSigDecl NewException(SynExceptionSig, range) -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: SynModuleSigDecl NewHashDirective(ParsedHashDirective, range) -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: SynModuleSigDecl NewModuleAbbrev(Ident, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], range) -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: SynModuleSigDecl NewNamespaceFragment(SynModuleOrNamespaceSig) -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: SynModuleSigDecl NewNestedModule(SynComponentInfo, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynModuleSigDecl], range) -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: SynModuleSigDecl NewOpen(SynOpenDeclTarget, range) -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: SynModuleSigDecl NewTypes(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeDefnSig], range) -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: SynModuleSigDecl NewVal(SynValSig, range) -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: System.String ToString() -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: range Range -FSharp.Compiler.SyntaxTree+SynModuleSigDecl: range get_Range() -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: Boolean IsModuleOrNamespace -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: Boolean IsType -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: Boolean get_IsModuleOrNamespace() -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: Boolean get_IsType() -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: Int32 Tag -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] get_longId() -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] longId -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: System.String ToString() -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: range Range -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: range get_Range() -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: range get_range() -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace: range range -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Tags: Int32 ModuleOrNamespace -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Tags: Int32 Type -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: Boolean IsModuleOrNamespace -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: Boolean IsType -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: Boolean get_IsModuleOrNamespace() -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: Boolean get_IsType() -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: Int32 Tag -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: SynType get_typeName() -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: SynType typeName -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: System.String ToString() -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: range Range -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: range get_Range() -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: range get_range() -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type: range range -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: Boolean IsModuleOrNamespace -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: Boolean IsType -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: Boolean get_IsModuleOrNamespace() -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: Boolean get_IsType() -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+ModuleOrNamespace -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Tags -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: FSharp.Compiler.SyntaxTree+SynOpenDeclTarget+Type -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: Int32 Tag -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: SynOpenDeclTarget NewModuleOrNamespace(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident], range) -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: SynOpenDeclTarget NewType(SynType, range) -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: System.String ToString() -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: range Range -FSharp.Compiler.SyntaxTree+SynOpenDeclTarget: range get_Range() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsAnds -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsDeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsInstanceMember -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsIsInst -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsOptionalVal -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsOr -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsQuoteExpr -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean IsWild -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsAnds() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsDeprecatedCharRange() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsInstanceMember() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsIsInst() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsOptionalVal() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsOr() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsQuoteExpr() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Boolean get_IsWild() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Int32 Tag -FSharp.Compiler.SyntaxTree+SynPat+Ands: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat] get_pats() -FSharp.Compiler.SyntaxTree+SynPat+Ands: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat] pats -FSharp.Compiler.SyntaxTree+SynPat+Ands: System.String ToString() -FSharp.Compiler.SyntaxTree+SynPat+Ands: range Range -FSharp.Compiler.SyntaxTree+SynPat+Ands: range get_Range() -FSharp.Compiler.SyntaxTree+SynPat+Ands: range get_range() -FSharp.Compiler.SyntaxTree+SynPat+Ands: range range -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsAnds -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsDeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsInstanceMember -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsIsInst -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsOptionalVal -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsOr -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsQuoteExpr -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean IsWild -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsAnds() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsDeprecatedCharRange() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsInstanceMember() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsIsInst() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsOptionalVal() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsOr() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsQuoteExpr() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_IsWild() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean get_isArray() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Boolean isArray -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Int32 Tag -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat] elementPats -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat] get_elementPats() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: System.String ToString() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: range Range -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: range get_Range() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: range get_range() -FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList: range range -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsAnds -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsDeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsInstanceMember -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsIsInst -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsOptionalVal -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsOr -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsQuoteExpr -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean IsWild -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsAnds() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsDeprecatedCharRange() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsInstanceMember() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsIsInst() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsOptionalVal() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsOr() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsQuoteExpr() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Boolean get_IsWild() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Int32 Tag -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes -FSharp.Compiler.SyntaxTree+SynPat+Attrib: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: SynPat get_pat() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: SynPat pat -FSharp.Compiler.SyntaxTree+SynPat+Attrib: System.String ToString() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: range Range -FSharp.Compiler.SyntaxTree+SynPat+Attrib: range get_Range() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: range get_range() -FSharp.Compiler.SyntaxTree+SynPat+Attrib: range range -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsAnds -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsDeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsInstanceMember -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsIsInst -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsOptionalVal -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsOr -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsQuoteExpr -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean IsWild -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsAnds() -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsDeprecatedCharRange() -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsInstanceMember() -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsIsInst() -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsOptionalVal() -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsOr() -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsQuoteExpr() -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynPat+Const: Boolean get_IsWild() -FSharp.Compiler.SyntaxTree+SynPat+Const: Int32 Tag -FSharp.Compiler.SyntaxTree+SynPat+Const: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynPat+Const: SynConst constant -FSharp.Compiler.SyntaxTree+SynPat+Const: SynConst get_constant() -FSharp.Compiler.SyntaxTree+SynPat+Const: System.String ToString() -FSharp.Compiler.SyntaxTree+SynPat+Const: range Range -FSharp.Compiler.SyntaxTree+SynPat+Const: range get_Range() -FSharp.Compiler.SyntaxTree+SynPat+Const: range get_range() -FSharp.Compiler.SyntaxTree+SynPat+Const: range range -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsAnds -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsDeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsInstanceMember -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsIsInst -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsOptionalVal -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsOr -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsQuoteExpr -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean IsWild -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsAnds() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsDeprecatedCharRange() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsInstanceMember() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsIsInst() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsOptionalVal() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsOr() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsQuoteExpr() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Boolean get_IsWild() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Char endChar -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Char get_endChar() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Char get_startChar() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Char startChar -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Int32 Tag -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: System.String ToString() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: range Range -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: range get_Range() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: range get_range() -FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange: range range -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsAnds -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsDeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsInstanceMember -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsIsInst -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsOptionalVal -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsOr -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsQuoteExpr -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean IsWild -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsAnds() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsDeprecatedCharRange() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsInstanceMember() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsIsInst() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsOptionalVal() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsOr() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsQuoteExpr() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Boolean get_IsWild() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Int32 Tag -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: SynPat get_pat() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: SynPat pat -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: System.String ToString() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: range Range -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: range get_Range() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: range get_range() -FSharp.Compiler.SyntaxTree+SynPat+FromParseError: range range -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsAnds -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsDeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsInstanceMember -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsIsInst -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsOptionalVal -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsOr -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsQuoteExpr -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean IsWild -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsAnds() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsDeprecatedCharRange() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsInstanceMember() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsIsInst() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsOptionalVal() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsOr() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsQuoteExpr() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Boolean get_IsWild() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Ident get_memberId() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Ident get_thisId() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Ident memberId -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Ident thisId -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Int32 Tag -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_toolingId() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] toolingId -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: System.String ToString() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: range Range -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: range get_Range() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: range get_range() -FSharp.Compiler.SyntaxTree+SynPat+InstanceMember: range range -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsAnds -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsDeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsInstanceMember -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsIsInst -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsOptionalVal -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsOr -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsQuoteExpr -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean IsWild -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsAnds() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsDeprecatedCharRange() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsInstanceMember() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsIsInst() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsOptionalVal() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsOr() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsQuoteExpr() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Boolean get_IsWild() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Int32 Tag -FSharp.Compiler.SyntaxTree+SynPat+IsInst: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: SynType get_pat() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: SynType pat -FSharp.Compiler.SyntaxTree+SynPat+IsInst: System.String ToString() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: range Range -FSharp.Compiler.SyntaxTree+SynPat+IsInst: range get_Range() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: range get_range() -FSharp.Compiler.SyntaxTree+SynPat+IsInst: range range -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsAnds -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsDeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsInstanceMember -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsIsInst -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsOptionalVal -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsOr -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsQuoteExpr -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean IsWild -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsAnds() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsDeprecatedCharRange() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsInstanceMember() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsIsInst() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsOptionalVal() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsOr() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsQuoteExpr() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Boolean get_IsWild() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Int32 Tag -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: LongIdentWithDots get_longDotId() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: LongIdentWithDots longDotId -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] extraId -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_extraId() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynValTyparDecls] get_typarDecls() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynValTyparDecls] typarDecls -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: SynArgPats argPats -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: SynArgPats get_argPats() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: System.String ToString() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: range Range -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: range get_Range() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: range get_range() -FSharp.Compiler.SyntaxTree+SynPat+LongIdent: range range -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsAnds -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsDeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsInstanceMember -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsIsInst -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsOptionalVal -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsOr -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsQuoteExpr -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean IsWild -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsAnds() -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsDeprecatedCharRange() -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsInstanceMember() -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsIsInst() -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsOptionalVal() -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsOr() -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsQuoteExpr() -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_IsWild() -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean get_isSelfIdentifier() -FSharp.Compiler.SyntaxTree+SynPat+Named: Boolean isSelfIdentifier -FSharp.Compiler.SyntaxTree+SynPat+Named: Ident get_ident() -FSharp.Compiler.SyntaxTree+SynPat+Named: Ident ident -FSharp.Compiler.SyntaxTree+SynPat+Named: Int32 Tag -FSharp.Compiler.SyntaxTree+SynPat+Named: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynPat+Named: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility -FSharp.Compiler.SyntaxTree+SynPat+Named: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() -FSharp.Compiler.SyntaxTree+SynPat+Named: SynPat get_pat() -FSharp.Compiler.SyntaxTree+SynPat+Named: SynPat pat -FSharp.Compiler.SyntaxTree+SynPat+Named: System.String ToString() -FSharp.Compiler.SyntaxTree+SynPat+Named: range Range -FSharp.Compiler.SyntaxTree+SynPat+Named: range get_Range() -FSharp.Compiler.SyntaxTree+SynPat+Named: range get_range() -FSharp.Compiler.SyntaxTree+SynPat+Named: range range -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsAnds -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsDeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsInstanceMember -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsIsInst -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsOptionalVal -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsOr -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsQuoteExpr -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean IsWild -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsAnds() -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsDeprecatedCharRange() -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsInstanceMember() -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsIsInst() -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsOptionalVal() -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsOr() -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsQuoteExpr() -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynPat+Null: Boolean get_IsWild() -FSharp.Compiler.SyntaxTree+SynPat+Null: Int32 Tag -FSharp.Compiler.SyntaxTree+SynPat+Null: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynPat+Null: System.String ToString() -FSharp.Compiler.SyntaxTree+SynPat+Null: range Range -FSharp.Compiler.SyntaxTree+SynPat+Null: range get_Range() -FSharp.Compiler.SyntaxTree+SynPat+Null: range get_range() -FSharp.Compiler.SyntaxTree+SynPat+Null: range range -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsAnds -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsDeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsInstanceMember -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsIsInst -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsOptionalVal -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsOr -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsQuoteExpr -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean IsWild -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsAnds() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsDeprecatedCharRange() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsInstanceMember() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsIsInst() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsOptionalVal() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsOr() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsQuoteExpr() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Boolean get_IsWild() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Ident get_ident() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Ident ident -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Int32 Tag -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: System.String ToString() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: range Range -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: range get_Range() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: range get_range() -FSharp.Compiler.SyntaxTree+SynPat+OptionalVal: range range -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsAnds -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsDeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsInstanceMember -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsIsInst -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsOptionalVal -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsOr -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsQuoteExpr -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean IsWild -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsAnds() -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsDeprecatedCharRange() -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsInstanceMember() -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsIsInst() -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsOptionalVal() -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsOr() -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsQuoteExpr() -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynPat+Or: Boolean get_IsWild() -FSharp.Compiler.SyntaxTree+SynPat+Or: Int32 Tag -FSharp.Compiler.SyntaxTree+SynPat+Or: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynPat+Or: SynPat get_lhsPat() -FSharp.Compiler.SyntaxTree+SynPat+Or: SynPat get_rhsPat() -FSharp.Compiler.SyntaxTree+SynPat+Or: SynPat lhsPat -FSharp.Compiler.SyntaxTree+SynPat+Or: SynPat rhsPat -FSharp.Compiler.SyntaxTree+SynPat+Or: System.String ToString() -FSharp.Compiler.SyntaxTree+SynPat+Or: range Range -FSharp.Compiler.SyntaxTree+SynPat+Or: range get_Range() -FSharp.Compiler.SyntaxTree+SynPat+Or: range get_range() -FSharp.Compiler.SyntaxTree+SynPat+Or: range range -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsAnds -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsDeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsInstanceMember -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsIsInst -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsOptionalVal -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsOr -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsQuoteExpr -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean IsWild -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsAnds() -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsDeprecatedCharRange() -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsInstanceMember() -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsIsInst() -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsOptionalVal() -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsOr() -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsQuoteExpr() -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynPat+Paren: Boolean get_IsWild() -FSharp.Compiler.SyntaxTree+SynPat+Paren: Int32 Tag -FSharp.Compiler.SyntaxTree+SynPat+Paren: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynPat+Paren: SynPat get_pat() -FSharp.Compiler.SyntaxTree+SynPat+Paren: SynPat pat -FSharp.Compiler.SyntaxTree+SynPat+Paren: System.String ToString() -FSharp.Compiler.SyntaxTree+SynPat+Paren: range Range -FSharp.Compiler.SyntaxTree+SynPat+Paren: range get_Range() -FSharp.Compiler.SyntaxTree+SynPat+Paren: range get_range() -FSharp.Compiler.SyntaxTree+SynPat+Paren: range range -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsAnds -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsDeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsInstanceMember -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsIsInst -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsOptionalVal -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsOr -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsQuoteExpr -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean IsWild -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsAnds() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsDeprecatedCharRange() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsInstanceMember() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsIsInst() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsOptionalVal() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsOr() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsQuoteExpr() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Boolean get_IsWild() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Int32 Tag -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: SynExpr expr -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: System.String ToString() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: range Range -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: range get_Range() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: range get_range() -FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr: range range -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsAnds -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsDeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsInstanceMember -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsIsInst -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsOptionalVal -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsOr -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsQuoteExpr -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean IsWild -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsAnds() -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsDeprecatedCharRange() -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsInstanceMember() -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsIsInst() -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsOptionalVal() -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsOr() -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsQuoteExpr() -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynPat+Record: Boolean get_IsWild() -FSharp.Compiler.SyntaxTree+SynPat+Record: Int32 Tag -FSharp.Compiler.SyntaxTree+SynPat+Record: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynPat+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident],FSharp.Compiler.SyntaxTree+Ident],FSharp.Compiler.SyntaxTree+SynPat]] fieldPats -FSharp.Compiler.SyntaxTree+SynPat+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident],FSharp.Compiler.SyntaxTree+Ident],FSharp.Compiler.SyntaxTree+SynPat]] get_fieldPats() -FSharp.Compiler.SyntaxTree+SynPat+Record: System.String ToString() -FSharp.Compiler.SyntaxTree+SynPat+Record: range Range -FSharp.Compiler.SyntaxTree+SynPat+Record: range get_Range() -FSharp.Compiler.SyntaxTree+SynPat+Record: range get_range() -FSharp.Compiler.SyntaxTree+SynPat+Record: range range -FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Ands -FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 ArrayOrList -FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Attrib -FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Const -FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 DeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 FromParseError -FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 InstanceMember -FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 IsInst -FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 LongIdent -FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Named -FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Null -FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 OptionalVal -FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Or -FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Paren -FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 QuoteExpr -FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Record -FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Tuple -FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Typed -FSharp.Compiler.SyntaxTree+SynPat+Tags: Int32 Wild -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsAnds -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsDeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsInstanceMember -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsIsInst -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsOptionalVal -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsOr -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsQuoteExpr -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean IsWild -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsAnds() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsDeprecatedCharRange() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsInstanceMember() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsIsInst() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsOptionalVal() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsOr() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsQuoteExpr() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_IsWild() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean get_isStruct() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Boolean isStruct -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Int32 Tag -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat] elementPats -FSharp.Compiler.SyntaxTree+SynPat+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat] get_elementPats() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: System.String ToString() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: range Range -FSharp.Compiler.SyntaxTree+SynPat+Tuple: range get_Range() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: range get_range() -FSharp.Compiler.SyntaxTree+SynPat+Tuple: range range -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsAnds -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsDeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsInstanceMember -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsIsInst -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsOptionalVal -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsOr -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsQuoteExpr -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean IsWild -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsAnds() -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsDeprecatedCharRange() -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsInstanceMember() -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsIsInst() -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsOptionalVal() -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsOr() -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsQuoteExpr() -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynPat+Typed: Boolean get_IsWild() -FSharp.Compiler.SyntaxTree+SynPat+Typed: Int32 Tag -FSharp.Compiler.SyntaxTree+SynPat+Typed: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynPat+Typed: SynPat get_pat() -FSharp.Compiler.SyntaxTree+SynPat+Typed: SynPat pat -FSharp.Compiler.SyntaxTree+SynPat+Typed: SynType get_targetType() -FSharp.Compiler.SyntaxTree+SynPat+Typed: SynType targetType -FSharp.Compiler.SyntaxTree+SynPat+Typed: System.String ToString() -FSharp.Compiler.SyntaxTree+SynPat+Typed: range Range -FSharp.Compiler.SyntaxTree+SynPat+Typed: range get_Range() -FSharp.Compiler.SyntaxTree+SynPat+Typed: range get_range() -FSharp.Compiler.SyntaxTree+SynPat+Typed: range range -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsAnds -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsDeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsInstanceMember -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsIsInst -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsOptionalVal -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsOr -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsQuoteExpr -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean IsWild -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsAnds() -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsDeprecatedCharRange() -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsInstanceMember() -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsIsInst() -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsOptionalVal() -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsOr() -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsQuoteExpr() -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynPat+Wild: Boolean get_IsWild() -FSharp.Compiler.SyntaxTree+SynPat+Wild: Int32 Tag -FSharp.Compiler.SyntaxTree+SynPat+Wild: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynPat+Wild: System.String ToString() -FSharp.Compiler.SyntaxTree+SynPat+Wild: range Range -FSharp.Compiler.SyntaxTree+SynPat+Wild: range get_Range() -FSharp.Compiler.SyntaxTree+SynPat+Wild: range get_range() -FSharp.Compiler.SyntaxTree+SynPat+Wild: range range -FSharp.Compiler.SyntaxTree+SynPat: Boolean IsAnds -FSharp.Compiler.SyntaxTree+SynPat: Boolean IsArrayOrList -FSharp.Compiler.SyntaxTree+SynPat: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynPat: Boolean IsConst -FSharp.Compiler.SyntaxTree+SynPat: Boolean IsDeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat: Boolean IsFromParseError -FSharp.Compiler.SyntaxTree+SynPat: Boolean IsInstanceMember -FSharp.Compiler.SyntaxTree+SynPat: Boolean IsIsInst -FSharp.Compiler.SyntaxTree+SynPat: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynPat: Boolean IsNamed -FSharp.Compiler.SyntaxTree+SynPat: Boolean IsNull -FSharp.Compiler.SyntaxTree+SynPat: Boolean IsOptionalVal -FSharp.Compiler.SyntaxTree+SynPat: Boolean IsOr -FSharp.Compiler.SyntaxTree+SynPat: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynPat: Boolean IsQuoteExpr -FSharp.Compiler.SyntaxTree+SynPat: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynPat: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynPat: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynPat: Boolean IsWild -FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsAnds() -FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsArrayOrList() -FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsConst() -FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsDeprecatedCharRange() -FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsFromParseError() -FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsInstanceMember() -FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsIsInst() -FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsNamed() -FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsNull() -FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsOptionalVal() -FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsOr() -FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsQuoteExpr() -FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynPat: Boolean get_IsWild() -FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Ands -FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+ArrayOrList -FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Attrib -FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Const -FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+DeprecatedCharRange -FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+FromParseError -FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+InstanceMember -FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+IsInst -FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+LongIdent -FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Named -FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Null -FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+OptionalVal -FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Or -FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Paren -FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+QuoteExpr -FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Record -FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Tags -FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Tuple -FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Typed -FSharp.Compiler.SyntaxTree+SynPat: FSharp.Compiler.SyntaxTree+SynPat+Wild -FSharp.Compiler.SyntaxTree+SynPat: Int32 Tag -FSharp.Compiler.SyntaxTree+SynPat: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynPat: SynPat NewAnds(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat], range) -FSharp.Compiler.SyntaxTree+SynPat: SynPat NewArrayOrList(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat], range) -FSharp.Compiler.SyntaxTree+SynPat: SynPat NewAttrib(SynPat, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], range) -FSharp.Compiler.SyntaxTree+SynPat: SynPat NewConst(SynConst, range) -FSharp.Compiler.SyntaxTree+SynPat: SynPat NewDeprecatedCharRange(Char, Char, range) -FSharp.Compiler.SyntaxTree+SynPat: SynPat NewFromParseError(SynPat, range) -FSharp.Compiler.SyntaxTree+SynPat: SynPat NewInstanceMember(Ident, Ident, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) -FSharp.Compiler.SyntaxTree+SynPat: SynPat NewIsInst(SynType, range) -FSharp.Compiler.SyntaxTree+SynPat: SynPat NewLongIdent(LongIdentWithDots, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynValTyparDecls], SynArgPats, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) -FSharp.Compiler.SyntaxTree+SynPat: SynPat NewNamed(SynPat, Ident, Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) -FSharp.Compiler.SyntaxTree+SynPat: SynPat NewNull(range) -FSharp.Compiler.SyntaxTree+SynPat: SynPat NewOptionalVal(Ident, range) -FSharp.Compiler.SyntaxTree+SynPat: SynPat NewOr(SynPat, SynPat, range) -FSharp.Compiler.SyntaxTree+SynPat: SynPat NewParen(SynPat, range) -FSharp.Compiler.SyntaxTree+SynPat: SynPat NewQuoteExpr(SynExpr, range) -FSharp.Compiler.SyntaxTree+SynPat: SynPat NewRecord(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident],FSharp.Compiler.SyntaxTree+Ident],FSharp.Compiler.SyntaxTree+SynPat]], range) -FSharp.Compiler.SyntaxTree+SynPat: SynPat NewTuple(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat], range) -FSharp.Compiler.SyntaxTree+SynPat: SynPat NewTyped(SynPat, SynType, range) -FSharp.Compiler.SyntaxTree+SynPat: SynPat NewWild(range) -FSharp.Compiler.SyntaxTree+SynPat: System.String ToString() -FSharp.Compiler.SyntaxTree+SynPat: range Range -FSharp.Compiler.SyntaxTree+SynPat: range get_Range() -FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: Boolean IsInteger -FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: Boolean IsNegate -FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: Boolean IsRational -FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: Boolean get_IsInteger() -FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: Boolean get_IsNegate() -FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: Boolean get_IsRational() -FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: Int32 Item -FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: Int32 Tag -FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: Int32 get_Item() -FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynRationalConst+Integer: System.String ToString() -FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: Boolean IsInteger -FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: Boolean IsNegate -FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: Boolean IsRational -FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: Boolean get_IsInteger() -FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: Boolean get_IsNegate() -FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: Boolean get_IsRational() -FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: Int32 Tag -FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: SynRationalConst Item -FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: SynRationalConst get_Item() -FSharp.Compiler.SyntaxTree+SynRationalConst+Negate: System.String ToString() -FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Boolean IsInteger -FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Boolean IsNegate -FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Boolean IsRational -FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Boolean get_IsInteger() -FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Boolean get_IsNegate() -FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Boolean get_IsRational() -FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Int32 Item1 -FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Int32 Item2 -FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Int32 Tag -FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Int32 get_Item1() -FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Int32 get_Item2() -FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: System.String ToString() -FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: range get_range() -FSharp.Compiler.SyntaxTree+SynRationalConst+Rational: range range -FSharp.Compiler.SyntaxTree+SynRationalConst+Tags: Int32 Integer -FSharp.Compiler.SyntaxTree+SynRationalConst+Tags: Int32 Negate -FSharp.Compiler.SyntaxTree+SynRationalConst+Tags: Int32 Rational -FSharp.Compiler.SyntaxTree+SynRationalConst: Boolean IsInteger -FSharp.Compiler.SyntaxTree+SynRationalConst: Boolean IsNegate -FSharp.Compiler.SyntaxTree+SynRationalConst: Boolean IsRational -FSharp.Compiler.SyntaxTree+SynRationalConst: Boolean get_IsInteger() -FSharp.Compiler.SyntaxTree+SynRationalConst: Boolean get_IsNegate() -FSharp.Compiler.SyntaxTree+SynRationalConst: Boolean get_IsRational() -FSharp.Compiler.SyntaxTree+SynRationalConst: FSharp.Compiler.SyntaxTree+SynRationalConst+Integer -FSharp.Compiler.SyntaxTree+SynRationalConst: FSharp.Compiler.SyntaxTree+SynRationalConst+Negate -FSharp.Compiler.SyntaxTree+SynRationalConst: FSharp.Compiler.SyntaxTree+SynRationalConst+Rational -FSharp.Compiler.SyntaxTree+SynRationalConst: FSharp.Compiler.SyntaxTree+SynRationalConst+Tags -FSharp.Compiler.SyntaxTree+SynRationalConst: Int32 Tag -FSharp.Compiler.SyntaxTree+SynRationalConst: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynRationalConst: SynRationalConst NewInteger(Int32) -FSharp.Compiler.SyntaxTree+SynRationalConst: SynRationalConst NewNegate(SynRationalConst) -FSharp.Compiler.SyntaxTree+SynRationalConst: SynRationalConst NewRational(Int32, Int32, range) -FSharp.Compiler.SyntaxTree+SynRationalConst: System.String ToString() -FSharp.Compiler.SyntaxTree+SynReturnInfo: Int32 Tag -FSharp.Compiler.SyntaxTree+SynReturnInfo: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynReturnInfo: SynReturnInfo NewSynReturnInfo(System.Tuple`2[FSharp.Compiler.SyntaxTree+SynType,FSharp.Compiler.SyntaxTree+SynArgInfo], range) -FSharp.Compiler.SyntaxTree+SynReturnInfo: System.String ToString() -FSharp.Compiler.SyntaxTree+SynReturnInfo: System.Tuple`2[FSharp.Compiler.SyntaxTree+SynType,FSharp.Compiler.SyntaxTree+SynArgInfo] get_returnType() -FSharp.Compiler.SyntaxTree+SynReturnInfo: System.Tuple`2[FSharp.Compiler.SyntaxTree+SynType,FSharp.Compiler.SyntaxTree+SynArgInfo] returnType -FSharp.Compiler.SyntaxTree+SynReturnInfo: range get_range() -FSharp.Compiler.SyntaxTree+SynReturnInfo: range range -FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: Boolean IsId -FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: Boolean get_IsId() -FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: Int32 Tag -FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes -FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() -FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: SynSimplePat get_pat() -FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: SynSimplePat pat -FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: System.String ToString() -FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: range get_range() -FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib: range range -FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean IsId -FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean get_IsId() -FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean get_isCompilerGenerated() -FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean get_isOptArg() -FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean get_isThisVar() -FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean isCompilerGenerated -FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean isOptArg -FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Boolean isThisVar -FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Ident get_ident() -FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Ident ident -FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Int32 Tag -FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo]] altNameRefCell -FSharp.Compiler.SyntaxTree+SynSimplePat+Id: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo]] get_altNameRefCell() -FSharp.Compiler.SyntaxTree+SynSimplePat+Id: System.String ToString() -FSharp.Compiler.SyntaxTree+SynSimplePat+Id: range get_range() -FSharp.Compiler.SyntaxTree+SynSimplePat+Id: range range -FSharp.Compiler.SyntaxTree+SynSimplePat+Tags: Int32 Attrib -FSharp.Compiler.SyntaxTree+SynSimplePat+Tags: Int32 Id -FSharp.Compiler.SyntaxTree+SynSimplePat+Tags: Int32 Typed -FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: Boolean IsId -FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: Boolean get_IsId() -FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: Int32 Tag -FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: SynSimplePat get_pat() -FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: SynSimplePat pat -FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: SynType get_targetType() -FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: SynType targetType -FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: System.String ToString() -FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: range get_range() -FSharp.Compiler.SyntaxTree+SynSimplePat+Typed: range range -FSharp.Compiler.SyntaxTree+SynSimplePat: Boolean IsAttrib -FSharp.Compiler.SyntaxTree+SynSimplePat: Boolean IsId -FSharp.Compiler.SyntaxTree+SynSimplePat: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynSimplePat: Boolean get_IsAttrib() -FSharp.Compiler.SyntaxTree+SynSimplePat: Boolean get_IsId() -FSharp.Compiler.SyntaxTree+SynSimplePat: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynSimplePat: FSharp.Compiler.SyntaxTree+SynSimplePat+Attrib -FSharp.Compiler.SyntaxTree+SynSimplePat: FSharp.Compiler.SyntaxTree+SynSimplePat+Id -FSharp.Compiler.SyntaxTree+SynSimplePat: FSharp.Compiler.SyntaxTree+SynSimplePat+Tags -FSharp.Compiler.SyntaxTree+SynSimplePat: FSharp.Compiler.SyntaxTree+SynSimplePat+Typed -FSharp.Compiler.SyntaxTree+SynSimplePat: Int32 Tag -FSharp.Compiler.SyntaxTree+SynSimplePat: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynSimplePat: SynSimplePat NewAttrib(SynSimplePat, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], range) -FSharp.Compiler.SyntaxTree+SynSimplePat: SynSimplePat NewId(Ident, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo]], Boolean, Boolean, Boolean, range) -FSharp.Compiler.SyntaxTree+SynSimplePat: SynSimplePat NewTyped(SynSimplePat, SynType, range) -FSharp.Compiler.SyntaxTree+SynSimplePat: System.String ToString() -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Decided: Boolean IsDecided -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Decided: Boolean IsUndecided -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Decided: Boolean get_IsDecided() -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Decided: Boolean get_IsUndecided() -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Decided: Ident Item -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Decided: Ident get_Item() -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Decided: Int32 Tag -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Decided: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Decided: System.String ToString() -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Tags: Int32 Decided -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Tags: Int32 Undecided -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Undecided: Boolean IsDecided -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Undecided: Boolean IsUndecided -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Undecided: Boolean get_IsDecided() -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Undecided: Boolean get_IsUndecided() -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Undecided: Ident Item -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Undecided: Ident get_Item() -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Undecided: Int32 Tag -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Undecided: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Undecided: System.String ToString() -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: Boolean IsDecided -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: Boolean IsUndecided -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: Boolean get_IsDecided() -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: Boolean get_IsUndecided() -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Decided -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Tags -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo+Undecided -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: Int32 Tag -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: SynSimplePatAlternativeIdInfo NewDecided(Ident) -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: SynSimplePatAlternativeIdInfo NewUndecided(Ident) -FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo: System.String ToString() -FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: Boolean IsSimplePats -FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: Boolean get_IsSimplePats() -FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: Int32 Tag -FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynSimplePat] get_pats() -FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynSimplePat] pats -FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: System.String ToString() -FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: range get_range() -FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats: range range -FSharp.Compiler.SyntaxTree+SynSimplePats+Tags: Int32 SimplePats -FSharp.Compiler.SyntaxTree+SynSimplePats+Tags: Int32 Typed -FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: Boolean IsSimplePats -FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: Boolean get_IsSimplePats() -FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: Int32 Tag -FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: SynSimplePats get_pats() -FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: SynSimplePats pats -FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: SynType get_targetType() -FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: SynType targetType -FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: System.String ToString() -FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: range get_range() -FSharp.Compiler.SyntaxTree+SynSimplePats+Typed: range range -FSharp.Compiler.SyntaxTree+SynSimplePats: Boolean IsSimplePats -FSharp.Compiler.SyntaxTree+SynSimplePats: Boolean IsTyped -FSharp.Compiler.SyntaxTree+SynSimplePats: Boolean get_IsSimplePats() -FSharp.Compiler.SyntaxTree+SynSimplePats: Boolean get_IsTyped() -FSharp.Compiler.SyntaxTree+SynSimplePats: FSharp.Compiler.SyntaxTree+SynSimplePats+SimplePats -FSharp.Compiler.SyntaxTree+SynSimplePats: FSharp.Compiler.SyntaxTree+SynSimplePats+Tags -FSharp.Compiler.SyntaxTree+SynSimplePats: FSharp.Compiler.SyntaxTree+SynSimplePats+Typed -FSharp.Compiler.SyntaxTree+SynSimplePats: Int32 Tag -FSharp.Compiler.SyntaxTree+SynSimplePats: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynSimplePats: SynSimplePats NewSimplePats(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynSimplePat], range) -FSharp.Compiler.SyntaxTree+SynSimplePats: SynSimplePats NewTyped(SynSimplePats, SynType, range) -FSharp.Compiler.SyntaxTree+SynSimplePats: System.String ToString() -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+Tags: Int32 WhenTyparIsStruct -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+Tags: Int32 WhenTyparTyconEqualsTycon -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: Boolean IsWhenTyparIsStruct -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: Boolean IsWhenTyparTyconEqualsTycon -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: Boolean get_IsWhenTyparIsStruct() -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: Boolean get_IsWhenTyparTyconEqualsTycon() -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: Int32 Tag -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: SynTypar get_typar() -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: SynTypar typar -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: System.String ToString() -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: range get_range() -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct: range range -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: Boolean IsWhenTyparIsStruct -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: Boolean IsWhenTyparTyconEqualsTycon -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: Boolean get_IsWhenTyparIsStruct() -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: Boolean get_IsWhenTyparTyconEqualsTycon() -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: Int32 Tag -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: SynTypar get_typar() -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: SynTypar typar -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: SynType get_rhsType() -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: SynType rhsType -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: System.String ToString() -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: range get_range() -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: range range -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: Boolean IsWhenTyparIsStruct -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: Boolean IsWhenTyparTyconEqualsTycon -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: Boolean get_IsWhenTyparIsStruct() -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: Boolean get_IsWhenTyparTyconEqualsTycon() -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+Tags -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparIsStruct -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: Int32 Tag -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: SynStaticOptimizationConstraint NewWhenTyparIsStruct(SynTypar, range) -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: SynStaticOptimizationConstraint NewWhenTyparTyconEqualsTycon(SynTypar, SynType, range) -FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypar: Boolean get_isCompGen() -FSharp.Compiler.SyntaxTree+SynTypar: Boolean isCompGen -FSharp.Compiler.SyntaxTree+SynTypar: Ident get_ident() -FSharp.Compiler.SyntaxTree+SynTypar: Ident ident -FSharp.Compiler.SyntaxTree+SynTypar: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypar: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypar: SynTypar NewTypar(Ident, TyparStaticReq, Boolean) -FSharp.Compiler.SyntaxTree+SynTypar: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypar: TyparStaticReq get_staticReq() -FSharp.Compiler.SyntaxTree+SynTypar: TyparStaticReq staticReq -FSharp.Compiler.SyntaxTree+SynTypar: range Range -FSharp.Compiler.SyntaxTree+SynTypar: range get_Range() -FSharp.Compiler.SyntaxTree+SynTyparDecl: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTyparDecl: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTyparDecl: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes -FSharp.Compiler.SyntaxTree+SynTyparDecl: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() -FSharp.Compiler.SyntaxTree+SynTyparDecl: SynTypar Item2 -FSharp.Compiler.SyntaxTree+SynTyparDecl: SynTypar get_Item2() -FSharp.Compiler.SyntaxTree+SynTyparDecl: SynTyparDecl NewTyparDecl(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], SynTypar) -FSharp.Compiler.SyntaxTree+SynTyparDecl: System.String ToString() -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsArray -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsFun -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsHashConstraint -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsLongIdentApp -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsMeasureDivide -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsMeasurePower -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsStaticConstant -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsStaticConstantExpr -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsStaticConstantNamed -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean IsWithGlobalConstraints -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsArray() -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsFun() -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsHashConstraint() -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsLongIdentApp() -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsMeasureDivide() -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsMeasurePower() -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsStaticConstant() -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsStaticConstantExpr() -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsStaticConstantNamed() -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynType+Anon: Boolean get_IsWithGlobalConstraints() -FSharp.Compiler.SyntaxTree+SynType+Anon: Int32 Tag -FSharp.Compiler.SyntaxTree+SynType+Anon: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynType+Anon: System.String ToString() -FSharp.Compiler.SyntaxTree+SynType+Anon: range Range -FSharp.Compiler.SyntaxTree+SynType+Anon: range get_Range() -FSharp.Compiler.SyntaxTree+SynType+Anon: range get_range() -FSharp.Compiler.SyntaxTree+SynType+Anon: range range -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsArray -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsFun -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsHashConstraint -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsLongIdentApp -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsMeasureDivide -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsMeasurePower -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsStaticConstant -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsStaticConstantExpr -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsStaticConstantNamed -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean IsWithGlobalConstraints -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsArray() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsFun() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsHashConstraint() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsLongIdentApp() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsMeasureDivide() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsMeasurePower() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsStaticConstant() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsStaticConstantExpr() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsStaticConstantNamed() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_IsWithGlobalConstraints() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean get_isStruct() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Boolean isStruct -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Int32 Tag -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+Ident,FSharp.Compiler.SyntaxTree+SynType]] fields -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+Ident,FSharp.Compiler.SyntaxTree+SynType]] get_fields() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: System.String ToString() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: range Range -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: range get_Range() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: range get_range() -FSharp.Compiler.SyntaxTree+SynType+AnonRecd: range range -FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsArray -FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsFun -FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsHashConstraint -FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsLongIdentApp -FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsMeasureDivide -FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsMeasurePower -FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsStaticConstant -FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsStaticConstantExpr -FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsStaticConstantNamed -FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynType+App: Boolean IsWithGlobalConstraints -FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsArray() -FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsFun() -FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsHashConstraint() -FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsLongIdentApp() -FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsMeasureDivide() -FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsMeasurePower() -FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsStaticConstant() -FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsStaticConstantExpr() -FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsStaticConstantNamed() -FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_IsWithGlobalConstraints() -FSharp.Compiler.SyntaxTree+SynType+App: Boolean get_isPostfix() -FSharp.Compiler.SyntaxTree+SynType+App: Boolean isPostfix -FSharp.Compiler.SyntaxTree+SynType+App: Int32 Tag -FSharp.Compiler.SyntaxTree+SynType+App: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynType+App: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range] commaRanges -FSharp.Compiler.SyntaxTree+SynType+App: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range] get_commaRanges() -FSharp.Compiler.SyntaxTree+SynType+App: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] get_typeArgs() -FSharp.Compiler.SyntaxTree+SynType+App: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] typeArgs -FSharp.Compiler.SyntaxTree+SynType+App: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_greaterRange() -FSharp.Compiler.SyntaxTree+SynType+App: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_lessRange() -FSharp.Compiler.SyntaxTree+SynType+App: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] greaterRange -FSharp.Compiler.SyntaxTree+SynType+App: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] lessRange -FSharp.Compiler.SyntaxTree+SynType+App: SynType get_typeName() -FSharp.Compiler.SyntaxTree+SynType+App: SynType typeName -FSharp.Compiler.SyntaxTree+SynType+App: System.String ToString() -FSharp.Compiler.SyntaxTree+SynType+App: range Range -FSharp.Compiler.SyntaxTree+SynType+App: range get_Range() -FSharp.Compiler.SyntaxTree+SynType+App: range get_range() -FSharp.Compiler.SyntaxTree+SynType+App: range range -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsArray -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsFun -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsHashConstraint -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsLongIdentApp -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsMeasureDivide -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsMeasurePower -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsStaticConstant -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsStaticConstantExpr -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsStaticConstantNamed -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean IsWithGlobalConstraints -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsArray() -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsFun() -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsHashConstraint() -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsLongIdentApp() -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsMeasureDivide() -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsMeasurePower() -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsStaticConstant() -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsStaticConstantExpr() -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsStaticConstantNamed() -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynType+Array: Boolean get_IsWithGlobalConstraints() -FSharp.Compiler.SyntaxTree+SynType+Array: Int32 Tag -FSharp.Compiler.SyntaxTree+SynType+Array: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynType+Array: Int32 get_rank() -FSharp.Compiler.SyntaxTree+SynType+Array: Int32 rank -FSharp.Compiler.SyntaxTree+SynType+Array: SynType elementType -FSharp.Compiler.SyntaxTree+SynType+Array: SynType get_elementType() -FSharp.Compiler.SyntaxTree+SynType+Array: System.String ToString() -FSharp.Compiler.SyntaxTree+SynType+Array: range Range -FSharp.Compiler.SyntaxTree+SynType+Array: range get_Range() -FSharp.Compiler.SyntaxTree+SynType+Array: range get_range() -FSharp.Compiler.SyntaxTree+SynType+Array: range range -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsArray -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsFun -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsHashConstraint -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsLongIdentApp -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsMeasureDivide -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsMeasurePower -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsStaticConstant -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsStaticConstantExpr -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsStaticConstantNamed -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean IsWithGlobalConstraints -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsArray() -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsFun() -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsHashConstraint() -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsLongIdentApp() -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsMeasureDivide() -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsMeasurePower() -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsStaticConstant() -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsStaticConstantExpr() -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsStaticConstantNamed() -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynType+Fun: Boolean get_IsWithGlobalConstraints() -FSharp.Compiler.SyntaxTree+SynType+Fun: Int32 Tag -FSharp.Compiler.SyntaxTree+SynType+Fun: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynType+Fun: SynType argType -FSharp.Compiler.SyntaxTree+SynType+Fun: SynType get_argType() -FSharp.Compiler.SyntaxTree+SynType+Fun: SynType get_returnType() -FSharp.Compiler.SyntaxTree+SynType+Fun: SynType returnType -FSharp.Compiler.SyntaxTree+SynType+Fun: System.String ToString() -FSharp.Compiler.SyntaxTree+SynType+Fun: range Range -FSharp.Compiler.SyntaxTree+SynType+Fun: range get_Range() -FSharp.Compiler.SyntaxTree+SynType+Fun: range get_range() -FSharp.Compiler.SyntaxTree+SynType+Fun: range range -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsArray -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsFun -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsHashConstraint -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsLongIdentApp -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsMeasureDivide -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsMeasurePower -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsStaticConstant -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsStaticConstantExpr -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsStaticConstantNamed -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean IsWithGlobalConstraints -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsArray() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsFun() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsHashConstraint() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsLongIdentApp() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsMeasureDivide() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsMeasurePower() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsStaticConstant() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsStaticConstantExpr() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsStaticConstantNamed() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Boolean get_IsWithGlobalConstraints() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Int32 Tag -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: SynType get_innerType() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: SynType innerType -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: System.String ToString() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: range Range -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: range get_Range() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: range get_range() -FSharp.Compiler.SyntaxTree+SynType+HashConstraint: range range -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsArray -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsFun -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsHashConstraint -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsLongIdentApp -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsMeasureDivide -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsMeasurePower -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsStaticConstant -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsStaticConstantExpr -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsStaticConstantNamed -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean IsWithGlobalConstraints -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsArray() -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsFun() -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsHashConstraint() -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsLongIdentApp() -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsMeasureDivide() -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsMeasurePower() -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsStaticConstant() -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsStaticConstantExpr() -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsStaticConstantNamed() -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Boolean get_IsWithGlobalConstraints() -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Int32 Tag -FSharp.Compiler.SyntaxTree+SynType+LongIdent: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynType+LongIdent: LongIdentWithDots get_longDotId() -FSharp.Compiler.SyntaxTree+SynType+LongIdent: LongIdentWithDots longDotId -FSharp.Compiler.SyntaxTree+SynType+LongIdent: System.String ToString() -FSharp.Compiler.SyntaxTree+SynType+LongIdent: range Range -FSharp.Compiler.SyntaxTree+SynType+LongIdent: range get_Range() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsArray -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsFun -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsHashConstraint -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsLongIdentApp -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsMeasureDivide -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsMeasurePower -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsStaticConstant -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsStaticConstantExpr -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsStaticConstantNamed -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean IsWithGlobalConstraints -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsArray() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsFun() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsHashConstraint() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsLongIdentApp() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsMeasureDivide() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsMeasurePower() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsStaticConstant() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsStaticConstantExpr() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsStaticConstantNamed() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Boolean get_IsWithGlobalConstraints() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Int32 Tag -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: LongIdentWithDots get_longDotId() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: LongIdentWithDots longDotId -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range] commaRanges -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range] get_commaRanges() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] get_typeArgs() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] typeArgs -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_greaterRange() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] get_lessRange() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] greaterRange -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range] lessRange -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: SynType get_typeName() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: SynType typeName -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: System.String ToString() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: range Range -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: range get_Range() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: range get_range() -FSharp.Compiler.SyntaxTree+SynType+LongIdentApp: range range -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsArray -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsFun -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsHashConstraint -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsLongIdentApp -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsMeasureDivide -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsMeasurePower -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsStaticConstant -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsStaticConstantExpr -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsStaticConstantNamed -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean IsWithGlobalConstraints -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsArray() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsFun() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsHashConstraint() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsLongIdentApp() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsMeasureDivide() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsMeasurePower() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsStaticConstant() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsStaticConstantExpr() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsStaticConstantNamed() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Boolean get_IsWithGlobalConstraints() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Int32 Tag -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: SynType dividend -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: SynType divisor -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: SynType get_dividend() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: SynType get_divisor() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: System.String ToString() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: range Range -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: range get_Range() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: range get_range() -FSharp.Compiler.SyntaxTree+SynType+MeasureDivide: range range -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsArray -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsFun -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsHashConstraint -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsLongIdentApp -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsMeasureDivide -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsMeasurePower -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsStaticConstant -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsStaticConstantExpr -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsStaticConstantNamed -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean IsWithGlobalConstraints -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsArray() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsFun() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsHashConstraint() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsLongIdentApp() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsMeasureDivide() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsMeasurePower() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsStaticConstant() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsStaticConstantExpr() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsStaticConstantNamed() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Boolean get_IsWithGlobalConstraints() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Int32 Tag -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: SynRationalConst exponent -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: SynRationalConst get_exponent() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: SynType baseMeasure -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: SynType get_baseMeasure() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: System.String ToString() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: range Range -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: range get_Range() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: range get_range() -FSharp.Compiler.SyntaxTree+SynType+MeasurePower: range range -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsArray -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsFun -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsHashConstraint -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsLongIdentApp -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsMeasureDivide -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsMeasurePower -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsStaticConstant -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsStaticConstantExpr -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsStaticConstantNamed -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean IsWithGlobalConstraints -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsArray() -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsFun() -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsHashConstraint() -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsLongIdentApp() -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsMeasureDivide() -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsMeasurePower() -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsStaticConstant() -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsStaticConstantExpr() -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsStaticConstantNamed() -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynType+Paren: Boolean get_IsWithGlobalConstraints() -FSharp.Compiler.SyntaxTree+SynType+Paren: Int32 Tag -FSharp.Compiler.SyntaxTree+SynType+Paren: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynType+Paren: SynType get_innerType() -FSharp.Compiler.SyntaxTree+SynType+Paren: SynType innerType -FSharp.Compiler.SyntaxTree+SynType+Paren: System.String ToString() -FSharp.Compiler.SyntaxTree+SynType+Paren: range Range -FSharp.Compiler.SyntaxTree+SynType+Paren: range get_Range() -FSharp.Compiler.SyntaxTree+SynType+Paren: range get_range() -FSharp.Compiler.SyntaxTree+SynType+Paren: range range -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsArray -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsFun -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsHashConstraint -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsLongIdentApp -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsMeasureDivide -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsMeasurePower -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsStaticConstant -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsStaticConstantExpr -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsStaticConstantNamed -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean IsWithGlobalConstraints -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsArray() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsFun() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsHashConstraint() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsLongIdentApp() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsMeasureDivide() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsMeasurePower() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsStaticConstant() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsStaticConstantExpr() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsStaticConstantNamed() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Boolean get_IsWithGlobalConstraints() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Int32 Tag -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: SynConst constant -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: SynConst get_constant() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: System.String ToString() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: range Range -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: range get_Range() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: range get_range() -FSharp.Compiler.SyntaxTree+SynType+StaticConstant: range range -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsArray -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsFun -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsHashConstraint -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsLongIdentApp -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsMeasureDivide -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsMeasurePower -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsStaticConstant -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsStaticConstantExpr -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsStaticConstantNamed -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean IsWithGlobalConstraints -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsArray() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsFun() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsHashConstraint() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsLongIdentApp() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsMeasureDivide() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsMeasurePower() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsStaticConstant() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsStaticConstantExpr() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsStaticConstantNamed() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Boolean get_IsWithGlobalConstraints() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Int32 Tag -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: SynExpr expr -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: SynExpr get_expr() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: System.String ToString() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: range Range -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: range get_Range() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: range get_range() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr: range range -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsArray -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsFun -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsHashConstraint -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsLongIdentApp -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsMeasureDivide -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsMeasurePower -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsStaticConstant -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsStaticConstantExpr -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsStaticConstantNamed -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean IsWithGlobalConstraints -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsArray() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsFun() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsHashConstraint() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsLongIdentApp() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsMeasureDivide() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsMeasurePower() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsStaticConstant() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsStaticConstantExpr() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsStaticConstantNamed() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Boolean get_IsWithGlobalConstraints() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Int32 Tag -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: SynType get_ident() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: SynType get_value() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: SynType ident -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: SynType value -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: System.String ToString() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: range Range -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: range get_Range() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: range get_range() -FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed: range range -FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 Anon -FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 AnonRecd -FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 App -FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 Array -FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 Fun -FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 HashConstraint -FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 LongIdent -FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 LongIdentApp -FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 MeasureDivide -FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 MeasurePower -FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 Paren -FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 StaticConstant -FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 StaticConstantExpr -FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 StaticConstantNamed -FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 Tuple -FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 Var -FSharp.Compiler.SyntaxTree+SynType+Tags: Int32 WithGlobalConstraints -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsArray -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsFun -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsHashConstraint -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsLongIdentApp -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsMeasureDivide -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsMeasurePower -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsStaticConstant -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsStaticConstantExpr -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsStaticConstantNamed -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean IsWithGlobalConstraints -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsArray() -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsFun() -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsHashConstraint() -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsLongIdentApp() -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsMeasureDivide() -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsMeasurePower() -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsStaticConstant() -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsStaticConstantExpr() -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsStaticConstantNamed() -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_IsWithGlobalConstraints() -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean get_isStruct() -FSharp.Compiler.SyntaxTree+SynType+Tuple: Boolean isStruct -FSharp.Compiler.SyntaxTree+SynType+Tuple: Int32 Tag -FSharp.Compiler.SyntaxTree+SynType+Tuple: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynType+Tuple: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Boolean,FSharp.Compiler.SyntaxTree+SynType]] elementTypes -FSharp.Compiler.SyntaxTree+SynType+Tuple: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Boolean,FSharp.Compiler.SyntaxTree+SynType]] get_elementTypes() -FSharp.Compiler.SyntaxTree+SynType+Tuple: System.String ToString() -FSharp.Compiler.SyntaxTree+SynType+Tuple: range Range -FSharp.Compiler.SyntaxTree+SynType+Tuple: range get_Range() -FSharp.Compiler.SyntaxTree+SynType+Tuple: range get_range() -FSharp.Compiler.SyntaxTree+SynType+Tuple: range range -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsArray -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsFun -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsHashConstraint -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsLongIdentApp -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsMeasureDivide -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsMeasurePower -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsStaticConstant -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsStaticConstantExpr -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsStaticConstantNamed -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean IsWithGlobalConstraints -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsArray() -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsFun() -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsHashConstraint() -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsLongIdentApp() -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsMeasureDivide() -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsMeasurePower() -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsStaticConstant() -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsStaticConstantExpr() -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsStaticConstantNamed() -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynType+Var: Boolean get_IsWithGlobalConstraints() -FSharp.Compiler.SyntaxTree+SynType+Var: Int32 Tag -FSharp.Compiler.SyntaxTree+SynType+Var: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynType+Var: SynTypar get_typar() -FSharp.Compiler.SyntaxTree+SynType+Var: SynTypar typar -FSharp.Compiler.SyntaxTree+SynType+Var: System.String ToString() -FSharp.Compiler.SyntaxTree+SynType+Var: range Range -FSharp.Compiler.SyntaxTree+SynType+Var: range get_Range() -FSharp.Compiler.SyntaxTree+SynType+Var: range get_range() -FSharp.Compiler.SyntaxTree+SynType+Var: range range -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsArray -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsFun -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsHashConstraint -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsLongIdentApp -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsMeasureDivide -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsMeasurePower -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsStaticConstant -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsStaticConstantExpr -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsStaticConstantNamed -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean IsWithGlobalConstraints -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsArray() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsFun() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsHashConstraint() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsLongIdentApp() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsMeasureDivide() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsMeasurePower() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsStaticConstant() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsStaticConstantExpr() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsStaticConstantNamed() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Boolean get_IsWithGlobalConstraints() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Int32 Tag -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeConstraint] constraints -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeConstraint] get_constraints() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: SynType get_typeName() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: SynType typeName -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: System.String ToString() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: range Range -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: range get_Range() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: range get_range() -FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints: range range -FSharp.Compiler.SyntaxTree+SynType: Boolean IsAnon -FSharp.Compiler.SyntaxTree+SynType: Boolean IsAnonRecd -FSharp.Compiler.SyntaxTree+SynType: Boolean IsApp -FSharp.Compiler.SyntaxTree+SynType: Boolean IsArray -FSharp.Compiler.SyntaxTree+SynType: Boolean IsFun -FSharp.Compiler.SyntaxTree+SynType: Boolean IsHashConstraint -FSharp.Compiler.SyntaxTree+SynType: Boolean IsLongIdent -FSharp.Compiler.SyntaxTree+SynType: Boolean IsLongIdentApp -FSharp.Compiler.SyntaxTree+SynType: Boolean IsMeasureDivide -FSharp.Compiler.SyntaxTree+SynType: Boolean IsMeasurePower -FSharp.Compiler.SyntaxTree+SynType: Boolean IsParen -FSharp.Compiler.SyntaxTree+SynType: Boolean IsStaticConstant -FSharp.Compiler.SyntaxTree+SynType: Boolean IsStaticConstantExpr -FSharp.Compiler.SyntaxTree+SynType: Boolean IsStaticConstantNamed -FSharp.Compiler.SyntaxTree+SynType: Boolean IsTuple -FSharp.Compiler.SyntaxTree+SynType: Boolean IsVar -FSharp.Compiler.SyntaxTree+SynType: Boolean IsWithGlobalConstraints -FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsAnon() -FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsAnonRecd() -FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsApp() -FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsArray() -FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsFun() -FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsHashConstraint() -FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsLongIdent() -FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsLongIdentApp() -FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsMeasureDivide() -FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsMeasurePower() -FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsParen() -FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsStaticConstant() -FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsStaticConstantExpr() -FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsStaticConstantNamed() -FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsTuple() -FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsVar() -FSharp.Compiler.SyntaxTree+SynType: Boolean get_IsWithGlobalConstraints() -FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+Anon -FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+AnonRecd -FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+App -FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+Array -FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+Fun -FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+HashConstraint -FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+LongIdent -FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+LongIdentApp -FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+MeasureDivide -FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+MeasurePower -FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+Paren -FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+StaticConstant -FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+StaticConstantExpr -FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+StaticConstantNamed -FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+Tags -FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+Tuple -FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+Var -FSharp.Compiler.SyntaxTree+SynType: FSharp.Compiler.SyntaxTree+SynType+WithGlobalConstraints -FSharp.Compiler.SyntaxTree+SynType: Int32 Tag -FSharp.Compiler.SyntaxTree+SynType: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynType: SynType NewAnon(range) -FSharp.Compiler.SyntaxTree+SynType: SynType NewAnonRecd(Boolean, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+Ident,FSharp.Compiler.SyntaxTree+SynType]], range) -FSharp.Compiler.SyntaxTree+SynType: SynType NewApp(SynType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range], Boolean, range) -FSharp.Compiler.SyntaxTree+SynType: SynType NewArray(Int32, SynType, range) -FSharp.Compiler.SyntaxTree+SynType: SynType NewFun(SynType, SynType, range) -FSharp.Compiler.SyntaxTree+SynType: SynType NewHashConstraint(SynType, range) -FSharp.Compiler.SyntaxTree+SynType: SynType NewLongIdent(LongIdentWithDots) -FSharp.Compiler.SyntaxTree+SynType: SynType NewLongIdentApp(SynType, LongIdentWithDots, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Range+range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range], range) -FSharp.Compiler.SyntaxTree+SynType: SynType NewMeasureDivide(SynType, SynType, range) -FSharp.Compiler.SyntaxTree+SynType: SynType NewMeasurePower(SynType, SynRationalConst, range) -FSharp.Compiler.SyntaxTree+SynType: SynType NewParen(SynType, range) -FSharp.Compiler.SyntaxTree+SynType: SynType NewStaticConstant(SynConst, range) -FSharp.Compiler.SyntaxTree+SynType: SynType NewStaticConstantExpr(SynExpr, range) -FSharp.Compiler.SyntaxTree+SynType: SynType NewStaticConstantNamed(SynType, SynType, range) -FSharp.Compiler.SyntaxTree+SynType: SynType NewTuple(Boolean, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Boolean,FSharp.Compiler.SyntaxTree+SynType]], range) -FSharp.Compiler.SyntaxTree+SynType: SynType NewVar(SynTypar, range) -FSharp.Compiler.SyntaxTree+SynType: SynType NewWithGlobalConstraints(SynType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeConstraint], range) -FSharp.Compiler.SyntaxTree+SynType: System.String ToString() -FSharp.Compiler.SyntaxTree+SynType: range Range -FSharp.Compiler.SyntaxTree+SynType: range get_Range() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparDefaultsToType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparIsComparable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparIsDelegate -FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparIsEnum -FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparIsEquatable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparIsReferenceType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparIsUnmanaged -FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparIsValueType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparSubtypeOfType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparSupportsMember -FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags: Int32 WhereTyparSupportsNull -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparDefaultsToType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparIsComparable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparIsDelegate -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparIsEnum -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparIsEquatable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparIsReferenceType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparIsUnmanaged -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparIsValueType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparSubtypeOfType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparSupportsMember -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean IsWhereTyparSupportsNull -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparDefaultsToType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparIsComparable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparIsDelegate() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparIsEnum() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparIsEquatable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparIsReferenceType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparIsUnmanaged() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparIsValueType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparSubtypeOfType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparSupportsMember() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Boolean get_IsWhereTyparSupportsNull() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: SynTypar get_typar() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: SynTypar typar -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: SynType get_typeName() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: SynType typeName -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType: range range -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparDefaultsToType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparIsComparable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparIsDelegate -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparIsEnum -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparIsEquatable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparIsReferenceType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparIsUnmanaged -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparIsValueType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparSubtypeOfType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparSupportsMember -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean IsWhereTyparSupportsNull -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparDefaultsToType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparIsComparable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparIsDelegate() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparIsEnum() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparIsEquatable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparIsReferenceType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparIsUnmanaged() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparIsValueType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparSubtypeOfType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparSupportsMember() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Boolean get_IsWhereTyparSupportsNull() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: SynTypar get_typar() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: SynTypar typar -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable: range range -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparDefaultsToType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparIsComparable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparIsDelegate -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparIsEnum -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparIsEquatable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparIsReferenceType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparIsUnmanaged -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparIsValueType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparSubtypeOfType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparSupportsMember -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean IsWhereTyparSupportsNull -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparDefaultsToType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparIsComparable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparIsDelegate() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparIsEnum() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparIsEquatable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparIsReferenceType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparIsUnmanaged() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparIsValueType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparSubtypeOfType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparSupportsMember() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Boolean get_IsWhereTyparSupportsNull() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] get_typeArgs() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] typeArgs -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: SynTypar get_typar() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: SynTypar typar -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate: range range -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparDefaultsToType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparIsComparable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparIsDelegate -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparIsEnum -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparIsEquatable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparIsReferenceType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparIsUnmanaged -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparIsValueType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparSubtypeOfType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparSupportsMember -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean IsWhereTyparSupportsNull -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparDefaultsToType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparIsComparable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparIsDelegate() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparIsEnum() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparIsEquatable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparIsReferenceType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparIsUnmanaged() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparIsValueType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparSubtypeOfType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparSupportsMember() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Boolean get_IsWhereTyparSupportsNull() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] get_typeArgs() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] typeArgs -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: SynTypar get_typar() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: SynTypar typar -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum: range range -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparDefaultsToType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparIsComparable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparIsDelegate -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparIsEnum -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparIsEquatable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparIsReferenceType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparIsUnmanaged -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparIsValueType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparSubtypeOfType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparSupportsMember -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean IsWhereTyparSupportsNull -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparDefaultsToType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparIsComparable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparIsDelegate() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparIsEnum() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparIsEquatable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparIsReferenceType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparIsUnmanaged() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparIsValueType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparSubtypeOfType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparSupportsMember() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Boolean get_IsWhereTyparSupportsNull() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: SynTypar get_typar() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: SynTypar typar -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable: range range -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparDefaultsToType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparIsComparable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparIsDelegate -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparIsEnum -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparIsEquatable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparIsReferenceType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparIsUnmanaged -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparIsValueType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparSubtypeOfType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparSupportsMember -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean IsWhereTyparSupportsNull -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparDefaultsToType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparIsComparable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparIsDelegate() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparIsEnum() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparIsEquatable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparIsReferenceType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparIsUnmanaged() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparIsValueType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparSubtypeOfType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparSupportsMember() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Boolean get_IsWhereTyparSupportsNull() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: SynTypar get_typar() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: SynTypar typar -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType: range range -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparDefaultsToType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparIsComparable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparIsDelegate -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparIsEnum -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparIsEquatable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparIsReferenceType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparIsUnmanaged -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparIsValueType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparSubtypeOfType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparSupportsMember -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean IsWhereTyparSupportsNull -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparDefaultsToType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparIsComparable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparIsDelegate() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparIsEnum() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparIsEquatable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparIsReferenceType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparIsUnmanaged() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparIsValueType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparSubtypeOfType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparSupportsMember() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Boolean get_IsWhereTyparSupportsNull() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: SynTypar get_typar() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: SynTypar typar -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged: range range -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparDefaultsToType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparIsComparable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparIsDelegate -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparIsEnum -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparIsEquatable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparIsReferenceType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparIsUnmanaged -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparIsValueType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparSubtypeOfType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparSupportsMember -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean IsWhereTyparSupportsNull -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparDefaultsToType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparIsComparable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparIsDelegate() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparIsEnum() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparIsEquatable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparIsReferenceType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparIsUnmanaged() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparIsValueType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparSubtypeOfType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparSupportsMember() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Boolean get_IsWhereTyparSupportsNull() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: SynTypar get_typar() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: SynTypar typar -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType: range range -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparDefaultsToType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparIsComparable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparIsDelegate -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparIsEnum -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparIsEquatable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparIsReferenceType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparIsUnmanaged -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparIsValueType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparSubtypeOfType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparSupportsMember -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean IsWhereTyparSupportsNull -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparDefaultsToType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparIsComparable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparIsDelegate() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparIsEnum() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparIsEquatable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparIsReferenceType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparIsUnmanaged() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparIsValueType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparSubtypeOfType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparSupportsMember() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Boolean get_IsWhereTyparSupportsNull() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: SynTypar get_typar() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: SynTypar typar -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: SynType get_typeName() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: SynType typeName -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType: range range -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparDefaultsToType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparIsComparable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparIsDelegate -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparIsEnum -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparIsEquatable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparIsReferenceType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparIsUnmanaged -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparIsValueType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparSubtypeOfType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparSupportsMember -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean IsWhereTyparSupportsNull -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparDefaultsToType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparIsComparable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparIsDelegate() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparIsEnum() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparIsEquatable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparIsReferenceType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparIsUnmanaged() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparIsValueType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparSubtypeOfType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparSupportsMember() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Boolean get_IsWhereTyparSupportsNull() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] get_typars() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType] typars -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: SynMemberSig get_memberSig() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: SynMemberSig memberSig -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember: range range -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparDefaultsToType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparIsComparable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparIsDelegate -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparIsEnum -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparIsEquatable -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparIsReferenceType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparIsUnmanaged -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparIsValueType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparSubtypeOfType -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparSupportsMember -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean IsWhereTyparSupportsNull -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparDefaultsToType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparIsComparable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparIsDelegate() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparIsEnum() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparIsEquatable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparIsReferenceType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparIsUnmanaged() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparIsValueType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparSubtypeOfType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparSupportsMember() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Boolean get_IsWhereTyparSupportsNull() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: SynTypar get_typar() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: SynTypar typar -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull: range range -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparDefaultsToType -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparIsComparable -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparIsDelegate -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparIsEnum -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparIsEquatable -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparIsReferenceType -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparIsUnmanaged -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparIsValueType -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparSubtypeOfType -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparSupportsMember -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean IsWhereTyparSupportsNull -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparDefaultsToType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparIsComparable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparIsDelegate() -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparIsEnum() -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparIsEquatable() -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparIsReferenceType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparIsUnmanaged() -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparIsValueType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparSubtypeOfType() -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparSupportsMember() -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Boolean get_IsWhereTyparSupportsNull() -FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+Tags -FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparDefaultsToType -FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsComparable -FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsDelegate -FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEnum -FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsEquatable -FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsReferenceType -FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsUnmanaged -FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparIsValueType -FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSubtypeOfType -FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsMember -FSharp.Compiler.SyntaxTree+SynTypeConstraint: FSharp.Compiler.SyntaxTree+SynTypeConstraint+WhereTyparSupportsNull -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeConstraint: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparDefaultsToType(SynTypar, SynType, range) -FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparIsComparable(SynTypar, range) -FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparIsDelegate(SynTypar, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType], range) -FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparIsEnum(SynTypar, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType], range) -FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparIsEquatable(SynTypar, range) -FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparIsReferenceType(SynTypar, range) -FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparIsUnmanaged(SynTypar, range) -FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparIsValueType(SynTypar, range) -FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparSubtypeOfType(SynTypar, SynType, range) -FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparSupportsMember(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynType], SynMemberSig, range) -FSharp.Compiler.SyntaxTree+SynTypeConstraint: SynTypeConstraint NewWhereTyparSupportsNull(SynTypar, range) -FSharp.Compiler.SyntaxTree+SynTypeConstraint: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefn: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeDefn: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeDefn: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn] get_members() -FSharp.Compiler.SyntaxTree+SynTypeDefn: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn] members -FSharp.Compiler.SyntaxTree+SynTypeDefn: SynComponentInfo get_typeInfo() -FSharp.Compiler.SyntaxTree+SynTypeDefn: SynComponentInfo typeInfo -FSharp.Compiler.SyntaxTree+SynTypeDefn: SynTypeDefn NewTypeDefn(SynComponentInfo, SynTypeDefnRepr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn], range) -FSharp.Compiler.SyntaxTree+SynTypeDefn: SynTypeDefnRepr get_typeRepr() -FSharp.Compiler.SyntaxTree+SynTypeDefn: SynTypeDefnRepr typeRepr -FSharp.Compiler.SyntaxTree+SynTypeDefn: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefn: range Range -FSharp.Compiler.SyntaxTree+SynTypeDefn: range get_Range() -FSharp.Compiler.SyntaxTree+SynTypeDefn: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeDefn: range range -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconAbbrev -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconAugmentation -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconClass -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconDelegate -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconHiddenRepr -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconILAssemblyCode -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconInterface -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconRecord -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconStruct -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconUnion -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags: Int32 TyconUnspecified -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconAbbrev -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconAugmentation -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconClass -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconDelegate -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconHiddenRepr -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconILAssemblyCode -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconInterface -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconRecord -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconStruct -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconUnion -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean IsTyconUnspecified -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconAbbrev() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconAugmentation() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconClass() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconDelegate() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconHiddenRepr() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconILAssemblyCode() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconInterface() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconRecord() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconStruct() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconUnion() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Boolean get_IsTyconUnspecified() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: SynType Item1 -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: SynType get_Item1() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: SynValInfo Item2 -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: SynValInfo get_Item2() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconAbbrev -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconAugmentation -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconClass -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconDelegate -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconHiddenRepr -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconILAssemblyCode -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconInterface -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconRecord -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconStruct -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconUnion -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean IsTyconUnspecified -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconAbbrev() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconAugmentation() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconClass() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconDelegate() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconHiddenRepr() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconILAssemblyCode() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconInterface() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconRecord() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconStruct() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconUnion() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Boolean get_IsTyconUnspecified() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: FSharp.Compiler.SyntaxTree+SynTypeDefnKind+Tags -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: FSharp.Compiler.SyntaxTree+SynTypeDefnKind+TyconDelegate -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind NewTyconDelegate(SynType, SynValInfo) -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind TyconAbbrev -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind TyconAugmentation -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind TyconClass -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind TyconHiddenRepr -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind TyconILAssemblyCode -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind TyconInterface -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind TyconRecord -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind TyconStruct -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind TyconUnion -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind TyconUnspecified -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind get_TyconAbbrev() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind get_TyconAugmentation() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind get_TyconClass() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind get_TyconHiddenRepr() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind get_TyconILAssemblyCode() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind get_TyconInterface() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind get_TyconRecord() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind get_TyconStruct() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind get_TyconUnion() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: SynTypeDefnKind get_TyconUnspecified() -FSharp.Compiler.SyntaxTree+SynTypeDefnKind: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: Boolean IsException -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: Boolean IsObjectModel -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: Boolean IsSimple -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: Boolean get_IsObjectModel() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: Boolean get_IsSimple() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: SynExceptionDefnRepr exnRepr -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: SynExceptionDefnRepr get_exnRepr() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: range Range -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception: range get_Range() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: Boolean IsException -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: Boolean IsObjectModel -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: Boolean IsSimple -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: Boolean get_IsObjectModel() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: Boolean get_IsSimple() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn] get_members() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn] members -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: SynTypeDefnKind get_kind() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: SynTypeDefnKind kind -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: range Range -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: range get_Range() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel: range range -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: Boolean IsException -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: Boolean IsObjectModel -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: Boolean IsSimple -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: Boolean get_IsObjectModel() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: Boolean get_IsSimple() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: SynTypeDefnSimpleRepr get_simpleRepr() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: SynTypeDefnSimpleRepr simpleRepr -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: range Range -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: range get_Range() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple: range range -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Tags: Int32 Exception -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Tags: Int32 ObjectModel -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Tags: Int32 Simple -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: Boolean IsException -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: Boolean IsObjectModel -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: Boolean IsSimple -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: Boolean get_IsObjectModel() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: Boolean get_IsSimple() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Exception -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+ObjectModel -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Simple -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnRepr+Tags -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: SynTypeDefnRepr NewException(SynExceptionDefnRepr) -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: SynTypeDefnRepr NewObjectModel(SynTypeDefnKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberDefn], range) -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: SynTypeDefnRepr NewSimple(SynTypeDefnSimpleRepr, range) -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: range Range -FSharp.Compiler.SyntaxTree+SynTypeDefnRepr: range get_Range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSig: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeDefnSig: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeDefnSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberSig] Item3 -FSharp.Compiler.SyntaxTree+SynTypeDefnSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberSig] get_Item3() -FSharp.Compiler.SyntaxTree+SynTypeDefnSig: SynComponentInfo Item1 -FSharp.Compiler.SyntaxTree+SynTypeDefnSig: SynComponentInfo get_Item1() -FSharp.Compiler.SyntaxTree+SynTypeDefnSig: SynTypeDefnSig NewTypeDefnSig(SynComponentInfo, SynTypeDefnSigRepr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberSig], range) -FSharp.Compiler.SyntaxTree+SynTypeDefnSig: SynTypeDefnSigRepr Item2 -FSharp.Compiler.SyntaxTree+SynTypeDefnSig: SynTypeDefnSigRepr get_Item2() -FSharp.Compiler.SyntaxTree+SynTypeDefnSig: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefnSig: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSig: range range -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: Boolean IsException -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: Boolean IsObjectModel -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: Boolean IsSimple -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: Boolean get_IsObjectModel() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: Boolean get_IsSimple() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: SynExceptionDefnRepr Item -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: SynExceptionDefnRepr get_Item() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: range Range -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception: range get_Range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: Boolean IsException -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: Boolean IsObjectModel -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: Boolean IsSimple -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: Boolean get_IsObjectModel() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: Boolean get_IsSimple() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberSig] get_memberSigs() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberSig] memberSigs -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: SynTypeDefnKind get_kind() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: SynTypeDefnKind kind -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: range Range -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: range get_Range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel: range range -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: Boolean IsException -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: Boolean IsObjectModel -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: Boolean IsSimple -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: Boolean get_IsObjectModel() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: Boolean get_IsSimple() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: SynTypeDefnSimpleRepr get_repr() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: SynTypeDefnSimpleRepr repr -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: range Range -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: range get_Range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple: range range -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Tags: Int32 Exception -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Tags: Int32 ObjectModel -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Tags: Int32 Simple -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: Boolean IsException -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: Boolean IsObjectModel -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: Boolean IsSimple -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: Boolean get_IsObjectModel() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: Boolean get_IsSimple() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Exception -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+ObjectModel -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Simple -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr+Tags -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: SynTypeDefnSigRepr NewException(SynExceptionDefnRepr) -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: SynTypeDefnSigRepr NewObjectModel(SynTypeDefnKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynMemberSig], range) -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: SynTypeDefnSigRepr NewSimple(SynTypeDefnSimpleRepr, range) -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: range Range -FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr: range get_Range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean IsEnum -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean IsException -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean IsGeneral -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean IsNone -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean IsTypeAbbrev -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean IsUnion -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean get_IsEnum() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean get_IsGeneral() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean get_IsNone() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean get_IsTypeAbbrev() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Boolean get_IsUnion() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynEnumCase] cases -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynEnumCase] get_cases() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: range Range -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: range get_Range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum: range range -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean IsEnum -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean IsException -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean IsGeneral -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean IsNone -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean IsTypeAbbrev -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean IsUnion -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean get_IsEnum() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean get_IsGeneral() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean get_IsNone() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean get_IsTypeAbbrev() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Boolean get_IsUnion() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: SynExceptionDefnRepr exnRepr -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: SynExceptionDefnRepr get_exnRepr() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: range Range -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception: range get_Range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean IsEnum -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean IsException -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean IsGeneral -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean IsNone -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean IsTypeAbbrev -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean IsUnion -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean get_IsEnum() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean get_IsGeneral() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean get_IsNone() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean get_IsTypeAbbrev() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean get_IsUnion() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean get_isConcrete() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean get_isIncrClass() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean isConcrete -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Boolean isIncrClass -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynField] fields -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynField] get_fields() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynValSig,FSharp.Compiler.SyntaxTree+MemberFlags]] get_slotsigs() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynValSig,FSharp.Compiler.SyntaxTree+MemberFlags]] slotsigs -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.SyntaxTree+SynType,FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]]] get_inherits() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.SyntaxTree+SynType,FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]]] inherits -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynSimplePats] get_implicitCtorSynPats() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynSimplePats] implicitCtorSynPats -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: SynTypeDefnKind get_kind() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: SynTypeDefnKind kind -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: range Range -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: range get_Range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General: range range -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean IsEnum -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean IsException -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean IsGeneral -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean IsNone -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean IsTypeAbbrev -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean IsUnion -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean get_IsEnum() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean get_IsGeneral() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean get_IsNone() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean get_IsTypeAbbrev() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Boolean get_IsUnion() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: ILType get_ilType() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: ILType ilType -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: range Range -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: range get_Range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: range range -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean IsEnum -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean IsException -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean IsGeneral -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean IsNone -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean IsTypeAbbrev -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean IsUnion -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean get_IsEnum() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean get_IsGeneral() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean get_IsNone() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean get_IsTypeAbbrev() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Boolean get_IsUnion() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: range Range -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: range get_Range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None: range range -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean IsEnum -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean IsException -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean IsGeneral -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean IsNone -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean IsTypeAbbrev -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean IsUnion -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean get_IsEnum() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean get_IsGeneral() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean get_IsNone() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean get_IsTypeAbbrev() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Boolean get_IsUnion() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynField] get_recordFields() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynField] recordFields -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: range Range -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: range get_Range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record: range range -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Tags: Int32 Enum -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Tags: Int32 Exception -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Tags: Int32 General -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Tags: Int32 LibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Tags: Int32 None -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Tags: Int32 Record -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Tags: Int32 TypeAbbrev -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Tags: Int32 Union -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean IsEnum -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean IsException -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean IsGeneral -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean IsNone -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean IsTypeAbbrev -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean IsUnion -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean get_IsEnum() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean get_IsGeneral() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean get_IsNone() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean get_IsTypeAbbrev() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Boolean get_IsUnion() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: ParserDetail detail -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: ParserDetail get_detail() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: SynType get_rhsType() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: SynType rhsType -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: range Range -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: range get_Range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev: range range -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean IsEnum -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean IsException -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean IsGeneral -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean IsNone -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean IsTypeAbbrev -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean IsUnion -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean get_IsEnum() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean get_IsGeneral() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean get_IsNone() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean get_IsTypeAbbrev() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Boolean get_IsUnion() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynUnionCase] get_unionCases() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynUnionCase] unionCases -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: range Range -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: range get_Range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: range get_range() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union: range range -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean IsEnum -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean IsException -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean IsGeneral -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean IsLibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean IsNone -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean IsRecord -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean IsTypeAbbrev -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean IsUnion -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean get_IsEnum() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean get_IsException() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean get_IsGeneral() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean get_IsLibraryOnlyILAssembly() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean get_IsNone() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean get_IsRecord() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean get_IsTypeAbbrev() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Boolean get_IsUnion() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Enum -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Exception -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+General -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+LibraryOnlyILAssembly -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+None -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Record -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Tags -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+TypeAbbrev -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr+Union -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Int32 Tag -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: SynTypeDefnSimpleRepr NewEnum(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynEnumCase], range) -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: SynTypeDefnSimpleRepr NewException(SynExceptionDefnRepr) -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: SynTypeDefnSimpleRepr NewGeneral(SynTypeDefnKind, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.SyntaxTree+SynType,FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.SyntaxTree+SynValSig,FSharp.Compiler.SyntaxTree+MemberFlags]], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynField], Boolean, Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynSimplePats], range) -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: SynTypeDefnSimpleRepr NewLibraryOnlyILAssembly(ILType, range) -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: SynTypeDefnSimpleRepr NewNone(range) -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: SynTypeDefnSimpleRepr NewRecord(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynField], range) -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: SynTypeDefnSimpleRepr NewTypeAbbrev(ParserDetail, SynType, range) -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: SynTypeDefnSimpleRepr NewUnion(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynUnionCase], range) -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: System.String ToString() -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: range Range -FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr: range get_Range() -FSharp.Compiler.SyntaxTree+SynUnionCase: Ident get_ident() -FSharp.Compiler.SyntaxTree+SynUnionCase: Ident ident -FSharp.Compiler.SyntaxTree+SynUnionCase: Int32 Tag -FSharp.Compiler.SyntaxTree+SynUnionCase: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynUnionCase: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes -FSharp.Compiler.SyntaxTree+SynUnionCase: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() -FSharp.Compiler.SyntaxTree+SynUnionCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility -FSharp.Compiler.SyntaxTree+SynUnionCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() -FSharp.Compiler.SyntaxTree+SynUnionCase: PreXmlDoc get_xmlDoc() -FSharp.Compiler.SyntaxTree+SynUnionCase: PreXmlDoc xmlDoc -FSharp.Compiler.SyntaxTree+SynUnionCase: SynUnionCase NewUnionCase(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Ident, SynUnionCaseType, PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) -FSharp.Compiler.SyntaxTree+SynUnionCase: SynUnionCaseType caseType -FSharp.Compiler.SyntaxTree+SynUnionCase: SynUnionCaseType get_caseType() -FSharp.Compiler.SyntaxTree+SynUnionCase: System.String ToString() -FSharp.Compiler.SyntaxTree+SynUnionCase: range Range -FSharp.Compiler.SyntaxTree+SynUnionCase: range get_Range() -FSharp.Compiler.SyntaxTree+SynUnionCase: range get_range() -FSharp.Compiler.SyntaxTree+SynUnionCase: range range -FSharp.Compiler.SyntaxTree+SynUnionCaseType+Tags: Int32 UnionCaseFields -FSharp.Compiler.SyntaxTree+SynUnionCaseType+Tags: Int32 UnionCaseFullType -FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFields: Boolean IsUnionCaseFields -FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFields: Boolean IsUnionCaseFullType -FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFields: Boolean get_IsUnionCaseFields() -FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFields: Boolean get_IsUnionCaseFullType() -FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFields: Int32 Tag -FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFields: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFields: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynField] cases -FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFields: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynField] get_cases() -FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFields: System.String ToString() -FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: Boolean IsUnionCaseFields -FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: Boolean IsUnionCaseFullType -FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: Boolean get_IsUnionCaseFields() -FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: Boolean get_IsUnionCaseFullType() -FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: Int32 Tag -FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: SynType Item1 -FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: SynType get_Item1() -FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: SynValInfo Item2 -FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: SynValInfo get_Item2() -FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType: System.String ToString() -FSharp.Compiler.SyntaxTree+SynUnionCaseType: Boolean IsUnionCaseFields -FSharp.Compiler.SyntaxTree+SynUnionCaseType: Boolean IsUnionCaseFullType -FSharp.Compiler.SyntaxTree+SynUnionCaseType: Boolean get_IsUnionCaseFields() -FSharp.Compiler.SyntaxTree+SynUnionCaseType: Boolean get_IsUnionCaseFullType() -FSharp.Compiler.SyntaxTree+SynUnionCaseType: FSharp.Compiler.SyntaxTree+SynUnionCaseType+Tags -FSharp.Compiler.SyntaxTree+SynUnionCaseType: FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFields -FSharp.Compiler.SyntaxTree+SynUnionCaseType: FSharp.Compiler.SyntaxTree+SynUnionCaseType+UnionCaseFullType -FSharp.Compiler.SyntaxTree+SynUnionCaseType: Int32 Tag -FSharp.Compiler.SyntaxTree+SynUnionCaseType: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynUnionCaseType: SynUnionCaseType NewUnionCaseFields(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynField]) -FSharp.Compiler.SyntaxTree+SynUnionCaseType: SynUnionCaseType NewUnionCaseFullType(SynType, SynValInfo) -FSharp.Compiler.SyntaxTree+SynUnionCaseType: System.String ToString() -FSharp.Compiler.SyntaxTree+SynValData: Int32 Tag -FSharp.Compiler.SyntaxTree+SynValData: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynValData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] Item3 -FSharp.Compiler.SyntaxTree+SynValData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] get_Item3() -FSharp.Compiler.SyntaxTree+SynValData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+MemberFlags] Item1 -FSharp.Compiler.SyntaxTree+SynValData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+MemberFlags] get_Item1() -FSharp.Compiler.SyntaxTree+SynValData: SynValData NewSynValData(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+MemberFlags], SynValInfo, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident]) -FSharp.Compiler.SyntaxTree+SynValData: SynValInfo Item2 -FSharp.Compiler.SyntaxTree+SynValData: SynValInfo SynValInfo -FSharp.Compiler.SyntaxTree+SynValData: SynValInfo get_Item2() -FSharp.Compiler.SyntaxTree+SynValData: SynValInfo get_SynValInfo() -FSharp.Compiler.SyntaxTree+SynValData: System.String ToString() -FSharp.Compiler.SyntaxTree+SynValInfo: Int32 Tag -FSharp.Compiler.SyntaxTree+SynValInfo: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] CurriedArgInfos -FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] curriedArgInfos -FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] get_CurriedArgInfos() -FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] get_curriedArgInfos() -FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[System.String] ArgNames -FSharp.Compiler.SyntaxTree+SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_ArgNames() -FSharp.Compiler.SyntaxTree+SynValInfo: SynArgInfo get_returnInfo() -FSharp.Compiler.SyntaxTree+SynValInfo: SynArgInfo returnInfo -FSharp.Compiler.SyntaxTree+SynValInfo: SynValInfo NewSynValInfo(Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]], SynArgInfo) -FSharp.Compiler.SyntaxTree+SynValInfo: System.String ToString() -FSharp.Compiler.SyntaxTree+SynValSig: Boolean get_isInline() -FSharp.Compiler.SyntaxTree+SynValSig: Boolean get_isMutable() -FSharp.Compiler.SyntaxTree+SynValSig: Boolean isInline -FSharp.Compiler.SyntaxTree+SynValSig: Boolean isMutable -FSharp.Compiler.SyntaxTree+SynValSig: Ident get_ident() -FSharp.Compiler.SyntaxTree+SynValSig: Ident ident -FSharp.Compiler.SyntaxTree+SynValSig: Int32 Tag -FSharp.Compiler.SyntaxTree+SynValSig: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynValSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] attributes -FSharp.Compiler.SyntaxTree+SynValSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] get_attributes() -FSharp.Compiler.SyntaxTree+SynValSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] accessibility -FSharp.Compiler.SyntaxTree+SynValSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess] get_accessibility() -FSharp.Compiler.SyntaxTree+SynValSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr] get_synExpr() -FSharp.Compiler.SyntaxTree+SynValSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr] synExpr -FSharp.Compiler.SyntaxTree+SynValSig: PreXmlDoc get_xmlDoc() -FSharp.Compiler.SyntaxTree+SynValSig: PreXmlDoc xmlDoc -FSharp.Compiler.SyntaxTree+SynValSig: SynType SynType -FSharp.Compiler.SyntaxTree+SynValSig: SynType get_SynType() -FSharp.Compiler.SyntaxTree+SynValSig: SynType get_synType() -FSharp.Compiler.SyntaxTree+SynValSig: SynType synType -FSharp.Compiler.SyntaxTree+SynValSig: SynValInfo SynInfo -FSharp.Compiler.SyntaxTree+SynValSig: SynValInfo arity -FSharp.Compiler.SyntaxTree+SynValSig: SynValInfo get_SynInfo() -FSharp.Compiler.SyntaxTree+SynValSig: SynValInfo get_arity() -FSharp.Compiler.SyntaxTree+SynValSig: SynValSig NewValSpfn(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Ident, SynValTyparDecls, SynType, SynValInfo, Boolean, Boolean, PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynExpr], range) -FSharp.Compiler.SyntaxTree+SynValSig: SynValTyparDecls explicitValDecls -FSharp.Compiler.SyntaxTree+SynValSig: SynValTyparDecls get_explicitValDecls() -FSharp.Compiler.SyntaxTree+SynValSig: System.String ToString() -FSharp.Compiler.SyntaxTree+SynValSig: range RangeOfId -FSharp.Compiler.SyntaxTree+SynValSig: range get_RangeOfId() -FSharp.Compiler.SyntaxTree+SynValSig: range get_range() -FSharp.Compiler.SyntaxTree+SynValSig: range range -FSharp.Compiler.SyntaxTree+SynValTyparDecls: Boolean canInfer -FSharp.Compiler.SyntaxTree+SynValTyparDecls: Boolean get_canInfer() -FSharp.Compiler.SyntaxTree+SynValTyparDecls: Int32 Tag -FSharp.Compiler.SyntaxTree+SynValTyparDecls: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+SynValTyparDecls: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTyparDecl] get_typars() -FSharp.Compiler.SyntaxTree+SynValTyparDecls: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTyparDecl] typars -FSharp.Compiler.SyntaxTree+SynValTyparDecls: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeConstraint] constraints -FSharp.Compiler.SyntaxTree+SynValTyparDecls: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeConstraint] get_constraints() -FSharp.Compiler.SyntaxTree+SynValTyparDecls: SynValTyparDecls NewSynValTyparDecls(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTyparDecl], Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynTypeConstraint]) -FSharp.Compiler.SyntaxTree+SynValTyparDecls: System.String ToString() -FSharp.Compiler.SyntaxTree+TyparStaticReq+Tags: Int32 HeadTypeStaticReq -FSharp.Compiler.SyntaxTree+TyparStaticReq+Tags: Int32 NoStaticReq -FSharp.Compiler.SyntaxTree+TyparStaticReq: Boolean Equals(System.Object) -FSharp.Compiler.SyntaxTree+TyparStaticReq: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+TyparStaticReq: Boolean Equals(TyparStaticReq) -FSharp.Compiler.SyntaxTree+TyparStaticReq: Boolean IsHeadTypeStaticReq -FSharp.Compiler.SyntaxTree+TyparStaticReq: Boolean IsNoStaticReq -FSharp.Compiler.SyntaxTree+TyparStaticReq: Boolean get_IsHeadTypeStaticReq() -FSharp.Compiler.SyntaxTree+TyparStaticReq: Boolean get_IsNoStaticReq() -FSharp.Compiler.SyntaxTree+TyparStaticReq: FSharp.Compiler.SyntaxTree+TyparStaticReq+Tags -FSharp.Compiler.SyntaxTree+TyparStaticReq: Int32 CompareTo(System.Object) -FSharp.Compiler.SyntaxTree+TyparStaticReq: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SyntaxTree+TyparStaticReq: Int32 CompareTo(TyparStaticReq) -FSharp.Compiler.SyntaxTree+TyparStaticReq: Int32 GetHashCode() -FSharp.Compiler.SyntaxTree+TyparStaticReq: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SyntaxTree+TyparStaticReq: Int32 Tag -FSharp.Compiler.SyntaxTree+TyparStaticReq: Int32 get_Tag() -FSharp.Compiler.SyntaxTree+TyparStaticReq: System.String ToString() -FSharp.Compiler.SyntaxTree+TyparStaticReq: TyparStaticReq HeadTypeStaticReq -FSharp.Compiler.SyntaxTree+TyparStaticReq: TyparStaticReq NoStaticReq -FSharp.Compiler.SyntaxTree+TyparStaticReq: TyparStaticReq get_HeadTypeStaticReq() -FSharp.Compiler.SyntaxTree+TyparStaticReq: TyparStaticReq get_NoStaticReq() -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+DebugPointAtFinally -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+DebugPointAtFor -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+DebugPointAtSequential -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+DebugPointAtTry -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+DebugPointAtWhile -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+DebugPointAtWith -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+DebugPointForBinding -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+DebugPointForTarget -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ExprAtomicFlag -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+Ident -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+LongIdentWithDots -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+MemberFlags -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+MemberKind -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ParsedFsiInteraction -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ParsedHashDirective -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ParsedImplFile -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ParsedImplFileFragment -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ParsedImplFileInput -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ParsedInput -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ParsedSigFile -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ParsedSigFileFragment -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ParsedSigFileInput -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ParserDetail -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+QualifiedNameOfFile -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+ScopedPragma -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SeqExprOnly -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynAccess -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynArgInfo -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynArgPats -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynAttribute -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynAttributeList -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynBinding -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynBindingKind -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynBindingReturnInfo -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynComponentInfo -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynConst -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynEnumCase -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynExceptionDefn -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynExceptionDefnRepr -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynExceptionSig -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynExpr -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynField -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynIndexerArg -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynInterfaceImpl -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynInterpolatedStringPart -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynMatchClause -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynMeasure -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynMemberDefn -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynMemberSig -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynModuleDecl -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynModuleOrNamespace -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceKind -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynModuleOrNamespaceSig -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynModuleSigDecl -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynOpenDeclTarget -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynPat -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynRationalConst -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynReturnInfo -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynSimplePat -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynSimplePats -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynTypar -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynTyparDecl -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynType -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynTypeConstraint -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynTypeDefn -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynTypeDefnKind -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynTypeDefnRepr -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynTypeDefnSig -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynTypeDefnSigRepr -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynTypeDefnSimpleRepr -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynUnionCase -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynUnionCaseType -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynValData -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynValInfo -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynValSig -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+SynValTyparDecls -FSharp.Compiler.SyntaxTree: FSharp.Compiler.SyntaxTree+TyparStaticReq -FSharp.Compiler.SyntaxTreeOps+SynArgNameGenerator: System.String New() -FSharp.Compiler.SyntaxTreeOps+SynArgNameGenerator: Void .ctor() -FSharp.Compiler.SyntaxTreeOps+SynArgNameGenerator: Void Reset() -FSharp.Compiler.SyntaxTreeOps+SynInfo: Boolean HasNoArgs(SynValInfo) -FSharp.Compiler.SyntaxTreeOps+SynInfo: Boolean HasOptionalArgs(SynValInfo) -FSharp.Compiler.SyntaxTreeOps+SynInfo: Boolean IsOptionalArg(SynArgInfo) -FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo] InferSynArgInfoFromPat(SynPat) -FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo] InferSynArgInfoFromSimplePats(SynSimplePats) -FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo] get_selfMetadata() -FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo] get_unitArgData() -FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo] get_unnamedTopArg() -FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo] selfMetadata -FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo] unitArgData -FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo] unnamedTopArg -FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttribute] AttribsOfArgData(SynArgInfo) -FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] AdjustArgsForUnitElimination(Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]]) -FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynArgInfo]] InferLambdaArgs(SynExpr) -FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[a]] AdjustMemberArgs[a](MemberKind, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[a]]) -FSharp.Compiler.SyntaxTreeOps+SynInfo: Microsoft.FSharp.Collections.FSharpList`1[System.Int32] AritiesOfArgs(SynValInfo) -FSharp.Compiler.SyntaxTreeOps+SynInfo: SynArgInfo InferSynArgInfoFromSimplePat(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], SynSimplePat) -FSharp.Compiler.SyntaxTreeOps+SynInfo: SynArgInfo InferSynReturnData(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynReturnInfo]) -FSharp.Compiler.SyntaxTreeOps+SynInfo: SynArgInfo get_unnamedRetVal() -FSharp.Compiler.SyntaxTreeOps+SynInfo: SynArgInfo get_unnamedTopArg1() -FSharp.Compiler.SyntaxTreeOps+SynInfo: SynArgInfo unnamedRetVal -FSharp.Compiler.SyntaxTreeOps+SynInfo: SynArgInfo unnamedTopArg1 -FSharp.Compiler.SyntaxTreeOps+SynInfo: SynValData InferSynValData(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+MemberFlags], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynPat], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynReturnInfo], SynExpr) -FSharp.Compiler.SyntaxTreeOps+SynInfo: SynValData emptySynValData -FSharp.Compiler.SyntaxTreeOps+SynInfo: SynValData get_emptySynValData() -FSharp.Compiler.SyntaxTreeOps+SynInfo: SynValInfo IncorporateEmptyTupledArgForPropertyGetter(SynValInfo) -FSharp.Compiler.SyntaxTreeOps+SynInfo: SynValInfo IncorporateSelfArg(SynValInfo) -FSharp.Compiler.SyntaxTreeOps+SynInfo: SynValInfo IncorporateSetterArg(SynValInfo) -FSharp.Compiler.SyntaxTreeOps: Boolean IsControlFlowExpression(SynExpr) -FSharp.Compiler.SyntaxTreeOps: Boolean synExprContainsError(SynExpr) -FSharp.Compiler.SyntaxTreeOps: FSharp.Compiler.SyntaxTreeOps+SynArgNameGenerator -FSharp.Compiler.SyntaxTreeOps: FSharp.Compiler.SyntaxTreeOps+SynInfo -FSharp.Compiler.SyntaxTreeOps: Ident ident(System.String, range) -FSharp.Compiler.SyntaxTreeOps: Ident mkSynId(range, System.String) -FSharp.Compiler.SyntaxTreeOps: MemberFlags AbstractMemberFlags(MemberKind) -FSharp.Compiler.SyntaxTreeOps: MemberFlags ClassCtorMemberFlags -FSharp.Compiler.SyntaxTreeOps: MemberFlags CtorMemberFlags -FSharp.Compiler.SyntaxTreeOps: MemberFlags NonVirtualMemberFlags(MemberKind) -FSharp.Compiler.SyntaxTreeOps: MemberFlags OverrideMemberFlags(MemberKind) -FSharp.Compiler.SyntaxTreeOps: MemberFlags StaticMemberFlags(MemberKind) -FSharp.Compiler.SyntaxTreeOps: MemberFlags get_ClassCtorMemberFlags() -FSharp.Compiler.SyntaxTreeOps: MemberFlags get_CtorMemberFlags() -FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] mkSynCaseName(range, System.String) -FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident] pathToSynLid(range, Microsoft.FSharp.Collections.FSharpList`1[System.String]) -FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList] mkAttributeList(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttribute], range) -FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttribute] ConcatAttributesLists(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList]) -FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttribute] |Attributes|(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList]) -FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Collections.FSharpList`1[System.String] pathOfLid(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident]) -FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+Ident] |SingleIdent|_|(SynExpr) -FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynPat] |SynPatForConstructorDecl|_|(SynPat) -FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[a,a]] composeFunOpt[a](Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[a,a]], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[a,a]]) -FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |SynPatForNullaryArgs|_|(SynPat) -FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[FSharp.Compiler.SyntaxTree+SynExpr,FSharp.Compiler.Range+range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Range+range],FSharp.Compiler.Range+range]] |SynExprParen|_|(SynExpr) -FSharp.Compiler.SyntaxTreeOps: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[System.Boolean,FSharp.Compiler.SyntaxTree+LongIdentWithDots,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo]],FSharp.Compiler.Range+range]] |LongOrSingleIdent|_|(SynExpr) -FSharp.Compiler.SyntaxTreeOps: SynBinding mkSynBinding(PreXmlDoc, SynPat, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], Boolean, Boolean, range, DebugPointForBinding, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynReturnInfo], SynExpr, range, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint],FSharp.Compiler.SyntaxTree+SynExpr]], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+MemberFlags]) -FSharp.Compiler.SyntaxTreeOps: SynExpr arbExpr(System.String, range) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynApp1(SynExpr, SynExpr, range) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynApp2(SynExpr, SynExpr, SynExpr, range) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynApp3(SynExpr, SynExpr, SynExpr, SynExpr, range) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynApp4(SynExpr, SynExpr, SynExpr, SynExpr, SynExpr, range) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynApp5(SynExpr, SynExpr, SynExpr, SynExpr, SynExpr, SynExpr, range) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynAssign(SynExpr, SynExpr) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynBifix(range, System.String, SynExpr, SynExpr) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynDelay(range, SynExpr) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynDot(range, range, SynExpr, Ident) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynDotBrackGet(range, range, SynExpr, SynExpr, Boolean) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynDotBrackSeqSliceGet(range, range, SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynIndexerArg]) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynDotBrackSliceGet(range, range, SynExpr, SynIndexerArg) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynDotMissing(range, range, SynExpr) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynDotParenGet(range, range, SynExpr, SynExpr) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynDotParenSet(range, SynExpr, SynExpr, SynExpr) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynFunMatchLambdas(SynArgNameGenerator, Boolean, range, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat], SynExpr) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynIdGet(range, System.String) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynIdGetWithAlt(range, Ident, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.SyntaxTree+SynSimplePatAlternativeIdInfo]]) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynInfix(range, SynExpr, System.String, SynExpr) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynLidGet(range, Microsoft.FSharp.Collections.FSharpList`1[System.String], System.String) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynOperator(range, System.String) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynPrefix(range, range, System.String, SynExpr) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynPrefixPrim(range, range, System.String, SynExpr) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynQMarkSet(range, SynExpr, SynExpr, SynExpr) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynTrifix(range, System.String, SynExpr, SynExpr, SynExpr) -FSharp.Compiler.SyntaxTreeOps: SynExpr mkSynUnit(range) -FSharp.Compiler.SyntaxTreeOps: SynExpr |SynExprErrorSkip|(SynExpr) -FSharp.Compiler.SyntaxTreeOps: SynField mkAnonField(SynType) -FSharp.Compiler.SyntaxTreeOps: SynField mkNamedField(Ident, SynType, range) -FSharp.Compiler.SyntaxTreeOps: SynPat mkSynPatMaybeVar(LongIdentWithDots, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], range) -FSharp.Compiler.SyntaxTreeOps: SynPat mkSynPatVar(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynAccess], Ident) -FSharp.Compiler.SyntaxTreeOps: SynPat mkSynThisPatVar(Ident) -FSharp.Compiler.SyntaxTreeOps: SynPat mkSynUnitPat(range) -FSharp.Compiler.SyntaxTreeOps: SynPat |SynPatErrorSkip|(SynPat) -FSharp.Compiler.SyntaxTreeOps: SynSimplePat mkSynCompGenSimplePatVar(Ident) -FSharp.Compiler.SyntaxTreeOps: SynSimplePat mkSynSimplePatVar(Boolean, Ident) -FSharp.Compiler.SyntaxTreeOps: SynType stripParenTypes(SynType) -FSharp.Compiler.SyntaxTreeOps: SynType |StripParenTypes|(SynType) -FSharp.Compiler.SyntaxTreeOps: SynValTyparDecls get_inferredTyparDecls() -FSharp.Compiler.SyntaxTreeOps: SynValTyparDecls get_noInferredTypars() -FSharp.Compiler.SyntaxTreeOps: SynValTyparDecls inferredTyparDecls -FSharp.Compiler.SyntaxTreeOps: SynValTyparDecls noInferredTypars -FSharp.Compiler.SyntaxTreeOps: System.String get_opNameParenGet() -FSharp.Compiler.SyntaxTreeOps: System.String get_opNameQMark() -FSharp.Compiler.SyntaxTreeOps: System.String opNameParenGet -FSharp.Compiler.SyntaxTreeOps: System.String opNameQMark -FSharp.Compiler.SyntaxTreeOps: System.String textOfId(Ident) -FSharp.Compiler.SyntaxTreeOps: System.String textOfLid(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident]) -FSharp.Compiler.SyntaxTreeOps: System.String textOfPath(System.Collections.Generic.IEnumerable`1[System.String]) -FSharp.Compiler.SyntaxTreeOps: System.String[] arrPathOfLid(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident]) -FSharp.Compiler.SyntaxTreeOps: System.Tuple`2[FSharp.Compiler.SyntaxTree+SynExpr,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynBindingReturnInfo]] mkSynBindingRhs(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynStaticOptimizationConstraint],FSharp.Compiler.SyntaxTree+SynExpr]], SynExpr, range, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTree+SynReturnInfo]) -FSharp.Compiler.SyntaxTreeOps: System.Tuple`2[FSharp.Compiler.SyntaxTree+SynSimplePat,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynExpr,FSharp.Compiler.SyntaxTree+SynExpr]]] SimplePatOfPat(SynArgNameGenerator, SynPat) -FSharp.Compiler.SyntaxTreeOps: System.Tuple`2[FSharp.Compiler.SyntaxTree+SynSimplePats,FSharp.Compiler.SyntaxTree+SynExpr] PushPatternToExpr(SynArgNameGenerator, Boolean, SynPat, SynExpr) -FSharp.Compiler.SyntaxTreeOps: System.Tuple`2[FSharp.Compiler.SyntaxTree+SynSimplePats,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.SyntaxTree+SynExpr,FSharp.Compiler.SyntaxTree+SynExpr]]] SimplePatsOfPat(SynArgNameGenerator, SynPat) -FSharp.Compiler.SyntaxTreeOps: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynSimplePats],FSharp.Compiler.SyntaxTree+SynExpr] PushCurriedPatternsToExpr(SynArgNameGenerator, range, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynPat], SynExpr) -FSharp.Compiler.SyntaxTreeOps: a appFunOpt[a](Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[a,a]], a) -FSharp.Compiler.SyntaxTreeOps: range rangeOfLid(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+Ident]) -FSharp.Compiler.SyntaxTreeOps: range rangeOfNonNilAttrs(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTree+SynAttributeList]) -FSharp.Compiler.SyntaxTreeOps: range unionRangeWithListBy[a](Microsoft.FSharp.Core.FSharpFunc`2[a,FSharp.Compiler.Range+range], range, Microsoft.FSharp.Collections.FSharpList`1[a]) +FSharp.Compiler.Symbols.FSharpAbstractParameter +FSharp.Compiler.Symbols.FSharpAbstractParameter: Boolean IsInArg +FSharp.Compiler.Symbols.FSharpAbstractParameter: Boolean IsOptionalArg +FSharp.Compiler.Symbols.FSharpAbstractParameter: Boolean IsOutArg +FSharp.Compiler.Symbols.FSharpAbstractParameter: Boolean get_IsInArg() +FSharp.Compiler.Symbols.FSharpAbstractParameter: Boolean get_IsOptionalArg() +FSharp.Compiler.Symbols.FSharpAbstractParameter: Boolean get_IsOutArg() +FSharp.Compiler.Symbols.FSharpAbstractParameter: FSharp.Compiler.Symbols.FSharpType Type +FSharp.Compiler.Symbols.FSharpAbstractParameter: FSharp.Compiler.Symbols.FSharpType get_Type() +FSharp.Compiler.Symbols.FSharpAbstractParameter: Microsoft.FSharp.Core.FSharpOption`1[System.String] Name +FSharp.Compiler.Symbols.FSharpAbstractParameter: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Name() +FSharp.Compiler.Symbols.FSharpAbstractParameter: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] Attributes +FSharp.Compiler.Symbols.FSharpAbstractParameter: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] get_Attributes() +FSharp.Compiler.Symbols.FSharpAbstractSignature +FSharp.Compiler.Symbols.FSharpAbstractSignature: FSharp.Compiler.Symbols.FSharpType AbstractReturnType +FSharp.Compiler.Symbols.FSharpAbstractSignature: FSharp.Compiler.Symbols.FSharpType DeclaringType +FSharp.Compiler.Symbols.FSharpAbstractSignature: FSharp.Compiler.Symbols.FSharpType get_AbstractReturnType() +FSharp.Compiler.Symbols.FSharpAbstractSignature: FSharp.Compiler.Symbols.FSharpType get_DeclaringType() +FSharp.Compiler.Symbols.FSharpAbstractSignature: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpGenericParameter] DeclaringTypeGenericParameters +FSharp.Compiler.Symbols.FSharpAbstractSignature: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpGenericParameter] MethodGenericParameters +FSharp.Compiler.Symbols.FSharpAbstractSignature: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpGenericParameter] get_DeclaringTypeGenericParameters() +FSharp.Compiler.Symbols.FSharpAbstractSignature: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpGenericParameter] get_MethodGenericParameters() +FSharp.Compiler.Symbols.FSharpAbstractSignature: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAbstractParameter]] AbstractArguments +FSharp.Compiler.Symbols.FSharpAbstractSignature: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAbstractParameter]] get_AbstractArguments() +FSharp.Compiler.Symbols.FSharpAbstractSignature: System.String Name +FSharp.Compiler.Symbols.FSharpAbstractSignature: System.String get_Name() +FSharp.Compiler.Symbols.FSharpAccessibility +FSharp.Compiler.Symbols.FSharpAccessibility: Boolean IsInternal +FSharp.Compiler.Symbols.FSharpAccessibility: Boolean IsPrivate +FSharp.Compiler.Symbols.FSharpAccessibility: Boolean IsProtected +FSharp.Compiler.Symbols.FSharpAccessibility: Boolean IsPublic +FSharp.Compiler.Symbols.FSharpAccessibility: Boolean get_IsInternal() +FSharp.Compiler.Symbols.FSharpAccessibility: Boolean get_IsPrivate() +FSharp.Compiler.Symbols.FSharpAccessibility: Boolean get_IsProtected() +FSharp.Compiler.Symbols.FSharpAccessibility: Boolean get_IsPublic() +FSharp.Compiler.Symbols.FSharpAccessibility: System.String ToString() +FSharp.Compiler.Symbols.FSharpAccessibilityRights +FSharp.Compiler.Symbols.FSharpActivePatternCase +FSharp.Compiler.Symbols.FSharpActivePatternCase: FSharp.Compiler.Symbols.FSharpActivePatternGroup Group +FSharp.Compiler.Symbols.FSharpActivePatternCase: FSharp.Compiler.Symbols.FSharpActivePatternGroup get_Group() +FSharp.Compiler.Symbols.FSharpActivePatternCase: FSharp.Compiler.Symbols.FSharpXmlDoc XmlDoc +FSharp.Compiler.Symbols.FSharpActivePatternCase: FSharp.Compiler.Symbols.FSharpXmlDoc get_XmlDoc() +FSharp.Compiler.Symbols.FSharpActivePatternCase: FSharp.Compiler.Text.Range DeclarationLocation +FSharp.Compiler.Symbols.FSharpActivePatternCase: FSharp.Compiler.Text.Range get_DeclarationLocation() +FSharp.Compiler.Symbols.FSharpActivePatternCase: Int32 Index +FSharp.Compiler.Symbols.FSharpActivePatternCase: Int32 get_Index() +FSharp.Compiler.Symbols.FSharpActivePatternCase: System.String Name +FSharp.Compiler.Symbols.FSharpActivePatternCase: System.String XmlDocSig +FSharp.Compiler.Symbols.FSharpActivePatternCase: System.String get_Name() +FSharp.Compiler.Symbols.FSharpActivePatternCase: System.String get_XmlDocSig() +FSharp.Compiler.Symbols.FSharpActivePatternGroup +FSharp.Compiler.Symbols.FSharpActivePatternGroup: Boolean IsTotal +FSharp.Compiler.Symbols.FSharpActivePatternGroup: Boolean get_IsTotal() +FSharp.Compiler.Symbols.FSharpActivePatternGroup: FSharp.Compiler.Symbols.FSharpType OverallType +FSharp.Compiler.Symbols.FSharpActivePatternGroup: FSharp.Compiler.Symbols.FSharpType get_OverallType() +FSharp.Compiler.Symbols.FSharpActivePatternGroup: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] DeclaringEntity +FSharp.Compiler.Symbols.FSharpActivePatternGroup: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] get_DeclaringEntity() +FSharp.Compiler.Symbols.FSharpActivePatternGroup: Microsoft.FSharp.Core.FSharpOption`1[System.String] Name +FSharp.Compiler.Symbols.FSharpActivePatternGroup: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Name() +FSharp.Compiler.Symbols.FSharpActivePatternGroup: System.Collections.Generic.IList`1[System.String] Names +FSharp.Compiler.Symbols.FSharpActivePatternGroup: System.Collections.Generic.IList`1[System.String] get_Names() +FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails +FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails: FSharp.Compiler.Symbols.FSharpAssembly Assembly +FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails: FSharp.Compiler.Symbols.FSharpAssembly get_Assembly() +FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails: Microsoft.FSharp.Collections.FSharpList`1[System.String] EnclosingCompiledTypeNames +FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_EnclosingCompiledTypeNames() +FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails: System.String CompiledName +FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails: System.String get_CompiledName() +FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails: System.String[] SortedFieldNames +FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails: System.String[] get_SortedFieldNames() +FSharp.Compiler.Symbols.FSharpAssembly +FSharp.Compiler.Symbols.FSharpAssembly: Boolean IsProviderGenerated +FSharp.Compiler.Symbols.FSharpAssembly: Boolean get_IsProviderGenerated() +FSharp.Compiler.Symbols.FSharpAssembly: FSharp.Compiler.Symbols.FSharpAssemblySignature Contents +FSharp.Compiler.Symbols.FSharpAssembly: FSharp.Compiler.Symbols.FSharpAssemblySignature get_Contents() +FSharp.Compiler.Symbols.FSharpAssembly: Microsoft.FSharp.Core.FSharpOption`1[System.String] FileName +FSharp.Compiler.Symbols.FSharpAssembly: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_FileName() +FSharp.Compiler.Symbols.FSharpAssembly: System.String QualifiedName +FSharp.Compiler.Symbols.FSharpAssembly: System.String SimpleName +FSharp.Compiler.Symbols.FSharpAssembly: System.String ToString() +FSharp.Compiler.Symbols.FSharpAssembly: System.String get_QualifiedName() +FSharp.Compiler.Symbols.FSharpAssembly: System.String get_SimpleName() +FSharp.Compiler.Symbols.FSharpAssemblyContents +FSharp.Compiler.Symbols.FSharpAssemblyContents: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpImplementationFileContents] ImplementationFiles +FSharp.Compiler.Symbols.FSharpAssemblyContents: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpImplementationFileContents] get_ImplementationFiles() +FSharp.Compiler.Symbols.FSharpAssemblySignature +FSharp.Compiler.Symbols.FSharpAssemblySignature: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] FindEntityByPath(Microsoft.FSharp.Collections.FSharpList`1[System.String]) +FSharp.Compiler.Symbols.FSharpAssemblySignature: System.Collections.Generic.IEnumerable`1[FSharp.Compiler.Symbols.FSharpEntity] TryGetEntities() +FSharp.Compiler.Symbols.FSharpAssemblySignature: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] Attributes +FSharp.Compiler.Symbols.FSharpAssemblySignature: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] get_Attributes() +FSharp.Compiler.Symbols.FSharpAssemblySignature: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpEntity] Entities +FSharp.Compiler.Symbols.FSharpAssemblySignature: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpEntity] get_Entities() +FSharp.Compiler.Symbols.FSharpAssemblySignature: System.String ToString() +FSharp.Compiler.Symbols.FSharpAttribute +FSharp.Compiler.Symbols.FSharpAttribute: Boolean IsAttribute[T]() +FSharp.Compiler.Symbols.FSharpAttribute: Boolean IsUnresolved +FSharp.Compiler.Symbols.FSharpAttribute: Boolean get_IsUnresolved() +FSharp.Compiler.Symbols.FSharpAttribute: FSharp.Compiler.Symbols.FSharpEntity AttributeType +FSharp.Compiler.Symbols.FSharpAttribute: FSharp.Compiler.Symbols.FSharpEntity get_AttributeType() +FSharp.Compiler.Symbols.FSharpAttribute: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Symbols.FSharpAttribute: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Symbols.FSharpAttribute: System.Collections.Generic.IList`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpType,System.Object]] ConstructorArguments +FSharp.Compiler.Symbols.FSharpAttribute: System.Collections.Generic.IList`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpType,System.Object]] get_ConstructorArguments() +FSharp.Compiler.Symbols.FSharpAttribute: System.Collections.Generic.IList`1[System.Tuple`4[FSharp.Compiler.Symbols.FSharpType,System.String,System.Boolean,System.Object]] NamedArguments +FSharp.Compiler.Symbols.FSharpAttribute: System.Collections.Generic.IList`1[System.Tuple`4[FSharp.Compiler.Symbols.FSharpType,System.String,System.Boolean,System.Object]] get_NamedArguments() +FSharp.Compiler.Symbols.FSharpAttribute: System.String Format(FSharp.Compiler.Symbols.FSharpDisplayContext) +FSharp.Compiler.Symbols.FSharpAttribute: System.String ToString() +FSharp.Compiler.Symbols.FSharpDelegateSignature +FSharp.Compiler.Symbols.FSharpDelegateSignature: FSharp.Compiler.Symbols.FSharpType DelegateReturnType +FSharp.Compiler.Symbols.FSharpDelegateSignature: FSharp.Compiler.Symbols.FSharpType get_DelegateReturnType() +FSharp.Compiler.Symbols.FSharpDelegateSignature: System.Collections.Generic.IList`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[System.String],FSharp.Compiler.Symbols.FSharpType]] DelegateArguments +FSharp.Compiler.Symbols.FSharpDelegateSignature: System.Collections.Generic.IList`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[System.String],FSharp.Compiler.Symbols.FSharpType]] get_DelegateArguments() +FSharp.Compiler.Symbols.FSharpDelegateSignature: System.String ToString() +FSharp.Compiler.Symbols.FSharpDisplayContext +FSharp.Compiler.Symbols.FSharpDisplayContext: FSharp.Compiler.Symbols.FSharpDisplayContext Empty +FSharp.Compiler.Symbols.FSharpDisplayContext: FSharp.Compiler.Symbols.FSharpDisplayContext WithPrefixGenericParameters() +FSharp.Compiler.Symbols.FSharpDisplayContext: FSharp.Compiler.Symbols.FSharpDisplayContext WithShortTypeNames(Boolean) +FSharp.Compiler.Symbols.FSharpDisplayContext: FSharp.Compiler.Symbols.FSharpDisplayContext WithSuffixGenericParameters() +FSharp.Compiler.Symbols.FSharpDisplayContext: FSharp.Compiler.Symbols.FSharpDisplayContext get_Empty() +FSharp.Compiler.Symbols.FSharpEntity +FSharp.Compiler.Symbols.FSharpEntity: Boolean Equals(System.Object) +FSharp.Compiler.Symbols.FSharpEntity: Boolean HasAssemblyCodeRepresentation +FSharp.Compiler.Symbols.FSharpEntity: Boolean HasFSharpModuleSuffix +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsAbstractClass +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsArrayType +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsAttributeType +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsByRef +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsClass +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsDelegate +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsEnum +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsFSharp +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsFSharpAbbreviation +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsFSharpExceptionDeclaration +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsFSharpModule +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsFSharpRecord +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsFSharpUnion +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsInterface +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsMeasure +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsNamespace +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsOpaque +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsProvided +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsProvidedAndErased +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsProvidedAndGenerated +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsStaticInstantiation +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsUnresolved +FSharp.Compiler.Symbols.FSharpEntity: Boolean IsValueType +FSharp.Compiler.Symbols.FSharpEntity: Boolean UsesPrefixDisplay +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_HasAssemblyCodeRepresentation() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_HasFSharpModuleSuffix() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsAbstractClass() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsArrayType() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsAttributeType() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsByRef() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsClass() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsDelegate() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsEnum() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsFSharp() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsFSharpAbbreviation() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsFSharpExceptionDeclaration() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsFSharpModule() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsFSharpRecord() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsFSharpUnion() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsInterface() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsMeasure() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsNamespace() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsOpaque() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsProvided() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsProvidedAndErased() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsProvidedAndGenerated() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsStaticInstantiation() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsUnresolved() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_IsValueType() +FSharp.Compiler.Symbols.FSharpEntity: Boolean get_UsesPrefixDisplay() +FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Symbols.FSharpAccessibility Accessibility +FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Symbols.FSharpAccessibility RepresentationAccessibility +FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Symbols.FSharpAccessibility get_Accessibility() +FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Symbols.FSharpAccessibility get_RepresentationAccessibility() +FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Symbols.FSharpDelegateSignature FSharpDelegateSignature +FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Symbols.FSharpDelegateSignature get_FSharpDelegateSignature() +FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Symbols.FSharpType AbbreviatedType +FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Symbols.FSharpType get_AbbreviatedType() +FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Symbols.FSharpXmlDoc XmlDoc +FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Symbols.FSharpXmlDoc get_XmlDoc() +FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Text.Range DeclarationLocation +FSharp.Compiler.Symbols.FSharpEntity: FSharp.Compiler.Text.Range get_DeclarationLocation() +FSharp.Compiler.Symbols.FSharpEntity: Int32 ArrayRank +FSharp.Compiler.Symbols.FSharpEntity: Int32 GetHashCode() +FSharp.Compiler.Symbols.FSharpEntity: Int32 get_ArrayRank() +FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpActivePatternCase] ActivePatternCases +FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpActivePatternCase] get_ActivePatternCases() +FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Collections.FSharpList`1[System.String] AllCompilationPaths +FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_AllCompilationPaths() +FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] DeclaringEntity +FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] get_DeclaringEntity() +FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType] BaseType +FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType] get_BaseType() +FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.ISourceText] TryGetMetadataText() +FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] Namespace +FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] TryFullName +FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] TryGetFullCompiledName() +FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] TryGetFullDisplayName() +FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] TryGetFullName() +FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Namespace() +FSharp.Compiler.Symbols.FSharpEntity: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_TryFullName() +FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IEnumerable`1[FSharp.Compiler.Symbols.FSharpEntity] GetPublicNestedEntities() +FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] Attributes +FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] get_Attributes() +FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpEntity] NestedEntities +FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpEntity] get_NestedEntities() +FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpField] FSharpFields +FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpField] get_FSharpFields() +FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpGenericParameter] GenericParameters +FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpGenericParameter] get_GenericParameters() +FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue] MembersFunctionsAndValues +FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue] TryGetMembersFunctionsAndValues() +FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue] get_MembersFunctionsAndValues() +FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpStaticParameter] StaticParameters +FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpStaticParameter] get_StaticParameters() +FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] AllInterfaces +FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] DeclaredInterfaces +FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] get_AllInterfaces() +FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] get_DeclaredInterfaces() +FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpUnionCase] UnionCases +FSharp.Compiler.Symbols.FSharpEntity: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpUnionCase] get_UnionCases() +FSharp.Compiler.Symbols.FSharpEntity: System.String AccessPath +FSharp.Compiler.Symbols.FSharpEntity: System.String CompiledName +FSharp.Compiler.Symbols.FSharpEntity: System.String DisplayName +FSharp.Compiler.Symbols.FSharpEntity: System.String FullName +FSharp.Compiler.Symbols.FSharpEntity: System.String LogicalName +FSharp.Compiler.Symbols.FSharpEntity: System.String QualifiedName +FSharp.Compiler.Symbols.FSharpEntity: System.String ToString() +FSharp.Compiler.Symbols.FSharpEntity: System.String XmlDocSig +FSharp.Compiler.Symbols.FSharpEntity: System.String get_AccessPath() +FSharp.Compiler.Symbols.FSharpEntity: System.String get_CompiledName() +FSharp.Compiler.Symbols.FSharpEntity: System.String get_DisplayName() +FSharp.Compiler.Symbols.FSharpEntity: System.String get_FullName() +FSharp.Compiler.Symbols.FSharpEntity: System.String get_LogicalName() +FSharp.Compiler.Symbols.FSharpEntity: System.String get_QualifiedName() +FSharp.Compiler.Symbols.FSharpEntity: System.String get_XmlDocSig() +FSharp.Compiler.Symbols.FSharpExpr +FSharp.Compiler.Symbols.FSharpExpr: FSharp.Compiler.Symbols.FSharpType Type +FSharp.Compiler.Symbols.FSharpExpr: FSharp.Compiler.Symbols.FSharpType get_Type() +FSharp.Compiler.Symbols.FSharpExpr: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Symbols.FSharpExpr: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Symbols.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr] ImmediateSubExpressions +FSharp.Compiler.Symbols.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr] get_ImmediateSubExpressions() +FSharp.Compiler.Symbols.FSharpExpr: System.String ToString() +FSharp.Compiler.Symbols.FSharpExprPatterns +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpExpr] |AddressOf|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpExpr] |Quote|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue] |Value|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType] |BaseValue|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType] |DefaultValue|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType] |ThisValue|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] |WitnessArg|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpExpr]] |AddressSet|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpExpr]] |Sequential|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpExpr]] |TryFinally|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpExpr]] |WhileLoop|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpType]] |UnionCaseTag|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpExpr,Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue],FSharp.Compiler.Symbols.FSharpExpr]]]] |DecisionTree|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue,FSharp.Compiler.Symbols.FSharpExpr]] |Lambda|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue,FSharp.Compiler.Symbols.FSharpExpr]] |ValueSet|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpType,FSharp.Compiler.Symbols.FSharpExpr]] |Coerce|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpType,FSharp.Compiler.Symbols.FSharpExpr]] |NewDelegate|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpType,FSharp.Compiler.Symbols.FSharpExpr]] |TypeTest|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpType,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |NewAnonRecord|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpType,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |NewArray|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpType,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |NewRecord|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpType,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |NewTuple|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpGenericParameter],FSharp.Compiler.Symbols.FSharpExpr]] |TypeLambda|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue,FSharp.Compiler.Symbols.FSharpExpr]],FSharp.Compiler.Symbols.FSharpExpr]] |LetRec|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Int32,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |DecisionTreeSuccess|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Object,FSharp.Compiler.Symbols.FSharpType]] |Const|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Tuple`2[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue,FSharp.Compiler.Symbols.FSharpExpr],FSharp.Compiler.Symbols.FSharpExpr]] |Let|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpExpr]] |IfThenElse|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpType,FSharp.Compiler.Symbols.FSharpUnionCase]] |UnionCaseTest|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpType,System.Int32]] |AnonRecordGet|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.Symbols.FSharpExpr,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |Application|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |NewObject|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.Symbols.FSharpType,FSharp.Compiler.Symbols.FSharpUnionCase,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |NewUnionCase|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.Symbols.FSharpType,System.Int32,FSharp.Compiler.Symbols.FSharpExpr]] |TupleGet|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpExpr],FSharp.Compiler.Symbols.FSharpType,FSharp.Compiler.Symbols.FSharpField]] |FSharpFieldGet|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpExpr],FSharp.Compiler.Symbols.FSharpType,System.String]] |ILFieldGet|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.String,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |ILAsm|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpExpr,System.Boolean]] |FastIntegerForLoop|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpType,FSharp.Compiler.Symbols.FSharpUnionCase,FSharp.Compiler.Symbols.FSharpField]] |UnionCaseGet|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[FSharp.Compiler.Symbols.FSharpType,FSharp.Compiler.Symbols.FSharpExpr,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpObjectExprOverride],Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpType,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpObjectExprOverride]]]]] |ObjectExpr|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpExpr],FSharp.Compiler.Symbols.FSharpType,FSharp.Compiler.Symbols.FSharpField,FSharp.Compiler.Symbols.FSharpExpr]] |FSharpFieldSet|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpExpr],FSharp.Compiler.Symbols.FSharpType,System.String,FSharp.Compiler.Symbols.FSharpExpr]] |ILFieldSet|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue,FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue,FSharp.Compiler.Symbols.FSharpExpr]] |TryWith|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.Symbols.FSharpExpr,FSharp.Compiler.Symbols.FSharpType,FSharp.Compiler.Symbols.FSharpUnionCase,FSharp.Compiler.Symbols.FSharpField,FSharp.Compiler.Symbols.FSharpExpr]] |UnionCaseSet|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpExpr],FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |Call|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`6[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType],System.String,FSharp.Compiler.Syntax.SynMemberFlags,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |TraitCall|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpExprPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`6[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpExpr],FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue,Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr],Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpExpr]]] |CallWithWitnesses|_|(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpField +FSharp.Compiler.Symbols.FSharpField: Boolean Equals(System.Object) +FSharp.Compiler.Symbols.FSharpField: Boolean IsAnonRecordField +FSharp.Compiler.Symbols.FSharpField: Boolean IsCompilerGenerated +FSharp.Compiler.Symbols.FSharpField: Boolean IsDefaultValue +FSharp.Compiler.Symbols.FSharpField: Boolean IsLiteral +FSharp.Compiler.Symbols.FSharpField: Boolean IsMutable +FSharp.Compiler.Symbols.FSharpField: Boolean IsNameGenerated +FSharp.Compiler.Symbols.FSharpField: Boolean IsStatic +FSharp.Compiler.Symbols.FSharpField: Boolean IsUnionCaseField +FSharp.Compiler.Symbols.FSharpField: Boolean IsUnresolved +FSharp.Compiler.Symbols.FSharpField: Boolean IsVolatile +FSharp.Compiler.Symbols.FSharpField: Boolean get_IsAnonRecordField() +FSharp.Compiler.Symbols.FSharpField: Boolean get_IsCompilerGenerated() +FSharp.Compiler.Symbols.FSharpField: Boolean get_IsDefaultValue() +FSharp.Compiler.Symbols.FSharpField: Boolean get_IsLiteral() +FSharp.Compiler.Symbols.FSharpField: Boolean get_IsMutable() +FSharp.Compiler.Symbols.FSharpField: Boolean get_IsNameGenerated() +FSharp.Compiler.Symbols.FSharpField: Boolean get_IsStatic() +FSharp.Compiler.Symbols.FSharpField: Boolean get_IsUnionCaseField() +FSharp.Compiler.Symbols.FSharpField: Boolean get_IsUnresolved() +FSharp.Compiler.Symbols.FSharpField: Boolean get_IsVolatile() +FSharp.Compiler.Symbols.FSharpField: FSharp.Compiler.Symbols.FSharpAccessibility Accessibility +FSharp.Compiler.Symbols.FSharpField: FSharp.Compiler.Symbols.FSharpAccessibility get_Accessibility() +FSharp.Compiler.Symbols.FSharpField: FSharp.Compiler.Symbols.FSharpType FieldType +FSharp.Compiler.Symbols.FSharpField: FSharp.Compiler.Symbols.FSharpType get_FieldType() +FSharp.Compiler.Symbols.FSharpField: FSharp.Compiler.Symbols.FSharpXmlDoc XmlDoc +FSharp.Compiler.Symbols.FSharpField: FSharp.Compiler.Symbols.FSharpXmlDoc get_XmlDoc() +FSharp.Compiler.Symbols.FSharpField: FSharp.Compiler.Text.Range DeclarationLocation +FSharp.Compiler.Symbols.FSharpField: FSharp.Compiler.Text.Range get_DeclarationLocation() +FSharp.Compiler.Symbols.FSharpField: Int32 GetHashCode() +FSharp.Compiler.Symbols.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] DeclaringEntity +FSharp.Compiler.Symbols.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] get_DeclaringEntity() +FSharp.Compiler.Symbols.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpUnionCase] DeclaringUnionCase +FSharp.Compiler.Symbols.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpUnionCase] get_DeclaringUnionCase() +FSharp.Compiler.Symbols.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[System.Object] LiteralValue +FSharp.Compiler.Symbols.FSharpField: Microsoft.FSharp.Core.FSharpOption`1[System.Object] get_LiteralValue() +FSharp.Compiler.Symbols.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] FieldAttributes +FSharp.Compiler.Symbols.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] PropertyAttributes +FSharp.Compiler.Symbols.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] get_FieldAttributes() +FSharp.Compiler.Symbols.FSharpField: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] get_PropertyAttributes() +FSharp.Compiler.Symbols.FSharpField: System.String Name +FSharp.Compiler.Symbols.FSharpField: System.String ToString() +FSharp.Compiler.Symbols.FSharpField: System.String XmlDocSig +FSharp.Compiler.Symbols.FSharpField: System.String get_Name() +FSharp.Compiler.Symbols.FSharpField: System.String get_XmlDocSig() +FSharp.Compiler.Symbols.FSharpField: System.Tuple`3[FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails,FSharp.Compiler.Symbols.FSharpType[],System.Int32] AnonRecordFieldDetails +FSharp.Compiler.Symbols.FSharpField: System.Tuple`3[FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails,FSharp.Compiler.Symbols.FSharpType[],System.Int32] get_AnonRecordFieldDetails() +FSharp.Compiler.Symbols.FSharpGenericParameter +FSharp.Compiler.Symbols.FSharpGenericParameter: Boolean Equals(System.Object) +FSharp.Compiler.Symbols.FSharpGenericParameter: Boolean IsCompilerGenerated +FSharp.Compiler.Symbols.FSharpGenericParameter: Boolean IsMeasure +FSharp.Compiler.Symbols.FSharpGenericParameter: Boolean IsSolveAtCompileTime +FSharp.Compiler.Symbols.FSharpGenericParameter: Boolean get_IsCompilerGenerated() +FSharp.Compiler.Symbols.FSharpGenericParameter: Boolean get_IsMeasure() +FSharp.Compiler.Symbols.FSharpGenericParameter: Boolean get_IsSolveAtCompileTime() +FSharp.Compiler.Symbols.FSharpGenericParameter: FSharp.Compiler.Symbols.FSharpXmlDoc XmlDoc +FSharp.Compiler.Symbols.FSharpGenericParameter: FSharp.Compiler.Symbols.FSharpXmlDoc get_XmlDoc() +FSharp.Compiler.Symbols.FSharpGenericParameter: FSharp.Compiler.Text.Range DeclarationLocation +FSharp.Compiler.Symbols.FSharpGenericParameter: FSharp.Compiler.Text.Range get_DeclarationLocation() +FSharp.Compiler.Symbols.FSharpGenericParameter: Int32 GetHashCode() +FSharp.Compiler.Symbols.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] Attributes +FSharp.Compiler.Symbols.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] get_Attributes() +FSharp.Compiler.Symbols.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpGenericParameterConstraint] Constraints +FSharp.Compiler.Symbols.FSharpGenericParameter: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpGenericParameterConstraint] get_Constraints() +FSharp.Compiler.Symbols.FSharpGenericParameter: System.String Name +FSharp.Compiler.Symbols.FSharpGenericParameter: System.String ToString() +FSharp.Compiler.Symbols.FSharpGenericParameter: System.String get_Name() +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsCoercesToConstraint +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsComparisonConstraint +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsDefaultsToConstraint +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsDelegateConstraint +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsEnumConstraint +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsEqualityConstraint +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsMemberConstraint +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsNonNullableValueTypeConstraint +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsReferenceTypeConstraint +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsRequiresDefaultConstructorConstraint +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsSimpleChoiceConstraint +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsSupportsNullConstraint +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean IsUnmanagedConstraint +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsCoercesToConstraint() +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsComparisonConstraint() +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsDefaultsToConstraint() +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsDelegateConstraint() +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsEnumConstraint() +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsEqualityConstraint() +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsMemberConstraint() +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsNonNullableValueTypeConstraint() +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsReferenceTypeConstraint() +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsRequiresDefaultConstructorConstraint() +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsSimpleChoiceConstraint() +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsSupportsNullConstraint() +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: Boolean get_IsUnmanagedConstraint() +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: FSharp.Compiler.Symbols.FSharpGenericParameterDefaultsToConstraint DefaultsToConstraintData +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: FSharp.Compiler.Symbols.FSharpGenericParameterDefaultsToConstraint get_DefaultsToConstraintData() +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: FSharp.Compiler.Symbols.FSharpGenericParameterDelegateConstraint DelegateConstraintData +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: FSharp.Compiler.Symbols.FSharpGenericParameterDelegateConstraint get_DelegateConstraintData() +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint MemberConstraintData +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint get_MemberConstraintData() +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: FSharp.Compiler.Symbols.FSharpType CoercesToTarget +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: FSharp.Compiler.Symbols.FSharpType EnumConstraintTarget +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: FSharp.Compiler.Symbols.FSharpType get_CoercesToTarget() +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: FSharp.Compiler.Symbols.FSharpType get_EnumConstraintTarget() +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] SimpleChoices +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] get_SimpleChoices() +FSharp.Compiler.Symbols.FSharpGenericParameterConstraint: System.String ToString() +FSharp.Compiler.Symbols.FSharpGenericParameterDefaultsToConstraint +FSharp.Compiler.Symbols.FSharpGenericParameterDefaultsToConstraint: FSharp.Compiler.Symbols.FSharpType DefaultsToTarget +FSharp.Compiler.Symbols.FSharpGenericParameterDefaultsToConstraint: FSharp.Compiler.Symbols.FSharpType get_DefaultsToTarget() +FSharp.Compiler.Symbols.FSharpGenericParameterDefaultsToConstraint: Int32 DefaultsToPriority +FSharp.Compiler.Symbols.FSharpGenericParameterDefaultsToConstraint: Int32 get_DefaultsToPriority() +FSharp.Compiler.Symbols.FSharpGenericParameterDefaultsToConstraint: System.String ToString() +FSharp.Compiler.Symbols.FSharpGenericParameterDelegateConstraint +FSharp.Compiler.Symbols.FSharpGenericParameterDelegateConstraint: FSharp.Compiler.Symbols.FSharpType DelegateReturnType +FSharp.Compiler.Symbols.FSharpGenericParameterDelegateConstraint: FSharp.Compiler.Symbols.FSharpType DelegateTupledArgumentType +FSharp.Compiler.Symbols.FSharpGenericParameterDelegateConstraint: FSharp.Compiler.Symbols.FSharpType get_DelegateReturnType() +FSharp.Compiler.Symbols.FSharpGenericParameterDelegateConstraint: FSharp.Compiler.Symbols.FSharpType get_DelegateTupledArgumentType() +FSharp.Compiler.Symbols.FSharpGenericParameterDelegateConstraint: System.String ToString() +FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint +FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: Boolean MemberIsStatic +FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: Boolean get_MemberIsStatic() +FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: FSharp.Compiler.Symbols.FSharpType MemberReturnType +FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: FSharp.Compiler.Symbols.FSharpType get_MemberReturnType() +FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] MemberArgumentTypes +FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] MemberSources +FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] get_MemberArgumentTypes() +FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] get_MemberSources() +FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: System.String MemberName +FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: System.String ToString() +FSharp.Compiler.Symbols.FSharpGenericParameterMemberConstraint: System.String get_MemberName() +FSharp.Compiler.Symbols.FSharpImplementationFileContents +FSharp.Compiler.Symbols.FSharpImplementationFileContents: Boolean HasExplicitEntryPoint +FSharp.Compiler.Symbols.FSharpImplementationFileContents: Boolean IsScript +FSharp.Compiler.Symbols.FSharpImplementationFileContents: Boolean get_HasExplicitEntryPoint() +FSharp.Compiler.Symbols.FSharpImplementationFileContents: Boolean get_IsScript() +FSharp.Compiler.Symbols.FSharpImplementationFileContents: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration] Declarations +FSharp.Compiler.Symbols.FSharpImplementationFileContents: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration] get_Declarations() +FSharp.Compiler.Symbols.FSharpImplementationFileContents: System.String FileName +FSharp.Compiler.Symbols.FSharpImplementationFileContents: System.String QualifiedName +FSharp.Compiler.Symbols.FSharpImplementationFileContents: System.String get_FileName() +FSharp.Compiler.Symbols.FSharpImplementationFileContents: System.String get_QualifiedName() +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+Entity: FSharp.Compiler.Symbols.FSharpEntity entity +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+Entity: FSharp.Compiler.Symbols.FSharpEntity get_entity() +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+Entity: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration] declarations +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+Entity: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration] get_declarations() +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+InitAction: FSharp.Compiler.Symbols.FSharpExpr action +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+InitAction: FSharp.Compiler.Symbols.FSharpExpr get_action() +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpExpr body +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpExpr get_body() +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue get_value() +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue value +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue]] curriedArgs +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue]] get_curriedArgs() +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+Tags: Int32 Entity +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+Tags: Int32 InitAction +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+Tags: Int32 MemberOrFunctionOrValue +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Boolean Equals(FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration) +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Boolean Equals(System.Object) +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Boolean IsEntity +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Boolean IsInitAction +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Boolean IsMemberOrFunctionOrValue +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Boolean get_IsEntity() +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Boolean get_IsInitAction() +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Boolean get_IsMemberOrFunctionOrValue() +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration NewEntity(FSharp.Compiler.Symbols.FSharpEntity, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration]) +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration NewInitAction(FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration NewMemberOrFunctionOrValue(FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue]], FSharp.Compiler.Symbols.FSharpExpr) +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+Entity +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+InitAction +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+MemberOrFunctionOrValue +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration+Tags +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Int32 GetHashCode() +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Int32 Tag +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: Int32 get_Tag() +FSharp.Compiler.Symbols.FSharpImplementationFileDeclaration: System.String ToString() +FSharp.Compiler.Symbols.FSharpInlineAnnotation +FSharp.Compiler.Symbols.FSharpInlineAnnotation+Tags: Int32 AggressiveInline +FSharp.Compiler.Symbols.FSharpInlineAnnotation+Tags: Int32 AlwaysInline +FSharp.Compiler.Symbols.FSharpInlineAnnotation+Tags: Int32 NeverInline +FSharp.Compiler.Symbols.FSharpInlineAnnotation+Tags: Int32 OptionalInline +FSharp.Compiler.Symbols.FSharpInlineAnnotation+Tags: Int32 PseudoValue +FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean Equals(FSharp.Compiler.Symbols.FSharpInlineAnnotation) +FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean Equals(System.Object) +FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean IsAggressiveInline +FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean IsAlwaysInline +FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean IsNeverInline +FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean IsOptionalInline +FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean IsPseudoValue +FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean get_IsAggressiveInline() +FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean get_IsAlwaysInline() +FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean get_IsNeverInline() +FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean get_IsOptionalInline() +FSharp.Compiler.Symbols.FSharpInlineAnnotation: Boolean get_IsPseudoValue() +FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation AggressiveInline +FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation AlwaysInline +FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation NeverInline +FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation OptionalInline +FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation PseudoValue +FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation get_AggressiveInline() +FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation get_AlwaysInline() +FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation get_NeverInline() +FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation get_OptionalInline() +FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation get_PseudoValue() +FSharp.Compiler.Symbols.FSharpInlineAnnotation: FSharp.Compiler.Symbols.FSharpInlineAnnotation+Tags +FSharp.Compiler.Symbols.FSharpInlineAnnotation: Int32 CompareTo(FSharp.Compiler.Symbols.FSharpInlineAnnotation) +FSharp.Compiler.Symbols.FSharpInlineAnnotation: Int32 CompareTo(System.Object) +FSharp.Compiler.Symbols.FSharpInlineAnnotation: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.Symbols.FSharpInlineAnnotation: Int32 GetHashCode() +FSharp.Compiler.Symbols.FSharpInlineAnnotation: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Symbols.FSharpInlineAnnotation: Int32 Tag +FSharp.Compiler.Symbols.FSharpInlineAnnotation: Int32 get_Tag() +FSharp.Compiler.Symbols.FSharpInlineAnnotation: System.String ToString() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean Equals(System.Object) +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean EventIsStandard +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean HasGetterMethod +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean HasSetterMethod +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsActivePattern +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsBaseValue +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsCompilerGenerated +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsConstructor +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsConstructorThisValue +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsDispatchSlot +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsEvent +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsEventAddMethod +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsEventRemoveMethod +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsExplicitInterfaceImplementation +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsExtensionMember +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsFunction +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsImplicitConstructor +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsInstanceMember +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsInstanceMemberInCompiledCode +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsMember +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsMemberThisValue +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsModuleValueOrMember +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsMutable +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsOverrideOrExplicitInterfaceImplementation +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsProperty +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsPropertyGetterMethod +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsPropertySetterMethod +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsTypeFunction +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsUnresolved +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsValCompiledAsMethod +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean IsValue +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_EventIsStandard() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_HasGetterMethod() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_HasSetterMethod() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsActivePattern() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsBaseValue() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsCompilerGenerated() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsConstructor() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsConstructorThisValue() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsDispatchSlot() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsEvent() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsEventAddMethod() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsEventRemoveMethod() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsExplicitInterfaceImplementation() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsExtensionMember() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsFunction() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsImplicitConstructor() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsInstanceMember() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsInstanceMemberInCompiledCode() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsMember() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsMemberThisValue() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsModuleValueOrMember() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsMutable() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsOverrideOrExplicitInterfaceImplementation() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsProperty() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsPropertyGetterMethod() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsPropertySetterMethod() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsTypeFunction() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsUnresolved() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsValCompiledAsMethod() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Boolean get_IsValue() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpAccessibility Accessibility +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpAccessibility get_Accessibility() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpEntity ApparentEnclosingEntity +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpEntity get_ApparentEnclosingEntity() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpInlineAnnotation InlineAnnotation +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpInlineAnnotation get_InlineAnnotation() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue EventAddMethod +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue EventRemoveMethod +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue GetterMethod +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue SetterMethod +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue get_EventAddMethod() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue get_EventRemoveMethod() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue get_GetterMethod() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue get_SetterMethod() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpParameter ReturnParameter +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpParameter get_ReturnParameter() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpType EventDelegateType +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpType FullType +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpType get_EventDelegateType() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpType get_FullType() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpXmlDoc XmlDoc +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Symbols.FSharpXmlDoc get_XmlDoc() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Text.Range DeclarationLocation +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Text.Range get_DeclarationLocation() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: FSharp.Compiler.Text.TaggedText[] FormatLayout(FSharp.Compiler.Symbols.FSharpDisplayContext) +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Int32 GetHashCode() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] DeclaringEntity +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] get_DeclaringEntity() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue] EventForFSharpProperty +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue] get_EventForFSharpProperty() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType] FullTypeSafe +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType] get_FullTypeSafe() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue]] GetOverloads(Boolean) +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[System.Object] LiteralValue +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[System.Object] get_LiteralValue() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[System.String[]] TryGetFullCompiledOperatorNameIdents() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[System.String] TryGetFullDisplayName() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.String,System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpParameter]]] GetWitnessPassingInfo() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAbstractSignature] ImplementedAbstractSignatures +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAbstractSignature] get_ImplementedAbstractSignatures() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] Attributes +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] get_Attributes() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpGenericParameter] GenericParameters +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpGenericParameter] get_GenericParameters() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpParameter]] CurriedParameterGroups +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpParameter]] get_CurriedParameterGroups() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.String CompiledName +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.String DisplayName +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.String LogicalName +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.String ToString() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.String XmlDocSig +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.String get_CompiledName() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.String get_DisplayName() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.String get_LogicalName() +FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue: System.String get_XmlDocSig() +FSharp.Compiler.Symbols.FSharpObjectExprOverride +FSharp.Compiler.Symbols.FSharpObjectExprOverride: FSharp.Compiler.Symbols.FSharpAbstractSignature Signature +FSharp.Compiler.Symbols.FSharpObjectExprOverride: FSharp.Compiler.Symbols.FSharpAbstractSignature get_Signature() +FSharp.Compiler.Symbols.FSharpObjectExprOverride: FSharp.Compiler.Symbols.FSharpExpr Body +FSharp.Compiler.Symbols.FSharpObjectExprOverride: FSharp.Compiler.Symbols.FSharpExpr get_Body() +FSharp.Compiler.Symbols.FSharpObjectExprOverride: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpGenericParameter] GenericParameters +FSharp.Compiler.Symbols.FSharpObjectExprOverride: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpGenericParameter] get_GenericParameters() +FSharp.Compiler.Symbols.FSharpObjectExprOverride: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue]] CurriedParameterGroups +FSharp.Compiler.Symbols.FSharpObjectExprOverride: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue]] get_CurriedParameterGroups() +FSharp.Compiler.Symbols.FSharpOpenDeclaration +FSharp.Compiler.Symbols.FSharpOpenDeclaration: Boolean IsOwnNamespace +FSharp.Compiler.Symbols.FSharpOpenDeclaration: Boolean get_IsOwnNamespace() +FSharp.Compiler.Symbols.FSharpOpenDeclaration: FSharp.Compiler.Syntax.SynOpenDeclTarget Target +FSharp.Compiler.Symbols.FSharpOpenDeclaration: FSharp.Compiler.Syntax.SynOpenDeclTarget get_Target() +FSharp.Compiler.Symbols.FSharpOpenDeclaration: FSharp.Compiler.Text.Range AppliedScope +FSharp.Compiler.Symbols.FSharpOpenDeclaration: FSharp.Compiler.Text.Range get_AppliedScope() +FSharp.Compiler.Symbols.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpEntity] Modules +FSharp.Compiler.Symbols.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpEntity] get_Modules() +FSharp.Compiler.Symbols.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType] Types +FSharp.Compiler.Symbols.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Symbols.FSharpType] get_Types() +FSharp.Compiler.Symbols.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] LongId +FSharp.Compiler.Symbols.FSharpOpenDeclaration: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_LongId() +FSharp.Compiler.Symbols.FSharpOpenDeclaration: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] Range +FSharp.Compiler.Symbols.FSharpOpenDeclaration: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_Range() +FSharp.Compiler.Symbols.FSharpParameter +FSharp.Compiler.Symbols.FSharpParameter: Boolean Equals(System.Object) +FSharp.Compiler.Symbols.FSharpParameter: Boolean IsInArg +FSharp.Compiler.Symbols.FSharpParameter: Boolean IsOptionalArg +FSharp.Compiler.Symbols.FSharpParameter: Boolean IsOutArg +FSharp.Compiler.Symbols.FSharpParameter: Boolean IsParamArrayArg +FSharp.Compiler.Symbols.FSharpParameter: Boolean get_IsInArg() +FSharp.Compiler.Symbols.FSharpParameter: Boolean get_IsOptionalArg() +FSharp.Compiler.Symbols.FSharpParameter: Boolean get_IsOutArg() +FSharp.Compiler.Symbols.FSharpParameter: Boolean get_IsParamArrayArg() +FSharp.Compiler.Symbols.FSharpParameter: FSharp.Compiler.Symbols.FSharpType Type +FSharp.Compiler.Symbols.FSharpParameter: FSharp.Compiler.Symbols.FSharpType get_Type() +FSharp.Compiler.Symbols.FSharpParameter: FSharp.Compiler.Text.Range DeclarationLocation +FSharp.Compiler.Symbols.FSharpParameter: FSharp.Compiler.Text.Range get_DeclarationLocation() +FSharp.Compiler.Symbols.FSharpParameter: Int32 GetHashCode() +FSharp.Compiler.Symbols.FSharpParameter: Microsoft.FSharp.Core.FSharpOption`1[System.String] Name +FSharp.Compiler.Symbols.FSharpParameter: Microsoft.FSharp.Core.FSharpOption`1[System.String] get_Name() +FSharp.Compiler.Symbols.FSharpParameter: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] Attributes +FSharp.Compiler.Symbols.FSharpParameter: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] get_Attributes() +FSharp.Compiler.Symbols.FSharpParameter: System.String ToString() +FSharp.Compiler.Symbols.FSharpStaticParameter +FSharp.Compiler.Symbols.FSharpStaticParameter: Boolean Equals(System.Object) +FSharp.Compiler.Symbols.FSharpStaticParameter: Boolean HasDefaultValue +FSharp.Compiler.Symbols.FSharpStaticParameter: Boolean IsOptional +FSharp.Compiler.Symbols.FSharpStaticParameter: Boolean get_HasDefaultValue() +FSharp.Compiler.Symbols.FSharpStaticParameter: Boolean get_IsOptional() +FSharp.Compiler.Symbols.FSharpStaticParameter: FSharp.Compiler.Symbols.FSharpType Kind +FSharp.Compiler.Symbols.FSharpStaticParameter: FSharp.Compiler.Symbols.FSharpType get_Kind() +FSharp.Compiler.Symbols.FSharpStaticParameter: FSharp.Compiler.Text.Range DeclarationLocation +FSharp.Compiler.Symbols.FSharpStaticParameter: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Symbols.FSharpStaticParameter: FSharp.Compiler.Text.Range get_DeclarationLocation() +FSharp.Compiler.Symbols.FSharpStaticParameter: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Symbols.FSharpStaticParameter: Int32 GetHashCode() +FSharp.Compiler.Symbols.FSharpStaticParameter: System.Object DefaultValue +FSharp.Compiler.Symbols.FSharpStaticParameter: System.Object get_DefaultValue() +FSharp.Compiler.Symbols.FSharpStaticParameter: System.String Name +FSharp.Compiler.Symbols.FSharpStaticParameter: System.String ToString() +FSharp.Compiler.Symbols.FSharpStaticParameter: System.String get_Name() +FSharp.Compiler.Symbols.FSharpSymbol +FSharp.Compiler.Symbols.FSharpSymbol: Boolean Equals(System.Object) +FSharp.Compiler.Symbols.FSharpSymbol: Boolean HasAttribute[T]() +FSharp.Compiler.Symbols.FSharpSymbol: Boolean IsAccessible(FSharp.Compiler.Symbols.FSharpAccessibilityRights) +FSharp.Compiler.Symbols.FSharpSymbol: Boolean IsEffectivelySameAs(FSharp.Compiler.Symbols.FSharpSymbol) +FSharp.Compiler.Symbols.FSharpSymbol: Boolean IsExplicitlySuppressed +FSharp.Compiler.Symbols.FSharpSymbol: Boolean get_IsExplicitlySuppressed() +FSharp.Compiler.Symbols.FSharpSymbol: FSharp.Compiler.Symbols.FSharpAccessibility Accessibility +FSharp.Compiler.Symbols.FSharpSymbol: FSharp.Compiler.Symbols.FSharpAccessibility get_Accessibility() +FSharp.Compiler.Symbols.FSharpSymbol: FSharp.Compiler.Symbols.FSharpAssembly Assembly +FSharp.Compiler.Symbols.FSharpSymbol: FSharp.Compiler.Symbols.FSharpAssembly get_Assembly() +FSharp.Compiler.Symbols.FSharpSymbol: Int32 GetEffectivelySameAsHash() +FSharp.Compiler.Symbols.FSharpSymbol: Int32 GetHashCode() +FSharp.Compiler.Symbols.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpAttribute] TryGetAttribute[T]() +FSharp.Compiler.Symbols.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] DeclarationLocation +FSharp.Compiler.Symbols.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] ImplementationLocation +FSharp.Compiler.Symbols.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] SignatureLocation +FSharp.Compiler.Symbols.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_DeclarationLocation() +FSharp.Compiler.Symbols.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_ImplementationLocation() +FSharp.Compiler.Symbols.FSharpSymbol: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_SignatureLocation() +FSharp.Compiler.Symbols.FSharpSymbol: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] Attributes +FSharp.Compiler.Symbols.FSharpSymbol: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] get_Attributes() +FSharp.Compiler.Symbols.FSharpSymbol: System.String DisplayName +FSharp.Compiler.Symbols.FSharpSymbol: System.String FullName +FSharp.Compiler.Symbols.FSharpSymbol: System.String ToString() +FSharp.Compiler.Symbols.FSharpSymbol: System.String get_DisplayName() +FSharp.Compiler.Symbols.FSharpSymbol: System.String get_FullName() +FSharp.Compiler.Symbols.FSharpSymbolPatterns +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpActivePatternCase] |ActivePatternCase|_|(FSharp.Compiler.Symbols.FSharpSymbol) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] |Constructor|_|(FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpEntity] |TypeWithDefinition|_|(FSharp.Compiler.Symbols.FSharpType) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpField] |RecordField|_|(FSharp.Compiler.Symbols.FSharpSymbol) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue] |MemberFunctionOrValue|_|(FSharp.Compiler.Symbols.FSharpSymbol) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType] |AbbreviatedType|_|(FSharp.Compiler.Symbols.FSharpEntity) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpUnionCase] |UnionCase|_|(FSharp.Compiler.Symbols.FSharpSymbol) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |AbstractClass|_|(FSharp.Compiler.Symbols.FSharpEntity) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Array|_|(FSharp.Compiler.Symbols.FSharpEntity) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Attribute|_|(FSharp.Compiler.Symbols.FSharpEntity) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |ByRef|_|(FSharp.Compiler.Symbols.FSharpEntity) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Class|_|[a](FSharp.Compiler.Symbols.FSharpEntity, FSharp.Compiler.Symbols.FSharpEntity, a) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Delegate|_|(FSharp.Compiler.Symbols.FSharpEntity) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Enum|_|(FSharp.Compiler.Symbols.FSharpEntity) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Event|_|(FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |ExtensionMember|_|(FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |FSharpException|_|(FSharp.Compiler.Symbols.FSharpEntity) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |FSharpModule|_|(FSharp.Compiler.Symbols.FSharpEntity) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |FSharpType|_|(FSharp.Compiler.Symbols.FSharpEntity) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |FunctionType|_|(FSharp.Compiler.Symbols.FSharpType) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Function|_|(Boolean, FSharp.Compiler.Symbols.FSharpMemberOrFunctionOrValue) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Interface|_|(FSharp.Compiler.Symbols.FSharpEntity) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |MutableVar|_|(FSharp.Compiler.Symbols.FSharpSymbol) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Namespace|_|(FSharp.Compiler.Symbols.FSharpEntity) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Parameter|_|(FSharp.Compiler.Symbols.FSharpSymbol) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Pattern|_|(FSharp.Compiler.Symbols.FSharpSymbol) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |ProvidedAndErasedType|_|(FSharp.Compiler.Symbols.FSharpEntity) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |ProvidedType|_|(FSharp.Compiler.Symbols.FSharpEntity) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Record|_|(FSharp.Compiler.Symbols.FSharpEntity) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |RefCell|_|(FSharp.Compiler.Symbols.FSharpType) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |Tuple|_|(FSharp.Compiler.Symbols.FSharpType) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |UnionType|_|(FSharp.Compiler.Symbols.FSharpEntity) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] |ValueType|_|(FSharp.Compiler.Symbols.FSharpEntity) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpField,FSharp.Compiler.Symbols.FSharpType]] |Field|_|(FSharp.Compiler.Symbols.FSharpSymbol) +FSharp.Compiler.Symbols.FSharpSymbolPatterns: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[FSharp.Compiler.Symbols.FSharpEntity,FSharp.Compiler.Symbols.FSharpEntity,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType]]] |FSharpEntity|_|(FSharp.Compiler.Symbols.FSharpSymbol) +FSharp.Compiler.Symbols.FSharpType +FSharp.Compiler.Symbols.FSharpType: Boolean Equals(System.Object) +FSharp.Compiler.Symbols.FSharpType: Boolean HasTypeDefinition +FSharp.Compiler.Symbols.FSharpType: Boolean IsAbbreviation +FSharp.Compiler.Symbols.FSharpType: Boolean IsAnonRecordType +FSharp.Compiler.Symbols.FSharpType: Boolean IsFunctionType +FSharp.Compiler.Symbols.FSharpType: Boolean IsGenericParameter +FSharp.Compiler.Symbols.FSharpType: Boolean IsStructTupleType +FSharp.Compiler.Symbols.FSharpType: Boolean IsTupleType +FSharp.Compiler.Symbols.FSharpType: Boolean IsUnresolved +FSharp.Compiler.Symbols.FSharpType: Boolean get_HasTypeDefinition() +FSharp.Compiler.Symbols.FSharpType: Boolean get_IsAbbreviation() +FSharp.Compiler.Symbols.FSharpType: Boolean get_IsAnonRecordType() +FSharp.Compiler.Symbols.FSharpType: Boolean get_IsFunctionType() +FSharp.Compiler.Symbols.FSharpType: Boolean get_IsGenericParameter() +FSharp.Compiler.Symbols.FSharpType: Boolean get_IsStructTupleType() +FSharp.Compiler.Symbols.FSharpType: Boolean get_IsTupleType() +FSharp.Compiler.Symbols.FSharpType: Boolean get_IsUnresolved() +FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails AnonRecordTypeDetails +FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpAnonRecordTypeDetails get_AnonRecordTypeDetails() +FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpEntity TypeDefinition +FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpEntity get_TypeDefinition() +FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpGenericParameter GenericParameter +FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpGenericParameter get_GenericParameter() +FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpParameter Prettify(FSharp.Compiler.Symbols.FSharpParameter) +FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpType AbbreviatedType +FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpType Instantiate(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Symbols.FSharpGenericParameter,FSharp.Compiler.Symbols.FSharpType]]) +FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpType Prettify(FSharp.Compiler.Symbols.FSharpType) +FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpType StripAbbreviations() +FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Symbols.FSharpType get_AbbreviatedType() +FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Text.TaggedText[] FormatLayout(FSharp.Compiler.Symbols.FSharpDisplayContext) +FSharp.Compiler.Symbols.FSharpType: FSharp.Compiler.Text.TaggedText[] FormatLayoutWithConstraints(FSharp.Compiler.Symbols.FSharpDisplayContext) +FSharp.Compiler.Symbols.FSharpType: Int32 GetHashCode() +FSharp.Compiler.Symbols.FSharpType: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType] BaseType +FSharp.Compiler.Symbols.FSharpType: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Symbols.FSharpType] get_BaseType() +FSharp.Compiler.Symbols.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpParameter] Prettify(System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpParameter]) +FSharp.Compiler.Symbols.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] AllInterfaces +FSharp.Compiler.Symbols.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] GenericArguments +FSharp.Compiler.Symbols.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] Prettify(System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType]) +FSharp.Compiler.Symbols.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] get_AllInterfaces() +FSharp.Compiler.Symbols.FSharpType: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpType] get_GenericArguments() +FSharp.Compiler.Symbols.FSharpType: System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpParameter]] Prettify(System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpParameter]]) +FSharp.Compiler.Symbols.FSharpType: System.String Format(FSharp.Compiler.Symbols.FSharpDisplayContext) +FSharp.Compiler.Symbols.FSharpType: System.String FormatWithConstraints(FSharp.Compiler.Symbols.FSharpDisplayContext) +FSharp.Compiler.Symbols.FSharpType: System.String ToString() +FSharp.Compiler.Symbols.FSharpType: System.Tuple`2[System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpParameter]],FSharp.Compiler.Symbols.FSharpParameter] Prettify(System.Collections.Generic.IList`1[System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpParameter]], FSharp.Compiler.Symbols.FSharpParameter) +FSharp.Compiler.Symbols.FSharpUnionCase +FSharp.Compiler.Symbols.FSharpUnionCase: Boolean Equals(System.Object) +FSharp.Compiler.Symbols.FSharpUnionCase: Boolean HasFields +FSharp.Compiler.Symbols.FSharpUnionCase: Boolean IsUnresolved +FSharp.Compiler.Symbols.FSharpUnionCase: Boolean get_HasFields() +FSharp.Compiler.Symbols.FSharpUnionCase: Boolean get_IsUnresolved() +FSharp.Compiler.Symbols.FSharpUnionCase: FSharp.Compiler.Symbols.FSharpAccessibility Accessibility +FSharp.Compiler.Symbols.FSharpUnionCase: FSharp.Compiler.Symbols.FSharpAccessibility get_Accessibility() +FSharp.Compiler.Symbols.FSharpUnionCase: FSharp.Compiler.Symbols.FSharpType ReturnType +FSharp.Compiler.Symbols.FSharpUnionCase: FSharp.Compiler.Symbols.FSharpType get_ReturnType() +FSharp.Compiler.Symbols.FSharpUnionCase: FSharp.Compiler.Symbols.FSharpXmlDoc XmlDoc +FSharp.Compiler.Symbols.FSharpUnionCase: FSharp.Compiler.Symbols.FSharpXmlDoc get_XmlDoc() +FSharp.Compiler.Symbols.FSharpUnionCase: FSharp.Compiler.Text.Range DeclarationLocation +FSharp.Compiler.Symbols.FSharpUnionCase: FSharp.Compiler.Text.Range get_DeclarationLocation() +FSharp.Compiler.Symbols.FSharpUnionCase: Int32 GetHashCode() +FSharp.Compiler.Symbols.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] Attributes +FSharp.Compiler.Symbols.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpAttribute] get_Attributes() +FSharp.Compiler.Symbols.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpField] Fields +FSharp.Compiler.Symbols.FSharpUnionCase: System.Collections.Generic.IList`1[FSharp.Compiler.Symbols.FSharpField] get_Fields() +FSharp.Compiler.Symbols.FSharpUnionCase: System.String CompiledName +FSharp.Compiler.Symbols.FSharpUnionCase: System.String Name +FSharp.Compiler.Symbols.FSharpUnionCase: System.String ToString() +FSharp.Compiler.Symbols.FSharpUnionCase: System.String XmlDocSig +FSharp.Compiler.Symbols.FSharpUnionCase: System.String get_CompiledName() +FSharp.Compiler.Symbols.FSharpUnionCase: System.String get_Name() +FSharp.Compiler.Symbols.FSharpUnionCase: System.String get_XmlDocSig() +FSharp.Compiler.Symbols.FSharpXmlDoc +FSharp.Compiler.Symbols.FSharpXmlDoc+FromXmlFile: System.String dllName +FSharp.Compiler.Symbols.FSharpXmlDoc+FromXmlFile: System.String get_dllName() +FSharp.Compiler.Symbols.FSharpXmlDoc+FromXmlFile: System.String get_xmlSig() +FSharp.Compiler.Symbols.FSharpXmlDoc+FromXmlFile: System.String xmlSig +FSharp.Compiler.Symbols.FSharpXmlDoc+FromXmlText: FSharp.Compiler.Xml.XmlDoc Item +FSharp.Compiler.Symbols.FSharpXmlDoc+FromXmlText: FSharp.Compiler.Xml.XmlDoc get_Item() +FSharp.Compiler.Symbols.FSharpXmlDoc+Tags: Int32 FromXmlFile +FSharp.Compiler.Symbols.FSharpXmlDoc+Tags: Int32 FromXmlText +FSharp.Compiler.Symbols.FSharpXmlDoc+Tags: Int32 None +FSharp.Compiler.Symbols.FSharpXmlDoc: Boolean Equals(FSharp.Compiler.Symbols.FSharpXmlDoc) +FSharp.Compiler.Symbols.FSharpXmlDoc: Boolean Equals(System.Object) +FSharp.Compiler.Symbols.FSharpXmlDoc: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Symbols.FSharpXmlDoc: Boolean IsFromXmlFile +FSharp.Compiler.Symbols.FSharpXmlDoc: Boolean IsFromXmlText +FSharp.Compiler.Symbols.FSharpXmlDoc: Boolean IsNone +FSharp.Compiler.Symbols.FSharpXmlDoc: Boolean get_IsFromXmlFile() +FSharp.Compiler.Symbols.FSharpXmlDoc: Boolean get_IsFromXmlText() +FSharp.Compiler.Symbols.FSharpXmlDoc: Boolean get_IsNone() +FSharp.Compiler.Symbols.FSharpXmlDoc: FSharp.Compiler.Symbols.FSharpXmlDoc NewFromXmlFile(System.String, System.String) +FSharp.Compiler.Symbols.FSharpXmlDoc: FSharp.Compiler.Symbols.FSharpXmlDoc NewFromXmlText(FSharp.Compiler.Xml.XmlDoc) +FSharp.Compiler.Symbols.FSharpXmlDoc: FSharp.Compiler.Symbols.FSharpXmlDoc None +FSharp.Compiler.Symbols.FSharpXmlDoc: FSharp.Compiler.Symbols.FSharpXmlDoc get_None() +FSharp.Compiler.Symbols.FSharpXmlDoc: FSharp.Compiler.Symbols.FSharpXmlDoc+FromXmlFile +FSharp.Compiler.Symbols.FSharpXmlDoc: FSharp.Compiler.Symbols.FSharpXmlDoc+FromXmlText +FSharp.Compiler.Symbols.FSharpXmlDoc: FSharp.Compiler.Symbols.FSharpXmlDoc+Tags +FSharp.Compiler.Symbols.FSharpXmlDoc: Int32 GetHashCode() +FSharp.Compiler.Symbols.FSharpXmlDoc: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Symbols.FSharpXmlDoc: Int32 Tag +FSharp.Compiler.Symbols.FSharpXmlDoc: Int32 get_Tag() +FSharp.Compiler.Symbols.FSharpXmlDoc: System.String ToString() +FSharp.Compiler.Syntax.DebugPointAtBinding +FSharp.Compiler.Syntax.DebugPointAtBinding+Tags: Int32 NoneAtDo +FSharp.Compiler.Syntax.DebugPointAtBinding+Tags: Int32 NoneAtInvisible +FSharp.Compiler.Syntax.DebugPointAtBinding+Tags: Int32 NoneAtLet +FSharp.Compiler.Syntax.DebugPointAtBinding+Tags: Int32 NoneAtSticky +FSharp.Compiler.Syntax.DebugPointAtBinding+Tags: Int32 Yes +FSharp.Compiler.Syntax.DebugPointAtBinding+Yes: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.DebugPointAtBinding+Yes: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean Equals(FSharp.Compiler.Syntax.DebugPointAtBinding) +FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean Equals(System.Object) +FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean IsNoneAtDo +FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean IsNoneAtInvisible +FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean IsNoneAtLet +FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean IsNoneAtSticky +FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean IsYes +FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean get_IsNoneAtDo() +FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean get_IsNoneAtInvisible() +FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean get_IsNoneAtLet() +FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean get_IsNoneAtSticky() +FSharp.Compiler.Syntax.DebugPointAtBinding: Boolean get_IsYes() +FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding Combine(FSharp.Compiler.Syntax.DebugPointAtBinding) +FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding NewYes(FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding NoneAtDo +FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding NoneAtInvisible +FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding NoneAtLet +FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding NoneAtSticky +FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding get_NoneAtDo() +FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding get_NoneAtInvisible() +FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding get_NoneAtLet() +FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding get_NoneAtSticky() +FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding+Tags +FSharp.Compiler.Syntax.DebugPointAtBinding: FSharp.Compiler.Syntax.DebugPointAtBinding+Yes +FSharp.Compiler.Syntax.DebugPointAtBinding: Int32 GetHashCode() +FSharp.Compiler.Syntax.DebugPointAtBinding: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.DebugPointAtBinding: Int32 Tag +FSharp.Compiler.Syntax.DebugPointAtBinding: Int32 get_Tag() +FSharp.Compiler.Syntax.DebugPointAtBinding: System.String ToString() +FSharp.Compiler.Syntax.DebugPointAtFinally +FSharp.Compiler.Syntax.DebugPointAtFinally+Tags: Int32 Body +FSharp.Compiler.Syntax.DebugPointAtFinally+Tags: Int32 No +FSharp.Compiler.Syntax.DebugPointAtFinally+Tags: Int32 Yes +FSharp.Compiler.Syntax.DebugPointAtFinally+Yes: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.DebugPointAtFinally+Yes: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.DebugPointAtFinally: Boolean Equals(FSharp.Compiler.Syntax.DebugPointAtFinally) +FSharp.Compiler.Syntax.DebugPointAtFinally: Boolean Equals(System.Object) +FSharp.Compiler.Syntax.DebugPointAtFinally: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.DebugPointAtFinally: Boolean IsBody +FSharp.Compiler.Syntax.DebugPointAtFinally: Boolean IsNo +FSharp.Compiler.Syntax.DebugPointAtFinally: Boolean IsYes +FSharp.Compiler.Syntax.DebugPointAtFinally: Boolean get_IsBody() +FSharp.Compiler.Syntax.DebugPointAtFinally: Boolean get_IsNo() +FSharp.Compiler.Syntax.DebugPointAtFinally: Boolean get_IsYes() +FSharp.Compiler.Syntax.DebugPointAtFinally: FSharp.Compiler.Syntax.DebugPointAtFinally Body +FSharp.Compiler.Syntax.DebugPointAtFinally: FSharp.Compiler.Syntax.DebugPointAtFinally NewYes(FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.DebugPointAtFinally: FSharp.Compiler.Syntax.DebugPointAtFinally No +FSharp.Compiler.Syntax.DebugPointAtFinally: FSharp.Compiler.Syntax.DebugPointAtFinally get_Body() +FSharp.Compiler.Syntax.DebugPointAtFinally: FSharp.Compiler.Syntax.DebugPointAtFinally get_No() +FSharp.Compiler.Syntax.DebugPointAtFinally: FSharp.Compiler.Syntax.DebugPointAtFinally+Tags +FSharp.Compiler.Syntax.DebugPointAtFinally: FSharp.Compiler.Syntax.DebugPointAtFinally+Yes +FSharp.Compiler.Syntax.DebugPointAtFinally: Int32 GetHashCode() +FSharp.Compiler.Syntax.DebugPointAtFinally: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.DebugPointAtFinally: Int32 Tag +FSharp.Compiler.Syntax.DebugPointAtFinally: Int32 get_Tag() +FSharp.Compiler.Syntax.DebugPointAtFinally: System.String ToString() +FSharp.Compiler.Syntax.DebugPointAtFor +FSharp.Compiler.Syntax.DebugPointAtFor+Tags: Int32 No +FSharp.Compiler.Syntax.DebugPointAtFor+Tags: Int32 Yes +FSharp.Compiler.Syntax.DebugPointAtFor+Yes: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.DebugPointAtFor+Yes: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.DebugPointAtFor: Boolean Equals(FSharp.Compiler.Syntax.DebugPointAtFor) +FSharp.Compiler.Syntax.DebugPointAtFor: Boolean Equals(System.Object) +FSharp.Compiler.Syntax.DebugPointAtFor: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.DebugPointAtFor: Boolean IsNo +FSharp.Compiler.Syntax.DebugPointAtFor: Boolean IsYes +FSharp.Compiler.Syntax.DebugPointAtFor: Boolean get_IsNo() +FSharp.Compiler.Syntax.DebugPointAtFor: Boolean get_IsYes() +FSharp.Compiler.Syntax.DebugPointAtFor: FSharp.Compiler.Syntax.DebugPointAtFor NewYes(FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.DebugPointAtFor: FSharp.Compiler.Syntax.DebugPointAtFor No +FSharp.Compiler.Syntax.DebugPointAtFor: FSharp.Compiler.Syntax.DebugPointAtFor get_No() +FSharp.Compiler.Syntax.DebugPointAtFor: FSharp.Compiler.Syntax.DebugPointAtFor+Tags +FSharp.Compiler.Syntax.DebugPointAtFor: FSharp.Compiler.Syntax.DebugPointAtFor+Yes +FSharp.Compiler.Syntax.DebugPointAtFor: Int32 GetHashCode() +FSharp.Compiler.Syntax.DebugPointAtFor: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.DebugPointAtFor: Int32 Tag +FSharp.Compiler.Syntax.DebugPointAtFor: Int32 get_Tag() +FSharp.Compiler.Syntax.DebugPointAtFor: System.String ToString() +FSharp.Compiler.Syntax.DebugPointAtSequential +FSharp.Compiler.Syntax.DebugPointAtSequential+Tags: Int32 Both +FSharp.Compiler.Syntax.DebugPointAtSequential+Tags: Int32 ExprOnly +FSharp.Compiler.Syntax.DebugPointAtSequential+Tags: Int32 StmtOnly +FSharp.Compiler.Syntax.DebugPointAtSequential: Boolean Equals(FSharp.Compiler.Syntax.DebugPointAtSequential) +FSharp.Compiler.Syntax.DebugPointAtSequential: Boolean Equals(System.Object) +FSharp.Compiler.Syntax.DebugPointAtSequential: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.DebugPointAtSequential: Boolean IsBoth +FSharp.Compiler.Syntax.DebugPointAtSequential: Boolean IsExprOnly +FSharp.Compiler.Syntax.DebugPointAtSequential: Boolean IsStmtOnly +FSharp.Compiler.Syntax.DebugPointAtSequential: Boolean get_IsBoth() +FSharp.Compiler.Syntax.DebugPointAtSequential: Boolean get_IsExprOnly() +FSharp.Compiler.Syntax.DebugPointAtSequential: Boolean get_IsStmtOnly() +FSharp.Compiler.Syntax.DebugPointAtSequential: FSharp.Compiler.Syntax.DebugPointAtSequential Both +FSharp.Compiler.Syntax.DebugPointAtSequential: FSharp.Compiler.Syntax.DebugPointAtSequential ExprOnly +FSharp.Compiler.Syntax.DebugPointAtSequential: FSharp.Compiler.Syntax.DebugPointAtSequential StmtOnly +FSharp.Compiler.Syntax.DebugPointAtSequential: FSharp.Compiler.Syntax.DebugPointAtSequential get_Both() +FSharp.Compiler.Syntax.DebugPointAtSequential: FSharp.Compiler.Syntax.DebugPointAtSequential get_ExprOnly() +FSharp.Compiler.Syntax.DebugPointAtSequential: FSharp.Compiler.Syntax.DebugPointAtSequential get_StmtOnly() +FSharp.Compiler.Syntax.DebugPointAtSequential: FSharp.Compiler.Syntax.DebugPointAtSequential+Tags +FSharp.Compiler.Syntax.DebugPointAtSequential: Int32 CompareTo(FSharp.Compiler.Syntax.DebugPointAtSequential) +FSharp.Compiler.Syntax.DebugPointAtSequential: Int32 CompareTo(System.Object) +FSharp.Compiler.Syntax.DebugPointAtSequential: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.Syntax.DebugPointAtSequential: Int32 GetHashCode() +FSharp.Compiler.Syntax.DebugPointAtSequential: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.DebugPointAtSequential: Int32 Tag +FSharp.Compiler.Syntax.DebugPointAtSequential: Int32 get_Tag() +FSharp.Compiler.Syntax.DebugPointAtSequential: System.String ToString() +FSharp.Compiler.Syntax.DebugPointAtTry +FSharp.Compiler.Syntax.DebugPointAtTry+Tags: Int32 Body +FSharp.Compiler.Syntax.DebugPointAtTry+Tags: Int32 No +FSharp.Compiler.Syntax.DebugPointAtTry+Tags: Int32 Yes +FSharp.Compiler.Syntax.DebugPointAtTry+Yes: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.DebugPointAtTry+Yes: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.DebugPointAtTry: Boolean Equals(FSharp.Compiler.Syntax.DebugPointAtTry) +FSharp.Compiler.Syntax.DebugPointAtTry: Boolean Equals(System.Object) +FSharp.Compiler.Syntax.DebugPointAtTry: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.DebugPointAtTry: Boolean IsBody +FSharp.Compiler.Syntax.DebugPointAtTry: Boolean IsNo +FSharp.Compiler.Syntax.DebugPointAtTry: Boolean IsYes +FSharp.Compiler.Syntax.DebugPointAtTry: Boolean get_IsBody() +FSharp.Compiler.Syntax.DebugPointAtTry: Boolean get_IsNo() +FSharp.Compiler.Syntax.DebugPointAtTry: Boolean get_IsYes() +FSharp.Compiler.Syntax.DebugPointAtTry: FSharp.Compiler.Syntax.DebugPointAtTry Body +FSharp.Compiler.Syntax.DebugPointAtTry: FSharp.Compiler.Syntax.DebugPointAtTry NewYes(FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.DebugPointAtTry: FSharp.Compiler.Syntax.DebugPointAtTry No +FSharp.Compiler.Syntax.DebugPointAtTry: FSharp.Compiler.Syntax.DebugPointAtTry get_Body() +FSharp.Compiler.Syntax.DebugPointAtTry: FSharp.Compiler.Syntax.DebugPointAtTry get_No() +FSharp.Compiler.Syntax.DebugPointAtTry: FSharp.Compiler.Syntax.DebugPointAtTry+Tags +FSharp.Compiler.Syntax.DebugPointAtTry: FSharp.Compiler.Syntax.DebugPointAtTry+Yes +FSharp.Compiler.Syntax.DebugPointAtTry: Int32 GetHashCode() +FSharp.Compiler.Syntax.DebugPointAtTry: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.DebugPointAtTry: Int32 Tag +FSharp.Compiler.Syntax.DebugPointAtTry: Int32 get_Tag() +FSharp.Compiler.Syntax.DebugPointAtTry: System.String ToString() +FSharp.Compiler.Syntax.DebugPointAtWhile +FSharp.Compiler.Syntax.DebugPointAtWhile+Tags: Int32 No +FSharp.Compiler.Syntax.DebugPointAtWhile+Tags: Int32 Yes +FSharp.Compiler.Syntax.DebugPointAtWhile+Yes: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.DebugPointAtWhile+Yes: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.DebugPointAtWhile: Boolean Equals(FSharp.Compiler.Syntax.DebugPointAtWhile) +FSharp.Compiler.Syntax.DebugPointAtWhile: Boolean Equals(System.Object) +FSharp.Compiler.Syntax.DebugPointAtWhile: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.DebugPointAtWhile: Boolean IsNo +FSharp.Compiler.Syntax.DebugPointAtWhile: Boolean IsYes +FSharp.Compiler.Syntax.DebugPointAtWhile: Boolean get_IsNo() +FSharp.Compiler.Syntax.DebugPointAtWhile: Boolean get_IsYes() +FSharp.Compiler.Syntax.DebugPointAtWhile: FSharp.Compiler.Syntax.DebugPointAtWhile NewYes(FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.DebugPointAtWhile: FSharp.Compiler.Syntax.DebugPointAtWhile No +FSharp.Compiler.Syntax.DebugPointAtWhile: FSharp.Compiler.Syntax.DebugPointAtWhile get_No() +FSharp.Compiler.Syntax.DebugPointAtWhile: FSharp.Compiler.Syntax.DebugPointAtWhile+Tags +FSharp.Compiler.Syntax.DebugPointAtWhile: FSharp.Compiler.Syntax.DebugPointAtWhile+Yes +FSharp.Compiler.Syntax.DebugPointAtWhile: Int32 GetHashCode() +FSharp.Compiler.Syntax.DebugPointAtWhile: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.DebugPointAtWhile: Int32 Tag +FSharp.Compiler.Syntax.DebugPointAtWhile: Int32 get_Tag() +FSharp.Compiler.Syntax.DebugPointAtWhile: System.String ToString() +FSharp.Compiler.Syntax.DebugPointAtWith +FSharp.Compiler.Syntax.DebugPointAtWith+Tags: Int32 No +FSharp.Compiler.Syntax.DebugPointAtWith+Tags: Int32 Yes +FSharp.Compiler.Syntax.DebugPointAtWith+Yes: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.DebugPointAtWith+Yes: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.DebugPointAtWith: Boolean Equals(FSharp.Compiler.Syntax.DebugPointAtWith) +FSharp.Compiler.Syntax.DebugPointAtWith: Boolean Equals(System.Object) +FSharp.Compiler.Syntax.DebugPointAtWith: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.DebugPointAtWith: Boolean IsNo +FSharp.Compiler.Syntax.DebugPointAtWith: Boolean IsYes +FSharp.Compiler.Syntax.DebugPointAtWith: Boolean get_IsNo() +FSharp.Compiler.Syntax.DebugPointAtWith: Boolean get_IsYes() +FSharp.Compiler.Syntax.DebugPointAtWith: FSharp.Compiler.Syntax.DebugPointAtWith NewYes(FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.DebugPointAtWith: FSharp.Compiler.Syntax.DebugPointAtWith No +FSharp.Compiler.Syntax.DebugPointAtWith: FSharp.Compiler.Syntax.DebugPointAtWith get_No() +FSharp.Compiler.Syntax.DebugPointAtWith: FSharp.Compiler.Syntax.DebugPointAtWith+Tags +FSharp.Compiler.Syntax.DebugPointAtWith: FSharp.Compiler.Syntax.DebugPointAtWith+Yes +FSharp.Compiler.Syntax.DebugPointAtWith: Int32 GetHashCode() +FSharp.Compiler.Syntax.DebugPointAtWith: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.DebugPointAtWith: Int32 Tag +FSharp.Compiler.Syntax.DebugPointAtWith: Int32 get_Tag() +FSharp.Compiler.Syntax.DebugPointAtWith: System.String ToString() +FSharp.Compiler.Syntax.DebugPointForTarget +FSharp.Compiler.Syntax.DebugPointForTarget+Tags: Int32 No +FSharp.Compiler.Syntax.DebugPointForTarget+Tags: Int32 Yes +FSharp.Compiler.Syntax.DebugPointForTarget: Boolean Equals(FSharp.Compiler.Syntax.DebugPointForTarget) +FSharp.Compiler.Syntax.DebugPointForTarget: Boolean Equals(System.Object) +FSharp.Compiler.Syntax.DebugPointForTarget: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.DebugPointForTarget: Boolean IsNo +FSharp.Compiler.Syntax.DebugPointForTarget: Boolean IsYes +FSharp.Compiler.Syntax.DebugPointForTarget: Boolean get_IsNo() +FSharp.Compiler.Syntax.DebugPointForTarget: Boolean get_IsYes() +FSharp.Compiler.Syntax.DebugPointForTarget: FSharp.Compiler.Syntax.DebugPointForTarget No +FSharp.Compiler.Syntax.DebugPointForTarget: FSharp.Compiler.Syntax.DebugPointForTarget Yes +FSharp.Compiler.Syntax.DebugPointForTarget: FSharp.Compiler.Syntax.DebugPointForTarget get_No() +FSharp.Compiler.Syntax.DebugPointForTarget: FSharp.Compiler.Syntax.DebugPointForTarget get_Yes() +FSharp.Compiler.Syntax.DebugPointForTarget: FSharp.Compiler.Syntax.DebugPointForTarget+Tags +FSharp.Compiler.Syntax.DebugPointForTarget: Int32 CompareTo(FSharp.Compiler.Syntax.DebugPointForTarget) +FSharp.Compiler.Syntax.DebugPointForTarget: Int32 CompareTo(System.Object) +FSharp.Compiler.Syntax.DebugPointForTarget: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.Syntax.DebugPointForTarget: Int32 GetHashCode() +FSharp.Compiler.Syntax.DebugPointForTarget: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.DebugPointForTarget: Int32 Tag +FSharp.Compiler.Syntax.DebugPointForTarget: Int32 get_Tag() +FSharp.Compiler.Syntax.DebugPointForTarget: System.String ToString() +FSharp.Compiler.Syntax.ExprAtomicFlag +FSharp.Compiler.Syntax.ExprAtomicFlag: FSharp.Compiler.Syntax.ExprAtomicFlag Atomic +FSharp.Compiler.Syntax.ExprAtomicFlag: FSharp.Compiler.Syntax.ExprAtomicFlag NonAtomic +FSharp.Compiler.Syntax.ExprAtomicFlag: Int32 value__ +FSharp.Compiler.Syntax.Ident +FSharp.Compiler.Syntax.Ident: FSharp.Compiler.Text.Range get_idRange() +FSharp.Compiler.Syntax.Ident: FSharp.Compiler.Text.Range idRange +FSharp.Compiler.Syntax.Ident: System.String ToString() +FSharp.Compiler.Syntax.Ident: System.String get_idText() +FSharp.Compiler.Syntax.Ident: System.String idText +FSharp.Compiler.Syntax.Ident: Void .ctor(System.String, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.LongIdentWithDots +FSharp.Compiler.Syntax.LongIdentWithDots: Boolean ThereIsAnExtraDotAtTheEnd +FSharp.Compiler.Syntax.LongIdentWithDots: Boolean get_ThereIsAnExtraDotAtTheEnd() +FSharp.Compiler.Syntax.LongIdentWithDots: FSharp.Compiler.Syntax.LongIdentWithDots NewLongIdentWithDots(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range]) +FSharp.Compiler.Syntax.LongIdentWithDots: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.LongIdentWithDots: FSharp.Compiler.Text.Range RangeWithoutAnyExtraDot +FSharp.Compiler.Syntax.LongIdentWithDots: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.LongIdentWithDots: FSharp.Compiler.Text.Range get_RangeWithoutAnyExtraDot() +FSharp.Compiler.Syntax.LongIdentWithDots: Int32 Tag +FSharp.Compiler.Syntax.LongIdentWithDots: Int32 get_Tag() +FSharp.Compiler.Syntax.LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] Lid +FSharp.Compiler.Syntax.LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_Lid() +FSharp.Compiler.Syntax.LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_id() +FSharp.Compiler.Syntax.LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] id +FSharp.Compiler.Syntax.LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range] dotRanges +FSharp.Compiler.Syntax.LongIdentWithDots: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range] get_dotRanges() +FSharp.Compiler.Syntax.LongIdentWithDots: System.String ToString() +FSharp.Compiler.Syntax.ParsedHashDirective +FSharp.Compiler.Syntax.ParsedHashDirective: FSharp.Compiler.Syntax.ParsedHashDirective NewParsedHashDirective(System.String, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirectiveArgument], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.ParsedHashDirective: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.ParsedHashDirective: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.ParsedHashDirective: Int32 Tag +FSharp.Compiler.Syntax.ParsedHashDirective: Int32 get_Tag() +FSharp.Compiler.Syntax.ParsedHashDirective: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirectiveArgument] args +FSharp.Compiler.Syntax.ParsedHashDirective: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirectiveArgument] get_args() +FSharp.Compiler.Syntax.ParsedHashDirective: System.String ToString() +FSharp.Compiler.Syntax.ParsedHashDirective: System.String get_ident() +FSharp.Compiler.Syntax.ParsedHashDirective: System.String ident +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+SourceIdentifier: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+SourceIdentifier: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+SourceIdentifier: System.String constant +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+SourceIdentifier: System.String get_constant() +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+SourceIdentifier: System.String get_value() +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+SourceIdentifier: System.String value +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+String: FSharp.Compiler.Syntax.SynStringKind get_stringKind() +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+String: FSharp.Compiler.Syntax.SynStringKind stringKind +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+String: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+String: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+String: System.String get_value() +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+String: System.String value +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+Tags: Int32 SourceIdentifier +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+Tags: Int32 String +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: Boolean IsSourceIdentifier +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: Boolean IsString +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: Boolean get_IsSourceIdentifier() +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: Boolean get_IsString() +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: FSharp.Compiler.Syntax.ParsedHashDirectiveArgument NewSourceIdentifier(System.String, System.String, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: FSharp.Compiler.Syntax.ParsedHashDirectiveArgument NewString(System.String, FSharp.Compiler.Syntax.SynStringKind, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+SourceIdentifier +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+String +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: FSharp.Compiler.Syntax.ParsedHashDirectiveArgument+Tags +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: Int32 Tag +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: Int32 get_Tag() +FSharp.Compiler.Syntax.ParsedHashDirectiveArgument: System.String ToString() +FSharp.Compiler.Syntax.ParsedImplFile +FSharp.Compiler.Syntax.ParsedImplFile: FSharp.Compiler.Syntax.ParsedImplFile NewParsedImplFile(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedImplFileFragment]) +FSharp.Compiler.Syntax.ParsedImplFile: Int32 Tag +FSharp.Compiler.Syntax.ParsedImplFile: Int32 get_Tag() +FSharp.Compiler.Syntax.ParsedImplFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective] get_hashDirectives() +FSharp.Compiler.Syntax.ParsedImplFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective] hashDirectives +FSharp.Compiler.Syntax.ParsedImplFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedImplFileFragment] fragments +FSharp.Compiler.Syntax.ParsedImplFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedImplFileFragment] get_fragments() +FSharp.Compiler.Syntax.ParsedImplFile: System.String ToString() +FSharp.Compiler.Syntax.ParsedImplFileFragment +FSharp.Compiler.Syntax.ParsedImplFileFragment+AnonModule: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.ParsedImplFileFragment+AnonModule: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.ParsedImplFileFragment+AnonModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] decls +FSharp.Compiler.Syntax.ParsedImplFileFragment+AnonModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] get_decls() +FSharp.Compiler.Syntax.ParsedImplFileFragment+NamedModule: FSharp.Compiler.Syntax.SynModuleOrNamespace get_namedModule() +FSharp.Compiler.Syntax.ParsedImplFileFragment+NamedModule: FSharp.Compiler.Syntax.SynModuleOrNamespace namedModule +FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: Boolean get_isRecursive() +FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: Boolean isRecursive +FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind get_kind() +FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind kind +FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() +FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: FSharp.Compiler.Xml.PreXmlDoc xmlDoc +FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() +FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId +FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes +FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() +FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] decls +FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] get_decls() +FSharp.Compiler.Syntax.ParsedImplFileFragment+Tags: Int32 AnonModule +FSharp.Compiler.Syntax.ParsedImplFileFragment+Tags: Int32 NamedModule +FSharp.Compiler.Syntax.ParsedImplFileFragment+Tags: Int32 NamespaceFragment +FSharp.Compiler.Syntax.ParsedImplFileFragment: Boolean IsAnonModule +FSharp.Compiler.Syntax.ParsedImplFileFragment: Boolean IsNamedModule +FSharp.Compiler.Syntax.ParsedImplFileFragment: Boolean IsNamespaceFragment +FSharp.Compiler.Syntax.ParsedImplFileFragment: Boolean get_IsAnonModule() +FSharp.Compiler.Syntax.ParsedImplFileFragment: Boolean get_IsNamedModule() +FSharp.Compiler.Syntax.ParsedImplFileFragment: Boolean get_IsNamespaceFragment() +FSharp.Compiler.Syntax.ParsedImplFileFragment: FSharp.Compiler.Syntax.ParsedImplFileFragment NewAnonModule(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.ParsedImplFileFragment: FSharp.Compiler.Syntax.ParsedImplFileFragment NewNamedModule(FSharp.Compiler.Syntax.SynModuleOrNamespace) +FSharp.Compiler.Syntax.ParsedImplFileFragment: FSharp.Compiler.Syntax.ParsedImplFileFragment NewNamespaceFragment(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], Boolean, FSharp.Compiler.Syntax.SynModuleOrNamespaceKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl], FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.ParsedImplFileFragment: FSharp.Compiler.Syntax.ParsedImplFileFragment+AnonModule +FSharp.Compiler.Syntax.ParsedImplFileFragment: FSharp.Compiler.Syntax.ParsedImplFileFragment+NamedModule +FSharp.Compiler.Syntax.ParsedImplFileFragment: FSharp.Compiler.Syntax.ParsedImplFileFragment+NamespaceFragment +FSharp.Compiler.Syntax.ParsedImplFileFragment: FSharp.Compiler.Syntax.ParsedImplFileFragment+Tags +FSharp.Compiler.Syntax.ParsedImplFileFragment: Int32 Tag +FSharp.Compiler.Syntax.ParsedImplFileFragment: Int32 get_Tag() +FSharp.Compiler.Syntax.ParsedImplFileFragment: System.String ToString() +FSharp.Compiler.Syntax.ParsedImplFileInput +FSharp.Compiler.Syntax.ParsedImplFileInput: Boolean get_isScript() +FSharp.Compiler.Syntax.ParsedImplFileInput: Boolean isScript +FSharp.Compiler.Syntax.ParsedImplFileInput: FSharp.Compiler.Syntax.ParsedImplFileInput NewParsedImplFileInput(System.String, Boolean, FSharp.Compiler.Syntax.QualifiedNameOfFile, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ScopedPragma], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleOrNamespace], System.Tuple`2[System.Boolean,System.Boolean]) +FSharp.Compiler.Syntax.ParsedImplFileInput: FSharp.Compiler.Syntax.QualifiedNameOfFile get_qualifiedNameOfFile() +FSharp.Compiler.Syntax.ParsedImplFileInput: FSharp.Compiler.Syntax.QualifiedNameOfFile qualifiedNameOfFile +FSharp.Compiler.Syntax.ParsedImplFileInput: Int32 Tag +FSharp.Compiler.Syntax.ParsedImplFileInput: Int32 get_Tag() +FSharp.Compiler.Syntax.ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective] get_hashDirectives() +FSharp.Compiler.Syntax.ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective] hashDirectives +FSharp.Compiler.Syntax.ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ScopedPragma] get_scopedPragmas() +FSharp.Compiler.Syntax.ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ScopedPragma] scopedPragmas +FSharp.Compiler.Syntax.ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleOrNamespace] get_modules() +FSharp.Compiler.Syntax.ParsedImplFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleOrNamespace] modules +FSharp.Compiler.Syntax.ParsedImplFileInput: System.String ToString() +FSharp.Compiler.Syntax.ParsedImplFileInput: System.String fileName +FSharp.Compiler.Syntax.ParsedImplFileInput: System.String get_fileName() +FSharp.Compiler.Syntax.ParsedImplFileInput: System.Tuple`2[System.Boolean,System.Boolean] get_isLastCompiland() +FSharp.Compiler.Syntax.ParsedImplFileInput: System.Tuple`2[System.Boolean,System.Boolean] isLastCompiland +FSharp.Compiler.Syntax.ParsedInput +FSharp.Compiler.Syntax.ParsedInput+ImplFile: FSharp.Compiler.Syntax.ParsedImplFileInput Item +FSharp.Compiler.Syntax.ParsedInput+ImplFile: FSharp.Compiler.Syntax.ParsedImplFileInput get_Item() +FSharp.Compiler.Syntax.ParsedInput+SigFile: FSharp.Compiler.Syntax.ParsedSigFileInput Item +FSharp.Compiler.Syntax.ParsedInput+SigFile: FSharp.Compiler.Syntax.ParsedSigFileInput get_Item() +FSharp.Compiler.Syntax.ParsedInput+Tags: Int32 ImplFile +FSharp.Compiler.Syntax.ParsedInput+Tags: Int32 SigFile +FSharp.Compiler.Syntax.ParsedInput: Boolean IsImplFile +FSharp.Compiler.Syntax.ParsedInput: Boolean IsSigFile +FSharp.Compiler.Syntax.ParsedInput: Boolean get_IsImplFile() +FSharp.Compiler.Syntax.ParsedInput: Boolean get_IsSigFile() +FSharp.Compiler.Syntax.ParsedInput: FSharp.Compiler.Syntax.ParsedInput NewImplFile(FSharp.Compiler.Syntax.ParsedImplFileInput) +FSharp.Compiler.Syntax.ParsedInput: FSharp.Compiler.Syntax.ParsedInput NewSigFile(FSharp.Compiler.Syntax.ParsedSigFileInput) +FSharp.Compiler.Syntax.ParsedInput: FSharp.Compiler.Syntax.ParsedInput+ImplFile +FSharp.Compiler.Syntax.ParsedInput: FSharp.Compiler.Syntax.ParsedInput+SigFile +FSharp.Compiler.Syntax.ParsedInput: FSharp.Compiler.Syntax.ParsedInput+Tags +FSharp.Compiler.Syntax.ParsedInput: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.ParsedInput: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.ParsedInput: Int32 Tag +FSharp.Compiler.Syntax.ParsedInput: Int32 get_Tag() +FSharp.Compiler.Syntax.ParsedInput: System.String FileName +FSharp.Compiler.Syntax.ParsedInput: System.String ToString() +FSharp.Compiler.Syntax.ParsedInput: System.String get_FileName() +FSharp.Compiler.Syntax.ParsedScriptInteraction +FSharp.Compiler.Syntax.ParsedScriptInteraction+Definitions: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.ParsedScriptInteraction+Definitions: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.ParsedScriptInteraction+Definitions: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] defns +FSharp.Compiler.Syntax.ParsedScriptInteraction+Definitions: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] get_defns() +FSharp.Compiler.Syntax.ParsedScriptInteraction+HashDirective: FSharp.Compiler.Syntax.ParsedHashDirective get_hashDirective() +FSharp.Compiler.Syntax.ParsedScriptInteraction+HashDirective: FSharp.Compiler.Syntax.ParsedHashDirective hashDirective +FSharp.Compiler.Syntax.ParsedScriptInteraction+HashDirective: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.ParsedScriptInteraction+HashDirective: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.ParsedScriptInteraction+Tags: Int32 Definitions +FSharp.Compiler.Syntax.ParsedScriptInteraction+Tags: Int32 HashDirective +FSharp.Compiler.Syntax.ParsedScriptInteraction: Boolean IsDefinitions +FSharp.Compiler.Syntax.ParsedScriptInteraction: Boolean IsHashDirective +FSharp.Compiler.Syntax.ParsedScriptInteraction: Boolean get_IsDefinitions() +FSharp.Compiler.Syntax.ParsedScriptInteraction: Boolean get_IsHashDirective() +FSharp.Compiler.Syntax.ParsedScriptInteraction: FSharp.Compiler.Syntax.ParsedScriptInteraction NewDefinitions(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.ParsedScriptInteraction: FSharp.Compiler.Syntax.ParsedScriptInteraction NewHashDirective(FSharp.Compiler.Syntax.ParsedHashDirective, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.ParsedScriptInteraction: FSharp.Compiler.Syntax.ParsedScriptInteraction+Definitions +FSharp.Compiler.Syntax.ParsedScriptInteraction: FSharp.Compiler.Syntax.ParsedScriptInteraction+HashDirective +FSharp.Compiler.Syntax.ParsedScriptInteraction: FSharp.Compiler.Syntax.ParsedScriptInteraction+Tags +FSharp.Compiler.Syntax.ParsedScriptInteraction: Int32 Tag +FSharp.Compiler.Syntax.ParsedScriptInteraction: Int32 get_Tag() +FSharp.Compiler.Syntax.ParsedScriptInteraction: System.String ToString() +FSharp.Compiler.Syntax.ParsedSigFile +FSharp.Compiler.Syntax.ParsedSigFile: FSharp.Compiler.Syntax.ParsedSigFile NewParsedSigFile(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedSigFileFragment]) +FSharp.Compiler.Syntax.ParsedSigFile: Int32 Tag +FSharp.Compiler.Syntax.ParsedSigFile: Int32 get_Tag() +FSharp.Compiler.Syntax.ParsedSigFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective] get_hashDirectives() +FSharp.Compiler.Syntax.ParsedSigFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective] hashDirectives +FSharp.Compiler.Syntax.ParsedSigFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedSigFileFragment] fragments +FSharp.Compiler.Syntax.ParsedSigFile: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedSigFileFragment] get_fragments() +FSharp.Compiler.Syntax.ParsedSigFile: System.String ToString() +FSharp.Compiler.Syntax.ParsedSigFileFragment +FSharp.Compiler.Syntax.ParsedSigFileFragment+AnonModule: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.ParsedSigFileFragment+AnonModule: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.ParsedSigFileFragment+AnonModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl] decls +FSharp.Compiler.Syntax.ParsedSigFileFragment+AnonModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl] get_decls() +FSharp.Compiler.Syntax.ParsedSigFileFragment+NamedModule: FSharp.Compiler.Syntax.SynModuleOrNamespaceSig get_namedModule() +FSharp.Compiler.Syntax.ParsedSigFileFragment+NamedModule: FSharp.Compiler.Syntax.SynModuleOrNamespaceSig namedModule +FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: Boolean get_isRecursive() +FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: Boolean isRecursive +FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind get_kind() +FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind kind +FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() +FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: FSharp.Compiler.Xml.PreXmlDoc xmlDoc +FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() +FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId +FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes +FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() +FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl] decls +FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl] get_decls() +FSharp.Compiler.Syntax.ParsedSigFileFragment+Tags: Int32 AnonModule +FSharp.Compiler.Syntax.ParsedSigFileFragment+Tags: Int32 NamedModule +FSharp.Compiler.Syntax.ParsedSigFileFragment+Tags: Int32 NamespaceFragment +FSharp.Compiler.Syntax.ParsedSigFileFragment: Boolean IsAnonModule +FSharp.Compiler.Syntax.ParsedSigFileFragment: Boolean IsNamedModule +FSharp.Compiler.Syntax.ParsedSigFileFragment: Boolean IsNamespaceFragment +FSharp.Compiler.Syntax.ParsedSigFileFragment: Boolean get_IsAnonModule() +FSharp.Compiler.Syntax.ParsedSigFileFragment: Boolean get_IsNamedModule() +FSharp.Compiler.Syntax.ParsedSigFileFragment: Boolean get_IsNamespaceFragment() +FSharp.Compiler.Syntax.ParsedSigFileFragment: FSharp.Compiler.Syntax.ParsedSigFileFragment NewAnonModule(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.ParsedSigFileFragment: FSharp.Compiler.Syntax.ParsedSigFileFragment NewNamedModule(FSharp.Compiler.Syntax.SynModuleOrNamespaceSig) +FSharp.Compiler.Syntax.ParsedSigFileFragment: FSharp.Compiler.Syntax.ParsedSigFileFragment NewNamespaceFragment(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], Boolean, FSharp.Compiler.Syntax.SynModuleOrNamespaceKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl], FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.ParsedSigFileFragment: FSharp.Compiler.Syntax.ParsedSigFileFragment+AnonModule +FSharp.Compiler.Syntax.ParsedSigFileFragment: FSharp.Compiler.Syntax.ParsedSigFileFragment+NamedModule +FSharp.Compiler.Syntax.ParsedSigFileFragment: FSharp.Compiler.Syntax.ParsedSigFileFragment+NamespaceFragment +FSharp.Compiler.Syntax.ParsedSigFileFragment: FSharp.Compiler.Syntax.ParsedSigFileFragment+Tags +FSharp.Compiler.Syntax.ParsedSigFileFragment: Int32 Tag +FSharp.Compiler.Syntax.ParsedSigFileFragment: Int32 get_Tag() +FSharp.Compiler.Syntax.ParsedSigFileFragment: System.String ToString() +FSharp.Compiler.Syntax.ParsedSigFileInput +FSharp.Compiler.Syntax.ParsedSigFileInput: FSharp.Compiler.Syntax.ParsedSigFileInput NewParsedSigFileInput(System.String, FSharp.Compiler.Syntax.QualifiedNameOfFile, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ScopedPragma], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleOrNamespaceSig]) +FSharp.Compiler.Syntax.ParsedSigFileInput: FSharp.Compiler.Syntax.QualifiedNameOfFile get_qualifiedNameOfFile() +FSharp.Compiler.Syntax.ParsedSigFileInput: FSharp.Compiler.Syntax.QualifiedNameOfFile qualifiedNameOfFile +FSharp.Compiler.Syntax.ParsedSigFileInput: Int32 Tag +FSharp.Compiler.Syntax.ParsedSigFileInput: Int32 get_Tag() +FSharp.Compiler.Syntax.ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective] get_hashDirectives() +FSharp.Compiler.Syntax.ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ParsedHashDirective] hashDirectives +FSharp.Compiler.Syntax.ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ScopedPragma] get_scopedPragmas() +FSharp.Compiler.Syntax.ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.ScopedPragma] scopedPragmas +FSharp.Compiler.Syntax.ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleOrNamespaceSig] get_modules() +FSharp.Compiler.Syntax.ParsedSigFileInput: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleOrNamespaceSig] modules +FSharp.Compiler.Syntax.ParsedSigFileInput: System.String ToString() +FSharp.Compiler.Syntax.ParsedSigFileInput: System.String fileName +FSharp.Compiler.Syntax.ParsedSigFileInput: System.String get_fileName() +FSharp.Compiler.Syntax.ParserDetail +FSharp.Compiler.Syntax.ParserDetail+Tags: Int32 ErrorRecovery +FSharp.Compiler.Syntax.ParserDetail+Tags: Int32 Ok +FSharp.Compiler.Syntax.ParserDetail: Boolean Equals(FSharp.Compiler.Syntax.ParserDetail) +FSharp.Compiler.Syntax.ParserDetail: Boolean Equals(System.Object) +FSharp.Compiler.Syntax.ParserDetail: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.ParserDetail: Boolean IsErrorRecovery +FSharp.Compiler.Syntax.ParserDetail: Boolean IsOk +FSharp.Compiler.Syntax.ParserDetail: Boolean get_IsErrorRecovery() +FSharp.Compiler.Syntax.ParserDetail: Boolean get_IsOk() +FSharp.Compiler.Syntax.ParserDetail: FSharp.Compiler.Syntax.ParserDetail ErrorRecovery +FSharp.Compiler.Syntax.ParserDetail: FSharp.Compiler.Syntax.ParserDetail Ok +FSharp.Compiler.Syntax.ParserDetail: FSharp.Compiler.Syntax.ParserDetail get_ErrorRecovery() +FSharp.Compiler.Syntax.ParserDetail: FSharp.Compiler.Syntax.ParserDetail get_Ok() +FSharp.Compiler.Syntax.ParserDetail: FSharp.Compiler.Syntax.ParserDetail+Tags +FSharp.Compiler.Syntax.ParserDetail: Int32 CompareTo(FSharp.Compiler.Syntax.ParserDetail) +FSharp.Compiler.Syntax.ParserDetail: Int32 CompareTo(System.Object) +FSharp.Compiler.Syntax.ParserDetail: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.Syntax.ParserDetail: Int32 GetHashCode() +FSharp.Compiler.Syntax.ParserDetail: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.ParserDetail: Int32 Tag +FSharp.Compiler.Syntax.ParserDetail: Int32 get_Tag() +FSharp.Compiler.Syntax.ParserDetail: System.String ToString() +FSharp.Compiler.Syntax.PrettyNaming +FSharp.Compiler.Syntax.PrettyNaming: Boolean IsActivePatternName(System.String) +FSharp.Compiler.Syntax.PrettyNaming: Boolean IsCompilerGeneratedName(System.String) +FSharp.Compiler.Syntax.PrettyNaming: Boolean IsIdentifierFirstCharacter(Char) +FSharp.Compiler.Syntax.PrettyNaming: Boolean IsIdentifierPartCharacter(Char) +FSharp.Compiler.Syntax.PrettyNaming: Boolean IsInfixOperator(System.String) +FSharp.Compiler.Syntax.PrettyNaming: Boolean IsLongIdentifierPartCharacter(Char) +FSharp.Compiler.Syntax.PrettyNaming: Boolean IsMangledOpName(System.String) +FSharp.Compiler.Syntax.PrettyNaming: Boolean IsOperatorName(System.String) +FSharp.Compiler.Syntax.PrettyNaming: Boolean IsOperatorOrBacktickedName(System.String) +FSharp.Compiler.Syntax.PrettyNaming: Boolean IsPrefixOperator(System.String) +FSharp.Compiler.Syntax.PrettyNaming: Boolean IsPunctuation(System.String) +FSharp.Compiler.Syntax.PrettyNaming: Boolean IsTernaryOperator(System.String) +FSharp.Compiler.Syntax.PrettyNaming: Microsoft.FSharp.Collections.FSharpList`1[System.String] GetLongNameFromString(System.String) +FSharp.Compiler.Syntax.PrettyNaming: Microsoft.FSharp.Core.FSharpOption`1[System.String] TryChopPropertyName(System.String) +FSharp.Compiler.Syntax.PrettyNaming: System.String CompileOpName(System.String) +FSharp.Compiler.Syntax.PrettyNaming: System.String DecompileOpName(System.String) +FSharp.Compiler.Syntax.PrettyNaming: System.String DemangleOperatorName(System.String) +FSharp.Compiler.Syntax.PrettyNaming: System.String FormatAndOtherOverloadsString(Int32) +FSharp.Compiler.Syntax.PrettyNaming: System.String FsiDynamicModulePrefix +FSharp.Compiler.Syntax.PrettyNaming: System.String get_FsiDynamicModulePrefix() +FSharp.Compiler.Syntax.QualifiedNameOfFile +FSharp.Compiler.Syntax.QualifiedNameOfFile: FSharp.Compiler.Syntax.Ident Id +FSharp.Compiler.Syntax.QualifiedNameOfFile: FSharp.Compiler.Syntax.Ident Item +FSharp.Compiler.Syntax.QualifiedNameOfFile: FSharp.Compiler.Syntax.Ident get_Id() +FSharp.Compiler.Syntax.QualifiedNameOfFile: FSharp.Compiler.Syntax.Ident get_Item() +FSharp.Compiler.Syntax.QualifiedNameOfFile: FSharp.Compiler.Syntax.QualifiedNameOfFile NewQualifiedNameOfFile(FSharp.Compiler.Syntax.Ident) +FSharp.Compiler.Syntax.QualifiedNameOfFile: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.QualifiedNameOfFile: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.QualifiedNameOfFile: Int32 Tag +FSharp.Compiler.Syntax.QualifiedNameOfFile: Int32 get_Tag() +FSharp.Compiler.Syntax.QualifiedNameOfFile: System.String Text +FSharp.Compiler.Syntax.QualifiedNameOfFile: System.String ToString() +FSharp.Compiler.Syntax.QualifiedNameOfFile: System.String get_Text() +FSharp.Compiler.Syntax.ScopedPragma +FSharp.Compiler.Syntax.ScopedPragma: Boolean Equals(FSharp.Compiler.Syntax.ScopedPragma) +FSharp.Compiler.Syntax.ScopedPragma: Boolean Equals(System.Object) +FSharp.Compiler.Syntax.ScopedPragma: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.ScopedPragma: FSharp.Compiler.Syntax.ScopedPragma NewWarningOff(FSharp.Compiler.Text.Range, Int32) +FSharp.Compiler.Syntax.ScopedPragma: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.ScopedPragma: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.ScopedPragma: Int32 GetHashCode() +FSharp.Compiler.Syntax.ScopedPragma: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.ScopedPragma: Int32 Tag +FSharp.Compiler.Syntax.ScopedPragma: Int32 get_Tag() +FSharp.Compiler.Syntax.ScopedPragma: Int32 get_warningNumber() +FSharp.Compiler.Syntax.ScopedPragma: Int32 warningNumber +FSharp.Compiler.Syntax.ScopedPragma: System.String ToString() +FSharp.Compiler.Syntax.SeqExprOnly +FSharp.Compiler.Syntax.SeqExprOnly: Boolean Equals(FSharp.Compiler.Syntax.SeqExprOnly) +FSharp.Compiler.Syntax.SeqExprOnly: Boolean Equals(System.Object) +FSharp.Compiler.Syntax.SeqExprOnly: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.SeqExprOnly: Boolean Item +FSharp.Compiler.Syntax.SeqExprOnly: Boolean get_Item() +FSharp.Compiler.Syntax.SeqExprOnly: FSharp.Compiler.Syntax.SeqExprOnly NewSeqExprOnly(Boolean) +FSharp.Compiler.Syntax.SeqExprOnly: Int32 CompareTo(FSharp.Compiler.Syntax.SeqExprOnly) +FSharp.Compiler.Syntax.SeqExprOnly: Int32 CompareTo(System.Object) +FSharp.Compiler.Syntax.SeqExprOnly: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.Syntax.SeqExprOnly: Int32 GetHashCode() +FSharp.Compiler.Syntax.SeqExprOnly: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.SeqExprOnly: Int32 Tag +FSharp.Compiler.Syntax.SeqExprOnly: Int32 get_Tag() +FSharp.Compiler.Syntax.SeqExprOnly: System.String ToString() +FSharp.Compiler.Syntax.SynAccess +FSharp.Compiler.Syntax.SynAccess+Tags: Int32 Internal +FSharp.Compiler.Syntax.SynAccess+Tags: Int32 Private +FSharp.Compiler.Syntax.SynAccess+Tags: Int32 Public +FSharp.Compiler.Syntax.SynAccess: Boolean Equals(FSharp.Compiler.Syntax.SynAccess) +FSharp.Compiler.Syntax.SynAccess: Boolean Equals(System.Object) +FSharp.Compiler.Syntax.SynAccess: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.SynAccess: Boolean IsInternal +FSharp.Compiler.Syntax.SynAccess: Boolean IsPrivate +FSharp.Compiler.Syntax.SynAccess: Boolean IsPublic +FSharp.Compiler.Syntax.SynAccess: Boolean get_IsInternal() +FSharp.Compiler.Syntax.SynAccess: Boolean get_IsPrivate() +FSharp.Compiler.Syntax.SynAccess: Boolean get_IsPublic() +FSharp.Compiler.Syntax.SynAccess: FSharp.Compiler.Syntax.SynAccess Internal +FSharp.Compiler.Syntax.SynAccess: FSharp.Compiler.Syntax.SynAccess Private +FSharp.Compiler.Syntax.SynAccess: FSharp.Compiler.Syntax.SynAccess Public +FSharp.Compiler.Syntax.SynAccess: FSharp.Compiler.Syntax.SynAccess get_Internal() +FSharp.Compiler.Syntax.SynAccess: FSharp.Compiler.Syntax.SynAccess get_Private() +FSharp.Compiler.Syntax.SynAccess: FSharp.Compiler.Syntax.SynAccess get_Public() +FSharp.Compiler.Syntax.SynAccess: FSharp.Compiler.Syntax.SynAccess+Tags +FSharp.Compiler.Syntax.SynAccess: Int32 CompareTo(FSharp.Compiler.Syntax.SynAccess) +FSharp.Compiler.Syntax.SynAccess: Int32 CompareTo(System.Object) +FSharp.Compiler.Syntax.SynAccess: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.Syntax.SynAccess: Int32 GetHashCode() +FSharp.Compiler.Syntax.SynAccess: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.SynAccess: Int32 Tag +FSharp.Compiler.Syntax.SynAccess: Int32 get_Tag() +FSharp.Compiler.Syntax.SynAccess: System.String ToString() +FSharp.Compiler.Syntax.SynArgInfo +FSharp.Compiler.Syntax.SynArgInfo: Boolean get_optional() +FSharp.Compiler.Syntax.SynArgInfo: Boolean optional +FSharp.Compiler.Syntax.SynArgInfo: FSharp.Compiler.Syntax.SynArgInfo NewSynArgInfo(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident]) +FSharp.Compiler.Syntax.SynArgInfo: Int32 Tag +FSharp.Compiler.Syntax.SynArgInfo: Int32 get_Tag() +FSharp.Compiler.Syntax.SynArgInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes +FSharp.Compiler.Syntax.SynArgInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() +FSharp.Compiler.Syntax.SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] Ident +FSharp.Compiler.Syntax.SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_Ident() +FSharp.Compiler.Syntax.SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_ident() +FSharp.Compiler.Syntax.SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] ident +FSharp.Compiler.Syntax.SynArgInfo: System.String ToString() +FSharp.Compiler.Syntax.SynArgPats +FSharp.Compiler.Syntax.SynArgPats+NamePatPairs: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynArgPats+NamePatPairs: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynArgPats+NamePatPairs: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynPat]] get_pats() +FSharp.Compiler.Syntax.SynArgPats+NamePatPairs: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynPat]] pats +FSharp.Compiler.Syntax.SynArgPats+Pats: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat] get_pats() +FSharp.Compiler.Syntax.SynArgPats+Pats: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat] pats +FSharp.Compiler.Syntax.SynArgPats+Tags: Int32 NamePatPairs +FSharp.Compiler.Syntax.SynArgPats+Tags: Int32 Pats +FSharp.Compiler.Syntax.SynArgPats: Boolean IsNamePatPairs +FSharp.Compiler.Syntax.SynArgPats: Boolean IsPats +FSharp.Compiler.Syntax.SynArgPats: Boolean get_IsNamePatPairs() +FSharp.Compiler.Syntax.SynArgPats: Boolean get_IsPats() +FSharp.Compiler.Syntax.SynArgPats: FSharp.Compiler.Syntax.SynArgPats NewNamePatPairs(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynPat]], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynArgPats: FSharp.Compiler.Syntax.SynArgPats NewPats(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat]) +FSharp.Compiler.Syntax.SynArgPats: FSharp.Compiler.Syntax.SynArgPats+NamePatPairs +FSharp.Compiler.Syntax.SynArgPats: FSharp.Compiler.Syntax.SynArgPats+Pats +FSharp.Compiler.Syntax.SynArgPats: FSharp.Compiler.Syntax.SynArgPats+Tags +FSharp.Compiler.Syntax.SynArgPats: Int32 Tag +FSharp.Compiler.Syntax.SynArgPats: Int32 get_Tag() +FSharp.Compiler.Syntax.SynArgPats: System.String ToString() +FSharp.Compiler.Syntax.SynAttribute +FSharp.Compiler.Syntax.SynAttribute: Boolean AppliesToGetterAndSetter +FSharp.Compiler.Syntax.SynAttribute: Boolean get_AppliesToGetterAndSetter() +FSharp.Compiler.Syntax.SynAttribute: FSharp.Compiler.Syntax.LongIdentWithDots TypeName +FSharp.Compiler.Syntax.SynAttribute: FSharp.Compiler.Syntax.LongIdentWithDots get_TypeName() +FSharp.Compiler.Syntax.SynAttribute: FSharp.Compiler.Syntax.SynExpr ArgExpr +FSharp.Compiler.Syntax.SynAttribute: FSharp.Compiler.Syntax.SynExpr get_ArgExpr() +FSharp.Compiler.Syntax.SynAttribute: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynAttribute: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynAttribute: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] Target +FSharp.Compiler.Syntax.SynAttribute: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_Target() +FSharp.Compiler.Syntax.SynAttribute: System.String ToString() +FSharp.Compiler.Syntax.SynAttribute: Void .ctor(FSharp.Compiler.Syntax.LongIdentWithDots, FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], Boolean, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynAttributeList +FSharp.Compiler.Syntax.SynAttributeList: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynAttributeList: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynAttributeList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttribute] Attributes +FSharp.Compiler.Syntax.SynAttributeList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttribute] get_Attributes() +FSharp.Compiler.Syntax.SynAttributeList: System.String ToString() +FSharp.Compiler.Syntax.SynAttributeList: Void .ctor(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttribute], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynBinding +FSharp.Compiler.Syntax.SynBinding: Boolean get_isMutable() +FSharp.Compiler.Syntax.SynBinding: Boolean get_mustInline() +FSharp.Compiler.Syntax.SynBinding: Boolean isMutable +FSharp.Compiler.Syntax.SynBinding: Boolean mustInline +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.DebugPointAtBinding get_seqPoint() +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.DebugPointAtBinding seqPoint +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynBinding NewSynBinding(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Syntax.SynBindingKind, Boolean, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Xml.PreXmlDoc, FSharp.Compiler.Syntax.SynValData, FSharp.Compiler.Syntax.SynPat, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynBindingReturnInfo], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.DebugPointAtBinding) +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynBindingKind get_kind() +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynBindingKind kind +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynPat get_headPat() +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynPat headPat +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynValData get_valData() +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Syntax.SynValData valData +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Text.Range RangeOfBindingWithRhs +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Text.Range RangeOfBindingWithoutRhs +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Text.Range RangeOfHeadPattern +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Text.Range get_RangeOfBindingWithRhs() +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Text.Range get_RangeOfBindingWithoutRhs() +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Text.Range get_RangeOfHeadPattern() +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() +FSharp.Compiler.Syntax.SynBinding: FSharp.Compiler.Xml.PreXmlDoc xmlDoc +FSharp.Compiler.Syntax.SynBinding: Int32 Tag +FSharp.Compiler.Syntax.SynBinding: Int32 get_Tag() +FSharp.Compiler.Syntax.SynBinding: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes +FSharp.Compiler.Syntax.SynBinding: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() +FSharp.Compiler.Syntax.SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility +FSharp.Compiler.Syntax.SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() +FSharp.Compiler.Syntax.SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynBindingReturnInfo] get_returnInfo() +FSharp.Compiler.Syntax.SynBinding: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynBindingReturnInfo] returnInfo +FSharp.Compiler.Syntax.SynBinding: System.String ToString() +FSharp.Compiler.Syntax.SynBindingKind +FSharp.Compiler.Syntax.SynBindingKind+Tags: Int32 Do +FSharp.Compiler.Syntax.SynBindingKind+Tags: Int32 Normal +FSharp.Compiler.Syntax.SynBindingKind+Tags: Int32 StandaloneExpression +FSharp.Compiler.Syntax.SynBindingKind: Boolean Equals(FSharp.Compiler.Syntax.SynBindingKind) +FSharp.Compiler.Syntax.SynBindingKind: Boolean Equals(System.Object) +FSharp.Compiler.Syntax.SynBindingKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.SynBindingKind: Boolean IsDo +FSharp.Compiler.Syntax.SynBindingKind: Boolean IsNormal +FSharp.Compiler.Syntax.SynBindingKind: Boolean IsStandaloneExpression +FSharp.Compiler.Syntax.SynBindingKind: Boolean get_IsDo() +FSharp.Compiler.Syntax.SynBindingKind: Boolean get_IsNormal() +FSharp.Compiler.Syntax.SynBindingKind: Boolean get_IsStandaloneExpression() +FSharp.Compiler.Syntax.SynBindingKind: FSharp.Compiler.Syntax.SynBindingKind Do +FSharp.Compiler.Syntax.SynBindingKind: FSharp.Compiler.Syntax.SynBindingKind Normal +FSharp.Compiler.Syntax.SynBindingKind: FSharp.Compiler.Syntax.SynBindingKind StandaloneExpression +FSharp.Compiler.Syntax.SynBindingKind: FSharp.Compiler.Syntax.SynBindingKind get_Do() +FSharp.Compiler.Syntax.SynBindingKind: FSharp.Compiler.Syntax.SynBindingKind get_Normal() +FSharp.Compiler.Syntax.SynBindingKind: FSharp.Compiler.Syntax.SynBindingKind get_StandaloneExpression() +FSharp.Compiler.Syntax.SynBindingKind: FSharp.Compiler.Syntax.SynBindingKind+Tags +FSharp.Compiler.Syntax.SynBindingKind: Int32 CompareTo(FSharp.Compiler.Syntax.SynBindingKind) +FSharp.Compiler.Syntax.SynBindingKind: Int32 CompareTo(System.Object) +FSharp.Compiler.Syntax.SynBindingKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.Syntax.SynBindingKind: Int32 GetHashCode() +FSharp.Compiler.Syntax.SynBindingKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.SynBindingKind: Int32 Tag +FSharp.Compiler.Syntax.SynBindingKind: Int32 get_Tag() +FSharp.Compiler.Syntax.SynBindingKind: System.String ToString() +FSharp.Compiler.Syntax.SynBindingReturnInfo +FSharp.Compiler.Syntax.SynBindingReturnInfo: FSharp.Compiler.Syntax.SynBindingReturnInfo NewSynBindingReturnInfo(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList]) +FSharp.Compiler.Syntax.SynBindingReturnInfo: FSharp.Compiler.Syntax.SynType get_typeName() +FSharp.Compiler.Syntax.SynBindingReturnInfo: FSharp.Compiler.Syntax.SynType typeName +FSharp.Compiler.Syntax.SynBindingReturnInfo: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynBindingReturnInfo: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynBindingReturnInfo: Int32 Tag +FSharp.Compiler.Syntax.SynBindingReturnInfo: Int32 get_Tag() +FSharp.Compiler.Syntax.SynBindingReturnInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes +FSharp.Compiler.Syntax.SynBindingReturnInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() +FSharp.Compiler.Syntax.SynBindingReturnInfo: System.String ToString() +FSharp.Compiler.Syntax.SynByteStringKind +FSharp.Compiler.Syntax.SynByteStringKind+Tags: Int32 Regular +FSharp.Compiler.Syntax.SynByteStringKind+Tags: Int32 Verbatim +FSharp.Compiler.Syntax.SynByteStringKind: Boolean Equals(FSharp.Compiler.Syntax.SynByteStringKind) +FSharp.Compiler.Syntax.SynByteStringKind: Boolean Equals(System.Object) +FSharp.Compiler.Syntax.SynByteStringKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.SynByteStringKind: Boolean IsRegular +FSharp.Compiler.Syntax.SynByteStringKind: Boolean IsVerbatim +FSharp.Compiler.Syntax.SynByteStringKind: Boolean get_IsRegular() +FSharp.Compiler.Syntax.SynByteStringKind: Boolean get_IsVerbatim() +FSharp.Compiler.Syntax.SynByteStringKind: FSharp.Compiler.Syntax.SynByteStringKind Regular +FSharp.Compiler.Syntax.SynByteStringKind: FSharp.Compiler.Syntax.SynByteStringKind Verbatim +FSharp.Compiler.Syntax.SynByteStringKind: FSharp.Compiler.Syntax.SynByteStringKind get_Regular() +FSharp.Compiler.Syntax.SynByteStringKind: FSharp.Compiler.Syntax.SynByteStringKind get_Verbatim() +FSharp.Compiler.Syntax.SynByteStringKind: FSharp.Compiler.Syntax.SynByteStringKind+Tags +FSharp.Compiler.Syntax.SynByteStringKind: Int32 CompareTo(FSharp.Compiler.Syntax.SynByteStringKind) +FSharp.Compiler.Syntax.SynByteStringKind: Int32 CompareTo(System.Object) +FSharp.Compiler.Syntax.SynByteStringKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.Syntax.SynByteStringKind: Int32 GetHashCode() +FSharp.Compiler.Syntax.SynByteStringKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.SynByteStringKind: Int32 Tag +FSharp.Compiler.Syntax.SynByteStringKind: Int32 get_Tag() +FSharp.Compiler.Syntax.SynByteStringKind: System.String ToString() +FSharp.Compiler.Syntax.SynComponentInfo +FSharp.Compiler.Syntax.SynComponentInfo: Boolean get_preferPostfix() +FSharp.Compiler.Syntax.SynComponentInfo: Boolean preferPostfix +FSharp.Compiler.Syntax.SynComponentInfo: FSharp.Compiler.Syntax.SynComponentInfo NewSynComponentInfo(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynTyparDecls], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Xml.PreXmlDoc, Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynComponentInfo: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynComponentInfo: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynComponentInfo: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynComponentInfo: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynComponentInfo: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() +FSharp.Compiler.Syntax.SynComponentInfo: FSharp.Compiler.Xml.PreXmlDoc xmlDoc +FSharp.Compiler.Syntax.SynComponentInfo: Int32 Tag +FSharp.Compiler.Syntax.SynComponentInfo: Int32 get_Tag() +FSharp.Compiler.Syntax.SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() +FSharp.Compiler.Syntax.SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId +FSharp.Compiler.Syntax.SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes +FSharp.Compiler.Syntax.SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() +FSharp.Compiler.Syntax.SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint] constraints +FSharp.Compiler.Syntax.SynComponentInfo: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint] get_constraints() +FSharp.Compiler.Syntax.SynComponentInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility +FSharp.Compiler.Syntax.SynComponentInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() +FSharp.Compiler.Syntax.SynComponentInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynTyparDecls] get_typeParams() +FSharp.Compiler.Syntax.SynComponentInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynTyparDecls] typeParams +FSharp.Compiler.Syntax.SynComponentInfo: System.String ToString() +FSharp.Compiler.Syntax.SynConst +FSharp.Compiler.Syntax.SynConst+Bool: Boolean Item +FSharp.Compiler.Syntax.SynConst+Bool: Boolean get_Item() +FSharp.Compiler.Syntax.SynConst+Byte: Byte Item +FSharp.Compiler.Syntax.SynConst+Byte: Byte get_Item() +FSharp.Compiler.Syntax.SynConst+Bytes: Byte[] bytes +FSharp.Compiler.Syntax.SynConst+Bytes: Byte[] get_bytes() +FSharp.Compiler.Syntax.SynConst+Bytes: FSharp.Compiler.Syntax.SynByteStringKind get_synByteStringKind() +FSharp.Compiler.Syntax.SynConst+Bytes: FSharp.Compiler.Syntax.SynByteStringKind synByteStringKind +FSharp.Compiler.Syntax.SynConst+Bytes: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynConst+Bytes: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynConst+Char: Char Item +FSharp.Compiler.Syntax.SynConst+Char: Char get_Item() +FSharp.Compiler.Syntax.SynConst+Decimal: System.Decimal Item +FSharp.Compiler.Syntax.SynConst+Decimal: System.Decimal get_Item() +FSharp.Compiler.Syntax.SynConst+Double: Double Item +FSharp.Compiler.Syntax.SynConst+Double: Double get_Item() +FSharp.Compiler.Syntax.SynConst+Int16: Int16 Item +FSharp.Compiler.Syntax.SynConst+Int16: Int16 get_Item() +FSharp.Compiler.Syntax.SynConst+Int32: Int32 Item +FSharp.Compiler.Syntax.SynConst+Int32: Int32 get_Item() +FSharp.Compiler.Syntax.SynConst+Int64: Int64 Item +FSharp.Compiler.Syntax.SynConst+Int64: Int64 get_Item() +FSharp.Compiler.Syntax.SynConst+IntPtr: Int64 Item +FSharp.Compiler.Syntax.SynConst+IntPtr: Int64 get_Item() +FSharp.Compiler.Syntax.SynConst+Measure: FSharp.Compiler.Syntax.SynConst constant +FSharp.Compiler.Syntax.SynConst+Measure: FSharp.Compiler.Syntax.SynConst get_constant() +FSharp.Compiler.Syntax.SynConst+Measure: FSharp.Compiler.Syntax.SynMeasure Item3 +FSharp.Compiler.Syntax.SynConst+Measure: FSharp.Compiler.Syntax.SynMeasure get_Item3() +FSharp.Compiler.Syntax.SynConst+Measure: FSharp.Compiler.Text.Range constantRange +FSharp.Compiler.Syntax.SynConst+Measure: FSharp.Compiler.Text.Range get_constantRange() +FSharp.Compiler.Syntax.SynConst+SByte: SByte Item +FSharp.Compiler.Syntax.SynConst+SByte: SByte get_Item() +FSharp.Compiler.Syntax.SynConst+Single: Single Item +FSharp.Compiler.Syntax.SynConst+Single: Single get_Item() +FSharp.Compiler.Syntax.SynConst+SourceIdentifier: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynConst+SourceIdentifier: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynConst+SourceIdentifier: System.String constant +FSharp.Compiler.Syntax.SynConst+SourceIdentifier: System.String get_constant() +FSharp.Compiler.Syntax.SynConst+SourceIdentifier: System.String get_value() +FSharp.Compiler.Syntax.SynConst+SourceIdentifier: System.String value +FSharp.Compiler.Syntax.SynConst+String: FSharp.Compiler.Syntax.SynStringKind get_synStringKind() +FSharp.Compiler.Syntax.SynConst+String: FSharp.Compiler.Syntax.SynStringKind synStringKind +FSharp.Compiler.Syntax.SynConst+String: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynConst+String: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynConst+String: System.String get_text() +FSharp.Compiler.Syntax.SynConst+String: System.String text +FSharp.Compiler.Syntax.SynConst+Tags: Int32 Bool +FSharp.Compiler.Syntax.SynConst+Tags: Int32 Byte +FSharp.Compiler.Syntax.SynConst+Tags: Int32 Bytes +FSharp.Compiler.Syntax.SynConst+Tags: Int32 Char +FSharp.Compiler.Syntax.SynConst+Tags: Int32 Decimal +FSharp.Compiler.Syntax.SynConst+Tags: Int32 Double +FSharp.Compiler.Syntax.SynConst+Tags: Int32 Int16 +FSharp.Compiler.Syntax.SynConst+Tags: Int32 Int32 +FSharp.Compiler.Syntax.SynConst+Tags: Int32 Int64 +FSharp.Compiler.Syntax.SynConst+Tags: Int32 IntPtr +FSharp.Compiler.Syntax.SynConst+Tags: Int32 Measure +FSharp.Compiler.Syntax.SynConst+Tags: Int32 SByte +FSharp.Compiler.Syntax.SynConst+Tags: Int32 Single +FSharp.Compiler.Syntax.SynConst+Tags: Int32 SourceIdentifier +FSharp.Compiler.Syntax.SynConst+Tags: Int32 String +FSharp.Compiler.Syntax.SynConst+Tags: Int32 UInt16 +FSharp.Compiler.Syntax.SynConst+Tags: Int32 UInt16s +FSharp.Compiler.Syntax.SynConst+Tags: Int32 UInt32 +FSharp.Compiler.Syntax.SynConst+Tags: Int32 UInt64 +FSharp.Compiler.Syntax.SynConst+Tags: Int32 UIntPtr +FSharp.Compiler.Syntax.SynConst+Tags: Int32 Unit +FSharp.Compiler.Syntax.SynConst+Tags: Int32 UserNum +FSharp.Compiler.Syntax.SynConst+UInt16: UInt16 Item +FSharp.Compiler.Syntax.SynConst+UInt16: UInt16 get_Item() +FSharp.Compiler.Syntax.SynConst+UInt16s: UInt16[] Item +FSharp.Compiler.Syntax.SynConst+UInt16s: UInt16[] get_Item() +FSharp.Compiler.Syntax.SynConst+UInt32: UInt32 Item +FSharp.Compiler.Syntax.SynConst+UInt32: UInt32 get_Item() +FSharp.Compiler.Syntax.SynConst+UInt64: UInt64 Item +FSharp.Compiler.Syntax.SynConst+UInt64: UInt64 get_Item() +FSharp.Compiler.Syntax.SynConst+UIntPtr: UInt64 Item +FSharp.Compiler.Syntax.SynConst+UIntPtr: UInt64 get_Item() +FSharp.Compiler.Syntax.SynConst+UserNum: System.String get_suffix() +FSharp.Compiler.Syntax.SynConst+UserNum: System.String get_value() +FSharp.Compiler.Syntax.SynConst+UserNum: System.String suffix +FSharp.Compiler.Syntax.SynConst+UserNum: System.String value +FSharp.Compiler.Syntax.SynConst: Boolean IsBool +FSharp.Compiler.Syntax.SynConst: Boolean IsByte +FSharp.Compiler.Syntax.SynConst: Boolean IsBytes +FSharp.Compiler.Syntax.SynConst: Boolean IsChar +FSharp.Compiler.Syntax.SynConst: Boolean IsDecimal +FSharp.Compiler.Syntax.SynConst: Boolean IsDouble +FSharp.Compiler.Syntax.SynConst: Boolean IsInt16 +FSharp.Compiler.Syntax.SynConst: Boolean IsInt32 +FSharp.Compiler.Syntax.SynConst: Boolean IsInt64 +FSharp.Compiler.Syntax.SynConst: Boolean IsIntPtr +FSharp.Compiler.Syntax.SynConst: Boolean IsMeasure +FSharp.Compiler.Syntax.SynConst: Boolean IsSByte +FSharp.Compiler.Syntax.SynConst: Boolean IsSingle +FSharp.Compiler.Syntax.SynConst: Boolean IsSourceIdentifier +FSharp.Compiler.Syntax.SynConst: Boolean IsString +FSharp.Compiler.Syntax.SynConst: Boolean IsUInt16 +FSharp.Compiler.Syntax.SynConst: Boolean IsUInt16s +FSharp.Compiler.Syntax.SynConst: Boolean IsUInt32 +FSharp.Compiler.Syntax.SynConst: Boolean IsUInt64 +FSharp.Compiler.Syntax.SynConst: Boolean IsUIntPtr +FSharp.Compiler.Syntax.SynConst: Boolean IsUnit +FSharp.Compiler.Syntax.SynConst: Boolean IsUserNum +FSharp.Compiler.Syntax.SynConst: Boolean get_IsBool() +FSharp.Compiler.Syntax.SynConst: Boolean get_IsByte() +FSharp.Compiler.Syntax.SynConst: Boolean get_IsBytes() +FSharp.Compiler.Syntax.SynConst: Boolean get_IsChar() +FSharp.Compiler.Syntax.SynConst: Boolean get_IsDecimal() +FSharp.Compiler.Syntax.SynConst: Boolean get_IsDouble() +FSharp.Compiler.Syntax.SynConst: Boolean get_IsInt16() +FSharp.Compiler.Syntax.SynConst: Boolean get_IsInt32() +FSharp.Compiler.Syntax.SynConst: Boolean get_IsInt64() +FSharp.Compiler.Syntax.SynConst: Boolean get_IsIntPtr() +FSharp.Compiler.Syntax.SynConst: Boolean get_IsMeasure() +FSharp.Compiler.Syntax.SynConst: Boolean get_IsSByte() +FSharp.Compiler.Syntax.SynConst: Boolean get_IsSingle() +FSharp.Compiler.Syntax.SynConst: Boolean get_IsSourceIdentifier() +FSharp.Compiler.Syntax.SynConst: Boolean get_IsString() +FSharp.Compiler.Syntax.SynConst: Boolean get_IsUInt16() +FSharp.Compiler.Syntax.SynConst: Boolean get_IsUInt16s() +FSharp.Compiler.Syntax.SynConst: Boolean get_IsUInt32() +FSharp.Compiler.Syntax.SynConst: Boolean get_IsUInt64() +FSharp.Compiler.Syntax.SynConst: Boolean get_IsUIntPtr() +FSharp.Compiler.Syntax.SynConst: Boolean get_IsUnit() +FSharp.Compiler.Syntax.SynConst: Boolean get_IsUserNum() +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewBool(Boolean) +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewByte(Byte) +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewBytes(Byte[], FSharp.Compiler.Syntax.SynByteStringKind, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewChar(Char) +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewDecimal(System.Decimal) +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewDouble(Double) +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewInt16(Int16) +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewInt32(Int32) +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewInt64(Int64) +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewIntPtr(Int64) +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewMeasure(FSharp.Compiler.Syntax.SynConst, FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.SynMeasure) +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewSByte(SByte) +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewSingle(Single) +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewSourceIdentifier(System.String, System.String, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewString(System.String, FSharp.Compiler.Syntax.SynStringKind, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewUInt16(UInt16) +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewUInt16s(UInt16[]) +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewUInt32(UInt32) +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewUInt64(UInt64) +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewUIntPtr(UInt64) +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst NewUserNum(System.String, System.String) +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst Unit +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst get_Unit() +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Bool +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Byte +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Bytes +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Char +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Decimal +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Double +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Int16 +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Int32 +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Int64 +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+IntPtr +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Measure +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+SByte +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Single +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+SourceIdentifier +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+String +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+Tags +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+UInt16 +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+UInt16s +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+UInt32 +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+UInt64 +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+UIntPtr +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Syntax.SynConst+UserNum +FSharp.Compiler.Syntax.SynConst: FSharp.Compiler.Text.Range Range(FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynConst: Int32 Tag +FSharp.Compiler.Syntax.SynConst: Int32 get_Tag() +FSharp.Compiler.Syntax.SynConst: System.String ToString() +FSharp.Compiler.Syntax.SynEnumCase +FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Syntax.Ident get_ident() +FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Syntax.Ident ident +FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Syntax.SynConst get_value() +FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Syntax.SynConst value +FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Syntax.SynEnumCase NewSynEnumCase(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Syntax.Ident, FSharp.Compiler.Syntax.SynConst, FSharp.Compiler.Text.Range, FSharp.Compiler.Xml.PreXmlDoc, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Text.Range get_valueRange() +FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Text.Range valueRange +FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() +FSharp.Compiler.Syntax.SynEnumCase: FSharp.Compiler.Xml.PreXmlDoc xmlDoc +FSharp.Compiler.Syntax.SynEnumCase: Int32 Tag +FSharp.Compiler.Syntax.SynEnumCase: Int32 get_Tag() +FSharp.Compiler.Syntax.SynEnumCase: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes +FSharp.Compiler.Syntax.SynEnumCase: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() +FSharp.Compiler.Syntax.SynEnumCase: System.String ToString() +FSharp.Compiler.Syntax.SynExceptionDefn +FSharp.Compiler.Syntax.SynExceptionDefn: FSharp.Compiler.Syntax.SynExceptionDefn NewSynExceptionDefn(FSharp.Compiler.Syntax.SynExceptionDefnRepr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExceptionDefn: FSharp.Compiler.Syntax.SynExceptionDefnRepr exnRepr +FSharp.Compiler.Syntax.SynExceptionDefn: FSharp.Compiler.Syntax.SynExceptionDefnRepr get_exnRepr() +FSharp.Compiler.Syntax.SynExceptionDefn: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynExceptionDefn: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynExceptionDefn: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExceptionDefn: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExceptionDefn: Int32 Tag +FSharp.Compiler.Syntax.SynExceptionDefn: Int32 get_Tag() +FSharp.Compiler.Syntax.SynExceptionDefn: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn] get_members() +FSharp.Compiler.Syntax.SynExceptionDefn: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn] members +FSharp.Compiler.Syntax.SynExceptionDefn: System.String ToString() +FSharp.Compiler.Syntax.SynExceptionDefnRepr +FSharp.Compiler.Syntax.SynExceptionDefnRepr: FSharp.Compiler.Syntax.SynExceptionDefnRepr NewSynExceptionDefnRepr(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Syntax.SynUnionCase, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident]], FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExceptionDefnRepr: FSharp.Compiler.Syntax.SynUnionCase caseName +FSharp.Compiler.Syntax.SynExceptionDefnRepr: FSharp.Compiler.Syntax.SynUnionCase get_caseName() +FSharp.Compiler.Syntax.SynExceptionDefnRepr: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynExceptionDefnRepr: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynExceptionDefnRepr: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExceptionDefnRepr: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExceptionDefnRepr: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() +FSharp.Compiler.Syntax.SynExceptionDefnRepr: FSharp.Compiler.Xml.PreXmlDoc xmlDoc +FSharp.Compiler.Syntax.SynExceptionDefnRepr: Int32 Tag +FSharp.Compiler.Syntax.SynExceptionDefnRepr: Int32 get_Tag() +FSharp.Compiler.Syntax.SynExceptionDefnRepr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes +FSharp.Compiler.Syntax.SynExceptionDefnRepr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() +FSharp.Compiler.Syntax.SynExceptionDefnRepr: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility +FSharp.Compiler.Syntax.SynExceptionDefnRepr: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() +FSharp.Compiler.Syntax.SynExceptionDefnRepr: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident]] get_longId() +FSharp.Compiler.Syntax.SynExceptionDefnRepr: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident]] longId +FSharp.Compiler.Syntax.SynExceptionDefnRepr: System.String ToString() +FSharp.Compiler.Syntax.SynExceptionSig +FSharp.Compiler.Syntax.SynExceptionSig: FSharp.Compiler.Syntax.SynExceptionDefnRepr exnRepr +FSharp.Compiler.Syntax.SynExceptionSig: FSharp.Compiler.Syntax.SynExceptionDefnRepr get_exnRepr() +FSharp.Compiler.Syntax.SynExceptionSig: FSharp.Compiler.Syntax.SynExceptionSig NewSynExceptionSig(FSharp.Compiler.Syntax.SynExceptionDefnRepr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExceptionSig: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExceptionSig: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExceptionSig: Int32 Tag +FSharp.Compiler.Syntax.SynExceptionSig: Int32 get_Tag() +FSharp.Compiler.Syntax.SynExceptionSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig] get_members() +FSharp.Compiler.Syntax.SynExceptionSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig] members +FSharp.Compiler.Syntax.SynExceptionSig: System.String ToString() +FSharp.Compiler.Syntax.SynExpr +FSharp.Compiler.Syntax.SynExpr+AddressOf: Boolean get_isByref() +FSharp.Compiler.Syntax.SynExpr+AddressOf: Boolean isByref +FSharp.Compiler.Syntax.SynExpr+AddressOf: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+AddressOf: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+AddressOf: FSharp.Compiler.Text.Range get_opRange() +FSharp.Compiler.Syntax.SynExpr+AddressOf: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+AddressOf: FSharp.Compiler.Text.Range opRange +FSharp.Compiler.Syntax.SynExpr+AddressOf: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+AnonRecd: Boolean get_isStruct() +FSharp.Compiler.Syntax.SynExpr+AnonRecd: Boolean isStruct +FSharp.Compiler.Syntax.SynExpr+AnonRecd: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+AnonRecd: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynExpr]] get_recordFields() +FSharp.Compiler.Syntax.SynExpr+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynExpr]] recordFields +FSharp.Compiler.Syntax.SynExpr+AnonRecd: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]] copyInfo +FSharp.Compiler.Syntax.SynExpr+AnonRecd: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]] get_copyInfo() +FSharp.Compiler.Syntax.SynExpr+App: Boolean get_isInfix() +FSharp.Compiler.Syntax.SynExpr+App: Boolean isInfix +FSharp.Compiler.Syntax.SynExpr+App: FSharp.Compiler.Syntax.ExprAtomicFlag flag +FSharp.Compiler.Syntax.SynExpr+App: FSharp.Compiler.Syntax.ExprAtomicFlag get_flag() +FSharp.Compiler.Syntax.SynExpr+App: FSharp.Compiler.Syntax.SynExpr argExpr +FSharp.Compiler.Syntax.SynExpr+App: FSharp.Compiler.Syntax.SynExpr funcExpr +FSharp.Compiler.Syntax.SynExpr+App: FSharp.Compiler.Syntax.SynExpr get_argExpr() +FSharp.Compiler.Syntax.SynExpr+App: FSharp.Compiler.Syntax.SynExpr get_funcExpr() +FSharp.Compiler.Syntax.SynExpr+App: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+App: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+ArbitraryAfterError: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+ArbitraryAfterError: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+ArbitraryAfterError: System.String debugStr +FSharp.Compiler.Syntax.SynExpr+ArbitraryAfterError: System.String get_debugStr() +FSharp.Compiler.Syntax.SynExpr+ArrayOrList: Boolean get_isArray() +FSharp.Compiler.Syntax.SynExpr+ArrayOrList: Boolean isArray +FSharp.Compiler.Syntax.SynExpr+ArrayOrList: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+ArrayOrList: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+ArrayOrList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr] exprs +FSharp.Compiler.Syntax.SynExpr+ArrayOrList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr] get_exprs() +FSharp.Compiler.Syntax.SynExpr+ArrayOrListOfSeqExpr: Boolean get_isArray() +FSharp.Compiler.Syntax.SynExpr+ArrayOrListOfSeqExpr: Boolean isArray +FSharp.Compiler.Syntax.SynExpr+ArrayOrListOfSeqExpr: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+ArrayOrListOfSeqExpr: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+ArrayOrListOfSeqExpr: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+ArrayOrListOfSeqExpr: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+Assert: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+Assert: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+Assert: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+Assert: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+CompExpr: Boolean get_isArrayOrList() +FSharp.Compiler.Syntax.SynExpr+CompExpr: Boolean isArrayOrList +FSharp.Compiler.Syntax.SynExpr+CompExpr: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+CompExpr: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+CompExpr: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+CompExpr: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+CompExpr: Microsoft.FSharp.Core.FSharpRef`1[System.Boolean] get_isNotNakedRefCell() +FSharp.Compiler.Syntax.SynExpr+CompExpr: Microsoft.FSharp.Core.FSharpRef`1[System.Boolean] isNotNakedRefCell +FSharp.Compiler.Syntax.SynExpr+Const: FSharp.Compiler.Syntax.SynConst constant +FSharp.Compiler.Syntax.SynExpr+Const: FSharp.Compiler.Syntax.SynConst get_constant() +FSharp.Compiler.Syntax.SynExpr+Const: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+Const: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+Do: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+Do: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+Do: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+Do: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+DoBang: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+DoBang: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+DoBang: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+DoBang: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+DotGet: FSharp.Compiler.Syntax.LongIdentWithDots get_longDotId() +FSharp.Compiler.Syntax.SynExpr+DotGet: FSharp.Compiler.Syntax.LongIdentWithDots longDotId +FSharp.Compiler.Syntax.SynExpr+DotGet: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+DotGet: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+DotGet: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+DotGet: FSharp.Compiler.Text.Range get_rangeOfDot() +FSharp.Compiler.Syntax.SynExpr+DotGet: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+DotGet: FSharp.Compiler.Text.Range rangeOfDot +FSharp.Compiler.Syntax.SynExpr+DotIndexedGet: FSharp.Compiler.Syntax.SynExpr get_objectExpr() +FSharp.Compiler.Syntax.SynExpr+DotIndexedGet: FSharp.Compiler.Syntax.SynExpr objectExpr +FSharp.Compiler.Syntax.SynExpr+DotIndexedGet: FSharp.Compiler.Text.Range dotRange +FSharp.Compiler.Syntax.SynExpr+DotIndexedGet: FSharp.Compiler.Text.Range get_dotRange() +FSharp.Compiler.Syntax.SynExpr+DotIndexedGet: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+DotIndexedGet: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+DotIndexedGet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynIndexerArg] get_indexExprs() +FSharp.Compiler.Syntax.SynExpr+DotIndexedGet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynIndexerArg] indexExprs +FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: FSharp.Compiler.Syntax.SynExpr get_objectExpr() +FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: FSharp.Compiler.Syntax.SynExpr get_valueExpr() +FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: FSharp.Compiler.Syntax.SynExpr objectExpr +FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: FSharp.Compiler.Syntax.SynExpr valueExpr +FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: FSharp.Compiler.Text.Range dotRange +FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: FSharp.Compiler.Text.Range get_dotRange() +FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: FSharp.Compiler.Text.Range get_leftOfSetRange() +FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: FSharp.Compiler.Text.Range leftOfSetRange +FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynIndexerArg] get_indexExprs() +FSharp.Compiler.Syntax.SynExpr+DotIndexedSet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynIndexerArg] indexExprs +FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet: FSharp.Compiler.Syntax.LongIdentWithDots get_longDotId() +FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet: FSharp.Compiler.Syntax.LongIdentWithDots longDotId +FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet: FSharp.Compiler.Syntax.SynExpr argExpr +FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet: FSharp.Compiler.Syntax.SynExpr get_argExpr() +FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet: FSharp.Compiler.Syntax.SynExpr get_rhsExpr() +FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet: FSharp.Compiler.Syntax.SynExpr get_targetExpr() +FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet: FSharp.Compiler.Syntax.SynExpr rhsExpr +FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet: FSharp.Compiler.Syntax.SynExpr targetExpr +FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+DotSet: FSharp.Compiler.Syntax.LongIdentWithDots get_longDotId() +FSharp.Compiler.Syntax.SynExpr+DotSet: FSharp.Compiler.Syntax.LongIdentWithDots longDotId +FSharp.Compiler.Syntax.SynExpr+DotSet: FSharp.Compiler.Syntax.SynExpr get_rhsExpr() +FSharp.Compiler.Syntax.SynExpr+DotSet: FSharp.Compiler.Syntax.SynExpr get_targetExpr() +FSharp.Compiler.Syntax.SynExpr+DotSet: FSharp.Compiler.Syntax.SynExpr rhsExpr +FSharp.Compiler.Syntax.SynExpr+DotSet: FSharp.Compiler.Syntax.SynExpr targetExpr +FSharp.Compiler.Syntax.SynExpr+DotSet: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+DotSet: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+Downcast: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+Downcast: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+Downcast: FSharp.Compiler.Syntax.SynType get_targetType() +FSharp.Compiler.Syntax.SynExpr+Downcast: FSharp.Compiler.Syntax.SynType targetType +FSharp.Compiler.Syntax.SynExpr+Downcast: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+Downcast: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+Fixed: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+Fixed: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+Fixed: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+Fixed: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+For: Boolean direction +FSharp.Compiler.Syntax.SynExpr+For: Boolean get_direction() +FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.DebugPointAtFor forSeqPoint +FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.DebugPointAtFor get_forSeqPoint() +FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.Ident get_ident() +FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.Ident ident +FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.SynExpr doBody +FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.SynExpr get_doBody() +FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.SynExpr get_identBody() +FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.SynExpr get_toBody() +FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.SynExpr identBody +FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Syntax.SynExpr toBody +FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+For: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+ForEach: Boolean get_isFromSource() +FSharp.Compiler.Syntax.SynExpr+ForEach: Boolean isFromSource +FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Syntax.DebugPointAtFor forSeqPoint +FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Syntax.DebugPointAtFor get_forSeqPoint() +FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Syntax.SeqExprOnly get_seqExprOnly() +FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Syntax.SeqExprOnly seqExprOnly +FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Syntax.SynExpr bodyExpr +FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Syntax.SynExpr enumExpr +FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Syntax.SynExpr get_bodyExpr() +FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Syntax.SynExpr get_enumExpr() +FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Syntax.SynPat get_pat() +FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Syntax.SynPat pat +FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+ForEach: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+FromParseError: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+FromParseError: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+FromParseError: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+FromParseError: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+Ident: FSharp.Compiler.Syntax.Ident get_ident() +FSharp.Compiler.Syntax.SynExpr+Ident: FSharp.Compiler.Syntax.Ident ident +FSharp.Compiler.Syntax.SynExpr+IfThenElse: Boolean get_isFromErrorRecovery() +FSharp.Compiler.Syntax.SynExpr+IfThenElse: Boolean isFromErrorRecovery +FSharp.Compiler.Syntax.SynExpr+IfThenElse: FSharp.Compiler.Syntax.DebugPointAtBinding get_spIfToThen() +FSharp.Compiler.Syntax.SynExpr+IfThenElse: FSharp.Compiler.Syntax.DebugPointAtBinding spIfToThen +FSharp.Compiler.Syntax.SynExpr+IfThenElse: FSharp.Compiler.Syntax.SynExpr get_ifExpr() +FSharp.Compiler.Syntax.SynExpr+IfThenElse: FSharp.Compiler.Syntax.SynExpr get_thenExpr() +FSharp.Compiler.Syntax.SynExpr+IfThenElse: FSharp.Compiler.Syntax.SynExpr ifExpr +FSharp.Compiler.Syntax.SynExpr+IfThenElse: FSharp.Compiler.Syntax.SynExpr thenExpr +FSharp.Compiler.Syntax.SynExpr+IfThenElse: FSharp.Compiler.Text.Range get_ifToThenRange() +FSharp.Compiler.Syntax.SynExpr+IfThenElse: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+IfThenElse: FSharp.Compiler.Text.Range ifToThenRange +FSharp.Compiler.Syntax.SynExpr+IfThenElse: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+IfThenElse: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr] elseExpr +FSharp.Compiler.Syntax.SynExpr+IfThenElse: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr] get_elseExpr() +FSharp.Compiler.Syntax.SynExpr+ImplicitZero: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+ImplicitZero: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+InferredDowncast: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+InferredDowncast: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+InferredDowncast: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+InferredDowncast: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+InferredUpcast: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+InferredUpcast: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+InferredUpcast: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+InferredUpcast: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+InterpolatedString: FSharp.Compiler.Syntax.SynStringKind get_synStringKind() +FSharp.Compiler.Syntax.SynExpr+InterpolatedString: FSharp.Compiler.Syntax.SynStringKind synStringKind +FSharp.Compiler.Syntax.SynExpr+InterpolatedString: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+InterpolatedString: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+InterpolatedString: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynInterpolatedStringPart] contents +FSharp.Compiler.Syntax.SynExpr+InterpolatedString: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynInterpolatedStringPart] get_contents() +FSharp.Compiler.Syntax.SynExpr+JoinIn: FSharp.Compiler.Syntax.SynExpr get_lhsExpr() +FSharp.Compiler.Syntax.SynExpr+JoinIn: FSharp.Compiler.Syntax.SynExpr get_rhsExpr() +FSharp.Compiler.Syntax.SynExpr+JoinIn: FSharp.Compiler.Syntax.SynExpr lhsExpr +FSharp.Compiler.Syntax.SynExpr+JoinIn: FSharp.Compiler.Syntax.SynExpr rhsExpr +FSharp.Compiler.Syntax.SynExpr+JoinIn: FSharp.Compiler.Text.Range get_lhsRange() +FSharp.Compiler.Syntax.SynExpr+JoinIn: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+JoinIn: FSharp.Compiler.Text.Range lhsRange +FSharp.Compiler.Syntax.SynExpr+JoinIn: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+Lambda: Boolean fromMethod +FSharp.Compiler.Syntax.SynExpr+Lambda: Boolean get_fromMethod() +FSharp.Compiler.Syntax.SynExpr+Lambda: Boolean get_inLambdaSeq() +FSharp.Compiler.Syntax.SynExpr+Lambda: Boolean inLambdaSeq +FSharp.Compiler.Syntax.SynExpr+Lambda: FSharp.Compiler.Syntax.SynExpr body +FSharp.Compiler.Syntax.SynExpr+Lambda: FSharp.Compiler.Syntax.SynExpr get_body() +FSharp.Compiler.Syntax.SynExpr+Lambda: FSharp.Compiler.Syntax.SynSimplePats args +FSharp.Compiler.Syntax.SynExpr+Lambda: FSharp.Compiler.Syntax.SynSimplePats get_args() +FSharp.Compiler.Syntax.SynExpr+Lambda: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+Lambda: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+Lambda: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat],FSharp.Compiler.Syntax.SynExpr]] get_parsedData() +FSharp.Compiler.Syntax.SynExpr+Lambda: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat],FSharp.Compiler.Syntax.SynExpr]] parsedData +FSharp.Compiler.Syntax.SynExpr+Lazy: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+Lazy: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+Lazy: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+Lazy: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+LetOrUse: Boolean get_isRecursive() +FSharp.Compiler.Syntax.SynExpr+LetOrUse: Boolean get_isUse() +FSharp.Compiler.Syntax.SynExpr+LetOrUse: Boolean isRecursive +FSharp.Compiler.Syntax.SynExpr+LetOrUse: Boolean isUse +FSharp.Compiler.Syntax.SynExpr+LetOrUse: FSharp.Compiler.Syntax.SynExpr body +FSharp.Compiler.Syntax.SynExpr+LetOrUse: FSharp.Compiler.Syntax.SynExpr get_body() +FSharp.Compiler.Syntax.SynExpr+LetOrUse: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+LetOrUse: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+LetOrUse: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] bindings +FSharp.Compiler.Syntax.SynExpr+LetOrUse: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] get_bindings() +FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: Boolean get_isFromSource() +FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: Boolean get_isUse() +FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: Boolean isFromSource +FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: Boolean isUse +FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Syntax.DebugPointAtBinding bindSeqPoint +FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Syntax.DebugPointAtBinding get_bindSeqPoint() +FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Syntax.SynExpr body +FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Syntax.SynExpr get_body() +FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Syntax.SynExpr get_rhs() +FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Syntax.SynExpr rhs +FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Syntax.SynPat get_pat() +FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Syntax.SynPat pat +FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`6[FSharp.Compiler.Syntax.DebugPointAtBinding,System.Boolean,System.Boolean,FSharp.Compiler.Syntax.SynPat,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Text.Range]] andBangs +FSharp.Compiler.Syntax.SynExpr+LetOrUseBang: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`6[FSharp.Compiler.Syntax.DebugPointAtBinding,System.Boolean,System.Boolean,FSharp.Compiler.Syntax.SynPat,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Text.Range]] get_andBangs() +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr] args +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr] get_args() +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] get_retTy() +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] get_typeArgs() +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] retTy +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] typeArgs +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: System.Object get_ilCode() +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly: System.Object ilCode +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyStaticOptimization: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyStaticOptimization: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyStaticOptimization: FSharp.Compiler.Syntax.SynExpr get_optimizedExpr() +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyStaticOptimization: FSharp.Compiler.Syntax.SynExpr optimizedExpr +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyStaticOptimization: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyStaticOptimization: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyStaticOptimization: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynStaticOptimizationConstraint] constraints +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyStaticOptimization: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynStaticOptimizationConstraint] get_constraints() +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldGet: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldGet: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldGet: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldGet: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldGet: Int32 fieldNum +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldGet: Int32 get_fieldNum() +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldGet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldGet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet: FSharp.Compiler.Syntax.SynExpr get_rhsExpr() +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet: FSharp.Compiler.Syntax.SynExpr rhsExpr +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet: Int32 fieldNum +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet: Int32 get_fieldNum() +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() +FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId +FSharp.Compiler.Syntax.SynExpr+LongIdent: Boolean get_isOptional() +FSharp.Compiler.Syntax.SynExpr+LongIdent: Boolean isOptional +FSharp.Compiler.Syntax.SynExpr+LongIdent: FSharp.Compiler.Syntax.LongIdentWithDots get_longDotId() +FSharp.Compiler.Syntax.SynExpr+LongIdent: FSharp.Compiler.Syntax.LongIdentWithDots longDotId +FSharp.Compiler.Syntax.SynExpr+LongIdent: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+LongIdent: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo]] altNameRefCell +FSharp.Compiler.Syntax.SynExpr+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo]] get_altNameRefCell() +FSharp.Compiler.Syntax.SynExpr+LongIdentSet: FSharp.Compiler.Syntax.LongIdentWithDots get_longDotId() +FSharp.Compiler.Syntax.SynExpr+LongIdentSet: FSharp.Compiler.Syntax.LongIdentWithDots longDotId +FSharp.Compiler.Syntax.SynExpr+LongIdentSet: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+LongIdentSet: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+LongIdentSet: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+LongIdentSet: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+Match: FSharp.Compiler.Syntax.DebugPointAtBinding get_matchSeqPoint() +FSharp.Compiler.Syntax.SynExpr+Match: FSharp.Compiler.Syntax.DebugPointAtBinding matchSeqPoint +FSharp.Compiler.Syntax.SynExpr+Match: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+Match: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+Match: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+Match: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+Match: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause] clauses +FSharp.Compiler.Syntax.SynExpr+Match: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause] get_clauses() +FSharp.Compiler.Syntax.SynExpr+MatchBang: FSharp.Compiler.Syntax.DebugPointAtBinding get_matchSeqPoint() +FSharp.Compiler.Syntax.SynExpr+MatchBang: FSharp.Compiler.Syntax.DebugPointAtBinding matchSeqPoint +FSharp.Compiler.Syntax.SynExpr+MatchBang: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+MatchBang: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+MatchBang: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+MatchBang: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+MatchBang: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause] clauses +FSharp.Compiler.Syntax.SynExpr+MatchBang: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause] get_clauses() +FSharp.Compiler.Syntax.SynExpr+MatchLambda: Boolean get_isExnMatch() +FSharp.Compiler.Syntax.SynExpr+MatchLambda: Boolean isExnMatch +FSharp.Compiler.Syntax.SynExpr+MatchLambda: FSharp.Compiler.Syntax.DebugPointAtBinding get_matchSeqPoint() +FSharp.Compiler.Syntax.SynExpr+MatchLambda: FSharp.Compiler.Syntax.DebugPointAtBinding matchSeqPoint +FSharp.Compiler.Syntax.SynExpr+MatchLambda: FSharp.Compiler.Text.Range get_keywordRange() +FSharp.Compiler.Syntax.SynExpr+MatchLambda: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+MatchLambda: FSharp.Compiler.Text.Range keywordRange +FSharp.Compiler.Syntax.SynExpr+MatchLambda: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+MatchLambda: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause] get_matchClauses() +FSharp.Compiler.Syntax.SynExpr+MatchLambda: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause] matchClauses +FSharp.Compiler.Syntax.SynExpr+NamedIndexedPropertySet: FSharp.Compiler.Syntax.LongIdentWithDots get_longDotId() +FSharp.Compiler.Syntax.SynExpr+NamedIndexedPropertySet: FSharp.Compiler.Syntax.LongIdentWithDots longDotId +FSharp.Compiler.Syntax.SynExpr+NamedIndexedPropertySet: FSharp.Compiler.Syntax.SynExpr expr1 +FSharp.Compiler.Syntax.SynExpr+NamedIndexedPropertySet: FSharp.Compiler.Syntax.SynExpr expr2 +FSharp.Compiler.Syntax.SynExpr+NamedIndexedPropertySet: FSharp.Compiler.Syntax.SynExpr get_expr1() +FSharp.Compiler.Syntax.SynExpr+NamedIndexedPropertySet: FSharp.Compiler.Syntax.SynExpr get_expr2() +FSharp.Compiler.Syntax.SynExpr+NamedIndexedPropertySet: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+NamedIndexedPropertySet: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+New: Boolean get_isProtected() +FSharp.Compiler.Syntax.SynExpr+New: Boolean isProtected +FSharp.Compiler.Syntax.SynExpr+New: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+New: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+New: FSharp.Compiler.Syntax.SynType get_targetType() +FSharp.Compiler.Syntax.SynExpr+New: FSharp.Compiler.Syntax.SynType targetType +FSharp.Compiler.Syntax.SynExpr+New: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+New: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+Null: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+Null: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+ObjExpr: FSharp.Compiler.Syntax.SynType get_objType() +FSharp.Compiler.Syntax.SynExpr+ObjExpr: FSharp.Compiler.Syntax.SynType objType +FSharp.Compiler.Syntax.SynExpr+ObjExpr: FSharp.Compiler.Text.Range get_newExprRange() +FSharp.Compiler.Syntax.SynExpr+ObjExpr: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+ObjExpr: FSharp.Compiler.Text.Range newExprRange +FSharp.Compiler.Syntax.SynExpr+ObjExpr: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+ObjExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] bindings +FSharp.Compiler.Syntax.SynExpr+ObjExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] get_bindings() +FSharp.Compiler.Syntax.SynExpr+ObjExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynInterfaceImpl] extraImpls +FSharp.Compiler.Syntax.SynExpr+ObjExpr: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynInterfaceImpl] get_extraImpls() +FSharp.Compiler.Syntax.SynExpr+ObjExpr: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident]]] argOptions +FSharp.Compiler.Syntax.SynExpr+ObjExpr: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident]]] get_argOptions() +FSharp.Compiler.Syntax.SynExpr+Paren: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+Paren: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+Paren: FSharp.Compiler.Text.Range get_leftParenRange() +FSharp.Compiler.Syntax.SynExpr+Paren: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+Paren: FSharp.Compiler.Text.Range leftParenRange +FSharp.Compiler.Syntax.SynExpr+Paren: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+Paren: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_rightParenRange() +FSharp.Compiler.Syntax.SynExpr+Paren: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] rightParenRange +FSharp.Compiler.Syntax.SynExpr+Quote: Boolean get_isFromQueryExpression() +FSharp.Compiler.Syntax.SynExpr+Quote: Boolean get_isRaw() +FSharp.Compiler.Syntax.SynExpr+Quote: Boolean isFromQueryExpression +FSharp.Compiler.Syntax.SynExpr+Quote: Boolean isRaw +FSharp.Compiler.Syntax.SynExpr+Quote: FSharp.Compiler.Syntax.SynExpr get_operator() +FSharp.Compiler.Syntax.SynExpr+Quote: FSharp.Compiler.Syntax.SynExpr get_quotedExpr() +FSharp.Compiler.Syntax.SynExpr+Quote: FSharp.Compiler.Syntax.SynExpr operator +FSharp.Compiler.Syntax.SynExpr+Quote: FSharp.Compiler.Syntax.SynExpr quotedExpr +FSharp.Compiler.Syntax.SynExpr+Quote: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+Quote: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+Record: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+Record: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Tuple`2[FSharp.Compiler.Syntax.LongIdentWithDots,System.Boolean],Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr],Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]]] get_recordFields() +FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Tuple`2[FSharp.Compiler.Syntax.LongIdentWithDots,System.Boolean],Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr],Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]]] recordFields +FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]] copyInfo +FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]] get_copyInfo() +FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]],FSharp.Compiler.Text.Range]] baseInfo +FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]],FSharp.Compiler.Text.Range]] get_baseInfo() +FSharp.Compiler.Syntax.SynExpr+Sequential: Boolean get_isTrueSeq() +FSharp.Compiler.Syntax.SynExpr+Sequential: Boolean isTrueSeq +FSharp.Compiler.Syntax.SynExpr+Sequential: FSharp.Compiler.Syntax.DebugPointAtSequential get_seqPoint() +FSharp.Compiler.Syntax.SynExpr+Sequential: FSharp.Compiler.Syntax.DebugPointAtSequential seqPoint +FSharp.Compiler.Syntax.SynExpr+Sequential: FSharp.Compiler.Syntax.SynExpr expr1 +FSharp.Compiler.Syntax.SynExpr+Sequential: FSharp.Compiler.Syntax.SynExpr expr2 +FSharp.Compiler.Syntax.SynExpr+Sequential: FSharp.Compiler.Syntax.SynExpr get_expr1() +FSharp.Compiler.Syntax.SynExpr+Sequential: FSharp.Compiler.Syntax.SynExpr get_expr2() +FSharp.Compiler.Syntax.SynExpr+Sequential: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+Sequential: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield: FSharp.Compiler.Syntax.DebugPointAtSequential get_seqPoint() +FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield: FSharp.Compiler.Syntax.DebugPointAtSequential seqPoint +FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield: FSharp.Compiler.Syntax.SynExpr expr1 +FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield: FSharp.Compiler.Syntax.SynExpr expr2 +FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield: FSharp.Compiler.Syntax.SynExpr get_expr1() +FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield: FSharp.Compiler.Syntax.SynExpr get_expr2() +FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield: FSharp.Compiler.Syntax.SynExpr get_ifNotStmt() +FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield: FSharp.Compiler.Syntax.SynExpr ifNotStmt +FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+Set: FSharp.Compiler.Syntax.SynExpr get_rhsExpr() +FSharp.Compiler.Syntax.SynExpr+Set: FSharp.Compiler.Syntax.SynExpr get_targetExpr() +FSharp.Compiler.Syntax.SynExpr+Set: FSharp.Compiler.Syntax.SynExpr rhsExpr +FSharp.Compiler.Syntax.SynExpr+Set: FSharp.Compiler.Syntax.SynExpr targetExpr +FSharp.Compiler.Syntax.SynExpr+Set: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+Set: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 AddressOf +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 AnonRecd +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 App +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 ArbitraryAfterError +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 ArrayOrList +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 ArrayOrListOfSeqExpr +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Assert +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 CompExpr +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Const +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 DiscardAfterMissingQualificationAfterDot +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Do +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 DoBang +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 DotGet +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 DotIndexedGet +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 DotIndexedSet +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 DotNamedIndexedPropertySet +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 DotSet +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Downcast +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Fixed +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 For +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 ForEach +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 FromParseError +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Ident +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 IfThenElse +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 ImplicitZero +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 InferredDowncast +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 InferredUpcast +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 InterpolatedString +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 JoinIn +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Lambda +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Lazy +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 LetOrUse +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 LetOrUseBang +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 LibraryOnlyILAssembly +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 LibraryOnlyStaticOptimization +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 LibraryOnlyUnionCaseFieldGet +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 LibraryOnlyUnionCaseFieldSet +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 LongIdent +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 LongIdentSet +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Match +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 MatchBang +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 MatchLambda +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 NamedIndexedPropertySet +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 New +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Null +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 ObjExpr +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Paren +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Quote +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Record +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Sequential +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 SequentialOrImplicitYield +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Set +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 TraitCall +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 TryFinally +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 TryWith +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Tuple +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 TypeApp +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 TypeTest +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Typed +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 Upcast +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 While +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 YieldOrReturn +FSharp.Compiler.Syntax.SynExpr+Tags: Int32 YieldOrReturnFrom +FSharp.Compiler.Syntax.SynExpr+TraitCall: FSharp.Compiler.Syntax.SynExpr argExpr +FSharp.Compiler.Syntax.SynExpr+TraitCall: FSharp.Compiler.Syntax.SynExpr get_argExpr() +FSharp.Compiler.Syntax.SynExpr+TraitCall: FSharp.Compiler.Syntax.SynMemberSig get_traitSig() +FSharp.Compiler.Syntax.SynExpr+TraitCall: FSharp.Compiler.Syntax.SynMemberSig traitSig +FSharp.Compiler.Syntax.SynExpr+TraitCall: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+TraitCall: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+TraitCall: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypar] get_supportTys() +FSharp.Compiler.Syntax.SynExpr+TraitCall: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypar] supportTys +FSharp.Compiler.Syntax.SynExpr+TryFinally: FSharp.Compiler.Syntax.DebugPointAtFinally finallySeqPoint +FSharp.Compiler.Syntax.SynExpr+TryFinally: FSharp.Compiler.Syntax.DebugPointAtFinally get_finallySeqPoint() +FSharp.Compiler.Syntax.SynExpr+TryFinally: FSharp.Compiler.Syntax.DebugPointAtTry get_trySeqPoint() +FSharp.Compiler.Syntax.SynExpr+TryFinally: FSharp.Compiler.Syntax.DebugPointAtTry trySeqPoint +FSharp.Compiler.Syntax.SynExpr+TryFinally: FSharp.Compiler.Syntax.SynExpr finallyExpr +FSharp.Compiler.Syntax.SynExpr+TryFinally: FSharp.Compiler.Syntax.SynExpr get_finallyExpr() +FSharp.Compiler.Syntax.SynExpr+TryFinally: FSharp.Compiler.Syntax.SynExpr get_tryExpr() +FSharp.Compiler.Syntax.SynExpr+TryFinally: FSharp.Compiler.Syntax.SynExpr tryExpr +FSharp.Compiler.Syntax.SynExpr+TryFinally: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+TryFinally: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Syntax.DebugPointAtTry get_trySeqPoint() +FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Syntax.DebugPointAtTry trySeqPoint +FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Syntax.DebugPointAtWith get_withSeqPoint() +FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Syntax.DebugPointAtWith withSeqPoint +FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Syntax.SynExpr get_tryExpr() +FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Syntax.SynExpr tryExpr +FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Text.Range get_tryRange() +FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Text.Range get_withRange() +FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Text.Range tryRange +FSharp.Compiler.Syntax.SynExpr+TryWith: FSharp.Compiler.Text.Range withRange +FSharp.Compiler.Syntax.SynExpr+TryWith: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause] get_withCases() +FSharp.Compiler.Syntax.SynExpr+TryWith: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause] withCases +FSharp.Compiler.Syntax.SynExpr+Tuple: Boolean get_isStruct() +FSharp.Compiler.Syntax.SynExpr+Tuple: Boolean isStruct +FSharp.Compiler.Syntax.SynExpr+Tuple: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+Tuple: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr] exprs +FSharp.Compiler.Syntax.SynExpr+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr] get_exprs() +FSharp.Compiler.Syntax.SynExpr+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range] commaRanges +FSharp.Compiler.Syntax.SynExpr+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range] get_commaRanges() +FSharp.Compiler.Syntax.SynExpr+TypeApp: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+TypeApp: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+TypeApp: FSharp.Compiler.Text.Range get_lessRange() +FSharp.Compiler.Syntax.SynExpr+TypeApp: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+TypeApp: FSharp.Compiler.Text.Range get_typeArgsRange() +FSharp.Compiler.Syntax.SynExpr+TypeApp: FSharp.Compiler.Text.Range lessRange +FSharp.Compiler.Syntax.SynExpr+TypeApp: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+TypeApp: FSharp.Compiler.Text.Range typeArgsRange +FSharp.Compiler.Syntax.SynExpr+TypeApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] get_typeArgs() +FSharp.Compiler.Syntax.SynExpr+TypeApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] typeArgs +FSharp.Compiler.Syntax.SynExpr+TypeApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range] commaRanges +FSharp.Compiler.Syntax.SynExpr+TypeApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range] get_commaRanges() +FSharp.Compiler.Syntax.SynExpr+TypeApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_greaterRange() +FSharp.Compiler.Syntax.SynExpr+TypeApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] greaterRange +FSharp.Compiler.Syntax.SynExpr+TypeTest: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+TypeTest: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+TypeTest: FSharp.Compiler.Syntax.SynType get_targetType() +FSharp.Compiler.Syntax.SynExpr+TypeTest: FSharp.Compiler.Syntax.SynType targetType +FSharp.Compiler.Syntax.SynExpr+TypeTest: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+TypeTest: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+Typed: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+Typed: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+Typed: FSharp.Compiler.Syntax.SynType get_targetType() +FSharp.Compiler.Syntax.SynExpr+Typed: FSharp.Compiler.Syntax.SynType targetType +FSharp.Compiler.Syntax.SynExpr+Typed: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+Typed: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+Upcast: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+Upcast: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+Upcast: FSharp.Compiler.Syntax.SynType get_targetType() +FSharp.Compiler.Syntax.SynExpr+Upcast: FSharp.Compiler.Syntax.SynType targetType +FSharp.Compiler.Syntax.SynExpr+Upcast: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+Upcast: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+While: FSharp.Compiler.Syntax.DebugPointAtWhile get_whileSeqPoint() +FSharp.Compiler.Syntax.SynExpr+While: FSharp.Compiler.Syntax.DebugPointAtWhile whileSeqPoint +FSharp.Compiler.Syntax.SynExpr+While: FSharp.Compiler.Syntax.SynExpr doExpr +FSharp.Compiler.Syntax.SynExpr+While: FSharp.Compiler.Syntax.SynExpr get_doExpr() +FSharp.Compiler.Syntax.SynExpr+While: FSharp.Compiler.Syntax.SynExpr get_whileExpr() +FSharp.Compiler.Syntax.SynExpr+While: FSharp.Compiler.Syntax.SynExpr whileExpr +FSharp.Compiler.Syntax.SynExpr+While: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+While: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+YieldOrReturn: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+YieldOrReturn: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+YieldOrReturn: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+YieldOrReturn: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+YieldOrReturn: System.Tuple`2[System.Boolean,System.Boolean] flags +FSharp.Compiler.Syntax.SynExpr+YieldOrReturn: System.Tuple`2[System.Boolean,System.Boolean] get_flags() +FSharp.Compiler.Syntax.SynExpr+YieldOrReturnFrom: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExpr+YieldOrReturnFrom: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExpr+YieldOrReturnFrom: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExpr+YieldOrReturnFrom: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExpr+YieldOrReturnFrom: System.Tuple`2[System.Boolean,System.Boolean] flags +FSharp.Compiler.Syntax.SynExpr+YieldOrReturnFrom: System.Tuple`2[System.Boolean,System.Boolean] get_flags() +FSharp.Compiler.Syntax.SynExpr: Boolean IsAddressOf +FSharp.Compiler.Syntax.SynExpr: Boolean IsAnonRecd +FSharp.Compiler.Syntax.SynExpr: Boolean IsApp +FSharp.Compiler.Syntax.SynExpr: Boolean IsArbExprAndThusAlreadyReportedError +FSharp.Compiler.Syntax.SynExpr: Boolean IsArbitraryAfterError +FSharp.Compiler.Syntax.SynExpr: Boolean IsArrayOrList +FSharp.Compiler.Syntax.SynExpr: Boolean IsArrayOrListOfSeqExpr +FSharp.Compiler.Syntax.SynExpr: Boolean IsAssert +FSharp.Compiler.Syntax.SynExpr: Boolean IsCompExpr +FSharp.Compiler.Syntax.SynExpr: Boolean IsConst +FSharp.Compiler.Syntax.SynExpr: Boolean IsDiscardAfterMissingQualificationAfterDot +FSharp.Compiler.Syntax.SynExpr: Boolean IsDo +FSharp.Compiler.Syntax.SynExpr: Boolean IsDoBang +FSharp.Compiler.Syntax.SynExpr: Boolean IsDotGet +FSharp.Compiler.Syntax.SynExpr: Boolean IsDotIndexedGet +FSharp.Compiler.Syntax.SynExpr: Boolean IsDotIndexedSet +FSharp.Compiler.Syntax.SynExpr: Boolean IsDotNamedIndexedPropertySet +FSharp.Compiler.Syntax.SynExpr: Boolean IsDotSet +FSharp.Compiler.Syntax.SynExpr: Boolean IsDowncast +FSharp.Compiler.Syntax.SynExpr: Boolean IsFixed +FSharp.Compiler.Syntax.SynExpr: Boolean IsFor +FSharp.Compiler.Syntax.SynExpr: Boolean IsForEach +FSharp.Compiler.Syntax.SynExpr: Boolean IsFromParseError +FSharp.Compiler.Syntax.SynExpr: Boolean IsIdent +FSharp.Compiler.Syntax.SynExpr: Boolean IsIfThenElse +FSharp.Compiler.Syntax.SynExpr: Boolean IsImplicitZero +FSharp.Compiler.Syntax.SynExpr: Boolean IsInferredDowncast +FSharp.Compiler.Syntax.SynExpr: Boolean IsInferredUpcast +FSharp.Compiler.Syntax.SynExpr: Boolean IsInterpolatedString +FSharp.Compiler.Syntax.SynExpr: Boolean IsJoinIn +FSharp.Compiler.Syntax.SynExpr: Boolean IsLambda +FSharp.Compiler.Syntax.SynExpr: Boolean IsLazy +FSharp.Compiler.Syntax.SynExpr: Boolean IsLetOrUse +FSharp.Compiler.Syntax.SynExpr: Boolean IsLetOrUseBang +FSharp.Compiler.Syntax.SynExpr: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.Syntax.SynExpr: Boolean IsLibraryOnlyStaticOptimization +FSharp.Compiler.Syntax.SynExpr: Boolean IsLibraryOnlyUnionCaseFieldGet +FSharp.Compiler.Syntax.SynExpr: Boolean IsLibraryOnlyUnionCaseFieldSet +FSharp.Compiler.Syntax.SynExpr: Boolean IsLongIdent +FSharp.Compiler.Syntax.SynExpr: Boolean IsLongIdentSet +FSharp.Compiler.Syntax.SynExpr: Boolean IsMatch +FSharp.Compiler.Syntax.SynExpr: Boolean IsMatchBang +FSharp.Compiler.Syntax.SynExpr: Boolean IsMatchLambda +FSharp.Compiler.Syntax.SynExpr: Boolean IsNamedIndexedPropertySet +FSharp.Compiler.Syntax.SynExpr: Boolean IsNew +FSharp.Compiler.Syntax.SynExpr: Boolean IsNull +FSharp.Compiler.Syntax.SynExpr: Boolean IsObjExpr +FSharp.Compiler.Syntax.SynExpr: Boolean IsParen +FSharp.Compiler.Syntax.SynExpr: Boolean IsQuote +FSharp.Compiler.Syntax.SynExpr: Boolean IsRecord +FSharp.Compiler.Syntax.SynExpr: Boolean IsSequential +FSharp.Compiler.Syntax.SynExpr: Boolean IsSequentialOrImplicitYield +FSharp.Compiler.Syntax.SynExpr: Boolean IsSet +FSharp.Compiler.Syntax.SynExpr: Boolean IsTraitCall +FSharp.Compiler.Syntax.SynExpr: Boolean IsTryFinally +FSharp.Compiler.Syntax.SynExpr: Boolean IsTryWith +FSharp.Compiler.Syntax.SynExpr: Boolean IsTuple +FSharp.Compiler.Syntax.SynExpr: Boolean IsTypeApp +FSharp.Compiler.Syntax.SynExpr: Boolean IsTypeTest +FSharp.Compiler.Syntax.SynExpr: Boolean IsTyped +FSharp.Compiler.Syntax.SynExpr: Boolean IsUpcast +FSharp.Compiler.Syntax.SynExpr: Boolean IsWhile +FSharp.Compiler.Syntax.SynExpr: Boolean IsYieldOrReturn +FSharp.Compiler.Syntax.SynExpr: Boolean IsYieldOrReturnFrom +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsAddressOf() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsAnonRecd() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsApp() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsArbExprAndThusAlreadyReportedError() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsArbitraryAfterError() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsArrayOrList() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsArrayOrListOfSeqExpr() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsAssert() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsCompExpr() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsConst() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsDiscardAfterMissingQualificationAfterDot() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsDo() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsDoBang() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsDotGet() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsDotIndexedGet() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsDotIndexedSet() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsDotNamedIndexedPropertySet() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsDotSet() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsDowncast() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsFixed() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsFor() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsForEach() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsFromParseError() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsIdent() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsIfThenElse() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsImplicitZero() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsInferredDowncast() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsInferredUpcast() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsInterpolatedString() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsJoinIn() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsLambda() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsLazy() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsLetOrUse() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsLetOrUseBang() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsLibraryOnlyStaticOptimization() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsLibraryOnlyUnionCaseFieldGet() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsLibraryOnlyUnionCaseFieldSet() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsLongIdent() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsLongIdentSet() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsMatch() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsMatchBang() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsMatchLambda() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsNamedIndexedPropertySet() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsNew() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsNull() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsObjExpr() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsParen() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsQuote() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsRecord() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsSequential() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsSequentialOrImplicitYield() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsSet() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsTraitCall() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsTryFinally() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsTryWith() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsTuple() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsTypeApp() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsTypeTest() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsTyped() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsUpcast() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsWhile() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsYieldOrReturn() +FSharp.Compiler.Syntax.SynExpr: Boolean get_IsYieldOrReturnFrom() +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewAddressOf(Boolean, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewAnonRecd(Boolean, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynExpr]], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewApp(FSharp.Compiler.Syntax.ExprAtomicFlag, Boolean, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewArbitraryAfterError(System.String, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewArrayOrList(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewArrayOrListOfSeqExpr(Boolean, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewAssert(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewCompExpr(Boolean, Microsoft.FSharp.Core.FSharpRef`1[System.Boolean], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewConst(FSharp.Compiler.Syntax.SynConst, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDiscardAfterMissingQualificationAfterDot(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDo(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDoBang(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDotGet(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.LongIdentWithDots, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDotIndexedGet(FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynIndexerArg], FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDotIndexedSet(FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynIndexerArg], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDotNamedIndexedPropertySet(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.LongIdentWithDots, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDotSet(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.LongIdentWithDots, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewDowncast(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewFixed(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewFor(FSharp.Compiler.Syntax.DebugPointAtFor, FSharp.Compiler.Syntax.Ident, FSharp.Compiler.Syntax.SynExpr, Boolean, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewForEach(FSharp.Compiler.Syntax.DebugPointAtFor, FSharp.Compiler.Syntax.SeqExprOnly, Boolean, FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewFromParseError(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewIdent(FSharp.Compiler.Syntax.Ident) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewIfThenElse(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr], FSharp.Compiler.Syntax.DebugPointAtBinding, Boolean, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewImplicitZero(FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewInferredDowncast(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewInferredUpcast(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewInterpolatedString(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynInterpolatedStringPart], FSharp.Compiler.Syntax.SynStringKind, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewJoinIn(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLambda(Boolean, Boolean, FSharp.Compiler.Syntax.SynSimplePats, FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat],FSharp.Compiler.Syntax.SynExpr]], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLazy(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLetOrUse(Boolean, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLetOrUseBang(FSharp.Compiler.Syntax.DebugPointAtBinding, Boolean, Boolean, FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`6[FSharp.Compiler.Syntax.DebugPointAtBinding,System.Boolean,System.Boolean,FSharp.Compiler.Syntax.SynPat,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Text.Range]], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLibraryOnlyILAssembly(System.Object, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLibraryOnlyStaticOptimization(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynStaticOptimizationConstraint], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLibraryOnlyUnionCaseFieldGet(FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], Int32, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLibraryOnlyUnionCaseFieldSet(FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], Int32, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLongIdent(Boolean, FSharp.Compiler.Syntax.LongIdentWithDots, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo]], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewLongIdentSet(FSharp.Compiler.Syntax.LongIdentWithDots, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewMatch(FSharp.Compiler.Syntax.DebugPointAtBinding, FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewMatchBang(FSharp.Compiler.Syntax.DebugPointAtBinding, FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewMatchLambda(Boolean, FSharp.Compiler.Text.Range, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause], FSharp.Compiler.Syntax.DebugPointAtBinding, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewNamedIndexedPropertySet(FSharp.Compiler.Syntax.LongIdentWithDots, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewNew(Boolean, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewNull(FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewObjExpr(FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident]]], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynInterfaceImpl], FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewParen(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewQuote(FSharp.Compiler.Syntax.SynExpr, Boolean, FSharp.Compiler.Syntax.SynExpr, Boolean, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewRecord(Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]],FSharp.Compiler.Text.Range]], Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[System.Tuple`2[FSharp.Compiler.Syntax.LongIdentWithDots,System.Boolean],Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr],Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]]], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewSequential(FSharp.Compiler.Syntax.DebugPointAtSequential, Boolean, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewSequentialOrImplicitYield(FSharp.Compiler.Syntax.DebugPointAtSequential, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewSet(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewTraitCall(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypar], FSharp.Compiler.Syntax.SynMemberSig, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewTryFinally(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.DebugPointAtTry, FSharp.Compiler.Syntax.DebugPointAtFinally) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewTryWith(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMatchClause], FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.DebugPointAtTry, FSharp.Compiler.Syntax.DebugPointAtWith) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewTuple(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewTypeApp(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewTypeTest(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewTyped(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewUpcast(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewWhile(FSharp.Compiler.Syntax.DebugPointAtWhile, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewYieldOrReturn(System.Tuple`2[System.Boolean,System.Boolean], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewYieldOrReturnFrom(System.Tuple`2[System.Boolean,System.Boolean], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+AddressOf +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+AnonRecd +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+App +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+ArbitraryAfterError +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+ArrayOrList +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+ArrayOrListOfSeqExpr +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Assert +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+CompExpr +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Const +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+DiscardAfterMissingQualificationAfterDot +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Do +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+DoBang +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+DotGet +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+DotIndexedGet +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+DotIndexedSet +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+DotNamedIndexedPropertySet +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+DotSet +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Downcast +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Fixed +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+For +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+ForEach +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+FromParseError +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Ident +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+IfThenElse +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+ImplicitZero +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+InferredDowncast +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+InferredUpcast +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+InterpolatedString +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+JoinIn +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Lambda +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Lazy +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+LetOrUse +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+LetOrUseBang +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+LibraryOnlyILAssembly +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+LibraryOnlyStaticOptimization +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldGet +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+LibraryOnlyUnionCaseFieldSet +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+LongIdent +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+LongIdentSet +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Match +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+MatchBang +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+MatchLambda +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+NamedIndexedPropertySet +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+New +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Null +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+ObjExpr +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Paren +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Quote +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Record +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Sequential +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+SequentialOrImplicitYield +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Set +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Tags +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+TraitCall +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+TryFinally +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+TryWith +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Tuple +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+TypeApp +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+TypeTest +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Typed +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+Upcast +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+While +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+YieldOrReturn +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr+YieldOrReturnFrom +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Text.Range RangeOfFirstPortion +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Text.Range RangeWithoutAnyExtraDot +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Text.Range get_RangeOfFirstPortion() +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Text.Range get_RangeWithoutAnyExtraDot() +FSharp.Compiler.Syntax.SynExpr: Int32 Tag +FSharp.Compiler.Syntax.SynExpr: Int32 get_Tag() +FSharp.Compiler.Syntax.SynExpr: System.String ToString() +FSharp.Compiler.Syntax.SynField +FSharp.Compiler.Syntax.SynField: Boolean get_isMutable() +FSharp.Compiler.Syntax.SynField: Boolean get_isStatic() +FSharp.Compiler.Syntax.SynField: Boolean isMutable +FSharp.Compiler.Syntax.SynField: Boolean isStatic +FSharp.Compiler.Syntax.SynField: FSharp.Compiler.Syntax.SynField NewSynField(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Syntax.SynType, Boolean, FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynField: FSharp.Compiler.Syntax.SynType fieldType +FSharp.Compiler.Syntax.SynField: FSharp.Compiler.Syntax.SynType get_fieldType() +FSharp.Compiler.Syntax.SynField: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynField: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynField: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() +FSharp.Compiler.Syntax.SynField: FSharp.Compiler.Xml.PreXmlDoc xmlDoc +FSharp.Compiler.Syntax.SynField: Int32 Tag +FSharp.Compiler.Syntax.SynField: Int32 get_Tag() +FSharp.Compiler.Syntax.SynField: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes +FSharp.Compiler.Syntax.SynField: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() +FSharp.Compiler.Syntax.SynField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_idOpt() +FSharp.Compiler.Syntax.SynField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] idOpt +FSharp.Compiler.Syntax.SynField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility +FSharp.Compiler.Syntax.SynField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() +FSharp.Compiler.Syntax.SynField: System.String ToString() +FSharp.Compiler.Syntax.SynIndexerArg +FSharp.Compiler.Syntax.SynIndexerArg+One: Boolean fromEnd +FSharp.Compiler.Syntax.SynIndexerArg+One: Boolean get_fromEnd() +FSharp.Compiler.Syntax.SynIndexerArg+One: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynIndexerArg+One: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynIndexerArg+One: FSharp.Compiler.Text.Range Item3 +FSharp.Compiler.Syntax.SynIndexerArg+One: FSharp.Compiler.Text.Range get_Item3() +FSharp.Compiler.Syntax.SynIndexerArg+Tags: Int32 One +FSharp.Compiler.Syntax.SynIndexerArg+Tags: Int32 Two +FSharp.Compiler.Syntax.SynIndexerArg+Two: Boolean fromEnd1 +FSharp.Compiler.Syntax.SynIndexerArg+Two: Boolean fromEnd2 +FSharp.Compiler.Syntax.SynIndexerArg+Two: Boolean get_fromEnd1() +FSharp.Compiler.Syntax.SynIndexerArg+Two: Boolean get_fromEnd2() +FSharp.Compiler.Syntax.SynIndexerArg+Two: FSharp.Compiler.Syntax.SynExpr expr1 +FSharp.Compiler.Syntax.SynIndexerArg+Two: FSharp.Compiler.Syntax.SynExpr expr2 +FSharp.Compiler.Syntax.SynIndexerArg+Two: FSharp.Compiler.Syntax.SynExpr get_expr1() +FSharp.Compiler.Syntax.SynIndexerArg+Two: FSharp.Compiler.Syntax.SynExpr get_expr2() +FSharp.Compiler.Syntax.SynIndexerArg+Two: FSharp.Compiler.Text.Range get_range1() +FSharp.Compiler.Syntax.SynIndexerArg+Two: FSharp.Compiler.Text.Range get_range2() +FSharp.Compiler.Syntax.SynIndexerArg+Two: FSharp.Compiler.Text.Range range1 +FSharp.Compiler.Syntax.SynIndexerArg+Two: FSharp.Compiler.Text.Range range2 +FSharp.Compiler.Syntax.SynIndexerArg: Boolean IsOne +FSharp.Compiler.Syntax.SynIndexerArg: Boolean IsTwo +FSharp.Compiler.Syntax.SynIndexerArg: Boolean get_IsOne() +FSharp.Compiler.Syntax.SynIndexerArg: Boolean get_IsTwo() +FSharp.Compiler.Syntax.SynIndexerArg: FSharp.Compiler.Syntax.SynIndexerArg NewOne(FSharp.Compiler.Syntax.SynExpr, Boolean, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynIndexerArg: FSharp.Compiler.Syntax.SynIndexerArg NewTwo(FSharp.Compiler.Syntax.SynExpr, Boolean, FSharp.Compiler.Syntax.SynExpr, Boolean, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynIndexerArg: FSharp.Compiler.Syntax.SynIndexerArg+One +FSharp.Compiler.Syntax.SynIndexerArg: FSharp.Compiler.Syntax.SynIndexerArg+Tags +FSharp.Compiler.Syntax.SynIndexerArg: FSharp.Compiler.Syntax.SynIndexerArg+Two +FSharp.Compiler.Syntax.SynIndexerArg: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynIndexerArg: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynIndexerArg: Int32 Tag +FSharp.Compiler.Syntax.SynIndexerArg: Int32 get_Tag() +FSharp.Compiler.Syntax.SynIndexerArg: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr] Exprs +FSharp.Compiler.Syntax.SynIndexerArg: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr] get_Exprs() +FSharp.Compiler.Syntax.SynIndexerArg: System.String ToString() +FSharp.Compiler.Syntax.SynInterfaceImpl +FSharp.Compiler.Syntax.SynInterfaceImpl: FSharp.Compiler.Syntax.SynInterfaceImpl NewSynInterfaceImpl(FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynInterfaceImpl: FSharp.Compiler.Syntax.SynType get_interfaceTy() +FSharp.Compiler.Syntax.SynInterfaceImpl: FSharp.Compiler.Syntax.SynType interfaceTy +FSharp.Compiler.Syntax.SynInterfaceImpl: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynInterfaceImpl: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynInterfaceImpl: Int32 Tag +FSharp.Compiler.Syntax.SynInterfaceImpl: Int32 get_Tag() +FSharp.Compiler.Syntax.SynInterfaceImpl: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] bindings +FSharp.Compiler.Syntax.SynInterfaceImpl: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] get_bindings() +FSharp.Compiler.Syntax.SynInterfaceImpl: System.String ToString() +FSharp.Compiler.Syntax.SynInterpolatedStringPart +FSharp.Compiler.Syntax.SynInterpolatedStringPart+FillExpr: FSharp.Compiler.Syntax.SynExpr fillExpr +FSharp.Compiler.Syntax.SynInterpolatedStringPart+FillExpr: FSharp.Compiler.Syntax.SynExpr get_fillExpr() +FSharp.Compiler.Syntax.SynInterpolatedStringPart+FillExpr: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_qualifiers() +FSharp.Compiler.Syntax.SynInterpolatedStringPart+FillExpr: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] qualifiers +FSharp.Compiler.Syntax.SynInterpolatedStringPart+String: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynInterpolatedStringPart+String: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynInterpolatedStringPart+String: System.String get_value() +FSharp.Compiler.Syntax.SynInterpolatedStringPart+String: System.String value +FSharp.Compiler.Syntax.SynInterpolatedStringPart+Tags: Int32 FillExpr +FSharp.Compiler.Syntax.SynInterpolatedStringPart+Tags: Int32 String +FSharp.Compiler.Syntax.SynInterpolatedStringPart: Boolean IsFillExpr +FSharp.Compiler.Syntax.SynInterpolatedStringPart: Boolean IsString +FSharp.Compiler.Syntax.SynInterpolatedStringPart: Boolean get_IsFillExpr() +FSharp.Compiler.Syntax.SynInterpolatedStringPart: Boolean get_IsString() +FSharp.Compiler.Syntax.SynInterpolatedStringPart: FSharp.Compiler.Syntax.SynInterpolatedStringPart NewFillExpr(FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident]) +FSharp.Compiler.Syntax.SynInterpolatedStringPart: FSharp.Compiler.Syntax.SynInterpolatedStringPart NewString(System.String, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynInterpolatedStringPart: FSharp.Compiler.Syntax.SynInterpolatedStringPart+FillExpr +FSharp.Compiler.Syntax.SynInterpolatedStringPart: FSharp.Compiler.Syntax.SynInterpolatedStringPart+String +FSharp.Compiler.Syntax.SynInterpolatedStringPart: FSharp.Compiler.Syntax.SynInterpolatedStringPart+Tags +FSharp.Compiler.Syntax.SynInterpolatedStringPart: Int32 Tag +FSharp.Compiler.Syntax.SynInterpolatedStringPart: Int32 get_Tag() +FSharp.Compiler.Syntax.SynInterpolatedStringPart: System.String ToString() +FSharp.Compiler.Syntax.SynMatchClause +FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Syntax.DebugPointForTarget get_spInfo() +FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Syntax.DebugPointForTarget spInfo +FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Syntax.SynExpr get_resultExpr() +FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Syntax.SynExpr resultExpr +FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Syntax.SynMatchClause NewSynMatchClause(FSharp.Compiler.Syntax.SynPat, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.DebugPointForTarget) +FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Syntax.SynPat get_pat() +FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Syntax.SynPat pat +FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Text.Range RangeOfGuardAndRhs +FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Text.Range get_RangeOfGuardAndRhs() +FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMatchClause: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMatchClause: Int32 Tag +FSharp.Compiler.Syntax.SynMatchClause: Int32 get_Tag() +FSharp.Compiler.Syntax.SynMatchClause: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr] get_whenExpr() +FSharp.Compiler.Syntax.SynMatchClause: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr] whenExpr +FSharp.Compiler.Syntax.SynMatchClause: System.String ToString() +FSharp.Compiler.Syntax.SynMeasure +FSharp.Compiler.Syntax.SynMeasure+Anon: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMeasure+Anon: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMeasure+Divide: FSharp.Compiler.Syntax.SynMeasure get_measure1() +FSharp.Compiler.Syntax.SynMeasure+Divide: FSharp.Compiler.Syntax.SynMeasure get_measure2() +FSharp.Compiler.Syntax.SynMeasure+Divide: FSharp.Compiler.Syntax.SynMeasure measure1 +FSharp.Compiler.Syntax.SynMeasure+Divide: FSharp.Compiler.Syntax.SynMeasure measure2 +FSharp.Compiler.Syntax.SynMeasure+Divide: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMeasure+Divide: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMeasure+Named: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMeasure+Named: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMeasure+Named: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() +FSharp.Compiler.Syntax.SynMeasure+Named: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId +FSharp.Compiler.Syntax.SynMeasure+Power: FSharp.Compiler.Syntax.SynMeasure get_measure() +FSharp.Compiler.Syntax.SynMeasure+Power: FSharp.Compiler.Syntax.SynMeasure measure +FSharp.Compiler.Syntax.SynMeasure+Power: FSharp.Compiler.Syntax.SynRationalConst get_power() +FSharp.Compiler.Syntax.SynMeasure+Power: FSharp.Compiler.Syntax.SynRationalConst power +FSharp.Compiler.Syntax.SynMeasure+Power: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMeasure+Power: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMeasure+Product: FSharp.Compiler.Syntax.SynMeasure get_measure1() +FSharp.Compiler.Syntax.SynMeasure+Product: FSharp.Compiler.Syntax.SynMeasure get_measure2() +FSharp.Compiler.Syntax.SynMeasure+Product: FSharp.Compiler.Syntax.SynMeasure measure1 +FSharp.Compiler.Syntax.SynMeasure+Product: FSharp.Compiler.Syntax.SynMeasure measure2 +FSharp.Compiler.Syntax.SynMeasure+Product: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMeasure+Product: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMeasure+Seq: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMeasure+Seq: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMeasure+Seq: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMeasure] get_measures() +FSharp.Compiler.Syntax.SynMeasure+Seq: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMeasure] measures +FSharp.Compiler.Syntax.SynMeasure+Tags: Int32 Anon +FSharp.Compiler.Syntax.SynMeasure+Tags: Int32 Divide +FSharp.Compiler.Syntax.SynMeasure+Tags: Int32 Named +FSharp.Compiler.Syntax.SynMeasure+Tags: Int32 One +FSharp.Compiler.Syntax.SynMeasure+Tags: Int32 Power +FSharp.Compiler.Syntax.SynMeasure+Tags: Int32 Product +FSharp.Compiler.Syntax.SynMeasure+Tags: Int32 Seq +FSharp.Compiler.Syntax.SynMeasure+Tags: Int32 Var +FSharp.Compiler.Syntax.SynMeasure+Var: FSharp.Compiler.Syntax.SynTypar get_typar() +FSharp.Compiler.Syntax.SynMeasure+Var: FSharp.Compiler.Syntax.SynTypar typar +FSharp.Compiler.Syntax.SynMeasure+Var: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMeasure+Var: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMeasure: Boolean IsAnon +FSharp.Compiler.Syntax.SynMeasure: Boolean IsDivide +FSharp.Compiler.Syntax.SynMeasure: Boolean IsNamed +FSharp.Compiler.Syntax.SynMeasure: Boolean IsOne +FSharp.Compiler.Syntax.SynMeasure: Boolean IsPower +FSharp.Compiler.Syntax.SynMeasure: Boolean IsProduct +FSharp.Compiler.Syntax.SynMeasure: Boolean IsSeq +FSharp.Compiler.Syntax.SynMeasure: Boolean IsVar +FSharp.Compiler.Syntax.SynMeasure: Boolean get_IsAnon() +FSharp.Compiler.Syntax.SynMeasure: Boolean get_IsDivide() +FSharp.Compiler.Syntax.SynMeasure: Boolean get_IsNamed() +FSharp.Compiler.Syntax.SynMeasure: Boolean get_IsOne() +FSharp.Compiler.Syntax.SynMeasure: Boolean get_IsPower() +FSharp.Compiler.Syntax.SynMeasure: Boolean get_IsProduct() +FSharp.Compiler.Syntax.SynMeasure: Boolean get_IsSeq() +FSharp.Compiler.Syntax.SynMeasure: Boolean get_IsVar() +FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure NewAnon(FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure NewDivide(FSharp.Compiler.Syntax.SynMeasure, FSharp.Compiler.Syntax.SynMeasure, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure NewNamed(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure NewPower(FSharp.Compiler.Syntax.SynMeasure, FSharp.Compiler.Syntax.SynRationalConst, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure NewProduct(FSharp.Compiler.Syntax.SynMeasure, FSharp.Compiler.Syntax.SynMeasure, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure NewSeq(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMeasure], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure NewVar(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure One +FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure get_One() +FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure+Anon +FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure+Divide +FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure+Named +FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure+Power +FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure+Product +FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure+Seq +FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure+Tags +FSharp.Compiler.Syntax.SynMeasure: FSharp.Compiler.Syntax.SynMeasure+Var +FSharp.Compiler.Syntax.SynMeasure: Int32 Tag +FSharp.Compiler.Syntax.SynMeasure: Int32 get_Tag() +FSharp.Compiler.Syntax.SynMeasure: System.String ToString() +FSharp.Compiler.Syntax.SynMemberDefn +FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot: FSharp.Compiler.Syntax.SynMemberFlags flags +FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot: FSharp.Compiler.Syntax.SynMemberFlags get_flags() +FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot: FSharp.Compiler.Syntax.SynValSig get_slotSig() +FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot: FSharp.Compiler.Syntax.SynValSig slotSig +FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Boolean get_isStatic() +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Boolean isStatic +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Syntax.Ident get_ident() +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Syntax.Ident ident +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Syntax.SynExpr get_synExpr() +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Syntax.SynExpr synExpr +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Syntax.SynMemberKind get_propKind() +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Syntax.SynMemberKind propKind +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: FSharp.Compiler.Xml.PreXmlDoc xmlDoc +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynMemberKind,FSharp.Compiler.Syntax.SynMemberFlags] get_memberFlags() +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynMemberKind,FSharp.Compiler.Syntax.SynMemberFlags] memberFlags +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynType] get_typeOpt() +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynType] typeOpt +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] getSetRange +FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_getSetRange() +FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: FSharp.Compiler.Syntax.SynSimplePats ctorArgs +FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: FSharp.Compiler.Syntax.SynSimplePats get_ctorArgs() +FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() +FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: FSharp.Compiler.Xml.PreXmlDoc xmlDoc +FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes +FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() +FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_selfIdentifier() +FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] selfIdentifier +FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility +FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() +FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: FSharp.Compiler.Syntax.SynExpr get_inheritArgs() +FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: FSharp.Compiler.Syntax.SynExpr inheritArgs +FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: FSharp.Compiler.Syntax.SynType get_inheritType() +FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: FSharp.Compiler.Syntax.SynType inheritType +FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_inheritAlias() +FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] inheritAlias +FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Syntax.SynType baseType +FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Syntax.SynType get_baseType() +FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMemberDefn+Inherit: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMemberDefn+Inherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] asIdent +FSharp.Compiler.Syntax.SynMemberDefn+Inherit: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_asIdent() +FSharp.Compiler.Syntax.SynMemberDefn+Interface: FSharp.Compiler.Syntax.SynType get_interfaceType() +FSharp.Compiler.Syntax.SynMemberDefn+Interface: FSharp.Compiler.Syntax.SynType interfaceType +FSharp.Compiler.Syntax.SynMemberDefn+Interface: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMemberDefn+Interface: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMemberDefn+Interface: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]] get_members() +FSharp.Compiler.Syntax.SynMemberDefn+Interface: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]] members +FSharp.Compiler.Syntax.SynMemberDefn+LetBindings: Boolean get_isRecursive() +FSharp.Compiler.Syntax.SynMemberDefn+LetBindings: Boolean get_isStatic() +FSharp.Compiler.Syntax.SynMemberDefn+LetBindings: Boolean isRecursive +FSharp.Compiler.Syntax.SynMemberDefn+LetBindings: Boolean isStatic +FSharp.Compiler.Syntax.SynMemberDefn+LetBindings: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMemberDefn+LetBindings: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMemberDefn+LetBindings: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] bindings +FSharp.Compiler.Syntax.SynMemberDefn+LetBindings: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] get_bindings() +FSharp.Compiler.Syntax.SynMemberDefn+Member: FSharp.Compiler.Syntax.SynBinding get_memberDefn() +FSharp.Compiler.Syntax.SynMemberDefn+Member: FSharp.Compiler.Syntax.SynBinding memberDefn +FSharp.Compiler.Syntax.SynMemberDefn+Member: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMemberDefn+Member: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMemberDefn+NestedType: FSharp.Compiler.Syntax.SynTypeDefn get_typeDefn() +FSharp.Compiler.Syntax.SynMemberDefn+NestedType: FSharp.Compiler.Syntax.SynTypeDefn typeDefn +FSharp.Compiler.Syntax.SynMemberDefn+NestedType: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMemberDefn+NestedType: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMemberDefn+NestedType: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility +FSharp.Compiler.Syntax.SynMemberDefn+NestedType: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() +FSharp.Compiler.Syntax.SynMemberDefn+Open: FSharp.Compiler.Syntax.SynOpenDeclTarget get_target() +FSharp.Compiler.Syntax.SynMemberDefn+Open: FSharp.Compiler.Syntax.SynOpenDeclTarget target +FSharp.Compiler.Syntax.SynMemberDefn+Open: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMemberDefn+Open: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 AbstractSlot +FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 AutoProperty +FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 ImplicitCtor +FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 ImplicitInherit +FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 Inherit +FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 Interface +FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 LetBindings +FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 Member +FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 NestedType +FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 Open +FSharp.Compiler.Syntax.SynMemberDefn+Tags: Int32 ValField +FSharp.Compiler.Syntax.SynMemberDefn+ValField: FSharp.Compiler.Syntax.SynField fieldInfo +FSharp.Compiler.Syntax.SynMemberDefn+ValField: FSharp.Compiler.Syntax.SynField get_fieldInfo() +FSharp.Compiler.Syntax.SynMemberDefn+ValField: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMemberDefn+ValField: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsAbstractSlot +FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsAutoProperty +FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsImplicitCtor +FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsImplicitInherit +FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsInherit +FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsInterface +FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsLetBindings +FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsMember +FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsNestedType +FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsOpen +FSharp.Compiler.Syntax.SynMemberDefn: Boolean IsValField +FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsAbstractSlot() +FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsAutoProperty() +FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsImplicitCtor() +FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsImplicitInherit() +FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsInherit() +FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsInterface() +FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsLetBindings() +FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsMember() +FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsNestedType() +FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsOpen() +FSharp.Compiler.Syntax.SynMemberDefn: Boolean get_IsValField() +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewAbstractSlot(FSharp.Compiler.Syntax.SynValSig, FSharp.Compiler.Syntax.SynMemberFlags, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewAutoProperty(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], Boolean, FSharp.Compiler.Syntax.Ident, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynType], FSharp.Compiler.Syntax.SynMemberKind, Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynMemberKind,FSharp.Compiler.Syntax.SynMemberFlags], FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewImplicitCtor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Syntax.SynSimplePats, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Xml.PreXmlDoc, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewImplicitInherit(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynExpr, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewInherit(FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewInterface(FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn]], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewLetBindings(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding], Boolean, Boolean, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewMember(FSharp.Compiler.Syntax.SynBinding, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewNestedType(FSharp.Compiler.Syntax.SynTypeDefn, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewOpen(FSharp.Compiler.Syntax.SynOpenDeclTarget, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn NewValField(FSharp.Compiler.Syntax.SynField, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+AbstractSlot +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+AutoProperty +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+ImplicitCtor +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+ImplicitInherit +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+Inherit +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+Interface +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+LetBindings +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+Member +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+NestedType +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+Open +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+Tags +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn+ValField +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynMemberDefn: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynMemberDefn: Int32 Tag +FSharp.Compiler.Syntax.SynMemberDefn: Int32 get_Tag() +FSharp.Compiler.Syntax.SynMemberDefn: System.String ToString() +FSharp.Compiler.Syntax.SynMemberFlags +FSharp.Compiler.Syntax.SynMemberFlags: Boolean Equals(FSharp.Compiler.Syntax.SynMemberFlags) +FSharp.Compiler.Syntax.SynMemberFlags: Boolean Equals(System.Object) +FSharp.Compiler.Syntax.SynMemberFlags: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.SynMemberFlags: Boolean IsDispatchSlot +FSharp.Compiler.Syntax.SynMemberFlags: Boolean IsFinal +FSharp.Compiler.Syntax.SynMemberFlags: Boolean IsInstance +FSharp.Compiler.Syntax.SynMemberFlags: Boolean IsOverrideOrExplicitImpl +FSharp.Compiler.Syntax.SynMemberFlags: Boolean get_IsDispatchSlot() +FSharp.Compiler.Syntax.SynMemberFlags: Boolean get_IsFinal() +FSharp.Compiler.Syntax.SynMemberFlags: Boolean get_IsInstance() +FSharp.Compiler.Syntax.SynMemberFlags: Boolean get_IsOverrideOrExplicitImpl() +FSharp.Compiler.Syntax.SynMemberFlags: FSharp.Compiler.Syntax.SynMemberKind MemberKind +FSharp.Compiler.Syntax.SynMemberFlags: FSharp.Compiler.Syntax.SynMemberKind get_MemberKind() +FSharp.Compiler.Syntax.SynMemberFlags: Int32 GetHashCode() +FSharp.Compiler.Syntax.SynMemberFlags: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.SynMemberFlags: System.String ToString() +FSharp.Compiler.Syntax.SynMemberFlags: Void .ctor(Boolean, Boolean, Boolean, Boolean, FSharp.Compiler.Syntax.SynMemberKind) +FSharp.Compiler.Syntax.SynMemberKind +FSharp.Compiler.Syntax.SynMemberKind+Tags: Int32 ClassConstructor +FSharp.Compiler.Syntax.SynMemberKind+Tags: Int32 Constructor +FSharp.Compiler.Syntax.SynMemberKind+Tags: Int32 Member +FSharp.Compiler.Syntax.SynMemberKind+Tags: Int32 PropertyGet +FSharp.Compiler.Syntax.SynMemberKind+Tags: Int32 PropertyGetSet +FSharp.Compiler.Syntax.SynMemberKind+Tags: Int32 PropertySet +FSharp.Compiler.Syntax.SynMemberKind: Boolean Equals(FSharp.Compiler.Syntax.SynMemberKind) +FSharp.Compiler.Syntax.SynMemberKind: Boolean Equals(System.Object) +FSharp.Compiler.Syntax.SynMemberKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.SynMemberKind: Boolean IsClassConstructor +FSharp.Compiler.Syntax.SynMemberKind: Boolean IsConstructor +FSharp.Compiler.Syntax.SynMemberKind: Boolean IsMember +FSharp.Compiler.Syntax.SynMemberKind: Boolean IsPropertyGet +FSharp.Compiler.Syntax.SynMemberKind: Boolean IsPropertyGetSet +FSharp.Compiler.Syntax.SynMemberKind: Boolean IsPropertySet +FSharp.Compiler.Syntax.SynMemberKind: Boolean get_IsClassConstructor() +FSharp.Compiler.Syntax.SynMemberKind: Boolean get_IsConstructor() +FSharp.Compiler.Syntax.SynMemberKind: Boolean get_IsMember() +FSharp.Compiler.Syntax.SynMemberKind: Boolean get_IsPropertyGet() +FSharp.Compiler.Syntax.SynMemberKind: Boolean get_IsPropertyGetSet() +FSharp.Compiler.Syntax.SynMemberKind: Boolean get_IsPropertySet() +FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind ClassConstructor +FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind Constructor +FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind Member +FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind PropertyGet +FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind PropertyGetSet +FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind PropertySet +FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind get_ClassConstructor() +FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind get_Constructor() +FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind get_Member() +FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind get_PropertyGet() +FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind get_PropertyGetSet() +FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind get_PropertySet() +FSharp.Compiler.Syntax.SynMemberKind: FSharp.Compiler.Syntax.SynMemberKind+Tags +FSharp.Compiler.Syntax.SynMemberKind: Int32 GetHashCode() +FSharp.Compiler.Syntax.SynMemberKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.SynMemberKind: Int32 Tag +FSharp.Compiler.Syntax.SynMemberKind: Int32 get_Tag() +FSharp.Compiler.Syntax.SynMemberKind: System.String ToString() +FSharp.Compiler.Syntax.SynMemberSig +FSharp.Compiler.Syntax.SynMemberSig+Inherit: FSharp.Compiler.Syntax.SynType get_inheritedType() +FSharp.Compiler.Syntax.SynMemberSig+Inherit: FSharp.Compiler.Syntax.SynType inheritedType +FSharp.Compiler.Syntax.SynMemberSig+Inherit: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMemberSig+Inherit: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMemberSig+Interface: FSharp.Compiler.Syntax.SynType get_interfaceType() +FSharp.Compiler.Syntax.SynMemberSig+Interface: FSharp.Compiler.Syntax.SynType interfaceType +FSharp.Compiler.Syntax.SynMemberSig+Interface: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMemberSig+Interface: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMemberSig+Member: FSharp.Compiler.Syntax.SynMemberFlags flags +FSharp.Compiler.Syntax.SynMemberSig+Member: FSharp.Compiler.Syntax.SynMemberFlags get_flags() +FSharp.Compiler.Syntax.SynMemberSig+Member: FSharp.Compiler.Syntax.SynValSig get_memberSig() +FSharp.Compiler.Syntax.SynMemberSig+Member: FSharp.Compiler.Syntax.SynValSig memberSig +FSharp.Compiler.Syntax.SynMemberSig+Member: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMemberSig+Member: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMemberSig+NestedType: FSharp.Compiler.Syntax.SynTypeDefnSig get_nestedType() +FSharp.Compiler.Syntax.SynMemberSig+NestedType: FSharp.Compiler.Syntax.SynTypeDefnSig nestedType +FSharp.Compiler.Syntax.SynMemberSig+NestedType: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMemberSig+NestedType: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMemberSig+Tags: Int32 Inherit +FSharp.Compiler.Syntax.SynMemberSig+Tags: Int32 Interface +FSharp.Compiler.Syntax.SynMemberSig+Tags: Int32 Member +FSharp.Compiler.Syntax.SynMemberSig+Tags: Int32 NestedType +FSharp.Compiler.Syntax.SynMemberSig+Tags: Int32 ValField +FSharp.Compiler.Syntax.SynMemberSig+ValField: FSharp.Compiler.Syntax.SynField field +FSharp.Compiler.Syntax.SynMemberSig+ValField: FSharp.Compiler.Syntax.SynField get_field() +FSharp.Compiler.Syntax.SynMemberSig+ValField: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynMemberSig+ValField: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynMemberSig: Boolean IsInherit +FSharp.Compiler.Syntax.SynMemberSig: Boolean IsInterface +FSharp.Compiler.Syntax.SynMemberSig: Boolean IsMember +FSharp.Compiler.Syntax.SynMemberSig: Boolean IsNestedType +FSharp.Compiler.Syntax.SynMemberSig: Boolean IsValField +FSharp.Compiler.Syntax.SynMemberSig: Boolean get_IsInherit() +FSharp.Compiler.Syntax.SynMemberSig: Boolean get_IsInterface() +FSharp.Compiler.Syntax.SynMemberSig: Boolean get_IsMember() +FSharp.Compiler.Syntax.SynMemberSig: Boolean get_IsNestedType() +FSharp.Compiler.Syntax.SynMemberSig: Boolean get_IsValField() +FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig NewInherit(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig NewInterface(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig NewMember(FSharp.Compiler.Syntax.SynValSig, FSharp.Compiler.Syntax.SynMemberFlags, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig NewNestedType(FSharp.Compiler.Syntax.SynTypeDefnSig, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig NewValField(FSharp.Compiler.Syntax.SynField, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig+Inherit +FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig+Interface +FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig+Member +FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig+NestedType +FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig+Tags +FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig+ValField +FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynMemberSig: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynMemberSig: Int32 Tag +FSharp.Compiler.Syntax.SynMemberSig: Int32 get_Tag() +FSharp.Compiler.Syntax.SynMemberSig: System.String ToString() +FSharp.Compiler.Syntax.SynModuleDecl +FSharp.Compiler.Syntax.SynModuleDecl+Attributes: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynModuleDecl+Attributes: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynModuleDecl+Attributes: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes +FSharp.Compiler.Syntax.SynModuleDecl+Attributes: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() +FSharp.Compiler.Syntax.SynModuleDecl+DoExpr: FSharp.Compiler.Syntax.DebugPointAtBinding get_spInfo() +FSharp.Compiler.Syntax.SynModuleDecl+DoExpr: FSharp.Compiler.Syntax.DebugPointAtBinding spInfo +FSharp.Compiler.Syntax.SynModuleDecl+DoExpr: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynModuleDecl+DoExpr: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynModuleDecl+DoExpr: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynModuleDecl+DoExpr: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynModuleDecl+Exception: FSharp.Compiler.Syntax.SynExceptionDefn exnDefn +FSharp.Compiler.Syntax.SynModuleDecl+Exception: FSharp.Compiler.Syntax.SynExceptionDefn get_exnDefn() +FSharp.Compiler.Syntax.SynModuleDecl+Exception: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynModuleDecl+Exception: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynModuleDecl+HashDirective: FSharp.Compiler.Syntax.ParsedHashDirective get_hashDirective() +FSharp.Compiler.Syntax.SynModuleDecl+HashDirective: FSharp.Compiler.Syntax.ParsedHashDirective hashDirective +FSharp.Compiler.Syntax.SynModuleDecl+HashDirective: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynModuleDecl+HashDirective: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynModuleDecl+Let: Boolean get_isRecursive() +FSharp.Compiler.Syntax.SynModuleDecl+Let: Boolean isRecursive +FSharp.Compiler.Syntax.SynModuleDecl+Let: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynModuleDecl+Let: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynModuleDecl+Let: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] bindings +FSharp.Compiler.Syntax.SynModuleDecl+Let: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding] get_bindings() +FSharp.Compiler.Syntax.SynModuleDecl+ModuleAbbrev: FSharp.Compiler.Syntax.Ident get_ident() +FSharp.Compiler.Syntax.SynModuleDecl+ModuleAbbrev: FSharp.Compiler.Syntax.Ident ident +FSharp.Compiler.Syntax.SynModuleDecl+ModuleAbbrev: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynModuleDecl+ModuleAbbrev: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynModuleDecl+ModuleAbbrev: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() +FSharp.Compiler.Syntax.SynModuleDecl+ModuleAbbrev: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId +FSharp.Compiler.Syntax.SynModuleDecl+NamespaceFragment: FSharp.Compiler.Syntax.SynModuleOrNamespace fragment +FSharp.Compiler.Syntax.SynModuleDecl+NamespaceFragment: FSharp.Compiler.Syntax.SynModuleOrNamespace get_fragment() +FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: Boolean get_isContinuing() +FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: Boolean get_isRecursive() +FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: Boolean isContinuing +FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: Boolean isRecursive +FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: FSharp.Compiler.Syntax.SynComponentInfo get_moduleInfo() +FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: FSharp.Compiler.Syntax.SynComponentInfo moduleInfo +FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] decls +FSharp.Compiler.Syntax.SynModuleDecl+NestedModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] get_decls() +FSharp.Compiler.Syntax.SynModuleDecl+Open: FSharp.Compiler.Syntax.SynOpenDeclTarget get_target() +FSharp.Compiler.Syntax.SynModuleDecl+Open: FSharp.Compiler.Syntax.SynOpenDeclTarget target +FSharp.Compiler.Syntax.SynModuleDecl+Open: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynModuleDecl+Open: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynModuleDecl+Tags: Int32 Attributes +FSharp.Compiler.Syntax.SynModuleDecl+Tags: Int32 DoExpr +FSharp.Compiler.Syntax.SynModuleDecl+Tags: Int32 Exception +FSharp.Compiler.Syntax.SynModuleDecl+Tags: Int32 HashDirective +FSharp.Compiler.Syntax.SynModuleDecl+Tags: Int32 Let +FSharp.Compiler.Syntax.SynModuleDecl+Tags: Int32 ModuleAbbrev +FSharp.Compiler.Syntax.SynModuleDecl+Tags: Int32 NamespaceFragment +FSharp.Compiler.Syntax.SynModuleDecl+Tags: Int32 NestedModule +FSharp.Compiler.Syntax.SynModuleDecl+Tags: Int32 Open +FSharp.Compiler.Syntax.SynModuleDecl+Tags: Int32 Types +FSharp.Compiler.Syntax.SynModuleDecl+Types: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynModuleDecl+Types: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynModuleDecl+Types: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeDefn] get_typeDefns() +FSharp.Compiler.Syntax.SynModuleDecl+Types: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeDefn] typeDefns +FSharp.Compiler.Syntax.SynModuleDecl: Boolean IsAttributes +FSharp.Compiler.Syntax.SynModuleDecl: Boolean IsDoExpr +FSharp.Compiler.Syntax.SynModuleDecl: Boolean IsException +FSharp.Compiler.Syntax.SynModuleDecl: Boolean IsHashDirective +FSharp.Compiler.Syntax.SynModuleDecl: Boolean IsLet +FSharp.Compiler.Syntax.SynModuleDecl: Boolean IsModuleAbbrev +FSharp.Compiler.Syntax.SynModuleDecl: Boolean IsNamespaceFragment +FSharp.Compiler.Syntax.SynModuleDecl: Boolean IsNestedModule +FSharp.Compiler.Syntax.SynModuleDecl: Boolean IsOpen +FSharp.Compiler.Syntax.SynModuleDecl: Boolean IsTypes +FSharp.Compiler.Syntax.SynModuleDecl: Boolean get_IsAttributes() +FSharp.Compiler.Syntax.SynModuleDecl: Boolean get_IsDoExpr() +FSharp.Compiler.Syntax.SynModuleDecl: Boolean get_IsException() +FSharp.Compiler.Syntax.SynModuleDecl: Boolean get_IsHashDirective() +FSharp.Compiler.Syntax.SynModuleDecl: Boolean get_IsLet() +FSharp.Compiler.Syntax.SynModuleDecl: Boolean get_IsModuleAbbrev() +FSharp.Compiler.Syntax.SynModuleDecl: Boolean get_IsNamespaceFragment() +FSharp.Compiler.Syntax.SynModuleDecl: Boolean get_IsNestedModule() +FSharp.Compiler.Syntax.SynModuleDecl: Boolean get_IsOpen() +FSharp.Compiler.Syntax.SynModuleDecl: Boolean get_IsTypes() +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewAttributes(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewDoExpr(FSharp.Compiler.Syntax.DebugPointAtBinding, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewException(FSharp.Compiler.Syntax.SynExceptionDefn, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewHashDirective(FSharp.Compiler.Syntax.ParsedHashDirective, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewLet(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewModuleAbbrev(FSharp.Compiler.Syntax.Ident, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewNamespaceFragment(FSharp.Compiler.Syntax.SynModuleOrNamespace) +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewNestedModule(FSharp.Compiler.Syntax.SynComponentInfo, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl], Boolean, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewOpen(FSharp.Compiler.Syntax.SynOpenDeclTarget, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl NewTypes(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeDefn], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+Attributes +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+DoExpr +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+Exception +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+HashDirective +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+Let +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+ModuleAbbrev +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+NamespaceFragment +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+NestedModule +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+Open +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+Tags +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Syntax.SynModuleDecl+Types +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynModuleDecl: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynModuleDecl: Int32 Tag +FSharp.Compiler.Syntax.SynModuleDecl: Int32 get_Tag() +FSharp.Compiler.Syntax.SynModuleDecl: System.String ToString() +FSharp.Compiler.Syntax.SynModuleOrNamespace +FSharp.Compiler.Syntax.SynModuleOrNamespace: Boolean get_isRecursive() +FSharp.Compiler.Syntax.SynModuleOrNamespace: Boolean isRecursive +FSharp.Compiler.Syntax.SynModuleOrNamespace: FSharp.Compiler.Syntax.SynModuleOrNamespace NewSynModuleOrNamespace(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], Boolean, FSharp.Compiler.Syntax.SynModuleOrNamespaceKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl], FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynModuleOrNamespace: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind get_kind() +FSharp.Compiler.Syntax.SynModuleOrNamespace: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind kind +FSharp.Compiler.Syntax.SynModuleOrNamespace: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynModuleOrNamespace: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynModuleOrNamespace: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynModuleOrNamespace: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynModuleOrNamespace: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() +FSharp.Compiler.Syntax.SynModuleOrNamespace: FSharp.Compiler.Xml.PreXmlDoc xmlDoc +FSharp.Compiler.Syntax.SynModuleOrNamespace: Int32 Tag +FSharp.Compiler.Syntax.SynModuleOrNamespace: Int32 get_Tag() +FSharp.Compiler.Syntax.SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() +FSharp.Compiler.Syntax.SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId +FSharp.Compiler.Syntax.SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attribs +FSharp.Compiler.Syntax.SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attribs() +FSharp.Compiler.Syntax.SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] decls +FSharp.Compiler.Syntax.SynModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleDecl] get_decls() +FSharp.Compiler.Syntax.SynModuleOrNamespace: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility +FSharp.Compiler.Syntax.SynModuleOrNamespace: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() +FSharp.Compiler.Syntax.SynModuleOrNamespace: System.String ToString() +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind+Tags: Int32 AnonModule +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind+Tags: Int32 DeclaredNamespace +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind+Tags: Int32 GlobalNamespace +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind+Tags: Int32 NamedModule +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean Equals(FSharp.Compiler.Syntax.SynModuleOrNamespaceKind) +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean Equals(System.Object) +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean IsAnonModule +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean IsDeclaredNamespace +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean IsGlobalNamespace +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean IsModule +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean IsNamedModule +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean get_IsAnonModule() +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean get_IsDeclaredNamespace() +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean get_IsGlobalNamespace() +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean get_IsModule() +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Boolean get_IsNamedModule() +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind AnonModule +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind DeclaredNamespace +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind GlobalNamespace +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind NamedModule +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind get_AnonModule() +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind get_DeclaredNamespace() +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind get_GlobalNamespace() +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind get_NamedModule() +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind+Tags +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Int32 CompareTo(FSharp.Compiler.Syntax.SynModuleOrNamespaceKind) +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Int32 CompareTo(System.Object) +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Int32 GetHashCode() +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Int32 Tag +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: Int32 get_Tag() +FSharp.Compiler.Syntax.SynModuleOrNamespaceKind: System.String ToString() +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Boolean get_isRecursive() +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Boolean isRecursive +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind get_kind() +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: FSharp.Compiler.Syntax.SynModuleOrNamespaceKind kind +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: FSharp.Compiler.Syntax.SynModuleOrNamespaceSig NewSynModuleOrNamespaceSig(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], Boolean, FSharp.Compiler.Syntax.SynModuleOrNamespaceKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl], FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: FSharp.Compiler.Xml.PreXmlDoc xmlDoc +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Int32 Tag +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Int32 get_Tag() +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attribs +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attribs() +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl] decls +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl] get_decls() +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() +FSharp.Compiler.Syntax.SynModuleOrNamespaceSig: System.String ToString() +FSharp.Compiler.Syntax.SynModuleSigDecl +FSharp.Compiler.Syntax.SynModuleSigDecl+Exception: FSharp.Compiler.Syntax.SynExceptionSig exnSig +FSharp.Compiler.Syntax.SynModuleSigDecl+Exception: FSharp.Compiler.Syntax.SynExceptionSig get_exnSig() +FSharp.Compiler.Syntax.SynModuleSigDecl+Exception: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynModuleSigDecl+Exception: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynModuleSigDecl+HashDirective: FSharp.Compiler.Syntax.ParsedHashDirective get_hashDirective() +FSharp.Compiler.Syntax.SynModuleSigDecl+HashDirective: FSharp.Compiler.Syntax.ParsedHashDirective hashDirective +FSharp.Compiler.Syntax.SynModuleSigDecl+HashDirective: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynModuleSigDecl+HashDirective: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynModuleSigDecl+ModuleAbbrev: FSharp.Compiler.Syntax.Ident get_ident() +FSharp.Compiler.Syntax.SynModuleSigDecl+ModuleAbbrev: FSharp.Compiler.Syntax.Ident ident +FSharp.Compiler.Syntax.SynModuleSigDecl+ModuleAbbrev: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynModuleSigDecl+ModuleAbbrev: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynModuleSigDecl+ModuleAbbrev: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() +FSharp.Compiler.Syntax.SynModuleSigDecl+ModuleAbbrev: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId +FSharp.Compiler.Syntax.SynModuleSigDecl+NamespaceFragment: FSharp.Compiler.Syntax.SynModuleOrNamespaceSig Item +FSharp.Compiler.Syntax.SynModuleSigDecl+NamespaceFragment: FSharp.Compiler.Syntax.SynModuleOrNamespaceSig get_Item() +FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: Boolean get_isRecursive() +FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: Boolean isRecursive +FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: FSharp.Compiler.Syntax.SynComponentInfo get_moduleInfo() +FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: FSharp.Compiler.Syntax.SynComponentInfo moduleInfo +FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl] get_moduleDecls() +FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl] moduleDecls +FSharp.Compiler.Syntax.SynModuleSigDecl+Open: FSharp.Compiler.Syntax.SynOpenDeclTarget get_target() +FSharp.Compiler.Syntax.SynModuleSigDecl+Open: FSharp.Compiler.Syntax.SynOpenDeclTarget target +FSharp.Compiler.Syntax.SynModuleSigDecl+Open: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynModuleSigDecl+Open: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynModuleSigDecl+Tags: Int32 Exception +FSharp.Compiler.Syntax.SynModuleSigDecl+Tags: Int32 HashDirective +FSharp.Compiler.Syntax.SynModuleSigDecl+Tags: Int32 ModuleAbbrev +FSharp.Compiler.Syntax.SynModuleSigDecl+Tags: Int32 NamespaceFragment +FSharp.Compiler.Syntax.SynModuleSigDecl+Tags: Int32 NestedModule +FSharp.Compiler.Syntax.SynModuleSigDecl+Tags: Int32 Open +FSharp.Compiler.Syntax.SynModuleSigDecl+Tags: Int32 Types +FSharp.Compiler.Syntax.SynModuleSigDecl+Tags: Int32 Val +FSharp.Compiler.Syntax.SynModuleSigDecl+Types: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynModuleSigDecl+Types: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynModuleSigDecl+Types: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeDefnSig] get_types() +FSharp.Compiler.Syntax.SynModuleSigDecl+Types: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeDefnSig] types +FSharp.Compiler.Syntax.SynModuleSigDecl+Val: FSharp.Compiler.Syntax.SynValSig get_valSig() +FSharp.Compiler.Syntax.SynModuleSigDecl+Val: FSharp.Compiler.Syntax.SynValSig valSig +FSharp.Compiler.Syntax.SynModuleSigDecl+Val: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynModuleSigDecl+Val: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean IsException +FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean IsHashDirective +FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean IsModuleAbbrev +FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean IsNamespaceFragment +FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean IsNestedModule +FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean IsOpen +FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean IsTypes +FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean IsVal +FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean get_IsException() +FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean get_IsHashDirective() +FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean get_IsModuleAbbrev() +FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean get_IsNamespaceFragment() +FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean get_IsNestedModule() +FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean get_IsOpen() +FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean get_IsTypes() +FSharp.Compiler.Syntax.SynModuleSigDecl: Boolean get_IsVal() +FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewException(FSharp.Compiler.Syntax.SynExceptionSig, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewHashDirective(FSharp.Compiler.Syntax.ParsedHashDirective, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewModuleAbbrev(FSharp.Compiler.Syntax.Ident, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewNamespaceFragment(FSharp.Compiler.Syntax.SynModuleOrNamespaceSig) +FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewNestedModule(FSharp.Compiler.Syntax.SynComponentInfo, Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynModuleSigDecl], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewOpen(FSharp.Compiler.Syntax.SynOpenDeclTarget, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewTypes(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeDefnSig], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl NewVal(FSharp.Compiler.Syntax.SynValSig, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl+Exception +FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl+HashDirective +FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl+ModuleAbbrev +FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl+NamespaceFragment +FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl+NestedModule +FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl+Open +FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl+Tags +FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl+Types +FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl+Val +FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynModuleSigDecl: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynModuleSigDecl: Int32 Tag +FSharp.Compiler.Syntax.SynModuleSigDecl: Int32 get_Tag() +FSharp.Compiler.Syntax.SynModuleSigDecl: System.String ToString() +FSharp.Compiler.Syntax.SynOpenDeclTarget +FSharp.Compiler.Syntax.SynOpenDeclTarget+ModuleOrNamespace: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynOpenDeclTarget+ModuleOrNamespace: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynOpenDeclTarget+ModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] get_longId() +FSharp.Compiler.Syntax.SynOpenDeclTarget+ModuleOrNamespace: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident] longId +FSharp.Compiler.Syntax.SynOpenDeclTarget+Tags: Int32 ModuleOrNamespace +FSharp.Compiler.Syntax.SynOpenDeclTarget+Tags: Int32 Type +FSharp.Compiler.Syntax.SynOpenDeclTarget+Type: FSharp.Compiler.Syntax.SynType get_typeName() +FSharp.Compiler.Syntax.SynOpenDeclTarget+Type: FSharp.Compiler.Syntax.SynType typeName +FSharp.Compiler.Syntax.SynOpenDeclTarget+Type: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynOpenDeclTarget+Type: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynOpenDeclTarget: Boolean IsModuleOrNamespace +FSharp.Compiler.Syntax.SynOpenDeclTarget: Boolean IsType +FSharp.Compiler.Syntax.SynOpenDeclTarget: Boolean get_IsModuleOrNamespace() +FSharp.Compiler.Syntax.SynOpenDeclTarget: Boolean get_IsType() +FSharp.Compiler.Syntax.SynOpenDeclTarget: FSharp.Compiler.Syntax.SynOpenDeclTarget NewModuleOrNamespace(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynOpenDeclTarget: FSharp.Compiler.Syntax.SynOpenDeclTarget NewType(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynOpenDeclTarget: FSharp.Compiler.Syntax.SynOpenDeclTarget+ModuleOrNamespace +FSharp.Compiler.Syntax.SynOpenDeclTarget: FSharp.Compiler.Syntax.SynOpenDeclTarget+Tags +FSharp.Compiler.Syntax.SynOpenDeclTarget: FSharp.Compiler.Syntax.SynOpenDeclTarget+Type +FSharp.Compiler.Syntax.SynOpenDeclTarget: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynOpenDeclTarget: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynOpenDeclTarget: Int32 Tag +FSharp.Compiler.Syntax.SynOpenDeclTarget: Int32 get_Tag() +FSharp.Compiler.Syntax.SynOpenDeclTarget: System.String ToString() +FSharp.Compiler.Syntax.SynPat +FSharp.Compiler.Syntax.SynPat+Ands: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynPat+Ands: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynPat+Ands: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat] get_pats() +FSharp.Compiler.Syntax.SynPat+Ands: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat] pats +FSharp.Compiler.Syntax.SynPat+ArrayOrList: Boolean get_isArray() +FSharp.Compiler.Syntax.SynPat+ArrayOrList: Boolean isArray +FSharp.Compiler.Syntax.SynPat+ArrayOrList: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynPat+ArrayOrList: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynPat+ArrayOrList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat] elementPats +FSharp.Compiler.Syntax.SynPat+ArrayOrList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat] get_elementPats() +FSharp.Compiler.Syntax.SynPat+As: FSharp.Compiler.Syntax.SynPat get_lhsPat() +FSharp.Compiler.Syntax.SynPat+As: FSharp.Compiler.Syntax.SynPat get_rhsPat() +FSharp.Compiler.Syntax.SynPat+As: FSharp.Compiler.Syntax.SynPat lhsPat +FSharp.Compiler.Syntax.SynPat+As: FSharp.Compiler.Syntax.SynPat rhsPat +FSharp.Compiler.Syntax.SynPat+As: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynPat+As: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynPat+Attrib: FSharp.Compiler.Syntax.SynPat get_pat() +FSharp.Compiler.Syntax.SynPat+Attrib: FSharp.Compiler.Syntax.SynPat pat +FSharp.Compiler.Syntax.SynPat+Attrib: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynPat+Attrib: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynPat+Attrib: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes +FSharp.Compiler.Syntax.SynPat+Attrib: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() +FSharp.Compiler.Syntax.SynPat+Const: FSharp.Compiler.Syntax.SynConst constant +FSharp.Compiler.Syntax.SynPat+Const: FSharp.Compiler.Syntax.SynConst get_constant() +FSharp.Compiler.Syntax.SynPat+Const: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynPat+Const: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynPat+DeprecatedCharRange: Char endChar +FSharp.Compiler.Syntax.SynPat+DeprecatedCharRange: Char get_endChar() +FSharp.Compiler.Syntax.SynPat+DeprecatedCharRange: Char get_startChar() +FSharp.Compiler.Syntax.SynPat+DeprecatedCharRange: Char startChar +FSharp.Compiler.Syntax.SynPat+DeprecatedCharRange: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynPat+DeprecatedCharRange: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynPat+FromParseError: FSharp.Compiler.Syntax.SynPat get_pat() +FSharp.Compiler.Syntax.SynPat+FromParseError: FSharp.Compiler.Syntax.SynPat pat +FSharp.Compiler.Syntax.SynPat+FromParseError: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynPat+FromParseError: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynPat+InstanceMember: FSharp.Compiler.Syntax.Ident get_memberId() +FSharp.Compiler.Syntax.SynPat+InstanceMember: FSharp.Compiler.Syntax.Ident get_thisId() +FSharp.Compiler.Syntax.SynPat+InstanceMember: FSharp.Compiler.Syntax.Ident memberId +FSharp.Compiler.Syntax.SynPat+InstanceMember: FSharp.Compiler.Syntax.Ident thisId +FSharp.Compiler.Syntax.SynPat+InstanceMember: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynPat+InstanceMember: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynPat+InstanceMember: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_toolingId() +FSharp.Compiler.Syntax.SynPat+InstanceMember: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] toolingId +FSharp.Compiler.Syntax.SynPat+InstanceMember: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility +FSharp.Compiler.Syntax.SynPat+InstanceMember: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() +FSharp.Compiler.Syntax.SynPat+IsInst: FSharp.Compiler.Syntax.SynType get_pat() +FSharp.Compiler.Syntax.SynPat+IsInst: FSharp.Compiler.Syntax.SynType pat +FSharp.Compiler.Syntax.SynPat+IsInst: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynPat+IsInst: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynPat+LongIdent: FSharp.Compiler.Syntax.LongIdentWithDots get_longDotId() +FSharp.Compiler.Syntax.SynPat+LongIdent: FSharp.Compiler.Syntax.LongIdentWithDots longDotId +FSharp.Compiler.Syntax.SynPat+LongIdent: FSharp.Compiler.Syntax.SynArgPats argPats +FSharp.Compiler.Syntax.SynPat+LongIdent: FSharp.Compiler.Syntax.SynArgPats get_argPats() +FSharp.Compiler.Syntax.SynPat+LongIdent: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynPat+LongIdent: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] extraId +FSharp.Compiler.Syntax.SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_extraId() +FSharp.Compiler.Syntax.SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility +FSharp.Compiler.Syntax.SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() +FSharp.Compiler.Syntax.SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynValTyparDecls] get_typarDecls() +FSharp.Compiler.Syntax.SynPat+LongIdent: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynValTyparDecls] typarDecls +FSharp.Compiler.Syntax.SynPat+Named: Boolean get_isSelfIdentifier() +FSharp.Compiler.Syntax.SynPat+Named: Boolean isSelfIdentifier +FSharp.Compiler.Syntax.SynPat+Named: FSharp.Compiler.Syntax.Ident get_ident() +FSharp.Compiler.Syntax.SynPat+Named: FSharp.Compiler.Syntax.Ident ident +FSharp.Compiler.Syntax.SynPat+Named: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynPat+Named: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynPat+Named: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility +FSharp.Compiler.Syntax.SynPat+Named: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() +FSharp.Compiler.Syntax.SynPat+Null: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynPat+Null: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynPat+OptionalVal: FSharp.Compiler.Syntax.Ident get_ident() +FSharp.Compiler.Syntax.SynPat+OptionalVal: FSharp.Compiler.Syntax.Ident ident +FSharp.Compiler.Syntax.SynPat+OptionalVal: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynPat+OptionalVal: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynPat+Or: FSharp.Compiler.Syntax.SynPat get_lhsPat() +FSharp.Compiler.Syntax.SynPat+Or: FSharp.Compiler.Syntax.SynPat get_rhsPat() +FSharp.Compiler.Syntax.SynPat+Or: FSharp.Compiler.Syntax.SynPat lhsPat +FSharp.Compiler.Syntax.SynPat+Or: FSharp.Compiler.Syntax.SynPat rhsPat +FSharp.Compiler.Syntax.SynPat+Or: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynPat+Or: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynPat+Paren: FSharp.Compiler.Syntax.SynPat get_pat() +FSharp.Compiler.Syntax.SynPat+Paren: FSharp.Compiler.Syntax.SynPat pat +FSharp.Compiler.Syntax.SynPat+Paren: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynPat+Paren: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynPat+QuoteExpr: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynPat+QuoteExpr: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynPat+QuoteExpr: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynPat+QuoteExpr: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynPat+Record: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynPat+Record: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynPat+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Syntax.SynPat]] fieldPats +FSharp.Compiler.Syntax.SynPat+Record: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Syntax.SynPat]] get_fieldPats() +FSharp.Compiler.Syntax.SynPat+Tags: Int32 Ands +FSharp.Compiler.Syntax.SynPat+Tags: Int32 ArrayOrList +FSharp.Compiler.Syntax.SynPat+Tags: Int32 As +FSharp.Compiler.Syntax.SynPat+Tags: Int32 Attrib +FSharp.Compiler.Syntax.SynPat+Tags: Int32 Const +FSharp.Compiler.Syntax.SynPat+Tags: Int32 DeprecatedCharRange +FSharp.Compiler.Syntax.SynPat+Tags: Int32 FromParseError +FSharp.Compiler.Syntax.SynPat+Tags: Int32 InstanceMember +FSharp.Compiler.Syntax.SynPat+Tags: Int32 IsInst +FSharp.Compiler.Syntax.SynPat+Tags: Int32 LongIdent +FSharp.Compiler.Syntax.SynPat+Tags: Int32 Named +FSharp.Compiler.Syntax.SynPat+Tags: Int32 Null +FSharp.Compiler.Syntax.SynPat+Tags: Int32 OptionalVal +FSharp.Compiler.Syntax.SynPat+Tags: Int32 Or +FSharp.Compiler.Syntax.SynPat+Tags: Int32 Paren +FSharp.Compiler.Syntax.SynPat+Tags: Int32 QuoteExpr +FSharp.Compiler.Syntax.SynPat+Tags: Int32 Record +FSharp.Compiler.Syntax.SynPat+Tags: Int32 Tuple +FSharp.Compiler.Syntax.SynPat+Tags: Int32 Typed +FSharp.Compiler.Syntax.SynPat+Tags: Int32 Wild +FSharp.Compiler.Syntax.SynPat+Tuple: Boolean get_isStruct() +FSharp.Compiler.Syntax.SynPat+Tuple: Boolean isStruct +FSharp.Compiler.Syntax.SynPat+Tuple: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynPat+Tuple: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynPat+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat] elementPats +FSharp.Compiler.Syntax.SynPat+Tuple: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat] get_elementPats() +FSharp.Compiler.Syntax.SynPat+Typed: FSharp.Compiler.Syntax.SynPat get_pat() +FSharp.Compiler.Syntax.SynPat+Typed: FSharp.Compiler.Syntax.SynPat pat +FSharp.Compiler.Syntax.SynPat+Typed: FSharp.Compiler.Syntax.SynType get_targetType() +FSharp.Compiler.Syntax.SynPat+Typed: FSharp.Compiler.Syntax.SynType targetType +FSharp.Compiler.Syntax.SynPat+Typed: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynPat+Typed: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynPat+Wild: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynPat+Wild: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynPat: Boolean IsAnds +FSharp.Compiler.Syntax.SynPat: Boolean IsArrayOrList +FSharp.Compiler.Syntax.SynPat: Boolean IsAs +FSharp.Compiler.Syntax.SynPat: Boolean IsAttrib +FSharp.Compiler.Syntax.SynPat: Boolean IsConst +FSharp.Compiler.Syntax.SynPat: Boolean IsDeprecatedCharRange +FSharp.Compiler.Syntax.SynPat: Boolean IsFromParseError +FSharp.Compiler.Syntax.SynPat: Boolean IsInstanceMember +FSharp.Compiler.Syntax.SynPat: Boolean IsIsInst +FSharp.Compiler.Syntax.SynPat: Boolean IsLongIdent +FSharp.Compiler.Syntax.SynPat: Boolean IsNamed +FSharp.Compiler.Syntax.SynPat: Boolean IsNull +FSharp.Compiler.Syntax.SynPat: Boolean IsOptionalVal +FSharp.Compiler.Syntax.SynPat: Boolean IsOr +FSharp.Compiler.Syntax.SynPat: Boolean IsParen +FSharp.Compiler.Syntax.SynPat: Boolean IsQuoteExpr +FSharp.Compiler.Syntax.SynPat: Boolean IsRecord +FSharp.Compiler.Syntax.SynPat: Boolean IsTuple +FSharp.Compiler.Syntax.SynPat: Boolean IsTyped +FSharp.Compiler.Syntax.SynPat: Boolean IsWild +FSharp.Compiler.Syntax.SynPat: Boolean get_IsAnds() +FSharp.Compiler.Syntax.SynPat: Boolean get_IsArrayOrList() +FSharp.Compiler.Syntax.SynPat: Boolean get_IsAs() +FSharp.Compiler.Syntax.SynPat: Boolean get_IsAttrib() +FSharp.Compiler.Syntax.SynPat: Boolean get_IsConst() +FSharp.Compiler.Syntax.SynPat: Boolean get_IsDeprecatedCharRange() +FSharp.Compiler.Syntax.SynPat: Boolean get_IsFromParseError() +FSharp.Compiler.Syntax.SynPat: Boolean get_IsInstanceMember() +FSharp.Compiler.Syntax.SynPat: Boolean get_IsIsInst() +FSharp.Compiler.Syntax.SynPat: Boolean get_IsLongIdent() +FSharp.Compiler.Syntax.SynPat: Boolean get_IsNamed() +FSharp.Compiler.Syntax.SynPat: Boolean get_IsNull() +FSharp.Compiler.Syntax.SynPat: Boolean get_IsOptionalVal() +FSharp.Compiler.Syntax.SynPat: Boolean get_IsOr() +FSharp.Compiler.Syntax.SynPat: Boolean get_IsParen() +FSharp.Compiler.Syntax.SynPat: Boolean get_IsQuoteExpr() +FSharp.Compiler.Syntax.SynPat: Boolean get_IsRecord() +FSharp.Compiler.Syntax.SynPat: Boolean get_IsTuple() +FSharp.Compiler.Syntax.SynPat: Boolean get_IsTyped() +FSharp.Compiler.Syntax.SynPat: Boolean get_IsWild() +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewAnds(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewArrayOrList(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewAs(FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewAttrib(FSharp.Compiler.Syntax.SynPat, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewConst(FSharp.Compiler.Syntax.SynConst, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewDeprecatedCharRange(Char, Char, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewFromParseError(FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewInstanceMember(FSharp.Compiler.Syntax.Ident, FSharp.Compiler.Syntax.Ident, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewIsInst(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewLongIdent(FSharp.Compiler.Syntax.LongIdentWithDots, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynValTyparDecls], FSharp.Compiler.Syntax.SynArgPats, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewNamed(FSharp.Compiler.Syntax.Ident, Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewNull(FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewOptionalVal(FSharp.Compiler.Syntax.Ident, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewOr(FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewParen(FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewQuoteExpr(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewRecord(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Syntax.Ident],FSharp.Compiler.Syntax.SynPat]], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewTuple(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewTyped(FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewWild(FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Ands +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+ArrayOrList +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+As +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Attrib +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Const +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+DeprecatedCharRange +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+FromParseError +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+InstanceMember +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+IsInst +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+LongIdent +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Named +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Null +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+OptionalVal +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Or +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Paren +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+QuoteExpr +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Record +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Tags +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Tuple +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Typed +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Wild +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynPat: Int32 Tag +FSharp.Compiler.Syntax.SynPat: Int32 get_Tag() +FSharp.Compiler.Syntax.SynPat: System.String ToString() +FSharp.Compiler.Syntax.SynRationalConst +FSharp.Compiler.Syntax.SynRationalConst+Integer: Int32 get_value() +FSharp.Compiler.Syntax.SynRationalConst+Integer: Int32 value +FSharp.Compiler.Syntax.SynRationalConst+Negate: FSharp.Compiler.Syntax.SynRationalConst Item +FSharp.Compiler.Syntax.SynRationalConst+Negate: FSharp.Compiler.Syntax.SynRationalConst get_Item() +FSharp.Compiler.Syntax.SynRationalConst+Rational: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynRationalConst+Rational: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynRationalConst+Rational: Int32 denominator +FSharp.Compiler.Syntax.SynRationalConst+Rational: Int32 get_denominator() +FSharp.Compiler.Syntax.SynRationalConst+Rational: Int32 get_numerator() +FSharp.Compiler.Syntax.SynRationalConst+Rational: Int32 numerator +FSharp.Compiler.Syntax.SynRationalConst+Tags: Int32 Integer +FSharp.Compiler.Syntax.SynRationalConst+Tags: Int32 Negate +FSharp.Compiler.Syntax.SynRationalConst+Tags: Int32 Rational +FSharp.Compiler.Syntax.SynRationalConst: Boolean IsInteger +FSharp.Compiler.Syntax.SynRationalConst: Boolean IsNegate +FSharp.Compiler.Syntax.SynRationalConst: Boolean IsRational +FSharp.Compiler.Syntax.SynRationalConst: Boolean get_IsInteger() +FSharp.Compiler.Syntax.SynRationalConst: Boolean get_IsNegate() +FSharp.Compiler.Syntax.SynRationalConst: Boolean get_IsRational() +FSharp.Compiler.Syntax.SynRationalConst: FSharp.Compiler.Syntax.SynRationalConst NewInteger(Int32) +FSharp.Compiler.Syntax.SynRationalConst: FSharp.Compiler.Syntax.SynRationalConst NewNegate(FSharp.Compiler.Syntax.SynRationalConst) +FSharp.Compiler.Syntax.SynRationalConst: FSharp.Compiler.Syntax.SynRationalConst NewRational(Int32, Int32, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynRationalConst: FSharp.Compiler.Syntax.SynRationalConst+Integer +FSharp.Compiler.Syntax.SynRationalConst: FSharp.Compiler.Syntax.SynRationalConst+Negate +FSharp.Compiler.Syntax.SynRationalConst: FSharp.Compiler.Syntax.SynRationalConst+Rational +FSharp.Compiler.Syntax.SynRationalConst: FSharp.Compiler.Syntax.SynRationalConst+Tags +FSharp.Compiler.Syntax.SynRationalConst: Int32 Tag +FSharp.Compiler.Syntax.SynRationalConst: Int32 get_Tag() +FSharp.Compiler.Syntax.SynRationalConst: System.String ToString() +FSharp.Compiler.Syntax.SynReturnInfo +FSharp.Compiler.Syntax.SynReturnInfo: FSharp.Compiler.Syntax.SynReturnInfo NewSynReturnInfo(System.Tuple`2[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Syntax.SynArgInfo], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynReturnInfo: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynReturnInfo: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynReturnInfo: Int32 Tag +FSharp.Compiler.Syntax.SynReturnInfo: Int32 get_Tag() +FSharp.Compiler.Syntax.SynReturnInfo: System.String ToString() +FSharp.Compiler.Syntax.SynReturnInfo: System.Tuple`2[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Syntax.SynArgInfo] get_returnType() +FSharp.Compiler.Syntax.SynReturnInfo: System.Tuple`2[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Syntax.SynArgInfo] returnType +FSharp.Compiler.Syntax.SynSimplePat +FSharp.Compiler.Syntax.SynSimplePat+Attrib: FSharp.Compiler.Syntax.SynSimplePat get_pat() +FSharp.Compiler.Syntax.SynSimplePat+Attrib: FSharp.Compiler.Syntax.SynSimplePat pat +FSharp.Compiler.Syntax.SynSimplePat+Attrib: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynSimplePat+Attrib: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynSimplePat+Attrib: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes +FSharp.Compiler.Syntax.SynSimplePat+Attrib: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() +FSharp.Compiler.Syntax.SynSimplePat+Id: Boolean get_isCompilerGenerated() +FSharp.Compiler.Syntax.SynSimplePat+Id: Boolean get_isOptArg() +FSharp.Compiler.Syntax.SynSimplePat+Id: Boolean get_isThisVar() +FSharp.Compiler.Syntax.SynSimplePat+Id: Boolean isCompilerGenerated +FSharp.Compiler.Syntax.SynSimplePat+Id: Boolean isOptArg +FSharp.Compiler.Syntax.SynSimplePat+Id: Boolean isThisVar +FSharp.Compiler.Syntax.SynSimplePat+Id: FSharp.Compiler.Syntax.Ident get_ident() +FSharp.Compiler.Syntax.SynSimplePat+Id: FSharp.Compiler.Syntax.Ident ident +FSharp.Compiler.Syntax.SynSimplePat+Id: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynSimplePat+Id: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynSimplePat+Id: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo]] altNameRefCell +FSharp.Compiler.Syntax.SynSimplePat+Id: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo]] get_altNameRefCell() +FSharp.Compiler.Syntax.SynSimplePat+Tags: Int32 Attrib +FSharp.Compiler.Syntax.SynSimplePat+Tags: Int32 Id +FSharp.Compiler.Syntax.SynSimplePat+Tags: Int32 Typed +FSharp.Compiler.Syntax.SynSimplePat+Typed: FSharp.Compiler.Syntax.SynSimplePat get_pat() +FSharp.Compiler.Syntax.SynSimplePat+Typed: FSharp.Compiler.Syntax.SynSimplePat pat +FSharp.Compiler.Syntax.SynSimplePat+Typed: FSharp.Compiler.Syntax.SynType get_targetType() +FSharp.Compiler.Syntax.SynSimplePat+Typed: FSharp.Compiler.Syntax.SynType targetType +FSharp.Compiler.Syntax.SynSimplePat+Typed: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynSimplePat+Typed: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynSimplePat: Boolean IsAttrib +FSharp.Compiler.Syntax.SynSimplePat: Boolean IsId +FSharp.Compiler.Syntax.SynSimplePat: Boolean IsTyped +FSharp.Compiler.Syntax.SynSimplePat: Boolean get_IsAttrib() +FSharp.Compiler.Syntax.SynSimplePat: Boolean get_IsId() +FSharp.Compiler.Syntax.SynSimplePat: Boolean get_IsTyped() +FSharp.Compiler.Syntax.SynSimplePat: FSharp.Compiler.Syntax.SynSimplePat NewAttrib(FSharp.Compiler.Syntax.SynSimplePat, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynSimplePat: FSharp.Compiler.Syntax.SynSimplePat NewId(FSharp.Compiler.Syntax.Ident, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpRef`1[FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo]], Boolean, Boolean, Boolean, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynSimplePat: FSharp.Compiler.Syntax.SynSimplePat NewTyped(FSharp.Compiler.Syntax.SynSimplePat, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynSimplePat: FSharp.Compiler.Syntax.SynSimplePat+Attrib +FSharp.Compiler.Syntax.SynSimplePat: FSharp.Compiler.Syntax.SynSimplePat+Id +FSharp.Compiler.Syntax.SynSimplePat: FSharp.Compiler.Syntax.SynSimplePat+Tags +FSharp.Compiler.Syntax.SynSimplePat: FSharp.Compiler.Syntax.SynSimplePat+Typed +FSharp.Compiler.Syntax.SynSimplePat: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynSimplePat: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynSimplePat: Int32 Tag +FSharp.Compiler.Syntax.SynSimplePat: Int32 get_Tag() +FSharp.Compiler.Syntax.SynSimplePat: System.String ToString() +FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo +FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo+Decided: FSharp.Compiler.Syntax.Ident Item +FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo+Decided: FSharp.Compiler.Syntax.Ident get_Item() +FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo+Tags: Int32 Decided +FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo+Tags: Int32 Undecided +FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo+Undecided: FSharp.Compiler.Syntax.Ident Item +FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo+Undecided: FSharp.Compiler.Syntax.Ident get_Item() +FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: Boolean IsDecided +FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: Boolean IsUndecided +FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: Boolean get_IsDecided() +FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: Boolean get_IsUndecided() +FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo NewDecided(FSharp.Compiler.Syntax.Ident) +FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo NewUndecided(FSharp.Compiler.Syntax.Ident) +FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo+Decided +FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo+Tags +FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo+Undecided +FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: Int32 Tag +FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: Int32 get_Tag() +FSharp.Compiler.Syntax.SynSimplePatAlternativeIdInfo: System.String ToString() +FSharp.Compiler.Syntax.SynSimplePats +FSharp.Compiler.Syntax.SynSimplePats+SimplePats: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynSimplePats+SimplePats: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynSimplePats+SimplePats: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynSimplePat] get_pats() +FSharp.Compiler.Syntax.SynSimplePats+SimplePats: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynSimplePat] pats +FSharp.Compiler.Syntax.SynSimplePats+Tags: Int32 SimplePats +FSharp.Compiler.Syntax.SynSimplePats+Tags: Int32 Typed +FSharp.Compiler.Syntax.SynSimplePats+Typed: FSharp.Compiler.Syntax.SynSimplePats get_pats() +FSharp.Compiler.Syntax.SynSimplePats+Typed: FSharp.Compiler.Syntax.SynSimplePats pats +FSharp.Compiler.Syntax.SynSimplePats+Typed: FSharp.Compiler.Syntax.SynType get_targetType() +FSharp.Compiler.Syntax.SynSimplePats+Typed: FSharp.Compiler.Syntax.SynType targetType +FSharp.Compiler.Syntax.SynSimplePats+Typed: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynSimplePats+Typed: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynSimplePats: Boolean IsSimplePats +FSharp.Compiler.Syntax.SynSimplePats: Boolean IsTyped +FSharp.Compiler.Syntax.SynSimplePats: Boolean get_IsSimplePats() +FSharp.Compiler.Syntax.SynSimplePats: Boolean get_IsTyped() +FSharp.Compiler.Syntax.SynSimplePats: FSharp.Compiler.Syntax.SynSimplePats NewSimplePats(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynSimplePat], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynSimplePats: FSharp.Compiler.Syntax.SynSimplePats NewTyped(FSharp.Compiler.Syntax.SynSimplePats, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynSimplePats: FSharp.Compiler.Syntax.SynSimplePats+SimplePats +FSharp.Compiler.Syntax.SynSimplePats: FSharp.Compiler.Syntax.SynSimplePats+Tags +FSharp.Compiler.Syntax.SynSimplePats: FSharp.Compiler.Syntax.SynSimplePats+Typed +FSharp.Compiler.Syntax.SynSimplePats: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynSimplePats: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynSimplePats: Int32 Tag +FSharp.Compiler.Syntax.SynSimplePats: Int32 get_Tag() +FSharp.Compiler.Syntax.SynSimplePats: System.String ToString() +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+Tags: Int32 WhenTyparIsStruct +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+Tags: Int32 WhenTyparTyconEqualsTycon +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparIsStruct: FSharp.Compiler.Syntax.SynTypar get_typar() +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparIsStruct: FSharp.Compiler.Syntax.SynTypar typar +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparIsStruct: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparIsStruct: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: FSharp.Compiler.Syntax.SynTypar get_typar() +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: FSharp.Compiler.Syntax.SynTypar typar +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: FSharp.Compiler.Syntax.SynType get_rhsType() +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: FSharp.Compiler.Syntax.SynType rhsType +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: Boolean IsWhenTyparIsStruct +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: Boolean IsWhenTyparTyconEqualsTycon +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: Boolean get_IsWhenTyparIsStruct() +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: Boolean get_IsWhenTyparTyconEqualsTycon() +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: FSharp.Compiler.Syntax.SynStaticOptimizationConstraint NewWhenTyparIsStruct(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: FSharp.Compiler.Syntax.SynStaticOptimizationConstraint NewWhenTyparTyconEqualsTycon(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+Tags +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparIsStruct +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: FSharp.Compiler.Syntax.SynStaticOptimizationConstraint+WhenTyparTyconEqualsTycon +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: Int32 Tag +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: Int32 get_Tag() +FSharp.Compiler.Syntax.SynStaticOptimizationConstraint: System.String ToString() +FSharp.Compiler.Syntax.SynStringKind +FSharp.Compiler.Syntax.SynStringKind+Tags: Int32 Regular +FSharp.Compiler.Syntax.SynStringKind+Tags: Int32 TripleQuote +FSharp.Compiler.Syntax.SynStringKind+Tags: Int32 Verbatim +FSharp.Compiler.Syntax.SynStringKind: Boolean Equals(FSharp.Compiler.Syntax.SynStringKind) +FSharp.Compiler.Syntax.SynStringKind: Boolean Equals(System.Object) +FSharp.Compiler.Syntax.SynStringKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.SynStringKind: Boolean IsRegular +FSharp.Compiler.Syntax.SynStringKind: Boolean IsTripleQuote +FSharp.Compiler.Syntax.SynStringKind: Boolean IsVerbatim +FSharp.Compiler.Syntax.SynStringKind: Boolean get_IsRegular() +FSharp.Compiler.Syntax.SynStringKind: Boolean get_IsTripleQuote() +FSharp.Compiler.Syntax.SynStringKind: Boolean get_IsVerbatim() +FSharp.Compiler.Syntax.SynStringKind: FSharp.Compiler.Syntax.SynStringKind Regular +FSharp.Compiler.Syntax.SynStringKind: FSharp.Compiler.Syntax.SynStringKind TripleQuote +FSharp.Compiler.Syntax.SynStringKind: FSharp.Compiler.Syntax.SynStringKind Verbatim +FSharp.Compiler.Syntax.SynStringKind: FSharp.Compiler.Syntax.SynStringKind get_Regular() +FSharp.Compiler.Syntax.SynStringKind: FSharp.Compiler.Syntax.SynStringKind get_TripleQuote() +FSharp.Compiler.Syntax.SynStringKind: FSharp.Compiler.Syntax.SynStringKind get_Verbatim() +FSharp.Compiler.Syntax.SynStringKind: FSharp.Compiler.Syntax.SynStringKind+Tags +FSharp.Compiler.Syntax.SynStringKind: Int32 CompareTo(FSharp.Compiler.Syntax.SynStringKind) +FSharp.Compiler.Syntax.SynStringKind: Int32 CompareTo(System.Object) +FSharp.Compiler.Syntax.SynStringKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.Syntax.SynStringKind: Int32 GetHashCode() +FSharp.Compiler.Syntax.SynStringKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.SynStringKind: Int32 Tag +FSharp.Compiler.Syntax.SynStringKind: Int32 get_Tag() +FSharp.Compiler.Syntax.SynStringKind: System.String ToString() +FSharp.Compiler.Syntax.SynTypar +FSharp.Compiler.Syntax.SynTypar: Boolean get_isCompGen() +FSharp.Compiler.Syntax.SynTypar: Boolean isCompGen +FSharp.Compiler.Syntax.SynTypar: FSharp.Compiler.Syntax.Ident get_ident() +FSharp.Compiler.Syntax.SynTypar: FSharp.Compiler.Syntax.Ident ident +FSharp.Compiler.Syntax.SynTypar: FSharp.Compiler.Syntax.SynTypar NewSynTypar(FSharp.Compiler.Syntax.Ident, FSharp.Compiler.Syntax.TyparStaticReq, Boolean) +FSharp.Compiler.Syntax.SynTypar: FSharp.Compiler.Syntax.TyparStaticReq get_staticReq() +FSharp.Compiler.Syntax.SynTypar: FSharp.Compiler.Syntax.TyparStaticReq staticReq +FSharp.Compiler.Syntax.SynTypar: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynTypar: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynTypar: Int32 Tag +FSharp.Compiler.Syntax.SynTypar: Int32 get_Tag() +FSharp.Compiler.Syntax.SynTypar: System.String ToString() +FSharp.Compiler.Syntax.SynTyparDecl +FSharp.Compiler.Syntax.SynTyparDecl: FSharp.Compiler.Syntax.SynTypar Item2 +FSharp.Compiler.Syntax.SynTyparDecl: FSharp.Compiler.Syntax.SynTypar get_Item2() +FSharp.Compiler.Syntax.SynTyparDecl: FSharp.Compiler.Syntax.SynTyparDecl NewSynTyparDecl(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Syntax.SynTypar) +FSharp.Compiler.Syntax.SynTyparDecl: Int32 Tag +FSharp.Compiler.Syntax.SynTyparDecl: Int32 get_Tag() +FSharp.Compiler.Syntax.SynTyparDecl: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes +FSharp.Compiler.Syntax.SynTyparDecl: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() +FSharp.Compiler.Syntax.SynTyparDecl: System.String ToString() +FSharp.Compiler.Syntax.SynTyparDecls +FSharp.Compiler.Syntax.SynTyparDecls+PostfixList: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTyparDecls+PostfixList: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTyparDecls+PostfixList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTyparDecl] decls +FSharp.Compiler.Syntax.SynTyparDecls+PostfixList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTyparDecl] get_decls() +FSharp.Compiler.Syntax.SynTyparDecls+PostfixList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint] constraints +FSharp.Compiler.Syntax.SynTyparDecls+PostfixList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint] get_constraints() +FSharp.Compiler.Syntax.SynTyparDecls+PrefixList: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTyparDecls+PrefixList: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTyparDecls+PrefixList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTyparDecl] decls +FSharp.Compiler.Syntax.SynTyparDecls+PrefixList: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTyparDecl] get_decls() +FSharp.Compiler.Syntax.SynTyparDecls+SinglePrefix: FSharp.Compiler.Syntax.SynTyparDecl decl +FSharp.Compiler.Syntax.SynTyparDecls+SinglePrefix: FSharp.Compiler.Syntax.SynTyparDecl get_decl() +FSharp.Compiler.Syntax.SynTyparDecls+SinglePrefix: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTyparDecls+SinglePrefix: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTyparDecls+Tags: Int32 PostfixList +FSharp.Compiler.Syntax.SynTyparDecls+Tags: Int32 PrefixList +FSharp.Compiler.Syntax.SynTyparDecls+Tags: Int32 SinglePrefix +FSharp.Compiler.Syntax.SynTyparDecls: Boolean IsPostfixList +FSharp.Compiler.Syntax.SynTyparDecls: Boolean IsPrefixList +FSharp.Compiler.Syntax.SynTyparDecls: Boolean IsSinglePrefix +FSharp.Compiler.Syntax.SynTyparDecls: Boolean get_IsPostfixList() +FSharp.Compiler.Syntax.SynTyparDecls: Boolean get_IsPrefixList() +FSharp.Compiler.Syntax.SynTyparDecls: Boolean get_IsSinglePrefix() +FSharp.Compiler.Syntax.SynTyparDecls: FSharp.Compiler.Syntax.SynTyparDecls NewPostfixList(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTyparDecl], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTyparDecls: FSharp.Compiler.Syntax.SynTyparDecls NewPrefixList(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTyparDecl], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTyparDecls: FSharp.Compiler.Syntax.SynTyparDecls NewSinglePrefix(FSharp.Compiler.Syntax.SynTyparDecl, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTyparDecls: FSharp.Compiler.Syntax.SynTyparDecls+PostfixList +FSharp.Compiler.Syntax.SynTyparDecls: FSharp.Compiler.Syntax.SynTyparDecls+PrefixList +FSharp.Compiler.Syntax.SynTyparDecls: FSharp.Compiler.Syntax.SynTyparDecls+SinglePrefix +FSharp.Compiler.Syntax.SynTyparDecls: FSharp.Compiler.Syntax.SynTyparDecls+Tags +FSharp.Compiler.Syntax.SynTyparDecls: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynTyparDecls: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynTyparDecls: Int32 Tag +FSharp.Compiler.Syntax.SynTyparDecls: Int32 get_Tag() +FSharp.Compiler.Syntax.SynTyparDecls: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTyparDecl] TyparDecls +FSharp.Compiler.Syntax.SynTyparDecls: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTyparDecl] get_TyparDecls() +FSharp.Compiler.Syntax.SynTyparDecls: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint] Constraints +FSharp.Compiler.Syntax.SynTyparDecls: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint] get_Constraints() +FSharp.Compiler.Syntax.SynTyparDecls: System.String ToString() +FSharp.Compiler.Syntax.SynType +FSharp.Compiler.Syntax.SynType+Anon: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynType+Anon: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynType+AnonRecd: Boolean get_isStruct() +FSharp.Compiler.Syntax.SynType+AnonRecd: Boolean isStruct +FSharp.Compiler.Syntax.SynType+AnonRecd: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynType+AnonRecd: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynType+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynType]] fields +FSharp.Compiler.Syntax.SynType+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynType]] get_fields() +FSharp.Compiler.Syntax.SynType+App: Boolean get_isPostfix() +FSharp.Compiler.Syntax.SynType+App: Boolean isPostfix +FSharp.Compiler.Syntax.SynType+App: FSharp.Compiler.Syntax.SynType get_typeName() +FSharp.Compiler.Syntax.SynType+App: FSharp.Compiler.Syntax.SynType typeName +FSharp.Compiler.Syntax.SynType+App: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynType+App: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynType+App: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] get_typeArgs() +FSharp.Compiler.Syntax.SynType+App: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] typeArgs +FSharp.Compiler.Syntax.SynType+App: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range] commaRanges +FSharp.Compiler.Syntax.SynType+App: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range] get_commaRanges() +FSharp.Compiler.Syntax.SynType+App: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_greaterRange() +FSharp.Compiler.Syntax.SynType+App: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_lessRange() +FSharp.Compiler.Syntax.SynType+App: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] greaterRange +FSharp.Compiler.Syntax.SynType+App: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] lessRange +FSharp.Compiler.Syntax.SynType+Array: FSharp.Compiler.Syntax.SynType elementType +FSharp.Compiler.Syntax.SynType+Array: FSharp.Compiler.Syntax.SynType get_elementType() +FSharp.Compiler.Syntax.SynType+Array: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynType+Array: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynType+Array: Int32 get_rank() +FSharp.Compiler.Syntax.SynType+Array: Int32 rank +FSharp.Compiler.Syntax.SynType+Fun: FSharp.Compiler.Syntax.SynType argType +FSharp.Compiler.Syntax.SynType+Fun: FSharp.Compiler.Syntax.SynType get_argType() +FSharp.Compiler.Syntax.SynType+Fun: FSharp.Compiler.Syntax.SynType get_returnType() +FSharp.Compiler.Syntax.SynType+Fun: FSharp.Compiler.Syntax.SynType returnType +FSharp.Compiler.Syntax.SynType+Fun: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynType+Fun: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynType+HashConstraint: FSharp.Compiler.Syntax.SynType get_innerType() +FSharp.Compiler.Syntax.SynType+HashConstraint: FSharp.Compiler.Syntax.SynType innerType +FSharp.Compiler.Syntax.SynType+HashConstraint: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynType+HashConstraint: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynType+LongIdent: FSharp.Compiler.Syntax.LongIdentWithDots get_longDotId() +FSharp.Compiler.Syntax.SynType+LongIdent: FSharp.Compiler.Syntax.LongIdentWithDots longDotId +FSharp.Compiler.Syntax.SynType+LongIdentApp: FSharp.Compiler.Syntax.LongIdentWithDots get_longDotId() +FSharp.Compiler.Syntax.SynType+LongIdentApp: FSharp.Compiler.Syntax.LongIdentWithDots longDotId +FSharp.Compiler.Syntax.SynType+LongIdentApp: FSharp.Compiler.Syntax.SynType get_typeName() +FSharp.Compiler.Syntax.SynType+LongIdentApp: FSharp.Compiler.Syntax.SynType typeName +FSharp.Compiler.Syntax.SynType+LongIdentApp: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynType+LongIdentApp: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynType+LongIdentApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] get_typeArgs() +FSharp.Compiler.Syntax.SynType+LongIdentApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] typeArgs +FSharp.Compiler.Syntax.SynType+LongIdentApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range] commaRanges +FSharp.Compiler.Syntax.SynType+LongIdentApp: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range] get_commaRanges() +FSharp.Compiler.Syntax.SynType+LongIdentApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_greaterRange() +FSharp.Compiler.Syntax.SynType+LongIdentApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_lessRange() +FSharp.Compiler.Syntax.SynType+LongIdentApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] greaterRange +FSharp.Compiler.Syntax.SynType+LongIdentApp: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] lessRange +FSharp.Compiler.Syntax.SynType+MeasureDivide: FSharp.Compiler.Syntax.SynType dividend +FSharp.Compiler.Syntax.SynType+MeasureDivide: FSharp.Compiler.Syntax.SynType divisor +FSharp.Compiler.Syntax.SynType+MeasureDivide: FSharp.Compiler.Syntax.SynType get_dividend() +FSharp.Compiler.Syntax.SynType+MeasureDivide: FSharp.Compiler.Syntax.SynType get_divisor() +FSharp.Compiler.Syntax.SynType+MeasureDivide: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynType+MeasureDivide: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynType+MeasurePower: FSharp.Compiler.Syntax.SynRationalConst exponent +FSharp.Compiler.Syntax.SynType+MeasurePower: FSharp.Compiler.Syntax.SynRationalConst get_exponent() +FSharp.Compiler.Syntax.SynType+MeasurePower: FSharp.Compiler.Syntax.SynType baseMeasure +FSharp.Compiler.Syntax.SynType+MeasurePower: FSharp.Compiler.Syntax.SynType get_baseMeasure() +FSharp.Compiler.Syntax.SynType+MeasurePower: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynType+MeasurePower: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynType+Paren: FSharp.Compiler.Syntax.SynType get_innerType() +FSharp.Compiler.Syntax.SynType+Paren: FSharp.Compiler.Syntax.SynType innerType +FSharp.Compiler.Syntax.SynType+Paren: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynType+Paren: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynType+StaticConstant: FSharp.Compiler.Syntax.SynConst constant +FSharp.Compiler.Syntax.SynType+StaticConstant: FSharp.Compiler.Syntax.SynConst get_constant() +FSharp.Compiler.Syntax.SynType+StaticConstant: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynType+StaticConstant: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynType+StaticConstantExpr: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynType+StaticConstantExpr: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynType+StaticConstantExpr: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynType+StaticConstantExpr: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynType+StaticConstantNamed: FSharp.Compiler.Syntax.SynType get_ident() +FSharp.Compiler.Syntax.SynType+StaticConstantNamed: FSharp.Compiler.Syntax.SynType get_value() +FSharp.Compiler.Syntax.SynType+StaticConstantNamed: FSharp.Compiler.Syntax.SynType ident +FSharp.Compiler.Syntax.SynType+StaticConstantNamed: FSharp.Compiler.Syntax.SynType value +FSharp.Compiler.Syntax.SynType+StaticConstantNamed: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynType+StaticConstantNamed: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynType+Tags: Int32 Anon +FSharp.Compiler.Syntax.SynType+Tags: Int32 AnonRecd +FSharp.Compiler.Syntax.SynType+Tags: Int32 App +FSharp.Compiler.Syntax.SynType+Tags: Int32 Array +FSharp.Compiler.Syntax.SynType+Tags: Int32 Fun +FSharp.Compiler.Syntax.SynType+Tags: Int32 HashConstraint +FSharp.Compiler.Syntax.SynType+Tags: Int32 LongIdent +FSharp.Compiler.Syntax.SynType+Tags: Int32 LongIdentApp +FSharp.Compiler.Syntax.SynType+Tags: Int32 MeasureDivide +FSharp.Compiler.Syntax.SynType+Tags: Int32 MeasurePower +FSharp.Compiler.Syntax.SynType+Tags: Int32 Paren +FSharp.Compiler.Syntax.SynType+Tags: Int32 StaticConstant +FSharp.Compiler.Syntax.SynType+Tags: Int32 StaticConstantExpr +FSharp.Compiler.Syntax.SynType+Tags: Int32 StaticConstantNamed +FSharp.Compiler.Syntax.SynType+Tags: Int32 Tuple +FSharp.Compiler.Syntax.SynType+Tags: Int32 Var +FSharp.Compiler.Syntax.SynType+Tags: Int32 WithGlobalConstraints +FSharp.Compiler.Syntax.SynType+Tuple: Boolean get_isStruct() +FSharp.Compiler.Syntax.SynType+Tuple: Boolean isStruct +FSharp.Compiler.Syntax.SynType+Tuple: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynType+Tuple: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynType+Tuple: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Boolean,FSharp.Compiler.Syntax.SynType]] elementTypes +FSharp.Compiler.Syntax.SynType+Tuple: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Boolean,FSharp.Compiler.Syntax.SynType]] get_elementTypes() +FSharp.Compiler.Syntax.SynType+Var: FSharp.Compiler.Syntax.SynTypar get_typar() +FSharp.Compiler.Syntax.SynType+Var: FSharp.Compiler.Syntax.SynTypar typar +FSharp.Compiler.Syntax.SynType+Var: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynType+Var: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynType+WithGlobalConstraints: FSharp.Compiler.Syntax.SynType get_typeName() +FSharp.Compiler.Syntax.SynType+WithGlobalConstraints: FSharp.Compiler.Syntax.SynType typeName +FSharp.Compiler.Syntax.SynType+WithGlobalConstraints: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynType+WithGlobalConstraints: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynType+WithGlobalConstraints: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint] constraints +FSharp.Compiler.Syntax.SynType+WithGlobalConstraints: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint] get_constraints() +FSharp.Compiler.Syntax.SynType: Boolean IsAnon +FSharp.Compiler.Syntax.SynType: Boolean IsAnonRecd +FSharp.Compiler.Syntax.SynType: Boolean IsApp +FSharp.Compiler.Syntax.SynType: Boolean IsArray +FSharp.Compiler.Syntax.SynType: Boolean IsFun +FSharp.Compiler.Syntax.SynType: Boolean IsHashConstraint +FSharp.Compiler.Syntax.SynType: Boolean IsLongIdent +FSharp.Compiler.Syntax.SynType: Boolean IsLongIdentApp +FSharp.Compiler.Syntax.SynType: Boolean IsMeasureDivide +FSharp.Compiler.Syntax.SynType: Boolean IsMeasurePower +FSharp.Compiler.Syntax.SynType: Boolean IsParen +FSharp.Compiler.Syntax.SynType: Boolean IsStaticConstant +FSharp.Compiler.Syntax.SynType: Boolean IsStaticConstantExpr +FSharp.Compiler.Syntax.SynType: Boolean IsStaticConstantNamed +FSharp.Compiler.Syntax.SynType: Boolean IsTuple +FSharp.Compiler.Syntax.SynType: Boolean IsVar +FSharp.Compiler.Syntax.SynType: Boolean IsWithGlobalConstraints +FSharp.Compiler.Syntax.SynType: Boolean get_IsAnon() +FSharp.Compiler.Syntax.SynType: Boolean get_IsAnonRecd() +FSharp.Compiler.Syntax.SynType: Boolean get_IsApp() +FSharp.Compiler.Syntax.SynType: Boolean get_IsArray() +FSharp.Compiler.Syntax.SynType: Boolean get_IsFun() +FSharp.Compiler.Syntax.SynType: Boolean get_IsHashConstraint() +FSharp.Compiler.Syntax.SynType: Boolean get_IsLongIdent() +FSharp.Compiler.Syntax.SynType: Boolean get_IsLongIdentApp() +FSharp.Compiler.Syntax.SynType: Boolean get_IsMeasureDivide() +FSharp.Compiler.Syntax.SynType: Boolean get_IsMeasurePower() +FSharp.Compiler.Syntax.SynType: Boolean get_IsParen() +FSharp.Compiler.Syntax.SynType: Boolean get_IsStaticConstant() +FSharp.Compiler.Syntax.SynType: Boolean get_IsStaticConstantExpr() +FSharp.Compiler.Syntax.SynType: Boolean get_IsStaticConstantNamed() +FSharp.Compiler.Syntax.SynType: Boolean get_IsTuple() +FSharp.Compiler.Syntax.SynType: Boolean get_IsVar() +FSharp.Compiler.Syntax.SynType: Boolean get_IsWithGlobalConstraints() +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewAnon(FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewAnonRecd(Boolean, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Syntax.SynType]], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewApp(FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Boolean, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewArray(Int32, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewFun(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewHashConstraint(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewLongIdent(FSharp.Compiler.Syntax.LongIdentWithDots) +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewLongIdentApp(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.LongIdentWithDots, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewMeasureDivide(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewMeasurePower(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynRationalConst, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewParen(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewStaticConstant(FSharp.Compiler.Syntax.SynConst, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewStaticConstantExpr(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewStaticConstantNamed(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewTuple(Boolean, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Boolean,FSharp.Compiler.Syntax.SynType]], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewVar(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType NewWithGlobalConstraints(FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynTypeConstraint], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+Anon +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+AnonRecd +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+App +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+Array +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+Fun +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+HashConstraint +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+LongIdent +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+LongIdentApp +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+MeasureDivide +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+MeasurePower +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+Paren +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+StaticConstant +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+StaticConstantExpr +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+StaticConstantNamed +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+Tags +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+Tuple +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+Var +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Syntax.SynType+WithGlobalConstraints +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynType: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynType: Int32 Tag +FSharp.Compiler.Syntax.SynType: Int32 get_Tag() +FSharp.Compiler.Syntax.SynType: System.String ToString() +FSharp.Compiler.Syntax.SynTypeConstraint +FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparDefaultsToType +FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparIsComparable +FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparIsDelegate +FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparIsEnum +FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparIsEquatable +FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparIsReferenceType +FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparIsUnmanaged +FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparIsValueType +FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparSubtypeOfType +FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparSupportsMember +FSharp.Compiler.Syntax.SynTypeConstraint+Tags: Int32 WhereTyparSupportsNull +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparDefaultsToType: FSharp.Compiler.Syntax.SynTypar get_typar() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparDefaultsToType: FSharp.Compiler.Syntax.SynTypar typar +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparDefaultsToType: FSharp.Compiler.Syntax.SynType get_typeName() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparDefaultsToType: FSharp.Compiler.Syntax.SynType typeName +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparDefaultsToType: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparDefaultsToType: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsComparable: FSharp.Compiler.Syntax.SynTypar get_typar() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsComparable: FSharp.Compiler.Syntax.SynTypar typar +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsComparable: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsComparable: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsDelegate: FSharp.Compiler.Syntax.SynTypar get_typar() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsDelegate: FSharp.Compiler.Syntax.SynTypar typar +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsDelegate: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsDelegate: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsDelegate: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] get_typeArgs() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsDelegate: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] typeArgs +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEnum: FSharp.Compiler.Syntax.SynTypar get_typar() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEnum: FSharp.Compiler.Syntax.SynTypar typar +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEnum: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEnum: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEnum: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] get_typeArgs() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEnum: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] typeArgs +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEquatable: FSharp.Compiler.Syntax.SynTypar get_typar() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEquatable: FSharp.Compiler.Syntax.SynTypar typar +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEquatable: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEquatable: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsReferenceType: FSharp.Compiler.Syntax.SynTypar get_typar() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsReferenceType: FSharp.Compiler.Syntax.SynTypar typar +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsReferenceType: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsReferenceType: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsUnmanaged: FSharp.Compiler.Syntax.SynTypar get_typar() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsUnmanaged: FSharp.Compiler.Syntax.SynTypar typar +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsUnmanaged: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsUnmanaged: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsValueType: FSharp.Compiler.Syntax.SynTypar get_typar() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsValueType: FSharp.Compiler.Syntax.SynTypar typar +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsValueType: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsValueType: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSubtypeOfType: FSharp.Compiler.Syntax.SynTypar get_typar() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSubtypeOfType: FSharp.Compiler.Syntax.SynTypar typar +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSubtypeOfType: FSharp.Compiler.Syntax.SynType get_typeName() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSubtypeOfType: FSharp.Compiler.Syntax.SynType typeName +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSubtypeOfType: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSubtypeOfType: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsMember: FSharp.Compiler.Syntax.SynMemberSig get_memberSig() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsMember: FSharp.Compiler.Syntax.SynMemberSig memberSig +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsMember: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsMember: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsMember: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] get_typars() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsMember: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType] typars +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsNull: FSharp.Compiler.Syntax.SynTypar get_typar() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsNull: FSharp.Compiler.Syntax.SynTypar typar +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsNull: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsNull: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparDefaultsToType +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparIsComparable +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparIsDelegate +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparIsEnum +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparIsEquatable +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparIsReferenceType +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparIsUnmanaged +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparIsValueType +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparSubtypeOfType +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparSupportsMember +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean IsWhereTyparSupportsNull +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparDefaultsToType() +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparIsComparable() +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparIsDelegate() +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparIsEnum() +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparIsEquatable() +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparIsReferenceType() +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparIsUnmanaged() +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparIsValueType() +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparSubtypeOfType() +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparSupportsMember() +FSharp.Compiler.Syntax.SynTypeConstraint: Boolean get_IsWhereTyparSupportsNull() +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparDefaultsToType(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparIsComparable(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparIsDelegate(FSharp.Compiler.Syntax.SynTypar, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparIsEnum(FSharp.Compiler.Syntax.SynTypar, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparIsEquatable(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparIsReferenceType(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparIsUnmanaged(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparIsValueType(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparSubtypeOfType(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparSupportsMember(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynType], FSharp.Compiler.Syntax.SynMemberSig, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint NewWhereTyparSupportsNull(FSharp.Compiler.Syntax.SynTypar, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+Tags +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparDefaultsToType +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsComparable +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsDelegate +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEnum +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsEquatable +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsReferenceType +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsUnmanaged +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparIsValueType +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSubtypeOfType +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsMember +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Syntax.SynTypeConstraint+WhereTyparSupportsNull +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynTypeConstraint: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynTypeConstraint: Int32 Tag +FSharp.Compiler.Syntax.SynTypeConstraint: Int32 get_Tag() +FSharp.Compiler.Syntax.SynTypeConstraint: System.String ToString() +FSharp.Compiler.Syntax.SynTypeDefn +FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Syntax.SynComponentInfo get_typeInfo() +FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Syntax.SynComponentInfo typeInfo +FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Syntax.SynTypeDefn NewSynTypeDefn(FSharp.Compiler.Syntax.SynComponentInfo, FSharp.Compiler.Syntax.SynTypeDefnRepr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynMemberDefn], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Syntax.SynTypeDefnRepr get_typeRepr() +FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Syntax.SynTypeDefnRepr typeRepr +FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeDefn: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeDefn: Int32 Tag +FSharp.Compiler.Syntax.SynTypeDefn: Int32 get_Tag() +FSharp.Compiler.Syntax.SynTypeDefn: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn] get_members() +FSharp.Compiler.Syntax.SynTypeDefn: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn] members +FSharp.Compiler.Syntax.SynTypeDefn: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynMemberDefn] get_implicitConstructor() +FSharp.Compiler.Syntax.SynTypeDefn: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynMemberDefn] implicitConstructor +FSharp.Compiler.Syntax.SynTypeDefn: System.String ToString() +FSharp.Compiler.Syntax.SynTypeDefnKind +FSharp.Compiler.Syntax.SynTypeDefnKind+Delegate: FSharp.Compiler.Syntax.SynType get_signature() +FSharp.Compiler.Syntax.SynTypeDefnKind+Delegate: FSharp.Compiler.Syntax.SynType signature +FSharp.Compiler.Syntax.SynTypeDefnKind+Delegate: FSharp.Compiler.Syntax.SynValInfo get_signatureInfo() +FSharp.Compiler.Syntax.SynTypeDefnKind+Delegate: FSharp.Compiler.Syntax.SynValInfo signatureInfo +FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 Abbrev +FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 Augmentation +FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 Class +FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 Delegate +FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 IL +FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 Interface +FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 Opaque +FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 Record +FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 Struct +FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 Union +FSharp.Compiler.Syntax.SynTypeDefnKind+Tags: Int32 Unspecified +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsAbbrev +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsAugmentation +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsClass +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsDelegate +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsIL +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsInterface +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsOpaque +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsRecord +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsStruct +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsUnion +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean IsUnspecified +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsAbbrev() +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsAugmentation() +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsClass() +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsDelegate() +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsIL() +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsInterface() +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsOpaque() +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsRecord() +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsStruct() +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsUnion() +FSharp.Compiler.Syntax.SynTypeDefnKind: Boolean get_IsUnspecified() +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind Abbrev +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind Augmentation +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind Class +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind IL +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind Interface +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind NewDelegate(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynValInfo) +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind Opaque +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind Record +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind Struct +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind Union +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind Unspecified +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind get_Abbrev() +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind get_Augmentation() +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind get_Class() +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind get_IL() +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind get_Interface() +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind get_Opaque() +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind get_Record() +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind get_Struct() +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind get_Union() +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind get_Unspecified() +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind+Delegate +FSharp.Compiler.Syntax.SynTypeDefnKind: FSharp.Compiler.Syntax.SynTypeDefnKind+Tags +FSharp.Compiler.Syntax.SynTypeDefnKind: Int32 Tag +FSharp.Compiler.Syntax.SynTypeDefnKind: Int32 get_Tag() +FSharp.Compiler.Syntax.SynTypeDefnKind: System.String ToString() +FSharp.Compiler.Syntax.SynTypeDefnRepr +FSharp.Compiler.Syntax.SynTypeDefnRepr+Exception: FSharp.Compiler.Syntax.SynExceptionDefnRepr exnRepr +FSharp.Compiler.Syntax.SynTypeDefnRepr+Exception: FSharp.Compiler.Syntax.SynExceptionDefnRepr get_exnRepr() +FSharp.Compiler.Syntax.SynTypeDefnRepr+ObjectModel: FSharp.Compiler.Syntax.SynTypeDefnKind get_kind() +FSharp.Compiler.Syntax.SynTypeDefnRepr+ObjectModel: FSharp.Compiler.Syntax.SynTypeDefnKind kind +FSharp.Compiler.Syntax.SynTypeDefnRepr+ObjectModel: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeDefnRepr+ObjectModel: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeDefnRepr+ObjectModel: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn] get_members() +FSharp.Compiler.Syntax.SynTypeDefnRepr+ObjectModel: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn] members +FSharp.Compiler.Syntax.SynTypeDefnRepr+Simple: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr get_simpleRepr() +FSharp.Compiler.Syntax.SynTypeDefnRepr+Simple: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr simpleRepr +FSharp.Compiler.Syntax.SynTypeDefnRepr+Simple: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeDefnRepr+Simple: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeDefnRepr+Tags: Int32 Exception +FSharp.Compiler.Syntax.SynTypeDefnRepr+Tags: Int32 ObjectModel +FSharp.Compiler.Syntax.SynTypeDefnRepr+Tags: Int32 Simple +FSharp.Compiler.Syntax.SynTypeDefnRepr: Boolean IsException +FSharp.Compiler.Syntax.SynTypeDefnRepr: Boolean IsObjectModel +FSharp.Compiler.Syntax.SynTypeDefnRepr: Boolean IsSimple +FSharp.Compiler.Syntax.SynTypeDefnRepr: Boolean get_IsException() +FSharp.Compiler.Syntax.SynTypeDefnRepr: Boolean get_IsObjectModel() +FSharp.Compiler.Syntax.SynTypeDefnRepr: Boolean get_IsSimple() +FSharp.Compiler.Syntax.SynTypeDefnRepr: FSharp.Compiler.Syntax.SynTypeDefnRepr NewException(FSharp.Compiler.Syntax.SynExceptionDefnRepr) +FSharp.Compiler.Syntax.SynTypeDefnRepr: FSharp.Compiler.Syntax.SynTypeDefnRepr NewObjectModel(FSharp.Compiler.Syntax.SynTypeDefnKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeDefnRepr: FSharp.Compiler.Syntax.SynTypeDefnRepr NewSimple(FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeDefnRepr: FSharp.Compiler.Syntax.SynTypeDefnRepr+Exception +FSharp.Compiler.Syntax.SynTypeDefnRepr: FSharp.Compiler.Syntax.SynTypeDefnRepr+ObjectModel +FSharp.Compiler.Syntax.SynTypeDefnRepr: FSharp.Compiler.Syntax.SynTypeDefnRepr+Simple +FSharp.Compiler.Syntax.SynTypeDefnRepr: FSharp.Compiler.Syntax.SynTypeDefnRepr+Tags +FSharp.Compiler.Syntax.SynTypeDefnRepr: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynTypeDefnRepr: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynTypeDefnRepr: Int32 Tag +FSharp.Compiler.Syntax.SynTypeDefnRepr: Int32 get_Tag() +FSharp.Compiler.Syntax.SynTypeDefnRepr: System.String ToString() +FSharp.Compiler.Syntax.SynTypeDefnSig +FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynComponentInfo get_typeInfo() +FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynComponentInfo typeInfo +FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynTypeDefnSig NewSynTypeDefnSig(FSharp.Compiler.Syntax.SynComponentInfo, FSharp.Compiler.Syntax.SynTypeDefnSigRepr, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynTypeDefnSigRepr get_typeRepr() +FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Syntax.SynTypeDefnSigRepr typeRepr +FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeDefnSig: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeDefnSig: Int32 Tag +FSharp.Compiler.Syntax.SynTypeDefnSig: Int32 get_Tag() +FSharp.Compiler.Syntax.SynTypeDefnSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig] get_members() +FSharp.Compiler.Syntax.SynTypeDefnSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig] members +FSharp.Compiler.Syntax.SynTypeDefnSig: System.String ToString() +FSharp.Compiler.Syntax.SynTypeDefnSigRepr +FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Exception: FSharp.Compiler.Syntax.SynExceptionDefnRepr get_repr() +FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Exception: FSharp.Compiler.Syntax.SynExceptionDefnRepr repr +FSharp.Compiler.Syntax.SynTypeDefnSigRepr+ObjectModel: FSharp.Compiler.Syntax.SynTypeDefnKind get_kind() +FSharp.Compiler.Syntax.SynTypeDefnSigRepr+ObjectModel: FSharp.Compiler.Syntax.SynTypeDefnKind kind +FSharp.Compiler.Syntax.SynTypeDefnSigRepr+ObjectModel: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeDefnSigRepr+ObjectModel: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeDefnSigRepr+ObjectModel: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig] get_memberSigs() +FSharp.Compiler.Syntax.SynTypeDefnSigRepr+ObjectModel: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig] memberSigs +FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Simple: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr get_repr() +FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Simple: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr repr +FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Simple: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Simple: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Tags: Int32 Exception +FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Tags: Int32 ObjectModel +FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Tags: Int32 Simple +FSharp.Compiler.Syntax.SynTypeDefnSigRepr: Boolean IsException +FSharp.Compiler.Syntax.SynTypeDefnSigRepr: Boolean IsObjectModel +FSharp.Compiler.Syntax.SynTypeDefnSigRepr: Boolean IsSimple +FSharp.Compiler.Syntax.SynTypeDefnSigRepr: Boolean get_IsException() +FSharp.Compiler.Syntax.SynTypeDefnSigRepr: Boolean get_IsObjectModel() +FSharp.Compiler.Syntax.SynTypeDefnSigRepr: Boolean get_IsSimple() +FSharp.Compiler.Syntax.SynTypeDefnSigRepr: FSharp.Compiler.Syntax.SynTypeDefnSigRepr NewException(FSharp.Compiler.Syntax.SynExceptionDefnRepr) +FSharp.Compiler.Syntax.SynTypeDefnSigRepr: FSharp.Compiler.Syntax.SynTypeDefnSigRepr NewObjectModel(FSharp.Compiler.Syntax.SynTypeDefnKind, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberSig], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeDefnSigRepr: FSharp.Compiler.Syntax.SynTypeDefnSigRepr NewSimple(FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeDefnSigRepr: FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Exception +FSharp.Compiler.Syntax.SynTypeDefnSigRepr: FSharp.Compiler.Syntax.SynTypeDefnSigRepr+ObjectModel +FSharp.Compiler.Syntax.SynTypeDefnSigRepr: FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Simple +FSharp.Compiler.Syntax.SynTypeDefnSigRepr: FSharp.Compiler.Syntax.SynTypeDefnSigRepr+Tags +FSharp.Compiler.Syntax.SynTypeDefnSigRepr: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynTypeDefnSigRepr: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynTypeDefnSigRepr: Int32 Tag +FSharp.Compiler.Syntax.SynTypeDefnSigRepr: Int32 get_Tag() +FSharp.Compiler.Syntax.SynTypeDefnSigRepr: System.String ToString() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Enum: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Enum: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Enum: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynEnumCase] cases +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Enum: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynEnumCase] get_cases() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Exception: FSharp.Compiler.Syntax.SynExceptionDefnRepr exnRepr +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Exception: FSharp.Compiler.Syntax.SynExceptionDefnRepr get_exnRepr() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Boolean get_isConcrete() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Boolean get_isIncrClass() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Boolean isConcrete +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Boolean isIncrClass +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: FSharp.Compiler.Syntax.SynTypeDefnKind get_kind() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: FSharp.Compiler.Syntax.SynTypeDefnKind kind +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField] fields +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField] get_fields() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.SynValSig,FSharp.Compiler.Syntax.SynMemberFlags]] get_slotsigs() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.SynValSig,FSharp.Compiler.Syntax.SynMemberFlags]] slotsigs +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident]]] get_inherits() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident]]] inherits +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynSimplePats] get_implicitCtorSynPats() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynSimplePats] implicitCtorSynPats +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: System.Object get_ilType() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+LibraryOnlyILAssembly: System.Object ilType +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+None: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+None: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField] get_recordFields() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField] recordFields +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Tags: Int32 Enum +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Tags: Int32 Exception +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Tags: Int32 General +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Tags: Int32 LibraryOnlyILAssembly +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Tags: Int32 None +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Tags: Int32 Record +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Tags: Int32 TypeAbbrev +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Tags: Int32 Union +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+TypeAbbrev: FSharp.Compiler.Syntax.ParserDetail detail +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+TypeAbbrev: FSharp.Compiler.Syntax.ParserDetail get_detail() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+TypeAbbrev: FSharp.Compiler.Syntax.SynType get_rhsType() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+TypeAbbrev: FSharp.Compiler.Syntax.SynType rhsType +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+TypeAbbrev: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+TypeAbbrev: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Union: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Union: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Union: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynUnionCase] get_unionCases() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Union: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynUnionCase] unionCases +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Union: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Union: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean IsEnum +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean IsException +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean IsGeneral +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean IsLibraryOnlyILAssembly +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean IsNone +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean IsRecord +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean IsTypeAbbrev +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean IsUnion +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean get_IsEnum() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean get_IsException() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean get_IsGeneral() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean get_IsLibraryOnlyILAssembly() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean get_IsNone() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean get_IsRecord() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean get_IsTypeAbbrev() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Boolean get_IsUnion() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewEnum(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynEnumCase], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewException(FSharp.Compiler.Syntax.SynExceptionDefnRepr) +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewGeneral(FSharp.Compiler.Syntax.SynTypeDefnKind, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident]]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.SynValSig,FSharp.Compiler.Syntax.SynMemberFlags]], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField], Boolean, Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynSimplePats], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewLibraryOnlyILAssembly(System.Object, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewNone(FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewRecord(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewTypeAbbrev(FSharp.Compiler.Syntax.ParserDetail, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewUnion(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynUnionCase], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Enum +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Exception +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+General +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+LibraryOnlyILAssembly +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+None +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Tags +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+TypeAbbrev +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Union +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Int32 Tag +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Int32 get_Tag() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: System.String ToString() +FSharp.Compiler.Syntax.SynUnionCase +FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Syntax.Ident get_ident() +FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Syntax.Ident ident +FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Syntax.SynUnionCase NewSynUnionCase(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Syntax.Ident, FSharp.Compiler.Syntax.SynUnionCaseKind, FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Syntax.SynUnionCaseKind caseType +FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Syntax.SynUnionCaseKind get_caseType() +FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() +FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Xml.PreXmlDoc xmlDoc +FSharp.Compiler.Syntax.SynUnionCase: Int32 Tag +FSharp.Compiler.Syntax.SynUnionCase: Int32 get_Tag() +FSharp.Compiler.Syntax.SynUnionCase: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes +FSharp.Compiler.Syntax.SynUnionCase: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() +FSharp.Compiler.Syntax.SynUnionCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility +FSharp.Compiler.Syntax.SynUnionCase: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() +FSharp.Compiler.Syntax.SynUnionCase: System.String ToString() +FSharp.Compiler.Syntax.SynUnionCaseKind +FSharp.Compiler.Syntax.SynUnionCaseKind+Fields: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField] cases +FSharp.Compiler.Syntax.SynUnionCaseKind+Fields: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField] get_cases() +FSharp.Compiler.Syntax.SynUnionCaseKind+FullType: FSharp.Compiler.Syntax.SynType fullType +FSharp.Compiler.Syntax.SynUnionCaseKind+FullType: FSharp.Compiler.Syntax.SynType get_fullType() +FSharp.Compiler.Syntax.SynUnionCaseKind+FullType: FSharp.Compiler.Syntax.SynValInfo fullTypeInfo +FSharp.Compiler.Syntax.SynUnionCaseKind+FullType: FSharp.Compiler.Syntax.SynValInfo get_fullTypeInfo() +FSharp.Compiler.Syntax.SynUnionCaseKind+Tags: Int32 Fields +FSharp.Compiler.Syntax.SynUnionCaseKind+Tags: Int32 FullType +FSharp.Compiler.Syntax.SynUnionCaseKind: Boolean IsFields +FSharp.Compiler.Syntax.SynUnionCaseKind: Boolean IsFullType +FSharp.Compiler.Syntax.SynUnionCaseKind: Boolean get_IsFields() +FSharp.Compiler.Syntax.SynUnionCaseKind: Boolean get_IsFullType() +FSharp.Compiler.Syntax.SynUnionCaseKind: FSharp.Compiler.Syntax.SynUnionCaseKind NewFields(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField]) +FSharp.Compiler.Syntax.SynUnionCaseKind: FSharp.Compiler.Syntax.SynUnionCaseKind NewFullType(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynValInfo) +FSharp.Compiler.Syntax.SynUnionCaseKind: FSharp.Compiler.Syntax.SynUnionCaseKind+Fields +FSharp.Compiler.Syntax.SynUnionCaseKind: FSharp.Compiler.Syntax.SynUnionCaseKind+FullType +FSharp.Compiler.Syntax.SynUnionCaseKind: FSharp.Compiler.Syntax.SynUnionCaseKind+Tags +FSharp.Compiler.Syntax.SynUnionCaseKind: Int32 Tag +FSharp.Compiler.Syntax.SynUnionCaseKind: Int32 get_Tag() +FSharp.Compiler.Syntax.SynUnionCaseKind: System.String ToString() +FSharp.Compiler.Syntax.SynValData +FSharp.Compiler.Syntax.SynValData: FSharp.Compiler.Syntax.SynValData NewSynValData(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynMemberFlags], FSharp.Compiler.Syntax.SynValInfo, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident]) +FSharp.Compiler.Syntax.SynValData: FSharp.Compiler.Syntax.SynValInfo SynValInfo +FSharp.Compiler.Syntax.SynValData: FSharp.Compiler.Syntax.SynValInfo get_SynValInfo() +FSharp.Compiler.Syntax.SynValData: FSharp.Compiler.Syntax.SynValInfo get_valInfo() +FSharp.Compiler.Syntax.SynValData: FSharp.Compiler.Syntax.SynValInfo valInfo +FSharp.Compiler.Syntax.SynValData: Int32 Tag +FSharp.Compiler.Syntax.SynValData: Int32 get_Tag() +FSharp.Compiler.Syntax.SynValData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] get_thisIdOpt() +FSharp.Compiler.Syntax.SynValData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] thisIdOpt +FSharp.Compiler.Syntax.SynValData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynMemberFlags] get_memberFlags() +FSharp.Compiler.Syntax.SynValData: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynMemberFlags] memberFlags +FSharp.Compiler.Syntax.SynValData: System.String ToString() +FSharp.Compiler.Syntax.SynValInfo +FSharp.Compiler.Syntax.SynValInfo: FSharp.Compiler.Syntax.SynArgInfo get_returnInfo() +FSharp.Compiler.Syntax.SynValInfo: FSharp.Compiler.Syntax.SynArgInfo returnInfo +FSharp.Compiler.Syntax.SynValInfo: FSharp.Compiler.Syntax.SynValInfo NewSynValInfo(Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynArgInfo]], FSharp.Compiler.Syntax.SynArgInfo) +FSharp.Compiler.Syntax.SynValInfo: Int32 Tag +FSharp.Compiler.Syntax.SynValInfo: Int32 get_Tag() +FSharp.Compiler.Syntax.SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynArgInfo]] CurriedArgInfos +FSharp.Compiler.Syntax.SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynArgInfo]] curriedArgInfos +FSharp.Compiler.Syntax.SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynArgInfo]] get_CurriedArgInfos() +FSharp.Compiler.Syntax.SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynArgInfo]] get_curriedArgInfos() +FSharp.Compiler.Syntax.SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[System.String] ArgNames +FSharp.Compiler.Syntax.SynValInfo: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_ArgNames() +FSharp.Compiler.Syntax.SynValInfo: System.String ToString() +FSharp.Compiler.Syntax.SynValSig +FSharp.Compiler.Syntax.SynValSig: Boolean get_isInline() +FSharp.Compiler.Syntax.SynValSig: Boolean get_isMutable() +FSharp.Compiler.Syntax.SynValSig: Boolean isInline +FSharp.Compiler.Syntax.SynValSig: Boolean isMutable +FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.Ident get_ident() +FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.Ident ident +FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynType SynType +FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynType get_SynType() +FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynType get_synType() +FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynType synType +FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynValInfo SynInfo +FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynValInfo arity +FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynValInfo get_SynInfo() +FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynValInfo get_arity() +FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynValSig NewSynValSig(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Syntax.Ident, FSharp.Compiler.Syntax.SynValTyparDecls, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynValInfo, Boolean, Boolean, FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynValTyparDecls explicitValDecls +FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Syntax.SynValTyparDecls get_explicitValDecls() +FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Text.Range RangeOfId +FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Text.Range get_RangeOfId() +FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Xml.PreXmlDoc get_xmlDoc() +FSharp.Compiler.Syntax.SynValSig: FSharp.Compiler.Xml.PreXmlDoc xmlDoc +FSharp.Compiler.Syntax.SynValSig: Int32 Tag +FSharp.Compiler.Syntax.SynValSig: Int32 get_Tag() +FSharp.Compiler.Syntax.SynValSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] attributes +FSharp.Compiler.Syntax.SynValSig: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList] get_attributes() +FSharp.Compiler.Syntax.SynValSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility +FSharp.Compiler.Syntax.SynValSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() +FSharp.Compiler.Syntax.SynValSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr] get_synExpr() +FSharp.Compiler.Syntax.SynValSig: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr] synExpr +FSharp.Compiler.Syntax.SynValSig: System.String ToString() +FSharp.Compiler.Syntax.SynValTyparDecls +FSharp.Compiler.Syntax.SynValTyparDecls: Boolean canInfer +FSharp.Compiler.Syntax.SynValTyparDecls: Boolean get_canInfer() +FSharp.Compiler.Syntax.SynValTyparDecls: FSharp.Compiler.Syntax.SynValTyparDecls NewSynValTyparDecls(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynTyparDecls], Boolean) +FSharp.Compiler.Syntax.SynValTyparDecls: Int32 Tag +FSharp.Compiler.Syntax.SynValTyparDecls: Int32 get_Tag() +FSharp.Compiler.Syntax.SynValTyparDecls: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynTyparDecls] get_typars() +FSharp.Compiler.Syntax.SynValTyparDecls: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynTyparDecls] typars +FSharp.Compiler.Syntax.SynValTyparDecls: System.String ToString() +FSharp.Compiler.Syntax.SyntaxNode +FSharp.Compiler.Syntax.SyntaxNode+SynBinding: FSharp.Compiler.Syntax.SynBinding Item +FSharp.Compiler.Syntax.SyntaxNode+SynBinding: FSharp.Compiler.Syntax.SynBinding get_Item() +FSharp.Compiler.Syntax.SyntaxNode+SynExpr: FSharp.Compiler.Syntax.SynExpr Item +FSharp.Compiler.Syntax.SyntaxNode+SynExpr: FSharp.Compiler.Syntax.SynExpr get_Item() +FSharp.Compiler.Syntax.SyntaxNode+SynMatchClause: FSharp.Compiler.Syntax.SynMatchClause Item +FSharp.Compiler.Syntax.SyntaxNode+SynMatchClause: FSharp.Compiler.Syntax.SynMatchClause get_Item() +FSharp.Compiler.Syntax.SyntaxNode+SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn Item +FSharp.Compiler.Syntax.SyntaxNode+SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn get_Item() +FSharp.Compiler.Syntax.SyntaxNode+SynModule: FSharp.Compiler.Syntax.SynModuleDecl Item +FSharp.Compiler.Syntax.SyntaxNode+SynModule: FSharp.Compiler.Syntax.SynModuleDecl get_Item() +FSharp.Compiler.Syntax.SyntaxNode+SynModuleOrNamespace: FSharp.Compiler.Syntax.SynModuleOrNamespace Item +FSharp.Compiler.Syntax.SyntaxNode+SynModuleOrNamespace: FSharp.Compiler.Syntax.SynModuleOrNamespace get_Item() +FSharp.Compiler.Syntax.SyntaxNode+SynPat: FSharp.Compiler.Syntax.SynPat Item +FSharp.Compiler.Syntax.SyntaxNode+SynPat: FSharp.Compiler.Syntax.SynPat get_Item() +FSharp.Compiler.Syntax.SyntaxNode+SynType: FSharp.Compiler.Syntax.SynType Item +FSharp.Compiler.Syntax.SyntaxNode+SynType: FSharp.Compiler.Syntax.SynType get_Item() +FSharp.Compiler.Syntax.SyntaxNode+SynTypeDefn: FSharp.Compiler.Syntax.SynTypeDefn Item +FSharp.Compiler.Syntax.SyntaxNode+SynTypeDefn: FSharp.Compiler.Syntax.SynTypeDefn get_Item() +FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynBinding +FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynExpr +FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynMatchClause +FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynMemberDefn +FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynModule +FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynModuleOrNamespace +FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynPat +FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynType +FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynTypeDefn +FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynBinding +FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynExpr +FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynMatchClause +FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynMemberDefn +FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynModule +FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynModuleOrNamespace +FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynPat +FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynType +FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynTypeDefn +FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynBinding() +FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynExpr() +FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynMatchClause() +FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynMemberDefn() +FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynModule() +FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynModuleOrNamespace() +FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynPat() +FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynType() +FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynTypeDefn() +FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynBinding(FSharp.Compiler.Syntax.SynBinding) +FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynExpr(FSharp.Compiler.Syntax.SynExpr) +FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynMatchClause(FSharp.Compiler.Syntax.SynMatchClause) +FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynMemberDefn(FSharp.Compiler.Syntax.SynMemberDefn) +FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynModule(FSharp.Compiler.Syntax.SynModuleDecl) +FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynModuleOrNamespace(FSharp.Compiler.Syntax.SynModuleOrNamespace) +FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynPat(FSharp.Compiler.Syntax.SynPat) +FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynType(FSharp.Compiler.Syntax.SynType) +FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynTypeDefn(FSharp.Compiler.Syntax.SynTypeDefn) +FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynBinding +FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynExpr +FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynMatchClause +FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynMemberDefn +FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynModule +FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynModuleOrNamespace +FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynPat +FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynType +FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynTypeDefn +FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+Tags +FSharp.Compiler.Syntax.SyntaxNode: Int32 Tag +FSharp.Compiler.Syntax.SyntaxNode: Int32 get_Tag() +FSharp.Compiler.Syntax.SyntaxNode: System.String ToString() +FSharp.Compiler.Syntax.SyntaxTraversal +FSharp.Compiler.Syntax.SyntaxTraversal: Microsoft.FSharp.Core.FSharpOption`1[T] Traverse[T](FSharp.Compiler.Text.Position, FSharp.Compiler.Syntax.ParsedInput, FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]) +FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T] +FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitBinding(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynBinding,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynBinding) +FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitComponentInfo(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], FSharp.Compiler.Syntax.SynComponentInfo) +FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitExpr(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynExpr,Microsoft.FSharp.Core.FSharpOption`1[T]], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynExpr,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynExpr) +FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitHashDirective(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], FSharp.Compiler.Syntax.ParsedHashDirective, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitImplicitInherit(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynExpr,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitInheritSynMemberDefn(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], FSharp.Compiler.Syntax.SynComponentInfo, FSharp.Compiler.Syntax.SynTypeDefnKind, FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitInterfaceSynMemberDefnType(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], FSharp.Compiler.Syntax.SynType) +FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitLetOrUse(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Boolean, Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynBinding,Microsoft.FSharp.Core.FSharpOption`1[T]], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitMatchClause(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynMatchClause,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynMatchClause) +FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitModuleDecl(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynModuleDecl,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynModuleDecl) +FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitModuleOrNamespace(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], FSharp.Compiler.Syntax.SynModuleOrNamespace) +FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitPat(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynPat,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynPat) +FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitRecordField(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.LongIdentWithDots]) +FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitSimplePats(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynSimplePat]) +FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitType(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynType,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynType) +FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitTypeAbbrev(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Void .ctor() +FSharp.Compiler.Syntax.TyparStaticReq +FSharp.Compiler.Syntax.TyparStaticReq+Tags: Int32 HeadType +FSharp.Compiler.Syntax.TyparStaticReq+Tags: Int32 None +FSharp.Compiler.Syntax.TyparStaticReq: Boolean Equals(FSharp.Compiler.Syntax.TyparStaticReq) +FSharp.Compiler.Syntax.TyparStaticReq: Boolean Equals(System.Object) +FSharp.Compiler.Syntax.TyparStaticReq: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.TyparStaticReq: Boolean IsHeadType +FSharp.Compiler.Syntax.TyparStaticReq: Boolean IsNone +FSharp.Compiler.Syntax.TyparStaticReq: Boolean get_IsHeadType() +FSharp.Compiler.Syntax.TyparStaticReq: Boolean get_IsNone() +FSharp.Compiler.Syntax.TyparStaticReq: FSharp.Compiler.Syntax.TyparStaticReq HeadType +FSharp.Compiler.Syntax.TyparStaticReq: FSharp.Compiler.Syntax.TyparStaticReq None +FSharp.Compiler.Syntax.TyparStaticReq: FSharp.Compiler.Syntax.TyparStaticReq get_HeadType() +FSharp.Compiler.Syntax.TyparStaticReq: FSharp.Compiler.Syntax.TyparStaticReq get_None() +FSharp.Compiler.Syntax.TyparStaticReq: FSharp.Compiler.Syntax.TyparStaticReq+Tags +FSharp.Compiler.Syntax.TyparStaticReq: Int32 CompareTo(FSharp.Compiler.Syntax.TyparStaticReq) +FSharp.Compiler.Syntax.TyparStaticReq: Int32 CompareTo(System.Object) +FSharp.Compiler.Syntax.TyparStaticReq: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.Syntax.TyparStaticReq: Int32 GetHashCode() +FSharp.Compiler.Syntax.TyparStaticReq: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Syntax.TyparStaticReq: Int32 Tag +FSharp.Compiler.Syntax.TyparStaticReq: Int32 get_Tag() +FSharp.Compiler.Syntax.TyparStaticReq: System.String ToString() +FSharp.Compiler.Text.ISourceText FSharp.Compiler.Text.ISourceText: Boolean ContentEquals(FSharp.Compiler.Text.ISourceText) FSharp.Compiler.Text.ISourceText: Boolean SubTextEquals(System.String, Int32) FSharp.Compiler.Text.ISourceText: Char Item [Int32] @@ -41846,678 +8915,1542 @@ FSharp.Compiler.Text.ISourceText: System.String GetLineString(Int32) FSharp.Compiler.Text.ISourceText: System.String GetSubTextString(Int32, Int32) FSharp.Compiler.Text.ISourceText: System.Tuple`2[System.Int32,System.Int32] GetLastCharacterPosition() FSharp.Compiler.Text.ISourceText: Void CopyTo(Int32, Char[], Int32, Int32) +FSharp.Compiler.Text.Line +FSharp.Compiler.Text.Line: Int32 fromZ(Int32) +FSharp.Compiler.Text.Line: Int32 toZ(Int32) +FSharp.Compiler.Text.NavigableTaggedText +FSharp.Compiler.Text.NavigableTaggedText: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Text.NavigableTaggedText: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Text.Position +FSharp.Compiler.Text.Position: Boolean Equals(System.Object) +FSharp.Compiler.Text.Position: Int32 Column +FSharp.Compiler.Text.Position: Int32 GetHashCode() +FSharp.Compiler.Text.Position: Int32 Line +FSharp.Compiler.Text.Position: Int32 get_Column() +FSharp.Compiler.Text.Position: Int32 get_Line() +FSharp.Compiler.Text.Position: System.String ToString() +FSharp.Compiler.Text.PositionModule +FSharp.Compiler.Text.PositionModule: Boolean posEq(FSharp.Compiler.Text.Position, FSharp.Compiler.Text.Position) +FSharp.Compiler.Text.PositionModule: Boolean posGeq(FSharp.Compiler.Text.Position, FSharp.Compiler.Text.Position) +FSharp.Compiler.Text.PositionModule: Boolean posGt(FSharp.Compiler.Text.Position, FSharp.Compiler.Text.Position) +FSharp.Compiler.Text.PositionModule: Boolean posLt(FSharp.Compiler.Text.Position, FSharp.Compiler.Text.Position) +FSharp.Compiler.Text.PositionModule: FSharp.Compiler.Text.Position fromZ(Int32, Int32) +FSharp.Compiler.Text.PositionModule: FSharp.Compiler.Text.Position get_pos0() +FSharp.Compiler.Text.PositionModule: FSharp.Compiler.Text.Position mkPos(Int32, Int32) +FSharp.Compiler.Text.PositionModule: FSharp.Compiler.Text.Position pos0 +FSharp.Compiler.Text.PositionModule: System.String stringOfPos(FSharp.Compiler.Text.Position) +FSharp.Compiler.Text.PositionModule: System.Tuple`2[System.Int32,System.Int32] toZ(FSharp.Compiler.Text.Position) +FSharp.Compiler.Text.PositionModule: Void outputPos(System.IO.TextWriter, FSharp.Compiler.Text.Position) +FSharp.Compiler.Text.Range +FSharp.Compiler.Text.Range: Boolean Equals(System.Object) +FSharp.Compiler.Text.Range: Boolean IsSynthetic +FSharp.Compiler.Text.Range: Boolean get_IsSynthetic() +FSharp.Compiler.Text.Range: FSharp.Compiler.Text.Position End +FSharp.Compiler.Text.Range: FSharp.Compiler.Text.Position Start +FSharp.Compiler.Text.Range: FSharp.Compiler.Text.Position get_End() +FSharp.Compiler.Text.Range: FSharp.Compiler.Text.Position get_Start() +FSharp.Compiler.Text.Range: FSharp.Compiler.Text.Range EndRange +FSharp.Compiler.Text.Range: FSharp.Compiler.Text.Range StartRange +FSharp.Compiler.Text.Range: FSharp.Compiler.Text.Range Zero +FSharp.Compiler.Text.Range: FSharp.Compiler.Text.Range get_EndRange() +FSharp.Compiler.Text.Range: FSharp.Compiler.Text.Range get_StartRange() +FSharp.Compiler.Text.Range: FSharp.Compiler.Text.Range get_Zero() +FSharp.Compiler.Text.Range: Int32 EndColumn +FSharp.Compiler.Text.Range: Int32 EndLine +FSharp.Compiler.Text.Range: Int32 GetHashCode() +FSharp.Compiler.Text.Range: Int32 StartColumn +FSharp.Compiler.Text.Range: Int32 StartLine +FSharp.Compiler.Text.Range: Int32 get_EndColumn() +FSharp.Compiler.Text.Range: Int32 get_EndLine() +FSharp.Compiler.Text.Range: Int32 get_StartColumn() +FSharp.Compiler.Text.Range: Int32 get_StartLine() +FSharp.Compiler.Text.Range: System.String FileName +FSharp.Compiler.Text.Range: System.String ToString() +FSharp.Compiler.Text.Range: System.String get_FileName() +FSharp.Compiler.Text.RangeModule +FSharp.Compiler.Text.RangeModule: Boolean equals(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.Text.RangeModule: Boolean rangeBeforePos(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Position) +FSharp.Compiler.Text.RangeModule: Boolean rangeContainsPos(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Position) +FSharp.Compiler.Text.RangeModule: Boolean rangeContainsRange(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range get_range0() +FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range get_rangeCmdArgs() +FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range get_rangeStartup() +FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range mkFileIndexRange(Int32, FSharp.Compiler.Text.Position, FSharp.Compiler.Text.Position) +FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range mkFirstLineOfFile(System.String) +FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range mkRange(System.String, FSharp.Compiler.Text.Position, FSharp.Compiler.Text.Position) +FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range range0 +FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range rangeCmdArgs +FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range rangeN(System.String, Int32) +FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range rangeStartup +FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range trimRangeToLine(FSharp.Compiler.Text.Range) +FSharp.Compiler.Text.RangeModule: FSharp.Compiler.Text.Range unionRanges(FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) +FSharp.Compiler.Text.RangeModule: System.Collections.Generic.IComparer`1[FSharp.Compiler.Text.Position] get_posOrder() +FSharp.Compiler.Text.RangeModule: System.Collections.Generic.IComparer`1[FSharp.Compiler.Text.Position] posOrder +FSharp.Compiler.Text.RangeModule: System.Collections.Generic.IComparer`1[FSharp.Compiler.Text.Range] get_rangeOrder() +FSharp.Compiler.Text.RangeModule: System.Collections.Generic.IComparer`1[FSharp.Compiler.Text.Range] rangeOrder +FSharp.Compiler.Text.RangeModule: System.Collections.Generic.IEqualityComparer`1[FSharp.Compiler.Text.Range] comparer +FSharp.Compiler.Text.RangeModule: System.Collections.Generic.IEqualityComparer`1[FSharp.Compiler.Text.Range] get_comparer() +FSharp.Compiler.Text.RangeModule: System.String stringOfRange(FSharp.Compiler.Text.Range) +FSharp.Compiler.Text.RangeModule: System.Tuple`2[System.String,System.Tuple`2[System.Tuple`2[System.Int32,System.Int32],System.Tuple`2[System.Int32,System.Int32]]] toFileZ(FSharp.Compiler.Text.Range) +FSharp.Compiler.Text.RangeModule: System.Tuple`2[System.Tuple`2[System.Int32,System.Int32],System.Tuple`2[System.Int32,System.Int32]] toZ(FSharp.Compiler.Text.Range) +FSharp.Compiler.Text.RangeModule: Void outputRange(System.IO.TextWriter, FSharp.Compiler.Text.Range) +FSharp.Compiler.Text.SourceText FSharp.Compiler.Text.SourceText: FSharp.Compiler.Text.ISourceText ofString(System.String) -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Boolean Equals(PreXmlDoc) -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Boolean Equals(System.Object) -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Boolean IsPreXmlDoc -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Boolean IsPreXmlDocEmpty -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Boolean IsPreXmlMerge -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Boolean get_IsPreXmlDoc() -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Boolean get_IsPreXmlDocEmpty() -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Boolean get_IsPreXmlMerge() -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Int32 GetHashCode() -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Int32 Tag -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: Int32 get_Tag() -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: System.String ToString() -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: XmlDoc ToXmlDoc(Boolean, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: XmlDocCollector Item2 -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: XmlDocCollector get_Item2() -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: pos Item1 -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc: pos get_Item1() -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Boolean Equals(PreXmlDoc) -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Boolean Equals(System.Object) -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Boolean IsPreXmlDoc -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Boolean IsPreXmlDocEmpty -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Boolean IsPreXmlMerge -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Boolean get_IsPreXmlDoc() -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Boolean get_IsPreXmlDocEmpty() -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Boolean get_IsPreXmlMerge() -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Int32 GetHashCode() -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Int32 Tag -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: Int32 get_Tag() -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: PreXmlDoc Item1 -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: PreXmlDoc Item2 -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: PreXmlDoc get_Item1() -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: PreXmlDoc get_Item2() -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: System.String ToString() -FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge: XmlDoc ToXmlDoc(Boolean, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) -FSharp.Compiler.XmlDoc+PreXmlDoc+Tags: Int32 PreXmlDoc -FSharp.Compiler.XmlDoc+PreXmlDoc+Tags: Int32 PreXmlDocEmpty -FSharp.Compiler.XmlDoc+PreXmlDoc+Tags: Int32 PreXmlMerge -FSharp.Compiler.XmlDoc+PreXmlDoc: Boolean Equals(PreXmlDoc) -FSharp.Compiler.XmlDoc+PreXmlDoc: Boolean Equals(System.Object) -FSharp.Compiler.XmlDoc+PreXmlDoc: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.XmlDoc+PreXmlDoc: Boolean IsPreXmlDoc -FSharp.Compiler.XmlDoc+PreXmlDoc: Boolean IsPreXmlDocEmpty -FSharp.Compiler.XmlDoc+PreXmlDoc: Boolean IsPreXmlMerge -FSharp.Compiler.XmlDoc+PreXmlDoc: Boolean get_IsPreXmlDoc() -FSharp.Compiler.XmlDoc+PreXmlDoc: Boolean get_IsPreXmlDocEmpty() -FSharp.Compiler.XmlDoc+PreXmlDoc: Boolean get_IsPreXmlMerge() -FSharp.Compiler.XmlDoc+PreXmlDoc: FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlDoc -FSharp.Compiler.XmlDoc+PreXmlDoc: FSharp.Compiler.XmlDoc+PreXmlDoc+PreXmlMerge -FSharp.Compiler.XmlDoc+PreXmlDoc: FSharp.Compiler.XmlDoc+PreXmlDoc+Tags -FSharp.Compiler.XmlDoc+PreXmlDoc: Int32 GetHashCode() -FSharp.Compiler.XmlDoc+PreXmlDoc: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.XmlDoc+PreXmlDoc: Int32 Tag -FSharp.Compiler.XmlDoc+PreXmlDoc: Int32 get_Tag() -FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc CreateFromGrabPoint(XmlDocCollector, pos) -FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc Empty -FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc Merge(PreXmlDoc, PreXmlDoc) -FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc NewPreXmlDoc(pos, XmlDocCollector) -FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc NewPreXmlMerge(PreXmlDoc, PreXmlDoc) -FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc PreXmlDocEmpty -FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc get_Empty() -FSharp.Compiler.XmlDoc+PreXmlDoc: PreXmlDoc get_PreXmlDocEmpty() -FSharp.Compiler.XmlDoc+PreXmlDoc: System.String ToString() -FSharp.Compiler.XmlDoc+PreXmlDoc: XmlDoc ToXmlDoc(Boolean, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) -FSharp.Compiler.XmlDoc+XmlDoc: Boolean IsEmpty -FSharp.Compiler.XmlDoc+XmlDoc: Boolean NonEmpty -FSharp.Compiler.XmlDoc+XmlDoc: Boolean get_IsEmpty() -FSharp.Compiler.XmlDoc+XmlDoc: Boolean get_NonEmpty() -FSharp.Compiler.XmlDoc+XmlDoc: System.String GetXmlText() -FSharp.Compiler.XmlDoc+XmlDoc: System.String[] GetElaboratedXmlLines() -FSharp.Compiler.XmlDoc+XmlDoc: System.String[] UnprocessedLines -FSharp.Compiler.XmlDoc+XmlDoc: System.String[] get_UnprocessedLines() -FSharp.Compiler.XmlDoc+XmlDoc: Void .ctor(System.String[], range) -FSharp.Compiler.XmlDoc+XmlDoc: Void Check(Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) -FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc Empty -FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc Merge(XmlDoc, XmlDoc) -FSharp.Compiler.XmlDoc+XmlDoc: XmlDoc get_Empty() -FSharp.Compiler.XmlDoc+XmlDoc: range Range -FSharp.Compiler.XmlDoc+XmlDoc: range get_Range() -FSharp.Compiler.XmlDoc+XmlDocCollector: System.Tuple`2[System.String,FSharp.Compiler.Range+range][] LinesBefore(pos) -FSharp.Compiler.XmlDoc+XmlDocCollector: Void .ctor() -FSharp.Compiler.XmlDoc+XmlDocCollector: Void AddGrabPoint(pos) -FSharp.Compiler.XmlDoc+XmlDocCollector: Void AddXmlDocLine(System.String, range) -FSharp.Compiler.XmlDoc: FSharp.Compiler.XmlDoc+PreXmlDoc -FSharp.Compiler.XmlDoc: FSharp.Compiler.XmlDoc+XmlDoc -FSharp.Compiler.XmlDoc: FSharp.Compiler.XmlDoc+XmlDocCollector -Internal.Utilities.PathMap: Boolean Equals(Internal.Utilities.PathMap) -Internal.Utilities.PathMap: Boolean Equals(System.Object) -Internal.Utilities.PathMap: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Internal.Utilities.PathMap: Int32 CompareTo(Internal.Utilities.PathMap) -Internal.Utilities.PathMap: Int32 CompareTo(System.Object) -Internal.Utilities.PathMap: Int32 CompareTo(System.Object, System.Collections.IComparer) -Internal.Utilities.PathMap: Int32 GetHashCode() -Internal.Utilities.PathMap: Int32 GetHashCode(System.Collections.IEqualityComparer) -Internal.Utilities.PathMap: System.String ToString() -Internal.Utilities.StructuredFormat.Display: Internal.Utilities.StructuredFormat.Layout any_to_layout[T](Internal.Utilities.StructuredFormat.FormatOptions, T, System.Type) -Internal.Utilities.StructuredFormat.Display: Internal.Utilities.StructuredFormat.Layout fsi_any_to_layout[T](Internal.Utilities.StructuredFormat.FormatOptions, T, System.Type) -Internal.Utilities.StructuredFormat.Display: Internal.Utilities.StructuredFormat.Layout squashTo(Int32, Internal.Utilities.StructuredFormat.Layout) -Internal.Utilities.StructuredFormat.Display: Internal.Utilities.StructuredFormat.Layout squash_layout(Internal.Utilities.StructuredFormat.FormatOptions, Internal.Utilities.StructuredFormat.Layout) -Internal.Utilities.StructuredFormat.Display: Internal.Utilities.StructuredFormat.TaggedTextWriter asTaggedTextWriter(System.IO.TextWriter) -Internal.Utilities.StructuredFormat.Display: System.String layout_as_string[T](Internal.Utilities.StructuredFormat.FormatOptions, T, System.Type) -Internal.Utilities.StructuredFormat.Display: System.String layout_to_string(Internal.Utilities.StructuredFormat.FormatOptions, Internal.Utilities.StructuredFormat.Layout) -Internal.Utilities.StructuredFormat.Display: Void output_layout(Internal.Utilities.StructuredFormat.FormatOptions, System.IO.TextWriter, Internal.Utilities.StructuredFormat.Layout) -Internal.Utilities.StructuredFormat.Display: Void output_layout_tagged(Internal.Utilities.StructuredFormat.FormatOptions, Internal.Utilities.StructuredFormat.TaggedTextWriter, Internal.Utilities.StructuredFormat.Layout) -Internal.Utilities.StructuredFormat.FormatOptions: Boolean ShowIEnumerable -Internal.Utilities.StructuredFormat.FormatOptions: Boolean ShowProperties -Internal.Utilities.StructuredFormat.FormatOptions: Boolean get_ShowIEnumerable() -Internal.Utilities.StructuredFormat.FormatOptions: Boolean get_ShowProperties() -Internal.Utilities.StructuredFormat.FormatOptions: Int32 PrintDepth -Internal.Utilities.StructuredFormat.FormatOptions: Int32 PrintLength -Internal.Utilities.StructuredFormat.FormatOptions: Int32 PrintSize -Internal.Utilities.StructuredFormat.FormatOptions: Int32 PrintWidth -Internal.Utilities.StructuredFormat.FormatOptions: Int32 StringLimit -Internal.Utilities.StructuredFormat.FormatOptions: Int32 get_PrintDepth() -Internal.Utilities.StructuredFormat.FormatOptions: Int32 get_PrintLength() -Internal.Utilities.StructuredFormat.FormatOptions: Int32 get_PrintSize() -Internal.Utilities.StructuredFormat.FormatOptions: Int32 get_PrintWidth() -Internal.Utilities.StructuredFormat.FormatOptions: Int32 get_StringLimit() -Internal.Utilities.StructuredFormat.FormatOptions: Internal.Utilities.StructuredFormat.FormatOptions Default -Internal.Utilities.StructuredFormat.FormatOptions: Internal.Utilities.StructuredFormat.FormatOptions get_Default() -Internal.Utilities.StructuredFormat.FormatOptions: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Core.FSharpFunc`2[Internal.Utilities.StructuredFormat.IEnvironment,Microsoft.FSharp.Core.FSharpFunc`2[System.Object,Microsoft.FSharp.Core.FSharpOption`1[Internal.Utilities.StructuredFormat.Layout]]]] PrintIntercepts -Internal.Utilities.StructuredFormat.FormatOptions: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Core.FSharpFunc`2[Internal.Utilities.StructuredFormat.IEnvironment,Microsoft.FSharp.Core.FSharpFunc`2[System.Object,Microsoft.FSharp.Core.FSharpOption`1[Internal.Utilities.StructuredFormat.Layout]]]] get_PrintIntercepts() -Internal.Utilities.StructuredFormat.FormatOptions: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]],Microsoft.FSharp.Core.FSharpFunc`2[System.Boolean,Microsoft.FSharp.Core.Unit]]] AttributeProcessor -Internal.Utilities.StructuredFormat.FormatOptions: Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]],Microsoft.FSharp.Core.FSharpFunc`2[System.Boolean,Microsoft.FSharp.Core.Unit]]] get_AttributeProcessor() -Internal.Utilities.StructuredFormat.FormatOptions: System.IFormatProvider FormatProvider -Internal.Utilities.StructuredFormat.FormatOptions: System.IFormatProvider get_FormatProvider() -Internal.Utilities.StructuredFormat.FormatOptions: System.Reflection.BindingFlags BindingFlags -Internal.Utilities.StructuredFormat.FormatOptions: System.Reflection.BindingFlags get_BindingFlags() -Internal.Utilities.StructuredFormat.FormatOptions: System.String FloatingPointFormat -Internal.Utilities.StructuredFormat.FormatOptions: System.String ToString() -Internal.Utilities.StructuredFormat.FormatOptions: System.String get_FloatingPointFormat() -Internal.Utilities.StructuredFormat.FormatOptions: Void .ctor(System.String, Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]],Microsoft.FSharp.Core.FSharpFunc`2[System.Boolean,Microsoft.FSharp.Core.Unit]]], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Core.FSharpFunc`2[Internal.Utilities.StructuredFormat.IEnvironment,Microsoft.FSharp.Core.FSharpFunc`2[System.Object,Microsoft.FSharp.Core.FSharpOption`1[Internal.Utilities.StructuredFormat.Layout]]]], Int32, System.IFormatProvider, System.Reflection.BindingFlags, Int32, Int32, Int32, Int32, Boolean, Boolean) -Internal.Utilities.StructuredFormat.IEnvironment: Int32 MaxColumns -Internal.Utilities.StructuredFormat.IEnvironment: Int32 MaxRows -Internal.Utilities.StructuredFormat.IEnvironment: Int32 get_MaxColumns() -Internal.Utilities.StructuredFormat.IEnvironment: Int32 get_MaxRows() -Internal.Utilities.StructuredFormat.IEnvironment: Internal.Utilities.StructuredFormat.Layout GetLayout(System.Object) -Internal.Utilities.StructuredFormat.Joint+Breakable: Boolean Equals(Internal.Utilities.StructuredFormat.Joint) -Internal.Utilities.StructuredFormat.Joint+Breakable: Boolean Equals(System.Object) -Internal.Utilities.StructuredFormat.Joint+Breakable: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Internal.Utilities.StructuredFormat.Joint+Breakable: Boolean IsBreakable -Internal.Utilities.StructuredFormat.Joint+Breakable: Boolean IsBroken -Internal.Utilities.StructuredFormat.Joint+Breakable: Boolean IsUnbreakable -Internal.Utilities.StructuredFormat.Joint+Breakable: Boolean get_IsBreakable() -Internal.Utilities.StructuredFormat.Joint+Breakable: Boolean get_IsBroken() -Internal.Utilities.StructuredFormat.Joint+Breakable: Boolean get_IsUnbreakable() -Internal.Utilities.StructuredFormat.Joint+Breakable: Int32 GetHashCode() -Internal.Utilities.StructuredFormat.Joint+Breakable: Int32 GetHashCode(System.Collections.IEqualityComparer) -Internal.Utilities.StructuredFormat.Joint+Breakable: Int32 Tag -Internal.Utilities.StructuredFormat.Joint+Breakable: Int32 get_Tag() -Internal.Utilities.StructuredFormat.Joint+Breakable: Int32 get_indentation() -Internal.Utilities.StructuredFormat.Joint+Breakable: Int32 indentation -Internal.Utilities.StructuredFormat.Joint+Breakable: System.String ToString() -Internal.Utilities.StructuredFormat.Joint+Broken: Boolean Equals(Internal.Utilities.StructuredFormat.Joint) -Internal.Utilities.StructuredFormat.Joint+Broken: Boolean Equals(System.Object) -Internal.Utilities.StructuredFormat.Joint+Broken: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Internal.Utilities.StructuredFormat.Joint+Broken: Boolean IsBreakable -Internal.Utilities.StructuredFormat.Joint+Broken: Boolean IsBroken -Internal.Utilities.StructuredFormat.Joint+Broken: Boolean IsUnbreakable -Internal.Utilities.StructuredFormat.Joint+Broken: Boolean get_IsBreakable() -Internal.Utilities.StructuredFormat.Joint+Broken: Boolean get_IsBroken() -Internal.Utilities.StructuredFormat.Joint+Broken: Boolean get_IsUnbreakable() -Internal.Utilities.StructuredFormat.Joint+Broken: Int32 GetHashCode() -Internal.Utilities.StructuredFormat.Joint+Broken: Int32 GetHashCode(System.Collections.IEqualityComparer) -Internal.Utilities.StructuredFormat.Joint+Broken: Int32 Tag -Internal.Utilities.StructuredFormat.Joint+Broken: Int32 get_Tag() -Internal.Utilities.StructuredFormat.Joint+Broken: Int32 get_indentation() -Internal.Utilities.StructuredFormat.Joint+Broken: Int32 indentation -Internal.Utilities.StructuredFormat.Joint+Broken: System.String ToString() -Internal.Utilities.StructuredFormat.Joint+Tags: Int32 Breakable -Internal.Utilities.StructuredFormat.Joint+Tags: Int32 Broken -Internal.Utilities.StructuredFormat.Joint+Tags: Int32 Unbreakable -Internal.Utilities.StructuredFormat.Joint: Boolean Equals(Internal.Utilities.StructuredFormat.Joint) -Internal.Utilities.StructuredFormat.Joint: Boolean Equals(System.Object) -Internal.Utilities.StructuredFormat.Joint: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Internal.Utilities.StructuredFormat.Joint: Boolean IsBreakable -Internal.Utilities.StructuredFormat.Joint: Boolean IsBroken -Internal.Utilities.StructuredFormat.Joint: Boolean IsUnbreakable -Internal.Utilities.StructuredFormat.Joint: Boolean get_IsBreakable() -Internal.Utilities.StructuredFormat.Joint: Boolean get_IsBroken() -Internal.Utilities.StructuredFormat.Joint: Boolean get_IsUnbreakable() -Internal.Utilities.StructuredFormat.Joint: Int32 GetHashCode() -Internal.Utilities.StructuredFormat.Joint: Int32 GetHashCode(System.Collections.IEqualityComparer) -Internal.Utilities.StructuredFormat.Joint: Int32 Tag -Internal.Utilities.StructuredFormat.Joint: Int32 get_Tag() -Internal.Utilities.StructuredFormat.Joint: Internal.Utilities.StructuredFormat.Joint NewBreakable(Int32) -Internal.Utilities.StructuredFormat.Joint: Internal.Utilities.StructuredFormat.Joint NewBroken(Int32) -Internal.Utilities.StructuredFormat.Joint: Internal.Utilities.StructuredFormat.Joint Unbreakable -Internal.Utilities.StructuredFormat.Joint: Internal.Utilities.StructuredFormat.Joint get_Unbreakable() -Internal.Utilities.StructuredFormat.Joint: Internal.Utilities.StructuredFormat.Joint+Breakable -Internal.Utilities.StructuredFormat.Joint: Internal.Utilities.StructuredFormat.Joint+Broken -Internal.Utilities.StructuredFormat.Joint: Internal.Utilities.StructuredFormat.Joint+Tags -Internal.Utilities.StructuredFormat.Joint: System.String ToString() -Internal.Utilities.StructuredFormat.Layout+Attr: Boolean IsAttr -Internal.Utilities.StructuredFormat.Layout+Attr: Boolean IsLeaf -Internal.Utilities.StructuredFormat.Layout+Attr: Boolean IsNode -Internal.Utilities.StructuredFormat.Layout+Attr: Boolean IsObjLeaf -Internal.Utilities.StructuredFormat.Layout+Attr: Boolean get_IsAttr() -Internal.Utilities.StructuredFormat.Layout+Attr: Boolean get_IsLeaf() -Internal.Utilities.StructuredFormat.Layout+Attr: Boolean get_IsNode() -Internal.Utilities.StructuredFormat.Layout+Attr: Boolean get_IsObjLeaf() -Internal.Utilities.StructuredFormat.Layout+Attr: Int32 Tag -Internal.Utilities.StructuredFormat.Layout+Attr: Int32 get_Tag() -Internal.Utilities.StructuredFormat.Layout+Attr: Internal.Utilities.StructuredFormat.Layout get_layout() -Internal.Utilities.StructuredFormat.Layout+Attr: Internal.Utilities.StructuredFormat.Layout layout -Internal.Utilities.StructuredFormat.Layout+Attr: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] attributes -Internal.Utilities.StructuredFormat.Layout+Attr: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] get_attributes() -Internal.Utilities.StructuredFormat.Layout+Attr: System.String ToString() -Internal.Utilities.StructuredFormat.Layout+Attr: System.String get_text() -Internal.Utilities.StructuredFormat.Layout+Attr: System.String text -Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean IsAttr -Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean IsLeaf -Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean IsNode -Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean IsObjLeaf -Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean get_IsAttr() -Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean get_IsLeaf() -Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean get_IsNode() -Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean get_IsObjLeaf() -Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean get_justRight() -Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean get_juxtLeft() -Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean justRight -Internal.Utilities.StructuredFormat.Layout+Leaf: Boolean juxtLeft -Internal.Utilities.StructuredFormat.Layout+Leaf: Int32 Tag -Internal.Utilities.StructuredFormat.Layout+Leaf: Int32 get_Tag() -Internal.Utilities.StructuredFormat.Layout+Leaf: Internal.Utilities.StructuredFormat.TaggedText get_text() -Internal.Utilities.StructuredFormat.Layout+Leaf: Internal.Utilities.StructuredFormat.TaggedText text -Internal.Utilities.StructuredFormat.Layout+Leaf: System.String ToString() -Internal.Utilities.StructuredFormat.Layout+Node: Boolean IsAttr -Internal.Utilities.StructuredFormat.Layout+Node: Boolean IsLeaf -Internal.Utilities.StructuredFormat.Layout+Node: Boolean IsNode -Internal.Utilities.StructuredFormat.Layout+Node: Boolean IsObjLeaf -Internal.Utilities.StructuredFormat.Layout+Node: Boolean get_IsAttr() -Internal.Utilities.StructuredFormat.Layout+Node: Boolean get_IsLeaf() -Internal.Utilities.StructuredFormat.Layout+Node: Boolean get_IsNode() -Internal.Utilities.StructuredFormat.Layout+Node: Boolean get_IsObjLeaf() -Internal.Utilities.StructuredFormat.Layout+Node: Int32 Tag -Internal.Utilities.StructuredFormat.Layout+Node: Int32 get_Tag() -Internal.Utilities.StructuredFormat.Layout+Node: Internal.Utilities.StructuredFormat.Joint get_joint() -Internal.Utilities.StructuredFormat.Layout+Node: Internal.Utilities.StructuredFormat.Joint joint -Internal.Utilities.StructuredFormat.Layout+Node: Internal.Utilities.StructuredFormat.Layout get_leftLayout() -Internal.Utilities.StructuredFormat.Layout+Node: Internal.Utilities.StructuredFormat.Layout get_rightLayout() -Internal.Utilities.StructuredFormat.Layout+Node: Internal.Utilities.StructuredFormat.Layout leftLayout -Internal.Utilities.StructuredFormat.Layout+Node: Internal.Utilities.StructuredFormat.Layout rightLayout -Internal.Utilities.StructuredFormat.Layout+Node: System.String ToString() -Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean IsAttr -Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean IsLeaf -Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean IsNode -Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean IsObjLeaf -Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean get_IsAttr() -Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean get_IsLeaf() -Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean get_IsNode() -Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean get_IsObjLeaf() -Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean get_juxtLeft() -Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean get_juxtRight() -Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean juxtLeft -Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Boolean juxtRight -Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Int32 Tag -Internal.Utilities.StructuredFormat.Layout+ObjLeaf: Int32 get_Tag() -Internal.Utilities.StructuredFormat.Layout+ObjLeaf: System.Object get_object() -Internal.Utilities.StructuredFormat.Layout+ObjLeaf: System.Object object -Internal.Utilities.StructuredFormat.Layout+ObjLeaf: System.String ToString() -Internal.Utilities.StructuredFormat.Layout+Tags: Int32 Attr -Internal.Utilities.StructuredFormat.Layout+Tags: Int32 Leaf -Internal.Utilities.StructuredFormat.Layout+Tags: Int32 Node -Internal.Utilities.StructuredFormat.Layout+Tags: Int32 ObjLeaf -Internal.Utilities.StructuredFormat.Layout: Boolean IsAttr -Internal.Utilities.StructuredFormat.Layout: Boolean IsLeaf -Internal.Utilities.StructuredFormat.Layout: Boolean IsNode -Internal.Utilities.StructuredFormat.Layout: Boolean IsObjLeaf -Internal.Utilities.StructuredFormat.Layout: Boolean JuxtapositionMiddle(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) -Internal.Utilities.StructuredFormat.Layout: Boolean get_IsAttr() -Internal.Utilities.StructuredFormat.Layout: Boolean get_IsLeaf() -Internal.Utilities.StructuredFormat.Layout: Boolean get_IsNode() -Internal.Utilities.StructuredFormat.Layout: Boolean get_IsObjLeaf() -Internal.Utilities.StructuredFormat.Layout: Int32 Tag -Internal.Utilities.StructuredFormat.Layout: Int32 get_Tag() -Internal.Utilities.StructuredFormat.Layout: Internal.Utilities.StructuredFormat.Layout NewAttr(System.String, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]], Internal.Utilities.StructuredFormat.Layout) -Internal.Utilities.StructuredFormat.Layout: Internal.Utilities.StructuredFormat.Layout NewLeaf(Boolean, Internal.Utilities.StructuredFormat.TaggedText, Boolean) -Internal.Utilities.StructuredFormat.Layout: Internal.Utilities.StructuredFormat.Layout NewNode(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Joint) -Internal.Utilities.StructuredFormat.Layout: Internal.Utilities.StructuredFormat.Layout NewObjLeaf(Boolean, System.Object, Boolean) -Internal.Utilities.StructuredFormat.Layout: Internal.Utilities.StructuredFormat.Layout+Attr -Internal.Utilities.StructuredFormat.Layout: Internal.Utilities.StructuredFormat.Layout+Leaf -Internal.Utilities.StructuredFormat.Layout: Internal.Utilities.StructuredFormat.Layout+Node -Internal.Utilities.StructuredFormat.Layout: Internal.Utilities.StructuredFormat.Layout+ObjLeaf -Internal.Utilities.StructuredFormat.Layout: Internal.Utilities.StructuredFormat.Layout+Tags -Internal.Utilities.StructuredFormat.Layout: System.String ToString() -Internal.Utilities.StructuredFormat.LayoutOps: Boolean isEmptyL(Internal.Utilities.StructuredFormat.Layout) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout aboveL(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout aboveListL(Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout braceL(Internal.Utilities.StructuredFormat.Layout) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout bracketL(Internal.Utilities.StructuredFormat.Layout) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout commaListL(Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout emptyL -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout get_emptyL() -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout leftL(Internal.Utilities.StructuredFormat.TaggedText) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout listL[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Internal.Utilities.StructuredFormat.Layout], Microsoft.FSharp.Collections.FSharpList`1[T]) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout objL(System.Object) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout op_AtAt(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout op_AtAtMinus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout op_AtAtMinusMinus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout op_HatHat(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout op_MinusMinus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout op_MinusMinusMinus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout op_PlusPlus(Internal.Utilities.StructuredFormat.Layout, Internal.Utilities.StructuredFormat.Layout) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout optionL[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Internal.Utilities.StructuredFormat.Layout], Microsoft.FSharp.Core.FSharpOption`1[T]) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout rightL(Internal.Utilities.StructuredFormat.TaggedText) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout semiListL(Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout sepL(Internal.Utilities.StructuredFormat.TaggedText) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout sepListL(Internal.Utilities.StructuredFormat.Layout, Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout spaceListL(Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout squareBracketL(Internal.Utilities.StructuredFormat.Layout) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout tagAttrL(System.String, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]], Internal.Utilities.StructuredFormat.Layout) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout tupleL(Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout]) -Internal.Utilities.StructuredFormat.LayoutOps: Internal.Utilities.StructuredFormat.Layout wordL(Internal.Utilities.StructuredFormat.TaggedText) -Internal.Utilities.StructuredFormat.LayoutOps: Microsoft.FSharp.Collections.FSharpList`1[Internal.Utilities.StructuredFormat.Layout] unfoldL[T,State](Microsoft.FSharp.Core.FSharpFunc`2[T,Internal.Utilities.StructuredFormat.Layout], Microsoft.FSharp.Core.FSharpFunc`2[State,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,State]]], State, Int32) -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 ActivePatternCase -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 ActivePatternResult -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Alias -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Class -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Delegate -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Enum -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Event -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Field -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Interface -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Keyword -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 LineBreak -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Local -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Member -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Method -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Module -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 ModuleBinding -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Function -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Namespace -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 NumericLiteral -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Operator -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Parameter -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Property -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Punctuation -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Record -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 RecordField -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Space -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 StringLiteral -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Struct -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Text -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 TypeParameter -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 Union -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 UnionCase -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 UnknownEntity -Internal.Utilities.StructuredFormat.LayoutTag+Tags: Int32 UnknownType -Internal.Utilities.StructuredFormat.LayoutTag: Boolean Equals(Internal.Utilities.StructuredFormat.LayoutTag) -Internal.Utilities.StructuredFormat.LayoutTag: Boolean Equals(System.Object) -Internal.Utilities.StructuredFormat.LayoutTag: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsActivePatternCase -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsActivePatternResult -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsAlias -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsClass -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsDelegate -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsEnum -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsEvent -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsField -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsInterface -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsKeyword -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsLineBreak -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsLocal -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsMember -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsMethod -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsModule -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsModuleBinding -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsFunction -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsNamespace -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsNumericLiteral -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsOperator -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsParameter -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsProperty -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsPunctuation -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsRecord -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsRecordField -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsSpace -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsStringLiteral -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsStruct -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsText -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsTypeParameter -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsUnion -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsUnionCase -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsUnknownEntity -Internal.Utilities.StructuredFormat.LayoutTag: Boolean IsUnknownType -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsActivePatternCase() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsActivePatternResult() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsAlias() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsClass() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsDelegate() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsEnum() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsEvent() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsField() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsInterface() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsKeyword() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsLineBreak() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsLocal() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsMember() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsMethod() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsModule() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsModuleBinding() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsFunction() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsNamespace() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsNumericLiteral() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsOperator() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsParameter() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsProperty() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsPunctuation() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsRecord() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsRecordField() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsSpace() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsStringLiteral() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsStruct() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsText() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsTypeParameter() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsUnion() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsUnionCase() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsUnknownEntity() -Internal.Utilities.StructuredFormat.LayoutTag: Boolean get_IsUnknownType() -Internal.Utilities.StructuredFormat.LayoutTag: Int32 GetHashCode() -Internal.Utilities.StructuredFormat.LayoutTag: Int32 GetHashCode(System.Collections.IEqualityComparer) -Internal.Utilities.StructuredFormat.LayoutTag: Int32 Tag -Internal.Utilities.StructuredFormat.LayoutTag: Int32 get_Tag() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag ActivePatternCase -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag ActivePatternResult -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Alias -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Class -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Delegate -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Enum -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Event -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Field -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Interface -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Keyword -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag LineBreak -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Local -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Member -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Method -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Module -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag ModuleBinding -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Function -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Namespace -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag NumericLiteral -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Operator -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Parameter -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Property -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Punctuation -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Record -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag RecordField -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Space -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag StringLiteral -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Struct -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Text -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag TypeParameter -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag Union -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag UnionCase -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag UnknownEntity -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag UnknownType -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_ActivePatternCase() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_ActivePatternResult() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Alias() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Class() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Delegate() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Enum() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Event() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Field() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Interface() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Keyword() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_LineBreak() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Local() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Member() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Method() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Module() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_ModuleBinding() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Function() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Namespace() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_NumericLiteral() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Operator() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Parameter() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Property() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Punctuation() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Record() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_RecordField() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Space() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_StringLiteral() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Struct() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Text() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_TypeParameter() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_Union() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_UnionCase() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_UnknownEntity() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag get_UnknownType() -Internal.Utilities.StructuredFormat.LayoutTag: Internal.Utilities.StructuredFormat.LayoutTag+Tags -Internal.Utilities.StructuredFormat.LayoutTag: System.String ToString() -Internal.Utilities.StructuredFormat.TaggedText: Internal.Utilities.StructuredFormat.LayoutTag Tag -Internal.Utilities.StructuredFormat.TaggedText: Internal.Utilities.StructuredFormat.LayoutTag get_Tag() -Internal.Utilities.StructuredFormat.TaggedText: System.String Text -Internal.Utilities.StructuredFormat.TaggedText: System.String get_Text() -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText arrow -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText comma -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText equals -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_arrow() -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_comma() -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_equals() -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_leftBrace() -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_leftBraceBar() -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_leftBracket() -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_leftParen() -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_lineBreak() -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_questionMark() -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_rightBrace() -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_rightBraceBar() -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_rightBracket() -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_rightParen() -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_semicolon() -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText get_space() -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText leftBrace -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText leftBraceBar -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText leftBracket -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText leftParen -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText lineBreak -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText questionMark -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText rightBrace -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText rightBraceBar -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText rightBracket -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText rightParen -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText semicolon -Internal.Utilities.StructuredFormat.TaggedTextOps+Literals: Internal.Utilities.StructuredFormat.TaggedText space -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText mkTag(Internal.Utilities.StructuredFormat.LayoutTag, System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagAlias(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagClass(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagDelegate(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagEnum(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagEvent(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagField(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagInterface(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagKeyword(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagLineBreak(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagLocal(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagMethod(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagModule(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagModuleBinding(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagFunction(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagNamespace(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagNumericLiteral(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagOperator(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagParameter(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagProperty(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagPunctuation(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagRecord(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagRecordField(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagSpace(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagStringLiteral(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagStruct(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagText(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagTypeParameter(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedText tagUnionCase(System.String) -Internal.Utilities.StructuredFormat.TaggedTextOps: Internal.Utilities.StructuredFormat.TaggedTextOps+Literals -Internal.Utilities.StructuredFormat.TaggedTextOps: Microsoft.FSharp.Collections.FSharpSet`1[System.String] get_keywordFunctions() -Internal.Utilities.StructuredFormat.TaggedTextOps: Microsoft.FSharp.Collections.FSharpSet`1[System.String] keywordFunctions -Internal.Utilities.StructuredFormat.TaggedTextWriter: Void Write(Internal.Utilities.StructuredFormat.TaggedText) -Internal.Utilities.StructuredFormat.TaggedTextWriter: Void WriteLine() -Microsoft.DotNet.DependencyManager.AssemblyResolutionProbe: System.Collections.Generic.IEnumerable`1[System.String] EndInvoke(System.IAsyncResult) -Microsoft.DotNet.DependencyManager.AssemblyResolutionProbe: System.Collections.Generic.IEnumerable`1[System.String] Invoke() -Microsoft.DotNet.DependencyManager.AssemblyResolutionProbe: System.IAsyncResult BeginInvoke(System.AsyncCallback, System.Object) -Microsoft.DotNet.DependencyManager.AssemblyResolutionProbe: Void .ctor(System.Object, IntPtr) -Microsoft.DotNet.DependencyManager.AssemblyResolveHandler: Void .ctor(Microsoft.DotNet.DependencyManager.AssemblyResolutionProbe) -Microsoft.DotNet.DependencyManager.DependencyProvider: Microsoft.DotNet.DependencyManager.IDependencyManagerProvider TryFindDependencyManagerByKey(System.Collections.Generic.IEnumerable`1[System.String], System.String, Microsoft.DotNet.DependencyManager.ResolvingErrorReport, System.String) -Microsoft.DotNet.DependencyManager.DependencyProvider: Microsoft.DotNet.DependencyManager.IResolveDependenciesResult Resolve(Microsoft.DotNet.DependencyManager.IDependencyManagerProvider, System.String, System.Collections.Generic.IEnumerable`1[System.Tuple`2[System.String,System.String]], Microsoft.DotNet.DependencyManager.ResolvingErrorReport, System.String, System.String, System.String, System.String, System.String, Int32) -Microsoft.DotNet.DependencyManager.DependencyProvider: System.String[] GetRegisteredDependencyManagerHelpText(System.Collections.Generic.IEnumerable`1[System.String], System.String, Microsoft.DotNet.DependencyManager.ResolvingErrorReport) -Microsoft.DotNet.DependencyManager.DependencyProvider: System.Tuple`2[System.Int32,System.String] CreatePackageManagerUnknownError(System.Collections.Generic.IEnumerable`1[System.String], System.String, System.String, Microsoft.DotNet.DependencyManager.ResolvingErrorReport) -Microsoft.DotNet.DependencyManager.DependencyProvider: System.Tuple`2[System.String,Microsoft.DotNet.DependencyManager.IDependencyManagerProvider] TryFindDependencyManagerInPath(System.Collections.Generic.IEnumerable`1[System.String], System.String, Microsoft.DotNet.DependencyManager.ResolvingErrorReport, System.String) -Microsoft.DotNet.DependencyManager.DependencyProvider: Void .ctor(Microsoft.DotNet.DependencyManager.AssemblyResolutionProbe, Microsoft.DotNet.DependencyManager.NativeResolutionProbe) -Microsoft.DotNet.DependencyManager.DependencyProvider: Void .ctor(Microsoft.DotNet.DependencyManager.NativeResolutionProbe) -Microsoft.DotNet.DependencyManager.DependencyProvider: Void .ctor() -Microsoft.DotNet.DependencyManager.ErrorReportType+Tags: Int32 Error -Microsoft.DotNet.DependencyManager.ErrorReportType+Tags: Int32 Warning -Microsoft.DotNet.DependencyManager.ErrorReportType: Boolean Equals(Microsoft.DotNet.DependencyManager.ErrorReportType) -Microsoft.DotNet.DependencyManager.ErrorReportType: Boolean Equals(System.Object) -Microsoft.DotNet.DependencyManager.ErrorReportType: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.DotNet.DependencyManager.ErrorReportType: Boolean IsError -Microsoft.DotNet.DependencyManager.ErrorReportType: Boolean IsWarning -Microsoft.DotNet.DependencyManager.ErrorReportType: Boolean get_IsError() -Microsoft.DotNet.DependencyManager.ErrorReportType: Boolean get_IsWarning() -Microsoft.DotNet.DependencyManager.ErrorReportType: Int32 CompareTo(Microsoft.DotNet.DependencyManager.ErrorReportType) -Microsoft.DotNet.DependencyManager.ErrorReportType: Int32 CompareTo(System.Object) -Microsoft.DotNet.DependencyManager.ErrorReportType: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.DotNet.DependencyManager.ErrorReportType: Int32 GetHashCode() -Microsoft.DotNet.DependencyManager.ErrorReportType: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.DotNet.DependencyManager.ErrorReportType: Int32 Tag -Microsoft.DotNet.DependencyManager.ErrorReportType: Int32 get_Tag() -Microsoft.DotNet.DependencyManager.ErrorReportType: Microsoft.DotNet.DependencyManager.ErrorReportType Error -Microsoft.DotNet.DependencyManager.ErrorReportType: Microsoft.DotNet.DependencyManager.ErrorReportType Warning -Microsoft.DotNet.DependencyManager.ErrorReportType: Microsoft.DotNet.DependencyManager.ErrorReportType get_Error() -Microsoft.DotNet.DependencyManager.ErrorReportType: Microsoft.DotNet.DependencyManager.ErrorReportType get_Warning() -Microsoft.DotNet.DependencyManager.ErrorReportType: Microsoft.DotNet.DependencyManager.ErrorReportType+Tags -Microsoft.DotNet.DependencyManager.ErrorReportType: System.String ToString() -Microsoft.DotNet.DependencyManager.IDependencyManagerProvider: Microsoft.DotNet.DependencyManager.IResolveDependenciesResult ResolveDependencies(System.String, System.String, System.String, System.String, System.Collections.Generic.IEnumerable`1[System.Tuple`2[System.String,System.String]], System.String, System.String, Int32) -Microsoft.DotNet.DependencyManager.IDependencyManagerProvider: System.String Key -Microsoft.DotNet.DependencyManager.IDependencyManagerProvider: System.String Name -Microsoft.DotNet.DependencyManager.IDependencyManagerProvider: System.String get_Key() -Microsoft.DotNet.DependencyManager.IDependencyManagerProvider: System.String get_Name() -Microsoft.DotNet.DependencyManager.IDependencyManagerProvider: System.String[] HelpMessages -Microsoft.DotNet.DependencyManager.IDependencyManagerProvider: System.String[] get_HelpMessages() -Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: Boolean Success -Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: Boolean get_Success() -Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] Resolutions -Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] Roots -Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] SourceFiles -Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] get_Resolutions() -Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] get_Roots() -Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: System.Collections.Generic.IEnumerable`1[System.String] get_SourceFiles() -Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: System.String[] StdError -Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: System.String[] StdOut -Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: System.String[] get_StdError() -Microsoft.DotNet.DependencyManager.IResolveDependenciesResult: System.String[] get_StdOut() -Microsoft.DotNet.DependencyManager.NativeDllResolveHandler: Void .ctor(Microsoft.DotNet.DependencyManager.NativeResolutionProbe) -Microsoft.DotNet.DependencyManager.NativeResolutionProbe: System.Collections.Generic.IEnumerable`1[System.String] EndInvoke(System.IAsyncResult) -Microsoft.DotNet.DependencyManager.NativeResolutionProbe: System.Collections.Generic.IEnumerable`1[System.String] Invoke() -Microsoft.DotNet.DependencyManager.NativeResolutionProbe: System.IAsyncResult BeginInvoke(System.AsyncCallback, System.Object) -Microsoft.DotNet.DependencyManager.NativeResolutionProbe: Void .ctor(System.Object, IntPtr) -Microsoft.DotNet.DependencyManager.ResolvingErrorReport: System.IAsyncResult BeginInvoke(Microsoft.DotNet.DependencyManager.ErrorReportType, Int32, System.String, System.AsyncCallback, System.Object) -Microsoft.DotNet.DependencyManager.ResolvingErrorReport: Void .ctor(System.Object, IntPtr) -Microsoft.DotNet.DependencyManager.ResolvingErrorReport: Void EndInvoke(System.IAsyncResult) -Microsoft.DotNet.DependencyManager.ResolvingErrorReport: Void Invoke(Microsoft.DotNet.DependencyManager.ErrorReportType, Int32, System.String) -FSharp.Compiler.ErrorLogger: System.IDisposable PushErrorLoggerPhaseUntilUnwind[?](Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.ErrorLogger+ErrorLogger,?]) -FSharp.Compiler.ErrorLogger: Void ReportWarnings[?](Microsoft.FSharp.Collections.FSharpList`1[?]) -FSharp.Compiler.ParseHelpers: ILInstr[] ParseAssemblyCodeInstructions(System.String, range) -FSharp.Compiler.PrettyNaming: Internal.Utilities.StructuredFormat.Layout DemangleOperatorNameAsLayout[?](Microsoft.FSharp.Core.FSharpFunc`2[System.String,?], System.String) -FSharp.Compiler.SourceCodeServices.CompilerDiagnostics: System.String getErrorMessage(FSharp.Compiler.SourceCodeServices.DiagnosticKind) -FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Boolean Equals(FSharp.Compiler.SourceCodeServices.DiagnosticKind) -FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Boolean IsAddIndexerDot -FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Boolean IsReplaceWithSuggestion -FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Boolean get_IsAddIndexerDot() -FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Boolean get_IsReplaceWithSuggestion() -FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.DiagnosticKind) -FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Int32 Tag -FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: System.String ToString() -FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: System.String get_suggestion() -FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion: System.String suggestion -FSharp.Compiler.SourceCodeServices.DiagnosticKind+Tags: Int32 AddIndexerDot -FSharp.Compiler.SourceCodeServices.DiagnosticKind+Tags: Int32 ReplaceWithSuggestion -FSharp.Compiler.SourceCodeServices.DiagnosticKind: Boolean Equals(FSharp.Compiler.SourceCodeServices.DiagnosticKind) -FSharp.Compiler.SourceCodeServices.DiagnosticKind: Boolean Equals(System.Object) -FSharp.Compiler.SourceCodeServices.DiagnosticKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.DiagnosticKind: Boolean IsAddIndexerDot -FSharp.Compiler.SourceCodeServices.DiagnosticKind: Boolean IsReplaceWithSuggestion -FSharp.Compiler.SourceCodeServices.DiagnosticKind: Boolean get_IsAddIndexerDot() -FSharp.Compiler.SourceCodeServices.DiagnosticKind: Boolean get_IsReplaceWithSuggestion() -FSharp.Compiler.SourceCodeServices.DiagnosticKind: FSharp.Compiler.SourceCodeServices.DiagnosticKind AddIndexerDot -FSharp.Compiler.SourceCodeServices.DiagnosticKind: FSharp.Compiler.SourceCodeServices.DiagnosticKind NewReplaceWithSuggestion(System.String) -FSharp.Compiler.SourceCodeServices.DiagnosticKind: FSharp.Compiler.SourceCodeServices.DiagnosticKind get_AddIndexerDot() -FSharp.Compiler.SourceCodeServices.DiagnosticKind: FSharp.Compiler.SourceCodeServices.DiagnosticKind+ReplaceWithSuggestion -FSharp.Compiler.SourceCodeServices.DiagnosticKind: FSharp.Compiler.SourceCodeServices.DiagnosticKind+Tags -FSharp.Compiler.SourceCodeServices.DiagnosticKind: Int32 CompareTo(FSharp.Compiler.SourceCodeServices.DiagnosticKind) -FSharp.Compiler.SourceCodeServices.DiagnosticKind: Int32 CompareTo(System.Object) -FSharp.Compiler.SourceCodeServices.DiagnosticKind: Int32 CompareTo(System.Object, System.Collections.IComparer) -FSharp.Compiler.SourceCodeServices.DiagnosticKind: Int32 GetHashCode() -FSharp.Compiler.SourceCodeServices.DiagnosticKind: Int32 GetHashCode(System.Collections.IEqualityComparer) -FSharp.Compiler.SourceCodeServices.DiagnosticKind: Int32 Tag -FSharp.Compiler.SourceCodeServices.DiagnosticKind: Int32 get_Tag() -FSharp.Compiler.SourceCodeServices.DiagnosticKind: System.String ToString() -FSharp.Compiler.SourceCodeServices.ErrorResolutionHints: System.Collections.Generic.IEnumerable`1[System.String] getSuggestedNames(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.String,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.Unit], System.String)" +FSharp.Compiler.Text.TaggedText +FSharp.Compiler.Text.TaggedText: FSharp.Compiler.Text.TextTag Tag +FSharp.Compiler.Text.TaggedText: FSharp.Compiler.Text.TextTag get_Tag() +FSharp.Compiler.Text.TaggedText: System.String Text +FSharp.Compiler.Text.TaggedText: System.String ToString() +FSharp.Compiler.Text.TaggedText: System.String get_Text() +FSharp.Compiler.Text.TaggedText: Void .ctor(FSharp.Compiler.Text.TextTag, System.String) +FSharp.Compiler.Text.TaggedTextModule +FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText colon +FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText comma +FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText dot +FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText get_colon() +FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText get_comma() +FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText get_dot() +FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText get_lineBreak() +FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText get_minus() +FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText get_space() +FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText lineBreak +FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText minus +FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText space +FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText tagClass(System.String) +FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText tagNamespace(System.String) +FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText tagParameter(System.String) +FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText tagSpace(System.String) +FSharp.Compiler.Text.TaggedTextModule: FSharp.Compiler.Text.TaggedText tagText(System.String) +FSharp.Compiler.Text.TextTag +FSharp.Compiler.Text.TextTag+Tags: Int32 ActivePatternCase +FSharp.Compiler.Text.TextTag+Tags: Int32 ActivePatternResult +FSharp.Compiler.Text.TextTag+Tags: Int32 Alias +FSharp.Compiler.Text.TextTag+Tags: Int32 Class +FSharp.Compiler.Text.TextTag+Tags: Int32 Delegate +FSharp.Compiler.Text.TextTag+Tags: Int32 Enum +FSharp.Compiler.Text.TextTag+Tags: Int32 Event +FSharp.Compiler.Text.TextTag+Tags: Int32 Field +FSharp.Compiler.Text.TextTag+Tags: Int32 Function +FSharp.Compiler.Text.TextTag+Tags: Int32 Interface +FSharp.Compiler.Text.TextTag+Tags: Int32 Keyword +FSharp.Compiler.Text.TextTag+Tags: Int32 LineBreak +FSharp.Compiler.Text.TextTag+Tags: Int32 Local +FSharp.Compiler.Text.TextTag+Tags: Int32 Member +FSharp.Compiler.Text.TextTag+Tags: Int32 Method +FSharp.Compiler.Text.TextTag+Tags: Int32 Module +FSharp.Compiler.Text.TextTag+Tags: Int32 ModuleBinding +FSharp.Compiler.Text.TextTag+Tags: Int32 Namespace +FSharp.Compiler.Text.TextTag+Tags: Int32 NumericLiteral +FSharp.Compiler.Text.TextTag+Tags: Int32 Operator +FSharp.Compiler.Text.TextTag+Tags: Int32 Parameter +FSharp.Compiler.Text.TextTag+Tags: Int32 Property +FSharp.Compiler.Text.TextTag+Tags: Int32 Punctuation +FSharp.Compiler.Text.TextTag+Tags: Int32 Record +FSharp.Compiler.Text.TextTag+Tags: Int32 RecordField +FSharp.Compiler.Text.TextTag+Tags: Int32 Space +FSharp.Compiler.Text.TextTag+Tags: Int32 StringLiteral +FSharp.Compiler.Text.TextTag+Tags: Int32 Struct +FSharp.Compiler.Text.TextTag+Tags: Int32 Text +FSharp.Compiler.Text.TextTag+Tags: Int32 TypeParameter +FSharp.Compiler.Text.TextTag+Tags: Int32 Union +FSharp.Compiler.Text.TextTag+Tags: Int32 UnionCase +FSharp.Compiler.Text.TextTag+Tags: Int32 UnknownEntity +FSharp.Compiler.Text.TextTag+Tags: Int32 UnknownType +FSharp.Compiler.Text.TextTag: Boolean Equals(FSharp.Compiler.Text.TextTag) +FSharp.Compiler.Text.TextTag: Boolean Equals(System.Object) +FSharp.Compiler.Text.TextTag: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Text.TextTag: Boolean IsActivePatternCase +FSharp.Compiler.Text.TextTag: Boolean IsActivePatternResult +FSharp.Compiler.Text.TextTag: Boolean IsAlias +FSharp.Compiler.Text.TextTag: Boolean IsClass +FSharp.Compiler.Text.TextTag: Boolean IsDelegate +FSharp.Compiler.Text.TextTag: Boolean IsEnum +FSharp.Compiler.Text.TextTag: Boolean IsEvent +FSharp.Compiler.Text.TextTag: Boolean IsField +FSharp.Compiler.Text.TextTag: Boolean IsFunction +FSharp.Compiler.Text.TextTag: Boolean IsInterface +FSharp.Compiler.Text.TextTag: Boolean IsKeyword +FSharp.Compiler.Text.TextTag: Boolean IsLineBreak +FSharp.Compiler.Text.TextTag: Boolean IsLocal +FSharp.Compiler.Text.TextTag: Boolean IsMember +FSharp.Compiler.Text.TextTag: Boolean IsMethod +FSharp.Compiler.Text.TextTag: Boolean IsModule +FSharp.Compiler.Text.TextTag: Boolean IsModuleBinding +FSharp.Compiler.Text.TextTag: Boolean IsNamespace +FSharp.Compiler.Text.TextTag: Boolean IsNumericLiteral +FSharp.Compiler.Text.TextTag: Boolean IsOperator +FSharp.Compiler.Text.TextTag: Boolean IsParameter +FSharp.Compiler.Text.TextTag: Boolean IsProperty +FSharp.Compiler.Text.TextTag: Boolean IsPunctuation +FSharp.Compiler.Text.TextTag: Boolean IsRecord +FSharp.Compiler.Text.TextTag: Boolean IsRecordField +FSharp.Compiler.Text.TextTag: Boolean IsSpace +FSharp.Compiler.Text.TextTag: Boolean IsStringLiteral +FSharp.Compiler.Text.TextTag: Boolean IsStruct +FSharp.Compiler.Text.TextTag: Boolean IsText +FSharp.Compiler.Text.TextTag: Boolean IsTypeParameter +FSharp.Compiler.Text.TextTag: Boolean IsUnion +FSharp.Compiler.Text.TextTag: Boolean IsUnionCase +FSharp.Compiler.Text.TextTag: Boolean IsUnknownEntity +FSharp.Compiler.Text.TextTag: Boolean IsUnknownType +FSharp.Compiler.Text.TextTag: Boolean get_IsActivePatternCase() +FSharp.Compiler.Text.TextTag: Boolean get_IsActivePatternResult() +FSharp.Compiler.Text.TextTag: Boolean get_IsAlias() +FSharp.Compiler.Text.TextTag: Boolean get_IsClass() +FSharp.Compiler.Text.TextTag: Boolean get_IsDelegate() +FSharp.Compiler.Text.TextTag: Boolean get_IsEnum() +FSharp.Compiler.Text.TextTag: Boolean get_IsEvent() +FSharp.Compiler.Text.TextTag: Boolean get_IsField() +FSharp.Compiler.Text.TextTag: Boolean get_IsFunction() +FSharp.Compiler.Text.TextTag: Boolean get_IsInterface() +FSharp.Compiler.Text.TextTag: Boolean get_IsKeyword() +FSharp.Compiler.Text.TextTag: Boolean get_IsLineBreak() +FSharp.Compiler.Text.TextTag: Boolean get_IsLocal() +FSharp.Compiler.Text.TextTag: Boolean get_IsMember() +FSharp.Compiler.Text.TextTag: Boolean get_IsMethod() +FSharp.Compiler.Text.TextTag: Boolean get_IsModule() +FSharp.Compiler.Text.TextTag: Boolean get_IsModuleBinding() +FSharp.Compiler.Text.TextTag: Boolean get_IsNamespace() +FSharp.Compiler.Text.TextTag: Boolean get_IsNumericLiteral() +FSharp.Compiler.Text.TextTag: Boolean get_IsOperator() +FSharp.Compiler.Text.TextTag: Boolean get_IsParameter() +FSharp.Compiler.Text.TextTag: Boolean get_IsProperty() +FSharp.Compiler.Text.TextTag: Boolean get_IsPunctuation() +FSharp.Compiler.Text.TextTag: Boolean get_IsRecord() +FSharp.Compiler.Text.TextTag: Boolean get_IsRecordField() +FSharp.Compiler.Text.TextTag: Boolean get_IsSpace() +FSharp.Compiler.Text.TextTag: Boolean get_IsStringLiteral() +FSharp.Compiler.Text.TextTag: Boolean get_IsStruct() +FSharp.Compiler.Text.TextTag: Boolean get_IsText() +FSharp.Compiler.Text.TextTag: Boolean get_IsTypeParameter() +FSharp.Compiler.Text.TextTag: Boolean get_IsUnion() +FSharp.Compiler.Text.TextTag: Boolean get_IsUnionCase() +FSharp.Compiler.Text.TextTag: Boolean get_IsUnknownEntity() +FSharp.Compiler.Text.TextTag: Boolean get_IsUnknownType() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag ActivePatternCase +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag ActivePatternResult +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Alias +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Class +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Delegate +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Enum +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Event +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Field +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Function +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Interface +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Keyword +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag LineBreak +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Local +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Member +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Method +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Module +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag ModuleBinding +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Namespace +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag NumericLiteral +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Operator +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Parameter +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Property +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Punctuation +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Record +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag RecordField +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Space +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag StringLiteral +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Struct +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Text +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag TypeParameter +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag Union +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag UnionCase +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag UnknownEntity +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag UnknownType +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_ActivePatternCase() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_ActivePatternResult() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Alias() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Class() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Delegate() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Enum() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Event() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Field() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Function() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Interface() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Keyword() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_LineBreak() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Local() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Member() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Method() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Module() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_ModuleBinding() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Namespace() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_NumericLiteral() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Operator() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Parameter() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Property() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Punctuation() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Record() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_RecordField() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Space() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_StringLiteral() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Struct() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Text() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_TypeParameter() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_Union() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_UnionCase() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_UnknownEntity() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag get_UnknownType() +FSharp.Compiler.Text.TextTag: FSharp.Compiler.Text.TextTag+Tags +FSharp.Compiler.Text.TextTag: Int32 GetHashCode() +FSharp.Compiler.Text.TextTag: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Text.TextTag: Int32 Tag +FSharp.Compiler.Text.TextTag: Int32 get_Tag() +FSharp.Compiler.Text.TextTag: System.String ToString() +FSharp.Compiler.Tokenization.FSharpKeywords +FSharp.Compiler.Tokenization.FSharpKeywords: Boolean DoesIdentifierNeedQuotation(System.String) +FSharp.Compiler.Tokenization.FSharpKeywords: Microsoft.FSharp.Collections.FSharpList`1[System.String] KeywordNames +FSharp.Compiler.Tokenization.FSharpKeywords: Microsoft.FSharp.Collections.FSharpList`1[System.String] get_KeywordNames() +FSharp.Compiler.Tokenization.FSharpKeywords: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] KeywordsWithDescription +FSharp.Compiler.Tokenization.FSharpKeywords: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.String,System.String]] get_KeywordsWithDescription() +FSharp.Compiler.Tokenization.FSharpKeywords: System.String NormalizeIdentifierBackticks(System.String) +FSharp.Compiler.Tokenization.FSharpKeywords: System.String QuoteIdentifierIfNeeded(System.String) +FSharp.Compiler.Tokenization.FSharpLexer +FSharp.Compiler.Tokenization.FSharpLexer: Void Tokenize(FSharp.Compiler.Text.ISourceText, Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Tokenization.FSharpToken,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Tokenization.FSharpLexerFlags], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpMap`2[System.String,System.String]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +FSharp.Compiler.Tokenization.FSharpLexerFlags +FSharp.Compiler.Tokenization.FSharpLexerFlags: FSharp.Compiler.Tokenization.FSharpLexerFlags Compiling +FSharp.Compiler.Tokenization.FSharpLexerFlags: FSharp.Compiler.Tokenization.FSharpLexerFlags CompilingFSharpCore +FSharp.Compiler.Tokenization.FSharpLexerFlags: FSharp.Compiler.Tokenization.FSharpLexerFlags Default +FSharp.Compiler.Tokenization.FSharpLexerFlags: FSharp.Compiler.Tokenization.FSharpLexerFlags LightSyntaxOn +FSharp.Compiler.Tokenization.FSharpLexerFlags: FSharp.Compiler.Tokenization.FSharpLexerFlags SkipTrivia +FSharp.Compiler.Tokenization.FSharpLexerFlags: FSharp.Compiler.Tokenization.FSharpLexerFlags UseLexFilter +FSharp.Compiler.Tokenization.FSharpLexerFlags: Int32 value__ +FSharp.Compiler.Tokenization.FSharpLineTokenizer +FSharp.Compiler.Tokenization.FSharpLineTokenizer: FSharp.Compiler.Tokenization.FSharpTokenizerColorState ColorStateOfLexState(FSharp.Compiler.Tokenization.FSharpTokenizerLexState) +FSharp.Compiler.Tokenization.FSharpLineTokenizer: FSharp.Compiler.Tokenization.FSharpTokenizerLexState LexStateOfColorState(FSharp.Compiler.Tokenization.FSharpTokenizerColorState) +FSharp.Compiler.Tokenization.FSharpLineTokenizer: System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Tokenization.FSharpTokenInfo],FSharp.Compiler.Tokenization.FSharpTokenizerLexState] ScanToken(FSharp.Compiler.Tokenization.FSharpTokenizerLexState) +FSharp.Compiler.Tokenization.FSharpSourceTokenizer +FSharp.Compiler.Tokenization.FSharpSourceTokenizer: FSharp.Compiler.Tokenization.FSharpLineTokenizer CreateBufferTokenizer(Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[System.Char[],System.Int32,System.Int32],System.Int32]) +FSharp.Compiler.Tokenization.FSharpSourceTokenizer: FSharp.Compiler.Tokenization.FSharpLineTokenizer CreateLineTokenizer(System.String) +FSharp.Compiler.Tokenization.FSharpSourceTokenizer: Void .ctor(Microsoft.FSharp.Collections.FSharpList`1[System.String], Microsoft.FSharp.Core.FSharpOption`1[System.String]) +FSharp.Compiler.Tokenization.FSharpToken +FSharp.Compiler.Tokenization.FSharpToken: Boolean IsCommentTrivia +FSharp.Compiler.Tokenization.FSharpToken: Boolean IsIdentifier +FSharp.Compiler.Tokenization.FSharpToken: Boolean IsKeyword +FSharp.Compiler.Tokenization.FSharpToken: Boolean IsNumericLiteral +FSharp.Compiler.Tokenization.FSharpToken: Boolean IsStringLiteral +FSharp.Compiler.Tokenization.FSharpToken: Boolean get_IsCommentTrivia() +FSharp.Compiler.Tokenization.FSharpToken: Boolean get_IsIdentifier() +FSharp.Compiler.Tokenization.FSharpToken: Boolean get_IsKeyword() +FSharp.Compiler.Tokenization.FSharpToken: Boolean get_IsNumericLiteral() +FSharp.Compiler.Tokenization.FSharpToken: Boolean get_IsStringLiteral() +FSharp.Compiler.Tokenization.FSharpToken: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Tokenization.FSharpToken: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Tokenization.FSharpToken: FSharp.Compiler.Tokenization.FSharpTokenKind Kind +FSharp.Compiler.Tokenization.FSharpToken: FSharp.Compiler.Tokenization.FSharpTokenKind get_Kind() +FSharp.Compiler.Tokenization.FSharpTokenCharKind +FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind Comment +FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind Default +FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind Delimiter +FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind Identifier +FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind Keyword +FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind LineComment +FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind Literal +FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind Operator +FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind String +FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind Text +FSharp.Compiler.Tokenization.FSharpTokenCharKind: FSharp.Compiler.Tokenization.FSharpTokenCharKind WhiteSpace +FSharp.Compiler.Tokenization.FSharpTokenCharKind: Int32 value__ +FSharp.Compiler.Tokenization.FSharpTokenColorKind +FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind Comment +FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind Default +FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind Identifier +FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind InactiveCode +FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind Keyword +FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind Number +FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind Operator +FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind PreprocessorKeyword +FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind Punctuation +FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind String +FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind Text +FSharp.Compiler.Tokenization.FSharpTokenColorKind: FSharp.Compiler.Tokenization.FSharpTokenColorKind UpperIdentifier +FSharp.Compiler.Tokenization.FSharpTokenColorKind: Int32 value__ +FSharp.Compiler.Tokenization.FSharpTokenInfo +FSharp.Compiler.Tokenization.FSharpTokenInfo: Boolean Equals(FSharp.Compiler.Tokenization.FSharpTokenInfo) +FSharp.Compiler.Tokenization.FSharpTokenInfo: Boolean Equals(System.Object) +FSharp.Compiler.Tokenization.FSharpTokenInfo: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Tokenization.FSharpTokenInfo: FSharp.Compiler.Tokenization.FSharpTokenCharKind CharClass +FSharp.Compiler.Tokenization.FSharpTokenInfo: FSharp.Compiler.Tokenization.FSharpTokenCharKind get_CharClass() +FSharp.Compiler.Tokenization.FSharpTokenInfo: FSharp.Compiler.Tokenization.FSharpTokenColorKind ColorClass +FSharp.Compiler.Tokenization.FSharpTokenInfo: FSharp.Compiler.Tokenization.FSharpTokenColorKind get_ColorClass() +FSharp.Compiler.Tokenization.FSharpTokenInfo: FSharp.Compiler.Tokenization.FSharpTokenTriggerClass FSharpTokenTriggerClass +FSharp.Compiler.Tokenization.FSharpTokenInfo: FSharp.Compiler.Tokenization.FSharpTokenTriggerClass get_FSharpTokenTriggerClass() +FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 CompareTo(FSharp.Compiler.Tokenization.FSharpTokenInfo) +FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 CompareTo(System.Object) +FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 FullMatchedLength +FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 GetHashCode() +FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 LeftColumn +FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 RightColumn +FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 Tag +FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 get_FullMatchedLength() +FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 get_LeftColumn() +FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 get_RightColumn() +FSharp.Compiler.Tokenization.FSharpTokenInfo: Int32 get_Tag() +FSharp.Compiler.Tokenization.FSharpTokenInfo: System.String ToString() +FSharp.Compiler.Tokenization.FSharpTokenInfo: System.String TokenName +FSharp.Compiler.Tokenization.FSharpTokenInfo: System.String get_TokenName() +FSharp.Compiler.Tokenization.FSharpTokenInfo: Void .ctor(Int32, Int32, FSharp.Compiler.Tokenization.FSharpTokenColorKind, FSharp.Compiler.Tokenization.FSharpTokenCharKind, FSharp.Compiler.Tokenization.FSharpTokenTriggerClass, Int32, System.String, Int32) +FSharp.Compiler.Tokenization.FSharpTokenKind +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Abstract +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 AdjacentPrefixOperator +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Ampersand +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 AmpersandAmpersand +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 And +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 As +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Asr +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Assert +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Bar +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 BarBar +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 BarRightBrace +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 BarRightBracket +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Base +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Begin +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 BigNumber +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Binder +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 ByteArray +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Char +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Class +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Colon +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 ColonColon +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 ColonEquals +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 ColonGreater +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 ColonQuestionMark +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 ColonQuestionMarkGreater +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Comma +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 CommentTrivia +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Const +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Constraint +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Constructor +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Decimal +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Default +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Delegate +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Do +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 DoBang +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Dollar +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Done +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Dot +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 DotDot +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 DotDotHat +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 DownTo +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Downcast +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Elif +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Else +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 End +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Equals +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Exception +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Extern +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 False +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Finally +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Fixed +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 For +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Fun +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Function +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 FunkyOperatorName +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Global +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Greater +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 GreaterBarRightBracket +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 GreaterRightBracket +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Hash +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 HashElse +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 HashEndIf +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 HashIf +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 HashLight +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 HashLine +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 HighPrecedenceBracketApp +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 HighPrecedenceParenthesisApp +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 HighPrecedenceTypeApp +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Identifier +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Ieee32 +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Ieee64 +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 If +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 In +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InactiveCode +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixAmpersandOperator +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixAsr +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixAtHatOperator +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixBarOperator +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixCompareOperator +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixLand +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixLor +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixLsl +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixLsr +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixLxor +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixMod +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixStarDivideModuloOperator +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 InfixStarStarOperator +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Inherit +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Inline +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Instance +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Int16 +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Int32 +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Int32DotDot +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Int64 +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Int8 +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Interface +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Internal +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 JoinIn +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 KeywordString +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Lazy +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 LeftArrow +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 LeftBrace +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 LeftBraceBar +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 LeftBracket +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 LeftBracketBar +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 LeftBracketLess +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 LeftParenthesis +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 LeftParenthesisStarRightParenthesis +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 LeftQuote +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Less +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Let +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 LineCommentTrivia +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Match +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 MatchBang +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Member +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Minus +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Module +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Mutable +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Namespace +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 NativeInt +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 New +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 None +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Null +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Of +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideAssert +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideBinder +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideBlockBegin +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideBlockEnd +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideBlockSep +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideDeclEnd +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideDo +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideDoBang +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideElse +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideEnd +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideFun +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideFunction +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideInterfaceMember +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideLazy +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideLet +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideReset +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideRightBlockEnd +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideThen +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 OffsideWith +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Open +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Or +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Override +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 PercentOperator +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 PlusMinusOperator +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 PrefixOperator +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Private +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Public +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 QuestionMark +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 QuestionMarkQuestionMark +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Quote +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Rec +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Reserved +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 RightArrow +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 RightBrace +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 RightBracket +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 RightParenthesis +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 RightQuote +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 RightQuoteDot +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Semicolon +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 SemicolonSemicolon +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Sig +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Star +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Static +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 String +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 StringText +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Struct +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Then +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 To +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 True +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Try +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Type +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 UInt16 +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 UInt32 +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 UInt64 +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 UInt8 +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 UNativeInt +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Underscore +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Upcast +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Val +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Void +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 When +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 While +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 WhitespaceTrivia +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 With +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Yield +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 YieldBang +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean Equals(FSharp.Compiler.Tokenization.FSharpTokenKind) +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean Equals(System.Object) +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsAbstract +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsAdjacentPrefixOperator +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsAmpersand +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsAmpersandAmpersand +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsAnd +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsAs +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsAsr +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsAssert +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsBar +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsBarBar +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsBarRightBrace +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsBarRightBracket +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsBase +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsBegin +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsBigNumber +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsBinder +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsByteArray +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsChar +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsClass +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsColon +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsColonColon +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsColonEquals +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsColonGreater +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsColonQuestionMark +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsColonQuestionMarkGreater +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsComma +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsCommentTrivia +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsConst +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsConstraint +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsConstructor +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDecimal +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDefault +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDelegate +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDo +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDoBang +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDollar +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDone +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDot +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDotDot +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDotDotHat +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDownTo +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDowncast +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsElif +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsElse +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsEnd +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsEquals +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsException +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsExtern +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsFalse +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsFinally +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsFixed +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsFor +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsFun +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsFunction +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsFunkyOperatorName +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsGlobal +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsGreater +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsGreaterBarRightBracket +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsGreaterRightBracket +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsHash +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsHashElse +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsHashEndIf +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsHashIf +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsHashLight +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsHashLine +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsHighPrecedenceBracketApp +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsHighPrecedenceParenthesisApp +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsHighPrecedenceTypeApp +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsIdentifier +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsIeee32 +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsIeee64 +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsIf +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsIn +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInactiveCode +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixAmpersandOperator +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixAsr +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixAtHatOperator +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixBarOperator +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixCompareOperator +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixLand +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixLor +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixLsl +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixLsr +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixLxor +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixMod +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixStarDivideModuloOperator +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInfixStarStarOperator +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInherit +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInline +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInstance +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInt16 +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInt32 +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInt32DotDot +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInt64 +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInt8 +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInterface +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsInternal +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsJoinIn +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsKeywordString +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLazy +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLeftArrow +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLeftBrace +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLeftBraceBar +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLeftBracket +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLeftBracketBar +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLeftBracketLess +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLeftParenthesis +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLeftParenthesisStarRightParenthesis +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLeftQuote +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLess +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLet +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsLineCommentTrivia +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsMatch +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsMatchBang +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsMember +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsMinus +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsModule +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsMutable +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsNamespace +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsNativeInt +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsNew +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsNone +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsNull +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOf +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideAssert +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideBinder +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideBlockBegin +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideBlockEnd +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideBlockSep +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideDeclEnd +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideDo +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideDoBang +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideElse +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideEnd +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideFun +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideFunction +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideInterfaceMember +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideLazy +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideLet +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideReset +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideRightBlockEnd +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideThen +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOffsideWith +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOpen +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOr +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsOverride +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsPercentOperator +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsPlusMinusOperator +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsPrefixOperator +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsPrivate +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsPublic +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsQuestionMark +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsQuestionMarkQuestionMark +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsQuote +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsRec +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsReserved +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsRightArrow +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsRightBrace +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsRightBracket +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsRightParenthesis +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsRightQuote +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsRightQuoteDot +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsSemicolon +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsSemicolonSemicolon +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsSig +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsStar +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsStatic +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsString +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsStringText +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsStruct +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsThen +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsTo +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsTrue +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsTry +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsType +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsUInt16 +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsUInt32 +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsUInt64 +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsUInt8 +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsUNativeInt +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsUnderscore +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsUpcast +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsVal +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsVoid +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsWhen +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsWhile +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsWhitespaceTrivia +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsWith +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsYield +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsYieldBang +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsAbstract() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsAdjacentPrefixOperator() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsAmpersand() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsAmpersandAmpersand() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsAnd() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsAs() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsAsr() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsAssert() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsBar() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsBarBar() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsBarRightBrace() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsBarRightBracket() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsBase() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsBegin() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsBigNumber() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsBinder() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsByteArray() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsChar() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsClass() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsColon() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsColonColon() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsColonEquals() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsColonGreater() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsColonQuestionMark() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsColonQuestionMarkGreater() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsComma() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsCommentTrivia() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsConst() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsConstraint() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsConstructor() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDecimal() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDefault() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDelegate() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDo() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDoBang() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDollar() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDone() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDot() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDotDot() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDotDotHat() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDownTo() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDowncast() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsElif() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsElse() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsEnd() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsEquals() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsException() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsExtern() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsFalse() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsFinally() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsFixed() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsFor() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsFun() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsFunction() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsFunkyOperatorName() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsGlobal() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsGreater() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsGreaterBarRightBracket() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsGreaterRightBracket() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsHash() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsHashElse() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsHashEndIf() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsHashIf() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsHashLight() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsHashLine() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsHighPrecedenceBracketApp() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsHighPrecedenceParenthesisApp() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsHighPrecedenceTypeApp() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsIdentifier() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsIeee32() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsIeee64() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsIf() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsIn() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInactiveCode() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixAmpersandOperator() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixAsr() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixAtHatOperator() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixBarOperator() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixCompareOperator() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixLand() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixLor() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixLsl() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixLsr() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixLxor() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixMod() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixStarDivideModuloOperator() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInfixStarStarOperator() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInherit() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInline() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInstance() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInt16() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInt32() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInt32DotDot() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInt64() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInt8() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInterface() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsInternal() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsJoinIn() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsKeywordString() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLazy() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLeftArrow() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLeftBrace() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLeftBraceBar() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLeftBracket() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLeftBracketBar() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLeftBracketLess() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLeftParenthesis() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLeftParenthesisStarRightParenthesis() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLeftQuote() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLess() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLet() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsLineCommentTrivia() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsMatch() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsMatchBang() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsMember() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsMinus() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsModule() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsMutable() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsNamespace() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsNativeInt() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsNew() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsNone() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsNull() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOf() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideAssert() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideBinder() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideBlockBegin() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideBlockEnd() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideBlockSep() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideDeclEnd() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideDo() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideDoBang() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideElse() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideEnd() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideFun() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideFunction() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideInterfaceMember() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideLazy() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideLet() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideReset() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideRightBlockEnd() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideThen() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOffsideWith() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOpen() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOr() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsOverride() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsPercentOperator() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsPlusMinusOperator() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsPrefixOperator() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsPrivate() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsPublic() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsQuestionMark() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsQuestionMarkQuestionMark() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsQuote() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsRec() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsReserved() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsRightArrow() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsRightBrace() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsRightBracket() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsRightParenthesis() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsRightQuote() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsRightQuoteDot() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsSemicolon() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsSemicolonSemicolon() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsSig() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsStar() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsStatic() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsString() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsStringText() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsStruct() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsThen() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsTo() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsTrue() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsTry() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsType() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsUInt16() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsUInt32() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsUInt64() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsUInt8() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsUNativeInt() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsUnderscore() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsUpcast() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsVal() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsVoid() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsWhen() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsWhile() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsWhitespaceTrivia() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsWith() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsYield() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsYieldBang() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Abstract +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind AdjacentPrefixOperator +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Ampersand +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind AmpersandAmpersand +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind And +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind As +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Asr +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Assert +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Bar +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind BarBar +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind BarRightBrace +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind BarRightBracket +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Base +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Begin +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind BigNumber +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Binder +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind ByteArray +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Char +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Class +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Colon +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind ColonColon +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind ColonEquals +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind ColonGreater +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind ColonQuestionMark +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind ColonQuestionMarkGreater +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Comma +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind CommentTrivia +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Const +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Constraint +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Constructor +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Decimal +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Default +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Delegate +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Do +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind DoBang +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Dollar +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Done +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Dot +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind DotDot +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind DotDotHat +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind DownTo +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Downcast +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Elif +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Else +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind End +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Equals +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Exception +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Extern +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind False +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Finally +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Fixed +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind For +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Fun +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Function +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind FunkyOperatorName +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Global +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Greater +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind GreaterBarRightBracket +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind GreaterRightBracket +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Hash +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind HashElse +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind HashEndIf +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind HashIf +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind HashLight +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind HashLine +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind HighPrecedenceBracketApp +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind HighPrecedenceParenthesisApp +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind HighPrecedenceTypeApp +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Identifier +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Ieee32 +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Ieee64 +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind If +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind In +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InactiveCode +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixAmpersandOperator +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixAsr +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixAtHatOperator +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixBarOperator +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixCompareOperator +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixLand +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixLor +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixLsl +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixLsr +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixLxor +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixMod +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixStarDivideModuloOperator +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind InfixStarStarOperator +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Inherit +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Inline +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Instance +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Int16 +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Int32 +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Int32DotDot +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Int64 +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Int8 +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Interface +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Internal +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind JoinIn +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind KeywordString +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Lazy +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind LeftArrow +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind LeftBrace +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind LeftBraceBar +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind LeftBracket +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind LeftBracketBar +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind LeftBracketLess +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind LeftParenthesis +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind LeftParenthesisStarRightParenthesis +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind LeftQuote +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Less +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Let +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind LineCommentTrivia +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Match +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind MatchBang +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Member +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Minus +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Module +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Mutable +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Namespace +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind NativeInt +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind New +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind None +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Null +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Of +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideAssert +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideBinder +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideBlockBegin +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideBlockEnd +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideBlockSep +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideDeclEnd +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideDo +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideDoBang +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideElse +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideEnd +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideFun +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideFunction +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideInterfaceMember +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideLazy +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideLet +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideReset +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideRightBlockEnd +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideThen +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind OffsideWith +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Open +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Or +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Override +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind PercentOperator +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind PlusMinusOperator +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind PrefixOperator +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Private +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Public +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind QuestionMark +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind QuestionMarkQuestionMark +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Quote +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Rec +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Reserved +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind RightArrow +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind RightBrace +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind RightBracket +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind RightParenthesis +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind RightQuote +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind RightQuoteDot +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Semicolon +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind SemicolonSemicolon +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Sig +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Star +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Static +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind String +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind StringText +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Struct +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Then +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind To +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind True +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Try +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Type +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind UInt16 +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind UInt32 +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind UInt64 +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind UInt8 +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind UNativeInt +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Underscore +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Upcast +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Val +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Void +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind When +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind While +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind WhitespaceTrivia +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind With +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Yield +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind YieldBang +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Abstract() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_AdjacentPrefixOperator() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Ampersand() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_AmpersandAmpersand() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_And() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_As() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Asr() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Assert() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Bar() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_BarBar() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_BarRightBrace() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_BarRightBracket() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Base() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Begin() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_BigNumber() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Binder() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_ByteArray() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Char() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Class() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Colon() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_ColonColon() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_ColonEquals() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_ColonGreater() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_ColonQuestionMark() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_ColonQuestionMarkGreater() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Comma() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_CommentTrivia() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Const() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Constraint() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Constructor() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Decimal() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Default() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Delegate() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Do() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_DoBang() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Dollar() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Done() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Dot() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_DotDot() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_DotDotHat() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_DownTo() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Downcast() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Elif() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Else() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_End() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Equals() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Exception() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Extern() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_False() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Finally() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Fixed() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_For() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Fun() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Function() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_FunkyOperatorName() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Global() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Greater() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_GreaterBarRightBracket() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_GreaterRightBracket() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Hash() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_HashElse() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_HashEndIf() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_HashIf() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_HashLight() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_HashLine() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_HighPrecedenceBracketApp() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_HighPrecedenceParenthesisApp() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_HighPrecedenceTypeApp() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Identifier() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Ieee32() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Ieee64() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_If() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_In() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InactiveCode() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixAmpersandOperator() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixAsr() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixAtHatOperator() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixBarOperator() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixCompareOperator() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixLand() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixLor() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixLsl() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixLsr() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixLxor() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixMod() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixStarDivideModuloOperator() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_InfixStarStarOperator() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Inherit() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Inline() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Instance() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Int16() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Int32() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Int32DotDot() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Int64() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Int8() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Interface() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Internal() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_JoinIn() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_KeywordString() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Lazy() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_LeftArrow() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_LeftBrace() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_LeftBraceBar() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_LeftBracket() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_LeftBracketBar() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_LeftBracketLess() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_LeftParenthesis() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_LeftParenthesisStarRightParenthesis() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_LeftQuote() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Less() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Let() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_LineCommentTrivia() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Match() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_MatchBang() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Member() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Minus() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Module() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Mutable() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Namespace() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_NativeInt() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_New() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_None() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Null() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Of() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideAssert() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideBinder() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideBlockBegin() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideBlockEnd() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideBlockSep() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideDeclEnd() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideDo() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideDoBang() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideElse() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideEnd() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideFun() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideFunction() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideInterfaceMember() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideLazy() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideLet() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideReset() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideRightBlockEnd() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideThen() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_OffsideWith() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Open() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Or() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Override() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_PercentOperator() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_PlusMinusOperator() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_PrefixOperator() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Private() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Public() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_QuestionMark() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_QuestionMarkQuestionMark() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Quote() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Rec() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Reserved() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_RightArrow() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_RightBrace() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_RightBracket() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_RightParenthesis() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_RightQuote() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_RightQuoteDot() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Semicolon() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_SemicolonSemicolon() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Sig() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Star() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Static() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_String() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_StringText() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Struct() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Then() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_To() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_True() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Try() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Type() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_UInt16() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_UInt32() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_UInt64() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_UInt8() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_UNativeInt() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Underscore() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Upcast() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Val() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Void() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_When() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_While() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_WhitespaceTrivia() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_With() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Yield() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_YieldBang() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind+Tags +FSharp.Compiler.Tokenization.FSharpTokenKind: Int32 CompareTo(FSharp.Compiler.Tokenization.FSharpTokenKind) +FSharp.Compiler.Tokenization.FSharpTokenKind: Int32 CompareTo(System.Object) +FSharp.Compiler.Tokenization.FSharpTokenKind: Int32 CompareTo(System.Object, System.Collections.IComparer) +FSharp.Compiler.Tokenization.FSharpTokenKind: Int32 GetHashCode() +FSharp.Compiler.Tokenization.FSharpTokenKind: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Tokenization.FSharpTokenKind: Int32 Tag +FSharp.Compiler.Tokenization.FSharpTokenKind: Int32 get_Tag() +FSharp.Compiler.Tokenization.FSharpTokenKind: System.String ToString() +FSharp.Compiler.Tokenization.FSharpTokenTag +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 AMP_AMP +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 BAR +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 BAR_BAR +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 BAR_RBRACK +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 BEGIN +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 CLASS +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 COLON +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 COLON_COLON +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 COLON_EQUALS +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 COLON_GREATER +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 COLON_QMARK +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 COLON_QMARK_GREATER +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 COMMA +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 COMMENT +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 DO +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 DOT +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 DOT_DOT +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 DOT_DOT_HAT +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 ELSE +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 EQUALS +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 FUNCTION +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 GREATER +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 GREATER_RBRACK +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 IDENT +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 INFIX_AT_HAT_OP +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 INFIX_BAR_OP +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 INFIX_COMPARE_OP +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 INFIX_STAR_DIV_MOD_OP +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 INT32_DOT_DOT +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 INTERP_STRING_BEGIN_END +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 INTERP_STRING_BEGIN_PART +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 INTERP_STRING_END +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 INTERP_STRING_PART +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 Identifier +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 LARROW +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 LBRACE +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 LBRACK +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 LBRACK_BAR +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 LBRACK_LESS +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 LESS +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 LINE_COMMENT +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 LPAREN +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 MINUS +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 NEW +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 OWITH +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 PERCENT_OP +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 PLUS_MINUS_OP +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 PREFIX_OP +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 QMARK +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 QUOTE +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 RARROW +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 RBRACE +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 RBRACK +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 RPAREN +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 SEMICOLON +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 STAR +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 STRING +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 STRUCT +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 String +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 THEN +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 TRY +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 UNDERSCORE +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 WHITESPACE +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 WITH +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_AMP_AMP() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_BAR() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_BAR_BAR() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_BAR_RBRACK() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_BEGIN() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_CLASS() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_COLON() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_COLON_COLON() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_COLON_EQUALS() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_COLON_GREATER() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_COLON_QMARK() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_COLON_QMARK_GREATER() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_COMMA() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_COMMENT() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_DO() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_DOT() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_DOT_DOT() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_DOT_DOT_HAT() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_ELSE() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_EQUALS() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_FUNCTION() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_GREATER() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_GREATER_RBRACK() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_IDENT() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_INFIX_AT_HAT_OP() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_INFIX_BAR_OP() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_INFIX_COMPARE_OP() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_INFIX_STAR_DIV_MOD_OP() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_INT32_DOT_DOT() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_INTERP_STRING_BEGIN_END() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_INTERP_STRING_BEGIN_PART() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_INTERP_STRING_END() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_INTERP_STRING_PART() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_Identifier() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_LARROW() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_LBRACE() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_LBRACK() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_LBRACK_BAR() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_LBRACK_LESS() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_LESS() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_LINE_COMMENT() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_LPAREN() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_MINUS() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_NEW() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_OWITH() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_PERCENT_OP() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_PLUS_MINUS_OP() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_PREFIX_OP() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_QMARK() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_QUOTE() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_RARROW() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_RBRACE() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_RBRACK() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_RPAREN() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_SEMICOLON() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_STAR() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_STRING() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_STRUCT() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_String() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_THEN() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_TRY() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_UNDERSCORE() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_WHITESPACE() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_WITH() +FSharp.Compiler.Tokenization.FSharpTokenTriggerClass +FSharp.Compiler.Tokenization.FSharpTokenTriggerClass: FSharp.Compiler.Tokenization.FSharpTokenTriggerClass ChoiceSelect +FSharp.Compiler.Tokenization.FSharpTokenTriggerClass: FSharp.Compiler.Tokenization.FSharpTokenTriggerClass MatchBraces +FSharp.Compiler.Tokenization.FSharpTokenTriggerClass: FSharp.Compiler.Tokenization.FSharpTokenTriggerClass MemberSelect +FSharp.Compiler.Tokenization.FSharpTokenTriggerClass: FSharp.Compiler.Tokenization.FSharpTokenTriggerClass MethodTip +FSharp.Compiler.Tokenization.FSharpTokenTriggerClass: FSharp.Compiler.Tokenization.FSharpTokenTriggerClass None +FSharp.Compiler.Tokenization.FSharpTokenTriggerClass: FSharp.Compiler.Tokenization.FSharpTokenTriggerClass ParamEnd +FSharp.Compiler.Tokenization.FSharpTokenTriggerClass: FSharp.Compiler.Tokenization.FSharpTokenTriggerClass ParamNext +FSharp.Compiler.Tokenization.FSharpTokenTriggerClass: FSharp.Compiler.Tokenization.FSharpTokenTriggerClass ParamStart +FSharp.Compiler.Tokenization.FSharpTokenTriggerClass: Int32 value__ +FSharp.Compiler.Tokenization.FSharpTokenizerColorState +FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState CamlOnly +FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState Comment +FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState EndLineThenSkip +FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState EndLineThenToken +FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState IfDefSkip +FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState InitialState +FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState SingleLineComment +FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState String +FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState StringInComment +FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState Token +FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState TripleQuoteString +FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState TripleQuoteStringInComment +FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState VerbatimString +FSharp.Compiler.Tokenization.FSharpTokenizerColorState: FSharp.Compiler.Tokenization.FSharpTokenizerColorState VerbatimStringInComment +FSharp.Compiler.Tokenization.FSharpTokenizerColorState: Int32 value__ +FSharp.Compiler.Tokenization.FSharpTokenizerLexState +FSharp.Compiler.Tokenization.FSharpTokenizerLexState: Boolean Equals(FSharp.Compiler.Tokenization.FSharpTokenizerLexState) +FSharp.Compiler.Tokenization.FSharpTokenizerLexState: Boolean Equals(System.Object) +FSharp.Compiler.Tokenization.FSharpTokenizerLexState: FSharp.Compiler.Tokenization.FSharpTokenizerLexState Initial +FSharp.Compiler.Tokenization.FSharpTokenizerLexState: FSharp.Compiler.Tokenization.FSharpTokenizerLexState get_Initial() +FSharp.Compiler.Tokenization.FSharpTokenizerLexState: Int32 GetHashCode() +FSharp.Compiler.Tokenization.FSharpTokenizerLexState: Int64 OtherBits +FSharp.Compiler.Tokenization.FSharpTokenizerLexState: Int64 PosBits +FSharp.Compiler.Tokenization.FSharpTokenizerLexState: Int64 get_OtherBits() +FSharp.Compiler.Tokenization.FSharpTokenizerLexState: Int64 get_PosBits() +FSharp.Compiler.Tokenization.FSharpTokenizerLexState: System.String ToString() +FSharp.Compiler.Tokenization.FSharpTokenizerLexState: Void .ctor(Int64, Int64) +FSharp.Compiler.Xml.PreXmlDoc +FSharp.Compiler.Xml.PreXmlDoc: Boolean Equals(FSharp.Compiler.Xml.PreXmlDoc) +FSharp.Compiler.Xml.PreXmlDoc: Boolean Equals(System.Object) +FSharp.Compiler.Xml.PreXmlDoc: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +FSharp.Compiler.Xml.PreXmlDoc: FSharp.Compiler.Xml.PreXmlDoc Create(System.String[], FSharp.Compiler.Text.Range) +FSharp.Compiler.Xml.PreXmlDoc: FSharp.Compiler.Xml.PreXmlDoc Empty +FSharp.Compiler.Xml.PreXmlDoc: FSharp.Compiler.Xml.PreXmlDoc Merge(FSharp.Compiler.Xml.PreXmlDoc, FSharp.Compiler.Xml.PreXmlDoc) +FSharp.Compiler.Xml.PreXmlDoc: FSharp.Compiler.Xml.PreXmlDoc get_Empty() +FSharp.Compiler.Xml.PreXmlDoc: FSharp.Compiler.Xml.XmlDoc ToXmlDoc(Boolean, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[System.String]]) +FSharp.Compiler.Xml.PreXmlDoc: Int32 GetHashCode() +FSharp.Compiler.Xml.PreXmlDoc: Int32 GetHashCode(System.Collections.IEqualityComparer) +FSharp.Compiler.Xml.PreXmlDoc: System.String ToString() +FSharp.Compiler.Xml.XmlDoc +FSharp.Compiler.Xml.XmlDoc: Boolean IsEmpty +FSharp.Compiler.Xml.XmlDoc: Boolean NonEmpty +FSharp.Compiler.Xml.XmlDoc: Boolean get_IsEmpty() +FSharp.Compiler.Xml.XmlDoc: Boolean get_NonEmpty() +FSharp.Compiler.Xml.XmlDoc: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Xml.XmlDoc: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Xml.XmlDoc: FSharp.Compiler.Xml.XmlDoc Empty +FSharp.Compiler.Xml.XmlDoc: FSharp.Compiler.Xml.XmlDoc Merge(FSharp.Compiler.Xml.XmlDoc, FSharp.Compiler.Xml.XmlDoc) +FSharp.Compiler.Xml.XmlDoc: FSharp.Compiler.Xml.XmlDoc get_Empty() +FSharp.Compiler.Xml.XmlDoc: System.String GetXmlText() +FSharp.Compiler.Xml.XmlDoc: System.String[] GetElaboratedXmlLines() +FSharp.Compiler.Xml.XmlDoc: System.String[] UnprocessedLines +FSharp.Compiler.Xml.XmlDoc: System.String[] get_UnprocessedLines() +FSharp.Compiler.Xml.XmlDoc: Void .ctor(System.String[], FSharp.Compiler.Text.Range)" SurfaceArea.verify expected "netstandard" (System.IO.Path.Combine(__SOURCE_DIRECTORY__,__SOURCE_FILE__)) diff --git a/tests/FSharp.Compiler.UnitTests/AssemblySigningAttributes.fs b/tests/FSharp.Compiler.UnitTests/AssemblySigningAttributes.fs new file mode 100644 index 00000000000..450c3b771de --- /dev/null +++ b/tests/FSharp.Compiler.UnitTests/AssemblySigningAttributes.fs @@ -0,0 +1,88 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.UnitTests + +open Xunit +open FSharp.Test.Utilities.Compiler +open FSharp.Test.Utilities.Xunit.Attributes +open FSharp.Test.Utilities + +module AssemblySigning = + +#if !NETCOREAPP + [] +#endif + let ``--keycontainer:name DESKTOP`` () = + FSharp """ +module SignMe + +open System +open System.Reflection + + """ + |> withOptions ["--keycontainer:myContainer"] + |> compile + |> shouldFail + |> withWarningCode 0075 + |> withDiagnosticMessageMatches "The command-line option '--keycontainer' has been deprecated. Use '--keyfile' instead." + |> ignore + +#if NETCOREAPP + [] +#endif + let ``--keycontainer:name NETCOREAPP`` () = + FSharp """ +module SignMe + +open System +open System.Reflection + + """ + |> withOptions ["--keycontainer:myContainer"] + |> compile + |> shouldFail + |> withErrorCode 3393 + |> withDiagnosticMessageMatches "Key container signing is not supported on this platform." + |> ignore + + //Expects: warning FS3392: The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. +#if !NETCOREAPP + [] +#endif + let ``AssemblyKeyNameAttribute DESKTOP`` () = + FSharp """ +module SignMe + +open System +open System.Reflection + +[] +do () + """ + |> asFs + |> compile + |> shouldFail + |> withWarningCode 3392 + |> withDiagnosticMessageMatches "The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead." + |> ignore + + //Expects: warning FS3392: The 'AssemblyKeyNameAttribute' has been deprecated. Use 'AssemblyKeyFileAttribute' instead. +#if NETCOREAPP + [] +#endif + let ``AssemblyKeyNameAttribute NETCOREAPP`` () = + FSharp """ +module SignMe + +open System +open System.Reflection + +[] +do () + """ + |> asFs + |> compile + |> shouldFail + |> withErrorCode 2014 + |> withDiagnosticMessageMatches "A call to StrongNameGetPublicKey failed" + |> ignore diff --git a/tests/FSharp.Compiler.UnitTests/BuildGraphTests.fs b/tests/FSharp.Compiler.UnitTests/BuildGraphTests.fs new file mode 100644 index 00000000000..e46d4e88f4f --- /dev/null +++ b/tests/FSharp.Compiler.UnitTests/BuildGraphTests.fs @@ -0,0 +1,273 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. +namespace FSharp.Compiler.UnitTests + +open System +open System.Threading +open System.Runtime.CompilerServices +open Xunit +open FSharp.Test.Utilities +open FSharp.Compiler.BuildGraph +open Internal.Utilities.Library + +module BuildGraphTests = + + [] + let private createNode () = + let o = obj () + GraphNode(node { + Assert.shouldBeTrue (o <> null) + return 1 + }), WeakReference(o) + + [] + let ``Intialization of graph node should not have a computed value``() = + let node = GraphNode(node { return 1 }) + Assert.shouldBeTrue(node.TryPeekValue().IsNone) + Assert.shouldBeFalse(node.HasValue) + + [] + let ``Two requests to get a value asynchronously should be successful``() = + let resetEvent = new ManualResetEvent(false) + let resetEventInAsync = new ManualResetEvent(false) + + let graphNode = + GraphNode(node { + resetEventInAsync.Set() |> ignore + let! _ = NodeCode.AwaitWaitHandle_ForTesting(resetEvent) + return 1 + }) + + let task1 = + node { + let! _ = graphNode.GetOrComputeValue() + () + } |> NodeCode.StartAsTask_ForTesting + + let task2 = + node { + let! _ = graphNode.GetOrComputeValue() + () + } |> NodeCode.StartAsTask_ForTesting + + resetEventInAsync.WaitOne() |> ignore + resetEvent.Set() |> ignore + try + task1.Wait(1000) |> ignore + task2.Wait() |> ignore + with + | :? TimeoutException -> reraise() + | _ -> () + + [] + let ``Many requests to get a value asynchronously should only evaluate the computation once``() = + let requests = 10000 + let mutable computationCount = 0 + + let graphNode = + GraphNode(node { + computationCount <- computationCount + 1 + return 1 + }) + + let work = Async.Parallel(Array.init requests (fun _ -> graphNode.GetOrComputeValue() |> Async.AwaitNodeCode)) + + Async.RunSynchronously(work) + |> ignore + + Assert.shouldBe 1 computationCount + + [] + let ``Many requests to get a value asynchronously should get the correct value``() = + let requests = 10000 + + let graphNode = GraphNode(node { return 1 }) + + let work = Async.Parallel(Array.init requests (fun _ -> graphNode.GetOrComputeValue() |> Async.AwaitNodeCode)) + + let result = Async.RunSynchronously(work) + + Assert.shouldNotBeEmpty result + Assert.shouldBe requests result.Length + result + |> Seq.iter (Assert.shouldBe 1) + + [] + let ``A request to get a value asynchronously should have its computation cleaned up by the GC``() = + let graphNode, weak = createNode () + + GC.Collect(2, GCCollectionMode.Forced, true) + + Assert.shouldBeTrue weak.IsAlive + + NodeCode.RunImmediateWithoutCancellation(graphNode.GetOrComputeValue()) + |> ignore + + GC.Collect(2, GCCollectionMode.Forced, true) + + Assert.shouldBeFalse weak.IsAlive + + [] + let ``Many requests to get a value asynchronously should have its computation cleaned up by the GC``() = + let requests = 10000 + + let graphNode, weak = createNode () + + GC.Collect(2, GCCollectionMode.Forced, true) + + Assert.shouldBeTrue weak.IsAlive + + Async.RunSynchronously(Async.Parallel(Array.init requests (fun _ -> graphNode.GetOrComputeValue() |> Async.AwaitNodeCode))) + |> ignore + + GC.Collect(2, GCCollectionMode.Forced, true) + + Assert.shouldBeFalse weak.IsAlive + + [] + let ``A request can cancel``() = + let graphNode = + GraphNode(node { + return 1 + }) + + use cts = new CancellationTokenSource() + + let work = + node { + cts.Cancel() + return! graphNode.GetOrComputeValue() + } + + let ex = + try + NodeCode.RunImmediate(work, ct = cts.Token) + |> ignore + failwith "Should have canceled" + with + | :? OperationCanceledException as ex -> + ex + + Assert.shouldBeTrue(ex <> null) + + [] + let ``A request can cancel 2``() = + let resetEvent = new ManualResetEvent(false) + + let graphNode = + GraphNode(node { + let! _ = NodeCode.AwaitWaitHandle_ForTesting(resetEvent) + return 1 + }) + + use cts = new CancellationTokenSource() + + let task = + node { + cts.Cancel() + resetEvent.Set() |> ignore + } + |> NodeCode.StartAsTask_ForTesting + + let ex = + try + NodeCode.RunImmediate(graphNode.GetOrComputeValue(), ct = cts.Token) + |> ignore + failwith "Should have canceled" + with + | :? OperationCanceledException as ex -> + ex + + Assert.shouldBeTrue(ex <> null) + try task.Wait(1000) |> ignore with | :? TimeoutException -> reraise() | _ -> () + + [] + let ``Many requests to get a value asynchronously might evaluate the computation more than once even when some requests get canceled``() = + let requests = 10000 + let resetEvent = new ManualResetEvent(false) + let mutable computationCountBeforeSleep = 0 + let mutable computationCount = 0 + + let graphNode = + GraphNode(node { + computationCountBeforeSleep <- computationCountBeforeSleep + 1 + let! _ = NodeCode.AwaitWaitHandle_ForTesting(resetEvent) + computationCount <- computationCount + 1 + return 1 + }) + + use cts = new CancellationTokenSource() + + let work = + node { + let! _ = graphNode.GetOrComputeValue() + () + } + + let tasks = ResizeArray() + + for i = 0 to requests - 1 do + if i % 10 = 0 then + NodeCode.StartAsTask_ForTesting(work, ct = cts.Token) + |> tasks.Add + else + NodeCode.StartAsTask_ForTesting(work) + |> tasks.Add + + cts.Cancel() + resetEvent.Set() |> ignore + NodeCode.RunImmediateWithoutCancellation(work) + |> ignore + + Assert.shouldBeTrue cts.IsCancellationRequested + Assert.shouldBeTrue(computationCountBeforeSleep > 0) + Assert.shouldBeTrue(computationCount >= 0) + + tasks + |> Seq.iter (fun x -> + try x.Wait(1000) |> ignore with | :? TimeoutException -> reraise() | _ -> ()) + + [] + let ``No-RetryCompute - Many requests to get a value asynchronously should only evaluate the computation once even when some requests get canceled``() = + let requests = 10000 + let resetEvent = new ManualResetEvent(false) + let mutable computationCountBeforeSleep = 0 + let mutable computationCount = 0 + + let graphNode = + GraphNode(false, node { + computationCountBeforeSleep <- computationCountBeforeSleep + 1 + let! _ = NodeCode.AwaitWaitHandle_ForTesting(resetEvent) + computationCount <- computationCount + 1 + return 1 + }) + + use cts = new CancellationTokenSource() + + let work = + node { + let! _ = graphNode.GetOrComputeValue() + () + } + + let tasks = ResizeArray() + + for i = 0 to requests - 1 do + if i % 10 = 0 then + NodeCode.StartAsTask_ForTesting(work, ct = cts.Token) + |> tasks.Add + else + NodeCode.StartAsTask_ForTesting(work) + |> tasks.Add + + cts.Cancel() + resetEvent.Set() |> ignore + NodeCode.RunImmediateWithoutCancellation(work) + |> ignore + + Assert.shouldBeTrue cts.IsCancellationRequested + Assert.shouldBe 1 computationCountBeforeSleep + Assert.shouldBe 1 computationCount + + tasks + |> Seq.iter (fun x -> + try x.Wait(1000) |> ignore with | :? TimeoutException -> reraise() | _ -> ()) diff --git a/tests/FSharp.Compiler.UnitTests/ByteMemoryTests.fs b/tests/FSharp.Compiler.UnitTests/ByteMemoryTests.fs index d9e8ac0617f..70653ed68fb 100644 --- a/tests/FSharp.Compiler.UnitTests/ByteMemoryTests.fs +++ b/tests/FSharp.Compiler.UnitTests/ByteMemoryTests.fs @@ -6,12 +6,11 @@ open System.Globalization open Xunit open FSharp.Test.Utilities - module ByteMemoryTests = - open FSharp.Compiler.AbstractIL.Internal + open FSharp.Compiler.IO [] let ``ByteMemory.CreateMemoryMappedFile succeeds with byte length of zero``() = let memory = ByteMemory.Empty.AsReadOnly() let newMemory = ByteStorage.FromByteMemoryAndCopy(memory, useBackingMemoryMappedFile = true).GetByteMemory() - Assert.shouldBe(0, newMemory.Length) \ No newline at end of file + Assert.shouldBe(0, newMemory.Length) diff --git a/tests/FSharp.Compiler.UnitTests/CompilerTestHelpers.fs b/tests/FSharp.Compiler.UnitTests/CompilerTestHelpers.fs index 1ac573a84e2..bc4b3f9f0bc 100644 --- a/tests/FSharp.Compiler.UnitTests/CompilerTestHelpers.fs +++ b/tests/FSharp.Compiler.UnitTests/CompilerTestHelpers.fs @@ -6,5 +6,4 @@ module CompilerTestHelpers = let (|Warning|_|) (exn: System.Exception) = match exn with | :? FSharp.Compiler.ErrorLogger.Error as e -> let n,d = e.Data0 in Some (n,d) - | :? FSharp.Compiler.ErrorLogger.NumberedError as e -> let n,d = e.Data0 in Some (n,d) | _ -> None diff --git a/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj b/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj index 996ee46b4a3..c3d3ca35aec 100644 --- a/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj +++ b/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj @@ -3,13 +3,13 @@ - net472;netcoreapp3.1 - netcoreapp3.1 + net472;net5.0 + net5.0 Library true $(DefineConstants);ASSUME_PREVIEW_FSHARP_CORE xunit - $(NoWarn);3186;1104 + $(NoWarn);57;3186;1104 @@ -24,8 +24,9 @@ + - + CompilerService\FsUnit.fs @@ -79,7 +80,7 @@ - + diff --git a/tests/FSharp.Compiler.UnitTests/HashIfExpression.fs b/tests/FSharp.Compiler.UnitTests/HashIfExpression.fs index 705ce465b1d..201c3291902 100644 --- a/tests/FSharp.Compiler.UnitTests/HashIfExpression.fs +++ b/tests/FSharp.Compiler.UnitTests/HashIfExpression.fs @@ -12,12 +12,13 @@ open Internal.Utilities open Internal.Utilities.Text.Lexing open FSharp.Compiler +open FSharp.Compiler.Diagnostics open FSharp.Compiler.Lexer open FSharp.Compiler.Lexhelp open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Features open FSharp.Compiler.ParseHelpers -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax type public HashIfExpression() = let preludes = [|"#if "; "#elif "|] @@ -55,7 +56,7 @@ type public HashIfExpression() = let errorLogger = { new ErrorLogger("TestErrorLogger") with - member x.DiagnosticSink(e, isError) = if isError then errors.Add e else warnings.Add e + member x.DiagnosticSink(e, sev) = if sev = FSharpDiagnosticSeverity.Error then errors.Add e else warnings.Add e member x.ErrorCount = errors.Count } @@ -69,7 +70,7 @@ type public HashIfExpression() = let parser (s : string) = let isFeatureSupported (_featureId:LanguageFeature) = true - let lexbuf = LexBuffer.FromChars (isFeatureSupported, s.ToCharArray ()) + let lexbuf = LexBuffer.FromChars (true, isFeatureSupported, s.ToCharArray ()) lexbuf.StartPos <- startPos lexbuf.EndPos <- startPos let tokenStream = PPLexer.tokenstream args diff --git a/tests/FSharp.Compiler.UnitTests/ManglingNameOfProvidedTypes.fs b/tests/FSharp.Compiler.UnitTests/ManglingNameOfProvidedTypes.fs index 675a8cda713..3060590986a 100644 --- a/tests/FSharp.Compiler.UnitTests/ManglingNameOfProvidedTypes.fs +++ b/tests/FSharp.Compiler.UnitTests/ManglingNameOfProvidedTypes.fs @@ -5,8 +5,7 @@ open System open System.Text open Xunit open FSharp.Test.Utilities -open FSharp.Compiler - +open FSharp.Compiler.Syntax type ManglingNamesOfProvidedTypesWithSingleParameter() = diff --git a/tests/FSharp.Compiler.UnitTests/ProductVersion.fs b/tests/FSharp.Compiler.UnitTests/ProductVersion.fs index 9e2f934ef1f..bc91de7a3f4 100644 --- a/tests/FSharp.Compiler.UnitTests/ProductVersion.fs +++ b/tests/FSharp.Compiler.UnitTests/ProductVersion.fs @@ -57,7 +57,7 @@ module ProductVersionTest = productVersion (fun _ -> None) (ILVersionInfo(3us,2us,1us,0us)) |> Assert.shouldBe "3.2.1.0" productVersion (fun _ -> Some "") (ILVersionInfo(3us,2us,1us,0us)) |> Assert.shouldBe "3.2.1.0" - let validValues () = + let internal validValues () = let max = System.UInt16.MaxValue [ "1.2.3.4", ILVersionInfo(1us,2us,3us,4us) "1.0.3.4", ILVersionInfo(1us,0us,3us,4us) @@ -71,7 +71,7 @@ module ProductVersionTest = for (v, expected) in validValues() do v |> productVersionToILVersionInfo |> Assert.shouldBe expected - let invalidValues () = + let internal invalidValues () = [ "1.2.3.4", ILVersionInfo(1us,2us,3us,4us) "1.2.3.4a", ILVersionInfo(1us,2us,3us,4us) "1.2.c3.4", ILVersionInfo(1us,2us,0us,4us) diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj b/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj index 91c24d90293..75d013df43e 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj +++ b/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj @@ -3,8 +3,8 @@ - net472;netcoreapp3.1 - netcoreapp3.1 + net472;net5.0 + net5.0 Library FSharp.Core.UnitTests @@ -35,7 +35,7 @@ - + @@ -74,6 +74,7 @@ + diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/ComparersRegression.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/ComparersRegression.fs index 730458035fb..cb74c489da0 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/ComparersRegression.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/ComparersRegression.fs @@ -1573,19 +1573,19 @@ module ComparersRegression = let toint b = if b then 1 else 0 type EqualityOperations<'a when 'a : equality>() = - member inline __.equals = { new IOperation<'a> with member __.Exec lhs rhs = toint (HashIdentity.Structural.Equals(lhs,rhs)) } - member inline __.equal = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs = rhs) } - member inline __.not_equal = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs <> rhs) } + member inline _.equals = { new IOperation<'a> with member _.Exec lhs rhs = toint (HashIdentity.Structural.Equals(lhs,rhs)) } + member inline _.equal = { new IOperation<'a> with member _.Exec lhs rhs = toint (lhs = rhs) } + member inline _.not_equal = { new IOperation<'a> with member _.Exec lhs rhs = toint (lhs <> rhs) } type ComparisonOperations<'a when 'a : comparison>() = - member inline __.equals = { new IOperation<'a> with member __.Exec lhs rhs = toint (HashIdentity.Structural.Equals(lhs,rhs)) } - member inline __.equal = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs = rhs) } - member inline __.not_equal = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs <> rhs) } - member inline __.compare = { new IOperation<'a> with member __.Exec lhs rhs = ComparisonIdentity.Structural.Compare(lhs,rhs) } - member inline __.less_than = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs < rhs) } - member inline __.less_or_equal = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs <= rhs) } - member inline __.greater_than = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs > rhs) } - member inline __.greater_or_equal = { new IOperation<'a> with member __.Exec lhs rhs = toint (lhs >= rhs) } + member inline _.equals = { new IOperation<'a> with member _.Exec lhs rhs = toint (HashIdentity.Structural.Equals(lhs,rhs)) } + member inline _.equal = { new IOperation<'a> with member _.Exec lhs rhs = toint (lhs = rhs) } + member inline _.not_equal = { new IOperation<'a> with member _.Exec lhs rhs = toint (lhs <> rhs) } + member inline _.compare = { new IOperation<'a> with member _.Exec lhs rhs = ComparisonIdentity.Structural.Compare(lhs,rhs) } + member inline _.less_than = { new IOperation<'a> with member _.Exec lhs rhs = toint (lhs < rhs) } + member inline _.less_or_equal = { new IOperation<'a> with member _.Exec lhs rhs = toint (lhs <= rhs) } + member inline _.greater_than = { new IOperation<'a> with member _.Exec lhs rhs = toint (lhs > rhs) } + member inline _.greater_or_equal = { new IOperation<'a> with member _.Exec lhs rhs = toint (lhs >= rhs) } type NoninlinableEqualityOperations<'a when 'a : equality>() = let operations = @@ -1594,9 +1594,9 @@ module ComparersRegression = | :? EqualityOperations<'a> as operations -> operations | _ -> failwith "" - member __.equals = operations.equals - member __.equal = operations.equal - member __.not_equal = operations.not_equal + member _.equals = operations.equals + member _.equal = operations.equal + member _.not_equal = operations.not_equal type NoninlinableComparisonOperations<'a when 'a : comparison>() = let operations = @@ -1605,14 +1605,14 @@ module ComparersRegression = | :? ComparisonOperations<'a> as operations -> operations | _ -> failwith "" - member __.equals = operations.equals - member __.equal = operations.equal - member __.not_equal = operations.not_equal - member __.compare = operations.compare - member __.less_than = operations.less_than - member __.less_or_equal = operations.less_or_equal - member __.greater_than = operations.greater_than - member __.greater_or_equal = operations.greater_or_equal + member _.equals = operations.equals + member _.equal = operations.equal + member _.not_equal = operations.not_equal + member _.compare = operations.compare + member _.less_than = operations.less_than + member _.less_or_equal = operations.less_or_equal + member _.greater_than = operations.greater_than + member _.greater_or_equal = operations.greater_or_equal type E<'a when 'a : equality>() = static let inlinable = EqualityOperations<'a> () @@ -1631,7 +1631,7 @@ module ComparersRegression = #if !NETSTANDARD1_6 && !NETCOREAPP let create<'a,'b when 'b : equality> name operation (f:IOperation<'a>) (items:array<'a>) = printf """ [] - member __.``%s %s``() = + member _.``%s %s``() = validate (%s) %s """ name operation name operation make_result_set f items None @@ -1753,391 +1753,391 @@ type GeneratedTests () = // -- The following should be generated by running CreateComparersRegression.fsx // ------------------------------------------------------------------------------ [] - member __.``Bools.Collection.Array C.I.equals``() = + member _.``Bools.Collection.Array C.I.equals``() = validate (Bools.Collection.Array) C.I.equals [| 1;0;0;1 |] [] - member __.``Bools.Collection.Array C.I.equal``() = + member _.``Bools.Collection.Array C.I.equal``() = validate (Bools.Collection.Array) C.I.equal [| 1;0;0;1 |] [] - member __.``Bools.Collection.Array C.I.not_equal``() = + member _.``Bools.Collection.Array C.I.not_equal``() = validate (Bools.Collection.Array) C.I.not_equal [| 0;1;1;0 |] [] - member __.``Bools.Collection.Array C.I.compare``() = + member _.``Bools.Collection.Array C.I.compare``() = validate (Bools.Collection.Array) C.I.compare [| 0;1;-1;0 |] [] - member __.``Bools.Collection.Array C.I.less_than``() = + member _.``Bools.Collection.Array C.I.less_than``() = validate (Bools.Collection.Array) C.I.less_than [| 0;0;1;0 |] [] - member __.``Bools.Collection.Array C.I.less_or_equal``() = + member _.``Bools.Collection.Array C.I.less_or_equal``() = validate (Bools.Collection.Array) C.I.less_or_equal [| 1;0;1;1 |] [] - member __.``Bools.Collection.Array C.I.greater_than``() = + member _.``Bools.Collection.Array C.I.greater_than``() = validate (Bools.Collection.Array) C.I.greater_than [| 0;1;0;0 |] [] - member __.``Bools.Collection.Array C.I.greater_or_equal``() = + member _.``Bools.Collection.Array C.I.greater_or_equal``() = validate (Bools.Collection.Array) C.I.greater_or_equal [| 1;1;0;1 |] [] - member __.``Bools.Collection.Array C.N.equals``() = + member _.``Bools.Collection.Array C.N.equals``() = validate (Bools.Collection.Array) C.N.equals [| 1;0;0;1 |] [] - member __.``Bools.Collection.Array C.N.equal``() = + member _.``Bools.Collection.Array C.N.equal``() = validate (Bools.Collection.Array) C.N.equal [| 1;0;0;1 |] [] - member __.``Bools.Collection.Array C.N.not_equal``() = + member _.``Bools.Collection.Array C.N.not_equal``() = validate (Bools.Collection.Array) C.N.not_equal [| 0;1;1;0 |] [] - member __.``Bools.Collection.Array C.N.compare``() = + member _.``Bools.Collection.Array C.N.compare``() = validate (Bools.Collection.Array) C.N.compare [| 0;1;-1;0 |] [] - member __.``Bools.Collection.Array C.N.less_than``() = + member _.``Bools.Collection.Array C.N.less_than``() = validate (Bools.Collection.Array) C.N.less_than [| 0;0;1;0 |] [] - member __.``Bools.Collection.Array C.N.less_or_equal``() = + member _.``Bools.Collection.Array C.N.less_or_equal``() = validate (Bools.Collection.Array) C.N.less_or_equal [| 1;0;1;1 |] [] - member __.``Bools.Collection.Array C.N.greater_than``() = + member _.``Bools.Collection.Array C.N.greater_than``() = validate (Bools.Collection.Array) C.N.greater_than [| 0;1;0;0 |] [] - member __.``Bools.Collection.Array C.N.greater_or_equal``() = + member _.``Bools.Collection.Array C.N.greater_or_equal``() = validate (Bools.Collection.Array) C.N.greater_or_equal [| 1;1;0;1 |] [] - member __.``Bools.Collection.OptionArray C.I.equals``() = + member _.``Bools.Collection.OptionArray C.I.equals``() = validate (Bools.Collection.OptionArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``Bools.Collection.OptionArray C.I.equal``() = + member _.``Bools.Collection.OptionArray C.I.equal``() = validate (Bools.Collection.OptionArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``Bools.Collection.OptionArray C.I.not_equal``() = + member _.``Bools.Collection.OptionArray C.I.not_equal``() = validate (Bools.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``Bools.Collection.OptionArray C.I.compare``() = + member _.``Bools.Collection.OptionArray C.I.compare``() = validate (Bools.Collection.OptionArray) C.I.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member __.``Bools.Collection.OptionArray C.I.less_than``() = + member _.``Bools.Collection.OptionArray C.I.less_than``() = validate (Bools.Collection.OptionArray) C.I.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member __.``Bools.Collection.OptionArray C.I.less_or_equal``() = + member _.``Bools.Collection.OptionArray C.I.less_or_equal``() = validate (Bools.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member __.``Bools.Collection.OptionArray C.I.greater_than``() = + member _.``Bools.Collection.OptionArray C.I.greater_than``() = validate (Bools.Collection.OptionArray) C.I.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member __.``Bools.Collection.OptionArray C.I.greater_or_equal``() = + member _.``Bools.Collection.OptionArray C.I.greater_or_equal``() = validate (Bools.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member __.``Bools.Collection.OptionArray C.N.equals``() = + member _.``Bools.Collection.OptionArray C.N.equals``() = validate (Bools.Collection.OptionArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``Bools.Collection.OptionArray C.N.equal``() = + member _.``Bools.Collection.OptionArray C.N.equal``() = validate (Bools.Collection.OptionArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``Bools.Collection.OptionArray C.N.not_equal``() = + member _.``Bools.Collection.OptionArray C.N.not_equal``() = validate (Bools.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``Bools.Collection.OptionArray C.N.compare``() = + member _.``Bools.Collection.OptionArray C.N.compare``() = validate (Bools.Collection.OptionArray) C.N.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member __.``Bools.Collection.OptionArray C.N.less_than``() = + member _.``Bools.Collection.OptionArray C.N.less_than``() = validate (Bools.Collection.OptionArray) C.N.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member __.``Bools.Collection.OptionArray C.N.less_or_equal``() = + member _.``Bools.Collection.OptionArray C.N.less_or_equal``() = validate (Bools.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member __.``Bools.Collection.OptionArray C.N.greater_than``() = + member _.``Bools.Collection.OptionArray C.N.greater_than``() = validate (Bools.Collection.OptionArray) C.N.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member __.``Bools.Collection.OptionArray C.N.greater_or_equal``() = + member _.``Bools.Collection.OptionArray C.N.greater_or_equal``() = validate (Bools.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member __.``Bools.Collection.RefArray C.I.equals``() = + member _.``Bools.Collection.RefArray C.I.equals``() = validate (Bools.Collection.RefArray) C.I.equals [| 1;0;0;1 |] [] - member __.``Bools.Collection.RefArray C.I.equal``() = + member _.``Bools.Collection.RefArray C.I.equal``() = validate (Bools.Collection.RefArray) C.I.equal [| 1;0;0;1 |] [] - member __.``Bools.Collection.RefArray C.I.not_equal``() = + member _.``Bools.Collection.RefArray C.I.not_equal``() = validate (Bools.Collection.RefArray) C.I.not_equal [| 0;1;1;0 |] [] - member __.``Bools.Collection.RefArray C.I.compare``() = + member _.``Bools.Collection.RefArray C.I.compare``() = validate (Bools.Collection.RefArray) C.I.compare [| 0;1;-1;0 |] [] - member __.``Bools.Collection.RefArray C.I.less_than``() = + member _.``Bools.Collection.RefArray C.I.less_than``() = validate (Bools.Collection.RefArray) C.I.less_than [| 0;0;1;0 |] [] - member __.``Bools.Collection.RefArray C.I.less_or_equal``() = + member _.``Bools.Collection.RefArray C.I.less_or_equal``() = validate (Bools.Collection.RefArray) C.I.less_or_equal [| 1;0;1;1 |] [] - member __.``Bools.Collection.RefArray C.I.greater_than``() = + member _.``Bools.Collection.RefArray C.I.greater_than``() = validate (Bools.Collection.RefArray) C.I.greater_than [| 0;1;0;0 |] [] - member __.``Bools.Collection.RefArray C.I.greater_or_equal``() = + member _.``Bools.Collection.RefArray C.I.greater_or_equal``() = validate (Bools.Collection.RefArray) C.I.greater_or_equal [| 1;1;0;1 |] [] - member __.``Bools.Collection.RefArray C.N.equals``() = + member _.``Bools.Collection.RefArray C.N.equals``() = validate (Bools.Collection.RefArray) C.N.equals [| 1;0;0;1 |] [] - member __.``Bools.Collection.RefArray C.N.equal``() = + member _.``Bools.Collection.RefArray C.N.equal``() = validate (Bools.Collection.RefArray) C.N.equal [| 1;0;0;1 |] [] - member __.``Bools.Collection.RefArray C.N.not_equal``() = + member _.``Bools.Collection.RefArray C.N.not_equal``() = validate (Bools.Collection.RefArray) C.N.not_equal [| 0;1;1;0 |] [] - member __.``Bools.Collection.RefArray C.N.compare``() = + member _.``Bools.Collection.RefArray C.N.compare``() = validate (Bools.Collection.RefArray) C.N.compare [| 0;1;-1;0 |] [] - member __.``Bools.Collection.RefArray C.N.less_than``() = + member _.``Bools.Collection.RefArray C.N.less_than``() = validate (Bools.Collection.RefArray) C.N.less_than [| 0;0;1;0 |] [] - member __.``Bools.Collection.RefArray C.N.less_or_equal``() = + member _.``Bools.Collection.RefArray C.N.less_or_equal``() = validate (Bools.Collection.RefArray) C.N.less_or_equal [| 1;0;1;1 |] [] - member __.``Bools.Collection.RefArray C.N.greater_than``() = + member _.``Bools.Collection.RefArray C.N.greater_than``() = validate (Bools.Collection.RefArray) C.N.greater_than [| 0;1;0;0 |] [] - member __.``Bools.Collection.RefArray C.N.greater_or_equal``() = + member _.``Bools.Collection.RefArray C.N.greater_or_equal``() = validate (Bools.Collection.RefArray) C.N.greater_or_equal [| 1;1;0;1 |] [] - member __.``Bools.Collection.RefWrapArray C.I.equals``() = + member _.``Bools.Collection.RefWrapArray C.I.equals``() = validate (Bools.Collection.RefWrapArray) C.I.equals [| 1;0;0;1 |] [] - member __.``Bools.Collection.RefWrapArray C.I.equal``() = + member _.``Bools.Collection.RefWrapArray C.I.equal``() = validate (Bools.Collection.RefWrapArray) C.I.equal [| 1;0;0;1 |] [] - member __.``Bools.Collection.RefWrapArray C.I.not_equal``() = + member _.``Bools.Collection.RefWrapArray C.I.not_equal``() = validate (Bools.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;0 |] [] - member __.``Bools.Collection.RefWrapArray C.I.compare``() = + member _.``Bools.Collection.RefWrapArray C.I.compare``() = validate (Bools.Collection.RefWrapArray) C.I.compare [| 0;1;-1;0 |] [] - member __.``Bools.Collection.RefWrapArray C.I.less_than``() = + member _.``Bools.Collection.RefWrapArray C.I.less_than``() = validate (Bools.Collection.RefWrapArray) C.I.less_than [| 0;0;1;0 |] [] - member __.``Bools.Collection.RefWrapArray C.I.less_or_equal``() = + member _.``Bools.Collection.RefWrapArray C.I.less_or_equal``() = validate (Bools.Collection.RefWrapArray) C.I.less_or_equal [| 1;0;1;1 |] [] - member __.``Bools.Collection.RefWrapArray C.I.greater_than``() = + member _.``Bools.Collection.RefWrapArray C.I.greater_than``() = validate (Bools.Collection.RefWrapArray) C.I.greater_than [| 0;1;0;0 |] [] - member __.``Bools.Collection.RefWrapArray C.I.greater_or_equal``() = + member _.``Bools.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Bools.Collection.RefWrapArray) C.I.greater_or_equal [| 1;1;0;1 |] [] - member __.``Bools.Collection.RefWrapArray C.N.equals``() = + member _.``Bools.Collection.RefWrapArray C.N.equals``() = validate (Bools.Collection.RefWrapArray) C.N.equals [| 1;0;0;1 |] [] - member __.``Bools.Collection.RefWrapArray C.N.equal``() = + member _.``Bools.Collection.RefWrapArray C.N.equal``() = validate (Bools.Collection.RefWrapArray) C.N.equal [| 1;0;0;1 |] [] - member __.``Bools.Collection.RefWrapArray C.N.not_equal``() = + member _.``Bools.Collection.RefWrapArray C.N.not_equal``() = validate (Bools.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;0 |] [] - member __.``Bools.Collection.RefWrapArray C.N.compare``() = + member _.``Bools.Collection.RefWrapArray C.N.compare``() = validate (Bools.Collection.RefWrapArray) C.N.compare [| 0;1;-1;0 |] [] - member __.``Bools.Collection.RefWrapArray C.N.less_than``() = + member _.``Bools.Collection.RefWrapArray C.N.less_than``() = validate (Bools.Collection.RefWrapArray) C.N.less_than [| 0;0;1;0 |] [] - member __.``Bools.Collection.RefWrapArray C.N.less_or_equal``() = + member _.``Bools.Collection.RefWrapArray C.N.less_or_equal``() = validate (Bools.Collection.RefWrapArray) C.N.less_or_equal [| 1;0;1;1 |] [] - member __.``Bools.Collection.RefWrapArray C.N.greater_than``() = + member _.``Bools.Collection.RefWrapArray C.N.greater_than``() = validate (Bools.Collection.RefWrapArray) C.N.greater_than [| 0;1;0;0 |] [] - member __.``Bools.Collection.RefWrapArray C.N.greater_or_equal``() = + member _.``Bools.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Bools.Collection.RefWrapArray) C.N.greater_or_equal [| 1;1;0;1 |] [] - member __.``Bools.Collection.UnionArray C.I.equals``() = + member _.``Bools.Collection.UnionArray C.I.equals``() = validate (Bools.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -2147,7 +2147,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionArray C.I.equal``() = + member _.``Bools.Collection.UnionArray C.I.equal``() = validate (Bools.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -2157,7 +2157,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionArray C.I.not_equal``() = + member _.``Bools.Collection.UnionArray C.I.not_equal``() = validate (Bools.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -2167,7 +2167,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionArray C.I.compare``() = + member _.``Bools.Collection.UnionArray C.I.compare``() = validate (Bools.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1; -1;-1;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;0;-1;3;2;1; @@ -2177,7 +2177,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionArray C.I.less_than``() = + member _.``Bools.Collection.UnionArray C.I.less_than``() = validate (Bools.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0; @@ -2187,7 +2187,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionArray C.I.less_or_equal``() = + member _.``Bools.Collection.UnionArray C.I.less_or_equal``() = validate (Bools.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; @@ -2197,7 +2197,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionArray C.I.greater_than``() = + member _.``Bools.Collection.UnionArray C.I.greater_than``() = validate (Bools.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; @@ -2207,7 +2207,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionArray C.I.greater_or_equal``() = + member _.``Bools.Collection.UnionArray C.I.greater_or_equal``() = validate (Bools.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; @@ -2217,7 +2217,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionArray C.N.equals``() = + member _.``Bools.Collection.UnionArray C.N.equals``() = validate (Bools.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -2227,7 +2227,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionArray C.N.equal``() = + member _.``Bools.Collection.UnionArray C.N.equal``() = validate (Bools.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -2237,7 +2237,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionArray C.N.not_equal``() = + member _.``Bools.Collection.UnionArray C.N.not_equal``() = validate (Bools.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -2247,7 +2247,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionArray C.N.compare``() = + member _.``Bools.Collection.UnionArray C.N.compare``() = validate (Bools.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1; -1;-1;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;0;-1;3;2;1; @@ -2257,7 +2257,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionArray C.N.less_than``() = + member _.``Bools.Collection.UnionArray C.N.less_than``() = validate (Bools.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0; @@ -2267,7 +2267,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionArray C.N.less_or_equal``() = + member _.``Bools.Collection.UnionArray C.N.less_or_equal``() = validate (Bools.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; @@ -2277,7 +2277,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionArray C.N.greater_than``() = + member _.``Bools.Collection.UnionArray C.N.greater_than``() = validate (Bools.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; @@ -2287,7 +2287,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionArray C.N.greater_or_equal``() = + member _.``Bools.Collection.UnionArray C.N.greater_or_equal``() = validate (Bools.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; @@ -2297,7 +2297,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionWrapArray C.I.equals``() = + member _.``Bools.Collection.UnionWrapArray C.I.equals``() = validate (Bools.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -2307,7 +2307,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionWrapArray C.I.equal``() = + member _.``Bools.Collection.UnionWrapArray C.I.equal``() = validate (Bools.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -2317,7 +2317,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionWrapArray C.I.not_equal``() = + member _.``Bools.Collection.UnionWrapArray C.I.not_equal``() = validate (Bools.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -2327,7 +2327,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionWrapArray C.I.compare``() = + member _.``Bools.Collection.UnionWrapArray C.I.compare``() = validate (Bools.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1; -1;-1;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;0;-1;3;2;1; @@ -2337,7 +2337,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionWrapArray C.I.less_than``() = + member _.``Bools.Collection.UnionWrapArray C.I.less_than``() = validate (Bools.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0; @@ -2347,7 +2347,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionWrapArray C.I.less_or_equal``() = + member _.``Bools.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Bools.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; @@ -2357,7 +2357,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionWrapArray C.I.greater_than``() = + member _.``Bools.Collection.UnionWrapArray C.I.greater_than``() = validate (Bools.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; @@ -2367,7 +2367,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionWrapArray C.I.greater_or_equal``() = + member _.``Bools.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Bools.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; @@ -2377,7 +2377,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionWrapArray C.N.equals``() = + member _.``Bools.Collection.UnionWrapArray C.N.equals``() = validate (Bools.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -2387,7 +2387,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionWrapArray C.N.equal``() = + member _.``Bools.Collection.UnionWrapArray C.N.equal``() = validate (Bools.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -2397,7 +2397,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionWrapArray C.N.not_equal``() = + member _.``Bools.Collection.UnionWrapArray C.N.not_equal``() = validate (Bools.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -2407,7 +2407,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionWrapArray C.N.compare``() = + member _.``Bools.Collection.UnionWrapArray C.N.compare``() = validate (Bools.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;1;-1;-1; -1;-1;3;2;1;0;-1;-2;-3;3;2;1;1;-1;-2;-3;3;2;1;1;0;-1;-2;3;2;1;1;1;-1;-2;3;2;1;2;1;0;-1;3;2;1; @@ -2417,7 +2417,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionWrapArray C.N.less_than``() = + member _.``Bools.Collection.UnionWrapArray C.N.less_than``() = validate (Bools.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1; 1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0; @@ -2427,7 +2427,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionWrapArray C.N.less_or_equal``() = + member _.``Bools.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Bools.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1; 1;1;0;0;0;1;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0; @@ -2437,7 +2437,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionWrapArray C.N.greater_than``() = + member _.``Bools.Collection.UnionWrapArray C.N.greater_than``() = validate (Bools.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0; 0;0;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; @@ -2447,7 +2447,7 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.UnionWrapArray C.N.greater_or_equal``() = + member _.``Bools.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Bools.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0; 0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1; @@ -2457,631 +2457,631 @@ type GeneratedTests () = |] [] - member __.``Bools.Collection.ValueArray C.I.equals``() = + member _.``Bools.Collection.ValueArray C.I.equals``() = validate (Bools.Collection.ValueArray) C.I.equals [| 1;0;0;1 |] [] - member __.``Bools.Collection.ValueArray C.I.equal``() = + member _.``Bools.Collection.ValueArray C.I.equal``() = validate (Bools.Collection.ValueArray) C.I.equal [| 1;0;0;1 |] [] - member __.``Bools.Collection.ValueArray C.I.not_equal``() = + member _.``Bools.Collection.ValueArray C.I.not_equal``() = validate (Bools.Collection.ValueArray) C.I.not_equal [| 0;1;1;0 |] [] - member __.``Bools.Collection.ValueArray C.I.compare``() = + member _.``Bools.Collection.ValueArray C.I.compare``() = validate (Bools.Collection.ValueArray) C.I.compare [| 0;1;-1;0 |] [] - member __.``Bools.Collection.ValueArray C.I.less_than``() = + member _.``Bools.Collection.ValueArray C.I.less_than``() = validate (Bools.Collection.ValueArray) C.I.less_than [| 0;0;1;0 |] [] - member __.``Bools.Collection.ValueArray C.I.less_or_equal``() = + member _.``Bools.Collection.ValueArray C.I.less_or_equal``() = validate (Bools.Collection.ValueArray) C.I.less_or_equal [| 1;0;1;1 |] [] - member __.``Bools.Collection.ValueArray C.I.greater_than``() = + member _.``Bools.Collection.ValueArray C.I.greater_than``() = validate (Bools.Collection.ValueArray) C.I.greater_than [| 0;1;0;0 |] [] - member __.``Bools.Collection.ValueArray C.I.greater_or_equal``() = + member _.``Bools.Collection.ValueArray C.I.greater_or_equal``() = validate (Bools.Collection.ValueArray) C.I.greater_or_equal [| 1;1;0;1 |] [] - member __.``Bools.Collection.ValueArray C.N.equals``() = + member _.``Bools.Collection.ValueArray C.N.equals``() = validate (Bools.Collection.ValueArray) C.N.equals [| 1;0;0;1 |] [] - member __.``Bools.Collection.ValueArray C.N.equal``() = + member _.``Bools.Collection.ValueArray C.N.equal``() = validate (Bools.Collection.ValueArray) C.N.equal [| 1;0;0;1 |] [] - member __.``Bools.Collection.ValueArray C.N.not_equal``() = + member _.``Bools.Collection.ValueArray C.N.not_equal``() = validate (Bools.Collection.ValueArray) C.N.not_equal [| 0;1;1;0 |] [] - member __.``Bools.Collection.ValueArray C.N.compare``() = + member _.``Bools.Collection.ValueArray C.N.compare``() = validate (Bools.Collection.ValueArray) C.N.compare [| 0;1;-1;0 |] [] - member __.``Bools.Collection.ValueArray C.N.less_than``() = + member _.``Bools.Collection.ValueArray C.N.less_than``() = validate (Bools.Collection.ValueArray) C.N.less_than [| 0;0;1;0 |] [] - member __.``Bools.Collection.ValueArray C.N.less_or_equal``() = + member _.``Bools.Collection.ValueArray C.N.less_or_equal``() = validate (Bools.Collection.ValueArray) C.N.less_or_equal [| 1;0;1;1 |] [] - member __.``Bools.Collection.ValueArray C.N.greater_than``() = + member _.``Bools.Collection.ValueArray C.N.greater_than``() = validate (Bools.Collection.ValueArray) C.N.greater_than [| 0;1;0;0 |] [] - member __.``Bools.Collection.ValueArray C.N.greater_or_equal``() = + member _.``Bools.Collection.ValueArray C.N.greater_or_equal``() = validate (Bools.Collection.ValueArray) C.N.greater_or_equal [| 1;1;0;1 |] [] - member __.``Bools.Collection.ValueWrapArray C.I.equals``() = + member _.``Bools.Collection.ValueWrapArray C.I.equals``() = validate (Bools.Collection.ValueWrapArray) C.I.equals [| 1;0;0;1 |] [] - member __.``Bools.Collection.ValueWrapArray C.I.equal``() = + member _.``Bools.Collection.ValueWrapArray C.I.equal``() = validate (Bools.Collection.ValueWrapArray) C.I.equal [| 1;0;0;1 |] [] - member __.``Bools.Collection.ValueWrapArray C.I.not_equal``() = + member _.``Bools.Collection.ValueWrapArray C.I.not_equal``() = validate (Bools.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;0 |] [] - member __.``Bools.Collection.ValueWrapArray C.I.compare``() = + member _.``Bools.Collection.ValueWrapArray C.I.compare``() = validate (Bools.Collection.ValueWrapArray) C.I.compare [| 0;1;-1;0 |] [] - member __.``Bools.Collection.ValueWrapArray C.I.less_than``() = + member _.``Bools.Collection.ValueWrapArray C.I.less_than``() = validate (Bools.Collection.ValueWrapArray) C.I.less_than [| 0;0;1;0 |] [] - member __.``Bools.Collection.ValueWrapArray C.I.less_or_equal``() = + member _.``Bools.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Bools.Collection.ValueWrapArray) C.I.less_or_equal [| 1;0;1;1 |] [] - member __.``Bools.Collection.ValueWrapArray C.I.greater_than``() = + member _.``Bools.Collection.ValueWrapArray C.I.greater_than``() = validate (Bools.Collection.ValueWrapArray) C.I.greater_than [| 0;1;0;0 |] [] - member __.``Bools.Collection.ValueWrapArray C.I.greater_or_equal``() = + member _.``Bools.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Bools.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;1;0;1 |] [] - member __.``Bools.Collection.ValueWrapArray C.N.equals``() = + member _.``Bools.Collection.ValueWrapArray C.N.equals``() = validate (Bools.Collection.ValueWrapArray) C.N.equals [| 1;0;0;1 |] [] - member __.``Bools.Collection.ValueWrapArray C.N.equal``() = + member _.``Bools.Collection.ValueWrapArray C.N.equal``() = validate (Bools.Collection.ValueWrapArray) C.N.equal [| 1;0;0;1 |] [] - member __.``Bools.Collection.ValueWrapArray C.N.not_equal``() = + member _.``Bools.Collection.ValueWrapArray C.N.not_equal``() = validate (Bools.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;0 |] [] - member __.``Bools.Collection.ValueWrapArray C.N.compare``() = + member _.``Bools.Collection.ValueWrapArray C.N.compare``() = validate (Bools.Collection.ValueWrapArray) C.N.compare [| 0;1;-1;0 |] [] - member __.``Bools.Collection.ValueWrapArray C.N.less_than``() = + member _.``Bools.Collection.ValueWrapArray C.N.less_than``() = validate (Bools.Collection.ValueWrapArray) C.N.less_than [| 0;0;1;0 |] [] - member __.``Bools.Collection.ValueWrapArray C.N.less_or_equal``() = + member _.``Bools.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Bools.Collection.ValueWrapArray) C.N.less_or_equal [| 1;0;1;1 |] [] - member __.``Bools.Collection.ValueWrapArray C.N.greater_than``() = + member _.``Bools.Collection.ValueWrapArray C.N.greater_than``() = validate (Bools.Collection.ValueWrapArray) C.N.greater_than [| 0;1;0;0 |] [] - member __.``Bools.Collection.ValueWrapArray C.N.greater_or_equal``() = + member _.``Bools.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Bools.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;1;0;1 |] [] - member __.``Bools.Collection.ArrayArray C.I.equals``() = + member _.``Bools.Collection.ArrayArray C.I.equals``() = validate (Bools.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``Bools.Collection.ArrayArray C.I.equal``() = + member _.``Bools.Collection.ArrayArray C.I.equal``() = validate (Bools.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``Bools.Collection.ArrayArray C.I.not_equal``() = + member _.``Bools.Collection.ArrayArray C.I.not_equal``() = validate (Bools.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``Bools.Collection.ArrayArray C.I.compare``() = + member _.``Bools.Collection.ArrayArray C.I.compare``() = validate (Bools.Collection.ArrayArray) C.I.compare [| 0;1;-1;-1;-1;0;-1;-1;1;1;0;1;1;1;-1;0 |] [] - member __.``Bools.Collection.ArrayArray C.I.less_than``() = + member _.``Bools.Collection.ArrayArray C.I.less_than``() = validate (Bools.Collection.ArrayArray) C.I.less_than [| 0;0;1;1;1;0;1;1;0;0;0;0;0;0;1;0 |] [] - member __.``Bools.Collection.ArrayArray C.I.less_or_equal``() = + member _.``Bools.Collection.ArrayArray C.I.less_or_equal``() = validate (Bools.Collection.ArrayArray) C.I.less_or_equal [| 1;0;1;1;1;1;1;1;0;0;1;0;0;0;1;1 |] [] - member __.``Bools.Collection.ArrayArray C.I.greater_than``() = + member _.``Bools.Collection.ArrayArray C.I.greater_than``() = validate (Bools.Collection.ArrayArray) C.I.greater_than [| 0;1;0;0;0;0;0;0;1;1;0;1;1;1;0;0 |] [] - member __.``Bools.Collection.ArrayArray C.I.greater_or_equal``() = + member _.``Bools.Collection.ArrayArray C.I.greater_or_equal``() = validate (Bools.Collection.ArrayArray) C.I.greater_or_equal [| 1;1;0;0;0;1;0;0;1;1;1;1;1;1;0;1 |] [] - member __.``Bools.Collection.ArrayArray C.N.equals``() = + member _.``Bools.Collection.ArrayArray C.N.equals``() = validate (Bools.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``Bools.Collection.ArrayArray C.N.equal``() = + member _.``Bools.Collection.ArrayArray C.N.equal``() = validate (Bools.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``Bools.Collection.ArrayArray C.N.not_equal``() = + member _.``Bools.Collection.ArrayArray C.N.not_equal``() = validate (Bools.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``Bools.Collection.ArrayArray C.N.compare``() = + member _.``Bools.Collection.ArrayArray C.N.compare``() = validate (Bools.Collection.ArrayArray) C.N.compare [| 0;1;-1;-1;-1;0;-1;-1;1;1;0;1;1;1;-1;0 |] [] - member __.``Bools.Collection.ArrayArray C.N.less_than``() = + member _.``Bools.Collection.ArrayArray C.N.less_than``() = validate (Bools.Collection.ArrayArray) C.N.less_than [| 0;0;1;1;1;0;1;1;0;0;0;0;0;0;1;0 |] [] - member __.``Bools.Collection.ArrayArray C.N.less_or_equal``() = + member _.``Bools.Collection.ArrayArray C.N.less_or_equal``() = validate (Bools.Collection.ArrayArray) C.N.less_or_equal [| 1;0;1;1;1;1;1;1;0;0;1;0;0;0;1;1 |] [] - member __.``Bools.Collection.ArrayArray C.N.greater_than``() = + member _.``Bools.Collection.ArrayArray C.N.greater_than``() = validate (Bools.Collection.ArrayArray) C.N.greater_than [| 0;1;0;0;0;0;0;0;1;1;0;1;1;1;0;0 |] [] - member __.``Bools.Collection.ArrayArray C.N.greater_or_equal``() = + member _.``Bools.Collection.ArrayArray C.N.greater_or_equal``() = validate (Bools.Collection.ArrayArray) C.N.greater_or_equal [| 1;1;0;0;0;1;0;0;1;1;1;1;1;1;0;1 |] [] - member __.``Bools.Collection.ListArray C.I.equals``() = + member _.``Bools.Collection.ListArray C.I.equals``() = validate (Bools.Collection.ListArray) C.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``Bools.Collection.ListArray C.I.equal``() = + member _.``Bools.Collection.ListArray C.I.equal``() = validate (Bools.Collection.ListArray) C.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``Bools.Collection.ListArray C.I.not_equal``() = + member _.``Bools.Collection.ListArray C.I.not_equal``() = validate (Bools.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``Bools.Collection.ListArray C.I.compare``() = + member _.``Bools.Collection.ListArray C.I.compare``() = validate (Bools.Collection.ListArray) C.I.compare [| 0;1;-1;1;-1;0;-1;-1;1;1;0;1;-1;1;-1;0 |] [] - member __.``Bools.Collection.ListArray C.I.less_than``() = + member _.``Bools.Collection.ListArray C.I.less_than``() = validate (Bools.Collection.ListArray) C.I.less_than [| 0;0;1;0;1;0;1;1;0;0;0;0;1;0;1;0 |] [] - member __.``Bools.Collection.ListArray C.I.less_or_equal``() = + member _.``Bools.Collection.ListArray C.I.less_or_equal``() = validate (Bools.Collection.ListArray) C.I.less_or_equal [| 1;0;1;0;1;1;1;1;0;0;1;0;1;0;1;1 |] [] - member __.``Bools.Collection.ListArray C.I.greater_than``() = + member _.``Bools.Collection.ListArray C.I.greater_than``() = validate (Bools.Collection.ListArray) C.I.greater_than [| 0;1;0;1;0;0;0;0;1;1;0;1;0;1;0;0 |] [] - member __.``Bools.Collection.ListArray C.I.greater_or_equal``() = + member _.``Bools.Collection.ListArray C.I.greater_or_equal``() = validate (Bools.Collection.ListArray) C.I.greater_or_equal [| 1;1;0;1;0;1;0;0;1;1;1;1;0;1;0;1 |] [] - member __.``Bools.Collection.ListArray C.N.equals``() = + member _.``Bools.Collection.ListArray C.N.equals``() = validate (Bools.Collection.ListArray) C.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``Bools.Collection.ListArray C.N.equal``() = + member _.``Bools.Collection.ListArray C.N.equal``() = validate (Bools.Collection.ListArray) C.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``Bools.Collection.ListArray C.N.not_equal``() = + member _.``Bools.Collection.ListArray C.N.not_equal``() = validate (Bools.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``Bools.Collection.ListArray C.N.compare``() = + member _.``Bools.Collection.ListArray C.N.compare``() = validate (Bools.Collection.ListArray) C.N.compare [| 0;1;-1;1;-1;0;-1;-1;1;1;0;1;-1;1;-1;0 |] [] - member __.``Bools.Collection.ListArray C.N.less_than``() = + member _.``Bools.Collection.ListArray C.N.less_than``() = validate (Bools.Collection.ListArray) C.N.less_than [| 0;0;1;0;1;0;1;1;0;0;0;0;1;0;1;0 |] [] - member __.``Bools.Collection.ListArray C.N.less_or_equal``() = + member _.``Bools.Collection.ListArray C.N.less_or_equal``() = validate (Bools.Collection.ListArray) C.N.less_or_equal [| 1;0;1;0;1;1;1;1;0;0;1;0;1;0;1;1 |] [] - member __.``Bools.Collection.ListArray C.N.greater_than``() = + member _.``Bools.Collection.ListArray C.N.greater_than``() = validate (Bools.Collection.ListArray) C.N.greater_than [| 0;1;0;1;0;0;0;0;1;1;0;1;0;1;0;0 |] [] - member __.``Bools.Collection.ListArray C.N.greater_or_equal``() = + member _.``Bools.Collection.ListArray C.N.greater_or_equal``() = validate (Bools.Collection.ListArray) C.N.greater_or_equal [| 1;1;0;1;0;1;0;0;1;1;1;1;0;1;0;1 |] [] - member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1 |] [] - member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1 |] [] - member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;0;1;1;0;0 |] [] - member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;1;1;1;-1;0;-1;-1;-1;1;0;0;-1;1;0;0 |] [] - member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;0;0;0;1;0;1;1;1;0;0;0;1;0;0;0 |] [] - member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;0;0;0;1;1;1;1;1;0;1;1;1;0;1;1 |] [] - member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;1;1;1;0;0;0;0;0;1;0;0;0;1;0;0 |] [] - member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;1;1;1;0;1;0;0;0;1;1;1;0;1;1;1 |] [] - member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1 |] [] - member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1 |] [] - member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;0;1;1;0;0 |] [] - member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;1;1;1;-1;0;-1;-1;-1;1;0;0;-1;1;0;0 |] [] - member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;0;0;0;1;0;1;1;1;0;0;0;1;0;0;0 |] [] - member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;0;0;0;1;1;1;1;1;0;1;1;1;0;1;1 |] [] - member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;1;1;1;0;0;0;0;0;1;0;0;0;1;0;0 |] [] - member __.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member _.``Bools.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Bools.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;1;1;1;0;1;0;0;0;1;1;1;0;1;1;1 |] [] - member __.``NullableBools.Collection.Array E.I.equals``() = + member _.``NullableBools.Collection.Array E.I.equals``() = validate (NullableBools.Collection.Array) E.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NullableBools.Collection.Array E.I.equal``() = + member _.``NullableBools.Collection.Array E.I.equal``() = validate (NullableBools.Collection.Array) E.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NullableBools.Collection.Array E.I.not_equal``() = + member _.``NullableBools.Collection.Array E.I.not_equal``() = validate (NullableBools.Collection.Array) E.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``NullableBools.Collection.Array E.N.equals``() = + member _.``NullableBools.Collection.Array E.N.equals``() = validate (NullableBools.Collection.Array) E.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NullableBools.Collection.Array E.N.equal``() = + member _.``NullableBools.Collection.Array E.N.equal``() = validate (NullableBools.Collection.Array) E.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NullableBools.Collection.Array E.N.not_equal``() = + member _.``NullableBools.Collection.Array E.N.not_equal``() = validate (NullableBools.Collection.Array) E.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``NullableBools.Collection.OptionArray E.I.equals``() = + member _.``NullableBools.Collection.OptionArray E.I.equals``() = validate (NullableBools.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableBools.Collection.OptionArray E.I.equal``() = + member _.``NullableBools.Collection.OptionArray E.I.equal``() = validate (NullableBools.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableBools.Collection.OptionArray E.I.not_equal``() = + member _.``NullableBools.Collection.OptionArray E.I.not_equal``() = validate (NullableBools.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableBools.Collection.OptionArray E.N.equals``() = + member _.``NullableBools.Collection.OptionArray E.N.equals``() = validate (NullableBools.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableBools.Collection.OptionArray E.N.equal``() = + member _.``NullableBools.Collection.OptionArray E.N.equal``() = validate (NullableBools.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableBools.Collection.OptionArray E.N.not_equal``() = + member _.``NullableBools.Collection.OptionArray E.N.not_equal``() = validate (NullableBools.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableBools.Collection.RefArray E.I.equals``() = + member _.``NullableBools.Collection.RefArray E.I.equals``() = validate (NullableBools.Collection.RefArray) E.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NullableBools.Collection.RefArray E.I.equal``() = + member _.``NullableBools.Collection.RefArray E.I.equal``() = validate (NullableBools.Collection.RefArray) E.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NullableBools.Collection.RefArray E.I.not_equal``() = + member _.``NullableBools.Collection.RefArray E.I.not_equal``() = validate (NullableBools.Collection.RefArray) E.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``NullableBools.Collection.RefArray E.N.equals``() = + member _.``NullableBools.Collection.RefArray E.N.equals``() = validate (NullableBools.Collection.RefArray) E.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NullableBools.Collection.RefArray E.N.equal``() = + member _.``NullableBools.Collection.RefArray E.N.equal``() = validate (NullableBools.Collection.RefArray) E.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NullableBools.Collection.RefArray E.N.not_equal``() = + member _.``NullableBools.Collection.RefArray E.N.not_equal``() = validate (NullableBools.Collection.RefArray) E.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``NullableBools.Collection.RefWrapArray E.I.equals``() = + member _.``NullableBools.Collection.RefWrapArray E.I.equals``() = validate (NullableBools.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NullableBools.Collection.RefWrapArray E.I.equal``() = + member _.``NullableBools.Collection.RefWrapArray E.I.equal``() = validate (NullableBools.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NullableBools.Collection.RefWrapArray E.I.not_equal``() = + member _.``NullableBools.Collection.RefWrapArray E.I.not_equal``() = validate (NullableBools.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``NullableBools.Collection.RefWrapArray E.N.equals``() = + member _.``NullableBools.Collection.RefWrapArray E.N.equals``() = validate (NullableBools.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NullableBools.Collection.RefWrapArray E.N.equal``() = + member _.``NullableBools.Collection.RefWrapArray E.N.equal``() = validate (NullableBools.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NullableBools.Collection.RefWrapArray E.N.not_equal``() = + member _.``NullableBools.Collection.RefWrapArray E.N.not_equal``() = validate (NullableBools.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``NullableBools.Collection.UnionArray E.I.equals``() = + member _.``NullableBools.Collection.UnionArray E.I.equals``() = validate (NullableBools.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -3098,7 +3098,7 @@ type GeneratedTests () = |] [] - member __.``NullableBools.Collection.UnionArray E.I.equal``() = + member _.``NullableBools.Collection.UnionArray E.I.equal``() = validate (NullableBools.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -3115,7 +3115,7 @@ type GeneratedTests () = |] [] - member __.``NullableBools.Collection.UnionArray E.I.not_equal``() = + member _.``NullableBools.Collection.UnionArray E.I.not_equal``() = validate (NullableBools.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -3132,7 +3132,7 @@ type GeneratedTests () = |] [] - member __.``NullableBools.Collection.UnionArray E.N.equals``() = + member _.``NullableBools.Collection.UnionArray E.N.equals``() = validate (NullableBools.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -3149,7 +3149,7 @@ type GeneratedTests () = |] [] - member __.``NullableBools.Collection.UnionArray E.N.equal``() = + member _.``NullableBools.Collection.UnionArray E.N.equal``() = validate (NullableBools.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -3166,7 +3166,7 @@ type GeneratedTests () = |] [] - member __.``NullableBools.Collection.UnionArray E.N.not_equal``() = + member _.``NullableBools.Collection.UnionArray E.N.not_equal``() = validate (NullableBools.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -3183,7 +3183,7 @@ type GeneratedTests () = |] [] - member __.``NullableBools.Collection.UnionWrapArray E.I.equals``() = + member _.``NullableBools.Collection.UnionWrapArray E.I.equals``() = validate (NullableBools.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -3200,7 +3200,7 @@ type GeneratedTests () = |] [] - member __.``NullableBools.Collection.UnionWrapArray E.I.equal``() = + member _.``NullableBools.Collection.UnionWrapArray E.I.equal``() = validate (NullableBools.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -3217,7 +3217,7 @@ type GeneratedTests () = |] [] - member __.``NullableBools.Collection.UnionWrapArray E.I.not_equal``() = + member _.``NullableBools.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableBools.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -3234,7 +3234,7 @@ type GeneratedTests () = |] [] - member __.``NullableBools.Collection.UnionWrapArray E.N.equals``() = + member _.``NullableBools.Collection.UnionWrapArray E.N.equals``() = validate (NullableBools.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -3251,7 +3251,7 @@ type GeneratedTests () = |] [] - member __.``NullableBools.Collection.UnionWrapArray E.N.equal``() = + member _.``NullableBools.Collection.UnionWrapArray E.N.equal``() = validate (NullableBools.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -3268,7 +3268,7 @@ type GeneratedTests () = |] [] - member __.``NullableBools.Collection.UnionWrapArray E.N.not_equal``() = + member _.``NullableBools.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableBools.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -3285,535 +3285,535 @@ type GeneratedTests () = |] [] - member __.``NullableBools.Collection.ValueArray E.I.equals``() = + member _.``NullableBools.Collection.ValueArray E.I.equals``() = validate (NullableBools.Collection.ValueArray) E.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NullableBools.Collection.ValueArray E.I.equal``() = + member _.``NullableBools.Collection.ValueArray E.I.equal``() = validate (NullableBools.Collection.ValueArray) E.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NullableBools.Collection.ValueArray E.I.not_equal``() = + member _.``NullableBools.Collection.ValueArray E.I.not_equal``() = validate (NullableBools.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``NullableBools.Collection.ValueArray E.N.equals``() = + member _.``NullableBools.Collection.ValueArray E.N.equals``() = validate (NullableBools.Collection.ValueArray) E.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NullableBools.Collection.ValueArray E.N.equal``() = + member _.``NullableBools.Collection.ValueArray E.N.equal``() = validate (NullableBools.Collection.ValueArray) E.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NullableBools.Collection.ValueArray E.N.not_equal``() = + member _.``NullableBools.Collection.ValueArray E.N.not_equal``() = validate (NullableBools.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``NullableBools.Collection.ValueWrapArray E.I.equals``() = + member _.``NullableBools.Collection.ValueWrapArray E.I.equals``() = validate (NullableBools.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NullableBools.Collection.ValueWrapArray E.I.equal``() = + member _.``NullableBools.Collection.ValueWrapArray E.I.equal``() = validate (NullableBools.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NullableBools.Collection.ValueWrapArray E.I.not_equal``() = + member _.``NullableBools.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableBools.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``NullableBools.Collection.ValueWrapArray E.N.equals``() = + member _.``NullableBools.Collection.ValueWrapArray E.N.equals``() = validate (NullableBools.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NullableBools.Collection.ValueWrapArray E.N.equal``() = + member _.``NullableBools.Collection.ValueWrapArray E.N.equal``() = validate (NullableBools.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NullableBools.Collection.ValueWrapArray E.N.not_equal``() = + member _.``NullableBools.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableBools.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``NullableBools.Collection.ArrayArray E.I.equals``() = + member _.``NullableBools.Collection.ArrayArray E.I.equals``() = validate (NullableBools.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBools.Collection.ArrayArray E.I.equal``() = + member _.``NullableBools.Collection.ArrayArray E.I.equal``() = validate (NullableBools.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBools.Collection.ArrayArray E.I.not_equal``() = + member _.``NullableBools.Collection.ArrayArray E.I.not_equal``() = validate (NullableBools.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableBools.Collection.ArrayArray E.N.equals``() = + member _.``NullableBools.Collection.ArrayArray E.N.equals``() = validate (NullableBools.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBools.Collection.ArrayArray E.N.equal``() = + member _.``NullableBools.Collection.ArrayArray E.N.equal``() = validate (NullableBools.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBools.Collection.ArrayArray E.N.not_equal``() = + member _.``NullableBools.Collection.ArrayArray E.N.not_equal``() = validate (NullableBools.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableBools.Collection.ListArray E.I.equals``() = + member _.``NullableBools.Collection.ListArray E.I.equals``() = validate (NullableBools.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBools.Collection.ListArray E.I.equal``() = + member _.``NullableBools.Collection.ListArray E.I.equal``() = validate (NullableBools.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBools.Collection.ListArray E.I.not_equal``() = + member _.``NullableBools.Collection.ListArray E.I.not_equal``() = validate (NullableBools.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableBools.Collection.ListArray E.N.equals``() = + member _.``NullableBools.Collection.ListArray E.N.equals``() = validate (NullableBools.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBools.Collection.ListArray E.N.equal``() = + member _.``NullableBools.Collection.ListArray E.N.equal``() = validate (NullableBools.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBools.Collection.ListArray E.N.not_equal``() = + member _.``NullableBools.Collection.ListArray E.N.not_equal``() = validate (NullableBools.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``SBytes.Collection.Array C.I.equals``() = + member _.``SBytes.Collection.Array C.I.equals``() = validate (SBytes.Collection.Array) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.Array C.I.equal``() = + member _.``SBytes.Collection.Array C.I.equal``() = validate (SBytes.Collection.Array) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.Array C.I.not_equal``() = + member _.``SBytes.Collection.Array C.I.not_equal``() = validate (SBytes.Collection.Array) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``SBytes.Collection.Array C.I.compare``() = + member _.``SBytes.Collection.Array C.I.compare``() = validate (SBytes.Collection.Array) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``SBytes.Collection.Array C.I.less_than``() = + member _.``SBytes.Collection.Array C.I.less_than``() = validate (SBytes.Collection.Array) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``SBytes.Collection.Array C.I.less_or_equal``() = + member _.``SBytes.Collection.Array C.I.less_or_equal``() = validate (SBytes.Collection.Array) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``SBytes.Collection.Array C.I.greater_than``() = + member _.``SBytes.Collection.Array C.I.greater_than``() = validate (SBytes.Collection.Array) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``SBytes.Collection.Array C.I.greater_or_equal``() = + member _.``SBytes.Collection.Array C.I.greater_or_equal``() = validate (SBytes.Collection.Array) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``SBytes.Collection.Array C.N.equals``() = + member _.``SBytes.Collection.Array C.N.equals``() = validate (SBytes.Collection.Array) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.Array C.N.equal``() = + member _.``SBytes.Collection.Array C.N.equal``() = validate (SBytes.Collection.Array) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.Array C.N.not_equal``() = + member _.``SBytes.Collection.Array C.N.not_equal``() = validate (SBytes.Collection.Array) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``SBytes.Collection.Array C.N.compare``() = + member _.``SBytes.Collection.Array C.N.compare``() = validate (SBytes.Collection.Array) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``SBytes.Collection.Array C.N.less_than``() = + member _.``SBytes.Collection.Array C.N.less_than``() = validate (SBytes.Collection.Array) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``SBytes.Collection.Array C.N.less_or_equal``() = + member _.``SBytes.Collection.Array C.N.less_or_equal``() = validate (SBytes.Collection.Array) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``SBytes.Collection.Array C.N.greater_than``() = + member _.``SBytes.Collection.Array C.N.greater_than``() = validate (SBytes.Collection.Array) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``SBytes.Collection.Array C.N.greater_or_equal``() = + member _.``SBytes.Collection.Array C.N.greater_or_equal``() = validate (SBytes.Collection.Array) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``SBytes.Collection.OptionArray C.I.equals``() = + member _.``SBytes.Collection.OptionArray C.I.equals``() = validate (SBytes.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.OptionArray C.I.equal``() = + member _.``SBytes.Collection.OptionArray C.I.equal``() = validate (SBytes.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.OptionArray C.I.not_equal``() = + member _.``SBytes.Collection.OptionArray C.I.not_equal``() = validate (SBytes.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``SBytes.Collection.OptionArray C.I.compare``() = + member _.``SBytes.Collection.OptionArray C.I.compare``() = validate (SBytes.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-255;-127;-128;-129;1;255;0;128;127;126;1;127;-128;0;-1;-2;1;128;-127;1;0;-1;1;129;-126;2;1;0 |] [] - member __.``SBytes.Collection.OptionArray C.I.less_than``() = + member _.``SBytes.Collection.OptionArray C.I.less_than``() = validate (SBytes.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member __.``SBytes.Collection.OptionArray C.I.less_or_equal``() = + member _.``SBytes.Collection.OptionArray C.I.less_or_equal``() = validate (SBytes.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member __.``SBytes.Collection.OptionArray C.I.greater_than``() = + member _.``SBytes.Collection.OptionArray C.I.greater_than``() = validate (SBytes.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member __.``SBytes.Collection.OptionArray C.I.greater_or_equal``() = + member _.``SBytes.Collection.OptionArray C.I.greater_or_equal``() = validate (SBytes.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member __.``SBytes.Collection.OptionArray C.N.equals``() = + member _.``SBytes.Collection.OptionArray C.N.equals``() = validate (SBytes.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.OptionArray C.N.equal``() = + member _.``SBytes.Collection.OptionArray C.N.equal``() = validate (SBytes.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.OptionArray C.N.not_equal``() = + member _.``SBytes.Collection.OptionArray C.N.not_equal``() = validate (SBytes.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``SBytes.Collection.OptionArray C.N.compare``() = + member _.``SBytes.Collection.OptionArray C.N.compare``() = validate (SBytes.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-255;-127;-128;-129;1;255;0;128;127;126;1;127;-128;0;-1;-2;1;128;-127;1;0;-1;1;129;-126;2;1;0 |] [] - member __.``SBytes.Collection.OptionArray C.N.less_than``() = + member _.``SBytes.Collection.OptionArray C.N.less_than``() = validate (SBytes.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member __.``SBytes.Collection.OptionArray C.N.less_or_equal``() = + member _.``SBytes.Collection.OptionArray C.N.less_or_equal``() = validate (SBytes.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member __.``SBytes.Collection.OptionArray C.N.greater_than``() = + member _.``SBytes.Collection.OptionArray C.N.greater_than``() = validate (SBytes.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member __.``SBytes.Collection.OptionArray C.N.greater_or_equal``() = + member _.``SBytes.Collection.OptionArray C.N.greater_or_equal``() = validate (SBytes.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member __.``SBytes.Collection.RefArray C.I.equals``() = + member _.``SBytes.Collection.RefArray C.I.equals``() = validate (SBytes.Collection.RefArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.RefArray C.I.equal``() = + member _.``SBytes.Collection.RefArray C.I.equal``() = validate (SBytes.Collection.RefArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.RefArray C.I.not_equal``() = + member _.``SBytes.Collection.RefArray C.I.not_equal``() = validate (SBytes.Collection.RefArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``SBytes.Collection.RefArray C.I.compare``() = + member _.``SBytes.Collection.RefArray C.I.compare``() = validate (SBytes.Collection.RefArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``SBytes.Collection.RefArray C.I.less_than``() = + member _.``SBytes.Collection.RefArray C.I.less_than``() = validate (SBytes.Collection.RefArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``SBytes.Collection.RefArray C.I.less_or_equal``() = + member _.``SBytes.Collection.RefArray C.I.less_or_equal``() = validate (SBytes.Collection.RefArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``SBytes.Collection.RefArray C.I.greater_than``() = + member _.``SBytes.Collection.RefArray C.I.greater_than``() = validate (SBytes.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``SBytes.Collection.RefArray C.I.greater_or_equal``() = + member _.``SBytes.Collection.RefArray C.I.greater_or_equal``() = validate (SBytes.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``SBytes.Collection.RefArray C.N.equals``() = + member _.``SBytes.Collection.RefArray C.N.equals``() = validate (SBytes.Collection.RefArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.RefArray C.N.equal``() = + member _.``SBytes.Collection.RefArray C.N.equal``() = validate (SBytes.Collection.RefArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.RefArray C.N.not_equal``() = + member _.``SBytes.Collection.RefArray C.N.not_equal``() = validate (SBytes.Collection.RefArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``SBytes.Collection.RefArray C.N.compare``() = + member _.``SBytes.Collection.RefArray C.N.compare``() = validate (SBytes.Collection.RefArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``SBytes.Collection.RefArray C.N.less_than``() = + member _.``SBytes.Collection.RefArray C.N.less_than``() = validate (SBytes.Collection.RefArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``SBytes.Collection.RefArray C.N.less_or_equal``() = + member _.``SBytes.Collection.RefArray C.N.less_or_equal``() = validate (SBytes.Collection.RefArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``SBytes.Collection.RefArray C.N.greater_than``() = + member _.``SBytes.Collection.RefArray C.N.greater_than``() = validate (SBytes.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``SBytes.Collection.RefArray C.N.greater_or_equal``() = + member _.``SBytes.Collection.RefArray C.N.greater_or_equal``() = validate (SBytes.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``SBytes.Collection.RefWrapArray C.I.equals``() = + member _.``SBytes.Collection.RefWrapArray C.I.equals``() = validate (SBytes.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.RefWrapArray C.I.equal``() = + member _.``SBytes.Collection.RefWrapArray C.I.equal``() = validate (SBytes.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.RefWrapArray C.I.not_equal``() = + member _.``SBytes.Collection.RefWrapArray C.I.not_equal``() = validate (SBytes.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``SBytes.Collection.RefWrapArray C.I.compare``() = + member _.``SBytes.Collection.RefWrapArray C.I.compare``() = validate (SBytes.Collection.RefWrapArray) C.I.compare [| 0;-255;-127;-128;-129;255;0;128;127;126;127;-128;0;-1;-2;128;-127;1;0;-1;129;-126;2;1;0 |] [] - member __.``SBytes.Collection.RefWrapArray C.I.less_than``() = + member _.``SBytes.Collection.RefWrapArray C.I.less_than``() = validate (SBytes.Collection.RefWrapArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``SBytes.Collection.RefWrapArray C.I.less_or_equal``() = + member _.``SBytes.Collection.RefWrapArray C.I.less_or_equal``() = validate (SBytes.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``SBytes.Collection.RefWrapArray C.I.greater_than``() = + member _.``SBytes.Collection.RefWrapArray C.I.greater_than``() = validate (SBytes.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``SBytes.Collection.RefWrapArray C.I.greater_or_equal``() = + member _.``SBytes.Collection.RefWrapArray C.I.greater_or_equal``() = validate (SBytes.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``SBytes.Collection.RefWrapArray C.N.equals``() = + member _.``SBytes.Collection.RefWrapArray C.N.equals``() = validate (SBytes.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.RefWrapArray C.N.equal``() = + member _.``SBytes.Collection.RefWrapArray C.N.equal``() = validate (SBytes.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.RefWrapArray C.N.not_equal``() = + member _.``SBytes.Collection.RefWrapArray C.N.not_equal``() = validate (SBytes.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``SBytes.Collection.RefWrapArray C.N.compare``() = + member _.``SBytes.Collection.RefWrapArray C.N.compare``() = validate (SBytes.Collection.RefWrapArray) C.N.compare [| 0;-255;-127;-128;-129;255;0;128;127;126;127;-128;0;-1;-2;128;-127;1;0;-1;129;-126;2;1;0 |] [] - member __.``SBytes.Collection.RefWrapArray C.N.less_than``() = + member _.``SBytes.Collection.RefWrapArray C.N.less_than``() = validate (SBytes.Collection.RefWrapArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``SBytes.Collection.RefWrapArray C.N.less_or_equal``() = + member _.``SBytes.Collection.RefWrapArray C.N.less_or_equal``() = validate (SBytes.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``SBytes.Collection.RefWrapArray C.N.greater_than``() = + member _.``SBytes.Collection.RefWrapArray C.N.greater_than``() = validate (SBytes.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``SBytes.Collection.RefWrapArray C.N.greater_or_equal``() = + member _.``SBytes.Collection.RefWrapArray C.N.greater_or_equal``() = validate (SBytes.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``SBytes.Collection.UnionArray C.I.equals``() = + member _.``SBytes.Collection.UnionArray C.I.equals``() = validate (SBytes.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -3849,7 +3849,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionArray C.I.equal``() = + member _.``SBytes.Collection.UnionArray C.I.equal``() = validate (SBytes.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -3885,7 +3885,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionArray C.I.not_equal``() = + member _.``SBytes.Collection.UnionArray C.I.not_equal``() = validate (SBytes.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -3921,7 +3921,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionArray C.I.compare``() = + member _.``SBytes.Collection.UnionArray C.I.compare``() = validate (SBytes.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -3957,7 +3957,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionArray C.I.less_than``() = + member _.``SBytes.Collection.UnionArray C.I.less_than``() = validate (SBytes.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -3993,7 +3993,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionArray C.I.less_or_equal``() = + member _.``SBytes.Collection.UnionArray C.I.less_or_equal``() = validate (SBytes.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -4029,7 +4029,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionArray C.I.greater_than``() = + member _.``SBytes.Collection.UnionArray C.I.greater_than``() = validate (SBytes.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -4065,7 +4065,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionArray C.I.greater_or_equal``() = + member _.``SBytes.Collection.UnionArray C.I.greater_or_equal``() = validate (SBytes.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -4101,7 +4101,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionArray C.N.equals``() = + member _.``SBytes.Collection.UnionArray C.N.equals``() = validate (SBytes.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -4137,7 +4137,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionArray C.N.equal``() = + member _.``SBytes.Collection.UnionArray C.N.equal``() = validate (SBytes.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -4173,7 +4173,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionArray C.N.not_equal``() = + member _.``SBytes.Collection.UnionArray C.N.not_equal``() = validate (SBytes.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -4209,7 +4209,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionArray C.N.compare``() = + member _.``SBytes.Collection.UnionArray C.N.compare``() = validate (SBytes.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -4245,7 +4245,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionArray C.N.less_than``() = + member _.``SBytes.Collection.UnionArray C.N.less_than``() = validate (SBytes.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -4281,7 +4281,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionArray C.N.less_or_equal``() = + member _.``SBytes.Collection.UnionArray C.N.less_or_equal``() = validate (SBytes.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -4317,7 +4317,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionArray C.N.greater_than``() = + member _.``SBytes.Collection.UnionArray C.N.greater_than``() = validate (SBytes.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -4353,7 +4353,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionArray C.N.greater_or_equal``() = + member _.``SBytes.Collection.UnionArray C.N.greater_or_equal``() = validate (SBytes.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -4389,7 +4389,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionWrapArray C.I.equals``() = + member _.``SBytes.Collection.UnionWrapArray C.I.equals``() = validate (SBytes.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -4425,7 +4425,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionWrapArray C.I.equal``() = + member _.``SBytes.Collection.UnionWrapArray C.I.equal``() = validate (SBytes.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -4461,7 +4461,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionWrapArray C.I.not_equal``() = + member _.``SBytes.Collection.UnionWrapArray C.I.not_equal``() = validate (SBytes.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -4497,7 +4497,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionWrapArray C.I.compare``() = + member _.``SBytes.Collection.UnionWrapArray C.I.compare``() = validate (SBytes.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-255;-1;-2;-3;-3;-3;-3;-127;-1;-2;-3;-3;-3;-3;-128;-1;-2;-3;-3;-3;-3;-129;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-255;-1;-2;-2;-2;-2;1;-127;-1;-2;-2;-2;-2;1;-128;-1;-2;-2;-2;-2;1;-129;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-255; @@ -4533,7 +4533,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionWrapArray C.I.less_than``() = + member _.``SBytes.Collection.UnionWrapArray C.I.less_than``() = validate (SBytes.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -4569,7 +4569,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionWrapArray C.I.less_or_equal``() = + member _.``SBytes.Collection.UnionWrapArray C.I.less_or_equal``() = validate (SBytes.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -4605,7 +4605,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionWrapArray C.I.greater_than``() = + member _.``SBytes.Collection.UnionWrapArray C.I.greater_than``() = validate (SBytes.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -4641,7 +4641,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionWrapArray C.I.greater_or_equal``() = + member _.``SBytes.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (SBytes.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -4677,7 +4677,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionWrapArray C.N.equals``() = + member _.``SBytes.Collection.UnionWrapArray C.N.equals``() = validate (SBytes.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -4713,7 +4713,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionWrapArray C.N.equal``() = + member _.``SBytes.Collection.UnionWrapArray C.N.equal``() = validate (SBytes.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -4749,7 +4749,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionWrapArray C.N.not_equal``() = + member _.``SBytes.Collection.UnionWrapArray C.N.not_equal``() = validate (SBytes.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -4785,7 +4785,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionWrapArray C.N.compare``() = + member _.``SBytes.Collection.UnionWrapArray C.N.compare``() = validate (SBytes.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-255;-1;-2;-3;-3;-3;-3;-127;-1;-2;-3;-3;-3;-3;-128;-1;-2;-3;-3;-3;-3;-129;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-255;-1;-2;-2;-2;-2;1;-127;-1;-2;-2;-2;-2;1;-128;-1;-2;-2;-2;-2;1;-129;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-255; @@ -4821,7 +4821,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionWrapArray C.N.less_than``() = + member _.``SBytes.Collection.UnionWrapArray C.N.less_than``() = validate (SBytes.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -4857,7 +4857,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionWrapArray C.N.less_or_equal``() = + member _.``SBytes.Collection.UnionWrapArray C.N.less_or_equal``() = validate (SBytes.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -4893,7 +4893,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionWrapArray C.N.greater_than``() = + member _.``SBytes.Collection.UnionWrapArray C.N.greater_than``() = validate (SBytes.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -4929,7 +4929,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.UnionWrapArray C.N.greater_or_equal``() = + member _.``SBytes.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (SBytes.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -4965,199 +4965,199 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ValueArray C.I.equals``() = + member _.``SBytes.Collection.ValueArray C.I.equals``() = validate (SBytes.Collection.ValueArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.ValueArray C.I.equal``() = + member _.``SBytes.Collection.ValueArray C.I.equal``() = validate (SBytes.Collection.ValueArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.ValueArray C.I.not_equal``() = + member _.``SBytes.Collection.ValueArray C.I.not_equal``() = validate (SBytes.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``SBytes.Collection.ValueArray C.I.compare``() = + member _.``SBytes.Collection.ValueArray C.I.compare``() = validate (SBytes.Collection.ValueArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``SBytes.Collection.ValueArray C.I.less_than``() = + member _.``SBytes.Collection.ValueArray C.I.less_than``() = validate (SBytes.Collection.ValueArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``SBytes.Collection.ValueArray C.I.less_or_equal``() = + member _.``SBytes.Collection.ValueArray C.I.less_or_equal``() = validate (SBytes.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``SBytes.Collection.ValueArray C.I.greater_than``() = + member _.``SBytes.Collection.ValueArray C.I.greater_than``() = validate (SBytes.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``SBytes.Collection.ValueArray C.I.greater_or_equal``() = + member _.``SBytes.Collection.ValueArray C.I.greater_or_equal``() = validate (SBytes.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``SBytes.Collection.ValueArray C.N.equals``() = + member _.``SBytes.Collection.ValueArray C.N.equals``() = validate (SBytes.Collection.ValueArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.ValueArray C.N.equal``() = + member _.``SBytes.Collection.ValueArray C.N.equal``() = validate (SBytes.Collection.ValueArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.ValueArray C.N.not_equal``() = + member _.``SBytes.Collection.ValueArray C.N.not_equal``() = validate (SBytes.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``SBytes.Collection.ValueArray C.N.compare``() = + member _.``SBytes.Collection.ValueArray C.N.compare``() = validate (SBytes.Collection.ValueArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``SBytes.Collection.ValueArray C.N.less_than``() = + member _.``SBytes.Collection.ValueArray C.N.less_than``() = validate (SBytes.Collection.ValueArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``SBytes.Collection.ValueArray C.N.less_or_equal``() = + member _.``SBytes.Collection.ValueArray C.N.less_or_equal``() = validate (SBytes.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``SBytes.Collection.ValueArray C.N.greater_than``() = + member _.``SBytes.Collection.ValueArray C.N.greater_than``() = validate (SBytes.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``SBytes.Collection.ValueArray C.N.greater_or_equal``() = + member _.``SBytes.Collection.ValueArray C.N.greater_or_equal``() = validate (SBytes.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``SBytes.Collection.ValueWrapArray C.I.equals``() = + member _.``SBytes.Collection.ValueWrapArray C.I.equals``() = validate (SBytes.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.ValueWrapArray C.I.equal``() = + member _.``SBytes.Collection.ValueWrapArray C.I.equal``() = validate (SBytes.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.ValueWrapArray C.I.not_equal``() = + member _.``SBytes.Collection.ValueWrapArray C.I.not_equal``() = validate (SBytes.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``SBytes.Collection.ValueWrapArray C.I.compare``() = + member _.``SBytes.Collection.ValueWrapArray C.I.compare``() = validate (SBytes.Collection.ValueWrapArray) C.I.compare [| 0;-255;-127;-128;-129;255;0;128;127;126;127;-128;0;-1;-2;128;-127;1;0;-1;129;-126;2;1;0 |] [] - member __.``SBytes.Collection.ValueWrapArray C.I.less_than``() = + member _.``SBytes.Collection.ValueWrapArray C.I.less_than``() = validate (SBytes.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``SBytes.Collection.ValueWrapArray C.I.less_or_equal``() = + member _.``SBytes.Collection.ValueWrapArray C.I.less_or_equal``() = validate (SBytes.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``SBytes.Collection.ValueWrapArray C.I.greater_than``() = + member _.``SBytes.Collection.ValueWrapArray C.I.greater_than``() = validate (SBytes.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``SBytes.Collection.ValueWrapArray C.I.greater_or_equal``() = + member _.``SBytes.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (SBytes.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``SBytes.Collection.ValueWrapArray C.N.equals``() = + member _.``SBytes.Collection.ValueWrapArray C.N.equals``() = validate (SBytes.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.ValueWrapArray C.N.equal``() = + member _.``SBytes.Collection.ValueWrapArray C.N.equal``() = validate (SBytes.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``SBytes.Collection.ValueWrapArray C.N.not_equal``() = + member _.``SBytes.Collection.ValueWrapArray C.N.not_equal``() = validate (SBytes.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``SBytes.Collection.ValueWrapArray C.N.compare``() = + member _.``SBytes.Collection.ValueWrapArray C.N.compare``() = validate (SBytes.Collection.ValueWrapArray) C.N.compare [| 0;-255;-127;-128;-129;255;0;128;127;126;127;-128;0;-1;-2;128;-127;1;0;-1;129;-126;2;1;0 |] [] - member __.``SBytes.Collection.ValueWrapArray C.N.less_than``() = + member _.``SBytes.Collection.ValueWrapArray C.N.less_than``() = validate (SBytes.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``SBytes.Collection.ValueWrapArray C.N.less_or_equal``() = + member _.``SBytes.Collection.ValueWrapArray C.N.less_or_equal``() = validate (SBytes.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``SBytes.Collection.ValueWrapArray C.N.greater_than``() = + member _.``SBytes.Collection.ValueWrapArray C.N.greater_than``() = validate (SBytes.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``SBytes.Collection.ValueWrapArray C.N.greater_or_equal``() = + member _.``SBytes.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (SBytes.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``SBytes.Collection.ArrayArray C.I.equals``() = + member _.``SBytes.Collection.ArrayArray C.I.equals``() = validate (SBytes.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5165,7 +5165,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray C.I.equal``() = + member _.``SBytes.Collection.ArrayArray C.I.equal``() = validate (SBytes.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5173,7 +5173,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray C.I.not_equal``() = + member _.``SBytes.Collection.ArrayArray C.I.not_equal``() = validate (SBytes.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -5181,7 +5181,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray C.I.compare``() = + member _.``SBytes.Collection.ArrayArray C.I.compare``() = validate (SBytes.Collection.ArrayArray) C.I.compare [| 0;1;-1;1;1;-1;-1;-1;-1;-1;-1;0;-1;1;1;-1;-1;-1;-1;-1;1;1;0;1;1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1; -1;-1;-1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;1;-1;1;1;1;1;1;1;1;-1;0;-1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -5189,7 +5189,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray C.I.less_than``() = + member _.``SBytes.Collection.ArrayArray C.I.less_than``() = validate (SBytes.Collection.ArrayArray) C.I.less_than [| 0;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0; @@ -5197,7 +5197,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray C.I.less_or_equal``() = + member _.``SBytes.Collection.ArrayArray C.I.less_or_equal``() = validate (SBytes.Collection.ArrayArray) C.I.less_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5205,7 +5205,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray C.I.greater_than``() = + member _.``SBytes.Collection.ArrayArray C.I.greater_than``() = validate (SBytes.Collection.ArrayArray) C.I.greater_than [| 0;1;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1; @@ -5213,7 +5213,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray C.I.greater_or_equal``() = + member _.``SBytes.Collection.ArrayArray C.I.greater_or_equal``() = validate (SBytes.Collection.ArrayArray) C.I.greater_or_equal [| 1;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1; @@ -5221,7 +5221,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray C.N.equals``() = + member _.``SBytes.Collection.ArrayArray C.N.equals``() = validate (SBytes.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5229,7 +5229,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray C.N.equal``() = + member _.``SBytes.Collection.ArrayArray C.N.equal``() = validate (SBytes.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5237,7 +5237,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray C.N.not_equal``() = + member _.``SBytes.Collection.ArrayArray C.N.not_equal``() = validate (SBytes.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -5245,7 +5245,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray C.N.compare``() = + member _.``SBytes.Collection.ArrayArray C.N.compare``() = validate (SBytes.Collection.ArrayArray) C.N.compare [| 0;1;-1;1;1;-1;-1;-1;-1;-1;-1;0;-1;1;1;-1;-1;-1;-1;-1;1;1;0;1;1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1; -1;-1;-1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;1;-1;1;1;1;1;1;1;1;-1;0;-1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -5253,7 +5253,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray C.N.less_than``() = + member _.``SBytes.Collection.ArrayArray C.N.less_than``() = validate (SBytes.Collection.ArrayArray) C.N.less_than [| 0;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0; @@ -5261,7 +5261,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray C.N.less_or_equal``() = + member _.``SBytes.Collection.ArrayArray C.N.less_or_equal``() = validate (SBytes.Collection.ArrayArray) C.N.less_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5269,7 +5269,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray C.N.greater_than``() = + member _.``SBytes.Collection.ArrayArray C.N.greater_than``() = validate (SBytes.Collection.ArrayArray) C.N.greater_than [| 0;1;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1; @@ -5277,7 +5277,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray C.N.greater_or_equal``() = + member _.``SBytes.Collection.ArrayArray C.N.greater_or_equal``() = validate (SBytes.Collection.ArrayArray) C.N.greater_or_equal [| 1;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;1;1; @@ -5285,7 +5285,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ListArray C.I.equals``() = + member _.``SBytes.Collection.ListArray C.I.equals``() = validate (SBytes.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5293,7 +5293,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ListArray C.I.equal``() = + member _.``SBytes.Collection.ListArray C.I.equal``() = validate (SBytes.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5301,7 +5301,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ListArray C.I.not_equal``() = + member _.``SBytes.Collection.ListArray C.I.not_equal``() = validate (SBytes.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -5309,7 +5309,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ListArray C.I.compare``() = + member _.``SBytes.Collection.ListArray C.I.compare``() = validate (SBytes.Collection.ListArray) C.I.compare [| 0;-255;-127;-128;-129;-1;-255;-127;-128;-129;255;0;128;127;126;255;-1;128;127;126;127;-128;0;-1;-2;127;-128;-1;-1;-2;128;-127;1;0;-1;128;-127;1;-1;-1; 129;-126;2;1;0;129;-126;2;1;-1;1;-255;-127;-128;-129;0;-255;-127;-128;-129;255;1;128;127;126;255;0;128;127;126;127;-128;1;-1;-2;127;-128;0;-1;-2; @@ -5317,7 +5317,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ListArray C.I.less_than``() = + member _.``SBytes.Collection.ListArray C.I.less_than``() = validate (SBytes.Collection.ListArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; @@ -5325,7 +5325,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ListArray C.I.less_or_equal``() = + member _.``SBytes.Collection.ListArray C.I.less_or_equal``() = validate (SBytes.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; @@ -5333,7 +5333,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ListArray C.I.greater_than``() = + member _.``SBytes.Collection.ListArray C.I.greater_than``() = validate (SBytes.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; @@ -5341,7 +5341,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ListArray C.I.greater_or_equal``() = + member _.``SBytes.Collection.ListArray C.I.greater_or_equal``() = validate (SBytes.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; @@ -5349,7 +5349,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ListArray C.N.equals``() = + member _.``SBytes.Collection.ListArray C.N.equals``() = validate (SBytes.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5357,7 +5357,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ListArray C.N.equal``() = + member _.``SBytes.Collection.ListArray C.N.equal``() = validate (SBytes.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5365,7 +5365,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ListArray C.N.not_equal``() = + member _.``SBytes.Collection.ListArray C.N.not_equal``() = validate (SBytes.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -5373,7 +5373,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ListArray C.N.compare``() = + member _.``SBytes.Collection.ListArray C.N.compare``() = validate (SBytes.Collection.ListArray) C.N.compare [| 0;-255;-127;-128;-129;-1;-255;-127;-128;-129;255;0;128;127;126;255;-1;128;127;126;127;-128;0;-1;-2;127;-128;-1;-1;-2;128;-127;1;0;-1;128;-127;1;-1;-1; 129;-126;2;1;0;129;-126;2;1;-1;1;-255;-127;-128;-129;0;-255;-127;-128;-129;255;1;128;127;126;255;0;128;127;126;127;-128;1;-1;-2;127;-128;0;-1;-2; @@ -5381,7 +5381,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ListArray C.N.less_than``() = + member _.``SBytes.Collection.ListArray C.N.less_than``() = validate (SBytes.Collection.ListArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; @@ -5389,7 +5389,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ListArray C.N.less_or_equal``() = + member _.``SBytes.Collection.ListArray C.N.less_or_equal``() = validate (SBytes.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; @@ -5397,7 +5397,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ListArray C.N.greater_than``() = + member _.``SBytes.Collection.ListArray C.N.greater_than``() = validate (SBytes.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; @@ -5405,7 +5405,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ListArray C.N.greater_or_equal``() = + member _.``SBytes.Collection.ListArray C.N.greater_or_equal``() = validate (SBytes.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; @@ -5413,7 +5413,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5421,7 +5421,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5429,7 +5429,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -5437,7 +5437,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; @@ -5445,7 +5445,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; @@ -5453,7 +5453,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; @@ -5461,7 +5461,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; @@ -5469,7 +5469,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; @@ -5477,7 +5477,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5485,7 +5485,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -5493,7 +5493,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -5501,7 +5501,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; @@ -5509,7 +5509,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; @@ -5517,7 +5517,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; @@ -5525,7 +5525,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; @@ -5533,7 +5533,7 @@ type GeneratedTests () = |] [] - member __.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member _.``SBytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (SBytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; @@ -5541,157 +5541,157 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.Array E.I.equals``() = + member _.``NullableSbytes.Collection.Array E.I.equals``() = validate (NullableSbytes.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.Array E.I.equal``() = + member _.``NullableSbytes.Collection.Array E.I.equal``() = validate (NullableSbytes.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.Array E.I.not_equal``() = + member _.``NullableSbytes.Collection.Array E.I.not_equal``() = validate (NullableSbytes.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableSbytes.Collection.Array E.N.equals``() = + member _.``NullableSbytes.Collection.Array E.N.equals``() = validate (NullableSbytes.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.Array E.N.equal``() = + member _.``NullableSbytes.Collection.Array E.N.equal``() = validate (NullableSbytes.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.Array E.N.not_equal``() = + member _.``NullableSbytes.Collection.Array E.N.not_equal``() = validate (NullableSbytes.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableSbytes.Collection.OptionArray E.I.equals``() = + member _.``NullableSbytes.Collection.OptionArray E.I.equals``() = validate (NullableSbytes.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.OptionArray E.I.equal``() = + member _.``NullableSbytes.Collection.OptionArray E.I.equal``() = validate (NullableSbytes.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.OptionArray E.I.not_equal``() = + member _.``NullableSbytes.Collection.OptionArray E.I.not_equal``() = validate (NullableSbytes.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``NullableSbytes.Collection.OptionArray E.N.equals``() = + member _.``NullableSbytes.Collection.OptionArray E.N.equals``() = validate (NullableSbytes.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.OptionArray E.N.equal``() = + member _.``NullableSbytes.Collection.OptionArray E.N.equal``() = validate (NullableSbytes.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.OptionArray E.N.not_equal``() = + member _.``NullableSbytes.Collection.OptionArray E.N.not_equal``() = validate (NullableSbytes.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``NullableSbytes.Collection.RefArray E.I.equals``() = + member _.``NullableSbytes.Collection.RefArray E.I.equals``() = validate (NullableSbytes.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.RefArray E.I.equal``() = + member _.``NullableSbytes.Collection.RefArray E.I.equal``() = validate (NullableSbytes.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.RefArray E.I.not_equal``() = + member _.``NullableSbytes.Collection.RefArray E.I.not_equal``() = validate (NullableSbytes.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableSbytes.Collection.RefArray E.N.equals``() = + member _.``NullableSbytes.Collection.RefArray E.N.equals``() = validate (NullableSbytes.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.RefArray E.N.equal``() = + member _.``NullableSbytes.Collection.RefArray E.N.equal``() = validate (NullableSbytes.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.RefArray E.N.not_equal``() = + member _.``NullableSbytes.Collection.RefArray E.N.not_equal``() = validate (NullableSbytes.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableSbytes.Collection.RefWrapArray E.I.equals``() = + member _.``NullableSbytes.Collection.RefWrapArray E.I.equals``() = validate (NullableSbytes.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.RefWrapArray E.I.equal``() = + member _.``NullableSbytes.Collection.RefWrapArray E.I.equal``() = validate (NullableSbytes.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.RefWrapArray E.I.not_equal``() = + member _.``NullableSbytes.Collection.RefWrapArray E.I.not_equal``() = validate (NullableSbytes.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableSbytes.Collection.RefWrapArray E.N.equals``() = + member _.``NullableSbytes.Collection.RefWrapArray E.N.equals``() = validate (NullableSbytes.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.RefWrapArray E.N.equal``() = + member _.``NullableSbytes.Collection.RefWrapArray E.N.equal``() = validate (NullableSbytes.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.RefWrapArray E.N.not_equal``() = + member _.``NullableSbytes.Collection.RefWrapArray E.N.not_equal``() = validate (NullableSbytes.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableSbytes.Collection.UnionArray E.I.equals``() = + member _.``NullableSbytes.Collection.UnionArray E.I.equals``() = validate (NullableSbytes.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -5741,7 +5741,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.UnionArray E.I.equal``() = + member _.``NullableSbytes.Collection.UnionArray E.I.equal``() = validate (NullableSbytes.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -5791,7 +5791,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.UnionArray E.I.not_equal``() = + member _.``NullableSbytes.Collection.UnionArray E.I.not_equal``() = validate (NullableSbytes.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -5841,7 +5841,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.UnionArray E.N.equals``() = + member _.``NullableSbytes.Collection.UnionArray E.N.equals``() = validate (NullableSbytes.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -5891,7 +5891,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.UnionArray E.N.equal``() = + member _.``NullableSbytes.Collection.UnionArray E.N.equal``() = validate (NullableSbytes.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -5941,7 +5941,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.UnionArray E.N.not_equal``() = + member _.``NullableSbytes.Collection.UnionArray E.N.not_equal``() = validate (NullableSbytes.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -5991,7 +5991,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.UnionWrapArray E.I.equals``() = + member _.``NullableSbytes.Collection.UnionWrapArray E.I.equals``() = validate (NullableSbytes.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -6041,7 +6041,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.UnionWrapArray E.I.equal``() = + member _.``NullableSbytes.Collection.UnionWrapArray E.I.equal``() = validate (NullableSbytes.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -6091,7 +6091,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.UnionWrapArray E.I.not_equal``() = + member _.``NullableSbytes.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableSbytes.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -6141,7 +6141,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.UnionWrapArray E.N.equals``() = + member _.``NullableSbytes.Collection.UnionWrapArray E.N.equals``() = validate (NullableSbytes.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -6191,7 +6191,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.UnionWrapArray E.N.equal``() = + member _.``NullableSbytes.Collection.UnionWrapArray E.N.equal``() = validate (NullableSbytes.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -6241,7 +6241,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.UnionWrapArray E.N.not_equal``() = + member _.``NullableSbytes.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableSbytes.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -6291,79 +6291,79 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.ValueArray E.I.equals``() = + member _.``NullableSbytes.Collection.ValueArray E.I.equals``() = validate (NullableSbytes.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.ValueArray E.I.equal``() = + member _.``NullableSbytes.Collection.ValueArray E.I.equal``() = validate (NullableSbytes.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.ValueArray E.I.not_equal``() = + member _.``NullableSbytes.Collection.ValueArray E.I.not_equal``() = validate (NullableSbytes.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableSbytes.Collection.ValueArray E.N.equals``() = + member _.``NullableSbytes.Collection.ValueArray E.N.equals``() = validate (NullableSbytes.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.ValueArray E.N.equal``() = + member _.``NullableSbytes.Collection.ValueArray E.N.equal``() = validate (NullableSbytes.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.ValueArray E.N.not_equal``() = + member _.``NullableSbytes.Collection.ValueArray E.N.not_equal``() = validate (NullableSbytes.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableSbytes.Collection.ValueWrapArray E.I.equals``() = + member _.``NullableSbytes.Collection.ValueWrapArray E.I.equals``() = validate (NullableSbytes.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.ValueWrapArray E.I.equal``() = + member _.``NullableSbytes.Collection.ValueWrapArray E.I.equal``() = validate (NullableSbytes.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.ValueWrapArray E.I.not_equal``() = + member _.``NullableSbytes.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableSbytes.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableSbytes.Collection.ValueWrapArray E.N.equals``() = + member _.``NullableSbytes.Collection.ValueWrapArray E.N.equals``() = validate (NullableSbytes.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.ValueWrapArray E.N.equal``() = + member _.``NullableSbytes.Collection.ValueWrapArray E.N.equal``() = validate (NullableSbytes.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableSbytes.Collection.ValueWrapArray E.N.not_equal``() = + member _.``NullableSbytes.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableSbytes.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableSbytes.Collection.ArrayArray E.I.equals``() = + member _.``NullableSbytes.Collection.ArrayArray E.I.equals``() = validate (NullableSbytes.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -6372,7 +6372,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.ArrayArray E.I.equal``() = + member _.``NullableSbytes.Collection.ArrayArray E.I.equal``() = validate (NullableSbytes.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -6381,7 +6381,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.ArrayArray E.I.not_equal``() = + member _.``NullableSbytes.Collection.ArrayArray E.I.not_equal``() = validate (NullableSbytes.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -6390,7 +6390,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.ArrayArray E.N.equals``() = + member _.``NullableSbytes.Collection.ArrayArray E.N.equals``() = validate (NullableSbytes.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -6399,7 +6399,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.ArrayArray E.N.equal``() = + member _.``NullableSbytes.Collection.ArrayArray E.N.equal``() = validate (NullableSbytes.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -6408,7 +6408,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.ArrayArray E.N.not_equal``() = + member _.``NullableSbytes.Collection.ArrayArray E.N.not_equal``() = validate (NullableSbytes.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -6417,7 +6417,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.ListArray E.I.equals``() = + member _.``NullableSbytes.Collection.ListArray E.I.equals``() = validate (NullableSbytes.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -6426,7 +6426,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.ListArray E.I.equal``() = + member _.``NullableSbytes.Collection.ListArray E.I.equal``() = validate (NullableSbytes.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -6435,7 +6435,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.ListArray E.I.not_equal``() = + member _.``NullableSbytes.Collection.ListArray E.I.not_equal``() = validate (NullableSbytes.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -6444,7 +6444,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.ListArray E.N.equals``() = + member _.``NullableSbytes.Collection.ListArray E.N.equals``() = validate (NullableSbytes.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -6453,7 +6453,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.ListArray E.N.equal``() = + member _.``NullableSbytes.Collection.ListArray E.N.equal``() = validate (NullableSbytes.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -6462,7 +6462,7 @@ type GeneratedTests () = |] [] - member __.``NullableSbytes.Collection.ListArray E.N.not_equal``() = + member _.``NullableSbytes.Collection.ListArray E.N.not_equal``() = validate (NullableSbytes.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -6471,391 +6471,391 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.Array C.I.equals``() = + member _.``Int16s.Collection.Array C.I.equals``() = validate (Int16s.Collection.Array) C.I.equals [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.Array C.I.equal``() = + member _.``Int16s.Collection.Array C.I.equal``() = validate (Int16s.Collection.Array) C.I.equal [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.Array C.I.not_equal``() = + member _.``Int16s.Collection.Array C.I.not_equal``() = validate (Int16s.Collection.Array) C.I.not_equal [| 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int16s.Collection.Array C.I.compare``() = + member _.``Int16s.Collection.Array C.I.compare``() = validate (Int16s.Collection.Array) C.I.compare [| 0;0;1;1;1;0;0;1;1;1;-1;-1;0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0 |] [] - member __.``Int16s.Collection.Array C.I.less_than``() = + member _.``Int16s.Collection.Array C.I.less_than``() = validate (Int16s.Collection.Array) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 |] [] - member __.``Int16s.Collection.Array C.I.less_or_equal``() = + member _.``Int16s.Collection.Array C.I.less_or_equal``() = validate (Int16s.Collection.Array) C.I.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 |] [] - member __.``Int16s.Collection.Array C.I.greater_than``() = + member _.``Int16s.Collection.Array C.I.greater_than``() = validate (Int16s.Collection.Array) C.I.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 |] [] - member __.``Int16s.Collection.Array C.I.greater_or_equal``() = + member _.``Int16s.Collection.Array C.I.greater_or_equal``() = validate (Int16s.Collection.Array) C.I.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 |] [] - member __.``Int16s.Collection.Array C.N.equals``() = + member _.``Int16s.Collection.Array C.N.equals``() = validate (Int16s.Collection.Array) C.N.equals [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.Array C.N.equal``() = + member _.``Int16s.Collection.Array C.N.equal``() = validate (Int16s.Collection.Array) C.N.equal [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.Array C.N.not_equal``() = + member _.``Int16s.Collection.Array C.N.not_equal``() = validate (Int16s.Collection.Array) C.N.not_equal [| 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int16s.Collection.Array C.N.compare``() = + member _.``Int16s.Collection.Array C.N.compare``() = validate (Int16s.Collection.Array) C.N.compare [| 0;0;1;1;1;0;0;1;1;1;-1;-1;0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0 |] [] - member __.``Int16s.Collection.Array C.N.less_than``() = + member _.``Int16s.Collection.Array C.N.less_than``() = validate (Int16s.Collection.Array) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 |] [] - member __.``Int16s.Collection.Array C.N.less_or_equal``() = + member _.``Int16s.Collection.Array C.N.less_or_equal``() = validate (Int16s.Collection.Array) C.N.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 |] [] - member __.``Int16s.Collection.Array C.N.greater_than``() = + member _.``Int16s.Collection.Array C.N.greater_than``() = validate (Int16s.Collection.Array) C.N.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 |] [] - member __.``Int16s.Collection.Array C.N.greater_or_equal``() = + member _.``Int16s.Collection.Array C.N.greater_or_equal``() = validate (Int16s.Collection.Array) C.N.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 |] [] - member __.``Int16s.Collection.OptionArray C.I.equals``() = + member _.``Int16s.Collection.OptionArray C.I.equals``() = validate (Int16s.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.OptionArray C.I.equal``() = + member _.``Int16s.Collection.OptionArray C.I.equal``() = validate (Int16s.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.OptionArray C.I.not_equal``() = + member _.``Int16s.Collection.OptionArray C.I.not_equal``() = validate (Int16s.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Int16s.Collection.OptionArray C.I.compare``() = + member _.``Int16s.Collection.OptionArray C.I.compare``() = validate (Int16s.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;0;32768;32767;32766;1;0;0;32768;32767;32766;1;-32768;-32768;0;-1;-2;1;-32767;-32767;1;0;-1;1;-32766;-32766;2;1;0 |] [] - member __.``Int16s.Collection.OptionArray C.I.less_than``() = + member _.``Int16s.Collection.OptionArray C.I.less_than``() = validate (Int16s.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;0;1;1;0;0;1;0;1;1;0;0;0 |] [] - member __.``Int16s.Collection.OptionArray C.I.less_or_equal``() = + member _.``Int16s.Collection.OptionArray C.I.less_or_equal``() = validate (Int16s.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;0;1;1;0;1;1;0;1;1;0;0;1 |] [] - member __.``Int16s.Collection.OptionArray C.I.greater_than``() = + member _.``Int16s.Collection.OptionArray C.I.greater_than``() = validate (Int16s.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;1;0;0;1;0;0;1;1;0 |] [] - member __.``Int16s.Collection.OptionArray C.I.greater_or_equal``() = + member _.``Int16s.Collection.OptionArray C.I.greater_or_equal``() = validate (Int16s.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;1;0;0;1;1;0;1;0;0;1;1;1 |] [] - member __.``Int16s.Collection.OptionArray C.N.equals``() = + member _.``Int16s.Collection.OptionArray C.N.equals``() = validate (Int16s.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.OptionArray C.N.equal``() = + member _.``Int16s.Collection.OptionArray C.N.equal``() = validate (Int16s.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.OptionArray C.N.not_equal``() = + member _.``Int16s.Collection.OptionArray C.N.not_equal``() = validate (Int16s.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Int16s.Collection.OptionArray C.N.compare``() = + member _.``Int16s.Collection.OptionArray C.N.compare``() = validate (Int16s.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;0;32768;32767;32766;1;0;0;32768;32767;32766;1;-32768;-32768;0;-1;-2;1;-32767;-32767;1;0;-1;1;-32766;-32766;2;1;0 |] [] - member __.``Int16s.Collection.OptionArray C.N.less_than``() = + member _.``Int16s.Collection.OptionArray C.N.less_than``() = validate (Int16s.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;0;1;1;0;0;1;0;1;1;0;0;0 |] [] - member __.``Int16s.Collection.OptionArray C.N.less_or_equal``() = + member _.``Int16s.Collection.OptionArray C.N.less_or_equal``() = validate (Int16s.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;0;1;1;0;1;1;0;1;1;0;0;1 |] [] - member __.``Int16s.Collection.OptionArray C.N.greater_than``() = + member _.``Int16s.Collection.OptionArray C.N.greater_than``() = validate (Int16s.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;1;0;0;1;0;0;1;1;0 |] [] - member __.``Int16s.Collection.OptionArray C.N.greater_or_equal``() = + member _.``Int16s.Collection.OptionArray C.N.greater_or_equal``() = validate (Int16s.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;1;0;0;1;1;0;1;0;0;1;1;1 |] [] - member __.``Int16s.Collection.RefArray C.I.equals``() = + member _.``Int16s.Collection.RefArray C.I.equals``() = validate (Int16s.Collection.RefArray) C.I.equals [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.RefArray C.I.equal``() = + member _.``Int16s.Collection.RefArray C.I.equal``() = validate (Int16s.Collection.RefArray) C.I.equal [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.RefArray C.I.not_equal``() = + member _.``Int16s.Collection.RefArray C.I.not_equal``() = validate (Int16s.Collection.RefArray) C.I.not_equal [| 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int16s.Collection.RefArray C.I.compare``() = + member _.``Int16s.Collection.RefArray C.I.compare``() = validate (Int16s.Collection.RefArray) C.I.compare [| 0;0;1;1;1;0;0;1;1;1;-1;-1;0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0 |] [] - member __.``Int16s.Collection.RefArray C.I.less_than``() = + member _.``Int16s.Collection.RefArray C.I.less_than``() = validate (Int16s.Collection.RefArray) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 |] [] - member __.``Int16s.Collection.RefArray C.I.less_or_equal``() = + member _.``Int16s.Collection.RefArray C.I.less_or_equal``() = validate (Int16s.Collection.RefArray) C.I.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 |] [] - member __.``Int16s.Collection.RefArray C.I.greater_than``() = + member _.``Int16s.Collection.RefArray C.I.greater_than``() = validate (Int16s.Collection.RefArray) C.I.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 |] [] - member __.``Int16s.Collection.RefArray C.I.greater_or_equal``() = + member _.``Int16s.Collection.RefArray C.I.greater_or_equal``() = validate (Int16s.Collection.RefArray) C.I.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 |] [] - member __.``Int16s.Collection.RefArray C.N.equals``() = + member _.``Int16s.Collection.RefArray C.N.equals``() = validate (Int16s.Collection.RefArray) C.N.equals [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.RefArray C.N.equal``() = + member _.``Int16s.Collection.RefArray C.N.equal``() = validate (Int16s.Collection.RefArray) C.N.equal [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.RefArray C.N.not_equal``() = + member _.``Int16s.Collection.RefArray C.N.not_equal``() = validate (Int16s.Collection.RefArray) C.N.not_equal [| 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int16s.Collection.RefArray C.N.compare``() = + member _.``Int16s.Collection.RefArray C.N.compare``() = validate (Int16s.Collection.RefArray) C.N.compare [| 0;0;1;1;1;0;0;1;1;1;-1;-1;0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0 |] [] - member __.``Int16s.Collection.RefArray C.N.less_than``() = + member _.``Int16s.Collection.RefArray C.N.less_than``() = validate (Int16s.Collection.RefArray) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 |] [] - member __.``Int16s.Collection.RefArray C.N.less_or_equal``() = + member _.``Int16s.Collection.RefArray C.N.less_or_equal``() = validate (Int16s.Collection.RefArray) C.N.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 |] [] - member __.``Int16s.Collection.RefArray C.N.greater_than``() = + member _.``Int16s.Collection.RefArray C.N.greater_than``() = validate (Int16s.Collection.RefArray) C.N.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 |] [] - member __.``Int16s.Collection.RefArray C.N.greater_or_equal``() = + member _.``Int16s.Collection.RefArray C.N.greater_or_equal``() = validate (Int16s.Collection.RefArray) C.N.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 |] [] - member __.``Int16s.Collection.RefWrapArray C.I.equals``() = + member _.``Int16s.Collection.RefWrapArray C.I.equals``() = validate (Int16s.Collection.RefWrapArray) C.I.equals [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.RefWrapArray C.I.equal``() = + member _.``Int16s.Collection.RefWrapArray C.I.equal``() = validate (Int16s.Collection.RefWrapArray) C.I.equal [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.RefWrapArray C.I.not_equal``() = + member _.``Int16s.Collection.RefWrapArray C.I.not_equal``() = validate (Int16s.Collection.RefWrapArray) C.I.not_equal [| 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int16s.Collection.RefWrapArray C.I.compare``() = + member _.``Int16s.Collection.RefWrapArray C.I.compare``() = validate (Int16s.Collection.RefWrapArray) C.I.compare [| 0;0;32768;32767;32766;0;0;32768;32767;32766;-32768;-32768;0;-1;-2;-32767;-32767;1;0;-1;-32766;-32766;2;1;0 |] [] - member __.``Int16s.Collection.RefWrapArray C.I.less_than``() = + member _.``Int16s.Collection.RefWrapArray C.I.less_than``() = validate (Int16s.Collection.RefWrapArray) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 |] [] - member __.``Int16s.Collection.RefWrapArray C.I.less_or_equal``() = + member _.``Int16s.Collection.RefWrapArray C.I.less_or_equal``() = validate (Int16s.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 |] [] - member __.``Int16s.Collection.RefWrapArray C.I.greater_than``() = + member _.``Int16s.Collection.RefWrapArray C.I.greater_than``() = validate (Int16s.Collection.RefWrapArray) C.I.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 |] [] - member __.``Int16s.Collection.RefWrapArray C.I.greater_or_equal``() = + member _.``Int16s.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Int16s.Collection.RefWrapArray) C.I.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 |] [] - member __.``Int16s.Collection.RefWrapArray C.N.equals``() = + member _.``Int16s.Collection.RefWrapArray C.N.equals``() = validate (Int16s.Collection.RefWrapArray) C.N.equals [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.RefWrapArray C.N.equal``() = + member _.``Int16s.Collection.RefWrapArray C.N.equal``() = validate (Int16s.Collection.RefWrapArray) C.N.equal [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.RefWrapArray C.N.not_equal``() = + member _.``Int16s.Collection.RefWrapArray C.N.not_equal``() = validate (Int16s.Collection.RefWrapArray) C.N.not_equal [| 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int16s.Collection.RefWrapArray C.N.compare``() = + member _.``Int16s.Collection.RefWrapArray C.N.compare``() = validate (Int16s.Collection.RefWrapArray) C.N.compare [| 0;0;32768;32767;32766;0;0;32768;32767;32766;-32768;-32768;0;-1;-2;-32767;-32767;1;0;-1;-32766;-32766;2;1;0 |] [] - member __.``Int16s.Collection.RefWrapArray C.N.less_than``() = + member _.``Int16s.Collection.RefWrapArray C.N.less_than``() = validate (Int16s.Collection.RefWrapArray) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 |] [] - member __.``Int16s.Collection.RefWrapArray C.N.less_or_equal``() = + member _.``Int16s.Collection.RefWrapArray C.N.less_or_equal``() = validate (Int16s.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 |] [] - member __.``Int16s.Collection.RefWrapArray C.N.greater_than``() = + member _.``Int16s.Collection.RefWrapArray C.N.greater_than``() = validate (Int16s.Collection.RefWrapArray) C.N.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 |] [] - member __.``Int16s.Collection.RefWrapArray C.N.greater_or_equal``() = + member _.``Int16s.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Int16s.Collection.RefWrapArray) C.N.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 |] [] - member __.``Int16s.Collection.UnionArray C.I.equals``() = + member _.``Int16s.Collection.UnionArray C.I.equals``() = validate (Int16s.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1; @@ -6891,7 +6891,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionArray C.I.equal``() = + member _.``Int16s.Collection.UnionArray C.I.equal``() = validate (Int16s.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1; @@ -6927,7 +6927,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionArray C.I.not_equal``() = + member _.``Int16s.Collection.UnionArray C.I.not_equal``() = validate (Int16s.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0; @@ -6963,7 +6963,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionArray C.I.compare``() = + member _.``Int16s.Collection.UnionArray C.I.compare``() = validate (Int16s.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;0; @@ -6999,7 +6999,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionArray C.I.less_than``() = + member _.``Int16s.Collection.UnionArray C.I.less_than``() = validate (Int16s.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -7035,7 +7035,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionArray C.I.less_or_equal``() = + member _.``Int16s.Collection.UnionArray C.I.less_or_equal``() = validate (Int16s.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -7071,7 +7071,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionArray C.I.greater_than``() = + member _.``Int16s.Collection.UnionArray C.I.greater_than``() = validate (Int16s.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -7107,7 +7107,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionArray C.I.greater_or_equal``() = + member _.``Int16s.Collection.UnionArray C.I.greater_or_equal``() = validate (Int16s.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -7143,7 +7143,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionArray C.N.equals``() = + member _.``Int16s.Collection.UnionArray C.N.equals``() = validate (Int16s.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1; @@ -7179,7 +7179,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionArray C.N.equal``() = + member _.``Int16s.Collection.UnionArray C.N.equal``() = validate (Int16s.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1; @@ -7215,7 +7215,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionArray C.N.not_equal``() = + member _.``Int16s.Collection.UnionArray C.N.not_equal``() = validate (Int16s.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0; @@ -7251,7 +7251,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionArray C.N.compare``() = + member _.``Int16s.Collection.UnionArray C.N.compare``() = validate (Int16s.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;0;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;1;1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;0; @@ -7287,7 +7287,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionArray C.N.less_than``() = + member _.``Int16s.Collection.UnionArray C.N.less_than``() = validate (Int16s.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -7323,7 +7323,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionArray C.N.less_or_equal``() = + member _.``Int16s.Collection.UnionArray C.N.less_or_equal``() = validate (Int16s.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -7359,7 +7359,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionArray C.N.greater_than``() = + member _.``Int16s.Collection.UnionArray C.N.greater_than``() = validate (Int16s.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -7395,7 +7395,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionArray C.N.greater_or_equal``() = + member _.``Int16s.Collection.UnionArray C.N.greater_or_equal``() = validate (Int16s.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -7431,7 +7431,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionWrapArray C.I.equals``() = + member _.``Int16s.Collection.UnionWrapArray C.I.equals``() = validate (Int16s.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1; @@ -7467,7 +7467,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionWrapArray C.I.equal``() = + member _.``Int16s.Collection.UnionWrapArray C.I.equal``() = validate (Int16s.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1; @@ -7503,7 +7503,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionWrapArray C.I.not_equal``() = + member _.``Int16s.Collection.UnionWrapArray C.I.not_equal``() = validate (Int16s.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0; @@ -7539,7 +7539,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionWrapArray C.I.compare``() = + member _.``Int16s.Collection.UnionWrapArray C.I.compare``() = validate (Int16s.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;32768;-1;-2;-3;-3;-3;-3;32767;-1;-2;-3;-3;-3;-3;32766;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;0;-1;-2;-2;-2;-2;1;32768;-1;-2;-2;-2;-2;1;32767;-1;-2;-2;-2;-2;1;32766;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;0; @@ -7575,7 +7575,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionWrapArray C.I.less_than``() = + member _.``Int16s.Collection.UnionWrapArray C.I.less_than``() = validate (Int16s.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -7611,7 +7611,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionWrapArray C.I.less_or_equal``() = + member _.``Int16s.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Int16s.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -7647,7 +7647,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionWrapArray C.I.greater_than``() = + member _.``Int16s.Collection.UnionWrapArray C.I.greater_than``() = validate (Int16s.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -7683,7 +7683,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionWrapArray C.I.greater_or_equal``() = + member _.``Int16s.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Int16s.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -7719,7 +7719,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionWrapArray C.N.equals``() = + member _.``Int16s.Collection.UnionWrapArray C.N.equals``() = validate (Int16s.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1; @@ -7755,7 +7755,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionWrapArray C.N.equal``() = + member _.``Int16s.Collection.UnionWrapArray C.N.equal``() = validate (Int16s.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1; @@ -7791,7 +7791,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionWrapArray C.N.not_equal``() = + member _.``Int16s.Collection.UnionWrapArray C.N.not_equal``() = validate (Int16s.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0; @@ -7827,7 +7827,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionWrapArray C.N.compare``() = + member _.``Int16s.Collection.UnionWrapArray C.N.compare``() = validate (Int16s.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;32768;-1;-2;-3;-3;-3;-3;32767;-1;-2;-3;-3;-3;-3;32766;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;0;-1;-2;-2;-2;-2;1;32768;-1;-2;-2;-2;-2;1;32767;-1;-2;-2;-2;-2;1;32766;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;0; @@ -7863,7 +7863,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionWrapArray C.N.less_than``() = + member _.``Int16s.Collection.UnionWrapArray C.N.less_than``() = validate (Int16s.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -7899,7 +7899,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionWrapArray C.N.less_or_equal``() = + member _.``Int16s.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Int16s.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -7935,7 +7935,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionWrapArray C.N.greater_than``() = + member _.``Int16s.Collection.UnionWrapArray C.N.greater_than``() = validate (Int16s.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -7971,7 +7971,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.UnionWrapArray C.N.greater_or_equal``() = + member _.``Int16s.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Int16s.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -8007,199 +8007,199 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ValueArray C.I.equals``() = + member _.``Int16s.Collection.ValueArray C.I.equals``() = validate (Int16s.Collection.ValueArray) C.I.equals [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.ValueArray C.I.equal``() = + member _.``Int16s.Collection.ValueArray C.I.equal``() = validate (Int16s.Collection.ValueArray) C.I.equal [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.ValueArray C.I.not_equal``() = + member _.``Int16s.Collection.ValueArray C.I.not_equal``() = validate (Int16s.Collection.ValueArray) C.I.not_equal [| 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int16s.Collection.ValueArray C.I.compare``() = + member _.``Int16s.Collection.ValueArray C.I.compare``() = validate (Int16s.Collection.ValueArray) C.I.compare [| 0;0;1;1;1;0;0;1;1;1;-1;-1;0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0 |] [] - member __.``Int16s.Collection.ValueArray C.I.less_than``() = + member _.``Int16s.Collection.ValueArray C.I.less_than``() = validate (Int16s.Collection.ValueArray) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 |] [] - member __.``Int16s.Collection.ValueArray C.I.less_or_equal``() = + member _.``Int16s.Collection.ValueArray C.I.less_or_equal``() = validate (Int16s.Collection.ValueArray) C.I.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 |] [] - member __.``Int16s.Collection.ValueArray C.I.greater_than``() = + member _.``Int16s.Collection.ValueArray C.I.greater_than``() = validate (Int16s.Collection.ValueArray) C.I.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 |] [] - member __.``Int16s.Collection.ValueArray C.I.greater_or_equal``() = + member _.``Int16s.Collection.ValueArray C.I.greater_or_equal``() = validate (Int16s.Collection.ValueArray) C.I.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 |] [] - member __.``Int16s.Collection.ValueArray C.N.equals``() = + member _.``Int16s.Collection.ValueArray C.N.equals``() = validate (Int16s.Collection.ValueArray) C.N.equals [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.ValueArray C.N.equal``() = + member _.``Int16s.Collection.ValueArray C.N.equal``() = validate (Int16s.Collection.ValueArray) C.N.equal [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.ValueArray C.N.not_equal``() = + member _.``Int16s.Collection.ValueArray C.N.not_equal``() = validate (Int16s.Collection.ValueArray) C.N.not_equal [| 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int16s.Collection.ValueArray C.N.compare``() = + member _.``Int16s.Collection.ValueArray C.N.compare``() = validate (Int16s.Collection.ValueArray) C.N.compare [| 0;0;1;1;1;0;0;1;1;1;-1;-1;0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0 |] [] - member __.``Int16s.Collection.ValueArray C.N.less_than``() = + member _.``Int16s.Collection.ValueArray C.N.less_than``() = validate (Int16s.Collection.ValueArray) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 |] [] - member __.``Int16s.Collection.ValueArray C.N.less_or_equal``() = + member _.``Int16s.Collection.ValueArray C.N.less_or_equal``() = validate (Int16s.Collection.ValueArray) C.N.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 |] [] - member __.``Int16s.Collection.ValueArray C.N.greater_than``() = + member _.``Int16s.Collection.ValueArray C.N.greater_than``() = validate (Int16s.Collection.ValueArray) C.N.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 |] [] - member __.``Int16s.Collection.ValueArray C.N.greater_or_equal``() = + member _.``Int16s.Collection.ValueArray C.N.greater_or_equal``() = validate (Int16s.Collection.ValueArray) C.N.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 |] [] - member __.``Int16s.Collection.ValueWrapArray C.I.equals``() = + member _.``Int16s.Collection.ValueWrapArray C.I.equals``() = validate (Int16s.Collection.ValueWrapArray) C.I.equals [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.ValueWrapArray C.I.equal``() = + member _.``Int16s.Collection.ValueWrapArray C.I.equal``() = validate (Int16s.Collection.ValueWrapArray) C.I.equal [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.ValueWrapArray C.I.not_equal``() = + member _.``Int16s.Collection.ValueWrapArray C.I.not_equal``() = validate (Int16s.Collection.ValueWrapArray) C.I.not_equal [| 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int16s.Collection.ValueWrapArray C.I.compare``() = + member _.``Int16s.Collection.ValueWrapArray C.I.compare``() = validate (Int16s.Collection.ValueWrapArray) C.I.compare [| 0;0;32768;32767;32766;0;0;32768;32767;32766;-32768;-32768;0;-1;-2;-32767;-32767;1;0;-1;-32766;-32766;2;1;0 |] [] - member __.``Int16s.Collection.ValueWrapArray C.I.less_than``() = + member _.``Int16s.Collection.ValueWrapArray C.I.less_than``() = validate (Int16s.Collection.ValueWrapArray) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 |] [] - member __.``Int16s.Collection.ValueWrapArray C.I.less_or_equal``() = + member _.``Int16s.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Int16s.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 |] [] - member __.``Int16s.Collection.ValueWrapArray C.I.greater_than``() = + member _.``Int16s.Collection.ValueWrapArray C.I.greater_than``() = validate (Int16s.Collection.ValueWrapArray) C.I.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 |] [] - member __.``Int16s.Collection.ValueWrapArray C.I.greater_or_equal``() = + member _.``Int16s.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Int16s.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 |] [] - member __.``Int16s.Collection.ValueWrapArray C.N.equals``() = + member _.``Int16s.Collection.ValueWrapArray C.N.equals``() = validate (Int16s.Collection.ValueWrapArray) C.N.equals [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.ValueWrapArray C.N.equal``() = + member _.``Int16s.Collection.ValueWrapArray C.N.equal``() = validate (Int16s.Collection.ValueWrapArray) C.N.equal [| 1;1;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int16s.Collection.ValueWrapArray C.N.not_equal``() = + member _.``Int16s.Collection.ValueWrapArray C.N.not_equal``() = validate (Int16s.Collection.ValueWrapArray) C.N.not_equal [| 0;0;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int16s.Collection.ValueWrapArray C.N.compare``() = + member _.``Int16s.Collection.ValueWrapArray C.N.compare``() = validate (Int16s.Collection.ValueWrapArray) C.N.compare [| 0;0;32768;32767;32766;0;0;32768;32767;32766;-32768;-32768;0;-1;-2;-32767;-32767;1;0;-1;-32766;-32766;2;1;0 |] [] - member __.``Int16s.Collection.ValueWrapArray C.N.less_than``() = + member _.``Int16s.Collection.ValueWrapArray C.N.less_than``() = validate (Int16s.Collection.ValueWrapArray) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;0;0;1;1;1;0;0;0 |] [] - member __.``Int16s.Collection.ValueWrapArray C.N.less_or_equal``() = + member _.``Int16s.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Int16s.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1 |] [] - member __.``Int16s.Collection.ValueWrapArray C.N.greater_than``() = + member _.``Int16s.Collection.ValueWrapArray C.N.greater_than``() = validate (Int16s.Collection.ValueWrapArray) C.N.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0 |] [] - member __.``Int16s.Collection.ValueWrapArray C.N.greater_or_equal``() = + member _.``Int16s.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Int16s.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;1;1;0;0;0;1;1;1 |] [] - member __.``Int16s.Collection.ArrayArray C.I.equals``() = + member _.``Int16s.Collection.ArrayArray C.I.equals``() = validate (Int16s.Collection.ArrayArray) C.I.equals [| 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8207,7 +8207,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray C.I.equal``() = + member _.``Int16s.Collection.ArrayArray C.I.equal``() = validate (Int16s.Collection.ArrayArray) C.I.equal [| 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8215,7 +8215,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray C.I.not_equal``() = + member _.``Int16s.Collection.ArrayArray C.I.not_equal``() = validate (Int16s.Collection.ArrayArray) C.I.not_equal [| 0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -8223,7 +8223,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray C.I.compare``() = + member _.``Int16s.Collection.ArrayArray C.I.compare``() = validate (Int16s.Collection.ArrayArray) C.I.compare [| 0;0;32768;32767;32766;-1;-1;-1;-1;-1;0;0;32768;32767;32766;-1;-1;-1;-1;-1;-32768;-32768;0;-1;-2;-1;-1;-1;-1;-1;-32767;-32767;1;0;-1;-1;-1;-1;-1;-1; -32766;-32766;2;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;32768;32768;32767;32766;1;1;1;1;1;-32768;0;32768;32767;32766;1;1;1;1;1;-32768;-32768;0;-1;-2; @@ -8231,7 +8231,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray C.I.less_than``() = + member _.``Int16s.Collection.ArrayArray C.I.less_than``() = validate (Int16s.Collection.ArrayArray) C.I.less_than [| 0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1; 1;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;1;1; @@ -8239,7 +8239,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray C.I.less_or_equal``() = + member _.``Int16s.Collection.ArrayArray C.I.less_or_equal``() = validate (Int16s.Collection.ArrayArray) C.I.less_or_equal [| 1;1;0;0;0;1;1;1;1;1;1;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 1;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;1;1;1; @@ -8247,7 +8247,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray C.I.greater_than``() = + member _.``Int16s.Collection.ArrayArray C.I.greater_than``() = validate (Int16s.Collection.ArrayArray) C.I.greater_than [| 0;0;1;1;1;0;0;0;0;0;0;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 0;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;0;0;0; @@ -8255,7 +8255,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray C.I.greater_or_equal``() = + member _.``Int16s.Collection.ArrayArray C.I.greater_or_equal``() = validate (Int16s.Collection.ArrayArray) C.I.greater_or_equal [| 1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0; 0;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;0;0; @@ -8263,7 +8263,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray C.N.equals``() = + member _.``Int16s.Collection.ArrayArray C.N.equals``() = validate (Int16s.Collection.ArrayArray) C.N.equals [| 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8271,7 +8271,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray C.N.equal``() = + member _.``Int16s.Collection.ArrayArray C.N.equal``() = validate (Int16s.Collection.ArrayArray) C.N.equal [| 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8279,7 +8279,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray C.N.not_equal``() = + member _.``Int16s.Collection.ArrayArray C.N.not_equal``() = validate (Int16s.Collection.ArrayArray) C.N.not_equal [| 0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -8287,7 +8287,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray C.N.compare``() = + member _.``Int16s.Collection.ArrayArray C.N.compare``() = validate (Int16s.Collection.ArrayArray) C.N.compare [| 0;0;32768;32767;32766;-1;-1;-1;-1;-1;0;0;32768;32767;32766;-1;-1;-1;-1;-1;-32768;-32768;0;-1;-2;-1;-1;-1;-1;-1;-32767;-32767;1;0;-1;-1;-1;-1;-1;-1; -32766;-32766;2;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;32768;32768;32767;32766;1;1;1;1;1;-32768;0;32768;32767;32766;1;1;1;1;1;-32768;-32768;0;-1;-2; @@ -8295,7 +8295,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray C.N.less_than``() = + member _.``Int16s.Collection.ArrayArray C.N.less_than``() = validate (Int16s.Collection.ArrayArray) C.N.less_than [| 0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1; 1;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;1;1; @@ -8303,7 +8303,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray C.N.less_or_equal``() = + member _.``Int16s.Collection.ArrayArray C.N.less_or_equal``() = validate (Int16s.Collection.ArrayArray) C.N.less_or_equal [| 1;1;0;0;0;1;1;1;1;1;1;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 1;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;1;1;1; @@ -8311,7 +8311,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray C.N.greater_than``() = + member _.``Int16s.Collection.ArrayArray C.N.greater_than``() = validate (Int16s.Collection.ArrayArray) C.N.greater_than [| 0;0;1;1;1;0;0;0;0;0;0;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 0;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;0;0;0; @@ -8319,7 +8319,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray C.N.greater_or_equal``() = + member _.``Int16s.Collection.ArrayArray C.N.greater_or_equal``() = validate (Int16s.Collection.ArrayArray) C.N.greater_or_equal [| 1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0; 0;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;0;0; @@ -8327,7 +8327,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ListArray C.I.equals``() = + member _.``Int16s.Collection.ListArray C.I.equals``() = validate (Int16s.Collection.ListArray) C.I.equals [| 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8335,7 +8335,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ListArray C.I.equal``() = + member _.``Int16s.Collection.ListArray C.I.equal``() = validate (Int16s.Collection.ListArray) C.I.equal [| 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8343,7 +8343,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ListArray C.I.not_equal``() = + member _.``Int16s.Collection.ListArray C.I.not_equal``() = validate (Int16s.Collection.ListArray) C.I.not_equal [| 0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -8351,7 +8351,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ListArray C.I.compare``() = + member _.``Int16s.Collection.ListArray C.I.compare``() = validate (Int16s.Collection.ListArray) C.I.compare [| 0;0;32768;32767;32766;-1;-1;32768;32767;32766;0;0;32768;32767;32766;-1;-1;32768;32767;32766;-32768;-32768;0;-1;-2;-32768;-32768;-1;-1;-2;-32767;-32767;1;0;-1;-32767;-32767;1;-1;-1; -32766;-32766;2;1;0;-32766;-32766;2;1;-1;1;1;32768;32767;32766;0;32768;32768;32767;32766;1;1;32768;32767;32766;-32768;0;32768;32767;32766;-32768;-32768;1;-1;-2;-32768;-32768;0;-1;-2; @@ -8359,7 +8359,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ListArray C.I.less_than``() = + member _.``Int16s.Collection.ListArray C.I.less_than``() = validate (Int16s.Collection.ListArray) C.I.less_than [| 0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;0;1;1; 1;1;0;0;0;1;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0;1;1;1;1;0;1;1; @@ -8367,7 +8367,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ListArray C.I.less_or_equal``() = + member _.``Int16s.Collection.ListArray C.I.less_or_equal``() = validate (Int16s.Collection.ListArray) C.I.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;0;1;1; 1;1;0;0;1;1;1;0;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;1;0;1;1;1;1;1;1;1; @@ -8375,7 +8375,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ListArray C.I.greater_than``() = + member _.``Int16s.Collection.ListArray C.I.greater_than``() = validate (Int16s.Collection.ListArray) C.I.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0; 0;0;1;1;0;0;0;1;1;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;0;0;1;0;0;0;0;0;0;0; @@ -8383,7 +8383,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ListArray C.I.greater_or_equal``() = + member _.``Int16s.Collection.ListArray C.I.greater_or_equal``() = validate (Int16s.Collection.ListArray) C.I.greater_or_equal [| 1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;0;0; 0;0;1;1;1;0;0;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1;0;0;0;0;1;0;0; @@ -8391,7 +8391,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ListArray C.N.equals``() = + member _.``Int16s.Collection.ListArray C.N.equals``() = validate (Int16s.Collection.ListArray) C.N.equals [| 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8399,7 +8399,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ListArray C.N.equal``() = + member _.``Int16s.Collection.ListArray C.N.equal``() = validate (Int16s.Collection.ListArray) C.N.equal [| 1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8407,7 +8407,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ListArray C.N.not_equal``() = + member _.``Int16s.Collection.ListArray C.N.not_equal``() = validate (Int16s.Collection.ListArray) C.N.not_equal [| 0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -8415,7 +8415,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ListArray C.N.compare``() = + member _.``Int16s.Collection.ListArray C.N.compare``() = validate (Int16s.Collection.ListArray) C.N.compare [| 0;0;32768;32767;32766;-1;-1;32768;32767;32766;0;0;32768;32767;32766;-1;-1;32768;32767;32766;-32768;-32768;0;-1;-2;-32768;-32768;-1;-1;-2;-32767;-32767;1;0;-1;-32767;-32767;1;-1;-1; -32766;-32766;2;1;0;-32766;-32766;2;1;-1;1;1;32768;32767;32766;0;32768;32768;32767;32766;1;1;32768;32767;32766;-32768;0;32768;32767;32766;-32768;-32768;1;-1;-2;-32768;-32768;0;-1;-2; @@ -8423,7 +8423,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ListArray C.N.less_than``() = + member _.``Int16s.Collection.ListArray C.N.less_than``() = validate (Int16s.Collection.ListArray) C.N.less_than [| 0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;0;1;1; 1;1;0;0;0;1;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;0;1;1;1;1;0;1;1; @@ -8431,7 +8431,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ListArray C.N.less_or_equal``() = + member _.``Int16s.Collection.ListArray C.N.less_or_equal``() = validate (Int16s.Collection.ListArray) C.N.less_or_equal [| 1;1;0;0;0;1;1;0;0;0;1;1;0;0;0;1;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;0;1;1; 1;1;0;0;1;1;1;0;0;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;1;0;1;1;1;1;1;1;1; @@ -8439,7 +8439,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ListArray C.N.greater_than``() = + member _.``Int16s.Collection.ListArray C.N.greater_than``() = validate (Int16s.Collection.ListArray) C.N.greater_than [| 0;0;1;1;1;0;0;1;1;1;0;0;1;1;1;0;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0; 0;0;1;1;0;0;0;1;1;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;1;0;0;1;0;0;0;0;0;0;0; @@ -8447,7 +8447,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ListArray C.N.greater_or_equal``() = + member _.``Int16s.Collection.ListArray C.N.greater_or_equal``() = validate (Int16s.Collection.ListArray) C.N.greater_or_equal [| 1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;0;0; 0;0;1;1;1;0;0;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;0;0;1;0;0;0;0;1;0;0; @@ -8455,7 +8455,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;1;0;0;0;1;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8463,7 +8463,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;1;0;0;0;1;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8471,7 +8471,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;0;1;1;1;0;1;1;1;1;0;0;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -8479,7 +8479,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;0;1;1;1;0;1;1;1;1;0;0;1;1;1;0;1;1;1;1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;1;-1;-1; -1;-1;1;1;0;-1;1;1;1;-1;0;0;1;1;1;0;1;1;1;1;-1;-1;1;-1;-1;-1;0;1;-1;-1;-1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -8487,7 +8487,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;1;1; 1;1;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;0;0;1;1;1;1;0;1;1;1;1;0;1;1; @@ -8495,7 +8495,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;0;0;0;1;0;0;0;0;1;1;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;0;0;1;1; 1;1;0;0;1;1;0;0;0;1;1;1;0;0;0;1;0;0;0;0;1;1;0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;1;1;1; @@ -8503,7 +8503,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;1;1;1;0;1;1;1;1;0;0;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;1;0;0; 0;0;1;1;0;0;1;1;1;0;0;0;1;1;1;0;1;1;1;1;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0; @@ -8511,7 +8511,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;1;1;0;0; 0;0;1;1;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;1;1;0;0;0;0;1;0;0;0;0;1;0;0; @@ -8519,7 +8519,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;1;0;0;0;1;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8527,7 +8527,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;1;0;0;0;1;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -8535,7 +8535,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;0;1;1;1;0;1;1;1;1;0;0;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -8543,7 +8543,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;0;1;1;1;0;1;1;1;1;0;0;1;1;1;0;1;1;1;1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;1;-1;-1; -1;-1;1;1;0;-1;1;1;1;-1;0;0;1;1;1;0;1;1;1;1;-1;-1;1;-1;-1;-1;0;1;-1;-1;-1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -8551,7 +8551,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;1;1; 1;1;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1;1;0;0;1;1;1;1;0;1;1;1;1;0;1;1; @@ -8559,7 +8559,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;0;0;0;1;0;0;0;0;1;1;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;0;0;1;1; 1;1;0;0;1;1;0;0;0;1;1;1;0;0;0;1;0;0;0;0;1;1;0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;1;1;1; @@ -8567,7 +8567,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;1;1;1;0;1;1;1;1;0;0;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;1;0;0; 0;0;1;1;0;0;1;1;1;0;0;0;1;1;1;0;1;1;1;1;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0; @@ -8575,7 +8575,7 @@ type GeneratedTests () = |] [] - member __.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member _.``Int16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Int16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;0;0;1;1;0;0; 0;0;1;1;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0;0;1;1;0;0;0;0;1;0;0;0;0;1;0;0; @@ -8583,157 +8583,157 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.Array E.I.equals``() = + member _.``NullableInt16s.Collection.Array E.I.equals``() = validate (NullableInt16s.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.Array E.I.equal``() = + member _.``NullableInt16s.Collection.Array E.I.equal``() = validate (NullableInt16s.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.Array E.I.not_equal``() = + member _.``NullableInt16s.Collection.Array E.I.not_equal``() = validate (NullableInt16s.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt16s.Collection.Array E.N.equals``() = + member _.``NullableInt16s.Collection.Array E.N.equals``() = validate (NullableInt16s.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.Array E.N.equal``() = + member _.``NullableInt16s.Collection.Array E.N.equal``() = validate (NullableInt16s.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.Array E.N.not_equal``() = + member _.``NullableInt16s.Collection.Array E.N.not_equal``() = validate (NullableInt16s.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt16s.Collection.OptionArray E.I.equals``() = + member _.``NullableInt16s.Collection.OptionArray E.I.equals``() = validate (NullableInt16s.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.OptionArray E.I.equal``() = + member _.``NullableInt16s.Collection.OptionArray E.I.equal``() = validate (NullableInt16s.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.OptionArray E.I.not_equal``() = + member _.``NullableInt16s.Collection.OptionArray E.I.not_equal``() = validate (NullableInt16s.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``NullableInt16s.Collection.OptionArray E.N.equals``() = + member _.``NullableInt16s.Collection.OptionArray E.N.equals``() = validate (NullableInt16s.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.OptionArray E.N.equal``() = + member _.``NullableInt16s.Collection.OptionArray E.N.equal``() = validate (NullableInt16s.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.OptionArray E.N.not_equal``() = + member _.``NullableInt16s.Collection.OptionArray E.N.not_equal``() = validate (NullableInt16s.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``NullableInt16s.Collection.RefArray E.I.equals``() = + member _.``NullableInt16s.Collection.RefArray E.I.equals``() = validate (NullableInt16s.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.RefArray E.I.equal``() = + member _.``NullableInt16s.Collection.RefArray E.I.equal``() = validate (NullableInt16s.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.RefArray E.I.not_equal``() = + member _.``NullableInt16s.Collection.RefArray E.I.not_equal``() = validate (NullableInt16s.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt16s.Collection.RefArray E.N.equals``() = + member _.``NullableInt16s.Collection.RefArray E.N.equals``() = validate (NullableInt16s.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.RefArray E.N.equal``() = + member _.``NullableInt16s.Collection.RefArray E.N.equal``() = validate (NullableInt16s.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.RefArray E.N.not_equal``() = + member _.``NullableInt16s.Collection.RefArray E.N.not_equal``() = validate (NullableInt16s.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt16s.Collection.RefWrapArray E.I.equals``() = + member _.``NullableInt16s.Collection.RefWrapArray E.I.equals``() = validate (NullableInt16s.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.RefWrapArray E.I.equal``() = + member _.``NullableInt16s.Collection.RefWrapArray E.I.equal``() = validate (NullableInt16s.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.RefWrapArray E.I.not_equal``() = + member _.``NullableInt16s.Collection.RefWrapArray E.I.not_equal``() = validate (NullableInt16s.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt16s.Collection.RefWrapArray E.N.equals``() = + member _.``NullableInt16s.Collection.RefWrapArray E.N.equals``() = validate (NullableInt16s.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.RefWrapArray E.N.equal``() = + member _.``NullableInt16s.Collection.RefWrapArray E.N.equal``() = validate (NullableInt16s.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.RefWrapArray E.N.not_equal``() = + member _.``NullableInt16s.Collection.RefWrapArray E.N.not_equal``() = validate (NullableInt16s.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt16s.Collection.UnionArray E.I.equals``() = + member _.``NullableInt16s.Collection.UnionArray E.I.equals``() = validate (NullableInt16s.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -8783,7 +8783,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.UnionArray E.I.equal``() = + member _.``NullableInt16s.Collection.UnionArray E.I.equal``() = validate (NullableInt16s.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -8833,7 +8833,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.UnionArray E.I.not_equal``() = + member _.``NullableInt16s.Collection.UnionArray E.I.not_equal``() = validate (NullableInt16s.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -8883,7 +8883,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.UnionArray E.N.equals``() = + member _.``NullableInt16s.Collection.UnionArray E.N.equals``() = validate (NullableInt16s.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -8933,7 +8933,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.UnionArray E.N.equal``() = + member _.``NullableInt16s.Collection.UnionArray E.N.equal``() = validate (NullableInt16s.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -8983,7 +8983,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.UnionArray E.N.not_equal``() = + member _.``NullableInt16s.Collection.UnionArray E.N.not_equal``() = validate (NullableInt16s.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -9033,7 +9033,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.UnionWrapArray E.I.equals``() = + member _.``NullableInt16s.Collection.UnionWrapArray E.I.equals``() = validate (NullableInt16s.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -9083,7 +9083,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.UnionWrapArray E.I.equal``() = + member _.``NullableInt16s.Collection.UnionWrapArray E.I.equal``() = validate (NullableInt16s.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -9133,7 +9133,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.UnionWrapArray E.I.not_equal``() = + member _.``NullableInt16s.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableInt16s.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -9183,7 +9183,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.UnionWrapArray E.N.equals``() = + member _.``NullableInt16s.Collection.UnionWrapArray E.N.equals``() = validate (NullableInt16s.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -9233,7 +9233,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.UnionWrapArray E.N.equal``() = + member _.``NullableInt16s.Collection.UnionWrapArray E.N.equal``() = validate (NullableInt16s.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -9283,7 +9283,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.UnionWrapArray E.N.not_equal``() = + member _.``NullableInt16s.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableInt16s.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -9333,79 +9333,79 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.ValueArray E.I.equals``() = + member _.``NullableInt16s.Collection.ValueArray E.I.equals``() = validate (NullableInt16s.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.ValueArray E.I.equal``() = + member _.``NullableInt16s.Collection.ValueArray E.I.equal``() = validate (NullableInt16s.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.ValueArray E.I.not_equal``() = + member _.``NullableInt16s.Collection.ValueArray E.I.not_equal``() = validate (NullableInt16s.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt16s.Collection.ValueArray E.N.equals``() = + member _.``NullableInt16s.Collection.ValueArray E.N.equals``() = validate (NullableInt16s.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.ValueArray E.N.equal``() = + member _.``NullableInt16s.Collection.ValueArray E.N.equal``() = validate (NullableInt16s.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.ValueArray E.N.not_equal``() = + member _.``NullableInt16s.Collection.ValueArray E.N.not_equal``() = validate (NullableInt16s.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt16s.Collection.ValueWrapArray E.I.equals``() = + member _.``NullableInt16s.Collection.ValueWrapArray E.I.equals``() = validate (NullableInt16s.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.ValueWrapArray E.I.equal``() = + member _.``NullableInt16s.Collection.ValueWrapArray E.I.equal``() = validate (NullableInt16s.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.ValueWrapArray E.I.not_equal``() = + member _.``NullableInt16s.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableInt16s.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt16s.Collection.ValueWrapArray E.N.equals``() = + member _.``NullableInt16s.Collection.ValueWrapArray E.N.equals``() = validate (NullableInt16s.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.ValueWrapArray E.N.equal``() = + member _.``NullableInt16s.Collection.ValueWrapArray E.N.equal``() = validate (NullableInt16s.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt16s.Collection.ValueWrapArray E.N.not_equal``() = + member _.``NullableInt16s.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableInt16s.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt16s.Collection.ArrayArray E.I.equals``() = + member _.``NullableInt16s.Collection.ArrayArray E.I.equals``() = validate (NullableInt16s.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -9414,7 +9414,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.ArrayArray E.I.equal``() = + member _.``NullableInt16s.Collection.ArrayArray E.I.equal``() = validate (NullableInt16s.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -9423,7 +9423,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.ArrayArray E.I.not_equal``() = + member _.``NullableInt16s.Collection.ArrayArray E.I.not_equal``() = validate (NullableInt16s.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -9432,7 +9432,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.ArrayArray E.N.equals``() = + member _.``NullableInt16s.Collection.ArrayArray E.N.equals``() = validate (NullableInt16s.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -9441,7 +9441,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.ArrayArray E.N.equal``() = + member _.``NullableInt16s.Collection.ArrayArray E.N.equal``() = validate (NullableInt16s.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -9450,7 +9450,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.ArrayArray E.N.not_equal``() = + member _.``NullableInt16s.Collection.ArrayArray E.N.not_equal``() = validate (NullableInt16s.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -9459,7 +9459,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.ListArray E.I.equals``() = + member _.``NullableInt16s.Collection.ListArray E.I.equals``() = validate (NullableInt16s.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -9468,7 +9468,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.ListArray E.I.equal``() = + member _.``NullableInt16s.Collection.ListArray E.I.equal``() = validate (NullableInt16s.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -9477,7 +9477,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.ListArray E.I.not_equal``() = + member _.``NullableInt16s.Collection.ListArray E.I.not_equal``() = validate (NullableInt16s.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -9486,7 +9486,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.ListArray E.N.equals``() = + member _.``NullableInt16s.Collection.ListArray E.N.equals``() = validate (NullableInt16s.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -9495,7 +9495,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.ListArray E.N.equal``() = + member _.``NullableInt16s.Collection.ListArray E.N.equal``() = validate (NullableInt16s.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -9504,7 +9504,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt16s.Collection.ListArray E.N.not_equal``() = + member _.``NullableInt16s.Collection.ListArray E.N.not_equal``() = validate (NullableInt16s.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -9513,391 +9513,391 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.Array C.I.equals``() = + member _.``Int32s.Collection.Array C.I.equals``() = validate (Int32s.Collection.Array) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.Array C.I.equal``() = + member _.``Int32s.Collection.Array C.I.equal``() = validate (Int32s.Collection.Array) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.Array C.I.not_equal``() = + member _.``Int32s.Collection.Array C.I.not_equal``() = validate (Int32s.Collection.Array) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int32s.Collection.Array C.I.compare``() = + member _.``Int32s.Collection.Array C.I.compare``() = validate (Int32s.Collection.Array) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Int32s.Collection.Array C.I.less_than``() = + member _.``Int32s.Collection.Array C.I.less_than``() = validate (Int32s.Collection.Array) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Int32s.Collection.Array C.I.less_or_equal``() = + member _.``Int32s.Collection.Array C.I.less_or_equal``() = validate (Int32s.Collection.Array) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Int32s.Collection.Array C.I.greater_than``() = + member _.``Int32s.Collection.Array C.I.greater_than``() = validate (Int32s.Collection.Array) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Int32s.Collection.Array C.I.greater_or_equal``() = + member _.``Int32s.Collection.Array C.I.greater_or_equal``() = validate (Int32s.Collection.Array) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Int32s.Collection.Array C.N.equals``() = + member _.``Int32s.Collection.Array C.N.equals``() = validate (Int32s.Collection.Array) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.Array C.N.equal``() = + member _.``Int32s.Collection.Array C.N.equal``() = validate (Int32s.Collection.Array) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.Array C.N.not_equal``() = + member _.``Int32s.Collection.Array C.N.not_equal``() = validate (Int32s.Collection.Array) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int32s.Collection.Array C.N.compare``() = + member _.``Int32s.Collection.Array C.N.compare``() = validate (Int32s.Collection.Array) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Int32s.Collection.Array C.N.less_than``() = + member _.``Int32s.Collection.Array C.N.less_than``() = validate (Int32s.Collection.Array) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Int32s.Collection.Array C.N.less_or_equal``() = + member _.``Int32s.Collection.Array C.N.less_or_equal``() = validate (Int32s.Collection.Array) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Int32s.Collection.Array C.N.greater_than``() = + member _.``Int32s.Collection.Array C.N.greater_than``() = validate (Int32s.Collection.Array) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Int32s.Collection.Array C.N.greater_or_equal``() = + member _.``Int32s.Collection.Array C.N.greater_or_equal``() = validate (Int32s.Collection.Array) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Int32s.Collection.OptionArray C.I.equals``() = + member _.``Int32s.Collection.OptionArray C.I.equals``() = validate (Int32s.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.OptionArray C.I.equal``() = + member _.``Int32s.Collection.OptionArray C.I.equal``() = validate (Int32s.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.OptionArray C.I.not_equal``() = + member _.``Int32s.Collection.OptionArray C.I.not_equal``() = validate (Int32s.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Int32s.Collection.OptionArray C.I.compare``() = + member _.``Int32s.Collection.OptionArray C.I.compare``() = validate (Int32s.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;1;1;1;1;1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 |] [] - member __.``Int32s.Collection.OptionArray C.I.less_than``() = + member _.``Int32s.Collection.OptionArray C.I.less_than``() = validate (Int32s.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member __.``Int32s.Collection.OptionArray C.I.less_or_equal``() = + member _.``Int32s.Collection.OptionArray C.I.less_or_equal``() = validate (Int32s.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member __.``Int32s.Collection.OptionArray C.I.greater_than``() = + member _.``Int32s.Collection.OptionArray C.I.greater_than``() = validate (Int32s.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member __.``Int32s.Collection.OptionArray C.I.greater_or_equal``() = + member _.``Int32s.Collection.OptionArray C.I.greater_or_equal``() = validate (Int32s.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member __.``Int32s.Collection.OptionArray C.N.equals``() = + member _.``Int32s.Collection.OptionArray C.N.equals``() = validate (Int32s.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.OptionArray C.N.equal``() = + member _.``Int32s.Collection.OptionArray C.N.equal``() = validate (Int32s.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.OptionArray C.N.not_equal``() = + member _.``Int32s.Collection.OptionArray C.N.not_equal``() = validate (Int32s.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Int32s.Collection.OptionArray C.N.compare``() = + member _.``Int32s.Collection.OptionArray C.N.compare``() = validate (Int32s.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;1;1;1;1;1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 |] [] - member __.``Int32s.Collection.OptionArray C.N.less_than``() = + member _.``Int32s.Collection.OptionArray C.N.less_than``() = validate (Int32s.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member __.``Int32s.Collection.OptionArray C.N.less_or_equal``() = + member _.``Int32s.Collection.OptionArray C.N.less_or_equal``() = validate (Int32s.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member __.``Int32s.Collection.OptionArray C.N.greater_than``() = + member _.``Int32s.Collection.OptionArray C.N.greater_than``() = validate (Int32s.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member __.``Int32s.Collection.OptionArray C.N.greater_or_equal``() = + member _.``Int32s.Collection.OptionArray C.N.greater_or_equal``() = validate (Int32s.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member __.``Int32s.Collection.RefArray C.I.equals``() = + member _.``Int32s.Collection.RefArray C.I.equals``() = validate (Int32s.Collection.RefArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.RefArray C.I.equal``() = + member _.``Int32s.Collection.RefArray C.I.equal``() = validate (Int32s.Collection.RefArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.RefArray C.I.not_equal``() = + member _.``Int32s.Collection.RefArray C.I.not_equal``() = validate (Int32s.Collection.RefArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int32s.Collection.RefArray C.I.compare``() = + member _.``Int32s.Collection.RefArray C.I.compare``() = validate (Int32s.Collection.RefArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Int32s.Collection.RefArray C.I.less_than``() = + member _.``Int32s.Collection.RefArray C.I.less_than``() = validate (Int32s.Collection.RefArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Int32s.Collection.RefArray C.I.less_or_equal``() = + member _.``Int32s.Collection.RefArray C.I.less_or_equal``() = validate (Int32s.Collection.RefArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Int32s.Collection.RefArray C.I.greater_than``() = + member _.``Int32s.Collection.RefArray C.I.greater_than``() = validate (Int32s.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Int32s.Collection.RefArray C.I.greater_or_equal``() = + member _.``Int32s.Collection.RefArray C.I.greater_or_equal``() = validate (Int32s.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Int32s.Collection.RefArray C.N.equals``() = + member _.``Int32s.Collection.RefArray C.N.equals``() = validate (Int32s.Collection.RefArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.RefArray C.N.equal``() = + member _.``Int32s.Collection.RefArray C.N.equal``() = validate (Int32s.Collection.RefArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.RefArray C.N.not_equal``() = + member _.``Int32s.Collection.RefArray C.N.not_equal``() = validate (Int32s.Collection.RefArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int32s.Collection.RefArray C.N.compare``() = + member _.``Int32s.Collection.RefArray C.N.compare``() = validate (Int32s.Collection.RefArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Int32s.Collection.RefArray C.N.less_than``() = + member _.``Int32s.Collection.RefArray C.N.less_than``() = validate (Int32s.Collection.RefArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Int32s.Collection.RefArray C.N.less_or_equal``() = + member _.``Int32s.Collection.RefArray C.N.less_or_equal``() = validate (Int32s.Collection.RefArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Int32s.Collection.RefArray C.N.greater_than``() = + member _.``Int32s.Collection.RefArray C.N.greater_than``() = validate (Int32s.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Int32s.Collection.RefArray C.N.greater_or_equal``() = + member _.``Int32s.Collection.RefArray C.N.greater_or_equal``() = validate (Int32s.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Int32s.Collection.RefWrapArray C.I.equals``() = + member _.``Int32s.Collection.RefWrapArray C.I.equals``() = validate (Int32s.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.RefWrapArray C.I.equal``() = + member _.``Int32s.Collection.RefWrapArray C.I.equal``() = validate (Int32s.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.RefWrapArray C.I.not_equal``() = + member _.``Int32s.Collection.RefWrapArray C.I.not_equal``() = validate (Int32s.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int32s.Collection.RefWrapArray C.I.compare``() = + member _.``Int32s.Collection.RefWrapArray C.I.compare``() = validate (Int32s.Collection.RefWrapArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Int32s.Collection.RefWrapArray C.I.less_than``() = + member _.``Int32s.Collection.RefWrapArray C.I.less_than``() = validate (Int32s.Collection.RefWrapArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Int32s.Collection.RefWrapArray C.I.less_or_equal``() = + member _.``Int32s.Collection.RefWrapArray C.I.less_or_equal``() = validate (Int32s.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Int32s.Collection.RefWrapArray C.I.greater_than``() = + member _.``Int32s.Collection.RefWrapArray C.I.greater_than``() = validate (Int32s.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Int32s.Collection.RefWrapArray C.I.greater_or_equal``() = + member _.``Int32s.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Int32s.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Int32s.Collection.RefWrapArray C.N.equals``() = + member _.``Int32s.Collection.RefWrapArray C.N.equals``() = validate (Int32s.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.RefWrapArray C.N.equal``() = + member _.``Int32s.Collection.RefWrapArray C.N.equal``() = validate (Int32s.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.RefWrapArray C.N.not_equal``() = + member _.``Int32s.Collection.RefWrapArray C.N.not_equal``() = validate (Int32s.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int32s.Collection.RefWrapArray C.N.compare``() = + member _.``Int32s.Collection.RefWrapArray C.N.compare``() = validate (Int32s.Collection.RefWrapArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Int32s.Collection.RefWrapArray C.N.less_than``() = + member _.``Int32s.Collection.RefWrapArray C.N.less_than``() = validate (Int32s.Collection.RefWrapArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Int32s.Collection.RefWrapArray C.N.less_or_equal``() = + member _.``Int32s.Collection.RefWrapArray C.N.less_or_equal``() = validate (Int32s.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Int32s.Collection.RefWrapArray C.N.greater_than``() = + member _.``Int32s.Collection.RefWrapArray C.N.greater_than``() = validate (Int32s.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Int32s.Collection.RefWrapArray C.N.greater_or_equal``() = + member _.``Int32s.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Int32s.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Int32s.Collection.UnionArray C.I.equals``() = + member _.``Int32s.Collection.UnionArray C.I.equals``() = validate (Int32s.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -9933,7 +9933,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionArray C.I.equal``() = + member _.``Int32s.Collection.UnionArray C.I.equal``() = validate (Int32s.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -9969,7 +9969,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionArray C.I.not_equal``() = + member _.``Int32s.Collection.UnionArray C.I.not_equal``() = validate (Int32s.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -10005,7 +10005,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionArray C.I.compare``() = + member _.``Int32s.Collection.UnionArray C.I.compare``() = validate (Int32s.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -10041,7 +10041,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionArray C.I.less_than``() = + member _.``Int32s.Collection.UnionArray C.I.less_than``() = validate (Int32s.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -10077,7 +10077,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionArray C.I.less_or_equal``() = + member _.``Int32s.Collection.UnionArray C.I.less_or_equal``() = validate (Int32s.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -10113,7 +10113,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionArray C.I.greater_than``() = + member _.``Int32s.Collection.UnionArray C.I.greater_than``() = validate (Int32s.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -10149,7 +10149,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionArray C.I.greater_or_equal``() = + member _.``Int32s.Collection.UnionArray C.I.greater_or_equal``() = validate (Int32s.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -10185,7 +10185,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionArray C.N.equals``() = + member _.``Int32s.Collection.UnionArray C.N.equals``() = validate (Int32s.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -10221,7 +10221,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionArray C.N.equal``() = + member _.``Int32s.Collection.UnionArray C.N.equal``() = validate (Int32s.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -10257,7 +10257,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionArray C.N.not_equal``() = + member _.``Int32s.Collection.UnionArray C.N.not_equal``() = validate (Int32s.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -10293,7 +10293,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionArray C.N.compare``() = + member _.``Int32s.Collection.UnionArray C.N.compare``() = validate (Int32s.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -10329,7 +10329,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionArray C.N.less_than``() = + member _.``Int32s.Collection.UnionArray C.N.less_than``() = validate (Int32s.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -10365,7 +10365,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionArray C.N.less_or_equal``() = + member _.``Int32s.Collection.UnionArray C.N.less_or_equal``() = validate (Int32s.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -10401,7 +10401,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionArray C.N.greater_than``() = + member _.``Int32s.Collection.UnionArray C.N.greater_than``() = validate (Int32s.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -10437,7 +10437,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionArray C.N.greater_or_equal``() = + member _.``Int32s.Collection.UnionArray C.N.greater_or_equal``() = validate (Int32s.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -10473,7 +10473,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionWrapArray C.I.equals``() = + member _.``Int32s.Collection.UnionWrapArray C.I.equals``() = validate (Int32s.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -10509,7 +10509,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionWrapArray C.I.equal``() = + member _.``Int32s.Collection.UnionWrapArray C.I.equal``() = validate (Int32s.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -10545,7 +10545,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionWrapArray C.I.not_equal``() = + member _.``Int32s.Collection.UnionWrapArray C.I.not_equal``() = validate (Int32s.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -10581,7 +10581,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionWrapArray C.I.compare``() = + member _.``Int32s.Collection.UnionWrapArray C.I.compare``() = validate (Int32s.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -10617,7 +10617,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionWrapArray C.I.less_than``() = + member _.``Int32s.Collection.UnionWrapArray C.I.less_than``() = validate (Int32s.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -10653,7 +10653,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionWrapArray C.I.less_or_equal``() = + member _.``Int32s.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Int32s.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -10689,7 +10689,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionWrapArray C.I.greater_than``() = + member _.``Int32s.Collection.UnionWrapArray C.I.greater_than``() = validate (Int32s.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -10725,7 +10725,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionWrapArray C.I.greater_or_equal``() = + member _.``Int32s.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Int32s.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -10761,7 +10761,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionWrapArray C.N.equals``() = + member _.``Int32s.Collection.UnionWrapArray C.N.equals``() = validate (Int32s.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -10797,7 +10797,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionWrapArray C.N.equal``() = + member _.``Int32s.Collection.UnionWrapArray C.N.equal``() = validate (Int32s.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -10833,7 +10833,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionWrapArray C.N.not_equal``() = + member _.``Int32s.Collection.UnionWrapArray C.N.not_equal``() = validate (Int32s.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -10869,7 +10869,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionWrapArray C.N.compare``() = + member _.``Int32s.Collection.UnionWrapArray C.N.compare``() = validate (Int32s.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -10905,7 +10905,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionWrapArray C.N.less_than``() = + member _.``Int32s.Collection.UnionWrapArray C.N.less_than``() = validate (Int32s.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -10941,7 +10941,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionWrapArray C.N.less_or_equal``() = + member _.``Int32s.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Int32s.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -10977,7 +10977,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionWrapArray C.N.greater_than``() = + member _.``Int32s.Collection.UnionWrapArray C.N.greater_than``() = validate (Int32s.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -11013,7 +11013,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.UnionWrapArray C.N.greater_or_equal``() = + member _.``Int32s.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Int32s.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -11049,199 +11049,199 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ValueArray C.I.equals``() = + member _.``Int32s.Collection.ValueArray C.I.equals``() = validate (Int32s.Collection.ValueArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.ValueArray C.I.equal``() = + member _.``Int32s.Collection.ValueArray C.I.equal``() = validate (Int32s.Collection.ValueArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.ValueArray C.I.not_equal``() = + member _.``Int32s.Collection.ValueArray C.I.not_equal``() = validate (Int32s.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int32s.Collection.ValueArray C.I.compare``() = + member _.``Int32s.Collection.ValueArray C.I.compare``() = validate (Int32s.Collection.ValueArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Int32s.Collection.ValueArray C.I.less_than``() = + member _.``Int32s.Collection.ValueArray C.I.less_than``() = validate (Int32s.Collection.ValueArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Int32s.Collection.ValueArray C.I.less_or_equal``() = + member _.``Int32s.Collection.ValueArray C.I.less_or_equal``() = validate (Int32s.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Int32s.Collection.ValueArray C.I.greater_than``() = + member _.``Int32s.Collection.ValueArray C.I.greater_than``() = validate (Int32s.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Int32s.Collection.ValueArray C.I.greater_or_equal``() = + member _.``Int32s.Collection.ValueArray C.I.greater_or_equal``() = validate (Int32s.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Int32s.Collection.ValueArray C.N.equals``() = + member _.``Int32s.Collection.ValueArray C.N.equals``() = validate (Int32s.Collection.ValueArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.ValueArray C.N.equal``() = + member _.``Int32s.Collection.ValueArray C.N.equal``() = validate (Int32s.Collection.ValueArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.ValueArray C.N.not_equal``() = + member _.``Int32s.Collection.ValueArray C.N.not_equal``() = validate (Int32s.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int32s.Collection.ValueArray C.N.compare``() = + member _.``Int32s.Collection.ValueArray C.N.compare``() = validate (Int32s.Collection.ValueArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Int32s.Collection.ValueArray C.N.less_than``() = + member _.``Int32s.Collection.ValueArray C.N.less_than``() = validate (Int32s.Collection.ValueArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Int32s.Collection.ValueArray C.N.less_or_equal``() = + member _.``Int32s.Collection.ValueArray C.N.less_or_equal``() = validate (Int32s.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Int32s.Collection.ValueArray C.N.greater_than``() = + member _.``Int32s.Collection.ValueArray C.N.greater_than``() = validate (Int32s.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Int32s.Collection.ValueArray C.N.greater_or_equal``() = + member _.``Int32s.Collection.ValueArray C.N.greater_or_equal``() = validate (Int32s.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Int32s.Collection.ValueWrapArray C.I.equals``() = + member _.``Int32s.Collection.ValueWrapArray C.I.equals``() = validate (Int32s.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.ValueWrapArray C.I.equal``() = + member _.``Int32s.Collection.ValueWrapArray C.I.equal``() = validate (Int32s.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.ValueWrapArray C.I.not_equal``() = + member _.``Int32s.Collection.ValueWrapArray C.I.not_equal``() = validate (Int32s.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int32s.Collection.ValueWrapArray C.I.compare``() = + member _.``Int32s.Collection.ValueWrapArray C.I.compare``() = validate (Int32s.Collection.ValueWrapArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Int32s.Collection.ValueWrapArray C.I.less_than``() = + member _.``Int32s.Collection.ValueWrapArray C.I.less_than``() = validate (Int32s.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Int32s.Collection.ValueWrapArray C.I.less_or_equal``() = + member _.``Int32s.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Int32s.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Int32s.Collection.ValueWrapArray C.I.greater_than``() = + member _.``Int32s.Collection.ValueWrapArray C.I.greater_than``() = validate (Int32s.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Int32s.Collection.ValueWrapArray C.I.greater_or_equal``() = + member _.``Int32s.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Int32s.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Int32s.Collection.ValueWrapArray C.N.equals``() = + member _.``Int32s.Collection.ValueWrapArray C.N.equals``() = validate (Int32s.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.ValueWrapArray C.N.equal``() = + member _.``Int32s.Collection.ValueWrapArray C.N.equal``() = validate (Int32s.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int32s.Collection.ValueWrapArray C.N.not_equal``() = + member _.``Int32s.Collection.ValueWrapArray C.N.not_equal``() = validate (Int32s.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int32s.Collection.ValueWrapArray C.N.compare``() = + member _.``Int32s.Collection.ValueWrapArray C.N.compare``() = validate (Int32s.Collection.ValueWrapArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Int32s.Collection.ValueWrapArray C.N.less_than``() = + member _.``Int32s.Collection.ValueWrapArray C.N.less_than``() = validate (Int32s.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Int32s.Collection.ValueWrapArray C.N.less_or_equal``() = + member _.``Int32s.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Int32s.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Int32s.Collection.ValueWrapArray C.N.greater_than``() = + member _.``Int32s.Collection.ValueWrapArray C.N.greater_than``() = validate (Int32s.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Int32s.Collection.ValueWrapArray C.N.greater_or_equal``() = + member _.``Int32s.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Int32s.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Int32s.Collection.ArrayArray C.I.equals``() = + member _.``Int32s.Collection.ArrayArray C.I.equals``() = validate (Int32s.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11249,7 +11249,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray C.I.equal``() = + member _.``Int32s.Collection.ArrayArray C.I.equal``() = validate (Int32s.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11257,7 +11257,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray C.I.not_equal``() = + member _.``Int32s.Collection.ArrayArray C.I.not_equal``() = validate (Int32s.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -11265,7 +11265,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray C.I.compare``() = + member _.``Int32s.Collection.ArrayArray C.I.compare``() = validate (Int32s.Collection.ArrayArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;1;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1; @@ -11273,7 +11273,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray C.I.less_than``() = + member _.``Int32s.Collection.ArrayArray C.I.less_than``() = validate (Int32s.Collection.ArrayArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; @@ -11281,7 +11281,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray C.I.less_or_equal``() = + member _.``Int32s.Collection.ArrayArray C.I.less_or_equal``() = validate (Int32s.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; @@ -11289,7 +11289,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray C.I.greater_than``() = + member _.``Int32s.Collection.ArrayArray C.I.greater_than``() = validate (Int32s.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; @@ -11297,7 +11297,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray C.I.greater_or_equal``() = + member _.``Int32s.Collection.ArrayArray C.I.greater_or_equal``() = validate (Int32s.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; @@ -11305,7 +11305,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray C.N.equals``() = + member _.``Int32s.Collection.ArrayArray C.N.equals``() = validate (Int32s.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11313,7 +11313,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray C.N.equal``() = + member _.``Int32s.Collection.ArrayArray C.N.equal``() = validate (Int32s.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11321,7 +11321,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray C.N.not_equal``() = + member _.``Int32s.Collection.ArrayArray C.N.not_equal``() = validate (Int32s.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -11329,7 +11329,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray C.N.compare``() = + member _.``Int32s.Collection.ArrayArray C.N.compare``() = validate (Int32s.Collection.ArrayArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;1;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1; @@ -11337,7 +11337,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray C.N.less_than``() = + member _.``Int32s.Collection.ArrayArray C.N.less_than``() = validate (Int32s.Collection.ArrayArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; @@ -11345,7 +11345,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray C.N.less_or_equal``() = + member _.``Int32s.Collection.ArrayArray C.N.less_or_equal``() = validate (Int32s.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; @@ -11353,7 +11353,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray C.N.greater_than``() = + member _.``Int32s.Collection.ArrayArray C.N.greater_than``() = validate (Int32s.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; @@ -11361,7 +11361,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray C.N.greater_or_equal``() = + member _.``Int32s.Collection.ArrayArray C.N.greater_or_equal``() = validate (Int32s.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; @@ -11369,7 +11369,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ListArray C.I.equals``() = + member _.``Int32s.Collection.ListArray C.I.equals``() = validate (Int32s.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11377,7 +11377,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ListArray C.I.equal``() = + member _.``Int32s.Collection.ListArray C.I.equal``() = validate (Int32s.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11385,7 +11385,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ListArray C.I.not_equal``() = + member _.``Int32s.Collection.ListArray C.I.not_equal``() = validate (Int32s.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -11393,7 +11393,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ListArray C.I.compare``() = + member _.``Int32s.Collection.ListArray C.I.compare``() = validate (Int32s.Collection.ListArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; 1;-1;1;1;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;1;-1;0;-1;-1; @@ -11401,7 +11401,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ListArray C.I.less_than``() = + member _.``Int32s.Collection.ListArray C.I.less_than``() = validate (Int32s.Collection.ListArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; @@ -11409,7 +11409,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ListArray C.I.less_or_equal``() = + member _.``Int32s.Collection.ListArray C.I.less_or_equal``() = validate (Int32s.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; @@ -11417,7 +11417,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ListArray C.I.greater_than``() = + member _.``Int32s.Collection.ListArray C.I.greater_than``() = validate (Int32s.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; @@ -11425,7 +11425,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ListArray C.I.greater_or_equal``() = + member _.``Int32s.Collection.ListArray C.I.greater_or_equal``() = validate (Int32s.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; @@ -11433,7 +11433,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ListArray C.N.equals``() = + member _.``Int32s.Collection.ListArray C.N.equals``() = validate (Int32s.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11441,7 +11441,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ListArray C.N.equal``() = + member _.``Int32s.Collection.ListArray C.N.equal``() = validate (Int32s.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11449,7 +11449,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ListArray C.N.not_equal``() = + member _.``Int32s.Collection.ListArray C.N.not_equal``() = validate (Int32s.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -11457,7 +11457,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ListArray C.N.compare``() = + member _.``Int32s.Collection.ListArray C.N.compare``() = validate (Int32s.Collection.ListArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; 1;-1;1;1;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;1;-1;0;-1;-1; @@ -11465,7 +11465,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ListArray C.N.less_than``() = + member _.``Int32s.Collection.ListArray C.N.less_than``() = validate (Int32s.Collection.ListArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; @@ -11473,7 +11473,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ListArray C.N.less_or_equal``() = + member _.``Int32s.Collection.ListArray C.N.less_or_equal``() = validate (Int32s.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; @@ -11481,7 +11481,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ListArray C.N.greater_than``() = + member _.``Int32s.Collection.ListArray C.N.greater_than``() = validate (Int32s.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; @@ -11489,7 +11489,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ListArray C.N.greater_or_equal``() = + member _.``Int32s.Collection.ListArray C.N.greater_or_equal``() = validate (Int32s.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; @@ -11497,7 +11497,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11505,7 +11505,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11513,7 +11513,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -11521,7 +11521,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; @@ -11529,7 +11529,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; @@ -11537,7 +11537,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; @@ -11545,7 +11545,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; @@ -11553,7 +11553,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; @@ -11561,7 +11561,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11569,7 +11569,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -11577,7 +11577,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -11585,7 +11585,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; @@ -11593,7 +11593,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; @@ -11601,7 +11601,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; @@ -11609,7 +11609,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; @@ -11617,7 +11617,7 @@ type GeneratedTests () = |] [] - member __.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member _.``Int32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Int32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; @@ -11625,157 +11625,157 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.Array E.I.equals``() = + member _.``NullableInt32s.Collection.Array E.I.equals``() = validate (NullableInt32s.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.Array E.I.equal``() = + member _.``NullableInt32s.Collection.Array E.I.equal``() = validate (NullableInt32s.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.Array E.I.not_equal``() = + member _.``NullableInt32s.Collection.Array E.I.not_equal``() = validate (NullableInt32s.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt32s.Collection.Array E.N.equals``() = + member _.``NullableInt32s.Collection.Array E.N.equals``() = validate (NullableInt32s.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.Array E.N.equal``() = + member _.``NullableInt32s.Collection.Array E.N.equal``() = validate (NullableInt32s.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.Array E.N.not_equal``() = + member _.``NullableInt32s.Collection.Array E.N.not_equal``() = validate (NullableInt32s.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt32s.Collection.OptionArray E.I.equals``() = + member _.``NullableInt32s.Collection.OptionArray E.I.equals``() = validate (NullableInt32s.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.OptionArray E.I.equal``() = + member _.``NullableInt32s.Collection.OptionArray E.I.equal``() = validate (NullableInt32s.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.OptionArray E.I.not_equal``() = + member _.``NullableInt32s.Collection.OptionArray E.I.not_equal``() = validate (NullableInt32s.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``NullableInt32s.Collection.OptionArray E.N.equals``() = + member _.``NullableInt32s.Collection.OptionArray E.N.equals``() = validate (NullableInt32s.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.OptionArray E.N.equal``() = + member _.``NullableInt32s.Collection.OptionArray E.N.equal``() = validate (NullableInt32s.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.OptionArray E.N.not_equal``() = + member _.``NullableInt32s.Collection.OptionArray E.N.not_equal``() = validate (NullableInt32s.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``NullableInt32s.Collection.RefArray E.I.equals``() = + member _.``NullableInt32s.Collection.RefArray E.I.equals``() = validate (NullableInt32s.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.RefArray E.I.equal``() = + member _.``NullableInt32s.Collection.RefArray E.I.equal``() = validate (NullableInt32s.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.RefArray E.I.not_equal``() = + member _.``NullableInt32s.Collection.RefArray E.I.not_equal``() = validate (NullableInt32s.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt32s.Collection.RefArray E.N.equals``() = + member _.``NullableInt32s.Collection.RefArray E.N.equals``() = validate (NullableInt32s.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.RefArray E.N.equal``() = + member _.``NullableInt32s.Collection.RefArray E.N.equal``() = validate (NullableInt32s.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.RefArray E.N.not_equal``() = + member _.``NullableInt32s.Collection.RefArray E.N.not_equal``() = validate (NullableInt32s.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt32s.Collection.RefWrapArray E.I.equals``() = + member _.``NullableInt32s.Collection.RefWrapArray E.I.equals``() = validate (NullableInt32s.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.RefWrapArray E.I.equal``() = + member _.``NullableInt32s.Collection.RefWrapArray E.I.equal``() = validate (NullableInt32s.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.RefWrapArray E.I.not_equal``() = + member _.``NullableInt32s.Collection.RefWrapArray E.I.not_equal``() = validate (NullableInt32s.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt32s.Collection.RefWrapArray E.N.equals``() = + member _.``NullableInt32s.Collection.RefWrapArray E.N.equals``() = validate (NullableInt32s.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.RefWrapArray E.N.equal``() = + member _.``NullableInt32s.Collection.RefWrapArray E.N.equal``() = validate (NullableInt32s.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.RefWrapArray E.N.not_equal``() = + member _.``NullableInt32s.Collection.RefWrapArray E.N.not_equal``() = validate (NullableInt32s.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt32s.Collection.UnionArray E.I.equals``() = + member _.``NullableInt32s.Collection.UnionArray E.I.equals``() = validate (NullableInt32s.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -11825,7 +11825,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.UnionArray E.I.equal``() = + member _.``NullableInt32s.Collection.UnionArray E.I.equal``() = validate (NullableInt32s.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -11875,7 +11875,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.UnionArray E.I.not_equal``() = + member _.``NullableInt32s.Collection.UnionArray E.I.not_equal``() = validate (NullableInt32s.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -11925,7 +11925,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.UnionArray E.N.equals``() = + member _.``NullableInt32s.Collection.UnionArray E.N.equals``() = validate (NullableInt32s.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -11975,7 +11975,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.UnionArray E.N.equal``() = + member _.``NullableInt32s.Collection.UnionArray E.N.equal``() = validate (NullableInt32s.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -12025,7 +12025,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.UnionArray E.N.not_equal``() = + member _.``NullableInt32s.Collection.UnionArray E.N.not_equal``() = validate (NullableInt32s.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -12075,7 +12075,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.UnionWrapArray E.I.equals``() = + member _.``NullableInt32s.Collection.UnionWrapArray E.I.equals``() = validate (NullableInt32s.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -12125,7 +12125,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.UnionWrapArray E.I.equal``() = + member _.``NullableInt32s.Collection.UnionWrapArray E.I.equal``() = validate (NullableInt32s.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -12175,7 +12175,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.UnionWrapArray E.I.not_equal``() = + member _.``NullableInt32s.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableInt32s.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -12225,7 +12225,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.UnionWrapArray E.N.equals``() = + member _.``NullableInt32s.Collection.UnionWrapArray E.N.equals``() = validate (NullableInt32s.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -12275,7 +12275,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.UnionWrapArray E.N.equal``() = + member _.``NullableInt32s.Collection.UnionWrapArray E.N.equal``() = validate (NullableInt32s.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -12325,7 +12325,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.UnionWrapArray E.N.not_equal``() = + member _.``NullableInt32s.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableInt32s.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -12375,79 +12375,79 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.ValueArray E.I.equals``() = + member _.``NullableInt32s.Collection.ValueArray E.I.equals``() = validate (NullableInt32s.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.ValueArray E.I.equal``() = + member _.``NullableInt32s.Collection.ValueArray E.I.equal``() = validate (NullableInt32s.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.ValueArray E.I.not_equal``() = + member _.``NullableInt32s.Collection.ValueArray E.I.not_equal``() = validate (NullableInt32s.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt32s.Collection.ValueArray E.N.equals``() = + member _.``NullableInt32s.Collection.ValueArray E.N.equals``() = validate (NullableInt32s.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.ValueArray E.N.equal``() = + member _.``NullableInt32s.Collection.ValueArray E.N.equal``() = validate (NullableInt32s.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.ValueArray E.N.not_equal``() = + member _.``NullableInt32s.Collection.ValueArray E.N.not_equal``() = validate (NullableInt32s.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt32s.Collection.ValueWrapArray E.I.equals``() = + member _.``NullableInt32s.Collection.ValueWrapArray E.I.equals``() = validate (NullableInt32s.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.ValueWrapArray E.I.equal``() = + member _.``NullableInt32s.Collection.ValueWrapArray E.I.equal``() = validate (NullableInt32s.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.ValueWrapArray E.I.not_equal``() = + member _.``NullableInt32s.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableInt32s.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt32s.Collection.ValueWrapArray E.N.equals``() = + member _.``NullableInt32s.Collection.ValueWrapArray E.N.equals``() = validate (NullableInt32s.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.ValueWrapArray E.N.equal``() = + member _.``NullableInt32s.Collection.ValueWrapArray E.N.equal``() = validate (NullableInt32s.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt32s.Collection.ValueWrapArray E.N.not_equal``() = + member _.``NullableInt32s.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableInt32s.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt32s.Collection.ArrayArray E.I.equals``() = + member _.``NullableInt32s.Collection.ArrayArray E.I.equals``() = validate (NullableInt32s.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -12456,7 +12456,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.ArrayArray E.I.equal``() = + member _.``NullableInt32s.Collection.ArrayArray E.I.equal``() = validate (NullableInt32s.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -12465,7 +12465,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.ArrayArray E.I.not_equal``() = + member _.``NullableInt32s.Collection.ArrayArray E.I.not_equal``() = validate (NullableInt32s.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -12474,7 +12474,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.ArrayArray E.N.equals``() = + member _.``NullableInt32s.Collection.ArrayArray E.N.equals``() = validate (NullableInt32s.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -12483,7 +12483,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.ArrayArray E.N.equal``() = + member _.``NullableInt32s.Collection.ArrayArray E.N.equal``() = validate (NullableInt32s.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -12492,7 +12492,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.ArrayArray E.N.not_equal``() = + member _.``NullableInt32s.Collection.ArrayArray E.N.not_equal``() = validate (NullableInt32s.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -12501,7 +12501,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.ListArray E.I.equals``() = + member _.``NullableInt32s.Collection.ListArray E.I.equals``() = validate (NullableInt32s.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -12510,7 +12510,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.ListArray E.I.equal``() = + member _.``NullableInt32s.Collection.ListArray E.I.equal``() = validate (NullableInt32s.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -12519,7 +12519,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.ListArray E.I.not_equal``() = + member _.``NullableInt32s.Collection.ListArray E.I.not_equal``() = validate (NullableInt32s.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -12528,7 +12528,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.ListArray E.N.equals``() = + member _.``NullableInt32s.Collection.ListArray E.N.equals``() = validate (NullableInt32s.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -12537,7 +12537,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.ListArray E.N.equal``() = + member _.``NullableInt32s.Collection.ListArray E.N.equal``() = validate (NullableInt32s.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -12546,7 +12546,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt32s.Collection.ListArray E.N.not_equal``() = + member _.``NullableInt32s.Collection.ListArray E.N.not_equal``() = validate (NullableInt32s.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -12555,391 +12555,391 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.Array C.I.equals``() = + member _.``Int64s.Collection.Array C.I.equals``() = validate (Int64s.Collection.Array) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.Array C.I.equal``() = + member _.``Int64s.Collection.Array C.I.equal``() = validate (Int64s.Collection.Array) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.Array C.I.not_equal``() = + member _.``Int64s.Collection.Array C.I.not_equal``() = validate (Int64s.Collection.Array) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int64s.Collection.Array C.I.compare``() = + member _.``Int64s.Collection.Array C.I.compare``() = validate (Int64s.Collection.Array) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Int64s.Collection.Array C.I.less_than``() = + member _.``Int64s.Collection.Array C.I.less_than``() = validate (Int64s.Collection.Array) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Int64s.Collection.Array C.I.less_or_equal``() = + member _.``Int64s.Collection.Array C.I.less_or_equal``() = validate (Int64s.Collection.Array) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Int64s.Collection.Array C.I.greater_than``() = + member _.``Int64s.Collection.Array C.I.greater_than``() = validate (Int64s.Collection.Array) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Int64s.Collection.Array C.I.greater_or_equal``() = + member _.``Int64s.Collection.Array C.I.greater_or_equal``() = validate (Int64s.Collection.Array) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Int64s.Collection.Array C.N.equals``() = + member _.``Int64s.Collection.Array C.N.equals``() = validate (Int64s.Collection.Array) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.Array C.N.equal``() = + member _.``Int64s.Collection.Array C.N.equal``() = validate (Int64s.Collection.Array) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.Array C.N.not_equal``() = + member _.``Int64s.Collection.Array C.N.not_equal``() = validate (Int64s.Collection.Array) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int64s.Collection.Array C.N.compare``() = + member _.``Int64s.Collection.Array C.N.compare``() = validate (Int64s.Collection.Array) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Int64s.Collection.Array C.N.less_than``() = + member _.``Int64s.Collection.Array C.N.less_than``() = validate (Int64s.Collection.Array) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Int64s.Collection.Array C.N.less_or_equal``() = + member _.``Int64s.Collection.Array C.N.less_or_equal``() = validate (Int64s.Collection.Array) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Int64s.Collection.Array C.N.greater_than``() = + member _.``Int64s.Collection.Array C.N.greater_than``() = validate (Int64s.Collection.Array) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Int64s.Collection.Array C.N.greater_or_equal``() = + member _.``Int64s.Collection.Array C.N.greater_or_equal``() = validate (Int64s.Collection.Array) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Int64s.Collection.OptionArray C.I.equals``() = + member _.``Int64s.Collection.OptionArray C.I.equals``() = validate (Int64s.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.OptionArray C.I.equal``() = + member _.``Int64s.Collection.OptionArray C.I.equal``() = validate (Int64s.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.OptionArray C.I.not_equal``() = + member _.``Int64s.Collection.OptionArray C.I.not_equal``() = validate (Int64s.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Int64s.Collection.OptionArray C.I.compare``() = + member _.``Int64s.Collection.OptionArray C.I.compare``() = validate (Int64s.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;1;1;1;1;1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 |] [] - member __.``Int64s.Collection.OptionArray C.I.less_than``() = + member _.``Int64s.Collection.OptionArray C.I.less_than``() = validate (Int64s.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member __.``Int64s.Collection.OptionArray C.I.less_or_equal``() = + member _.``Int64s.Collection.OptionArray C.I.less_or_equal``() = validate (Int64s.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member __.``Int64s.Collection.OptionArray C.I.greater_than``() = + member _.``Int64s.Collection.OptionArray C.I.greater_than``() = validate (Int64s.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member __.``Int64s.Collection.OptionArray C.I.greater_or_equal``() = + member _.``Int64s.Collection.OptionArray C.I.greater_or_equal``() = validate (Int64s.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member __.``Int64s.Collection.OptionArray C.N.equals``() = + member _.``Int64s.Collection.OptionArray C.N.equals``() = validate (Int64s.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.OptionArray C.N.equal``() = + member _.``Int64s.Collection.OptionArray C.N.equal``() = validate (Int64s.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.OptionArray C.N.not_equal``() = + member _.``Int64s.Collection.OptionArray C.N.not_equal``() = validate (Int64s.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Int64s.Collection.OptionArray C.N.compare``() = + member _.``Int64s.Collection.OptionArray C.N.compare``() = validate (Int64s.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;1;1;1;1;1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 |] [] - member __.``Int64s.Collection.OptionArray C.N.less_than``() = + member _.``Int64s.Collection.OptionArray C.N.less_than``() = validate (Int64s.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member __.``Int64s.Collection.OptionArray C.N.less_or_equal``() = + member _.``Int64s.Collection.OptionArray C.N.less_or_equal``() = validate (Int64s.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member __.``Int64s.Collection.OptionArray C.N.greater_than``() = + member _.``Int64s.Collection.OptionArray C.N.greater_than``() = validate (Int64s.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member __.``Int64s.Collection.OptionArray C.N.greater_or_equal``() = + member _.``Int64s.Collection.OptionArray C.N.greater_or_equal``() = validate (Int64s.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member __.``Int64s.Collection.RefArray C.I.equals``() = + member _.``Int64s.Collection.RefArray C.I.equals``() = validate (Int64s.Collection.RefArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.RefArray C.I.equal``() = + member _.``Int64s.Collection.RefArray C.I.equal``() = validate (Int64s.Collection.RefArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.RefArray C.I.not_equal``() = + member _.``Int64s.Collection.RefArray C.I.not_equal``() = validate (Int64s.Collection.RefArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int64s.Collection.RefArray C.I.compare``() = + member _.``Int64s.Collection.RefArray C.I.compare``() = validate (Int64s.Collection.RefArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Int64s.Collection.RefArray C.I.less_than``() = + member _.``Int64s.Collection.RefArray C.I.less_than``() = validate (Int64s.Collection.RefArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Int64s.Collection.RefArray C.I.less_or_equal``() = + member _.``Int64s.Collection.RefArray C.I.less_or_equal``() = validate (Int64s.Collection.RefArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Int64s.Collection.RefArray C.I.greater_than``() = + member _.``Int64s.Collection.RefArray C.I.greater_than``() = validate (Int64s.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Int64s.Collection.RefArray C.I.greater_or_equal``() = + member _.``Int64s.Collection.RefArray C.I.greater_or_equal``() = validate (Int64s.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Int64s.Collection.RefArray C.N.equals``() = + member _.``Int64s.Collection.RefArray C.N.equals``() = validate (Int64s.Collection.RefArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.RefArray C.N.equal``() = + member _.``Int64s.Collection.RefArray C.N.equal``() = validate (Int64s.Collection.RefArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.RefArray C.N.not_equal``() = + member _.``Int64s.Collection.RefArray C.N.not_equal``() = validate (Int64s.Collection.RefArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int64s.Collection.RefArray C.N.compare``() = + member _.``Int64s.Collection.RefArray C.N.compare``() = validate (Int64s.Collection.RefArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Int64s.Collection.RefArray C.N.less_than``() = + member _.``Int64s.Collection.RefArray C.N.less_than``() = validate (Int64s.Collection.RefArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Int64s.Collection.RefArray C.N.less_or_equal``() = + member _.``Int64s.Collection.RefArray C.N.less_or_equal``() = validate (Int64s.Collection.RefArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Int64s.Collection.RefArray C.N.greater_than``() = + member _.``Int64s.Collection.RefArray C.N.greater_than``() = validate (Int64s.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Int64s.Collection.RefArray C.N.greater_or_equal``() = + member _.``Int64s.Collection.RefArray C.N.greater_or_equal``() = validate (Int64s.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Int64s.Collection.RefWrapArray C.I.equals``() = + member _.``Int64s.Collection.RefWrapArray C.I.equals``() = validate (Int64s.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.RefWrapArray C.I.equal``() = + member _.``Int64s.Collection.RefWrapArray C.I.equal``() = validate (Int64s.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.RefWrapArray C.I.not_equal``() = + member _.``Int64s.Collection.RefWrapArray C.I.not_equal``() = validate (Int64s.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int64s.Collection.RefWrapArray C.I.compare``() = + member _.``Int64s.Collection.RefWrapArray C.I.compare``() = validate (Int64s.Collection.RefWrapArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Int64s.Collection.RefWrapArray C.I.less_than``() = + member _.``Int64s.Collection.RefWrapArray C.I.less_than``() = validate (Int64s.Collection.RefWrapArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Int64s.Collection.RefWrapArray C.I.less_or_equal``() = + member _.``Int64s.Collection.RefWrapArray C.I.less_or_equal``() = validate (Int64s.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Int64s.Collection.RefWrapArray C.I.greater_than``() = + member _.``Int64s.Collection.RefWrapArray C.I.greater_than``() = validate (Int64s.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Int64s.Collection.RefWrapArray C.I.greater_or_equal``() = + member _.``Int64s.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Int64s.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Int64s.Collection.RefWrapArray C.N.equals``() = + member _.``Int64s.Collection.RefWrapArray C.N.equals``() = validate (Int64s.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.RefWrapArray C.N.equal``() = + member _.``Int64s.Collection.RefWrapArray C.N.equal``() = validate (Int64s.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.RefWrapArray C.N.not_equal``() = + member _.``Int64s.Collection.RefWrapArray C.N.not_equal``() = validate (Int64s.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int64s.Collection.RefWrapArray C.N.compare``() = + member _.``Int64s.Collection.RefWrapArray C.N.compare``() = validate (Int64s.Collection.RefWrapArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Int64s.Collection.RefWrapArray C.N.less_than``() = + member _.``Int64s.Collection.RefWrapArray C.N.less_than``() = validate (Int64s.Collection.RefWrapArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Int64s.Collection.RefWrapArray C.N.less_or_equal``() = + member _.``Int64s.Collection.RefWrapArray C.N.less_or_equal``() = validate (Int64s.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Int64s.Collection.RefWrapArray C.N.greater_than``() = + member _.``Int64s.Collection.RefWrapArray C.N.greater_than``() = validate (Int64s.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Int64s.Collection.RefWrapArray C.N.greater_or_equal``() = + member _.``Int64s.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Int64s.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Int64s.Collection.UnionArray C.I.equals``() = + member _.``Int64s.Collection.UnionArray C.I.equals``() = validate (Int64s.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -12975,7 +12975,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionArray C.I.equal``() = + member _.``Int64s.Collection.UnionArray C.I.equal``() = validate (Int64s.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -13011,7 +13011,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionArray C.I.not_equal``() = + member _.``Int64s.Collection.UnionArray C.I.not_equal``() = validate (Int64s.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -13047,7 +13047,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionArray C.I.compare``() = + member _.``Int64s.Collection.UnionArray C.I.compare``() = validate (Int64s.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -13083,7 +13083,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionArray C.I.less_than``() = + member _.``Int64s.Collection.UnionArray C.I.less_than``() = validate (Int64s.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -13119,7 +13119,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionArray C.I.less_or_equal``() = + member _.``Int64s.Collection.UnionArray C.I.less_or_equal``() = validate (Int64s.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -13155,7 +13155,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionArray C.I.greater_than``() = + member _.``Int64s.Collection.UnionArray C.I.greater_than``() = validate (Int64s.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -13191,7 +13191,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionArray C.I.greater_or_equal``() = + member _.``Int64s.Collection.UnionArray C.I.greater_or_equal``() = validate (Int64s.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -13227,7 +13227,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionArray C.N.equals``() = + member _.``Int64s.Collection.UnionArray C.N.equals``() = validate (Int64s.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -13263,7 +13263,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionArray C.N.equal``() = + member _.``Int64s.Collection.UnionArray C.N.equal``() = validate (Int64s.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -13299,7 +13299,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionArray C.N.not_equal``() = + member _.``Int64s.Collection.UnionArray C.N.not_equal``() = validate (Int64s.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -13335,7 +13335,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionArray C.N.compare``() = + member _.``Int64s.Collection.UnionArray C.N.compare``() = validate (Int64s.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -13371,7 +13371,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionArray C.N.less_than``() = + member _.``Int64s.Collection.UnionArray C.N.less_than``() = validate (Int64s.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -13407,7 +13407,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionArray C.N.less_or_equal``() = + member _.``Int64s.Collection.UnionArray C.N.less_or_equal``() = validate (Int64s.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -13443,7 +13443,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionArray C.N.greater_than``() = + member _.``Int64s.Collection.UnionArray C.N.greater_than``() = validate (Int64s.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -13479,7 +13479,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionArray C.N.greater_or_equal``() = + member _.``Int64s.Collection.UnionArray C.N.greater_or_equal``() = validate (Int64s.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -13515,7 +13515,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionWrapArray C.I.equals``() = + member _.``Int64s.Collection.UnionWrapArray C.I.equals``() = validate (Int64s.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -13551,7 +13551,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionWrapArray C.I.equal``() = + member _.``Int64s.Collection.UnionWrapArray C.I.equal``() = validate (Int64s.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -13587,7 +13587,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionWrapArray C.I.not_equal``() = + member _.``Int64s.Collection.UnionWrapArray C.I.not_equal``() = validate (Int64s.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -13623,7 +13623,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionWrapArray C.I.compare``() = + member _.``Int64s.Collection.UnionWrapArray C.I.compare``() = validate (Int64s.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -13659,7 +13659,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionWrapArray C.I.less_than``() = + member _.``Int64s.Collection.UnionWrapArray C.I.less_than``() = validate (Int64s.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -13695,7 +13695,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionWrapArray C.I.less_or_equal``() = + member _.``Int64s.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Int64s.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -13731,7 +13731,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionWrapArray C.I.greater_than``() = + member _.``Int64s.Collection.UnionWrapArray C.I.greater_than``() = validate (Int64s.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -13767,7 +13767,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionWrapArray C.I.greater_or_equal``() = + member _.``Int64s.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Int64s.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -13803,7 +13803,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionWrapArray C.N.equals``() = + member _.``Int64s.Collection.UnionWrapArray C.N.equals``() = validate (Int64s.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -13839,7 +13839,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionWrapArray C.N.equal``() = + member _.``Int64s.Collection.UnionWrapArray C.N.equal``() = validate (Int64s.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -13875,7 +13875,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionWrapArray C.N.not_equal``() = + member _.``Int64s.Collection.UnionWrapArray C.N.not_equal``() = validate (Int64s.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -13911,7 +13911,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionWrapArray C.N.compare``() = + member _.``Int64s.Collection.UnionWrapArray C.N.compare``() = validate (Int64s.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -13947,7 +13947,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionWrapArray C.N.less_than``() = + member _.``Int64s.Collection.UnionWrapArray C.N.less_than``() = validate (Int64s.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -13983,7 +13983,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionWrapArray C.N.less_or_equal``() = + member _.``Int64s.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Int64s.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -14019,7 +14019,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionWrapArray C.N.greater_than``() = + member _.``Int64s.Collection.UnionWrapArray C.N.greater_than``() = validate (Int64s.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -14055,7 +14055,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.UnionWrapArray C.N.greater_or_equal``() = + member _.``Int64s.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Int64s.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -14091,199 +14091,199 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ValueArray C.I.equals``() = + member _.``Int64s.Collection.ValueArray C.I.equals``() = validate (Int64s.Collection.ValueArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.ValueArray C.I.equal``() = + member _.``Int64s.Collection.ValueArray C.I.equal``() = validate (Int64s.Collection.ValueArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.ValueArray C.I.not_equal``() = + member _.``Int64s.Collection.ValueArray C.I.not_equal``() = validate (Int64s.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int64s.Collection.ValueArray C.I.compare``() = + member _.``Int64s.Collection.ValueArray C.I.compare``() = validate (Int64s.Collection.ValueArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Int64s.Collection.ValueArray C.I.less_than``() = + member _.``Int64s.Collection.ValueArray C.I.less_than``() = validate (Int64s.Collection.ValueArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Int64s.Collection.ValueArray C.I.less_or_equal``() = + member _.``Int64s.Collection.ValueArray C.I.less_or_equal``() = validate (Int64s.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Int64s.Collection.ValueArray C.I.greater_than``() = + member _.``Int64s.Collection.ValueArray C.I.greater_than``() = validate (Int64s.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Int64s.Collection.ValueArray C.I.greater_or_equal``() = + member _.``Int64s.Collection.ValueArray C.I.greater_or_equal``() = validate (Int64s.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Int64s.Collection.ValueArray C.N.equals``() = + member _.``Int64s.Collection.ValueArray C.N.equals``() = validate (Int64s.Collection.ValueArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.ValueArray C.N.equal``() = + member _.``Int64s.Collection.ValueArray C.N.equal``() = validate (Int64s.Collection.ValueArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.ValueArray C.N.not_equal``() = + member _.``Int64s.Collection.ValueArray C.N.not_equal``() = validate (Int64s.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int64s.Collection.ValueArray C.N.compare``() = + member _.``Int64s.Collection.ValueArray C.N.compare``() = validate (Int64s.Collection.ValueArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Int64s.Collection.ValueArray C.N.less_than``() = + member _.``Int64s.Collection.ValueArray C.N.less_than``() = validate (Int64s.Collection.ValueArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Int64s.Collection.ValueArray C.N.less_or_equal``() = + member _.``Int64s.Collection.ValueArray C.N.less_or_equal``() = validate (Int64s.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Int64s.Collection.ValueArray C.N.greater_than``() = + member _.``Int64s.Collection.ValueArray C.N.greater_than``() = validate (Int64s.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Int64s.Collection.ValueArray C.N.greater_or_equal``() = + member _.``Int64s.Collection.ValueArray C.N.greater_or_equal``() = validate (Int64s.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Int64s.Collection.ValueWrapArray C.I.equals``() = + member _.``Int64s.Collection.ValueWrapArray C.I.equals``() = validate (Int64s.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.ValueWrapArray C.I.equal``() = + member _.``Int64s.Collection.ValueWrapArray C.I.equal``() = validate (Int64s.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.ValueWrapArray C.I.not_equal``() = + member _.``Int64s.Collection.ValueWrapArray C.I.not_equal``() = validate (Int64s.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int64s.Collection.ValueWrapArray C.I.compare``() = + member _.``Int64s.Collection.ValueWrapArray C.I.compare``() = validate (Int64s.Collection.ValueWrapArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Int64s.Collection.ValueWrapArray C.I.less_than``() = + member _.``Int64s.Collection.ValueWrapArray C.I.less_than``() = validate (Int64s.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Int64s.Collection.ValueWrapArray C.I.less_or_equal``() = + member _.``Int64s.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Int64s.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Int64s.Collection.ValueWrapArray C.I.greater_than``() = + member _.``Int64s.Collection.ValueWrapArray C.I.greater_than``() = validate (Int64s.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Int64s.Collection.ValueWrapArray C.I.greater_or_equal``() = + member _.``Int64s.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Int64s.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Int64s.Collection.ValueWrapArray C.N.equals``() = + member _.``Int64s.Collection.ValueWrapArray C.N.equals``() = validate (Int64s.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.ValueWrapArray C.N.equal``() = + member _.``Int64s.Collection.ValueWrapArray C.N.equal``() = validate (Int64s.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Int64s.Collection.ValueWrapArray C.N.not_equal``() = + member _.``Int64s.Collection.ValueWrapArray C.N.not_equal``() = validate (Int64s.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Int64s.Collection.ValueWrapArray C.N.compare``() = + member _.``Int64s.Collection.ValueWrapArray C.N.compare``() = validate (Int64s.Collection.ValueWrapArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Int64s.Collection.ValueWrapArray C.N.less_than``() = + member _.``Int64s.Collection.ValueWrapArray C.N.less_than``() = validate (Int64s.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Int64s.Collection.ValueWrapArray C.N.less_or_equal``() = + member _.``Int64s.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Int64s.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Int64s.Collection.ValueWrapArray C.N.greater_than``() = + member _.``Int64s.Collection.ValueWrapArray C.N.greater_than``() = validate (Int64s.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Int64s.Collection.ValueWrapArray C.N.greater_or_equal``() = + member _.``Int64s.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Int64s.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Int64s.Collection.ArrayArray C.I.equals``() = + member _.``Int64s.Collection.ArrayArray C.I.equals``() = validate (Int64s.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14291,7 +14291,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray C.I.equal``() = + member _.``Int64s.Collection.ArrayArray C.I.equal``() = validate (Int64s.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14299,7 +14299,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray C.I.not_equal``() = + member _.``Int64s.Collection.ArrayArray C.I.not_equal``() = validate (Int64s.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -14307,7 +14307,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray C.I.compare``() = + member _.``Int64s.Collection.ArrayArray C.I.compare``() = validate (Int64s.Collection.ArrayArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;1;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1; @@ -14315,7 +14315,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray C.I.less_than``() = + member _.``Int64s.Collection.ArrayArray C.I.less_than``() = validate (Int64s.Collection.ArrayArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; @@ -14323,7 +14323,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray C.I.less_or_equal``() = + member _.``Int64s.Collection.ArrayArray C.I.less_or_equal``() = validate (Int64s.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; @@ -14331,7 +14331,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray C.I.greater_than``() = + member _.``Int64s.Collection.ArrayArray C.I.greater_than``() = validate (Int64s.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; @@ -14339,7 +14339,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray C.I.greater_or_equal``() = + member _.``Int64s.Collection.ArrayArray C.I.greater_or_equal``() = validate (Int64s.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; @@ -14347,7 +14347,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray C.N.equals``() = + member _.``Int64s.Collection.ArrayArray C.N.equals``() = validate (Int64s.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14355,7 +14355,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray C.N.equal``() = + member _.``Int64s.Collection.ArrayArray C.N.equal``() = validate (Int64s.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14363,7 +14363,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray C.N.not_equal``() = + member _.``Int64s.Collection.ArrayArray C.N.not_equal``() = validate (Int64s.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -14371,7 +14371,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray C.N.compare``() = + member _.``Int64s.Collection.ArrayArray C.N.compare``() = validate (Int64s.Collection.ArrayArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;1;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1; @@ -14379,7 +14379,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray C.N.less_than``() = + member _.``Int64s.Collection.ArrayArray C.N.less_than``() = validate (Int64s.Collection.ArrayArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; @@ -14387,7 +14387,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray C.N.less_or_equal``() = + member _.``Int64s.Collection.ArrayArray C.N.less_or_equal``() = validate (Int64s.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; @@ -14395,7 +14395,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray C.N.greater_than``() = + member _.``Int64s.Collection.ArrayArray C.N.greater_than``() = validate (Int64s.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; @@ -14403,7 +14403,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray C.N.greater_or_equal``() = + member _.``Int64s.Collection.ArrayArray C.N.greater_or_equal``() = validate (Int64s.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; @@ -14411,7 +14411,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ListArray C.I.equals``() = + member _.``Int64s.Collection.ListArray C.I.equals``() = validate (Int64s.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14419,7 +14419,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ListArray C.I.equal``() = + member _.``Int64s.Collection.ListArray C.I.equal``() = validate (Int64s.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14427,7 +14427,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ListArray C.I.not_equal``() = + member _.``Int64s.Collection.ListArray C.I.not_equal``() = validate (Int64s.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -14435,7 +14435,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ListArray C.I.compare``() = + member _.``Int64s.Collection.ListArray C.I.compare``() = validate (Int64s.Collection.ListArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; 1;-1;1;1;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;1;-1;0;-1;-1; @@ -14443,7 +14443,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ListArray C.I.less_than``() = + member _.``Int64s.Collection.ListArray C.I.less_than``() = validate (Int64s.Collection.ListArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; @@ -14451,7 +14451,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ListArray C.I.less_or_equal``() = + member _.``Int64s.Collection.ListArray C.I.less_or_equal``() = validate (Int64s.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; @@ -14459,7 +14459,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ListArray C.I.greater_than``() = + member _.``Int64s.Collection.ListArray C.I.greater_than``() = validate (Int64s.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; @@ -14467,7 +14467,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ListArray C.I.greater_or_equal``() = + member _.``Int64s.Collection.ListArray C.I.greater_or_equal``() = validate (Int64s.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; @@ -14475,7 +14475,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ListArray C.N.equals``() = + member _.``Int64s.Collection.ListArray C.N.equals``() = validate (Int64s.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14483,7 +14483,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ListArray C.N.equal``() = + member _.``Int64s.Collection.ListArray C.N.equal``() = validate (Int64s.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14491,7 +14491,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ListArray C.N.not_equal``() = + member _.``Int64s.Collection.ListArray C.N.not_equal``() = validate (Int64s.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -14499,7 +14499,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ListArray C.N.compare``() = + member _.``Int64s.Collection.ListArray C.N.compare``() = validate (Int64s.Collection.ListArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; 1;-1;1;1;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;1;-1;0;-1;-1; @@ -14507,7 +14507,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ListArray C.N.less_than``() = + member _.``Int64s.Collection.ListArray C.N.less_than``() = validate (Int64s.Collection.ListArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; @@ -14515,7 +14515,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ListArray C.N.less_or_equal``() = + member _.``Int64s.Collection.ListArray C.N.less_or_equal``() = validate (Int64s.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; @@ -14523,7 +14523,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ListArray C.N.greater_than``() = + member _.``Int64s.Collection.ListArray C.N.greater_than``() = validate (Int64s.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; @@ -14531,7 +14531,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ListArray C.N.greater_or_equal``() = + member _.``Int64s.Collection.ListArray C.N.greater_or_equal``() = validate (Int64s.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; @@ -14539,7 +14539,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14547,7 +14547,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14555,7 +14555,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -14563,7 +14563,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; @@ -14571,7 +14571,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; @@ -14579,7 +14579,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; @@ -14587,7 +14587,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; @@ -14595,7 +14595,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; @@ -14603,7 +14603,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14611,7 +14611,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -14619,7 +14619,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -14627,7 +14627,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; @@ -14635,7 +14635,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; @@ -14643,7 +14643,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; @@ -14651,7 +14651,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; @@ -14659,7 +14659,7 @@ type GeneratedTests () = |] [] - member __.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member _.``Int64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Int64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; @@ -14667,157 +14667,157 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.Array E.I.equals``() = + member _.``NullableInt64s.Collection.Array E.I.equals``() = validate (NullableInt64s.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.Array E.I.equal``() = + member _.``NullableInt64s.Collection.Array E.I.equal``() = validate (NullableInt64s.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.Array E.I.not_equal``() = + member _.``NullableInt64s.Collection.Array E.I.not_equal``() = validate (NullableInt64s.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt64s.Collection.Array E.N.equals``() = + member _.``NullableInt64s.Collection.Array E.N.equals``() = validate (NullableInt64s.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.Array E.N.equal``() = + member _.``NullableInt64s.Collection.Array E.N.equal``() = validate (NullableInt64s.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.Array E.N.not_equal``() = + member _.``NullableInt64s.Collection.Array E.N.not_equal``() = validate (NullableInt64s.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt64s.Collection.OptionArray E.I.equals``() = + member _.``NullableInt64s.Collection.OptionArray E.I.equals``() = validate (NullableInt64s.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.OptionArray E.I.equal``() = + member _.``NullableInt64s.Collection.OptionArray E.I.equal``() = validate (NullableInt64s.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.OptionArray E.I.not_equal``() = + member _.``NullableInt64s.Collection.OptionArray E.I.not_equal``() = validate (NullableInt64s.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``NullableInt64s.Collection.OptionArray E.N.equals``() = + member _.``NullableInt64s.Collection.OptionArray E.N.equals``() = validate (NullableInt64s.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.OptionArray E.N.equal``() = + member _.``NullableInt64s.Collection.OptionArray E.N.equal``() = validate (NullableInt64s.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.OptionArray E.N.not_equal``() = + member _.``NullableInt64s.Collection.OptionArray E.N.not_equal``() = validate (NullableInt64s.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``NullableInt64s.Collection.RefArray E.I.equals``() = + member _.``NullableInt64s.Collection.RefArray E.I.equals``() = validate (NullableInt64s.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.RefArray E.I.equal``() = + member _.``NullableInt64s.Collection.RefArray E.I.equal``() = validate (NullableInt64s.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.RefArray E.I.not_equal``() = + member _.``NullableInt64s.Collection.RefArray E.I.not_equal``() = validate (NullableInt64s.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt64s.Collection.RefArray E.N.equals``() = + member _.``NullableInt64s.Collection.RefArray E.N.equals``() = validate (NullableInt64s.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.RefArray E.N.equal``() = + member _.``NullableInt64s.Collection.RefArray E.N.equal``() = validate (NullableInt64s.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.RefArray E.N.not_equal``() = + member _.``NullableInt64s.Collection.RefArray E.N.not_equal``() = validate (NullableInt64s.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt64s.Collection.RefWrapArray E.I.equals``() = + member _.``NullableInt64s.Collection.RefWrapArray E.I.equals``() = validate (NullableInt64s.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.RefWrapArray E.I.equal``() = + member _.``NullableInt64s.Collection.RefWrapArray E.I.equal``() = validate (NullableInt64s.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.RefWrapArray E.I.not_equal``() = + member _.``NullableInt64s.Collection.RefWrapArray E.I.not_equal``() = validate (NullableInt64s.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt64s.Collection.RefWrapArray E.N.equals``() = + member _.``NullableInt64s.Collection.RefWrapArray E.N.equals``() = validate (NullableInt64s.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.RefWrapArray E.N.equal``() = + member _.``NullableInt64s.Collection.RefWrapArray E.N.equal``() = validate (NullableInt64s.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.RefWrapArray E.N.not_equal``() = + member _.``NullableInt64s.Collection.RefWrapArray E.N.not_equal``() = validate (NullableInt64s.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt64s.Collection.UnionArray E.I.equals``() = + member _.``NullableInt64s.Collection.UnionArray E.I.equals``() = validate (NullableInt64s.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -14867,7 +14867,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.UnionArray E.I.equal``() = + member _.``NullableInt64s.Collection.UnionArray E.I.equal``() = validate (NullableInt64s.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -14917,7 +14917,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.UnionArray E.I.not_equal``() = + member _.``NullableInt64s.Collection.UnionArray E.I.not_equal``() = validate (NullableInt64s.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -14967,7 +14967,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.UnionArray E.N.equals``() = + member _.``NullableInt64s.Collection.UnionArray E.N.equals``() = validate (NullableInt64s.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -15017,7 +15017,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.UnionArray E.N.equal``() = + member _.``NullableInt64s.Collection.UnionArray E.N.equal``() = validate (NullableInt64s.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -15067,7 +15067,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.UnionArray E.N.not_equal``() = + member _.``NullableInt64s.Collection.UnionArray E.N.not_equal``() = validate (NullableInt64s.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -15117,7 +15117,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.UnionWrapArray E.I.equals``() = + member _.``NullableInt64s.Collection.UnionWrapArray E.I.equals``() = validate (NullableInt64s.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -15167,7 +15167,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.UnionWrapArray E.I.equal``() = + member _.``NullableInt64s.Collection.UnionWrapArray E.I.equal``() = validate (NullableInt64s.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -15217,7 +15217,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.UnionWrapArray E.I.not_equal``() = + member _.``NullableInt64s.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableInt64s.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -15267,7 +15267,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.UnionWrapArray E.N.equals``() = + member _.``NullableInt64s.Collection.UnionWrapArray E.N.equals``() = validate (NullableInt64s.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -15317,7 +15317,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.UnionWrapArray E.N.equal``() = + member _.``NullableInt64s.Collection.UnionWrapArray E.N.equal``() = validate (NullableInt64s.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -15367,7 +15367,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.UnionWrapArray E.N.not_equal``() = + member _.``NullableInt64s.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableInt64s.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -15417,79 +15417,79 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.ValueArray E.I.equals``() = + member _.``NullableInt64s.Collection.ValueArray E.I.equals``() = validate (NullableInt64s.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.ValueArray E.I.equal``() = + member _.``NullableInt64s.Collection.ValueArray E.I.equal``() = validate (NullableInt64s.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.ValueArray E.I.not_equal``() = + member _.``NullableInt64s.Collection.ValueArray E.I.not_equal``() = validate (NullableInt64s.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt64s.Collection.ValueArray E.N.equals``() = + member _.``NullableInt64s.Collection.ValueArray E.N.equals``() = validate (NullableInt64s.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.ValueArray E.N.equal``() = + member _.``NullableInt64s.Collection.ValueArray E.N.equal``() = validate (NullableInt64s.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.ValueArray E.N.not_equal``() = + member _.``NullableInt64s.Collection.ValueArray E.N.not_equal``() = validate (NullableInt64s.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt64s.Collection.ValueWrapArray E.I.equals``() = + member _.``NullableInt64s.Collection.ValueWrapArray E.I.equals``() = validate (NullableInt64s.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.ValueWrapArray E.I.equal``() = + member _.``NullableInt64s.Collection.ValueWrapArray E.I.equal``() = validate (NullableInt64s.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.ValueWrapArray E.I.not_equal``() = + member _.``NullableInt64s.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableInt64s.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt64s.Collection.ValueWrapArray E.N.equals``() = + member _.``NullableInt64s.Collection.ValueWrapArray E.N.equals``() = validate (NullableInt64s.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.ValueWrapArray E.N.equal``() = + member _.``NullableInt64s.Collection.ValueWrapArray E.N.equal``() = validate (NullableInt64s.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableInt64s.Collection.ValueWrapArray E.N.not_equal``() = + member _.``NullableInt64s.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableInt64s.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableInt64s.Collection.ArrayArray E.I.equals``() = + member _.``NullableInt64s.Collection.ArrayArray E.I.equals``() = validate (NullableInt64s.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -15498,7 +15498,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.ArrayArray E.I.equal``() = + member _.``NullableInt64s.Collection.ArrayArray E.I.equal``() = validate (NullableInt64s.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -15507,7 +15507,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.ArrayArray E.I.not_equal``() = + member _.``NullableInt64s.Collection.ArrayArray E.I.not_equal``() = validate (NullableInt64s.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -15516,7 +15516,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.ArrayArray E.N.equals``() = + member _.``NullableInt64s.Collection.ArrayArray E.N.equals``() = validate (NullableInt64s.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -15525,7 +15525,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.ArrayArray E.N.equal``() = + member _.``NullableInt64s.Collection.ArrayArray E.N.equal``() = validate (NullableInt64s.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -15534,7 +15534,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.ArrayArray E.N.not_equal``() = + member _.``NullableInt64s.Collection.ArrayArray E.N.not_equal``() = validate (NullableInt64s.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -15543,7 +15543,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.ListArray E.I.equals``() = + member _.``NullableInt64s.Collection.ListArray E.I.equals``() = validate (NullableInt64s.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -15552,7 +15552,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.ListArray E.I.equal``() = + member _.``NullableInt64s.Collection.ListArray E.I.equal``() = validate (NullableInt64s.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -15561,7 +15561,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.ListArray E.I.not_equal``() = + member _.``NullableInt64s.Collection.ListArray E.I.not_equal``() = validate (NullableInt64s.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -15570,7 +15570,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.ListArray E.N.equals``() = + member _.``NullableInt64s.Collection.ListArray E.N.equals``() = validate (NullableInt64s.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -15579,7 +15579,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.ListArray E.N.equal``() = + member _.``NullableInt64s.Collection.ListArray E.N.equal``() = validate (NullableInt64s.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -15588,7 +15588,7 @@ type GeneratedTests () = |] [] - member __.``NullableInt64s.Collection.ListArray E.N.not_equal``() = + member _.``NullableInt64s.Collection.ListArray E.N.not_equal``() = validate (NullableInt64s.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -15597,391 +15597,391 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.Array C.I.equals``() = + member _.``NativeInts.Collection.Array C.I.equals``() = validate (NativeInts.Collection.Array) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.Array C.I.equal``() = + member _.``NativeInts.Collection.Array C.I.equal``() = validate (NativeInts.Collection.Array) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.Array C.I.not_equal``() = + member _.``NativeInts.Collection.Array C.I.not_equal``() = validate (NativeInts.Collection.Array) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``NativeInts.Collection.Array C.I.compare``() = + member _.``NativeInts.Collection.Array C.I.compare``() = validate (NativeInts.Collection.Array) C.I.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member __.``NativeInts.Collection.Array C.I.less_than``() = + member _.``NativeInts.Collection.Array C.I.less_than``() = validate (NativeInts.Collection.Array) C.I.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member __.``NativeInts.Collection.Array C.I.less_or_equal``() = + member _.``NativeInts.Collection.Array C.I.less_or_equal``() = validate (NativeInts.Collection.Array) C.I.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member __.``NativeInts.Collection.Array C.I.greater_than``() = + member _.``NativeInts.Collection.Array C.I.greater_than``() = validate (NativeInts.Collection.Array) C.I.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member __.``NativeInts.Collection.Array C.I.greater_or_equal``() = + member _.``NativeInts.Collection.Array C.I.greater_or_equal``() = validate (NativeInts.Collection.Array) C.I.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member __.``NativeInts.Collection.Array C.N.equals``() = + member _.``NativeInts.Collection.Array C.N.equals``() = validate (NativeInts.Collection.Array) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.Array C.N.equal``() = + member _.``NativeInts.Collection.Array C.N.equal``() = validate (NativeInts.Collection.Array) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.Array C.N.not_equal``() = + member _.``NativeInts.Collection.Array C.N.not_equal``() = validate (NativeInts.Collection.Array) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``NativeInts.Collection.Array C.N.compare``() = + member _.``NativeInts.Collection.Array C.N.compare``() = validate (NativeInts.Collection.Array) C.N.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member __.``NativeInts.Collection.Array C.N.less_than``() = + member _.``NativeInts.Collection.Array C.N.less_than``() = validate (NativeInts.Collection.Array) C.N.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member __.``NativeInts.Collection.Array C.N.less_or_equal``() = + member _.``NativeInts.Collection.Array C.N.less_or_equal``() = validate (NativeInts.Collection.Array) C.N.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member __.``NativeInts.Collection.Array C.N.greater_than``() = + member _.``NativeInts.Collection.Array C.N.greater_than``() = validate (NativeInts.Collection.Array) C.N.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member __.``NativeInts.Collection.Array C.N.greater_or_equal``() = + member _.``NativeInts.Collection.Array C.N.greater_or_equal``() = validate (NativeInts.Collection.Array) C.N.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member __.``NativeInts.Collection.OptionArray C.I.equals``() = + member _.``NativeInts.Collection.OptionArray C.I.equals``() = validate (NativeInts.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NativeInts.Collection.OptionArray C.I.equal``() = + member _.``NativeInts.Collection.OptionArray C.I.equal``() = validate (NativeInts.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NativeInts.Collection.OptionArray C.I.not_equal``() = + member _.``NativeInts.Collection.OptionArray C.I.not_equal``() = validate (NativeInts.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NativeInts.Collection.OptionArray C.I.compare``() = + member _.``NativeInts.Collection.OptionArray C.I.compare``() = validate (NativeInts.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member __.``NativeInts.Collection.OptionArray C.I.less_than``() = + member _.``NativeInts.Collection.OptionArray C.I.less_than``() = validate (NativeInts.Collection.OptionArray) C.I.less_than [| 0;1;1;1;0;0;1;1;0;0;0;1;0;0;0;0 |] [] - member __.``NativeInts.Collection.OptionArray C.I.less_or_equal``() = + member _.``NativeInts.Collection.OptionArray C.I.less_or_equal``() = validate (NativeInts.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;0;1;1;1;0;0;1;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.OptionArray C.I.greater_than``() = + member _.``NativeInts.Collection.OptionArray C.I.greater_than``() = validate (NativeInts.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;1;1;0;0;1;1;1;0 |] [] - member __.``NativeInts.Collection.OptionArray C.I.greater_or_equal``() = + member _.``NativeInts.Collection.OptionArray C.I.greater_or_equal``() = validate (NativeInts.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;1;1;0;0;1;1;1;0;1;1;1;1 |] [] - member __.``NativeInts.Collection.OptionArray C.N.equals``() = + member _.``NativeInts.Collection.OptionArray C.N.equals``() = validate (NativeInts.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NativeInts.Collection.OptionArray C.N.equal``() = + member _.``NativeInts.Collection.OptionArray C.N.equal``() = validate (NativeInts.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NativeInts.Collection.OptionArray C.N.not_equal``() = + member _.``NativeInts.Collection.OptionArray C.N.not_equal``() = validate (NativeInts.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NativeInts.Collection.OptionArray C.N.compare``() = + member _.``NativeInts.Collection.OptionArray C.N.compare``() = validate (NativeInts.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member __.``NativeInts.Collection.OptionArray C.N.less_than``() = + member _.``NativeInts.Collection.OptionArray C.N.less_than``() = validate (NativeInts.Collection.OptionArray) C.N.less_than [| 0;1;1;1;0;0;1;1;0;0;0;1;0;0;0;0 |] [] - member __.``NativeInts.Collection.OptionArray C.N.less_or_equal``() = + member _.``NativeInts.Collection.OptionArray C.N.less_or_equal``() = validate (NativeInts.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;0;1;1;1;0;0;1;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.OptionArray C.N.greater_than``() = + member _.``NativeInts.Collection.OptionArray C.N.greater_than``() = validate (NativeInts.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;1;1;0;0;1;1;1;0 |] [] - member __.``NativeInts.Collection.OptionArray C.N.greater_or_equal``() = + member _.``NativeInts.Collection.OptionArray C.N.greater_or_equal``() = validate (NativeInts.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;1;1;0;0;1;1;1;0;1;1;1;1 |] [] - member __.``NativeInts.Collection.RefArray C.I.equals``() = + member _.``NativeInts.Collection.RefArray C.I.equals``() = validate (NativeInts.Collection.RefArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.RefArray C.I.equal``() = + member _.``NativeInts.Collection.RefArray C.I.equal``() = validate (NativeInts.Collection.RefArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.RefArray C.I.not_equal``() = + member _.``NativeInts.Collection.RefArray C.I.not_equal``() = validate (NativeInts.Collection.RefArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``NativeInts.Collection.RefArray C.I.compare``() = + member _.``NativeInts.Collection.RefArray C.I.compare``() = validate (NativeInts.Collection.RefArray) C.I.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member __.``NativeInts.Collection.RefArray C.I.less_than``() = + member _.``NativeInts.Collection.RefArray C.I.less_than``() = validate (NativeInts.Collection.RefArray) C.I.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member __.``NativeInts.Collection.RefArray C.I.less_or_equal``() = + member _.``NativeInts.Collection.RefArray C.I.less_or_equal``() = validate (NativeInts.Collection.RefArray) C.I.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member __.``NativeInts.Collection.RefArray C.I.greater_than``() = + member _.``NativeInts.Collection.RefArray C.I.greater_than``() = validate (NativeInts.Collection.RefArray) C.I.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member __.``NativeInts.Collection.RefArray C.I.greater_or_equal``() = + member _.``NativeInts.Collection.RefArray C.I.greater_or_equal``() = validate (NativeInts.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member __.``NativeInts.Collection.RefArray C.N.equals``() = + member _.``NativeInts.Collection.RefArray C.N.equals``() = validate (NativeInts.Collection.RefArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.RefArray C.N.equal``() = + member _.``NativeInts.Collection.RefArray C.N.equal``() = validate (NativeInts.Collection.RefArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.RefArray C.N.not_equal``() = + member _.``NativeInts.Collection.RefArray C.N.not_equal``() = validate (NativeInts.Collection.RefArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``NativeInts.Collection.RefArray C.N.compare``() = + member _.``NativeInts.Collection.RefArray C.N.compare``() = validate (NativeInts.Collection.RefArray) C.N.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member __.``NativeInts.Collection.RefArray C.N.less_than``() = + member _.``NativeInts.Collection.RefArray C.N.less_than``() = validate (NativeInts.Collection.RefArray) C.N.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member __.``NativeInts.Collection.RefArray C.N.less_or_equal``() = + member _.``NativeInts.Collection.RefArray C.N.less_or_equal``() = validate (NativeInts.Collection.RefArray) C.N.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member __.``NativeInts.Collection.RefArray C.N.greater_than``() = + member _.``NativeInts.Collection.RefArray C.N.greater_than``() = validate (NativeInts.Collection.RefArray) C.N.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member __.``NativeInts.Collection.RefArray C.N.greater_or_equal``() = + member _.``NativeInts.Collection.RefArray C.N.greater_or_equal``() = validate (NativeInts.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member __.``NativeInts.Collection.RefWrapArray C.I.equals``() = + member _.``NativeInts.Collection.RefWrapArray C.I.equals``() = validate (NativeInts.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.RefWrapArray C.I.equal``() = + member _.``NativeInts.Collection.RefWrapArray C.I.equal``() = validate (NativeInts.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.RefWrapArray C.I.not_equal``() = + member _.``NativeInts.Collection.RefWrapArray C.I.not_equal``() = validate (NativeInts.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``NativeInts.Collection.RefWrapArray C.I.compare``() = + member _.``NativeInts.Collection.RefWrapArray C.I.compare``() = validate (NativeInts.Collection.RefWrapArray) C.I.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member __.``NativeInts.Collection.RefWrapArray C.I.less_than``() = + member _.``NativeInts.Collection.RefWrapArray C.I.less_than``() = validate (NativeInts.Collection.RefWrapArray) C.I.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member __.``NativeInts.Collection.RefWrapArray C.I.less_or_equal``() = + member _.``NativeInts.Collection.RefWrapArray C.I.less_or_equal``() = validate (NativeInts.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member __.``NativeInts.Collection.RefWrapArray C.I.greater_than``() = + member _.``NativeInts.Collection.RefWrapArray C.I.greater_than``() = validate (NativeInts.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member __.``NativeInts.Collection.RefWrapArray C.I.greater_or_equal``() = + member _.``NativeInts.Collection.RefWrapArray C.I.greater_or_equal``() = validate (NativeInts.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member __.``NativeInts.Collection.RefWrapArray C.N.equals``() = + member _.``NativeInts.Collection.RefWrapArray C.N.equals``() = validate (NativeInts.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.RefWrapArray C.N.equal``() = + member _.``NativeInts.Collection.RefWrapArray C.N.equal``() = validate (NativeInts.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.RefWrapArray C.N.not_equal``() = + member _.``NativeInts.Collection.RefWrapArray C.N.not_equal``() = validate (NativeInts.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``NativeInts.Collection.RefWrapArray C.N.compare``() = + member _.``NativeInts.Collection.RefWrapArray C.N.compare``() = validate (NativeInts.Collection.RefWrapArray) C.N.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member __.``NativeInts.Collection.RefWrapArray C.N.less_than``() = + member _.``NativeInts.Collection.RefWrapArray C.N.less_than``() = validate (NativeInts.Collection.RefWrapArray) C.N.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member __.``NativeInts.Collection.RefWrapArray C.N.less_or_equal``() = + member _.``NativeInts.Collection.RefWrapArray C.N.less_or_equal``() = validate (NativeInts.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member __.``NativeInts.Collection.RefWrapArray C.N.greater_than``() = + member _.``NativeInts.Collection.RefWrapArray C.N.greater_than``() = validate (NativeInts.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member __.``NativeInts.Collection.RefWrapArray C.N.greater_or_equal``() = + member _.``NativeInts.Collection.RefWrapArray C.N.greater_or_equal``() = validate (NativeInts.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member __.``NativeInts.Collection.UnionArray C.I.equals``() = + member _.``NativeInts.Collection.UnionArray C.I.equals``() = validate (NativeInts.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -15998,7 +15998,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionArray C.I.equal``() = + member _.``NativeInts.Collection.UnionArray C.I.equal``() = validate (NativeInts.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -16015,7 +16015,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionArray C.I.not_equal``() = + member _.``NativeInts.Collection.UnionArray C.I.not_equal``() = validate (NativeInts.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -16032,7 +16032,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionArray C.I.compare``() = + member _.``NativeInts.Collection.UnionArray C.I.compare``() = validate (NativeInts.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -16049,7 +16049,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionArray C.I.less_than``() = + member _.``NativeInts.Collection.UnionArray C.I.less_than``() = validate (NativeInts.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -16066,7 +16066,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionArray C.I.less_or_equal``() = + member _.``NativeInts.Collection.UnionArray C.I.less_or_equal``() = validate (NativeInts.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -16083,7 +16083,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionArray C.I.greater_than``() = + member _.``NativeInts.Collection.UnionArray C.I.greater_than``() = validate (NativeInts.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -16100,7 +16100,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionArray C.I.greater_or_equal``() = + member _.``NativeInts.Collection.UnionArray C.I.greater_or_equal``() = validate (NativeInts.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -16117,7 +16117,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionArray C.N.equals``() = + member _.``NativeInts.Collection.UnionArray C.N.equals``() = validate (NativeInts.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -16134,7 +16134,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionArray C.N.equal``() = + member _.``NativeInts.Collection.UnionArray C.N.equal``() = validate (NativeInts.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -16151,7 +16151,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionArray C.N.not_equal``() = + member _.``NativeInts.Collection.UnionArray C.N.not_equal``() = validate (NativeInts.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -16168,7 +16168,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionArray C.N.compare``() = + member _.``NativeInts.Collection.UnionArray C.N.compare``() = validate (NativeInts.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -16185,7 +16185,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionArray C.N.less_than``() = + member _.``NativeInts.Collection.UnionArray C.N.less_than``() = validate (NativeInts.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -16202,7 +16202,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionArray C.N.less_or_equal``() = + member _.``NativeInts.Collection.UnionArray C.N.less_or_equal``() = validate (NativeInts.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -16219,7 +16219,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionArray C.N.greater_than``() = + member _.``NativeInts.Collection.UnionArray C.N.greater_than``() = validate (NativeInts.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -16236,7 +16236,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionArray C.N.greater_or_equal``() = + member _.``NativeInts.Collection.UnionArray C.N.greater_or_equal``() = validate (NativeInts.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -16253,7 +16253,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionWrapArray C.I.equals``() = + member _.``NativeInts.Collection.UnionWrapArray C.I.equals``() = validate (NativeInts.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -16270,7 +16270,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionWrapArray C.I.equal``() = + member _.``NativeInts.Collection.UnionWrapArray C.I.equal``() = validate (NativeInts.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -16287,7 +16287,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionWrapArray C.I.not_equal``() = + member _.``NativeInts.Collection.UnionWrapArray C.I.not_equal``() = validate (NativeInts.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -16304,7 +16304,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionWrapArray C.I.compare``() = + member _.``NativeInts.Collection.UnionWrapArray C.I.compare``() = validate (NativeInts.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -16321,7 +16321,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionWrapArray C.I.less_than``() = + member _.``NativeInts.Collection.UnionWrapArray C.I.less_than``() = validate (NativeInts.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -16338,7 +16338,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionWrapArray C.I.less_or_equal``() = + member _.``NativeInts.Collection.UnionWrapArray C.I.less_or_equal``() = validate (NativeInts.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -16355,7 +16355,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionWrapArray C.I.greater_than``() = + member _.``NativeInts.Collection.UnionWrapArray C.I.greater_than``() = validate (NativeInts.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -16372,7 +16372,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionWrapArray C.I.greater_or_equal``() = + member _.``NativeInts.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (NativeInts.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -16389,7 +16389,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionWrapArray C.N.equals``() = + member _.``NativeInts.Collection.UnionWrapArray C.N.equals``() = validate (NativeInts.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -16406,7 +16406,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionWrapArray C.N.equal``() = + member _.``NativeInts.Collection.UnionWrapArray C.N.equal``() = validate (NativeInts.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -16423,7 +16423,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionWrapArray C.N.not_equal``() = + member _.``NativeInts.Collection.UnionWrapArray C.N.not_equal``() = validate (NativeInts.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -16440,7 +16440,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionWrapArray C.N.compare``() = + member _.``NativeInts.Collection.UnionWrapArray C.N.compare``() = validate (NativeInts.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -16457,7 +16457,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionWrapArray C.N.less_than``() = + member _.``NativeInts.Collection.UnionWrapArray C.N.less_than``() = validate (NativeInts.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -16474,7 +16474,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionWrapArray C.N.less_or_equal``() = + member _.``NativeInts.Collection.UnionWrapArray C.N.less_or_equal``() = validate (NativeInts.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -16491,7 +16491,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionWrapArray C.N.greater_than``() = + member _.``NativeInts.Collection.UnionWrapArray C.N.greater_than``() = validate (NativeInts.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -16508,7 +16508,7 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.UnionWrapArray C.N.greater_or_equal``() = + member _.``NativeInts.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (NativeInts.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -16525,631 +16525,631 @@ type GeneratedTests () = |] [] - member __.``NativeInts.Collection.ValueArray C.I.equals``() = + member _.``NativeInts.Collection.ValueArray C.I.equals``() = validate (NativeInts.Collection.ValueArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.ValueArray C.I.equal``() = + member _.``NativeInts.Collection.ValueArray C.I.equal``() = validate (NativeInts.Collection.ValueArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.ValueArray C.I.not_equal``() = + member _.``NativeInts.Collection.ValueArray C.I.not_equal``() = validate (NativeInts.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``NativeInts.Collection.ValueArray C.I.compare``() = + member _.``NativeInts.Collection.ValueArray C.I.compare``() = validate (NativeInts.Collection.ValueArray) C.I.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member __.``NativeInts.Collection.ValueArray C.I.less_than``() = + member _.``NativeInts.Collection.ValueArray C.I.less_than``() = validate (NativeInts.Collection.ValueArray) C.I.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member __.``NativeInts.Collection.ValueArray C.I.less_or_equal``() = + member _.``NativeInts.Collection.ValueArray C.I.less_or_equal``() = validate (NativeInts.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member __.``NativeInts.Collection.ValueArray C.I.greater_than``() = + member _.``NativeInts.Collection.ValueArray C.I.greater_than``() = validate (NativeInts.Collection.ValueArray) C.I.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member __.``NativeInts.Collection.ValueArray C.I.greater_or_equal``() = + member _.``NativeInts.Collection.ValueArray C.I.greater_or_equal``() = validate (NativeInts.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member __.``NativeInts.Collection.ValueArray C.N.equals``() = + member _.``NativeInts.Collection.ValueArray C.N.equals``() = validate (NativeInts.Collection.ValueArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.ValueArray C.N.equal``() = + member _.``NativeInts.Collection.ValueArray C.N.equal``() = validate (NativeInts.Collection.ValueArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.ValueArray C.N.not_equal``() = + member _.``NativeInts.Collection.ValueArray C.N.not_equal``() = validate (NativeInts.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``NativeInts.Collection.ValueArray C.N.compare``() = + member _.``NativeInts.Collection.ValueArray C.N.compare``() = validate (NativeInts.Collection.ValueArray) C.N.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member __.``NativeInts.Collection.ValueArray C.N.less_than``() = + member _.``NativeInts.Collection.ValueArray C.N.less_than``() = validate (NativeInts.Collection.ValueArray) C.N.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member __.``NativeInts.Collection.ValueArray C.N.less_or_equal``() = + member _.``NativeInts.Collection.ValueArray C.N.less_or_equal``() = validate (NativeInts.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member __.``NativeInts.Collection.ValueArray C.N.greater_than``() = + member _.``NativeInts.Collection.ValueArray C.N.greater_than``() = validate (NativeInts.Collection.ValueArray) C.N.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member __.``NativeInts.Collection.ValueArray C.N.greater_or_equal``() = + member _.``NativeInts.Collection.ValueArray C.N.greater_or_equal``() = validate (NativeInts.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member __.``NativeInts.Collection.ValueWrapArray C.I.equals``() = + member _.``NativeInts.Collection.ValueWrapArray C.I.equals``() = validate (NativeInts.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.ValueWrapArray C.I.equal``() = + member _.``NativeInts.Collection.ValueWrapArray C.I.equal``() = validate (NativeInts.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.ValueWrapArray C.I.not_equal``() = + member _.``NativeInts.Collection.ValueWrapArray C.I.not_equal``() = validate (NativeInts.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``NativeInts.Collection.ValueWrapArray C.I.compare``() = + member _.``NativeInts.Collection.ValueWrapArray C.I.compare``() = validate (NativeInts.Collection.ValueWrapArray) C.I.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member __.``NativeInts.Collection.ValueWrapArray C.I.less_than``() = + member _.``NativeInts.Collection.ValueWrapArray C.I.less_than``() = validate (NativeInts.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member __.``NativeInts.Collection.ValueWrapArray C.I.less_or_equal``() = + member _.``NativeInts.Collection.ValueWrapArray C.I.less_or_equal``() = validate (NativeInts.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member __.``NativeInts.Collection.ValueWrapArray C.I.greater_than``() = + member _.``NativeInts.Collection.ValueWrapArray C.I.greater_than``() = validate (NativeInts.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member __.``NativeInts.Collection.ValueWrapArray C.I.greater_or_equal``() = + member _.``NativeInts.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (NativeInts.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member __.``NativeInts.Collection.ValueWrapArray C.N.equals``() = + member _.``NativeInts.Collection.ValueWrapArray C.N.equals``() = validate (NativeInts.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.ValueWrapArray C.N.equal``() = + member _.``NativeInts.Collection.ValueWrapArray C.N.equal``() = validate (NativeInts.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``NativeInts.Collection.ValueWrapArray C.N.not_equal``() = + member _.``NativeInts.Collection.ValueWrapArray C.N.not_equal``() = validate (NativeInts.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``NativeInts.Collection.ValueWrapArray C.N.compare``() = + member _.``NativeInts.Collection.ValueWrapArray C.N.compare``() = validate (NativeInts.Collection.ValueWrapArray) C.N.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member __.``NativeInts.Collection.ValueWrapArray C.N.less_than``() = + member _.``NativeInts.Collection.ValueWrapArray C.N.less_than``() = validate (NativeInts.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member __.``NativeInts.Collection.ValueWrapArray C.N.less_or_equal``() = + member _.``NativeInts.Collection.ValueWrapArray C.N.less_or_equal``() = validate (NativeInts.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member __.``NativeInts.Collection.ValueWrapArray C.N.greater_than``() = + member _.``NativeInts.Collection.ValueWrapArray C.N.greater_than``() = validate (NativeInts.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member __.``NativeInts.Collection.ValueWrapArray C.N.greater_or_equal``() = + member _.``NativeInts.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (NativeInts.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member __.``NativeInts.Collection.ArrayArray C.I.equals``() = + member _.``NativeInts.Collection.ArrayArray C.I.equals``() = validate (NativeInts.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NativeInts.Collection.ArrayArray C.I.equal``() = + member _.``NativeInts.Collection.ArrayArray C.I.equal``() = validate (NativeInts.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NativeInts.Collection.ArrayArray C.I.not_equal``() = + member _.``NativeInts.Collection.ArrayArray C.I.not_equal``() = validate (NativeInts.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NativeInts.Collection.ArrayArray C.I.compare``() = + member _.``NativeInts.Collection.ArrayArray C.I.compare``() = validate (NativeInts.Collection.ArrayArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;-1;-1;-1;1;1;1;0;-1;-1;1;1;1;1;0;-1;1;1;1;1;1;0 |] [] - member __.``NativeInts.Collection.ArrayArray C.I.less_than``() = + member _.``NativeInts.Collection.ArrayArray C.I.less_than``() = validate (NativeInts.Collection.ArrayArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member __.``NativeInts.Collection.ArrayArray C.I.less_or_equal``() = + member _.``NativeInts.Collection.ArrayArray C.I.less_or_equal``() = validate (NativeInts.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member __.``NativeInts.Collection.ArrayArray C.I.greater_than``() = + member _.``NativeInts.Collection.ArrayArray C.I.greater_than``() = validate (NativeInts.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member __.``NativeInts.Collection.ArrayArray C.I.greater_or_equal``() = + member _.``NativeInts.Collection.ArrayArray C.I.greater_or_equal``() = validate (NativeInts.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member __.``NativeInts.Collection.ArrayArray C.N.equals``() = + member _.``NativeInts.Collection.ArrayArray C.N.equals``() = validate (NativeInts.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NativeInts.Collection.ArrayArray C.N.equal``() = + member _.``NativeInts.Collection.ArrayArray C.N.equal``() = validate (NativeInts.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NativeInts.Collection.ArrayArray C.N.not_equal``() = + member _.``NativeInts.Collection.ArrayArray C.N.not_equal``() = validate (NativeInts.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NativeInts.Collection.ArrayArray C.N.compare``() = + member _.``NativeInts.Collection.ArrayArray C.N.compare``() = validate (NativeInts.Collection.ArrayArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;-1;-1;-1;1;1;1;0;-1;-1;1;1;1;1;0;-1;1;1;1;1;1;0 |] [] - member __.``NativeInts.Collection.ArrayArray C.N.less_than``() = + member _.``NativeInts.Collection.ArrayArray C.N.less_than``() = validate (NativeInts.Collection.ArrayArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member __.``NativeInts.Collection.ArrayArray C.N.less_or_equal``() = + member _.``NativeInts.Collection.ArrayArray C.N.less_or_equal``() = validate (NativeInts.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member __.``NativeInts.Collection.ArrayArray C.N.greater_than``() = + member _.``NativeInts.Collection.ArrayArray C.N.greater_than``() = validate (NativeInts.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member __.``NativeInts.Collection.ArrayArray C.N.greater_or_equal``() = + member _.``NativeInts.Collection.ArrayArray C.N.greater_or_equal``() = validate (NativeInts.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member __.``NativeInts.Collection.ListArray C.I.equals``() = + member _.``NativeInts.Collection.ListArray C.I.equals``() = validate (NativeInts.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NativeInts.Collection.ListArray C.I.equal``() = + member _.``NativeInts.Collection.ListArray C.I.equal``() = validate (NativeInts.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NativeInts.Collection.ListArray C.I.not_equal``() = + member _.``NativeInts.Collection.ListArray C.I.not_equal``() = validate (NativeInts.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NativeInts.Collection.ListArray C.I.compare``() = + member _.``NativeInts.Collection.ListArray C.I.compare``() = validate (NativeInts.Collection.ListArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;-1;1;1;0;1;1;-1;1;-1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;1;1;1;0 |] [] - member __.``NativeInts.Collection.ListArray C.I.less_than``() = + member _.``NativeInts.Collection.ListArray C.I.less_than``() = validate (NativeInts.Collection.ListArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0 |] [] - member __.``NativeInts.Collection.ListArray C.I.less_or_equal``() = + member _.``NativeInts.Collection.ListArray C.I.less_or_equal``() = validate (NativeInts.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1 |] [] - member __.``NativeInts.Collection.ListArray C.I.greater_than``() = + member _.``NativeInts.Collection.ListArray C.I.greater_than``() = validate (NativeInts.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;1;0;0;1;1;0;1;1;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0 |] [] - member __.``NativeInts.Collection.ListArray C.I.greater_or_equal``() = + member _.``NativeInts.Collection.ListArray C.I.greater_or_equal``() = validate (NativeInts.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;1;1;1;1 |] [] - member __.``NativeInts.Collection.ListArray C.N.equals``() = + member _.``NativeInts.Collection.ListArray C.N.equals``() = validate (NativeInts.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NativeInts.Collection.ListArray C.N.equal``() = + member _.``NativeInts.Collection.ListArray C.N.equal``() = validate (NativeInts.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NativeInts.Collection.ListArray C.N.not_equal``() = + member _.``NativeInts.Collection.ListArray C.N.not_equal``() = validate (NativeInts.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NativeInts.Collection.ListArray C.N.compare``() = + member _.``NativeInts.Collection.ListArray C.N.compare``() = validate (NativeInts.Collection.ListArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;-1;1;1;0;1;1;-1;1;-1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;1;1;1;0 |] [] - member __.``NativeInts.Collection.ListArray C.N.less_than``() = + member _.``NativeInts.Collection.ListArray C.N.less_than``() = validate (NativeInts.Collection.ListArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0 |] [] - member __.``NativeInts.Collection.ListArray C.N.less_or_equal``() = + member _.``NativeInts.Collection.ListArray C.N.less_or_equal``() = validate (NativeInts.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1 |] [] - member __.``NativeInts.Collection.ListArray C.N.greater_than``() = + member _.``NativeInts.Collection.ListArray C.N.greater_than``() = validate (NativeInts.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;1;0;0;1;1;0;1;1;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0 |] [] - member __.``NativeInts.Collection.ListArray C.N.greater_or_equal``() = + member _.``NativeInts.Collection.ListArray C.N.greater_or_equal``() = validate (NativeInts.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;1;1;1;1 |] [] - member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;1;1;1;0;1;1;1;1;-1;-1;0;-1;-1;1;1;-1;1;0;1;1;-1;-1;1;-1;0 |] [] - member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;0;1;0;0;0;0;0;0;0;0;1;1;0;1;1;0;0;1;0;0;0;0;1;1;0;1;0 |] [] - member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;0;1;0;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;0;0;1;1;0;1;1 |] [] - member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;1;0;1;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;1;1;0;0;1;0;0 |] [] - member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;1;1;1;1;1;1;1;1;0;0;1;0;0;1;1;0;1;1;1;1;0;0;1;0;1 |] [] - member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;1;1;1;0;1;1;1;1;-1;-1;0;-1;-1;1;1;-1;1;0;1;1;-1;-1;1;-1;0 |] [] - member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;0;1;0;0;0;0;0;0;0;0;1;1;0;1;1;0;0;1;0;0;0;0;1;1;0;1;0 |] [] - member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;0;1;0;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;0;0;1;1;0;1;1 |] [] - member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;1;0;1;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;1;1;0;0;1;0;0 |] [] - member __.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member _.``NativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (NativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;1;1;1;1;1;1;1;1;0;0;1;0;0;1;1;0;1;1;1;1;0;0;1;0;1 |] [] - member __.``NullableNativeInts.Collection.Array E.I.equals``() = + member _.``NullableNativeInts.Collection.Array E.I.equals``() = validate (NullableNativeInts.Collection.Array) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.Array E.I.equal``() = + member _.``NullableNativeInts.Collection.Array E.I.equal``() = validate (NullableNativeInts.Collection.Array) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.Array E.I.not_equal``() = + member _.``NullableNativeInts.Collection.Array E.I.not_equal``() = validate (NullableNativeInts.Collection.Array) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableNativeInts.Collection.Array E.N.equals``() = + member _.``NullableNativeInts.Collection.Array E.N.equals``() = validate (NullableNativeInts.Collection.Array) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.Array E.N.equal``() = + member _.``NullableNativeInts.Collection.Array E.N.equal``() = validate (NullableNativeInts.Collection.Array) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.Array E.N.not_equal``() = + member _.``NullableNativeInts.Collection.Array E.N.not_equal``() = validate (NullableNativeInts.Collection.Array) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableNativeInts.Collection.OptionArray E.I.equals``() = + member _.``NullableNativeInts.Collection.OptionArray E.I.equals``() = validate (NullableNativeInts.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.OptionArray E.I.equal``() = + member _.``NullableNativeInts.Collection.OptionArray E.I.equal``() = validate (NullableNativeInts.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.OptionArray E.I.not_equal``() = + member _.``NullableNativeInts.Collection.OptionArray E.I.not_equal``() = validate (NullableNativeInts.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``NullableNativeInts.Collection.OptionArray E.N.equals``() = + member _.``NullableNativeInts.Collection.OptionArray E.N.equals``() = validate (NullableNativeInts.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.OptionArray E.N.equal``() = + member _.``NullableNativeInts.Collection.OptionArray E.N.equal``() = validate (NullableNativeInts.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.OptionArray E.N.not_equal``() = + member _.``NullableNativeInts.Collection.OptionArray E.N.not_equal``() = validate (NullableNativeInts.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``NullableNativeInts.Collection.RefArray E.I.equals``() = + member _.``NullableNativeInts.Collection.RefArray E.I.equals``() = validate (NullableNativeInts.Collection.RefArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.RefArray E.I.equal``() = + member _.``NullableNativeInts.Collection.RefArray E.I.equal``() = validate (NullableNativeInts.Collection.RefArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.RefArray E.I.not_equal``() = + member _.``NullableNativeInts.Collection.RefArray E.I.not_equal``() = validate (NullableNativeInts.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableNativeInts.Collection.RefArray E.N.equals``() = + member _.``NullableNativeInts.Collection.RefArray E.N.equals``() = validate (NullableNativeInts.Collection.RefArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.RefArray E.N.equal``() = + member _.``NullableNativeInts.Collection.RefArray E.N.equal``() = validate (NullableNativeInts.Collection.RefArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.RefArray E.N.not_equal``() = + member _.``NullableNativeInts.Collection.RefArray E.N.not_equal``() = validate (NullableNativeInts.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableNativeInts.Collection.RefWrapArray E.I.equals``() = + member _.``NullableNativeInts.Collection.RefWrapArray E.I.equals``() = validate (NullableNativeInts.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.RefWrapArray E.I.equal``() = + member _.``NullableNativeInts.Collection.RefWrapArray E.I.equal``() = validate (NullableNativeInts.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.RefWrapArray E.I.not_equal``() = + member _.``NullableNativeInts.Collection.RefWrapArray E.I.not_equal``() = validate (NullableNativeInts.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableNativeInts.Collection.RefWrapArray E.N.equals``() = + member _.``NullableNativeInts.Collection.RefWrapArray E.N.equals``() = validate (NullableNativeInts.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.RefWrapArray E.N.equal``() = + member _.``NullableNativeInts.Collection.RefWrapArray E.N.equal``() = validate (NullableNativeInts.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.RefWrapArray E.N.not_equal``() = + member _.``NullableNativeInts.Collection.RefWrapArray E.N.not_equal``() = validate (NullableNativeInts.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableNativeInts.Collection.UnionArray E.I.equals``() = + member _.``NullableNativeInts.Collection.UnionArray E.I.equals``() = validate (NullableNativeInts.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -17174,7 +17174,7 @@ type GeneratedTests () = |] [] - member __.``NullableNativeInts.Collection.UnionArray E.I.equal``() = + member _.``NullableNativeInts.Collection.UnionArray E.I.equal``() = validate (NullableNativeInts.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -17199,7 +17199,7 @@ type GeneratedTests () = |] [] - member __.``NullableNativeInts.Collection.UnionArray E.I.not_equal``() = + member _.``NullableNativeInts.Collection.UnionArray E.I.not_equal``() = validate (NullableNativeInts.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -17224,7 +17224,7 @@ type GeneratedTests () = |] [] - member __.``NullableNativeInts.Collection.UnionArray E.N.equals``() = + member _.``NullableNativeInts.Collection.UnionArray E.N.equals``() = validate (NullableNativeInts.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -17249,7 +17249,7 @@ type GeneratedTests () = |] [] - member __.``NullableNativeInts.Collection.UnionArray E.N.equal``() = + member _.``NullableNativeInts.Collection.UnionArray E.N.equal``() = validate (NullableNativeInts.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -17274,7 +17274,7 @@ type GeneratedTests () = |] [] - member __.``NullableNativeInts.Collection.UnionArray E.N.not_equal``() = + member _.``NullableNativeInts.Collection.UnionArray E.N.not_equal``() = validate (NullableNativeInts.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -17299,7 +17299,7 @@ type GeneratedTests () = |] [] - member __.``NullableNativeInts.Collection.UnionWrapArray E.I.equals``() = + member _.``NullableNativeInts.Collection.UnionWrapArray E.I.equals``() = validate (NullableNativeInts.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -17324,7 +17324,7 @@ type GeneratedTests () = |] [] - member __.``NullableNativeInts.Collection.UnionWrapArray E.I.equal``() = + member _.``NullableNativeInts.Collection.UnionWrapArray E.I.equal``() = validate (NullableNativeInts.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -17349,7 +17349,7 @@ type GeneratedTests () = |] [] - member __.``NullableNativeInts.Collection.UnionWrapArray E.I.not_equal``() = + member _.``NullableNativeInts.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableNativeInts.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -17374,7 +17374,7 @@ type GeneratedTests () = |] [] - member __.``NullableNativeInts.Collection.UnionWrapArray E.N.equals``() = + member _.``NullableNativeInts.Collection.UnionWrapArray E.N.equals``() = validate (NullableNativeInts.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -17399,7 +17399,7 @@ type GeneratedTests () = |] [] - member __.``NullableNativeInts.Collection.UnionWrapArray E.N.equal``() = + member _.``NullableNativeInts.Collection.UnionWrapArray E.N.equal``() = validate (NullableNativeInts.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -17424,7 +17424,7 @@ type GeneratedTests () = |] [] - member __.``NullableNativeInts.Collection.UnionWrapArray E.N.not_equal``() = + member _.``NullableNativeInts.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableNativeInts.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -17449,547 +17449,547 @@ type GeneratedTests () = |] [] - member __.``NullableNativeInts.Collection.ValueArray E.I.equals``() = + member _.``NullableNativeInts.Collection.ValueArray E.I.equals``() = validate (NullableNativeInts.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.ValueArray E.I.equal``() = + member _.``NullableNativeInts.Collection.ValueArray E.I.equal``() = validate (NullableNativeInts.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.ValueArray E.I.not_equal``() = + member _.``NullableNativeInts.Collection.ValueArray E.I.not_equal``() = validate (NullableNativeInts.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableNativeInts.Collection.ValueArray E.N.equals``() = + member _.``NullableNativeInts.Collection.ValueArray E.N.equals``() = validate (NullableNativeInts.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.ValueArray E.N.equal``() = + member _.``NullableNativeInts.Collection.ValueArray E.N.equal``() = validate (NullableNativeInts.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.ValueArray E.N.not_equal``() = + member _.``NullableNativeInts.Collection.ValueArray E.N.not_equal``() = validate (NullableNativeInts.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableNativeInts.Collection.ValueWrapArray E.I.equals``() = + member _.``NullableNativeInts.Collection.ValueWrapArray E.I.equals``() = validate (NullableNativeInts.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.ValueWrapArray E.I.equal``() = + member _.``NullableNativeInts.Collection.ValueWrapArray E.I.equal``() = validate (NullableNativeInts.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.ValueWrapArray E.I.not_equal``() = + member _.``NullableNativeInts.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableNativeInts.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableNativeInts.Collection.ValueWrapArray E.N.equals``() = + member _.``NullableNativeInts.Collection.ValueWrapArray E.N.equals``() = validate (NullableNativeInts.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.ValueWrapArray E.N.equal``() = + member _.``NullableNativeInts.Collection.ValueWrapArray E.N.equal``() = validate (NullableNativeInts.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.ValueWrapArray E.N.not_equal``() = + member _.``NullableNativeInts.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableNativeInts.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableNativeInts.Collection.ArrayArray E.I.equals``() = + member _.``NullableNativeInts.Collection.ArrayArray E.I.equals``() = validate (NullableNativeInts.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.ArrayArray E.I.equal``() = + member _.``NullableNativeInts.Collection.ArrayArray E.I.equal``() = validate (NullableNativeInts.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.ArrayArray E.I.not_equal``() = + member _.``NullableNativeInts.Collection.ArrayArray E.I.not_equal``() = validate (NullableNativeInts.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member __.``NullableNativeInts.Collection.ArrayArray E.N.equals``() = + member _.``NullableNativeInts.Collection.ArrayArray E.N.equals``() = validate (NullableNativeInts.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.ArrayArray E.N.equal``() = + member _.``NullableNativeInts.Collection.ArrayArray E.N.equal``() = validate (NullableNativeInts.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.ArrayArray E.N.not_equal``() = + member _.``NullableNativeInts.Collection.ArrayArray E.N.not_equal``() = validate (NullableNativeInts.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member __.``NullableNativeInts.Collection.ListArray E.I.equals``() = + member _.``NullableNativeInts.Collection.ListArray E.I.equals``() = validate (NullableNativeInts.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.ListArray E.I.equal``() = + member _.``NullableNativeInts.Collection.ListArray E.I.equal``() = validate (NullableNativeInts.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.ListArray E.I.not_equal``() = + member _.``NullableNativeInts.Collection.ListArray E.I.not_equal``() = validate (NullableNativeInts.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member __.``NullableNativeInts.Collection.ListArray E.N.equals``() = + member _.``NullableNativeInts.Collection.ListArray E.N.equals``() = validate (NullableNativeInts.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.ListArray E.N.equal``() = + member _.``NullableNativeInts.Collection.ListArray E.N.equal``() = validate (NullableNativeInts.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableNativeInts.Collection.ListArray E.N.not_equal``() = + member _.``NullableNativeInts.Collection.ListArray E.N.not_equal``() = validate (NullableNativeInts.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member __.``Bytes.Collection.Array C.I.equals``() = + member _.``Bytes.Collection.Array C.I.equals``() = validate (Bytes.Collection.Array) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.Array C.I.equal``() = + member _.``Bytes.Collection.Array C.I.equal``() = validate (Bytes.Collection.Array) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.Array C.I.not_equal``() = + member _.``Bytes.Collection.Array C.I.not_equal``() = validate (Bytes.Collection.Array) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Bytes.Collection.Array C.I.compare``() = + member _.``Bytes.Collection.Array C.I.compare``() = validate (Bytes.Collection.Array) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Bytes.Collection.Array C.I.less_than``() = + member _.``Bytes.Collection.Array C.I.less_than``() = validate (Bytes.Collection.Array) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Bytes.Collection.Array C.I.less_or_equal``() = + member _.``Bytes.Collection.Array C.I.less_or_equal``() = validate (Bytes.Collection.Array) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Bytes.Collection.Array C.I.greater_than``() = + member _.``Bytes.Collection.Array C.I.greater_than``() = validate (Bytes.Collection.Array) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Bytes.Collection.Array C.I.greater_or_equal``() = + member _.``Bytes.Collection.Array C.I.greater_or_equal``() = validate (Bytes.Collection.Array) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Bytes.Collection.Array C.N.equals``() = + member _.``Bytes.Collection.Array C.N.equals``() = validate (Bytes.Collection.Array) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.Array C.N.equal``() = + member _.``Bytes.Collection.Array C.N.equal``() = validate (Bytes.Collection.Array) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.Array C.N.not_equal``() = + member _.``Bytes.Collection.Array C.N.not_equal``() = validate (Bytes.Collection.Array) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Bytes.Collection.Array C.N.compare``() = + member _.``Bytes.Collection.Array C.N.compare``() = validate (Bytes.Collection.Array) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Bytes.Collection.Array C.N.less_than``() = + member _.``Bytes.Collection.Array C.N.less_than``() = validate (Bytes.Collection.Array) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Bytes.Collection.Array C.N.less_or_equal``() = + member _.``Bytes.Collection.Array C.N.less_or_equal``() = validate (Bytes.Collection.Array) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Bytes.Collection.Array C.N.greater_than``() = + member _.``Bytes.Collection.Array C.N.greater_than``() = validate (Bytes.Collection.Array) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Bytes.Collection.Array C.N.greater_or_equal``() = + member _.``Bytes.Collection.Array C.N.greater_or_equal``() = validate (Bytes.Collection.Array) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Bytes.Collection.OptionArray C.I.equals``() = + member _.``Bytes.Collection.OptionArray C.I.equals``() = validate (Bytes.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.OptionArray C.I.equal``() = + member _.``Bytes.Collection.OptionArray C.I.equal``() = validate (Bytes.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.OptionArray C.I.not_equal``() = + member _.``Bytes.Collection.OptionArray C.I.not_equal``() = validate (Bytes.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Bytes.Collection.OptionArray C.I.compare``() = + member _.``Bytes.Collection.OptionArray C.I.compare``() = validate (Bytes.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-255;0;-1;-2;1;255;0;255;254;253;1;0;-255;0;-1;-2;1;1;-254;1;0;-1;1;2;-253;2;1;0 |] [] - member __.``Bytes.Collection.OptionArray C.I.less_than``() = + member _.``Bytes.Collection.OptionArray C.I.less_than``() = validate (Bytes.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member __.``Bytes.Collection.OptionArray C.I.less_or_equal``() = + member _.``Bytes.Collection.OptionArray C.I.less_or_equal``() = validate (Bytes.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member __.``Bytes.Collection.OptionArray C.I.greater_than``() = + member _.``Bytes.Collection.OptionArray C.I.greater_than``() = validate (Bytes.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member __.``Bytes.Collection.OptionArray C.I.greater_or_equal``() = + member _.``Bytes.Collection.OptionArray C.I.greater_or_equal``() = validate (Bytes.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member __.``Bytes.Collection.OptionArray C.N.equals``() = + member _.``Bytes.Collection.OptionArray C.N.equals``() = validate (Bytes.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.OptionArray C.N.equal``() = + member _.``Bytes.Collection.OptionArray C.N.equal``() = validate (Bytes.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.OptionArray C.N.not_equal``() = + member _.``Bytes.Collection.OptionArray C.N.not_equal``() = validate (Bytes.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Bytes.Collection.OptionArray C.N.compare``() = + member _.``Bytes.Collection.OptionArray C.N.compare``() = validate (Bytes.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-255;0;-1;-2;1;255;0;255;254;253;1;0;-255;0;-1;-2;1;1;-254;1;0;-1;1;2;-253;2;1;0 |] [] - member __.``Bytes.Collection.OptionArray C.N.less_than``() = + member _.``Bytes.Collection.OptionArray C.N.less_than``() = validate (Bytes.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member __.``Bytes.Collection.OptionArray C.N.less_or_equal``() = + member _.``Bytes.Collection.OptionArray C.N.less_or_equal``() = validate (Bytes.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member __.``Bytes.Collection.OptionArray C.N.greater_than``() = + member _.``Bytes.Collection.OptionArray C.N.greater_than``() = validate (Bytes.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member __.``Bytes.Collection.OptionArray C.N.greater_or_equal``() = + member _.``Bytes.Collection.OptionArray C.N.greater_or_equal``() = validate (Bytes.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member __.``Bytes.Collection.RefArray C.I.equals``() = + member _.``Bytes.Collection.RefArray C.I.equals``() = validate (Bytes.Collection.RefArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.RefArray C.I.equal``() = + member _.``Bytes.Collection.RefArray C.I.equal``() = validate (Bytes.Collection.RefArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.RefArray C.I.not_equal``() = + member _.``Bytes.Collection.RefArray C.I.not_equal``() = validate (Bytes.Collection.RefArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Bytes.Collection.RefArray C.I.compare``() = + member _.``Bytes.Collection.RefArray C.I.compare``() = validate (Bytes.Collection.RefArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Bytes.Collection.RefArray C.I.less_than``() = + member _.``Bytes.Collection.RefArray C.I.less_than``() = validate (Bytes.Collection.RefArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Bytes.Collection.RefArray C.I.less_or_equal``() = + member _.``Bytes.Collection.RefArray C.I.less_or_equal``() = validate (Bytes.Collection.RefArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Bytes.Collection.RefArray C.I.greater_than``() = + member _.``Bytes.Collection.RefArray C.I.greater_than``() = validate (Bytes.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Bytes.Collection.RefArray C.I.greater_or_equal``() = + member _.``Bytes.Collection.RefArray C.I.greater_or_equal``() = validate (Bytes.Collection.RefArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Bytes.Collection.RefArray C.N.equals``() = + member _.``Bytes.Collection.RefArray C.N.equals``() = validate (Bytes.Collection.RefArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.RefArray C.N.equal``() = + member _.``Bytes.Collection.RefArray C.N.equal``() = validate (Bytes.Collection.RefArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.RefArray C.N.not_equal``() = + member _.``Bytes.Collection.RefArray C.N.not_equal``() = validate (Bytes.Collection.RefArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Bytes.Collection.RefArray C.N.compare``() = + member _.``Bytes.Collection.RefArray C.N.compare``() = validate (Bytes.Collection.RefArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Bytes.Collection.RefArray C.N.less_than``() = + member _.``Bytes.Collection.RefArray C.N.less_than``() = validate (Bytes.Collection.RefArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Bytes.Collection.RefArray C.N.less_or_equal``() = + member _.``Bytes.Collection.RefArray C.N.less_or_equal``() = validate (Bytes.Collection.RefArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Bytes.Collection.RefArray C.N.greater_than``() = + member _.``Bytes.Collection.RefArray C.N.greater_than``() = validate (Bytes.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Bytes.Collection.RefArray C.N.greater_or_equal``() = + member _.``Bytes.Collection.RefArray C.N.greater_or_equal``() = validate (Bytes.Collection.RefArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Bytes.Collection.RefWrapArray C.I.equals``() = + member _.``Bytes.Collection.RefWrapArray C.I.equals``() = validate (Bytes.Collection.RefWrapArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.RefWrapArray C.I.equal``() = + member _.``Bytes.Collection.RefWrapArray C.I.equal``() = validate (Bytes.Collection.RefWrapArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.RefWrapArray C.I.not_equal``() = + member _.``Bytes.Collection.RefWrapArray C.I.not_equal``() = validate (Bytes.Collection.RefWrapArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Bytes.Collection.RefWrapArray C.I.compare``() = + member _.``Bytes.Collection.RefWrapArray C.I.compare``() = validate (Bytes.Collection.RefWrapArray) C.I.compare [| 0;-255;0;-1;-2;255;0;255;254;253;0;-255;0;-1;-2;1;-254;1;0;-1;2;-253;2;1;0 |] [] - member __.``Bytes.Collection.RefWrapArray C.I.less_than``() = + member _.``Bytes.Collection.RefWrapArray C.I.less_than``() = validate (Bytes.Collection.RefWrapArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Bytes.Collection.RefWrapArray C.I.less_or_equal``() = + member _.``Bytes.Collection.RefWrapArray C.I.less_or_equal``() = validate (Bytes.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Bytes.Collection.RefWrapArray C.I.greater_than``() = + member _.``Bytes.Collection.RefWrapArray C.I.greater_than``() = validate (Bytes.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Bytes.Collection.RefWrapArray C.I.greater_or_equal``() = + member _.``Bytes.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Bytes.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Bytes.Collection.RefWrapArray C.N.equals``() = + member _.``Bytes.Collection.RefWrapArray C.N.equals``() = validate (Bytes.Collection.RefWrapArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.RefWrapArray C.N.equal``() = + member _.``Bytes.Collection.RefWrapArray C.N.equal``() = validate (Bytes.Collection.RefWrapArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.RefWrapArray C.N.not_equal``() = + member _.``Bytes.Collection.RefWrapArray C.N.not_equal``() = validate (Bytes.Collection.RefWrapArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Bytes.Collection.RefWrapArray C.N.compare``() = + member _.``Bytes.Collection.RefWrapArray C.N.compare``() = validate (Bytes.Collection.RefWrapArray) C.N.compare [| 0;-255;0;-1;-2;255;0;255;254;253;0;-255;0;-1;-2;1;-254;1;0;-1;2;-253;2;1;0 |] [] - member __.``Bytes.Collection.RefWrapArray C.N.less_than``() = + member _.``Bytes.Collection.RefWrapArray C.N.less_than``() = validate (Bytes.Collection.RefWrapArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Bytes.Collection.RefWrapArray C.N.less_or_equal``() = + member _.``Bytes.Collection.RefWrapArray C.N.less_or_equal``() = validate (Bytes.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Bytes.Collection.RefWrapArray C.N.greater_than``() = + member _.``Bytes.Collection.RefWrapArray C.N.greater_than``() = validate (Bytes.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Bytes.Collection.RefWrapArray C.N.greater_or_equal``() = + member _.``Bytes.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Bytes.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Bytes.Collection.UnionArray C.I.equals``() = + member _.``Bytes.Collection.UnionArray C.I.equals``() = validate (Bytes.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -18025,7 +18025,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionArray C.I.equal``() = + member _.``Bytes.Collection.UnionArray C.I.equal``() = validate (Bytes.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -18061,7 +18061,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionArray C.I.not_equal``() = + member _.``Bytes.Collection.UnionArray C.I.not_equal``() = validate (Bytes.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -18097,7 +18097,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionArray C.I.compare``() = + member _.``Bytes.Collection.UnionArray C.I.compare``() = validate (Bytes.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -18133,7 +18133,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionArray C.I.less_than``() = + member _.``Bytes.Collection.UnionArray C.I.less_than``() = validate (Bytes.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -18169,7 +18169,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionArray C.I.less_or_equal``() = + member _.``Bytes.Collection.UnionArray C.I.less_or_equal``() = validate (Bytes.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -18205,7 +18205,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionArray C.I.greater_than``() = + member _.``Bytes.Collection.UnionArray C.I.greater_than``() = validate (Bytes.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -18241,7 +18241,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionArray C.I.greater_or_equal``() = + member _.``Bytes.Collection.UnionArray C.I.greater_or_equal``() = validate (Bytes.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -18277,7 +18277,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionArray C.N.equals``() = + member _.``Bytes.Collection.UnionArray C.N.equals``() = validate (Bytes.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -18313,7 +18313,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionArray C.N.equal``() = + member _.``Bytes.Collection.UnionArray C.N.equal``() = validate (Bytes.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -18349,7 +18349,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionArray C.N.not_equal``() = + member _.``Bytes.Collection.UnionArray C.N.not_equal``() = validate (Bytes.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -18385,7 +18385,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionArray C.N.compare``() = + member _.``Bytes.Collection.UnionArray C.N.compare``() = validate (Bytes.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -18421,7 +18421,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionArray C.N.less_than``() = + member _.``Bytes.Collection.UnionArray C.N.less_than``() = validate (Bytes.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -18457,7 +18457,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionArray C.N.less_or_equal``() = + member _.``Bytes.Collection.UnionArray C.N.less_or_equal``() = validate (Bytes.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -18493,7 +18493,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionArray C.N.greater_than``() = + member _.``Bytes.Collection.UnionArray C.N.greater_than``() = validate (Bytes.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -18529,7 +18529,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionArray C.N.greater_or_equal``() = + member _.``Bytes.Collection.UnionArray C.N.greater_or_equal``() = validate (Bytes.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -18565,7 +18565,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionWrapArray C.I.equals``() = + member _.``Bytes.Collection.UnionWrapArray C.I.equals``() = validate (Bytes.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -18601,7 +18601,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionWrapArray C.I.equal``() = + member _.``Bytes.Collection.UnionWrapArray C.I.equal``() = validate (Bytes.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -18637,7 +18637,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionWrapArray C.I.not_equal``() = + member _.``Bytes.Collection.UnionWrapArray C.I.not_equal``() = validate (Bytes.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -18673,7 +18673,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionWrapArray C.I.compare``() = + member _.``Bytes.Collection.UnionWrapArray C.I.compare``() = validate (Bytes.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-255;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-255;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-255; @@ -18709,7 +18709,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionWrapArray C.I.less_than``() = + member _.``Bytes.Collection.UnionWrapArray C.I.less_than``() = validate (Bytes.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -18745,7 +18745,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionWrapArray C.I.less_or_equal``() = + member _.``Bytes.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Bytes.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -18781,7 +18781,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionWrapArray C.I.greater_than``() = + member _.``Bytes.Collection.UnionWrapArray C.I.greater_than``() = validate (Bytes.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -18817,7 +18817,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionWrapArray C.I.greater_or_equal``() = + member _.``Bytes.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Bytes.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -18853,7 +18853,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionWrapArray C.N.equals``() = + member _.``Bytes.Collection.UnionWrapArray C.N.equals``() = validate (Bytes.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -18889,7 +18889,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionWrapArray C.N.equal``() = + member _.``Bytes.Collection.UnionWrapArray C.N.equal``() = validate (Bytes.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -18925,7 +18925,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionWrapArray C.N.not_equal``() = + member _.``Bytes.Collection.UnionWrapArray C.N.not_equal``() = validate (Bytes.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -18961,7 +18961,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionWrapArray C.N.compare``() = + member _.``Bytes.Collection.UnionWrapArray C.N.compare``() = validate (Bytes.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-255;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-255;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-255; @@ -18997,7 +18997,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionWrapArray C.N.less_than``() = + member _.``Bytes.Collection.UnionWrapArray C.N.less_than``() = validate (Bytes.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -19033,7 +19033,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionWrapArray C.N.less_or_equal``() = + member _.``Bytes.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Bytes.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -19069,7 +19069,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionWrapArray C.N.greater_than``() = + member _.``Bytes.Collection.UnionWrapArray C.N.greater_than``() = validate (Bytes.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -19105,7 +19105,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.UnionWrapArray C.N.greater_or_equal``() = + member _.``Bytes.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Bytes.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -19141,199 +19141,199 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ValueArray C.I.equals``() = + member _.``Bytes.Collection.ValueArray C.I.equals``() = validate (Bytes.Collection.ValueArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.ValueArray C.I.equal``() = + member _.``Bytes.Collection.ValueArray C.I.equal``() = validate (Bytes.Collection.ValueArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.ValueArray C.I.not_equal``() = + member _.``Bytes.Collection.ValueArray C.I.not_equal``() = validate (Bytes.Collection.ValueArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Bytes.Collection.ValueArray C.I.compare``() = + member _.``Bytes.Collection.ValueArray C.I.compare``() = validate (Bytes.Collection.ValueArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Bytes.Collection.ValueArray C.I.less_than``() = + member _.``Bytes.Collection.ValueArray C.I.less_than``() = validate (Bytes.Collection.ValueArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Bytes.Collection.ValueArray C.I.less_or_equal``() = + member _.``Bytes.Collection.ValueArray C.I.less_or_equal``() = validate (Bytes.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Bytes.Collection.ValueArray C.I.greater_than``() = + member _.``Bytes.Collection.ValueArray C.I.greater_than``() = validate (Bytes.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Bytes.Collection.ValueArray C.I.greater_or_equal``() = + member _.``Bytes.Collection.ValueArray C.I.greater_or_equal``() = validate (Bytes.Collection.ValueArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Bytes.Collection.ValueArray C.N.equals``() = + member _.``Bytes.Collection.ValueArray C.N.equals``() = validate (Bytes.Collection.ValueArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.ValueArray C.N.equal``() = + member _.``Bytes.Collection.ValueArray C.N.equal``() = validate (Bytes.Collection.ValueArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.ValueArray C.N.not_equal``() = + member _.``Bytes.Collection.ValueArray C.N.not_equal``() = validate (Bytes.Collection.ValueArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Bytes.Collection.ValueArray C.N.compare``() = + member _.``Bytes.Collection.ValueArray C.N.compare``() = validate (Bytes.Collection.ValueArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Bytes.Collection.ValueArray C.N.less_than``() = + member _.``Bytes.Collection.ValueArray C.N.less_than``() = validate (Bytes.Collection.ValueArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Bytes.Collection.ValueArray C.N.less_or_equal``() = + member _.``Bytes.Collection.ValueArray C.N.less_or_equal``() = validate (Bytes.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Bytes.Collection.ValueArray C.N.greater_than``() = + member _.``Bytes.Collection.ValueArray C.N.greater_than``() = validate (Bytes.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Bytes.Collection.ValueArray C.N.greater_or_equal``() = + member _.``Bytes.Collection.ValueArray C.N.greater_or_equal``() = validate (Bytes.Collection.ValueArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Bytes.Collection.ValueWrapArray C.I.equals``() = + member _.``Bytes.Collection.ValueWrapArray C.I.equals``() = validate (Bytes.Collection.ValueWrapArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.ValueWrapArray C.I.equal``() = + member _.``Bytes.Collection.ValueWrapArray C.I.equal``() = validate (Bytes.Collection.ValueWrapArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.ValueWrapArray C.I.not_equal``() = + member _.``Bytes.Collection.ValueWrapArray C.I.not_equal``() = validate (Bytes.Collection.ValueWrapArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Bytes.Collection.ValueWrapArray C.I.compare``() = + member _.``Bytes.Collection.ValueWrapArray C.I.compare``() = validate (Bytes.Collection.ValueWrapArray) C.I.compare [| 0;-255;0;-1;-2;255;0;255;254;253;0;-255;0;-1;-2;1;-254;1;0;-1;2;-253;2;1;0 |] [] - member __.``Bytes.Collection.ValueWrapArray C.I.less_than``() = + member _.``Bytes.Collection.ValueWrapArray C.I.less_than``() = validate (Bytes.Collection.ValueWrapArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Bytes.Collection.ValueWrapArray C.I.less_or_equal``() = + member _.``Bytes.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Bytes.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Bytes.Collection.ValueWrapArray C.I.greater_than``() = + member _.``Bytes.Collection.ValueWrapArray C.I.greater_than``() = validate (Bytes.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Bytes.Collection.ValueWrapArray C.I.greater_or_equal``() = + member _.``Bytes.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Bytes.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Bytes.Collection.ValueWrapArray C.N.equals``() = + member _.``Bytes.Collection.ValueWrapArray C.N.equals``() = validate (Bytes.Collection.ValueWrapArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.ValueWrapArray C.N.equal``() = + member _.``Bytes.Collection.ValueWrapArray C.N.equal``() = validate (Bytes.Collection.ValueWrapArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Bytes.Collection.ValueWrapArray C.N.not_equal``() = + member _.``Bytes.Collection.ValueWrapArray C.N.not_equal``() = validate (Bytes.Collection.ValueWrapArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Bytes.Collection.ValueWrapArray C.N.compare``() = + member _.``Bytes.Collection.ValueWrapArray C.N.compare``() = validate (Bytes.Collection.ValueWrapArray) C.N.compare [| 0;-255;0;-1;-2;255;0;255;254;253;0;-255;0;-1;-2;1;-254;1;0;-1;2;-253;2;1;0 |] [] - member __.``Bytes.Collection.ValueWrapArray C.N.less_than``() = + member _.``Bytes.Collection.ValueWrapArray C.N.less_than``() = validate (Bytes.Collection.ValueWrapArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Bytes.Collection.ValueWrapArray C.N.less_or_equal``() = + member _.``Bytes.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Bytes.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Bytes.Collection.ValueWrapArray C.N.greater_than``() = + member _.``Bytes.Collection.ValueWrapArray C.N.greater_than``() = validate (Bytes.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Bytes.Collection.ValueWrapArray C.N.greater_or_equal``() = + member _.``Bytes.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Bytes.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Bytes.Collection.ArrayArray C.I.equals``() = + member _.``Bytes.Collection.ArrayArray C.I.equals``() = validate (Bytes.Collection.ArrayArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19341,7 +19341,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray C.I.equal``() = + member _.``Bytes.Collection.ArrayArray C.I.equal``() = validate (Bytes.Collection.ArrayArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19349,7 +19349,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray C.I.not_equal``() = + member _.``Bytes.Collection.ArrayArray C.I.not_equal``() = validate (Bytes.Collection.ArrayArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -19357,7 +19357,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray C.I.compare``() = + member _.``Bytes.Collection.ArrayArray C.I.compare``() = validate (Bytes.Collection.ArrayArray) C.I.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;-1;0;-1;-1; @@ -19365,7 +19365,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray C.I.less_than``() = + member _.``Bytes.Collection.ArrayArray C.I.less_than``() = validate (Bytes.Collection.ArrayArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; @@ -19373,7 +19373,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray C.I.less_or_equal``() = + member _.``Bytes.Collection.ArrayArray C.I.less_or_equal``() = validate (Bytes.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; @@ -19381,7 +19381,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray C.I.greater_than``() = + member _.``Bytes.Collection.ArrayArray C.I.greater_than``() = validate (Bytes.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; @@ -19389,7 +19389,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray C.I.greater_or_equal``() = + member _.``Bytes.Collection.ArrayArray C.I.greater_or_equal``() = validate (Bytes.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; @@ -19397,7 +19397,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray C.N.equals``() = + member _.``Bytes.Collection.ArrayArray C.N.equals``() = validate (Bytes.Collection.ArrayArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19405,7 +19405,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray C.N.equal``() = + member _.``Bytes.Collection.ArrayArray C.N.equal``() = validate (Bytes.Collection.ArrayArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19413,7 +19413,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray C.N.not_equal``() = + member _.``Bytes.Collection.ArrayArray C.N.not_equal``() = validate (Bytes.Collection.ArrayArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -19421,7 +19421,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray C.N.compare``() = + member _.``Bytes.Collection.ArrayArray C.N.compare``() = validate (Bytes.Collection.ArrayArray) C.N.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;-1;0;-1;-1; @@ -19429,7 +19429,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray C.N.less_than``() = + member _.``Bytes.Collection.ArrayArray C.N.less_than``() = validate (Bytes.Collection.ArrayArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; @@ -19437,7 +19437,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray C.N.less_or_equal``() = + member _.``Bytes.Collection.ArrayArray C.N.less_or_equal``() = validate (Bytes.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; @@ -19445,7 +19445,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray C.N.greater_than``() = + member _.``Bytes.Collection.ArrayArray C.N.greater_than``() = validate (Bytes.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; @@ -19453,7 +19453,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray C.N.greater_or_equal``() = + member _.``Bytes.Collection.ArrayArray C.N.greater_or_equal``() = validate (Bytes.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; @@ -19461,7 +19461,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ListArray C.I.equals``() = + member _.``Bytes.Collection.ListArray C.I.equals``() = validate (Bytes.Collection.ListArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19469,7 +19469,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ListArray C.I.equal``() = + member _.``Bytes.Collection.ListArray C.I.equal``() = validate (Bytes.Collection.ListArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19477,7 +19477,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ListArray C.I.not_equal``() = + member _.``Bytes.Collection.ListArray C.I.not_equal``() = validate (Bytes.Collection.ListArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -19485,7 +19485,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ListArray C.I.compare``() = + member _.``Bytes.Collection.ListArray C.I.compare``() = validate (Bytes.Collection.ListArray) C.I.compare [| 0;-255;0;-1;-2;-1;-255;-1;-1;-2;255;0;255;254;253;255;-1;255;254;253;0;-255;0;-1;-2;-1;-255;-1;-1;-2;1;-254;1;0;-1;1;-254;1;-1;-1; 2;-253;2;1;0;2;-253;2;1;-1;1;-255;1;-1;-2;0;-255;254;-1;-2;255;1;255;254;253;255;0;255;254;253;1;-255;1;-1;-2;-254;-255;0;-1;-2; @@ -19493,7 +19493,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ListArray C.I.less_than``() = + member _.``Bytes.Collection.ListArray C.I.less_than``() = validate (Bytes.Collection.ListArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; @@ -19501,7 +19501,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ListArray C.I.less_or_equal``() = + member _.``Bytes.Collection.ListArray C.I.less_or_equal``() = validate (Bytes.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; @@ -19509,7 +19509,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ListArray C.I.greater_than``() = + member _.``Bytes.Collection.ListArray C.I.greater_than``() = validate (Bytes.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; @@ -19517,7 +19517,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ListArray C.I.greater_or_equal``() = + member _.``Bytes.Collection.ListArray C.I.greater_or_equal``() = validate (Bytes.Collection.ListArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; @@ -19525,7 +19525,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ListArray C.N.equals``() = + member _.``Bytes.Collection.ListArray C.N.equals``() = validate (Bytes.Collection.ListArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19533,7 +19533,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ListArray C.N.equal``() = + member _.``Bytes.Collection.ListArray C.N.equal``() = validate (Bytes.Collection.ListArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19541,7 +19541,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ListArray C.N.not_equal``() = + member _.``Bytes.Collection.ListArray C.N.not_equal``() = validate (Bytes.Collection.ListArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -19549,7 +19549,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ListArray C.N.compare``() = + member _.``Bytes.Collection.ListArray C.N.compare``() = validate (Bytes.Collection.ListArray) C.N.compare [| 0;-255;0;-1;-2;-1;-255;-1;-1;-2;255;0;255;254;253;255;-1;255;254;253;0;-255;0;-1;-2;-1;-255;-1;-1;-2;1;-254;1;0;-1;1;-254;1;-1;-1; 2;-253;2;1;0;2;-253;2;1;-1;1;-255;1;-1;-2;0;-255;254;-1;-2;255;1;255;254;253;255;0;255;254;253;1;-255;1;-1;-2;-254;-255;0;-1;-2; @@ -19557,7 +19557,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ListArray C.N.less_than``() = + member _.``Bytes.Collection.ListArray C.N.less_than``() = validate (Bytes.Collection.ListArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; @@ -19565,7 +19565,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ListArray C.N.less_or_equal``() = + member _.``Bytes.Collection.ListArray C.N.less_or_equal``() = validate (Bytes.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; @@ -19573,7 +19573,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ListArray C.N.greater_than``() = + member _.``Bytes.Collection.ListArray C.N.greater_than``() = validate (Bytes.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; @@ -19581,7 +19581,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ListArray C.N.greater_or_equal``() = + member _.``Bytes.Collection.ListArray C.N.greater_or_equal``() = validate (Bytes.Collection.ListArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; @@ -19589,7 +19589,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19597,7 +19597,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19605,7 +19605,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -19613,7 +19613,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -19621,7 +19621,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; @@ -19629,7 +19629,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; @@ -19637,7 +19637,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; @@ -19645,7 +19645,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; @@ -19653,7 +19653,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19661,7 +19661,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -19669,7 +19669,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -19677,7 +19677,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -19685,7 +19685,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; @@ -19693,7 +19693,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; @@ -19701,7 +19701,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; @@ -19709,7 +19709,7 @@ type GeneratedTests () = |] [] - member __.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member _.``Bytes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Bytes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; @@ -19717,157 +19717,157 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.Array E.I.equals``() = + member _.``NullableBytes.Collection.Array E.I.equals``() = validate (NullableBytes.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.Array E.I.equal``() = + member _.``NullableBytes.Collection.Array E.I.equal``() = validate (NullableBytes.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.Array E.I.not_equal``() = + member _.``NullableBytes.Collection.Array E.I.not_equal``() = validate (NullableBytes.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableBytes.Collection.Array E.N.equals``() = + member _.``NullableBytes.Collection.Array E.N.equals``() = validate (NullableBytes.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.Array E.N.equal``() = + member _.``NullableBytes.Collection.Array E.N.equal``() = validate (NullableBytes.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.Array E.N.not_equal``() = + member _.``NullableBytes.Collection.Array E.N.not_equal``() = validate (NullableBytes.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableBytes.Collection.OptionArray E.I.equals``() = + member _.``NullableBytes.Collection.OptionArray E.I.equals``() = validate (NullableBytes.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.OptionArray E.I.equal``() = + member _.``NullableBytes.Collection.OptionArray E.I.equal``() = validate (NullableBytes.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.OptionArray E.I.not_equal``() = + member _.``NullableBytes.Collection.OptionArray E.I.not_equal``() = validate (NullableBytes.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``NullableBytes.Collection.OptionArray E.N.equals``() = + member _.``NullableBytes.Collection.OptionArray E.N.equals``() = validate (NullableBytes.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.OptionArray E.N.equal``() = + member _.``NullableBytes.Collection.OptionArray E.N.equal``() = validate (NullableBytes.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.OptionArray E.N.not_equal``() = + member _.``NullableBytes.Collection.OptionArray E.N.not_equal``() = validate (NullableBytes.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``NullableBytes.Collection.RefArray E.I.equals``() = + member _.``NullableBytes.Collection.RefArray E.I.equals``() = validate (NullableBytes.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.RefArray E.I.equal``() = + member _.``NullableBytes.Collection.RefArray E.I.equal``() = validate (NullableBytes.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.RefArray E.I.not_equal``() = + member _.``NullableBytes.Collection.RefArray E.I.not_equal``() = validate (NullableBytes.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableBytes.Collection.RefArray E.N.equals``() = + member _.``NullableBytes.Collection.RefArray E.N.equals``() = validate (NullableBytes.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.RefArray E.N.equal``() = + member _.``NullableBytes.Collection.RefArray E.N.equal``() = validate (NullableBytes.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.RefArray E.N.not_equal``() = + member _.``NullableBytes.Collection.RefArray E.N.not_equal``() = validate (NullableBytes.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableBytes.Collection.RefWrapArray E.I.equals``() = + member _.``NullableBytes.Collection.RefWrapArray E.I.equals``() = validate (NullableBytes.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.RefWrapArray E.I.equal``() = + member _.``NullableBytes.Collection.RefWrapArray E.I.equal``() = validate (NullableBytes.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.RefWrapArray E.I.not_equal``() = + member _.``NullableBytes.Collection.RefWrapArray E.I.not_equal``() = validate (NullableBytes.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableBytes.Collection.RefWrapArray E.N.equals``() = + member _.``NullableBytes.Collection.RefWrapArray E.N.equals``() = validate (NullableBytes.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.RefWrapArray E.N.equal``() = + member _.``NullableBytes.Collection.RefWrapArray E.N.equal``() = validate (NullableBytes.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.RefWrapArray E.N.not_equal``() = + member _.``NullableBytes.Collection.RefWrapArray E.N.not_equal``() = validate (NullableBytes.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableBytes.Collection.UnionArray E.I.equals``() = + member _.``NullableBytes.Collection.UnionArray E.I.equals``() = validate (NullableBytes.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -19917,7 +19917,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.UnionArray E.I.equal``() = + member _.``NullableBytes.Collection.UnionArray E.I.equal``() = validate (NullableBytes.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -19967,7 +19967,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.UnionArray E.I.not_equal``() = + member _.``NullableBytes.Collection.UnionArray E.I.not_equal``() = validate (NullableBytes.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -20017,7 +20017,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.UnionArray E.N.equals``() = + member _.``NullableBytes.Collection.UnionArray E.N.equals``() = validate (NullableBytes.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -20067,7 +20067,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.UnionArray E.N.equal``() = + member _.``NullableBytes.Collection.UnionArray E.N.equal``() = validate (NullableBytes.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -20117,7 +20117,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.UnionArray E.N.not_equal``() = + member _.``NullableBytes.Collection.UnionArray E.N.not_equal``() = validate (NullableBytes.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -20167,7 +20167,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.UnionWrapArray E.I.equals``() = + member _.``NullableBytes.Collection.UnionWrapArray E.I.equals``() = validate (NullableBytes.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -20217,7 +20217,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.UnionWrapArray E.I.equal``() = + member _.``NullableBytes.Collection.UnionWrapArray E.I.equal``() = validate (NullableBytes.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -20267,7 +20267,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.UnionWrapArray E.I.not_equal``() = + member _.``NullableBytes.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableBytes.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -20317,7 +20317,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.UnionWrapArray E.N.equals``() = + member _.``NullableBytes.Collection.UnionWrapArray E.N.equals``() = validate (NullableBytes.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -20367,7 +20367,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.UnionWrapArray E.N.equal``() = + member _.``NullableBytes.Collection.UnionWrapArray E.N.equal``() = validate (NullableBytes.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -20417,7 +20417,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.UnionWrapArray E.N.not_equal``() = + member _.``NullableBytes.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableBytes.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -20467,79 +20467,79 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.ValueArray E.I.equals``() = + member _.``NullableBytes.Collection.ValueArray E.I.equals``() = validate (NullableBytes.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.ValueArray E.I.equal``() = + member _.``NullableBytes.Collection.ValueArray E.I.equal``() = validate (NullableBytes.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.ValueArray E.I.not_equal``() = + member _.``NullableBytes.Collection.ValueArray E.I.not_equal``() = validate (NullableBytes.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableBytes.Collection.ValueArray E.N.equals``() = + member _.``NullableBytes.Collection.ValueArray E.N.equals``() = validate (NullableBytes.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.ValueArray E.N.equal``() = + member _.``NullableBytes.Collection.ValueArray E.N.equal``() = validate (NullableBytes.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.ValueArray E.N.not_equal``() = + member _.``NullableBytes.Collection.ValueArray E.N.not_equal``() = validate (NullableBytes.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableBytes.Collection.ValueWrapArray E.I.equals``() = + member _.``NullableBytes.Collection.ValueWrapArray E.I.equals``() = validate (NullableBytes.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.ValueWrapArray E.I.equal``() = + member _.``NullableBytes.Collection.ValueWrapArray E.I.equal``() = validate (NullableBytes.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.ValueWrapArray E.I.not_equal``() = + member _.``NullableBytes.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableBytes.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableBytes.Collection.ValueWrapArray E.N.equals``() = + member _.``NullableBytes.Collection.ValueWrapArray E.N.equals``() = validate (NullableBytes.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.ValueWrapArray E.N.equal``() = + member _.``NullableBytes.Collection.ValueWrapArray E.N.equal``() = validate (NullableBytes.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableBytes.Collection.ValueWrapArray E.N.not_equal``() = + member _.``NullableBytes.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableBytes.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableBytes.Collection.ArrayArray E.I.equals``() = + member _.``NullableBytes.Collection.ArrayArray E.I.equals``() = validate (NullableBytes.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -20548,7 +20548,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.ArrayArray E.I.equal``() = + member _.``NullableBytes.Collection.ArrayArray E.I.equal``() = validate (NullableBytes.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -20557,7 +20557,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.ArrayArray E.I.not_equal``() = + member _.``NullableBytes.Collection.ArrayArray E.I.not_equal``() = validate (NullableBytes.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -20566,7 +20566,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.ArrayArray E.N.equals``() = + member _.``NullableBytes.Collection.ArrayArray E.N.equals``() = validate (NullableBytes.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -20575,7 +20575,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.ArrayArray E.N.equal``() = + member _.``NullableBytes.Collection.ArrayArray E.N.equal``() = validate (NullableBytes.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -20584,7 +20584,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.ArrayArray E.N.not_equal``() = + member _.``NullableBytes.Collection.ArrayArray E.N.not_equal``() = validate (NullableBytes.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -20593,7 +20593,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.ListArray E.I.equals``() = + member _.``NullableBytes.Collection.ListArray E.I.equals``() = validate (NullableBytes.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -20602,7 +20602,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.ListArray E.I.equal``() = + member _.``NullableBytes.Collection.ListArray E.I.equal``() = validate (NullableBytes.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -20611,7 +20611,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.ListArray E.I.not_equal``() = + member _.``NullableBytes.Collection.ListArray E.I.not_equal``() = validate (NullableBytes.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -20620,7 +20620,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.ListArray E.N.equals``() = + member _.``NullableBytes.Collection.ListArray E.N.equals``() = validate (NullableBytes.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -20629,7 +20629,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.ListArray E.N.equal``() = + member _.``NullableBytes.Collection.ListArray E.N.equal``() = validate (NullableBytes.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -20638,7 +20638,7 @@ type GeneratedTests () = |] [] - member __.``NullableBytes.Collection.ListArray E.N.not_equal``() = + member _.``NullableBytes.Collection.ListArray E.N.not_equal``() = validate (NullableBytes.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -20647,391 +20647,391 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.Array C.I.equals``() = + member _.``Uint16s.Collection.Array C.I.equals``() = validate (Uint16s.Collection.Array) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.Array C.I.equal``() = + member _.``Uint16s.Collection.Array C.I.equal``() = validate (Uint16s.Collection.Array) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.Array C.I.not_equal``() = + member _.``Uint16s.Collection.Array C.I.not_equal``() = validate (Uint16s.Collection.Array) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Uint16s.Collection.Array C.I.compare``() = + member _.``Uint16s.Collection.Array C.I.compare``() = validate (Uint16s.Collection.Array) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Uint16s.Collection.Array C.I.less_than``() = + member _.``Uint16s.Collection.Array C.I.less_than``() = validate (Uint16s.Collection.Array) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Uint16s.Collection.Array C.I.less_or_equal``() = + member _.``Uint16s.Collection.Array C.I.less_or_equal``() = validate (Uint16s.Collection.Array) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Uint16s.Collection.Array C.I.greater_than``() = + member _.``Uint16s.Collection.Array C.I.greater_than``() = validate (Uint16s.Collection.Array) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Uint16s.Collection.Array C.I.greater_or_equal``() = + member _.``Uint16s.Collection.Array C.I.greater_or_equal``() = validate (Uint16s.Collection.Array) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Uint16s.Collection.Array C.N.equals``() = + member _.``Uint16s.Collection.Array C.N.equals``() = validate (Uint16s.Collection.Array) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.Array C.N.equal``() = + member _.``Uint16s.Collection.Array C.N.equal``() = validate (Uint16s.Collection.Array) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.Array C.N.not_equal``() = + member _.``Uint16s.Collection.Array C.N.not_equal``() = validate (Uint16s.Collection.Array) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Uint16s.Collection.Array C.N.compare``() = + member _.``Uint16s.Collection.Array C.N.compare``() = validate (Uint16s.Collection.Array) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Uint16s.Collection.Array C.N.less_than``() = + member _.``Uint16s.Collection.Array C.N.less_than``() = validate (Uint16s.Collection.Array) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Uint16s.Collection.Array C.N.less_or_equal``() = + member _.``Uint16s.Collection.Array C.N.less_or_equal``() = validate (Uint16s.Collection.Array) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Uint16s.Collection.Array C.N.greater_than``() = + member _.``Uint16s.Collection.Array C.N.greater_than``() = validate (Uint16s.Collection.Array) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Uint16s.Collection.Array C.N.greater_or_equal``() = + member _.``Uint16s.Collection.Array C.N.greater_or_equal``() = validate (Uint16s.Collection.Array) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Uint16s.Collection.OptionArray C.I.equals``() = + member _.``Uint16s.Collection.OptionArray C.I.equals``() = validate (Uint16s.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.OptionArray C.I.equal``() = + member _.``Uint16s.Collection.OptionArray C.I.equal``() = validate (Uint16s.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.OptionArray C.I.not_equal``() = + member _.``Uint16s.Collection.OptionArray C.I.not_equal``() = validate (Uint16s.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Uint16s.Collection.OptionArray C.I.compare``() = + member _.``Uint16s.Collection.OptionArray C.I.compare``() = validate (Uint16s.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-65535;0;-1;-2;1;65535;0;65535;65534;65533;1;0;-65535;0;-1;-2;1;1;-65534;1;0;-1;1;2;-65533;2;1;0 |] [] - member __.``Uint16s.Collection.OptionArray C.I.less_than``() = + member _.``Uint16s.Collection.OptionArray C.I.less_than``() = validate (Uint16s.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member __.``Uint16s.Collection.OptionArray C.I.less_or_equal``() = + member _.``Uint16s.Collection.OptionArray C.I.less_or_equal``() = validate (Uint16s.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member __.``Uint16s.Collection.OptionArray C.I.greater_than``() = + member _.``Uint16s.Collection.OptionArray C.I.greater_than``() = validate (Uint16s.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member __.``Uint16s.Collection.OptionArray C.I.greater_or_equal``() = + member _.``Uint16s.Collection.OptionArray C.I.greater_or_equal``() = validate (Uint16s.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member __.``Uint16s.Collection.OptionArray C.N.equals``() = + member _.``Uint16s.Collection.OptionArray C.N.equals``() = validate (Uint16s.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.OptionArray C.N.equal``() = + member _.``Uint16s.Collection.OptionArray C.N.equal``() = validate (Uint16s.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.OptionArray C.N.not_equal``() = + member _.``Uint16s.Collection.OptionArray C.N.not_equal``() = validate (Uint16s.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Uint16s.Collection.OptionArray C.N.compare``() = + member _.``Uint16s.Collection.OptionArray C.N.compare``() = validate (Uint16s.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-65535;0;-1;-2;1;65535;0;65535;65534;65533;1;0;-65535;0;-1;-2;1;1;-65534;1;0;-1;1;2;-65533;2;1;0 |] [] - member __.``Uint16s.Collection.OptionArray C.N.less_than``() = + member _.``Uint16s.Collection.OptionArray C.N.less_than``() = validate (Uint16s.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member __.``Uint16s.Collection.OptionArray C.N.less_or_equal``() = + member _.``Uint16s.Collection.OptionArray C.N.less_or_equal``() = validate (Uint16s.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member __.``Uint16s.Collection.OptionArray C.N.greater_than``() = + member _.``Uint16s.Collection.OptionArray C.N.greater_than``() = validate (Uint16s.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member __.``Uint16s.Collection.OptionArray C.N.greater_or_equal``() = + member _.``Uint16s.Collection.OptionArray C.N.greater_or_equal``() = validate (Uint16s.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member __.``Uint16s.Collection.RefArray C.I.equals``() = + member _.``Uint16s.Collection.RefArray C.I.equals``() = validate (Uint16s.Collection.RefArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.RefArray C.I.equal``() = + member _.``Uint16s.Collection.RefArray C.I.equal``() = validate (Uint16s.Collection.RefArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.RefArray C.I.not_equal``() = + member _.``Uint16s.Collection.RefArray C.I.not_equal``() = validate (Uint16s.Collection.RefArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Uint16s.Collection.RefArray C.I.compare``() = + member _.``Uint16s.Collection.RefArray C.I.compare``() = validate (Uint16s.Collection.RefArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Uint16s.Collection.RefArray C.I.less_than``() = + member _.``Uint16s.Collection.RefArray C.I.less_than``() = validate (Uint16s.Collection.RefArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Uint16s.Collection.RefArray C.I.less_or_equal``() = + member _.``Uint16s.Collection.RefArray C.I.less_or_equal``() = validate (Uint16s.Collection.RefArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Uint16s.Collection.RefArray C.I.greater_than``() = + member _.``Uint16s.Collection.RefArray C.I.greater_than``() = validate (Uint16s.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Uint16s.Collection.RefArray C.I.greater_or_equal``() = + member _.``Uint16s.Collection.RefArray C.I.greater_or_equal``() = validate (Uint16s.Collection.RefArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Uint16s.Collection.RefArray C.N.equals``() = + member _.``Uint16s.Collection.RefArray C.N.equals``() = validate (Uint16s.Collection.RefArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.RefArray C.N.equal``() = + member _.``Uint16s.Collection.RefArray C.N.equal``() = validate (Uint16s.Collection.RefArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.RefArray C.N.not_equal``() = + member _.``Uint16s.Collection.RefArray C.N.not_equal``() = validate (Uint16s.Collection.RefArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Uint16s.Collection.RefArray C.N.compare``() = + member _.``Uint16s.Collection.RefArray C.N.compare``() = validate (Uint16s.Collection.RefArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Uint16s.Collection.RefArray C.N.less_than``() = + member _.``Uint16s.Collection.RefArray C.N.less_than``() = validate (Uint16s.Collection.RefArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Uint16s.Collection.RefArray C.N.less_or_equal``() = + member _.``Uint16s.Collection.RefArray C.N.less_or_equal``() = validate (Uint16s.Collection.RefArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Uint16s.Collection.RefArray C.N.greater_than``() = + member _.``Uint16s.Collection.RefArray C.N.greater_than``() = validate (Uint16s.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Uint16s.Collection.RefArray C.N.greater_or_equal``() = + member _.``Uint16s.Collection.RefArray C.N.greater_or_equal``() = validate (Uint16s.Collection.RefArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Uint16s.Collection.RefWrapArray C.I.equals``() = + member _.``Uint16s.Collection.RefWrapArray C.I.equals``() = validate (Uint16s.Collection.RefWrapArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.RefWrapArray C.I.equal``() = + member _.``Uint16s.Collection.RefWrapArray C.I.equal``() = validate (Uint16s.Collection.RefWrapArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.RefWrapArray C.I.not_equal``() = + member _.``Uint16s.Collection.RefWrapArray C.I.not_equal``() = validate (Uint16s.Collection.RefWrapArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Uint16s.Collection.RefWrapArray C.I.compare``() = + member _.``Uint16s.Collection.RefWrapArray C.I.compare``() = validate (Uint16s.Collection.RefWrapArray) C.I.compare [| 0;-65535;0;-1;-2;65535;0;65535;65534;65533;0;-65535;0;-1;-2;1;-65534;1;0;-1;2;-65533;2;1;0 |] [] - member __.``Uint16s.Collection.RefWrapArray C.I.less_than``() = + member _.``Uint16s.Collection.RefWrapArray C.I.less_than``() = validate (Uint16s.Collection.RefWrapArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Uint16s.Collection.RefWrapArray C.I.less_or_equal``() = + member _.``Uint16s.Collection.RefWrapArray C.I.less_or_equal``() = validate (Uint16s.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Uint16s.Collection.RefWrapArray C.I.greater_than``() = + member _.``Uint16s.Collection.RefWrapArray C.I.greater_than``() = validate (Uint16s.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Uint16s.Collection.RefWrapArray C.I.greater_or_equal``() = + member _.``Uint16s.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Uint16s.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Uint16s.Collection.RefWrapArray C.N.equals``() = + member _.``Uint16s.Collection.RefWrapArray C.N.equals``() = validate (Uint16s.Collection.RefWrapArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.RefWrapArray C.N.equal``() = + member _.``Uint16s.Collection.RefWrapArray C.N.equal``() = validate (Uint16s.Collection.RefWrapArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.RefWrapArray C.N.not_equal``() = + member _.``Uint16s.Collection.RefWrapArray C.N.not_equal``() = validate (Uint16s.Collection.RefWrapArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Uint16s.Collection.RefWrapArray C.N.compare``() = + member _.``Uint16s.Collection.RefWrapArray C.N.compare``() = validate (Uint16s.Collection.RefWrapArray) C.N.compare [| 0;-65535;0;-1;-2;65535;0;65535;65534;65533;0;-65535;0;-1;-2;1;-65534;1;0;-1;2;-65533;2;1;0 |] [] - member __.``Uint16s.Collection.RefWrapArray C.N.less_than``() = + member _.``Uint16s.Collection.RefWrapArray C.N.less_than``() = validate (Uint16s.Collection.RefWrapArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Uint16s.Collection.RefWrapArray C.N.less_or_equal``() = + member _.``Uint16s.Collection.RefWrapArray C.N.less_or_equal``() = validate (Uint16s.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Uint16s.Collection.RefWrapArray C.N.greater_than``() = + member _.``Uint16s.Collection.RefWrapArray C.N.greater_than``() = validate (Uint16s.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Uint16s.Collection.RefWrapArray C.N.greater_or_equal``() = + member _.``Uint16s.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Uint16s.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Uint16s.Collection.UnionArray C.I.equals``() = + member _.``Uint16s.Collection.UnionArray C.I.equals``() = validate (Uint16s.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -21067,7 +21067,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionArray C.I.equal``() = + member _.``Uint16s.Collection.UnionArray C.I.equal``() = validate (Uint16s.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -21103,7 +21103,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionArray C.I.not_equal``() = + member _.``Uint16s.Collection.UnionArray C.I.not_equal``() = validate (Uint16s.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -21139,7 +21139,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionArray C.I.compare``() = + member _.``Uint16s.Collection.UnionArray C.I.compare``() = validate (Uint16s.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -21175,7 +21175,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionArray C.I.less_than``() = + member _.``Uint16s.Collection.UnionArray C.I.less_than``() = validate (Uint16s.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -21211,7 +21211,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionArray C.I.less_or_equal``() = + member _.``Uint16s.Collection.UnionArray C.I.less_or_equal``() = validate (Uint16s.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -21247,7 +21247,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionArray C.I.greater_than``() = + member _.``Uint16s.Collection.UnionArray C.I.greater_than``() = validate (Uint16s.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -21283,7 +21283,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionArray C.I.greater_or_equal``() = + member _.``Uint16s.Collection.UnionArray C.I.greater_or_equal``() = validate (Uint16s.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -21319,7 +21319,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionArray C.N.equals``() = + member _.``Uint16s.Collection.UnionArray C.N.equals``() = validate (Uint16s.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -21355,7 +21355,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionArray C.N.equal``() = + member _.``Uint16s.Collection.UnionArray C.N.equal``() = validate (Uint16s.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -21391,7 +21391,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionArray C.N.not_equal``() = + member _.``Uint16s.Collection.UnionArray C.N.not_equal``() = validate (Uint16s.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -21427,7 +21427,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionArray C.N.compare``() = + member _.``Uint16s.Collection.UnionArray C.N.compare``() = validate (Uint16s.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -21463,7 +21463,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionArray C.N.less_than``() = + member _.``Uint16s.Collection.UnionArray C.N.less_than``() = validate (Uint16s.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -21499,7 +21499,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionArray C.N.less_or_equal``() = + member _.``Uint16s.Collection.UnionArray C.N.less_or_equal``() = validate (Uint16s.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -21535,7 +21535,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionArray C.N.greater_than``() = + member _.``Uint16s.Collection.UnionArray C.N.greater_than``() = validate (Uint16s.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -21571,7 +21571,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionArray C.N.greater_or_equal``() = + member _.``Uint16s.Collection.UnionArray C.N.greater_or_equal``() = validate (Uint16s.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -21607,7 +21607,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionWrapArray C.I.equals``() = + member _.``Uint16s.Collection.UnionWrapArray C.I.equals``() = validate (Uint16s.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -21643,7 +21643,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionWrapArray C.I.equal``() = + member _.``Uint16s.Collection.UnionWrapArray C.I.equal``() = validate (Uint16s.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -21679,7 +21679,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionWrapArray C.I.not_equal``() = + member _.``Uint16s.Collection.UnionWrapArray C.I.not_equal``() = validate (Uint16s.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -21715,7 +21715,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionWrapArray C.I.compare``() = + member _.``Uint16s.Collection.UnionWrapArray C.I.compare``() = validate (Uint16s.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-65535;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-65535;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-65535; @@ -21751,7 +21751,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionWrapArray C.I.less_than``() = + member _.``Uint16s.Collection.UnionWrapArray C.I.less_than``() = validate (Uint16s.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -21787,7 +21787,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionWrapArray C.I.less_or_equal``() = + member _.``Uint16s.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Uint16s.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -21823,7 +21823,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionWrapArray C.I.greater_than``() = + member _.``Uint16s.Collection.UnionWrapArray C.I.greater_than``() = validate (Uint16s.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -21859,7 +21859,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionWrapArray C.I.greater_or_equal``() = + member _.``Uint16s.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Uint16s.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -21895,7 +21895,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionWrapArray C.N.equals``() = + member _.``Uint16s.Collection.UnionWrapArray C.N.equals``() = validate (Uint16s.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -21931,7 +21931,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionWrapArray C.N.equal``() = + member _.``Uint16s.Collection.UnionWrapArray C.N.equal``() = validate (Uint16s.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -21967,7 +21967,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionWrapArray C.N.not_equal``() = + member _.``Uint16s.Collection.UnionWrapArray C.N.not_equal``() = validate (Uint16s.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -22003,7 +22003,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionWrapArray C.N.compare``() = + member _.``Uint16s.Collection.UnionWrapArray C.N.compare``() = validate (Uint16s.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-65535;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-2;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-65535;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-2;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-65535; @@ -22039,7 +22039,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionWrapArray C.N.less_than``() = + member _.``Uint16s.Collection.UnionWrapArray C.N.less_than``() = validate (Uint16s.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -22075,7 +22075,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionWrapArray C.N.less_or_equal``() = + member _.``Uint16s.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Uint16s.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -22111,7 +22111,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionWrapArray C.N.greater_than``() = + member _.``Uint16s.Collection.UnionWrapArray C.N.greater_than``() = validate (Uint16s.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -22147,7 +22147,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.UnionWrapArray C.N.greater_or_equal``() = + member _.``Uint16s.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Uint16s.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -22183,199 +22183,199 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ValueArray C.I.equals``() = + member _.``Uint16s.Collection.ValueArray C.I.equals``() = validate (Uint16s.Collection.ValueArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.ValueArray C.I.equal``() = + member _.``Uint16s.Collection.ValueArray C.I.equal``() = validate (Uint16s.Collection.ValueArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.ValueArray C.I.not_equal``() = + member _.``Uint16s.Collection.ValueArray C.I.not_equal``() = validate (Uint16s.Collection.ValueArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Uint16s.Collection.ValueArray C.I.compare``() = + member _.``Uint16s.Collection.ValueArray C.I.compare``() = validate (Uint16s.Collection.ValueArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Uint16s.Collection.ValueArray C.I.less_than``() = + member _.``Uint16s.Collection.ValueArray C.I.less_than``() = validate (Uint16s.Collection.ValueArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Uint16s.Collection.ValueArray C.I.less_or_equal``() = + member _.``Uint16s.Collection.ValueArray C.I.less_or_equal``() = validate (Uint16s.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Uint16s.Collection.ValueArray C.I.greater_than``() = + member _.``Uint16s.Collection.ValueArray C.I.greater_than``() = validate (Uint16s.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Uint16s.Collection.ValueArray C.I.greater_or_equal``() = + member _.``Uint16s.Collection.ValueArray C.I.greater_or_equal``() = validate (Uint16s.Collection.ValueArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Uint16s.Collection.ValueArray C.N.equals``() = + member _.``Uint16s.Collection.ValueArray C.N.equals``() = validate (Uint16s.Collection.ValueArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.ValueArray C.N.equal``() = + member _.``Uint16s.Collection.ValueArray C.N.equal``() = validate (Uint16s.Collection.ValueArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.ValueArray C.N.not_equal``() = + member _.``Uint16s.Collection.ValueArray C.N.not_equal``() = validate (Uint16s.Collection.ValueArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Uint16s.Collection.ValueArray C.N.compare``() = + member _.``Uint16s.Collection.ValueArray C.N.compare``() = validate (Uint16s.Collection.ValueArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Uint16s.Collection.ValueArray C.N.less_than``() = + member _.``Uint16s.Collection.ValueArray C.N.less_than``() = validate (Uint16s.Collection.ValueArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Uint16s.Collection.ValueArray C.N.less_or_equal``() = + member _.``Uint16s.Collection.ValueArray C.N.less_or_equal``() = validate (Uint16s.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Uint16s.Collection.ValueArray C.N.greater_than``() = + member _.``Uint16s.Collection.ValueArray C.N.greater_than``() = validate (Uint16s.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Uint16s.Collection.ValueArray C.N.greater_or_equal``() = + member _.``Uint16s.Collection.ValueArray C.N.greater_or_equal``() = validate (Uint16s.Collection.ValueArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Uint16s.Collection.ValueWrapArray C.I.equals``() = + member _.``Uint16s.Collection.ValueWrapArray C.I.equals``() = validate (Uint16s.Collection.ValueWrapArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.ValueWrapArray C.I.equal``() = + member _.``Uint16s.Collection.ValueWrapArray C.I.equal``() = validate (Uint16s.Collection.ValueWrapArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.ValueWrapArray C.I.not_equal``() = + member _.``Uint16s.Collection.ValueWrapArray C.I.not_equal``() = validate (Uint16s.Collection.ValueWrapArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Uint16s.Collection.ValueWrapArray C.I.compare``() = + member _.``Uint16s.Collection.ValueWrapArray C.I.compare``() = validate (Uint16s.Collection.ValueWrapArray) C.I.compare [| 0;-65535;0;-1;-2;65535;0;65535;65534;65533;0;-65535;0;-1;-2;1;-65534;1;0;-1;2;-65533;2;1;0 |] [] - member __.``Uint16s.Collection.ValueWrapArray C.I.less_than``() = + member _.``Uint16s.Collection.ValueWrapArray C.I.less_than``() = validate (Uint16s.Collection.ValueWrapArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Uint16s.Collection.ValueWrapArray C.I.less_or_equal``() = + member _.``Uint16s.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Uint16s.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Uint16s.Collection.ValueWrapArray C.I.greater_than``() = + member _.``Uint16s.Collection.ValueWrapArray C.I.greater_than``() = validate (Uint16s.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Uint16s.Collection.ValueWrapArray C.I.greater_or_equal``() = + member _.``Uint16s.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Uint16s.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Uint16s.Collection.ValueWrapArray C.N.equals``() = + member _.``Uint16s.Collection.ValueWrapArray C.N.equals``() = validate (Uint16s.Collection.ValueWrapArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.ValueWrapArray C.N.equal``() = + member _.``Uint16s.Collection.ValueWrapArray C.N.equal``() = validate (Uint16s.Collection.ValueWrapArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Uint16s.Collection.ValueWrapArray C.N.not_equal``() = + member _.``Uint16s.Collection.ValueWrapArray C.N.not_equal``() = validate (Uint16s.Collection.ValueWrapArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Uint16s.Collection.ValueWrapArray C.N.compare``() = + member _.``Uint16s.Collection.ValueWrapArray C.N.compare``() = validate (Uint16s.Collection.ValueWrapArray) C.N.compare [| 0;-65535;0;-1;-2;65535;0;65535;65534;65533;0;-65535;0;-1;-2;1;-65534;1;0;-1;2;-65533;2;1;0 |] [] - member __.``Uint16s.Collection.ValueWrapArray C.N.less_than``() = + member _.``Uint16s.Collection.ValueWrapArray C.N.less_than``() = validate (Uint16s.Collection.ValueWrapArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Uint16s.Collection.ValueWrapArray C.N.less_or_equal``() = + member _.``Uint16s.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Uint16s.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Uint16s.Collection.ValueWrapArray C.N.greater_than``() = + member _.``Uint16s.Collection.ValueWrapArray C.N.greater_than``() = validate (Uint16s.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Uint16s.Collection.ValueWrapArray C.N.greater_or_equal``() = + member _.``Uint16s.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Uint16s.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Uint16s.Collection.ArrayArray C.I.equals``() = + member _.``Uint16s.Collection.ArrayArray C.I.equals``() = validate (Uint16s.Collection.ArrayArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22383,7 +22383,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray C.I.equal``() = + member _.``Uint16s.Collection.ArrayArray C.I.equal``() = validate (Uint16s.Collection.ArrayArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22391,7 +22391,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray C.I.not_equal``() = + member _.``Uint16s.Collection.ArrayArray C.I.not_equal``() = validate (Uint16s.Collection.ArrayArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -22399,7 +22399,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray C.I.compare``() = + member _.``Uint16s.Collection.ArrayArray C.I.compare``() = validate (Uint16s.Collection.ArrayArray) C.I.compare [| 0;-65535;0;-1;-2;-1;-1;-1;-1;-1;65535;0;65535;65534;65533;-1;-1;-1;-1;-1;0;-65535;0;-1;-2;-1;-1;-1;-1;-1;1;-65534;1;0;-1;-1;-1;-1;-1;-1; 2;-65533;2;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-65535;65534;-1;-2;1;1;1;1;1;65535;0;65535;65534;65533;1;1;1;1;1;-65534;-65535;0;-1;-2; @@ -22407,7 +22407,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray C.I.less_than``() = + member _.``Uint16s.Collection.ArrayArray C.I.less_than``() = validate (Uint16s.Collection.ArrayArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; @@ -22415,7 +22415,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray C.I.less_or_equal``() = + member _.``Uint16s.Collection.ArrayArray C.I.less_or_equal``() = validate (Uint16s.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; @@ -22423,7 +22423,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray C.I.greater_than``() = + member _.``Uint16s.Collection.ArrayArray C.I.greater_than``() = validate (Uint16s.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; @@ -22431,7 +22431,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray C.I.greater_or_equal``() = + member _.``Uint16s.Collection.ArrayArray C.I.greater_or_equal``() = validate (Uint16s.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; @@ -22439,7 +22439,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray C.N.equals``() = + member _.``Uint16s.Collection.ArrayArray C.N.equals``() = validate (Uint16s.Collection.ArrayArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22447,7 +22447,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray C.N.equal``() = + member _.``Uint16s.Collection.ArrayArray C.N.equal``() = validate (Uint16s.Collection.ArrayArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22455,7 +22455,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray C.N.not_equal``() = + member _.``Uint16s.Collection.ArrayArray C.N.not_equal``() = validate (Uint16s.Collection.ArrayArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -22463,7 +22463,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray C.N.compare``() = + member _.``Uint16s.Collection.ArrayArray C.N.compare``() = validate (Uint16s.Collection.ArrayArray) C.N.compare [| 0;-65535;0;-1;-2;-1;-1;-1;-1;-1;65535;0;65535;65534;65533;-1;-1;-1;-1;-1;0;-65535;0;-1;-2;-1;-1;-1;-1;-1;1;-65534;1;0;-1;-1;-1;-1;-1;-1; 2;-65533;2;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-65535;65534;-1;-2;1;1;1;1;1;65535;0;65535;65534;65533;1;1;1;1;1;-65534;-65535;0;-1;-2; @@ -22471,7 +22471,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray C.N.less_than``() = + member _.``Uint16s.Collection.ArrayArray C.N.less_than``() = validate (Uint16s.Collection.ArrayArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; @@ -22479,7 +22479,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray C.N.less_or_equal``() = + member _.``Uint16s.Collection.ArrayArray C.N.less_or_equal``() = validate (Uint16s.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; @@ -22487,7 +22487,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray C.N.greater_than``() = + member _.``Uint16s.Collection.ArrayArray C.N.greater_than``() = validate (Uint16s.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; @@ -22495,7 +22495,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray C.N.greater_or_equal``() = + member _.``Uint16s.Collection.ArrayArray C.N.greater_or_equal``() = validate (Uint16s.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; @@ -22503,7 +22503,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ListArray C.I.equals``() = + member _.``Uint16s.Collection.ListArray C.I.equals``() = validate (Uint16s.Collection.ListArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22511,7 +22511,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ListArray C.I.equal``() = + member _.``Uint16s.Collection.ListArray C.I.equal``() = validate (Uint16s.Collection.ListArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22519,7 +22519,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ListArray C.I.not_equal``() = + member _.``Uint16s.Collection.ListArray C.I.not_equal``() = validate (Uint16s.Collection.ListArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -22527,7 +22527,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ListArray C.I.compare``() = + member _.``Uint16s.Collection.ListArray C.I.compare``() = validate (Uint16s.Collection.ListArray) C.I.compare [| 0;-65535;0;-1;-2;-1;-65535;-1;-1;-2;65535;0;65535;65534;65533;65535;-1;65535;65534;65533;0;-65535;0;-1;-2;-1;-65535;-1;-1;-2;1;-65534;1;0;-1;1;-65534;1;-1;-1; 2;-65533;2;1;0;2;-65533;2;1;-1;1;-65535;1;-1;-2;0;-65535;65534;-1;-2;65535;1;65535;65534;65533;65535;0;65535;65534;65533;1;-65535;1;-1;-2;-65534;-65535;0;-1;-2; @@ -22535,7 +22535,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ListArray C.I.less_than``() = + member _.``Uint16s.Collection.ListArray C.I.less_than``() = validate (Uint16s.Collection.ListArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; @@ -22543,7 +22543,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ListArray C.I.less_or_equal``() = + member _.``Uint16s.Collection.ListArray C.I.less_or_equal``() = validate (Uint16s.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; @@ -22551,7 +22551,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ListArray C.I.greater_than``() = + member _.``Uint16s.Collection.ListArray C.I.greater_than``() = validate (Uint16s.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; @@ -22559,7 +22559,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ListArray C.I.greater_or_equal``() = + member _.``Uint16s.Collection.ListArray C.I.greater_or_equal``() = validate (Uint16s.Collection.ListArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; @@ -22567,7 +22567,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ListArray C.N.equals``() = + member _.``Uint16s.Collection.ListArray C.N.equals``() = validate (Uint16s.Collection.ListArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22575,7 +22575,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ListArray C.N.equal``() = + member _.``Uint16s.Collection.ListArray C.N.equal``() = validate (Uint16s.Collection.ListArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22583,7 +22583,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ListArray C.N.not_equal``() = + member _.``Uint16s.Collection.ListArray C.N.not_equal``() = validate (Uint16s.Collection.ListArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -22591,7 +22591,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ListArray C.N.compare``() = + member _.``Uint16s.Collection.ListArray C.N.compare``() = validate (Uint16s.Collection.ListArray) C.N.compare [| 0;-65535;0;-1;-2;-1;-65535;-1;-1;-2;65535;0;65535;65534;65533;65535;-1;65535;65534;65533;0;-65535;0;-1;-2;-1;-65535;-1;-1;-2;1;-65534;1;0;-1;1;-65534;1;-1;-1; 2;-65533;2;1;0;2;-65533;2;1;-1;1;-65535;1;-1;-2;0;-65535;65534;-1;-2;65535;1;65535;65534;65533;65535;0;65535;65534;65533;1;-65535;1;-1;-2;-65534;-65535;0;-1;-2; @@ -22599,7 +22599,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ListArray C.N.less_than``() = + member _.``Uint16s.Collection.ListArray C.N.less_than``() = validate (Uint16s.Collection.ListArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; @@ -22607,7 +22607,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ListArray C.N.less_or_equal``() = + member _.``Uint16s.Collection.ListArray C.N.less_or_equal``() = validate (Uint16s.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; @@ -22615,7 +22615,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ListArray C.N.greater_than``() = + member _.``Uint16s.Collection.ListArray C.N.greater_than``() = validate (Uint16s.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; @@ -22623,7 +22623,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ListArray C.N.greater_or_equal``() = + member _.``Uint16s.Collection.ListArray C.N.greater_or_equal``() = validate (Uint16s.Collection.ListArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; @@ -22631,7 +22631,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22639,7 +22639,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22647,7 +22647,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -22655,7 +22655,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -22663,7 +22663,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; @@ -22671,7 +22671,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; @@ -22679,7 +22679,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; @@ -22687,7 +22687,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; @@ -22695,7 +22695,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22703,7 +22703,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -22711,7 +22711,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -22719,7 +22719,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -22727,7 +22727,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; @@ -22735,7 +22735,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; @@ -22743,7 +22743,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; @@ -22751,7 +22751,7 @@ type GeneratedTests () = |] [] - member __.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member _.``Uint16s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Uint16s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; @@ -22759,157 +22759,157 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.Array E.I.equals``() = + member _.``NullableUInt16s.Collection.Array E.I.equals``() = validate (NullableUInt16s.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.Array E.I.equal``() = + member _.``NullableUInt16s.Collection.Array E.I.equal``() = validate (NullableUInt16s.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.Array E.I.not_equal``() = + member _.``NullableUInt16s.Collection.Array E.I.not_equal``() = validate (NullableUInt16s.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt16s.Collection.Array E.N.equals``() = + member _.``NullableUInt16s.Collection.Array E.N.equals``() = validate (NullableUInt16s.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.Array E.N.equal``() = + member _.``NullableUInt16s.Collection.Array E.N.equal``() = validate (NullableUInt16s.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.Array E.N.not_equal``() = + member _.``NullableUInt16s.Collection.Array E.N.not_equal``() = validate (NullableUInt16s.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt16s.Collection.OptionArray E.I.equals``() = + member _.``NullableUInt16s.Collection.OptionArray E.I.equals``() = validate (NullableUInt16s.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.OptionArray E.I.equal``() = + member _.``NullableUInt16s.Collection.OptionArray E.I.equal``() = validate (NullableUInt16s.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.OptionArray E.I.not_equal``() = + member _.``NullableUInt16s.Collection.OptionArray E.I.not_equal``() = validate (NullableUInt16s.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt16s.Collection.OptionArray E.N.equals``() = + member _.``NullableUInt16s.Collection.OptionArray E.N.equals``() = validate (NullableUInt16s.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.OptionArray E.N.equal``() = + member _.``NullableUInt16s.Collection.OptionArray E.N.equal``() = validate (NullableUInt16s.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.OptionArray E.N.not_equal``() = + member _.``NullableUInt16s.Collection.OptionArray E.N.not_equal``() = validate (NullableUInt16s.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt16s.Collection.RefArray E.I.equals``() = + member _.``NullableUInt16s.Collection.RefArray E.I.equals``() = validate (NullableUInt16s.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.RefArray E.I.equal``() = + member _.``NullableUInt16s.Collection.RefArray E.I.equal``() = validate (NullableUInt16s.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.RefArray E.I.not_equal``() = + member _.``NullableUInt16s.Collection.RefArray E.I.not_equal``() = validate (NullableUInt16s.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt16s.Collection.RefArray E.N.equals``() = + member _.``NullableUInt16s.Collection.RefArray E.N.equals``() = validate (NullableUInt16s.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.RefArray E.N.equal``() = + member _.``NullableUInt16s.Collection.RefArray E.N.equal``() = validate (NullableUInt16s.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.RefArray E.N.not_equal``() = + member _.``NullableUInt16s.Collection.RefArray E.N.not_equal``() = validate (NullableUInt16s.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt16s.Collection.RefWrapArray E.I.equals``() = + member _.``NullableUInt16s.Collection.RefWrapArray E.I.equals``() = validate (NullableUInt16s.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.RefWrapArray E.I.equal``() = + member _.``NullableUInt16s.Collection.RefWrapArray E.I.equal``() = validate (NullableUInt16s.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.RefWrapArray E.I.not_equal``() = + member _.``NullableUInt16s.Collection.RefWrapArray E.I.not_equal``() = validate (NullableUInt16s.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt16s.Collection.RefWrapArray E.N.equals``() = + member _.``NullableUInt16s.Collection.RefWrapArray E.N.equals``() = validate (NullableUInt16s.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.RefWrapArray E.N.equal``() = + member _.``NullableUInt16s.Collection.RefWrapArray E.N.equal``() = validate (NullableUInt16s.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.RefWrapArray E.N.not_equal``() = + member _.``NullableUInt16s.Collection.RefWrapArray E.N.not_equal``() = validate (NullableUInt16s.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt16s.Collection.UnionArray E.I.equals``() = + member _.``NullableUInt16s.Collection.UnionArray E.I.equals``() = validate (NullableUInt16s.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -22959,7 +22959,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.UnionArray E.I.equal``() = + member _.``NullableUInt16s.Collection.UnionArray E.I.equal``() = validate (NullableUInt16s.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -23009,7 +23009,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.UnionArray E.I.not_equal``() = + member _.``NullableUInt16s.Collection.UnionArray E.I.not_equal``() = validate (NullableUInt16s.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -23059,7 +23059,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.UnionArray E.N.equals``() = + member _.``NullableUInt16s.Collection.UnionArray E.N.equals``() = validate (NullableUInt16s.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -23109,7 +23109,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.UnionArray E.N.equal``() = + member _.``NullableUInt16s.Collection.UnionArray E.N.equal``() = validate (NullableUInt16s.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -23159,7 +23159,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.UnionArray E.N.not_equal``() = + member _.``NullableUInt16s.Collection.UnionArray E.N.not_equal``() = validate (NullableUInt16s.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -23209,7 +23209,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.UnionWrapArray E.I.equals``() = + member _.``NullableUInt16s.Collection.UnionWrapArray E.I.equals``() = validate (NullableUInt16s.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -23259,7 +23259,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.UnionWrapArray E.I.equal``() = + member _.``NullableUInt16s.Collection.UnionWrapArray E.I.equal``() = validate (NullableUInt16s.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -23309,7 +23309,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.UnionWrapArray E.I.not_equal``() = + member _.``NullableUInt16s.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableUInt16s.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -23359,7 +23359,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.UnionWrapArray E.N.equals``() = + member _.``NullableUInt16s.Collection.UnionWrapArray E.N.equals``() = validate (NullableUInt16s.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -23409,7 +23409,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.UnionWrapArray E.N.equal``() = + member _.``NullableUInt16s.Collection.UnionWrapArray E.N.equal``() = validate (NullableUInt16s.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -23459,7 +23459,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.UnionWrapArray E.N.not_equal``() = + member _.``NullableUInt16s.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableUInt16s.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -23509,79 +23509,79 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.ValueArray E.I.equals``() = + member _.``NullableUInt16s.Collection.ValueArray E.I.equals``() = validate (NullableUInt16s.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.ValueArray E.I.equal``() = + member _.``NullableUInt16s.Collection.ValueArray E.I.equal``() = validate (NullableUInt16s.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.ValueArray E.I.not_equal``() = + member _.``NullableUInt16s.Collection.ValueArray E.I.not_equal``() = validate (NullableUInt16s.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt16s.Collection.ValueArray E.N.equals``() = + member _.``NullableUInt16s.Collection.ValueArray E.N.equals``() = validate (NullableUInt16s.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.ValueArray E.N.equal``() = + member _.``NullableUInt16s.Collection.ValueArray E.N.equal``() = validate (NullableUInt16s.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.ValueArray E.N.not_equal``() = + member _.``NullableUInt16s.Collection.ValueArray E.N.not_equal``() = validate (NullableUInt16s.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt16s.Collection.ValueWrapArray E.I.equals``() = + member _.``NullableUInt16s.Collection.ValueWrapArray E.I.equals``() = validate (NullableUInt16s.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.ValueWrapArray E.I.equal``() = + member _.``NullableUInt16s.Collection.ValueWrapArray E.I.equal``() = validate (NullableUInt16s.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.ValueWrapArray E.I.not_equal``() = + member _.``NullableUInt16s.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableUInt16s.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt16s.Collection.ValueWrapArray E.N.equals``() = + member _.``NullableUInt16s.Collection.ValueWrapArray E.N.equals``() = validate (NullableUInt16s.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.ValueWrapArray E.N.equal``() = + member _.``NullableUInt16s.Collection.ValueWrapArray E.N.equal``() = validate (NullableUInt16s.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt16s.Collection.ValueWrapArray E.N.not_equal``() = + member _.``NullableUInt16s.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableUInt16s.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt16s.Collection.ArrayArray E.I.equals``() = + member _.``NullableUInt16s.Collection.ArrayArray E.I.equals``() = validate (NullableUInt16s.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -23590,7 +23590,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.ArrayArray E.I.equal``() = + member _.``NullableUInt16s.Collection.ArrayArray E.I.equal``() = validate (NullableUInt16s.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -23599,7 +23599,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.ArrayArray E.I.not_equal``() = + member _.``NullableUInt16s.Collection.ArrayArray E.I.not_equal``() = validate (NullableUInt16s.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -23608,7 +23608,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.ArrayArray E.N.equals``() = + member _.``NullableUInt16s.Collection.ArrayArray E.N.equals``() = validate (NullableUInt16s.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -23617,7 +23617,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.ArrayArray E.N.equal``() = + member _.``NullableUInt16s.Collection.ArrayArray E.N.equal``() = validate (NullableUInt16s.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -23626,7 +23626,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.ArrayArray E.N.not_equal``() = + member _.``NullableUInt16s.Collection.ArrayArray E.N.not_equal``() = validate (NullableUInt16s.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -23635,7 +23635,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.ListArray E.I.equals``() = + member _.``NullableUInt16s.Collection.ListArray E.I.equals``() = validate (NullableUInt16s.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -23644,7 +23644,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.ListArray E.I.equal``() = + member _.``NullableUInt16s.Collection.ListArray E.I.equal``() = validate (NullableUInt16s.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -23653,7 +23653,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.ListArray E.I.not_equal``() = + member _.``NullableUInt16s.Collection.ListArray E.I.not_equal``() = validate (NullableUInt16s.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -23662,7 +23662,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.ListArray E.N.equals``() = + member _.``NullableUInt16s.Collection.ListArray E.N.equals``() = validate (NullableUInt16s.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -23671,7 +23671,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.ListArray E.N.equal``() = + member _.``NullableUInt16s.Collection.ListArray E.N.equal``() = validate (NullableUInt16s.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -23680,7 +23680,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt16s.Collection.ListArray E.N.not_equal``() = + member _.``NullableUInt16s.Collection.ListArray E.N.not_equal``() = validate (NullableUInt16s.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -23689,391 +23689,391 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.Array C.I.equals``() = + member _.``UInt32s.Collection.Array C.I.equals``() = validate (UInt32s.Collection.Array) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.Array C.I.equal``() = + member _.``UInt32s.Collection.Array C.I.equal``() = validate (UInt32s.Collection.Array) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.Array C.I.not_equal``() = + member _.``UInt32s.Collection.Array C.I.not_equal``() = validate (UInt32s.Collection.Array) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``UInt32s.Collection.Array C.I.compare``() = + member _.``UInt32s.Collection.Array C.I.compare``() = validate (UInt32s.Collection.Array) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``UInt32s.Collection.Array C.I.less_than``() = + member _.``UInt32s.Collection.Array C.I.less_than``() = validate (UInt32s.Collection.Array) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``UInt32s.Collection.Array C.I.less_or_equal``() = + member _.``UInt32s.Collection.Array C.I.less_or_equal``() = validate (UInt32s.Collection.Array) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``UInt32s.Collection.Array C.I.greater_than``() = + member _.``UInt32s.Collection.Array C.I.greater_than``() = validate (UInt32s.Collection.Array) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``UInt32s.Collection.Array C.I.greater_or_equal``() = + member _.``UInt32s.Collection.Array C.I.greater_or_equal``() = validate (UInt32s.Collection.Array) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``UInt32s.Collection.Array C.N.equals``() = + member _.``UInt32s.Collection.Array C.N.equals``() = validate (UInt32s.Collection.Array) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.Array C.N.equal``() = + member _.``UInt32s.Collection.Array C.N.equal``() = validate (UInt32s.Collection.Array) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.Array C.N.not_equal``() = + member _.``UInt32s.Collection.Array C.N.not_equal``() = validate (UInt32s.Collection.Array) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``UInt32s.Collection.Array C.N.compare``() = + member _.``UInt32s.Collection.Array C.N.compare``() = validate (UInt32s.Collection.Array) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``UInt32s.Collection.Array C.N.less_than``() = + member _.``UInt32s.Collection.Array C.N.less_than``() = validate (UInt32s.Collection.Array) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``UInt32s.Collection.Array C.N.less_or_equal``() = + member _.``UInt32s.Collection.Array C.N.less_or_equal``() = validate (UInt32s.Collection.Array) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``UInt32s.Collection.Array C.N.greater_than``() = + member _.``UInt32s.Collection.Array C.N.greater_than``() = validate (UInt32s.Collection.Array) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``UInt32s.Collection.Array C.N.greater_or_equal``() = + member _.``UInt32s.Collection.Array C.N.greater_or_equal``() = validate (UInt32s.Collection.Array) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``UInt32s.Collection.OptionArray C.I.equals``() = + member _.``UInt32s.Collection.OptionArray C.I.equals``() = validate (UInt32s.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.OptionArray C.I.equal``() = + member _.``UInt32s.Collection.OptionArray C.I.equal``() = validate (UInt32s.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.OptionArray C.I.not_equal``() = + member _.``UInt32s.Collection.OptionArray C.I.not_equal``() = validate (UInt32s.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``UInt32s.Collection.OptionArray C.I.compare``() = + member _.``UInt32s.Collection.OptionArray C.I.compare``() = validate (UInt32s.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;0;-1;-1;1;1;0;1;1;1;1;0;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 |] [] - member __.``UInt32s.Collection.OptionArray C.I.less_than``() = + member _.``UInt32s.Collection.OptionArray C.I.less_than``() = validate (UInt32s.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member __.``UInt32s.Collection.OptionArray C.I.less_or_equal``() = + member _.``UInt32s.Collection.OptionArray C.I.less_or_equal``() = validate (UInt32s.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member __.``UInt32s.Collection.OptionArray C.I.greater_than``() = + member _.``UInt32s.Collection.OptionArray C.I.greater_than``() = validate (UInt32s.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member __.``UInt32s.Collection.OptionArray C.I.greater_or_equal``() = + member _.``UInt32s.Collection.OptionArray C.I.greater_or_equal``() = validate (UInt32s.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member __.``UInt32s.Collection.OptionArray C.N.equals``() = + member _.``UInt32s.Collection.OptionArray C.N.equals``() = validate (UInt32s.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.OptionArray C.N.equal``() = + member _.``UInt32s.Collection.OptionArray C.N.equal``() = validate (UInt32s.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.OptionArray C.N.not_equal``() = + member _.``UInt32s.Collection.OptionArray C.N.not_equal``() = validate (UInt32s.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``UInt32s.Collection.OptionArray C.N.compare``() = + member _.``UInt32s.Collection.OptionArray C.N.compare``() = validate (UInt32s.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;0;-1;-1;1;1;0;1;1;1;1;0;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 |] [] - member __.``UInt32s.Collection.OptionArray C.N.less_than``() = + member _.``UInt32s.Collection.OptionArray C.N.less_than``() = validate (UInt32s.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member __.``UInt32s.Collection.OptionArray C.N.less_or_equal``() = + member _.``UInt32s.Collection.OptionArray C.N.less_or_equal``() = validate (UInt32s.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member __.``UInt32s.Collection.OptionArray C.N.greater_than``() = + member _.``UInt32s.Collection.OptionArray C.N.greater_than``() = validate (UInt32s.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member __.``UInt32s.Collection.OptionArray C.N.greater_or_equal``() = + member _.``UInt32s.Collection.OptionArray C.N.greater_or_equal``() = validate (UInt32s.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member __.``UInt32s.Collection.RefArray C.I.equals``() = + member _.``UInt32s.Collection.RefArray C.I.equals``() = validate (UInt32s.Collection.RefArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.RefArray C.I.equal``() = + member _.``UInt32s.Collection.RefArray C.I.equal``() = validate (UInt32s.Collection.RefArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.RefArray C.I.not_equal``() = + member _.``UInt32s.Collection.RefArray C.I.not_equal``() = validate (UInt32s.Collection.RefArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``UInt32s.Collection.RefArray C.I.compare``() = + member _.``UInt32s.Collection.RefArray C.I.compare``() = validate (UInt32s.Collection.RefArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``UInt32s.Collection.RefArray C.I.less_than``() = + member _.``UInt32s.Collection.RefArray C.I.less_than``() = validate (UInt32s.Collection.RefArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``UInt32s.Collection.RefArray C.I.less_or_equal``() = + member _.``UInt32s.Collection.RefArray C.I.less_or_equal``() = validate (UInt32s.Collection.RefArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``UInt32s.Collection.RefArray C.I.greater_than``() = + member _.``UInt32s.Collection.RefArray C.I.greater_than``() = validate (UInt32s.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``UInt32s.Collection.RefArray C.I.greater_or_equal``() = + member _.``UInt32s.Collection.RefArray C.I.greater_or_equal``() = validate (UInt32s.Collection.RefArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``UInt32s.Collection.RefArray C.N.equals``() = + member _.``UInt32s.Collection.RefArray C.N.equals``() = validate (UInt32s.Collection.RefArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.RefArray C.N.equal``() = + member _.``UInt32s.Collection.RefArray C.N.equal``() = validate (UInt32s.Collection.RefArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.RefArray C.N.not_equal``() = + member _.``UInt32s.Collection.RefArray C.N.not_equal``() = validate (UInt32s.Collection.RefArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``UInt32s.Collection.RefArray C.N.compare``() = + member _.``UInt32s.Collection.RefArray C.N.compare``() = validate (UInt32s.Collection.RefArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``UInt32s.Collection.RefArray C.N.less_than``() = + member _.``UInt32s.Collection.RefArray C.N.less_than``() = validate (UInt32s.Collection.RefArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``UInt32s.Collection.RefArray C.N.less_or_equal``() = + member _.``UInt32s.Collection.RefArray C.N.less_or_equal``() = validate (UInt32s.Collection.RefArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``UInt32s.Collection.RefArray C.N.greater_than``() = + member _.``UInt32s.Collection.RefArray C.N.greater_than``() = validate (UInt32s.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``UInt32s.Collection.RefArray C.N.greater_or_equal``() = + member _.``UInt32s.Collection.RefArray C.N.greater_or_equal``() = validate (UInt32s.Collection.RefArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``UInt32s.Collection.RefWrapArray C.I.equals``() = + member _.``UInt32s.Collection.RefWrapArray C.I.equals``() = validate (UInt32s.Collection.RefWrapArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.RefWrapArray C.I.equal``() = + member _.``UInt32s.Collection.RefWrapArray C.I.equal``() = validate (UInt32s.Collection.RefWrapArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.RefWrapArray C.I.not_equal``() = + member _.``UInt32s.Collection.RefWrapArray C.I.not_equal``() = validate (UInt32s.Collection.RefWrapArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``UInt32s.Collection.RefWrapArray C.I.compare``() = + member _.``UInt32s.Collection.RefWrapArray C.I.compare``() = validate (UInt32s.Collection.RefWrapArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``UInt32s.Collection.RefWrapArray C.I.less_than``() = + member _.``UInt32s.Collection.RefWrapArray C.I.less_than``() = validate (UInt32s.Collection.RefWrapArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``UInt32s.Collection.RefWrapArray C.I.less_or_equal``() = + member _.``UInt32s.Collection.RefWrapArray C.I.less_or_equal``() = validate (UInt32s.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``UInt32s.Collection.RefWrapArray C.I.greater_than``() = + member _.``UInt32s.Collection.RefWrapArray C.I.greater_than``() = validate (UInt32s.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``UInt32s.Collection.RefWrapArray C.I.greater_or_equal``() = + member _.``UInt32s.Collection.RefWrapArray C.I.greater_or_equal``() = validate (UInt32s.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``UInt32s.Collection.RefWrapArray C.N.equals``() = + member _.``UInt32s.Collection.RefWrapArray C.N.equals``() = validate (UInt32s.Collection.RefWrapArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.RefWrapArray C.N.equal``() = + member _.``UInt32s.Collection.RefWrapArray C.N.equal``() = validate (UInt32s.Collection.RefWrapArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.RefWrapArray C.N.not_equal``() = + member _.``UInt32s.Collection.RefWrapArray C.N.not_equal``() = validate (UInt32s.Collection.RefWrapArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``UInt32s.Collection.RefWrapArray C.N.compare``() = + member _.``UInt32s.Collection.RefWrapArray C.N.compare``() = validate (UInt32s.Collection.RefWrapArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``UInt32s.Collection.RefWrapArray C.N.less_than``() = + member _.``UInt32s.Collection.RefWrapArray C.N.less_than``() = validate (UInt32s.Collection.RefWrapArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``UInt32s.Collection.RefWrapArray C.N.less_or_equal``() = + member _.``UInt32s.Collection.RefWrapArray C.N.less_or_equal``() = validate (UInt32s.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``UInt32s.Collection.RefWrapArray C.N.greater_than``() = + member _.``UInt32s.Collection.RefWrapArray C.N.greater_than``() = validate (UInt32s.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``UInt32s.Collection.RefWrapArray C.N.greater_or_equal``() = + member _.``UInt32s.Collection.RefWrapArray C.N.greater_or_equal``() = validate (UInt32s.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``UInt32s.Collection.UnionArray C.I.equals``() = + member _.``UInt32s.Collection.UnionArray C.I.equals``() = validate (UInt32s.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -24109,7 +24109,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionArray C.I.equal``() = + member _.``UInt32s.Collection.UnionArray C.I.equal``() = validate (UInt32s.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -24145,7 +24145,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionArray C.I.not_equal``() = + member _.``UInt32s.Collection.UnionArray C.I.not_equal``() = validate (UInt32s.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -24181,7 +24181,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionArray C.I.compare``() = + member _.``UInt32s.Collection.UnionArray C.I.compare``() = validate (UInt32s.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -24217,7 +24217,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionArray C.I.less_than``() = + member _.``UInt32s.Collection.UnionArray C.I.less_than``() = validate (UInt32s.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -24253,7 +24253,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionArray C.I.less_or_equal``() = + member _.``UInt32s.Collection.UnionArray C.I.less_or_equal``() = validate (UInt32s.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -24289,7 +24289,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionArray C.I.greater_than``() = + member _.``UInt32s.Collection.UnionArray C.I.greater_than``() = validate (UInt32s.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -24325,7 +24325,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionArray C.I.greater_or_equal``() = + member _.``UInt32s.Collection.UnionArray C.I.greater_or_equal``() = validate (UInt32s.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -24361,7 +24361,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionArray C.N.equals``() = + member _.``UInt32s.Collection.UnionArray C.N.equals``() = validate (UInt32s.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -24397,7 +24397,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionArray C.N.equal``() = + member _.``UInt32s.Collection.UnionArray C.N.equal``() = validate (UInt32s.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -24433,7 +24433,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionArray C.N.not_equal``() = + member _.``UInt32s.Collection.UnionArray C.N.not_equal``() = validate (UInt32s.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -24469,7 +24469,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionArray C.N.compare``() = + member _.``UInt32s.Collection.UnionArray C.N.compare``() = validate (UInt32s.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -24505,7 +24505,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionArray C.N.less_than``() = + member _.``UInt32s.Collection.UnionArray C.N.less_than``() = validate (UInt32s.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -24541,7 +24541,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionArray C.N.less_or_equal``() = + member _.``UInt32s.Collection.UnionArray C.N.less_or_equal``() = validate (UInt32s.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -24577,7 +24577,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionArray C.N.greater_than``() = + member _.``UInt32s.Collection.UnionArray C.N.greater_than``() = validate (UInt32s.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -24613,7 +24613,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionArray C.N.greater_or_equal``() = + member _.``UInt32s.Collection.UnionArray C.N.greater_or_equal``() = validate (UInt32s.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -24649,7 +24649,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionWrapArray C.I.equals``() = + member _.``UInt32s.Collection.UnionWrapArray C.I.equals``() = validate (UInt32s.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -24685,7 +24685,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionWrapArray C.I.equal``() = + member _.``UInt32s.Collection.UnionWrapArray C.I.equal``() = validate (UInt32s.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -24721,7 +24721,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionWrapArray C.I.not_equal``() = + member _.``UInt32s.Collection.UnionWrapArray C.I.not_equal``() = validate (UInt32s.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -24757,7 +24757,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionWrapArray C.I.compare``() = + member _.``UInt32s.Collection.UnionWrapArray C.I.compare``() = validate (UInt32s.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -24793,7 +24793,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionWrapArray C.I.less_than``() = + member _.``UInt32s.Collection.UnionWrapArray C.I.less_than``() = validate (UInt32s.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -24829,7 +24829,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionWrapArray C.I.less_or_equal``() = + member _.``UInt32s.Collection.UnionWrapArray C.I.less_or_equal``() = validate (UInt32s.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -24865,7 +24865,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionWrapArray C.I.greater_than``() = + member _.``UInt32s.Collection.UnionWrapArray C.I.greater_than``() = validate (UInt32s.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -24901,7 +24901,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionWrapArray C.I.greater_or_equal``() = + member _.``UInt32s.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (UInt32s.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -24937,7 +24937,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionWrapArray C.N.equals``() = + member _.``UInt32s.Collection.UnionWrapArray C.N.equals``() = validate (UInt32s.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -24973,7 +24973,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionWrapArray C.N.equal``() = + member _.``UInt32s.Collection.UnionWrapArray C.N.equal``() = validate (UInt32s.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -25009,7 +25009,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionWrapArray C.N.not_equal``() = + member _.``UInt32s.Collection.UnionWrapArray C.N.not_equal``() = validate (UInt32s.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -25045,7 +25045,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionWrapArray C.N.compare``() = + member _.``UInt32s.Collection.UnionWrapArray C.N.compare``() = validate (UInt32s.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -25081,7 +25081,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionWrapArray C.N.less_than``() = + member _.``UInt32s.Collection.UnionWrapArray C.N.less_than``() = validate (UInt32s.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -25117,7 +25117,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionWrapArray C.N.less_or_equal``() = + member _.``UInt32s.Collection.UnionWrapArray C.N.less_or_equal``() = validate (UInt32s.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -25153,7 +25153,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionWrapArray C.N.greater_than``() = + member _.``UInt32s.Collection.UnionWrapArray C.N.greater_than``() = validate (UInt32s.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -25189,7 +25189,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.UnionWrapArray C.N.greater_or_equal``() = + member _.``UInt32s.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (UInt32s.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -25225,199 +25225,199 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ValueArray C.I.equals``() = + member _.``UInt32s.Collection.ValueArray C.I.equals``() = validate (UInt32s.Collection.ValueArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.ValueArray C.I.equal``() = + member _.``UInt32s.Collection.ValueArray C.I.equal``() = validate (UInt32s.Collection.ValueArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.ValueArray C.I.not_equal``() = + member _.``UInt32s.Collection.ValueArray C.I.not_equal``() = validate (UInt32s.Collection.ValueArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``UInt32s.Collection.ValueArray C.I.compare``() = + member _.``UInt32s.Collection.ValueArray C.I.compare``() = validate (UInt32s.Collection.ValueArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``UInt32s.Collection.ValueArray C.I.less_than``() = + member _.``UInt32s.Collection.ValueArray C.I.less_than``() = validate (UInt32s.Collection.ValueArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``UInt32s.Collection.ValueArray C.I.less_or_equal``() = + member _.``UInt32s.Collection.ValueArray C.I.less_or_equal``() = validate (UInt32s.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``UInt32s.Collection.ValueArray C.I.greater_than``() = + member _.``UInt32s.Collection.ValueArray C.I.greater_than``() = validate (UInt32s.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``UInt32s.Collection.ValueArray C.I.greater_or_equal``() = + member _.``UInt32s.Collection.ValueArray C.I.greater_or_equal``() = validate (UInt32s.Collection.ValueArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``UInt32s.Collection.ValueArray C.N.equals``() = + member _.``UInt32s.Collection.ValueArray C.N.equals``() = validate (UInt32s.Collection.ValueArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.ValueArray C.N.equal``() = + member _.``UInt32s.Collection.ValueArray C.N.equal``() = validate (UInt32s.Collection.ValueArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.ValueArray C.N.not_equal``() = + member _.``UInt32s.Collection.ValueArray C.N.not_equal``() = validate (UInt32s.Collection.ValueArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``UInt32s.Collection.ValueArray C.N.compare``() = + member _.``UInt32s.Collection.ValueArray C.N.compare``() = validate (UInt32s.Collection.ValueArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``UInt32s.Collection.ValueArray C.N.less_than``() = + member _.``UInt32s.Collection.ValueArray C.N.less_than``() = validate (UInt32s.Collection.ValueArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``UInt32s.Collection.ValueArray C.N.less_or_equal``() = + member _.``UInt32s.Collection.ValueArray C.N.less_or_equal``() = validate (UInt32s.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``UInt32s.Collection.ValueArray C.N.greater_than``() = + member _.``UInt32s.Collection.ValueArray C.N.greater_than``() = validate (UInt32s.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``UInt32s.Collection.ValueArray C.N.greater_or_equal``() = + member _.``UInt32s.Collection.ValueArray C.N.greater_or_equal``() = validate (UInt32s.Collection.ValueArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``UInt32s.Collection.ValueWrapArray C.I.equals``() = + member _.``UInt32s.Collection.ValueWrapArray C.I.equals``() = validate (UInt32s.Collection.ValueWrapArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.ValueWrapArray C.I.equal``() = + member _.``UInt32s.Collection.ValueWrapArray C.I.equal``() = validate (UInt32s.Collection.ValueWrapArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.ValueWrapArray C.I.not_equal``() = + member _.``UInt32s.Collection.ValueWrapArray C.I.not_equal``() = validate (UInt32s.Collection.ValueWrapArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``UInt32s.Collection.ValueWrapArray C.I.compare``() = + member _.``UInt32s.Collection.ValueWrapArray C.I.compare``() = validate (UInt32s.Collection.ValueWrapArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``UInt32s.Collection.ValueWrapArray C.I.less_than``() = + member _.``UInt32s.Collection.ValueWrapArray C.I.less_than``() = validate (UInt32s.Collection.ValueWrapArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``UInt32s.Collection.ValueWrapArray C.I.less_or_equal``() = + member _.``UInt32s.Collection.ValueWrapArray C.I.less_or_equal``() = validate (UInt32s.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``UInt32s.Collection.ValueWrapArray C.I.greater_than``() = + member _.``UInt32s.Collection.ValueWrapArray C.I.greater_than``() = validate (UInt32s.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``UInt32s.Collection.ValueWrapArray C.I.greater_or_equal``() = + member _.``UInt32s.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (UInt32s.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``UInt32s.Collection.ValueWrapArray C.N.equals``() = + member _.``UInt32s.Collection.ValueWrapArray C.N.equals``() = validate (UInt32s.Collection.ValueWrapArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.ValueWrapArray C.N.equal``() = + member _.``UInt32s.Collection.ValueWrapArray C.N.equal``() = validate (UInt32s.Collection.ValueWrapArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt32s.Collection.ValueWrapArray C.N.not_equal``() = + member _.``UInt32s.Collection.ValueWrapArray C.N.not_equal``() = validate (UInt32s.Collection.ValueWrapArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``UInt32s.Collection.ValueWrapArray C.N.compare``() = + member _.``UInt32s.Collection.ValueWrapArray C.N.compare``() = validate (UInt32s.Collection.ValueWrapArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``UInt32s.Collection.ValueWrapArray C.N.less_than``() = + member _.``UInt32s.Collection.ValueWrapArray C.N.less_than``() = validate (UInt32s.Collection.ValueWrapArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``UInt32s.Collection.ValueWrapArray C.N.less_or_equal``() = + member _.``UInt32s.Collection.ValueWrapArray C.N.less_or_equal``() = validate (UInt32s.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``UInt32s.Collection.ValueWrapArray C.N.greater_than``() = + member _.``UInt32s.Collection.ValueWrapArray C.N.greater_than``() = validate (UInt32s.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``UInt32s.Collection.ValueWrapArray C.N.greater_or_equal``() = + member _.``UInt32s.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (UInt32s.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``UInt32s.Collection.ArrayArray C.I.equals``() = + member _.``UInt32s.Collection.ArrayArray C.I.equals``() = validate (UInt32s.Collection.ArrayArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25425,7 +25425,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray C.I.equal``() = + member _.``UInt32s.Collection.ArrayArray C.I.equal``() = validate (UInt32s.Collection.ArrayArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25433,7 +25433,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray C.I.not_equal``() = + member _.``UInt32s.Collection.ArrayArray C.I.not_equal``() = validate (UInt32s.Collection.ArrayArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -25441,7 +25441,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray C.I.compare``() = + member _.``UInt32s.Collection.ArrayArray C.I.compare``() = validate (UInt32s.Collection.ArrayArray) C.I.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;-1;0;-1;-1; @@ -25449,7 +25449,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray C.I.less_than``() = + member _.``UInt32s.Collection.ArrayArray C.I.less_than``() = validate (UInt32s.Collection.ArrayArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; @@ -25457,7 +25457,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray C.I.less_or_equal``() = + member _.``UInt32s.Collection.ArrayArray C.I.less_or_equal``() = validate (UInt32s.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; @@ -25465,7 +25465,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray C.I.greater_than``() = + member _.``UInt32s.Collection.ArrayArray C.I.greater_than``() = validate (UInt32s.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; @@ -25473,7 +25473,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray C.I.greater_or_equal``() = + member _.``UInt32s.Collection.ArrayArray C.I.greater_or_equal``() = validate (UInt32s.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; @@ -25481,7 +25481,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray C.N.equals``() = + member _.``UInt32s.Collection.ArrayArray C.N.equals``() = validate (UInt32s.Collection.ArrayArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25489,7 +25489,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray C.N.equal``() = + member _.``UInt32s.Collection.ArrayArray C.N.equal``() = validate (UInt32s.Collection.ArrayArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25497,7 +25497,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray C.N.not_equal``() = + member _.``UInt32s.Collection.ArrayArray C.N.not_equal``() = validate (UInt32s.Collection.ArrayArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -25505,7 +25505,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray C.N.compare``() = + member _.``UInt32s.Collection.ArrayArray C.N.compare``() = validate (UInt32s.Collection.ArrayArray) C.N.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;-1;0;-1;-1; @@ -25513,7 +25513,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray C.N.less_than``() = + member _.``UInt32s.Collection.ArrayArray C.N.less_than``() = validate (UInt32s.Collection.ArrayArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; @@ -25521,7 +25521,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray C.N.less_or_equal``() = + member _.``UInt32s.Collection.ArrayArray C.N.less_or_equal``() = validate (UInt32s.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; @@ -25529,7 +25529,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray C.N.greater_than``() = + member _.``UInt32s.Collection.ArrayArray C.N.greater_than``() = validate (UInt32s.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; @@ -25537,7 +25537,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray C.N.greater_or_equal``() = + member _.``UInt32s.Collection.ArrayArray C.N.greater_or_equal``() = validate (UInt32s.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; @@ -25545,7 +25545,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ListArray C.I.equals``() = + member _.``UInt32s.Collection.ListArray C.I.equals``() = validate (UInt32s.Collection.ListArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25553,7 +25553,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ListArray C.I.equal``() = + member _.``UInt32s.Collection.ListArray C.I.equal``() = validate (UInt32s.Collection.ListArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25561,7 +25561,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ListArray C.I.not_equal``() = + member _.``UInt32s.Collection.ListArray C.I.not_equal``() = validate (UInt32s.Collection.ListArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -25569,7 +25569,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ListArray C.I.compare``() = + member _.``UInt32s.Collection.ListArray C.I.compare``() = validate (UInt32s.Collection.ListArray) C.I.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; 1;-1;1;1;0;1;-1;1;1;-1;1;-1;1;-1;-1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -25577,7 +25577,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ListArray C.I.less_than``() = + member _.``UInt32s.Collection.ListArray C.I.less_than``() = validate (UInt32s.Collection.ListArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; @@ -25585,7 +25585,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ListArray C.I.less_or_equal``() = + member _.``UInt32s.Collection.ListArray C.I.less_or_equal``() = validate (UInt32s.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; @@ -25593,7 +25593,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ListArray C.I.greater_than``() = + member _.``UInt32s.Collection.ListArray C.I.greater_than``() = validate (UInt32s.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; @@ -25601,7 +25601,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ListArray C.I.greater_or_equal``() = + member _.``UInt32s.Collection.ListArray C.I.greater_or_equal``() = validate (UInt32s.Collection.ListArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; @@ -25609,7 +25609,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ListArray C.N.equals``() = + member _.``UInt32s.Collection.ListArray C.N.equals``() = validate (UInt32s.Collection.ListArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25617,7 +25617,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ListArray C.N.equal``() = + member _.``UInt32s.Collection.ListArray C.N.equal``() = validate (UInt32s.Collection.ListArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25625,7 +25625,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ListArray C.N.not_equal``() = + member _.``UInt32s.Collection.ListArray C.N.not_equal``() = validate (UInt32s.Collection.ListArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -25633,7 +25633,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ListArray C.N.compare``() = + member _.``UInt32s.Collection.ListArray C.N.compare``() = validate (UInt32s.Collection.ListArray) C.N.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; 1;-1;1;1;0;1;-1;1;1;-1;1;-1;1;-1;-1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -25641,7 +25641,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ListArray C.N.less_than``() = + member _.``UInt32s.Collection.ListArray C.N.less_than``() = validate (UInt32s.Collection.ListArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; @@ -25649,7 +25649,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ListArray C.N.less_or_equal``() = + member _.``UInt32s.Collection.ListArray C.N.less_or_equal``() = validate (UInt32s.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; @@ -25657,7 +25657,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ListArray C.N.greater_than``() = + member _.``UInt32s.Collection.ListArray C.N.greater_than``() = validate (UInt32s.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; @@ -25665,7 +25665,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ListArray C.N.greater_or_equal``() = + member _.``UInt32s.Collection.ListArray C.N.greater_or_equal``() = validate (UInt32s.Collection.ListArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; @@ -25673,7 +25673,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25681,7 +25681,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25689,7 +25689,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -25697,7 +25697,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -25705,7 +25705,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; @@ -25713,7 +25713,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; @@ -25721,7 +25721,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; @@ -25729,7 +25729,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; @@ -25737,7 +25737,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25745,7 +25745,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -25753,7 +25753,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -25761,7 +25761,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -25769,7 +25769,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; @@ -25777,7 +25777,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; @@ -25785,7 +25785,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; @@ -25793,7 +25793,7 @@ type GeneratedTests () = |] [] - member __.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member _.``UInt32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (UInt32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; @@ -25801,157 +25801,157 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.Array E.I.equals``() = + member _.``NullableUInt32s.Collection.Array E.I.equals``() = validate (NullableUInt32s.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.Array E.I.equal``() = + member _.``NullableUInt32s.Collection.Array E.I.equal``() = validate (NullableUInt32s.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.Array E.I.not_equal``() = + member _.``NullableUInt32s.Collection.Array E.I.not_equal``() = validate (NullableUInt32s.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt32s.Collection.Array E.N.equals``() = + member _.``NullableUInt32s.Collection.Array E.N.equals``() = validate (NullableUInt32s.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.Array E.N.equal``() = + member _.``NullableUInt32s.Collection.Array E.N.equal``() = validate (NullableUInt32s.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.Array E.N.not_equal``() = + member _.``NullableUInt32s.Collection.Array E.N.not_equal``() = validate (NullableUInt32s.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt32s.Collection.OptionArray E.I.equals``() = + member _.``NullableUInt32s.Collection.OptionArray E.I.equals``() = validate (NullableUInt32s.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.OptionArray E.I.equal``() = + member _.``NullableUInt32s.Collection.OptionArray E.I.equal``() = validate (NullableUInt32s.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.OptionArray E.I.not_equal``() = + member _.``NullableUInt32s.Collection.OptionArray E.I.not_equal``() = validate (NullableUInt32s.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt32s.Collection.OptionArray E.N.equals``() = + member _.``NullableUInt32s.Collection.OptionArray E.N.equals``() = validate (NullableUInt32s.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.OptionArray E.N.equal``() = + member _.``NullableUInt32s.Collection.OptionArray E.N.equal``() = validate (NullableUInt32s.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.OptionArray E.N.not_equal``() = + member _.``NullableUInt32s.Collection.OptionArray E.N.not_equal``() = validate (NullableUInt32s.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt32s.Collection.RefArray E.I.equals``() = + member _.``NullableUInt32s.Collection.RefArray E.I.equals``() = validate (NullableUInt32s.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.RefArray E.I.equal``() = + member _.``NullableUInt32s.Collection.RefArray E.I.equal``() = validate (NullableUInt32s.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.RefArray E.I.not_equal``() = + member _.``NullableUInt32s.Collection.RefArray E.I.not_equal``() = validate (NullableUInt32s.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt32s.Collection.RefArray E.N.equals``() = + member _.``NullableUInt32s.Collection.RefArray E.N.equals``() = validate (NullableUInt32s.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.RefArray E.N.equal``() = + member _.``NullableUInt32s.Collection.RefArray E.N.equal``() = validate (NullableUInt32s.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.RefArray E.N.not_equal``() = + member _.``NullableUInt32s.Collection.RefArray E.N.not_equal``() = validate (NullableUInt32s.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt32s.Collection.RefWrapArray E.I.equals``() = + member _.``NullableUInt32s.Collection.RefWrapArray E.I.equals``() = validate (NullableUInt32s.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.RefWrapArray E.I.equal``() = + member _.``NullableUInt32s.Collection.RefWrapArray E.I.equal``() = validate (NullableUInt32s.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.RefWrapArray E.I.not_equal``() = + member _.``NullableUInt32s.Collection.RefWrapArray E.I.not_equal``() = validate (NullableUInt32s.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt32s.Collection.RefWrapArray E.N.equals``() = + member _.``NullableUInt32s.Collection.RefWrapArray E.N.equals``() = validate (NullableUInt32s.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.RefWrapArray E.N.equal``() = + member _.``NullableUInt32s.Collection.RefWrapArray E.N.equal``() = validate (NullableUInt32s.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.RefWrapArray E.N.not_equal``() = + member _.``NullableUInt32s.Collection.RefWrapArray E.N.not_equal``() = validate (NullableUInt32s.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt32s.Collection.UnionArray E.I.equals``() = + member _.``NullableUInt32s.Collection.UnionArray E.I.equals``() = validate (NullableUInt32s.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -26001,7 +26001,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.UnionArray E.I.equal``() = + member _.``NullableUInt32s.Collection.UnionArray E.I.equal``() = validate (NullableUInt32s.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -26051,7 +26051,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.UnionArray E.I.not_equal``() = + member _.``NullableUInt32s.Collection.UnionArray E.I.not_equal``() = validate (NullableUInt32s.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -26101,7 +26101,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.UnionArray E.N.equals``() = + member _.``NullableUInt32s.Collection.UnionArray E.N.equals``() = validate (NullableUInt32s.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -26151,7 +26151,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.UnionArray E.N.equal``() = + member _.``NullableUInt32s.Collection.UnionArray E.N.equal``() = validate (NullableUInt32s.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -26201,7 +26201,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.UnionArray E.N.not_equal``() = + member _.``NullableUInt32s.Collection.UnionArray E.N.not_equal``() = validate (NullableUInt32s.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -26251,7 +26251,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.UnionWrapArray E.I.equals``() = + member _.``NullableUInt32s.Collection.UnionWrapArray E.I.equals``() = validate (NullableUInt32s.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -26301,7 +26301,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.UnionWrapArray E.I.equal``() = + member _.``NullableUInt32s.Collection.UnionWrapArray E.I.equal``() = validate (NullableUInt32s.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -26351,7 +26351,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.UnionWrapArray E.I.not_equal``() = + member _.``NullableUInt32s.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableUInt32s.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -26401,7 +26401,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.UnionWrapArray E.N.equals``() = + member _.``NullableUInt32s.Collection.UnionWrapArray E.N.equals``() = validate (NullableUInt32s.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -26451,7 +26451,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.UnionWrapArray E.N.equal``() = + member _.``NullableUInt32s.Collection.UnionWrapArray E.N.equal``() = validate (NullableUInt32s.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -26501,7 +26501,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.UnionWrapArray E.N.not_equal``() = + member _.``NullableUInt32s.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableUInt32s.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -26551,79 +26551,79 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.ValueArray E.I.equals``() = + member _.``NullableUInt32s.Collection.ValueArray E.I.equals``() = validate (NullableUInt32s.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.ValueArray E.I.equal``() = + member _.``NullableUInt32s.Collection.ValueArray E.I.equal``() = validate (NullableUInt32s.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.ValueArray E.I.not_equal``() = + member _.``NullableUInt32s.Collection.ValueArray E.I.not_equal``() = validate (NullableUInt32s.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt32s.Collection.ValueArray E.N.equals``() = + member _.``NullableUInt32s.Collection.ValueArray E.N.equals``() = validate (NullableUInt32s.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.ValueArray E.N.equal``() = + member _.``NullableUInt32s.Collection.ValueArray E.N.equal``() = validate (NullableUInt32s.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.ValueArray E.N.not_equal``() = + member _.``NullableUInt32s.Collection.ValueArray E.N.not_equal``() = validate (NullableUInt32s.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt32s.Collection.ValueWrapArray E.I.equals``() = + member _.``NullableUInt32s.Collection.ValueWrapArray E.I.equals``() = validate (NullableUInt32s.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.ValueWrapArray E.I.equal``() = + member _.``NullableUInt32s.Collection.ValueWrapArray E.I.equal``() = validate (NullableUInt32s.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.ValueWrapArray E.I.not_equal``() = + member _.``NullableUInt32s.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableUInt32s.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt32s.Collection.ValueWrapArray E.N.equals``() = + member _.``NullableUInt32s.Collection.ValueWrapArray E.N.equals``() = validate (NullableUInt32s.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.ValueWrapArray E.N.equal``() = + member _.``NullableUInt32s.Collection.ValueWrapArray E.N.equal``() = validate (NullableUInt32s.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt32s.Collection.ValueWrapArray E.N.not_equal``() = + member _.``NullableUInt32s.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableUInt32s.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt32s.Collection.ArrayArray E.I.equals``() = + member _.``NullableUInt32s.Collection.ArrayArray E.I.equals``() = validate (NullableUInt32s.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -26632,7 +26632,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.ArrayArray E.I.equal``() = + member _.``NullableUInt32s.Collection.ArrayArray E.I.equal``() = validate (NullableUInt32s.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -26641,7 +26641,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.ArrayArray E.I.not_equal``() = + member _.``NullableUInt32s.Collection.ArrayArray E.I.not_equal``() = validate (NullableUInt32s.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -26650,7 +26650,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.ArrayArray E.N.equals``() = + member _.``NullableUInt32s.Collection.ArrayArray E.N.equals``() = validate (NullableUInt32s.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -26659,7 +26659,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.ArrayArray E.N.equal``() = + member _.``NullableUInt32s.Collection.ArrayArray E.N.equal``() = validate (NullableUInt32s.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -26668,7 +26668,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.ArrayArray E.N.not_equal``() = + member _.``NullableUInt32s.Collection.ArrayArray E.N.not_equal``() = validate (NullableUInt32s.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -26677,7 +26677,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.ListArray E.I.equals``() = + member _.``NullableUInt32s.Collection.ListArray E.I.equals``() = validate (NullableUInt32s.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -26686,7 +26686,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.ListArray E.I.equal``() = + member _.``NullableUInt32s.Collection.ListArray E.I.equal``() = validate (NullableUInt32s.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -26695,7 +26695,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.ListArray E.I.not_equal``() = + member _.``NullableUInt32s.Collection.ListArray E.I.not_equal``() = validate (NullableUInt32s.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -26704,7 +26704,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.ListArray E.N.equals``() = + member _.``NullableUInt32s.Collection.ListArray E.N.equals``() = validate (NullableUInt32s.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -26713,7 +26713,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.ListArray E.N.equal``() = + member _.``NullableUInt32s.Collection.ListArray E.N.equal``() = validate (NullableUInt32s.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -26722,7 +26722,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt32s.Collection.ListArray E.N.not_equal``() = + member _.``NullableUInt32s.Collection.ListArray E.N.not_equal``() = validate (NullableUInt32s.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -26731,391 +26731,391 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.Array C.I.equals``() = + member _.``UInt64s.Collection.Array C.I.equals``() = validate (UInt64s.Collection.Array) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.Array C.I.equal``() = + member _.``UInt64s.Collection.Array C.I.equal``() = validate (UInt64s.Collection.Array) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.Array C.I.not_equal``() = + member _.``UInt64s.Collection.Array C.I.not_equal``() = validate (UInt64s.Collection.Array) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``UInt64s.Collection.Array C.I.compare``() = + member _.``UInt64s.Collection.Array C.I.compare``() = validate (UInt64s.Collection.Array) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``UInt64s.Collection.Array C.I.less_than``() = + member _.``UInt64s.Collection.Array C.I.less_than``() = validate (UInt64s.Collection.Array) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``UInt64s.Collection.Array C.I.less_or_equal``() = + member _.``UInt64s.Collection.Array C.I.less_or_equal``() = validate (UInt64s.Collection.Array) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``UInt64s.Collection.Array C.I.greater_than``() = + member _.``UInt64s.Collection.Array C.I.greater_than``() = validate (UInt64s.Collection.Array) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``UInt64s.Collection.Array C.I.greater_or_equal``() = + member _.``UInt64s.Collection.Array C.I.greater_or_equal``() = validate (UInt64s.Collection.Array) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``UInt64s.Collection.Array C.N.equals``() = + member _.``UInt64s.Collection.Array C.N.equals``() = validate (UInt64s.Collection.Array) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.Array C.N.equal``() = + member _.``UInt64s.Collection.Array C.N.equal``() = validate (UInt64s.Collection.Array) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.Array C.N.not_equal``() = + member _.``UInt64s.Collection.Array C.N.not_equal``() = validate (UInt64s.Collection.Array) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``UInt64s.Collection.Array C.N.compare``() = + member _.``UInt64s.Collection.Array C.N.compare``() = validate (UInt64s.Collection.Array) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``UInt64s.Collection.Array C.N.less_than``() = + member _.``UInt64s.Collection.Array C.N.less_than``() = validate (UInt64s.Collection.Array) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``UInt64s.Collection.Array C.N.less_or_equal``() = + member _.``UInt64s.Collection.Array C.N.less_or_equal``() = validate (UInt64s.Collection.Array) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``UInt64s.Collection.Array C.N.greater_than``() = + member _.``UInt64s.Collection.Array C.N.greater_than``() = validate (UInt64s.Collection.Array) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``UInt64s.Collection.Array C.N.greater_or_equal``() = + member _.``UInt64s.Collection.Array C.N.greater_or_equal``() = validate (UInt64s.Collection.Array) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``UInt64s.Collection.OptionArray C.I.equals``() = + member _.``UInt64s.Collection.OptionArray C.I.equals``() = validate (UInt64s.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.OptionArray C.I.equal``() = + member _.``UInt64s.Collection.OptionArray C.I.equal``() = validate (UInt64s.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.OptionArray C.I.not_equal``() = + member _.``UInt64s.Collection.OptionArray C.I.not_equal``() = validate (UInt64s.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``UInt64s.Collection.OptionArray C.I.compare``() = + member _.``UInt64s.Collection.OptionArray C.I.compare``() = validate (UInt64s.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;0;-1;-1;1;1;0;1;1;1;1;0;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 |] [] - member __.``UInt64s.Collection.OptionArray C.I.less_than``() = + member _.``UInt64s.Collection.OptionArray C.I.less_than``() = validate (UInt64s.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member __.``UInt64s.Collection.OptionArray C.I.less_or_equal``() = + member _.``UInt64s.Collection.OptionArray C.I.less_or_equal``() = validate (UInt64s.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member __.``UInt64s.Collection.OptionArray C.I.greater_than``() = + member _.``UInt64s.Collection.OptionArray C.I.greater_than``() = validate (UInt64s.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member __.``UInt64s.Collection.OptionArray C.I.greater_or_equal``() = + member _.``UInt64s.Collection.OptionArray C.I.greater_or_equal``() = validate (UInt64s.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member __.``UInt64s.Collection.OptionArray C.N.equals``() = + member _.``UInt64s.Collection.OptionArray C.N.equals``() = validate (UInt64s.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.OptionArray C.N.equal``() = + member _.``UInt64s.Collection.OptionArray C.N.equal``() = validate (UInt64s.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.OptionArray C.N.not_equal``() = + member _.``UInt64s.Collection.OptionArray C.N.not_equal``() = validate (UInt64s.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``UInt64s.Collection.OptionArray C.N.compare``() = + member _.``UInt64s.Collection.OptionArray C.N.compare``() = validate (UInt64s.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;0;-1;-1;1;1;0;1;1;1;1;0;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 |] [] - member __.``UInt64s.Collection.OptionArray C.N.less_than``() = + member _.``UInt64s.Collection.OptionArray C.N.less_than``() = validate (UInt64s.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member __.``UInt64s.Collection.OptionArray C.N.less_or_equal``() = + member _.``UInt64s.Collection.OptionArray C.N.less_or_equal``() = validate (UInt64s.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member __.``UInt64s.Collection.OptionArray C.N.greater_than``() = + member _.``UInt64s.Collection.OptionArray C.N.greater_than``() = validate (UInt64s.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member __.``UInt64s.Collection.OptionArray C.N.greater_or_equal``() = + member _.``UInt64s.Collection.OptionArray C.N.greater_or_equal``() = validate (UInt64s.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member __.``UInt64s.Collection.RefArray C.I.equals``() = + member _.``UInt64s.Collection.RefArray C.I.equals``() = validate (UInt64s.Collection.RefArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.RefArray C.I.equal``() = + member _.``UInt64s.Collection.RefArray C.I.equal``() = validate (UInt64s.Collection.RefArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.RefArray C.I.not_equal``() = + member _.``UInt64s.Collection.RefArray C.I.not_equal``() = validate (UInt64s.Collection.RefArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``UInt64s.Collection.RefArray C.I.compare``() = + member _.``UInt64s.Collection.RefArray C.I.compare``() = validate (UInt64s.Collection.RefArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``UInt64s.Collection.RefArray C.I.less_than``() = + member _.``UInt64s.Collection.RefArray C.I.less_than``() = validate (UInt64s.Collection.RefArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``UInt64s.Collection.RefArray C.I.less_or_equal``() = + member _.``UInt64s.Collection.RefArray C.I.less_or_equal``() = validate (UInt64s.Collection.RefArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``UInt64s.Collection.RefArray C.I.greater_than``() = + member _.``UInt64s.Collection.RefArray C.I.greater_than``() = validate (UInt64s.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``UInt64s.Collection.RefArray C.I.greater_or_equal``() = + member _.``UInt64s.Collection.RefArray C.I.greater_or_equal``() = validate (UInt64s.Collection.RefArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``UInt64s.Collection.RefArray C.N.equals``() = + member _.``UInt64s.Collection.RefArray C.N.equals``() = validate (UInt64s.Collection.RefArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.RefArray C.N.equal``() = + member _.``UInt64s.Collection.RefArray C.N.equal``() = validate (UInt64s.Collection.RefArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.RefArray C.N.not_equal``() = + member _.``UInt64s.Collection.RefArray C.N.not_equal``() = validate (UInt64s.Collection.RefArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``UInt64s.Collection.RefArray C.N.compare``() = + member _.``UInt64s.Collection.RefArray C.N.compare``() = validate (UInt64s.Collection.RefArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``UInt64s.Collection.RefArray C.N.less_than``() = + member _.``UInt64s.Collection.RefArray C.N.less_than``() = validate (UInt64s.Collection.RefArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``UInt64s.Collection.RefArray C.N.less_or_equal``() = + member _.``UInt64s.Collection.RefArray C.N.less_or_equal``() = validate (UInt64s.Collection.RefArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``UInt64s.Collection.RefArray C.N.greater_than``() = + member _.``UInt64s.Collection.RefArray C.N.greater_than``() = validate (UInt64s.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``UInt64s.Collection.RefArray C.N.greater_or_equal``() = + member _.``UInt64s.Collection.RefArray C.N.greater_or_equal``() = validate (UInt64s.Collection.RefArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``UInt64s.Collection.RefWrapArray C.I.equals``() = + member _.``UInt64s.Collection.RefWrapArray C.I.equals``() = validate (UInt64s.Collection.RefWrapArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.RefWrapArray C.I.equal``() = + member _.``UInt64s.Collection.RefWrapArray C.I.equal``() = validate (UInt64s.Collection.RefWrapArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.RefWrapArray C.I.not_equal``() = + member _.``UInt64s.Collection.RefWrapArray C.I.not_equal``() = validate (UInt64s.Collection.RefWrapArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``UInt64s.Collection.RefWrapArray C.I.compare``() = + member _.``UInt64s.Collection.RefWrapArray C.I.compare``() = validate (UInt64s.Collection.RefWrapArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``UInt64s.Collection.RefWrapArray C.I.less_than``() = + member _.``UInt64s.Collection.RefWrapArray C.I.less_than``() = validate (UInt64s.Collection.RefWrapArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``UInt64s.Collection.RefWrapArray C.I.less_or_equal``() = + member _.``UInt64s.Collection.RefWrapArray C.I.less_or_equal``() = validate (UInt64s.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``UInt64s.Collection.RefWrapArray C.I.greater_than``() = + member _.``UInt64s.Collection.RefWrapArray C.I.greater_than``() = validate (UInt64s.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``UInt64s.Collection.RefWrapArray C.I.greater_or_equal``() = + member _.``UInt64s.Collection.RefWrapArray C.I.greater_or_equal``() = validate (UInt64s.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``UInt64s.Collection.RefWrapArray C.N.equals``() = + member _.``UInt64s.Collection.RefWrapArray C.N.equals``() = validate (UInt64s.Collection.RefWrapArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.RefWrapArray C.N.equal``() = + member _.``UInt64s.Collection.RefWrapArray C.N.equal``() = validate (UInt64s.Collection.RefWrapArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.RefWrapArray C.N.not_equal``() = + member _.``UInt64s.Collection.RefWrapArray C.N.not_equal``() = validate (UInt64s.Collection.RefWrapArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``UInt64s.Collection.RefWrapArray C.N.compare``() = + member _.``UInt64s.Collection.RefWrapArray C.N.compare``() = validate (UInt64s.Collection.RefWrapArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``UInt64s.Collection.RefWrapArray C.N.less_than``() = + member _.``UInt64s.Collection.RefWrapArray C.N.less_than``() = validate (UInt64s.Collection.RefWrapArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``UInt64s.Collection.RefWrapArray C.N.less_or_equal``() = + member _.``UInt64s.Collection.RefWrapArray C.N.less_or_equal``() = validate (UInt64s.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``UInt64s.Collection.RefWrapArray C.N.greater_than``() = + member _.``UInt64s.Collection.RefWrapArray C.N.greater_than``() = validate (UInt64s.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``UInt64s.Collection.RefWrapArray C.N.greater_or_equal``() = + member _.``UInt64s.Collection.RefWrapArray C.N.greater_or_equal``() = validate (UInt64s.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``UInt64s.Collection.UnionArray C.I.equals``() = + member _.``UInt64s.Collection.UnionArray C.I.equals``() = validate (UInt64s.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -27151,7 +27151,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionArray C.I.equal``() = + member _.``UInt64s.Collection.UnionArray C.I.equal``() = validate (UInt64s.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -27187,7 +27187,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionArray C.I.not_equal``() = + member _.``UInt64s.Collection.UnionArray C.I.not_equal``() = validate (UInt64s.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -27223,7 +27223,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionArray C.I.compare``() = + member _.``UInt64s.Collection.UnionArray C.I.compare``() = validate (UInt64s.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -27259,7 +27259,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionArray C.I.less_than``() = + member _.``UInt64s.Collection.UnionArray C.I.less_than``() = validate (UInt64s.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -27295,7 +27295,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionArray C.I.less_or_equal``() = + member _.``UInt64s.Collection.UnionArray C.I.less_or_equal``() = validate (UInt64s.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -27331,7 +27331,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionArray C.I.greater_than``() = + member _.``UInt64s.Collection.UnionArray C.I.greater_than``() = validate (UInt64s.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -27367,7 +27367,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionArray C.I.greater_or_equal``() = + member _.``UInt64s.Collection.UnionArray C.I.greater_or_equal``() = validate (UInt64s.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -27403,7 +27403,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionArray C.N.equals``() = + member _.``UInt64s.Collection.UnionArray C.N.equals``() = validate (UInt64s.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -27439,7 +27439,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionArray C.N.equal``() = + member _.``UInt64s.Collection.UnionArray C.N.equal``() = validate (UInt64s.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -27475,7 +27475,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionArray C.N.not_equal``() = + member _.``UInt64s.Collection.UnionArray C.N.not_equal``() = validate (UInt64s.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -27511,7 +27511,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionArray C.N.compare``() = + member _.``UInt64s.Collection.UnionArray C.N.compare``() = validate (UInt64s.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -27547,7 +27547,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionArray C.N.less_than``() = + member _.``UInt64s.Collection.UnionArray C.N.less_than``() = validate (UInt64s.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -27583,7 +27583,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionArray C.N.less_or_equal``() = + member _.``UInt64s.Collection.UnionArray C.N.less_or_equal``() = validate (UInt64s.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -27619,7 +27619,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionArray C.N.greater_than``() = + member _.``UInt64s.Collection.UnionArray C.N.greater_than``() = validate (UInt64s.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -27655,7 +27655,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionArray C.N.greater_or_equal``() = + member _.``UInt64s.Collection.UnionArray C.N.greater_or_equal``() = validate (UInt64s.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -27691,7 +27691,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionWrapArray C.I.equals``() = + member _.``UInt64s.Collection.UnionWrapArray C.I.equals``() = validate (UInt64s.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -27727,7 +27727,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionWrapArray C.I.equal``() = + member _.``UInt64s.Collection.UnionWrapArray C.I.equal``() = validate (UInt64s.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -27763,7 +27763,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionWrapArray C.I.not_equal``() = + member _.``UInt64s.Collection.UnionWrapArray C.I.not_equal``() = validate (UInt64s.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -27799,7 +27799,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionWrapArray C.I.compare``() = + member _.``UInt64s.Collection.UnionWrapArray C.I.compare``() = validate (UInt64s.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -27835,7 +27835,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionWrapArray C.I.less_than``() = + member _.``UInt64s.Collection.UnionWrapArray C.I.less_than``() = validate (UInt64s.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -27871,7 +27871,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionWrapArray C.I.less_or_equal``() = + member _.``UInt64s.Collection.UnionWrapArray C.I.less_or_equal``() = validate (UInt64s.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -27907,7 +27907,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionWrapArray C.I.greater_than``() = + member _.``UInt64s.Collection.UnionWrapArray C.I.greater_than``() = validate (UInt64s.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -27943,7 +27943,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionWrapArray C.I.greater_or_equal``() = + member _.``UInt64s.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (UInt64s.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -27979,7 +27979,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionWrapArray C.N.equals``() = + member _.``UInt64s.Collection.UnionWrapArray C.N.equals``() = validate (UInt64s.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -28015,7 +28015,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionWrapArray C.N.equal``() = + member _.``UInt64s.Collection.UnionWrapArray C.N.equal``() = validate (UInt64s.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -28051,7 +28051,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionWrapArray C.N.not_equal``() = + member _.``UInt64s.Collection.UnionWrapArray C.N.not_equal``() = validate (UInt64s.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -28087,7 +28087,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionWrapArray C.N.compare``() = + member _.``UInt64s.Collection.UnionWrapArray C.N.compare``() = validate (UInt64s.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -28123,7 +28123,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionWrapArray C.N.less_than``() = + member _.``UInt64s.Collection.UnionWrapArray C.N.less_than``() = validate (UInt64s.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -28159,7 +28159,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionWrapArray C.N.less_or_equal``() = + member _.``UInt64s.Collection.UnionWrapArray C.N.less_or_equal``() = validate (UInt64s.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -28195,7 +28195,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionWrapArray C.N.greater_than``() = + member _.``UInt64s.Collection.UnionWrapArray C.N.greater_than``() = validate (UInt64s.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -28231,7 +28231,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.UnionWrapArray C.N.greater_or_equal``() = + member _.``UInt64s.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (UInt64s.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -28267,199 +28267,199 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ValueArray C.I.equals``() = + member _.``UInt64s.Collection.ValueArray C.I.equals``() = validate (UInt64s.Collection.ValueArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.ValueArray C.I.equal``() = + member _.``UInt64s.Collection.ValueArray C.I.equal``() = validate (UInt64s.Collection.ValueArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.ValueArray C.I.not_equal``() = + member _.``UInt64s.Collection.ValueArray C.I.not_equal``() = validate (UInt64s.Collection.ValueArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``UInt64s.Collection.ValueArray C.I.compare``() = + member _.``UInt64s.Collection.ValueArray C.I.compare``() = validate (UInt64s.Collection.ValueArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``UInt64s.Collection.ValueArray C.I.less_than``() = + member _.``UInt64s.Collection.ValueArray C.I.less_than``() = validate (UInt64s.Collection.ValueArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``UInt64s.Collection.ValueArray C.I.less_or_equal``() = + member _.``UInt64s.Collection.ValueArray C.I.less_or_equal``() = validate (UInt64s.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``UInt64s.Collection.ValueArray C.I.greater_than``() = + member _.``UInt64s.Collection.ValueArray C.I.greater_than``() = validate (UInt64s.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``UInt64s.Collection.ValueArray C.I.greater_or_equal``() = + member _.``UInt64s.Collection.ValueArray C.I.greater_or_equal``() = validate (UInt64s.Collection.ValueArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``UInt64s.Collection.ValueArray C.N.equals``() = + member _.``UInt64s.Collection.ValueArray C.N.equals``() = validate (UInt64s.Collection.ValueArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.ValueArray C.N.equal``() = + member _.``UInt64s.Collection.ValueArray C.N.equal``() = validate (UInt64s.Collection.ValueArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.ValueArray C.N.not_equal``() = + member _.``UInt64s.Collection.ValueArray C.N.not_equal``() = validate (UInt64s.Collection.ValueArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``UInt64s.Collection.ValueArray C.N.compare``() = + member _.``UInt64s.Collection.ValueArray C.N.compare``() = validate (UInt64s.Collection.ValueArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``UInt64s.Collection.ValueArray C.N.less_than``() = + member _.``UInt64s.Collection.ValueArray C.N.less_than``() = validate (UInt64s.Collection.ValueArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``UInt64s.Collection.ValueArray C.N.less_or_equal``() = + member _.``UInt64s.Collection.ValueArray C.N.less_or_equal``() = validate (UInt64s.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``UInt64s.Collection.ValueArray C.N.greater_than``() = + member _.``UInt64s.Collection.ValueArray C.N.greater_than``() = validate (UInt64s.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``UInt64s.Collection.ValueArray C.N.greater_or_equal``() = + member _.``UInt64s.Collection.ValueArray C.N.greater_or_equal``() = validate (UInt64s.Collection.ValueArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``UInt64s.Collection.ValueWrapArray C.I.equals``() = + member _.``UInt64s.Collection.ValueWrapArray C.I.equals``() = validate (UInt64s.Collection.ValueWrapArray) C.I.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.ValueWrapArray C.I.equal``() = + member _.``UInt64s.Collection.ValueWrapArray C.I.equal``() = validate (UInt64s.Collection.ValueWrapArray) C.I.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.ValueWrapArray C.I.not_equal``() = + member _.``UInt64s.Collection.ValueWrapArray C.I.not_equal``() = validate (UInt64s.Collection.ValueWrapArray) C.I.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``UInt64s.Collection.ValueWrapArray C.I.compare``() = + member _.``UInt64s.Collection.ValueWrapArray C.I.compare``() = validate (UInt64s.Collection.ValueWrapArray) C.I.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``UInt64s.Collection.ValueWrapArray C.I.less_than``() = + member _.``UInt64s.Collection.ValueWrapArray C.I.less_than``() = validate (UInt64s.Collection.ValueWrapArray) C.I.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``UInt64s.Collection.ValueWrapArray C.I.less_or_equal``() = + member _.``UInt64s.Collection.ValueWrapArray C.I.less_or_equal``() = validate (UInt64s.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``UInt64s.Collection.ValueWrapArray C.I.greater_than``() = + member _.``UInt64s.Collection.ValueWrapArray C.I.greater_than``() = validate (UInt64s.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``UInt64s.Collection.ValueWrapArray C.I.greater_or_equal``() = + member _.``UInt64s.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (UInt64s.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``UInt64s.Collection.ValueWrapArray C.N.equals``() = + member _.``UInt64s.Collection.ValueWrapArray C.N.equals``() = validate (UInt64s.Collection.ValueWrapArray) C.N.equals [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.ValueWrapArray C.N.equal``() = + member _.``UInt64s.Collection.ValueWrapArray C.N.equal``() = validate (UInt64s.Collection.ValueWrapArray) C.N.equal [| 1;0;1;0;0;0;1;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``UInt64s.Collection.ValueWrapArray C.N.not_equal``() = + member _.``UInt64s.Collection.ValueWrapArray C.N.not_equal``() = validate (UInt64s.Collection.ValueWrapArray) C.N.not_equal [| 0;1;0;1;1;1;0;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``UInt64s.Collection.ValueWrapArray C.N.compare``() = + member _.``UInt64s.Collection.ValueWrapArray C.N.compare``() = validate (UInt64s.Collection.ValueWrapArray) C.N.compare [| 0;-1;0;-1;-1;1;0;1;1;1;0;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``UInt64s.Collection.ValueWrapArray C.N.less_than``() = + member _.``UInt64s.Collection.ValueWrapArray C.N.less_than``() = validate (UInt64s.Collection.ValueWrapArray) C.N.less_than [| 0;1;0;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``UInt64s.Collection.ValueWrapArray C.N.less_or_equal``() = + member _.``UInt64s.Collection.ValueWrapArray C.N.less_or_equal``() = validate (UInt64s.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``UInt64s.Collection.ValueWrapArray C.N.greater_than``() = + member _.``UInt64s.Collection.ValueWrapArray C.N.greater_than``() = validate (UInt64s.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``UInt64s.Collection.ValueWrapArray C.N.greater_or_equal``() = + member _.``UInt64s.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (UInt64s.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;1;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``UInt64s.Collection.ArrayArray C.I.equals``() = + member _.``UInt64s.Collection.ArrayArray C.I.equals``() = validate (UInt64s.Collection.ArrayArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28467,7 +28467,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray C.I.equal``() = + member _.``UInt64s.Collection.ArrayArray C.I.equal``() = validate (UInt64s.Collection.ArrayArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28475,7 +28475,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray C.I.not_equal``() = + member _.``UInt64s.Collection.ArrayArray C.I.not_equal``() = validate (UInt64s.Collection.ArrayArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -28483,7 +28483,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray C.I.compare``() = + member _.``UInt64s.Collection.ArrayArray C.I.compare``() = validate (UInt64s.Collection.ArrayArray) C.I.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;-1;0;-1;-1; @@ -28491,7 +28491,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray C.I.less_than``() = + member _.``UInt64s.Collection.ArrayArray C.I.less_than``() = validate (UInt64s.Collection.ArrayArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; @@ -28499,7 +28499,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray C.I.less_or_equal``() = + member _.``UInt64s.Collection.ArrayArray C.I.less_or_equal``() = validate (UInt64s.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; @@ -28507,7 +28507,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray C.I.greater_than``() = + member _.``UInt64s.Collection.ArrayArray C.I.greater_than``() = validate (UInt64s.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; @@ -28515,7 +28515,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray C.I.greater_or_equal``() = + member _.``UInt64s.Collection.ArrayArray C.I.greater_or_equal``() = validate (UInt64s.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; @@ -28523,7 +28523,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray C.N.equals``() = + member _.``UInt64s.Collection.ArrayArray C.N.equals``() = validate (UInt64s.Collection.ArrayArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28531,7 +28531,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray C.N.equal``() = + member _.``UInt64s.Collection.ArrayArray C.N.equal``() = validate (UInt64s.Collection.ArrayArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28539,7 +28539,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray C.N.not_equal``() = + member _.``UInt64s.Collection.ArrayArray C.N.not_equal``() = validate (UInt64s.Collection.ArrayArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -28547,7 +28547,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray C.N.compare``() = + member _.``UInt64s.Collection.ArrayArray C.N.compare``() = validate (UInt64s.Collection.ArrayArray) C.N.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;-1;-1;0;-1;-1; @@ -28555,7 +28555,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray C.N.less_than``() = + member _.``UInt64s.Collection.ArrayArray C.N.less_than``() = validate (UInt64s.Collection.ArrayArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;1; @@ -28563,7 +28563,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray C.N.less_or_equal``() = + member _.``UInt64s.Collection.ArrayArray C.N.less_or_equal``() = validate (UInt64s.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1; @@ -28571,7 +28571,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray C.N.greater_than``() = + member _.``UInt64s.Collection.ArrayArray C.N.greater_than``() = validate (UInt64s.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0; @@ -28579,7 +28579,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray C.N.greater_or_equal``() = + member _.``UInt64s.Collection.ArrayArray C.N.greater_or_equal``() = validate (UInt64s.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;0; @@ -28587,7 +28587,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ListArray C.I.equals``() = + member _.``UInt64s.Collection.ListArray C.I.equals``() = validate (UInt64s.Collection.ListArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28595,7 +28595,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ListArray C.I.equal``() = + member _.``UInt64s.Collection.ListArray C.I.equal``() = validate (UInt64s.Collection.ListArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28603,7 +28603,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ListArray C.I.not_equal``() = + member _.``UInt64s.Collection.ListArray C.I.not_equal``() = validate (UInt64s.Collection.ListArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -28611,7 +28611,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ListArray C.I.compare``() = + member _.``UInt64s.Collection.ListArray C.I.compare``() = validate (UInt64s.Collection.ListArray) C.I.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; 1;-1;1;1;0;1;-1;1;1;-1;1;-1;1;-1;-1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -28619,7 +28619,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ListArray C.I.less_than``() = + member _.``UInt64s.Collection.ListArray C.I.less_than``() = validate (UInt64s.Collection.ListArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; @@ -28627,7 +28627,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ListArray C.I.less_or_equal``() = + member _.``UInt64s.Collection.ListArray C.I.less_or_equal``() = validate (UInt64s.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; @@ -28635,7 +28635,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ListArray C.I.greater_than``() = + member _.``UInt64s.Collection.ListArray C.I.greater_than``() = validate (UInt64s.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; @@ -28643,7 +28643,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ListArray C.I.greater_or_equal``() = + member _.``UInt64s.Collection.ListArray C.I.greater_or_equal``() = validate (UInt64s.Collection.ListArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; @@ -28651,7 +28651,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ListArray C.N.equals``() = + member _.``UInt64s.Collection.ListArray C.N.equals``() = validate (UInt64s.Collection.ListArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28659,7 +28659,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ListArray C.N.equal``() = + member _.``UInt64s.Collection.ListArray C.N.equal``() = validate (UInt64s.Collection.ListArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28667,7 +28667,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ListArray C.N.not_equal``() = + member _.``UInt64s.Collection.ListArray C.N.not_equal``() = validate (UInt64s.Collection.ListArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -28675,7 +28675,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ListArray C.N.compare``() = + member _.``UInt64s.Collection.ListArray C.N.compare``() = validate (UInt64s.Collection.ListArray) C.N.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; 1;-1;1;1;0;1;-1;1;1;-1;1;-1;1;-1;-1;0;-1;1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -28683,7 +28683,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ListArray C.N.less_than``() = + member _.``UInt64s.Collection.ListArray C.N.less_than``() = validate (UInt64s.Collection.ListArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;0;1;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1; @@ -28691,7 +28691,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ListArray C.N.less_or_equal``() = + member _.``UInt64s.Collection.ListArray C.N.less_or_equal``() = validate (UInt64s.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;0;1;1;1;1;0;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;1;1;1;1;1; @@ -28699,7 +28699,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ListArray C.N.greater_than``() = + member _.``UInt64s.Collection.ListArray C.N.greater_than``() = validate (UInt64s.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;1;0;0;0;0;1;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0; @@ -28707,7 +28707,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ListArray C.N.greater_or_equal``() = + member _.``UInt64s.Collection.ListArray C.N.greater_or_equal``() = validate (UInt64s.Collection.ListArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;1;0;0;1;0;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0; @@ -28715,7 +28715,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28723,7 +28723,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28731,7 +28731,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -28739,7 +28739,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -28747,7 +28747,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; @@ -28755,7 +28755,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; @@ -28763,7 +28763,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; @@ -28771,7 +28771,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; @@ -28779,7 +28779,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28787,7 +28787,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -28795,7 +28795,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -28803,7 +28803,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;0;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;0;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1; @@ -28811,7 +28811,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1; @@ -28819,7 +28819,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;0;1;0;0;1;0;1;1;1;1;1;1;1; @@ -28827,7 +28827,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;1;0;1;1;0;1;0;0;0;0;0;0;0; @@ -28835,7 +28835,7 @@ type GeneratedTests () = |] [] - member __.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member _.``UInt64s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (UInt64s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0; @@ -28843,157 +28843,157 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.Array E.I.equals``() = + member _.``NullableUInt64s.Collection.Array E.I.equals``() = validate (NullableUInt64s.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.Array E.I.equal``() = + member _.``NullableUInt64s.Collection.Array E.I.equal``() = validate (NullableUInt64s.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.Array E.I.not_equal``() = + member _.``NullableUInt64s.Collection.Array E.I.not_equal``() = validate (NullableUInt64s.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt64s.Collection.Array E.N.equals``() = + member _.``NullableUInt64s.Collection.Array E.N.equals``() = validate (NullableUInt64s.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.Array E.N.equal``() = + member _.``NullableUInt64s.Collection.Array E.N.equal``() = validate (NullableUInt64s.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.Array E.N.not_equal``() = + member _.``NullableUInt64s.Collection.Array E.N.not_equal``() = validate (NullableUInt64s.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt64s.Collection.OptionArray E.I.equals``() = + member _.``NullableUInt64s.Collection.OptionArray E.I.equals``() = validate (NullableUInt64s.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.OptionArray E.I.equal``() = + member _.``NullableUInt64s.Collection.OptionArray E.I.equal``() = validate (NullableUInt64s.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.OptionArray E.I.not_equal``() = + member _.``NullableUInt64s.Collection.OptionArray E.I.not_equal``() = validate (NullableUInt64s.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt64s.Collection.OptionArray E.N.equals``() = + member _.``NullableUInt64s.Collection.OptionArray E.N.equals``() = validate (NullableUInt64s.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.OptionArray E.N.equal``() = + member _.``NullableUInt64s.Collection.OptionArray E.N.equal``() = validate (NullableUInt64s.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.OptionArray E.N.not_equal``() = + member _.``NullableUInt64s.Collection.OptionArray E.N.not_equal``() = validate (NullableUInt64s.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt64s.Collection.RefArray E.I.equals``() = + member _.``NullableUInt64s.Collection.RefArray E.I.equals``() = validate (NullableUInt64s.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.RefArray E.I.equal``() = + member _.``NullableUInt64s.Collection.RefArray E.I.equal``() = validate (NullableUInt64s.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.RefArray E.I.not_equal``() = + member _.``NullableUInt64s.Collection.RefArray E.I.not_equal``() = validate (NullableUInt64s.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt64s.Collection.RefArray E.N.equals``() = + member _.``NullableUInt64s.Collection.RefArray E.N.equals``() = validate (NullableUInt64s.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.RefArray E.N.equal``() = + member _.``NullableUInt64s.Collection.RefArray E.N.equal``() = validate (NullableUInt64s.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.RefArray E.N.not_equal``() = + member _.``NullableUInt64s.Collection.RefArray E.N.not_equal``() = validate (NullableUInt64s.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt64s.Collection.RefWrapArray E.I.equals``() = + member _.``NullableUInt64s.Collection.RefWrapArray E.I.equals``() = validate (NullableUInt64s.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.RefWrapArray E.I.equal``() = + member _.``NullableUInt64s.Collection.RefWrapArray E.I.equal``() = validate (NullableUInt64s.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.RefWrapArray E.I.not_equal``() = + member _.``NullableUInt64s.Collection.RefWrapArray E.I.not_equal``() = validate (NullableUInt64s.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt64s.Collection.RefWrapArray E.N.equals``() = + member _.``NullableUInt64s.Collection.RefWrapArray E.N.equals``() = validate (NullableUInt64s.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.RefWrapArray E.N.equal``() = + member _.``NullableUInt64s.Collection.RefWrapArray E.N.equal``() = validate (NullableUInt64s.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.RefWrapArray E.N.not_equal``() = + member _.``NullableUInt64s.Collection.RefWrapArray E.N.not_equal``() = validate (NullableUInt64s.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt64s.Collection.UnionArray E.I.equals``() = + member _.``NullableUInt64s.Collection.UnionArray E.I.equals``() = validate (NullableUInt64s.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -29043,7 +29043,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.UnionArray E.I.equal``() = + member _.``NullableUInt64s.Collection.UnionArray E.I.equal``() = validate (NullableUInt64s.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -29093,7 +29093,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.UnionArray E.I.not_equal``() = + member _.``NullableUInt64s.Collection.UnionArray E.I.not_equal``() = validate (NullableUInt64s.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -29143,7 +29143,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.UnionArray E.N.equals``() = + member _.``NullableUInt64s.Collection.UnionArray E.N.equals``() = validate (NullableUInt64s.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -29193,7 +29193,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.UnionArray E.N.equal``() = + member _.``NullableUInt64s.Collection.UnionArray E.N.equal``() = validate (NullableUInt64s.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -29243,7 +29243,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.UnionArray E.N.not_equal``() = + member _.``NullableUInt64s.Collection.UnionArray E.N.not_equal``() = validate (NullableUInt64s.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -29293,7 +29293,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.UnionWrapArray E.I.equals``() = + member _.``NullableUInt64s.Collection.UnionWrapArray E.I.equals``() = validate (NullableUInt64s.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -29343,7 +29343,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.UnionWrapArray E.I.equal``() = + member _.``NullableUInt64s.Collection.UnionWrapArray E.I.equal``() = validate (NullableUInt64s.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -29393,7 +29393,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.UnionWrapArray E.I.not_equal``() = + member _.``NullableUInt64s.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableUInt64s.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -29443,7 +29443,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.UnionWrapArray E.N.equals``() = + member _.``NullableUInt64s.Collection.UnionWrapArray E.N.equals``() = validate (NullableUInt64s.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -29493,7 +29493,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.UnionWrapArray E.N.equal``() = + member _.``NullableUInt64s.Collection.UnionWrapArray E.N.equal``() = validate (NullableUInt64s.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -29543,7 +29543,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.UnionWrapArray E.N.not_equal``() = + member _.``NullableUInt64s.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableUInt64s.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -29593,79 +29593,79 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.ValueArray E.I.equals``() = + member _.``NullableUInt64s.Collection.ValueArray E.I.equals``() = validate (NullableUInt64s.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.ValueArray E.I.equal``() = + member _.``NullableUInt64s.Collection.ValueArray E.I.equal``() = validate (NullableUInt64s.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.ValueArray E.I.not_equal``() = + member _.``NullableUInt64s.Collection.ValueArray E.I.not_equal``() = validate (NullableUInt64s.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt64s.Collection.ValueArray E.N.equals``() = + member _.``NullableUInt64s.Collection.ValueArray E.N.equals``() = validate (NullableUInt64s.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.ValueArray E.N.equal``() = + member _.``NullableUInt64s.Collection.ValueArray E.N.equal``() = validate (NullableUInt64s.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.ValueArray E.N.not_equal``() = + member _.``NullableUInt64s.Collection.ValueArray E.N.not_equal``() = validate (NullableUInt64s.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt64s.Collection.ValueWrapArray E.I.equals``() = + member _.``NullableUInt64s.Collection.ValueWrapArray E.I.equals``() = validate (NullableUInt64s.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.ValueWrapArray E.I.equal``() = + member _.``NullableUInt64s.Collection.ValueWrapArray E.I.equal``() = validate (NullableUInt64s.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.ValueWrapArray E.I.not_equal``() = + member _.``NullableUInt64s.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableUInt64s.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt64s.Collection.ValueWrapArray E.N.equals``() = + member _.``NullableUInt64s.Collection.ValueWrapArray E.N.equals``() = validate (NullableUInt64s.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.ValueWrapArray E.N.equal``() = + member _.``NullableUInt64s.Collection.ValueWrapArray E.N.equal``() = validate (NullableUInt64s.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableUInt64s.Collection.ValueWrapArray E.N.not_equal``() = + member _.``NullableUInt64s.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableUInt64s.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableUInt64s.Collection.ArrayArray E.I.equals``() = + member _.``NullableUInt64s.Collection.ArrayArray E.I.equals``() = validate (NullableUInt64s.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -29674,7 +29674,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.ArrayArray E.I.equal``() = + member _.``NullableUInt64s.Collection.ArrayArray E.I.equal``() = validate (NullableUInt64s.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -29683,7 +29683,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.ArrayArray E.I.not_equal``() = + member _.``NullableUInt64s.Collection.ArrayArray E.I.not_equal``() = validate (NullableUInt64s.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -29692,7 +29692,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.ArrayArray E.N.equals``() = + member _.``NullableUInt64s.Collection.ArrayArray E.N.equals``() = validate (NullableUInt64s.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -29701,7 +29701,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.ArrayArray E.N.equal``() = + member _.``NullableUInt64s.Collection.ArrayArray E.N.equal``() = validate (NullableUInt64s.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -29710,7 +29710,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.ArrayArray E.N.not_equal``() = + member _.``NullableUInt64s.Collection.ArrayArray E.N.not_equal``() = validate (NullableUInt64s.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -29719,7 +29719,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.ListArray E.I.equals``() = + member _.``NullableUInt64s.Collection.ListArray E.I.equals``() = validate (NullableUInt64s.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -29728,7 +29728,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.ListArray E.I.equal``() = + member _.``NullableUInt64s.Collection.ListArray E.I.equal``() = validate (NullableUInt64s.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -29737,7 +29737,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.ListArray E.I.not_equal``() = + member _.``NullableUInt64s.Collection.ListArray E.I.not_equal``() = validate (NullableUInt64s.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -29746,7 +29746,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.ListArray E.N.equals``() = + member _.``NullableUInt64s.Collection.ListArray E.N.equals``() = validate (NullableUInt64s.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -29755,7 +29755,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.ListArray E.N.equal``() = + member _.``NullableUInt64s.Collection.ListArray E.N.equal``() = validate (NullableUInt64s.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -29764,7 +29764,7 @@ type GeneratedTests () = |] [] - member __.``NullableUInt64s.Collection.ListArray E.N.not_equal``() = + member _.``NullableUInt64s.Collection.ListArray E.N.not_equal``() = validate (NullableUInt64s.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -29773,391 +29773,391 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.Array C.I.equals``() = + member _.``UNativeInts.Collection.Array C.I.equals``() = validate (UNativeInts.Collection.Array) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.Array C.I.equal``() = + member _.``UNativeInts.Collection.Array C.I.equal``() = validate (UNativeInts.Collection.Array) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.Array C.I.not_equal``() = + member _.``UNativeInts.Collection.Array C.I.not_equal``() = validate (UNativeInts.Collection.Array) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``UNativeInts.Collection.Array C.I.compare``() = + member _.``UNativeInts.Collection.Array C.I.compare``() = validate (UNativeInts.Collection.Array) C.I.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member __.``UNativeInts.Collection.Array C.I.less_than``() = + member _.``UNativeInts.Collection.Array C.I.less_than``() = validate (UNativeInts.Collection.Array) C.I.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member __.``UNativeInts.Collection.Array C.I.less_or_equal``() = + member _.``UNativeInts.Collection.Array C.I.less_or_equal``() = validate (UNativeInts.Collection.Array) C.I.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member __.``UNativeInts.Collection.Array C.I.greater_than``() = + member _.``UNativeInts.Collection.Array C.I.greater_than``() = validate (UNativeInts.Collection.Array) C.I.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member __.``UNativeInts.Collection.Array C.I.greater_or_equal``() = + member _.``UNativeInts.Collection.Array C.I.greater_or_equal``() = validate (UNativeInts.Collection.Array) C.I.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member __.``UNativeInts.Collection.Array C.N.equals``() = + member _.``UNativeInts.Collection.Array C.N.equals``() = validate (UNativeInts.Collection.Array) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.Array C.N.equal``() = + member _.``UNativeInts.Collection.Array C.N.equal``() = validate (UNativeInts.Collection.Array) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.Array C.N.not_equal``() = + member _.``UNativeInts.Collection.Array C.N.not_equal``() = validate (UNativeInts.Collection.Array) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``UNativeInts.Collection.Array C.N.compare``() = + member _.``UNativeInts.Collection.Array C.N.compare``() = validate (UNativeInts.Collection.Array) C.N.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member __.``UNativeInts.Collection.Array C.N.less_than``() = + member _.``UNativeInts.Collection.Array C.N.less_than``() = validate (UNativeInts.Collection.Array) C.N.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member __.``UNativeInts.Collection.Array C.N.less_or_equal``() = + member _.``UNativeInts.Collection.Array C.N.less_or_equal``() = validate (UNativeInts.Collection.Array) C.N.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member __.``UNativeInts.Collection.Array C.N.greater_than``() = + member _.``UNativeInts.Collection.Array C.N.greater_than``() = validate (UNativeInts.Collection.Array) C.N.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member __.``UNativeInts.Collection.Array C.N.greater_or_equal``() = + member _.``UNativeInts.Collection.Array C.N.greater_or_equal``() = validate (UNativeInts.Collection.Array) C.N.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member __.``UNativeInts.Collection.OptionArray C.I.equals``() = + member _.``UNativeInts.Collection.OptionArray C.I.equals``() = validate (UNativeInts.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``UNativeInts.Collection.OptionArray C.I.equal``() = + member _.``UNativeInts.Collection.OptionArray C.I.equal``() = validate (UNativeInts.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``UNativeInts.Collection.OptionArray C.I.not_equal``() = + member _.``UNativeInts.Collection.OptionArray C.I.not_equal``() = validate (UNativeInts.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``UNativeInts.Collection.OptionArray C.I.compare``() = + member _.``UNativeInts.Collection.OptionArray C.I.compare``() = validate (UNativeInts.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member __.``UNativeInts.Collection.OptionArray C.I.less_than``() = + member _.``UNativeInts.Collection.OptionArray C.I.less_than``() = validate (UNativeInts.Collection.OptionArray) C.I.less_than [| 0;1;1;1;0;0;1;1;0;0;0;1;0;0;0;0 |] [] - member __.``UNativeInts.Collection.OptionArray C.I.less_or_equal``() = + member _.``UNativeInts.Collection.OptionArray C.I.less_or_equal``() = validate (UNativeInts.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;0;1;1;1;0;0;1;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.OptionArray C.I.greater_than``() = + member _.``UNativeInts.Collection.OptionArray C.I.greater_than``() = validate (UNativeInts.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;1;1;0;0;1;1;1;0 |] [] - member __.``UNativeInts.Collection.OptionArray C.I.greater_or_equal``() = + member _.``UNativeInts.Collection.OptionArray C.I.greater_or_equal``() = validate (UNativeInts.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;1;1;0;0;1;1;1;0;1;1;1;1 |] [] - member __.``UNativeInts.Collection.OptionArray C.N.equals``() = + member _.``UNativeInts.Collection.OptionArray C.N.equals``() = validate (UNativeInts.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``UNativeInts.Collection.OptionArray C.N.equal``() = + member _.``UNativeInts.Collection.OptionArray C.N.equal``() = validate (UNativeInts.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``UNativeInts.Collection.OptionArray C.N.not_equal``() = + member _.``UNativeInts.Collection.OptionArray C.N.not_equal``() = validate (UNativeInts.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``UNativeInts.Collection.OptionArray C.N.compare``() = + member _.``UNativeInts.Collection.OptionArray C.N.compare``() = validate (UNativeInts.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member __.``UNativeInts.Collection.OptionArray C.N.less_than``() = + member _.``UNativeInts.Collection.OptionArray C.N.less_than``() = validate (UNativeInts.Collection.OptionArray) C.N.less_than [| 0;1;1;1;0;0;1;1;0;0;0;1;0;0;0;0 |] [] - member __.``UNativeInts.Collection.OptionArray C.N.less_or_equal``() = + member _.``UNativeInts.Collection.OptionArray C.N.less_or_equal``() = validate (UNativeInts.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;0;1;1;1;0;0;1;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.OptionArray C.N.greater_than``() = + member _.``UNativeInts.Collection.OptionArray C.N.greater_than``() = validate (UNativeInts.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;1;1;0;0;1;1;1;0 |] [] - member __.``UNativeInts.Collection.OptionArray C.N.greater_or_equal``() = + member _.``UNativeInts.Collection.OptionArray C.N.greater_or_equal``() = validate (UNativeInts.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;1;1;0;0;1;1;1;0;1;1;1;1 |] [] - member __.``UNativeInts.Collection.RefArray C.I.equals``() = + member _.``UNativeInts.Collection.RefArray C.I.equals``() = validate (UNativeInts.Collection.RefArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.RefArray C.I.equal``() = + member _.``UNativeInts.Collection.RefArray C.I.equal``() = validate (UNativeInts.Collection.RefArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.RefArray C.I.not_equal``() = + member _.``UNativeInts.Collection.RefArray C.I.not_equal``() = validate (UNativeInts.Collection.RefArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``UNativeInts.Collection.RefArray C.I.compare``() = + member _.``UNativeInts.Collection.RefArray C.I.compare``() = validate (UNativeInts.Collection.RefArray) C.I.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member __.``UNativeInts.Collection.RefArray C.I.less_than``() = + member _.``UNativeInts.Collection.RefArray C.I.less_than``() = validate (UNativeInts.Collection.RefArray) C.I.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member __.``UNativeInts.Collection.RefArray C.I.less_or_equal``() = + member _.``UNativeInts.Collection.RefArray C.I.less_or_equal``() = validate (UNativeInts.Collection.RefArray) C.I.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member __.``UNativeInts.Collection.RefArray C.I.greater_than``() = + member _.``UNativeInts.Collection.RefArray C.I.greater_than``() = validate (UNativeInts.Collection.RefArray) C.I.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member __.``UNativeInts.Collection.RefArray C.I.greater_or_equal``() = + member _.``UNativeInts.Collection.RefArray C.I.greater_or_equal``() = validate (UNativeInts.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member __.``UNativeInts.Collection.RefArray C.N.equals``() = + member _.``UNativeInts.Collection.RefArray C.N.equals``() = validate (UNativeInts.Collection.RefArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.RefArray C.N.equal``() = + member _.``UNativeInts.Collection.RefArray C.N.equal``() = validate (UNativeInts.Collection.RefArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.RefArray C.N.not_equal``() = + member _.``UNativeInts.Collection.RefArray C.N.not_equal``() = validate (UNativeInts.Collection.RefArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``UNativeInts.Collection.RefArray C.N.compare``() = + member _.``UNativeInts.Collection.RefArray C.N.compare``() = validate (UNativeInts.Collection.RefArray) C.N.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member __.``UNativeInts.Collection.RefArray C.N.less_than``() = + member _.``UNativeInts.Collection.RefArray C.N.less_than``() = validate (UNativeInts.Collection.RefArray) C.N.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member __.``UNativeInts.Collection.RefArray C.N.less_or_equal``() = + member _.``UNativeInts.Collection.RefArray C.N.less_or_equal``() = validate (UNativeInts.Collection.RefArray) C.N.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member __.``UNativeInts.Collection.RefArray C.N.greater_than``() = + member _.``UNativeInts.Collection.RefArray C.N.greater_than``() = validate (UNativeInts.Collection.RefArray) C.N.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member __.``UNativeInts.Collection.RefArray C.N.greater_or_equal``() = + member _.``UNativeInts.Collection.RefArray C.N.greater_or_equal``() = validate (UNativeInts.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member __.``UNativeInts.Collection.RefWrapArray C.I.equals``() = + member _.``UNativeInts.Collection.RefWrapArray C.I.equals``() = validate (UNativeInts.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.RefWrapArray C.I.equal``() = + member _.``UNativeInts.Collection.RefWrapArray C.I.equal``() = validate (UNativeInts.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.RefWrapArray C.I.not_equal``() = + member _.``UNativeInts.Collection.RefWrapArray C.I.not_equal``() = validate (UNativeInts.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``UNativeInts.Collection.RefWrapArray C.I.compare``() = + member _.``UNativeInts.Collection.RefWrapArray C.I.compare``() = validate (UNativeInts.Collection.RefWrapArray) C.I.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member __.``UNativeInts.Collection.RefWrapArray C.I.less_than``() = + member _.``UNativeInts.Collection.RefWrapArray C.I.less_than``() = validate (UNativeInts.Collection.RefWrapArray) C.I.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member __.``UNativeInts.Collection.RefWrapArray C.I.less_or_equal``() = + member _.``UNativeInts.Collection.RefWrapArray C.I.less_or_equal``() = validate (UNativeInts.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member __.``UNativeInts.Collection.RefWrapArray C.I.greater_than``() = + member _.``UNativeInts.Collection.RefWrapArray C.I.greater_than``() = validate (UNativeInts.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member __.``UNativeInts.Collection.RefWrapArray C.I.greater_or_equal``() = + member _.``UNativeInts.Collection.RefWrapArray C.I.greater_or_equal``() = validate (UNativeInts.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member __.``UNativeInts.Collection.RefWrapArray C.N.equals``() = + member _.``UNativeInts.Collection.RefWrapArray C.N.equals``() = validate (UNativeInts.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.RefWrapArray C.N.equal``() = + member _.``UNativeInts.Collection.RefWrapArray C.N.equal``() = validate (UNativeInts.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.RefWrapArray C.N.not_equal``() = + member _.``UNativeInts.Collection.RefWrapArray C.N.not_equal``() = validate (UNativeInts.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``UNativeInts.Collection.RefWrapArray C.N.compare``() = + member _.``UNativeInts.Collection.RefWrapArray C.N.compare``() = validate (UNativeInts.Collection.RefWrapArray) C.N.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member __.``UNativeInts.Collection.RefWrapArray C.N.less_than``() = + member _.``UNativeInts.Collection.RefWrapArray C.N.less_than``() = validate (UNativeInts.Collection.RefWrapArray) C.N.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member __.``UNativeInts.Collection.RefWrapArray C.N.less_or_equal``() = + member _.``UNativeInts.Collection.RefWrapArray C.N.less_or_equal``() = validate (UNativeInts.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member __.``UNativeInts.Collection.RefWrapArray C.N.greater_than``() = + member _.``UNativeInts.Collection.RefWrapArray C.N.greater_than``() = validate (UNativeInts.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member __.``UNativeInts.Collection.RefWrapArray C.N.greater_or_equal``() = + member _.``UNativeInts.Collection.RefWrapArray C.N.greater_or_equal``() = validate (UNativeInts.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member __.``UNativeInts.Collection.UnionArray C.I.equals``() = + member _.``UNativeInts.Collection.UnionArray C.I.equals``() = validate (UNativeInts.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -30174,7 +30174,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionArray C.I.equal``() = + member _.``UNativeInts.Collection.UnionArray C.I.equal``() = validate (UNativeInts.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -30191,7 +30191,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionArray C.I.not_equal``() = + member _.``UNativeInts.Collection.UnionArray C.I.not_equal``() = validate (UNativeInts.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -30208,7 +30208,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionArray C.I.compare``() = + member _.``UNativeInts.Collection.UnionArray C.I.compare``() = validate (UNativeInts.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -30225,7 +30225,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionArray C.I.less_than``() = + member _.``UNativeInts.Collection.UnionArray C.I.less_than``() = validate (UNativeInts.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -30242,7 +30242,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionArray C.I.less_or_equal``() = + member _.``UNativeInts.Collection.UnionArray C.I.less_or_equal``() = validate (UNativeInts.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -30259,7 +30259,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionArray C.I.greater_than``() = + member _.``UNativeInts.Collection.UnionArray C.I.greater_than``() = validate (UNativeInts.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -30276,7 +30276,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionArray C.I.greater_or_equal``() = + member _.``UNativeInts.Collection.UnionArray C.I.greater_or_equal``() = validate (UNativeInts.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -30293,7 +30293,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionArray C.N.equals``() = + member _.``UNativeInts.Collection.UnionArray C.N.equals``() = validate (UNativeInts.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -30310,7 +30310,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionArray C.N.equal``() = + member _.``UNativeInts.Collection.UnionArray C.N.equal``() = validate (UNativeInts.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -30327,7 +30327,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionArray C.N.not_equal``() = + member _.``UNativeInts.Collection.UnionArray C.N.not_equal``() = validate (UNativeInts.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -30344,7 +30344,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionArray C.N.compare``() = + member _.``UNativeInts.Collection.UnionArray C.N.compare``() = validate (UNativeInts.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -30361,7 +30361,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionArray C.N.less_than``() = + member _.``UNativeInts.Collection.UnionArray C.N.less_than``() = validate (UNativeInts.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -30378,7 +30378,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionArray C.N.less_or_equal``() = + member _.``UNativeInts.Collection.UnionArray C.N.less_or_equal``() = validate (UNativeInts.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -30395,7 +30395,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionArray C.N.greater_than``() = + member _.``UNativeInts.Collection.UnionArray C.N.greater_than``() = validate (UNativeInts.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -30412,7 +30412,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionArray C.N.greater_or_equal``() = + member _.``UNativeInts.Collection.UnionArray C.N.greater_or_equal``() = validate (UNativeInts.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -30429,7 +30429,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionWrapArray C.I.equals``() = + member _.``UNativeInts.Collection.UnionWrapArray C.I.equals``() = validate (UNativeInts.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -30446,7 +30446,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionWrapArray C.I.equal``() = + member _.``UNativeInts.Collection.UnionWrapArray C.I.equal``() = validate (UNativeInts.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -30463,7 +30463,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionWrapArray C.I.not_equal``() = + member _.``UNativeInts.Collection.UnionWrapArray C.I.not_equal``() = validate (UNativeInts.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -30480,7 +30480,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionWrapArray C.I.compare``() = + member _.``UNativeInts.Collection.UnionWrapArray C.I.compare``() = validate (UNativeInts.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -30497,7 +30497,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionWrapArray C.I.less_than``() = + member _.``UNativeInts.Collection.UnionWrapArray C.I.less_than``() = validate (UNativeInts.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -30514,7 +30514,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionWrapArray C.I.less_or_equal``() = + member _.``UNativeInts.Collection.UnionWrapArray C.I.less_or_equal``() = validate (UNativeInts.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -30531,7 +30531,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionWrapArray C.I.greater_than``() = + member _.``UNativeInts.Collection.UnionWrapArray C.I.greater_than``() = validate (UNativeInts.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -30548,7 +30548,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionWrapArray C.I.greater_or_equal``() = + member _.``UNativeInts.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (UNativeInts.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -30565,7 +30565,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionWrapArray C.N.equals``() = + member _.``UNativeInts.Collection.UnionWrapArray C.N.equals``() = validate (UNativeInts.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -30582,7 +30582,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionWrapArray C.N.equal``() = + member _.``UNativeInts.Collection.UnionWrapArray C.N.equal``() = validate (UNativeInts.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -30599,7 +30599,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionWrapArray C.N.not_equal``() = + member _.``UNativeInts.Collection.UnionWrapArray C.N.not_equal``() = validate (UNativeInts.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -30616,7 +30616,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionWrapArray C.N.compare``() = + member _.``UNativeInts.Collection.UnionWrapArray C.N.compare``() = validate (UNativeInts.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -30633,7 +30633,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionWrapArray C.N.less_than``() = + member _.``UNativeInts.Collection.UnionWrapArray C.N.less_than``() = validate (UNativeInts.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -30650,7 +30650,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionWrapArray C.N.less_or_equal``() = + member _.``UNativeInts.Collection.UnionWrapArray C.N.less_or_equal``() = validate (UNativeInts.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -30667,7 +30667,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionWrapArray C.N.greater_than``() = + member _.``UNativeInts.Collection.UnionWrapArray C.N.greater_than``() = validate (UNativeInts.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -30684,7 +30684,7 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.UnionWrapArray C.N.greater_or_equal``() = + member _.``UNativeInts.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (UNativeInts.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -30701,631 +30701,631 @@ type GeneratedTests () = |] [] - member __.``UNativeInts.Collection.ValueArray C.I.equals``() = + member _.``UNativeInts.Collection.ValueArray C.I.equals``() = validate (UNativeInts.Collection.ValueArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ValueArray C.I.equal``() = + member _.``UNativeInts.Collection.ValueArray C.I.equal``() = validate (UNativeInts.Collection.ValueArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ValueArray C.I.not_equal``() = + member _.``UNativeInts.Collection.ValueArray C.I.not_equal``() = validate (UNativeInts.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``UNativeInts.Collection.ValueArray C.I.compare``() = + member _.``UNativeInts.Collection.ValueArray C.I.compare``() = validate (UNativeInts.Collection.ValueArray) C.I.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member __.``UNativeInts.Collection.ValueArray C.I.less_than``() = + member _.``UNativeInts.Collection.ValueArray C.I.less_than``() = validate (UNativeInts.Collection.ValueArray) C.I.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member __.``UNativeInts.Collection.ValueArray C.I.less_or_equal``() = + member _.``UNativeInts.Collection.ValueArray C.I.less_or_equal``() = validate (UNativeInts.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member __.``UNativeInts.Collection.ValueArray C.I.greater_than``() = + member _.``UNativeInts.Collection.ValueArray C.I.greater_than``() = validate (UNativeInts.Collection.ValueArray) C.I.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member __.``UNativeInts.Collection.ValueArray C.I.greater_or_equal``() = + member _.``UNativeInts.Collection.ValueArray C.I.greater_or_equal``() = validate (UNativeInts.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member __.``UNativeInts.Collection.ValueArray C.N.equals``() = + member _.``UNativeInts.Collection.ValueArray C.N.equals``() = validate (UNativeInts.Collection.ValueArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ValueArray C.N.equal``() = + member _.``UNativeInts.Collection.ValueArray C.N.equal``() = validate (UNativeInts.Collection.ValueArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ValueArray C.N.not_equal``() = + member _.``UNativeInts.Collection.ValueArray C.N.not_equal``() = validate (UNativeInts.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``UNativeInts.Collection.ValueArray C.N.compare``() = + member _.``UNativeInts.Collection.ValueArray C.N.compare``() = validate (UNativeInts.Collection.ValueArray) C.N.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member __.``UNativeInts.Collection.ValueArray C.N.less_than``() = + member _.``UNativeInts.Collection.ValueArray C.N.less_than``() = validate (UNativeInts.Collection.ValueArray) C.N.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member __.``UNativeInts.Collection.ValueArray C.N.less_or_equal``() = + member _.``UNativeInts.Collection.ValueArray C.N.less_or_equal``() = validate (UNativeInts.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member __.``UNativeInts.Collection.ValueArray C.N.greater_than``() = + member _.``UNativeInts.Collection.ValueArray C.N.greater_than``() = validate (UNativeInts.Collection.ValueArray) C.N.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member __.``UNativeInts.Collection.ValueArray C.N.greater_or_equal``() = + member _.``UNativeInts.Collection.ValueArray C.N.greater_or_equal``() = validate (UNativeInts.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member __.``UNativeInts.Collection.ValueWrapArray C.I.equals``() = + member _.``UNativeInts.Collection.ValueWrapArray C.I.equals``() = validate (UNativeInts.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ValueWrapArray C.I.equal``() = + member _.``UNativeInts.Collection.ValueWrapArray C.I.equal``() = validate (UNativeInts.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ValueWrapArray C.I.not_equal``() = + member _.``UNativeInts.Collection.ValueWrapArray C.I.not_equal``() = validate (UNativeInts.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``UNativeInts.Collection.ValueWrapArray C.I.compare``() = + member _.``UNativeInts.Collection.ValueWrapArray C.I.compare``() = validate (UNativeInts.Collection.ValueWrapArray) C.I.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member __.``UNativeInts.Collection.ValueWrapArray C.I.less_than``() = + member _.``UNativeInts.Collection.ValueWrapArray C.I.less_than``() = validate (UNativeInts.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member __.``UNativeInts.Collection.ValueWrapArray C.I.less_or_equal``() = + member _.``UNativeInts.Collection.ValueWrapArray C.I.less_or_equal``() = validate (UNativeInts.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member __.``UNativeInts.Collection.ValueWrapArray C.I.greater_than``() = + member _.``UNativeInts.Collection.ValueWrapArray C.I.greater_than``() = validate (UNativeInts.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member __.``UNativeInts.Collection.ValueWrapArray C.I.greater_or_equal``() = + member _.``UNativeInts.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (UNativeInts.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member __.``UNativeInts.Collection.ValueWrapArray C.N.equals``() = + member _.``UNativeInts.Collection.ValueWrapArray C.N.equals``() = validate (UNativeInts.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ValueWrapArray C.N.equal``() = + member _.``UNativeInts.Collection.ValueWrapArray C.N.equal``() = validate (UNativeInts.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ValueWrapArray C.N.not_equal``() = + member _.``UNativeInts.Collection.ValueWrapArray C.N.not_equal``() = validate (UNativeInts.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``UNativeInts.Collection.ValueWrapArray C.N.compare``() = + member _.``UNativeInts.Collection.ValueWrapArray C.N.compare``() = validate (UNativeInts.Collection.ValueWrapArray) C.N.compare [| 0;-1;-1;1;0;-1;1;1;0 |] [] - member __.``UNativeInts.Collection.ValueWrapArray C.N.less_than``() = + member _.``UNativeInts.Collection.ValueWrapArray C.N.less_than``() = validate (UNativeInts.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;0;0;1;0;0;0 |] [] - member __.``UNativeInts.Collection.ValueWrapArray C.N.less_or_equal``() = + member _.``UNativeInts.Collection.ValueWrapArray C.N.less_or_equal``() = validate (UNativeInts.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;0;1;1;0;0;1 |] [] - member __.``UNativeInts.Collection.ValueWrapArray C.N.greater_than``() = + member _.``UNativeInts.Collection.ValueWrapArray C.N.greater_than``() = validate (UNativeInts.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;1;0;0;1;1;0 |] [] - member __.``UNativeInts.Collection.ValueWrapArray C.N.greater_or_equal``() = + member _.``UNativeInts.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (UNativeInts.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;1;1;0;1;1;1 |] [] - member __.``UNativeInts.Collection.ArrayArray C.I.equals``() = + member _.``UNativeInts.Collection.ArrayArray C.I.equals``() = validate (UNativeInts.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ArrayArray C.I.equal``() = + member _.``UNativeInts.Collection.ArrayArray C.I.equal``() = validate (UNativeInts.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ArrayArray C.I.not_equal``() = + member _.``UNativeInts.Collection.ArrayArray C.I.not_equal``() = validate (UNativeInts.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``UNativeInts.Collection.ArrayArray C.I.compare``() = + member _.``UNativeInts.Collection.ArrayArray C.I.compare``() = validate (UNativeInts.Collection.ArrayArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;-1;-1;-1;1;1;1;0;-1;-1;1;1;1;1;0;-1;1;1;1;1;1;0 |] [] - member __.``UNativeInts.Collection.ArrayArray C.I.less_than``() = + member _.``UNativeInts.Collection.ArrayArray C.I.less_than``() = validate (UNativeInts.Collection.ArrayArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member __.``UNativeInts.Collection.ArrayArray C.I.less_or_equal``() = + member _.``UNativeInts.Collection.ArrayArray C.I.less_or_equal``() = validate (UNativeInts.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ArrayArray C.I.greater_than``() = + member _.``UNativeInts.Collection.ArrayArray C.I.greater_than``() = validate (UNativeInts.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member __.``UNativeInts.Collection.ArrayArray C.I.greater_or_equal``() = + member _.``UNativeInts.Collection.ArrayArray C.I.greater_or_equal``() = validate (UNativeInts.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member __.``UNativeInts.Collection.ArrayArray C.N.equals``() = + member _.``UNativeInts.Collection.ArrayArray C.N.equals``() = validate (UNativeInts.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ArrayArray C.N.equal``() = + member _.``UNativeInts.Collection.ArrayArray C.N.equal``() = validate (UNativeInts.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ArrayArray C.N.not_equal``() = + member _.``UNativeInts.Collection.ArrayArray C.N.not_equal``() = validate (UNativeInts.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``UNativeInts.Collection.ArrayArray C.N.compare``() = + member _.``UNativeInts.Collection.ArrayArray C.N.compare``() = validate (UNativeInts.Collection.ArrayArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;-1;-1;-1;1;1;1;0;-1;-1;1;1;1;1;0;-1;1;1;1;1;1;0 |] [] - member __.``UNativeInts.Collection.ArrayArray C.N.less_than``() = + member _.``UNativeInts.Collection.ArrayArray C.N.less_than``() = validate (UNativeInts.Collection.ArrayArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member __.``UNativeInts.Collection.ArrayArray C.N.less_or_equal``() = + member _.``UNativeInts.Collection.ArrayArray C.N.less_or_equal``() = validate (UNativeInts.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ArrayArray C.N.greater_than``() = + member _.``UNativeInts.Collection.ArrayArray C.N.greater_than``() = validate (UNativeInts.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member __.``UNativeInts.Collection.ArrayArray C.N.greater_or_equal``() = + member _.``UNativeInts.Collection.ArrayArray C.N.greater_or_equal``() = validate (UNativeInts.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member __.``UNativeInts.Collection.ListArray C.I.equals``() = + member _.``UNativeInts.Collection.ListArray C.I.equals``() = validate (UNativeInts.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ListArray C.I.equal``() = + member _.``UNativeInts.Collection.ListArray C.I.equal``() = validate (UNativeInts.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ListArray C.I.not_equal``() = + member _.``UNativeInts.Collection.ListArray C.I.not_equal``() = validate (UNativeInts.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``UNativeInts.Collection.ListArray C.I.compare``() = + member _.``UNativeInts.Collection.ListArray C.I.compare``() = validate (UNativeInts.Collection.ListArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;-1;1;1;0;1;1;-1;1;-1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;1;1;1;0 |] [] - member __.``UNativeInts.Collection.ListArray C.I.less_than``() = + member _.``UNativeInts.Collection.ListArray C.I.less_than``() = validate (UNativeInts.Collection.ListArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0 |] [] - member __.``UNativeInts.Collection.ListArray C.I.less_or_equal``() = + member _.``UNativeInts.Collection.ListArray C.I.less_or_equal``() = validate (UNativeInts.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ListArray C.I.greater_than``() = + member _.``UNativeInts.Collection.ListArray C.I.greater_than``() = validate (UNativeInts.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;1;0;0;1;1;0;1;1;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0 |] [] - member __.``UNativeInts.Collection.ListArray C.I.greater_or_equal``() = + member _.``UNativeInts.Collection.ListArray C.I.greater_or_equal``() = validate (UNativeInts.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;1;1;1;1 |] [] - member __.``UNativeInts.Collection.ListArray C.N.equals``() = + member _.``UNativeInts.Collection.ListArray C.N.equals``() = validate (UNativeInts.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ListArray C.N.equal``() = + member _.``UNativeInts.Collection.ListArray C.N.equal``() = validate (UNativeInts.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ListArray C.N.not_equal``() = + member _.``UNativeInts.Collection.ListArray C.N.not_equal``() = validate (UNativeInts.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``UNativeInts.Collection.ListArray C.N.compare``() = + member _.``UNativeInts.Collection.ListArray C.N.compare``() = validate (UNativeInts.Collection.ListArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;-1;1;1;0;1;1;-1;1;-1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;1;1;1;0 |] [] - member __.``UNativeInts.Collection.ListArray C.N.less_than``() = + member _.``UNativeInts.Collection.ListArray C.N.less_than``() = validate (UNativeInts.Collection.ListArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0 |] [] - member __.``UNativeInts.Collection.ListArray C.N.less_or_equal``() = + member _.``UNativeInts.Collection.ListArray C.N.less_or_equal``() = validate (UNativeInts.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ListArray C.N.greater_than``() = + member _.``UNativeInts.Collection.ListArray C.N.greater_than``() = validate (UNativeInts.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;1;0;0;1;1;0;1;1;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0 |] [] - member __.``UNativeInts.Collection.ListArray C.N.greater_or_equal``() = + member _.``UNativeInts.Collection.ListArray C.N.greater_or_equal``() = validate (UNativeInts.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;1;1;1;1 |] [] - member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;1;1;1;0;1;1;1;1;-1;-1;0;-1;-1;1;1;-1;1;0;1;1;-1;-1;1;-1;0 |] [] - member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;0;1;0;0;0;0;0;0;0;0;1;1;0;1;1;0;0;1;0;0;0;0;1;1;0;1;0 |] [] - member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;0;1;0;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;0;0;1;1;0;1;1 |] [] - member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;1;0;1;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;1;1;0;0;1;0;0 |] [] - member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;1;1;1;1;1;1;1;1;0;0;1;0;0;1;1;0;1;1;1;1;0;0;1;0;1 |] [] - member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;1;-1;1;1;1;0;1;1;1;1;-1;-1;0;-1;-1;1;1;-1;1;0;1;1;-1;-1;1;-1;0 |] [] - member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;0;1;0;0;0;0;0;0;0;0;1;1;0;1;1;0;0;1;0;0;0;0;1;1;0;1;0 |] [] - member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;0;1;0;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;0;1;0;0;1;1;0;1;1 |] [] - member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;1;0;1;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;1;0;1;1;0;0;1;0;0 |] [] - member __.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member _.``UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (UNativeInts.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;1;0;1;1;1;1;1;1;1;1;0;0;1;0;0;1;1;0;1;1;1;1;0;0;1;0;1 |] [] - member __.``NullableUNativeInts.Collection.Array E.I.equals``() = + member _.``NullableUNativeInts.Collection.Array E.I.equals``() = validate (NullableUNativeInts.Collection.Array) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.Array E.I.equal``() = + member _.``NullableUNativeInts.Collection.Array E.I.equal``() = validate (NullableUNativeInts.Collection.Array) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.Array E.I.not_equal``() = + member _.``NullableUNativeInts.Collection.Array E.I.not_equal``() = validate (NullableUNativeInts.Collection.Array) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableUNativeInts.Collection.Array E.N.equals``() = + member _.``NullableUNativeInts.Collection.Array E.N.equals``() = validate (NullableUNativeInts.Collection.Array) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.Array E.N.equal``() = + member _.``NullableUNativeInts.Collection.Array E.N.equal``() = validate (NullableUNativeInts.Collection.Array) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.Array E.N.not_equal``() = + member _.``NullableUNativeInts.Collection.Array E.N.not_equal``() = validate (NullableUNativeInts.Collection.Array) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableUNativeInts.Collection.OptionArray E.I.equals``() = + member _.``NullableUNativeInts.Collection.OptionArray E.I.equals``() = validate (NullableUNativeInts.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.OptionArray E.I.equal``() = + member _.``NullableUNativeInts.Collection.OptionArray E.I.equal``() = validate (NullableUNativeInts.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.OptionArray E.I.not_equal``() = + member _.``NullableUNativeInts.Collection.OptionArray E.I.not_equal``() = validate (NullableUNativeInts.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``NullableUNativeInts.Collection.OptionArray E.N.equals``() = + member _.``NullableUNativeInts.Collection.OptionArray E.N.equals``() = validate (NullableUNativeInts.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.OptionArray E.N.equal``() = + member _.``NullableUNativeInts.Collection.OptionArray E.N.equal``() = validate (NullableUNativeInts.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.OptionArray E.N.not_equal``() = + member _.``NullableUNativeInts.Collection.OptionArray E.N.not_equal``() = validate (NullableUNativeInts.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``NullableUNativeInts.Collection.RefArray E.I.equals``() = + member _.``NullableUNativeInts.Collection.RefArray E.I.equals``() = validate (NullableUNativeInts.Collection.RefArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.RefArray E.I.equal``() = + member _.``NullableUNativeInts.Collection.RefArray E.I.equal``() = validate (NullableUNativeInts.Collection.RefArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.RefArray E.I.not_equal``() = + member _.``NullableUNativeInts.Collection.RefArray E.I.not_equal``() = validate (NullableUNativeInts.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableUNativeInts.Collection.RefArray E.N.equals``() = + member _.``NullableUNativeInts.Collection.RefArray E.N.equals``() = validate (NullableUNativeInts.Collection.RefArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.RefArray E.N.equal``() = + member _.``NullableUNativeInts.Collection.RefArray E.N.equal``() = validate (NullableUNativeInts.Collection.RefArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.RefArray E.N.not_equal``() = + member _.``NullableUNativeInts.Collection.RefArray E.N.not_equal``() = validate (NullableUNativeInts.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableUNativeInts.Collection.RefWrapArray E.I.equals``() = + member _.``NullableUNativeInts.Collection.RefWrapArray E.I.equals``() = validate (NullableUNativeInts.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.RefWrapArray E.I.equal``() = + member _.``NullableUNativeInts.Collection.RefWrapArray E.I.equal``() = validate (NullableUNativeInts.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.RefWrapArray E.I.not_equal``() = + member _.``NullableUNativeInts.Collection.RefWrapArray E.I.not_equal``() = validate (NullableUNativeInts.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableUNativeInts.Collection.RefWrapArray E.N.equals``() = + member _.``NullableUNativeInts.Collection.RefWrapArray E.N.equals``() = validate (NullableUNativeInts.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.RefWrapArray E.N.equal``() = + member _.``NullableUNativeInts.Collection.RefWrapArray E.N.equal``() = validate (NullableUNativeInts.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.RefWrapArray E.N.not_equal``() = + member _.``NullableUNativeInts.Collection.RefWrapArray E.N.not_equal``() = validate (NullableUNativeInts.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableUNativeInts.Collection.UnionArray E.I.equals``() = + member _.``NullableUNativeInts.Collection.UnionArray E.I.equals``() = validate (NullableUNativeInts.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -31350,7 +31350,7 @@ type GeneratedTests () = |] [] - member __.``NullableUNativeInts.Collection.UnionArray E.I.equal``() = + member _.``NullableUNativeInts.Collection.UnionArray E.I.equal``() = validate (NullableUNativeInts.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -31375,7 +31375,7 @@ type GeneratedTests () = |] [] - member __.``NullableUNativeInts.Collection.UnionArray E.I.not_equal``() = + member _.``NullableUNativeInts.Collection.UnionArray E.I.not_equal``() = validate (NullableUNativeInts.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -31400,7 +31400,7 @@ type GeneratedTests () = |] [] - member __.``NullableUNativeInts.Collection.UnionArray E.N.equals``() = + member _.``NullableUNativeInts.Collection.UnionArray E.N.equals``() = validate (NullableUNativeInts.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -31425,7 +31425,7 @@ type GeneratedTests () = |] [] - member __.``NullableUNativeInts.Collection.UnionArray E.N.equal``() = + member _.``NullableUNativeInts.Collection.UnionArray E.N.equal``() = validate (NullableUNativeInts.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -31450,7 +31450,7 @@ type GeneratedTests () = |] [] - member __.``NullableUNativeInts.Collection.UnionArray E.N.not_equal``() = + member _.``NullableUNativeInts.Collection.UnionArray E.N.not_equal``() = validate (NullableUNativeInts.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -31475,7 +31475,7 @@ type GeneratedTests () = |] [] - member __.``NullableUNativeInts.Collection.UnionWrapArray E.I.equals``() = + member _.``NullableUNativeInts.Collection.UnionWrapArray E.I.equals``() = validate (NullableUNativeInts.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -31500,7 +31500,7 @@ type GeneratedTests () = |] [] - member __.``NullableUNativeInts.Collection.UnionWrapArray E.I.equal``() = + member _.``NullableUNativeInts.Collection.UnionWrapArray E.I.equal``() = validate (NullableUNativeInts.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -31525,7 +31525,7 @@ type GeneratedTests () = |] [] - member __.``NullableUNativeInts.Collection.UnionWrapArray E.I.not_equal``() = + member _.``NullableUNativeInts.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableUNativeInts.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -31550,7 +31550,7 @@ type GeneratedTests () = |] [] - member __.``NullableUNativeInts.Collection.UnionWrapArray E.N.equals``() = + member _.``NullableUNativeInts.Collection.UnionWrapArray E.N.equals``() = validate (NullableUNativeInts.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -31575,7 +31575,7 @@ type GeneratedTests () = |] [] - member __.``NullableUNativeInts.Collection.UnionWrapArray E.N.equal``() = + member _.``NullableUNativeInts.Collection.UnionWrapArray E.N.equal``() = validate (NullableUNativeInts.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -31600,7 +31600,7 @@ type GeneratedTests () = |] [] - member __.``NullableUNativeInts.Collection.UnionWrapArray E.N.not_equal``() = + member _.``NullableUNativeInts.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableUNativeInts.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -31625,547 +31625,547 @@ type GeneratedTests () = |] [] - member __.``NullableUNativeInts.Collection.ValueArray E.I.equals``() = + member _.``NullableUNativeInts.Collection.ValueArray E.I.equals``() = validate (NullableUNativeInts.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.ValueArray E.I.equal``() = + member _.``NullableUNativeInts.Collection.ValueArray E.I.equal``() = validate (NullableUNativeInts.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.ValueArray E.I.not_equal``() = + member _.``NullableUNativeInts.Collection.ValueArray E.I.not_equal``() = validate (NullableUNativeInts.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableUNativeInts.Collection.ValueArray E.N.equals``() = + member _.``NullableUNativeInts.Collection.ValueArray E.N.equals``() = validate (NullableUNativeInts.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.ValueArray E.N.equal``() = + member _.``NullableUNativeInts.Collection.ValueArray E.N.equal``() = validate (NullableUNativeInts.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.ValueArray E.N.not_equal``() = + member _.``NullableUNativeInts.Collection.ValueArray E.N.not_equal``() = validate (NullableUNativeInts.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableUNativeInts.Collection.ValueWrapArray E.I.equals``() = + member _.``NullableUNativeInts.Collection.ValueWrapArray E.I.equals``() = validate (NullableUNativeInts.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.ValueWrapArray E.I.equal``() = + member _.``NullableUNativeInts.Collection.ValueWrapArray E.I.equal``() = validate (NullableUNativeInts.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.ValueWrapArray E.I.not_equal``() = + member _.``NullableUNativeInts.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableUNativeInts.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableUNativeInts.Collection.ValueWrapArray E.N.equals``() = + member _.``NullableUNativeInts.Collection.ValueWrapArray E.N.equals``() = validate (NullableUNativeInts.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.ValueWrapArray E.N.equal``() = + member _.``NullableUNativeInts.Collection.ValueWrapArray E.N.equal``() = validate (NullableUNativeInts.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.ValueWrapArray E.N.not_equal``() = + member _.``NullableUNativeInts.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableUNativeInts.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableUNativeInts.Collection.ArrayArray E.I.equals``() = + member _.``NullableUNativeInts.Collection.ArrayArray E.I.equals``() = validate (NullableUNativeInts.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.ArrayArray E.I.equal``() = + member _.``NullableUNativeInts.Collection.ArrayArray E.I.equal``() = validate (NullableUNativeInts.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.ArrayArray E.I.not_equal``() = + member _.``NullableUNativeInts.Collection.ArrayArray E.I.not_equal``() = validate (NullableUNativeInts.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member __.``NullableUNativeInts.Collection.ArrayArray E.N.equals``() = + member _.``NullableUNativeInts.Collection.ArrayArray E.N.equals``() = validate (NullableUNativeInts.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.ArrayArray E.N.equal``() = + member _.``NullableUNativeInts.Collection.ArrayArray E.N.equal``() = validate (NullableUNativeInts.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.ArrayArray E.N.not_equal``() = + member _.``NullableUNativeInts.Collection.ArrayArray E.N.not_equal``() = validate (NullableUNativeInts.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member __.``NullableUNativeInts.Collection.ListArray E.I.equals``() = + member _.``NullableUNativeInts.Collection.ListArray E.I.equals``() = validate (NullableUNativeInts.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.ListArray E.I.equal``() = + member _.``NullableUNativeInts.Collection.ListArray E.I.equal``() = validate (NullableUNativeInts.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.ListArray E.I.not_equal``() = + member _.``NullableUNativeInts.Collection.ListArray E.I.not_equal``() = validate (NullableUNativeInts.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member __.``NullableUNativeInts.Collection.ListArray E.N.equals``() = + member _.``NullableUNativeInts.Collection.ListArray E.N.equals``() = validate (NullableUNativeInts.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.ListArray E.N.equal``() = + member _.``NullableUNativeInts.Collection.ListArray E.N.equal``() = validate (NullableUNativeInts.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableUNativeInts.Collection.ListArray E.N.not_equal``() = + member _.``NullableUNativeInts.Collection.ListArray E.N.not_equal``() = validate (NullableUNativeInts.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member __.``Chars.Collection.Array C.I.equals``() = + member _.``Chars.Collection.Array C.I.equals``() = validate (Chars.Collection.Array) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.Array C.I.equal``() = + member _.``Chars.Collection.Array C.I.equal``() = validate (Chars.Collection.Array) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.Array C.I.not_equal``() = + member _.``Chars.Collection.Array C.I.not_equal``() = validate (Chars.Collection.Array) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Chars.Collection.Array C.I.compare``() = + member _.``Chars.Collection.Array C.I.compare``() = validate (Chars.Collection.Array) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Chars.Collection.Array C.I.less_than``() = + member _.``Chars.Collection.Array C.I.less_than``() = validate (Chars.Collection.Array) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Chars.Collection.Array C.I.less_or_equal``() = + member _.``Chars.Collection.Array C.I.less_or_equal``() = validate (Chars.Collection.Array) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Chars.Collection.Array C.I.greater_than``() = + member _.``Chars.Collection.Array C.I.greater_than``() = validate (Chars.Collection.Array) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Chars.Collection.Array C.I.greater_or_equal``() = + member _.``Chars.Collection.Array C.I.greater_or_equal``() = validate (Chars.Collection.Array) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Chars.Collection.Array C.N.equals``() = + member _.``Chars.Collection.Array C.N.equals``() = validate (Chars.Collection.Array) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.Array C.N.equal``() = + member _.``Chars.Collection.Array C.N.equal``() = validate (Chars.Collection.Array) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.Array C.N.not_equal``() = + member _.``Chars.Collection.Array C.N.not_equal``() = validate (Chars.Collection.Array) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Chars.Collection.Array C.N.compare``() = + member _.``Chars.Collection.Array C.N.compare``() = validate (Chars.Collection.Array) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Chars.Collection.Array C.N.less_than``() = + member _.``Chars.Collection.Array C.N.less_than``() = validate (Chars.Collection.Array) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Chars.Collection.Array C.N.less_or_equal``() = + member _.``Chars.Collection.Array C.N.less_or_equal``() = validate (Chars.Collection.Array) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Chars.Collection.Array C.N.greater_than``() = + member _.``Chars.Collection.Array C.N.greater_than``() = validate (Chars.Collection.Array) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Chars.Collection.Array C.N.greater_or_equal``() = + member _.``Chars.Collection.Array C.N.greater_or_equal``() = validate (Chars.Collection.Array) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Chars.Collection.OptionArray C.I.equals``() = + member _.``Chars.Collection.OptionArray C.I.equals``() = validate (Chars.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.OptionArray C.I.equal``() = + member _.``Chars.Collection.OptionArray C.I.equal``() = validate (Chars.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.OptionArray C.I.not_equal``() = + member _.``Chars.Collection.OptionArray C.I.not_equal``() = validate (Chars.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Chars.Collection.OptionArray C.I.compare``() = + member _.``Chars.Collection.OptionArray C.I.compare``() = validate (Chars.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-65535;-48;-49;-50;1;65535;0;65487;65486;65485;1;48;-65487;0;-1;-2;1;49;-65486;1;0;-1;1;50;-65485;2;1;0 |] [] - member __.``Chars.Collection.OptionArray C.I.less_than``() = + member _.``Chars.Collection.OptionArray C.I.less_than``() = validate (Chars.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member __.``Chars.Collection.OptionArray C.I.less_or_equal``() = + member _.``Chars.Collection.OptionArray C.I.less_or_equal``() = validate (Chars.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member __.``Chars.Collection.OptionArray C.I.greater_than``() = + member _.``Chars.Collection.OptionArray C.I.greater_than``() = validate (Chars.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member __.``Chars.Collection.OptionArray C.I.greater_or_equal``() = + member _.``Chars.Collection.OptionArray C.I.greater_or_equal``() = validate (Chars.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member __.``Chars.Collection.OptionArray C.N.equals``() = + member _.``Chars.Collection.OptionArray C.N.equals``() = validate (Chars.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.OptionArray C.N.equal``() = + member _.``Chars.Collection.OptionArray C.N.equal``() = validate (Chars.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.OptionArray C.N.not_equal``() = + member _.``Chars.Collection.OptionArray C.N.not_equal``() = validate (Chars.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Chars.Collection.OptionArray C.N.compare``() = + member _.``Chars.Collection.OptionArray C.N.compare``() = validate (Chars.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-65535;-48;-49;-50;1;65535;0;65487;65486;65485;1;48;-65487;0;-1;-2;1;49;-65486;1;0;-1;1;50;-65485;2;1;0 |] [] - member __.``Chars.Collection.OptionArray C.N.less_than``() = + member _.``Chars.Collection.OptionArray C.N.less_than``() = validate (Chars.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member __.``Chars.Collection.OptionArray C.N.less_or_equal``() = + member _.``Chars.Collection.OptionArray C.N.less_or_equal``() = validate (Chars.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member __.``Chars.Collection.OptionArray C.N.greater_than``() = + member _.``Chars.Collection.OptionArray C.N.greater_than``() = validate (Chars.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member __.``Chars.Collection.OptionArray C.N.greater_or_equal``() = + member _.``Chars.Collection.OptionArray C.N.greater_or_equal``() = validate (Chars.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member __.``Chars.Collection.RefArray C.I.equals``() = + member _.``Chars.Collection.RefArray C.I.equals``() = validate (Chars.Collection.RefArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.RefArray C.I.equal``() = + member _.``Chars.Collection.RefArray C.I.equal``() = validate (Chars.Collection.RefArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.RefArray C.I.not_equal``() = + member _.``Chars.Collection.RefArray C.I.not_equal``() = validate (Chars.Collection.RefArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Chars.Collection.RefArray C.I.compare``() = + member _.``Chars.Collection.RefArray C.I.compare``() = validate (Chars.Collection.RefArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Chars.Collection.RefArray C.I.less_than``() = + member _.``Chars.Collection.RefArray C.I.less_than``() = validate (Chars.Collection.RefArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Chars.Collection.RefArray C.I.less_or_equal``() = + member _.``Chars.Collection.RefArray C.I.less_or_equal``() = validate (Chars.Collection.RefArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Chars.Collection.RefArray C.I.greater_than``() = + member _.``Chars.Collection.RefArray C.I.greater_than``() = validate (Chars.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Chars.Collection.RefArray C.I.greater_or_equal``() = + member _.``Chars.Collection.RefArray C.I.greater_or_equal``() = validate (Chars.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Chars.Collection.RefArray C.N.equals``() = + member _.``Chars.Collection.RefArray C.N.equals``() = validate (Chars.Collection.RefArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.RefArray C.N.equal``() = + member _.``Chars.Collection.RefArray C.N.equal``() = validate (Chars.Collection.RefArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.RefArray C.N.not_equal``() = + member _.``Chars.Collection.RefArray C.N.not_equal``() = validate (Chars.Collection.RefArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Chars.Collection.RefArray C.N.compare``() = + member _.``Chars.Collection.RefArray C.N.compare``() = validate (Chars.Collection.RefArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Chars.Collection.RefArray C.N.less_than``() = + member _.``Chars.Collection.RefArray C.N.less_than``() = validate (Chars.Collection.RefArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Chars.Collection.RefArray C.N.less_or_equal``() = + member _.``Chars.Collection.RefArray C.N.less_or_equal``() = validate (Chars.Collection.RefArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Chars.Collection.RefArray C.N.greater_than``() = + member _.``Chars.Collection.RefArray C.N.greater_than``() = validate (Chars.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Chars.Collection.RefArray C.N.greater_or_equal``() = + member _.``Chars.Collection.RefArray C.N.greater_or_equal``() = validate (Chars.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Chars.Collection.RefWrapArray C.I.equals``() = + member _.``Chars.Collection.RefWrapArray C.I.equals``() = validate (Chars.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.RefWrapArray C.I.equal``() = + member _.``Chars.Collection.RefWrapArray C.I.equal``() = validate (Chars.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.RefWrapArray C.I.not_equal``() = + member _.``Chars.Collection.RefWrapArray C.I.not_equal``() = validate (Chars.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Chars.Collection.RefWrapArray C.I.compare``() = + member _.``Chars.Collection.RefWrapArray C.I.compare``() = validate (Chars.Collection.RefWrapArray) C.I.compare [| 0;-65535;-48;-49;-50;65535;0;65487;65486;65485;48;-65487;0;-1;-2;49;-65486;1;0;-1;50;-65485;2;1;0 |] [] - member __.``Chars.Collection.RefWrapArray C.I.less_than``() = + member _.``Chars.Collection.RefWrapArray C.I.less_than``() = validate (Chars.Collection.RefWrapArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Chars.Collection.RefWrapArray C.I.less_or_equal``() = + member _.``Chars.Collection.RefWrapArray C.I.less_or_equal``() = validate (Chars.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Chars.Collection.RefWrapArray C.I.greater_than``() = + member _.``Chars.Collection.RefWrapArray C.I.greater_than``() = validate (Chars.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Chars.Collection.RefWrapArray C.I.greater_or_equal``() = + member _.``Chars.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Chars.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Chars.Collection.RefWrapArray C.N.equals``() = + member _.``Chars.Collection.RefWrapArray C.N.equals``() = validate (Chars.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.RefWrapArray C.N.equal``() = + member _.``Chars.Collection.RefWrapArray C.N.equal``() = validate (Chars.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.RefWrapArray C.N.not_equal``() = + member _.``Chars.Collection.RefWrapArray C.N.not_equal``() = validate (Chars.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Chars.Collection.RefWrapArray C.N.compare``() = + member _.``Chars.Collection.RefWrapArray C.N.compare``() = validate (Chars.Collection.RefWrapArray) C.N.compare [| 0;-65535;-48;-49;-50;65535;0;65487;65486;65485;48;-65487;0;-1;-2;49;-65486;1;0;-1;50;-65485;2;1;0 |] [] - member __.``Chars.Collection.RefWrapArray C.N.less_than``() = + member _.``Chars.Collection.RefWrapArray C.N.less_than``() = validate (Chars.Collection.RefWrapArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Chars.Collection.RefWrapArray C.N.less_or_equal``() = + member _.``Chars.Collection.RefWrapArray C.N.less_or_equal``() = validate (Chars.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Chars.Collection.RefWrapArray C.N.greater_than``() = + member _.``Chars.Collection.RefWrapArray C.N.greater_than``() = validate (Chars.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Chars.Collection.RefWrapArray C.N.greater_or_equal``() = + member _.``Chars.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Chars.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Chars.Collection.UnionArray C.I.equals``() = + member _.``Chars.Collection.UnionArray C.I.equals``() = validate (Chars.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -32201,7 +32201,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionArray C.I.equal``() = + member _.``Chars.Collection.UnionArray C.I.equal``() = validate (Chars.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -32237,7 +32237,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionArray C.I.not_equal``() = + member _.``Chars.Collection.UnionArray C.I.not_equal``() = validate (Chars.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -32273,7 +32273,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionArray C.I.compare``() = + member _.``Chars.Collection.UnionArray C.I.compare``() = validate (Chars.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -32309,7 +32309,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionArray C.I.less_than``() = + member _.``Chars.Collection.UnionArray C.I.less_than``() = validate (Chars.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -32345,7 +32345,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionArray C.I.less_or_equal``() = + member _.``Chars.Collection.UnionArray C.I.less_or_equal``() = validate (Chars.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -32381,7 +32381,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionArray C.I.greater_than``() = + member _.``Chars.Collection.UnionArray C.I.greater_than``() = validate (Chars.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -32417,7 +32417,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionArray C.I.greater_or_equal``() = + member _.``Chars.Collection.UnionArray C.I.greater_or_equal``() = validate (Chars.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -32453,7 +32453,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionArray C.N.equals``() = + member _.``Chars.Collection.UnionArray C.N.equals``() = validate (Chars.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -32489,7 +32489,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionArray C.N.equal``() = + member _.``Chars.Collection.UnionArray C.N.equal``() = validate (Chars.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -32525,7 +32525,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionArray C.N.not_equal``() = + member _.``Chars.Collection.UnionArray C.N.not_equal``() = validate (Chars.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -32561,7 +32561,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionArray C.N.compare``() = + member _.``Chars.Collection.UnionArray C.N.compare``() = validate (Chars.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -32597,7 +32597,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionArray C.N.less_than``() = + member _.``Chars.Collection.UnionArray C.N.less_than``() = validate (Chars.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -32633,7 +32633,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionArray C.N.less_or_equal``() = + member _.``Chars.Collection.UnionArray C.N.less_or_equal``() = validate (Chars.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -32669,7 +32669,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionArray C.N.greater_than``() = + member _.``Chars.Collection.UnionArray C.N.greater_than``() = validate (Chars.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -32705,7 +32705,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionArray C.N.greater_or_equal``() = + member _.``Chars.Collection.UnionArray C.N.greater_or_equal``() = validate (Chars.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -32741,7 +32741,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionWrapArray C.I.equals``() = + member _.``Chars.Collection.UnionWrapArray C.I.equals``() = validate (Chars.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -32777,7 +32777,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionWrapArray C.I.equal``() = + member _.``Chars.Collection.UnionWrapArray C.I.equal``() = validate (Chars.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -32813,7 +32813,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionWrapArray C.I.not_equal``() = + member _.``Chars.Collection.UnionWrapArray C.I.not_equal``() = validate (Chars.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -32849,7 +32849,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionWrapArray C.I.compare``() = + member _.``Chars.Collection.UnionWrapArray C.I.compare``() = validate (Chars.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-65535;-1;-2;-3;-3;-3;-3;-48;-1;-2;-3;-3;-3;-3;-49;-1;-2;-3;-3;-3;-3;-50;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-65535;-1;-2;-2;-2;-2;1;-48;-1;-2;-2;-2;-2;1;-49;-1;-2;-2;-2;-2;1;-50;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-65535; @@ -32885,7 +32885,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionWrapArray C.I.less_than``() = + member _.``Chars.Collection.UnionWrapArray C.I.less_than``() = validate (Chars.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -32921,7 +32921,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionWrapArray C.I.less_or_equal``() = + member _.``Chars.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Chars.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -32957,7 +32957,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionWrapArray C.I.greater_than``() = + member _.``Chars.Collection.UnionWrapArray C.I.greater_than``() = validate (Chars.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -32993,7 +32993,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionWrapArray C.I.greater_or_equal``() = + member _.``Chars.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Chars.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -33029,7 +33029,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionWrapArray C.N.equals``() = + member _.``Chars.Collection.UnionWrapArray C.N.equals``() = validate (Chars.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -33065,7 +33065,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionWrapArray C.N.equal``() = + member _.``Chars.Collection.UnionWrapArray C.N.equal``() = validate (Chars.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -33101,7 +33101,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionWrapArray C.N.not_equal``() = + member _.``Chars.Collection.UnionWrapArray C.N.not_equal``() = validate (Chars.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -33137,7 +33137,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionWrapArray C.N.compare``() = + member _.``Chars.Collection.UnionWrapArray C.N.compare``() = validate (Chars.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-65535;-1;-2;-3;-3;-3;-3;-48;-1;-2;-3;-3;-3;-3;-49;-1;-2;-3;-3;-3;-3;-50;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-65535;-1;-2;-2;-2;-2;1;-48;-1;-2;-2;-2;-2;1;-49;-1;-2;-2;-2;-2;1;-50;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-65535; @@ -33173,7 +33173,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionWrapArray C.N.less_than``() = + member _.``Chars.Collection.UnionWrapArray C.N.less_than``() = validate (Chars.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -33209,7 +33209,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionWrapArray C.N.less_or_equal``() = + member _.``Chars.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Chars.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -33245,7 +33245,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionWrapArray C.N.greater_than``() = + member _.``Chars.Collection.UnionWrapArray C.N.greater_than``() = validate (Chars.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -33281,7 +33281,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.UnionWrapArray C.N.greater_or_equal``() = + member _.``Chars.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Chars.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -33317,199 +33317,199 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ValueArray C.I.equals``() = + member _.``Chars.Collection.ValueArray C.I.equals``() = validate (Chars.Collection.ValueArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.ValueArray C.I.equal``() = + member _.``Chars.Collection.ValueArray C.I.equal``() = validate (Chars.Collection.ValueArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.ValueArray C.I.not_equal``() = + member _.``Chars.Collection.ValueArray C.I.not_equal``() = validate (Chars.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Chars.Collection.ValueArray C.I.compare``() = + member _.``Chars.Collection.ValueArray C.I.compare``() = validate (Chars.Collection.ValueArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Chars.Collection.ValueArray C.I.less_than``() = + member _.``Chars.Collection.ValueArray C.I.less_than``() = validate (Chars.Collection.ValueArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Chars.Collection.ValueArray C.I.less_or_equal``() = + member _.``Chars.Collection.ValueArray C.I.less_or_equal``() = validate (Chars.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Chars.Collection.ValueArray C.I.greater_than``() = + member _.``Chars.Collection.ValueArray C.I.greater_than``() = validate (Chars.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Chars.Collection.ValueArray C.I.greater_or_equal``() = + member _.``Chars.Collection.ValueArray C.I.greater_or_equal``() = validate (Chars.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Chars.Collection.ValueArray C.N.equals``() = + member _.``Chars.Collection.ValueArray C.N.equals``() = validate (Chars.Collection.ValueArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.ValueArray C.N.equal``() = + member _.``Chars.Collection.ValueArray C.N.equal``() = validate (Chars.Collection.ValueArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.ValueArray C.N.not_equal``() = + member _.``Chars.Collection.ValueArray C.N.not_equal``() = validate (Chars.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Chars.Collection.ValueArray C.N.compare``() = + member _.``Chars.Collection.ValueArray C.N.compare``() = validate (Chars.Collection.ValueArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Chars.Collection.ValueArray C.N.less_than``() = + member _.``Chars.Collection.ValueArray C.N.less_than``() = validate (Chars.Collection.ValueArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Chars.Collection.ValueArray C.N.less_or_equal``() = + member _.``Chars.Collection.ValueArray C.N.less_or_equal``() = validate (Chars.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Chars.Collection.ValueArray C.N.greater_than``() = + member _.``Chars.Collection.ValueArray C.N.greater_than``() = validate (Chars.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Chars.Collection.ValueArray C.N.greater_or_equal``() = + member _.``Chars.Collection.ValueArray C.N.greater_or_equal``() = validate (Chars.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Chars.Collection.ValueWrapArray C.I.equals``() = + member _.``Chars.Collection.ValueWrapArray C.I.equals``() = validate (Chars.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.ValueWrapArray C.I.equal``() = + member _.``Chars.Collection.ValueWrapArray C.I.equal``() = validate (Chars.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.ValueWrapArray C.I.not_equal``() = + member _.``Chars.Collection.ValueWrapArray C.I.not_equal``() = validate (Chars.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Chars.Collection.ValueWrapArray C.I.compare``() = + member _.``Chars.Collection.ValueWrapArray C.I.compare``() = validate (Chars.Collection.ValueWrapArray) C.I.compare [| 0;-65535;-48;-49;-50;65535;0;65487;65486;65485;48;-65487;0;-1;-2;49;-65486;1;0;-1;50;-65485;2;1;0 |] [] - member __.``Chars.Collection.ValueWrapArray C.I.less_than``() = + member _.``Chars.Collection.ValueWrapArray C.I.less_than``() = validate (Chars.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Chars.Collection.ValueWrapArray C.I.less_or_equal``() = + member _.``Chars.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Chars.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Chars.Collection.ValueWrapArray C.I.greater_than``() = + member _.``Chars.Collection.ValueWrapArray C.I.greater_than``() = validate (Chars.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Chars.Collection.ValueWrapArray C.I.greater_or_equal``() = + member _.``Chars.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Chars.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Chars.Collection.ValueWrapArray C.N.equals``() = + member _.``Chars.Collection.ValueWrapArray C.N.equals``() = validate (Chars.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.ValueWrapArray C.N.equal``() = + member _.``Chars.Collection.ValueWrapArray C.N.equal``() = validate (Chars.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Chars.Collection.ValueWrapArray C.N.not_equal``() = + member _.``Chars.Collection.ValueWrapArray C.N.not_equal``() = validate (Chars.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Chars.Collection.ValueWrapArray C.N.compare``() = + member _.``Chars.Collection.ValueWrapArray C.N.compare``() = validate (Chars.Collection.ValueWrapArray) C.N.compare [| 0;-65535;-48;-49;-50;65535;0;65487;65486;65485;48;-65487;0;-1;-2;49;-65486;1;0;-1;50;-65485;2;1;0 |] [] - member __.``Chars.Collection.ValueWrapArray C.N.less_than``() = + member _.``Chars.Collection.ValueWrapArray C.N.less_than``() = validate (Chars.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Chars.Collection.ValueWrapArray C.N.less_or_equal``() = + member _.``Chars.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Chars.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Chars.Collection.ValueWrapArray C.N.greater_than``() = + member _.``Chars.Collection.ValueWrapArray C.N.greater_than``() = validate (Chars.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Chars.Collection.ValueWrapArray C.N.greater_or_equal``() = + member _.``Chars.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Chars.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Chars.Collection.ArrayArray C.I.equals``() = + member _.``Chars.Collection.ArrayArray C.I.equals``() = validate (Chars.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33517,7 +33517,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray C.I.equal``() = + member _.``Chars.Collection.ArrayArray C.I.equal``() = validate (Chars.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33525,7 +33525,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray C.I.not_equal``() = + member _.``Chars.Collection.ArrayArray C.I.not_equal``() = validate (Chars.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -33533,7 +33533,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray C.I.compare``() = + member _.``Chars.Collection.ArrayArray C.I.compare``() = validate (Chars.Collection.ArrayArray) C.I.compare [| 0;-65535;-48;-49;-50;-1;-1;-1;-1;-1;65535;0;65487;65486;65485;-1;-1;-1;-1;-1;48;-65487;0;-1;-2;-1;-1;-1;-1;-1;49;-65486;1;0;-1;-1;-1;-1;-1;-1; 50;-65485;2;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-65535;-48;-49;-50;1;1;1;1;1;65535;0;65487;65486;65485;1;1;1;1;1;48;-65487;0;-1;-2; @@ -33541,7 +33541,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray C.I.less_than``() = + member _.``Chars.Collection.ArrayArray C.I.less_than``() = validate (Chars.Collection.ArrayArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; @@ -33549,7 +33549,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray C.I.less_or_equal``() = + member _.``Chars.Collection.ArrayArray C.I.less_or_equal``() = validate (Chars.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; @@ -33557,7 +33557,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray C.I.greater_than``() = + member _.``Chars.Collection.ArrayArray C.I.greater_than``() = validate (Chars.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; @@ -33565,7 +33565,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray C.I.greater_or_equal``() = + member _.``Chars.Collection.ArrayArray C.I.greater_or_equal``() = validate (Chars.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; @@ -33573,7 +33573,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray C.N.equals``() = + member _.``Chars.Collection.ArrayArray C.N.equals``() = validate (Chars.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33581,7 +33581,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray C.N.equal``() = + member _.``Chars.Collection.ArrayArray C.N.equal``() = validate (Chars.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33589,7 +33589,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray C.N.not_equal``() = + member _.``Chars.Collection.ArrayArray C.N.not_equal``() = validate (Chars.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -33597,7 +33597,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray C.N.compare``() = + member _.``Chars.Collection.ArrayArray C.N.compare``() = validate (Chars.Collection.ArrayArray) C.N.compare [| 0;-65535;-48;-49;-50;-1;-1;-1;-1;-1;65535;0;65487;65486;65485;-1;-1;-1;-1;-1;48;-65487;0;-1;-2;-1;-1;-1;-1;-1;49;-65486;1;0;-1;-1;-1;-1;-1;-1; 50;-65485;2;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-65535;-48;-49;-50;1;1;1;1;1;65535;0;65487;65486;65485;1;1;1;1;1;48;-65487;0;-1;-2; @@ -33605,7 +33605,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray C.N.less_than``() = + member _.``Chars.Collection.ArrayArray C.N.less_than``() = validate (Chars.Collection.ArrayArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; @@ -33613,7 +33613,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray C.N.less_or_equal``() = + member _.``Chars.Collection.ArrayArray C.N.less_or_equal``() = validate (Chars.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; @@ -33621,7 +33621,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray C.N.greater_than``() = + member _.``Chars.Collection.ArrayArray C.N.greater_than``() = validate (Chars.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; @@ -33629,7 +33629,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray C.N.greater_or_equal``() = + member _.``Chars.Collection.ArrayArray C.N.greater_or_equal``() = validate (Chars.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; @@ -33637,7 +33637,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ListArray C.I.equals``() = + member _.``Chars.Collection.ListArray C.I.equals``() = validate (Chars.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33645,7 +33645,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ListArray C.I.equal``() = + member _.``Chars.Collection.ListArray C.I.equal``() = validate (Chars.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33653,7 +33653,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ListArray C.I.not_equal``() = + member _.``Chars.Collection.ListArray C.I.not_equal``() = validate (Chars.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -33661,7 +33661,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ListArray C.I.compare``() = + member _.``Chars.Collection.ListArray C.I.compare``() = validate (Chars.Collection.ListArray) C.I.compare [| 0;-65535;-48;-49;-50;-1;-65535;-48;-49;-50;65535;0;65487;65486;65485;65535;-1;65487;65486;65485;48;-65487;0;-1;-2;48;-65487;-1;-1;-2;49;-65486;1;0;-1;49;-65486;1;-1;-1; 50;-65485;2;1;0;50;-65485;2;1;-1;1;-65535;-48;-49;-50;0;-65535;-48;-49;-50;65535;1;65487;65486;65485;65535;0;65487;65486;65485;48;-65487;1;-1;-2;48;-65487;0;-1;-2; @@ -33669,7 +33669,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ListArray C.I.less_than``() = + member _.``Chars.Collection.ListArray C.I.less_than``() = validate (Chars.Collection.ListArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; @@ -33677,7 +33677,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ListArray C.I.less_or_equal``() = + member _.``Chars.Collection.ListArray C.I.less_or_equal``() = validate (Chars.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; @@ -33685,7 +33685,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ListArray C.I.greater_than``() = + member _.``Chars.Collection.ListArray C.I.greater_than``() = validate (Chars.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; @@ -33693,7 +33693,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ListArray C.I.greater_or_equal``() = + member _.``Chars.Collection.ListArray C.I.greater_or_equal``() = validate (Chars.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; @@ -33701,7 +33701,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ListArray C.N.equals``() = + member _.``Chars.Collection.ListArray C.N.equals``() = validate (Chars.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33709,7 +33709,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ListArray C.N.equal``() = + member _.``Chars.Collection.ListArray C.N.equal``() = validate (Chars.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33717,7 +33717,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ListArray C.N.not_equal``() = + member _.``Chars.Collection.ListArray C.N.not_equal``() = validate (Chars.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -33725,7 +33725,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ListArray C.N.compare``() = + member _.``Chars.Collection.ListArray C.N.compare``() = validate (Chars.Collection.ListArray) C.N.compare [| 0;-65535;-48;-49;-50;-1;-65535;-48;-49;-50;65535;0;65487;65486;65485;65535;-1;65487;65486;65485;48;-65487;0;-1;-2;48;-65487;-1;-1;-2;49;-65486;1;0;-1;49;-65486;1;-1;-1; 50;-65485;2;1;0;50;-65485;2;1;-1;1;-65535;-48;-49;-50;0;-65535;-48;-49;-50;65535;1;65487;65486;65485;65535;0;65487;65486;65485;48;-65487;1;-1;-2;48;-65487;0;-1;-2; @@ -33733,7 +33733,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ListArray C.N.less_than``() = + member _.``Chars.Collection.ListArray C.N.less_than``() = validate (Chars.Collection.ListArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; @@ -33741,7 +33741,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ListArray C.N.less_or_equal``() = + member _.``Chars.Collection.ListArray C.N.less_or_equal``() = validate (Chars.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; @@ -33749,7 +33749,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ListArray C.N.greater_than``() = + member _.``Chars.Collection.ListArray C.N.greater_than``() = validate (Chars.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; @@ -33757,7 +33757,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ListArray C.N.greater_or_equal``() = + member _.``Chars.Collection.ListArray C.N.greater_or_equal``() = validate (Chars.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; @@ -33765,7 +33765,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33773,7 +33773,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33781,7 +33781,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -33789,7 +33789,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; @@ -33797,7 +33797,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; @@ -33805,7 +33805,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; @@ -33813,7 +33813,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; @@ -33821,7 +33821,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; @@ -33829,7 +33829,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33837,7 +33837,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -33845,7 +33845,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -33853,7 +33853,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; @@ -33861,7 +33861,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; @@ -33869,7 +33869,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; @@ -33877,7 +33877,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; @@ -33885,7 +33885,7 @@ type GeneratedTests () = |] [] - member __.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member _.``Chars.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Chars.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; @@ -33893,157 +33893,157 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.Array E.I.equals``() = + member _.``NullableChars.Collection.Array E.I.equals``() = validate (NullableChars.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.Array E.I.equal``() = + member _.``NullableChars.Collection.Array E.I.equal``() = validate (NullableChars.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.Array E.I.not_equal``() = + member _.``NullableChars.Collection.Array E.I.not_equal``() = validate (NullableChars.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableChars.Collection.Array E.N.equals``() = + member _.``NullableChars.Collection.Array E.N.equals``() = validate (NullableChars.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.Array E.N.equal``() = + member _.``NullableChars.Collection.Array E.N.equal``() = validate (NullableChars.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.Array E.N.not_equal``() = + member _.``NullableChars.Collection.Array E.N.not_equal``() = validate (NullableChars.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableChars.Collection.OptionArray E.I.equals``() = + member _.``NullableChars.Collection.OptionArray E.I.equals``() = validate (NullableChars.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.OptionArray E.I.equal``() = + member _.``NullableChars.Collection.OptionArray E.I.equal``() = validate (NullableChars.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.OptionArray E.I.not_equal``() = + member _.``NullableChars.Collection.OptionArray E.I.not_equal``() = validate (NullableChars.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``NullableChars.Collection.OptionArray E.N.equals``() = + member _.``NullableChars.Collection.OptionArray E.N.equals``() = validate (NullableChars.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.OptionArray E.N.equal``() = + member _.``NullableChars.Collection.OptionArray E.N.equal``() = validate (NullableChars.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.OptionArray E.N.not_equal``() = + member _.``NullableChars.Collection.OptionArray E.N.not_equal``() = validate (NullableChars.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``NullableChars.Collection.RefArray E.I.equals``() = + member _.``NullableChars.Collection.RefArray E.I.equals``() = validate (NullableChars.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.RefArray E.I.equal``() = + member _.``NullableChars.Collection.RefArray E.I.equal``() = validate (NullableChars.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.RefArray E.I.not_equal``() = + member _.``NullableChars.Collection.RefArray E.I.not_equal``() = validate (NullableChars.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableChars.Collection.RefArray E.N.equals``() = + member _.``NullableChars.Collection.RefArray E.N.equals``() = validate (NullableChars.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.RefArray E.N.equal``() = + member _.``NullableChars.Collection.RefArray E.N.equal``() = validate (NullableChars.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.RefArray E.N.not_equal``() = + member _.``NullableChars.Collection.RefArray E.N.not_equal``() = validate (NullableChars.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableChars.Collection.RefWrapArray E.I.equals``() = + member _.``NullableChars.Collection.RefWrapArray E.I.equals``() = validate (NullableChars.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.RefWrapArray E.I.equal``() = + member _.``NullableChars.Collection.RefWrapArray E.I.equal``() = validate (NullableChars.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.RefWrapArray E.I.not_equal``() = + member _.``NullableChars.Collection.RefWrapArray E.I.not_equal``() = validate (NullableChars.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableChars.Collection.RefWrapArray E.N.equals``() = + member _.``NullableChars.Collection.RefWrapArray E.N.equals``() = validate (NullableChars.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.RefWrapArray E.N.equal``() = + member _.``NullableChars.Collection.RefWrapArray E.N.equal``() = validate (NullableChars.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.RefWrapArray E.N.not_equal``() = + member _.``NullableChars.Collection.RefWrapArray E.N.not_equal``() = validate (NullableChars.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableChars.Collection.UnionArray E.I.equals``() = + member _.``NullableChars.Collection.UnionArray E.I.equals``() = validate (NullableChars.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -34093,7 +34093,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.UnionArray E.I.equal``() = + member _.``NullableChars.Collection.UnionArray E.I.equal``() = validate (NullableChars.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -34143,7 +34143,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.UnionArray E.I.not_equal``() = + member _.``NullableChars.Collection.UnionArray E.I.not_equal``() = validate (NullableChars.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -34193,7 +34193,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.UnionArray E.N.equals``() = + member _.``NullableChars.Collection.UnionArray E.N.equals``() = validate (NullableChars.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -34243,7 +34243,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.UnionArray E.N.equal``() = + member _.``NullableChars.Collection.UnionArray E.N.equal``() = validate (NullableChars.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -34293,7 +34293,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.UnionArray E.N.not_equal``() = + member _.``NullableChars.Collection.UnionArray E.N.not_equal``() = validate (NullableChars.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -34343,7 +34343,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.UnionWrapArray E.I.equals``() = + member _.``NullableChars.Collection.UnionWrapArray E.I.equals``() = validate (NullableChars.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -34393,7 +34393,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.UnionWrapArray E.I.equal``() = + member _.``NullableChars.Collection.UnionWrapArray E.I.equal``() = validate (NullableChars.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -34443,7 +34443,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.UnionWrapArray E.I.not_equal``() = + member _.``NullableChars.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableChars.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -34493,7 +34493,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.UnionWrapArray E.N.equals``() = + member _.``NullableChars.Collection.UnionWrapArray E.N.equals``() = validate (NullableChars.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -34543,7 +34543,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.UnionWrapArray E.N.equal``() = + member _.``NullableChars.Collection.UnionWrapArray E.N.equal``() = validate (NullableChars.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -34593,7 +34593,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.UnionWrapArray E.N.not_equal``() = + member _.``NullableChars.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableChars.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -34643,79 +34643,79 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.ValueArray E.I.equals``() = + member _.``NullableChars.Collection.ValueArray E.I.equals``() = validate (NullableChars.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.ValueArray E.I.equal``() = + member _.``NullableChars.Collection.ValueArray E.I.equal``() = validate (NullableChars.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.ValueArray E.I.not_equal``() = + member _.``NullableChars.Collection.ValueArray E.I.not_equal``() = validate (NullableChars.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableChars.Collection.ValueArray E.N.equals``() = + member _.``NullableChars.Collection.ValueArray E.N.equals``() = validate (NullableChars.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.ValueArray E.N.equal``() = + member _.``NullableChars.Collection.ValueArray E.N.equal``() = validate (NullableChars.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.ValueArray E.N.not_equal``() = + member _.``NullableChars.Collection.ValueArray E.N.not_equal``() = validate (NullableChars.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableChars.Collection.ValueWrapArray E.I.equals``() = + member _.``NullableChars.Collection.ValueWrapArray E.I.equals``() = validate (NullableChars.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.ValueWrapArray E.I.equal``() = + member _.``NullableChars.Collection.ValueWrapArray E.I.equal``() = validate (NullableChars.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.ValueWrapArray E.I.not_equal``() = + member _.``NullableChars.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableChars.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableChars.Collection.ValueWrapArray E.N.equals``() = + member _.``NullableChars.Collection.ValueWrapArray E.N.equals``() = validate (NullableChars.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.ValueWrapArray E.N.equal``() = + member _.``NullableChars.Collection.ValueWrapArray E.N.equal``() = validate (NullableChars.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableChars.Collection.ValueWrapArray E.N.not_equal``() = + member _.``NullableChars.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableChars.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableChars.Collection.ArrayArray E.I.equals``() = + member _.``NullableChars.Collection.ArrayArray E.I.equals``() = validate (NullableChars.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -34724,7 +34724,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.ArrayArray E.I.equal``() = + member _.``NullableChars.Collection.ArrayArray E.I.equal``() = validate (NullableChars.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -34733,7 +34733,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.ArrayArray E.I.not_equal``() = + member _.``NullableChars.Collection.ArrayArray E.I.not_equal``() = validate (NullableChars.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -34742,7 +34742,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.ArrayArray E.N.equals``() = + member _.``NullableChars.Collection.ArrayArray E.N.equals``() = validate (NullableChars.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -34751,7 +34751,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.ArrayArray E.N.equal``() = + member _.``NullableChars.Collection.ArrayArray E.N.equal``() = validate (NullableChars.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -34760,7 +34760,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.ArrayArray E.N.not_equal``() = + member _.``NullableChars.Collection.ArrayArray E.N.not_equal``() = validate (NullableChars.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -34769,7 +34769,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.ListArray E.I.equals``() = + member _.``NullableChars.Collection.ListArray E.I.equals``() = validate (NullableChars.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -34778,7 +34778,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.ListArray E.I.equal``() = + member _.``NullableChars.Collection.ListArray E.I.equal``() = validate (NullableChars.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -34787,7 +34787,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.ListArray E.I.not_equal``() = + member _.``NullableChars.Collection.ListArray E.I.not_equal``() = validate (NullableChars.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -34796,7 +34796,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.ListArray E.N.equals``() = + member _.``NullableChars.Collection.ListArray E.N.equals``() = validate (NullableChars.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -34805,7 +34805,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.ListArray E.N.equal``() = + member _.``NullableChars.Collection.ListArray E.N.equal``() = validate (NullableChars.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -34814,7 +34814,7 @@ type GeneratedTests () = |] [] - member __.``NullableChars.Collection.ListArray E.N.not_equal``() = + member _.``NullableChars.Collection.ListArray E.N.not_equal``() = validate (NullableChars.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -34823,407 +34823,407 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.Array C.I.equals``() = + member _.``Strings.Collection.Array C.I.equals``() = validate (Strings.Collection.Array) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.Array C.I.equal``() = + member _.``Strings.Collection.Array C.I.equal``() = validate (Strings.Collection.Array) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.Array C.I.not_equal``() = + member _.``Strings.Collection.Array C.I.not_equal``() = validate (Strings.Collection.Array) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.Array C.I.compare``() = + member _.``Strings.Collection.Array C.I.compare``() = validate (Strings.Collection.Array) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 |] [] - member __.``Strings.Collection.Array C.I.less_than``() = + member _.``Strings.Collection.Array C.I.less_than``() = validate (Strings.Collection.Array) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member __.``Strings.Collection.Array C.I.less_or_equal``() = + member _.``Strings.Collection.Array C.I.less_or_equal``() = validate (Strings.Collection.Array) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.Array C.I.greater_than``() = + member _.``Strings.Collection.Array C.I.greater_than``() = validate (Strings.Collection.Array) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.Array C.I.greater_or_equal``() = + member _.``Strings.Collection.Array C.I.greater_or_equal``() = validate (Strings.Collection.Array) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member __.``Strings.Collection.Array C.N.equals``() = + member _.``Strings.Collection.Array C.N.equals``() = validate (Strings.Collection.Array) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.Array C.N.equal``() = + member _.``Strings.Collection.Array C.N.equal``() = validate (Strings.Collection.Array) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.Array C.N.not_equal``() = + member _.``Strings.Collection.Array C.N.not_equal``() = validate (Strings.Collection.Array) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.Array C.N.compare``() = + member _.``Strings.Collection.Array C.N.compare``() = validate (Strings.Collection.Array) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 |] [] - member __.``Strings.Collection.Array C.N.less_than``() = + member _.``Strings.Collection.Array C.N.less_than``() = validate (Strings.Collection.Array) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member __.``Strings.Collection.Array C.N.less_or_equal``() = + member _.``Strings.Collection.Array C.N.less_or_equal``() = validate (Strings.Collection.Array) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.Array C.N.greater_than``() = + member _.``Strings.Collection.Array C.N.greater_than``() = validate (Strings.Collection.Array) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.Array C.N.greater_or_equal``() = + member _.``Strings.Collection.Array C.N.greater_or_equal``() = validate (Strings.Collection.Array) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member __.``Strings.Collection.OptionArray C.I.equals``() = + member _.``Strings.Collection.OptionArray C.I.equals``() = validate (Strings.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.OptionArray C.I.equal``() = + member _.``Strings.Collection.OptionArray C.I.equal``() = validate (Strings.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.OptionArray C.I.not_equal``() = + member _.``Strings.Collection.OptionArray C.I.not_equal``() = validate (Strings.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.OptionArray C.I.compare``() = + member _.``Strings.Collection.OptionArray C.I.compare``() = validate (Strings.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;1;1;0;-72;-3;-97;-229;1;1;72;0;72;-25;-157;1;1;3;-72;0;-97;-229;1;1;97;25;97; 0;-132;1;1;229;157;229;132;0 |] [] - member __.``Strings.Collection.OptionArray C.I.less_than``() = + member _.``Strings.Collection.OptionArray C.I.less_than``() = validate (Strings.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;1;0;1;1;0;0;0;0;0; 0;1;0;0;0;0;0;0;0 |] [] - member __.``Strings.Collection.OptionArray C.I.less_or_equal``() = + member _.``Strings.Collection.OptionArray C.I.less_or_equal``() = validate (Strings.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;0;1;1;0;0;0;1;1;1;1;0;0;0;0;0; 1;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.OptionArray C.I.greater_than``() = + member _.``Strings.Collection.OptionArray C.I.greater_than``() = validate (Strings.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;1;0;0;1;1;1;0;0;0;0;1;1;1;1;1; 0;0;1;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.OptionArray C.I.greater_or_equal``() = + member _.``Strings.Collection.OptionArray C.I.greater_or_equal``() = validate (Strings.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;0;1;0;0;1;1;1;1;1; 1;0;1;1;1;1;1;1;1 |] [] - member __.``Strings.Collection.OptionArray C.N.equals``() = + member _.``Strings.Collection.OptionArray C.N.equals``() = validate (Strings.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.OptionArray C.N.equal``() = + member _.``Strings.Collection.OptionArray C.N.equal``() = validate (Strings.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.OptionArray C.N.not_equal``() = + member _.``Strings.Collection.OptionArray C.N.not_equal``() = validate (Strings.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.OptionArray C.N.compare``() = + member _.``Strings.Collection.OptionArray C.N.compare``() = validate (Strings.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;1;1;0;-72;-3;-97;-229;1;1;72;0;72;-25;-157;1;1;3;-72;0;-97;-229;1;1;97;25;97; 0;-132;1;1;229;157;229;132;0 |] [] - member __.``Strings.Collection.OptionArray C.N.less_than``() = + member _.``Strings.Collection.OptionArray C.N.less_than``() = validate (Strings.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;1;0;1;1;0;0;0;0;0; 0;1;0;0;0;0;0;0;0 |] [] - member __.``Strings.Collection.OptionArray C.N.less_or_equal``() = + member _.``Strings.Collection.OptionArray C.N.less_or_equal``() = validate (Strings.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;0;1;1;0;0;0;1;1;1;1;0;0;0;0;0; 1;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.OptionArray C.N.greater_than``() = + member _.``Strings.Collection.OptionArray C.N.greater_than``() = validate (Strings.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;1;0;0;1;1;1;0;0;0;0;1;1;1;1;1; 0;0;1;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.OptionArray C.N.greater_or_equal``() = + member _.``Strings.Collection.OptionArray C.N.greater_or_equal``() = validate (Strings.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;0;1;0;0;1;1;1;1;1; 1;0;1;1;1;1;1;1;1 |] [] - member __.``Strings.Collection.RefArray C.I.equals``() = + member _.``Strings.Collection.RefArray C.I.equals``() = validate (Strings.Collection.RefArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.RefArray C.I.equal``() = + member _.``Strings.Collection.RefArray C.I.equal``() = validate (Strings.Collection.RefArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.RefArray C.I.not_equal``() = + member _.``Strings.Collection.RefArray C.I.not_equal``() = validate (Strings.Collection.RefArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.RefArray C.I.compare``() = + member _.``Strings.Collection.RefArray C.I.compare``() = validate (Strings.Collection.RefArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 |] [] - member __.``Strings.Collection.RefArray C.I.less_than``() = + member _.``Strings.Collection.RefArray C.I.less_than``() = validate (Strings.Collection.RefArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member __.``Strings.Collection.RefArray C.I.less_or_equal``() = + member _.``Strings.Collection.RefArray C.I.less_or_equal``() = validate (Strings.Collection.RefArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.RefArray C.I.greater_than``() = + member _.``Strings.Collection.RefArray C.I.greater_than``() = validate (Strings.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.RefArray C.I.greater_or_equal``() = + member _.``Strings.Collection.RefArray C.I.greater_or_equal``() = validate (Strings.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member __.``Strings.Collection.RefArray C.N.equals``() = + member _.``Strings.Collection.RefArray C.N.equals``() = validate (Strings.Collection.RefArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.RefArray C.N.equal``() = + member _.``Strings.Collection.RefArray C.N.equal``() = validate (Strings.Collection.RefArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.RefArray C.N.not_equal``() = + member _.``Strings.Collection.RefArray C.N.not_equal``() = validate (Strings.Collection.RefArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.RefArray C.N.compare``() = + member _.``Strings.Collection.RefArray C.N.compare``() = validate (Strings.Collection.RefArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 |] [] - member __.``Strings.Collection.RefArray C.N.less_than``() = + member _.``Strings.Collection.RefArray C.N.less_than``() = validate (Strings.Collection.RefArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member __.``Strings.Collection.RefArray C.N.less_or_equal``() = + member _.``Strings.Collection.RefArray C.N.less_or_equal``() = validate (Strings.Collection.RefArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.RefArray C.N.greater_than``() = + member _.``Strings.Collection.RefArray C.N.greater_than``() = validate (Strings.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.RefArray C.N.greater_or_equal``() = + member _.``Strings.Collection.RefArray C.N.greater_or_equal``() = validate (Strings.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member __.``Strings.Collection.RefWrapArray C.I.equals``() = + member _.``Strings.Collection.RefWrapArray C.I.equals``() = validate (Strings.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.RefWrapArray C.I.equal``() = + member _.``Strings.Collection.RefWrapArray C.I.equal``() = validate (Strings.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.RefWrapArray C.I.not_equal``() = + member _.``Strings.Collection.RefWrapArray C.I.not_equal``() = validate (Strings.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.RefWrapArray C.I.compare``() = + member _.``Strings.Collection.RefWrapArray C.I.compare``() = validate (Strings.Collection.RefWrapArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 |] [] - member __.``Strings.Collection.RefWrapArray C.I.less_than``() = + member _.``Strings.Collection.RefWrapArray C.I.less_than``() = validate (Strings.Collection.RefWrapArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member __.``Strings.Collection.RefWrapArray C.I.less_or_equal``() = + member _.``Strings.Collection.RefWrapArray C.I.less_or_equal``() = validate (Strings.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.RefWrapArray C.I.greater_than``() = + member _.``Strings.Collection.RefWrapArray C.I.greater_than``() = validate (Strings.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.RefWrapArray C.I.greater_or_equal``() = + member _.``Strings.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Strings.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member __.``Strings.Collection.RefWrapArray C.N.equals``() = + member _.``Strings.Collection.RefWrapArray C.N.equals``() = validate (Strings.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.RefWrapArray C.N.equal``() = + member _.``Strings.Collection.RefWrapArray C.N.equal``() = validate (Strings.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.RefWrapArray C.N.not_equal``() = + member _.``Strings.Collection.RefWrapArray C.N.not_equal``() = validate (Strings.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.RefWrapArray C.N.compare``() = + member _.``Strings.Collection.RefWrapArray C.N.compare``() = validate (Strings.Collection.RefWrapArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 |] [] - member __.``Strings.Collection.RefWrapArray C.N.less_than``() = + member _.``Strings.Collection.RefWrapArray C.N.less_than``() = validate (Strings.Collection.RefWrapArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member __.``Strings.Collection.RefWrapArray C.N.less_or_equal``() = + member _.``Strings.Collection.RefWrapArray C.N.less_or_equal``() = validate (Strings.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.RefWrapArray C.N.greater_than``() = + member _.``Strings.Collection.RefWrapArray C.N.greater_than``() = validate (Strings.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.RefWrapArray C.N.greater_or_equal``() = + member _.``Strings.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Strings.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member __.``Strings.Collection.UnionArray C.I.equals``() = + member _.``Strings.Collection.UnionArray C.I.equals``() = validate (Strings.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -35273,7 +35273,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionArray C.I.equal``() = + member _.``Strings.Collection.UnionArray C.I.equal``() = validate (Strings.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -35323,7 +35323,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionArray C.I.not_equal``() = + member _.``Strings.Collection.UnionArray C.I.not_equal``() = validate (Strings.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -35373,7 +35373,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionArray C.I.compare``() = + member _.``Strings.Collection.UnionArray C.I.compare``() = validate (Strings.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -35423,7 +35423,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionArray C.I.less_than``() = + member _.``Strings.Collection.UnionArray C.I.less_than``() = validate (Strings.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -35473,7 +35473,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionArray C.I.less_or_equal``() = + member _.``Strings.Collection.UnionArray C.I.less_or_equal``() = validate (Strings.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -35523,7 +35523,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionArray C.I.greater_than``() = + member _.``Strings.Collection.UnionArray C.I.greater_than``() = validate (Strings.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -35573,7 +35573,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionArray C.I.greater_or_equal``() = + member _.``Strings.Collection.UnionArray C.I.greater_or_equal``() = validate (Strings.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -35623,7 +35623,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionArray C.N.equals``() = + member _.``Strings.Collection.UnionArray C.N.equals``() = validate (Strings.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -35673,7 +35673,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionArray C.N.equal``() = + member _.``Strings.Collection.UnionArray C.N.equal``() = validate (Strings.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -35723,7 +35723,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionArray C.N.not_equal``() = + member _.``Strings.Collection.UnionArray C.N.not_equal``() = validate (Strings.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -35773,7 +35773,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionArray C.N.compare``() = + member _.``Strings.Collection.UnionArray C.N.compare``() = validate (Strings.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -35823,7 +35823,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionArray C.N.less_than``() = + member _.``Strings.Collection.UnionArray C.N.less_than``() = validate (Strings.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -35873,7 +35873,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionArray C.N.less_or_equal``() = + member _.``Strings.Collection.UnionArray C.N.less_or_equal``() = validate (Strings.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -35923,7 +35923,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionArray C.N.greater_than``() = + member _.``Strings.Collection.UnionArray C.N.greater_than``() = validate (Strings.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -35973,7 +35973,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionArray C.N.greater_or_equal``() = + member _.``Strings.Collection.UnionArray C.N.greater_or_equal``() = validate (Strings.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -36023,7 +36023,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionWrapArray C.I.equals``() = + member _.``Strings.Collection.UnionWrapArray C.I.equals``() = validate (Strings.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -36073,7 +36073,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionWrapArray C.I.equal``() = + member _.``Strings.Collection.UnionWrapArray C.I.equal``() = validate (Strings.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -36123,7 +36123,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionWrapArray C.I.not_equal``() = + member _.``Strings.Collection.UnionWrapArray C.I.not_equal``() = validate (Strings.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -36173,7 +36173,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionWrapArray C.I.compare``() = + member _.``Strings.Collection.UnionWrapArray C.I.compare``() = validate (Strings.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -36223,7 +36223,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionWrapArray C.I.less_than``() = + member _.``Strings.Collection.UnionWrapArray C.I.less_than``() = validate (Strings.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -36273,7 +36273,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionWrapArray C.I.less_or_equal``() = + member _.``Strings.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Strings.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -36323,7 +36323,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionWrapArray C.I.greater_than``() = + member _.``Strings.Collection.UnionWrapArray C.I.greater_than``() = validate (Strings.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -36373,7 +36373,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionWrapArray C.I.greater_or_equal``() = + member _.``Strings.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Strings.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -36423,7 +36423,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionWrapArray C.N.equals``() = + member _.``Strings.Collection.UnionWrapArray C.N.equals``() = validate (Strings.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -36473,7 +36473,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionWrapArray C.N.equal``() = + member _.``Strings.Collection.UnionWrapArray C.N.equal``() = validate (Strings.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -36523,7 +36523,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionWrapArray C.N.not_equal``() = + member _.``Strings.Collection.UnionWrapArray C.N.not_equal``() = validate (Strings.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -36573,7 +36573,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionWrapArray C.N.compare``() = + member _.``Strings.Collection.UnionWrapArray C.N.compare``() = validate (Strings.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -36623,7 +36623,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionWrapArray C.N.less_than``() = + member _.``Strings.Collection.UnionWrapArray C.N.less_than``() = validate (Strings.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -36673,7 +36673,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionWrapArray C.N.less_or_equal``() = + member _.``Strings.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Strings.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -36723,7 +36723,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionWrapArray C.N.greater_than``() = + member _.``Strings.Collection.UnionWrapArray C.N.greater_than``() = validate (Strings.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -36773,7 +36773,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.UnionWrapArray C.N.greater_or_equal``() = + member _.``Strings.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Strings.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -36823,199 +36823,199 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ValueArray C.I.equals``() = + member _.``Strings.Collection.ValueArray C.I.equals``() = validate (Strings.Collection.ValueArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.ValueArray C.I.equal``() = + member _.``Strings.Collection.ValueArray C.I.equal``() = validate (Strings.Collection.ValueArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.ValueArray C.I.not_equal``() = + member _.``Strings.Collection.ValueArray C.I.not_equal``() = validate (Strings.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.ValueArray C.I.compare``() = + member _.``Strings.Collection.ValueArray C.I.compare``() = validate (Strings.Collection.ValueArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 |] [] - member __.``Strings.Collection.ValueArray C.I.less_than``() = + member _.``Strings.Collection.ValueArray C.I.less_than``() = validate (Strings.Collection.ValueArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member __.``Strings.Collection.ValueArray C.I.less_or_equal``() = + member _.``Strings.Collection.ValueArray C.I.less_or_equal``() = validate (Strings.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.ValueArray C.I.greater_than``() = + member _.``Strings.Collection.ValueArray C.I.greater_than``() = validate (Strings.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.ValueArray C.I.greater_or_equal``() = + member _.``Strings.Collection.ValueArray C.I.greater_or_equal``() = validate (Strings.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member __.``Strings.Collection.ValueArray C.N.equals``() = + member _.``Strings.Collection.ValueArray C.N.equals``() = validate (Strings.Collection.ValueArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.ValueArray C.N.equal``() = + member _.``Strings.Collection.ValueArray C.N.equal``() = validate (Strings.Collection.ValueArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.ValueArray C.N.not_equal``() = + member _.``Strings.Collection.ValueArray C.N.not_equal``() = validate (Strings.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.ValueArray C.N.compare``() = + member _.``Strings.Collection.ValueArray C.N.compare``() = validate (Strings.Collection.ValueArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 |] [] - member __.``Strings.Collection.ValueArray C.N.less_than``() = + member _.``Strings.Collection.ValueArray C.N.less_than``() = validate (Strings.Collection.ValueArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member __.``Strings.Collection.ValueArray C.N.less_or_equal``() = + member _.``Strings.Collection.ValueArray C.N.less_or_equal``() = validate (Strings.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.ValueArray C.N.greater_than``() = + member _.``Strings.Collection.ValueArray C.N.greater_than``() = validate (Strings.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.ValueArray C.N.greater_or_equal``() = + member _.``Strings.Collection.ValueArray C.N.greater_or_equal``() = validate (Strings.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member __.``Strings.Collection.ValueWrapArray C.I.equals``() = + member _.``Strings.Collection.ValueWrapArray C.I.equals``() = validate (Strings.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.ValueWrapArray C.I.equal``() = + member _.``Strings.Collection.ValueWrapArray C.I.equal``() = validate (Strings.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.ValueWrapArray C.I.not_equal``() = + member _.``Strings.Collection.ValueWrapArray C.I.not_equal``() = validate (Strings.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.ValueWrapArray C.I.compare``() = + member _.``Strings.Collection.ValueWrapArray C.I.compare``() = validate (Strings.Collection.ValueWrapArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 |] [] - member __.``Strings.Collection.ValueWrapArray C.I.less_than``() = + member _.``Strings.Collection.ValueWrapArray C.I.less_than``() = validate (Strings.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member __.``Strings.Collection.ValueWrapArray C.I.less_or_equal``() = + member _.``Strings.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Strings.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.ValueWrapArray C.I.greater_than``() = + member _.``Strings.Collection.ValueWrapArray C.I.greater_than``() = validate (Strings.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.ValueWrapArray C.I.greater_or_equal``() = + member _.``Strings.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Strings.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member __.``Strings.Collection.ValueWrapArray C.N.equals``() = + member _.``Strings.Collection.ValueWrapArray C.N.equals``() = validate (Strings.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.ValueWrapArray C.N.equal``() = + member _.``Strings.Collection.ValueWrapArray C.N.equal``() = validate (Strings.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.ValueWrapArray C.N.not_equal``() = + member _.``Strings.Collection.ValueWrapArray C.N.not_equal``() = validate (Strings.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.ValueWrapArray C.N.compare``() = + member _.``Strings.Collection.ValueWrapArray C.N.compare``() = validate (Strings.Collection.ValueWrapArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;72;0;72;-25;-157;1;3;-72;0;-97;-229;1;97;25;97;0;-132;1;229;157;229;132;0 |] [] - member __.``Strings.Collection.ValueWrapArray C.N.less_than``() = + member _.``Strings.Collection.ValueWrapArray C.N.less_than``() = validate (Strings.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0 |] [] - member __.``Strings.Collection.ValueWrapArray C.N.less_or_equal``() = + member _.``Strings.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Strings.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1 |] [] - member __.``Strings.Collection.ValueWrapArray C.N.greater_than``() = + member _.``Strings.Collection.ValueWrapArray C.N.greater_than``() = validate (Strings.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0 |] [] - member __.``Strings.Collection.ValueWrapArray C.N.greater_or_equal``() = + member _.``Strings.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Strings.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1 |] [] - member __.``Strings.Collection.ArrayArray C.I.equals``() = + member _.``Strings.Collection.ArrayArray C.I.equals``() = validate (Strings.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37024,7 +37024,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray C.I.equal``() = + member _.``Strings.Collection.ArrayArray C.I.equal``() = validate (Strings.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37033,7 +37033,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray C.I.not_equal``() = + member _.``Strings.Collection.ArrayArray C.I.not_equal``() = validate (Strings.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -37042,7 +37042,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray C.I.compare``() = + member _.``Strings.Collection.ArrayArray C.I.compare``() = validate (Strings.Collection.ArrayArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;-1;-1;-1;-1;-1;-1;1;72;0;72;-25;-157;-1;-1;-1;-1;-1;-1;1;3;-72;0; -97;-229;-1;-1;-1;-1;-1;-1;1;97;25;97;0;-132;-1;-1;-1;-1;-1;-1;1;229;157;229;132;0;-1;-1;-1;-1;-1;-1;1;1;1;1;1;1;0;-1; @@ -37051,7 +37051,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray C.I.less_than``() = + member _.``Strings.Collection.ArrayArray C.I.less_than``() = validate (Strings.Collection.ArrayArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0; 1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;0;0;0;1; @@ -37060,7 +37060,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray C.I.less_or_equal``() = + member _.``Strings.Collection.ArrayArray C.I.less_or_equal``() = validate (Strings.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;1;1;1;1;1;1;1;1;0;0;1;1; 1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;1; @@ -37069,7 +37069,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray C.I.greater_than``() = + member _.``Strings.Collection.ArrayArray C.I.greater_than``() = validate (Strings.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;0;0;0;0;0;0;0;0;1;1;0;0; 0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;0; @@ -37078,7 +37078,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray C.I.greater_or_equal``() = + member _.``Strings.Collection.ArrayArray C.I.greater_or_equal``() = validate (Strings.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1; 0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;1;1;1;0; @@ -37087,7 +37087,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray C.N.equals``() = + member _.``Strings.Collection.ArrayArray C.N.equals``() = validate (Strings.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37096,7 +37096,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray C.N.equal``() = + member _.``Strings.Collection.ArrayArray C.N.equal``() = validate (Strings.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37105,7 +37105,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray C.N.not_equal``() = + member _.``Strings.Collection.ArrayArray C.N.not_equal``() = validate (Strings.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -37114,7 +37114,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray C.N.compare``() = + member _.``Strings.Collection.ArrayArray C.N.compare``() = validate (Strings.Collection.ArrayArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;-1;-1;-1;-1;-1;-1;1;72;0;72;-25;-157;-1;-1;-1;-1;-1;-1;1;3;-72;0; -97;-229;-1;-1;-1;-1;-1;-1;1;97;25;97;0;-132;-1;-1;-1;-1;-1;-1;1;229;157;229;132;0;-1;-1;-1;-1;-1;-1;1;1;1;1;1;1;0;-1; @@ -37123,7 +37123,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray C.N.less_than``() = + member _.``Strings.Collection.ArrayArray C.N.less_than``() = validate (Strings.Collection.ArrayArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0; 1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;0;0;0;1; @@ -37132,7 +37132,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray C.N.less_or_equal``() = + member _.``Strings.Collection.ArrayArray C.N.less_or_equal``() = validate (Strings.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;0;1;1;1;1;1;1;1;1;0;0;1;1; 1;1;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;1;0;0;0;0;0;0;1;1; @@ -37141,7 +37141,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray C.N.greater_than``() = + member _.``Strings.Collection.ArrayArray C.N.greater_than``() = validate (Strings.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;1;0;0;0;0;0;0;0;0;1;1;0;0; 0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;0; @@ -37150,7 +37150,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray C.N.greater_or_equal``() = + member _.``Strings.Collection.ArrayArray C.N.greater_or_equal``() = validate (Strings.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1; 0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;1;1;1;0; @@ -37159,7 +37159,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ListArray C.I.equals``() = + member _.``Strings.Collection.ListArray C.I.equals``() = validate (Strings.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37168,7 +37168,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ListArray C.I.equal``() = + member _.``Strings.Collection.ListArray C.I.equal``() = validate (Strings.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37177,7 +37177,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ListArray C.I.not_equal``() = + member _.``Strings.Collection.ListArray C.I.not_equal``() = validate (Strings.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -37186,7 +37186,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ListArray C.I.compare``() = + member _.``Strings.Collection.ListArray C.I.compare``() = validate (Strings.Collection.ListArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;-1;-72;-3;-97;-229;1;72;0;72;-25;-157;1;72;-1;72;-25;-157;1;3;-72;0; -97;-229;1;3;-72;-1;-97;-229;1;97;25;97;0;-132;1;97;25;97;-1;-132;1;229;157;229;132;0;1;229;157;229;132;-1;1;-1;-1;-1;-1;-1;0;-1; @@ -37195,7 +37195,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ListArray C.I.less_than``() = + member _.``Strings.Collection.ListArray C.I.less_than``() = validate (Strings.Collection.ListArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;1;0; 1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;0;1; @@ -37204,7 +37204,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ListArray C.I.less_or_equal``() = + member _.``Strings.Collection.ListArray C.I.less_or_equal``() = validate (Strings.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;1;1;0;0;1;1; 1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;1;1;1;1;1;1; @@ -37213,7 +37213,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ListArray C.I.greater_than``() = + member _.``Strings.Collection.ListArray C.I.greater_than``() = validate (Strings.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;0;0;1;1;0;0; 0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;0;0;0;0;0;0; @@ -37222,7 +37222,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ListArray C.I.greater_or_equal``() = + member _.``Strings.Collection.ListArray C.I.greater_or_equal``() = validate (Strings.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;0;1; 0;0;1;1;0;0;0;0;1;1;1;1;1;0;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;1;0; @@ -37231,7 +37231,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ListArray C.N.equals``() = + member _.``Strings.Collection.ListArray C.N.equals``() = validate (Strings.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37240,7 +37240,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ListArray C.N.equal``() = + member _.``Strings.Collection.ListArray C.N.equal``() = validate (Strings.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37249,7 +37249,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ListArray C.N.not_equal``() = + member _.``Strings.Collection.ListArray C.N.not_equal``() = validate (Strings.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -37258,7 +37258,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ListArray C.N.compare``() = + member _.``Strings.Collection.ListArray C.N.compare``() = validate (Strings.Collection.ListArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;-1;-72;-3;-97;-229;1;72;0;72;-25;-157;1;72;-1;72;-25;-157;1;3;-72;0; -97;-229;1;3;-72;-1;-97;-229;1;97;25;97;0;-132;1;97;25;97;-1;-132;1;229;157;229;132;0;1;229;157;229;132;-1;1;-1;-1;-1;-1;-1;0;-1; @@ -37267,7 +37267,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ListArray C.N.less_than``() = + member _.``Strings.Collection.ListArray C.N.less_than``() = validate (Strings.Collection.ListArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;0;1;0;1;1;0;0;1;0; 1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;0;1; @@ -37276,7 +37276,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ListArray C.N.less_or_equal``() = + member _.``Strings.Collection.ListArray C.N.less_or_equal``() = validate (Strings.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;1;0;1;1;0;0;1;1; 1;1;0;0;1;1;1;1;0;0;0;0;1;1;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;1;0;1;1;1;1;1;1;1; @@ -37285,7 +37285,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ListArray C.N.greater_than``() = + member _.``Strings.Collection.ListArray C.N.greater_than``() = validate (Strings.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;0;1;0;0;1;1;0;0; 0;0;1;1;0;0;0;0;1;1;1;1;0;0;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;0;1;0;0;0;0;0;0;0; @@ -37294,7 +37294,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ListArray C.N.greater_or_equal``() = + member _.``Strings.Collection.ListArray C.N.greater_or_equal``() = validate (Strings.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;1;0;1;0;0;1;1;0;1; 0;0;1;1;0;0;0;0;1;1;1;1;1;0;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;1;0; @@ -37303,7 +37303,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37312,7 +37312,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37321,7 +37321,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -37330,7 +37330,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;-1;-3;-3;-97;1;1;72;0;72;-25;-157;1;72;72;72;-25;1;1;3;-72;0; -97;-229;1;3;-1;-1;-97;1;1;97;25;97;0;-132;1;97;97;97;-1;1;1;229;157;229;132;0;1;229;229;229;132;1;1;-1;-1;-1;-1;-1;0;-1; @@ -37339,7 +37339,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;1;0; 1;1;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;1; @@ -37348,7 +37348,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;1;0;0;0;1;1; 1;1;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1; @@ -37357,7 +37357,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;0;1;1;1;1;0;1;1;1;0;0; 0;0;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0; @@ -37366,7 +37366,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;0;1; 0;0;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0; @@ -37375,7 +37375,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37384,7 +37384,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -37393,7 +37393,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -37402,7 +37402,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-72;-3;-97;-229;1;-1;-3;-3;-97;1;1;72;0;72;-25;-157;1;72;72;72;-25;1;1;3;-72;0; -97;-229;1;3;-1;-1;-97;1;1;97;25;97;0;-132;1;97;97;97;-1;1;1;229;157;229;132;0;1;229;229;229;132;1;1;-1;-1;-1;-1;-1;0;-1; @@ -37411,7 +37411,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;1;0; 1;1;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;1; @@ -37420,7 +37420,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;1;0;0;0;1;1; 1;1;0;0;1;1;1;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1; @@ -37429,7 +37429,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;0;1;1;1;1;0;1;1;1;0;0; 0;0;1;1;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0; @@ -37438,7 +37438,7 @@ type GeneratedTests () = |] [] - member __.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member _.``Strings.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Strings.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;0;0;1;1;1;1;0;1;1;1;0;1; 0;0;1;1;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0; @@ -37447,391 +37447,391 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.Array C.I.equals``() = + member _.``Decimals.Collection.Array C.I.equals``() = validate (Decimals.Collection.Array) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.Array C.I.equal``() = + member _.``Decimals.Collection.Array C.I.equal``() = validate (Decimals.Collection.Array) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.Array C.I.not_equal``() = + member _.``Decimals.Collection.Array C.I.not_equal``() = validate (Decimals.Collection.Array) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Decimals.Collection.Array C.I.compare``() = + member _.``Decimals.Collection.Array C.I.compare``() = validate (Decimals.Collection.Array) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Decimals.Collection.Array C.I.less_than``() = + member _.``Decimals.Collection.Array C.I.less_than``() = validate (Decimals.Collection.Array) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Decimals.Collection.Array C.I.less_or_equal``() = + member _.``Decimals.Collection.Array C.I.less_or_equal``() = validate (Decimals.Collection.Array) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Decimals.Collection.Array C.I.greater_than``() = + member _.``Decimals.Collection.Array C.I.greater_than``() = validate (Decimals.Collection.Array) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Decimals.Collection.Array C.I.greater_or_equal``() = + member _.``Decimals.Collection.Array C.I.greater_or_equal``() = validate (Decimals.Collection.Array) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Decimals.Collection.Array C.N.equals``() = + member _.``Decimals.Collection.Array C.N.equals``() = validate (Decimals.Collection.Array) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.Array C.N.equal``() = + member _.``Decimals.Collection.Array C.N.equal``() = validate (Decimals.Collection.Array) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.Array C.N.not_equal``() = + member _.``Decimals.Collection.Array C.N.not_equal``() = validate (Decimals.Collection.Array) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Decimals.Collection.Array C.N.compare``() = + member _.``Decimals.Collection.Array C.N.compare``() = validate (Decimals.Collection.Array) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Decimals.Collection.Array C.N.less_than``() = + member _.``Decimals.Collection.Array C.N.less_than``() = validate (Decimals.Collection.Array) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Decimals.Collection.Array C.N.less_or_equal``() = + member _.``Decimals.Collection.Array C.N.less_or_equal``() = validate (Decimals.Collection.Array) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Decimals.Collection.Array C.N.greater_than``() = + member _.``Decimals.Collection.Array C.N.greater_than``() = validate (Decimals.Collection.Array) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Decimals.Collection.Array C.N.greater_or_equal``() = + member _.``Decimals.Collection.Array C.N.greater_or_equal``() = validate (Decimals.Collection.Array) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Decimals.Collection.OptionArray C.I.equals``() = + member _.``Decimals.Collection.OptionArray C.I.equals``() = validate (Decimals.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.OptionArray C.I.equal``() = + member _.``Decimals.Collection.OptionArray C.I.equal``() = validate (Decimals.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.OptionArray C.I.not_equal``() = + member _.``Decimals.Collection.OptionArray C.I.not_equal``() = validate (Decimals.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Decimals.Collection.OptionArray C.I.compare``() = + member _.``Decimals.Collection.OptionArray C.I.compare``() = validate (Decimals.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;1;1;1;1;1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 |] [] - member __.``Decimals.Collection.OptionArray C.I.less_than``() = + member _.``Decimals.Collection.OptionArray C.I.less_than``() = validate (Decimals.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member __.``Decimals.Collection.OptionArray C.I.less_or_equal``() = + member _.``Decimals.Collection.OptionArray C.I.less_or_equal``() = validate (Decimals.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member __.``Decimals.Collection.OptionArray C.I.greater_than``() = + member _.``Decimals.Collection.OptionArray C.I.greater_than``() = validate (Decimals.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member __.``Decimals.Collection.OptionArray C.I.greater_or_equal``() = + member _.``Decimals.Collection.OptionArray C.I.greater_or_equal``() = validate (Decimals.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member __.``Decimals.Collection.OptionArray C.N.equals``() = + member _.``Decimals.Collection.OptionArray C.N.equals``() = validate (Decimals.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.OptionArray C.N.equal``() = + member _.``Decimals.Collection.OptionArray C.N.equal``() = validate (Decimals.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.OptionArray C.N.not_equal``() = + member _.``Decimals.Collection.OptionArray C.N.not_equal``() = validate (Decimals.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``Decimals.Collection.OptionArray C.N.compare``() = + member _.``Decimals.Collection.OptionArray C.N.compare``() = validate (Decimals.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;0;1;1;1;1;1;-1;0;-1;-1;1;1;-1;1;0;-1;1;1;-1;1;1;0 |] [] - member __.``Decimals.Collection.OptionArray C.N.less_than``() = + member _.``Decimals.Collection.OptionArray C.N.less_than``() = validate (Decimals.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;1;0;1;1;0;0;1;0;0;1;0;0;1;0;0;0 |] [] - member __.``Decimals.Collection.OptionArray C.N.less_or_equal``() = + member _.``Decimals.Collection.OptionArray C.N.less_or_equal``() = validate (Decimals.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;1;1;1;1;0;0;1;0;0;0;0;0;1;1;1;1;0;0;1;0;1;1;0;0;1;0;0;1 |] [] - member __.``Decimals.Collection.OptionArray C.N.greater_than``() = + member _.``Decimals.Collection.OptionArray C.N.greater_than``() = validate (Decimals.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;1;1;1;1;1;0;0;0;0;1;1;0;1;0;0;1;1;0;1;1;0 |] [] - member __.``Decimals.Collection.OptionArray C.N.greater_or_equal``() = + member _.``Decimals.Collection.OptionArray C.N.greater_or_equal``() = validate (Decimals.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;0;0;0;0;1;1;1;1;1;1;1;1;0;1;0;0;1;1;0;1;1;0;1;1;0;1;1;1 |] [] - member __.``Decimals.Collection.RefArray C.I.equals``() = + member _.``Decimals.Collection.RefArray C.I.equals``() = validate (Decimals.Collection.RefArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.RefArray C.I.equal``() = + member _.``Decimals.Collection.RefArray C.I.equal``() = validate (Decimals.Collection.RefArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.RefArray C.I.not_equal``() = + member _.``Decimals.Collection.RefArray C.I.not_equal``() = validate (Decimals.Collection.RefArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Decimals.Collection.RefArray C.I.compare``() = + member _.``Decimals.Collection.RefArray C.I.compare``() = validate (Decimals.Collection.RefArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Decimals.Collection.RefArray C.I.less_than``() = + member _.``Decimals.Collection.RefArray C.I.less_than``() = validate (Decimals.Collection.RefArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Decimals.Collection.RefArray C.I.less_or_equal``() = + member _.``Decimals.Collection.RefArray C.I.less_or_equal``() = validate (Decimals.Collection.RefArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Decimals.Collection.RefArray C.I.greater_than``() = + member _.``Decimals.Collection.RefArray C.I.greater_than``() = validate (Decimals.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Decimals.Collection.RefArray C.I.greater_or_equal``() = + member _.``Decimals.Collection.RefArray C.I.greater_or_equal``() = validate (Decimals.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Decimals.Collection.RefArray C.N.equals``() = + member _.``Decimals.Collection.RefArray C.N.equals``() = validate (Decimals.Collection.RefArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.RefArray C.N.equal``() = + member _.``Decimals.Collection.RefArray C.N.equal``() = validate (Decimals.Collection.RefArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.RefArray C.N.not_equal``() = + member _.``Decimals.Collection.RefArray C.N.not_equal``() = validate (Decimals.Collection.RefArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Decimals.Collection.RefArray C.N.compare``() = + member _.``Decimals.Collection.RefArray C.N.compare``() = validate (Decimals.Collection.RefArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Decimals.Collection.RefArray C.N.less_than``() = + member _.``Decimals.Collection.RefArray C.N.less_than``() = validate (Decimals.Collection.RefArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Decimals.Collection.RefArray C.N.less_or_equal``() = + member _.``Decimals.Collection.RefArray C.N.less_or_equal``() = validate (Decimals.Collection.RefArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Decimals.Collection.RefArray C.N.greater_than``() = + member _.``Decimals.Collection.RefArray C.N.greater_than``() = validate (Decimals.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Decimals.Collection.RefArray C.N.greater_or_equal``() = + member _.``Decimals.Collection.RefArray C.N.greater_or_equal``() = validate (Decimals.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Decimals.Collection.RefWrapArray C.I.equals``() = + member _.``Decimals.Collection.RefWrapArray C.I.equals``() = validate (Decimals.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.RefWrapArray C.I.equal``() = + member _.``Decimals.Collection.RefWrapArray C.I.equal``() = validate (Decimals.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.RefWrapArray C.I.not_equal``() = + member _.``Decimals.Collection.RefWrapArray C.I.not_equal``() = validate (Decimals.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Decimals.Collection.RefWrapArray C.I.compare``() = + member _.``Decimals.Collection.RefWrapArray C.I.compare``() = validate (Decimals.Collection.RefWrapArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Decimals.Collection.RefWrapArray C.I.less_than``() = + member _.``Decimals.Collection.RefWrapArray C.I.less_than``() = validate (Decimals.Collection.RefWrapArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Decimals.Collection.RefWrapArray C.I.less_or_equal``() = + member _.``Decimals.Collection.RefWrapArray C.I.less_or_equal``() = validate (Decimals.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Decimals.Collection.RefWrapArray C.I.greater_than``() = + member _.``Decimals.Collection.RefWrapArray C.I.greater_than``() = validate (Decimals.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Decimals.Collection.RefWrapArray C.I.greater_or_equal``() = + member _.``Decimals.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Decimals.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Decimals.Collection.RefWrapArray C.N.equals``() = + member _.``Decimals.Collection.RefWrapArray C.N.equals``() = validate (Decimals.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.RefWrapArray C.N.equal``() = + member _.``Decimals.Collection.RefWrapArray C.N.equal``() = validate (Decimals.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.RefWrapArray C.N.not_equal``() = + member _.``Decimals.Collection.RefWrapArray C.N.not_equal``() = validate (Decimals.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Decimals.Collection.RefWrapArray C.N.compare``() = + member _.``Decimals.Collection.RefWrapArray C.N.compare``() = validate (Decimals.Collection.RefWrapArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Decimals.Collection.RefWrapArray C.N.less_than``() = + member _.``Decimals.Collection.RefWrapArray C.N.less_than``() = validate (Decimals.Collection.RefWrapArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Decimals.Collection.RefWrapArray C.N.less_or_equal``() = + member _.``Decimals.Collection.RefWrapArray C.N.less_or_equal``() = validate (Decimals.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Decimals.Collection.RefWrapArray C.N.greater_than``() = + member _.``Decimals.Collection.RefWrapArray C.N.greater_than``() = validate (Decimals.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Decimals.Collection.RefWrapArray C.N.greater_or_equal``() = + member _.``Decimals.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Decimals.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Decimals.Collection.UnionArray C.I.equals``() = + member _.``Decimals.Collection.UnionArray C.I.equals``() = validate (Decimals.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -37867,7 +37867,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionArray C.I.equal``() = + member _.``Decimals.Collection.UnionArray C.I.equal``() = validate (Decimals.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -37903,7 +37903,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionArray C.I.not_equal``() = + member _.``Decimals.Collection.UnionArray C.I.not_equal``() = validate (Decimals.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -37939,7 +37939,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionArray C.I.compare``() = + member _.``Decimals.Collection.UnionArray C.I.compare``() = validate (Decimals.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -37975,7 +37975,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionArray C.I.less_than``() = + member _.``Decimals.Collection.UnionArray C.I.less_than``() = validate (Decimals.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -38011,7 +38011,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionArray C.I.less_or_equal``() = + member _.``Decimals.Collection.UnionArray C.I.less_or_equal``() = validate (Decimals.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -38047,7 +38047,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionArray C.I.greater_than``() = + member _.``Decimals.Collection.UnionArray C.I.greater_than``() = validate (Decimals.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -38083,7 +38083,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionArray C.I.greater_or_equal``() = + member _.``Decimals.Collection.UnionArray C.I.greater_or_equal``() = validate (Decimals.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -38119,7 +38119,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionArray C.N.equals``() = + member _.``Decimals.Collection.UnionArray C.N.equals``() = validate (Decimals.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -38155,7 +38155,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionArray C.N.equal``() = + member _.``Decimals.Collection.UnionArray C.N.equal``() = validate (Decimals.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -38191,7 +38191,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionArray C.N.not_equal``() = + member _.``Decimals.Collection.UnionArray C.N.not_equal``() = validate (Decimals.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -38227,7 +38227,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionArray C.N.compare``() = + member _.``Decimals.Collection.UnionArray C.N.compare``() = validate (Decimals.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -38263,7 +38263,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionArray C.N.less_than``() = + member _.``Decimals.Collection.UnionArray C.N.less_than``() = validate (Decimals.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -38299,7 +38299,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionArray C.N.less_or_equal``() = + member _.``Decimals.Collection.UnionArray C.N.less_or_equal``() = validate (Decimals.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -38335,7 +38335,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionArray C.N.greater_than``() = + member _.``Decimals.Collection.UnionArray C.N.greater_than``() = validate (Decimals.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -38371,7 +38371,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionArray C.N.greater_or_equal``() = + member _.``Decimals.Collection.UnionArray C.N.greater_or_equal``() = validate (Decimals.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -38407,7 +38407,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionWrapArray C.I.equals``() = + member _.``Decimals.Collection.UnionWrapArray C.I.equals``() = validate (Decimals.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -38443,7 +38443,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionWrapArray C.I.equal``() = + member _.``Decimals.Collection.UnionWrapArray C.I.equal``() = validate (Decimals.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -38479,7 +38479,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionWrapArray C.I.not_equal``() = + member _.``Decimals.Collection.UnionWrapArray C.I.not_equal``() = validate (Decimals.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -38515,7 +38515,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionWrapArray C.I.compare``() = + member _.``Decimals.Collection.UnionWrapArray C.I.compare``() = validate (Decimals.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -38551,7 +38551,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionWrapArray C.I.less_than``() = + member _.``Decimals.Collection.UnionWrapArray C.I.less_than``() = validate (Decimals.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -38587,7 +38587,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionWrapArray C.I.less_or_equal``() = + member _.``Decimals.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Decimals.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -38623,7 +38623,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionWrapArray C.I.greater_than``() = + member _.``Decimals.Collection.UnionWrapArray C.I.greater_than``() = validate (Decimals.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -38659,7 +38659,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionWrapArray C.I.greater_or_equal``() = + member _.``Decimals.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Decimals.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -38695,7 +38695,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionWrapArray C.N.equals``() = + member _.``Decimals.Collection.UnionWrapArray C.N.equals``() = validate (Decimals.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -38731,7 +38731,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionWrapArray C.N.equal``() = + member _.``Decimals.Collection.UnionWrapArray C.N.equal``() = validate (Decimals.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -38767,7 +38767,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionWrapArray C.N.not_equal``() = + member _.``Decimals.Collection.UnionWrapArray C.N.not_equal``() = validate (Decimals.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -38803,7 +38803,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionWrapArray C.N.compare``() = + member _.``Decimals.Collection.UnionWrapArray C.N.compare``() = validate (Decimals.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1; @@ -38839,7 +38839,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionWrapArray C.N.less_than``() = + member _.``Decimals.Collection.UnionWrapArray C.N.less_than``() = validate (Decimals.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;1; @@ -38875,7 +38875,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionWrapArray C.N.less_or_equal``() = + member _.``Decimals.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Decimals.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1; @@ -38911,7 +38911,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionWrapArray C.N.greater_than``() = + member _.``Decimals.Collection.UnionWrapArray C.N.greater_than``() = validate (Decimals.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -38947,7 +38947,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.UnionWrapArray C.N.greater_or_equal``() = + member _.``Decimals.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Decimals.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;0; @@ -38983,199 +38983,199 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ValueArray C.I.equals``() = + member _.``Decimals.Collection.ValueArray C.I.equals``() = validate (Decimals.Collection.ValueArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.ValueArray C.I.equal``() = + member _.``Decimals.Collection.ValueArray C.I.equal``() = validate (Decimals.Collection.ValueArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.ValueArray C.I.not_equal``() = + member _.``Decimals.Collection.ValueArray C.I.not_equal``() = validate (Decimals.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Decimals.Collection.ValueArray C.I.compare``() = + member _.``Decimals.Collection.ValueArray C.I.compare``() = validate (Decimals.Collection.ValueArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Decimals.Collection.ValueArray C.I.less_than``() = + member _.``Decimals.Collection.ValueArray C.I.less_than``() = validate (Decimals.Collection.ValueArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Decimals.Collection.ValueArray C.I.less_or_equal``() = + member _.``Decimals.Collection.ValueArray C.I.less_or_equal``() = validate (Decimals.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Decimals.Collection.ValueArray C.I.greater_than``() = + member _.``Decimals.Collection.ValueArray C.I.greater_than``() = validate (Decimals.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Decimals.Collection.ValueArray C.I.greater_or_equal``() = + member _.``Decimals.Collection.ValueArray C.I.greater_or_equal``() = validate (Decimals.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Decimals.Collection.ValueArray C.N.equals``() = + member _.``Decimals.Collection.ValueArray C.N.equals``() = validate (Decimals.Collection.ValueArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.ValueArray C.N.equal``() = + member _.``Decimals.Collection.ValueArray C.N.equal``() = validate (Decimals.Collection.ValueArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.ValueArray C.N.not_equal``() = + member _.``Decimals.Collection.ValueArray C.N.not_equal``() = validate (Decimals.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Decimals.Collection.ValueArray C.N.compare``() = + member _.``Decimals.Collection.ValueArray C.N.compare``() = validate (Decimals.Collection.ValueArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Decimals.Collection.ValueArray C.N.less_than``() = + member _.``Decimals.Collection.ValueArray C.N.less_than``() = validate (Decimals.Collection.ValueArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Decimals.Collection.ValueArray C.N.less_or_equal``() = + member _.``Decimals.Collection.ValueArray C.N.less_or_equal``() = validate (Decimals.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Decimals.Collection.ValueArray C.N.greater_than``() = + member _.``Decimals.Collection.ValueArray C.N.greater_than``() = validate (Decimals.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Decimals.Collection.ValueArray C.N.greater_or_equal``() = + member _.``Decimals.Collection.ValueArray C.N.greater_or_equal``() = validate (Decimals.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Decimals.Collection.ValueWrapArray C.I.equals``() = + member _.``Decimals.Collection.ValueWrapArray C.I.equals``() = validate (Decimals.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.ValueWrapArray C.I.equal``() = + member _.``Decimals.Collection.ValueWrapArray C.I.equal``() = validate (Decimals.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.ValueWrapArray C.I.not_equal``() = + member _.``Decimals.Collection.ValueWrapArray C.I.not_equal``() = validate (Decimals.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Decimals.Collection.ValueWrapArray C.I.compare``() = + member _.``Decimals.Collection.ValueWrapArray C.I.compare``() = validate (Decimals.Collection.ValueWrapArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Decimals.Collection.ValueWrapArray C.I.less_than``() = + member _.``Decimals.Collection.ValueWrapArray C.I.less_than``() = validate (Decimals.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Decimals.Collection.ValueWrapArray C.I.less_or_equal``() = + member _.``Decimals.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Decimals.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Decimals.Collection.ValueWrapArray C.I.greater_than``() = + member _.``Decimals.Collection.ValueWrapArray C.I.greater_than``() = validate (Decimals.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Decimals.Collection.ValueWrapArray C.I.greater_or_equal``() = + member _.``Decimals.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Decimals.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Decimals.Collection.ValueWrapArray C.N.equals``() = + member _.``Decimals.Collection.ValueWrapArray C.N.equals``() = validate (Decimals.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.ValueWrapArray C.N.equal``() = + member _.``Decimals.Collection.ValueWrapArray C.N.equal``() = validate (Decimals.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``Decimals.Collection.ValueWrapArray C.N.not_equal``() = + member _.``Decimals.Collection.ValueWrapArray C.N.not_equal``() = validate (Decimals.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``Decimals.Collection.ValueWrapArray C.N.compare``() = + member _.``Decimals.Collection.ValueWrapArray C.N.compare``() = validate (Decimals.Collection.ValueWrapArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;1;1;1;1;-1;0;-1;-1;1;-1;1;0;-1;1;-1;1;1;0 |] [] - member __.``Decimals.Collection.ValueWrapArray C.N.less_than``() = + member _.``Decimals.Collection.ValueWrapArray C.N.less_than``() = validate (Decimals.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;1;0;1;1;0;1;0;0;1;0;1;0;0;0 |] [] - member __.``Decimals.Collection.ValueWrapArray C.N.less_or_equal``() = + member _.``Decimals.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Decimals.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;1;1;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;0;1;0;0;1 |] [] - member __.``Decimals.Collection.ValueWrapArray C.N.greater_than``() = + member _.``Decimals.Collection.ValueWrapArray C.N.greater_than``() = validate (Decimals.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;1;0;1;1;1;1;0;0;0;0;1;0;1;0;0;1;0;1;1;0 |] [] - member __.``Decimals.Collection.ValueWrapArray C.N.greater_or_equal``() = + member _.``Decimals.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Decimals.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;1;1;1;1;1;1;0;1;0;0;1;0;1;1;0;1;0;1;1;1 |] [] - member __.``Decimals.Collection.ArrayArray C.I.equals``() = + member _.``Decimals.Collection.ArrayArray C.I.equals``() = validate (Decimals.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39183,7 +39183,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray C.I.equal``() = + member _.``Decimals.Collection.ArrayArray C.I.equal``() = validate (Decimals.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39191,7 +39191,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray C.I.not_equal``() = + member _.``Decimals.Collection.ArrayArray C.I.not_equal``() = validate (Decimals.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -39199,7 +39199,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray C.I.compare``() = + member _.``Decimals.Collection.ArrayArray C.I.compare``() = validate (Decimals.Collection.ArrayArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;1;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1; @@ -39207,7 +39207,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray C.I.less_than``() = + member _.``Decimals.Collection.ArrayArray C.I.less_than``() = validate (Decimals.Collection.ArrayArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; @@ -39215,7 +39215,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray C.I.less_or_equal``() = + member _.``Decimals.Collection.ArrayArray C.I.less_or_equal``() = validate (Decimals.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; @@ -39223,7 +39223,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray C.I.greater_than``() = + member _.``Decimals.Collection.ArrayArray C.I.greater_than``() = validate (Decimals.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; @@ -39231,7 +39231,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray C.I.greater_or_equal``() = + member _.``Decimals.Collection.ArrayArray C.I.greater_or_equal``() = validate (Decimals.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; @@ -39239,7 +39239,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray C.N.equals``() = + member _.``Decimals.Collection.ArrayArray C.N.equals``() = validate (Decimals.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39247,7 +39247,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray C.N.equal``() = + member _.``Decimals.Collection.ArrayArray C.N.equal``() = validate (Decimals.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39255,7 +39255,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray C.N.not_equal``() = + member _.``Decimals.Collection.ArrayArray C.N.not_equal``() = validate (Decimals.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -39263,7 +39263,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray C.N.compare``() = + member _.``Decimals.Collection.ArrayArray C.N.compare``() = validate (Decimals.Collection.ArrayArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;-1;-1;-1;-1;1;-1;0;-1;-1;-1;-1;-1;-1;-1;1;-1;1;0;-1;-1;-1;-1;-1;-1; 1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1; @@ -39271,7 +39271,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray C.N.less_than``() = + member _.``Decimals.Collection.ArrayArray C.N.less_than``() = validate (Decimals.Collection.ArrayArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1;0;1;0;0;1;1;1;1;1;1; 0;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1; @@ -39279,7 +39279,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray C.N.less_or_equal``() = + member _.``Decimals.Collection.ArrayArray C.N.less_or_equal``() = validate (Decimals.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;0;1;1;1;1;1;1;1; 0;1;0;0;1;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1; @@ -39287,7 +39287,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray C.N.greater_than``() = + member _.``Decimals.Collection.ArrayArray C.N.greater_than``() = validate (Decimals.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0; 1;0;1;1;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0; @@ -39295,7 +39295,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray C.N.greater_or_equal``() = + member _.``Decimals.Collection.ArrayArray C.N.greater_or_equal``() = validate (Decimals.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0; 1;0;1;1;1;0;0;0;0;0;1;1;1;1;1;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0; @@ -39303,7 +39303,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ListArray C.I.equals``() = + member _.``Decimals.Collection.ListArray C.I.equals``() = validate (Decimals.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39311,7 +39311,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ListArray C.I.equal``() = + member _.``Decimals.Collection.ListArray C.I.equal``() = validate (Decimals.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39319,7 +39319,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ListArray C.I.not_equal``() = + member _.``Decimals.Collection.ListArray C.I.not_equal``() = validate (Decimals.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -39327,7 +39327,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ListArray C.I.compare``() = + member _.``Decimals.Collection.ListArray C.I.compare``() = validate (Decimals.Collection.ListArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; 1;-1;1;1;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;1;-1;0;-1;-1; @@ -39335,7 +39335,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ListArray C.I.less_than``() = + member _.``Decimals.Collection.ListArray C.I.less_than``() = validate (Decimals.Collection.ListArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; @@ -39343,7 +39343,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ListArray C.I.less_or_equal``() = + member _.``Decimals.Collection.ListArray C.I.less_or_equal``() = validate (Decimals.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; @@ -39351,7 +39351,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ListArray C.I.greater_than``() = + member _.``Decimals.Collection.ListArray C.I.greater_than``() = validate (Decimals.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; @@ -39359,7 +39359,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ListArray C.I.greater_or_equal``() = + member _.``Decimals.Collection.ListArray C.I.greater_or_equal``() = validate (Decimals.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; @@ -39367,7 +39367,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ListArray C.N.equals``() = + member _.``Decimals.Collection.ListArray C.N.equals``() = validate (Decimals.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39375,7 +39375,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ListArray C.N.equal``() = + member _.``Decimals.Collection.ListArray C.N.equal``() = validate (Decimals.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39383,7 +39383,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ListArray C.N.not_equal``() = + member _.``Decimals.Collection.ListArray C.N.not_equal``() = validate (Decimals.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -39391,7 +39391,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ListArray C.N.compare``() = + member _.``Decimals.Collection.ListArray C.N.compare``() = validate (Decimals.Collection.ListArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;-1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;-1;1;-1;1;0;-1;1;-1;1;-1;-1; 1;-1;1;1;0;1;-1;1;1;-1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;-1;1;-1;-1;1;-1;0;-1;-1; @@ -39399,7 +39399,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ListArray C.N.less_than``() = + member _.``Decimals.Collection.ListArray C.N.less_than``() = validate (Decimals.Collection.ListArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1;0;1;0;0;1;0;1;0;1;1; 0;1;0;0;0;0;1;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;0;1;1; @@ -39407,7 +39407,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ListArray C.N.less_or_equal``() = + member _.``Decimals.Collection.ListArray C.N.less_or_equal``() = validate (Decimals.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;0;1;0;1;1;0;1;0;1;1; 0;1;0;0;1;0;1;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;1;0;1;1;0;1;1;1;1; @@ -39415,7 +39415,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ListArray C.N.greater_than``() = + member _.``Decimals.Collection.ListArray C.N.greater_than``() = validate (Decimals.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;0;1;1;1;1;0;0;0;0;1;0;0;0;0;1;0;1;0;0;1;0;1;0;0; 1;0;1;1;0;1;0;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0; @@ -39423,7 +39423,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ListArray C.N.greater_or_equal``() = + member _.``Decimals.Collection.ListArray C.N.greater_or_equal``() = validate (Decimals.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;0;1;1;1;1;0;1;0;0;1;0;0;0;0;1;0;1;1;0;1;0;1;0;0; 1;0;1;1;1;1;0;1;1;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;1;0;0; @@ -39431,7 +39431,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39439,7 +39439,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39447,7 +39447,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -39455,7 +39455,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; @@ -39463,7 +39463,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; @@ -39471,7 +39471,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; @@ -39479,7 +39479,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; @@ -39487,7 +39487,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; @@ -39495,7 +39495,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39503,7 +39503,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -39511,7 +39511,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -39519,7 +39519,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;1;1;1;1;-1;0;-1;-1;1;-1;-1;-1;1;1;-1;1;0;-1;1;1;1;-1;1; 1;-1;1;1;0;1;1;1;1;1;1;-1;-1;-1;-1;0;-1;-1;-1;1;1;-1;1;-1;-1;1;0;1;-1;1;1;-1;1;-1;-1;1;-1;0;-1;1; @@ -39527,7 +39527,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;1;0;1;1;0;1;1;1;0;0;1;0;0;1;0;0;0;1;0; 0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0;0;1;0;1;1;0;1;0;1;0; @@ -39535,7 +39535,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;1;1;0;0;1;0;1;1;0;0;0;1;0; 0;1;0;0;1;0;0;0;0;0;0;1;1;1;1;1;1;1;1;0;0;1;0;1;1;0;1;0;1;0;0;1;0;1;1;0;1;1;1;0; @@ -39543,7 +39543,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1; 1;0;1;1;0;1;1;1;1;1;1;0;0;0;0;0;0;0;0;1;1;0;1;0;0;1;0;1;0;1;1;0;1;0;0;1;0;0;0;1; @@ -39551,7 +39551,7 @@ type GeneratedTests () = |] [] - member __.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member _.``Decimals.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Decimals.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;1;0;0;0;1;1;0;1;1;0;1;1;1;0;1; 1;0;1;1;1;1;1;1;1;1;1;0;0;0;0;1;0;0;0;1;1;0;1;0;0;1;1;1;0;1;1;0;1;0;0;1;0;1;0;1; @@ -39559,157 +39559,157 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.Array E.I.equals``() = + member _.``NullableDecimals.Collection.Array E.I.equals``() = validate (NullableDecimals.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.Array E.I.equal``() = + member _.``NullableDecimals.Collection.Array E.I.equal``() = validate (NullableDecimals.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.Array E.I.not_equal``() = + member _.``NullableDecimals.Collection.Array E.I.not_equal``() = validate (NullableDecimals.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableDecimals.Collection.Array E.N.equals``() = + member _.``NullableDecimals.Collection.Array E.N.equals``() = validate (NullableDecimals.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.Array E.N.equal``() = + member _.``NullableDecimals.Collection.Array E.N.equal``() = validate (NullableDecimals.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.Array E.N.not_equal``() = + member _.``NullableDecimals.Collection.Array E.N.not_equal``() = validate (NullableDecimals.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableDecimals.Collection.OptionArray E.I.equals``() = + member _.``NullableDecimals.Collection.OptionArray E.I.equals``() = validate (NullableDecimals.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.OptionArray E.I.equal``() = + member _.``NullableDecimals.Collection.OptionArray E.I.equal``() = validate (NullableDecimals.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.OptionArray E.I.not_equal``() = + member _.``NullableDecimals.Collection.OptionArray E.I.not_equal``() = validate (NullableDecimals.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``NullableDecimals.Collection.OptionArray E.N.equals``() = + member _.``NullableDecimals.Collection.OptionArray E.N.equals``() = validate (NullableDecimals.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.OptionArray E.N.equal``() = + member _.``NullableDecimals.Collection.OptionArray E.N.equal``() = validate (NullableDecimals.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.OptionArray E.N.not_equal``() = + member _.``NullableDecimals.Collection.OptionArray E.N.not_equal``() = validate (NullableDecimals.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;0 |] [] - member __.``NullableDecimals.Collection.RefArray E.I.equals``() = + member _.``NullableDecimals.Collection.RefArray E.I.equals``() = validate (NullableDecimals.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.RefArray E.I.equal``() = + member _.``NullableDecimals.Collection.RefArray E.I.equal``() = validate (NullableDecimals.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.RefArray E.I.not_equal``() = + member _.``NullableDecimals.Collection.RefArray E.I.not_equal``() = validate (NullableDecimals.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableDecimals.Collection.RefArray E.N.equals``() = + member _.``NullableDecimals.Collection.RefArray E.N.equals``() = validate (NullableDecimals.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.RefArray E.N.equal``() = + member _.``NullableDecimals.Collection.RefArray E.N.equal``() = validate (NullableDecimals.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.RefArray E.N.not_equal``() = + member _.``NullableDecimals.Collection.RefArray E.N.not_equal``() = validate (NullableDecimals.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableDecimals.Collection.RefWrapArray E.I.equals``() = + member _.``NullableDecimals.Collection.RefWrapArray E.I.equals``() = validate (NullableDecimals.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.RefWrapArray E.I.equal``() = + member _.``NullableDecimals.Collection.RefWrapArray E.I.equal``() = validate (NullableDecimals.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.RefWrapArray E.I.not_equal``() = + member _.``NullableDecimals.Collection.RefWrapArray E.I.not_equal``() = validate (NullableDecimals.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableDecimals.Collection.RefWrapArray E.N.equals``() = + member _.``NullableDecimals.Collection.RefWrapArray E.N.equals``() = validate (NullableDecimals.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.RefWrapArray E.N.equal``() = + member _.``NullableDecimals.Collection.RefWrapArray E.N.equal``() = validate (NullableDecimals.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.RefWrapArray E.N.not_equal``() = + member _.``NullableDecimals.Collection.RefWrapArray E.N.not_equal``() = validate (NullableDecimals.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableDecimals.Collection.UnionArray E.I.equals``() = + member _.``NullableDecimals.Collection.UnionArray E.I.equals``() = validate (NullableDecimals.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -39759,7 +39759,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.UnionArray E.I.equal``() = + member _.``NullableDecimals.Collection.UnionArray E.I.equal``() = validate (NullableDecimals.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -39809,7 +39809,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.UnionArray E.I.not_equal``() = + member _.``NullableDecimals.Collection.UnionArray E.I.not_equal``() = validate (NullableDecimals.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -39859,7 +39859,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.UnionArray E.N.equals``() = + member _.``NullableDecimals.Collection.UnionArray E.N.equals``() = validate (NullableDecimals.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -39909,7 +39909,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.UnionArray E.N.equal``() = + member _.``NullableDecimals.Collection.UnionArray E.N.equal``() = validate (NullableDecimals.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -39959,7 +39959,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.UnionArray E.N.not_equal``() = + member _.``NullableDecimals.Collection.UnionArray E.N.not_equal``() = validate (NullableDecimals.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -40009,7 +40009,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.UnionWrapArray E.I.equals``() = + member _.``NullableDecimals.Collection.UnionWrapArray E.I.equals``() = validate (NullableDecimals.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -40059,7 +40059,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.UnionWrapArray E.I.equal``() = + member _.``NullableDecimals.Collection.UnionWrapArray E.I.equal``() = validate (NullableDecimals.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -40109,7 +40109,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.UnionWrapArray E.I.not_equal``() = + member _.``NullableDecimals.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableDecimals.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -40159,7 +40159,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.UnionWrapArray E.N.equals``() = + member _.``NullableDecimals.Collection.UnionWrapArray E.N.equals``() = validate (NullableDecimals.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -40209,7 +40209,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.UnionWrapArray E.N.equal``() = + member _.``NullableDecimals.Collection.UnionWrapArray E.N.equal``() = validate (NullableDecimals.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -40259,7 +40259,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.UnionWrapArray E.N.not_equal``() = + member _.``NullableDecimals.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableDecimals.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -40309,79 +40309,79 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.ValueArray E.I.equals``() = + member _.``NullableDecimals.Collection.ValueArray E.I.equals``() = validate (NullableDecimals.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.ValueArray E.I.equal``() = + member _.``NullableDecimals.Collection.ValueArray E.I.equal``() = validate (NullableDecimals.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.ValueArray E.I.not_equal``() = + member _.``NullableDecimals.Collection.ValueArray E.I.not_equal``() = validate (NullableDecimals.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableDecimals.Collection.ValueArray E.N.equals``() = + member _.``NullableDecimals.Collection.ValueArray E.N.equals``() = validate (NullableDecimals.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.ValueArray E.N.equal``() = + member _.``NullableDecimals.Collection.ValueArray E.N.equal``() = validate (NullableDecimals.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.ValueArray E.N.not_equal``() = + member _.``NullableDecimals.Collection.ValueArray E.N.not_equal``() = validate (NullableDecimals.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableDecimals.Collection.ValueWrapArray E.I.equals``() = + member _.``NullableDecimals.Collection.ValueWrapArray E.I.equals``() = validate (NullableDecimals.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.ValueWrapArray E.I.equal``() = + member _.``NullableDecimals.Collection.ValueWrapArray E.I.equal``() = validate (NullableDecimals.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.ValueWrapArray E.I.not_equal``() = + member _.``NullableDecimals.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableDecimals.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableDecimals.Collection.ValueWrapArray E.N.equals``() = + member _.``NullableDecimals.Collection.ValueWrapArray E.N.equals``() = validate (NullableDecimals.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.ValueWrapArray E.N.equal``() = + member _.``NullableDecimals.Collection.ValueWrapArray E.N.equal``() = validate (NullableDecimals.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``NullableDecimals.Collection.ValueWrapArray E.N.not_equal``() = + member _.``NullableDecimals.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableDecimals.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``NullableDecimals.Collection.ArrayArray E.I.equals``() = + member _.``NullableDecimals.Collection.ArrayArray E.I.equals``() = validate (NullableDecimals.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -40390,7 +40390,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.ArrayArray E.I.equal``() = + member _.``NullableDecimals.Collection.ArrayArray E.I.equal``() = validate (NullableDecimals.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -40399,7 +40399,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.ArrayArray E.I.not_equal``() = + member _.``NullableDecimals.Collection.ArrayArray E.I.not_equal``() = validate (NullableDecimals.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -40408,7 +40408,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.ArrayArray E.N.equals``() = + member _.``NullableDecimals.Collection.ArrayArray E.N.equals``() = validate (NullableDecimals.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -40417,7 +40417,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.ArrayArray E.N.equal``() = + member _.``NullableDecimals.Collection.ArrayArray E.N.equal``() = validate (NullableDecimals.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -40426,7 +40426,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.ArrayArray E.N.not_equal``() = + member _.``NullableDecimals.Collection.ArrayArray E.N.not_equal``() = validate (NullableDecimals.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -40435,7 +40435,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.ListArray E.I.equals``() = + member _.``NullableDecimals.Collection.ListArray E.I.equals``() = validate (NullableDecimals.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -40444,7 +40444,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.ListArray E.I.equal``() = + member _.``NullableDecimals.Collection.ListArray E.I.equal``() = validate (NullableDecimals.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -40453,7 +40453,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.ListArray E.I.not_equal``() = + member _.``NullableDecimals.Collection.ListArray E.I.not_equal``() = validate (NullableDecimals.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -40462,7 +40462,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.ListArray E.N.equals``() = + member _.``NullableDecimals.Collection.ListArray E.N.equals``() = validate (NullableDecimals.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -40471,7 +40471,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.ListArray E.N.equal``() = + member _.``NullableDecimals.Collection.ListArray E.N.equal``() = validate (NullableDecimals.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;1;0; @@ -40480,7 +40480,7 @@ type GeneratedTests () = |] [] - member __.``NullableDecimals.Collection.ListArray E.N.not_equal``() = + member _.``NullableDecimals.Collection.ListArray E.N.not_equal``() = validate (NullableDecimals.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0; 1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1; @@ -40489,7 +40489,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.Array C.I.equals``() = + member _.``Floats.Collection.Array C.I.equals``() = validate (Floats.Collection.Array) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40497,7 +40497,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.Array C.I.equal``() = + member _.``Floats.Collection.Array C.I.equal``() = validate (Floats.Collection.Array) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40505,7 +40505,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.Array C.I.not_equal``() = + member _.``Floats.Collection.Array C.I.not_equal``() = validate (Floats.Collection.Array) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -40513,7 +40513,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.Array C.I.compare``() = + member _.``Floats.Collection.Array C.I.compare``() = validate (Floats.Collection.Array) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -40521,7 +40521,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.Array C.I.less_than``() = + member _.``Floats.Collection.Array C.I.less_than``() = validate (Floats.Collection.Array) C.I.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -40529,7 +40529,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.Array C.I.less_or_equal``() = + member _.``Floats.Collection.Array C.I.less_or_equal``() = validate (Floats.Collection.Array) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -40537,7 +40537,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.Array C.I.greater_than``() = + member _.``Floats.Collection.Array C.I.greater_than``() = validate (Floats.Collection.Array) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -40545,7 +40545,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.Array C.I.greater_or_equal``() = + member _.``Floats.Collection.Array C.I.greater_or_equal``() = validate (Floats.Collection.Array) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -40553,7 +40553,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.Array C.N.equals``() = + member _.``Floats.Collection.Array C.N.equals``() = validate (Floats.Collection.Array) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40561,7 +40561,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.Array C.N.equal``() = + member _.``Floats.Collection.Array C.N.equal``() = validate (Floats.Collection.Array) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40569,7 +40569,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.Array C.N.not_equal``() = + member _.``Floats.Collection.Array C.N.not_equal``() = validate (Floats.Collection.Array) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -40577,7 +40577,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.Array C.N.compare``() = + member _.``Floats.Collection.Array C.N.compare``() = validate (Floats.Collection.Array) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -40585,7 +40585,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.Array C.N.less_than``() = + member _.``Floats.Collection.Array C.N.less_than``() = validate (Floats.Collection.Array) C.N.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -40593,7 +40593,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.Array C.N.less_or_equal``() = + member _.``Floats.Collection.Array C.N.less_or_equal``() = validate (Floats.Collection.Array) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -40601,7 +40601,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.Array C.N.greater_than``() = + member _.``Floats.Collection.Array C.N.greater_than``() = validate (Floats.Collection.Array) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -40609,7 +40609,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.Array C.N.greater_or_equal``() = + member _.``Floats.Collection.Array C.N.greater_or_equal``() = validate (Floats.Collection.Array) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -40617,7 +40617,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.OptionArray C.I.equals``() = + member _.``Floats.Collection.OptionArray C.I.equals``() = validate (Floats.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -40625,7 +40625,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.OptionArray C.I.equal``() = + member _.``Floats.Collection.OptionArray C.I.equal``() = validate (Floats.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -40633,7 +40633,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.OptionArray C.I.not_equal``() = + member _.``Floats.Collection.OptionArray C.I.not_equal``() = validate (Floats.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -40641,7 +40641,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.OptionArray C.I.compare``() = + member _.``Floats.Collection.OptionArray C.I.compare``() = validate (Floats.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;1;-1;-1;-1;-1;1;1;0;1;1;1;-1;1;1;1;1;1;-1;0;1;1;-1;1;1;-1; 1;-1;-1;-1;0;-1;-1;-1;-1;-1;1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;-1;-1;1;1;-1;0;-1;-1; @@ -40649,7 +40649,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.OptionArray C.I.less_than``() = + member _.``Floats.Collection.OptionArray C.I.less_than``() = validate (Floats.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;1;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1; @@ -40657,7 +40657,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.OptionArray C.I.less_or_equal``() = + member _.``Floats.Collection.OptionArray C.I.less_or_equal``() = validate (Floats.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;1;1;0;0;1;1;1;1;0;0;1;0;0;0;1;0;0;0;0;0;1;1;0;0;1;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;1;1;1;1; @@ -40665,7 +40665,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.OptionArray C.I.greater_than``() = + member _.``Floats.Collection.OptionArray C.I.greater_than``() = validate (Floats.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;0;1;0;1;0;1;1;1;1;1;0;0;0;1;0;1;1;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;0;0;1;0;0;0;0; @@ -40673,7 +40673,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.OptionArray C.I.greater_or_equal``() = + member _.``Floats.Collection.OptionArray C.I.greater_or_equal``() = validate (Floats.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;1;0;1;0;1;1;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;1;0;1;0;0; @@ -40681,7 +40681,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.OptionArray C.N.equals``() = + member _.``Floats.Collection.OptionArray C.N.equals``() = validate (Floats.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -40689,7 +40689,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.OptionArray C.N.equal``() = + member _.``Floats.Collection.OptionArray C.N.equal``() = validate (Floats.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -40697,7 +40697,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.OptionArray C.N.not_equal``() = + member _.``Floats.Collection.OptionArray C.N.not_equal``() = validate (Floats.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -40705,7 +40705,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.OptionArray C.N.compare``() = + member _.``Floats.Collection.OptionArray C.N.compare``() = validate (Floats.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;1;-1;-1;-1;-1;1;1;0;1;1;1;-1;1;1;1;1;1;-1;0;1;1;-1;1;1;-1; 1;-1;-1;-1;0;-1;-1;-1;-1;-1;1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;-1;-1;1;1;-1;0;-1;-1; @@ -40713,7 +40713,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.OptionArray C.N.less_than``() = + member _.``Floats.Collection.OptionArray C.N.less_than``() = validate (Floats.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;1;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1; @@ -40721,7 +40721,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.OptionArray C.N.less_or_equal``() = + member _.``Floats.Collection.OptionArray C.N.less_or_equal``() = validate (Floats.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;1;1;0;0;1;1;1;1;0;0;1;0;0;0;1;0;0;0;0;0;1;1;0;0;1;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;1;1;1;1; @@ -40729,7 +40729,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.OptionArray C.N.greater_than``() = + member _.``Floats.Collection.OptionArray C.N.greater_than``() = validate (Floats.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;0;1;0;1;0;1;1;1;1;1;0;0;0;1;0;1;1;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;0;0;1;0;0;0;0; @@ -40737,7 +40737,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.OptionArray C.N.greater_or_equal``() = + member _.``Floats.Collection.OptionArray C.N.greater_or_equal``() = validate (Floats.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;1;0;1;0;1;1;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;1;0;1;0;0; @@ -40745,7 +40745,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefArray C.I.equals``() = + member _.``Floats.Collection.RefArray C.I.equals``() = validate (Floats.Collection.RefArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40753,7 +40753,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefArray C.I.equal``() = + member _.``Floats.Collection.RefArray C.I.equal``() = validate (Floats.Collection.RefArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40761,7 +40761,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefArray C.I.not_equal``() = + member _.``Floats.Collection.RefArray C.I.not_equal``() = validate (Floats.Collection.RefArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -40769,7 +40769,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefArray C.I.compare``() = + member _.``Floats.Collection.RefArray C.I.compare``() = validate (Floats.Collection.RefArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -40777,7 +40777,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefArray C.I.less_than``() = + member _.``Floats.Collection.RefArray C.I.less_than``() = validate (Floats.Collection.RefArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -40785,7 +40785,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefArray C.I.less_or_equal``() = + member _.``Floats.Collection.RefArray C.I.less_or_equal``() = validate (Floats.Collection.RefArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -40793,7 +40793,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefArray C.I.greater_than``() = + member _.``Floats.Collection.RefArray C.I.greater_than``() = validate (Floats.Collection.RefArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -40801,7 +40801,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefArray C.I.greater_or_equal``() = + member _.``Floats.Collection.RefArray C.I.greater_or_equal``() = validate (Floats.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -40809,7 +40809,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefArray C.N.equals``() = + member _.``Floats.Collection.RefArray C.N.equals``() = validate (Floats.Collection.RefArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40817,7 +40817,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefArray C.N.equal``() = + member _.``Floats.Collection.RefArray C.N.equal``() = validate (Floats.Collection.RefArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40825,7 +40825,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefArray C.N.not_equal``() = + member _.``Floats.Collection.RefArray C.N.not_equal``() = validate (Floats.Collection.RefArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -40833,7 +40833,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefArray C.N.compare``() = + member _.``Floats.Collection.RefArray C.N.compare``() = validate (Floats.Collection.RefArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -40841,7 +40841,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefArray C.N.less_than``() = + member _.``Floats.Collection.RefArray C.N.less_than``() = validate (Floats.Collection.RefArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -40849,7 +40849,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefArray C.N.less_or_equal``() = + member _.``Floats.Collection.RefArray C.N.less_or_equal``() = validate (Floats.Collection.RefArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -40857,7 +40857,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefArray C.N.greater_than``() = + member _.``Floats.Collection.RefArray C.N.greater_than``() = validate (Floats.Collection.RefArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -40865,7 +40865,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefArray C.N.greater_or_equal``() = + member _.``Floats.Collection.RefArray C.N.greater_or_equal``() = validate (Floats.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -40873,7 +40873,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefWrapArray C.I.equals``() = + member _.``Floats.Collection.RefWrapArray C.I.equals``() = validate (Floats.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40881,7 +40881,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefWrapArray C.I.equal``() = + member _.``Floats.Collection.RefWrapArray C.I.equal``() = validate (Floats.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40889,7 +40889,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefWrapArray C.I.not_equal``() = + member _.``Floats.Collection.RefWrapArray C.I.not_equal``() = validate (Floats.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -40897,7 +40897,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefWrapArray C.I.compare``() = + member _.``Floats.Collection.RefWrapArray C.I.compare``() = validate (Floats.Collection.RefWrapArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -40905,7 +40905,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefWrapArray C.I.less_than``() = + member _.``Floats.Collection.RefWrapArray C.I.less_than``() = validate (Floats.Collection.RefWrapArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -40913,7 +40913,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefWrapArray C.I.less_or_equal``() = + member _.``Floats.Collection.RefWrapArray C.I.less_or_equal``() = validate (Floats.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -40921,7 +40921,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefWrapArray C.I.greater_than``() = + member _.``Floats.Collection.RefWrapArray C.I.greater_than``() = validate (Floats.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -40929,7 +40929,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefWrapArray C.I.greater_or_equal``() = + member _.``Floats.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Floats.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -40937,7 +40937,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefWrapArray C.N.equals``() = + member _.``Floats.Collection.RefWrapArray C.N.equals``() = validate (Floats.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40945,7 +40945,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefWrapArray C.N.equal``() = + member _.``Floats.Collection.RefWrapArray C.N.equal``() = validate (Floats.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -40953,7 +40953,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefWrapArray C.N.not_equal``() = + member _.``Floats.Collection.RefWrapArray C.N.not_equal``() = validate (Floats.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -40961,7 +40961,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefWrapArray C.N.compare``() = + member _.``Floats.Collection.RefWrapArray C.N.compare``() = validate (Floats.Collection.RefWrapArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -40969,7 +40969,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefWrapArray C.N.less_than``() = + member _.``Floats.Collection.RefWrapArray C.N.less_than``() = validate (Floats.Collection.RefWrapArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -40977,7 +40977,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefWrapArray C.N.less_or_equal``() = + member _.``Floats.Collection.RefWrapArray C.N.less_or_equal``() = validate (Floats.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -40985,7 +40985,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefWrapArray C.N.greater_than``() = + member _.``Floats.Collection.RefWrapArray C.N.greater_than``() = validate (Floats.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -40993,7 +40993,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.RefWrapArray C.N.greater_or_equal``() = + member _.``Floats.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Floats.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -41001,7 +41001,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionArray C.I.equals``() = + member _.``Floats.Collection.UnionArray C.I.equals``() = validate (Floats.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -41106,7 +41106,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionArray C.I.equal``() = + member _.``Floats.Collection.UnionArray C.I.equal``() = validate (Floats.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -41211,7 +41211,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionArray C.I.not_equal``() = + member _.``Floats.Collection.UnionArray C.I.not_equal``() = validate (Floats.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -41316,7 +41316,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionArray C.I.compare``() = + member _.``Floats.Collection.UnionArray C.I.compare``() = validate (Floats.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -41421,7 +41421,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionArray C.I.less_than``() = + member _.``Floats.Collection.UnionArray C.I.less_than``() = validate (Floats.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -41526,7 +41526,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionArray C.I.less_or_equal``() = + member _.``Floats.Collection.UnionArray C.I.less_or_equal``() = validate (Floats.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -41631,7 +41631,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionArray C.I.greater_than``() = + member _.``Floats.Collection.UnionArray C.I.greater_than``() = validate (Floats.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -41736,7 +41736,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionArray C.I.greater_or_equal``() = + member _.``Floats.Collection.UnionArray C.I.greater_or_equal``() = validate (Floats.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -41841,7 +41841,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionArray C.N.equals``() = + member _.``Floats.Collection.UnionArray C.N.equals``() = validate (Floats.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -41946,7 +41946,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionArray C.N.equal``() = + member _.``Floats.Collection.UnionArray C.N.equal``() = validate (Floats.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -42051,7 +42051,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionArray C.N.not_equal``() = + member _.``Floats.Collection.UnionArray C.N.not_equal``() = validate (Floats.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -42156,7 +42156,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionArray C.N.compare``() = + member _.``Floats.Collection.UnionArray C.N.compare``() = validate (Floats.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -42261,7 +42261,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionArray C.N.less_than``() = + member _.``Floats.Collection.UnionArray C.N.less_than``() = validate (Floats.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -42366,7 +42366,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionArray C.N.less_or_equal``() = + member _.``Floats.Collection.UnionArray C.N.less_or_equal``() = validate (Floats.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -42471,7 +42471,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionArray C.N.greater_than``() = + member _.``Floats.Collection.UnionArray C.N.greater_than``() = validate (Floats.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -42576,7 +42576,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionArray C.N.greater_or_equal``() = + member _.``Floats.Collection.UnionArray C.N.greater_or_equal``() = validate (Floats.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -42681,7 +42681,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionWrapArray C.I.equals``() = + member _.``Floats.Collection.UnionWrapArray C.I.equals``() = validate (Floats.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -42786,7 +42786,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionWrapArray C.I.equal``() = + member _.``Floats.Collection.UnionWrapArray C.I.equal``() = validate (Floats.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -42891,7 +42891,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionWrapArray C.I.not_equal``() = + member _.``Floats.Collection.UnionWrapArray C.I.not_equal``() = validate (Floats.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -42996,7 +42996,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionWrapArray C.I.compare``() = + member _.``Floats.Collection.UnionWrapArray C.I.compare``() = validate (Floats.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -43101,7 +43101,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionWrapArray C.I.less_than``() = + member _.``Floats.Collection.UnionWrapArray C.I.less_than``() = validate (Floats.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -43206,7 +43206,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionWrapArray C.I.less_or_equal``() = + member _.``Floats.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Floats.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -43311,7 +43311,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionWrapArray C.I.greater_than``() = + member _.``Floats.Collection.UnionWrapArray C.I.greater_than``() = validate (Floats.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -43416,7 +43416,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionWrapArray C.I.greater_or_equal``() = + member _.``Floats.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Floats.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -43521,7 +43521,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionWrapArray C.N.equals``() = + member _.``Floats.Collection.UnionWrapArray C.N.equals``() = validate (Floats.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -43626,7 +43626,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionWrapArray C.N.equal``() = + member _.``Floats.Collection.UnionWrapArray C.N.equal``() = validate (Floats.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -43731,7 +43731,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionWrapArray C.N.not_equal``() = + member _.``Floats.Collection.UnionWrapArray C.N.not_equal``() = validate (Floats.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -43836,7 +43836,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionWrapArray C.N.compare``() = + member _.``Floats.Collection.UnionWrapArray C.N.compare``() = validate (Floats.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -43941,7 +43941,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionWrapArray C.N.less_than``() = + member _.``Floats.Collection.UnionWrapArray C.N.less_than``() = validate (Floats.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -44046,7 +44046,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionWrapArray C.N.less_or_equal``() = + member _.``Floats.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Floats.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -44151,7 +44151,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionWrapArray C.N.greater_than``() = + member _.``Floats.Collection.UnionWrapArray C.N.greater_than``() = validate (Floats.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -44256,7 +44256,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.UnionWrapArray C.N.greater_or_equal``() = + member _.``Floats.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Floats.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -44361,7 +44361,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueArray C.I.equals``() = + member _.``Floats.Collection.ValueArray C.I.equals``() = validate (Floats.Collection.ValueArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -44369,7 +44369,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueArray C.I.equal``() = + member _.``Floats.Collection.ValueArray C.I.equal``() = validate (Floats.Collection.ValueArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -44377,7 +44377,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueArray C.I.not_equal``() = + member _.``Floats.Collection.ValueArray C.I.not_equal``() = validate (Floats.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -44385,7 +44385,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueArray C.I.compare``() = + member _.``Floats.Collection.ValueArray C.I.compare``() = validate (Floats.Collection.ValueArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -44393,7 +44393,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueArray C.I.less_than``() = + member _.``Floats.Collection.ValueArray C.I.less_than``() = validate (Floats.Collection.ValueArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -44401,7 +44401,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueArray C.I.less_or_equal``() = + member _.``Floats.Collection.ValueArray C.I.less_or_equal``() = validate (Floats.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -44409,7 +44409,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueArray C.I.greater_than``() = + member _.``Floats.Collection.ValueArray C.I.greater_than``() = validate (Floats.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -44417,7 +44417,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueArray C.I.greater_or_equal``() = + member _.``Floats.Collection.ValueArray C.I.greater_or_equal``() = validate (Floats.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -44425,7 +44425,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueArray C.N.equals``() = + member _.``Floats.Collection.ValueArray C.N.equals``() = validate (Floats.Collection.ValueArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -44433,7 +44433,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueArray C.N.equal``() = + member _.``Floats.Collection.ValueArray C.N.equal``() = validate (Floats.Collection.ValueArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -44441,7 +44441,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueArray C.N.not_equal``() = + member _.``Floats.Collection.ValueArray C.N.not_equal``() = validate (Floats.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -44449,7 +44449,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueArray C.N.compare``() = + member _.``Floats.Collection.ValueArray C.N.compare``() = validate (Floats.Collection.ValueArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -44457,7 +44457,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueArray C.N.less_than``() = + member _.``Floats.Collection.ValueArray C.N.less_than``() = validate (Floats.Collection.ValueArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -44465,7 +44465,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueArray C.N.less_or_equal``() = + member _.``Floats.Collection.ValueArray C.N.less_or_equal``() = validate (Floats.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -44473,7 +44473,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueArray C.N.greater_than``() = + member _.``Floats.Collection.ValueArray C.N.greater_than``() = validate (Floats.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -44481,7 +44481,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueArray C.N.greater_or_equal``() = + member _.``Floats.Collection.ValueArray C.N.greater_or_equal``() = validate (Floats.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -44489,7 +44489,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueWrapArray C.I.equals``() = + member _.``Floats.Collection.ValueWrapArray C.I.equals``() = validate (Floats.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -44497,7 +44497,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueWrapArray C.I.equal``() = + member _.``Floats.Collection.ValueWrapArray C.I.equal``() = validate (Floats.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -44505,7 +44505,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueWrapArray C.I.not_equal``() = + member _.``Floats.Collection.ValueWrapArray C.I.not_equal``() = validate (Floats.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -44513,7 +44513,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueWrapArray C.I.compare``() = + member _.``Floats.Collection.ValueWrapArray C.I.compare``() = validate (Floats.Collection.ValueWrapArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -44521,7 +44521,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueWrapArray C.I.less_than``() = + member _.``Floats.Collection.ValueWrapArray C.I.less_than``() = validate (Floats.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -44529,7 +44529,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueWrapArray C.I.less_or_equal``() = + member _.``Floats.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Floats.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -44537,7 +44537,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueWrapArray C.I.greater_than``() = + member _.``Floats.Collection.ValueWrapArray C.I.greater_than``() = validate (Floats.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -44545,7 +44545,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueWrapArray C.I.greater_or_equal``() = + member _.``Floats.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Floats.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -44553,7 +44553,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueWrapArray C.N.equals``() = + member _.``Floats.Collection.ValueWrapArray C.N.equals``() = validate (Floats.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -44561,7 +44561,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueWrapArray C.N.equal``() = + member _.``Floats.Collection.ValueWrapArray C.N.equal``() = validate (Floats.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -44569,7 +44569,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueWrapArray C.N.not_equal``() = + member _.``Floats.Collection.ValueWrapArray C.N.not_equal``() = validate (Floats.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -44577,7 +44577,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueWrapArray C.N.compare``() = + member _.``Floats.Collection.ValueWrapArray C.N.compare``() = validate (Floats.Collection.ValueWrapArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -44585,7 +44585,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueWrapArray C.N.less_than``() = + member _.``Floats.Collection.ValueWrapArray C.N.less_than``() = validate (Floats.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -44593,7 +44593,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueWrapArray C.N.less_or_equal``() = + member _.``Floats.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Floats.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -44601,7 +44601,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueWrapArray C.N.greater_than``() = + member _.``Floats.Collection.ValueWrapArray C.N.greater_than``() = validate (Floats.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -44609,7 +44609,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ValueWrapArray C.N.greater_or_equal``() = + member _.``Floats.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Floats.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -44617,7 +44617,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray C.I.equals``() = + member _.``Floats.Collection.ArrayArray C.I.equals``() = validate (Floats.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44631,7 +44631,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray C.I.equal``() = + member _.``Floats.Collection.ArrayArray C.I.equal``() = validate (Floats.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44645,7 +44645,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray C.I.not_equal``() = + member _.``Floats.Collection.ArrayArray C.I.not_equal``() = validate (Floats.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -44659,7 +44659,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray C.I.compare``() = + member _.``Floats.Collection.ArrayArray C.I.compare``() = validate (Floats.Collection.ArrayArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;0;1; 1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -44673,7 +44673,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray C.I.less_than``() = + member _.``Floats.Collection.ArrayArray C.I.less_than``() = validate (Floats.Collection.ArrayArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;0;0; 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; @@ -44687,7 +44687,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray C.I.less_or_equal``() = + member _.``Floats.Collection.ArrayArray C.I.less_or_equal``() = validate (Floats.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1;0; 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -44701,7 +44701,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray C.I.greater_than``() = + member _.``Floats.Collection.ArrayArray C.I.greater_than``() = validate (Floats.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0; 1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -44715,7 +44715,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray C.I.greater_or_equal``() = + member _.``Floats.Collection.ArrayArray C.I.greater_or_equal``() = validate (Floats.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;1;0; 1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44729,7 +44729,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray C.N.equals``() = + member _.``Floats.Collection.ArrayArray C.N.equals``() = validate (Floats.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44743,7 +44743,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray C.N.equal``() = + member _.``Floats.Collection.ArrayArray C.N.equal``() = validate (Floats.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44757,7 +44757,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray C.N.not_equal``() = + member _.``Floats.Collection.ArrayArray C.N.not_equal``() = validate (Floats.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -44771,7 +44771,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray C.N.compare``() = + member _.``Floats.Collection.ArrayArray C.N.compare``() = validate (Floats.Collection.ArrayArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;0;1; 1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -44785,7 +44785,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray C.N.less_than``() = + member _.``Floats.Collection.ArrayArray C.N.less_than``() = validate (Floats.Collection.ArrayArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;0;0; 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; @@ -44799,7 +44799,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray C.N.less_or_equal``() = + member _.``Floats.Collection.ArrayArray C.N.less_or_equal``() = validate (Floats.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1;0; 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -44813,7 +44813,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray C.N.greater_than``() = + member _.``Floats.Collection.ArrayArray C.N.greater_than``() = validate (Floats.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0; 1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -44827,7 +44827,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray C.N.greater_or_equal``() = + member _.``Floats.Collection.ArrayArray C.N.greater_or_equal``() = validate (Floats.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;1;0; 1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44841,7 +44841,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ListArray C.I.equals``() = + member _.``Floats.Collection.ListArray C.I.equals``() = validate (Floats.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44855,7 +44855,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ListArray C.I.equal``() = + member _.``Floats.Collection.ListArray C.I.equal``() = validate (Floats.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44869,7 +44869,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ListArray C.I.not_equal``() = + member _.``Floats.Collection.ListArray C.I.not_equal``() = validate (Floats.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -44883,7 +44883,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ListArray C.I.compare``() = + member _.``Floats.Collection.ListArray C.I.compare``() = validate (Floats.Collection.ListArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;1;1;1;-1;1;1;1;1;-1;0;1; 1;-1;1;1;-1;1;-1;-1;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -44897,7 +44897,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ListArray C.I.less_than``() = + member _.``Floats.Collection.ListArray C.I.less_than``() = validate (Floats.Collection.ListArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;0;0; 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1; @@ -44911,7 +44911,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ListArray C.I.less_or_equal``() = + member _.``Floats.Collection.ListArray C.I.less_or_equal``() = validate (Floats.Collection.ListArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;1;0; 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1; @@ -44925,7 +44925,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ListArray C.I.greater_than``() = + member _.``Floats.Collection.ListArray C.I.greater_than``() = validate (Floats.Collection.ListArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;0;0; 1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -44939,7 +44939,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ListArray C.I.greater_or_equal``() = + member _.``Floats.Collection.ListArray C.I.greater_or_equal``() = validate (Floats.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;1;0; 1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44953,7 +44953,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ListArray C.N.equals``() = + member _.``Floats.Collection.ListArray C.N.equals``() = validate (Floats.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44967,7 +44967,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ListArray C.N.equal``() = + member _.``Floats.Collection.ListArray C.N.equal``() = validate (Floats.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -44981,7 +44981,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ListArray C.N.not_equal``() = + member _.``Floats.Collection.ListArray C.N.not_equal``() = validate (Floats.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -44995,7 +44995,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ListArray C.N.compare``() = + member _.``Floats.Collection.ListArray C.N.compare``() = validate (Floats.Collection.ListArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;1;1;1;-1;1;1;1;1;-1;0;1; 1;-1;1;1;-1;1;-1;-1;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -45009,7 +45009,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ListArray C.N.less_than``() = + member _.``Floats.Collection.ListArray C.N.less_than``() = validate (Floats.Collection.ListArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;0;0; 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1; @@ -45023,7 +45023,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ListArray C.N.less_or_equal``() = + member _.``Floats.Collection.ListArray C.N.less_or_equal``() = validate (Floats.Collection.ListArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;1;0; 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1; @@ -45037,7 +45037,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ListArray C.N.greater_than``() = + member _.``Floats.Collection.ListArray C.N.greater_than``() = validate (Floats.Collection.ListArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;0;0; 1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -45051,7 +45051,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ListArray C.N.greater_or_equal``() = + member _.``Floats.Collection.ListArray C.N.greater_or_equal``() = validate (Floats.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;1;0; 1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -45065,7 +45065,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -45079,7 +45079,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -45093,7 +45093,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -45107,7 +45107,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;-1;0;1; 1;-1;1;1;-1;1;-1;1;1;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -45121,7 +45121,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; @@ -45135,7 +45135,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0; 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -45149,7 +45149,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1; 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -45163,7 +45163,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; @@ -45177,7 +45177,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -45191,7 +45191,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -45205,7 +45205,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -45219,7 +45219,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;-1;0;1; 1;-1;1;1;-1;1;-1;1;1;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -45233,7 +45233,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; @@ -45247,7 +45247,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0; 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -45261,7 +45261,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1; 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -45275,7 +45275,7 @@ type GeneratedTests () = |] [] - member __.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member _.``Floats.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Floats.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; @@ -45289,7 +45289,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.Array E.I.equals``() = + member _.``NullableFloats.Collection.Array E.I.equals``() = validate (NullableFloats.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45297,7 +45297,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.Array E.I.equal``() = + member _.``NullableFloats.Collection.Array E.I.equal``() = validate (NullableFloats.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45305,7 +45305,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.Array E.I.not_equal``() = + member _.``NullableFloats.Collection.Array E.I.not_equal``() = validate (NullableFloats.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -45313,7 +45313,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.Array E.N.equals``() = + member _.``NullableFloats.Collection.Array E.N.equals``() = validate (NullableFloats.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45321,7 +45321,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.Array E.N.equal``() = + member _.``NullableFloats.Collection.Array E.N.equal``() = validate (NullableFloats.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45329,7 +45329,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.Array E.N.not_equal``() = + member _.``NullableFloats.Collection.Array E.N.not_equal``() = validate (NullableFloats.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -45337,7 +45337,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.OptionArray E.I.equals``() = + member _.``NullableFloats.Collection.OptionArray E.I.equals``() = validate (NullableFloats.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -45346,7 +45346,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.OptionArray E.I.equal``() = + member _.``NullableFloats.Collection.OptionArray E.I.equal``() = validate (NullableFloats.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -45355,7 +45355,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.OptionArray E.I.not_equal``() = + member _.``NullableFloats.Collection.OptionArray E.I.not_equal``() = validate (NullableFloats.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -45364,7 +45364,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.OptionArray E.N.equals``() = + member _.``NullableFloats.Collection.OptionArray E.N.equals``() = validate (NullableFloats.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -45373,7 +45373,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.OptionArray E.N.equal``() = + member _.``NullableFloats.Collection.OptionArray E.N.equal``() = validate (NullableFloats.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -45382,7 +45382,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.OptionArray E.N.not_equal``() = + member _.``NullableFloats.Collection.OptionArray E.N.not_equal``() = validate (NullableFloats.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -45391,7 +45391,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.RefArray E.I.equals``() = + member _.``NullableFloats.Collection.RefArray E.I.equals``() = validate (NullableFloats.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45399,7 +45399,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.RefArray E.I.equal``() = + member _.``NullableFloats.Collection.RefArray E.I.equal``() = validate (NullableFloats.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45407,7 +45407,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.RefArray E.I.not_equal``() = + member _.``NullableFloats.Collection.RefArray E.I.not_equal``() = validate (NullableFloats.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -45415,7 +45415,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.RefArray E.N.equals``() = + member _.``NullableFloats.Collection.RefArray E.N.equals``() = validate (NullableFloats.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45423,7 +45423,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.RefArray E.N.equal``() = + member _.``NullableFloats.Collection.RefArray E.N.equal``() = validate (NullableFloats.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45431,7 +45431,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.RefArray E.N.not_equal``() = + member _.``NullableFloats.Collection.RefArray E.N.not_equal``() = validate (NullableFloats.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -45439,7 +45439,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.RefWrapArray E.I.equals``() = + member _.``NullableFloats.Collection.RefWrapArray E.I.equals``() = validate (NullableFloats.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45447,7 +45447,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.RefWrapArray E.I.equal``() = + member _.``NullableFloats.Collection.RefWrapArray E.I.equal``() = validate (NullableFloats.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45455,7 +45455,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.RefWrapArray E.I.not_equal``() = + member _.``NullableFloats.Collection.RefWrapArray E.I.not_equal``() = validate (NullableFloats.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -45463,7 +45463,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.RefWrapArray E.N.equals``() = + member _.``NullableFloats.Collection.RefWrapArray E.N.equals``() = validate (NullableFloats.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45471,7 +45471,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.RefWrapArray E.N.equal``() = + member _.``NullableFloats.Collection.RefWrapArray E.N.equal``() = validate (NullableFloats.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -45479,7 +45479,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.RefWrapArray E.N.not_equal``() = + member _.``NullableFloats.Collection.RefWrapArray E.N.not_equal``() = validate (NullableFloats.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -45487,7 +45487,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.UnionArray E.I.equals``() = + member _.``NullableFloats.Collection.UnionArray E.I.equals``() = validate (NullableFloats.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -45615,7 +45615,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.UnionArray E.I.equal``() = + member _.``NullableFloats.Collection.UnionArray E.I.equal``() = validate (NullableFloats.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -45743,7 +45743,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.UnionArray E.I.not_equal``() = + member _.``NullableFloats.Collection.UnionArray E.I.not_equal``() = validate (NullableFloats.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; @@ -45871,7 +45871,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.UnionArray E.N.equals``() = + member _.``NullableFloats.Collection.UnionArray E.N.equals``() = validate (NullableFloats.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -45999,7 +45999,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.UnionArray E.N.equal``() = + member _.``NullableFloats.Collection.UnionArray E.N.equal``() = validate (NullableFloats.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -46127,7 +46127,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.UnionArray E.N.not_equal``() = + member _.``NullableFloats.Collection.UnionArray E.N.not_equal``() = validate (NullableFloats.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; @@ -46255,7 +46255,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.UnionWrapArray E.I.equals``() = + member _.``NullableFloats.Collection.UnionWrapArray E.I.equals``() = validate (NullableFloats.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -46383,7 +46383,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.UnionWrapArray E.I.equal``() = + member _.``NullableFloats.Collection.UnionWrapArray E.I.equal``() = validate (NullableFloats.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -46511,7 +46511,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.UnionWrapArray E.I.not_equal``() = + member _.``NullableFloats.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableFloats.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; @@ -46639,7 +46639,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.UnionWrapArray E.N.equals``() = + member _.``NullableFloats.Collection.UnionWrapArray E.N.equals``() = validate (NullableFloats.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -46767,7 +46767,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.UnionWrapArray E.N.equal``() = + member _.``NullableFloats.Collection.UnionWrapArray E.N.equal``() = validate (NullableFloats.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -46895,7 +46895,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.UnionWrapArray E.N.not_equal``() = + member _.``NullableFloats.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableFloats.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; @@ -47023,7 +47023,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ValueArray E.I.equals``() = + member _.``NullableFloats.Collection.ValueArray E.I.equals``() = validate (NullableFloats.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47031,7 +47031,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ValueArray E.I.equal``() = + member _.``NullableFloats.Collection.ValueArray E.I.equal``() = validate (NullableFloats.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47039,7 +47039,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ValueArray E.I.not_equal``() = + member _.``NullableFloats.Collection.ValueArray E.I.not_equal``() = validate (NullableFloats.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -47047,7 +47047,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ValueArray E.N.equals``() = + member _.``NullableFloats.Collection.ValueArray E.N.equals``() = validate (NullableFloats.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47055,7 +47055,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ValueArray E.N.equal``() = + member _.``NullableFloats.Collection.ValueArray E.N.equal``() = validate (NullableFloats.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47063,7 +47063,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ValueArray E.N.not_equal``() = + member _.``NullableFloats.Collection.ValueArray E.N.not_equal``() = validate (NullableFloats.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -47071,7 +47071,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ValueWrapArray E.I.equals``() = + member _.``NullableFloats.Collection.ValueWrapArray E.I.equals``() = validate (NullableFloats.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47079,7 +47079,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ValueWrapArray E.I.equal``() = + member _.``NullableFloats.Collection.ValueWrapArray E.I.equal``() = validate (NullableFloats.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47087,7 +47087,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ValueWrapArray E.I.not_equal``() = + member _.``NullableFloats.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableFloats.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -47095,7 +47095,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ValueWrapArray E.N.equals``() = + member _.``NullableFloats.Collection.ValueWrapArray E.N.equals``() = validate (NullableFloats.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47103,7 +47103,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ValueWrapArray E.N.equal``() = + member _.``NullableFloats.Collection.ValueWrapArray E.N.equal``() = validate (NullableFloats.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47111,7 +47111,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ValueWrapArray E.N.not_equal``() = + member _.``NullableFloats.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableFloats.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -47119,7 +47119,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ArrayArray E.I.equals``() = + member _.``NullableFloats.Collection.ArrayArray E.I.equals``() = validate (NullableFloats.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -47134,7 +47134,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ArrayArray E.I.equal``() = + member _.``NullableFloats.Collection.ArrayArray E.I.equal``() = validate (NullableFloats.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -47149,7 +47149,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ArrayArray E.I.not_equal``() = + member _.``NullableFloats.Collection.ArrayArray E.I.not_equal``() = validate (NullableFloats.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -47164,7 +47164,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ArrayArray E.N.equals``() = + member _.``NullableFloats.Collection.ArrayArray E.N.equals``() = validate (NullableFloats.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -47179,7 +47179,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ArrayArray E.N.equal``() = + member _.``NullableFloats.Collection.ArrayArray E.N.equal``() = validate (NullableFloats.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -47194,7 +47194,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ArrayArray E.N.not_equal``() = + member _.``NullableFloats.Collection.ArrayArray E.N.not_equal``() = validate (NullableFloats.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -47209,7 +47209,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ListArray E.I.equals``() = + member _.``NullableFloats.Collection.ListArray E.I.equals``() = validate (NullableFloats.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -47224,7 +47224,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ListArray E.I.equal``() = + member _.``NullableFloats.Collection.ListArray E.I.equal``() = validate (NullableFloats.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -47239,7 +47239,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ListArray E.I.not_equal``() = + member _.``NullableFloats.Collection.ListArray E.I.not_equal``() = validate (NullableFloats.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -47254,7 +47254,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ListArray E.N.equals``() = + member _.``NullableFloats.Collection.ListArray E.N.equals``() = validate (NullableFloats.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -47269,7 +47269,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ListArray E.N.equal``() = + member _.``NullableFloats.Collection.ListArray E.N.equal``() = validate (NullableFloats.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -47284,7 +47284,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloats.Collection.ListArray E.N.not_equal``() = + member _.``NullableFloats.Collection.ListArray E.N.not_equal``() = validate (NullableFloats.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -47299,7 +47299,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.Array C.I.equals``() = + member _.``Float32s.Collection.Array C.I.equals``() = validate (Float32s.Collection.Array) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47307,7 +47307,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.Array C.I.equal``() = + member _.``Float32s.Collection.Array C.I.equal``() = validate (Float32s.Collection.Array) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47315,7 +47315,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.Array C.I.not_equal``() = + member _.``Float32s.Collection.Array C.I.not_equal``() = validate (Float32s.Collection.Array) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -47323,7 +47323,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.Array C.I.compare``() = + member _.``Float32s.Collection.Array C.I.compare``() = validate (Float32s.Collection.Array) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -47331,7 +47331,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.Array C.I.less_than``() = + member _.``Float32s.Collection.Array C.I.less_than``() = validate (Float32s.Collection.Array) C.I.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -47339,7 +47339,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.Array C.I.less_or_equal``() = + member _.``Float32s.Collection.Array C.I.less_or_equal``() = validate (Float32s.Collection.Array) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -47347,7 +47347,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.Array C.I.greater_than``() = + member _.``Float32s.Collection.Array C.I.greater_than``() = validate (Float32s.Collection.Array) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -47355,7 +47355,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.Array C.I.greater_or_equal``() = + member _.``Float32s.Collection.Array C.I.greater_or_equal``() = validate (Float32s.Collection.Array) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -47363,7 +47363,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.Array C.N.equals``() = + member _.``Float32s.Collection.Array C.N.equals``() = validate (Float32s.Collection.Array) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47371,7 +47371,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.Array C.N.equal``() = + member _.``Float32s.Collection.Array C.N.equal``() = validate (Float32s.Collection.Array) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47379,7 +47379,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.Array C.N.not_equal``() = + member _.``Float32s.Collection.Array C.N.not_equal``() = validate (Float32s.Collection.Array) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -47387,7 +47387,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.Array C.N.compare``() = + member _.``Float32s.Collection.Array C.N.compare``() = validate (Float32s.Collection.Array) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -47395,7 +47395,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.Array C.N.less_than``() = + member _.``Float32s.Collection.Array C.N.less_than``() = validate (Float32s.Collection.Array) C.N.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -47403,7 +47403,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.Array C.N.less_or_equal``() = + member _.``Float32s.Collection.Array C.N.less_or_equal``() = validate (Float32s.Collection.Array) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -47411,7 +47411,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.Array C.N.greater_than``() = + member _.``Float32s.Collection.Array C.N.greater_than``() = validate (Float32s.Collection.Array) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -47419,7 +47419,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.Array C.N.greater_or_equal``() = + member _.``Float32s.Collection.Array C.N.greater_or_equal``() = validate (Float32s.Collection.Array) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -47427,7 +47427,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.OptionArray C.I.equals``() = + member _.``Float32s.Collection.OptionArray C.I.equals``() = validate (Float32s.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47435,7 +47435,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.OptionArray C.I.equal``() = + member _.``Float32s.Collection.OptionArray C.I.equal``() = validate (Float32s.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47443,7 +47443,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.OptionArray C.I.not_equal``() = + member _.``Float32s.Collection.OptionArray C.I.not_equal``() = validate (Float32s.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -47451,7 +47451,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.OptionArray C.I.compare``() = + member _.``Float32s.Collection.OptionArray C.I.compare``() = validate (Float32s.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;1;-1;-1;-1;-1;1;1;0;1;1;1;-1;1;1;1;1;1;-1;0;1;1;-1;1;1;-1; 1;-1;-1;-1;0;-1;-1;-1;-1;-1;1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;-1;-1;1;1;-1;0;-1;-1; @@ -47459,7 +47459,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.OptionArray C.I.less_than``() = + member _.``Float32s.Collection.OptionArray C.I.less_than``() = validate (Float32s.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;1;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1; @@ -47467,7 +47467,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.OptionArray C.I.less_or_equal``() = + member _.``Float32s.Collection.OptionArray C.I.less_or_equal``() = validate (Float32s.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;1;1;0;0;1;1;1;1;0;0;1;0;0;0;1;0;0;0;0;0;1;1;0;0;1;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;1;1;1;1; @@ -47475,7 +47475,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.OptionArray C.I.greater_than``() = + member _.``Float32s.Collection.OptionArray C.I.greater_than``() = validate (Float32s.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;0;1;0;1;0;1;1;1;1;1;0;0;0;1;0;1;1;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;0;0;1;0;0;0;0; @@ -47483,7 +47483,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.OptionArray C.I.greater_or_equal``() = + member _.``Float32s.Collection.OptionArray C.I.greater_or_equal``() = validate (Float32s.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;1;0;1;0;1;1;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;1;0;1;0;0; @@ -47491,7 +47491,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.OptionArray C.N.equals``() = + member _.``Float32s.Collection.OptionArray C.N.equals``() = validate (Float32s.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47499,7 +47499,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.OptionArray C.N.equal``() = + member _.``Float32s.Collection.OptionArray C.N.equal``() = validate (Float32s.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -47507,7 +47507,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.OptionArray C.N.not_equal``() = + member _.``Float32s.Collection.OptionArray C.N.not_equal``() = validate (Float32s.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -47515,7 +47515,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.OptionArray C.N.compare``() = + member _.``Float32s.Collection.OptionArray C.N.compare``() = validate (Float32s.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;1;-1;-1;-1;-1;1;1;0;1;1;1;-1;1;1;1;1;1;-1;0;1;1;-1;1;1;-1; 1;-1;-1;-1;0;-1;-1;-1;-1;-1;1;-1;-1;-1;1;0;-1;-1;-1;-1;1;1;1;1;1;1;0;1;1;1;1;1;-1;-1;1;1;-1;0;-1;-1; @@ -47523,7 +47523,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.OptionArray C.N.less_than``() = + member _.``Float32s.Collection.OptionArray C.N.less_than``() = validate (Float32s.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;0;0;1;1;0;0;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;1;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1; @@ -47531,7 +47531,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.OptionArray C.N.less_or_equal``() = + member _.``Float32s.Collection.OptionArray C.N.less_or_equal``() = validate (Float32s.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;0;1;1;1;0;0;1;1;1;1;0;0;1;0;0;0;1;0;0;0;0;0;1;1;0;0;1;0;0;1; 0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0;1;1;0;0;1;1;1;1; @@ -47539,7 +47539,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.OptionArray C.N.greater_than``() = + member _.``Float32s.Collection.OptionArray C.N.greater_than``() = validate (Float32s.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;0;1;0;1;0;1;1;1;1;1;0;0;0;1;0;1;1;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;0;0;1;0;0;0;0; @@ -47547,7 +47547,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.OptionArray C.N.greater_or_equal``() = + member _.``Float32s.Collection.OptionArray C.N.greater_or_equal``() = validate (Float32s.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;1;1;0;0;0;1;0;0;0;0;1;1;1;1;0;1;0;1;1;1;1;1;0;1;0;1;0;1;1;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;1;1;1;0;1;1;1;1;1;1;1;0;0;0;1;0;1;0;0; @@ -47555,7 +47555,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefArray C.I.equals``() = + member _.``Float32s.Collection.RefArray C.I.equals``() = validate (Float32s.Collection.RefArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47563,7 +47563,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefArray C.I.equal``() = + member _.``Float32s.Collection.RefArray C.I.equal``() = validate (Float32s.Collection.RefArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47571,7 +47571,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefArray C.I.not_equal``() = + member _.``Float32s.Collection.RefArray C.I.not_equal``() = validate (Float32s.Collection.RefArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -47579,7 +47579,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefArray C.I.compare``() = + member _.``Float32s.Collection.RefArray C.I.compare``() = validate (Float32s.Collection.RefArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -47587,7 +47587,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefArray C.I.less_than``() = + member _.``Float32s.Collection.RefArray C.I.less_than``() = validate (Float32s.Collection.RefArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -47595,7 +47595,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefArray C.I.less_or_equal``() = + member _.``Float32s.Collection.RefArray C.I.less_or_equal``() = validate (Float32s.Collection.RefArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -47603,7 +47603,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefArray C.I.greater_than``() = + member _.``Float32s.Collection.RefArray C.I.greater_than``() = validate (Float32s.Collection.RefArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -47611,7 +47611,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefArray C.I.greater_or_equal``() = + member _.``Float32s.Collection.RefArray C.I.greater_or_equal``() = validate (Float32s.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -47619,7 +47619,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefArray C.N.equals``() = + member _.``Float32s.Collection.RefArray C.N.equals``() = validate (Float32s.Collection.RefArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47627,7 +47627,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefArray C.N.equal``() = + member _.``Float32s.Collection.RefArray C.N.equal``() = validate (Float32s.Collection.RefArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47635,7 +47635,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefArray C.N.not_equal``() = + member _.``Float32s.Collection.RefArray C.N.not_equal``() = validate (Float32s.Collection.RefArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -47643,7 +47643,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefArray C.N.compare``() = + member _.``Float32s.Collection.RefArray C.N.compare``() = validate (Float32s.Collection.RefArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -47651,7 +47651,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefArray C.N.less_than``() = + member _.``Float32s.Collection.RefArray C.N.less_than``() = validate (Float32s.Collection.RefArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -47659,7 +47659,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefArray C.N.less_or_equal``() = + member _.``Float32s.Collection.RefArray C.N.less_or_equal``() = validate (Float32s.Collection.RefArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -47667,7 +47667,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefArray C.N.greater_than``() = + member _.``Float32s.Collection.RefArray C.N.greater_than``() = validate (Float32s.Collection.RefArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -47675,7 +47675,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefArray C.N.greater_or_equal``() = + member _.``Float32s.Collection.RefArray C.N.greater_or_equal``() = validate (Float32s.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -47683,7 +47683,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefWrapArray C.I.equals``() = + member _.``Float32s.Collection.RefWrapArray C.I.equals``() = validate (Float32s.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47691,7 +47691,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefWrapArray C.I.equal``() = + member _.``Float32s.Collection.RefWrapArray C.I.equal``() = validate (Float32s.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47699,7 +47699,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefWrapArray C.I.not_equal``() = + member _.``Float32s.Collection.RefWrapArray C.I.not_equal``() = validate (Float32s.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -47707,7 +47707,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefWrapArray C.I.compare``() = + member _.``Float32s.Collection.RefWrapArray C.I.compare``() = validate (Float32s.Collection.RefWrapArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -47715,7 +47715,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefWrapArray C.I.less_than``() = + member _.``Float32s.Collection.RefWrapArray C.I.less_than``() = validate (Float32s.Collection.RefWrapArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -47723,7 +47723,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefWrapArray C.I.less_or_equal``() = + member _.``Float32s.Collection.RefWrapArray C.I.less_or_equal``() = validate (Float32s.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -47731,7 +47731,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefWrapArray C.I.greater_than``() = + member _.``Float32s.Collection.RefWrapArray C.I.greater_than``() = validate (Float32s.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -47739,7 +47739,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefWrapArray C.I.greater_or_equal``() = + member _.``Float32s.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Float32s.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -47747,7 +47747,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefWrapArray C.N.equals``() = + member _.``Float32s.Collection.RefWrapArray C.N.equals``() = validate (Float32s.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47755,7 +47755,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefWrapArray C.N.equal``() = + member _.``Float32s.Collection.RefWrapArray C.N.equal``() = validate (Float32s.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -47763,7 +47763,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefWrapArray C.N.not_equal``() = + member _.``Float32s.Collection.RefWrapArray C.N.not_equal``() = validate (Float32s.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -47771,7 +47771,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefWrapArray C.N.compare``() = + member _.``Float32s.Collection.RefWrapArray C.N.compare``() = validate (Float32s.Collection.RefWrapArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -47779,7 +47779,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefWrapArray C.N.less_than``() = + member _.``Float32s.Collection.RefWrapArray C.N.less_than``() = validate (Float32s.Collection.RefWrapArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -47787,7 +47787,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefWrapArray C.N.less_or_equal``() = + member _.``Float32s.Collection.RefWrapArray C.N.less_or_equal``() = validate (Float32s.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -47795,7 +47795,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefWrapArray C.N.greater_than``() = + member _.``Float32s.Collection.RefWrapArray C.N.greater_than``() = validate (Float32s.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -47803,7 +47803,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.RefWrapArray C.N.greater_or_equal``() = + member _.``Float32s.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Float32s.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -47811,7 +47811,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionArray C.I.equals``() = + member _.``Float32s.Collection.UnionArray C.I.equals``() = validate (Float32s.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -47916,7 +47916,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionArray C.I.equal``() = + member _.``Float32s.Collection.UnionArray C.I.equal``() = validate (Float32s.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -48021,7 +48021,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionArray C.I.not_equal``() = + member _.``Float32s.Collection.UnionArray C.I.not_equal``() = validate (Float32s.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -48126,7 +48126,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionArray C.I.compare``() = + member _.``Float32s.Collection.UnionArray C.I.compare``() = validate (Float32s.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -48231,7 +48231,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionArray C.I.less_than``() = + member _.``Float32s.Collection.UnionArray C.I.less_than``() = validate (Float32s.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -48336,7 +48336,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionArray C.I.less_or_equal``() = + member _.``Float32s.Collection.UnionArray C.I.less_or_equal``() = validate (Float32s.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -48441,7 +48441,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionArray C.I.greater_than``() = + member _.``Float32s.Collection.UnionArray C.I.greater_than``() = validate (Float32s.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -48546,7 +48546,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionArray C.I.greater_or_equal``() = + member _.``Float32s.Collection.UnionArray C.I.greater_or_equal``() = validate (Float32s.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -48651,7 +48651,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionArray C.N.equals``() = + member _.``Float32s.Collection.UnionArray C.N.equals``() = validate (Float32s.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -48756,7 +48756,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionArray C.N.equal``() = + member _.``Float32s.Collection.UnionArray C.N.equal``() = validate (Float32s.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -48861,7 +48861,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionArray C.N.not_equal``() = + member _.``Float32s.Collection.UnionArray C.N.not_equal``() = validate (Float32s.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -48966,7 +48966,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionArray C.N.compare``() = + member _.``Float32s.Collection.UnionArray C.N.compare``() = validate (Float32s.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -49071,7 +49071,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionArray C.N.less_than``() = + member _.``Float32s.Collection.UnionArray C.N.less_than``() = validate (Float32s.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -49176,7 +49176,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionArray C.N.less_or_equal``() = + member _.``Float32s.Collection.UnionArray C.N.less_or_equal``() = validate (Float32s.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -49281,7 +49281,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionArray C.N.greater_than``() = + member _.``Float32s.Collection.UnionArray C.N.greater_than``() = validate (Float32s.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -49386,7 +49386,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionArray C.N.greater_or_equal``() = + member _.``Float32s.Collection.UnionArray C.N.greater_or_equal``() = validate (Float32s.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -49491,7 +49491,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionWrapArray C.I.equals``() = + member _.``Float32s.Collection.UnionWrapArray C.I.equals``() = validate (Float32s.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -49596,7 +49596,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionWrapArray C.I.equal``() = + member _.``Float32s.Collection.UnionWrapArray C.I.equal``() = validate (Float32s.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -49701,7 +49701,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionWrapArray C.I.not_equal``() = + member _.``Float32s.Collection.UnionWrapArray C.I.not_equal``() = validate (Float32s.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -49806,7 +49806,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionWrapArray C.I.compare``() = + member _.``Float32s.Collection.UnionWrapArray C.I.compare``() = validate (Float32s.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -49911,7 +49911,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionWrapArray C.I.less_than``() = + member _.``Float32s.Collection.UnionWrapArray C.I.less_than``() = validate (Float32s.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -50016,7 +50016,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionWrapArray C.I.less_or_equal``() = + member _.``Float32s.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Float32s.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -50121,7 +50121,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionWrapArray C.I.greater_than``() = + member _.``Float32s.Collection.UnionWrapArray C.I.greater_than``() = validate (Float32s.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -50226,7 +50226,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionWrapArray C.I.greater_or_equal``() = + member _.``Float32s.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Float32s.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -50331,7 +50331,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionWrapArray C.N.equals``() = + member _.``Float32s.Collection.UnionWrapArray C.N.equals``() = validate (Float32s.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -50436,7 +50436,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionWrapArray C.N.equal``() = + member _.``Float32s.Collection.UnionWrapArray C.N.equal``() = validate (Float32s.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -50541,7 +50541,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionWrapArray C.N.not_equal``() = + member _.``Float32s.Collection.UnionWrapArray C.N.not_equal``() = validate (Float32s.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -50646,7 +50646,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionWrapArray C.N.compare``() = + member _.``Float32s.Collection.UnionWrapArray C.N.compare``() = validate (Float32s.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3; -3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1; @@ -50751,7 +50751,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionWrapArray C.N.less_than``() = + member _.``Float32s.Collection.UnionWrapArray C.N.less_than``() = validate (Float32s.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -50856,7 +50856,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionWrapArray C.N.less_or_equal``() = + member _.``Float32s.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Float32s.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1; @@ -50961,7 +50961,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionWrapArray C.N.greater_than``() = + member _.``Float32s.Collection.UnionWrapArray C.N.greater_than``() = validate (Float32s.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -51066,7 +51066,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.UnionWrapArray C.N.greater_or_equal``() = + member _.``Float32s.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Float32s.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0; @@ -51171,7 +51171,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueArray C.I.equals``() = + member _.``Float32s.Collection.ValueArray C.I.equals``() = validate (Float32s.Collection.ValueArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -51179,7 +51179,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueArray C.I.equal``() = + member _.``Float32s.Collection.ValueArray C.I.equal``() = validate (Float32s.Collection.ValueArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -51187,7 +51187,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueArray C.I.not_equal``() = + member _.``Float32s.Collection.ValueArray C.I.not_equal``() = validate (Float32s.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -51195,7 +51195,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueArray C.I.compare``() = + member _.``Float32s.Collection.ValueArray C.I.compare``() = validate (Float32s.Collection.ValueArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -51203,7 +51203,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueArray C.I.less_than``() = + member _.``Float32s.Collection.ValueArray C.I.less_than``() = validate (Float32s.Collection.ValueArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -51211,7 +51211,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueArray C.I.less_or_equal``() = + member _.``Float32s.Collection.ValueArray C.I.less_or_equal``() = validate (Float32s.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -51219,7 +51219,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueArray C.I.greater_than``() = + member _.``Float32s.Collection.ValueArray C.I.greater_than``() = validate (Float32s.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -51227,7 +51227,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueArray C.I.greater_or_equal``() = + member _.``Float32s.Collection.ValueArray C.I.greater_or_equal``() = validate (Float32s.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -51235,7 +51235,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueArray C.N.equals``() = + member _.``Float32s.Collection.ValueArray C.N.equals``() = validate (Float32s.Collection.ValueArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -51243,7 +51243,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueArray C.N.equal``() = + member _.``Float32s.Collection.ValueArray C.N.equal``() = validate (Float32s.Collection.ValueArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -51251,7 +51251,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueArray C.N.not_equal``() = + member _.``Float32s.Collection.ValueArray C.N.not_equal``() = validate (Float32s.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -51259,7 +51259,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueArray C.N.compare``() = + member _.``Float32s.Collection.ValueArray C.N.compare``() = validate (Float32s.Collection.ValueArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -51267,7 +51267,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueArray C.N.less_than``() = + member _.``Float32s.Collection.ValueArray C.N.less_than``() = validate (Float32s.Collection.ValueArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -51275,7 +51275,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueArray C.N.less_or_equal``() = + member _.``Float32s.Collection.ValueArray C.N.less_or_equal``() = validate (Float32s.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -51283,7 +51283,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueArray C.N.greater_than``() = + member _.``Float32s.Collection.ValueArray C.N.greater_than``() = validate (Float32s.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -51291,7 +51291,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueArray C.N.greater_or_equal``() = + member _.``Float32s.Collection.ValueArray C.N.greater_or_equal``() = validate (Float32s.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -51299,7 +51299,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueWrapArray C.I.equals``() = + member _.``Float32s.Collection.ValueWrapArray C.I.equals``() = validate (Float32s.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -51307,7 +51307,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueWrapArray C.I.equal``() = + member _.``Float32s.Collection.ValueWrapArray C.I.equal``() = validate (Float32s.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -51315,7 +51315,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueWrapArray C.I.not_equal``() = + member _.``Float32s.Collection.ValueWrapArray C.I.not_equal``() = validate (Float32s.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -51323,7 +51323,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueWrapArray C.I.compare``() = + member _.``Float32s.Collection.ValueWrapArray C.I.compare``() = validate (Float32s.Collection.ValueWrapArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -51331,7 +51331,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueWrapArray C.I.less_than``() = + member _.``Float32s.Collection.ValueWrapArray C.I.less_than``() = validate (Float32s.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -51339,7 +51339,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueWrapArray C.I.less_or_equal``() = + member _.``Float32s.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Float32s.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -51347,7 +51347,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueWrapArray C.I.greater_than``() = + member _.``Float32s.Collection.ValueWrapArray C.I.greater_than``() = validate (Float32s.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -51355,7 +51355,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueWrapArray C.I.greater_or_equal``() = + member _.``Float32s.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Float32s.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -51363,7 +51363,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueWrapArray C.N.equals``() = + member _.``Float32s.Collection.ValueWrapArray C.N.equals``() = validate (Float32s.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -51371,7 +51371,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueWrapArray C.N.equal``() = + member _.``Float32s.Collection.ValueWrapArray C.N.equal``() = validate (Float32s.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0; @@ -51379,7 +51379,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueWrapArray C.N.not_equal``() = + member _.``Float32s.Collection.ValueWrapArray C.N.not_equal``() = validate (Float32s.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1; @@ -51387,7 +51387,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueWrapArray C.N.compare``() = + member _.``Float32s.Collection.ValueWrapArray C.N.compare``() = validate (Float32s.Collection.ValueWrapArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;0;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;1; 0;-1;-1;-1;-1;1;1;1;1;1;0;1;1;1;1;-1;-1;1;1;-1;0;-1;-1;1;-1;-1;1;1;-1;1;0;-1;1;-1;1;1;1;-1;1;1; @@ -51395,7 +51395,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueWrapArray C.N.less_than``() = + member _.``Float32s.Collection.ValueWrapArray C.N.less_than``() = validate (Float32s.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;1;1;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;1;0;0;0;1;0;0; @@ -51403,7 +51403,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueWrapArray C.N.less_or_equal``() = + member _.``Float32s.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Float32s.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;1;1;1;0; 1;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;1;0;0;1;1;1;1;0;1;1;0;0;1;0;1;1;0;1;0;0;0;1;0;0; @@ -51411,7 +51411,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueWrapArray C.N.greater_than``() = + member _.``Float32s.Collection.ValueWrapArray C.N.greater_than``() = validate (Float32s.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;1;0;0;1;0;1;0;1;0;1;1; @@ -51419,7 +51419,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ValueWrapArray C.N.greater_or_equal``() = + member _.``Float32s.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Float32s.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 1;0;0;0;0;1;1;1;0;1;1;1;1;1;1;0;0;0;1;0;1;0;0;1;0;0;0;1;0;1;1;0;1;0;1;0;1;0;1;1; @@ -51427,7 +51427,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray C.I.equals``() = + member _.``Float32s.Collection.ArrayArray C.I.equals``() = validate (Float32s.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51441,7 +51441,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray C.I.equal``() = + member _.``Float32s.Collection.ArrayArray C.I.equal``() = validate (Float32s.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51455,7 +51455,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray C.I.not_equal``() = + member _.``Float32s.Collection.ArrayArray C.I.not_equal``() = validate (Float32s.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -51469,7 +51469,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray C.I.compare``() = + member _.``Float32s.Collection.ArrayArray C.I.compare``() = validate (Float32s.Collection.ArrayArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;0;1; 1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -51483,7 +51483,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray C.I.less_than``() = + member _.``Float32s.Collection.ArrayArray C.I.less_than``() = validate (Float32s.Collection.ArrayArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;0;0; 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; @@ -51497,7 +51497,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray C.I.less_or_equal``() = + member _.``Float32s.Collection.ArrayArray C.I.less_or_equal``() = validate (Float32s.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1;0; 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -51511,7 +51511,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray C.I.greater_than``() = + member _.``Float32s.Collection.ArrayArray C.I.greater_than``() = validate (Float32s.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0; 1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -51525,7 +51525,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray C.I.greater_or_equal``() = + member _.``Float32s.Collection.ArrayArray C.I.greater_or_equal``() = validate (Float32s.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;1;0; 1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51539,7 +51539,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray C.N.equals``() = + member _.``Float32s.Collection.ArrayArray C.N.equals``() = validate (Float32s.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51553,7 +51553,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray C.N.equal``() = + member _.``Float32s.Collection.ArrayArray C.N.equal``() = validate (Float32s.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51567,7 +51567,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray C.N.not_equal``() = + member _.``Float32s.Collection.ArrayArray C.N.not_equal``() = validate (Float32s.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -51581,7 +51581,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray C.N.compare``() = + member _.``Float32s.Collection.ArrayArray C.N.compare``() = validate (Float32s.Collection.ArrayArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;-1;0;1; 1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -51595,7 +51595,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray C.N.less_than``() = + member _.``Float32s.Collection.ArrayArray C.N.less_than``() = validate (Float32s.Collection.ArrayArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;0;0; 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; @@ -51609,7 +51609,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray C.N.less_or_equal``() = + member _.``Float32s.Collection.ArrayArray C.N.less_or_equal``() = validate (Float32s.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;0;0;0;1;0;0;0;1;1;1;1;1;1;1;1;1;0;1;1;0; 0;1;0;0;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -51623,7 +51623,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray C.N.greater_than``() = + member _.``Float32s.Collection.ArrayArray C.N.greater_than``() = validate (Float32s.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;0;0; 1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -51637,7 +51637,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray C.N.greater_or_equal``() = + member _.``Float32s.Collection.ArrayArray C.N.greater_or_equal``() = validate (Float32s.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;0;0;0;0;0;1;0;1;0; 1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51651,7 +51651,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ListArray C.I.equals``() = + member _.``Float32s.Collection.ListArray C.I.equals``() = validate (Float32s.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51665,7 +51665,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ListArray C.I.equal``() = + member _.``Float32s.Collection.ListArray C.I.equal``() = validate (Float32s.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51679,7 +51679,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ListArray C.I.not_equal``() = + member _.``Float32s.Collection.ListArray C.I.not_equal``() = validate (Float32s.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -51693,7 +51693,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ListArray C.I.compare``() = + member _.``Float32s.Collection.ListArray C.I.compare``() = validate (Float32s.Collection.ListArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;1;1;1;-1;1;1;1;1;-1;0;1; 1;-1;1;1;-1;1;-1;-1;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -51707,7 +51707,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ListArray C.I.less_than``() = + member _.``Float32s.Collection.ListArray C.I.less_than``() = validate (Float32s.Collection.ListArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;0;0; 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1; @@ -51721,7 +51721,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ListArray C.I.less_or_equal``() = + member _.``Float32s.Collection.ListArray C.I.less_or_equal``() = validate (Float32s.Collection.ListArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;1;0; 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1; @@ -51735,7 +51735,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ListArray C.I.greater_than``() = + member _.``Float32s.Collection.ListArray C.I.greater_than``() = validate (Float32s.Collection.ListArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;0;0; 1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -51749,7 +51749,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ListArray C.I.greater_or_equal``() = + member _.``Float32s.Collection.ListArray C.I.greater_or_equal``() = validate (Float32s.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;1;0; 1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51763,7 +51763,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ListArray C.N.equals``() = + member _.``Float32s.Collection.ListArray C.N.equals``() = validate (Float32s.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51777,7 +51777,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ListArray C.N.equal``() = + member _.``Float32s.Collection.ListArray C.N.equal``() = validate (Float32s.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51791,7 +51791,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ListArray C.N.not_equal``() = + member _.``Float32s.Collection.ListArray C.N.not_equal``() = validate (Float32s.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -51805,7 +51805,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ListArray C.N.compare``() = + member _.``Float32s.Collection.ListArray C.N.compare``() = validate (Float32s.Collection.ListArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;-1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;-1;1;1;1;-1;1;1;1;1;-1;0;1; 1;-1;1;1;-1;1;-1;-1;1;1;-1;1;1;-1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -51819,7 +51819,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ListArray C.N.less_than``() = + member _.``Float32s.Collection.ListArray C.N.less_than``() = validate (Float32s.Collection.ListArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;0;0; 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;0;1;1;1; @@ -51833,7 +51833,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ListArray C.N.less_or_equal``() = + member _.``Float32s.Collection.ListArray C.N.less_or_equal``() = validate (Float32s.Collection.ListArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;1;0;0;0;1;0;0;0;0;1;1;0; 0;1;0;0;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1; @@ -51847,7 +51847,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ListArray C.N.greater_than``() = + member _.``Float32s.Collection.ListArray C.N.greater_than``() = validate (Float32s.Collection.ListArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;0;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;0;0; 1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -51861,7 +51861,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ListArray C.N.greater_or_equal``() = + member _.``Float32s.Collection.ListArray C.N.greater_or_equal``() = validate (Float32s.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;0;1;0;1;1;1;1;0;1;0;1;0;1;1;1;1;0;1;0; 1;0;1;1;0;1;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51875,7 +51875,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51889,7 +51889,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -51903,7 +51903,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -51917,7 +51917,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;-1;0;1; 1;-1;1;1;-1;1;-1;1;1;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -51931,7 +51931,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; @@ -51945,7 +51945,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0; 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -51959,7 +51959,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1; 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -51973,7 +51973,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; @@ -51987,7 +51987,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -52001,7 +52001,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; @@ -52015,7 +52015,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; @@ -52029,7 +52029,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;1;1;-1;-1;-1;-1;-1;-1;1;1;1;-1;-1;-1;-1;1;0;1;1;1;-1;1;1;1;1;1;1;1;1;1;1;1;1;1;-1;0;1; 1;-1;1;1;-1;1;-1;1;1;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1; @@ -52043,7 +52043,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0; 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1; @@ -52057,7 +52057,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;0;0;1;1;1;1;1;1;0;0;0;1;1;1;1;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0; 0;1;0;0;1;0;1;0;0;0;0;0;0;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1; @@ -52071,7 +52071,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;0;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1; 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0; @@ -52085,7 +52085,7 @@ type GeneratedTests () = |] [] - member __.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member _.``Float32s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Float32s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;1;1;0;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1; 1;0;1;1;0;1;0;1;1;1;1;1;1;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0; @@ -52099,7 +52099,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.Array E.I.equals``() = + member _.``NullableFloat32s.Collection.Array E.I.equals``() = validate (NullableFloat32s.Collection.Array) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52107,7 +52107,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.Array E.I.equal``() = + member _.``NullableFloat32s.Collection.Array E.I.equal``() = validate (NullableFloat32s.Collection.Array) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52115,7 +52115,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.Array E.I.not_equal``() = + member _.``NullableFloat32s.Collection.Array E.I.not_equal``() = validate (NullableFloat32s.Collection.Array) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -52123,7 +52123,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.Array E.N.equals``() = + member _.``NullableFloat32s.Collection.Array E.N.equals``() = validate (NullableFloat32s.Collection.Array) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52131,7 +52131,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.Array E.N.equal``() = + member _.``NullableFloat32s.Collection.Array E.N.equal``() = validate (NullableFloat32s.Collection.Array) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52139,7 +52139,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.Array E.N.not_equal``() = + member _.``NullableFloat32s.Collection.Array E.N.not_equal``() = validate (NullableFloat32s.Collection.Array) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -52147,7 +52147,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.OptionArray E.I.equals``() = + member _.``NullableFloat32s.Collection.OptionArray E.I.equals``() = validate (NullableFloat32s.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -52156,7 +52156,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.OptionArray E.I.equal``() = + member _.``NullableFloat32s.Collection.OptionArray E.I.equal``() = validate (NullableFloat32s.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -52165,7 +52165,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.OptionArray E.I.not_equal``() = + member _.``NullableFloat32s.Collection.OptionArray E.I.not_equal``() = validate (NullableFloat32s.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -52174,7 +52174,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.OptionArray E.N.equals``() = + member _.``NullableFloat32s.Collection.OptionArray E.N.equals``() = validate (NullableFloat32s.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -52183,7 +52183,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.OptionArray E.N.equal``() = + member _.``NullableFloat32s.Collection.OptionArray E.N.equal``() = validate (NullableFloat32s.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0; @@ -52192,7 +52192,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.OptionArray E.N.not_equal``() = + member _.``NullableFloat32s.Collection.OptionArray E.N.not_equal``() = validate (NullableFloat32s.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1; @@ -52201,7 +52201,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.RefArray E.I.equals``() = + member _.``NullableFloat32s.Collection.RefArray E.I.equals``() = validate (NullableFloat32s.Collection.RefArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52209,7 +52209,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.RefArray E.I.equal``() = + member _.``NullableFloat32s.Collection.RefArray E.I.equal``() = validate (NullableFloat32s.Collection.RefArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52217,7 +52217,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.RefArray E.I.not_equal``() = + member _.``NullableFloat32s.Collection.RefArray E.I.not_equal``() = validate (NullableFloat32s.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -52225,7 +52225,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.RefArray E.N.equals``() = + member _.``NullableFloat32s.Collection.RefArray E.N.equals``() = validate (NullableFloat32s.Collection.RefArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52233,7 +52233,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.RefArray E.N.equal``() = + member _.``NullableFloat32s.Collection.RefArray E.N.equal``() = validate (NullableFloat32s.Collection.RefArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52241,7 +52241,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.RefArray E.N.not_equal``() = + member _.``NullableFloat32s.Collection.RefArray E.N.not_equal``() = validate (NullableFloat32s.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -52249,7 +52249,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.RefWrapArray E.I.equals``() = + member _.``NullableFloat32s.Collection.RefWrapArray E.I.equals``() = validate (NullableFloat32s.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52257,7 +52257,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.RefWrapArray E.I.equal``() = + member _.``NullableFloat32s.Collection.RefWrapArray E.I.equal``() = validate (NullableFloat32s.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52265,7 +52265,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.RefWrapArray E.I.not_equal``() = + member _.``NullableFloat32s.Collection.RefWrapArray E.I.not_equal``() = validate (NullableFloat32s.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -52273,7 +52273,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.RefWrapArray E.N.equals``() = + member _.``NullableFloat32s.Collection.RefWrapArray E.N.equals``() = validate (NullableFloat32s.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52281,7 +52281,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.RefWrapArray E.N.equal``() = + member _.``NullableFloat32s.Collection.RefWrapArray E.N.equal``() = validate (NullableFloat32s.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -52289,7 +52289,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.RefWrapArray E.N.not_equal``() = + member _.``NullableFloat32s.Collection.RefWrapArray E.N.not_equal``() = validate (NullableFloat32s.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -52297,7 +52297,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.UnionArray E.I.equals``() = + member _.``NullableFloat32s.Collection.UnionArray E.I.equals``() = validate (NullableFloat32s.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -52425,7 +52425,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.UnionArray E.I.equal``() = + member _.``NullableFloat32s.Collection.UnionArray E.I.equal``() = validate (NullableFloat32s.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -52553,7 +52553,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.UnionArray E.I.not_equal``() = + member _.``NullableFloat32s.Collection.UnionArray E.I.not_equal``() = validate (NullableFloat32s.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; @@ -52681,7 +52681,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.UnionArray E.N.equals``() = + member _.``NullableFloat32s.Collection.UnionArray E.N.equals``() = validate (NullableFloat32s.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -52809,7 +52809,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.UnionArray E.N.equal``() = + member _.``NullableFloat32s.Collection.UnionArray E.N.equal``() = validate (NullableFloat32s.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -52937,7 +52937,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.UnionArray E.N.not_equal``() = + member _.``NullableFloat32s.Collection.UnionArray E.N.not_equal``() = validate (NullableFloat32s.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; @@ -53065,7 +53065,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.UnionWrapArray E.I.equals``() = + member _.``NullableFloat32s.Collection.UnionWrapArray E.I.equals``() = validate (NullableFloat32s.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -53193,7 +53193,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.UnionWrapArray E.I.equal``() = + member _.``NullableFloat32s.Collection.UnionWrapArray E.I.equal``() = validate (NullableFloat32s.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -53321,7 +53321,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.UnionWrapArray E.I.not_equal``() = + member _.``NullableFloat32s.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableFloat32s.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; @@ -53449,7 +53449,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.UnionWrapArray E.N.equals``() = + member _.``NullableFloat32s.Collection.UnionWrapArray E.N.equals``() = validate (NullableFloat32s.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -53577,7 +53577,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.UnionWrapArray E.N.equal``() = + member _.``NullableFloat32s.Collection.UnionWrapArray E.N.equal``() = validate (NullableFloat32s.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; @@ -53705,7 +53705,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.UnionWrapArray E.N.not_equal``() = + member _.``NullableFloat32s.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableFloat32s.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1; @@ -53833,7 +53833,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ValueArray E.I.equals``() = + member _.``NullableFloat32s.Collection.ValueArray E.I.equals``() = validate (NullableFloat32s.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -53841,7 +53841,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ValueArray E.I.equal``() = + member _.``NullableFloat32s.Collection.ValueArray E.I.equal``() = validate (NullableFloat32s.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -53849,7 +53849,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ValueArray E.I.not_equal``() = + member _.``NullableFloat32s.Collection.ValueArray E.I.not_equal``() = validate (NullableFloat32s.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -53857,7 +53857,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ValueArray E.N.equals``() = + member _.``NullableFloat32s.Collection.ValueArray E.N.equals``() = validate (NullableFloat32s.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -53865,7 +53865,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ValueArray E.N.equal``() = + member _.``NullableFloat32s.Collection.ValueArray E.N.equal``() = validate (NullableFloat32s.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -53873,7 +53873,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ValueArray E.N.not_equal``() = + member _.``NullableFloat32s.Collection.ValueArray E.N.not_equal``() = validate (NullableFloat32s.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -53881,7 +53881,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ValueWrapArray E.I.equals``() = + member _.``NullableFloat32s.Collection.ValueWrapArray E.I.equals``() = validate (NullableFloat32s.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -53889,7 +53889,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ValueWrapArray E.I.equal``() = + member _.``NullableFloat32s.Collection.ValueWrapArray E.I.equal``() = validate (NullableFloat32s.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -53897,7 +53897,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ValueWrapArray E.I.not_equal``() = + member _.``NullableFloat32s.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableFloat32s.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -53905,7 +53905,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ValueWrapArray E.N.equals``() = + member _.``NullableFloat32s.Collection.ValueWrapArray E.N.equals``() = validate (NullableFloat32s.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -53913,7 +53913,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ValueWrapArray E.N.equal``() = + member _.``NullableFloat32s.Collection.ValueWrapArray E.N.equal``() = validate (NullableFloat32s.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;1;0;0; @@ -53921,7 +53921,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ValueWrapArray E.N.not_equal``() = + member _.``NullableFloat32s.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableFloat32s.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;0;1;1; @@ -53929,7 +53929,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ArrayArray E.I.equals``() = + member _.``NullableFloat32s.Collection.ArrayArray E.I.equals``() = validate (NullableFloat32s.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -53944,7 +53944,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ArrayArray E.I.equal``() = + member _.``NullableFloat32s.Collection.ArrayArray E.I.equal``() = validate (NullableFloat32s.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -53959,7 +53959,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ArrayArray E.I.not_equal``() = + member _.``NullableFloat32s.Collection.ArrayArray E.I.not_equal``() = validate (NullableFloat32s.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -53974,7 +53974,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ArrayArray E.N.equals``() = + member _.``NullableFloat32s.Collection.ArrayArray E.N.equals``() = validate (NullableFloat32s.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -53989,7 +53989,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ArrayArray E.N.equal``() = + member _.``NullableFloat32s.Collection.ArrayArray E.N.equal``() = validate (NullableFloat32s.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54004,7 +54004,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ArrayArray E.N.not_equal``() = + member _.``NullableFloat32s.Collection.ArrayArray E.N.not_equal``() = validate (NullableFloat32s.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -54019,7 +54019,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ListArray E.I.equals``() = + member _.``NullableFloat32s.Collection.ListArray E.I.equals``() = validate (NullableFloat32s.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54034,7 +54034,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ListArray E.I.equal``() = + member _.``NullableFloat32s.Collection.ListArray E.I.equal``() = validate (NullableFloat32s.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54049,7 +54049,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ListArray E.I.not_equal``() = + member _.``NullableFloat32s.Collection.ListArray E.I.not_equal``() = validate (NullableFloat32s.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -54064,7 +54064,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ListArray E.N.equals``() = + member _.``NullableFloat32s.Collection.ListArray E.N.equals``() = validate (NullableFloat32s.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54079,7 +54079,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ListArray E.N.equal``() = + member _.``NullableFloat32s.Collection.ListArray E.N.equal``() = validate (NullableFloat32s.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54094,7 +54094,7 @@ type GeneratedTests () = |] [] - member __.``NullableFloat32s.Collection.ListArray E.N.not_equal``() = + member _.``NullableFloat32s.Collection.ListArray E.N.not_equal``() = validate (NullableFloat32s.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -54109,391 +54109,391 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.Array C.I.equals``() = + member _.``DateTimes.Collection.Array C.I.equals``() = validate (DateTimes.Collection.Array) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``DateTimes.Collection.Array C.I.equal``() = + member _.``DateTimes.Collection.Array C.I.equal``() = validate (DateTimes.Collection.Array) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``DateTimes.Collection.Array C.I.not_equal``() = + member _.``DateTimes.Collection.Array C.I.not_equal``() = validate (DateTimes.Collection.Array) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``DateTimes.Collection.Array C.I.compare``() = + member _.``DateTimes.Collection.Array C.I.compare``() = validate (DateTimes.Collection.Array) C.I.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member __.``DateTimes.Collection.Array C.I.less_than``() = + member _.``DateTimes.Collection.Array C.I.less_than``() = validate (DateTimes.Collection.Array) C.I.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member __.``DateTimes.Collection.Array C.I.less_or_equal``() = + member _.``DateTimes.Collection.Array C.I.less_or_equal``() = validate (DateTimes.Collection.Array) C.I.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member __.``DateTimes.Collection.Array C.I.greater_than``() = + member _.``DateTimes.Collection.Array C.I.greater_than``() = validate (DateTimes.Collection.Array) C.I.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member __.``DateTimes.Collection.Array C.I.greater_or_equal``() = + member _.``DateTimes.Collection.Array C.I.greater_or_equal``() = validate (DateTimes.Collection.Array) C.I.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member __.``DateTimes.Collection.Array C.N.equals``() = + member _.``DateTimes.Collection.Array C.N.equals``() = validate (DateTimes.Collection.Array) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``DateTimes.Collection.Array C.N.equal``() = + member _.``DateTimes.Collection.Array C.N.equal``() = validate (DateTimes.Collection.Array) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``DateTimes.Collection.Array C.N.not_equal``() = + member _.``DateTimes.Collection.Array C.N.not_equal``() = validate (DateTimes.Collection.Array) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``DateTimes.Collection.Array C.N.compare``() = + member _.``DateTimes.Collection.Array C.N.compare``() = validate (DateTimes.Collection.Array) C.N.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member __.``DateTimes.Collection.Array C.N.less_than``() = + member _.``DateTimes.Collection.Array C.N.less_than``() = validate (DateTimes.Collection.Array) C.N.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member __.``DateTimes.Collection.Array C.N.less_or_equal``() = + member _.``DateTimes.Collection.Array C.N.less_or_equal``() = validate (DateTimes.Collection.Array) C.N.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member __.``DateTimes.Collection.Array C.N.greater_than``() = + member _.``DateTimes.Collection.Array C.N.greater_than``() = validate (DateTimes.Collection.Array) C.N.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member __.``DateTimes.Collection.Array C.N.greater_or_equal``() = + member _.``DateTimes.Collection.Array C.N.greater_or_equal``() = validate (DateTimes.Collection.Array) C.N.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member __.``DateTimes.Collection.OptionArray C.I.equals``() = + member _.``DateTimes.Collection.OptionArray C.I.equals``() = validate (DateTimes.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``DateTimes.Collection.OptionArray C.I.equal``() = + member _.``DateTimes.Collection.OptionArray C.I.equal``() = validate (DateTimes.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``DateTimes.Collection.OptionArray C.I.not_equal``() = + member _.``DateTimes.Collection.OptionArray C.I.not_equal``() = validate (DateTimes.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``DateTimes.Collection.OptionArray C.I.compare``() = + member _.``DateTimes.Collection.OptionArray C.I.compare``() = validate (DateTimes.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;1;1;1;-1;0 |] [] - member __.``DateTimes.Collection.OptionArray C.I.less_than``() = + member _.``DateTimes.Collection.OptionArray C.I.less_than``() = validate (DateTimes.Collection.OptionArray) C.I.less_than [| 0;1;1;1;0;0;1;1;0;0;0;0;0;0;1;0 |] [] - member __.``DateTimes.Collection.OptionArray C.I.less_or_equal``() = + member _.``DateTimes.Collection.OptionArray C.I.less_or_equal``() = validate (DateTimes.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;0;1;1;1;0;0;1;0;0;0;1;1 |] [] - member __.``DateTimes.Collection.OptionArray C.I.greater_than``() = + member _.``DateTimes.Collection.OptionArray C.I.greater_than``() = validate (DateTimes.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;1;0;0;0;1;1;0;1;1;1;0;0 |] [] - member __.``DateTimes.Collection.OptionArray C.I.greater_or_equal``() = + member _.``DateTimes.Collection.OptionArray C.I.greater_or_equal``() = validate (DateTimes.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;1;1;0;0;1;1;1;1;1;1;0;1 |] [] - member __.``DateTimes.Collection.OptionArray C.N.equals``() = + member _.``DateTimes.Collection.OptionArray C.N.equals``() = validate (DateTimes.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``DateTimes.Collection.OptionArray C.N.equal``() = + member _.``DateTimes.Collection.OptionArray C.N.equal``() = validate (DateTimes.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``DateTimes.Collection.OptionArray C.N.not_equal``() = + member _.``DateTimes.Collection.OptionArray C.N.not_equal``() = validate (DateTimes.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``DateTimes.Collection.OptionArray C.N.compare``() = + member _.``DateTimes.Collection.OptionArray C.N.compare``() = validate (DateTimes.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;1;1;1;-1;0 |] [] - member __.``DateTimes.Collection.OptionArray C.N.less_than``() = + member _.``DateTimes.Collection.OptionArray C.N.less_than``() = validate (DateTimes.Collection.OptionArray) C.N.less_than [| 0;1;1;1;0;0;1;1;0;0;0;0;0;0;1;0 |] [] - member __.``DateTimes.Collection.OptionArray C.N.less_or_equal``() = + member _.``DateTimes.Collection.OptionArray C.N.less_or_equal``() = validate (DateTimes.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;0;1;1;1;0;0;1;0;0;0;1;1 |] [] - member __.``DateTimes.Collection.OptionArray C.N.greater_than``() = + member _.``DateTimes.Collection.OptionArray C.N.greater_than``() = validate (DateTimes.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;1;0;0;0;1;1;0;1;1;1;0;0 |] [] - member __.``DateTimes.Collection.OptionArray C.N.greater_or_equal``() = + member _.``DateTimes.Collection.OptionArray C.N.greater_or_equal``() = validate (DateTimes.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;1;1;0;0;1;1;1;1;1;1;0;1 |] [] - member __.``DateTimes.Collection.RefArray C.I.equals``() = + member _.``DateTimes.Collection.RefArray C.I.equals``() = validate (DateTimes.Collection.RefArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``DateTimes.Collection.RefArray C.I.equal``() = + member _.``DateTimes.Collection.RefArray C.I.equal``() = validate (DateTimes.Collection.RefArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``DateTimes.Collection.RefArray C.I.not_equal``() = + member _.``DateTimes.Collection.RefArray C.I.not_equal``() = validate (DateTimes.Collection.RefArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``DateTimes.Collection.RefArray C.I.compare``() = + member _.``DateTimes.Collection.RefArray C.I.compare``() = validate (DateTimes.Collection.RefArray) C.I.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member __.``DateTimes.Collection.RefArray C.I.less_than``() = + member _.``DateTimes.Collection.RefArray C.I.less_than``() = validate (DateTimes.Collection.RefArray) C.I.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member __.``DateTimes.Collection.RefArray C.I.less_or_equal``() = + member _.``DateTimes.Collection.RefArray C.I.less_or_equal``() = validate (DateTimes.Collection.RefArray) C.I.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member __.``DateTimes.Collection.RefArray C.I.greater_than``() = + member _.``DateTimes.Collection.RefArray C.I.greater_than``() = validate (DateTimes.Collection.RefArray) C.I.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member __.``DateTimes.Collection.RefArray C.I.greater_or_equal``() = + member _.``DateTimes.Collection.RefArray C.I.greater_or_equal``() = validate (DateTimes.Collection.RefArray) C.I.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member __.``DateTimes.Collection.RefArray C.N.equals``() = + member _.``DateTimes.Collection.RefArray C.N.equals``() = validate (DateTimes.Collection.RefArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``DateTimes.Collection.RefArray C.N.equal``() = + member _.``DateTimes.Collection.RefArray C.N.equal``() = validate (DateTimes.Collection.RefArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``DateTimes.Collection.RefArray C.N.not_equal``() = + member _.``DateTimes.Collection.RefArray C.N.not_equal``() = validate (DateTimes.Collection.RefArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``DateTimes.Collection.RefArray C.N.compare``() = + member _.``DateTimes.Collection.RefArray C.N.compare``() = validate (DateTimes.Collection.RefArray) C.N.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member __.``DateTimes.Collection.RefArray C.N.less_than``() = + member _.``DateTimes.Collection.RefArray C.N.less_than``() = validate (DateTimes.Collection.RefArray) C.N.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member __.``DateTimes.Collection.RefArray C.N.less_or_equal``() = + member _.``DateTimes.Collection.RefArray C.N.less_or_equal``() = validate (DateTimes.Collection.RefArray) C.N.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member __.``DateTimes.Collection.RefArray C.N.greater_than``() = + member _.``DateTimes.Collection.RefArray C.N.greater_than``() = validate (DateTimes.Collection.RefArray) C.N.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member __.``DateTimes.Collection.RefArray C.N.greater_or_equal``() = + member _.``DateTimes.Collection.RefArray C.N.greater_or_equal``() = validate (DateTimes.Collection.RefArray) C.N.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member __.``DateTimes.Collection.RefWrapArray C.I.equals``() = + member _.``DateTimes.Collection.RefWrapArray C.I.equals``() = validate (DateTimes.Collection.RefWrapArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``DateTimes.Collection.RefWrapArray C.I.equal``() = + member _.``DateTimes.Collection.RefWrapArray C.I.equal``() = validate (DateTimes.Collection.RefWrapArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``DateTimes.Collection.RefWrapArray C.I.not_equal``() = + member _.``DateTimes.Collection.RefWrapArray C.I.not_equal``() = validate (DateTimes.Collection.RefWrapArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``DateTimes.Collection.RefWrapArray C.I.compare``() = + member _.``DateTimes.Collection.RefWrapArray C.I.compare``() = validate (DateTimes.Collection.RefWrapArray) C.I.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member __.``DateTimes.Collection.RefWrapArray C.I.less_than``() = + member _.``DateTimes.Collection.RefWrapArray C.I.less_than``() = validate (DateTimes.Collection.RefWrapArray) C.I.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member __.``DateTimes.Collection.RefWrapArray C.I.less_or_equal``() = + member _.``DateTimes.Collection.RefWrapArray C.I.less_or_equal``() = validate (DateTimes.Collection.RefWrapArray) C.I.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member __.``DateTimes.Collection.RefWrapArray C.I.greater_than``() = + member _.``DateTimes.Collection.RefWrapArray C.I.greater_than``() = validate (DateTimes.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member __.``DateTimes.Collection.RefWrapArray C.I.greater_or_equal``() = + member _.``DateTimes.Collection.RefWrapArray C.I.greater_or_equal``() = validate (DateTimes.Collection.RefWrapArray) C.I.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member __.``DateTimes.Collection.RefWrapArray C.N.equals``() = + member _.``DateTimes.Collection.RefWrapArray C.N.equals``() = validate (DateTimes.Collection.RefWrapArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``DateTimes.Collection.RefWrapArray C.N.equal``() = + member _.``DateTimes.Collection.RefWrapArray C.N.equal``() = validate (DateTimes.Collection.RefWrapArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``DateTimes.Collection.RefWrapArray C.N.not_equal``() = + member _.``DateTimes.Collection.RefWrapArray C.N.not_equal``() = validate (DateTimes.Collection.RefWrapArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``DateTimes.Collection.RefWrapArray C.N.compare``() = + member _.``DateTimes.Collection.RefWrapArray C.N.compare``() = validate (DateTimes.Collection.RefWrapArray) C.N.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member __.``DateTimes.Collection.RefWrapArray C.N.less_than``() = + member _.``DateTimes.Collection.RefWrapArray C.N.less_than``() = validate (DateTimes.Collection.RefWrapArray) C.N.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member __.``DateTimes.Collection.RefWrapArray C.N.less_or_equal``() = + member _.``DateTimes.Collection.RefWrapArray C.N.less_or_equal``() = validate (DateTimes.Collection.RefWrapArray) C.N.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member __.``DateTimes.Collection.RefWrapArray C.N.greater_than``() = + member _.``DateTimes.Collection.RefWrapArray C.N.greater_than``() = validate (DateTimes.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member __.``DateTimes.Collection.RefWrapArray C.N.greater_or_equal``() = + member _.``DateTimes.Collection.RefWrapArray C.N.greater_or_equal``() = validate (DateTimes.Collection.RefWrapArray) C.N.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member __.``DateTimes.Collection.UnionArray C.I.equals``() = + member _.``DateTimes.Collection.UnionArray C.I.equals``() = validate (DateTimes.Collection.UnionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54510,7 +54510,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionArray C.I.equal``() = + member _.``DateTimes.Collection.UnionArray C.I.equal``() = validate (DateTimes.Collection.UnionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54527,7 +54527,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionArray C.I.not_equal``() = + member _.``DateTimes.Collection.UnionArray C.I.not_equal``() = validate (DateTimes.Collection.UnionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -54544,7 +54544,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionArray C.I.compare``() = + member _.``DateTimes.Collection.UnionArray C.I.compare``() = validate (DateTimes.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -54561,7 +54561,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionArray C.I.less_than``() = + member _.``DateTimes.Collection.UnionArray C.I.less_than``() = validate (DateTimes.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -54578,7 +54578,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionArray C.I.less_or_equal``() = + member _.``DateTimes.Collection.UnionArray C.I.less_or_equal``() = validate (DateTimes.Collection.UnionArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -54595,7 +54595,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionArray C.I.greater_than``() = + member _.``DateTimes.Collection.UnionArray C.I.greater_than``() = validate (DateTimes.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -54612,7 +54612,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionArray C.I.greater_or_equal``() = + member _.``DateTimes.Collection.UnionArray C.I.greater_or_equal``() = validate (DateTimes.Collection.UnionArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -54629,7 +54629,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionArray C.N.equals``() = + member _.``DateTimes.Collection.UnionArray C.N.equals``() = validate (DateTimes.Collection.UnionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54646,7 +54646,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionArray C.N.equal``() = + member _.``DateTimes.Collection.UnionArray C.N.equal``() = validate (DateTimes.Collection.UnionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54663,7 +54663,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionArray C.N.not_equal``() = + member _.``DateTimes.Collection.UnionArray C.N.not_equal``() = validate (DateTimes.Collection.UnionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -54680,7 +54680,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionArray C.N.compare``() = + member _.``DateTimes.Collection.UnionArray C.N.compare``() = validate (DateTimes.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -54697,7 +54697,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionArray C.N.less_than``() = + member _.``DateTimes.Collection.UnionArray C.N.less_than``() = validate (DateTimes.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -54714,7 +54714,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionArray C.N.less_or_equal``() = + member _.``DateTimes.Collection.UnionArray C.N.less_or_equal``() = validate (DateTimes.Collection.UnionArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -54731,7 +54731,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionArray C.N.greater_than``() = + member _.``DateTimes.Collection.UnionArray C.N.greater_than``() = validate (DateTimes.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -54748,7 +54748,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionArray C.N.greater_or_equal``() = + member _.``DateTimes.Collection.UnionArray C.N.greater_or_equal``() = validate (DateTimes.Collection.UnionArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -54765,7 +54765,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionWrapArray C.I.equals``() = + member _.``DateTimes.Collection.UnionWrapArray C.I.equals``() = validate (DateTimes.Collection.UnionWrapArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54782,7 +54782,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionWrapArray C.I.equal``() = + member _.``DateTimes.Collection.UnionWrapArray C.I.equal``() = validate (DateTimes.Collection.UnionWrapArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54799,7 +54799,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionWrapArray C.I.not_equal``() = + member _.``DateTimes.Collection.UnionWrapArray C.I.not_equal``() = validate (DateTimes.Collection.UnionWrapArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -54816,7 +54816,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionWrapArray C.I.compare``() = + member _.``DateTimes.Collection.UnionWrapArray C.I.compare``() = validate (DateTimes.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -54833,7 +54833,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionWrapArray C.I.less_than``() = + member _.``DateTimes.Collection.UnionWrapArray C.I.less_than``() = validate (DateTimes.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -54850,7 +54850,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionWrapArray C.I.less_or_equal``() = + member _.``DateTimes.Collection.UnionWrapArray C.I.less_or_equal``() = validate (DateTimes.Collection.UnionWrapArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -54867,7 +54867,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionWrapArray C.I.greater_than``() = + member _.``DateTimes.Collection.UnionWrapArray C.I.greater_than``() = validate (DateTimes.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -54884,7 +54884,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionWrapArray C.I.greater_or_equal``() = + member _.``DateTimes.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (DateTimes.Collection.UnionWrapArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -54901,7 +54901,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionWrapArray C.N.equals``() = + member _.``DateTimes.Collection.UnionWrapArray C.N.equals``() = validate (DateTimes.Collection.UnionWrapArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54918,7 +54918,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionWrapArray C.N.equal``() = + member _.``DateTimes.Collection.UnionWrapArray C.N.equal``() = validate (DateTimes.Collection.UnionWrapArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -54935,7 +54935,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionWrapArray C.N.not_equal``() = + member _.``DateTimes.Collection.UnionWrapArray C.N.not_equal``() = validate (DateTimes.Collection.UnionWrapArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -54952,7 +54952,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionWrapArray C.N.compare``() = + member _.``DateTimes.Collection.UnionWrapArray C.N.compare``() = validate (DateTimes.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;3;2;1;0;-1;-2;-3;3;2;1;-1;-1;-2;-3;3;2;1; @@ -54969,7 +54969,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionWrapArray C.N.less_than``() = + member _.``DateTimes.Collection.UnionWrapArray C.N.less_than``() = validate (DateTimes.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -54986,7 +54986,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionWrapArray C.N.less_or_equal``() = + member _.``DateTimes.Collection.UnionWrapArray C.N.less_or_equal``() = validate (DateTimes.Collection.UnionWrapArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -55003,7 +55003,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionWrapArray C.N.greater_than``() = + member _.``DateTimes.Collection.UnionWrapArray C.N.greater_than``() = validate (DateTimes.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;0;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -55020,7 +55020,7 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.UnionWrapArray C.N.greater_or_equal``() = + member _.``DateTimes.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (DateTimes.Collection.UnionWrapArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;1;1; @@ -55037,631 +55037,631 @@ type GeneratedTests () = |] [] - member __.``DateTimes.Collection.ValueArray C.I.equals``() = + member _.``DateTimes.Collection.ValueArray C.I.equals``() = validate (DateTimes.Collection.ValueArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``DateTimes.Collection.ValueArray C.I.equal``() = + member _.``DateTimes.Collection.ValueArray C.I.equal``() = validate (DateTimes.Collection.ValueArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``DateTimes.Collection.ValueArray C.I.not_equal``() = + member _.``DateTimes.Collection.ValueArray C.I.not_equal``() = validate (DateTimes.Collection.ValueArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``DateTimes.Collection.ValueArray C.I.compare``() = + member _.``DateTimes.Collection.ValueArray C.I.compare``() = validate (DateTimes.Collection.ValueArray) C.I.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member __.``DateTimes.Collection.ValueArray C.I.less_than``() = + member _.``DateTimes.Collection.ValueArray C.I.less_than``() = validate (DateTimes.Collection.ValueArray) C.I.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member __.``DateTimes.Collection.ValueArray C.I.less_or_equal``() = + member _.``DateTimes.Collection.ValueArray C.I.less_or_equal``() = validate (DateTimes.Collection.ValueArray) C.I.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member __.``DateTimes.Collection.ValueArray C.I.greater_than``() = + member _.``DateTimes.Collection.ValueArray C.I.greater_than``() = validate (DateTimes.Collection.ValueArray) C.I.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member __.``DateTimes.Collection.ValueArray C.I.greater_or_equal``() = + member _.``DateTimes.Collection.ValueArray C.I.greater_or_equal``() = validate (DateTimes.Collection.ValueArray) C.I.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member __.``DateTimes.Collection.ValueArray C.N.equals``() = + member _.``DateTimes.Collection.ValueArray C.N.equals``() = validate (DateTimes.Collection.ValueArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``DateTimes.Collection.ValueArray C.N.equal``() = + member _.``DateTimes.Collection.ValueArray C.N.equal``() = validate (DateTimes.Collection.ValueArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``DateTimes.Collection.ValueArray C.N.not_equal``() = + member _.``DateTimes.Collection.ValueArray C.N.not_equal``() = validate (DateTimes.Collection.ValueArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``DateTimes.Collection.ValueArray C.N.compare``() = + member _.``DateTimes.Collection.ValueArray C.N.compare``() = validate (DateTimes.Collection.ValueArray) C.N.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member __.``DateTimes.Collection.ValueArray C.N.less_than``() = + member _.``DateTimes.Collection.ValueArray C.N.less_than``() = validate (DateTimes.Collection.ValueArray) C.N.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member __.``DateTimes.Collection.ValueArray C.N.less_or_equal``() = + member _.``DateTimes.Collection.ValueArray C.N.less_or_equal``() = validate (DateTimes.Collection.ValueArray) C.N.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member __.``DateTimes.Collection.ValueArray C.N.greater_than``() = + member _.``DateTimes.Collection.ValueArray C.N.greater_than``() = validate (DateTimes.Collection.ValueArray) C.N.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member __.``DateTimes.Collection.ValueArray C.N.greater_or_equal``() = + member _.``DateTimes.Collection.ValueArray C.N.greater_or_equal``() = validate (DateTimes.Collection.ValueArray) C.N.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member __.``DateTimes.Collection.ValueWrapArray C.I.equals``() = + member _.``DateTimes.Collection.ValueWrapArray C.I.equals``() = validate (DateTimes.Collection.ValueWrapArray) C.I.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``DateTimes.Collection.ValueWrapArray C.I.equal``() = + member _.``DateTimes.Collection.ValueWrapArray C.I.equal``() = validate (DateTimes.Collection.ValueWrapArray) C.I.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``DateTimes.Collection.ValueWrapArray C.I.not_equal``() = + member _.``DateTimes.Collection.ValueWrapArray C.I.not_equal``() = validate (DateTimes.Collection.ValueWrapArray) C.I.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``DateTimes.Collection.ValueWrapArray C.I.compare``() = + member _.``DateTimes.Collection.ValueWrapArray C.I.compare``() = validate (DateTimes.Collection.ValueWrapArray) C.I.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member __.``DateTimes.Collection.ValueWrapArray C.I.less_than``() = + member _.``DateTimes.Collection.ValueWrapArray C.I.less_than``() = validate (DateTimes.Collection.ValueWrapArray) C.I.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member __.``DateTimes.Collection.ValueWrapArray C.I.less_or_equal``() = + member _.``DateTimes.Collection.ValueWrapArray C.I.less_or_equal``() = validate (DateTimes.Collection.ValueWrapArray) C.I.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member __.``DateTimes.Collection.ValueWrapArray C.I.greater_than``() = + member _.``DateTimes.Collection.ValueWrapArray C.I.greater_than``() = validate (DateTimes.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member __.``DateTimes.Collection.ValueWrapArray C.I.greater_or_equal``() = + member _.``DateTimes.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (DateTimes.Collection.ValueWrapArray) C.I.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member __.``DateTimes.Collection.ValueWrapArray C.N.equals``() = + member _.``DateTimes.Collection.ValueWrapArray C.N.equals``() = validate (DateTimes.Collection.ValueWrapArray) C.N.equals [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``DateTimes.Collection.ValueWrapArray C.N.equal``() = + member _.``DateTimes.Collection.ValueWrapArray C.N.equal``() = validate (DateTimes.Collection.ValueWrapArray) C.N.equal [| 1;0;0;0;1;0;0;0;1 |] [] - member __.``DateTimes.Collection.ValueWrapArray C.N.not_equal``() = + member _.``DateTimes.Collection.ValueWrapArray C.N.not_equal``() = validate (DateTimes.Collection.ValueWrapArray) C.N.not_equal [| 0;1;1;1;0;1;1;1;0 |] [] - member __.``DateTimes.Collection.ValueWrapArray C.N.compare``() = + member _.``DateTimes.Collection.ValueWrapArray C.N.compare``() = validate (DateTimes.Collection.ValueWrapArray) C.N.compare [| 0;-1;-1;1;0;1;1;-1;0 |] [] - member __.``DateTimes.Collection.ValueWrapArray C.N.less_than``() = + member _.``DateTimes.Collection.ValueWrapArray C.N.less_than``() = validate (DateTimes.Collection.ValueWrapArray) C.N.less_than [| 0;1;1;0;0;0;0;1;0 |] [] - member __.``DateTimes.Collection.ValueWrapArray C.N.less_or_equal``() = + member _.``DateTimes.Collection.ValueWrapArray C.N.less_or_equal``() = validate (DateTimes.Collection.ValueWrapArray) C.N.less_or_equal [| 1;1;1;0;1;0;0;1;1 |] [] - member __.``DateTimes.Collection.ValueWrapArray C.N.greater_than``() = + member _.``DateTimes.Collection.ValueWrapArray C.N.greater_than``() = validate (DateTimes.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;1;0;1;1;0;0 |] [] - member __.``DateTimes.Collection.ValueWrapArray C.N.greater_or_equal``() = + member _.``DateTimes.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (DateTimes.Collection.ValueWrapArray) C.N.greater_or_equal [| 1;0;0;1;1;1;1;0;1 |] [] - member __.``DateTimes.Collection.ArrayArray C.I.equals``() = + member _.``DateTimes.Collection.ArrayArray C.I.equals``() = validate (DateTimes.Collection.ArrayArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``DateTimes.Collection.ArrayArray C.I.equal``() = + member _.``DateTimes.Collection.ArrayArray C.I.equal``() = validate (DateTimes.Collection.ArrayArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``DateTimes.Collection.ArrayArray C.I.not_equal``() = + member _.``DateTimes.Collection.ArrayArray C.I.not_equal``() = validate (DateTimes.Collection.ArrayArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``DateTimes.Collection.ArrayArray C.I.compare``() = + member _.``DateTimes.Collection.ArrayArray C.I.compare``() = validate (DateTimes.Collection.ArrayArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;1;-1;-1;-1;1;-1;0;-1;-1;-1;1;1;1;0;-1;-1;1;1;1;1;0;1;1;1;1;1;-1;0 |] [] - member __.``DateTimes.Collection.ArrayArray C.I.less_than``() = + member _.``DateTimes.Collection.ArrayArray C.I.less_than``() = validate (DateTimes.Collection.ArrayArray) C.I.less_than [| 0;1;1;1;1;1;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0 |] [] - member __.``DateTimes.Collection.ArrayArray C.I.less_or_equal``() = + member _.``DateTimes.Collection.ArrayArray C.I.less_or_equal``() = validate (DateTimes.Collection.ArrayArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;0;1;1;1;0;1;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;0;0;0;0;0;1;1 |] [] - member __.``DateTimes.Collection.ArrayArray C.I.greater_than``() = + member _.``DateTimes.Collection.ArrayArray C.I.greater_than``() = validate (DateTimes.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;1;0;0;0;1;0;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;1;1;1;1;1;0;0 |] [] - member __.``DateTimes.Collection.ArrayArray C.I.greater_or_equal``() = + member _.``DateTimes.Collection.ArrayArray C.I.greater_or_equal``() = validate (DateTimes.Collection.ArrayArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;1;0;0;0;1;0;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1 |] [] - member __.``DateTimes.Collection.ArrayArray C.N.equals``() = + member _.``DateTimes.Collection.ArrayArray C.N.equals``() = validate (DateTimes.Collection.ArrayArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``DateTimes.Collection.ArrayArray C.N.equal``() = + member _.``DateTimes.Collection.ArrayArray C.N.equal``() = validate (DateTimes.Collection.ArrayArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``DateTimes.Collection.ArrayArray C.N.not_equal``() = + member _.``DateTimes.Collection.ArrayArray C.N.not_equal``() = validate (DateTimes.Collection.ArrayArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``DateTimes.Collection.ArrayArray C.N.compare``() = + member _.``DateTimes.Collection.ArrayArray C.N.compare``() = validate (DateTimes.Collection.ArrayArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;1;-1;-1;-1;1;-1;0;-1;-1;-1;1;1;1;0;-1;-1;1;1;1;1;0;1;1;1;1;1;-1;0 |] [] - member __.``DateTimes.Collection.ArrayArray C.N.less_than``() = + member _.``DateTimes.Collection.ArrayArray C.N.less_than``() = validate (DateTimes.Collection.ArrayArray) C.N.less_than [| 0;1;1;1;1;1;0;0;0;1;1;1;0;1;0;1;1;1;0;0;0;0;1;1;0;0;0;0;0;0;0;0;0;0;1;0 |] [] - member __.``DateTimes.Collection.ArrayArray C.N.less_or_equal``() = + member _.``DateTimes.Collection.ArrayArray C.N.less_or_equal``() = validate (DateTimes.Collection.ArrayArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;0;1;1;1;0;1;1;1;1;1;0;0;0;1;1;1;0;0;0;0;1;0;0;0;0;0;1;1 |] [] - member __.``DateTimes.Collection.ArrayArray C.N.greater_than``() = + member _.``DateTimes.Collection.ArrayArray C.N.greater_than``() = validate (DateTimes.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;1;0;0;0;1;0;0;0;0;0;1;1;1;0;0;0;1;1;1;1;0;1;1;1;1;1;0;0 |] [] - member __.``DateTimes.Collection.ArrayArray C.N.greater_or_equal``() = + member _.``DateTimes.Collection.ArrayArray C.N.greater_or_equal``() = validate (DateTimes.Collection.ArrayArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;1;0;0;0;1;0;1;0;0;0;1;1;1;1;0;0;1;1;1;1;1;1;1;1;1;1;0;1 |] [] - member __.``DateTimes.Collection.ListArray C.I.equals``() = + member _.``DateTimes.Collection.ListArray C.I.equals``() = validate (DateTimes.Collection.ListArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``DateTimes.Collection.ListArray C.I.equal``() = + member _.``DateTimes.Collection.ListArray C.I.equal``() = validate (DateTimes.Collection.ListArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``DateTimes.Collection.ListArray C.I.not_equal``() = + member _.``DateTimes.Collection.ListArray C.I.not_equal``() = validate (DateTimes.Collection.ListArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``DateTimes.Collection.ListArray C.I.compare``() = + member _.``DateTimes.Collection.ListArray C.I.compare``() = validate (DateTimes.Collection.ListArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;1;1;-1;1;1;-1;0;1;-1;-1;1;-1;-1;0;-1;-1;1;1;1;1;0;1;1;-1;1;1;-1;0 |] [] - member __.``DateTimes.Collection.ListArray C.I.less_than``() = + member _.``DateTimes.Collection.ListArray C.I.less_than``() = validate (DateTimes.Collection.ListArray) C.I.less_than [| 0;1;1;1;1;1;0;0;0;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;0;0;0;0;0;0;0;1;0;0;1;0 |] [] - member __.``DateTimes.Collection.ListArray C.I.less_or_equal``() = + member _.``DateTimes.Collection.ListArray C.I.less_or_equal``() = validate (DateTimes.Collection.ListArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;1;1;1;0;0;0;0;1;0;0;1;0;0;1;1 |] [] - member __.``DateTimes.Collection.ListArray C.I.greater_than``() = + member _.``DateTimes.Collection.ListArray C.I.greater_than``() = validate (DateTimes.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;1;1;1;1;0;1;1;0;1;1;0;0 |] [] - member __.``DateTimes.Collection.ListArray C.I.greater_or_equal``() = + member _.``DateTimes.Collection.ListArray C.I.greater_or_equal``() = validate (DateTimes.Collection.ListArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;1;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;1;1;1;1;1;1;1;0;1;1;0;1 |] [] - member __.``DateTimes.Collection.ListArray C.N.equals``() = + member _.``DateTimes.Collection.ListArray C.N.equals``() = validate (DateTimes.Collection.ListArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``DateTimes.Collection.ListArray C.N.equal``() = + member _.``DateTimes.Collection.ListArray C.N.equal``() = validate (DateTimes.Collection.ListArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``DateTimes.Collection.ListArray C.N.not_equal``() = + member _.``DateTimes.Collection.ListArray C.N.not_equal``() = validate (DateTimes.Collection.ListArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``DateTimes.Collection.ListArray C.N.compare``() = + member _.``DateTimes.Collection.ListArray C.N.compare``() = validate (DateTimes.Collection.ListArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;1;1;-1;1;1;-1;0;1;-1;-1;1;-1;-1;0;-1;-1;1;1;1;1;0;1;1;-1;1;1;-1;0 |] [] - member __.``DateTimes.Collection.ListArray C.N.less_than``() = + member _.``DateTimes.Collection.ListArray C.N.less_than``() = validate (DateTimes.Collection.ListArray) C.N.less_than [| 0;1;1;1;1;1;0;0;0;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;0;0;0;0;0;0;0;1;0;0;1;0 |] [] - member __.``DateTimes.Collection.ListArray C.N.less_or_equal``() = + member _.``DateTimes.Collection.ListArray C.N.less_or_equal``() = validate (DateTimes.Collection.ListArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;0;0;1;0;0;1;1;0;1;1;0;1;1;1;1;1;0;0;0;0;1;0;0;1;0;0;1;1 |] [] - member __.``DateTimes.Collection.ListArray C.N.greater_than``() = + member _.``DateTimes.Collection.ListArray C.N.greater_than``() = validate (DateTimes.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;0;0;0;1;1;1;1;0;1;1;0;1;1;0;0 |] [] - member __.``DateTimes.Collection.ListArray C.N.greater_or_equal``() = + member _.``DateTimes.Collection.ListArray C.N.greater_or_equal``() = validate (DateTimes.Collection.ListArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;1;1;0;1;1;0;1;1;0;0;1;0;0;1;0;0;1;1;1;1;1;1;1;0;1;1;0;1 |] [] - member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;-1;0;1;-1;1;1;-1;-1;0;-1;1;1;-1;1;1;0;1;1;-1;-1;-1;-1;0 |] [] - member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;1;0;0;1;1;0;1;0;0;1;0;0;0;0;0;1;1;1;1;0 |] [] - member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;0;0;1;0;0;1;0;0;1;1;1;1;1 |] [] - member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;1;1;0;1;1;0;1;1;0;0;0;0;0 |] [] - member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;0;1;1;0;0;1;0;1;1;0;1;1;1;1;1;0;0;0;0;1 |] [] - member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1 |] [] - member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0 |] [] - member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;-1;-1;-1;1;0;1;1;1;1;1;-1;0;1;-1;1;1;-1;-1;0;-1;1;1;-1;1;1;0;1;1;-1;-1;-1;-1;0 |] [] - member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;1;1;1;0;0;0;0;0;0;0;1;0;0;1;0;0;1;1;0;1;0;0;1;0;0;0;0;0;1;1;1;1;0 |] [] - member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;0;1;0;0;0;0;0;1;1;0;1;0;0;1;1;1;1;0;0;1;0;0;1;0;0;1;1;1;1;1 |] [] - member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;1;0;1;1;1;1;1;0;0;1;0;1;1;0;0;0;0;1;1;0;1;1;0;1;1;0;0;0;0;0 |] [] - member __.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member _.``DateTimes.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (DateTimes.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;0;0;0;1;1;1;1;1;1;1;0;1;1;0;1;1;0;0;1;0;1;1;0;1;1;1;1;1;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.Array E.I.equals``() = + member _.``NullableDateTimes.Collection.Array E.I.equals``() = validate (NullableDateTimes.Collection.Array) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.Array E.I.equal``() = + member _.``NullableDateTimes.Collection.Array E.I.equal``() = validate (NullableDateTimes.Collection.Array) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.Array E.I.not_equal``() = + member _.``NullableDateTimes.Collection.Array E.I.not_equal``() = validate (NullableDateTimes.Collection.Array) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableDateTimes.Collection.Array E.N.equals``() = + member _.``NullableDateTimes.Collection.Array E.N.equals``() = validate (NullableDateTimes.Collection.Array) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.Array E.N.equal``() = + member _.``NullableDateTimes.Collection.Array E.N.equal``() = validate (NullableDateTimes.Collection.Array) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.Array E.N.not_equal``() = + member _.``NullableDateTimes.Collection.Array E.N.not_equal``() = validate (NullableDateTimes.Collection.Array) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableDateTimes.Collection.OptionArray E.I.equals``() = + member _.``NullableDateTimes.Collection.OptionArray E.I.equals``() = validate (NullableDateTimes.Collection.OptionArray) E.I.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.OptionArray E.I.equal``() = + member _.``NullableDateTimes.Collection.OptionArray E.I.equal``() = validate (NullableDateTimes.Collection.OptionArray) E.I.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.OptionArray E.I.not_equal``() = + member _.``NullableDateTimes.Collection.OptionArray E.I.not_equal``() = validate (NullableDateTimes.Collection.OptionArray) E.I.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``NullableDateTimes.Collection.OptionArray E.N.equals``() = + member _.``NullableDateTimes.Collection.OptionArray E.N.equals``() = validate (NullableDateTimes.Collection.OptionArray) E.N.equals [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.OptionArray E.N.equal``() = + member _.``NullableDateTimes.Collection.OptionArray E.N.equal``() = validate (NullableDateTimes.Collection.OptionArray) E.N.equal [| 1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1;0;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.OptionArray E.N.not_equal``() = + member _.``NullableDateTimes.Collection.OptionArray E.N.not_equal``() = validate (NullableDateTimes.Collection.OptionArray) E.N.not_equal [| 0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0;1;1;1;1;1;0 |] [] - member __.``NullableDateTimes.Collection.RefArray E.I.equals``() = + member _.``NullableDateTimes.Collection.RefArray E.I.equals``() = validate (NullableDateTimes.Collection.RefArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.RefArray E.I.equal``() = + member _.``NullableDateTimes.Collection.RefArray E.I.equal``() = validate (NullableDateTimes.Collection.RefArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.RefArray E.I.not_equal``() = + member _.``NullableDateTimes.Collection.RefArray E.I.not_equal``() = validate (NullableDateTimes.Collection.RefArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableDateTimes.Collection.RefArray E.N.equals``() = + member _.``NullableDateTimes.Collection.RefArray E.N.equals``() = validate (NullableDateTimes.Collection.RefArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.RefArray E.N.equal``() = + member _.``NullableDateTimes.Collection.RefArray E.N.equal``() = validate (NullableDateTimes.Collection.RefArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.RefArray E.N.not_equal``() = + member _.``NullableDateTimes.Collection.RefArray E.N.not_equal``() = validate (NullableDateTimes.Collection.RefArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableDateTimes.Collection.RefWrapArray E.I.equals``() = + member _.``NullableDateTimes.Collection.RefWrapArray E.I.equals``() = validate (NullableDateTimes.Collection.RefWrapArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.RefWrapArray E.I.equal``() = + member _.``NullableDateTimes.Collection.RefWrapArray E.I.equal``() = validate (NullableDateTimes.Collection.RefWrapArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.RefWrapArray E.I.not_equal``() = + member _.``NullableDateTimes.Collection.RefWrapArray E.I.not_equal``() = validate (NullableDateTimes.Collection.RefWrapArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableDateTimes.Collection.RefWrapArray E.N.equals``() = + member _.``NullableDateTimes.Collection.RefWrapArray E.N.equals``() = validate (NullableDateTimes.Collection.RefWrapArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.RefWrapArray E.N.equal``() = + member _.``NullableDateTimes.Collection.RefWrapArray E.N.equal``() = validate (NullableDateTimes.Collection.RefWrapArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.RefWrapArray E.N.not_equal``() = + member _.``NullableDateTimes.Collection.RefWrapArray E.N.not_equal``() = validate (NullableDateTimes.Collection.RefWrapArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableDateTimes.Collection.UnionArray E.I.equals``() = + member _.``NullableDateTimes.Collection.UnionArray E.I.equals``() = validate (NullableDateTimes.Collection.UnionArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -55686,7 +55686,7 @@ type GeneratedTests () = |] [] - member __.``NullableDateTimes.Collection.UnionArray E.I.equal``() = + member _.``NullableDateTimes.Collection.UnionArray E.I.equal``() = validate (NullableDateTimes.Collection.UnionArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -55711,7 +55711,7 @@ type GeneratedTests () = |] [] - member __.``NullableDateTimes.Collection.UnionArray E.I.not_equal``() = + member _.``NullableDateTimes.Collection.UnionArray E.I.not_equal``() = validate (NullableDateTimes.Collection.UnionArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -55736,7 +55736,7 @@ type GeneratedTests () = |] [] - member __.``NullableDateTimes.Collection.UnionArray E.N.equals``() = + member _.``NullableDateTimes.Collection.UnionArray E.N.equals``() = validate (NullableDateTimes.Collection.UnionArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -55761,7 +55761,7 @@ type GeneratedTests () = |] [] - member __.``NullableDateTimes.Collection.UnionArray E.N.equal``() = + member _.``NullableDateTimes.Collection.UnionArray E.N.equal``() = validate (NullableDateTimes.Collection.UnionArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -55786,7 +55786,7 @@ type GeneratedTests () = |] [] - member __.``NullableDateTimes.Collection.UnionArray E.N.not_equal``() = + member _.``NullableDateTimes.Collection.UnionArray E.N.not_equal``() = validate (NullableDateTimes.Collection.UnionArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -55811,7 +55811,7 @@ type GeneratedTests () = |] [] - member __.``NullableDateTimes.Collection.UnionWrapArray E.I.equals``() = + member _.``NullableDateTimes.Collection.UnionWrapArray E.I.equals``() = validate (NullableDateTimes.Collection.UnionWrapArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -55836,7 +55836,7 @@ type GeneratedTests () = |] [] - member __.``NullableDateTimes.Collection.UnionWrapArray E.I.equal``() = + member _.``NullableDateTimes.Collection.UnionWrapArray E.I.equal``() = validate (NullableDateTimes.Collection.UnionWrapArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -55861,7 +55861,7 @@ type GeneratedTests () = |] [] - member __.``NullableDateTimes.Collection.UnionWrapArray E.I.not_equal``() = + member _.``NullableDateTimes.Collection.UnionWrapArray E.I.not_equal``() = validate (NullableDateTimes.Collection.UnionWrapArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -55886,7 +55886,7 @@ type GeneratedTests () = |] [] - member __.``NullableDateTimes.Collection.UnionWrapArray E.N.equals``() = + member _.``NullableDateTimes.Collection.UnionWrapArray E.N.equals``() = validate (NullableDateTimes.Collection.UnionWrapArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -55911,7 +55911,7 @@ type GeneratedTests () = |] [] - member __.``NullableDateTimes.Collection.UnionWrapArray E.N.equal``() = + member _.``NullableDateTimes.Collection.UnionWrapArray E.N.equal``() = validate (NullableDateTimes.Collection.UnionWrapArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -55936,7 +55936,7 @@ type GeneratedTests () = |] [] - member __.``NullableDateTimes.Collection.UnionWrapArray E.N.not_equal``() = + member _.``NullableDateTimes.Collection.UnionWrapArray E.N.not_equal``() = validate (NullableDateTimes.Collection.UnionWrapArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -55961,547 +55961,547 @@ type GeneratedTests () = |] [] - member __.``NullableDateTimes.Collection.ValueArray E.I.equals``() = + member _.``NullableDateTimes.Collection.ValueArray E.I.equals``() = validate (NullableDateTimes.Collection.ValueArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.ValueArray E.I.equal``() = + member _.``NullableDateTimes.Collection.ValueArray E.I.equal``() = validate (NullableDateTimes.Collection.ValueArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.ValueArray E.I.not_equal``() = + member _.``NullableDateTimes.Collection.ValueArray E.I.not_equal``() = validate (NullableDateTimes.Collection.ValueArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableDateTimes.Collection.ValueArray E.N.equals``() = + member _.``NullableDateTimes.Collection.ValueArray E.N.equals``() = validate (NullableDateTimes.Collection.ValueArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.ValueArray E.N.equal``() = + member _.``NullableDateTimes.Collection.ValueArray E.N.equal``() = validate (NullableDateTimes.Collection.ValueArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.ValueArray E.N.not_equal``() = + member _.``NullableDateTimes.Collection.ValueArray E.N.not_equal``() = validate (NullableDateTimes.Collection.ValueArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableDateTimes.Collection.ValueWrapArray E.I.equals``() = + member _.``NullableDateTimes.Collection.ValueWrapArray E.I.equals``() = validate (NullableDateTimes.Collection.ValueWrapArray) E.I.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.ValueWrapArray E.I.equal``() = + member _.``NullableDateTimes.Collection.ValueWrapArray E.I.equal``() = validate (NullableDateTimes.Collection.ValueWrapArray) E.I.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.ValueWrapArray E.I.not_equal``() = + member _.``NullableDateTimes.Collection.ValueWrapArray E.I.not_equal``() = validate (NullableDateTimes.Collection.ValueWrapArray) E.I.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableDateTimes.Collection.ValueWrapArray E.N.equals``() = + member _.``NullableDateTimes.Collection.ValueWrapArray E.N.equals``() = validate (NullableDateTimes.Collection.ValueWrapArray) E.N.equals [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.ValueWrapArray E.N.equal``() = + member _.``NullableDateTimes.Collection.ValueWrapArray E.N.equal``() = validate (NullableDateTimes.Collection.ValueWrapArray) E.N.equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.ValueWrapArray E.N.not_equal``() = + member _.``NullableDateTimes.Collection.ValueWrapArray E.N.not_equal``() = validate (NullableDateTimes.Collection.ValueWrapArray) E.N.not_equal [| 0;1;1;1;1;0;1;1;1;1;0;1;1;1;1;0 |] [] - member __.``NullableDateTimes.Collection.ArrayArray E.I.equals``() = + member _.``NullableDateTimes.Collection.ArrayArray E.I.equals``() = validate (NullableDateTimes.Collection.ArrayArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.ArrayArray E.I.equal``() = + member _.``NullableDateTimes.Collection.ArrayArray E.I.equal``() = validate (NullableDateTimes.Collection.ArrayArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.ArrayArray E.I.not_equal``() = + member _.``NullableDateTimes.Collection.ArrayArray E.I.not_equal``() = validate (NullableDateTimes.Collection.ArrayArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member __.``NullableDateTimes.Collection.ArrayArray E.N.equals``() = + member _.``NullableDateTimes.Collection.ArrayArray E.N.equals``() = validate (NullableDateTimes.Collection.ArrayArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.ArrayArray E.N.equal``() = + member _.``NullableDateTimes.Collection.ArrayArray E.N.equal``() = validate (NullableDateTimes.Collection.ArrayArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.ArrayArray E.N.not_equal``() = + member _.``NullableDateTimes.Collection.ArrayArray E.N.not_equal``() = validate (NullableDateTimes.Collection.ArrayArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member __.``NullableDateTimes.Collection.ListArray E.I.equals``() = + member _.``NullableDateTimes.Collection.ListArray E.I.equals``() = validate (NullableDateTimes.Collection.ListArray) E.I.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.ListArray E.I.equal``() = + member _.``NullableDateTimes.Collection.ListArray E.I.equal``() = validate (NullableDateTimes.Collection.ListArray) E.I.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.ListArray E.I.not_equal``() = + member _.``NullableDateTimes.Collection.ListArray E.I.not_equal``() = validate (NullableDateTimes.Collection.ListArray) E.I.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member __.``NullableDateTimes.Collection.ListArray E.N.equals``() = + member _.``NullableDateTimes.Collection.ListArray E.N.equals``() = validate (NullableDateTimes.Collection.ListArray) E.N.equals [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.ListArray E.N.equal``() = + member _.``NullableDateTimes.Collection.ListArray E.N.equal``() = validate (NullableDateTimes.Collection.ListArray) E.N.equal [| 1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0; 0;0;0;0;0;1;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;1 |] [] - member __.``NullableDateTimes.Collection.ListArray E.N.not_equal``() = + member _.``NullableDateTimes.Collection.ListArray E.N.not_equal``() = validate (NullableDateTimes.Collection.ListArray) E.N.not_equal [| 0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1; 1;1;1;1;1;0;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.Array C.I.equals``() = + member _.``Tuple2s.Collection.Array C.I.equals``() = validate (Tuple2s.Collection.Array) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.Array C.I.equal``() = + member _.``Tuple2s.Collection.Array C.I.equal``() = validate (Tuple2s.Collection.Array) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.Array C.I.not_equal``() = + member _.``Tuple2s.Collection.Array C.I.not_equal``() = validate (Tuple2s.Collection.Array) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.Array C.I.compare``() = + member _.``Tuple2s.Collection.Array C.I.compare``() = validate (Tuple2s.Collection.Array) C.I.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.Array C.I.less_than``() = + member _.``Tuple2s.Collection.Array C.I.less_than``() = validate (Tuple2s.Collection.Array) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.Array C.I.less_or_equal``() = + member _.``Tuple2s.Collection.Array C.I.less_or_equal``() = validate (Tuple2s.Collection.Array) C.I.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.Array C.I.greater_than``() = + member _.``Tuple2s.Collection.Array C.I.greater_than``() = validate (Tuple2s.Collection.Array) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.Array C.I.greater_or_equal``() = + member _.``Tuple2s.Collection.Array C.I.greater_or_equal``() = validate (Tuple2s.Collection.Array) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.Array C.N.equals``() = + member _.``Tuple2s.Collection.Array C.N.equals``() = validate (Tuple2s.Collection.Array) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.Array C.N.equal``() = + member _.``Tuple2s.Collection.Array C.N.equal``() = validate (Tuple2s.Collection.Array) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.Array C.N.not_equal``() = + member _.``Tuple2s.Collection.Array C.N.not_equal``() = validate (Tuple2s.Collection.Array) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.Array C.N.compare``() = + member _.``Tuple2s.Collection.Array C.N.compare``() = validate (Tuple2s.Collection.Array) C.N.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.Array C.N.less_than``() = + member _.``Tuple2s.Collection.Array C.N.less_than``() = validate (Tuple2s.Collection.Array) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.Array C.N.less_or_equal``() = + member _.``Tuple2s.Collection.Array C.N.less_or_equal``() = validate (Tuple2s.Collection.Array) C.N.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.Array C.N.greater_than``() = + member _.``Tuple2s.Collection.Array C.N.greater_than``() = validate (Tuple2s.Collection.Array) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.Array C.N.greater_or_equal``() = + member _.``Tuple2s.Collection.Array C.N.greater_or_equal``() = validate (Tuple2s.Collection.Array) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.OptionArray C.I.equals``() = + member _.``Tuple2s.Collection.OptionArray C.I.equals``() = validate (Tuple2s.Collection.OptionArray) C.I.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.OptionArray C.I.equal``() = + member _.``Tuple2s.Collection.OptionArray C.I.equal``() = validate (Tuple2s.Collection.OptionArray) C.I.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.OptionArray C.I.not_equal``() = + member _.``Tuple2s.Collection.OptionArray C.I.not_equal``() = validate (Tuple2s.Collection.OptionArray) C.I.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.OptionArray C.I.compare``() = + member _.``Tuple2s.Collection.OptionArray C.I.compare``() = validate (Tuple2s.Collection.OptionArray) C.I.compare [| 0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0;-1;-1;1;1;1;0;-1;1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.OptionArray C.I.less_than``() = + member _.``Tuple2s.Collection.OptionArray C.I.less_than``() = validate (Tuple2s.Collection.OptionArray) C.I.less_than [| 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.OptionArray C.I.less_or_equal``() = + member _.``Tuple2s.Collection.OptionArray C.I.less_or_equal``() = validate (Tuple2s.Collection.OptionArray) C.I.less_or_equal [| 1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.OptionArray C.I.greater_than``() = + member _.``Tuple2s.Collection.OptionArray C.I.greater_than``() = validate (Tuple2s.Collection.OptionArray) C.I.greater_than [| 0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0 |] [] - member __.``Tuple2s.Collection.OptionArray C.I.greater_or_equal``() = + member _.``Tuple2s.Collection.OptionArray C.I.greater_or_equal``() = validate (Tuple2s.Collection.OptionArray) C.I.greater_or_equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;1 |] [] - member __.``Tuple2s.Collection.OptionArray C.N.equals``() = + member _.``Tuple2s.Collection.OptionArray C.N.equals``() = validate (Tuple2s.Collection.OptionArray) C.N.equals [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.OptionArray C.N.equal``() = + member _.``Tuple2s.Collection.OptionArray C.N.equal``() = validate (Tuple2s.Collection.OptionArray) C.N.equal [| 1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.OptionArray C.N.not_equal``() = + member _.``Tuple2s.Collection.OptionArray C.N.not_equal``() = validate (Tuple2s.Collection.OptionArray) C.N.not_equal [| 0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.OptionArray C.N.compare``() = + member _.``Tuple2s.Collection.OptionArray C.N.compare``() = validate (Tuple2s.Collection.OptionArray) C.N.compare [| 0;-1;-1;-1;-1;1;0;-1;-1;-1;1;1;0;-1;-1;1;1;1;0;-1;1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.OptionArray C.N.less_than``() = + member _.``Tuple2s.Collection.OptionArray C.N.less_than``() = validate (Tuple2s.Collection.OptionArray) C.N.less_than [| 0;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.OptionArray C.N.less_or_equal``() = + member _.``Tuple2s.Collection.OptionArray C.N.less_or_equal``() = validate (Tuple2s.Collection.OptionArray) C.N.less_or_equal [| 1;1;1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.OptionArray C.N.greater_than``() = + member _.``Tuple2s.Collection.OptionArray C.N.greater_than``() = validate (Tuple2s.Collection.OptionArray) C.N.greater_than [| 0;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0 |] [] - member __.``Tuple2s.Collection.OptionArray C.N.greater_or_equal``() = + member _.``Tuple2s.Collection.OptionArray C.N.greater_or_equal``() = validate (Tuple2s.Collection.OptionArray) C.N.greater_or_equal [| 1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;0;1;0;0;0;1 |] [] - member __.``Tuple2s.Collection.RefArray C.I.equals``() = + member _.``Tuple2s.Collection.RefArray C.I.equals``() = validate (Tuple2s.Collection.RefArray) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.RefArray C.I.equal``() = + member _.``Tuple2s.Collection.RefArray C.I.equal``() = validate (Tuple2s.Collection.RefArray) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.RefArray C.I.not_equal``() = + member _.``Tuple2s.Collection.RefArray C.I.not_equal``() = validate (Tuple2s.Collection.RefArray) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.RefArray C.I.compare``() = + member _.``Tuple2s.Collection.RefArray C.I.compare``() = validate (Tuple2s.Collection.RefArray) C.I.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.RefArray C.I.less_than``() = + member _.``Tuple2s.Collection.RefArray C.I.less_than``() = validate (Tuple2s.Collection.RefArray) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.RefArray C.I.less_or_equal``() = + member _.``Tuple2s.Collection.RefArray C.I.less_or_equal``() = validate (Tuple2s.Collection.RefArray) C.I.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.RefArray C.I.greater_than``() = + member _.``Tuple2s.Collection.RefArray C.I.greater_than``() = validate (Tuple2s.Collection.RefArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.RefArray C.I.greater_or_equal``() = + member _.``Tuple2s.Collection.RefArray C.I.greater_or_equal``() = validate (Tuple2s.Collection.RefArray) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.RefArray C.N.equals``() = + member _.``Tuple2s.Collection.RefArray C.N.equals``() = validate (Tuple2s.Collection.RefArray) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.RefArray C.N.equal``() = + member _.``Tuple2s.Collection.RefArray C.N.equal``() = validate (Tuple2s.Collection.RefArray) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.RefArray C.N.not_equal``() = + member _.``Tuple2s.Collection.RefArray C.N.not_equal``() = validate (Tuple2s.Collection.RefArray) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.RefArray C.N.compare``() = + member _.``Tuple2s.Collection.RefArray C.N.compare``() = validate (Tuple2s.Collection.RefArray) C.N.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.RefArray C.N.less_than``() = + member _.``Tuple2s.Collection.RefArray C.N.less_than``() = validate (Tuple2s.Collection.RefArray) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.RefArray C.N.less_or_equal``() = + member _.``Tuple2s.Collection.RefArray C.N.less_or_equal``() = validate (Tuple2s.Collection.RefArray) C.N.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.RefArray C.N.greater_than``() = + member _.``Tuple2s.Collection.RefArray C.N.greater_than``() = validate (Tuple2s.Collection.RefArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.RefArray C.N.greater_or_equal``() = + member _.``Tuple2s.Collection.RefArray C.N.greater_or_equal``() = validate (Tuple2s.Collection.RefArray) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.RefWrapArray C.I.equals``() = + member _.``Tuple2s.Collection.RefWrapArray C.I.equals``() = validate (Tuple2s.Collection.RefWrapArray) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.RefWrapArray C.I.equal``() = + member _.``Tuple2s.Collection.RefWrapArray C.I.equal``() = validate (Tuple2s.Collection.RefWrapArray) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.RefWrapArray C.I.not_equal``() = + member _.``Tuple2s.Collection.RefWrapArray C.I.not_equal``() = validate (Tuple2s.Collection.RefWrapArray) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.RefWrapArray C.I.compare``() = + member _.``Tuple2s.Collection.RefWrapArray C.I.compare``() = validate (Tuple2s.Collection.RefWrapArray) C.I.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.RefWrapArray C.I.less_than``() = + member _.``Tuple2s.Collection.RefWrapArray C.I.less_than``() = validate (Tuple2s.Collection.RefWrapArray) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.RefWrapArray C.I.less_or_equal``() = + member _.``Tuple2s.Collection.RefWrapArray C.I.less_or_equal``() = validate (Tuple2s.Collection.RefWrapArray) C.I.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.RefWrapArray C.I.greater_than``() = + member _.``Tuple2s.Collection.RefWrapArray C.I.greater_than``() = validate (Tuple2s.Collection.RefWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.RefWrapArray C.I.greater_or_equal``() = + member _.``Tuple2s.Collection.RefWrapArray C.I.greater_or_equal``() = validate (Tuple2s.Collection.RefWrapArray) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.RefWrapArray C.N.equals``() = + member _.``Tuple2s.Collection.RefWrapArray C.N.equals``() = validate (Tuple2s.Collection.RefWrapArray) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.RefWrapArray C.N.equal``() = + member _.``Tuple2s.Collection.RefWrapArray C.N.equal``() = validate (Tuple2s.Collection.RefWrapArray) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.RefWrapArray C.N.not_equal``() = + member _.``Tuple2s.Collection.RefWrapArray C.N.not_equal``() = validate (Tuple2s.Collection.RefWrapArray) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.RefWrapArray C.N.compare``() = + member _.``Tuple2s.Collection.RefWrapArray C.N.compare``() = validate (Tuple2s.Collection.RefWrapArray) C.N.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.RefWrapArray C.N.less_than``() = + member _.``Tuple2s.Collection.RefWrapArray C.N.less_than``() = validate (Tuple2s.Collection.RefWrapArray) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.RefWrapArray C.N.less_or_equal``() = + member _.``Tuple2s.Collection.RefWrapArray C.N.less_or_equal``() = validate (Tuple2s.Collection.RefWrapArray) C.N.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.RefWrapArray C.N.greater_than``() = + member _.``Tuple2s.Collection.RefWrapArray C.N.greater_than``() = validate (Tuple2s.Collection.RefWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.RefWrapArray C.N.greater_or_equal``() = + member _.``Tuple2s.Collection.RefWrapArray C.N.greater_or_equal``() = validate (Tuple2s.Collection.RefWrapArray) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.UnionArray C.I.equals``() = + member _.``Tuple2s.Collection.UnionArray C.I.equals``() = validate (Tuple2s.Collection.UnionArray) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -56526,7 +56526,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionArray C.I.equal``() = + member _.``Tuple2s.Collection.UnionArray C.I.equal``() = validate (Tuple2s.Collection.UnionArray) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -56551,7 +56551,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionArray C.I.not_equal``() = + member _.``Tuple2s.Collection.UnionArray C.I.not_equal``() = validate (Tuple2s.Collection.UnionArray) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -56576,7 +56576,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionArray C.I.compare``() = + member _.``Tuple2s.Collection.UnionArray C.I.compare``() = validate (Tuple2s.Collection.UnionArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1; @@ -56601,7 +56601,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionArray C.I.less_than``() = + member _.``Tuple2s.Collection.UnionArray C.I.less_than``() = validate (Tuple2s.Collection.UnionArray) C.I.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -56626,7 +56626,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionArray C.I.less_or_equal``() = + member _.``Tuple2s.Collection.UnionArray C.I.less_or_equal``() = validate (Tuple2s.Collection.UnionArray) C.I.less_or_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -56651,7 +56651,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionArray C.I.greater_than``() = + member _.``Tuple2s.Collection.UnionArray C.I.greater_than``() = validate (Tuple2s.Collection.UnionArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -56676,7 +56676,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionArray C.I.greater_or_equal``() = + member _.``Tuple2s.Collection.UnionArray C.I.greater_or_equal``() = validate (Tuple2s.Collection.UnionArray) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -56701,7 +56701,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionArray C.N.equals``() = + member _.``Tuple2s.Collection.UnionArray C.N.equals``() = validate (Tuple2s.Collection.UnionArray) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -56726,7 +56726,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionArray C.N.equal``() = + member _.``Tuple2s.Collection.UnionArray C.N.equal``() = validate (Tuple2s.Collection.UnionArray) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -56751,7 +56751,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionArray C.N.not_equal``() = + member _.``Tuple2s.Collection.UnionArray C.N.not_equal``() = validate (Tuple2s.Collection.UnionArray) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -56776,7 +56776,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionArray C.N.compare``() = + member _.``Tuple2s.Collection.UnionArray C.N.compare``() = validate (Tuple2s.Collection.UnionArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1; @@ -56801,7 +56801,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionArray C.N.less_than``() = + member _.``Tuple2s.Collection.UnionArray C.N.less_than``() = validate (Tuple2s.Collection.UnionArray) C.N.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -56826,7 +56826,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionArray C.N.less_or_equal``() = + member _.``Tuple2s.Collection.UnionArray C.N.less_or_equal``() = validate (Tuple2s.Collection.UnionArray) C.N.less_or_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -56851,7 +56851,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionArray C.N.greater_than``() = + member _.``Tuple2s.Collection.UnionArray C.N.greater_than``() = validate (Tuple2s.Collection.UnionArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -56876,7 +56876,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionArray C.N.greater_or_equal``() = + member _.``Tuple2s.Collection.UnionArray C.N.greater_or_equal``() = validate (Tuple2s.Collection.UnionArray) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -56901,7 +56901,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionWrapArray C.I.equals``() = + member _.``Tuple2s.Collection.UnionWrapArray C.I.equals``() = validate (Tuple2s.Collection.UnionWrapArray) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -56926,7 +56926,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionWrapArray C.I.equal``() = + member _.``Tuple2s.Collection.UnionWrapArray C.I.equal``() = validate (Tuple2s.Collection.UnionWrapArray) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -56951,7 +56951,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionWrapArray C.I.not_equal``() = + member _.``Tuple2s.Collection.UnionWrapArray C.I.not_equal``() = validate (Tuple2s.Collection.UnionWrapArray) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -56976,7 +56976,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionWrapArray C.I.compare``() = + member _.``Tuple2s.Collection.UnionWrapArray C.I.compare``() = validate (Tuple2s.Collection.UnionWrapArray) C.I.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1; @@ -57001,7 +57001,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionWrapArray C.I.less_than``() = + member _.``Tuple2s.Collection.UnionWrapArray C.I.less_than``() = validate (Tuple2s.Collection.UnionWrapArray) C.I.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -57026,7 +57026,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionWrapArray C.I.less_or_equal``() = + member _.``Tuple2s.Collection.UnionWrapArray C.I.less_or_equal``() = validate (Tuple2s.Collection.UnionWrapArray) C.I.less_or_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -57051,7 +57051,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionWrapArray C.I.greater_than``() = + member _.``Tuple2s.Collection.UnionWrapArray C.I.greater_than``() = validate (Tuple2s.Collection.UnionWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -57076,7 +57076,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionWrapArray C.I.greater_or_equal``() = + member _.``Tuple2s.Collection.UnionWrapArray C.I.greater_or_equal``() = validate (Tuple2s.Collection.UnionWrapArray) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -57101,7 +57101,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionWrapArray C.N.equals``() = + member _.``Tuple2s.Collection.UnionWrapArray C.N.equals``() = validate (Tuple2s.Collection.UnionWrapArray) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -57126,7 +57126,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionWrapArray C.N.equal``() = + member _.``Tuple2s.Collection.UnionWrapArray C.N.equal``() = validate (Tuple2s.Collection.UnionWrapArray) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -57151,7 +57151,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionWrapArray C.N.not_equal``() = + member _.``Tuple2s.Collection.UnionWrapArray C.N.not_equal``() = validate (Tuple2s.Collection.UnionWrapArray) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -57176,7 +57176,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionWrapArray C.N.compare``() = + member _.``Tuple2s.Collection.UnionWrapArray C.N.compare``() = validate (Tuple2s.Collection.UnionWrapArray) C.N.compare [| 0;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;-1;-1;-2;-3;-3;-3;-3;1;0;-1;-2;-2;-2;-2;1;-1;-1;-2;-2; -2;-2;1;-1;-1;-2;-2;-2;-2;1;-1;-1;-2;-2;-2;-2;2;1;0;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1;-1;-1;-1;-1;2;1;-1; @@ -57201,7 +57201,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionWrapArray C.N.less_than``() = + member _.``Tuple2s.Collection.UnionWrapArray C.N.less_than``() = validate (Tuple2s.Collection.UnionWrapArray) C.N.less_than [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -57226,7 +57226,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionWrapArray C.N.less_or_equal``() = + member _.``Tuple2s.Collection.UnionWrapArray C.N.less_or_equal``() = validate (Tuple2s.Collection.UnionWrapArray) C.N.less_or_equal [| 0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;1;1;1;1;1;1;0;0;1;1;1;1;1;0;0;1;1;1; 1;1;0;0;1;1;1;1;1;0;0;1;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0;1;1;1;1;0;0;0; @@ -57251,7 +57251,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionWrapArray C.N.greater_than``() = + member _.``Tuple2s.Collection.UnionWrapArray C.N.greater_than``() = validate (Tuple2s.Collection.UnionWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -57276,7 +57276,7 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.UnionWrapArray C.N.greater_or_equal``() = + member _.``Tuple2s.Collection.UnionWrapArray C.N.greater_or_equal``() = validate (Tuple2s.Collection.UnionWrapArray) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;1;0;0;0;0; 0;0;1;0;0;0;0;0;0;1;0;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0;0;0;0;0;1;1;0; @@ -57301,647 +57301,647 @@ type GeneratedTests () = |] [] - member __.``Tuple2s.Collection.ValueArray C.I.equals``() = + member _.``Tuple2s.Collection.ValueArray C.I.equals``() = validate (Tuple2s.Collection.ValueArray) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.ValueArray C.I.equal``() = + member _.``Tuple2s.Collection.ValueArray C.I.equal``() = validate (Tuple2s.Collection.ValueArray) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.ValueArray C.I.not_equal``() = + member _.``Tuple2s.Collection.ValueArray C.I.not_equal``() = validate (Tuple2s.Collection.ValueArray) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.ValueArray C.I.compare``() = + member _.``Tuple2s.Collection.ValueArray C.I.compare``() = validate (Tuple2s.Collection.ValueArray) C.I.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.ValueArray C.I.less_than``() = + member _.``Tuple2s.Collection.ValueArray C.I.less_than``() = validate (Tuple2s.Collection.ValueArray) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ValueArray C.I.less_or_equal``() = + member _.``Tuple2s.Collection.ValueArray C.I.less_or_equal``() = validate (Tuple2s.Collection.ValueArray) C.I.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.ValueArray C.I.greater_than``() = + member _.``Tuple2s.Collection.ValueArray C.I.greater_than``() = validate (Tuple2s.Collection.ValueArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ValueArray C.I.greater_or_equal``() = + member _.``Tuple2s.Collection.ValueArray C.I.greater_or_equal``() = validate (Tuple2s.Collection.ValueArray) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.ValueArray C.N.equals``() = + member _.``Tuple2s.Collection.ValueArray C.N.equals``() = validate (Tuple2s.Collection.ValueArray) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.ValueArray C.N.equal``() = + member _.``Tuple2s.Collection.ValueArray C.N.equal``() = validate (Tuple2s.Collection.ValueArray) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.ValueArray C.N.not_equal``() = + member _.``Tuple2s.Collection.ValueArray C.N.not_equal``() = validate (Tuple2s.Collection.ValueArray) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.ValueArray C.N.compare``() = + member _.``Tuple2s.Collection.ValueArray C.N.compare``() = validate (Tuple2s.Collection.ValueArray) C.N.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.ValueArray C.N.less_than``() = + member _.``Tuple2s.Collection.ValueArray C.N.less_than``() = validate (Tuple2s.Collection.ValueArray) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ValueArray C.N.less_or_equal``() = + member _.``Tuple2s.Collection.ValueArray C.N.less_or_equal``() = validate (Tuple2s.Collection.ValueArray) C.N.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.ValueArray C.N.greater_than``() = + member _.``Tuple2s.Collection.ValueArray C.N.greater_than``() = validate (Tuple2s.Collection.ValueArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ValueArray C.N.greater_or_equal``() = + member _.``Tuple2s.Collection.ValueArray C.N.greater_or_equal``() = validate (Tuple2s.Collection.ValueArray) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.ValueWrapArray C.I.equals``() = + member _.``Tuple2s.Collection.ValueWrapArray C.I.equals``() = validate (Tuple2s.Collection.ValueWrapArray) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.ValueWrapArray C.I.equal``() = + member _.``Tuple2s.Collection.ValueWrapArray C.I.equal``() = validate (Tuple2s.Collection.ValueWrapArray) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.ValueWrapArray C.I.not_equal``() = + member _.``Tuple2s.Collection.ValueWrapArray C.I.not_equal``() = validate (Tuple2s.Collection.ValueWrapArray) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.ValueWrapArray C.I.compare``() = + member _.``Tuple2s.Collection.ValueWrapArray C.I.compare``() = validate (Tuple2s.Collection.ValueWrapArray) C.I.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.ValueWrapArray C.I.less_than``() = + member _.``Tuple2s.Collection.ValueWrapArray C.I.less_than``() = validate (Tuple2s.Collection.ValueWrapArray) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ValueWrapArray C.I.less_or_equal``() = + member _.``Tuple2s.Collection.ValueWrapArray C.I.less_or_equal``() = validate (Tuple2s.Collection.ValueWrapArray) C.I.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.ValueWrapArray C.I.greater_than``() = + member _.``Tuple2s.Collection.ValueWrapArray C.I.greater_than``() = validate (Tuple2s.Collection.ValueWrapArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ValueWrapArray C.I.greater_or_equal``() = + member _.``Tuple2s.Collection.ValueWrapArray C.I.greater_or_equal``() = validate (Tuple2s.Collection.ValueWrapArray) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.ValueWrapArray C.N.equals``() = + member _.``Tuple2s.Collection.ValueWrapArray C.N.equals``() = validate (Tuple2s.Collection.ValueWrapArray) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.ValueWrapArray C.N.equal``() = + member _.``Tuple2s.Collection.ValueWrapArray C.N.equal``() = validate (Tuple2s.Collection.ValueWrapArray) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.ValueWrapArray C.N.not_equal``() = + member _.``Tuple2s.Collection.ValueWrapArray C.N.not_equal``() = validate (Tuple2s.Collection.ValueWrapArray) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.ValueWrapArray C.N.compare``() = + member _.``Tuple2s.Collection.ValueWrapArray C.N.compare``() = validate (Tuple2s.Collection.ValueWrapArray) C.N.compare [| 0;-1;-1;-1;1;0;-1;-1;1;1;0;-1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.ValueWrapArray C.N.less_than``() = + member _.``Tuple2s.Collection.ValueWrapArray C.N.less_than``() = validate (Tuple2s.Collection.ValueWrapArray) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ValueWrapArray C.N.less_or_equal``() = + member _.``Tuple2s.Collection.ValueWrapArray C.N.less_or_equal``() = validate (Tuple2s.Collection.ValueWrapArray) C.N.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.ValueWrapArray C.N.greater_than``() = + member _.``Tuple2s.Collection.ValueWrapArray C.N.greater_than``() = validate (Tuple2s.Collection.ValueWrapArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ValueWrapArray C.N.greater_or_equal``() = + member _.``Tuple2s.Collection.ValueWrapArray C.N.greater_or_equal``() = validate (Tuple2s.Collection.ValueWrapArray) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple2s.Collection.ArrayArray C.I.equals``() = + member _.``Tuple2s.Collection.ArrayArray C.I.equals``() = validate (Tuple2s.Collection.ArrayArray) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ArrayArray C.I.equal``() = + member _.``Tuple2s.Collection.ArrayArray C.I.equal``() = validate (Tuple2s.Collection.ArrayArray) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ArrayArray C.I.not_equal``() = + member _.``Tuple2s.Collection.ArrayArray C.I.not_equal``() = validate (Tuple2s.Collection.ArrayArray) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 |] [] - member __.``Tuple2s.Collection.ArrayArray C.I.compare``() = + member _.``Tuple2s.Collection.ArrayArray C.I.compare``() = validate (Tuple2s.Collection.ArrayArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;0;-1;-1;-1; 1;1;1;1;1;0;-1;-1;1;1;1;1;1;1;0;-1;1;1;1;1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.ArrayArray C.I.less_than``() = + member _.``Tuple2s.Collection.ArrayArray C.I.less_than``() = validate (Tuple2s.Collection.ArrayArray) C.I.less_than [| 0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ArrayArray C.I.less_or_equal``() = + member _.``Tuple2s.Collection.ArrayArray C.I.less_or_equal``() = validate (Tuple2s.Collection.ArrayArray) C.I.less_or_equal [| 0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ArrayArray C.I.greater_than``() = + member _.``Tuple2s.Collection.ArrayArray C.I.greater_than``() = validate (Tuple2s.Collection.ArrayArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0; 1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ArrayArray C.I.greater_or_equal``() = + member _.``Tuple2s.Collection.ArrayArray C.I.greater_or_equal``() = validate (Tuple2s.Collection.ArrayArray) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;1;0;0;0;0; 1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ArrayArray C.N.equals``() = + member _.``Tuple2s.Collection.ArrayArray C.N.equals``() = validate (Tuple2s.Collection.ArrayArray) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ArrayArray C.N.equal``() = + member _.``Tuple2s.Collection.ArrayArray C.N.equal``() = validate (Tuple2s.Collection.ArrayArray) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ArrayArray C.N.not_equal``() = + member _.``Tuple2s.Collection.ArrayArray C.N.not_equal``() = validate (Tuple2s.Collection.ArrayArray) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 |] [] - member __.``Tuple2s.Collection.ArrayArray C.N.compare``() = + member _.``Tuple2s.Collection.ArrayArray C.N.compare``() = validate (Tuple2s.Collection.ArrayArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;0;-1;-1;-1; 1;1;1;1;1;0;-1;-1;1;1;1;1;1;1;0;-1;1;1;1;1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.ArrayArray C.N.less_than``() = + member _.``Tuple2s.Collection.ArrayArray C.N.less_than``() = validate (Tuple2s.Collection.ArrayArray) C.N.less_than [| 0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ArrayArray C.N.less_or_equal``() = + member _.``Tuple2s.Collection.ArrayArray C.N.less_or_equal``() = validate (Tuple2s.Collection.ArrayArray) C.N.less_or_equal [| 0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;1;1;1;1;1;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ArrayArray C.N.greater_than``() = + member _.``Tuple2s.Collection.ArrayArray C.N.greater_than``() = validate (Tuple2s.Collection.ArrayArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;1;1;1;0;0;0;0; 1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ArrayArray C.N.greater_or_equal``() = + member _.``Tuple2s.Collection.ArrayArray C.N.greater_or_equal``() = validate (Tuple2s.Collection.ArrayArray) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;1;1;1;1;0;0;0;0; 1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0;1;1;1;1;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ListArray C.I.equals``() = + member _.``Tuple2s.Collection.ListArray C.I.equals``() = validate (Tuple2s.Collection.ListArray) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ListArray C.I.equal``() = + member _.``Tuple2s.Collection.ListArray C.I.equal``() = validate (Tuple2s.Collection.ListArray) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ListArray C.I.not_equal``() = + member _.``Tuple2s.Collection.ListArray C.I.not_equal``() = validate (Tuple2s.Collection.ListArray) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 |] [] - member __.``Tuple2s.Collection.ListArray C.I.compare``() = + member _.``Tuple2s.Collection.ListArray C.I.compare``() = validate (Tuple2s.Collection.ListArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;-1;-1;-1;1;1;0;-1;1;1;-1;-1;1;1;1;0;1;1;1;-1;1;-1;-1;-1;0;-1;-1;-1; 1;1;-1;-1;1;0;-1;-1;1;1;1;-1;1;1;0;-1;1;1;1;1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.ListArray C.I.less_than``() = + member _.``Tuple2s.Collection.ListArray C.I.less_than``() = validate (Tuple2s.Collection.ListArray) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ListArray C.I.less_or_equal``() = + member _.``Tuple2s.Collection.ListArray C.I.less_or_equal``() = validate (Tuple2s.Collection.ListArray) C.I.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ListArray C.I.greater_than``() = + member _.``Tuple2s.Collection.ListArray C.I.greater_than``() = validate (Tuple2s.Collection.ListArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ListArray C.I.greater_or_equal``() = + member _.``Tuple2s.Collection.ListArray C.I.greater_or_equal``() = validate (Tuple2s.Collection.ListArray) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ListArray C.N.equals``() = + member _.``Tuple2s.Collection.ListArray C.N.equals``() = validate (Tuple2s.Collection.ListArray) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ListArray C.N.equal``() = + member _.``Tuple2s.Collection.ListArray C.N.equal``() = validate (Tuple2s.Collection.ListArray) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ListArray C.N.not_equal``() = + member _.``Tuple2s.Collection.ListArray C.N.not_equal``() = validate (Tuple2s.Collection.ListArray) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 |] [] - member __.``Tuple2s.Collection.ListArray C.N.compare``() = + member _.``Tuple2s.Collection.ListArray C.N.compare``() = validate (Tuple2s.Collection.ListArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;-1;-1;-1;1;1;0;-1;1;1;-1;-1;1;1;1;0;1;1;1;-1;1;-1;-1;-1;0;-1;-1;-1; 1;1;-1;-1;1;0;-1;-1;1;1;1;-1;1;1;0;-1;1;1;1;1;1;1;1;0 |] [] - member __.``Tuple2s.Collection.ListArray C.N.less_than``() = + member _.``Tuple2s.Collection.ListArray C.N.less_than``() = validate (Tuple2s.Collection.ListArray) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ListArray C.N.less_or_equal``() = + member _.``Tuple2s.Collection.ListArray C.N.less_or_equal``() = validate (Tuple2s.Collection.ListArray) C.N.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ListArray C.N.greater_than``() = + member _.``Tuple2s.Collection.ListArray C.N.greater_than``() = validate (Tuple2s.Collection.ListArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ListArray C.N.greater_or_equal``() = + member _.``Tuple2s.Collection.ListArray C.N.greater_or_equal``() = validate (Tuple2s.Collection.ListArray) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = + member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equals``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = + member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.equal``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = + member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.not_equal``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 |] [] - member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = + member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.compare``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;-1;-1;1;1;1;0;-1;1;1;-1;1;1;1;1;0;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1; 1;1;-1;-1;1;0;-1;1;1;1;1;-1;1;1;0;1;1;-1;-1;-1;1;-1;-1;0 |] [] - member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = + member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_than``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_than [| 0;1;1;1;1;1;1;1;0;0;1;1;0;1;1;0;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1; 0;0;1;1;0;0;1;0;0;0;0;1;0;0;0;0;0;1;1;1;0;1;1;0 |] [] - member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = + member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.less_or_equal``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.less_or_equal [| 1;1;1;1;1;1;1;1;0;1;1;1;0;1;1;0;0;0;1;1;0;0;1;0;0;0;0;1;0;0;0;0;0;1;1;1;1;1;1;1; 0;0;1;1;0;1;1;0;0;0;0;1;0;0;1;0;0;1;1;1;0;1;1;1 |] [] - member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = + member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_than``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_than [| 0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;1;1;1;0;0;1;1;0;1;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0; 1;1;0;0;1;0;0;1;1;1;1;0;1;1;0;1;1;0;0;0;1;0;0;0 |] [] - member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = + member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.I.greater_or_equal``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.I.greater_or_equal [| 1;0;0;0;0;0;0;0;1;1;0;0;1;0;0;1;1;1;1;0;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;0;1;0;0;0; 1;1;0;0;1;1;0;1;1;1;1;0;1;1;1;1;1;0;0;0;1;0;0;1 |] [] - member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = + member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equals``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = + member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.equal``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = + member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.not_equal``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 |] [] - member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = + member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.compare``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;1;-1;-1;1;1;1;0;-1;1;1;-1;1;1;1;1;0;1;1;1;1;1;-1;-1;-1;0;-1;-1;-1; 1;1;-1;-1;1;0;-1;1;1;1;1;-1;1;1;0;1;1;-1;-1;-1;1;-1;-1;0 |] [] - member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = + member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_than``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_than [| 0;1;1;1;1;1;1;1;0;0;1;1;0;1;1;0;0;0;0;1;0;0;1;0;0;0;0;0;0;0;0;0;0;1;1;1;0;1;1;1; 0;0;1;1;0;0;1;0;0;0;0;1;0;0;0;0;0;1;1;1;0;1;1;0 |] [] - member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = + member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.less_or_equal``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.less_or_equal [| 1;1;1;1;1;1;1;1;0;1;1;1;0;1;1;0;0;0;1;1;0;0;1;0;0;0;0;1;0;0;0;0;0;1;1;1;1;1;1;1; 0;0;1;1;0;1;1;0;0;0;0;1;0;0;1;0;0;1;1;1;0;1;1;1 |] [] - member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = + member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_than``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_than [| 0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;1;1;1;0;0;1;1;0;1;1;1;1;0;1;1;1;1;1;0;0;0;0;0;0;0; 1;1;0;0;1;0;0;1;1;1;1;0;1;1;0;1;1;0;0;0;1;0;0;0 |] [] - member __.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = + member _.``Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray C.N.greater_or_equal``() = validate (Tuple2s.Collection.ArrayArray |> Array.map Set.ofArray) C.N.greater_or_equal [| 1;0;0;0;0;0;0;0;1;1;0;0;1;0;0;1;1;1;1;0;1;1;0;1;1;1;1;1;1;1;1;1;1;0;0;0;1;0;0;0; 1;1;0;0;1;1;0;1;1;1;1;0;1;1;1;1;1;0;0;0;1;0;0;1 |] [] - member __.``Tuple3s.Collection.Array C.I.equals``() = + member _.``Tuple3s.Collection.Array C.I.equals``() = validate (Tuple3s.Collection.Array) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple3s.Collection.Array C.I.equal``() = + member _.``Tuple3s.Collection.Array C.I.equal``() = validate (Tuple3s.Collection.Array) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple3s.Collection.Array C.I.not_equal``() = + member _.``Tuple3s.Collection.Array C.I.not_equal``() = validate (Tuple3s.Collection.Array) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member __.``Tuple3s.Collection.Array C.I.compare``() = + member _.``Tuple3s.Collection.Array C.I.compare``() = validate (Tuple3s.Collection.Array) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;0;-1;-1;-1; 1;1;1;1;1;0;-1;-1;1;1;1;1;1;1;0;-1;1;1;1;1;1;1;1;0 |] [] - member __.``Tuple3s.Collection.Array C.I.less_than``() = + member _.``Tuple3s.Collection.Array C.I.less_than``() = validate (Tuple3s.Collection.Array) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple3s.Collection.Array C.I.less_or_equal``() = + member _.``Tuple3s.Collection.Array C.I.less_or_equal``() = validate (Tuple3s.Collection.Array) C.I.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple3s.Collection.Array C.I.greater_than``() = + member _.``Tuple3s.Collection.Array C.I.greater_than``() = validate (Tuple3s.Collection.Array) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple3s.Collection.Array C.I.greater_or_equal``() = + member _.``Tuple3s.Collection.Array C.I.greater_or_equal``() = validate (Tuple3s.Collection.Array) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple3s.Collection.Array C.N.equals``() = + member _.``Tuple3s.Collection.Array C.N.equals``() = validate (Tuple3s.Collection.Array) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple3s.Collection.Array C.N.equal``() = + member _.``Tuple3s.Collection.Array C.N.equal``() = validate (Tuple3s.Collection.Array) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple3s.Collection.Array C.N.not_equal``() = + member _.``Tuple3s.Collection.Array C.N.not_equal``() = validate (Tuple3s.Collection.Array) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0 |] [] - member __.``Tuple3s.Collection.Array C.N.compare``() = + member _.``Tuple3s.Collection.Array C.N.compare``() = validate (Tuple3s.Collection.Array) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1;1;1;1;0;-1;-1;-1;-1;1;1;1;1;0;-1;-1;-1; 1;1;1;1;1;0;-1;-1;1;1;1;1;1;1;0;-1;1;1;1;1;1;1;1;0 |] [] - member __.``Tuple3s.Collection.Array C.N.less_than``() = + member _.``Tuple3s.Collection.Array C.N.less_than``() = validate (Tuple3s.Collection.Array) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple3s.Collection.Array C.N.less_or_equal``() = + member _.``Tuple3s.Collection.Array C.N.less_or_equal``() = validate (Tuple3s.Collection.Array) C.N.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple3s.Collection.Array C.N.greater_than``() = + member _.``Tuple3s.Collection.Array C.N.greater_than``() = validate (Tuple3s.Collection.Array) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 |] [] - member __.``Tuple3s.Collection.Array C.N.greater_or_equal``() = + member _.``Tuple3s.Collection.Array C.N.greater_or_equal``() = validate (Tuple3s.Collection.Array) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1 |] [] - member __.``Tuple4s.Collection.Array C.I.equals``() = + member _.``Tuple4s.Collection.Array C.I.equals``() = validate (Tuple4s.Collection.Array) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -57953,7 +57953,7 @@ type GeneratedTests () = |] [] - member __.``Tuple4s.Collection.Array C.I.equal``() = + member _.``Tuple4s.Collection.Array C.I.equal``() = validate (Tuple4s.Collection.Array) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -57965,7 +57965,7 @@ type GeneratedTests () = |] [] - member __.``Tuple4s.Collection.Array C.I.not_equal``() = + member _.``Tuple4s.Collection.Array C.I.not_equal``() = validate (Tuple4s.Collection.Array) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -57977,7 +57977,7 @@ type GeneratedTests () = |] [] - member __.``Tuple4s.Collection.Array C.I.compare``() = + member _.``Tuple4s.Collection.Array C.I.compare``() = validate (Tuple4s.Collection.Array) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1; -1;-1;-1;-1;-1;-1;-1;-1;1;1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1; @@ -57989,7 +57989,7 @@ type GeneratedTests () = |] [] - member __.``Tuple4s.Collection.Array C.I.less_than``() = + member _.``Tuple4s.Collection.Array C.I.less_than``() = validate (Tuple4s.Collection.Array) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58001,7 +58001,7 @@ type GeneratedTests () = |] [] - member __.``Tuple4s.Collection.Array C.I.less_or_equal``() = + member _.``Tuple4s.Collection.Array C.I.less_or_equal``() = validate (Tuple4s.Collection.Array) C.I.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58013,7 +58013,7 @@ type GeneratedTests () = |] [] - member __.``Tuple4s.Collection.Array C.I.greater_than``() = + member _.``Tuple4s.Collection.Array C.I.greater_than``() = validate (Tuple4s.Collection.Array) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58025,7 +58025,7 @@ type GeneratedTests () = |] [] - member __.``Tuple4s.Collection.Array C.I.greater_or_equal``() = + member _.``Tuple4s.Collection.Array C.I.greater_or_equal``() = validate (Tuple4s.Collection.Array) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58037,7 +58037,7 @@ type GeneratedTests () = |] [] - member __.``Tuple4s.Collection.Array C.N.equals``() = + member _.``Tuple4s.Collection.Array C.N.equals``() = validate (Tuple4s.Collection.Array) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58049,7 +58049,7 @@ type GeneratedTests () = |] [] - member __.``Tuple4s.Collection.Array C.N.equal``() = + member _.``Tuple4s.Collection.Array C.N.equal``() = validate (Tuple4s.Collection.Array) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58061,7 +58061,7 @@ type GeneratedTests () = |] [] - member __.``Tuple4s.Collection.Array C.N.not_equal``() = + member _.``Tuple4s.Collection.Array C.N.not_equal``() = validate (Tuple4s.Collection.Array) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -58073,7 +58073,7 @@ type GeneratedTests () = |] [] - member __.``Tuple4s.Collection.Array C.N.compare``() = + member _.``Tuple4s.Collection.Array C.N.compare``() = validate (Tuple4s.Collection.Array) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1; -1;-1;-1;-1;-1;-1;-1;-1;1;1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1; @@ -58085,7 +58085,7 @@ type GeneratedTests () = |] [] - member __.``Tuple4s.Collection.Array C.N.less_than``() = + member _.``Tuple4s.Collection.Array C.N.less_than``() = validate (Tuple4s.Collection.Array) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58097,7 +58097,7 @@ type GeneratedTests () = |] [] - member __.``Tuple4s.Collection.Array C.N.less_or_equal``() = + member _.``Tuple4s.Collection.Array C.N.less_or_equal``() = validate (Tuple4s.Collection.Array) C.N.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58109,7 +58109,7 @@ type GeneratedTests () = |] [] - member __.``Tuple4s.Collection.Array C.N.greater_than``() = + member _.``Tuple4s.Collection.Array C.N.greater_than``() = validate (Tuple4s.Collection.Array) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58121,7 +58121,7 @@ type GeneratedTests () = |] [] - member __.``Tuple4s.Collection.Array C.N.greater_or_equal``() = + member _.``Tuple4s.Collection.Array C.N.greater_or_equal``() = validate (Tuple4s.Collection.Array) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58133,7 +58133,7 @@ type GeneratedTests () = |] [] - member __.``Tuple5s.Collection.Array C.I.equals``() = + member _.``Tuple5s.Collection.Array C.I.equals``() = validate (Tuple5s.Collection.Array) C.I.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58164,7 +58164,7 @@ type GeneratedTests () = |] [] - member __.``Tuple5s.Collection.Array C.I.equal``() = + member _.``Tuple5s.Collection.Array C.I.equal``() = validate (Tuple5s.Collection.Array) C.I.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58195,7 +58195,7 @@ type GeneratedTests () = |] [] - member __.``Tuple5s.Collection.Array C.I.not_equal``() = + member _.``Tuple5s.Collection.Array C.I.not_equal``() = validate (Tuple5s.Collection.Array) C.I.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -58226,7 +58226,7 @@ type GeneratedTests () = |] [] - member __.``Tuple5s.Collection.Array C.I.compare``() = + member _.``Tuple5s.Collection.Array C.I.compare``() = validate (Tuple5s.Collection.Array) C.I.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1; -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1; @@ -58257,7 +58257,7 @@ type GeneratedTests () = |] [] - member __.``Tuple5s.Collection.Array C.I.less_than``() = + member _.``Tuple5s.Collection.Array C.I.less_than``() = validate (Tuple5s.Collection.Array) C.I.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58288,7 +58288,7 @@ type GeneratedTests () = |] [] - member __.``Tuple5s.Collection.Array C.I.less_or_equal``() = + member _.``Tuple5s.Collection.Array C.I.less_or_equal``() = validate (Tuple5s.Collection.Array) C.I.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58319,7 +58319,7 @@ type GeneratedTests () = |] [] - member __.``Tuple5s.Collection.Array C.I.greater_than``() = + member _.``Tuple5s.Collection.Array C.I.greater_than``() = validate (Tuple5s.Collection.Array) C.I.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58350,7 +58350,7 @@ type GeneratedTests () = |] [] - member __.``Tuple5s.Collection.Array C.I.greater_or_equal``() = + member _.``Tuple5s.Collection.Array C.I.greater_or_equal``() = validate (Tuple5s.Collection.Array) C.I.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58381,7 +58381,7 @@ type GeneratedTests () = |] [] - member __.``Tuple5s.Collection.Array C.N.equals``() = + member _.``Tuple5s.Collection.Array C.N.equals``() = validate (Tuple5s.Collection.Array) C.N.equals [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58412,7 +58412,7 @@ type GeneratedTests () = |] [] - member __.``Tuple5s.Collection.Array C.N.equal``() = + member _.``Tuple5s.Collection.Array C.N.equal``() = validate (Tuple5s.Collection.Array) C.N.equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58443,7 +58443,7 @@ type GeneratedTests () = |] [] - member __.``Tuple5s.Collection.Array C.N.not_equal``() = + member _.``Tuple5s.Collection.Array C.N.not_equal``() = validate (Tuple5s.Collection.Array) C.N.not_equal [| 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; @@ -58474,7 +58474,7 @@ type GeneratedTests () = |] [] - member __.``Tuple5s.Collection.Array C.N.compare``() = + member _.``Tuple5s.Collection.Array C.N.compare``() = validate (Tuple5s.Collection.Array) C.N.compare [| 0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;0;-1;-1;-1;-1;-1;-1; -1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;1;1;0;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1; @@ -58505,7 +58505,7 @@ type GeneratedTests () = |] [] - member __.``Tuple5s.Collection.Array C.N.less_than``() = + member _.``Tuple5s.Collection.Array C.N.less_than``() = validate (Tuple5s.Collection.Array) C.N.less_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58536,7 +58536,7 @@ type GeneratedTests () = |] [] - member __.``Tuple5s.Collection.Array C.N.less_or_equal``() = + member _.``Tuple5s.Collection.Array C.N.less_or_equal``() = validate (Tuple5s.Collection.Array) C.N.less_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58567,7 +58567,7 @@ type GeneratedTests () = |] [] - member __.``Tuple5s.Collection.Array C.N.greater_than``() = + member _.``Tuple5s.Collection.Array C.N.greater_than``() = validate (Tuple5s.Collection.Array) C.N.greater_than [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; @@ -58598,7 +58598,7 @@ type GeneratedTests () = |] [] - member __.``Tuple5s.Collection.Array C.N.greater_or_equal``() = + member _.``Tuple5s.Collection.Array C.N.greater_or_equal``() = validate (Tuple5s.Collection.Array) C.N.greater_or_equal [| 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/DiscrimantedUnionType.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/DiscriminatedUnionType.fs similarity index 100% rename from tests/FSharp.Core.UnitTests/FSharp.Core/DiscrimantedUnionType.fs rename to tests/FSharp.Core.UnitTests/FSharp.Core/DiscriminatedUnionType.fs diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs index ffe4f00df16..303df51ecb8 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncModule.fs @@ -272,8 +272,9 @@ type AsyncModule() = | e -> Assert.Fail(sprintf "Unexpected error %A" e) } Async.RunSynchronously test - - [] + + // test is flaky: https://github.com/dotnet/fsharp/issues/11586 + //[] member this.``OnCancel.RaceBetweenCancellationHandlerAndDisposingHandlerRegistration``() = let test() = use flag = new ManualResetEvent(false) @@ -296,7 +297,8 @@ type AsyncModule() = for _i = 1 to 300 do test() - [] + // test is flaky: https://github.com/dotnet/fsharp/issues/11586 + //[] member this.``OnCancel.RaceBetweenCancellationAndDispose``() = let flag = ref 0 let cts = new System.Threading.CancellationTokenSource() @@ -304,7 +306,7 @@ type AsyncModule() = use disp = cts.Cancel() { new IDisposable with - override __.Dispose() = incr flag } + override _.Dispose() = incr flag } while true do do! Async.Sleep 50 } @@ -314,13 +316,13 @@ type AsyncModule() = :? System.OperationCanceledException -> () Assert.AreEqual(1, !flag) - [] + // test is flaky: https://github.com/dotnet/fsharp/issues/11586 + //[] member this.``OnCancel.CancelThatWasSignalledBeforeRunningTheComputation``() = let test() = let cts = new System.Threading.CancellationTokenSource() let go e (flag : bool ref) = async { let! _ = Async.AwaitWaitHandle e - sleep 500 use! _holder = Async.OnCancel(fun () -> flag := true) while true do do! Async.Sleep 100 @@ -330,7 +332,6 @@ type AsyncModule() = let finish = new System.Threading.ManualResetEvent(false) let cancelledWasCalled = ref false Async.StartWithContinuations(go evt cancelledWasCalled, ignore, ignore, (fun _ -> finish.Set() |> ignore), cancellationToken = cts.Token) - sleep 500 evt.Set() |> ignore cts.Cancel() diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs index c89f5913c1f..689bcec6d1b 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs @@ -45,7 +45,7 @@ type AsyncType() = let onSuccess x = match !whatToDo with - | Cancel | Throw + | Cancel | Throw -> Assert.Fail("Expected onSuccess but whatToDo was not Exit", [| whatToDo |]) | Exit -> () @@ -153,7 +153,7 @@ type AsyncType() = member this.AsyncSleepInfinitely() = ignoreSynchCtx (fun () -> let computation = Async.Sleep(System.Threading.Timeout.Infinite) - let result = TaskCompletionSource() + let result = TaskCompletionSource() use cts = new CancellationTokenSource(TimeSpan.FromSeconds(1.0)) // there's a long way from 1 sec to infinity, but it'll have to do. Async.StartWithContinuations(computation, (fun _ -> result.TrySetResult("Ok") |> ignore), @@ -167,8 +167,8 @@ type AsyncType() = member private this.WaitASec (t:Task) = let result = t.Wait(TimeSpan(hours=0,minutes=0,seconds=1)) Assert.True(result, "Task did not finish after waiting for a second.") - - + + [] member this.CreateTask () = let s = "Hello tasks!" @@ -206,7 +206,7 @@ type AsyncType() = with :? AggregateException -> Assert.Fail "Task should not finish, yet" spinloop <- false - + try this.WaitASec t with :? AggregateException as a -> @@ -250,54 +250,58 @@ type AsyncType() = let! result = tcs.Task |> Async.AwaitTask return result } - try - Async.RunSynchronously(a, cancellationToken = cts.Token) - |> ignore - with :? OperationCanceledException as o -> () + let cancelled = + try + Async.RunSynchronously(a, cancellationToken = cts.Token) |> ignore + false + with :? OperationCanceledException as o -> true + | _ -> false + + Assert.True (cancelled, "Task is not cancelled") [] member this.ExceptionPropagatesToTask () = - let a = async { + let a = async { do raise (Exception ()) } #if !NET46 - let t = + let t = #else use t = #endif Async.StartAsTask a let mutable exceptionThrown = false - try + try this.WaitASec t - with + with e -> exceptionThrown <- true Assert.True (t.IsFaulted) Assert.True(exceptionThrown) - + [] member this.CancellationPropagatesToTask () = let a = async { while true do () } #if !NET46 - let t = + let t = #else use t = #endif Async.StartAsTask a - Async.CancelDefaultToken () + Async.CancelDefaultToken () let mutable exceptionThrown = false try this.WaitASec t with e -> exceptionThrown <- true - Assert.True (exceptionThrown) - Assert.True(t.IsCanceled) - + Assert.True (exceptionThrown) + Assert.True(t.IsCanceled) + [] member this.CancellationPropagatesToGroup () = let ewh = new ManualResetEvent(false) let cancelled = ref false - let a = async { + let a = async { use! holder = Async.OnCancel (fun _ -> cancelled := true) ewh.Set() |> Assert.True while true do () @@ -305,7 +309,7 @@ type AsyncType() = let cts = new CancellationTokenSource() let token = cts.Token #if !NET46 - let t = + let t = #else use t = #endif @@ -313,14 +317,14 @@ type AsyncType() = // printfn "%A" t.Status ewh.WaitOne() |> Assert.True cts.Cancel() -// printfn "%A" t.Status +// printfn "%A" t.Status let mutable exceptionThrown = false try this.WaitASec t with e -> exceptionThrown <- true - Assert.True (exceptionThrown) - Assert.True(t.IsCanceled) - Assert.True(!cancelled) + Assert.True (exceptionThrown) + Assert.True(t.IsCanceled) + Assert.True(!cancelled) [] member this.CreateImmediateAsTask () = @@ -334,38 +338,38 @@ type AsyncType() = Async.StartImmediateAsTask a this.WaitASec t Assert.True (t.IsCompleted) - Assert.AreEqual(s, t.Result) - + Assert.AreEqual(s, t.Result) + [] member this.StartImmediateAsTask () = let s = "Hello tasks!" let a = async { return s } #if !NET46 - let t = + let t = #else use t = #endif Async.StartImmediateAsTask a this.WaitASec t Assert.True (t.IsCompleted) - Assert.AreEqual(s, t.Result) + Assert.AreEqual(s, t.Result) + - [] member this.ExceptionPropagatesToImmediateTask () = - let a = async { + let a = async { do raise (Exception ()) } #if !NET46 - let t = + let t = #else use t = #endif Async.StartImmediateAsTask a let mutable exceptionThrown = false - try + try this.WaitASec t - with + with e -> exceptionThrown <- true Assert.True (t.IsFaulted) Assert.True(exceptionThrown) @@ -378,18 +382,18 @@ type AsyncType() = while true do () } #if !NET46 - let t = + let t = #else use t = #endif Async.StartImmediateAsTask a - Async.CancelDefaultToken () + Async.CancelDefaultToken () let mutable exceptionThrown = false try this.WaitASec t with e -> exceptionThrown <- true - Assert.True (exceptionThrown) - Assert.True(t.IsCanceled) + Assert.True (exceptionThrown) + Assert.True(t.IsCanceled) #endif #if IGNORED @@ -398,7 +402,7 @@ type AsyncType() = member this.CancellationPropagatesToGroupImmediate () = let ewh = new ManualResetEvent(false) let cancelled = ref false - let a = async { + let a = async { use! holder = Async.OnCancel (fun _ -> cancelled := true) ewh.Set() |> Assert.True while true do () @@ -410,21 +414,21 @@ type AsyncType() = // printfn "%A" t.Status ewh.WaitOne() |> Assert.True cts.Cancel() -// printfn "%A" t.Status +// printfn "%A" t.Status let mutable exceptionThrown = false try this.WaitASec t with e -> exceptionThrown <- true - Assert.True (exceptionThrown) - Assert.True(t.IsCanceled) - Assert.True(!cancelled) + Assert.True (exceptionThrown) + Assert.True(t.IsCanceled) + Assert.True(!cancelled) #endif [] member this.TaskAsyncValue () = let s = "Test" #if !NET46 - let t = + let t = #else use t = #endif @@ -433,38 +437,49 @@ type AsyncType() = let! s1 = Async.AwaitTask(t) return s = s1 } - Async.RunSynchronously(a, 1000) |> Assert.True + Async.RunSynchronously(a) |> Assert.True [] member this.AwaitTaskCancellation () = let test() = async { let tcs = new System.Threading.Tasks.TaskCompletionSource() tcs.SetCanceled() - try + try do! Async.AwaitTask tcs.Task return false with :? System.OperationCanceledException -> return true } - Async.RunSynchronously(test()) |> Assert.True - + Async.RunSynchronously(test()) |> Assert.True + + [] + member this.AwaitCompletedTask() = + let test() = async { + let threadIdBefore = Thread.CurrentThread.ManagedThreadId + do! Async.AwaitTask Task.CompletedTask + let threadIdAfter = Thread.CurrentThread.ManagedThreadId + return threadIdBefore = threadIdAfter + } + + Async.RunSynchronously(test()) |> Assert.True + [] member this.AwaitTaskCancellationUntyped () = let test() = async { let tcs = new System.Threading.Tasks.TaskCompletionSource() tcs.SetCanceled() - try + try do! Async.AwaitTask (tcs.Task :> Task) return false with :? System.OperationCanceledException -> return true } - Async.RunSynchronously(test()) |> Assert.True - + Async.RunSynchronously(test()) |> Assert.True + [] member this.TaskAsyncValueException () = #if !NET46 - let t = + let t = #else use t = #endif @@ -475,52 +490,59 @@ type AsyncType() = return false with e -> return true } - Async.RunSynchronously(a, 1000) |> Assert.True - - [] + Async.RunSynchronously(a) |> Assert.True + + // test is flaky: https://github.com/dotnet/fsharp/issues/11586 + //[] member this.TaskAsyncValueCancellation () = - use ewh = new ManualResetEvent(false) + use ewh = new ManualResetEvent(false) let cts = new CancellationTokenSource() let token = cts.Token #if !NET46 - let t : Task= + let t : Task= #else use t : Task= -#endif +#endif Task.Factory.StartNew(Func(fun () -> while not token.IsCancellationRequested do ()), token) let cancelled = ref true - let a = async { + let a = + async { + try use! _holder = Async.OnCancel(fun _ -> ewh.Set() |> ignore) let! v = Async.AwaitTask(t) return v - } + // AwaitTask raises TaskCanceledException when it is canceled, it is a valid result of this test + with + :? TaskCanceledException -> + ewh.Set() |> ignore // this is ok + } Async.Start a cts.Cancel() - ewh.WaitOne(10000) |> ignore + ewh.WaitOne(10000) |> ignore [] member this.NonGenericTaskAsyncValue () = let hasBeenCalled = ref false #if !NET46 - let t = + let t = #else use t = -#endif +#endif Task.Factory.StartNew(Action(fun () -> hasBeenCalled := true)) let a = async { do! Async.AwaitTask(t) return true } - let result =Async.RunSynchronously(a, 1000) + let result =Async.RunSynchronously(a) (!hasBeenCalled && result) |> Assert.True - + [] member this.NonGenericTaskAsyncValueException () = #if !NET46 - let t = + let t = #else use t = -#endif +#endif Task.Factory.StartNew(Action(fun () -> raise <| Exception())) let a = async { try @@ -528,8 +550,8 @@ type AsyncType() = return false with e -> return true } - Async.RunSynchronously(a, 3000) |> Assert.True - + Async.RunSynchronously(a) |> Assert.True + [] member this.NonGenericTaskAsyncValueCancellation () = use ewh = new ManualResetEvent(false) @@ -541,10 +563,16 @@ type AsyncType() = use t = #endif Task.Factory.StartNew(Action(fun () -> while not token.IsCancellationRequested do ()), token) - let a = async { + let a = + async { + try use! _holder = Async.OnCancel(fun _ -> ewh.Set() |> ignore) let! v = Async.AwaitTask(t) return v + // AwaitTask raises TaskCanceledException when it is canceled, it is a valid result of this test + with + :? TaskCanceledException -> + ewh.Set() |> ignore // this is ok } Async.Start a cts.Cancel() diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/EventTypes.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/EventTypes.fs new file mode 100644 index 00000000000..69cb4d65143 --- /dev/null +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/EventTypes.fs @@ -0,0 +1,77 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +// Various tests for the: +// Microsoft.FSharp.Control event types + +namespace FSharp.Core.UnitTests.Control + +open System +open System.Reflection +open Xunit + +module private EventTypes = + type MultiArgDelegate = delegate of obj * obj[] -> unit + + let getListeners event = + let eventType = event.GetType() + let multicastField = + eventType + .GetField("multicast", BindingFlags.NonPublic ||| BindingFlags.Instance) + .GetValue event + :?> System.Delegate + + if not (isNull multicastField) then + let multicastType = typeof + let listeners = + multicastType + .GetMethod("GetInvocationList") + .Invoke(multicastField, [||]) + :?> System.Delegate [] + Some listeners + else + None + +type EventTypes() = + + [] + let RunsCount = 100 + + let runAddRemoveHandlers (event: IDelegateEvent<_>) handlerInitializer = + seq { + for _ in 1 .. RunsCount do + async { + let h = handlerInitializer() + event.AddHandler(h) + event.RemoveHandler(h) + } + } |> Async.Parallel |> Async.RunSynchronously |> ignore + + [] + member this.``Adding/removing handlers to published Event<'T> is thread-safe``() = + let event = new Event() + let listenersBefore = EventTypes.getListeners event + runAddRemoveHandlers (event.Publish) (fun _ -> new Handler<_>(fun sender args -> ())) + let listenersAfter = EventTypes.getListeners event + + Assert.True(listenersBefore.IsNone) + Assert.True(listenersAfter.IsNone) + + [] + member this.``Adding/removing handlers to published DelegateEvent is thread-safe``() = + let event = new DelegateEvent<_>() + let listenersBefore = EventTypes.getListeners event + runAddRemoveHandlers (event.Publish) (fun _ -> EventTypes.MultiArgDelegate(fun sender args -> ())) + let listenersAfter = EventTypes.getListeners event + + Assert.True(listenersBefore.IsNone) + Assert.True(listenersAfter.IsNone) + + [] + member this.``Adding/removing handlers to published Event<'D,'A> is thread-safe``() = + let event = new Event<_, _>() + let listenersBefore = EventTypes.getListeners event + runAddRemoveHandlers (event.Publish) (fun _ -> EventTypes.MultiArgDelegate(fun sender args -> ())) + let listenersAfter = EventTypes.getListeners event + + Assert.True(listenersBefore.IsNone) + Assert.True(listenersAfter.IsNone) diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/MailboxProcessorType.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/MailboxProcessorType.fs index 9edfbcf410c..c887eb470c8 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/MailboxProcessorType.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/MailboxProcessorType.fs @@ -6,10 +6,8 @@ namespace FSharp.Core.UnitTests.Control open System -open FSharp.Core.UnitTests.LibraryTestFx open Xunit open System.Threading -open System.Collections.Generic type Message = | Increment of int @@ -70,16 +68,22 @@ type MailboxProcessorType() = [] member this.``Receive handles cancellation token``() = - let result = ref None - + let mutable result = None + use mre1 = new ManualResetEventSlim(false) + use mre2 = new ManualResetEventSlim(false) + // https://github.com/Microsoft/visualfsharp/issues/3337 let cts = new CancellationTokenSource () - + let addMsg msg = - match !result with - | Some text -> result := Some(text + " " + msg) - | None -> result := Some msg - + match result with + | Some text -> + //printfn "Got some, adding %s" msg + result <- Some(text + " " + msg) + | None -> + //printfn "got none, setting %s" msg + result <- Some msg + let mb = MailboxProcessor.Start ( fun inbox -> async { @@ -87,32 +91,41 @@ type MailboxProcessorType() = { new IDisposable with member this.Dispose () = addMsg "Disposed" + mre2.Set() } - + while true do - let! (msg : int) = inbox.Receive () + let! (msg : int) = inbox.Receive() addMsg (sprintf "Received %i" msg) + mre1.Set() }, cancellationToken = cts.Token) + + mb.Post(1) + mre1.Wait() + + cts.Cancel() + mre2.Wait() - mb.Post 1 - Thread.Sleep 1000 - cts.Cancel () - Thread.Sleep 4000 - - Assert.AreEqual(Some("Received 1 Disposed"), !result) + Assert.AreEqual(Some("Received 1 Disposed"), result) [] member this.``Receive with timeout argument handles cancellation token``() = - let result = ref None - + let mutable result = None + use mre1 = new ManualResetEventSlim(false) + use mre2 = new ManualResetEventSlim(false) + // https://github.com/Microsoft/visualfsharp/issues/3337 let cts = new CancellationTokenSource () - + let addMsg msg = - match !result with - | Some text -> result := Some(text + " " + msg) - | None -> result := Some msg - + match result with + | Some text -> + //printfn "Got some, adding %s" msg + result <- Some(text + " " + msg) + | None -> + //printfn "got none, setting %s" msg + result <- Some msg + let mb = MailboxProcessor.Start ( fun inbox -> async { @@ -120,31 +133,40 @@ type MailboxProcessorType() = { new IDisposable with member this.Dispose () = addMsg "Disposed" + mre2.Set() } - + while true do - let! (msg : int) = inbox.Receive (100000) + let! (msg : int) = inbox.Receive(100000) addMsg (sprintf "Received %i" msg) + mre1.Set() }, cancellationToken = cts.Token) + + mb.Post(1) + mre1.Wait() + + cts.Cancel() + mre2.Wait() - mb.Post 1 - Thread.Sleep 1000 - cts.Cancel () - Thread.Sleep 4000 - - Assert.AreEqual(Some("Received 1 Disposed"),!result) + Assert.AreEqual(Some("Received 1 Disposed"), result) [] member this.``Scan handles cancellation token``() = - let result = ref None + let mutable result = None + use mre1 = new ManualResetEventSlim(false) + use mre2 = new ManualResetEventSlim(false) // https://github.com/Microsoft/visualfsharp/issues/3337 let cts = new CancellationTokenSource () let addMsg msg = - match !result with - | Some text -> result := Some(text + " " + msg) - | None -> result := Some msg + match result with + | Some text -> + //printfn "Got some, adding %s" msg + result <- Some(text + " " + msg) + | None -> + //printfn "got none, setting %s" msg + result <- Some msg let mb = MailboxProcessor.Start ( @@ -153,19 +175,22 @@ type MailboxProcessorType() = { new IDisposable with member this.Dispose () = addMsg "Disposed" + mre2.Set() } while true do let! (msg : int) = inbox.Scan (fun msg -> Some(async { return msg }) ) addMsg (sprintf "Scanned %i" msg) + mre1.Set() }, cancellationToken = cts.Token) - mb.Post 1 - Thread.Sleep 1000 - cts.Cancel () - Thread.Sleep 4000 + mb.Post(1) + mre1.Wait() + + cts.Cancel() + mre2.Wait() - Assert.AreEqual(Some("Scanned 1 Disposed"), !result) + Assert.AreEqual(Some("Scanned 1 Disposed"), result) [] member this.``Receive Races with Post``() = @@ -291,7 +316,7 @@ type MailboxProcessorType() = test() - //[] // need to re-visit this + [] member this.PostAndAsyncReply_Cancellation() = use cancel = new CancellationTokenSource(500) diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Core/PrintfTests.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Core/PrintfTests.fs index 9c1e7dfe774..187fa62c60e 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Core/PrintfTests.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Core/PrintfTests.fs @@ -46,7 +46,37 @@ type PrintfTests() = test "%-10c" 'a' "a " [] - member __.``union case formatting`` () = + member this.NumbersInDifferentBases() = + test "%10u" 123 " 123" + test "%-10u" 123 "123 " + test "%10B" 123 " 1111011" + test "%-10B" 123 "1111011 " + test "%10o" 123 " 173" + test "%-10o" 123 "173 " + test "%10x" 123 " 7b" + test "%-10x" 123 "7b " + test "%10X" 123 " 7B" + test "%-10X" 123 "7B " + + [] + member this.VariableWidth() = + Assert.AreEqual(" a", sprintf "%*c" 8 'a' ) + Assert.AreEqual("a ", sprintf "%-*c" 8 'a' ) + Assert.AreEqual(" abc", sprintf "%*s" 8 "abc") + Assert.AreEqual("abc ", sprintf "%-*s" 8 "abc") + Assert.AreEqual(" 123", sprintf "%*u" 8 123 ) + Assert.AreEqual("123 ", sprintf "%-*u" 8 123 ) + Assert.AreEqual(" 1111011", sprintf "%*B" 8 123 ) + Assert.AreEqual("1111011 ", sprintf "%-*B" 8 123 ) + Assert.AreEqual(" 173", sprintf "%*o" 8 123 ) + Assert.AreEqual("173 ", sprintf "%-*o" 8 123 ) + Assert.AreEqual(" 7b", sprintf "%*x" 8 123 ) + Assert.AreEqual("7b ", sprintf "%-*x" 8 123 ) + Assert.AreEqual(" 7B", sprintf "%*X" 8 123 ) + Assert.AreEqual("7B ", sprintf "%-*X" 8 123 ) + + [] + member _.``union case formatting`` () = Assert.AreEqual("CaseOne", sprintf "%A" CaseOne) Assert.AreEqual("CaseTwo \"hello\"", sprintf "%A" (CaseTwo "hello")) Assert.AreEqual("CaseTwoOpt None", sprintf "%A" (CaseTwoOpt None)) @@ -54,7 +84,7 @@ type PrintfTests() = Assert.AreEqual("CaseThree (5, \"hello\")", sprintf "%A" (CaseThree (5, "hello"))) [] - member __.``union case formatting with RequireQualifiedAccess`` () = + member _.``union case formatting with RequireQualifiedAccess`` () = Assert.AreEqual("Case1", sprintf "%A" SecondUnionType.Case1) Assert.AreEqual("Case2 \"hello\"", sprintf "%A" (SecondUnionType.Case2 "hello")) Assert.AreEqual("Case2Opt None", sprintf "%A" (SecondUnionType.Case2Opt None)) @@ -62,31 +92,31 @@ type PrintfTests() = Assert.AreEqual("Case3 (5, \"hello\")", sprintf "%A" (SecondUnionType.Case3 (5, "hello"))) [] - member __.``union case formatting with UseNullAsTrueValue`` () = + member _.``union case formatting with UseNullAsTrueValue`` () = Assert.AreEqual("NullCase", sprintf "%A" NullCase) Assert.AreEqual("NullCase", sprintf "%A" RQANullAsTrueUnionType.NullCase) [] - member __.``F# option formatting`` () = + member _.``F# option formatting`` () = Assert.AreEqual("None", sprintf "%A" None) Assert.AreEqual("Some 15", sprintf "%A" (Some 15)) [] - member __.``null formatting`` () = + member _.``null formatting`` () = Assert.AreEqual("", sprintf "%A" null) Assert.AreEqual("CaseTwo null", sprintf "%A" (CaseTwo null)) [] - member __.``tuple formatting`` () = + member _.``tuple formatting`` () = Assert.AreEqual("""(1, "two", 3.4)""", sprintf "%A" (1,"two",3.4)) Assert.AreEqual("""(1, "two", 3.4, 5, 6, 7, 8, 9, "ten", 11.12)""", sprintf "%A" (1,"two",3.4,5,6,7,8,9,"ten",11.12)) [] - member __.``value tuple formatting`` () = + member _.``value tuple formatting`` () = Assert.AreEqual("""struct (1, "two", 3.4)""", sprintf "%A" (struct (1,"two",3.4))) Assert.AreEqual("""struct (1, "two", 3.4, 5, 6, 7, 8, 9, "ten", 11.12)""", sprintf "%A" (struct (1,"two",3.4,5,6,7,8,9,"ten",11.12))) [] - member __.``list types`` () = + member _.``list types`` () = Assert.AreEqual("""[CaseTwo "hello"; CaseTwo "hi there!"]""", [CaseTwo "hello"; CaseTwo "hi there!"] |> sprintf "%A") Assert.AreEqual("""[CaseTwoOpt (Some "hello"); CaseTwoOpt (Some "hi there!")]""", [CaseTwoOpt (Some "hello"); CaseTwoOpt (Some "hi there!")] |> sprintf "%A") diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Reflection/FSharpReflection.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Reflection/FSharpReflection.fs index abba3681220..ff1223b482a 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Reflection/FSharpReflection.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Reflection/FSharpReflection.fs @@ -28,7 +28,7 @@ Make sure each method works on: module IsModule = type IsModuleType () = - member __.M = 1 + member _.M = 1 type FSharpDelegate = delegate of int -> string @@ -118,10 +118,12 @@ type FSharpValueTests() = let tuple1 = ( 1, "tuple1") let tuple2 = ( 2, "tuple2", (fun x -> x + 1)) let tuple3 = ( 1, ( 2, "tuple")) + let longTuple = (("yup", 1s), 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, Some 12, 13, "nope", struct (15, 16), 17, 18, ValueSome 19) let structTuple1 = struct ( 1, "tuple1") let structTuple2 = struct ( 2, "tuple2", (fun x -> x + 1)) let structTuple3 = struct ( 1, struct ( 2, "tuple")) + let longStructTuple = struct (("yup", 1s), 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, Some 12, 13, "nope", struct (15, 16), 17, 18, ValueSome 19) let func1 param = param + 1 let func2 param = param + "" @@ -130,13 +132,13 @@ type FSharpValueTests() = let exDataless = DatalessException [] - member __.Equals1() = + member _.Equals1() = // Record value Assert.True(FSharpValue.Equals(record1, record1)) Assert.False(FSharpValue.Equals(record1, record2)) [] - member __.Equals2() = + member _.Equals2() = Assert.True(FSharpValue.Equals(structRecord1, structRecord1)) Assert.False(FSharpValue.Equals(structRecord1, structRecord2)) Assert.False(FSharpValue.Equals(structRecord1, record2)) @@ -144,72 +146,72 @@ type FSharpValueTests() = Assert.False(FSharpValue.Equals(record2, structRecord2)) [] - member __.Equals3() = + member _.Equals3() = // Generic Record value Assert.True(FSharpValue.Equals(genericRecordType1, genericRecordType1)) Assert.False(FSharpValue.Equals(genericRecordType1, genericRecordType2)) [] - member __.Equals4() = + member _.Equals4() = // null value Assert.True(FSharpValue.Equals(nullValue, nullValue)) Assert.False(FSharpValue.Equals(nullValue, 1)) [] - member __.Equals5() = + member _.Equals5() = // Single Case Union Assert.True(FSharpValue.Equals(singleCaseUnion1, singleCaseUnion1)) Assert.False(FSharpValue.Equals(singleCaseUnion1, singleCaseUnion2)) [] - member __.Equals6() = + member _.Equals6() = // Single Case Union Assert.True(FSharpValue.Equals(singleCaseStructUnion1, singleCaseStructUnion1)) Assert.False(FSharpValue.Equals(singleCaseStructUnion1, singleCaseStructUnion2)) [] - member __.Equals7() = + member _.Equals7() = // Discriminated Union Assert.True(FSharpValue.Equals(discUnionCaseA, discUnionCaseA)) Assert.False(FSharpValue.Equals(discUnionCaseB, discUnionCaseC)) [] - member __.Equals8() = + member _.Equals8() = // Discriminated Union Assert.True(FSharpValue.Equals(discStructUnionCaseA, discStructUnionCaseA)) Assert.False(FSharpValue.Equals(discStructUnionCaseB, discStructUnionCaseC)) [] - member __.Equals9() = + member _.Equals9() = // FSharpDelegate Assert.True(FSharpValue.Equals(fsharpDelegate1, fsharpDelegate1)) Assert.False(FSharpValue.Equals(fsharpDelegate1, fsharpDelegate2)) [] - member __.Equals10() = + member _.Equals10() = // Tuple Assert.True(FSharpValue.Equals(tuple1, tuple1)) Assert.False(FSharpValue.Equals( (1, 2, 3), (4, 5, 6) )) [] - member __.Equals10b() = + member _.Equals10b() = // Tuple Assert.True(FSharpValue.Equals(structTuple1, structTuple1)) Assert.False(FSharpValue.Equals( struct (1, 2, 3), struct (4, 5, 6) )) [] - member __.Equals11() = + member _.Equals11() = // Tuples of differing types Assert.False(FSharpValue.Equals(tuple1, tuple2)) [] - member __.Equals12() = + member _.Equals12() = // Exception Assert.True(FSharpValue.Equals(exInt, exInt)) Assert.False(FSharpValue.Equals(exInt, exDataless)) [] - member __.GetExceptionFields() = + member _.GetExceptionFields() = // int Assert.AreEqual(FSharpValue.GetExceptionFields(exInt), ([|1|] : obj [])) @@ -228,7 +230,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.GetExceptionFields(null) |> ignore) [] - member __.GetRecordField() = + member _.GetRecordField() = // Record let propertyinfo1 = (typeof).GetProperty("field1") @@ -250,7 +252,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.GetRecordField("invalid", propertyinfoint) |> ignore) [] - member __.GetStructRecordField() = + member _.GetStructRecordField() = // Record let propertyinfo1 = (typeof).GetProperty("field1") @@ -268,7 +270,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.GetRecordField("invalid", propertyinfoint) |> ignore) [] - member __.GetRecordFields() = + member _.GetRecordFields() = // Record let propertyinfo1 = (typeof).GetProperty("field1") Assert.AreEqual((FSharpValue.GetRecordFields(record1)).[0], "field1") @@ -285,12 +287,12 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.GetRecordFields("invalid") |> ignore) [] - member __.GetStructRecordFields() = + member _.GetStructRecordFields() = let propertyinfo1 = (typeof).GetProperty("field1") Assert.AreEqual((FSharpValue.GetRecordFields(structRecord1)).[0], "field1") [] - member __.GetTupleField() = + member _.GetTupleField() = // Tuple Assert.AreEqual((FSharpValue.GetTupleField(tuple1, 0)), 1) @@ -308,7 +310,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.GetTupleField(tuple2, 8)|> ignore) [] - member __.GetStructTupleField() = + member _.GetStructTupleField() = // Tuple Assert.AreEqual((FSharpValue.GetTupleField(structTuple1, 0)), 1) @@ -319,7 +321,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.GetTupleField(structTuple2, 8)|> ignore) [] - member __.GetTupleFields() = + member _.GetTupleFields() = // Tuple Assert.AreEqual(FSharpValue.GetTupleFields(tuple1).[0], 1) @@ -334,7 +336,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.GetTupleFields("Invalid")|> ignore) [] - member __.GetStructTupleFields() = + member _.GetStructTupleFields() = // Tuple Assert.AreEqual(FSharpValue.GetTupleFields(structTuple1).[0], 1) @@ -342,7 +344,7 @@ type FSharpValueTests() = Assert.AreEqual( (FSharpValue.GetTupleFields(structTuple2)).[1], "tuple2") [] - member __.GetUnionFields() = + member _.GetUnionFields() = // single case union let (singlecaseinfo, singlevaluearray) = FSharpValue.GetUnionFields(singleCaseUnion1, typeof) Assert.AreEqual(singlevaluearray, ([|1.0;2.0;3.0|] : obj [])) @@ -356,7 +358,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.GetUnionFields( () , null)|> ignore) [] - member __.GetStructUnionFields() = + member _.GetStructUnionFields() = // single case union let (_singlecaseinfo, singlevaluearray) = FSharpValue.GetUnionFields(singleCaseStructUnion1, typeof) Assert.AreEqual(singlevaluearray, ([|1.0;2.0;3.0|] : obj [])) @@ -366,7 +368,7 @@ type FSharpValueTests() = Assert.AreEqual(duValueArray.[0], 1) [] - member __.MakeFunction() = + member _.MakeFunction() = // Int function let implementationInt (x:obj) = box( unbox(x) + 1) @@ -381,7 +383,7 @@ type FSharpValueTests() = Assert.AreEqual(resultFuncString("parameter"), "parameter function") [] - member __.MakeRecord() = + member _.MakeRecord() = // Record let makeRecord = FSharpValue.MakeRecord(typeof, [| box"field1"; box(Some(record1)); box( fun () -> (record1, "")) |]) Assert.AreEqual(FSharpValue.GetRecordFields(makeRecord).[0], "field1") @@ -397,13 +399,13 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.MakeRecord(typeof>, [| box 1; box("invalid param"); box("invalid param") |])|> ignore) [] - member __.MakeStructRecord() = + member _.MakeStructRecord() = // Record let makeRecord = FSharpValue.MakeRecord(typeof, [| box"field1"; box(Some(structRecord1)); box( fun () -> (structRecord1, "")) |]) Assert.AreEqual(FSharpValue.GetRecordFields(makeRecord).[0], "field1") [] - member __.MakeTuple() = + member _.MakeTuple() = // Tuple let makeTuple = FSharpValue.MakeTuple([| box 1; box("tuple") |], typeof>) Assert.AreEqual(FSharpValue.GetTupleFields(makeTuple).[0], 1) @@ -419,7 +421,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.MakeTuple([| box"invalid param"; box"invalid param"|], typeof>) |> ignore) [] - member __.MakeStructTuple() = + member _.MakeStructTuple() = // Tuple let makeTuple = FSharpValue.MakeTuple([| box 1; box("tuple") |], typeof) Assert.AreEqual(FSharpValue.GetTupleFields(makeTuple).[0], 1) @@ -434,7 +436,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.MakeTuple([| box"invalid param"; box"invalid param"|], typeof) |> ignore) [] - member __.MakeUnion() = + member _.MakeUnion() = // single case union let (singlecaseinfo, _singlevaluearray) = FSharpValue.GetUnionFields(singleCaseUnion1, typeof) let resultSingleCaseUnion=FSharpValue.MakeUnion(singlecaseinfo, [| box 1.0; box 2.0; box 3.0|]) @@ -446,7 +448,7 @@ type FSharpValueTests() = Assert.AreEqual(resultDiscUnion, discUnionRecCaseB) [] - member __.MakeStructUnion() = + member _.MakeStructUnion() = // single case union let (singlecaseinfo, _singlevaluearray) = FSharpValue.GetUnionFields(singleCaseStructUnion1, typeof) let resultSingleCaseUnion=FSharpValue.MakeUnion(singlecaseinfo, [| box 1.0; box 2.0; box 3.0|]) @@ -457,7 +459,7 @@ type FSharpValueTests() = FSharpValue.MakeUnion(duCaseinfo, [| box 1|]) |> ignore [] - member __.PreComputeRecordConstructor() = + member _.PreComputeRecordConstructor() = // Record let recCtor = FSharpValue.PreComputeRecordConstructor(typeof) let resultRecordType = recCtor([| box("field1"); box(Some(record1)); box(fun () -> (record1, "")) |]) @@ -475,7 +477,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeRecordConstructor(typeof>) |> ignore) [] - member __.PreComputeStructRecordConstructor() = + member _.PreComputeStructRecordConstructor() = // Record let recCtor = FSharpValue.PreComputeRecordConstructor(typeof) let resultRecordType = recCtor([| box("field1"); box(Some(structRecord1)); box(fun () -> (structRecord1, "")) |]) @@ -483,7 +485,7 @@ type FSharpValueTests() = [] - member __.PreComputeRecordConstructorInfo() = + member _.PreComputeRecordConstructorInfo() = // Record let recordCtorInfo = FSharpValue.PreComputeRecordConstructorInfo(typeof) Assert.AreEqual(recordCtorInfo.ReflectedType, typeof ) @@ -499,13 +501,13 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeRecordConstructorInfo(typeof>) |> ignore) [] - member __.PreComputeStructRecordConstructorInfo() = + member _.PreComputeStructRecordConstructorInfo() = // Record let recordCtorInfo = FSharpValue.PreComputeRecordConstructorInfo(typeof) Assert.AreEqual(recordCtorInfo.ReflectedType, typeof ) [] - member __.PreComputeRecordFieldReader() = + member _.PreComputeRecordFieldReader() = // Record let recordFieldReader = FSharpValue.PreComputeRecordFieldReader((typeof).GetProperty("field1")) Assert.AreEqual(recordFieldReader(record1), box("field1")) @@ -518,13 +520,13 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeRecordFieldReader(null)|> ignore) [] - member __.PreComputeStructRecordFieldReader() = + member _.PreComputeStructRecordFieldReader() = // Record let recordFieldReader = FSharpValue.PreComputeRecordFieldReader((typeof).GetProperty("field1")) Assert.AreEqual(recordFieldReader(structRecord1), box("field1")) [] - member __.PreComputeRecordReader() = + member _.PreComputeRecordReader() = // Record let recordReader = FSharpValue.PreComputeRecordReader(typeof) Assert.AreEqual( (recordReader(record1)).[0], "field1") @@ -540,16 +542,19 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeRecordReader(typeof>) |> ignore) [] - member __.PreComputeStructRecordReader() = + member _.PreComputeStructRecordReader() = // Record let recordReader = FSharpValue.PreComputeRecordReader(typeof) Assert.AreEqual( (recordReader(structRecord1)).[0], "field1") [] - member __.PreComputeTupleConstructor() = + member _.PreComputeTupleConstructor() = // Tuple let tupleCtor = FSharpValue.PreComputeTupleConstructor(tuple1.GetType()) Assert.AreEqual( tupleCtor([| box 1; box "tuple1" |]) , box(tuple1)) + + let tupleCtor = FSharpValue.PreComputeTupleConstructor(longTuple.GetType()) + Assert.AreEqual( tupleCtor([| box ("yup", 1s); box 2; box 3; box 4; box 5; box 6; box 7; box 8; box 9; box 10; box 11; box (Some 12); box 13; box "nope"; box (struct (15, 16)); box 17; box 18; box (ValueSome 19) |]) , box(longTuple)) // Tuple with function member let tuplewithFuncCtor = FSharpValue.PreComputeTupleConstructor(tuple2.GetType()) @@ -568,11 +573,14 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeTupleConstructor(typeof) |> ignore) [] - member __.PreComputeStructTupleConstructor() = + member _.PreComputeStructTupleConstructor() = // Tuple let tupleCtor = FSharpValue.PreComputeTupleConstructor(structTuple1.GetType()) Assert.AreEqual( tupleCtor([| box 1; box "tuple1" |]) , box(structTuple1)) + let tupleCtor = FSharpValue.PreComputeTupleConstructor(longStructTuple.GetType()) + Assert.AreEqual( tupleCtor([| box ("yup", 1s); box 2; box 3; box 4; box 5; box 6; box 7; box 8; box 9; box 10; box 11; box (Some 12); box 13; box "nope"; box (struct (15, 16)); box 17; box 18; box (ValueSome 19) |]) , box(longStructTuple)) + // Tuple with function member let tuplewithFuncCtor = FSharpValue.PreComputeTupleConstructor(structTuple2.GetType()) let resultTuplewithFunc = tuplewithFuncCtor([| box 2; box "tuple2"; box (fun x -> x + 1) |]) @@ -586,7 +594,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeTupleConstructor(typeof>) |> ignore) [] - member __.PreComputeTupleConstructorInfo() = + member _.PreComputeTupleConstructorInfo() = // Tuple let (tupleCtorInfo, _tupleType) = FSharpValue.PreComputeTupleConstructorInfo(typeof>) Assert.AreEqual(tupleCtorInfo.ReflectedType, typeof> ) @@ -605,7 +613,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeTupleConstructorInfo(typeof) |> ignore) [] - member __.PreComputeStructTupleConstructorInfo() = + member _.PreComputeStructTupleConstructorInfo() = // Tuple let (tupleCtorInfo, _tupleType) = FSharpValue.PreComputeTupleConstructorInfo(typeof) Assert.AreEqual(tupleCtorInfo.ReflectedType, typeof ) @@ -615,7 +623,7 @@ type FSharpValueTests() = Assert.AreEqual(nestedTupleCtorInfo.ReflectedType, typeof) [] - member __.PreComputeTuplePropertyInfo() = + member _.PreComputeTuplePropertyInfo() = // Tuple let (tuplePropInfo, _typeindex) = FSharpValue.PreComputeTuplePropertyInfo(typeof>, 0) @@ -637,7 +645,7 @@ type FSharpValueTests() = // This fails as no PropertyInfo's actually exist for struct tuple types. // //[] - //member __.PreComputeStructTuplePropertyInfo() = + //member _.PreComputeStructTuplePropertyInfo() = // // // Tuple // let (tuplePropInfo, _typeindex) = FSharpValue.PreComputeTuplePropertyInfo(typeof, 0) @@ -648,7 +656,7 @@ type FSharpValueTests() = // Assert.AreEqual(tupleNestedPropInfo.PropertyType, typeof) [] - member __.PreComputeTupleReader() = + member _.PreComputeTupleReader() = // Tuple let tuplereader = FSharpValue.PreComputeTupleReader(typeof>) @@ -657,6 +665,9 @@ type FSharpValueTests() = // Nested let nestedtuplereader = FSharpValue.PreComputeTupleReader(typeof>>) Assert.AreEqual(nestedtuplereader(tuple3).[1], box(2, "tuple")) + + let longTupleReader = FSharpValue.PreComputeTupleReader (longTuple.GetType ()) + Assert.AreEqual (longTupleReader longTuple, [| box ("yup", 1s); box 2; box 3; box 4; box 5; box 6; box 7; box 8; box 9; box 10; box 11; box (Some 12); box 13; box "nope"; box (struct (15, 16)); box 17; box 18; box (ValueSome 19) |]) // null value CheckThrowsArgumentException(fun () ->FSharpValue.PreComputeTupleReader(null)|> ignore) @@ -665,7 +676,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeTupleReader(typeof) |> ignore) [] - member __.PreComputeStructTupleReader() = + member _.PreComputeStructTupleReader() = // Tuple let tuplereader = FSharpValue.PreComputeTupleReader(typeof) @@ -675,11 +686,14 @@ type FSharpValueTests() = let nestedtuplereader = FSharpValue.PreComputeTupleReader(typeof) Assert.AreEqual(nestedtuplereader(structTuple3).[1], box (struct (2, "tuple"))) + let longTupleReader = FSharpValue.PreComputeTupleReader (longStructTuple.GetType ()) + Assert.AreEqual (longTupleReader longStructTuple, [| box ("yup", 1s); box 2; box 3; box 4; box 5; box 6; box 7; box 8; box 9; box 10; box 11; box (Some 12); box 13; box "nope"; box (struct (15, 16)); box 17; box 18; box (ValueSome 19) |]) + // invalid value CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeTupleReader(typeof) |> ignore) [] - member __.PreComputeUnionConstructor() = + member _.PreComputeUnionConstructor() = // SingleCaseUnion let (singlecaseinfo, _singlevaluearray) = FSharpValue.GetUnionFields(singleCaseUnion1, typeof) @@ -694,7 +708,7 @@ type FSharpValueTests() = Assert.AreEqual(resuleDiscUnionB, discUnionRecCaseB) [] - member __.PreComputeStructUnionConstructor() = + member _.PreComputeStructUnionConstructor() = // SingleCaseUnion let (singlecaseinfo, _singlevaluearray) = FSharpValue.GetUnionFields(singleCaseStructUnion1, typeof) @@ -709,7 +723,7 @@ type FSharpValueTests() = Assert.AreEqual(resuleDiscUnionB, discStructUnionCaseB) [] - member __.PreComputeUnionConstructorInfo() = + member _.PreComputeUnionConstructorInfo() = // SingleCaseUnion let (singlecaseinfo, _singlevaluearray) = FSharpValue.GetUnionFields(singleCaseUnion1, typeof) @@ -722,7 +736,7 @@ type FSharpValueTests() = Assert.AreEqual(discUnionMethodInfo.ReflectedType, typeof>) [] - member __.PreComputeStructUnionConstructorInfo() = + member _.PreComputeStructUnionConstructorInfo() = // SingleCaseUnion let (singlecaseinfo, _singlevaluearray) = FSharpValue.GetUnionFields(singleCaseStructUnion1, typeof) @@ -735,7 +749,7 @@ type FSharpValueTests() = Assert.AreEqual(discUnionMethodInfo.ReflectedType, typeof>) [] - member __.PreComputeUnionReader() = + member _.PreComputeUnionReader() = // SingleCaseUnion let (singlecaseinfo, singlevaluearray) = FSharpValue.GetUnionFields(singleCaseUnion1, typeof) @@ -766,7 +780,7 @@ type FSharpValueTests() = Assert.AreEqual(listReader(box(list2)), [| |]) [] - member __.PreComputeStructUnionReader() = + member _.PreComputeStructUnionReader() = // SingleCaseUnion let (singlecaseinfo, singlevaluearray) = FSharpValue.GetUnionFields(singleCaseStructUnion1, typeof) @@ -788,7 +802,7 @@ type FSharpValueTests() = Assert.AreEqual(voptionReader(box(voptionNone)), [| |]) [] - member __.PreComputeUnionTagMemberInfo() = + member _.PreComputeUnionTagMemberInfo() = // SingleCaseUnion let singlecaseUnionMemberInfo = FSharpValue.PreComputeUnionTagMemberInfo(typeof) @@ -805,7 +819,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeUnionTagMemberInfo(typeof) |> ignore) [] - member __.PreComputeStructUnionTagMemberInfo() = + member _.PreComputeStructUnionTagMemberInfo() = // SingleCaseUnion let singlecaseUnionMemberInfo = FSharpValue.PreComputeUnionTagMemberInfo(typeof) @@ -816,7 +830,7 @@ type FSharpValueTests() = Assert.AreEqual(discUnionMemberInfo.ReflectedType, typeof>) [] - member __.PreComputeUnionTagReader() = + member _.PreComputeUnionTagReader() = // SingleCaseUnion let singlecaseUnionTagReader = FSharpValue.PreComputeUnionTagReader(typeof) @@ -843,7 +857,7 @@ type FSharpValueTests() = CheckThrowsArgumentException(fun () -> FSharpValue.PreComputeUnionTagReader(typeof) |> ignore) [] - member __.PreComputeStructUnionTagReader() = + member _.PreComputeStructUnionTagReader() = // SingleCaseUnion let singlecaseUnionTagReader = FSharpValue.PreComputeUnionTagReader(typeof) @@ -856,7 +870,7 @@ type FSharpValueTests() = type FSharpTypeTests() = - // instance for member __.ObjectEquals + // instance for member _.ObjectEquals let rec recordtype1 : RecordType = { field1 = "field1"; field2 = Some(recordtype1); field3 = ( fun () -> (recordtype1, "") )} let recordtype2 : RecordType = { field1 = "field2"; field2 = Some(recordtype1); field3 = ( fun () -> (recordtype1, "") )} let rec genericRecordType1 : GenericRecordType = { field1 = "field1"; field2 = 1; field3 = ( fun () -> genericRecordType1 )} @@ -886,7 +900,7 @@ type FSharpTypeTests() = // Base class methods [] - member __.ObjectEquals() = + member _.ObjectEquals() = // Record value Assert.True(FSharpValue.Equals(recordtype1, recordtype1)) @@ -923,7 +937,7 @@ type FSharpTypeTests() = // Static methods [] - member __.GetExceptionFields() = + member _.GetExceptionFields() = // positive let forallexistedInt = @@ -945,7 +959,7 @@ type FSharpTypeTests() = [] - member __.GetFunctionElements() = + member _.GetFunctionElements() = // positive Assert.AreEqual(FSharpType.GetFunctionElements(typeof string>), (typeof, typeof)) @@ -958,7 +972,7 @@ type FSharpTypeTests() = CheckThrowsArgumentNullException(fun () ->FSharpType.GetFunctionElements(null) |> ignore ) [] - member __.GetRecordFields() = + member _.GetRecordFields() = // positive Assert.AreEqual(FSharpType.GetRecordFields(typeof), (typeof.GetProperties())) @@ -972,7 +986,7 @@ type FSharpTypeTests() = [] - member __.GetTupleElements() = + member _.GetTupleElements() = // positive Assert.AreEqual(FSharpType.GetTupleElements(typeof>), [|typeof; typeof|]) @@ -985,7 +999,7 @@ type FSharpTypeTests() = CheckThrowsArgumentNullException(fun () ->FSharpType.GetTupleElements(null) |> ignore ) [] - member __.GetUnionCases() = + member _.GetUnionCases() = // SingleCaseUnion let singlecaseUnionCaseInfoArray = FSharpType.GetUnionCases(typeof) let (expectedSinglecaseinfo, singlevaluearray) = FSharpValue.GetUnionFields(singlecaseunion1, typeof) @@ -1003,7 +1017,7 @@ type FSharpTypeTests() = CheckThrowsArgumentException(fun () -> FSharpType.GetUnionCases(typeof) |> ignore) [] - member __.IsExceptionRepresentation() = + member _.IsExceptionRepresentation() = // positive Assert.True(FSharpType.IsExceptionRepresentation(typeof)) @@ -1017,7 +1031,7 @@ type FSharpTypeTests() = CheckThrowsArgumentNullException(fun () -> FSharpType.IsExceptionRepresentation(null) |> ignore ) [] - member __.IsFunction() = + member _.IsFunction() = // positive Assert.True(FSharpType.IsFunction(typeof int>)) @@ -1030,7 +1044,7 @@ type FSharpTypeTests() = CheckThrowsArgumentNullException(fun () -> FSharpType.IsFunction(null) |> ignore ) [] - member __.IsModule() = + member _.IsModule() = let getasm (t : Type) = t.Assembly @@ -1061,7 +1075,7 @@ type FSharpTypeTests() = CheckThrowsArgumentNullException(fun () -> FSharpType.IsModule(null) |> ignore ) [] - member __.IsRecord() = + member _.IsRecord() = // positive Assert.True(FSharpType.IsRecord(typeof)) @@ -1076,14 +1090,14 @@ type FSharpTypeTests() = // Regression for 5588, Reflection: unit is still treated as a record type, but only if you pass BindingFlags.NonPublic [] - member __.``IsRecord.Regression5588``() = + member _.``IsRecord.Regression5588``() = // negative Assert.False(FSharpType.IsRecord(typeof)) Assert.False( FSharpType.IsRecord(typeof, System.Reflection.BindingFlags.NonPublic) ) () [] - member __.IsTuple() = + member _.IsTuple() = // positive Assert.True(FSharpType.IsTuple(typeof>)) Assert.True(FSharpType.IsTuple(typeof>)) @@ -1099,7 +1113,7 @@ type FSharpTypeTests() = CheckThrowsArgumentNullException(fun () ->FSharpType.IsTuple(null) |> ignore ) [] - member __.IsUnion() = + member _.IsUnion() = // positive Assert.True(FSharpType.IsUnion(typeof)) @@ -1115,7 +1129,7 @@ type FSharpTypeTests() = CheckThrowsArgumentNullException(fun () ->FSharpType.IsUnion(null) |> ignore ) [] - member __.MakeFunctionType() = + member _.MakeFunctionType() = // positive Assert.AreEqual(FSharpType.MakeFunctionType(typeof, typeof), typeofstring>) @@ -1127,7 +1141,7 @@ type FSharpTypeTests() = CheckThrowsArgumentNullException(fun () ->FSharpType.MakeFunctionType(null, null) |> ignore ) [] - member __.MakeTupleType() = + member _.MakeTupleType() = // positive Assert.AreEqual(FSharpType.MakeTupleType([|typeof; typeof|]), typeof>) @@ -1139,7 +1153,7 @@ type FSharpTypeTests() = CheckThrowsArgumentException(fun () ->FSharpType.MakeTupleType([|null;null|]) |> ignore ) [] - member __.MakeStructTupleType() = + member _.MakeStructTupleType() = let asm = typeof.Assembly // positive Assert.AreEqual(FSharpType.MakeStructTupleType(asm, [|typeof; typeof|]), typeof) @@ -1174,7 +1188,7 @@ type UnionCaseInfoTests() = let ((recDiscCaseinfo:UnionCaseInfo), recDiscCasevaluearray) = FSharpValue.GetUnionFields(recDiscUniontypeB, typeof>) [] - member __.Equals() = + member _.Equals() = //positive // single case Assert.True(singlecaseinfo.Equals(singlecaseinfo)) @@ -1199,7 +1213,7 @@ type UnionCaseInfoTests() = Assert.False(singlecaseinfo.Equals(null)) [] - member __.GetCustomAttributes() = + member _.GetCustomAttributes() = // single case let singlecaseAttribute = (singlecaseinfo.GetCustomAttributes()).[0] :?> Attribute @@ -1217,7 +1231,7 @@ type UnionCaseInfoTests() = CheckThrowsArgumentNullException(fun () -> singlecaseinfo.GetCustomAttributes(null) |> ignore ) [] - member __.GetFields() = + member _.GetFields() = // single case let singlecaseFieldInfo = (singlecaseinfo.GetFields()).[0] @@ -1236,7 +1250,7 @@ type UnionCaseInfoTests() = Assert.AreEqual(recdiscFieldInfo.PropertyType , typeof) [] - member __.GetHashCode() = + member _.GetHashCode() = // positive // single case @@ -1255,7 +1269,7 @@ type UnionCaseInfoTests() = Assert.AreNotEqual(discUnionInfoA.GetHashCode(), discUnionInfoB.GetHashCode()) [] - member __.GetType() = + member _.GetType() = // single case Assert.AreEqual(singlecaseinfo.GetType(), typeof ) @@ -1267,7 +1281,7 @@ type UnionCaseInfoTests() = Assert.AreEqual(recDiscCaseinfo.GetType(), typeof ) [] - member __.ToString() = + member _.ToString() = // single case Assert.AreEqual(singlenullarycaseinfo.ToString(), "SingleNullaryCaseDiscUnion.SingleNullaryCaseTag") diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/PrimTypes.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/PrimTypes.fs index 67f887e051a..81429996a05 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/PrimTypes.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/PrimTypes.fs @@ -885,22 +885,22 @@ module internal RangeTestsHelpers = type RangeTests() = - [] member __.``Range.SByte`` () = RangeTestsHelpers.signed System.SByte.MinValue System.SByte.MaxValue - [] member __.``Range.Byte`` () = RangeTestsHelpers.unsigned System.Byte.MinValue System.Byte.MaxValue - [] member __.``Range.Int16`` () = RangeTestsHelpers.signed System.Int16.MinValue System.Int16.MaxValue - [] member __.``Range.UInt16`` () = RangeTestsHelpers.unsigned System.UInt16.MinValue System.UInt16.MaxValue - [] member __.``Range.Int32`` () = RangeTestsHelpers.signed System.Int32.MinValue System.Int32.MaxValue - [] member __.``Range.UInt32`` () = RangeTestsHelpers.unsigned System.UInt32.MinValue System.UInt32.MaxValue - [] member __.``Range.Int64`` () = RangeTestsHelpers.signed System.Int64.MinValue System.Int64.MaxValue - [] member __.``Range.UInt64`` () = RangeTestsHelpers.unsigned System.UInt64.MinValue System.UInt64.MaxValue + [] member _.``Range.SByte`` () = RangeTestsHelpers.signed System.SByte.MinValue System.SByte.MaxValue + [] member _.``Range.Byte`` () = RangeTestsHelpers.unsigned System.Byte.MinValue System.Byte.MaxValue + [] member _.``Range.Int16`` () = RangeTestsHelpers.signed System.Int16.MinValue System.Int16.MaxValue + [] member _.``Range.UInt16`` () = RangeTestsHelpers.unsigned System.UInt16.MinValue System.UInt16.MaxValue + [] member _.``Range.Int32`` () = RangeTestsHelpers.signed System.Int32.MinValue System.Int32.MaxValue + [] member _.``Range.UInt32`` () = RangeTestsHelpers.unsigned System.UInt32.MinValue System.UInt32.MaxValue + [] member _.``Range.Int64`` () = RangeTestsHelpers.signed System.Int64.MinValue System.Int64.MaxValue + [] member _.``Range.UInt64`` () = RangeTestsHelpers.unsigned System.UInt64.MinValue System.UInt64.MaxValue [] - member __.``Range.IntPtr`` () = + member _.``Range.IntPtr`` () = if System.IntPtr.Size >= 4 then RangeTestsHelpers.signed (System.IntPtr System.Int32.MinValue) (System.IntPtr System.Int32.MaxValue) if System.IntPtr.Size >= 8 then RangeTestsHelpers.signed (System.IntPtr System.Int64.MinValue) (System.IntPtr System.Int64.MaxValue) [] - member __.``Range.UIntPtr`` () = + member _.``Range.UIntPtr`` () = if System.UIntPtr.Size >= 4 then RangeTestsHelpers.unsigned (System.UIntPtr System.UInt32.MinValue) (System.UIntPtr System.UInt32.MaxValue) if System.UIntPtr.Size >= 8 then RangeTestsHelpers.unsigned (System.UIntPtr System.UInt64.MinValue) (System.UIntPtr System.UInt64.MaxValue) @@ -911,7 +911,7 @@ open NonStructuralComparison type NonStructuralComparisonTests() = [] - member __.CompareFloat32() = // https://github.com/Microsoft/visualfsharp/pull/4493 + member _.CompareFloat32() = // https://github.com/Microsoft/visualfsharp/pull/4493 let x = 32 |> float32 let y = 32 |> float32 diff --git a/tests/FSharp.Core.UnitTests/SurfaceArea.fs b/tests/FSharp.Core.UnitTests/SurfaceArea.fs index 11fb8cec14e..e68d5515509 100644 --- a/tests/FSharp.Core.UnitTests/SurfaceArea.fs +++ b/tests/FSharp.Core.UnitTests/SurfaceArea.fs @@ -701,6 +701,14 @@ Microsoft.FSharp.Core.CompilerMessageAttribute: System.String get_Message() 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.ArrayCollector`1[T]: T[] Close() +Microsoft.FSharp.Core.CompilerServices.ArrayCollector`1[T]: Void Add(T) +Microsoft.FSharp.Core.CompilerServices.ArrayCollector`1[T]: Void AddMany(System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Core.CompilerServices.ArrayCollector`1[T]: T[] AddManyAndClose(System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Core.CompilerServices.ListCollector`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Close() +Microsoft.FSharp.Core.CompilerServices.ListCollector`1[T]: Void Add(T) +Microsoft.FSharp.Core.CompilerServices.ListCollector`1[T]: Void AddMany(System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Core.CompilerServices.ListCollector`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] AddManyAndClose(System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean CheckClose 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) diff --git a/tests/FSharp.Test.Utilities/Compiler.fs b/tests/FSharp.Test.Utilities/Compiler.fs index 1deb43dfade..153904e1636 100644 --- a/tests/FSharp.Test.Utilities/Compiler.fs +++ b/tests/FSharp.Test.Utilities/Compiler.fs @@ -3,11 +3,12 @@ namespace FSharp.Test.Utilities open FSharp.Compiler.Interactive.Shell -open FSharp.Compiler.Scripting -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.IO +open FSharp.Compiler.Diagnostics open FSharp.Test.Utilities open FSharp.Test.Utilities.Assert open FSharp.Test.Utilities.Utilities +open FSharp.Test.ScriptHelpers open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.CSharp open NUnit.Framework @@ -101,7 +102,9 @@ module rec Compiler = let private getSource (src: TestType) : string = match src with | Text t -> t - | Path p -> System.IO.File.ReadAllText p + | Path p -> + use stream = FileSystem.OpenFileForReadShim(p) + stream.ReadAllText() let private fsFromString (source: string) (kind: SourceKind) : FSharpCompilationSource = match source with @@ -121,29 +124,29 @@ module rec Compiler = | null -> failwith "Source cannot be null" | _ -> { Source = Text source - LangVersion = CSharpLanguageVersion.CSharp8 - TargetFramework = TargetFramework.NetCoreApp31 + LangVersion = CSharpLanguageVersion.CSharp9 + TargetFramework = TargetFramework.Current Name = None References = [] } - let private fromFSharpErrorInfo (errors: FSharpErrorInfo[]) : ErrorInfo list = - let toErrorInfo (e: FSharpErrorInfo) : ErrorInfo = + let private fromFSharpDiagnostic (errors: FSharpDiagnostic[]) : ErrorInfo list = + let toErrorInfo (e: FSharpDiagnostic) : ErrorInfo = let errorNumber = e.ErrorNumber let severity = e.Severity - let error = if severity = FSharpErrorSeverity.Warning then Warning errorNumber else Error errorNumber + let error = if severity = FSharpDiagnosticSeverity.Warning then Warning errorNumber else Error errorNumber { Error = error Range = - { StartLine = e.StartLineAlternate + { StartLine = e.StartLine StartColumn = e.StartColumn - EndLine = e.EndLineAlternate + EndLine = e.EndLine EndColumn = e.EndColumn } Message = e.Message } errors |> List.ofArray - |> List.distinctBy (fun e -> e.Severity, e.ErrorNumber, e.StartLineAlternate, e.StartColumn, e.EndLineAlternate, e.EndColumn, e.Message) + |> List.distinctBy (fun e -> e.Severity, e.ErrorNumber, e.StartLine, e.StartColumn, e.EndLine, e.EndColumn, e.Message) |> List.map toErrorInfo let private partitionErrors diagnostics = diagnostics |> List.partition (fun e -> match e.Error with Error _ -> true | _ -> false) @@ -274,9 +277,9 @@ module rec Compiler = let private compileFSharpCompilation compilation ignoreWarnings : TestResult = - let ((err: FSharpErrorInfo[], outputFilePath: string), deps) = CompilerAssert.CompileRaw(compilation, ignoreWarnings) + let ((err: FSharpDiagnostic[], outputFilePath: string), deps) = CompilerAssert.CompileRaw(compilation, ignoreWarnings) - let diagnostics = err |> fromFSharpErrorInfo + let diagnostics = err |> fromFSharpDiagnostic let result = { OutputPath = None @@ -367,7 +370,7 @@ module rec Compiler = let parseResults = CompilerAssert.Parse source let failed = parseResults.ParseHadErrors - let diagnostics = parseResults.Errors |> fromFSharpErrorInfo + let diagnostics = parseResults.Diagnostics |> fromFSharpDiagnostic let result = { OutputPath = None @@ -386,21 +389,21 @@ module rec Compiler = | FS fs -> parseFSharp fs | _ -> failwith "Parsing only supported for F#." - let private typecheckFSharpSourceAndReturnErrors (fsSource: FSharpCompilationSource) : FSharpErrorInfo [] = + let private typecheckFSharpSourceAndReturnErrors (fsSource: FSharpCompilationSource) : FSharpDiagnostic [] = let source = getSource fsSource.Source let options = fsSource.Options |> Array.ofList let name = match fsSource.Name with | None -> "test.fs" | Some n -> n - let (err: FSharpErrorInfo []) = CompilerAssert.TypeCheckWithOptionsAndName options name source + let (err: FSharpDiagnostic []) = CompilerAssert.TypeCheckWithOptionsAndName options name source err let private typecheckFSharpSource (fsSource: FSharpCompilationSource) : TestResult = - let (err: FSharpErrorInfo []) = typecheckFSharpSourceAndReturnErrors fsSource + let (err: FSharpDiagnostic []) = typecheckFSharpSourceAndReturnErrors fsSource - let diagnostics = err |> fromFSharpErrorInfo + let diagnostics = err |> fromFSharpDiagnostic let result = { OutputPath = None @@ -426,6 +429,17 @@ module rec Compiler = | FS fs -> typecheckFSharp fs | _ -> failwith "Typecheck only supports F#" + let typecheckResults (cUnit: CompilationUnit) : FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults = + match cUnit with + | FS fsSource -> + let source = getSource fsSource.Source + let options = fsSource.Options |> Array.ofList + + let name = match fsSource.Name with | None -> "test.fs" | Some n -> n + + CompilerAssert.TypeCheck(options, name, source) + | _ -> failwith "Typecheck only supports F#" + let run (result: TestResult) : TestResult = match result with | Failure f -> failwith (sprintf "Compilation should be successfull in order to run.\n Errors: %A" (f.Diagnostics)) @@ -450,9 +464,9 @@ module rec Compiler = use script = new FSharpScript(additionalArgs=options) - let ((evalresult: Result), (err: FSharpErrorInfo[])) = script.Eval(source) + let ((evalresult: Result), (err: FSharpDiagnostic[])) = script.Eval(source) - let diagnostics = err |> fromFSharpErrorInfo + let diagnostics = err |> fromFSharpDiagnostic let result = { OutputPath = None @@ -502,9 +516,9 @@ module rec Compiler = | _ -> failwith "FSI running only supports F#." - let private createBaselineErrors (baseline: Baseline) actualErrors extension : unit = + let private createBaselineErrors (baseline: Baseline) (actualErrors: string) extension : unit = match baseline.SourceFilename with - | Some f -> File.WriteAllText(Path.ChangeExtension(f, extension), actualErrors) + | Some f -> FileSystem.OpenFileForWriteShim(Path.ChangeExtension(f, extension)).Write(actualErrors) | _ -> () let private verifyFSBaseline (fs) : unit = @@ -605,8 +619,8 @@ module rec Compiler = // TODO: Check all "categories", collect all results and print alltogether. checkEqual "Errors count" expected.Length errors.Length - List.zip errors expected - |> List.iter (fun (actualError, expectedError) -> + (errors, expected) + ||> List.iter2 (fun actualError expectedError -> let { Error = actualError; Range = actualRange; Message = actualMessage } = actualError let { Error = expectedError; Range = expectedRange; Message = expectedMessage } = expectedError checkEqual "Error" expectedError actualError diff --git a/tests/FSharp.Test.Utilities/CompilerAssert.fs b/tests/FSharp.Test.Utilities/CompilerAssert.fs index d79135284a4..c9e0d50582f 100644 --- a/tests/FSharp.Test.Utilities/CompilerAssert.fs +++ b/tests/FSharp.Test.Utilities/CompilerAssert.fs @@ -3,22 +3,18 @@ namespace FSharp.Test.Utilities open System -open System.Diagnostics open System.IO open System.Text -open System.Diagnostics -open System.Collections.Generic open System.Reflection -open FSharp.Compiler.Text -open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Interactive.Shell +open FSharp.Compiler.IO +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.Text #if FX_NO_APP_DOMAINS open System.Runtime.Loader #endif open NUnit.Framework -open System.Reflection.Emit -open Microsoft.CodeAnalysis -open Microsoft.CodeAnalysis.CSharp open FSharp.Test.Utilities.Utilities open TestFramework @@ -41,7 +37,7 @@ type Worker () = AppDomain.CurrentDomain.add_AssemblyResolve(ResolveEventHandler(fun _ args -> deps |> Array.tryFind (fun (x: string) -> Path.GetFileNameWithoutExtension x = args.Name) - |> Option.bind (fun x -> if File.Exists x then Some x else None) + |> Option.bind (fun x -> if FileSystem.FileExistsShim x then Some x else None) |> Option.map Assembly.LoadFile |> Option.defaultValue null)) let asm = Assembly.LoadFrom(assemblyPath) @@ -80,109 +76,6 @@ type CompilerAssert private () = static let checker = FSharpChecker.Create(suggestNamesForErrors=true) - static let config = TestFramework.initializeSuite () - - static let _ = config |> ignore - -// Do a one time dotnet sdk build to compute the proper set of reference assemblies to pass to the compiler - static let projectFile = """ - - - - Exe - $TARGETFRAMEWORK - true - true - - - - - - - - - - - - - - - - - - - - - - - -""" - - static let directoryBuildProps = """ - - -""" - - static let directoryBuildTargets = """ - - -""" - - static let programFs = """ -open System - -[] -let main argv = 0""" - - static let getNetCoreAppReferences = - let mutable output = "" - let mutable errors = "" - let mutable cleanUp = true - let pathToArtifacts = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "../../../..")) - if Path.GetFileName(pathToArtifacts) <> "artifacts" then failwith "CompilerAssert did not find artifacts directory --- has the location changed????" - let pathToTemp = Path.Combine(pathToArtifacts, "Temp") - let projectDirectory = Path.Combine(pathToTemp, "CompilerAssert", Path.GetRandomFileName()) - let pathToFSharpCore = typeof.Assembly.Location - try - try - Directory.CreateDirectory(projectDirectory) |> ignore - let projectFileName = Path.Combine(projectDirectory, "ProjectFile.fsproj") - let programFsFileName = Path.Combine(projectDirectory, "Program.fs") - let directoryBuildPropsFileName = Path.Combine(projectDirectory, "Directory.Build.props") - let directoryBuildTargetsFileName = Path.Combine(projectDirectory, "Directory.Build.targets") - let frameworkReferencesFileName = Path.Combine(projectDirectory, "FrameworkReferences.txt") -#if NETCOREAPP - File.WriteAllText(projectFileName, projectFile.Replace("$TARGETFRAMEWORK", "netcoreapp3.1").Replace("$FSHARPCORELOCATION", pathToFSharpCore)) -#else - File.WriteAllText(projectFileName, projectFile.Replace("$TARGETFRAMEWORK", "net472").Replace("$FSHARPCORELOCATION", pathToFSharpCore)) -#endif - File.WriteAllText(programFsFileName, programFs) - File.WriteAllText(directoryBuildPropsFileName, directoryBuildProps) - File.WriteAllText(directoryBuildTargetsFileName, directoryBuildTargets) - - let timeout = 30000 - let exitCode, output, errors = Commands.executeProcess (Some config.DotNetExe) "build" projectDirectory timeout - - if exitCode <> 0 || errors.Length > 0 then - printfn "Output:\n=======\n" - output |> Seq.iter(fun line -> printfn "STDOUT:%s\n" line) - printfn "Errors:\n=======\n" - errors |> Seq.iter(fun line -> printfn "STDERR:%s\n" line) - Assert.True(false, "Errors produced generating References") - - File.ReadLines(frameworkReferencesFileName) |> Seq.toArray - with | e -> - cleanUp <- false - printfn "Project directory: %s" projectDirectory - printfn "STDOUT: %s" output - File.WriteAllText(Path.Combine(projectDirectory, "project.stdout"), output) - printfn "STDERR: %s" errors - File.WriteAllText(Path.Combine(projectDirectory, "project.stderror"), errors) - raise (new Exception (sprintf "An error occurred getting netcoreapp references: %A" e)) - finally - if cleanUp then - try Directory.Delete(projectDirectory) with | _ -> () - #if FX_NO_APP_DOMAINS static let executeBuiltApp assembly deps = let ctxt = AssemblyLoadContext("ContextName", true) @@ -218,7 +111,7 @@ let main argv = 0""" ProjectId = None SourceFiles = [|"test.fs"|] OtherOptions = - let assemblies = getNetCoreAppReferences |> Array.map (fun x -> sprintf "-r:%s" x) + let assemblies = TargetFrameworkUtil.currentReferences |> Array.map (fun x -> sprintf "-r:%s" x) #if NETCOREAPP Array.append [|"--preferreduilang:en-US"; "--targetprofile:netcore"; "--noframework"; "--simpleresolution"; "--warn:5"|] assemblies #else @@ -230,7 +123,6 @@ let main argv = 0""" LoadTime = DateTime() UnresolvedReferences = None OriginalLoadReferences = [] - ExtraProjectInfo = None Stamp = None } @@ -239,7 +131,7 @@ let main argv = 0""" let args = options |> Array.append defaultProjectOptions.OtherOptions - |> Array.append [| "fsc.exe"; inputFilePath; "-o:" + outputFilePath; (if isExe then "--target:exe" else "--target:library"); "--nowin32manifest" |] + |> Array.append [| "fsc.dll"; inputFilePath; "-o:" + outputFilePath; (if isExe then "--target:exe" else "--target:library"); "--nowin32manifest" |] let errors, _ = checker.Compile args |> Async.RunSynchronously errors, outputFilePath @@ -274,13 +166,13 @@ let main argv = 0""" o.Dispose() reraise() - static let assertErrors libAdjust ignoreWarnings (errors: FSharpErrorInfo []) expectedErrors = + static let assertErrors libAdjust ignoreWarnings (errors: FSharpDiagnostic []) expectedErrors = let errors = errors - |> Array.filter (fun error -> if ignoreWarnings then error.Severity <> FSharpErrorSeverity.Warning else true) - |> Array.distinctBy (fun e -> e.Severity, e.ErrorNumber, e.StartLineAlternate, e.StartColumn, e.EndLineAlternate, e.EndColumn, e.Message) + |> Array.filter (fun error -> if ignoreWarnings then error.Severity <> FSharpDiagnosticSeverity.Warning else true) + |> Array.distinctBy (fun e -> e.Severity, e.ErrorNumber, e.StartLine, e.StartColumn, e.EndLine, e.EndColumn, e.Message) |> Array.map (fun info -> - (info.Severity, info.ErrorNumber, (info.StartLineAlternate - libAdjust, info.StartColumn + 1, info.EndLineAlternate - libAdjust, info.EndColumn + 1), info.Message)) + (info.Severity, info.ErrorNumber, (info.StartLine - libAdjust, info.StartColumn + 1, info.EndLine - libAdjust, info.EndColumn + 1), info.Message)) let checkEqual k a b = if a <> b then @@ -299,12 +191,10 @@ let main argv = 0""" checkEqual "ErrorRange" expectedErrorRange actualErrorRange checkEqual "Message" expectedErrorMsg actualErrorMsg) - static let gate = obj () - static let compile isExe options source f = - lock gate (fun _ -> compileAux isExe options source f) + compileAux isExe options source f - static let rec compileCompilationAux outputPath (disposals: ResizeArray) ignoreWarnings (cmpl: Compilation) : (FSharpErrorInfo[] * string) * string list = + static let rec compileCompilationAux outputPath (disposals: ResizeArray) ignoreWarnings (cmpl: Compilation) : (FSharpDiagnostic[] * string) * string list = let compilationRefs, deps = match cmpl with | Compilation(_, _, _, _, cmpls, _) -> @@ -442,7 +332,7 @@ let main argv = 0""" let runtimeconfig = """ { "runtimeOptions": { - "tfm": "netcoreapp3.1", + "tfm": "net5.0", "framework": { "name": "Microsoft.NETCore.App", "version": "5.0.0" @@ -457,19 +347,22 @@ let main argv = 0""" #endif let timeout = 30000 let exitCode, output, errors = Commands.executeProcess (Some filename) arguments (Path.GetDirectoryName(outputFilePath)) timeout - (exitCode, output |> String.concat Environment.NewLine, errors |> String.concat Environment.NewLine) + (exitCode, output |> String.concat "\n", errors |> String.concat "\n") + + static member Checker = checker + + static member DefaultProjectOptions = defaultProjectOptions static member CompileWithErrors(cmpl: Compilation, expectedErrors, ?ignoreWarnings) = let ignoreWarnings = defaultArg ignoreWarnings false - lock gate (fun () -> - compileCompilation ignoreWarnings cmpl (fun ((errors, _), _) -> - assertErrors 0 ignoreWarnings errors expectedErrors)) + compileCompilation ignoreWarnings cmpl (fun ((errors, _), _) -> + assertErrors 0 ignoreWarnings errors expectedErrors) static member Compile(cmpl: Compilation, ?ignoreWarnings) = CompilerAssert.CompileWithErrors(cmpl, [||], defaultArg ignoreWarnings false) static member CompileRaw(cmpl: Compilation, ?ignoreWarnings) = - lock gate (fun () -> returnCompilation cmpl (defaultArg ignoreWarnings false)) + returnCompilation cmpl (defaultArg ignoreWarnings false) static member ExecuteAndReturnResult (outputFilePath: string, deps: string list, newProcess: bool) = // If we execute in-process (true by default), then the only way of getting STDOUT is to redirect it to SB, and STDERR is from catching an exception. @@ -483,42 +376,40 @@ let main argv = 0""" let beforeExecute = defaultArg beforeExecute (fun _ _ -> ()) let newProcess = defaultArg newProcess false let onOutput = defaultArg onOutput (fun _ -> ()) - lock gate (fun () -> - compileCompilation ignoreWarnings cmpl (fun ((errors, outputFilePath), deps) -> - assertErrors 0 ignoreWarnings errors [||] - beforeExecute outputFilePath deps - if newProcess then - let (exitCode, output, errors) = executeBuiltAppNewProcessAndReturnResult outputFilePath - if exitCode <> 0 then - Assert.Fail errors - onOutput output - else - executeBuiltApp outputFilePath deps)) + compileCompilation ignoreWarnings cmpl (fun ((errors, outputFilePath), deps) -> + assertErrors 0 ignoreWarnings errors [||] + beforeExecute outputFilePath deps + if newProcess then + let (exitCode, output, errors) = executeBuiltAppNewProcessAndReturnResult outputFilePath + if exitCode <> 0 then + Assert.Fail errors + onOutput output + else + executeBuiltApp outputFilePath deps) static member ExecutionHasOutput(cmpl: Compilation, expectedOutput: string) = - CompilerAssert.Execute(cmpl, newProcess = true, onOutput = (fun output -> Assert.AreEqual(expectedOutput, output))) + CompilerAssert.Execute(cmpl, newProcess = true, onOutput = (fun output -> Assert.AreEqual(expectedOutput, output, sprintf "'%s' = '%s'" expectedOutput output))) /// Assert that the given source code compiles with the `defaultProjectOptions`, with no errors or warnings static member CompileOfAst isExe source = let outputFilePath = Path.ChangeExtension (Path.GetTempFileName(), if isExe then "exe" else ".dll") let parseOptions = { FSharpParsingOptions.Default with SourceFiles = [|"test.fs"|] } - let parseResults = - checker.ParseFile("test.fs", SourceText.ofString source, parseOptions) + let parseResults = + checker.ParseFile("test.fs", SourceText.ofString source, parseOptions) |> Async.RunSynchronously - Assert.IsEmpty(parseResults.Errors, sprintf "Parse errors: %A" parseResults.Errors) - Assert.IsTrue(parseResults.ParseTree.IsSome, "no parse tree returned") + Assert.IsEmpty(parseResults.Diagnostics, sprintf "Parse errors: %A" parseResults.Diagnostics) let dependencies = #if NETCOREAPP - Array.toList getNetCoreAppReferences + Array.toList TargetFrameworkUtil.currentReferences #else [] #endif - let compileErrors, statusCode = - checker.Compile([parseResults.ParseTree.Value], "test", outputFilePath, dependencies, executable = isExe, noframework = true) + let compileErrors, statusCode = + checker.Compile([parseResults.ParseTree], "test", outputFilePath, dependencies, executable = isExe, noframework = true) |> Async.RunSynchronously Assert.IsEmpty(compileErrors, sprintf "Compile errors: %A" compileErrors) @@ -528,22 +419,21 @@ let main argv = 0""" static member CompileOfAstToDynamicAssembly source = let assemblyName = sprintf "test-%O" (Guid.NewGuid()) let parseOptions = { FSharpParsingOptions.Default with SourceFiles = [|"test.fs"|] } - let parseResults = - checker.ParseFile("test.fs", SourceText.ofString source, parseOptions) + let parseResults = + checker.ParseFile("test.fs", SourceText.ofString source, parseOptions) |> Async.RunSynchronously - - Assert.IsEmpty(parseResults.Errors, sprintf "Parse errors: %A" parseResults.Errors) - Assert.IsTrue(parseResults.ParseTree.IsSome, "no parse tree returned") + + Assert.IsEmpty(parseResults.Diagnostics, sprintf "Parse errors: %A" parseResults.Diagnostics) let dependencies = #if NETCOREAPP - Array.toList getNetCoreAppReferences + Array.toList TargetFrameworkUtil.currentReferences #else [] #endif - let compileErrors, statusCode, assembly = - checker.CompileToDynamicAssembly([parseResults.ParseTree.Value], assemblyName, dependencies, None, noframework = true) + let compileErrors, statusCode, assembly = + checker.CompileToDynamicAssembly([parseResults.ParseTree], assemblyName, dependencies, None, noframework = true) |> Async.RunSynchronously Assert.IsEmpty(compileErrors, sprintf "Compile errors: %A" compileErrors) @@ -552,124 +442,140 @@ let main argv = 0""" Option.get assembly static member Pass (source: string) = - lock gate <| fun () -> - let parseResults, fileAnswer = checker.ParseAndCheckFileInProject("test.fs", 0, SourceText.ofString source, defaultProjectOptions) |> Async.RunSynchronously + let parseResults, fileAnswer = checker.ParseAndCheckFileInProject("test.fs", 0, SourceText.ofString source, defaultProjectOptions) |> Async.RunSynchronously - Assert.IsEmpty(parseResults.Errors, sprintf "Parse errors: %A" parseResults.Errors) + Assert.IsEmpty(parseResults.Diagnostics, sprintf "Parse errors: %A" parseResults.Diagnostics) - match fileAnswer with - | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted") - | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> + match fileAnswer with + | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted") + | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> - Assert.IsEmpty(typeCheckResults.Errors, sprintf "Type Check errors: %A" typeCheckResults.Errors) + Assert.IsEmpty(typeCheckResults.Diagnostics, sprintf "Type Check errors: %A" typeCheckResults.Diagnostics) static member PassWithOptions options (source: string) = - lock gate <| fun () -> - let options = { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions} + let options = { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions} - let parseResults, fileAnswer = checker.ParseAndCheckFileInProject("test.fs", 0, SourceText.ofString source, options) |> Async.RunSynchronously + let parseResults, fileAnswer = checker.ParseAndCheckFileInProject("test.fs", 0, SourceText.ofString source, options) |> Async.RunSynchronously - Assert.IsEmpty(parseResults.Errors, sprintf "Parse errors: %A" parseResults.Errors) + Assert.IsEmpty(parseResults.Diagnostics, sprintf "Parse errors: %A" parseResults.Diagnostics) - match fileAnswer with - | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted") - | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> + match fileAnswer with + | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted") + | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> - Assert.IsEmpty(typeCheckResults.Errors, sprintf "Type Check errors: %A" typeCheckResults.Errors) + Assert.IsEmpty(typeCheckResults.Diagnostics, sprintf "Type Check errors: %A" typeCheckResults.Diagnostics) static member TypeCheckWithErrorsAndOptionsAgainstBaseLine options (sourceDirectory:string) (sourceFile: string) = - lock gate <| fun () -> - let absoluteSourceFile = System.IO.Path.Combine(sourceDirectory, sourceFile) + let absoluteSourceFile = System.IO.Path.Combine(sourceDirectory, sourceFile) + let parseResults, fileAnswer = + checker.ParseAndCheckFileInProject( + sourceFile, + 0, + SourceText.ofString (File.ReadAllText absoluteSourceFile), + { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions; SourceFiles = [|sourceFile|] }) + |> Async.RunSynchronously + + Assert.IsEmpty(parseResults.Diagnostics, sprintf "Parse errors: %A" parseResults.Diagnostics) + + match fileAnswer with + | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted") + | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> + + let errorsExpectedBaseLine = + let bslFile = Path.ChangeExtension(absoluteSourceFile, "bsl") + if not (FileSystem.FileExistsShim bslFile) then + // new test likely initialized, create empty baseline file + File.WriteAllText(bslFile, "") + File.ReadAllText(Path.ChangeExtension(absoluteSourceFile, "bsl")) + let errorsActual = + typeCheckResults.Diagnostics + |> Array.map (sprintf "%A") + |> String.concat "\n" + File.WriteAllText(Path.ChangeExtension(absoluteSourceFile,"err"), errorsActual) + + Assert.AreEqual(errorsExpectedBaseLine.Replace("\r\n","\n"), errorsActual.Replace("\r\n","\n")) + + static member TypeCheckWithOptionsAndName options name (source: string) = + let errors = + let parseResults, fileAnswer = + checker.ParseAndCheckFileInProject( + name, + 0, + SourceText.ofString source, + { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions; SourceFiles = [|name|] }) + |> Async.RunSynchronously + + if parseResults.Diagnostics.Length > 0 then + parseResults.Diagnostics + else + + match fileAnswer with + | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted"); [| |] + | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> typeCheckResults.Diagnostics + + errors + + static member TypeCheckWithOptions options (source: string) = + let errors = let parseResults, fileAnswer = checker.ParseAndCheckFileInProject( - sourceFile, + "test.fs", 0, - SourceText.ofString (File.ReadAllText absoluteSourceFile), - { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions; SourceFiles = [|sourceFile|] }) + SourceText.ofString source, + { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions}) |> Async.RunSynchronously - Assert.IsEmpty(parseResults.Errors, sprintf "Parse errors: %A" parseResults.Errors) + if parseResults.Diagnostics.Length > 0 then + parseResults.Diagnostics + else - match fileAnswer with - | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted") - | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> + match fileAnswer with + | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted"); [| |] + | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> typeCheckResults.Diagnostics - let errorsExpectedBaseLine = - let bslFile = Path.ChangeExtension(absoluteSourceFile, "bsl") - if not (File.Exists bslFile) then - // new test likely initialized, create empty baseline file - File.WriteAllText(bslFile, "") - File.ReadAllText(Path.ChangeExtension(absoluteSourceFile, "bsl")) - let errorsActual = - typeCheckResults.Errors - |> Array.map (sprintf "%A") - |> String.concat "\n" - File.WriteAllText(Path.ChangeExtension(absoluteSourceFile,"err"), errorsActual) + errors - Assert.AreEqual(errorsExpectedBaseLine.Replace("\r\n","\n"), errorsActual.Replace("\r\n","\n")) + /// Parses and type checks the given source. Fails if type checker is aborted. + static member ParseAndTypeCheck(options, name, source: string) = + let parseResults, fileAnswer = + checker.ParseAndCheckFileInProject( + name, + 0, + SourceText.ofString source, + { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions}) + |> Async.RunSynchronously - static member TypeCheckWithOptionsAndName options name (source: string) = - lock gate <| fun () -> - let errors = - let parseResults, fileAnswer = - checker.ParseAndCheckFileInProject( - name, - 0, - SourceText.ofString source, - { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions; SourceFiles = [|name|] }) - |> Async.RunSynchronously - - if parseResults.Errors.Length > 0 then - parseResults.Errors - else - - match fileAnswer with - | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted"); [| |] - | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> typeCheckResults.Errors + match fileAnswer with + | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted"); failwith "Type Checker Aborted" + | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> parseResults, typeCheckResults - errors + /// Parses and type checks the given source. Fails if the type checker is aborted or the parser returns any diagnostics. + static member TypeCheck(options, name, source: string) = + let parseResults, checkResults = CompilerAssert.ParseAndTypeCheck(options, name, source) - static member TypeCheckWithOptions options (source: string) = - lock gate <| fun () -> - let errors = - let parseResults, fileAnswer = - checker.ParseAndCheckFileInProject( - "test.fs", - 0, - SourceText.ofString source, - { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions}) - |> Async.RunSynchronously - - if parseResults.Errors.Length > 0 then - parseResults.Errors - else - - match fileAnswer with - | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted"); [| |] - | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> typeCheckResults.Errors + Assert.IsEmpty(parseResults.Diagnostics, sprintf "Parse errors: %A" parseResults.Diagnostics) - errors + checkResults static member TypeCheckWithErrorsAndOptionsAndAdjust options libAdjust (source: string) expectedTypeErrors = - lock gate <| fun () -> - let errors = - let parseResults, fileAnswer = - checker.ParseAndCheckFileInProject( - "test.fs", - 0, - SourceText.ofString source, - { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions}) - |> Async.RunSynchronously + let errors = + let parseResults, fileAnswer = + checker.ParseAndCheckFileInProject( + "test.fs", + 0, + SourceText.ofString source, + { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions}) + |> Async.RunSynchronously - if parseResults.Errors.Length > 0 then - parseResults.Errors - else + if parseResults.Diagnostics.Length > 0 then + parseResults.Diagnostics + else - match fileAnswer with - | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted"); [| |] - | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> typeCheckResults.Errors + match fileAnswer with + | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted"); [| |] + | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> typeCheckResults.Diagnostics - assertErrors libAdjust false errors expectedTypeErrors + assertErrors libAdjust false errors expectedTypeErrors static member TypeCheckWithErrorsAndOptions options (source: string) expectedTypeErrors = @@ -678,10 +584,10 @@ let main argv = 0""" static member TypeCheckWithErrors (source: string) expectedTypeErrors = CompilerAssert.TypeCheckWithErrorsAndOptions [||] source expectedTypeErrors - static member TypeCheckSingleErrorWithOptions options (source: string) (expectedSeverity: FSharpErrorSeverity) (expectedErrorNumber: int) (expectedErrorRange: int * int * int * int) (expectedErrorMsg: string) = + static member TypeCheckSingleErrorWithOptions options (source: string) (expectedSeverity: FSharpDiagnosticSeverity) (expectedErrorNumber: int) (expectedErrorRange: int * int * int * int) (expectedErrorMsg: string) = CompilerAssert.TypeCheckWithErrorsAndOptions options source [| expectedSeverity, expectedErrorNumber, expectedErrorRange, expectedErrorMsg |] - static member TypeCheckSingleError (source: string) (expectedSeverity: FSharpErrorSeverity) (expectedErrorNumber: int) (expectedErrorRange: int * int * int * int) (expectedErrorMsg: string) = + static member TypeCheckSingleError (source: string) (expectedSeverity: FSharpDiagnosticSeverity) (expectedErrorNumber: int) (expectedErrorRange: int * int * int * int) (expectedErrorMsg: string) = CompilerAssert.TypeCheckWithErrors source [| expectedSeverity, expectedErrorNumber, expectedErrorRange, expectedErrorMsg |] static member CompileExeWithOptions options (source: string) = @@ -707,7 +613,7 @@ let main argv = 0""" static member CompileLibraryAndVerifyILWithOptions options (source: string) (f: ILVerifier -> unit) = compile false options source (fun (errors, outputFilePath) -> let errors = - errors |> Array.filter (fun x -> x.Severity = FSharpErrorSeverity.Error) + errors |> Array.filter (fun x -> x.Severity = FSharpDiagnosticSeverity.Error) if errors.Length > 0 then Assert.Fail (sprintf "Compile had errors: %A" errors) @@ -748,15 +654,14 @@ let main argv = 0""" errorMessages static member RunScriptWithOptions options (source: string) (expectedErrorMessages: string list) = - lock gate <| fun () -> - let errorMessages = CompilerAssert.RunScriptWithOptionsAndReturnResult options source - if expectedErrorMessages.Length <> errorMessages.Count then - Assert.Fail(sprintf "Expected error messages: %A \n\n Actual error messages: %A" expectedErrorMessages errorMessages) - else - (expectedErrorMessages, errorMessages) - ||> Seq.iter2 (fun expectedErrorMessage errorMessage -> - Assert.AreEqual(expectedErrorMessage, errorMessage) - ) + let errorMessages = CompilerAssert.RunScriptWithOptionsAndReturnResult options source + if expectedErrorMessages.Length <> errorMessages.Count then + Assert.Fail(sprintf "Expected error messages: %A \n\n Actual error messages: %A" expectedErrorMessages errorMessages) + else + (expectedErrorMessages, errorMessages) + ||> Seq.iter2 (fun expectedErrorMessage errorMessage -> + Assert.AreEqual(expectedErrorMessage, errorMessage) + ) static member RunScript source expectedErrorMessages = CompilerAssert.RunScriptWithOptions [||] source expectedErrorMessages @@ -772,16 +677,16 @@ let main argv = 0""" Assert.True(parseResults.ParseHadErrors) let errors = - parseResults.Errors - |> Array.distinctBy (fun e -> e.Severity, e.ErrorNumber, e.StartLineAlternate, e.StartColumn, e.EndLineAlternate, e.EndColumn, e.Message) + parseResults.Diagnostics + |> Array.distinctBy (fun e -> e.Severity, e.ErrorNumber, e.StartLine, e.StartColumn, e.EndLine, e.EndColumn, e.Message) - Assert.AreEqual(Array.length expectedParseErrors, errors.Length, sprintf "Parse errors: %A" parseResults.Errors) + Assert.AreEqual(Array.length expectedParseErrors, errors.Length, sprintf "Parse errors: %A" parseResults.Diagnostics) Array.zip errors expectedParseErrors |> Array.iter (fun (info, expectedError) -> - let (expectedSeverity: FSharpErrorSeverity, expectedErrorNumber: int, expectedErrorRange: int * int * int * int, expectedErrorMsg: string) = expectedError + let (expectedSeverity: FSharpDiagnosticSeverity, expectedErrorNumber: int, expectedErrorRange: int * int * int * int, expectedErrorMsg: string) = expectedError Assert.AreEqual(expectedSeverity, info.Severity) Assert.AreEqual(expectedErrorNumber, info.ErrorNumber, "expectedErrorNumber") - Assert.AreEqual(expectedErrorRange, (info.StartLineAlternate, info.StartColumn + 1, info.EndLineAlternate, info.EndColumn + 1), "expectedErrorRange") + Assert.AreEqual(expectedErrorRange, (info.StartLine, info.StartColumn + 1, info.EndLine, info.EndColumn + 1), "expectedErrorRange") Assert.AreEqual(expectedErrorMsg, info.Message, "expectedErrorMsg") ) diff --git a/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj b/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj index 0bfdf0255f4..07250b365ad 100644 --- a/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj +++ b/tests/FSharp.Test.Utilities/FSharp.Test.Utilities.fsproj @@ -1,8 +1,8 @@  - net472;netcoreapp3.1 - netcoreapp3.1 + net472;net5.0 + net5.0 win-x86;win-x64;linux-x64;osx-x64 $(AssetTargetFallback);portable-net45+win8+wp8+wpa81 true @@ -22,6 +22,7 @@ + @@ -31,8 +32,7 @@ Make sure they are getting built with the Utilities. --> - - + @@ -52,29 +52,29 @@ - + - + Always - + Always - + Always - + Always - + Always - + Always - + Always diff --git a/tests/FSharp.Test.Utilities/ScriptHelpers.fs b/tests/FSharp.Test.Utilities/ScriptHelpers.fs new file mode 100644 index 00000000000..afb592b8c72 --- /dev/null +++ b/tests/FSharp.Test.Utilities/ScriptHelpers.fs @@ -0,0 +1,158 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Test.ScriptHelpers + +open System +open System.Collections.Generic +open System.IO +open System.Text +open System.Threading +open FSharp.Compiler +open FSharp.Compiler.Interactive.Shell +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.EditorServices + +type CapturedTextReader() = + inherit TextReader() + let queue = Queue() + member _.ProvideInput(text: string) = + for c in text.ToCharArray() do + queue.Enqueue(c) + override _.Peek() = + if queue.Count > 0 then queue.Peek() |> int else -1 + override _.Read() = + if queue.Count > 0 then queue.Dequeue() |> int else -1 + +type RedirectConsoleInput() = + let oldStdIn = Console.In + let newStdIn = new CapturedTextReader() + do Console.SetIn(newStdIn) + member _.ProvideInput(text: string) = + newStdIn.ProvideInput(text) + interface IDisposable with + member _.Dispose() = + Console.SetIn(oldStdIn) + newStdIn.Dispose() + +type EventedTextWriter() = + inherit TextWriter() + let sb = StringBuilder() + let lineWritten = Event() + member _.LineWritten = lineWritten.Publish + override _.Encoding = Encoding.UTF8 + override _.Write(c: char) = + if c = '\n' then + let line = + let v = sb.ToString() + if v.EndsWith("\r") then v.Substring(0, v.Length - 1) + else v + sb.Clear() |> ignore + lineWritten.Trigger(line) + else sb.Append(c) |> ignore + +type RedirectConsoleOutput() = + let outputProduced = Event() + let errorProduced = Event() + let oldStdOut = Console.Out + let oldStdErr = Console.Error + let newStdOut = new EventedTextWriter() + let newStdErr = new EventedTextWriter() + do newStdOut.LineWritten.Add outputProduced.Trigger + do newStdErr.LineWritten.Add errorProduced.Trigger + do Console.SetOut(newStdOut) + do Console.SetError(newStdErr) + member _.OutputProduced = outputProduced.Publish + member _.ErrorProduced = errorProduced.Publish + interface IDisposable with + member _.Dispose() = + Console.SetOut(oldStdOut) + Console.SetError(oldStdErr) + newStdOut.Dispose() + newStdErr.Dispose() + + +[] +type LangVersion = + | V47 + | V50 + | Preview + +type FSharpScript(?additionalArgs: string[], ?quiet: bool, ?langVersion: LangVersion) = + + let additionalArgs = defaultArg additionalArgs [||] + let quiet = defaultArg quiet true + let langVersion = defaultArg langVersion LangVersion.Preview + let config = FsiEvaluationSession.GetDefaultConfiguration() + + let computedProfile = + // If we are being executed on the desktop framework (we can tell because the assembly containing int is mscorlib) then profile must be mscorlib otherwise use netcore + if typeof.Assembly.GetName().Name = "mscorlib" then "mscorlib" + else "netcore" + + let baseArgs = [| + typeof.Assembly.Location; + "--noninteractive"; + "--targetprofile:" + computedProfile + if quiet then "--quiet" + match langVersion with + | LangVersion.V47 -> "--langversion:4.7" + | LangVersion.V50 -> "--langversion:5.0" + | LangVersion.Preview -> "--langversion:preview" + |] + + let argv = Array.append baseArgs additionalArgs + + let fsi = FsiEvaluationSession.Create (config, argv, stdin, stdout, stderr) + + member _.ValueBound = fsi.ValueBound + + member _.Fsi = fsi + + member _.Eval(code: string, ?cancellationToken: CancellationToken) = + let cancellationToken = defaultArg cancellationToken CancellationToken.None + let ch, errors = fsi.EvalInteractionNonThrowing(code, cancellationToken) + match ch with + | Choice1Of2 v -> Ok(v), errors + | Choice2Of2 ex -> Error(ex), errors + + /// Get the available completion items from the code at the specified location. + /// + /// The input text on which completions will be calculated + /// The 1-based line index + /// The 0-based column index + member _.GetCompletionItems(text: string, line: int, column: int) = + async { + let parseResults, checkResults, _projectResults = fsi.ParseAndCheckInteraction(text) + let lineText = text.Split('\n').[line - 1] + let partialName = QuickParse.GetPartialLongNameEx(lineText, column - 1) + let declarationListInfos = checkResults.GetDeclarationListInfo(Some parseResults, line, lineText, partialName) + return declarationListInfos.Items + } + + interface IDisposable with + member _.Dispose() = + (fsi :> IDisposable).Dispose() + +[] +module TestHelpers = + + let getValue ((value: Result), (errors: FSharpDiagnostic[])) = + if errors.Length > 0 then + failwith <| sprintf "Evaluation returned %d errors:\r\n\t%s" errors.Length (String.Join("\r\n\t", errors)) + match value with + | Ok(value) -> value + | Error ex -> raise ex + + let ignoreValue = getValue >> ignore + + let getTempDir () = + let sysTempDir = Path.GetTempPath() + let customTempDirName = Guid.NewGuid().ToString("D") + let fullDirName = Path.Combine(sysTempDir, customTempDirName) + let dirInfo = Directory.CreateDirectory(fullDirName) + { new Object() with + member _.ToString() = dirInfo.FullName + interface IDisposable with + member _.Dispose() = + dirInfo.Delete(true) + } diff --git a/tests/FSharp.Test.Utilities/TestFramework.fs b/tests/FSharp.Test.Utilities/TestFramework.fs index 0191804c72c..efe60a1a41f 100644 --- a/tests/FSharp.Test.Utilities/TestFramework.fs +++ b/tests/FSharp.Test.Utilities/TestFramework.fs @@ -2,17 +2,19 @@ module TestFramework -open Microsoft.Win32 open System open System.IO -open System.Text.RegularExpressions +open System.Reflection open System.Diagnostics open Scripting open NUnit.Framework +open FSharp.Compiler.IO [] module Commands = + let gate = obj() + // Execute the process pathToExe passing the arguments: arguments with the working directory: workingDir timeout after timeout milliseconds -1 = wait forever // returns exit code, stdio and stderr as string arrays let executeProcess pathToExe arguments workingDir timeout = @@ -53,10 +55,21 @@ module Commands = // Timed out resolving throw a diagnostic. raise (new TimeoutException(sprintf "Timeout executing command '%s' '%s'" (psi.FileName) (psi.Arguments))) else - () + p.WaitForExit() #if DEBUG - File.WriteAllLines(Path.Combine(workingDir, "StandardOutput.txt"), outputList) - File.WriteAllLines(Path.Combine(workingDir, "StandardError.txt"), errorsList) + let workingDir' = + if workingDir = "" + then + // Assign working dir to prevent default to C:\Windows\System32 + let executionLocation = Assembly.GetExecutingAssembly().Location + Path.GetDirectoryName executionLocation + else + workingDir + + lock gate (fun () -> + File.WriteAllLines(Path.Combine(workingDir', "StandardOutput.txt"), outputList) + File.WriteAllLines(Path.Combine(workingDir', "StandardError.txt"), errorsList) + ) #endif p.ExitCode, outputList.ToArray(), errorsList.ToArray() | None -> -1, Array.empty, Array.empty @@ -68,7 +81,7 @@ module Commands = rooted |> Path.GetFullPath let fileExists workDir path = - if path |> getfullpath workDir |> File.Exists then Some path else None + if path |> getfullpath workDir |> FileSystem.FileExistsShim then Some path else None let directoryExists workDir path = if path |> getfullpath workDir |> Directory.Exists then Some path else None @@ -84,7 +97,7 @@ module Commands = let rm dir path = let p = path |> getfullpath dir - if File.Exists(p) then + if FileSystem.FileExistsShim(p) then (log "rm %s" p) |> ignore File.Delete(p) else @@ -194,6 +207,8 @@ type TestConfig = PEVERIFY : string Directory: string DotNetExe: string + DotNetMultiLevelLookup: string + DotNetRoot: string DefaultPlatform: string} #if NETCOREAPP @@ -256,9 +271,9 @@ let config configurationName envVars = let fsiArchitecture = "net472" let peverifyArchitecture = "net472" #else - let fscArchitecture = "netcoreapp3.1" - let fsiArchitecture = "netcoreapp3.1" - let peverifyArchitecture = "netcoreapp3.1" + let fscArchitecture = "net5.0" + let fsiArchitecture = "net5.0" + let peverifyArchitecture = "net5.0" #endif let repoRoot = SCRIPT_ROOT ++ ".." ++ ".." let artifactsPath = repoRoot ++ "artifacts" @@ -290,16 +305,22 @@ let config configurationName envVars = // first look for {repoRoot}\.dotnet\dotnet.exe, otherwise fallback to %PATH% let DOTNET_EXE = if operatingSystem = "win" then "dotnet.exe" else "dotnet" let repoLocalDotnetPath = repoRoot ++ ".dotnet" ++ DOTNET_EXE - if File.Exists(repoLocalDotnetPath) then repoLocalDotnetPath + if FileSystem.FileExistsShim(repoLocalDotnetPath) then repoLocalDotnetPath else DOTNET_EXE +#if !NETCOREAPP let FSI_PATH = ("fsi" ++ configurationName ++ fsiArchitecture ++ "fsi.exe") +#else + let FSI_PATH = ("fsi" ++ configurationName ++ fsiArchitecture ++ "fsi.dll") +#endif let FSI_FOR_SCRIPTS = requireArtifact FSI_PATH let FSI = requireArtifact FSI_PATH #if !NETCOREAPP let FSIANYCPU = requireArtifact ("fsiAnyCpu" ++ configurationName ++ "net472" ++ "fsiAnyCpu.exe") -#endif let FSC = requireArtifact ("fsc" ++ configurationName ++ fscArchitecture ++ "fsc.exe") +#else + let FSC = requireArtifact ("fsc" ++ configurationName ++ fscArchitecture ++ "fsc.dll") +#endif let FSCOREDLLPATH = requireArtifact ("FSharp.Core" ++ configurationName ++ fsharpCoreArchitecture ++ "FSharp.Core.dll") let defaultPlatform = @@ -331,29 +352,34 @@ let config configurationName envVars = vbc_flags = vbc_flags Directory="" DotNetExe = dotNetExe + DotNetMultiLevelLookup = System.Environment.GetEnvironmentVariable "DOTNET_MULTILEVEL_LOOKUP" + DotNetRoot = System.Environment.GetEnvironmentVariable "DOTNET_ROOT" DefaultPlatform = defaultPlatform } let logConfig (cfg: TestConfig) = log "---------------------------------------------------------------" log "Executables" log "" - log "CSC =%s" cfg.CSC - log "BUILD_CONFIG =%s" cfg.BUILD_CONFIG - log "csc_flags =%s" cfg.csc_flags - log "FSC =%s" cfg.FSC - log "fsc_flags =%s" cfg.fsc_flags - log "FSCOREDLLPATH =%s" cfg.FSCOREDLLPATH - log "FSI =%s" cfg.FSI -#if !NETCOREAPP - log "FSIANYCPU =%s" cfg.FSIANYCPU + log "CSC = %s" cfg.CSC + log "BUILD_CONFIG = %s" cfg.BUILD_CONFIG + log "csc_flags = %s" cfg.csc_flags + log "FSC = %s" cfg.FSC + log "fsc_flags = %s" cfg.fsc_flags + log "FSCOREDLLPATH = %s" cfg.FSCOREDLLPATH + log "FSI = %s" cfg.FSI +#if NETCOREAPP + log "DotNetExe =%s" cfg.DotNetExe + log "DOTNET_MULTILEVEL_LOOKUP = %s" cfg.DotNetMultiLevelLookup + log "DOTNET_ROOT = %s" cfg.DotNetRoot +#else + log "FSIANYCPU = %s" cfg.FSIANYCPU #endif - log "FSI_FOR_SCRIPTS =%s" cfg.FSI_FOR_SCRIPTS - log "fsi_flags =%s" cfg.fsi_flags - log "ILDASM =%s" cfg.ILDASM - log "PEVERIFY =%s" cfg.PEVERIFY + log "FSI_FOR_SCRIPTS = %s" cfg.FSI_FOR_SCRIPTS + log "fsi_flags = %s" cfg.fsi_flags + log "ILDASM = %s" cfg.ILDASM + log "PEVERIFY = %s" cfg.PEVERIFY log "---------------------------------------------------------------" - let checkResult result = match result with | CmdResult.ErrorLevel (msg1, err) -> Assert.Fail (sprintf "%s. ERRORLEVEL %d" msg1 err) @@ -406,27 +432,22 @@ type public InitializeSuiteAttribute () = override x.Targets = ActionTargets.Test ||| ActionTargets.Suite - -[] -[] -() - -let fsharpSuiteDirectory = __SOURCE_DIRECTORY__ - -let testConfig testDir = +let testConfig (testDir: string) = let cfg = suiteHelpers.Value - let dir = Path.GetFullPath(fsharpSuiteDirectory ++ testDir) - log "------------------ %s ---------------" dir - log "cd %s" dir - { cfg with Directory = dir} + if not (Path.IsPathRooted testDir) then + failwith $"path is not rooted: {testDir}" + let testDir = Path.GetFullPath testDir // mostly used to normalize / and \ + log "------------------ %s ---------------" testDir + log "cd %s" testDir + { cfg with Directory = testDir } [] type FileGuard(path: string) = - let remove path = if File.Exists(path) then Commands.rm (Path.GetTempPath()) path + let remove path = if FileSystem.FileExistsShim(path) then Commands.rm (Path.GetTempPath()) path do if not (Path.IsPathRooted(path)) then failwithf "path '%s' must be absolute" path do remove path member x.Path = path - member x.Exists = x.Path |> File.Exists + member x.Exists = x.Path |> FileSystem.FileExistsShim member x.CheckExists() = if not x.Exists then failwith (sprintf "exit code 0 but %s file doesn't exists" (x.Path |> Path.GetFileName)) @@ -584,10 +605,10 @@ let diff normalize path1 path2 = let append s = result.AppendLine s |> ignore let cwd = Directory.GetCurrentDirectory() - if not <| File.Exists(path1) then + if not <| FileSystem.FileExistsShim(path1) then // creating empty baseline file as this is likely someone initializing a new test File.WriteAllText(path1, String.Empty) - if not <| File.Exists(path2) then failwithf "Invalid path %s" path2 + if not <| FileSystem.FileExistsShim(path2) then failwithf "Invalid path %s" path2 let lines1 = File.ReadAllLines(path1) let lines2 = File.ReadAllLines(path2) diff --git a/tests/FSharp.Test.Utilities/Utilities.fs b/tests/FSharp.Test.Utilities/Utilities.fs index fe192cce0e8..fa02e829b7b 100644 --- a/tests/FSharp.Test.Utilities/Utilities.fs +++ b/tests/FSharp.Test.Utilities/Utilities.fs @@ -10,6 +10,8 @@ open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.CSharp open System.Diagnostics open FSharp.Test.Utilities +open TestFramework +open NUnit.Framework // This file mimics how Roslyn handles their compilation references for compilation testing @@ -19,6 +21,7 @@ module Utilities = type TargetFramework = | NetStandard20 | NetCoreApp31 + | Current let private getResourceStream name = let assembly = typeof.GetTypeInfo().Assembly @@ -75,7 +78,108 @@ module Utilities = let systemConsoleRef = lazy AssemblyMetadata.CreateFromImage(NetCoreApp31Refs.System_Console ()).GetReference(display = "System.Console.dll (netcoreapp 3.1 ref)") [] - module internal TargetFrameworkUtil = + module TargetFrameworkUtil = + + let private config = TestFramework.initializeSuite () + + // Do a one time dotnet sdk build to compute the proper set of reference assemblies to pass to the compiler + let private projectFile = """ + + + + Exe + $TARGETFRAMEWORK + true + true + + + + + + + + + + + + + + + + + + + + + + + +""" + + let private directoryBuildProps = """ + + +""" + + let private directoryBuildTargets = """ + + +""" + + let private programFs = """ +open System + +[] +let main argv = 0""" + + let private getNetCoreAppReferences = + let mutable output = "" + let mutable errors = "" + let mutable cleanUp = true + let pathToArtifacts = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "../../../..")) + if Path.GetFileName(pathToArtifacts) <> "artifacts" then failwith "CompilerAssert did not find artifacts directory --- has the location changed????" + let pathToTemp = Path.Combine(pathToArtifacts, "Temp") + let projectDirectory = Path.Combine(pathToTemp, "CompilerAssert", Path.GetRandomFileName()) + let pathToFSharpCore = typeof.Assembly.Location + try + try + Directory.CreateDirectory(projectDirectory) |> ignore + let projectFileName = Path.Combine(projectDirectory, "ProjectFile.fsproj") + let programFsFileName = Path.Combine(projectDirectory, "Program.fs") + let directoryBuildPropsFileName = Path.Combine(projectDirectory, "Directory.Build.props") + let directoryBuildTargetsFileName = Path.Combine(projectDirectory, "Directory.Build.targets") + let frameworkReferencesFileName = Path.Combine(projectDirectory, "FrameworkReferences.txt") +#if NETCOREAPP + File.WriteAllText(projectFileName, projectFile.Replace("$TARGETFRAMEWORK", "net5.0").Replace("$FSHARPCORELOCATION", pathToFSharpCore)) +#else + File.WriteAllText(projectFileName, projectFile.Replace("$TARGETFRAMEWORK", "net472").Replace("$FSHARPCORELOCATION", pathToFSharpCore)) +#endif + File.WriteAllText(programFsFileName, programFs) + File.WriteAllText(directoryBuildPropsFileName, directoryBuildProps) + File.WriteAllText(directoryBuildTargetsFileName, directoryBuildTargets) + + let timeout = 30000 + let exitCode, output, errors = Commands.executeProcess (Some config.DotNetExe) "build" projectDirectory timeout + + if exitCode <> 0 || errors.Length > 0 then + printfn "Output:\n=======\n" + output |> Seq.iter(fun line -> printfn "STDOUT:%s\n" line) + printfn "Errors:\n=======\n" + errors |> Seq.iter(fun line -> printfn "STDERR:%s\n" line) + Assert.True(false, "Errors produced generating References") + + File.ReadLines(frameworkReferencesFileName) |> Seq.toArray + with | e -> + cleanUp <- false + printfn "Project directory: %s" projectDirectory + printfn "STDOUT: %s" output + File.WriteAllText(Path.Combine(projectDirectory, "project.stdout"), output) + printfn "STDERR: %s" errors + File.WriteAllText(Path.Combine(projectDirectory, "project.stderror"), errors) + raise (new Exception (sprintf "An error occurred getting netcoreapp references: %A" e)) + finally + if cleanUp then + try Directory.Delete(projectDirectory, recursive=true) with | _ -> () open TestReferences @@ -84,10 +188,21 @@ module Utilities = let private netCoreApp31References = lazy ImmutableArray.Create(NetCoreApp31.netStandard.Value, NetCoreApp31.mscorlibRef.Value, NetCoreApp31.systemRuntimeRef.Value, NetCoreApp31.systemCoreRef.Value, NetCoreApp31.systemDynamicRuntimeRef.Value, NetCoreApp31.systemConsoleRef.Value) - let internal getReferences tf = + let currentReferences = + getNetCoreAppReferences + + let currentReferencesAsPEs = + getNetCoreAppReferences + |> Seq.map (fun x -> + PortableExecutableReference.CreateFromFile(x) + ) + |> ImmutableArray.CreateRange + + let getReferences tf = match tf with | TargetFramework.NetStandard20 -> netStandard20References.Value | TargetFramework.NetCoreApp31 -> netCoreApp31References.Value + | TargetFramework.Current -> currentReferencesAsPEs type RoslynLanguageVersion = LanguageVersion @@ -128,6 +243,7 @@ module Utilities = type CSharpLanguageVersion = | CSharp8 = 0 + | CSharp9 = 1 [] type CompilationUtil private () = @@ -136,6 +252,7 @@ module Utilities = let lv = match lv with | CSharpLanguageVersion.CSharp8 -> LanguageVersion.CSharp8 + | CSharpLanguageVersion.CSharp9 -> LanguageVersion.CSharp9 | _ -> LanguageVersion.Default let tf = defaultArg tf TargetFramework.NetStandard20 diff --git a/tests/FSharp.Test.Utilities/Xunit/Attributes/DirectoryAttribute.fs b/tests/FSharp.Test.Utilities/Xunit/Attributes/DirectoryAttribute.fs index 4039a3b46ed..824c9f22a19 100644 --- a/tests/FSharp.Test.Utilities/Xunit/Attributes/DirectoryAttribute.fs +++ b/tests/FSharp.Test.Utilities/Xunit/Attributes/DirectoryAttribute.fs @@ -1,18 +1,14 @@ namespace FSharp.Test.Utilities.Xunit.Attributes open System -open System.Collections.Generic -open System.Diagnostics.CodeAnalysis open System.IO open System.Reflection -open Xunit -open Xunit.Extensions open Xunit.Sdk +open FSharp.Compiler.IO + open FSharp.Test.Utilities -open FSharp.Test.Utilities.Assert open FSharp.Test.Utilities.Compiler -open FSharp.Test.Utilities.Utilities /// Attribute to use with Xunit's TheoryAttribute. /// Takes a directory, relative to current test suite's root. @@ -28,9 +24,9 @@ type DirectoryAttribute(dir: string) = let directory = dir let mutable includes = Array.empty - + let readFileOrDefault (path: string) : string option = - match File.Exists(path) with + match FileSystem.FileExistsShim(path) with | true -> Some <| File.ReadAllText path | _ -> None @@ -54,7 +50,7 @@ type DirectoryAttribute(dir: string) = References = [] } |> FS member x.Includes with get() = includes and set v = includes <- v - + override _.GetData(_: MethodInfo) = let absolutePath = Path.GetFullPath(directory) @@ -65,19 +61,18 @@ type DirectoryAttribute(dir: string) = let filteredFiles = match (includes |> Array.map (fun f -> absolutePath ++ f)) with - | [||] -> allFiles + | [||] -> allFiles | incl -> incl - + let fsFiles = filteredFiles |> Array.map Path.GetFileName if fsFiles |> Array.length < 1 then failwith (sprintf "No required files found in \"%s\".\nAll files: %A.\nIncludes:%A." absolutePath allFiles includes) for f in filteredFiles do - if not <| File.Exists(f) then + if not <| FileSystem.FileExistsShim(f) then failwithf "Requested file \"%s\" not found.\nAll files: %A.\nIncludes:%A." f allFiles includes - + fsFiles |> Array.map (fun fs -> createCompilationUnit absolutePath fs) |> Seq.map (fun c -> [| c |]) - diff --git a/tests/benchmarks/Benchmarks.sln b/tests/benchmarks/Benchmarks.sln deleted file mode 100644 index b2a35f33b01..00000000000 --- a/tests/benchmarks/Benchmarks.sln +++ /dev/null @@ -1,44 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.28407.52 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "CompilerServiceBenchmarks", "CompilerServiceBenchmarks\CompilerServiceBenchmarks.fsproj", "{9A3C565C-B514-4AE0-8B01-CA80E8453EB0}" -EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Service", "..\..\src\fsharp\FSharp.Compiler.Service\FSharp.Compiler.Service.fsproj", "{0BD3108C-8CDC-48E3-8CD3-B50E4F2E72A4}" -EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Core", "..\..\src\fsharp\FSharp.Core\FSharp.Core.fsproj", "{A2E3D114-10EE-4438-9C1D-2E15046607F3}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Proto|Any CPU = Proto|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {9A3C565C-B514-4AE0-8B01-CA80E8453EB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9A3C565C-B514-4AE0-8B01-CA80E8453EB0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9A3C565C-B514-4AE0-8B01-CA80E8453EB0}.Proto|Any CPU.ActiveCfg = Release|Any CPU - {9A3C565C-B514-4AE0-8B01-CA80E8453EB0}.Proto|Any CPU.Build.0 = Release|Any CPU - {9A3C565C-B514-4AE0-8B01-CA80E8453EB0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9A3C565C-B514-4AE0-8B01-CA80E8453EB0}.Release|Any CPU.Build.0 = Release|Any CPU - {0BD3108C-8CDC-48E3-8CD3-B50E4F2E72A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0BD3108C-8CDC-48E3-8CD3-B50E4F2E72A4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0BD3108C-8CDC-48E3-8CD3-B50E4F2E72A4}.Proto|Any CPU.ActiveCfg = Debug|Any CPU - {0BD3108C-8CDC-48E3-8CD3-B50E4F2E72A4}.Proto|Any CPU.Build.0 = Debug|Any CPU - {0BD3108C-8CDC-48E3-8CD3-B50E4F2E72A4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0BD3108C-8CDC-48E3-8CD3-B50E4F2E72A4}.Release|Any CPU.Build.0 = Release|Any CPU - {A2E3D114-10EE-4438-9C1D-2E15046607F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A2E3D114-10EE-4438-9C1D-2E15046607F3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A2E3D114-10EE-4438-9C1D-2E15046607F3}.Proto|Any CPU.ActiveCfg = Debug|Any CPU - {A2E3D114-10EE-4438-9C1D-2E15046607F3}.Proto|Any CPU.Build.0 = Debug|Any CPU - {A2E3D114-10EE-4438-9C1D-2E15046607F3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A2E3D114-10EE-4438-9C1D-2E15046607F3}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {049A4D02-709F-418C-AD59-7FB0DBE956B1} - EndGlobalSection -EndGlobal diff --git a/tests/benchmarks/CompilerServiceBenchmarks/CompilerServiceBenchmarks.fsproj b/tests/benchmarks/CompilerServiceBenchmarks/CompilerServiceBenchmarks.fsproj index 5ee4d5f5ad2..27336d1c50e 100644 --- a/tests/benchmarks/CompilerServiceBenchmarks/CompilerServiceBenchmarks.fsproj +++ b/tests/benchmarks/CompilerServiceBenchmarks/CompilerServiceBenchmarks.fsproj @@ -1,19 +1,9 @@  - - $(MSBuildProjectDirectory)\..\..\src - - Exe - net472 + net5.0 true - true - $(SystemValueTupleVersion) - - - - AnyCPU @@ -24,8 +14,8 @@ - - + + diff --git a/tests/benchmarks/CompilerServiceBenchmarks/Program.fs b/tests/benchmarks/CompilerServiceBenchmarks/Program.fs index 74ccbe06f5e..28c42defebf 100644 --- a/tests/benchmarks/CompilerServiceBenchmarks/Program.fs +++ b/tests/benchmarks/CompilerServiceBenchmarks/Program.fs @@ -2,9 +2,12 @@ open System.IO open System.Text open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.Syntax +open FSharp.Compiler.Symbols +open FSharp.Compiler.EditorServices open FSharp.Compiler.Text -open FSharp.Compiler.Range open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILBinaryReader @@ -95,14 +98,13 @@ module Helpers = Array.append [|"--optimize+"; "--target:library" |] (referencedProjects |> Array.ofList |> Array.map (fun x -> "-r:" + x.ProjectFileName)) ReferencedProjects = referencedProjects - |> List.map (fun x -> (x.ProjectFileName, x)) + |> List.map (fun x -> FSharpReferencedProject.CreateFSharp (x.ProjectFileName, x)) |> Array.ofList IsIncompleteTypeCheckEnvironment = false UseScriptResolutionRules = false LoadTime = DateTime() UnresolvedReferences = None OriginalLoadReferences = [] - ExtraProjectInfo = None Stamp = Some 0L (* set the stamp to 0L on each run so we don't evaluate the whole project again *) } @@ -137,7 +139,7 @@ type CompilerService() = { SourceFiles = [|"CheckExpressions.fs"|] ConditionalCompilationDefines = [] - ErrorSeverityOptions = FSharpErrorSeverityOptions.Default + ErrorSeverityOptions = FSharpDiagnosticOptions.Default IsInteractive = false LightSyntax = None CompilingFsLib = false @@ -190,7 +192,7 @@ type CompilerService() = | _, None -> failwith "no source" | Some(checker), Some(source) -> let results = checker.ParseFile("CheckExpressions.fs", source.ToFSharpSourceText(), parsingOptions) |> Async.RunSynchronously - if results.ParseHadErrors then failwithf "parse had errors: %A" results.Errors + if results.ParseHadErrors then failwithf "parse had errors: %A" results.Diagnostics [] member __.ParsingTypeCheckerFsSetup() = @@ -272,15 +274,15 @@ type CompilerService() = checker.ParseAndCheckFileInProject(file, 0, SourceText.ofString (File.ReadAllText(file)), options) |> Async.RunSynchronously - if parseResult.Errors.Length > 0 then - failwithf "%A" parseResult.Errors + if parseResult.Diagnostics.Length > 0 then + failwithf "%A" parseResult.Diagnostics match checkResult with | FSharpCheckFileAnswer.Aborted -> failwith "aborted" | FSharpCheckFileAnswer.Succeeded checkFileResult -> - if checkFileResult.Errors.Length > 0 then - failwithf "%A" checkFileResult.Errors + if checkFileResult.Diagnostics.Length > 0 then + failwithf "%A" checkFileResult.Diagnostics [] member this.TypeCheckFileWith100ReferencedProjectsSetup() = @@ -290,11 +292,13 @@ type CompilerService() = ) this.TypeCheckFileWith100ReferencedProjectsOptions.ReferencedProjects - |> Seq.iter (fun (_, referencedProjectOptions) -> - referencedProjectOptions.SourceFiles - |> Seq.iter (fun file -> - File.WriteAllText(file, generateSourceCode (Path.GetFileNameWithoutExtension(file))) - ) + |> Seq.iter (function + | FSharpReferencedProject.FSharpReference(_, referencedProjectOptions) -> + referencedProjectOptions.SourceFiles + |> Seq.iter (fun file -> + File.WriteAllText(file, generateSourceCode (Path.GetFileNameWithoutExtension(file))) + ) + | _ -> () ) this.TypeCheckFileWith100ReferencedProjectsRun() @@ -315,11 +319,13 @@ type CompilerService() = ) this.TypeCheckFileWith100ReferencedProjectsOptions.ReferencedProjects - |> Seq.iter (fun (_, referencedProjectOptions) -> - referencedProjectOptions.SourceFiles - |> Seq.iter (fun file -> - try File.Delete(file) with | _ -> () - ) + |> Seq.iter (function + | FSharpReferencedProject.FSharpReference(_, referencedProjectOptions) -> + referencedProjectOptions.SourceFiles + |> Seq.iter (fun file -> + try File.Delete(file) with | _ -> () + ) + | _ -> () ) match checkerOpt with diff --git a/tests/benchmarks/MicroPerf/Benchmarks.fs b/tests/benchmarks/MicroPerf/Benchmarks.fs new file mode 100644 index 00000000000..cb264e065e3 --- /dev/null +++ b/tests/benchmarks/MicroPerf/Benchmarks.fs @@ -0,0 +1,49 @@ +(* +msbuild tests\fsharp\perf\tasks\FS\TaskPerf.fsproj /p:Configuration=Release +dotnet artifacts\bin\TaskPerf\Release\netcoreapp2.1\TaskPerf.dll +*) + +namespace TaskPerf + +//open FSharp.Control.Tasks +open BenchmarkDotNet.Attributes +open BenchmarkDotNet.Running +open BenchmarkDotNet.Configs +open BenchmarkDotNet.Diagnosers +open System.Runtime.CompilerServices + +module Code = + [] + let condition_2 x = + if (x = 1 || x = 2) then 1 + elif(x = 3 || x = 4) then 2 + + else 8 + +[] +[] +type Benchmarks() = + + [] + [] + [] + [] + [] + member _.CSharp(x: int) = + MicroPerfCSharp.Cond(x) + + [] + [] + [] + [] + [] + member _.FSharp(x: int) = + Code.condition_2(x) + +module Main = + + [] + let main argv = + printfn "Running benchmarks..." + let results = BenchmarkRunner.Run() + 0 diff --git a/tests/benchmarks/MicroPerf/CS/MicroPerfCSharp.cs b/tests/benchmarks/MicroPerf/CS/MicroPerfCSharp.cs new file mode 100644 index 00000000000..409ed07ac55 --- /dev/null +++ b/tests/benchmarks/MicroPerf/CS/MicroPerfCSharp.cs @@ -0,0 +1,17 @@ + +using System.Runtime.CompilerServices; + +public class MicroPerfCSharp +{ + // + // FSharp will not inline the code so we shouldn't eiter. + // + [MethodImpl(MethodImplOptions.NoInlining)] + public static int Cond(int x) + { + if (x == 1 || x == 2) return 1; + else if (x == 3 || x == 4) return 2; + + else return 8; + } +} \ No newline at end of file diff --git a/tests/benchmarks/MicroPerf/CS/MicroPerfCSharp.csproj b/tests/benchmarks/MicroPerf/CS/MicroPerfCSharp.csproj new file mode 100644 index 00000000000..32ae4d1b867 --- /dev/null +++ b/tests/benchmarks/MicroPerf/CS/MicroPerfCSharp.csproj @@ -0,0 +1,13 @@ + + + + net5.0 + Library + 8.0 + + + + + + + \ No newline at end of file diff --git a/tests/benchmarks/MicroPerf/MicroPerf.fsproj b/tests/benchmarks/MicroPerf/MicroPerf.fsproj new file mode 100644 index 00000000000..6e9e411e438 --- /dev/null +++ b/tests/benchmarks/MicroPerf/MicroPerf.fsproj @@ -0,0 +1,31 @@ + + + + net5.0 + Exe + true + + $(OtherFlags) --nowarn:1204 + + $(OtherFlags) --nowarn:57 + $(OtherFlags) --langversion:preview + $(OtherFlags) --define:PREVIEW + + + + + + + + + + + + + + + diff --git a/tests/fsharp/Compiler/CodeGen/EmittedIL/BooleanLogic.fs b/tests/fsharp/Compiler/CodeGen/EmittedIL/BooleanLogic.fs new file mode 100644 index 00000000000..7268da013ee --- /dev/null +++ b/tests/fsharp/Compiler/CodeGen/EmittedIL/BooleanLogic.fs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.UnitTests.CodeGen.EmittedIL + +open FSharp.Test.Utilities +open NUnit.Framework + +[] +module ``BooleanLogic`` = + + [] + let ``BooleanOrs``() = + CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize+"|] + """ +module BooleanOrs +let compute (x: int) = + if (x = 1 || x = 2) then 2 + elif (x = 3 || x = 4) then 3 + else 4 + """ + (fun verifier -> verifier.VerifyIL [ + """ +.method public static int32 compute(int32 x) cil managed +{ + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldc.i4.1 + IL_0002: beq.s IL_0008 + + IL_0004: ldarg.0 + IL_0005: ldc.i4.2 + IL_0006: bne.un.s IL_000a + + IL_0008: ldc.i4.2 + IL_0009: ret + + IL_000a: ldarg.0 + IL_000b: ldc.i4.3 + IL_000c: beq.s IL_0012 + + IL_000e: ldarg.0 + IL_000f: ldc.i4.4 + IL_0010: bne.un.s IL_0014 + + IL_0012: ldc.i4.3 + IL_0013: ret + + IL_0014: ldc.i4.4 + IL_0015: ret +} + + """ + ]) + diff --git a/tests/fsharp/Compiler/CodeGen/EmittedIL/ComputedListExpressions.fs b/tests/fsharp/Compiler/CodeGen/EmittedIL/ComputedListExpressions.fs new file mode 100644 index 00000000000..4938f7b2a7e --- /dev/null +++ b/tests/fsharp/Compiler/CodeGen/EmittedIL/ComputedListExpressions.fs @@ -0,0 +1,407 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.UnitTests.CodeGen.EmittedIL + +open FSharp.Test.Utilities +open NUnit.Framework + +[] +module ``ComputedListExpressions`` = + + [] + let ``ComputedListExpression01``() = + CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"|] + """ +module ComputedListExpression01 +let ListExpressionSteppingTest1 () = [ yield 1 ] + """ + (fun verifier -> verifier.VerifyIL [ + """ +.method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 + ListExpressionSteppingTest1() cil managed +{ + + .maxstack 4 + .locals init (valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0) + IL_0000: ldloca.s V_0 + IL_0002: ldc.i4.1 + IL_0003: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_0008: nop + IL_0009: ldloca.s V_0 + IL_000b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() + IL_0010: ret +} + """ + ]) + + [] + let ``ComputedListExpression02``() = + CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"|] + """ +module ComputedListExpression02 +let ListExpressionSteppingTest2 () = + [ printfn "hello" + yield 1 + printfn "goodbye" + yield 2] + """ + (fun verifier -> verifier.VerifyIL [ + """ + .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 + ListExpressionSteppingTest2() cil managed + { + + .maxstack 4 + .locals init (valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0) + IL_0000: ldstr "hello" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: pop + IL_0010: ldloca.s V_0 + IL_0012: ldc.i4.1 + IL_0013: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_0018: nop + IL_0019: ldstr "goodbye" + IL_001e: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0023: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_0028: pop + IL_0029: ldloca.s V_0 + IL_002b: ldc.i4.2 + IL_002c: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_0031: nop + IL_0032: ldloca.s V_0 + IL_0034: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() + IL_0039: ret + } + """ + ]) + + [] + let ``ComputedListExpression03``() = + CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"|] + """ +module ComputedListExpression03 +let ListExpressionSteppingTest3 () = + let x = ref 0 + [ while !x < 4 do + incr x + printfn "hello" + yield x ] + """ + (fun verifier -> verifier.VerifyIL [ + """ +.method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1> + ListExpressionSteppingTest3() cil managed +{ + + .maxstack 4 + .locals init (class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 V_0, + valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1> V_1) + IL_0000: ldc.i4.0 + IL_0001: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) + IL_0006: stloc.0 + IL_0007: nop + IL_0008: ldloc.0 + IL_0009: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_000e: ldc.i4.4 + IL_000f: bge.s IL_0034 + + IL_0011: ldloc.0 + IL_0012: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0017: nop + IL_0018: ldstr "hello" + IL_001d: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0022: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_0027: pop + IL_0028: ldloca.s V_1 + IL_002a: ldloc.0 + IL_002b: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1>::Add(!0) + IL_0030: nop + IL_0031: nop + IL_0032: br.s IL_0007 + + IL_0034: ldloca.s V_1 + IL_0036: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1>::Close() + IL_003b: ret +} + """ + ]) + + [] + let ``ComputedListExpression04``() = + CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"|] + """ +module ComputedListExpression04 +let ListExpressionSteppingTest4 () = + [ let x = ref 0 + try + let y = ref 0 + incr y + yield !x + let z = !x + !y + yield z + finally + incr x + printfn "done" ] + """ + (fun verifier -> verifier.VerifyIL [ + """ +.method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 + ListExpressionSteppingTest4() cil managed +{ + + .maxstack 4 + .locals init (valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0, + class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 V_1, + class [runtime]System.Collections.Generic.IEnumerable`1 V_2, + class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 V_3, + int32 V_4) + IL_0000: ldc.i4.0 + IL_0001: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) + IL_0006: stloc.1 + .try + { + IL_0007: nop + IL_0008: ldc.i4.0 + IL_0009: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) + IL_000e: stloc.3 + IL_000f: ldloc.3 + IL_0010: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0015: nop + IL_0016: ldloca.s V_0 + IL_0018: ldloc.1 + IL_0019: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_001e: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_0023: nop + IL_0024: ldloc.1 + IL_0025: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_002a: ldloc.3 + IL_002b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0030: add + IL_0031: stloc.s V_4 + IL_0033: ldloca.s V_0 + IL_0035: ldloc.s V_4 + IL_0037: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_003c: nop + IL_003d: ldnull + IL_003e: stloc.2 + IL_003f: leave.s IL_005a + + } + finally + { + IL_0041: nop + IL_0042: ldloc.1 + IL_0043: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0048: nop + IL_0049: ldstr "done" + IL_004e: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0053: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_0058: pop + IL_0059: endfinally + } + IL_005a: ldloc.2 + IL_005b: pop + IL_005c: ldloca.s V_0 + IL_005e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() + IL_0063: ret +} + """ + ]) + + [] + let ``ComputedListExpression05``() = + CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"|] + """ +module ComputedListExpression05 +let ListExpressionSteppingTest5 () = + [ for x in 1..4 do + printfn "hello" + yield x ] + """ + (fun verifier -> verifier.VerifyIL [ + """ + .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 + ListExpressionSteppingTest5() cil managed + { + + .maxstack 5 + .locals init (valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0, + class [runtime]System.Collections.Generic.IEnumerator`1 V_1, + class [runtime]System.Collections.Generic.IEnumerable`1 V_2, + int32 V_3, + class [runtime]System.IDisposable V_4) + IL_0000: ldc.i4.1 + IL_0001: ldc.i4.1 + IL_0002: ldc.i4.4 + IL_0003: call class [runtime]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, + int32, + int32) + IL_0008: callvirt instance class [runtime]System.Collections.Generic.IEnumerator`1 class [runtime]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_000d: stloc.1 + .try + { + IL_000e: ldloc.1 + IL_000f: callvirt instance bool [runtime]System.Collections.IEnumerator::MoveNext() + IL_0014: brfalse.s IL_0039 + + IL_0016: ldloc.1 + IL_0017: callvirt instance !0 class [runtime]System.Collections.Generic.IEnumerator`1::get_Current() + IL_001c: stloc.3 + IL_001d: ldstr "hello" + IL_0022: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0027: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_002c: pop + IL_002d: ldloca.s V_0 + IL_002f: ldloc.3 + IL_0030: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_0035: nop + IL_0036: nop + IL_0037: br.s IL_000e + + IL_0039: ldnull + IL_003a: stloc.2 + IL_003b: leave.s IL_0056 + + } + finally + { + IL_003d: ldloc.1 + IL_003e: isinst [runtime]System.IDisposable + IL_0043: stloc.s V_4 + IL_0045: ldloc.s V_4 + IL_0047: brfalse.s IL_0053 + + IL_0049: ldloc.s V_4 + IL_004b: callvirt instance void [runtime]System.IDisposable::Dispose() + IL_0050: ldnull + IL_0051: pop + IL_0052: endfinally + IL_0053: ldnull + IL_0054: pop + IL_0055: endfinally + } + IL_0056: ldloc.2 + IL_0057: pop + IL_0058: ldloca.s V_0 + IL_005a: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() + IL_005f: ret + } + """ + ]) + + [] + let ``ComputedListExpression06``() = + CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"|] + """ +module ComputedListExpression06 +let ListExpressionSteppingTest6 () = + [ for x in 1..4 do + match x with + | 1 -> + printfn "hello" + yield x + | 2 -> + printfn "hello" + yield x + | _ -> + yield x + ] + """ + (fun verifier -> verifier.VerifyIL [ + """ +.method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 + ListExpressionSteppingTest6() cil managed + { + + .maxstack 5 + .locals init (valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0, + class [runtime]System.Collections.Generic.IEnumerator`1 V_1, + class [runtime]System.Collections.Generic.IEnumerable`1 V_2, + int32 V_3, + class [runtime]System.IDisposable V_4) + IL_0000: ldc.i4.1 + IL_0001: ldc.i4.1 + IL_0002: ldc.i4.4 + IL_0003: call class [runtime]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, + int32, + int32) + IL_0008: callvirt instance class [runtime]System.Collections.Generic.IEnumerator`1 class [runtime]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_000d: stloc.1 + .try + { + IL_000e: ldloc.1 + IL_000f: callvirt instance bool [runtime]System.Collections.IEnumerator::MoveNext() + IL_0014: brfalse.s IL_0073 + + IL_0016: ldloc.1 + IL_0017: callvirt instance !0 class [runtime]System.Collections.Generic.IEnumerator`1::get_Current() + IL_001c: stloc.3 + IL_001d: ldloc.3 + IL_001e: ldc.i4.1 + IL_001f: sub + IL_0020: switch ( + IL_002f, + IL_004b) + IL_002d: br.s IL_0067 + + IL_002f: ldstr "hello" + IL_0034: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0039: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_003e: pop + IL_003f: ldloca.s V_0 + IL_0041: ldloc.3 + IL_0042: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_0047: nop + IL_0048: nop + IL_0049: br.s IL_000e + + IL_004b: ldstr "hello" + IL_0050: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0055: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_005a: pop + IL_005b: ldloca.s V_0 + IL_005d: ldloc.3 + IL_005e: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_0063: nop + IL_0064: nop + IL_0065: br.s IL_000e + + IL_0067: ldloca.s V_0 + IL_0069: ldloc.3 + IL_006a: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_006f: nop + IL_0070: nop + IL_0071: br.s IL_000e + + IL_0073: ldnull + IL_0074: stloc.2 + IL_0075: leave.s IL_0090 + + } + finally + { + IL_0077: ldloc.1 + IL_0078: isinst [runtime]System.IDisposable + IL_007d: stloc.s V_4 + IL_007f: ldloc.s V_4 + IL_0081: brfalse.s IL_008d + + IL_0083: ldloc.s V_4 + IL_0085: callvirt instance void [runtime]System.IDisposable::Dispose() + IL_008a: ldnull + IL_008b: pop + IL_008c: endfinally + IL_008d: ldnull + IL_008e: pop + IL_008f: endfinally + } + IL_0090: ldloc.2 + IL_0091: pop + IL_0092: ldloca.s V_0 + IL_0094: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() + IL_0099: ret + } + + """ + ]) diff --git a/tests/fsharp/Compiler/CodeGen/EmittedIL/Mutation.fs b/tests/fsharp/Compiler/CodeGen/EmittedIL/Mutation.fs index a13eb1e75a6..0a2bac6b626 100644 --- a/tests/fsharp/Compiler/CodeGen/EmittedIL/Mutation.fs +++ b/tests/fsharp/Compiler/CodeGen/EmittedIL/Mutation.fs @@ -284,24 +284,20 @@ type StaticC() = { .maxstack 8 - IL_0000: volatile. - IL_0002: ldsfld int32 Mutation05/StaticC::init@10 - IL_0007: ldc.i4.1 - IL_0008: bge.s IL_000c - - IL_000a: br.s IL_000e - - IL_000c: br.s IL_0017 - - IL_000e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() - IL_0013: nop - IL_0014: nop - IL_0015: br.s IL_0018 - - IL_0017: nop - IL_0018: volatile. - IL_001a: ldsfld int32 Mutation05/StaticC::x - IL_001f: ret + IL_0000: volatile. + IL_0002: ldsfld int32 Mutation05/StaticC::init@10 + IL_0007: ldc.i4.1 + IL_0008: bge.s IL_0013 + + IL_000a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() + IL_000f: nop + IL_0010: nop + IL_0011: br.s IL_0014 + + IL_0013: nop + IL_0014: volatile. + IL_0016: ldsfld int32 Mutation05/StaticC::x + IL_001b: ret } .method public specialname static void @@ -309,25 +305,21 @@ type StaticC() = { .maxstack 8 - IL_0000: volatile. - IL_0002: ldsfld int32 Mutation05/StaticC::init@10 - IL_0007: ldc.i4.1 - IL_0008: bge.s IL_000c - - IL_000a: br.s IL_000e - - IL_000c: br.s IL_0017 - - IL_000e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() - IL_0013: nop - IL_0014: nop - IL_0015: br.s IL_0018 - - IL_0017: nop - IL_0018: ldarg.0 - IL_0019: volatile. - IL_001b: stsfld int32 Mutation05/StaticC::x - IL_0020: ret + IL_0000: volatile. + IL_0002: ldsfld int32 Mutation05/StaticC::init@10 + IL_0007: ldc.i4.1 + IL_0008: bge.s IL_0013 + + IL_000a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() + IL_000f: nop + IL_0010: nop + IL_0011: br.s IL_0014 + + IL_0013: nop + IL_0014: ldarg.0 + IL_0015: volatile. + IL_0017: stsfld int32 Mutation05/StaticC::x + IL_001c: ret } .method private specialname rtspecialname static diff --git a/tests/fsharp/Compiler/Conformance/BasicGrammarElements/BasicConstants.fs b/tests/fsharp/Compiler/Conformance/BasicGrammarElements/BasicConstants.fs index 68dda297ece..5d7a454dcc0 100644 --- a/tests/fsharp/Compiler/Conformance/BasicGrammarElements/BasicConstants.fs +++ b/tests/fsharp/Compiler/Conformance/BasicGrammarElements/BasicConstants.fs @@ -4,7 +4,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics [] module ``Basic Grammar Element Constants`` = diff --git a/tests/fsharp/Compiler/Conformance/DataExpressions/ComputationExpressions.fs b/tests/fsharp/Compiler/Conformance/DataExpressions/ComputationExpressions.fs index 5b2c6159b09..60b21122a4c 100644 --- a/tests/fsharp/Compiler/Conformance/DataExpressions/ComputationExpressions.fs +++ b/tests/fsharp/Compiler/Conformance/DataExpressions/ComputationExpressions.fs @@ -4,7 +4,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics [] module ``ComputationExpressions`` = @@ -281,7 +281,7 @@ let ceResult : Trace = return if y then x else -1 } """ - [| FSharpErrorSeverity.Error, 3344, (6, 9, 8, 35), "This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature." |] + [| FSharpDiagnosticSeverity.Error, 3344, (6, 9, 8, 35), "This feature is not supported in this version of F#. You may need to add /langversion:preview to use this feature." |] [] let ``AndBang TraceMultiBindingMonoid`` () = @@ -582,7 +582,7 @@ let _ = return x + y } """ - [|(FSharpErrorSeverity.Error, 3343, (6, 9, 6, 25), "The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a 'Bind2' method or appropriate 'MergeSource' and 'Bind' methods")|] + [|(FSharpDiagnosticSeverity.Error, 3343, (6, 9, 6, 25), "The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a 'Bind2' method or appropriate 'MergeSource' and 'Bind' methods")|] [] let ``AndBang Negative TraceApplicative missing Bind and BindReturn`` () = @@ -596,7 +596,7 @@ let _ = return x + y } """ - [|(FSharpErrorSeverity.Error, 708, (6, 9, 6, 25), "This control construct may only be used if the computation expression builder defines a 'Bind' method")|] + [|(FSharpDiagnosticSeverity.Error, 708, (6, 9, 6, 25), "This control construct may only be used if the computation expression builder defines a 'Bind' method")|] [] @@ -612,7 +612,7 @@ let _ = return x + y } """ - [| FSharpErrorSeverity.Error, 708, (7, 9, 7, 25), "This control construct may only be used if the computation expression builder defines a 'Bind' method" |] + [| FSharpDiagnosticSeverity.Error, 708, (7, 9, 7, 25), "This control construct may only be used if the computation expression builder defines a 'Bind' method" |] [] let ``AndBang TraceApplicative with do-bang`` () = @@ -627,9 +627,9 @@ let _ = return x + y } """ - [|(FSharpErrorSeverity.Error, 10, (7, 9, 7, 13),"Unexpected keyword 'and!' in expression. Expected '}' or other token."); - (FSharpErrorSeverity.Error, 604, (5, 12, 5, 13), "Unmatched '{'"); - (FSharpErrorSeverity.Error, 10, (8, 9, 8, 13), "Unexpected keyword 'and!' in implementation file")|] + [|(FSharpDiagnosticSeverity.Error, 10, (7, 9, 7, 13),"Unexpected keyword 'and!' in expression. Expected '}' or other token."); + (FSharpDiagnosticSeverity.Error, 604, (5, 12, 5, 13), "Unmatched '{'"); + (FSharpDiagnosticSeverity.Error, 10, (8, 9, 8, 13), "Unexpected keyword 'and!' in implementation file")|] [] let ``AndBang Negative TraceApplicative let betweeen let! and and!`` () = @@ -644,7 +644,7 @@ let _ = return x + y } """ - [| (FSharpErrorSeverity.Error, 10, (8, 9, 8, 13), "Unexpected keyword 'and!' in expression") |] + [| (FSharpDiagnosticSeverity.Error, 10, (8, 9, 8, 13), "Unexpected keyword 'and!' in expression") |] [] @@ -658,7 +658,7 @@ let _ = and! y = Trace 2 } """ - [|(FSharpErrorSeverity.Error, 10, (8, 5, 8, 6), "Unexpected symbol '}' in expression")|] + [|(FSharpDiagnosticSeverity.Error, 10, (8, 5, 8, 6), "Unexpected symbol '}' in expression")|] [] let ``AndBang TraceApplicative conditional return`` () = diff --git a/tests/fsharp/Compiler/Language/AnonRecordTests.fs b/tests/fsharp/Compiler/Language/AnonRecordTests.fs index 05276a13c34..7773afcb45d 100644 --- a/tests/fsharp/Compiler/Language/AnonRecordTests.fs +++ b/tests/fsharp/Compiler/Language/AnonRecordTests.fs @@ -4,7 +4,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics [] module AnonRecordsTests = @@ -32,7 +32,7 @@ let sAnon = StructClass() type RefClass<'a when 'a : not struct>() = class end let rAnon = RefClass() """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 1 (3, 13, 3, 42) "A generic construct requires that the type 'struct {| R: int |}' have reference semantics, but it does not, i.e. it is a struct" @@ -44,7 +44,7 @@ let rAnon = RefClass() type StructClass<'a when 'a : struct>() = class end let sAnon = StructClass<{| S: int |}>() """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 1 (3, 13, 3, 38) "A generic construct requires that the type '{| S: int |}' is a CLI or F# struct type" diff --git a/tests/fsharp/Compiler/Language/ByrefTests.fs b/tests/fsharp/Compiler/Language/ByrefTests.fs index cd2dd148a5b..ef9fc80aedb 100644 --- a/tests/fsharp/Compiler/Language/ByrefTests.fs +++ b/tests/fsharp/Compiler/Language/ByrefTests.fs @@ -5,7 +5,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities open FSharp.Test.Utilities.Utilities -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics open FSharp.Test.Utilities open FSharp.Test.Utilities.Compiler open FSharp.Tests @@ -87,31 +87,31 @@ let f5 () = """ [| ( - FSharpErrorSeverity.Error, + FSharpDiagnosticSeverity.Error, 3228, (12, 6, 12, 25), "The address of a value returned from the expression cannot be used at this point. This is to ensure the address of the local value does not escape its scope." ) ( - FSharpErrorSeverity.Error, + FSharpDiagnosticSeverity.Error, 3228, (17, 10, 17, 19), "The address of a value returned from the expression cannot be used at this point. This is to ensure the address of the local value does not escape its scope." ) ( - FSharpErrorSeverity.Error, + FSharpDiagnosticSeverity.Error, 3228, (21, 5, 21, 50), "The address of a value returned from the expression cannot be used at this point. This is to ensure the address of the local value does not escape its scope." ) ( - FSharpErrorSeverity.Error, + FSharpDiagnosticSeverity.Error, 3228, (25, 6, 25, 26), "The address of a value returned from the expression cannot be used at this point. This is to ensure the address of the local value does not escape its scope." ) ( - FSharpErrorSeverity.Error, + FSharpDiagnosticSeverity.Error, 3228, (28, 6, 28, 51), "The address of a value returned from the expression cannot be used at this point. This is to ensure the address of the local value does not escape its scope." @@ -176,25 +176,25 @@ let test1 () = """ [| ( - FSharpErrorSeverity.Warning, + FSharpDiagnosticSeverity.Warning, 52, (3, 30, 3, 45), "The value has been copied to ensure the original is not mutated by this operation or because the copy is implicit when returning a struct from a member and another member is then accessed" ) ( - FSharpErrorSeverity.Warning, + FSharpDiagnosticSeverity.Warning, 52, (7, 5, 7, 20), "The value has been copied to ensure the original is not mutated by this operation or because the copy is implicit when returning a struct from a member and another member is then accessed" ) ( - FSharpErrorSeverity.Warning, + FSharpDiagnosticSeverity.Warning, 52, (10, 5, 10, 26), "The value has been copied to ensure the original is not mutated by this operation or because the copy is implicit when returning a struct from a member and another member is then accessed" ) ( - FSharpErrorSeverity.Warning, + FSharpDiagnosticSeverity.Warning, 52, (20, 5, 20, 29), "The value has been copied to ensure the original is not mutated by this operation or because the copy is implicit when returning a struct from a member and another member is then accessed" @@ -265,7 +265,7 @@ let test () = let y = &&x () """ [| - (FSharpErrorSeverity.Error, 256, (6, 13, 6, 16), "A value must be mutable in order to mutate the contents or take the address of a value type, e.g. 'let mutable x = ...'") + (FSharpDiagnosticSeverity.Error, 256, (6, 13, 6, 16), "A value must be mutable in order to mutate the contents or take the address of a value type, e.g. 'let mutable x = ...'") |] [] diff --git a/tests/fsharp/Compiler/Language/CompilerDirectiveTests.fs b/tests/fsharp/Compiler/Language/CompilerDirectiveTests.fs index f0c50060e60..94df44607ef 100644 --- a/tests/fsharp/Compiler/Language/CompilerDirectiveTests.fs +++ b/tests/fsharp/Compiler/Language/CompilerDirectiveTests.fs @@ -4,7 +4,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics [] module ``Test Compiler Directives`` = @@ -17,7 +17,7 @@ module ``Test Compiler Directives`` = CompilerAssert.CompileWithErrors( Compilation.Create(source, Fsx, Library), [| - FSharpErrorSeverity.Warning, 213, (2,1,2,6), "'' is not a valid assembly name" + FSharpDiagnosticSeverity.Warning, 213, (2,1,2,6), "'' is not a valid assembly name" |]) [] @@ -28,5 +28,5 @@ module ``Test Compiler Directives`` = CompilerAssert.CompileWithErrors( Compilation.Create(source, Fsx, Library), [| - FSharpErrorSeverity.Warning, 213, (2,1,2,10), "'' is not a valid assembly name" + FSharpDiagnosticSeverity.Warning, 213, (2,1,2,10), "'' is not a valid assembly name" |]) diff --git a/tests/fsharp/Compiler/Language/ComputationExpressionTests.fs b/tests/fsharp/Compiler/Language/ComputationExpressionTests.fs index c75052380f3..b8961030ac0 100644 --- a/tests/fsharp/Compiler/Language/ComputationExpressionTests.fs +++ b/tests/fsharp/Compiler/Language/ComputationExpressionTests.fs @@ -2,7 +2,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics [] module ComputationExpressionTests = @@ -11,12 +11,12 @@ module ComputationExpressionTests = sprintf """ module Code type ResultBuilder() = - member __.Return value = Ok value - member __.ReturnFrom (result: Result<_,_>) = result + member _.Return value = Ok value + member _.ReturnFrom (result: Result<_,_>) = result member x.Zero() = x.Return () - member __.Bind(r: Result<'t,_>, binder: 't -> Result<_,_>) = match r with | Ok r' -> binder r' | Error e -> e - member __.Delay(gen: unit -> Result<_,_>) = gen - member __.Run(gen: unit -> Result<_,_>) = gen() + member _.Bind(r: Result<'t,_>, binder: 't -> Result<_,_>) = match r with | Ok r' -> binder r' | Error e -> e + member _.Delay(gen: unit -> Result<_,_>) = gen + member _.Run(gen: unit -> Result<_,_>) = gen() member _.BindReturn(x: Result<'t,_>, f) = Result.map f x member inline _.Source(result : Result<_,_>) : Result<_,_> = result @@ -59,18 +59,18 @@ module AsyncResult = type AsyncResultBuilder() = - member __.Return (value: 'T) : Async> = + member _.Return (value: 'T) : Async> = async.Return <| result.Return value - member inline __.ReturnFrom + member inline _.ReturnFrom (asyncResult: Async>) : Async> = asyncResult - member __.Zero () : Async> = + member _.Zero () : Async> = async.Return <| result.Zero () - member inline __.Bind + member inline _.Bind (asyncResult: Async>, binder: 'T -> Async>) : Async> = @@ -81,7 +81,7 @@ type AsyncResultBuilder() = | Error x -> return Error x } - member __.Delay + member _.Delay (generator: unit -> Async>) : Async> = async.Delay generator @@ -92,19 +92,19 @@ type AsyncResultBuilder() = : Async> = this.Bind(computation1, fun () -> computation2) - member __.TryWith + member _.TryWith (computation: Async>, handler: System.Exception -> Async>) : Async> = async.TryWith(computation, handler) - member __.TryFinally + member _.TryFinally (computation: Async>, compensation: unit -> unit) : Async> = async.TryFinally(computation, compensation) - member __.Using + member _.Using (resource: 'T when 'T :> System.IDisposable, binder: 'T -> Async>) : Async> = @@ -123,8 +123,8 @@ type AsyncResultBuilder() = this.While(enum.MoveNext, this.Delay(fun () -> binder enum.Current))) - member inline __.BindReturn(x: Async>, f) = async.Bind(x, fun r -> Result.map f r |> async.Return) - member inline __.MergeSources(t1: Async>, t2: Async>) = + member inline _.BindReturn(x: Async>, f) = async.Bind(x, fun r -> Result.map f r |> async.Return) + member inline _.MergeSources(t1: Async>, t2: Async>) = AsyncResult.zip t1 t2 member inline _.Source(result : Async>) : Async> = result @@ -135,7 +135,7 @@ module ARExts = /// /// Needed to allow `for..in` and `for..do` functionality /// - member inline __.Source(s: #seq<_>) = s + member inline _.Source(s: #seq<_>) = s /// /// Method lets us transform data types into our internal representation. @@ -153,7 +153,7 @@ module ARExts = /// /// Method lets us transform data types into our internal representation. /// - member inline __.Source(asyncComputation : Async<_>) : Async> = asyncComputation |> Async.map Ok + member inline _.Source(asyncComputation : Async<_>) : Async> = asyncComputation |> Async.map Ok let asyncResult = AsyncResultBuilder() diff --git a/tests/fsharp/Compiler/Language/CustomCollectionTests.fs b/tests/fsharp/Compiler/Language/CustomCollectionTests.fs index fe8b5aa5956..0f02e397952 100644 --- a/tests/fsharp/Compiler/Language/CustomCollectionTests.fs +++ b/tests/fsharp/Compiler/Language/CustomCollectionTests.fs @@ -2,7 +2,7 @@ open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics [] module CustomCollectionTests = @@ -14,7 +14,7 @@ open System type foo() = let mutable i = "" member this.GetReverseIndex(_x: int, y: string) = y + " " - member __.Item with get (_x: string) = i and set idx value = i <- idx + value + member _.Item with get (_x: string) = i and set idx value = i <- idx + value let a = foo() a.[^"2"] <- "-1" @@ -63,7 +63,7 @@ open System type foo() = let mutable i = "" member this.GetReverseIndex(x: int, y: string) = x.ToString() + " " + y - member __.Item with get (_x: string) = i and set (idx1, idx2) value = i <- idx1 + " " + idx2 + " " + value + member _.Item with get (_x: string) = i and set (idx1, idx2) value = i <- idx1 + " " + idx2 + " " + value let a = foo() a.[^"1",^"2"] <- "3" @@ -99,7 +99,7 @@ let a = foo() if a.[^2] <> 12 then failwith "expected 12" """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 39 (9,7,9,9) "The type 'foo' does not define the field, constructor or member 'GetReverseIndex'." @@ -139,7 +139,7 @@ let a = foo() if a.[^2..1] <> 13 then failwith "expected 13" """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 39 (12,7,12,9) "The type 'foo' does not define the field, constructor or member 'GetReverseIndex'." diff --git a/tests/fsharp/Compiler/Language/DefaultInterfaceMemberTests.fs b/tests/fsharp/Compiler/Language/DefaultInterfaceMemberTests.fs index ff0abf3091e..ec87bfe38dd 100644 --- a/tests/fsharp/Compiler/Language/DefaultInterfaceMemberTests.fs +++ b/tests/fsharp/Compiler/Language/DefaultInterfaceMemberTests.fs @@ -5,7 +5,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities open FSharp.Test.Utilities.Utilities -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics #if NETCOREAPP @@ -51,8 +51,8 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [ilCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpErrorSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for 'ITest.DefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpDiagnosticSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpDiagnosticSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for 'ITest.DefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -173,8 +173,8 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpErrorSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for those members: + (FSharpDiagnosticSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpDiagnosticSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for those members: \t'ITest.DefaultMethod() : unit' \t'ITest.NonDefaultMethod() : unit' Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") @@ -221,8 +221,8 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpErrorSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for 'ITest.DefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpDiagnosticSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpDiagnosticSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for 'ITest.DefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -263,8 +263,8 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpErrorSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for those members: + (FSharpDiagnosticSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpDiagnosticSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for those members: 'ITest.Method1() : unit' 'ITest.Method2() : unit' Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") @@ -312,8 +312,8 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3350, (9, 15, 9, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpErrorSeverity.Error, 366, (9, 15, 9, 20), "No implementation was given for 'ITest.DefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpDiagnosticSeverity.Error, 3350, (9, 15, 9, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpDiagnosticSeverity.Error, 366, (9, 15, 9, 20), "No implementation was given for 'ITest.DefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -360,7 +360,7 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 855, (11, 19, 11, 32), "No abstract or interface member was found that corresponds to this override") + (FSharpDiagnosticSeverity.Error, 855, (11, 19, 11, 32), "No abstract or interface member was found that corresponds to this override") |]) [] @@ -410,8 +410,8 @@ let f () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3350, (14, 7, 14, 8), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpErrorSeverity.Error, 3350, (14, 9, 14, 10), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpDiagnosticSeverity.Error, 3350, (14, 7, 14, 8), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpDiagnosticSeverity.Error, 3350, (14, 9, 14, 10), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") |]) [] @@ -461,7 +461,7 @@ let f () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3350, (14, 5, 14, 27), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpDiagnosticSeverity.Error, 3350, (14, 5, 14, 27), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") |]) [] @@ -498,7 +498,7 @@ let f () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3350, (8, 5, 8, 22), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpDiagnosticSeverity.Error, 3350, (8, 5, 8, 22), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") |]) [] @@ -535,7 +535,7 @@ let f () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3350, (8, 5, 8, 19), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpDiagnosticSeverity.Error, 3350, (8, 5, 8, 19), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") |]) [] @@ -576,7 +576,7 @@ let f1 () = Compilation.Create(fsharpSource, Fsx, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3350, (9, 5, 9, 15), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpDiagnosticSeverity.Error, 3350, (9, 5, 9, 15), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") |]) [] @@ -626,11 +626,11 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 363, (8, 15, 8, 17), "The interface 'IA' is included in multiple explicitly implemented interface types. Add an explicit implementation of this interface.") - (FSharpErrorSeverity.Error, 3350, (9, 15, 9, 17), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpErrorSeverity.Error, 366, (9, 15, 9, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") - (FSharpErrorSeverity.Error, 3350, (8, 15, 8, 17), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpErrorSeverity.Error, 366, (8, 15, 8, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpDiagnosticSeverity.Error, 363, (8, 15, 8, 17), "The interface 'IA' is included in multiple explicitly implemented interface types. Add an explicit implementation of this interface.") + (FSharpDiagnosticSeverity.Error, 3350, (9, 15, 9, 17), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpDiagnosticSeverity.Error, 366, (9, 15, 9, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpDiagnosticSeverity.Error, 3350, (8, 15, 8, 17), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpDiagnosticSeverity.Error, 366, (8, 15, 8, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -681,8 +681,8 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3350, (10, 15, 10, 17), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpErrorSeverity.Error, 366, (10, 15, 10, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpDiagnosticSeverity.Error, 3350, (10, 15, 10, 17), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpDiagnosticSeverity.Error, 366, (10, 15, 10, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -937,8 +937,8 @@ type Test2 () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3350, (10, 15, 10, 22), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpErrorSeverity.Error, 358, (10, 15, 10, 22), "The override for 'M<'U> : 'U * int -> unit' was ambiguous") + (FSharpDiagnosticSeverity.Error, 3350, (10, 15, 10, 22), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpDiagnosticSeverity.Error, 358, (10, 15, 10, 22), "The override for 'M<'U> : 'U * int -> unit' was ambiguous") |]) #else @@ -985,9 +985,9 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [ilCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3351, (8, 15, 8, 20), "Feature 'default interface member consumption' is not supported by target runtime.") - (FSharpErrorSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpErrorSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for 'ITest.DefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpDiagnosticSeverity.Error, 3351, (8, 15, 8, 20), "Feature 'default interface member consumption' is not supported by target runtime.") + (FSharpDiagnosticSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpDiagnosticSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for 'ITest.DefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -1028,7 +1028,7 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [ilCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3351, (8, 15, 8, 20), "Feature 'default interface member consumption' is not supported by target runtime.") + (FSharpDiagnosticSeverity.Error, 3351, (8, 15, 8, 20), "Feature 'default interface member consumption' is not supported by target runtime.") |]) [] @@ -1078,8 +1078,8 @@ let f () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3351, (14, 5, 14, 27), "Feature 'default interface member consumption' is not supported by target runtime.") - (FSharpErrorSeverity.Error, 3350, (14, 5, 14, 27), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpDiagnosticSeverity.Error, 3351, (14, 5, 14, 27), "Feature 'default interface member consumption' is not supported by target runtime.") + (FSharpDiagnosticSeverity.Error, 3350, (14, 5, 14, 27), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") |]) #endif @@ -1128,7 +1128,7 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for 'ITest.NonDefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpDiagnosticSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for 'ITest.NonDefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -1209,7 +1209,7 @@ type Test () = interface ITest with - member __.NonDefaultMethod () = + member _.NonDefaultMethod () = Console.Write("NonDefaultMethod") [] @@ -1271,7 +1271,7 @@ type Test () = interface ITest with // protected member - member __.M1() = + member _.M1() = Console.Write("Protected") type Test2 () = @@ -1280,7 +1280,7 @@ type Test2 () = interface ITest2 with // protected member - member __.M1() = + member _.M1() = Console.Write("ProtectedOverride") [] @@ -1344,7 +1344,7 @@ open CSharpTest let main _ = let test = { new ITest with - member __.M1() = + member _.M1() = Console.Write("ObjExprProtected") } test.M2 () @@ -1352,7 +1352,7 @@ let main _ = let test2 = { new ITest2 with - member __.M1() = + member _.M1() = Console.Write("ObjExprProtected2") } test2.M2 () 0 @@ -1410,7 +1410,7 @@ type Test () = interface ITest with // protected member - member __.M1() = + member _.M1() = Console.Write("Protected") type Test2 () = @@ -1419,7 +1419,7 @@ type Test2 () = interface ITest2 with // protected member - member __.M1() = + member _.M1() = Console.Write("ProtectedOverride") let f () = @@ -1441,8 +1441,8 @@ let f () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 491, (26, 5, 26, 15), "The member or object constructor 'M1' is not accessible. Private members may only be accessed from within the declaring type. Protected members may only be accessed from an extending type and cannot be accessed from inner lambda expressions.") - (FSharpErrorSeverity.Error, 491, (31, 5, 31, 16), "The member or object constructor 'M1' is not accessible. Private members may only be accessed from within the declaring type. Protected members may only be accessed from an extending type and cannot be accessed from inner lambda expressions.") + (FSharpDiagnosticSeverity.Error, 491, (26, 5, 26, 15), "The member or object constructor 'M1' is not accessible. Private members may only be accessed from within the declaring type. Protected members may only be accessed from an extending type and cannot be accessed from inner lambda expressions.") + (FSharpDiagnosticSeverity.Error, 491, (31, 5, 31, 16), "The member or object constructor 'M1' is not accessible. Private members may only be accessed from within the declaring type. Protected members may only be accessed from an extending type and cannot be accessed from inner lambda expressions.") |]) [] @@ -1494,7 +1494,7 @@ type Test () = (this :> ITest).M1() // protected member - member __.M1() = + member _.M1() = Console.Write("Protected") type Test2 () = @@ -1509,7 +1509,7 @@ type Test2 () = (this :> ITest).M1() // protected member - member __.M1() = + member _.M1() = Console.Write("ProtectedOverride") """ @@ -1521,10 +1521,10 @@ type Test2 () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 629, (10, 9, 10, 27), "Method 'M1' is not accessible from this code location") - (FSharpErrorSeverity.Error, 629, (15, 13, 15, 31), "Method 'M1' is not accessible from this code location") - (FSharpErrorSeverity.Error, 629, (25, 9, 25, 28), "Method 'M1' is not accessible from this code location") - (FSharpErrorSeverity.Error, 629, (30, 13, 30, 31), "Method 'M1' is not accessible from this code location") + (FSharpDiagnosticSeverity.Error, 629, (10, 9, 10, 27), "Method 'M1' is not accessible from this code location") + (FSharpDiagnosticSeverity.Error, 629, (15, 13, 15, 31), "Method 'M1' is not accessible from this code location") + (FSharpDiagnosticSeverity.Error, 629, (25, 9, 25, 28), "Method 'M1' is not accessible from this code location") + (FSharpDiagnosticSeverity.Error, 629, (30, 13, 30, 31), "Method 'M1' is not accessible from this code location") |]) [] @@ -1556,7 +1556,7 @@ type Test () = interface ITest with - member __.NonDefaultMethod () = + member _.NonDefaultMethod () = Console.Write("NonDefaultMethod") [] @@ -1606,7 +1606,7 @@ type Test () = interface ITest with - member __.NonDefaultMethod () = + member _.NonDefaultMethod () = Console.Write("NonDefaultMethod") let f () = @@ -1623,7 +1623,7 @@ let f () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 39, (16, 10, 16, 23), "The type 'ITest' does not define the field, constructor or member 'DefaultMethod'. Maybe you want one of the following: + (FSharpDiagnosticSeverity.Error, 39, (16, 10, 16, 23), "The type 'ITest' does not define the field, constructor or member 'DefaultMethod'. Maybe you want one of the following: NonDefaultMethod") |]) @@ -1673,7 +1673,7 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 855, (11, 19, 11, 32), "No abstract or interface member was found that corresponds to this override") + (FSharpDiagnosticSeverity.Error, 855, (11, 19, 11, 32), "No abstract or interface member was found that corresponds to this override") |]) [] @@ -1708,10 +1708,10 @@ type Test () = interface ITest with - member __.DefaultMethod () = + member _.DefaultMethod () = Console.Write("IVT-") - member __.NonDefaultMethod () = + member _.NonDefaultMethod () = Console.Write("NonDefaultMethod") [] @@ -1797,7 +1797,7 @@ open CSharpTest [] let main _ = - let test = { new ITest with member __.NonDefaultMethod () = Console.Write("ObjExpr") } + let test = { new ITest with member _.NonDefaultMethod () = Console.Write("ObjExpr") } test.DefaultMethod () Console.Write("-") test.NonDefaultMethod(); @@ -1851,7 +1851,7 @@ let test = { new ITest } Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 366, (7, 12, 7, 25), "No implementation was given for 'ITest.NonDefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpDiagnosticSeverity.Error, 366, (7, 12, 7, 25), "No implementation was given for 'ITest.NonDefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -1883,10 +1883,10 @@ type Test () = interface ITest with - member __.DefaultMethod () = + member _.DefaultMethod () = Console.Write("OverrideDefaultMethod") - member __.NonDefaultMethod () = + member _.NonDefaultMethod () = Console.Write("NonDefaultMethod") [] @@ -1936,9 +1936,9 @@ open CSharpTest let main _ = let test = { new ITest with - member __.DefaultMethod () = + member _.DefaultMethod () = Console.Write("ObjExprOverrideDefaultMethod") - member __.NonDefaultMethod () = + member _.NonDefaultMethod () = Console.Write("ObjExprNonDefaultMethod") } test.DefaultMethod () Console.Write("-") @@ -2082,16 +2082,16 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 363, (9, 15, 9, 21), "The interface 'ITest1' is included in multiple explicitly implemented interface types. Add an explicit implementation of this interface.") - (FSharpErrorSeverity.Error, 3352, (10, 15, 10, 21), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") - (FSharpErrorSeverity.Error, 3352, (10, 15, 10, 21), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") - (FSharpErrorSeverity.Error, 366, (10, 15, 10, 21), "No implementation was given for those members: + (FSharpDiagnosticSeverity.Error, 363, (9, 15, 9, 21), "The interface 'ITest1' is included in multiple explicitly implemented interface types. Add an explicit implementation of this interface.") + (FSharpDiagnosticSeverity.Error, 3352, (10, 15, 10, 21), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") + (FSharpDiagnosticSeverity.Error, 3352, (10, 15, 10, 21), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") + (FSharpDiagnosticSeverity.Error, 366, (10, 15, 10, 21), "No implementation was given for those members: 'ITest1.Method1() : unit' 'ITest1.Method2() : unit' Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") - (FSharpErrorSeverity.Error, 3352, (9, 15, 9, 21), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") - (FSharpErrorSeverity.Error, 3352, (9, 15, 9, 21), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") - (FSharpErrorSeverity.Error, 366, (9, 15, 9, 21), "No implementation was given for those members: + (FSharpDiagnosticSeverity.Error, 3352, (9, 15, 9, 21), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") + (FSharpDiagnosticSeverity.Error, 3352, (9, 15, 9, 21), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") + (FSharpDiagnosticSeverity.Error, 366, (9, 15, 9, 21), "No implementation was given for those members: 'ITest1.Method1() : unit' 'ITest1.Method2() : unit' Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") @@ -2165,9 +2165,9 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3352, (9, 15, 9, 21), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") - (FSharpErrorSeverity.Error, 3352, (9, 15, 9, 21), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") - (FSharpErrorSeverity.Error, 366, (9, 15, 9, 21), "No implementation was given for those members: + (FSharpDiagnosticSeverity.Error, 3352, (9, 15, 9, 21), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") + (FSharpDiagnosticSeverity.Error, 3352, (9, 15, 9, 21), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") + (FSharpDiagnosticSeverity.Error, 366, (9, 15, 9, 21), "No implementation was given for those members: 'ITest1.Method1() : unit' 'ITest1.Method2() : unit' Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") @@ -2243,9 +2243,9 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3352, (9, 15, 9, 28), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") - (FSharpErrorSeverity.Error, 3352, (9, 15, 9, 28), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") - (FSharpErrorSeverity.Error, 366, (9, 15, 9, 28), "No implementation was given for those members: + (FSharpDiagnosticSeverity.Error, 3352, (9, 15, 9, 28), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") + (FSharpDiagnosticSeverity.Error, 3352, (9, 15, 9, 28), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") + (FSharpDiagnosticSeverity.Error, 366, (9, 15, 9, 28), "No implementation was given for those members: 'ITest1.Method1() : unit' 'ITest1.Method2() : unit' Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") @@ -2321,9 +2321,9 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") - (FSharpErrorSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") - (FSharpErrorSeverity.Error, 366, (13, 15, 13, 28), "No implementation was given for those members: + (FSharpDiagnosticSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") + (FSharpDiagnosticSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") + (FSharpDiagnosticSeverity.Error, 366, (13, 15, 13, 28), "No implementation was given for those members: 'ITest1.Method1() : unit' 'ITest1.Method2() : unit' Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") @@ -2393,9 +2393,9 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") - (FSharpErrorSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") - (FSharpErrorSeverity.Error, 366, (13, 15, 13, 28), "No implementation was given for those members: + (FSharpDiagnosticSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") + (FSharpDiagnosticSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") + (FSharpDiagnosticSeverity.Error, 366, (13, 15, 13, 28), "No implementation was given for those members: 'ITest1.Method1() : unit' 'ITest1.Method2() : unit' Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") @@ -2459,9 +2459,9 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") - (FSharpErrorSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") - (FSharpErrorSeverity.Error, 366, (13, 15, 13, 28), "No implementation was given for those members: + (FSharpDiagnosticSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") + (FSharpDiagnosticSeverity.Error, 3352, (13, 15, 13, 28), "Interface member 'ITest1.Method2() : unit' does not have a most specific implementation.") + (FSharpDiagnosticSeverity.Error, 366, (13, 15, 13, 28), "No implementation was given for those members: 'ITest1.Method1() : unit' 'ITest1.Method2() : unit' Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") @@ -2527,9 +2527,9 @@ type Test () = interface ICombinedTest with - member __.Method1 () = Console.Write("FSharpICombinedTest-Method1") + member _.Method1 () = Console.Write("FSharpICombinedTest-Method1") - member __.Method2 () = Console.Write("FSharpICombinedTest-Method2") + member _.Method2 () = Console.Write("FSharpICombinedTest-Method2") [] let main _ = @@ -2597,9 +2597,9 @@ type Test () = interface ICombinedTest with - member __.Method1 () = Console.Write("FSharpICombinedTest-Method1") + member _.Method1 () = Console.Write("FSharpICombinedTest-Method1") - member __.Method2 () = Console.Write("FSharpICombinedTest-Method2") + member _.Method2 () = Console.Write("FSharpICombinedTest-Method2") [] let main _ = @@ -2675,9 +2675,9 @@ type Test () = interface ITest2 interface ITest1 with - member __.Method1 () = Console.Write("FSharpExplicitTest-Method1") + member _.Method1 () = Console.Write("FSharpExplicitTest-Method1") - member __.Method2 () = Console.Write("FSharpExplicitTest-Method2") + member _.Method2 () = Console.Write("FSharpExplicitTest-Method2") interface ITest3 [] @@ -2748,7 +2748,7 @@ type Test () = interface ICombinedTest with - member __.Method2 () = Console.Write("FSharpICombinedTest-Method2") + member _.Method2 () = Console.Write("FSharpICombinedTest-Method2") """ let csCmpl = @@ -2759,8 +2759,8 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3352, (14, 15, 14, 28), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") - (FSharpErrorSeverity.Error, 366, (14, 15, 14, 28), "No implementation was given for 'ITest1.Method1() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpDiagnosticSeverity.Error, 3352, (14, 15, 14, 28), "Interface member 'ITest1.Method1() : unit' does not have a most specific implementation.") + (FSharpDiagnosticSeverity.Error, 366, (14, 15, 14, 28), "No implementation was given for 'ITest1.Method1() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -3063,7 +3063,7 @@ type Test () = interface ICombinedSideTest with - member __.Method2 () = () + member _.Method2 () = () interface IFinalCombinedTest @@ -3263,19 +3263,19 @@ type Test () = interface IBase with - member __.Method () = Console.Write("IBase") + member _.Method () = Console.Write("IBase") interface IA1 with - member __.Method () = Console.Write("IA1") + member _.Method () = Console.Write("IA1") interface IB1 with - member __.Method () = Console.Write("IB1") + member _.Method () = Console.Write("IB1") interface IC1 with - member __.Method () = Console.Write("IC1") + member _.Method () = Console.Write("IC1") interface IDiamond1 interface IDiamond2 @@ -3396,7 +3396,7 @@ type Test () = interface IBase with - member __.Method () = Console.Write "123" + member _.Method () = Console.Write "123" interface IC2 interface IDiamond2 @@ -3500,9 +3500,9 @@ type Test () = interface ICombinedSideTest interface ITest1 with - member __.Method1 () = () + member _.Method1 () = () - member __.Method2 () = () + member _.Method2 () = () [] let main _ = @@ -3620,7 +3620,7 @@ type Test2 () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 366, (10, 15, 10, 32), "No implementation was given for 'ITest1.Method2() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpDiagnosticSeverity.Error, 366, (10, 15, 10, 32), "No implementation was given for 'ITest1.Method2() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -3647,7 +3647,7 @@ type Test () = interface ITest with - member __.NonDefaultMethod () = + member _.NonDefaultMethod () = Console.Write("NonDefaultMethod") [] @@ -3692,9 +3692,9 @@ type Test () = interface ITest with - member __.A with get () = "OverrideA" + member _.A with get () = "OverrideA" - member __.NonDefaultMethod () = + member _.NonDefaultMethod () = Console.Write("NonDefaultMethod") [] @@ -3892,11 +3892,11 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 363, (8, 15, 8, 17), "The interface 'IA' is included in multiple explicitly implemented interface types. Add an explicit implementation of this interface.") - (FSharpErrorSeverity.Error, 3352, (9, 15, 9, 17), "Interface member 'IA.M() : unit' does not have a most specific implementation.") - (FSharpErrorSeverity.Error, 366, (9, 15, 9, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") - (FSharpErrorSeverity.Error, 3352, (8, 15, 8, 17), "Interface member 'IA.M() : unit' does not have a most specific implementation.") - (FSharpErrorSeverity.Error, 366, (8, 15, 8, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpDiagnosticSeverity.Error, 363, (8, 15, 8, 17), "The interface 'IA' is included in multiple explicitly implemented interface types. Add an explicit implementation of this interface.") + (FSharpDiagnosticSeverity.Error, 3352, (9, 15, 9, 17), "Interface member 'IA.M() : unit' does not have a most specific implementation.") + (FSharpDiagnosticSeverity.Error, 366, (9, 15, 9, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpDiagnosticSeverity.Error, 3352, (8, 15, 8, 17), "Interface member 'IA.M() : unit' does not have a most specific implementation.") + (FSharpDiagnosticSeverity.Error, 366, (8, 15, 8, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -3947,8 +3947,8 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3352, (10, 15, 10, 17), "Interface member 'IA.M() : unit' does not have a most specific implementation.") - (FSharpErrorSeverity.Error, 366, (10, 15, 10, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpDiagnosticSeverity.Error, 3352, (10, 15, 10, 17), "Interface member 'IA.M() : unit' does not have a most specific implementation.") + (FSharpDiagnosticSeverity.Error, 366, (10, 15, 10, 17), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -3990,7 +3990,7 @@ type Test () = interface IC interface IA with - member __.M () = Console.Write("M") + member _.M () = Console.Write("M") [] let main _ = @@ -4077,9 +4077,9 @@ type Test () = interface IC interface IA with - member __.M () = Console.Write("M") + member _.M () = Console.Write("M") - member __.M (_x: single) = Console.Write("fs_single") + member _.M (_x: single) = Console.Write("fs_single") [] let main _ = @@ -4169,7 +4169,7 @@ type Test () = interface IC interface IA with - member __.M () = Console.Write("M") + member _.M () = Console.Write("M") """ let csCmpl = @@ -4180,7 +4180,7 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 366, (12, 15, 12, 17), "No implementation was given for 'IA.M(x: float32) : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpDiagnosticSeverity.Error, 366, (12, 15, 12, 17), "No implementation was given for 'IA.M(x: float32) : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -4227,16 +4227,16 @@ type Test () = interface IA with - member __.M(_x: int) = Console.Write("InTest") + member _.M(_x: int) = Console.Write("InTest") - member __.M<'Item> (x: int, y: 'Item) = + member _.M<'Item> (x: int, y: 'Item) = Console.Write(x.ToString()) Console.Write(y.ToString ()) - member __.M<'TTT> (x: 'TTT) = + member _.M<'TTT> (x: 'TTT) = Console.Write(x.ToString ()) - member __.M (x: int, text: string) = + member _.M (x: int, text: string) = Console.Write("ABC") Console.Write(x.ToString()) Console.Write(text) @@ -4351,9 +4351,9 @@ type Test () = interface IC interface IA with - member __.M(_x: string) = Console.Write("Test.String") + member _.M(_x: string) = Console.Write("Test.String") - member __.Prop2 with set _ = Console.Write("Test.Prop2") + member _.Prop2 with set _ = Console.Write("Test.Prop2") [] let main _ = @@ -4448,7 +4448,7 @@ type Test () = interface IC interface IA with - member __.M(_x: string) = Console.Write("Test.String") + member _.M(_x: string) = Console.Write("Test.String") """ let csCmpl = @@ -4459,8 +4459,8 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3352, (12, 15, 12, 25), "Interface member 'IA.set_Prop2(value: string) : unit' does not have a most specific implementation.") - (FSharpErrorSeverity.Error, 366, (12, 15, 12, 25), "No implementation was given for 'IA.set_Prop2(value: string) : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpDiagnosticSeverity.Error, 3352, (12, 15, 12, 25), "Interface member 'IA.set_Prop2(value: string) : unit' does not have a most specific implementation.") + (FSharpDiagnosticSeverity.Error, 366, (12, 15, 12, 25), "No implementation was given for 'IA.set_Prop2(value: string) : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -4509,11 +4509,11 @@ let test = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 363, (8, 7, 8, 21), "The interface 'IA' is included in multiple explicitly implemented interface types. Add an explicit implementation of this interface.") - (FSharpErrorSeverity.Error, 3352, (7, 5, 8, 21), "Interface member 'IA.M() : unit' does not have a most specific implementation.") - (FSharpErrorSeverity.Error, 366, (7, 5, 8, 21), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") - (FSharpErrorSeverity.Error, 3352, (8, 7, 8, 21), "Interface member 'IA.M() : unit' does not have a most specific implementation.") - (FSharpErrorSeverity.Error, 366, (8, 7, 8, 21), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpDiagnosticSeverity.Error, 363, (8, 7, 8, 21), "The interface 'IA' is included in multiple explicitly implemented interface types. Add an explicit implementation of this interface.") + (FSharpDiagnosticSeverity.Error, 3352, (7, 5, 8, 21), "Interface member 'IA.M() : unit' does not have a most specific implementation.") + (FSharpDiagnosticSeverity.Error, 366, (7, 5, 8, 21), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpDiagnosticSeverity.Error, 3352, (8, 7, 8, 21), "Interface member 'IA.M() : unit' does not have a most specific implementation.") + (FSharpDiagnosticSeverity.Error, 366, (8, 7, 8, 21), "No implementation was given for 'IA.M() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -4797,7 +4797,7 @@ let f () = Compilation.Create(fsharpSource, Fsx, Exe, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 39, (6, 17, 6, 29), "The type 'CSharpClass' does not define the field, constructor or member 'StaticMethod'.") + (FSharpDiagnosticSeverity.Error, 39, (6, 17, 6, 29), "The type 'CSharpClass' does not define the field, constructor or member 'StaticMethod'.") |]) [] @@ -4847,7 +4847,7 @@ let f () = Compilation.Create(fsharpSource, Fsx, Exe, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 39, (11, 17, 11, 29), "The type 'FSharpClass' does not define the field, constructor or member 'StaticMethod'.") + (FSharpDiagnosticSeverity.Error, 39, (11, 17, 11, 29), "The type 'FSharpClass' does not define the field, constructor or member 'StaticMethod'.") |]) [] @@ -4897,7 +4897,7 @@ let f () = Compilation.Create(fsharpSource, Fsx, Exe, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 1, (9, 5, 9, 15), "The type 'CSharpClass' does not support the operator 'StaticMethod'") + (FSharpDiagnosticSeverity.Error, 1, (9, 5, 9, 15), "The type 'CSharpClass' does not support the operator 'StaticMethod'") |]) [] @@ -4950,7 +4950,7 @@ let f () = Compilation.Create(fsharpSource, Fsx, Exe, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 1, (14, 5, 14, 15), "The type 'FSharpClass' does not support the operator 'StaticMethod'") + (FSharpDiagnosticSeverity.Error, 1, (14, 5, 14, 15), "The type 'FSharpClass' does not support the operator 'StaticMethod'") |]) #else @@ -4997,9 +4997,9 @@ type Test () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [ilCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3351, (8, 15, 8, 20), "Feature 'default interface member consumption' is not supported by target runtime.") - (FSharpErrorSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") - (FSharpErrorSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for 'ITest.DefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") + (FSharpDiagnosticSeverity.Error, 3351, (8, 15, 8, 20), "Feature 'default interface member consumption' is not supported by target runtime.") + (FSharpDiagnosticSeverity.Error, 3350, (8, 15, 8, 20), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpDiagnosticSeverity.Error, 366, (8, 15, 8, 20), "No implementation was given for 'ITest.DefaultMethod() : unit'. Note that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'.") |]) [] @@ -5049,8 +5049,8 @@ let f () = Compilation.Create(fsharpSource, Fs, Library, options = [|"--langversion:4.6"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 3351, (14, 5, 14, 27), "Feature 'default interface member consumption' is not supported by target runtime.") - (FSharpErrorSeverity.Error, 3350, (14, 5, 14, 27), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") + (FSharpDiagnosticSeverity.Error, 3351, (14, 5, 14, 27), "Feature 'default interface member consumption' is not supported by target runtime.") + (FSharpDiagnosticSeverity.Error, 3350, (14, 5, 14, 27), "Feature 'default interface member consumption' is not available in F# 4.6. Please use language version " + targetVersion + " or greater.") |]) #endif diff --git a/tests/fsharp/Compiler/Language/FixedIndexSliceTests.fs b/tests/fsharp/Compiler/Language/FixedIndexSliceTests.fs index 5dc42ccf294..a9a26f36775 100644 --- a/tests/fsharp/Compiler/Language/FixedIndexSliceTests.fs +++ b/tests/fsharp/Compiler/Language/FixedIndexSliceTests.fs @@ -2,7 +2,7 @@ open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics [] module FixedIndexSliceTests = @@ -22,12 +22,12 @@ arr3.[*, 1, *] arr3.[*, 1, 1] """ [| - FSharpErrorSeverity.Error, 39, (5,1,5,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." - FSharpErrorSeverity.Error, 39, (6,1,6,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." - FSharpErrorSeverity.Error, 39, (7,1,7,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." - FSharpErrorSeverity.Error, 39, (8,1,8,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." - FSharpErrorSeverity.Error, 39, (9,1,9,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." - FSharpErrorSeverity.Error, 39, (10,1,10,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." + FSharpDiagnosticSeverity.Error, 39, (5,1,5,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." + FSharpDiagnosticSeverity.Error, 39, (6,1,6,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." + FSharpDiagnosticSeverity.Error, 39, (7,1,7,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." + FSharpDiagnosticSeverity.Error, 39, (8,1,8,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." + FSharpDiagnosticSeverity.Error, 39, (9,1,9,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." + FSharpDiagnosticSeverity.Error, 39, (10,1,10,15), "The type '[,,]' does not define the field, constructor or member 'GetSlice'." |] [] @@ -52,19 +52,19 @@ arr4.[1, 1, 1, *] arr4.[*, 1, 1, 1] """ [| - FSharpErrorSeverity.Error, 39, (5,1,5,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpErrorSeverity.Error, 39, (6,1,6,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpErrorSeverity.Error, 39, (7,1,7,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpErrorSeverity.Error, 39, (8,1,8,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpErrorSeverity.Error, 39, (9,1,9,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpErrorSeverity.Error, 39, (10,1,10,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpErrorSeverity.Error, 39, (11,1,11,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpErrorSeverity.Error, 39, (12,1,12,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpErrorSeverity.Error, 39, (13,1,13,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpErrorSeverity.Error, 39, (14,1,14,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpErrorSeverity.Error, 39, (15,1,15,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpErrorSeverity.Error, 39, (16,1,16,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." - FSharpErrorSeverity.Error, 39, (17,1,17,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpDiagnosticSeverity.Error, 39, (5,1,5,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpDiagnosticSeverity.Error, 39, (6,1,6,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpDiagnosticSeverity.Error, 39, (7,1,7,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpDiagnosticSeverity.Error, 39, (8,1,8,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpDiagnosticSeverity.Error, 39, (9,1,9,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpDiagnosticSeverity.Error, 39, (10,1,10,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpDiagnosticSeverity.Error, 39, (11,1,11,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpDiagnosticSeverity.Error, 39, (12,1,12,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpDiagnosticSeverity.Error, 39, (13,1,13,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpDiagnosticSeverity.Error, 39, (14,1,14,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpDiagnosticSeverity.Error, 39, (15,1,15,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpDiagnosticSeverity.Error, 39, (16,1,16,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." + FSharpDiagnosticSeverity.Error, 39, (17,1,17,18), "The type '[,,,]' does not define the field, constructor or member 'GetSlice'." |] [] @@ -84,12 +84,12 @@ arr3.[*, 1, *] <- arr1 arr3.[*, 1, 1] <- arr1 """ [| - FSharpErrorSeverity.Error, 39, (7,1,7,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." - FSharpErrorSeverity.Error, 39, (8,1,8,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." - FSharpErrorSeverity.Error, 39, (9,1,9,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." - FSharpErrorSeverity.Error, 39, (10,1,10,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." - FSharpErrorSeverity.Error, 39, (11,1,11,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." - FSharpErrorSeverity.Error, 39, (12,1,12,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." + FSharpDiagnosticSeverity.Error, 39, (7,1,7,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." + FSharpDiagnosticSeverity.Error, 39, (8,1,8,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." + FSharpDiagnosticSeverity.Error, 39, (9,1,9,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." + FSharpDiagnosticSeverity.Error, 39, (10,1,10,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." + FSharpDiagnosticSeverity.Error, 39, (11,1,11,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." + FSharpDiagnosticSeverity.Error, 39, (12,1,12,15), "The type '[,,]' does not define the field, constructor or member 'SetSlice'." |] [] @@ -118,18 +118,18 @@ arr4.[1, 1, 1, *] <- arr1 arr4.[*, 1, 1, 1] <- arr1 """ [| - FSharpErrorSeverity.Error, 39, (8,1,8,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpErrorSeverity.Error, 39, (9,1,9,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpErrorSeverity.Error, 39, (10,1,10,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpErrorSeverity.Error, 39, (11,1,11,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpErrorSeverity.Error, 39, (12,1,12,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpErrorSeverity.Error, 39, (13,1,13,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpErrorSeverity.Error, 39, (14,1,14,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpErrorSeverity.Error, 39, (15,1,15,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpErrorSeverity.Error, 39, (16,1,16,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpErrorSeverity.Error, 39, (17,1,17,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpErrorSeverity.Error, 39, (18,1,18,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpErrorSeverity.Error, 39, (19,1,19,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpErrorSeverity.Error, 39, (20,1,20,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." - FSharpErrorSeverity.Error, 39, (21,1,21,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpDiagnosticSeverity.Error, 39, (8,1,8,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpDiagnosticSeverity.Error, 39, (9,1,9,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpDiagnosticSeverity.Error, 39, (10,1,10,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpDiagnosticSeverity.Error, 39, (11,1,11,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpDiagnosticSeverity.Error, 39, (12,1,12,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpDiagnosticSeverity.Error, 39, (13,1,13,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpDiagnosticSeverity.Error, 39, (14,1,14,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpDiagnosticSeverity.Error, 39, (15,1,15,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpDiagnosticSeverity.Error, 39, (16,1,16,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpDiagnosticSeverity.Error, 39, (17,1,17,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpDiagnosticSeverity.Error, 39, (18,1,18,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpDiagnosticSeverity.Error, 39, (19,1,19,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpDiagnosticSeverity.Error, 39, (20,1,20,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." + FSharpDiagnosticSeverity.Error, 39, (21,1,21,18), "The type '[,,,]' does not define the field, constructor or member 'SetSlice'." |] diff --git a/tests/fsharp/Compiler/Language/HatDesugaringTests.fs b/tests/fsharp/Compiler/Language/HatDesugaringTests.fs index f692eaf87c2..71304dcf5fd 100644 --- a/tests/fsharp/Compiler/Language/HatDesugaringTests.fs +++ b/tests/fsharp/Compiler/Language/HatDesugaringTests.fs @@ -2,7 +2,7 @@ open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics [] module HatDesugaringTests = @@ -42,7 +42,7 @@ module X let x = @1 """ [| - FSharpErrorSeverity.Error, 10, (4,9,4,10), "Unexpected infix operator in binding" + FSharpDiagnosticSeverity.Error, 10, (4,9,4,10), "Unexpected infix operator in binding" |] [] @@ -57,9 +57,9 @@ let (~^) (x: int) (y:int) = x + y Console.WriteLine(^1) """ [| - FSharpErrorSeverity.Error, 1208, (5,6,5,8), "Invalid operator definition. Prefix operator definitions must use a valid prefix operator name."; - FSharpErrorSeverity.Error, 10, (7,20,7,21), "Unexpected integer literal in expression. Expected ')' or other token."; - FSharpErrorSeverity.Error, 583, (7,18,7,19), "Unmatched '('"; + FSharpDiagnosticSeverity.Error, 1208, (5,6,5,8), "Invalid operator definition. Prefix operator definitions must use a valid prefix operator name."; + FSharpDiagnosticSeverity.Error, 10, (7,20,7,21), "Unexpected integer literal in expression. Expected ')' or other token."; + FSharpDiagnosticSeverity.Error, 583, (7,18,7,19), "Unmatched '('"; |] [] @@ -73,7 +73,7 @@ let list = [1;2;3] Console.WriteLine(list.[@1..]) """ [| - FSharpErrorSeverity.Error, 1208, (6,25,6,26), "Invalid prefix operator" + FSharpDiagnosticSeverity.Error, 1208, (6,25,6,26), "Invalid prefix operator" |] [] @@ -87,7 +87,7 @@ let list = [1;2;3] Console.WriteLine(list.[..@1]) """ [| - FSharpErrorSeverity.Error, 1208, (6,25,6,28), "Invalid prefix operator" + FSharpDiagnosticSeverity.Error, 1208, (6,25,6,28), "Invalid prefix operator" |] [] @@ -101,8 +101,8 @@ let list = [1;2;3] Console.WriteLine(list.[@1..@1]) """ [| - FSharpErrorSeverity.Error, 1208, (6,25,6,26), "Invalid prefix operator"; - FSharpErrorSeverity.Error, 1208, (6,29,6,30), "Invalid prefix operator" + FSharpDiagnosticSeverity.Error, 1208, (6,25,6,26), "Invalid prefix operator"; + FSharpDiagnosticSeverity.Error, 1208, (6,29,6,30), "Invalid prefix operator" |] [] @@ -116,5 +116,5 @@ let list = [1;2;3] Console.WriteLine(list.[@11]) """ [| - FSharpErrorSeverity.Error, 1208, (6,25,6,26), "Invalid prefix operator" + FSharpDiagnosticSeverity.Error, 1208, (6,25,6,26), "Invalid prefix operator" |] diff --git a/tests/fsharp/Compiler/Language/InitOnlyPropertyConsumptionTests.fs b/tests/fsharp/Compiler/Language/InitOnlyPropertyConsumptionTests.fs new file mode 100644 index 00000000000..eca26290cec --- /dev/null +++ b/tests/fsharp/Compiler/Language/InitOnlyPropertyConsumptionTests.fs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.UnitTests + +open NUnit.Framework +open FSharp.Test.Utilities.Compiler +open FSharp.Test.Utilities +open FSharp.Test.Utilities.Utilities +open FSharp.Tests + +#if NETCOREAPP + +[] +module InitOnlyPropertyConsumptionTests = + + [] + let ``Should be able to set an init-only property from a C# record`` () = + let csharpSource = + """ +using System; + +namespace CSharpTest +{ + public record Test + { + public int X { get; init; } + } +} + """ + + let fsharpSource = + """ +open System +open System.Runtime.CompilerServices +open CSharpTest + +let test() = + Test(X = 123) + +[] +let main _ = + let x = test() + Console.Write(x.X) + 0 + """ + + let csCmpl = + CompilationUtil.CreateCSharpCompilation(csharpSource, CSharpLanguageVersion.CSharp9, TargetFramework.Current) + |> CompilationReference.Create + + let fsCmpl = + Compilation.Create(fsharpSource, Fs, Exe, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) + + CompilerAssert.ExecutionHasOutput(fsCmpl, "123") + +#endif + diff --git a/tests/fsharp/Compiler/Language/InterfaceTests.fs b/tests/fsharp/Compiler/Language/InterfaceTests.fs index 177e3337ca7..3a11860f362 100644 --- a/tests/fsharp/Compiler/Language/InterfaceTests.fs +++ b/tests/fsharp/Compiler/Language/InterfaceTests.fs @@ -2,14 +2,12 @@ namespace FSharp.Compiler.UnitTests -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics open NUnit.Framework open FSharp.Test open FSharp.Test.Utilities open FSharp.Test.Utilities.Utilities - - [] module InterfaceTests = @@ -203,7 +201,7 @@ assertion (fun (x:float) -> x * 3.0) (fun v -> |] ``Many Instantiations of the same interface`` [| - (FSharpErrorSeverity.Error, 3350, (24, 6, 24, 20), "Feature 'interfaces with multiple generic instantiation' is not available in F# 4.7. Please use language version 5.0 or greater.") + (FSharpDiagnosticSeverity.Error, 3350, (24, 6, 24, 20), "Feature 'interfaces with multiple generic instantiation' is not available in F# 4.7. Please use language version 5.0 or greater.") |] [] diff --git a/tests/fsharp/Compiler/Language/OpenTypeDeclarationTests.fs b/tests/fsharp/Compiler/Language/OpenTypeDeclarationTests.fs index 88dd2d0d834..616f4894220 100644 --- a/tests/fsharp/Compiler/Language/OpenTypeDeclarationTests.fs +++ b/tests/fsharp/Compiler/Language/OpenTypeDeclarationTests.fs @@ -2,7 +2,7 @@ namespace FSharp.Compiler.UnitTests -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics open NUnit.Framework open FSharp.Test.Utilities open FSharp.Test.Utilities.Utilities @@ -2248,7 +2248,7 @@ let main _ = Compilation.Create(fsharpSource, Fs, Exe, options = [|"--langversion:5.0"|], cmplRefs = [csCmpl]) CompilerAssert.CompileWithErrors(fsCmpl, [| - (FSharpErrorSeverity.Error, 39, (9, 5, 9, 6), "The value or constructor 'M' is not defined.") + (FSharpDiagnosticSeverity.Error, 39, (9, 5, 9, 6), "The value or constructor 'M' is not defined.") |]) #endif diff --git a/tests/fsharp/Compiler/Language/OptionalInteropTests.fs b/tests/fsharp/Compiler/Language/OptionalInteropTests.fs index eda7a75e31d..19d32334850 100644 --- a/tests/fsharp/Compiler/Language/OptionalInteropTests.fs +++ b/tests/fsharp/Compiler/Language/OptionalInteropTests.fs @@ -6,7 +6,8 @@ open System.Collections.Immutable open NUnit.Framework open FSharp.Test.Utilities open FSharp.Test.Utilities.Utilities -open FSharp.Compiler.SourceCodeServices +open FSharp.Test.Utilities.Compiler +open FSharp.Compiler.Diagnostics open Microsoft.CodeAnalysis [] diff --git a/tests/fsharp/Compiler/Language/SlicingQuotationTests.fs b/tests/fsharp/Compiler/Language/SlicingQuotationTests.fs index f34e0510712..a7d3a889d25 100644 --- a/tests/fsharp/Compiler/Language/SlicingQuotationTests.fs +++ b/tests/fsharp/Compiler/Language/SlicingQuotationTests.fs @@ -2,7 +2,7 @@ open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics [] module SlicingQuotationTests = diff --git a/tests/fsharp/Compiler/Language/SpanOptimizationTests.fs b/tests/fsharp/Compiler/Language/SpanOptimizationTests.fs index 3899a42f8b1..64ceb55ec20 100644 --- a/tests/fsharp/Compiler/Language/SpanOptimizationTests.fs +++ b/tests/fsharp/Compiler/Language/SpanOptimizationTests.fs @@ -27,45 +27,37 @@ let test () = (fun verifier -> verifier.VerifyIL [ - """.method public static void test() cil managed - { + """ +.method public static void test() cil managed +{ - .maxstack 5 - .locals init (valuetype [System.Runtime]System.Span`1 V_0, + .maxstack 4 + .locals init (valuetype [runtime]System.Span`1 V_0, int32 V_1, - int32 V_2, - object& V_3) - IL_0000: call valuetype [System.Runtime]System.Span`1 valuetype [System.Runtime]System.Span`1::get_Empty() + object& V_2) + IL_0000: call valuetype [runtime]System.Span`1 valuetype [runtime]System.Span`1::get_Empty() IL_0005: stloc.0 IL_0006: ldc.i4.0 - IL_0007: stloc.2 - IL_0008: ldloca.s V_0 - IL_000a: call instance int32 valuetype [System.Runtime]System.Span`1::get_Length() - IL_000f: ldc.i4.1 - IL_0010: sub - IL_0011: stloc.1 - IL_0012: ldloc.1 + IL_0007: stloc.1 + IL_0008: br.s IL_0022 + + IL_000a: ldloca.s V_0 + IL_000c: ldloc.1 + IL_000d: call instance !0& valuetype [runtime]System.Span`1::get_Item(int32) + IL_0012: stloc.2 IL_0013: ldloc.2 - IL_0014: blt.s IL_0034 - - IL_0016: ldloca.s V_0 - IL_0018: ldloc.2 - IL_0019: call instance !0& valuetype [System.Runtime]System.Span`1::get_Item(int32) - IL_001e: stloc.3 - IL_001f: ldloc.3 - IL_0020: ldobj [System.Runtime]System.Object - IL_0025: call void [System.Console]System.Console::WriteLine(object) - IL_002a: ldloc.2 - IL_002b: ldc.i4.1 - IL_002c: add - IL_002d: stloc.2 - IL_002e: ldloc.2 - IL_002f: ldloc.1 - IL_0030: ldc.i4.1 - IL_0031: add - IL_0032: bne.un.s IL_0016 - - IL_0034: ret + IL_0014: ldobj [runtime]System.Object + IL_0019: call void [System.Console]System.Console::WriteLine(object) + IL_001e: ldloc.1 + IL_001f: ldc.i4.1 + IL_0020: add + IL_0021: stloc.1 + IL_0022: ldloc.1 + IL_0023: ldloca.s V_0 + IL_0025: call instance int32 valuetype [runtime]System.Span`1::get_Length() + IL_002a: blt.s IL_000a + + IL_002c: ret }""" ]) @@ -90,42 +82,33 @@ let test () = """.method public static void test() cil managed { - .maxstack 5 - .locals init (valuetype [System.Runtime]System.ReadOnlySpan`1 V_0, - int32 V_1, - int32 V_2, - object& V_3) - IL_0000: call valuetype [System.Runtime]System.ReadOnlySpan`1 valuetype [System.Runtime]System.ReadOnlySpan`1::get_Empty() + .maxstack 4 + .locals init (valuetype [runtime]System.ReadOnlySpan`1 V_0, + int32 V_1, + object& V_2) + IL_0000: call valuetype [runtime]System.ReadOnlySpan`1 valuetype [runtime]System.ReadOnlySpan`1::get_Empty() IL_0005: stloc.0 IL_0006: ldc.i4.0 - IL_0007: stloc.2 - IL_0008: ldloca.s V_0 - IL_000a: call instance int32 valuetype [System.Runtime]System.ReadOnlySpan`1::get_Length() - IL_000f: ldc.i4.1 - IL_0010: sub - IL_0011: stloc.1 - IL_0012: ldloc.1 + IL_0007: stloc.1 + IL_0008: br.s IL_0022 + + IL_000a: ldloca.s V_0 + IL_000c: ldloc.1 + IL_000d: call instance !0& modreq([runtime]System.Runtime.InteropServices.InAttribute) valuetype [runtime]System.ReadOnlySpan`1::get_Item(int32) + IL_0012: stloc.2 IL_0013: ldloc.2 - IL_0014: blt.s IL_0034 - - IL_0016: ldloca.s V_0 - IL_0018: ldloc.2 - IL_0019: call instance !0& modreq([System.Runtime]System.Runtime.InteropServices.InAttribute) valuetype [System.Runtime]System.ReadOnlySpan`1::get_Item(int32) - IL_001e: stloc.3 - IL_001f: ldloc.3 - IL_0020: ldobj [System.Runtime]System.Object - IL_0025: call void [System.Console]System.Console::WriteLine(object) - IL_002a: ldloc.2 - IL_002b: ldc.i4.1 - IL_002c: add - IL_002d: stloc.2 - IL_002e: ldloc.2 - IL_002f: ldloc.1 - IL_0030: ldc.i4.1 - IL_0031: add - IL_0032: bne.un.s IL_0016 - - IL_0034: ret + IL_0014: ldobj [runtime]System.Object + IL_0019: call void [System.Console]System.Console::WriteLine(object) + IL_001e: ldloc.1 + IL_001f: ldc.i4.1 + IL_0020: add + IL_0021: stloc.1 + IL_0022: ldloc.1 + IL_0023: ldloca.s V_0 + IL_0025: call instance int32 valuetype [runtime]System.ReadOnlySpan`1::get_Length() + IL_002a: blt.s IL_000a + + IL_002c: ret }""" ]) @@ -150,17 +133,17 @@ open System.Runtime.CompilerServices [] type Span<'T>(arr: 'T []) = - member __.Item + member _.Item with get (i: int) = &arr.[i] - member __.Length + member _.Length with get () = 0 static member Empty = Span<'T>([||]) interface IEnumerable with - member __.GetEnumerator() = null + member _.GetEnumerator() = null module Test = @@ -183,51 +166,152 @@ module Test = class [System.Runtime]System.Collections.IEnumerator V_1, class [FSharp.Core]Microsoft.FSharp.Core.Unit V_2, class [System.Runtime]System.IDisposable V_3) - IL_0000: ldc.i4.0 - IL_0001: newarr [System.Runtime]System.Object - IL_0006: newobj instance void valuetype System.Span`1::.ctor(!0[]) - IL_000b: stloc.0 - IL_000c: ldloc.0 - IL_000d: box valuetype System.Span`1 - IL_0012: unbox.any [System.Runtime]System.Collections.IEnumerable - IL_0017: callvirt instance class [System.Runtime]System.Collections.IEnumerator [System.Runtime]System.Collections.IEnumerable::GetEnumerator() - IL_001c: stloc.1 + IL_0000: call !!0[] [runtime]System.Array::Empty() + IL_0005: newobj instance void valuetype System.Span`1::.ctor(!0[]) + IL_000a: stloc.0 + IL_000b: ldloc.0 + IL_000c: box valuetype System.Span`1 + IL_0011: unbox.any [System.Runtime]System.Collections.IEnumerable + IL_0016: callvirt instance class [System.Runtime]System.Collections.IEnumerator [System.Runtime]System.Collections.IEnumerable::GetEnumerator() + IL_001b: stloc.1 .try { - IL_001d: ldloc.1 - IL_001e: callvirt instance bool [System.Runtime]System.Collections.IEnumerator::MoveNext() - IL_0023: brfalse.s IL_0032 + IL_001c: ldloc.1 + IL_001d: callvirt instance bool [System.Runtime]System.Collections.IEnumerator::MoveNext() + IL_0022: brfalse.s IL_0031 - IL_0025: ldloc.1 - IL_0026: callvirt instance object [System.Runtime]System.Collections.IEnumerator::get_Current() - IL_002b: call void [System.Console]System.Console::WriteLine(object) - IL_0030: br.s IL_001d + IL_0024: ldloc.1 + IL_0025: callvirt instance object [System.Runtime]System.Collections.IEnumerator::get_Current() + IL_002a: call void [System.Console]System.Console::WriteLine(object) + IL_002f: br.s IL_001c - IL_0032: ldnull - IL_0033: stloc.2 - IL_0034: leave.s IL_004c + IL_0031: ldnull + IL_0032: stloc.2 + IL_0033: leave.s IL_004b } finally { - IL_0036: ldloc.1 - IL_0037: isinst [System.Runtime]System.IDisposable - IL_003c: stloc.3 - IL_003d: ldloc.3 - IL_003e: brfalse.s IL_0049 - - IL_0040: ldloc.3 - IL_0041: callvirt instance void [System.Runtime]System.IDisposable::Dispose() - IL_0046: ldnull - IL_0047: pop - IL_0048: endfinally - IL_0049: ldnull - IL_004a: pop - IL_004b: endfinally + IL_0035: ldloc.1 + IL_0036: isinst [System.Runtime]System.IDisposable + IL_003b: stloc.3 + IL_003c: ldloc.3 + IL_003d: brfalse.s IL_0048 + + IL_003f: ldloc.3 + IL_0040: callvirt instance void [System.Runtime]System.IDisposable::Dispose() + IL_0045: ldnull + IL_0046: pop + IL_0047: endfinally + IL_0048: ldnull + IL_0049: pop + IL_004a: endfinally } - IL_004c: ldloc.2 - IL_004d: pop - IL_004e: ret + IL_004b: ldloc.2 + IL_004c: pop + IL_004d: ret + }""" + ]) + + [] + let SpanForInBoundsDo() = + let source = + """ +module Test + +open System + +let test () = +let span = Span.Empty +for i in 0 .. span.Length-1 do + Console.WriteLine(span.[i]) + """ + + CompilerAssert.CompileLibraryAndVerifyIL source + (fun verifier -> + verifier.VerifyIL + [ + """.method public static void test() cil managed + { + + .maxstack 4 + .locals init (valuetype [runtime]System.Span`1 V_0, + int32 V_1, + object& V_2) + IL_0000: call valuetype [runtime]System.Span`1 valuetype [runtime]System.Span`1::get_Empty() + IL_0005: stloc.0 + IL_0006: ldc.i4.0 + IL_0007: stloc.1 + IL_0008: br.s IL_0022 + + IL_000a: ldloca.s V_0 + IL_000c: ldloc.1 + IL_000d: call instance !0& valuetype [runtime]System.Span`1::get_Item(int32) + IL_0012: stloc.2 + IL_0013: ldloc.2 + IL_0014: ldobj [runtime]System.Object + IL_0019: call void [System.Console]System.Console::WriteLine(object) + IL_001e: ldloc.1 + IL_001f: ldc.i4.1 + IL_0020: add + IL_0021: stloc.1 + IL_0022: ldloc.1 + IL_0023: ldloca.s V_0 + IL_0025: call instance int32 valuetype [runtime]System.Span`1::get_Length() + IL_002a: blt.s IL_000a + + IL_002c: ret + }""" + ]) + [] + let ReadOnlySpanForInBoundsDo() = + let source = + """ +module Test + +open System + +let test () = +let span = ReadOnlySpan.Empty +for i in 0 .. span.Length-1 do +Console.WriteLine(span.[i]) + """ + + CompilerAssert.CompileLibraryAndVerifyIL source + (fun verifier -> + verifier.VerifyIL + [ + """.method public static void test() cil managed + { + + .maxstack 4 + .locals init (valuetype [runtime]System.ReadOnlySpan`1 V_0, + int32 V_1, + object& V_2) + IL_0000: call valuetype [runtime]System.ReadOnlySpan`1 valuetype [runtime]System.ReadOnlySpan`1::get_Empty() + IL_0005: stloc.0 + IL_0006: ldc.i4.0 + IL_0007: stloc.1 + IL_0008: br.s IL_0022 + + IL_000a: ldloca.s V_0 + IL_000c: ldloc.1 + IL_000d: call instance !0& modreq([runtime]System.Runtime.InteropServices.InAttribute) valuetype [runtime]System.ReadOnlySpan`1::get_Item(int32) + IL_0012: stloc.2 + IL_0013: ldloc.2 + IL_0014: ldobj [runtime]System.Object + IL_0019: call void [System.Console]System.Console::WriteLine(object) + IL_001e: ldloc.1 + IL_001f: ldc.i4.1 + IL_0020: add + IL_0021: stloc.1 + IL_0022: ldloc.1 + IL_0023: ldloca.s V_0 + IL_0025: call instance int32 valuetype [runtime]System.ReadOnlySpan`1::get_Length() + IL_002a: blt.s IL_000a + + IL_002c: ret }""" ]) + #endif diff --git a/tests/fsharp/Compiler/Language/SpanTests.fs b/tests/fsharp/Compiler/Language/SpanTests.fs index 2eb6b44916b..f24036c8664 100644 --- a/tests/fsharp/Compiler/Language/SpanTests.fs +++ b/tests/fsharp/Compiler/Language/SpanTests.fs @@ -3,7 +3,7 @@ namespace FSharp.Compiler.UnitTests open System -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics open NUnit.Framework open FSharp.Test.Utilities @@ -26,6 +26,45 @@ let test () : unit = if result.[0] <> 1 || result.[1] <> 2 || result.[2] <> 3 || result.[3] <> 4 then failwith "SpanForInDo didn't work properly" +test () + """ + + CompilerAssert.RunScript script [] + [] + let Script_SpanForInBoundsDo() = + let script = + """ +open System + +let test () : unit = + let span = Span([|1;2;3;4|]) + let result = ResizeArray() + for i in 0 .. span.Length-1 do + result.Add(span.[i]) + + if result.[0] <> 1 || result.[1] <> 2 || result.[2] <> 3 || result.[3] <> 4 then + failwith "SpanForInBoundsDo didn't work properly" + +test () + """ + + CompilerAssert.RunScript script [] + + [] + let Script_EmptySpanForInBoundsDo() = + let script = + """ +open System + +let test () : unit = + let span = Span([||]) + let result = ResizeArray() + for i in 0 .. span.Length-1 do + result.Add(span.[i]) + + if result.Count <> 0 then + failwith "EmptySpanForInBoundsDo didn't work properly" + test () """ @@ -53,6 +92,28 @@ test () // See: https://github.com/dotnet/corefx/issues/29254 CompilerAssert.RunScript script [ "Method not found: '!0 ByRef System.ReadOnlySpan`1.get_Item(Int32)'." ] + [] + let Script_ReadOnlySpanForInBoundsDo() = + let script = + """ +open System + +let test () : unit = + let span = ReadOnlySpan([|1;2;3;4|]) + let result = ResizeArray() + for i in 0 .. span.Length-1 do + result.Add(span.[i]) + + if result.[0] <> 1 || result.[1] <> 2 || result.[2] <> 3 || result.[3] <> 4 then + failwith "Script_ReadOnlySpanForInBoundsDo didn't work properly" + +test () + """ + + // We expect this error until System.Reflection.Emit gets fixed for emitting `modreq` on method calls. + // See: https://github.com/dotnet/corefx/issues/29254 + CompilerAssert.RunScript script [ "Method not found: '!0 ByRef System.ReadOnlySpan`1.get_Item(Int32)'." ] + [] let ``Invalid usage of type abbreviated span should fail to compile``() = @@ -86,9 +147,9 @@ let test () = 0 """ [| - FSharpErrorSeverity.Error, 412, (11, 17, 11, 28), "A type instantiation involves a byref type. This is not permitted by the rules of Common IL." - FSharpErrorSeverity.Error, 412, (19, 17, 19, 29), "A type instantiation involves a byref type. This is not permitted by the rules of Common IL." - FSharpErrorSeverity.Error, 412, (19, 27, 19, 29), "A type instantiation involves a byref type. This is not permitted by the rules of Common IL." + FSharpDiagnosticSeverity.Error, 412, (11, 17, 11, 28), "A type instantiation involves a byref type. This is not permitted by the rules of Common IL." + FSharpDiagnosticSeverity.Error, 412, (19, 17, 19, 29), "A type instantiation involves a byref type. This is not permitted by the rules of Common IL." + FSharpDiagnosticSeverity.Error, 412, (19, 27, 19, 29), "A type instantiation involves a byref type. This is not permitted by the rules of Common IL." |] [] @@ -101,6 +162,6 @@ type TA = Span * Span let f (x: TA) = () """ [| - FSharpErrorSeverity.Error, 3300, (6, 8, 6, 9), "The parameter 'x' has an invalid type 'TA'. This is not permitted by the rules of Common IL." + FSharpDiagnosticSeverity.Error, 3300, (6, 8, 6, 9), "The parameter 'x' has an invalid type 'TA'. This is not permitted by the rules of Common IL." |] #endif diff --git a/tests/fsharp/Compiler/Language/StringInterpolation.fs b/tests/fsharp/Compiler/Language/StringInterpolation.fs index dd1890fcc4f..6d41510b038 100644 --- a/tests/fsharp/Compiler/Language/StringInterpolation.fs +++ b/tests/fsharp/Compiler/Language/StringInterpolation.fs @@ -3,7 +3,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics open FSharp.Test.Utilities [] @@ -325,16 +325,16 @@ check "fwejwflpej2" (fmt $"abc") "abc" check "fwejwflpej3" (fmt $"abc{1}") "abc1" check "fwejwflpej6" (fmt_us $"abc {30000} def") "abc 30000 def" check "fwejwflpej7" (fmt_de $"abc {30000} def") "abc 30000 def" -check "fwejwflpej8" (fmt_us $"abc {30000:N} def") "abc 30,000.00 def" -check "fwejwflpej9" (fmt_de $"abc {30000:N} def") "abc 30.000,00 def" +check "fwejwflpej8" (fmt_us $"abc {30000:N2} def") "abc 30,000.00 def" +check "fwejwflpej9" (fmt_de $"abc {30000:N2} def") "abc 30.000,00 def" check "fwejwflpej10" (fmt_us $"abc {30000} def {40000} hij") "abc 30000 def 40000 hij" check "fwejwflpej11" (fmt_us $"abc {30000,-10} def {40000} hij") "abc 30000 def 40000 hij" check "fwejwflpej12" (fmt_us $"abc {30000,10} def {40000} hij") "abc 30000 def 40000 hij" check "fwejwflpej13" (fmt_de $"abc {30000} def {40000} hij") "abc 30000 def 40000 hij" -check "fwejwflpej14" (fmt_us $"abc {30000:N} def {40000:N} hij") "abc 30,000.00 def 40,000.00 hij" -check "fwejwflpej15" (fmt_de $"abc {30000:N} def {40000:N} hij") "abc 30.000,00 def 40.000,00 hij" -check "fwejwflpej16" (fmt_de $"abc {30000,10:N} def {40000:N} hij") "abc 30.000,00 def 40.000,00 hij" -check "fwejwflpej17" (fmt_de $"abc {30000,-10:N} def {40000:N} hij") "abc 30.000,00 def 40.000,00 hij" +check "fwejwflpej14" (fmt_us $"abc {30000:N2} def {40000:N2} hij") "abc 30,000.00 def 40,000.00 hij" +check "fwejwflpej15" (fmt_de $"abc {30000:N2} def {40000:N2} hij") "abc 30.000,00 def 40.000,00 hij" +check "fwejwflpej16" (fmt_de $"abc {30000,10:N2} def {40000:N2} hij") "abc 30.000,00 def 40.000,00 hij" +check "fwejwflpej17" (fmt_de $"abc {30000,-10:N2} def {40000:N2} hij") "abc 30.000,00 def 40.000,00 hij" """ @@ -354,16 +354,16 @@ check "fwejwflpej2" (fmt $"abc") "abc" check "fwejwflpej3" (fmt $"abc{1}") "abc1" check "fwejwflpej6" (fmt_us $"abc {30000} def") "abc 30000 def" check "fwejwflpej7" (fmt_de $"abc {30000} def") "abc 30000 def" -check "fwejwflpej8" (fmt_us $"abc {30000:N} def") "abc 30,000.00 def" -check "fwejwflpej9" (fmt_de $"abc {30000:N} def") "abc 30.000,00 def" +check "fwejwflpej8" (fmt_us $"abc {30000:N2} def") "abc 30,000.00 def" +check "fwejwflpej9" (fmt_de $"abc {30000:N2} def") "abc 30.000,00 def" check "fwejwflpej10" (fmt_us $"abc {30000} def {40000} hij") "abc 30000 def 40000 hij" check "fwejwflpej11" (fmt_us $"abc {30000,-10} def {40000} hij") "abc 30000 def 40000 hij" check "fwejwflpej12" (fmt_us $"abc {30000,10} def {40000} hij") "abc 30000 def 40000 hij" check "fwejwflpej13" (fmt_de $"abc {30000} def {40000} hij") "abc 30000 def 40000 hij" -check "fwejwflpej14" (fmt_us $"abc {30000:N} def {40000:N} hij") "abc 30,000.00 def 40,000.00 hij" -check "fwejwflpej15" (fmt_de $"abc {30000:N} def {40000:N} hij") "abc 30.000,00 def 40.000,00 hij" -check "fwejwflpej16" (fmt_de $"abc {30000,10:N} def {40000:N} hij") "abc 30.000,00 def 40.000,00 hij" -check "fwejwflpej17" (fmt_de $"abc {30000,-10:N} def {40000:N} hij") "abc 30.000,00 def 40.000,00 hij" +check "fwejwflpej14" (fmt_us $"abc {30000:N2} def {40000:N2} hij") "abc 30,000.00 def 40,000.00 hij" +check "fwejwflpej15" (fmt_de $"abc {30000:N2} def {40000:N2} hij") "abc 30.000,00 def 40.000,00 hij" +check "fwejwflpej16" (fmt_de $"abc {30000,10:N2} def {40000:N2} hij") "abc 30.000,00 def 40.000,00 hij" +check "fwejwflpej17" (fmt_de $"abc {30000,-10:N2} def {40000:N2} hij") "abc 30.000,00 def 40.000,00 hij" """ @@ -536,7 +536,19 @@ check "vcewweh22g" $"x = %A{s}" "x = \"sixsix\"" check "vcewweh20" $"x = %A{1}" "x = 1" """ - + [] + let ``%B fails for langVersion 5.0`` () = + CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] + """printf "%B" 10""" + [|(FSharpDiagnosticSeverity.Error, 3350, (1, 8, 1, 12), + "Feature 'binary formatting for integers' is not available in F# 5.0. Please use language version 'preview' or greater.")|] + [] + let ``%B succeeds for langVersion preview`` () = + CompilerAssert.CompileExeAndRunWithOptions [| "--langversion:preview" |] """ +let check msg a b = + if a = b then printfn "test case '%s' succeeded" msg else failwithf "test case '%s' failed, expected %A, got %A" msg b a +check "vcewweh22a" $"x = %B{19}" "x = 10011" + """ [] let ``String interpolation using list and array data`` () = @@ -615,7 +627,7 @@ check "vcewweh23" $"abc{({| A=1 |})}def" "abc{ A = 1 }def" """ let x = $"one" """ - [|(FSharpErrorSeverity.Error, 3350, (2, 9, 2, 15), + [|(FSharpDiagnosticSeverity.Error, 3350, (2, 9, 2, 15), "Feature 'string interpolation' is not available in F# 4.7. Please use language version 5.0 or greater.")|] @@ -637,32 +649,32 @@ let xe = $"%A{{1}}" // fake expression (delimiters escaped) """ CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpErrorSeverity.Error, 1, (2, 19, 2, 38), + [|(FSharpDiagnosticSeverity.Error, 1, (2, 19, 2, 38), "The type 'string' is not compatible with any of the types byte,int16,int32,int64,sbyte,uint16,uint32,uint64,nativeint,unativeint, arising from the use of a printf-style format string"); - (FSharpErrorSeverity.Error, 1, (3, 19, 3, 20), + (FSharpDiagnosticSeverity.Error, 1, (3, 19, 3, 20), """This expression was expected to have type 'string' but here has type 'int' """); - (FSharpErrorSeverity.Error, 3376, (4, 10, 4, 19), + (FSharpDiagnosticSeverity.Error, 3376, (4, 10, 4, 19), "Invalid interpolated string. Interpolated strings may not use '%' format specifiers unless each is given an expression, e.g. '%d{1+1}'."); - (FSharpErrorSeverity.Error, 3376, (5, 10, 5, 19), + (FSharpDiagnosticSeverity.Error, 3376, (5, 10, 5, 19), "Invalid interpolated string. Interpolated strings may not use '%' format specifiers unless each is given an expression, e.g. '%d{1+1}'."); - (FSharpErrorSeverity.Error, 3376, (6, 10, 6, 19), + (FSharpDiagnosticSeverity.Error, 3376, (6, 10, 6, 19), "Invalid interpolated string. Interpolated strings may not use '%' format specifiers unless each is given an expression, e.g. '%d{1+1}'."); - (FSharpErrorSeverity.Error, 3376, (7, 10, 7, 19), + (FSharpDiagnosticSeverity.Error, 3376, (7, 10, 7, 19), "Invalid interpolated string. The '%P' specifier may not be used explicitly."); - (FSharpErrorSeverity.Error, 3371, (8, 10, 8, 21), + (FSharpDiagnosticSeverity.Error, 3371, (8, 10, 8, 21), "Mismatch in interpolated string. Interpolated strings may not use '%' format specifiers unless each is given an expression, e.g. '%d{1+1}'"); - (FSharpErrorSeverity.Error, 3371, (9, 10, 9, 24), + (FSharpDiagnosticSeverity.Error, 3371, (9, 10, 9, 24), "Mismatch in interpolated string. Interpolated strings may not use '%' format specifiers unless each is given an expression, e.g. '%d{1+1}'"); - (FSharpErrorSeverity.Error, 3376, (10, 10, 10, 19), + (FSharpDiagnosticSeverity.Error, 3376, (10, 10, 10, 19), "Invalid interpolated string. Interpolated strings may not use '%' format specifiers unless each is given an expression, e.g. '%d{1+1}'."); - (FSharpErrorSeverity.Error, 3376, (11, 10, 11, 24), + (FSharpDiagnosticSeverity.Error, 3376, (11, 10, 11, 24), "Invalid interpolated string. .NET-style format specifiers such as '{x,3}' or '{x:N5}' may not be mixed with '%' format specifiers.") - (FSharpErrorSeverity.Error, 3376, (12, 10, 12, 16), + (FSharpDiagnosticSeverity.Error, 3376, (12, 10, 12, 16), "Invalid interpolated string. Bad precision in format specifier") - (FSharpErrorSeverity.Error, 3376, (13, 10, 13, 20), + (FSharpDiagnosticSeverity.Error, 3376, (13, 10, 13, 20), "Invalid interpolated string. Interpolated strings may not use '%' format specifiers unless each is given an expression, e.g. '%d{1+1}'.") |] @@ -671,11 +683,11 @@ let xb = $"{%5d{1:N3}}" // inner error that looks like format specifiers """ CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpErrorSeverity.Error, 1156, (2, 14, 2, 16), + [|(FSharpDiagnosticSeverity.Error, 1156, (2, 14, 2, 16), "This is not a valid numeric literal. Valid numeric literals include 1, 0x1, 0o1, 0b1, 1l (int), 1u (uint32), 1L (int64), 1UL (uint64), 1s (int16), 1y (sbyte), 1uy (byte), 1.0 (float), 1.0f (float32), 1.0m (decimal), 1I (BigInteger)."); - (FSharpErrorSeverity.Error, 10, (2, 18, 2, 19), + (FSharpDiagnosticSeverity.Error, 10, (2, 18, 2, 19), "Unexpected symbol ':' in expression. Expected '}' or other token."); - (FSharpErrorSeverity.Error, 604, (2, 16, 2, 17), "Unmatched '{'") + (FSharpDiagnosticSeverity.Error, 604, (2, 16, 2, 17), "Unmatched '{'") |] let code = """ @@ -683,7 +695,7 @@ let xd = $"%A{}" // empty expression """ CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpErrorSeverity.Error, 3382, (2, 15, 2, 15), + [|(FSharpDiagnosticSeverity.Error, 3382, (2, 15, 2, 15), "Invalid interpolated string. This interpolated string expression fill is empty, an expression was expected.") |] @@ -692,7 +704,7 @@ let xd = $"%A{ }" // empty expression """ CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpErrorSeverity.Error, 3382, (2, 15, 2, 17), + [|(FSharpDiagnosticSeverity.Error, 3382, (2, 15, 2, 17), "Invalid interpolated string. This interpolated string expression fill is empty, an expression was expected.") |] @@ -707,11 +719,11 @@ let x3 : FormattableString = $"one %10s{String.Empty}" // no %10s in Formattable """ CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpErrorSeverity.Error, 3376, (4, 30, 4, 44), + [|(FSharpDiagnosticSeverity.Error, 3376, (4, 30, 4, 44), "Invalid interpolated string. Interpolated strings used as type IFormattable or type FormattableString may not use '%' specifiers, only .NET-style interpolands such as '{expr}', '{expr,3}' or '{expr:N5}' may be used."); - (FSharpErrorSeverity.Error, 3376, (5, 30, 5, 53), + (FSharpDiagnosticSeverity.Error, 3376, (5, 30, 5, 53), "Invalid interpolated string. Interpolated strings used as type IFormattable or type FormattableString may not use '%' specifiers, only .NET-style interpolands such as '{expr}', '{expr,3}' or '{expr:N5}' may be used."); - (FSharpErrorSeverity.Error, 3376, (6, 30, 6, 55), + (FSharpDiagnosticSeverity.Error, 3376, (6, 30, 6, 55), "Invalid interpolated string. Interpolated strings used as type IFormattable or type FormattableString may not use '%' specifiers, only .NET-style interpolands such as '{expr}', '{expr,3}' or '{expr:N5}' may be used.")|] @@ -732,23 +744,23 @@ let s9 = @$"123{456}789{$@"012"}345" """ CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpErrorSeverity.Error, 3373, (4, 24, 4, 25), + [|(FSharpDiagnosticSeverity.Error, 3373, (4, 24, 4, 25), "Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal."); - (FSharpErrorSeverity.Error, 3373, (5, 24, 5, 26), + (FSharpDiagnosticSeverity.Error, 3373, (5, 24, 5, 26), "Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal."); - (FSharpErrorSeverity.Error, 3373, (6, 24, 6, 26), + (FSharpDiagnosticSeverity.Error, 3373, (6, 24, 6, 26), "Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal."); - (FSharpErrorSeverity.Error, 3373, (7, 25, 7, 26), + (FSharpDiagnosticSeverity.Error, 3373, (7, 25, 7, 26), "Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal."); - (FSharpErrorSeverity.Error, 3373, (8, 25, 8, 26), + (FSharpDiagnosticSeverity.Error, 3373, (8, 25, 8, 26), "Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal."); - (FSharpErrorSeverity.Error, 3373, (9, 25, 9, 27), + (FSharpDiagnosticSeverity.Error, 3373, (9, 25, 9, 27), "Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal."); - (FSharpErrorSeverity.Error, 3373, (10, 25, 10, 27), + (FSharpDiagnosticSeverity.Error, 3373, (10, 25, 10, 27), "Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal."); - (FSharpErrorSeverity.Error, 3373, (11, 25, 11, 28), + (FSharpDiagnosticSeverity.Error, 3373, (11, 25, 11, 28), "Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal."); - (FSharpErrorSeverity.Error, 3373, (12, 25, 12, 28), + (FSharpDiagnosticSeverity.Error, 3373, (12, 25, 12, 28), "Invalid interpolated string. Single quote or verbatim string literals may not be used in interpolated expressions in single quote or verbatim strings. Consider using an explicit 'let' binding for the interpolation expression or use a triple quote string as the outer string literal.")|] [] @@ -765,17 +777,17 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3 " CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpErrorSeverity.Error, 3374, (4, 52, 4, 55), + [|(FSharpDiagnosticSeverity.Error, 3374, (4, 52, 4, 55), "Invalid interpolated string. Triple quote string literals may not be used in interpolated expressions. Consider using an explicit 'let' binding for the interpolation expression."); - (FSharpErrorSeverity.Error, 3374, (5, 50, 5, 53), + (FSharpDiagnosticSeverity.Error, 3374, (5, 50, 5, 53), "Invalid interpolated string. Triple quote string literals may not be used in interpolated expressions. Consider using an explicit 'let' binding for the interpolation expression."); - (FSharpErrorSeverity.Error, 3374, (6, 50, 6, 53), + (FSharpDiagnosticSeverity.Error, 3374, (6, 50, 6, 53), "Invalid interpolated string. Triple quote string literals may not be used in interpolated expressions. Consider using an explicit 'let' binding for the interpolation expression."); - (FSharpErrorSeverity.Error, 3374, (7, 64, 7, 68), + (FSharpDiagnosticSeverity.Error, 3374, (7, 64, 7, 68), "Invalid interpolated string. Triple quote string literals may not be used in interpolated expressions. Consider using an explicit 'let' binding for the interpolation expression."); - (FSharpErrorSeverity.Error, 3374, (8, 62, 8, 66), + (FSharpDiagnosticSeverity.Error, 3374, (8, 62, 8, 66), "Invalid interpolated string. Triple quote string literals may not be used in interpolated expressions. Consider using an explicit 'let' binding for the interpolation expression."); - (FSharpErrorSeverity.Error, 3374, (9, 62, 9, 66), + (FSharpDiagnosticSeverity.Error, 3374, (9, 62, 9, 66), "Invalid interpolated string. Triple quote string literals may not be used in interpolated expressions. Consider using an explicit 'let' binding for the interpolation expression.")|] [] @@ -783,9 +795,9 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3 let code = """let x1 = $"one %d{System.String.Empty}""" CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpErrorSeverity.Error, 10, (1, 1, 1, 39), + [|(FSharpDiagnosticSeverity.Error, 10, (1, 1, 1, 39), "Incomplete structured construct at or before this point in binding. Expected interpolated string (final part), interpolated string (part) or other token."); - (FSharpErrorSeverity.Error, 3379, (1, 38, 1, 39), + (FSharpDiagnosticSeverity.Error, 3379, (1, 38, 1, 39), "Incomplete interpolated string begun at or before here")|] [] @@ -793,9 +805,9 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3 let code = """let x1 = $"one %d{System.String.Empty""" CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpErrorSeverity.Error, 10, (1, 1, 1, 38), + [|(FSharpDiagnosticSeverity.Error, 10, (1, 1, 1, 38), "Incomplete structured construct at or before this point in binding. Expected interpolated string (final part), interpolated string (part) or other token."); - (FSharpErrorSeverity.Error, 3378, (1, 18, 1, 19), + (FSharpDiagnosticSeverity.Error, 3378, (1, 18, 1, 19), "Incomplete interpolated string expression fill begun at or before here")|] [] @@ -803,9 +815,9 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3 let code = """let x1 = @$"one %d{System.String.Empty} """ CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpErrorSeverity.Error, 10, (1, 1, 1, 41), + [|(FSharpDiagnosticSeverity.Error, 10, (1, 1, 1, 41), "Incomplete structured construct at or before this point in binding. Expected interpolated string (final part), interpolated string (part) or other token."); - (FSharpErrorSeverity.Error, 3380, (1, 39, 1, 40), + (FSharpDiagnosticSeverity.Error, 3380, (1, 39, 1, 40), "Incomplete interpolated verbatim string begun at or before here")|] [] @@ -813,13 +825,13 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3 let code = "let x1 = $\"\"\"one" CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpErrorSeverity.Warning, 58, (1, 1, 1, 17), + [|(FSharpDiagnosticSeverity.Warning, 58, (1, 1, 1, 17), "Possible incorrect indentation: this token is offside of context started at position (1:1). Try indenting this token further or using standard formatting conventions."); - (FSharpErrorSeverity.Warning, 58, (1, 17, 1, 17), + (FSharpDiagnosticSeverity.Warning, 58, (1, 17, 1, 17), "Possible incorrect indentation: this token is offside of context started at position (1:1). Try indenting this token further or using standard formatting conventions."); - (FSharpErrorSeverity.Error, 10, (1, 1, 1, 17), + (FSharpDiagnosticSeverity.Error, 10, (1, 1, 1, 17), "Incomplete structured construct at or before this point in binding"); - (FSharpErrorSeverity.Error, 3381, (1, 10, 1, 14), + (FSharpDiagnosticSeverity.Error, 3381, (1, 10, 1, 14), "Incomplete interpolated triple-quote string begun at or before here")|] [] @@ -827,7 +839,7 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3 let code = "let x1 = $\"}\"" CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpErrorSeverity.Error, 3383, (1, 10, 1, 14), + [|(FSharpDiagnosticSeverity.Error, 3383, (1, 10, 1, 14), "A '}' character must be escaped (by doubling) in an interpolated string.")|] [] @@ -835,7 +847,7 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3 let code = "let x1 = @$\"}\"" CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpErrorSeverity.Error, 3383, (1, 10, 1, 15), + [|(FSharpDiagnosticSeverity.Error, 3383, (1, 10, 1, 15), "A '}' character must be escaped (by doubling) in an interpolated string.")|] [] @@ -843,7 +855,7 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3 let code = "let x1 = $\"\"\"}\"\"\"" CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpErrorSeverity.Error, 3383, (1, 10, 1, 18), + [|(FSharpDiagnosticSeverity.Error, 3383, (1, 10, 1, 18), "A '}' character must be escaped (by doubling) in an interpolated string.")|] [] @@ -851,7 +863,7 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3 let code = "let x1 = $\"{0}}\"" CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:5.0" |] code - [|(FSharpErrorSeverity.Error, 3383, (1, 14, 1, 17), + [|(FSharpDiagnosticSeverity.Error, 3383, (1, 14, 1, 17), "A '}' character must be escaped (by doubling) in an interpolated string.")|] [] @@ -859,5 +871,5 @@ let TripleInterpolatedInVerbatimInterpolated = $\"123{456}789{$\"\"\"012\"\"\"}3 let code = "let x1 = \"hello \\\n world\", foo" CompilerAssert.TypeCheckWithErrorsAndOptions [| |] code - [|(FSharpErrorSeverity.Error, 39, (2, 14, 2, 17), - "The value or constructor 'foo' is not defined. Maybe you want one of the following:\n floor")|] \ No newline at end of file + [|(FSharpDiagnosticSeverity.Error, 39, (2, 14, 2, 17), + "The value or constructor 'foo' is not defined. Maybe you want one of the following:\n floor")|] diff --git a/tests/fsharp/Compiler/Language/StructActivePatternTests.fs b/tests/fsharp/Compiler/Language/StructActivePatternTests.fs new file mode 100644 index 00000000000..c4c4162fc9a --- /dev/null +++ b/tests/fsharp/Compiler/Language/StructActivePatternTests.fs @@ -0,0 +1,205 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.UnitTests + +open NUnit.Framework +open FSharp.Compiler.Diagnostics +open FSharp.Test.Utilities + +[] +module StructActivePatternTests = + + let private pass = CompilerAssert.PassWithOptions [| "--langversion:preview" |] + let private fail = CompilerAssert.TypeCheckWithErrorsAndOptions [| "--langversion:preview" |] + let private run src = CompilerAssert.CompileExeAndRunWithOptions [| "--langversion:preview" |] (""" +let fail msg = + printfn "%s" msg + failwith msg +""" + src) + + [] + let ``Partial active pattern returns Option`1`` () = + pass "let (|Foo|_|) x = None" + + [] + let ``Partial struct active pattern returns ValueOption`1`` () = + pass "[] let (|P1|_|) x = ValueNone" + + [] + let ``StructAttribute can be placed at the active pattern return type annotation`` () = + pass + """ +let (|P1|_|) x: [] _ = ValueNone +let (|P2|_|) x: [] _ = ValueNone + """ + + [] + let ``Partial struct active pattern results can be retrieved`` () = + run """ +[] +type T1 = { v1: int } +and T2 = + | T2C1 of int * string + | T2C2 of T1 * T2 +and [] T3 = { v3: T2 } +and T4() = + let mutable _v4 = { v3 = T2C2({v1=0}, T2C1(1, "hey")) } + member __.v4 with get() = _v4 and set (x) = _v4 <- x + +[] +let (|P1|_|) = + function + | 0 -> ValueNone + | _ -> ValueSome() + +[] +let (|P2|_|) = + function + | "foo" -> ValueNone + | _ -> ValueSome "bar" + +[] +let (|P3|_|) (x: T2) = + match x with + | T2C1(a, b) -> ValueSome(a, b) + | _ -> ValueNone + +[] +let (|P4|_|) (x: T4) = + match x.v4 with + | { v3 = T2C2 ({v1=a}, P3(b, c)) } -> ValueSome (a, b, c) + | _ -> ValueNone + +match 0, 1 with +| P1, _ -> fail "unit" +| _, P1 -> () +| _ -> fail "unit" + +match "foo", "bar" with +| P2 _, _ -> fail "string" +| _, P2("bar") -> () +| _ -> fail "string" + +let t4 = T4() +match t4 with +| P4 (0, 1, "hey") -> () +| _ -> fail "nested" + """ + + [] + let ``[] attribute is rotated to the return value``() = + run + """ +open System + +[] +type MyAttribute() = + inherit Attribute() + +let extract xs = + xs + |> Seq.map (fun x -> x.GetType().Name) + |> List.ofSeq + |> FSharp.Core.String.concat "," + +[] +let Fn () = () + +let method = Fn.GetType() + .DeclaringType + .GetMethod("Fn") + +let ret_attrs = method.ReturnTypeCustomAttributes + .GetCustomAttributes(false) + |> extract + +let binding_attrs = method.GetCustomAttributes(false) + |> extract + +match ret_attrs, binding_attrs with +| "MyAttribute", "" -> () +| _ -> fail $"ret_attrs = {ret_attrs}, binding_attrs = {binding_attrs} method = {method}" + """ + [] + let ``Implicitly-targeted attribute on let binding do not target return``() = + run + """ +open System + +[] +type MyAttribute() = + inherit Attribute() + +let extract xs = + xs + |> Seq.map (fun x -> x.GetType().Name) + |> List.ofSeq + |> FSharp.Core.String.concat "," + +[] +let Fn () = () + +let method = Fn.GetType() + .DeclaringType + .GetMethod("Fn") + +let ret_attrs = method.ReturnTypeCustomAttributes + .GetCustomAttributes(false) + |> extract + +let binding_attrs = method.GetCustomAttributes(false) + |> extract + +match ret_attrs, binding_attrs with +| "", "MyAttribute" -> () +| _ -> fail $"ret_attrs = {ret_attrs}, binding_attrs = {binding_attrs} method = {method}" + """ + + +// negative tests + + [] + let ``Struct active pattern (no preview)`` () = + CompilerAssert.TypeCheckWithErrorsAndOptions [| |] + """ +[] +let (|Foo|_|) x = ValueNone + """ + [|(FSharpDiagnosticSeverity.Error, 3350, (2, 1, 3, 16), + "Feature 'struct representation for active patterns' is not available in F# 5.0. Please use language version 'preview' or greater.")|] + + [] + let ``StructAttribute must explicitly target active pattern return value`` () = + fail + """ +[] +let (|Foo|_|) x = ValueNone +""" + [|(FSharpDiagnosticSeverity.Error, 842, (2, 3, 2, 9), + "This attribute is not valid for use on this language element"); + (FSharpDiagnosticSeverity.Error, 1, (2, 1, 3, 16), + "This expression was expected to have type + ''a option' +but here has type + ''b voption' ")|] + + [] + let ``StructAttribute not allowed on other bindings than partial active pattern definitions`` () = + fail + """ +[] +let x = 1 + +[] +let f x = x + +[] +let (|A|B|) x = A +""" + [|(FSharpDiagnosticSeverity.Error, 3385, (2, 1, 3, 6), + "The use of '[]' on values, functions and methods is only allowed on partial active pattern definitions") + (FSharpDiagnosticSeverity.Error, 3385, (5, 1, 6, 8), + "The use of '[]' on values, functions and methods is only allowed on partial active pattern definitions") + (FSharpDiagnosticSeverity.Error, 3385, (8, 1, 9, 14), + "The use of '[]' on values, functions and methods is only allowed on partial active pattern definitions")|] + diff --git a/tests/fsharp/Compiler/Language/TypeAttributeTests.fs b/tests/fsharp/Compiler/Language/TypeAttributeTests.fs index d93e135daf9..27f8584c593 100644 --- a/tests/fsharp/Compiler/Language/TypeAttributeTests.fs +++ b/tests/fsharp/Compiler/Language/TypeAttributeTests.fs @@ -2,7 +2,7 @@ open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics [] module TypeAttributeTests = @@ -24,7 +24,7 @@ open System type String with member this.test = 42 """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 3246 (4, 1, 4, 15) "Attributes cannot be applied to type extensions." @@ -39,7 +39,7 @@ type Point = {x:int; y:int} type Point with member this.test = 42 """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 3246 (4, 1, 4, 15) "Attributes cannot be applied to type extensions." diff --git a/tests/fsharp/Compiler/Libraries/Core/Collections/IEnumerableTests.fs b/tests/fsharp/Compiler/Libraries/Core/Collections/IEnumerableTests.fs index a2e994bbae1..d9671884293 100644 --- a/tests/fsharp/Compiler/Libraries/Core/Collections/IEnumerableTests.fs +++ b/tests/fsharp/Compiler/Libraries/Core/Collections/IEnumerableTests.fs @@ -15,22 +15,22 @@ module ``IEnumerable Tests`` = type E(_c:int) = class interface System.IDisposable with - member __.Dispose () = dispose_called_in_E <- dispose_called_in_E + 1 + member _.Dispose () = dispose_called_in_E <- dispose_called_in_E + 1 end type C() = class let mutable i = 0 interface System.Collections.IEnumerator with - member __.Current with get () = new E(i) :> obj - member __.MoveNext () = + member _.Current with get () = new E(i) :> obj + member _.MoveNext () = i <- i+1 i<4 - member __.Reset () = i <- 0 + member _.Reset () = i <- 0 interface System.Collections.IEnumerable with member x.GetEnumerator () = x :> System.Collections.IEnumerator interface System.IDisposable with - member __.Dispose () = dispose_called_in_C <- dispose_called_in_C + 1 + member _.Dispose () = dispose_called_in_C <- dispose_called_in_C + 1 end end diff --git a/tests/fsharp/Compiler/Libraries/Core/Collections/ListTests.fs b/tests/fsharp/Compiler/Libraries/Core/Collections/ListTests.fs index 974bc67b9bd..a57dac45d17 100644 --- a/tests/fsharp/Compiler/Libraries/Core/Collections/ListTests.fs +++ b/tests/fsharp/Compiler/Libraries/Core/Collections/ListTests.fs @@ -4,7 +4,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics [] module ``List Tests`` = @@ -18,7 +18,7 @@ module ``List Tests`` = """ List.hd [1] |> ignore """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 39 (2, 6, 2, 8) "The value, constructor, namespace or type 'hd' is not defined." @@ -34,7 +34,7 @@ List.hd [1] |> ignore """ List.tl [1] |> ignore """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 39 (2, 6, 2, 8) "The value, constructor, namespace or type 'tl' is not defined." diff --git a/tests/fsharp/Compiler/Libraries/Core/NativeInterop/StackallocTests.fs b/tests/fsharp/Compiler/Libraries/Core/NativeInterop/StackallocTests.fs index 2c0277639d8..9111f90d87b 100644 --- a/tests/fsharp/Compiler/Libraries/Core/NativeInterop/StackallocTests.fs +++ b/tests/fsharp/Compiler/Libraries/Core/NativeInterop/StackallocTests.fs @@ -4,7 +4,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics #nowarn "9" @@ -69,7 +69,7 @@ module ``Stackalloc Tests`` = let _ = NativeInterop.NativePtr.stackalloc 1 """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 1 (4, 9, 4, 43) "A generic construct requires that the type 'System.Object' is an unmanaged type" @@ -82,7 +82,7 @@ let _ = NativeInterop.NativePtr.stackalloc 1 let _ = NativeInterop.NativePtr.stackalloc 1 """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 1 (4, 9, 4, 43) "A generic construct requires that the type 'System.Collections.IEnumerable' is an unmanaged type" @@ -95,7 +95,7 @@ let _ = NativeInterop.NativePtr.stackalloc 1 let _ = NativeInterop.NativePtr.stackalloc 1 """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 1 (4, 9, 4, 43) "A generic construct requires that the type 'System.EventHandler' is an unmanaged type" @@ -143,13 +143,13 @@ let _ = NativeInterop.NativePtr.stackalloc 1 type C() = class - member __.M = 10 - member __.N(x) = x + 1 + member _.M = 10 + member _.N(x) = x + 1 end let _ = NativeInterop.NativePtr.stackalloc 1 """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 1 (10, 9, 10, 43) "A generic construct requires that the type 'C' is an unmanaged type" @@ -164,7 +164,7 @@ type R = { A : int } let _ = NativeInterop.NativePtr.stackalloc 1 """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 1 (6, 9, 6, 43) "A generic construct requires that the type 'R' is an unmanaged type" diff --git a/tests/fsharp/Compiler/Libraries/Core/Operators/AbsTests.fs b/tests/fsharp/Compiler/Libraries/Core/Operators/AbsTests.fs index 806c93b7dba..826bafd33a3 100644 --- a/tests/fsharp/Compiler/Libraries/Core/Operators/AbsTests.fs +++ b/tests/fsharp/Compiler/Libraries/Core/Operators/AbsTests.fs @@ -3,7 +3,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics open FSharp.Test.Utilities [] @@ -26,7 +26,7 @@ module ``Abs Tests`` = """ abs -1uy |> ignore """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 1 (2, 6, 2, 9) "The type 'byte' does not support the operator 'Abs'" @@ -37,7 +37,7 @@ abs -1uy |> ignore """ abs -1us |> ignore """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 1 (2, 6, 2, 9) "The type 'uint16' does not support the operator 'Abs'" @@ -48,7 +48,7 @@ abs -1us |> ignore """ abs -1ul |> ignore """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 1 (2, 6, 2, 9) "The type 'uint32' does not support the operator 'Abs'" @@ -57,7 +57,7 @@ abs -1ul |> ignore """ abs -1u |> ignore """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 1 (2, 6, 2, 8) "The type 'uint32' does not support the operator 'Abs'" @@ -68,7 +68,7 @@ abs -1u |> ignore """ abs -1un |> ignore """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 1 (2, 6, 2, 9) "The type 'unativeint' does not support the operator 'Abs'" @@ -79,7 +79,7 @@ abs -1un |> ignore """ abs -1uL |> ignore """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 1 (2, 6, 2, 9) "The type 'uint64' does not support the operator 'Abs'" @@ -88,7 +88,7 @@ abs -1uL |> ignore """ abs -1UL |> ignore """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 1 (2, 6, 2, 9) "The type 'uint64' does not support the operator 'Abs'" \ No newline at end of file diff --git a/tests/fsharp/Compiler/Libraries/Core/Operators/HashTests.fs b/tests/fsharp/Compiler/Libraries/Core/Operators/HashTests.fs index 8958cd5b8e9..b5b7f8af3d9 100644 --- a/tests/fsharp/Compiler/Libraries/Core/Operators/HashTests.fs +++ b/tests/fsharp/Compiler/Libraries/Core/Operators/HashTests.fs @@ -3,7 +3,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics open FSharp.Test.Utilities [] @@ -20,7 +20,7 @@ module ``Hash Tests`` = """ hash id |> ignore """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 1 (2, 6, 2, 8) "The type '('a -> 'a)' does not support the 'equality' constraint because it is a function type" diff --git a/tests/fsharp/Compiler/Libraries/Core/Operators/SignTests.fs b/tests/fsharp/Compiler/Libraries/Core/Operators/SignTests.fs index 751e535d531..158131e2ca8 100644 --- a/tests/fsharp/Compiler/Libraries/Core/Operators/SignTests.fs +++ b/tests/fsharp/Compiler/Libraries/Core/Operators/SignTests.fs @@ -3,7 +3,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics open FSharp.Test.Utilities [] @@ -42,7 +42,7 @@ module ``Sign Tests`` = """ sign 0uy |> ignore """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 1 (2, 6, 2, 9) "The type 'byte' does not support the operator 'get_Sign'" @@ -53,7 +53,7 @@ sign 0uy |> ignore """ sign 0us |> ignore """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 1 (2, 6, 2, 9) "The type 'uint16' does not support the operator 'get_Sign'" @@ -64,7 +64,7 @@ sign 0us |> ignore """ sign 0u |> ignore """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 1 (2, 6, 2, 8) "The type 'uint32' does not support the operator 'get_Sign'" @@ -75,7 +75,7 @@ sign 0u |> ignore """ sign 0uL |> ignore """ - FSharpErrorSeverity.Error + FSharpDiagnosticSeverity.Error 1 (2, 6, 2, 9) "The type 'uint64' does not support the operator 'get_Sign'" \ No newline at end of file diff --git a/tests/fsharp/Compiler/Libraries/Core/Operators/StringTests.fs b/tests/fsharp/Compiler/Libraries/Core/Operators/StringTests.fs index dbb691fb35b..ad54fd0940f 100644 --- a/tests/fsharp/Compiler/Libraries/Core/Operators/StringTests.fs +++ b/tests/fsharp/Compiler/Libraries/Core/Operators/StringTests.fs @@ -12,7 +12,7 @@ module ``String Tests`` = let mutable x = x let mutable y = y - member __.Sum () = x + y + member _.Sum () = x + y interface IFormattable with member x.ToString (format: string, _ : IFormatProvider) = diff --git a/tests/fsharp/Compiler/Libraries/Core/Reflection/PreComputedTupleConstructorTests.fs b/tests/fsharp/Compiler/Libraries/Core/Reflection/PreComputedTupleConstructorTests.fs index cd24ea20106..6b2a0c0752d 100644 --- a/tests/fsharp/Compiler/Libraries/Core/Reflection/PreComputedTupleConstructorTests.fs +++ b/tests/fsharp/Compiler/Libraries/Core/Reflection/PreComputedTupleConstructorTests.fs @@ -25,4 +25,4 @@ module ``PreComputedTupleConstructor Tests`` = let testDelegate = TestDelegate (fun () -> Reflection.FSharpValue.PreComputeTupleConstructor(typeof) [| box "text"; box 12; |] |> ignore) - Assert.Throws testDelegate |> ignore \ No newline at end of file + Assert.Throws testDelegate |> ignore \ No newline at end of file diff --git a/tests/fsharp/Compiler/Regressions/NullableOptionalRegressionTests.fs b/tests/fsharp/Compiler/Regressions/NullableOptionalRegressionTests.fs index 93970223ce5..26391ffa1c3 100644 --- a/tests/fsharp/Compiler/Regressions/NullableOptionalRegressionTests.fs +++ b/tests/fsharp/Compiler/Regressions/NullableOptionalRegressionTests.fs @@ -33,3 +33,66 @@ let test () = |> typecheck |> shouldSucceed |> ignore + + [] + let ``Method should infer 'z' correctly``() = + let fsSrc = + """ +namespace FSharpTest + +open System + +type Test() = class end + +type Test with + + static member nullableE (encoder, x: Nullable<'a>) = if x.HasValue then encoder x.Value else Test() + static member nullable codec z = Test.nullableE(codec, z) + """ + FSharp fsSrc + |> withLangVersionPreview + |> typecheck + |> shouldSucceed + |> ignore + + [] + let ``Method should infer correctly``() = + let fsSrc = + """ +namespace FSharpTest + +open System + +type Test() = class end + +type Test with + + static member nullableE encoder (x: Nullable<'a>) = if x.HasValue then encoder x.Value else Test() + static member nullable codec = Test.nullableE codec + """ + FSharp fsSrc + |> withLangVersionPreview + |> typecheck + |> shouldSucceed + |> ignore + + [] + let ``Method should infer correctly 2``() = + let fsSrc = + """ +namespace FSharpTest + +open System + +type Test() = class end + +type Test with + + static member nullableE encoder (x: Nullable) = if x.HasValue then encoder x.Value else Test() + static member nullable codec = Test.nullableE codec + """ + FSharp fsSrc + |> withLangVersionPreview + |> typecheck + |> shouldSucceed + |> ignore diff --git a/tests/fsharp/Compiler/Service/MultiProjectTests.fs b/tests/fsharp/Compiler/Service/MultiProjectTests.fs new file mode 100644 index 00000000000..6b4bedc74f0 --- /dev/null +++ b/tests/fsharp/Compiler/Service/MultiProjectTests.fs @@ -0,0 +1,87 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.UnitTests + +open System +open System.IO +open FSharp.Compiler.Diagnostics +open NUnit.Framework +open FSharp.Test.Utilities +open FSharp.Test.Utilities.Utilities +open FSharp.Test.Utilities.Compiler +open FSharp.Tests +open FSharp.Compiler.CodeAnalysis +open Microsoft.CodeAnalysis +open Microsoft.CodeAnalysis.CSharp +open FSharp.Compiler.Text + +[] +module MultiProjectTests = + + let AssertInMemoryCSharpReferenceIsValid () = + let csSrc = + """ +namespace CSharpTest +{ + public class CSharpClass + { + } +} + """ + + let csOptions = CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary) + let csSyntax = CSharpSyntaxTree.ParseText(csSrc) + let csReferences = TargetFrameworkUtil.getReferences TargetFramework.NetStandard20 + let cs = CSharpCompilation.Create("csharp_test.dll", references = csReferences.As(), syntaxTrees = [csSyntax], options = csOptions) + + let ms = new MemoryStream() + let getStream = + fun ct -> + cs.Emit(ms, cancellationToken = ct) |> ignore + ms.Position <- 0L + ms :> Stream + |> Some + + let csRefProj = FSharpReferencedProject.CreatePortableExecutable("""Z:\csharp_test.dll""", DateTime.UtcNow, getStream) + + let fsOptions = CompilerAssert.DefaultProjectOptions + let fsOptions = + { fsOptions with + ProjectId = Some(Guid.NewGuid().ToString()) + OtherOptions = Array.append fsOptions.OtherOptions [|"""-r:Z:\csharp_test.dll"""|] + ReferencedProjects = [|csRefProj|] } + + let fsText = + """ +module FSharpTest + +open CSharpTest + +let test() = + CSharpClass() + """ + |> SourceText.ofString + let _, checkAnswer = + CompilerAssert.Checker.ParseAndCheckFileInProject("test.fs", 0, fsText, fsOptions) + |> Async.RunSynchronously + + + match checkAnswer with + | FSharpCheckFileAnswer.Aborted -> failwith "check file aborted" + | FSharpCheckFileAnswer.Succeeded(checkResults) -> + Assert.shouldBeEmpty(checkResults.Diagnostics) + WeakReference(ms) + + [] + let ``Using a CSharp reference project in-memory``() = + AssertInMemoryCSharpReferenceIsValid() |> ignore + + [] + let ``Using a CSharp reference project in-memory and it gets GCed``() = + let weakRef = AssertInMemoryCSharpReferenceIsValid() + CompilerAssert.Checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() + GC.Collect(2, GCCollectionMode.Forced, true) + Assert.shouldBeFalse(weakRef.IsAlive) + + + diff --git a/tests/fsharp/Compiler/Service/SignatureGenerationTests.fs b/tests/fsharp/Compiler/Service/SignatureGenerationTests.fs new file mode 100644 index 00000000000..3fb1a5487c8 --- /dev/null +++ b/tests/fsharp/Compiler/Service/SignatureGenerationTests.fs @@ -0,0 +1,109 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.UnitTests + +open FSharp.Compiler.Diagnostics +open NUnit.Framework +open FSharp.Test.Utilities +open FSharp.Test.Utilities.Utilities +open FSharp.Test.Utilities.Compiler +open FSharp.Tests + +[] +module SignatureGenerationTests = + + let sigText (checkResults: FSharp.Compiler.CodeAnalysis.FSharpCheckFileResults) = + match checkResults.GenerateSignature() with + | None -> failwith "Unable to generate signature text." + | Some text -> text + + let sigShouldBe (expected: string) src = + let text = + FSharp src + |> withLangVersion50 + |> typecheckResults + |> sigText + + let actual = text.ToString() + let expected2 = expected.Replace("\r\n", "\n") + Assert.shouldBeEquivalentTo expected2 actual + + [] + let ``can generate sigs with comments`` () = + """ +/// namespace comments +namespace Sample + +/// exception comments +exception MyEx of reason: string + +/// module-level docs +module Inner = + /// type-level docs + type Facts + /// primary ctor docs + (name: string) = + /// constructor-level docs + new() = Facts("default name") + /// member-level docs + member x.blah() = [1;2;3] + /// auto-property-level docs + member val Name = name with get, set + + /// module-level binding docs + let module_member = () + + /// record docs + type TestRecord = + { + /// record field docs + RecordField: int + } + /// record member docs + member x.Data = 1 + /// static record member docs + static member Foo = true + + /// union docs + type TestUnion = + /// docs for first case + | FirstCase of thing: int + /// union member + member x.Thing = match x with | FirstCase thing -> thing + """ + |> sigShouldBe """namespace Sample + /// exception comments + exception MyEx of reason: string + /// module-level docs + module Inner = begin + /// type-level docs + type Facts = + /// constructor-level docs + new : unit -> Facts + /// primary ctor docs + new : name:string -> Facts + /// member-level docs + member blah : unit -> int list + /// auto-property-level docs + member Name : string + /// module-level binding docs + val module_member : unit + /// record docs + type TestRecord = + { /// record field docs + RecordField: int } + with + /// record member docs + member Data : int + /// static record member docs + static member Foo : bool + end + /// union docs + type TestUnion = + /// docs for first case + | FirstCase of thing: int + with + /// union member + member Thing : int + end + end""" \ No newline at end of file diff --git a/tests/fsharp/Compiler/SourceTextTests.fs b/tests/fsharp/Compiler/SourceTextTests.fs index e32647195b0..1111039c304 100644 --- a/tests/fsharp/Compiler/SourceTextTests.fs +++ b/tests/fsharp/Compiler/SourceTextTests.fs @@ -5,6 +5,7 @@ namespace FSharp.Compiler.UnitTests open System open NUnit.Framework +open FSharp.Compiler.Diagnostics open FSharp.Compiler.Text [] diff --git a/tests/fsharp/Compiler/Stress/LargeExprTests.fs b/tests/fsharp/Compiler/Stress/LargeExprTests.fs index 9be3574c000..c0c8e69cdaa 100644 --- a/tests/fsharp/Compiler/Stress/LargeExprTests.fs +++ b/tests/fsharp/Compiler/Stress/LargeExprTests.fs @@ -984,36 +984,6 @@ type TestRecord = test968: int test969: int test970: int - test971: int - test972: int - test973: int - test974: int - test975: int - test976: int - test977: int - test978: int - test979: int - test980: int - test981: int - test982: int - test983: int - test984: int - test985: int - test986: int - test987: int - test988: int - test989: int - test990: int - test991: int - test992: int - test993: int - test994: int - test995: int - test996: int - test997: int - test998: int - test999: int - test1000: int } [] @@ -1996,36 +1966,7 @@ type TestRecord = test968: string test969: string test970: string - test971: string - test972: string - test973: string - test974: string - test975: string - test976: string - test977: string - test978: string - test979: string - test980: string - test981: string - test982: string - test983: string - test984: string - test985: string - test986: string - test987: string - test988: string - test989: string - test990: string - test991: string - test992: string - test993: string - test994: string - test995: string - test996: string - test997: string - test998: string - test999: string - test1000: string + } [] diff --git a/tests/fsharp/Compiler/Warnings/AssignmentWarningTests.fs b/tests/fsharp/Compiler/Warnings/AssignmentWarningTests.fs index c6fdb75d97f..c87ccdefd0f 100644 --- a/tests/fsharp/Compiler/Warnings/AssignmentWarningTests.fs +++ b/tests/fsharp/Compiler/Warnings/AssignmentWarningTests.fs @@ -4,7 +4,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics [] module ``Warnings assigning to mutable and immutable objects`` = @@ -20,7 +20,7 @@ let changeX() = x = 20 y = "test" """ - FSharpErrorSeverity.Warning + FSharpDiagnosticSeverity.Warning 20 (6, 5, 6, 11) "The result of this equality expression has type 'bool' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then mark the value 'mutable' and use the '<-' operator e.g. 'x <- expression'." @@ -36,7 +36,7 @@ let changeX() = x = 20 y = "test" """ - FSharpErrorSeverity.Warning + FSharpDiagnosticSeverity.Warning 20 (6, 5, 6, 11) "The result of this equality expression has type 'bool' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then use the '<-' operator e.g. 'x <- expression'." @@ -54,7 +54,7 @@ let changeProperty() = z.Enabled = true y = "test" """ - FSharpErrorSeverity.Warning + FSharpDiagnosticSeverity.Warning 20 (8, 5, 8, 21) "The result of this equality expression has type 'bool' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to set a value to a property, then use the '<-' operator e.g. 'z.Enabled <- expression'." @@ -74,7 +74,7 @@ let changeProperty() = x.Property2 = "20" y = "test" """ - FSharpErrorSeverity.Warning + FSharpDiagnosticSeverity.Warning 20 (10, 5, 10, 23) "The result of this equality expression has type 'bool' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to set a value to a property, then use the '<-' operator e.g. 'x.Property2 <- expression'." @@ -93,7 +93,7 @@ let changeProperty() = x.Property2 = "22" y = "test" """ - FSharpErrorSeverity.Warning + FSharpDiagnosticSeverity.Warning 20 (9, 5, 9, 23) "The result of this equality expression has type 'bool' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'." diff --git a/tests/fsharp/Compiler/Warnings/ExperimentalAttributeTests.fs b/tests/fsharp/Compiler/Warnings/ExperimentalAttributeTests.fs index ce31ccb45e2..d83ac8632e8 100644 --- a/tests/fsharp/Compiler/Warnings/ExperimentalAttributeTests.fs +++ b/tests/fsharp/Compiler/Warnings/ExperimentalAttributeTests.fs @@ -3,7 +3,7 @@ namespace FSharp.Compiler.UnitTests open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics [] module ``Validate ExperimentalAttribute and LanguageVersion`` = @@ -27,7 +27,7 @@ module TestModule = let ``ExperimentalAttribute warn when preview not specified``() = CompilerAssert.TypeCheckSingleError experimentalSource - FSharpErrorSeverity.Warning + FSharpDiagnosticSeverity.Warning 57 (7, 8, 7, 17) "Preview library feature, requires '--langversion:preview'. This warning can be disabled using '--nowarn:57' or '#nowarn \"57\"'." diff --git a/tests/fsharp/Compiler/Warnings/PatternMatchingWarningTests.fs b/tests/fsharp/Compiler/Warnings/PatternMatchingWarningTests.fs index 7c371cfc2f3..4aa8feb8a7d 100644 --- a/tests/fsharp/Compiler/Warnings/PatternMatchingWarningTests.fs +++ b/tests/fsharp/Compiler/Warnings/PatternMatchingWarningTests.fs @@ -2,7 +2,7 @@ open NUnit.Framework open FSharp.Test.Utilities -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics [] module PatternMatchingWarningTests = diff --git a/tests/fsharp/FSharpSuite.Tests.fsproj b/tests/fsharp/FSharpSuite.Tests.fsproj index c67895f0e24..533bc765dc3 100644 --- a/tests/fsharp/FSharpSuite.Tests.fsproj +++ b/tests/fsharp/FSharpSuite.Tests.fsproj @@ -2,8 +2,8 @@ - net472;netcoreapp3.1 - netcoreapp3.1 + net472;net5.0 + net5.0 win-x86;win-x64 $(AssetTargetFallback);portable-net45+win8+wp8+wpa81 true @@ -25,8 +25,12 @@ + + + + @@ -38,6 +42,7 @@ + @@ -57,6 +62,7 @@ + @@ -87,7 +93,7 @@ - + diff --git a/tests/fsharp/NUnitHelpers.fs b/tests/fsharp/NUnitHelpers.fs index 6af423d9b7c..b80b3e54bf6 100644 --- a/tests/fsharp/NUnitHelpers.fs +++ b/tests/fsharp/NUnitHelpers.fs @@ -2,6 +2,9 @@ namespace NUnit.Framework module Assert = + [] + do() + let inline fail message = Assert.Fail message let inline failf fmt = Printf.kprintf fail fmt diff --git a/tests/fsharp/TypeProviderTests.fs b/tests/fsharp/TypeProviderTests.fs index 4b26147b5eb..971960ddcd9 100644 --- a/tests/fsharp/TypeProviderTests.fs +++ b/tests/fsharp/TypeProviderTests.fs @@ -7,7 +7,7 @@ #load "../FSharp.Test.Utilities/TestFramework.fs" #load "single-test.fs" #else -[] +[] module FSharp.Test.FSharpSuite.TypeProviderTests #endif @@ -19,6 +19,8 @@ open TestFramework open Scripting open SingleTest +open FSharp.Compiler.IO + #if !NETCOREAPP // All tests which do a manual invoke of the F# compiler are disabled @@ -32,11 +34,11 @@ let FSI_BASIC = FSI_FILE #endif let inline getTestsDirectory dir = __SOURCE_DIRECTORY__ ++ dir -let testConfig' = getTestsDirectory >> testConfig +let testConfig = getTestsDirectory >> testConfig [] let diamondAssembly () = - let cfg = testConfig' "typeProviders/diamondAssembly" + let cfg = testConfig "typeProviders/diamondAssembly" rm cfg "provider.dll" @@ -72,14 +74,14 @@ let diamondAssembly () = [] let globalNamespace () = - let cfg = testConfig' "typeProviders/globalNamespace" + let cfg = testConfig "typeProviders/globalNamespace" csc cfg """/out:globalNamespaceTP.dll /debug+ /target:library /r:netstandard.dll /r:"%s" """ cfg.FSCOREDLLPATH ["globalNamespaceTP.cs"] fsc cfg "%s /debug+ /r:globalNamespaceTP.dll /optimize-" cfg.fsc_flags ["test.fsx"] let helloWorld p = - let cfg = testConfig' "typeProviders/helloWorld" + let cfg = testConfig "typeProviders/helloWorld" fsc cfg "%s" "--out:provided1.dll -g -a" [".." ++ "helloWorld" ++ "provided.fs"] @@ -154,7 +156,7 @@ let ``helloWorld fsi`` () = helloWorld FSI_STDIN [] let helloWorldCSharp () = - let cfg = testConfig' "typeProviders/helloWorldCSharp" + let cfg = testConfig "typeProviders/helloWorldCSharp" rm cfg "magic.dll" @@ -202,8 +204,9 @@ let helloWorldCSharp () = [] [] [] +[] let ``negative type provider tests`` (name:string) = - let cfg = testConfig' "typeProviders/negTests" + let cfg = testConfig "typeProviders/negTests" let dir = cfg.Directory if requireENCulture () then @@ -241,12 +244,13 @@ let ``negative type provider tests`` (name:string) = let preprocess name pref = let dirp = (dir |> Commands.pathAddBackslash) do - File.ReadAllText(sprintf "%s%s.%sbslpp" dirp name pref) - .Replace("", getfullpath cfg (sprintf "provider_%s.dll" name)) - .Replace("",dirp) - .Replace("",sprintf "file:///%s" dirp) - |> fun txt -> File.WriteAllText(sprintf "%s%s.%sbsl" dirp name pref,txt) - + FileSystem.OpenFileForReadShim(sprintf "%s%s.%sbslpp" dirp name pref) + .ReadAllText() + .Replace("", getfullpath cfg (sprintf "provider_%s.dll" name)) + .Replace("",dirp) + .Replace("",sprintf "file:///%s" dirp) + |> fun txt -> FileSystem.OpenFileForWriteShim(sprintf "%s%s.%sbsl" dirp name pref).Write(txt) + if name = "ProviderAttribute_EmptyConsume" || name = "providerAttributeErrorConsume" then () else fsc cfg "--define:%s --out:provider_%s.dll -a" name name ["provider.fsx"] @@ -257,8 +261,8 @@ let ``negative type provider tests`` (name:string) = SingleTest.singleNegTest cfg name let splitAssembly subdir project = - - let cfg = testConfig' project + let subdir = getTestsDirectory subdir + let cfg = testConfig project let clean() = rm cfg "providerDesigner.dll" @@ -330,17 +334,16 @@ let splitAssembly subdir project = end clean() -let splitAssembly' = getTestsDirectory >> splitAssembly [] -let splitAssemblyTools () = splitAssembly' "tools" "typeProviders/splitAssemblyTools" +let splitAssemblyTools () = splitAssembly "tools" "typeProviders/splitAssemblyTools" [] -let splitAssemblyTypeProviders () = splitAssembly' "typeproviders" "typeProviders/splitAssemblyTypeproviders" +let splitAssemblyTypeProviders () = splitAssembly "typeproviders" "typeProviders/splitAssemblyTypeproviders" [] let wedgeAssembly () = - let cfg = testConfig' "typeProviders/wedgeAssembly" + let cfg = testConfig "typeProviders/wedgeAssembly" rm cfg "provider.dll" diff --git a/tests/fsharp/core/innerpoly/test.fsx b/tests/fsharp/core/innerpoly/test.fsx index 657b8c2e81a..752ba98a3dd 100644 --- a/tests/fsharp/core/innerpoly/test.fsx +++ b/tests/fsharp/core/innerpoly/test.fsx @@ -389,6 +389,56 @@ module InnerGenericBindingsInComputationExpressions = begin f() end +module LocalTypeFunctionRequiredForWitnessPassingOfGenericInnerFunctionsConstrainedByMemberConstraints = + let inline clamp16 v = uint16 (max 0. (min 65535. v)) + let inline clamp8 v = uint8 (max 0. (min 255. v)) + + type Clampage = + static member inline FromFloat (_ : byte, _ : Clampage) = fun (x : float) -> clamp8 x + static member inline FromFloat (_ : uint16, _ : Clampage) = fun (x : float) -> clamp16 x + + static member inline Invoke (x: float) : 'Num = + let inline call2 (a: ^a, b: ^b) = ((^a or ^b) : (static member FromFloat : _*_ -> _) (b, a)) + let inline call (a: 'a) = fun (x: 'x) -> call2 (a, Unchecked.defaultof<'r>) x : 'r + call Unchecked.defaultof x + + let inline clamp x = Clampage.Invoke x + let x1 : byte = clamp 3.0 + let x2 : uint16 = clamp 3.0 + let x3 : byte = clamp 257.0 + check "clecqwe1" x1 3uy + check "clecqwe2" x2 3us + check "clecqwe3" x3 255uy + +// Same as the above but capturing an extra constrained free type variable 'Free +module LocalTypeFunctionRequiredForWitnessPassingOfGenericInnerFunctionsConstrainedByMemberConstraints2 = + let inline clamp16 v = uint16 (max 0. (min 65535. v)) + let inline clamp8 v = uint8 (max 0. (min 255. v)) + + type Clampage = + static member inline FromFloat (_ : byte, _ : Clampage) = fun (x : float) -> clamp8 x + static member inline FromFloat (_ : uint16, _ : Clampage) = fun (x : float) -> clamp16 x + + static member inline Invoke (x: float) (free: 'Free) : 'Num * 'Free = + let inline call2 (a: ^a, b: ^b) = ((^a or ^b) : (static member FromFloat : _*_ -> _) (b, a)) + let inline call (a: 'a) = (fun (x: 'x) -> call2 (a, Unchecked.defaultof<'r>) x : 'r), free + free + let f, info = call Unchecked.defaultof + f x, info + + let inline clamp x free = Clampage.Invoke x free + let (x1a1: byte, x1a2: int64) = clamp 3.0 1L + let (x1b1: uint16, x1b2: string) = clamp 3.0 "abc" + check "clecqwea1" x1a1 3uy + check "clecqwea2" x1a2 2L + check "clecqwea3" x1b1 3us + check "clecqwea4" x1b2 "abcabc" + +module Bug10408 = + let test x = + match x with + | [| |] -> x + | _ -> x + #if TESTS_AS_APP let RUN() = !failures #else diff --git a/tests/fsharp/core/printf-interpolated/test.fsx b/tests/fsharp/core/printf-interpolated/test.fsx index 64e08fec66e..b1891f31ad9 100644 --- a/tests/fsharp/core/printf-interpolated/test.fsx +++ b/tests/fsharp/core/printf-interpolated/test.fsx @@ -41,8 +41,17 @@ let _ = test "cewoui2e" (lazy(sprintf $"%o{System.Int32.MinValue}" )) "200000000 let _ = test "cewoui2r" (lazy(sprintf $"%o{0xffffffff}" )) "37777777777" let _ = test "cewoui2t" (lazy(sprintf $"%o{System.Int32.MinValue+1}")) "20000000001" let _ = test "cewoui2y" (lazy(sprintf $"%o{System.Int32.MaxValue}")) "17777777777" - let _ = test "cewoui2u" (lazy(sprintf $"%o{-1}" )) "37777777777" +let _ = test "cewoui2aB" (lazy(sprintf $"%B{0}")) "0" +let _ = test "cewoui2bB" (lazy(sprintf $"%B{0}")) "0" +let _ = test "cewoui2cB" (lazy(sprintf $"%B{5}")) "101" +let _ = test "cewoui2qB" (lazy(sprintf $"%B{8}")) "1000" +let _ = test "cewoui2wB" (lazy(sprintf $"%B{15}")) "1111" +let _ = test "cewoui2eB" (lazy(sprintf $"%B{System.Int32.MinValue}" )) "10000000000000000000000000000000" +let _ = test "cewoui2rB" (lazy(sprintf $"%B{0xffffffff}" )) "11111111111111111111111111111111" +let _ = test "cewoui2tB" (lazy(sprintf $"%B{System.Int32.MinValue+1}")) "10000000000000000000000000000001" +let _ = test "cewoui2yB" (lazy(sprintf $"%B{System.Int32.MaxValue}")) "1111111111111111111111111111111" +let _ = test "cewoui2uB" (lazy(sprintf $"%B{-1}" )) "11111111111111111111111111111111" let f z = sprintf $"%o{z}" @@ -55,9 +64,21 @@ let _ = test "cewoui2h" (lazy(f System.Int32.MinValue)) "20000000000" let _ = test "cewoui2j" (lazy(f 0xffffffff)) "37777777777" let _ = test "cewoui2lk" (lazy(f (System.Int32.MinValue+1))) "20000000001" let _ = test "cewoui2l" (lazy(f System.Int32.MaxValue)) "17777777777" - let _ = test "cewoui212" (lazy(f (-1))) "37777777777" +let fB z = sprintf $"%B{z}" + +let _ = test "cewoui2aB" (lazy(fB 0)) "0" +let _ = test "cewoui2sB" (lazy(fB 0)) "0" +let _ = test "cewoui2dB" (lazy(fB 5)) "101" +let _ = test "cewoui2fB" (lazy(fB 8)) "1000" +let _ = test "cewoui2gB" (lazy(fB 15)) "1111" +let _ = test "cewoui2hB" (lazy(fB System.Int32.MinValue)) "10000000000000000000000000000000" +let _ = test "cewoui2jB" (lazy(fB 0xffffffff)) "11111111111111111111111111111111" +let _ = test "cewoui2lkB" (lazy(fB (System.Int32.MinValue+1))) "10000000000000000000000000000001" +let _ = test "cewoui2lB" (lazy(fB System.Int32.MaxValue)) "1111111111111111111111111111111" +let _ = test "cewoui212B" (lazy(fB (-1))) "11111111111111111111111111111111" + // check bprintf let _ = test "csd3oui2!" (lazy(let buf = new System.Text.StringBuilder() in ignore (bprintf buf $"%x{0}%x{1}"); buf.ToString())) "01" diff --git a/tests/fsharp/core/printf/test.fsx b/tests/fsharp/core/printf/test.fsx index af5673500f3..8ea722c9ee4 100644 --- a/tests/fsharp/core/printf/test.fsx +++ b/tests/fsharp/core/printf/test.fsx @@ -58,8 +58,22 @@ let _ = test "cewoui2e" (lazy(sprintf "%o" System.Int32.MinValue)) "20000000000" let _ = test "cewoui2r" (lazy(sprintf "%o" 0xffffffff)) "37777777777" let _ = test "cewoui2t" (lazy(sprintf "%o" (System.Int32.MinValue+1))) "20000000001" let _ = test "cewoui2y" (lazy(sprintf "%o" System.Int32.MaxValue)) "17777777777" - let _ = test "cewoui2u" (lazy(sprintf "%o" (-1))) "37777777777" +let _ = test "cewoui2i" (lazy(sprintf "%o" System.UInt64.MaxValue)) "1777777777777777777777" +let _ = test "cewoui2i" (lazy(sprintf "%o" System.Int64.MinValue)) "1000000000000000000000" + +let _ = test "cewoui2aB" (lazy(sprintf "%B" 0)) "0" +let _ = test "cewoui2bB" (lazy(sprintf "%B" 0)) "0" +let _ = test "cewoui2cB" (lazy(sprintf "%B" 5)) "101" +let _ = test "cewoui2qB" (lazy(sprintf "%B" 8)) "1000" +let _ = test "cewoui2wB" (lazy(sprintf "%B" 15)) "1111" +let _ = test "cewoui2eB" (lazy(sprintf "%B" System.Int32.MinValue)) "10000000000000000000000000000000" +let _ = test "cewoui2rB" (lazy(sprintf "%B" 0xffffffff)) "11111111111111111111111111111111" +let _ = test "cewoui2tB" (lazy(sprintf "%B" (System.Int32.MinValue+1))) "10000000000000000000000000000001" +let _ = test "cewoui2yB" (lazy(sprintf "%B" System.Int32.MaxValue)) "1111111111111111111111111111111" +let _ = test "cewoui2uB" (lazy(sprintf "%B" (-1))) "11111111111111111111111111111111" +let _ = test "cewoui2iB" (lazy(sprintf "%B" System.UInt64.MaxValue)) "1111111111111111111111111111111111111111111111111111111111111111" +let _ = test "cewoui2iB" (lazy(sprintf "%B" System.Int64.MinValue)) "1000000000000000000000000000000000000000000000000000000000000000" let f = sprintf "%o" @@ -72,9 +86,21 @@ let _ = test "cewoui2h" (lazy(f System.Int32.MinValue)) "20000000000" let _ = test "cewoui2j" (lazy(f 0xffffffff)) "37777777777" let _ = test "cewoui2lk" (lazy(f (System.Int32.MinValue+1))) "20000000001" let _ = test "cewoui2l" (lazy(f System.Int32.MaxValue)) "17777777777" - let _ = test "cewoui212" (lazy(f (-1))) "37777777777" +let fB = sprintf "%B" + +let _ = test "cewoui2a" (lazy(fB 0)) "0" +let _ = test "cewoui2s" (lazy(fB 0)) "0" +let _ = test "cewoui2d" (lazy(fB 5)) "101" +let _ = test "cewoui2f" (lazy(fB 8)) "1000" +let _ = test "cewoui2g" (lazy(fB 15)) "1111" +let _ = test "cewoui2h" (lazy(fB System.Int32.MinValue)) "10000000000000000000000000000000" +let _ = test "cewoui2j" (lazy(fB 0xffffffff)) "11111111111111111111111111111111" +let _ = test "cewoui2lk" (lazy(fB (System.Int32.MinValue+1))) "10000000000000000000000000000001" +let _ = test "cewoui2l" (lazy(fB System.Int32.MaxValue)) "1111111111111111111111111111111" +let _ = test "cewoui212" (lazy(fB (-1))) "11111111111111111111111111111111" + // Test nothing comes out until all arguments have been applied let _ = test "csd3oui2!" (lazy(let buf = new System.Text.StringBuilder() in ignore (bprintf buf "%x%x" 0); buf.ToString())) "" let _ = test "csd3oui2!" (lazy(let buf = new System.Text.StringBuilder() in ignore (bprintf buf "%x%x" 0 1); buf.ToString())) "01" @@ -89,6 +115,8 @@ let _ = test "cewoui2Z" (lazy(sprintf "%x" System.Int32.MinValue)) "80000000" let _ = test "cewoui2X" (lazy(sprintf "%x" 0xffffffff)) "ffffffff" let _ = test "cewoui2A" (lazy(sprintf "%x" (System.Int32.MinValue+1))) "80000001" let _ = test "cewoui2Q" (lazy(sprintf "%x" System.Int32.MaxValue)) "7fffffff" +let _ = test "cewoui2`" (lazy(sprintf "%x" System.UInt64.MaxValue)) "ffffffffffffffff" +let _ = test "cewoui2~" (lazy(sprintf "%x" System.Int64.MinValue)) "8000000000000000" let fx = sprintf "%x" let _ = test "cewoui2W" (lazy(fx 0)) "0" @@ -108,6 +136,8 @@ let _ = test "cewoui2v" (lazy(sprintf "%X" System.Int32.MinValue)) "80000000" let _ = test "cewoui2B" (lazy(sprintf "%X" 0xffffffff)) "FFFFFFFF" let _ = test "cewoui2N" (lazy(sprintf "%X" (System.Int32.MinValue+1))) "80000001" let _ = test "cewoui2M" (lazy(sprintf "%X" System.Int32.MaxValue)) "7FFFFFFF" +let _ = test "cewoui2," (lazy(sprintf "%X" System.UInt64.MaxValue)) "FFFFFFFFFFFFFFFF" +let _ = test "cewoui2." (lazy(sprintf "%X" System.Int64.MinValue)) "8000000000000000" let _ = test "cewou44a" (lazy(sprintf "%u" 0)) "0" let _ = test "cewou44b" (lazy(sprintf "%u" 5)) "5" @@ -117,6 +147,7 @@ let _ = test "cewou44e" (lazy(sprintf "%u" System.Int32.MinValue)) "2147483648" let _ = test "cewou44f" (lazy(sprintf "%u" 0xffffffff)) "4294967295" let _ = test "cewou44g" (lazy(sprintf "%u" (System.Int32.MinValue+1))) "2147483649" let _ = test "cewou44h" (lazy(sprintf "%u" System.Int32.MaxValue)) "2147483647" +let _ = test "cewou44i" (lazy(sprintf "%u" System.UInt64.MaxValue)) "18446744073709551615" let _ = test "cewou45a" (lazy(sprintf "%d" 0ul)) "0" let _ = test "cewou45b" (lazy(sprintf "%d" 5ul)) "5" @@ -126,6 +157,7 @@ let _ = test "cewou45e" (lazy(sprintf "%d" 2147483648ul)) "2147483648" let _ = test "cewou45f" (lazy(sprintf "%d" 4294967295ul)) "4294967295" let _ = test "cewou45g" (lazy(sprintf "%d" 2147483649ul)) "2147483649" let _ = test "cewou45h" (lazy(sprintf "%d" 2147483647ul)) "2147483647" +let _ = test "cewou45i" (lazy(sprintf "%d" System.UInt64.MaxValue)) "18446744073709551615" let _ = test "cewou46a" (lazy(sprintf "%d" 0ul)) "0" let _ = test "cewou46b" (lazy(sprintf "%d" 5ul)) "5" @@ -135,6 +167,7 @@ let _ = test "cewou46e" (lazy(sprintf "%d" 2147483648ul)) "2147483648" let _ = test "cewou46f" (lazy(sprintf "%d" 4294967295ul)) "4294967295" let _ = test "cewou46g" (lazy(sprintf "%d" 2147483649ul)) "2147483649" let _ = test "cewou46h" (lazy(sprintf "%d" 2147483647ul)) "2147483647" +let _ = test "cewou46i" (lazy(sprintf "%d" System.UInt64.MaxValue)) "18446744073709551615" let _ = test "ceew903" (lazy(sprintf "%u" System.Int64.MaxValue)) "9223372036854775807" let _ = test "ceew903" (lazy(sprintf "%u" System.Int64.MinValue)) "9223372036854775808" 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 32534466417..4ae32a6ed01 100644 --- a/tests/fsharp/core/printing/z.output.test.1000.stderr.bsl +++ b/tests/fsharp/core/printing/z.output.test.1000.stderr.bsl @@ -1,6 +1,6 @@ #blaaaaaa // blaaaaaa is not a known command;; - ^ + ^^^^^^^^^ stdin(220,1): warning FS3353: Invalid directive '#blaaaaaa ' 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 32534466417..4ae32a6ed01 100644 --- a/tests/fsharp/core/printing/z.output.test.200.stderr.bsl +++ b/tests/fsharp/core/printing/z.output.test.200.stderr.bsl @@ -1,6 +1,6 @@ #blaaaaaa // blaaaaaa is not a known command;; - ^ + ^^^^^^^^^ stdin(220,1): warning FS3353: Invalid directive '#blaaaaaa ' 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 32534466417..4ae32a6ed01 100644 --- a/tests/fsharp/core/printing/z.output.test.default.stderr.bsl +++ b/tests/fsharp/core/printing/z.output.test.default.stderr.bsl @@ -1,6 +1,6 @@ #blaaaaaa // blaaaaaa is not a known command;; - ^ + ^^^^^^^^^ stdin(220,1): warning FS3353: Invalid directive '#blaaaaaa ' 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 32534466417..4ae32a6ed01 100644 --- a/tests/fsharp/core/printing/z.output.test.off.stderr.bsl +++ b/tests/fsharp/core/printing/z.output.test.off.stderr.bsl @@ -1,6 +1,6 @@ #blaaaaaa // blaaaaaa is not a known command;; - ^ + ^^^^^^^^^ stdin(220,1): warning FS3353: Invalid directive '#blaaaaaa ' 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 32534466417..4ae32a6ed01 100644 --- a/tests/fsharp/core/printing/z.output.test.quiet.stderr.bsl +++ b/tests/fsharp/core/printing/z.output.test.quiet.stderr.bsl @@ -1,6 +1,6 @@ #blaaaaaa // blaaaaaa is not a known command;; - ^ + ^^^^^^^^^ stdin(220,1): warning FS3353: Invalid directive '#blaaaaaa ' diff --git a/tests/fsharp/core/quotes/test.fsx b/tests/fsharp/core/quotes/test.fsx index bb4223edd12..6415c466a65 100644 --- a/tests/fsharp/core/quotes/test.fsx +++ b/tests/fsharp/core/quotes/test.fsx @@ -10,6 +10,13 @@ module Core_quotes #nowarn "57" +open System +open System.Reflection +open Microsoft.FSharp.Quotations +open Microsoft.FSharp.Quotations.Patterns +open Microsoft.FSharp.Quotations.DerivedPatterns + + let failures = ref [] let report_failure (s : string) = @@ -27,12 +34,19 @@ let check s v1 v2 = eprintf " FAILED: got %A, expected %A" v1 v2 report_failure s +let rec removeDoubleSpaces (s: string) = + let s2 = s.Replace(" ", " ") + if s = s2 then s else removeDoubleSpaces s2 -open System -open System.Reflection -open Microsoft.FSharp.Quotations -open Microsoft.FSharp.Quotations.Patterns -open Microsoft.FSharp.Quotations.DerivedPatterns +let normalizeActivePatternResults (s: string) = + System.Text.RegularExpressions.Regex(@"activePatternResult\d+").Replace(s, "activePatternResult") + +let checkStrings s (v1: string) (v2: string) = + check s + (v1.Replace("\r","").Replace("\n","") |> removeDoubleSpaces |> normalizeActivePatternResults) + (v2.Replace("\r","").Replace("\n","") |> removeDoubleSpaces |> normalizeActivePatternResults) + +let checkQuoteString s expected (q: Expr) = checkStrings s (sprintf "%A" q) expected let (|TypedValue|_|) (v : 'T) value = match value with @@ -1444,42 +1458,39 @@ end module MoreQuotationsTests = let t1 = <@@ try 1 with e when true -> 2 | e -> 3 @@> - printfn "t1 = %A" t1 - check "vwjnkwve0-vwnio" - (sprintf "%A" t1) - "TryWith (Value (1), matchValue, - IfThenElse (Let (e, matchValue, Value (true)), - Let (e, matchValue, Value (1)), - Let (e, matchValue, Value (1))), matchValue, - IfThenElse (Let (e, matchValue, Value (true)), - Let (e, matchValue, Value (2)), - Let (e, matchValue, Value (3))))" + checkStrings "vwjnkwve0-vwnio" + (sprintf "%A" t1) + """TryWith (Value (1), matchValue, + IfThenElse (Let (e, matchValue, Value (true)), + Let (e, matchValue, Value (1)), + Let (e, matchValue, Value (1))), matchValue, + IfThenElse (Let (e, matchValue, Value (true)), + Let (e, matchValue, Value (2)), + Let (e, matchValue, Value (3))))""" [] let k (x:int) = try 1 with _ when true -> 2 | e -> 3 let t2 = <@@ Map.empty.[0] @@> - printfn "t2 = %A" t2 - check "vwjnkwve0-vwnio1" + checkStrings "vwjnkwve0-vwnio1" (sprintf "%A" t2) "PropertyGet (Some (Call (None, Empty, [])), Item, [Value (0)])" let t4 = <@@ use a = new System.IO.StreamWriter(System.IO.Stream.Null) in a @@> - printfn "t4 = %A" t4 - check "vwjnkwve0-vwnio3" + checkStrings "vwjnkwve0-vwnio3" (sprintf "%A" t4) - "Let (a, NewObject (StreamWriter, FieldGet (None, Null)), + "Let (a, NewObject (StreamWriter, FieldGet (None, Null)), TryFinally (a, IfThenElse (TypeTest (IDisposable, Coerce (a, Object)), Call (Some (Call (None, UnboxGeneric, [Coerce (a, Object)])), Dispose, []), Value ())))" - check "vwjnkwve0-vwnio3fuull" + checkStrings "vwjnkwve0-vwnio3fuull" (t4.ToString(true)) - "Let (a, + "Let (a, NewObject (Void .ctor(System.IO.Stream), FieldGet (None, System.IO.Stream Null)), TryFinally (a, @@ -1492,47 +1503,129 @@ module MoreQuotationsTests = let t5 = <@@ try failwith "test" with _ when true -> 0 @@> - printfn "t5 = %A" t5 + checkStrings "vwekwvel5" (sprintf "%A" t5) + """TryWith (Call (None, FailWith, [Value ("test")]), matchValue, + IfThenElse (Value (true), Value (1), Value (0)), matchValue, + IfThenElse (Value (true), Value (0), Call (None, Reraise, [])))""" let t6 = <@@ let mutable a = 0 in a <- 2 @@> - printfn "t6 = %A" t6 + checkStrings "vwewvwewe6" (sprintf "%A" t6) + """Let (a, Value (0), VarSet (a, Value (2)))""" let f (x: _ byref) = x let t7 = <@@ let mutable a = 0 in f (&a) @@> - printfn "t7 = %A" t7 - - let t8 = <@@ for i in 1s .. 10s do printfn "%A" i @@> - printfn "t8 = %A" t8 + checkStrings "vwewvwewe7" (sprintf "%A" t7) + """Let (a, Value (0), Call (None, f, [AddressOf (a)]))""" - let t9 = <@@ try failwith "test" with Failure _ -> 0 @@> - printfn "t9 = %A" t9 + let t8 = <@@ for i in 1s .. 10s do printfn "%A" i @@> + checkStrings "vwewvwewe8" (sprintf "%A" t8) + """Let (inputSequence, Call (None, op_Range, [Value (1s), Value (10s)]), + Let (enumerator, Call (Some (inputSequence), GetEnumerator, []), + TryFinally (WhileLoop (Call (Some (enumerator), MoveNext, []), + Let (i, + PropertyGet (Some (enumerator), Current, + []), + Application (Let (clo1, + Call (None, + PrintFormatLine, + [Coerce (NewObject (PrintfFormat`5, + Value ("%A")), + PrintfFormat`4)]), + Lambda (arg10, + Application (clo1, + arg10))), + i))), + IfThenElse (TypeTest (IDisposable, + Coerce (enumerator, Object)), + Call (Some (Call (None, UnboxGeneric, + [Coerce (enumerator, Object)])), + Dispose, []), Value ()))))""" + + let t9() = <@@ try failwith "test" with Failure _ -> 0 @@> + checkStrings "vwewvwewe9" (sprintf "%A" (t9())) + """TryWith (Call (None, FailWith, [Value ("test")]), matchValue, + Let (activePatternResult1557, Call (None, FailurePattern, [matchValue]), + IfThenElse (UnionCaseTest (activePatternResult1557, Some), + Value (1), Value (0))), matchValue, + Let (activePatternResult1558, Call (None, FailurePattern, [matchValue]), + IfThenElse (UnionCaseTest (activePatternResult1558, Some), + Value (0), Call (None, Reraise, []))))""" let t9b = <@@ Failure "fil" @@> - printfn "t9b = %A" t9b + checkStrings "vwewvwewe9b" (sprintf "%A" t9b) + """Call (None, Failure, [Value ("fil")])""" + let t9c = <@@ match Failure "fil" with Failure msg -> msg | _ -> "no" @@> - printfn "t9c = %A" t9c + checkStrings "vwewvwewe9c" (sprintf "%A" t9c) + """Let (matchValue, Call (None, Failure, [Value ("fil")]), + Let (activePatternResult1564, Call (None, FailurePattern, [matchValue]), + IfThenElse (UnionCaseTest (activePatternResult1564, Some), + Let (msg, + PropertyGet (Some (activePatternResult1564), Value, + []), msg), Value ("no"))))""" let t10 = <@@ try failwith "test" with Failure _ -> 0 | _ -> 1 @@> - printfn "t10 = %A" t10 + checkStrings "vwewvwewe10" (sprintf "%A" t10) + """TryWith (Call (None, FailWith, [Value ("test")]), matchValue, + Let (activePatternResult1565, Call (None, FailurePattern, [matchValue]), + IfThenElse (UnionCaseTest (activePatternResult1565, Some), + Value (1), Value (1))), matchValue, + Let (activePatternResult1566, Call (None, FailurePattern, [matchValue]), + IfThenElse (UnionCaseTest (activePatternResult1566, Some), + Value (0), Value (1))))""" let t11 = <@@ try failwith "test" with :? System.NullReferenceException -> 0 @@> - printfn "t11 = %A" t11 + checkStrings "vwewvwewe11" (sprintf "%A" t11) + """TryWith (Call (None, FailWith, [Value ("test")]), matchValue, + IfThenElse (TypeTest (NullReferenceException, matchValue), Value (1), + Value (0)), matchValue, + IfThenElse (TypeTest (NullReferenceException, matchValue), Value (0), + Call (None, Reraise, [])))""" let t12 = <@@ try failwith "test" with :? System.NullReferenceException as n -> 0 @@> - printfn "t12 = %A" t12 + checkStrings "vwewvwewe12" (sprintf "%A" t12) + """TryWith (Call (None, FailWith, [Value ("test")]), matchValue, + IfThenElse (TypeTest (NullReferenceException, matchValue), + Let (n, Call (None, UnboxGeneric, [matchValue]), Value (1)), + Value (0)), matchValue, + IfThenElse (TypeTest (NullReferenceException, matchValue), + Let (n, Call (None, UnboxGeneric, [matchValue]), Value (0)), + Call (None, Reraise, [])))""" let t13 = <@@ try failwith "test" with Failure _ -> 1 | :? System.NullReferenceException as n -> 0 @@> - printfn "t13 = %A" t13 + checkStrings "vwewvwewe13" (sprintf "%A" t13) + """TryWith (Call (None, FailWith, [Value ("test")]), matchValue, + Let (activePatternResult1576, Call (None, FailurePattern, [matchValue]), + IfThenElse (UnionCaseTest (activePatternResult1576, Some), + Value (1), + IfThenElse (TypeTest (NullReferenceException, + matchValue), + Let (n, + Call (None, UnboxGeneric, + [matchValue]), Value (1)), + Value (0)))), matchValue, + Let (activePatternResult1577, Call (None, FailurePattern, [matchValue]), + IfThenElse (UnionCaseTest (activePatternResult1577, Some), + Value (1), + IfThenElse (TypeTest (NullReferenceException, + matchValue), + Let (n, + Call (None, UnboxGeneric, + [matchValue]), Value (0)), + Call (None, Reraise, [])))))""" let t14 = <@@ try failwith "test" with _ when true -> 0 @@> - printfn "t14 = %A" t14 + checkStrings "vwewvwewe13" (sprintf "%A" t14) + """TryWith (Call (None, FailWith, [Value ("test")]), matchValue, + IfThenElse (Value (true), Value (1), Value (0)), matchValue, + IfThenElse (Value (true), Value (0), Call (None, Reraise, [])))""" - let _ = <@@ let x : int option = None in x.IsSome @@> |> printfn "quote = %A" - let _ = <@@ let x : int option = None in x.IsNone @@> |> printfn "quote = %A" - let _ = <@@ let x : int option = None in x.Value @@> |> printfn "quote = %A" - let _ = <@@ let x : int option = None in x.ToString() @@> |> printfn "quote = %A" + let _ = <@@ let x : int option = None in x.IsSome @@> |> checkQuoteString "fqekhec1" """Let (x, NewUnionCase (None), Call (None, get_IsSome, [x]))""" + let _ = <@@ let x : int option = None in x.IsNone @@> |> checkQuoteString "fqekhec2" """Let (x, NewUnionCase (None), Call (None, get_IsNone, [x]))""" + let _ = <@@ let x : int option = None in x.Value @@> |> checkQuoteString "fqekhec3" """Let (x, NewUnionCase (None), PropertyGet (Some (x), Value, []))""" + let _ = <@@ let x : int option = None in x.ToString() @@> |> checkQuoteString "fqekhec4" """Let (x, NewUnionCase (None), Call (Some (x), ToString, []))""" module Extensions = type System.Object with @@ -1562,63 +1655,63 @@ module MoreQuotationsTests = member x.Int32ExtensionIndexer2 with set(idx:int) (v:int) = () let v = new obj() - let _ = <@@ v.ExtensionMethod0() @@> |> printfn "quote = %A" - let _ = <@@ v.ExtensionMethod1() @@> |> printfn "quote = %A" - let _ = <@@ v.ExtensionMethod2(3) @@> |> printfn "quote = %A" - let _ = <@@ v.ExtensionMethod3(3) @@> |> printfn "quote = %A" - let _ = <@@ v.ExtensionMethod4(3,4) @@> |> printfn "quote = %A" - let _ = <@@ v.ExtensionMethod5(3,4) @@> |> printfn "quote = %A" - let _ = <@@ v.ExtensionProperty1 @@> |> printfn "quote = %A" - let _ = <@@ v.ExtensionProperty2 @@> |> printfn "quote = %A" - let _ = <@@ v.ExtensionProperty3 <- 4 @@> |> printfn "quote = %A" - let _ = <@@ v.ExtensionIndexer1(3) @@> |> printfn "quote = %A" - let _ = <@@ v.ExtensionIndexer2(3) <- 4 @@> |> printfn "quote = %A" - - let _ = <@@ v.ExtensionMethod0 @@> |> printfn "quote = %A" - let _ = <@@ v.ExtensionMethod1 @@> |> printfn "quote = %A" - let _ = <@@ v.ExtensionMethod2 @@> |> printfn "quote = %A" - let _ = <@@ v.ExtensionMethod3 @@> |> printfn "quote = %A" - let _ = <@@ v.ExtensionMethod4 @@> |> printfn "quote = %A" - let _ = <@@ v.ExtensionMethod5 @@> |> printfn "quote = %A" + let _ = <@@ v.ExtensionMethod0() @@> |> checkQuoteString "fqekhec5" """Call (None, Object.ExtensionMethod0, [PropertyGet (None, v, [])])""" + let _ = <@@ v.ExtensionMethod1() @@> |> checkQuoteString "fqekhec6" """Call (None, Object.ExtensionMethod1, [PropertyGet (None, v, [])])""" + let _ = <@@ v.ExtensionMethod2(3) @@> |> checkQuoteString "fqekhec7" """Call (None, Object.ExtensionMethod2, [PropertyGet (None, v, []), Value (3)])""" + let _ = <@@ v.ExtensionMethod3(3) @@> |> checkQuoteString "fqekhec8" """Call (None, Object.ExtensionMethod3, [PropertyGet (None, v, []), Value (3)])""" + let _ = <@@ v.ExtensionMethod4(3,4) @@> |> checkQuoteString "fqekhec9" """Call (None, Object.ExtensionMethod4, [PropertyGet (None, v, []), Value (3), Value (4)])""" + let _ = <@@ v.ExtensionMethod5(3,4) @@> |> checkQuoteString "fqekhec10" """Call (None, Object.ExtensionMethod5, [PropertyGet (None, v, []), NewTuple (Value (3), Value (4))])""" + let _ = <@@ v.ExtensionProperty1 @@> |> checkQuoteString "fqekhec11" """Call (None, Object.get_ExtensionProperty1, [PropertyGet (None, v, [])])""" + let _ = <@@ v.ExtensionProperty2 @@> |> checkQuoteString "fqekhec12" """Call (None, Object.get_ExtensionProperty2, [PropertyGet (None, v, [])])""" + let _ = <@@ v.ExtensionProperty3 <- 4 @@> |> checkQuoteString "fqekhec13" """Call (None, Object.set_ExtensionProperty3, [PropertyGet (None, v, []), Value (4)])""" + let _ = <@@ v.ExtensionIndexer1(3) @@> |> checkQuoteString "fqekhec14" """Call (None, Object.get_ExtensionIndexer1, [PropertyGet (None, v, []), Value (3)])""" + let _ = <@@ v.ExtensionIndexer2(3) <- 4 @@> |> checkQuoteString "fqekhec15" """Call (None, Object.set_ExtensionIndexer2, [PropertyGet (None, v, []), Value (3), Value (4)])""" + + let _ = <@@ v.ExtensionMethod0 @@> |> checkQuoteString "fqekhec16" """Lambda (unitVar, Call (None, Object.ExtensionMethod0, [PropertyGet (None, v, [])]))""" + let _ = <@@ v.ExtensionMethod1 @@> |> checkQuoteString "fqekhec17" """Lambda (unitVar, Call (None, Object.ExtensionMethod1, [PropertyGet (None, v, [])]))""" + let _ = <@@ v.ExtensionMethod2 @@> |> checkQuoteString "fqekhec18" """Lambda (arg00, Call (None, Object.ExtensionMethod2, [PropertyGet (None, v, []), arg00]))""" + let _ = <@@ v.ExtensionMethod3 @@> |> checkQuoteString "fqekhec19" """Lambda (arg00, Call (None, Object.ExtensionMethod3, [PropertyGet (None, v, []), arg00]))""" + let _ = <@@ v.ExtensionMethod4 @@> |> checkQuoteString "fqekhec20" """Lambda (tupledArg, Let (arg00, TupleGet (tupledArg, 0), Let (arg01, TupleGet (tupledArg, 1), Call (None, Object.ExtensionMethod4, [PropertyGet (None, v, []), arg00, arg01]))))""" + let _ = <@@ v.ExtensionMethod5 @@> |> checkQuoteString "fqekhec21" """Lambda (arg00, Call (None, Object.ExtensionMethod5, [PropertyGet (None, v, []), arg00]))""" let v2 = 3 - let _ = <@@ v2.ExtensionMethod0() @@> |> printfn "quote = %A" - let _ = <@@ v2.ExtensionMethod1() @@> |> printfn "quote = %A" - let _ = <@@ v2.ExtensionMethod2(3) @@> |> printfn "quote = %A" - let _ = <@@ v2.ExtensionMethod3(3) @@> |> printfn "quote = %A" - let _ = <@@ v2.ExtensionMethod4(3,4) @@> |> printfn "quote = %A" - let _ = <@@ v2.ExtensionMethod5(3,4) @@> |> printfn "quote = %A" - let _ = <@@ v2.ExtensionProperty1 @@> |> printfn "quote = %A" - let _ = <@@ v2.ExtensionProperty2 @@> |> printfn "quote = %A" - let _ = <@@ v2.ExtensionProperty3 <- 4 @@> |> printfn "quote = %A" - let _ = <@@ v2.ExtensionIndexer1(3) @@> |> printfn "quote = %A" - let _ = <@@ v2.ExtensionIndexer2(3) <- 4 @@> |> printfn "quote = %A" - - let _ = <@@ v2.ExtensionMethod0 @@> |> printfn "quote = %A" - let _ = <@@ v2.ExtensionMethod1 @@> |> printfn "quote = %A" - let _ = <@@ v2.ExtensionMethod2 @@> |> printfn "quote = %A" - let _ = <@@ v2.ExtensionMethod3 @@> |> printfn "quote = %A" - let _ = <@@ v2.ExtensionMethod4 @@> |> printfn "quote = %A" - let _ = <@@ v2.ExtensionMethod5 @@> |> printfn "quote = %A" - - let _ = <@@ v2.Int32ExtensionMethod0() @@> |> printfn "quote = %A" - let _ = <@@ v2.Int32ExtensionMethod1() @@> |> printfn "quote = %A" - let _ = <@@ v2.Int32ExtensionMethod2(3) @@> |> printfn "quote = %A" - let _ = <@@ v2.Int32ExtensionMethod3(3) @@> |> printfn "quote = %A" - let _ = <@@ v2.Int32ExtensionMethod4(3,4) @@> |> printfn "quote = %A" - let _ = <@@ v2.Int32ExtensionMethod5(3,4) @@> |> printfn "quote = %A" - let _ = <@@ v2.Int32ExtensionProperty1 @@> |> printfn "quote = %A" - let _ = <@@ v2.Int32ExtensionProperty2 @@> |> printfn "quote = %A" - let _ = <@@ v2.Int32ExtensionProperty3 <- 4 @@> |> printfn "quote = %A" - let _ = <@@ v2.Int32ExtensionIndexer1(3) @@> |> printfn "quote = %A" - let _ = <@@ v2.Int32ExtensionIndexer2(3) <- 4 @@> |> printfn "quote = %A" - - let _ = <@@ v2.Int32ExtensionMethod0 @@> |> printfn "quote = %A" - let _ = <@@ v2.Int32ExtensionMethod1 @@> |> printfn "quote = %A" - let _ = <@@ v2.Int32ExtensionMethod2 @@> |> printfn "quote = %A" - let _ = <@@ v2.Int32ExtensionMethod3 @@> |> printfn "quote = %A" - let _ = <@@ v2.Int32ExtensionMethod4 @@> |> printfn "quote = %A" - let _ = <@@ v2.Int32ExtensionMethod5 @@> |> printfn "quote = %A" + let _ = <@@ v2.ExtensionMethod0() @@> |> checkQuoteString "fqekhec22" """Call (None, Object.ExtensionMethod0, [Coerce (PropertyGet (None, v2, []), Object)])""" + let _ = <@@ v2.ExtensionMethod1() @@> |> checkQuoteString "fqekhec23" """Call (None, Object.ExtensionMethod1, [Coerce (PropertyGet (None, v2, []), Object)])""" + let _ = <@@ v2.ExtensionMethod2(3) @@> |> checkQuoteString "fqekhec24" """Call (None, Object.ExtensionMethod2, [Coerce (PropertyGet (None, v2, []), Object), Value (3)])""" + let _ = <@@ v2.ExtensionMethod3(3) @@> |> checkQuoteString "fqekhec25" """Call (None, Object.ExtensionMethod3, [Coerce (PropertyGet (None, v2, []), Object), Value (3)])""" + let _ = <@@ v2.ExtensionMethod4(3,4) @@> |> checkQuoteString "fqekhec26" """Call (None, Object.ExtensionMethod4, [Coerce (PropertyGet (None, v2, []), Object), Value (3), Value (4)])""" + let _ = <@@ v2.ExtensionMethod5(3,4) @@> |> checkQuoteString "fqekhec27" """Call (None, Object.ExtensionMethod5, [Coerce (PropertyGet (None, v2, []), Object), NewTuple (Value (3), Value (4))])""" + let _ = <@@ v2.ExtensionProperty1 @@> |> checkQuoteString "fqekhec28" """Call (None, Object.get_ExtensionProperty1, [Coerce (PropertyGet (None, v2, []), Object)])""" + let _ = <@@ v2.ExtensionProperty2 @@> |> checkQuoteString "fqekhec29" """Call (None, Object.get_ExtensionProperty2, [Coerce (PropertyGet (None, v2, []), Object)])""" + let _ = <@@ v2.ExtensionProperty3 <- 4 @@> |> checkQuoteString "fqekhec30" """Call (None, Object.set_ExtensionProperty3, [Coerce (PropertyGet (None, v2, []), Object), Value (4)])""" + let _ = <@@ v2.ExtensionIndexer1(3) @@> |> checkQuoteString "fqekhec31" """Call (None, Object.get_ExtensionIndexer1, [Coerce (PropertyGet (None, v2, []), Object), Value (3)])""" + let _ = <@@ v2.ExtensionIndexer2(3) <- 4 @@> |> checkQuoteString "fqekhec32" """Call (None, Object.set_ExtensionIndexer2, [Coerce (PropertyGet (None, v2, []), Object), Value (3), Value (4)])""" + + let _ = <@@ v2.ExtensionMethod0 @@> |> checkQuoteString "fqekhec33" """Lambda (unitVar, Call (None, Object.ExtensionMethod0, [Coerce (PropertyGet (None, v2, []), Object)]))""" + let _ = <@@ v2.ExtensionMethod1 @@> |> checkQuoteString "fqekhec34" """Lambda (unitVar, Call (None, Object.ExtensionMethod1, [Coerce (PropertyGet (None, v2, []), Object)]))""" + let _ = <@@ v2.ExtensionMethod2 @@> |> checkQuoteString "fqekhec35" """Lambda (arg00, Call (None, Object.ExtensionMethod2, [Coerce (PropertyGet (None, v2, []), Object), arg00]))""" + let _ = <@@ v2.ExtensionMethod3 @@> |> checkQuoteString "fqekhec36" """Lambda (arg00, Call (None, Object.ExtensionMethod3, [Coerce (PropertyGet (None, v2, []), Object), arg00]))""" + let _ = <@@ v2.ExtensionMethod4 @@> |> checkQuoteString "fqekhec37" """Lambda (tupledArg, Let (arg00, TupleGet (tupledArg, 0), Let (arg01, TupleGet (tupledArg, 1), Call (None, Object.ExtensionMethod4, [Coerce (PropertyGet (None, v2, []), Object), arg00, arg01]))))""" + let _ = <@@ v2.ExtensionMethod5 @@> |> checkQuoteString "fqekhec38" """Lambda (arg00, Call (None, Object.ExtensionMethod5, [Coerce (PropertyGet (None, v2, []), Object), arg00]))""" + + let _ = <@@ v2.Int32ExtensionMethod0() @@> |> checkQuoteString "fqekhec39" """Call (None, Int32.Int32ExtensionMethod0, [PropertyGet (None, v2, [])])""" + let _ = <@@ v2.Int32ExtensionMethod1() @@> |> checkQuoteString "fqekhec40" """Call (None, Int32.Int32ExtensionMethod1, [PropertyGet (None, v2, [])])""" + let _ = <@@ v2.Int32ExtensionMethod2(3) @@> |> checkQuoteString "fqekhec41" """Call (None, Int32.Int32ExtensionMethod2, [PropertyGet (None, v2, []), Value (3)])""" + let _ = <@@ v2.Int32ExtensionMethod3(3) @@> |> checkQuoteString "fqekhec42" """Call (None, Int32.Int32ExtensionMethod3, [PropertyGet (None, v2, []), Value (3)])""" + let _ = <@@ v2.Int32ExtensionMethod4(3,4) @@> |> checkQuoteString "fqekhec43" """Call (None, Int32.Int32ExtensionMethod4, [PropertyGet (None, v2, []), Value (3), Value (4)])""" + let _ = <@@ v2.Int32ExtensionMethod5(3,4) @@> |> checkQuoteString "fqekhec44" """Call (None, Int32.Int32ExtensionMethod5, [PropertyGet (None, v2, []), NewTuple (Value (3), Value (4))])""" + let _ = <@@ v2.Int32ExtensionProperty1 @@> |> checkQuoteString "fqekhec45" """Call (None, Int32.get_Int32ExtensionProperty1, [PropertyGet (None, v2, [])])""" + let _ = <@@ v2.Int32ExtensionProperty2 @@> |> checkQuoteString "fqekhec46" """Call (None, Int32.get_Int32ExtensionProperty2, [PropertyGet (None, v2, [])])""" + let _ = <@@ v2.Int32ExtensionProperty3 <- 4 @@> |> checkQuoteString "fqekhec47" """Call (None, Int32.set_Int32ExtensionProperty3, [PropertyGet (None, v2, []), Value (4)])""" + let _ = <@@ v2.Int32ExtensionIndexer1(3) @@> |> checkQuoteString "fqekhec48" """Call (None, Int32.get_Int32ExtensionIndexer1, [PropertyGet (None, v2, []), Value (3)])""" + let _ = <@@ v2.Int32ExtensionIndexer2(3) <- 4 @@> |> checkQuoteString "fqekhec49" """Call (None, Int32.set_Int32ExtensionIndexer2, [PropertyGet (None, v2, []), Value (3), Value (4)])""" + + let _ = <@@ v2.Int32ExtensionMethod0 @@> |> checkQuoteString "fqekhec50" """Lambda (unitVar, Call (None, Int32.Int32ExtensionMethod0, [PropertyGet (None, v2, [])]))""" + let _ = <@@ v2.Int32ExtensionMethod1 @@> |> checkQuoteString "fqekhec51" """Lambda (unitVar, Call (None, Int32.Int32ExtensionMethod1, [PropertyGet (None, v2, [])]))""" + let _ = <@@ v2.Int32ExtensionMethod2 @@> |> checkQuoteString "fqekhec52" """Lambda (arg00, Call (None, Int32.Int32ExtensionMethod2, [PropertyGet (None, v2, []), arg00]))""" + let _ = <@@ v2.Int32ExtensionMethod3 @@> |> checkQuoteString "fqekhec53" """Lambda (arg00, Call (None, Int32.Int32ExtensionMethod3, [PropertyGet (None, v2, []), arg00]))""" + let _ = <@@ v2.Int32ExtensionMethod4 @@> |> checkQuoteString "fqekhec54" """Lambda (tupledArg, Let (arg00, TupleGet (tupledArg, 0), Let (arg01, TupleGet (tupledArg, 1), Call (None, Int32.Int32ExtensionMethod4, [PropertyGet (None, v2, []), arg00, arg01]))))""" + let _ = <@@ v2.Int32ExtensionMethod5 @@> |> checkQuoteString "fqekhec55" """Lambda (arg00, Call (None, Int32.Int32ExtensionMethod5, [PropertyGet (None, v2, []), arg00]))""" module QuotationConstructionTests = @@ -3912,9 +4005,120 @@ module TestQuotationOfListSum2 = test "check List.sum 216" false +module ComputationExpressionWithOptionalsAndParamArray = + open System + type InputKind = + | Text of placeholder:string option + | Password of placeholder: string option + type InputOptions = + { Label: string option + Kind : InputKind + Validators : (string -> bool) array } + type InputBuilder() = + member t.Yield(_) = + { Label = None + Kind = Text None + Validators = [||] } + [] + member this.Text(io, ?placeholder) = + { io with Kind = Text placeholder } + [] + member this.Password(io, ?placeholder) = + { io with Kind = Password placeholder } + [] + member this.Label(io, label) = + { io with Label = Some label } + [] + member this.Validators(io, [] validators) = + { io with Validators = validators } + + let input = InputBuilder() + let name = + input { + label "Name" + text + with_validators + (String.IsNullOrWhiteSpace >> not) + } + let email = + input { + label "Email" + text "Your email" + with_validators + (String.IsNullOrWhiteSpace >> not) + (fun s -> s.Contains "@") + } + let password = + input { + label "Password" + password "Must contains at least 6 characters, one number and one uppercase" + with_validators + (String.exists Char.IsUpper) + (String.exists Char.IsDigit) + (fun s -> s.Length >= 6) + } + check "vewhkvh1" name.Kind (Text None) + check "vewhkvh2" email.Kind (Text (Some "Your email")) + check "vewhkvh3" email.Label (Some "Email") + check "vewhkvh4" email.Validators.Length 2 + check "vewhkvh5" password.Label (Some "Password") + check "vewhkvh6" password.Validators.Length 3 #endif +module QuotationOfComputationExpressionZipOperation = + + type Builder() = + member __.Bind (x, f) = f x + member __.Return x = x + member __.For (x, f) = f x + member __.Yield x = x + [] + member __.Var (x, y, f) = f x y + + let builder = Builder() + + let q = + <@ builder { + let! x = 1 + var y in 2 + return x + y + } @> + + let actual = (q.ToString()) + checkStrings "brewbreebr" actual + """Application (Lambda (builder@, + Call (Some (builder@), For, + [Call (Some (builder@), Var, + [Call (Some (builder@), Bind, + [Value (1), + Lambda (_arg1, + Let (x, _arg1, + Call (Some (builder@), + Yield, [x])))]), + Value (2), + Lambda (x, Lambda (y, NewTuple (x, y)))]), + Lambda (_arg2, + Let (y, TupleGet (_arg2, 1), + Let (x, TupleGet (_arg2, 0), + Call (Some (builder@), Return, + [Call (None, op_Addition, + [x, y])]))))])), + PropertyGet (None, builder, []))""" + +module CheckEliminatedConstructs = + let isNullQuoted (ts : 't[]) = + <@ + match ts with + | null -> true + | _ -> false + @> + + let actual1 = ((isNullQuoted [| |]).ToString()) + checkStrings "brewbreebrvwe1" actual1 + """IfThenElse (Call (None, op_Equality, [ValueWithName ([||], ts), Value ()]), + Value (true), Value (false))""" + module TestAssemblyAttributes = let attributes = System.Reflection.Assembly.GetExecutingAssembly().GetCustomAttributes(false) diff --git a/tests/fsharp/readme.md b/tests/fsharp/readme.md index 639192c5a56..42960c28c31 100644 --- a/tests/fsharp/readme.md +++ b/tests/fsharp/readme.md @@ -49,7 +49,7 @@ let changeX() = x = 20 y = "test" """ - FSharpErrorSeverity.Warning + FSharpDiagnosticSeverity.Warning 20 (6, 5, 6, 11) "The result of this equality expression has type 'bool' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then mark the value 'mutable' and use the '<-' operator e.g. 'x <- expression'." diff --git a/tests/fsharp/single-test.fs b/tests/fsharp/single-test.fs index c12080d761e..31b26fa76cb 100644 --- a/tests/fsharp/single-test.fs +++ b/tests/fsharp/single-test.fs @@ -2,13 +2,12 @@ open System open System.IO -open System.Diagnostics open System.Reflection -open NUnit.Framework open TestFramework open HandleExpects +open FSharp.Compiler.IO -type Permutation = +type Permutation = | FSC_CORECLR | FSC_CORECLR_BUILDONLY | FSI_CORECLR @@ -95,7 +94,7 @@ let generateOverrides = // Arguments: // pc = ProjectConfiguration // outputType = OutputType.Exe, OutputType.Library or OutputType.Script -// targetFramework optimize = "net472" OR NETCOREAPP3.1 etc ... +// targetFramework optimize = "net472" or net5.0 etc ... // optimize = true or false // configuration = "Release" or "Debug" // @@ -210,12 +209,12 @@ let singleTestBuildAndRunCore cfg copyFiles p languageVersion = let extraSources = ["testlib.fsi";"testlib.fs";"test.mli";"test.ml";"test.fsi";"test.fs";"test2.fsi";"test2.fs";"test.fsx";"test2.fsx"] let utilitySources = [__SOURCE_DIRECTORY__ ++ "coreclr_utilities.fs"] let referenceItems = if String.IsNullOrEmpty(copyFiles) then [] else [copyFiles] - let framework = "netcoreapp3.1" + let framework = "net5.0" // Arguments: // outputType = OutputType.Exe, OutputType.Library or OutputType.Script // compilerType = "coreclr" or "net40" - // targetFramework optimize = "net472" OR NETCOREAPP3.1 etc ... + // targetFramework optimize = "net472" OR net5.0 etc ... // optimize = true or false let executeSingleTestBuildAndRun outputType compilerType targetFramework optimize buildOnly = let mutable result = false @@ -250,7 +249,7 @@ let singleTestBuildAndRunCore cfg copyFiles p languageVersion = let findFirstSourceFile (pc:ProjectConfiguration) = let sources = List.append pc.SourceItems pc.ExtraSourceItems - let found = sources |> List.tryFind(fun source -> File.Exists(Path.Combine(directory, source))) + let found = sources |> List.tryFind(fun source -> FileSystem.FileExistsShim(Path.Combine(directory, source))) match found with | Some p -> Path.Combine(directory, p) | None -> failwith "Missing SourceFile in test case" @@ -279,7 +278,7 @@ let singleTestBuildAndRunCore cfg copyFiles p languageVersion = let cfg = { cfg with Directory = directory } let result = execBothToOutNoCheck cfg directory buildOutputFile cfg.DotNetExe (sprintf "run -f %s" targetFramework) if not (buildOnly) then - result |> checkResult + result |> checkResult testOkFile.CheckExists() executeFsc compilerType targetFramework if buildOnly then verifyResults (findFirstSourceFile pc) buildOutputFile @@ -304,9 +303,9 @@ let singleTestBuildAndRunCore cfg copyFiles p languageVersion = printfn "Filename: %s" projectFileName match p with - | FSC_CORECLR -> executeSingleTestBuildAndRun OutputType.Exe "coreclr" "netcoreapp3.1" true false - | FSC_CORECLR_BUILDONLY -> executeSingleTestBuildAndRun OutputType.Exe "coreclr" "netcoreapp3.1" true true - | FSI_CORECLR -> executeSingleTestBuildAndRun OutputType.Script "coreclr" "netcoreapp3.1" true false + | FSC_CORECLR -> executeSingleTestBuildAndRun OutputType.Exe "coreclr" "net5.0" true false + | FSC_CORECLR_BUILDONLY -> executeSingleTestBuildAndRun OutputType.Exe "coreclr" "net5.0" true true + | FSI_CORECLR -> executeSingleTestBuildAndRun OutputType.Script "coreclr" "net5.0" true false #if !NETCOREAPP | FSC_BUILDONLY -> executeSingleTestBuildAndRun OutputType.Exe "net40" "net472" false true @@ -314,7 +313,7 @@ let singleTestBuildAndRunCore cfg copyFiles p languageVersion = | FSC_OPT_MINUS_DEBUG -> executeSingleTestBuildAndRun OutputType.Exe "net40" "net472" false false | FSI_FILE -> executeSingleTestBuildAndRun OutputType.Script "net40" "net472" true false - | FSI_STDIN -> + | FSI_STDIN -> use cleanup = (cleanUpFSharpCore cfg) use testOkFile = new FileGuard (getfullpath cfg "test.ok") let sources = extraSources |> List.filter (fileExists cfg) @@ -323,11 +322,11 @@ let singleTestBuildAndRunCore cfg copyFiles p languageVersion = testOkFile.CheckExists() - | GENERATED_SIGNATURE -> + | GENERATED_SIGNATURE -> use cleanup = (cleanUpFSharpCore cfg) - let source1 = - ["test.ml"; "test.fs"; "test.fsx"] + let source1 = + ["test.ml"; "test.fs"; "test.fsx"] |> List.rev |> List.tryFind (fileExists cfg) @@ -335,22 +334,22 @@ let singleTestBuildAndRunCore cfg copyFiles p languageVersion = log "Generated signature file..." fsc cfg "%s --sig:tmptest.fsi" cfg.fsc_flags ["tmptest.fs"] - (if File.Exists("FSharp.Core.dll") then log "found fsharp.core.dll after build" else log "found fsharp.core.dll after build") |> ignore + (if FileSystem.FileExistsShim("FSharp.Core.dll") then log "found fsharp.core.dll after build" else log "found fsharp.core.dll after build") |> ignore log "Compiling against generated signature file..." fsc cfg "%s -o:tmptest1.exe" cfg.fsc_flags ["tmptest.fsi";"tmptest.fs"] - (if File.Exists("FSharp.Core.dll") then log "found fsharp.core.dll after build" else log "found fsharp.core.dll after build") |> ignore + (if FileSystem.FileExistsShim("FSharp.Core.dll") then log "found fsharp.core.dll after build" else log "found fsharp.core.dll after build") |> ignore log "Verifying built .exe..." peverify cfg "tmptest1.exe" - | AS_DLL -> + | AS_DLL -> // Compile as a DLL to exercise pickling of interface data, then recompile the original source file referencing this DLL // THe second compilation will not utilize the information from the first in any meaningful way, but the // compiler will unpickle the interface and optimization data, so we test unpickling as well. use cleanup = (cleanUpFSharpCore cfg) use testOkFile = new FileGuard (getfullpath cfg "test.ok") - + let sources = extraSources |> List.filter (fileExists cfg) fsc cfg "%s --optimize -a -o:test--optimize-lib.dll -g --langversion:preview " cfg.fsc_flags sources @@ -364,13 +363,13 @@ let singleTestBuildAndRunCore cfg copyFiles p languageVersion = testOkFile.CheckExists() #endif -let singleTestBuildAndRunAux cfg p = +let singleTestBuildAndRunAux cfg p = singleTestBuildAndRunCore cfg "" p "latest" -let singleTestBuildAndRunWithCopyDlls cfg copyFiles p = +let singleTestBuildAndRunWithCopyDlls cfg copyFiles p = singleTestBuildAndRunCore cfg copyFiles p "latest" -let singleTestBuildAndRun dir p = +let singleTestBuildAndRun dir p = let cfg = testConfig dir singleTestBuildAndRunAux cfg p @@ -387,29 +386,29 @@ let singleVersionedNegTest (cfg: TestConfig) version testname = } // REM == Set baseline (fsc vs vs, in case the vs baseline exists) - let VSBSLFILE = + let VSBSLFILE = if (sprintf "%s.vsbsl" testname) |> (fileExists cfg) then sprintf "%s.vsbsl" testname else sprintf "%s.bsl" testname let sources = [ let src = [ testname + ".mli"; testname + ".fsi"; testname + ".ml"; testname + ".fs"; testname + ".fsx"; - testname + "a.mli"; testname + "a.fsi"; testname + "a.ml"; testname + "a.fs"; + testname + "a.mli"; testname + "a.fsi"; testname + "a.ml"; testname + "a.fs"; testname + "b.mli"; testname + "b.fsi"; testname + "b.ml"; testname + "b.fs"; ] yield! src |> List.filter (fileExists cfg) - if fileExists cfg "helloWorldProvider.dll" then + if fileExists cfg "helloWorldProvider.dll" then yield "-r:helloWorldProvider.dll" - if fileExists cfg (testname + "-pre.fs") then + if fileExists cfg (testname + "-pre.fs") then yield (sprintf "-r:%s-pre.dll" testname) ] if fileExists cfg (testname + "-pre.fs") then - fsc cfg "%s -a -o:%s-pre.dll" cfg.fsc_flags testname [testname + "-pre.fs"] + fsc cfg "%s -a -o:%s-pre.dll" cfg.fsc_flags testname [testname + "-pre.fs"] else () if fileExists cfg (testname + "-pre.fsx") then @@ -434,18 +433,18 @@ let singleVersionedNegTest (cfg: TestConfig) version testname = let vbslDiff = fsdiff cfg (sprintf "%s.vserr" testname) VSBSLFILE match diff,vbslDiff with - | "","" -> + | "","" -> log "Good, output %s.err matched %s.bsl" testname testname log "Good, output %s.vserr matched %s" testname VSBSLFILE - | l,"" -> - log "***** %s.err %s.bsl differed: a bug or baseline may need updating" testname testname + | l,"" -> + log "***** %s.err %s.bsl differed: a bug or baseline may need updating" testname testname failwithf "%s.err %s.bsl differ; %A" testname testname l | "",l -> log "Good, output %s.err matched %s.bsl" testname testname log "***** %s.vserr %s differed: a bug or baseline may need updating" testname VSBSLFILE failwithf "%s.vserr %s differ; %A" testname VSBSLFILE l - | l1,l2 -> - log "***** %s.err %s.bsl differed: a bug or baseline may need updating" testname testname + | l1,l2 -> + log "***** %s.err %s.bsl differed: a bug or baseline may need updating" testname testname log "***** %s.vserr %s differed: a bug or baseline may need updating" testname VSBSLFILE failwithf "%s.err %s.bsl differ; %A; %s.vserr %s differ; %A" testname testname l1 testname VSBSLFILE l2 diff --git a/tests/fsharp/tests.fs b/tests/fsharp/tests.fs index 5de0936fdab..214fbc8e821 100644 --- a/tests/fsharp/tests.fs +++ b/tests/fsharp/tests.fs @@ -30,229 +30,230 @@ let FSI_BASIC = FSI_FILE // ^^^^^^^^^^^^ To run these tests in F# Interactive , 'build net40', then send this chunk, then evaluate body of a test ^^^^^^^^^^^^ let inline getTestsDirectory dir = __SOURCE_DIRECTORY__ ++ dir -let singleTestBuildAndRun' = getTestsDirectory >> singleTestBuildAndRun -let singleTestBuildAndRunVersion' = getTestsDirectory >> singleTestBuildAndRunVersion -let testConfig' = getTestsDirectory >> testConfig +let singleTestBuildAndRun = getTestsDirectory >> singleTestBuildAndRun +let singleTestBuildAndRunVersion = getTestsDirectory >> singleTestBuildAndRunVersion +let testConfig = getTestsDirectory >> testConfig +[] module CoreTests = // These tests are enabled for .NET Framework and .NET Core [] - let ``access-FSC_BASIC``() = singleTestBuildAndRun' "core/access" FSC_BASIC + let ``access-FSC_BASIC``() = singleTestBuildAndRun "core/access" FSC_BASIC [] - let ``access-FSI_BASIC``() = singleTestBuildAndRun' "core/access" FSI_BASIC + let ``access-FSI_BASIC``() = singleTestBuildAndRun "core/access" FSI_BASIC [] - let ``apporder-FSC_BASIC`` () = singleTestBuildAndRun' "core/apporder" FSC_BASIC + let ``apporder-FSC_BASIC`` () = singleTestBuildAndRun "core/apporder" FSC_BASIC [] - let ``apporder-FSI_BASIC`` () = singleTestBuildAndRun' "core/apporder" FSI_BASIC + let ``apporder-FSI_BASIC`` () = singleTestBuildAndRun "core/apporder" FSI_BASIC [] - let ``array-FSC_BASIC`` () = singleTestBuildAndRun' "core/array" FSC_BASIC + let ``array-FSC_BASIC`` () = singleTestBuildAndRun "core/array" FSC_BASIC [] - let ``array-FSI_BASIC`` () = singleTestBuildAndRun' "core/array" FSI_BASIC + let ``array-FSI_BASIC`` () = singleTestBuildAndRun "core/array" FSI_BASIC [] - let ``comprehensions-FSC_BASIC`` () = singleTestBuildAndRun' "core/comprehensions" FSC_BASIC + let ``comprehensions-FSC_BASIC`` () = singleTestBuildAndRun "core/comprehensions" FSC_BASIC [] - let ``comprehensions-FSI_BASIC`` () = singleTestBuildAndRun' "core/comprehensions" FSI_BASIC + let ``comprehensions-FSI_BASIC`` () = singleTestBuildAndRun "core/comprehensions" FSI_BASIC [] - let ``comprehensionshw-FSC_BASIC`` () = singleTestBuildAndRun' "core/comprehensions-hw" FSC_BASIC + let ``comprehensionshw-FSC_BASIC`` () = singleTestBuildAndRun "core/comprehensions-hw" FSC_BASIC [] - let ``comprehensionshw-FSI_BASIC`` () = singleTestBuildAndRun' "core/comprehensions-hw" FSI_BASIC + let ``comprehensionshw-FSI_BASIC`` () = singleTestBuildAndRun "core/comprehensions-hw" FSI_BASIC [] - let ``genericmeasures-FSC_BASIC`` () = singleTestBuildAndRun' "core/genericmeasures" FSC_BASIC + let ``genericmeasures-FSC_BASIC`` () = singleTestBuildAndRun "core/genericmeasures" FSC_BASIC [] - let ``genericmeasures-FSI_BASIC`` () = singleTestBuildAndRun' "core/genericmeasures" FSI_BASIC + let ``genericmeasures-FSI_BASIC`` () = singleTestBuildAndRun "core/genericmeasures" FSI_BASIC [] - let ``innerpoly-FSC_BASIC`` () = singleTestBuildAndRun' "core/innerpoly" FSC_BASIC + let ``innerpoly-FSC_BASIC`` () = singleTestBuildAndRun "core/innerpoly" FSC_BASIC [] - let ``innerpoly-FSI_BASIC`` () = singleTestBuildAndRun' "core/innerpoly" FSI_BASIC + let ``innerpoly-FSI_BASIC`` () = singleTestBuildAndRun "core/innerpoly" FSI_BASIC [] - let ``namespaceAttributes-FSC_BASIC`` () = singleTestBuildAndRun' "core/namespaces" FSC_BASIC + let ``namespaceAttributes-FSC_BASIC`` () = singleTestBuildAndRun "core/namespaces" FSC_BASIC [] - let ``unicode2-FSC_BASIC`` () = singleTestBuildAndRun' "core/unicode" FSC_BASIC // TODO: fails on coreclr + let ``unicode2-FSC_BASIC`` () = singleTestBuildAndRun "core/unicode" FSC_BASIC // TODO: fails on coreclr [] - let ``unicode2-FSI_BASIC`` () = singleTestBuildAndRun' "core/unicode" FSI_BASIC + let ``unicode2-FSI_BASIC`` () = singleTestBuildAndRun "core/unicode" FSI_BASIC [] - let ``lazy test-FSC_BASIC`` () = singleTestBuildAndRun' "core/lazy" FSC_BASIC + let ``lazy test-FSC_BASIC`` () = singleTestBuildAndRun "core/lazy" FSC_BASIC [] - let ``lazy test-FSI_BASIC`` () = singleTestBuildAndRun' "core/lazy" FSI_BASIC + let ``lazy test-FSI_BASIC`` () = singleTestBuildAndRun "core/lazy" FSI_BASIC [] - let ``letrec-FSC_BASIC`` () = singleTestBuildAndRun' "core/letrec" FSC_BASIC + let ``letrec-FSC_BASIC`` () = singleTestBuildAndRun "core/letrec" FSC_BASIC [] - let ``letrec-FSI_BASIC`` () = singleTestBuildAndRun' "core/letrec" FSI_BASIC + let ``letrec-FSI_BASIC`` () = singleTestBuildAndRun "core/letrec" FSI_BASIC [] - let ``letrec (mutrec variations part one) FSC_BASIC`` () = singleTestBuildAndRun' "core/letrec-mutrec" FSC_BASIC + let ``letrec (mutrec variations part one) FSC_BASIC`` () = singleTestBuildAndRun "core/letrec-mutrec" FSC_BASIC [] - let ``letrec (mutrec variations part one) FSI_BASIC`` () = singleTestBuildAndRun' "core/letrec-mutrec" FSI_BASIC + let ``letrec (mutrec variations part one) FSI_BASIC`` () = singleTestBuildAndRun "core/letrec-mutrec" FSI_BASIC [] - let ``libtest-FSC_BASIC`` () = singleTestBuildAndRun' "core/libtest" FSC_BASIC + let ``libtest-FSC_BASIC`` () = singleTestBuildAndRun "core/libtest" FSC_BASIC [] - let ``libtest-FSI_BASIC`` () = singleTestBuildAndRun' "core/libtest" FSI_BASIC + let ``libtest-FSI_BASIC`` () = singleTestBuildAndRun "core/libtest" FSI_BASIC [] - let ``lift-FSC_BASIC`` () = singleTestBuildAndRun' "core/lift" FSC_BASIC + let ``lift-FSC_BASIC`` () = singleTestBuildAndRun "core/lift" FSC_BASIC [] - let ``lift-FSI_BASIC`` () = singleTestBuildAndRun' "core/lift" FSI_BASIC + let ``lift-FSI_BASIC`` () = singleTestBuildAndRun "core/lift" FSI_BASIC [] - let ``map-FSC_BASIC`` () = singleTestBuildAndRun' "core/map" FSC_BASIC + let ``map-FSC_BASIC`` () = singleTestBuildAndRun "core/map" FSC_BASIC [] - let ``map-FSI_BASIC`` () = singleTestBuildAndRun' "core/map" FSI_BASIC + let ``map-FSI_BASIC`` () = singleTestBuildAndRun "core/map" FSI_BASIC [] - let ``measures-FSC_BASIC`` () = singleTestBuildAndRun' "core/measures" FSC_BASIC + let ``measures-FSC_BASIC`` () = singleTestBuildAndRun "core/measures" FSC_BASIC [] - let ``measures-FSI_BASIC`` () = singleTestBuildAndRun' "core/measures" FSI_BASIC + let ``measures-FSI_BASIC`` () = singleTestBuildAndRun "core/measures" FSI_BASIC [] - let ``nested-FSC_BASIC`` () = singleTestBuildAndRun' "core/nested" FSC_BASIC + let ``nested-FSC_BASIC`` () = singleTestBuildAndRun "core/nested" FSC_BASIC [] - let ``nested-FSI_BASIC`` () = singleTestBuildAndRun' "core/nested" FSI_BASIC + let ``nested-FSI_BASIC`` () = singleTestBuildAndRun "core/nested" FSI_BASIC [] - let ``members-ops-FSC_BASIC`` () = singleTestBuildAndRun' "core/members/ops" FSC_BASIC + let ``members-ops-FSC_BASIC`` () = singleTestBuildAndRun "core/members/ops" FSC_BASIC [] - let ``members-ops-FSI_BASIC`` () = singleTestBuildAndRun' "core/members/ops" FSI_BASIC + let ``members-ops-FSI_BASIC`` () = singleTestBuildAndRun "core/members/ops" FSI_BASIC [] - let ``members-ops-mutrec-FSC_BASIC`` () = singleTestBuildAndRun' "core/members/ops-mutrec" FSC_BASIC + let ``members-ops-mutrec-FSC_BASIC`` () = singleTestBuildAndRun "core/members/ops-mutrec" FSC_BASIC [] - let ``members-ops-mutrec-FSI_BASIC`` () = singleTestBuildAndRun' "core/members/ops-mutrec" FSI_BASIC + let ``members-ops-mutrec-FSI_BASIC`` () = singleTestBuildAndRun "core/members/ops-mutrec" FSI_BASIC [] - let ``seq-FSC_BASIC`` () = singleTestBuildAndRun' "core/seq" FSC_BASIC + let ``seq-FSC_BASIC`` () = singleTestBuildAndRun "core/seq" FSC_BASIC [] - let ``seq-FSI_BASIC`` () = singleTestBuildAndRun' "core/seq" FSI_BASIC + let ``seq-FSI_BASIC`` () = singleTestBuildAndRun "core/seq" FSI_BASIC [] - let ``math-numbers-FSC_BASIC`` () = singleTestBuildAndRun' "core/math/numbers" FSC_BASIC + let ``math-numbers-FSC_BASIC`` () = singleTestBuildAndRun "core/math/numbers" FSC_BASIC [] - let ``math-numbers-FSI_BASIC`` () = singleTestBuildAndRun' "core/math/numbers" FSI_BASIC + let ``math-numbers-FSI_BASIC`` () = singleTestBuildAndRun "core/math/numbers" FSI_BASIC [] - let ``members-ctree-FSC_BASIC`` () = singleTestBuildAndRun' "core/members/ctree" FSC_BASIC + let ``members-ctree-FSC_BASIC`` () = singleTestBuildAndRun "core/members/ctree" FSC_BASIC [] - let ``members-ctree-FSI_BASIC`` () = singleTestBuildAndRun' "core/members/ctree" FSI_BASIC + let ``members-ctree-FSI_BASIC`` () = singleTestBuildAndRun "core/members/ctree" FSI_BASIC [] - let ``members-factors-FSC_BASIC`` () = singleTestBuildAndRun' "core/members/factors" FSC_BASIC + let ``members-factors-FSC_BASIC`` () = singleTestBuildAndRun "core/members/factors" FSC_BASIC [] - let ``members-factors-FSI_BASIC`` () = singleTestBuildAndRun' "core/members/factors" FSI_BASIC + let ``members-factors-FSI_BASIC`` () = singleTestBuildAndRun "core/members/factors" FSI_BASIC [] - let ``members-factors-mutrec-FSC_BASIC`` () = singleTestBuildAndRun' "core/members/factors-mutrec" FSC_BASIC + let ``members-factors-mutrec-FSC_BASIC`` () = singleTestBuildAndRun "core/members/factors-mutrec" FSC_BASIC [] - let ``members-factors-mutrec-FSI_BASIC`` () = singleTestBuildAndRun' "core/members/factors-mutrec" FSI_BASIC + let ``members-factors-mutrec-FSI_BASIC`` () = singleTestBuildAndRun "core/members/factors-mutrec" FSI_BASIC [] - let ``graph-FSC_BASIC`` () = singleTestBuildAndRun' "perf/graph" FSC_BASIC + let ``graph-FSC_BASIC`` () = singleTestBuildAndRun "perf/graph" FSC_BASIC [] - let ``graph-FSI_BASIC`` () = singleTestBuildAndRun' "perf/graph" FSI_BASIC + let ``graph-FSI_BASIC`` () = singleTestBuildAndRun "perf/graph" FSI_BASIC [] - let ``nbody-FSC_BASIC`` () = singleTestBuildAndRun' "perf/nbody" FSC_BASIC + let ``nbody-FSC_BASIC`` () = singleTestBuildAndRun "perf/nbody" FSC_BASIC [] - let ``nbody-FSI_BASIC`` () = singleTestBuildAndRun' "perf/nbody" FSI_BASIC + let ``nbody-FSI_BASIC`` () = singleTestBuildAndRun "perf/nbody" FSI_BASIC [] - let ``letrec (mutrec variations part two) FSC_BASIC`` () = singleTestBuildAndRun' "core/letrec-mutrec2" FSC_BASIC + let ``letrec (mutrec variations part two) FSC_BASIC`` () = singleTestBuildAndRun "core/letrec-mutrec2" FSC_BASIC [] - let ``letrec (mutrec variations part two) FSI_BASIC`` () = singleTestBuildAndRun' "core/letrec-mutrec2" FSI_BASIC + let ``letrec (mutrec variations part two) FSI_BASIC`` () = singleTestBuildAndRun "core/letrec-mutrec2" FSI_BASIC [] - let ``printf`` () = singleTestBuildAndRun' "core/printf" FSC_BASIC + let ``printf`` () = singleTestBuildAndRunVersion "core/printf" FSC_BASIC "preview" [] - let ``printf-interpolated`` () = singleTestBuildAndRunVersion' "core/printf-interpolated" FSC_BASIC "preview" + let ``printf-interpolated`` () = singleTestBuildAndRunVersion "core/printf-interpolated" FSC_BASIC "preview" [] - let ``tlr-FSC_BASIC`` () = singleTestBuildAndRun' "core/tlr" FSC_BASIC + let ``tlr-FSC_BASIC`` () = singleTestBuildAndRun "core/tlr" FSC_BASIC [] - let ``tlr-FSI_BASIC`` () = singleTestBuildAndRun' "core/tlr" FSI_BASIC + let ``tlr-FSI_BASIC`` () = singleTestBuildAndRun "core/tlr" FSI_BASIC [] - let ``subtype-FSC_BASIC`` () = singleTestBuildAndRun' "core/subtype" FSC_BASIC + let ``subtype-FSC_BASIC`` () = singleTestBuildAndRun "core/subtype" FSC_BASIC [] - let ``subtype-FSI_BASIC`` () = singleTestBuildAndRun' "core/subtype" FSI_BASIC + let ``subtype-FSI_BASIC`` () = singleTestBuildAndRun "core/subtype" FSI_BASIC [] - let ``syntax-FSC_BASIC`` () = singleTestBuildAndRun' "core/syntax" FSC_BASIC + let ``syntax-FSC_BASIC`` () = singleTestBuildAndRun "core/syntax" FSC_BASIC [] - let ``syntax-FSI_BASIC`` () = singleTestBuildAndRun' "core/syntax" FSI_BASIC + let ``syntax-FSI_BASIC`` () = singleTestBuildAndRun "core/syntax" FSI_BASIC [] - let ``test int32-FSC_BASIC`` () = singleTestBuildAndRun' "core/int32" FSC_BASIC + let ``test int32-FSC_BASIC`` () = singleTestBuildAndRun "core/int32" FSC_BASIC [] - let ``test int32-FSI_BASIC`` () = singleTestBuildAndRun' "core/int32" FSI_BASIC + let ``test int32-FSI_BASIC`` () = singleTestBuildAndRun "core/int32" FSI_BASIC [] - let ``quotes-FSC-BASIC`` () = singleTestBuildAndRun' "core/quotes" FSC_BASIC + let ``quotes-FSC-BASIC`` () = singleTestBuildAndRun "core/quotes" FSC_BASIC [] - let ``quotes-FSI-BASIC`` () = singleTestBuildAndRun' "core/quotes" FSI_BASIC + let ``quotes-FSI-BASIC`` () = singleTestBuildAndRun "core/quotes" FSI_BASIC [] - let ``recordResolution-FSC_BASIC`` () = singleTestBuildAndRun' "core/recordResolution" FSC_BASIC + let ``recordResolution-FSC_BASIC`` () = singleTestBuildAndRun "core/recordResolution" FSC_BASIC [] - let ``recordResolution-FSI_BASIC`` () = singleTestBuildAndRun' "core/recordResolution" FSI_BASIC + let ``recordResolution-FSI_BASIC`` () = singleTestBuildAndRun "core/recordResolution" FSI_BASIC [] let ``SDKTests`` () = - let cfg = testConfig' "SDKTests" + let cfg = testConfig "SDKTests" exec cfg cfg.DotNetExe ("msbuild " + Path.Combine(cfg.Directory, "AllSdkTargetsTests.proj") + " /p:Configuration=" + cfg.BUILD_CONFIG) #if !NETCOREAPP [] - let ``attributes-FSC_BASIC`` () = singleTestBuildAndRun' "core/attributes" FSC_BASIC + let ``attributes-FSC_BASIC`` () = singleTestBuildAndRun "core/attributes" FSC_BASIC [] - let ``attributes-FSI_BASIC`` () = singleTestBuildAndRun' "core/attributes" FSI_BASIC + let ``attributes-FSI_BASIC`` () = singleTestBuildAndRun "core/attributes" FSI_BASIC [] let byrefs () = - let cfg = testConfig' "core/byrefs" + let cfg = testConfig "core/byrefs" begin use testOkFile = fileguard cfg "test.ok" @@ -306,7 +307,7 @@ module CoreTests = [] let span () = - let cfg = testConfig' "core/span" + let cfg = testConfig "core/span" let cfg = { cfg with fsc_flags = sprintf "%s --test:StackSpan" cfg.fsc_flags} @@ -351,7 +352,7 @@ module CoreTests = [] let asyncStackTraces () = - let cfg = testConfig' "core/asyncStackTraces" + let cfg = testConfig "core/asyncStackTraces" use testOkFile = fileguard cfg "test.ok" @@ -363,7 +364,7 @@ module CoreTests = [] let ``lots-of-conditionals``() = - let cfg = testConfig' "core/large/conditionals" + let cfg = testConfig "core/large/conditionals" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeConditionals-200.fs"] exec cfg ("." ++ "test.exe") "" @@ -371,7 +372,7 @@ module CoreTests = [] let ``lots-of-conditionals-maxtested``() = - let cfg = testConfig' "core/large/conditionals" + let cfg = testConfig "core/large/conditionals" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeConditionals-maxtested.fs"] exec cfg ("." ++ "test.exe") "" @@ -379,7 +380,7 @@ module CoreTests = [] let ``lots-of-lets``() = - let cfg = testConfig' "core/large/lets" + let cfg = testConfig "core/large/lets" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeLets-500.fs"] exec cfg ("." ++ "test.exe") "" @@ -387,7 +388,7 @@ module CoreTests = [] let ``lots-of-lets-maxtested``() = - let cfg = testConfig' "core/large/lets" + let cfg = testConfig "core/large/lets" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeLets-maxtested.fs"] exec cfg ("." ++ "test.exe") "" @@ -395,7 +396,7 @@ module CoreTests = [] let ``lots-of-lists``() = - let cfg = testConfig' "core/large/lists" + let cfg = testConfig "core/large/lists" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test-500.exe " cfg.fsc_flags ["LargeList-500.fs"] exec cfg ("." ++ "test-500.exe") "" @@ -403,7 +404,7 @@ module CoreTests = [] let ``lots-of-matches``() = - let cfg = testConfig' "core/large/matches" + let cfg = testConfig "core/large/matches" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeMatches-200.fs"] exec cfg ("." ++ "test.exe") "" @@ -411,7 +412,7 @@ module CoreTests = [] let ``lots-of-matches-maxtested``() = - let cfg = testConfig' "core/large/matches" + let cfg = testConfig "core/large/matches" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeMatches-maxtested.fs"] exec cfg ("." ++ "test.exe") "" @@ -419,7 +420,7 @@ module CoreTests = [] let ``lots-of-sequential-and-let``() = - let cfg = testConfig' "core/large/mixed" + let cfg = testConfig "core/large/mixed" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeSequentialLet-500.fs"] exec cfg ("." ++ "test.exe") "" @@ -427,7 +428,7 @@ module CoreTests = [] let ``lots-of-sequential-and-let-maxtested``() = - let cfg = testConfig' "core/large/mixed" + let cfg = testConfig "core/large/mixed" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeSequentialLet-maxtested.fs"] exec cfg ("." ++ "test.exe") "" @@ -435,7 +436,7 @@ module CoreTests = [] let ``lots-of-sequential``() = - let cfg = testConfig' "core/large/sequential" + let cfg = testConfig "core/large/sequential" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeSequential-500.fs"] exec cfg ("." ++ "test.exe") "" @@ -443,7 +444,7 @@ module CoreTests = [] let ``lots-of-sequential-maxtested``() = - let cfg = testConfig' "core/large/sequential" + let cfg = testConfig "core/large/sequential" use testOkFile = fileguard cfg "test.ok" fsc cfg "%s -o:test.exe " cfg.fsc_flags ["LargeSequential-maxtested.fs"] exec cfg ("." ++ "test.exe") "" @@ -452,59 +453,59 @@ module CoreTests = #endif [] - let ``control-FSC_BASIC`` () = singleTestBuildAndRun' "core/control" FSC_BASIC + let ``control-FSC_BASIC`` () = singleTestBuildAndRun "core/control" FSC_BASIC [] - let ``control-FSI_BASIC`` () = singleTestBuildAndRun' "core/control" FSI_BASIC + let ``control-FSI_BASIC`` () = singleTestBuildAndRun "core/control" FSI_BASIC [] let ``control --tailcalls`` () = - let cfg = testConfig' "core/control" + let cfg = testConfig "core/control" singleTestBuildAndRunAux {cfg with fsi_flags = " --tailcalls" } FSC_BASIC [] let ``controlChamenos-FSC_BASIC`` () = - let cfg = testConfig' "core/controlChamenos" + let cfg = testConfig "core/controlChamenos" singleTestBuildAndRunAux {cfg with fsi_flags = " --tailcalls" } FSC_BASIC [] let ``controlChamenos-FSI_BASIC`` () = - let cfg = testConfig' "core/controlChamenos" + let cfg = testConfig "core/controlChamenos" singleTestBuildAndRunAux {cfg with fsi_flags = " --tailcalls" } FSI_BASIC [] - let ``controlMailbox-FSC_BASIC`` () = singleTestBuildAndRun' "core/controlMailbox" FSC_BASIC + let ``controlMailbox-FSC_BASIC`` () = singleTestBuildAndRun "core/controlMailbox" FSC_BASIC [] - let ``controlMailbox-FSI_BASIC`` () = singleTestBuildAndRun' "core/controlMailbox" FSI_BASIC + let ``controlMailbox-FSI_BASIC`` () = singleTestBuildAndRun "core/controlMailbox" FSI_BASIC [] let ``controlMailbox --tailcalls`` () = - let cfg = testConfig' "core/controlMailbox" + let cfg = testConfig "core/controlMailbox" singleTestBuildAndRunAux {cfg with fsi_flags = " --tailcalls" } FSC_BASIC [] - let ``csext-FSC_BASIC`` () = singleTestBuildAndRun' "core/csext" FSC_BASIC + let ``csext-FSC_BASIC`` () = singleTestBuildAndRun "core/csext" FSC_BASIC [] - let ``csext-FSI_BASIC`` () = singleTestBuildAndRun' "core/csext" FSI_BASIC + let ``csext-FSI_BASIC`` () = singleTestBuildAndRun "core/csext" FSI_BASIC [] - let ``enum-FSC_BASIC`` () = singleTestBuildAndRun' "core/enum" FSC_BASIC + let ``enum-FSC_BASIC`` () = singleTestBuildAndRun "core/enum" FSC_BASIC [] - let ``enum-FSI_BASIC`` () = singleTestBuildAndRun' "core/enum" FSI_BASIC + let ``enum-FSI_BASIC`` () = singleTestBuildAndRun "core/enum" FSI_BASIC #if !NETCOREAPP // Requires winforms will not run on coreclr [] - let controlWpf () = singleTestBuildAndRun' "core/controlwpf" FSC_BASIC + let controlWpf () = singleTestBuildAndRun "core/controlwpf" FSC_BASIC // These tests are enabled for .NET Framework [] let ``anon-FSC_BASIC``() = - let cfg = testConfig' "core/anon" + let cfg = testConfig "core/anon" fsc cfg "%s -a -o:lib.dll" cfg.fsc_flags ["lib.fs"] @@ -532,7 +533,7 @@ module CoreTests = [] let events () = - let cfg = testConfig' "core/events" + let cfg = testConfig "core/events" fsc cfg "%s -a -o:test.dll -g" cfg.fsc_flags ["test.fs"] @@ -603,7 +604,7 @@ module CoreTests = [] let forwarders () = - let cfg = testConfig' "core/forwarders" + let cfg = testConfig "core/forwarders" mkdir cfg "orig" mkdir cfg "split" @@ -636,7 +637,7 @@ module CoreTests = [] let fsfromcs () = - let cfg = testConfig' "core/fsfromcs" + let cfg = testConfig "core/fsfromcs" fsc cfg "%s -a --doc:lib.xml -o:lib.dll -g" cfg.fsc_flags ["lib.fs"] @@ -656,7 +657,7 @@ module CoreTests = [] let fsfromfsviacs () = - let cfg = testConfig' "core/fsfromfsviacs" + let cfg = testConfig "core/fsfromfsviacs" fsc cfg "%s -a -o:lib.dll -g" cfg.fsc_flags ["lib.fs"] @@ -711,7 +712,7 @@ module CoreTests = [] let ``fsi-reference`` () = - let cfg = testConfig' "core/fsi-reference" + let cfg = testConfig "core/fsi-reference" begin use testOkFile = fileguard cfg "test.ok" @@ -723,7 +724,7 @@ module CoreTests = [] let ``fsi-reload`` () = - let cfg = testConfig' "core/fsi-reload" + let cfg = testConfig "core/fsi-reload" begin use testOkFile = fileguard cfg "test.ok" @@ -749,7 +750,7 @@ module CoreTests = [] let fsiAndModifiers () = - let cfg = testConfig' "core/fsiAndModifiers" + let cfg = testConfig "core/fsiAndModifiers" do if fileExists cfg "TestLibrary.dll" then rm cfg "TestLibrary.dll" @@ -762,12 +763,12 @@ module CoreTests = testOkFile.CheckExists() [] - let ``genericmeasures-AS_DLL`` () = singleTestBuildAndRun' "core/genericmeasures" AS_DLL + let ``genericmeasures-AS_DLL`` () = singleTestBuildAndRun "core/genericmeasures" AS_DLL [] let hiding () = - let cfg = testConfig' "core/hiding" + let cfg = testConfig "core/hiding" fsc cfg "%s -a --optimize -o:lib.dll" cfg.fsc_flags ["lib.mli";"lib.ml";"libv.ml"] @@ -782,11 +783,11 @@ module CoreTests = peverify cfg "client.exe" [] - let ``innerpoly-AS_DLL`` () = singleTestBuildAndRun' "core/innerpoly" AS_DLL + let ``innerpoly-AS_DLL`` () = singleTestBuildAndRun "core/innerpoly" AS_DLL [] let queriesCustomQueryOps () = - let cfg = testConfig' "core/queriesCustomQueryOps" + let cfg = testConfig "core/queriesCustomQueryOps" fsc cfg """%s -o:test.exe -g""" cfg.fsc_flags ["test.fsx"] @@ -827,7 +828,7 @@ module CoreTests = // then /// windiff z.output.test.default.stdout.bsl a.out let printing flag diffFileOut expectedFileOut diffFileErr expectedFileErr = - let cfg = testConfig' "core/printing" + let cfg = testConfig "core/printing" if requireENCulture () then @@ -912,7 +913,7 @@ module CoreTests = let signedtest(programId:string, args:string, expectedSigning:SigningType) = - let cfg = testConfig' "core/signedtests" + let cfg = testConfig "core/signedtests" let newFlags = cfg.fsc_flags + " " + args let exefile = programId + ".exe" @@ -992,12 +993,12 @@ module CoreTests = #if !NETCOREAPP [] let quotes () = - let cfg = testConfig' "core/quotes" + let cfg = testConfig "core/quotes" csc cfg """/nologo /target:library /out:cslib.dll""" ["cslib.cs"] - fsc cfg "%s --define:LANGVERSION_PREVIEW --langversion:5.0 -o:test.exe -r cslib.dll -g" cfg.fsc_flags ["test.fsx"] + fsc cfg "%s --define:LANGVERSION_PREVIEW --langversion:preview -o:test.exe -r cslib.dll -g" cfg.fsc_flags ["test.fsx"] peverify cfg "test.exe" @@ -1037,7 +1038,7 @@ module CoreTests = [] let parsing () = - let cfg = testConfig' "core/parsing" + let cfg = testConfig "core/parsing" fsc cfg "%s -a -o:crlf.dll -g" cfg.fsc_flags ["crlf.ml"] @@ -1047,7 +1048,7 @@ module CoreTests = [] let unicode () = - let cfg = testConfig' "core/unicode" + let cfg = testConfig "core/unicode" fsc cfg "%s -a -o:kanji-unicode-utf8-nosig-codepage-65001.dll -g" cfg.fsc_flags ["kanji-unicode-utf8-nosig-codepage-65001.fs"] @@ -1072,7 +1073,7 @@ module CoreTests = [] let internalsvisible () = - let cfg = testConfig' "core/internalsvisible" + let cfg = testConfig "core/internalsvisible" // Compiling F# Library fsc cfg "%s --version:1.2.3 --keyfile:key.snk -a --optimize -o:library.dll" cfg.fsc_flags ["library.fsi"; "library.fs"] @@ -1096,7 +1097,7 @@ module CoreTests = // Repro for https://github.com/Microsoft/visualfsharp/issues/1298 [] let fileorder () = - let cfg = testConfig' "core/fileorder" + let cfg = testConfig "core/fileorder" log "== Compiling F# Library and Code, when empty file libfile2.fs IS NOT included" fsc cfg "%s -a --optimize -o:lib.dll " cfg.fsc_flags ["libfile1.fs"] @@ -1123,7 +1124,7 @@ module CoreTests = // Repro for https://github.com/Microsoft/visualfsharp/issues/2679 [] let ``add files with same name from different folders`` () = - let cfg = testConfig' "core/samename" + let cfg = testConfig "core/samename" log "== Compiling F# Code with files with same name in different folders" fsc cfg "%s -o:test.exe" cfg.fsc_flags ["folder1/a.fs"; "folder1/b.fs"; "folder2/a.fs"; "folder2/b.fs"] @@ -1134,7 +1135,7 @@ module CoreTests = [] let ``add files with same name from different folders including signature files`` () = - let cfg = testConfig' "core/samename" + let cfg = testConfig "core/samename" log "== Compiling F# Code with files with same name in different folders including signature files" fsc cfg "%s -o:test.exe" cfg.fsc_flags ["folder1/a.fsi"; "folder1/a.fs"; "folder1/b.fsi"; "folder1/b.fs"; "folder2/a.fsi"; "folder2/a.fs"; "folder2/b.fsi"; "folder2/b.fs"] @@ -1145,7 +1146,7 @@ module CoreTests = [] let ``add files with same name from different folders including signature files that are not synced`` () = - let cfg = testConfig' "core/samename" + let cfg = testConfig "core/samename" log "== Compiling F# Code with files with same name in different folders including signature files" fsc cfg "%s -o:test.exe" cfg.fsc_flags ["folder1/a.fsi"; "folder1/a.fs"; "folder1/b.fs"; "folder2/a.fsi"; "folder2/a.fs"; "folder2/b.fsi"; "folder2/b.fs"] @@ -1155,21 +1156,21 @@ module CoreTests = exec cfg ("." ++ "test.exe") "" [] - let ``libtest-FSI_STDIN`` () = singleTestBuildAndRun' "core/libtest" FSI_STDIN + let ``libtest-FSI_STDIN`` () = singleTestBuildAndRun "core/libtest" FSI_STDIN [] - let ``libtest-GENERATED_SIGNATURE`` () = singleTestBuildAndRun' "core/libtest" GENERATED_SIGNATURE + let ``libtest-GENERATED_SIGNATURE`` () = singleTestBuildAndRun "core/libtest" GENERATED_SIGNATURE [] - let ``libtest-FSC_OPT_MINUS_DEBUG`` () = singleTestBuildAndRun' "core/libtest" FSC_OPT_MINUS_DEBUG + let ``libtest-FSC_OPT_MINUS_DEBUG`` () = singleTestBuildAndRun "core/libtest" FSC_OPT_MINUS_DEBUG [] - let ``libtest-AS_DLL`` () = singleTestBuildAndRun' "core/libtest" AS_DLL + let ``libtest-AS_DLL`` () = singleTestBuildAndRun "core/libtest" AS_DLL [] let ``no-warn-2003-tests`` () = // see https://github.com/Microsoft/visualfsharp/issues/3139 - let cfg = testConfig' "core/versionAttributes" + let cfg = testConfig "core/versionAttributes" let stdoutPath = "out.stdout.txt" |> getfullpath cfg let stderrPath = "out.stderr.txt" |> getfullpath cfg let stderrBaseline = "out.stderr.bsl" |> getfullpath cfg @@ -1228,7 +1229,7 @@ module CoreTests = [] let ``load-script`` () = - let cfg = testConfig' "core/load-script" + let cfg = testConfig "core/load-script" let stdoutPath = "out.stdout.txt" |> getfullpath cfg let stderrPath = "out.stderr.txt" |> getfullpath cfg @@ -1357,68 +1358,68 @@ module CoreTests = #endif [] - let ``longnames-FSC_BASIC`` () = singleTestBuildAndRun' "core/longnames" FSC_BASIC + let ``longnames-FSC_BASIC`` () = singleTestBuildAndRun "core/longnames" FSC_BASIC [] - let ``longnames-FSI_BASIC`` () = singleTestBuildAndRun' "core/longnames" FSI_BASIC + let ``longnames-FSI_BASIC`` () = singleTestBuildAndRun "core/longnames" FSI_BASIC [] - let ``math-numbersVS2008-FSC_BASIC`` () = singleTestBuildAndRun' "core/math/numbersVS2008" FSC_BASIC + let ``math-numbersVS2008-FSC_BASIC`` () = singleTestBuildAndRun "core/math/numbersVS2008" FSC_BASIC [] - let ``math-numbersVS2008-FSI_BASIC`` () = singleTestBuildAndRun' "core/math/numbersVS2008" FSI_BASIC + let ``math-numbersVS2008-FSI_BASIC`` () = singleTestBuildAndRun "core/math/numbersVS2008" FSI_BASIC [] - let ``patterns-FSC_BASIC`` () = singleTestBuildAndRun' "core/patterns" FSC_BASIC + let ``patterns-FSC_BASIC`` () = singleTestBuildAndRun "core/patterns" FSC_BASIC //BUGBUG: https://github.com/Microsoft/visualfsharp/issues/6601 // [] // let ``patterns-FSI_BASIC`` () = singleTestBuildAndRun' "core/patterns" FSI_BASIC [] - let ``pinvoke-FSC_BASIC`` () = singleTestBuildAndRun' "core/pinvoke" FSC_BASIC + let ``pinvoke-FSC_BASIC`` () = singleTestBuildAndRun "core/pinvoke" FSC_BASIC [] let ``pinvoke-FSI_BASIC`` () = - singleTestBuildAndRun' "core/pinvoke" FSI_BASIC + singleTestBuildAndRun "core/pinvoke" FSI_BASIC [] - let ``fsi_load-FSC_BASIC`` () = singleTestBuildAndRun' "core/fsi-load" FSC_BASIC + let ``fsi_load-FSC_BASIC`` () = singleTestBuildAndRun "core/fsi-load" FSC_BASIC [] - let ``fsi_load-FSI_BASIC`` () = singleTestBuildAndRun' "core/fsi-load" FSI_BASIC + let ``fsi_load-FSI_BASIC`` () = singleTestBuildAndRun "core/fsi-load" FSI_BASIC #if !NETCOREAPP [] - let ``measures-AS_DLL`` () = singleTestBuildAndRun' "core/measures" AS_DLL + let ``measures-AS_DLL`` () = singleTestBuildAndRun "core/measures" AS_DLL [] - let ``members-basics-AS_DLL`` () = singleTestBuildAndRun' "core/members/basics" AS_DLL + let ``members-basics-AS_DLL`` () = singleTestBuildAndRun "core/members/basics" AS_DLL [] - let ``members-basics-hw`` () = singleTestBuildAndRun' "core/members/basics-hw" FSC_BASIC + let ``members-basics-hw`` () = singleTestBuildAndRun "core/members/basics-hw" FSC_BASIC [] - let ``members-basics-hw-mutrec`` () = singleTestBuildAndRun' "core/members/basics-hw-mutrec" FSC_BASIC + let ``members-basics-hw-mutrec`` () = singleTestBuildAndRun "core/members/basics-hw-mutrec" FSC_BASIC [] - let ``members-incremental-FSC_BASIC`` () = singleTestBuildAndRun' "core/members/incremental" FSC_BASIC + let ``members-incremental-FSC_BASIC`` () = singleTestBuildAndRun "core/members/incremental" FSC_BASIC [] - let ``members-incremental-FSI_BASIC`` () = singleTestBuildAndRun' "core/members/incremental" FSI_BASIC + let ``members-incremental-FSI_BASIC`` () = singleTestBuildAndRun "core/members/incremental" FSI_BASIC [] - let ``members-incremental-hw-FSC_BASIC`` () = singleTestBuildAndRun' "core/members/incremental-hw" FSC_BASIC + let ``members-incremental-hw-FSC_BASIC`` () = singleTestBuildAndRun "core/members/incremental-hw" FSC_BASIC [] - let ``members-incremental-hw-FSI_BASIC`` () = singleTestBuildAndRun' "core/members/incremental-hw" FSI_BASIC + let ``members-incremental-hw-FSI_BASIC`` () = singleTestBuildAndRun "core/members/incremental-hw" FSI_BASIC [] - let ``members-incremental-hw-mutrec-FSC_BASIC`` () = singleTestBuildAndRun' "core/members/incremental-hw-mutrec" FSC_BASIC + let ``members-incremental-hw-mutrec-FSC_BASIC`` () = singleTestBuildAndRun "core/members/incremental-hw-mutrec" FSC_BASIC [] let queriesLeafExpressionConvert () = - let cfg = testConfig' "core/queriesLeafExpressionConvert" + let cfg = testConfig "core/queriesLeafExpressionConvert" fsc cfg "%s -o:test.exe -g" cfg.fsc_flags ["test.fsx"] @@ -1449,7 +1450,7 @@ module CoreTests = [] let queriesNullableOperators () = - let cfg = testConfig' "core/queriesNullableOperators" + let cfg = testConfig "core/queriesNullableOperators" fsc cfg "%s -o:test.exe -g" cfg.fsc_flags ["test.fsx"] @@ -1473,7 +1474,7 @@ module CoreTests = [] let queriesOverIEnumerable () = - let cfg = testConfig' "core/queriesOverIEnumerable" + let cfg = testConfig "core/queriesOverIEnumerable" fsc cfg "%s -o:test.exe -g" cfg.fsc_flags ["test.fsx"] @@ -1503,7 +1504,7 @@ module CoreTests = [] let queriesOverIQueryable () = - let cfg = testConfig' "core/queriesOverIQueryable" + let cfg = testConfig "core/queriesOverIQueryable" fsc cfg "%s -o:test.exe -g" cfg.fsc_flags ["test.fsx"] @@ -1534,7 +1535,7 @@ module CoreTests = [] let quotesDebugInfo () = - let cfg = testConfig' "core/quotesDebugInfo" + let cfg = testConfig "core/quotesDebugInfo" fsc cfg "%s --quotations-debug+ --optimize -o:test.exe -g" cfg.fsc_flags ["test.fsx"] @@ -1565,7 +1566,7 @@ module CoreTests = [] let quotesInMultipleModules () = - let cfg = testConfig' "core/quotesInMultipleModules" + let cfg = testConfig "core/quotesInMultipleModules" fsc cfg "%s -o:module1.dll --target:library" cfg.fsc_flags ["module1.fsx"] @@ -1614,15 +1615,15 @@ module CoreTests = #endif [] - let ``reflect-FSC_BASIC`` () = singleTestBuildAndRun' "core/reflect" FSC_BASIC + let ``reflect-FSC_BASIC`` () = singleTestBuildAndRun "core/reflect" FSC_BASIC [] - let ``reflect-FSI_BASIC`` () = singleTestBuildAndRun' "core/reflect" FSI_BASIC + let ``reflect-FSI_BASIC`` () = singleTestBuildAndRun "core/reflect" FSI_BASIC #if !NETCOREAPP [] let refnormalization () = - let cfg = testConfig' "core/refnormalization" + let cfg = testConfig "core/refnormalization" // Prepare by building multiple versions of the test assemblies fsc cfg @"%s --target:library -o:version1\DependentAssembly.dll -g --version:1.0.0.0 --keyfile:keyfile.snk" cfg.fsc_flags [@"DependentAssembly.fs"] @@ -1658,7 +1659,7 @@ module CoreTests = [] let testResources () = - let cfg = testConfig' "core/resources" + let cfg = testConfig "core/resources" fsc cfg "%s --resource:Resources.resources -o:test-embed.exe -g" cfg.fsc_flags ["test.fs"] @@ -1686,7 +1687,7 @@ module CoreTests = [] let topinit () = - let cfg = testConfig' "core/topinit" + let cfg = testConfig "core/topinit" fsc cfg "%s --optimize -o both69514.exe -g" cfg.fsc_flags ["lib69514.fs"; "app69514.fs"] @@ -1814,7 +1815,7 @@ module CoreTests = [] let unitsOfMeasure () = - let cfg = testConfig' "core/unitsOfMeasure" + let cfg = testConfig "core/unitsOfMeasure" fsc cfg "%s --optimize- -o:test.exe -g" cfg.fsc_flags ["test.fs"] @@ -1828,7 +1829,7 @@ module CoreTests = [] let verify () = - let cfg = testConfig' "core/verify" + let cfg = testConfig "core/verify" peverifyWithArgs cfg "/nologo" (cfg.FSharpBuild) @@ -1845,7 +1846,7 @@ module CoreTests = [] let ``property setter in method or constructor`` () = - let cfg = testConfig' "core/members/set-only-property" + let cfg = testConfig "core/members/set-only-property" csc cfg @"%s /target:library /out:cs.dll" cfg.csc_flags ["cs.cs"] vbc cfg @"%s /target:library /out:vb.dll" cfg.vbc_flags ["vb.vb"] fsc cfg @"%s /target:library /out:fs.dll" cfg.fsc_flags ["fs.fs"] @@ -1853,38 +1854,40 @@ module CoreTests = #endif +[] module VersionTests = [] - let ``member-selfidentifier-version4.6``() = singleTestBuildAndRunVersion' "core/members/self-identifier/version46" FSC_BUILDONLY "4.6" + let ``member-selfidentifier-version4.6``() = singleTestBuildAndRunVersion "core/members/self-identifier/version46" FSC_BUILDONLY "4.6" [] - let ``member-selfidentifier-version4.7``() = singleTestBuildAndRun' "core/members/self-identifier/version47" FSC_BUILDONLY + let ``member-selfidentifier-version4.7``() = singleTestBuildAndRun "core/members/self-identifier/version47" FSC_BUILDONLY [] - let ``indent-version4.6``() = singleTestBuildAndRunVersion' "core/indent/version46" FSC_BUILDONLY "4.6" + let ``indent-version4.6``() = singleTestBuildAndRunVersion "core/indent/version46" FSC_BUILDONLY "4.6" [] - let ``indent-version4.7``() = singleTestBuildAndRun' "core/indent/version47" FSC_BUILDONLY + let ``indent-version4.7``() = singleTestBuildAndRun "core/indent/version47" FSC_BUILDONLY [] - let ``nameof-version4.6``() = singleTestBuildAndRunVersion' "core/nameof/version46" FSC_BUILDONLY "4.6" + let ``nameof-version4.6``() = singleTestBuildAndRunVersion "core/nameof/version46" FSC_BUILDONLY "4.6" [] - let ``nameof-versionpreview``() = singleTestBuildAndRunVersion' "core/nameof/preview" FSC_BUILDONLY "preview" + let ``nameof-versionpreview``() = singleTestBuildAndRunVersion "core/nameof/preview" FSC_BUILDONLY "preview" [] - let ``nameof-execute``() = singleTestBuildAndRunVersion' "core/nameof/preview" FSC_BASIC "preview" + let ``nameof-execute``() = singleTestBuildAndRunVersion "core/nameof/preview" FSC_BASIC "preview" [] - let ``nameof-fsi``() = singleTestBuildAndRunVersion' "core/nameof/preview" FSI_BASIC "preview" + let ``nameof-fsi``() = singleTestBuildAndRunVersion "core/nameof/preview" FSI_BASIC "preview" #if !NETCOREAPP +[] module ToolsTests = // This test is disabled in coreclr builds dependent on fixing : https://github.com/Microsoft/visualfsharp/issues/2600 [] let bundle () = - let cfg = testConfig' "tools/bundle" + let cfg = testConfig "tools/bundle" fsc cfg "%s --progress --standalone -o:test-one-fsharp-module.exe -g" cfg.fsc_flags ["test-one-fsharp-module.fs"] @@ -1904,34 +1907,35 @@ module ToolsTests = #endif [] - let ``eval-FSC_BASIC`` () = singleTestBuildAndRun' "tools/eval" FSC_BASIC + let ``eval-FSC_BASIC`` () = singleTestBuildAndRun "tools/eval" FSC_BASIC [] - let ``eval-FSI_BASIC`` () = singleTestBuildAndRun' "tools/eval" FSI_BASIC + let ``eval-FSI_BASIC`` () = singleTestBuildAndRun "tools/eval" FSI_BASIC +[] module RegressionTests = [] - let ``literal-value-bug-2-FSC_BASIC`` () = singleTestBuildAndRun' "regression/literal-value-bug-2" FSC_BASIC + let ``literal-value-bug-2-FSC_BASIC`` () = singleTestBuildAndRun "regression/literal-value-bug-2" FSC_BASIC [] - let ``literal-value-bug-2-FSI_BASIC`` () = singleTestBuildAndRun' "regression/literal-value-bug-2" FSI_BASIC + let ``literal-value-bug-2-FSI_BASIC`` () = singleTestBuildAndRun "regression/literal-value-bug-2" FSI_BASIC [] - let ``OverloadResolution-bug-FSC_BASIC`` () = singleTestBuildAndRun' "regression/OverloadResolution-bug" FSC_BASIC + let ``OverloadResolution-bug-FSC_BASIC`` () = singleTestBuildAndRun "regression/OverloadResolution-bug" FSC_BASIC [] - let ``OverloadResolution-bug-FSI_BASIC`` () = singleTestBuildAndRun' "regression/OverloadResolution-bug" FSI_BASIC + let ``OverloadResolution-bug-FSI_BASIC`` () = singleTestBuildAndRun "regression/OverloadResolution-bug" FSI_BASIC [] - let ``struct-tuple-bug-1-FSC_BASIC`` () = singleTestBuildAndRun' "regression/struct-tuple-bug-1" FSC_BASIC + let ``struct-tuple-bug-1-FSC_BASIC`` () = singleTestBuildAndRun "regression/struct-tuple-bug-1" FSC_BASIC [] - let ``tuple-bug-1-FSC_BASIC`` () = singleTestBuildAndRun' "regression/tuple-bug-1" FSC_BASIC + let ``tuple-bug-1-FSC_BASIC`` () = singleTestBuildAndRun "regression/tuple-bug-1" FSC_BASIC #if !NETCOREAPP [] let ``SRTP doesn't handle calling member hiding hinherited members`` () = - let cfg = testConfig' "regression/5531" + let cfg = testConfig "regression/5531" let outFile = "compilation.output.test.txt" let expectedFile = "compilation.output.test.bsl" @@ -1958,16 +1962,16 @@ module RegressionTests = #endif [] - let ``26`` () = singleTestBuildAndRun' "regression/26" FSC_BASIC + let ``26`` () = singleTestBuildAndRun "regression/26" FSC_BASIC [] - let ``321`` () = singleTestBuildAndRun' "regression/321" FSC_BASIC + let ``321`` () = singleTestBuildAndRun "regression/321" FSC_BASIC #if !NETCOREAPP // This test is disabled in coreclr builds dependent on fixing : https://github.com/Microsoft/visualfsharp/issues/2600 [] let ``655`` () = - let cfg = testConfig' "regression/655" + let cfg = testConfig "regression/655" fsc cfg "%s -a -o:pack.dll" cfg.fsc_flags ["xlibC.ml"] @@ -1986,7 +1990,7 @@ module RegressionTests = // This test is disabled in coreclr builds dependent on fixing : https://github.com/Microsoft/visualfsharp/issues/2600 [] let ``656`` () = - let cfg = testConfig' "regression/656" + let cfg = testConfig "regression/656" fsc cfg "%s -o:pack.exe" cfg.fsc_flags ["misc.fs mathhelper.fs filehelper.fs formshelper.fs plot.fs traj.fs playerrecord.fs trackedplayers.fs form.fs"] @@ -1996,14 +2000,14 @@ module RegressionTests = #if !NETCOREAPP // Requires WinForms [] - let ``83`` () = singleTestBuildAndRun' "regression/83" FSC_BASIC + let ``83`` () = singleTestBuildAndRun "regression/83" FSC_BASIC [] - let ``84`` () = singleTestBuildAndRun' "regression/84" FSC_BASIC + let ``84`` () = singleTestBuildAndRun "regression/84" FSC_BASIC [] let ``85`` () = - let cfg = testConfig' "regression/85" + let cfg = testConfig "regression/85" fsc cfg "%s -r:Category.dll -a -o:petshop.dll" cfg.fsc_flags ["Category.ml"] @@ -2011,26 +2015,27 @@ module RegressionTests = #endif [] - let ``86`` () = singleTestBuildAndRun' "regression/86" FSC_BASIC + let ``86`` () = singleTestBuildAndRun "regression/86" FSC_BASIC [] - let ``struct-tuple-bug-1-FSI_BASIC`` () = singleTestBuildAndRun' "regression/struct-tuple-bug-1" FSI_BASIC + let ``struct-tuple-bug-1-FSI_BASIC`` () = singleTestBuildAndRun "regression/struct-tuple-bug-1" FSI_BASIC #if !NETCOREAPP // This test is disabled in coreclr builds dependent on fixing : https://github.com/Microsoft/visualfsharp/issues/2600 [] let ``struct-measure-bug-1`` () = - let cfg = testConfig' "regression/struct-measure-bug-1" + let cfg = testConfig "regression/struct-measure-bug-1" fsc cfg "%s --optimize- -o:test.exe -g" cfg.fsc_flags ["test.fs"] peverify cfg "test.exe" +[] module OptimizationTests = [] let functionSizes () = - let cfg = testConfig' "optimize/analyses" + let cfg = testConfig "optimize/analyses" let outFile = "sizes.FunctionSizes.output.test.txt" let expectedFile = "sizes.FunctionSizes.output.test.bsl" @@ -2048,7 +2053,7 @@ module OptimizationTests = [] let totalSizes () = - let cfg = testConfig' "optimize/analyses" + let cfg = testConfig "optimize/analyses" let outFile = "sizes.TotalSizes.output.test.txt" let expectedFile = "sizes.TotalSizes.output.test.bsl" @@ -2065,7 +2070,7 @@ module OptimizationTests = [] let hasEffect () = - let cfg = testConfig' "optimize/analyses" + let cfg = testConfig "optimize/analyses" let outFile = "effects.HasEffect.output.test.txt" let expectedFile = "effects.HasEffect.output.test.bsl" @@ -2082,7 +2087,7 @@ module OptimizationTests = [] let noNeedToTailcall () = - let cfg = testConfig' "optimize/analyses" + let cfg = testConfig "optimize/analyses" let outFile = "tailcalls.NoNeedToTailcall.output.test.txt" let expectedFile = "tailcalls.NoNeedToTailcall.output.test.bsl" @@ -2099,7 +2104,7 @@ module OptimizationTests = [] let ``inline`` () = - let cfg = testConfig' "optimize/inline" + let cfg = testConfig "optimize/inline" fsc cfg "%s -g --optimize- --target:library -o:lib.dll" cfg.fsc_flags ["lib.fs"; "lib2.fs"] @@ -2138,7 +2143,7 @@ module OptimizationTests = [] let stats () = - let cfg = testConfig' "optimize/stats" + let cfg = testConfig "optimize/stats" ildasm cfg "/out=FSharp.Core.il" cfg.FSCOREDLLPATH @@ -2159,92 +2164,93 @@ module OptimizationTests = log "%s" m #endif +[] module TypecheckTests = [] let ``full-rank-arrays`` () = - let cfg = testConfig' "typecheck/full-rank-arrays" + let cfg = testConfig "typecheck/full-rank-arrays" SingleTest.singleTestBuildAndRunWithCopyDlls cfg "full-rank-arrays.dll" FSC_BASIC [] - let misc () = singleTestBuildAndRun' "typecheck/misc" FSC_BASIC + let misc () = singleTestBuildAndRun "typecheck/misc" FSC_BASIC #if !NETCOREAPP [] let ``sigs pos26`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:exe -o:pos26.exe" cfg.fsc_flags ["pos26.fsi"; "pos26.fs"] peverify cfg "pos26.exe" [] let ``sigs pos25`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:exe -o:pos25.exe" cfg.fsc_flags ["pos25.fs"] peverify cfg "pos25.exe" [] let ``sigs pos27`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:exe -o:pos27.exe" cfg.fsc_flags ["pos27.fs"] peverify cfg "pos27.exe" [] let ``sigs pos28`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:exe -o:pos28.exe" cfg.fsc_flags ["pos28.fs"] peverify cfg "pos28.exe" [] let ``sigs pos29`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:exe -o:pos29.exe" cfg.fsc_flags ["pos29.fsi"; "pos29.fs"; "pos29.app.fs"] peverify cfg "pos29.exe" [] let ``sigs pos30`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:exe -o:pos30.exe --warnaserror+" cfg.fsc_flags ["pos30.fs"] peverify cfg "pos30.exe" [] let ``sigs pos24`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:exe -o:pos24.exe" cfg.fsc_flags ["pos24.fs"] peverify cfg "pos24.exe" [] let ``sigs pos31`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:exe -o:pos31.exe --warnaserror" cfg.fsc_flags ["pos31.fsi"; "pos31.fs"] peverify cfg "pos31.exe" [] let ``sigs pos32`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:library -o:pos32.dll --warnaserror" cfg.fsc_flags ["pos32.fs"] peverify cfg "pos32.dll" [] let ``sigs pos33`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:library -o:pos33.dll --warnaserror" cfg.fsc_flags ["pos33.fsi"; "pos33.fs"] peverify cfg "pos33.dll" [] let ``sigs pos34`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:library -o:pos34.dll --warnaserror" cfg.fsc_flags ["pos34.fs"] peverify cfg "pos34.dll" [] let ``sigs pos35`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:library -o:pos35.dll --warnaserror" cfg.fsc_flags ["pos35.fs"] peverify cfg "pos35.dll" [] let ``sigs pos36-srtp`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:library -o:pos36-srtp-lib.dll --warnaserror" cfg.fsc_flags ["pos36-srtp-lib.fs"] fsc cfg "%s --target:exe -r:pos36-srtp-lib.dll -o:pos36-srtp-app.exe --warnaserror" cfg.fsc_flags ["pos36-srtp-app.fs"] peverify cfg "pos36-srtp-lib.dll" @@ -2253,129 +2259,129 @@ module TypecheckTests = [] let ``sigs pos37`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:library -o:pos37.dll --warnaserror" cfg.fsc_flags ["pos37.fs"] peverify cfg "pos37.dll" [] let ``sigs pos38`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:library -o:pos38.dll --warnaserror" cfg.fsc_flags ["pos38.fs"] peverify cfg "pos38.dll" [] let ``sigs pos39`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:exe -o:pos39.exe" cfg.fsc_flags ["pos39.fs"] peverify cfg "pos39.exe" exec cfg ("." ++ "pos39.exe") "" [] let ``sigs pos23`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:exe -o:pos23.exe" cfg.fsc_flags ["pos23.fs"] peverify cfg "pos23.exe" exec cfg ("." ++ "pos23.exe") "" [] let ``sigs pos20`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:exe -o:pos20.exe" cfg.fsc_flags ["pos20.fs"] peverify cfg "pos20.exe" exec cfg ("." ++ "pos20.exe") "" [] let ``sigs pos19`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:exe -o:pos19.exe" cfg.fsc_flags ["pos19.fs"] peverify cfg "pos19.exe" exec cfg ("." ++ "pos19.exe") "" [] let ``sigs pos18`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:exe -o:pos18.exe" cfg.fsc_flags ["pos18.fs"] peverify cfg "pos18.exe" exec cfg ("." ++ "pos18.exe") "" [] let ``sigs pos16`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:exe -o:pos16.exe" cfg.fsc_flags ["pos16.fs"] peverify cfg "pos16.exe" exec cfg ("." ++ "pos16.exe") "" [] let ``sigs pos17`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:exe -o:pos17.exe" cfg.fsc_flags ["pos17.fs"] peverify cfg "pos17.exe" exec cfg ("." ++ "pos17.exe") "" [] let ``sigs pos15`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:exe -o:pos15.exe" cfg.fsc_flags ["pos15.fs"] peverify cfg "pos15.exe" exec cfg ("." ++ "pos15.exe") "" [] let ``sigs pos14`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:exe -o:pos14.exe" cfg.fsc_flags ["pos14.fs"] peverify cfg "pos14.exe" exec cfg ("." ++ "pos14.exe") "" [] let ``sigs pos13`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s --target:exe -o:pos13.exe" cfg.fsc_flags ["pos13.fs"] peverify cfg "pos13.exe" exec cfg ("." ++ "pos13.exe") "" [] let ``sigs pos12 `` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s -a -o:pos12.dll" cfg.fsc_flags ["pos12.fs"] [] let ``sigs pos11`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s -a -o:pos11.dll" cfg.fsc_flags ["pos11.fs"] [] let ``sigs pos10`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s -a -o:pos10.dll" cfg.fsc_flags ["pos10.fs"] peverify cfg "pos10.dll" [] let ``sigs pos09`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s -a -o:pos09.dll" cfg.fsc_flags ["pos09.fs"] peverify cfg "pos09.dll" [] let ``sigs pos07`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s -a -o:pos07.dll" cfg.fsc_flags ["pos07.fs"] peverify cfg "pos07.dll" [] let ``sigs pos08`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s -a -o:pos08.dll" cfg.fsc_flags ["pos08.fs"] peverify cfg "pos08.dll" [] let ``sigs pos06`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s -a -o:pos06.dll" cfg.fsc_flags ["pos06.fs"] peverify cfg "pos06.dll" [] let ``sigs pos03`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s -a -o:pos03.dll" cfg.fsc_flags ["pos03.fs"] peverify cfg "pos03.dll" fsc cfg "%s -a -o:pos03a.dll" cfg.fsc_flags ["pos03a.fsi"; "pos03a.fs"] @@ -2383,520 +2389,520 @@ module TypecheckTests = [] let ``sigs pos01a`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s -a -o:pos01a.dll" cfg.fsc_flags ["pos01a.fsi"; "pos01a.fs"] peverify cfg "pos01a.dll" [] let ``sigs pos02`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s -a -o:pos02.dll" cfg.fsc_flags ["pos02.fs"] peverify cfg "pos02.dll" [] let ``sigs pos05`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" fsc cfg "%s -a -o:pos05.dll" cfg.fsc_flags ["pos05.fs"] [] - let ``type check neg01`` () = singleNegTest (testConfig' "typecheck/sigs") "neg01" + let ``type check neg01`` () = singleNegTest (testConfig "typecheck/sigs") "neg01" [] - let ``type check neg02`` () = singleNegTest (testConfig' "typecheck/sigs") "neg02" + let ``type check neg02`` () = singleNegTest (testConfig "typecheck/sigs") "neg02" [] - let ``type check neg03`` () = singleNegTest (testConfig' "typecheck/sigs") "neg03" + let ``type check neg03`` () = singleNegTest (testConfig "typecheck/sigs") "neg03" [] - let ``type check neg04`` () = singleNegTest (testConfig' "typecheck/sigs") "neg04" + let ``type check neg04`` () = singleNegTest (testConfig "typecheck/sigs") "neg04" [] - let ``type check neg05`` () = singleNegTest (testConfig' "typecheck/sigs") "neg05" + let ``type check neg05`` () = singleNegTest (testConfig "typecheck/sigs") "neg05" [] - let ``type check neg06`` () = singleNegTest (testConfig' "typecheck/sigs") "neg06" + let ``type check neg06`` () = singleNegTest (testConfig "typecheck/sigs") "neg06" [] - let ``type check neg06_a`` () = singleNegTest (testConfig' "typecheck/sigs") "neg06_a" + let ``type check neg06_a`` () = singleNegTest (testConfig "typecheck/sigs") "neg06_a" [] - let ``type check neg06_b`` () = singleNegTest (testConfig' "typecheck/sigs") "neg06_b" + let ``type check neg06_b`` () = singleNegTest (testConfig "typecheck/sigs") "neg06_b" [] - let ``type check neg07`` () = singleNegTest (testConfig' "typecheck/sigs") "neg07" + let ``type check neg07`` () = singleNegTest (testConfig "typecheck/sigs") "neg07" [] - let ``type check neg08`` () = singleNegTest (testConfig' "typecheck/sigs") "neg08" + let ``type check neg08`` () = singleNegTest (testConfig "typecheck/sigs") "neg08" [] - let ``type check neg09`` () = singleNegTest (testConfig' "typecheck/sigs") "neg09" + let ``type check neg09`` () = singleNegTest (testConfig "typecheck/sigs") "neg09" [] - let ``type check neg10`` () = singleNegTest (testConfig' "typecheck/sigs") "neg10" + let ``type check neg10`` () = singleNegTest (testConfig "typecheck/sigs") "neg10" [] - let ``type check neg10_a`` () = singleNegTest (testConfig' "typecheck/sigs") "neg10_a" + let ``type check neg10_a`` () = singleNegTest (testConfig "typecheck/sigs") "neg10_a" [] - let ``type check neg11`` () = singleNegTest (testConfig' "typecheck/sigs") "neg11" + let ``type check neg11`` () = singleNegTest (testConfig "typecheck/sigs") "neg11" [] - let ``type check neg12`` () = singleNegTest (testConfig' "typecheck/sigs") "neg12" + let ``type check neg12`` () = singleNegTest (testConfig "typecheck/sigs") "neg12" [] - let ``type check neg13`` () = singleNegTest (testConfig' "typecheck/sigs") "neg13" + let ``type check neg13`` () = singleNegTest (testConfig "typecheck/sigs") "neg13" [] - let ``type check neg14`` () = singleNegTest (testConfig' "typecheck/sigs") "neg14" + let ``type check neg14`` () = singleNegTest (testConfig "typecheck/sigs") "neg14" [] - let ``type check neg15`` () = singleNegTest (testConfig' "typecheck/sigs") "neg15" + let ``type check neg15`` () = singleNegTest (testConfig "typecheck/sigs") "neg15" [] - let ``type check neg16`` () = singleNegTest (testConfig' "typecheck/sigs") "neg16" + let ``type check neg16`` () = singleNegTest (testConfig "typecheck/sigs") "neg16" [] - let ``type check neg17`` () = singleNegTest (testConfig' "typecheck/sigs") "neg17" + let ``type check neg17`` () = singleNegTest (testConfig "typecheck/sigs") "neg17" [] - let ``type check neg18`` () = singleNegTest (testConfig' "typecheck/sigs") "neg18" + let ``type check neg18`` () = singleNegTest (testConfig "typecheck/sigs") "neg18" [] - let ``type check neg19`` () = singleNegTest (testConfig' "typecheck/sigs") "neg19" + let ``type check neg19`` () = singleNegTest (testConfig "typecheck/sigs") "neg19" [] - let ``type check neg20`` () = singleNegTest (testConfig' "typecheck/sigs") "neg20" + let ``type check neg20`` () = singleNegTest (testConfig "typecheck/sigs") "neg20" [] - let ``type check neg21`` () = singleNegTest (testConfig' "typecheck/sigs") "neg21" + let ``type check neg21`` () = singleNegTest (testConfig "typecheck/sigs") "neg21" [] - let ``type check neg22`` () = singleNegTest (testConfig' "typecheck/sigs") "neg22" + let ``type check neg22`` () = singleNegTest (testConfig "typecheck/sigs") "neg22" [] - let ``type check neg23`` () = singleNegTest (testConfig' "typecheck/sigs") "neg23" + let ``type check neg23`` () = singleNegTest (testConfig "typecheck/sigs") "neg23" [] let ``type check neg24 version 4.6`` () = - let cfg = testConfig' "typecheck/sigs/version46" + let cfg = testConfig "typecheck/sigs/version46" // For some reason this warning is off by default in the test framework but in this case we are testing for it let cfg = { cfg with fsc_flags = cfg.fsc_flags.Replace("--nowarn:20", "") } singleVersionedNegTest cfg "4.6" "neg24" [] let ``type check neg24 version 4.7`` () = - let cfg = testConfig' "typecheck/sigs/version47" + let cfg = testConfig "typecheck/sigs/version47" // For some reason this warning is off by default in the test framework but in this case we are testing for it let cfg = { cfg with fsc_flags = cfg.fsc_flags.Replace("--nowarn:20", "") } singleVersionedNegTest cfg "preview" "neg24" [] - let ``type check neg25`` () = singleNegTest (testConfig' "typecheck/sigs") "neg25" + let ``type check neg25`` () = singleNegTest (testConfig "typecheck/sigs") "neg25" [] - let ``type check neg26`` () = singleNegTest (testConfig' "typecheck/sigs") "neg26" + let ``type check neg26`` () = singleNegTest (testConfig "typecheck/sigs") "neg26" [] - let ``type check neg27`` () = singleNegTest (testConfig' "typecheck/sigs") "neg27" + let ``type check neg27`` () = singleNegTest (testConfig "typecheck/sigs") "neg27" [] - let ``type check neg28`` () = singleNegTest (testConfig' "typecheck/sigs") "neg28" + let ``type check neg28`` () = singleNegTest (testConfig "typecheck/sigs") "neg28" [] - let ``type check neg29`` () = singleNegTest (testConfig' "typecheck/sigs") "neg29" + let ``type check neg29`` () = singleNegTest (testConfig "typecheck/sigs") "neg29" [] - let ``type check neg30`` () = singleNegTest (testConfig' "typecheck/sigs") "neg30" + let ``type check neg30`` () = singleNegTest (testConfig "typecheck/sigs") "neg30" [] - let ``type check neg31`` () = singleNegTest (testConfig' "typecheck/sigs") "neg31" + let ``type check neg31`` () = singleNegTest (testConfig "typecheck/sigs") "neg31" [] - let ``type check neg32`` () = singleNegTest (testConfig' "typecheck/sigs") "neg32" + let ``type check neg32`` () = singleNegTest (testConfig "typecheck/sigs") "neg32" [] - let ``type check neg33`` () = singleNegTest (testConfig' "typecheck/sigs") "neg33" + let ``type check neg33`` () = singleNegTest (testConfig "typecheck/sigs") "neg33" [] - let ``type check neg34`` () = singleNegTest (testConfig' "typecheck/sigs") "neg34" + let ``type check neg34`` () = singleNegTest (testConfig "typecheck/sigs") "neg34" [] - let ``type check neg35`` () = singleNegTest (testConfig' "typecheck/sigs") "neg35" + let ``type check neg35`` () = singleNegTest (testConfig "typecheck/sigs") "neg35" [] - let ``type check neg36`` () = singleNegTest (testConfig' "typecheck/sigs") "neg36" + let ``type check neg36`` () = singleNegTest (testConfig "typecheck/sigs") "neg36" [] - let ``type check neg37`` () = singleNegTest (testConfig' "typecheck/sigs") "neg37" + let ``type check neg37`` () = singleNegTest (testConfig "typecheck/sigs") "neg37" [] - let ``type check neg37_a`` () = singleNegTest (testConfig' "typecheck/sigs") "neg37_a" + let ``type check neg37_a`` () = singleNegTest (testConfig "typecheck/sigs") "neg37_a" [] - let ``type check neg38`` () = singleNegTest (testConfig' "typecheck/sigs") "neg38" + let ``type check neg38`` () = singleNegTest (testConfig "typecheck/sigs") "neg38" [] - let ``type check neg39`` () = singleNegTest (testConfig' "typecheck/sigs") "neg39" + let ``type check neg39`` () = singleNegTest (testConfig "typecheck/sigs") "neg39" [] - let ``type check neg40`` () = singleNegTest (testConfig' "typecheck/sigs") "neg40" + let ``type check neg40`` () = singleNegTest (testConfig "typecheck/sigs") "neg40" [] - let ``type check neg41`` () = singleNegTest (testConfig' "typecheck/sigs") "neg41" + let ``type check neg41`` () = singleNegTest (testConfig "typecheck/sigs") "neg41" [] - let ``type check neg42`` () = singleNegTest (testConfig' "typecheck/sigs") "neg42" + let ``type check neg42`` () = singleNegTest (testConfig "typecheck/sigs") "neg42" [] - let ``type check neg43`` () = singleNegTest (testConfig' "typecheck/sigs") "neg43" + let ``type check neg43`` () = singleNegTest (testConfig "typecheck/sigs") "neg43" [] - let ``type check neg44`` () = singleNegTest (testConfig' "typecheck/sigs") "neg44" + let ``type check neg44`` () = singleNegTest (testConfig "typecheck/sigs") "neg44" [] - let ``type check neg45`` () = singleNegTest (testConfig' "typecheck/sigs") "neg45" + let ``type check neg45`` () = singleNegTest (testConfig "typecheck/sigs") "neg45" [] - let ``type check neg46`` () = singleNegTest (testConfig' "typecheck/sigs") "neg46" + let ``type check neg46`` () = singleNegTest (testConfig "typecheck/sigs") "neg46" [] - let ``type check neg47`` () = singleNegTest (testConfig' "typecheck/sigs") "neg47" + let ``type check neg47`` () = singleNegTest (testConfig "typecheck/sigs") "neg47" [] - let ``type check neg48`` () = singleNegTest (testConfig' "typecheck/sigs") "neg48" + let ``type check neg48`` () = singleNegTest (testConfig "typecheck/sigs") "neg48" [] - let ``type check neg49`` () = singleNegTest (testConfig' "typecheck/sigs") "neg49" + let ``type check neg49`` () = singleNegTest (testConfig "typecheck/sigs") "neg49" [] - let ``type check neg50`` () = singleNegTest (testConfig' "typecheck/sigs") "neg50" + let ``type check neg50`` () = singleNegTest (testConfig "typecheck/sigs") "neg50" [] - let ``type check neg51`` () = singleNegTest (testConfig' "typecheck/sigs") "neg51" + let ``type check neg51`` () = singleNegTest (testConfig "typecheck/sigs") "neg51" [] - let ``type check neg52`` () = singleNegTest (testConfig' "typecheck/sigs") "neg52" + let ``type check neg52`` () = singleNegTest (testConfig "typecheck/sigs") "neg52" [] - let ``type check neg53`` () = singleNegTest (testConfig' "typecheck/sigs") "neg53" + let ``type check neg53`` () = singleNegTest (testConfig "typecheck/sigs") "neg53" [] - let ``type check neg54`` () = singleNegTest (testConfig' "typecheck/sigs") "neg54" + let ``type check neg54`` () = singleNegTest (testConfig "typecheck/sigs") "neg54" [] - let ``type check neg55`` () = singleNegTest (testConfig' "typecheck/sigs") "neg55" + let ``type check neg55`` () = singleNegTest (testConfig "typecheck/sigs") "neg55" [] - let ``type check neg56`` () = singleNegTest (testConfig' "typecheck/sigs") "neg56" + let ``type check neg56`` () = singleNegTest (testConfig "typecheck/sigs") "neg56" [] - let ``type check neg56_a`` () = singleNegTest (testConfig' "typecheck/sigs") "neg56_a" + let ``type check neg56_a`` () = singleNegTest (testConfig "typecheck/sigs") "neg56_a" [] - let ``type check neg56_b`` () = singleNegTest (testConfig' "typecheck/sigs") "neg56_b" + let ``type check neg56_b`` () = singleNegTest (testConfig "typecheck/sigs") "neg56_b" [] - let ``type check neg57`` () = singleNegTest (testConfig' "typecheck/sigs") "neg57" + let ``type check neg57`` () = singleNegTest (testConfig "typecheck/sigs") "neg57" [] - let ``type check neg58`` () = singleNegTest (testConfig' "typecheck/sigs") "neg58" + let ``type check neg58`` () = singleNegTest (testConfig "typecheck/sigs") "neg58" [] - let ``type check neg59`` () = singleNegTest (testConfig' "typecheck/sigs") "neg59" + let ``type check neg59`` () = singleNegTest (testConfig "typecheck/sigs") "neg59" [] - let ``type check neg60`` () = singleNegTest (testConfig' "typecheck/sigs") "neg60" + let ``type check neg60`` () = singleNegTest (testConfig "typecheck/sigs") "neg60" [] - let ``type check neg61`` () = singleNegTest (testConfig' "typecheck/sigs") "neg61" + let ``type check neg61`` () = singleNegTest (testConfig "typecheck/sigs") "neg61" [] - let ``type check neg62`` () = singleNegTest (testConfig' "typecheck/sigs") "neg62" + let ``type check neg62`` () = singleNegTest (testConfig "typecheck/sigs") "neg62" [] - let ``type check neg63`` () = singleNegTest (testConfig' "typecheck/sigs") "neg63" + let ``type check neg63`` () = singleNegTest (testConfig "typecheck/sigs") "neg63" [] - let ``type check neg64`` () = singleNegTest (testConfig' "typecheck/sigs") "neg64" + let ``type check neg64`` () = singleNegTest (testConfig "typecheck/sigs") "neg64" [] - let ``type check neg65`` () = singleNegTest (testConfig' "typecheck/sigs") "neg65" + let ``type check neg65`` () = singleNegTest (testConfig "typecheck/sigs") "neg65" [] - let ``type check neg66`` () = singleNegTest (testConfig' "typecheck/sigs") "neg66" + let ``type check neg66`` () = singleNegTest (testConfig "typecheck/sigs") "neg66" [] - let ``type check neg67`` () = singleNegTest (testConfig' "typecheck/sigs") "neg67" + let ``type check neg67`` () = singleNegTest (testConfig "typecheck/sigs") "neg67" [] - let ``type check neg68`` () = singleNegTest (testConfig' "typecheck/sigs") "neg68" + let ``type check neg68`` () = singleNegTest (testConfig "typecheck/sigs") "neg68" [] - let ``type check neg69`` () = singleNegTest (testConfig' "typecheck/sigs") "neg69" + let ``type check neg69`` () = singleNegTest (testConfig "typecheck/sigs") "neg69" [] - let ``type check neg70`` () = singleNegTest (testConfig' "typecheck/sigs") "neg70" + let ``type check neg70`` () = singleNegTest (testConfig "typecheck/sigs") "neg70" [] - let ``type check neg71`` () = singleNegTest (testConfig' "typecheck/sigs") "neg71" + let ``type check neg71`` () = singleNegTest (testConfig "typecheck/sigs") "neg71" [] - let ``type check neg72`` () = singleNegTest (testConfig' "typecheck/sigs") "neg72" + let ``type check neg72`` () = singleNegTest (testConfig "typecheck/sigs") "neg72" [] - let ``type check neg73`` () = singleNegTest (testConfig' "typecheck/sigs") "neg73" + let ``type check neg73`` () = singleNegTest (testConfig "typecheck/sigs") "neg73" [] - let ``type check neg74`` () = singleNegTest (testConfig' "typecheck/sigs") "neg74" + let ``type check neg74`` () = singleNegTest (testConfig "typecheck/sigs") "neg74" [] - let ``type check neg75`` () = singleNegTest (testConfig' "typecheck/sigs") "neg75" + let ``type check neg75`` () = singleNegTest (testConfig "typecheck/sigs") "neg75" [] - let ``type check neg76`` () = singleNegTest (testConfig' "typecheck/sigs") "neg76" + let ``type check neg76`` () = singleNegTest (testConfig "typecheck/sigs") "neg76" [] - let ``type check neg77`` () = singleNegTest (testConfig' "typecheck/sigs") "neg77" + let ``type check neg77`` () = singleNegTest (testConfig "typecheck/sigs") "neg77" [] - let ``type check neg78`` () = singleNegTest (testConfig' "typecheck/sigs") "neg78" + let ``type check neg78`` () = singleNegTest (testConfig "typecheck/sigs") "neg78" [] - let ``type check neg79`` () = singleNegTest (testConfig' "typecheck/sigs") "neg79" + let ``type check neg79`` () = singleNegTest (testConfig "typecheck/sigs") "neg79" [] - let ``type check neg80`` () = singleNegTest (testConfig' "typecheck/sigs") "neg80" + let ``type check neg80`` () = singleNegTest (testConfig "typecheck/sigs") "neg80" [] - let ``type check neg81`` () = singleNegTest (testConfig' "typecheck/sigs") "neg81" + let ``type check neg81`` () = singleNegTest (testConfig "typecheck/sigs") "neg81" [] - let ``type check neg82`` () = singleNegTest (testConfig' "typecheck/sigs") "neg82" + let ``type check neg82`` () = singleNegTest (testConfig "typecheck/sigs") "neg82" [] - let ``type check neg83`` () = singleNegTest (testConfig' "typecheck/sigs") "neg83" + let ``type check neg83`` () = singleNegTest (testConfig "typecheck/sigs") "neg83" [] - let ``type check neg84`` () = singleNegTest (testConfig' "typecheck/sigs") "neg84" + let ``type check neg84`` () = singleNegTest (testConfig "typecheck/sigs") "neg84" [] - let ``type check neg85`` () = singleNegTest (testConfig' "typecheck/sigs") "neg85" + let ``type check neg85`` () = singleNegTest (testConfig "typecheck/sigs") "neg85" [] - let ``type check neg86`` () = singleNegTest (testConfig' "typecheck/sigs") "neg86" + let ``type check neg86`` () = singleNegTest (testConfig "typecheck/sigs") "neg86" [] - let ``type check neg87`` () = singleNegTest (testConfig' "typecheck/sigs") "neg87" + let ``type check neg87`` () = singleNegTest (testConfig "typecheck/sigs") "neg87" [] - let ``type check neg88`` () = singleNegTest (testConfig' "typecheck/sigs") "neg88" + let ``type check neg88`` () = singleNegTest (testConfig "typecheck/sigs") "neg88" [] - let ``type check neg89`` () = singleNegTest (testConfig' "typecheck/sigs") "neg89" + let ``type check neg89`` () = singleNegTest (testConfig "typecheck/sigs") "neg89" [] - let ``type check neg90`` () = singleNegTest (testConfig' "typecheck/sigs") "neg90" + let ``type check neg90`` () = singleNegTest (testConfig "typecheck/sigs") "neg90" [] - let ``type check neg91`` () = singleNegTest (testConfig' "typecheck/sigs") "neg91" + let ``type check neg91`` () = singleNegTest (testConfig "typecheck/sigs") "neg91" [] - let ``type check neg92`` () = singleNegTest (testConfig' "typecheck/sigs") "neg92" + let ``type check neg92`` () = singleNegTest (testConfig "typecheck/sigs") "neg92" [] - let ``type check neg93`` () = singleNegTest (testConfig' "typecheck/sigs") "neg93" + let ``type check neg93`` () = singleNegTest (testConfig "typecheck/sigs") "neg93" [] - let ``type check neg94`` () = singleNegTest (testConfig' "typecheck/sigs") "neg94" + let ``type check neg94`` () = singleNegTest (testConfig "typecheck/sigs") "neg94" [] - let ``type check neg95`` () = singleNegTest (testConfig' "typecheck/sigs") "neg95" + let ``type check neg95`` () = singleNegTest (testConfig "typecheck/sigs") "neg95" [] - let ``type check neg96`` () = singleNegTest (testConfig' "typecheck/sigs") "neg96" + let ``type check neg96`` () = singleNegTest (testConfig "typecheck/sigs") "neg96" [] - let ``type check neg97`` () = singleNegTest (testConfig' "typecheck/sigs") "neg97" + let ``type check neg97`` () = singleNegTest (testConfig "typecheck/sigs") "neg97" [] - let ``type check neg98`` () = singleNegTest (testConfig' "typecheck/sigs") "neg98" + let ``type check neg98`` () = singleNegTest (testConfig "typecheck/sigs") "neg98" [] - let ``type check neg99`` () = singleNegTest (testConfig' "typecheck/sigs") "neg99" + let ``type check neg99`` () = singleNegTest (testConfig "typecheck/sigs") "neg99" [] let ``type check neg100`` () = - let cfg = testConfig' "typecheck/sigs" + let cfg = testConfig "typecheck/sigs" let cfg = { cfg with fsc_flags = cfg.fsc_flags + " --warnon:3218" } singleNegTest cfg "neg100" [] - let ``type check neg101`` () = singleNegTest (testConfig' "typecheck/sigs") "neg101" + let ``type check neg101`` () = singleNegTest (testConfig "typecheck/sigs") "neg101" [] - let ``type check neg102`` () = singleNegTest (testConfig' "typecheck/sigs") "neg102" + let ``type check neg102`` () = singleNegTest (testConfig "typecheck/sigs") "neg102" [] - let ``type check neg103`` () = singleNegTest (testConfig' "typecheck/sigs") "neg103" + let ``type check neg103`` () = singleNegTest (testConfig "typecheck/sigs") "neg103" [] - let ``type check neg104`` () = singleNegTest (testConfig' "typecheck/sigs") "neg104" + let ``type check neg104`` () = singleNegTest (testConfig "typecheck/sigs") "neg104" [] - let ``type check neg106`` () = singleNegTest (testConfig' "typecheck/sigs") "neg106" + let ``type check neg106`` () = singleNegTest (testConfig "typecheck/sigs") "neg106" [] - let ``type check neg107`` () = singleNegTest (testConfig' "typecheck/sigs") "neg107" + let ``type check neg107`` () = singleNegTest (testConfig "typecheck/sigs") "neg107" [] - let ``type check neg108`` () = singleNegTest (testConfig' "typecheck/sigs") "neg108" + let ``type check neg108`` () = singleNegTest (testConfig "typecheck/sigs") "neg108" [] - let ``type check neg109`` () = singleNegTest (testConfig' "typecheck/sigs") "neg109" + let ``type check neg109`` () = singleNegTest (testConfig "typecheck/sigs") "neg109" [] - let ``type check neg110`` () = singleNegTest (testConfig' "typecheck/sigs") "neg110" + let ``type check neg110`` () = singleNegTest (testConfig "typecheck/sigs") "neg110" [] - let ``type check neg111`` () = singleNegTest (testConfig' "typecheck/sigs") "neg111" + let ``type check neg111`` () = singleNegTest (testConfig "typecheck/sigs") "neg111" [] - let ``type check neg112`` () = singleNegTest (testConfig' "typecheck/sigs") "neg112" + let ``type check neg112`` () = singleNegTest (testConfig "typecheck/sigs") "neg112" [] - let ``type check neg113`` () = singleNegTest (testConfig' "typecheck/sigs") "neg113" + let ``type check neg113`` () = singleNegTest (testConfig "typecheck/sigs") "neg113" [] - let ``type check neg114`` () = singleNegTest (testConfig' "typecheck/sigs") "neg114" + let ``type check neg114`` () = singleNegTest (testConfig "typecheck/sigs") "neg114" [] - let ``type check neg115`` () = singleNegTest (testConfig' "typecheck/sigs") "neg115" + let ``type check neg115`` () = singleNegTest (testConfig "typecheck/sigs") "neg115" [] - let ``type check neg116`` () = singleNegTest (testConfig' "typecheck/sigs") "neg116" + let ``type check neg116`` () = singleNegTest (testConfig "typecheck/sigs") "neg116" [] - let ``type check neg117`` () = singleNegTest (testConfig' "typecheck/sigs") "neg117" + let ``type check neg117`` () = singleNegTest (testConfig "typecheck/sigs") "neg117" [] - let ``type check neg118`` () = singleNegTest (testConfig' "typecheck/sigs") "neg118" + let ``type check neg118`` () = singleNegTest (testConfig "typecheck/sigs") "neg118" [] - let ``type check neg119`` () = singleNegTest (testConfig' "typecheck/sigs") "neg119" + let ``type check neg119`` () = singleNegTest (testConfig "typecheck/sigs") "neg119" [] - let ``type check neg120`` () = singleNegTest (testConfig' "typecheck/sigs") "neg120" + let ``type check neg120`` () = singleNegTest (testConfig "typecheck/sigs") "neg120" [] - let ``type check neg121`` () = singleNegTest (testConfig' "typecheck/sigs") "neg121" + let ``type check neg121`` () = singleNegTest (testConfig "typecheck/sigs") "neg121" [] - let ``type check neg122`` () = singleNegTest (testConfig' "typecheck/sigs") "neg122" + let ``type check neg122`` () = singleNegTest (testConfig "typecheck/sigs") "neg122" [] - let ``type check neg123`` () = singleNegTest (testConfig' "typecheck/sigs") "neg123" + let ``type check neg123`` () = singleNegTest (testConfig "typecheck/sigs") "neg123" [] - let ``type check neg124`` () = singleNegTest (testConfig' "typecheck/sigs") "neg124" + let ``type check neg124`` () = singleNegTest (testConfig "typecheck/sigs") "neg124" [] - let ``type check neg125`` () = singleNegTest (testConfig' "typecheck/sigs") "neg125" + let ``type check neg125`` () = singleNegTest (testConfig "typecheck/sigs") "neg125" [] - let ``type check neg126`` () = singleNegTest (testConfig' "typecheck/sigs") "neg126" + let ``type check neg126`` () = singleNegTest (testConfig "typecheck/sigs") "neg126" [] - let ``type check neg127`` () = singleNegTest (testConfig' "typecheck/sigs") "neg127" + let ``type check neg127`` () = singleNegTest (testConfig "typecheck/sigs") "neg127" [] - let ``type check neg128`` () = singleNegTest (testConfig' "typecheck/sigs") "neg128" + let ``type check neg128`` () = singleNegTest (testConfig "typecheck/sigs") "neg128" [] - let ``type check neg129`` () = singleNegTest (testConfig' "typecheck/sigs") "neg129" + let ``type check neg129`` () = singleNegTest (testConfig "typecheck/sigs") "neg129" [] - let ``type check neg130`` () = singleNegTest (testConfig' "typecheck/sigs") "neg130" + let ``type check neg130`` () = singleNegTest (testConfig "typecheck/sigs") "neg130" [] - let ``type check neg_anon_1`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_anon_1" + let ``type check neg_anon_1`` () = singleNegTest (testConfig "typecheck/sigs") "neg_anon_1" [] - let ``type check neg_anon_2`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_anon_2" + let ``type check neg_anon_2`` () = singleNegTest (testConfig "typecheck/sigs") "neg_anon_2" [] - let ``type check neg_issue_3752`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_issue_3752" + let ``type check neg_issue_3752`` () = singleNegTest (testConfig "typecheck/sigs") "neg_issue_3752" [] - let ``type check neg_byref_1`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_1" + let ``type check neg_byref_1`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_1" [] - let ``type check neg_byref_2`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_2" + let ``type check neg_byref_2`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_2" [] - let ``type check neg_byref_3`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_3" + let ``type check neg_byref_3`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_3" [] - let ``type check neg_byref_4`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_4" + let ``type check neg_byref_4`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_4" [] - let ``type check neg_byref_5`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_5" + let ``type check neg_byref_5`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_5" [] - let ``type check neg_byref_6`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_6" + let ``type check neg_byref_6`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_6" [] - let ``type check neg_byref_7`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_7" + let ``type check neg_byref_7`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_7" [] - let ``type check neg_byref_8`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_8" + let ``type check neg_byref_8`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_8" [] - let ``type check neg_byref_10`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_10" + let ``type check neg_byref_10`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_10" [] - let ``type check neg_byref_11`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_11" + let ``type check neg_byref_11`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_11" [] - let ``type check neg_byref_12`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_12" + let ``type check neg_byref_12`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_12" [] - let ``type check neg_byref_13`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_13" + let ``type check neg_byref_13`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_13" [] - let ``type check neg_byref_14`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_14" + let ``type check neg_byref_14`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_14" [] - let ``type check neg_byref_15`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_15" + let ``type check neg_byref_15`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_15" [] - let ``type check neg_byref_16`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_16" + let ``type check neg_byref_16`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_16" [] - let ``type check neg_byref_17`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_17" + let ``type check neg_byref_17`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_17" [] - let ``type check neg_byref_18`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_18" + let ``type check neg_byref_18`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_18" [] - let ``type check neg_byref_19`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_19" + let ``type check neg_byref_19`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_19" [] - let ``type check neg_byref_20`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_20" + let ``type check neg_byref_20`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_20" [] - let ``type check neg_byref_21`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_21" + let ``type check neg_byref_21`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_21" [] - let ``type check neg_byref_22`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_22" + let ``type check neg_byref_22`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_22" [] - let ``type check neg_byref_23`` () = singleNegTest (testConfig' "typecheck/sigs") "neg_byref_23" - + let ``type check neg_byref_23`` () = singleNegTest (testConfig "typecheck/sigs") "neg_byref_23" +[] module FscTests = [] let ``should be raised if AssemblyInformationalVersion has invalid version`` () = - let cfg = testConfig' (Commands.createTempDir()) + let cfg = testConfig (Commands.createTempDir()) let code = """ @@ -2921,7 +2927,7 @@ open System.Reflection [] let ``should set file version info on generated file`` () = - let cfg = testConfig' (Commands.createTempDir()) + let cfg = testConfig (Commands.createTempDir()) let code = """ @@ -2962,6 +2968,7 @@ open System.Runtime.InteropServices #endif #if NET472 +[] module ProductVersionTest = let informationalVersionAttrName = typeof.FullName @@ -2980,7 +2987,7 @@ module ProductVersionTest = let ``should use correct fallback``() = for (assemblyVersion, fileVersion, infoVersion, expected) in fallbackTestData () do - let cfg = testConfig' (Commands.createTempDir()) + let cfg = testConfig (Commands.createTempDir()) let dir = cfg.Directory printfn "Directory: %s" dir @@ -3011,55 +3018,56 @@ namespace CST.RI.Anshun module GeneratedSignatureTests = [] - let ``members-basics-GENERATED_SIGNATURE`` () = singleTestBuildAndRun' "core/members/basics" GENERATED_SIGNATURE + let ``members-basics-GENERATED_SIGNATURE`` () = singleTestBuildAndRun "core/members/basics" GENERATED_SIGNATURE [] - let ``access-GENERATED_SIGNATURE``() = singleTestBuildAndRun' "core/access" GENERATED_SIGNATURE + let ``access-GENERATED_SIGNATURE``() = singleTestBuildAndRun "core/access" GENERATED_SIGNATURE [] - let ``array-GENERATED_SIGNATURE``() = singleTestBuildAndRun' "core/array" GENERATED_SIGNATURE + let ``array-GENERATED_SIGNATURE``() = singleTestBuildAndRun "core/array" GENERATED_SIGNATURE [] - let ``genericmeasures-GENERATED_SIGNATURE`` () = singleTestBuildAndRun' "core/genericmeasures" GENERATED_SIGNATURE + let ``genericmeasures-GENERATED_SIGNATURE`` () = singleTestBuildAndRun "core/genericmeasures" GENERATED_SIGNATURE [] - let ``innerpoly-GENERATED_SIGNATURE`` () = singleTestBuildAndRun' "core/innerpoly" GENERATED_SIGNATURE + let ``innerpoly-GENERATED_SIGNATURE`` () = singleTestBuildAndRun "core/innerpoly" GENERATED_SIGNATURE [] - let ``measures-GENERATED_SIGNATURE`` () = singleTestBuildAndRun' "core/measures" GENERATED_SIGNATURE + let ``measures-GENERATED_SIGNATURE`` () = singleTestBuildAndRun "core/measures" GENERATED_SIGNATURE #endif #if !NETCOREAPP +[] module OverloadResolution = module ``fsharpqa migrated tests`` = - let [] ``Conformance\Expressions\SyntacticSugar (E_Slices01.fs)`` () = singleNegTest (testConfig' "conformance/expressions/syntacticsugar") "E_Slices01" - let [] ``Conformance\Expressions\Type-relatedExpressions (E_RigidTypeAnnotation03.fsx)`` () = singleNegTest (testConfig' "conformance/expressions/type-relatedexpressions") "E_RigidTypeAnnotation03" - let [] ``Conformance\Inference (E_OneTypeVariable03.fs)`` () = singleNegTest (testConfig' "conformance/inference") "E_OneTypeVariable03" - let [] ``Conformance\Inference (E_OneTypeVariable03rec.fs)`` () = singleNegTest (testConfig' "conformance/inference") "E_OneTypeVariable03rec" - let [] ``Conformance\Inference (E_TwoDifferentTypeVariablesGen00.fs)`` () = singleNegTest (testConfig' "conformance/inference") "E_TwoDifferentTypeVariablesGen00" - let [] ``Conformance\Inference (E_TwoDifferentTypeVariables01.fs)`` () = singleNegTest (testConfig' "conformance/inference") "E_TwoDifferentTypeVariables01" - let [] ``Conformance\Inference (E_TwoDifferentTypeVariables01rec.fs)`` () = singleNegTest (testConfig' "conformance/inference") "E_TwoDifferentTypeVariables01rec" - let [] ``Conformance\Inference (E_TwoDifferentTypeVariablesGen00rec.fs)`` () = singleNegTest (testConfig' "conformance/inference") "E_TwoDifferentTypeVariablesGen00rec" - let [] ``Conformance\Inference (E_TwoEqualTypeVariables02.fs)`` () = singleNegTest (testConfig' "conformance/inference") "E_TwoEqualTypeVariables02" - let [] ``Conformance\Inference (E_TwoEqualYypeVariables02rec.fs)`` () = singleNegTest (testConfig' "conformance/inference") "E_TwoEqualYypeVariables02rec" - let [] ``Conformance\Inference (E_LeftToRightOverloadResolution01.fs)`` () = singleNegTest (testConfig' "conformance/inference") "E_LeftToRightOverloadResolution01" - let [] ``Conformance\WellFormedness (E_Clashing_Values_in_AbstractClass01.fs)`` () = singleNegTest (testConfig' "conformance/wellformedness") "E_Clashing_Values_in_AbstractClass01" - let [] ``Conformance\WellFormedness (E_Clashing_Values_in_AbstractClass03.fs)`` () = singleNegTest (testConfig' "conformance/wellformedness") "E_Clashing_Values_in_AbstractClass03" - let [] ``Conformance\WellFormedness (E_Clashing_Values_in_AbstractClass04.fs)`` () = singleNegTest (testConfig' "conformance/wellformedness") "E_Clashing_Values_in_AbstractClass04" + let [] ``Conformance\Expressions\SyntacticSugar (E_Slices01.fs)`` () = singleNegTest (testConfig "conformance/expressions/syntacticsugar") "E_Slices01" + let [] ``Conformance\Expressions\Type-relatedExpressions (E_RigidTypeAnnotation03.fsx)`` () = singleNegTest (testConfig "conformance/expressions/type-relatedexpressions") "E_RigidTypeAnnotation03" + let [] ``Conformance\Inference (E_OneTypeVariable03.fs)`` () = singleNegTest (testConfig "conformance/inference") "E_OneTypeVariable03" + let [] ``Conformance\Inference (E_OneTypeVariable03rec.fs)`` () = singleNegTest (testConfig "conformance/inference") "E_OneTypeVariable03rec" + let [] ``Conformance\Inference (E_TwoDifferentTypeVariablesGen00.fs)`` () = singleNegTest (testConfig "conformance/inference") "E_TwoDifferentTypeVariablesGen00" + let [] ``Conformance\Inference (E_TwoDifferentTypeVariables01.fs)`` () = singleNegTest (testConfig "conformance/inference") "E_TwoDifferentTypeVariables01" + let [] ``Conformance\Inference (E_TwoDifferentTypeVariables01rec.fs)`` () = singleNegTest (testConfig "conformance/inference") "E_TwoDifferentTypeVariables01rec" + let [] ``Conformance\Inference (E_TwoDifferentTypeVariablesGen00rec.fs)`` () = singleNegTest (testConfig "conformance/inference") "E_TwoDifferentTypeVariablesGen00rec" + let [] ``Conformance\Inference (E_TwoEqualTypeVariables02.fs)`` () = singleNegTest (testConfig "conformance/inference") "E_TwoEqualTypeVariables02" + let [] ``Conformance\Inference (E_TwoEqualYypeVariables02rec.fs)`` () = singleNegTest (testConfig "conformance/inference") "E_TwoEqualYypeVariables02rec" + let [] ``Conformance\Inference (E_LeftToRightOverloadResolution01.fs)`` () = singleNegTest (testConfig "conformance/inference") "E_LeftToRightOverloadResolution01" + let [] ``Conformance\WellFormedness (E_Clashing_Values_in_AbstractClass01.fs)`` () = singleNegTest (testConfig "conformance/wellformedness") "E_Clashing_Values_in_AbstractClass01" + let [] ``Conformance\WellFormedness (E_Clashing_Values_in_AbstractClass03.fs)`` () = singleNegTest (testConfig "conformance/wellformedness") "E_Clashing_Values_in_AbstractClass03" + let [] ``Conformance\WellFormedness (E_Clashing_Values_in_AbstractClass04.fs)`` () = singleNegTest (testConfig "conformance/wellformedness") "E_Clashing_Values_in_AbstractClass04" // note: this test still exist in fsharpqa to assert the compiler doesn't crash // the part of the code generating a flaky error due to https://github.com/dotnet/fsharp/issues/6725 // is elided here to focus on overload resolution error messages - let [] ``Conformance\LexicalAnalysis\SymbolicOperators (E_LessThanDotOpenParen001.fs)`` () = singleNegTest (testConfig' "conformance/lexicalanalysis") "E_LessThanDotOpenParen001" + let [] ``Conformance\LexicalAnalysis\SymbolicOperators (E_LessThanDotOpenParen001.fs)`` () = singleNegTest (testConfig "conformance/lexicalanalysis") "E_LessThanDotOpenParen001" module ``error messages using BCL``= - let [] ``neg_System.Convert.ToString.OverloadList``() = singleNegTest (testConfig' "typecheck/overloads") "neg_System.Convert.ToString.OverloadList" - let [] ``neg_System.Threading.Tasks.Task.Run.OverloadList``() = singleNegTest (testConfig' "typecheck/overloads") "neg_System.Threading.Tasks.Task.Run.OverloadList" - let [] ``neg_System.Drawing.Graphics.DrawRectangleOverloadList.fsx``() = singleNegTest (testConfig' "typecheck/overloads") "neg_System.Drawing.Graphics.DrawRectangleOverloadList" + let [] ``neg_System.Convert.ToString.OverloadList``() = singleNegTest (testConfig "typecheck/overloads") "neg_System.Convert.ToString.OverloadList" + let [] ``neg_System.Threading.Tasks.Task.Run.OverloadList``() = singleNegTest (testConfig "typecheck/overloads") "neg_System.Threading.Tasks.Task.Run.OverloadList" + let [] ``neg_System.Drawing.Graphics.DrawRectangleOverloadList.fsx``() = singleNegTest (testConfig "typecheck/overloads") "neg_System.Drawing.Graphics.DrawRectangleOverloadList" module ``ad hoc code overload error messages``= - let [] ``neg_many_many_overloads`` () = singleNegTest (testConfig' "typecheck/overloads") "neg_many_many_overloads" - let [] ``neg_interface_generics`` () = singleNegTest (testConfig' "typecheck/overloads") "neg_interface_generics" - let [] ``neg_known_return_type_and_known_type_arguments`` () = singleNegTest (testConfig' "typecheck/overloads") "neg_known_return_type_and_known_type_arguments" - let [] ``neg_generic_known_argument_types`` () = singleNegTest (testConfig' "typecheck/overloads") "neg_generic_known_argument_types" - let [] ``neg_tupled_arguments`` () = singleNegTest (testConfig' "typecheck/overloads") "neg_tupled_arguments" + let [] ``neg_many_many_overloads`` () = singleNegTest (testConfig "typecheck/overloads") "neg_many_many_overloads" + let [] ``neg_interface_generics`` () = singleNegTest (testConfig "typecheck/overloads") "neg_interface_generics" + let [] ``neg_known_return_type_and_known_type_arguments`` () = singleNegTest (testConfig "typecheck/overloads") "neg_known_return_type_and_known_type_arguments" + let [] ``neg_generic_known_argument_types`` () = singleNegTest (testConfig "typecheck/overloads") "neg_generic_known_argument_types" + let [] ``neg_tupled_arguments`` () = singleNegTest (testConfig "typecheck/overloads") "neg_tupled_arguments" #endif diff --git a/tests/fsharp/tools/fsharp41/net45/providerDesigner.dll b/tests/fsharp/tools/fsharp41/net45/providerDesigner.dll new file mode 100644 index 0000000000000000000000000000000000000000..cb79536e157facb1e7eb4a0b37657130a7e2937e GIT binary patch literal 75264 zcmb@v3t&{$wKu-bnVECuop~i8kc0`M4oQeWcq(ebOQWC&_&`xIBm<0uOqfX!jM1c0 zAGbOzO2{2)ZW?_uC}+@ezkt}-fR15`~R)A&p9)b3`qUo z=-Fqlwbx#I?X}ll`*HRjR$ci4auJam&)@$}^d-FcuS3EU2ct+1PyI@mp78y!=}X$m zA2zMqnk^&;^0_Vf^!8*=y1zd+nB0^}=7;)|+5Y6Ri`OQ%=Xx`3p^$&N#d`H}qLrG9 z-uf54+d|P%3O5BbFHuq>(iQf;a}iG>-hnqu$8n^w-27+1X%y*J9v5|Zh$8ZT@oj-B z8!Z9f^;W#%t6QUB#e{c2CW%l3=g$lHd!<0i5pZ_v?h(N5=0<(kelxl`KFgs01WN!>eV9>+6vCF)nmk?u ziaLi@^{3E={^o*#&~Kql!~-?KmK~<|0pPWeF9%)wTd(%ze0ay*QMck*b0?T-IX{r8 z$BB%%$H)Z$%&aojCg_l%(HK}9po8_z5tI6jnSuNnU|vXo?s_9&rm7K1xZIwwyHJDZ-x4_p?}vW9H2Y-o zO4hKaEHm=8<+nM-G}hb+^=i#+`ENV8$w>nptC`m5xk)Im)yTtn3^eCM8bahpdvg_$ zrw$k;?(yRD^%{uJ9$^EBO6XhO>|&t`oHEw3m3=Hm3ibVdUQ*%WTR zinqFITeKQvxH5k!m)!_H%&bMvC8dBX^F53Q+j4w-mPt3G9B4Yq92e~ZP~%snww|vK za_NB@fAY(_7u;tK!_?eCZ>!gvn+8rO(x~5LOzOGfiYpX_%N&Mi?iARy6qAf*eUK#% z)ml`(VLwwrTV+(Jz#Kh=I{I_YztRwc>_5>JfRPh7ucWTUrx9ay^0MSL!rYV2xFUxM@gL;$C;u zlv+f+^7>mMg>Kmb!kT6m6j}2(joU9i%T1rg8=RH=_ptn|=sQ{VfLS7{-xczefI-9C zp0y-D%aYvfQj&Y3ZY8*qKZRCe!QD!5CI2|V4VMz!M7>!1miUkxO;b^B^esZ2qPDtQ z{knm^HkF%(ZS68Wg)V8p>v5aI>#@3kM?YW$`#-^)>CkbxY{w!%Gw^Kh$PfPn{2YCl zBPuh>wqc7c73tx^6g@{2GtjfHyWsqw4CuPh3f?1d6>dE@lZ#>Z3}3{8!sD&ZVv89zQgc8x0*~a@YyTD>nT!aUldjeO79VDy_6#%C z&Ws4EWU^-3IWaB&OQ%ZQCIMOi9{e|vR3Bz8mOBm`VKeM4%tZl(c?e)?^YLn?_f*Qr zbq57_v-?Cj9?Ihl!;4lTw;GJSS!=V?T&xJVvzRw;>O6X}U8H2-QgKj%p&nBHiakqi zAqva~#!(Y(u2d+i7{XQ3Q586-5#l&`**1~4zXIPxf@cOs^Ia9vT#1@Q;RsUEul?Mw zMK@l$0&mo|l5SjX&humBNum3-_>B|>W`Ao7kF*?-RbXA{UaDC8$QPkdS&Fqj-qd3BjwdTa}b$3kZ4n`ol`=<&z z&UHd!7hB&FL@L{-(12p8P$>I6^SCm*3jc{>b$6+P%A}s6q$WCUo4=yuhO4sL+(WyM zTV5D5PxOcu_@A>JLkxQoJQZW)XNpK8k%B2Q@)VbCvaZ5wCl(jx$x24~$CdYWB`;j9 zC9grWn3ie)TC>X2Ub|AoM9ezkQM6zLr=khu-3MP3_n?wWGbwxN$pIUKw4{KvEa53>Vq~x;wm0OEXUzd7Xg{Cw~>pcUXqE z+$v;kbxmr~YHPZaye8?^hk3xONnOND;h0-mT{SJ9B=~f6gFkvsOY@qE40$SmIq`%s z;(rxi$%nq;807KGuaNIqZk!Yp!~;h~zs@F3?AuVa3bMFbPjL;wRb#&1T5AM!89_}6Q)|GBC(1l&X1nzgmk%FSfsb2c z+bChX;hvi8ZqeL+mr?L=|B=oV^cJudGjxyPO08uh=8h!eO~9ji(`lyFkqnRY@8k3$ zv$=v@)Z8h(y7HI|SC1jdUn!qHj0$m^Rp6-)Lqye{9=Zc{N4rH`g(|5MPdHQSxE^r- zE$-Z99L2(@B?WK9J3HieAum>Xh0W|0DK0$t- zQ?Gzr{HN!x1ij3o;R<;k4LNuo4e>CQ^o(HD$y3S^$cQ&D@rMw@%+gxpCjmhZnE!JQ ztdn1Nti3INipRG6_$(J;%pr6`>;W)S>;bS5r>|D*sG1c6SwADr z#1e1IU+t6!dAK6HUg3H{uJ=1>Cs@C8ZJhOcTfW$H!&4*8f7NpvY-ODWLMZDLetAZk z_=QEssq*%WoGx!;WV*b~5iG2sq_+GIN@QpQAx zI~|~5S-8F|+R4_J1$OGo`xX91)%Urr@I-6<*2ak5;xW)a{TPf;23NS*kJ-SAylG;V zU9!VP1U+4C>j|d8dP?yN3Yx)hPfZF2&@$2@NY9Ns@lK(YT1K$EgPyRD!VyOebNOkkWtyS8BL4iE-c!dMw~&kR0` z@llN#ykWHw9Q~eFuP4=wSc~Vz>%cD%_Q2qGAqIo@$fj0McNwNPk-)mfC_n({BRs$H=}|$Vl=cs5|Zsn=@zV`C6#lCHskP><^@Rz}T1SW%i!bUhqg| zxC&>6&A2D3q>dY9xuQmDGf0k`m+S3Hv}_7{CP<*?o1D_0g|Al{EEl6z_SsIY$+v*i zok%27AAnQ`Q3Wlv1?84V88^+DEm0Fw(FLGYQ?95fP9g4v?!rbQ>XrHw(D#gHGwzF; zt!G5dxIgN*$f7JVyBmUWnkfqhWWg7^gpMS!sY*H8mzi zwAMHCH$%q!F&1WK-T{3%g*<3dR;VzTW(Fk4QPA#$FnyTn|qB`Ph^v9?@*N}yu}#FB|F z&=b7kJX>Kg=M?*P^ZbD@?TjW0+qho3QRu^4`Iw1mm=#N!NiQQGWR2=WI;;lMj3}0_ zt`z)W3rax*2HJ@v5Htw#8y055R&%L5{ zeeD%-BWl!~f%&i=HR5K}ypsvz-ncLBuZahvCMW~ZKr}d~De8>|UA58R6~gNv(?x?| z5R3++f!ZtDe;xHleK0Fayd7L{{x#T%a*X-kdO4a0TFsFPh{Z$Ekg|84+kX&szyKPx zKRdW`7-sz`xJIm3a_~j|ng?d1*nn>2{~O$La7zA>nXm#qAN0|{NE=5Ba6bN#GdLRc z6dp$Vq5r~XwuE%kS9laK?{}o&DqG?n?;so@=tky&-j{>N!RG;dCm7}k)G;y(c(zmc zUFP15F&NFQHDBq<&qtB6>(y%N!$OC#U`?&ercSLZTXcDMYTsBJ7Lf@k6Uy2sAz-w{0T-dT&A7&<^&iucDd9iA>vK)h7Or-9Bdi;8=6y!2eFlB%0 zZYwax7Q!edHS3d<90`%52Hz4Cg6p$a39#ISxLv$~c#DDm^cJ0G;b=du0QP1@B6QP( z(kR$_-G`!3+qs;Kz29MuSm{u)>c+fB`yoZgmeNcY>BAf;JOnPF;<2tduc!W5(ac8@ zG`E0Xo)OeQY>0g^+wJOZMhTN|TqGs&o*{-dUe{y4Sbd5!^3Oy4&8h>UH~kA|JlDv56z@Rl zb6{`E&PnSuBY%ty@?Ip!7r3BTFZuKqp_Yer*b>wN?_)=}e-u8(sL40p$1lk8ad}@^ zo7#_v>i1mOsFD%igbpwPY&FXLiFE_xmA}FlA|vH9_XVI^+jIq>fw8%i`x0KY?X~F2BBc4C4pR_8 zYnxlX)ADV-u7pFX1(N6q#o9_p2r;j*r(pcJ5kg`b5=~%Q%na++FV|RZu7cijjY2MW zTPS|Bm%xmSTD&cj#aATo31DKOWu+wozX}d+f}laKA8|5ITX-jbM8@)~RX47OELsFC zF_XG*69plF_UMUA_Djj`+U8p2r?{ceAACHQmcLRh+uPvWhD94)!C82&&yfl?iV+9t zJjNDnlyQ!Ye&4b=%SO*Hqn{==!Z^o9pSI{N8|^BiS2oHx$3~xF`X9qaF8~%cdLh3& zBP;m@8(k%D&&WmcHbySycga}er(dGJ(?t%Z8E30OB(_v7+=th~_i^wL0+=foW}EA? zkU(MdVJ;Q}0t->xPf>;|lGG|eh8a+XyI5C1iQzW3pK8jI&th~M8+Z)1ER`^&4lv^{ zw|o&6B{*SWo3RvRB_xDc_7%t5F=w1$$BaA~J04$ZS#j^mj!#tbcsu4s6u&+Nt-*h` z`la!u5$q2%az@}QP+)VjOT0oOe`PKk6J9|3jjm>v#CCKEVz8q%{PK*fc4QLFfY4I#(M(g>j&23bLUtw#F{H5_NnyiWi0o4b_3^)Uv0A;Pu1Dr@>JUE#LIF`s6;3Ppf*v%`f>r{?}5W_Q!Z(q(fp?w*7GVMFQ z%(BAXRr{W(sjrpT#=~U$4W_AV8=G6Y7v2Oq_zht{%-l@=KMo;boqc8WYEI2KXHNY$rnl=l zN7c1u z235VVcX5Kfh$!oBNb;VLF2Qs=ZMtu;{b6q-gl;QynE-5%{|dECcb!dlz@m#zpqtEe zyKK6B$K}_+bi0KPy0qH%dV!s~GHBHmG>5YRms0XYa6V-u`W*jy}aC^c9pk0#RUfH}cCf z0#7MEcU0bN1;YZ?JkI7B>TU_-)|v;=wk>%$9X6*_M8Nm>H^*^7Ys{6}}eIheD+U3>Dxf zgx?3QwI0JsDd7*w2A3Q>Aa3A@~b_;^wMEUv#L(h`*24KMG( zs-0NbOJ@b3?~8Eo-25R$&E;=H0`zn{zdR%V#4n7=?~}J@FxI@Cnf7SrYX^z ziG(1YFbfi0$ogG4%<=0M!h!Jk%ths%W*tarwW^e12GpRuU01*lL4&V0yfJO4wV%i} z$;!Zh$^e5CfJgBFhG-Gn6sge`KSMhSMu_Y|n=>rrTL@6BN@W33t&kL(T_Ty4kPt@J zeDA}k!>On@?{#su$t8PTo`rC3XnDq;sBv0bCSjLeZ<$^}u!+KyNl{_2A1vDhQ+r^O zDLt(Az@B+$al)_{-mf=!C(POl;|7;8KY|+ZpK3PeJ6kixvuB`f^ss;9mwN;Ye4fnn zxHBL0GsHF+nfeg|9H>a@!%XVR{TN|DALcYO^%I1tpK=t(F@A{Bn=H zpz!6q8Ck-cNgdvtR+;ybwHGYW_;ecn*i3iMZJX8BKC6B9BF1>A58;z%5}g81#s^jR zOhtU{U_RTw1%n*X!&ee5^8!=*PqE29iskegrUdC^F8$n;(n<)P;xhyYO(|Ux)`P zBiJqe?3x)=KurvKj*cLFL*fZd(+pauF@BH6`27-o4WXY*{U}nK^ghIABJQVA!Q7*B z>Jj}>-A_M4XwWgx7&OVn92UAb-XZZ-60VbQ*tOYZ(5*=I(}OO~^?kvQxTRc#e)_uS zQN2K)gA+4op23uF8(hj&=A-(}bTRyhK_4)g|3l_|ra`|pIai&RY33m`=q4|x-sfff zWZ$EDnCAKzbBB*hx!S+PZ_wTT0>Z=oM-l!?!oNs3E5Nx50p|7|2_Hciw)FO9K-0of zx}WkvF6*u!bNB&5H~khjTwWu5Zbo>SwAToURy$zwC{-yRPYNXoko;t>SY_hxBPoI$R{q@}X zZ`HGG7dCKxzthOp!usUD9y}gpT}h&SsK0{t13GBk_d!DfdIFFS)@jgKGA5exAfBN2 zKuIF~% zP#wNrV+R7z2LUyJBj(b8J_D!;qZDQiO+-Hc|`^cJe_`64i%b(HW9$G|?3G^2W`kX*+ z7niVz{#Ei-q5Dpzv*?QgwE}9S#q;d3UqoKMdPbT*(i_?2gc%LRb^ zbOHTX(k=xwA7_7GkhES&yM%rr5O4jQNte?xp}bWnH{d=Z%W@Z>bLeV%MbaLUv`y$O zoc08uC9tU1CG9Cm+e-f<(9Z!)qb&VZpx*;J4JV%866kF}&9sgFCQud3t&P34#rtLrd>2ypx*%srPBK3$KCsw{N?4*wz= z##K~?l7QCG4K!V2Eu9UhiALyjNxK}-WO@(!3{&m^bQ!FAwm>&XzCAQo^6drWr}xqV zfj%YBZRk&&@B4tRq&sP;K)(QV4ZWY1uKAmJ_v_eyxT!{@5dJ%R~9=fA9GU9k-q^!sXV&9|%Xg#P0=i_P5J)g1aH zTnhS;nrYx;w*|NR!J35_S)XX^M7VxxX-jeHlQp*jzj5jZ5f2j|1w%7^b+K153SEpr`0n^CgVdFF4R^ z82u+rW6Gx}=X*=9qUjcNz^A*as8vDU&-%Q87Fy6DUl>q_1>I`irB%@t7WAU;20+~w z^hbgE6a-h3K)ziLG}#rQJr>mLpXQ3uJ`2j=Zb*#o5y%Bi?9dXlU!WQ~C2*cAK@SUb z3oQ-Yuhr0(thBX(jH`wYS!vx!tEHzcXj|ZMKrae(v-ios7@#)R_{bGEG0#hUU4a(D?$f)E{@(Q@233&=-TB zbT`sg3pyOUOKYS7hw>4mjaq5H58j|nrP~BzD>&OTmF}_9m`jpAWkJj(Nndg(&+{bd zyH*-=X`&aLG`G=2vrcC@Z>Ck@EY|TW1$xT6BYZoq+V?4lt`C0`&|_BGqryB2g^RnS~Wf3l#bt9s2v zw2l`qu)%QTUrfwbET}H>DYJvOd?amJe96d!}k6i3sOOctJc!_4m8=dj<#A5_o~b2HVfijbs2q1LEb?4 zlkO|%hy`)Ky@KRY58C!;(fPhBX!;qdgdd>iTtTZXXmxNN^4()W?~l}b*VFV_it_(O zkC+>%!-BY1ZJ-ST-R!N34f;0FE`bjFCdVE}+CG&=1F>%!8>n?Qb77l5?CYgbfu8aj z@f);j={5yXZTuzQwY1NITH~+#257$p{n+&SchDgVS{nEI^K{gLR>$$P2J|}xdEvqQ z1^R;pJ!Rgn73fV1>WMSt<|Q<=I}m>j>&}RRMDx37k_EBOc2UxT*w^i%Rx2O3$}U>y zK$Bg&X_*Cas|?dR3*uH8rfvm^=0~VkAlAfE{|Ftl(tZ=)?%zX?S^3Z)EGJV1+itBT@up!!q6Pt!pQ`cCyPf}f)& zEGSu19r^-IU!W*w)?6C;I<2&z>{weLTpywwYF@Hw)TF~UW9oo-mzXi>!TT=BiI%q*(sM}ff0=;QL zp2>@={++zo0V6uBoj>_zKoJG`zBze+)h{SzLG@GiSG`Cb7G=+rPgebsRtm(e`PHgl zQJ+97^vCLdS#^y5U_sxk-=X~ny=g(;t-l{oJ$Bl#+R~q|f2Ha_Xu1WxQvXLla|Pnj zSBv}yEwj>IH3N~CXhTWb%hczj#UsBVKFErFGUS^T`7P~t(pE=ap`!xDX;Q<+$g6~< zH~!+@8yoJA{2%fvh`!hG1wc1g(CZC9j{K4KSWtCiee^ZD!-84`+9yzS(&EO9@ftlW zkecbdMo$Q|LVwk~2Kk;Wq5Kp5)Sqy-wPy*niW*PTGyJ|DmUyv=7DJq!*pE*JFR7w*=z$n;QQswVuPJ zbNgKv|2w^9LEL_%-E*!=UhoX@gGMwAgHIpOdyKHb*>6*N!-8ABxS@e(I#X9-F7V;iT=*=4)>`X`heJ*MciqY9-kMZMr~Qhje0rwpbul zhecYillDyXOl{Cf`&INTZI6@oc670}&qyPmuS-kVp+B(mTC)~v>nJUm#VZhHW|gDQjJ+MFdisU!_fV(!LY9NSo`VeIs$PHt3}7(AH`wTK1r zd}+NlNgx+W*a0Xh5ZB?F=z1+Bkdoy}t)qnUO6`1yGF*M7wyuQoDy^@C@+xi6p?o%R zl{Q*Jxk0-}Ag*XE>QLE`%x-$BL$KT!o*P_+7&7!Fta1 zDTEq*O+v=Qk2P>u8h=PyJO(^}S1Qu90i)Adf?p!Jo|90~uv8kpcW`)PBZs$1c&CJS zOL&ij_euDGgrAo1Q3+MK%2zxAj2rv^+-jvVzdN4XBFZzk@dbf-GH3px#BwTaG?&P5 zGV~`SE%VW+l=F#e_m9#m&i|-RR4y({C-#}Pg#Rd?QfZYn{!VoGM}#_YTv@4GELNj8 zBvsj4Xc0g-Z`C3KQ=$1HEFM!pF!&D=Hm$8GQWV(<^3A?@Gdat zeM*~wyua3>!ubfj5KI5RGn?kkS`0J z`s-CUnO(X_Lj3h)2Jsh;8N^>UW)SbP*Mt9%eu@5x$opK=q3uWXsQz^1a&N2l^GKg} zuJ&@|A%uU7JmKxsKWu)-JA?ilxnEnXp^1I#^{Qyxm)7rz&h+{4ed}?w$ji~Qe9I*D z4Z0+@2;8oT-Qb%c-(VK$TVuETR*JMMMcUb-jddEg+9HW}S|P7HHVD2~!rS%M>TIA_ zIQL2TG#07kTPN`&5+9WKM^N7n2Kyw}poI8l1x@Zj_-g152|J;;+kFT0w`$gh59mg1 zR>Iw39|dY}5WBh~{Auvnp?yz(1pA$T(GJ&sH~bgvh1!2Z7^rLgA&f5 zy>+Xq7SVlmYpV|EkJVjO^{{B~VbR_`?SqrwSM`MU#mUclp3uTmp7nIm*QYG0x`ci* zWrx;9zrfyQ7ri-UC&Ezu;;QvD1z{JRQGYYyOY4uA>uF{EbKx%9P`@9TZS{8{*9hXT zi<}A3+mlk_lTu>6V5UphD&fM3WvoK2DL8+7wJLmaBv_R)Rs05AzamXJ;KWyZ$g-E+=Fmi$De;vOUnlW(65k;4H^dHmC4NNva^vi{&-IhW`?a^U7aJGpS>o?V zQT-=Vmd5*pW>CT#B-|t69TM)7@LmbsI)8&-CUp<$Y;OkzpHSMim6uuFl`u7wc^8Pf9J8>1>&cb?)QKq^u`}ex=Z_ z6nZay^(O81;$Ro$hWcBrN5Y#W+(REl>H|0{!{LS6neGRGztnwD@GsF- z+P}JA68tOl6HvZ_Q&AkgL}$V~sgUuS#(0-@m8N-I8uRgKjQ0uNCzMTA$oM9~&k&j! zR-CzY3QecrI|bi`9fl!ymteXClNOq^VA6u=(YRh&P~PIs3O+0NF`*n2%$Q(q7RuW} z`6u`7g1=qx4+#F#Qr4#h|7pR0OYq+l&fgRK_XPiv_JC`P{*t7=BHUh))K?_crQhs^ zHguM1DZ)3aMs=?BsLop2um7H|a2*oNA;EkLH1CTX1-{SqlElfy^yFgtq{NdF?~r(h z#JeRvD&c+!4@r1b!k1iJF1eXc(h8Ydhr~PF9PgHRx5P&!J}U8>-JEy7VD<~4NVNe23tB1m9$^B{Uh# zp~+wlor38UOs8PFjGJ+aG%fhF;M0O16U>-k#sqUfFb4#4Krn{|b67Bk1*4f_$tIVm znOtI%U^=ak@tuMn6U>-UjtS;~U=9f8fM5;_=CEK63+9+$jtS(^T%ya% zI!OyYE%>zH#{@Gbm@&cJER+WXe?agD1pk2G4-5XV;13J_m|%_x=9pkKpOo&C(tT22 z!88e`NiYWlb3iZ$1anw0hXr$3FvkRQOfbg;Gv;T`V}9m5=4Z|a1am+z2Ly9iFoy+m zSTIci&eas)TulMa)hU=x!E_3yTjFWKr>!_s9uv$l!5kAxEhx1MO6`JDJHa#wrb#dd z1am+z2Ly9iFoy+mSTM%~b4)PD1mg~UlqC#_v>}l;#QdiVzEkj>g6|Z3S}qXp*$$zA;BLK{1L&tEFsnWz`Zl#u94CuJSgGO8ZPl@4VO5*mQy=w8PieA zm}P?Lm2gz>qk`Wfn1d1?68s^-(+;yBQ zDVU^SrVFM+Fdc$fCYVvdj0)zE#1BcFCJVR8%zr^=T{E);CN&Kk9k1Co5rr+NnWl8*y#E(k+sKoa-3QeQXNc@n*k4pTg#5<-k zO~+KG8I|~`#1BdQki;n|vL%_OL*gA0-!Jj~5OqY_UxF@3U$>ANM~E%E&l-!Ji_ z5O^lzr=s2J)uA6`kSlH zJ)3jH~rr8z0Y|&eHZyY?)$s1;D61(FYxog1HnHAweY_1+uciD8tlr&N$9u4sXyRnH7i)7LZZG)p>x2QU&V!hR zhH&d4jFacJIKPjR2RjI%wFrYDrfkzVtd@97h;z-AP?b0pkv-2M>q}lM|3&``qr^a zQit$#nu0KeyCXX8158CY6Q}QW9G*J`;Ve+;G#gYpT4)BscHBPE@q4Z_5v~N4PM08E z$NBwsgllm>M905~wE*GOxbvY?51oau7q>ceToOAM;TGJ~&}l0zMVO`K2>WqA13#0G zn;1H79bAZTh*lxI4xjvV+$XpM;coEO@q1gBBD@KAFLWA3IoM;Ss}Q~yrRj7FZA5r0 ze%({2+fcHOfA1y(eLMl1i_n?aL5bjQQ2^lzErf6}&OSuw9IU(}G)Idg?9i$a&c_*r z2yPYBAzY$OK{yL13?j5lo2ucy74*}Bx-CKdv$PYpYVN1Q^j+K{d7genzoGwwZL7F; zx^|}4rM2kS>mSs2yFTH1)b(A@bDsAb|BQbgKb^z|C1yM+$%#U#AH$!f(flz+X3 z>FxlY>FxlY>F&Vkd8WIAjtJdei{D=G1DfKRj&CCPrA2M2z%w+(XNIQu%+M5{8JglV zLsNWOkdMo2(G;I8nySwhP1SRYrs|os@L3C=1)k-~YO0=Djd!n!wpskPfgj7i4RSEu zHps#9Z-X2r?bXhudtK+z5AgiRbs^pt;(amR7vpW>T_DpOqSMS_JU8Jf$nzN9KQ>LF z`8D3Z0sOXkCoS}TkgoCGP5Znb0i8(!-^Z!R_Zi@BqCLLP;`umz(EoAz5T3o-w`e%< zaT*J3*4`J0X?wM;+J}SJ;`t@54Sx&xZ-M{Y)LT{1E{GSjouXHWj(>r0XSO$!UzRCk zxAbT7ZM}Vcv|{bnbbeqh5b438d}djCFx@tu&?35cU@*HqdwqH^o9nMkw|G^qcc?FO z4z1l?7|d*^i#J`H=^3Q$g`Ql#FT2U&)3$E+KxS2XOSXsBWU`yHnclAc!eF|;CqrGF zw000h6b7?B1zMUzN`9zkFqiMzKG0|JZCjJs+y};xql}_|bB>q+at)@ls3CPN-!X(5 zZR*Q(&$cr!&GlKC3)F>sz~DZVPxm>Lv@X4+Ko_OAX9@#p$iy6rV8^n|rlBp2Tb$2W&4X>KP1}~{@)-o%2eN&c{Mt-@XSOGUDqFIvOeLh$wJcj0$Q4*y)Mc^l zE$U%0+9f|YG_Vx^R^{}8akg|0O}7QH&1?GR!Y-Q0P1iA}edYo>FM}3I4`zDTW_Ao^ z(ArDV1#XsAneCfYO>OEqGv`;Xjb%V9hWdND=g_77*+DzY?3r_EW%~Nv;Aa&%f95<| z(Z@}>BA4Hu9vsAdZ<@}PSEi@P<}IY9LxsWI_Rc}v2;Vd`C_TX9F}r=v%-OVVXaMH3 zkd|cod%;8TWPp`#Hxvw?Eje!+*?G7xp6;_c3ySFD&c&^1v6~Hb43=1Tp=0*E`KW_x z5AJEXe$=HBQM;uvu1cXI#hi-RirgrlDL}Z6+4EV0B|v*AFsBrlT>@}H%5G7C1+xh% z=E&$n$sjC~$i&NtJ$v@chH zEfr`B45-|6IoqNliv{yhD5%8dZN3X?fA=AtH*#F#sG7V>5-Msw#W-ZtZT%(&R=3m0#;+IV-zTvYplT(-a1 z=w1DTxe{7XETW}p=+SQRxeMAA;_~d^*3SHvj=2kGO&IE|eg$Tk{AM_H9=|E3N3_MT&mZ9_(3<($@2eUh+U&7mE zdw5jo%kl`oKR8jqkOzHjWT#5%Cn$IT>q!sVeq$Z~`?o5^cJL^&s1C`#G~K@@lkR0< z@W1MRP$-Wk>{Cf8T1Z!B`nL>jrOttYOn&4@ReE3mKCY;fwYi~u z4-cpX87P(WTbl0cE3C^&+0tVysm5cKNav^fdoiM{8S2OM0nNr@S~#bif+cq3!Tajuf=HU+&HSPJn(0jt!P+ju$bbMC9d4* zTGG8YmMM$tP(saMS3&hisb9ISIJsP35NJZpv;A9PrGu2VM?c%h$5V2Lv2Cg8FKoxy7QiE|Nqa^g%4och^Wmu1si`q3MCGAJ{zEt&j9 zx&BKFnLN)!iu88kl6>wunZlePiIs+4QYg-Cx(ZV9i!#?0acVA0SxjW%%MgmMgU*X2 zpqG4{Ds5o#VdZoE;Sc%;H>>{EJrCA2m`|_E4Xnf%*mp5TwKN<~K~X6pr%#sUoJ$)w zO8t0()|cMRwx!%pFMA|$Gz_x`v|JKqj<&;*IWYSmJBfPWwnSVjukEB9f^qoDd?goK zZJDE6zNT368cg)E`OGEk0x>h_?d-t>v@o$@tZEe#x1k;-ubjF3@fu zk=bcBW^JdGHyx)q&37JLo;`F~D@Y!@(40W?%u_1GKHM7gM8Cx}8k9M9g_Tut35nH= zrOI`=&U_xdvuk-jhLOCr>MWN5ZJlFRX*I9qHCgC&Q0>L}i(r^i)$=jHUyP;t<}}6= zVmhl7PADH-6r=`Xk-(x{k?q5XME0o0tc&9r#8RV+j5{(tXFh7m&M~yUnky0Z2C$M` z$}@{nykwL~JEPS^o@4f8P8PiR3>H59(pQjFGIM82%WjmfvxF9)+!?Ohn!!$LX>Kh2 zHsy9%p2wQ*tVlzvTcF70+Xn`B%f5hs@Yk|lptU&|UeW7Xs)cr#x6}J%d=}BW3ZhIa zzGOGLq7`3_87h=xL-wT4f|p*rN=*?32Jhu+_!lL>O_zW+1t+b@=eCzml^APbxLy@~ z5hs-RBg=zdoQFZD``|Y)v)n$&6||IP8-wxzmiw|c0k}L_8@G+yhH2wcDo^?xm$Gzg zrf1tatiGWpX*;ew5boX9PkFY z>NgB@G4VKu873B1&PIsF7wQzRn$n&Cm$c=Y^mSGzQ+gP%X(UHZ=GEywm6k1B zJT%zR-afx#!(nZVu@w}m`O5f+sN+gft5qom$#!$&`$+{)jzKQhCwoWe4H+!ac$`xV z>{V};XYj)9vK(d+D$(JZEt!NXW9PxvilKN|<9QQ}(Q(T~mu#)EclTqs$As4@K=ELv zY}ghRuO^BsadLF4`hu;Y)wzOdW+%O@MXWBWnm{qOjC-6c78W13WFNq3dkZcZWJ!4= z-p46f*gL)R#H)Lo44XY=i+ubWOg;G4hSgiyQlB zWjotCcU@^tECgglC(aQH-I+m(YPme;!)%rNi0WV5acFHO-G_;+J$0j1yW6bQ4X+9@ z&+U~}o?SN2F|bo9gQIfgc?G}^^E^*k70Y7xe5i7Bc8lt9YQ=2NbKn8&UGIzg`*yF) zrF(hI;L516Q|6nTxq_8f*a>c%xW_Awo-IgrzQvT@Juk?mMqY;@R{1BjM_oy>HJL)L zZ>Q)>HBLfP50 zIu#~b?Q>{VdK-*SmQog8^~#ggSeXEot#}hYMZa5i@1hOIOQaOyxDGV~k%1Ne{AHJP z5pRocq3yV_b z?^e5(|AAw%7O3z7YNeL8SF9Cn%C=Ip_wiX&GzRXRc0ZSC!Gx{~iU}Syr-!hDy)2#QmFG|&?}lInn7JIQ4E5b*T^{>{_Vk3;1B6{s z-agIcvs+|d&C_ga$JFlNOLOqnC3_oNRA1&r2iH^_dL>*}K?KkC2o)4u0+vkEkl@S* zHp}-cYdp(=vv>`=B&_W$M4r; zYh3omxm|e&rd_JTvAIr6ZL%^>=5Ru{KvH2WgM<%}A`<%VOUQ@p-hde2;jewcuA8g+u$rKa{oBD3$9?!O(2p}f zefaN89NQYk(Un$85>*Z349E!1bPUsMyvfB6D9-A_8KRw(Lz`tlm!$&2e!zox7rAh%6>9-u*-N8)fRxb)(j(s;@=(y~bF z$61m-%%8WQR9f^-oJ)D0k6iuW&E-?54fD7j@MM`Oz>pO`>z#P6LH^Cch4XN2*Wv8c zfN(t(r)p-Q&I@r0hD?U=o_&#}=_G2!wPU?!$~2e;rVnY?2|qgbQlzq;Plv>+l}-n= zS)@&(?o7K0_2~n)A8*!Y0Wzdfj|^!uEYL?B9x(8nRUi(UDPaF1M8v(WpBo#=-3hlQIkBRO(LfB#qu$%+J7}tbCQ>>2%A@y z4bXM}czLV|mX`IxZImx5l`Z$A%H8&lm#f;>u6bVC_@v5Ok6+;vIg7oEd9mJDUrNJC zVEP5aA!h9exvv%V*@HT>B`N%=prNx*+_JXzmrE|z7xzoYqTAmocNfZ7hFsj%ELAVj zf)$W+2oTHGk2u?Xv2PbGmeWti`LqJUHqx#x&9`0bp8LG=7+m+A;F5=&In=Tjxfr+k zWVxdkp14n}6&WuR4Gtkri{2@RvfEDBI`_H){^J&d&fl>tm9wO*v)-w!6L_6VPbRP3 z`|Oro3jMML<sZ=N>ecY`L>8G8xiALVWou8VQ0}ME*$Tr*tV4>l^Xb% zb`eBoMHL5;0=lGX;x2Szd+5ie0p<@ZxH5Rv&}X9Xe(>QThXpAwqqj``XG}<4ik$r@ znN4sAT}chZXW#&7B|J;R1K}BETx~2*V(bC&Y)og8;K$Pi?wo+DS7Bgj!%=E>PquN; zj1@Tg%q|uixkz0rE{B!gDfxK1vI$%;^i?T0ZR?V7*%uCPbWACVL-v6@@+jXto`I?o zr*ZM@!Diy&YBKwzm6zMG)UPug&kWRPpsdDjK-{Lqf11h7n1j{Y^92f&c$Ws2N_kIK zNa+}XTLJU9FR3xnZsy`#gDp?Z_Sih^UW!=*{@(f*y?gGr2M>I5x$9<*llP0)Z@8>( z?$O(g>R3pNCA^QFyYZ&z&-`Zso~^~^`Koc3HgKdRXYUB>lsxY z>+*)9t74bbH`F&oFO99Qj$N%agzJMUF|CD>ImSRVQ;M1-s8tga8W|O9JzlaB(`O3R zJY9iV_1dmpbtRGe8=$97xjxGV0i7l9d9&sA%v zkFBo{Gc)AWnINu-KA4e_bZK6%H=>oDBFC9>quyo2s$EF}iLQaAJ4pi9gIL!aaU$I1 z*XltK#{GqGIP6JML#z(4&Xf(vRS%^C_8LhoHhO2+n{@H3z8?S92-dJ6% zA&fW(wdm+ayc#Y>@SiJ1UQddmqaTy-0N}7Y1u<%&s4KEb4?-T|QB=;$M&`roEBS-27n3a zN~edRQ}qWO>R!@giP-43!^kBH4{Ep&VE-9}juor6a4KIEOuy$5dqa&}tdEZM;ZnrqwN8=Ay+a=j;hncTNbKZd)^Pa#6eYsxb;a;7TSW^1bU!<~c zqgO>UW(w_@*6OFKUWA?kw^zZ(8PfZ7^d1>y3Oo|unacXTY&5Ua+(6hd!n z;O;h7jb6vS#%H46GgTBxz}HD{bdu+>itBhpWQTxQoPt)571BD>Z4p?n*gQLuG~kWP zN|&PMMOUHE>mtP>_O>4EKy<*&>V&i|y2>sY&V%)UQPQ7eS;El_?Xz>)0hWRR^uGHt?dtsk`5<5lF zWO9{&f@PpFILbpZbO&2z>qK9KA0L|?9h-;2FPec1^-9HKt+7_&7CzO4clWwuNyk1KzhI$_}JMrUIa4UZapYr^NUSTT(kTS2 zCb29wYp$!BQTrhq&rN;YD1vGx%oxW>APJ5zwm;TkG4Q&h2jmT1Z!&|@4BW~#b$NqK zY$7W|iS$;3G6Oa}^|qmP#Pdws_M~+t@;qMIC5>p4h~;`PfeMEM{^CsAZR)x{XJT1W zpi`=2_Kx&1^2C~8I`AM?Bh;T}dQeBHrc<*Dc6u%fg9ohCsY+BdUYlujtR^l?pT(AQ zVg|}i>QdL1O0!uo}KRfVT%}utTj1@kt)` zr;U1}tI=Hp#WF|svJP2X3$d{|nNE#xb{>o*gmw{kNr;<~Dy31wl5eb@7c5#lqL^~r zPUU&%*d;9U*d;M0g`f@$6H;)DT%3;o9h6CKUd4nbn_*Pf#|DRml(#{M5O}>|T;pa4 z1LW8xL3I1E^?6t!1ta|KrxS6rr(f-8}-~oAV*NW-1Q~W$$81I8A>8gvfkl6`BW=q&- znP=9PI+jI-?GrL=FUhc-Gi-Mvk_1nSK2UKf@SB60&` zk8_dWBb|lpp z%~`1dzgFRw7{uv~f&*Y5#ilQ8z-6TDpnYU%T`t#G*f3tGHe3St z$i+&Zb2!RS)o^n)BI+nj@qT)Yw`%Mn)L}@YN6th>`2dEqEyR%v9hN7&@?PmU;RIf8 zJ``l&mLqP0#3r7MjGs60G~=pwUwj2_?yIiuo?V5rGNs2HyWV{f<2V`W0+XB7>m5YE z3iLt_MiiF3`*Lg+rga!?vMQ*p!fDDt2`*9TK-)=Ix70`~9=CMi;#a8brw$TaX}-yp z8yf7iE_xQK8M!(=C|BnkY!wbi;dHeF>xIDtsyX3c@VgVY5+{H0Y_DG(|K!ug{^DU~ zHy=li7wog)B{a^-?t;F3lQs|nd#96}e7lw@w2TE?{`iA{=bx;(jAuKZQOG$C$_K{7 z<;Mt@zN=Eoc?3(3UPmXKLR|5#ikQGAyoC?OIfqQ&o#5p>Ox_B|%>=J~GS(+GflU^o zOIIqSb8NC6Z6xOgaa?l38PZGMRUJ>n(QEsB_om&08LxdtwYs#m9ohWFBl4lLyNafD z&sn^U!UpSz|yJfO`8io2Y|;d`w1F<@$P>ZIw-mO z?*pg~U3%?ny473w+~N2unN{PiPq}bg%&X3mcF&HFyOYBgtAk6_4MaJRXfTk;hsu6I zBvA4TB2};qbsJw@X$+N}Zmd(s7b{$5k3-mTg%=Fy9v3(b<=VX!r9qm5UDdlRNFrga@Yl(z48u$k0WAm>&Kl-z?ity8 z+=CAww|!ST#O%0V%O|ergp1jUNd|iIHO@*DP7sEVadcJE>|>$78}>aViRu26#~{FVpe0g2QC0v ztQ*CiL2xNlm9vo!Q0y4iD9@vwAA~BQ!1FP=f$NiyQ`zgNOSwVBoJ+a>;-y^fSq@%U zh+|dbh0Q`xA`|A;>Nly-;6VpqIr7fEL1t+s;VKsU!IGQ1oLB^v^m6&Q8VQb7IrnG- zCHH6%cka=Kx(X%tXsZB~-lGLvc8`{2D7iQrn|P0Q(iXIJr8}~IPEa?b4D}MnQtT;i zz9!3hwk(gEPv1VsZo=x;&P-5v;hrGud;Ww^&g0yE8<#s_aEO$uoI71`z-kb-QwLx} z4BIIX1ULU25LZwEiVL-wF}W9bxijR!WtX9hhaL7VHX8M_3%JSZb8fOS8viS^V*q&- zz}DYYeyufTm*O;TA+Sa2CO<x_97mY2EyaC%AvKU& z_f}F4a&u46s1PYKyA;!f8=8Y_?HHQT7Fi zY6nw#haza{T`VN17%MxmOR;59*ea`@b~8j3T;iRpRiEV+E4glJ^vSQ$cn2&6HJtD_ zr96eqj_%ohix>_sSo#A~+GYh>KQDC}G<_0xMlE}nRh;@Y1OENFs&RL9f~8k^v|J4o zKYn7;F>l_~claF@4_~^OE#VxWGupWs>&f%)hrq#Q3qDL6l>3YFa8>sEO_6NLn9e^N zf|-!~Y)EY-iExeH=iJw>NP+v>9vJ|tD_*V&+I@&=40XB6YhSLa8h6EZ>Hoq?0Ed%s zZp!7-Ox;}RGFOgOAy|cHEuO3JT#sk;Rt|o^!7n-ZErPLW9DD6z@)+j-*WR_q*HzT{ zGxy#!X`7_!Nt#ES*UdXkn@5|zLZIoB$7w^MEwwGQg;GnQyh`x`u4M*MR4O1MP%*{_ zU0k$TSfPm4*SaimTT~RmRa*q52tHVJcX8L>y_^A}yew z{inlq21i}&#DPemOZoRQopc5Nmv-vk{{wz z_ZyU9zx*9p*Q-2j6;P0xB2b@953b}xZ~+$3$iG4VXg%FQjgkMvNs|kUrj)p)W#yGs zGpcLq>XQwPP0cN>ZS6BVW_5OT&*_~vf5E~$V3B;j}_r$p=sh6NPvUbfT`TF3ARNuZfG8h)YgN;fPi! zuqsCm+Sx^P(#NEaO$EJ)`m*{~Hgx)!$P*$Fz;N(>X^o+SvT@>NVwy-K%aV<3Fiu?L zg)qt(Lx@Tu1P}rY(e!}0%0#j$Im@RjQ6;8}L~~hlH5&oC!kAS-x_rEJ`SNCnYLRGj z+p5?w{E3C=njx^b%3R6h&V*XLE;})^Y-Sr9l-fb5mibPjgS1TKgqj@zsMDHBN5k8L?kMF}J*@P@KC%W3YX8QC^nun{l6Fp@;wQMkM zp@_Zx7?_0;ax;Kqo`yw}ppxTbWeZNj)yWIRqH!QCJT+2bpExZODTcMP7&XX1X$9V) z4v8RY1g$(y#oMIO(y5VByU!H3q5-i)B<7UO>1KnAI)(XD5&(6?fMMZsfqQZRqoY_n zuyA<-Z#G@z7hK@dC5JT&Tp*tF-zp@Z z8iT6wQ?f%R#~1=f6v3ph&i4W2t=Ri7JZvVZVIz)GVkd`~#+n;S8XuwyqyVtqtEsI? zI%3ePX|3sDj-VzGYs$F*sV%OpW&`^nNIG2kAceA8BAm3OP;F4Mk~K(HS6o-YhDnxx z%4Ac|L$dmk`bsuTGTmWNZuEbiz}5~BO-#+s*F7HqbBgBFvJn^ML~g~~j|~u&(6$Vb zO);)XEhTRC7WdY$L8{b^Veb>tv;0=_4+urRfc9svd~hINR5L#tf$8%T;&`FgTie?q zL=!iwi>xfyP}W<#-p<}7(P3M?-sQdLSpEaGY#Yexcl#^Zh~rQP`tcA2-1Zs`ceY{s z07O+>B5+$RT-yb1&V{YjE^mqvmr@16PcxF#TEY>Rc>PuVjY#12&+T7?1YZBL{?(4S z)a&2Sza>D>v~3`0z#XV$g9*xFN(M=Ep=h3{r~Kgh(?~cUG(-VZT@HXV-7~A%FaV7q zfXgia2+uCc^xXhB%RQ@{4FjNCl$IGGc8exT8P%cyIpZn-c&=B+h5>Lx6kKHi_!jX@ zW>#MffK~3QIyNE!t{xMh<{AL3c2_sE!2r#=0S2gW#5D{e#2(R1m8rWO))ic@j@aX^ zZdvW?HWaOvfCt^dW;O^IBH)VL;4yI>`V9h)&IF3|I&ZLLa4uywIB#$uAX9aFk=eQK zx$SIdHpIkij5tH3*lSp!gQ9A*{ssW8ao5aXBTcnv4guZ3K-m-%ceI!=wQH)^v=g;! zI@Zh&P@B9FnXJuQ>#`9SEv!f77a%2_+)5mAqgBLw%eJj`ir_d6*~wc)MMm;A5F*5T zL@RSt_%PfUK^y@!?#rZuyRlXjHb~1pL0~a)v(Yg=XrQo^3y-w`+mr1)mgYRLqOVFW8$1P+SITet(dl{<7`->iFf5slqKJ<^8a4draaorwTJuf+dV zanX)Jek~ep3r8@2cBR+nH>tq z16nfJQ@3m4EC#;vV<50j?#IyJ61Zl|{R^lEmiy0?`!PI__rkeB?!O4m`{2A(?njp= z?}u}b-2ZOsoaKJ`QG7oR?*sJXYxq7B;OR^X^5h+^ykokt3{N`)1qM$)Zh49ZoXyh? z`2fM(>B>6+!3y`5h*4_FvTc{a=}`3Zu#*Om9qFjh3oC&q-CEr$r^K3Cq?YOH9O zp)p}PXQ~Gy9mNbs;;|?Jc$ z@LVGgY=QH$aPE}{&~uRZ9FXtDcYi=mx~ZXh@&Q*qkTe$aqKdQ6Ap1ck8$x5r){$(D zQ}YHr4>ZUJXsUr)Eh&*6d62RgcI9xLv6xR2j5ZB(syoc7gPi4rbbIvkwuA8Tu&mpX zh$l{Jd&Bi|xJgqx+$o1KGDqVZK3fjsxs13syipEgv`X9?evcfMx4;ed4Wp3_OFT*X zWt$@(qOv{g%7?3s6<}XRSssdHpHG`%-@`TXVf4Fx7IWq2D2qd`JOpWFi`j=cKL}b+ zm|dUaEMgJt5*VZDhKWG{@!-%5d5Ah3)YzeBz``tR9_H!ILZNxYD)E3 zoqP;hRek}W7`mY``B~1FhbYU(UHLfVkS#8ieiY5f@{mT>1GW%;BlpG3W|6{wetEFa-4GaIX) zo2i#4tL2lydRZhNr7VuP@<`HHTq@gGwL-IMZEm=fIE0VFjM-SfNKp_;=GJc*8fZZ^ zjrB-_Jko*`p9VeM^2ll2SdZWbrZwajVQ-d4@N7zr^~ja-$R0S+R*$?#9+B@4RDU1Q z>dB{YHU`ztR)BdKC3!58c|K)^c~8~Lr|_aLU&2n4k5d*;yYlIJV+FFvkg&%ivmgd) zKwaXelk(}H2=vRtl*Lh39z`kG;`-6rAR~*zoJFKI@bfY4=4ibG^ruw-e>TIv>dIFE&lbT$Xv0%0;ViNzDtN?3&)_WXX#Cd!twp}dlPmJodGghP zKub7>rdQ-IaTKWCSeh|`DHfaIDW+IZ0*|Ix_)RhAZEIE@jK0v`ac_9$A;rI{f4rYqlsf?~^{R0L3R zO(t2rzGfeR{LYoX1BcjR5Sp?Hj=uKsldBL>Q#L~W1CmzB-(d>gSD)v}rwI5hSH6Xc zW{ZF^_mAlnp&u+VdX1;J65@ej>puz<97Xqs`z*MAKN3d>#;|Wy%eU&`d>YO+`PNL` zyS%kPzO^(!(D`x{1gQj0ku@7jvx_l<)ra(>Mjmun6!X{8a*E2sNw4X~GRzNZi!ql} zAPDQ^w+W@7L=}`9%hE&>M}g@RR98e-xBh$~{|Nw-%GIP+V;M4nG9bkHqMXu;^h_WL zHLbYmr?U(26zQqLB2`#pthj?yji{^al^W5_(^}nP9#3m6CJ;NVg~8f|0H{@kSZg(|$!RxEPgAiqb%yRLF; zjTIO3XyQm$>S7Xg6jOdr@X!qhe6x57n0Lr$38vIlrKnN12nKA($6s(+Nbe%huqfKI z3_C&CrXjy?=7us?W8@F4-bMaqdWb538x1&Dk8EeC(pq4CAI@e~3Q@iUt{zp&<6TvX zA2i9qlVY?RMYLCRcJ27a)`{Lp=nej4?Oe~yU&^XOs(_}1$){lOA{mEy{j~L!8btG*qp}Mq&0~0Qy^&?g5DlFh? zOQVVTtU0aNU2cGA5+q}=3Xm=G$AnVns=6v;85FI5EsFfHg~=WQ0cNZG3BlC6svg42 zRy52{#)R1>e@ZY(S0w?%7QtjM%?3&car`NR<_X&Z#v}NFB~s`fh<d8%a~P(|;g5u|E$RcpJk zG-CoINSom)Mvy4MP8va~HdnRHFjl$*BG_siG0qXBYO7Y*!il9i)z+ih{1GHFyNriw zs@+xXXyt5a(uE$XS?L;Us0Nr_+`o1dsSeQ07Iv`c{?%Vy5{(fJjn#2dEa0wo3Dl3@ z)#h_o+fl7LK)F2OsaZ8@Rx6xe^wjJcH5<+?p6aYoo!#*Ku&26eR2MwAdaAodbz^#L zwx@b(RF6OL1Nh73i^SYsSM|;^R$MHgzH}is`6ae5eNiiNAr@w7HNadUUm}=!uA0|q zECZwa2Mq(VUa~NLw}1j_4GWmvI|*gJtLCFUv87QoQvw7z;uQM@0EYX+0JgwY3p$Nu zNYc9(EJLRT$B=fsu)(Hjped&by!0FbM><5=XXMGz^r3`k?3NJ5OU z`2Zl-Y$HngT-8@;ECR`)scqr5@qUKfihAs=ELu zeXCX923FI37puO@0+o3!tLc7M^+QdwWlF8pv}N5GY8s{9!)h8Y;W!-krcr_vtLde# zS_+lNR=Na6Os_CWGYN=M!OMBE(Uri&k8?>5U=Bj0AQ*3F{jhfauVVFC{6E$FN zlrK}OTJEal&|7R7n66OMlrP(jL0DSI7}NpgCi!!MIonldgBrFBOju0i&#n5)ej)+P zyX7wk<{Vd@lQfor(PLG=P`|J+$tY_6il0#k~T$JNM^p^-8P=hOS1iyyhRcbKDQ!YB@!L4d= zk1Ye}xS8AD`K~%2ZI7+ESj6=D`sIo;ge95e4PYvovYS?v1}O_Eyor{zHV`{<(P18;SO)TtJb4Auw`I)HAYyN z%Pk77#mQ(?gz{ebYoca@t2UrHuw`KKxp7(;`D=^g&v2re^`L@qZk4|wob9gK4szJa zgJ$@x0890*VG?cZ2V%L&({h8YL7{y?NP%trwb%|Ck}FQ4w*b-l<%4JeD~$Z3OnxS` z?HSvD)b<*+y#>w>!r7{}cjpkM4Z^~7v24m4IN{FE`u@a24O!S*2voC^i zyh)rGmTFX~S(;&~*(xwHiIP`D2ZM?7DkY_g4wi2rT;7WB zP*8MklYbyS4!LRwT9B;>J{pbAdfjJCh-JCCG&EBUVV4zgX=sreTA{f#bfy~0#RhO` z=mIsAOC0_K!Q0f(J9CutKM{PH8oDYv7+e~fmxX{~OMg>fnYPr2G$pH>rbH z=Lmiq!F$xfeL*@usG##aHR7s~T4RN3GgNnUVhSB}bX(95d|b9>OfhDtRoena>eL7+ zhZD$bwi=;o#nHT{Vh&Wh)PBQyCqTuT&z~m%vnJtyZkbT-*wELeLwd zZEBQ60bCoMuSN$n*G8A9Q7@W!aBXz88r>EhN;3_km#ER*(ZS%_=v8WTZ*(ZQHu^3# zDrIyqv29e|g71fde7jv?1=CZU#a3L*jR~SV8xHcPCLmgy`YtA9(vo?H$|scP zT=iU+u`oJ9zXBxc#G{cWB5JpK4x_m=(w%A&A-&+L7ix`_mlqGpcp~^CFZg3Z@JD{| zM?9X0C-4tD4~K!{iTp$&lO`X^Cd_5iI8aRnadqm2`XKFhsY0UtgsV<~cDC|j1r{dZ z;5EI$A0Vb6F_Dc-TKq)TtApJU^m}D9=}1^~yqHkyPj-rF0-PN+eV>w@$b$rc@h}+edPUQVaA?X;fu+O= zxPgif)?pW!2BZfRtX5)SO*rN}9i@m9m8&TZon8zau=4|uQ34Wrj#%wrBu1>GY1e7z zYA;y!*d2z)6bY6+QFk8u;82|P0S!!rWe@$vBL;shdx$m69-61kch)*yPjOETGPUKv z(FA0));XVG^$|KG!3S%!Q313@YpR3tD=^>4{0f}S4j-`-bnOlP`EVz(F1l+)l)#}l z=GkV;Onu6Z>%|Z7RS^TheGJcr z()L4yW}S)Kp;N=sXMaTfPVECr`{)70W!e{(iPvzs_JL)58qseNC9sT79Ah`~fn|JL z41&l9mi4(t`&>gC@Ngs!LsPIJ-}=&?hwuR?^nZi^OC#t<`5UzF4Z--L8SR8lV^D4C zW=V2DC%)+$DF+jsn;bq|L?O=zIMp<7-PCpMCJO>r z<=(nk>*kP;Xi*ia!dsVES46*%1dsTRs`SVN5(B4y(i-o zCx!?Udzn;;R5&&qU@gRhGpyxG3))Nln8JC~1o^be{L)H@x-}95! z6At5vLmJj|n3QhL^DGbAXb);mn2lYv@}Lbki2k0^6HNArm~Q!yjrdRqp<8~=27Hb* z1rR8ljygPS10D{g=)nO2!<^3tQqXMDAsYaPE+Ok@SB}_#kw6OCw*QC?cqEj^9NaKx z@_00(Tv=P;V_=A{JQmo!;kq5>j{UA$^9&p9(S~S z%rDN}CA_#7g;%f_C2yZC{#FI@!~6X~B#3Og?3kK9%648T%baZ7>`fSxX|1HG$59 zO-7H)Z|k@YIc(foj4FgEM>mUZI7WvE(?f#E(1Y}i>;We`STVugIojbTCI|XJjPH5y zoZg|A*1Jb-kB1!ujtp(R(@LEp=#I(X>X$3^cg()NfbQnh)OX<#R&N;$Cl2aMJgQrzO@St(TN|o_TN`JJMPAxcmNCRDL}k-AQosuxc^m@Hdu#A69>^tPLLTVp zObfWbFD5Nz#}P@hAJH-Sl->@b<(tB_e4nuUYr=`+*$*Q?!X%g8Vv`ZszV8H4FaxBw z=7gg#rDzU%TTezmWJB^05$=^NP+iX3?oErHj; z@sc=5uxSZ-wk2R{lb5ywy7(lw1nOQ$$S`}!tJfJ3bW`xx$kP%?sp&!0QT3i$Q=ry> zIDhm`fgx3%^l(dCtV?JAYS-Lrn?Si6FG@7}zIL)PDSM#P? zwP_}~v2AEmhuYLb?iRS`s7?Mv>}r6=k*$0KRBkI)+p5GAO{EZnf+q`F?PLLV*{~Xg zg-@~k4Rh!XNB*V&a~zZG1SZXX(&JsrIG4>Q@syNRi2AXZO&YJiY4dnf_vj(eQ!O3; z-X{J%9yb4Mi?DyNx%?qA7t%IpOlpeET6IP®JmfS{wNOqm=gR^68wP~`@%#KjCi6r zo|qC(lq4`-wt2vjhx_qMV#Uh4Uuh-NJ=M#r$sJY44r*8*0E2ANGzpH)M47 zHYNuPv2l!GXhAL?iin~@QA4*HFVcrRmk`SXNi?FsqrPzPQULu-1eJiU0>ds5Py0=< zsndYK(8x4CgD%25f@2uS2vP9J;;lDN{o$lOyibrxo&th#F=))e`kg3v;-(8PsOtUM z2hF=Wal1D{qSFx}zy|9;GrdHVZ9_^a{XjLw1XMiKKH^f5OAUqeGQ$k71bM~EqnJ*9 z+P`A#;L1f2T(_xOzO2{2)ZW?_uC}+@ezkt}-fR15`~R)A&p9)b3`qUo z=-Fqlwbx#I?X}ll`*HRjR$ci4auJam&)@$}^d-FcuS3EU2ct+1PyI@mp78y!=}X$m zA2zMqnk^&;^0_Vf^!8*=y1zd+nB0^}=7;)|+5Y6Ri`OQ%=Xx`3p^$&N#d`H}qLrG9 z-uxH6+d|P%3O5BbFHuq>(iQf;a}iG>-hnqu$8n^w-27+1X%y*J9v5|Zh$8ZT@oj-B z8!Z9f^;W#%t6QUB#e{c2CW%l3=g$lHd!<0i5pZ_v?h(N5=0<(kelxl`KFgs01WN!>eV9>+6vCF)nmk?u ziaLi@^{3E={^o*#&~Kql!~-?KmK~<|0pPWeF9%)wTd(%ze0ay*QMck*b0?T-IX{r8 z$BB%%$H)Z$%&aojCg_l%(HK}9po8_z5tI6jnSuNnU|vXo?s_9&rm7K1xZIwwyHJDZ-x4_p?}vW9H2Y-o zO4hKaEHm=8<+nM-G}hb+^=i#+`ENV8$w>nptC`m5xk)Im)yTtn3^eCM8bahpdvg_$ zrw$k;?(yRD^%{uJ9$^EBO6XhO>|&t`oHEw3m3=Hm3ibVdUQ*%WTR zinqFITeKQvxH5k!m)!_H%&bMvC8dBX^F53Q+j4w-mPt3G9B4Yq92e~ZP~%snww|vK za_NB@fAY(_7u;tK!_?eCZ>!gvn+8rO(x~5LOzOGfiYpX_%N&Mi?iARy6qAf*eUK#% z)ml`(VLwwrTV+(Jz#Kh=I{I_YztRwc>_5>JfRPh7ucWTUrx9ay^0MSL!rYV2xFUxM@gL;$C;u zlv+f+^7>mMg>Kmb!kT6m6j}2(joU9i%T1rg8=RH=_ptn|=sQ{VfLS7{-xczefI-9C zp0y-D%aYvfQj&Y3ZY8*qKZRCe!QD!5CI2|V4VMz!M7>!1miUkxO;b^B^esZ2qPDtQ z{knm^HkF%(ZS68Wg)V8p>v5aI>#@3kM?YW$`#-^)>CkbxY{w!%Gw^Kh$PfPn{2YCl zBPuh>wqc7c73tx^6g@{2GtjfHyWsqw4CuPh3f?1d6>dE@lZ#>Z3}3{8!sD&ZVv89zQgc8x0*~a@YyTD>nT!aUldjeO79VDy_6#%C z&Ws4EWU^-3IWaB&OQ%ZQCIMOi9{e|vR3Bz8mOBm`VKeM4%tZl(c?e)?^YLn?_f*Qr zbq57_v-?Cj9?Ihl!;4lTw;GJSS!=V?T&xJVvzRw;>O6X}U8H2-QgKj%p&nBHiakqi zAqva~#!(Y(u2d+i7{XQ3Q586-5#l&`**1~4zXIPxf@cOs^Ia9vT#1@Q;RsUEul?Mw zMK@l$0&mo|l5SjX&humBNum3-_>B|>W`Ao7kF*?-RbXA{UaDC8$QPkdS&Fqj-qd3BjwdTa}b$3kZ4n`ol`=<&z z&UHd!7hB&FL@L{-(12p8P$>I6^SCm*3jc{>b$6+P%A}s6q$WCUo4=yuhO4sL+(WyM zTV5D5PxOcu_@A>JLkxQoJQZW)XNpK8k%B2Q@)VbCvaZ5wCl(jx$x24~$CdYWB`;j9 zC9grWn3ie)TC>X2Ub|AoM9ezkQM6zLr=khu-3MP3_n?wWGbwxN$pIUKw4{KvEa53>Vq~x;wm0OEXUzd7Xg{Cw~>pcUXqE z+$v;kbxmr~YHPZaye8?^hk3xONnOND;h0-mT{SJ9B=~f6gFkvsOY@qE40$SmIq`%s z;(rxi$%nq;807KGuaNIqZk!Yp!~;h~zs@F3?AuVa3bMFbPjL;wRb#&1T5AM!89_}6Q)|GBC(1l&X1nzgmk%FSfsb2c z+bChX;hvi8ZqeL+mr?L=|B=oV^cJudGjxyPO08uh=8h!eO~9ji(`lyFkqnRY@8k3$ zv$=v@)Z8h(y7HI|SC1jdUn!qHj0$m^Rp6-)Lqye{9=Zc{N4rH`g(|5MPdHQSxE^r- zE$-Z99L2(@B?WK9J3HieAum>Xh0W|0DK0$t- zQ?Gzr{HN!x1ij3o;R<;k4LNuo4e>CQ^o(HD$y3S^$cQ&D@rMw@%+gxpCjmhZnE!JQ ztdn1Nti3INipRG6_$(J;%pr6`>;W)S>;bS5r>|D*sG1c6SwADr z#1e1IU+t6!dAK6HUg3H{uJ=1>Cs@C8ZJhOcTfW$H!&4*8f7NpvY-ODWLMZDLetAZk z_=QEssq*%WoGx!;WV*b~5iG2sq_+GIN@QpQAx zI~|~5S-8F|+R4_J1$OGo`xX91)%Urr@I-6<*2ak5;xW)a{TPf;23NS*kJ-SAylG;V zU9!VP1U+4C>j|d8dP?yN3Yx)hPfZF2&@$2@NY9Ns@lK(YT1K$EgPyRD!VyOebNOkkWtyS8BL4iE-c!dMw~&kR0` z@llN#ykWHw9Q~eFuP4=wSc~Vz>%cD%_Q2qGAqIo@$fj0McNwNPk-)mfC_n({BRs$H=}|$Vl=cs5|Zsn=@zV`C6#lCHskP><^@Rz}T1SW%i!bUhqg| zxC&>6&A2D3q>dY9xuQmDGf0k`m+S3Hv}_7{CP<*?o1D_0g|Al{EEl6z_SsIY$+v*i zok%27AAnQ`Q3Wlv1?84V88^+DEm0Fw(FLGYQ?95fP9g4v?!rbQ>XrHw(D#gHGwzF; zt!G5dxIgN*$f7JVyBmUWnkfqhWWg7^gpMS!sY*H8mzi zwAMHCH$%q!F&1WK-T{3%g*<3dR;VzTW(Fk4QPA#$FnyTn|qB`Ph^v9?@*N}yu}#FB|F z&=b7kJX>Kg=M?*P^ZbD@?TjW0+qho3QRu^4`Iw1mm=#N!NiQQGWR2=WI;;lMj3}0_ zt`z)W3rax*2HJ@v5Htw#8y055R&%L5{ zeeD%-BWl!~f%&i=HR5K}ypsvz-ncLBuZahvCMW~ZKr}d~De8>|UA58R6~gNv(?x?| z5R3++f!ZtDe;xHleK0Fayd7L{{x#T%a*X-kdO4a0TFsFPh{Z$Ekg|84+kX&szyKPx zKRdW`7-sz`xJIm3a_~j|ng?d1*nn>2{~O$La7zA>nXm#qAN0|{NE=5Ba6bN#GdLRc z6dp$Vq5r~XwuE%kS9laK?{}o&DqG?n?;so@=tky&-j{>N!RG;dCm7}k)G;y(c(zmc zUFP15F&NFQHDBq<&qtB6>(y%N!$OC#U`?&ercSLZTXcDMYTsBJ7Lf@k6Uy2sAz-w{0T-dT&A7&<^&iucDd9iA>vK)h7Or-9Bdi;8=6y!2eFlB%0 zZYwax7Q!edHS3d<90`%52Hz4Cg6p$a39#ISxLv$~c#DDm^cJ0G;b=du0QP1@B6QP( z(kR$_-G`!3+qs;Kz29MuSm{u)>c+fB`yoZgmeNcY>BAf;JOnPF;<2tduc!W5(ac8@ zG`E0Xo)OeQY>0g^+wJOZMhTN|TqGs&o*{-dUe{y4Sbd5!^3Oy4&8h>UH~kA|JlDv56z@Rl zb6{`E&PnSuBY%ty@?Ip!7r3BTFZuKqp_Yer*b>wN?_)=}e-u8(sL40p$1lk8ad}@^ zo7#_v>i1mOsFD%igbpwPY&FXLiFE_xmA}FlA|vH9_XVI^+jIq>fw8%i`x0KY?X~F2BBc4C4pR_8 zYnxlX)ADV-u7pFX1(N6q#o9_p2r;j*r(pcJ5kg`b5=~%Q%na++FV|RZu7cijjY2MW zTPS|Bm%xmSTD&cj#aATo31DKOWu+wozX}d+f}laKA8|5ITX-jbM8@)~RX47OELsFC zF_XG*69plF_UMUA_Djj`+U8p2r?{ceAACHQmcLRh+uPvWhD94)!C82&&yfl?iV+9t zJjNDnlyQ!Ye&4b=%SO*Hqn{==!Z^o9pSI{N8|^BiS2oHx$3~xF`X9qaF8~%cdLh3& zBP;m@8(k%D&&WmcHbySycga}er(dGJ(?t%Z8E30OB(_v7+=th~_i^wL0+=foW}EA? zkU(MdVJ;Q}0t->xPf>;|lGG|eh8a+XyI5C1iQzW3pK8jI&th~M8+Z)1ER`^&4lv^{ zw|o&6B{*SWo3RvRB_xDc_7%t5F=w1$$BaA~J04$ZS#j^mj!#tbcsu4s6u&+Nt-*h` z`la!u5$q2%az@}QP+)VjOT0oOe`PKk6J9|3jjm>v#CCKEVz8q%{PK*fc4QLFfY4I#(M(g>j&23bLUtw#F{H5_NnyiWi0o4b_3^)Uv0A;Pu1Dr@>JUE#LIF`s6;3Ppf*v%`f>r{?}5W_Q!Z(q(fp?w*7GVMFQ z%(BAXRr{W(sjrpT#=~U$4W_AV8=G6Y7v2Oq_zht{%-l@=KMo;boqc8WYEI2KXHNY$rnl=l zN7c1u z235VVcX5Kfh$!oBNb;VLF2Qs=ZMtu;{b6q-gl;QynE-5%{|dECcb!dlz@m#zpqtEe zyKK6B$K}_+bi0KPy0qH%dV!s~GHBHmG>5YRms0XYa6V-u`W*jy}aC^c9pk0#RUfH}cCf z0#7MEcU0bN1;YZ?JkI7B>TU_-)|v;=wk>%$9X6*_M8Nm>H^*^7Ys{6}}eIheD+U3>Dxf zgx?3QwI0JsDd7*w2A3Q>Aa3A@~b_;^wMEUv#L(h`*24KMG( zs-0NbOJ@b3?~8Eo-25R$&E;=H0`zn{zdR%V#4n7=?~}J@FxI@Cnf7SrYX^z ziG(1YFbfi0$ogG4%<=0M!h!Jk%ths%W*tarwW^e12GpRuU01*lL4&V0yfJO4wV%i} z$;!Zh$^e5CfJgBFhG-Gn6sge`KSMhSMu_Y|n=>rrTL@6BN@W33t&kL(T_Ty4kPt@J zeDA}k!>On@?{#su$t8PTo`rC3XnDq;sBv0bCSjLeZ<$^}u!+KyNl{_2A1vDhQ+r^O zDLt(Az@B+$al)_{-mf=!C(POl;|7;8KY|+ZpK3PeJ6kixvuB`f^ss;9mwN;Ye4fnn zxHBL0GsHF+nfeg|9H>a@!%XVR{TN|DALcYO^%I1tpK=t(F@A{Bn=H zpz!6q8Ck-cNgdvtR+;ybwHGYW_;ecn*i3iMZJX8BKC6B9BF1>A58;z%5}g81#s^jR zOhtU{U_RTw1%n*X!&ee5^8!=*PqE29iskegrUdC^F8$n;(n<)P;xhyYO(|Ux)`P zBiJqe?3x)=KurvKj*cLFL*fZd(+pauF@BH6`27-o4WXY*{U}nK^ghIABJQVA!Q7*B z>Jj}>-A_M4XwWgx7&OVn92UAb-XZZ-60VbQ*tOYZ(5*=I(}OO~^?kvQxTRc#e)_uS zQN2K)gA+4op23uF8(hj&=A-(}bTRyhK_4)g|3l_|ra`|pIai&RY33m`=q4|x-sfff zWZ$EDnCAKzbBB*hx!S+PZ_wTT0>Z=oM-l!?!oNs3E5Nx50p|7|2_Hciw)FO9K-0of zx}WkvF6*u!bNB&5H~khjTwWu5Zbo>SwAToURy$zwC{-yRPYNXoko;t>SY_hxBPoI$R{q@}X zZ`HGG7dCKxzthOp!usUD9y}gpT}h&SsK0{t13GBk_d!DfdIFFS)@jgKGA5exAfBN2 zKuIF~% zP#wNrV+R7z2LUyJBj(b8J_D!;qZDQiO+-Hc|`^cJe_`64i%b(HW9$G|?3G^2W`kX*+ z7niVz{#Ei-q5Dpzv*?QgwE}9S#q;d3UqoKMdPbT*(i_?2gc%LRb^ zbOHTX(k=xwA7_7GkhES&yM%rr5O4jQNte?xp}bWnH{d=Z%W@Z>bLeV%MbaLUv`y$O zoc08uC9tU1CG9Cm+e-f<(9Z!)qb&VZpx*;J4JV%866kF}&9sgFCQud3t&P34#rtLrd>2ypx*%srPBK3$KCsw{N?4*wz= z##K~?l7QCG4K!V2Eu9UhiALyjNxK}-WO@(!3{&m^bQ!FAwm>&XzCAQo^6drWr}xqV zfj%YBZRk&&@B4tRq&sP;K)(QV4ZWY1uKAmJ_v_eyxT!{@5dJ%R~9=fA9GU9k-q^!sXV&9|%Xg#P0=i_P5J)g1aH zTnhS;nrYx;w*|NR!J35_S)XX^M7VxxX-jeHlQp*jzj5jZ5f2j|1w%7^b+K153SEpr`0n^CgVdFF4R^ z82u+rW6Gx}=X*=9qUjcNz^A*as8vDU&-%Q87Fy6DUl>q_1>I`irB%@t7WAU;20+~w z^hbgE6a-h3K)ziLG}#rQJr>mLpXQ3uJ`2j=Zb*#o5y%Bi?9dXlU!WQ~C2*cAK@SUb z3oQ-Yuhr0(thBX(jH`wYS!vx!tEHzcXj|ZMKrae(v-ios7@#)R_{bGEG0#hUU4a(D?$f)E{@(Q@233&=-TB zbT`sg3pyOUOKYS7hw>4mjaq5H58j|nrP~BzD>&OTmF}_9m`jpAWkJj(Nndg(&+{bd zyH*-=X`&aLG`G=2vrcC@Z>Ck@EY|TW1$xT6BYZoq+V?4lt`C0`&|_BGqryB2g^RnS~Wf3l#bt9s2v zw2l`qu)%QTUrfwbET}H>DYJvOd?amJe96d!}k6i3sOOctJc!_4m8=dj<#A5_o~b2HVfijbs2q1LEb?4 zlkO|%hy`)Ky@KRY58C!;(fPhBX!;qdgdd>iTtTZXXmxNN^4()W?~l}b*VFV_it_(O zkC+>%!-BY1ZJ-ST-R!N34f;0FE`bjFCdVE}+CG&=1F>%!8>n?Qb77l5?CYgbfu8aj z@f);j={5yXZTuzQwY1NITH~+#257$p{n+&SchDgVS{nEI^K{gLR>$$P2J|}xdEvqQ z1^R;pJ!Rgn73fV1>WMSt<|Q<=I}m>j>&}RRMDx37k_EBOc2UxT*w^i%Rx2O3$}U>y zK$Bg&X_*Cas|?dR3*uH8rfvm^=0~VkAlAfE{|Ftl(tZ=)?%zX?S^3Z)EGJV1+itBT@up!!q6Pt!pQ`cCyPf}f)& zEGSu19r^-IU!W*w)?6C;I<2&z>{weLTpywwYF@Hw)TF~UW9oo-mzXi>!TT=BiI%q*(sM}ff0=;QL zp2>@={++zo0V6uBoj>_zKoJG`zBze+)h{SzLG@GiSG`Cb7G=+rPgebsRtm(e`PHgl zQJ+97^vCLdS#^y5U_sxk-=X~ny=g(;t-l{oJ$Bl#+R~q|f2Ha_Xu1WxQvXLla|Pnj zSBv}yEwj>IH3N~CXhTWb%hczj#UsBVKFErFGUS^T`7P~t(pE=ap`!xDX;Q<+$g6~< zH~!+@8yoJA{2%fvh`!hG1wc1g(CZC9j{K4KSWtCiee^ZD!-84`+9yzS(&EO9@ftlW zkecbdMo$Q|LVwk~2Kk;Wq5Kp5)Sqy-wPy*niW*PTGyJ|DmUyv=7DJq!*pE*JFR7w*=z$n;QQswVuPJ zbNgKv|2w^9LEL_%-E*!=UhoX@gGMwAgHIpOdyKHb*>6*N!-8ABxS@e(I#X9-F7V;iT=*=4)>`X`heJ*MciqY9-kMZMr~Qhje0rwpbul zhecYillDyXOl{Cf`&INTZI6@oc670}&qyPmuS-kVp+B(mTC)~v>nJUm#VZhHW|gDQjJ+MFdisU!_fV(!LY9NSo`VeIs$PHt3}7(AH`wTK1r zd}+NlNgx+W*a0Xh5ZB?F=z1+Bkdoy}t)qnUO6`1yGF*M7wyuQoDy^@C@+xi6p?o%R zl{Q*Jxk0-}Ag*XE>QLE`%x-$BL$KT!o*P_+7&7!Fta1 zDTEq*O+v=Qk2P>u8h=PyJO(^}S1Qu90i)Adf?p!Jo|90~uv8kpcW`)PBZs$1c&CJS zOL&ij_euDGgrAo1Q3+MK%2zxAj2rv^+-jvVzdN4XBFZzk@dbf-GH3px#BwTaG?&P5 zGV~`SE%VW+l=F#e_m9#m&i|-RR4y({C-#}Pg#Rd?QfZYn{!VoGM}#_YTv@4GELNj8 zBvsj4Xc0g-Z`C3KQ=$1HEFM!pF!&D=Hm$8GQWV(<^3A?@Gdat zeM*~wyua3>!ubfj5KI5RGn?kkS`0J z`s-CUnO(X_Lj3h)2Jsh;8N^>UW)SbP*Mt9%eu@5x$opK=q3uWXsQz^1a&N2l^GKg} zuJ&@|A%uU7JmKxsKWu)-JA?ilxnEnXp^1I#^{Qyxm)7rz&h+{4ed}?w$ji~Qe9I*D z4Z0+@2;8oT-Qb%c-(VK$TVuETR*JMMMcUb-jddEg+9HW}S|P7HHVD2~!rS%M>TIA_ zIQL2TG#07kTPN`&5+9WKM^N7n2Kyw}poI8l1x@Zj_-g152|J;;+kFT0w`$gh59mg1 zR>Iw39|dY}5WBh~{Auvnp?yz(1pA$T(GJ&sH~bgvh1!2Z7^rLgA&f5 zy>+Xq7SVlmYpV|EkJVjO^{{B~VbR_`?SqrwSM`MU#mUclp3uTmp7nIm*QYG0x`ci* zWrx;9zrfyQ7ri-UC&Ezu;;QvD1z{JRQGYYyOY4uA>uF{EbKx%9P`@9TZS{8{*9hXT zi<}A3+mlk_lTu>6V5UphD&fM3WvoK2DL8+7wJLmaBv_R)Rs05AzamXJ;KWyZ$g-E+=Fmi$De;vOUnlW(65k;4H^dHmC4NNva^vi{&-IhW`?a^U7aJGpS>o?V zQT-=Vmd5*pW>CT#B-|t69TM)7@LmbsI)8&-CUp<$Y;OkzpHSMim6uuFl`u7wc^8Pf9J8>1>&cb?)QKq^u`}ex=Z_ z6nZay^(O81;$Ro$hWcBrN5Y#W+(REl>H|0{!{LS6neGRGztnwD@GsF- z+P}JA68tOl6HvZ_Q&AkgL}$V~sgUuS#(0-@m8N-I8uRgKjQ0uNCzMTA$oM9~&k&j! zR-CzY3QecrI|bi`9fl!ymteXClNOq^VA6u=(YRh&P~PIs3O+0NF`*n2%$Q(q7RuW} z`6u`7g1=qx4+#F#Qr4#h|7pR0OYq+l&fgRK_XPiv_JC`P{*t7=BHUh))K?_crQhs^ zHguM1DZ)3aMs=?BsLop2um7H|a2*oNA;EkLH1CTX1-{SqlElfy^yFgtq{NdF?~r(h z#JeRvD&c+!4@r1b!k1iJF1eXc(h8Ydhr~PF9PgHRx5P&!J}U8>-JEy7VD<~4NVNe23tB1m9$^B{Uh# zp~+wlor38UOs8PFjGJ+aG%fhF;M0O16U>-k#sqUfFb4#4Krn{|b67Bk1*4f_$tIVm znOtI%U^=ak@tuMn6U>-UjtS;~U=9f8fM5;_=CEK63+9+$jtS(^T%ya% zI!OyYE%>zH#{@Gbm@&cJER+WXe?agD1pk2G4-5XV;13J_m|%_x=9pkKpOo&C(tT22 z!88e`NiYWlb3iZ$1anw0hXr$3FvkRQOfbg;Gv;T`V}9m5=4Z|a1am+z2Ly9iFoy+m zSTIci&eas)TulMa)hU=x!E_3yTjFWKr>!_s9uv$l!5kAxEhx1MO6`JDJHa#wrb#dd z1am+z2Ly9iFoy+mSTM%~b4)PD1mg~UlqC#_v>}l;#QdiVzEkj>g6|Z3S}qXp*$$zA;BLK{1L&tEFsnWz`Zl#u94CuJSgGO8ZPl@4VO5*mQy=w8PieA zm}P?Lm2gz>qk`Wfn1d1?68s^-(+;yBQ zDVU^SrVFM+Fdc$fCYVvdj0)zE#1BcFCJVR8%zr^=T{E);CN&Kk9k1Co5rr+NnWl8*y#E(k+sKoa-3QeQXNc@n*k4pTg#5<-k zO~+KG8I|~`#1BdQki;n|vL%_OL*gA0-!Jj~5OqY_UxF@3U$>ANM~E%E&l-!Ji_ z5O^lzr=s2J)uA6`kSlH zJ)3jH~rr8z0Y|&eHZyY?)$s1;D61(FYxog1HnHAweY_1+uciD8tlr&N$9u4sXyRnH7i)7LZZG)p>x2QU&V!hR zhH&d4jFacJIKPjR2RjI%wFrYDrfkzVtd@97h;z-AP?b0pkv-2M>q}lM|3&``qr^a zQit$#nu0KeyCXX8158CY6Q}QW9G*J`;Ve+;G#gYpT4)BscHBPE@q4Z_5v~N4PM08E z$NBwsgllm>M905~wE*GOxbvY?51oau7q>ceToOAM;TGJ~&}l0zMVO`K2>WqA13#0G zn;1H79bAZTh*lxI4xjvV+$XpM;coEO@q1gBBD@KAFLWA3IoM;Ss}Q~yrRj7FZA5r0 ze%({2+fcHOfA1y(eLMl1i_n?aL5bjQQ2^lzErf6}&OSuw9IU(}G)Idg?9i$a&c_*r z2yPYBAzY$OK{yL13?j5lo2ucy74*}Bx-CKdv$PYpYVN1Q^j+K{d7genzoGwwZL7F; zx^|}4rM2kS>mSs2yFTH1)b(A@bDsAb|BQbgKb^z|C1yM+$%#U#AH$!f(flz+X3 z>FxlY>FxlY>F&Vkd8WIAjtJdei{D=G1DfKRj&CCPrA2M2z%w+(XNIQu%+M5{8JglV zLsNWOkdMo2(G;I8nySwhP1SRYrs|os@L3C=1)k-~YO0=Djd!n!wpskPfgj7i4RSEu zHps#9Z-X2r?bXhudtK+z5AgiRbs^pt;(amR7vpW>T_DpOqSMS_JU8Jf$nzN9KQ>LF z`8D3Z0sOXkCoS}TkgoCGP5Znb0i8(!-^Z!R_Zi@BqCLLP;`umz(EoAz5T3o-w`e%< zaT*J3*4`J0X?wM;+J}SJ;`t@54Sx&xZ-M{Y)LT{1E{GSjouXHWj(>r0XSO$!UzRCk zxAbT7ZM}Vcv|{bnbbeqh5b438d}djCFx@tu&?35cU@*HqdwqH^o9nMkw|G^qcc?FO z4z1l?7|d*^i#J`H=^3Q$g`Ql#FT2U&)3$E+KxS2XOSXsBWU`yHnclAc!eF|;CqrGF zw000h6b7?B1zMUzN`9zkFqiMzKG0|JZCjJs+y};xql}_|bB>q+at)@ls3CPN-!X(5 zZR*Q(&$cr!&GlKC3)F>sz~DZVPxm>Lv@X4+Ko_OAX9@#p$iy6rV8^n|rlBp2Tb$2W&4X>KP1}~{@)-o%2eN&c{Mt-@XSOGUDqFIvOeLh$wJcj0$Q4*y)Mc^l zE$U%0+9f|YG_Vx^R^{}8akg|0O}7QH&1?GR!Y-Q0P1iA}edYo>FM}3I4`zDTW_Ao^ z(ArDV1#XsAneCfYO>OEqGv`;Xjb%V9hWdND=g_77*+DzY?3r_EW%~Nv;Aa&%f95<| z(Z@}>BA4Hu9vsAdZ<@}PSEi@P<}IY9LxsWI_Rc}v2;Vd`C_TX9F}r=v%-OVVXaMH3 zkd|cod%;8TWPp`#Hxvw?Eje!+*?G7xp6;_c3ySFD&c&^1v6~Hb43=1Tp=0*E`KW_x z5AJEXe$=HBQM;uvu1cXI#hi-RirgrlDL}Z6+4EV0B|v*AFsBrlT>@}H%5G7C1+xh% z=E&$n$sjC~$i&NtJ$v@chH zEfr`B45-|6IoqNliv{yhD5%8dZN3X?fA=AtH*#F#sG7V>5-Msw#W-ZtZT%(&R=3m0#;+IV-zTvYplT(-a1 z=w1DTxe{7XETW}p=+SQRxeMAA;_~d^*3SHvj=2kGO&IE|eg$Tk{AM_H9=|E3N3_MT&mZ9_(3<($@2eUh+U&7mE zdw5jo%kl`oKR8jqkOzHjWT#5%Cn$IT>q!sVeq$Z~`?o5^cJL^&s1C`#G~K@@lkR0< z@W1MRP$-Wk>{Cf8T1Z!B`nL>jrOttYOn&4@ReE3mKCY;fwYi~u z4-cpX87P(WTbl0cE3C^&+0tVysm5cKNav^fdoiM{8S2OM0nNr@S~#bif+cq3!Tajuf=HU+&HSPJn(0jt!P+ju$bbMC9d4* zTGG8YmMM$tP(saMS3&hisb9ISIJsP35NJZpv;A9PrGu2VM?c%h$5V2Lv2Cg8FKoxy7QiE|Nqa^g%4och^Wmu1si`q3MCGAJ{zEt&j9 zx&BKFnLN)!iu88kl6>wunZlePiIs+4QYg-Cx(ZV9i!#?0acVA0SxjW%%MgmMgU*X2 zpqG4{Ds5o#VdZoE;Sc%;H>>{EJrCA2m`|_E4Xnf%*mp5TwKN<~K~X6pr%#sUoJ$)w zO8t0()|cMRwx!%pFMA|$Gz_x`v|JKqj<&;*IWYSmJBfPWwnSVjukEB9f^qoDd?goK zZJDE6zNT368cg)E`OGEk0x>h_?d-t>v@o$@tZEe#x1k;-ubjF3@fu zk=bcBW^JdGHyx)q&37JLo;`F~D@Y!@(40W?%u_1GKHM7gM8Cx}8k9M9g_Tut35nH= zrOI`=&U_xdvuk-jhLOCr>MWN5ZJlFRX*I9qHCgC&Q0>L}i(r^i)$=jHUyP;t<}}6= zVmhl7PADH-6r=`Xk-(x{k?q5XME0o0tc&9r#8RV+j5{(tXFh7m&M~yUnky0Z2C$M` z$}@{nykwL~JEPS^o@4f8P8PiR3>H59(pQjFGIM82%WjmfvxF9)+!?Ohn!!$LX>Kh2 zHsy9%p2wQ*tVlzvTcF70+Xn`B%f5hs@Yk|lptU&|UeW7Xs)cr#x6}J%d=}BW3ZhIa zzGOGLq7`3_87h=xL-wT4f|p*rN=*?32Jhu+_!lL>O_zW+1t+b@=eCzml^APbxLy@~ z5hs-RBg=zdoQFZD``|Y)v)n$&6||IP8-wxzmiw|c0k}L_8@G+yhH2wcDo^?xm$Gzg zrf1tatiGWpX*;ew5boX9PkFY z>NgB@G4VKu873B1&PIsF7wQzRn$n&Cm$c=Y^mSGzQ+gP%X(UHZ=GEywm6k1B zJT%zR-afx#!(nZVu@w}m`O5f+sN+gft5qom$#!$&`$+{)jzKQhCwoWe4H+!ac$`xV z>{V};XYj)9vK(d+D$(JZEt!NXW9PxvilKN|<9QQ}(Q(T~mu#)EclTqs$As4@K=ELv zY}ghRuO^BsadLF4`hu;Y)wzOdW+%O@MXWBWnm{qOjC-6c78W13WFNq3dkZcZWJ!4= z-p46f*gL)R#H)Lo44XY=i+ubWOg;G4hSgiyQlB zWjotCcU@^tECgglC(aQH-I+m(YPme;!)%rNi0WV5acFHO-G_;+J$0j1yW6bQ4X+9@ z&+U~}o?SN2F|bo9gQIfgc?G}^^E^*k70Y7xe5i7Bc8lt9YQ=2NbKn8&UGIzg`*yF) zrF(hI;L516Q|6nTxq_8f*a>c%xW_Awo-IgrzQvT@Juk?mMqY;@R{1BjM_oy>HJL)L zZ>Q)>HBLfP50 zIu#~b?Q>{VdK-*SmQog8^~#ggSeXEot#}hYMZa5i@1hOIOQaOyxDGV~k%1Ne{AHJP z5pRocq3yV_b z?^e5(|AAw%7O3z7YNeL8SF9Cn%C=Ip_wiX&GzRXRc0ZSC!Gx{~iU}Syr-!hDy)2#QmFG|&?}lInn7JIQ4E5b*T^{>{_Vk3;1B6{s z-agIcvs+|d&C_ga$JFlNOLOqnC3_oNRA1&r2iH^_dL>*}K?KkC2o)4u0+vkEkl@S* zHp}-cYdp(=vv>`=B&_W$M4r; zYh3omxm|e&rd_JTvAIr6ZL%^>=5Ru{KvH2WgM<%}A`<%VOUQ@p-hde2;jewcuA8g+u$rKa{oBD3$9?!O(2p}f zefaN89NQYk(Un$85>*Z349E!1bPUsMyvfB6D9-A_8KRw(Lz`tlm!$&2e!zox7rAh%6>9-u*-N8)fRxb)(j(s;@=(y~bF z$61m-%%8WQR9f^-oJ)D0k6iuW&E-?54fD7j@MM`Oz>pO`>z#P6LH^Cch4XN2*Wv8c zfN(t(r)p-Q&I@r0hD?U=o_&#}=_G2!wPU?!$~2e;rVnY?2|qgbQlzq;Plv>+l}-n= zS)@&(?o7K0_2~n)A8*!Y0Wzdfj|^!uEYL?B9x(8nRUi(UDPaF1M8v(WpBo#=-3hlQIkBRO(LfB#qu$%+J7}tbCQ>>2%A@y z4bXM}czLV|mX`IxZImx5l`Z$A%H8&lm#f;>u6bVC_@v5Ok6+;vIg7oEd9mJDUrNJC zVEP5aA!h9exvv%V*@HT>B`N%=prNx*+_JXzmrE|z7xzoYqTAmocNfZ7hFsj%ELAVj zf)$W+2oTHGk2u?Xv2PbGmeWti`LqJUHqx#x&9`0bp8LG=7+m+A;F5=&In=Tjxfr+k zWVxdkp14n}6&WuR4Gtkri{2@RvfEDBI`_H){^J&d&fl>tm9wO*v)-w!6L_6VPbRP3 z`|Oro3jMML<sZ=N>ecY`L>8G8xiALVWou8VQ0}ME*$Tr*tV4>l^Xb% zb`eBoMHL5;0=lGX;x2Szd+5ie0p<@ZxH5Rv&}X9Xe(>QThXpAwqqj``XG}<4ik$r@ znN4sAT}chZXW#&7B|J;R1K}BETx~2*V(bC&Y)og8;K$Pi?wo+DS7Bgj!%=E>PquN; zj1@Tg%q|uixkz0rE{B!gDfxK1vI$%;^i?T0ZR?V7*%uCPbWACVL-v6@@+jXto`I?o zr*ZM@!Diy&YBKwzm6zMG)UPug&kWRPpsdDjK-{Lqf11h7n1j{Y^92f&c$Ws2N_kIK zNa+}XTLJU9FR3xnZsy`#gDp?Z_Sih^UW!=*{@(l-y?gGr2M>I5x$9<*llP0)Z@8>( z?$O(g>R3pNCA^QFyYZ&z&-`Zso~^~^`Koc3HgKdRXYUB>lsxY z>+*)9t74bbH`F&oFO99Qj$N%agzJMUF|CD>ImSRVQ;M1-s8tga8W|O9JzlaB(`O3R zJY9iV_1dmpbtRGe8=$97xjxGV0i7l9d9&sA%v zkFBo{Gc)AWnINu-KA4e_bZK6%H=>oDBFC9>quyo2s$EF}iLQaAJ4pi9gIL!aaU$I1 z*XltK#{GqGIP6JML#z(4&Xf(vRS%^C_8LhoHhO2+n{@H3z8?S92-dJ6% zA&fW(wdm+ayc#Y>@SiJ1UQddmqaTy-0N}7Y1u<%&s4KEb4?-T|QB=;$M&`roEBS-27n3a zN~edRQ}qWO>R!@giP-43!^kBH4{Ep&VE-9}juor6a4KIEOuy$5dqa&}tdEZM;ZnrqwN8=Ay+a=j;hncTNbKZd)^Pa#6eYsxb;a;7TSW^1bU!<~c zqgO>UW(w_@*6OFKUWA?kw^zZ(8PfZ7^d1>y3Oo|unacXTY&5Ua+(6hd!n z;O;h7jb6vS#%H46GgTBxz}HD{bdu+>itBhpWQTxQoPt)571BD>Z4p?n*gQLuG~kWP zN|&PMMOUHE>mtP>_O>4EKy<*&>V&i|y2>sY&V%)UQPQ7eS;El_?Xz>)0hWRR^uGHt?dtsk`5<5lF zWO9{&f@PpFILbpZbO&2z>qK9KA0L|?9h-;2FPec1^-9HKt+7_&7CzO4clWwuNyk1KzhI$_}JMrUIa4UZapYr^NUSTT(kTS2 zCb29wYp$!BQTrhq&rN;YD1vGx%oxW>APJ5zwm;TkG4Q&h2jmT1Z!&|@4BW~#b$NqK zY$7W|iS$;3G6Oa}^|qmP#Pdws_M~+t@;qMIC5>p4h~;`PfeMEM{^CsAZR)x{XJT1W zpi`=2_Kx&1^2C~8I`AM?Bh;T}dQeBHrc<*Dc6u%fg9ohCsY+BdUYlujtR^l?pT(AQ zVg|}i>QdL1O0!uo}KRfVT%}utTj1@kt)` zr;U1}tI=Hp#WF|svJP2X3$d{|nNE#xb{>o*gmw{kNr;<~Dy31wl5eb@7c5#lqL^~r zPUU&%*d;9U*d;M0g`f@$6H;)DT%3;o9h6CKUd4nbn_*Pf#|DRml(#{M5O}>|T;pa4 z1LW8xL3I1E^?6t!1ta|KrxS6rr(f-8}-~oAV*NW-1Q~W$$81I8A>8gvfkl6`BW=q&- znP=9PI+jI-?GrL=FUhc-Gi-Mvk_1nSK2UKf@SB60&` zk8_dWBb|lpp z%~`1dzgFRw7{uv~f&*Y5#ilQ8z-6TDpnYU%T`t#G*f3tGHe3St z$i+&Zb2!RS)o^n)BI+nj@qT)Yw`%Mn)L}@YN6th>`2dEqEyR%v9hN7&@?PmU;RIf8 zJ``l&mLqP0#3r7MjGs60G~=pwUwj2_?yIiuo?V5rGNs2HyWV{f<2V`W0+XB7>m5YE z3iLt_MiiF3`*Lg+rga!?vMQ*p!fDDt2`*9TK-)=Ix70`~9=CMi;#a8brw$TaX}-yp z8yf7iE_xQK8M!(=C|BnkY!wbi;dHeF>xIDtsyX3c@VgVY5+{H0Y_DG(|K!ug{^DU~ zHy=li7wog)B{a^-?t;F3lQs|nd#96}e7lw@w2TE?{`iA{=bx;(jAuKZQOG$C$_K{7 z<;Mt@zN=Eoc?3(3UPmXKLR|5#ikQGAyoC?OIfqQ&o#5p>Ox_B|%>=J~GS(+GflU^o zOIIqSb8NC6Z6xOgaa?l38PZGMRUJ>n(QEsB_om&08LxdtwYs#m9ohWFBl4lLyNafD z&sn^U!UpSz|yJfO`8io2Y|;d`w1F<@$P>ZIw-mO z?*pg~U3%?ny473w+~N2unN{PiPq}bg%&X3mcF&HFyOYBgtAk6_4MaJRXfTk;hsu6I zBvA4TB2};qbsJw@X$+N}Zmd(s7b{$5k3-mTg%=Fy9v3(b<=VX!r9qm5UDdlRNFrga@Yl(z48u$k0WAm>&Kl-z?ity8 z+=CAww|!ST#O%0V%O|ergp1jUNd|iIHO@*DP7sEVadcJE>|>$78}>aViRu26#~{FVpe0g2QC0v ztQ*CiL2xNlm9vo!Q0y4iD9@vwAA~BQ!1FP=f$NiyQ`zgNOSwVBoJ+a>;-y^fSq@%U zh+|dbh0Q`xA`|A;>Nly-;6VpqIr7fEL1t+s;VKsU!IGQ1oLB^v^m6&Q8VQb7IrnG- zCHH6%cka=Kx(X%tXsZB~-lGLvc8`{2D7iQrn|P0Q(iXIJr8}~IPEa?b4D}MnQtT;i zz9!3hwk(gEPv1VsZo=x;&P-5v;hrGud;Ww^&g0yE8<#s_aEO$uoI71`z-kb-QwLx} z4BIIX1ULU25LZwEiVL-wF}W9bxijR!WtX9hhaL7VHX8M_3%JSZb8fOS8viS^V*q&- zz}DYYeyufTm*O;TA+Sa2CO<x_97mY2EyaC%AvKU& z_f}F4a&u46s1PYKyA;!f8=8Y_?HHQT7Fi zY6nw#haza{T`VN17%MxmOR;59*ea`@b~8j3T;iRpRiEV+E4glJ^vSQ$cn2&6HJtD_ zr96eqj_%ohix>_sSo#A~+GYh>KQDC}G<_0xMlE}nRh;@Y1OENFs&RL9f~8k^v|J4o zKYn7;F>l_~claF@4_~^OE#VxWGupWs>&f%)hrq#Q3qDL6l>3YFa8>sEO_6NLn9e^N zf|-!~Y)EY-iExeH=iJw>NP+v>9vJ|tD_*V&+I@&=40XB6YhSLa8h6EZ>Hoq?0Ed%s zZp!7-Ox;}RGFOgOAy|cHEuO3JT#sk;Rt|o^!7n-ZErPLW9DD6z@)+j-*WR_q*HzT{ zGxy#!X`7_!Nt#ES*UdXkn@5|zLZIoB$7w^MEwwGQg;GnQyh`x`u4M*MR4O1MP%*{_ zU0k$TSfPm4*SaimTT~RmRa*q52tHVJcX8L>y_^A}yew z{inlq21i}&#DPemOZoRQopc5Nmv-vk{{wz z_ZyU9zx*9p*Q-2j6;P0xB2b@953b}xZ~+$3$iG4VXg%FQjgkMvNs|kUrj)p)W#yGs zGpcLq>XQwPP0cN>ZS6BVW_5OT&*_~vf5E~$V3B;j}_r$p=sh6NPvUbfT`TF3ARNuZfG8h)YgN;fPi! zuqsCm+Sx^P(#NEaO$EJ)`m*{~Hgx)!$P*$Fz;N(>X^o+SvT@>NVwy-K%aV<3Fiu?L zg)qt(Lx@Tu1P}rY(e!}0%0#j$Im@RjQ6;8}L~~hlH5&oC!kAS-x_rEJ`SNCnYLRGj z+p5?w{E3C=njx^b%3R6h&V*XLE;})^Y-Sr9l-fb5mibPjgS1TKgqj@zsMDHBN5k8L?kMF}J*@P@KC%W3YX8QC^nun{l6Fp@;wQMkM zp@_Zx7?_0;ax;Kqo`yw}ppxTbWeZNj)yWIRqH!QCJT+2bpExZODTcMP7&XX1X$9V) z4v8RY1g$(y#oMIO(y5VByU!H3q5-i)B<7UO>1KnAI)(XD5&(6?fMMZsfqQZRqoY_n zuyA<-Z#G@z7hK@dC5JT&Tp*tF-zp@Z z8iT6wQ?f%R#~1=f6v3ph&i4W2t=Ri7JZvVZVIz)GVkd`~#+n;S8XuwyqyVtqtEsI? zI%3ePX|3sDj-VzGYs$F*sV%OpW&`^nNIG2kAceA8BAm3OP;F4Mk~K(HS6o-YhDnxx z%4Ac|L$dmk`bsuTGTmWNZuEbiz}5~BO-#+s*F7HqbBgBFvJn^ML~g~~j|~u&(6$Vb zO);)XEhTRC7WdY$L8{b^Veb>tv;0=_4+urRfc9svd~hINR5L#tf$8%T;&`FgTie?q zL=!iwi>xfyP}W<#-p<}7(P3M?-sQdLSpEaGY#Yexcl#^Zh~rQP`tcA2-1Zs`ceY{s z07O+>B5+$RT-yb1&V{YjE^mqvmr@16PcxF#TEY>Rc>PuVjY#12&+T7?1YZBL{?(4S z)a&2Sza>D>v~3`0z#XV$g9*xFN(M=Ep=h3{r~Kgh(?~cUG(-VZT@HXV-7~A%FaV7q zfXgia2+uCc^xXhB%RQ@{4FjNCl$IGGc8exT8P%cyIpZn-c&=B+h5>Lx6kKHi_!jX@ zW>#MffK~3QIyNE!t{xMh<{AL3c2_sE!2r#=0S2gW#5D{e#2(R1m8rWO))ic@j@aX^ zZdvW?HWaOvfCt^dW;O^IBH)VL;4yI>`V9h)&IF3|I&ZLLa4uywIB#$uAX9aFk=eQK zx$SIdHpIkij5tH3*lSp!gQ9A*{ssW8ao5aXBTcnv4guZ3K-m-%ceI!=wQH)^v=g;! zI@Zh&P@B9FnXJuQ>#`9SEv!f77a%2_+)5mAqgBLw%eJj`ir_d6*~wc)MMm;A5F*5T zL@RSt_%PfUK^y@!?#rZuyRlXjHb~1pL0~a)v(Yg=XrQo^3y-w`+mr1)mgYRLqOVFW8$1P+SITet(dl{<7`->iFf5slqKJ<^8a4draaorwTJuf+dV zanX)Jek~ep3r8@2cBR+nH>tq z16nfJQ@3m4EC#;vV<50j?#IyJ61Zl|{R^lEmiy0?`!PI__rkeB?!O4m`{2A(?njp= z?}u}b-2ZOsoaKJ`QG7oR?*sJXYxq7B;OR^X^5h+^ykokt3{N`)1qM$)Zh49ZoXyh? z`2fM(>B>6+!3y`5h*4_FvTc{a=}`3Zu#*Om9qFjh3oC&q-CEr$r^K3Cq?YOH9O zp)p}PXQ~Gy9mNbs;;|?Jc$ z@LVGgY=QH$aPE}{&~uRZ9FXtDcYi=mx~ZXh@&Q*qkTe$aqKdQ6Ap1ck8$x5r){$(D zQ}YHr4>ZUJXsUr)Eh&*6d62RgcI9xLv6xR2j5ZB(syoc7gPi4rbbIvkwuA8Tu&mpX zh$l{Jd&Bi|xJgqx+$o1KGDqVZK3fjsxs13syipEgv`X9?evcfMx4;ed4Wp3_OFT*X zWt$@(qOv{g%7?3s6<}XRSssdHpHG`%-@`TXVf4Fx7IWq2D2qd`JOpWFi`j=cKL}b+ zm|dUaEMgJt5*VZDhKWG{@!-%5d5Ah3)YzeBz``tR9_H!ILZNxYD)E3 zoqP;hRek}W7`mY``B~1FhbYU(UHLfVkS#8ieiY5f@{mT>1GW%;BlpG3W|6{wetEFa-4GaIX) zo2i#4tL2lydRZhNr7VuP@<`HHTq@gGwL-IMZEm=fIE0VFjM-SfNKp_;=GJc*8fZZ^ zjrB-_Jko*`p9VeM^2ll2SdZWbrZwajVQ-d4@N7zr^~ja-$R0S+R*$?#9+B@4RDU1Q z>dB{YHU`ztR)BdKC3!58c|K)^c~8~Lr|_aLU&2n4k5d*;yYlIJV+FFvkg&%ivmgd) zKwaXelk(}H2=vRtl*Lh39z`kG;`-6rAR~*zoJFKI@bfY4=4ibG^ruw-e>TIv>dIFE&lbT$Xv0%0;ViNzDtN?3&)_WXX#Cd!twp}dlPmJodGghP zKub7>rdQ-IaTKWCSeh|`DHfaIDW+IZ0*|Ix_)RhAZEIE@jK0v`ac_9$A;rI{f4rYqlsf?~^{R0L3R zO(t2rzGfeR{LYoX1BcjR5Sp?Hj=uKsldBL>Q#L~W1CmzB-(d>gSD)v}rwI5hSH6Xc zW{ZF^_mAlnp&u+VdX1;J65@ej>puz<97Xqs`z*MAKN3d>#;|Wy%eU&`d>YO+`PNL` zyS%kPzO^(!(D`x{1gQj0ku@7jvx_l<)ra(>Mjmun6!X{8a*E2sNw4X~GRzNZi!ql} zAPDQ^w+W@7L=}`9%hE&>M}g@RR98e-xBh$~{|Nw-%GIP+V;M4nG9bkHqMXu;^h_WL zHLbYmr?U(26zQqLB2`#pthj?yji{^al^W5_(^}nP9#3m6CJ;NVg~8f|0H{@kSZg(|$!RxEPgAiqb%yRLF; zjTIO3XyQm$>S7Xg6jOdr@X!qhe6x57n0Lr$38vIlrKnN12nKA($6s(+Nbe%huqfKI z3_C&CrXjy?=7us?W8@F4-bMaqdWb538x1&Dk8EeC(pq4CAI@e~3Q@iUt{zp&<6TvX zA2i9qlVY?RMYLCRcJ27a)`{Lp=nej4?Oe~yU&^XOs(_}1$){lOA{mEy{j~L!8btG*qp}Mq&0~0Qy^&?g5DlFh? zOQVVTtU0aNU2cGA5+q}=3Xm=G$AnVns=6v;85FI5EsFfHg~=WQ0cNZG3BlC6svg42 zRy52{#)R1>e@ZY(S0w?%7QtjM%?3&car`NR<_X&Z#v}NFB~s`fh<d8%a~P(|;g5u|E$RcpJk zG-CoINSom)Mvy4MP8va~HdnRHFjl$*BG_siG0qXBYO7Y*!il9i)z+ih{1GHFyNriw zs@+xXXyt5a(uE$XS?L;Us0Nr_+`o1dsSeQ07Iv`c{?%Vy5{(fJjn#2dEa0wo3Dl3@ z)#h_o+fl7LK)F2OsaZ8@Rx6xe^wjJcH5<+?p6aYoo!#*Ku&26eR2MwAdaAodbz^#L zwx@b(RF6OL1Nh73i^SYsSM|;^R$MHgzH}is`6ae5eNiiNAr@w7HNadUUm}=!uA0|q zECZwa2Mq(VUa~NLw}1j_4GWmvI|*gJtLCFUv87QoQvw7z;uQM@0EYX+0JgwY3p$Nu zNYc9(EJLRT$B=fsu)(Hjped&by!0FbM><5=XXMGz^r3`k?3NJ5OU z`2Zl-Y$HngT-8@;ECR`)scqr5@qUKfihAs=ELu zeXCX923FI37puO@0+o3!tLc7M^+QdwWlF8pv}N5GY8s{9!)h8Y;W!-krcr_vtLde# zS_+lNR=Na6Os_CWGYN=M!OMBE(Uri&k8?>5U=Bj0AQ*3F{jhfauVVFC{6E$FN zlrK}OTJEal&|7R7n66OMlrP(jL0DSI7}NpgCi!!MIonldgBrFBOju0i&#n5)ej)+P zyX7wk<{Vd@lQfor(PLG=P`|J+$tY_6il0#k~T$JNM^p^-8P=hOS1iyyhRcbKDQ!YB@!L4d= zk1Ye}xS8AD`K~%2ZI7+ESj6=D`sIo;ge95e4PYvovYS?v1}O_Eyor{zHV`{<(P18;SO)TtJb4Auw`I)HAYyN z%Pk77#mQ(?gz{ebYoca@t2UrHuw`KKxp7(;`D=^g&v2re^`L@qZk4|wob9gK4szJa zgJ$@x0890*VG?cZ2V%L&({h8YL7{y?NP%trwb%|Ck}FQ4w*b-l<%4JeD~$Z3OnxS` z?HSvD)b<*+y#>w>!r7{}cjpkM4Z^~7v24m4IN{FE`u@a24O!S*2voC^i zyh)rGmTFX~S(;&~*(xwHiIP`D2ZM?7DkY_g4wi2rT;7WB zP*8MklYbyS4!LRwT9B;>J{pbAdfjJCh-JCCG&EBUVV4zgX=sreTA{f#bfy~0#RhO` z=mIsAOC0_K!Q0f(J9CutKM{PH8oDYv7+e~fmxX{~OMg>fnYPr2G$pH>rbH z=Lmiq!F$xfeL*@usG##aHR7s~T4RN3GgNnUVhSB}bX(95d|b9>OfhDtRoena>eL7+ zhZD$bwi=;o#nHT{Vh&Wh)PBQyCqTuT&z~m%vnJtyZkbT-*wELeLwd zZEBQ60bCoMuSN$n*G8A9Q7@W!aBXz88r>EhN;3_km#ER*(ZS%_=v8WTZ*(ZQHu^3# zDrIyqv29e|g71fde7jv?1=CZU#a3L*jR~SV8xHcPCLmgy`YtA9(vo?H$|scP zT=iU+u`oJ9zXBxc#G{cWB5JpK4x_m=(w%A&A-&+L7ix`_mlqGpcp~^CFZg3Z@JD{| zM?9X0C-4tD4~K!{iTp$&lO`X^Cd_5iI8aRnadqm2`XKFhsY0UtgsV<~cDC|j1r{dZ z;5EI$A0Vb6F_Dc-TKq)TtApJU^m}D9=}1^~yqHkyPj-rF0-PN+eV>w@$b$rc@h}+edPUQVaA?X;fu+O= zxPgif)?pW!2BZfRtX5)SO*rN}9i@m9m8&TZon8zau=4|uQ34Wrj#%wrBu1>GY1e7z zYA;y!*d2z)6bY6+QFk8u;82|P0S!!rWe@$vBL;shdx$m69-61kch)*yPjOETGPUKv z(FA0));XVG^$|KG!3S%!Q313@YpR3tD=^>4{0f}S4j-`-bnOlP`EVz(F1l+)l)#}l z=GkV;Onu6Z>%|Z7RS^TheGJcr z()L4yW}S)Kp;N=sXMaTfPVECr`{)70W!e{(iPvzs_JL)58qseNC9sT79Ah`~fn|JL z41&l9mi4(t`&>gC@Ngs!LsPIJ-}=&?hwuR?^nZi^OC#t<`5UzF4Z--L8SR8lV^D4C zW=V2DC%)+$DF+jsn;bq|L?O=zIMp<7-PCpMCJO>r z<=(nk>*kP;Xi*ia!dsVES46*%1dsTRs`SVN5(B4y(i-o zCx!?Udzn;;R5&&qU@gRhGpyxG3))Nln8JC~1o^be{L)H@x-}95! z6At5vLmJj|n3QhL^DGbAXb);mn2lYv@}Lbki2k0^6HNArm~Q!yjrdRqp<8~=27Hb* z1rR8ljygPS10D{g=)nO2!<^3tQqXMDAsYaPE+Ok@SB}_#kw6OCw*QC?cqEj^9NaKx z@_00(Tv=P;V_=A{JQmo!;kq5>j{UA$^9&p9(S~S z%rDN}CA_#7g;%f_C2yZC{#FI@!~6X~B#3Og?3kK9%648T%baZ7>`fSxX|1HG$59 zO-7H)Z|k@YIc(foj4FgEM>mUZI7WvE(?f#E(1Y}i>;We`STVugIojbTCI|XJjPH5y zoZg|A*1Jb-kB1!ujtp(R(@LEp=#I(X>X$3^cg()NfbQnh)OX<#R&N;$Cl2aMJgQrzO@St(TN|o_TN`JJMPAxcmNCRDL}k-AQosuxc^m@Hdu#A69>^tPLLTVp zObfWbFD5Nz#}P@hAJH-Sl->@b<(tB_e4nuUYr=`+*$*Q?!X%g8Vv`ZszV8H4FaxBw z=7gg#rDzU%TTezmWJB^05$=^NP+iX3?oErHj; z@sc=5uxSZ-wk2R{lb5ywy7(lw1nOQ$$S`}!tJfJ3bW`xx$kP%?sp&!0QT3i$Q=ry> zIDhm`fgx3%^l(dCtV?JAYS-Lrn?Si6FG@7}zIL)PDSM#P? zwP_}~v2AEmhuYLb?iRS`s7?Mv>}r6=k*$0KRBkI)+p5GAO{EZnf+q`F?PLLV*{~Xg zg-@~k4Rh!XNB*V&a~zZG1SZXX(&JsrIG4>Q@syNRi2AXZO&YJiY4dnf_vj(eQ!O3; z-X{J%9yb4Mi?DyNx%?qA7t%IpOlpeET6IP®JmfS{wNOqm=gR^68wP~`@%#KjCi6r zo|qC(lq4`-wt2vjhx_qMV#Uh4Uuh-NJ=M#r$sJY44r*8*0E2ANGzpH)M47 zHYNuPv2l!GXhAL?iin~@QA4*HFVcrRmk`SXNi?FsqrPzPQULu-1eJiU0>ds5Py0=< zsndYK(8x4CgD%25f@2uS2vP9J;;lDN{o$lOyibrxo&th#F=))e`kg3v;-(8PsOtUM z2hF=Wal1D{qSFx}zy|9;GrdHVZ9_^a{XjLw1XMiKKH^f5OAUqeGQ$k71bM~EqnJ*9 z+P`A#;L1f2T(_xOzO2{2)ZW?_uC}+@ezkt}-fR15`~R)A&p9)b3`qUo z=-Fqlwbx#I?X}ll`*HRjR$ci4auJam&)@$}^d-FcuS3EU2ct+1PyI@mp78y!=}X$m zA2zMqnk^&;^0_Vf^!8*=y1zd+nB0^}=7;)|+5Y6Ri`OQ%=Xx`3p^$&N#d`H}qLrG9 z-u@T8+d|P%3O5BbFHuq>(iQf;a}iG>-hnqu$8n^w-27+1X%y*J9v5|Zh$8ZT@oj-B z8!Z9f^;W#%t6QUB#e{c2CW%l3=g$lHd!<0i5pZ_v?h(N5=0<(kelxl`KFgs01WN!>eV9>+6vCF)nmk?u ziaLi@^{3E={^o*#&~Kql!~-?KmK~<|0pPWeF9%)wTd(%ze0ay*QMck*b0?T-IX{r8 z$BB%%$H)Z$%&aojCg_l%(HK}9po8_z5tI6jnSuNnU|vXo?s_9&rm7K1xZIwwyHJDZ-x4_p?}vW9H2Y-o zO4hKaEHm=8<+nM-G}hb+^=i#+`ENV8$w>nptC`m5xk)Im)yTtn3^eCM8bahpdvg_$ zrw$k;?(yRD^%{uJ9$^EBO6XhO>|&t`oHEw3m3=Hm3ibVdUQ*%WTR zinqFITeKQvxH5k!m)!_H%&bMvC8dBX^F53Q+j4w-mPt3G9B4Yq92e~ZP~%snww|vK za_NB@fAY(_7u;tK!_?eCZ>!gvn+8rO(x~5LOzOGfiYpX_%N&Mi?iARy6qAf*eUK#% z)ml`(VLwwrTV+(Jz#Kh=I{I_YztRwc>_5>JfRPh7ucWTUrx9ay^0MSL!rYV2xFUxM@gL;$C;u zlv+f+^7>mMg>Kmb!kT6m6j}2(joU9i%T1rg8=RH=_ptn|=sQ{VfLS7{-xczefI-9C zp0y-D%aYvfQj&Y3ZY8*qKZRCe!QD!5CI2|V4VMz!M7>!1miUkxO;b^B^esZ2qPDtQ z{knm^HkF%(ZS68Wg)V8p>v5aI>#@3kM?YW$`#-^)>CkbxY{w!%Gw^Kh$PfPn{2YCl zBPuh>wqc7c73tx^6g@{2GtjfHyWsqw4CuPh3f?1d6>dE@lZ#>Z3}3{8!sD&ZVv89zQgc8x0*~a@YyTD>nT!aUldjeO79VDy_6#%C z&Ws4EWU^-3IWaB&OQ%ZQCIMOi9{e|vR3Bz8mOBm`VKeM4%tZl(c?e)?^YLn?_f*Qr zbq57_v-?Cj9?Ihl!;4lTw;GJSS!=V?T&xJVvzRw;>O6X}U8H2-QgKj%p&nBHiakqi zAqva~#!(Y(u2d+i7{XQ3Q586-5#l&`**1~4zXIPxf@cOs^Ia9vT#1@Q;RsUEul?Mw zMK@l$0&mo|l5SjX&humBNum3-_>B|>W`Ao7kF*?-RbXA{UaDC8$QPkdS&Fqj-qd3BjwdTa}b$3kZ4n`ol`=<&z z&UHd!7hB&FL@L{-(12p8P$>I6^SCm*3jc{>b$6+P%A}s6q$WCUo4=yuhO4sL+(WyM zTV5D5PxOcu_@A>JLkxQoJQZW)XNpK8k%B2Q@)VbCvaZ5wCl(jx$x24~$CdYWB`;j9 zC9grWn3ie)TC>X2Ub|AoM9ezkQM6zLr=khu-3MP3_n?wWGbwxN$pIUKw4{KvEa53>Vq~x;wm0OEXUzd7Xg{Cw~>pcUXqE z+$v;kbxmr~YHPZaye8?^hk3xONnOND;h0-mT{SJ9B=~f6gFkvsOY@qE40$SmIq`%s z;(rxi$%nq;807KGuaNIqZk!Yp!~;h~zs@F3?AuVa3bMFbPjL;wRb#&1T5AM!89_}6Q)|GBC(1l&X1nzgmk%FSfsb2c z+bChX;hvi8ZqeL+mr?L=|B=oV^cJudGjxyPO08uh=8h!eO~9ji(`lyFkqnRY@8k3$ zv$=v@)Z8h(y7HI|SC1jdUn!qHj0$m^Rp6-)Lqye{9=Zc{N4rH`g(|5MPdHQSxE^r- zE$-Z99L2(@B?WK9J3HieAum>Xh0W|0DK0$t- zQ?Gzr{HN!x1ij3o;R<;k4LNuo4e>CQ^o(HD$y3S^$cQ&D@rMw@%+gxpCjmhZnE!JQ ztdn1Nti3INipRG6_$(J;%pr6`>;W)S>;bS5r>|D*sG1c6SwADr z#1e1IU+t6!dAK6HUg3H{uJ=1>Cs@C8ZJhOcTfW$H!&4*8f7NpvY-ODWLMZDLetAZk z_=QEssq*%WoGx!;WV*b~5iG2sq_+GIN@QpQAx zI~|~5S-8F|+R4_J1$OGo`xX91)%Urr@I-6<*2ak5;xW)a{TPf;23NS*kJ-SAylG;V zU9!VP1U+4C>j|d8dP?yN3Yx)hPfZF2&@$2@NY9Ns@lK(YT1K$EgPyRD!VyOebNOkkWtyS8BL4iE-c!dMw~&kR0` z@llN#ykWHw9Q~eFuP4=wSc~Vz>%cD%_Q2qGAqIo@$fj0McNwNPk-)mfC_n({BRs$H=}|$Vl=cs5|Zsn=@zV`C6#lCHskP><^@Rz}T1SW%i!bUhqg| zxC&>6&A2D3q>dY9xuQmDGf0k`m+S3Hv}_7{CP<*?o1D_0g|Al{EEl6z_SsIY$+v*i zok%27AAnQ`Q3Wlv1?84V88^+DEm0Fw(FLGYQ?95fP9g4v?!rbQ>XrHw(D#gHGwzF; zt!G5dxIgN*$f7JVyBmUWnkfqhWWg7^gpMS!sY*H8mzi zwAMHCH$%q!F&1WK-T{3%g*<3dR;VzTW(Fk4QPA#$FnyTn|qB`Ph^v9?@*N}yu}#FB|F z&=b7kJX>Kg=M?*P^ZbD@?TjW0+qho3QRu^4`Iw1mm=#N!NiQQGWR2=WI;;lMj3}0_ zt`z)W3rax*2HJ@v5Htw#8y055R&%L5{ zeeD%-BWl!~f%&i=HR5K}ypsvz-ncLBuZahvCMW~ZKr}d~De8>|UA58R6~gNv(?x?| z5R3++f!ZtDe;xHleK0Fayd7L{{x#T%a*X-kdO4a0TFsFPh{Z$Ekg|84+kX&szyKPx zKRdW`7-sz`xJIm3a_~j|ng?d1*nn>2{~O$La7zA>nXm#qAN0|{NE=5Ba6bN#GdLRc z6dp$Vq5r~XwuE%kS9laK?{}o&DqG?n?;so@=tky&-j{>N!RG;dCm7}k)G;y(c(zmc zUFP15F&NFQHDBq<&qtB6>(y%N!$OC#U`?&ercSLZTXcDMYTsBJ7Lf@k6Uy2sAz-w{0T-dT&A7&<^&iucDd9iA>vK)h7Or-9Bdi;8=6y!2eFlB%0 zZYwax7Q!edHS3d<90`%52Hz4Cg6p$a39#ISxLv$~c#DDm^cJ0G;b=du0QP1@B6QP( z(kR$_-G`!3+qs;Kz29MuSm{u)>c+fB`yoZgmeNcY>BAf;JOnPF;<2tduc!W5(ac8@ zG`E0Xo)OeQY>0g^+wJOZMhTN|TqGs&o*{-dUe{y4Sbd5!^3Oy4&8h>UH~kA|JlDv56z@Rl zb6{`E&PnSuBY%ty@?Ip!7r3BTFZuKqp_Yer*b>wN?_)=}e-u8(sL40p$1lk8ad}@^ zo7#_v>i1mOsFD%igbpwPY&FXLiFE_xmA}FlA|vH9_XVI^+jIq>fw8%i`x0KY?X~F2BBc4C4pR_8 zYnxlX)ADV-u7pFX1(N6q#o9_p2r;j*r(pcJ5kg`b5=~%Q%na++FV|RZu7cijjY2MW zTPS|Bm%xmSTD&cj#aATo31DKOWu+wozX}d+f}laKA8|5ITX-jbM8@)~RX47OELsFC zF_XG*69plF_UMUA_Djj`+U8p2r?{ceAACHQmcLRh+uPvWhD94)!C82&&yfl?iV+9t zJjNDnlyQ!Ye&4b=%SO*Hqn{==!Z^o9pSI{N8|^BiS2oHx$3~xF`X9qaF8~%cdLh3& zBP;m@8(k%D&&WmcHbySycga}er(dGJ(?t%Z8E30OB(_v7+=th~_i^wL0+=foW}EA? zkU(MdVJ;Q}0t->xPf>;|lGG|eh8a+XyI5C1iQzW3pK8jI&th~M8+Z)1ER`^&4lv^{ zw|o&6B{*SWo3RvRB_xDc_7%t5F=w1$$BaA~J04$ZS#j^mj!#tbcsu4s6u&+Nt-*h` z`la!u5$q2%az@}QP+)VjOT0oOe`PKk6J9|3jjm>v#CCKEVz8q%{PK*fc4QLFfY4I#(M(g>j&23bLUtw#F{H5_NnyiWi0o4b_3^)Uv0A;Pu1Dr@>JUE#LIF`s6;3Ppf*v%`f>r{?}5W_Q!Z(q(fp?w*7GVMFQ z%(BAXRr{W(sjrpT#=~U$4W_AV8=G6Y7v2Oq_zht{%-l@=KMo;boqc8WYEI2KXHNY$rnl=l zN7c1u z235VVcX5Kfh$!oBNb;VLF2Qs=ZMtu;{b6q-gl;QynE-5%{|dECcb!dlz@m#zpqtEe zyKK6B$K}_+bi0KPy0qH%dV!s~GHBHmG>5YRms0XYa6V-u`W*jy}aC^c9pk0#RUfH}cCf z0#7MEcU0bN1;YZ?JkI7B>TU_-)|v;=wk>%$9X6*_M8Nm>H^*^7Ys{6}}eIheD+U3>Dxf zgx?3QwI0JsDd7*w2A3Q>Aa3A@~b_;^wMEUv#L(h`*24KMG( zs-0NbOJ@b3?~8Eo-25R$&E;=H0`zn{zdR%V#4n7=?~}J@FxI@Cnf7SrYX^z ziG(1YFbfi0$ogG4%<=0M!h!Jk%ths%W*tarwW^e12GpRuU01*lL4&V0yfJO4wV%i} z$;!Zh$^e5CfJgBFhG-Gn6sge`KSMhSMu_Y|n=>rrTL@6BN@W33t&kL(T_Ty4kPt@J zeDA}k!>On@?{#su$t8PTo`rC3XnDq;sBv0bCSjLeZ<$^}u!+KyNl{_2A1vDhQ+r^O zDLt(Az@B+$al)_{-mf=!C(POl;|7;8KY|+ZpK3PeJ6kixvuB`f^ss;9mwN;Ye4fnn zxHBL0GsHF+nfeg|9H>a@!%XVR{TN|DALcYO^%I1tpK=t(F@A{Bn=H zpz!6q8Ck-cNgdvtR+;ybwHGYW_;ecn*i3iMZJX8BKC6B9BF1>A58;z%5}g81#s^jR zOhtU{U_RTw1%n*X!&ee5^8!=*PqE29iskegrUdC^F8$n;(n<)P;xhyYO(|Ux)`P zBiJqe?3x)=KurvKj*cLFL*fZd(+pauF@BH6`27-o4WXY*{U}nK^ghIABJQVA!Q7*B z>Jj}>-A_M4XwWgx7&OVn92UAb-XZZ-60VbQ*tOYZ(5*=I(}OO~^?kvQxTRc#e)_uS zQN2K)gA+4op23uF8(hj&=A-(}bTRyhK_4)g|3l_|ra`|pIai&RY33m`=q4|x-sfff zWZ$EDnCAKzbBB*hx!S+PZ_wTT0>Z=oM-l!?!oNs3E5Nx50p|7|2_Hciw)FO9K-0of zx}WkvF6*u!bNB&5H~khjTwWu5Zbo>SwAToURy$zwC{-yRPYNXoko;t>SY_hxBPoI$R{q@}X zZ`HGG7dCKxzthOp!usUD9y}gpT}h&SsK0{t13GBk_d!DfdIFFS)@jgKGA5exAfBN2 zKuIF~% zP#wNrV+R7z2LUyJBj(b8J_D!;qZDQiO+-Hc|`^cJe_`64i%b(HW9$G|?3G^2W`kX*+ z7niVz{#Ei-q5Dpzv*?QgwE}9S#q;d3UqoKMdPbT*(i_?2gc%LRb^ zbOHTX(k=xwA7_7GkhES&yM%rr5O4jQNte?xp}bWnH{d=Z%W@Z>bLeV%MbaLUv`y$O zoc08uC9tU1CG9Cm+e-f<(9Z!)qb&VZpx*;J4JV%866kF}&9sgFCQud3t&P34#rtLrd>2ypx*%srPBK3$KCsw{N?4*wz= z##K~?l7QCG4K!V2Eu9UhiALyjNxK}-WO@(!3{&m^bQ!FAwm>&XzCAQo^6drWr}xqV zfj%YBZRk&&@B4tRq&sP;K)(QV4ZWY1uKAmJ_v_eyxT!{@5dJ%R~9=fA9GU9k-q^!sXV&9|%Xg#P0=i_P5J)g1aH zTnhS;nrYx;w*|NR!J35_S)XX^M7VxxX-jeHlQp*jzj5jZ5f2j|1w%7^b+K153SEpr`0n^CgVdFF4R^ z82u+rW6Gx}=X*=9qUjcNz^A*as8vDU&-%Q87Fy6DUl>q_1>I`irB%@t7WAU;20+~w z^hbgE6a-h3K)ziLG}#rQJr>mLpXQ3uJ`2j=Zb*#o5y%Bi?9dXlU!WQ~C2*cAK@SUb z3oQ-Yuhr0(thBX(jH`wYS!vx!tEHzcXj|ZMKrae(v-ios7@#)R_{bGEG0#hUU4a(D?$f)E{@(Q@233&=-TB zbT`sg3pyOUOKYS7hw>4mjaq5H58j|nrP~BzD>&OTmF}_9m`jpAWkJj(Nndg(&+{bd zyH*-=X`&aLG`G=2vrcC@Z>Ck@EY|TW1$xT6BYZoq+V?4lt`C0`&|_BGqryB2g^RnS~Wf3l#bt9s2v zw2l`qu)%QTUrfwbET}H>DYJvOd?amJe96d!}k6i3sOOctJc!_4m8=dj<#A5_o~b2HVfijbs2q1LEb?4 zlkO|%hy`)Ky@KRY58C!;(fPhBX!;qdgdd>iTtTZXXmxNN^4()W?~l}b*VFV_it_(O zkC+>%!-BY1ZJ-ST-R!N34f;0FE`bjFCdVE}+CG&=1F>%!8>n?Qb77l5?CYgbfu8aj z@f);j={5yXZTuzQwY1NITH~+#257$p{n+&SchDgVS{nEI^K{gLR>$$P2J|}xdEvqQ z1^R;pJ!Rgn73fV1>WMSt<|Q<=I}m>j>&}RRMDx37k_EBOc2UxT*w^i%Rx2O3$}U>y zK$Bg&X_*Cas|?dR3*uH8rfvm^=0~VkAlAfE{|Ftl(tZ=)?%zX?S^3Z)EGJV1+itBT@up!!q6Pt!pQ`cCyPf}f)& zEGSu19r^-IU!W*w)?6C;I<2&z>{weLTpywwYF@Hw)TF~UW9oo-mzXi>!TT=BiI%q*(sM}ff0=;QL zp2>@={++zo0V6uBoj>_zKoJG`zBze+)h{SzLG@GiSG`Cb7G=+rPgebsRtm(e`PHgl zQJ+97^vCLdS#^y5U_sxk-=X~ny=g(;t-l{oJ$Bl#+R~q|f2Ha_Xu1WxQvXLla|Pnj zSBv}yEwj>IH3N~CXhTWb%hczj#UsBVKFErFGUS^T`7P~t(pE=ap`!xDX;Q<+$g6~< zH~!+@8yoJA{2%fvh`!hG1wc1g(CZC9j{K4KSWtCiee^ZD!-84`+9yzS(&EO9@ftlW zkecbdMo$Q|LVwk~2Kk;Wq5Kp5)Sqy-wPy*niW*PTGyJ|DmUyv=7DJq!*pE*JFR7w*=z$n;QQswVuPJ zbNgKv|2w^9LEL_%-E*!=UhoX@gGMwAgHIpOdyKHb*>6*N!-8ABxS@e(I#X9-F7V;iT=*=4)>`X`heJ*MciqY9-kMZMr~Qhje0rwpbul zhecYillDyXOl{Cf`&INTZI6@oc670}&qyPmuS-kVp+B(mTC)~v>nJUm#VZhHW|gDQjJ+MFdisU!_fV(!LY9NSo`VeIs$PHt3}7(AH`wTK1r zd}+NlNgx+W*a0Xh5ZB?F=z1+Bkdoy}t)qnUO6`1yGF*M7wyuQoDy^@C@+xi6p?o%R zl{Q*Jxk0-}Ag*XE>QLE`%x-$BL$KT!o*P_+7&7!Fta1 zDTEq*O+v=Qk2P>u8h=PyJO(^}S1Qu90i)Adf?p!Jo|90~uv8kpcW`)PBZs$1c&CJS zOL&ij_euDGgrAo1Q3+MK%2zxAj2rv^+-jvVzdN4XBFZzk@dbf-GH3px#BwTaG?&P5 zGV~`SE%VW+l=F#e_m9#m&i|-RR4y({C-#}Pg#Rd?QfZYn{!VoGM}#_YTv@4GELNj8 zBvsj4Xc0g-Z`C3KQ=$1HEFM!pF!&D=Hm$8GQWV(<^3A?@Gdat zeM*~wyua3>!ubfj5KI5RGn?kkS`0J z`s-CUnO(X_Lj3h)2Jsh;8N^>UW)SbP*Mt9%eu@5x$opK=q3uWXsQz^1a&N2l^GKg} zuJ&@|A%uU7JmKxsKWu)-JA?ilxnEnXp^1I#^{Qyxm)7rz&h+{4ed}?w$ji~Qe9I*D z4Z0+@2;8oT-Qb%c-(VK$TVuETR*JMMMcUb-jddEg+9HW}S|P7HHVD2~!rS%M>TIA_ zIQL2TG#07kTPN`&5+9WKM^N7n2Kyw}poI8l1x@Zj_-g152|J;;+kFT0w`$gh59mg1 zR>Iw39|dY}5WBh~{Auvnp?yz(1pA$T(GJ&sH~bgvh1!2Z7^rLgA&f5 zy>+Xq7SVlmYpV|EkJVjO^{{B~VbR_`?SqrwSM`MU#mUclp3uTmp7nIm*QYG0x`ci* zWrx;9zrfyQ7ri-UC&Ezu;;QvD1z{JRQGYYyOY4uA>uF{EbKx%9P`@9TZS{8{*9hXT zi<}A3+mlk_lTu>6V5UphD&fM3WvoK2DL8+7wJLmaBv_R)Rs05AzamXJ;KWyZ$g-E+=Fmi$De;vOUnlW(65k;4H^dHmC4NNva^vi{&-IhW`?a^U7aJGpS>o?V zQT-=Vmd5*pW>CT#B-|t69TM)7@LmbsI)8&-CUp<$Y;OkzpHSMim6uuFl`u7wc^8Pf9J8>1>&cb?)QKq^u`}ex=Z_ z6nZay^(O81;$Ro$hWcBrN5Y#W+(REl>H|0{!{LS6neGRGztnwD@GsF- z+P}JA68tOl6HvZ_Q&AkgL}$V~sgUuS#(0-@m8N-I8uRgKjQ0uNCzMTA$oM9~&k&j! zR-CzY3QecrI|bi`9fl!ymteXClNOq^VA6u=(YRh&P~PIs3O+0NF`*n2%$Q(q7RuW} z`6u`7g1=qx4+#F#Qr4#h|7pR0OYq+l&fgRK_XPiv_JC`P{*t7=BHUh))K?_crQhs^ zHguM1DZ)3aMs=?BsLop2um7H|a2*oNA;EkLH1CTX1-{SqlElfy^yFgtq{NdF?~r(h z#JeRvD&c+!4@r1b!k1iJF1eXc(h8Ydhr~PF9PgHRx5P&!J}U8>-JEy7VD<~4NVNe23tB1m9$^B{Uh# zp~+wlor38UOs8PFjGJ+aG%fhF;M0O16U>-k#sqUfFb4#4Krn{|b67Bk1*4f_$tIVm znOtI%U^=ak@tuMn6U>-UjtS;~U=9f8fM5;_=CEK63+9+$jtS(^T%ya% zI!OyYE%>zH#{@Gbm@&cJER+WXe?agD1pk2G4-5XV;13J_m|%_x=9pkKpOo&C(tT22 z!88e`NiYWlb3iZ$1anw0hXr$3FvkRQOfbg;Gv;T`V}9m5=4Z|a1am+z2Ly9iFoy+m zSTIci&eas)TulMa)hU=x!E_3yTjFWKr>!_s9uv$l!5kAxEhx1MO6`JDJHa#wrb#dd z1am+z2Ly9iFoy+mSTM%~b4)PD1mg~UlqC#_v>}l;#QdiVzEkj>g6|Z3S}qXp*$$zA;BLK{1L&tEFsnWz`Zl#u94CuJSgGO8ZPl@4VO5*mQy=w8PieA zm}P?Lm2gz>qk`Wfn1d1?68s^-(+;yBQ zDVU^SrVFM+Fdc$fCYVvdj0)zE#1BcFCJVR8%zr^=T{E);CN&Kk9k1Co5rr+NnWl8*y#E(k+sKoa-3QeQXNc@n*k4pTg#5<-k zO~+KG8I|~`#1BdQki;n|vL%_OL*gA0-!Jj~5OqY_UxF@3U$>ANM~E%E&l-!Ji_ z5O^lzr=s2J)uA6`kSlH zJ)3jH~rr8z0Y|&eHZyY?)$s1;D61(FYxog1HnHAweY_1+uciD8tlr&N$9u4sXyRnH7i)7LZZG)p>x2QU&V!hR zhH&d4jFacJIKPjR2RjI%wFrYDrfkzVtd@97h;z-AP?b0pkv-2M>q}lM|3&``qr^a zQit$#nu0KeyCXX8158CY6Q}QW9G*J`;Ve+;G#gYpT4)BscHBPE@q4Z_5v~N4PM08E z$NBwsgllm>M905~wE*GOxbvY?51oau7q>ceToOAM;TGJ~&}l0zMVO`K2>WqA13#0G zn;1H79bAZTh*lxI4xjvV+$XpM;coEO@q1gBBD@KAFLWA3IoM;Ss}Q~yrRj7FZA5r0 ze%({2+fcHOfA1y(eLMl1i_n?aL5bjQQ2^lzErf6}&OSuw9IU(}G)Idg?9i$a&c_*r z2yPYBAzY$OK{yL13?j5lo2ucy74*}Bx-CKdv$PYpYVN1Q^j+K{d7genzoGwwZL7F; zx^|}4rM2kS>mSs2yFTH1)b(A@bDsAb|BQbgKb^z|C1yM+$%#U#AH$!f(flz+X3 z>FxlY>FxlY>F&Vkd8WIAjtJdei{D=G1DfKRj&CCPrA2M2z%w+(XNIQu%+M5{8JglV zLsNWOkdMo2(G;I8nySwhP1SRYrs|os@L3C=1)k-~YO0=Djd!n!wpskPfgj7i4RSEu zHps#9Z-X2r?bXhudtK+z5AgiRbs^pt;(amR7vpW>T_DpOqSMS_JU8Jf$nzN9KQ>LF z`8D3Z0sOXkCoS}TkgoCGP5Znb0i8(!-^Z!R_Zi@BqCLLP;`umz(EoAz5T3o-w`e%< zaT*J3*4`J0X?wM;+J}SJ;`t@54Sx&xZ-M{Y)LT{1E{GSjouXHWj(>r0XSO$!UzRCk zxAbT7ZM}Vcv|{bnbbeqh5b438d}djCFx@tu&?35cU@*HqdwqH^o9nMkw|G^qcc?FO z4z1l?7|d*^i#J`H=^3Q$g`Ql#FT2U&)3$E+KxS2XOSXsBWU`yHnclAc!eF|;CqrGF zw000h6b7?B1zMUzN`9zkFqiMzKG0|JZCjJs+y};xql}_|bB>q+at)@ls3CPN-!X(5 zZR*Q(&$cr!&GlKC3)F>sz~DZVPxm>Lv@X4+Ko_OAX9@#p$iy6rV8^n|rlBp2Tb$2W&4X>KP1}~{@)-o%2eN&c{Mt-@XSOGUDqFIvOeLh$wJcj0$Q4*y)Mc^l zE$U%0+9f|YG_Vx^R^{}8akg|0O}7QH&1?GR!Y-Q0P1iA}edYo>FM}3I4`zDTW_Ao^ z(ArDV1#XsAneCfYO>OEqGv`;Xjb%V9hWdND=g_77*+DzY?3r_EW%~Nv;Aa&%f95<| z(Z@}>BA4Hu9vsAdZ<@}PSEi@P<}IY9LxsWI_Rc}v2;Vd`C_TX9F}r=v%-OVVXaMH3 zkd|cod%;8TWPp`#Hxvw?Eje!+*?G7xp6;_c3ySFD&c&^1v6~Hb43=1Tp=0*E`KW_x z5AJEXe$=HBQM;uvu1cXI#hi-RirgrlDL}Z6+4EV0B|v*AFsBrlT>@}H%5G7C1+xh% z=E&$n$sjC~$i&NtJ$v@chH zEfr`B45-|6IoqNliv{yhD5%8dZN3X?fA=AtH*#F#sG7V>5-Msw#W-ZtZT%(&R=3m0#;+IV-zTvYplT(-a1 z=w1DTxe{7XETW}p=+SQRxeMAA;_~d^*3SHvj=2kGO&IE|eg$Tk{AM_H9=|E3N3_MT&mZ9_(3<($@2eUh+U&7mE zdw5jo%kl`oKR8jqkOzHjWT#5%Cn$IT>q!sVeq$Z~`?o5^cJL^&s1C`#G~K@@lkR0< z@W1MRP$-Wk>{Cf8T1Z!B`nL>jrOttYOn&4@ReE3mKCY;fwYi~u z4-cpX87P(WTbl0cE3C^&+0tVysm5cKNav^fdoiM{8S2OM0nNr@S~#bif+cq3!Tajuf=HU+&HSPJn(0jt!P+ju$bbMC9d4* zTGG8YmMM$tP(saMS3&hisb9ISIJsP35NJZpv;A9PrGu2VM?c%h$5V2Lv2Cg8FKoxy7QiE|Nqa^g%4och^Wmu1si`q3MCGAJ{zEt&j9 zx&BKFnLN)!iu88kl6>wunZlePiIs+4QYg-Cx(ZV9i!#?0acVA0SxjW%%MgmMgU*X2 zpqG4{Ds5o#VdZoE;Sc%;H>>{EJrCA2m`|_E4Xnf%*mp5TwKN<~K~X6pr%#sUoJ$)w zO8t0()|cMRwx!%pFMA|$Gz_x`v|JKqj<&;*IWYSmJBfPWwnSVjukEB9f^qoDd?goK zZJDE6zNT368cg)E`OGEk0x>h_?d-t>v@o$@tZEe#x1k;-ubjF3@fu zk=bcBW^JdGHyx)q&37JLo;`F~D@Y!@(40W?%u_1GKHM7gM8Cx}8k9M9g_Tut35nH= zrOI`=&U_xdvuk-jhLOCr>MWN5ZJlFRX*I9qHCgC&Q0>L}i(r^i)$=jHUyP;t<}}6= zVmhl7PADH-6r=`Xk-(x{k?q5XME0o0tc&9r#8RV+j5{(tXFh7m&M~yUnky0Z2C$M` z$}@{nykwL~JEPS^o@4f8P8PiR3>H59(pQjFGIM82%WjmfvxF9)+!?Ohn!!$LX>Kh2 zHsy9%p2wQ*tVlzvTcF70+Xn`B%f5hs@Yk|lptU&|UeW7Xs)cr#x6}J%d=}BW3ZhIa zzGOGLq7`3_87h=xL-wT4f|p*rN=*?32Jhu+_!lL>O_zW+1t+b@=eCzml^APbxLy@~ z5hs-RBg=zdoQFZD``|Y)v)n$&6||IP8-wxzmiw|c0k}L_8@G+yhH2wcDo^?xm$Gzg zrf1tatiGWpX*;ew5boX9PkFY z>NgB@G4VKu873B1&PIsF7wQzRn$n&Cm$c=Y^mSGzQ+gP%X(UHZ=GEywm6k1B zJT%zR-afx#!(nZVu@w}m`O5f+sN+gft5qom$#!$&`$+{)jzKQhCwoWe4H+!ac$`xV z>{V};XYj)9vK(d+D$(JZEt!NXW9PxvilKN|<9QQ}(Q(T~mu#)EclTqs$As4@K=ELv zY}ghRuO^BsadLF4`hu;Y)wzOdW+%O@MXWBWnm{qOjC-6c78W13WFNq3dkZcZWJ!4= z-p46f*gL)R#H)Lo44XY=i+ubWOg;G4hSgiyQlB zWjotCcU@^tECgglC(aQH-I+m(YPme;!)%rNi0WV5acFHO-G_;+J$0j1yW6bQ4X+9@ z&+U~}o?SN2F|bo9gQIfgc?G}^^E^*k70Y7xe5i7Bc8lt9YQ=2NbKn8&UGIzg`*yF) zrF(hI;L516Q|6nTxq_8f*a>c%xW_Awo-IgrzQvT@Juk?mMqY;@R{1BjM_oy>HJL)L zZ>Q)>HBLfP50 zIu#~b?Q>{VdK-*SmQog8^~#ggSeXEot#}hYMZa5i@1hOIOQaOyxDGV~k%1Ne{AHJP z5pRocq3yV_b z?^e5(|AAw%7O3z7YNeL8SF9Cn%C=Ip_wiX&GzRXRc0ZSC!Gx{~iU}Syr-!hDy)2#QmFG|&?}lInn7JIQ4E5b*T^{>{_Vk3;1B6{s z-agIcvs+|d&C_ga$JFlNOLOqnC3_oNRA1&r2iH^_dL>*}K?KkC2o)4u0+vkEkl@S* zHp}-cYdp(=vv>`=B&_W$M4r; zYh3omxm|e&rd_JTvAIr6ZL%^>=5Ru{KvH2WgM<%}A`<%VOUQ@p-hde2;jewcuA8g+u$rKa{oBD3$9?!O(2p}f zefaN89NQYk(Un$85>*Z349E!1bPUsMyvfB6D9-A_8KRw(Lz`tlm!$&2e!zox7rAh%6>9-u*-N8)fRxb)(j(s;@=(y~bF z$61m-%%8WQR9f^-oJ)D0k6iuW&E-?54fD7j@MM`Oz>pO`>z#P6LH^Cch4XN2*Wv8c zfN(t(r)p-Q&I@r0hD?U=o_&#}=_G2!wPU?!$~2e;rVnY?2|qgbQlzq;Plv>+l}-n= zS)@&(?o7K0_2~n)A8*!Y0Wzdfj|^!uEYL?B9x(8nRUi(UDPaF1M8v(WpBo#=-3hlQIkBRO(LfB#qu$%+J7}tbCQ>>2%A@y z4bXM}czLV|mX`IxZImx5l`Z$A%H8&lm#f;>u6bVC_@v5Ok6+;vIg7oEd9mJDUrNJC zVEP5aA!h9exvv%V*@HT>B`N%=prNx*+_JXzmrE|z7xzoYqTAmocNfZ7hFsj%ELAVj zf)$W+2oTHGk2u?Xv2PbGmeWti`LqJUHqx#x&9`0bp8LG=7+m+A;F5=&In=Tjxfr+k zWVxdkp14n}6&WuR4Gtkri{2@RvfEDBI`_H){^J&d&fl>tm9wO*v)-w!6L_6VPbRP3 z`|Oro3jMML<sZ=N>ecY`L>8G8xiALVWou8VQ0}ME*$Tr*tV4>l^Xb% zb`eBoMHL5;0=lGX;x2Szd+5ie0p<@ZxH5Rv&}X9Xe(>QThXpAwqqj``XG}<4ik$r@ znN4sAT}chZXW#&7B|J;R1K}BETx~2*V(bC&Y)og8;K$Pi?wo+DS7Bgj!%=E>PquN; zj1@Tg%q|uixkz0rE{B!gDfxK1vI$%;^i?T0ZR?V7*%uCPbWACVL-v6@@+jXto`I?o zr*ZM@!Diy&YBKwzm6zMG)UPug&kWRPpsdDjK-{Lqf11h7n1j{Y^92f&c$Ws2N_kIK zNa+}XTLJU9FR3xnZsy`#gDp?Z_Sih^UW!=*{@(rI5x$9<*llP0)Z@8>( z?$O(g>R3pNCA^QFyYZ&z&-`Zso~^~^`Koc3HgKdRXYUB>lsxY z>+*)9t74bbH`F&oFO99Qj$N%agzJMUF|CD>ImSRVQ;M1-s8tga8W|O9JzlaB(`O3R zJY9iV_1dmpbtRGe8=$97xjxGV0i7l9d9&sA%v zkFBo{Gc)AWnINu-KA4e_bZK6%H=>oDBFC9>quyo2s$EF}iLQaAJ4pi9gIL!aaU$I1 z*XltK#{GqGIP6JML#z(4&Xf(vRS%^C_8LhoHhO2+n{@H3z8?S92-dJ6% zA&fW(wdm+ayc#Y>@SiJ1UQddmqaTy-0N}7Y1u<%&s4KEb4?-T|QB=;$M&`roEBS-27n3a zN~edRQ}qWO>R!@giP-43!^kBH4{Ep&VE-9}juor6a4KIEOuy$5dqa&}tdEZM;ZnrqwN8=Ay+a=j;hncTNbKZd)^Pa#6eYsxb;a;7TSW^1bU!<~c zqgO>UW(w_@*6OFKUWA?kw^zZ(8PfZ7^d1>y3Oo|unacXTY&5Ua+(6hd!n z;O;h7jb6vS#%H46GgTBxz}HD{bdu+>itBhpWQTxQoPt)571BD>Z4p?n*gQLuG~kWP zN|&PMMOUHE>mtP>_O>4EKy<*&>V&i|y2>sY&V%)UQPQ7eS;El_?Xz>)0hWRR^uGHt?dtsk`5<5lF zWO9{&f@PpFILbpZbO&2z>qK9KA0L|?9h-;2FPec1^-9HKt+7_&7CzO4clWwuNyk1KzhI$_}JMrUIa4UZapYr^NUSTT(kTS2 zCb29wYp$!BQTrhq&rN;YD1vGx%oxW>APJ5zwm;TkG4Q&h2jmT1Z!&|@4BW~#b$NqK zY$7W|iS$;3G6Oa}^|qmP#Pdws_M~+t@;qMIC5>p4h~;`PfeMEM{^CsAZR)x{XJT1W zpi`=2_Kx&1^2C~8I`AM?Bh;T}dQeBHrc<*Dc6u%fg9ohCsY+BdUYlujtR^l?pT(AQ zVg|}i>QdL1O0!uo}KRfVT%}utTj1@kt)` zr;U1}tI=Hp#WF|svJP2X3$d{|nNE#xb{>o*gmw{kNr;<~Dy31wl5eb@7c5#lqL^~r zPUU&%*d;9U*d;M0g`f@$6H;)DT%3;o9h6CKUd4nbn_*Pf#|DRml(#{M5O}>|T;pa4 z1LW8xL3I1E^?6t!1ta|KrxS6rr(f-8}-~oAV*NW-1Q~W$$81I8A>8gvfkl6`BW=q&- znP=9PI+jI-?GrL=FUhc-Gi-Mvk_1nSK2UKf@SB60&` zk8_dWBb|lpp z%~`1dzgFRw7{uv~f&*Y5#ilQ8z-6TDpnYU%T`t#G*f3tGHe3St z$i+&Zb2!RS)o^n)BI+nj@qT)Yw`%Mn)L}@YN6th>`2dEqEyR%v9hN7&@?PmU;RIf8 zJ``l&mLqP0#3r7MjGs60G~=pwUwj2_?yIiuo?V5rGNs2HyWV{f<2V`W0+XB7>m5YE z3iLt_MiiF3`*Lg+rga!?vMQ*p!fDDt2`*9TK-)=Ix70`~9=CMi;#a8brw$TaX}-yp z8yf7iE_xQK8M!(=C|BnkY!wbi;dHeF>xIDtsyX3c@VgVY5+{H0Y_DG(|K!ug{^DU~ zHy=li7wog)B{a^-?t;F3lQs|nd#96}e7lw@w2TE?{`iA{=bx;(jAuKZQOG$C$_K{7 z<;Mt@zN=Eoc?3(3UPmXKLR|5#ikQGAyoC?OIfqQ&o#5p>Ox_B|%>=J~GS(+GflU^o zOIIqSb8NC6Z6xOgaa?l38PZGMRUJ>n(QEsB_om&08LxdtwYs#m9ohWFBl4lLyNafD z&sn^U!UpSz|yJfO`8io2Y|;d`w1F<@$P>ZIw-mO z?*pg~U3%?ny473w+~N2unN{PiPq}bg%&X3mcF&HFyOYBgtAk6_4MaJRXfTk;hsu6I zBvA4TB2};qbsJw@X$+N}Zmd(s7b{$5k3-mTg%=Fy9v3(b<=VX!r9qm5UDdlRNFrga@Yl(z48u$k0WAm>&Kl-z?ity8 z+=CAww|!ST#O%0V%O|ergp1jUNd|iIHO@*DP7sEVadcJE>|>$78}>aViRu26#~{FVpe0g2QC0v ztQ*CiL2xNlm9vo!Q0y4iD9@vwAA~BQ!1FP=f$NiyQ`zgNOSwVBoJ+a>;-y^fSq@%U zh+|dbh0Q`xA`|A;>Nly-;6VpqIr7fEL1t+s;VKsU!IGQ1oLB^v^m6&Q8VQb7IrnG- zCHH6%cka=Kx(X%tXsZB~-lGLvc8`{2D7iQrn|P0Q(iXIJr8}~IPEa?b4D}MnQtT;i zz9!3hwk(gEPv1VsZo=x;&P-5v;hrGud;Ww^&g0yE8<#s_aEO$uoI71`z-kb-QwLx} z4BIIX1ULU25LZwEiVL-wF}W9bxijR!WtX9hhaL7VHX8M_3%JSZb8fOS8viS^V*q&- zz}DYYeyufTm*O;TA+Sa2CO<x_97mY2EyaC%AvKU& z_f}F4a&u46s1PYKyA;!f8=8Y_?HHQT7Fi zY6nw#haza{T`VN17%MxmOR;59*ea`@b~8j3T;iRpRiEV+E4glJ^vSQ$cn2&6HJtD_ zr96eqj_%ohix>_sSo#A~+GYh>KQDC}G<_0xMlE}nRh;@Y1OENFs&RL9f~8k^v|J4o zKYn7;F>l_~claF@4_~^OE#VxWGupWs>&f%)hrq#Q3qDL6l>3YFa8>sEO_6NLn9e^N zf|-!~Y)EY-iExeH=iJw>NP+v>9vJ|tD_*V&+I@&=40XB6YhSLa8h6EZ>Hoq?0Ed%s zZp!7-Ox;}RGFOgOAy|cHEuO3JT#sk;Rt|o^!7n-ZErPLW9DD6z@)+j-*WR_q*HzT{ zGxy#!X`7_!Nt#ES*UdXkn@5|zLZIoB$7w^MEwwGQg;GnQyh`x`u4M*MR4O1MP%*{_ zU0k$TSfPm4*SaimTT~RmRa*q52tHVJcX8L>y_^A}yew z{inlq21i}&#DPemOZoRQopc5Nmv-vk{{wz z_ZyU9zx*9p*Q-2j6;P0xB2b@953b}xZ~+$3$iG4VXg%FQjgkMvNs|kUrj)p)W#yGs zGpcLq>XQwPP0cN>ZS6BVW_5OT&*_~vf5E~$V3B;j}_r$p=sh6NPvUbfT`TF3ARNuZfG8h)YgN;fPi! zuqsCm+Sx^P(#NEaO$EJ)`m*{~Hgx)!$P*$Fz;N(>X^o+SvT@>NVwy-K%aV<3Fiu?L zg)qt(Lx@Tu1P}rY(e!}0%0#j$Im@RjQ6;8}L~~hlH5&oC!kAS-x_rEJ`SNCnYLRGj z+p5?w{E3C=njx^b%3R6h&V*XLE;})^Y-Sr9l-fb5mibPjgS1TKgqj@zsMDHBN5k8L?kMF}J*@P@KC%W3YX8QC^nun{l6Fp@;wQMkM zp@_Zx7?_0;ax;Kqo`yw}ppxTbWeZNj)yWIRqH!QCJT+2bpExZODTcMP7&XX1X$9V) z4v8RY1g$(y#oMIO(y5VByU!H3q5-i)B<7UO>1KnAI)(XD5&(6?fMMZsfqQZRqoY_n zuyA<-Z#G@z7hK@dC5JT&Tp*tF-zp@Z z8iT6wQ?f%R#~1=f6v3ph&i4W2t=Ri7JZvVZVIz)GVkd`~#+n;S8XuwyqyVtqtEsI? zI%3ePX|3sDj-VzGYs$F*sV%OpW&`^nNIG2kAceA8BAm3OP;F4Mk~K(HS6o-YhDnxx z%4Ac|L$dmk`bsuTGTmWNZuEbiz}5~BO-#+s*F7HqbBgBFvJn^ML~g~~j|~u&(6$Vb zO);)XEhTRC7WdY$L8{b^Veb>tv;0=_4+urRfc9svd~hINR5L#tf$8%T;&`FgTie?q zL=!iwi>xfyP}W<#-p<}7(P3M?-sQdLSpEaGY#Yexcl#^Zh~rQP`tcA2-1Zs`ceY{s z07O+>B5+$RT-yb1&V{YjE^mqvmr@16PcxF#TEY>Rc>PuVjY#12&+T7?1YZBL{?(4S z)a&2Sza>D>v~3`0z#XV$g9*xFN(M=Ep=h3{r~Kgh(?~cUG(-VZT@HXV-7~A%FaV7q zfXgia2+uCc^xXhB%RQ@{4FjNCl$IGGc8exT8P%cyIpZn-c&=B+h5>Lx6kKHi_!jX@ zW>#MffK~3QIyNE!t{xMh<{AL3c2_sE!2r#=0S2gW#5D{e#2(R1m8rWO))ic@j@aX^ zZdvW?HWaOvfCt^dW;O^IBH)VL;4yI>`V9h)&IF3|I&ZLLa4uywIB#$uAX9aFk=eQK zx$SIdHpIkij5tH3*lSp!gQ9A*{ssW8ao5aXBTcnv4guZ3K-m-%ceI!=wQH)^v=g;! zI@Zh&P@B9FnXJuQ>#`9SEv!f77a%2_+)5mAqgBLw%eJj`ir_d6*~wc)MMm;A5F*5T zL@RSt_%PfUK^y@!?#rZuyRlXjHb~1pL0~a)v(Yg=XrQo^3y-w`+mr1)mgYRLqOVFW8$1P+SITet(dl{<7`->iFf5slqKJ<^8a4draaorwTJuf+dV zanX)Jek~ep3r8@2cBR+nH>tq z16nfJQ@3m4EC#;vV<50j?#IyJ61Zl|{R^lEmiy0?`!PI__rkeB?!O4m`{2A(?njp= z?}u}b-2ZOsoaKJ`QG7oR?*sJXYxq7B;OR^X^5h+^ykokt3{N`)1qM$)Zh49ZoXyh? z`2fM(>B>6+!3y`5h*4_FvTc{a=}`3Zu#*Om9qFjh3oC&q-CEr$r^K3Cq?YOH9O zp)p}PXQ~Gy9mNbs;;|?Jc$ z@LVGgY=QH$aPE}{&~uRZ9FXtDcYi=mx~ZXh@&Q*qkTe$aqKdQ6Ap1ck8$x5r){$(D zQ}YHr4>ZUJXsUr)Eh&*6d62RgcI9xLv6xR2j5ZB(syoc7gPi4rbbIvkwuA8Tu&mpX zh$l{Jd&Bi|xJgqx+$o1KGDqVZK3fjsxs13syipEgv`X9?evcfMx4;ed4Wp3_OFT*X zWt$@(qOv{g%7?3s6<}XRSssdHpHG`%-@`TXVf4Fx7IWq2D2qd`JOpWFi`j=cKL}b+ zm|dUaEMgJt5*VZDhKWG{@!-%5d5Ah3)YzeBz``tR9_H!ILZNxYD)E3 zoqP;hRek}W7`mY``B~1FhbYU(UHLfVkS#8ieiY5f@{mT>1GW%;BlpG3W|6{wetEFa-4GaIX) zo2i#4tL2lydRZhNr7VuP@<`HHTq@gGwL-IMZEm=fIE0VFjM-SfNKp_;=GJc*8fZZ^ zjrB-_Jko*`p9VeM^2ll2SdZWbrZwajVQ-d4@N7zr^~ja-$R0S+R*$?#9+B@4RDU1Q z>dB{YHU`ztR)BdKC3!58c|K)^c~8~Lr|_aLU&2n4k5d*;yYlIJV+FFvkg&%ivmgd) zKwaXelk(}H2=vRtl*Lh39z`kG;`-6rAR~*zoJFKI@bfY4=4ibG^ruw-e>TIv>dIFE&lbT$Xv0%0;ViNzDtN?3&)_WXX#Cd!twp}dlPmJodGghP zKub7>rdQ-IaTKWCSeh|`DHfaIDW+IZ0*|Ix_)RhAZEIE@jK0v`ac_9$A;rI{f4rYqlsf?~^{R0L3R zO(t2rzGfeR{LYoX1BcjR5Sp?Hj=uKsldBL>Q#L~W1CmzB-(d>gSD)v}rwI5hSH6Xc zW{ZF^_mAlnp&u+VdX1;J65@ej>puz<97Xqs`z*MAKN3d>#;|Wy%eU&`d>YO+`PNL` zyS%kPzO^(!(D`x{1gQj0ku@7jvx_l<)ra(>Mjmun6!X{8a*E2sNw4X~GRzNZi!ql} zAPDQ^w+W@7L=}`9%hE&>M}g@RR98e-xBh$~{|Nw-%GIP+V;M4nG9bkHqMXu;^h_WL zHLbYmr?U(26zQqLB2`#pthj?yji{^al^W5_(^}nP9#3m6CJ;NVg~8f|0H{@kSZg(|$!RxEPgAiqb%yRLF; zjTIO3XyQm$>S7Xg6jOdr@X!qhe6x57n0Lr$38vIlrKnN12nKA($6s(+Nbe%huqfKI z3_C&CrXjy?=7us?W8@F4-bMaqdWb538x1&Dk8EeC(pq4CAI@e~3Q@iUt{zp&<6TvX zA2i9qlVY?RMYLCRcJ27a)`{Lp=nej4?Oe~yU&^XOs(_}1$){lOA{mEy{j~L!8btG*qp}Mq&0~0Qy^&?g5DlFh? zOQVVTtU0aNU2cGA5+q}=3Xm=G$AnVns=6v;85FI5EsFfHg~=WQ0cNZG3BlC6svg42 zRy52{#)R1>e@ZY(S0w?%7QtjM%?3&car`NR<_X&Z#v}NFB~s`fh<d8%a~P(|;g5u|E$RcpJk zG-CoINSom)Mvy4MP8va~HdnRHFjl$*BG_siG0qXBYO7Y*!il9i)z+ih{1GHFyNriw zs@+xXXyt5a(uE$XS?L;Us0Nr_+`o1dsSeQ07Iv`c{?%Vy5{(fJjn#2dEa0wo3Dl3@ z)#h_o+fl7LK)F2OsaZ8@Rx6xe^wjJcH5<+?p6aYoo!#*Ku&26eR2MwAdaAodbz^#L zwx@b(RF6OL1Nh73i^SYsSM|;^R$MHgzH}is`6ae5eNiiNAr@w7HNadUUm}=!uA0|q zECZwa2Mq(VUa~NLw}1j_4GWmvI|*gJtLCFUv87QoQvw7z;uQM@0EYX+0JgwY3p$Nu zNYc9(EJLRT$B=fsu)(Hjped&by!0FbM><5=XXMGz^r3`k?3NJ5OU z`2Zl-Y$HngT-8@;ECR`)scqr5@qUKfihAs=ELu zeXCX923FI37puO@0+o3!tLc7M^+QdwWlF8pv}N5GY8s{9!)h8Y;W!-krcr_vtLde# zS_+lNR=Na6Os_CWGYN=M!OMBE(Uri&k8?>5U=Bj0AQ*3F{jhfauVVFC{6E$FN zlrK}OTJEal&|7R7n66OMlrP(jL0DSI7}NpgCi!!MIonldgBrFBOju0i&#n5)ej)+P zyX7wk<{Vd@lQfor(PLG=P`|J+$tY_6il0#k~T$JNM^p^-8P=hOS1iyyhRcbKDQ!YB@!L4d= zk1Ye}xS8AD`K~%2ZI7+ESj6=D`sIo;ge95e4PYvovYS?v1}O_Eyor{zHV`{<(P18;SO)TtJb4Auw`I)HAYyN z%Pk77#mQ(?gz{ebYoca@t2UrHuw`KKxp7(;`D=^g&v2re^`L@qZk4|wob9gK4szJa zgJ$@x0890*VG?cZ2V%L&({h8YL7{y?NP%trwb%|Ck}FQ4w*b-l<%4JeD~$Z3OnxS` z?HSvD)b<*+y#>w>!r7{}cjpkM4Z^~7v24m4IN{FE`u@a24O!S*2voC^i zyh)rGmTFX~S(;&~*(xwHiIP`D2ZM?7DkY_g4wi2rT;7WB zP*8MklYbyS4!LRwT9B;>J{pbAdfjJCh-JCCG&EBUVV4zgX=sreTA{f#bfy~0#RhO` z=mIsAOC0_K!Q0f(J9CutKM{PH8oDYv7+e~fmxX{~OMg>fnYPr2G$pH>rbH z=Lmiq!F$xfeL*@usG##aHR7s~T4RN3GgNnUVhSB}bX(95d|b9>OfhDtRoena>eL7+ zhZD$bwi=;o#nHT{Vh&Wh)PBQyCqTuT&z~m%vnJtyZkbT-*wELeLwd zZEBQ60bCoMuSN$n*G8A9Q7@W!aBXz88r>EhN;3_km#ER*(ZS%_=v8WTZ*(ZQHu^3# zDrIyqv29e|g71fde7jv?1=CZU#a3L*jR~SV8xHcPCLmgy`YtA9(vo?H$|scP zT=iU+u`oJ9zXBxc#G{cWB5JpK4x_m=(w%A&A-&+L7ix`_mlqGpcp~^CFZg3Z@JD{| zM?9X0C-4tD4~K!{iTp$&lO`X^Cd_5iI8aRnadqm2`XKFhsY0UtgsV<~cDC|j1r{dZ z;5EI$A0Vb6F_Dc-TKq)TtApJU^m}D9=}1^~yqHkyPj-rF0-PN+eV>w@$b$rc@h}+edPUQVaA?X;fu+O= zxPgif)?pW!2BZfRtX5)SO*rN}9i@m9m8&TZon8zau=4|uQ34Wrj#%wrBu1>GY1e7z zYA;y!*d2z)6bY6+QFk8u;82|P0S!!rWe@$vBL;shdx$m69-61kch)*yPjOETGPUKv z(FA0));XVG^$|KG!3S%!Q313@YpR3tD=^>4{0f}S4j-`-bnOlP`EVz(F1l+)l)#}l z=GkV;Onu6Z>%|Z7RS^TheGJcr z()L4yW}S)Kp;N=sXMaTfPVECr`{)70W!e{(iPvzs_JL)58qseNC9sT79Ah`~fn|JL z41&l9mi4(t`&>gC@Ngs!LsPIJ-}=&?hwuR?^nZi^OC#t<`5UzF4Z--L8SR8lV^D4C zW=V2DC%)+$DF+jsn;bq|L?O=zIMp<7-PCpMCJO>r z<=(nk>*kP;Xi*ia!dsVES46*%1dsTRs`SVN5(B4y(i-o zCx!?Udzn;;R5&&qU@gRhGpyxG3))Nln8JC~1o^be{L)H@x-}95! z6At5vLmJj|n3QhL^DGbAXb);mn2lYv@}Lbki2k0^6HNArm~Q!yjrdRqp<8~=27Hb* z1rR8ljygPS10D{g=)nO2!<^3tQqXMDAsYaPE+Ok@SB}_#kw6OCw*QC?cqEj^9NaKx z@_00(Tv=P;V_=A{JQmo!;kq5>j{UA$^9&p9(S~S z%rDN}CA_#7g;%f_C2yZC{#FI@!~6X~B#3Og?3kK9%648T%baZ7>`fSxX|1HG$59 zO-7H)Z|k@YIc(foj4FgEM>mUZI7WvE(?f#E(1Y}i>;We`STVugIojbTCI|XJjPH5y zoZg|A*1Jb-kB1!ujtp(R(@LEp=#I(X>X$3^cg()NfbQnh)OX<#R&N;$Cl2aMJgQrzO@St(TN|o_TN`JJMPAxcmNCRDL}k-AQosuxc^m@Hdu#A69>^tPLLTVp zObfWbFD5Nz#}P@hAJH-Sl->@b<(tB_e4nuUYr=`+*$*Q?!X%g8Vv`ZszV8H4FaxBw z=7gg#rDzU%TTezmWJB^05$=^NP+iX3?oErHj; z@sc=5uxSZ-wk2R{lb5ywy7(lw1nOQ$$S`}!tJfJ3bW`xx$kP%?sp&!0QT3i$Q=ry> zIDhm`fgx3%^l(dCtV?JAYS-Lrn?Si6FG@7}zIL)PDSM#P? zwP_}~v2AEmhuYLb?iRS`s7?Mv>}r6=k*$0KRBkI)+p5GAO{EZnf+q`F?PLLV*{~Xg zg-@~k4Rh!XNB*V&a~zZG1SZXX(&JsrIG4>Q@syNRi2AXZO&YJiY4dnf_vj(eQ!O3; z-X{J%9yb4Mi?DyNx%?qA7t%IpOlpeET6IP®JmfS{wNOqm=gR^68wP~`@%#KjCi6r zo|qC(lq4`-wt2vjhx_qMV#Uh4Uuh-NJ=M#r$sJY44r*8*0E2ANGzpH)M47 zHYNuPv2l!GXhAL?iin~@QA4*HFVcrRmk`SXNi?FsqrPzPQULu-1eJiU0>ds5Py0=< zsndYK(8x4CgD%25f@2uS2vP9J;;lDN{o$lOyibrxo&th#F=))e`kg3v;-(8PsOtUM z2hF=Wal1D{qSFx}zy|9;GrdHVZ9_^a{XjLw1XMiKKH^f5OAUqeGQ$k71bM~EqnJ*9 z+P`A#;L1f2T(_xC4*6 zA2qGpnk^&;^0_Vf^!8*=y1zd+nB0^}=7;)|+5Y6Ri`OQ%=Xx`3p^$&N#d`H}qLrG9 zJRjA&EfgK4a8p3@5+yYvU17g*F5*eVJMd=dIF2-yoB!-LjUwI3AQV|4v*=*@1iB?w7U%WPtXKT8Y&v=9p|wOWU2l~K+y|Z} z`oREGoZR0vdJYo$_0x3M2spcS_XuEjbE7_NzZu;epJmX0f+c{cKFp{@3SmoYO&+fS zMV&*d`cr5_e{;b==(o@&;(?lA%MR0fKk!<}mxHeTtylYUKD^`Zs9W)@xf9H^oFB;4 zV?;*WW8?w=W>y*b5Q@n`UH-Vy5;F49B534m0r;f!s3!+PrXg?b6+y4LH+$|afB*a6 z6`xk{IlY*%g^XMn)cF?RN~=%>WHWtH&!H5h8`R9Ldq&XpprV=Pjb|a!Vz^T=5R9P4 z?q;I+EHBN1j-WW`h)Mm%%s~DOFfSxPcfAoXQ`LwhTy9U;U8q6yZ;2d)_d~y4ntd{P zC2QDImKpil^4pwZ8f)%^dbQ@Z{C6DOd7ADjG@<2~XR|(pme&)1b8&iMI-`MuYzjAD z#amsqEm{pST$#U=%Wec8X4azTl2X8x`5wlDZ8<(Z%cPr84m2HQj*E5ysPU^(ThG@A zx%5DdKlzp23qEcR!_?eCZ>!gvn+8rO(x~5LOzOGfiYpX_%N&Mi?iARy6qAf*eUK#% z)ml`(VLwwrTV+(Jz#Kh=I{I_YztRwc>_5>JfRPh7ucWTUrx9ay^0MSL!rYV2xFUxM@gL;$C;u zlv+f+^7>mMg>Kmb!kT6m6j}2(joU9i%T1rb8=RH=_ptn|=sQ{VfLS7{-xczefI-9C zp0y-D%aYvfQj&Y3ZY8*qKZRCe!QD!5CI2|V4VMz!M7>!1miUkxO;b^B^esZ2qPDtQ z{knm^HkF%(ZS68Wg)V8p>v5aI>#@3kM?YW$`#-^)>CkbxY{w!%Gw^Kh$PfPn{2YCl zBPuh>wqc7c73tx^6g@{2GtjfHyWsqw4CuPh3f?1d6>dE@lZ#>Z3}3{8!sDnT!aUldjeO79VDy_6#%C z&Ws4EWU^-3IWaB&E2m1_CIMOi9{e|vR3Bz8mOBm`VKeM4%tZl(c?e)?^YLn?_f*Qr zbq57_v-?Cj9?Ihl!;4lTw;GJSS!=V?T&xJVvzRw;>O6X}U8H2-QgKj%p&nBHiakqi zAqva~#!(Y(u2d+i7{XQ3Q586-5#l&`**1~4zXIPxf@cOs^Ia9vT#1@Q;RsUEul?Mw zMK@l$0&mo|l5SjX&hr!GNum3-_>B|>W`Ao7kF*?-RbXA{Ua(&Q&QPkdS&Fqj-qd3BjwdTa}b$3kZ4n`ol`=<&z z&UHd!7hB&FL@L{-(12p8P$>I6^SCm*3jc{>b$6+P%A}s6q$WCUo4>5&hO4sL+(WyM zTV5D5PxOcu_@A>JLkxQoJQZW)XNyQ9k%B2Q@)VbCvaZ5wCl(jx$x24~$CdYWB`;j9 zC9grWn3ie)TC>X2Ub|AoM9ezkQM6zLr=kVq~x;wm0OEXUzd7Xg{Cw~>pcUXqE z+$v;kbxmr~YHPZaye8?^hk3xONnOND;h0-mT{SJ9B=~f6gFkvsOY@qE40$SmIq`%s z;(rxi$%nq|807KGuaNH@F3?AuVa3bMFbPjL;wRb#&1T5AM!89_}6Q)|GBC(1l&X1nzgmk%FSfsb2c z+bChX;hvi8ZqeL+mr?L=|B=oV^cJudGjxyPO08uh=8h!eO~9ji(`lyFkqnRY@8k3$ zv$=v@)Z8h(y7HI|SC1jdUn!qHj0$m^Rp6-)Lqye{9=Zc{N4rH`g(|5MPdHQSxE^r- zE$-Z99L2(@B?WK9J3HieAum>Xh0W|0DK0$t- zQ?Gzr{HN!x1ij3o;R<;k4LNuo4e>CQ^o(HD$y3S^$cQ&D@rMw@%+gxpCjmhZnE!JQ ztdn1Nti3INipRG6_$(J;%pr6`>;W)S>;bS5r>|D*sG1c6SwADr z#1e1IU+t6!dAK6HUg3H{uJ=1>Cs@C8ZJhOcTfW$H!&4*8f7NpvY-ODWLMZDLetAZk z_=QEssq*%WoGx!;WV*b~5iG2sq_+GIOJry=Y~4UcA;8|3gKNuw(}^RU88%<54>QAx zI~|~5S-8F|+R4_J1$OGo`xX91)%Urr@I-6<*2ak5;xW)a{TPf;23NS*kJ-SAylG;V zU9!VP1U+4C>j|d8dP?yN3Yx)hPfZF2&@$2@NY9Ns@lK(YT1K$EgPyRD!VyOebNOkkWtyS8BL4iE-c!dMw~&kR0; z@llN#ykWHw9Q~eFuP4=wSc~Vz>%cD%_Q2qGAqIo@$fj0McNwNPk-)mfC_n({BRs$H=}|$Vl=cs5|Zsn=@zV`C6#lCHskP><^@Rz}T1SW%i!bUhqg| zxC&>6&A2D3q>dY9xuQmDGf0k`m+S3Hv}_7{CP<*?o1D_0fv;B@EEl6z_SsIY$+v*i zok%27AAnQ`Q3Wlv1?84V88^+DEm0Fw(FLGYQ?95fP9g4v?!rbQ>XrHw(D#gHGwzF; zt!G5dxIgN*$f7JVyBmUWnkfqhWWg7^gpMS!sY*H8mzi zwAMHCH$%q!F&1g2e9Xi&%!(z=q?eEnvPShG9ae*BMifg| zR|F6*TjQS6O@5yAR3(06!k`fuG(nu3gLB->7qd} z2u6d^KImZ0&yd2E~t>#Dt#Nwf7NZC8j?LUY*U;vHU zpB-E|472_eTqD*iIrt)f&Hb}cY(O{i{|#ZBmI3NGW861sz z3J;l`V0PcMy&cbR+XX@5{mC;PU{!6AW_%>KK^?JliS! zE^}|j7>wrDny+-_=c7p3^=dWsVWGoVu%=dKQ>WG_l&sM>KO2!Bd)>TtIu9@gY|H^z z_WTO)$=!ftJL@y(h{~l%_S^{4{KnMg6nM0xZUU4VMF1O+)}?c5MJAMaP-L^`32XFW zRzq$K#4gN=(1UnsfHh4y9yTucw){$nqS_;moiON{$E`X1@{F|eD}^=^+W4#>4T2XY z7^nx6)UKBWB}`R5;I+70E^Jw?4>J={Xa3*7yjZnbS&qRkCQ^4mJ$}7b3UV1Kn6f{0 zw-p#;3t<$Kn)OLaj)cfjgKr56!S&gz1X%7u+%Dcgyv4wOdW+7paI_y+0DH3{5xVI? zX%y_e?n6Tafs@z zVJtjS_aM2|?RIrHqlC#fE|QXX&k#c!uj{d2tUkpV`RAbiX4L`FoBo9}o@?YjigzIO zd9XKS=cIL-kw3-;c`p*=3tZ5vmwbAQP|HI)Yzbx zo7#_v>i1mOsFD%igbpwPY&FXLiFE_xmA}H5AkOGnQWxm`KG30k7F%@-$vBln-CU{r zk>q!!(3JjwEA;?gL09UNc!gZ4PvI4JyHcO#x5t(G48O5}LW}uRpJf2umYHHIgApR? zi5gK86+-7jXGOVi9bE3&QZD9E9N}*CFz~#`4_CtJ=U8$XJf|WU0{R2vT)EGIz;6_u zV1}T7RMDSXMn6sH8RyEO6`1}T7X4$2zN3u(6rpFFEBCL8{t(kY21z=Bh1D(LmuF-t zzcAfgCU4Kka(<^CM;`7otnY8(Jze-Q4f?O$flMU$@U#RM!kJP_VIle?VJn_XkQFJ! zL~blkrOaV2vR3Wy|vH9_eG#v+jIq>fw8%i`!Zg&?X~F2BBc3%4pR_8 zYnxlX+wvW~u7pFX1(N6q#o9_p2r;j*r(pcJ5kg`b5=~%Q%na++FV|RZu7cijjY2MW zTPS|Bm%xmSTD&cj#aATo31DKOWu+wozYY#=f}laKA8|5ITX-jbM8@)~RX47OELsFC zF_XG*69plF_Q;7#_Djj`+U8p2r?{ceAACHQmcLRh+uPvWhD94)!C82&&yfl?iV+9t zJjNDnlyQ!Y{=l+1%SO*Hqn{==!Z^o9pR(vJ8|^BiS2oHx$3~xK`k%l?F8~%cdLh3& zBP;m@8(k%D&&WmcHbySycga}er(dDI(?t%Z8E30OB(_v7+=th~_i^wb0+=foW}E9X zkU(MdVJ;Q}0t->xPf>;|lGG|eh8a+XyI5C1iQzW3pK8jI&th~M8+Z)1ER`^&4lv`d zw0sE`B{*SWo3RvRB_xDc_7%t5F=w1$$BaA~J04$ZS#j^mj!#tbcsu4s6u&+Nt-*h` z`la!u5$q2%az@~*P+)VjOT0oOe`PKk6P`!=jjm>v#CCKEVz8q%{PK*fc4QLFfY4I#(M(g>j&23bLUtw#F{H5_NnyiWi0o4b_3^)Uv0A;Pu1Dr@>JTRFDIF`s6;3Ppf*v%`f>r{?}5W_Q!Z(q(fp?w*7GVMFQ z%(BAXRr{W(sjrvV#zSQL4W_AV8=G6Y7v2Oq_zht{%-l@=KL#OToqc8WYEI2KXHNY$rnl=l zN7c1u z235VVcX5Kfh$!oBNb;VLF2Qs=ZMtu={b6q-gl;QynE-5%{|dECcb!dlz@m#zpqtEe zyKK6B$K}_+bi0KPy0qH%dV!s~GHBHmG>56n+w%xX)Zy@y!{9>YRms0XYa6V-u@k=jy}mG^i`BP0#RUfH}cCf z0#7MEcU0bN1;YZ?!245&eQyRLvAfd*e~cw^d7Yd?`| zl9ho0l>r7P0FUAU4ACOCDN>^?evWn$j1bv_HfLDKw-BIMmC6F7S|KSmyF@Z8At8*c z`QC?7hf`5+-s|FQlS}rxJPYC6(DIBwQRB3>Ou{a`-ZH&{U=xKYlcK_4KUlU2ruM)l zQ+inKfj#}s;)G!@ykBqdPMEb9#tklGegrk*KhZb@(KjSElWBeR%@Br^;5d-h%_~jmX zUg67mGqQv?lRCUPtupT=YcE)$@#!@Dv6=3i+cvAMeOCMIMU3%KAHpZjBsvA2j1Q{r znTq(@!F;xV3kEr&hpr@A<_GT5we+W6br0&4^DgaL#)%o+`>96SlD^y~hVh5~sa-zx zzJRX^z+bg?_93xXLMBGoKg1JZM z)Fb*Mx}ScG(4b?WF=&#DIV^N>yhGxvBwQ!quxqo+pj(mZrw3e|>j#1#aZ9-f{qzmb zBYJ^84<}~OJcB9UHn^0l%t!Q_>0SrTrkFg+M$&UeL_^S-#$E5Y0vs@>HF zEvsgl_apSv>oq^G@ze5J=CHk%Q-^Cg?`;VE^e?qXQ6trM_tY`wW0T$0e)^<@@2}_9 zf2*ElyRd=l``t#i7S<>K_2BU+>q-*sL;V%BAJ9STz7HA_(Bpu7uug-F_L@EJi0IaX?^34;#5(q%C!jx|gln~%u|pr?Q!juD zfa>t|8aohxJ_x7*95I&$^jSbn7^N_CXd?O{AP>!?+et&(bJ}wnLm!sQjvMt3-GjSc z2g!44jQF#^UqMX~x*rfMiykBopl1QaXdXQz(C-1&z~4P0T>gv}_s}AGRG`0D(B}nm zySRi!^skby3f*@yokd>~s1;BnEvByugag4ejn1Yg1bQ6MX><;KL!f5?HPg9tNT62% zwNVGYC$ZEzW-N246Fr{gtN}EQR?rUwIt9>a@HbBhgwL7aay~sR(Aj|6;8&gzE*Aju z(*^VsNxKx#e4PD#UebCc?GpN>K)m&HCS6X)gz{FQ+<^OtEX!Sh&Y`R6Wl4Kb(l(*D zaN6U5mcXK3m$WA(Z7cncK)(Pqjk5Gtf&KvKG@N*TOQ5#_HPbfwn?O}Cw>I|H8rOCz zp!u|&bb;Cg>L-stX9Jo>17r$x5unp(2l)ir2&ftNJOTm@0BVB=2njR>Xa&BtR|&+Y z3ntSLMFskZKszZR&;x)jpzEksAU+N}nRd}+fqoAtjFa;X0{u6j`E)%ls{X*T#y^}Fcb<4p66w;6FIgQEOE=p10i5={C21WR>mm?=M&*bDrp63pk) zT256mbk}|@?4rAXf&Z=j9DMf!_1Cx!`gHx55LXx#J{ZD*DT+0G7^zoxyl_pg&Y|Yrb85C-fi3S#0L!uIA7u z;Zo3#)Jy{(yDhlg57sQi$ohC=C&KkpOIwOlpQyPN_>EIPh_D!6jqwKafJsf}kfzaA zfo`Vx<_)m50Sj7gjse;w(32GL-UUegJsI5KeGE_^#xTX@99ZhT0zFBum@i_qe%^sz z!{|S08dE+=Ip14)6-~FG13ukVMXd_*e$M9ww9tYM`NDuYEa+DAF0G2Lu%H)wHvsCk zpg#)Kry#hR1oG{2pvkTX?XjR{|1?*O_E}H{cSB-yk3cSHVuzNX{Q}j{DS`7`33^DN zTWD$EKCOnnY^ALYWL!0L$V%%*S}i?gLE8e40eV58o4rp2#sIw`&YJ`8R|lKjlWF>?HZ;#Yh0Yg||w=p_rvME+o&PkopUa(Q1ib?-&A&w@rH3Gc<$;^;~GM&x4eYT7DGr6=j% ztFANG&`}GT96jB)mKM)cTxLb@)7H{D3tB8tp9P&S&>joAOrU!$XtO|%ThPwv4dC)K z3wp1ly{aJZ6OtBelk&XW7$ajwgy+2a#T~E_zDa!vB zJz{R44h!O5wShJWbhEcAHt5?xy97Gyn;d%#Y5PY@pWJ%!O_Ku&6)}0XriRO3FBnx7l?V_Xwv9H@jtyVs6m0h&Z zfhN0l(=rR?d+$B;f(5bn-a{{0l&_etfs%N08ST!Nbvt=2i0gMdVS*xQT)*3? zUO{4Yw-evTRyH`<^-na{g1CNn&@v0+`rSe2D@f|MmsVO(O=7oyFZEeaYvKlNFAZAI zS&5sFwo5@W#_gp$1Y*4$K-yDQ8kcuByA#y2b5)I= zON=3Hxm^xf)T20u@a zTTrs5I`l=FzCcmVthqGw4O(eI%WG~4JxLoZ=+c@8LO-NF3))iih0u>^)PioQIUIVL z_F2&9YO2EjMvq$1lQrjtpP{ELC|>)y@Q>*U-q?|zGq38Wv_W>K4*OoIy-WKU^(si4 zKWTB*FW_Dp&<{4?5PLC;M(V*Z@&wV=s$JG7tEehZpcx1{RlbkKsnShut4d3w`= zJd+n!{X2QF14eXMJAd-cfFcU=eQWams$Wvdg6gO2uX=$xEXtlKpQ`#5trUn`^J`VV zrapmI=#SR_s_GcMYC+$s-=X~ny=g(;tG^FWJ$Bl#+R~q^f4S;EXu1WxT>nQva|Pnj zSBv}yEwj>IF$0koX+ufcOVsD2#UsBZKFErFGUS^T`5oqy-wPy*niVQPTGyJ|DmUxv=7DJq!*mD*JFR7w*=z$n;QQswVuPJ zbNgKv|2w^9LEL_%-E*!=I>E5}v@gWxYr&N)wUTUsHeDdDLprfQTP%>O z!y>KMNqaharZ(uL{W^M(mmfY<&*tOSI_%u`F8?OSOeg+74}**5RaG6J4gAFOaIya;>|Ba=Es(gmSqy zP(ryvyRC$Bh4ul5awM@ryQhTm0`1Wf$_unFJCxT%FVGH^P+q7#UqX4IcGRH^L@v~R zUqZQ3!?qm$l(nwZA_6JRuhOPFY2S@pq|J5GzL~gK8+6ikXlu0_oU~^WYqi@1Qkqz& z?H7pq*#Awe)1DFNN#gm-dhMtM@!V#;_9qKEV=AW+mNPs*>zMi&AYR-s#B-wcTEv2Q zzO-JOB#;Xw>;RM$i0g1obiI}mNXc@g)=@%vrFOnU8LqxkTUSDPmDX26d6hQkP(G8m zN*gVq+@Ref5ZCXF>J8eLElT!-8@1lmEVc5&-P(W!ai8wiK5aql2fMXLEr|VKw{}P% z=6OMNxArG1jd^CY-(OPXxmmk+je?lxW{t0k+Ovzz+Vd8~JU44^2*g@?CA3)!u2qz; zm`_!2)m96n()zTmPTIpdf34H7Ys%l?aL*L+=e!&@eEenZ8N@ZZ0CAlz70d>NZrXy- z&c&(NZxlSIdaTrhpK0n5>NGLFAi(&u5o*|d<y2rHxY&chg*i9-&mJHczIsHN%u1p;SC4QkG*DMT)X9pYqgF&O@NA#98H1 zwJYT?u`Np5=+Dt&xo;xwlKR>;I(aQAEBZ-{IeZbJTiU{d9dFj^w-MU*lZ-PBb9ReX zJ#-o{hGj*I5Z97-H=v_TG!Km6meywyktNmf(7Q z6QLWs^eiD;qlPaCm2LIEL4z->pfSZhm8~A1UfDL=v)yM)wS5J?-g_vG(4cJyP2udN zA;gbQ{}rJ>G=ctC!06a*<{JG0aW{6GnSZ>d$nBlAir?BoF1z%Tr$4bii~dT(E;sW( zDB%+&;hD88ziQbR5!dMHNgUo($N2XkbkS`H;S47;#)VL&;#koXj;rts62D8hJy6fN zK8;YLuS>{y_^}2KOXCkpi^qWH?@C3QHehr*OYlo1*Rv8T8kS1K_YMwkY~=7Z3GbBf zZVB&^@Z%ERFX3k-d_+Q3uJRR+1LMa2Ket+`%6Q+Wn*Sit|6J6P1h0(usYhE#W`Pr&L;HjlUNi{t=;099LHA7K_#B z4M|n@R+?AY&tD~%Zz|`iMd+sK2yI(BagSallxs`qxo7Fp%H=lCeN7h|aN#RbWgFw3 zsN-7_m#$hlgSdT zElWH{jA|b?|5>Zk7(W9$=l5!}iFZzC(@)G#YE9ZJ=4X-my7?Hwx6Cghba}rHKD-Oe zd7so~An$LqsBk_)Z+RE#UBc}WghTpMg83OzKcPQ_FI5lgP1?Wt?$hQCCOq{bPg=yWaqZXFM|y?$F+#zlEOhM5SIci1*BA5P$i2OQenJ%fcDM zja<)of(Rcm7K;qGYy9P82Jsh@COuvC7o$nPwJKpIw2xM`BYd!Gk-kX(Zq?c54EeIq zslQ%zli8(6hrAjJ(e^9ol|akLpiFF88)-zlijC z=V~uS9z^)Z$m8Bl{ln&Wy))>~k^8j88k*R*UayMAeQEuk=uDpv-?tt^i@X#)%ePEY z-=Irki@@!g*bTlJ@(pH@zBP8cZ>31PQly#>TPhpWtzI75mBJn|qe+2dYV6abe4N8b_R?y@ggs+6|kgyYayWMv{f2(GF_<(NI zW+mJm_EDhr2C=IGz-zBKt6&*NHn$}^rW`o@$cRhQ6D zr|i(W=$F{L?4mcP>_ixU7j8|wE1v#tIvrI;$Q>Y#@8D@75N$J_1(w| zn!hm+eF@>x=&O=zu5ef^VNm;0aFHI=4hILKL2YT{5W-cB*CV{V@g{`n#ytqPHQtVJ zsBv%9E%eJI?=rFEl@ebm@pTekC-Dsue?#oBSK>#suQbk%`&>V5yia>ed!ccWo+bW{ z6xDw^Wof)mXa*&`LBc%}-XY;W3GbEAt@AhdWm5N`&h~at@Cl_oo$LFMVCn@^56sf& zY~t@WvuSDkliGBhC27@JhR20+uFl`r=j!~eeX-8g{)E(Gna-BESm!>zOv-vf=vNB; zN}>1CBucxz_$`nvdK{-_s~a?dOyy}aCo71ru%;2FLfUj{EKvz z_OI?21^+Vr6qGOHR1}9V(wXp1DrCH-G2W$JrD-0Q#(aDl<9&kn31yQNGQLUhGlXV_ z6=!apLenYuPQiC!hhfOwC73S3q=hCen6zMeG_F?`l()FEg3k(mOen_$GbWguh4OY# z{>gp2;BOcF{eu6Dl=T_Ge@5`%7X0^x^Y;b+eZjw|-S66>zbL6M3%8dg^<_zQ={LKf z4V|T0itx>wlmtT!#d6NHE_9&HExpf$wv@C~F~J-V%mKk15X@o092U%B!DyyfvdJZC zCYRVGm`*EXe5c^Y1T!X-V}dy#m;-`2Aeh5~IV_mNf;lFbV}dy*7|kmsdZk1!m+11c zPSS!;3qCFQF~N)pW=t?Q3*`a99}xTj!QU_V!-797_``xfCYWP_IVKp*C#CzObf45$ zFinDK63hX?91zR_!5kLMVZj_0%rU_n6U;HejQN@Kn4dY1`I++p!5k3G0l^#=%wfSC z7EDusb2SAxS5tsTC=W__NbrXQe?%}ZNk}z6bnlF~Yov4u4@!8nhD$tJ!zE6y<4NDHOow2W31(COql%`1>GwBCSrR`a@uLzyD)Ie|LenTT5^OrLCG`fiDLOMJh?_e=b! z#E(imIZf!Ni3}1SmH1JKAC-8=DI(`7OtW9&`z21(MYic8o5VXLJ}U81i61(ZX%3yr zG|AJXtka|{iH}OW`*g;4pDuWbk4ik568e<_FCCOuzSh@3Y=c-$lMp`2OxI_+Rty3;ZH*fAEh%Exa%Mc6dkC^HrBe z9**1{jmNUFXJhN)H^;vg|6*da`f#-it9Lin@gD3YnmC#5#oFA5+Y5gDI$;2-^B`uS zA>4WhTTN38{OcMz#b>SE7B>Ze} zvzzGiL8km&kSQl({t{f}!45)bEy7@kDcdv-t0mqN;#_kjR3**|Fi%x(S7<$QtqWa) z@VzmnyxaS)*mZp%#xguC;Y2xAuHA9oJwI`c6y?M5$)NmZocaGCoHlEcDz2Tb zovC$cE&BEP2ld^qPr4p)eb4i(=l#Y%HC#MJ7|)&12U zuYRQZtJS}#c8~IxyVAc`4c=EP{%N>(!GADd=Pydtur%IhEB^KA=fJMjA36vBLN0Y& z%e!!dR^+BPa^XisC*KIO3^;rA@{&1y4Pm20V>;rs7HBX~HuN z&nbAO<2e=2X?RY@lfp9tPcxntJgsLOhG` zoQdZwJd5$1jprOZ=i=$W(}`yZo~3w};aQGn1)lTp@ZSyioi48L4P-R3Zf+ni_C*Pn zr|>sg_#1&o_Xj@J$hy8!c9{t_s8@6TTj-}Xoc|X3Mh(;5LWlTb65iipwc;1bzfr?< zcL2|HcL2|Hci{9q)7?Qwgl@0JZ!h=(O>s@fHxc~OqPA4v8JglVLsNWaXo}AaP4Stb zDLyU8$K|zXiq95J)n|*Q>bXTz^~_rMtcA}4&vIooRnM%(yVpe9EPmU-kLBM6Ihbx6 zcTx>a39L2`y5JIm)=sKi_+UOg@H6=Vva?yV_9a?&=$t6&gXXR zmefi(5f>x_nf&1HE=V>3L8~%@TXU$pl~x34bsGOtWM(jvcM{7mQs|PQY#$nvP=>TB zt;+V~bA{aI!8X;VZA)|c41(o0~mMskA3al;ave@<( z^{^Q2k{=uzSc-qEa{9nHTRMlP+k)8UHGOko7tQ3R>zLC%a{--~L5rjZGremwJBBi7 z?Iq~~H_NKb_D!m$HuapD^DEcJGN2Vh{XN}t=+ge|pq*v*%(=8Oef@6mvx=NQa~`ee z?oVShaJlq#g_gS3QafQ-O?CWrBIP#PDN}*Zj{dyAY8}n`K-YbpuH5BQwq#30k|M#x2V8^*#s5z z^>TDBr>wA{g(Oj_e`aT0s#vHX zO3M_)I1Y1RNHD^ltz3;cb8I7B&_2_Sx3@2VZXt(&>1?>uPd3JDXXMRh^+=a6y40Tq&0<%nhGn_gPUzee&(aW5U zPi^e0D7Wca+M2U1jLpItq*#p%T7%m8>B3fauIYRRo~M7yPeE0X5l*M%@p=PkFpn9a#uUuE0T&^z&G@<6%{;jamK}y@BpKavhDY?VgHd-=)YLh`7 zR^7D{Gd2uZU4>h7yBMQd8V;wRs1%XYC(ClqrHvb< zemp_zOYdgeQtqdhJ(4&YhS>vJE(tS7+u_I@n0=6)L_Kg@BCeI!c2W+(IDBQkl8ddj z%+W1hQ!IH6CVJU?<`Q;+m>KkT_Fw{9nAk8@wTcN{qH_){oeRubRXDq`S^4mdyLOjn zRZYQdvXQ;H{FcvoLs|I0LILAo-)>ql)Ym5t#>O}@3YNX7H0-53%j??>2c%Xsf>a}q zM5RRw_K-{2!ty+__7c1}B2cuw5P=&jh~dyCn|Ipoa|M~tJ5?yi+`<~M(1p>f1~J^p z%8Gg>xZZp&H(0btHRdV_G0|8AUzHu~Sh#=+P#%lJlP}Sa#gLU+IXi|C%Y=9e!V^+V zrPJBIE}nL;$-oeMFr($Uf+`L!^13pZS&Qz=u>CytVI_f7LI~wqQ|AJ4QtvnyXg83^ z>@*v*wo}TRj#HfGI}a|;9=fa*B#&KaPM~?_DV1U$ZVh^(-(ngK${f4G%Br}8#A?P; z<+@yFK9AnnwY(q0NZwj?mdk*)&atbsn%DB0Ec804_Tv0SFiffH`553Y#!`KA8siBu zomC1aln*WnQUkF_U{S8f_F+UKdsJiA#qkVcsnJEo9hsgpA2ns?7+PP=l?ZzSSV=DB znMEmHGRmZ#(P|>kF?%v63*LMN3!i@JD@ZDtxih6@H_F#pLJLst4A*VVU?;USH3uRji|AbiQKl7N zvKw8|im%2D70R(8d(vmYOD|rfricQA_i{D-ixS|bOF)}~lUC$&+smg)jI}UauZq5i z6H5G%<-sq`!=TfB@Ee#}ZXe_dTFSDGLHPj7eOa3TT%N3r+s19fv~ekwCw-1fS-LgT zvuzz#Vs!Cl)eU-;?Ur_a9_!SOh$zDb9OYxf$C}#WeK{s38J@|@7K&uBfwh@Iwrm?@ z|K$LvE2lx^@pG7tISXcqN!aBIPw-MR!<{leBuBbpyvFGR<0Yc5aTrLZ_GKoxDR^9`C#k4YE`}eTQ;QZ*ZA|-Y%5mJK z$Fg&jIT{u!*gxY86ALS6BShm1b&6L_X-|Ml+Hy_$I;)c@Jq*}1k|QVc>U5t<%N8yk z8tiCqpI@=zur|in3JTSHWqd@`aV4qMsuY7{ySefGq=F~MAeZZty(9F743=m-&M5}= zsyE9sc;R+g4zmcA=y1)JOv071^I&VmP&};hyotu>xaFctw$|9Y`!U>O!s`^Ecra5o zY>SFl6UCJ{Il5JS!Pd~~TtPLnlU~*$Ru@%Gpcq@mJx&%2i;r8f58$-D1(yu6q`VRD z1+9(-%V>aA?4Pn#w-=p{orwa~(3MYgt=?;6MxChFF* zoo$`Ft~4hW0HE}Q2V*r}AkQMvNG0^o;vo~NveWwCocRJl33MfEtfVz%cw@BsF%_r?8vyI1DY zy*y@cWz^Uy^G(iN!OAP_1h-Ax;}u8G79>00VoL9x7vxeSufq_l{FB{t7wolW$^Lhn+6vE{w7{iJ*oNJfzTIkNUL0>RJK31dZ<#Hj>}*<{ z3KOmNIkYOh4aO%+DGRT9<;iNSOn}N(ya}J8-z~d$(T3wCQVMZghnj)Nz>0tVvP-%M zx=PowOkZXT*5?W_n>u@~-J<-v6F%MByAfSlbLU~7hy4twIu@H`j#EMjWXLTf-5oix5;I3 zv;wYstF;W{OX|}avYIpFZIe6=my^SrZFY}^ z<$IPjp5?$tLuDk=&F4f`KTqmYBSs5pDIH6l0sW6s7!iPg1II-I5>C3hA%D;UUN9S;Kjznj3 zbhboiaTK3+GFVCT09UywX%)J#mJla^kN4(Km@T;xZjoanZ z2y061Kqw;+$;&27T!u5BV#f1@{Q?mZQu9X%vU#&b)5dLBP0+^v?O=)HKKvKx#~GkL z{C6gfZ4Kk-N-HIas)lg}WCUkAhG{n5+quakv#+dT~x^JY^bbS)}#j zEJ+{c&s$I`EqW);r996^u72?5@+s7Yd0Y>8vdk1<$cmr!PCVBj|7PLBdAPRgaCT}y zxSonrHM3CXg*XL6CPR47zR1#a61C#mvEDOf8cYMzhqUX2ADw$CQd!TZLt@oRrvut7 z(k4-Nrrm`4^a0zCH|w(i8PcdnhO`+MA)Q<1_!_?yI$nmhMfNrJk|tD%X;B9%9oVNmU~j=Zu`f}RqbonJTGm0Qe~~jukeYS#ooodSZ}N^rQswn z{es~Tvv!2s*NXb=L7mx>6#i7u(Ag($SzG(dB^T?9`=w*i?eCPk3uP=rE^cd8Im-S^;4jX;+u#+b(v`eO`GCuKP}K$wST@YT1iijN5#& z+|dh9+$YwGjF*W9hY+Vl@03H?Z6|De%XR@Xq!&F2O)VDK4l0ot_v-FC$6dvOQ0|IRYe=ff`jtZwEpCHtU~^O(DR@7 zPMp_>1+pY;d!;3mjRRGsDH#8JTSS(Ph;gm3Qo`u4vuG0+j`vb*+e(wl53-FWLC;>A z^V{BsErWey5l2@K09WeqD)Y*q4y+yJ#g50B@nzgYrRCG;f7uPMDzFnwc^e~-;gm(Y z2qLqhii1c2T~al17do*$^kdTi^9L4O8N6!fGf{Xy`0$X!f|QrhTc-XqCZsM!&VH24 zCOCwyqz2+MaDcQDo~7Y|@QgC9HkKzb_JDXcrZY+K( z3LJfA7mJNtq^=d0!%FXzd^}y*1TGl*s+60ybxFAF3x_v4rWC~?`#>Ifly4r-Kvjv; zxOnzpGx2aWnSIjA%k5a|*O`uI25K}=R%16HZqwpF&E#gx!D{XK0tHIEO9M-#yeBK9 zbd12QfO*`P)R<^Db8)W0mZxTWY#w$m#jF8;o{#F?bH6iq;8V+8H*=i4U%Gz7Wp#6p z-fmRKLRu{0ee~RoH${K$KNIk5EjG_rjk~n5vm0XbLMm2`U;hH+RZy(jAy{6|sOngk zHym9RyQIFMz9D*PY<+d?YONt$A5@8HEsV@D2BMi#)FeTznwZeYs95Xql9iY~Q>fc z4}vi6FNDKkPm&s9b%1rIY(TDhC>5~RNNTasJHy_ji(mEi__sztAC8(PVC3<}>S7IH z#6hSCsf{u$EC9G!(U&(pD3N zt;{iybUXD4CO!2I0R2Ws9~Lb)N&I6H9`Gc!hI-vh>S*U`-It{5*y!iA*m5)gOh{Kc zJq(?yKj={Rk{(OMM!yqAE>U<;!-W9*&meTHSha;y`J!O@eUB(N5ssaW){8_m{A4)L zKgMr`Gsfqa28kuY%78&PK2t2=gY9@@qrYe*j~_cg=lWaUH;{*jW= zUj!nWOBYfQ<6qtihhwG>JzoBg)#JZpEQt!}^&pCv-tq)!1$A_rs0!Loug5=(S3O*Q zv?Mj7wSNazpHPjeq;7cKtOOVvM1#4CZn$p<+SU)1AXG-T0eamKb+TH~FnB=(R1QCQ zv0%bSM_z&RzL%WbZgIAc#viV>OS0PzGhdD7yaPApJ%JJWa=pmIy*eqer1Yu3NM+wf zuZm{O6xuVb)lXHu2t5UEuY!*=r1$CS#S9Z(!9>S2j*NMGJ%~;Y~UpC-0C~J8;pz4SU!sRDDF(13`=vb&BR*iuvgx=P` z-EFKIy^ed0&qTjxswk3xuan;BB+p|N*YSwR4gs+^1+5+{q;;m-BCuYud3Gdez#Es9 zE=A3Yu0o&JMT$l6{~Ys~E{u;2u?DY@G(=Zu6G;J(E~G* z7!#BP)=U9N)<8KeSb#k1l3HKF^-c!5*%S{f2_k|;B`k2$Q!!eWCo=fxRq_{@&=jM zL{^3p>8%E325frjZA0sb=b5(cN$X7HdAzbq8qp>Z%k^La6%Ggd#hJF-)OCH%#ImG7 zr&P!69qD7_i8aA=;6bcLs6Wm0ppH^ar)CxG^js7M4_K*Fm8fXEHq+=>OF#04Gs$_Z-Wpa@Os0z#?250 z$gxX;==Njl0bd;(OB-;_qi=@|9tvfmh~{H$*y&h)j%6XD^d9!ES@^64CML&kgPui? zoo%J^%ZW0cHQxzx3mL2C6+mn(1LxBan~6~peYCnE+`#ie4D=X2V-0A1Omn&7va0i{ zVGJNopc{f1CQ*&i4{|+ZxNVA62V`EcLmG(5hmiYfRn*l?F#ymxid9kyR%dY9!D5rz< z>}Vv;E4~gL<=LMp;)aZFgn#gJJ{-hHq{MF$yu ztE7WOP){I=%gvgIN4f!b^kP4%=Z+ODL2y1Giuq(N;DzdXMWxGQtj1QZd90O}%^C;1 zrjNTgaC6|{z~I1)n&lfP4dKa29z-h6ux>!3u>@n%Yhpe%`yavVpSv0(d9I6LT?TSNOym6t zIF93r7n@hoGktzo_1NujGh?@-{fi~Q1M=Li71L>__<6iA-Un0CRTpO=vlE2Omaxw< z&#WzVEQ<`=CuG=Ol3_b%*zRQ5jtq4ZGL*WOI?hn%WT;~iALZZ()S2PEE-WELA~ z_D-%#`K$m1j=4GT!q(BzO7@>rUoU3nEezgXn@-a>|m-U)wd1p?r zOs3AUl{&1OFo&AwlRm}e$f%~q@VGUG7mMc+%}zs(G`7S1N)^}_(}GFtLxNa#B-I$r zS!o`At-?(KYnOvBc2i_v+!bt`EhxF8=Cv=~N8+O&8k;eJ+8pZN)}OnspS2nTA8LB#Nu1-W9sVUx5k1;>HD0L{(=#jILQ9g*_Y!7kdLWkuEufA70Rycu| zn-2#Wxb27=A+d=kB;)5zJk_}B-4|bhoBOJ(yJuJ7%uMNV$F6r@#5hidy2#{a^?C;p zumZi1gAs)#@4g(Hg=rm1o2&|It8l6^P=ZTTI@os7)h#uWipMTpxBwO^`^kd@SDJ6M z<%R}3tqY%pYDTV356Trf2U~?hQaEMpzev-=qzMz~1R3C*Q7R3N2&7mOuVL;Q1$OF5}sbXB2Xdh4R7i zaQShqHZM00Y!s>Og>ch ziz0!NUlgf=g{a&4>WX8i?6hN@I?h<(a(f)Yjw`%ipbc=L(@-w1j5GSBU!`)B8hnN_ zlQ*r~?reC<7x9(0akt$Q#T3UH3hbYpPG5+y;uM*>CK0dja{-Y0fIZuIMYuQRa($+CJwBAS?|ZPB)K(zpRtuEei#M%Pyry+8 z-sjwl4ms2p)d^@#!cGOWju8qi#)`U5|M2`$|JNhu;QnLA+`^(-<7?7C2ROe<3+-;pZ zz+Q89mT!xNUxH4Qd?#i&VAYU1F^L6c@vO-k_cRw1|Q1^!2X?Q;$PH&6! zg(^-exi=hSJFs1o0QSA%5T`h!VqGa+*)3wp#3L_PG=>%%*TrHJZp;+|)}dlnW4H${ z09mXX#-2fNDO8oSkq%Jo7}jXdqn{syDxtvhGP#lKlaN!{>!?e*LByO(y8hxNUG7;9 zURa2ORpW-uLQoj#WAL zY6B(rY7uwt)rPtXCHHEp0F~aW1zdKomSrfpNE@4YuXfTFv~{IBvwlucH>M2r630^P zDQ>ekMTPt~R zkX!dyWpHuWGF9AxirP{ll;2tPtDBXaMLRdZFYEVzShcpoBi6OdEQAr?WT@Xf3tQJR zEz5!HRTFF<@~S%daC=n6*z2JN=S>{*YAx>e;=(S~P&o{+K*nl|s{8_KQ8jF~QAbhs zg^6khQ+lT&Xz5)nB&ZlGJF!c#Wl`8FtDbfs!kI1M9G^4Vxf$!p^Y4kk!DS0ROdFK@i}G+)_Ipl|Y{{6; zKO=&fko=5DZ6%3tt={L{->yi3``aEF0IDlqwhG#Ph-nOU*~)8QwyGL;<@Un=#T5Y# zE#W+s%cYsRxzc5>9IHaG3eQ?RSK+xH&*-fj{E&lRaqv3?W79bH+QsBCOz;2K-n9qT zRh0QN_ue#Vo22PUnn#=0%{xt-N1MJvpy`vxX+xncwJo%TQcIz{O7Q|}nL!kV3Wy3+ zjPXGi7i|_+D5CYXE=$}N6-98>7C|Y34;I~B+;w-^-}lYTx#!$_ZW{mauk|K(X6`(G z^UXKkd^2YrXD}5A3?~6+F`HAgcM1O}jm63<;<54?{#CDolCgMsTRZv8>>y_^A}yew z{inlq21i}&#DPemOZoRQopc5Nmet;r_eTef>@>t5gpJwxK*!){I|BlVSXY(I8%~5v$3%ifA`{(RF$?jjX z`whylU;dt~>s6k%3MfcT5vWh52UqnWxBv@lju-q{)RvQ%c;@vhvER z8Pzp)^~r|DrskH`w)UAFvpT!F=k(5-zhL2_zSH_oKV$L0lBLU*dxLL3w2l|K96_7p z()-Y~XH5HTM;r>m<%;|%HTK70$DA0go+Sj9S%DGynB?>G^ec?@p3iiQVoF|&y?-K6 zSXfxbMjS+lTONaH{c+i9);{I#E|vmt+IC+Qdan#3d)Ca6~H< zSgj)m?f4=(>0{Ezrh?u?eOY}g8#;YVoaNJ%s1nmfqPeWOnvDQmVa%!^T|QpAe0eiOwMewN zZB=X-{=`Cb%@A00Wv*m$XF@Grqn(&pHnWWlO6{Oj%!D|b`59%b#dahpAkjdDgR4=; zWp|TK!R~a~@$UKN#LSs9QFi*6ddY9WYq=90WgTs7aLzF?kr5_|Ng?`MIM0}vC3tOC z%+|38P2eTqhQ|QzOmwt&bU30b(J`xIwx3r)x9Aax&a%!V8v$O2WuTk$K|5pdu()ZO zC(aRbMWU;$tCbDL(Y%@*qIVAC2%krc$M@utY(f^A6J2dxGky9d&BGPkiJr2aS~eKB zP{iJT49r3axf#GQPs5@~P|5MJvIVE%>g0uD(KwJ6o*JpJPn?#C6vLWYj2dL1v;yx| zheQxHf>tD_;w{r?>C{N6-De71(STSY5_8JtbhE)lox=Pn34l6cz_4(+!2P*^(NQcO zShzfaH=Zu?3odXOlf#+?E|5|NQl^O&mK0p<2%7j!?7{_6D-$IJC3t5y>I3&cK^ak~ zaL!CjEtrZ|Pp7?Oq9TSht}+Ckop7-=IT*-L=OoGs%0Of~4dn&>G98exSkqx|KK9>3 z0a9T=AmFGIhr@m;fIh@D%{Tc9E3T_x!z9Z; zWwNQ~Az6J%eI*+vneH$sH~K$MV9N)HCZ=ZR>z)sQIYo17*@%mBBDdo0#|DT>Xj_KJ zrWn_!mJ+vmi+gL>AXVzduqO)XS$-?|2ZSPDK>M>-J~)sss+pgS!1VbEalFv$t?lg) zqKTW;MOKz;DC;d=Z)fk4=&-F`@ABSrEdPO8whd(UyZx1H#BtaI{dkB1ZhMV}JKM0W z0HP``5xB(`uI&Oh>cZA)mp99ZOR0k3rx{6VE#Zhuy#A{GMkMh1=k_l`0h*8v-x45b+BOh0;0{!>!31S7C4(foXf#jMQ+{y$d8DCM>b-%gfodXgpkZJZkvPyl zu#`v~ST%3~kvOnzU}u2D@*N;?xx2iR4I&XjP#+>{hv3^!g{TKb)c)y1mJnci#ZCaM za97l^p#iwclOd3u21Ex%0aacGpq1{*S~d(N4FM2=m+2cy8lnKIE(gGw?wQqW7=XqQ zz~vSIgl89J`fdQ6<(^f}h5^tmO3RE8yG0YFjA~JUoN*NZJlCsZ!vMG;3a+vMe7kri zGpnx#z$$lD9UGAVSC0u$a}5AiyQ`boV1Q=b00UGw;u;1KVvlI1%GBKs>k6({N9^%d zx2*Pc8;Vv-z=Q5!GaCd95pYFr@R+y`{RV+YX97ifoj2GrIF~XToHsZSkg2-8$n0GA z+;%oJ8)9NMMx3Ei>@}>=K~XhYe*=KlxNByxk)~QShk$NiplphXJ6cSb+BMZ{+KJjV z9c$(Xs7>C8OxEVDb=ioE7S^Nki;$8|ZY7Sm(JErTecRSLMR1&k?BuPYA|rVl2od7F zqLn!+d>C$wAdY|<_hr(--B>FM8>D5QAh4LY+2|M_G*DQ|g~wWeZOVd$CeMT<*%893 ztu)_)^fhM#wPXUtFoG2=0tZOtE!+X!${jkeZ`M7#h{kTA9%)1IhH^II&P0HqSK|Mw zxM;^9zZQ))hJmeU%IK%?TuQwJ1_?Br(dJAsgMZQV1EuU>6VeWMzL>@R7-RsSIKH5C zq9f!7y$ux`>f!j1_l}BpkmGi5V+C%U7V-{nQ^lrQ>d!V;Y@Qk2pUM5+g_Reg7mVr% z<%hkCDlclt5qPJ!rE*Jsj=;OTt(9BR)p64npt@Dw4Q|QXO5|;g#)^wsm?k*|Cq#?~ zCG)vbsqDIKp!D)1z-f}V%?;$zChwtK?r`ND<;J31AbGR7@evGZQh5*Q33A~{CPOKM z*mn6bg4yrN{k6s-m{ZXj$O7bjjI$^Z^5c4Znbon%drfPQ_h~8M;>r8@2cBR+nH>tq z16nfJQ@3m4EC#;v;~=n3?#IyJ61Zl|{R^lEmiy0?`!PI__rkeB?!O4m`{2A(?njp= z?}u}b-2ZOsoaKJ`QG7oE?*sJX>-ats;OR^X^5mVaymPv-3{N`)1qM$)VR?!MoXyh? z`2fM(<;uGN!3y`5h*4_FvTc{a=}`ALGg*Om9qFjh3oC&z@DEr$r^K3Cq?YOH9O zp)p}P<);YdeplX)La}9FbPwzo>Qfdby9mNbs;;|?JeM z@LVGgY=QH0aPE}{&~uRZ9FXtBcYi=mx~ZXh@&Q*qkTe$aqKdQ6Ap1ck8$x5r){$(D zQ}YHr4>ZUJXsUr)Eh&*6d62RgcI9xLv6xR2j5ZB(syoc7gPi4rbbIvkwuA8Tu&mpX zh$l{Jd&Bi|xJgqx+$o1KGDqVZK3fjsxs13syipEgv`X9?ey<#sx4;ed4Wp3_OFT*X zWt$@(qOv{g%7?3s6<}XRSssdHpHG`%-@`TXVf4Fx7IWq2DT_m{JOpWFi`j=cKL}b+ zm|dUeEMgJt5*VZDhKWG{@!-%5d5Ah3)YzeBz_^QR9_T&ILZNxYD)E3 zoqP;hRelkm7`mY``B~1FhbYU(UHLfVkS#8ieiY5f@{mT>1GW%;BlpG3W|6{wetEFa-4GaIX) zo2i#4tL2lydRZhNr7VuP@<`HHTq@gGwL-IMZEm=fIGm5djM-SfL{Sh)=GJc*8fZZ^ zjrB-_Jko*`p8-AH^2ll2SdZWbrZwc3U~iU3@N7zr^~ja-$R0S+R*$?_9+4jiRDU1Q z>dB{YW(L*IR)BdKC3!58c|K)^c~8~Lr|<$WU&2n4k5d*;yYlIJV+FFvkg&%ivmgd) zKwaXelk(}H2=vRtl*Lh39z`kG;`-6rAR~*zoJFKI@bfY4=4ib@)|HMLTHlVE;{gDfq^ zil7EM@S7GUlA1GVI!C_Z%2)9G!InV@4|2zt(!nt2ESmR_CtZ26*;ot`ocFNuH;zda zd9p>G^ruw-e>TIv>dIFE&lbT$Xv0%0;ViNzDtN?3&)_WXX#Cd!twp}dlPmJodGghP zKub7>rdQ;za73uxSeh|`DHfaIDW+IZ0*|Ixce~s46 zmH`Y3z7S(f+kppz^4o;+hAZEIE@jK0vQ#L~WBa&9h-(w2iSD)v}rwI5hSH6Xc zW{ZF^_mAlnp&u+VdX1;J65@ej>puw;97Xqs`z*MAKN3d>#;|Wy%eU&`d>YO+`PNL` zyS%kPzO^(!(D`x{1gQj0mo*zpvx_l<)ra(>Mjmun6!X{8a*E2s39#wLGRzNZi!ql} zAPDQ^cL=4RL=}`9%hE&>M}g@RR98e-xBh$~{}}+2%GIP+V;M4nG9bkHqMXu;^h_WL zHLbYmr?U(26zQqLB2`#pthj^Ij;O2bl^W5_(^}nP9#3m6CJ;NVg~8f|0H{@kSZS7Xg6jOd*@X!qhf3tWAn0Lr$38vIlrKnN12nKA($6s(+Nbe%huqfKI z3_C&CrXhb|=7us?W8@F5-bMaqdWb538x1&Dk8EeC(pq5t0M2Gr3Q@iUt{zp&<6TvX zA2i9qlVY?RMYLCRcJ27a)`{Lp=nej4?Oe~yUd8%a~P(|;g5u|E$RcpJk zG-CoINSom)Mvy4MP8va~HdnRHFjl$*BG_siG0qXBYO7Y*!il9i)z+ih{1GHFyNriw zs@+xXXyt5a(uE$XS?L;Us0Nr_+`o1dsSeQ07Iv`c{?%Vy5{(fJjn#2dEa0wo3Dl3@ z)#h_o+fl7LK)F2OsaZ8@Rx6xe^3?1aH5<+?p6aYoo!#*Ku&26eR2MwAdaAodbz^#L zwx@b(RF6OL1Nh73i^SYsSM|;^R$MHgzH}is`6ae5eNiiNAr@w7HNadUUm}=!uA0|q zECZwa2Mq(VUa~NLw}1j_4GWmvI|*gJtLCFUv87QoQvw7z;uQM@0ETLRT$B=fsu)(Hjped&by!0FbM><5=XXMGz^r3`k?3NJ5OU z`2Zl-Y$HngT-8@;ECR`)scqr5@qUKfihAs=ELu zeXCX923FI37puO@0+o3!tLc7M^+QdwWlF8pv}N5GY8s{9!)h8Y=Qte_!IlBhYTAN~ zp{4krcr_vtLde# zS_+lNR=Na6Os_CWGYN=M!OMBE(Uri&k8?>5U=Bj0AQ*3F{jhfauVVFC{6E$FN zlrK}OTJEal&|7R7n66OMlrP(jL0DSI7}NpgCix43IonldgBrFBOju0iFRc2@ej)+P zyX7wl<{Vd@lQfor(PLG=P`|V=$tY^x!%wQ7t2~V9*fJ==hBxMuDrkAHdPXEa1(I5k@(^&Zms+3N499(5>XOtu z;ke&RU6aBz$E99Mek3LDht~l(kEG;LE4LU{@8jNeuviVEL9<1Q&^)`+o+EmgCNtgF zF5(V#8IxwVWB>%Dslj?RNORz?!Z}L~F3RyB`YQwvsKFIEf?q@MDm9qnDHk2{;8r!b z$Cd$f+{|t7d{>>1w#QanEMj{7eN4;1OZwj{lH@?AOhH*y4lpTM*{*ffS}0q#G@8(L zu90YannsG)@JT32zD@$T&Q9sM=wOKA_Vd;D z9nqokE(GsX+po+Kd?$jhR@+mSzbLGHzkHMUn{rjE!B{kl5@KjftOVmM6a8k%?2BL= zZxSblr5aUgmS$LLwo1*bf`p;Q`=O^AKFln zKOp}=MV79Tc#>s{WQgX^Sbnq)iWr@-@MI6#vSiBVkeHh(R1OK#g~&CjWG7gINjKT0 zBqoe#(oOa&c~*{+{2PMtzcxqkza#7dCAa1X{tpCSqU06P!C<1iN=d1rgXLQYm$%|O z6cnA?o8f zx;jks#0)>xt14AmW-m_i2~-4^r%AD68eQ;ZpE)wY0n2&rW))YS*}KM6&cUWBOBGo_UOc05xPT-A>N7P(!a2lCXYt42|;Y~^8XDx+ial}ZHr5}3-Y)rvKli(8>i2zq0* zO^uQ$fNP`k)#!lc+UOEB>O~U|u8po%quZiGX{KTH5;eLzIv89Vy-JPljSdCZM&G4I zrHl?HwvEbL@V!0Aw>uP8Fg}^$eap*y86sznZaqFiY@Ja8%(l zP3oB*p6+>Ou6kx=5cR_{~d;UIr%0;094?_okFEtz+!d_sB7 zRnK)93!@|SD?p-7JQ`^tqIRq2Fq%sv-K8cG(hIJ7q1IS=dGVl(CxSonfLT@u zo|1XxJoU=vKshGoIckdIO)i-{9hFBz?a&7zg}+#SY*lO%0w$R6B-r%52j7q33&nJg zDgkYU1%(xC@Oan2=?Xs^O6{X+Dk2pX7FDu=4f1#fd5{1w9tNXbuV{J^4o&$fu#`9f zH&gM!I_x6Tfb@WZ)k-X^3CEnLqZDzXay7-F(~E%vc76adNds>y9E!6(pn<8d?4jRy#Ne-G53z>XL-Vxx&RWOoDekF3rnVe7 znt+VfI_DFtK0=2i_+X7TDuC8#O?6Oy1?C%>UxBmP;Uji}uEW7UAMPa9MR%=;5;zpc zJlkxUsZZH)z4!sXDndf6MJ^~npKE9X9*)FeXbLvuTVLAq5Iz8f{*Mq~X$1W!e}neDAsAmYqn*%c4604t zEJ+UN#5a8-zm-5l}}EviCQc!MZs>u0Vd?6 z4>lPO;tV`+R7rd6qe8am28km_Cfz<04ckvlG~CjK;$(~O9Acj4Hf3de>6tc7@RhP7OYp&*hvrwh&P9Dz#Cn+Qhzg->(IyG>^DZj#RNorJna zr=jCZoCfW1HqIF_)i`hjvd1x{igP+90UTzdPp5pqdct8mgg2_G+(=8ve5g!U6bj#1%fX|br z00M>6QHO_Zz{8;wJvbm>nDd1|3YtwiWCP&PC1m~V$`Knd5=cSY_8+kUkA(7=gPZ3} z9*<^}D{D){x=_%Xj}J>jr1xu1p7#SgfD1x{jC6GWr3UBU6S#ppCeV4X z$>?$U9Ua#phmBi{QH2oY=w{Ik$LJ7YdPp!CdXT=6J>X;qD<;@GM?3t)wIidiSX9@vwuyk)f@3TB%b6-7)!F{c@%LuG!ZY(A}Jx`Yt@e>Meue#KGQFVF9AJ zKotiDoRZSxQ>u0UQM^+Nw48d^BK84NRUV}cfncoJDfq1Qe3lw^j(va6*+|b(OGHX7 zqTTX&8}Pghz%TDbQqeYeRK#YvW9@$V*$wGKP4CsBHR13V5L-k3+zDZw=nX1Gz*@$OAo{ zX#w~5#iXU|I3j8GBRVFZ(%WIQd{elV?-O=^O*nBp`(Xq~nB>x1Y%(I-_njaLW`Ok8 zoNyGT6wN_z>&XafM7s1wo^T)vTc+E=aR*nr{h7OqhMDOlJ$hccy{B7 z3T@{&_S+aQ&AuJR8@7pAkEbk-3EOz-r!6FA8RuO^joVDDZ6vo*`&YEw9@lcqX^h++ z*K*5V`iTt4EVtTA%k6P3x9|$dExbu?!#gUp+#c6*OCUkHJ+9@}rVv(c!84Xy&a_>= zY|29pQ|vA*^J`X+!+7GXiuHuUcqVl>a9no-jEGS`E$(Nugd$WoeIr{!kt0u{CGa{p zUJ?fhHZ38~wggOV^3rxd7oX&oK-~)o8D=ke^*SShZVLVyd0GM~H9e?0s@_v;3e*}9 z=a1egFr>=HJl5CVEqOC!hY!_u+#BZpmFMhzshY5-lQS!D%;lxYR0OT@O=Wefn8l0vrAU`ObK6Z)#cg!RF+I~^`UQFx z?Y>gfs)P-M!(XOQ81ZU~;Rr1|s7W>ij=a3WU|EWSKZ=7trUZYK1b<-0zA#Y)Bc3RZ zC#J*`B?*j|Z60vs;oiL8(X_SRC*lTwAo0|M%Z4hlX^M0q{posYLm9ff1YYzlHD7A^ z-1@0O=|6>24F2Z>7_lcJu8i_;i3;B>6}m~vi7hlYHKlLK2;W=~ywkwkFBH5CA^T#3 z^c_%q`4e4;!S^oli-{dvO@(Wv_UsH^chwesdC97auiAP2#XE6P)UGRc?cMdR9oNmk z8;ZA@*R=Bm3A^^*NOw!ojR}5fo6Oxrfg2k-vuLo3r%A zR^z$Cir)|Jzml08=BlZvd!_g$sE9kLGB1bHcR8JDu5hyVFGXIgREAjkHQ;;bBB34E zUAOD%tHyWfP!W>)lwTKh8&Jk2K2#CN>*C$JF2!{;S@+n4ZsbW{YLjvIPxe(kW8QHS zzLCZ$N4udJMC#5Hc@tuZe5YU{o0HfqV{;l_C>zT|(DWHjtg@2*YS^sP-u3ZVq5(~{ zwT*n+XOeR^IlHNFrQG%}6Ppo{R1;1~unLKHl*cABN?-OK_r+{Ew7#ef1ekTf^xaq=yXH~u)#XeOfL~-+mKR9KTwS^0TmCmkGNFiQbQrV%rL_%L0+-)D5jI2 z_OBQ_xN=bh*KO)znp3HCs))sO*bg84#tSX+JDi6kO-&+Y|{IrO@tOA0TJNOL51{mt4Zvza2(*%Gt1DU z0nr!f*q!OvQ}GsB4Eam|7V(+>Vps;bH`{BT@haiWrlQ_%p~Elc^B}qF?XR$XZy;Ve zWGn6pT)unvYFwD(@CAoEc6464dv`hlyWVbg>IX9X{`&K;9QZRh&@Fh@=$kl(_1Dk; HKMwpKm}(wV literal 0 HcmV?d00001 diff --git a/tests/fsharp/typeProviders/fsharp41/net461/providerDesigner.dll b/tests/fsharp/typeProviders/fsharp41/net461/providerDesigner.dll new file mode 100644 index 0000000000000000000000000000000000000000..a26e114cc7427734e225cce2a831a04f744d6303 GIT binary patch literal 75264 zcmb@v3t&{$wKu-bnVECuop~i8kc0`M4oQeWcq(ebOQWC&_&`xIBm<0uOqfX!jM1c0 zAGbfkqA%mlzYYmc9E>74JoT$#dffM;rY~zN zf7G;YYqpRa$mh1?)7z6h>HhxQU~*F?nIGy;X8V)NE?%45p6kuDg+l)67VFi^iB@VZ z(mtwpTPQk8;iiD*B}!^Uy25_rT*Q-zci_&_aU5wZH~;KAjUwI3Kt0tpF$h@n+pa)zlAmt57Y!(c9`D#f!9L59CYn(z1o-a;U0HK-HK<;onWTr{6MB2 zBQoM1BNqTLv&zVaP)rW$^2d#qkdcoTK_g!az$c|gJvk6E4S8#?2zt%E*>i9C```br z__Tu0>BWpKWaPr2&bI(pT7@bgo9T;s4y7pFpk{8}GlH%M70onnJPVN)!<~wOU<5UG zHxtEYd1)4O1jRu|OzJmg2J&Zsc_9J1>y3b!szxN?a(lw=LJgvSOXMKDANuvu?32kW zS;L;P%*fZ4-{ut4SaT=Tt2MXfzvJL0Ck=G0W?G}?CZW7mBM;{>(3}rx2$3J{%~eF6 zI$)Hz$BWO`hq=ayTpde}tF{^WQ*1}g({xv%2`$GwoAn{Iyq@@*i_;6!84Vm{Q@Hsm z-s-At(Q1(4%KW8Vb|d&Ovlcy7jbD}8dcHo$ zr3Y&K$*=5Q@Nsh(rsfWMTfN@gG;l(ZM*SvZQqL7vT%jmj<}gHar@*eIm}E5TgDi2V z)}rza`K~uwq0d7kkSh81v#>+Zo$faleGq^i^olx^3IYcA zgc3x^^tErZsj@;^Qm3&3Ypg27O+%^@_qwB| z)FSGY+usr?bjubH)-=1I$eO=t+1ohvjEQ-^sEE%o0)ku8^+;3>x0{ ztR?wbmgH`ilH3z@E5VigDYOy`?pA^;`Ns)vxRl@~>c!f(#E0Bynu>CxZxQMgwbk9~ z*A4WwsoXSdYnSOMbV&nVkJ}txkJSY{`T--@{|V+yhmOl-I~D<&foFS1e)uQg=jg*6 zQJGP;4O?ufNDmjL=sBX8fu42U1?LB4K-Yy<@E(DyaO=65TnxKs_#ze*9)~?qoNr!wM@_W3QlYG32v*~x^cNV&rgsih3?nlH&Pgw{jDuL(sE3KnPD@v7(meb0CcD|8zEl`ov%ef z37Ok;qYRW;p^O_>qc*xLcMh{dZ$lxidJBei)O>f+KGWLTpcD(&C>L3T@_G8cnlm!c`P?qjW?nk0Kw+v0k#&=F}Jk3YFa!=@agCVfApM|<~0);@>BqG;t6BK z|0=$c4}IA&$m5q^A>T9HI4LNI2abwPm!aZlRVO=m#wJU^>cOzC*1!!BhUvt~+rD`ZgSU?fMuvw3Q=`N0Y_!#tklE`j3I z=qS;2v&_5Lx1nkkWO22g;u?ah#(cfC)(Ge_f|?Sh)_@mJlzGz3cIzcBA3m%CAGgT1 zQNnh^JvG_gqPhJpqu}BGBb_PeEnqEX=pMtBTFXYv9ZANUfJgPF(@d))86N51$LU38 za|OGoxl?*|dRZ z+_}p*iiJ^23f_pv=_`Pk*^s}AZRR*G$q0IdOwlI1srASc@`c@D4@C9@XwKh#g8V$E zUIDrIr{}H&z09NG3V9w4Id~oo@i3M2j9}HtQ_2y@h&wOwhY-We(puvu0YML#|8owk zlV5kNy)A!=$F}_VEEi$SA#_9R0WeeS0k9FLu3~v%C#C6JSb4g=cK5@mniT_CKO@e> z5^u|2?UV<3xFWn>;d()?_d97PSif^^ob`KKzSwiaQzOlP)pHwcWt|2>DC-oyc}AM} zhDFDza`%j!E_Y*Oy4=kXEUclVw)_uEWN0#M-9Sbmz}}aGYs-Jri6fmEHeag`GsB8I z9iU-ZxV|jf$<~(zcIwOf75+xm_qnZbMQi=m#)#hHG0;E#7>rN`SGd`a*}#gtX=0XL zvcp9LJzZ_<38uk%O7RT}n!$HZO$r9kGSVVQ&y72APob4sMzFktp0JO?5l1eR$85N6 z%%}OE_0%=Yf0!A_a94wIj#;;w$p|_o_At7U;~a%dV4Op{wqWcI5C&JmSQ&NC3_gSL zQH>eAVYLw){hn5@C)JHui|5Acz%LN?z~FZw27~v=rdCjQ8KyUpz`DjLKmh0?KFd#t z5&Cx2b0cPG?iBRXl0u`lU?uD}QfQi%)F$vvV3r0(XhzJC;Qj$` zogaP7NG!Y_{K8nr$i7&}Nb(}6JMIpfGiT`eTBzJ5`-yJs52Sj)*q7>M_MX&U@JMC2 z3TKARxF@QljvHmUqDE>nNRFGA>+MRkYzliONTBDNoYJ3xuU8r@7o%48*-ov=w}8~0 zNF-7pfK&%j1ueA&<(5bpH_e$XQ4>?q1)x<^uBa(aA?}6l!bT$MmHHIW_l#yU?u(kO zXGG1oKkB#0qCOP~2z@jlR3dPY%N+^yzM)?U|h~T!PVRx+ytfu z48bUOrmJ4OY8IURVRLH45PJx)1-^$Z(69_pZ1QH?CSi2`5HI=F=B6z9uLUlSwVB&% z`l9YaPD)qx#Dq_NN)+C>P?C$7Y&#IlmJ?-&oM-ATF&ArzN=tOCEf=5?=vV=H&99s$hz9VxiVmbk||2uBFIk$Ir^<=}DfcmU4{hB*RtjLZU_?G%2O zxi@1BMssV;SGw}^QKam8wVL{{&|xfCQ!BHnQ)?7T)@YocjmVF^ZeBZ`2N(l3<^U{v zeg*jCZa}h~^%-JX%sW0ZNS`fDK6N(mAyv6Usa&vf1;5HTp2C zAvXqM7iLB1LA*4;nx-5N8y9?AekDXv?UBb$7eIv{$}zi`HLjoe3Z52QX1 z_NMHdv`#bf$Jik6MS?tm3wrgEM{f~oc}RyXK`rn;c7*#!;bV-NeB;OY23bBK_bY2t z`w>z7o(mgQGUA!g0VaU0M!7$+ZeYCfD|`v!jGiTRf!^-}9olEHRkx6gQ%Tg#mAW5E zepd=j=?}P458xJbr9O#U$d&pOZgICO^=ZC)T&d6S9SbP5m_PMd2GDJpDW)M4A{kdiI(}bRJt{hr{>AzvoKc?tA%IHrKdd9hO|ElN@G5uqZq!U5aDYX<9qE8aG;<*G_kwQ%5 z#`09k9Ofcx)&5TI3n)PqUaQI;W=V2i1iH0NR{$Cqn@hPb<5t^Vi>@p}nh)qO1rfBi zx#hbp-_h$zIHX!2iJnlbt%QUS^BQ{!#*Z5zB&H$J1g6Ezux|ZwjpgPl=q=YM zsS7tz5CUkAoVaAal`+UN?-!gGC&RIpKuI7sI) zwrHb_b8Penmd#lOD!F?`E|R-3axvda#u`8U3iX{Xaxl#}TMZ(yrE1|m+!nr%g9j17T)8mYT%Umi z3ZoBmu^13oh~j>VGF*|QRtYl9fHK_0x&lfJx3T?HQHW3XkZgei4^8Goha zORy-x2@Bhdr64OIA;hw;INpvq;{-cq|bJ>{iJlbz`HM1nPqe~Ej9j)P;XJjqkU`OlZ?ismM z?#9Svd@r#hlVApfmV%FFn#y)`D`*z7Gg*isjqOMZ8|Fe}pITXplvS&W8fHLQ$|_v} zY$+IL*~Lw6$7-G>RS!w|fqvAmOo!2G63M0`ax1Z6I-hR&Buqze!qYY#DcMR$NF8gM z$J-6(nqW7KJQ=$gUu0QX@5*jYRPuPc;YJ&0H>v@ov85TSMbd< zvYv0Sg)8Om8NqlC8~7R<7h03&-=D=@*#Og&*nmAGwD?*wEgQuI(E7rDn7Nml9P$vnWZM9u&w3Bti{USVCQawLQpo?(3Za<&QW%gB>y-|=OZ z751*$_e3R+Z(pwdxbdy1Vs6=E(y}tXeHG1y7T&;F=!?oXOlqH|4>QKUHm>2DXJjMaU>n_X_l%_Zp27sJf^9I(JKBb@A7<_)wjrg|szQbt zaBM?>65E(0lOK`Bcwh?K2214Fh9n3F+ct!ConoC3;tICG*(TTqBTvRQ#+O-E*t@cg z6O}yPHn{rZY@?`RwvCr3*aoIzu#K-O+n5?*<6zW8<6x{~9BdmsK)^P7`Q{nP@C~-H zS?->ZEqqUXy~H*iBHM2;O=a8I+|s@9CeXoe2>W5?USbs{H#iAo-C z8(jNwwoz0u+s5mbZD4K5exvzXWfRF!v`4#m2_B87CMV1-{s$RHw=(;ZIdxWG%&9q2 zVNQLmq?gaB8RyKY|H|SN*L~Z{=+&H>an79jEsOp!2np-#E2CF)YQ{Np>c26)UDr9P zuC*JT_w!2D(>it}N4E<$q4;$ zq=J5SNP4+`80YB6}`b5ZDlSKfDQ7mP|I}J*>ndiy66PD$xOG) zrrUR1eho~wTj-!mt8K3r*r_XnR$W1J2)tllhnc0U3ELsp>6jCT-L0pD@ys#xEhOOu zjwD#?!%Ua^HUeyOp*k(iB`BG6jt!^)Y|Gb8*~94zK_f z_nO*RfA3*3wuA4gx&-|8K4@88W;5;0HtmV){XMSt_od!>)cd{2g?it@H_yned@EU( z81!+p0sr)2Cc)U^W&ju84P0Ja*ru4-vaTiD(ytFQL-nS7J+@ATuZ8rXP$>aJ1^5Z! z4}fc}$8b_g_`@>7y3#Z&zdl(Z69V%Bb()1jl%7?>F83flUQ|De>u-s)1Z8)_%X_eD zCsy{-Spn$#A{;z7KS)t?`P+~HJ>AYX&&WUV4P)~AkZxsv-ZNc!DY;kpho;t&E`C3YsPr?G_;K#_HTT1k6?k%lX)I@ z=7WBQ*ajn0KSqETDw6szle%(0K^V}7In7M{6k+OT9L4JxKgS(B!24Om!23DAxksK? z_;TKiEaAV?5M{@QE{tPJt)m7ghI6 zMSSgGKHI+qgB;OAR}wAr19$0K`ctnu2X)GMmv$}V#0<{;R3mLkUv3k__@RGlmruPf z;Hv`gSFN3W3YX65=i&MQt`$J^<6?IM$)!&}3>Z2T8Ry{67e)c=r+}W(E~d6N8?mBM9G+ctX=OgBEIx-=i^pzl2{$=qFP@iqs~(5Am6Z`)O1#_voB@ zM1Ms0(~l7vbPO~GO>!}Zg)WYFNPLxq>m(d@ZFU)SD^mURfQxheK=31ODHoxizTtU9 zFVN@V#0;8eFy-3@mvWW)h<-C&3_oJf2TbPwp!sprpx>CBtIo?b^AH+zlb2IJ?q&RB z-y?dM=K2_OhmT9S+P}na(B1w5!o&VY5dK=izeqSMz_|(m=Jp;5A4V9q^!8>z)521^ zpYlO2>#iVk_#r|!{SGHwUL!niMtGUD+uwp*t}DdleiWgfJ{RIz%!U^<$f#n>w%2m%a4qM(4WXa@rS>Rlq}uMDI>vl#vb)+(pOo% z)Pd(oEVYgq%N*)Nk7qe+08OJ6^aFuT0dyMt%~Jy5aVEH&PfrVUHlQ~6m1l&@1%Ui? z0sTbME(J6n@BTh7X}ywm3H?$a-ugL{E~jHcd8<%vzD5>KvgieHulyU*LEtP z`LvyMf!YM>Cyzj91DZwyWD0ZYi7-RZx$G+lo(NAK`;WrXj z68n-NzsD9R6n&H-jD!IbY$uvE8(netQ zyMX`ntBlW7#DUo)1zG1r- zr$01Y<8H@WjaNo7hJ`jGyshyN!n+$^M)>i@_LxDRY256wQ|qe2af2Rjj3Knknu7R= zb8#&Us+9LjRb2X`;GjxB5v5I2iO(T$P9>HCFeLBd@U?v?OvhtE}^dju1J&VNS99o- za4G0VYNmmY-4@*L2Wu8$WPQA`6XE))r7gv&Pt@EB{KlytL|BZk#(0Byz@#Q~NYiMm zKsVET^9I=3fCVi##{lgT=t+ur?*gQLPX;%59|P2fF-&ne2bOxTKu^*u=8G7upLd|w zF#1oL#*|M|&i9sHMbj2W z=#K*RDG076fqc6hXtFCpdn~BgKg|`ReHN6#*^n6BBajQ4*r6q8zd$u~O5i+Kf*um+ z7Frs(PphFXTWM7~k*2M4V zhk@U?YUy4FdQ6){4_VOaVAMT{`lc(&)xl=>WSV}e4b5{;q4Nb|sXyVar*466p)UnL z{7IZjxm)1xF4&}p08@1B@5WGQ~O1BBbR&cgwD&1qHF_$EL+Jcx%lD_Ovp65x@ z_pCJL(nQZYX>Oy5W}VJ*-b|~)S*+t%3iPCRNBDLeweM39T_64yphvB=$HG51+UaK& z^v&>HSdy&6LLTSWsQ$(`E;6`AFKd$QR5d)M`Pkk*}LeX|)9{iySeR)1U>diTnW2 z6Bcw;*^ddY$^kw2K{Qy->-T;7*W-Fp%3v!KyP!h5l`IC_%45xLmAnzqVP=}G$c zs_V=(bku?-M^E>yrNuK9ms!#Kw6(O(f))$ZXF=x+w8w%j6X;$G+APrH7PK>Z1GxOm zg5E1>uPVsOctJc!_4m8=dj<#A5_o~b2HVfijbs2qHLEb?4 zQ|>G1hy`)Ky@KRW58C$U(fPhBX!;qdgdd{kTtTZXXmxNN^4()W?~l}b*VFV_it_(O zkC+>%!-BY1ZJ-ST-R!N34f;0FE`bjFCdVE_+CG&=1F>%z8>n?Qb77l5?CYgbfu8gl z@f);j={5yXZTv;wwY1NITH~+#257$p{lxV8chDgVS{nEI^K{gLR>$#K1Nyy!yzpTD z0=;TMPn!2>1$xthdg2VZc?k{e4#Z!>x-+66(flr&WI?R6U6iyS_I10c)yl`MvWpfv z&}7$cT4q7qD#NtSg1A+Nsarv!`4Q?Bh&8d)KSBqswBN?J`}feJRz7#)liD77!h+ae z@1Y|W#J+qFJ!9o#@4bg!upsu{d*~&L@)h$nP!ex0qutrEZYQq=as6&5Oi(0^>vucV zD@d&FcH;Bc$_6L9{)y&V5ZCVxT4q69zdPuB1xfw((n<@eN$mFTr9KO4P28aEr9lfi zD{&Ljb}2~4xV?0TK&+PoNPEgk`P9{dZGhuBy>< zi7}*27YOsO#FW6@bb|%8SARV4QF`2hx~dlk571)Xs-id@sQz^DGjz~`zFYmv;OFUa z3rf~hhrUSD7bwb^HJ66IK`Sk2dCe`MCuxHPU0U-%=!ev2L0f9R5c&~~TF@;uheJ=( zJ`4I>O;z~c=ur!LvgX|IGxU@N#cMwo{xLnl8#~f-=2iWaHpuSOVc#pYcWFPPUIl6M zCoQh}8TDDvo=MM!e@1&O=($Np%%9V}7BsnThxT*YZ$b0wmQ?+m4qDI`>vmQ>Pj6a~ zXY%5ze%{Vey!@) z)F;pi{n7egRUM;OE$CbIJGB3xH!bLU_4fg)$4(noTl#bLFIW8sO}C(z>;DL7u0TBc zYLWk-WmeiNW+3t+Z74~5iTa$hc;vUlFS25v4Ebh7en8L<)n$)l{@(N+; zjbGe*W5a!s|3h8{(f1p^2`=y8Eo=&zX9Am0-ulz*b1Ih5B%|3oi2ln+E-r1Y%7*9VLxAR6eeQrbPte zw6~+WmUPml#avp4leQ}6)>b=dH^w~LfRpy2n4yh2X|KmjZNETVhmXa*+VfT#+hABb z(nI>Nq}AzNR@Z0_Lh~#<(;Or zcG=~fmN;G8AP|?gFwv?dE>Iq!SCY#R921 zEYfkDPTI8C+1ley+N#(&+7T!1#@M;qOHSH{VjbEW zPTK3SPA##@*5{DEM4K)U%d$1GR9onz?a-EK9ZuRc(Pi5C0;w7;*Sbq6mup)~D3@yk zC6p_)+e#=`XdiGWM-nTvdrBxT&>k(Jyg>W1LwQZ~0_{)<<%QbwC6pIxM;*#QNP_KZMJ63<`OYey}J=QiuLKUvTjQ#p;WoZ$Q|XN|r0NjuOf%weuayaP^hix)RE(w7wF`tF%Ff@|na{ z+Gq*o2JIe!xPE6;Z_vJMQL-Q0sP(R9sg)P*)&?wy`*gSVX$xXM*sVQkLF@;+wL=0i z&kL%%wLe*D%rm3?{*ofk&Dy6XMqu@E!W2GkiOjD0gr-|_e0mh$=P{ZykhyGxZXECly(Xd-Po}Oj4Qwt$Z<*!xo zt}IJ<6+%3rfjkCH5A&C=J^+jtJGy)@r4J##^a#9$Jvz=?T8le?@zC7}4Y~)RDK+xa zeTZw=pJaNajZ+bK(_Dlep;W0hPo}gr!;~JOR6HkAmSYx0in1}E^3+n!L!hk0S>;l- zE9Ee;ElS(y&(UJJZzArJ`r0)*c`Yd``bmsAd=a5r+QNe!Z`SI!5!&{Xj57^$c8gX$ zbQ&;*Wkrh+*Qhj9wpuC))1RExDXIQlN@Ts+Qn76qV(ljO-ixx8mU8m8t#m$?;Cg)% zp&PsOEFoK?h9?M>ZS}uFgD0$@F~vTWtsb9V**4p=-DgX+eFdK0dnk?2plt|E;q0X$ z#E(z^6`?;gf&N#(=-6%M8vOxrH+Gwuf4rv1?VYuXZ*3u$UHZw>pIDzof2CoUoB1D< z@QIS}%vzRTwd{+CYxMLa4sWVs{Cg0(=r)9KhLaiNLa0*lTG14atMCgFze~71P|vwO zjZmYnOUQWmu?7xH;}1%U$AIVON=2GBV01c5@Jl4uvl1#AmP*6(4i0Z@JV9Wd%$c7kv7Aa9%_TCN z4E@PS%X~B{<$U7W{iF1X^FOK+m5a;LiG8Lm;Xlf!R9aNl^ z#oSiAUI6`&{t@jXf%myy63SNv^BIkIt$o^afx|9Ms|xbv!!WqMj zT+eud2p=&Piww7G{N!W?@e`9KJzez|qe;KDDq$wHk5;uKe6VVfzDWOW)!F6@d9u){ zzg~5d*`Q6;3_qJ-ki1c~q zYA;0|MEJ+ZQ`HT(zF2Anc+u>TgDTY5fs%J*}*NHrz!U>h}Y)t^O|L8bSPZ zkuxEBdqPTlLQ1R`%ybD`C45Tsvsk3nTutUcWCq>Ua38GVU<2F6*Bd?+`5Ef<-N*}? zzcCPf3E|S{tCDN3a9Av1Q2SDFksj0z2M3}-ZE52W!c~peBfPxvCWPt6JqWio-i~mn zac|Tu^vfjgGO^^95??9tbrN4E@eLAxL+r3u;zzWvG|rCuTt98RPkT#yp>dI(C4P<+ z)qgr=X}nKp1|_^f!aWk+A>lp=@0HN4^E3EmQum-&&k>IG8|%+ly= z;^#KAX=(hE+H{>IY1LVV$AxmP&d=B9>in#IvCh{1gw$f0&X&1Y=RUqn%6dZRR|@?~ zq4&}xO1r)I7RVO84c>CSwiM4$f2Z|Gc(a6i=%YxzAMeU=c%gQt`+ndrbsrS`i*%Lt zukIHG|1$j)lrQ70C=OqwGvS?7$aqa-yi2=E(>yMX`S>)(`vmV3$|fshe3Rg32+a&D z&fGeMrc>~pg73l(!;rg6FkOO43r$)uX~FbpT(2xBZ*gY@pB4O=P>u;^OfWYKobD?jNrd5`0oqn?+gC>f`3uF-?c@5QBq$PZZAvf%aZESZ+1f) zI!m<_;hR;XI@fwsXD#j5|3Fu`4hiOvV7?8S_eG8Z-{*Q!;^bm_axr~U;z@~jNW4Sh z-4Y*_aKD6yBs?nNi!Lsg+{`Cwh0Lu(;vH^|cT2om;-eBDmH5qW&bwbQ`vr4I;)f*u zZAm@i{wO#c75q`bzbN>Z1Wz83-@~Q2JxrMtOj0nXc$oim!FLG0L-0LzH(}Eup%$Q)t1am+z2Ly9KFoy+mSTKhLqnTpKCYPw0 zTw;@8I<1iLoq`_|%$QJ)3Fd%c4hZIeU=9oBuwV`g=9plP3Feq!G_RECl@h&NqRY!V zNeezL__W~11T!X>F~Qs{lm`TVK=20yf4|@l3;wX+4-5X7V2%mqm|!%YldbPA?h;%ULBtvFL26U;He91}_{D76bp?SfJ}!88e`NiYWl zb3iZ$1anw0hXr$3FvkRQOfbg;;|_h4B@BtQA(1x3{HF`PQ}CUF?-YDmFloW01v4g? zF~N)pMhlCyVUad0(h8F~PWFA4T5j5-yYQ zpoB*xd`UugTxcX*CgDK|k4X5Egzf~>?2+)GghwQNNkXb-IjNfEbXPNFQZPxubV$5I z;-eBDmG~Z^JSgEI!5F7ap$mpHwaQ#)!I(^1Qq zWrFFIa8&T4g5M*UgAyJR{2{^9B$0oTaGNCD1k)jyWrFFIaF2usC8RpZRmZv9b(||H zn51B)3#LOb9fDaVm{Gxu3g(c+4@sOR3%AM4?U2L|N&Kk9k4l`T2+b6xIV$m^5~q5> z*E4><#P>`5ki-v3{HVl_Dw+nS-`^l*N&Jw+k4pTg#P>G}O{36A{E)GZUeX@z^yCvQ&@%<9tFY%)i zKPvI$G@+j+GDv(>;zuQZRN@_{h@7V|&3=jRmpDxq*`|wZ67P`ssKiGle&|%DIdm%1 zBu|sFPLr}EJ}U9<(;44=y5J=~D)D4W=u^U9;vEw2mUy?s_e*@g#DAncu0QMgo2$+} z%l$u|Um6#fA29DT{oeDv&w4w37x_Nn`@65;f6c!y@Qc9x!9NDI@V@Zd;T=`aS6v=? zIC6J19?Qm_jjfB{9RFJUi;2em1z- zP4xL7Q~oZv(Eg|0#P z-WXHf?fqBmx;_wN86K8!qMRz%?l|wBpSVVf^5OVoP<}Jc{C^NnBCdE|oKPk10cJr#X_;p~M@qbLV^%ybpP_o6hNZlR3`Z^hR= zb-E2D>-c*&8R+A2*j$9p#12XXXNv*|S7;%Gi}CJ5gwDarJ3@1`IKmFC8sU7rqY%NV zf;xmtv?&N@;SGZbEz_oIIBy00w4iQFQ2#9L#HpJ5=rDZ`r%0ZoU(;{t|6toHuAQ!( zsdZ^B`t|w;_1&&dx*lU0X-R(j5NBPNJ>F-s8_tlC&4d*WS2LpC~QL2We@jhGe*QcKYyH-DR4*o(ebzIB4 zaD-Om{aWtJ9`s}nY|R6$dT=5r3d@S(JQFzLs)MCX#x(_3J+1~^jku=bO5$q5H4WD( zxTfPe71wFFPREtPH3L^Ot`=OaxMt#N!*vF(S-587nuDty*IZolaLvcH0M|lXi*TKZ z>nvQ0ah;9p99-w(>cG{BYYDEUxR&8sj%x+3^KkL+27ITB>w5zkjjWp+$cueZg5@dv zjTZh!;L-hoPc^cxZRc&tfuOj)p+-sXq&}v8~CyO+aL$iZG#*v z|2D{B(q8Rcy4Q6c{SeoWT^HhhA?_FBelhMQ?gcWLYeVc{@pP;e8 zX6=1}n6_8js(mQkXEPhmm)KRnY@!&hLJ*-3}yS!n1nKv)%V!X5AISD)@@q5so!OoYs%*)wGL?{0*RpJ3AXi{*QJ2NGx2T83 zXqWup(7;mst;*>G<80|1nr;hXo7eQsg*u_qK}($ zMJ~TRJvfN--ZY&nuS`#o&09!IhYEwa?VW=-5x!|?P*^8teFe~mu*$iVAa-NGaa4x-4 z{f;@aX3-%2ys9#yLdTrhvu3tWz|5I|nLQq(YQmPtOiD9!%$YZ@gc{&nsH#|~AWF*= z#5fLfVMs8-o~>MsIdg0yUC=($j<>fjfaKeyGZZ@7=i9a*#y*cM=bPzW+LtT9mI|~5 z22^gkoNZB&#e(@L6jWmKHs6J_P~v#xf`y>$9ooKqH`LqJzcaTj(=m7U0>}90(b9Yd zT~|DFk7M*5b5WB@V$7X83wg5^qq*}GZ=3NvW?by`g^M>^ZM?f*{PEH1O*RZJ?TN)Z>;0Lf2&e#2ah6)>X7V9)BS5Q>0TBF|5g8k zLU}Y{pGr#6Lb@{3zh!VMbq)+<`g^UL@`to8=SaXqgbeGe(gOqVaYdc1%?;&yct9=4 zK&hPH(sW;6VO>tjmL6kCH6E)(IzQdtixFkbP(P**Xf_tp!a3y>Eb&VaqN8P*p1w4H zsY8@+4g0F^TjoW*Wh7fFbP9A|pf_HY?iQ2{nUV1=S;^e&xF2MAVDY{t~9muFFS2CL~O&PD9Wi8D2D>St$NmQ8QzM{nfGpv=6sWbzl~`Y$bH z@;nbI(%Xqk^116|3Uh)aRvLOqp*XkcDoDjI%3N2(sktm=F_DEYLnyuuIxmudUh;9O zw1LHkmCyBuKj_2UUz zUwSv&mU2J6?2*LLFw7p%a!Hsu+73tN!0dzUB0Dses>0cg&B}*w+_k$rt7-~v zla1`n(4LKjA_8pLoXD=X@m z;Cl19++fin)tIX!#6)8ed{uU^W8nfSKzS?2v0~cl}=~- zx_H{XCIdt4!HkyY3aU7`$m_~rW-Yoe!}jyohm{0U2_ckcO`QwGNxkD-pxrx9Xd+4%OkUVywIf3Sxr&Nl4xHagBev4@|D0A!zE34uX5~~?YmFsey z`8;}O*YbW0BYA7pSuO+GI>)ZkYF^80ve4_G+KclS!7!z&=VO4s7)$ldX^bbtbXF;x zP(HXQNDagyfkn9@+lLW}>`{$b7soS*rA8MScVv3beAJYkV`zOfS0d~UU?sVfXBMS+ z$taU{MyrWD$Lz_REO_%7EPVQ>eE|XCuVuYJYjZHXqSv)l3+*s(r}xSDETVT6M4486$!>H- zE4~^tR4B)W>`9*mFTHq`nj#7e-pkeSFG_%$E&*){PFj)AZ7-iHG1kIxy(;=5PAKt5 zmIuE$4}(tk!Eaz@xqXl;XerA!2IT`R_hoGYaCx#eZX34^)5fJ#p7c2`W$D&T&$e|~ ziP6QIRX6BWwp-fyd8|`ABBBf%aFmY?A8Trh`{kIJWOyboTPTvj2G(W<*|Ker{g(rv zuAByu$IoFp<}8>cCSjK=Ji$xN40p=>kmqx|#3E#{;_d%o}{8qxfp(UPAytMwK46pDaUb_9?Q;A z=4e=`VE>FWOf0ONjS!75)G1yyr9A;IY0EX~>#R#fnsbK_c&QBEFNyjK7iBq7F;sOlJZ8pk5jU+ zcY5cESNApR;S(Xl*9lhl#8`b)!|g+pN_MuL?2G?UhxY zT{h1#uv006qjKeW1;7vUJWp8_%VPI@sB&|5i|TP|#ca=W-~sGi?~D8UcCXB(dwI;@ z%BZnZ=9`?kf|Xa;32vLX$19GWEl760#gyJXFUX}vUWXx8`6snUT}iSvnL@5_r|3)M z8idaN{|m^PFW76%lKt;CwH2N@X@N_dunoH{eY@4lyg1%scCs;@-!fZ5+1a!@6((Bk zb7)n18;nnuQWjqI%9GVtnE;iocoQB)zgu?iq7BDOq!i+~4mAUjffaxLvP-%Mx=Pow zOkZXT*5?W_n>u@~-J<-v6F%MByAfSlbLU~7hy4twIu@H`j#EMjWXLTf-5oix5;I3v;wYs ztF;W{OX|}avYIpFZIe6=my^SrZFY}^<$0Dh zp5?$sL3PUsd$DvV{2@ZgXKPOP?i`f}~O@^7ET(K#HQBhlF$oh{K> z9L1xZ3|7)Sz*TNaT7@nw=D~t3wd{tyY`b__?3*Dzk2aR?5pT2>{Aw$9<92y8!kSV$ z5XuNd^0LVim*LE(nDKmJzd(e9)cjC_Y~F0qv~e3&6ST2^J6Pg%AN~dU@eWWQ{+)@} zwubTQN-HIas)q3n$Ozu)7^c~{lZ!73(Vhb+F@t*sxoz6>01e`OBo4QNOE2D28c&%eB~oKkls00%S;|9vRYRT!eIPnd58xQs{UY+7|8OYQf7cC(c2EH1w1Q|J_8n zi%^DYW!4$Dby2fy4XleEl)V|3qGL-KL{0LLHi?+h7t6=6YX8+p%}HLiB5Yn+HbB?? zNRJPocDtFsIUao3iyXJXmR%E)h)K_{S{IxK;{*jE*8APWx4Q`7pBNH{KNex&KVSv$fbfUp3Cs#?Eet%?qhmHNO4@$g7}OwL`GHo>A4YE^j!x zDt1YILw!T^(%Aay*wtD?xIU;7(^?prV+=$yrKm}QS~W4Dkx{YM<0UIGeWp;&(-oLi zx9#dyrxF`<6g%XJRYzBG(T*fTo;Y40jze;ViZiR~*lr6Qcg5ZHA~56XxoQpdvGw&~ zW`>+P6T~&q2QxB~F3s!pMzpfG$nj3OQSUNh)vhFgMAyL5og{(lL9FYIcq829*XltK z#`%SCIP6JML#z(4&Xf(vRS%^C_8LhoHhO2+n{@H5z8-&T1oYvkX#z$bZ>%oX5Jnt? zT6FXyUJVB$_~%NI*OQ{?=*J{H066SUL5y0cDy`WyFV@lzylVgDXn#e)*03BR#VLil z#;VKkHc+lCw}!&KPYuWa{-c?{y2K5s!ZnpCQA&xHLrIUOT8Fia+MuDR&6Kv9C~Rep zfu!51PcZ4JcL3-&I{L6^xk=(5lkk8isWsH=W>QBxSL?ncRmVm@uf>+50boM9(&=I7 zRQ;es-Aj5b5gYwZ7`a5@K@A52?4LpCSg~pgr}9O?^!pxBZXz5z8?6_KX!v9}&_Bkv z!WrZ9OM}D`VP(Le8=onb@WFPxvC&^NlE)9D_>LQ4wbyieWA))!60&ll2Y;kw^cR7M z=F)`}#Q4iw;c(3Kp~uVrSUvtFV@Xs%uLn`Y^p+<;E2yK}L{-p!dOiLyUiEPKt0k!! zt^GT&`h;p!C3VB=W+lMbAR5e7bi;i^(6)Z41fepz4bba`sFT%-hQSRYpmO-&#exYB z9eD-L`(Ed2!- z?Qy8$NpFceh9l?^<@K2gR+*l1FDXwAY6XZ6Z5g_j*f*IV$~R!Lg;M`+}*~i z(d)R^_)PSBrivm7_&Vv0PVzifaUG9{><|!(Q_$+MLRx3KEduKnn`cLo2E1`u=~C3Z z=qmJiU8Gn9|Iaa>>B9Kf5Nq%XNkep%$K>G_-7=O14;C~lN!jQsIHXv0ScmFRC#KkL zQEV5A?a1s$=4uY3mqsB*ornPihz^)posiZ=SJ@@Qd9WTZO8S#5OE{W=oQ~sx(_m-i zRlX@47OTX~)R~rrs74uvXr`VEXjLQ13<72aCqP}3MJgT2hyA`^;F18zzh@QKoS)1prqomH9&L!c-Q zdKeMFgXc+{+iOal!4xx!2DT)yW(PKQwiFZM$w8CbXoxk%rKQV8=X$ph9X&83i7`P* zV9gYOWDS(lf(6(!V-p$;Nl_u5*fdE=oft;zbwkG#NDo*8A3K`{%mA#~fg!ZUf#{c0 zg-fTZO!YJ;>9{_u#dMvtn_CsZ*jWw7D5?TWtK8!&u12Oh*~g!4#v)FP@%s|PMEaQ7e$cBoY$KFP!Wv{7$# zHM(n{SmwxH)**{)AvQKA)2R{8&V!MJ&@SRG32`z~r8H_-@{QH=f<=o*6jP4dsXPxI zyM$#PyClY>5Y&NTLJE$Ni_`JnL7C*{RZMuY8Af$|Y;agec^iZXf!7Z!1K#pA! zM7JMX5BTcXSlWPV9(_A(@K7idMKm94!%oNYb1VxHrT4IR&BA9bFfloP8}uxC>})HQ zZ%&l)tocrmTgX^7uK;3W891MY*i4L)=%dvQ;Rc=$VxY(H8EZi6W17nqmsOot4PyX# z0^JbAFo|l6evs=S!);TnIw13k9nwHdK7`y?tD>%E8V_V;ug{`jia0Nb>9m5pm>(bm z^vp|LwuE_HOkDu8e~jD;0Z(g9T}F_ODLT$W=*50i&mAjRg5Z2W6!Xbkzzfy&ib|KqSdFb*^H?h{n>7x2O&@o0 z;O4-?fx&?pHOn_p8p4y4Jcv}B$%jxldoWeADp5lbhFYY)NL9mk`JPL)MP7~#bK4bp zMA#gPU^G)FMOKapA5X2xzu`xi@q2jsb3E2h&<@$-0Lybq?Nt1iw$W+w=lEn%N!o>^P! zSQZ(!Psp&nB*S*ju-(b99U1B-WGHnlb)2Ej$xz24KFYxns58TRU06bh$PJ7=%E3z< z{63O&!#qni+Jrm)eQl%3_rK^u~29CLHvg{`BbmFz#MzFy4CTNu2(HczaChg{oS>ZX7%`kx@;J;c;sWFBZ=unw^FmX>5o2l`60=rUjGOhXk?gNUAZKv(h|# zt-?(KYnOu$c2i_v+!1WNTTpUF&1)aJkHkkmG&W-bwK>$ktv`2NKY8sp54)G1xnWyo zXSP3|?l0uFZ`fSmF9U2C#M>JM2f#jxO<&l6!${dd`;{f$VzEUkY_MbYVemE_2KUGT zOP}+Sl%cBQ=ITV$D>cP)>M`bL7o}c`GYs z4R%@wJ`2^1T%8`2BXkb73NK0FEo%qX3xf$%bHWS4?@ruGoczUieEsS*P=4#!UwotMj_|5P=0Yd zT>d)Y(sxx#IgeoJE7;KqZzHaFS4B)<6W+ov$T=^YzB|Fod6>KBa zq0Hn>>$E!?p7KR}q;1@3_e3$pv4#TsC#TaFBCI$?rjAL(D|{|MdRLJ{M9~)!US`5R z53bYxq>M}!%1*`$#&WajO9JfK#w)_TDVOUrt>f{bw0+)#&7`&hIk#G%$Xn=l|TfvMh`EpWGW z&H(!zO%=TMVQ2%dZsRa?yuy*;s&Pk#r3LxOu$zx-2bC47D!BX6u!cG}>`ue``SA9( zNMESpq>^*PLAC?iH3?v!8xC=bGb+}V(v_VemP|bIaz$fkv2k52HsQovAz-~!%xVnx zzy%U>b4b@;JfzD# z%fSl^ajFUB zbFMZ}a;_F}=Ui>5t59;TwhB<`xmv(w=W1Dol7qCdiRWr3Z9!XCIy39%1a)G{P&aWb z#h&8kW3#Mh%ksGS^zDP}CaiAl%m{@S&JDu8=TCS9JO>xKNuJlY4=eGejO7ei_Pm*kSKtqfwt>z{yshbF!7u_^-^4 z0pwKxTYp#iG1r(~iqp7-z!s^Se3nK!k9`W3Em(vITec3v;#&H*J7-oKIq&h$tWG-K z8QCaUb0009l5mFKvIG9ox<&px>{-P*jxb>zge-M9g`%J2PQyZn;CIm|P&Vt=BPUWr zY9P1HvC81$uw|;a0~NKUL?}PA>Q^T#Ig55~fN$3Ke^|A)!XwtP%q)Zv-(;w7o`tPr znU>|i^{NTB4|!Fcd^kO-V(j%$gYzbid9@aIdvRfxYN#9rSRiAyMOA(PwWu04+o+=` z`@lrCgDE{z5w!F!77|p9m7Un7*s>^Wl~qr>8KMd<@y^w%&vJ{E96vSs)!{G%>KRBgrR-pB{snek8lQ=_a*}JUf)YlF8dvsOf&h7+DkM?M} z8Yq7J#H3^1ys7W-T@?=>!kI1M9G^4Vxf$!p^Y=vH;IaiDrVYydMR~X?`<_!ITQa8e zXGAa)lFx|LR+0$E>V3}n?TQpQzwMC$pt|B=tDxP7n8r|tt-SVOtEzEFZZG^_ToK@< zCA?4Na%rY+u5_6z$Epyl!nGFHRk*IlHF_%tKjh$79Q+Q!*ffs4b}@Mj(~GUZ|F6Ak z53H*w^Jnh8Y0@@H(~~rhHm{p^nl_I%eT6{NCy&#HLR)HEXbYv5LV1uX(>xGgG*;HoWxQUo6?y1TgR?y|q{o0)UZx%b>O{^4KiP43Lx zdHm*^Z@&3v&OFWl!%4td%;psBUBW*~W3lpzc&xmJf7R=tWGr6Z)=oY%JIL9KNDJs^ z|LJg@!BH1GaUfFYQvSV6CtblmCIYd76PyLt0({R9A}&DHYBJVxq;+hrj|1WYGB%L$ z4j3CZQKZcrd=YtGOh!8y?wuFloGeJth};n zMs-bHeX^mkskx=Kt$k+4tj@0PIlc4dFIc#!@3j8Y&saRLWa+Zy-r(C0t>Z;5N6;p@ z^gcB08Pk5-5r=|sxgvi`js0=hF(*c=X9F1WXfA86W+OmX7_%x!myee&U)~H+EfQ^R zTNN9IKd}&9GXxf0nJbyxnNW+@XeVZt&1_?XQadOWGa=4qenuH~fjl$}1NUh-S;TJA(gSw|ZioO4V}WQ0j#Qi%Q*&NC)v30|8O zvvn*&6L<-@;W2Ws|CtPez4hAyRIf=4@G7yy znQZELNLF7`U&)3^raKJEjsDLQ*zy6QiK*H7y5|F6PSKoNHsYe3$gOz$u>qnI+Lj@* zDaQ4wrNph?;@%oINR_%V?1@5pmfuSL0innj(EjX|4-VvuYUXDnFnxYP953{GYkNC{ zXyRsdk(K2d%6f~}+u6G$I&7=gyS(=t%YUGjZ39{TZhs{kaUAwQKOUlh+g_vL&Ngf- zfT)T~1a7f~YrDXWy0Ep{<;^nUQmP>MX-1M-OE}^ZufM9l5edBhx&4cf!0TVuzuFO( zdi@*vw*&~9whaUgxC51JFhN;N$sma?8qE{+lpkDw9%-nRdT*d=pqfY=Xc(A9Bo6cs zEF}^LRt;Q0Bo1sF*cl+PdnvduBBo2B0wn zaJdBl;n_u*z8e5%xo4HLVE}ZC(lR5&ZqY<3qgoUoXIupU&-LoqFaU0df~zb5-!7iX z%<8KFu*zLk$3`T;)nfwGTmyjB?&@YX7@%1J9(?9$VlD>LWFp) zXl0HHABGzvh$EoJeVKG{H`a>625H$R2rMRUHaf-!4HTAg;jtEAo3db`$ul8Ic7(8M zE6ukcea+cGEtx`hDv^i7E;9oTTKq))egtWt*FJ^H+1{uI7jxQ*k z=m_~iZ$rg~dN@Ahy`$nCagIn^p5_wyrvEpJDrb$l02@&H# z$$YLvH*D><17k<{J0)pW_7IcUeg-neOd~*c=CS!fhQPHW`_du zfR+sQ)a{x$i-E8FI0&qh`!O`Q1g_a~{{rfP<^D6}ehd%fy>M=j`!9m?J~%Ix`_bje z`{CRp_rIGuXSrW~6yHz4`vCp;I=;^Ycsi4UJb9-p@0@Nd!_&?{fx**HSe~K*XY;f} zK0q*cx$-W+uw`I$Z|7Id0~Q8So((fgev)ABb>+P?j1>*@$uVJO%OQff&z1MJ8Y>!R zXiS(+`6+_A-<9{HP;40(-2?lD`jmyq?t&q2U2>RU4!H6_ld%W}qgm1sU0nAV?Lt$` z6tw}SqsoREI8VsWWQ-`~XGND5sL$#2`bSW@cr40I6q-za201s&1Klh>2L|MUmGJy5 zJlDtrTj2a0oO|T~^c*BU2ju(k-5-#XZfdBWe880tB#p(qsN(E1$bOK?hR|5DbtGHk z)Vx8@0}b*4nrfg{OG>0i9;7UWT{&E5EauY$qfNt{>JD@2AZIxt-5&kC?I3(SEbF!; z;)#>m-f+DfZqn2acgkUm%+dIU&z8e@E+g&@ZJwT z+2+WHsB90r^5JS@1=yESmWLwQ=hJ4`_i&AT82zrF#a#J$%HohK4?$YlV)kLq4}#Vc zX4mIAi&zA^1jcB(VPX(KJUBE%9-$gY zrSfw#rFyhlK8hiUpT#`+1Ph zCm(}Wm0tuXhHhv~ewOp)A%y zC8!c}!X+5VDuHc6VopZA9G)Q$n|e8%l!t@$vQR!kSw88?Cs8kK1?nXu%SSlN%*N{H zX6oh1YWZZaUKYtmDT^bnJd!jPm&!I)tZ?=Q4~ayx%C@{23k-} zV?EL!kF+4gXFyN4JaQU0)+6|VX$|=$*qh}MJeyKuJ#wWyvIkDI)g$kfN8|?r)!#?7 zdh#ipnL+il6<}UQNgj)2o==%!-c$ARDZBv8m$1|1q9Y9d zWrl}t0Nb;N8H?qU1asV#$7_sbVDwX*uTY+}F#eMaWYRD2fcy%Ey7E=PvqkU_+VIp$IE(Cw3Ldf1GdPPo8vk`bYmu+=UGxSt3Z7HHWhJ8*PBUfKYxxrt+0`^B={upx81f6#|)Gd^&$PJkp~?X#r(CjoTBn@0&Kdm4D*B9V$3BK z2*Nt~9YQH6Q3d73vNX}eQDFK6)fLgztv_GLe+Iy$ay6;dScZ(C3FfeLMS7~RNEOx?EAHU5BkC%9rABn~v{tv6$J1Ji3B*ooVX$@~0BThsmYd}< zIA^KCg>XIt=OR_Of~K@o;YwAwF~{uFcM-f<74FIr{5=F;p$c!b6^qA#gyL{Jaogs-z;7N<{k1`f+=-XDQc80f&m-y@fTbc(z^&WEQ|oF57OEX5>- zo<@HJkUCZ7kJP}cP4aolf(}?B3$}C?A_M;UOn8wAJ*`en3qo&}FA#JU4$uRdt!U^M zP6=IAr>cU`7s?+KG*0=~G#QJb^`oC&fASggV}>_N9Z6eDs4lJHz=Vrv{Ycfi3JbW} z(r98nYfdY6mm46O1j!hz0%VK)38B=vs; z&6vOl(q?#y5hO~mlSYuL%~fqPjFm2d2(}tWjB^C3+Nu?{aAK)Wwe_ere*}rlF5{t^ zYIjvTS~**qbfJf8R=UO-ssUyf_pcpAssl8$g&i!qfAv?FL}NrlV|APq3%ILY0`=o} zwfWrDc2uhlP%ck+YF3S!)e7gAJT<#U&4zP}r#fp?XE!`Q?5VCA)dkP3p6aeq-IyMm z?Wvv`)#Fe60RD3MA~CnuRlT!}6&DMrFI~t@eu?c%U(||Rh=o~N4KP>8mk4H_tL8Nt z%fRUVLBoKomn@9mEuer}!vbdaPC}XQs`+S7Y-tqDlmJ1FIK_SefZ<*-fGu#T!Zy5_z z-)hyjfz@>1#j5YJKxJObYP#Q5{ZP|vnNn*tZCN*lnntPju$sopIZlT}uw_8BnzkTg zsA+&)$7=cvSDgV6wjx2sP}2a}%X)ONs}@6#vc(`lHEp>*9yPtVMJ@K#G~lmi_yJc9 z0G=&^&r;LjEXJp%2U^sCR?`FX)WATXir&R)dWox+Kuxoy852;`Hp5e>X_O$vYI>=w zmO|yRl`er%(-v&JYI>^cGtNrYqDm<;!+s5SA7)26ceBN&bRh&UV$=poT326BbkX3#PPUjZ$tf>bpd z^pJU~CG}e{V<~82NPje&3ZV2q?xku{NgC>YsX79d)`d=M>Qg^_=h$h1$L*IvAq3{d~23 zM|7yX3&A_p_A7G)--+O>)%KL-FA6K)FW)5ord*Y3Fc!_CgcuqVE5SI+M88=w`yv>} zo5YD>sYaEWr5To*ty1%IkOhXN7OK=hj$kk>wN$0fjt&M#QuyBz9V$`e)Hap!hc;B? z56C}Ik)^97o@Ch~8KU_!mLIKyB1UH{JlTV`ESd5-B<5xcl|#aGA#zPB*$LKQ(oJ?L zi3uZ`bd&u`o|U5{|At`vugwws?+Cj<$*nnp{{z97D0xM6FqkN>Qc|kuVEGop<*oP* z1x4pJ`A6d8kgJBE1=)(=qtWQB*L}u>SeBbhLo?M7c3BaZh8C%z6`D&!XR4uGYyg*r zE>J_c#Nj^?yiEe>F?-NhVAPxX_?HH73$>v8;RP~LG--T$sJsv4lalDf8boH4sOUn%KsvGlR9{H zj^MWuyhk0}7o_t;3OdhIBd!{$HCCuLLv=?drqDr0w*~#c$7O5A6k~>3wJl(zPK}Uq zIDyP&s}ZVZJPVI3R3l5HsRsK;maCCmMaDDp$VN4?Jv#ALgziuyIpiPD)+1M{kyLbA z385OfQH@A&NOw%6MQ&H9(RZm) zDWijlZKLuQd~Xl(?GA+%Oivwi)v=_pPC5R|(KImrJJz6%QJ;*aaja7vJ1qw(82=qx zs*atRBN*eqV}t70=ICIs@Yu!b*xq0%_A4xBdFmNgJ%eWtw)lC^uV!o?%o2PQ998&C zlX|9yr+c26tDadIME$Tz5bF0_^*zWGTX8WrCW!8AILM!xfM{*%dzg?(OXi&_pHQB2 z)pK3O!srP73XrH1k4Bn^sNL#0jONlvcd1E)^n$Bis5MqzUOXt{iQtdC;ExHxANj!_ z@pvMhz(4Ff90raj@)L`Z}U7+r%r_O{D>-|JYR9uD+`T9QlXEO(t*$@kx<2mx=6jE zr(|9^Prb4^P>#uYj+)|llS?K~N9EB_JM@7_;V+gSTNT@cfC=V12{wK2!S`eMLNVQ= zNu~VThdYUN(OoN|1P;Y9 z&o*0T>Qi=HFMfcpijWX%kqZhI=!)|rAje|n_GTv!3;p9i=!eea9I;t!qo?-lV|X@{ zwjUxi>rC7Zof?)t`y=XiY9CnIM-Lz_)4s4wyoSrQ4=m%;h<=MGfn|K+7`u@VEaT&1 z5JWz(tj{&t=Nj68ha+(qnt~1a)|d7?gbzTW|04ug8bLqG-=KYO2*wx9XeV?UgKASZ zOOgXR@lD@IIhg3&_(K(n(+CP@FJbn=sit}Brmkx@SrE7? z_two?H-~&gi>go+-nzuPBKn0Sc*J*9rMJFtJx&!-go+ApePTWCTtWbFQLvkEfC)M2 zgH6VRI0FwHRni{&sE{qXLE^}fNw?2L!}b#s&3NGC5B4kQ(>|h&L_32amJ!wtHN;7d zyv^aGK6p<9h$KQ$&|)-FI`k8IvZoV2h+&W5_-aPphGcqBMZx+A4f$v-#KFM^qL1!m zMBwzK#PDG4pR(cR!|4SE9*#X16ov-92r?&yGJ;6?*|S68AkGh4F&uLqD2tp`LSV@3 zsOjF;)~$LMYk-_y3Yy_vQEftSr(lmhGH&tcJsGDs zF+`Zy%cM%A!m;51Yat$-VJ%l;D2Sxa=|XcmN1&4PCW29a;nQ65Zj+h3o1}AmC!y}q zY3TS8r$IZMjdMm!H4Yqs>~Tz~;+&320EgM=(NFV1X9qp{YPxTBcVLz;O04# z$DFm@6N*0gs0QaDc!D91aoV$|r2V6QLAM^2;^=4qYznlz!5B!eKm{ zj{VN`E~0Fhw*gfH>@Wde#~!LPdIE$?q{L&xTED` zesS(D;l;fuyn?+bdHZbfw<>TqiXiSs2_(>u!kar%mK>xI&Dh#$Di01rM=$s8h|AqO z)8S%~$i#!g#A`>7MhZsvY#gs*pYh^O3tqHm@+q72sRSp@*zY)MgW=G~S`vAz33MK8 zGJ0HoN5^%@VdK_fR3St;x>;MuiV614(GEW`InW1Ue9wdD z^bWnW-aTr2JnSHFWN7Q1R_YW%cTE0Pzg(%mYxea8bT_A_z6+1Addpxqaj-X4Sb!)l zP{n}(r=;}wlxp376z|jmEvMeKh<$)ml}BkqAQ)?Q3O;K+pQVPKW8dF%Hqvv{5|L7i zXt#Xc20U*AFirJ>^?V`V`D5z|ht6D&O?e~=qIf9EG|k7JFGDCChR|mDQ|k$b@A)(9 z`7_e9Q9HJDdpoMz8{_MNEwW_M*KFXCExdSWtG#rqJgQqIyh5!K-qb3?8;EqPJgQqI zfdpISQQazS3N#tr+E5+b+Bj1z^3s;Fj3HhjDx1EM0$%9I;}CG(TZ4D;KrRsz@<2~# zTEP8%F=;6~j!2sQh>ppp^mZ66-xRLp`-I(J6HXk@ei#7~Cb{$$n~cczeJ6;586dqi zCme+-MRU;GdNRTqkuJTFCme{vmg#nI+`*M@f9CEY`6A2DaX}8VI=oQ6WIf?9p51t& zLfbix{Wiu+vu}s-hHYZj<0*?{!Zu#|X$y&2#(7s!<2Dm(8_8|d{uM2^$FkIM(?Rj1!@yE=Ch@jrJLi}E+`sBqnS&K(_9*MHE*g_ zn`V+5+lDrEs7*cOZh?D_+T>5ft_FA<*~&LS<+ftAtx8PMR0=UDc(S0?P8ML74XaUD z_!P_EGKb!9Ip9bJ=_nPf1yYs2_{jr1AQjHjg)Tj~)U&)za}F zY~nxQVe>Dx2>VBy%O4|iA#H=k#HKI%p(106@=q4yPrkHgF5oE$0fh7oN718murwjm zKV$Jsp?)xaT^_SOwV+feu17v zyRQ_rDq#cR@RunRM!cG0I6}(~YLX3sBQLKoSeByTkK*8uDZw8l!5^5hFH97{h$o8U zi7D|!Ndn_#n+F_uxHs>2G;OW-iMYWZNIW&+vZ0D>nj&3Df4ZL9P=+oqffs#C&6ip} zw|;6+`cL5$ga7#eM(l}*E2I2dqQZAeg>I5^VhhbpP3c=Q!Z#NL?=&#?3k5Gj$iCPh zeFqd@{zMmI@V!g?VqynZQ{h^vJv)QfUA0ADUb5=qt9D+0@lIS6wd=}Vdw0ES$8|IC zhT^T}HSK&s!mhnH(%n*YV}f7WCUZAY;Kqi|tlJmN{R(u05Z?x&-(Wl`{q|=6<}7`& z)p)M3;`f95uVf~NxoRrvUMao_D&h{R%*&zlT~243E1c~8OOY2Vl_8dX4fr0qNNC4( z*X_Fcs_|VqRD`5H<<~{s29$A$4^;&6x_I}lOK}}d);%_%8+p=~+GO1QlYLdsn0MTS zZ=`X`(Qar4k-GCl-h@~p-zk{L<|H=D*qnwJ%Es~#G<}8>tE^J&aQ5R^x!*(yykP71unf?IBx>pEnHYs%I(-i1<=n#PzmTNFzgcXwBH1q zIt>U6jZEV+=pwu$IEI0Y5CxAc-g@)YA5H4R`vjTfDIgdZhQ=JM--&`JZo2S-s@|V} z$h@l)w|*leIvo)LY_JYA(@R9zHl&o&4^(4JK*dAtBQ6!W)KEw-GtBTxkXNicis|I1 z{VT=}u3Qwsb(^}F=2R-3Dq=Am_QMCi@j^@d&L?sUtQUH8?G?imikN7FRJ?^2Lp~FLMSP~e7?wfq&GwpSyh=E;si?PG=C4*6 zA2qGpnk^&;^0_Vf^!8*=y1zd+nB0^}=7;)|+5Y6Ri`OQ%=Xx`3p^$&N#d`H}qLrG9 zjF0Nw7K)BixGA7{iIN(TuCU)Y7x5(G9eA^J97h_<&42crMv-piaZ!hdC?fwC-xjE{ z(Ustvw&E3E-5LceCcFbONrW0We_p`nI}lOZU}o1K;3HEZFVafuYLfxo-Ig!pdw>9y zsyo+hnm~+^zYe6d`f0jr1f1Qvdjzn%xltds-;8dK&obyg!4g1JA7)e{g|MZyCXd&E zqRydJ{VBAezqw!_^jl~X@jy+mWryj#A9yX~%R$%v)~kIvAKr0y)U9~d+zDn{&JSej zF(M=GF>(O_Gpmez2*u=}E`Qu;2^sll5j66(0DMw<)RO}t(~!6JilEorn?3iIzyJO3 zicc%}oLLPjnO>U;}urB$c`vYEc9=TM5$4Ql4rJtOFPP|-~D#W*~nCm=_YDyWR+xscJ+LF1IJ_F4Q3Uw?q!Y`=MVi%|4mD zk~Qop%Zz+&`E5=yjWu^dy;^fy{yPqCa?(J@YNj=MZW79CHS%yC1I_u6h7kGD-dsiG zsRKrdd%XC3eVA*U$knmrcxs!GKgD*`JWY2Mn$U90vsoWP%j=21xj4NrozcKSHiet7 z;;pXQ7Oe&uuFPM`WjBHkGi%XvNh#pUd=KNnwj3XyWzx+k2bzvD$3?pU)c94Yt>^25 zTza6!pZv=11s^wuVQTK6x7F*-O#>$sY1D5rCiPr##TAOeWe!6$cM9xUib+PZKFAV> zYAq_?u%D@*tuiW9V2++b9sRj_tN!s>9{M~)0;!U3KMOkq-RXW~(FXzOL9eJosUTo* zPbfizOkevpt2&ESb7sD|H$xu*RxF+%%*raj!dS zN-d&ZdHpSsLbq%IVNJ6OimdsY#_boM<)+Wz4bDpbdsu!}^qnkwz$_8f?+W=!z@Xu6 z&svh7Wl8RKDak!iw-Q{*pF%6K;BF5i8R%KpU2uL-26SC$1@95K3b&q{$;GgHhA(14;c?g##rYL> zkHFjE?HPf~!rL4{t?>4az^~!$8$qv!a}`#pHfA-GX2yLvxHLaJ+sB+Vy_{{0WoR&GsbLOo(ccnKMTw3^&_HgzW(3a9 z{Z5%@mu6;#j=+VXa>h)rUid0nvBeAV}uo?Ci=AwYYJOnVc`FJ(cdn#q* zx`P6|*?poM59RTO;YBNvTMfqEthL!`E>;BGSbdZsW>RXP!B18#hxX% z5C!G~+@7B9-k^Xh5-4D3pDkd0d%Yh5tmcy1P_CWl~R3QWG7w&0kh>!&O;r?xEes zEia6jCwfE+{LfjAA%;B(o{BN@vqhwlNWl~td5X(6Sy$n;6N?M;WF@2gkfH`W z82Bjve%8WrB=Ib?#g#h`(SWJCa-!L`GACq%LBnaLg^Ou9_B45_~$k!5=-RrFqRnhCCI(oOr?* z@xO|%0-{xTeX%+I8%{)*${-?X` zPIesGc-)gVcGDTqJI~K56;nFi>99)~$E=ys-U=C%IT*=N@NAx%Y<{o;%`lH=xl5op zH9AT(-7NDi_HC$I1zB9Jr?`gTsxe=0tu+F=jG(53sWsrm6J?$>v)y`$%ZCrEz{f4J zZIrOxa8FHkw`gv^%P4rb|43&FdJ9;K8M?=CrPi_$b4QZ#Cg4%M=`_>oNQOuH_i=iW z*<8UcYVMR?U3pA~tH+S!uar+8MuoV|D)7{YA);ze58Z*fqurveLX}jBC!DEuTo1Va z7I*G4j$&cdl7ctlarz1%W;W!nVw*XROEQ99Ayc#oZ)!dAgnVIl*aMOM0Gji6pCCWa zsaHTQ{?l_;f?np)aD_aNh8#SPhIp7tdPcD7OwD z*2%9s*4~ys#baB3e3pwa<`B9e_5heE_5j$3Q&+LPu#?hsF04G=Uc38YRLzQkte+8Q zVu`oquXf6VJX{f8uW-E}*ZZBc6Rh94HqQFJEnn=p;i-}4zv{USwz5tGA(V9rzdR#N z{KBH+RC#+wPM5baGF{&02o}~*Qd|CqB{DP_wr(J!5Mb}i!L{YT>BN!F44bdjhnZo; zoet2jEL>j}?PTlA0z38P{R)4h>igVQc%rp_Yhy%j@fhfzehfw^gDc$Z$82Cl-ZU}G zF4^HCf}XCn^#s#kJ*D^s1J5WdtmUp5QD*cWK%1syA0EtNMK!K6d(Zf5ufEJ z#0Y&m>bVg!GstTe!@ni>-$ zTI-wnn;~QV7z?@;)wmwzd5qRz3caXB^xvW-%yBTUfK%^d(Xsa-UAJ&LMgo{8%Js>f zJ%(VEJJVG!UNsBO{;)YUVu(Ei*aF|f7HC)oC^mVsZIduMe~6d-YI9ST{MP~($J)&8 zHGNTcAt$A)dSb#Se@YbIxKNUdm~1-`%$5^nh@5BYE-@EtiAqa!tSuLy66ja~v1FnP z^aQUs&sJE>ImN!+JbxfeJEMuhHm;X$6#DR1K4xMXX2p_b(o4t(S)=-p4y(a5BZ{S~ zD+NE;f>KcUXJF0R&%5RV)0Nkr0kvN_8&wYFn~tw z&kn8}hFO0Kt`X~%9DI?#=Kk3zHlQ2%{|2`loRWWJCagfu2Yoa!(#FvOoR5Fx430)U zg@@37=)drpEg{|X6&?Z1`yDB`%9gmtI|xSzx{-OH_vPSm@Oc2=35GcWb&Sjcp6wKV zm$^4%3`TQn%~!he^HHSidbOJRu+U*FSW_#rsZ(ndO4ewcpN+_my>4DRod*~LHs$~< zdwvD@du{}2eq(BL3Org;HvvkGB7hA@>(V*3A`{9yD6-k}gf;pw zt06ZAVi#sb=s~#2WMH1m-J z%`M=UX9P768)6>|=JKZxOX4t7ie>R2XNXND^kL2+#+dpr7(zw=#KQ8NHICevI7Ic< zFcu!Edyw4fcDuTpQNrXK7fDIHXNaMV*Y(&hR-fXG{Bux$v+988P5;6f&oy!%#XFGt zJlLDEbJ9A^$RA^aycY@b1up2-OFq3tsO2FYwgk1n``8igABB%GYVwUA=NDx8guJh; zP3=cS^?NRCRLO{MLI;=twi@OB#JYj;%3tA25NGr(sSEUeAL!6Ni>DHro7j&L`67LJF0sVn-uH5H9;5Q0S zFhkHks_4%xqn{@9jC1AC3QYeEi~cc1-%&KcuocfG$chwV zA~%+&QsyuhS*!MUa$i6Rs__ApD5`y$Y-ZMp)`z}Q^MeHpLX_F8mh5z>4>hbf4l zwaqQxZTXH~SHdCH0!j3QVr?ZPgqYXZQ!swq2q7^Ii6$^DW`=d^muoCHS3z&NMj@BG zEfl}mOJGJuE#8*N;wuvP1TeACveFWPUk3*_LC~Prk2sm9ExeOIB4hd0svFls7A*pn zm`Po@iGmP7d*s9=`=w-eZF8;iQ`}JK4?dnt%U`LM?QL*w!=jC@;4D1X=ST$`#fXD+ z9%G9($~ebHe_+|1Wuxbp(N7Z_VVq;5Pg(SqjdqpMD;s5;W1~+q{ZC+{7XS+zy^vp? zk(K;{jjocnXXGMz8zUF!9XE8dB4Lk;0mP(jX2bl3! zTD}B}5}dHG%~%Su5)wiz`-etAaL@(XsfPTro8 zOXY2hT*mJbJ2DAoKxirWXr`%bN4J7zAv=?W7}D5|q_ANwME0qbrAS$|s;FTGl%=fF z6~LB)ah6@&aK=mQTWT1SdRg(~**`goMadx8`KpI<`f$ip(>{5uwy~~jSwr~Z% zJR|G*1zWgM-kuSR=dgjVv2md_dH(%byp;_wO^FTILqdzMCDXD|OaQGf?1!0qN$X1~ zwW^R|2Aly-fU?%-0Zybb9+=Dn982U3aFQS#?B*5Lbt*?fh~XK=w=ZX#(7ud3nf4uD zW?5nHs(nvX^7!`U>W>@WiYn%oJti$HW5?USby1a(E|i*qnBTvkqp0J z8=K|r8QH?`)YnUF;~}#B2Gdlwjm<6H3vU7){D!a}X6_}nA*Ix+LWUVowsD58fD+q4 zRoHQeIK~488wZO7<9M>=2*w3TkX*KL2yZJPA;c5M1jy6|-%;ZrKLbmh3m0uT?gY97TJyir*Oaa~1|%c& z!;uR5*&*rW`eB@-ACtF$i~7lz(JTEh&e4z0qPO%@D5F>UVVt9%fJOferO!d3zrd~+ zgQ{NGyEwsKM3i+mBzaFrmteY`Hr+Sb{;;e}!76yUwONV9`Y<&`oB# zT{hjmy}(Xg8MNvOnnU0P`#Q`lWlh))xlYHNIP7jcC5&&5sc#_( z2RM>otq(I@?%N2k&4uc;G?$=c-hPA`wdMbhvv*iFZ~qQbN1tR8`YK8tfhe%L8~NoK zfu|IoJ1TF_$QZw^4`;HTWrXwX3bSa2XJSJSUn1q(7H4$Qv7}>$yw}J4`OU>~A34AR zRNQN7WBt8{$=D9QtLhT)+xwtpb(zhyH`}x)uJ`x2-rtvc=TYzXA{Xj?3%@)gxALoG zU1HG3(FXjd4>JkI7B>TU_-)|v;=wk>%$9X6*_M8Nm>H^*^7Ys{6}}eIheD+U3>Dxf zgg*eTwI0JsDd7*x2A3Q>Ai3A@~b_;^wMEUv#L(h`*24KMG( zs-0NbOJ@b3?~8Eo-25R$&E;=H0`zn{zdR%V#4n7=?~}J@Fp0FCnf7SrYX^z ziG(1YFbfi0$ogG4%<=0M!h!Jk%ths%VjW0nwW^e12GpRuU01-5K!dL~yfJO4wV%i} z$;!Zh$^e5CfJgBFhG-Gn6sge`KSw(WMu_Y|n=>rrTL@6BN@W33t&kL(T_Ty4kPt@J zeDA}k!>On@?{#su$t8PTo`rC3XnDq;sBv0bCSjLeZ<$^}u!+KyNl{_2A1vDhQ+r^O zDLt(Az@C0*al)_{-mf=!C(POl;|7;8KY|+ZpK3PeJ6kixv!|hL^ss;9mwN;Ye4fnn zxHBL0GsHF+nffsT9H>a@!%XVR{RCk^ALcYO^;3kYpK%n&F@BCWc!2k_h=KQW{Bn;x zukhu(8Ck-cNgdvtR+;ybwHGYW_;ecn*i3iMZJX8BKC6B9BF1>A58)GM5}g81#s^jR zOhtU{U_RTw1%n*XLst?l^8!=*PqE29iskei$%xC^F8$n;(n<)P;xhyYO(|Ux)`P zBiJqe?3x)=KurvKmX08NL*fZd(+pauF@BH6`27-o9ig90{U}nK^ghIABJQVA!Q7*B z>Jj}B-A_M8XwWgx7&OVn92UAb-XZZ-60VbQ*tOYZ(5*=I(*rKf^#j3=xTRc#e)@*z z5xqd4hZ8esp23uF8(hj&<|F#ebTRyhK_4)g|AXeoO@n@8a;`cr)67F?&`n-W{kWI$ zlYNiqVVdh>%pE>13+%wxvaZ_%;AR!-Sj)$aCwdJxf$VQ(r$kXa=ES$m-|tKe)?R9YcU&M&>*9VF_%}J zS!GbRYKh-ZdlC236B7OwVVK^mVhwyG!t!{cED5(%m>!HW=euIed0$-Wm0)fS)$VG8 zmQ^#&`w{x-^_rj8_-T19bJ$+Xsl&CL_cnxn`j^_HsF7;Bd+HeTvB~agKYdcd_t$gl zzg5q&UD&|&{ca;$3+t2rdhmFZbtQ@Rq5cZm59pwE-v;w<==XqX;O`z0E`LUgduS0oD$rjn=<@=( zU0lK<`d7(Uh3-3<&Y~{~)C#DP7SmS+!hv9#MrYF#0zD4sG&+aAA<(mcn(16RB+#pX z+NcBHlUQmUGnP5ji5|~#)&QDDE9eITodW1I_?xE$!skqIIiH>u=xji3@GH*qzRq+JSVKFx2xf&LrNe7YVNRaxo)9R5W# zjH{>&B>}CW8)&-5S~?q06OGX6l6E&1(_1nA;IPvqwtA;?W)3FdQY zEvG6Ox@*4{cF|qH!2i~M4!-+=`fJ<ojk_JE8n29E3=3^Wcw6Hkgm*W-jPT=)?JyO~HQ%nj6Z((iEH-mM{4lMOvfu5vS%oj0QKkq=V zVf3FgjVYg`obN5Yil$r80iW)wqE-cYKj-rTT4+Isd|^Nx7Idq5msUkrSkMc;8vu1% z&>scrQxIHD0{M11&}3JH_E=D}f0`>s`z$DfyCE^UM<5q8u|rGHet~M}l)!ne1U)3s zEwnUnpH@R(w$j!HGOijrWTkZ@t(Km$plyN20KFj4&E6*hV}RZeXob!itfk;7tcl;z z4+Fn()zZBV^q4k@9A3WRJzAXV=hVhv;{GjBz@VTJkOJ) z?^$WgrHP(*(%eQ9%{rasyqQ*ovslNk6zECsj_~ccYTu_Ix<33ZK#y8!kA;73wA0Tl z=$qlYuq0WBg*@!VTO-hb1wAFu2Q27!;Tu5tkb>yX;r|4e?^)1wRY7wh{mFu!s_Hct z(K=qdzy`ySe=#v%v7oxhr_B!D@{zP@kuR7_sMUg6BVRX{(rOD@7CB-rr$Gx^6Zrw4 zCoJfy$aCg-^pXW-B7ZQ?r#?&vxx6o%y7wa5XF;Qpg!f`=ar7j8BXY5KHEorp(v$S> zRo9to=%@uvj-KvYON(bJF0-QdX=`bn1uYh+&w|buXpaS5CeXbWv{|6XEof)-25|YA z1-)0&UR99y2}ujKNqJuGachb10&^X>SFNS<9cZ#^9c{HB?p2r3Z5G76>N5JYg1mw7 zr`%W25ewpedj-j*9<=Sxqw{@N(DXA@2|q;7xq?<((CXkk>5UO^!W=w0$a#24debHc;zq=E63A*w;&=0zK(9 z;x}m5(rpT&+W3pUYiXYawZ>of4bXlI`ibfF@1R2#v^4JZ=jo^gt&Zbo4e0j@^1_4p z3-qc5J!#&j73fV1>WMSt<|Q<=I}m>j>&}RRMDx37k_EBOc2UxT*w^i%Rx2O3$}U>y zK$Bg&X_*Cas|?dR3*uH8rfvm^=0~VkAlAfE{|Ftl(taD??%zX?TKU|GPilMU2@7I> zy@!ri5c~2y^o*5{z4sn^!GhR(@1d70%2&+SKuNs0jCNoZ)EGJV1+itBT@up!(Cn&(J{&`fl|vgP*6z zEht%29r_|oU!W*w)?6C;2CcN9*HbZN~4p&wG81#PMMLg+^{YC*Tu91cBA z`z+{lHC5q%qem_1$(nP+&(KpA6tDeU_{a1FZ|q3VnOF5w+911AhkdWq-lhGFdKIM2 zpR~B@XVhmwdnP>_{u%ADpywtXF@H|?TF~UW9oo-nzXi>!TT=CNI%q*(tlL@jJiTc_ zp2>@={++zo0V6uBoj>_zKoJG`zBPG&)h{V!LG@GiSG_4F{EqfJX{#eI(@}xqG^t@@A==Fx5ME*#7EU3D%KKdHnVL`0|?Gq?EX>nu5c#R$s zNX>L!qsIkWp}%5YgM3evQ2vR2=1^W6{S&?9P(BcSomQT0*Wu~t|D_EAF_&LQ|4e;O z+S}1L=msZkTI|2*UMFo;?7!(DC+)`A|IkxT+J|Cq(hE-7>#@JkTLN+WO^yGRTF>Fq zx&5w-|DE2lAZ|a>?m1Vbar=>W#Dboy-y0|GDGPeJ{%$~j5{NbNbd)seQ2DqHnidg= z)83BiTGC0I7ISGGPTH!NTU+g<-5B#|15Vn9Vum*Aq`e+9wfzEd9X=NKYR_9~Y=dF# zNGIWMh0b-T(z=%@i0e?L-C;p&gH_r-3t}6r(w-1VwPuxe#7cX`{6f4+dqyDD?h)flIH^-m)Mry;i$tS+Vq5?T7_&>9yKZ7R063YHtX{Jdea{wdu=kp3lbX zwHGXic{XUfRup+QXa_Cmx%&TzH)s!8(98Az3FsMtxJE;IgLc$P;~F(;k@J`fm-k=s zsal6XYz1awy7s08ae1d|`_3SeC7crP@L#ZHKl@>u}Ppi7wO57f97;xz=4mxm?>?Lb+TU zD4|@T-Bv=mLi>P2Ig(hR-BUt&f%a$#7ifn{C@<8WFQL3pJL*sdA{T1E zFQHtiVOtJ=%34=y5rLHES83CowC_eP(&jp8-%MPr4LWH%w6)p|PTDhxwc2e0DNU@? z_6x*)?Efa#Y0n7sB=P)Zy>`@scy6;^`;!HoF_qH@%Nd@ZbxeH>5HD^R;yKZJEn-1D zUs|tC63B%Tb^uBW#C5nPx?W2Oq-42L>nNeTQaj(F3|C*Ntt+9tO6x13yh0$oms}BI<#f~mtOzA_2UwQ;y!yX;yEv>~Jz`yYi(#ENXyJ;>$k5H;qnXcOfE+w+wY^m5b46$|-d+$ZrN=rF;+g3UsOK`ou ziO`K*dX|u_QNtI6%C`F7purbb(3oPM%2tn0uWXy`+3vHY+P(r`?>&@8XwWu5#cypPmtFeF)1O$MMSrDXmz((? zl<upBo1$?WBhv%y6859aE6l^<3gxXaja+x$5r?RiQgsM9;oMB zpGK(B*Ck{;{8$5rrSS))#bdzpccmgt8!$SZCHN(h>sbjE4NIlrdk2R%Hgb5Igm+4K zw}kgd_;CsEm+&(ZJ|dwiSNV#^fpKI1pIfa|=6A=FTSR#VH@+Y+Pv*>Dlvqxsjph;= zPKN$uq-8!Dm2y6D?fy}E#rYrAiOR)g>BK(Mmhd0tQ!1^p#@~w$|As5i^Xd6 zhNLQcE6uCy=dY5>H1jF zmL;AeMzs%{|E$$%jGuv>^Lw?~#5;~Tq`3AE{-x|B!w^F2CDbmgsZLHI{)fP#-(+YXru|e>?65g)2R%Zjf z!nsevr?5yR-#UpOk@%p*KZ5#xFxV%#1|`HdD`;{L!dF6fNZ1Lz-R?V}zg4q7d_Xs9 zvl8wO`zTO*gV@y_;m?524(C(>^%)eN~TZUz+@k=W#7O`xt>k(ewcoV{O;~s?D8gEB9 z)VMe57W!q9cbQo7N{O$O_&SNNllTUSzae(mEAb=RR~l!>eXgH2-lx5#z0kNw&k}z} zit0a|vNYZ&G=mb}AmJVf?~rhxg!fA5*7+O!GO2q|XL~y+_=M7)&h>prF!h3|2WDw> zHt~0x*|aqNNo~5$lC~IJ{6h(|teim%0xM{zbY< z`&ajif`6HQ3d)ypDvHAw=}dSh6*6Aa81K@q(ln1tV?I8O@jk)(gtEyB8Q&!M8A3C| ziZi!Pq3INSr{KG=!!YFT5=@t1(n6CKOj857LSLU}tV z|Kz@1@V5*8e!+i6%KD7pKO^{W3;z4U`TK(ZzTjWf?ssj`UzF6Bh1<)L`m&_D^qbw# zhR#wgMfhgbsLr(>)mcmX^*_)Ru0w)3B$#i5=6#W)!1uXclsLJVo?J|ylz39&9TM-5 zc(=qyCEPFJAqkI4_@ax;B{%a)S|M}mka&liC;F}D#geHSI zG#SjHQ!t%^=@d+taWhVlrUjoCd|L2hf*BLcm|zYF=73-h2r zGbWfZ!DwNTHZ0PHMOwi$38qOfor38UOs8Pdf=LS|tuR&0CylSDTQF~9K8Nw;@J!d? z2xAUM7;{W8#{_dsFilaZOH}F-WtvXGbPA?ZFloW01(O!cm|(^PGbR{!?4!s#UBYD& z9+dEigfB_xjth;1%OpG~;SmX6lF*%CnmrO8l<)UX zvrI6(5{?RfRPcKQb5O!Vfx#~EVyN+`u z1(Ouabis58rb95x1T!j_QNbLN_#uhYWZ^cMxgC=DA&DQA_)&?|6rq{IG)E6pqiqY@vL_#ufOk~k$rwj|SZNW4Sh`z5|#;zuQZRN~1drcX98eYeEBCB9$c`z3x< z;zuQ(oF??sLs1#1EayG>1-Q zn&fFx)@f3f#78CGeLCa2PZzwzM9{IB`<1%45@KlsO>7Ty((cn|gxO`Od3Vr}lj?FB!6oiKpac@VSE z5N$dnT?e+jPgU(Bajv-%suE`fn5QbYE3_WD)`hM? z_}&;(-tGNY?7BV>V;LTnaH5{(UYt-R?g3^; z;-3)qH|&eBR$b6-0B;?dG!cfNT^-sCAgltU<90|D!Wt|KbjJXkzQxK+bcSOg1fT;*);`F_a!*iz~oCPYKW`jyc3(Y{-j@u_Xe$RC#!j+)X=@O*t zIKSVHa4qhK=(L^|AiNrPK6L7#vk>;;R)>yDV&@{{DumbJlb??J1eYM(4cO4jl3-DIGT$6<33Iuko65!@{bAY7q^5H7~qhX|d6m3M^ZXmNxcS~bG?IHM53 zt%5p)OSCBnXW@iFgqCSjHQcv?ep*nsC8&RvcH&meeRP<@y~;t?(OvUcn^60>OJ50Vc(m+@A#kce?Rc! zz|*0B56ug|5dMAmzrtIqK3w&^s%NT}MZOmKf06d+y6Bf;XT=XB9!~s6Vruo~>i+7F zS3gqy)#_hVyGQxUUFqMe2JfpC|1{jY;6E6!^B1LRSQ_uM761D5b70r%51oU5A(uL? zn|F@wDMN1J5ixv+>Nq(~f5@o_ToY<5_@bA)ZBe z&ct&Tp2c|1#&ZsybMbWG>BO@H&r&?g@GQr(0?&DP`0ob%P8Zkr1~M91H#d+M`=SKP zQ}`P#{Efh)`vae9WL@7VyUYX|)T=rFE%ehG&VLJiqlW2jp+kHz3GZ*QTJa0z->6}_ zJAh}pJAh}pJ8*iQ>F%H-LbuoAw-@|?rnsi#n+SesQClkT3{CNwp(#EyG{t9zrufXz z6rUF4a#^t_1vPVdS)$r*1~6jXSuSPs%KW?-D{$47Qb!a$MSE3989+j zaEOjBrn zgZFO%zir-03%wttYrJ>UKJQ0BXHvlT32O3v7Py;ekMDDMK0zP!e}X=QXRr2c8V-Dd z#sZtQ_XT3wUTv%P;o!A+eno4;-v<8M;Qu!DRu!}h;stG|=oO;lUm)C>?akzuWeV9X z{h54QZ(kp+Si3cyA6N@SdT=P8S(YA5w~Z&Xh%O!&%x=$KpB~KS`YY2dUX|+|>dTx% zYj+n0Gu!FnP1k0625EbtCztQbZnF5at=m12S(VAL<#*<-4{I^jUn{)?_yKfidJLqv+q9BW8eHgXt`4NL|Z!453Dw z`ZC?K?aWJaeOBfIb>SW`xDVyieGVn9OK&OAMd|IC!ay1_F~=gxq!~gphePynclUT9YYzk z_L6jgn`KpI`zBRWn|jX7`IT#98PJNM{+{kRbZLKf(9SY@=3H8tzJ53OSw+sDIgeKK zaZ|3y<+rB?2XWt zCE5O7@K8J%VCCBl1;b}c&f7+I9`1{$`>f7_BKo*Y&<# zds?m^b*V(uZfT6GQm9BVry{l@H_B%U5UykPeAZwI&|V76DFtSi09=r=TU21dY=R2< zdO13mQ&!l}LXxP|KeIE_KM0bA?M$-VhUSw*g#^ZhfAeYfBB=+=iu+JD!Cs*RT)vCW6tbZGutO%=1joM9*h0>^ncJ4>m^*ucWBl`I zX+DFlE1tQ>G5U_Vs7WO;=FXjkyjhFU+twHVlbYUwy*K|Gu&(ptUD7^(k0tU#z>`v*I@OIfA z9##6XJOc0!P82ZYL0=o$sgn8$3Le0E(u20&SjYeVtxB;SJc=x;L$WVT_piyMds!I# zulgSp%A*PUR8oo-(v_M1ErVOBb6_CT-)p^;KcsazM*vB@I^cYL3@mM9&`RV>%j3{e{`Z0Y#v$2>K&MBv0iC=;c9WBfB z^riWiIz;)_u&?^QWnR=|5jM(Af@fm&o=V$l-yx#8!eeYwaK6k ztL|Ef85;(yuEMg+W=y?$c@|}7u$q42T*RK7I8y_sesivX%ymVan#)oa6Iu8&gyQR<^CAi8 zB_F3s8(4f;`CNbagZ{zIs=sy5gEbB2)9Z2rD=`N4U5rsJ4Tn=uREo&ylVv&Q(#DNa zKc1lVrFXM!DfiRM9!VSx!|VYqmxP(4?Qmoc%s$9Yq8_*{5!cFVJ1K`?9KJGN$;DP% z=IEBMDVDqj6TNIca|ydZ%nW)vdoTelOl%mdTE&De(K&~f&IM+zDxBTetbF*!UAxP( zs;1yJ*~s2pe#_^)p)CAgp@4C)Z#S(N>gy8+V`Cf{1Qld zcAAY@+bQKu$0<(pod=g^4_(#@lE*GIC(u0eluEG=w+21YZ!wJqWsY58WmQ~4Vl`u_ za$T-7pGWWPTHcRgByX)c%Vj`Y=h#(R&1-p07J402dvX3E7^YP9d<^gxW2wG5jq!w- z&MJiy$_Ez(sexD|uqan#`!FJrJ*qM5;&=wJ)aWAPj!e&)kD9V`46U!`N`$=utR$E6 z%%T)88D-MWXf=`Nm_3=31#dosg-^fq6(p6++?mp{8|CXPp#>;+hU>Owu#;Mv8%w`U zxm}j$v8FpK($MM_D02Dsfx+FfFCZZNwX7FtZ4QQ4^tzU6p&jP!^gbD%Mf9$MDAS5B z*^RDf#aCm73gy_4J?XRHr5CSKQ$&Hmd$}6^MG0`zC7?~gNh|WX?d4M?##$JzS4CgM z2_^o>^57TeVbJM5_zlb~w-0g!EoIrppnQPkzN}3EE>G6RZR56K+PIX;lRn3#EZv&v z*|rWVF}irO>IS{ac1t@yk9BHCM3i9zj`FeLV@+-Gz8n*i4A10c3q>;6z}n0pTec0d z|8fA-mD3>d_&H3+oCUMQBccDtyg{z| z4Fg?FJkDV`k|SL)UgPwE@e)zjI1D6H`!W;U6g;lelT_3x7sC(FsYMH@Hl}?x%91RNoD|v?stNZMi0Woz=;d9tLb0$&r(Jb-GWbWeXP% z4R*A*&#%~USQ}$(1%+z9GCm^exRTUrRf<8f-Q4(oQo)mBkjwSS-Vu6321_&^=M)2b z)tluRyl}fLhgpP5bhu_qCgIB1d9bx&C?3{$-b7<`+;Y(+TWjpy{TS{s;dKg7JeVmP zwnfFOiQ-C}9NntEU~6b~uArLPNiS;=tBa~8P>e0(9w&>1#m6n#2XNZnf=dQjQr?L7 zaY`2UPVYSN>fR>9W>487AO8kZ55Bcw^;Wjjr%e+Z^pc^RT4-UiB3s+bcMaqT6Lo9Z z&bH27SDF(G0a?+BbA&>7W{{#{QC&s9bqo0r0~-&r?>#ve-Qzs@$C2qI#TKG28PTcmR9X`{Mq--79nH zULG^JGHUFU`6g$sVC5Bdg4-tU@rt8o3zD60F{O9U3v#KE*I|fN{z>goSCVW^rjYB~ zDf$w*2BEY6{{ph+3-(&GWdFNOZG~q}THw+qY{PC#-)^-sFOIjEoor0!x6GDMb~dd} zg^5=C99os$2IG^Zl!aHl@?BV8uUw*(F^B zU8QSTrZ2Mv>vM&eO`W~gZc+Z-37_um-H0x&x@Ly9%5GF1ooRb+r!~ELmz?v$qLlf& z)vo1#;8?5$D!hPNsio}|Yek!~trYEjd=?drfjg(&&t+OLp{s&oLW=>Xdd&FVI8Mo1 zFsX3ZOD~9yAy@%sF2^cEeRo-x$3CGwJ>m5LVONy5 zPjmU~7MWM`G~3!SwLAFI9K3bO-o_TymwC~_H5G?m3D;E+!LvO=1qGLYCDSw{IP-zc z@;%EM&vM`_Uc)X4tA4fU=OUS@8j$gAU;!pk`0dSY)Ugp;(dvWi#7%$v0_XPe`}Now zm%VXrSKfhXm+EkAt`k$6tc;U6oX{>@=*f&Fb9&Ie&Bi?8&_|;bI#_jTH zgf*phAe0e^*}U1JY2!AmCTL^-cCf^8AN~vU;|x$A z{yP)LwuW(ZrInIIRl_&~GJ-Q5!!#Rja`6L-v$}AGXeZ^+W*N|BserH_@F3m=a2mjW zIm!dhV1AUu>7xvw3{IBNdYdkb_8dTo8N4&dZPT6yXb|U-INS;@y*Q^do-&QJEYkXM zmZT5!=Pf9e7QGYaQl94{S3h`j`4noyJgx^kS!N0_WW~>VC!TANf3tAmJY3s#I6E~U zTu;TRnpvpxLY#sjlOeokUu0=IiCS^(SnruK4W@zVL)vx1kIuamsjTPIA+c(u(*bQ3 zX_Kfs({4h2`he}noAp_M3~AIOL)wgskj^c0e2rfU9WO)MqJ3N~IP7xb927`HPkHd) zO_aL`WvEtWopDtgZd!l8g1l{nD}M_IJwNg)){Q7q>M_)l0Ns z1>_t8#Ip4x&URny+eM4z^wV)Zt$?tNw5v<=Z5O-eKCe6m*L^3r+&5Lx|I&cgmscwiC9_y{>@&xW%CJcPvZgEGg@(cPi@yUgy%2$!qsM zyJeR`zidG{v`r`8gOEH6pE86P*M*k86IWG-CD0f9s-g{K!9jUyT7PmpRw4gC==slk zC(dic0$CEaz0wlO#(}ER6pVkqEh5WC#JE;iDPeTjS+t1@$9pNZZKX-&2iZoGpl2`5 z`EBpRmchQUh@-0qfGhQQm3d`Q2iA`AV#njm_%iOH((-BazwCxr71#-;yp55^aLS@x z1d&-$#X+QiE~%Qh3!T^=`mt$%`2!2C3|=+#nJBy;e0a!VLCVYMEmQv)6H=EVXFp12 z6C6TUQUmcBI6ztn&(iQfct#ml8_Sazdq6xJ)0rgr@pOSZC*bN;7+BhHl$za>Z5%XX z1&%(mi^WDRQrC*hVWoFUKAx^@0v8N@Rmx4rBTp12q~btFappw`uX8W^yy;V72yqfdVDorGceV-jfwl zI!54Dz&!3tYD~17xj5Hg%Tu#GHV?a(V%C5^4>D zw;R>5kQPgLA3b;DP0^qG&jdVMi_P;@<1TIN?1tF9kcw5~*S`RH6%?y>2$t6~syf!? z4M$hSE~#&*Z-`zRTVEZ!T5AZ`2UTKP3nO!kfoP@_HAzsbCMGm8D%N_uWF@B06smc; z0<-G1UA^j5VuOxihdi>$f+|yToZjTBO~e3yk2iaD?3GwGv!9T%ZOFGk^~Z6150<31g;0Mt~cUDxXZ8A zgCLCi3*m6slca`N9bla)8<49WN(JmSl3Hx^&agM>;#Yk={;d(vhohzm7!RP zaS&?J(T{jFT#Vp9SBkuz6h%irCgB0VVRs5*)IwEh&8~T|mVV$>`!7fPD+;!T&4MlCHwADmm zD{~Aa-A;XiNl(24K)=z^hegXx691Tl2RuowpSvk>zf23se z7lDZ8(uEYn_?NfB;h5<|kC*>r_4qFtOQHgLJ%}Qvw>$w_K^@&Ds)F{@>+uicRS%aR zElJI2?cagbCsd;3zC-F~fvcFwrrMBV!&d*4iLEj^|!sAwtE1#3@@cK!~Gq&w+Dqr$kv8jmZaq;l7PC+3_E$@wK6wI04ln+n00!|^I0UGFcb zBaarf$DxWRy(R7-?ui?5GnVw$mkl@#%39tIs5+v8aQR73%*U=fIu>e(RbyZZp|>?~ zcN?oluj5|hGtuvvDvBiF>!de2$@5snbvz=nLqIG}L953KX`Sh|2&`9Zo*hXV@Wy4O zOHuQptI+3lkzx`2KgWEg3*%!$tidZJ4bfE|lZRV$%UBjXSkSB_WuvR$kYd$g9jZf} zm}0v{v0W&(BeNfwt2vBb8ig2jA_f#7I$&mXLRuGHWtR-+!Fs?b=})pO;b;bOI*tcU zgPoOE`KEAKtP(F%XId7b8f6%wnR+guRm~JyqpMDjxIB$8fJJ&78bl}t!EJ!rYmLCh zq4Gv8=yw$dXyk@^!5f#bBpS!T~eDuungUouX(m zxk^C6GSC zfucC*VMG8Ao+oi`uPJo~Q_LtD*pk4S9oX2}QcQ>^2Tg9HA=VU^mM$Be>)l3l^uUZH z#snpSHB$hRHBe3q7GTeeO=vVEMTK}`(L04INV;Jzx!d>}(n^1F&ibhR_-Z zqF+uGE}g0})zh4$IK{XR*jN>Gb1V5 zk(HrDdaFU10h^wB+t51Vd8Tc9(mE4)9Q6I0sH0TVsaXX(Jr{++16Jx(B`O-P%``ez6PKmWV#_%( z17#<61{i~gD!CnTotogna?EGhEjM_8ofdn8d9k`6v2z4i4PPF>+k-UNp;m?XBoF)3 zM!nJ1=&pfcnIn5yhb*pz*w~y*r$#tC4@MF~yNJ6a#LY;R(x_p{H&)LJ7A+o8OgV0+ z@;r3x5|(-Fk{FXhPzQzyDL6(hPRIWa$|N_hV#1TnFskcggTq3~+aN>;yxuUbaWjMg za_o{Iy8YOCz*on{(gs}f=-Xj~heDYsqWM@Gb~=`yV_AqOy@$PP7Cvi%iOKQXpl8uz zXIrWKa-xi9&3A&_LdL3j1rQs{!1*-9W@3~?AFXZ(H}HHA13iY%SOZ!g(_F5&tm?dK z7z4-?=!PJMNmOI>gIo_8ZkuA&0hw3qkOpG%A>_VV6?HY!cpxi#eHH~%#CbtXrxoPI z`~VrCXI|>ECCuYu>H?VkW8_u{cv@@fGJtEn=~4#nw`zf|kczNc91~V?F=Q5#cONWK(LqMv zD(N5*)Dwu}aEkXA+#Gl~FgP%yX88t6LwItM2a$?1`49?c52k8XC2Aa+TscQHx-*c(9$jh-| zZo49n2%AF@jArVj$VyYHDK@_fOPqw_T3%F*;$4o6u4=OQD3@2MB(*7o9$9%kHQ6ex zf*kc$krk3+tu7;xgRCG4}z zGiys7%Ob<}2^qGRWZ2FbwmTWNBSYPU45hB6jx*Fb8R}TXM>#kGb!K?43rh$Qxq-1q zIe3YK-$#;em}kj`9AjVQ;7{BN;!spCSDlN!VwNr1t9F2}XCfR_s&s;=bd}P*JJrpL zy_4%wJ}W?hV{Q(-uyu5_lKm&u*Nd5X3xl`U=82W?kZYSu-4yVJe2i1gWxeKE-kB3D zlc{rTr4H*R%%SG_q)%}$@qB_Pc^Q3_r+J>=DzCc?%7p1GgErpvFqIzF^-d=E;6}Uz1~3t ztUxd1U_@cbyD!IPVOodMCaZ$lDx9hel;9GT4z`_ibxVz;;;~B?E`Wu~e)1r}mF635 zxuL;M>%wQDnvtv1gK~w=!B*jr6i!(?uwEEUpqdj72){dVD{=A{&-nV)F;G5r>@OZ_ zcJs01c)>m+UP9xX@Gj`vH)#VQuy;Di$+v5nLd#gN<&QrQc>c+n%Xqfq8HJoANbWoJX+q2zGSBX~Y%ps)z|}!dv)&oO9Up-3eaK!{jY-+)(h^CuDt66WC-S zx^$&NI>#sL(MEE95XUAboF%>FUDfeK9KE*hcW>G~nDN?YRjW%|+mX#*JSrb5yR&Fo zM}LE*2k1@fZ2ac`%|WTHZNt_~UtjKW{2EQ~29{D?ciLR=IRHFw*-z5=i@yaBhAv8e z3&00Z9m4e5*LJJ7@HxcsS2U}}U8i#4_Lx_lFYTTkA9qKGFIoqes2hoLK+#|zlMj{s zqDY|R7e%UIA?kL%y5blrJMCDfjx$!c+#ZLp;|ebrXaij6G?a@g(nF~zZl0{bVY(-$JFI7OzeNyIDsT!8ehB8P~gFCx6mgnb@d zr~Q*MGFd3Q87~;i&8lA#V9z#Q5$;X7T%T!Oj}N8o`yOm2wH3&@)dD5=;!W!muW8+j z_c{0C1ITUP-3~E3?%(psD>~t#cB0bH6M1o78NNP~H`E1ePYzurA1wW)BW<0Dk&Az; zC!jRJYa{ZbHDOLK(IbQ0jy_Ddlx#ld{<3!y1|%jh)w$UMcU$KU zu;0;C!E0ZJHgI$sm!abot_)X=yD}^-$XABld|f-JtWZ_K-H(Pf)V*PM8s5)`)7v6_ zp^B4A?hOao4s6#XfPHT`#3|0GSXW9{c8gdt@yN>+jiJTHb+Ool8*_z#b*Pxt818`! zKo;wUv1brm3RUH7qyrQ?hBeyr=;sHaN+|HWOm5`*B;-`~I_i>c5HaVHuD^ImmwT3j z7Z&1R)wp4^5R}M-Ikx(ZDl~Y|0a%W_bB~Z&T1mK?#eT5lCNC!zK_$IhMy^JJV^z+* z+Ca&@TEv}uwV|#;$-UYtK&AI;0hisYWf@8?(#9sYHt;S=;Yx8KI)P8b{_r7Gu67aXt}gzeM; z*bu{Z3IxGTKnKK?RDj|_ZDvgF1zzqDd2snjrjoGC*javw8k-Evx(n#mAZ^5z!ix6SU)?rv&OaFG~&T1p)J^r25Nyob* z8wG3bqs3bi&hT4y!CzXp$e)Kjt2oCICajB)r4FZ1^po6aSm+S^E*b^OX8n5PMrue6 z<#$&7>SiTp(asI<%liEvR;{h@h;=P93t_}J8R|FB!q&A+ z%W~j))dbszysAz<+#Xdi_Ijwnc@xLHT8q2AxUfq#R1O0ykg?jLD!+hQR1KSL)KQdu zVWQf>l-{WbT6z}?2`a|QPV7=_SroR)s;AuyQ3aQH=W5kwxy4GZpBjDg>ond0OF<1M z{EaD3A+w`uXMVo~cifDbU%M!OmMG;)JMNo?1gGF~2cimm~_kA;S?m73Ko5nxwuFloGeJth};n zMs-bHeX^mkskx=Kt$k+4tj@0PIlc4dFIc#!@3j8Y&saRLWa+Zy-r(C0t>Z;5N6;p@ z^gcB08Pk5-5r=|sxgvi`js0=hF(*c=X9F1WXfA86W+OmX7_%x!myee&U)~H+EfQ^R zTNN9IKd}&9GXxf0nJbyxnNW+@XeVZt&1_?XQadOWGa=4qenuH~fjl$}1NUh-S;TJA(gSw|ZioO4V}WQ0j#Qi%Q*&NC)v30|8O zvvn*&6L<-@;W2Ws|CtPez4hAyRIf=4@G7yy znQZELNLF7`U&)3^raKJEjsDLQ*zy6QiK*H7y5|F6PSKoNHsYe3$gOz$u>qnI+Lj@* zDaQ4wrNph?;@%oINR_%V?1@5pmfuSL0innj(EjX|4-VvuYUXDnFnxYP953{GYkNC{ zXyRsdk(K2d%6f~}+u6G$I&7=gyS(=t%YUGjZ39{TZhs{kaUAwQKOUlh+g_vL&Ngf- zfT)T~1a7f~YrDXWy0Ep{<;^nUQmP>MX-1M-OE}^ZufM9l5edBhx&4cf!0TVuzuFO( zdi@*vw*&~9whaUgxC51JFhN;N$sma?8qE{+lpkDw9%-nRdT*d=pqfY=Xc(A9Bo6cs zEF}^LRt;Q0Bo1sF*cl+PdnvduBBo2B0wn zaJdBl;n_u*z8e5%xo4HLVE}ZC(lR5&ZqY<3qgoUoXIupU&-LoqFaU0df~zb5-!7iX z%<8KFu*zLk$3`T;)nfwGTmyjB?&@YX7@%1J9(?9$VlD>LWFp) zXl0HHABGzvh$EoJeVKG{H`a>625H$R2rMRUHaf-!4HTAg;jtEAo3db`$ul8Ic7(8M zE6ukcea+cGEtx`hDv^i7E;9oTTKq))egtWt*FJ^H+1{uI7jxQ*k z=m_~iZ$rg~dN@Ahy`$nCagIn^p5_wyrvEpJDrb$l02@&H# z$$YLvH*D><17k<{J0)pW_7IcUeg-neOd~*c=CS!fhQPHW`_du zfR+sQ)a{x$i-E8FI0&qh`!O`Q1g_a~{{rfP<^D6}ehd%fy>M=j`!9m?J~%Ix`_bje z`{CRp_rIGuXSrW~6yHz4`vCp;I=;^Ycsi4UJb9-p@0@Nd!_&?{fx**HSe~K*XY;f} zK0q*cx$-W+uw`I$Z|7Id0~Q8So((fgev)ABb>+P?j1>*@$uVJO%OQff&z1MJ8Y>!R zXiS(+`6+_A-<9{HP;40(-2?lD`jmyq?t&q2U2>RU4!H6_ld%W}qgm1sU0nAV?Lt$` z6tw}SqsoREI8VsWWQ-`~XGND5sL$#2`bSW@cr40I6q-za201s&1Klh>2L|MUmGJy5 zJlDtrTj2a0oO|T~^c*BU2ju(k-5-#XZfdBWe880tB#p(qsN(E1$bOK?hR|5DbtGHk z)Vx8@0}b*4nrfg{OG>0i9;7UWT{&E5EauY$qfNt{>JD@2AZIxt-5&kC?I3(SEbF!; z;)#>m-f+DfZqn2acgkUm%+dIU&z8e@E+g&@ZJwT z+2+WHsB90r^5JS@1=yESmWLwQ=hJ4`_i&AT82zrF#a#J$%HohK4?$YlV)kLq4}#Vc zX4mIAi&zA^1jcB(VPX(KJUBE%9-$gY zrSfw#rFyhlK8hiUpT#`+1Ph zCm(}Wm0tuXhHhv~ewOp)A%y zC8!c}!X+5VDuHc6VopZA9G)Q$n|e8%l!t@$vQR!kSw88?Cs8kK1?nXu%SSlN%*N{H zX6oh1YWZZaUKYtmDT^bnJd!jPm&!I)tZ?=Q4~ayx%C@{23k-} zV?EL!kF+4gXFyN4JaQU0)+6|VX$|=$*qh}MJeyKuJ#wWyvIkDI)g$kfN8|?r)!#?7 zdh#ipnL+il6<}UQNgj)2o==%!-c$ARDZBv8m$1|1q9Y9d zWrl}t0Nb;N8H?qU1asV#$7_sbVDwX*uTY+}F#eMaWYRD2fcy%Ey7E=PvqkU_+VIp$IE(Cw3Ldf1GdPPo8vk`bYmu+=UGxSt3Z7HHWhJ8*PBUfKYxxrt+0`^B={upx81f6#|)Gd^&$PJkp~?X#r(CjoTBn@0&Kdm4D*B9V$3BK z2*Nt~9YQH6Q3d73vNX}eQDFK6)fLgztv_GLe+Iy$ay6;dScZ(C3FfeLMS7~RNEOx?EAHU5BkC%9rABn~v{tv6$J1Ji3B*ooVX$@~0BThsmYd}< zIA^KCg>XIt=OR_Of~K@o;YwAwF~{uFcM-f<74FIr{5=F;p$c!b6^qA#gyL{Jaogs-z;7N<{k1`f+=-XDQc80f&m-y@fTbc(z^&WEQ|oF57OEX5>- zo<@HJkUCZ7kJP}cP4aolf(}?B3$}C?A_M;UOn8wAJ*`en3qo&}FA#JU4$uRdt!U^M zP6=IAr>cU`7s?+KG*0=~G#QJb^`oC&fASggV}>_N9Z6eDs4lJHz=Vrv{Ycfi3JbW} z(r98nYfdY6mm46O1j!hz0%VK)38B=vs; z&6vOl(q?#y5hO~mlSYuL%~fqPjFm2d2(}tWjB^C3+Nu?{aAK)Wwe_ere*}rlF5{t^ zYIjvTS~**qbfJf8R=UO-ssUyf_pcpAssl8$g&i!qfAv?FL}NrlV|APq3%ILY0`=o} zwfWrDc2uhlP%ck+YF3S!)e7gAJT<#U&4zP}r#fp?XE!`Q?5VCA)dkP3p6aeq-IyMm z?Wvv`)#Fe60RD3MA~CnuRlT!}6&DMrFI~t@eu?c%U(||Rh=o~N4KP>8mk4H_tL8Nt z%fRUVLBoKomn@9mEuer}!vbdaPC}XQs`+S7Y-tqDlmJ1FIK_SefZ<*-fGu#T!Zy5_z z-)hyjfz@>1#j5YJKxJObYP#Q5{ZP|vnNn*tZCN*lnntPju$sopIZlT}uw_8BnzkTg zsA+&)$7=cvSDgV6wjx2sP}2a}%X)ONs}@6#vc(`lHEp>*9yPtVMJ@K#G~lmi_yJc9 z0G=&^&r;LjEXJp%2U^sCR?`FX)WATXir&R)dWox+Kuxoy852;`Hp5e>X_O$vYI>=w zmO|yRl`er%(-v&JYI>^cGtNrYqDm<;!+s5SA7)26ceBN&bRh&UV$=poT326BbkX3#PPUjZ$tf>bpd z^pJU~CG}e{V<~82NPje&3ZV2q?xku{NgC>YsX79d)`d=M>Qg^_=h$h1$L*IvAq3{d~23 zM|7yX3&A_p_A7G)--+O>)%KL-FA6K)FW)5ord*Y3Fc!_CgcuqVE5SI+M88=w`yv>} zo5YD>sYaEWr5To*ty1%IkOhXN7OK=hj$kk>wN$0fjt&M#QuyBz9V$`e)Hap!hc;B? z56C}Ik)^97o@Ch~8KU_!mLIKyB1UH{JlTV`ESd5-B<5xcl|#aGA#zPB*$LKQ(oJ?L zi3uZ`bd&u`o|U5{|At`vugwws?+Cj<$*nnp{{z97D0xM6FqkN>Qc|kuVEGop<*oP* z1x4pJ`A6d8kgJBE1=)(=qtWQB*L}u>SeBbhLo?M7c3BaZh8C%z6`D&!XR4uGYyg*r zE>J_c#Nj^?yiEe>F?-NhVAPxX_?HH73$>v8;RP~LG--T$sJsv4lalDf8boH4sOUn%KsvGlR9{H zj^MWuyhk0}7o_t;3OdhIBd!{$HCCuLLv=?drqDr0w*~#c$7O5A6k~>3wJl(zPK}Uq zIDyP&s}ZVZJPVI3R3l5HsRsK;maCCmMaDDp$VN4?Jv#ALgziuyIpiPD)+1M{kyLbA z385OfQH@A&NOw%6MQ&H9(RZm) zDWijlZKLuQd~Xl(?GA+%Oivwi)v=_pPC5R|(KImrJJz6%QJ;*aaja7vJ1qw(82=qx zs*atRBN*eqV}t70=ICIs@Yu!b*xq0%_A4xBdFmNgJ%eWtw)lC^uV!o?%o2PQ998&C zlX|9yr+c26tDadIME$Tz5bF0_^*zWGTX8WrCW!8AILM!xfM{*%dzg?(OXi&_pHQB2 z)pK3O!srP73XrH1k4Bn^sNL#0jONlvcd1E)^n$Bis5MqzUOXt{iQtdC;ExHxANj!_ z@pvMhz(4Ff90raj@)L`Z}U7+r%r_O{D>-|JYR9uD+`T9QlXEO(t*$@kx<2mx=6jE zr(|9^Prb4^P>#uYj+)|llS?K~N9EB_JM@7_;V+gSTNT@cfC=V12{wK2!S`eMLNVQ= zNu~VThdYUN(OoN|1P;Y9 z&o*0T>Qi=HFMfcpijWX%kqZhI=!)|rAje|n_GTv!3;p9i=!eea9I;t!qo?-lV|X@{ zwjUxi>rC7Zof?)t`y=XiY9CnIM-Lz_)4s4wyoSrQ4=m%;h<=MGfn|K+7`u@VEaT&1 z5JWz(tj{&t=Nj68ha+(qnt~1a)|d7?gbzTW|04ug8bLqG-=KYO2*wx9XeV?UgKASZ zOOgXR@lD@IIhg3&_(K(n(+CP@FJbn=sit}Brmkx@SrE7? z_two?H-~&gi>go+-nzuPBKn0Sc*J*9rMJFtJx&!-go+ApePTWCTtWbFQLvkEfC)M2 zgH6VRI0FwHRni{&sE{qXLE^}fNw?2L!}b#s&3NGC5B4kQ(>|h&L_32amJ!wtHN;7d zyv^aGK6p<9h$KQ$&|)-FI`k8IvZoV2h+&W5_-aPphGcqBMZx+A4f$v-#KFM^qL1!m zMBwzK#PDG4pR(cR!|4SE9*#X16ov-92r?&yGJ;6?*|S68AkGh4F&uLqD2tp`LSV@3 zsOjF;)~$LMYk-_y3Yy_vQEftSr(lmhGH&tcJsGDs zF+`Zy%cM%A!m;51Yat$-VJ%l;D2Sxa=|XcmN1&4PCW29a;nQ65Zj+h3o1}AmC!y}q zY3TS8r$IZMjdMm!H4Yqs>~Tz~;+&320EgM=(NFV1X9qp{YPxTBcVLz;O04# z$DFm@6N*0gs0QaDc!D91aoV$|r2V6QLAM^2;^=4qYznlz!5B!eKm{ zj{VN`E~0Fhw*gfH>@Wde#~!LPdIE$?q{L&xTED` zesS(D;l;fuyn?+bdHZbfw<>TqiXiSs2_(>u!kar%mK>xI&Dh#$Di01rM=$s8h|AqO z)8S%~$i#!g#A`>7MhZsvY#gs*pYh^O3tqHm@+q72sRSp@*zY)MgW=G~S`vAz33MK8 zGJ0HoN5^%@VdK_fR3St;x>;MuiV614(GEW`InW1Ue9wdD z^bWnW-aTr2JnSHFWN7Q1R_YW%cTE0Pzg(%mYxea8bT_A_z6+1Addpxqaj-X4Sb!)l zP{n}(r=;}wlxp376z|jmEvMeKh<$)ml}BkqAQ)?Q3O;K+pQVPKW8dF%Hqvv{5|L7i zXt#Xc20U*AFirJ>^?V`V`D5z|ht6D&O?e~=qIf9EG|k7JFGDCChR|mDQ|k$b@A)(9 z`7_e9Q9HJDdpoMz8{_MNEwW_M*KFXCExdSWtG#rqJgQqIyh5!K-qb3?8;EqPJgQqI zfdpISQQazS3N#tr+E5+b+Bj1z^3s;Fj3HhjDx1EM0$%9I;}CG(TZ4D;KrRsz@<2~# zTEP8%F=;6~j!2sQh>ppp^mZ66-xRLp`-I(J6HXk@ei#7~Cb{$$n~cczeJ6;586dqi zCme+-MRU;GdNRTqkuJTFCme{vmg#nI+`*M@f9CEY`6A2DaX}8VI=oQ6WIf?9p51t& zLfbix{Wiu+vu}s-hHYZj<0*?{!Zu#|X$y&2#(7s!<2Dm(8_8|d{uM2^$FkIM(?Rj1!@yE=Ch@jrJLi}E+`sBqnS&K(_9*MHE*g_ zn`V+5+lDrEs7*cOZh?D_+T>5ft_FA<*~&LS<+ftAtx8PMR0=UDc(S0?P8ML74XaUD z_!P_EGKb!9Ip9bJ=_nPf1yYs2_{jr1AQjHjg)Tj~)U&)za}F zY~nxQVe>Dx2>VBy%O4|iA#H=k#HKI%p(106@=q4yPrkHgF5oE$0fh7oN718murwjm zKV$Jsp?)xaT^_SOwV+feu17v zyRQ_rDq#cR@RunRM!cG0I6}(~YLX3sBQLKoSeByTkK*8uDZw8l!5^5hFH97{h$o8U zi7D|!Ndn_#n+F_uxHs>2G;OW-iMYWZNIW&+vZ0D>nj&3Df4ZL9P=+oqffs#C&6ip} zw|;6+`cL5$ga7#eM(l}*E2I2dqQZAeg>I5^VhhbpP3c=Q!Z#NL?=&#?3k5Gj$iCPh zeFqd@{zMmI@V!g?VqynZQ{h^vJv)QfUA0ADUb5=qt9D+0@lIS6wd=}Vdw0ES$8|IC zhT^T}HSK&s!mhnH(%n*YV}f7WCUZAY;Kqi|tlJmN{R(u05Z?x&-(Wl`{q|=6<}7`& z)p)M3;`f95uVf~NxoRrvUMao_D&h{R%*&zlT~243E1c~8OOY2Vl_8dX4fr0qNNC4( z*X_Fcs_|VqRD`5H<<~{s29$A$4^;&6x_I}lOK}}d);%_%8+p=~+GO1QlYLdsn0MTS zZ=`X`(Qar4k-GCl-h@~p-zk{L<|H=D*qnwJ%Es~#G<}8>tE^J&aQ5R^x!*(yykP71unf?IBx>pEnHYs%I(-i1<=n#PzmTNFzgcXwBH1q zIt>U6jZEV+=pwu$IEI0Y5CxAc-g@)YA5H4R`vjTfDIgdZhQ=JM--&`JZo2S-s@|V} z$h@l)w|*leIvo)LY_JYA(@R9zHl&o&4^(4JK*dAtBQ6!W)KEw-GtBTxkXNicis|I1 z{VT=}u3Qwsb(^}F=2R-3Dq=Am_QMCi@j^@d&L?sUtQUH8?G?imikN7FRJ?^2Lp~FLMSP~e7?wfq&GwpSyh=E;si?PG=.StaticProperty1 "You got a static property" + check "vlkrrevpojvr1c" + FSharp.HelloWorld.HelloWorldTypeWithStaticStringParameter<__SOURCE_DIRECTORY__>.StaticProperty1 + "You got a static property" module Bool = check "vlkrrevpojvr1" diff --git a/tests/fsharp/typecheck/sigs/neg03.bsl b/tests/fsharp/typecheck/sigs/neg03.bsl index c956b2738dd..6b6f72b5826 100644 --- a/tests/fsharp/typecheck/sigs/neg03.bsl +++ b/tests/fsharp/typecheck/sigs/neg03.bsl @@ -13,7 +13,7 @@ neg03.fs(14,5,14,8): typecheck error FS0025: Incomplete pattern matches on this neg03.fs(16,8,16,11): typecheck error FS0025: Incomplete pattern matches on this expression. For example, the value '[_;_]' may indicate a case not covered by the pattern(s). -neg03.fs(22,39,22,42): typecheck error FS0026: This rule will never be matched +neg03.fs(22,39,22,47): typecheck error FS0026: This rule will never be matched neg03.fs(25,9,25,13): typecheck error FS0001: The type 'bool' does not support the operator '<<<' @@ -92,9 +92,9 @@ neg03.fs(86,9,86,13): typecheck error FS0025: Incomplete pattern matches on this neg03.fs(87,19,87,26): typecheck error FS0025: Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s). -neg03.fs(91,11,91,20): typecheck error FS0026: This rule will never be matched +neg03.fs(91,11,91,26): typecheck error FS0026: This rule will never be matched -neg03.fs(97,11,97,20): typecheck error FS0026: This rule will never be matched +neg03.fs(97,11,97,26): typecheck error FS0026: This rule will never be matched neg03.fs(100,9,100,12): typecheck error FS0025: Incomplete pattern matches on this expression. For example, the value '[_]' may indicate a case not covered by the pattern(s). diff --git a/tests/fsharp/typecheck/sigs/neg07.bsl b/tests/fsharp/typecheck/sigs/neg07.bsl index fa80ade69b1..b768e036c87 100644 --- a/tests/fsharp/typecheck/sigs/neg07.bsl +++ b/tests/fsharp/typecheck/sigs/neg07.bsl @@ -10,7 +10,7 @@ neg07.fs(27,11,27,21): typecheck error FS0049: Uppercase variable identifiers sh neg07.fs(28,11,28,21): typecheck error FS0049: Uppercase variable identifiers should not generally be used in patterns, and may indicate a missing open declaration or a misspelt pattern name. -neg07.fs(28,11,28,21): typecheck error FS0026: This rule will never be matched +neg07.fs(28,11,28,26): typecheck error FS0026: This rule will never be matched neg07.fs(31,18,31,28): typecheck error FS0039: The value or constructor 'UnionCase1' is not defined. Maybe you want one of the following: X.UnionCase1 @@ -19,7 +19,7 @@ neg07.fs(35,11,35,21): typecheck error FS0049: Uppercase variable identifiers sh neg07.fs(36,11,36,21): typecheck error FS0049: Uppercase variable identifiers should not generally be used in patterns, and may indicate a missing open declaration or a misspelt pattern name. -neg07.fs(36,11,36,21): typecheck error FS0026: This rule will never be matched +neg07.fs(36,11,36,27): typecheck error FS0026: This rule will never be matched neg07.fs(46,15,46,27): typecheck error FS0039: The record label 'RecordLabel1' is not defined. Maybe you want one of the following: R.RecordLabel1 diff --git a/tests/fsharp/typecheck/sigs/neg10.bsl b/tests/fsharp/typecheck/sigs/neg10.bsl index 2e94ef5bd9b..efbe9b93b80 100644 --- a/tests/fsharp/typecheck/sigs/neg10.bsl +++ b/tests/fsharp/typecheck/sigs/neg10.bsl @@ -13,13 +13,9 @@ neg10.fs(16,32,16,34): typecheck error FS0887: The type 'C1' is not an interface neg10.fs(16,32,16,34): typecheck error FS1207: Interfaces inherited by other interfaces should be declared using 'inherit ...' instead of 'interface ...' -neg10.fs(16,32,16,34): typecheck error FS0908: This type is not an interface type - neg10.fs(17,28,17,30): typecheck error FS0887: The type 'C1' is not an interface type -neg10.fs(17,28,17,30): typecheck error FS0908: This type is not an interface type - -neg10.fs(19,17,19,28): typecheck error FS0870: Structs cannot have an object constructor with no arguments. This is a restriction imposed on all CLI languages as structs automatically support a default constructor. +neg10.fs(19,17,19,22): typecheck error FS0870: Structs cannot have an object constructor with no arguments. This is a restriction imposed on all CLI languages as structs automatically support a default constructor. neg10.fs(21,16,21,46): typecheck error FS0001: A generic construct requires that the type 'System.Enum' have a public default constructor diff --git a/tests/fsharp/typecheck/sigs/neg16.bsl b/tests/fsharp/typecheck/sigs/neg16.bsl index 72bcb7e0b85..c32ad022d1f 100644 --- a/tests/fsharp/typecheck/sigs/neg16.bsl +++ b/tests/fsharp/typecheck/sigs/neg16.bsl @@ -73,24 +73,24 @@ neg16.fs(90,8,90,18): typecheck error FS0039: The pattern discriminator 'FooB++' neg16.fs(90,7,90,22): typecheck error FS0025: Incomplete pattern matches on this expression. -neg16.fs(97,15,97,16): typecheck error FS0823: The 'VolatileField' attribute may only be used on 'let' bindings in classes +neg16.fs(96,3,97,16): typecheck error FS0823: The 'VolatileField' attribute may only be used on 'let' bindings in classes -neg16.fs(100,11,100,14): typecheck error FS0823: The 'VolatileField' attribute may only be used on 'let' bindings in classes +neg16.fs(99,3,100,14): typecheck error FS0823: The 'VolatileField' attribute may only be used on 'let' bindings in classes -neg16.fs(100,11,100,14): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static +neg16.fs(99,3,100,14): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static -neg16.fs(103,7,103,9): typecheck error FS0823: The 'VolatileField' attribute may only be used on 'let' bindings in classes +neg16.fs(102,3,103,9): typecheck error FS0823: The 'VolatileField' attribute may only be used on 'let' bindings in classes -neg16.fs(103,7,103,9): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static +neg16.fs(102,3,103,9): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static neg16.fs(119,17,119,24): typecheck error FS0823: The 'VolatileField' attribute may only be used on 'let' bindings in classes -neg16.fs(107,16,107,19): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static +neg16.fs(106,5,107,19): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static -neg16.fs(110,16,110,20): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static +neg16.fs(109,5,110,20): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static -neg16.fs(113,9,113,11): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static +neg16.fs(112,5,113,11): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static -neg16.fs(116,9,116,13): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static +neg16.fs(115,5,116,13): typecheck error FS0879: Volatile fields must be marked 'mutable' and cannot be thread-static neg16.fs(130,10,130,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/neg20.bsl b/tests/fsharp/typecheck/sigs/neg20.bsl index 4227ab07193..75d06ce1332 100644 --- a/tests/fsharp/typecheck/sigs/neg20.bsl +++ b/tests/fsharp/typecheck/sigs/neg20.bsl @@ -305,7 +305,7 @@ neg20.fs(195,5,195,10): typecheck error FS0842: This attribute is not valid for neg20.fs(198,5,198,11): typecheck error FS0842: This attribute is not valid for use on this language element -neg20.fs(202,7,202,9): typecheck error FS0825: The 'DefaultValue' attribute may only be used on 'val' declarations +neg20.fs(201,3,202,9): typecheck error FS0825: The 'DefaultValue' attribute may only be used on 'val' declarations neg20.fs(204,5,204,14): typecheck error FS0842: This attribute is not valid for use on this language element diff --git a/tests/fsharp/typecheck/sigs/neg47.bsl b/tests/fsharp/typecheck/sigs/neg47.bsl index 52964659d68..7653ed8d5b1 100644 --- a/tests/fsharp/typecheck/sigs/neg47.bsl +++ b/tests/fsharp/typecheck/sigs/neg47.bsl @@ -1,8 +1,8 @@ neg47.fs(18,9,18,26): typecheck error FS1221: DLLImport bindings must be static members in a class or function definitions in a module -neg47.fs(24,12,24,33): typecheck error FS1221: DLLImport bindings must be static members in a class or function definitions in a module +neg47.fs(23,5,24,33): typecheck error FS1221: DLLImport bindings must be static members in a class or function definitions in a module -neg47.fs(29,16,29,27): typecheck error FS1221: DLLImport bindings must be static members in a class or function definitions in a module +neg47.fs(28,9,29,27): typecheck error FS1221: DLLImport bindings must be static members in a class or function definitions in a module -neg47.fs(33,12,33,27): typecheck error FS1221: DLLImport bindings must be static members in a class or function definitions in a module +neg47.fs(32,5,33,27): typecheck error FS1221: DLLImport bindings must be static members in a class or function definitions in a module diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember01.il.bsl index 5875beb14e4..b07afd62275 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly CCtorDUWithMember01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.CCtorDUWithMember01 { - // Offset: 0x00000000 Length: 0x00000790 + // Offset: 0x00000000 Length: 0x0000077A } .mresource public FSharpOptimizationData.CCtorDUWithMember01 { - // Offset: 0x00000798 Length: 0x00000227 + // Offset: 0x00000780 Length: 0x00000227 } .module CCtorDUWithMember01.exe -// MVID: {59B1923F-26F1-14EE-A745-03833F92B159} +// MVID: {60B68B7E-26F1-14EE-A745-03837E8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00A70000 +// Image base: 0x06D80000 // =============== CLASS MEMBERS DECLARATION =================== @@ -70,7 +70,7 @@ [2] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_2, [3] class CCtorDUWithMember01a/C V_3) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 2,2 : 1,23 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember01.fs' + .line 2,2 : 1,23 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember01.fs' IL_0000: ldstr "File1.A = %A" IL_0005: 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 CCtorDUWithMember01a/C>::.ctor(string) IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) @@ -255,76 +255,60 @@ instance int32 CompareTo(class CCtorDUWithMember01a/C obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 64 (0x40) + // Code size 48 (0x30) .maxstack 4 .locals init ([0] int32 V_0, [1] int32 V_1) - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember01a.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember01a.fs' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_0032 + IL_0004: brfalse.s IL_0026 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: ldnull - IL_000c: cgt.un - IL_000e: brfalse.s IL_0012 - - IL_0010: br.s IL_0014 - - IL_0012: br.s IL_0030 + IL_0006: ldarg.1 + IL_0007: ldnull + IL_0008: cgt.un + IL_000a: brfalse.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0014: ldarg.0 - IL_0015: ldfld int32 CCtorDUWithMember01a/C::_tag - IL_001a: stloc.0 - IL_001b: ldarg.1 - IL_001c: ldfld int32 CCtorDUWithMember01a/C::_tag - IL_0021: stloc.1 - IL_0022: ldloc.0 - IL_0023: ldloc.1 - IL_0024: bne.un.s IL_0028 - - IL_0026: br.s IL_002a - - IL_0028: br.s IL_002c + IL_000c: ldarg.0 + IL_000d: ldfld int32 CCtorDUWithMember01a/C::_tag + IL_0012: stloc.0 + IL_0013: ldarg.1 + IL_0014: ldfld int32 CCtorDUWithMember01a/C::_tag + IL_0019: stloc.1 + IL_001a: ldloc.0 + IL_001b: ldloc.1 + IL_001c: bne.un.s IL_0020 .line 100001,100001 : 0,0 '' - IL_002a: ldc.i4.0 - IL_002b: ret + IL_001e: ldc.i4.0 + IL_001f: ret .line 100001,100001 : 0,0 '' - IL_002c: ldloc.0 - IL_002d: ldloc.1 - IL_002e: sub - IL_002f: ret + IL_0020: ldloc.0 + IL_0021: ldloc.1 + IL_0022: sub + IL_0023: ret .line 100001,100001 : 0,0 '' - IL_0030: ldc.i4.1 - IL_0031: ret + IL_0024: ldc.i4.1 + IL_0025: ret .line 100001,100001 : 0,0 '' - IL_0032: ldarg.1 - IL_0033: ldnull - IL_0034: cgt.un - IL_0036: brfalse.s IL_003a - - IL_0038: br.s IL_003c - - IL_003a: br.s IL_003e + IL_0026: ldarg.1 + IL_0027: ldnull + IL_0028: cgt.un + IL_002a: brfalse.s IL_002e .line 100001,100001 : 0,0 '' - IL_003c: ldc.i4.m1 - IL_003d: ret + IL_002c: ldc.i4.m1 + IL_002d: ret .line 100001,100001 : 0,0 '' - IL_003e: ldc.i4.0 - IL_003f: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method C::CompareTo .method public hidebysig virtual final @@ -346,7 +330,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 81 (0x51) + // Code size 65 (0x41) .maxstack 4 .locals init ([0] class CCtorDUWithMember01a/C V_0, [1] int32 V_1, @@ -358,99 +342,79 @@ IL_0007: ldarg.0 IL_0008: ldnull IL_0009: cgt.un - IL_000b: brfalse.s IL_000f - - IL_000d: br.s IL_0011 - - IL_000f: br.s IL_003e + IL_000b: brfalse.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0011: ldarg.1 - IL_0012: unbox.any CCtorDUWithMember01a/C - IL_0017: ldnull - IL_0018: cgt.un - IL_001a: brfalse.s IL_001e - - IL_001c: br.s IL_0020 - - IL_001e: br.s IL_003c + IL_000d: ldarg.1 + IL_000e: unbox.any CCtorDUWithMember01a/C + IL_0013: ldnull + IL_0014: cgt.un + IL_0016: brfalse.s IL_0030 .line 100001,100001 : 0,0 '' - IL_0020: ldarg.0 - IL_0021: ldfld int32 CCtorDUWithMember01a/C::_tag - IL_0026: stloc.1 - IL_0027: ldloc.0 - IL_0028: ldfld int32 CCtorDUWithMember01a/C::_tag - IL_002d: stloc.2 - IL_002e: ldloc.1 - IL_002f: ldloc.2 - IL_0030: bne.un.s IL_0034 - - IL_0032: br.s IL_0036 - - IL_0034: br.s IL_0038 + IL_0018: ldarg.0 + IL_0019: ldfld int32 CCtorDUWithMember01a/C::_tag + IL_001e: stloc.1 + IL_001f: ldloc.0 + IL_0020: ldfld int32 CCtorDUWithMember01a/C::_tag + IL_0025: stloc.2 + IL_0026: ldloc.1 + IL_0027: ldloc.2 + IL_0028: bne.un.s IL_002c .line 100001,100001 : 0,0 '' - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002a: ldc.i4.0 + IL_002b: ret .line 100001,100001 : 0,0 '' - IL_0038: ldloc.1 - IL_0039: ldloc.2 - IL_003a: sub - IL_003b: ret + IL_002c: ldloc.1 + IL_002d: ldloc.2 + IL_002e: sub + IL_002f: ret .line 100001,100001 : 0,0 '' - IL_003c: ldc.i4.1 - IL_003d: ret + IL_0030: ldc.i4.1 + IL_0031: ret .line 100001,100001 : 0,0 '' - IL_003e: ldarg.1 - IL_003f: unbox.any CCtorDUWithMember01a/C - IL_0044: ldnull - IL_0045: cgt.un - IL_0047: brfalse.s IL_004b - - IL_0049: br.s IL_004d - - IL_004b: br.s IL_004f + IL_0032: ldarg.1 + IL_0033: unbox.any CCtorDUWithMember01a/C + IL_0038: ldnull + IL_0039: cgt.un + IL_003b: brfalse.s IL_003f .line 100001,100001 : 0,0 '' - IL_004d: ldc.i4.m1 - IL_004e: ret + IL_003d: ldc.i4.m1 + IL_003e: ret .line 100001,100001 : 0,0 '' - IL_004f: ldc.i4.0 - IL_0050: ret + IL_003f: ldc.i4.0 + IL_0040: ret } // end of method C::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 21 (0x15) + // Code size 17 (0x11) .maxstack 3 .locals init ([0] int32 V_0) .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_0013 + IL_0004: brfalse.s IL_000f .line 100001,100001 : 0,0 '' - IL_000a: ldc.i4.0 - IL_000b: stloc.0 - IL_000c: ldarg.0 - IL_000d: ldfld int32 CCtorDUWithMember01a/C::_tag - IL_0012: ret + IL_0006: ldc.i4.0 + IL_0007: stloc.0 + IL_0008: ldarg.0 + IL_0009: ldfld int32 CCtorDUWithMember01a/C::_tag + IL_000e: ret .line 100001,100001 : 0,0 '' - IL_0013: ldc.i4.0 - IL_0014: ret + IL_000f: ldc.i4.0 + IL_0010: ret } // end of method C::GetHashCode .method public hidebysig virtual final @@ -471,7 +435,7 @@ 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) + // Code size 47 (0x2f) .maxstack 4 .locals init ([0] class CCtorDUWithMember01a/C V_0, [1] class CCtorDUWithMember01a/C V_1, @@ -481,48 +445,40 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_002f + IL_0004: brfalse.s IL_0027 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: isinst CCtorDUWithMember01a/C - IL_0010: stloc.0 - IL_0011: ldloc.0 - IL_0012: brfalse.s IL_0016 - - IL_0014: br.s IL_0018 - - IL_0016: br.s IL_002d + IL_0006: ldarg.1 + IL_0007: isinst CCtorDUWithMember01a/C + IL_000c: stloc.0 + IL_000d: ldloc.0 + IL_000e: brfalse.s IL_0025 .line 100001,100001 : 0,0 '' - IL_0018: ldloc.0 - IL_0019: stloc.1 - IL_001a: ldarg.0 - IL_001b: ldfld int32 CCtorDUWithMember01a/C::_tag - IL_0020: stloc.2 - IL_0021: ldloc.1 - IL_0022: ldfld int32 CCtorDUWithMember01a/C::_tag - IL_0027: stloc.3 - IL_0028: ldloc.2 - IL_0029: ldloc.3 - IL_002a: ceq - IL_002c: ret + IL_0010: ldloc.0 + IL_0011: stloc.1 + IL_0012: ldarg.0 + IL_0013: ldfld int32 CCtorDUWithMember01a/C::_tag + IL_0018: stloc.2 + IL_0019: ldloc.1 + IL_001a: ldfld int32 CCtorDUWithMember01a/C::_tag + IL_001f: stloc.3 + IL_0020: ldloc.2 + IL_0021: ldloc.3 + IL_0022: ceq + IL_0024: ret .line 100001,100001 : 0,0 '' - IL_002d: ldc.i4.0 - IL_002e: ret + IL_0025: ldc.i4.0 + IL_0026: ret .line 100001,100001 : 0,0 '' - IL_002f: ldarg.1 - IL_0030: ldnull - IL_0031: cgt.un - IL_0033: ldc.i4.0 - IL_0034: ceq - IL_0036: ret + IL_0027: ldarg.1 + IL_0028: ldnull + IL_0029: cgt.un + IL_002b: ldc.i4.0 + IL_002c: ceq + IL_002e: ret } // end of method C::Equals .method public hidebysig specialname @@ -539,7 +495,7 @@ instance bool Equals(class CCtorDUWithMember01a/C obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 49 (0x31) + // Code size 41 (0x29) .maxstack 4 .locals init ([0] int32 V_0, [1] int32 V_1) @@ -547,52 +503,44 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_0029 + IL_0004: brfalse.s IL_0021 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: ldnull - IL_000c: cgt.un - IL_000e: brfalse.s IL_0012 - - IL_0010: br.s IL_0014 - - IL_0012: br.s IL_0027 + IL_0006: ldarg.1 + IL_0007: ldnull + IL_0008: cgt.un + IL_000a: brfalse.s IL_001f .line 100001,100001 : 0,0 '' - IL_0014: ldarg.0 - IL_0015: ldfld int32 CCtorDUWithMember01a/C::_tag - IL_001a: stloc.0 - IL_001b: ldarg.1 - IL_001c: ldfld int32 CCtorDUWithMember01a/C::_tag - IL_0021: stloc.1 - IL_0022: ldloc.0 - IL_0023: ldloc.1 - IL_0024: ceq - IL_0026: ret + IL_000c: ldarg.0 + IL_000d: ldfld int32 CCtorDUWithMember01a/C::_tag + IL_0012: stloc.0 + IL_0013: ldarg.1 + IL_0014: ldfld int32 CCtorDUWithMember01a/C::_tag + IL_0019: stloc.1 + IL_001a: ldloc.0 + IL_001b: ldloc.1 + IL_001c: ceq + IL_001e: ret .line 100001,100001 : 0,0 '' - IL_0027: ldc.i4.0 - IL_0028: ret + IL_001f: ldc.i4.0 + IL_0020: ret .line 100001,100001 : 0,0 '' - IL_0029: ldarg.1 - IL_002a: ldnull - IL_002b: cgt.un - IL_002d: ldc.i4.0 - IL_002e: ceq - IL_0030: ret + IL_0021: ldarg.1 + IL_0022: ldnull + IL_0023: cgt.un + IL_0025: ldc.i4.0 + IL_0026: ceq + IL_0028: ret } // end of method C::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 24 (0x18) + // Code size 20 (0x14) .maxstack 4 .locals init ([0] class CCtorDUWithMember01a/C V_0) .line 3,3 : 6,7 '' @@ -600,21 +548,17 @@ IL_0001: isinst CCtorDUWithMember01a/C IL_0006: stloc.0 IL_0007: ldloc.0 - IL_0008: brfalse.s IL_000c - - IL_000a: br.s IL_000e - - IL_000c: br.s IL_0016 + IL_0008: brfalse.s IL_0012 .line 100001,100001 : 0,0 '' - IL_000e: ldarg.0 - IL_000f: ldloc.0 - IL_0010: callvirt instance bool CCtorDUWithMember01a/C::Equals(class CCtorDUWithMember01a/C) - IL_0015: ret + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: callvirt instance bool CCtorDUWithMember01a/C::Equals(class CCtorDUWithMember01a/C) + IL_0011: ret .line 100001,100001 : 0,0 '' - IL_0016: ldc.i4.0 - IL_0017: ret + IL_0012: ldc.i4.0 + IL_0013: ret } // end of method C::Equals .property instance int32 Tag() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember02.il.bsl index f8d32ee78a8..10cb539ef09 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember02.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly CCtorDUWithMember02 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.CCtorDUWithMember02 { - // Offset: 0x00000000 Length: 0x0000030C + // Offset: 0x00000000 Length: 0x00000302 } .mresource public FSharpOptimizationData.CCtorDUWithMember02 { - // Offset: 0x00000310 Length: 0x000000E4 + // Offset: 0x00000308 Length: 0x000000E4 } .module CCtorDUWithMember02.exe -// MVID: {59B1923F-D176-C99D-A745-03833F92B159} +// MVID: {60B68B7E-D176-C99D-A745-03837E8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01380000 +// Image base: 0x06BF0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -68,7 +68,7 @@ .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0, [1] int32 V_1) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 2,2 : 1,17 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember02.fs' + .line 2,2 : 1,17 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember02.fs' IL_0000: ldstr "x = %A" IL_0005: 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_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) @@ -152,7 +152,7 @@ // Code size 77 (0x4d) .maxstack 4 .locals init ([0] int32 y) - .line 3,3 : 1,17 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember02a.fs' + .line 3,3 : 1,17 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember02a.fs' IL_0000: ldstr "hello1" IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember03.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember03.il.bsl index 2ded0bcb8b9..6f45553c0ec 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember03.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember03.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly CCtorDUWithMember03 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.CCtorDUWithMember03 { - // Offset: 0x00000000 Length: 0x0000029D + // Offset: 0x00000000 Length: 0x00000293 } .mresource public FSharpOptimizationData.CCtorDUWithMember03 { - // Offset: 0x000002A8 Length: 0x000000B2 + // Offset: 0x00000298 Length: 0x000000B2 } .module CCtorDUWithMember03.exe -// MVID: {59B1923F-C97B-D207-A745-03833F92B159} +// MVID: {60B68B7E-C97B-D207-A745-03837E8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x030C0000 +// Image base: 0x05970000 // =============== CLASS MEMBERS DECLARATION =================== @@ -68,7 +68,7 @@ .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0, [1] int32 V_1) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 2,2 : 1,23 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember03.fs' + .line 2,2 : 1,23 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember03.fs' IL_0000: ldstr "File1.x = %A" IL_0005: 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_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) @@ -93,7 +93,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld int32 ''.$CCtorDUWithMember03a::'x@3-1' + IL_0000: ldsfld int32 ''.$CCtorDUWithMember03a::x@3 IL_0005: ret } // end of method CCtorDUWithMember03a::get_x @@ -103,7 +103,7 @@ // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 - IL_0001: stsfld int32 ''.$CCtorDUWithMember03a::'x@3-1' + IL_0001: stsfld int32 ''.$CCtorDUWithMember03a::x@3 IL_0006: ret } // end of method CCtorDUWithMember03a::set_x @@ -118,7 +118,7 @@ .class private abstract auto ansi sealed ''.$CCtorDUWithMember03a extends [mscorlib]System.Object { - .field static assembly int32 'x@3-1' + .field static assembly int32 x@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 ) @@ -129,9 +129,9 @@ { // Code size 7 (0x7) .maxstack 8 - .line 3,3 : 1,18 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember03a.fs' + .line 3,3 : 1,18 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember03a.fs' IL_0000: ldc.i4.1 - IL_0001: stsfld int32 ''.$CCtorDUWithMember03a::'x@3-1' + IL_0001: stsfld int32 ''.$CCtorDUWithMember03a::x@3 IL_0006: ret } // end of method $CCtorDUWithMember03a::.cctor diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember04.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember04.il.bsl index 4063e241fda..0813094fef6 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember04.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/CCtorDUWithMember04.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly CCtorDUWithMember04 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.CCtorDUWithMember04 { - // Offset: 0x00000000 Length: 0x0000029D + // Offset: 0x00000000 Length: 0x00000293 } .mresource public FSharpOptimizationData.CCtorDUWithMember04 { - // Offset: 0x000002A8 Length: 0x000000B2 + // Offset: 0x00000298 Length: 0x000000B2 } .module CCtorDUWithMember04.exe -// MVID: {59B1923F-CF28-717B-A745-03833F92B159} +// MVID: {60B68B7E-CF28-717B-A745-03837E8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00AA0000 +// Image base: 0x07050000 // =============== CLASS MEMBERS DECLARATION =================== @@ -68,7 +68,7 @@ .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0, [1] int32 V_1) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 2,2 : 1,23 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember04.fs' + .line 2,2 : 1,23 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember04.fs' IL_0000: ldstr "File1.x = %A" IL_0005: 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_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) @@ -118,7 +118,7 @@ // Code size 7 (0x7) .maxstack 3 .locals init ([0] int32 x) - .line 3,3 : 1,10 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember04a.fs' + .line 3,3 : 1,10 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\CCtorDUWithMember\\CCtorDUWithMember04a.fs' IL_0000: call int32 CCtorDUWithMember04a::get_x() IL_0005: stloc.0 IL_0006: ret diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter01.il.bsl index 601e4ffc1e7..91a0b81b6ca 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:5:0:0 + .ver 5:0:0:0 } .assembly GenIter01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.GenIter01 { - // Offset: 0x00000000 Length: 0x000001FF + // Offset: 0x00000000 Length: 0x000001F3 } .mresource public FSharpOptimizationData.GenIter01 { - // Offset: 0x00000208 Length: 0x0000007A + // Offset: 0x000001F8 Length: 0x0000007A } .module GenIter01.exe -// MVID: {5B9A6329-F836-DC98-A745-038329639A5B} +// MVID: {60B78A57-F836-DC98-A745-0383578AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01080000 +// Image base: 0x04D30000 // =============== CLASS MEMBERS DECLARATION =================== @@ -51,355 +51,79 @@ 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 squaresOfOneToTen@5 - extends class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1 + .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 + squaresOfOneToTen() cil managed { - .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 [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 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 [mscorlib]System.Collections.Generic.IEnumerator`1 'enum', - int32 pc, - int32 current) cil managed + // Code size 82 (0x52) + .maxstack 5 + .locals init ([0] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0, + [1] class [mscorlib]System.Collections.Generic.IEnumerator`1 V_1, + [2] class [mscorlib]System.Collections.Generic.IEnumerable`1 V_2, + [3] int32 x, + [4] class [mscorlib]System.IDisposable V_4) + .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' + .line 5,6 : 5,25 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\GeneratedIterators\\GenIter01.fs' + IL_0000: ldc.i4.0 + IL_0001: ldc.i4.1 + IL_0002: ldc.i4.2 + IL_0003: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, + int32, + int32) + IL_0008: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_000d: stloc.1 + .line 5,5 : 7,26 '' + .try { - // Code size 28 (0x1c) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter01/squaresOfOneToTen@5::'enum' - IL_0007: ldarg.0 - IL_0008: ldarg.2 - IL_0009: stfld int32 GenIter01/squaresOfOneToTen@5::pc - IL_000e: ldarg.0 - IL_000f: ldarg.3 - IL_0010: stfld int32 GenIter01/squaresOfOneToTen@5::current - IL_0015: ldarg.0 - IL_0016: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1::.ctor() - IL_001b: ret - } // end of method squaresOfOneToTen@5::.ctor - - .method public strict virtual instance int32 - GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed - { - // Code size 157 (0x9d) - .maxstack 8 - .locals init ([0] int32 x) - .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\\GeneratedIterators\\GenIter01.fs' - IL_0000: ldarg.0 - IL_0001: ldfld int32 GenIter01/squaresOfOneToTen@5::pc - IL_0006: ldc.i4.1 - IL_0007: sub - IL_0008: switch ( - IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 + IL_000e: ldloc.1 + IL_000f: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0014: brfalse.s IL_002b - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 - - .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0073 - - .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_0070 - - .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0094 - - .line 100001,100001 : 0,0 '' - IL_002a: nop - .line 5,6 : 7,23 '' - IL_002b: ldarg.0 - IL_002c: ldc.i4.0 - IL_002d: ldc.i4.1 - IL_002e: ldc.i4.2 - IL_002f: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, - int32, - int32) - IL_0034: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0039: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter01/squaresOfOneToTen@5::'enum' - IL_003e: ldarg.0 - IL_003f: ldc.i4.1 - IL_0040: stfld int32 GenIter01/squaresOfOneToTen@5::pc - .line 5,6 : 7,23 '' - IL_0045: ldarg.0 - IL_0046: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter01/squaresOfOneToTen@5::'enum' - IL_004b: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0050: brfalse.s IL_0073 - - IL_0052: ldarg.0 - IL_0053: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter01/squaresOfOneToTen@5::'enum' - IL_0058: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005d: stloc.0 - IL_005e: ldarg.0 - IL_005f: ldc.i4.2 - IL_0060: stfld int32 GenIter01/squaresOfOneToTen@5::pc + IL_0016: ldloc.1 + IL_0017: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_001c: stloc.3 .line 6,6 : 18,23 '' - IL_0065: ldarg.0 - IL_0066: ldloc.0 - IL_0067: ldloc.0 - IL_0068: mul - IL_0069: stfld int32 GenIter01/squaresOfOneToTen@5::current - IL_006e: ldc.i4.1 - IL_006f: ret - - .line 100001,100001 : 0,0 '' - IL_0070: nop - IL_0071: br.s IL_0045 - - IL_0073: ldarg.0 - IL_0074: ldc.i4.3 - IL_0075: stfld int32 GenIter01/squaresOfOneToTen@5::pc - .line 5,6 : 7,23 '' - IL_007a: ldarg.0 - IL_007b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter01/squaresOfOneToTen@5::'enum' - IL_0080: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0085: nop - IL_0086: ldarg.0 - IL_0087: ldnull - IL_0088: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter01/squaresOfOneToTen@5::'enum' - IL_008d: ldarg.0 - IL_008e: ldc.i4.3 - IL_008f: stfld int32 GenIter01/squaresOfOneToTen@5::pc - IL_0094: ldarg.0 - IL_0095: ldc.i4.0 - IL_0096: stfld int32 GenIter01/squaresOfOneToTen@5::current - IL_009b: ldc.i4.0 - IL_009c: ret - } // end of method squaresOfOneToTen@5::GenerateNext - - .method public strict virtual instance void - Close() cil managed - { - // Code size 148 (0x94) - .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: ldarg.0 - IL_0001: ldfld int32 GenIter01/squaresOfOneToTen@5::pc - IL_0006: ldc.i4.3 - IL_0007: sub - IL_0008: switch ( - IL_0013) - IL_0011: br.s IL_0019 - - .line 100001,100001 : 0,0 '' - IL_0013: nop - IL_0014: br IL_0087 - - .line 100001,100001 : 0,0 '' - IL_0019: nop - .try - { - IL_001a: ldarg.0 - IL_001b: ldfld int32 GenIter01/squaresOfOneToTen@5::pc - IL_0020: switch ( - IL_0037, - IL_0039, - IL_003b, - IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 - - .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 - - .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d - - .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c - - .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 - - .line 100001,100001 : 0,0 '' - IL_004b: nop - .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 GenIter01/squaresOfOneToTen@5::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter01/squaresOfOneToTen@5::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop - .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 GenIter01/squaresOfOneToTen@5::pc - IL_0068: ldarg.0 - IL_0069: ldc.i4.0 - IL_006a: stfld int32 GenIter01/squaresOfOneToTen@5::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f - - } // end .try - catch [mscorlib]System.Object - { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 - .line 5,6 : 7,23 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f - - .line 100001,100001 : 0,0 '' - } // end handler - IL_007f: ldloc.1 - IL_0080: pop - .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 - - .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw - - .line 100001,100001 : 0,0 '' - IL_0093: ret - } // end of method squaresOfOneToTen@5::Close - - .method public strict virtual instance bool - get_CheckClose() cil managed - { - // Code size 56 (0x38) - .maxstack 8 - .line 100001,100001 : 0,0 '' - IL_0000: ldarg.0 - IL_0001: ldfld int32 GenIter01/squaresOfOneToTen@5::pc - IL_0006: switch ( - IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e - - .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 - + IL_001d: ldloca.s V_0 + IL_001f: ldloc.3 + IL_0020: ldloc.3 + IL_0021: mul + IL_0022: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_0027: nop .line 100001,100001 : 0,0 '' IL_0028: nop - IL_0029: br.s IL_0034 - - .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 - - .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 - - .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret - - IL_0034: ldc.i4.1 - IL_0035: ret + IL_0029: br.s IL_000e - IL_0036: ldc.i4.0 - IL_0037: ret - } // end of method squaresOfOneToTen@5::get_CheckClose + IL_002b: ldnull + IL_002c: stloc.2 + IL_002d: leave.s IL_0048 - .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 7 (0x7) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldfld int32 GenIter01/squaresOfOneToTen@5::current - IL_0006: ret - } // end of method squaresOfOneToTen@5::get_LastGenerated - - .method public strict virtual instance class [mscorlib]System.Collections.Generic.IEnumerator`1 - GetFreshEnumerator() cil managed + .line 5,6 : 7,23 '' + } // end .try + finally { - .custom 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 9 (0x9) - .maxstack 8 - IL_0000: ldnull - IL_0001: ldc.i4.0 - IL_0002: ldc.i4.0 - IL_0003: newobj instance void GenIter01/squaresOfOneToTen@5::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, - int32, - int32) - IL_0008: ret - } // end of method squaresOfOneToTen@5::GetFreshEnumerator - - } // end of class squaresOfOneToTen@5 - - .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - squaresOfOneToTen() cil managed - { - // Code size 16 (0x10) - .maxstack 8 + IL_002f: ldloc.1 + IL_0030: isinst [mscorlib]System.IDisposable + IL_0035: stloc.s V_4 + IL_0037: ldloc.s V_4 + IL_0039: brfalse.s IL_0045 + + .line 100001,100001 : 0,0 '' + IL_003b: ldloc.s V_4 + IL_003d: callvirt instance void [mscorlib]System.IDisposable::Dispose() + IL_0042: ldnull + IL_0043: pop + IL_0044: endfinally + .line 100001,100001 : 0,0 '' + IL_0045: ldnull + IL_0046: pop + IL_0047: endfinally + .line 100001,100001 : 0,0 '' + } // end handler + IL_0048: ldloc.2 + IL_0049: pop .line 5,6 : 5,25 '' - IL_0000: ldnull - IL_0001: ldc.i4.0 - IL_0002: ldc.i4.0 - IL_0003: newobj instance void GenIter01/squaresOfOneToTen@5::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, - int32, - int32) - IL_0008: tail. - IL_000a: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_000f: ret + IL_004a: ldloca.s V_0 + IL_004c: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() + IL_0051: ret } // end of method GenIter01::squaresOfOneToTen } // end of class GenIter01 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter02.il.bsl index aa203793fe4..e9ec641157f 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter02.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:5:0:0 + .ver 5:0:0:0 } .assembly GenIter02 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.GenIter02 { - // Offset: 0x00000000 Length: 0x00000200 + // Offset: 0x00000000 Length: 0x000001F4 } .mresource public FSharpOptimizationData.GenIter02 { - // Offset: 0x00000208 Length: 0x0000007B + // Offset: 0x000001F8 Length: 0x0000007B } .module GenIter02.exe -// MVID: {5B9A6329-F857-DC98-A745-038329639A5B} +// MVID: {60B78A57-F857-DC98-A745-0383578AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x02900000 +// Image base: 0x066F0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -51,360 +51,84 @@ 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 squaresOfOneToTenB@5 - extends class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1 + .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 + squaresOfOneToTenB() cil managed { - .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 [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 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 [mscorlib]System.Collections.Generic.IEnumerator`1 'enum', - int32 pc, - int32 current) cil managed + // Code size 98 (0x62) + .maxstack 5 + .locals init ([0] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0, + [1] class [mscorlib]System.Collections.Generic.IEnumerator`1 V_1, + [2] class [mscorlib]System.Collections.Generic.IEnumerable`1 V_2, + [3] int32 x, + [4] class [mscorlib]System.IDisposable V_4) + .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' + .line 5,7 : 5,25 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\GeneratedIterators\\GenIter02.fs' + IL_0000: ldc.i4.0 + IL_0001: ldc.i4.1 + IL_0002: ldc.i4.2 + IL_0003: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, + int32, + int32) + IL_0008: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_000d: stloc.1 + .line 5,5 : 7,25 '' + .try { - // Code size 28 (0x1c) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter02/squaresOfOneToTenB@5::'enum' - IL_0007: ldarg.0 - IL_0008: ldarg.2 - IL_0009: stfld int32 GenIter02/squaresOfOneToTenB@5::pc - IL_000e: ldarg.0 - IL_000f: ldarg.3 - IL_0010: stfld int32 GenIter02/squaresOfOneToTenB@5::current - IL_0015: ldarg.0 - IL_0016: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1::.ctor() - IL_001b: ret - } // end of method squaresOfOneToTenB@5::.ctor - - .method public strict virtual instance int32 - GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed - { - // Code size 176 (0xb0) - .maxstack 8 - .locals init ([0] int32 x) - .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\\GeneratedIterators\\GenIter02.fs' - IL_0000: ldarg.0 - IL_0001: ldfld int32 GenIter02/squaresOfOneToTenB@5::pc - IL_0006: ldc.i4.1 - IL_0007: sub - IL_0008: switch ( - IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002d - - IL_001b: br.s IL_0021 + IL_000e: ldloc.1 + IL_000f: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0014: brfalse.s IL_003b - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 - - .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0086 - - .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_0083 - - .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br IL_00a7 - - .line 100001,100001 : 0,0 '' - IL_002d: nop - .line 5,7 : 7,23 '' - IL_002e: ldarg.0 - IL_002f: ldc.i4.0 - IL_0030: ldc.i4.1 - IL_0031: ldc.i4.2 - IL_0032: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, - int32, - int32) - IL_0037: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_003c: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter02/squaresOfOneToTenB@5::'enum' - IL_0041: ldarg.0 - IL_0042: ldc.i4.1 - IL_0043: stfld int32 GenIter02/squaresOfOneToTenB@5::pc - .line 5,7 : 7,23 '' - IL_0048: ldarg.0 - IL_0049: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter02/squaresOfOneToTenB@5::'enum' - IL_004e: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0053: brfalse.s IL_0086 - - IL_0055: ldarg.0 - IL_0056: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter02/squaresOfOneToTenB@5::'enum' - IL_005b: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0060: stloc.0 + IL_0016: ldloc.1 + IL_0017: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_001c: stloc.3 .line 6,6 : 12,27 '' - IL_0061: ldstr "hello" - IL_0066: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_006b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0070: pop - IL_0071: ldarg.0 - IL_0072: ldc.i4.2 - IL_0073: stfld int32 GenIter02/squaresOfOneToTenB@5::pc + IL_001d: ldstr "hello" + IL_0022: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0027: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_002c: pop .line 7,7 : 12,23 '' - IL_0078: ldarg.0 - IL_0079: ldloc.0 - IL_007a: ldloc.0 - IL_007b: mul - IL_007c: stfld int32 GenIter02/squaresOfOneToTenB@5::current - IL_0081: ldc.i4.1 - IL_0082: ret - + IL_002d: ldloca.s V_0 + IL_002f: ldloc.3 + IL_0030: ldloc.3 + IL_0031: mul + IL_0032: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_0037: nop .line 100001,100001 : 0,0 '' - IL_0083: nop - IL_0084: br.s IL_0048 + IL_0038: nop + IL_0039: br.s IL_000e - IL_0086: ldarg.0 - IL_0087: ldc.i4.3 - IL_0088: stfld int32 GenIter02/squaresOfOneToTenB@5::pc - .line 5,7 : 7,23 '' - IL_008d: ldarg.0 - IL_008e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter02/squaresOfOneToTenB@5::'enum' - IL_0093: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0098: nop - IL_0099: ldarg.0 - IL_009a: ldnull - IL_009b: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter02/squaresOfOneToTenB@5::'enum' - IL_00a0: ldarg.0 - IL_00a1: ldc.i4.3 - IL_00a2: stfld int32 GenIter02/squaresOfOneToTenB@5::pc - IL_00a7: ldarg.0 - IL_00a8: ldc.i4.0 - IL_00a9: stfld int32 GenIter02/squaresOfOneToTenB@5::current - IL_00ae: ldc.i4.0 - IL_00af: ret - } // end of method squaresOfOneToTenB@5::GenerateNext + IL_003b: ldnull + IL_003c: stloc.2 + IL_003d: leave.s IL_0058 - .method public strict virtual instance void - Close() cil managed - { - // Code size 148 (0x94) - .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: ldarg.0 - IL_0001: ldfld int32 GenIter02/squaresOfOneToTenB@5::pc - IL_0006: ldc.i4.3 - IL_0007: sub - IL_0008: switch ( - IL_0013) - IL_0011: br.s IL_0019 - - .line 100001,100001 : 0,0 '' - IL_0013: nop - IL_0014: br IL_0087 - - .line 100001,100001 : 0,0 '' - IL_0019: nop - .try - { - IL_001a: ldarg.0 - IL_001b: ldfld int32 GenIter02/squaresOfOneToTenB@5::pc - IL_0020: switch ( - IL_0037, - IL_0039, - IL_003b, - IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 - - .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 - - .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d - - .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c - - .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 - - .line 100001,100001 : 0,0 '' - IL_004b: nop - .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 GenIter02/squaresOfOneToTenB@5::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter02/squaresOfOneToTenB@5::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop - .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 GenIter02/squaresOfOneToTenB@5::pc - IL_0068: ldarg.0 - IL_0069: ldc.i4.0 - IL_006a: stfld int32 GenIter02/squaresOfOneToTenB@5::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f - - } // end .try - catch [mscorlib]System.Object - { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 - .line 5,7 : 7,23 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f - - .line 100001,100001 : 0,0 '' - } // end handler - IL_007f: ldloc.1 - IL_0080: pop - .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 - - .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw - - .line 100001,100001 : 0,0 '' - IL_0093: ret - } // end of method squaresOfOneToTenB@5::Close - - .method public strict virtual instance bool - get_CheckClose() cil managed - { - // Code size 56 (0x38) - .maxstack 8 - .line 100001,100001 : 0,0 '' - IL_0000: ldarg.0 - IL_0001: ldfld int32 GenIter02/squaresOfOneToTenB@5::pc - IL_0006: switch ( - IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e - - .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 - - .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 - - .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 - - .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 - - .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret - - IL_0034: ldc.i4.1 - IL_0035: ret - - IL_0036: ldc.i4.0 - IL_0037: ret - } // end of method squaresOfOneToTenB@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 7 (0x7) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldfld int32 GenIter02/squaresOfOneToTenB@5::current - IL_0006: ret - } // end of method squaresOfOneToTenB@5::get_LastGenerated - - .method public strict virtual instance class [mscorlib]System.Collections.Generic.IEnumerator`1 - GetFreshEnumerator() cil managed + .line 5,7 : 7,23 '' + } // end .try + finally { - .custom 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 9 (0x9) - .maxstack 8 - IL_0000: ldnull - IL_0001: ldc.i4.0 - IL_0002: ldc.i4.0 - IL_0003: newobj instance void GenIter02/squaresOfOneToTenB@5::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, - int32, - int32) - IL_0008: ret - } // end of method squaresOfOneToTenB@5::GetFreshEnumerator - - } // end of class squaresOfOneToTenB@5 - - .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - squaresOfOneToTenB() cil managed - { - // Code size 16 (0x10) - .maxstack 8 + IL_003f: ldloc.1 + IL_0040: isinst [mscorlib]System.IDisposable + IL_0045: stloc.s V_4 + IL_0047: ldloc.s V_4 + IL_0049: brfalse.s IL_0055 + + .line 100001,100001 : 0,0 '' + IL_004b: ldloc.s V_4 + IL_004d: callvirt instance void [mscorlib]System.IDisposable::Dispose() + IL_0052: ldnull + IL_0053: pop + IL_0054: endfinally + .line 100001,100001 : 0,0 '' + IL_0055: ldnull + IL_0056: pop + IL_0057: endfinally + .line 100001,100001 : 0,0 '' + } // end handler + IL_0058: ldloc.2 + IL_0059: pop .line 5,7 : 5,25 '' - IL_0000: ldnull - IL_0001: ldc.i4.0 - IL_0002: ldc.i4.0 - IL_0003: newobj instance void GenIter02/squaresOfOneToTenB@5::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, - int32, - int32) - IL_0008: tail. - IL_000a: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_000f: ret + IL_005a: ldloca.s V_0 + IL_005c: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() + IL_0061: ret } // end of method GenIter02::squaresOfOneToTenB } // end of class GenIter02 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter03.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter03.il.bsl index 88bd760bc85..b649a939686 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter03.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter03.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:5:0:0 + .ver 5:0:0:0 } .assembly GenIter03 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.GenIter03 { - // Offset: 0x00000000 Length: 0x00000200 + // Offset: 0x00000000 Length: 0x000001F4 } .mresource public FSharpOptimizationData.GenIter03 { - // Offset: 0x00000208 Length: 0x0000007B + // Offset: 0x000001F8 Length: 0x0000007B } .module GenIter03.exe -// MVID: {5B9A6329-F77C-DC98-A745-038329639A5B} +// MVID: {60B78A57-F77C-DC98-A745-0383578AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x026B0000 +// Image base: 0x057E0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -51,355 +51,79 @@ 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 squaresOfOneToTenC@4 - extends class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1 + .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 + squaresOfOneToTenC() cil managed { - .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 [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 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 [mscorlib]System.Collections.Generic.IEnumerator`1 'enum', - int32 pc, - int32 current) cil managed + // Code size 83 (0x53) + .maxstack 5 + .locals init ([0] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0, + [1] class [mscorlib]System.Collections.Generic.IEnumerator`1 V_1, + [2] class [mscorlib]System.Collections.Generic.IEnumerable`1 V_2, + [3] int32 x, + [4] class [mscorlib]System.IDisposable V_4) + .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' + .line 4,4 : 28,57 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\GeneratedIterators\\GenIter03.fs' + IL_0000: ldc.i4.0 + IL_0001: ldc.i4.1 + IL_0002: ldc.i4.s 10 + IL_0004: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, + int32, + int32) + IL_0009: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_000e: stloc.1 + .line 4,4 : 30,46 '' + .try { - // Code size 28 (0x1c) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter03/squaresOfOneToTenC@4::'enum' - IL_0007: ldarg.0 - IL_0008: ldarg.2 - IL_0009: stfld int32 GenIter03/squaresOfOneToTenC@4::pc - IL_000e: ldarg.0 - IL_000f: ldarg.3 - IL_0010: stfld int32 GenIter03/squaresOfOneToTenC@4::current - IL_0015: ldarg.0 - IL_0016: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1::.ctor() - IL_001b: ret - } // end of method squaresOfOneToTenC@4::.ctor - - .method public strict virtual instance int32 - GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed - { - // Code size 158 (0x9e) - .maxstack 8 - .locals init ([0] int32 x) - .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\\GeneratedIterators\\GenIter03.fs' - IL_0000: ldarg.0 - IL_0001: ldfld int32 GenIter03/squaresOfOneToTenC@4::pc - IL_0006: ldc.i4.1 - IL_0007: sub - IL_0008: switch ( - IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 + IL_000f: ldloc.1 + IL_0010: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0015: brfalse.s IL_002c - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 - - .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0074 - - .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_0071 - - .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0095 - - .line 100001,100001 : 0,0 '' - IL_002a: nop - .line 4,4 : 30,55 '' - IL_002b: ldarg.0 - IL_002c: ldc.i4.0 - IL_002d: ldc.i4.1 - IL_002e: ldc.i4.s 10 - IL_0030: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, - int32, - int32) - IL_0035: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_003a: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter03/squaresOfOneToTenC@4::'enum' - IL_003f: ldarg.0 - IL_0040: ldc.i4.1 - IL_0041: stfld int32 GenIter03/squaresOfOneToTenC@4::pc - .line 4,4 : 30,55 '' - IL_0046: ldarg.0 - IL_0047: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter03/squaresOfOneToTenC@4::'enum' - IL_004c: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0051: brfalse.s IL_0074 - - IL_0053: ldarg.0 - IL_0054: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter03/squaresOfOneToTenC@4::'enum' - IL_0059: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005e: stloc.0 - IL_005f: ldarg.0 - IL_0060: ldc.i4.2 - IL_0061: stfld int32 GenIter03/squaresOfOneToTenC@4::pc + IL_0017: ldloc.1 + IL_0018: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_001d: stloc.3 .line 4,4 : 50,55 '' - IL_0066: ldarg.0 - IL_0067: ldloc.0 - IL_0068: ldloc.0 - IL_0069: mul - IL_006a: stfld int32 GenIter03/squaresOfOneToTenC@4::current - IL_006f: ldc.i4.1 - IL_0070: ret - - .line 100001,100001 : 0,0 '' - IL_0071: nop - IL_0072: br.s IL_0046 - - IL_0074: ldarg.0 - IL_0075: ldc.i4.3 - IL_0076: stfld int32 GenIter03/squaresOfOneToTenC@4::pc - .line 4,4 : 30,55 '' - IL_007b: ldarg.0 - IL_007c: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter03/squaresOfOneToTenC@4::'enum' - IL_0081: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0086: nop - IL_0087: ldarg.0 - IL_0088: ldnull - IL_0089: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter03/squaresOfOneToTenC@4::'enum' - IL_008e: ldarg.0 - IL_008f: ldc.i4.3 - IL_0090: stfld int32 GenIter03/squaresOfOneToTenC@4::pc - IL_0095: ldarg.0 - IL_0096: ldc.i4.0 - IL_0097: stfld int32 GenIter03/squaresOfOneToTenC@4::current - IL_009c: ldc.i4.0 - IL_009d: ret - } // end of method squaresOfOneToTenC@4::GenerateNext - - .method public strict virtual instance void - Close() cil managed - { - // Code size 148 (0x94) - .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: ldarg.0 - IL_0001: ldfld int32 GenIter03/squaresOfOneToTenC@4::pc - IL_0006: ldc.i4.3 - IL_0007: sub - IL_0008: switch ( - IL_0013) - IL_0011: br.s IL_0019 - - .line 100001,100001 : 0,0 '' - IL_0013: nop - IL_0014: br IL_0087 - - .line 100001,100001 : 0,0 '' - IL_0019: nop - .try - { - IL_001a: ldarg.0 - IL_001b: ldfld int32 GenIter03/squaresOfOneToTenC@4::pc - IL_0020: switch ( - IL_0037, - IL_0039, - IL_003b, - IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 - - .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 - - .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d - - .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c - - .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 - - .line 100001,100001 : 0,0 '' - IL_004b: nop - .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 GenIter03/squaresOfOneToTenC@4::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter03/squaresOfOneToTenC@4::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop - .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 GenIter03/squaresOfOneToTenC@4::pc - IL_0068: ldarg.0 - IL_0069: ldc.i4.0 - IL_006a: stfld int32 GenIter03/squaresOfOneToTenC@4::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f - - } // end .try - catch [mscorlib]System.Object - { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 - .line 4,4 : 30,55 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f - - .line 100001,100001 : 0,0 '' - } // end handler - IL_007f: ldloc.1 - IL_0080: pop - .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 - - .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw - - .line 100001,100001 : 0,0 '' - IL_0093: ret - } // end of method squaresOfOneToTenC@4::Close - - .method public strict virtual instance bool - get_CheckClose() cil managed - { - // Code size 56 (0x38) - .maxstack 8 - .line 100001,100001 : 0,0 '' - IL_0000: ldarg.0 - IL_0001: ldfld int32 GenIter03/squaresOfOneToTenC@4::pc - IL_0006: switch ( - IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e - - .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 - - .line 100001,100001 : 0,0 '' + IL_001e: ldloca.s V_0 + IL_0020: ldloc.3 + IL_0021: ldloc.3 + IL_0022: mul + IL_0023: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) IL_0028: nop - IL_0029: br.s IL_0034 - .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 - - .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 - - .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret - - IL_0034: ldc.i4.1 - IL_0035: ret + IL_0029: nop + IL_002a: br.s IL_000f - IL_0036: ldc.i4.0 - IL_0037: ret - } // end of method squaresOfOneToTenC@4::get_CheckClose + IL_002c: ldnull + IL_002d: stloc.2 + IL_002e: leave.s IL_0049 - .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 7 (0x7) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldfld int32 GenIter03/squaresOfOneToTenC@4::current - IL_0006: ret - } // end of method squaresOfOneToTenC@4::get_LastGenerated - - .method public strict virtual instance class [mscorlib]System.Collections.Generic.IEnumerator`1 - GetFreshEnumerator() cil managed + .line 4,4 : 30,55 '' + } // end .try + finally { - .custom 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 9 (0x9) - .maxstack 8 - IL_0000: ldnull - IL_0001: ldc.i4.0 - IL_0002: ldc.i4.0 - IL_0003: newobj instance void GenIter03/squaresOfOneToTenC@4::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, - int32, - int32) - IL_0008: ret - } // end of method squaresOfOneToTenC@4::GetFreshEnumerator - - } // end of class squaresOfOneToTenC@4 - - .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - squaresOfOneToTenC() cil managed - { - // Code size 16 (0x10) - .maxstack 8 + IL_0030: ldloc.1 + IL_0031: isinst [mscorlib]System.IDisposable + IL_0036: stloc.s V_4 + IL_0038: ldloc.s V_4 + IL_003a: brfalse.s IL_0046 + + .line 100001,100001 : 0,0 '' + IL_003c: ldloc.s V_4 + IL_003e: callvirt instance void [mscorlib]System.IDisposable::Dispose() + IL_0043: ldnull + IL_0044: pop + IL_0045: endfinally + .line 100001,100001 : 0,0 '' + IL_0046: ldnull + IL_0047: pop + IL_0048: endfinally + .line 100001,100001 : 0,0 '' + } // end handler + IL_0049: ldloc.2 + IL_004a: pop .line 4,4 : 28,57 '' - IL_0000: ldnull - IL_0001: ldc.i4.0 - IL_0002: ldc.i4.0 - IL_0003: newobj instance void GenIter03/squaresOfOneToTenC@4::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, - int32, - int32) - IL_0008: tail. - IL_000a: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_000f: ret + IL_004b: ldloca.s V_0 + IL_004d: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() + IL_0052: ret } // end of method GenIter03::squaresOfOneToTenC } // end of class GenIter03 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter04.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter04.il.bsl index 25a08dfd652..c3401ee5341 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter04.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/GenIter04.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:5:0:0 + .ver 5:0:0:0 } .assembly GenIter04 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.GenIter04 { - // Offset: 0x00000000 Length: 0x000001F0 + // Offset: 0x00000000 Length: 0x000001E4 } .mresource public FSharpOptimizationData.GenIter04 { - // Offset: 0x000001F8 Length: 0x0000007B + // Offset: 0x000001E8 Length: 0x0000007B } .module GenIter04.exe -// MVID: {5B9A6329-F79D-DC98-A745-038329639A5B} +// MVID: {60B78A57-F79D-DC98-A745-0383578AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00790000 +// Image base: 0x06F10000 // =============== CLASS MEMBERS DECLARATION =================== @@ -51,340 +51,6 @@ 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 squaresOfOneToTenD@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 [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 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 [mscorlib]System.Collections.Generic.IEnumerator`1 'enum', - int32 pc, - int32 current) cil managed - { - // Code size 28 (0x1c) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter04/squaresOfOneToTenD@4::'enum' - IL_0007: ldarg.0 - IL_0008: ldarg.2 - IL_0009: stfld int32 GenIter04/squaresOfOneToTenD@4::pc - IL_000e: ldarg.0 - IL_000f: ldarg.3 - IL_0010: stfld int32 GenIter04/squaresOfOneToTenD@4::current - IL_0015: ldarg.0 - IL_0016: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1::.ctor() - IL_001b: ret - } // end of method squaresOfOneToTenD@4::.ctor - - .method public strict virtual instance int32 - GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed - { - // Code size 158 (0x9e) - .maxstack 8 - .locals init ([0] int32 x) - .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\\GeneratedIterators\\GenIter04.fs' - IL_0000: ldarg.0 - IL_0001: ldfld int32 GenIter04/squaresOfOneToTenD@4::pc - IL_0006: ldc.i4.1 - IL_0007: sub - IL_0008: switch ( - IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 - - .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0074 - - .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_0071 - - .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0095 - - .line 100001,100001 : 0,0 '' - IL_002a: nop - .line 4,4 : 28,53 '' - IL_002b: ldarg.0 - IL_002c: ldc.i4.0 - IL_002d: ldc.i4.1 - IL_002e: ldc.i4.s 10 - IL_0030: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, - int32, - int32) - IL_0035: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_003a: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter04/squaresOfOneToTenD@4::'enum' - IL_003f: ldarg.0 - IL_0040: ldc.i4.1 - IL_0041: stfld int32 GenIter04/squaresOfOneToTenD@4::pc - .line 4,4 : 28,53 '' - IL_0046: ldarg.0 - IL_0047: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter04/squaresOfOneToTenD@4::'enum' - IL_004c: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0051: brfalse.s IL_0074 - - IL_0053: ldarg.0 - IL_0054: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter04/squaresOfOneToTenD@4::'enum' - IL_0059: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005e: stloc.0 - IL_005f: ldarg.0 - IL_0060: ldc.i4.2 - IL_0061: stfld int32 GenIter04/squaresOfOneToTenD@4::pc - .line 4,4 : 48,53 '' - IL_0066: ldarg.0 - IL_0067: ldloc.0 - IL_0068: ldloc.0 - IL_0069: mul - IL_006a: stfld int32 GenIter04/squaresOfOneToTenD@4::current - IL_006f: ldc.i4.1 - IL_0070: ret - - .line 100001,100001 : 0,0 '' - IL_0071: nop - IL_0072: br.s IL_0046 - - IL_0074: ldarg.0 - IL_0075: ldc.i4.3 - IL_0076: stfld int32 GenIter04/squaresOfOneToTenD@4::pc - .line 4,4 : 28,53 '' - IL_007b: ldarg.0 - IL_007c: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter04/squaresOfOneToTenD@4::'enum' - IL_0081: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0086: nop - IL_0087: ldarg.0 - IL_0088: ldnull - IL_0089: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter04/squaresOfOneToTenD@4::'enum' - IL_008e: ldarg.0 - IL_008f: ldc.i4.3 - IL_0090: stfld int32 GenIter04/squaresOfOneToTenD@4::pc - IL_0095: ldarg.0 - IL_0096: ldc.i4.0 - IL_0097: stfld int32 GenIter04/squaresOfOneToTenD@4::current - IL_009c: ldc.i4.0 - IL_009d: ret - } // end of method squaresOfOneToTenD@4::GenerateNext - - .method public strict virtual instance void - Close() cil managed - { - // Code size 148 (0x94) - .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: ldarg.0 - IL_0001: ldfld int32 GenIter04/squaresOfOneToTenD@4::pc - IL_0006: ldc.i4.3 - IL_0007: sub - IL_0008: switch ( - IL_0013) - IL_0011: br.s IL_0019 - - .line 100001,100001 : 0,0 '' - IL_0013: nop - IL_0014: br IL_0087 - - .line 100001,100001 : 0,0 '' - IL_0019: nop - .try - { - IL_001a: ldarg.0 - IL_001b: ldfld int32 GenIter04/squaresOfOneToTenD@4::pc - IL_0020: switch ( - IL_0037, - IL_0039, - IL_003b, - IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 - - .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 - - .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d - - .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c - - .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 - - .line 100001,100001 : 0,0 '' - IL_004b: nop - .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 GenIter04/squaresOfOneToTenD@4::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 GenIter04/squaresOfOneToTenD@4::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop - .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 GenIter04/squaresOfOneToTenD@4::pc - IL_0068: ldarg.0 - IL_0069: ldc.i4.0 - IL_006a: stfld int32 GenIter04/squaresOfOneToTenD@4::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f - - } // end .try - catch [mscorlib]System.Object - { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 - .line 4,4 : 28,53 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f - - .line 100001,100001 : 0,0 '' - } // end handler - IL_007f: ldloc.1 - IL_0080: pop - .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 - - .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw - - .line 100001,100001 : 0,0 '' - IL_0093: ret - } // end of method squaresOfOneToTenD@4::Close - - .method public strict virtual instance bool - get_CheckClose() cil managed - { - // Code size 56 (0x38) - .maxstack 8 - .line 100001,100001 : 0,0 '' - IL_0000: ldarg.0 - IL_0001: ldfld int32 GenIter04/squaresOfOneToTenD@4::pc - IL_0006: switch ( - IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e - - .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 - - .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 - - .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 - - .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 - - .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret - - IL_0034: ldc.i4.1 - IL_0035: ret - - IL_0036: ldc.i4.0 - IL_0037: ret - } // end of method squaresOfOneToTenD@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 7 (0x7) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldfld int32 GenIter04/squaresOfOneToTenD@4::current - IL_0006: ret - } // end of method squaresOfOneToTenD@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 9 (0x9) - .maxstack 8 - IL_0000: ldnull - IL_0001: ldc.i4.0 - IL_0002: ldc.i4.0 - IL_0003: newobj instance void GenIter04/squaresOfOneToTenD@4::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, - int32, - int32) - IL_0008: ret - } // end of method squaresOfOneToTenD@4::GetFreshEnumerator - - } // end of class squaresOfOneToTenD@4 - .method public specialname static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 get_squaresOfOneToTenD() cil managed { @@ -414,21 +80,79 @@ .method public static void main@() cil managed { .entrypoint - // Code size 21 (0x15) + // Code size 93 (0x5d) .maxstack 5 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 squaresOfOneToTenD) - .line 4,4 : 1,55 '' - IL_0000: ldnull - IL_0001: ldc.i4.0 - IL_0002: ldc.i4.0 - IL_0003: newobj instance void GenIter04/squaresOfOneToTenD@4::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, - int32, - int32) - IL_0008: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_000d: dup - IL_000e: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$GenIter04::squaresOfOneToTenD@4 - IL_0013: stloc.0 - IL_0014: ret + .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 squaresOfOneToTenD, + [1] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_1, + [2] class [mscorlib]System.Collections.Generic.IEnumerator`1 V_2, + [3] class [mscorlib]System.Collections.Generic.IEnumerable`1 V_3, + [4] int32 x, + [5] class [mscorlib]System.IDisposable V_5) + .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' + .line 4,4 : 1,55 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\GeneratedIterators\\GenIter04.fs' + IL_0000: ldc.i4.0 + IL_0001: ldc.i4.1 + IL_0002: ldc.i4.s 10 + IL_0004: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Core.Operators/OperatorIntrinsics::RangeInt32(int32, + int32, + int32) + IL_0009: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_000e: stloc.2 + .line 4,4 : 28,44 '' + .try + { + IL_000f: ldloc.2 + IL_0010: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0015: brfalse.s IL_002f + + IL_0017: ldloc.2 + IL_0018: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_001d: stloc.s x + .line 4,4 : 48,53 '' + IL_001f: ldloca.s V_1 + IL_0021: ldloc.s x + IL_0023: ldloc.s x + IL_0025: mul + IL_0026: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_002b: nop + .line 100001,100001 : 0,0 '' + IL_002c: nop + IL_002d: br.s IL_000f + + IL_002f: ldnull + IL_0030: stloc.3 + IL_0031: leave.s IL_004c + + .line 4,4 : 28,53 '' + } // end .try + finally + { + IL_0033: ldloc.2 + IL_0034: isinst [mscorlib]System.IDisposable + IL_0039: stloc.s V_5 + IL_003b: ldloc.s V_5 + IL_003d: brfalse.s IL_0049 + + .line 100001,100001 : 0,0 '' + IL_003f: ldloc.s V_5 + IL_0041: callvirt instance void [mscorlib]System.IDisposable::Dispose() + IL_0046: ldnull + IL_0047: pop + IL_0048: endfinally + .line 100001,100001 : 0,0 '' + IL_0049: ldnull + IL_004a: pop + IL_004b: endfinally + .line 100001,100001 : 0,0 '' + } // end handler + IL_004c: ldloc.3 + IL_004d: pop + IL_004e: ldloca.s V_1 + IL_0050: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() + IL_0055: dup + IL_0056: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$GenIter04::squaresOfOneToTenD@4 + IL_005b: stloc.0 + IL_005c: ret } // end of method $GenIter04::main@ } // end of class ''.$GenIter04 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison01.il.bsl index 37c0b51c0e3..bc1449351fd 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly InequalityComparison01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.InequalityComparison01 { - // Offset: 0x00000000 Length: 0x0000020E + // Offset: 0x00000000 Length: 0x0000020A } .mresource public FSharpOptimizationData.InequalityComparison01 { - // Offset: 0x00000218 Length: 0x00000085 + // Offset: 0x00000210 Length: 0x00000085 } .module InequalityComparison01.exe -// MVID: {59B19213-263A-E6D5-A745-03831392B159} +// MVID: {60B68B7E-263A-E6D5-A745-03837E8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x002E0000 +// Image base: 0x074E0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -58,7 +58,7 @@ // Code size 8 (0x8) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 27,33 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\InequalityComparison\\InequalityComparison01.fs' + .line 3,3 : 27,33 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\InequalityComparison\\InequalityComparison01.fs' IL_0000: ldarg.0 IL_0001: ldarg.1 IL_0002: cgt diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison02.il.bsl index 6ce221af23c..ca23c28d8a2 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison02.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly InequalityComparison02 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.InequalityComparison02 { - // Offset: 0x00000000 Length: 0x0000020E + // Offset: 0x00000000 Length: 0x0000020A } .mresource public FSharpOptimizationData.InequalityComparison02 { - // Offset: 0x00000218 Length: 0x00000085 + // Offset: 0x00000210 Length: 0x00000085 } .module InequalityComparison02.exe -// MVID: {59B19213-263A-E72C-A745-03831392B159} +// MVID: {60B68B7E-263A-E72C-A745-03837E8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x02D40000 +// Image base: 0x07180000 // =============== CLASS MEMBERS DECLARATION =================== @@ -58,7 +58,7 @@ // Code size 8 (0x8) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 27,33 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\InequalityComparison\\InequalityComparison02.fs' + .line 3,3 : 27,33 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\InequalityComparison\\InequalityComparison02.fs' IL_0000: ldarg.0 IL_0001: ldarg.1 IL_0002: clt diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison03.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison03.il.bsl index 96a9c5591cc..4fd361bb957 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison03.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison03.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly InequalityComparison03 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.InequalityComparison03 { - // Offset: 0x00000000 Length: 0x0000020E + // Offset: 0x00000000 Length: 0x0000020A } .mresource public FSharpOptimizationData.InequalityComparison03 { - // Offset: 0x00000218 Length: 0x00000085 + // Offset: 0x00000210 Length: 0x00000085 } .module InequalityComparison03.exe -// MVID: {59B19213-263A-E70B-A745-03831392B159} +// MVID: {60B68B7E-263A-E70B-A745-03837E8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x008E0000 +// Image base: 0x06510000 // =============== CLASS MEMBERS DECLARATION =================== @@ -58,7 +58,7 @@ // Code size 5 (0x5) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 27,32 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\InequalityComparison\\InequalityComparison03.fs' + .line 3,3 : 27,32 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\InequalityComparison\\InequalityComparison03.fs' IL_0000: ldarg.0 IL_0001: ldarg.1 IL_0002: clt diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison04.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison04.il.bsl index 5209536406c..988eae50727 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison04.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison04.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly InequalityComparison04 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.InequalityComparison04 { - // Offset: 0x00000000 Length: 0x0000020E + // Offset: 0x00000000 Length: 0x0000020A } .mresource public FSharpOptimizationData.InequalityComparison04 { - // Offset: 0x00000218 Length: 0x00000085 + // Offset: 0x00000210 Length: 0x00000085 } .module InequalityComparison04.exe -// MVID: {59B19213-263A-E772-A745-03831392B159} +// MVID: {60B68B7E-263A-E772-A745-03837E8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00F20000 +// Image base: 0x07590000 // =============== CLASS MEMBERS DECLARATION =================== @@ -58,7 +58,7 @@ // Code size 5 (0x5) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 27,32 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\InequalityComparison\\InequalityComparison04.fs' + .line 3,3 : 27,32 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\InequalityComparison\\InequalityComparison04.fs' IL_0000: ldarg.0 IL_0001: ldarg.1 IL_0002: cgt diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison05.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison05.il.bsl index 173552b2fa4..d0f9c71afb5 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison05.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/InequalityComparison05.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly InequalityComparison05 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.InequalityComparison05 { - // Offset: 0x00000000 Length: 0x00000236 + // Offset: 0x00000000 Length: 0x00000232 } .mresource public FSharpOptimizationData.InequalityComparison05 { - // Offset: 0x00000240 Length: 0x00000085 + // Offset: 0x00000238 Length: 0x00000085 } .module InequalityComparison05.exe -// MVID: {59B19213-263A-E751-A745-03831392B159} +// MVID: {60B68B7E-263A-E751-A745-03837E8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x001D0000 +// Image base: 0x07350000 // =============== CLASS MEMBERS DECLARATION =================== @@ -58,25 +58,21 @@ { .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationArgumentCountsAttribute::.ctor(int32[]) = ( 01 00 04 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 00 00 ) - // Code size 12 (0xc) + // Code size 8 (0x8) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 40,55 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\InequalityComparison\\InequalityComparison05.fs' + .line 3,3 : 40,55 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\InequalityComparison\\InequalityComparison05.fs' IL_0000: ldarg.0 IL_0001: ldarg.1 IL_0002: ble.s IL_0006 - IL_0004: br.s IL_0008 - - IL_0006: br.s IL_000a - .line 3,3 : 56,57 '' - IL_0008: ldarg.2 - IL_0009: ret + IL_0004: ldarg.2 + IL_0005: ret .line 3,3 : 63,64 '' - IL_000a: ldarg.3 - IL_000b: ret + IL_0006: ldarg.3 + IL_0007: ret } // end of method InequalityComparison05::f5 } // end of class InequalityComparison05 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest1.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest1.il.bsl index 831514e5f3c..0ee5384e72f 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest1.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest1.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly ListExpressionSteppingTest1 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.ListExpressionSteppingTest1 { - // Offset: 0x00000000 Length: 0x0000026D + // Offset: 0x00000000 Length: 0x00000269 } .mresource public FSharpOptimizationData.ListExpressionSteppingTest1 { - // Offset: 0x00000278 Length: 0x000000AF + // Offset: 0x00000270 Length: 0x000000AF } .module ListExpressionSteppingTest1.exe -// MVID: {59B1920C-50CF-F6CE-A745-03830C92B159} +// MVID: {60B78A57-50CF-F6CE-A745-0383578AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x030B0000 +// Image base: 0x07190000 // =============== CLASS MEMBERS DECLARATION =================== @@ -55,178 +55,22 @@ 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 f0@6 - 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 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 pc, - int32 current) cil managed - { - // Code size 21 (0x15) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: stfld int32 ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::pc - IL_0007: ldarg.0 - IL_0008: ldarg.2 - IL_0009: stfld int32 ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::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 f0@6::.ctor - - .method public strict virtual instance int32 - GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed - { - // Code size 66 (0x42) - .maxstack 6 - .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\\ListExpressionStepping\\ListExpressionSteppingTest1.fs' - IL_0000: ldarg.0 - IL_0001: ldfld int32 ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::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 '' - IL_001b: nop - IL_001c: br.s IL_0032 - - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0039 - - .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: ldarg.0 - IL_0023: ldc.i4.1 - IL_0024: stfld int32 ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::pc - .line 6,6 : 11,18 '' - IL_0029: ldarg.0 - IL_002a: ldc.i4.1 - IL_002b: stfld int32 ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::current - IL_0030: ldc.i4.1 - IL_0031: ret - - IL_0032: ldarg.0 - IL_0033: ldc.i4.2 - IL_0034: stfld int32 ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::pc - IL_0039: ldarg.0 - IL_003a: ldc.i4.0 - IL_003b: stfld int32 ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::current - IL_0040: ldc.i4.0 - IL_0041: ret - } // end of method f0@6::GenerateNext - - .method public strict virtual instance void - Close() cil managed - { - // Code size 8 (0x8) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldc.i4.2 - IL_0002: stfld int32 ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::pc - IL_0007: ret - } // end of method f0@6::Close - - .method public strict virtual instance bool - get_CheckClose() cil managed - { - // Code size 45 (0x2d) - .maxstack 8 - .line 100001,100001 : 0,0 '' - IL_0000: ldarg.0 - IL_0001: ldfld int32 ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::pc - IL_0006: switch ( - IL_0019, - IL_001b, - IL_001d) - IL_0017: br.s IL_0028 - - IL_0019: br.s IL_001f - - IL_001b: br.s IL_0022 - - IL_001d: br.s IL_0025 - - .line 100001,100001 : 0,0 '' - IL_001f: nop - IL_0020: br.s IL_002b - - .line 100001,100001 : 0,0 '' - IL_0022: nop - IL_0023: br.s IL_0029 - - .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_002b - - .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: ldc.i4.0 - IL_002a: ret - - IL_002b: ldc.i4.0 - IL_002c: ret - } // end of method f0@6::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 7 (0x7) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldfld int32 ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::current - IL_0006: ret - } // end of method f0@6::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 8 (0x8) - .maxstack 8 - IL_0000: ldc.i4.0 - IL_0001: ldc.i4.0 - IL_0002: newobj instance void ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::.ctor(int32, - int32) - IL_0007: ret - } // end of method f0@6::GetFreshEnumerator - - } // end of class f0@6 - .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 f0() cil managed { - // Code size 15 (0xf) - .maxstack 8 + // Code size 17 (0x11) + .maxstack 4 + .locals init ([0] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0) + .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' + .line 6,6 : 9,20 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\ListExpressionStepping\\ListExpressionSteppingTest1.fs' + IL_0000: ldloca.s V_0 + IL_0002: ldc.i4.1 + IL_0003: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_0008: nop .line 6,6 : 9,20 '' - IL_0000: ldc.i4.0 - IL_0001: ldc.i4.0 - IL_0002: newobj instance void ListExpressionSteppingTest1/ListExpressionSteppingTest1/f0@6::.ctor(int32, - int32) - IL_0007: tail. - IL_0009: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_000e: ret + IL_0009: ldloca.s V_0 + IL_000b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() + IL_0010: ret } // end of method ListExpressionSteppingTest1::f0 } // end of class ListExpressionSteppingTest1 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest2.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest2.il.bsl index 2b86c1c4ba1..8b7a79bdaab 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest2.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest2.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly ListExpressionSteppingTest2 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.ListExpressionSteppingTest2 { - // Offset: 0x00000000 Length: 0x0000026D + // Offset: 0x00000000 Length: 0x00000269 } .mresource public FSharpOptimizationData.ListExpressionSteppingTest2 { - // Offset: 0x00000278 Length: 0x000000AF + // Offset: 0x00000270 Length: 0x000000AF } .module ListExpressionSteppingTest2.exe -// MVID: {59B1920C-D3DE-B780-A745-03830C92B159} +// MVID: {60B78A57-D3DE-B780-A745-0383578AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00690000 +// Image base: 0x094E0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -55,215 +55,37 @@ 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 f1@6 - 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 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 pc, - int32 current) cil managed - { - // Code size 21 (0x15) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: stfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::pc - IL_0007: ldarg.0 - IL_0008: ldarg.2 - IL_0009: stfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::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 f1@6::.ctor - - .method public strict virtual instance int32 - GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed - { - // Code size 123 (0x7b) - .maxstack 6 - .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\\ListExpressionStepping\\ListExpressionSteppingTest2.fs' - IL_0000: ldarg.0 - IL_0001: ldfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::pc - IL_0006: ldc.i4.1 - IL_0007: sub - IL_0008: switch ( - IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 - - .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_004b - - .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006b - - .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0072 - - .line 100001,100001 : 0,0 '' - IL_002a: nop - .line 6,6 : 11,26 '' - IL_002b: ldstr "hello" - IL_0030: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0035: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_003a: pop - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::pc - .line 7,7 : 11,18 '' - IL_0042: ldarg.0 - IL_0043: ldc.i4.1 - IL_0044: stfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::current - IL_0049: ldc.i4.1 - IL_004a: ret - - .line 8,8 : 11,28 '' - IL_004b: ldstr "goodbye" - IL_0050: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0055: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_005a: pop - IL_005b: ldarg.0 - IL_005c: ldc.i4.2 - IL_005d: stfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::pc - .line 9,9 : 11,18 '' - IL_0062: ldarg.0 - IL_0063: ldc.i4.2 - IL_0064: stfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::current - IL_0069: ldc.i4.1 - IL_006a: ret - - IL_006b: ldarg.0 - IL_006c: ldc.i4.3 - IL_006d: stfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::pc - IL_0072: ldarg.0 - IL_0073: ldc.i4.0 - IL_0074: stfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::current - IL_0079: ldc.i4.0 - IL_007a: ret - } // end of method f1@6::GenerateNext - - .method public strict virtual instance void - Close() cil managed - { - // Code size 8 (0x8) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldc.i4.3 - IL_0002: stfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::pc - IL_0007: ret - } // end of method f1@6::Close - - .method public strict virtual instance bool - get_CheckClose() cil managed - { - // Code size 56 (0x38) - .maxstack 8 - .line 100001,100001 : 0,0 '' - IL_0000: ldarg.0 - IL_0001: ldfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::pc - IL_0006: switch ( - IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e - - .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 - - .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 - - .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 - - .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 - - .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.0 - IL_0033: ret - - IL_0034: ldc.i4.0 - IL_0035: ret - - IL_0036: ldc.i4.0 - IL_0037: ret - } // end of method f1@6::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 7 (0x7) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldfld int32 ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::current - IL_0006: ret - } // end of method f1@6::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 8 (0x8) - .maxstack 8 - IL_0000: ldc.i4.0 - IL_0001: ldc.i4.0 - IL_0002: newobj instance void ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::.ctor(int32, - int32) - IL_0007: ret - } // end of method f1@6::GetFreshEnumerator - - } // end of class f1@6 - .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 f1() cil managed { - // Code size 15 (0xf) - .maxstack 8 + // Code size 58 (0x3a) + .maxstack 4 + .locals init ([0] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0) + .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' + .line 6,6 : 11,26 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\ListExpressionStepping\\ListExpressionSteppingTest2.fs' + IL_0000: ldstr "hello" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: pop + .line 7,7 : 11,18 '' + IL_0010: ldloca.s V_0 + IL_0012: ldc.i4.1 + IL_0013: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_0018: nop + .line 8,8 : 11,28 '' + IL_0019: ldstr "goodbye" + IL_001e: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0023: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_0028: pop + .line 9,9 : 11,18 '' + IL_0029: ldloca.s V_0 + IL_002b: ldc.i4.2 + IL_002c: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_0031: nop .line 6,9 : 9,19 '' - IL_0000: ldc.i4.0 - IL_0001: ldc.i4.0 - IL_0002: newobj instance void ListExpressionSteppingTest2/ListExpressionSteppingTest2/f1@6::.ctor(int32, - int32) - IL_0007: tail. - IL_0009: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_000e: ret + IL_0032: ldloca.s V_0 + IL_0034: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() + IL_0039: ret } // end of method ListExpressionSteppingTest2::f1 } // end of class ListExpressionSteppingTest2 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest3.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest3.il.bsl index 864056dbe8c..92f1f9b3632 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest3.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest3.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly ListExpressionSteppingTest3 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.ListExpressionSteppingTest3 { - // Offset: 0x00000000 Length: 0x0000027D + // Offset: 0x00000000 Length: 0x00000279 } .mresource public FSharpOptimizationData.ListExpressionSteppingTest3 { - // Offset: 0x00000288 Length: 0x000000AF + // Offset: 0x00000280 Length: 0x000000AF } .module ListExpressionSteppingTest3.exe -// MVID: {59B1920C-AE45-39B4-A745-03830C92B159} +// MVID: {60B78A57-AE45-39B4-A745-0383578AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00FF0000 +// Image base: 0x06EB0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -55,215 +55,48 @@ 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 f2@7 - 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 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 class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 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, - int32 pc, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 current) cil managed - { - // Code size 28 (0x1c) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::x - IL_0007: ldarg.0 - IL_0008: ldarg.2 - IL_0009: stfld int32 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::pc - IL_000e: ldarg.0 - IL_000f: ldarg.3 - IL_0010: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::current - IL_0015: ldarg.0 - IL_0016: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1>::.ctor() - IL_001b: ret - } // end of method f2@7::.ctor - - .method public strict virtual instance int32 - GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1>& next) cil managed - { - // Code size 116 (0x74) - .maxstack 6 - .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\\ListExpressionStepping\\ListExpressionSteppingTest3.fs' - IL_0000: ldarg.0 - IL_0001: ldfld int32 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::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 '' - IL_001b: nop - IL_001c: br.s IL_0061 - - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_006b - - .line 100001,100001 : 0,0 '' - IL_0021: nop - .line 7,7 : 17,23 '' - IL_0022: ldarg.0 - IL_0023: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::x - IL_0028: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_002d: ldc.i4.4 - IL_002e: bge.s IL_0064 - - .line 8,8 : 14,20 '' - IL_0030: ldarg.0 - IL_0031: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::x - IL_0036: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_003b: nop - .line 9,9 : 14,29 '' - IL_003c: ldstr "hello" - IL_0041: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0046: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_004b: pop - IL_004c: ldarg.0 - IL_004d: ldc.i4.1 - IL_004e: stfld int32 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::pc - .line 10,10 : 14,21 '' - IL_0053: ldarg.0 - IL_0054: ldarg.0 - IL_0055: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::x - IL_005a: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::current - IL_005f: ldc.i4.1 - IL_0060: ret - - .line 100001,100001 : 0,0 '' - IL_0061: nop - IL_0062: br.s IL_0022 - - IL_0064: ldarg.0 - IL_0065: ldc.i4.2 - IL_0066: stfld int32 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::pc - IL_006b: ldarg.0 - IL_006c: ldnull - IL_006d: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::current - IL_0072: ldc.i4.0 - IL_0073: ret - } // end of method f2@7::GenerateNext - - .method public strict virtual instance void - Close() cil managed - { - // Code size 8 (0x8) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldc.i4.2 - IL_0002: stfld int32 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::pc - IL_0007: ret - } // end of method f2@7::Close - - .method public strict virtual instance bool - get_CheckClose() cil managed - { - // Code size 45 (0x2d) - .maxstack 8 - .line 100001,100001 : 0,0 '' - IL_0000: ldarg.0 - IL_0001: ldfld int32 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::pc - IL_0006: switch ( - IL_0019, - IL_001b, - IL_001d) - IL_0017: br.s IL_0028 - - IL_0019: br.s IL_001f - - IL_001b: br.s IL_0022 - - IL_001d: br.s IL_0025 - - .line 100001,100001 : 0,0 '' - IL_001f: nop - IL_0020: br.s IL_002b - - .line 100001,100001 : 0,0 '' - IL_0022: nop - IL_0023: br.s IL_0029 - - .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_002b - - .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: ldc.i4.0 - IL_002a: ret - - IL_002b: ldc.i4.0 - IL_002c: ret - } // end of method f2@7::get_CheckClose - - .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 - 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 7 (0x7) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::current - IL_0006: ret - } // end of method f2@7::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 14 (0xe) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::x - IL_0006: ldc.i4.0 - IL_0007: ldnull - IL_0008: newobj instance void ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, - int32, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_000d: ret - } // end of method f2@7::GetFreshEnumerator - - } // end of class f2@7 - .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1> f2() cil managed { - // Code size 23 (0x17) - .maxstack 5 - .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x) - .line 6,6 : 9,22 '' + // Code size 60 (0x3c) + .maxstack 4 + .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x, + [1] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1> V_1) + .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' + .line 6,6 : 9,22 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\ListExpressionStepping\\ListExpressionSteppingTest3.fs' IL_0000: ldc.i4.0 IL_0001: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) IL_0006: stloc.0 .line 7,10 : 9,23 '' - IL_0007: ldloc.0 - IL_0008: ldc.i4.0 - IL_0009: ldnull - IL_000a: newobj instance void ListExpressionSteppingTest3/ListExpressionSteppingTest3/f2@7::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, - int32, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_000f: tail. - IL_0011: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList>(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0016: ret + IL_0007: nop + .line 7,7 : 11,23 '' + IL_0008: ldloc.0 + IL_0009: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_000e: ldc.i4.4 + IL_000f: bge.s IL_0034 + + .line 8,8 : 14,20 '' + IL_0011: ldloc.0 + IL_0012: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0017: nop + .line 9,9 : 14,29 '' + IL_0018: ldstr "hello" + IL_001d: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0022: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_0027: pop + .line 10,10 : 14,21 '' + IL_0028: ldloca.s V_1 + IL_002a: ldloc.0 + IL_002b: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1>::Add(!0) + IL_0030: nop + .line 100001,100001 : 0,0 '' + IL_0031: nop + IL_0032: br.s IL_0007 + + .line 7,10 : 9,23 '' + IL_0034: ldloca.s V_1 + IL_0036: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1>::Close() + IL_003b: ret } // end of method ListExpressionSteppingTest3::f2 } // end of class ListExpressionSteppingTest3 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest4.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest4.il.bsl index 2d0ccb9e33d..a3ae5487968 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest4.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest4.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:5:0:0 + .ver 5:0:0:0 } .assembly ListExpressionSteppingTest4 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.ListExpressionSteppingTest4 { - // Offset: 0x00000000 Length: 0x00000275 + // Offset: 0x00000000 Length: 0x00000269 } .mresource public FSharpOptimizationData.ListExpressionSteppingTest4 { - // Offset: 0x00000280 Length: 0x000000AF + // Offset: 0x00000270 Length: 0x000000AF } .module ListExpressionSteppingTest4.exe -// MVID: {5B9A68C1-3154-FA67-A745-0383C1689A5B} +// MVID: {60B78A57-3154-FA67-A745-0383578AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x018D0000 +// Image base: 0x06700000 // =============== CLASS MEMBERS DECLARATION =================== @@ -55,262 +55,54 @@ 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@6 - 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 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 pc, - int32 current) cil managed - { - // Code size 36 (0x24) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::x - IL_0007: ldarg.0 - IL_0008: ldarg.2 - IL_0009: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::y - IL_000e: ldarg.0 - IL_000f: ldarg.3 - IL_0010: stfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::pc - IL_0015: ldarg.0 - IL_0016: ldarg.s current - IL_0018: stfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::current - IL_001d: ldarg.0 - IL_001e: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1::.ctor() - IL_0023: ret - } // end of method f3@6::.ctor - - .method public strict virtual instance int32 - GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed - { - // Code size 190 (0xbe) - .maxstack 6 - .locals init ([0] int32 z) - .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\\ListExpressionStepping\\ListExpressionSteppingTest4.fs' - IL_0000: ldarg.0 - IL_0001: ldfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::pc - IL_0006: ldc.i4.1 - IL_0007: sub - IL_0008: switch ( - IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002d - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 - - .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0078 - - .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_00a0 - - .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br IL_00b5 - - .line 100001,100001 : 0,0 '' - IL_002d: nop - .line 6,6 : 11,24 '' - IL_002e: ldarg.0 - IL_002f: ldc.i4.0 - IL_0030: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0035: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::x - .line 7,7 : 11,17 '' - IL_003a: ldarg.0 - IL_003b: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::x - IL_0040: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0045: nop - .line 8,8 : 11,24 '' - IL_0046: ldarg.0 - IL_0047: ldc.i4.0 - IL_0048: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_004d: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::y - .line 9,9 : 11,17 '' - IL_0052: ldarg.0 - IL_0053: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::y - IL_0058: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_005d: nop - IL_005e: ldarg.0 - IL_005f: ldc.i4.1 - IL_0060: stfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::pc - .line 10,10 : 11,19 '' - IL_0065: ldarg.0 - IL_0066: ldarg.0 - IL_0067: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::x - IL_006c: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0071: stfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::current - IL_0076: ldc.i4.1 - IL_0077: ret - - .line 11,11 : 11,26 '' - IL_0078: ldarg.0 - IL_0079: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::x - IL_007e: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0083: ldarg.0 - IL_0084: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::y - IL_0089: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_008e: add - IL_008f: stloc.0 - IL_0090: ldarg.0 - IL_0091: ldc.i4.2 - IL_0092: stfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::pc - .line 12,12 : 11,18 '' - IL_0097: ldarg.0 - IL_0098: ldloc.0 - IL_0099: stfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::current - IL_009e: ldc.i4.1 - IL_009f: ret - - .line 8,8 : 15,16 '' - IL_00a0: ldarg.0 - IL_00a1: ldnull - IL_00a2: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::y - IL_00a7: ldarg.0 - IL_00a8: ldnull - IL_00a9: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::x - IL_00ae: ldarg.0 - IL_00af: ldc.i4.3 - IL_00b0: stfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::pc - IL_00b5: ldarg.0 - IL_00b6: ldc.i4.0 - IL_00b7: stfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::current - IL_00bc: ldc.i4.0 - IL_00bd: ret - } // end of method f3@6::GenerateNext - - .method public strict virtual instance void - Close() cil managed - { - // Code size 8 (0x8) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldc.i4.3 - IL_0002: stfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::pc - IL_0007: ret - } // end of method f3@6::Close - - .method public strict virtual instance bool - get_CheckClose() cil managed - { - // Code size 56 (0x38) - .maxstack 8 - .line 100001,100001 : 0,0 '' - IL_0000: ldarg.0 - IL_0001: ldfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::pc - IL_0006: switch ( - IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e - - .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 - - .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 - - .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 - - .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 - - .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.0 - IL_0033: ret - - IL_0034: ldc.i4.0 - IL_0035: ret - - IL_0036: ldc.i4.0 - IL_0037: ret - } // end of method f3@6::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 7 (0x7) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldfld int32 ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::current - IL_0006: ret - } // end of method f3@6::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 10 (0xa) - .maxstack 8 - IL_0000: ldnull - IL_0001: ldnull - IL_0002: ldc.i4.0 - IL_0003: ldc.i4.0 - IL_0004: newobj instance void ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, - int32, - int32) - IL_0009: ret - } // end of method f3@6::GetFreshEnumerator - - } // end of class f3@6 - .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 f3() cil managed { - // Code size 17 (0x11) - .maxstack 8 + // Code size 73 (0x49) + .maxstack 4 + .locals init ([0] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0, + [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x, + [2] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 y, + [3] int32 z) + .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' + .line 6,6 : 11,24 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\ListExpressionStepping\\ListExpressionSteppingTest4.fs' + IL_0000: ldc.i4.0 + IL_0001: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) + IL_0006: stloc.1 + .line 7,7 : 11,17 '' + IL_0007: ldloc.1 + IL_0008: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_000d: nop + .line 8,8 : 11,24 '' + IL_000e: ldc.i4.0 + IL_000f: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) + IL_0014: stloc.2 + .line 9,9 : 11,17 '' + IL_0015: ldloc.2 + IL_0016: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_001b: nop + .line 10,10 : 11,19 '' + IL_001c: ldloca.s V_0 + IL_001e: ldloc.1 + IL_001f: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0024: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_0029: nop + .line 11,11 : 11,26 '' + IL_002a: ldloc.1 + IL_002b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0030: ldloc.2 + IL_0031: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0036: add + IL_0037: stloc.3 + .line 12,12 : 11,18 '' + IL_0038: ldloca.s V_0 + IL_003a: ldloc.3 + IL_003b: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_0040: nop .line 6,12 : 9,20 '' - IL_0000: ldnull - IL_0001: ldnull - IL_0002: ldc.i4.0 - IL_0003: ldc.i4.0 - IL_0004: newobj instance void ListExpressionSteppingTest4/ListExpressionSteppingTest4/f3@6::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, - int32, - int32) - IL_0009: tail. - IL_000b: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0010: ret + IL_0041: ldloca.s V_0 + IL_0043: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() + IL_0048: ret } // end of method ListExpressionSteppingTest4::f3 } // end of class ListExpressionSteppingTest4 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest5.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest5.il.bsl index 39def210b7f..92dd8b4cd4d 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest5.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest5.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:5:0:0 + .ver 5:0:0:0 } .assembly ListExpressionSteppingTest5 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.ListExpressionSteppingTest5 { - // Offset: 0x00000000 Length: 0x00000275 + // Offset: 0x00000000 Length: 0x00000269 } .mresource public FSharpOptimizationData.ListExpressionSteppingTest5 { - // Offset: 0x00000280 Length: 0x000000AF + // Offset: 0x00000270 Length: 0x000000AF } .module ListExpressionSteppingTest5.exe -// MVID: {5B9A6329-CBE3-BFEA-A745-038329639A5B} +// MVID: {60B78A57-CBE3-BFEA-A745-0383578AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x027C0000 +// Image base: 0x06C00000 // =============== CLASS MEMBERS DECLARATION =================== @@ -55,413 +55,78 @@ 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@6 - extends class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1 + .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 + f4() cil managed { - .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 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 pc, - int32 current) cil managed - { - // Code size 36 (0x24) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::x - IL_0007: ldarg.0 - IL_0008: ldarg.2 - IL_0009: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::y - IL_000e: ldarg.0 - IL_000f: ldarg.3 - IL_0010: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc - IL_0015: ldarg.0 - IL_0016: ldarg.s current - IL_0018: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::current - IL_001d: ldarg.0 - IL_001e: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1::.ctor() - IL_0023: ret - } // end of method f4@6::.ctor - - .method public strict virtual instance int32 - GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed + // Code size 100 (0x64) + .maxstack 4 + .locals init ([0] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0, + [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 x, + [2] class [mscorlib]System.Collections.Generic.IEnumerable`1 V_2, + [3] class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 y, + [4] int32 z) + .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' + .line 6,6 : 11,24 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\ListExpressionStepping\\ListExpressionSteppingTest5.fs' + IL_0000: ldc.i4.0 + IL_0001: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) + IL_0006: stloc.1 + .line 7,7 : 11,14 '' + .try { - // Code size 232 (0xe8) - .maxstack 6 - .locals init ([0] int32 z) - .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\\ListExpressionStepping\\ListExpressionSteppingTest5.fs' - IL_0000: ldarg.0 - IL_0001: ldfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::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 '' - IL_0027: nop - IL_0028: br IL_00ae - - .line 100001,100001 : 0,0 '' - IL_002d: nop - IL_002e: br.s IL_007f - - .line 100001,100001 : 0,0 '' - IL_0030: nop - IL_0031: br.s IL_00a7 - - .line 100001,100001 : 0,0 '' - IL_0033: nop - IL_0034: br IL_00df - - .line 100001,100001 : 0,0 '' - IL_0039: nop - .line 6,6 : 11,24 '' - 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 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::x - IL_0046: ldarg.0 - IL_0047: ldc.i4.1 - IL_0048: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc + IL_0007: nop .line 8,8 : 15,28 '' - 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 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::y + IL_0008: ldc.i4.0 + IL_0009: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) + IL_000e: stloc.3 .line 9,9 : 15,21 '' - IL_0059: ldarg.0 - IL_005a: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::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 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc + IL_000f: ldloc.3 + IL_0010: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0015: nop .line 10,10 : 15,23 '' - IL_006c: ldarg.0 - IL_006d: ldarg.0 - IL_006e: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::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 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::current - IL_007d: ldc.i4.1 - IL_007e: ret - + IL_0016: ldloca.s V_0 + IL_0018: ldloc.1 + IL_0019: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_001e: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_0023: nop .line 11,11 : 15,30 '' - IL_007f: ldarg.0 - IL_0080: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::x - IL_0085: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_008a: ldarg.0 - IL_008b: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::y - IL_0090: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0095: add - IL_0096: stloc.0 - IL_0097: ldarg.0 - IL_0098: ldc.i4.3 - IL_0099: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc + IL_0024: ldloc.1 + IL_0025: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_002a: ldloc.3 + IL_002b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0030: add + IL_0031: stloc.s z .line 12,12 : 15,22 '' - IL_009e: ldarg.0 - IL_009f: ldloc.0 - IL_00a0: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::current - IL_00a5: ldc.i4.1 - IL_00a6: ret - - IL_00a7: ldarg.0 - IL_00a8: ldnull - IL_00a9: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::y - IL_00ae: ldarg.0 - IL_00af: ldc.i4.4 - IL_00b0: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc + IL_0033: ldloca.s V_0 + IL_0035: ldloc.s z + IL_0037: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_003c: nop + IL_003d: ldnull + IL_003e: stloc.2 + IL_003f: leave.s IL_005a + + .line 13,13 : 11,18 '' + } // end .try + finally + { + IL_0041: nop .line 14,14 : 14,20 '' - IL_00b5: ldarg.0 - IL_00b6: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::x - IL_00bb: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_00c0: nop + IL_0042: ldloc.1 + IL_0043: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0048: nop .line 15,15 : 14,28 '' - IL_00c1: ldstr "done" - IL_00c6: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_00cb: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_00d0: pop - IL_00d1: ldarg.0 - IL_00d2: ldnull - IL_00d3: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::x - IL_00d8: ldarg.0 - IL_00d9: ldc.i4.4 - IL_00da: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc - IL_00df: ldarg.0 - IL_00e0: ldc.i4.0 - IL_00e1: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::current - IL_00e6: ldc.i4.0 - IL_00e7: ret - } // end of method f4@6::GenerateNext - - .method public strict virtual instance void - Close() cil managed - { - // Code size 176 (0xb0) - .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: ldarg.0 - IL_0001: ldfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc - IL_0006: ldc.i4.4 - IL_0007: sub - IL_0008: switch ( - IL_0013) - IL_0011: br.s IL_0019 - - .line 100001,100001 : 0,0 '' - IL_0013: nop - IL_0014: br IL_00a3 - - .line 100001,100001 : 0,0 '' - IL_0019: nop - .try - { - IL_001a: ldarg.0 - IL_001b: ldfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc - IL_0020: switch ( - IL_003b, - IL_003d, - IL_003f, - IL_0041, - IL_0043) - IL_0039: br.s IL_0054 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 - - IL_003f: br.s IL_004b - - IL_0041: br.s IL_004e - - IL_0043: br.s IL_0051 - - .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_007d - - .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0059 - - .line 100001,100001 : 0,0 '' - IL_004b: nop - IL_004c: br.s IL_0058 - - .line 100001,100001 : 0,0 '' - IL_004e: nop - IL_004f: br.s IL_0055 - - .line 100001,100001 : 0,0 '' - IL_0051: nop - IL_0052: br.s IL_007d - - .line 100001,100001 : 0,0 '' - IL_0054: nop - .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: br.s IL_0059 - - .line 100001,100001 : 0,0 '' - IL_0058: nop - IL_0059: ldarg.0 - IL_005a: ldc.i4.4 - IL_005b: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc - .line 14,14 : 14,20 '' - IL_0060: ldarg.0 - IL_0061: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::x - IL_0066: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_006b: nop - .line 15,15 : 14,28 '' - IL_006c: ldstr "done" - IL_0071: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0076: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_007b: pop - .line 100001,100001 : 0,0 '' - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldc.i4.4 - IL_007f: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc - IL_0084: ldarg.0 - IL_0085: ldc.i4.0 - IL_0086: stfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::current - IL_008b: ldnull - IL_008c: stloc.1 - IL_008d: leave.s IL_009b - - } // end .try - catch [mscorlib]System.Object - { - IL_008f: castclass [mscorlib]System.Exception - IL_0094: stloc.2 - .line 6,6 : 15,16 '' - IL_0095: ldloc.2 - IL_0096: stloc.0 - IL_0097: ldnull - IL_0098: stloc.1 - IL_0099: leave.s IL_009b - - .line 100001,100001 : 0,0 '' - } // end handler - IL_009b: ldloc.1 - IL_009c: pop - .line 100001,100001 : 0,0 '' - IL_009d: nop - IL_009e: br IL_0000 - - IL_00a3: ldloc.0 - IL_00a4: ldnull - IL_00a5: cgt.un - IL_00a7: brfalse.s IL_00ab - - IL_00a9: br.s IL_00ad - - IL_00ab: br.s IL_00af - - .line 100001,100001 : 0,0 '' - IL_00ad: ldloc.0 - IL_00ae: throw - - .line 100001,100001 : 0,0 '' - IL_00af: ret - } // end of method f4@6::Close - - .method public strict virtual instance bool - get_CheckClose() cil managed - { - // Code size 67 (0x43) - .maxstack 5 - .line 100001,100001 : 0,0 '' - IL_0000: ldarg.0 - IL_0001: ldfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::pc - IL_0006: switch ( - IL_0021, - IL_0023, - IL_0025, - IL_0027, - IL_0029) - IL_001f: br.s IL_003a - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e - - IL_0025: br.s IL_0031 - - IL_0027: br.s IL_0034 - - IL_0029: br.s IL_0037 - - .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0041 - - .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_003f - - .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: br.s IL_003d - - .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_003b - - .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0041 - - .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: ldc.i4.1 - IL_003c: ret - - IL_003d: ldc.i4.1 - IL_003e: ret - - IL_003f: ldc.i4.1 - IL_0040: ret - - IL_0041: ldc.i4.0 - IL_0042: ret - } // end of method f4@6::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 7 (0x7) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldfld int32 ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::current - IL_0006: ret - } // end of method f4@6::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 10 (0xa) - .maxstack 8 - IL_0000: ldnull - IL_0001: ldnull - IL_0002: ldc.i4.0 - IL_0003: ldc.i4.0 - IL_0004: newobj instance void ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, - int32, - int32) - IL_0009: ret - } // end of method f4@6::GetFreshEnumerator - - } // end of class f4@6 - - .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - f4() cil managed - { - // Code size 17 (0x11) - .maxstack 8 + IL_0049: ldstr "done" + IL_004e: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0053: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_0058: pop + IL_0059: endfinally + .line 100001,100001 : 0,0 '' + } // end handler + IL_005a: ldloc.2 + IL_005b: pop .line 6,15 : 9,30 '' - IL_0000: ldnull - IL_0001: ldnull - IL_0002: ldc.i4.0 - IL_0003: ldc.i4.0 - IL_0004: newobj instance void ListExpressionSteppingTest5/ListExpressionSteppingTest5/f4@6::.ctor(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, - class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1, - int32, - int32) - IL_0009: tail. - IL_000b: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0010: ret + IL_005c: ldloca.s V_0 + IL_005e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() + IL_0063: ret } // end of method ListExpressionSteppingTest5::f4 } // end of class ListExpressionSteppingTest5 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest6.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest6.il.bsl index 2d43c04e954..bfa33913669 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest6.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/ListExpressionSteppingTest6.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:5:0:0 + .ver 5:0:0:0 } .assembly ListExpressionSteppingTest6 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.ListExpressionSteppingTest6 { - // Offset: 0x00000000 Length: 0x0000029D + // Offset: 0x00000000 Length: 0x00000291 } .mresource public FSharpOptimizationData.ListExpressionSteppingTest6 { - // Offset: 0x000002A8 Length: 0x000000BC + // Offset: 0x00000298 Length: 0x000000BC } .module ListExpressionSteppingTest6.exe -// MVID: {5B9A6329-98A2-AB14-A745-038329639A5B} +// MVID: {60B78A57-98A2-AB14-A745-0383578AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x007B0000 +// Image base: 0x06F80000 // =============== CLASS MEMBERS DECLARATION =================== @@ -55,484 +55,145 @@ 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 f7@7 - extends class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1 + .method public specialname static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 + get_es() cil managed { - .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 [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(class [mscorlib]System.Collections.Generic.IEnumerator`1 'enum', - class [mscorlib]System.Collections.Generic.IEnumerator`1 enum0, - int32 pc, - int32 current) cil managed - { - // Code size 36 (0x24) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::'enum' - IL_0007: ldarg.0 - IL_0008: ldarg.2 - IL_0009: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::enum0 - IL_000e: ldarg.0 - IL_000f: ldarg.3 - IL_0010: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc - IL_0015: ldarg.0 - IL_0016: ldarg.s current - IL_0018: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::current - IL_001d: ldarg.0 - IL_001e: call instance void class [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1::.ctor() - IL_0023: ret - } // end of method f7@7::.ctor + // Code size 6 (0x6) + .maxstack 8 + IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$ListExpressionSteppingTest6::es@5 + IL_0005: ret + } // end of method ListExpressionSteppingTest6::get_es - .method public strict virtual instance int32 - GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed + .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 + f7() cil managed + { + // Code size 186 (0xba) + .maxstack 4 + .locals init ([0] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0, + [1] class [mscorlib]System.Collections.Generic.IEnumerator`1 V_1, + [2] class [mscorlib]System.Collections.Generic.IEnumerable`1 V_2, + [3] int32 x, + [4] class [mscorlib]System.IDisposable V_4, + [5] class [mscorlib]System.Collections.Generic.IEnumerator`1 V_5, + [6] class [mscorlib]System.Collections.Generic.IEnumerable`1 V_6, + [7] int32 V_7, + [8] class [mscorlib]System.IDisposable V_8) + .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' + .line 7,12 : 9,23 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\ListExpressionStepping\\ListExpressionSteppingTest6.fs' + IL_0000: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6::get_es() + IL_0005: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_000a: stloc.1 + .line 7,7 : 11,25 '' + .try { - // Code size 304 (0x130) - .maxstack 6 - .locals init ([0] int32 x, - [1] int32 V_1) - .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\\ListExpressionStepping\\ListExpressionSteppingTest6.fs' - IL_0000: ldarg.0 - IL_0001: ldfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::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_0045 - - IL_0023: br.s IL_002d - - IL_0025: br.s IL_0030 - - IL_0027: br.s IL_0033 - - IL_0029: br.s IL_0039 - - IL_002b: br.s IL_003f - - .line 100001,100001 : 0,0 '' - IL_002d: nop - IL_002e: br.s IL_0099 - - .line 100001,100001 : 0,0 '' - IL_0030: nop - IL_0031: br.s IL_0096 + IL_000b: ldloc.1 + IL_000c: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0011: brfalse.s IL_0036 + IL_0013: ldloc.1 + IL_0014: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0019: stloc.3 + .line 8,8 : 14,29 '' + IL_001a: ldstr "hello" + IL_001f: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0024: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_0029: pop + .line 9,9 : 14,21 '' + IL_002a: ldloca.s V_0 + IL_002c: ldloc.3 + IL_002d: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_0032: nop .line 100001,100001 : 0,0 '' IL_0033: nop - IL_0034: br IL_0106 + IL_0034: br.s IL_000b - .line 100001,100001 : 0,0 '' - IL_0039: nop - IL_003a: br IL_0103 - - .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br IL_0127 + IL_0036: ldnull + IL_0037: stloc.2 + IL_0038: leave.s IL_0053 - .line 100001,100001 : 0,0 '' - IL_0045: nop .line 7,9 : 11,21 '' - IL_0046: ldarg.0 - IL_0047: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6::get_es() - IL_004c: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0051: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::'enum' - IL_0056: ldarg.0 - IL_0057: ldc.i4.1 - IL_0058: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc - .line 7,9 : 11,21 '' - IL_005d: ldarg.0 - IL_005e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::'enum' + } // end .try + finally + { + IL_003a: ldloc.1 + IL_003b: isinst [mscorlib]System.IDisposable + IL_0040: stloc.s V_4 + IL_0042: ldloc.s V_4 + IL_0044: brfalse.s IL_0050 + + .line 100001,100001 : 0,0 '' + IL_0046: ldloc.s V_4 + IL_0048: callvirt instance void [mscorlib]System.IDisposable::Dispose() + IL_004d: ldnull + IL_004e: pop + IL_004f: endfinally + .line 100001,100001 : 0,0 '' + IL_0050: ldnull + IL_0051: pop + IL_0052: endfinally + .line 100001,100001 : 0,0 '' + } // end handler + IL_0053: ldloc.2 + IL_0054: pop + IL_0055: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6::get_es() + IL_005a: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_005f: stloc.s V_5 + .line 10,10 : 11,25 '' + .try + { + IL_0061: ldloc.s V_5 IL_0063: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0068: brfalse.s IL_0099 + IL_0068: brfalse.s IL_0090 - IL_006a: ldarg.0 - IL_006b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::'enum' - IL_0070: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0075: stloc.0 - .line 8,8 : 14,29 '' - IL_0076: ldstr "hello" - IL_007b: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0080: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0085: pop - IL_0086: ldarg.0 - IL_0087: ldc.i4.2 - IL_0088: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc - .line 9,9 : 14,21 '' - IL_008d: ldarg.0 - IL_008e: ldloc.0 - IL_008f: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::current - IL_0094: ldc.i4.1 - IL_0095: ret - - .line 100001,100001 : 0,0 '' - IL_0096: nop - IL_0097: br.s IL_005d - - IL_0099: ldarg.0 - IL_009a: ldc.i4.5 - IL_009b: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc - .line 7,9 : 11,21 '' - IL_00a0: ldarg.0 - IL_00a1: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::'enum' - IL_00a6: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_00ab: nop - IL_00ac: ldarg.0 - IL_00ad: ldnull - IL_00ae: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::'enum' - .line 10,12 : 11,21 '' - IL_00b3: ldarg.0 - IL_00b4: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6::get_es() - IL_00b9: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_00be: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::enum0 - IL_00c3: ldarg.0 - IL_00c4: ldc.i4.3 - IL_00c5: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc - .line 10,12 : 11,21 '' - IL_00ca: ldarg.0 - IL_00cb: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::enum0 - IL_00d0: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_00d5: brfalse.s IL_0106 - - IL_00d7: ldarg.0 - IL_00d8: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::enum0 - IL_00dd: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_00e2: stloc.1 + IL_006a: ldloc.s V_5 + IL_006c: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0071: stloc.s V_7 .line 11,11 : 14,31 '' - IL_00e3: ldstr "goodbye" - IL_00e8: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_00ed: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_00f2: pop - IL_00f3: ldarg.0 - IL_00f4: ldc.i4.4 - IL_00f5: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc + IL_0073: ldstr "goodbye" + IL_0078: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_007d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_0082: pop .line 12,12 : 14,21 '' - IL_00fa: ldarg.0 - IL_00fb: ldloc.1 - IL_00fc: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::current - IL_0101: ldc.i4.1 - IL_0102: ret - - .line 100001,100001 : 0,0 '' - IL_0103: nop - IL_0104: br.s IL_00ca - - IL_0106: ldarg.0 - IL_0107: ldc.i4.5 - IL_0108: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc - .line 10,12 : 11,21 '' - IL_010d: ldarg.0 - IL_010e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::enum0 - IL_0113: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0118: nop - IL_0119: ldarg.0 - IL_011a: ldnull - IL_011b: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::enum0 - IL_0120: ldarg.0 - IL_0121: ldc.i4.5 - IL_0122: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc - IL_0127: ldarg.0 - IL_0128: ldc.i4.0 - IL_0129: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::current - IL_012e: ldc.i4.0 - IL_012f: ret - } // end of method f7@7::GenerateNext - - .method public strict virtual instance void - Close() cil managed - { - // Code size 189 (0xbd) - .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: ldarg.0 - IL_0001: ldfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc - IL_0006: ldc.i4.5 - IL_0007: sub - IL_0008: switch ( - IL_0013) - IL_0011: br.s IL_0019 - - .line 100001,100001 : 0,0 '' - IL_0013: nop - IL_0014: br IL_00b0 - - .line 100001,100001 : 0,0 '' - IL_0019: nop - .try - { - IL_001a: ldarg.0 - IL_001b: ldfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc - IL_0020: switch ( - IL_003f, - IL_0041, - IL_0043, - IL_0045, - IL_0047, - IL_0049) - IL_003d: br.s IL_005d - - IL_003f: br.s IL_004b - - IL_0041: br.s IL_004e - - IL_0043: br.s IL_0051 - - IL_0045: br.s IL_0054 - - IL_0047: br.s IL_0057 - - IL_0049: br.s IL_005a - - .line 100001,100001 : 0,0 '' - IL_004b: nop - IL_004c: br.s IL_008a - - .line 100001,100001 : 0,0 '' - IL_004e: nop - IL_004f: br.s IL_0076 - - .line 100001,100001 : 0,0 '' - IL_0051: nop - IL_0052: br.s IL_0075 - - .line 100001,100001 : 0,0 '' - IL_0054: nop - IL_0055: br.s IL_005f - - .line 100001,100001 : 0,0 '' - IL_0057: nop - IL_0058: br.s IL_005e - - .line 100001,100001 : 0,0 '' - IL_005a: nop - IL_005b: br.s IL_008a - - .line 100001,100001 : 0,0 '' - IL_005d: nop - .line 100001,100001 : 0,0 '' - IL_005e: nop - IL_005f: ldarg.0 - IL_0060: ldc.i4.5 - IL_0061: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc - IL_0066: ldarg.0 - IL_0067: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::enum0 - IL_006c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0071: nop - .line 100001,100001 : 0,0 '' - IL_0072: nop - IL_0073: br.s IL_008a - - .line 100001,100001 : 0,0 '' - IL_0075: nop - IL_0076: ldarg.0 - IL_0077: ldc.i4.5 - IL_0078: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc - IL_007d: ldarg.0 - IL_007e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::'enum' - IL_0083: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0088: nop - .line 100001,100001 : 0,0 '' - IL_0089: nop - IL_008a: ldarg.0 - IL_008b: ldc.i4.5 - IL_008c: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc - IL_0091: ldarg.0 - IL_0092: ldc.i4.0 - IL_0093: stfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::current - IL_0098: ldnull - IL_0099: stloc.1 - IL_009a: leave.s IL_00a8 - - } // end .try - catch [mscorlib]System.Object - { - IL_009c: castclass [mscorlib]System.Exception - IL_00a1: stloc.2 - .line 7,9 : 11,21 '' - IL_00a2: ldloc.2 - IL_00a3: stloc.0 - IL_00a4: ldnull - IL_00a5: stloc.1 - IL_00a6: leave.s IL_00a8 - - .line 100001,100001 : 0,0 '' - } // end handler - IL_00a8: ldloc.1 - IL_00a9: pop - .line 100001,100001 : 0,0 '' - IL_00aa: nop - IL_00ab: br IL_0000 - - IL_00b0: ldloc.0 - IL_00b1: ldnull - IL_00b2: cgt.un - IL_00b4: brfalse.s IL_00b8 - - IL_00b6: br.s IL_00ba - - IL_00b8: br.s IL_00bc - - .line 100001,100001 : 0,0 '' - IL_00ba: ldloc.0 - IL_00bb: throw - - .line 100001,100001 : 0,0 '' - IL_00bc: ret - } // end of method f7@7::Close - - .method public strict virtual instance bool - get_CheckClose() cil managed - { - // Code size 78 (0x4e) - .maxstack 5 - .line 100001,100001 : 0,0 '' - IL_0000: ldarg.0 - IL_0001: ldfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::pc - IL_0006: switch ( - IL_0025, - IL_0027, - IL_0029, - IL_002b, - IL_002d, - IL_002f) - IL_0023: br.s IL_0043 - - IL_0025: br.s IL_0031 - - IL_0027: br.s IL_0034 - - IL_0029: br.s IL_0037 - - IL_002b: br.s IL_003a - - IL_002d: br.s IL_003d - - IL_002f: br.s IL_0040 - - .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: br.s IL_004c - - .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_004a - + IL_0083: ldloca.s V_0 + IL_0085: ldloc.s V_7 + IL_0087: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Add(!0) + IL_008c: nop .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0048 + IL_008d: nop + IL_008e: br.s IL_0061 - .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0046 - - .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0044 - - .line 100001,100001 : 0,0 '' - IL_0040: nop - IL_0041: br.s IL_004c - - .line 100001,100001 : 0,0 '' - IL_0043: nop - IL_0044: ldc.i4.1 - IL_0045: ret - - IL_0046: ldc.i4.1 - IL_0047: ret + IL_0090: ldnull + IL_0091: stloc.s V_6 + IL_0093: leave.s IL_00af - IL_0048: ldc.i4.1 - IL_0049: ret - - IL_004a: ldc.i4.1 - IL_004b: ret - - IL_004c: ldc.i4.0 - IL_004d: ret - } // end of method f7@7::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 7 (0x7) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldfld int32 ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::current - IL_0006: ret - } // end of method f7@7::get_LastGenerated - - .method public strict virtual instance class [mscorlib]System.Collections.Generic.IEnumerator`1 - GetFreshEnumerator() cil managed + .line 10,12 : 11,21 '' + } // end .try + finally { - .custom 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 10 (0xa) - .maxstack 8 - IL_0000: ldnull - IL_0001: ldnull - IL_0002: ldc.i4.0 - IL_0003: ldc.i4.0 - IL_0004: newobj instance void ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, - class [mscorlib]System.Collections.Generic.IEnumerator`1, - int32, - int32) - IL_0009: ret - } // end of method f7@7::GetFreshEnumerator - - } // end of class f7@7 - - .method public specialname static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - get_es() cil managed - { - // Code size 6 (0x6) - .maxstack 8 - IL_0000: ldsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$ListExpressionSteppingTest6::es@5 - IL_0005: ret - } // end of method ListExpressionSteppingTest6::get_es - - .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - f7() cil managed - { - // Code size 17 (0x11) - .maxstack 8 + IL_0095: ldloc.s V_5 + IL_0097: isinst [mscorlib]System.IDisposable + IL_009c: stloc.s V_8 + IL_009e: ldloc.s V_8 + IL_00a0: brfalse.s IL_00ac + + .line 100001,100001 : 0,0 '' + IL_00a2: ldloc.s V_8 + IL_00a4: callvirt instance void [mscorlib]System.IDisposable::Dispose() + IL_00a9: ldnull + IL_00aa: pop + IL_00ab: endfinally + .line 100001,100001 : 0,0 '' + IL_00ac: ldnull + IL_00ad: pop + IL_00ae: endfinally + .line 100001,100001 : 0,0 '' + } // end handler + IL_00af: ldloc.s V_6 + IL_00b1: pop .line 7,12 : 9,23 '' - IL_0000: ldnull - IL_0001: ldnull - IL_0002: ldc.i4.0 - IL_0003: ldc.i4.0 - IL_0004: newobj instance void ListExpressionSteppingTest6/ListExpressionSteppingTest6/f7@7::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, - class [mscorlib]System.Collections.Generic.IEnumerator`1, - int32, - int32) - IL_0009: tail. - IL_000b: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0010: ret + IL_00b2: ldloca.s V_0 + IL_00b4: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() + IL_00b9: ret } // end of method ListExpressionSteppingTest6::f7 .property class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AbstractClass.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AbstractClass.il.bsl index 0bae910d0f1..4c8bea58a08 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AbstractClass.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AbstractClass.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly AbstractClass { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.AbstractClass { - // Offset: 0x00000000 Length: 0x00000306 + // Offset: 0x00000000 Length: 0x00000302 } .mresource public FSharpOptimizationData.AbstractClass { - // Offset: 0x00000310 Length: 0x000000B1 + // Offset: 0x00000308 Length: 0x000000B1 } .module AbstractClass.exe -// MVID: {59B19213-333C-8BAF-A745-03831392B159} +// MVID: {60B68B7F-333C-8BAF-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x010A0000 +// Image base: 0x07500000 // =============== CLASS MEMBERS DECLARATION =================== @@ -62,7 +62,7 @@ // Code size 9 (0x9) .maxstack 8 .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\\Misc\\AbstractClass.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\AbstractClass.fs' IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AnonRecd.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AnonRecd.il.bsl index af9a419018c..23db70c3a45 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AnonRecd.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AnonRecd.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.7.3081.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:6:0:0 + .ver 5:0:0:0 } .assembly AnonRecd { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.AnonRecd { - // Offset: 0x00000000 Length: 0x000001CE + // Offset: 0x00000000 Length: 0x000001C2 } .mresource public FSharpOptimizationData.AnonRecd { - // Offset: 0x000001D8 Length: 0x0000006B + // Offset: 0x000001C8 Length: 0x0000006B } .module AnonRecd.exe -// MVID: {5CBDEF61-C42F-5208-A745-038361EFBD5C} +// MVID: {60B68B7F-C42F-5208-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00D20000 +// Image base: 0x05160000 // =============== CLASS MEMBERS DECLARATION =================== @@ -58,7 +58,7 @@ .locals init ([0] int32 x, [1] class '<>f__AnonymousType1912756633`2' a) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 5,22 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\AnonRecd.fs' + .line 4,4 : 5,22 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\AnonRecd.fs' IL_0000: ldc.i4.1 IL_0001: stloc.0 .line 6,6 : 5,31 '' @@ -161,97 +161,77 @@ instance int32 CompareTo(class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 104 (0x68) + // Code size 84 (0x54) .maxstack 5 .locals init ([0] int32 V_0) - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\unknown' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\unknown' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_005a + IL_0004: brfalse.s IL_004a .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: ldnull - IL_000c: cgt.un - IL_000e: brfalse.s IL_0012 - - IL_0010: br.s IL_0014 - - IL_0012: br.s IL_0058 + IL_0006: ldarg.1 + IL_0007: ldnull + IL_0008: cgt.un + IL_000a: brfalse.s IL_0048 .line 100001,100001 : 0,0 '' - IL_0014: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0019: ldarg.0 - IL_001a: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ - IL_001f: ldarg.1 - IL_0020: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ - IL_0025: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [mscorlib]System.Collections.IComparer, + IL_000c: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0011: ldarg.0 + IL_0012: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ + IL_0017: ldarg.1 + IL_0018: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ + IL_001d: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [mscorlib]System.Collections.IComparer, !!0, !!0) - IL_002a: stloc.0 - IL_002b: ldloc.0 - IL_002c: ldc.i4.0 - IL_002d: bge.s IL_0031 - - IL_002f: br.s IL_0033 - - IL_0031: br.s IL_0035 + IL_0022: stloc.0 + IL_0023: ldloc.0 + IL_0024: ldc.i4.0 + IL_0025: bge.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0033: ldloc.0 - IL_0034: ret + IL_0027: ldloc.0 + IL_0028: ret .line 100001,100001 : 0,0 '' - IL_0035: ldloc.0 - IL_0036: ldc.i4.0 - IL_0037: ble.s IL_003b - - IL_0039: br.s IL_003d - - IL_003b: br.s IL_003f + IL_0029: ldloc.0 + IL_002a: ldc.i4.0 + IL_002b: ble.s IL_002f .line 100001,100001 : 0,0 '' - IL_003d: ldloc.0 - IL_003e: ret + IL_002d: ldloc.0 + IL_002e: ret .line 100001,100001 : 0,0 '' - IL_003f: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0044: ldarg.0 - IL_0045: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ - IL_004a: ldarg.1 - IL_004b: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ - IL_0050: tail. - IL_0052: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [mscorlib]System.Collections.IComparer, + IL_002f: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0034: ldarg.0 + IL_0035: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ + IL_003a: ldarg.1 + IL_003b: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ + IL_0040: tail. + IL_0042: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [mscorlib]System.Collections.IComparer, !!0, !!0) - IL_0057: ret + IL_0047: ret .line 100001,100001 : 0,0 '' - IL_0058: ldc.i4.1 - IL_0059: ret + IL_0048: ldc.i4.1 + IL_0049: ret .line 100001,100001 : 0,0 '' - IL_005a: ldarg.1 - IL_005b: ldnull - IL_005c: cgt.un - IL_005e: brfalse.s IL_0062 - - IL_0060: br.s IL_0064 - - IL_0062: br.s IL_0066 + IL_004a: ldarg.1 + IL_004b: ldnull + IL_004c: cgt.un + IL_004e: brfalse.s IL_0052 .line 100001,100001 : 0,0 '' - IL_0064: ldc.i4.m1 - IL_0065: ret + IL_0050: ldc.i4.m1 + IL_0051: ret .line 100001,100001 : 0,0 '' - IL_0066: ldc.i4.0 - IL_0067: ret + IL_0052: ldc.i4.0 + IL_0053: ret } // end of method '<>f__AnonymousType1912756633`2'::CompareTo .method public hidebysig virtual final @@ -274,7 +254,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 115 (0x73) + // Code size 95 (0x5f) .maxstack 5 .locals init ([0] class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> V_0, [1] class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> V_1, @@ -288,152 +268,128 @@ IL_0009: ldarg.0 IL_000a: ldnull IL_000b: cgt.un - IL_000d: brfalse.s IL_0011 - - IL_000f: br.s IL_0013 - - IL_0011: br.s IL_0060 + IL_000d: brfalse.s IL_0050 .line 100001,100001 : 0,0 '' - IL_0013: ldarg.1 - IL_0014: unbox.any class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> - IL_0019: ldnull - IL_001a: cgt.un - IL_001c: brfalse.s IL_0020 - - IL_001e: br.s IL_0022 - - IL_0020: br.s IL_005e + IL_000f: ldarg.1 + IL_0010: unbox.any class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> + IL_0015: ldnull + IL_0016: cgt.un + IL_0018: brfalse.s IL_004e .line 100001,100001 : 0,0 '' - IL_0022: ldarg.2 - IL_0023: ldarg.0 - IL_0024: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ - IL_0029: ldloc.1 - IL_002a: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ - IL_002f: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [mscorlib]System.Collections.IComparer, + IL_001a: ldarg.2 + IL_001b: ldarg.0 + IL_001c: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ + IL_0021: ldloc.1 + IL_0022: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ + IL_0027: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [mscorlib]System.Collections.IComparer, !!0, !!0) - IL_0034: stloc.2 - IL_0035: ldloc.2 - IL_0036: ldc.i4.0 - IL_0037: bge.s IL_003b - - IL_0039: br.s IL_003d - - IL_003b: br.s IL_003f + IL_002c: stloc.2 + IL_002d: ldloc.2 + IL_002e: ldc.i4.0 + IL_002f: bge.s IL_0033 .line 100001,100001 : 0,0 '' - IL_003d: ldloc.2 - IL_003e: ret + IL_0031: ldloc.2 + IL_0032: ret .line 100001,100001 : 0,0 '' - IL_003f: ldloc.2 - IL_0040: ldc.i4.0 - IL_0041: ble.s IL_0045 - - IL_0043: br.s IL_0047 - - IL_0045: br.s IL_0049 + IL_0033: ldloc.2 + IL_0034: ldc.i4.0 + IL_0035: ble.s IL_0039 .line 100001,100001 : 0,0 '' - IL_0047: ldloc.2 - IL_0048: ret + IL_0037: ldloc.2 + IL_0038: ret .line 100001,100001 : 0,0 '' - IL_0049: ldarg.2 - IL_004a: ldarg.0 - IL_004b: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ - IL_0050: ldloc.1 - IL_0051: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ - IL_0056: tail. - IL_0058: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [mscorlib]System.Collections.IComparer, + IL_0039: ldarg.2 + IL_003a: ldarg.0 + IL_003b: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ + IL_0040: ldloc.1 + IL_0041: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ + IL_0046: tail. + IL_0048: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [mscorlib]System.Collections.IComparer, !!0, !!0) - IL_005d: ret + IL_004d: ret .line 100001,100001 : 0,0 '' - IL_005e: ldc.i4.1 - IL_005f: ret + IL_004e: ldc.i4.1 + IL_004f: ret .line 100001,100001 : 0,0 '' - IL_0060: ldarg.1 - IL_0061: unbox.any class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> - IL_0066: ldnull - IL_0067: cgt.un - IL_0069: brfalse.s IL_006d - - IL_006b: br.s IL_006f - - IL_006d: br.s IL_0071 + IL_0050: ldarg.1 + IL_0051: unbox.any class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> + IL_0056: ldnull + IL_0057: cgt.un + IL_0059: brfalse.s IL_005d .line 100001,100001 : 0,0 '' - IL_006f: ldc.i4.m1 - IL_0070: ret + IL_005b: ldc.i4.m1 + IL_005c: ret .line 100001,100001 : 0,0 '' - IL_0071: ldc.i4.0 - IL_0072: ret + IL_005d: ldc.i4.0 + IL_005e: ret } // end of method '<>f__AnonymousType1912756633`2'::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 70 (0x46) + // Code size 66 (0x42) .maxstack 7 .locals init ([0] int32 V_0) .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_0044 + IL_0004: brfalse.s IL_0040 .line 100001,100001 : 0,0 '' - IL_000a: ldc.i4.0 - IL_000b: stloc.0 - IL_000c: ldc.i4 0x9e3779b9 - IL_0011: ldarg.1 - IL_0012: ldarg.0 - IL_0013: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ - IL_0018: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [mscorlib]System.Collections.IEqualityComparer, + IL_0006: ldc.i4.0 + IL_0007: stloc.0 + IL_0008: ldc.i4 0x9e3779b9 + IL_000d: ldarg.1 + IL_000e: ldarg.0 + IL_000f: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ + IL_0014: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [mscorlib]System.Collections.IEqualityComparer, !!0) - IL_001d: ldloc.0 - IL_001e: ldc.i4.6 - IL_001f: shl - IL_0020: ldloc.0 - IL_0021: ldc.i4.2 - IL_0022: shr - IL_0023: add - IL_0024: add - IL_0025: add - IL_0026: stloc.0 - IL_0027: ldc.i4 0x9e3779b9 - IL_002c: ldarg.1 - IL_002d: ldarg.0 - IL_002e: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ - IL_0033: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [mscorlib]System.Collections.IEqualityComparer, + IL_0019: ldloc.0 + IL_001a: ldc.i4.6 + IL_001b: shl + IL_001c: ldloc.0 + IL_001d: ldc.i4.2 + IL_001e: shr + IL_001f: add + IL_0020: add + IL_0021: add + IL_0022: stloc.0 + IL_0023: ldc.i4 0x9e3779b9 + IL_0028: ldarg.1 + IL_0029: ldarg.0 + IL_002a: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ + IL_002f: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [mscorlib]System.Collections.IEqualityComparer, !!0) - IL_0038: ldloc.0 - IL_0039: ldc.i4.6 - IL_003a: shl - IL_003b: ldloc.0 - IL_003c: ldc.i4.2 - IL_003d: shr - IL_003e: add - IL_003f: add - IL_0040: add - IL_0041: stloc.0 - IL_0042: ldloc.0 - IL_0043: ret - - .line 100001,100001 : 0,0 '' - IL_0044: ldc.i4.0 - IL_0045: ret + IL_0034: ldloc.0 + IL_0035: ldc.i4.6 + IL_0036: shl + IL_0037: ldloc.0 + IL_0038: ldc.i4.2 + IL_0039: shr + IL_003a: add + IL_003b: add + IL_003c: add + IL_003d: stloc.0 + IL_003e: ldloc.0 + IL_003f: ret + + .line 100001,100001 : 0,0 '' + IL_0040: ldc.i4.0 + IL_0041: ret } // end of method '<>f__AnonymousType1912756633`2'::GetHashCode .method public hidebysig virtual final @@ -455,7 +411,7 @@ class [mscorlib]System.Collections.IEqualityComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 83 (0x53) + // Code size 71 (0x47) .maxstack 5 .locals init ([0] class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> V_0, [1] class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> V_1) @@ -463,140 +419,116 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_004b + IL_0004: brfalse.s IL_003f .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: isinst class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> - IL_0010: stloc.0 - IL_0011: ldloc.0 - IL_0012: brfalse.s IL_0016 - - IL_0014: br.s IL_0018 - - IL_0016: br.s IL_0049 + IL_0006: ldarg.1 + IL_0007: isinst class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> + IL_000c: stloc.0 + IL_000d: ldloc.0 + IL_000e: brfalse.s IL_003d .line 100001,100001 : 0,0 '' - IL_0018: ldloc.0 - IL_0019: stloc.1 - IL_001a: ldarg.2 - IL_001b: ldarg.0 - IL_001c: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ - IL_0021: ldloc.1 - IL_0022: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ - IL_0027: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [mscorlib]System.Collections.IEqualityComparer, + IL_0010: ldloc.0 + IL_0011: stloc.1 + IL_0012: ldarg.2 + IL_0013: ldarg.0 + IL_0014: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ + IL_0019: ldloc.1 + IL_001a: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ + IL_001f: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [mscorlib]System.Collections.IEqualityComparer, !!0, !!0) - IL_002c: brfalse.s IL_0030 - - IL_002e: br.s IL_0032 - - IL_0030: br.s IL_0047 + IL_0024: brfalse.s IL_003b .line 100001,100001 : 0,0 '' - IL_0032: ldarg.2 - IL_0033: ldarg.0 - IL_0034: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ - IL_0039: ldloc.1 - IL_003a: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ - IL_003f: tail. - IL_0041: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [mscorlib]System.Collections.IEqualityComparer, + IL_0026: ldarg.2 + IL_0027: ldarg.0 + IL_0028: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ + IL_002d: ldloc.1 + IL_002e: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ + IL_0033: tail. + IL_0035: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [mscorlib]System.Collections.IEqualityComparer, !!0, !!0) - IL_0046: ret + IL_003a: ret .line 100001,100001 : 0,0 '' - IL_0047: ldc.i4.0 - IL_0048: ret + IL_003b: ldc.i4.0 + IL_003c: ret .line 100001,100001 : 0,0 '' - IL_0049: ldc.i4.0 - IL_004a: ret + IL_003d: ldc.i4.0 + IL_003e: ret .line 100001,100001 : 0,0 '' - IL_004b: ldarg.1 - IL_004c: ldnull - IL_004d: cgt.un - IL_004f: ldc.i4.0 - IL_0050: ceq - IL_0052: ret + IL_003f: ldarg.1 + IL_0040: ldnull + IL_0041: cgt.un + IL_0043: ldc.i4.0 + IL_0044: ceq + IL_0046: ret } // end of method '<>f__AnonymousType1912756633`2'::Equals .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 75 (0x4b) - .maxstack 4 + // Code size 63 (0x3f) + .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_0043 + IL_0004: brfalse.s IL_0037 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: ldnull - IL_000c: cgt.un - IL_000e: brfalse.s IL_0012 - - IL_0010: br.s IL_0014 - - IL_0012: br.s IL_0041 + IL_0006: ldarg.1 + IL_0007: ldnull + IL_0008: cgt.un + IL_000a: brfalse.s IL_0035 .line 100001,100001 : 0,0 '' - IL_0014: ldarg.0 - IL_0015: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ - IL_001a: ldarg.1 - IL_001b: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ - IL_0020: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + IL_000c: ldarg.0 + IL_000d: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ + IL_0012: ldarg.1 + IL_0013: ldfld !0 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::A@ + IL_0018: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, !!0) - IL_0025: brfalse.s IL_0029 - - IL_0027: br.s IL_002b - - IL_0029: br.s IL_003f + IL_001d: brfalse.s IL_0033 .line 100001,100001 : 0,0 '' - IL_002b: ldarg.0 - IL_002c: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ - IL_0031: ldarg.1 - IL_0032: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ - IL_0037: tail. - IL_0039: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + IL_001f: ldarg.0 + IL_0020: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ + IL_0025: ldarg.1 + IL_0026: ldfld !1 class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::B@ + IL_002b: tail. + IL_002d: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, !!0) - IL_003e: ret + IL_0032: ret .line 100001,100001 : 0,0 '' - IL_003f: ldc.i4.0 - IL_0040: ret + IL_0033: ldc.i4.0 + IL_0034: ret .line 100001,100001 : 0,0 '' - IL_0041: ldc.i4.0 - IL_0042: ret + IL_0035: ldc.i4.0 + IL_0036: ret .line 100001,100001 : 0,0 '' - IL_0043: ldarg.1 - IL_0044: ldnull - IL_0045: cgt.un - IL_0047: ldc.i4.0 - IL_0048: ceq - IL_004a: ret + IL_0037: ldarg.1 + IL_0038: ldnull + IL_0039: cgt.un + IL_003b: ldc.i4.0 + IL_003c: ceq + IL_003e: ret } // end of method '<>f__AnonymousType1912756633`2'::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 26 (0x1a) + // Code size 22 (0x16) .maxstack 4 .locals init ([0] class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> V_0) .line 1,1 : 1,1 '' @@ -604,22 +536,18 @@ IL_0001: isinst class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'> IL_0006: stloc.0 IL_0007: ldloc.0 - IL_0008: brfalse.s IL_000c - - IL_000a: br.s IL_000e - - IL_000c: br.s IL_0018 + IL_0008: brfalse.s IL_0014 .line 100001,100001 : 0,0 '' - IL_000e: ldarg.0 - IL_000f: ldloc.0 - IL_0010: tail. - IL_0012: callvirt instance bool class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType1912756633`2') - IL_0017: ret + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType1912756633`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType1912756633`2') + IL_0013: ret .line 100001,100001 : 0,0 '' - IL_0018: ldc.i4.0 - IL_0019: ret + IL_0014: ldc.i4.0 + IL_0015: ret } // end of method '<>f__AnonymousType1912756633`2'::Equals .property instance !'j__TPar' A() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ArgumentNamesInClosures01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ArgumentNamesInClosures01.il.bsl index 20e4f6be78f..e6142d728e9 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ArgumentNamesInClosures01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ArgumentNamesInClosures01.il.bsl @@ -36,13 +36,13 @@ // Offset: 0x000003A0 Length: 0x0000010D } .module ArgumentNamesInClosures01.dll -// MVID: {5FCFFD09-39CA-41B5-A745-038309FDCF5F} +// MVID: {60B68B7F-39CA-41B5-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05A70000 +// Image base: 0x00EF0000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/CodeGenRenamings01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/CodeGenRenamings01.il.bsl index 6fab8d600ef..08a6e0020c2 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/CodeGenRenamings01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/CodeGenRenamings01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly CodeGenRenamings01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.CodeGenRenamings01 { - // Offset: 0x00000000 Length: 0x000003CC + // Offset: 0x00000000 Length: 0x000003C8 } .mresource public FSharpOptimizationData.CodeGenRenamings01 { // Offset: 0x000003D0 Length: 0x0000011B } .module CodeGenRenamings01.exe -// MVID: {59B19213-8173-986B-A745-03831392B159} +// MVID: {60B78A57-8173-986B-A745-0383578AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x010A0000 +// Image base: 0x06CA0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -83,74 +83,68 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1>& next) cil managed { - // Code size 103 (0x67) + // Code size 97 (0x61) .maxstack 7 .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\\Misc\\CodeGenRenamings01.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\CodeGenRenamings01.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 CodeGenRenamings01/seq1@9::pc IL_0006: ldc.i4.1 IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0041 + IL_001b: nop + IL_001c: br.s IL_003b .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_0057 + IL_001e: nop + IL_001f: br.s IL_0051 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_005e + IL_0021: nop + IL_0022: br.s IL_0058 .line 100001,100001 : 0,0 '' - IL_002a: nop - IL_002b: ldarg.0 - IL_002c: ldc.i4.1 - IL_002d: stfld int32 CodeGenRenamings01/seq1@9::pc + IL_0024: nop .line 9,9 : 18,30 '' - IL_0032: ldarg.0 - IL_0033: ldc.i4.1 - IL_0034: ldc.i4.1 - IL_0035: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, + IL_0025: ldarg.0 + IL_0026: ldc.i4.1 + IL_0027: stfld int32 CodeGenRenamings01/seq1@9::pc + IL_002c: ldarg.0 + IL_002d: ldc.i4.1 + IL_002e: ldc.i4.1 + IL_002f: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, !1) - IL_003a: stfld class [mscorlib]System.Tuple`2 CodeGenRenamings01/seq1@9::current - IL_003f: ldc.i4.1 - IL_0040: ret + IL_0034: stfld class [mscorlib]System.Tuple`2 CodeGenRenamings01/seq1@9::current + IL_0039: ldc.i4.1 + IL_003a: ret - IL_0041: ldarg.0 - IL_0042: ldc.i4.2 - IL_0043: stfld int32 CodeGenRenamings01/seq1@9::pc .line 9,9 : 32,44 '' - IL_0048: ldarg.0 - IL_0049: ldc.i4.2 - IL_004a: ldc.i4.2 - IL_004b: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, + IL_003b: ldarg.0 + IL_003c: ldc.i4.2 + IL_003d: stfld int32 CodeGenRenamings01/seq1@9::pc + IL_0042: ldarg.0 + IL_0043: ldc.i4.2 + IL_0044: ldc.i4.2 + IL_0045: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, !1) - IL_0050: stfld class [mscorlib]System.Tuple`2 CodeGenRenamings01/seq1@9::current - IL_0055: ldc.i4.1 - IL_0056: ret - - IL_0057: ldarg.0 - IL_0058: ldc.i4.3 - IL_0059: stfld int32 CodeGenRenamings01/seq1@9::pc - IL_005e: ldarg.0 - IL_005f: ldnull - IL_0060: stfld class [mscorlib]System.Tuple`2 CodeGenRenamings01/seq1@9::current - IL_0065: ldc.i4.0 - IL_0066: ret + IL_004a: stfld class [mscorlib]System.Tuple`2 CodeGenRenamings01/seq1@9::current + IL_004f: ldc.i4.1 + IL_0050: ret + + IL_0051: ldarg.0 + IL_0052: ldc.i4.3 + IL_0053: stfld int32 CodeGenRenamings01/seq1@9::pc + IL_0058: ldarg.0 + IL_0059: ldnull + IL_005a: stfld class [mscorlib]System.Tuple`2 CodeGenRenamings01/seq1@9::current + IL_005f: ldc.i4.0 + IL_0060: ret } // end of method seq1@9::GenerateNext .method public strict virtual instance void @@ -167,52 +161,44 @@ .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 CodeGenRenamings01/seq1@9::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.0 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.0 + IL_002b: ret - IL_0034: ldc.i4.0 - IL_0035: ret + IL_002c: ldc.i4.0 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method seq1@9::get_CheckClose .method public strict virtual instance class [mscorlib]System.Tuple`2 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/CustomAttributeGenericParameter01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/CustomAttributeGenericParameter01.il.bsl index 63d76598150..f3c32848290 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/CustomAttributeGenericParameter01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/CustomAttributeGenericParameter01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly CustomAttributeGenericParameter01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.CustomAttributeGenericParameter01 { - // Offset: 0x00000000 Length: 0x000002C2 + // Offset: 0x00000000 Length: 0x000002BE } .mresource public FSharpOptimizationData.CustomAttributeGenericParameter01 { // Offset: 0x000002C8 Length: 0x0000007A } .module CustomAttributeGenericParameter01.exe -// MVID: {59B19213-F08A-F524-A745-03831392B159} +// MVID: {60B68B7F-F08A-F524-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x001D0000 +// Image base: 0x05340000 // =============== CLASS MEMBERS DECLARATION =================== @@ -58,7 +58,7 @@ // Code size 2 (0x2) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 48,49 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\CustomAttributeGenericParameter01.fs' + .line 4,4 : 48,49 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\CustomAttributeGenericParameter01.fs' IL_0000: ldarg.0 IL_0001: ret } // end of method M::f diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Decimal01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Decimal01.il.bsl index 6fa27f19cbf..b0c34bdda4a 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Decimal01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Decimal01.il.bsl @@ -34,20 +34,20 @@ } .mresource public FSharpSignatureData.Decimal01 { - // Offset: 0x00000000 Length: 0x00000139 + // Offset: 0x00000000 Length: 0x0000013B } .mresource public FSharpOptimizationData.Decimal01 { // Offset: 0x00000140 Length: 0x00000050 } .module Decimal01.exe -// MVID: {5F1F9A50-F150-FA46-A745-0383509A1F5F} +// MVID: {60B68B7F-F150-FA46-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06840000 +// Image base: 0x05600000 // =============== CLASS MEMBERS DECLARATION =================== @@ -71,7 +71,7 @@ // Code size 13 (0xd) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 9,13 'C:\\kevinransom\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\Decimal01.fs' + .line 6,6 : 9,13 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\Decimal01.fs' IL_0000: ldc.i4.s 12 IL_0002: ldc.i4.0 IL_0003: ldc.i4.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EntryPoint01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EntryPoint01.il.bsl index 4768f783d4c..4afe8d6966b 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.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly EntryPoint01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.EntryPoint01 { - // Offset: 0x00000000 Length: 0x00000253 + // Offset: 0x00000000 Length: 0x0000024F } .mresource public FSharpOptimizationData.EntryPoint01 { // Offset: 0x00000258 Length: 0x00000090 } .module EntryPoint01.exe -// MVID: {59B19213-9846-72C1-A745-03831392B159} +// MVID: {60B68B7F-9846-72C1-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00680000 +// Image base: 0x071C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,10 +66,10 @@ { .entrypoint .custom instance void [FSharp.Core]Microsoft.FSharp.Core.EntryPointAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 39 (0x27) + // Code size 35 (0x23) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 8,8 : 9,39 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\EntryPoint01.fs' + .line 8,8 : 9,39 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\EntryPoint01.fs' .line 100001,100001 : 0,0 '' IL_0000: ldc.i4.0 IL_0001: stsfld int32 ''.$EntryPoint01::init@ @@ -77,26 +77,22 @@ IL_000b: pop IL_000c: call int32 EntryPoint01::get_static_initializer() IL_0011: ldc.i4.s 10 - IL_0013: bne.un.s IL_0017 - - IL_0015: br.s IL_0019 - - IL_0017: br.s IL_001d + IL_0013: bne.un.s IL_0019 .line 8,8 : 40,41 '' - IL_0019: ldc.i4.0 + IL_0015: ldc.i4.0 .line 100001,100001 : 0,0 '' - IL_001a: nop - IL_001b: br.s IL_001f + IL_0016: nop + IL_0017: br.s IL_001b .line 8,8 : 47,48 '' - IL_001d: ldc.i4.1 + IL_0019: ldc.i4.1 .line 100001,100001 : 0,0 '' - IL_001e: nop + IL_001a: nop .line 100001,100001 : 0,0 '' - IL_001f: tail. - IL_0021: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32) - IL_0026: ret + IL_001b: tail. + IL_001d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32) + IL_0022: ret } // end of method EntryPoint01::main .property int32 static_initializer() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EqualsOnUnions01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EqualsOnUnions01.il.bsl index 5d270545498..f1c372c2645 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EqualsOnUnions01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/EqualsOnUnions01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly EqualsOnUnions01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.EqualsOnUnions01 { - // Offset: 0x00000000 Length: 0x0000064B + // Offset: 0x00000000 Length: 0x0000063B } .mresource public FSharpOptimizationData.EqualsOnUnions01 { - // Offset: 0x00000650 Length: 0x000001C7 + // Offset: 0x00000640 Length: 0x000001C7 } .module EqualsOnUnions01.exe -// MVID: {59B19213-BBFB-14A0-A745-03831392B159} +// MVID: {60B68B7F-BBFB-14A0-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01350000 +// Image base: 0x07200000 // =============== CLASS MEMBERS DECLARATION =================== @@ -339,7 +339,7 @@ instance int32 CompareTo(class EqualsOnUnions01/U obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 158 (0x9e) + // Code size 131 (0x83) .maxstack 4 .locals init ([0] int32 V_0, [1] class EqualsOnUnions01/U V_1, @@ -351,130 +351,106 @@ [7] int32 V_7, [8] int32 V_8) .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\\Misc\\EqualsOnUnions01.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\EqualsOnUnions01.fs' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000d - - IL_0008: br IL_0090 - - .line 100001,100001 : 0,0 '' - IL_000d: ldarg.1 - IL_000e: ldnull - IL_000f: cgt.un - IL_0011: brfalse.s IL_0015 - - IL_0013: br.s IL_001a - - IL_0015: br IL_008e - - .line 100001,100001 : 0,0 '' - IL_001a: ldarg.0 - IL_001b: stloc.1 - IL_001c: ldloc.1 - IL_001d: isinst EqualsOnUnions01/U/B - IL_0022: brfalse.s IL_0027 - - IL_0024: ldc.i4.1 - IL_0025: br.s IL_0028 - - IL_0027: ldc.i4.0 - IL_0028: stloc.0 - IL_0029: ldarg.1 - IL_002a: stloc.3 - IL_002b: ldloc.3 - IL_002c: isinst EqualsOnUnions01/U/B - IL_0031: brfalse.s IL_0036 - - IL_0033: ldc.i4.1 - IL_0034: br.s IL_0037 - - IL_0036: ldc.i4.0 - IL_0037: stloc.2 - IL_0038: ldloc.0 - IL_0039: ldloc.2 - IL_003a: bne.un.s IL_003e - - IL_003c: br.s IL_0040 - - IL_003e: br.s IL_008a + IL_0004: brfalse IL_0079 .line 100001,100001 : 0,0 '' - IL_0040: ldarg.0 - IL_0041: isinst EqualsOnUnions01/U/B - IL_0046: brfalse.s IL_004a - - IL_0048: br.s IL_004c - - IL_004a: br.s IL_0088 + IL_0009: ldarg.1 + IL_000a: ldnull + IL_000b: cgt.un + IL_000d: brfalse.s IL_0077 .line 100001,100001 : 0,0 '' - IL_004c: ldarg.0 - IL_004d: castclass EqualsOnUnions01/U/B - IL_0052: stloc.s V_4 - IL_0054: ldarg.1 - IL_0055: castclass EqualsOnUnions01/U/B - IL_005a: stloc.s V_5 - IL_005c: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0061: stloc.s V_6 - IL_0063: ldloc.s V_4 - IL_0065: ldfld int32 EqualsOnUnions01/U/B::item - IL_006a: stloc.s V_7 - IL_006c: ldloc.s V_5 - IL_006e: ldfld int32 EqualsOnUnions01/U/B::item - IL_0073: stloc.s V_8 - IL_0075: ldloc.s V_7 - IL_0077: ldloc.s V_8 - IL_0079: bge.s IL_007d - - IL_007b: br.s IL_007f - - IL_007d: br.s IL_0081 + IL_000f: ldarg.0 + IL_0010: stloc.1 + IL_0011: ldloc.1 + IL_0012: isinst EqualsOnUnions01/U/B + IL_0017: brfalse.s IL_001c + + IL_0019: ldc.i4.1 + IL_001a: br.s IL_001d + + IL_001c: ldc.i4.0 + IL_001d: stloc.0 + IL_001e: ldarg.1 + IL_001f: stloc.3 + IL_0020: ldloc.3 + IL_0021: isinst EqualsOnUnions01/U/B + IL_0026: brfalse.s IL_002b + + IL_0028: ldc.i4.1 + IL_0029: br.s IL_002c + + IL_002b: ldc.i4.0 + IL_002c: stloc.2 + IL_002d: ldloc.0 + IL_002e: ldloc.2 + IL_002f: bne.un.s IL_0073 + + .line 100001,100001 : 0,0 '' + IL_0031: ldarg.0 + IL_0032: isinst EqualsOnUnions01/U/B + IL_0037: brfalse.s IL_0071 + + .line 100001,100001 : 0,0 '' + IL_0039: ldarg.0 + IL_003a: castclass EqualsOnUnions01/U/B + IL_003f: stloc.s V_4 + IL_0041: ldarg.1 + IL_0042: castclass EqualsOnUnions01/U/B + IL_0047: stloc.s V_5 + IL_0049: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_004e: stloc.s V_6 + IL_0050: ldloc.s V_4 + IL_0052: ldfld int32 EqualsOnUnions01/U/B::item + IL_0057: stloc.s V_7 + IL_0059: ldloc.s V_5 + IL_005b: ldfld int32 EqualsOnUnions01/U/B::item + IL_0060: stloc.s V_8 + IL_0062: ldloc.s V_7 + IL_0064: ldloc.s V_8 + IL_0066: bge.s IL_006a .line 100001,100001 : 0,0 '' - IL_007f: ldc.i4.m1 - IL_0080: ret + IL_0068: ldc.i4.m1 + IL_0069: ret .line 100001,100001 : 0,0 '' - IL_0081: ldloc.s V_7 - IL_0083: ldloc.s V_8 - IL_0085: cgt - IL_0087: ret + IL_006a: ldloc.s V_7 + IL_006c: ldloc.s V_8 + IL_006e: cgt + IL_0070: ret .line 100001,100001 : 0,0 '' - IL_0088: ldc.i4.0 - IL_0089: ret + IL_0071: ldc.i4.0 + IL_0072: ret .line 100001,100001 : 0,0 '' - IL_008a: ldloc.0 - IL_008b: ldloc.2 - IL_008c: sub - IL_008d: ret + IL_0073: ldloc.0 + IL_0074: ldloc.2 + IL_0075: sub + IL_0076: ret .line 100001,100001 : 0,0 '' - IL_008e: ldc.i4.1 - IL_008f: ret + IL_0077: ldc.i4.1 + IL_0078: ret .line 100001,100001 : 0,0 '' - IL_0090: ldarg.1 - IL_0091: ldnull - IL_0092: cgt.un - IL_0094: brfalse.s IL_0098 - - IL_0096: br.s IL_009a - - IL_0098: br.s IL_009c + IL_0079: ldarg.1 + IL_007a: ldnull + IL_007b: cgt.un + IL_007d: brfalse.s IL_0081 .line 100001,100001 : 0,0 '' - IL_009a: ldc.i4.m1 - IL_009b: ret + IL_007f: ldc.i4.m1 + IL_0080: ret .line 100001,100001 : 0,0 '' - IL_009c: ldc.i4.0 - IL_009d: ret + IL_0081: ldc.i4.0 + IL_0082: ret } // end of method U::CompareTo .method public hidebysig virtual final @@ -496,7 +472,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 173 (0xad) + // Code size 146 (0x92) .maxstack 4 .locals init ([0] class EqualsOnUnions01/U V_0, [1] int32 V_1, @@ -515,135 +491,111 @@ IL_0007: ldarg.0 IL_0008: ldnull IL_0009: cgt.un - IL_000b: brfalse.s IL_000f - - IL_000d: br.s IL_0014 - - IL_000f: br IL_009a + IL_000b: brfalse IL_0083 .line 100001,100001 : 0,0 '' - IL_0014: ldarg.1 - IL_0015: unbox.any EqualsOnUnions01/U - IL_001a: ldnull - IL_001b: cgt.un - IL_001d: brfalse.s IL_0021 - - IL_001f: br.s IL_0026 - - IL_0021: br IL_0098 + IL_0010: ldarg.1 + IL_0011: unbox.any EqualsOnUnions01/U + IL_0016: ldnull + IL_0017: cgt.un + IL_0019: brfalse.s IL_0081 .line 100001,100001 : 0,0 '' - IL_0026: ldarg.0 - IL_0027: stloc.2 - IL_0028: ldloc.2 - IL_0029: isinst EqualsOnUnions01/U/B - IL_002e: brfalse.s IL_0033 - - IL_0030: ldc.i4.1 - IL_0031: br.s IL_0034 + IL_001b: ldarg.0 + IL_001c: stloc.2 + IL_001d: ldloc.2 + IL_001e: isinst EqualsOnUnions01/U/B + IL_0023: brfalse.s IL_0028 - IL_0033: ldc.i4.0 - IL_0034: stloc.1 - IL_0035: ldloc.0 - IL_0036: stloc.s V_4 - IL_0038: ldloc.s V_4 - IL_003a: isinst EqualsOnUnions01/U/B - IL_003f: brfalse.s IL_0044 + IL_0025: ldc.i4.1 + IL_0026: br.s IL_0029 - IL_0041: ldc.i4.1 - IL_0042: br.s IL_0045 + IL_0028: ldc.i4.0 + IL_0029: stloc.1 + IL_002a: ldloc.0 + IL_002b: stloc.s V_4 + IL_002d: ldloc.s V_4 + IL_002f: isinst EqualsOnUnions01/U/B + IL_0034: brfalse.s IL_0039 - IL_0044: ldc.i4.0 - IL_0045: stloc.3 - IL_0046: ldloc.1 - IL_0047: ldloc.3 - IL_0048: bne.un.s IL_004c + IL_0036: ldc.i4.1 + IL_0037: br.s IL_003a - IL_004a: br.s IL_004e - - IL_004c: br.s IL_0094 + IL_0039: ldc.i4.0 + IL_003a: stloc.3 + IL_003b: ldloc.1 + IL_003c: ldloc.3 + IL_003d: bne.un.s IL_007d .line 100001,100001 : 0,0 '' - IL_004e: ldarg.0 - IL_004f: isinst EqualsOnUnions01/U/B - IL_0054: brfalse.s IL_0058 - - IL_0056: br.s IL_005a - - IL_0058: br.s IL_0092 + IL_003f: ldarg.0 + IL_0040: isinst EqualsOnUnions01/U/B + IL_0045: brfalse.s IL_007b .line 100001,100001 : 0,0 '' - IL_005a: ldarg.0 - IL_005b: castclass EqualsOnUnions01/U/B - IL_0060: stloc.s V_5 - IL_0062: ldloc.0 - IL_0063: castclass EqualsOnUnions01/U/B - IL_0068: stloc.s V_6 - IL_006a: ldarg.2 - IL_006b: stloc.s V_7 - IL_006d: ldloc.s V_5 - IL_006f: ldfld int32 EqualsOnUnions01/U/B::item - IL_0074: stloc.s V_8 - IL_0076: ldloc.s V_6 - IL_0078: ldfld int32 EqualsOnUnions01/U/B::item - IL_007d: stloc.s V_9 - IL_007f: ldloc.s V_8 - IL_0081: ldloc.s V_9 - IL_0083: bge.s IL_0087 - - IL_0085: br.s IL_0089 - - IL_0087: br.s IL_008b + IL_0047: ldarg.0 + IL_0048: castclass EqualsOnUnions01/U/B + IL_004d: stloc.s V_5 + IL_004f: ldloc.0 + IL_0050: castclass EqualsOnUnions01/U/B + IL_0055: stloc.s V_6 + IL_0057: ldarg.2 + IL_0058: stloc.s V_7 + IL_005a: ldloc.s V_5 + IL_005c: ldfld int32 EqualsOnUnions01/U/B::item + IL_0061: stloc.s V_8 + IL_0063: ldloc.s V_6 + IL_0065: ldfld int32 EqualsOnUnions01/U/B::item + IL_006a: stloc.s V_9 + IL_006c: ldloc.s V_8 + IL_006e: ldloc.s V_9 + IL_0070: bge.s IL_0074 .line 100001,100001 : 0,0 '' - IL_0089: ldc.i4.m1 - IL_008a: ret + IL_0072: ldc.i4.m1 + IL_0073: ret .line 100001,100001 : 0,0 '' - IL_008b: ldloc.s V_8 - IL_008d: ldloc.s V_9 - IL_008f: cgt - IL_0091: ret + IL_0074: ldloc.s V_8 + IL_0076: ldloc.s V_9 + IL_0078: cgt + IL_007a: ret .line 100001,100001 : 0,0 '' - IL_0092: ldc.i4.0 - IL_0093: ret + IL_007b: ldc.i4.0 + IL_007c: ret .line 100001,100001 : 0,0 '' - IL_0094: ldloc.1 - IL_0095: ldloc.3 - IL_0096: sub - IL_0097: ret + IL_007d: ldloc.1 + IL_007e: ldloc.3 + IL_007f: sub + IL_0080: ret .line 100001,100001 : 0,0 '' - IL_0098: ldc.i4.1 - IL_0099: ret + IL_0081: ldc.i4.1 + IL_0082: ret .line 100001,100001 : 0,0 '' - IL_009a: ldarg.1 - IL_009b: unbox.any EqualsOnUnions01/U - IL_00a0: ldnull - IL_00a1: cgt.un - IL_00a3: brfalse.s IL_00a7 - - IL_00a5: br.s IL_00a9 - - IL_00a7: br.s IL_00ab + IL_0083: ldarg.1 + IL_0084: unbox.any EqualsOnUnions01/U + IL_0089: ldnull + IL_008a: cgt.un + IL_008c: brfalse.s IL_0090 .line 100001,100001 : 0,0 '' - IL_00a9: ldc.i4.m1 - IL_00aa: ret + IL_008e: ldc.i4.m1 + IL_008f: ret .line 100001,100001 : 0,0 '' - IL_00ab: ldc.i4.0 - IL_00ac: ret + IL_0090: ldc.i4.0 + IL_0091: 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 75 (0x4b) + // Code size 67 (0x43) .maxstack 7 .locals init ([0] int32 V_0, [1] class EqualsOnUnions01/U/B V_1, @@ -653,63 +605,55 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_0049 - - .line 100001,100001 : 0,0 '' - IL_000a: ldc.i4.0 - IL_000b: stloc.0 - IL_000c: ldarg.0 - IL_000d: isinst EqualsOnUnions01/U/B - IL_0012: brfalse.s IL_0016 - - IL_0014: br.s IL_0018 - - IL_0016: br.s IL_003a - - .line 100001,100001 : 0,0 '' - IL_0018: ldarg.0 - IL_0019: castclass EqualsOnUnions01/U/B - IL_001e: stloc.1 - IL_001f: ldc.i4.1 - IL_0020: stloc.0 - IL_0021: ldc.i4 0x9e3779b9 - IL_0026: ldarg.1 - IL_0027: stloc.2 - IL_0028: ldloc.1 - IL_0029: ldfld int32 EqualsOnUnions01/U/B::item - IL_002e: ldloc.0 - IL_002f: ldc.i4.6 - IL_0030: shl - IL_0031: ldloc.0 - IL_0032: ldc.i4.2 - IL_0033: shr - IL_0034: add - IL_0035: add - IL_0036: add - IL_0037: stloc.0 - IL_0038: ldloc.0 - IL_0039: ret - - .line 100001,100001 : 0,0 '' - IL_003a: ldarg.0 - IL_003b: stloc.3 - IL_003c: ldloc.3 - IL_003d: isinst EqualsOnUnions01/U/B - IL_0042: brfalse.s IL_0047 - - IL_0044: ldc.i4.1 - IL_0045: br.s IL_0048 - - IL_0047: ldc.i4.0 - IL_0048: ret - - .line 100001,100001 : 0,0 '' - IL_0049: ldc.i4.0 - IL_004a: ret + IL_0004: brfalse.s IL_0041 + + .line 100001,100001 : 0,0 '' + IL_0006: ldc.i4.0 + IL_0007: stloc.0 + IL_0008: ldarg.0 + IL_0009: isinst EqualsOnUnions01/U/B + IL_000e: brfalse.s IL_0032 + + .line 100001,100001 : 0,0 '' + IL_0010: ldarg.0 + IL_0011: castclass EqualsOnUnions01/U/B + IL_0016: stloc.1 + IL_0017: ldc.i4.1 + IL_0018: stloc.0 + IL_0019: ldc.i4 0x9e3779b9 + IL_001e: ldarg.1 + IL_001f: stloc.2 + IL_0020: ldloc.1 + IL_0021: ldfld int32 EqualsOnUnions01/U/B::item + IL_0026: ldloc.0 + IL_0027: ldc.i4.6 + IL_0028: shl + IL_0029: ldloc.0 + IL_002a: ldc.i4.2 + IL_002b: shr + IL_002c: add + IL_002d: add + IL_002e: add + IL_002f: stloc.0 + IL_0030: ldloc.0 + IL_0031: ret + + .line 100001,100001 : 0,0 '' + IL_0032: ldarg.0 + IL_0033: stloc.3 + IL_0034: ldloc.3 + IL_0035: isinst EqualsOnUnions01/U/B + IL_003a: brfalse.s IL_003f + + IL_003c: ldc.i4.1 + IL_003d: br.s IL_0040 + + IL_003f: ldc.i4.0 + IL_0040: ret + + .line 100001,100001 : 0,0 '' + IL_0041: ldc.i4.0 + IL_0042: ret } // end of method U::GetHashCode .method public hidebysig virtual final @@ -730,7 +674,7 @@ class [mscorlib]System.Collections.IEqualityComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 133 (0x85) + // Code size 114 (0x72) .maxstack 4 .locals init ([0] class EqualsOnUnions01/U V_0, [1] class EqualsOnUnions01/U V_1, @@ -745,107 +689,91 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000d - - IL_0008: br IL_007d + IL_0004: brfalse.s IL_006a .line 100001,100001 : 0,0 '' - IL_000d: ldarg.1 - IL_000e: isinst EqualsOnUnions01/U - IL_0013: stloc.0 - IL_0014: ldloc.0 - IL_0015: brfalse.s IL_0019 - - IL_0017: br.s IL_001b - - IL_0019: br.s IL_007b + IL_0006: ldarg.1 + IL_0007: isinst EqualsOnUnions01/U + IL_000c: stloc.0 + IL_000d: ldloc.0 + IL_000e: brfalse.s IL_0068 .line 100001,100001 : 0,0 '' - IL_001b: ldloc.0 - IL_001c: stloc.1 - IL_001d: ldarg.0 - IL_001e: stloc.3 - IL_001f: ldloc.3 - IL_0020: isinst EqualsOnUnions01/U/B - IL_0025: brfalse.s IL_002a - - IL_0027: ldc.i4.1 - IL_0028: br.s IL_002b - - IL_002a: ldc.i4.0 - IL_002b: stloc.2 - IL_002c: ldloc.1 - IL_002d: stloc.s V_5 - IL_002f: ldloc.s V_5 - IL_0031: isinst EqualsOnUnions01/U/B - IL_0036: brfalse.s IL_003b - - IL_0038: ldc.i4.1 - IL_0039: br.s IL_003c - - IL_003b: ldc.i4.0 - IL_003c: stloc.s V_4 - IL_003e: ldloc.2 - IL_003f: ldloc.s V_4 - IL_0041: bne.un.s IL_0045 + IL_0010: ldloc.0 + IL_0011: stloc.1 + IL_0012: ldarg.0 + IL_0013: stloc.3 + IL_0014: ldloc.3 + IL_0015: isinst EqualsOnUnions01/U/B + IL_001a: brfalse.s IL_001f - IL_0043: br.s IL_0047 + IL_001c: ldc.i4.1 + IL_001d: br.s IL_0020 - IL_0045: br.s IL_0079 + IL_001f: ldc.i4.0 + IL_0020: stloc.2 + IL_0021: ldloc.1 + IL_0022: stloc.s V_5 + IL_0024: ldloc.s V_5 + IL_0026: isinst EqualsOnUnions01/U/B + IL_002b: brfalse.s IL_0030 - .line 100001,100001 : 0,0 '' - IL_0047: ldarg.0 - IL_0048: isinst EqualsOnUnions01/U/B - IL_004d: brfalse.s IL_0051 + IL_002d: ldc.i4.1 + IL_002e: br.s IL_0031 - IL_004f: br.s IL_0053 + IL_0030: ldc.i4.0 + IL_0031: stloc.s V_4 + IL_0033: ldloc.2 + IL_0034: ldloc.s V_4 + IL_0036: bne.un.s IL_0066 - IL_0051: br.s IL_0077 + .line 100001,100001 : 0,0 '' + IL_0038: ldarg.0 + IL_0039: isinst EqualsOnUnions01/U/B + IL_003e: brfalse.s IL_0064 .line 100001,100001 : 0,0 '' - IL_0053: ldarg.0 - IL_0054: castclass EqualsOnUnions01/U/B - IL_0059: stloc.s V_6 - IL_005b: ldloc.1 - IL_005c: castclass EqualsOnUnions01/U/B - IL_0061: stloc.s V_7 - IL_0063: ldarg.2 - IL_0064: stloc.s V_8 - IL_0066: ldloc.s V_6 - IL_0068: ldfld int32 EqualsOnUnions01/U/B::item - IL_006d: ldloc.s V_7 - IL_006f: ldfld int32 EqualsOnUnions01/U/B::item - IL_0074: ceq - IL_0076: ret + IL_0040: ldarg.0 + IL_0041: castclass EqualsOnUnions01/U/B + IL_0046: stloc.s V_6 + IL_0048: ldloc.1 + IL_0049: castclass EqualsOnUnions01/U/B + IL_004e: stloc.s V_7 + IL_0050: ldarg.2 + IL_0051: stloc.s V_8 + IL_0053: ldloc.s V_6 + IL_0055: ldfld int32 EqualsOnUnions01/U/B::item + IL_005a: ldloc.s V_7 + IL_005c: ldfld int32 EqualsOnUnions01/U/B::item + IL_0061: ceq + IL_0063: ret .line 100001,100001 : 0,0 '' - IL_0077: ldc.i4.1 - IL_0078: ret + IL_0064: ldc.i4.1 + IL_0065: ret .line 100001,100001 : 0,0 '' - IL_0079: ldc.i4.0 - IL_007a: ret + IL_0066: ldc.i4.0 + IL_0067: ret .line 100001,100001 : 0,0 '' - IL_007b: ldc.i4.0 - IL_007c: ret + IL_0068: ldc.i4.0 + IL_0069: ret .line 100001,100001 : 0,0 '' - IL_007d: ldarg.1 - IL_007e: ldnull - IL_007f: cgt.un - IL_0081: ldc.i4.0 - IL_0082: ceq - IL_0084: ret + IL_006a: ldarg.1 + IL_006b: ldnull + IL_006c: cgt.un + IL_006e: ldc.i4.0 + IL_006f: ceq + IL_0071: ret } // end of method U::Equals .method public hidebysig virtual final instance bool Equals(class EqualsOnUnions01/U obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 120 (0x78) + // Code size 101 (0x65) .maxstack 4 .locals init ([0] int32 V_0, [1] class EqualsOnUnions01/U V_1, @@ -857,102 +785,86 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000d - - IL_0008: br IL_0070 + IL_0004: brfalse.s IL_005d .line 100001,100001 : 0,0 '' - IL_000d: ldarg.1 - IL_000e: ldnull - IL_000f: cgt.un - IL_0011: brfalse.s IL_0015 - - IL_0013: br.s IL_0017 - - IL_0015: br.s IL_006e + IL_0006: ldarg.1 + IL_0007: ldnull + IL_0008: cgt.un + IL_000a: brfalse.s IL_005b .line 100001,100001 : 0,0 '' - IL_0017: ldarg.0 - IL_0018: stloc.1 - IL_0019: ldloc.1 - IL_001a: isinst EqualsOnUnions01/U/B - IL_001f: brfalse.s IL_0024 - - IL_0021: ldc.i4.1 - IL_0022: br.s IL_0025 - - IL_0024: ldc.i4.0 - IL_0025: stloc.0 - IL_0026: ldarg.1 - IL_0027: stloc.3 - IL_0028: ldloc.3 - IL_0029: isinst EqualsOnUnions01/U/B - IL_002e: brfalse.s IL_0033 + IL_000c: ldarg.0 + IL_000d: stloc.1 + IL_000e: ldloc.1 + IL_000f: isinst EqualsOnUnions01/U/B + IL_0014: brfalse.s IL_0019 - IL_0030: ldc.i4.1 - IL_0031: br.s IL_0034 + IL_0016: ldc.i4.1 + IL_0017: br.s IL_001a - IL_0033: ldc.i4.0 - IL_0034: stloc.2 - IL_0035: ldloc.0 - IL_0036: ldloc.2 - IL_0037: bne.un.s IL_003b + IL_0019: ldc.i4.0 + IL_001a: stloc.0 + IL_001b: ldarg.1 + IL_001c: stloc.3 + IL_001d: ldloc.3 + IL_001e: isinst EqualsOnUnions01/U/B + IL_0023: brfalse.s IL_0028 - IL_0039: br.s IL_003d + IL_0025: ldc.i4.1 + IL_0026: br.s IL_0029 - IL_003b: br.s IL_006c + IL_0028: ldc.i4.0 + IL_0029: stloc.2 + IL_002a: ldloc.0 + IL_002b: ldloc.2 + IL_002c: bne.un.s IL_0059 .line 100001,100001 : 0,0 '' - IL_003d: ldarg.0 - IL_003e: isinst EqualsOnUnions01/U/B - IL_0043: brfalse.s IL_0047 - - IL_0045: br.s IL_0049 - - IL_0047: br.s IL_006a + IL_002e: ldarg.0 + IL_002f: isinst EqualsOnUnions01/U/B + IL_0034: brfalse.s IL_0057 .line 100001,100001 : 0,0 '' - IL_0049: ldarg.0 - IL_004a: castclass EqualsOnUnions01/U/B - IL_004f: stloc.s V_4 - IL_0051: ldarg.1 - IL_0052: castclass EqualsOnUnions01/U/B - IL_0057: stloc.s V_5 - IL_0059: ldloc.s V_4 - IL_005b: ldfld int32 EqualsOnUnions01/U/B::item - IL_0060: ldloc.s V_5 - IL_0062: ldfld int32 EqualsOnUnions01/U/B::item - IL_0067: ceq - IL_0069: ret + IL_0036: ldarg.0 + IL_0037: castclass EqualsOnUnions01/U/B + IL_003c: stloc.s V_4 + IL_003e: ldarg.1 + IL_003f: castclass EqualsOnUnions01/U/B + IL_0044: stloc.s V_5 + IL_0046: ldloc.s V_4 + IL_0048: ldfld int32 EqualsOnUnions01/U/B::item + IL_004d: ldloc.s V_5 + IL_004f: ldfld int32 EqualsOnUnions01/U/B::item + IL_0054: ceq + IL_0056: ret .line 100001,100001 : 0,0 '' - IL_006a: ldc.i4.1 - IL_006b: ret + IL_0057: ldc.i4.1 + IL_0058: ret .line 100001,100001 : 0,0 '' - IL_006c: ldc.i4.0 - IL_006d: ret + IL_0059: ldc.i4.0 + IL_005a: ret .line 100001,100001 : 0,0 '' - IL_006e: ldc.i4.0 - IL_006f: ret + IL_005b: ldc.i4.0 + IL_005c: ret .line 100001,100001 : 0,0 '' - IL_0070: ldarg.1 - IL_0071: ldnull - IL_0072: cgt.un - IL_0074: ldc.i4.0 - IL_0075: ceq - IL_0077: ret + IL_005d: ldarg.1 + IL_005e: ldnull + IL_005f: cgt.un + IL_0061: ldc.i4.0 + IL_0062: ceq + IL_0064: 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 24 (0x18) + // Code size 20 (0x14) .maxstack 4 .locals init ([0] class EqualsOnUnions01/U V_0) .line 6,6 : 6,7 '' @@ -960,21 +872,17 @@ IL_0001: isinst EqualsOnUnions01/U IL_0006: stloc.0 IL_0007: ldloc.0 - IL_0008: brfalse.s IL_000c - - IL_000a: br.s IL_000e - - IL_000c: br.s IL_0016 + IL_0008: brfalse.s IL_0012 .line 100001,100001 : 0,0 '' - IL_000e: ldarg.0 - IL_000f: ldloc.0 - IL_0010: callvirt instance bool EqualsOnUnions01/U::Equals(class EqualsOnUnions01/U) - IL_0015: ret + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: callvirt instance bool EqualsOnUnions01/U::Equals(class EqualsOnUnions01/U) + IL_0011: ret .line 100001,100001 : 0,0 '' - IL_0016: ldc.i4.0 - IL_0017: ret + IL_0012: ldc.i4.0 + IL_0013: ret } // end of method U::Equals .property instance int32 Tag() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop01.il.bsl index 0f5a2183244..1cbb7d93ca5 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly ForLoop01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.ForLoop01 { - // Offset: 0x00000000 Length: 0x0000013F + // Offset: 0x00000000 Length: 0x0000013B } .mresource public FSharpOptimizationData.ForLoop01 { - // Offset: 0x00000148 Length: 0x00000050 + // Offset: 0x00000140 Length: 0x00000050 } .module ForLoop01.exe -// MVID: {59B19213-1795-791C-A745-03831392B159} +// MVID: {60B68B7F-1795-791C-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x002E0000 +// Image base: 0x05340000 // =============== 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 : 1,24 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\ForLoop01.fs' + .line 5,5 : 1,24 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\ForLoop01.fs' IL_0000: ldc.i4.1 IL_0001: ldc.i4.1 IL_0002: ldc.i4.3 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop02.il.bsl index f54c8480177..d40f24fed45 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.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly ForLoop02 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.ForLoop02 { - // Offset: 0x00000000 Length: 0x0000013F + // Offset: 0x00000000 Length: 0x0000013B } .mresource public FSharpOptimizationData.ForLoop02 { - // Offset: 0x00000148 Length: 0x00000050 + // Offset: 0x00000140 Length: 0x00000050 } .module ForLoop02.exe -// MVID: {59B19213-1736-791C-A745-03831392B159} +// MVID: {60B68B7F-1736-791C-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x03030000 +// Image base: 0x05980000 // =============== 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 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\ForLoop02.fs' + .line 5,5 : 1,19 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\ForLoop02.fs' IL_0000: ldc.i4.1 IL_0001: stloc.0 IL_0002: br.s IL_0022 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop03.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ForLoop03.il.bsl index e6fda0879b7..61f328b715c 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.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly ForLoop03 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.ForLoop03 { - // Offset: 0x00000000 Length: 0x000001FA + // Offset: 0x00000000 Length: 0x000001F6 } .mresource public FSharpOptimizationData.ForLoop03 { // Offset: 0x00000200 Length: 0x0000007B } .module ForLoop03.exe -// MVID: {59B19213-1757-791C-A745-03831392B159} +// MVID: {60B68B7F-1757-791C-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00680000 +// Image base: 0x07280000 // =============== CLASS MEMBERS DECLARATION =================== @@ -73,7 +73,7 @@ [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 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\ForLoop03.fs' + .line 10,10 : 4,21 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\ForLoop03.fs' IL_0000: ldc.i4.0 IL_0001: stloc.0 .line 11,11 : 4,28 '' diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/GeneralizationOnUnions01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/GeneralizationOnUnions01.il.bsl index eca246c526b..70bbfca2a6f 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.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly GeneralizationOnUnions01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.GeneralizationOnUnions01 { - // Offset: 0x00000000 Length: 0x00000699 + // Offset: 0x00000000 Length: 0x00000689 } .mresource public FSharpOptimizationData.GeneralizationOnUnions01 { - // Offset: 0x000006A0 Length: 0x000001F4 + // Offset: 0x00000690 Length: 0x000001F4 } .module GeneralizationOnUnions01.exe -// MVID: {59B19213-4CA2-8CD1-A745-03831392B159} +// MVID: {60B68B7F-4CA2-8CD1-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x014C0000 +// Image base: 0x06C00000 // =============== CLASS MEMBERS DECLARATION =================== @@ -145,54 +145,42 @@ instance int32 CompareTo(class GeneralizationOnUnions01/Weirdo obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 38 (0x26) + // Code size 26 (0x1a) .maxstack 8 .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\\Misc\\GeneralizationOnUnions01.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\GeneralizationOnUnions01.fs' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_0018 + IL_0004: brfalse.s IL_0010 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: ldnull - IL_000c: cgt.un - IL_000e: brfalse.s IL_0012 - - IL_0010: br.s IL_0014 - - IL_0012: br.s IL_0016 + IL_0006: ldarg.1 + IL_0007: ldnull + IL_0008: cgt.un + IL_000a: brfalse.s IL_000e .line 100001,100001 : 0,0 '' - IL_0014: ldc.i4.0 - IL_0015: ret + IL_000c: ldc.i4.0 + IL_000d: ret .line 100001,100001 : 0,0 '' - IL_0016: ldc.i4.1 - IL_0017: ret + IL_000e: ldc.i4.1 + IL_000f: ret .line 100001,100001 : 0,0 '' - IL_0018: ldarg.1 - IL_0019: ldnull - IL_001a: cgt.un - IL_001c: brfalse.s IL_0020 - - IL_001e: br.s IL_0022 - - IL_0020: br.s IL_0024 + IL_0010: ldarg.1 + IL_0011: ldnull + IL_0012: cgt.un + IL_0014: brfalse.s IL_0018 .line 100001,100001 : 0,0 '' - IL_0022: ldc.i4.m1 - IL_0023: ret + IL_0016: ldc.i4.m1 + IL_0017: ret .line 100001,100001 : 0,0 '' - IL_0024: ldc.i4.0 - IL_0025: ret + IL_0018: ldc.i4.0 + IL_0019: ret } // end of method Weirdo::CompareTo .method public hidebysig virtual final @@ -214,7 +202,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 55 (0x37) + // Code size 43 (0x2b) .maxstack 3 .locals init ([0] class GeneralizationOnUnions01/Weirdo V_0) .line 4,4 : 6,12 '' @@ -224,79 +212,63 @@ IL_0007: ldarg.0 IL_0008: ldnull IL_0009: cgt.un - IL_000b: brfalse.s IL_000f - - IL_000d: br.s IL_0011 - - IL_000f: br.s IL_0024 + IL_000b: brfalse.s IL_001c .line 100001,100001 : 0,0 '' - IL_0011: ldarg.1 - IL_0012: unbox.any GeneralizationOnUnions01/Weirdo - IL_0017: ldnull - IL_0018: cgt.un - IL_001a: brfalse.s IL_001e - - IL_001c: br.s IL_0020 - - IL_001e: br.s IL_0022 + IL_000d: ldarg.1 + IL_000e: unbox.any GeneralizationOnUnions01/Weirdo + IL_0013: ldnull + IL_0014: cgt.un + IL_0016: brfalse.s IL_001a .line 100001,100001 : 0,0 '' - IL_0020: ldc.i4.0 - IL_0021: ret + IL_0018: ldc.i4.0 + IL_0019: ret .line 100001,100001 : 0,0 '' - IL_0022: ldc.i4.1 - IL_0023: ret + IL_001a: ldc.i4.1 + IL_001b: ret .line 100001,100001 : 0,0 '' - IL_0024: ldarg.1 - IL_0025: unbox.any GeneralizationOnUnions01/Weirdo - IL_002a: ldnull - IL_002b: cgt.un - IL_002d: brfalse.s IL_0031 - - IL_002f: br.s IL_0033 - - IL_0031: br.s IL_0035 + IL_001c: ldarg.1 + IL_001d: unbox.any GeneralizationOnUnions01/Weirdo + IL_0022: ldnull + IL_0023: cgt.un + IL_0025: brfalse.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0033: ldc.i4.m1 - IL_0034: ret + IL_0027: ldc.i4.m1 + IL_0028: ret .line 100001,100001 : 0,0 '' - IL_0035: ldc.i4.0 - IL_0036: ret + IL_0029: ldc.i4.0 + IL_002a: ret } // end of method Weirdo::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 18 (0x12) + // Code size 14 (0xe) .maxstack 3 .locals init ([0] int32 V_0) .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_0010 + IL_0004: brfalse.s IL_000c .line 100001,100001 : 0,0 '' + IL_0006: ldc.i4.0 + IL_0007: stloc.0 + IL_0008: ldarg.0 + IL_0009: pop IL_000a: ldc.i4.0 - IL_000b: stloc.0 - IL_000c: ldarg.0 - IL_000d: pop - IL_000e: ldc.i4.0 - IL_000f: ret + IL_000b: ret .line 100001,100001 : 0,0 '' - IL_0010: ldc.i4.0 - IL_0011: ret + IL_000c: ldc.i4.0 + IL_000d: ret } // end of method Weirdo::GetHashCode .method public hidebysig virtual final @@ -317,7 +289,7 @@ class [mscorlib]System.Collections.IEqualityComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 38 (0x26) + // Code size 30 (0x1e) .maxstack 4 .locals init ([0] class GeneralizationOnUnions01/Weirdo V_0, [1] class GeneralizationOnUnions01/Weirdo V_1) @@ -325,78 +297,66 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_001e + IL_0004: brfalse.s IL_0016 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: isinst GeneralizationOnUnions01/Weirdo - IL_0010: stloc.0 - IL_0011: ldloc.0 - IL_0012: brfalse.s IL_0016 - - IL_0014: br.s IL_0018 - - IL_0016: br.s IL_001c + IL_0006: ldarg.1 + IL_0007: isinst GeneralizationOnUnions01/Weirdo + IL_000c: stloc.0 + IL_000d: ldloc.0 + IL_000e: brfalse.s IL_0014 .line 100001,100001 : 0,0 '' - IL_0018: ldloc.0 - IL_0019: stloc.1 - IL_001a: ldc.i4.1 - IL_001b: ret + IL_0010: ldloc.0 + IL_0011: stloc.1 + IL_0012: ldc.i4.1 + IL_0013: ret .line 100001,100001 : 0,0 '' - IL_001c: ldc.i4.0 - IL_001d: ret + IL_0014: ldc.i4.0 + IL_0015: ret .line 100001,100001 : 0,0 '' - IL_001e: ldarg.1 - IL_001f: ldnull - IL_0020: cgt.un - IL_0022: ldc.i4.0 - IL_0023: ceq - IL_0025: ret + IL_0016: ldarg.1 + IL_0017: ldnull + IL_0018: cgt.un + IL_001a: ldc.i4.0 + IL_001b: ceq + IL_001d: ret } // end of method Weirdo::Equals .method public hidebysig virtual final instance bool Equals(class GeneralizationOnUnions01/Weirdo obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 23 (0x17) + // Code size 19 (0x13) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_000f + IL_0004: brfalse.s IL_000b .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: ldnull - IL_000c: cgt.un - IL_000e: ret + IL_0006: ldarg.1 + IL_0007: ldnull + IL_0008: cgt.un + IL_000a: ret .line 100001,100001 : 0,0 '' - IL_000f: ldarg.1 - IL_0010: ldnull - IL_0011: cgt.un - IL_0013: ldc.i4.0 - IL_0014: ceq - IL_0016: ret + IL_000b: ldarg.1 + IL_000c: ldnull + IL_000d: cgt.un + IL_000f: ldc.i4.0 + IL_0010: ceq + IL_0012: ret } // end of method Weirdo::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 24 (0x18) + // Code size 20 (0x14) .maxstack 4 .locals init ([0] class GeneralizationOnUnions01/Weirdo V_0) .line 4,4 : 6,12 '' @@ -404,21 +364,17 @@ IL_0001: isinst GeneralizationOnUnions01/Weirdo IL_0006: stloc.0 IL_0007: ldloc.0 - IL_0008: brfalse.s IL_000c - - IL_000a: br.s IL_000e - - IL_000c: br.s IL_0016 + IL_0008: brfalse.s IL_0012 .line 100001,100001 : 0,0 '' - IL_000e: ldarg.0 - IL_000f: ldloc.0 - IL_0010: callvirt instance bool GeneralizationOnUnions01/Weirdo::Equals(class GeneralizationOnUnions01/Weirdo) - IL_0015: ret + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: callvirt instance bool GeneralizationOnUnions01/Weirdo::Equals(class GeneralizationOnUnions01/Weirdo) + IL_0011: ret .line 100001,100001 : 0,0 '' - IL_0016: ldc.i4.0 - IL_0017: ret + IL_0012: ldc.i4.0 + IL_0013: ret } // end of method Weirdo::Equals .property instance int32 Tag() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/GenericTypeStaticField01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/GenericTypeStaticField01.il.bsl index 8e3f9aced4a..928e00e3cfd 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/GenericTypeStaticField01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/GenericTypeStaticField01.il.bsl @@ -36,13 +36,13 @@ // Offset: 0x00000608 Length: 0x000001E1 } .module GenericTypeStaticField01.exe -// MVID: {5FCFFD09-1E75-7E6B-A745-038309FDCF5F} +// MVID: {60B68B7F-1E75-7E6B-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00EB0000 +// Image base: 0x00F10000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/IfThenElse01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/IfThenElse01.il.bsl index e8edb3c0b9a..3d0ba7cb01f 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/IfThenElse01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/IfThenElse01.il.bsl @@ -36,13 +36,13 @@ // Offset: 0x00000208 Length: 0x00000092 } .module IfThenElse01.dll -// MVID: {5FCFFD09-2D6C-0B5D-A745-038309FDCF5F} +// MVID: {60B68B7F-2D6C-0B5D-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x067C0000 +// Image base: 0x06DD0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -128,7 +128,7 @@ !a z, !a w) cil managed { - // Code size 20 (0x14) + // Code size 16 (0x10) .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}' @@ -140,17 +140,13 @@ IL_0008: ldarg.2 IL_0009: ble.s IL_000d - IL_000b: br.s IL_000f - - IL_000d: br.s IL_0011 - .line 5,5 : 64,65 '' - IL_000f: ldarg.3 - IL_0010: ret + IL_000b: ldarg.3 + IL_000c: ret .line 5,5 : 71,72 '' - IL_0011: ldarg.s w - IL_0013: ret + IL_000d: ldarg.s w + IL_000f: ret } // end of method f5@5T::Invoke } // end of class f5@5T diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/LetIfThenElse01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/LetIfThenElse01.il.bsl index 8c6ee74160d..4fd045b7168 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/LetIfThenElse01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/LetIfThenElse01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly LetIfThenElse01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.LetIfThenElse01 { - // Offset: 0x00000000 Length: 0x000001E5 + // Offset: 0x00000000 Length: 0x000001D9 } .mresource public FSharpOptimizationData.LetIfThenElse01 { - // Offset: 0x000001F0 Length: 0x00000076 + // Offset: 0x000001E0 Length: 0x00000076 } .module LetIfThenElse01.exe -// MVID: {59B19213-BE5A-D8FD-A745-03831392B159} +// MVID: {60B68B7F-BE5A-D8FD-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x02940000 +// Image base: 0x06AF0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -54,7 +54,7 @@ .method public static class [mscorlib]System.Tuple`4 F(!!a y) cil managed { - // Code size 140 (0x8c) + // Code size 124 (0x7c) .maxstack 6 .locals init ([0] int32 x1, [1] valuetype [mscorlib]System.DateTime V_1, @@ -65,112 +65,96 @@ [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 : 12,51 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\LetIfThenElse01.fs' + .line 6,6 : 12,51 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\LetIfThenElse01.fs' IL_0000: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() IL_0005: stloc.1 IL_0006: ldloca.s V_1 IL_0008: call instance int32 [mscorlib]System.DateTime::get_Year() IL_000d: ldc.i4 0x7d0 - IL_0012: ble.s IL_0016 - - IL_0014: br.s IL_0018 - - IL_0016: br.s IL_001c + IL_0012: ble.s IL_0018 .line 6,6 : 52,53 '' - IL_0018: ldc.i4.1 + IL_0014: ldc.i4.1 .line 100001,100001 : 0,0 '' - IL_0019: nop - IL_001a: br.s IL_001e + IL_0015: nop + IL_0016: br.s IL_001a .line 6,6 : 59,60 '' - IL_001c: ldc.i4.2 + IL_0018: ldc.i4.2 .line 100001,100001 : 0,0 '' - IL_001d: nop + IL_0019: nop .line 100001,100001 : 0,0 '' - IL_001e: stloc.0 + IL_001a: stloc.0 .line 7,7 : 12,51 '' - IL_001f: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() - IL_0024: stloc.3 - IL_0025: ldloca.s V_3 - IL_0027: call instance int32 [mscorlib]System.DateTime::get_Year() - IL_002c: ldc.i4 0x7d0 - IL_0031: ble.s IL_0035 - - IL_0033: br.s IL_0037 - - IL_0035: br.s IL_003b + IL_001b: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() + IL_0020: stloc.3 + IL_0021: ldloca.s V_3 + IL_0023: call instance int32 [mscorlib]System.DateTime::get_Year() + IL_0028: ldc.i4 0x7d0 + IL_002d: ble.s IL_0033 .line 7,7 : 52,53 '' - IL_0037: ldc.i4.1 + IL_002f: ldc.i4.1 .line 100001,100001 : 0,0 '' - IL_0038: nop - IL_0039: br.s IL_003d + IL_0030: nop + IL_0031: br.s IL_0035 .line 7,7 : 59,60 '' - IL_003b: ldc.i4.2 + IL_0033: ldc.i4.2 .line 100001,100001 : 0,0 '' - IL_003c: nop + IL_0034: nop .line 100001,100001 : 0,0 '' - IL_003d: stloc.2 + IL_0035: stloc.2 .line 8,8 : 12,51 '' - IL_003e: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() - IL_0043: stloc.s V_5 - IL_0045: ldloca.s V_5 - IL_0047: call instance int32 [mscorlib]System.DateTime::get_Year() - IL_004c: ldc.i4 0x7d0 - IL_0051: bge.s IL_0055 - - IL_0053: br.s IL_0057 - - IL_0055: br.s IL_005b + IL_0036: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() + IL_003b: stloc.s V_5 + IL_003d: ldloca.s V_5 + IL_003f: call instance int32 [mscorlib]System.DateTime::get_Year() + IL_0044: ldc.i4 0x7d0 + IL_0049: bge.s IL_004f .line 8,8 : 52,53 '' - IL_0057: ldc.i4.1 + IL_004b: ldc.i4.1 .line 100001,100001 : 0,0 '' - IL_0058: nop - IL_0059: br.s IL_005d + IL_004c: nop + IL_004d: br.s IL_0051 .line 8,8 : 59,60 '' - IL_005b: ldc.i4.2 + IL_004f: ldc.i4.2 .line 100001,100001 : 0,0 '' - IL_005c: nop + IL_0050: nop .line 100001,100001 : 0,0 '' - IL_005d: stloc.s x2 + IL_0051: stloc.s x2 .line 9,9 : 12,51 '' - IL_005f: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() - IL_0064: stloc.s V_7 - IL_0066: ldloca.s V_7 - IL_0068: call instance int32 [mscorlib]System.DateTime::get_Year() - IL_006d: ldc.i4 0x7d0 - IL_0072: bge.s IL_0076 - - IL_0074: br.s IL_0078 - - IL_0076: br.s IL_007c + IL_0053: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() + IL_0058: stloc.s V_7 + IL_005a: ldloca.s V_7 + IL_005c: call instance int32 [mscorlib]System.DateTime::get_Year() + IL_0061: ldc.i4 0x7d0 + IL_0066: bge.s IL_006c .line 9,9 : 52,53 '' - IL_0078: ldc.i4.1 + IL_0068: ldc.i4.1 .line 100001,100001 : 0,0 '' - IL_0079: nop - IL_007a: br.s IL_007e + IL_0069: nop + IL_006a: br.s IL_006e .line 9,9 : 59,60 '' - IL_007c: ldc.i4.2 + IL_006c: ldc.i4.2 .line 100001,100001 : 0,0 '' - IL_007d: nop + IL_006d: nop .line 100001,100001 : 0,0 '' - IL_007e: stloc.s y2 + IL_006e: stloc.s y2 .line 10,10 : 3,14 '' - IL_0080: ldloc.0 - IL_0081: ldloc.2 - IL_0082: ldloc.s x2 - IL_0084: ldloc.s y2 - IL_0086: newobj instance void class [mscorlib]System.Tuple`4::.ctor(!0, + IL_0070: ldloc.0 + IL_0071: ldloc.2 + IL_0072: ldloc.s x2 + IL_0074: ldloc.s y2 + IL_0076: newobj instance void class [mscorlib]System.Tuple`4::.ctor(!0, !1, !2, !3) - IL_008b: ret + IL_007b: ret } // end of method LetIfThenElse01::F } // end of class LetIfThenElse01 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Lock01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Lock01.il.bsl index 37d6c43ab3d..2e01e08825f 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Lock01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Lock01.il.bsl @@ -41,13 +41,13 @@ // Offset: 0x00000188 Length: 0x00000064 } .module Lock01.exe -// MVID: {5FCFFD09-2BCA-B308-A745-038309FDCF5F} +// MVID: {60B68B7F-2BCA-B308-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06B00000 +// Image base: 0x06BF0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -123,7 +123,7 @@ .method public static void main@() cil managed { .entrypoint - // Code size 68 (0x44) + // Code size 64 (0x40) .maxstack 4 .locals init ([0] object o, [1] object V_1, @@ -152,33 +152,29 @@ IL_0023: ldnull IL_0024: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) IL_0029: stloc.s V_4 - IL_002b: leave.s IL_0040 + IL_002b: leave.s IL_003c } // end .try finally { IL_002d: ldloc.3 - IL_002e: brfalse.s IL_0032 - - IL_0030: br.s IL_0034 - - IL_0032: br.s IL_003d + IL_002e: brfalse.s IL_0039 .line 100001,100001 : 0,0 '' - IL_0034: ldloc.1 - IL_0035: call void [netstandard]System.Threading.Monitor::Exit(object) - IL_003a: ldnull - IL_003b: pop - IL_003c: endfinally + IL_0030: ldloc.1 + IL_0031: call void [netstandard]System.Threading.Monitor::Exit(object) + IL_0036: ldnull + IL_0037: pop + IL_0038: endfinally .line 100001,100001 : 0,0 '' - IL_003d: ldnull - IL_003e: pop - IL_003f: endfinally + IL_0039: ldnull + IL_003a: pop + IL_003b: endfinally .line 100001,100001 : 0,0 '' } // end handler - IL_0040: ldloc.s V_4 - IL_0042: pop - IL_0043: ret + IL_003c: ldloc.s V_4 + IL_003e: pop + IL_003f: ret } // end of method $Lock01::main@ } // end of class ''.$Lock01 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Marshal.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Marshal.il.bsl index a4ee5c51231..a72c99aedd5 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Marshal.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Marshal.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly Marshal { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Marshal { - // Offset: 0x00000000 Length: 0x0000050B + // Offset: 0x00000000 Length: 0x00000507 } .mresource public FSharpOptimizationData.Marshal { // Offset: 0x00000510 Length: 0x0000004E } .module Marshal.exe -// MVID: {59B19213-7500-369C-A745-03831392B159} +// MVID: {60B68B7F-7500-369C-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01080000 +// Image base: 0x068F0000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/MethodImplNoInline.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/MethodImplNoInline.il.bsl index aae557b86ca..ebeebd6525a 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/MethodImplNoInline.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/MethodImplNoInline.il.bsl @@ -30,20 +30,20 @@ } .mresource public FSharpSignatureData.MethodImplNoInline { - // Offset: 0x00000000 Length: 0x000002F9 + // Offset: 0x00000000 Length: 0x000002FB } .mresource public FSharpOptimizationData.MethodImplNoInline { // Offset: 0x00000300 Length: 0x000000F5 } .module MethodImplNoInline.exe -// MVID: {5F1F9A50-4480-09E2-A745-0383509A1F5F} +// MVID: {60B68B7F-4480-09E2-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x054F0000 +// Image base: 0x06DC0000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/MethodImplNoInline02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/MethodImplNoInline02.il.bsl index 6f291d69311..607b8bf6f14 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/MethodImplNoInline02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/MethodImplNoInline02.il.bsl @@ -30,20 +30,20 @@ } .mresource public FSharpSignatureData.MethodImplNoInline02 { - // Offset: 0x00000000 Length: 0x000002FF + // Offset: 0x00000000 Length: 0x00000301 } .mresource public FSharpOptimizationData.MethodImplNoInline02 { // Offset: 0x00000308 Length: 0x000000F9 } .module MethodImplNoInline02.exe -// MVID: {5F1F9A50-084F-1A8E-A745-0383509A1F5F} +// MVID: {60B68B7F-084F-1A8E-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x04E70000 +// Image base: 0x05140000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ModuleWithExpression01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ModuleWithExpression01.il.bsl index 479fa38706d..4dbdb7783fe 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ModuleWithExpression01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/ModuleWithExpression01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly ModuleWithExpression01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.ModuleWithExpression01 { - // Offset: 0x00000000 Length: 0x0000020E + // Offset: 0x00000000 Length: 0x0000020A } .mresource public FSharpOptimizationData.ModuleWithExpression01 { - // Offset: 0x00000218 Length: 0x000000A6 + // Offset: 0x00000210 Length: 0x000000A6 } .module ModuleWithExpression01.exe -// MVID: {59B19213-CD1E-A8B4-A745-03831392B159} +// MVID: {60B68B7F-CD1E-A8B4-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x030A0000 +// Image base: 0x07550000 // =============== CLASS MEMBERS DECLARATION =================== @@ -88,7 +88,7 @@ .maxstack 3 .locals init ([0] int32 x) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 8,8 : 5,20 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\ModuleWithExpression01.fs' + .line 8,8 : 5,20 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\ModuleWithExpression01.fs' IL_0000: ldstr "hello" IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/NoBoxingOnDispose01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/NoBoxingOnDispose01.il.bsl index 2e111b971f8..1c571a25e0b 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.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly NoBoxingOnDispose01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.NoBoxingOnDispose01 { - // Offset: 0x00000000 Length: 0x0000021A + // Offset: 0x00000000 Length: 0x00000216 } .mresource public FSharpOptimizationData.NoBoxingOnDispose01 { // Offset: 0x00000220 Length: 0x0000007F } .module NoBoxingOnDispose01.exe -// MVID: {59B19213-4EA9-C934-A745-03831392B159} +// MVID: {60B68B7F-4EA9-C934-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00590000 +// Image base: 0x06C40000 // =============== CLASS MEMBERS DECLARATION =================== @@ -60,7 +60,7 @@ [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 : 3,16 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\NoBoxingOnDispose01.fs' + .line 6,6 : 3,16 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\NoBoxingOnDispose01.fs' IL_0000: ldarg.0 IL_0001: stloc.0 .line 6,6 : 3,16 '' diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/NonEscapingArguments02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/NonEscapingArguments02.il.bsl index 5209960dc5f..a20d0205daa 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/NonEscapingArguments02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/NonEscapingArguments02.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly NonEscapingArguments02 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.NonEscapingArguments02 { - // Offset: 0x00000000 Length: 0x00000359 + // Offset: 0x00000000 Length: 0x00000355 } .mresource public FSharpOptimizationData.NonEscapingArguments02 { - // Offset: 0x00000360 Length: 0x000001A4 + // Offset: 0x00000360 Length: 0x0000019E } .module NonEscapingArguments02.dll -// MVID: {59B19213-BB56-6582-A745-03831392B159} +// MVID: {60B68B7F-BB56-6582-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01730000 +// Image base: 0x06B40000 // =============== CLASS MEMBERS DECLARATION =================== @@ -62,7 +62,7 @@ // Code size 21 (0x15) .maxstack 8 .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\\Misc\\NonEscapingArguments02.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\NonEscapingArguments02.fs' IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/PreserveSig.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/PreserveSig.il.bsl index 5a8b4ef3b76..bbd2fc4fee7 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/PreserveSig.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/PreserveSig.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly PreserveSig { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.PreserveSig { - // Offset: 0x00000000 Length: 0x000002F5 + // Offset: 0x00000000 Length: 0x000002F1 } .mresource public FSharpOptimizationData.PreserveSig { - // Offset: 0x00000300 Length: 0x0000004A + // Offset: 0x000002F8 Length: 0x0000004A } .module PreserveSig.dll -// MVID: {59B19213-E8CC-64FE-A745-03831392B159} +// MVID: {60B68B7F-E8CC-64FE-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01660000 +// Image base: 0x05120000 // =============== CLASS MEMBERS DECLARATION =================== 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 0249c7e112a..cbcdbfefab9 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 @@ -36,13 +36,13 @@ // Offset: 0x000001B0 Length: 0x00000072 } .module Seq_for_all01.exe -// MVID: {5FCFFD09-D30D-BA80-A745-038309FDCF5F} +// MVID: {60B68B7F-D30D-BA80-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00F60000 +// Image base: 0x05500000 // =============== CLASS MEMBERS DECLARATION =================== @@ -70,7 +70,7 @@ .method public strict virtual instance bool Invoke(int32 s) cil managed { - // Code size 18 (0x12) + // 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 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\Seq_for_all01.fs' @@ -80,23 +80,19 @@ .line 100001,100001 : 0,0 '' IL_0004: nop .line 100001,100001 : 0,0 '' - IL_0005: brfalse.s IL_0009 - - IL_0007: br.s IL_000b - - IL_0009: br.s IL_000f + IL_0005: brfalse.s IL_000b .line 5,5 : 48,50 '' - IL_000b: nop + IL_0007: nop .line 100001,100001 : 0,0 '' - IL_000c: nop - IL_000d: br.s IL_0010 + IL_0008: nop + IL_0009: br.s IL_000c .line 100001,100001 : 0,0 '' - IL_000f: nop + IL_000b: nop .line 6,6 : 31,35 '' - IL_0010: ldc.i4.1 - IL_0011: ret + IL_000c: ldc.i4.1 + IL_000d: ret } // end of method q@4::Invoke .method private specialname rtspecialname static diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs01.il.bsl index b3476b282f7..1d930ea81ac 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly Structs01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Structs01 { - // Offset: 0x00000000 Length: 0x0000074D + // Offset: 0x00000000 Length: 0x0000073D } .mresource public FSharpOptimizationData.Structs01 { - // Offset: 0x00000758 Length: 0x00000231 + // Offset: 0x00000748 Length: 0x00000231 } .module Structs01.exe -// MVID: {59B19213-701F-5E27-A745-03831392B159} +// MVID: {60B68B7F-701F-5E27-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01470000 +// Image base: 0x07280000 // =============== CLASS MEMBERS DECLARATION =================== @@ -65,14 +65,14 @@ instance int32 CompareTo(valuetype Experiment.Test/Test obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 38 (0x26) + // Code size 34 (0x22) .maxstack 4 .locals init ([0] valuetype Experiment.Test/Test& 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,10 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\Structs01.fs' + .line 7,7 : 6,10 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\Structs01.fs' IL_0000: ldarga.s obj IL_0002: stloc.0 IL_0003: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() @@ -87,19 +87,15 @@ IL_0018: ldloc.3 IL_0019: bge.s IL_001d - IL_001b: br.s IL_001f - - IL_001d: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001f: ldc.i4.m1 - IL_0020: ret + IL_001b: ldc.i4.m1 + IL_001c: ret .line 100001,100001 : 0,0 '' - IL_0021: ldloc.2 - IL_0022: ldloc.3 - IL_0023: cgt - IL_0025: ret + IL_001d: ldloc.2 + IL_001e: ldloc.3 + IL_001f: cgt + IL_0021: ret } // end of method Test::CompareTo .method public hidebysig virtual final @@ -121,7 +117,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 44 (0x2c) + // Code size 40 (0x28) .maxstack 4 .locals init ([0] valuetype Experiment.Test/Test V_0, [1] valuetype Experiment.Test/Test& V_1, @@ -146,19 +142,15 @@ IL_001c: ldloc.s V_4 IL_001e: bge.s IL_0022 - IL_0020: br.s IL_0024 - - IL_0022: br.s IL_0026 - .line 100001,100001 : 0,0 '' - IL_0024: ldc.i4.m1 - IL_0025: ret + IL_0020: ldc.i4.m1 + IL_0021: ret .line 100001,100001 : 0,0 '' - IL_0026: ldloc.3 - IL_0027: ldloc.s V_4 - IL_0029: cgt - IL_002b: ret + IL_0022: ldloc.3 + IL_0023: ldloc.s V_4 + IL_0025: cgt + IL_0027: ret } // end of method Test::CompareTo .method public hidebysig virtual final diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs02.il.bsl index dc002382e1d..d22541e0303 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/Structs02.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly Structs02 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Structs02 { - // Offset: 0x00000000 Length: 0x00000787 + // Offset: 0x00000000 Length: 0x00000777 } .mresource public FSharpOptimizationData.Structs02 { - // Offset: 0x00000790 Length: 0x00000237 + // Offset: 0x00000780 Length: 0x00000237 } .module Structs02.exe -// MVID: {59B19213-7040-5E27-A745-03831392B159} +// MVID: {60B68B7F-7040-5E27-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x002F0000 +// Image base: 0x05320000 // =============== CLASS MEMBERS DECLARATION =================== @@ -76,14 +76,14 @@ instance int32 CompareTo(valuetype Experiment.Test/Repro obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 38 (0x26) + // Code size 34 (0x22) .maxstack 4 .locals init ([0] valuetype Experiment.Test/Repro& 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 6,6 : 6,11 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\Structs02.fs' + .line 6,6 : 6,11 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\Structs02.fs' IL_0000: ldarga.s obj IL_0002: stloc.0 IL_0003: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() @@ -98,19 +98,15 @@ IL_0018: ldloc.3 IL_0019: bge.s IL_001d - IL_001b: br.s IL_001f - - IL_001d: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001f: ldc.i4.m1 - IL_0020: ret + IL_001b: ldc.i4.m1 + IL_001c: ret .line 100001,100001 : 0,0 '' - IL_0021: ldloc.2 - IL_0022: ldloc.3 - IL_0023: cgt - IL_0025: ret + IL_001d: ldloc.2 + IL_001e: ldloc.3 + IL_001f: cgt + IL_0021: ret } // end of method Repro::CompareTo .method public hidebysig virtual final @@ -132,7 +128,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 44 (0x2c) + // Code size 40 (0x28) .maxstack 4 .locals init ([0] valuetype Experiment.Test/Repro V_0, [1] valuetype Experiment.Test/Repro& V_1, @@ -157,19 +153,15 @@ IL_001c: ldloc.s V_4 IL_001e: bge.s IL_0022 - IL_0020: br.s IL_0024 - - IL_0022: br.s IL_0026 - .line 100001,100001 : 0,0 '' - IL_0024: ldc.i4.m1 - IL_0025: ret + IL_0020: ldc.i4.m1 + IL_0021: ret .line 100001,100001 : 0,0 '' - IL_0026: ldloc.3 - IL_0027: ldloc.s V_4 - IL_0029: cgt - IL_002b: ret + IL_0022: ldloc.3 + IL_0023: ldloc.s V_4 + IL_0025: cgt + IL_0027: ret } // end of method Repro::CompareTo .method public hidebysig virtual final diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/StructsAsArrayElements01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/StructsAsArrayElements01.il.bsl index e3e7795ebd4..7beca501cef 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/StructsAsArrayElements01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/StructsAsArrayElements01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:3:0 + .ver 5:0:0:0 } .assembly StructsAsArrayElements01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.StructsAsArrayElements01 { - // Offset: 0x00000000 Length: 0x00000758 + // Offset: 0x00000000 Length: 0x00000754 } .mresource public FSharpOptimizationData.StructsAsArrayElements01 { - // Offset: 0x00000760 Length: 0x0000022C + // Offset: 0x00000758 Length: 0x0000022C } .module StructsAsArrayElements01.dll -// MVID: {5B17FC4F-29F3-6E68-A745-03834FFC175B} +// MVID: {60B68B7F-29F3-6E68-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00E30000 +// Image base: 0x06A80000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,14 +66,14 @@ instance int32 CompareTo(valuetype StructsAsArrayElements01/T obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 38 (0x26) + // Code size 34 (0x22) .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 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\StructsAsArrayElements01.fs' + .line 7,7 : 6,7 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\StructsAsArrayElements01.fs' IL_0000: ldarga.s obj IL_0002: stloc.0 IL_0003: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() @@ -88,19 +88,15 @@ IL_0018: ldloc.3 IL_0019: bge.s IL_001d - IL_001b: br.s IL_001f - - IL_001d: br.s IL_0021 - .line 100001,100001 : 0,0 '' - IL_001f: ldc.i4.m1 - IL_0020: ret + IL_001b: ldc.i4.m1 + IL_001c: ret .line 100001,100001 : 0,0 '' - IL_0021: ldloc.2 - IL_0022: ldloc.3 - IL_0023: cgt - IL_0025: ret + IL_001d: ldloc.2 + IL_001e: ldloc.3 + IL_001f: cgt + IL_0021: ret } // end of method T::CompareTo .method public hidebysig virtual final @@ -122,7 +118,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 44 (0x2c) + // Code size 40 (0x28) .maxstack 4 .locals init ([0] valuetype StructsAsArrayElements01/T V_0, [1] valuetype StructsAsArrayElements01/T& V_1, @@ -147,19 +143,15 @@ IL_001c: ldloc.s V_4 IL_001e: bge.s IL_0022 - IL_0020: br.s IL_0024 - - IL_0022: br.s IL_0026 - .line 100001,100001 : 0,0 '' - IL_0024: ldc.i4.m1 - IL_0025: ret + IL_0020: ldc.i4.m1 + IL_0021: ret .line 100001,100001 : 0,0 '' - IL_0026: ldloc.3 - IL_0027: ldloc.s V_4 - IL_0029: cgt - IL_002b: ret + IL_0022: ldloc.3 + IL_0023: ldloc.s V_4 + IL_0025: cgt + IL_0027: ret } // end of method T::CompareTo .method public hidebysig virtual final diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/TryWith_NoFilterBlocks01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/TryWith_NoFilterBlocks01.il.bsl index 63da7e6e404..d053449a8d5 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/TryWith_NoFilterBlocks01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/TryWith_NoFilterBlocks01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TryWith_NoFilterBlocks01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TryWith_NoFilterBlocks01 { - // Offset: 0x00000000 Length: 0x0000015D + // Offset: 0x00000000 Length: 0x00000159 } .mresource public FSharpOptimizationData.TryWith_NoFilterBlocks01 { - // Offset: 0x00000168 Length: 0x0000005F + // Offset: 0x00000160 Length: 0x0000005F } .module TryWith_NoFilterBlocks01.exe -// MVID: {59B19213-3DEF-9A40-A745-03831392B159} +// MVID: {60B68B7F-3DEF-9A40-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x017A0000 +// Image base: 0x00F10000 // =============== CLASS MEMBERS DECLARATION =================== @@ -63,19 +63,19 @@ .method public static void main@() cil managed { .entrypoint - // Code size 40 (0x28) + // Code size 36 (0x24) .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_0, [1] class [mscorlib]System.Exception V_1, [2] class [mscorlib]System.Exception e, [3] class [mscorlib]System.Exception V_3) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 3,5 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\TryWith_NoFilterBlocks01.fs' + .line 4,4 : 3,5 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\TryWith_NoFilterBlocks01.fs' .try { IL_0000: ldnull IL_0001: stloc.0 - IL_0002: leave.s IL_0025 + IL_0002: leave.s IL_0021 .line 5,5 : 2,6 '' } // end .try @@ -89,29 +89,25 @@ IL_000d: callvirt instance int32 [mscorlib]System.Object::GetHashCode() IL_0012: ldc.i4.0 IL_0013: ceq - IL_0015: brfalse.s IL_0019 + IL_0015: brfalse.s IL_001d - IL_0017: br.s IL_001b - - IL_0019: br.s IL_0021 - - IL_001b: ldloc.1 - IL_001c: stloc.3 + IL_0017: ldloc.1 + IL_0018: stloc.3 .line 6,6 : 35,37 '' - IL_001d: ldnull - IL_001e: stloc.0 - IL_001f: leave.s IL_0025 + IL_0019: ldnull + IL_001a: stloc.0 + IL_001b: leave.s IL_0021 .line 7,7 : 10,12 '' - IL_0021: ldnull - IL_0022: stloc.0 - IL_0023: leave.s IL_0025 + IL_001d: ldnull + IL_001e: stloc.0 + IL_001f: leave.s IL_0021 .line 100001,100001 : 0,0 '' } // end handler - IL_0025: ldloc.0 - IL_0026: pop - IL_0027: ret + IL_0021: ldloc.0 + IL_0022: pop + IL_0023: ret } // end of method $TryWith_NoFilterBlocks01::main@ } // end of class ''.$TryWith_NoFilterBlocks01 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/cas.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/cas.il.bsl index 5f937b00b51..301f28d9b64 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/cas.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/cas.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly extern cas { @@ -36,20 +36,20 @@ } .mresource public FSharpSignatureData.cas { - // Offset: 0x00000000 Length: 0x000005DF + // Offset: 0x00000000 Length: 0x00000619 } .mresource public FSharpOptimizationData.cas { - // Offset: 0x000005E8 Length: 0x000000F3 + // Offset: 0x00000620 Length: 0x000000F3 } .module cas.exe -// MVID: {59B19213-35EA-18E3-A745-03831392B159} +// MVID: {60B68B7F-35EA-18E3-A745-03837F8BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x006A0000 +// Image base: 0x05250000 // =============== CLASS MEMBERS DECLARATION =================== @@ -76,7 +76,7 @@ // Code size 9 (0x9) .maxstack 8 .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\\Misc\\cas.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Misc\\cas.fs' IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Aggregates01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Aggregates01.il.bsl index 18f8641994e..725432edbd2 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Aggregates01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Aggregates01.il.bsl @@ -50,13 +50,13 @@ // Offset: 0x000005F0 Length: 0x00000211 } .module Linq101Aggregates01.exe -// MVID: {5FCFFD0D-D281-4783-A745-03830DFDCF5F} +// MVID: {60B78A59-D281-4783-A745-0383598AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00F40000 +// Image base: 0x06380000 // =============== CLASS MEMBERS DECLARATION =================== @@ -105,7 +105,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -117,90 +117,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 12,12 : 9,33 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_factorsOf300() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_factorsOf300() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc .line 12,12 : 9,33 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 12,12 : 9,33 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 13,13 : 9,17 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld int32 Linq101Aggregates01/uniqueFactors@12::current - IL_006b: ldc.i4.1 - IL_006c: ret + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld int32 Linq101Aggregates01/uniqueFactors@12::current + IL_0065: ldc.i4.1 + IL_0066: ret .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 + IL_0067: nop + IL_0068: br.s IL_003c - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc .line 12,12 : 9,33 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc - IL_0091: ldarg.0 + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc + IL_008b: ldarg.0 + IL_008c: ldc.i4.0 + IL_008d: stfld int32 Linq101Aggregates01/uniqueFactors@12::current IL_0092: ldc.i4.0 - IL_0093: stfld int32 Linq101Aggregates01/uniqueFactors@12::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0093: ret } // end of method uniqueFactors@12::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -212,158 +206,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Aggregates01/uniqueFactors@12::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Aggregates01/uniqueFactors@12::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/uniqueFactors@12::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc - IL_0068: ldarg.0 - IL_0069: ldc.i4.0 - IL_006a: stfld int32 Linq101Aggregates01/uniqueFactors@12::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Aggregates01/uniqueFactors@12::pc + IL_005d: ldarg.0 + IL_005e: ldc.i4.0 + IL_005f: stfld int32 Linq101Aggregates01/uniqueFactors@12::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 12,12 : 9,33 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 + IL_0076: nop + IL_0077: br IL_0000 - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method uniqueFactors@12::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/uniqueFactors@12::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method uniqueFactors@12::get_CheckClose .method public strict virtual instance int32 @@ -436,7 +410,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -447,90 +421,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 21,21 : 9,28 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_numbers() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101Aggregates01/numSum@21::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_numbers() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101Aggregates01/numSum@21::pc .line 21,21 : 9,28 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 21,21 : 9,28 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101Aggregates01/numSum@21::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 22,22 : 9,16 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld int32 Linq101Aggregates01/numSum@21::current - IL_006b: ldc.i4.1 - IL_006c: ret + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101Aggregates01/numSum@21::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld int32 Linq101Aggregates01/numSum@21::current + IL_0065: ldc.i4.1 + IL_0066: ret .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 + IL_0067: nop + IL_0068: br.s IL_003c - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101Aggregates01/numSum@21::pc + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101Aggregates01/numSum@21::pc .line 21,21 : 9,28 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101Aggregates01/numSum@21::pc - IL_0091: ldarg.0 + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101Aggregates01/numSum@21::pc + IL_008b: ldarg.0 + IL_008c: ldc.i4.0 + IL_008d: stfld int32 Linq101Aggregates01/numSum@21::current IL_0092: ldc.i4.0 - IL_0093: stfld int32 Linq101Aggregates01/numSum@21::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0093: ret } // end of method numSum@21::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -542,158 +510,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Aggregates01/numSum@21::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Aggregates01/numSum@21::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Aggregates01/numSum@21::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Aggregates01/numSum@21::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/numSum@21::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Aggregates01/numSum@21::pc - IL_0068: ldarg.0 - IL_0069: ldc.i4.0 - IL_006a: stfld int32 Linq101Aggregates01/numSum@21::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Aggregates01/numSum@21::pc + IL_005d: ldarg.0 + IL_005e: ldc.i4.0 + IL_005f: stfld int32 Linq101Aggregates01/numSum@21::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 21,21 : 9,28 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 + IL_0076: nop + IL_0077: br IL_0000 - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method numSum@21::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/numSum@21::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method numSum@21::get_CheckClose .method public strict virtual instance int32 @@ -804,7 +752,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] string V_0, [1] string w) @@ -815,90 +763,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 30,30 : 9,26 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_words() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101Aggregates01/totalChars@30::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_words() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101Aggregates01/totalChars@30::pc .line 30,30 : 9,26 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 30,30 : 9,26 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101Aggregates01/totalChars@30::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 31,31 : 9,25 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld string Linq101Aggregates01/totalChars@30::current - IL_006b: ldc.i4.1 - IL_006c: ret + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101Aggregates01/totalChars@30::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld string Linq101Aggregates01/totalChars@30::current + IL_0065: ldc.i4.1 + IL_0066: ret .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 + IL_0067: nop + IL_0068: br.s IL_003c - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101Aggregates01/totalChars@30::pc + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101Aggregates01/totalChars@30::pc .line 30,30 : 9,26 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101Aggregates01/totalChars@30::pc - IL_0091: ldarg.0 - IL_0092: ldnull - IL_0093: stfld string Linq101Aggregates01/totalChars@30::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101Aggregates01/totalChars@30::pc + IL_008b: ldarg.0 + IL_008c: ldnull + IL_008d: stfld string Linq101Aggregates01/totalChars@30::current + IL_0092: ldc.i4.0 + IL_0093: ret } // end of method totalChars@30::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -910,158 +852,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Aggregates01/totalChars@30::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Aggregates01/totalChars@30::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Aggregates01/totalChars@30::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Aggregates01/totalChars@30::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/totalChars@30::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Aggregates01/totalChars@30::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld string Linq101Aggregates01/totalChars@30::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Aggregates01/totalChars@30::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld string Linq101Aggregates01/totalChars@30::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 30,30 : 9,26 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 + IL_0076: nop + IL_0077: br IL_0000 - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method totalChars@30::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/totalChars@30::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method totalChars@30::get_CheckClose .method public strict virtual instance string @@ -1298,7 +1220,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 155 (0x9b) + // Code size 149 (0x95) .maxstack 6 .locals init ([0] class [Utils]Utils/Product V_0, [1] class [Utils]Utils/Product x) @@ -1309,91 +1231,85 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0071 + IL_001b: nop + IL_001c: br.s IL_006b .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006e + IL_001e: nop + IL_001f: br.s IL_0068 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0092 + IL_0021: nop + IL_0022: br.s IL_008c .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 42,42 : 13,26 '' - IL_002b: ldarg.0 - IL_002c: ldarg.0 - IL_002d: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/sum@42::g - IL_0032: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0037: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' - IL_003c: ldarg.0 - IL_003d: ldc.i4.1 - IL_003e: stfld int32 Linq101Aggregates01/sum@42::pc + IL_0025: ldarg.0 + IL_0026: ldarg.0 + IL_0027: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/sum@42::g + IL_002c: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0031: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' + IL_0036: ldarg.0 + IL_0037: ldc.i4.1 + IL_0038: stfld int32 Linq101Aggregates01/sum@42::pc .line 42,42 : 13,26 '' - IL_0043: ldarg.0 - IL_0044: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' - IL_0049: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004e: brfalse.s IL_0071 - - IL_0050: ldarg.0 - IL_0051: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' - IL_0056: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005b: stloc.0 + IL_003d: ldarg.0 + IL_003e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' + IL_0043: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0048: brfalse.s IL_006b + + IL_004a: ldarg.0 + IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' + IL_0050: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0055: stloc.0 .line 42,42 : 13,26 '' - IL_005c: ldloc.0 - IL_005d: stloc.1 - IL_005e: ldarg.0 - IL_005f: ldc.i4.2 - IL_0060: stfld int32 Linq101Aggregates01/sum@42::pc + IL_0056: ldloc.0 + IL_0057: stloc.1 .line 43,43 : 13,33 '' - IL_0065: ldarg.0 - IL_0066: ldloc.1 - IL_0067: stfld class [Utils]Utils/Product Linq101Aggregates01/sum@42::current - IL_006c: ldc.i4.1 - IL_006d: ret - - .line 100001,100001 : 0,0 '' - IL_006e: nop - IL_006f: br.s IL_0043 - - IL_0071: ldarg.0 - IL_0072: ldc.i4.3 - IL_0073: stfld int32 Linq101Aggregates01/sum@42::pc + IL_0058: ldarg.0 + IL_0059: ldc.i4.2 + IL_005a: stfld int32 Linq101Aggregates01/sum@42::pc + IL_005f: ldarg.0 + IL_0060: ldloc.1 + IL_0061: stfld class [Utils]Utils/Product Linq101Aggregates01/sum@42::current + IL_0066: ldc.i4.1 + IL_0067: ret + + .line 100001,100001 : 0,0 '' + IL_0068: nop + IL_0069: br.s IL_003d + + IL_006b: ldarg.0 + IL_006c: ldc.i4.3 + IL_006d: stfld int32 Linq101Aggregates01/sum@42::pc .line 42,42 : 13,26 '' - IL_0078: ldarg.0 - IL_0079: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' - IL_007e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0083: nop - IL_0084: ldarg.0 - IL_0085: ldnull - IL_0086: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' - IL_008b: ldarg.0 - IL_008c: ldc.i4.3 - IL_008d: stfld int32 Linq101Aggregates01/sum@42::pc - IL_0092: ldarg.0 - IL_0093: ldnull - IL_0094: stfld class [Utils]Utils/Product Linq101Aggregates01/sum@42::current - IL_0099: ldc.i4.0 - IL_009a: ret + IL_0072: ldarg.0 + IL_0073: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' + IL_0078: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007d: nop + IL_007e: ldarg.0 + IL_007f: ldnull + IL_0080: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' + IL_0085: ldarg.0 + IL_0086: ldc.i4.3 + IL_0087: stfld int32 Linq101Aggregates01/sum@42::pc + IL_008c: ldarg.0 + IL_008d: ldnull + IL_008e: stfld class [Utils]Utils/Product Linq101Aggregates01/sum@42::current + IL_0093: ldc.i4.0 + IL_0094: ret } // end of method sum@42::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -1405,158 +1321,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Aggregates01/sum@42::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Aggregates01/sum@42::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Aggregates01/sum@42::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Aggregates01/sum@42::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/sum@42::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Aggregates01/sum@42::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld class [Utils]Utils/Product Linq101Aggregates01/sum@42::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Aggregates01/sum@42::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld class [Utils]Utils/Product Linq101Aggregates01/sum@42::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 42,42 : 13,26 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 + IL_0076: nop + IL_0077: br IL_0000 - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method sum@42::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/sum@42::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method sum@42::get_CheckClose .method public strict virtual instance class [Utils]Utils/Product @@ -1657,7 +1553,7 @@ .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,int32>,object> Invoke(class [System.Core]System.Linq.IGrouping`2 _arg2) cil managed { - // Code size 145 (0x91) + // Code size 141 (0x8d) .maxstack 8 .locals init ([0] class [System.Core]System.Linq.IGrouping`2 g, [1] int32 sum, @@ -1717,7 +1613,7 @@ IL_0055: ldloc.s V_9 IL_0057: stloc.s V_8 - IL_0059: leave.s IL_0079 + IL_0059: leave.s IL_0075 } // end .try finally @@ -1726,36 +1622,32 @@ IL_005d: isinst [mscorlib]System.IDisposable IL_0062: stloc.s V_10 IL_0064: ldloc.s V_10 - IL_0066: brfalse.s IL_006a - - IL_0068: br.s IL_006c - - IL_006a: br.s IL_0076 + IL_0066: brfalse.s IL_0072 .line 100001,100001 : 0,0 '' - IL_006c: ldloc.s V_10 - IL_006e: callvirt instance void [netstandard]System.IDisposable::Dispose() - IL_0073: ldnull - IL_0074: pop - IL_0075: endfinally + IL_0068: ldloc.s V_10 + IL_006a: callvirt instance void [netstandard]System.IDisposable::Dispose() + IL_006f: ldnull + IL_0070: pop + IL_0071: endfinally .line 100001,100001 : 0,0 '' - IL_0076: ldnull - IL_0077: pop - IL_0078: endfinally + IL_0072: ldnull + IL_0073: pop + IL_0074: endfinally .line 100001,100001 : 0,0 '' } // end handler - IL_0079: ldloc.s V_8 - IL_007b: stloc.1 + IL_0075: ldloc.s V_8 + IL_0077: stloc.1 .line 45,45 : 9,28 '' - IL_007c: ldarg.0 - IL_007d: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/'categories@40-3'::builder@ - IL_0082: ldloc.0 - IL_0083: ldloc.1 - IL_0084: newobj instance void class [mscorlib]System.Tuple`2,int32>::.ctor(!0, + IL_0078: ldarg.0 + IL_0079: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/'categories@40-3'::builder@ + IL_007e: ldloc.0 + IL_007f: ldloc.1 + IL_0080: newobj instance void class [mscorlib]System.Tuple`2,int32>::.ctor(!0, !1) - IL_0089: tail. - IL_008b: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Yield,int32>,object>(!!0) - IL_0090: ret + IL_0085: tail. + IL_0087: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Yield,int32>,object>(!!0) + IL_008c: ret } // end of method 'categories@40-3'::Invoke } // end of class 'categories@40-3' @@ -1851,7 +1743,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -1862,90 +1754,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 49,49 : 22,41 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_numbers() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101Aggregates01/minNum@49::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_numbers() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101Aggregates01/minNum@49::pc .line 49,49 : 22,41 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 49,49 : 22,41 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101Aggregates01/minNum@49::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 49,49 : 42,49 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld int32 Linq101Aggregates01/minNum@49::current - IL_006b: ldc.i4.1 - IL_006c: ret + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101Aggregates01/minNum@49::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld int32 Linq101Aggregates01/minNum@49::current + IL_0065: ldc.i4.1 + IL_0066: ret .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 + IL_0067: nop + IL_0068: br.s IL_003c - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101Aggregates01/minNum@49::pc + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101Aggregates01/minNum@49::pc .line 49,49 : 22,41 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101Aggregates01/minNum@49::pc - IL_0091: ldarg.0 + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101Aggregates01/minNum@49::pc + IL_008b: ldarg.0 + IL_008c: ldc.i4.0 + IL_008d: stfld int32 Linq101Aggregates01/minNum@49::current IL_0092: ldc.i4.0 - IL_0093: stfld int32 Linq101Aggregates01/minNum@49::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0093: ret } // end of method minNum@49::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -1957,158 +1843,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Aggregates01/minNum@49::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Aggregates01/minNum@49::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Aggregates01/minNum@49::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Aggregates01/minNum@49::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/minNum@49::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Aggregates01/minNum@49::pc - IL_0068: ldarg.0 - IL_0069: ldc.i4.0 - IL_006a: stfld int32 Linq101Aggregates01/minNum@49::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Aggregates01/minNum@49::pc + IL_005d: ldarg.0 + IL_005e: ldc.i4.0 + IL_005f: stfld int32 Linq101Aggregates01/minNum@49::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 49,49 : 22,41 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 + IL_0076: nop + IL_0077: br IL_0000 - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method minNum@49::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/minNum@49::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method minNum@49::get_CheckClose .method public strict virtual instance int32 @@ -2219,7 +2085,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] string V_0, [1] string w) @@ -2230,90 +2096,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 52,52 : 28,45 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_words() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101Aggregates01/shortestWord@52::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_words() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101Aggregates01/shortestWord@52::pc .line 52,52 : 28,45 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 52,52 : 28,45 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101Aggregates01/shortestWord@52::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 52,52 : 46,60 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld string Linq101Aggregates01/shortestWord@52::current - IL_006b: ldc.i4.1 - IL_006c: ret + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101Aggregates01/shortestWord@52::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld string Linq101Aggregates01/shortestWord@52::current + IL_0065: ldc.i4.1 + IL_0066: ret .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 + IL_0067: nop + IL_0068: br.s IL_003c - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101Aggregates01/shortestWord@52::pc + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101Aggregates01/shortestWord@52::pc .line 52,52 : 28,45 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101Aggregates01/shortestWord@52::pc - IL_0091: ldarg.0 - IL_0092: ldnull - IL_0093: stfld string Linq101Aggregates01/shortestWord@52::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101Aggregates01/shortestWord@52::pc + IL_008b: ldarg.0 + IL_008c: ldnull + IL_008d: stfld string Linq101Aggregates01/shortestWord@52::current + IL_0092: ldc.i4.0 + IL_0093: ret } // end of method shortestWord@52::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -2325,158 +2185,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Aggregates01/shortestWord@52::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Aggregates01/shortestWord@52::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Aggregates01/shortestWord@52::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Aggregates01/shortestWord@52::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/shortestWord@52::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Aggregates01/shortestWord@52::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld string Linq101Aggregates01/shortestWord@52::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Aggregates01/shortestWord@52::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld string Linq101Aggregates01/shortestWord@52::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 52,52 : 28,45 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f - - .line 100001,100001 : 0,0 '' - } // end handler - IL_007f: ldloc.1 - IL_0080: pop - .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 - IL_008d: br.s IL_0091 + .line 100001,100001 : 0,0 '' + } // end handler + IL_0074: ldloc.1 + IL_0075: pop + .line 100001,100001 : 0,0 '' + IL_0076: nop + IL_0077: br IL_0000 - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method shortestWord@52::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/shortestWord@52::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method shortestWord@52::get_CheckClose .method public strict virtual instance string @@ -2713,7 +2553,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 155 (0x9b) + // Code size 149 (0x95) .maxstack 6 .locals init ([0] class [Utils]Utils/Product V_0, [1] class [Utils]Utils/Product x) @@ -2724,91 +2564,85 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0071 + IL_001b: nop + IL_001c: br.s IL_006b .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006e + IL_001e: nop + IL_001f: br.s IL_0068 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0092 + IL_0021: nop + IL_0022: br.s IL_008c .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 59,59 : 27,40 '' - IL_002b: ldarg.0 - IL_002c: ldarg.0 - IL_002d: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/min@59::g - IL_0032: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0037: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' - IL_003c: ldarg.0 - IL_003d: ldc.i4.1 - IL_003e: stfld int32 Linq101Aggregates01/min@59::pc + IL_0025: ldarg.0 + IL_0026: ldarg.0 + IL_0027: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/min@59::g + IL_002c: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0031: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' + IL_0036: ldarg.0 + IL_0037: ldc.i4.1 + IL_0038: stfld int32 Linq101Aggregates01/min@59::pc .line 59,59 : 27,40 '' - IL_0043: ldarg.0 - IL_0044: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' - IL_0049: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004e: brfalse.s IL_0071 - - IL_0050: ldarg.0 - IL_0051: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' - IL_0056: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005b: stloc.0 + IL_003d: ldarg.0 + IL_003e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' + IL_0043: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0048: brfalse.s IL_006b + + IL_004a: ldarg.0 + IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' + IL_0050: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0055: stloc.0 .line 59,59 : 27,40 '' - IL_005c: ldloc.0 - IL_005d: stloc.1 - IL_005e: ldarg.0 - IL_005f: ldc.i4.2 - IL_0060: stfld int32 Linq101Aggregates01/min@59::pc + IL_0056: ldloc.0 + IL_0057: stloc.1 .line 59,59 : 41,58 '' - IL_0065: ldarg.0 - IL_0066: ldloc.1 - IL_0067: stfld class [Utils]Utils/Product Linq101Aggregates01/min@59::current - IL_006c: ldc.i4.1 - IL_006d: ret - - .line 100001,100001 : 0,0 '' - IL_006e: nop - IL_006f: br.s IL_0043 - - IL_0071: ldarg.0 - IL_0072: ldc.i4.3 - IL_0073: stfld int32 Linq101Aggregates01/min@59::pc + IL_0058: ldarg.0 + IL_0059: ldc.i4.2 + IL_005a: stfld int32 Linq101Aggregates01/min@59::pc + IL_005f: ldarg.0 + IL_0060: ldloc.1 + IL_0061: stfld class [Utils]Utils/Product Linq101Aggregates01/min@59::current + IL_0066: ldc.i4.1 + IL_0067: ret + + .line 100001,100001 : 0,0 '' + IL_0068: nop + IL_0069: br.s IL_003d + + IL_006b: ldarg.0 + IL_006c: ldc.i4.3 + IL_006d: stfld int32 Linq101Aggregates01/min@59::pc .line 59,59 : 27,40 '' - IL_0078: ldarg.0 - IL_0079: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' - IL_007e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0083: nop - IL_0084: ldarg.0 - IL_0085: ldnull - IL_0086: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' - IL_008b: ldarg.0 - IL_008c: ldc.i4.3 - IL_008d: stfld int32 Linq101Aggregates01/min@59::pc - IL_0092: ldarg.0 - IL_0093: ldnull - IL_0094: stfld class [Utils]Utils/Product Linq101Aggregates01/min@59::current - IL_0099: ldc.i4.0 - IL_009a: ret + IL_0072: ldarg.0 + IL_0073: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' + IL_0078: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007d: nop + IL_007e: ldarg.0 + IL_007f: ldnull + IL_0080: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' + IL_0085: ldarg.0 + IL_0086: ldc.i4.3 + IL_0087: stfld int32 Linq101Aggregates01/min@59::pc + IL_008c: ldarg.0 + IL_008d: ldnull + IL_008e: stfld class [Utils]Utils/Product Linq101Aggregates01/min@59::current + IL_0093: ldc.i4.0 + IL_0094: ret } // end of method min@59::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -2820,158 +2654,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Aggregates01/min@59::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Aggregates01/min@59::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Aggregates01/min@59::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Aggregates01/min@59::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/min@59::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Aggregates01/min@59::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld class [Utils]Utils/Product Linq101Aggregates01/min@59::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Aggregates01/min@59::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld class [Utils]Utils/Product Linq101Aggregates01/min@59::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 59,59 : 27,40 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f + IL_0076: nop + IL_0077: br IL_0000 - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method min@59::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/min@59::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method min@59::get_CheckClose .method public strict virtual instance class [Utils]Utils/Product @@ -3341,7 +3155,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 155 (0x9b) + // Code size 149 (0x95) .maxstack 6 .locals init ([0] class [Utils]Utils/Product V_0, [1] class [Utils]Utils/Product x) @@ -3352,91 +3166,85 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0071 + IL_001b: nop + IL_001c: br.s IL_006b .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006e + IL_001e: nop + IL_001f: br.s IL_0068 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0092 + IL_0021: nop + IL_0022: br.s IL_008c .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 69,69 : 40,53 '' - IL_002b: ldarg.0 - IL_002c: ldarg.0 - IL_002d: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/cheapestProducts@69::g - IL_0032: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0037: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' - IL_003c: ldarg.0 - IL_003d: ldc.i4.1 - IL_003e: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc + IL_0025: ldarg.0 + IL_0026: ldarg.0 + IL_0027: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/cheapestProducts@69::g + IL_002c: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0031: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' + IL_0036: ldarg.0 + IL_0037: ldc.i4.1 + IL_0038: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc .line 69,69 : 40,53 '' - IL_0043: ldarg.0 - IL_0044: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' - IL_0049: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004e: brfalse.s IL_0071 - - IL_0050: ldarg.0 - IL_0051: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' - IL_0056: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005b: stloc.0 + IL_003d: ldarg.0 + IL_003e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' + IL_0043: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0048: brfalse.s IL_006b + + IL_004a: ldarg.0 + IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' + IL_0050: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0055: stloc.0 .line 69,69 : 40,53 '' - IL_005c: ldloc.0 - IL_005d: stloc.1 - IL_005e: ldarg.0 - IL_005f: ldc.i4.2 - IL_0060: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc + IL_0056: ldloc.0 + IL_0057: stloc.1 .line 69,69 : 54,79 '' - IL_0065: ldarg.0 - IL_0066: ldloc.1 - IL_0067: stfld class [Utils]Utils/Product Linq101Aggregates01/cheapestProducts@69::current - IL_006c: ldc.i4.1 - IL_006d: ret - - .line 100001,100001 : 0,0 '' - IL_006e: nop - IL_006f: br.s IL_0043 - - IL_0071: ldarg.0 - IL_0072: ldc.i4.3 - IL_0073: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc + IL_0058: ldarg.0 + IL_0059: ldc.i4.2 + IL_005a: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc + IL_005f: ldarg.0 + IL_0060: ldloc.1 + IL_0061: stfld class [Utils]Utils/Product Linq101Aggregates01/cheapestProducts@69::current + IL_0066: ldc.i4.1 + IL_0067: ret + + .line 100001,100001 : 0,0 '' + IL_0068: nop + IL_0069: br.s IL_003d + + IL_006b: ldarg.0 + IL_006c: ldc.i4.3 + IL_006d: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc .line 69,69 : 40,53 '' - IL_0078: ldarg.0 - IL_0079: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' - IL_007e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0083: nop - IL_0084: ldarg.0 - IL_0085: ldnull - IL_0086: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' - IL_008b: ldarg.0 - IL_008c: ldc.i4.3 - IL_008d: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc - IL_0092: ldarg.0 - IL_0093: ldnull - IL_0094: stfld class [Utils]Utils/Product Linq101Aggregates01/cheapestProducts@69::current - IL_0099: ldc.i4.0 - IL_009a: ret + IL_0072: ldarg.0 + IL_0073: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' + IL_0078: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007d: nop + IL_007e: ldarg.0 + IL_007f: ldnull + IL_0080: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' + IL_0085: ldarg.0 + IL_0086: ldc.i4.3 + IL_0087: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc + IL_008c: ldarg.0 + IL_008d: ldnull + IL_008e: stfld class [Utils]Utils/Product Linq101Aggregates01/cheapestProducts@69::current + IL_0093: ldc.i4.0 + IL_0094: ret } // end of method cheapestProducts@69::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -3448,158 +3256,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Aggregates01/cheapestProducts@69::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Aggregates01/cheapestProducts@69::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/cheapestProducts@69::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld class [Utils]Utils/Product Linq101Aggregates01/cheapestProducts@69::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Aggregates01/cheapestProducts@69::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld class [Utils]Utils/Product Linq101Aggregates01/cheapestProducts@69::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 69,69 : 40,53 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f + IL_0076: nop + IL_0077: br IL_0000 - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method cheapestProducts@69::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/cheapestProducts@69::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method cheapestProducts@69::get_CheckClose .method public strict virtual instance class [Utils]Utils/Product @@ -3844,7 +3632,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -3855,90 +3643,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 74,74 : 22,41 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_numbers() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101Aggregates01/maxNum@74::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_numbers() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101Aggregates01/maxNum@74::pc .line 74,74 : 22,41 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 74,74 : 22,41 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101Aggregates01/maxNum@74::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 74,74 : 42,49 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld int32 Linq101Aggregates01/maxNum@74::current - IL_006b: ldc.i4.1 - IL_006c: ret + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101Aggregates01/maxNum@74::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld int32 Linq101Aggregates01/maxNum@74::current + IL_0065: ldc.i4.1 + IL_0066: ret .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 + IL_0067: nop + IL_0068: br.s IL_003c - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101Aggregates01/maxNum@74::pc + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101Aggregates01/maxNum@74::pc .line 74,74 : 22,41 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101Aggregates01/maxNum@74::pc - IL_0091: ldarg.0 + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101Aggregates01/maxNum@74::pc + IL_008b: ldarg.0 + IL_008c: ldc.i4.0 + IL_008d: stfld int32 Linq101Aggregates01/maxNum@74::current IL_0092: ldc.i4.0 - IL_0093: stfld int32 Linq101Aggregates01/maxNum@74::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0093: ret } // end of method maxNum@74::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -3950,158 +3732,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Aggregates01/maxNum@74::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Aggregates01/maxNum@74::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Aggregates01/maxNum@74::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Aggregates01/maxNum@74::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxNum@74::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Aggregates01/maxNum@74::pc - IL_0068: ldarg.0 - IL_0069: ldc.i4.0 - IL_006a: stfld int32 Linq101Aggregates01/maxNum@74::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Aggregates01/maxNum@74::pc + IL_005d: ldarg.0 + IL_005e: ldc.i4.0 + IL_005f: stfld int32 Linq101Aggregates01/maxNum@74::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 74,74 : 22,41 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 + IL_0076: nop + IL_0077: br IL_0000 - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method maxNum@74::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/maxNum@74::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method maxNum@74::get_CheckClose .method public strict virtual instance int32 @@ -4212,7 +3974,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] string V_0, [1] string w) @@ -4223,90 +3985,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 77,77 : 29,46 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_words() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101Aggregates01/longestLength@77::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_words() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101Aggregates01/longestLength@77::pc .line 77,77 : 29,46 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 77,77 : 29,46 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101Aggregates01/longestLength@77::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 77,77 : 47,61 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld string Linq101Aggregates01/longestLength@77::current - IL_006b: ldc.i4.1 - IL_006c: ret + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101Aggregates01/longestLength@77::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld string Linq101Aggregates01/longestLength@77::current + IL_0065: ldc.i4.1 + IL_0066: ret .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 + IL_0067: nop + IL_0068: br.s IL_003c - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101Aggregates01/longestLength@77::pc + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101Aggregates01/longestLength@77::pc .line 77,77 : 29,46 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101Aggregates01/longestLength@77::pc - IL_0091: ldarg.0 - IL_0092: ldnull - IL_0093: stfld string Linq101Aggregates01/longestLength@77::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101Aggregates01/longestLength@77::pc + IL_008b: ldarg.0 + IL_008c: ldnull + IL_008d: stfld string Linq101Aggregates01/longestLength@77::current + IL_0092: ldc.i4.0 + IL_0093: ret } // end of method longestLength@77::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -4318,158 +4074,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Aggregates01/longestLength@77::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Aggregates01/longestLength@77::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Aggregates01/longestLength@77::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Aggregates01/longestLength@77::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/longestLength@77::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Aggregates01/longestLength@77::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld string Linq101Aggregates01/longestLength@77::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Aggregates01/longestLength@77::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld string Linq101Aggregates01/longestLength@77::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 77,77 : 29,46 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 + IL_0076: nop + IL_0077: br IL_0000 - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method longestLength@77::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/longestLength@77::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method longestLength@77::get_CheckClose .method public strict virtual instance string @@ -4706,7 +4442,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 155 (0x9b) + // Code size 149 (0x95) .maxstack 6 .locals init ([0] class [Utils]Utils/Product V_0, [1] class [Utils]Utils/Product x) @@ -4717,91 +4453,85 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0071 + IL_001b: nop + IL_001c: br.s IL_006b .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006e + IL_001e: nop + IL_001f: br.s IL_0068 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0092 + IL_0021: nop + IL_0022: br.s IL_008c .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 84,84 : 42,55 '' - IL_002b: ldarg.0 - IL_002c: ldarg.0 - IL_002d: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/mostExpensivePrice@84::g - IL_0032: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0037: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' - IL_003c: ldarg.0 - IL_003d: ldc.i4.1 - IL_003e: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc + IL_0025: ldarg.0 + IL_0026: ldarg.0 + IL_0027: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/mostExpensivePrice@84::g + IL_002c: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0031: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' + IL_0036: ldarg.0 + IL_0037: ldc.i4.1 + IL_0038: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc .line 84,84 : 42,55 '' - IL_0043: ldarg.0 - IL_0044: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' - IL_0049: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004e: brfalse.s IL_0071 - - IL_0050: ldarg.0 - IL_0051: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' - IL_0056: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005b: stloc.0 + IL_003d: ldarg.0 + IL_003e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' + IL_0043: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0048: brfalse.s IL_006b + + IL_004a: ldarg.0 + IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' + IL_0050: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0055: stloc.0 .line 84,84 : 42,55 '' - IL_005c: ldloc.0 - IL_005d: stloc.1 - IL_005e: ldarg.0 - IL_005f: ldc.i4.2 - IL_0060: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc + IL_0056: ldloc.0 + IL_0057: stloc.1 .line 84,84 : 56,73 '' - IL_0065: ldarg.0 - IL_0066: ldloc.1 - IL_0067: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensivePrice@84::current - IL_006c: ldc.i4.1 - IL_006d: ret - - .line 100001,100001 : 0,0 '' - IL_006e: nop - IL_006f: br.s IL_0043 - - IL_0071: ldarg.0 - IL_0072: ldc.i4.3 - IL_0073: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc + IL_0058: ldarg.0 + IL_0059: ldc.i4.2 + IL_005a: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc + IL_005f: ldarg.0 + IL_0060: ldloc.1 + IL_0061: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensivePrice@84::current + IL_0066: ldc.i4.1 + IL_0067: ret + + .line 100001,100001 : 0,0 '' + IL_0068: nop + IL_0069: br.s IL_003d + + IL_006b: ldarg.0 + IL_006c: ldc.i4.3 + IL_006d: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc .line 84,84 : 42,55 '' - IL_0078: ldarg.0 - IL_0079: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' - IL_007e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0083: nop - IL_0084: ldarg.0 - IL_0085: ldnull - IL_0086: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' - IL_008b: ldarg.0 - IL_008c: ldc.i4.3 - IL_008d: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc - IL_0092: ldarg.0 - IL_0093: ldnull - IL_0094: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensivePrice@84::current - IL_0099: ldc.i4.0 - IL_009a: ret + IL_0072: ldarg.0 + IL_0073: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' + IL_0078: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007d: nop + IL_007e: ldarg.0 + IL_007f: ldnull + IL_0080: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' + IL_0085: ldarg.0 + IL_0086: ldc.i4.3 + IL_0087: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc + IL_008c: ldarg.0 + IL_008d: ldnull + IL_008e: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensivePrice@84::current + IL_0093: ldc.i4.0 + IL_0094: ret } // end of method mostExpensivePrice@84::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -4813,158 +4543,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop - .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensivePrice@84::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensivePrice@84::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop + .line 100001,100001 : 0,0 '' + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensivePrice@84::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 84,84 : 42,55 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 + IL_0076: nop + IL_0077: br IL_0000 - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method mostExpensivePrice@84::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/mostExpensivePrice@84::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method mostExpensivePrice@84::get_CheckClose .method public strict virtual instance class [Utils]Utils/Product @@ -5316,7 +5026,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 155 (0x9b) + // Code size 149 (0x95) .maxstack 6 .locals init ([0] class [Utils]Utils/Product V_0, [1] class [Utils]Utils/Product x) @@ -5327,91 +5037,85 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0071 + IL_001b: nop + IL_001c: br.s IL_006b .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006e + IL_001e: nop + IL_001f: br.s IL_0068 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0092 + IL_0021: nop + IL_0022: br.s IL_008c .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 93,93 : 32,45 '' - IL_002b: ldarg.0 - IL_002c: ldarg.0 - IL_002d: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/maxPrice@93::g - IL_0032: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0037: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' - IL_003c: ldarg.0 - IL_003d: ldc.i4.1 - IL_003e: stfld int32 Linq101Aggregates01/maxPrice@93::pc + IL_0025: ldarg.0 + IL_0026: ldarg.0 + IL_0027: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/maxPrice@93::g + IL_002c: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0031: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' + IL_0036: ldarg.0 + IL_0037: ldc.i4.1 + IL_0038: stfld int32 Linq101Aggregates01/maxPrice@93::pc .line 93,93 : 32,45 '' - IL_0043: ldarg.0 - IL_0044: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' - IL_0049: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004e: brfalse.s IL_0071 - - IL_0050: ldarg.0 - IL_0051: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' - IL_0056: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005b: stloc.0 + IL_003d: ldarg.0 + IL_003e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' + IL_0043: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0048: brfalse.s IL_006b + + IL_004a: ldarg.0 + IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' + IL_0050: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0055: stloc.0 .line 93,93 : 32,45 '' - IL_005c: ldloc.0 - IL_005d: stloc.1 - IL_005e: ldarg.0 - IL_005f: ldc.i4.2 - IL_0060: stfld int32 Linq101Aggregates01/maxPrice@93::pc + IL_0056: ldloc.0 + IL_0057: stloc.1 .line 93,93 : 46,63 '' - IL_0065: ldarg.0 - IL_0066: ldloc.1 - IL_0067: stfld class [Utils]Utils/Product Linq101Aggregates01/maxPrice@93::current - IL_006c: ldc.i4.1 - IL_006d: ret - - .line 100001,100001 : 0,0 '' - IL_006e: nop - IL_006f: br.s IL_0043 - - IL_0071: ldarg.0 - IL_0072: ldc.i4.3 - IL_0073: stfld int32 Linq101Aggregates01/maxPrice@93::pc + IL_0058: ldarg.0 + IL_0059: ldc.i4.2 + IL_005a: stfld int32 Linq101Aggregates01/maxPrice@93::pc + IL_005f: ldarg.0 + IL_0060: ldloc.1 + IL_0061: stfld class [Utils]Utils/Product Linq101Aggregates01/maxPrice@93::current + IL_0066: ldc.i4.1 + IL_0067: ret + + .line 100001,100001 : 0,0 '' + IL_0068: nop + IL_0069: br.s IL_003d + + IL_006b: ldarg.0 + IL_006c: ldc.i4.3 + IL_006d: stfld int32 Linq101Aggregates01/maxPrice@93::pc .line 93,93 : 32,45 '' - IL_0078: ldarg.0 - IL_0079: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' - IL_007e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0083: nop - IL_0084: ldarg.0 - IL_0085: ldnull - IL_0086: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' - IL_008b: ldarg.0 - IL_008c: ldc.i4.3 - IL_008d: stfld int32 Linq101Aggregates01/maxPrice@93::pc - IL_0092: ldarg.0 - IL_0093: ldnull - IL_0094: stfld class [Utils]Utils/Product Linq101Aggregates01/maxPrice@93::current - IL_0099: ldc.i4.0 - IL_009a: ret + IL_0072: ldarg.0 + IL_0073: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' + IL_0078: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007d: nop + IL_007e: ldarg.0 + IL_007f: ldnull + IL_0080: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' + IL_0085: ldarg.0 + IL_0086: ldc.i4.3 + IL_0087: stfld int32 Linq101Aggregates01/maxPrice@93::pc + IL_008c: ldarg.0 + IL_008d: ldnull + IL_008e: stfld class [Utils]Utils/Product Linq101Aggregates01/maxPrice@93::current + IL_0093: ldc.i4.0 + IL_0094: ret } // end of method maxPrice@93::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -5423,158 +5127,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Aggregates01/maxPrice@93::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Aggregates01/maxPrice@93::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Aggregates01/maxPrice@93::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Aggregates01/maxPrice@93::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/maxPrice@93::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Aggregates01/maxPrice@93::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld class [Utils]Utils/Product Linq101Aggregates01/maxPrice@93::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Aggregates01/maxPrice@93::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld class [Utils]Utils/Product Linq101Aggregates01/maxPrice@93::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 93,93 : 32,45 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 + IL_0076: nop + IL_0077: br IL_0000 - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method maxPrice@93::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/maxPrice@93::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method maxPrice@93::get_CheckClose .method public strict virtual instance class [Utils]Utils/Product @@ -5695,7 +5379,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 155 (0x9b) + // Code size 149 (0x95) .maxstack 6 .locals init ([0] class [Utils]Utils/Product V_0, [1] class [Utils]Utils/Product x) @@ -5706,91 +5390,85 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0071 + IL_001b: nop + IL_001c: br.s IL_006b .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006e + IL_001e: nop + IL_001f: br.s IL_0068 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0092 + IL_0021: nop + IL_0022: br.s IL_008c .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 94,94 : 45,58 '' - IL_002b: ldarg.0 - IL_002c: ldarg.0 - IL_002d: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/mostExpensiveProducts@94::g - IL_0032: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0037: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' - IL_003c: ldarg.0 - IL_003d: ldc.i4.1 - IL_003e: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc + IL_0025: ldarg.0 + IL_0026: ldarg.0 + IL_0027: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/mostExpensiveProducts@94::g + IL_002c: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0031: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' + IL_0036: ldarg.0 + IL_0037: ldc.i4.1 + IL_0038: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc .line 94,94 : 45,58 '' - IL_0043: ldarg.0 - IL_0044: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' - IL_0049: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004e: brfalse.s IL_0071 - - IL_0050: ldarg.0 - IL_0051: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' - IL_0056: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005b: stloc.0 + IL_003d: ldarg.0 + IL_003e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' + IL_0043: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0048: brfalse.s IL_006b + + IL_004a: ldarg.0 + IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' + IL_0050: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0055: stloc.0 .line 94,94 : 45,58 '' - IL_005c: ldloc.0 - IL_005d: stloc.1 - IL_005e: ldarg.0 - IL_005f: ldc.i4.2 - IL_0060: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc + IL_0056: ldloc.0 + IL_0057: stloc.1 .line 94,94 : 59,89 '' - IL_0065: ldarg.0 - IL_0066: ldloc.1 - IL_0067: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensiveProducts@94::current - IL_006c: ldc.i4.1 - IL_006d: ret - - .line 100001,100001 : 0,0 '' - IL_006e: nop - IL_006f: br.s IL_0043 - - IL_0071: ldarg.0 - IL_0072: ldc.i4.3 - IL_0073: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc + IL_0058: ldarg.0 + IL_0059: ldc.i4.2 + IL_005a: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc + IL_005f: ldarg.0 + IL_0060: ldloc.1 + IL_0061: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensiveProducts@94::current + IL_0066: ldc.i4.1 + IL_0067: ret + + .line 100001,100001 : 0,0 '' + IL_0068: nop + IL_0069: br.s IL_003d + + IL_006b: ldarg.0 + IL_006c: ldc.i4.3 + IL_006d: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc .line 94,94 : 45,58 '' - IL_0078: ldarg.0 - IL_0079: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' - IL_007e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0083: nop - IL_0084: ldarg.0 - IL_0085: ldnull - IL_0086: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' - IL_008b: ldarg.0 - IL_008c: ldc.i4.3 - IL_008d: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc - IL_0092: ldarg.0 - IL_0093: ldnull - IL_0094: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensiveProducts@94::current - IL_0099: ldc.i4.0 - IL_009a: ret + IL_0072: ldarg.0 + IL_0073: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' + IL_0078: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007d: nop + IL_007e: ldarg.0 + IL_007f: ldnull + IL_0080: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' + IL_0085: ldarg.0 + IL_0086: ldc.i4.3 + IL_0087: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc + IL_008c: ldarg.0 + IL_008d: ldnull + IL_008e: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensiveProducts@94::current + IL_0093: ldc.i4.0 + IL_0094: ret } // end of method mostExpensiveProducts@94::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -5802,158 +5480,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/mostExpensiveProducts@94::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensiveProducts@94::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld class [Utils]Utils/Product Linq101Aggregates01/mostExpensiveProducts@94::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 94,94 : 45,58 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 + IL_0076: nop + IL_0077: br IL_0000 - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method mostExpensiveProducts@94::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/mostExpensiveProducts@94::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method mostExpensiveProducts@94::get_CheckClose .method public strict virtual instance class [Utils]Utils/Product @@ -6203,7 +5861,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 162 (0xa2) + // Code size 156 (0x9c) .maxstack 6 .locals init ([0] float64 V_0, [1] float64 n) @@ -6214,90 +5872,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 100,100 : 26,46 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_numbers2() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101Aggregates01/averageNum@100::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_numbers2() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101Aggregates01/averageNum@100::pc .line 100,100 : 26,46 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 100,100 : 26,46 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101Aggregates01/averageNum@100::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 100,100 : 47,58 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld float64 Linq101Aggregates01/averageNum@100::current - IL_006b: ldc.i4.1 - IL_006c: ret + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101Aggregates01/averageNum@100::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld float64 Linq101Aggregates01/averageNum@100::current + IL_0065: ldc.i4.1 + IL_0066: ret .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 + IL_0067: nop + IL_0068: br.s IL_003c - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101Aggregates01/averageNum@100::pc + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101Aggregates01/averageNum@100::pc .line 100,100 : 26,46 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101Aggregates01/averageNum@100::pc - IL_0091: ldarg.0 - IL_0092: ldc.r8 0.0 - IL_009b: stfld float64 Linq101Aggregates01/averageNum@100::current - IL_00a0: ldc.i4.0 - IL_00a1: ret + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101Aggregates01/averageNum@100::pc + IL_008b: ldarg.0 + IL_008c: ldc.r8 0.0 + IL_0095: stfld float64 Linq101Aggregates01/averageNum@100::current + IL_009a: ldc.i4.0 + IL_009b: ret } // end of method averageNum@100::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 156 (0x9c) + // Code size 144 (0x90) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -6313,7 +5965,7 @@ .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_008f + IL_0014: br IL_0087 .line 100001,100001 : 0,0 '' IL_0019: nop @@ -6323,144 +5975,124 @@ IL_001b: ldfld int32 Linq101Aggregates01/averageNum@100::pc IL_0020: switch ( IL_0037, - IL_0039, - IL_003b, - IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_003a, + IL_003d, + IL_0040) + IL_0035: br.s IL_0043 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0037: nop + IL_0038: br.s IL_0059 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_003a: nop + IL_003b: br.s IL_0045 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003d: nop + IL_003e: br.s IL_0044 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_0040: nop + IL_0041: br.s IL_0059 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0043: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Aggregates01/averageNum@100::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0044: nop + IL_0045: ldarg.0 + IL_0046: ldc.i4.3 + IL_0047: stfld int32 Linq101Aggregates01/averageNum@100::pc + IL_004c: ldarg.0 + IL_004d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averageNum@100::'enum' + IL_0052: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0057: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Aggregates01/averageNum@100::pc - IL_0068: ldarg.0 - IL_0069: ldc.r8 0.0 - IL_0072: stfld float64 Linq101Aggregates01/averageNum@100::current - IL_0077: ldnull - IL_0078: stloc.1 - IL_0079: leave.s IL_0087 + IL_0058: nop + IL_0059: ldarg.0 + IL_005a: ldc.i4.3 + IL_005b: stfld int32 Linq101Aggregates01/averageNum@100::pc + IL_0060: ldarg.0 + IL_0061: ldc.r8 0.0 + IL_006a: stfld float64 Linq101Aggregates01/averageNum@100::current + IL_006f: ldnull + IL_0070: stloc.1 + IL_0071: leave.s IL_007f } // end .try catch [mscorlib]System.Object { - IL_007b: castclass [mscorlib]System.Exception - IL_0080: stloc.2 + IL_0073: castclass [mscorlib]System.Exception + IL_0078: stloc.2 .line 100,100 : 26,46 '' - IL_0081: ldloc.2 - IL_0082: stloc.0 - IL_0083: ldnull - IL_0084: stloc.1 - IL_0085: leave.s IL_0087 + IL_0079: ldloc.2 + IL_007a: stloc.0 + IL_007b: ldnull + IL_007c: stloc.1 + IL_007d: leave.s IL_007f .line 100001,100001 : 0,0 '' } // end handler - IL_0087: ldloc.1 - IL_0088: pop + IL_007f: ldloc.1 + IL_0080: pop .line 100001,100001 : 0,0 '' - IL_0089: nop - IL_008a: br IL_0000 - - IL_008f: ldloc.0 - IL_0090: ldnull - IL_0091: cgt.un - IL_0093: brfalse.s IL_0097 - - IL_0095: br.s IL_0099 + IL_0081: nop + IL_0082: br IL_0000 - IL_0097: br.s IL_009b + IL_0087: ldloc.0 + IL_0088: ldnull + IL_0089: cgt.un + IL_008b: brfalse.s IL_008f .line 100001,100001 : 0,0 '' - IL_0099: ldloc.0 - IL_009a: throw + IL_008d: ldloc.0 + IL_008e: throw .line 100001,100001 : 0,0 '' - IL_009b: ret + IL_008f: ret } // end of method averageNum@100::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/averageNum@100::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method averageNum@100::get_CheckClose .method public strict virtual instance float64 @@ -6794,7 +6426,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 155 (0x9b) + // Code size 149 (0x95) .maxstack 6 .locals init ([0] class [Utils]Utils/Product V_0, [1] class [Utils]Utils/Product x) @@ -6805,91 +6437,85 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0071 + IL_001b: nop + IL_001c: br.s IL_006b .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006e + IL_001e: nop + IL_001f: br.s IL_0068 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0092 + IL_0021: nop + IL_0022: br.s IL_008c .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 115,115 : 36,49 '' - IL_002b: ldarg.0 - IL_002c: ldarg.0 - IL_002d: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/averagePrice@115::g - IL_0032: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0037: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' - IL_003c: ldarg.0 - IL_003d: ldc.i4.1 - IL_003e: stfld int32 Linq101Aggregates01/averagePrice@115::pc + IL_0025: ldarg.0 + IL_0026: ldarg.0 + IL_0027: ldfld class [System.Core]System.Linq.IGrouping`2 Linq101Aggregates01/averagePrice@115::g + IL_002c: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0031: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' + IL_0036: ldarg.0 + IL_0037: ldc.i4.1 + IL_0038: stfld int32 Linq101Aggregates01/averagePrice@115::pc .line 115,115 : 36,49 '' - IL_0043: ldarg.0 - IL_0044: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' - IL_0049: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004e: brfalse.s IL_0071 - - IL_0050: ldarg.0 - IL_0051: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' - IL_0056: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005b: stloc.0 + IL_003d: ldarg.0 + IL_003e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' + IL_0043: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0048: brfalse.s IL_006b + + IL_004a: ldarg.0 + IL_004b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' + IL_0050: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0055: stloc.0 .line 115,115 : 36,49 '' - IL_005c: ldloc.0 - IL_005d: stloc.1 - IL_005e: ldarg.0 - IL_005f: ldc.i4.2 - IL_0060: stfld int32 Linq101Aggregates01/averagePrice@115::pc + IL_0056: ldloc.0 + IL_0057: stloc.1 .line 115,115 : 50,71 '' - IL_0065: ldarg.0 - IL_0066: ldloc.1 - IL_0067: stfld class [Utils]Utils/Product Linq101Aggregates01/averagePrice@115::current - IL_006c: ldc.i4.1 - IL_006d: ret - - .line 100001,100001 : 0,0 '' - IL_006e: nop - IL_006f: br.s IL_0043 - - IL_0071: ldarg.0 - IL_0072: ldc.i4.3 - IL_0073: stfld int32 Linq101Aggregates01/averagePrice@115::pc + IL_0058: ldarg.0 + IL_0059: ldc.i4.2 + IL_005a: stfld int32 Linq101Aggregates01/averagePrice@115::pc + IL_005f: ldarg.0 + IL_0060: ldloc.1 + IL_0061: stfld class [Utils]Utils/Product Linq101Aggregates01/averagePrice@115::current + IL_0066: ldc.i4.1 + IL_0067: ret + + .line 100001,100001 : 0,0 '' + IL_0068: nop + IL_0069: br.s IL_003d + + IL_006b: ldarg.0 + IL_006c: ldc.i4.3 + IL_006d: stfld int32 Linq101Aggregates01/averagePrice@115::pc .line 115,115 : 36,49 '' - IL_0078: ldarg.0 - IL_0079: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' - IL_007e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0083: nop - IL_0084: ldarg.0 - IL_0085: ldnull - IL_0086: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' - IL_008b: ldarg.0 - IL_008c: ldc.i4.3 - IL_008d: stfld int32 Linq101Aggregates01/averagePrice@115::pc - IL_0092: ldarg.0 - IL_0093: ldnull - IL_0094: stfld class [Utils]Utils/Product Linq101Aggregates01/averagePrice@115::current - IL_0099: ldc.i4.0 - IL_009a: ret + IL_0072: ldarg.0 + IL_0073: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' + IL_0078: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007d: nop + IL_007e: ldarg.0 + IL_007f: ldnull + IL_0080: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' + IL_0085: ldarg.0 + IL_0086: ldc.i4.3 + IL_0087: stfld int32 Linq101Aggregates01/averagePrice@115::pc + IL_008c: ldarg.0 + IL_008d: ldnull + IL_008e: stfld class [Utils]Utils/Product Linq101Aggregates01/averagePrice@115::current + IL_0093: ldc.i4.0 + IL_0094: ret } // end of method averagePrice@115::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -6901,158 +6527,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Aggregates01/averagePrice@115::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Aggregates01/averagePrice@115::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Aggregates01/averagePrice@115::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Aggregates01/averagePrice@115::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Aggregates01/averagePrice@115::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Aggregates01/averagePrice@115::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld class [Utils]Utils/Product Linq101Aggregates01/averagePrice@115::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Aggregates01/averagePrice@115::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld class [Utils]Utils/Product Linq101Aggregates01/averagePrice@115::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 115,115 : 36,49 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 + IL_0076: nop + IL_0077: br IL_0000 - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method averagePrice@115::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Aggregates01/averagePrice@115::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method averagePrice@115::get_CheckClose .method public strict virtual instance class [Utils]Utils/Product @@ -7153,7 +6759,7 @@ .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,valuetype [mscorlib]System.Decimal>,object> Invoke(class [System.Core]System.Linq.IGrouping`2 _arg2) cil managed { - // Code size 230 (0xe6) + // Code size 222 (0xde) .maxstack 9 .locals init ([0] class [System.Core]System.Linq.IGrouping`2 g, [1] valuetype [mscorlib]System.Decimal averagePrice, @@ -7244,68 +6850,60 @@ IL_0080: br.s IL_0059 IL_0082: ldloc.s V_10 - IL_0084: brtrue.s IL_0088 - - IL_0086: br.s IL_008a - - IL_0088: br.s IL_0095 + IL_0084: brtrue.s IL_0091 .line 100001,100001 : 0,0 '' - IL_008a: ldstr "source" - IL_008f: newobj instance void [netstandard]System.InvalidOperationException::.ctor(string) - IL_0094: throw + IL_0086: ldstr "source" + IL_008b: newobj instance void [netstandard]System.InvalidOperationException::.ctor(string) + IL_0090: throw .line 100001,100001 : 0,0 '' - IL_0095: nop - IL_0096: ldloc.s V_9 - IL_0098: stloc.s V_11 - IL_009a: ldloc.s V_10 - IL_009c: stloc.s V_12 - IL_009e: ldloc.s V_11 - IL_00a0: ldloc.s V_12 - IL_00a2: call valuetype [netstandard]System.Decimal [netstandard]System.Convert::ToDecimal(int32) - IL_00a7: call valuetype [netstandard]System.Decimal [netstandard]System.Decimal::Divide(valuetype [netstandard]System.Decimal, + IL_0091: nop + IL_0092: ldloc.s V_9 + IL_0094: stloc.s V_11 + IL_0096: ldloc.s V_10 + IL_0098: stloc.s V_12 + IL_009a: ldloc.s V_11 + IL_009c: ldloc.s V_12 + IL_009e: call valuetype [netstandard]System.Decimal [netstandard]System.Convert::ToDecimal(int32) + IL_00a3: call valuetype [netstandard]System.Decimal [netstandard]System.Decimal::Divide(valuetype [netstandard]System.Decimal, valuetype [netstandard]System.Decimal) - IL_00ac: stloc.s V_8 - IL_00ae: leave.s IL_00ce + IL_00a8: stloc.s V_8 + IL_00aa: leave.s IL_00c6 } // end .try finally { - IL_00b0: ldloc.s V_7 - IL_00b2: isinst [mscorlib]System.IDisposable - IL_00b7: stloc.s V_13 - IL_00b9: ldloc.s V_13 - IL_00bb: brfalse.s IL_00bf - - IL_00bd: br.s IL_00c1 - - IL_00bf: br.s IL_00cb + IL_00ac: ldloc.s V_7 + IL_00ae: isinst [mscorlib]System.IDisposable + IL_00b3: stloc.s V_13 + IL_00b5: ldloc.s V_13 + IL_00b7: brfalse.s IL_00c3 .line 100001,100001 : 0,0 '' - IL_00c1: ldloc.s V_13 - IL_00c3: callvirt instance void [netstandard]System.IDisposable::Dispose() - IL_00c8: ldnull - IL_00c9: pop - IL_00ca: endfinally + IL_00b9: ldloc.s V_13 + IL_00bb: callvirt instance void [netstandard]System.IDisposable::Dispose() + IL_00c0: ldnull + IL_00c1: pop + IL_00c2: endfinally .line 100001,100001 : 0,0 '' - IL_00cb: ldnull - IL_00cc: pop - IL_00cd: endfinally + IL_00c3: ldnull + IL_00c4: pop + IL_00c5: endfinally .line 100001,100001 : 0,0 '' } // end handler - IL_00ce: ldloc.s V_8 - IL_00d0: stloc.1 + IL_00c6: ldloc.s V_8 + IL_00c8: stloc.1 .line 116,116 : 9,37 '' - IL_00d1: ldarg.0 - IL_00d2: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/'categories6@114-3'::builder@ - IL_00d7: ldloc.0 - IL_00d8: ldloc.1 - IL_00d9: newobj instance void class [mscorlib]System.Tuple`2,valuetype [mscorlib]System.Decimal>::.ctor(!0, + IL_00c9: ldarg.0 + IL_00ca: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Aggregates01/'categories6@114-3'::builder@ + IL_00cf: ldloc.0 + IL_00d0: ldloc.1 + IL_00d1: newobj instance void class [mscorlib]System.Tuple`2,valuetype [mscorlib]System.Decimal>::.ctor(!0, !1) - IL_00de: tail. - IL_00e0: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Yield,valuetype [mscorlib]System.Decimal>,object>(!!0) - IL_00e5: ret + IL_00d6: tail. + IL_00d8: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Yield,valuetype [mscorlib]System.Decimal>,object>(!!0) + IL_00dd: ret } // end of method 'categories6@114-3'::Invoke } // end of class 'categories6@114-3' @@ -7704,7 +7302,7 @@ .method public static void main@() cil managed { .entrypoint - // Code size 1765 (0x6e5) + // Code size 1741 (0x6cd) .maxstack 13 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 factorsOf300, [1] int32 uniqueFactors, @@ -7889,7 +7487,7 @@ IL_00f4: ldloc.s V_28 IL_00f6: stloc.s V_27 - IL_00f8: leave.s IL_0118 + IL_00f8: leave.s IL_0114 } // end .try finally @@ -7898,625 +7496,601 @@ IL_00fc: isinst [mscorlib]System.IDisposable IL_0101: stloc.s V_29 IL_0103: ldloc.s V_29 - IL_0105: brfalse.s IL_0109 - - IL_0107: br.s IL_010b - - IL_0109: br.s IL_0115 + IL_0105: brfalse.s IL_0111 .line 100001,100001 : 0,0 '' - IL_010b: ldloc.s V_29 - IL_010d: callvirt instance void [netstandard]System.IDisposable::Dispose() - IL_0112: ldnull - IL_0113: pop - IL_0114: endfinally + IL_0107: ldloc.s V_29 + IL_0109: callvirt instance void [netstandard]System.IDisposable::Dispose() + IL_010e: ldnull + IL_010f: pop + IL_0110: endfinally .line 100001,100001 : 0,0 '' - IL_0115: ldnull - IL_0116: pop - IL_0117: endfinally + IL_0111: ldnull + IL_0112: pop + IL_0113: endfinally .line 100001,100001 : 0,0 '' } // end handler - IL_0118: ldloc.s V_27 - IL_011a: dup - IL_011b: stsfld int32 ''.$Linq101Aggregates01::numSum@19 - IL_0120: stloc.3 + IL_0114: ldloc.s V_27 + IL_0116: dup + IL_0117: stsfld int32 ''.$Linq101Aggregates01::numSum@19 + IL_011c: stloc.3 .line 26,26 : 1,45 '' - IL_0121: ldstr "cherry" - IL_0126: ldstr "apple" - IL_012b: ldstr "blueberry" - IL_0130: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() - IL_0135: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_011d: ldstr "cherry" + IL_0122: ldstr "apple" + IL_0127: ldstr "blueberry" + IL_012c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() + IL_0131: 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_013a: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_0136: 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_013f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_013b: 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_0144: dup - IL_0145: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Aggregates01::words@26 - IL_014a: stloc.s words - IL_014c: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_0151: stloc.s V_30 - IL_0153: ldloc.s V_30 - IL_0155: stloc.s V_31 - IL_0157: ldnull - IL_0158: ldc.i4.0 - IL_0159: ldnull - IL_015a: newobj instance void Linq101Aggregates01/totalChars@30::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + IL_0140: dup + IL_0141: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Aggregates01::words@26 + IL_0146: stloc.s words + IL_0148: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_014d: stloc.s V_30 + IL_014f: ldloc.s V_30 + IL_0151: stloc.s V_31 + IL_0153: ldnull + IL_0154: ldc.i4.0 + IL_0155: ldnull + IL_0156: newobj instance void Linq101Aggregates01/totalChars@30::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, int32, string) - IL_015f: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0164: stloc.s V_32 - IL_0166: ldsfld class Linq101Aggregates01/'totalChars@31-1' Linq101Aggregates01/'totalChars@31-1'::@_instance - IL_016b: stloc.s V_33 - IL_016d: ldloc.s V_32 - IL_016f: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerable`1 class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::get_Source() - IL_0174: stloc.s V_34 - IL_0176: ldloc.s V_34 - IL_0178: callvirt instance class [netstandard]System.Collections.Generic.IEnumerator`1 class [netstandard]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_017d: stloc.s V_35 + IL_015b: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0160: stloc.s V_32 + IL_0162: ldsfld class Linq101Aggregates01/'totalChars@31-1' Linq101Aggregates01/'totalChars@31-1'::@_instance + IL_0167: stloc.s V_33 + IL_0169: ldloc.s V_32 + IL_016b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerable`1 class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::get_Source() + IL_0170: stloc.s V_34 + IL_0172: ldloc.s V_34 + IL_0174: callvirt instance class [netstandard]System.Collections.Generic.IEnumerator`1 class [netstandard]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0179: stloc.s V_35 .try { - IL_017f: ldc.i4.0 - IL_0180: stloc.s V_37 - IL_0182: ldloc.s V_35 - IL_0184: callvirt instance bool [netstandard]System.Collections.IEnumerator::MoveNext() - IL_0189: brfalse.s IL_01a1 + IL_017b: ldc.i4.0 + IL_017c: stloc.s V_37 + IL_017e: ldloc.s V_35 + IL_0180: callvirt instance bool [netstandard]System.Collections.IEnumerator::MoveNext() + IL_0185: brfalse.s IL_019d .line 31,31 : 9,25 '' - IL_018b: ldloc.s V_37 - IL_018d: ldloc.s V_33 - IL_018f: ldloc.s V_35 - IL_0191: callvirt instance !0 class [netstandard]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0196: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) - IL_019b: add.ovf - IL_019c: stloc.s V_37 + IL_0187: ldloc.s V_37 + IL_0189: ldloc.s V_33 + IL_018b: ldloc.s V_35 + IL_018d: callvirt instance !0 class [netstandard]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0192: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0197: add.ovf + IL_0198: stloc.s V_37 .line 100001,100001 : 0,0 '' - IL_019e: nop - IL_019f: br.s IL_0182 + IL_019a: nop + IL_019b: br.s IL_017e - IL_01a1: ldloc.s V_37 - IL_01a3: stloc.s V_36 - IL_01a5: leave.s IL_01c5 + IL_019d: ldloc.s V_37 + IL_019f: stloc.s V_36 + IL_01a1: leave.s IL_01bd } // end .try finally { - IL_01a7: ldloc.s V_35 - IL_01a9: isinst [mscorlib]System.IDisposable - IL_01ae: stloc.s V_38 - IL_01b0: ldloc.s V_38 - IL_01b2: brfalse.s IL_01b6 - - IL_01b4: br.s IL_01b8 - - IL_01b6: br.s IL_01c2 + IL_01a3: ldloc.s V_35 + IL_01a5: isinst [mscorlib]System.IDisposable + IL_01aa: stloc.s V_38 + IL_01ac: ldloc.s V_38 + IL_01ae: brfalse.s IL_01ba .line 100001,100001 : 0,0 '' - IL_01b8: ldloc.s V_38 - IL_01ba: callvirt instance void [netstandard]System.IDisposable::Dispose() - IL_01bf: ldnull - IL_01c0: pop - IL_01c1: endfinally + IL_01b0: ldloc.s V_38 + IL_01b2: callvirt instance void [netstandard]System.IDisposable::Dispose() + IL_01b7: ldnull + IL_01b8: pop + IL_01b9: endfinally .line 100001,100001 : 0,0 '' - IL_01c2: ldnull - IL_01c3: pop - IL_01c4: endfinally + IL_01ba: ldnull + IL_01bb: pop + IL_01bc: endfinally .line 100001,100001 : 0,0 '' } // end handler - IL_01c5: ldloc.s V_36 - IL_01c7: dup - IL_01c8: stsfld int32 ''.$Linq101Aggregates01::totalChars@28 - IL_01cd: stloc.s totalChars + IL_01bd: ldloc.s V_36 + IL_01bf: dup + IL_01c0: stsfld int32 ''.$Linq101Aggregates01::totalChars@28 + IL_01c5: stloc.s totalChars .line 35,35 : 1,32 '' - IL_01cf: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [Utils]Utils::getProductList() - IL_01d4: dup - IL_01d5: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Aggregates01::products@35 - IL_01da: stloc.s products + 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 ''.$Linq101Aggregates01::products@35 + IL_01d2: stloc.s products .line 37,46 : 1,21 '' - IL_01dc: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_01e1: stloc.s V_39 + IL_01d4: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_01d9: stloc.s V_39 + IL_01db: ldloc.s V_39 + IL_01dd: ldloc.s V_39 + IL_01df: ldloc.s V_39 + IL_01e1: ldloc.s V_39 IL_01e3: ldloc.s V_39 - IL_01e5: ldloc.s V_39 - IL_01e7: ldloc.s V_39 - IL_01e9: ldloc.s V_39 - IL_01eb: ldloc.s V_39 - IL_01ed: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() - IL_01f2: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_01f7: ldloc.s V_39 - IL_01f9: newobj instance void Linq101Aggregates01/categories@39::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_01fe: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_01e5: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() + IL_01ea: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_01ef: ldloc.s V_39 + IL_01f1: newobj instance void Linq101Aggregates01/categories@39::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_01f6: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0203: ldsfld class Linq101Aggregates01/'categories@40-1' Linq101Aggregates01/'categories@40-1'::@_instance - IL_0208: ldsfld class Linq101Aggregates01/'categories@40-2' Linq101Aggregates01/'categories@40-2'::@_instance - IL_020d: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_01fb: ldsfld class Linq101Aggregates01/'categories@40-1' Linq101Aggregates01/'categories@40-1'::@_instance + IL_0200: ldsfld class Linq101Aggregates01/'categories@40-2' Linq101Aggregates01/'categories@40-2'::@_instance + IL_0205: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0212: ldloc.s V_39 - IL_0214: newobj instance void Linq101Aggregates01/'categories@40-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_0219: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2,int32>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_020a: ldloc.s V_39 + IL_020c: newobj instance void Linq101Aggregates01/'categories@40-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_0211: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2,int32>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_021e: ldsfld class Linq101Aggregates01/'categories@45-4' Linq101Aggregates01/'categories@45-4'::@_instance - IL_0223: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,int32>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0216: ldsfld class Linq101Aggregates01/'categories@45-4' Linq101Aggregates01/'categories@45-4'::@_instance + IL_021b: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,int32>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0228: 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_022d: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0232: dup - IL_0233: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Aggregates01::categories@37 - IL_0238: stloc.s categories - IL_023a: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_023f: ldnull - IL_0240: ldc.i4.0 - IL_0241: ldc.i4.0 - IL_0242: newobj instance void Linq101Aggregates01/minNum@49::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + IL_0220: 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_0225: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_022a: dup + IL_022b: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Aggregates01::categories@37 + IL_0230: stloc.s categories + IL_0232: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_0237: ldnull + IL_0238: ldc.i4.0 + IL_0239: ldc.i4.0 + IL_023a: newobj instance void Linq101Aggregates01/minNum@49::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, int32, int32) - IL_0247: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_024c: ldsfld class Linq101Aggregates01/'minNum@49-1' Linq101Aggregates01/'minNum@49-1'::@_instance - IL_0251: callvirt instance !!2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::MinBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_023f: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0244: ldsfld class Linq101Aggregates01/'minNum@49-1' Linq101Aggregates01/'minNum@49-1'::@_instance + IL_0249: 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_0256: dup - IL_0257: stsfld int32 ''.$Linq101Aggregates01::minNum@49 - IL_025c: stloc.s minNum - IL_025e: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_0263: ldnull - IL_0264: ldc.i4.0 - IL_0265: ldnull - IL_0266: newobj instance void Linq101Aggregates01/shortestWord@52::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + IL_024e: dup + IL_024f: stsfld int32 ''.$Linq101Aggregates01::minNum@49 + IL_0254: stloc.s minNum + IL_0256: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_025b: ldnull + IL_025c: ldc.i4.0 + IL_025d: ldnull + IL_025e: newobj instance void Linq101Aggregates01/shortestWord@52::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, int32, string) - IL_026b: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0270: ldsfld class Linq101Aggregates01/'shortestWord@52-1' Linq101Aggregates01/'shortestWord@52-1'::@_instance - IL_0275: callvirt instance !!2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::MinBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0263: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0268: ldsfld class Linq101Aggregates01/'shortestWord@52-1' Linq101Aggregates01/'shortestWord@52-1'::@_instance + IL_026d: 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_027a: dup - IL_027b: stsfld int32 ''.$Linq101Aggregates01::shortestWord@52 - IL_0280: stloc.s shortestWord + IL_0272: dup + IL_0273: stsfld int32 ''.$Linq101Aggregates01::shortestWord@52 + IL_0278: stloc.s shortestWord .line 55,61 : 1,21 '' - IL_0282: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_0287: stloc.s V_40 + IL_027a: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_027f: stloc.s V_40 + IL_0281: ldloc.s V_40 + IL_0283: ldloc.s V_40 + IL_0285: ldloc.s V_40 + IL_0287: ldloc.s V_40 IL_0289: ldloc.s V_40 - IL_028b: ldloc.s V_40 - IL_028d: ldloc.s V_40 - IL_028f: ldloc.s V_40 - IL_0291: ldloc.s V_40 - IL_0293: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() - IL_0298: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_029d: ldloc.s V_40 - IL_029f: newobj instance void Linq101Aggregates01/categories2@57::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_02a4: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_028b: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() + IL_0290: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0295: ldloc.s V_40 + IL_0297: newobj instance void Linq101Aggregates01/categories2@57::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_029c: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_02a9: ldsfld class Linq101Aggregates01/'categories2@58-1' Linq101Aggregates01/'categories2@58-1'::@_instance - IL_02ae: ldsfld class Linq101Aggregates01/'categories2@58-2' Linq101Aggregates01/'categories2@58-2'::@_instance - IL_02b3: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_02a1: ldsfld class Linq101Aggregates01/'categories2@58-1' Linq101Aggregates01/'categories2@58-1'::@_instance + IL_02a6: ldsfld class Linq101Aggregates01/'categories2@58-2' Linq101Aggregates01/'categories2@58-2'::@_instance + IL_02ab: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_02b8: ldloc.s V_40 - IL_02ba: newobj instance void Linq101Aggregates01/'categories2@58-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_02bf: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2,valuetype [mscorlib]System.Decimal>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_02b0: ldloc.s V_40 + IL_02b2: newobj instance void Linq101Aggregates01/'categories2@58-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_02b7: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2,valuetype [mscorlib]System.Decimal>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_02c4: ldsfld class Linq101Aggregates01/'categories2@60-4' Linq101Aggregates01/'categories2@60-4'::@_instance - IL_02c9: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,valuetype [mscorlib]System.Decimal>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_02bc: ldsfld class Linq101Aggregates01/'categories2@60-4' Linq101Aggregates01/'categories2@60-4'::@_instance + IL_02c1: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,valuetype [mscorlib]System.Decimal>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_02ce: 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_02d3: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_02d8: dup - IL_02d9: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Aggregates01::categories2@55 - IL_02de: stloc.s categories2 + IL_02c6: 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_02cb: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_02d0: dup + IL_02d1: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Aggregates01::categories2@55 + IL_02d6: stloc.s categories2 .line 64,71 : 1,21 '' - IL_02e0: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_02e5: stloc.s V_41 + IL_02d8: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_02dd: stloc.s V_41 + IL_02df: ldloc.s V_41 + IL_02e1: ldloc.s V_41 + IL_02e3: ldloc.s V_41 + IL_02e5: ldloc.s V_41 IL_02e7: ldloc.s V_41 - IL_02e9: ldloc.s V_41 - IL_02eb: ldloc.s V_41 - IL_02ed: ldloc.s V_41 - IL_02ef: ldloc.s V_41 - IL_02f1: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() - IL_02f6: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_02fb: ldloc.s V_41 - IL_02fd: newobj instance void Linq101Aggregates01/categories3@66::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_0302: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_02e9: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() + IL_02ee: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_02f3: ldloc.s V_41 + IL_02f5: newobj instance void Linq101Aggregates01/categories3@66::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_02fa: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0307: ldsfld class Linq101Aggregates01/'categories3@67-1' Linq101Aggregates01/'categories3@67-1'::@_instance - IL_030c: ldsfld class Linq101Aggregates01/'categories3@67-2' Linq101Aggregates01/'categories3@67-2'::@_instance - IL_0311: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_02ff: ldsfld class Linq101Aggregates01/'categories3@67-1' Linq101Aggregates01/'categories3@67-1'::@_instance + IL_0304: ldsfld class Linq101Aggregates01/'categories3@67-2' Linq101Aggregates01/'categories3@67-2'::@_instance + IL_0309: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0316: ldloc.s V_41 - IL_0318: newobj instance void Linq101Aggregates01/'categories3@67-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_031d: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`3,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_030e: ldloc.s V_41 + IL_0310: newobj instance void Linq101Aggregates01/'categories3@67-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_0315: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`3,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0322: ldsfld class Linq101Aggregates01/'categories3@70-4' Linq101Aggregates01/'categories3@70-4'::@_instance - IL_0327: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_031a: ldsfld class Linq101Aggregates01/'categories3@70-4' Linq101Aggregates01/'categories3@70-4'::@_instance + IL_031f: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_032c: 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_0331: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>>(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0336: dup - IL_0337: stsfld class [mscorlib]System.Tuple`2>[] ''.$Linq101Aggregates01::categories3@64 - IL_033c: stloc.s categories3 - IL_033e: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_0343: ldnull - IL_0344: ldc.i4.0 - IL_0345: ldc.i4.0 - IL_0346: newobj instance void Linq101Aggregates01/maxNum@74::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + IL_0324: 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_0329: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>>(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_032e: dup + IL_032f: stsfld class [mscorlib]System.Tuple`2>[] ''.$Linq101Aggregates01::categories3@64 + IL_0334: stloc.s categories3 + IL_0336: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_033b: ldnull + IL_033c: ldc.i4.0 + IL_033d: ldc.i4.0 + IL_033e: newobj instance void Linq101Aggregates01/maxNum@74::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, int32, int32) - IL_034b: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0350: ldsfld class Linq101Aggregates01/'maxNum@74-1' Linq101Aggregates01/'maxNum@74-1'::@_instance - IL_0355: callvirt instance !!2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::MaxBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0343: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0348: ldsfld class Linq101Aggregates01/'maxNum@74-1' Linq101Aggregates01/'maxNum@74-1'::@_instance + IL_034d: 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_035a: dup - IL_035b: stsfld int32 ''.$Linq101Aggregates01::maxNum@74 - IL_0360: stloc.s maxNum - IL_0362: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_0367: ldnull - IL_0368: ldc.i4.0 - IL_0369: ldnull - IL_036a: newobj instance void Linq101Aggregates01/longestLength@77::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + IL_0352: dup + IL_0353: stsfld int32 ''.$Linq101Aggregates01::maxNum@74 + IL_0358: stloc.s maxNum + IL_035a: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_035f: ldnull + IL_0360: ldc.i4.0 + IL_0361: ldnull + IL_0362: newobj instance void Linq101Aggregates01/longestLength@77::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, int32, string) - IL_036f: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0374: ldsfld class Linq101Aggregates01/'longestLength@77-1' Linq101Aggregates01/'longestLength@77-1'::@_instance - IL_0379: callvirt instance !!2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::MaxBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0367: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_036c: ldsfld class Linq101Aggregates01/'longestLength@77-1' Linq101Aggregates01/'longestLength@77-1'::@_instance + IL_0371: 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_037e: dup - IL_037f: stsfld int32 ''.$Linq101Aggregates01::longestLength@77 - IL_0384: stloc.s longestLength + IL_0376: dup + IL_0377: stsfld int32 ''.$Linq101Aggregates01::longestLength@77 + IL_037c: stloc.s longestLength .line 80,86 : 1,21 '' - IL_0386: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_038b: stloc.s V_42 + IL_037e: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_0383: stloc.s V_42 + IL_0385: ldloc.s V_42 + IL_0387: ldloc.s V_42 + IL_0389: ldloc.s V_42 + IL_038b: ldloc.s V_42 IL_038d: ldloc.s V_42 - IL_038f: ldloc.s V_42 - IL_0391: ldloc.s V_42 - IL_0393: ldloc.s V_42 - IL_0395: ldloc.s V_42 - IL_0397: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() - IL_039c: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_03a1: ldloc.s V_42 - IL_03a3: newobj instance void Linq101Aggregates01/categories4@82::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_03a8: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_038f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() + IL_0394: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0399: ldloc.s V_42 + IL_039b: newobj instance void Linq101Aggregates01/categories4@82::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_03a0: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_03ad: ldsfld class Linq101Aggregates01/'categories4@83-1' Linq101Aggregates01/'categories4@83-1'::@_instance - IL_03b2: ldsfld class Linq101Aggregates01/'categories4@83-2' Linq101Aggregates01/'categories4@83-2'::@_instance - IL_03b7: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_03a5: ldsfld class Linq101Aggregates01/'categories4@83-1' Linq101Aggregates01/'categories4@83-1'::@_instance + IL_03aa: ldsfld class Linq101Aggregates01/'categories4@83-2' Linq101Aggregates01/'categories4@83-2'::@_instance + IL_03af: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_03bc: ldloc.s V_42 - IL_03be: newobj instance void Linq101Aggregates01/'categories4@83-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_03c3: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2,valuetype [mscorlib]System.Decimal>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_03b4: ldloc.s V_42 + IL_03b6: newobj instance void Linq101Aggregates01/'categories4@83-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_03bb: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2,valuetype [mscorlib]System.Decimal>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_03c8: ldsfld class Linq101Aggregates01/'categories4@85-4' Linq101Aggregates01/'categories4@85-4'::@_instance - IL_03cd: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,valuetype [mscorlib]System.Decimal>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_03c0: ldsfld class Linq101Aggregates01/'categories4@85-4' Linq101Aggregates01/'categories4@85-4'::@_instance + IL_03c5: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,valuetype [mscorlib]System.Decimal>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_03d2: 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_03d7: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_03dc: dup - IL_03dd: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Aggregates01::categories4@80 - IL_03e2: stloc.s categories4 + IL_03ca: 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_03cf: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_03d4: dup + IL_03d5: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Aggregates01::categories4@80 + IL_03da: stloc.s categories4 .line 89,96 : 1,21 '' - IL_03e4: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_03e9: stloc.s V_43 + IL_03dc: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_03e1: stloc.s V_43 + IL_03e3: ldloc.s V_43 + IL_03e5: ldloc.s V_43 + IL_03e7: ldloc.s V_43 + IL_03e9: ldloc.s V_43 IL_03eb: ldloc.s V_43 - IL_03ed: ldloc.s V_43 - IL_03ef: ldloc.s V_43 - IL_03f1: ldloc.s V_43 - IL_03f3: ldloc.s V_43 - IL_03f5: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() - IL_03fa: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_03ff: ldloc.s V_43 - IL_0401: newobj instance void Linq101Aggregates01/categories5@91::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_0406: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_03ed: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() + IL_03f2: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_03f7: ldloc.s V_43 + IL_03f9: newobj instance void Linq101Aggregates01/categories5@91::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_03fe: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_040b: ldsfld class Linq101Aggregates01/'categories5@92-1' Linq101Aggregates01/'categories5@92-1'::@_instance - IL_0410: ldsfld class Linq101Aggregates01/'categories5@92-2' Linq101Aggregates01/'categories5@92-2'::@_instance - IL_0415: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0403: ldsfld class Linq101Aggregates01/'categories5@92-1' Linq101Aggregates01/'categories5@92-1'::@_instance + IL_0408: ldsfld class Linq101Aggregates01/'categories5@92-2' Linq101Aggregates01/'categories5@92-2'::@_instance + IL_040d: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_041a: ldloc.s V_43 - IL_041c: newobj instance void Linq101Aggregates01/'categories5@92-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_0421: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`3,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0412: ldloc.s V_43 + IL_0414: newobj instance void Linq101Aggregates01/'categories5@92-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_0419: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`3,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0426: ldsfld class Linq101Aggregates01/'categories5@95-4' Linq101Aggregates01/'categories5@95-4'::@_instance - IL_042b: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_041e: ldsfld class Linq101Aggregates01/'categories5@95-4' Linq101Aggregates01/'categories5@95-4'::@_instance + IL_0423: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,valuetype [mscorlib]System.Decimal,class [mscorlib]System.Collections.Generic.IEnumerable`1>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0430: 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_0435: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>>(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_043a: dup - IL_043b: stsfld class [mscorlib]System.Tuple`2>[] ''.$Linq101Aggregates01::categories5@89 - IL_0440: stloc.s categories5 + IL_0428: 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_042d: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>>(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0432: dup + IL_0433: stsfld class [mscorlib]System.Tuple`2>[] ''.$Linq101Aggregates01::categories5@89 + IL_0438: stloc.s categories5 .line 99,99 : 1,66 '' - IL_0442: ldc.r8 5. - IL_044b: ldc.r8 4. - IL_0454: ldc.r8 1. - IL_045d: ldc.r8 3. - IL_0466: ldc.r8 9. - IL_046f: ldc.r8 8. - IL_0478: ldc.r8 6. - IL_0481: ldc.r8 7. - IL_048a: ldc.r8 2. - IL_0493: ldc.r8 0.0 - IL_049c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() - IL_04a1: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_043a: ldc.r8 5. + IL_0443: ldc.r8 4. + IL_044c: ldc.r8 1. + IL_0455: ldc.r8 3. + IL_045e: ldc.r8 9. + IL_0467: ldc.r8 8. + IL_0470: ldc.r8 6. + IL_0479: ldc.r8 7. + IL_0482: ldc.r8 2. + IL_048b: ldc.r8 0.0 + IL_0494: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() + IL_0499: 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_04a6: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_049e: 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_04ab: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_04a3: 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_04b0: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_04a8: 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_04b5: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_04ad: 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_04ba: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_04b2: 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_04bf: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_04b7: 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_04c4: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_04bc: 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_04c9: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_04c1: 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_04ce: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_04c6: 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_04d3: dup - IL_04d4: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Aggregates01::numbers2@99 - IL_04d9: stloc.s numbers2 - IL_04db: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_04e0: stloc.s V_44 - IL_04e2: ldloc.s V_44 - IL_04e4: stloc.s V_45 - IL_04e6: ldnull - IL_04e7: ldc.i4.0 - IL_04e8: ldc.r8 0.0 - IL_04f1: newobj instance void Linq101Aggregates01/averageNum@100::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, + IL_04cb: dup + IL_04cc: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Aggregates01::numbers2@99 + IL_04d1: stloc.s numbers2 + IL_04d3: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_04d8: stloc.s V_44 + IL_04da: ldloc.s V_44 + IL_04dc: stloc.s V_45 + IL_04de: ldnull + IL_04df: ldc.i4.0 + IL_04e0: ldc.r8 0.0 + IL_04e9: newobj instance void Linq101Aggregates01/averageNum@100::.ctor(class [mscorlib]System.Collections.Generic.IEnumerator`1, int32, float64) - IL_04f6: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_04fb: stloc.s V_46 - IL_04fd: ldsfld class Linq101Aggregates01/'averageNum@100-1' Linq101Aggregates01/'averageNum@100-1'::@_instance - IL_0502: stloc.s V_47 - IL_0504: ldloc.s V_46 - IL_0506: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerable`1 class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::get_Source() - IL_050b: stloc.s V_48 - IL_050d: ldloc.s V_48 - IL_050f: box class [mscorlib]System.Collections.Generic.IEnumerable`1 - IL_0514: brfalse.s IL_0518 - - IL_0516: br.s IL_0523 + IL_04ee: newobj instance void class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::.ctor(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_04f3: stloc.s V_46 + IL_04f5: ldsfld class Linq101Aggregates01/'averageNum@100-1' Linq101Aggregates01/'averageNum@100-1'::@_instance + IL_04fa: stloc.s V_47 + IL_04fc: ldloc.s V_46 + IL_04fe: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerable`1 class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2::get_Source() + IL_0503: stloc.s V_48 + IL_0505: ldloc.s V_48 + IL_0507: box class [mscorlib]System.Collections.Generic.IEnumerable`1 + IL_050c: brfalse.s IL_0510 + + IL_050e: br.s IL_051b .line 100001,100001 : 0,0 '' - IL_0518: ldstr "source" - IL_051d: newobj instance void [netstandard]System.ArgumentNullException::.ctor(string) - IL_0522: throw + IL_0510: ldstr "source" + IL_0515: newobj instance void [netstandard]System.ArgumentNullException::.ctor(string) + IL_051a: throw .line 100001,100001 : 0,0 '' - IL_0523: nop - IL_0524: ldloc.s V_48 - IL_0526: callvirt instance class [netstandard]System.Collections.Generic.IEnumerator`1 class [netstandard]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_052b: stloc.s V_49 + IL_051b: nop + IL_051c: ldloc.s V_48 + IL_051e: callvirt instance class [netstandard]System.Collections.Generic.IEnumerator`1 class [netstandard]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0523: stloc.s V_49 .try { - IL_052d: ldc.r8 0.0 - IL_0536: stloc.s V_51 - IL_0538: ldc.i4.0 - IL_0539: stloc.s V_52 - IL_053b: ldloc.s V_49 - IL_053d: callvirt instance bool [netstandard]System.Collections.IEnumerator::MoveNext() - IL_0542: brfalse.s IL_0560 - - IL_0544: ldloc.s V_51 - IL_0546: ldloc.s V_47 - IL_0548: ldloc.s V_49 - IL_054a: callvirt instance !0 class [netstandard]System.Collections.Generic.IEnumerator`1::get_Current() - IL_054f: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) - IL_0554: add - IL_0555: stloc.s V_51 + IL_0525: ldc.r8 0.0 + IL_052e: stloc.s V_51 + IL_0530: ldc.i4.0 + IL_0531: stloc.s V_52 + IL_0533: ldloc.s V_49 + IL_0535: callvirt instance bool [netstandard]System.Collections.IEnumerator::MoveNext() + IL_053a: brfalse.s IL_0558 + + IL_053c: ldloc.s V_51 + IL_053e: ldloc.s V_47 + IL_0540: ldloc.s V_49 + IL_0542: callvirt instance !0 class [netstandard]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0547: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_054c: add + IL_054d: stloc.s V_51 .line 100,100 : 47,58 '' - IL_0557: ldloc.s V_52 - IL_0559: ldc.i4.1 - IL_055a: add - IL_055b: stloc.s V_52 + IL_054f: ldloc.s V_52 + IL_0551: ldc.i4.1 + IL_0552: add + IL_0553: stloc.s V_52 .line 100001,100001 : 0,0 '' - IL_055d: nop - IL_055e: br.s IL_053b + IL_0555: nop + IL_0556: br.s IL_0533 - IL_0560: ldloc.s V_52 - IL_0562: brtrue.s IL_0566 - - IL_0564: br.s IL_0568 - - IL_0566: br.s IL_0573 + IL_0558: ldloc.s V_52 + IL_055a: brtrue.s IL_0567 .line 100001,100001 : 0,0 '' - IL_0568: ldstr "source" - IL_056d: newobj instance void [netstandard]System.InvalidOperationException::.ctor(string) - IL_0572: throw + IL_055c: ldstr "source" + IL_0561: newobj instance void [netstandard]System.InvalidOperationException::.ctor(string) + IL_0566: throw .line 100001,100001 : 0,0 '' - IL_0573: nop - IL_0574: ldloc.s V_51 - IL_0576: stloc.s V_53 - IL_0578: ldloc.s V_52 - IL_057a: stloc.s V_54 - IL_057c: ldloc.s V_53 - IL_057e: ldloc.s V_54 - IL_0580: conv.r8 - IL_0581: div - IL_0582: stloc.s V_50 - IL_0584: leave.s IL_05a4 + IL_0567: nop + IL_0568: ldloc.s V_51 + IL_056a: stloc.s V_53 + IL_056c: ldloc.s V_52 + IL_056e: stloc.s V_54 + IL_0570: ldloc.s V_53 + IL_0572: ldloc.s V_54 + IL_0574: conv.r8 + IL_0575: div + IL_0576: stloc.s V_50 + IL_0578: leave.s IL_0594 } // end .try finally { - IL_0586: ldloc.s V_49 - IL_0588: isinst [mscorlib]System.IDisposable - IL_058d: stloc.s V_55 - IL_058f: ldloc.s V_55 - IL_0591: brfalse.s IL_0595 - - IL_0593: br.s IL_0597 - - IL_0595: br.s IL_05a1 + IL_057a: ldloc.s V_49 + IL_057c: isinst [mscorlib]System.IDisposable + IL_0581: stloc.s V_55 + IL_0583: ldloc.s V_55 + IL_0585: brfalse.s IL_0591 .line 100001,100001 : 0,0 '' - IL_0597: ldloc.s V_55 - IL_0599: callvirt instance void [netstandard]System.IDisposable::Dispose() - IL_059e: ldnull - IL_059f: pop - IL_05a0: endfinally + IL_0587: ldloc.s V_55 + IL_0589: callvirt instance void [netstandard]System.IDisposable::Dispose() + IL_058e: ldnull + IL_058f: pop + IL_0590: endfinally .line 100001,100001 : 0,0 '' - IL_05a1: ldnull - IL_05a2: pop - IL_05a3: endfinally + IL_0591: ldnull + IL_0592: pop + IL_0593: endfinally .line 100001,100001 : 0,0 '' } // end handler - IL_05a4: ldloc.s V_50 - IL_05a6: dup - IL_05a7: stsfld float64 ''.$Linq101Aggregates01::averageNum@100 - IL_05ac: stloc.s averageNum - IL_05ae: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_05b3: stloc.s V_56 - IL_05b5: ldloc.s V_56 - IL_05b7: stloc.s V_57 - IL_05b9: ldloc.s V_56 - IL_05bb: ldloc.s V_56 - IL_05bd: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_words() - IL_05c2: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_05c7: ldloc.s V_56 - IL_05c9: newobj instance void Linq101Aggregates01/averageLength@105::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_05ce: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0594: ldloc.s V_50 + IL_0596: dup + IL_0597: stsfld float64 ''.$Linq101Aggregates01::averageNum@100 + IL_059c: stloc.s averageNum + IL_059e: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_05a3: stloc.s V_56 + IL_05a5: ldloc.s V_56 + IL_05a7: stloc.s V_57 + IL_05a9: ldloc.s V_56 + IL_05ab: ldloc.s V_56 + IL_05ad: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_words() + IL_05b2: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_05b7: ldloc.s V_56 + IL_05b9: newobj instance void Linq101Aggregates01/averageLength@105::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_05be: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_05d3: stloc.s V_58 - IL_05d5: ldsfld class Linq101Aggregates01/'averageLength@107-1' Linq101Aggregates01/'averageLength@107-1'::@_instance - IL_05da: stloc.s V_59 - IL_05dc: ldloc.s V_58 - IL_05de: 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_05e3: stloc.s V_60 - IL_05e5: ldloc.s V_60 - IL_05e7: box class [mscorlib]System.Collections.Generic.IEnumerable`1> - IL_05ec: brfalse.s IL_05f0 - - IL_05ee: br.s IL_05fb + IL_05c3: stloc.s V_58 + IL_05c5: ldsfld class Linq101Aggregates01/'averageLength@107-1' Linq101Aggregates01/'averageLength@107-1'::@_instance + IL_05ca: stloc.s V_59 + IL_05cc: ldloc.s V_58 + IL_05ce: 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_05d3: stloc.s V_60 + IL_05d5: ldloc.s V_60 + IL_05d7: box class [mscorlib]System.Collections.Generic.IEnumerable`1> + IL_05dc: brfalse.s IL_05e0 + + IL_05de: br.s IL_05eb .line 100001,100001 : 0,0 '' - IL_05f0: ldstr "source" - IL_05f5: newobj instance void [netstandard]System.ArgumentNullException::.ctor(string) - IL_05fa: throw + IL_05e0: ldstr "source" + IL_05e5: newobj instance void [netstandard]System.ArgumentNullException::.ctor(string) + IL_05ea: throw .line 100001,100001 : 0,0 '' - IL_05fb: nop - IL_05fc: ldloc.s V_60 - IL_05fe: callvirt instance class [netstandard]System.Collections.Generic.IEnumerator`1 class [netstandard]System.Collections.Generic.IEnumerable`1>::GetEnumerator() - IL_0603: stloc.s V_61 + IL_05eb: nop + IL_05ec: ldloc.s V_60 + IL_05ee: callvirt instance class [netstandard]System.Collections.Generic.IEnumerator`1 class [netstandard]System.Collections.Generic.IEnumerable`1>::GetEnumerator() + IL_05f3: stloc.s V_61 .try { - IL_0605: ldc.r8 0.0 - IL_060e: stloc.s V_63 - IL_0610: ldc.i4.0 - IL_0611: stloc.s V_64 - IL_0613: ldloc.s V_61 - IL_0615: callvirt instance bool [netstandard]System.Collections.IEnumerator::MoveNext() - IL_061a: brfalse.s IL_0638 - - IL_061c: ldloc.s V_63 - IL_061e: ldloc.s V_59 - IL_0620: ldloc.s V_61 - IL_0622: callvirt instance !0 class [netstandard]System.Collections.Generic.IEnumerator`1>::get_Current() - IL_0627: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,float64>::Invoke(!0) - IL_062c: add - IL_062d: stloc.s V_63 + IL_05f5: ldc.r8 0.0 + IL_05fe: stloc.s V_63 + IL_0600: ldc.i4.0 + IL_0601: stloc.s V_64 + IL_0603: ldloc.s V_61 + IL_0605: callvirt instance bool [netstandard]System.Collections.IEnumerator::MoveNext() + IL_060a: brfalse.s IL_0628 + + IL_060c: ldloc.s V_63 + IL_060e: ldloc.s V_59 + IL_0610: ldloc.s V_61 + IL_0612: callvirt instance !0 class [netstandard]System.Collections.Generic.IEnumerator`1>::get_Current() + IL_0617: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,float64>::Invoke(!0) + IL_061c: add + IL_061d: stloc.s V_63 .line 107,107 : 9,21 '' - IL_062f: ldloc.s V_64 - IL_0631: ldc.i4.1 - IL_0632: add - IL_0633: stloc.s V_64 + IL_061f: ldloc.s V_64 + IL_0621: ldc.i4.1 + IL_0622: add + IL_0623: stloc.s V_64 .line 100001,100001 : 0,0 '' - IL_0635: nop - IL_0636: br.s IL_0613 + IL_0625: nop + IL_0626: br.s IL_0603 - IL_0638: ldloc.s V_64 - IL_063a: brtrue.s IL_063e - - IL_063c: br.s IL_0640 - - IL_063e: br.s IL_064b + IL_0628: ldloc.s V_64 + IL_062a: brtrue.s IL_0637 .line 100001,100001 : 0,0 '' - IL_0640: ldstr "source" - IL_0645: newobj instance void [netstandard]System.InvalidOperationException::.ctor(string) - IL_064a: throw + IL_062c: ldstr "source" + IL_0631: newobj instance void [netstandard]System.InvalidOperationException::.ctor(string) + IL_0636: throw .line 100001,100001 : 0,0 '' - IL_064b: nop - IL_064c: ldloc.s V_63 - IL_064e: stloc.s V_65 - IL_0650: ldloc.s V_64 - IL_0652: stloc.s V_66 - IL_0654: ldloc.s V_65 - IL_0656: ldloc.s V_66 - IL_0658: conv.r8 - IL_0659: div - IL_065a: stloc.s V_62 - IL_065c: leave.s IL_067c + IL_0637: nop + IL_0638: ldloc.s V_63 + IL_063a: stloc.s V_65 + IL_063c: ldloc.s V_64 + IL_063e: stloc.s V_66 + IL_0640: ldloc.s V_65 + IL_0642: ldloc.s V_66 + IL_0644: conv.r8 + IL_0645: div + IL_0646: stloc.s V_62 + IL_0648: leave.s IL_0664 } // end .try finally { - IL_065e: ldloc.s V_61 - IL_0660: isinst [mscorlib]System.IDisposable - IL_0665: stloc.s V_67 - IL_0667: ldloc.s V_67 - IL_0669: brfalse.s IL_066d - - IL_066b: br.s IL_066f - - IL_066d: br.s IL_0679 + IL_064a: ldloc.s V_61 + IL_064c: isinst [mscorlib]System.IDisposable + IL_0651: stloc.s V_67 + IL_0653: ldloc.s V_67 + IL_0655: brfalse.s IL_0661 .line 100001,100001 : 0,0 '' - IL_066f: ldloc.s V_67 - IL_0671: callvirt instance void [netstandard]System.IDisposable::Dispose() - IL_0676: ldnull - IL_0677: pop - IL_0678: endfinally + IL_0657: ldloc.s V_67 + IL_0659: callvirt instance void [netstandard]System.IDisposable::Dispose() + IL_065e: ldnull + IL_065f: pop + IL_0660: endfinally .line 100001,100001 : 0,0 '' - IL_0679: ldnull - IL_067a: pop - IL_067b: endfinally + IL_0661: ldnull + IL_0662: pop + IL_0663: endfinally .line 100001,100001 : 0,0 '' } // end handler - IL_067c: ldloc.s V_62 - IL_067e: dup - IL_067f: stsfld float64 ''.$Linq101Aggregates01::averageLength@103 - IL_0684: stloc.s averageLength + IL_0664: ldloc.s V_62 + IL_0666: dup + IL_0667: stsfld float64 ''.$Linq101Aggregates01::averageLength@103 + IL_066c: stloc.s averageLength .line 111,117 : 1,21 '' - IL_0686: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_068b: stloc.s V_68 - IL_068d: ldloc.s V_68 - IL_068f: ldloc.s V_68 - IL_0691: ldloc.s V_68 - IL_0693: ldloc.s V_68 - IL_0695: ldloc.s V_68 - IL_0697: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() - IL_069c: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_06a1: ldloc.s V_68 - IL_06a3: newobj instance void Linq101Aggregates01/categories6@113::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_06a8: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_066e: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_0673: stloc.s V_68 + IL_0675: ldloc.s V_68 + IL_0677: ldloc.s V_68 + IL_0679: ldloc.s V_68 + IL_067b: ldloc.s V_68 + IL_067d: ldloc.s V_68 + IL_067f: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Aggregates01::get_products() + IL_0684: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0689: ldloc.s V_68 + IL_068b: newobj instance void Linq101Aggregates01/categories6@113::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_0690: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_06ad: ldsfld class Linq101Aggregates01/'categories6@114-1' Linq101Aggregates01/'categories6@114-1'::@_instance - IL_06b2: ldsfld class Linq101Aggregates01/'categories6@114-2' Linq101Aggregates01/'categories6@114-2'::@_instance - IL_06b7: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0695: ldsfld class Linq101Aggregates01/'categories6@114-1' Linq101Aggregates01/'categories6@114-1'::@_instance + IL_069a: ldsfld class Linq101Aggregates01/'categories6@114-2' Linq101Aggregates01/'categories6@114-2'::@_instance + IL_069f: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2,!!3> [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::GroupValBy(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_06bc: ldloc.s V_68 - IL_06be: newobj instance void Linq101Aggregates01/'categories6@114-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_06c3: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2,valuetype [mscorlib]System.Decimal>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_06a4: ldloc.s V_68 + IL_06a6: newobj instance void Linq101Aggregates01/'categories6@114-3'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_06ab: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2,valuetype [mscorlib]System.Decimal>,object>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_06c8: ldsfld class Linq101Aggregates01/'categories6@116-4' Linq101Aggregates01/'categories6@116-4'::@_instance - IL_06cd: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,valuetype [mscorlib]System.Decimal>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_06b0: ldsfld class Linq101Aggregates01/'categories6@116-4' Linq101Aggregates01/'categories6@116-4'::@_instance + IL_06b5: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,valuetype [mscorlib]System.Decimal>,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_06d2: 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_06d7: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_06dc: dup - IL_06dd: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Aggregates01::categories6@111 - IL_06e2: stloc.s categories6 - IL_06e4: ret + IL_06ba: 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_06bf: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_06c4: dup + IL_06c5: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Aggregates01::categories6@111 + IL_06ca: stloc.s categories6 + IL_06cc: ret } // end of method $Linq101Aggregates01::main@ } // end of class ''.$Linq101Aggregates01 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101ElementOperators01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101ElementOperators01.il.bsl index d39512533d5..02306b555d2 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101ElementOperators01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101ElementOperators01.il.bsl @@ -45,13 +45,13 @@ // Offset: 0x00000388 Length: 0x00000127 } .module Linq101ElementOperators01.exe -// MVID: {5FCFFD0D-19D7-C20D-A745-03830DFDCF5F} +// MVID: {60B78A59-19D7-C20D-A745-0383598AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05A30000 +// Image base: 0x09100000 // =============== CLASS MEMBERS DECLARATION =================== @@ -100,7 +100,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [Utils]Utils/Product V_0, [1] class [Utils]Utils/Product p) @@ -112,90 +112,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 12,12 : 9,29 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101ElementOperators01::get_products() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101ElementOperators01/products12@12::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101ElementOperators01::get_products() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101ElementOperators01/products12@12::pc .line 12,12 : 9,29 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 12,12 : 9,29 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101ElementOperators01/products12@12::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 13,13 : 9,33 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld class [Utils]Utils/Product Linq101ElementOperators01/products12@12::current - IL_006b: ldc.i4.1 - IL_006c: ret - - .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 - - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101ElementOperators01/products12@12::pc + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101ElementOperators01/products12@12::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld class [Utils]Utils/Product Linq101ElementOperators01/products12@12::current + IL_0065: ldc.i4.1 + IL_0066: ret + + .line 100001,100001 : 0,0 '' + IL_0067: nop + IL_0068: br.s IL_003c + + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101ElementOperators01/products12@12::pc .line 12,12 : 9,29 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101ElementOperators01/products12@12::pc - IL_0091: ldarg.0 - IL_0092: ldnull - IL_0093: stfld class [Utils]Utils/Product Linq101ElementOperators01/products12@12::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101ElementOperators01/products12@12::pc + IL_008b: ldarg.0 + IL_008c: ldnull + IL_008d: stfld class [Utils]Utils/Product Linq101ElementOperators01/products12@12::current + IL_0092: ldc.i4.0 + IL_0093: ret } // end of method products12@12::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -207,158 +201,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101ElementOperators01/products12@12::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101ElementOperators01/products12@12::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101ElementOperators01/products12@12::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101ElementOperators01/products12@12::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/products12@12::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101ElementOperators01/products12@12::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld class [Utils]Utils/Product Linq101ElementOperators01/products12@12::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101ElementOperators01/products12@12::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld class [Utils]Utils/Product Linq101ElementOperators01/products12@12::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 12,12 : 9,29 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f + IL_0076: nop + IL_0077: br IL_0000 - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method products12@12::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101ElementOperators01/products12@12::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method products12@12::get_CheckClose .method public strict virtual instance class [Utils]Utils/Product @@ -472,7 +446,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] string V_0, [1] string s) @@ -483,90 +457,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 22,22 : 9,28 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101ElementOperators01::get_strings() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101ElementOperators01/startsWithO@22::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101ElementOperators01::get_strings() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101ElementOperators01/startsWithO@22::pc .line 22,22 : 9,28 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 22,22 : 9,28 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101ElementOperators01/startsWithO@22::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 23,23 : 9,28 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld string Linq101ElementOperators01/startsWithO@22::current - IL_006b: ldc.i4.1 - IL_006c: ret - - .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 - - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101ElementOperators01/startsWithO@22::pc + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101ElementOperators01/startsWithO@22::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld string Linq101ElementOperators01/startsWithO@22::current + IL_0065: ldc.i4.1 + IL_0066: ret + + .line 100001,100001 : 0,0 '' + IL_0067: nop + IL_0068: br.s IL_003c + + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101ElementOperators01/startsWithO@22::pc .line 22,22 : 9,28 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101ElementOperators01/startsWithO@22::pc - IL_0091: ldarg.0 - IL_0092: ldnull - IL_0093: stfld string Linq101ElementOperators01/startsWithO@22::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101ElementOperators01/startsWithO@22::pc + IL_008b: ldarg.0 + IL_008c: ldnull + IL_008d: stfld string Linq101ElementOperators01/startsWithO@22::current + IL_0092: ldc.i4.0 + IL_0093: ret } // end of method startsWithO@22::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -578,158 +546,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101ElementOperators01/startsWithO@22::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101ElementOperators01/startsWithO@22::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101ElementOperators01/startsWithO@22::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101ElementOperators01/startsWithO@22::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/startsWithO@22::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101ElementOperators01/startsWithO@22::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld string Linq101ElementOperators01/startsWithO@22::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101ElementOperators01/startsWithO@22::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld string Linq101ElementOperators01/startsWithO@22::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 22,22 : 9,28 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 + IL_0076: nop + IL_0077: br IL_0000 - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method startsWithO@22::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101ElementOperators01/startsWithO@22::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method startsWithO@22::get_CheckClose .method public strict virtual instance string @@ -844,7 +792,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -855,90 +803,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 31,31 : 9,28 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101ElementOperators01::get_numbers() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101ElementOperators01::get_numbers() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc .line 31,31 : 9,28 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 31,31 : 9,28 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 32,32 : 9,22 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::current - IL_006b: ldc.i4.1 - IL_006c: ret - - .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 - - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::current + IL_0065: ldc.i4.1 + IL_0066: ret + + .line 100001,100001 : 0,0 '' + IL_0067: nop + IL_0068: br.s IL_003c + + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc .line 31,31 : 9,28 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc - IL_0091: ldarg.0 + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc + IL_008b: ldarg.0 + IL_008c: ldc.i4.0 + IL_008d: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::current IL_0092: ldc.i4.0 - IL_0093: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0093: ret } // end of method firstNumOrDefault@31::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -950,158 +892,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/firstNumOrDefault@31::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc - IL_0068: ldarg.0 - IL_0069: ldc.i4.0 - IL_006a: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc + IL_005d: ldarg.0 + IL_005e: ldc.i4.0 + IL_005f: stfld int32 Linq101ElementOperators01/firstNumOrDefault@31::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 31,31 : 9,28 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f + IL_0076: nop + IL_0077: br IL_0000 - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method firstNumOrDefault@31::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101ElementOperators01/firstNumOrDefault@31::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method firstNumOrDefault@31::get_CheckClose .method public strict virtual instance int32 @@ -1174,7 +1096,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -1185,90 +1107,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 52,52 : 9,29 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101ElementOperators01::get_numbers2() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101ElementOperators01::get_numbers2() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc .line 52,52 : 9,29 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 52,52 : 9,29 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 53,53 : 9,22 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld int32 Linq101ElementOperators01/fourthLowNum@52::current - IL_006b: ldc.i4.1 - IL_006c: ret - - .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 - - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld int32 Linq101ElementOperators01/fourthLowNum@52::current + IL_0065: ldc.i4.1 + IL_0066: ret + + .line 100001,100001 : 0,0 '' + IL_0067: nop + IL_0068: br.s IL_003c + + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc .line 52,52 : 9,29 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc - IL_0091: ldarg.0 + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc + IL_008b: ldarg.0 + IL_008c: ldc.i4.0 + IL_008d: stfld int32 Linq101ElementOperators01/fourthLowNum@52::current IL_0092: ldc.i4.0 - IL_0093: stfld int32 Linq101ElementOperators01/fourthLowNum@52::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0093: ret } // end of method fourthLowNum@52::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -1280,158 +1196,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101ElementOperators01/fourthLowNum@52::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101ElementOperators01/fourthLowNum@52::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101ElementOperators01/fourthLowNum@52::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc - IL_0068: ldarg.0 - IL_0069: ldc.i4.0 - IL_006a: stfld int32 Linq101ElementOperators01/fourthLowNum@52::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101ElementOperators01/fourthLowNum@52::pc + IL_005d: ldarg.0 + IL_005e: ldc.i4.0 + IL_005f: stfld int32 Linq101ElementOperators01/fourthLowNum@52::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 52,52 : 9,29 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f + IL_0076: nop + IL_0077: br IL_0000 - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method fourthLowNum@52::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101ElementOperators01/fourthLowNum@52::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method fourthLowNum@52::get_CheckClose .method public strict virtual instance int32 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Grouping01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Grouping01.il.bsl index 6ef60480015..e5bad87d725 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Grouping01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Grouping01.il.bsl @@ -50,13 +50,13 @@ // Offset: 0x00000408 Length: 0x00000129 } .module Linq101Grouping01.exe -// MVID: {5FCFFD0D-FB79-E5BF-A745-03830DFDCF5F} +// MVID: {60B78A59-FB79-E5BF-A745-0383598AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07010000 +// Image base: 0x06730000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Joins01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Joins01.il.bsl index a0065a9e340..7078d4c3e68 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Joins01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Joins01.il.bsl @@ -45,13 +45,13 @@ // Offset: 0x00000310 Length: 0x000000C3 } .module Linq101Joins01.exe -// MVID: {5FCFFD0D-151B-685E-A745-03830DFDCF5F} +// MVID: {60B78A59-151B-685E-A745-0383598AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00DF0000 +// Image base: 0x06AF0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -955,7 +955,7 @@ .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 69 (0x45) + // Code size 65 (0x41) .maxstack 9 .locals init ([0] class [Utils]Utils/Product p, [1] string t) @@ -968,41 +968,37 @@ IL_0008: ldnull IL_0009: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/HashCompare::GenericEqualityIntrinsic(!!0, !!0) - IL_000e: brfalse.s IL_0012 - - IL_0010: br.s IL_0014 - - IL_0012: br.s IL_001c + IL_000e: brfalse.s IL_0018 .line 41,41 : 40,55 '' - IL_0014: ldstr "(No products)" + IL_0010: ldstr "(No products)" .line 100001,100001 : 0,0 '' - IL_0019: nop - IL_001a: br.s IL_0023 + IL_0015: nop + IL_0016: br.s IL_001f .line 41,41 : 61,74 '' - IL_001c: ldloc.0 - IL_001d: callvirt instance string [Utils]Utils/Product::get_ProductName() + IL_0018: ldloc.0 + IL_0019: callvirt instance string [Utils]Utils/Product::get_ProductName() .line 100001,100001 : 0,0 '' - IL_0022: nop + IL_001e: nop .line 100001,100001 : 0,0 '' - IL_0023: stloc.1 + IL_001f: stloc.1 .line 42,42 : 9,22 '' - IL_0024: ldarg.0 - IL_0025: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Joins01/'q4@40-4'::builder@ - IL_002a: ldarg.0 - IL_002b: ldfld string Linq101Joins01/'q4@40-4'::c - IL_0030: ldarg.0 - IL_0031: ldfld class [mscorlib]System.Collections.Generic.IEnumerable`1 Linq101Joins01/'q4@40-4'::ps - IL_0036: ldloc.0 - IL_0037: ldloc.1 - IL_0038: newobj instance void class [mscorlib]System.Tuple`4,class [Utils]Utils/Product,string>::.ctor(!0, + IL_0020: ldarg.0 + IL_0021: ldfld class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder Linq101Joins01/'q4@40-4'::builder@ + IL_0026: ldarg.0 + IL_0027: ldfld string Linq101Joins01/'q4@40-4'::c + IL_002c: ldarg.0 + IL_002d: ldfld class [mscorlib]System.Collections.Generic.IEnumerable`1 Linq101Joins01/'q4@40-4'::ps + IL_0032: ldloc.0 + IL_0033: ldloc.1 + IL_0034: newobj instance void class [mscorlib]System.Tuple`4,class [Utils]Utils/Product,string>::.ctor(!0, !1, !2, !3) - IL_003d: tail. - IL_003f: 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_0044: ret + IL_0039: tail. + IL_003b: 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_0040: ret } // end of method 'q4@40-4'::Invoke } // end of class 'q4@40-4' diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Ordering01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Ordering01.il.bsl index d4afecd4237..abcadfd0493 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Ordering01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Ordering01.il.bsl @@ -40,13 +40,13 @@ // Offset: 0x000003B8 Length: 0x00000134 } .module Linq101Ordering01.exe -// MVID: {5FCFFD0D-649A-6956-A745-03830DFDCF5F} +// MVID: {60B78A59-649A-6956-A745-0383598AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06F50000 +// Image base: 0x09540000 // =============== CLASS MEMBERS DECLARATION =================== @@ -95,7 +95,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] string V_0, [1] string w) @@ -107,90 +107,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 11,11 : 9,26 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Ordering01::get_words() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101Ordering01/sortedWords@11::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Ordering01::get_words() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101Ordering01/sortedWords@11::pc .line 11,11 : 9,26 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 11,11 : 9,26 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101Ordering01/sortedWords@11::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 12,12 : 9,17 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld string Linq101Ordering01/sortedWords@11::current - IL_006b: ldc.i4.1 - IL_006c: ret - - .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 - - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101Ordering01/sortedWords@11::pc + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101Ordering01/sortedWords@11::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld string Linq101Ordering01/sortedWords@11::current + IL_0065: ldc.i4.1 + IL_0066: ret + + .line 100001,100001 : 0,0 '' + IL_0067: nop + IL_0068: br.s IL_003c + + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101Ordering01/sortedWords@11::pc .line 11,11 : 9,26 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101Ordering01/sortedWords@11::pc - IL_0091: ldarg.0 - IL_0092: ldnull - IL_0093: stfld string Linq101Ordering01/sortedWords@11::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101Ordering01/sortedWords@11::pc + IL_008b: ldarg.0 + IL_008c: ldnull + IL_008d: stfld string Linq101Ordering01/sortedWords@11::current + IL_0092: ldc.i4.0 + IL_0093: ret } // end of method sortedWords@11::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -202,158 +196,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Ordering01/sortedWords@11::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Ordering01/sortedWords@11::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Ordering01/sortedWords@11::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Ordering01/sortedWords@11::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords@11::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Ordering01/sortedWords@11::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld string Linq101Ordering01/sortedWords@11::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Ordering01/sortedWords@11::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld string Linq101Ordering01/sortedWords@11::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 11,11 : 9,26 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f + IL_0076: nop + IL_0077: br IL_0000 - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method sortedWords@11::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Ordering01/sortedWords@11::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method sortedWords@11::get_CheckClose .method public strict virtual instance string @@ -464,7 +438,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] string V_0, [1] string w) @@ -475,90 +449,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 18,18 : 9,26 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Ordering01::get_words() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101Ordering01/sortedWords2@18::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Ordering01::get_words() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101Ordering01/sortedWords2@18::pc .line 18,18 : 9,26 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 18,18 : 9,26 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101Ordering01/sortedWords2@18::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 19,19 : 9,26 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld string Linq101Ordering01/sortedWords2@18::current - IL_006b: ldc.i4.1 - IL_006c: ret - - .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 - - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101Ordering01/sortedWords2@18::pc + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101Ordering01/sortedWords2@18::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld string Linq101Ordering01/sortedWords2@18::current + IL_0065: ldc.i4.1 + IL_0066: ret + + .line 100001,100001 : 0,0 '' + IL_0067: nop + IL_0068: br.s IL_003c + + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101Ordering01/sortedWords2@18::pc .line 18,18 : 9,26 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101Ordering01/sortedWords2@18::pc - IL_0091: ldarg.0 - IL_0092: ldnull - IL_0093: stfld string Linq101Ordering01/sortedWords2@18::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101Ordering01/sortedWords2@18::pc + IL_008b: ldarg.0 + IL_008c: ldnull + IL_008d: stfld string Linq101Ordering01/sortedWords2@18::current + IL_0092: ldc.i4.0 + IL_0093: ret } // end of method sortedWords2@18::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -570,158 +538,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Ordering01/sortedWords2@18::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Ordering01/sortedWords2@18::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Ordering01/sortedWords2@18::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Ordering01/sortedWords2@18::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedWords2@18::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Ordering01/sortedWords2@18::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld string Linq101Ordering01/sortedWords2@18::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Ordering01/sortedWords2@18::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld string Linq101Ordering01/sortedWords2@18::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 18,18 : 9,26 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f + IL_0076: nop + IL_0077: br IL_0000 - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method sortedWords2@18::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Ordering01/sortedWords2@18::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method sortedWords2@18::get_CheckClose .method public strict virtual instance string @@ -953,7 +901,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] class [Utils]Utils/Product V_0, [1] class [Utils]Utils/Product p) @@ -964,90 +912,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 44,44 : 9,29 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Ordering01::get_products() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101Ordering01/sortedProducts2@44::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Ordering01::get_products() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101Ordering01/sortedProducts2@44::pc .line 44,44 : 9,29 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 44,44 : 9,29 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101Ordering01/sortedProducts2@44::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 45,45 : 9,40 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld class [Utils]Utils/Product Linq101Ordering01/sortedProducts2@44::current - IL_006b: ldc.i4.1 - IL_006c: ret - - .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 - - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101Ordering01/sortedProducts2@44::pc + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101Ordering01/sortedProducts2@44::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld class [Utils]Utils/Product Linq101Ordering01/sortedProducts2@44::current + IL_0065: ldc.i4.1 + IL_0066: ret + + .line 100001,100001 : 0,0 '' + IL_0067: nop + IL_0068: br.s IL_003c + + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101Ordering01/sortedProducts2@44::pc .line 44,44 : 9,29 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101Ordering01/sortedProducts2@44::pc - IL_0091: ldarg.0 - IL_0092: ldnull - IL_0093: stfld class [Utils]Utils/Product Linq101Ordering01/sortedProducts2@44::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101Ordering01/sortedProducts2@44::pc + IL_008b: ldarg.0 + IL_008c: ldnull + IL_008d: stfld class [Utils]Utils/Product Linq101Ordering01/sortedProducts2@44::current + IL_0092: ldc.i4.0 + IL_0093: ret } // end of method sortedProducts2@44::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -1059,158 +1001,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Ordering01/sortedProducts2@44::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Ordering01/sortedProducts2@44::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Ordering01/sortedProducts2@44::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Ordering01/sortedProducts2@44::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedProducts2@44::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Ordering01/sortedProducts2@44::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld class [Utils]Utils/Product Linq101Ordering01/sortedProducts2@44::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Ordering01/sortedProducts2@44::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld class [Utils]Utils/Product Linq101Ordering01/sortedProducts2@44::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 44,44 : 9,29 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f + IL_0076: nop + IL_0077: br IL_0000 - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method sortedProducts2@44::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Ordering01/sortedProducts2@44::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method sortedProducts2@44::get_CheckClose .method public strict virtual instance class [Utils]Utils/Product @@ -1323,7 +1245,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] string V_0, [1] string d) @@ -1334,90 +1256,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 52,52 : 9,27 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Ordering01::get_digits() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101Ordering01/sortedDigits@52::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Ordering01::get_digits() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101Ordering01/sortedDigits@52::pc .line 52,52 : 9,27 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 52,52 : 9,27 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101Ordering01/sortedDigits@52::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 53,53 : 9,24 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld string Linq101Ordering01/sortedDigits@52::current - IL_006b: ldc.i4.1 - IL_006c: ret - - .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 - - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101Ordering01/sortedDigits@52::pc + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101Ordering01/sortedDigits@52::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld string Linq101Ordering01/sortedDigits@52::current + IL_0065: ldc.i4.1 + IL_0066: ret + + .line 100001,100001 : 0,0 '' + IL_0067: nop + IL_0068: br.s IL_003c + + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101Ordering01/sortedDigits@52::pc .line 52,52 : 9,27 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101Ordering01/sortedDigits@52::pc - IL_0091: ldarg.0 - IL_0092: ldnull - IL_0093: stfld string Linq101Ordering01/sortedDigits@52::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101Ordering01/sortedDigits@52::pc + IL_008b: ldarg.0 + IL_008c: ldnull + IL_008d: stfld string Linq101Ordering01/sortedDigits@52::current + IL_0092: ldc.i4.0 + IL_0093: ret } // end of method sortedDigits@52::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -1429,158 +1345,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Ordering01/sortedDigits@52::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Ordering01/sortedDigits@52::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Ordering01/sortedDigits@52::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Ordering01/sortedDigits@52::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Ordering01/sortedDigits@52::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Ordering01/sortedDigits@52::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld string Linq101Ordering01/sortedDigits@52::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Ordering01/sortedDigits@52::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld string Linq101Ordering01/sortedDigits@52::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 52,52 : 9,27 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f + IL_0076: nop + IL_0077: br IL_0000 - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method sortedDigits@52::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Ordering01/sortedDigits@52::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method sortedDigits@52::get_CheckClose .method public strict virtual instance string diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Partitioning01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Partitioning01.il.bsl index 584e444b9be..e6988e57bd7 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Partitioning01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Partitioning01.il.bsl @@ -45,13 +45,13 @@ // Offset: 0x000003D8 Length: 0x00000138 } .module Linq101Partitioning01.exe -// MVID: {5FCFFD0D-B280-A6A2-A745-03830DFDCF5F} +// MVID: {60B78A59-B280-A6A2-A745-0383598AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x057C0000 +// Image base: 0x069E0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -100,7 +100,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -112,90 +112,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 12,12 : 9,28 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Partitioning01::get_numbers() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101Partitioning01/first3Numbers@12::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Partitioning01::get_numbers() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101Partitioning01/first3Numbers@12::pc .line 12,12 : 9,28 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 12,12 : 9,28 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101Partitioning01/first3Numbers@12::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 13,13 : 9,15 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld int32 Linq101Partitioning01/first3Numbers@12::current - IL_006b: ldc.i4.1 - IL_006c: ret - - .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 - - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101Partitioning01/first3Numbers@12::pc + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101Partitioning01/first3Numbers@12::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld int32 Linq101Partitioning01/first3Numbers@12::current + IL_0065: ldc.i4.1 + IL_0066: ret + + .line 100001,100001 : 0,0 '' + IL_0067: nop + IL_0068: br.s IL_003c + + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101Partitioning01/first3Numbers@12::pc .line 12,12 : 9,28 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101Partitioning01/first3Numbers@12::pc - IL_0091: ldarg.0 + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101Partitioning01/first3Numbers@12::pc + IL_008b: ldarg.0 + IL_008c: ldc.i4.0 + IL_008d: stfld int32 Linq101Partitioning01/first3Numbers@12::current IL_0092: ldc.i4.0 - IL_0093: stfld int32 Linq101Partitioning01/first3Numbers@12::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0093: ret } // end of method first3Numbers@12::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -207,158 +201,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Partitioning01/first3Numbers@12::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Partitioning01/first3Numbers@12::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Partitioning01/first3Numbers@12::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Partitioning01/first3Numbers@12::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/first3Numbers@12::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Partitioning01/first3Numbers@12::pc - IL_0068: ldarg.0 - IL_0069: ldc.i4.0 - IL_006a: stfld int32 Linq101Partitioning01/first3Numbers@12::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Partitioning01/first3Numbers@12::pc + IL_005d: ldarg.0 + IL_005e: ldc.i4.0 + IL_005f: stfld int32 Linq101Partitioning01/first3Numbers@12::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 12,12 : 9,28 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f + IL_0076: nop + IL_0077: br IL_0000 - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method first3Numbers@12::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Partitioning01/first3Numbers@12::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method first3Numbers@12::get_CheckClose .method public strict virtual instance int32 @@ -640,7 +614,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -651,90 +625,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 29,29 : 9,28 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Partitioning01::get_numbers() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Partitioning01::get_numbers() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc .line 29,29 : 9,28 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 29,29 : 9,28 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 30,30 : 9,15 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::current - IL_006b: ldc.i4.1 - IL_006c: ret - - .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 - - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::current + IL_0065: ldc.i4.1 + IL_0066: ret + + .line 100001,100001 : 0,0 '' + IL_0067: nop + IL_0068: br.s IL_003c + + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc .line 29,29 : 9,28 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc - IL_0091: ldarg.0 + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc + IL_008b: ldarg.0 + IL_008c: ldc.i4.0 + IL_008d: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::current IL_0092: ldc.i4.0 - IL_0093: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0093: ret } // end of method allButFirst4Numbers@29::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -746,158 +714,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst4Numbers@29::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc - IL_0068: ldarg.0 - IL_0069: ldc.i4.0 - IL_006a: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc + IL_005d: ldarg.0 + IL_005e: ldc.i4.0 + IL_005f: stfld int32 Linq101Partitioning01/allButFirst4Numbers@29::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 29,29 : 9,28 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f + IL_0076: nop + IL_0077: br IL_0000 - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method allButFirst4Numbers@29::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Partitioning01/allButFirst4Numbers@29::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method allButFirst4Numbers@29::get_CheckClose .method public strict virtual instance int32 @@ -1179,7 +1127,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -1190,90 +1138,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 45,45 : 9,28 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Partitioning01::get_numbers() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Partitioning01::get_numbers() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc .line 45,45 : 9,28 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 45,45 : 9,28 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 46,46 : 9,26 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::current - IL_006b: ldc.i4.1 - IL_006c: ret - - .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 - - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::current + IL_0065: ldc.i4.1 + IL_0066: ret + + .line 100001,100001 : 0,0 '' + IL_0067: nop + IL_0068: br.s IL_003c + + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc .line 45,45 : 9,28 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc - IL_0091: ldarg.0 + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc + IL_008b: ldarg.0 + IL_008c: ldc.i4.0 + IL_008d: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::current IL_0092: ldc.i4.0 - IL_0093: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0093: ret } // end of method firstNumbersLessThan6@45::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -1285,158 +1227,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/firstNumbersLessThan6@45::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc - IL_0068: ldarg.0 - IL_0069: ldc.i4.0 - IL_006a: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc + IL_005d: ldarg.0 + IL_005e: ldc.i4.0 + IL_005f: stfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 45,45 : 9,28 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f + IL_0076: nop + IL_0077: br IL_0000 - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method firstNumbersLessThan6@45::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Partitioning01/firstNumbersLessThan6@45::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method firstNumbersLessThan6@45::get_CheckClose .method public strict virtual instance int32 @@ -1549,7 +1471,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -1560,90 +1482,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 52,52 : 9,28 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Partitioning01::get_numbers() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Partitioning01::get_numbers() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc .line 52,52 : 9,28 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 52,52 : 9,28 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 53,53 : 9,31 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::current - IL_006b: ldc.i4.1 - IL_006c: ret - - .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 - - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::current + IL_0065: ldc.i4.1 + IL_0066: ret + + .line 100001,100001 : 0,0 '' + IL_0067: nop + IL_0068: br.s IL_003c + + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc .line 52,52 : 9,28 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc - IL_0091: ldarg.0 + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc + IL_008b: ldarg.0 + IL_008c: ldc.i4.0 + IL_008d: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::current IL_0092: ldc.i4.0 - IL_0093: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0093: ret } // end of method allButFirst3Numbers@52::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -1655,158 +1571,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Partitioning01/allButFirst3Numbers@52::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc - IL_0068: ldarg.0 - IL_0069: ldc.i4.0 - IL_006a: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc + IL_005d: ldarg.0 + IL_005e: ldc.i4.0 + IL_005f: stfld int32 Linq101Partitioning01/allButFirst3Numbers@52::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 52,52 : 9,28 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f + IL_0076: nop + IL_0077: br IL_0000 - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method allButFirst3Numbers@52::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Partitioning01/allButFirst3Numbers@52::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method allButFirst3Numbers@52::get_CheckClose .method public strict virtual instance int32 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Quantifiers01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Quantifiers01.il.bsl index 865dfef3e73..2341c4243cf 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Quantifiers01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Quantifiers01.il.bsl @@ -45,13 +45,13 @@ // Offset: 0x00000398 Length: 0x000000FF } .module Linq101Quantifiers01.exe -// MVID: {5FCFFD0D-76DD-E373-A745-03830DFDCF5F} +// MVID: {60B78A59-76DD-E373-A745-0383598AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07250000 +// Image base: 0x065D0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -100,7 +100,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] string V_0, [1] string w) @@ -112,90 +112,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 12,12 : 9,26 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Quantifiers01::get_words() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101Quantifiers01/iAfterE@12::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Quantifiers01::get_words() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101Quantifiers01/iAfterE@12::pc .line 12,12 : 9,26 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 12,12 : 9,26 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101Quantifiers01/iAfterE@12::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 13,13 : 9,34 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld string Linq101Quantifiers01/iAfterE@12::current - IL_006b: ldc.i4.1 - IL_006c: ret + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101Quantifiers01/iAfterE@12::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld string Linq101Quantifiers01/iAfterE@12::current + IL_0065: ldc.i4.1 + IL_0066: ret .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 + IL_0067: nop + IL_0068: br.s IL_003c - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101Quantifiers01/iAfterE@12::pc + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101Quantifiers01/iAfterE@12::pc .line 12,12 : 9,26 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101Quantifiers01/iAfterE@12::pc - IL_0091: ldarg.0 - IL_0092: ldnull - IL_0093: stfld string Linq101Quantifiers01/iAfterE@12::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101Quantifiers01/iAfterE@12::pc + IL_008b: ldarg.0 + IL_008c: ldnull + IL_008d: stfld string Linq101Quantifiers01/iAfterE@12::current + IL_0092: ldc.i4.0 + IL_0093: ret } // end of method iAfterE@12::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -207,158 +201,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Quantifiers01/iAfterE@12::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Quantifiers01/iAfterE@12::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Quantifiers01/iAfterE@12::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Quantifiers01/iAfterE@12::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/iAfterE@12::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Quantifiers01/iAfterE@12::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld string Linq101Quantifiers01/iAfterE@12::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Quantifiers01/iAfterE@12::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld string Linq101Quantifiers01/iAfterE@12::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 12,12 : 9,26 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 + IL_0076: nop + IL_0077: br IL_0000 - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method iAfterE@12::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Quantifiers01/iAfterE@12::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method iAfterE@12::get_CheckClose .method public strict virtual instance string @@ -736,7 +710,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -747,90 +721,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 32,32 : 9,28 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Quantifiers01::get_numbers() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Quantifiers01::get_numbers() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc .line 32,32 : 9,28 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 32,32 : 9,28 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 33,33 : 9,24 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld int32 Linq101Quantifiers01/onlyOdd@32::current - IL_006b: ldc.i4.1 - IL_006c: ret + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld int32 Linq101Quantifiers01/onlyOdd@32::current + IL_0065: ldc.i4.1 + IL_0066: ret .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 + IL_0067: nop + IL_0068: br.s IL_003c - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc .line 32,32 : 9,28 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc - IL_0091: ldarg.0 + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc + IL_008b: ldarg.0 + IL_008c: ldc.i4.0 + IL_008d: stfld int32 Linq101Quantifiers01/onlyOdd@32::current IL_0092: ldc.i4.0 - IL_0093: stfld int32 Linq101Quantifiers01/onlyOdd@32::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0093: ret } // end of method onlyOdd@32::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -842,158 +810,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Quantifiers01/onlyOdd@32::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Quantifiers01/onlyOdd@32::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Quantifiers01/onlyOdd@32::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc - IL_0068: ldarg.0 - IL_0069: ldc.i4.0 - IL_006a: stfld int32 Linq101Quantifiers01/onlyOdd@32::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Quantifiers01/onlyOdd@32::pc + IL_005d: ldarg.0 + IL_005e: ldc.i4.0 + IL_005f: stfld int32 Linq101Quantifiers01/onlyOdd@32::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 32,32 : 9,28 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 + IL_0076: nop + IL_0077: br IL_0000 - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method onlyOdd@32::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Quantifiers01/onlyOdd@32::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method onlyOdd@32::get_CheckClose .method public strict virtual instance int32 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Select01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Select01.il.bsl index 8c78fe1a38c..27bc8c410f8 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Select01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Select01.il.bsl @@ -45,13 +45,13 @@ // Offset: 0x00000648 Length: 0x00000204 } .module Linq101Select01.exe -// MVID: {5FCFFD0D-6057-8F80-A745-03830DFDCF5F} +// MVID: {60B78A59-6057-8F80-A745-0383598AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x053E0000 +// Image base: 0x07170000 // =============== CLASS MEMBERS DECLARATION =================== @@ -145,7 +145,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 164 (0xa4) + // Code size 158 (0x9e) .maxstack 7 .locals init ([0] int32 n) .line 100001,100001 : 0,0 '' @@ -155,92 +155,86 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_007a + IL_001b: nop + IL_001c: br.s IL_0074 .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_0077 + IL_001e: nop + IL_001f: br.s IL_0071 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_009b + IL_0021: nop + IL_0022: br.s IL_0095 .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 13,13 : 9,23 '' - IL_002b: ldarg.0 - IL_002c: ldsfld class Linq101Select01/'numsPlusOne@12-1' Linq101Select01/'numsPlusOne@12-1'::@_instance - IL_0031: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_numbers() - IL_0036: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,int32>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, + IL_0025: ldarg.0 + IL_0026: ldsfld class Linq101Select01/'numsPlusOne@12-1' Linq101Select01/'numsPlusOne@12-1'::@_instance + IL_002b: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_numbers() + IL_0030: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,int32>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_003b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0040: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' - IL_0045: ldarg.0 - IL_0046: ldc.i4.1 - IL_0047: stfld int32 Linq101Select01/numsPlusOne@13::pc + IL_0035: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_003a: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' + IL_003f: ldarg.0 + IL_0040: ldc.i4.1 + IL_0041: stfld int32 Linq101Select01/numsPlusOne@13::pc .line 13,13 : 9,23 '' - IL_004c: ldarg.0 - IL_004d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' - IL_0052: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0057: brfalse.s IL_007a - - IL_0059: ldarg.0 - IL_005a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' - IL_005f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0064: stloc.0 - IL_0065: ldarg.0 - IL_0066: ldc.i4.2 - IL_0067: stfld int32 Linq101Select01/numsPlusOne@13::pc + IL_0046: ldarg.0 + IL_0047: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' + IL_004c: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0051: brfalse.s IL_0074 + + IL_0053: ldarg.0 + IL_0054: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' + IL_0059: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005e: stloc.0 .line 13,13 : 17,22 '' - IL_006c: ldarg.0 - IL_006d: ldloc.0 - IL_006e: ldc.i4.1 - IL_006f: add - IL_0070: stfld int32 Linq101Select01/numsPlusOne@13::current - IL_0075: ldc.i4.1 - IL_0076: ret + IL_005f: ldarg.0 + IL_0060: ldc.i4.2 + IL_0061: stfld int32 Linq101Select01/numsPlusOne@13::pc + IL_0066: ldarg.0 + IL_0067: ldloc.0 + IL_0068: ldc.i4.1 + IL_0069: add + IL_006a: stfld int32 Linq101Select01/numsPlusOne@13::current + IL_006f: ldc.i4.1 + IL_0070: ret .line 100001,100001 : 0,0 '' - IL_0077: nop - IL_0078: br.s IL_004c + IL_0071: nop + IL_0072: br.s IL_0046 - IL_007a: ldarg.0 - IL_007b: ldc.i4.3 - IL_007c: stfld int32 Linq101Select01/numsPlusOne@13::pc + IL_0074: ldarg.0 + IL_0075: ldc.i4.3 + IL_0076: stfld int32 Linq101Select01/numsPlusOne@13::pc .line 13,13 : 9,23 '' - IL_0081: ldarg.0 - IL_0082: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' - IL_0087: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_008c: nop - IL_008d: ldarg.0 - IL_008e: ldnull - IL_008f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' - IL_0094: ldarg.0 - IL_0095: ldc.i4.3 - IL_0096: stfld int32 Linq101Select01/numsPlusOne@13::pc - IL_009b: ldarg.0 + IL_007b: ldarg.0 + IL_007c: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' + IL_0081: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0086: nop + IL_0087: ldarg.0 + IL_0088: ldnull + IL_0089: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' + IL_008e: ldarg.0 + IL_008f: ldc.i4.3 + IL_0090: stfld int32 Linq101Select01/numsPlusOne@13::pc + IL_0095: ldarg.0 + IL_0096: ldc.i4.0 + IL_0097: stfld int32 Linq101Select01/numsPlusOne@13::current IL_009c: ldc.i4.0 - IL_009d: stfld int32 Linq101Select01/numsPlusOne@13::current - IL_00a2: ldc.i4.0 - IL_00a3: ret + IL_009d: ret } // end of method numsPlusOne@13::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -252,158 +246,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Select01/numsPlusOne@13::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Select01/numsPlusOne@13::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Select01/numsPlusOne@13::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Select01/numsPlusOne@13::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/numsPlusOne@13::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Select01/numsPlusOne@13::pc - IL_0068: ldarg.0 - IL_0069: ldc.i4.0 - IL_006a: stfld int32 Linq101Select01/numsPlusOne@13::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Select01/numsPlusOne@13::pc + IL_005d: ldarg.0 + IL_005e: ldc.i4.0 + IL_005f: stfld int32 Linq101Select01/numsPlusOne@13::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 13,13 : 9,23 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 + IL_0076: nop + IL_0077: br IL_0000 - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method numsPlusOne@13::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Select01/numsPlusOne@13::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method numsPlusOne@13::get_CheckClose .method public strict virtual instance int32 @@ -520,7 +494,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 167 (0xa7) + // Code size 161 (0xa1) .maxstack 7 .locals init ([0] class [Utils]Utils/Product p) .line 100001,100001 : 0,0 '' @@ -530,91 +504,85 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_007d + IL_001b: nop + IL_001c: br.s IL_0077 .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_007a + IL_001e: nop + IL_001f: br.s IL_0074 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_009e + IL_0021: nop + IL_0022: br.s IL_0098 .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 22,22 : 9,31 '' - IL_002b: ldarg.0 - IL_002c: ldsfld class Linq101Select01/'productNames@21-1' Linq101Select01/'productNames@21-1'::@_instance - IL_0031: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_products() - IL_0036: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,class [Utils]Utils/Product>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, + IL_0025: ldarg.0 + IL_0026: ldsfld class Linq101Select01/'productNames@21-1' Linq101Select01/'productNames@21-1'::@_instance + IL_002b: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_products() + IL_0030: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,class [Utils]Utils/Product>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_003b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0040: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' - IL_0045: ldarg.0 - IL_0046: ldc.i4.1 - IL_0047: stfld int32 Linq101Select01/productNames@22::pc + IL_0035: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_003a: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' + IL_003f: ldarg.0 + IL_0040: ldc.i4.1 + IL_0041: stfld int32 Linq101Select01/productNames@22::pc .line 22,22 : 9,31 '' - IL_004c: ldarg.0 - IL_004d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' - IL_0052: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0057: brfalse.s IL_007d - - IL_0059: ldarg.0 - IL_005a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' - IL_005f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0064: stloc.0 - IL_0065: ldarg.0 - IL_0066: ldc.i4.2 - IL_0067: stfld int32 Linq101Select01/productNames@22::pc + IL_0046: ldarg.0 + IL_0047: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' + IL_004c: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0051: brfalse.s IL_0077 + + IL_0053: ldarg.0 + IL_0054: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' + IL_0059: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005e: stloc.0 .line 22,22 : 17,30 '' - IL_006c: ldarg.0 - IL_006d: ldloc.0 - IL_006e: callvirt instance string [Utils]Utils/Product::get_ProductName() - IL_0073: stfld string Linq101Select01/productNames@22::current - IL_0078: ldc.i4.1 - IL_0079: ret + IL_005f: ldarg.0 + IL_0060: ldc.i4.2 + IL_0061: stfld int32 Linq101Select01/productNames@22::pc + IL_0066: ldarg.0 + IL_0067: ldloc.0 + IL_0068: callvirt instance string [Utils]Utils/Product::get_ProductName() + IL_006d: stfld string Linq101Select01/productNames@22::current + IL_0072: ldc.i4.1 + IL_0073: ret .line 100001,100001 : 0,0 '' - IL_007a: nop - IL_007b: br.s IL_004c + IL_0074: nop + IL_0075: br.s IL_0046 - IL_007d: ldarg.0 - IL_007e: ldc.i4.3 - IL_007f: stfld int32 Linq101Select01/productNames@22::pc + IL_0077: ldarg.0 + IL_0078: ldc.i4.3 + IL_0079: stfld int32 Linq101Select01/productNames@22::pc .line 22,22 : 9,31 '' - IL_0084: ldarg.0 - IL_0085: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' - IL_008a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_008f: nop - IL_0090: ldarg.0 - IL_0091: ldnull - IL_0092: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' - IL_0097: ldarg.0 - IL_0098: ldc.i4.3 - IL_0099: stfld int32 Linq101Select01/productNames@22::pc - IL_009e: ldarg.0 - IL_009f: ldnull - IL_00a0: stfld string Linq101Select01/productNames@22::current - IL_00a5: ldc.i4.0 - IL_00a6: ret + IL_007e: ldarg.0 + IL_007f: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' + IL_0084: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0089: nop + IL_008a: ldarg.0 + IL_008b: ldnull + IL_008c: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' + IL_0091: ldarg.0 + IL_0092: ldc.i4.3 + IL_0093: stfld int32 Linq101Select01/productNames@22::pc + IL_0098: ldarg.0 + IL_0099: ldnull + IL_009a: stfld string Linq101Select01/productNames@22::current + IL_009f: ldc.i4.0 + IL_00a0: ret } // end of method productNames@22::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -626,158 +594,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Select01/productNames@22::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Select01/productNames@22::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Select01/productNames@22::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Select01/productNames@22::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productNames@22::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Select01/productNames@22::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld string Linq101Select01/productNames@22::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Select01/productNames@22::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld string Linq101Select01/productNames@22::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 22,22 : 9,31 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 + IL_0076: nop + IL_0077: br IL_0000 - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method productNames@22::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Select01/productNames@22::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method productNames@22::get_CheckClose .method public strict virtual instance string @@ -894,7 +842,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 172 (0xac) + // Code size 166 (0xa6) .maxstack 7 .locals init ([0] int32 n) .line 100001,100001 : 0,0 '' @@ -904,92 +852,86 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0082 + IL_001b: nop + IL_001c: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_007f + IL_001e: nop + IL_001f: br.s IL_0079 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_00a3 + IL_0021: nop + IL_0022: br.s IL_009d .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 30,30 : 9,29 '' - IL_002b: ldarg.0 - IL_002c: ldsfld class Linq101Select01/'textNums@29-1' Linq101Select01/'textNums@29-1'::@_instance - IL_0031: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_numbers() - IL_0036: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,int32>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, + IL_0025: ldarg.0 + IL_0026: ldsfld class Linq101Select01/'textNums@29-1' Linq101Select01/'textNums@29-1'::@_instance + IL_002b: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_numbers() + IL_0030: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,int32>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_003b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0040: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' - IL_0045: ldarg.0 - IL_0046: ldc.i4.1 - IL_0047: stfld int32 Linq101Select01/textNums@30::pc + IL_0035: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_003a: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' + IL_003f: ldarg.0 + IL_0040: ldc.i4.1 + IL_0041: stfld int32 Linq101Select01/textNums@30::pc .line 30,30 : 9,29 '' - IL_004c: ldarg.0 - IL_004d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' - IL_0052: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0057: brfalse.s IL_0082 - - IL_0059: ldarg.0 - IL_005a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' - IL_005f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0064: stloc.0 - IL_0065: ldarg.0 - IL_0066: ldc.i4.2 - IL_0067: stfld int32 Linq101Select01/textNums@30::pc + IL_0046: ldarg.0 + IL_0047: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' + IL_004c: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0051: brfalse.s IL_007c + + IL_0053: ldarg.0 + IL_0054: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' + IL_0059: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005e: stloc.0 .line 30,30 : 17,28 '' - IL_006c: ldarg.0 - IL_006d: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_strings() - IL_0072: ldloc.0 - IL_0073: callvirt instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Item(int32) - IL_0078: stfld string Linq101Select01/textNums@30::current - IL_007d: ldc.i4.1 - IL_007e: ret + IL_005f: ldarg.0 + IL_0060: ldc.i4.2 + IL_0061: stfld int32 Linq101Select01/textNums@30::pc + IL_0066: ldarg.0 + IL_0067: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_strings() + IL_006c: ldloc.0 + IL_006d: callvirt instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Item(int32) + IL_0072: stfld string Linq101Select01/textNums@30::current + IL_0077: ldc.i4.1 + IL_0078: ret .line 100001,100001 : 0,0 '' - IL_007f: nop - IL_0080: br.s IL_004c + IL_0079: nop + IL_007a: br.s IL_0046 - IL_0082: ldarg.0 - IL_0083: ldc.i4.3 - IL_0084: stfld int32 Linq101Select01/textNums@30::pc + IL_007c: ldarg.0 + IL_007d: ldc.i4.3 + IL_007e: stfld int32 Linq101Select01/textNums@30::pc .line 30,30 : 9,29 '' - IL_0089: ldarg.0 - IL_008a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' - IL_008f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0094: nop - IL_0095: ldarg.0 - IL_0096: ldnull - IL_0097: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' - IL_009c: ldarg.0 - IL_009d: ldc.i4.3 - IL_009e: stfld int32 Linq101Select01/textNums@30::pc - IL_00a3: ldarg.0 - IL_00a4: ldnull - IL_00a5: stfld string Linq101Select01/textNums@30::current - IL_00aa: ldc.i4.0 - IL_00ab: ret + IL_0083: ldarg.0 + IL_0084: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' + IL_0089: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_008e: nop + IL_008f: ldarg.0 + IL_0090: ldnull + IL_0091: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' + IL_0096: ldarg.0 + IL_0097: ldc.i4.3 + IL_0098: stfld int32 Linq101Select01/textNums@30::pc + IL_009d: ldarg.0 + IL_009e: ldnull + IL_009f: stfld string Linq101Select01/textNums@30::current + IL_00a4: ldc.i4.0 + IL_00a5: ret } // end of method textNums@30::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -1001,158 +943,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Select01/textNums@30::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Select01/textNums@30::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Select01/textNums@30::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Select01/textNums@30::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/textNums@30::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Select01/textNums@30::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld string Linq101Select01/textNums@30::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Select01/textNums@30::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld string Linq101Select01/textNums@30::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 30,30 : 9,29 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f + IL_0076: nop + IL_0077: br IL_0000 - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method textNums@30::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Select01/textNums@30::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method textNums@30::get_CheckClose .method public strict virtual instance string @@ -1269,7 +1191,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1>& next) cil managed { - // Code size 181 (0xb5) + // Code size 175 (0xaf) .maxstack 7 .locals init ([0] string w) .line 100001,100001 : 0,0 '' @@ -1279,95 +1201,89 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002d - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0027 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_008b + IL_001b: nop + IL_001c: br.s IL_0085 .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_0088 + IL_001e: nop + IL_001f: br.s IL_0082 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br IL_00ac + IL_0021: nop + IL_0022: br IL_00a6 .line 100001,100001 : 0,0 '' - IL_002d: nop + IL_0027: nop .line 39,39 : 8,41 '' - IL_002e: ldarg.0 - IL_002f: ldsfld class Linq101Select01/'upperLowerWords@38-1' Linq101Select01/'upperLowerWords@38-1'::@_instance - IL_0034: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_words() - IL_0039: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,string>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, + IL_0028: ldarg.0 + IL_0029: ldsfld class Linq101Select01/'upperLowerWords@38-1' Linq101Select01/'upperLowerWords@38-1'::@_instance + IL_002e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_words() + IL_0033: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,string>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_003e: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0043: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' - IL_0048: ldarg.0 - IL_0049: ldc.i4.1 - IL_004a: stfld int32 Linq101Select01/upperLowerWords@39::pc + IL_0038: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_003d: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' + IL_0042: ldarg.0 + IL_0043: ldc.i4.1 + IL_0044: stfld int32 Linq101Select01/upperLowerWords@39::pc .line 39,39 : 8,41 '' - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' - IL_0055: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_005a: brfalse.s IL_008b - - IL_005c: ldarg.0 - IL_005d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' - IL_0062: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0067: stloc.0 - IL_0068: ldarg.0 - IL_0069: ldc.i4.2 - IL_006a: stfld int32 Linq101Select01/upperLowerWords@39::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' + IL_004f: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0054: brfalse.s IL_0085 + + IL_0056: ldarg.0 + IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' + IL_005c: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0061: stloc.0 .line 39,39 : 16,40 '' - IL_006f: ldarg.0 + IL_0062: ldarg.0 + IL_0063: ldc.i4.2 + IL_0064: stfld int32 Linq101Select01/upperLowerWords@39::pc + IL_0069: ldarg.0 + IL_006a: ldloc.0 + IL_006b: callvirt instance string [mscorlib]System.String::ToUpper() IL_0070: ldloc.0 - IL_0071: callvirt instance string [mscorlib]System.String::ToUpper() - IL_0076: ldloc.0 - IL_0077: callvirt instance string [mscorlib]System.String::ToLower() - IL_007c: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, + IL_0071: callvirt instance string [mscorlib]System.String::ToLower() + IL_0076: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, !1) - IL_0081: stfld class [mscorlib]System.Tuple`2 Linq101Select01/upperLowerWords@39::current - IL_0086: ldc.i4.1 - IL_0087: ret + IL_007b: stfld class [mscorlib]System.Tuple`2 Linq101Select01/upperLowerWords@39::current + IL_0080: ldc.i4.1 + IL_0081: ret .line 100001,100001 : 0,0 '' - IL_0088: nop - IL_0089: br.s IL_004f + IL_0082: nop + IL_0083: br.s IL_0049 - IL_008b: ldarg.0 - IL_008c: ldc.i4.3 - IL_008d: stfld int32 Linq101Select01/upperLowerWords@39::pc + IL_0085: ldarg.0 + IL_0086: ldc.i4.3 + IL_0087: stfld int32 Linq101Select01/upperLowerWords@39::pc .line 39,39 : 8,41 '' - IL_0092: ldarg.0 - IL_0093: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' - IL_0098: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_009d: nop - IL_009e: ldarg.0 - IL_009f: ldnull - IL_00a0: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' - IL_00a5: ldarg.0 - IL_00a6: ldc.i4.3 - IL_00a7: stfld int32 Linq101Select01/upperLowerWords@39::pc - IL_00ac: ldarg.0 - IL_00ad: ldnull - IL_00ae: stfld class [mscorlib]System.Tuple`2 Linq101Select01/upperLowerWords@39::current - IL_00b3: ldc.i4.0 - IL_00b4: ret + IL_008c: ldarg.0 + IL_008d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' + IL_0092: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0097: nop + IL_0098: ldarg.0 + IL_0099: ldnull + IL_009a: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' + IL_009f: ldarg.0 + IL_00a0: ldc.i4.3 + IL_00a1: stfld int32 Linq101Select01/upperLowerWords@39::pc + IL_00a6: ldarg.0 + IL_00a7: ldnull + IL_00a8: stfld class [mscorlib]System.Tuple`2 Linq101Select01/upperLowerWords@39::current + IL_00ad: ldc.i4.0 + IL_00ae: ret } // end of method upperLowerWords@39::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -1379,158 +1295,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Select01/upperLowerWords@39::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Select01/upperLowerWords@39::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Select01/upperLowerWords@39::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Select01/upperLowerWords@39::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/upperLowerWords@39::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Select01/upperLowerWords@39::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld class [mscorlib]System.Tuple`2 Linq101Select01/upperLowerWords@39::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Select01/upperLowerWords@39::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld class [mscorlib]System.Tuple`2 Linq101Select01/upperLowerWords@39::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 39,39 : 8,41 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 + IL_0076: nop + IL_0077: br IL_0000 - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method upperLowerWords@39::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Select01/upperLowerWords@39::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method upperLowerWords@39::get_CheckClose .method public strict virtual instance class [mscorlib]System.Tuple`2 @@ -1647,7 +1543,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1>& next) cil managed { - // Code size 186 (0xba) + // Code size 180 (0xb4) .maxstack 8 .locals init ([0] int32 n) .line 100001,100001 : 0,0 '' @@ -1657,99 +1553,93 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002d - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0027 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0090 + IL_001b: nop + IL_001c: br.s IL_008a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_008d + IL_001e: nop + IL_001f: br.s IL_0087 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br IL_00b1 + IL_0021: nop + IL_0022: br IL_00ab .line 100001,100001 : 0,0 '' - IL_002d: nop + IL_0027: nop .line 46,46 : 9,42 '' - IL_002e: ldarg.0 - IL_002f: ldsfld class Linq101Select01/'digitOddEvens@45-1' Linq101Select01/'digitOddEvens@45-1'::@_instance - IL_0034: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_numbers() - IL_0039: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,int32>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, + IL_0028: ldarg.0 + IL_0029: ldsfld class Linq101Select01/'digitOddEvens@45-1' Linq101Select01/'digitOddEvens@45-1'::@_instance + IL_002e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_numbers() + IL_0033: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,int32>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_003e: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0043: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' - IL_0048: ldarg.0 - IL_0049: ldc.i4.1 - IL_004a: stfld int32 Linq101Select01/digitOddEvens@46::pc + IL_0038: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_003d: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' + IL_0042: ldarg.0 + IL_0043: ldc.i4.1 + IL_0044: stfld int32 Linq101Select01/digitOddEvens@46::pc .line 46,46 : 9,42 '' - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' - IL_0055: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_005a: brfalse.s IL_0090 - - IL_005c: ldarg.0 - IL_005d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' - IL_0062: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0067: stloc.0 - IL_0068: ldarg.0 - IL_0069: ldc.i4.2 - IL_006a: stfld int32 Linq101Select01/digitOddEvens@46::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' + IL_004f: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0054: brfalse.s IL_008a + + IL_0056: ldarg.0 + IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' + IL_005c: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0061: stloc.0 .line 46,46 : 17,41 '' - IL_006f: ldarg.0 - IL_0070: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_strings() + IL_0062: ldarg.0 + IL_0063: ldc.i4.2 + IL_0064: stfld int32 Linq101Select01/digitOddEvens@46::pc + IL_0069: ldarg.0 + IL_006a: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_strings() + IL_006f: ldloc.0 + IL_0070: callvirt instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Item(int32) IL_0075: ldloc.0 - IL_0076: callvirt instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Item(int32) - IL_007b: ldloc.0 - IL_007c: ldc.i4.2 - IL_007d: rem - IL_007e: ldc.i4.0 - IL_007f: ceq - IL_0081: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, + IL_0076: ldc.i4.2 + IL_0077: rem + IL_0078: ldc.i4.0 + IL_0079: ceq + IL_007b: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, !1) - IL_0086: stfld class [mscorlib]System.Tuple`2 Linq101Select01/digitOddEvens@46::current - IL_008b: ldc.i4.1 - IL_008c: ret + IL_0080: stfld class [mscorlib]System.Tuple`2 Linq101Select01/digitOddEvens@46::current + IL_0085: ldc.i4.1 + IL_0086: ret .line 100001,100001 : 0,0 '' - IL_008d: nop - IL_008e: br.s IL_004f + IL_0087: nop + IL_0088: br.s IL_0049 - IL_0090: ldarg.0 - IL_0091: ldc.i4.3 - IL_0092: stfld int32 Linq101Select01/digitOddEvens@46::pc + IL_008a: ldarg.0 + IL_008b: ldc.i4.3 + IL_008c: stfld int32 Linq101Select01/digitOddEvens@46::pc .line 46,46 : 9,42 '' - IL_0097: ldarg.0 - IL_0098: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' - IL_009d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_00a2: nop - IL_00a3: ldarg.0 - IL_00a4: ldnull - IL_00a5: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' - IL_00aa: ldarg.0 - IL_00ab: ldc.i4.3 - IL_00ac: stfld int32 Linq101Select01/digitOddEvens@46::pc - IL_00b1: ldarg.0 - IL_00b2: ldnull - IL_00b3: stfld class [mscorlib]System.Tuple`2 Linq101Select01/digitOddEvens@46::current - IL_00b8: ldc.i4.0 - IL_00b9: ret + IL_0091: ldarg.0 + IL_0092: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' + IL_0097: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_009c: nop + IL_009d: ldarg.0 + IL_009e: ldnull + IL_009f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' + IL_00a4: ldarg.0 + IL_00a5: ldc.i4.3 + IL_00a6: stfld int32 Linq101Select01/digitOddEvens@46::pc + IL_00ab: ldarg.0 + IL_00ac: ldnull + IL_00ad: stfld class [mscorlib]System.Tuple`2 Linq101Select01/digitOddEvens@46::current + IL_00b2: ldc.i4.0 + IL_00b3: ret } // end of method digitOddEvens@46::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -1761,158 +1651,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Select01/digitOddEvens@46::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Select01/digitOddEvens@46::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Select01/digitOddEvens@46::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Select01/digitOddEvens@46::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/digitOddEvens@46::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Select01/digitOddEvens@46::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld class [mscorlib]System.Tuple`2 Linq101Select01/digitOddEvens@46::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Select01/digitOddEvens@46::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld class [mscorlib]System.Tuple`2 Linq101Select01/digitOddEvens@46::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 46,46 : 9,42 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f + IL_0076: nop + IL_0077: br IL_0000 - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method digitOddEvens@46::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Select01/digitOddEvens@46::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method digitOddEvens@46::get_CheckClose .method public strict virtual instance class [mscorlib]System.Tuple`2 @@ -2029,7 +1899,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1>& next) cil managed { - // Code size 187 (0xbb) + // Code size 181 (0xb5) .maxstack 8 .locals init ([0] class [Utils]Utils/Product p) .line 100001,100001 : 0,0 '' @@ -2039,98 +1909,92 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002d - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0027 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0091 + IL_001b: nop + IL_001c: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_008e + IL_001e: nop + IL_001f: br.s IL_0088 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br IL_00b2 + IL_0021: nop + IL_0022: br IL_00ac .line 100001,100001 : 0,0 '' - IL_002d: nop + IL_0027: nop .line 53,53 : 9,56 '' - IL_002e: ldarg.0 - IL_002f: ldsfld class Linq101Select01/'productInfos@52-1' Linq101Select01/'productInfos@52-1'::@_instance - IL_0034: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_products() - IL_0039: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,class [Utils]Utils/Product>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, + IL_0028: ldarg.0 + IL_0029: ldsfld class Linq101Select01/'productInfos@52-1' Linq101Select01/'productInfos@52-1'::@_instance + IL_002e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_products() + IL_0033: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,class [Utils]Utils/Product>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_003e: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0043: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' - IL_0048: ldarg.0 - IL_0049: ldc.i4.1 - IL_004a: stfld int32 Linq101Select01/productInfos@53::pc + IL_0038: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_003d: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' + IL_0042: ldarg.0 + IL_0043: ldc.i4.1 + IL_0044: stfld int32 Linq101Select01/productInfos@53::pc .line 53,53 : 9,56 '' - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' - IL_0055: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_005a: brfalse.s IL_0091 - - IL_005c: ldarg.0 - IL_005d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' - IL_0062: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0067: stloc.0 - IL_0068: ldarg.0 - IL_0069: ldc.i4.2 - IL_006a: stfld int32 Linq101Select01/productInfos@53::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' + IL_004f: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0054: brfalse.s IL_008b + + IL_0056: ldarg.0 + IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' + IL_005c: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0061: stloc.0 .line 53,53 : 17,55 '' - IL_006f: ldarg.0 + IL_0062: ldarg.0 + IL_0063: ldc.i4.2 + IL_0064: stfld int32 Linq101Select01/productInfos@53::pc + IL_0069: ldarg.0 + IL_006a: ldloc.0 + IL_006b: callvirt instance string [Utils]Utils/Product::get_ProductName() IL_0070: ldloc.0 - IL_0071: callvirt instance string [Utils]Utils/Product::get_ProductName() + IL_0071: callvirt instance string [Utils]Utils/Product::get_Category() IL_0076: ldloc.0 - IL_0077: callvirt instance string [Utils]Utils/Product::get_Category() - IL_007c: ldloc.0 - IL_007d: callvirt instance valuetype [mscorlib]System.Decimal [Utils]Utils/Product::get_UnitPrice() - IL_0082: newobj instance void class [mscorlib]System.Tuple`3::.ctor(!0, + IL_0077: callvirt instance valuetype [mscorlib]System.Decimal [Utils]Utils/Product::get_UnitPrice() + IL_007c: newobj instance void class [mscorlib]System.Tuple`3::.ctor(!0, !1, !2) - IL_0087: stfld class [mscorlib]System.Tuple`3 Linq101Select01/productInfos@53::current - IL_008c: ldc.i4.1 - IL_008d: ret + IL_0081: stfld class [mscorlib]System.Tuple`3 Linq101Select01/productInfos@53::current + IL_0086: ldc.i4.1 + IL_0087: ret .line 100001,100001 : 0,0 '' - IL_008e: nop - IL_008f: br.s IL_004f + IL_0088: nop + IL_0089: br.s IL_0049 - IL_0091: ldarg.0 - IL_0092: ldc.i4.3 - IL_0093: stfld int32 Linq101Select01/productInfos@53::pc + IL_008b: ldarg.0 + IL_008c: ldc.i4.3 + IL_008d: stfld int32 Linq101Select01/productInfos@53::pc .line 53,53 : 9,56 '' - IL_0098: ldarg.0 - IL_0099: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' - IL_009e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_00a3: nop - IL_00a4: ldarg.0 - IL_00a5: ldnull - IL_00a6: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' - IL_00ab: ldarg.0 - IL_00ac: ldc.i4.3 - IL_00ad: stfld int32 Linq101Select01/productInfos@53::pc - IL_00b2: ldarg.0 - IL_00b3: ldnull - IL_00b4: stfld class [mscorlib]System.Tuple`3 Linq101Select01/productInfos@53::current - IL_00b9: ldc.i4.0 - IL_00ba: ret + IL_0092: ldarg.0 + IL_0093: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' + IL_0098: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_009d: nop + IL_009e: ldarg.0 + IL_009f: ldnull + IL_00a0: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' + IL_00a5: ldarg.0 + IL_00a6: ldc.i4.3 + IL_00a7: stfld int32 Linq101Select01/productInfos@53::pc + IL_00ac: ldarg.0 + IL_00ad: ldnull + IL_00ae: stfld class [mscorlib]System.Tuple`3 Linq101Select01/productInfos@53::current + IL_00b3: ldc.i4.0 + IL_00b4: ret } // end of method productInfos@53::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -2142,158 +2006,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Select01/productInfos@53::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Select01/productInfos@53::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Select01/productInfos@53::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Select01/productInfos@53::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Select01/productInfos@53::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Select01/productInfos@53::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld class [mscorlib]System.Tuple`3 Linq101Select01/productInfos@53::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Select01/productInfos@53::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld class [mscorlib]System.Tuple`3 Linq101Select01/productInfos@53::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 53,53 : 9,56 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 + IL_0076: nop + IL_0077: br IL_0000 - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method productInfos@53::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Select01/productInfos@53::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method productInfos@53::get_CheckClose .method public strict virtual instance class [mscorlib]System.Tuple`3 @@ -3978,7 +3822,7 @@ .method public static void main@() cil managed { .entrypoint - // Code size 1128 (0x468) + // Code size 1124 (0x464) .maxstack 13 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 numbers, [1] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 numsPlusOne, @@ -4236,214 +4080,210 @@ class [mscorlib]System.Collections.IEqualityComparer) IL_0238: ldc.i4.0 IL_0239: ceq - IL_023b: brfalse.s IL_023f - - IL_023d: br.s IL_0241 - - IL_023f: br.s IL_025b + IL_023b: brfalse.s IL_0257 .line 64,64 : 60,84 '' - IL_0241: ldstr "lowNums failed" - IL_0246: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_024b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0250: pop + IL_023d: ldstr "lowNums failed" + IL_0242: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0247: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_024c: pop .line 64,64 : 86,92 '' - IL_0251: ldc.i4.1 - IL_0252: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32) - IL_0257: pop + IL_024d: ldc.i4.1 + IL_024e: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32) + IL_0253: pop .line 100001,100001 : 0,0 '' - IL_0258: nop - IL_0259: br.s IL_025c + IL_0254: nop + IL_0255: br.s IL_0258 .line 100001,100001 : 0,0 '' - IL_025b: nop + IL_0257: nop .line 67,67 : 1,37 '' - IL_025c: ldc.i4.0 - IL_025d: ldc.i4.2 - IL_025e: ldc.i4.4 - IL_025f: ldc.i4.5 - IL_0260: ldc.i4.6 - IL_0261: ldc.i4.8 - IL_0262: ldc.i4.s 9 - IL_0264: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() - IL_0269: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_0258: ldc.i4.0 + IL_0259: ldc.i4.2 + IL_025a: ldc.i4.4 + IL_025b: ldc.i4.5 + IL_025c: ldc.i4.6 + IL_025d: ldc.i4.8 + IL_025e: ldc.i4.s 9 + IL_0260: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() + IL_0265: 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_026e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_026a: 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_0273: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_026f: 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_0278: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_0274: 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_027d: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_0279: 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_0282: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_027e: 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_0287: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_0283: 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_028c: dup - IL_028d: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Select01::numbersA@67 - IL_0292: stloc.s numbersA + IL_0288: dup + IL_0289: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Select01::numbersA@67 + IL_028e: stloc.s numbersA .line 68,68 : 1,31 '' - IL_0294: ldc.i4.1 - IL_0295: ldc.i4.3 - IL_0296: ldc.i4.5 - IL_0297: ldc.i4.7 - IL_0298: ldc.i4.8 - IL_0299: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() - IL_029e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_0290: ldc.i4.1 + IL_0291: ldc.i4.3 + IL_0292: ldc.i4.5 + IL_0293: ldc.i4.7 + IL_0294: ldc.i4.8 + IL_0295: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() + IL_029a: 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_02a3: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_029f: 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_02a8: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_02a4: 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_02ad: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_02a9: 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_02b2: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_02ae: 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_02b7: dup - IL_02b8: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Select01::numbersB@68 - IL_02bd: stloc.s numbersB + IL_02b3: dup + IL_02b4: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Select01::numbersB@68 + IL_02b9: stloc.s numbersB .line 70,76 : 1,21 '' - IL_02bf: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_02c4: stloc.s V_30 + IL_02bb: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_02c0: stloc.s V_30 + IL_02c2: ldloc.s V_30 + IL_02c4: ldloc.s V_30 IL_02c6: ldloc.s V_30 IL_02c8: ldloc.s V_30 - IL_02ca: ldloc.s V_30 - IL_02cc: ldloc.s V_30 - IL_02ce: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_numbersA() - IL_02d3: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_02d8: ldloc.s V_30 - IL_02da: newobj instance void Linq101Select01/pairs@72::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_02df: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_02ca: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_numbersA() + IL_02cf: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_02d4: ldloc.s V_30 + IL_02d6: newobj instance void Linq101Select01/pairs@72::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_02db: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_02e4: ldsfld class Linq101Select01/'pairs@74-2' Linq101Select01/'pairs@74-2'::@_instance - IL_02e9: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_02e0: ldsfld class Linq101Select01/'pairs@74-2' Linq101Select01/'pairs@74-2'::@_instance + IL_02e5: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_02ee: ldsfld class Linq101Select01/'pairs@75-3' Linq101Select01/'pairs@75-3'::@_instance - IL_02f3: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_02ea: ldsfld class Linq101Select01/'pairs@75-3' Linq101Select01/'pairs@75-3'::@_instance + IL_02ef: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_02f8: 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_02fd: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0302: dup - IL_0303: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Select01::pairs@70 - IL_0308: stloc.s pairs + IL_02f4: 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_02f9: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_02fe: dup + IL_02ff: stsfld class [mscorlib]System.Tuple`2[] ''.$Linq101Select01::pairs@70 + IL_0304: stloc.s pairs .line 79,79 : 1,34 '' - IL_030a: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [Utils]Utils::getCustomerList() - IL_030f: dup - IL_0310: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Select01::customers@79 - IL_0315: stloc.s customers + IL_0306: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [Utils]Utils::getCustomerList() + IL_030b: dup + IL_030c: stsfld class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 ''.$Linq101Select01::customers@79 + IL_0311: stloc.s customers .line 80,86 : 1,21 '' - IL_0317: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_031c: stloc.s V_31 + IL_0313: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_0318: stloc.s V_31 + IL_031a: ldloc.s V_31 + IL_031c: ldloc.s V_31 IL_031e: ldloc.s V_31 IL_0320: ldloc.s V_31 - IL_0322: ldloc.s V_31 - IL_0324: ldloc.s V_31 - IL_0326: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_customers() - IL_032b: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0330: ldloc.s V_31 - IL_0332: newobj instance void Linq101Select01/orders@82::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_0337: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0322: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_customers() + IL_0327: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_032c: ldloc.s V_31 + IL_032e: newobj instance void Linq101Select01/orders@82::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_0333: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_033c: ldsfld class Linq101Select01/'orders@84-2' Linq101Select01/'orders@84-2'::@_instance - IL_0341: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0338: ldsfld class Linq101Select01/'orders@84-2' Linq101Select01/'orders@84-2'::@_instance + IL_033d: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0346: ldsfld class Linq101Select01/'orders@85-3' Linq101Select01/'orders@85-3'::@_instance - IL_034b: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`3>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0342: ldsfld class Linq101Select01/'orders@85-3' Linq101Select01/'orders@85-3'::@_instance + IL_0347: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`3>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0350: 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_0355: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_035a: dup - IL_035b: stsfld class [mscorlib]System.Tuple`3[] ''.$Linq101Select01::orders@80 - IL_0360: stloc.s orders + IL_034c: 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_0351: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0356: dup + IL_0357: stsfld class [mscorlib]System.Tuple`3[] ''.$Linq101Select01::orders@80 + IL_035c: stloc.s orders .line 89,95 : 1,21 '' - IL_0362: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_0367: stloc.s V_32 + IL_035e: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_0363: stloc.s V_32 + IL_0365: ldloc.s V_32 + IL_0367: ldloc.s V_32 IL_0369: ldloc.s V_32 IL_036b: ldloc.s V_32 - IL_036d: ldloc.s V_32 - IL_036f: ldloc.s V_32 - IL_0371: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_customers() - IL_0376: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_037b: ldloc.s V_32 - IL_037d: newobj instance void Linq101Select01/orders2@91::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_0382: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_036d: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_customers() + IL_0372: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0377: ldloc.s V_32 + IL_0379: newobj instance void Linq101Select01/orders2@91::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_037e: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0387: ldsfld class Linq101Select01/'orders2@93-2' Linq101Select01/'orders2@93-2'::@_instance - IL_038c: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0383: ldsfld class Linq101Select01/'orders2@93-2' Linq101Select01/'orders2@93-2'::@_instance + IL_0388: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0391: ldsfld class Linq101Select01/'orders2@94-3' Linq101Select01/'orders2@94-3'::@_instance - IL_0396: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`3>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_038d: ldsfld class Linq101Select01/'orders2@94-3' Linq101Select01/'orders2@94-3'::@_instance + IL_0392: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`3>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_039b: 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_03a0: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_03a5: dup - IL_03a6: stsfld class [mscorlib]System.Tuple`3[] ''.$Linq101Select01::orders2@89 - IL_03ab: stloc.s orders2 - IL_03ad: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_03b2: stloc.s V_33 + IL_0397: 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_039c: call !!0[] [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToArray>(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_03a1: dup + IL_03a2: stsfld class [mscorlib]System.Tuple`3[] ''.$Linq101Select01::orders2@89 + IL_03a7: stloc.s orders2 + IL_03a9: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_03ae: stloc.s V_33 + IL_03b0: ldloc.s V_33 + IL_03b2: ldloc.s V_33 IL_03b4: ldloc.s V_33 IL_03b6: ldloc.s V_33 - IL_03b8: ldloc.s V_33 - IL_03ba: ldloc.s V_33 - IL_03bc: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_customers() - IL_03c1: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_03c6: ldloc.s V_33 - IL_03c8: newobj instance void Linq101Select01/orders3@100::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_03cd: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_03b8: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_customers() + IL_03bd: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_03c2: ldloc.s V_33 + IL_03c4: newobj instance void Linq101Select01/orders3@100::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_03c9: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_03d2: ldsfld class Linq101Select01/'orders3@102-2' Linq101Select01/'orders3@102-2'::@_instance - IL_03d7: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_03ce: ldsfld class Linq101Select01/'orders3@102-2' Linq101Select01/'orders3@102-2'::@_instance + IL_03d3: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_03dc: ldsfld class Linq101Select01/'orders3@103-3' Linq101Select01/'orders3@103-3'::@_instance - IL_03e1: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`3>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_03d8: ldsfld class Linq101Select01/'orders3@103-3' Linq101Select01/'orders3@103-3'::@_instance + IL_03dd: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`3>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_03e6: 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_03eb: dup - IL_03ec: stsfld class [mscorlib]System.Collections.Generic.IEnumerable`1> ''.$Linq101Select01::orders3@98 - IL_03f1: stloc.s orders3 + IL_03e2: 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_03e7: dup + IL_03e8: stsfld class [mscorlib]System.Collections.Generic.IEnumerable`1> ''.$Linq101Select01::orders3@98 + IL_03ed: stloc.s orders3 .line 107,107 : 1,38 '' - IL_03f3: ldc.i4 0x7cd - IL_03f8: ldc.i4.1 - IL_03f9: ldc.i4.1 - IL_03fa: newobj instance void [mscorlib]System.DateTime::.ctor(int32, + IL_03ef: ldc.i4 0x7cd + IL_03f4: ldc.i4.1 + IL_03f5: ldc.i4.1 + IL_03f6: newobj instance void [mscorlib]System.DateTime::.ctor(int32, int32, int32) - IL_03ff: dup - IL_0400: stsfld valuetype [mscorlib]System.DateTime ''.$Linq101Select01::cutOffDate@107 - IL_0405: stloc.s cutOffDate - IL_0407: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() - IL_040c: stloc.s V_34 + IL_03fb: dup + IL_03fc: stsfld valuetype [mscorlib]System.DateTime ''.$Linq101Select01::cutOffDate@107 + IL_0401: stloc.s cutOffDate + IL_0403: call class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_query() + IL_0408: stloc.s V_34 + IL_040a: ldloc.s V_34 + IL_040c: ldloc.s V_34 IL_040e: ldloc.s V_34 IL_0410: ldloc.s V_34 IL_0412: ldloc.s V_34 IL_0414: ldloc.s V_34 - IL_0416: ldloc.s V_34 - IL_0418: ldloc.s V_34 - IL_041a: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_customers() - IL_041f: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_0424: ldloc.s V_34 - IL_0426: newobj instance void Linq101Select01/orders4@111::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_042b: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0416: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Select01::get_customers() + IL_041b: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Source(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_0420: ldloc.s V_34 + IL_0422: newobj instance void Linq101Select01/orders4@111::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_0427: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0430: ldsfld class Linq101Select01/'orders4@112-1' Linq101Select01/'orders4@112-1'::@_instance - IL_0435: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_042c: ldsfld class Linq101Select01/'orders4@112-1' Linq101Select01/'orders4@112-1'::@_instance + IL_0431: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_043a: ldloc.s V_34 - IL_043c: newobj instance void Linq101Select01/'orders4@111-2'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) - IL_0441: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0436: ldloc.s V_34 + IL_0438: newobj instance void Linq101Select01/'orders4@111-2'::.ctor(class [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder) + IL_043d: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::For,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>) - IL_0446: ldsfld class Linq101Select01/'orders4@114-4' Linq101Select01/'orders4@114-4'::@_instance - IL_044b: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_0442: ldsfld class Linq101Select01/'orders4@114-4' Linq101Select01/'orders4@114-4'::@_instance + IL_0447: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Where,class [mscorlib]System.Collections.IEnumerable>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_0450: ldsfld class Linq101Select01/'orders4@115-5' Linq101Select01/'orders4@115-5'::@_instance - IL_0455: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, + IL_044c: ldsfld class Linq101Select01/'orders4@115-5' Linq101Select01/'orders4@115-5'::@_instance + IL_0451: callvirt instance class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2 [FSharp.Core]Microsoft.FSharp.Linq.QueryBuilder::Select,class [mscorlib]System.Collections.IEnumerable,class [mscorlib]System.Tuple`2>(class [FSharp.Core]Microsoft.FSharp.Linq.QuerySource`2, class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2) - IL_045a: 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_045f: dup - IL_0460: stsfld class [mscorlib]System.Collections.Generic.IEnumerable`1> ''.$Linq101Select01::orders4@109 - IL_0465: stloc.s orders4 - IL_0467: ret + IL_0456: 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_045b: dup + IL_045c: stsfld class [mscorlib]System.Collections.Generic.IEnumerable`1> ''.$Linq101Select01::orders4@109 + IL_0461: stloc.s orders4 + IL_0463: ret } // end of method $Linq101Select01::main@ } // end of class ''.$Linq101Select01 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101SetOperators01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101SetOperators01.il.bsl index 056e0bf87bd..02331dbae8c 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101SetOperators01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101SetOperators01.il.bsl @@ -45,13 +45,13 @@ // Offset: 0x00000390 Length: 0x0000011E } .module Linq101SetOperators01.exe -// MVID: {5FCFFD0D-4EE5-349F-A745-03830DFDCF5F} +// MVID: {60B78A59-4EE5-349F-A745-0383598AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05230000 +// Image base: 0x06940000 // =============== CLASS MEMBERS DECLARATION =================== @@ -100,7 +100,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 154 (0x9a) + // Code size 148 (0x94) .maxstack 6 .locals init ([0] int32 V_0, [1] int32 n) @@ -112,90 +112,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0070 + IL_001b: nop + IL_001c: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006d + IL_001e: nop + IL_001f: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0091 + IL_0021: nop + IL_0022: br.s IL_008b .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 13,13 : 9,33 '' - IL_002b: ldarg.0 - IL_002c: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101SetOperators01::get_factorsOf300() - IL_0031: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0036: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc + IL_0025: ldarg.0 + IL_0026: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101SetOperators01::get_factorsOf300() + IL_002b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0030: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc .line 13,13 : 9,33 '' - IL_0042: ldarg.0 - IL_0043: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' - IL_0048: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_004d: brfalse.s IL_0070 - - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' - IL_0055: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_005a: stloc.0 + IL_003c: ldarg.0 + IL_003d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' + IL_0042: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0047: brfalse.s IL_006a + + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' + IL_004f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0054: stloc.0 .line 13,13 : 9,33 '' - IL_005b: ldloc.0 - IL_005c: stloc.1 - IL_005d: ldarg.0 - IL_005e: ldc.i4.2 - IL_005f: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc + IL_0055: ldloc.0 + IL_0056: stloc.1 .line 14,14 : 9,17 '' - IL_0064: ldarg.0 - IL_0065: ldloc.1 - IL_0066: stfld int32 Linq101SetOperators01/uniqueFactors@13::current - IL_006b: ldc.i4.1 - IL_006c: ret - - .line 100001,100001 : 0,0 '' - IL_006d: nop - IL_006e: br.s IL_0042 - - IL_0070: ldarg.0 - IL_0071: ldc.i4.3 - IL_0072: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc + IL_0057: ldarg.0 + IL_0058: ldc.i4.2 + IL_0059: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc + IL_005e: ldarg.0 + IL_005f: ldloc.1 + IL_0060: stfld int32 Linq101SetOperators01/uniqueFactors@13::current + IL_0065: ldc.i4.1 + IL_0066: ret + + .line 100001,100001 : 0,0 '' + IL_0067: nop + IL_0068: br.s IL_003c + + IL_006a: ldarg.0 + IL_006b: ldc.i4.3 + IL_006c: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc .line 13,13 : 9,33 '' - IL_0077: ldarg.0 - IL_0078: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' - IL_007d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0082: nop - IL_0083: ldarg.0 - IL_0084: ldnull - IL_0085: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' - IL_008a: ldarg.0 - IL_008b: ldc.i4.3 - IL_008c: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc - IL_0091: ldarg.0 + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop + IL_007d: ldarg.0 + IL_007e: ldnull + IL_007f: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' + IL_0084: ldarg.0 + IL_0085: ldc.i4.3 + IL_0086: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc + IL_008b: ldarg.0 + IL_008c: ldc.i4.0 + IL_008d: stfld int32 Linq101SetOperators01/uniqueFactors@13::current IL_0092: ldc.i4.0 - IL_0093: stfld int32 Linq101SetOperators01/uniqueFactors@13::current - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0093: ret } // end of method uniqueFactors@13::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -207,158 +201,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101SetOperators01/uniqueFactors@13::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101SetOperators01/uniqueFactors@13::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/uniqueFactors@13::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc - IL_0068: ldarg.0 - IL_0069: ldc.i4.0 - IL_006a: stfld int32 Linq101SetOperators01/uniqueFactors@13::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101SetOperators01/uniqueFactors@13::pc + IL_005d: ldarg.0 + IL_005e: ldc.i4.0 + IL_005f: stfld int32 Linq101SetOperators01/uniqueFactors@13::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 13,13 : 9,33 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f + IL_0076: nop + IL_0077: br IL_0000 - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method uniqueFactors@13::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101SetOperators01/uniqueFactors@13::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method uniqueFactors@13::get_CheckClose .method public strict virtual instance int32 @@ -475,7 +449,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 167 (0xa7) + // Code size 161 (0xa1) .maxstack 7 .locals init ([0] class [Utils]Utils/Product p) .line 100001,100001 : 0,0 '' @@ -485,91 +459,85 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_007d + IL_001b: nop + IL_001c: br.s IL_0077 .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_007a + IL_001e: nop + IL_001f: br.s IL_0074 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_009e + IL_0021: nop + IL_0022: br.s IL_0098 .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 23,23 : 9,26 '' - IL_002b: ldarg.0 - IL_002c: ldsfld class Linq101SetOperators01/'categoryNames@22-1' Linq101SetOperators01/'categoryNames@22-1'::@_instance - IL_0031: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101SetOperators01::get_products() - IL_0036: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,class [Utils]Utils/Product>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, + IL_0025: ldarg.0 + IL_0026: ldsfld class Linq101SetOperators01/'categoryNames@22-1' Linq101SetOperators01/'categoryNames@22-1'::@_instance + IL_002b: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101SetOperators01::get_products() + IL_0030: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,class [Utils]Utils/Product>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_003b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0040: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' - IL_0045: ldarg.0 - IL_0046: ldc.i4.1 - IL_0047: stfld int32 Linq101SetOperators01/categoryNames@23::pc + IL_0035: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_003a: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' + IL_003f: ldarg.0 + IL_0040: ldc.i4.1 + IL_0041: stfld int32 Linq101SetOperators01/categoryNames@23::pc .line 23,23 : 9,26 '' - IL_004c: ldarg.0 - IL_004d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' - IL_0052: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0057: brfalse.s IL_007d - - IL_0059: ldarg.0 - IL_005a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' - IL_005f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0064: stloc.0 - IL_0065: ldarg.0 - IL_0066: ldc.i4.2 - IL_0067: stfld int32 Linq101SetOperators01/categoryNames@23::pc + IL_0046: ldarg.0 + IL_0047: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' + IL_004c: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0051: brfalse.s IL_0077 + + IL_0053: ldarg.0 + IL_0054: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' + IL_0059: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005e: stloc.0 .line 23,23 : 16,26 '' - IL_006c: ldarg.0 - IL_006d: ldloc.0 - IL_006e: callvirt instance string [Utils]Utils/Product::get_Category() - IL_0073: stfld string Linq101SetOperators01/categoryNames@23::current - IL_0078: ldc.i4.1 - IL_0079: ret + IL_005f: ldarg.0 + IL_0060: ldc.i4.2 + IL_0061: stfld int32 Linq101SetOperators01/categoryNames@23::pc + IL_0066: ldarg.0 + IL_0067: ldloc.0 + IL_0068: callvirt instance string [Utils]Utils/Product::get_Category() + IL_006d: stfld string Linq101SetOperators01/categoryNames@23::current + IL_0072: ldc.i4.1 + IL_0073: ret .line 100001,100001 : 0,0 '' - IL_007a: nop - IL_007b: br.s IL_004c + IL_0074: nop + IL_0075: br.s IL_0046 - IL_007d: ldarg.0 - IL_007e: ldc.i4.3 - IL_007f: stfld int32 Linq101SetOperators01/categoryNames@23::pc + IL_0077: ldarg.0 + IL_0078: ldc.i4.3 + IL_0079: stfld int32 Linq101SetOperators01/categoryNames@23::pc .line 23,23 : 9,26 '' - IL_0084: ldarg.0 - IL_0085: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' - IL_008a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_008f: nop - IL_0090: ldarg.0 - IL_0091: ldnull - IL_0092: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' - IL_0097: ldarg.0 - IL_0098: ldc.i4.3 - IL_0099: stfld int32 Linq101SetOperators01/categoryNames@23::pc - IL_009e: ldarg.0 - IL_009f: ldnull - IL_00a0: stfld string Linq101SetOperators01/categoryNames@23::current - IL_00a5: ldc.i4.0 - IL_00a6: ret + IL_007e: ldarg.0 + IL_007f: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' + IL_0084: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0089: nop + IL_008a: ldarg.0 + IL_008b: ldnull + IL_008c: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' + IL_0091: ldarg.0 + IL_0092: ldc.i4.3 + IL_0093: stfld int32 Linq101SetOperators01/categoryNames@23::pc + IL_0098: ldarg.0 + IL_0099: ldnull + IL_009a: stfld string Linq101SetOperators01/categoryNames@23::current + IL_009f: ldc.i4.0 + IL_00a0: ret } // end of method categoryNames@23::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -581,158 +549,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101SetOperators01/categoryNames@23::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101SetOperators01/categoryNames@23::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101SetOperators01/categoryNames@23::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101SetOperators01/categoryNames@23::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/categoryNames@23::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101SetOperators01/categoryNames@23::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld string Linq101SetOperators01/categoryNames@23::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101SetOperators01/categoryNames@23::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld string Linq101SetOperators01/categoryNames@23::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 23,23 : 9,26 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 + IL_0076: nop + IL_0077: br IL_0000 - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f - - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method categoryNames@23::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101SetOperators01/categoryNames@23::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method categoryNames@23::get_CheckClose .method public strict virtual instance string @@ -849,7 +797,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 176 (0xb0) + // Code size 170 (0xaa) .maxstack 7 .locals init ([0] class [Utils]Utils/Product p) .line 100001,100001 : 0,0 '' @@ -859,93 +807,87 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002d - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0027 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0086 + IL_001b: nop + IL_001c: br.s IL_0080 .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_0083 + IL_001e: nop + IL_001f: br.s IL_007d .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br IL_00a7 + IL_0021: nop + IL_0022: br IL_00a1 .line 100001,100001 : 0,0 '' - IL_002d: nop + IL_0027: nop .line 33,33 : 9,33 '' - IL_002e: ldarg.0 - IL_002f: ldsfld class Linq101SetOperators01/'productFirstChars@32-1' Linq101SetOperators01/'productFirstChars@32-1'::@_instance - IL_0034: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101SetOperators01::get_products() - IL_0039: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,class [Utils]Utils/Product>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, + IL_0028: ldarg.0 + IL_0029: ldsfld class Linq101SetOperators01/'productFirstChars@32-1' Linq101SetOperators01/'productFirstChars@32-1'::@_instance + IL_002e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101SetOperators01::get_products() + IL_0033: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,class [Utils]Utils/Product>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_003e: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0043: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' - IL_0048: ldarg.0 - IL_0049: ldc.i4.1 - IL_004a: stfld int32 Linq101SetOperators01/productFirstChars@33::pc + IL_0038: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_003d: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' + IL_0042: ldarg.0 + IL_0043: ldc.i4.1 + IL_0044: stfld int32 Linq101SetOperators01/productFirstChars@33::pc .line 33,33 : 9,33 '' - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' - IL_0055: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_005a: brfalse.s IL_0086 - - IL_005c: ldarg.0 - IL_005d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' - IL_0062: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0067: stloc.0 - IL_0068: ldarg.0 - IL_0069: ldc.i4.2 - IL_006a: stfld int32 Linq101SetOperators01/productFirstChars@33::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' + IL_004f: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0054: brfalse.s IL_0080 + + IL_0056: ldarg.0 + IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' + IL_005c: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0061: stloc.0 .line 33,33 : 29,30 '' - IL_006f: ldarg.0 - IL_0070: ldloc.0 - IL_0071: callvirt instance string [Utils]Utils/Product::get_ProductName() - IL_0076: ldc.i4.0 - IL_0077: callvirt instance char [netstandard]System.String::get_Chars(int32) - IL_007c: stfld char Linq101SetOperators01/productFirstChars@33::current - IL_0081: ldc.i4.1 - IL_0082: ret - - .line 100001,100001 : 0,0 '' - IL_0083: nop - IL_0084: br.s IL_004f - - IL_0086: ldarg.0 - IL_0087: ldc.i4.3 - IL_0088: stfld int32 Linq101SetOperators01/productFirstChars@33::pc + IL_0062: ldarg.0 + IL_0063: ldc.i4.2 + IL_0064: stfld int32 Linq101SetOperators01/productFirstChars@33::pc + IL_0069: ldarg.0 + IL_006a: ldloc.0 + IL_006b: callvirt instance string [Utils]Utils/Product::get_ProductName() + IL_0070: ldc.i4.0 + IL_0071: callvirt instance char [netstandard]System.String::get_Chars(int32) + IL_0076: stfld char Linq101SetOperators01/productFirstChars@33::current + IL_007b: ldc.i4.1 + IL_007c: ret + + .line 100001,100001 : 0,0 '' + IL_007d: nop + IL_007e: br.s IL_0049 + + IL_0080: ldarg.0 + IL_0081: ldc.i4.3 + IL_0082: stfld int32 Linq101SetOperators01/productFirstChars@33::pc .line 33,33 : 9,33 '' - IL_008d: ldarg.0 - IL_008e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' - IL_0093: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0098: nop - IL_0099: ldarg.0 - IL_009a: ldnull - IL_009b: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' - IL_00a0: ldarg.0 - IL_00a1: ldc.i4.3 - IL_00a2: stfld int32 Linq101SetOperators01/productFirstChars@33::pc - IL_00a7: ldarg.0 + IL_0087: ldarg.0 + IL_0088: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' + IL_008d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0092: nop + IL_0093: ldarg.0 + IL_0094: ldnull + IL_0095: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' + IL_009a: ldarg.0 + IL_009b: ldc.i4.3 + IL_009c: stfld int32 Linq101SetOperators01/productFirstChars@33::pc + IL_00a1: ldarg.0 + IL_00a2: ldc.i4.0 + IL_00a3: stfld char Linq101SetOperators01/productFirstChars@33::current IL_00a8: ldc.i4.0 - IL_00a9: stfld char Linq101SetOperators01/productFirstChars@33::current - IL_00ae: ldc.i4.0 - IL_00af: ret + IL_00a9: ret } // end of method productFirstChars@33::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -957,158 +899,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101SetOperators01/productFirstChars@33::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101SetOperators01/productFirstChars@33::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101SetOperators01/productFirstChars@33::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101SetOperators01/productFirstChars@33::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/productFirstChars@33::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101SetOperators01/productFirstChars@33::pc - IL_0068: ldarg.0 - IL_0069: ldc.i4.0 - IL_006a: stfld char Linq101SetOperators01/productFirstChars@33::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101SetOperators01/productFirstChars@33::pc + IL_005d: ldarg.0 + IL_005e: ldc.i4.0 + IL_005f: stfld char Linq101SetOperators01/productFirstChars@33::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 33,33 : 9,33 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f + IL_0076: nop + IL_0077: br IL_0000 - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method productFirstChars@33::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101SetOperators01/productFirstChars@33::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method productFirstChars@33::get_CheckClose .method public strict virtual instance char @@ -1225,7 +1147,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 176 (0xb0) + // Code size 170 (0xaa) .maxstack 7 .locals init ([0] class [Utils]Utils/Customer c) .line 100001,100001 : 0,0 '' @@ -1235,93 +1157,87 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002d - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0027 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0086 + IL_001b: nop + IL_001c: br.s IL_0080 .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_0083 + IL_001e: nop + IL_001f: br.s IL_007d .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br IL_00a7 + IL_0021: nop + IL_0022: br IL_00a1 .line 100001,100001 : 0,0 '' - IL_002d: nop + IL_0027: nop .line 39,39 : 9,33 '' - IL_002e: ldarg.0 - IL_002f: ldsfld class Linq101SetOperators01/'customerFirstChars@38-1' Linq101SetOperators01/'customerFirstChars@38-1'::@_instance - IL_0034: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101SetOperators01::get_customers() - IL_0039: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,class [Utils]Utils/Customer>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, + IL_0028: ldarg.0 + IL_0029: ldsfld class Linq101SetOperators01/'customerFirstChars@38-1' Linq101SetOperators01/'customerFirstChars@38-1'::@_instance + IL_002e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101SetOperators01::get_customers() + IL_0033: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,class [Utils]Utils/Customer>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_003e: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0043: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' - IL_0048: ldarg.0 - IL_0049: ldc.i4.1 - IL_004a: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc + IL_0038: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_003d: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' + IL_0042: ldarg.0 + IL_0043: ldc.i4.1 + IL_0044: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc .line 39,39 : 9,33 '' - IL_004f: ldarg.0 - IL_0050: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' - IL_0055: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_005a: brfalse.s IL_0086 - - IL_005c: ldarg.0 - IL_005d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' - IL_0062: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0067: stloc.0 - IL_0068: ldarg.0 - IL_0069: ldc.i4.2 - IL_006a: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' + IL_004f: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0054: brfalse.s IL_0080 + + IL_0056: ldarg.0 + IL_0057: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' + IL_005c: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_0061: stloc.0 .line 39,39 : 29,30 '' - IL_006f: ldarg.0 - IL_0070: ldloc.0 - IL_0071: callvirt instance string [Utils]Utils/Customer::get_CompanyName() - IL_0076: ldc.i4.0 - IL_0077: callvirt instance char [netstandard]System.String::get_Chars(int32) - IL_007c: stfld char Linq101SetOperators01/customerFirstChars@39::current - IL_0081: ldc.i4.1 - IL_0082: ret - - .line 100001,100001 : 0,0 '' - IL_0083: nop - IL_0084: br.s IL_004f - - IL_0086: ldarg.0 - IL_0087: ldc.i4.3 - IL_0088: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc + IL_0062: ldarg.0 + IL_0063: ldc.i4.2 + IL_0064: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc + IL_0069: ldarg.0 + IL_006a: ldloc.0 + IL_006b: callvirt instance string [Utils]Utils/Customer::get_CompanyName() + IL_0070: ldc.i4.0 + IL_0071: callvirt instance char [netstandard]System.String::get_Chars(int32) + IL_0076: stfld char Linq101SetOperators01/customerFirstChars@39::current + IL_007b: ldc.i4.1 + IL_007c: ret + + .line 100001,100001 : 0,0 '' + IL_007d: nop + IL_007e: br.s IL_0049 + + IL_0080: ldarg.0 + IL_0081: ldc.i4.3 + IL_0082: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc .line 39,39 : 9,33 '' - IL_008d: ldarg.0 - IL_008e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' - IL_0093: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0098: nop - IL_0099: ldarg.0 - IL_009a: ldnull - IL_009b: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' - IL_00a0: ldarg.0 - IL_00a1: ldc.i4.3 - IL_00a2: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc - IL_00a7: ldarg.0 + IL_0087: ldarg.0 + IL_0088: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' + IL_008d: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0092: nop + IL_0093: ldarg.0 + IL_0094: ldnull + IL_0095: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' + IL_009a: ldarg.0 + IL_009b: ldc.i4.3 + IL_009c: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc + IL_00a1: ldarg.0 + IL_00a2: ldc.i4.0 + IL_00a3: stfld char Linq101SetOperators01/customerFirstChars@39::current IL_00a8: ldc.i4.0 - IL_00a9: stfld char Linq101SetOperators01/customerFirstChars@39::current - IL_00ae: ldc.i4.0 - IL_00af: ret + IL_00a9: ret } // end of method customerFirstChars@39::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -1333,158 +1249,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101SetOperators01/customerFirstChars@39::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101SetOperators01/customerFirstChars@39::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101SetOperators01/customerFirstChars@39::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc - IL_0068: ldarg.0 - IL_0069: ldc.i4.0 - IL_006a: stfld char Linq101SetOperators01/customerFirstChars@39::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101SetOperators01/customerFirstChars@39::pc + IL_005d: ldarg.0 + IL_005e: ldc.i4.0 + IL_005f: stfld char Linq101SetOperators01/customerFirstChars@39::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 39,39 : 9,33 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f + IL_0076: nop + IL_0077: br IL_0000 - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method customerFirstChars@39::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101SetOperators01/customerFirstChars@39::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method customerFirstChars@39::get_CheckClose .method public strict virtual instance char diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Where01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Where01.il.bsl index 4f10a3e66f0..b60623e8746 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Where01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Linq101Where01.il.bsl @@ -45,13 +45,13 @@ // Offset: 0x000003D0 Length: 0x0000012E } .module Linq101Where01.exe -// MVID: {5FCFFD0D-FF23-CD21-A745-03830DFDCF5F} +// MVID: {60B78A59-FF23-CD21-A745-0383598AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00C30000 +// Image base: 0x06550000 // =============== CLASS MEMBERS DECLARATION =================== @@ -363,38 +363,34 @@ .method public strict virtual instance bool Invoke(class [Utils]Utils/Product p) cil managed { - // Code size 41 (0x29) + // Code size 37 (0x25) .maxstack 10 .line 100001,100001 : 0,0 '' IL_0000: ldarg.1 IL_0001: callvirt instance int32 [Utils]Utils/Product::get_UnitsInStock() IL_0006: ldc.i4.0 - IL_0007: ble.s IL_000b - - IL_0009: br.s IL_000d - - IL_000b: br.s IL_0027 + IL_0007: ble.s IL_0023 .line 100001,100001 : 0,0 '' - IL_000d: ldarg.1 - IL_000e: callvirt instance valuetype [mscorlib]System.Decimal [Utils]Utils/Product::get_UnitPrice() - IL_0013: ldc.i4 0x12c - IL_0018: ldc.i4.0 - IL_0019: ldc.i4.0 - IL_001a: ldc.i4.0 - IL_001b: ldc.i4.2 - IL_001c: newobj instance void [netstandard]System.Decimal::.ctor(int32, + IL_0009: ldarg.1 + IL_000a: callvirt instance valuetype [mscorlib]System.Decimal [Utils]Utils/Product::get_UnitPrice() + IL_000f: ldc.i4 0x12c + IL_0014: ldc.i4.0 + IL_0015: ldc.i4.0 + IL_0016: ldc.i4.0 + IL_0017: ldc.i4.2 + IL_0018: newobj instance void [netstandard]System.Decimal::.ctor(int32, int32, int32, bool, uint8) - IL_0021: call bool [netstandard]System.Decimal::op_GreaterThan(valuetype [netstandard]System.Decimal, + IL_001d: call bool [netstandard]System.Decimal::op_GreaterThan(valuetype [netstandard]System.Decimal, valuetype [netstandard]System.Decimal) - IL_0026: ret + IL_0022: ret .line 100001,100001 : 0,0 '' - IL_0027: ldc.i4.0 - IL_0028: ret + IL_0023: ldc.i4.0 + IL_0024: ret } // end of method 'expensiveInStockProducts@33-1'::Invoke .method private specialname rtspecialname static @@ -629,26 +625,22 @@ Invoke(int32 i, string d) cil managed { - // Code size 22 (0x16) + // Code size 18 (0x12) .maxstack 8 .line 54,54 : 29,49 '' IL_0000: ldarg.2 IL_0001: callvirt instance int32 [mscorlib]System.String::get_Length() IL_0006: ldarg.1 - IL_0007: bge.s IL_000b - - IL_0009: br.s IL_000d - - IL_000b: br.s IL_0014 + IL_0007: bge.s IL_0010 .line 54,54 : 50,57 '' - IL_000d: ldarg.2 - IL_000e: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::Some(!0) - IL_0013: ret + IL_0009: ldarg.2 + IL_000a: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::Some(!0) + IL_000f: ret .line 54,54 : 63,67 '' - IL_0014: ldnull - IL_0015: ret + IL_0010: ldnull + IL_0011: ret } // end of method 'shortDigits@54-1'::Invoke .method private specialname rtspecialname static @@ -747,7 +739,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 162 (0xa2) + // Code size 156 (0x9c) .maxstack 7 .locals init ([0] string d) .line 100001,100001 : 0,0 '' @@ -757,90 +749,84 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0078 + IL_001b: nop + IL_001c: br.s IL_0072 .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_0075 + IL_001e: nop + IL_001f: br.s IL_006f .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0099 + IL_0021: nop + IL_0022: br.s IL_0093 .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 52,52 : 9,17 '' - IL_002b: ldarg.0 - IL_002c: ldsfld class Linq101Where01/'shortDigits@51-3' Linq101Where01/'shortDigits@51-3'::@_instance - IL_0031: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Where01::get_digits() - IL_0036: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,string>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, + IL_0025: ldarg.0 + IL_0026: ldsfld class Linq101Where01/'shortDigits@51-3' Linq101Where01/'shortDigits@51-3'::@_instance + IL_002b: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 Linq101Where01::get_digits() + IL_0030: call class [mscorlib]System.Collections.Generic.IEnumerable`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::Collect,string>(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_003b: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0040: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' - IL_0045: ldarg.0 - IL_0046: ldc.i4.1 - IL_0047: stfld int32 Linq101Where01/'shortDigits@52-2'::pc + IL_0035: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_003a: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' + IL_003f: ldarg.0 + IL_0040: ldc.i4.1 + IL_0041: stfld int32 Linq101Where01/'shortDigits@52-2'::pc .line 52,52 : 9,17 '' - IL_004c: ldarg.0 - IL_004d: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' - IL_0052: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0057: brfalse.s IL_0078 - - IL_0059: ldarg.0 - IL_005a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' - IL_005f: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0064: stloc.0 - IL_0065: ldarg.0 - IL_0066: ldc.i4.2 - IL_0067: stfld int32 Linq101Where01/'shortDigits@52-2'::pc + IL_0046: ldarg.0 + IL_0047: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' + IL_004c: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_0051: brfalse.s IL_0072 + + IL_0053: ldarg.0 + IL_0054: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' + IL_0059: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_005e: stloc.0 .line 52,52 : 16,17 '' - IL_006c: ldarg.0 - IL_006d: ldloc.0 - IL_006e: stfld string Linq101Where01/'shortDigits@52-2'::current - IL_0073: ldc.i4.1 - IL_0074: ret + IL_005f: ldarg.0 + IL_0060: ldc.i4.2 + IL_0061: stfld int32 Linq101Where01/'shortDigits@52-2'::pc + IL_0066: ldarg.0 + IL_0067: ldloc.0 + IL_0068: stfld string Linq101Where01/'shortDigits@52-2'::current + IL_006d: ldc.i4.1 + IL_006e: ret .line 100001,100001 : 0,0 '' - IL_0075: nop - IL_0076: br.s IL_004c + IL_006f: nop + IL_0070: br.s IL_0046 - IL_0078: ldarg.0 - IL_0079: ldc.i4.3 - IL_007a: stfld int32 Linq101Where01/'shortDigits@52-2'::pc + IL_0072: ldarg.0 + IL_0073: ldc.i4.3 + IL_0074: stfld int32 Linq101Where01/'shortDigits@52-2'::pc .line 52,52 : 9,17 '' - IL_007f: ldarg.0 - IL_0080: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' - IL_0085: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_008a: nop - IL_008b: ldarg.0 - IL_008c: ldnull - IL_008d: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' - IL_0092: ldarg.0 - IL_0093: ldc.i4.3 - IL_0094: stfld int32 Linq101Where01/'shortDigits@52-2'::pc - IL_0099: ldarg.0 - IL_009a: ldnull - IL_009b: stfld string Linq101Where01/'shortDigits@52-2'::current - IL_00a0: ldc.i4.0 - IL_00a1: ret + IL_0079: ldarg.0 + IL_007a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' + IL_007f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0084: nop + IL_0085: ldarg.0 + IL_0086: ldnull + IL_0087: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' + IL_008c: ldarg.0 + IL_008d: ldc.i4.3 + IL_008e: stfld int32 Linq101Where01/'shortDigits@52-2'::pc + IL_0093: ldarg.0 + IL_0094: ldnull + IL_0095: stfld string Linq101Where01/'shortDigits@52-2'::current + IL_009a: ldc.i4.0 + IL_009b: ret } // end of method 'shortDigits@52-2'::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 148 (0x94) + // Code size 133 (0x85) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -852,158 +838,138 @@ IL_0007: sub IL_0008: switch ( IL_0013) - IL_0011: br.s IL_0019 + IL_0011: br.s IL_0016 .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_0087 + IL_0014: br.s IL_007c .line 100001,100001 : 0,0 '' - IL_0019: nop + IL_0016: nop .try { - IL_001a: ldarg.0 - IL_001b: ldfld int32 Linq101Where01/'shortDigits@52-2'::pc - IL_0020: switch ( + IL_0017: ldarg.0 + IL_0018: ldfld int32 Linq101Where01/'shortDigits@52-2'::pc + IL_001d: switch ( + IL_0034, IL_0037, - IL_0039, - IL_003b, + IL_003a, IL_003d) - IL_0035: br.s IL_004b - - IL_0037: br.s IL_003f - - IL_0039: br.s IL_0042 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 + IL_0032: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br.s IL_0061 + IL_0034: nop + IL_0035: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0042: nop - IL_0043: br.s IL_004d + IL_0037: nop + IL_0038: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004c + IL_003a: nop + IL_003b: br.s IL_0041 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0061 + IL_003d: nop + IL_003e: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_004b: nop + IL_0040: nop .line 100001,100001 : 0,0 '' - IL_004c: nop - IL_004d: ldarg.0 - IL_004e: ldc.i4.3 - IL_004f: stfld int32 Linq101Where01/'shortDigits@52-2'::pc - IL_0054: ldarg.0 - IL_0055: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' - IL_005a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_005f: nop + IL_0041: nop + IL_0042: ldarg.0 + IL_0043: ldc.i4.3 + IL_0044: stfld int32 Linq101Where01/'shortDigits@52-2'::pc + IL_0049: ldarg.0 + IL_004a: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 Linq101Where01/'shortDigits@52-2'::'enum' + IL_004f: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0054: nop .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.3 - IL_0063: stfld int32 Linq101Where01/'shortDigits@52-2'::pc - IL_0068: ldarg.0 - IL_0069: ldnull - IL_006a: stfld string Linq101Where01/'shortDigits@52-2'::current - IL_006f: ldnull - IL_0070: stloc.1 - IL_0071: leave.s IL_007f + IL_0055: nop + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 Linq101Where01/'shortDigits@52-2'::pc + IL_005d: ldarg.0 + IL_005e: ldnull + IL_005f: stfld string Linq101Where01/'shortDigits@52-2'::current + IL_0064: ldnull + IL_0065: stloc.1 + IL_0066: leave.s IL_0074 } // end .try catch [mscorlib]System.Object { - IL_0073: castclass [mscorlib]System.Exception - IL_0078: stloc.2 + IL_0068: castclass [mscorlib]System.Exception + IL_006d: stloc.2 .line 52,52 : 9,17 '' - IL_0079: ldloc.2 - IL_007a: stloc.0 - IL_007b: ldnull - IL_007c: stloc.1 - IL_007d: leave.s IL_007f + IL_006e: ldloc.2 + IL_006f: stloc.0 + IL_0070: ldnull + IL_0071: stloc.1 + IL_0072: leave.s IL_0074 .line 100001,100001 : 0,0 '' } // end handler - IL_007f: ldloc.1 - IL_0080: pop + IL_0074: ldloc.1 + IL_0075: pop .line 100001,100001 : 0,0 '' - IL_0081: nop - IL_0082: br IL_0000 - - IL_0087: ldloc.0 - IL_0088: ldnull - IL_0089: cgt.un - IL_008b: brfalse.s IL_008f + IL_0076: nop + IL_0077: br IL_0000 - IL_008d: br.s IL_0091 - - IL_008f: br.s IL_0093 + IL_007c: ldloc.0 + IL_007d: ldnull + IL_007e: cgt.un + IL_0080: brfalse.s IL_0084 .line 100001,100001 : 0,0 '' - IL_0091: ldloc.0 - IL_0092: throw + IL_0082: ldloc.0 + IL_0083: throw .line 100001,100001 : 0,0 '' - IL_0093: ret + IL_0084: ret } // end of method 'shortDigits@52-2'::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 Linq101Where01/'shortDigits@52-2'::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.1 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.1 + IL_002b: ret - IL_0034: ldc.i4.1 - IL_0035: ret + IL_002c: ldc.i4.1 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method 'shortDigits@52-2'::get_CheckClose .method public strict virtual instance string diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest1.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest1.il.bsl index 884c03da12a..7ea3b26508c 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest1.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest1.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly SeqExpressionSteppingTest1 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SeqExpressionSteppingTest1 { - // Offset: 0x00000000 Length: 0x00000267 + // Offset: 0x00000000 Length: 0x00000263 } .mresource public FSharpOptimizationData.SeqExpressionSteppingTest1 { - // Offset: 0x00000270 Length: 0x000000AD + // Offset: 0x00000268 Length: 0x000000AD } .module SeqExpressionSteppingTest1.exe -// MVID: {59B19240-2432-947D-A745-03834092B159} +// MVID: {60B78A59-2432-947D-A745-0383598AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x002D0000 +// Image base: 0x06A30000 // =============== CLASS MEMBERS DECLARATION =================== @@ -87,51 +87,47 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 66 (0x42) - .maxstack 6 + // Code size 62 (0x3e) + .maxstack 8 .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\\SeqExpressionSteppingTest1.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SeqExpressionStepping\\SeqExpressionSteppingTest1.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest1/SeqExpressionSteppingTest1/f0@6::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 + IL_001a) + IL_0015: br.s IL_001d .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_0032 + IL_0017: nop + IL_0018: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0039 + IL_001a: nop + IL_001b: br.s IL_0035 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: ldarg.0 - IL_0023: ldc.i4.1 - IL_0024: stfld int32 SeqExpressionSteppingTest1/SeqExpressionSteppingTest1/f0@6::pc + IL_001d: nop .line 6,6 : 15,22 '' - IL_0029: ldarg.0 - IL_002a: ldc.i4.1 - IL_002b: stfld int32 SeqExpressionSteppingTest1/SeqExpressionSteppingTest1/f0@6::current - IL_0030: ldc.i4.1 - IL_0031: ret - - IL_0032: ldarg.0 - IL_0033: ldc.i4.2 - IL_0034: stfld int32 SeqExpressionSteppingTest1/SeqExpressionSteppingTest1/f0@6::pc - IL_0039: ldarg.0 - IL_003a: ldc.i4.0 - IL_003b: stfld int32 SeqExpressionSteppingTest1/SeqExpressionSteppingTest1/f0@6::current - IL_0040: ldc.i4.0 - IL_0041: ret + IL_001e: ldarg.0 + IL_001f: ldc.i4.1 + IL_0020: stfld int32 SeqExpressionSteppingTest1/SeqExpressionSteppingTest1/f0@6::pc + IL_0025: ldarg.0 + IL_0026: ldc.i4.1 + IL_0027: stfld int32 SeqExpressionSteppingTest1/SeqExpressionSteppingTest1/f0@6::current + IL_002c: ldc.i4.1 + IL_002d: ret + + IL_002e: ldarg.0 + IL_002f: ldc.i4.2 + IL_0030: stfld int32 SeqExpressionSteppingTest1/SeqExpressionSteppingTest1/f0@6::pc + IL_0035: ldarg.0 + IL_0036: ldc.i4.0 + IL_0037: stfld int32 SeqExpressionSteppingTest1/SeqExpressionSteppingTest1/f0@6::current + IL_003c: ldc.i4.0 + IL_003d: ret } // end of method f0@6::GenerateNext .method public strict virtual instance void @@ -148,42 +144,36 @@ .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 45 (0x2d) + // Code size 39 (0x27) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest1/SeqExpressionSteppingTest1/f0@6::pc IL_0006: switch ( IL_0019, - IL_001b, - IL_001d) - IL_0017: br.s IL_0028 - - IL_0019: br.s IL_001f - - IL_001b: br.s IL_0022 - - IL_001d: br.s IL_0025 + IL_001c, + IL_001f) + IL_0017: br.s IL_0022 .line 100001,100001 : 0,0 '' - IL_001f: nop - IL_0020: br.s IL_002b + IL_0019: nop + IL_001a: br.s IL_0025 .line 100001,100001 : 0,0 '' - IL_0022: nop - IL_0023: br.s IL_0029 + IL_001c: nop + IL_001d: br.s IL_0023 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_002b + IL_001f: nop + IL_0020: br.s IL_0025 .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: ldc.i4.0 - IL_002a: ret + IL_0022: nop + IL_0023: ldc.i4.0 + IL_0024: ret - IL_002b: ldc.i4.0 - IL_002c: ret + IL_0025: ldc.i4.0 + IL_0026: ret } // end of method f0@6::get_CheckClose .method public strict virtual instance int32 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest2.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest2.il.bsl index e5450059c32..f061027f197 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest2.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest2.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly SeqExpressionSteppingTest2 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SeqExpressionSteppingTest2 { - // Offset: 0x00000000 Length: 0x00000267 + // Offset: 0x00000000 Length: 0x00000263 } .mresource public FSharpOptimizationData.SeqExpressionSteppingTest2 { - // Offset: 0x00000270 Length: 0x000000AD + // Offset: 0x00000268 Length: 0x000000AD } .module SeqExpressionSteppingTest2.exe -// MVID: {59B19240-2432-951E-A745-03834092B159} +// MVID: {60B78A59-2432-951E-A745-0383598AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00690000 +// Image base: 0x06BF0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -87,78 +87,72 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 123 (0x7b) + // Code size 117 (0x75) .maxstack 6 .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\\SeqExpressionSteppingTest2.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SeqExpressionStepping\\SeqExpressionSteppingTest2.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::pc IL_0006: ldc.i4.1 IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_004b + IL_001b: nop + IL_001c: br.s IL_0045 .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_006b + IL_001e: nop + IL_001f: br.s IL_0065 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0072 + IL_0021: nop + IL_0022: br.s IL_006c .line 100001,100001 : 0,0 '' - IL_002a: nop + IL_0024: nop .line 5,5 : 15,30 '' - IL_002b: ldstr "hello" - IL_0030: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0035: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_003a: pop - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::pc + IL_0025: ldstr "hello" + IL_002a: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_002f: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_0034: pop .line 6,6 : 15,22 '' - IL_0042: ldarg.0 + IL_0035: ldarg.0 + IL_0036: ldc.i4.1 + IL_0037: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::pc + IL_003c: ldarg.0 + IL_003d: ldc.i4.1 + IL_003e: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::current IL_0043: ldc.i4.1 - IL_0044: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::current - IL_0049: ldc.i4.1 - IL_004a: ret + IL_0044: ret .line 7,7 : 15,32 '' - IL_004b: ldstr "goodbye" - IL_0050: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0055: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_005a: pop - IL_005b: ldarg.0 - IL_005c: ldc.i4.2 - IL_005d: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::pc + IL_0045: ldstr "goodbye" + IL_004a: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_004f: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_0054: pop .line 8,8 : 15,22 '' - IL_0062: ldarg.0 - IL_0063: ldc.i4.2 - IL_0064: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::current - IL_0069: ldc.i4.1 - IL_006a: ret - - IL_006b: ldarg.0 - IL_006c: ldc.i4.3 - IL_006d: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::pc - IL_0072: ldarg.0 + IL_0055: ldarg.0 + IL_0056: ldc.i4.2 + IL_0057: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::pc + IL_005c: ldarg.0 + IL_005d: ldc.i4.2 + IL_005e: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::current + IL_0063: ldc.i4.1 + IL_0064: ret + + IL_0065: ldarg.0 + IL_0066: ldc.i4.3 + IL_0067: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::pc + IL_006c: ldarg.0 + IL_006d: ldc.i4.0 + IL_006e: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::current IL_0073: ldc.i4.0 - IL_0074: stfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::current - IL_0079: ldc.i4.0 - IL_007a: ret + IL_0074: ret } // end of method f1@5::GenerateNext .method public strict virtual instance void @@ -175,52 +169,44 @@ .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest2/SeqExpressionSteppingTest2/f1@5::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.0 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.0 + IL_002b: ret - IL_0034: ldc.i4.0 - IL_0035: ret + IL_002c: ldc.i4.0 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method f1@5::get_CheckClose .method public strict virtual instance int32 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest3.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest3.il.bsl index 37e1a739636..d227238134d 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest3.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest3.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly SeqExpressionSteppingTest3 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SeqExpressionSteppingTest3 { - // Offset: 0x00000000 Length: 0x00000277 + // Offset: 0x00000000 Length: 0x00000273 } .mresource public FSharpOptimizationData.SeqExpressionSteppingTest3 { - // Offset: 0x00000280 Length: 0x000000AD + // Offset: 0x00000278 Length: 0x000000AD } .module SeqExpressionSteppingTest3.exe -// MVID: {59B19240-2432-943F-A745-03834092B159} +// MVID: {60B78A59-2432-943F-A745-0383598AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x02660000 +// Image base: 0x065D0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -92,73 +92,69 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1>& next) cil managed { - // Code size 116 (0x74) + // Code size 112 (0x70) .maxstack 6 .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\\SeqExpressionSteppingTest3.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SeqExpressionStepping\\SeqExpressionSteppingTest3.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::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 + IL_001a) + IL_0015: br.s IL_001d .line 100001,100001 : 0,0 '' - IL_001b: nop - IL_001c: br.s IL_0061 + IL_0017: nop + IL_0018: br.s IL_005d .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_006b + IL_001a: nop + IL_001b: br.s IL_0067 .line 100001,100001 : 0,0 '' - IL_0021: nop - .line 6,6 : 21,27 '' - IL_0022: ldarg.0 - IL_0023: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::x - IL_0028: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_002d: ldc.i4.4 - IL_002e: bge.s IL_0064 + IL_001d: nop + .line 6,6 : 15,27 '' + IL_001e: ldarg.0 + IL_001f: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::x + IL_0024: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0029: ldc.i4.4 + IL_002a: bge.s IL_0060 .line 7,7 : 18,24 '' - IL_0030: ldarg.0 - IL_0031: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::x - IL_0036: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_003b: nop + IL_002c: ldarg.0 + IL_002d: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::x + IL_0032: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0037: nop .line 8,8 : 18,33 '' - IL_003c: ldstr "hello" - IL_0041: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0046: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_004b: pop - IL_004c: ldarg.0 - IL_004d: ldc.i4.1 - IL_004e: stfld int32 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::pc + IL_0038: ldstr "hello" + IL_003d: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0042: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_0047: pop .line 9,9 : 18,25 '' - IL_0053: ldarg.0 - IL_0054: ldarg.0 - IL_0055: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::x - IL_005a: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::current - IL_005f: ldc.i4.1 - IL_0060: ret + IL_0048: ldarg.0 + IL_0049: ldc.i4.1 + IL_004a: stfld int32 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::pc + IL_004f: ldarg.0 + IL_0050: ldarg.0 + IL_0051: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::x + IL_0056: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::current + IL_005b: ldc.i4.1 + IL_005c: ret .line 100001,100001 : 0,0 '' - IL_0061: nop - IL_0062: br.s IL_0022 - - IL_0064: ldarg.0 - IL_0065: ldc.i4.2 - IL_0066: stfld int32 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::pc - IL_006b: ldarg.0 - IL_006c: ldnull - IL_006d: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::current - IL_0072: ldc.i4.0 - IL_0073: ret + IL_005d: nop + IL_005e: br.s IL_001e + + IL_0060: ldarg.0 + IL_0061: ldc.i4.2 + IL_0062: stfld int32 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::pc + IL_0067: ldarg.0 + IL_0068: ldnull + IL_0069: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::current + IL_006e: ldc.i4.0 + IL_006f: ret } // end of method f2@6::GenerateNext .method public strict virtual instance void @@ -175,42 +171,36 @@ .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 45 (0x2d) + // Code size 39 (0x27) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest3/SeqExpressionSteppingTest3/f2@6::pc IL_0006: switch ( IL_0019, - IL_001b, - IL_001d) - IL_0017: br.s IL_0028 - - IL_0019: br.s IL_001f - - IL_001b: br.s IL_0022 - - IL_001d: br.s IL_0025 + IL_001c, + IL_001f) + IL_0017: br.s IL_0022 .line 100001,100001 : 0,0 '' - IL_001f: nop - IL_0020: br.s IL_002b + IL_0019: nop + IL_001a: br.s IL_0025 .line 100001,100001 : 0,0 '' - IL_0022: nop - IL_0023: br.s IL_0029 + IL_001c: nop + IL_001d: br.s IL_0023 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_002b + IL_001f: nop + IL_0020: br.s IL_0025 .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: ldc.i4.0 - IL_002a: ret + IL_0022: nop + IL_0023: ldc.i4.0 + IL_0024: ret - IL_002b: ldc.i4.0 - IL_002c: ret + IL_0025: ldc.i4.0 + IL_0026: ret } // end of method f2@6::get_CheckClose .method public strict virtual instance class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest4.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest4.il.bsl index ea764c62bb0..91921e1a0f6 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest4.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest4.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:5:0:0 + .ver 5:0:0:0 } .assembly SeqExpressionSteppingTest4 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SeqExpressionSteppingTest4 { - // Offset: 0x00000000 Length: 0x0000026F + // Offset: 0x00000000 Length: 0x00000263 } .mresource public FSharpOptimizationData.SeqExpressionSteppingTest4 { - // Offset: 0x00000278 Length: 0x000000AD + // Offset: 0x00000268 Length: 0x000000AD } .module SeqExpressionSteppingTest4.exe -// MVID: {5B9A68C1-2432-93E0-A745-0383C1689A5B} +// MVID: {60B78A59-2432-93E0-A745-0383598AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00760000 +// Image base: 0x06580000 // =============== CLASS MEMBERS DECLARATION =================== @@ -97,107 +97,101 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 190 (0xbe) + // Code size 184 (0xb8) .maxstack 6 .locals init ([0] int32 z) .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\\SeqExpressionSteppingTest4.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SeqExpressionStepping\\SeqExpressionSteppingTest4.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::pc IL_0006: ldc.i4.1 IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002d - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0027 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0078 + IL_001b: nop + IL_001c: br.s IL_0072 .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_00a0 + IL_001e: nop + IL_001f: br.s IL_009a .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br IL_00b5 + IL_0021: nop + IL_0022: br IL_00af .line 100001,100001 : 0,0 '' - IL_002d: nop + IL_0027: nop .line 5,5 : 15,28 '' - IL_002e: ldarg.0 - IL_002f: ldc.i4.0 - IL_0030: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_0035: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::x + IL_0028: ldarg.0 + IL_0029: ldc.i4.0 + IL_002a: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) + IL_002f: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::x .line 6,6 : 15,21 '' - IL_003a: ldarg.0 - IL_003b: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::x - IL_0040: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0045: nop + IL_0034: ldarg.0 + IL_0035: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::x + IL_003a: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_003f: nop .line 7,7 : 15,28 '' - IL_0046: ldarg.0 - IL_0047: ldc.i4.0 - IL_0048: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) - IL_004d: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::y + IL_0040: ldarg.0 + IL_0041: ldc.i4.0 + IL_0042: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) + IL_0047: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::y .line 8,8 : 15,21 '' - IL_0052: ldarg.0 - IL_0053: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::y - IL_0058: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_005d: nop - IL_005e: ldarg.0 - IL_005f: ldc.i4.1 - IL_0060: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::pc + IL_004c: ldarg.0 + IL_004d: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::y + IL_0052: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0057: nop .line 9,9 : 15,23 '' - IL_0065: ldarg.0 - IL_0066: ldarg.0 - IL_0067: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::x - IL_006c: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0071: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::current - IL_0076: ldc.i4.1 - IL_0077: ret + IL_0058: ldarg.0 + IL_0059: ldc.i4.1 + IL_005a: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::pc + IL_005f: ldarg.0 + IL_0060: ldarg.0 + IL_0061: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::x + IL_0066: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_006b: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::current + IL_0070: ldc.i4.1 + IL_0071: ret .line 10,10 : 15,30 '' - IL_0078: ldarg.0 - IL_0079: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::x - IL_007e: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0083: ldarg.0 - IL_0084: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::y - IL_0089: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_008e: add - IL_008f: stloc.0 - IL_0090: ldarg.0 - IL_0091: ldc.i4.2 - IL_0092: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::pc + IL_0072: ldarg.0 + IL_0073: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::x + IL_0078: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_007d: ldarg.0 + IL_007e: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::y + IL_0083: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0088: add + IL_0089: stloc.0 .line 11,11 : 15,22 '' - IL_0097: ldarg.0 - IL_0098: ldloc.0 - IL_0099: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::current - IL_009e: ldc.i4.1 - IL_009f: ret + IL_008a: ldarg.0 + IL_008b: ldc.i4.2 + IL_008c: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::pc + IL_0091: ldarg.0 + IL_0092: ldloc.0 + IL_0093: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::current + IL_0098: ldc.i4.1 + IL_0099: ret .line 7,7 : 19,20 '' - IL_00a0: ldarg.0 - IL_00a1: ldnull - IL_00a2: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::y - IL_00a7: ldarg.0 - IL_00a8: ldnull - IL_00a9: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::x - IL_00ae: ldarg.0 - IL_00af: ldc.i4.3 - IL_00b0: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::pc - IL_00b5: ldarg.0 + IL_009a: ldarg.0 + IL_009b: ldnull + IL_009c: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::y + IL_00a1: ldarg.0 + IL_00a2: ldnull + IL_00a3: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::x + IL_00a8: ldarg.0 + IL_00a9: ldc.i4.3 + IL_00aa: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::pc + IL_00af: ldarg.0 + IL_00b0: ldc.i4.0 + IL_00b1: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::current IL_00b6: ldc.i4.0 - IL_00b7: stfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::current - IL_00bc: ldc.i4.0 - IL_00bd: ret + IL_00b7: ret } // end of method f3@5::GenerateNext .method public strict virtual instance void @@ -214,52 +208,44 @@ .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest4/SeqExpressionSteppingTest4/f3@5::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.0 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.0 + IL_002b: ret - IL_0034: ldc.i4.0 - IL_0035: ret + IL_002c: ldc.i4.0 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method f3@5::get_CheckClose .method public strict virtual instance int32 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest5.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest5.il.bsl index 0af7608e807..a3ce205c086 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest5.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest5.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:5:0:0 + .ver 5:0:0:0 } .assembly SeqExpressionSteppingTest5 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SeqExpressionSteppingTest5 { - // Offset: 0x00000000 Length: 0x0000026F + // Offset: 0x00000000 Length: 0x00000263 } .mresource public FSharpOptimizationData.SeqExpressionSteppingTest5 { - // Offset: 0x00000278 Length: 0x000000AD + // Offset: 0x00000268 Length: 0x000000AD } .module SeqExpressionSteppingTest5.exe -// MVID: {5B9A632A-2432-9401-A745-03832A639A5B} +// MVID: {60B78A59-2432-9401-A745-0383598AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x026A0000 +// Image base: 0x05A80000 // =============== CLASS MEMBERS DECLARATION =================== @@ -97,130 +97,122 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 232 (0xe8) + // Code size 224 (0xe0) .maxstack 6 .locals init ([0] int32 z) .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\\SeqExpressionSteppingTest5.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SeqExpressionStepping\\SeqExpressionSteppingTest5.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::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 + IL_0025, + IL_0028, + IL_002b) + IL_001d: br.s IL_0031 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br IL_00ae + IL_001f: nop + IL_0020: br IL_00a6 .line 100001,100001 : 0,0 '' - IL_002d: nop - IL_002e: br.s IL_007f + IL_0025: nop + IL_0026: br.s IL_0077 .line 100001,100001 : 0,0 '' - IL_0030: nop - IL_0031: br.s IL_00a7 + IL_0028: nop + IL_0029: br.s IL_009f .line 100001,100001 : 0,0 '' - IL_0033: nop - IL_0034: br IL_00df + IL_002b: nop + IL_002c: br IL_00d7 .line 100001,100001 : 0,0 '' - IL_0039: nop + IL_0031: nop .line 5,5 : 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@5::x - IL_0046: ldarg.0 - IL_0047: ldc.i4.1 - IL_0048: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc + IL_0032: ldarg.0 + IL_0033: ldc.i4.0 + IL_0034: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) + IL_0039: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::x + IL_003e: ldarg.0 + IL_003f: ldc.i4.1 + IL_0040: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc .line 7,7 : 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@5::y + IL_0045: ldarg.0 + IL_0046: ldc.i4.0 + IL_0047: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::Ref(!!0) + IL_004c: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::y .line 8,8 : 19,25 '' - IL_0059: ldarg.0 - IL_005a: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::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@5::pc + IL_0051: ldarg.0 + IL_0052: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::y + IL_0057: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_005c: nop .line 9,9 : 19,27 '' - IL_006c: ldarg.0 - IL_006d: ldarg.0 - IL_006e: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::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@5::current - IL_007d: ldc.i4.1 - IL_007e: ret + IL_005d: ldarg.0 + IL_005e: ldc.i4.2 + IL_005f: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc + IL_0064: ldarg.0 + IL_0065: ldarg.0 + IL_0066: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::x + IL_006b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0070: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::current + IL_0075: ldc.i4.1 + IL_0076: ret .line 10,10 : 19,34 '' - IL_007f: ldarg.0 - IL_0080: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::x - IL_0085: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_008a: ldarg.0 - IL_008b: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::y - IL_0090: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0095: add - IL_0096: stloc.0 - IL_0097: ldarg.0 - IL_0098: ldc.i4.3 - IL_0099: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc + IL_0077: ldarg.0 + IL_0078: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::x + IL_007d: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0082: ldarg.0 + IL_0083: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::y + IL_0088: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_008d: add + IL_008e: stloc.0 .line 11,11 : 19,26 '' - IL_009e: ldarg.0 - IL_009f: ldloc.0 - IL_00a0: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::current - IL_00a5: ldc.i4.1 - IL_00a6: ret - - IL_00a7: ldarg.0 - IL_00a8: ldnull - IL_00a9: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::y - IL_00ae: ldarg.0 - IL_00af: ldc.i4.4 - IL_00b0: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc + IL_008f: ldarg.0 + IL_0090: ldc.i4.3 + IL_0091: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc + IL_0096: ldarg.0 + IL_0097: ldloc.0 + IL_0098: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::current + IL_009d: ldc.i4.1 + IL_009e: ret + + IL_009f: ldarg.0 + IL_00a0: ldnull + IL_00a1: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::y + IL_00a6: ldarg.0 + IL_00a7: ldc.i4.4 + IL_00a8: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc .line 13,13 : 18,24 '' - IL_00b5: ldarg.0 - IL_00b6: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::x - IL_00bb: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_00c0: nop + IL_00ad: ldarg.0 + IL_00ae: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::x + IL_00b3: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_00b8: nop .line 14,14 : 18,32 '' - IL_00c1: ldstr "done" - IL_00c6: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_00cb: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_00d0: pop - IL_00d1: ldarg.0 - IL_00d2: ldnull - IL_00d3: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::x - IL_00d8: ldarg.0 - IL_00d9: ldc.i4.4 - IL_00da: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc - IL_00df: ldarg.0 - IL_00e0: ldc.i4.0 - IL_00e1: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::current - IL_00e6: ldc.i4.0 - IL_00e7: ret + IL_00b9: ldstr "done" + IL_00be: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_00c3: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_00c8: pop + IL_00c9: ldarg.0 + IL_00ca: ldnull + IL_00cb: stfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::x + IL_00d0: ldarg.0 + IL_00d1: ldc.i4.4 + IL_00d2: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc + IL_00d7: ldarg.0 + IL_00d8: ldc.i4.0 + IL_00d9: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::current + IL_00de: ldc.i4.0 + IL_00df: ret } // end of method f4@5::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 176 (0xb0) + // Code size 162 (0xa2) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -236,7 +228,7 @@ .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_00a3 + IL_0014: br IL_0099 .line 100001,100001 : 0,0 '' IL_0019: nop @@ -246,171 +238,147 @@ IL_001b: ldfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc IL_0020: switch ( IL_003b, - IL_003d, - IL_003f, + IL_003e, IL_0041, - IL_0043) - IL_0039: br.s IL_0054 - - IL_003b: br.s IL_0045 - - IL_003d: br.s IL_0048 - - IL_003f: br.s IL_004b - - IL_0041: br.s IL_004e - - IL_0043: br.s IL_0051 + IL_0044, + IL_0047) + IL_0039: br.s IL_004a .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_007d + IL_003b: nop + IL_003c: br.s IL_0073 .line 100001,100001 : 0,0 '' - IL_0048: nop - IL_0049: br.s IL_0059 + IL_003e: nop + IL_003f: br.s IL_004f .line 100001,100001 : 0,0 '' - IL_004b: nop - IL_004c: br.s IL_0058 + IL_0041: nop + IL_0042: br.s IL_004e .line 100001,100001 : 0,0 '' - IL_004e: nop - IL_004f: br.s IL_0055 + IL_0044: nop + IL_0045: br.s IL_004b .line 100001,100001 : 0,0 '' - IL_0051: nop - IL_0052: br.s IL_007d + IL_0047: nop + IL_0048: br.s IL_0073 .line 100001,100001 : 0,0 '' - IL_0054: nop + IL_004a: nop .line 100001,100001 : 0,0 '' - IL_0055: nop - IL_0056: br.s IL_0059 + IL_004b: nop + IL_004c: br.s IL_004f .line 100001,100001 : 0,0 '' - IL_0058: nop - IL_0059: ldarg.0 - IL_005a: ldc.i4.4 - IL_005b: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc + IL_004e: nop + IL_004f: ldarg.0 + IL_0050: ldc.i4.4 + IL_0051: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc .line 13,13 : 18,24 '' - IL_0060: ldarg.0 - IL_0061: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::x - IL_0066: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_006b: nop + IL_0056: ldarg.0 + IL_0057: ldfld class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::x + IL_005c: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0061: nop .line 14,14 : 18,32 '' - IL_006c: ldstr "done" - IL_0071: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0076: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_007b: pop + IL_0062: ldstr "done" + IL_0067: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_006c: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_0071: pop .line 100001,100001 : 0,0 '' - IL_007c: nop - IL_007d: ldarg.0 - IL_007e: ldc.i4.4 - IL_007f: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc - IL_0084: ldarg.0 - IL_0085: ldc.i4.0 - IL_0086: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::current - IL_008b: ldnull - IL_008c: stloc.1 - IL_008d: leave.s IL_009b + IL_0072: nop + IL_0073: ldarg.0 + IL_0074: ldc.i4.4 + IL_0075: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc + IL_007a: ldarg.0 + IL_007b: ldc.i4.0 + IL_007c: stfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::current + IL_0081: ldnull + IL_0082: stloc.1 + IL_0083: leave.s IL_0091 } // end .try catch [mscorlib]System.Object { - IL_008f: castclass [mscorlib]System.Exception - IL_0094: stloc.2 + IL_0085: castclass [mscorlib]System.Exception + IL_008a: stloc.2 .line 5,5 : 19,20 '' - IL_0095: ldloc.2 - IL_0096: stloc.0 - IL_0097: ldnull - IL_0098: stloc.1 - IL_0099: leave.s IL_009b + IL_008b: ldloc.2 + IL_008c: stloc.0 + IL_008d: ldnull + IL_008e: stloc.1 + IL_008f: leave.s IL_0091 .line 100001,100001 : 0,0 '' } // end handler - IL_009b: ldloc.1 - IL_009c: pop + IL_0091: ldloc.1 + IL_0092: pop .line 100001,100001 : 0,0 '' - IL_009d: nop - IL_009e: br IL_0000 - - IL_00a3: ldloc.0 - IL_00a4: ldnull - IL_00a5: cgt.un - IL_00a7: brfalse.s IL_00ab + IL_0093: nop + IL_0094: br IL_0000 - IL_00a9: br.s IL_00ad - - IL_00ab: br.s IL_00af + IL_0099: ldloc.0 + IL_009a: ldnull + IL_009b: cgt.un + IL_009d: brfalse.s IL_00a1 .line 100001,100001 : 0,0 '' - IL_00ad: ldloc.0 - IL_00ae: throw + IL_009f: ldloc.0 + IL_00a0: throw .line 100001,100001 : 0,0 '' - IL_00af: ret + IL_00a1: ret } // end of method f4@5::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 67 (0x43) - .maxstack 5 + // Code size 57 (0x39) + .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest5/SeqExpressionSteppingTest5/f4@5::pc IL_0006: switch ( IL_0021, - IL_0023, - IL_0025, + IL_0024, IL_0027, - IL_0029) - IL_001f: br.s IL_003a - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e - - IL_0025: br.s IL_0031 - - IL_0027: br.s IL_0034 - - IL_0029: br.s IL_0037 + IL_002a, + IL_002d) + IL_001f: br.s IL_0030 .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0041 + IL_0021: nop + IL_0022: br.s IL_0037 .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_003f + IL_0024: nop + IL_0025: br.s IL_0035 .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: br.s IL_003d + IL_0027: nop + IL_0028: br.s IL_0033 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_003b + IL_002a: nop + IL_002b: br.s IL_0031 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0041 + IL_002d: nop + IL_002e: br.s IL_0037 .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: ldc.i4.1 - IL_003c: ret + IL_0030: nop + IL_0031: ldc.i4.1 + IL_0032: ret - IL_003d: ldc.i4.1 - IL_003e: ret + IL_0033: ldc.i4.1 + IL_0034: ret - IL_003f: ldc.i4.1 - IL_0040: ret + IL_0035: ldc.i4.1 + IL_0036: ret - IL_0041: ldc.i4.0 - IL_0042: ret + IL_0037: ldc.i4.0 + IL_0038: ret } // end of method f4@5::get_CheckClose .method public strict virtual instance int32 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest6.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest6.il.bsl index d06d692b20b..75fbbcc82e7 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest6.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest6.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:5:0:0 + .ver 5:0:0:0 } .assembly SeqExpressionSteppingTest6 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SeqExpressionSteppingTest6 { - // Offset: 0x00000000 Length: 0x000002A4 + // Offset: 0x00000000 Length: 0x00000298 } .mresource public FSharpOptimizationData.SeqExpressionSteppingTest6 { - // Offset: 0x000002A8 Length: 0x000000BA + // Offset: 0x000002A0 Length: 0x000000BA } .module SeqExpressionSteppingTest6.exe -// MVID: {5B9A632A-2432-94A2-A745-03832A639A5B} +// MVID: {60B78A59-2432-94A2-A745-0383598AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01330000 +// Image base: 0x06B30000 // =============== CLASS MEMBERS DECLARATION =================== @@ -103,166 +103,158 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 304 (0x130) + // Code size 294 (0x126) .maxstack 6 .locals init ([0] int32 x, [1] int32 V_1) .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\\SeqExpressionSteppingTest6.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SeqExpressionStepping\\SeqExpressionSteppingTest6.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc IL_0006: ldc.i4.1 IL_0007: sub IL_0008: switch ( IL_0023, - IL_0025, - IL_0027, + IL_0026, IL_0029, - IL_002b) - IL_0021: br.s IL_0045 - - IL_0023: br.s IL_002d - - IL_0025: br.s IL_0030 - - IL_0027: br.s IL_0033 - - IL_0029: br.s IL_0039 - - IL_002b: br.s IL_003f + IL_002f, + IL_0035) + IL_0021: br.s IL_003b .line 100001,100001 : 0,0 '' - IL_002d: nop - IL_002e: br.s IL_0099 + IL_0023: nop + IL_0024: br.s IL_008f .line 100001,100001 : 0,0 '' - IL_0030: nop - IL_0031: br.s IL_0096 + IL_0026: nop + IL_0027: br.s IL_008c .line 100001,100001 : 0,0 '' - IL_0033: nop - IL_0034: br IL_0106 + IL_0029: nop + IL_002a: br IL_00fc .line 100001,100001 : 0,0 '' - IL_0039: nop - IL_003a: br IL_0103 + IL_002f: nop + IL_0030: br IL_00f9 .line 100001,100001 : 0,0 '' - IL_003f: nop - IL_0040: br IL_0127 + IL_0035: nop + IL_0036: br IL_011d .line 100001,100001 : 0,0 '' - IL_0045: nop + IL_003b: nop .line 6,8 : 15,25 '' - IL_0046: ldarg.0 - IL_0047: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6::get_es() - IL_004c: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_0051: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' - IL_0056: ldarg.0 - IL_0057: ldc.i4.1 - IL_0058: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc + IL_003c: ldarg.0 + IL_003d: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6::get_es() + IL_0042: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_0047: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' + IL_004c: ldarg.0 + IL_004d: ldc.i4.1 + IL_004e: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc .line 6,8 : 15,25 '' - IL_005d: ldarg.0 - IL_005e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' - IL_0063: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_0068: brfalse.s IL_0099 - - IL_006a: ldarg.0 - IL_006b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' - IL_0070: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_0075: stloc.0 + IL_0053: ldarg.0 + IL_0054: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' + IL_0059: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_005e: brfalse.s IL_008f + + IL_0060: ldarg.0 + IL_0061: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' + IL_0066: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_006b: stloc.0 .line 7,7 : 18,33 '' - IL_0076: ldstr "hello" - IL_007b: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0080: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0085: pop - IL_0086: ldarg.0 - IL_0087: ldc.i4.2 - IL_0088: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc + IL_006c: ldstr "hello" + IL_0071: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_0076: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_007b: pop .line 8,8 : 18,25 '' - IL_008d: ldarg.0 - IL_008e: ldloc.0 - IL_008f: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::current - IL_0094: ldc.i4.1 - IL_0095: ret + IL_007c: ldarg.0 + IL_007d: ldc.i4.2 + IL_007e: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc + IL_0083: ldarg.0 + IL_0084: ldloc.0 + IL_0085: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::current + IL_008a: ldc.i4.1 + IL_008b: ret .line 100001,100001 : 0,0 '' - IL_0096: nop - IL_0097: br.s IL_005d + IL_008c: nop + IL_008d: br.s IL_0053 - IL_0099: ldarg.0 - IL_009a: ldc.i4.5 - IL_009b: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc + IL_008f: ldarg.0 + IL_0090: ldc.i4.5 + IL_0091: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc + .line 6,8 : 15,25 '' + IL_0096: ldarg.0 + IL_0097: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' + IL_009c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_00a1: nop .line 6,8 : 15,25 '' - IL_00a0: ldarg.0 - IL_00a1: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' - IL_00a6: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_00ab: nop - IL_00ac: ldarg.0 - IL_00ad: ldnull - IL_00ae: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' + IL_00a2: ldarg.0 + IL_00a3: ldnull + IL_00a4: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' .line 9,11 : 15,25 '' - IL_00b3: ldarg.0 - IL_00b4: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6::get_es() - IL_00b9: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() - IL_00be: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 - IL_00c3: ldarg.0 - IL_00c4: ldc.i4.3 - IL_00c5: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc + IL_00a9: ldarg.0 + IL_00aa: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6::get_es() + IL_00af: callvirt instance class [mscorlib]System.Collections.Generic.IEnumerator`1 class [mscorlib]System.Collections.Generic.IEnumerable`1::GetEnumerator() + IL_00b4: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 + IL_00b9: ldarg.0 + IL_00ba: ldc.i4.3 + IL_00bb: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc .line 9,11 : 15,25 '' - IL_00ca: ldarg.0 - IL_00cb: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 - IL_00d0: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() - IL_00d5: brfalse.s IL_0106 - - IL_00d7: ldarg.0 - IL_00d8: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 - IL_00dd: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() - IL_00e2: stloc.1 + IL_00c0: ldarg.0 + IL_00c1: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 + IL_00c6: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext() + IL_00cb: brfalse.s IL_00fc + + IL_00cd: ldarg.0 + IL_00ce: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 + IL_00d3: callvirt instance !0 class [mscorlib]System.Collections.Generic.IEnumerator`1::get_Current() + IL_00d8: stloc.1 .line 10,10 : 18,35 '' - IL_00e3: ldstr "goodbye" - IL_00e8: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_00ed: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_00f2: pop - IL_00f3: ldarg.0 - IL_00f4: ldc.i4.4 - IL_00f5: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc + IL_00d9: ldstr "goodbye" + IL_00de: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_00e3: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_00e8: pop .line 11,11 : 18,25 '' - IL_00fa: ldarg.0 - IL_00fb: ldloc.1 - IL_00fc: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::current - IL_0101: ldc.i4.1 - IL_0102: ret + IL_00e9: ldarg.0 + IL_00ea: ldc.i4.4 + IL_00eb: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc + IL_00f0: ldarg.0 + IL_00f1: ldloc.1 + IL_00f2: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::current + IL_00f7: ldc.i4.1 + IL_00f8: ret .line 100001,100001 : 0,0 '' - IL_0103: nop - IL_0104: br.s IL_00ca + IL_00f9: nop + IL_00fa: br.s IL_00c0 - IL_0106: ldarg.0 - IL_0107: ldc.i4.5 - IL_0108: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc + IL_00fc: ldarg.0 + IL_00fd: ldc.i4.5 + IL_00fe: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc + .line 9,11 : 15,25 '' + IL_0103: ldarg.0 + IL_0104: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 + IL_0109: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_010e: nop .line 9,11 : 15,25 '' - IL_010d: ldarg.0 - IL_010e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 - IL_0113: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0118: nop - IL_0119: ldarg.0 - IL_011a: ldnull - IL_011b: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 - IL_0120: ldarg.0 - IL_0121: ldc.i4.5 - IL_0122: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc - IL_0127: ldarg.0 - IL_0128: ldc.i4.0 - IL_0129: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::current - IL_012e: ldc.i4.0 - IL_012f: ret + IL_010f: ldarg.0 + IL_0110: ldnull + IL_0111: stfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 + IL_0116: ldarg.0 + IL_0117: ldc.i4.5 + IL_0118: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc + IL_011d: ldarg.0 + IL_011e: ldc.i4.0 + IL_011f: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::current + IL_0124: ldc.i4.0 + IL_0125: ret } // end of method f7@6::GenerateNext .method public strict virtual instance void Close() cil managed { - // Code size 189 (0xbd) + // Code size 173 (0xad) .maxstack 6 .locals init ([0] class [mscorlib]System.Exception V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_1, @@ -278,7 +270,7 @@ .line 100001,100001 : 0,0 '' IL_0013: nop - IL_0014: br IL_00b0 + IL_0014: br IL_00a4 .line 100001,100001 : 0,0 '' IL_0019: nop @@ -288,191 +280,163 @@ IL_001b: ldfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc IL_0020: switch ( IL_003f, - IL_0041, - IL_0043, + IL_0042, IL_0045, - IL_0047, - IL_0049) - IL_003d: br.s IL_005d - - IL_003f: br.s IL_004b - - IL_0041: br.s IL_004e - - IL_0043: br.s IL_0051 - - IL_0045: br.s IL_0054 - - IL_0047: br.s IL_0057 - - IL_0049: br.s IL_005a + IL_0048, + IL_004b, + IL_004e) + IL_003d: br.s IL_0051 .line 100001,100001 : 0,0 '' - IL_004b: nop - IL_004c: br.s IL_008a + IL_003f: nop + IL_0040: br.s IL_007e .line 100001,100001 : 0,0 '' - IL_004e: nop - IL_004f: br.s IL_0076 + IL_0042: nop + IL_0043: br.s IL_006a .line 100001,100001 : 0,0 '' - IL_0051: nop - IL_0052: br.s IL_0075 + IL_0045: nop + IL_0046: br.s IL_0069 .line 100001,100001 : 0,0 '' - IL_0054: nop - IL_0055: br.s IL_005f + IL_0048: nop + IL_0049: br.s IL_0053 .line 100001,100001 : 0,0 '' - IL_0057: nop - IL_0058: br.s IL_005e + IL_004b: nop + IL_004c: br.s IL_0052 .line 100001,100001 : 0,0 '' - IL_005a: nop - IL_005b: br.s IL_008a + IL_004e: nop + IL_004f: br.s IL_007e .line 100001,100001 : 0,0 '' - IL_005d: nop + IL_0051: nop .line 100001,100001 : 0,0 '' - IL_005e: nop - IL_005f: ldarg.0 - IL_0060: ldc.i4.5 - IL_0061: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc - IL_0066: ldarg.0 - IL_0067: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 - IL_006c: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0071: nop + IL_0052: nop + IL_0053: ldarg.0 + IL_0054: ldc.i4.5 + IL_0055: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc + IL_005a: ldarg.0 + IL_005b: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::enum0 + IL_0060: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_0065: nop .line 100001,100001 : 0,0 '' - IL_0072: nop - IL_0073: br.s IL_008a + IL_0066: nop + IL_0067: br.s IL_007e .line 100001,100001 : 0,0 '' - IL_0075: nop - IL_0076: ldarg.0 - IL_0077: ldc.i4.5 - IL_0078: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc - IL_007d: ldarg.0 - IL_007e: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' - IL_0083: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) - IL_0088: nop + IL_0069: nop + IL_006a: ldarg.0 + IL_006b: ldc.i4.5 + IL_006c: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc + IL_0071: ldarg.0 + IL_0072: ldfld class [mscorlib]System.Collections.Generic.IEnumerator`1 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::'enum' + IL_0077: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::Dispose>(!!0) + IL_007c: nop .line 100001,100001 : 0,0 '' - IL_0089: nop - IL_008a: ldarg.0 - IL_008b: ldc.i4.5 - IL_008c: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc - IL_0091: ldarg.0 - IL_0092: ldc.i4.0 - IL_0093: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::current - IL_0098: ldnull - IL_0099: stloc.1 - IL_009a: leave.s IL_00a8 + IL_007d: nop + IL_007e: ldarg.0 + IL_007f: ldc.i4.5 + IL_0080: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc + IL_0085: ldarg.0 + IL_0086: ldc.i4.0 + IL_0087: stfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::current + IL_008c: ldnull + IL_008d: stloc.1 + IL_008e: leave.s IL_009c } // end .try catch [mscorlib]System.Object { - IL_009c: castclass [mscorlib]System.Exception - IL_00a1: stloc.2 + IL_0090: castclass [mscorlib]System.Exception + IL_0095: stloc.2 .line 6,8 : 15,25 '' - IL_00a2: ldloc.2 - IL_00a3: stloc.0 - IL_00a4: ldnull - IL_00a5: stloc.1 - IL_00a6: leave.s IL_00a8 + IL_0096: ldloc.2 + IL_0097: stloc.0 + IL_0098: ldnull + IL_0099: stloc.1 + IL_009a: leave.s IL_009c .line 100001,100001 : 0,0 '' } // end handler - IL_00a8: ldloc.1 - IL_00a9: pop + IL_009c: ldloc.1 + IL_009d: pop .line 100001,100001 : 0,0 '' - IL_00aa: nop - IL_00ab: br IL_0000 - - IL_00b0: ldloc.0 - IL_00b1: ldnull - IL_00b2: cgt.un - IL_00b4: brfalse.s IL_00b8 + IL_009e: nop + IL_009f: br IL_0000 - IL_00b6: br.s IL_00ba - - IL_00b8: br.s IL_00bc + IL_00a4: ldloc.0 + IL_00a5: ldnull + IL_00a6: cgt.un + IL_00a8: brfalse.s IL_00ac .line 100001,100001 : 0,0 '' - IL_00ba: ldloc.0 - IL_00bb: throw + IL_00aa: ldloc.0 + IL_00ab: throw .line 100001,100001 : 0,0 '' - IL_00bc: ret + IL_00ac: ret } // end of method f7@6::Close .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 78 (0x4e) + // Code size 66 (0x42) .maxstack 5 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionSteppingTest6/SeqExpressionSteppingTest6/f7@6::pc IL_0006: switch ( IL_0025, - IL_0027, - IL_0029, + IL_0028, IL_002b, - IL_002d, - IL_002f) - IL_0023: br.s IL_0043 - - IL_0025: br.s IL_0031 - - IL_0027: br.s IL_0034 - - IL_0029: br.s IL_0037 - - IL_002b: br.s IL_003a - - IL_002d: br.s IL_003d - - IL_002f: br.s IL_0040 + IL_002e, + IL_0031, + IL_0034) + IL_0023: br.s IL_0037 .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: br.s IL_004c + IL_0025: nop + IL_0026: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_0034: nop - IL_0035: br.s IL_004a + IL_0028: nop + IL_0029: br.s IL_003e .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_0048 + IL_002b: nop + IL_002c: br.s IL_003c .line 100001,100001 : 0,0 '' - IL_003a: nop - IL_003b: br.s IL_0046 + IL_002e: nop + IL_002f: br.s IL_003a .line 100001,100001 : 0,0 '' - IL_003d: nop - IL_003e: br.s IL_0044 + IL_0031: nop + IL_0032: br.s IL_0038 .line 100001,100001 : 0,0 '' - IL_0040: nop - IL_0041: br.s IL_004c + IL_0034: nop + IL_0035: br.s IL_0040 .line 100001,100001 : 0,0 '' - IL_0043: nop - IL_0044: ldc.i4.1 - IL_0045: ret + IL_0037: nop + IL_0038: ldc.i4.1 + IL_0039: ret - IL_0046: ldc.i4.1 - IL_0047: ret + IL_003a: ldc.i4.1 + IL_003b: ret - IL_0048: ldc.i4.1 - IL_0049: ret + IL_003c: ldc.i4.1 + IL_003d: ret - IL_004a: ldc.i4.1 - IL_004b: ret + IL_003e: ldc.i4.1 + IL_003f: ret - IL_004c: ldc.i4.0 - IL_004d: ret + IL_0040: ldc.i4.0 + IL_0041: ret } // end of method f7@6::get_CheckClose .method public strict virtual instance int32 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest7.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest7.il.bsl index ae9e2337813..a193421655c 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest7.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/SeqExpressionSteppingTest7.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:5:0:0 + .ver 5:0:0:0 } .assembly SeqExpressionSteppingTest7 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SeqExpressionSteppingTest7 { - // Offset: 0x00000000 Length: 0x00000272 + // Offset: 0x00000000 Length: 0x00000266 } .mresource public FSharpOptimizationData.SeqExpressionSteppingTest7 { - // Offset: 0x00000278 Length: 0x00000098 + // Offset: 0x00000270 Length: 0x00000098 } .module SeqExpressionSteppingTest7.exe -// MVID: {5B9A632A-2432-93C3-A745-03832A639A5B} +// MVID: {60B78A59-2432-93C3-A745-0383598AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x02450000 +// Image base: 0x054A0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -51,205 +51,6 @@ 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 113 (0x71) - .maxstack 7 - .locals init ([0] string V_0, - [1] !a V_1) - .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 '' - IL_001b: nop - IL_001c: br.s IL_005c - - .line 100001,100001 : 0,0 '' - IL_001e: nop - IL_001f: br.s IL_0068 - - .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_005f - - .line 5,5 : 44,55 '' - IL_0035: ldstr "" - IL_003a: stloc.0 - IL_003b: ldarg.0 - IL_003c: ldc.i4.1 - IL_003d: stfld int32 class SeqExpressionSteppingTest7/f@5::pc - .line 5,5 : 44,55 '' - IL_0042: ldarg.1 - IL_0043: ldc.i4.0 - IL_0044: brfalse.s IL_004e - - IL_0046: ldnull - IL_0047: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 - IL_004c: br.s IL_0055 - - IL_004e: ldloc.0 - IL_004f: call class [mscorlib]System.Exception [FSharp.Core]Microsoft.FSharp.Core.Operators::Failure(string) - IL_0054: throw - - IL_0055: stobj class [mscorlib]System.Collections.Generic.IEnumerable`1 - IL_005a: ldc.i4.2 - IL_005b: ret - - .line 100001,100001 : 0,0 '' - IL_005c: nop - IL_005d: br.s IL_0061 - - .line 5,5 : 14,36 '' - IL_005f: nop - .line 100001,100001 : 0,0 '' - IL_0060: nop - IL_0061: ldarg.0 - IL_0062: ldc.i4.2 - IL_0063: stfld int32 class SeqExpressionSteppingTest7/f@5::pc - IL_0068: ldarg.0 - IL_0069: ldloc.1 - IL_006a: stfld !0 class SeqExpressionSteppingTest7/f@5::current - IL_006f: ldc.i4.0 - IL_0070: ret - } // end of method f@5::GenerateNext - - .method public strict virtual instance void - Close() cil managed - { - // Code size 8 (0x8) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldc.i4.2 - IL_0002: stfld int32 class SeqExpressionSteppingTest7/f@5::pc - IL_0007: ret - } // end of method f@5::Close - - .method public strict virtual instance bool - get_CheckClose() cil managed - { - // Code size 46 (0x2e) - .maxstack 8 - .line 100001,100001 : 0,0 '' - IL_0000: ldarg.0 - IL_0001: ldfld int32 class SeqExpressionSteppingTest7/f@5::pc - IL_0006: switch ( - IL_0019, - IL_001b, - IL_001d) - IL_0017: br.s IL_0028 - - IL_0019: br.s IL_001f - - IL_001b: br.s IL_0022 - - IL_001d: br.s IL_0025 - - .line 100001,100001 : 0,0 '' - IL_001f: nop - IL_0020: br.s IL_002c - - .line 100001,100001 : 0,0 '' - IL_0022: nop - IL_0023: br.s IL_0029 - - .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_002c - - .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: ldc.i4.0 - IL_002a: ret - - .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: ldc.i4.0 - IL_002d: 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 7 (0x7) - .maxstack 8 - IL_0000: ldarg.0 - IL_0001: ldfld !0 class SeqExpressionSteppingTest7/f@5::current - IL_0006: 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 8 (0x8) - .maxstack 6 - .locals init (!a V_0) - IL_0000: ldc.i4.0 - IL_0001: ldloc.0 - IL_0002: newobj instance void class SeqExpressionSteppingTest7/f@5::.ctor(int32, - !0) - IL_0007: 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 { @@ -262,17 +63,48 @@ .method public static class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 f() cil managed { - // Code size 15 (0xf) - .maxstack 4 - .locals init ([0] !!a V_0) + // Code size 59 (0x3b) + .maxstack 5 + .locals init ([0] valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1 V_0, + [1] string V_1) + .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' + .line 5,5 : 18,24 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SeqExpressionStepping\\SeqExpressionSteppingTest7.fs' + IL_0000: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest7::get_r() + IL_0005: call void [FSharp.Core]Microsoft.FSharp.Core.Operators::Increment(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_000a: nop + .line 5,5 : 26,30 '' + IL_000b: ldc.i4.1 + IL_000c: brfalse.s IL_0031 + + .line 5,5 : 44,55 '' + IL_000e: ldstr "" + IL_0013: stloc.1 + IL_0014: ldloca.s V_0 + IL_0016: ldc.i4.0 + IL_0017: brfalse.s IL_0021 + + IL_0019: ldnull + IL_001a: unbox.any class [mscorlib]System.Collections.Generic.IEnumerable`1 + IL_001f: br.s IL_0028 + + IL_0021: ldloc.1 + IL_0022: call class [mscorlib]System.Exception [FSharp.Core]Microsoft.FSharp.Core.Operators::Failure(string) + IL_0027: throw + + IL_0028: call instance void valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::AddMany(class [mscorlib]System.Collections.Generic.IEnumerable`1) + IL_002d: nop + .line 100001,100001 : 0,0 '' + IL_002e: nop + IL_002f: br.s IL_0033 + + .line 5,5 : 14,36 '' + IL_0031: nop + .line 100001,100001 : 0,0 '' + IL_0032: nop .line 5,5 : 12,57 '' - IL_0000: ldc.i4.0 - IL_0001: ldloc.0 - IL_0002: newobj instance void class SeqExpressionSteppingTest7/f@5::.ctor(int32, - !0) - IL_0007: tail. - IL_0009: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 [FSharp.Core]Microsoft.FSharp.Collections.SeqModule::ToList(class [mscorlib]System.Collections.Generic.IEnumerable`1) - IL_000e: ret + IL_0033: ldloca.s V_0 + IL_0035: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 valuetype [FSharp.Core]Microsoft.FSharp.Core.CompilerServices.ListCollector`1::Close() + IL_003a: ret } // end of method SeqExpressionSteppingTest7::f .property class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 @@ -295,7 +127,7 @@ .method public static void main@() cil managed { .entrypoint - // Code size 107 (0x6b) + // Code size 103 (0x67) .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, @@ -321,7 +153,7 @@ .line 6,6 : 25,29 '' IL_001e: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 SeqExpressionSteppingTest7::f() IL_0023: stloc.3 - IL_0024: leave.s IL_0060 + IL_0024: leave.s IL_005c .line 6,6 : 30,34 '' } // end .try @@ -333,37 +165,33 @@ IL_002f: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::FailurePattern(class [mscorlib]System.Exception) IL_0034: stloc.s V_5 IL_0036: ldloc.s V_5 - IL_0038: brfalse.s IL_003c - - IL_003a: br.s IL_003e - - IL_003c: br.s IL_0055 + IL_0038: brfalse.s IL_0051 .line 6,6 : 48,52 '' - IL_003e: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest7::get_r() - IL_0043: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) - IL_0048: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() - IL_004d: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::Cons(!0, + IL_003a: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1 SeqExpressionSteppingTest7::get_r() + IL_003f: call !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::op_Dereference(class [FSharp.Core]Microsoft.FSharp.Core.FSharpRef`1) + IL_0044: call class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_Empty() + IL_0049: 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_0052: stloc.3 - IL_0053: leave.s IL_0060 + IL_004e: stloc.3 + IL_004f: leave.s IL_005c .line 100001,100001 : 0,0 '' - IL_0055: rethrow - IL_0057: ldnull - IL_0058: unbox.any class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 - IL_005d: stloc.3 - IL_005e: leave.s IL_0060 + IL_0051: rethrow + IL_0053: ldnull + IL_0054: unbox.any class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 + IL_0059: stloc.3 + IL_005a: leave.s IL_005c .line 100001,100001 : 0,0 '' } // end handler - IL_0060: ldloc.3 - IL_0061: stloc.2 - IL_0062: ldloc.1 - IL_0063: ldloc.2 - IL_0064: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,class [FSharp.Core]Microsoft.FSharp.Core.Unit>::Invoke(!0) - IL_0069: pop - IL_006a: ret + IL_005c: ldloc.3 + IL_005d: stloc.2 + IL_005e: ldloc.1 + IL_005f: ldloc.2 + IL_0060: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,class [FSharp.Core]Microsoft.FSharp.Core.Unit>::Invoke(!0) + IL_0065: pop + IL_0066: ret } // end of method $SeqExpressionSteppingTest7::main@ } // end of class ''.$SeqExpressionSteppingTest7 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionTailCalls/SeqExpressionTailCalls01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionTailCalls/SeqExpressionTailCalls01.il.bsl index d03a45be913..79a56d68ab0 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionTailCalls/SeqExpressionTailCalls01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionTailCalls/SeqExpressionTailCalls01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly SeqExpressionTailCalls01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SeqExpressionTailCalls01 { - // Offset: 0x00000000 Length: 0x0000021D + // Offset: 0x00000000 Length: 0x00000219 } .mresource public FSharpOptimizationData.SeqExpressionTailCalls01 { - // Offset: 0x00000228 Length: 0x0000008C + // Offset: 0x00000220 Length: 0x0000008C } .module SeqExpressionTailCalls01.exe -// MVID: {59B19240-093A-A6BE-A745-03834092B159} +// MVID: {60B78A58-093A-A6BE-A745-0383588AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x027D0000 +// Image base: 0x06850000 // =============== CLASS MEMBERS DECLARATION =================== @@ -88,73 +88,67 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 108 (0x6c) + // Code size 102 (0x66) .maxstack 7 .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\\SeqExpressionTailCalls\\SeqExpressionTailCalls01.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SeqExpressionTailCalls\\SeqExpressionTailCalls01.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionTailCalls01/rwalk@3::pc IL_0006: ldc.i4.1 IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0040 + IL_001b: nop + IL_001c: br.s IL_003a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_005c + IL_001e: nop + IL_001f: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0063 + IL_0021: nop + IL_0022: br.s IL_005d .line 100001,100001 : 0,0 '' - IL_002a: nop - IL_002b: ldarg.0 - IL_002c: ldc.i4.1 - IL_002d: stfld int32 SeqExpressionTailCalls01/rwalk@3::pc + IL_0024: nop .line 3,3 : 25,32 '' - IL_0032: ldarg.0 - IL_0033: ldarg.0 - IL_0034: ldfld int32 SeqExpressionTailCalls01/rwalk@3::x - IL_0039: stfld int32 SeqExpressionTailCalls01/rwalk@3::current - IL_003e: ldc.i4.1 - IL_003f: ret - - IL_0040: ldarg.0 - IL_0041: ldc.i4.2 - IL_0042: stfld int32 SeqExpressionTailCalls01/rwalk@3::pc + IL_0025: ldarg.0 + IL_0026: ldc.i4.1 + IL_0027: stfld int32 SeqExpressionTailCalls01/rwalk@3::pc + IL_002c: ldarg.0 + IL_002d: ldarg.0 + IL_002e: ldfld int32 SeqExpressionTailCalls01/rwalk@3::x + IL_0033: stfld int32 SeqExpressionTailCalls01/rwalk@3::current + IL_0038: ldc.i4.1 + IL_0039: ret + + IL_003a: ldarg.0 + IL_003b: ldc.i4.2 + IL_003c: stfld int32 SeqExpressionTailCalls01/rwalk@3::pc .line 3,3 : 41,52 '' - IL_0047: ldarg.1 - IL_0048: ldarg.0 - IL_0049: ldfld int32 SeqExpressionTailCalls01/rwalk@3::x - IL_004e: ldc.i4.1 - IL_004f: add - IL_0050: call class [mscorlib]System.Collections.Generic.IEnumerable`1 SeqExpressionTailCalls01::rwalk(int32) - IL_0055: stobj class [mscorlib]System.Collections.Generic.IEnumerable`1 - IL_005a: ldc.i4.2 - IL_005b: ret - - IL_005c: ldarg.0 - IL_005d: ldc.i4.3 - IL_005e: stfld int32 SeqExpressionTailCalls01/rwalk@3::pc - IL_0063: ldarg.0 + IL_0041: ldarg.1 + IL_0042: ldarg.0 + IL_0043: ldfld int32 SeqExpressionTailCalls01/rwalk@3::x + IL_0048: ldc.i4.1 + IL_0049: add + IL_004a: call class [mscorlib]System.Collections.Generic.IEnumerable`1 SeqExpressionTailCalls01::rwalk(int32) + IL_004f: stobj class [mscorlib]System.Collections.Generic.IEnumerable`1 + IL_0054: ldc.i4.2 + IL_0055: ret + + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 SeqExpressionTailCalls01/rwalk@3::pc + IL_005d: ldarg.0 + IL_005e: ldc.i4.0 + IL_005f: stfld int32 SeqExpressionTailCalls01/rwalk@3::current IL_0064: ldc.i4.0 - IL_0065: stfld int32 SeqExpressionTailCalls01/rwalk@3::current - IL_006a: ldc.i4.0 - IL_006b: ret + IL_0065: ret } // end of method rwalk@3::GenerateNext .method public strict virtual instance void @@ -171,52 +165,44 @@ .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionTailCalls01/rwalk@3::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.0 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.0 + IL_002b: ret - IL_0034: ldc.i4.0 - IL_0035: ret + IL_002c: ldc.i4.0 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method rwalk@3::get_CheckClose .method public strict virtual instance int32 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionTailCalls/SeqExpressionTailCalls02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionTailCalls/SeqExpressionTailCalls02.il.bsl index 4cca2bf3f7c..1a661c56fba 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionTailCalls/SeqExpressionTailCalls02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionTailCalls/SeqExpressionTailCalls02.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly SeqExpressionTailCalls02 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SeqExpressionTailCalls02 { - // Offset: 0x00000000 Length: 0x00000256 + // Offset: 0x00000000 Length: 0x00000252 } .mresource public FSharpOptimizationData.SeqExpressionTailCalls02 { - // Offset: 0x00000260 Length: 0x0000009E + // Offset: 0x00000258 Length: 0x0000009E } .module SeqExpressionTailCalls02.exe -// MVID: {59B19240-093A-EC43-A745-03834092B159} +// MVID: {60B78A58-093A-EC43-A745-0383588AB760} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x017C0000 +// Image base: 0x066C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -88,73 +88,67 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 108 (0x6c) + // Code size 102 (0x66) .maxstack 7 .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\\SeqExpressionTailCalls\\SeqExpressionTailCalls02.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SeqExpressionTailCalls\\SeqExpressionTailCalls02.fs' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionTailCalls02/rwalk1@5::pc IL_0006: ldc.i4.1 IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0040 + IL_001b: nop + IL_001c: br.s IL_003a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_005c + IL_001e: nop + IL_001f: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0063 + IL_0021: nop + IL_0022: br.s IL_005d .line 100001,100001 : 0,0 '' - IL_002a: nop - IL_002b: ldarg.0 - IL_002c: ldc.i4.1 - IL_002d: stfld int32 SeqExpressionTailCalls02/rwalk1@5::pc + IL_0024: nop .line 5,5 : 26,33 '' - IL_0032: ldarg.0 - IL_0033: ldarg.0 - IL_0034: ldfld int32 SeqExpressionTailCalls02/rwalk1@5::x - IL_0039: stfld int32 SeqExpressionTailCalls02/rwalk1@5::current - IL_003e: ldc.i4.1 - IL_003f: ret - - IL_0040: ldarg.0 - IL_0041: ldc.i4.2 - IL_0042: stfld int32 SeqExpressionTailCalls02/rwalk1@5::pc + IL_0025: ldarg.0 + IL_0026: ldc.i4.1 + IL_0027: stfld int32 SeqExpressionTailCalls02/rwalk1@5::pc + IL_002c: ldarg.0 + IL_002d: ldarg.0 + IL_002e: ldfld int32 SeqExpressionTailCalls02/rwalk1@5::x + IL_0033: stfld int32 SeqExpressionTailCalls02/rwalk1@5::current + IL_0038: ldc.i4.1 + IL_0039: ret + + IL_003a: ldarg.0 + IL_003b: ldc.i4.2 + IL_003c: stfld int32 SeqExpressionTailCalls02/rwalk1@5::pc .line 5,5 : 42,54 '' - IL_0047: ldarg.1 - IL_0048: ldarg.0 - IL_0049: ldfld int32 SeqExpressionTailCalls02/rwalk1@5::x - IL_004e: ldc.i4.1 - IL_004f: add - IL_0050: call class [mscorlib]System.Collections.Generic.IEnumerable`1 SeqExpressionTailCalls02::rwalk2(int32) - IL_0055: stobj class [mscorlib]System.Collections.Generic.IEnumerable`1 - IL_005a: ldc.i4.2 - IL_005b: ret - - IL_005c: ldarg.0 - IL_005d: ldc.i4.3 - IL_005e: stfld int32 SeqExpressionTailCalls02/rwalk1@5::pc - IL_0063: ldarg.0 + IL_0041: ldarg.1 + IL_0042: ldarg.0 + IL_0043: ldfld int32 SeqExpressionTailCalls02/rwalk1@5::x + IL_0048: ldc.i4.1 + IL_0049: add + IL_004a: call class [mscorlib]System.Collections.Generic.IEnumerable`1 SeqExpressionTailCalls02::rwalk2(int32) + IL_004f: stobj class [mscorlib]System.Collections.Generic.IEnumerable`1 + IL_0054: ldc.i4.2 + IL_0055: ret + + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 SeqExpressionTailCalls02/rwalk1@5::pc + IL_005d: ldarg.0 + IL_005e: ldc.i4.0 + IL_005f: stfld int32 SeqExpressionTailCalls02/rwalk1@5::current IL_0064: ldc.i4.0 - IL_0065: stfld int32 SeqExpressionTailCalls02/rwalk1@5::current - IL_006a: ldc.i4.0 - IL_006b: ret + IL_0065: ret } // end of method rwalk1@5::GenerateNext .method public strict virtual instance void @@ -171,52 +165,44 @@ .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionTailCalls02/rwalk1@5::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.0 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.0 + IL_002b: ret - IL_0034: ldc.i4.0 - IL_0035: ret + IL_002c: ldc.i4.0 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method rwalk1@5::get_CheckClose .method public strict virtual instance int32 @@ -287,7 +273,7 @@ .method public strict virtual instance int32 GenerateNext(class [mscorlib]System.Collections.Generic.IEnumerable`1& next) cil managed { - // Code size 108 (0x6c) + // Code size 102 (0x66) .maxstack 7 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 @@ -296,63 +282,57 @@ IL_0007: sub IL_0008: switch ( IL_001b, - IL_001d, - IL_001f) - IL_0019: br.s IL_002a - - IL_001b: br.s IL_0021 - - IL_001d: br.s IL_0024 - - IL_001f: br.s IL_0027 + IL_001e, + IL_0021) + IL_0019: br.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0021: nop - IL_0022: br.s IL_0040 + IL_001b: nop + IL_001c: br.s IL_003a .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: br.s IL_005c + IL_001e: nop + IL_001f: br.s IL_0056 .line 100001,100001 : 0,0 '' - IL_0027: nop - IL_0028: br.s IL_0063 + IL_0021: nop + IL_0022: br.s IL_005d .line 100001,100001 : 0,0 '' - IL_002a: nop - IL_002b: ldarg.0 - IL_002c: ldc.i4.1 - IL_002d: stfld int32 SeqExpressionTailCalls02/rwalk2@6::pc + IL_0024: nop .line 6,6 : 26,33 '' - IL_0032: ldarg.0 - IL_0033: ldarg.0 - IL_0034: ldfld int32 SeqExpressionTailCalls02/rwalk2@6::x - IL_0039: stfld int32 SeqExpressionTailCalls02/rwalk2@6::current - IL_003e: ldc.i4.1 - IL_003f: ret - - IL_0040: ldarg.0 - IL_0041: ldc.i4.2 - IL_0042: stfld int32 SeqExpressionTailCalls02/rwalk2@6::pc + IL_0025: ldarg.0 + IL_0026: ldc.i4.1 + IL_0027: stfld int32 SeqExpressionTailCalls02/rwalk2@6::pc + IL_002c: ldarg.0 + IL_002d: ldarg.0 + IL_002e: ldfld int32 SeqExpressionTailCalls02/rwalk2@6::x + IL_0033: stfld int32 SeqExpressionTailCalls02/rwalk2@6::current + IL_0038: ldc.i4.1 + IL_0039: ret + + IL_003a: ldarg.0 + IL_003b: ldc.i4.2 + IL_003c: stfld int32 SeqExpressionTailCalls02/rwalk2@6::pc .line 6,6 : 42,54 '' - IL_0047: ldarg.1 - IL_0048: ldarg.0 - IL_0049: ldfld int32 SeqExpressionTailCalls02/rwalk2@6::x - IL_004e: ldc.i4.1 - IL_004f: add - IL_0050: call class [mscorlib]System.Collections.Generic.IEnumerable`1 SeqExpressionTailCalls02::rwalk1(int32) - IL_0055: stobj class [mscorlib]System.Collections.Generic.IEnumerable`1 - IL_005a: ldc.i4.2 - IL_005b: ret - - IL_005c: ldarg.0 - IL_005d: ldc.i4.3 - IL_005e: stfld int32 SeqExpressionTailCalls02/rwalk2@6::pc - IL_0063: ldarg.0 + IL_0041: ldarg.1 + IL_0042: ldarg.0 + IL_0043: ldfld int32 SeqExpressionTailCalls02/rwalk2@6::x + IL_0048: ldc.i4.1 + IL_0049: add + IL_004a: call class [mscorlib]System.Collections.Generic.IEnumerable`1 SeqExpressionTailCalls02::rwalk1(int32) + IL_004f: stobj class [mscorlib]System.Collections.Generic.IEnumerable`1 + IL_0054: ldc.i4.2 + IL_0055: ret + + IL_0056: ldarg.0 + IL_0057: ldc.i4.3 + IL_0058: stfld int32 SeqExpressionTailCalls02/rwalk2@6::pc + IL_005d: ldarg.0 + IL_005e: ldc.i4.0 + IL_005f: stfld int32 SeqExpressionTailCalls02/rwalk2@6::current IL_0064: ldc.i4.0 - IL_0065: stfld int32 SeqExpressionTailCalls02/rwalk2@6::current - IL_006a: ldc.i4.0 - IL_006b: ret + IL_0065: ret } // end of method rwalk2@6::GenerateNext .method public strict virtual instance void @@ -369,52 +349,44 @@ .method public strict virtual instance bool get_CheckClose() cil managed { - // Code size 56 (0x38) + // Code size 48 (0x30) .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldfld int32 SeqExpressionTailCalls02/rwalk2@6::pc IL_0006: switch ( IL_001d, - IL_001f, - IL_0021, - IL_0023) - IL_001b: br.s IL_0031 - - IL_001d: br.s IL_0025 - - IL_001f: br.s IL_0028 - - IL_0021: br.s IL_002b - - IL_0023: br.s IL_002e + IL_0020, + IL_0023, + IL_0026) + IL_001b: br.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0025: nop - IL_0026: br.s IL_0036 + IL_001d: nop + IL_001e: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0028: nop - IL_0029: br.s IL_0034 + IL_0020: nop + IL_0021: br.s IL_002c .line 100001,100001 : 0,0 '' - IL_002b: nop - IL_002c: br.s IL_0032 + IL_0023: nop + IL_0024: br.s IL_002a .line 100001,100001 : 0,0 '' - IL_002e: nop - IL_002f: br.s IL_0036 + IL_0026: nop + IL_0027: br.s IL_002e .line 100001,100001 : 0,0 '' - IL_0031: nop - IL_0032: ldc.i4.0 - IL_0033: ret + IL_0029: nop + IL_002a: ldc.i4.0 + IL_002b: ret - IL_0034: ldc.i4.0 - IL_0035: ret + IL_002c: ldc.i4.0 + IL_002d: ret - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method rwalk2@6::get_CheckClose .method public strict virtual instance int32 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/LetBinding01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/LetBinding01.il.bsl index c29de0c7bdc..5af7ea86311 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/LetBinding01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/LetBinding01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly LetBinding01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.LetBinding01 { - // Offset: 0x00000000 Length: 0x000001B4 + // Offset: 0x00000000 Length: 0x000001B0 } .mresource public FSharpOptimizationData.LetBinding01 { // Offset: 0x000001B8 Length: 0x00000070 } .module LetBinding01.exe -// MVID: {59B19250-269D-BEEF-A745-03835092B159} +// MVID: {60B68B90-269D-BEEF-A745-0383908BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01570000 +// Image base: 0x06AB0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -83,7 +83,7 @@ .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2 V_0) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 1,11 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\StaticInit\\LetBinding01.fs' + .line 5,5 : 1,11 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\StaticInit\\LetBinding01.fs' IL_0000: call class [FSharp.Core]Microsoft.FSharp.Core.Unit LetBinding01::get_x() IL_0005: pop .line 6,6 : 1,17 '' diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Class01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Class01.il.bsl index 2dd345fe2d4..aa250d3a1d8 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Class01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Class01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly StaticInit_Class01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.StaticInit_Class01 { - // Offset: 0x00000000 Length: 0x00000335 + // Offset: 0x00000000 Length: 0x0000032F } .mresource public FSharpOptimizationData.StaticInit_Class01 { - // Offset: 0x00000340 Length: 0x000000AD + // Offset: 0x00000338 Length: 0x000000AD } .module StaticInit_Class01.dll -// MVID: {59B19250-EC34-E66E-A745-03835092B159} +// MVID: {60B68B90-EC34-E66E-A745-0383908BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00FE0000 +// Image base: 0x06F70000 // =============== CLASS MEMBERS DECLARATION =================== @@ -56,14 +56,14 @@ { .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 static assembly int32 x - .field static assembly int32 'init@4-1' + .field static assembly int32 init@4 .method public specialname rtspecialname instance void .ctor(valuetype [mscorlib]System.DateTime s) cil managed { // Code size 9 (0x9) .maxstack 8 .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\\StaticInit\\StaticInit_Class01.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\StaticInit\\StaticInit_Class01.fs' IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 @@ -75,32 +75,28 @@ .method assembly static int32 f() cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 41 (0x29) + // Code size 37 (0x25) .maxstack 8 .line 7,7 : 23,37 '' IL_0000: volatile. - IL_0002: ldsfld int32 StaticInit_ClassS01/C::'init@4-1' + IL_0002: ldsfld int32 StaticInit_ClassS01/C::init@4 IL_0007: ldc.i4.1 - IL_0008: bge.s IL_000c - - IL_000a: br.s IL_000e - - IL_000c: br.s IL_0017 + IL_0008: bge.s IL_0013 .line 100001,100001 : 0,0 '' - IL_000e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() - IL_0013: nop + IL_000a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() + IL_000f: nop .line 100001,100001 : 0,0 '' - IL_0014: nop - IL_0015: br.s IL_0018 + IL_0010: nop + IL_0011: br.s IL_0014 .line 100001,100001 : 0,0 '' - IL_0017: nop - IL_0018: ldsfld int32 StaticInit_ClassS01/C::x - IL_001d: ldstr "2" - IL_0022: callvirt instance int32 [mscorlib]System.String::get_Length() - IL_0027: add - IL_0028: ret + IL_0013: nop + IL_0014: ldsfld int32 StaticInit_ClassS01/C::x + IL_0019: ldstr "2" + IL_001e: callvirt instance int32 [mscorlib]System.String::get_Length() + IL_0023: add + IL_0024: ret } // end of method C::f .method private specialname rtspecialname static @@ -138,7 +134,7 @@ IL_000a: stsfld int32 StaticInit_ClassS01/C::x IL_000f: ldc.i4.1 IL_0010: volatile. - IL_0012: stsfld int32 StaticInit_ClassS01/C::'init@4-1' + IL_0012: stsfld int32 StaticInit_ClassS01/C::init@4 .line 4,4 : 6,7 '' IL_0017: ret } // end of method $StaticInit_ClassS01::.cctor diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Module01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Module01.il.bsl index c9cd745c46a..bbe78bc0de6 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Module01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Module01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly StaticInit_Module01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.StaticInit_Module01 { - // Offset: 0x00000000 Length: 0x000002A7 + // Offset: 0x00000000 Length: 0x000002A3 } .mresource public FSharpOptimizationData.StaticInit_Module01 { - // Offset: 0x000002B0 Length: 0x000000DF + // Offset: 0x000002A8 Length: 0x000000DF } .module StaticInit_Module01.dll -// MVID: {59B19250-705F-DF4F-A745-03835092B159} +// MVID: {60B68B90-705F-DF4F-A745-0383908BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00370000 +// Image base: 0x050C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -94,7 +94,7 @@ { // Code size 6 (0x6) .maxstack 8 - IL_0000: ldsfld int32 ''.$StaticInit_Module01::'x@5-1' + IL_0000: ldsfld int32 ''.$StaticInit_Module01::x@5 IL_0005: ret } // end of method M::get_x @@ -110,7 +110,7 @@ .class private abstract auto ansi sealed ''.$StaticInit_Module01 extends [mscorlib]System.Object { - .field static assembly initonly int32 'x@5-1' + .field static assembly initonly int32 x@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 initonly int32 y@7 .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) @@ -129,11 +129,11 @@ [1] int32 y, [2] int32 z) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 3,21 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\StaticInit\\StaticInit_Module01.fs' + .line 5,5 : 3,21 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\StaticInit\\StaticInit_Module01.fs' IL_0000: ldstr "1" IL_0005: callvirt instance int32 [mscorlib]System.String::get_Length() IL_000a: dup - IL_000b: stsfld int32 ''.$StaticInit_Module01::'x@5-1' + IL_000b: stsfld int32 ''.$StaticInit_Module01::x@5 IL_0010: stloc.0 .line 7,7 : 5,27 '' IL_0011: call int32 StaticInit_Module01/M::get_x() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Struct01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Struct01.il.bsl index 0ddd5159218..a0fdade3853 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Struct01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Struct01.il.bsl @@ -34,20 +34,20 @@ } .mresource public FSharpSignatureData.StaticInit_Struct01 { - // Offset: 0x00000000 Length: 0x0000079F + // Offset: 0x00000000 Length: 0x000007A1 } .mresource public FSharpOptimizationData.StaticInit_Struct01 { // Offset: 0x000007A8 Length: 0x0000021F } .module StaticInit_Struct01.dll -// MVID: {5F1FA087-05F6-D6CB-A745-038387A01F5F} +// MVID: {60B68B90-05F6-D6CB-A745-0383908BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x053B0000 +// Image base: 0x05BE0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -77,7 +77,7 @@ .locals init ([0] valuetype StaticInit_Struct01/C& V_0, [1] class [mscorlib]System.Collections.IComparer V_1) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 6,7 'C:\\kevinransom\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\StaticInit\\StaticInit_Struct01.fs' + .line 4,4 : 6,7 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\StaticInit\\StaticInit_Struct01.fs' IL_0000: ldarga.s obj IL_0002: stloc.0 IL_0003: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() @@ -229,32 +229,28 @@ .method assembly static int32 f() cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 41 (0x29) + // Code size 37 (0x25) .maxstack 8 .line 7,7 : 23,37 '' IL_0000: volatile. IL_0002: ldsfld int32 StaticInit_Struct01/C::init@4 IL_0007: ldc.i4.1 - IL_0008: bge.s IL_000c - - IL_000a: br.s IL_000e - - IL_000c: br.s IL_0017 + IL_0008: bge.s IL_0013 .line 100001,100001 : 0,0 '' - IL_000e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() - IL_0013: nop + IL_000a: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() + IL_000f: nop .line 100001,100001 : 0,0 '' - IL_0014: nop - IL_0015: br.s IL_0018 + IL_0010: nop + IL_0011: br.s IL_0014 .line 100001,100001 : 0,0 '' - IL_0017: nop - IL_0018: ldsfld int32 StaticInit_Struct01/C::x - IL_001d: ldstr "2" - IL_0022: callvirt instance int32 [mscorlib]System.String::get_Length() - IL_0027: add - IL_0028: ret + IL_0013: nop + IL_0014: ldsfld int32 StaticInit_Struct01/C::x + IL_0019: ldstr "2" + IL_001e: callvirt instance int32 [mscorlib]System.String::get_Length() + IL_0023: add + IL_0024: ret } // end of method C::f .method public hidebysig virtual final diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch01.il.bsl index aa77b1c7e0e..c3bb349428a 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly SteppingMatch01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SteppingMatch01 { - // Offset: 0x00000000 Length: 0x0000021C + // Offset: 0x00000000 Length: 0x00000210 } .mresource public FSharpOptimizationData.SteppingMatch01 { - // Offset: 0x00000220 Length: 0x0000007A + // Offset: 0x00000218 Length: 0x0000007A } .module SteppingMatch01.dll -// MVID: {59B19213-ABFD-13F6-A745-03831392B159} +// MVID: {60B68B90-ABFD-13F6-A745-0383908BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00CA0000 +// Image base: 0x06940000 // =============== CLASS MEMBERS DECLARATION =================== @@ -59,7 +59,7 @@ [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`2/Choice2Of2 V_1, [2] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`2/Choice1Of2 V_2) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch01.fs' + .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch01.fs' IL_0000: ldarg.0 IL_0001: stloc.0 IL_0002: ldloc.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch02.il.bsl index 453261211ee..21138ae19ab 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch02.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly SteppingMatch02 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SteppingMatch02 { - // Offset: 0x00000000 Length: 0x0000021C + // Offset: 0x00000000 Length: 0x00000210 } .mresource public FSharpOptimizationData.SteppingMatch02 { - // Offset: 0x00000220 Length: 0x0000007A + // Offset: 0x00000218 Length: 0x0000007A } .module SteppingMatch02.dll -// MVID: {59B19213-CAC2-C63D-A745-03831392B159} +// MVID: {60B68B90-CAC2-C63D-A745-0383908BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01090000 +// Image base: 0x05330000 // =============== CLASS MEMBERS DECLARATION =================== @@ -59,7 +59,7 @@ [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`2/Choice1Of2 V_1, [2] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`2/Choice2Of2 V_2) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch02.fs' + .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch02.fs' IL_0000: ldarg.0 IL_0001: stloc.0 IL_0002: ldloc.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch03.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch03.il.bsl index f2ced1b23d2..2413a566d87 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch03.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch03.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly SteppingMatch03 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SteppingMatch03 { - // Offset: 0x00000000 Length: 0x00000231 + // Offset: 0x00000000 Length: 0x00000225 } .mresource public FSharpOptimizationData.SteppingMatch03 { - // Offset: 0x00000238 Length: 0x0000007A + // Offset: 0x00000230 Length: 0x0000007A } .module SteppingMatch03.dll -// MVID: {59B19213-4E87-D110-A745-03831392B159} +// MVID: {60B68B90-4E87-D110-A745-0383908BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00D00000 +// Image base: 0x07380000 // =============== CLASS MEMBERS DECLARATION =================== @@ -53,7 +53,7 @@ .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 funcC(class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3 n) cil managed { - // Code size 81 (0x51) + // Code size 75 (0x4b) .maxstack 3 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3 V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3 V_1, @@ -61,50 +61,44 @@ [3] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 V_3, [4] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 V_4) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch03.fs' + .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch03.fs' IL_0000: ldarg.0 IL_0001: stloc.0 IL_0002: ldloc.0 IL_0003: stloc.1 IL_0004: ldloc.1 IL_0005: isinst class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 - IL_000a: brtrue.s IL_0016 + IL_000a: brtrue.s IL_0026 IL_000c: ldloc.1 IL_000d: isinst class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 - IL_0012: brtrue.s IL_0018 + IL_0012: brtrue.s IL_0038 - IL_0014: br.s IL_001a - - IL_0016: br.s IL_002c - - IL_0018: br.s IL_003e - - IL_001a: ldloc.0 - IL_001b: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 - IL_0020: stloc.2 + IL_0014: ldloc.0 + IL_0015: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 + IL_001a: stloc.2 .line 7,7 : 13,35 '' - IL_0021: ldstr "A" - IL_0026: call void [mscorlib]System.Console::WriteLine(string) - IL_002b: ret + IL_001b: ldstr "A" + IL_0020: call void [mscorlib]System.Console::WriteLine(string) + IL_0025: ret .line 5,5 : 9,21 '' - IL_002c: ldloc.0 - IL_002d: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 - IL_0032: stloc.3 + IL_0026: ldloc.0 + IL_0027: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 + IL_002c: stloc.3 .line 9,9 : 13,35 '' - IL_0033: ldstr "B" - IL_0038: call void [mscorlib]System.Console::WriteLine(string) - IL_003d: ret + IL_002d: ldstr "B" + IL_0032: call void [mscorlib]System.Console::WriteLine(string) + IL_0037: ret .line 5,5 : 9,21 '' - IL_003e: ldloc.0 - IL_003f: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 - IL_0044: stloc.s V_4 + IL_0038: ldloc.0 + IL_0039: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 + IL_003e: stloc.s V_4 .line 11,11 : 13,35 '' - IL_0046: ldstr "C" - IL_004b: call void [mscorlib]System.Console::WriteLine(string) - IL_0050: ret + IL_0040: ldstr "C" + IL_0045: call void [mscorlib]System.Console::WriteLine(string) + IL_004a: ret } // end of method SteppingMatch03::funcC } // end of class SteppingMatch03 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch04.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch04.il.bsl index dc909634a1a..df2a0c23809 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch04.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch04.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly SteppingMatch04 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SteppingMatch04 { - // Offset: 0x00000000 Length: 0x00000232 + // Offset: 0x00000000 Length: 0x00000226 } .mresource public FSharpOptimizationData.SteppingMatch04 { - // Offset: 0x00000238 Length: 0x0000007B + // Offset: 0x00000230 Length: 0x0000007B } .module SteppingMatch04.dll -// MVID: {59B19213-6D4C-8357-A745-03831392B159} +// MVID: {60B68B90-6D4C-8357-A745-0383908BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x02770000 +// Image base: 0x073C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -53,7 +53,7 @@ .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 funcC2(class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3 n) cil managed { - // Code size 81 (0x51) + // Code size 75 (0x4b) .maxstack 3 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3 V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3 V_1, @@ -61,50 +61,44 @@ [3] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 V_3, [4] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 V_4) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch04.fs' + .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch04.fs' IL_0000: ldarg.0 IL_0001: stloc.0 IL_0002: ldloc.0 IL_0003: stloc.1 IL_0004: ldloc.1 IL_0005: isinst class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 - IL_000a: brtrue.s IL_0016 + IL_000a: brtrue.s IL_0026 IL_000c: ldloc.1 IL_000d: isinst class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 - IL_0012: brtrue.s IL_0018 + IL_0012: brtrue.s IL_0038 - IL_0014: br.s IL_001a - - IL_0016: br.s IL_002c - - IL_0018: br.s IL_003e - - IL_001a: ldloc.0 - IL_001b: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 - IL_0020: stloc.2 + IL_0014: ldloc.0 + IL_0015: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 + IL_001a: stloc.2 .line 7,7 : 13,35 '' - IL_0021: ldstr "B" - IL_0026: call void [mscorlib]System.Console::WriteLine(string) - IL_002b: ret + IL_001b: ldstr "B" + IL_0020: call void [mscorlib]System.Console::WriteLine(string) + IL_0025: ret .line 5,5 : 9,21 '' - IL_002c: ldloc.0 - IL_002d: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 - IL_0032: stloc.3 + IL_0026: ldloc.0 + IL_0027: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 + IL_002c: stloc.3 .line 9,9 : 13,35 '' - IL_0033: ldstr "C" - IL_0038: call void [mscorlib]System.Console::WriteLine(string) - IL_003d: ret + IL_002d: ldstr "C" + IL_0032: call void [mscorlib]System.Console::WriteLine(string) + IL_0037: ret .line 5,5 : 9,21 '' - IL_003e: ldloc.0 - IL_003f: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 - IL_0044: stloc.s V_4 + IL_0038: ldloc.0 + IL_0039: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 + IL_003e: stloc.s V_4 .line 11,11 : 13,35 '' - IL_0046: ldstr "A" - IL_004b: call void [mscorlib]System.Console::WriteLine(string) - IL_0050: ret + IL_0040: ldstr "A" + IL_0045: call void [mscorlib]System.Console::WriteLine(string) + IL_004a: ret } // end of method SteppingMatch04::funcC2 } // end of class SteppingMatch04 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch05.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch05.il.bsl index 8da1f763ae7..6f851d8245e 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch05.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch05.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly SteppingMatch05 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SteppingMatch05 { - // Offset: 0x00000000 Length: 0x00000232 + // Offset: 0x00000000 Length: 0x00000226 } .mresource public FSharpOptimizationData.SteppingMatch05 { - // Offset: 0x00000238 Length: 0x0000007B + // Offset: 0x00000230 Length: 0x0000007B } .module SteppingMatch05.dll -// MVID: {59B19213-30E9-4ADA-A745-03831392B159} +// MVID: {60B68B90-30E9-4ADA-A745-0383908BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x02FF0000 +// Image base: 0x072E0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -53,7 +53,7 @@ .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 funcC3(class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3 n) cil managed { - // Code size 81 (0x51) + // Code size 75 (0x4b) .maxstack 3 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3 V_0, [1] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3 V_1, @@ -61,50 +61,44 @@ [3] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 V_3, [4] class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 V_4) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch05.fs' + .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch05.fs' IL_0000: ldarg.0 IL_0001: stloc.0 IL_0002: ldloc.0 IL_0003: stloc.1 IL_0004: ldloc.1 IL_0005: isinst class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 - IL_000a: brtrue.s IL_0016 + IL_000a: brtrue.s IL_0026 IL_000c: ldloc.1 IL_000d: isinst class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 - IL_0012: brtrue.s IL_0018 + IL_0012: brtrue.s IL_0038 - IL_0014: br.s IL_001a - - IL_0016: br.s IL_002c - - IL_0018: br.s IL_003e - - IL_001a: ldloc.0 - IL_001b: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 - IL_0020: stloc.2 + IL_0014: ldloc.0 + IL_0015: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice3Of3 + IL_001a: stloc.2 .line 7,7 : 13,35 '' - IL_0021: ldstr "C" - IL_0026: call void [mscorlib]System.Console::WriteLine(string) - IL_002b: ret + IL_001b: ldstr "C" + IL_0020: call void [mscorlib]System.Console::WriteLine(string) + IL_0025: ret .line 5,5 : 9,21 '' - IL_002c: ldloc.0 - IL_002d: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 - IL_0032: stloc.3 + IL_0026: ldloc.0 + IL_0027: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice2Of3 + IL_002c: stloc.3 .line 9,9 : 13,35 '' - IL_0033: ldstr "B" - IL_0038: call void [mscorlib]System.Console::WriteLine(string) - IL_003d: ret + IL_002d: ldstr "B" + IL_0032: call void [mscorlib]System.Console::WriteLine(string) + IL_0037: ret .line 5,5 : 9,21 '' - IL_003e: ldloc.0 - IL_003f: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 - IL_0044: stloc.s V_4 + IL_0038: ldloc.0 + IL_0039: castclass class [FSharp.Core]Microsoft.FSharp.Core.FSharpChoice`3/Choice1Of3 + IL_003e: stloc.s V_4 .line 11,11 : 13,35 '' - IL_0046: ldstr "A" - IL_004b: call void [mscorlib]System.Console::WriteLine(string) - IL_0050: ret + IL_0040: ldstr "A" + IL_0045: call void [mscorlib]System.Console::WriteLine(string) + IL_004a: ret } // end of method SteppingMatch05::funcC3 } // end of class SteppingMatch05 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch06.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch06.il.bsl index 078b8cd73e3..da1fa20a676 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch06.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch06.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly SteppingMatch06 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SteppingMatch06 { - // Offset: 0x00000000 Length: 0x0000067D + // Offset: 0x00000000 Length: 0x00000675 } .mresource public FSharpOptimizationData.SteppingMatch06 { - // Offset: 0x00000688 Length: 0x000001D9 + // Offset: 0x00000680 Length: 0x000001D9 } .module SteppingMatch06.dll -// MVID: {59B19213-4FAE-FD21-A745-03831392B159} +// MVID: {60B68B90-4FAE-FD21-A745-0383908BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x028F0000 +// Image base: 0x05BB0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -205,77 +205,61 @@ instance int32 CompareTo(class SteppingMatch06/Discr obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 64 (0x40) + // Code size 48 (0x30) .maxstack 4 .locals init ([0] int32 V_0, [1] int32 V_1) .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\\SteppingMatch\\SteppingMatch06.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch06.fs' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_0032 + IL_0004: brfalse.s IL_0026 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: ldnull - IL_000c: cgt.un - IL_000e: brfalse.s IL_0012 - - IL_0010: br.s IL_0014 - - IL_0012: br.s IL_0030 + IL_0006: ldarg.1 + IL_0007: ldnull + IL_0008: cgt.un + IL_000a: brfalse.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0014: ldarg.0 - IL_0015: ldfld int32 SteppingMatch06/Discr::_tag - IL_001a: stloc.0 - IL_001b: ldarg.1 - IL_001c: ldfld int32 SteppingMatch06/Discr::_tag - IL_0021: stloc.1 - IL_0022: ldloc.0 - IL_0023: ldloc.1 - IL_0024: bne.un.s IL_0028 - - IL_0026: br.s IL_002a - - IL_0028: br.s IL_002c + IL_000c: ldarg.0 + IL_000d: ldfld int32 SteppingMatch06/Discr::_tag + IL_0012: stloc.0 + IL_0013: ldarg.1 + IL_0014: ldfld int32 SteppingMatch06/Discr::_tag + IL_0019: stloc.1 + IL_001a: ldloc.0 + IL_001b: ldloc.1 + IL_001c: bne.un.s IL_0020 .line 100001,100001 : 0,0 '' - IL_002a: ldc.i4.0 - IL_002b: ret + IL_001e: ldc.i4.0 + IL_001f: ret .line 100001,100001 : 0,0 '' - IL_002c: ldloc.0 - IL_002d: ldloc.1 - IL_002e: sub - IL_002f: ret + IL_0020: ldloc.0 + IL_0021: ldloc.1 + IL_0022: sub + IL_0023: ret .line 100001,100001 : 0,0 '' - IL_0030: ldc.i4.1 - IL_0031: ret + IL_0024: ldc.i4.1 + IL_0025: ret .line 100001,100001 : 0,0 '' - IL_0032: ldarg.1 - IL_0033: ldnull - IL_0034: cgt.un - IL_0036: brfalse.s IL_003a - - IL_0038: br.s IL_003c - - IL_003a: br.s IL_003e + IL_0026: ldarg.1 + IL_0027: ldnull + IL_0028: cgt.un + IL_002a: brfalse.s IL_002e .line 100001,100001 : 0,0 '' - IL_003c: ldc.i4.m1 - IL_003d: ret + IL_002c: ldc.i4.m1 + IL_002d: ret .line 100001,100001 : 0,0 '' - IL_003e: ldc.i4.0 - IL_003f: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method Discr::CompareTo .method public hidebysig virtual final @@ -297,7 +281,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 81 (0x51) + // Code size 65 (0x41) .maxstack 4 .locals init ([0] class SteppingMatch06/Discr V_0, [1] int32 V_1, @@ -309,99 +293,79 @@ IL_0007: ldarg.0 IL_0008: ldnull IL_0009: cgt.un - IL_000b: brfalse.s IL_000f - - IL_000d: br.s IL_0011 - - IL_000f: br.s IL_003e + IL_000b: brfalse.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0011: ldarg.1 - IL_0012: unbox.any SteppingMatch06/Discr - IL_0017: ldnull - IL_0018: cgt.un - IL_001a: brfalse.s IL_001e - - IL_001c: br.s IL_0020 - - IL_001e: br.s IL_003c + IL_000d: ldarg.1 + IL_000e: unbox.any SteppingMatch06/Discr + IL_0013: ldnull + IL_0014: cgt.un + IL_0016: brfalse.s IL_0030 .line 100001,100001 : 0,0 '' - IL_0020: ldarg.0 - IL_0021: ldfld int32 SteppingMatch06/Discr::_tag - IL_0026: stloc.1 - IL_0027: ldloc.0 - IL_0028: ldfld int32 SteppingMatch06/Discr::_tag - IL_002d: stloc.2 - IL_002e: ldloc.1 - IL_002f: ldloc.2 - IL_0030: bne.un.s IL_0034 - - IL_0032: br.s IL_0036 - - IL_0034: br.s IL_0038 + IL_0018: ldarg.0 + IL_0019: ldfld int32 SteppingMatch06/Discr::_tag + IL_001e: stloc.1 + IL_001f: ldloc.0 + IL_0020: ldfld int32 SteppingMatch06/Discr::_tag + IL_0025: stloc.2 + IL_0026: ldloc.1 + IL_0027: ldloc.2 + IL_0028: bne.un.s IL_002c .line 100001,100001 : 0,0 '' - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002a: ldc.i4.0 + IL_002b: ret .line 100001,100001 : 0,0 '' - IL_0038: ldloc.1 - IL_0039: ldloc.2 - IL_003a: sub - IL_003b: ret + IL_002c: ldloc.1 + IL_002d: ldloc.2 + IL_002e: sub + IL_002f: ret .line 100001,100001 : 0,0 '' - IL_003c: ldc.i4.1 - IL_003d: ret + IL_0030: ldc.i4.1 + IL_0031: ret .line 100001,100001 : 0,0 '' - IL_003e: ldarg.1 - IL_003f: unbox.any SteppingMatch06/Discr - IL_0044: ldnull - IL_0045: cgt.un - IL_0047: brfalse.s IL_004b - - IL_0049: br.s IL_004d - - IL_004b: br.s IL_004f + IL_0032: ldarg.1 + IL_0033: unbox.any SteppingMatch06/Discr + IL_0038: ldnull + IL_0039: cgt.un + IL_003b: brfalse.s IL_003f .line 100001,100001 : 0,0 '' - IL_004d: ldc.i4.m1 - IL_004e: ret + IL_003d: ldc.i4.m1 + IL_003e: ret .line 100001,100001 : 0,0 '' - IL_004f: ldc.i4.0 - IL_0050: ret + IL_003f: ldc.i4.0 + IL_0040: ret } // end of method Discr::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 21 (0x15) + // Code size 17 (0x11) .maxstack 3 .locals init ([0] int32 V_0) .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_0013 + IL_0004: brfalse.s IL_000f .line 100001,100001 : 0,0 '' - IL_000a: ldc.i4.0 - IL_000b: stloc.0 - IL_000c: ldarg.0 - IL_000d: ldfld int32 SteppingMatch06/Discr::_tag - IL_0012: ret + IL_0006: ldc.i4.0 + IL_0007: stloc.0 + IL_0008: ldarg.0 + IL_0009: ldfld int32 SteppingMatch06/Discr::_tag + IL_000e: ret .line 100001,100001 : 0,0 '' - IL_0013: ldc.i4.0 - IL_0014: ret + IL_000f: ldc.i4.0 + IL_0010: ret } // end of method Discr::GetHashCode .method public hidebysig virtual final @@ -422,7 +386,7 @@ 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) + // Code size 47 (0x2f) .maxstack 4 .locals init ([0] class SteppingMatch06/Discr V_0, [1] class SteppingMatch06/Discr V_1, @@ -432,55 +396,47 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_002f + IL_0004: brfalse.s IL_0027 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: isinst SteppingMatch06/Discr - IL_0010: stloc.0 - IL_0011: ldloc.0 - IL_0012: brfalse.s IL_0016 - - IL_0014: br.s IL_0018 - - IL_0016: br.s IL_002d + IL_0006: ldarg.1 + IL_0007: isinst SteppingMatch06/Discr + IL_000c: stloc.0 + IL_000d: ldloc.0 + IL_000e: brfalse.s IL_0025 .line 100001,100001 : 0,0 '' - IL_0018: ldloc.0 - IL_0019: stloc.1 - IL_001a: ldarg.0 - IL_001b: ldfld int32 SteppingMatch06/Discr::_tag - IL_0020: stloc.2 - IL_0021: ldloc.1 - IL_0022: ldfld int32 SteppingMatch06/Discr::_tag - IL_0027: stloc.3 - IL_0028: ldloc.2 - IL_0029: ldloc.3 - IL_002a: ceq - IL_002c: ret + IL_0010: ldloc.0 + IL_0011: stloc.1 + IL_0012: ldarg.0 + IL_0013: ldfld int32 SteppingMatch06/Discr::_tag + IL_0018: stloc.2 + IL_0019: ldloc.1 + IL_001a: ldfld int32 SteppingMatch06/Discr::_tag + IL_001f: stloc.3 + IL_0020: ldloc.2 + IL_0021: ldloc.3 + IL_0022: ceq + IL_0024: ret .line 100001,100001 : 0,0 '' - IL_002d: ldc.i4.0 - IL_002e: ret + IL_0025: ldc.i4.0 + IL_0026: ret .line 100001,100001 : 0,0 '' - IL_002f: ldarg.1 - IL_0030: ldnull - IL_0031: cgt.un - IL_0033: ldc.i4.0 - IL_0034: ceq - IL_0036: ret + IL_0027: ldarg.1 + IL_0028: ldnull + IL_0029: cgt.un + IL_002b: ldc.i4.0 + IL_002c: ceq + IL_002e: ret } // end of method Discr::Equals .method public hidebysig virtual final instance bool Equals(class SteppingMatch06/Discr obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 49 (0x31) + // Code size 41 (0x29) .maxstack 4 .locals init ([0] int32 V_0, [1] int32 V_1) @@ -488,52 +444,44 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_0029 + IL_0004: brfalse.s IL_0021 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: ldnull - IL_000c: cgt.un - IL_000e: brfalse.s IL_0012 - - IL_0010: br.s IL_0014 - - IL_0012: br.s IL_0027 + IL_0006: ldarg.1 + IL_0007: ldnull + IL_0008: cgt.un + IL_000a: brfalse.s IL_001f .line 100001,100001 : 0,0 '' - IL_0014: ldarg.0 - IL_0015: ldfld int32 SteppingMatch06/Discr::_tag - IL_001a: stloc.0 - IL_001b: ldarg.1 - IL_001c: ldfld int32 SteppingMatch06/Discr::_tag - IL_0021: stloc.1 - IL_0022: ldloc.0 - IL_0023: ldloc.1 - IL_0024: ceq - IL_0026: ret + IL_000c: ldarg.0 + IL_000d: ldfld int32 SteppingMatch06/Discr::_tag + IL_0012: stloc.0 + IL_0013: ldarg.1 + IL_0014: ldfld int32 SteppingMatch06/Discr::_tag + IL_0019: stloc.1 + IL_001a: ldloc.0 + IL_001b: ldloc.1 + IL_001c: ceq + IL_001e: ret .line 100001,100001 : 0,0 '' - IL_0027: ldc.i4.0 - IL_0028: ret + IL_001f: ldc.i4.0 + IL_0020: ret .line 100001,100001 : 0,0 '' - IL_0029: ldarg.1 - IL_002a: ldnull - IL_002b: cgt.un - IL_002d: ldc.i4.0 - IL_002e: ceq - IL_0030: ret + IL_0021: ldarg.1 + IL_0022: ldnull + IL_0023: cgt.un + IL_0025: ldc.i4.0 + IL_0026: ceq + IL_0028: ret } // end of method Discr::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 24 (0x18) + // Code size 20 (0x14) .maxstack 4 .locals init ([0] class SteppingMatch06/Discr V_0) .line 4,4 : 6,11 '' @@ -541,21 +489,17 @@ IL_0001: isinst SteppingMatch06/Discr IL_0006: stloc.0 IL_0007: ldloc.0 - IL_0008: brfalse.s IL_000c - - IL_000a: br.s IL_000e - - IL_000c: br.s IL_0016 + IL_0008: brfalse.s IL_0012 .line 100001,100001 : 0,0 '' - IL_000e: ldarg.0 - IL_000f: ldloc.0 - IL_0010: callvirt instance bool SteppingMatch06/Discr::Equals(class SteppingMatch06/Discr) - IL_0015: ret + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: callvirt instance bool SteppingMatch06/Discr::Equals(class SteppingMatch06/Discr) + IL_0011: ret .line 100001,100001 : 0,0 '' - IL_0016: ldc.i4.0 - IL_0017: ret + IL_0012: ldc.i4.0 + IL_0013: ret } // end of method Discr::Equals .property instance int32 Tag() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch07.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch07.il.bsl index a897b0908a0..d91371610a6 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch07.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch07.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly SteppingMatch07 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SteppingMatch07 { - // Offset: 0x00000000 Length: 0x0000067D + // Offset: 0x00000000 Length: 0x00000675 } .mresource public FSharpOptimizationData.SteppingMatch07 { - // Offset: 0x00000688 Length: 0x000001D9 + // Offset: 0x00000680 Length: 0x000001D9 } .module SteppingMatch07.dll -// MVID: {59B19213-D373-07F3-A745-03831392B159} +// MVID: {60B68B90-D373-07F3-A745-0383908BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x03330000 +// Image base: 0x07270000 // =============== CLASS MEMBERS DECLARATION =================== @@ -205,77 +205,61 @@ instance int32 CompareTo(class SteppingMatch07/Discr obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 64 (0x40) + // Code size 48 (0x30) .maxstack 4 .locals init ([0] int32 V_0, [1] int32 V_1) .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\\SteppingMatch\\SteppingMatch07.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch07.fs' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_0032 + IL_0004: brfalse.s IL_0026 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: ldnull - IL_000c: cgt.un - IL_000e: brfalse.s IL_0012 - - IL_0010: br.s IL_0014 - - IL_0012: br.s IL_0030 + IL_0006: ldarg.1 + IL_0007: ldnull + IL_0008: cgt.un + IL_000a: brfalse.s IL_0024 .line 100001,100001 : 0,0 '' - IL_0014: ldarg.0 - IL_0015: ldfld int32 SteppingMatch07/Discr::_tag - IL_001a: stloc.0 - IL_001b: ldarg.1 - IL_001c: ldfld int32 SteppingMatch07/Discr::_tag - IL_0021: stloc.1 - IL_0022: ldloc.0 - IL_0023: ldloc.1 - IL_0024: bne.un.s IL_0028 - - IL_0026: br.s IL_002a - - IL_0028: br.s IL_002c + IL_000c: ldarg.0 + IL_000d: ldfld int32 SteppingMatch07/Discr::_tag + IL_0012: stloc.0 + IL_0013: ldarg.1 + IL_0014: ldfld int32 SteppingMatch07/Discr::_tag + IL_0019: stloc.1 + IL_001a: ldloc.0 + IL_001b: ldloc.1 + IL_001c: bne.un.s IL_0020 .line 100001,100001 : 0,0 '' - IL_002a: ldc.i4.0 - IL_002b: ret + IL_001e: ldc.i4.0 + IL_001f: ret .line 100001,100001 : 0,0 '' - IL_002c: ldloc.0 - IL_002d: ldloc.1 - IL_002e: sub - IL_002f: ret + IL_0020: ldloc.0 + IL_0021: ldloc.1 + IL_0022: sub + IL_0023: ret .line 100001,100001 : 0,0 '' - IL_0030: ldc.i4.1 - IL_0031: ret + IL_0024: ldc.i4.1 + IL_0025: ret .line 100001,100001 : 0,0 '' - IL_0032: ldarg.1 - IL_0033: ldnull - IL_0034: cgt.un - IL_0036: brfalse.s IL_003a - - IL_0038: br.s IL_003c - - IL_003a: br.s IL_003e + IL_0026: ldarg.1 + IL_0027: ldnull + IL_0028: cgt.un + IL_002a: brfalse.s IL_002e .line 100001,100001 : 0,0 '' - IL_003c: ldc.i4.m1 - IL_003d: ret + IL_002c: ldc.i4.m1 + IL_002d: ret .line 100001,100001 : 0,0 '' - IL_003e: ldc.i4.0 - IL_003f: ret + IL_002e: ldc.i4.0 + IL_002f: ret } // end of method Discr::CompareTo .method public hidebysig virtual final @@ -297,7 +281,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 81 (0x51) + // Code size 65 (0x41) .maxstack 4 .locals init ([0] class SteppingMatch07/Discr V_0, [1] int32 V_1, @@ -309,99 +293,79 @@ IL_0007: ldarg.0 IL_0008: ldnull IL_0009: cgt.un - IL_000b: brfalse.s IL_000f - - IL_000d: br.s IL_0011 - - IL_000f: br.s IL_003e + IL_000b: brfalse.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0011: ldarg.1 - IL_0012: unbox.any SteppingMatch07/Discr - IL_0017: ldnull - IL_0018: cgt.un - IL_001a: brfalse.s IL_001e - - IL_001c: br.s IL_0020 - - IL_001e: br.s IL_003c + IL_000d: ldarg.1 + IL_000e: unbox.any SteppingMatch07/Discr + IL_0013: ldnull + IL_0014: cgt.un + IL_0016: brfalse.s IL_0030 .line 100001,100001 : 0,0 '' - IL_0020: ldarg.0 - IL_0021: ldfld int32 SteppingMatch07/Discr::_tag - IL_0026: stloc.1 - IL_0027: ldloc.0 - IL_0028: ldfld int32 SteppingMatch07/Discr::_tag - IL_002d: stloc.2 - IL_002e: ldloc.1 - IL_002f: ldloc.2 - IL_0030: bne.un.s IL_0034 - - IL_0032: br.s IL_0036 - - IL_0034: br.s IL_0038 + IL_0018: ldarg.0 + IL_0019: ldfld int32 SteppingMatch07/Discr::_tag + IL_001e: stloc.1 + IL_001f: ldloc.0 + IL_0020: ldfld int32 SteppingMatch07/Discr::_tag + IL_0025: stloc.2 + IL_0026: ldloc.1 + IL_0027: ldloc.2 + IL_0028: bne.un.s IL_002c .line 100001,100001 : 0,0 '' - IL_0036: ldc.i4.0 - IL_0037: ret + IL_002a: ldc.i4.0 + IL_002b: ret .line 100001,100001 : 0,0 '' - IL_0038: ldloc.1 - IL_0039: ldloc.2 - IL_003a: sub - IL_003b: ret + IL_002c: ldloc.1 + IL_002d: ldloc.2 + IL_002e: sub + IL_002f: ret .line 100001,100001 : 0,0 '' - IL_003c: ldc.i4.1 - IL_003d: ret + IL_0030: ldc.i4.1 + IL_0031: ret .line 100001,100001 : 0,0 '' - IL_003e: ldarg.1 - IL_003f: unbox.any SteppingMatch07/Discr - IL_0044: ldnull - IL_0045: cgt.un - IL_0047: brfalse.s IL_004b - - IL_0049: br.s IL_004d - - IL_004b: br.s IL_004f + IL_0032: ldarg.1 + IL_0033: unbox.any SteppingMatch07/Discr + IL_0038: ldnull + IL_0039: cgt.un + IL_003b: brfalse.s IL_003f .line 100001,100001 : 0,0 '' - IL_004d: ldc.i4.m1 - IL_004e: ret + IL_003d: ldc.i4.m1 + IL_003e: ret .line 100001,100001 : 0,0 '' - IL_004f: ldc.i4.0 - IL_0050: ret + IL_003f: ldc.i4.0 + IL_0040: ret } // end of method Discr::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 21 (0x15) + // Code size 17 (0x11) .maxstack 3 .locals init ([0] int32 V_0) .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_0013 + IL_0004: brfalse.s IL_000f .line 100001,100001 : 0,0 '' - IL_000a: ldc.i4.0 - IL_000b: stloc.0 - IL_000c: ldarg.0 - IL_000d: ldfld int32 SteppingMatch07/Discr::_tag - IL_0012: ret + IL_0006: ldc.i4.0 + IL_0007: stloc.0 + IL_0008: ldarg.0 + IL_0009: ldfld int32 SteppingMatch07/Discr::_tag + IL_000e: ret .line 100001,100001 : 0,0 '' - IL_0013: ldc.i4.0 - IL_0014: ret + IL_000f: ldc.i4.0 + IL_0010: ret } // end of method Discr::GetHashCode .method public hidebysig virtual final @@ -422,7 +386,7 @@ 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) + // Code size 47 (0x2f) .maxstack 4 .locals init ([0] class SteppingMatch07/Discr V_0, [1] class SteppingMatch07/Discr V_1, @@ -432,55 +396,47 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_002f + IL_0004: brfalse.s IL_0027 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: isinst SteppingMatch07/Discr - IL_0010: stloc.0 - IL_0011: ldloc.0 - IL_0012: brfalse.s IL_0016 - - IL_0014: br.s IL_0018 - - IL_0016: br.s IL_002d + IL_0006: ldarg.1 + IL_0007: isinst SteppingMatch07/Discr + IL_000c: stloc.0 + IL_000d: ldloc.0 + IL_000e: brfalse.s IL_0025 .line 100001,100001 : 0,0 '' - IL_0018: ldloc.0 - IL_0019: stloc.1 - IL_001a: ldarg.0 - IL_001b: ldfld int32 SteppingMatch07/Discr::_tag - IL_0020: stloc.2 - IL_0021: ldloc.1 - IL_0022: ldfld int32 SteppingMatch07/Discr::_tag - IL_0027: stloc.3 - IL_0028: ldloc.2 - IL_0029: ldloc.3 - IL_002a: ceq - IL_002c: ret + IL_0010: ldloc.0 + IL_0011: stloc.1 + IL_0012: ldarg.0 + IL_0013: ldfld int32 SteppingMatch07/Discr::_tag + IL_0018: stloc.2 + IL_0019: ldloc.1 + IL_001a: ldfld int32 SteppingMatch07/Discr::_tag + IL_001f: stloc.3 + IL_0020: ldloc.2 + IL_0021: ldloc.3 + IL_0022: ceq + IL_0024: ret .line 100001,100001 : 0,0 '' - IL_002d: ldc.i4.0 - IL_002e: ret + IL_0025: ldc.i4.0 + IL_0026: ret .line 100001,100001 : 0,0 '' - IL_002f: ldarg.1 - IL_0030: ldnull - IL_0031: cgt.un - IL_0033: ldc.i4.0 - IL_0034: ceq - IL_0036: ret + IL_0027: ldarg.1 + IL_0028: ldnull + IL_0029: cgt.un + IL_002b: ldc.i4.0 + IL_002c: ceq + IL_002e: ret } // end of method Discr::Equals .method public hidebysig virtual final instance bool Equals(class SteppingMatch07/Discr obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 49 (0x31) + // Code size 41 (0x29) .maxstack 4 .locals init ([0] int32 V_0, [1] int32 V_1) @@ -488,52 +444,44 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_0029 + IL_0004: brfalse.s IL_0021 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: ldnull - IL_000c: cgt.un - IL_000e: brfalse.s IL_0012 - - IL_0010: br.s IL_0014 - - IL_0012: br.s IL_0027 + IL_0006: ldarg.1 + IL_0007: ldnull + IL_0008: cgt.un + IL_000a: brfalse.s IL_001f .line 100001,100001 : 0,0 '' - IL_0014: ldarg.0 - IL_0015: ldfld int32 SteppingMatch07/Discr::_tag - IL_001a: stloc.0 - IL_001b: ldarg.1 - IL_001c: ldfld int32 SteppingMatch07/Discr::_tag - IL_0021: stloc.1 - IL_0022: ldloc.0 - IL_0023: ldloc.1 - IL_0024: ceq - IL_0026: ret + IL_000c: ldarg.0 + IL_000d: ldfld int32 SteppingMatch07/Discr::_tag + IL_0012: stloc.0 + IL_0013: ldarg.1 + IL_0014: ldfld int32 SteppingMatch07/Discr::_tag + IL_0019: stloc.1 + IL_001a: ldloc.0 + IL_001b: ldloc.1 + IL_001c: ceq + IL_001e: ret .line 100001,100001 : 0,0 '' - IL_0027: ldc.i4.0 - IL_0028: ret + IL_001f: ldc.i4.0 + IL_0020: ret .line 100001,100001 : 0,0 '' - IL_0029: ldarg.1 - IL_002a: ldnull - IL_002b: cgt.un - IL_002d: ldc.i4.0 - IL_002e: ceq - IL_0030: ret + IL_0021: ldarg.1 + IL_0022: ldnull + IL_0023: cgt.un + IL_0025: ldc.i4.0 + IL_0026: ceq + IL_0028: ret } // end of method Discr::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 24 (0x18) + // Code size 20 (0x14) .maxstack 4 .locals init ([0] class SteppingMatch07/Discr V_0) .line 4,4 : 6,11 '' @@ -541,21 +489,17 @@ IL_0001: isinst SteppingMatch07/Discr IL_0006: stloc.0 IL_0007: ldloc.0 - IL_0008: brfalse.s IL_000c - - IL_000a: br.s IL_000e - - IL_000c: br.s IL_0016 + IL_0008: brfalse.s IL_0012 .line 100001,100001 : 0,0 '' - IL_000e: ldarg.0 - IL_000f: ldloc.0 - IL_0010: callvirt instance bool SteppingMatch07/Discr::Equals(class SteppingMatch07/Discr) - IL_0015: ret + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: callvirt instance bool SteppingMatch07/Discr::Equals(class SteppingMatch07/Discr) + IL_0011: ret .line 100001,100001 : 0,0 '' - IL_0016: ldc.i4.0 - IL_0017: ret + IL_0012: ldc.i4.0 + IL_0013: ret } // end of method Discr::Equals .property instance int32 Tag() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch08.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch08.il.bsl index 5d87f08136f..76a265460b5 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.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly SteppingMatch08 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.SteppingMatch08 { - // Offset: 0x00000000 Length: 0x000001DF + // Offset: 0x00000000 Length: 0x000001DB } .mresource public FSharpOptimizationData.SteppingMatch08 { - // Offset: 0x000001E8 Length: 0x00000079 + // Offset: 0x000001E0 Length: 0x00000079 } .module SteppingMatch08.dll -// MVID: {59B19213-F238-BA3A-A745-03831392B159} +// MVID: {60B68B90-F238-BA3A-A745-0383908BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00C70000 +// Image base: 0x00E20000 // =============== CLASS MEMBERS DECLARATION =================== @@ -57,7 +57,7 @@ .maxstack 3 .locals init ([0] int32 b) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch08.fs' + .line 5,5 : 9,21 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\SteppingMatch\\SteppingMatch08.fs' IL_0000: ldarg.0 IL_0001: switch ( IL_000c) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch09.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch09.il.bsl index 479455bcd34..3d11c8b1b67 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch09.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/SteppingMatch09.il.bsl @@ -36,13 +36,13 @@ // Offset: 0x00000310 Length: 0x000000EB } .module SteppingMatch09.dll -// MVID: {5FCFFD1E-4935-D6AC-A745-03831EFDCF5F} +// MVID: {60B68B90-4935-D6AC-A745-0383908BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05580000 +// Image base: 0x06A70000 // =============== CLASS MEMBERS DECLARATION =================== @@ -121,7 +121,7 @@ .method public strict virtual instance int32 Invoke(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 list) cil managed { - // Code size 23 (0x17) + // Code size 19 (0x13) .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}' @@ -133,17 +133,13 @@ IL_0008: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_000d: brtrue.s IL_0011 - IL_000f: br.s IL_0013 - - IL_0011: br.s IL_0015 - .line 17,17 : 14,15 '' - IL_0013: ldc.i4.1 - IL_0014: ret + IL_000f: ldc.i4.1 + IL_0010: ret .line 18,18 : 13,14 '' - IL_0015: ldc.i4.2 - IL_0016: ret + IL_0011: ldc.i4.2 + IL_0012: ret } // end of method GenericInner@15T::Invoke } // end of class GenericInner@15T @@ -167,24 +163,20 @@ .method public strict virtual instance int32 Invoke(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 list) cil managed { - // Code size 16 (0x10) + // Code size 12 (0xc) .maxstack 8 .line 25,25 : 6,21 '' IL_0000: ldarg.1 IL_0001: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_0006: brtrue.s IL_000a - IL_0008: br.s IL_000c - - IL_000a: br.s IL_000e - .line 26,26 : 14,15 '' - IL_000c: ldc.i4.1 - IL_000d: ret + IL_0008: ldc.i4.1 + IL_0009: ret .line 27,27 : 13,14 '' - IL_000e: ldc.i4.2 - IL_000f: ret + IL_000a: ldc.i4.2 + IL_000b: ret } // end of method NonGenericInner@25::Invoke .method private specialname rtspecialname static @@ -221,25 +213,21 @@ .method public strict virtual instance int32 Invoke(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 list) cil managed { - // Code size 21 (0x15) + // Code size 17 (0x11) .maxstack 8 .line 34,34 : 6,21 '' IL_0000: ldarg.1 IL_0001: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_0006: brtrue.s IL_000a - IL_0008: br.s IL_000c - - IL_000a: br.s IL_000e - .line 35,35 : 14,15 '' - IL_000c: ldc.i4.1 - IL_000d: ret + IL_0008: ldc.i4.1 + IL_0009: ret .line 36,36 : 13,14 '' - IL_000e: ldarg.0 - IL_000f: ldfld int32 SteppingMatch09/NonGenericInnerWithCapture@34::x - IL_0014: ret + IL_000a: ldarg.0 + IL_000b: ldfld int32 SteppingMatch09/NonGenericInnerWithCapture@34::x + IL_0010: ret } // end of method NonGenericInnerWithCapture@34::Invoke } // end of class NonGenericInnerWithCapture@34 @@ -247,7 +235,7 @@ .method public static class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 funcA(int32 n) cil managed { - // Code size 40 (0x28) + // Code size 36 (0x24) .maxstack 8 .line 5,5 : 9,21 '' IL_0000: ldarg.0 @@ -255,26 +243,22 @@ IL_0002: sub IL_0003: switch ( IL_0012, - IL_0014) - IL_0010: br.s IL_0020 - - IL_0012: br.s IL_0016 - - IL_0014: br.s IL_001e + IL_001a) + IL_0010: br.s IL_001c .line 7,7 : 13,21 '' - IL_0016: ldc.i4.s 10 - IL_0018: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::Some(!0) - IL_001d: ret + IL_0012: ldc.i4.s 10 + IL_0014: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::Some(!0) + IL_0019: ret .line 9,9 : 13,17 '' - IL_001e: ldnull - IL_001f: ret + IL_001a: ldnull + IL_001b: ret .line 11,11 : 20,34 '' - IL_0020: ldc.i4.s 22 - IL_0022: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::Some(!0) - IL_0027: ret + IL_001c: ldc.i4.s 22 + IL_001e: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::Some(!0) + IL_0023: ret } // end of method SteppingMatch09::funcA .method public static int32 OuterWithGenericInner(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 list) cil managed diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction1.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction1.il.bsl index 6a80341afe9..f50ff82be7f 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction1.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction1.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction1 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction1 { - // Offset: 0x00000000 Length: 0x000001CA + // Offset: 0x00000000 Length: 0x000001C6 } .mresource public FSharpOptimizationData.TestFunction1 { // Offset: 0x000001D0 Length: 0x00000070 } .module TestFunction1.exe -// MVID: {59B19208-65FC-8929-A745-03830892B159} +// MVID: {60B68B97-65FC-8929-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x03230000 +// Image base: 0x054C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -56,7 +56,7 @@ // Code size 36 (0x24) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction1.fs' + .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction1.fs' IL_0000: ldstr "Hello" IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction10.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction10.il.bsl index 868ca11e97b..d25fd60cf44 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction10.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction10.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction10 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction10 { - // Offset: 0x00000000 Length: 0x000001C9 + // Offset: 0x00000000 Length: 0x000001C5 } .mresource public FSharpOptimizationData.TestFunction10 { // Offset: 0x000001D0 Length: 0x00000072 } .module TestFunction10.exe -// MVID: {59B199CC-A624-44FB-A745-0383CC99B159} +// MVID: {60B68B97-A624-44FB-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00DA0000 +// Image base: 0x066D0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -61,7 +61,7 @@ [2] int32 y, [3] int32 x) .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\\TestFunctions\\TestFunction10.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction10.fs' IL_0000: ldarg.0 IL_0001: ldarg.1 IL_0002: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction13.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction13.il.bsl index a23943d01bf..b3bb8d0a49b 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction13.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction13.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction13 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction13 { - // Offset: 0x00000000 Length: 0x0000020F + // Offset: 0x00000000 Length: 0x00000203 } .mresource public FSharpOptimizationData.TestFunction13 { - // Offset: 0x00000218 Length: 0x00000072 + // Offset: 0x00000208 Length: 0x00000072 } .module TestFunction13.exe -// MVID: {59B199CC-A624-451C-A745-0383CC99B159} +// MVID: {60B68B97-A624-451C-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01000000 +// Image base: 0x00EC0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -57,7 +57,7 @@ // Code size 30 (0x1e) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,16 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction13.fs' + .line 5,5 : 5,16 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction13.fs' IL_0000: ldarg.0 IL_0001: ldarg.0 IL_0002: ldarg.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction14.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction14.il.bsl index f9e5f5be62b..b849fc36afb 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction14.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction14.il.bsl @@ -36,13 +36,13 @@ // Offset: 0x000001F0 Length: 0x00000072 } .module TestFunction14.exe -// MVID: {5FCFFD21-A624-4587-A745-038321FDCF5F} +// MVID: {60B68B97-A624-4587-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06A40000 +// Image base: 0x00F10000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction16.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction16.il.bsl index 35254e97c34..25a67922af0 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction16.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction16.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction16 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction16 { - // Offset: 0x00000000 Length: 0x00000693 + // Offset: 0x00000000 Length: 0x00000683 } .mresource public FSharpOptimizationData.TestFunction16 { - // Offset: 0x00000698 Length: 0x000001CD + // Offset: 0x00000688 Length: 0x000001CD } .module TestFunction16.exe -// MVID: {59B199CC-A624-45C5-A745-0383CC99B159} +// MVID: {60B68B97-A624-45C5-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01940000 +// Image base: 0x00E30000 // =============== CLASS MEMBERS DECLARATION =================== @@ -174,7 +174,7 @@ instance int32 CompareTo(class TestFunction16/U obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 154 (0x9a) + // Code size 120 (0x78) .maxstack 4 .locals init ([0] class TestFunction16/U V_0, [1] class TestFunction16/U V_1, @@ -186,137 +186,109 @@ [7] int32 V_7, [8] int32 V_8) .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\\TestFunctions\\TestFunction16.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction16.fs' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000d - - IL_0008: br IL_008c + IL_0004: brfalse.s IL_006e .line 100001,100001 : 0,0 '' - IL_000d: ldarg.1 - IL_000e: ldnull - IL_000f: cgt.un - IL_0011: brfalse.s IL_0015 - - IL_0013: br.s IL_001a - - IL_0015: br IL_008a + IL_0006: ldarg.1 + IL_0007: ldnull + IL_0008: cgt.un + IL_000a: brfalse.s IL_006c .line 100001,100001 : 0,0 '' - IL_001a: ldarg.0 - IL_001b: pop + IL_000c: ldarg.0 + IL_000d: pop .line 100001,100001 : 0,0 '' - IL_001c: ldarg.0 - IL_001d: stloc.0 - IL_001e: ldarg.1 - IL_001f: stloc.1 - IL_0020: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0025: stloc.3 - IL_0026: ldloc.0 - IL_0027: ldfld int32 TestFunction16/U::item1 - IL_002c: stloc.s V_4 - IL_002e: ldloc.1 - IL_002f: ldfld int32 TestFunction16/U::item1 - IL_0034: stloc.s V_5 - IL_0036: ldloc.s V_4 - IL_0038: ldloc.s V_5 - IL_003a: bge.s IL_003e - - IL_003c: br.s IL_0040 - - IL_003e: br.s IL_0044 + IL_000e: ldarg.0 + IL_000f: stloc.0 + IL_0010: ldarg.1 + IL_0011: stloc.1 + IL_0012: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0017: stloc.3 + IL_0018: ldloc.0 + IL_0019: ldfld int32 TestFunction16/U::item1 + IL_001e: stloc.s V_4 + IL_0020: ldloc.1 + IL_0021: ldfld int32 TestFunction16/U::item1 + IL_0026: stloc.s V_5 + IL_0028: ldloc.s V_4 + IL_002a: ldloc.s V_5 + IL_002c: bge.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0040: ldc.i4.m1 + IL_002e: ldc.i4.m1 .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: br.s IL_004b + IL_002f: nop + IL_0030: br.s IL_0039 .line 100001,100001 : 0,0 '' - IL_0044: ldloc.s V_4 - IL_0046: ldloc.s V_5 - IL_0048: cgt + IL_0032: ldloc.s V_4 + IL_0034: ldloc.s V_5 + IL_0036: cgt .line 100001,100001 : 0,0 '' - IL_004a: nop + IL_0038: nop .line 100001,100001 : 0,0 '' - IL_004b: stloc.2 - IL_004c: ldloc.2 - IL_004d: ldc.i4.0 - IL_004e: bge.s IL_0052 - - IL_0050: br.s IL_0054 - - IL_0052: br.s IL_0056 + IL_0039: stloc.2 + IL_003a: ldloc.2 + IL_003b: ldc.i4.0 + IL_003c: bge.s IL_0040 .line 100001,100001 : 0,0 '' - IL_0054: ldloc.2 - IL_0055: ret + IL_003e: ldloc.2 + IL_003f: ret .line 100001,100001 : 0,0 '' - IL_0056: ldloc.2 - IL_0057: ldc.i4.0 - IL_0058: ble.s IL_005c - - IL_005a: br.s IL_005e - - IL_005c: br.s IL_0060 + IL_0040: ldloc.2 + IL_0041: ldc.i4.0 + IL_0042: ble.s IL_0046 .line 100001,100001 : 0,0 '' - IL_005e: ldloc.2 - IL_005f: ret + IL_0044: ldloc.2 + IL_0045: ret .line 100001,100001 : 0,0 '' - IL_0060: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0065: stloc.s V_6 - IL_0067: ldloc.0 - IL_0068: ldfld int32 TestFunction16/U::item2 - IL_006d: stloc.s V_7 - IL_006f: ldloc.1 - IL_0070: ldfld int32 TestFunction16/U::item2 - IL_0075: stloc.s V_8 - IL_0077: ldloc.s V_7 - IL_0079: ldloc.s V_8 - IL_007b: bge.s IL_007f - - IL_007d: br.s IL_0081 - - IL_007f: br.s IL_0083 + IL_0046: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_004b: stloc.s V_6 + IL_004d: ldloc.0 + IL_004e: ldfld int32 TestFunction16/U::item2 + IL_0053: stloc.s V_7 + IL_0055: ldloc.1 + IL_0056: ldfld int32 TestFunction16/U::item2 + IL_005b: stloc.s V_8 + IL_005d: ldloc.s V_7 + IL_005f: ldloc.s V_8 + IL_0061: bge.s IL_0065 .line 100001,100001 : 0,0 '' - IL_0081: ldc.i4.m1 - IL_0082: ret + IL_0063: ldc.i4.m1 + IL_0064: ret .line 100001,100001 : 0,0 '' - IL_0083: ldloc.s V_7 - IL_0085: ldloc.s V_8 - IL_0087: cgt - IL_0089: ret + IL_0065: ldloc.s V_7 + IL_0067: ldloc.s V_8 + IL_0069: cgt + IL_006b: ret .line 100001,100001 : 0,0 '' - IL_008a: ldc.i4.1 - IL_008b: ret + IL_006c: ldc.i4.1 + IL_006d: ret .line 100001,100001 : 0,0 '' - IL_008c: ldarg.1 - IL_008d: ldnull - IL_008e: cgt.un - IL_0090: brfalse.s IL_0094 - - IL_0092: br.s IL_0096 - - IL_0094: br.s IL_0098 + IL_006e: ldarg.1 + IL_006f: ldnull + IL_0070: cgt.un + IL_0072: brfalse.s IL_0076 .line 100001,100001 : 0,0 '' - IL_0096: ldc.i4.m1 - IL_0097: ret + IL_0074: ldc.i4.m1 + IL_0075: ret .line 100001,100001 : 0,0 '' - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0076: ldc.i4.0 + IL_0077: ret } // end of method U::CompareTo .method public hidebysig virtual final @@ -338,7 +310,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 164 (0xa4) + // Code size 130 (0x82) .maxstack 4 .locals init ([0] class TestFunction16/U V_0, [1] class TestFunction16/U V_1, @@ -357,142 +329,114 @@ IL_0007: ldarg.0 IL_0008: ldnull IL_0009: cgt.un - IL_000b: brfalse.s IL_000f - - IL_000d: br.s IL_0014 - - IL_000f: br IL_0091 + IL_000b: brfalse.s IL_0073 .line 100001,100001 : 0,0 '' - IL_0014: ldarg.1 - IL_0015: unbox.any TestFunction16/U - IL_001a: ldnull - IL_001b: cgt.un - IL_001d: brfalse.s IL_0021 - - IL_001f: br.s IL_0026 - - IL_0021: br IL_008f + IL_000d: ldarg.1 + IL_000e: unbox.any TestFunction16/U + IL_0013: ldnull + IL_0014: cgt.un + IL_0016: brfalse.s IL_0071 .line 100001,100001 : 0,0 '' - IL_0026: ldarg.0 - IL_0027: pop + IL_0018: ldarg.0 + IL_0019: pop .line 100001,100001 : 0,0 '' - IL_0028: ldarg.0 - IL_0029: stloc.1 - IL_002a: ldloc.0 - IL_002b: stloc.2 - IL_002c: ldarg.2 - IL_002d: stloc.s V_4 - IL_002f: ldloc.1 - IL_0030: ldfld int32 TestFunction16/U::item1 - IL_0035: stloc.s V_5 - IL_0037: ldloc.2 - IL_0038: ldfld int32 TestFunction16/U::item1 - IL_003d: stloc.s V_6 - IL_003f: ldloc.s V_5 - IL_0041: ldloc.s V_6 - IL_0043: bge.s IL_0047 - - IL_0045: br.s IL_0049 - - IL_0047: br.s IL_004d + IL_001a: ldarg.0 + IL_001b: stloc.1 + IL_001c: ldloc.0 + IL_001d: stloc.2 + IL_001e: ldarg.2 + IL_001f: stloc.s V_4 + IL_0021: ldloc.1 + IL_0022: ldfld int32 TestFunction16/U::item1 + IL_0027: stloc.s V_5 + IL_0029: ldloc.2 + IL_002a: ldfld int32 TestFunction16/U::item1 + IL_002f: stloc.s V_6 + IL_0031: ldloc.s V_5 + IL_0033: ldloc.s V_6 + IL_0035: bge.s IL_003b .line 100001,100001 : 0,0 '' - IL_0049: ldc.i4.m1 + IL_0037: ldc.i4.m1 .line 100001,100001 : 0,0 '' - IL_004a: nop - IL_004b: br.s IL_0054 + IL_0038: nop + IL_0039: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_004d: ldloc.s V_5 - IL_004f: ldloc.s V_6 - IL_0051: cgt + IL_003b: ldloc.s V_5 + IL_003d: ldloc.s V_6 + IL_003f: cgt .line 100001,100001 : 0,0 '' - IL_0053: nop + IL_0041: nop .line 100001,100001 : 0,0 '' - IL_0054: stloc.3 - IL_0055: ldloc.3 - IL_0056: ldc.i4.0 - IL_0057: bge.s IL_005b - - IL_0059: br.s IL_005d - - IL_005b: br.s IL_005f + IL_0042: stloc.3 + IL_0043: ldloc.3 + IL_0044: ldc.i4.0 + IL_0045: bge.s IL_0049 .line 100001,100001 : 0,0 '' - IL_005d: ldloc.3 - IL_005e: ret + IL_0047: ldloc.3 + IL_0048: ret .line 100001,100001 : 0,0 '' - IL_005f: ldloc.3 - IL_0060: ldc.i4.0 - IL_0061: ble.s IL_0065 - - IL_0063: br.s IL_0067 - - IL_0065: br.s IL_0069 + IL_0049: ldloc.3 + IL_004a: ldc.i4.0 + IL_004b: ble.s IL_004f .line 100001,100001 : 0,0 '' - IL_0067: ldloc.3 - IL_0068: ret + IL_004d: ldloc.3 + IL_004e: ret .line 100001,100001 : 0,0 '' - IL_0069: ldarg.2 - IL_006a: stloc.s V_7 - IL_006c: ldloc.1 - IL_006d: ldfld int32 TestFunction16/U::item2 - IL_0072: stloc.s V_8 - IL_0074: ldloc.2 - IL_0075: ldfld int32 TestFunction16/U::item2 - IL_007a: stloc.s V_9 - IL_007c: ldloc.s V_8 - IL_007e: ldloc.s V_9 - IL_0080: bge.s IL_0084 - - IL_0082: br.s IL_0086 - - IL_0084: br.s IL_0088 + IL_004f: ldarg.2 + IL_0050: stloc.s V_7 + IL_0052: ldloc.1 + IL_0053: ldfld int32 TestFunction16/U::item2 + IL_0058: stloc.s V_8 + IL_005a: ldloc.2 + IL_005b: ldfld int32 TestFunction16/U::item2 + IL_0060: stloc.s V_9 + IL_0062: ldloc.s V_8 + IL_0064: ldloc.s V_9 + IL_0066: bge.s IL_006a .line 100001,100001 : 0,0 '' - IL_0086: ldc.i4.m1 - IL_0087: ret + IL_0068: ldc.i4.m1 + IL_0069: ret .line 100001,100001 : 0,0 '' - IL_0088: ldloc.s V_8 - IL_008a: ldloc.s V_9 - IL_008c: cgt - IL_008e: ret + IL_006a: ldloc.s V_8 + IL_006c: ldloc.s V_9 + IL_006e: cgt + IL_0070: ret .line 100001,100001 : 0,0 '' - IL_008f: ldc.i4.1 - IL_0090: ret + IL_0071: ldc.i4.1 + IL_0072: ret .line 100001,100001 : 0,0 '' - IL_0091: ldarg.1 - IL_0092: unbox.any TestFunction16/U - IL_0097: ldnull - IL_0098: cgt.un - IL_009a: brfalse.s IL_009e - - IL_009c: br.s IL_00a0 - - IL_009e: br.s IL_00a2 + IL_0073: ldarg.1 + IL_0074: unbox.any TestFunction16/U + IL_0079: ldnull + IL_007a: cgt.un + IL_007c: brfalse.s IL_0080 .line 100001,100001 : 0,0 '' - IL_00a0: ldc.i4.m1 - IL_00a1: ret + IL_007e: ldc.i4.m1 + IL_007f: ret .line 100001,100001 : 0,0 '' - IL_00a2: ldc.i4.0 - IL_00a3: ret + IL_0080: ldc.i4.0 + IL_0081: 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 68 (0x44) + // Code size 64 (0x40) .maxstack 7 .locals init ([0] int32 V_0, [1] class TestFunction16/U V_1, @@ -502,58 +446,54 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_0042 - - .line 100001,100001 : 0,0 '' - IL_000a: ldc.i4.0 - IL_000b: stloc.0 - IL_000c: ldarg.0 - IL_000d: pop - .line 100001,100001 : 0,0 '' - IL_000e: ldarg.0 - IL_000f: stloc.1 - IL_0010: ldc.i4.0 - IL_0011: stloc.0 - IL_0012: ldc.i4 0x9e3779b9 - IL_0017: ldarg.1 - IL_0018: stloc.2 - IL_0019: ldloc.1 - IL_001a: ldfld int32 TestFunction16/U::item2 - IL_001f: ldloc.0 - IL_0020: ldc.i4.6 - IL_0021: shl - IL_0022: ldloc.0 - IL_0023: ldc.i4.2 - IL_0024: shr - IL_0025: add - IL_0026: add - IL_0027: add - IL_0028: stloc.0 - IL_0029: ldc.i4 0x9e3779b9 - IL_002e: ldarg.1 - IL_002f: stloc.3 - IL_0030: ldloc.1 - IL_0031: ldfld int32 TestFunction16/U::item1 - IL_0036: ldloc.0 - IL_0037: ldc.i4.6 - IL_0038: shl - IL_0039: ldloc.0 - IL_003a: ldc.i4.2 - IL_003b: shr - IL_003c: add - IL_003d: add - IL_003e: add - IL_003f: stloc.0 - IL_0040: ldloc.0 - IL_0041: ret - - .line 100001,100001 : 0,0 '' - IL_0042: ldc.i4.0 - IL_0043: ret + IL_0004: brfalse.s IL_003e + + .line 100001,100001 : 0,0 '' + IL_0006: ldc.i4.0 + IL_0007: stloc.0 + IL_0008: ldarg.0 + IL_0009: pop + .line 100001,100001 : 0,0 '' + IL_000a: ldarg.0 + IL_000b: stloc.1 + IL_000c: ldc.i4.0 + IL_000d: stloc.0 + IL_000e: ldc.i4 0x9e3779b9 + IL_0013: ldarg.1 + IL_0014: stloc.2 + IL_0015: ldloc.1 + IL_0016: ldfld int32 TestFunction16/U::item2 + IL_001b: ldloc.0 + IL_001c: ldc.i4.6 + IL_001d: shl + IL_001e: ldloc.0 + IL_001f: ldc.i4.2 + IL_0020: shr + IL_0021: add + IL_0022: add + IL_0023: add + IL_0024: stloc.0 + IL_0025: ldc.i4 0x9e3779b9 + IL_002a: ldarg.1 + IL_002b: stloc.3 + IL_002c: ldloc.1 + IL_002d: ldfld int32 TestFunction16/U::item1 + IL_0032: ldloc.0 + IL_0033: ldc.i4.6 + IL_0034: shl + IL_0035: ldloc.0 + IL_0036: ldc.i4.2 + IL_0037: shr + IL_0038: add + IL_0039: add + IL_003a: add + IL_003b: stloc.0 + IL_003c: ldloc.0 + IL_003d: ret + + .line 100001,100001 : 0,0 '' + IL_003e: ldc.i4.0 + IL_003f: ret } // end of method U::GetHashCode .method public hidebysig virtual final @@ -574,7 +514,7 @@ class [mscorlib]System.Collections.IEqualityComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 85 (0x55) + // Code size 73 (0x49) .maxstack 4 .locals init ([0] class TestFunction16/U V_0, [1] class TestFunction16/U V_1, @@ -586,78 +526,66 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_004d + IL_0004: brfalse.s IL_0041 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: isinst TestFunction16/U - IL_0010: stloc.0 - IL_0011: ldloc.0 - IL_0012: brfalse.s IL_0016 - - IL_0014: br.s IL_0018 - - IL_0016: br.s IL_004b + IL_0006: ldarg.1 + IL_0007: isinst TestFunction16/U + IL_000c: stloc.0 + IL_000d: ldloc.0 + IL_000e: brfalse.s IL_003f .line 100001,100001 : 0,0 '' - IL_0018: ldloc.0 - IL_0019: stloc.1 - IL_001a: ldarg.0 - IL_001b: pop + IL_0010: ldloc.0 + IL_0011: stloc.1 + IL_0012: ldarg.0 + IL_0013: pop .line 100001,100001 : 0,0 '' - IL_001c: ldarg.0 - IL_001d: stloc.2 - IL_001e: ldloc.1 - IL_001f: stloc.3 - IL_0020: ldarg.2 - IL_0021: stloc.s V_4 - IL_0023: ldloc.2 - IL_0024: ldfld int32 TestFunction16/U::item1 - IL_0029: ldloc.3 - IL_002a: ldfld int32 TestFunction16/U::item1 - IL_002f: ceq - IL_0031: brfalse.s IL_0035 - - IL_0033: br.s IL_0037 - - IL_0035: br.s IL_0049 - - .line 100001,100001 : 0,0 '' - IL_0037: ldarg.2 - IL_0038: stloc.s V_5 - IL_003a: ldloc.2 - IL_003b: ldfld int32 TestFunction16/U::item2 - IL_0040: ldloc.3 - IL_0041: ldfld int32 TestFunction16/U::item2 - IL_0046: ceq - IL_0048: ret + IL_0014: ldarg.0 + IL_0015: stloc.2 + IL_0016: ldloc.1 + IL_0017: stloc.3 + IL_0018: ldarg.2 + IL_0019: stloc.s V_4 + IL_001b: ldloc.2 + IL_001c: ldfld int32 TestFunction16/U::item1 + IL_0021: ldloc.3 + IL_0022: ldfld int32 TestFunction16/U::item1 + IL_0027: ceq + IL_0029: brfalse.s IL_003d + + .line 100001,100001 : 0,0 '' + IL_002b: ldarg.2 + IL_002c: stloc.s V_5 + IL_002e: ldloc.2 + IL_002f: ldfld int32 TestFunction16/U::item2 + IL_0034: ldloc.3 + IL_0035: ldfld int32 TestFunction16/U::item2 + IL_003a: ceq + IL_003c: ret .line 100001,100001 : 0,0 '' - IL_0049: ldc.i4.0 - IL_004a: ret + IL_003d: ldc.i4.0 + IL_003e: ret .line 100001,100001 : 0,0 '' - IL_004b: ldc.i4.0 - IL_004c: ret + IL_003f: ldc.i4.0 + IL_0040: ret .line 100001,100001 : 0,0 '' - IL_004d: ldarg.1 - IL_004e: ldnull - IL_004f: cgt.un - IL_0051: ldc.i4.0 - IL_0052: ceq - IL_0054: ret + IL_0041: ldarg.1 + IL_0042: ldnull + IL_0043: cgt.un + IL_0045: ldc.i4.0 + IL_0046: ceq + IL_0048: ret } // end of method U::Equals .method public hidebysig virtual final instance bool Equals(class TestFunction16/U obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 71 (0x47) + // Code size 59 (0x3b) .maxstack 4 .locals init ([0] class TestFunction16/U V_0, [1] class TestFunction16/U V_1) @@ -665,70 +593,58 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_003f + IL_0004: brfalse.s IL_0033 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: ldnull - IL_000c: cgt.un - IL_000e: brfalse.s IL_0012 - - IL_0010: br.s IL_0014 - - IL_0012: br.s IL_003d + IL_0006: ldarg.1 + IL_0007: ldnull + IL_0008: cgt.un + IL_000a: brfalse.s IL_0031 .line 100001,100001 : 0,0 '' - IL_0014: ldarg.0 - IL_0015: pop - .line 100001,100001 : 0,0 '' - IL_0016: ldarg.0 - IL_0017: stloc.0 - IL_0018: ldarg.1 - IL_0019: stloc.1 - IL_001a: ldloc.0 - IL_001b: ldfld int32 TestFunction16/U::item1 - IL_0020: ldloc.1 - IL_0021: ldfld int32 TestFunction16/U::item1 - IL_0026: bne.un.s IL_002a - - IL_0028: br.s IL_002c - - IL_002a: br.s IL_003b + IL_000c: ldarg.0 + IL_000d: pop + .line 100001,100001 : 0,0 '' + IL_000e: ldarg.0 + IL_000f: stloc.0 + IL_0010: ldarg.1 + IL_0011: stloc.1 + IL_0012: ldloc.0 + IL_0013: ldfld int32 TestFunction16/U::item1 + IL_0018: ldloc.1 + IL_0019: ldfld int32 TestFunction16/U::item1 + IL_001e: bne.un.s IL_002f .line 100001,100001 : 0,0 '' - IL_002c: ldloc.0 - IL_002d: ldfld int32 TestFunction16/U::item2 - IL_0032: ldloc.1 - IL_0033: ldfld int32 TestFunction16/U::item2 - IL_0038: ceq - IL_003a: ret + IL_0020: ldloc.0 + IL_0021: ldfld int32 TestFunction16/U::item2 + IL_0026: ldloc.1 + IL_0027: ldfld int32 TestFunction16/U::item2 + IL_002c: ceq + IL_002e: ret .line 100001,100001 : 0,0 '' - IL_003b: ldc.i4.0 - IL_003c: ret + IL_002f: ldc.i4.0 + IL_0030: ret .line 100001,100001 : 0,0 '' - IL_003d: ldc.i4.0 - IL_003e: ret + IL_0031: ldc.i4.0 + IL_0032: ret .line 100001,100001 : 0,0 '' - IL_003f: ldarg.1 - IL_0040: ldnull - IL_0041: cgt.un - IL_0043: ldc.i4.0 - IL_0044: ceq - IL_0046: ret + IL_0033: ldarg.1 + IL_0034: ldnull + IL_0035: cgt.un + IL_0037: ldc.i4.0 + IL_0038: ceq + IL_003a: 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 24 (0x18) + // Code size 20 (0x14) .maxstack 4 .locals init ([0] class TestFunction16/U V_0) .line 4,4 : 6,7 '' @@ -736,21 +652,17 @@ IL_0001: isinst TestFunction16/U IL_0006: stloc.0 IL_0007: ldloc.0 - IL_0008: brfalse.s IL_000c - - IL_000a: br.s IL_000e - - IL_000c: br.s IL_0016 + IL_0008: brfalse.s IL_0012 .line 100001,100001 : 0,0 '' - IL_000e: ldarg.0 - IL_000f: ldloc.0 - IL_0010: callvirt instance bool TestFunction16/U::Equals(class TestFunction16/U) - IL_0015: ret + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: callvirt instance bool TestFunction16/U::Equals(class TestFunction16/U) + IL_0011: ret .line 100001,100001 : 0,0 '' - IL_0016: ldc.i4.0 - IL_0017: ret + IL_0012: ldc.i4.0 + IL_0013: ret } // end of method U::Equals .property instance int32 Tag() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction17.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction17.il.bsl index cc502982e7b..02a8fa33560 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction17.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction17.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction17 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction17 { - // Offset: 0x00000000 Length: 0x0000067E + // Offset: 0x00000000 Length: 0x0000066E } .mresource public FSharpOptimizationData.TestFunction17 { - // Offset: 0x00000688 Length: 0x000001CD + // Offset: 0x00000678 Length: 0x000001CD } .module TestFunction17.exe -// MVID: {59B199CC-A624-45A8-A745-0383CC99B159} +// MVID: {60B68B97-A624-45A8-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x027C0000 +// Image base: 0x06AA0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -119,7 +119,7 @@ instance int32 CompareTo(class TestFunction17/R obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 142 (0x8e) + // Code size 108 (0x6c) .maxstack 4 .locals init ([0] int32 V_0, [1] class [mscorlib]System.Collections.IComparer V_1, @@ -129,130 +129,102 @@ [5] int32 V_5, [6] int32 V_6) .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\\TestFunctions\\TestFunction17.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction17.fs' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000d - - IL_0008: br IL_0080 + IL_0004: brfalse.s IL_0062 .line 100001,100001 : 0,0 '' - IL_000d: ldarg.1 - IL_000e: ldnull - IL_000f: cgt.un - IL_0011: brfalse.s IL_0015 - - IL_0013: br.s IL_001a - - IL_0015: br IL_007e + IL_0006: ldarg.1 + IL_0007: ldnull + IL_0008: cgt.un + IL_000a: brfalse.s IL_0060 .line 100001,100001 : 0,0 '' - IL_001a: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_001f: stloc.1 - IL_0020: ldarg.0 - IL_0021: ldfld int32 TestFunction17/R::x@ - IL_0026: stloc.2 - IL_0027: ldarg.1 - IL_0028: ldfld int32 TestFunction17/R::x@ - IL_002d: stloc.3 - IL_002e: ldloc.2 - IL_002f: ldloc.3 - IL_0030: bge.s IL_0034 - - IL_0032: br.s IL_0036 - - IL_0034: br.s IL_003a + IL_000c: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0011: stloc.1 + IL_0012: ldarg.0 + IL_0013: ldfld int32 TestFunction17/R::x@ + IL_0018: stloc.2 + IL_0019: ldarg.1 + IL_001a: ldfld int32 TestFunction17/R::x@ + IL_001f: stloc.3 + IL_0020: ldloc.2 + IL_0021: ldloc.3 + IL_0022: bge.s IL_0028 .line 100001,100001 : 0,0 '' - IL_0036: ldc.i4.m1 + IL_0024: ldc.i4.m1 .line 100001,100001 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_003f + IL_0025: nop + IL_0026: br.s IL_002d .line 100001,100001 : 0,0 '' - IL_003a: ldloc.2 - IL_003b: ldloc.3 - IL_003c: cgt + IL_0028: ldloc.2 + IL_0029: ldloc.3 + IL_002a: cgt .line 100001,100001 : 0,0 '' - IL_003e: nop + IL_002c: nop .line 100001,100001 : 0,0 '' - IL_003f: stloc.0 - IL_0040: ldloc.0 - IL_0041: ldc.i4.0 - IL_0042: bge.s IL_0046 - - IL_0044: br.s IL_0048 - - IL_0046: br.s IL_004a + IL_002d: stloc.0 + IL_002e: ldloc.0 + IL_002f: ldc.i4.0 + IL_0030: bge.s IL_0034 .line 100001,100001 : 0,0 '' - IL_0048: ldloc.0 - IL_0049: ret + IL_0032: ldloc.0 + IL_0033: ret .line 100001,100001 : 0,0 '' - IL_004a: ldloc.0 - IL_004b: ldc.i4.0 - IL_004c: ble.s IL_0050 - - IL_004e: br.s IL_0052 - - IL_0050: br.s IL_0054 + IL_0034: ldloc.0 + IL_0035: ldc.i4.0 + IL_0036: ble.s IL_003a .line 100001,100001 : 0,0 '' - IL_0052: ldloc.0 - IL_0053: ret + IL_0038: ldloc.0 + IL_0039: ret .line 100001,100001 : 0,0 '' - IL_0054: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0059: stloc.s V_4 - IL_005b: ldarg.0 - IL_005c: ldfld int32 TestFunction17/R::y@ - IL_0061: stloc.s V_5 - IL_0063: ldarg.1 - IL_0064: ldfld int32 TestFunction17/R::y@ - IL_0069: stloc.s V_6 - IL_006b: ldloc.s V_5 - IL_006d: ldloc.s V_6 - IL_006f: bge.s IL_0073 - - IL_0071: br.s IL_0075 - - IL_0073: br.s IL_0077 + IL_003a: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_003f: stloc.s V_4 + IL_0041: ldarg.0 + IL_0042: ldfld int32 TestFunction17/R::y@ + IL_0047: stloc.s V_5 + IL_0049: ldarg.1 + IL_004a: ldfld int32 TestFunction17/R::y@ + IL_004f: stloc.s V_6 + IL_0051: ldloc.s V_5 + IL_0053: ldloc.s V_6 + IL_0055: bge.s IL_0059 .line 100001,100001 : 0,0 '' - IL_0075: ldc.i4.m1 - IL_0076: ret + IL_0057: ldc.i4.m1 + IL_0058: ret .line 100001,100001 : 0,0 '' - IL_0077: ldloc.s V_5 - IL_0079: ldloc.s V_6 - IL_007b: cgt - IL_007d: ret + IL_0059: ldloc.s V_5 + IL_005b: ldloc.s V_6 + IL_005d: cgt + IL_005f: ret .line 100001,100001 : 0,0 '' - IL_007e: ldc.i4.1 - IL_007f: ret + IL_0060: ldc.i4.1 + IL_0061: ret .line 100001,100001 : 0,0 '' - IL_0080: ldarg.1 - IL_0081: ldnull - IL_0082: cgt.un - IL_0084: brfalse.s IL_0088 - - IL_0086: br.s IL_008a - - IL_0088: br.s IL_008c + IL_0062: ldarg.1 + IL_0063: ldnull + IL_0064: cgt.un + IL_0066: brfalse.s IL_006a .line 100001,100001 : 0,0 '' - IL_008a: ldc.i4.m1 - IL_008b: ret + IL_0068: ldc.i4.m1 + IL_0069: ret .line 100001,100001 : 0,0 '' - IL_008c: ldc.i4.0 - IL_008d: ret + IL_006a: ldc.i4.0 + IL_006b: ret } // end of method R::CompareTo .method public hidebysig virtual final @@ -274,7 +246,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 159 (0x9f) + // Code size 125 (0x7d) .maxstack 4 .locals init ([0] class TestFunction17/R V_0, [1] class TestFunction17/R V_1, @@ -294,135 +266,107 @@ IL_0009: ldarg.0 IL_000a: ldnull IL_000b: cgt.un - IL_000d: brfalse.s IL_0011 - - IL_000f: br.s IL_0016 - - IL_0011: br IL_008c + IL_000d: brfalse.s IL_006e .line 100001,100001 : 0,0 '' - IL_0016: ldarg.1 - IL_0017: unbox.any TestFunction17/R - IL_001c: ldnull - IL_001d: cgt.un - IL_001f: brfalse.s IL_0023 - - IL_0021: br.s IL_0028 - - IL_0023: br IL_008a + IL_000f: ldarg.1 + IL_0010: unbox.any TestFunction17/R + IL_0015: ldnull + IL_0016: cgt.un + IL_0018: brfalse.s IL_006c .line 100001,100001 : 0,0 '' - IL_0028: ldarg.2 - IL_0029: stloc.3 - IL_002a: ldarg.0 - IL_002b: ldfld int32 TestFunction17/R::x@ - IL_0030: stloc.s V_4 - IL_0032: ldloc.1 - IL_0033: ldfld int32 TestFunction17/R::x@ - IL_0038: stloc.s V_5 - IL_003a: ldloc.s V_4 - IL_003c: ldloc.s V_5 - IL_003e: bge.s IL_0042 - - IL_0040: br.s IL_0044 - - IL_0042: br.s IL_0048 + IL_001a: ldarg.2 + IL_001b: stloc.3 + IL_001c: ldarg.0 + IL_001d: ldfld int32 TestFunction17/R::x@ + IL_0022: stloc.s V_4 + IL_0024: ldloc.1 + IL_0025: ldfld int32 TestFunction17/R::x@ + IL_002a: stloc.s V_5 + IL_002c: ldloc.s V_4 + IL_002e: ldloc.s V_5 + IL_0030: bge.s IL_0036 .line 100001,100001 : 0,0 '' - IL_0044: ldc.i4.m1 + IL_0032: ldc.i4.m1 .line 100001,100001 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004f + IL_0033: nop + IL_0034: br.s IL_003d .line 100001,100001 : 0,0 '' - IL_0048: ldloc.s V_4 - IL_004a: ldloc.s V_5 - IL_004c: cgt + IL_0036: ldloc.s V_4 + IL_0038: ldloc.s V_5 + IL_003a: cgt .line 100001,100001 : 0,0 '' - IL_004e: nop + IL_003c: nop .line 100001,100001 : 0,0 '' - IL_004f: stloc.2 - IL_0050: ldloc.2 - IL_0051: ldc.i4.0 - IL_0052: bge.s IL_0056 - - IL_0054: br.s IL_0058 - - IL_0056: br.s IL_005a + IL_003d: stloc.2 + IL_003e: ldloc.2 + IL_003f: ldc.i4.0 + IL_0040: bge.s IL_0044 .line 100001,100001 : 0,0 '' - IL_0058: ldloc.2 - IL_0059: ret + IL_0042: ldloc.2 + IL_0043: ret .line 100001,100001 : 0,0 '' - IL_005a: ldloc.2 - IL_005b: ldc.i4.0 - IL_005c: ble.s IL_0060 - - IL_005e: br.s IL_0062 - - IL_0060: br.s IL_0064 + IL_0044: ldloc.2 + IL_0045: ldc.i4.0 + IL_0046: ble.s IL_004a .line 100001,100001 : 0,0 '' - IL_0062: ldloc.2 - IL_0063: ret + IL_0048: ldloc.2 + IL_0049: ret .line 100001,100001 : 0,0 '' - IL_0064: ldarg.2 - IL_0065: stloc.s V_6 - IL_0067: ldarg.0 - IL_0068: ldfld int32 TestFunction17/R::y@ - IL_006d: stloc.s V_7 - IL_006f: ldloc.1 - IL_0070: ldfld int32 TestFunction17/R::y@ - IL_0075: stloc.s V_8 - IL_0077: ldloc.s V_7 - IL_0079: ldloc.s V_8 - IL_007b: bge.s IL_007f - - IL_007d: br.s IL_0081 - - IL_007f: br.s IL_0083 + IL_004a: ldarg.2 + IL_004b: stloc.s V_6 + IL_004d: ldarg.0 + IL_004e: ldfld int32 TestFunction17/R::y@ + IL_0053: stloc.s V_7 + IL_0055: ldloc.1 + IL_0056: ldfld int32 TestFunction17/R::y@ + IL_005b: stloc.s V_8 + IL_005d: ldloc.s V_7 + IL_005f: ldloc.s V_8 + IL_0061: bge.s IL_0065 .line 100001,100001 : 0,0 '' - IL_0081: ldc.i4.m1 - IL_0082: ret + IL_0063: ldc.i4.m1 + IL_0064: ret .line 100001,100001 : 0,0 '' - IL_0083: ldloc.s V_7 - IL_0085: ldloc.s V_8 - IL_0087: cgt - IL_0089: ret + IL_0065: ldloc.s V_7 + IL_0067: ldloc.s V_8 + IL_0069: cgt + IL_006b: ret .line 100001,100001 : 0,0 '' - IL_008a: ldc.i4.1 - IL_008b: ret + IL_006c: ldc.i4.1 + IL_006d: ret .line 100001,100001 : 0,0 '' - IL_008c: ldarg.1 - IL_008d: unbox.any TestFunction17/R - IL_0092: ldnull - IL_0093: cgt.un - IL_0095: brfalse.s IL_0099 - - IL_0097: br.s IL_009b - - IL_0099: br.s IL_009d + IL_006e: ldarg.1 + IL_006f: unbox.any TestFunction17/R + IL_0074: ldnull + IL_0075: cgt.un + IL_0077: brfalse.s IL_007b .line 100001,100001 : 0,0 '' - IL_009b: ldc.i4.m1 - IL_009c: ret + IL_0079: ldc.i4.m1 + IL_007a: ret .line 100001,100001 : 0,0 '' - IL_009d: ldc.i4.0 - IL_009e: ret + IL_007b: ldc.i4.0 + IL_007c: ret } // end of method R::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 62 (0x3e) + // Code size 58 (0x3a) .maxstack 7 .locals init ([0] int32 V_0, [1] class [mscorlib]System.Collections.IEqualityComparer V_1, @@ -431,51 +375,47 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_003c - - .line 100001,100001 : 0,0 '' - IL_000a: ldc.i4.0 - IL_000b: stloc.0 - IL_000c: ldc.i4 0x9e3779b9 - IL_0011: ldarg.1 - IL_0012: stloc.1 - IL_0013: ldarg.0 - IL_0014: ldfld int32 TestFunction17/R::y@ - IL_0019: ldloc.0 - IL_001a: ldc.i4.6 - IL_001b: shl - IL_001c: ldloc.0 - IL_001d: ldc.i4.2 - IL_001e: shr - IL_001f: add - IL_0020: add - IL_0021: add - IL_0022: stloc.0 - IL_0023: ldc.i4 0x9e3779b9 - IL_0028: ldarg.1 - IL_0029: stloc.2 - IL_002a: ldarg.0 - IL_002b: ldfld int32 TestFunction17/R::x@ - IL_0030: ldloc.0 - IL_0031: ldc.i4.6 - IL_0032: shl - IL_0033: ldloc.0 - IL_0034: ldc.i4.2 - IL_0035: shr - IL_0036: add - IL_0037: add - IL_0038: add - IL_0039: stloc.0 - IL_003a: ldloc.0 - IL_003b: ret - - .line 100001,100001 : 0,0 '' - IL_003c: ldc.i4.0 - IL_003d: ret + IL_0004: brfalse.s IL_0038 + + .line 100001,100001 : 0,0 '' + IL_0006: ldc.i4.0 + IL_0007: stloc.0 + IL_0008: ldc.i4 0x9e3779b9 + IL_000d: ldarg.1 + IL_000e: stloc.1 + IL_000f: ldarg.0 + IL_0010: ldfld int32 TestFunction17/R::y@ + IL_0015: ldloc.0 + IL_0016: ldc.i4.6 + IL_0017: shl + IL_0018: ldloc.0 + IL_0019: ldc.i4.2 + IL_001a: shr + IL_001b: add + IL_001c: add + IL_001d: add + IL_001e: stloc.0 + IL_001f: ldc.i4 0x9e3779b9 + IL_0024: ldarg.1 + IL_0025: stloc.2 + IL_0026: ldarg.0 + IL_0027: ldfld int32 TestFunction17/R::x@ + IL_002c: ldloc.0 + IL_002d: ldc.i4.6 + IL_002e: shl + IL_002f: ldloc.0 + IL_0030: ldc.i4.2 + IL_0031: shr + IL_0032: add + IL_0033: add + IL_0034: add + IL_0035: stloc.0 + IL_0036: ldloc.0 + IL_0037: ret + + .line 100001,100001 : 0,0 '' + IL_0038: ldc.i4.0 + IL_0039: ret } // end of method R::GetHashCode .method public hidebysig virtual final @@ -496,7 +436,7 @@ 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) + // Code size 65 (0x41) .maxstack 4 .locals init ([0] class TestFunction17/R V_0, [1] class TestFunction17/R V_1, @@ -506,133 +446,109 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_0045 + IL_0004: brfalse.s IL_0039 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: isinst TestFunction17/R - IL_0010: stloc.0 - IL_0011: ldloc.0 - IL_0012: brfalse.s IL_0016 - - IL_0014: br.s IL_0018 - - IL_0016: br.s IL_0043 + IL_0006: ldarg.1 + IL_0007: isinst TestFunction17/R + IL_000c: stloc.0 + IL_000d: ldloc.0 + IL_000e: brfalse.s IL_0037 .line 100001,100001 : 0,0 '' - IL_0018: ldloc.0 - IL_0019: stloc.1 - IL_001a: ldarg.2 - IL_001b: stloc.2 - IL_001c: ldarg.0 - IL_001d: ldfld int32 TestFunction17/R::x@ - IL_0022: ldloc.1 - IL_0023: ldfld int32 TestFunction17/R::x@ - IL_0028: ceq - IL_002a: brfalse.s IL_002e - - IL_002c: br.s IL_0030 - - IL_002e: br.s IL_0041 + IL_0010: ldloc.0 + IL_0011: stloc.1 + IL_0012: ldarg.2 + IL_0013: stloc.2 + IL_0014: ldarg.0 + IL_0015: ldfld int32 TestFunction17/R::x@ + IL_001a: ldloc.1 + IL_001b: ldfld int32 TestFunction17/R::x@ + IL_0020: ceq + IL_0022: brfalse.s IL_0035 .line 100001,100001 : 0,0 '' - IL_0030: ldarg.2 - IL_0031: stloc.3 - IL_0032: ldarg.0 - IL_0033: ldfld int32 TestFunction17/R::y@ - IL_0038: ldloc.1 - IL_0039: ldfld int32 TestFunction17/R::y@ - IL_003e: ceq - IL_0040: ret + IL_0024: ldarg.2 + IL_0025: stloc.3 + IL_0026: ldarg.0 + IL_0027: ldfld int32 TestFunction17/R::y@ + IL_002c: ldloc.1 + IL_002d: ldfld int32 TestFunction17/R::y@ + IL_0032: ceq + IL_0034: ret .line 100001,100001 : 0,0 '' - IL_0041: ldc.i4.0 - IL_0042: ret + IL_0035: ldc.i4.0 + IL_0036: ret .line 100001,100001 : 0,0 '' - IL_0043: ldc.i4.0 - IL_0044: ret + IL_0037: ldc.i4.0 + IL_0038: ret .line 100001,100001 : 0,0 '' - IL_0045: ldarg.1 - IL_0046: ldnull - IL_0047: cgt.un - IL_0049: ldc.i4.0 - IL_004a: ceq - IL_004c: ret + IL_0039: ldarg.1 + IL_003a: ldnull + IL_003b: cgt.un + IL_003d: ldc.i4.0 + IL_003e: ceq + IL_0040: ret } // end of method R::Equals .method public hidebysig virtual final instance bool Equals(class TestFunction17/R obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 65 (0x41) - .maxstack 4 + // Code size 53 (0x35) + .maxstack 8 .line 100001,100001 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_0039 + IL_0004: brfalse.s IL_002d .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: ldnull - IL_000c: cgt.un - IL_000e: brfalse.s IL_0012 - - IL_0010: br.s IL_0014 - - IL_0012: br.s IL_0037 + IL_0006: ldarg.1 + IL_0007: ldnull + IL_0008: cgt.un + IL_000a: brfalse.s IL_002b .line 100001,100001 : 0,0 '' - IL_0014: ldarg.0 - IL_0015: ldfld int32 TestFunction17/R::x@ - IL_001a: ldarg.1 - IL_001b: ldfld int32 TestFunction17/R::x@ - IL_0020: bne.un.s IL_0024 - - IL_0022: br.s IL_0026 - - IL_0024: br.s IL_0035 + IL_000c: ldarg.0 + IL_000d: ldfld int32 TestFunction17/R::x@ + IL_0012: ldarg.1 + IL_0013: ldfld int32 TestFunction17/R::x@ + IL_0018: bne.un.s IL_0029 .line 100001,100001 : 0,0 '' - IL_0026: ldarg.0 - IL_0027: ldfld int32 TestFunction17/R::y@ - IL_002c: ldarg.1 - IL_002d: ldfld int32 TestFunction17/R::y@ - IL_0032: ceq - IL_0034: ret + IL_001a: ldarg.0 + IL_001b: ldfld int32 TestFunction17/R::y@ + IL_0020: ldarg.1 + IL_0021: ldfld int32 TestFunction17/R::y@ + IL_0026: ceq + IL_0028: ret .line 100001,100001 : 0,0 '' - IL_0035: ldc.i4.0 - IL_0036: ret + IL_0029: ldc.i4.0 + IL_002a: ret .line 100001,100001 : 0,0 '' - IL_0037: ldc.i4.0 - IL_0038: ret + IL_002b: ldc.i4.0 + IL_002c: ret .line 100001,100001 : 0,0 '' - IL_0039: ldarg.1 - IL_003a: ldnull - IL_003b: cgt.un - IL_003d: ldc.i4.0 - IL_003e: ceq - IL_0040: ret + IL_002d: ldarg.1 + IL_002e: ldnull + IL_002f: cgt.un + IL_0031: ldc.i4.0 + IL_0032: ceq + IL_0034: ret } // end of method R::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 24 (0x18) + // Code size 20 (0x14) .maxstack 4 .locals init ([0] class TestFunction17/R V_0) .line 4,4 : 6,7 '' @@ -640,21 +556,17 @@ IL_0001: isinst TestFunction17/R IL_0006: stloc.0 IL_0007: ldloc.0 - IL_0008: brfalse.s IL_000c - - IL_000a: br.s IL_000e - - IL_000c: br.s IL_0016 + IL_0008: brfalse.s IL_0012 .line 100001,100001 : 0,0 '' - IL_000e: ldarg.0 - IL_000f: ldloc.0 - IL_0010: callvirt instance bool TestFunction17/R::Equals(class TestFunction17/R) - IL_0015: ret + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: callvirt instance bool TestFunction17/R::Equals(class TestFunction17/R) + IL_0011: ret .line 100001,100001 : 0,0 '' - IL_0016: ldc.i4.0 - IL_0017: ret + IL_0012: ldc.i4.0 + IL_0013: ret } // end of method R::Equals .property instance int32 x() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction19.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction19.il.bsl index f5468bf0fd6..a6b8e845ea4 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction19.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction19.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction19 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction19 { - // Offset: 0x00000000 Length: 0x00000352 + // Offset: 0x00000000 Length: 0x0000034E } .mresource public FSharpOptimizationData.TestFunction19 { // Offset: 0x00000358 Length: 0x00000100 } .module TestFunction19.exe -// MVID: {59B19208-A624-46AE-A745-03830892B159} +// MVID: {60B68B97-A624-46AE-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x016D0000 +// Image base: 0x00E60000 // =============== CLASS MEMBERS DECLARATION =================== @@ -64,7 +64,7 @@ // Code size 23 (0x17) .maxstack 8 .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\\TestFunctions\\TestFunction19.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\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 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction20.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction20.il.bsl index 5b65668cd8c..4126263a239 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction20.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction20.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction20 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction20 { - // Offset: 0x00000000 Length: 0x00000393 + // Offset: 0x00000000 Length: 0x0000038F } .mresource public FSharpOptimizationData.TestFunction20 { // Offset: 0x00000398 Length: 0x00000100 } .module TestFunction20.exe -// MVID: {59B19208-A643-44FB-A745-03830892B159} +// MVID: {60B68B97-A643-44FB-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01320000 +// Image base: 0x06B80000 // =============== 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 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction20.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\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 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction21.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction21.il.bsl index 30b59304c56..752ef0b375b 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction21.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction21.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction21 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction21 { - // Offset: 0x00000000 Length: 0x00000685 + // Offset: 0x00000000 Length: 0x00000675 } .mresource public FSharpOptimizationData.TestFunction21 { - // Offset: 0x00000690 Length: 0x000001CD + // Offset: 0x00000680 Length: 0x000001CD } .module TestFunction21.exe -// MVID: {59B19208-A643-45E6-A745-03830892B159} +// MVID: {60B68B97-A643-45E6-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00F80000 +// Image base: 0x05500000 // =============== CLASS MEMBERS DECLARATION =================== @@ -174,7 +174,7 @@ instance int32 CompareTo(class TestFunction21/U obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 154 (0x9a) + // Code size 120 (0x78) .maxstack 4 .locals init ([0] class TestFunction21/U V_0, [1] class TestFunction21/U V_1, @@ -186,137 +186,109 @@ [7] int32 V_7, [8] int32 V_8) .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\\TestFunctions\\TestFunction21.fs' + .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction21.fs' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000d - - IL_0008: br IL_008c + IL_0004: brfalse.s IL_006e .line 100001,100001 : 0,0 '' - IL_000d: ldarg.1 - IL_000e: ldnull - IL_000f: cgt.un - IL_0011: brfalse.s IL_0015 - - IL_0013: br.s IL_001a - - IL_0015: br IL_008a + IL_0006: ldarg.1 + IL_0007: ldnull + IL_0008: cgt.un + IL_000a: brfalse.s IL_006c .line 100001,100001 : 0,0 '' - IL_001a: ldarg.0 - IL_001b: pop + IL_000c: ldarg.0 + IL_000d: pop .line 100001,100001 : 0,0 '' - IL_001c: ldarg.0 - IL_001d: stloc.0 - IL_001e: ldarg.1 - IL_001f: stloc.1 - IL_0020: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0025: stloc.3 - IL_0026: ldloc.0 - IL_0027: ldfld int32 TestFunction21/U::item1 - IL_002c: stloc.s V_4 - IL_002e: ldloc.1 - IL_002f: ldfld int32 TestFunction21/U::item1 - IL_0034: stloc.s V_5 - IL_0036: ldloc.s V_4 - IL_0038: ldloc.s V_5 - IL_003a: bge.s IL_003e - - IL_003c: br.s IL_0040 - - IL_003e: br.s IL_0044 + IL_000e: ldarg.0 + IL_000f: stloc.0 + IL_0010: ldarg.1 + IL_0011: stloc.1 + IL_0012: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0017: stloc.3 + IL_0018: ldloc.0 + IL_0019: ldfld int32 TestFunction21/U::item1 + IL_001e: stloc.s V_4 + IL_0020: ldloc.1 + IL_0021: ldfld int32 TestFunction21/U::item1 + IL_0026: stloc.s V_5 + IL_0028: ldloc.s V_4 + IL_002a: ldloc.s V_5 + IL_002c: bge.s IL_0032 .line 100001,100001 : 0,0 '' - IL_0040: ldc.i4.m1 + IL_002e: ldc.i4.m1 .line 100001,100001 : 0,0 '' - IL_0041: nop - IL_0042: br.s IL_004b + IL_002f: nop + IL_0030: br.s IL_0039 .line 100001,100001 : 0,0 '' - IL_0044: ldloc.s V_4 - IL_0046: ldloc.s V_5 - IL_0048: cgt + IL_0032: ldloc.s V_4 + IL_0034: ldloc.s V_5 + IL_0036: cgt .line 100001,100001 : 0,0 '' - IL_004a: nop + IL_0038: nop .line 100001,100001 : 0,0 '' - IL_004b: stloc.2 - IL_004c: ldloc.2 - IL_004d: ldc.i4.0 - IL_004e: bge.s IL_0052 - - IL_0050: br.s IL_0054 - - IL_0052: br.s IL_0056 + IL_0039: stloc.2 + IL_003a: ldloc.2 + IL_003b: ldc.i4.0 + IL_003c: bge.s IL_0040 .line 100001,100001 : 0,0 '' - IL_0054: ldloc.2 - IL_0055: ret + IL_003e: ldloc.2 + IL_003f: ret .line 100001,100001 : 0,0 '' - IL_0056: ldloc.2 - IL_0057: ldc.i4.0 - IL_0058: ble.s IL_005c - - IL_005a: br.s IL_005e - - IL_005c: br.s IL_0060 + IL_0040: ldloc.2 + IL_0041: ldc.i4.0 + IL_0042: ble.s IL_0046 .line 100001,100001 : 0,0 '' - IL_005e: ldloc.2 - IL_005f: ret + IL_0044: ldloc.2 + IL_0045: ret .line 100001,100001 : 0,0 '' - IL_0060: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0065: stloc.s V_6 - IL_0067: ldloc.0 - IL_0068: ldfld int32 TestFunction21/U::item2 - IL_006d: stloc.s V_7 - IL_006f: ldloc.1 - IL_0070: ldfld int32 TestFunction21/U::item2 - IL_0075: stloc.s V_8 - IL_0077: ldloc.s V_7 - IL_0079: ldloc.s V_8 - IL_007b: bge.s IL_007f - - IL_007d: br.s IL_0081 - - IL_007f: br.s IL_0083 + IL_0046: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_004b: stloc.s V_6 + IL_004d: ldloc.0 + IL_004e: ldfld int32 TestFunction21/U::item2 + IL_0053: stloc.s V_7 + IL_0055: ldloc.1 + IL_0056: ldfld int32 TestFunction21/U::item2 + IL_005b: stloc.s V_8 + IL_005d: ldloc.s V_7 + IL_005f: ldloc.s V_8 + IL_0061: bge.s IL_0065 .line 100001,100001 : 0,0 '' - IL_0081: ldc.i4.m1 - IL_0082: ret + IL_0063: ldc.i4.m1 + IL_0064: ret .line 100001,100001 : 0,0 '' - IL_0083: ldloc.s V_7 - IL_0085: ldloc.s V_8 - IL_0087: cgt - IL_0089: ret + IL_0065: ldloc.s V_7 + IL_0067: ldloc.s V_8 + IL_0069: cgt + IL_006b: ret .line 100001,100001 : 0,0 '' - IL_008a: ldc.i4.1 - IL_008b: ret + IL_006c: ldc.i4.1 + IL_006d: ret .line 100001,100001 : 0,0 '' - IL_008c: ldarg.1 - IL_008d: ldnull - IL_008e: cgt.un - IL_0090: brfalse.s IL_0094 - - IL_0092: br.s IL_0096 - - IL_0094: br.s IL_0098 + IL_006e: ldarg.1 + IL_006f: ldnull + IL_0070: cgt.un + IL_0072: brfalse.s IL_0076 .line 100001,100001 : 0,0 '' - IL_0096: ldc.i4.m1 - IL_0097: ret + IL_0074: ldc.i4.m1 + IL_0075: ret .line 100001,100001 : 0,0 '' - IL_0098: ldc.i4.0 - IL_0099: ret + IL_0076: ldc.i4.0 + IL_0077: ret } // end of method U::CompareTo .method public hidebysig virtual final @@ -338,7 +310,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 164 (0xa4) + // Code size 130 (0x82) .maxstack 4 .locals init ([0] class TestFunction21/U V_0, [1] class TestFunction21/U V_1, @@ -357,142 +329,114 @@ IL_0007: ldarg.0 IL_0008: ldnull IL_0009: cgt.un - IL_000b: brfalse.s IL_000f - - IL_000d: br.s IL_0014 - - IL_000f: br IL_0091 + IL_000b: brfalse.s IL_0073 .line 100001,100001 : 0,0 '' - IL_0014: ldarg.1 - IL_0015: unbox.any TestFunction21/U - IL_001a: ldnull - IL_001b: cgt.un - IL_001d: brfalse.s IL_0021 - - IL_001f: br.s IL_0026 - - IL_0021: br IL_008f + IL_000d: ldarg.1 + IL_000e: unbox.any TestFunction21/U + IL_0013: ldnull + IL_0014: cgt.un + IL_0016: brfalse.s IL_0071 .line 100001,100001 : 0,0 '' - IL_0026: ldarg.0 - IL_0027: pop + IL_0018: ldarg.0 + IL_0019: pop .line 100001,100001 : 0,0 '' - IL_0028: ldarg.0 - IL_0029: stloc.1 - IL_002a: ldloc.0 - IL_002b: stloc.2 - IL_002c: ldarg.2 - 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.2 - IL_0038: ldfld int32 TestFunction21/U::item1 - IL_003d: stloc.s V_6 - IL_003f: ldloc.s V_5 - IL_0041: ldloc.s V_6 - IL_0043: bge.s IL_0047 - - IL_0045: br.s IL_0049 - - IL_0047: br.s IL_004d + IL_001a: ldarg.0 + IL_001b: stloc.1 + IL_001c: ldloc.0 + IL_001d: stloc.2 + IL_001e: ldarg.2 + IL_001f: stloc.s V_4 + IL_0021: ldloc.1 + IL_0022: ldfld int32 TestFunction21/U::item1 + IL_0027: stloc.s V_5 + IL_0029: ldloc.2 + IL_002a: ldfld int32 TestFunction21/U::item1 + IL_002f: stloc.s V_6 + IL_0031: ldloc.s V_5 + IL_0033: ldloc.s V_6 + IL_0035: bge.s IL_003b .line 100001,100001 : 0,0 '' - IL_0049: ldc.i4.m1 + IL_0037: ldc.i4.m1 .line 100001,100001 : 0,0 '' - IL_004a: nop - IL_004b: br.s IL_0054 + IL_0038: nop + IL_0039: br.s IL_0042 .line 100001,100001 : 0,0 '' - IL_004d: ldloc.s V_5 - IL_004f: ldloc.s V_6 - IL_0051: cgt + IL_003b: ldloc.s V_5 + IL_003d: ldloc.s V_6 + IL_003f: cgt .line 100001,100001 : 0,0 '' - IL_0053: nop + IL_0041: nop .line 100001,100001 : 0,0 '' - IL_0054: stloc.3 - IL_0055: ldloc.3 - IL_0056: ldc.i4.0 - IL_0057: bge.s IL_005b - - IL_0059: br.s IL_005d - - IL_005b: br.s IL_005f + IL_0042: stloc.3 + IL_0043: ldloc.3 + IL_0044: ldc.i4.0 + IL_0045: bge.s IL_0049 .line 100001,100001 : 0,0 '' - IL_005d: ldloc.3 - IL_005e: ret + IL_0047: ldloc.3 + IL_0048: ret .line 100001,100001 : 0,0 '' - IL_005f: ldloc.3 - IL_0060: ldc.i4.0 - IL_0061: ble.s IL_0065 - - IL_0063: br.s IL_0067 - - IL_0065: br.s IL_0069 + IL_0049: ldloc.3 + IL_004a: ldc.i4.0 + IL_004b: ble.s IL_004f .line 100001,100001 : 0,0 '' - IL_0067: ldloc.3 - IL_0068: ret + IL_004d: ldloc.3 + IL_004e: ret .line 100001,100001 : 0,0 '' - IL_0069: ldarg.2 - IL_006a: stloc.s V_7 - IL_006c: ldloc.1 - IL_006d: ldfld int32 TestFunction21/U::item2 - IL_0072: stloc.s V_8 - IL_0074: ldloc.2 - IL_0075: ldfld int32 TestFunction21/U::item2 - IL_007a: stloc.s V_9 - IL_007c: ldloc.s V_8 - IL_007e: ldloc.s V_9 - IL_0080: bge.s IL_0084 - - IL_0082: br.s IL_0086 - - IL_0084: br.s IL_0088 + IL_004f: ldarg.2 + IL_0050: stloc.s V_7 + IL_0052: ldloc.1 + IL_0053: ldfld int32 TestFunction21/U::item2 + IL_0058: stloc.s V_8 + IL_005a: ldloc.2 + IL_005b: ldfld int32 TestFunction21/U::item2 + IL_0060: stloc.s V_9 + IL_0062: ldloc.s V_8 + IL_0064: ldloc.s V_9 + IL_0066: bge.s IL_006a .line 100001,100001 : 0,0 '' - IL_0086: ldc.i4.m1 - IL_0087: ret + IL_0068: ldc.i4.m1 + IL_0069: ret .line 100001,100001 : 0,0 '' - IL_0088: ldloc.s V_8 - IL_008a: ldloc.s V_9 - IL_008c: cgt - IL_008e: ret + IL_006a: ldloc.s V_8 + IL_006c: ldloc.s V_9 + IL_006e: cgt + IL_0070: ret .line 100001,100001 : 0,0 '' - IL_008f: ldc.i4.1 - IL_0090: ret + IL_0071: ldc.i4.1 + IL_0072: ret .line 100001,100001 : 0,0 '' - IL_0091: ldarg.1 - IL_0092: unbox.any TestFunction21/U - IL_0097: ldnull - IL_0098: cgt.un - IL_009a: brfalse.s IL_009e - - IL_009c: br.s IL_00a0 - - IL_009e: br.s IL_00a2 + IL_0073: ldarg.1 + IL_0074: unbox.any TestFunction21/U + IL_0079: ldnull + IL_007a: cgt.un + IL_007c: brfalse.s IL_0080 .line 100001,100001 : 0,0 '' - IL_00a0: ldc.i4.m1 - IL_00a1: ret + IL_007e: ldc.i4.m1 + IL_007f: ret .line 100001,100001 : 0,0 '' - IL_00a2: ldc.i4.0 - IL_00a3: ret + IL_0080: ldc.i4.0 + IL_0081: 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 68 (0x44) + // Code size 64 (0x40) .maxstack 7 .locals init ([0] int32 V_0, [1] class TestFunction21/U V_1, @@ -502,58 +446,54 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_0042 - - .line 100001,100001 : 0,0 '' - IL_000a: ldc.i4.0 - IL_000b: stloc.0 - IL_000c: ldarg.0 - IL_000d: pop - .line 100001,100001 : 0,0 '' - IL_000e: ldarg.0 - IL_000f: stloc.1 - IL_0010: ldc.i4.0 - IL_0011: stloc.0 - IL_0012: ldc.i4 0x9e3779b9 - IL_0017: ldarg.1 - IL_0018: stloc.2 - IL_0019: ldloc.1 - IL_001a: ldfld int32 TestFunction21/U::item2 - IL_001f: ldloc.0 - IL_0020: ldc.i4.6 - IL_0021: shl - IL_0022: ldloc.0 - IL_0023: ldc.i4.2 - IL_0024: shr - IL_0025: add - IL_0026: add - IL_0027: add - IL_0028: stloc.0 - IL_0029: ldc.i4 0x9e3779b9 - IL_002e: ldarg.1 - IL_002f: stloc.3 - IL_0030: ldloc.1 - IL_0031: ldfld int32 TestFunction21/U::item1 - IL_0036: ldloc.0 - IL_0037: ldc.i4.6 - IL_0038: shl - IL_0039: ldloc.0 - IL_003a: ldc.i4.2 - IL_003b: shr - IL_003c: add - IL_003d: add - IL_003e: add - IL_003f: stloc.0 - IL_0040: ldloc.0 - IL_0041: ret - - .line 100001,100001 : 0,0 '' - IL_0042: ldc.i4.0 - IL_0043: ret + IL_0004: brfalse.s IL_003e + + .line 100001,100001 : 0,0 '' + IL_0006: ldc.i4.0 + IL_0007: stloc.0 + IL_0008: ldarg.0 + IL_0009: pop + .line 100001,100001 : 0,0 '' + IL_000a: ldarg.0 + IL_000b: stloc.1 + IL_000c: ldc.i4.0 + IL_000d: stloc.0 + IL_000e: ldc.i4 0x9e3779b9 + IL_0013: ldarg.1 + IL_0014: stloc.2 + IL_0015: ldloc.1 + IL_0016: ldfld int32 TestFunction21/U::item2 + IL_001b: ldloc.0 + IL_001c: ldc.i4.6 + IL_001d: shl + IL_001e: ldloc.0 + IL_001f: ldc.i4.2 + IL_0020: shr + IL_0021: add + IL_0022: add + IL_0023: add + IL_0024: stloc.0 + IL_0025: ldc.i4 0x9e3779b9 + IL_002a: ldarg.1 + IL_002b: stloc.3 + IL_002c: ldloc.1 + IL_002d: ldfld int32 TestFunction21/U::item1 + IL_0032: ldloc.0 + IL_0033: ldc.i4.6 + IL_0034: shl + IL_0035: ldloc.0 + IL_0036: ldc.i4.2 + IL_0037: shr + IL_0038: add + IL_0039: add + IL_003a: add + IL_003b: stloc.0 + IL_003c: ldloc.0 + IL_003d: ret + + .line 100001,100001 : 0,0 '' + IL_003e: ldc.i4.0 + IL_003f: ret } // end of method U::GetHashCode .method public hidebysig virtual final @@ -574,7 +514,7 @@ class [mscorlib]System.Collections.IEqualityComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 85 (0x55) + // Code size 73 (0x49) .maxstack 4 .locals init ([0] class TestFunction21/U V_0, [1] class TestFunction21/U V_1, @@ -586,78 +526,66 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_004d + IL_0004: brfalse.s IL_0041 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: isinst TestFunction21/U - IL_0010: stloc.0 - IL_0011: ldloc.0 - IL_0012: brfalse.s IL_0016 - - IL_0014: br.s IL_0018 - - IL_0016: br.s IL_004b + IL_0006: ldarg.1 + IL_0007: isinst TestFunction21/U + IL_000c: stloc.0 + IL_000d: ldloc.0 + IL_000e: brfalse.s IL_003f .line 100001,100001 : 0,0 '' - IL_0018: ldloc.0 - IL_0019: stloc.1 - IL_001a: ldarg.0 - IL_001b: pop + IL_0010: ldloc.0 + IL_0011: stloc.1 + IL_0012: ldarg.0 + IL_0013: pop .line 100001,100001 : 0,0 '' - IL_001c: ldarg.0 - IL_001d: stloc.2 - IL_001e: ldloc.1 - IL_001f: stloc.3 - IL_0020: ldarg.2 - IL_0021: stloc.s V_4 - IL_0023: ldloc.2 - IL_0024: ldfld int32 TestFunction21/U::item1 - IL_0029: ldloc.3 - IL_002a: ldfld int32 TestFunction21/U::item1 - IL_002f: ceq - IL_0031: brfalse.s IL_0035 - - IL_0033: br.s IL_0037 - - IL_0035: br.s IL_0049 - - .line 100001,100001 : 0,0 '' - IL_0037: ldarg.2 - IL_0038: stloc.s V_5 - IL_003a: ldloc.2 - IL_003b: ldfld int32 TestFunction21/U::item2 - IL_0040: ldloc.3 - IL_0041: ldfld int32 TestFunction21/U::item2 - IL_0046: ceq - IL_0048: ret + IL_0014: ldarg.0 + IL_0015: stloc.2 + IL_0016: ldloc.1 + IL_0017: stloc.3 + IL_0018: ldarg.2 + IL_0019: stloc.s V_4 + IL_001b: ldloc.2 + IL_001c: ldfld int32 TestFunction21/U::item1 + IL_0021: ldloc.3 + IL_0022: ldfld int32 TestFunction21/U::item1 + IL_0027: ceq + IL_0029: brfalse.s IL_003d + + .line 100001,100001 : 0,0 '' + IL_002b: ldarg.2 + IL_002c: stloc.s V_5 + IL_002e: ldloc.2 + IL_002f: ldfld int32 TestFunction21/U::item2 + IL_0034: ldloc.3 + IL_0035: ldfld int32 TestFunction21/U::item2 + IL_003a: ceq + IL_003c: ret .line 100001,100001 : 0,0 '' - IL_0049: ldc.i4.0 - IL_004a: ret + IL_003d: ldc.i4.0 + IL_003e: ret .line 100001,100001 : 0,0 '' - IL_004b: ldc.i4.0 - IL_004c: ret + IL_003f: ldc.i4.0 + IL_0040: ret .line 100001,100001 : 0,0 '' - IL_004d: ldarg.1 - IL_004e: ldnull - IL_004f: cgt.un - IL_0051: ldc.i4.0 - IL_0052: ceq - IL_0054: ret + IL_0041: ldarg.1 + IL_0042: ldnull + IL_0043: cgt.un + IL_0045: ldc.i4.0 + IL_0046: ceq + IL_0048: 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 71 (0x47) + // Code size 59 (0x3b) .maxstack 4 .locals init ([0] class TestFunction21/U V_0, [1] class TestFunction21/U V_1) @@ -665,70 +593,58 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_003f + IL_0004: brfalse.s IL_0033 .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: ldnull - IL_000c: cgt.un - IL_000e: brfalse.s IL_0012 - - IL_0010: br.s IL_0014 - - IL_0012: br.s IL_003d + IL_0006: ldarg.1 + IL_0007: ldnull + IL_0008: cgt.un + IL_000a: brfalse.s IL_0031 .line 100001,100001 : 0,0 '' - IL_0014: ldarg.0 - IL_0015: pop - .line 100001,100001 : 0,0 '' - IL_0016: ldarg.0 - IL_0017: stloc.0 - IL_0018: ldarg.1 - IL_0019: stloc.1 - IL_001a: ldloc.0 - IL_001b: ldfld int32 TestFunction21/U::item1 - IL_0020: ldloc.1 - IL_0021: ldfld int32 TestFunction21/U::item1 - IL_0026: bne.un.s IL_002a - - IL_0028: br.s IL_002c - - IL_002a: br.s IL_003b + IL_000c: ldarg.0 + IL_000d: pop + .line 100001,100001 : 0,0 '' + IL_000e: ldarg.0 + IL_000f: stloc.0 + IL_0010: ldarg.1 + IL_0011: stloc.1 + IL_0012: ldloc.0 + IL_0013: ldfld int32 TestFunction21/U::item1 + IL_0018: ldloc.1 + IL_0019: ldfld int32 TestFunction21/U::item1 + IL_001e: bne.un.s IL_002f .line 100001,100001 : 0,0 '' - IL_002c: ldloc.0 - IL_002d: ldfld int32 TestFunction21/U::item2 - IL_0032: ldloc.1 - IL_0033: ldfld int32 TestFunction21/U::item2 - IL_0038: ceq - IL_003a: ret + IL_0020: ldloc.0 + IL_0021: ldfld int32 TestFunction21/U::item2 + IL_0026: ldloc.1 + IL_0027: ldfld int32 TestFunction21/U::item2 + IL_002c: ceq + IL_002e: ret .line 100001,100001 : 0,0 '' - IL_003b: ldc.i4.0 - IL_003c: ret + IL_002f: ldc.i4.0 + IL_0030: ret .line 100001,100001 : 0,0 '' - IL_003d: ldc.i4.0 - IL_003e: ret + IL_0031: ldc.i4.0 + IL_0032: ret .line 100001,100001 : 0,0 '' - IL_003f: ldarg.1 - IL_0040: ldnull - IL_0041: cgt.un - IL_0043: ldc.i4.0 - IL_0044: ceq - IL_0046: ret + IL_0033: ldarg.1 + IL_0034: ldnull + IL_0035: cgt.un + IL_0037: ldc.i4.0 + IL_0038: ceq + IL_003a: 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 24 (0x18) + // Code size 20 (0x14) .maxstack 4 .locals init ([0] class TestFunction21/U V_0) .line 4,4 : 6,7 '' @@ -736,21 +652,17 @@ IL_0001: isinst TestFunction21/U IL_0006: stloc.0 IL_0007: ldloc.0 - IL_0008: brfalse.s IL_000c - - IL_000a: br.s IL_000e - - IL_000c: br.s IL_0016 + IL_0008: brfalse.s IL_0012 .line 100001,100001 : 0,0 '' - IL_000e: ldarg.0 - IL_000f: ldloc.0 - IL_0010: callvirt instance bool TestFunction21/U::Equals(class TestFunction21/U) - IL_0015: ret + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: callvirt instance bool TestFunction21/U::Equals(class TestFunction21/U) + IL_0011: ret .line 100001,100001 : 0,0 '' - IL_0016: ldc.i4.0 - IL_0017: ret + IL_0012: ldc.i4.0 + IL_0013: ret } // end of method U::Equals .property instance int32 Tag() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction23.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction23.il.bsl index c222b9759e1..7f88a4908a9 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction23.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction23.il.bsl @@ -36,13 +36,13 @@ // Offset: 0x00000340 Length: 0x000000E3 } .module TestFunction23.exe -// MVID: {5FCFFD21-A643-451C-A745-038321FDCF5F} +// MVID: {60B68B97-A643-451C-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07570000 +// Image base: 0x07240000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction24.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction24.il.bsl index bdbd5f41fc7..1063152863a 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction24.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction24.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction24 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction24 { - // Offset: 0x00000000 Length: 0x0000075B + // Offset: 0x00000000 Length: 0x00000742 } .mresource public FSharpOptimizationData.TestFunction24 { - // Offset: 0x00000760 Length: 0x00000228 + // Offset: 0x00000748 Length: 0x00000228 } .module TestFunction24.exe -// MVID: {59B19208-A643-4587-A745-03830892B159} +// MVID: {60B68B97-A643-4587-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01080000 +// Image base: 0x06EA0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -141,7 +141,7 @@ instance int32 CompareTo(class TestFunction24/Point obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 142 (0x8e) + // Code size 108 (0x6c) .maxstack 4 .locals init ([0] int32 V_0, [1] class [mscorlib]System.Collections.IComparer V_1, @@ -151,130 +151,102 @@ [5] int32 V_5, [6] int32 V_6) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 16707566,16707566 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction24.fs' + .line 16707566,16707566 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction24.fs' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000d - - IL_0008: br IL_0080 + IL_0004: brfalse.s IL_0062 .line 16707566,16707566 : 0,0 '' - IL_000d: ldarg.1 - IL_000e: ldnull - IL_000f: cgt.un - IL_0011: brfalse.s IL_0015 - - IL_0013: br.s IL_001a - - IL_0015: br IL_007e + IL_0006: ldarg.1 + IL_0007: ldnull + IL_0008: cgt.un + IL_000a: brfalse.s IL_0060 .line 16707566,16707566 : 0,0 '' - IL_001a: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_001f: stloc.1 - IL_0020: ldarg.0 - IL_0021: ldfld int32 TestFunction24/Point::x@ - IL_0026: stloc.2 - IL_0027: ldarg.1 - IL_0028: ldfld int32 TestFunction24/Point::x@ - IL_002d: stloc.3 - IL_002e: ldloc.2 - IL_002f: ldloc.3 - IL_0030: bge.s IL_0034 - - IL_0032: br.s IL_0036 - - IL_0034: br.s IL_003a + IL_000c: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0011: stloc.1 + IL_0012: ldarg.0 + IL_0013: ldfld int32 TestFunction24/Point::x@ + IL_0018: stloc.2 + IL_0019: ldarg.1 + IL_001a: ldfld int32 TestFunction24/Point::x@ + IL_001f: stloc.3 + IL_0020: ldloc.2 + IL_0021: ldloc.3 + IL_0022: bge.s IL_0028 .line 16707566,16707566 : 0,0 '' - IL_0036: ldc.i4.m1 + IL_0024: ldc.i4.m1 .line 16707566,16707566 : 0,0 '' - IL_0037: nop - IL_0038: br.s IL_003f + IL_0025: nop + IL_0026: br.s IL_002d .line 16707566,16707566 : 0,0 '' - IL_003a: ldloc.2 - IL_003b: ldloc.3 - IL_003c: cgt + IL_0028: ldloc.2 + IL_0029: ldloc.3 + IL_002a: cgt .line 16707566,16707566 : 0,0 '' - IL_003e: nop + IL_002c: nop .line 16707566,16707566 : 0,0 '' - IL_003f: stloc.0 - IL_0040: ldloc.0 - IL_0041: ldc.i4.0 - IL_0042: bge.s IL_0046 - - IL_0044: br.s IL_0048 - - IL_0046: br.s IL_004a + IL_002d: stloc.0 + IL_002e: ldloc.0 + IL_002f: ldc.i4.0 + IL_0030: bge.s IL_0034 .line 16707566,16707566 : 0,0 '' - IL_0048: ldloc.0 - IL_0049: ret + IL_0032: ldloc.0 + IL_0033: ret .line 16707566,16707566 : 0,0 '' - IL_004a: ldloc.0 - IL_004b: ldc.i4.0 - IL_004c: ble.s IL_0050 - - IL_004e: br.s IL_0052 - - IL_0050: br.s IL_0054 + IL_0034: ldloc.0 + IL_0035: ldc.i4.0 + IL_0036: ble.s IL_003a .line 16707566,16707566 : 0,0 '' - IL_0052: ldloc.0 - IL_0053: ret + IL_0038: ldloc.0 + IL_0039: ret .line 16707566,16707566 : 0,0 '' - IL_0054: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0059: stloc.s V_4 - IL_005b: ldarg.0 - IL_005c: ldfld int32 TestFunction24/Point::y@ - IL_0061: stloc.s V_5 - IL_0063: ldarg.1 - IL_0064: ldfld int32 TestFunction24/Point::y@ - IL_0069: stloc.s V_6 - IL_006b: ldloc.s V_5 - IL_006d: ldloc.s V_6 - IL_006f: bge.s IL_0073 - - IL_0071: br.s IL_0075 - - IL_0073: br.s IL_0077 + IL_003a: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_003f: stloc.s V_4 + IL_0041: ldarg.0 + IL_0042: ldfld int32 TestFunction24/Point::y@ + IL_0047: stloc.s V_5 + IL_0049: ldarg.1 + IL_004a: ldfld int32 TestFunction24/Point::y@ + IL_004f: stloc.s V_6 + IL_0051: ldloc.s V_5 + IL_0053: ldloc.s V_6 + IL_0055: bge.s IL_0059 .line 16707566,16707566 : 0,0 '' - IL_0075: ldc.i4.m1 - IL_0076: ret + IL_0057: ldc.i4.m1 + IL_0058: ret .line 16707566,16707566 : 0,0 '' - IL_0077: ldloc.s V_5 - IL_0079: ldloc.s V_6 - IL_007b: cgt - IL_007d: ret + IL_0059: ldloc.s V_5 + IL_005b: ldloc.s V_6 + IL_005d: cgt + IL_005f: ret .line 16707566,16707566 : 0,0 '' - IL_007e: ldc.i4.1 - IL_007f: ret + IL_0060: ldc.i4.1 + IL_0061: ret .line 16707566,16707566 : 0,0 '' - IL_0080: ldarg.1 - IL_0081: ldnull - IL_0082: cgt.un - IL_0084: brfalse.s IL_0088 - - IL_0086: br.s IL_008a - - IL_0088: br.s IL_008c + IL_0062: ldarg.1 + IL_0063: ldnull + IL_0064: cgt.un + IL_0066: brfalse.s IL_006a .line 16707566,16707566 : 0,0 '' - IL_008a: ldc.i4.m1 - IL_008b: ret + IL_0068: ldc.i4.m1 + IL_0069: ret .line 16707566,16707566 : 0,0 '' - IL_008c: ldc.i4.0 - IL_008d: ret + IL_006a: ldc.i4.0 + IL_006b: ret } // end of method Point::CompareTo .method public hidebysig virtual final @@ -296,7 +268,7 @@ class [mscorlib]System.Collections.IComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 159 (0x9f) + // Code size 125 (0x7d) .maxstack 4 .locals init ([0] class TestFunction24/Point V_0, [1] class TestFunction24/Point V_1, @@ -316,135 +288,107 @@ IL_0009: ldarg.0 IL_000a: ldnull IL_000b: cgt.un - IL_000d: brfalse.s IL_0011 - - IL_000f: br.s IL_0016 - - IL_0011: br IL_008c + IL_000d: brfalse.s IL_006e .line 16707566,16707566 : 0,0 '' - IL_0016: ldarg.1 - IL_0017: unbox.any TestFunction24/Point - IL_001c: ldnull - IL_001d: cgt.un - IL_001f: brfalse.s IL_0023 - - IL_0021: br.s IL_0028 - - IL_0023: br IL_008a + IL_000f: ldarg.1 + IL_0010: unbox.any TestFunction24/Point + IL_0015: ldnull + IL_0016: cgt.un + IL_0018: brfalse.s IL_006c .line 16707566,16707566 : 0,0 '' - IL_0028: ldarg.2 - IL_0029: stloc.3 - IL_002a: ldarg.0 - IL_002b: ldfld int32 TestFunction24/Point::x@ - IL_0030: stloc.s V_4 - IL_0032: ldloc.1 - IL_0033: ldfld int32 TestFunction24/Point::x@ - IL_0038: stloc.s V_5 - IL_003a: ldloc.s V_4 - IL_003c: ldloc.s V_5 - IL_003e: bge.s IL_0042 - - IL_0040: br.s IL_0044 - - IL_0042: br.s IL_0048 + IL_001a: ldarg.2 + IL_001b: stloc.3 + IL_001c: ldarg.0 + IL_001d: ldfld int32 TestFunction24/Point::x@ + IL_0022: stloc.s V_4 + IL_0024: ldloc.1 + IL_0025: ldfld int32 TestFunction24/Point::x@ + IL_002a: stloc.s V_5 + IL_002c: ldloc.s V_4 + IL_002e: ldloc.s V_5 + IL_0030: bge.s IL_0036 .line 16707566,16707566 : 0,0 '' - IL_0044: ldc.i4.m1 + IL_0032: ldc.i4.m1 .line 16707566,16707566 : 0,0 '' - IL_0045: nop - IL_0046: br.s IL_004f + IL_0033: nop + IL_0034: br.s IL_003d .line 16707566,16707566 : 0,0 '' - IL_0048: ldloc.s V_4 - IL_004a: ldloc.s V_5 - IL_004c: cgt + IL_0036: ldloc.s V_4 + IL_0038: ldloc.s V_5 + IL_003a: cgt .line 16707566,16707566 : 0,0 '' - IL_004e: nop + IL_003c: nop .line 16707566,16707566 : 0,0 '' - IL_004f: stloc.2 - IL_0050: ldloc.2 - IL_0051: ldc.i4.0 - IL_0052: bge.s IL_0056 - - IL_0054: br.s IL_0058 - - IL_0056: br.s IL_005a + IL_003d: stloc.2 + IL_003e: ldloc.2 + IL_003f: ldc.i4.0 + IL_0040: bge.s IL_0044 .line 16707566,16707566 : 0,0 '' - IL_0058: ldloc.2 - IL_0059: ret + IL_0042: ldloc.2 + IL_0043: ret .line 16707566,16707566 : 0,0 '' - IL_005a: ldloc.2 - IL_005b: ldc.i4.0 - IL_005c: ble.s IL_0060 - - IL_005e: br.s IL_0062 - - IL_0060: br.s IL_0064 + IL_0044: ldloc.2 + IL_0045: ldc.i4.0 + IL_0046: ble.s IL_004a .line 16707566,16707566 : 0,0 '' - IL_0062: ldloc.2 - IL_0063: ret + IL_0048: ldloc.2 + IL_0049: ret .line 16707566,16707566 : 0,0 '' - IL_0064: ldarg.2 - IL_0065: stloc.s V_6 - IL_0067: ldarg.0 - IL_0068: ldfld int32 TestFunction24/Point::y@ - IL_006d: stloc.s V_7 - IL_006f: ldloc.1 - IL_0070: ldfld int32 TestFunction24/Point::y@ - IL_0075: stloc.s V_8 - IL_0077: ldloc.s V_7 - IL_0079: ldloc.s V_8 - IL_007b: bge.s IL_007f - - IL_007d: br.s IL_0081 - - IL_007f: br.s IL_0083 + IL_004a: ldarg.2 + IL_004b: stloc.s V_6 + IL_004d: ldarg.0 + IL_004e: ldfld int32 TestFunction24/Point::y@ + IL_0053: stloc.s V_7 + IL_0055: ldloc.1 + IL_0056: ldfld int32 TestFunction24/Point::y@ + IL_005b: stloc.s V_8 + IL_005d: ldloc.s V_7 + IL_005f: ldloc.s V_8 + IL_0061: bge.s IL_0065 .line 16707566,16707566 : 0,0 '' - IL_0081: ldc.i4.m1 - IL_0082: ret + IL_0063: ldc.i4.m1 + IL_0064: ret .line 16707566,16707566 : 0,0 '' - IL_0083: ldloc.s V_7 - IL_0085: ldloc.s V_8 - IL_0087: cgt - IL_0089: ret + IL_0065: ldloc.s V_7 + IL_0067: ldloc.s V_8 + IL_0069: cgt + IL_006b: ret .line 16707566,16707566 : 0,0 '' - IL_008a: ldc.i4.1 - IL_008b: ret + IL_006c: ldc.i4.1 + IL_006d: ret .line 16707566,16707566 : 0,0 '' - IL_008c: ldarg.1 - IL_008d: unbox.any TestFunction24/Point - IL_0092: ldnull - IL_0093: cgt.un - IL_0095: brfalse.s IL_0099 - - IL_0097: br.s IL_009b - - IL_0099: br.s IL_009d + IL_006e: ldarg.1 + IL_006f: unbox.any TestFunction24/Point + IL_0074: ldnull + IL_0075: cgt.un + IL_0077: brfalse.s IL_007b .line 16707566,16707566 : 0,0 '' - IL_009b: ldc.i4.m1 - IL_009c: ret + IL_0079: ldc.i4.m1 + IL_007a: ret .line 16707566,16707566 : 0,0 '' - IL_009d: ldc.i4.0 - IL_009e: ret + IL_007b: ldc.i4.0 + IL_007c: ret } // end of method Point::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 62 (0x3e) + // Code size 58 (0x3a) .maxstack 7 .locals init ([0] int32 V_0, [1] class [mscorlib]System.Collections.IEqualityComparer V_1, @@ -453,51 +397,47 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_003c - - .line 16707566,16707566 : 0,0 '' - IL_000a: ldc.i4.0 - IL_000b: stloc.0 - IL_000c: ldc.i4 0x9e3779b9 - IL_0011: ldarg.1 - IL_0012: stloc.1 - IL_0013: ldarg.0 - IL_0014: ldfld int32 TestFunction24/Point::y@ - IL_0019: ldloc.0 - IL_001a: ldc.i4.6 - IL_001b: shl - IL_001c: ldloc.0 - IL_001d: ldc.i4.2 - IL_001e: shr - IL_001f: add - IL_0020: add - IL_0021: add - IL_0022: stloc.0 - IL_0023: ldc.i4 0x9e3779b9 - IL_0028: ldarg.1 - IL_0029: stloc.2 - IL_002a: ldarg.0 - IL_002b: ldfld int32 TestFunction24/Point::x@ - IL_0030: ldloc.0 - IL_0031: ldc.i4.6 - IL_0032: shl - IL_0033: ldloc.0 - IL_0034: ldc.i4.2 - IL_0035: shr - IL_0036: add - IL_0037: add - IL_0038: add - IL_0039: stloc.0 - IL_003a: ldloc.0 - IL_003b: ret + IL_0004: brfalse.s IL_0038 .line 16707566,16707566 : 0,0 '' - IL_003c: ldc.i4.0 - IL_003d: ret + IL_0006: ldc.i4.0 + IL_0007: stloc.0 + IL_0008: ldc.i4 0x9e3779b9 + IL_000d: ldarg.1 + IL_000e: stloc.1 + IL_000f: ldarg.0 + IL_0010: ldfld int32 TestFunction24/Point::y@ + IL_0015: ldloc.0 + IL_0016: ldc.i4.6 + IL_0017: shl + IL_0018: ldloc.0 + IL_0019: ldc.i4.2 + IL_001a: shr + IL_001b: add + IL_001c: add + IL_001d: add + IL_001e: stloc.0 + IL_001f: ldc.i4 0x9e3779b9 + IL_0024: ldarg.1 + IL_0025: stloc.2 + IL_0026: ldarg.0 + IL_0027: ldfld int32 TestFunction24/Point::x@ + IL_002c: ldloc.0 + IL_002d: ldc.i4.6 + IL_002e: shl + IL_002f: ldloc.0 + IL_0030: ldc.i4.2 + IL_0031: shr + IL_0032: add + IL_0033: add + IL_0034: add + IL_0035: stloc.0 + IL_0036: ldloc.0 + IL_0037: ret + + .line 16707566,16707566 : 0,0 '' + IL_0038: ldc.i4.0 + IL_0039: ret } // end of method Point::GetHashCode .method public hidebysig virtual final @@ -518,7 +458,7 @@ 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) + // Code size 65 (0x41) .maxstack 4 .locals init ([0] class TestFunction24/Point V_0, [1] class TestFunction24/Point V_1, @@ -528,133 +468,109 @@ IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_0045 + IL_0004: brfalse.s IL_0039 .line 16707566,16707566 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: isinst TestFunction24/Point - IL_0010: stloc.0 - IL_0011: ldloc.0 - IL_0012: brfalse.s IL_0016 - - IL_0014: br.s IL_0018 - - IL_0016: br.s IL_0043 + IL_0006: ldarg.1 + IL_0007: isinst TestFunction24/Point + IL_000c: stloc.0 + IL_000d: ldloc.0 + IL_000e: brfalse.s IL_0037 .line 16707566,16707566 : 0,0 '' - IL_0018: ldloc.0 - IL_0019: stloc.1 - IL_001a: ldarg.2 - IL_001b: stloc.2 - IL_001c: ldarg.0 - IL_001d: ldfld int32 TestFunction24/Point::x@ - IL_0022: ldloc.1 - IL_0023: ldfld int32 TestFunction24/Point::x@ - IL_0028: ceq - IL_002a: brfalse.s IL_002e - - IL_002c: br.s IL_0030 - - IL_002e: br.s IL_0041 + IL_0010: ldloc.0 + IL_0011: stloc.1 + IL_0012: ldarg.2 + IL_0013: stloc.2 + IL_0014: ldarg.0 + IL_0015: ldfld int32 TestFunction24/Point::x@ + IL_001a: ldloc.1 + IL_001b: ldfld int32 TestFunction24/Point::x@ + IL_0020: ceq + IL_0022: brfalse.s IL_0035 .line 16707566,16707566 : 0,0 '' - IL_0030: ldarg.2 - IL_0031: stloc.3 - IL_0032: ldarg.0 - IL_0033: ldfld int32 TestFunction24/Point::y@ - IL_0038: ldloc.1 - IL_0039: ldfld int32 TestFunction24/Point::y@ - IL_003e: ceq - IL_0040: ret + IL_0024: ldarg.2 + IL_0025: stloc.3 + IL_0026: ldarg.0 + IL_0027: ldfld int32 TestFunction24/Point::y@ + IL_002c: ldloc.1 + IL_002d: ldfld int32 TestFunction24/Point::y@ + IL_0032: ceq + IL_0034: ret .line 16707566,16707566 : 0,0 '' - IL_0041: ldc.i4.0 - IL_0042: ret + IL_0035: ldc.i4.0 + IL_0036: ret .line 16707566,16707566 : 0,0 '' - IL_0043: ldc.i4.0 - IL_0044: ret + IL_0037: ldc.i4.0 + IL_0038: ret .line 16707566,16707566 : 0,0 '' - IL_0045: ldarg.1 - IL_0046: ldnull - IL_0047: cgt.un - IL_0049: ldc.i4.0 - IL_004a: ceq - IL_004c: ret + IL_0039: ldarg.1 + IL_003a: ldnull + IL_003b: cgt.un + IL_003d: ldc.i4.0 + IL_003e: ceq + IL_0040: ret } // end of method Point::Equals .method public hidebysig virtual final instance bool Equals(class TestFunction24/Point obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 65 (0x41) - .maxstack 4 + // Code size 53 (0x35) + .maxstack 8 .line 16707566,16707566 : 0,0 '' IL_0000: ldarg.0 IL_0001: ldnull IL_0002: cgt.un - IL_0004: brfalse.s IL_0008 - - IL_0006: br.s IL_000a - - IL_0008: br.s IL_0039 + IL_0004: brfalse.s IL_002d .line 16707566,16707566 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: ldnull - IL_000c: cgt.un - IL_000e: brfalse.s IL_0012 - - IL_0010: br.s IL_0014 - - IL_0012: br.s IL_0037 + IL_0006: ldarg.1 + IL_0007: ldnull + IL_0008: cgt.un + IL_000a: brfalse.s IL_002b .line 16707566,16707566 : 0,0 '' - IL_0014: ldarg.0 - IL_0015: ldfld int32 TestFunction24/Point::x@ - IL_001a: ldarg.1 - IL_001b: ldfld int32 TestFunction24/Point::x@ - IL_0020: bne.un.s IL_0024 - - IL_0022: br.s IL_0026 - - IL_0024: br.s IL_0035 + IL_000c: ldarg.0 + IL_000d: ldfld int32 TestFunction24/Point::x@ + IL_0012: ldarg.1 + IL_0013: ldfld int32 TestFunction24/Point::x@ + IL_0018: bne.un.s IL_0029 .line 16707566,16707566 : 0,0 '' - IL_0026: ldarg.0 - IL_0027: ldfld int32 TestFunction24/Point::y@ - IL_002c: ldarg.1 - IL_002d: ldfld int32 TestFunction24/Point::y@ - IL_0032: ceq - IL_0034: ret + IL_001a: ldarg.0 + IL_001b: ldfld int32 TestFunction24/Point::y@ + IL_0020: ldarg.1 + IL_0021: ldfld int32 TestFunction24/Point::y@ + IL_0026: ceq + IL_0028: ret .line 16707566,16707566 : 0,0 '' - IL_0035: ldc.i4.0 - IL_0036: ret + IL_0029: ldc.i4.0 + IL_002a: ret .line 16707566,16707566 : 0,0 '' - IL_0037: ldc.i4.0 - IL_0038: ret + IL_002b: ldc.i4.0 + IL_002c: ret .line 16707566,16707566 : 0,0 '' - IL_0039: ldarg.1 - IL_003a: ldnull - IL_003b: cgt.un - IL_003d: ldc.i4.0 - IL_003e: ceq - IL_0040: ret + IL_002d: ldarg.1 + IL_002e: ldnull + IL_002f: cgt.un + IL_0031: ldc.i4.0 + IL_0032: ceq + IL_0034: ret } // end of method Point::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 24 (0x18) + // Code size 20 (0x14) .maxstack 4 .locals init ([0] class TestFunction24/Point V_0) .line 4,4 : 6,11 '' @@ -662,21 +578,17 @@ IL_0001: isinst TestFunction24/Point IL_0006: stloc.0 IL_0007: ldloc.0 - IL_0008: brfalse.s IL_000c - - IL_000a: br.s IL_000e - - IL_000c: br.s IL_0016 + IL_0008: brfalse.s IL_0012 .line 16707566,16707566 : 0,0 '' - IL_000e: ldarg.0 - IL_000f: ldloc.0 - IL_0010: callvirt instance bool TestFunction24/Point::Equals(class TestFunction24/Point) - IL_0015: ret + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: callvirt instance bool TestFunction24/Point::Equals(class TestFunction24/Point) + IL_0011: ret .line 16707566,16707566 : 0,0 '' - IL_0016: ldc.i4.0 - IL_0017: ret + IL_0012: ldc.i4.0 + IL_0013: ret } // end of method Point::Equals .property instance int32 x() @@ -775,7 +687,7 @@ .method public static float64 pinArray1() cil managed { - // Code size 196 (0xc4) + // Code size 188 (0xbc) .maxstack 6 .locals init ([0] float64[] arr, [1] native int p1, @@ -817,71 +729,63 @@ IL_0067: ldloc.0 IL_0068: stloc.2 IL_0069: ldloc.2 - IL_006a: brfalse.s IL_006e - - IL_006c: br.s IL_0070 - - IL_006e: br.s IL_008e + IL_006a: brfalse.s IL_0086 .line 16707566,16707566 : 0,0 '' - IL_0070: ldloc.2 - IL_0071: call int32 [FSharp.Core]Microsoft.FSharp.Collections.ArrayModule::Length(!!0[]) - IL_0076: brfalse.s IL_007a - - IL_0078: br.s IL_007c - - IL_007a: br.s IL_0089 + IL_006c: ldloc.2 + IL_006d: call int32 [FSharp.Core]Microsoft.FSharp.Collections.ArrayModule::Length(!!0[]) + IL_0072: brfalse.s IL_0081 .line 16707566,16707566 : 0,0 '' - IL_007c: ldloc.2 - IL_007d: ldc.i4.0 - IL_007e: ldelema [mscorlib]System.Double - IL_0083: stloc.3 - IL_0084: ldloc.3 - IL_0085: conv.i + IL_0074: ldloc.2 + IL_0075: ldc.i4.0 + IL_0076: ldelema [mscorlib]System.Double + IL_007b: stloc.3 + IL_007c: ldloc.3 + IL_007d: conv.i .line 16707566,16707566 : 0,0 '' - IL_0086: nop - IL_0087: br.s IL_0091 + IL_007e: nop + IL_007f: br.s IL_0089 .line 16707566,16707566 : 0,0 '' - IL_0089: ldc.i4.0 - IL_008a: conv.i + IL_0081: ldc.i4.0 + IL_0082: conv.i .line 16707566,16707566 : 0,0 '' - IL_008b: nop - IL_008c: br.s IL_0091 + IL_0083: nop + IL_0084: br.s IL_0089 .line 16707566,16707566 : 0,0 '' - IL_008e: ldc.i4.0 - IL_008f: conv.i + IL_0086: ldc.i4.0 + IL_0087: conv.i .line 16707566,16707566 : 0,0 '' - IL_0090: nop + IL_0088: nop .line 16707566,16707566 : 0,0 '' - IL_0091: stloc.1 + IL_0089: stloc.1 .line 19,19 : 5,44 '' - IL_0092: ldloc.1 - IL_0093: stloc.s V_4 - IL_0095: ldc.i4.0 - IL_0096: stloc.s V_5 - IL_0098: ldloc.s V_4 - IL_009a: ldloc.s V_5 - IL_009c: conv.i - IL_009d: sizeof [mscorlib]System.Double - IL_00a3: mul - IL_00a4: add - IL_00a5: ldobj [mscorlib]System.Double - IL_00aa: ldloc.1 - IL_00ab: stloc.s V_6 - IL_00ad: ldc.i4.1 - IL_00ae: stloc.s V_7 - IL_00b0: ldloc.s V_6 - IL_00b2: ldloc.s V_7 - IL_00b4: conv.i - IL_00b5: sizeof [mscorlib]System.Double - IL_00bb: mul - IL_00bc: add - IL_00bd: ldobj [mscorlib]System.Double - IL_00c2: add - IL_00c3: ret + IL_008a: ldloc.1 + IL_008b: stloc.s V_4 + IL_008d: ldc.i4.0 + IL_008e: stloc.s V_5 + IL_0090: ldloc.s V_4 + IL_0092: ldloc.s V_5 + IL_0094: conv.i + IL_0095: sizeof [mscorlib]System.Double + IL_009b: mul + IL_009c: add + IL_009d: ldobj [mscorlib]System.Double + IL_00a2: ldloc.1 + IL_00a3: stloc.s V_6 + IL_00a5: ldc.i4.1 + IL_00a6: stloc.s V_7 + IL_00a8: ldloc.s V_6 + IL_00aa: ldloc.s V_7 + IL_00ac: conv.i + IL_00ad: sizeof [mscorlib]System.Double + IL_00b3: mul + IL_00b4: add + IL_00b5: ldobj [mscorlib]System.Double + IL_00ba: add + IL_00bb: ret } // end of method TestFunction24::pinArray1 .method public static float64 pinArray2() cil managed @@ -961,7 +865,7 @@ .method public static class [mscorlib]System.Tuple`2 pinString() cil managed { - // Code size 81 (0x51) + // Code size 77 (0x4d) .maxstack 6 .locals init ([0] string str, [1] native int pChar, @@ -977,53 +881,49 @@ IL_0006: ldloc.0 IL_0007: stloc.2 IL_0008: ldloc.2 - IL_0009: brfalse.s IL_000d - - IL_000b: br.s IL_000f - - IL_000d: br.s IL_001a + IL_0009: brfalse.s IL_0016 .line 16707566,16707566 : 0,0 '' - IL_000f: ldloc.2 - IL_0010: conv.i - IL_0011: call int32 [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::get_OffsetToStringData() - IL_0016: add + IL_000b: ldloc.2 + IL_000c: conv.i + IL_000d: call int32 [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::get_OffsetToStringData() + IL_0012: add .line 16707566,16707566 : 0,0 '' - IL_0017: nop - IL_0018: br.s IL_001c + IL_0013: nop + IL_0014: br.s IL_0018 .line 16707566,16707566 : 0,0 '' - IL_001a: ldloc.2 + IL_0016: ldloc.2 .line 16707566,16707566 : 0,0 '' - IL_001b: nop + IL_0017: nop .line 16707566,16707566 : 0,0 '' - IL_001c: stloc.1 + IL_0018: stloc.1 .line 31,31 : 5,50 '' - IL_001d: ldloc.1 - IL_001e: stloc.3 - IL_001f: ldc.i4.0 - IL_0020: stloc.s V_4 - IL_0022: ldloc.3 - IL_0023: ldloc.s V_4 - IL_0025: conv.i - IL_0026: sizeof [mscorlib]System.Char - IL_002c: mul - IL_002d: add - IL_002e: ldobj [mscorlib]System.Char - IL_0033: ldloc.1 - IL_0034: stloc.s V_5 - IL_0036: ldc.i4.1 - IL_0037: stloc.s V_6 - IL_0039: ldloc.s V_5 - IL_003b: ldloc.s V_6 - IL_003d: conv.i - IL_003e: sizeof [mscorlib]System.Char - IL_0044: mul - IL_0045: add - IL_0046: ldobj [mscorlib]System.Char - IL_004b: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, + IL_0019: ldloc.1 + IL_001a: stloc.3 + IL_001b: ldc.i4.0 + IL_001c: stloc.s V_4 + IL_001e: ldloc.3 + IL_001f: ldloc.s V_4 + IL_0021: conv.i + IL_0022: sizeof [mscorlib]System.Char + IL_0028: mul + IL_0029: add + IL_002a: ldobj [mscorlib]System.Char + IL_002f: ldloc.1 + IL_0030: stloc.s V_5 + IL_0032: ldc.i4.1 + IL_0033: stloc.s V_6 + IL_0035: ldloc.s V_5 + IL_0037: ldloc.s V_6 + IL_0039: conv.i + IL_003a: sizeof [mscorlib]System.Char + IL_0040: mul + IL_0041: add + IL_0042: ldobj [mscorlib]System.Char + IL_0047: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, !1) - IL_0050: ret + IL_004c: ret } // end of method TestFunction24::pinString } // end of class TestFunction24 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3b.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3b.il.bsl index d543e2e48bb..80497c1223d 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3b.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3b.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction3b { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction3b { - // Offset: 0x00000000 Length: 0x00000200 + // Offset: 0x00000000 Length: 0x000001FC } .mresource public FSharpOptimizationData.TestFunction3b { - // Offset: 0x00000208 Length: 0x0000008A + // Offset: 0x00000200 Length: 0x0000008A } .module TestFunction3b.exe -// MVID: {59B19208-A662-4FC9-A745-03830892B159} +// MVID: {60B68B97-A662-4FC9-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00BB0000 +// Image base: 0x090C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -56,7 +56,7 @@ // Code size 36 (0x24) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction3b.fs' + .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction3b.fs' IL_0000: ldstr "Hello" IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) @@ -75,7 +75,7 @@ .method public static void TestFunction3b() cil managed { - // Code size 73 (0x49) + // Code size 69 (0x45) .maxstack 3 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_0, [1] int32 x, @@ -104,31 +104,27 @@ IL_001a: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::FailurePattern(class [mscorlib]System.Exception) IL_001f: stloc.s V_4 IL_0021: ldloc.s V_4 - IL_0023: brfalse.s IL_0027 - - IL_0025: br.s IL_0029 - - IL_0027: br.s IL_003b + IL_0023: brfalse.s IL_0037 .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 + IL_0025: ldstr "World" + IL_002a: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_002f: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_0034: stloc.0 + IL_0035: leave.s IL_0042 .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 + IL_0037: rethrow + IL_0039: ldnull + IL_003a: unbox.any [FSharp.Core]Microsoft.FSharp.Core.Unit + IL_003f: stloc.0 + IL_0040: leave.s IL_0042 .line 100001,100001 : 0,0 '' } // end handler - IL_0046: ldloc.0 - IL_0047: pop - IL_0048: ret + IL_0042: ldloc.0 + IL_0043: pop + IL_0044: ret } // end of method TestFunction3b::TestFunction3b } // end of class TestFunction3b diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3c.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3c.il.bsl index 25c89fbbc87..aa5d2e75dc1 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3c.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction3c.il.bsl @@ -34,20 +34,20 @@ } .mresource public FSharpSignatureData.TestFunction3c { - // Offset: 0x00000000 Length: 0x000001FA + // Offset: 0x00000000 Length: 0x000001FC } .mresource public FSharpOptimizationData.TestFunction3c { // Offset: 0x00000200 Length: 0x0000008A } .module TestFunction3c.exe -// MVID: {5F1FA088-A662-4FAC-A745-038388A01F5F} +// MVID: {60B68B97-A662-4FAC-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06AD0000 +// Image base: 0x06B00000 // =============== CLASS MEMBERS DECLARATION =================== @@ -61,7 +61,7 @@ // Code size 36 (0x24) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,20 'C:\\kevinransom\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction3c.fs' + .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction3c.fs' IL_0000: ldstr "Hello" IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) @@ -80,7 +80,7 @@ .method public static void TestFunction3c() cil managed { - // Code size 105 (0x69) + // Code size 101 (0x65) .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_0, [1] int32 x, @@ -111,7 +111,7 @@ IL_001a: call class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1 [FSharp.Core]Microsoft.FSharp.Core.Operators::FailurePattern(class [mscorlib]System.Exception) IL_001f: stloc.s V_4 IL_0021: ldloc.s V_4 - IL_0023: brfalse.s IL_005b + IL_0023: brfalse.s IL_0057 IL_0025: ldloc.s V_4 IL_0027: call instance !0 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::get_Value() @@ -120,34 +120,30 @@ IL_0030: ldstr "hello" IL_0035: call bool [netstandard]System.String::Equals(string, string) - IL_003a: brfalse.s IL_003e + IL_003a: brfalse.s IL_0057 - IL_003c: br.s IL_0040 - - IL_003e: br.s IL_005b - - IL_0040: ldloc.s V_4 - IL_0042: call instance !0 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::get_Value() - IL_0047: stloc.s V_6 + IL_003c: ldloc.s V_4 + IL_003e: call instance !0 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::get_Value() + IL_0043: stloc.s V_6 .line 14,14 : 8,23 '' - IL_0049: ldstr "World" - IL_004e: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) - IL_0053: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) - IL_0058: stloc.0 - IL_0059: leave.s IL_0066 + IL_0045: ldstr "World" + IL_004a: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) + IL_004f: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_0054: stloc.0 + IL_0055: leave.s IL_0062 .line 100001,100001 : 0,0 '' - IL_005b: rethrow - IL_005d: ldnull - IL_005e: unbox.any [FSharp.Core]Microsoft.FSharp.Core.Unit - IL_0063: stloc.0 - IL_0064: leave.s IL_0066 + IL_0057: rethrow + IL_0059: ldnull + IL_005a: unbox.any [FSharp.Core]Microsoft.FSharp.Core.Unit + IL_005f: stloc.0 + IL_0060: leave.s IL_0062 .line 100001,100001 : 0,0 '' } // end handler - IL_0066: ldloc.0 - IL_0067: pop - IL_0068: ret + IL_0062: ldloc.0 + IL_0063: pop + IL_0064: ret } // end of method TestFunction3c::TestFunction3c } // end of class TestFunction3c diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction9b4.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction9b4.il.bsl index a92010a91c4..3c3c35b89af 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction9b4.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction9b4.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:3:0 + .ver 5:0:0:0 } .assembly TestFunction9b4 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction9b4 { - // Offset: 0x00000000 Length: 0x0000024C + // Offset: 0x00000000 Length: 0x00000240 } .mresource public FSharpOptimizationData.TestFunction9b4 { - // Offset: 0x00000250 Length: 0x00000085 + // Offset: 0x00000248 Length: 0x00000085 } .module TestFunction9b4.exe -// MVID: {5B17FC67-A091-56C1-A745-038367FC175B} +// MVID: {60B68B97-A091-56C1-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x026C0000 +// Image base: 0x06CC0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -58,7 +58,7 @@ .maxstack 3 .locals init ([0] !!a V_0) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 8,8 : 12,16 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9b4.fs' + .line 8,8 : 12,16 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9b4.fs' IL_0000: ldloc.0 IL_0001: ret } // end of method TestFunction9b4::Null diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction11.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction11.il.bsl index 5fc9397c162..98835e2b7b8 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction11.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction11.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction11 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction11 { - // Offset: 0x00000000 Length: 0x000001E8 + // Offset: 0x00000000 Length: 0x000001E4 } .mresource public FSharpOptimizationData.TestFunction11 { - // Offset: 0x000001F0 Length: 0x00000072 + // Offset: 0x000001E8 Length: 0x00000072 } .module TestFunction11.exe -// MVID: {59B19208-A624-45E6-A745-03830892B159} +// MVID: {60B68B97-A624-45E6-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01080000 +// Image base: 0x064D0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -57,7 +57,7 @@ // Code size 30 (0x1e) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,27 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction11.fs' + .line 5,5 : 5,27 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction11.fs' IL_0000: ldarg.0 IL_0001: ldarg.0 IL_0002: ldarg.0 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction12.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction12.il.bsl index 2f7b3efff8e..2a841ada06d 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction12.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction12.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction12 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction12 { - // Offset: 0x00000000 Length: 0x000001DB + // Offset: 0x00000000 Length: 0x000001D7 } .mresource public FSharpOptimizationData.TestFunction12 { // Offset: 0x000001E0 Length: 0x00000072 } .module TestFunction12.exe -// MVID: {59B19208-A624-4539-A745-03830892B159} +// MVID: {60B68B97-A624-4539-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x002D0000 +// Image base: 0x070C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -57,7 +57,7 @@ // Code size 9 (0x9) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,23 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction12.fs' + .line 5,5 : 5,23 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction12.fs' IL_0000: ldarg.0 IL_0001: ldarg.0 IL_0002: add diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction15.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction15.il.bsl index b71973b19e4..71b2315034b 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction15.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction15.il.bsl @@ -36,13 +36,13 @@ // Offset: 0x000001F0 Length: 0x00000072 } .module TestFunction15.exe -// MVID: {5FCFFD21-A624-4662-A745-038321FDCF5F} +// MVID: {60B68B97-A624-4662-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x06690000 +// Image base: 0x06B30000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction18.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction18.il.bsl index 80848608547..17e117dad82 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction18.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction18.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction18 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction18 { - // Offset: 0x00000000 Length: 0x000001ED + // Offset: 0x00000000 Length: 0x000001E1 } .mresource public FSharpOptimizationData.TestFunction18 { - // Offset: 0x000001F8 Length: 0x00000072 + // Offset: 0x000001E8 Length: 0x00000072 } .module TestFunction18.exe -// MVID: {59B19208-A624-4603-A745-03830892B159} +// MVID: {60B68B97-A624-4603-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x019B0000 +// Image base: 0x09850000 // =============== CLASS MEMBERS DECLARATION =================== @@ -56,7 +56,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 : 5,38 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction18.fs' + .line 5,5 : 5,38 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction18.fs' IL_0000: ldstr "hello" IL_0005: call void [mscorlib]System.Console::WriteLine(string) IL_000a: ret diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction2.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction2.il.bsl index 92ec82161db..21e84cf567b 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction2.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction2.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction2 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction2 { - // Offset: 0x00000000 Length: 0x000001FD + // Offset: 0x00000000 Length: 0x000001F9 } .mresource public FSharpOptimizationData.TestFunction2 { - // Offset: 0x00000208 Length: 0x00000088 + // Offset: 0x00000200 Length: 0x00000088 } .module TestFunction2.exe -// MVID: {59B19208-661D-8929-A745-03830892B159} +// MVID: {60B68B97-661D-8929-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x002E0000 +// Image base: 0x071A0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -56,7 +56,7 @@ // Code size 36 (0x24) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction2.fs' + .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction2.fs' IL_0000: ldstr "Hello" IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22.il.bsl index 3c7a947a3b4..23600d9913f 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly Testfunction22 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Testfunction22 { - // Offset: 0x00000000 Length: 0x0000015B + // Offset: 0x00000000 Length: 0x00000157 } .mresource public FSharpOptimizationData.Testfunction22 { // Offset: 0x00000160 Length: 0x00000055 } .module Testfunction22.exe -// MVID: {59B199CC-5AA3-4518-A745-0383CC99B159} +// MVID: {60B68B97-5AA3-4518-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x002E0000 +// Image base: 0x05220000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 6 (0x6) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 1,27 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22.fs' + .line 3,3 : 1,27 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22.fs' IL_0000: call void [mscorlib]System.Console::WriteLine() IL_0005: ret } // end of method $Testfunction22::main@ diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22b.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22b.il.bsl index ac3e76f8f2e..aea4e753718 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22b.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22b.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly Testfunction22b { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Testfunction22b { - // Offset: 0x00000000 Length: 0x0000015D + // Offset: 0x00000000 Length: 0x00000159 } .mresource public FSharpOptimizationData.Testfunction22b { - // Offset: 0x00000168 Length: 0x00000056 + // Offset: 0x00000160 Length: 0x00000056 } .module Testfunction22b.exe -// MVID: {59B19208-8504-18B7-A745-03830892B159} +// MVID: {60B68B97-8504-18B7-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x002D0000 +// Image base: 0x00AF0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 6 (0x6) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,35 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22b.fs' + .line 3,3 : 9,35 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22b.fs' IL_0000: call void [mscorlib]System.Console::WriteLine() IL_0005: ret } // end of method $Testfunction22b::main@ diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22c.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22c.il.bsl index e5640da7b20..19f08efe5bf 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22c.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22c.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly Testfunction22c { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Testfunction22c { - // Offset: 0x00000000 Length: 0x0000015D + // Offset: 0x00000000 Length: 0x00000159 } .mresource public FSharpOptimizationData.Testfunction22c { - // Offset: 0x00000168 Length: 0x00000056 + // Offset: 0x00000160 Length: 0x00000056 } .module Testfunction22c.exe -// MVID: {59B19208-459D-3DF8-A745-03830892B159} +// MVID: {60B68B97-459D-3DF8-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x03000000 +// Image base: 0x00F10000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 6 (0x6) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 10,36 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22c.fs' + .line 3,3 : 10,36 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22c.fs' IL_0000: call void [mscorlib]System.Console::WriteLine() IL_0005: ret } // end of method $Testfunction22c::main@ diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22d.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22d.il.bsl index 06dc2c7b954..1621b79b127 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22d.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22d.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly Testfunction22d { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Testfunction22d { - // Offset: 0x00000000 Length: 0x0000015D + // Offset: 0x00000000 Length: 0x00000159 } .mresource public FSharpOptimizationData.Testfunction22d { - // Offset: 0x00000168 Length: 0x00000056 + // Offset: 0x00000160 Length: 0x00000056 } .module Testfunction22d.exe -// MVID: {59B19208-FDCA-89B1-A745-03830892B159} +// MVID: {60B68B97-FDCA-89B1-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00720000 +// Image base: 0x00E60000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 6 (0x6) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 4,30 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22d.fs' + .line 3,3 : 4,30 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22d.fs' IL_0000: call void [mscorlib]System.Console::WriteLine() IL_0005: ret } // end of method $Testfunction22d::main@ diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22e.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22e.il.bsl index ed2dae30740..d3e72f97117 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22e.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22e.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly Testfunction22e { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Testfunction22e { - // Offset: 0x00000000 Length: 0x0000015D + // Offset: 0x00000000 Length: 0x00000159 } .mresource public FSharpOptimizationData.Testfunction22e { - // Offset: 0x00000168 Length: 0x00000056 + // Offset: 0x00000160 Length: 0x00000056 } .module Testfunction22e.exe -// MVID: {59B19208-C83B-1CB9-A745-03830892B159} +// MVID: {60B68B97-C83B-1CB9-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x002D0000 +// Image base: 0x05440000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 12 (0xc) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 1,11 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22e.fs' + .line 3,3 : 1,11 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22e.fs' IL_0000: ldc.i4.1 IL_0001: brfalse.s IL_000b diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22f.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22f.il.bsl index a3761172da8..1e52b731760 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22f.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22f.il.bsl @@ -34,20 +34,20 @@ } .mresource public FSharpSignatureData.Testfunction22f { - // Offset: 0x00000000 Length: 0x00000157 + // Offset: 0x00000000 Length: 0x00000159 } .mresource public FSharpOptimizationData.Testfunction22f { // Offset: 0x00000160 Length: 0x00000056 } .module Testfunction22f.exe -// MVID: {5F1FA088-C040-2523-A745-038388A01F5F} +// MVID: {60B68B97-C040-2523-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x067F0000 +// Image base: 0x06DC0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -68,34 +68,30 @@ .method public static void main@() cil managed { .entrypoint - // Code size 38 (0x26) + // Code size 34 (0x22) .maxstack 4 .locals init ([0] string V_0) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 1,15 'C:\\kevinransom\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22f.fs' + .line 3,3 : 1,15 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22f.fs' IL_0000: ldstr "A" IL_0005: stloc.0 IL_0006: ldloc.0 IL_0007: ldstr "A" IL_000c: call bool [netstandard]System.String::Equals(string, string) - IL_0011: brfalse.s IL_0015 - - IL_0013: br.s IL_0017 - - IL_0015: br.s IL_001f + IL_0011: brfalse.s IL_001b .line 4,4 : 12,38 '' - IL_0017: call void [mscorlib]System.Console::WriteLine() + IL_0013: call void [mscorlib]System.Console::WriteLine() .line 100001,100001 : 0,0 '' - IL_001c: nop - IL_001d: br.s IL_0025 + IL_0018: nop + IL_0019: br.s IL_0021 .line 5,5 : 10,36 '' - IL_001f: call void [mscorlib]System.Console::WriteLine() + IL_001b: call void [mscorlib]System.Console::WriteLine() .line 100001,100001 : 0,0 '' - IL_0024: nop - IL_0025: ret + IL_0020: nop + IL_0021: ret } // end of method $Testfunction22f::main@ } // end of class ''.$Testfunction22f diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22g.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22g.il.bsl index 629593f6e0a..9553805a4c2 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22g.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22g.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly Testfunction22g { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Testfunction22g { - // Offset: 0x00000000 Length: 0x0000015D + // Offset: 0x00000000 Length: 0x00000159 } .mresource public FSharpOptimizationData.Testfunction22g { - // Offset: 0x00000168 Length: 0x00000056 + // Offset: 0x00000160 Length: 0x00000056 } .module Testfunction22g.exe -// MVID: {59B19208-CA89-74DB-A745-03830892B159} +// MVID: {60B68B97-CA89-74DB-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x012F0000 +// Image base: 0x06FA0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -63,28 +63,24 @@ .method public static void main@() cil managed { .entrypoint - // Code size 22 (0x16) + // Code size 18 (0x12) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 1,13 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22g.fs' + .line 3,3 : 1,13 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22g.fs' IL_0000: ldc.i4.1 - IL_0001: brfalse.s IL_0005 - - IL_0003: br.s IL_0007 - - IL_0005: br.s IL_000f + IL_0001: brfalse.s IL_000b .line 3,3 : 14,40 '' - IL_0007: call void [mscorlib]System.Console::WriteLine() + IL_0003: call void [mscorlib]System.Console::WriteLine() .line 100001,100001 : 0,0 '' - IL_000c: nop - IL_000d: br.s IL_0015 + IL_0008: nop + IL_0009: br.s IL_0011 .line 3,3 : 46,72 '' - IL_000f: call void [mscorlib]System.Console::WriteLine() + IL_000b: call void [mscorlib]System.Console::WriteLine() .line 100001,100001 : 0,0 '' - IL_0014: nop - IL_0015: ret + IL_0010: nop + IL_0011: ret } // end of method $Testfunction22g::main@ } // end of class ''.$Testfunction22g diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22h.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22h.il.bsl index 7fcae895abd..192a1d04752 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22h.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction22h.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly Testfunction22h { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Testfunction22h { - // Offset: 0x00000000 Length: 0x0000015D + // Offset: 0x00000000 Length: 0x00000159 } .mresource public FSharpOptimizationData.Testfunction22h { - // Offset: 0x00000168 Length: 0x00000056 + // Offset: 0x00000160 Length: 0x00000056 } .module Testfunction22h.exe -// MVID: {59B19208-0266-39F6-A745-03830892B159} +// MVID: {60B68B97-0266-39F6-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00370000 +// Image base: 0x00C90000 // =============== CLASS MEMBERS DECLARATION =================== @@ -68,7 +68,7 @@ .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Core.Unit V_0, [1] class [mscorlib]System.Exception V_1) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 4,30 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22h.fs' + .line 4,4 : 4,30 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\Testfunction22h.fs' .try { IL_0000: call void [mscorlib]System.Console::WriteLine() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction3.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction3.il.bsl index 2a64c727d05..31cb50e6a6b 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction3.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction3.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction3 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction3 { - // Offset: 0x00000000 Length: 0x000001FD + // Offset: 0x00000000 Length: 0x000001F9 } .mresource public FSharpOptimizationData.TestFunction3 { - // Offset: 0x00000208 Length: 0x00000088 + // Offset: 0x00000200 Length: 0x00000088 } .module TestFunction3.exe -// MVID: {59B19208-663A-8929-A745-03830892B159} +// MVID: {60B68B97-663A-8929-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x013E0000 +// Image base: 0x06F20000 // =============== CLASS MEMBERS DECLARATION =================== @@ -56,7 +56,7 @@ // Code size 36 (0x24) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction3.fs' + .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction3.fs' IL_0000: ldstr "Hello" IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction4.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction4.il.bsl index 0b9818bebb3..9089ec85b99 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction4.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction4.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction4 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction4 { - // Offset: 0x00000000 Length: 0x000001FD + // Offset: 0x00000000 Length: 0x000001F9 } .mresource public FSharpOptimizationData.TestFunction4 { - // Offset: 0x00000208 Length: 0x00000088 + // Offset: 0x00000200 Length: 0x00000088 } .module TestFunction4.exe -// MVID: {59B19208-665B-8929-A745-03830892B159} +// MVID: {60B68B97-665B-8929-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x026C0000 +// Image base: 0x00F10000 // =============== CLASS MEMBERS DECLARATION =================== @@ -56,7 +56,7 @@ // Code size 36 (0x24) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction4.fs' + .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction4.fs' IL_0000: ldstr "Hello" IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction5.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction5.il.bsl index fb983f1af1e..f03b113a1f8 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.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction5 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction5 { - // Offset: 0x00000000 Length: 0x000001FD + // Offset: 0x00000000 Length: 0x000001F9 } .mresource public FSharpOptimizationData.TestFunction5 { - // Offset: 0x00000208 Length: 0x00000088 + // Offset: 0x00000200 Length: 0x00000088 } .module TestFunction5.exe -// MVID: {59B19208-6570-8929-A745-03830892B159} +// MVID: {60B68B97-6570-8929-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x010A0000 +// Image base: 0x00AB0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -56,7 +56,7 @@ // Code size 36 (0x24) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction5.fs' + .line 5,5 : 5,20 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction5.fs' IL_0000: ldstr "Hello" IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5::.ctor(string) IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction6.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction6.il.bsl index 88bcb600fc8..90d8b294ee0 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction6.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction6.il.bsl @@ -36,13 +36,13 @@ // Offset: 0x00000200 Length: 0x00000088 } .module TestFunction6.exe -// MVID: {5FCFFD21-6591-8929-A745-038321FDCF5F} +// MVID: {60B68B97-6591-8929-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x05A30000 +// Image base: 0x072D0000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction7.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction7.il.bsl index a9af9b236e4..be6eb321a0b 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction7.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction7.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction7 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction7 { - // Offset: 0x00000000 Length: 0x000001BF + // Offset: 0x00000000 Length: 0x000001BB } .mresource public FSharpOptimizationData.TestFunction7 { - // Offset: 0x000001C8 Length: 0x00000070 + // Offset: 0x000001C0 Length: 0x00000070 } .module TestFunction7.exe -// MVID: {59B19208-65AE-8929-A745-03830892B159} +// MVID: {60B68B97-65AE-8929-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00E30000 +// Image base: 0x051F0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -57,7 +57,7 @@ .maxstack 4 .locals init ([0] int32 r) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,22 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction7.fs' + .line 5,5 : 5,22 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction7.fs' IL_0000: ldc.i4.0 IL_0001: stloc.0 .line 6,6 : 5,16 '' diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction8.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction8.il.bsl index 328e4809402..75cd37c6650 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction8.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction8.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction8 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction8 { - // Offset: 0x00000000 Length: 0x000001C8 + // Offset: 0x00000000 Length: 0x000001C4 } .mresource public FSharpOptimizationData.TestFunction8 { - // Offset: 0x000001D0 Length: 0x00000070 + // Offset: 0x000001C8 Length: 0x00000070 } .module TestFunction8.exe -// MVID: {59B19208-65CF-8929-A745-03830892B159} +// MVID: {60B68B97-65CF-8929-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01010000 +// Image base: 0x07330000 // =============== CLASS MEMBERS DECLARATION =================== @@ -53,29 +53,25 @@ .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 int32 TestFunction8(int32 x) cil managed { - // Code size 16 (0x10) + // Code size 12 (0xc) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,18 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction8.fs' + .line 5,5 : 5,18 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction8.fs' IL_0000: ldarg.0 IL_0001: ldc.i4.3 - IL_0002: ble.s IL_0006 - - IL_0004: br.s IL_0008 - - IL_0006: br.s IL_000c + IL_0002: ble.s IL_0008 .line 6,6 : 9,12 '' + IL_0004: ldarg.0 + IL_0005: ldc.i4.4 + IL_0006: add + IL_0007: ret + + .line 7,7 : 10,13 '' IL_0008: ldarg.0 IL_0009: ldc.i4.4 - IL_000a: add + IL_000a: sub IL_000b: ret - - .line 7,7 : 10,13 '' - IL_000c: ldarg.0 - IL_000d: ldc.i4.4 - IL_000e: sub - IL_000f: ret } // end of method TestFunction8::TestFunction8 } // end of class TestFunction8 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9.il.bsl index b7e4921fdc3..aa1372d9a4d 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction9 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction9 { - // Offset: 0x00000000 Length: 0x000001D6 + // Offset: 0x00000000 Length: 0x000001D2 } .mresource public FSharpOptimizationData.TestFunction9 { - // Offset: 0x000001E0 Length: 0x00000070 + // Offset: 0x000001D8 Length: 0x00000070 } .module TestFunction9.exe -// MVID: {59B19208-64F4-8929-A745-03830892B159} +// MVID: {60B68B97-64F4-8929-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x016E0000 +// Image base: 0x06B70000 // =============== CLASS MEMBERS DECLARATION =================== @@ -53,33 +53,29 @@ .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 string TestFunction9(int32 x) cil managed { - // Code size 40 (0x28) + // Code size 36 (0x24) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,17 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9.fs' + .line 5,5 : 5,17 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9.fs' IL_0000: ldarg.0 IL_0001: ldc.i4.3 IL_0002: sub IL_0003: switch ( IL_0012, - IL_0014) - IL_0010: br.s IL_0022 - - IL_0012: br.s IL_0016 - - IL_0014: br.s IL_001c + IL_0018) + IL_0010: br.s IL_001e .line 6,6 : 12,19 '' - IL_0016: ldstr "three" - IL_001b: ret + IL_0012: ldstr "three" + IL_0017: ret .line 7,7 : 12,18 '' - IL_001c: ldstr "four" - IL_0021: ret + IL_0018: ldstr "four" + IL_001d: ret .line 8,8 : 12,18 '' - IL_0022: ldstr "five" - IL_0027: ret + IL_001e: ldstr "five" + IL_0023: ret } // end of method TestFunction9::TestFunction9 } // end of class TestFunction9 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b.il.bsl index a4168bde720..49d2757735a 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction9b { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction9b { - // Offset: 0x00000000 Length: 0x000001F6 + // Offset: 0x00000000 Length: 0x000001F2 } .mresource public FSharpOptimizationData.TestFunction9b { - // Offset: 0x00000200 Length: 0x00000072 + // Offset: 0x000001F8 Length: 0x00000072 } .module TestFunction9b.exe -// MVID: {59B19208-A52C-4FC9-A745-03830892B159} +// MVID: {60B68B97-A52C-4FC9-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01AA0000 +// Image base: 0x00DB0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -53,7 +53,7 @@ .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 string TestFunction9b(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 x) cil managed { - // Code size 411 (0x19b) + // Code size 409 (0x199) .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_0, [1] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_1, @@ -69,12 +69,12 @@ [11] int32 V_11, [12] int32 V_12) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,17 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9b.fs' + .line 5,5 : 5,17 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9b.fs' IL_0000: ldarg.0 IL_0001: stloc.0 IL_0002: ldloc.0 IL_0003: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0008: brfalse IL_0195 + IL_0008: brfalse IL_0193 IL_000d: ldloc.0 IL_000e: stloc.1 @@ -83,17 +83,17 @@ IL_0015: ldc.i4.1 IL_0016: sub IL_0017: switch ( - IL_00ff) + IL_00fd) IL_0020: ldloc.1 IL_0021: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() IL_0026: ldc.i4.3 IL_0027: sub IL_0028: switch ( - IL_007a) + IL_0078) IL_0031: ldloc.1 IL_0032: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_0037: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_003c: brfalse IL_0195 + IL_003c: brfalse IL_0193 IL_0041: ldloc.1 IL_0042: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() @@ -101,7 +101,7 @@ IL_0048: ldloc.2 IL_0049: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_004e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0053: brtrue IL_0195 + IL_0053: brtrue IL_0193 IL_0058: ldloc.2 IL_0059: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() @@ -114,126 +114,124 @@ IL_006a: add IL_006b: ldc.i4.4 IL_006c: ceq - IL_006e: brfalse.s IL_0075 - - IL_0070: br IL_017f - - IL_0075: br IL_0195 - - IL_007a: ldloc.1 - IL_007b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0080: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0085: brfalse IL_0195 - - IL_008a: ldloc.1 - IL_008b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0090: stloc.s V_7 - IL_0092: ldloc.s V_7 - IL_0094: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0099: ldc.i4.4 - IL_009a: sub - IL_009b: switch ( - IL_00e9) - IL_00a4: ldloc.s V_7 - IL_00a6: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00ab: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00b0: brtrue IL_0195 - - IL_00b5: ldloc.s V_7 - IL_00b7: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00bc: stloc.s V_8 - IL_00be: ldloc.1 - IL_00bf: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00c4: stloc.s V_9 - IL_00c6: ldloc.s V_9 - IL_00c8: ldloc.s V_8 - IL_00ca: add - IL_00cb: ldc.i4.4 - IL_00cc: ceq - IL_00ce: brfalse IL_0195 - - IL_00d3: ldloc.s V_7 - IL_00d5: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00da: ldloc.1 - IL_00db: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00e0: stloc.s V_6 - IL_00e2: stloc.s V_5 - IL_00e4: br IL_018f - - IL_00e9: ldloc.s V_7 - IL_00eb: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00f0: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00f5: brtrue IL_0195 - - IL_00fa: br IL_0179 - - IL_00ff: ldloc.1 - IL_0100: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0105: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_010a: brfalse IL_0195 - - IL_010f: ldloc.1 - IL_0110: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0115: stloc.s V_10 - IL_0117: ldloc.s V_10 - IL_0119: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_011e: ldc.i4.2 - IL_011f: sub - IL_0120: switch ( - IL_0165) - IL_0129: ldloc.s V_10 - IL_012b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0130: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0135: brtrue.s IL_0195 - - IL_0137: ldloc.s V_10 - IL_0139: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_013e: stloc.s V_11 - IL_0140: ldloc.1 - IL_0141: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0146: stloc.s V_12 - IL_0148: ldloc.s V_12 - IL_014a: ldloc.s V_11 - IL_014c: add - IL_014d: ldc.i4.4 - IL_014e: ceq - IL_0150: brfalse.s IL_0195 - - IL_0152: ldloc.s V_10 - IL_0154: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0159: ldloc.1 - IL_015a: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_015f: stloc.s V_6 - IL_0161: stloc.s V_5 - IL_0163: br.s IL_018f - - IL_0165: ldloc.s V_10 - IL_0167: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_016c: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0171: brtrue.s IL_0195 + IL_006e: brfalse IL_0193 + + IL_0073: br IL_017d + + IL_0078: ldloc.1 + IL_0079: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_007e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0083: brfalse IL_0193 + + IL_0088: ldloc.1 + IL_0089: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_008e: stloc.s V_7 + IL_0090: ldloc.s V_7 + IL_0092: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0097: ldc.i4.4 + IL_0098: sub + IL_0099: switch ( + IL_00e7) + IL_00a2: ldloc.s V_7 + IL_00a4: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00a9: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00ae: brtrue IL_0193 + + IL_00b3: ldloc.s V_7 + IL_00b5: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00ba: stloc.s V_8 + IL_00bc: ldloc.1 + IL_00bd: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00c2: stloc.s V_9 + IL_00c4: ldloc.s V_9 + IL_00c6: ldloc.s V_8 + IL_00c8: add + IL_00c9: ldc.i4.4 + IL_00ca: ceq + IL_00cc: brfalse IL_0193 + + IL_00d1: ldloc.s V_7 + IL_00d3: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00d8: ldloc.1 + IL_00d9: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00de: stloc.s V_6 + IL_00e0: stloc.s V_5 + IL_00e2: br IL_018d + + IL_00e7: ldloc.s V_7 + IL_00e9: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00ee: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00f3: brtrue IL_0193 + + IL_00f8: br IL_0177 + + IL_00fd: ldloc.1 + IL_00fe: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0103: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0108: brfalse IL_0193 + + IL_010d: ldloc.1 + IL_010e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0113: stloc.s V_10 + IL_0115: ldloc.s V_10 + IL_0117: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_011c: ldc.i4.2 + IL_011d: sub + IL_011e: switch ( + IL_0163) + IL_0127: ldloc.s V_10 + IL_0129: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_012e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0133: brtrue.s IL_0193 + + IL_0135: ldloc.s V_10 + IL_0137: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_013c: stloc.s V_11 + IL_013e: ldloc.1 + IL_013f: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0144: stloc.s V_12 + IL_0146: ldloc.s V_12 + IL_0148: ldloc.s V_11 + IL_014a: add + IL_014b: ldc.i4.4 + IL_014c: ceq + IL_014e: brfalse.s IL_0193 + + IL_0150: ldloc.s V_10 + IL_0152: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0157: ldloc.1 + IL_0158: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_015d: stloc.s V_6 + IL_015f: stloc.s V_5 + IL_0161: br.s IL_018d + + IL_0163: ldloc.s V_10 + IL_0165: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_016a: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_016f: brtrue.s IL_0193 .line 6,6 : 16,23 '' - IL_0173: ldstr "three" - IL_0178: ret + IL_0171: ldstr "three" + IL_0176: ret .line 7,7 : 16,23 '' - IL_0179: ldstr "seven" - IL_017e: ret + IL_0177: ldstr "seven" + IL_017c: ret .line 5,5 : 5,17 '' - IL_017f: ldloc.2 - IL_0180: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0185: stloc.s V_5 - IL_0187: ldloc.1 - IL_0188: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_018d: stloc.s V_6 + IL_017d: ldloc.2 + IL_017e: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0183: stloc.s V_5 + IL_0185: ldloc.1 + IL_0186: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_018b: stloc.s V_6 .line 8,8 : 29,35 '' - IL_018f: ldstr "four" - IL_0194: ret + IL_018d: ldstr "four" + IL_0192: ret .line 9,9 : 12,17 '' - IL_0195: ldstr "big" - IL_019a: ret + IL_0193: ldstr "big" + IL_0198: ret } // end of method TestFunction9b::TestFunction9b } // end of class TestFunction9b diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b1.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b1.il.bsl index 28857893620..03e2dd29718 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b1.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b1.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction9b1 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction9b1 { - // Offset: 0x00000000 Length: 0x00000208 + // Offset: 0x00000000 Length: 0x00000204 } .mresource public FSharpOptimizationData.TestFunction9b1 { - // Offset: 0x00000210 Length: 0x00000083 + // Offset: 0x00000208 Length: 0x00000083 } .module TestFunction9b1.exe -// MVID: {59B19208-A406-DAF4-A745-03830892B159} +// MVID: {60B68B97-A406-DAF4-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x02730000 +// Image base: 0x072C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -53,7 +53,7 @@ .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 string TestFunction9b(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 x) cil managed { - // Code size 411 (0x19b) + // Code size 409 (0x199) .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_0, [1] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_1, @@ -69,12 +69,12 @@ [11] int32 V_11, [12] int32 V_12) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,17 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9b1.fs' + .line 5,5 : 5,17 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9b1.fs' IL_0000: ldarg.0 IL_0001: stloc.0 IL_0002: ldloc.0 IL_0003: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0008: brfalse IL_0195 + IL_0008: brfalse IL_0193 IL_000d: ldloc.0 IL_000e: stloc.1 @@ -83,17 +83,17 @@ IL_0015: ldc.i4.1 IL_0016: sub IL_0017: switch ( - IL_00ff) + IL_00fd) IL_0020: ldloc.1 IL_0021: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() IL_0026: ldc.i4.3 IL_0027: sub IL_0028: switch ( - IL_007a) + IL_0078) IL_0031: ldloc.1 IL_0032: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_0037: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_003c: brfalse IL_0195 + IL_003c: brfalse IL_0193 IL_0041: ldloc.1 IL_0042: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() @@ -101,7 +101,7 @@ IL_0048: ldloc.2 IL_0049: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_004e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0053: brtrue IL_0195 + IL_0053: brtrue IL_0193 IL_0058: ldloc.2 IL_0059: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() @@ -114,126 +114,124 @@ IL_006a: add IL_006b: ldc.i4.4 IL_006c: ceq - IL_006e: brfalse.s IL_0075 - - IL_0070: br IL_017f - - IL_0075: br IL_0195 - - IL_007a: ldloc.1 - IL_007b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0080: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0085: brfalse IL_0195 - - IL_008a: ldloc.1 - IL_008b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0090: stloc.s V_7 - IL_0092: ldloc.s V_7 - IL_0094: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0099: ldc.i4.4 - IL_009a: sub - IL_009b: switch ( - IL_00e9) - IL_00a4: ldloc.s V_7 - IL_00a6: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00ab: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00b0: brtrue IL_0195 - - IL_00b5: ldloc.s V_7 - IL_00b7: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00bc: stloc.s V_8 - IL_00be: ldloc.1 - IL_00bf: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00c4: stloc.s V_9 - IL_00c6: ldloc.s V_9 - IL_00c8: ldloc.s V_8 - IL_00ca: add - IL_00cb: ldc.i4.4 - IL_00cc: ceq - IL_00ce: brfalse IL_0195 - - IL_00d3: ldloc.s V_7 - IL_00d5: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00da: ldloc.1 - IL_00db: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00e0: stloc.s V_6 - IL_00e2: stloc.s V_5 - IL_00e4: br IL_018f - - IL_00e9: ldloc.s V_7 - IL_00eb: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00f0: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00f5: brtrue IL_0195 - - IL_00fa: br IL_0179 - - IL_00ff: ldloc.1 - IL_0100: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0105: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_010a: brfalse IL_0195 - - IL_010f: ldloc.1 - IL_0110: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0115: stloc.s V_10 - IL_0117: ldloc.s V_10 - IL_0119: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_011e: ldc.i4.2 - IL_011f: sub - IL_0120: switch ( - IL_0165) - IL_0129: ldloc.s V_10 - IL_012b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0130: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0135: brtrue.s IL_0195 - - IL_0137: ldloc.s V_10 - IL_0139: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_013e: stloc.s V_11 - IL_0140: ldloc.1 - IL_0141: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0146: stloc.s V_12 - IL_0148: ldloc.s V_12 - IL_014a: ldloc.s V_11 - IL_014c: add - IL_014d: ldc.i4.4 - IL_014e: ceq - IL_0150: brfalse.s IL_0195 - - IL_0152: ldloc.s V_10 - IL_0154: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0159: ldloc.1 - IL_015a: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_015f: stloc.s V_6 - IL_0161: stloc.s V_5 - IL_0163: br.s IL_018f - - IL_0165: ldloc.s V_10 - IL_0167: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_016c: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0171: brtrue.s IL_0195 + IL_006e: brfalse IL_0193 + + IL_0073: br IL_017d + + IL_0078: ldloc.1 + IL_0079: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_007e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0083: brfalse IL_0193 + + IL_0088: ldloc.1 + IL_0089: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_008e: stloc.s V_7 + IL_0090: ldloc.s V_7 + IL_0092: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0097: ldc.i4.4 + IL_0098: sub + IL_0099: switch ( + IL_00e7) + IL_00a2: ldloc.s V_7 + IL_00a4: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00a9: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00ae: brtrue IL_0193 + + IL_00b3: ldloc.s V_7 + IL_00b5: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00ba: stloc.s V_8 + IL_00bc: ldloc.1 + IL_00bd: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00c2: stloc.s V_9 + IL_00c4: ldloc.s V_9 + IL_00c6: ldloc.s V_8 + IL_00c8: add + IL_00c9: ldc.i4.4 + IL_00ca: ceq + IL_00cc: brfalse IL_0193 + + IL_00d1: ldloc.s V_7 + IL_00d3: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00d8: ldloc.1 + IL_00d9: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00de: stloc.s V_6 + IL_00e0: stloc.s V_5 + IL_00e2: br IL_018d + + IL_00e7: ldloc.s V_7 + IL_00e9: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00ee: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00f3: brtrue IL_0193 + + IL_00f8: br IL_0177 + + IL_00fd: ldloc.1 + IL_00fe: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0103: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0108: brfalse IL_0193 + + IL_010d: ldloc.1 + IL_010e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0113: stloc.s V_10 + IL_0115: ldloc.s V_10 + IL_0117: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_011c: ldc.i4.2 + IL_011d: sub + IL_011e: switch ( + IL_0163) + IL_0127: ldloc.s V_10 + IL_0129: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_012e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0133: brtrue.s IL_0193 + + IL_0135: ldloc.s V_10 + IL_0137: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_013c: stloc.s V_11 + IL_013e: ldloc.1 + IL_013f: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0144: stloc.s V_12 + IL_0146: ldloc.s V_12 + IL_0148: ldloc.s V_11 + IL_014a: add + IL_014b: ldc.i4.4 + IL_014c: ceq + IL_014e: brfalse.s IL_0193 + + IL_0150: ldloc.s V_10 + IL_0152: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0157: ldloc.1 + IL_0158: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_015d: stloc.s V_6 + IL_015f: stloc.s V_5 + IL_0161: br.s IL_018d + + IL_0163: ldloc.s V_10 + IL_0165: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_016a: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_016f: brtrue.s IL_0193 .line 6,6 : 16,23 '' - IL_0173: ldstr "three" - IL_0178: ret + IL_0171: ldstr "three" + IL_0176: ret .line 7,7 : 16,23 '' - IL_0179: ldstr "seven" - IL_017e: ret + IL_0177: ldstr "seven" + IL_017c: ret .line 5,5 : 5,17 '' - IL_017f: ldloc.2 - IL_0180: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0185: stloc.s V_5 - IL_0187: ldloc.1 - IL_0188: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_018d: stloc.s V_6 + IL_017d: ldloc.2 + IL_017e: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0183: stloc.s V_5 + IL_0185: ldloc.1 + IL_0186: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_018b: stloc.s V_6 .line 8,8 : 29,35 '' - IL_018f: ldstr "four" - IL_0194: ret + IL_018d: ldstr "four" + IL_0192: ret .line 9,9 : 12,17 '' - IL_0195: ldstr "big" - IL_019a: ret + IL_0193: ldstr "big" + IL_0198: ret } // end of method TestFunction9b1::TestFunction9b } // end of class TestFunction9b1 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b2.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b2.il.bsl index 005b49c3081..1fa79b615e8 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b2.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b2.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction9b2 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction9b2 { - // Offset: 0x00000000 Length: 0x00000208 + // Offset: 0x00000000 Length: 0x00000204 } .mresource public FSharpOptimizationData.TestFunction9b2 { - // Offset: 0x00000210 Length: 0x00000083 + // Offset: 0x00000208 Length: 0x00000083 } .module TestFunction9b2.exe -// MVID: {59B19208-9C0B-E35E-A745-03830892B159} +// MVID: {60B68B97-9C0B-E35E-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00730000 +// Image base: 0x07220000 // =============== CLASS MEMBERS DECLARATION =================== @@ -53,7 +53,7 @@ .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 string TestFunction9b(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 x) cil managed { - // Code size 411 (0x19b) + // Code size 409 (0x199) .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_0, [1] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_1, @@ -69,12 +69,12 @@ [11] int32 V_11, [12] int32 V_12) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,17 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9b2.fs' + .line 5,5 : 5,17 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9b2.fs' IL_0000: ldarg.0 IL_0001: stloc.0 IL_0002: ldloc.0 IL_0003: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0008: brfalse IL_0195 + IL_0008: brfalse IL_0193 IL_000d: ldloc.0 IL_000e: stloc.1 @@ -83,17 +83,17 @@ IL_0015: ldc.i4.1 IL_0016: sub IL_0017: switch ( - IL_00ff) + IL_00fd) IL_0020: ldloc.1 IL_0021: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() IL_0026: ldc.i4.3 IL_0027: sub IL_0028: switch ( - IL_007a) + IL_0078) IL_0031: ldloc.1 IL_0032: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_0037: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_003c: brfalse IL_0195 + IL_003c: brfalse IL_0193 IL_0041: ldloc.1 IL_0042: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() @@ -101,7 +101,7 @@ IL_0048: ldloc.2 IL_0049: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_004e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0053: brtrue IL_0195 + IL_0053: brtrue IL_0193 IL_0058: ldloc.2 IL_0059: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() @@ -114,126 +114,124 @@ IL_006a: add IL_006b: ldc.i4.4 IL_006c: ceq - IL_006e: brfalse.s IL_0075 - - IL_0070: br IL_017f - - IL_0075: br IL_0195 - - IL_007a: ldloc.1 - IL_007b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0080: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0085: brfalse IL_0195 - - IL_008a: ldloc.1 - IL_008b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0090: stloc.s V_7 - IL_0092: ldloc.s V_7 - IL_0094: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0099: ldc.i4.4 - IL_009a: sub - IL_009b: switch ( - IL_00e9) - IL_00a4: ldloc.s V_7 - IL_00a6: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00ab: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00b0: brtrue IL_0195 - - IL_00b5: ldloc.s V_7 - IL_00b7: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00bc: stloc.s V_8 - IL_00be: ldloc.1 - IL_00bf: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00c4: stloc.s V_9 - IL_00c6: ldloc.s V_9 - IL_00c8: ldloc.s V_8 - IL_00ca: add - IL_00cb: ldc.i4.4 - IL_00cc: ceq - IL_00ce: brfalse IL_0195 - - IL_00d3: ldloc.s V_7 - IL_00d5: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00da: ldloc.1 - IL_00db: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00e0: stloc.s V_6 - IL_00e2: stloc.s V_5 - IL_00e4: br IL_018f - - IL_00e9: ldloc.s V_7 - IL_00eb: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00f0: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00f5: brtrue IL_0195 - - IL_00fa: br IL_0179 - - IL_00ff: ldloc.1 - IL_0100: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0105: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_010a: brfalse IL_0195 - - IL_010f: ldloc.1 - IL_0110: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0115: stloc.s V_10 - IL_0117: ldloc.s V_10 - IL_0119: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_011e: ldc.i4.2 - IL_011f: sub - IL_0120: switch ( - IL_0165) - IL_0129: ldloc.s V_10 - IL_012b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0130: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0135: brtrue.s IL_0195 - - IL_0137: ldloc.s V_10 - IL_0139: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_013e: stloc.s V_11 - IL_0140: ldloc.1 - IL_0141: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0146: stloc.s V_12 - IL_0148: ldloc.s V_12 - IL_014a: ldloc.s V_11 - IL_014c: add - IL_014d: ldc.i4.4 - IL_014e: ceq - IL_0150: brfalse.s IL_0195 - - IL_0152: ldloc.s V_10 - IL_0154: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0159: ldloc.1 - IL_015a: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_015f: stloc.s V_6 - IL_0161: stloc.s V_5 - IL_0163: br.s IL_018f - - IL_0165: ldloc.s V_10 - IL_0167: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_016c: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0171: brtrue.s IL_0195 + IL_006e: brfalse IL_0193 + + IL_0073: br IL_017d + + IL_0078: ldloc.1 + IL_0079: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_007e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0083: brfalse IL_0193 + + IL_0088: ldloc.1 + IL_0089: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_008e: stloc.s V_7 + IL_0090: ldloc.s V_7 + IL_0092: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0097: ldc.i4.4 + IL_0098: sub + IL_0099: switch ( + IL_00e7) + IL_00a2: ldloc.s V_7 + IL_00a4: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00a9: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00ae: brtrue IL_0193 + + IL_00b3: ldloc.s V_7 + IL_00b5: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00ba: stloc.s V_8 + IL_00bc: ldloc.1 + IL_00bd: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00c2: stloc.s V_9 + IL_00c4: ldloc.s V_9 + IL_00c6: ldloc.s V_8 + IL_00c8: add + IL_00c9: ldc.i4.4 + IL_00ca: ceq + IL_00cc: brfalse IL_0193 + + IL_00d1: ldloc.s V_7 + IL_00d3: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00d8: ldloc.1 + IL_00d9: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00de: stloc.s V_6 + IL_00e0: stloc.s V_5 + IL_00e2: br IL_018d + + IL_00e7: ldloc.s V_7 + IL_00e9: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00ee: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00f3: brtrue IL_0193 + + IL_00f8: br IL_0177 + + IL_00fd: ldloc.1 + IL_00fe: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0103: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0108: brfalse IL_0193 + + IL_010d: ldloc.1 + IL_010e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0113: stloc.s V_10 + IL_0115: ldloc.s V_10 + IL_0117: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_011c: ldc.i4.2 + IL_011d: sub + IL_011e: switch ( + IL_0163) + IL_0127: ldloc.s V_10 + IL_0129: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_012e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0133: brtrue.s IL_0193 + + IL_0135: ldloc.s V_10 + IL_0137: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_013c: stloc.s V_11 + IL_013e: ldloc.1 + IL_013f: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0144: stloc.s V_12 + IL_0146: ldloc.s V_12 + IL_0148: ldloc.s V_11 + IL_014a: add + IL_014b: ldc.i4.4 + IL_014c: ceq + IL_014e: brfalse.s IL_0193 + + IL_0150: ldloc.s V_10 + IL_0152: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0157: ldloc.1 + IL_0158: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_015d: stloc.s V_6 + IL_015f: stloc.s V_5 + IL_0161: br.s IL_018d + + IL_0163: ldloc.s V_10 + IL_0165: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_016a: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_016f: brtrue.s IL_0193 .line 6,6 : 16,23 '' - IL_0173: ldstr "three" - IL_0178: ret + IL_0171: ldstr "three" + IL_0176: ret .line 7,7 : 16,23 '' - IL_0179: ldstr "seven" - IL_017e: ret + IL_0177: ldstr "seven" + IL_017c: ret .line 5,5 : 5,17 '' - IL_017f: ldloc.2 - IL_0180: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0185: stloc.s V_5 - IL_0187: ldloc.1 - IL_0188: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_018d: stloc.s V_6 + IL_017d: ldloc.2 + IL_017e: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0183: stloc.s V_5 + IL_0185: ldloc.1 + IL_0186: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_018b: stloc.s V_6 .line 8,8 : 29,35 '' - IL_018f: ldstr "four" - IL_0194: ret + IL_018d: ldstr "four" + IL_0192: ret .line 9,9 : 12,17 '' - IL_0195: ldstr "big" - IL_019a: ret + IL_0193: ldstr "big" + IL_0198: ret } // end of method TestFunction9b2::TestFunction9b } // end of class TestFunction9b2 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b3.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b3.il.bsl index dc4f68ffb80..855fe60eaf0 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b3.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/Testfunction9b3.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TestFunction9b3 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TestFunction9b3 { - // Offset: 0x00000000 Length: 0x00000208 + // Offset: 0x00000000 Length: 0x00000204 } .mresource public FSharpOptimizationData.TestFunction9b3 { - // Offset: 0x00000210 Length: 0x00000083 + // Offset: 0x00000208 Length: 0x00000083 } .module TestFunction9b3.exe -// MVID: {59B19208-C1A4-612A-A745-03830892B159} +// MVID: {60B68B97-C1A4-612A-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00680000 +// Image base: 0x068C0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -53,7 +53,7 @@ .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 string TestFunction9b(class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 x) cil managed { - // Code size 411 (0x19b) + // Code size 409 (0x199) .maxstack 4 .locals init ([0] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_0, [1] class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 V_1, @@ -69,12 +69,12 @@ [11] int32 V_11, [12] int32 V_12) .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 5,5 : 5,17 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9b3.fs' + .line 5,5 : 5,17 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\TestFunctions\\TestFunction9b3.fs' IL_0000: ldarg.0 IL_0001: stloc.0 IL_0002: ldloc.0 IL_0003: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0008: brfalse IL_0195 + IL_0008: brfalse IL_0193 IL_000d: ldloc.0 IL_000e: stloc.1 @@ -83,17 +83,17 @@ IL_0015: ldc.i4.1 IL_0016: sub IL_0017: switch ( - IL_00ff) + IL_00fd) IL_0020: ldloc.1 IL_0021: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() IL_0026: ldc.i4.3 IL_0027: sub IL_0028: switch ( - IL_007a) + IL_0078) IL_0031: ldloc.1 IL_0032: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_0037: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_003c: brfalse IL_0195 + IL_003c: brfalse IL_0193 IL_0041: ldloc.1 IL_0042: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() @@ -101,7 +101,7 @@ IL_0048: ldloc.2 IL_0049: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() IL_004e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0053: brtrue IL_0195 + IL_0053: brtrue IL_0193 IL_0058: ldloc.2 IL_0059: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() @@ -114,126 +114,124 @@ IL_006a: add IL_006b: ldc.i4.4 IL_006c: ceq - IL_006e: brfalse.s IL_0075 - - IL_0070: br IL_017f - - IL_0075: br IL_0195 - - IL_007a: ldloc.1 - IL_007b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0080: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0085: brfalse IL_0195 - - IL_008a: ldloc.1 - IL_008b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0090: stloc.s V_7 - IL_0092: ldloc.s V_7 - IL_0094: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0099: ldc.i4.4 - IL_009a: sub - IL_009b: switch ( - IL_00e9) - IL_00a4: ldloc.s V_7 - IL_00a6: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00ab: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00b0: brtrue IL_0195 - - IL_00b5: ldloc.s V_7 - IL_00b7: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00bc: stloc.s V_8 - IL_00be: ldloc.1 - IL_00bf: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00c4: stloc.s V_9 - IL_00c6: ldloc.s V_9 - IL_00c8: ldloc.s V_8 - IL_00ca: add - IL_00cb: ldc.i4.4 - IL_00cc: ceq - IL_00ce: brfalse IL_0195 - - IL_00d3: ldloc.s V_7 - IL_00d5: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00da: ldloc.1 - IL_00db: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_00e0: stloc.s V_6 - IL_00e2: stloc.s V_5 - IL_00e4: br IL_018f - - IL_00e9: ldloc.s V_7 - IL_00eb: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00f0: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_00f5: brtrue IL_0195 - - IL_00fa: br IL_0179 - - IL_00ff: ldloc.1 - IL_0100: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0105: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_010a: brfalse IL_0195 - - IL_010f: ldloc.1 - IL_0110: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0115: stloc.s V_10 - IL_0117: ldloc.s V_10 - IL_0119: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_011e: ldc.i4.2 - IL_011f: sub - IL_0120: switch ( - IL_0165) - IL_0129: ldloc.s V_10 - IL_012b: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0130: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0135: brtrue.s IL_0195 - - IL_0137: ldloc.s V_10 - IL_0139: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_013e: stloc.s V_11 - IL_0140: ldloc.1 - IL_0141: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0146: stloc.s V_12 - IL_0148: ldloc.s V_12 - IL_014a: ldloc.s V_11 - IL_014c: add - IL_014d: ldc.i4.4 - IL_014e: ceq - IL_0150: brfalse.s IL_0195 - - IL_0152: ldloc.s V_10 - IL_0154: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0159: ldloc.1 - IL_015a: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_015f: stloc.s V_6 - IL_0161: stloc.s V_5 - IL_0163: br.s IL_018f - - IL_0165: ldloc.s V_10 - IL_0167: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_016c: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() - IL_0171: brtrue.s IL_0195 + IL_006e: brfalse IL_0193 + + IL_0073: br IL_017d + + IL_0078: ldloc.1 + IL_0079: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_007e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0083: brfalse IL_0193 + + IL_0088: ldloc.1 + IL_0089: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_008e: stloc.s V_7 + IL_0090: ldloc.s V_7 + IL_0092: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0097: ldc.i4.4 + IL_0098: sub + IL_0099: switch ( + IL_00e7) + IL_00a2: ldloc.s V_7 + IL_00a4: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00a9: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00ae: brtrue IL_0193 + + IL_00b3: ldloc.s V_7 + IL_00b5: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00ba: stloc.s V_8 + IL_00bc: ldloc.1 + IL_00bd: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00c2: stloc.s V_9 + IL_00c4: ldloc.s V_9 + IL_00c6: ldloc.s V_8 + IL_00c8: add + IL_00c9: ldc.i4.4 + IL_00ca: ceq + IL_00cc: brfalse IL_0193 + + IL_00d1: ldloc.s V_7 + IL_00d3: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00d8: ldloc.1 + IL_00d9: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_00de: stloc.s V_6 + IL_00e0: stloc.s V_5 + IL_00e2: br IL_018d + + IL_00e7: ldloc.s V_7 + IL_00e9: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00ee: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_00f3: brtrue IL_0193 + + IL_00f8: br IL_0177 + + IL_00fd: ldloc.1 + IL_00fe: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0103: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0108: brfalse IL_0193 + + IL_010d: ldloc.1 + IL_010e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0113: stloc.s V_10 + IL_0115: ldloc.s V_10 + IL_0117: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_011c: ldc.i4.2 + IL_011d: sub + IL_011e: switch ( + IL_0163) + IL_0127: ldloc.s V_10 + IL_0129: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_012e: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_0133: brtrue.s IL_0193 + + IL_0135: ldloc.s V_10 + IL_0137: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_013c: stloc.s V_11 + IL_013e: ldloc.1 + IL_013f: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0144: stloc.s V_12 + IL_0146: ldloc.s V_12 + IL_0148: ldloc.s V_11 + IL_014a: add + IL_014b: ldc.i4.4 + IL_014c: ceq + IL_014e: brfalse.s IL_0193 + + IL_0150: ldloc.s V_10 + IL_0152: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0157: ldloc.1 + IL_0158: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_015d: stloc.s V_6 + IL_015f: stloc.s V_5 + IL_0161: br.s IL_018d + + IL_0163: ldloc.s V_10 + IL_0165: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_016a: call instance class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_TailOrNull() + IL_016f: brtrue.s IL_0193 .line 6,6 : 16,23 '' - IL_0173: ldstr "three" - IL_0178: ret + IL_0171: ldstr "three" + IL_0176: ret .line 7,7 : 16,23 '' - IL_0179: ldstr "seven" - IL_017e: ret + IL_0177: ldstr "seven" + IL_017c: ret .line 5,5 : 5,17 '' - IL_017f: ldloc.2 - IL_0180: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_0185: stloc.s V_5 - IL_0187: ldloc.1 - IL_0188: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() - IL_018d: stloc.s V_6 + IL_017d: ldloc.2 + IL_017e: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_0183: stloc.s V_5 + IL_0185: ldloc.1 + IL_0186: call instance !0 class [FSharp.Core]Microsoft.FSharp.Collections.FSharpList`1::get_HeadOrDefault() + IL_018b: stloc.s V_6 .line 8,8 : 29,35 '' - IL_018f: ldstr "four" - IL_0194: ret + IL_018d: ldstr "four" + IL_0192: ret .line 9,9 : 12,17 '' - IL_0195: ldstr "big" - IL_019a: ret + IL_0193: ldstr "big" + IL_0198: ret } // end of method TestFunction9b3::TestFunction9b } // end of class TestFunction9b3 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/OptionalArg01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/OptionalArg01.il.bsl index 4474ab67ae3..92b9f88d01f 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/OptionalArg01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/OptionalArg01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.7.3081.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:6:0:0 + .ver 5:0:0:0 } .assembly OptionalArg01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.OptionalArg01 { - // Offset: 0x00000000 Length: 0x00000466 + // Offset: 0x00000000 Length: 0x0000045A } .mresource public FSharpOptimizationData.OptionalArg01 { - // Offset: 0x00000470 Length: 0x00000445 + // Offset: 0x00000460 Length: 0x00000445 } .module OptionalArg01.exe -// MVID: {5CB489E1-4F48-B5AF-A745-0383E189B45C} +// MVID: {60B68B97-4F48-B5AF-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x067B0000 +// Image base: 0x05C20000 // =============== CLASS MEMBERS DECLARATION =================== @@ -61,7 +61,7 @@ // Code size 9 (0x9) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 16707566,16707566 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\OptionalArg01.fs' + .line 16707566,16707566 : 0,0 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\OptionalArg01.fs' IL_0000: ldarg.0 IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() IL_0006: ldarg.0 @@ -98,7 +98,7 @@ .custom instance void [FSharp.Core]Microsoft.FSharp.Core.OptionalArgumentAttribute::.ctor() = ( 01 00 00 00 ) .param [2] .custom instance void [FSharp.Core]Microsoft.FSharp.Core.OptionalArgumentAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 83 (0x53) + // Code size 91 (0x5b) .maxstack 4 .locals init ([0] int32 count, [1] int32 V_1, @@ -107,85 +107,95 @@ [4] class OptionalArg01/A v2) .line 10,10 : 9,44 '' IL_0000: ldarg.0 - IL_0001: brfalse.s IL_0007 + IL_0001: brfalse.s IL_0005 - .line 8,8 : 61,70 '' - IL_0003: ldc.i4.1 - .line 16707566,16707566 : 0,0 '' - IL_0004: nop - IL_0005: br.s IL_0009 + IL_0003: br.s IL_0009 .line 8,8 : 43,48 '' - IL_0007: ldc.i4.0 + IL_0005: ldc.i4.0 + .line 16707566,16707566 : 0,0 '' + IL_0006: nop + IL_0007: br.s IL_000b + + .line 8,8 : 61,70 '' + IL_0009: ldc.i4.1 .line 16707566,16707566 : 0,0 '' - IL_0008: nop + IL_000a: nop .line 16707566,16707566 : 0,0 '' - IL_0009: stloc.0 + IL_000b: stloc.0 .line 10,10 : 9,44 '' - IL_000a: ldarg.1 - IL_000b: brfalse.s IL_0013 + IL_000c: ldarg.1 + IL_000d: brfalse.s IL_0011 - .line 9,9 : 61,70 '' - IL_000d: ldloc.0 - IL_000e: ldc.i4.1 - IL_000f: add - .line 16707566,16707566 : 0,0 '' - IL_0010: nop - IL_0011: br.s IL_0015 + IL_000f: br.s IL_0015 .line 9,9 : 43,48 '' - IL_0013: ldloc.0 + IL_0011: ldloc.0 .line 16707566,16707566 : 0,0 '' - IL_0014: nop + IL_0012: nop + IL_0013: br.s IL_0019 + + .line 9,9 : 61,70 '' + IL_0015: ldloc.0 + IL_0016: ldc.i4.1 + IL_0017: add .line 16707566,16707566 : 0,0 '' - IL_0015: stloc.1 - .line 10,10 : 9,44 '' - IL_0016: ldloc.1 - IL_0017: newobj instance void class [mscorlib]System.Collections.Generic.List`1::.ctor(int32) - IL_001c: stloc.2 - IL_001d: ldarg.0 - IL_001e: brfalse.s IL_0035 - - IL_0020: ldarg.0 - IL_0021: stloc.3 - IL_0022: ldloc.3 - IL_0023: call instance !0 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::get_Value() - IL_0028: stloc.s v2 - .line 11,11 : 47,62 '' - IL_002a: ldloc.2 - IL_002b: ldloc.s v2 - IL_002d: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_0018: nop .line 16707566,16707566 : 0,0 '' - IL_0032: nop - IL_0033: br.s IL_0037 + IL_0019: stloc.1 + .line 10,10 : 9,44 '' + IL_001a: ldloc.1 + IL_001b: newobj instance void class [mscorlib]System.Collections.Generic.List`1::.ctor(int32) + IL_0020: stloc.2 + IL_0021: ldarg.0 + IL_0022: brfalse.s IL_0026 + + IL_0024: br.s IL_002a .line 11,11 : 31,33 '' - IL_0035: nop + IL_0026: nop .line 16707566,16707566 : 0,0 '' - IL_0036: nop - IL_0037: ldarg.1 - IL_0038: brfalse.s IL_004f - - IL_003a: ldarg.1 - IL_003b: stloc.3 - IL_003c: ldloc.3 - IL_003d: call instance !0 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::get_Value() - IL_0042: stloc.s v2 - .line 12,12 : 47,62 '' - IL_0044: ldloc.2 - IL_0045: ldloc.s v2 - IL_0047: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) + IL_0027: nop + IL_0028: br.s IL_003d + + .line 10,10 : 9,44 '' + IL_002a: ldarg.0 + IL_002b: stloc.3 + IL_002c: ldloc.3 + IL_002d: call instance !0 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::get_Value() + IL_0032: stloc.s v2 + .line 11,11 : 47,62 '' + IL_0034: ldloc.2 + IL_0035: ldloc.s v2 + IL_0037: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) .line 16707566,16707566 : 0,0 '' - IL_004c: nop - IL_004d: br.s IL_0051 + IL_003c: nop + IL_003d: ldarg.1 + IL_003e: brfalse.s IL_0042 + + IL_0040: br.s IL_0046 .line 12,12 : 31,33 '' - IL_004f: nop + IL_0042: nop + .line 16707566,16707566 : 0,0 '' + IL_0043: nop + IL_0044: br.s IL_0059 + + .line 11,11 : 47,62 '' + IL_0046: ldarg.1 + IL_0047: stloc.3 + IL_0048: ldloc.3 + IL_0049: call instance !0 class [FSharp.Core]Microsoft.FSharp.Core.FSharpOption`1::get_Value() + IL_004e: stloc.s v2 + .line 12,12 : 47,62 '' + IL_0050: ldloc.2 + IL_0051: ldloc.s v2 + IL_0053: callvirt instance void class [mscorlib]System.Collections.Generic.List`1::Add(!0) .line 16707566,16707566 : 0,0 '' - IL_0050: nop + IL_0058: nop .line 13,13 : 9,16 '' - IL_0051: ldloc.2 - IL_0052: ret + IL_0059: ldloc.2 + IL_005a: ret } // end of method C::F } // end of class C diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple01.il.bsl index 36d04a11dc5..6b7cc9c8d49 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple01.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly Tuple01 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Tuple01 { - // Offset: 0x00000000 Length: 0x0000013F + // Offset: 0x00000000 Length: 0x0000013B } .mresource public FSharpOptimizationData.Tuple01 { - // Offset: 0x00000148 Length: 0x0000004E + // Offset: 0x00000140 Length: 0x0000004E } .module Tuple01.exe -// MVID: {59B19208-6FDB-3E0B-A745-03830892B159} +// MVID: {60B68B97-6FDB-3E0B-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x002E0000 +// Image base: 0x07270000 // =============== CLASS MEMBERS DECLARATION =================== @@ -62,7 +62,7 @@ // Code size 1 (0x1) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,10 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Tuples\\Tuple01.fs' + .line 3,3 : 9,10 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\Tuple01.fs' IL_0000: ret } // end of method $Tuple01::main@ diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple02.il.bsl index a668638daa3..3f0835a20bc 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple02.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple02.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly Tuple02 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Tuple02 { - // Offset: 0x00000000 Length: 0x0000013F + // Offset: 0x00000000 Length: 0x0000013B } .mresource public FSharpOptimizationData.Tuple02 { - // Offset: 0x00000148 Length: 0x0000004E + // Offset: 0x00000140 Length: 0x0000004E } .module Tuple02.exe -// MVID: {59B19208-ECCC-7D58-A745-03830892B159} +// MVID: {60B68B97-ECCC-7D58-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x02C00000 +// Image base: 0x070F0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 9 (0x9) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,12 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Tuples\\Tuple02.fs' + .line 3,3 : 9,12 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\Tuple02.fs' IL_0000: ldc.i4.1 IL_0001: ldc.i4.2 IL_0002: newobj instance void class [mscorlib]System.Tuple`2::.ctor(!0, diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple03.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple03.il.bsl index db8af4b0cfa..694e959cf21 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple03.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple03.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly Tuple03 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Tuple03 { - // Offset: 0x00000000 Length: 0x0000013F + // Offset: 0x00000000 Length: 0x0000013B } .mresource public FSharpOptimizationData.Tuple03 { - // Offset: 0x00000148 Length: 0x0000004E + // Offset: 0x00000140 Length: 0x0000004E } .module Tuple03.exe -// MVID: {59B19208-AD65-A299-A745-03830892B159} +// MVID: {60B68B97-AD65-A299-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00AF0000 +// Image base: 0x05690000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 10 (0xa) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,14 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Tuples\\Tuple03.fs' + .line 3,3 : 9,14 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\Tuple03.fs' IL_0000: ldc.i4.1 IL_0001: ldc.i4.2 IL_0002: ldc.i4.3 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple04.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple04.il.bsl index a35c62c665d..67ffcf00724 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple04.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple04.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly Tuple04 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Tuple04 { - // Offset: 0x00000000 Length: 0x0000013F + // Offset: 0x00000000 Length: 0x0000013B } .mresource public FSharpOptimizationData.Tuple04 { - // Offset: 0x00000148 Length: 0x0000004E + // Offset: 0x00000140 Length: 0x0000004E } .module Tuple04.exe -// MVID: {59B19208-6A2E-9E97-A745-03830892B159} +// MVID: {60B68B97-6A2E-9E97-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x001E0000 +// Image base: 0x06E90000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 11 (0xb) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,16 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Tuples\\Tuple04.fs' + .line 3,3 : 9,16 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\Tuple04.fs' IL_0000: ldc.i4.1 IL_0001: ldc.i4.2 IL_0002: ldc.i4.3 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple05.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple05.il.bsl index 07388eb7f39..0626f63d7be 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple05.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple05.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly Tuple05 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Tuple05 { - // Offset: 0x00000000 Length: 0x0000013F + // Offset: 0x00000000 Length: 0x0000013B } .mresource public FSharpOptimizationData.Tuple05 { - // Offset: 0x00000148 Length: 0x0000004E + // Offset: 0x00000140 Length: 0x0000004E } .module Tuple05.exe -// MVID: {59B19208-349F-319F-A745-03830892B159} +// MVID: {60B68B97-349F-319F-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00730000 +// Image base: 0x06BA0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 12 (0xc) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,18 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Tuples\\Tuple05.fs' + .line 3,3 : 9,18 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\Tuple05.fs' IL_0000: ldc.i4.1 IL_0001: ldc.i4.2 IL_0002: ldc.i4.3 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple06.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple06.il.bsl index adbe519a887..26e99d88dca 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple06.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple06.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly Tuple06 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Tuple06 { - // Offset: 0x00000000 Length: 0x0000013F + // Offset: 0x00000000 Length: 0x0000013B } .mresource public FSharpOptimizationData.Tuple06 { - // Offset: 0x00000148 Length: 0x0000004E + // Offset: 0x00000140 Length: 0x0000004E } .module Tuple06.exe -// MVID: {59B19208-67E0-4675-A745-03830892B159} +// MVID: {60B68B97-67E0-4675-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x02A20000 +// Image base: 0x06A80000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 13 (0xd) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,20 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Tuples\\Tuple06.fs' + .line 3,3 : 9,20 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\Tuple06.fs' IL_0000: ldc.i4.1 IL_0001: ldc.i4.2 IL_0002: ldc.i4.3 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple07.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple07.il.bsl index e42f75990a8..c4d97daf2ef 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple07.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple07.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly Tuple07 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Tuple07 { - // Offset: 0x00000000 Length: 0x0000013F + // Offset: 0x00000000 Length: 0x0000013B } .mresource public FSharpOptimizationData.Tuple07 { - // Offset: 0x00000148 Length: 0x0000004E + // Offset: 0x00000140 Length: 0x0000004E } .module Tuple07.exe -// MVID: {59B19208-7229-962D-A745-03830892B159} +// MVID: {60B68B97-7229-962D-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x017A0000 +// Image base: 0x00F10000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 14 (0xe) .maxstack 9 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,22 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Tuples\\Tuple07.fs' + .line 3,3 : 9,22 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\Tuple07.fs' IL_0000: ldc.i4.1 IL_0001: ldc.i4.2 IL_0002: ldc.i4.3 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple08.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple08.il.bsl index d029623cf32..72e7d3feed7 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple08.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/Tuple08.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly Tuple08 { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.Tuple08 { - // Offset: 0x00000000 Length: 0x0000013F + // Offset: 0x00000000 Length: 0x0000013B } .mresource public FSharpOptimizationData.Tuple08 { - // Offset: 0x00000148 Length: 0x0000004E + // Offset: 0x00000140 Length: 0x0000004E } .module Tuple08.exe -// MVID: {59B19208-E542-67B3-A745-03830892B159} +// MVID: {60B68B97-E542-67B3-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00390000 +// Image base: 0x00E80000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 20 (0x14) .maxstack 10 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,24 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Tuples\\Tuple08.fs' + .line 3,3 : 9,24 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\Tuple08.fs' IL_0000: ldc.i4.1 IL_0001: ldc.i4.2 IL_0002: ldc.i4.3 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleElimination.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleElimination.il.bsl index 40147b5627c..c7180964946 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleElimination.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleElimination.il.bsl @@ -34,20 +34,20 @@ } .mresource public FSharpSignatureData.TupleElimination { - // Offset: 0x00000000 Length: 0x00000228 + // Offset: 0x00000000 Length: 0x0000022A } .mresource public FSharpOptimizationData.TupleElimination { // Offset: 0x00000230 Length: 0x0000007B } .module TupleElimination.exe -// MVID: {5F1FA088-DFDD-92DF-A745-038388A01F5F} +// MVID: {60CB69C6-DFDD-92DF-A745-0383C669CB60} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x07100000 +// Image base: 0x06AF0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -62,7 +62,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 'C:\\kevinransom\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\TupleElimination.fs' + .line 5,5 : 15,27 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\TupleElimination.fs' IL_0000: ldstr "%A" IL_0005: 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) IL_000a: stloc.0 @@ -83,9 +83,9 @@ // Code size 79 (0x4f) .maxstack 5 .locals init ([0] class [mscorlib]System.Collections.Generic.Dictionary`2 dic, - [1] int32 V_1, - [2] bool V_2, - [3] int64 V_3, + [1] int32 i, + [2] bool b, + [3] int64 l, [4] bool V_4, [5] class [mscorlib]System.Tuple`2 t) .line 7,7 : 5,64 '' @@ -94,7 +94,7 @@ .line 9,9 : 31,48 '' IL_0006: ldloc.0 IL_0007: ldc.i4.1 - IL_0008: ldloca.s V_1 + IL_0008: ldloca.s i IL_000a: callvirt instance bool class [mscorlib]System.Collections.Generic.Dictionary`2::TryGetValue(!0, !1&) IL_000f: stloc.2 @@ -108,7 +108,7 @@ IL_001d: nop .line 14,14 : 38,65 '' IL_001e: ldstr "123" - IL_0023: ldloca.s V_3 + IL_0023: ldloca.s l IL_0025: call bool [mscorlib]System.Int64::TryParse(string, int64&) IL_002a: stloc.s V_4 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleMonster.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleMonster.il.bsl index 1626f867b9d..0a2af12cc38 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleMonster.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleMonster.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:1:0 + .ver 5:0:0:0 } .assembly TupleMonster { @@ -29,20 +29,20 @@ } .mresource public FSharpSignatureData.TupleMonster { - // Offset: 0x00000000 Length: 0x00000149 + // Offset: 0x00000000 Length: 0x00000145 } .mresource public FSharpOptimizationData.TupleMonster { // Offset: 0x00000150 Length: 0x00000053 } .module TupleMonster.exe -// MVID: {59B19208-1552-41D8-A745-03830892B159} +// MVID: {60B68B97-1552-41D8-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x010B0000 +// Image base: 0x07110000 // =============== CLASS MEMBERS DECLARATION =================== @@ -66,7 +66,7 @@ // Code size 74 (0x4a) .maxstack 28 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,137 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Tuples\\TupleMonster.fs' + .line 3,3 : 9,137 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\TupleMonster.fs' IL_0000: ldc.i4.s 97 IL_0002: ldc.i4.s 98 IL_0004: ldc.i4.s 99 diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/ValueTupleAliasConstructor.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/ValueTupleAliasConstructor.il.bsl index 768deb722a1..7682c8bfd4f 100644 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/ValueTupleAliasConstructor.il.bsl +++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/ValueTupleAliasConstructor.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.0 // Copyright (c) Microsoft Corporation. All rights reserved. @@ -13,12 +13,7 @@ .assembly extern FSharp.Core { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:5:0:0 -} -.assembly extern System.ValueTuple -{ - .publickeytoken = (CC 7B 13 FF CD 2D DD 51 ) // .{...-.Q - .ver 4:0:1:0 + .ver 5:0:0:0 } .assembly ValueTupleAliasConstructor { @@ -34,20 +29,20 @@ } .mresource public FSharpSignatureData.ValueTupleAliasConstructor { - // Offset: 0x00000000 Length: 0x000001EA + // Offset: 0x00000000 Length: 0x000001E0 } .mresource public FSharpOptimizationData.ValueTupleAliasConstructor { - // Offset: 0x000001F0 Length: 0x00000061 + // Offset: 0x000001E8 Length: 0x00000061 } .module ValueTupleAliasConstructor.exe -// MVID: {5B9C53DD-A8CF-BB34-A745-0383DD539C5B} +// MVID: {60B68B97-A8CF-BB34-A745-0383978BB660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01B00000 +// Image base: 0x00B60000 // =============== CLASS MEMBERS DECLARATION =================== @@ -71,11 +66,11 @@ // Code size 9 (0x9) .maxstack 8 .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 3,3 : 9,22 'c:\\kevinransom\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Tuples\\ValueTupleAliasConstructor.fs' + .line 3,3 : 9,22 'C:\\GitHub\\dsyme\\fsharp\\tests\\fsharpqa\\source\\CodeGen\\EmittedIL\\Tuples\\ValueTupleAliasConstructor.fs' IL_0000: ldc.i4.2 IL_0001: ldc.i4.2 - IL_0002: newobj instance void valuetype [System.ValueTuple]System.ValueTuple`2::.ctor(!0, - !1) + IL_0002: newobj instance void valuetype [mscorlib]System.ValueTuple`2::.ctor(!0, + !1) IL_0007: pop IL_0008: ret } // end of method $ValueTupleAliasConstructor::main@ diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fs b/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fs index 0c3c619c33e..324a05b273f 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fs +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fs @@ -7,7 +7,6 @@ //section='- OUTPUT FILES - ' ! option=delaysign kind=OptionSwitch //section='- OUTPUT FILES - ' ! option=doc kind=OptionString //section='- OUTPUT FILES - ' ! option=keyfile kind=OptionString -//section='- OUTPUT FILES - ' ! option=keycontainer kind=OptionString //section='- OUTPUT FILES - ' ! option=platform kind=OptionString //section='- OUTPUT FILES - ' ! option=nooptimizationdata kind=OptionUnit //section='- OUTPUT FILES - ' ! option=nointerfacedata kind=OptionUnit diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fsx b/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fsx index e0d7d42cc87..bfc350a2b86 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fsx +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/dummy.fsx @@ -107,7 +107,6 @@ //section='- OUTPUT FILES - ' ! option=delaysign kind=OptionSwitch //section='- OUTPUT FILES - ' ! option=doc kind=OptionString //section='- OUTPUT FILES - ' ! option=keyfile kind=OptionString -//section='- OUTPUT FILES - ' ! option=keycontainer kind=OptionString //section='- OUTPUT FILES - ' ! option=platform kind=OptionString //section='- OUTPUT FILES - ' ! option=nooptimizationdata kind=OptionUnit //section='- OUTPUT FILES - ' ! option=nointerfacedata kind=OptionUnit 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 eb506e9147f..853541eca4d 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl @@ -20,7 +20,6 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. --doc: Write the xmldoc of the assembly to the given file --keyfile: Specify a strong name key file ---keycontainer: Specify a strong name key container --platform: Limit which platforms this code can run on: x86, Itanium, x64, anycpu32bitpreferred, or anycpu. The @@ -35,6 +34,9 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. F#-specific metadata --sig: Print the inferred interface of the assembly to a file +--allsigs Print the inferred interfaces of all + compilation files to associated + signature files --nocopyfsharpcore Don't copy FSharp.Core.dll along the produced binaries @@ -48,6 +50,7 @@ Copyright (c) Microsoft Corporation. All Rights Reserved. - RESOURCES - +--win32icon: Specify a Win32 icon file (.ico) --win32res: Specify a Win32 resource file (.res) --win32manifest: Specify a Win32 manifest file --nowin32manifest Do not include the default Win32 diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/warnaserror/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/warnaserror/env.lst index c43a82a48dd..815335d76d3 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/warnaserror/env.lst +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/warnaserror/env.lst @@ -9,9 +9,11 @@ SOURCE=t6.fs SCFLAGS="--warnaserror+ --warnaserror+:25" # t6.fs enabled, incl list with one warning, list with 1 element SOURCE=t7.fs SCFLAGS="--warnaserror- --warnaserror-:25,26,988" # t7.fs disabled, excl list with all warnings, list with >1 element - SOURCE=t8.fs SCFLAGS="--warnaserror- --warnaserror-:25,26" # t8.fs disabled, excl list with some warning, list with >1 element - SOURCE=t9.fs SCFLAGS="--warnaserror- --warnaserror-:25" # t9.fs disabled, excl list with one warning, list with 1 element + SOURCE=t8.fs SCFLAGS="--warnaserror- --warnaserror-:25,26" # t8.fs disabled, excl list with some warning, list with >1 element + SOURCE=t9.fs SCFLAGS="--warnaserror- --warnaserror-:25" # t9.fs disabled, excl list with one warning, list with 1 element SOURCE=t10.fs SCFLAGS="--warnaserror- --warnaserror+:25,26,988" # t10.fs disabled, incl list with all warnings, list with >1 element - SOURCE=t11.fs SCFLAGS="--warnaserror- --warnaserror+:25,26" # t11.fs disabled, incl list with some warning, list with >1 element + SOURCE=t11.fs SCFLAGS="--warnaserror- --warnaserror+:25,26" # t11.fs disabled, incl list with some warning, list with >1 element SOURCE=t12.fs SCFLAGS="--warnaserror- --warnaserror+:25" # t12.fs disabled, incl list with one warning, list with 1 element + + SOURCE=t12.fs SCFLAGS="--warnaserror- --warnaserror+:25,nu0001,fs0001" # t12a.fs disabled, incl list with one warning, list with 1 element diff --git a/tests/fsharpqa/Source/Conformance/BasicTypeAndModuleDefinitions/UnionTypes/W_UnionCaseProduction01.fsx b/tests/fsharpqa/Source/Conformance/BasicTypeAndModuleDefinitions/UnionTypes/W_UnionCaseProduction01.fsx index 2efcd15a035..9b9226b076e 100644 --- a/tests/fsharpqa/Source/Conformance/BasicTypeAndModuleDefinitions/UnionTypes/W_UnionCaseProduction01.fsx +++ b/tests/fsharpqa/Source/Conformance/BasicTypeAndModuleDefinitions/UnionTypes/W_UnionCaseProduction01.fsx @@ -4,7 +4,8 @@ // | id -- nullary union case // | id of type * ... * type -- n-ary union case // | id : sig-spec -- n-ary union case -//This construct is deprecated: it is only for use in the F# library +//This construct is deprecated: it is only for use in the F# library +//This construct is deprecated: it is only for use in the F# library #light type T = | D : int -> T diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/CustomAttributes/Basic/E_StructLayout.fs b/tests/fsharpqa/Source/Conformance/DeclarationElements/CustomAttributes/Basic/E_StructLayout.fs index 7a31a7e5a4d..3a3c7a5419a 100644 --- a/tests/fsharpqa/Source/Conformance/DeclarationElements/CustomAttributes/Basic/E_StructLayout.fs +++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/CustomAttributes/Basic/E_StructLayout.fs @@ -1,8 +1,8 @@ // #Regression #Conformance #DeclarationElements #Attributes // Tests to ensure that you can't use StructLayout inappropriately // Regression tests for FSHARP1.0:5931 -//The type 'SExplicitBroken' has been marked as having an Explicit layout, but the field 'v2' has not been marked with the 'FieldOffset' attribute$ -//The FieldOffset attribute can only be placed on members of types marked with the StructLayout\(LayoutKind\.Explicit\)$ +//The type 'SExplicitBroken' has been marked as having an Explicit layout, but the field 'v2' has not been marked with the 'FieldOffset' attribute$ +//The FieldOffset attribute can only be placed on members of types marked with the StructLayout\(LayoutKind\.Explicit\)$ module M diff --git a/tests/fsharpqa/Source/Conformance/ImplementationFilesAndSignatureFiles/SignatureFiles/E_MissingSourceFile01.fsi b/tests/fsharpqa/Source/Conformance/ImplementationFilesAndSignatureFiles/SignatureFiles/E_MissingSourceFile01.fsi index f5f53a17593..efa1bd825eb 100644 --- a/tests/fsharpqa/Source/Conformance/ImplementationFilesAndSignatureFiles/SignatureFiles/E_MissingSourceFile01.fsi +++ b/tests/fsharpqa/Source/Conformance/ImplementationFilesAndSignatureFiles/SignatureFiles/E_MissingSourceFile01.fsi @@ -1,7 +1,7 @@ // #Regression #Conformance #SignatureFiles // Test you get an error if you specify an .fsi file but not the corresponding .fs file. -//The signature file 'E_MissingSourceFile01' does not have a corresponding implementation file\. If an implementation file exists then check the 'module' and 'namespace' declarations in the signature and implementation files match +//The signature file 'E_MissingSourceFile01' does not have a corresponding implementation file\. If an implementation file exists then check the 'module' and 'namespace' declarations in the signature and implementation files match namespace FSharp.Testing.MissingSourceFile01 diff --git a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/ConditionalCompilation/E_MustBeIdent02.fs b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/ConditionalCompilation/E_MustBeIdent02.fs index 8e204947133..09dee4fbf57 100644 --- a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/ConditionalCompilation/E_MustBeIdent02.fs +++ b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/ConditionalCompilation/E_MustBeIdent02.fs @@ -1,10 +1,9 @@ -// #Regression #Conformance #LexicalAnalysis +// #Regression #Conformance #LexicalAnalysis // Regression test for FSHARP1.0:1419 -//#if directive should be immediately followed by an identifier -//#endif has no matching #if in pattern -//Unmatched '\(' +//The type 'if_' is not defined. +//The type 'endif_' is not defined. #light let t8 (x : #if_) = () let t7 (x : #endif_) = () -exit 1 +exit 1 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Conformance/SpecialAttributesAndTypes/Imported/System.ThreadStatic/W_Deprecated01.fs b/tests/fsharpqa/Source/Conformance/SpecialAttributesAndTypes/Imported/System.ThreadStatic/W_Deprecated01.fs index fab0d7f9e46..60f29755a2a 100644 --- a/tests/fsharpqa/Source/Conformance/SpecialAttributesAndTypes/Imported/System.ThreadStatic/W_Deprecated01.fs +++ b/tests/fsharpqa/Source/Conformance/SpecialAttributesAndTypes/Imported/System.ThreadStatic/W_Deprecated01.fs @@ -1,7 +1,7 @@ // #Regression #Conformance #Attributes // Regression test for FSHARP1.0:4226 // We want to make sure the warning emits the correct suggestion (val and mutable were swapped) -//Thread static and context static 'let' bindings are deprecated\. Instead use a declaration of the form 'static val mutable : ' in a class\. Add the 'DefaultValue' attribute to this declaration to indicate that the value is initialized to the default value on each new thread\.$ +//Thread static and context static 'let' bindings are deprecated\. Instead use a declaration of the form 'static val mutable : ' in a class\. Add the 'DefaultValue' attribute to this declaration to indicate that the value is initialized to the default value on each new thread\.$ module M module Foo = [] diff --git a/tests/fsharpqa/Source/Conformance/TypesAndTypeConstraints/TypeParameterDefinitions/HashConstraint02.fs b/tests/fsharpqa/Source/Conformance/TypesAndTypeConstraints/TypeParameterDefinitions/HashConstraint02.fs index 24f94f08d3e..fe215d60f9e 100644 --- a/tests/fsharpqa/Source/Conformance/TypesAndTypeConstraints/TypeParameterDefinitions/HashConstraint02.fs +++ b/tests/fsharpqa/Source/Conformance/TypesAndTypeConstraints/TypeParameterDefinitions/HashConstraint02.fs @@ -1,8 +1,7 @@ // #Regression #Conformance #TypeConstraints // Regression test for FSHARP1.0:1419 // Tokens beginning with # should not match greedily with directives -// The only case where we are still a bit confused is #light: for this reason the code -// below compiles just fine (it would not work if I replace #light with #r for example) +//The type 'float' is not compatible with the type 'light_' #light type light_() = class diff --git a/tests/fsharpqa/Source/Diagnostics/General/W_LowercaseLiteralNotIgnored.fs b/tests/fsharpqa/Source/Diagnostics/General/W_LowercaseLiteralNotIgnored.fs index 6e45e9cff04..7e77c8228be 100644 --- a/tests/fsharpqa/Source/Diagnostics/General/W_LowercaseLiteralNotIgnored.fs +++ b/tests/fsharpqa/Source/Diagnostics/General/W_LowercaseLiteralNotIgnored.fs @@ -1,5 +1,5 @@ // #Regression #Diagnostics -//This rule will never be matched$ +//This rule will never be matched$ module M0 module m1 = diff --git a/tests/fsharpqa/Source/EntryPoint/E_twoentrypoints001.fs b/tests/fsharpqa/Source/EntryPoint/E_twoentrypoints001.fs index 2570a557776..ab5028ccc8a 100644 --- a/tests/fsharpqa/Source/EntryPoint/E_twoentrypoints001.fs +++ b/tests/fsharpqa/Source/EntryPoint/E_twoentrypoints001.fs @@ -3,7 +3,7 @@ // Explicit program entry point: [] // attribute on multiple functions //Hello -//A function labeled with the 'EntryPointAttribute' attribute must be the last declaration in the last file in the compilation sequence. +//A function labeled with the 'EntryPointAttribute' attribute must be the last declaration in the last file in the compilation sequence. #light module M = diff --git a/tests/fsharpqa/Source/InteractiveSession/Misc/UnknownDependencyManager/script1.fsx b/tests/fsharpqa/Source/InteractiveSession/Misc/UnknownDependencyManager/script1.fsx index b5365a617af..2c30ed8ff15 100644 --- a/tests/fsharpqa/Source/InteractiveSession/Misc/UnknownDependencyManager/script1.fsx +++ b/tests/fsharpqa/Source/InteractiveSession/Misc/UnknownDependencyManager/script1.fsx @@ -1,5 +1,5 @@ -//Package manager key 'unk' was not registered -//Processing of a script fragment has stopped because an exception has been raised +//Package manager key 'unk' was not registered +//Processing of a script fragment has stopped because an exception has been raised #r "unk: blubblub" diff --git a/tests/fsharpqa/Source/Optimizations/Inlining/StructUnion01.il.bsl b/tests/fsharpqa/Source/Optimizations/Inlining/StructUnion01.il.bsl index 7e07ff48ffd..164a3ee6567 100644 --- a/tests/fsharpqa/Source/Optimizations/Inlining/StructUnion01.il.bsl +++ b/tests/fsharpqa/Source/Optimizations/Inlining/StructUnion01.il.bsl @@ -1,5 +1,5 @@ -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 +// Microsoft (R) .NET Framework IL Disassembler. Version 4.8.3928.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:4:3:0 + .ver 5:0:0:0 } .assembly StructUnion01 { @@ -25,20 +25,20 @@ } .mresource public FSharpSignatureData.StructUnion01 { - // Offset: 0x00000000 Length: 0x0000087E + // Offset: 0x00000000 Length: 0x0000087A } .mresource public FSharpOptimizationData.StructUnion01 { - // Offset: 0x00000888 Length: 0x00000421 + // Offset: 0x00000880 Length: 0x00000421 } .module StructUnion01.dll -// MVID: {5B1ED843-D3E9-6B24-A745-038343D81E5B} +// MVID: {60B6A4C9-D3E9-6B24-A745-0383C9A4B660} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x017F0000 +// Image base: 0x06CE0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -374,15 +374,14 @@ class [mscorlib]System.Collections.IEqualityComparer comp) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 52 (0x34) + // Code size 54 (0x36) .maxstack 4 .locals init (valuetype StructUnion01/U V_0) IL_0000: ldarg.1 IL_0001: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::TypeTestGeneric(object) IL_0006: brtrue.s IL_000a - IL_0008: ldc.i4.0 - IL_0009: ret + IL_0008: br.s IL_0034 IL_000a: ldarg.1 IL_000b: unbox.any StructUnion01/U @@ -404,6 +403,9 @@ IL_0032: ldc.i4.0 IL_0033: ret + + IL_0034: ldc.i4.0 + IL_0035: ret } // end of method U::Equals .method public hidebysig virtual final @@ -435,20 +437,22 @@ instance bool Equals(object obj) cil managed { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 23 (0x17) + // Code size 25 (0x19) .maxstack 8 IL_0000: ldarg.1 IL_0001: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::TypeTestGeneric(object) IL_0006: brtrue.s IL_000a - IL_0008: ldc.i4.0 - IL_0009: ret + IL_0008: br.s IL_0017 IL_000a: ldarg.0 IL_000b: ldarg.1 IL_000c: unbox.any StructUnion01/U IL_0011: call instance bool StructUnion01/U::Equals(valuetype StructUnion01/U) IL_0016: ret + + IL_0017: ldc.i4.0 + IL_0018: ret } // end of method U::Equals .property instance int32 Tag() @@ -504,31 +508,33 @@ .method public static int32 g3(valuetype StructUnion01/U x) cil managed { - // Code size 42 (0x2a) + // Code size 44 (0x2c) .maxstack 8 IL_0000: ldarga.s x IL_0002: ldfld int32 StructUnion01/U::item1 IL_0007: ldc.i4.3 IL_0008: sub IL_0009: switch ( - IL_0022) - IL_0012: ldarga.s x - IL_0014: ldfld int32 StructUnion01/U::item1 - IL_0019: ldarga.s x - IL_001b: ldfld int32 StructUnion01/U::item2 - IL_0020: add - IL_0021: ret - - IL_0022: ldarga.s x - IL_0024: ldfld int32 StructUnion01/U::item2 - IL_0029: ret + IL_0014) + IL_0012: br.s IL_001c + + IL_0014: ldarga.s x + IL_0016: ldfld int32 StructUnion01/U::item2 + IL_001b: ret + + IL_001c: ldarga.s x + IL_001e: ldfld int32 StructUnion01/U::item1 + IL_0023: ldarga.s x + IL_0025: ldfld int32 StructUnion01/U::item2 + IL_002a: add + IL_002b: ret } // end of method StructUnion01::g3 .method public static int32 g4(valuetype StructUnion01/U x, valuetype StructUnion01/U y) 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 126 (0x7e) + // Code size 128 (0x80) .maxstack 6 .locals init (int32 V_0, int32 V_1, @@ -539,54 +545,56 @@ IL_0007: ldc.i4.3 IL_0008: sub IL_0009: switch ( - IL_003a) - IL_0012: ldarga.s y - IL_0014: ldfld int32 StructUnion01/U::item2 - IL_0019: stloc.0 - IL_001a: ldarga.s y - IL_001c: ldfld int32 StructUnion01/U::item1 - IL_0021: stloc.1 - IL_0022: ldarga.s x - IL_0024: ldfld int32 StructUnion01/U::item2 - IL_0029: stloc.2 - IL_002a: ldarga.s x - IL_002c: ldfld int32 StructUnion01/U::item1 - IL_0031: stloc.3 - IL_0032: ldloc.3 - IL_0033: ldloc.2 - IL_0034: add - IL_0035: ldloc.1 - IL_0036: add - IL_0037: ldloc.0 - IL_0038: add - IL_0039: ret - - IL_003a: ldarga.s y - IL_003c: ldfld int32 StructUnion01/U::item1 - IL_0041: ldc.i4.5 - IL_0042: sub - IL_0043: switch ( - IL_006e) - IL_004c: ldarga.s y - IL_004e: ldfld int32 StructUnion01/U::item2 - IL_0053: ldarga.s y - IL_0055: ldfld int32 StructUnion01/U::item1 - IL_005a: ldarga.s x - IL_005c: ldfld int32 StructUnion01/U::item2 - IL_0061: ldarga.s x - IL_0063: ldfld int32 StructUnion01/U::item1 - IL_0068: stloc.3 - IL_0069: stloc.2 - IL_006a: stloc.1 - IL_006b: stloc.0 - IL_006c: br.s IL_0032 - - IL_006e: ldarga.s x - IL_0070: ldfld int32 StructUnion01/U::item2 - IL_0075: ldarga.s y - IL_0077: ldfld int32 StructUnion01/U::item2 + IL_0014) + IL_0012: br.s IL_0058 + + IL_0014: ldarga.s y + IL_0016: ldfld int32 StructUnion01/U::item1 + IL_001b: ldc.i4.5 + IL_001c: sub + IL_001d: switch ( + IL_0048) + IL_0026: ldarga.s y + IL_0028: ldfld int32 StructUnion01/U::item2 + IL_002d: ldarga.s y + IL_002f: ldfld int32 StructUnion01/U::item1 + IL_0034: ldarga.s x + IL_0036: ldfld int32 StructUnion01/U::item2 + IL_003b: ldarga.s x + IL_003d: ldfld int32 StructUnion01/U::item1 + IL_0042: stloc.3 + IL_0043: stloc.2 + IL_0044: stloc.1 + IL_0045: stloc.0 + IL_0046: br.s IL_0078 + + IL_0048: ldarga.s x + IL_004a: ldfld int32 StructUnion01/U::item2 + IL_004f: ldarga.s y + IL_0051: ldfld int32 StructUnion01/U::item2 + IL_0056: add + IL_0057: ret + + IL_0058: ldarga.s y + IL_005a: ldfld int32 StructUnion01/U::item2 + IL_005f: stloc.0 + IL_0060: ldarga.s y + IL_0062: ldfld int32 StructUnion01/U::item1 + IL_0067: stloc.1 + IL_0068: ldarga.s x + IL_006a: ldfld int32 StructUnion01/U::item2 + IL_006f: stloc.2 + IL_0070: ldarga.s x + IL_0072: ldfld int32 StructUnion01/U::item1 + IL_0077: stloc.3 + IL_0078: ldloc.3 + IL_0079: ldloc.2 + IL_007a: add + IL_007b: ldloc.1 IL_007c: add - IL_007d: ret + IL_007d: ldloc.0 + IL_007e: add + IL_007f: ret } // end of method StructUnion01::g4 .method public static int32 f1(valuetype StructUnion01/U& x) cil managed @@ -615,31 +623,33 @@ .method public static int32 f3(valuetype StructUnion01/U& x) cil managed { - // Code size 38 (0x26) + // Code size 40 (0x28) .maxstack 8 IL_0000: ldarg.0 IL_0001: ldfld int32 StructUnion01/U::item1 IL_0006: ldc.i4.3 IL_0007: sub IL_0008: switch ( - IL_001f) - IL_0011: ldarg.0 - IL_0012: ldfld int32 StructUnion01/U::item1 - IL_0017: ldarg.0 - IL_0018: ldfld int32 StructUnion01/U::item2 - IL_001d: add - IL_001e: ret - - IL_001f: ldarg.0 - IL_0020: ldfld int32 StructUnion01/U::item2 - IL_0025: ret + IL_0013) + IL_0011: br.s IL_001a + + IL_0013: ldarg.0 + IL_0014: ldfld int32 StructUnion01/U::item2 + IL_0019: ret + + IL_001a: ldarg.0 + IL_001b: ldfld int32 StructUnion01/U::item1 + IL_0020: ldarg.0 + IL_0021: ldfld int32 StructUnion01/U::item2 + IL_0026: add + IL_0027: ret } // end of method StructUnion01::f3 .method public static int32 f4(valuetype StructUnion01/U& x, valuetype StructUnion01/U& y) 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 146 (0x92) + // Code size 148 (0x94) .maxstack 6 .locals init (valuetype StructUnion01/U V_0, valuetype StructUnion01/U V_1, @@ -658,54 +668,56 @@ IL_0015: ldc.i4.3 IL_0016: sub IL_0017: switch ( - IL_004c) - IL_0020: ldloca.s V_1 - IL_0022: ldfld int32 StructUnion01/U::item2 - IL_0027: stloc.2 - IL_0028: ldloca.s V_1 - IL_002a: ldfld int32 StructUnion01/U::item1 - IL_002f: stloc.3 - IL_0030: ldloca.s V_0 - IL_0032: ldfld int32 StructUnion01/U::item2 - IL_0037: stloc.s V_4 - IL_0039: ldloca.s V_0 - IL_003b: ldfld int32 StructUnion01/U::item1 - IL_0040: stloc.s V_5 - IL_0042: ldloc.s V_5 - IL_0044: ldloc.s V_4 - IL_0046: add - IL_0047: ldloc.3 - IL_0048: add - IL_0049: ldloc.2 - IL_004a: add - IL_004b: ret - - IL_004c: ldloca.s V_1 - IL_004e: ldfld int32 StructUnion01/U::item1 - IL_0053: ldc.i4.5 - IL_0054: sub - IL_0055: switch ( - IL_0082) - IL_005e: ldloca.s V_1 - IL_0060: ldfld int32 StructUnion01/U::item2 - IL_0065: ldloca.s V_1 - IL_0067: ldfld int32 StructUnion01/U::item1 - IL_006c: ldloca.s V_0 - IL_006e: ldfld int32 StructUnion01/U::item2 - IL_0073: ldloca.s V_0 - IL_0075: ldfld int32 StructUnion01/U::item1 - IL_007a: stloc.s V_5 - IL_007c: stloc.s V_4 - IL_007e: stloc.3 - IL_007f: stloc.2 - IL_0080: br.s IL_0042 - - IL_0082: ldloca.s V_0 - IL_0084: ldfld int32 StructUnion01/U::item2 - IL_0089: ldloca.s V_1 - IL_008b: ldfld int32 StructUnion01/U::item2 + IL_0022) + IL_0020: br.s IL_0068 + + IL_0022: ldloca.s V_1 + IL_0024: ldfld int32 StructUnion01/U::item1 + IL_0029: ldc.i4.5 + IL_002a: sub + IL_002b: switch ( + IL_0058) + IL_0034: ldloca.s V_1 + IL_0036: ldfld int32 StructUnion01/U::item2 + IL_003b: ldloca.s V_1 + IL_003d: ldfld int32 StructUnion01/U::item1 + IL_0042: ldloca.s V_0 + IL_0044: ldfld int32 StructUnion01/U::item2 + IL_0049: ldloca.s V_0 + IL_004b: ldfld int32 StructUnion01/U::item1 + IL_0050: stloc.s V_5 + IL_0052: stloc.s V_4 + IL_0054: stloc.3 + IL_0055: stloc.2 + IL_0056: br.s IL_008a + + IL_0058: ldloca.s V_0 + IL_005a: ldfld int32 StructUnion01/U::item2 + IL_005f: ldloca.s V_1 + IL_0061: ldfld int32 StructUnion01/U::item2 + IL_0066: add + IL_0067: ret + + IL_0068: ldloca.s V_1 + IL_006a: ldfld int32 StructUnion01/U::item2 + IL_006f: stloc.2 + IL_0070: ldloca.s V_1 + IL_0072: ldfld int32 StructUnion01/U::item1 + IL_0077: stloc.3 + IL_0078: ldloca.s V_0 + IL_007a: ldfld int32 StructUnion01/U::item2 + IL_007f: stloc.s V_4 + IL_0081: ldloca.s V_0 + IL_0083: ldfld int32 StructUnion01/U::item1 + IL_0088: stloc.s V_5 + IL_008a: ldloc.s V_5 + IL_008c: ldloc.s V_4 + IL_008e: add + IL_008f: ldloc.3 IL_0090: add - IL_0091: ret + IL_0091: ldloc.2 + IL_0092: add + IL_0093: ret } // end of method StructUnion01::f4 } // end of class StructUnion01 diff --git a/tests/fsharpqa/testenv/bin/KnownFailRewriter.fsx b/tests/fsharpqa/testenv/bin/KnownFailRewriter.fsx index df8ec8f2ad8..e2a5ebfb331 100644 --- a/tests/fsharpqa/testenv/bin/KnownFailRewriter.fsx +++ b/tests/fsharpqa/testenv/bin/KnownFailRewriter.fsx @@ -102,7 +102,7 @@ module FSharpInfo = let IsFSharpCompilerDebug () = let o = Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FSharp\4.1\Runtime\v4.0", null, null) if o <> null then - let path = System.IO.Path.Combine( o :?> string, "FSharp.Compiler.Private.dll") + let path = System.IO.Path.Combine( o :?> string, "FSharp.Compiler.Service.dll") let asm = System.Reflection.Assembly.LoadFrom(path) match asm.GetCustomAttributes(typeof, false) with diff --git a/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj b/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj index f89e94f3e05..eb1bde254d8 100644 --- a/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj +++ b/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj @@ -8,8 +8,10 @@ true false $(RepoRoot)tests\fsharpqa\testenv\bin + $(NoWarn);44 AnyCPU true + true @@ -19,7 +21,7 @@ - + diff --git a/tests/fsharpqa/testenv/src/HostedCompilerServer/Program.fs b/tests/fsharpqa/testenv/src/HostedCompilerServer/Program.fs index 858382b9f26..775e3897901 100644 --- a/tests/fsharpqa/testenv/src/HostedCompilerServer/Program.fs +++ b/tests/fsharpqa/testenv/src/HostedCompilerServer/Program.fs @@ -1,14 +1,11 @@ namespace MLang.Test open System -open System.IO open System.Net open System.Net.Sockets open System.Text -open System.Threading -open System.Linq -open FSharp.Compiler -open Legacy.FSharp.Compiler.Hosted +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.CodeAnalysis.Hosted [] module Log = diff --git a/tests/fsharpqa/testenv/src/PEVerify/PEVerify.csproj b/tests/fsharpqa/testenv/src/PEVerify/PEVerify.csproj index 2a136927b32..affe87d5293 100644 --- a/tests/fsharpqa/testenv/src/PEVerify/PEVerify.csproj +++ b/tests/fsharpqa/testenv/src/PEVerify/PEVerify.csproj @@ -2,8 +2,8 @@ Exe - net472;netcoreapp3.1 - netcoreapp3.1 + net472;net5.0 + net5.0 $(NoWarn);1591 diff --git a/tests/service/AssemblyContentProviderTests.fs b/tests/service/AssemblyContentProviderTests.fs index c80842d9f87..e3fe4d556a6 100644 --- a/tests/service/AssemblyContentProviderTests.fs +++ b/tests/service/AssemblyContentProviderTests.fs @@ -11,7 +11,8 @@ open System open System.IO open System.Text open NUnit.Framework -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices let private filePath = "C:\\test.fs" @@ -26,7 +27,6 @@ let private projectOptions : FSharpProjectOptions = LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None - ExtraProjectInfo = None Stamp = None } let private checker = FSharpChecker.Create() @@ -51,7 +51,7 @@ let (=>) (source: string) (expected: string list) = | FSharpCheckFileAnswer.Succeeded(checkFileResults) -> checkFileResults let actual = - AssemblyContentProvider.getAssemblySignatureContent AssemblyContentType.Full checkFileResults.PartialAssemblySignature + AssemblyContent.GetAssemblySignatureContent AssemblyContentType.Full checkFileResults.PartialAssemblySignature |> List.map (fun x -> x.CleanedIdents |> String.concat ".") |> List.sort diff --git a/tests/service/AssemblyReaderShim.fs b/tests/service/AssemblyReaderShim.fs index 71ad67809db..8e8d18efe2a 100644 --- a/tests/service/AssemblyReaderShim.fs +++ b/tests/service/AssemblyReaderShim.fs @@ -8,6 +8,7 @@ module FSharp.Compiler.Service.Tests.AssemblyReaderShim #endif open FsUnit +open FSharp.Compiler.Text open FSharp.Compiler.AbstractIL.ILBinaryReader open NUnit.Framework @@ -28,5 +29,5 @@ let x = 123 """ let fileName, options = Common.mkTestFileAndOptions source [| |] - Common.checker.ParseAndCheckFileInProject(fileName, 0, FSharp.Compiler.Text.SourceText.ofString source, options) |> Async.RunSynchronously |> ignore + Common.checker.ParseAndCheckFileInProject(fileName, 0, SourceText.ofString source, options) |> Async.RunSynchronously |> ignore gotRequest |> should be True diff --git a/tests/service/CSharpProjectAnalysis.fs b/tests/service/CSharpProjectAnalysis.fs index 10fd567ad39..27d01a80128 100644 --- a/tests/service/CSharpProjectAnalysis.fs +++ b/tests/service/CSharpProjectAnalysis.fs @@ -9,32 +9,34 @@ module FSharp.Compiler.Service.Tests.CSharpProjectAnalysis #endif - open NUnit.Framework open FsUnit open System.IO -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.IO open FSharp.Compiler.Service.Tests.Common +open FSharp.Compiler.Symbols -let internal getProjectReferences (content, dllFiles, libDirs, otherFlags) = +let internal getProjectReferences (content: string, dllFiles, libDirs, otherFlags) = let otherFlags = defaultArg otherFlags [] let libDirs = defaultArg libDirs [] let base1 = Path.GetTempFileName() let dllName = Path.ChangeExtension(base1, ".dll") let fileName1 = Path.ChangeExtension(base1, ".fs") let projFileName = Path.ChangeExtension(base1, ".fsproj") - File.WriteAllText(fileName1, content) + FileSystem.OpenFileForWriteShim(fileName1).Write(content) let options = checker.GetProjectOptionsFromCommandLineArgs(projFileName, - [| yield "--debug:full" - yield "--define:DEBUG" - yield "--optimize-" + [| yield "--debug:full" + yield "--define:DEBUG" + yield "--optimize-" yield "--out:" + dllName - yield "--doc:test.xml" - yield "--warn:3" - yield "--fullpaths" - yield "--flaterrors" - yield "--target:library" + yield "--doc:test.xml" + yield "--warn:3" + yield "--fullpaths" + yield "--flaterrors" + yield "--target:library" for dllFile in dllFiles do yield "-r:"+dllFile for libDir in libDirs do @@ -44,8 +46,8 @@ let internal getProjectReferences (content, dllFiles, libDirs, otherFlags) = let results = checker.ParseAndCheckProject(options) |> Async.RunSynchronously if results.HasCriticalErrors then let builder = new System.Text.StringBuilder() - for err in results.Errors do - builder.AppendLine(sprintf "**** %s: %s" (if err.Severity = FSharpErrorSeverity.Error then "error" else "warning") err.Message) + for err in results.Diagnostics do + builder.AppendLine(sprintf "**** %s: %s" (if err.Severity = FSharpDiagnosticSeverity.Error then "error" else "warning") err.Message) |> ignore failwith (builder.ToString()) let assemblies = @@ -55,19 +57,17 @@ let internal getProjectReferences (content, dllFiles, libDirs, otherFlags) = results, assemblies [] -#if NETCOREAPP [] -#endif -let ``Test that csharp references are recognized as such`` () = +let ``Test that csharp references are recognized as such`` () = let csharpAssembly = PathRelativeToTestAssembly "CSharp_Analysis.dll" let _, table = getProjectReferences("""module M""", [csharpAssembly], None, None) let assembly = table.["CSharp_Analysis"] - let search = assembly.Contents.Entities |> Seq.tryFind (fun e -> e.DisplayName = "CSharpClass") + let search = assembly.Contents.Entities |> Seq.tryFind (fun e -> e.DisplayName = "CSharpClass") Assert.True search.IsSome let found = search.Value // this is no F# thing found.IsFSharp |> shouldEqual false - + // Check that we have members let members = found.MembersFunctionsAndValues |> Seq.map (fun e -> e.CompiledName, e) |> dict members.ContainsKey ".ctor" |> shouldEqual true @@ -93,10 +93,8 @@ let ``Test that csharp references are recognized as such`` () = members.["InterfaceEvent"].XmlDocSig |> shouldEqual "E:FSharp.Compiler.Service.Tests.CSharpClass.InterfaceEvent" [] -#if NETCOREAPP [] -#endif -let ``Test that symbols of csharp inner classes/enums are reported`` () = +let ``Test that symbols of csharp inner classes/enums are reported`` () = let csharpAssembly = PathRelativeToTestAssembly "CSharp_Analysis.dll" let content = """ module NestedEnumClass @@ -109,15 +107,13 @@ let _ = CSharpOuterClass.InnerClass.StaticMember() let results, _ = getProjectReferences(content, [csharpAssembly], None, None) results.GetAllUsesOfAllSymbols() |> Array.map (fun su -> su.Symbol.ToString()) - |> shouldEqual + |> shouldEqual [|"FSharp"; "Compiler"; "Service"; "Tests"; "FSharp"; "InnerEnum"; "CSharpOuterClass"; "field Case1"; "InnerClass"; "CSharpOuterClass"; "member StaticMember"; "NestedEnumClass"|] [] -#if NETCOREAPP [] -#endif let ``Ctor test`` () = let csharpAssembly = PathRelativeToTestAssembly "CSharp_Analysis.dll" let content = """ @@ -131,7 +127,7 @@ let _ = CSharpClass(0) results.GetAllUsesOfAllSymbols() |> Seq.map (fun su -> su.Symbol) |> Seq.find (function :? FSharpMemberOrFunctionOrValue as mfv -> mfv.IsConstructor | _ -> false) - match (ctor :?> FSharpMemberOrFunctionOrValue).DeclaringEntity with + match (ctor :?> FSharpMemberOrFunctionOrValue).DeclaringEntity with | Some e -> let members = e.MembersFunctionsAndValues Seq.exists (fun (mfv : FSharpMemberOrFunctionOrValue) -> mfv.IsConstructor) members |> should be True @@ -149,9 +145,7 @@ let getEntitiesUses source = |> List.ofSeq [] -#if NETCOREAPP [] -#endif let ``Different types with the same short name equality check`` () = let source = """ module CtorTest @@ -169,9 +163,7 @@ let (s2: FSharp.Compiler.Service.Tests.String) = null | _ -> sprintf "Expecting two symbols, got %A" stringSymbols |> failwith [] -#if NETCOREAPP [] -#endif let ``Different namespaces with the same short name equality check`` () = let source = """ module CtorTest diff --git a/tests/service/Common.fs b/tests/service/Common.fs index 6e6d8e46269..12f12e1c1eb 100644 --- a/tests/service/Common.fs +++ b/tests/service/Common.fs @@ -5,10 +5,15 @@ open System open System.Diagnostics open System.IO open System.Collections.Generic -open FSharp.Compiler -open FSharp.Compiler.Range -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.SyntaxTree +open System.Collections.Immutable +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.IO +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.Symbols +open FSharp.Compiler.Symbols.FSharpExprPatterns +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Text open FsUnit open NUnit.Framework @@ -48,47 +53,48 @@ let readRefs (folder : string) (projectFile: string) = // Create one global interactive checker instance let checker = FSharpChecker.Create() -type TempFile(ext, contents) = +type TempFile(ext, contents: string) = let tmpFile = Path.ChangeExtension(System.IO.Path.GetTempFileName() , ext) - do File.WriteAllText(tmpFile, contents) - interface System.IDisposable with - member x.Dispose() = try File.Delete tmpFile with _ -> () + do FileSystem.OpenFileForWriteShim(tmpFile).Write(contents) + + interface System.IDisposable with + member x.Dispose() = try FileSystem.FileDeleteShim tmpFile with _ -> () member x.Name = tmpFile #nowarn "57" -let getBackgroundParseResultsForScriptText (input) = +let getBackgroundParseResultsForScriptText (input: string) = use file = new TempFile("fsx", input) - let checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(file.Name, FSharp.Compiler.Text.SourceText.ofString input) |> Async.RunSynchronously + let checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(file.Name, SourceText.ofString input) |> Async.RunSynchronously checker.GetBackgroundParseResultsForFileInProject(file.Name, checkOptions) |> Async.RunSynchronously -let getBackgroundCheckResultsForScriptText (input) = +let getBackgroundCheckResultsForScriptText (input: string) = use file = new TempFile("fsx", input) - let checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(file.Name, FSharp.Compiler.Text.SourceText.ofString input) |> Async.RunSynchronously + let checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(file.Name, SourceText.ofString input) |> Async.RunSynchronously checker.GetBackgroundCheckResultsForFileInProject(file.Name, checkOptions) |> Async.RunSynchronously -let sysLib nm = +let sysLib nm = #if !NETCOREAPP - if System.Environment.OSVersion.Platform = System.PlatformID.Win32NT then // file references only valid on Windows + if System.Environment.OSVersion.Platform = System.PlatformID.Win32NT then // file references only valid on Windows let programFilesx86Folder = System.Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") programFilesx86Folder + @"\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\" + nm + ".dll" else #endif let sysDir = System.AppContext.BaseDirectory let (++) a b = System.IO.Path.Combine(a,b) - sysDir ++ nm + ".dll" + sysDir ++ nm + ".dll" [] -module Helpers = +module Helpers = type DummyType = A | B - let PathRelativeToTestAssembly p = Path.Combine(Path.GetDirectoryName(Uri(typeof.Assembly.CodeBase).LocalPath), p) + let PathRelativeToTestAssembly p = Path.Combine(Path.GetDirectoryName(Uri(typeof.Assembly.Location).LocalPath), p) -let fsCoreDefaultReference() = +let fsCoreDefaultReference() = PathRelativeToTestAssembly "FSharp.Core.dll" -let mkStandardProjectReferences () = +let mkStandardProjectReferences () = #if NETCOREAPP let file = "Sample_NETCoreSDK_FSharp_Library_netstandard2_0.fsproj" let projDir = Path.Combine(__SOURCE_DIRECTORY__, "../projects/Sample_NETCoreSDK_FSharp_Library_netstandard2_0") @@ -99,26 +105,26 @@ let mkStandardProjectReferences () = yield sysLib "System.Core" yield sysLib "System.Numerics" yield fsCoreDefaultReference() ] -#endif - -let mkProjectCommandLineArgsSilent (dllName, fileNames) = - let args = - [| yield "--simpleresolution" - yield "--noframework" - yield "--debug:full" - yield "--define:DEBUG" +#endif + +let mkProjectCommandLineArgsSilent (dllName, fileNames) = + let args = + [| yield "--simpleresolution" + yield "--noframework" + yield "--debug:full" + yield "--define:DEBUG" #if NETCOREAPP - yield "--targetprofile:netcore" - yield "--langversion:preview" + yield "--targetprofile:netcore" + yield "--langversion:preview" #endif - yield "--optimize-" + yield "--optimize-" yield "--out:" + dllName - yield "--doc:test.xml" - yield "--warn:3" - yield "--fullpaths" - yield "--flaterrors" - yield "--target:library" - for x in fileNames do + yield "--doc:test.xml" + yield "--warn:3" + yield "--fullpaths" + yield "--flaterrors" + yield "--target:library" + for x in fileNames do yield x let references = mkStandardProjectReferences () for r in references do @@ -126,26 +132,26 @@ let mkProjectCommandLineArgsSilent (dllName, fileNames) = |] args -let mkProjectCommandLineArgs (dllName, fileNames) = +let mkProjectCommandLineArgs (dllName, fileNames) = let args = mkProjectCommandLineArgsSilent (dllName, fileNames) printfn "dllName = %A, args = %A" dllName args args #if NETCOREAPP -let mkProjectCommandLineArgsForScript (dllName, fileNames) = - [| yield "--simpleresolution" - yield "--noframework" - yield "--debug:full" - yield "--define:DEBUG" - yield "--targetprofile:netcore" - yield "--optimize-" +let mkProjectCommandLineArgsForScript (dllName, fileNames) = + [| yield "--simpleresolution" + yield "--noframework" + yield "--debug:full" + yield "--define:DEBUG" + yield "--targetprofile:netcore" + yield "--optimize-" yield "--out:" + dllName - yield "--doc:test.xml" - yield "--warn:3" - yield "--fullpaths" - yield "--flaterrors" - yield "--target:library" - for x in fileNames do + yield "--doc:test.xml" + yield "--warn:3" + yield "--fullpaths" + yield "--flaterrors" + yield "--target:library" + for x in fileNames do yield x let references = mkStandardProjectReferences () for r in references do @@ -159,21 +165,21 @@ let mkTestFileAndOptions source additionalArgs = let dllName = Path.ChangeExtension(project, ".dll") let projFileName = Path.ChangeExtension(project, ".fsproj") let fileSource1 = "module M" - File.WriteAllText(fileName, fileSource1) + FileSystem.OpenFileForWriteShim(fileName).Write(fileSource1) let args = Array.append (mkProjectCommandLineArgs (dllName, [fileName])) additionalArgs let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) fileName, options let parseAndCheckFile fileName source options = - match checker.ParseAndCheckFileInProject(fileName, 0, FSharp.Compiler.Text.SourceText.ofString source, options) |> Async.RunSynchronously with + match checker.ParseAndCheckFileInProject(fileName, 0, SourceText.ofString source, options) |> Async.RunSynchronously with | parseResults, FSharpCheckFileAnswer.Succeeded(checkResults) -> parseResults, checkResults | _ -> failwithf "Parsing aborted unexpectedly..." -let parseAndCheckScriptWithOptions (file:string, input, opts) = +let parseAndCheckScriptWithOptions (file:string, input, opts) = #if NETCOREAPP - let projectOptions = + let projectOptions = let path = Path.Combine(Path.GetTempPath(), "tests", Process.GetCurrentProcess().Id.ToString() + "--"+ Guid.NewGuid().ToString()) try if not (Directory.Exists(path)) then @@ -190,14 +196,14 @@ let parseAndCheckScriptWithOptions (file:string, input, opts) = if Directory.Exists(path) then Directory.Delete(path, true) -#else - let projectOptions, _diagnostics = checker.GetProjectOptionsFromScript(file, FSharp.Compiler.Text.SourceText.ofString input) |> Async.RunSynchronously +#else + let projectOptions, _diagnostics = checker.GetProjectOptionsFromScript(file, SourceText.ofString input) |> Async.RunSynchronously //printfn "projectOptions = %A" projectOptions #endif let projectOptions = { projectOptions with OtherOptions = Array.append opts projectOptions.OtherOptions } - let parseResult, typedRes = checker.ParseAndCheckFileInProject(file, 0, FSharp.Compiler.Text.SourceText.ofString input, projectOptions) |> Async.RunSynchronously - + let parseResult, typedRes = checker.ParseAndCheckFileInProject(file, 0, SourceText.ofString input, projectOptions) |> Async.RunSynchronously + // if parseResult.Errors.Length > 0 then // printfn "---> Parse Input = %A" input // printfn "---> Parse Error = %A" parseResult.Errors @@ -207,15 +213,16 @@ let parseAndCheckScriptWithOptions (file:string, input, opts) = | res -> failwithf "Parsing did not finish... (%A)" res let parseAndCheckScript (file, input) = parseAndCheckScriptWithOptions (file, input, [| |]) +let parseAndCheckScriptPreview (file, input) = parseAndCheckScriptWithOptions (file, input, [| "--langversion:preview" |]) let parseSourceCode (name: string, code: string) = let location = Path.Combine(Path.GetTempPath(),"test"+string(hash (name, code))) try Directory.CreateDirectory(location) |> ignore with _ -> () - let filePath = Path.Combine(location, name + ".fs") + let filePath = Path.Combine(location, name) let dllPath = Path.Combine(location, name + ".dll") let args = mkProjectCommandLineArgs(dllPath, [filePath]) let options, errors = checker.GetParsingOptionsFromCommandLineArgs(List.ofArray args) - let parseResults = checker.ParseFile(filePath, FSharp.Compiler.Text.SourceText.ofString code, options) |> Async.RunSynchronously + let parseResults = checker.ParseFile(filePath, SourceText.ofString code, options) |> Async.RunSynchronously parseResults.ParseTree let matchBraces (name: string, code: string) = @@ -225,36 +232,35 @@ let matchBraces (name: string, code: string) = let dllPath = Path.Combine(location, name + ".dll") let args = mkProjectCommandLineArgs(dllPath, [filePath]) let options, errors = checker.GetParsingOptionsFromCommandLineArgs(List.ofArray args) - let braces = checker.MatchBraces(filePath, FSharp.Compiler.Text.SourceText.ofString code, options) |> Async.RunSynchronously + let braces = checker.MatchBraces(filePath, SourceText.ofString code, options) |> Async.RunSynchronously braces -let getSingleModuleLikeDecl (input: ParsedInput option) = +let getSingleModuleLikeDecl (input: ParsedInput) = match input with - | Some (ParsedInput.ImplFile (ParsedImplFileInput (modules = [ decl ]))) -> decl + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ decl ])) -> decl | _ -> failwith "Could not get module decls" - -let parseSourceCodeAndGetModule (source: string) = - parseSourceCode ("test", source) |> getSingleModuleLikeDecl +let parseSourceCodeAndGetModule (source: string) = + parseSourceCode ("test.fsx", source) |> getSingleModuleLikeDecl -/// Extract range info -let tups (m:Range.range) = (m.StartLine, m.StartColumn), (m.EndLine, m.EndColumn) +/// Extract range info +let tups (m: range) = (m.StartLine, m.StartColumn), (m.EndLine, m.EndColumn) /// Extract range info and convert to zero-based line - please don't use this one any more -let tupsZ (m:Range.range) = (m.StartLine-1, m.StartColumn), (m.EndLine-1, m.EndColumn) +let tupsZ (m: range) = (m.StartLine-1, m.StartColumn), (m.EndLine-1, m.EndColumn) -let attribsOfSymbolUse (s:FSharpSymbolUse) = - [ if s.IsFromDefinition then yield "defn" +let attribsOfSymbolUse (s:FSharpSymbolUse) = + [ if s.IsFromDefinition then yield "defn" if s.IsFromType then yield "type" if s.IsFromAttribute then yield "attribute" if s.IsFromDispatchSlotImplementation then yield "override" - if s.IsFromPattern then yield "pattern" - if s.IsFromComputationExpression then yield "compexpr" ] + if s.IsFromPattern then yield "pattern" + if s.IsFromComputationExpression then yield "compexpr" ] -let attribsOfSymbol (s:FSharpSymbol) = - [ match s with - | :? FSharpField as v -> +let attribsOfSymbol (s:FSharpSymbol) = + [ match s with + | :? FSharpField as v -> yield "field" if v.IsCompilerGenerated then yield "compgen" if v.IsDefaultValue then yield "default" @@ -262,12 +268,12 @@ let attribsOfSymbol (s:FSharpSymbol) = if v.IsVolatile then yield "volatile" if v.IsStatic then yield "static" if v.IsLiteral then yield sprintf "%A" v.LiteralValue.Value - if v.IsAnonRecordField then + if v.IsAnonRecordField then let info, tys, i = v.AnonRecordFieldDetails yield "anon(" + string i + ", [" + info.Assembly.QualifiedName + "/" + String.concat "+" info.EnclosingCompiledTypeNames + "/" + info.CompiledName + "]" + String.concat "," info.SortedFieldNames + ")" - | :? FSharpEntity as v -> + | :? FSharpEntity as v -> v.TryFullName |> ignore // check there is no failure here if v.IsNamespace then yield "namespace" if v.IsFSharpModule then yield "module" @@ -290,7 +296,7 @@ let attribsOfSymbol (s:FSharpSymbol) = if v.IsUnresolved then yield "unresolved" if v.IsValueType then yield "valuetype" - | :? FSharpMemberOrFunctionOrValue as v -> + | :? FSharpMemberOrFunctionOrValue as v -> if v.IsActivePattern then yield "apat" if v.IsDispatchSlot then yield "slot" if v.IsModuleValueOrMember && not v.IsMember then yield "val" @@ -306,7 +312,7 @@ let attribsOfSymbol (s:FSharpSymbol) = if v.IsTypeFunction then yield "typefun" if v.IsCompilerGenerated then yield "compgen" if v.IsImplicitConstructor then yield "ctor" - if v.IsMutable then yield "mutable" + if v.IsMutable then yield "mutable" if v.IsOverrideOrExplicitInterfaceImplementation then yield "overridemem" if v.IsInstanceMember && not v.IsInstanceMemberInCompiledCode && not v.IsExtensionMember then yield "funky" if v.IsExplicitInterfaceImplementation then yield "intfmem" @@ -315,25 +321,25 @@ let attribsOfSymbol (s:FSharpSymbol) = // if v.LiteralValue.IsSome then yield "literal" | _ -> () ] -let rec allSymbolsInEntities compGen (entities: IList) = - [ for e in entities do - yield (e :> FSharpSymbol) - for gp in e.GenericParameters do - if compGen || not gp.IsCompilerGenerated then +let rec allSymbolsInEntities compGen (entities: IList) = + [ for e in entities do + yield (e :> FSharpSymbol) + for gp in e.GenericParameters do + if compGen || not gp.IsCompilerGenerated then yield (gp :> FSharpSymbol) for x in e.MembersFunctionsAndValues do - if compGen || not x.IsCompilerGenerated then + if compGen || not x.IsCompilerGenerated then yield (x :> FSharpSymbol) - for gp in x.GenericParameters do - if compGen || not gp.IsCompilerGenerated then + for gp in x.GenericParameters do + if compGen || not gp.IsCompilerGenerated then yield (gp :> FSharpSymbol) for x in e.UnionCases do yield (x :> FSharpSymbol) - for f in x.UnionCaseFields do - if compGen || not f.IsCompilerGenerated then + for f in x.Fields do + if compGen || not f.IsCompilerGenerated then yield (f :> FSharpSymbol) for x in e.FSharpFields do - if compGen || not x.IsCompilerGenerated then + if compGen || not x.IsCompilerGenerated then yield (x :> FSharpSymbol) yield! allSymbolsInEntities compGen e.NestedEntities ] @@ -341,12 +347,17 @@ let rec allSymbolsInEntities compGen (entities: IList) = let getParseResults (source: string) = parseSourceCode("/home/user/Test.fsx", source) +let getParseResultsOfSignatureFile (source: string) = + parseSourceCode("/home/user/Test.fsi", source) + let getParseAndCheckResults (source: string) = parseAndCheckScript("/home/user/Test.fsx", source) +let getParseAndCheckResultsPreview (source: string) = + parseAndCheckScriptPreview("/home/user/Test.fsx", source) let inline dumpErrors results = - (^TResults: (member Errors: FSharpErrorInfo[]) results) + (^TResults: (member Diagnostics: FSharpDiagnostic[]) results) |> Array.map (fun e -> let message = e.Message.Split('\n') @@ -355,12 +366,11 @@ let inline dumpErrors results = sprintf "%s: %s" (e.Range.ToShortString()) message) |> List.ofArray - let getSymbolUses (results: FSharpCheckFileResults) = results.GetAllUsesOfAllSymbolsInFile() let getSymbolUsesFromSource (source: string) = - let _, typeCheckResults = getParseAndCheckResults source + let _, typeCheckResults = getParseAndCheckResults source typeCheckResults.GetAllUsesOfAllSymbolsInFile() let getSymbols (symbolUses: seq) = @@ -417,6 +427,8 @@ let findSymbolByName (name: string) (results: FSharpCheckFileResults) = let symbolUse = findSymbolUseByName name results symbolUse.Symbol +let taggedTextToString (tts: TaggedText[]) = + tts |> Array.map (fun tt -> tt.Text) |> String.concat "" let getRangeCoords (r: range) = (r.StartLine, r.StartColumn), (r.EndLine, r.EndColumn) @@ -428,3 +440,10 @@ let coreLibAssemblyName = "mscorlib" #endif +let assertRange + (expectedStartLine: int, expectedStartColumn: int) + (expectedEndLine: int, expectedEndColumn: int) + (actualRange: range) + : unit = + Assert.AreEqual(Position.mkPos expectedStartLine expectedStartColumn, actualRange.Start) + Assert.AreEqual(Position.mkPos expectedEndLine expectedEndColumn, actualRange.End) diff --git a/tests/service/EditorTests.fs b/tests/service/EditorTests.fs index 0c43499b396..ab3a1f8e492 100644 --- a/tests/service/EditorTests.fs +++ b/tests/service/EditorTests.fs @@ -5,17 +5,17 @@ // // Technique 2: // -// Enable some tests in the #if EXE section at the end of the file, +// Enable some tests in the #if EXE section at the end of the file, // then compile this file as an EXE that has InternalsVisibleTo access into the // appropriate DLLs. This can be the quickest way to get turnaround on updating the tests // and capturing large amounts of structured output. (* cd Debug\net40\bin - .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.LanguageService.Compiler.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\tests\service\EditorTests.fs - .\VisualFSharp.UnitTests.exe + .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.LanguageService.Compiler.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\tests\service\EditorTests.fs + .\VisualFSharp.UnitTests.exe *) -// Technique 3: -// +// Technique 3: +// // Use F# Interactive. This only works for FSHarp.Compiler.Service.dll which has a public API #if INTERACTIVE @@ -30,11 +30,16 @@ module Tests.Service.Editor open NUnit.Framework open FsUnit open System -open FSharp.Compiler -open FSharp.Compiler.SourceCodeServices +open System.IO +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.IO open FSharp.Compiler.Service.Tests.Common +open FSharp.Compiler.Symbols +open FSharp.Compiler.Text +open FSharp.Compiler.Tokenization -let stringMethods = +let stringMethods = ["Chars"; "Clone"; "CompareTo"; "Contains"; "CopyTo"; "EndsWith"; "Equals"; "GetEnumerator"; "GetHashCode"; "GetReverseIndex"; "GetType"; "GetTypeCode"; "IndexOf"; "IndexOfAny"; "Insert"; "IsNormalized"; "LastIndexOf"; "LastIndexOfAny"; @@ -42,13 +47,13 @@ let stringMethods = "StartsWith"; "Substring"; "ToCharArray"; "ToLower"; "ToLowerInvariant"; "ToString"; "ToUpper"; "ToUpperInvariant"; "Trim"; "TrimEnd"; "TrimStart"] -let input = +let input = """ open System - - let foo() = + + let foo() = let msg = String.Concat("Hello"," ","world") - if true then + if true then printfn "%s" msg. """ @@ -56,34 +61,34 @@ let input = #if COMPILED [] #endif -let ``Intro test`` () = +let ``Intro test`` () = // Split the input & define file name let inputLines = input.Split('\n') let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let identToken = FSharpTokenTag.IDENT // let projectOptions = checker.GetProjectOptionsFromScript(file, input) |> Async.RunSynchronously // So we check that the messages are the same - for msg in typeCheckResults.Errors do + for msg in typeCheckResults.Diagnostics do printfn "Got an error, hopefully with the right text: %A" msg - printfn "typeCheckResults.Errors.Length = %d" typeCheckResults.Errors.Length + printfn "typeCheckResults.Diagnostics.Length = %d" typeCheckResults.Diagnostics.Length // We only expect one reported error. However, // on Unix, using filenames like /home/user/Test.fsx gives a second copy of all parse errors due to the // way the load closure for scripts is generated. So this returns two identical errors - (match typeCheckResults.Errors.Length with 1 | 2 -> true | _ -> false) |> shouldEqual true + (match typeCheckResults.Diagnostics.Length with 1 | 2 -> true | _ -> false) |> shouldEqual true // So we check that the messages are the same - for msg in typeCheckResults.Errors do + for msg in typeCheckResults.Diagnostics do printfn "Good! got an error, hopefully with the right text: %A" msg msg.Message.Contains("Missing qualification after '.'") |> shouldEqual true // Get tool tip at the specified location - let tip = typeCheckResults.GetToolTipText(4, 7, inputLines.[1], ["foo"], identToken) - // (sprintf "%A" tip).Replace("\n","") |> shouldEqual """FSharpToolTipText [Single ("val foo : unit -> unitFull name: Test.foo",None)]""" + let tip = typeCheckResults.GetToolTip(4, 7, inputLines.[1], ["foo"], identToken) + // (sprintf "%A" tip).Replace("\n","") |> shouldEqual """ToolTipText [Single ("val foo : unit -> unitFull name: Test.foo",None)]""" // Get declarations (autocomplete) for a location let partialName = { QualifyingIdents = []; PartialIdent = "msg"; EndColumn = 22; LastDotPos = None } let decls = typeCheckResults.GetDeclarationListInfo(Some parseResult, 7, inputLines.[6], partialName, (fun _ -> [])) @@ -95,7 +100,7 @@ let ``Intro test`` () = // Print concatenated parameter lists [ for mi in methods.Methods do - yield methods.MethodName , [ for p in mi.Parameters do yield p.Display ] ] + yield methods.MethodName , [ for p in mi.Parameters do yield p.Display |> taggedTextToString ] ] |> shouldEqual [("Concat", ["[] args: obj []"]); ("Concat", ["[] values: string []"]); @@ -107,30 +112,30 @@ let ``Intro test`` () = ("Concat", ["str0: string"; "str1: string"; "str2: string"]); #if !NETCOREAPP // TODO: check why this is needed for .NET Core testing of FSharp.Compiler.Service ("Concat", ["arg0: obj"; "arg1: obj"; "arg2: obj"; "arg3: obj"]); -#endif +#endif ("Concat", ["str0: string"; "str1: string"; "str2: string"; "str3: string"])] // TODO: check if this can be enabled in .NET Core testing of FSharp.Compiler.Service -#if !INTERACTIVE && !NETCOREAPP // InternalsVisibleTo on IncrementalBuild.LocallyInjectCancellationFault not working for some reason? -[] -let ``Basic cancellation test`` () = - try - printfn "locally injecting a cancellation condition in incremental building" - use _holder = IncrementalBuild.LocallyInjectCancellationFault() - - // Split the input & define file name - let inputLines = input.Split('\n') - let file = "/home/user/Test.fsx" - async { - checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() - let! checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(file, FSharp.Compiler.Text.SourceText.ofString input) - let! parseResult, typedRes = checker.ParseAndCheckFileInProject(file, 0, FSharp.Compiler.Text.SourceText.ofString input, checkOptions) - return parseResult, typedRes - } |> Async.RunSynchronously - |> ignore - Assert.Fail("expected a cancellation") - with :? OperationCanceledException -> () +#if !INTERACTIVE // InternalsVisibleTo on IncrementalBuild.LocallyInjectCancellationFault not working for some reason? +//[] +//let ``Basic cancellation test`` () = +// try +// printfn "locally injecting a cancellation condition in incremental building" +// use _holder = IncrementalBuild.LocallyInjectCancellationFault() +// +// // Split the input & define file name +// let inputLines = input.Split('\n') +// let file = "/home/user/Test.fsx" +// async { +// checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() +// let! checkOptions, _diagnostics = checker.GetProjectOptionsFromScript(file, SourceText.ofString input) +// let! parseResult, typedRes = checker.ParseAndCheckFileInProject(file, 0, SourceText.ofString input, checkOptions) +// return parseResult, typedRes +// } |> Async.RunSynchronously +// |> ignore +// Assert.Fail("expected a cancellation") +// with :? OperationCanceledException -> () #endif [] @@ -139,8 +144,8 @@ let ``GetMethodsAsSymbols should return all overloads of a method as FSharpSymbo let extractCurriedParams (symbol:FSharpSymbolUse) = match symbol.Symbol with | :? FSharpMemberOrFunctionOrValue as mvf -> - [for pg in mvf.CurriedParameterGroups do - for (p:FSharpParameter) in pg do + [for pg in mvf.CurriedParameterGroups do + for (p:FSharpParameter) in pg do yield p.DisplayName, p.Type.Format (symbol.DisplayContext)] | _ -> [] @@ -171,37 +176,37 @@ let ``GetMethodsAsSymbols should return all overloads of a method as FSharpSymbo | None -> failwith "No symbols returned" -let input2 = +let input2 = """ [] -let foo(x, y) = +let foo(x, y) = let msg = String.Concat("Hello"," ","world") - if true then - printfn "x = %d, y = %d" x y + if true then + printfn "x = %d, y = %d" x y printfn "%s" msg -type C() = +type C() = member x.P = 1 """ [] -let ``Symbols basic test`` () = +let ``Symbols basic test`` () = let file = "/home/user/Test.fsx" let untyped2, typeCheckResults2 = parseAndCheckScript(file, input2) let partialAssemblySignature = typeCheckResults2.PartialAssemblySignature - + partialAssemblySignature.Entities.Count |> shouldEqual 1 // one entity [] -let ``Symbols many tests`` () = +let ``Symbols many tests`` () = let file = "/home/user/Test.fsx" let untyped2, typeCheckResults2 = parseAndCheckScript(file, input2) let partialAssemblySignature = typeCheckResults2.PartialAssemblySignature - + partialAssemblySignature.Entities.Count |> shouldEqual 1 // one entity let moduleEntity = partialAssemblySignature.Entities.[0] @@ -239,7 +244,7 @@ let ``Symbols many tests`` () = fnVal.IsTypeFunction |> shouldEqual false fnVal.FullType.IsFunctionType |> shouldEqual true // int * int -> unit - fnVal.FullType.GenericArguments.[0].IsTupleType |> shouldEqual true // int * int + fnVal.FullType.GenericArguments.[0].IsTupleType |> shouldEqual true // int * int let argTy1 = fnVal.FullType.GenericArguments.[0].GenericArguments.[0] argTy1.TypeDefinition.DisplayName |> shouldEqual "int" // int @@ -249,18 +254,18 @@ let ``Symbols many tests`` () = let argTy1b = argTy1.TypeDefinition.AbbreviatedType argTy1b.TypeDefinition.Namespace |> shouldEqual (Some "Microsoft.FSharp.Core") - argTy1b.TypeDefinition.CompiledName |> shouldEqual "int32" + argTy1b.TypeDefinition.CompiledName |> shouldEqual "int32" let argTy1c = argTy1b.TypeDefinition.AbbreviatedType argTy1c.TypeDefinition.Namespace |> shouldEqual (Some "System") - argTy1c.TypeDefinition.CompiledName |> shouldEqual "Int32" + argTy1c.TypeDefinition.CompiledName |> shouldEqual "Int32" let typeCheckContext = typeCheckResults2.ProjectContext - + typeCheckContext.GetReferencedAssemblies() |> List.exists (fun s -> s.FileName.Value.Contains(coreLibAssemblyName)) |> shouldEqual true - -let input3 = + +let input3 = """ let date = System.DateTime.Now.ToString().PadRight(25) """ @@ -269,100 +274,100 @@ let date = System.DateTime.Now.ToString().PadRight(25) #if COMPILED [] #endif -let ``Expression typing test`` () = +let ``Expression typing test`` () = printfn "------ Expression typing test -----------------" // Split the input & define file name let inputLines = input3.Split('\n') let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input3) + let parseResult, typeCheckResults = parseAndCheckScript(file, input3) let identToken = FSharpTokenTag.IDENT - for msg in typeCheckResults.Errors do + for msg in typeCheckResults.Diagnostics do printfn "***Expression typing test: Unexpected error: %A" msg.Message - typeCheckResults.Errors.Length |> shouldEqual 0 + typeCheckResults.Diagnostics.Length |> shouldEqual 0 // Get declarations (autocomplete) for a location // - // Getting the declarations at columns 42 to 43 with [], "" for the names and residue - // gives the results for the string type. - // - for col in 42..43 do + // Getting the declarations at columns 42 to 43 with [], "" for the names and residue + // gives the results for the string type. + // + for col in 42..43 do let decls = typeCheckResults.GetDeclarationListInfo(Some parseResult, 2, inputLines.[1], PartialLongName.Empty(col), (fun _ -> [])) let autoCompleteSet = set [ for item in decls.Items -> item.Name ] autoCompleteSet |> shouldEqual (set stringMethods) // The underlying problem is that the parser error recovery doesn't include _any_ information for // the incomplete member: -// member x.Test = +// member x.Test = [] -let ``Find function from member 1`` () = - let input = +let ``Find function from member 1`` () = + let input = """ -type Test() = +type Test() = let abc a b c = a + b + c - member x.Test = """ + member x.Test = """ // Split the input & define file name let inputLines = input.Split('\n') let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let decls = typeCheckResults.GetDeclarationListInfo(Some parseResult, 4, inputLines.[3], PartialLongName.Empty(20), (fun _ -> [])) let item = decls.Items |> Array.tryFind (fun d -> d.Name = "abc") decls.Items |> Seq.exists (fun d -> d.Name = "abc") |> shouldEqual true [] -let ``Find function from member 2`` () = - let input = +let ``Find function from member 2`` () = + let input = """ -type Test() = +type Test() = let abc a b c = a + b + c - member x.Test = a""" + member x.Test = a""" // Split the input & define file name let inputLines = input.Split('\n') let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let decls = typeCheckResults.GetDeclarationListInfo(Some parseResult, 4, inputLines.[3], PartialLongName.Empty(21), (fun _ -> [])) let item = decls.Items |> Array.tryFind (fun d -> d.Name = "abc") decls.Items |> Seq.exists (fun d -> d.Name = "abc") |> shouldEqual true - + [] -let ``Find function from var`` () = - let input = +let ``Find function from var`` () = + let input = """ -type Test() = +type Test() = let abc a b c = a + b + c - let test = """ + let test = """ // Split the input & define file name let inputLines = input.Split('\n') let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let decls = typeCheckResults.GetDeclarationListInfo(Some parseResult, 4, inputLines.[3], PartialLongName.Empty(14), (fun _ -> [])) decls.Items |> Seq.exists (fun d -> d.Name = "abc") |> shouldEqual true [] -let ``Completion in base constructor`` () = - let input = +let ``Completion in base constructor`` () = + let input = """ type A(foo) = class end type B(bar) = - inherit A(bar)""" + inherit A(bar)""" // Split the input & define file name let inputLines = input.Split('\n') let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let decls = typeCheckResults.GetDeclarationListInfo(Some parseResult, 7, inputLines.[6], PartialLongName.Empty(17), (fun _ -> [])) decls.Items |> Seq.exists (fun d -> d.Name = "bar") |> shouldEqual true @@ -370,8 +375,8 @@ type B(bar) = [] -let ``Completion in do in base constructor`` () = - let input = +let ``Completion in do in base constructor`` () = + let input = """ type A() = class @@ -379,72 +384,72 @@ type A() = type B(bar) = inherit A() - - do bar""" + + do bar""" // Split the input & define file name let inputLines = input.Split('\n') let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let decls = typeCheckResults.GetDeclarationListInfo(Some parseResult, 9, inputLines.[8], PartialLongName.Empty(7), (fun _ -> [])) decls.Items |> Seq.exists (fun d -> d.Name = "bar") |> shouldEqual true [] -let ``Symbol based find function from member 1`` () = - let input = +let ``Symbol based find function from member 1`` () = + let input = """ -type Test() = +type Test() = let abc a b c = a + b + c - member x.Test = """ + member x.Test = """ // Split the input & define file name let inputLines = input.Split('\n') let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let decls = typeCheckResults.GetDeclarationListSymbols(Some parseResult, 4, inputLines.[3], PartialLongName.Empty(20), (fun () -> [])) //decls |> List.map (fun d -> d.Head.Symbol.DisplayName) |> printfn "---> decls = %A" decls |> Seq.exists (fun d -> d.Head.Symbol.DisplayName = "abc") |> shouldEqual true [] -let ``Symbol based find function from member 2`` () = - let input = +let ``Symbol based find function from member 2`` () = + let input = """ -type Test() = +type Test() = let abc a b c = a + b + c - member x.Test = a""" + member x.Test = a""" // Split the input & define file name let inputLines = input.Split('\n') let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let decls = typeCheckResults.GetDeclarationListSymbols(Some parseResult, 4, inputLines.[3], PartialLongName.Empty(21), (fun () -> [])) //decls |> List.map (fun d -> d.Head.Symbol.DisplayName) |> printfn "---> decls = %A" decls |> Seq.exists (fun d -> d.Head.Symbol.DisplayName = "abc") |> shouldEqual true [] -let ``Symbol based find function from var`` () = - let input = +let ``Symbol based find function from var`` () = + let input = """ -type Test() = +type Test() = let abc a b c = a + b + c - let test = """ + let test = """ // Split the input & define file name let inputLines = input.Split('\n') let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let decls = typeCheckResults.GetDeclarationListSymbols(Some parseResult, 4, inputLines.[3], PartialLongName.Empty(14), (fun () -> [])) //decls |> List.map (fun d -> d.Head.Symbol.DisplayName) |> printfn "---> decls = %A" decls |> Seq.exists (fun d -> d.Head.Symbol.DisplayName = "abc") |> shouldEqual true [] -let ``Printf specifiers for regular and verbatim strings`` () = - let input = +let ``Printf specifiers for regular and verbatim strings`` () = + let input = """let os = System.Text.StringBuilder() let _ = Microsoft.FSharp.Core.Printf.printf "%A" 0 let _ = Printf.printf "%A" 0 @@ -465,7 +470,7 @@ let _ = List.map (sprintf @"%A let _ = (10, 12) ||> sprintf "%A %O" let _ = sprintf "\n%-8.1e+567" 1.0 -let _ = sprintf @"%O\n%-5s" "1" "2" +let _ = sprintf @"%O\n%-5s" "1" "2" let _ = sprintf "%%" let _ = sprintf " %*%" 2 let _ = sprintf " %.*%" 2 @@ -482,10 +487,10 @@ let _ = printf " %*a" 3 (fun _ _ -> ()) 2 """ let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) - typeCheckResults.Errors |> shouldEqual [||] - typeCheckResults.GetFormatSpecifierLocationsAndArity() + typeCheckResults.Diagnostics |> shouldEqual [||] + typeCheckResults.GetFormatSpecifierLocationsAndArity() |> Array.map (fun (range,numArgs) -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn, numArgs) |> shouldEqual [|(2, 45, 2, 47, 1); (3, 23, 3, 25, 1); (4, 38, 4, 40, 1); (5, 27, 5, 29, 1); @@ -500,8 +505,8 @@ let _ = printf " %*a" 3 (fun _ _ -> ()) 2 (34, 29, 34, 32, 3)|] [] -let ``Printf specifiers for triple-quote strings`` () = - let input = +let ``Printf specifiers for triple-quote strings`` () = + let input = " let _ = sprintf \"\"\"%-A\"\"\" -10 let _ = printfn \"\"\" @@ -512,20 +517,20 @@ let _ = List.iter(printfn \"\"\"%-A \"\"\" 1 2)" let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) - typeCheckResults.Errors |> shouldEqual [||] - typeCheckResults.GetFormatSpecifierLocationsAndArity() + typeCheckResults.Diagnostics |> shouldEqual [||] + typeCheckResults.GetFormatSpecifierLocationsAndArity() |> Array.map (fun (range,numArgs) -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn, numArgs) |> shouldEqual [|(2, 19, 2, 22, 1); (4, 12, 4, 15, 1); (6, 29, 6, 32, 1); - (7, 29, 7, 31, 1); + (7, 29, 7, 31, 1); (7, 33, 7, 35,1 )|] - + [] -let ``Printf specifiers for user-defined functions`` () = - let input = +let ``Printf specifiers for user-defined functions`` () = + let input = """ let debug msg = Printf.kprintf System.Diagnostics.Debug.WriteLine msg let _ = debug "Message: %i - %O" 1 "Ok" @@ -533,22 +538,22 @@ let _ = debug "[LanguageService] Type checking fails for '%s' with content=%A an """ let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) - typeCheckResults.Errors |> shouldEqual [||] - typeCheckResults.GetFormatSpecifierLocationsAndArity() + typeCheckResults.Diagnostics |> shouldEqual [||] + typeCheckResults.GetFormatSpecifierLocationsAndArity() |> Array.map (fun (range, numArgs) -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn, numArgs) - |> shouldEqual [|(3, 24, 3, 26, 1); + |> shouldEqual [|(3, 24, 3, 26, 1); (3, 29, 3, 31, 1); - (4, 58, 4, 60, 1); - (4, 75, 4, 77, 1); - (4, 82, 4, 84, 1); + (4, 58, 4, 60, 1); + (4, 75, 4, 77, 1); + (4, 82, 4, 84, 1); (4, 108, 4, 110, 1)|] #if ASSUME_PREVIEW_FSHARP_CORE [] -let ``Printf specifiers for regular and verbatim interpolated strings`` () = - let input = +let ``Printf specifiers for regular and verbatim interpolated strings`` () = + let input = """let os = System.Text.StringBuilder() // line 1 let _ = $"{0}" // line 2 let _ = $"%A{0}" // line 3 @@ -568,15 +573,15 @@ let _ = $"\n%-8.1e{1.0}+567" // line 16 let _ = $@"%O{1}\n%-5s{s}" // line 17 let _ = $"%%" // line 18 let s2 = $"abc %d{s.Length} and %d{s.Length}def" // line 19 -let s3 = $"abc %d{s.Length} +let s3 = $"abc %d{s.Length} and %d{s.Length}def" // line 21 """ let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScriptWithOptions(file, input, [| "/langversion:preview" |]) + let parseResult, typeCheckResults = parseAndCheckScriptWithOptions(file, input, [| "/langversion:preview" |]) - typeCheckResults.Errors |> shouldEqual [||] - typeCheckResults.GetFormatSpecifierLocationsAndArity() + typeCheckResults.Diagnostics |> shouldEqual [||] + typeCheckResults.GetFormatSpecifierLocationsAndArity() |> Array.map (fun (range,numArgs) -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn, numArgs) |> shouldEqual [|(3, 10, 3, 12, 1); (4, 10, 4, 15, 1); (5, 10, 5, 16, 1); (7, 11, 7, 15, 1); @@ -586,15 +591,15 @@ let s3 = $"abc %d{s.Length} (19, 32, 19, 34, 1); (20, 15, 20, 17, 1); (21, 20, 21, 22, 1)|] [] -let ``Printf specifiers for triple quote interpolated strings`` () = - let input = +let ``Printf specifiers for triple quote interpolated strings`` () = + let input = "let _ = $\"\"\"abc %d{1} and %d{2+3}def\"\"\" " let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScriptWithOptions(file, input, [| "/langversion:preview" |]) + let parseResult, typeCheckResults = parseAndCheckScriptWithOptions(file, input, [| "/langversion:preview" |]) - typeCheckResults.Errors |> shouldEqual [||] - typeCheckResults.GetFormatSpecifierLocationsAndArity() + typeCheckResults.Diagnostics |> shouldEqual [||] + typeCheckResults.GetFormatSpecifierLocationsAndArity() |> Array.map (fun (range,numArgs) -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn, numArgs) |> shouldEqual [|(1, 16, 1, 18, 1); (1, 26, 1, 28, 1)|] @@ -602,38 +607,38 @@ let ``Printf specifiers for triple quote interpolated strings`` () = [] -let ``should not report format specifiers for illformed format strings`` () = - let input = +let ``should not report format specifiers for illformed format strings`` () = + let input = """ let _ = sprintf "%.7f %7.1A %7.f %--8.1f" let _ = sprintf "ABCDE" """ let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) - typeCheckResults.GetFormatSpecifierLocationsAndArity() + let parseResult, typeCheckResults = parseAndCheckScript(file, input) + typeCheckResults.GetFormatSpecifierLocationsAndArity() |> Array.map (fun (range, numArgs) -> range.StartLine, range.StartColumn, range.EndLine, range.EndColumn, numArgs) |> shouldEqual [||] [] -let ``Single case discreminated union type definition`` () = - let input = +let ``Single case discreminated union type definition`` () = + let input = """ type DU = Case1 """ let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) typeCheckResults.GetAllUsesOfAllSymbolsInFile() |> Array.ofSeq - |> Array.map (fun su -> - let r = su.RangeAlternate + |> Array.map (fun su -> + let r = su.Range r.StartLine, r.StartColumn, r.EndLine, r.EndColumn) |> shouldEqual [|(2, 10, 2, 15); (2, 5, 2, 7); (1, 0, 1, 0)|] [] -let ``Synthetic symbols should not be reported`` () = - let input = +let ``Synthetic symbols should not be reported`` () = + let input = """ let arr = [|1|] let number1, number2 = 1, 2 @@ -642,13 +647,13 @@ let _ = arr.[..number2] """ let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) typeCheckResults.GetAllUsesOfAllSymbolsInFile() |> Array.ofSeq - |> Array.map (fun su -> - let r = su.RangeAlternate + |> Array.map (fun su -> + let r = su.Range su.Symbol.ToString(), (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn)) - |> shouldEqual + |> shouldEqual [|("val arr", (2, 4, 2, 7)) ("val number2", (3, 13, 3, 20)) ("val number1", (3, 4, 3, 11)) @@ -664,7 +669,7 @@ let _ = arr.[..number2] ("OperatorIntrinsics", (5, 11, 5, 12)) ("Operators", (5, 11, 5, 12)) ("Core", (5, 11, 5, 12)) - ("FSharp", (5, 11, 5, 12)) + ("FSharp", (5, 11, 5, 12)) ("val number2", (5, 15, 5, 22)) ("Test", (1, 0, 1, 0))|] @@ -677,8 +682,8 @@ let test2 = System.StringComparison.CurrentCulture let test3 = System.Text.RegularExpressions.RegexOptions.Compiled """ let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) - let allSymbols = typeCheckResults.GetAllUsesOfAllSymbolsInFile() + let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let allSymbols = typeCheckResults.GetAllUsesOfAllSymbolsInFile() let enums = allSymbols |> Array.ofSeq @@ -718,8 +723,8 @@ let test3 = System.Text.RegularExpressions.RegexOptions.Compiled |] [] -let ``IL enum fields should be reported`` () = - let input = +let ``IL enum fields should be reported`` () = + let input = """ open System @@ -730,29 +735,29 @@ let _ = """ let file = "/home/user/Test.fsx" - let _, typeCheckResults = parseAndCheckScript(file, input) + let _, typeCheckResults = parseAndCheckScript(file, input) typeCheckResults.GetAllUsesOfAllSymbolsInFile() |> Array.ofSeq - |> Array.map (fun su -> - let r = su.RangeAlternate + |> Array.map (fun su -> + let r = su.Range su.Symbol.ToString(), (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn)) |> Array.distinct - |> shouldEqual + |> shouldEqual // note: these "System" sysbol uses are not duplications because each of them corresponts to different namespaces [|("System", (2, 5, 2, 11)) ("ConsoleKey", (5, 10, 5, 20)); - ("field Tab", (5, 10, 5, 24)); + ("field Tab", (5, 10, 5, 24)); ("ConsoleKey", (6, 6, 6, 16)); - ("field OemClear", (6, 6, 6, 25)); + ("field OemClear", (6, 6, 6, 25)); ("ConsoleKey", (6, 29, 6, 39)); - ("field A", (6, 29, 6, 41)); + ("field A", (6, 29, 6, 41)); ("ConsoleKey", (7, 11, 7, 21)); - ("field B", (7, 11, 7, 23)); + ("field B", (7, 11, 7, 23)); ("Test", (1, 0, 1, 0))|] [] -let ``Literal values should be reported`` () = - let input = +let ``Literal values should be reported`` () = + let input = """ module Module1 = let [] ModuleValue = 1 @@ -765,7 +770,7 @@ module Module1 = type Class1() = let [] ClassValue = 1 static let [] StaticClassValue = 2 - + let _ = ClassValue let _ = StaticClassValue @@ -777,13 +782,13 @@ type Class1() = """ let file = "/home/user/Test.fsx" - let _, typeCheckResults = parseAndCheckScript(file, input) + let _, typeCheckResults = parseAndCheckScript(file, input) typeCheckResults.GetAllUsesOfAllSymbolsInFile() |> Array.ofSeq - |> Array.map (fun su -> - let r = su.RangeAlternate + |> Array.map (fun su -> + let r = su.Range su.Symbol.ToString(), (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn)) - |> shouldEqual + |> shouldEqual [|("LiteralAttribute", (3, 10, 3, 17)) ("LiteralAttribute", (3, 10, 3, 17)) ("member .ctor", (3, 10, 3, 17)) @@ -819,26 +824,26 @@ type Class1() = ("Test", (1, 0, 1, 0))|] [] -let ``IsConstructor property should return true for constructors`` () = - let input = +let ``IsConstructor property should return true for constructors`` () = + let input = """ type T(x: int) = new() = T(0) let x: T() """ let file = "/home/user/Test.fsx" - let _, typeCheckResults = parseAndCheckScript(file, input) + let _, typeCheckResults = parseAndCheckScript(file, input) typeCheckResults.GetAllUsesOfAllSymbolsInFile() |> Array.ofSeq - |> Array.map (fun su -> - let r = su.RangeAlternate + |> Array.map (fun su -> + let r = su.Range let isConstructor = match su.Symbol with | :? FSharpMemberOrFunctionOrValue as f -> f.IsConstructor | _ -> false su.Symbol.ToString(), (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn), isConstructor) |> Array.distinct - |> shouldEqual + |> shouldEqual [|("T", (2, 5, 2, 6), false) ("int", (2, 10, 2, 13), false) ("val x", (2, 7, 2, 8), false) @@ -850,22 +855,22 @@ let x: T() ("Test", (1, 0, 1, 0), false)|] [] -let ``ValidateBreakpointLocation tests A`` () = - let input = +let ``ValidateBreakpointLocation tests A`` () = + let input = """ -let f x = +let f x = let y = z + 1 y + y )""" let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let lines = input.Replace("\r", "").Split( [| '\n' |]) - let positions = [ for (i,line) in Seq.indexed lines do for (j, c) in Seq.indexed line do yield Range.mkPos (Range.Line.fromZ i) j, line ] - let results = [ for pos, line in positions do - match parseResult.ValidateBreakpointLocation pos with - | Some r -> yield ((line, pos.Line, pos.Column), (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn)) + let positions = [ for (i,line) in Seq.indexed lines do for (j, c) in Seq.indexed line do yield Position.mkPos (Line.fromZ i) j, line ] + let results = [ for pos, line in positions do + match parseResult.ValidateBreakpointLocation pos with + | Some r -> yield ((line, pos.Line, pos.Column), (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn)) | None -> ()] - results |> shouldEqual + results |> shouldEqual [((" let y = z + 1", 3, 0), (3, 4, 3, 17)); ((" let y = z + 1", 3, 1), (3, 4, 4, 9)); ((" let y = z + 1", 3, 2), (3, 4, 4, 9)); @@ -891,9 +896,9 @@ let f x = [] -let ``ValidateBreakpointLocation tests for object expressions`` () = +let ``ValidateBreakpointLocation tests for object expressions`` () = // fsi.PrintLength <- 1000 - let input = + let input = """ type IFoo = abstract member Foo: int -> int @@ -912,14 +917,14 @@ type FooImpl() = } )""" let file = "/home/user/Test.fsx" - let parseResult, typeCheckResults = parseAndCheckScript(file, input) + let parseResult, typeCheckResults = parseAndCheckScript(file, input) let lines = input.Replace("\r", "").Split( [| '\n' |]) - let positions = [ for (i,line) in Seq.indexed lines do for (j, c) in Seq.indexed line do yield Range.mkPos (Range.Line.fromZ i) j, line ] - let results = [ for pos, line in positions do - match parseResult.ValidateBreakpointLocation pos with - | Some r -> yield ((line, pos.Line, pos.Column), (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn)) + let positions = [ for (i,line) in Seq.indexed lines do for (j, c) in Seq.indexed line do yield Position.mkPos (Line.fromZ i) j, line ] + let results = [ for pos, line in positions do + match parseResult.ValidateBreakpointLocation pos with + | Some r -> yield ((line, pos.Line, pos.Column), (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn)) | None -> ()] - results |> shouldEqual + results |> shouldEqual [(("type FooBase(foo:IFoo) =", 5, 5), (5, 5, 5, 12)); (("type FooBase(foo:IFoo) =", 5, 6), (5, 5, 5, 12)); (("type FooBase(foo:IFoo) =", 5, 7), (5, 5, 5, 12)); @@ -1130,8 +1135,8 @@ type FooImpl() = ((" )", 17, 8), (10, 8, 17, 9))] [] -let ``Partially valid namespaces should be reported`` () = - let input = +let ``Partially valid namespaces should be reported`` () = + let input = """ open System.Threading.Foo open System @@ -1141,14 +1146,14 @@ let _ = Threading.Buzz = null """ let file = "/home/user/Test.fsx" - let _, typeCheckResults = parseAndCheckScript(file, input) + let _, typeCheckResults = parseAndCheckScript(file, input) typeCheckResults.GetAllUsesOfAllSymbolsInFile() |> Array.ofSeq - |> Array.map (fun su -> - let r = su.RangeAlternate + |> Array.map (fun su -> + let r = su.Range su.Symbol.ToString(), (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn)) |> Array.distinct - |> shouldEqual + |> shouldEqual // note: these "System" sysbol uses are not duplications because each of them corresponts to different namespaces [|("System", (2, 5, 2, 11)) ("Threading", (2, 12, 2, 21)) @@ -1161,22 +1166,21 @@ let _ = Threading.Buzz = null ("Test", (1, 0, 1, 0))|] [] -let ``GetDeclarationLocation should not require physical file`` () = +let ``GetDeclarationLocation should not require physical file`` () = let input = "let abc = 1\nlet xyz = abc" let file = "/home/user/Test.fsx" - let _, typeCheckResults = parseAndCheckScript(file, input) + let _, typeCheckResults = parseAndCheckScript(file, input) let location = typeCheckResults.GetDeclarationLocation(2, 13, "let xyz = abc", ["abc"]) match location with - | FSharpFindDeclResult.DeclFound r -> Some (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn, "<=== Found here." ) + | FindDeclResult.DeclFound r -> Some (r.StartLine, r.StartColumn, r.EndLine, r.EndColumn, "<=== Found here." ) | _ -> Some (0 , 0 , 0 , 0 , "Not Found. Should not require physical file." ) |> shouldEqual (Some (1 , 4 , 1 , 7 , "<=== Found here." )) //------------------------------------------------------------------------------- - #if TEST_TP_PROJECTS -module internal TPProject = +module internal TPProject = open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") @@ -1201,19 +1205,20 @@ let _ = RegexTypedStatic.IsMatch<"ABC", (*$ *) >( ) // TEST: param info on Ctrl let _ = RegexTypedStatic.IsMatch<"ABC" >( (*$*) ) // TEST: no assert on Ctrl-space at $ """ - File.WriteAllText(fileName1, fileSource1) - let fileLines1 = File.ReadAllLines(fileName1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + let fileLines1 = FileSystem.OpenFileForReadShim(fileName1).AsStream().ReadLines() + let fileNames = [fileName1] let args = Array.append (mkProjectCommandLineArgs (dllName, fileNames)) [| "-r:" + PathRelativeToTestAssembly(@"DummyProviderForLanguageServiceTesting.dll") |] let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) let cleanFileName a = if a = fileName1 then "file1" else "??" [] -let ``Test TPProject all symbols`` () = +let ``Test TPProject all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(TPProject.options) |> Async.RunSynchronously - let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() - let allSymbolUsesInfo = [ for s in allSymbolUses -> s.Symbol.DisplayName, tups s.RangeAlternate, attribsOfSymbol s.Symbol ] + let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() + let allSymbolUsesInfo = [ for s in allSymbolUses -> s.Symbol.DisplayName, tups s.Range, attribsOfSymbol s.Symbol ] //printfn "allSymbolUsesInfo = \n----\n%A\n----" allSymbolUsesInfo allSymbolUsesInfo |> shouldEqual @@ -1248,15 +1253,15 @@ let ``Test TPProject all symbols`` () = [] -let ``Test TPProject errors`` () = +let ``Test TPProject errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(TPProject.options) |> Async.RunSynchronously let parseResult, typeCheckAnswer = checker.ParseAndCheckFileInProject(TPProject.fileName1, 0, TPProject.fileSource1, TPProject.options) |> Async.RunSynchronously - let typeCheckResults = + let typeCheckResults = match typeCheckAnswer with | FSharpCheckFileAnswer.Succeeded(res) -> res | res -> failwithf "Parsing did not finish... (%A)" res - let errorMessages = [ for msg in typeCheckResults.Errors -> msg.StartLineAlternate, msg.StartColumn, msg.EndLineAlternate, msg.EndColumn, msg.Message.Replace("\r","").Replace("\n","") ] + let errorMessages = [ for msg in typeCheckResults.Diagnostics -> msg.StartLine, msg.StartColumn, msg.EndLine, msg.EndColumn, msg.Message.Replace("\r","").Replace("\n","") ] //printfn "errorMessages = \n----\n%A\n----" errorMessages errorMessages |> shouldEqual @@ -1271,26 +1276,26 @@ let ``Test TPProject errors`` () = (15, 33, 15, 38, "No static parameter exists with name ''"); (16, 40, 16, 50, "This expression was expected to have type 'string' but here has type 'unit' ")] -let internal extractToolTipText (FSharpToolTipText(els)) = - [ for e in els do +let internal extractToolTipText (ToolTipText(els)) = + [ for e in els do match e with - | FSharpToolTipElement.Group txts -> for item in txts do yield item.MainDescription - | FSharpToolTipElement.CompositionError err -> yield err - | FSharpToolTipElement.None -> yield "NONE!" ] + | ToolTipElement.Group txts -> for item in txts do yield item.MainDescription + | ToolTipElement.CompositionError err -> yield err + | ToolTipElement.None -> yield "NONE!" ] [] -let ``Test TPProject quick info`` () = +let ``Test TPProject quick info`` () = let wholeProjectResults = checker.ParseAndCheckProject(TPProject.options) |> Async.RunSynchronously let parseResult, typeCheckAnswer = checker.ParseAndCheckFileInProject(TPProject.fileName1, 0, TPProject.fileSource1, TPProject.options) |> Async.RunSynchronously - let typeCheckResults = + let typeCheckResults = match typeCheckAnswer with | FSharpCheckFileAnswer.Succeeded(res) -> res | res -> failwithf "Parsing did not finish... (%A)" res let toolTips = - [ for lineNum in 0 .. TPProject.fileLines1.Length - 1 do + [ for lineNum in 0 .. TPProject.fileLines1.Length - 1 do let lineText = TPProject.fileLines1.[lineNum] - if lineText.Contains(".IsMatch") then + if lineText.Contains(".IsMatch") then let colAtEndOfNames = lineText.IndexOf(".IsMatch") + ".IsMatch".Length let res = typeCheckResults.GetToolTipTextAlternate(lineNum, colAtEndOfNames, lineText, ["RegexTypedStatic";"IsMatch"], FSharpTokenTag.IDENT) yield lineNum, extractToolTipText res ] @@ -1313,25 +1318,25 @@ let ``Test TPProject quick info`` () = [] -let ``Test TPProject param info`` () = +let ``Test TPProject param info`` () = let wholeProjectResults = checker.ParseAndCheckProject(TPProject.options) |> Async.RunSynchronously let parseResult, typeCheckAnswer = checker.ParseAndCheckFileInProject(TPProject.fileName1, 0, TPProject.fileSource1, TPProject.options) |> Async.RunSynchronously - let typeCheckResults = + let typeCheckResults = match typeCheckAnswer with | FSharpCheckFileAnswer.Succeeded(res) -> res | res -> failwithf "Parsing did not finish... (%A)" res let paramInfos = - [ for lineNum in 0 .. TPProject.fileLines1.Length - 1 do + [ for lineNum in 0 .. TPProject.fileLines1.Length - 1 do let lineText = TPProject.fileLines1.[lineNum] - if lineText.Contains(".IsMatch") then + if lineText.Contains(".IsMatch") then let colAtEndOfNames = lineText.IndexOf(".IsMatch") + ".IsMatch".Length - let meths = typeCheckResults.GetMethodsAlternate(lineNum, colAtEndOfNames, lineText, Some ["RegexTypedStatic";"IsMatch"]) - let elems = - [ for meth in meths.Methods do + let meths = typeCheckResults.GetMethodsAlternate(lineNum, colAtEndOfNames, lineText, Some ["RegexTypedStatic";"IsMatch"]) + let elems = + [ for meth in meths.Methods do yield extractToolTipText meth.Description, meth.HasParameters, [ for p in meth.Parameters -> p.ParameterName ], [ for p in meth.StaticParameters -> p.ParameterName ] ] yield lineNum, elems] - //printfn "paramInfos = \n----\n%A\n----" paramInfos + //printfn "paramInfos = \n----\n%A\n----" paramInfos // This tests that properly statically-instantiated methods have the right method lists and parameter info paramInfos |> shouldEqual @@ -1355,7 +1360,7 @@ let ``Test TPProject param info`` () = let ``FSharpField.IsNameGenerated`` () = let checkFields source = let file = "/home/user/Test.fsx" - let _, typeCheckResults = parseAndCheckScript(file, source) + let _, typeCheckResults = parseAndCheckScript(file, source) let symbols = typeCheckResults.GetAllUsesOfAllSymbolsInFile() symbols @@ -1363,18 +1368,18 @@ let ``FSharpField.IsNameGenerated`` () = |> Array.choose (fun su -> match su.Symbol with | :? FSharpEntity as entity -> Some entity.FSharpFields - | :? FSharpUnionCase as unionCase -> Some unionCase.UnionCaseFields + | :? FSharpUnionCase as unionCase -> Some unionCase.Fields | _ -> None) |> Seq.concat |> Seq.map (fun (field: FSharpField) -> field.Name, field.IsNameGenerated) |> List.ofSeq - + ["exception E of string", ["Data0", true] "exception E of Data0: string", ["Data0", false] "exception E of Name: string", ["Name", false] "exception E of string * Data2: string * Data1: string * Name: string * Data4: string", ["Data0", true; "Data2", false; "Data1", false; "Name", false; "Data4", false] - + "type U = Case of string", ["Item", true] "type U = Case of Item: string", ["Item", false] "type U = Case of Name: string", ["Name", false] @@ -1431,8 +1436,17 @@ let ``Inherit ctor arg recovery`` () = assertHasSymbolUsages ["x"] checkResults [] -let ``Brace matching smoke test`` () = - let input = +let ``Missing this recovery`` () = + let _, checkResults = getParseAndCheckResults """ + type T() = + member M() = + let x = 1 in () + """ + assertHasSymbolUsages ["x"] checkResults + +[] +let ``Brace matching smoke test`` () = + let input = """ let x1 = { contents = 1 } let x2 = {| contents = 1 |} @@ -1441,11 +1455,11 @@ let x4 = [| 1 |] let x5 = $"abc{1}def" """ let file = "/home/user/Test.fsx" - let braces = matchBraces(file, input) + let braces = matchBraces(file, input) braces - |> Array.map (fun (r1,r2) -> - (r1.StartLine, r1.StartColumn, r1.EndLine, r1.EndColumn), + |> Array.map (fun (r1,r2) -> + (r1.StartLine, r1.StartColumn, r1.EndLine, r1.EndColumn), (r2.StartLine, r2.StartColumn, r2.EndLine, r2.EndColumn)) |> shouldEqual [|((2, 9, 2, 10), (2, 24, 2, 25)); @@ -1453,11 +1467,11 @@ let x5 = $"abc{1}def" ((4, 9, 4, 10), (4, 13, 4, 14)); ((5, 9, 5, 11), (5, 14, 5, 16)); ((6, 14, 6, 15), (6, 16, 6, 17))|] - + [] -let ``Brace matching in interpolated strings`` () = - let input = +let ``Brace matching in interpolated strings`` () = + let input = " let x5 = $\"abc{1}def\" let x6 = $\"abc{1}def{2}hij\" @@ -1465,16 +1479,14 @@ let x7 = $\"\"\"abc{1}def{2}hij\"\"\" let x8 = $\"\"\"abc{ {contents=1} }def{2}hij\"\"\" " let file = "/home/user/Test.fsx" - let braces = matchBraces(file, input) + let braces = matchBraces(file, input) braces - |> Array.map (fun (r1,r2) -> - (r1.StartLine, r1.StartColumn, r1.EndLine, r1.EndColumn), + |> Array.map (fun (r1,r2) -> + (r1.StartLine, r1.StartColumn, r1.EndLine, r1.EndColumn), (r2.StartLine, r2.StartColumn, r2.EndLine, r2.EndColumn)) |> shouldEqual [|((2, 14, 2, 15), (2, 16, 2, 17)); ((3, 14, 3, 15), (3, 16, 3, 17)); ((3, 20, 3, 21), (3, 22, 3, 23)); ((4, 16, 4, 17), (4, 18, 4, 19)); ((4, 22, 4, 23), (4, 24, 4, 25)); ((5, 19, 5, 20), (5, 30, 5, 31)); ((5, 16, 5, 17), (5, 32, 5, 33)); ((5, 36, 5, 37), (5, 38, 5, 39))|] - - diff --git a/tests/service/ExprTests.fs b/tests/service/ExprTests.fs index 8ff672213a8..e0f5e827b4b 100644 --- a/tests/service/ExprTests.fs +++ b/tests/service/ExprTests.fs @@ -16,12 +16,17 @@ open System.Text open System.Collections.Generic open System.Diagnostics open System.Threading -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.EditorServices +open FSharp.Compiler.IO open FSharp.Compiler.Service.Tests.Common +open FSharp.Compiler.Symbols +open FSharp.Compiler.Symbols.FSharpExprPatterns -type FSharpCore = - | FC45 - | FC46 +type FSharpCore = + | FC45 + | FC46 | FC47 | FC50 @@ -34,18 +39,18 @@ type FSharpCore = [] -module internal Utils = - let getTempPath() = +module internal Utils = + let getTempPath() = Path.Combine(Path.GetTempPath(), "ExprTests") /// If it doesn't exists, create a folder 'ExprTests' in local user's %TEMP% folder - let createTempDir() = + let createTempDir() = let tempPath = getTempPath() - do + do if Directory.Exists tempPath then () else Directory.CreateDirectory tempPath |> ignore - /// Returns the filename part of a temp file name created with Path.GetTempFileName() + /// Returns the filename part of a temp file name created with Path.GetTempFileName() /// and an added process id and thread id to ensure uniqueness between threads. let getTempFileName() = let tempFileName = Path.GetTempFileName() @@ -54,20 +59,20 @@ module internal Utils = let procId, threadId = Process.GetCurrentProcess().Id, Thread.CurrentThread.ManagedThreadId String.concat "" [tempFile; "_"; string procId; "_"; string threadId; tempExt] // ext includes dot finally - try + try // Since Path.GetTempFileName() creates a *.tmp file in the %TEMP% folder, we want to clean it up. // This also prevents a system to run out of available randomized temp files (the pool is only 64k large). - File.Delete tempFileName + FileSystem.FileDeleteShim tempFileName with _ -> () /// Clean up after a test is run. If you need to inspect the create *.fs files, change this function to do nothing, or just break here. let cleanupTempFiles files = - { new System.IDisposable with - member _.Dispose() = - for fileName in files do + { new System.IDisposable with + member _.Dispose() = + for fileName in files do try // cleanup: only the source file is written to the temp dir. - File.Delete fileName + FileSystem.FileDeleteShim fileName with _ -> () try @@ -84,8 +89,8 @@ module internal Utils = // This behaves slightly differently on Mono versions, 'null' is printed somethimes, 'None' other times // Presumably this is very small differences in Mono reflection causing F# printing to change behaviour // For now just disabling this test. See https://github.com/fsharp/FSharp.Compiler.Service/pull/766 - let filterHack l = - l |> List.map (fun (s:string) -> + let filterHack l = + l |> List.map (fun (s:string) -> // potential difference on Mono s.Replace("ILArrayShape [(Some 0, None)]", "ILArrayShape [(Some 0, null)]") // spacing difference when run locally in VS @@ -93,64 +98,64 @@ module internal Utils = // local VS IDE vs CI env difference .Replace("Operators.Hash (x)", "x.GetHashCode()")) - let rec printExpr low (e:FSharpExpr) = - match e with - | BasicPatterns.AddressOf(e1) -> "&"+printExpr 0 e1 - | BasicPatterns.AddressSet(e1,e2) -> printExpr 0 e1 + " <- " + printExpr 0 e2 - | BasicPatterns.Application(f,tyargs,args) -> quote low (printExpr 10 f + printTyargs tyargs + " " + printCurriedArgs args) - | BasicPatterns.BaseValue(_) -> "base" - | BasicPatterns.CallWithWitnesses(Some obj,v,tyargs1,tyargs2,witnessL,argsL) -> printObjOpt (Some obj) + v.CompiledName + printTyargs tyargs2 + printTupledArgs (witnessL @ argsL) - | BasicPatterns.CallWithWitnesses(None,v,tyargs1,tyargs2,witnessL,argsL) -> v.DeclaringEntity.Value.CompiledName + printTyargs tyargs1 + "." + v.CompiledName + printTyargs tyargs2 + " " + printTupledArgs (witnessL @ argsL) - | BasicPatterns.Call(Some obj,v,tyargs1,tyargs2,argsL) -> printObjOpt (Some obj) + v.CompiledName + printTyargs tyargs2 + printTupledArgs argsL - | BasicPatterns.Call(None,v,tyargs1,tyargs2,argsL) -> v.DeclaringEntity.Value.CompiledName + printTyargs tyargs1 + "." + v.CompiledName + printTyargs tyargs2 + " " + printTupledArgs argsL - | BasicPatterns.Coerce(ty1,e1) -> quote low (printExpr 10 e1 + " :> " + printTy ty1) - | BasicPatterns.DefaultValue(ty1) -> "dflt" - | BasicPatterns.FastIntegerForLoop _ -> "for-loop" - | BasicPatterns.ILAsm(s,tyargs,args) -> s + printTupledArgs args - | BasicPatterns.ILFieldGet _ -> "ILFieldGet" - | BasicPatterns.ILFieldSet _ -> "ILFieldSet" - | BasicPatterns.IfThenElse (a,b,c) -> "(if " + printExpr 0 a + " then " + printExpr 0 b + " else " + printExpr 0 c + ")" - | BasicPatterns.Lambda(v,e1) -> "fun " + v.CompiledName + " -> " + printExpr 0 e1 - | BasicPatterns.Let((v,e1),b) -> "let " + (if v.IsMutable then "mutable " else "") + v.CompiledName + ": " + printTy v.FullType + " = " + printExpr 0 e1 + " in " + printExpr 0 b - | BasicPatterns.LetRec(vse,b) -> "let rec ... in " + printExpr 0 b - | BasicPatterns.NewArray(ty,es) -> "[|" + (es |> Seq.map (printExpr 0) |> String.concat "; ") + "|]" - | BasicPatterns.NewDelegate(ty,es) -> "new-delegate" - | BasicPatterns.NewObject(v,tys,args) -> "new " + v.DeclaringEntity.Value.CompiledName + printTupledArgs args - | BasicPatterns.NewRecord(v,args) -> + let rec printExpr low (e:FSharpExpr) = + match e with + | AddressOf(e1) -> "&"+printExpr 0 e1 + | AddressSet(e1,e2) -> printExpr 0 e1 + " <- " + printExpr 0 e2 + | Application(f,tyargs,args) -> quote low (printExpr 10 f + printTyargs tyargs + " " + printCurriedArgs args) + | BaseValue(_) -> "base" + | CallWithWitnesses(Some obj,v,tyargs1,tyargs2,witnessL,argsL) -> printObjOpt (Some obj) + v.CompiledName + printTyargs tyargs2 + printTupledArgs (witnessL @ argsL) + | CallWithWitnesses(None,v,tyargs1,tyargs2,witnessL,argsL) -> v.DeclaringEntity.Value.CompiledName + printTyargs tyargs1 + "." + v.CompiledName + printTyargs tyargs2 + " " + printTupledArgs (witnessL @ argsL) + | Call(Some obj,v,tyargs1,tyargs2,argsL) -> printObjOpt (Some obj) + v.CompiledName + printTyargs tyargs2 + printTupledArgs argsL + | Call(None,v,tyargs1,tyargs2,argsL) -> v.DeclaringEntity.Value.CompiledName + printTyargs tyargs1 + "." + v.CompiledName + printTyargs tyargs2 + " " + printTupledArgs argsL + | Coerce(ty1,e1) -> quote low (printExpr 10 e1 + " :> " + printTy ty1) + | DefaultValue(ty1) -> "dflt" + | FastIntegerForLoop _ -> "for-loop" + | ILAsm(s,tyargs,args) -> s + printTupledArgs args + | ILFieldGet _ -> "ILFieldGet" + | ILFieldSet _ -> "ILFieldSet" + | IfThenElse (a,b,c) -> "(if " + printExpr 0 a + " then " + printExpr 0 b + " else " + printExpr 0 c + ")" + | Lambda(v,e1) -> "fun " + v.CompiledName + " -> " + printExpr 0 e1 + | Let((v,e1),b) -> "let " + (if v.IsMutable then "mutable " else "") + v.CompiledName + ": " + printTy v.FullType + " = " + printExpr 0 e1 + " in " + printExpr 0 b + | LetRec(vse,b) -> "let rec ... in " + printExpr 0 b + | NewArray(ty,es) -> "[|" + (es |> Seq.map (printExpr 0) |> String.concat "; ") + "|]" + | NewDelegate(ty,es) -> "new-delegate" + | NewObject(v,tys,args) -> "new " + v.DeclaringEntity.Value.CompiledName + printTupledArgs args + | NewRecord(v,args) -> let fields = v.TypeDefinition.FSharpFields - "{" + ((fields, args) ||> Seq.map2 (fun f a -> f.Name + " = " + printExpr 0 a) |> String.concat "; ") + "}" - | BasicPatterns.NewAnonRecord(v,args) -> - let fields = v.AnonRecordTypeDetails.SortedFieldNames - "{" + ((fields, args) ||> Seq.map2 (fun f a -> f+ " = " + printExpr 0 a) |> String.concat "; ") + "}" - | BasicPatterns.NewTuple(v,args) -> printTupledArgs args - | BasicPatterns.NewUnionCase(ty,uc,args) -> uc.CompiledName + printTupledArgs args - | BasicPatterns.Quote(e1) -> "quote" + printTupledArgs [e1] - | BasicPatterns.FSharpFieldGet(obj, ty,f) -> printObjOpt obj + f.Name - | BasicPatterns.AnonRecordGet(obj, ty, n) -> printExpr 0 obj + "." + ty.AnonRecordTypeDetails.SortedFieldNames.[n] - | BasicPatterns.FSharpFieldSet(obj, ty,f,arg) -> printObjOpt obj + f.Name + " <- " + printExpr 0 arg - | BasicPatterns.Sequential(e1,e2) -> "(" + printExpr 0 e1 + "; " + printExpr 0 e2 + ")" - | BasicPatterns.ThisValue _ -> "this" - | BasicPatterns.TryFinally(e1,e2) -> "try " + printExpr 0 e1 + " finally " + printExpr 0 e2 - | BasicPatterns.TryWith(e1,_,_,vC,eC) -> "try " + printExpr 0 e1 + " with " + vC.CompiledName + " -> " + printExpr 0 eC - | BasicPatterns.TupleGet(ty,n,e1) -> printExpr 10 e1 + ".Item" + string n - | BasicPatterns.DecisionTree(dtree,targets) -> "match " + printExpr 10 dtree + " targets ..." - | BasicPatterns.DecisionTreeSuccess (tg,es) -> "$" + string tg - | BasicPatterns.TypeLambda(gp1,e1) -> "FUN ... -> " + printExpr 0 e1 - | BasicPatterns.TypeTest(ty,e1) -> printExpr 10 e1 + " :? " + printTy ty - | BasicPatterns.UnionCaseSet(obj,ty,uc,f1,e1) -> printExpr 10 obj + "." + f1.Name + " <- " + printExpr 0 e1 - | BasicPatterns.UnionCaseGet(obj,ty,uc,f1) -> printExpr 10 obj + "." + f1.Name - | BasicPatterns.UnionCaseTest(obj,ty,f1) -> printExpr 10 obj + ".Is" + f1.Name - | BasicPatterns.UnionCaseTag(obj,ty) -> printExpr 10 obj + ".Tag" - | BasicPatterns.ObjectExpr(ty,basecall,overrides,iimpls) -> "{ " + printExpr 10 basecall + " with " + printOverrides overrides + " " + printIimpls iimpls + " }" - | BasicPatterns.TraitCall(tys,nm,_,argtys,tinst,args) -> "trait call " + nm + printTupledArgs args - | BasicPatterns.Const(obj,ty) -> - match obj with + "{" + ((fields, args) ||> Seq.map2 (fun f a -> f.Name + " = " + printExpr 0 a) |> String.concat "; ") + "}" + | NewAnonRecord(v,args) -> + let fields = v.AnonRecordTypeDetails.SortedFieldNames + "{" + ((fields, args) ||> Seq.map2 (fun f a -> f+ " = " + printExpr 0 a) |> String.concat "; ") + "}" + | NewTuple(v,args) -> printTupledArgs args + | NewUnionCase(ty,uc,args) -> uc.CompiledName + printTupledArgs args + | Quote(e1) -> "quote" + printTupledArgs [e1] + | FSharpFieldGet(obj, ty,f) -> printObjOpt obj + f.Name + | AnonRecordGet(obj, ty, n) -> printExpr 0 obj + "." + ty.AnonRecordTypeDetails.SortedFieldNames.[n] + | FSharpFieldSet(obj, ty,f,arg) -> printObjOpt obj + f.Name + " <- " + printExpr 0 arg + | Sequential(e1,e2) -> "(" + printExpr 0 e1 + "; " + printExpr 0 e2 + ")" + | ThisValue _ -> "this" + | TryFinally(e1,e2) -> "try " + printExpr 0 e1 + " finally " + printExpr 0 e2 + | TryWith(e1,_,_,vC,eC) -> "try " + printExpr 0 e1 + " with " + vC.CompiledName + " -> " + printExpr 0 eC + | TupleGet(ty,n,e1) -> printExpr 10 e1 + ".Item" + string n + | DecisionTree(dtree,targets) -> "match " + printExpr 10 dtree + " targets ..." + | DecisionTreeSuccess (tg,es) -> "$" + string tg + | TypeLambda(gp1,e1) -> "FUN ... -> " + printExpr 0 e1 + | TypeTest(ty,e1) -> printExpr 10 e1 + " :? " + printTy ty + | UnionCaseSet(obj,ty,uc,f1,e1) -> printExpr 10 obj + "." + f1.Name + " <- " + printExpr 0 e1 + | UnionCaseGet(obj,ty,uc,f1) -> printExpr 10 obj + "." + f1.Name + | UnionCaseTest(obj,ty,f1) -> printExpr 10 obj + ".Is" + f1.Name + | UnionCaseTag(obj,ty) -> printExpr 10 obj + ".Tag" + | ObjectExpr(ty,basecall,overrides,iimpls) -> "{ " + printExpr 10 basecall + " with " + printOverrides overrides + " " + printIimpls iimpls + " }" + | TraitCall(tys,nm,_,argtys,tinst,args) -> "trait call " + nm + printTupledArgs args + | Const(obj,ty) -> + match obj with | :? string as s -> "\"" + s + "\"" | null -> "()" | _ -> string obj - | BasicPatterns.Value(v) -> v.CompiledName - | BasicPatterns.ValueSet(v,e1) -> quote low (v.CompiledName + " <- " + printExpr 0 e1) - | BasicPatterns.WhileLoop(e1,e2) -> "while " + printExpr 0 e1 + " do " + printExpr 0 e2 + " done" + | Value(v) -> v.CompiledName + | ValueSet(v,e1) -> quote low (v.CompiledName + " <- " + printExpr 0 e1) + | WhileLoop(e1,e2) -> "while " + printExpr 0 e1 + " do " + printExpr 0 e2 + " done" | _ -> failwith (sprintf "unrecognized %+A" e) and quote low s = if low > 0 then "(" + s + ")" else s @@ -162,7 +167,7 @@ module internal Utils = and printTy ty = ty.Format(FSharpDisplayContext.Empty) and printTyargs tyargs = match tyargs with [] -> "" | args -> "<" + String.concat "," (List.map printTy tyargs) + ">" and printOverrides ors = String.concat ";" (List.map printOverride ors) - and printOverride o = + and printOverride o = match o.CurriedParameterGroups with | [t] :: a -> "member " + t.CompiledName + "." + o.Signature.Name + printCurriedParams a + " = " + printExpr 10 o.Body @@ -197,37 +202,37 @@ module internal Utils = yield "" } - let rec printDeclaration (excludes:HashSet<_> option) (d: FSharpImplementationFileDeclaration) = + let rec printDeclaration (excludes:HashSet<_> option) (d: FSharpImplementationFileDeclaration) = seq { - match d with + match d with | FSharpImplementationFileDeclaration.Entity(e,ds) -> yield sprintf "type %s" e.LogicalName yield! printDeclarations excludes ds | FSharpImplementationFileDeclaration.MemberOrFunctionOrValue(v,vs,e) -> - - if not v.IsCompilerGenerated && + + if not v.IsCompilerGenerated && not (match excludes with None -> false | Some t -> t.Contains v.CompiledName) then - let text = + let text = //printfn "%s" v.CompiledName // try - if v.IsMember then + if v.IsMember then sprintf "member %s%s = %s @ %s" v.CompiledName (printCurriedParams vs) (printExpr 0 e) (e.Range.ToShortString()) - else + else sprintf "let %s%s = %s @ %s" v.CompiledName (printCurriedParams vs) (printExpr 0 e) (e.Range.ToShortString()) -// with e -> +// with e -> // printfn "FAILURE STACK: %A" e // sprintf "!!!!!!!!!! FAILED on %s @ %s, message: %s" v.CompiledName (v.DeclarationLocation.ToString()) e.Message yield text | FSharpImplementationFileDeclaration.InitAction(e) -> yield sprintf "do %s" (printExpr 0 e) } - and printDeclarations excludes ds = - seq { for d in ds do + and printDeclarations excludes ds = + seq { for d in ds do yield! printDeclaration excludes d } - let rec exprsOfDecl (d: FSharpImplementationFileDeclaration) = + let rec exprsOfDecl (d: FSharpImplementationFileDeclaration) = seq { - match d with + match d with | FSharpImplementationFileDeclaration.Entity(e,ds) -> yield! exprsOfDecls ds | FSharpImplementationFileDeclaration.MemberOrFunctionOrValue(v,vs,e) -> @@ -235,14 +240,14 @@ module internal Utils = yield e, e.Range | FSharpImplementationFileDeclaration.InitAction(e) -> yield e, e.Range } - and exprsOfDecls ds = - seq { for d in ds do + and exprsOfDecls ds = + seq { for d in ds do yield! exprsOfDecl d } let printGenericConstraint name (p: FSharpGenericParameterConstraint) = if p.IsCoercesToConstraint then - Some <| name + " :> " + printTy p.CoercesToTarget - elif p.IsComparisonConstraint then + Some <| name + " :> " + printTy p.CoercesToTarget + elif p.IsComparisonConstraint then Some <| name + " : comparison" elif p.IsEqualityConstraint then Some <| name + " : equality" @@ -257,69 +262,69 @@ module internal Utils = else None let printGenericParameter (p: FSharpGenericParameter) = - let name = + let name = if p.Name.StartsWith("?", StringComparison.Ordinal) then "_" - elif p.IsSolveAtCompileTime then "^" + p.Name + elif p.IsSolveAtCompileTime then "^" + p.Name else "'" + p.Name let constraints = p.Constraints |> Seq.choose (printGenericConstraint name) |> List.ofSeq name, constraints - + let printMemberSignature (v: FSharpMemberOrFunctionOrValue) = let genParams = let ps = v.GenericParameters |> Seq.map printGenericParameter |> List.ofSeq if List.isEmpty ps then "" else let constraints = ps |> List.collect snd - "<" + (ps |> Seq.map fst |> String.concat ", ") + + "<" + (ps |> Seq.map fst |> String.concat ", ") + (if List.isEmpty constraints then "" else " when " + String.concat " and " constraints) + ">" v.CompiledName + genParams + ": " + printTy v.FullType - let rec collectMembers (e:FSharpExpr) = - match e with - | BasicPatterns.AddressOf(e) -> collectMembers e - | BasicPatterns.AddressSet(e1,e2) -> Seq.append (collectMembers e1) (collectMembers e2) - | BasicPatterns.Application(f,_,args) -> Seq.append (collectMembers f) (Seq.collect collectMembers args) - | BasicPatterns.BaseValue(_) -> Seq.empty - | BasicPatterns.Call(Some obj,v,_,_,argsL) -> Seq.concat [ collectMembers obj; Seq.singleton v; Seq.collect collectMembers argsL ] - | BasicPatterns.Call(None,v,_,_,argsL) -> Seq.concat [ Seq.singleton v; Seq.collect collectMembers argsL ] - | BasicPatterns.Coerce(_,e) -> collectMembers e - | BasicPatterns.DefaultValue(_) -> Seq.empty - | BasicPatterns.FastIntegerForLoop (fromArg, toArg, body, _) -> Seq.collect collectMembers [ fromArg; toArg; body ] - | BasicPatterns.ILAsm(_,_,args) -> Seq.collect collectMembers args - | BasicPatterns.ILFieldGet (Some e,_,_) -> collectMembers e - | BasicPatterns.ILFieldGet _ -> Seq.empty - | BasicPatterns.ILFieldSet (Some e,_,_,v) -> Seq.append (collectMembers e) (collectMembers v) - | BasicPatterns.ILFieldSet _ -> Seq.empty - | BasicPatterns.IfThenElse (a,b,c) -> Seq.collect collectMembers [ a; b; c ] - | BasicPatterns.Lambda(v,e1) -> collectMembers e1 - | BasicPatterns.Let((v,e1),b) -> Seq.append (collectMembers e1) (collectMembers b) - | BasicPatterns.LetRec(vse,b) -> Seq.append (vse |> Seq.collect (snd >> collectMembers)) (collectMembers b) - | BasicPatterns.NewArray(_,es) -> Seq.collect collectMembers es - | BasicPatterns.NewDelegate(ty,es) -> collectMembers es - | BasicPatterns.NewObject(v,tys,args) -> Seq.append (Seq.singleton v) (Seq.collect collectMembers args) - | BasicPatterns.NewRecord(v,args) -> Seq.collect collectMembers args - | BasicPatterns.NewTuple(v,args) -> Seq.collect collectMembers args - | BasicPatterns.NewUnionCase(ty,uc,args) -> Seq.collect collectMembers args - | BasicPatterns.Quote(e1) -> collectMembers e1 - | BasicPatterns.FSharpFieldGet(Some obj, _,_) -> collectMembers obj - | BasicPatterns.FSharpFieldGet _ -> Seq.empty - | BasicPatterns.FSharpFieldSet(Some obj,_,_,arg) -> Seq.append (collectMembers obj) (collectMembers arg) - | BasicPatterns.FSharpFieldSet(None,_,_,arg) -> collectMembers arg - | BasicPatterns.Sequential(e1,e2) -> Seq.append (collectMembers e1) (collectMembers e2) - | BasicPatterns.ThisValue _ -> Seq.empty - | BasicPatterns.TryFinally(e1,e2) -> Seq.append (collectMembers e1) (collectMembers e2) - | BasicPatterns.TryWith(e1,_,f,_,eC) -> Seq.collect collectMembers [ e1; f; eC ] - | BasicPatterns.TupleGet(ty,n,e1) -> collectMembers e1 - | BasicPatterns.DecisionTree(dtree,targets) -> Seq.append (collectMembers dtree) (targets |> Seq.collect (snd >> collectMembers)) - | BasicPatterns.DecisionTreeSuccess (tg,es) -> Seq.collect collectMembers es - | BasicPatterns.TypeLambda(gp1,e1) -> collectMembers e1 - | BasicPatterns.TypeTest(ty,e1) -> collectMembers e1 - | BasicPatterns.UnionCaseSet(obj,ty,uc,f1,e1) -> Seq.append (collectMembers obj) (collectMembers e1) - | BasicPatterns.UnionCaseGet(obj,ty,uc,f1) -> collectMembers obj - | BasicPatterns.UnionCaseTest(obj,ty,f1) -> collectMembers obj - | BasicPatterns.UnionCaseTag(obj,ty) -> collectMembers obj - | BasicPatterns.ObjectExpr(ty,basecall,overrides,iimpls) -> + let rec collectMembers (e:FSharpExpr) = + match e with + | AddressOf(e) -> collectMembers e + | AddressSet(e1,e2) -> Seq.append (collectMembers e1) (collectMembers e2) + | Application(f,_,args) -> Seq.append (collectMembers f) (Seq.collect collectMembers args) + | BaseValue(_) -> Seq.empty + | Call(Some obj,v,_,_,argsL) -> Seq.concat [ collectMembers obj; Seq.singleton v; Seq.collect collectMembers argsL ] + | Call(None,v,_,_,argsL) -> Seq.concat [ Seq.singleton v; Seq.collect collectMembers argsL ] + | Coerce(_,e) -> collectMembers e + | DefaultValue(_) -> Seq.empty + | FastIntegerForLoop (fromArg, toArg, body, _) -> Seq.collect collectMembers [ fromArg; toArg; body ] + | ILAsm(_,_,args) -> Seq.collect collectMembers args + | ILFieldGet (Some e,_,_) -> collectMembers e + | ILFieldGet _ -> Seq.empty + | ILFieldSet (Some e,_,_,v) -> Seq.append (collectMembers e) (collectMembers v) + | ILFieldSet _ -> Seq.empty + | IfThenElse (a,b,c) -> Seq.collect collectMembers [ a; b; c ] + | Lambda(v,e1) -> collectMembers e1 + | Let((v,e1),b) -> Seq.append (collectMembers e1) (collectMembers b) + | LetRec(vse,b) -> Seq.append (vse |> Seq.collect (snd >> collectMembers)) (collectMembers b) + | NewArray(_,es) -> Seq.collect collectMembers es + | NewDelegate(ty,es) -> collectMembers es + | NewObject(v,tys,args) -> Seq.append (Seq.singleton v) (Seq.collect collectMembers args) + | NewRecord(v,args) -> Seq.collect collectMembers args + | NewTuple(v,args) -> Seq.collect collectMembers args + | NewUnionCase(ty,uc,args) -> Seq.collect collectMembers args + | Quote(e1) -> collectMembers e1 + | FSharpFieldGet(Some obj, _,_) -> collectMembers obj + | FSharpFieldGet _ -> Seq.empty + | FSharpFieldSet(Some obj,_,_,arg) -> Seq.append (collectMembers obj) (collectMembers arg) + | FSharpFieldSet(None,_,_,arg) -> collectMembers arg + | Sequential(e1,e2) -> Seq.append (collectMembers e1) (collectMembers e2) + | ThisValue _ -> Seq.empty + | TryFinally(e1,e2) -> Seq.append (collectMembers e1) (collectMembers e2) + | TryWith(e1,_,f,_,eC) -> Seq.collect collectMembers [ e1; f; eC ] + | TupleGet(ty,n,e1) -> collectMembers e1 + | DecisionTree(dtree,targets) -> Seq.append (collectMembers dtree) (targets |> Seq.collect (snd >> collectMembers)) + | DecisionTreeSuccess (tg,es) -> Seq.collect collectMembers es + | TypeLambda(gp1,e1) -> collectMembers e1 + | TypeTest(ty,e1) -> collectMembers e1 + | UnionCaseSet(obj,ty,uc,f1,e1) -> Seq.append (collectMembers obj) (collectMembers e1) + | UnionCaseGet(obj,ty,uc,f1) -> collectMembers obj + | UnionCaseTest(obj,ty,f1) -> collectMembers obj + | UnionCaseTag(obj,ty) -> collectMembers obj + | ObjectExpr(ty,basecall,overrides,iimpls) -> seq { yield! collectMembers basecall for o in overrides do @@ -328,17 +333,17 @@ module internal Utils = for o in i do yield! collectMembers o.Body } - | BasicPatterns.TraitCall(tys,nm,_,argtys,tinst,args) -> Seq.collect collectMembers args - | BasicPatterns.Const(obj,ty) -> Seq.empty - | BasicPatterns.Value(v) -> Seq.singleton v - | BasicPatterns.ValueSet(v,e1) -> Seq.append (Seq.singleton v) (collectMembers e1) - | BasicPatterns.WhileLoop(e1,e2) -> Seq.append (collectMembers e1) (collectMembers e2) + | TraitCall(tys,nm,_,argtys,tinst,args) -> Seq.collect collectMembers args + | Const(obj,ty) -> Seq.empty + | Value(v) -> Seq.singleton v + | ValueSet(v,e1) -> Seq.append (Seq.singleton v) (collectMembers e1) + | WhileLoop(e1,e2) -> Seq.append (collectMembers e1) (collectMembers e2) | _ -> failwith (sprintf "unrecognized %+A" e) - let rec printMembersOfDeclatations ds = - seq { - for d in ds do - match d with + let rec printMembersOfDeclatations ds = + seq { + for d in ds do + match d with | FSharpImplementationFileDeclaration.Entity(_,ds) -> yield! printMembersOfDeclatations ds | FSharpImplementationFileDeclaration.MemberOrFunctionOrValue(v,vs,e) -> @@ -353,12 +358,12 @@ let createOptionsAux fileSources extraArgs = let fileNames = fileSources |> List.map (fun _ -> Utils.getTempFileName()) let temp2 = Utils.getTempFileName() let fileNames = fileNames |> List.map (fun temp1 -> Utils.getTempFilePathChangeExt temp1 ".fs") - let dllName = Utils.getTempFilePathChangeExt temp2 ".dll" - let projFileName = Utils.getTempFilePathChangeExt temp2 ".fsproj" + let dllName = Utils.getTempFilePathChangeExt temp2 ".dll" + let projFileName = Utils.getTempFilePathChangeExt temp2 ".fsproj" Utils.createTempDir() - for (fileSource, fileName) in List.zip fileSources fileNames do - File.WriteAllText(fileName, fileSource) + for (fileSource: string, fileName) in List.zip fileSources fileNames do + FileSystem.OpenFileForWriteShim(fileName).Write(fileSource) let args = [| yield! extraArgs; yield! mkProjectCommandLineArgs (dllName, fileNames) |] let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) @@ -367,7 +372,7 @@ let createOptionsAux fileSources extraArgs = //--------------------------------------------------------------------------------------------------------- // This project is a smoke test for a whole range of standard and obscure expressions -module internal Project1 = +module internal Project1 = let fileSource1 = """ module M @@ -381,12 +386,12 @@ let tupleEx1 = (1, 1L) let tupleEx2 = (1, 1L, 1u) let tupleEx3 = (1, 1L, 1u, 1s) -let localExample = +let localExample = let y = 1 let z = 1 y, z -let localGenericFunctionExample() = +let localGenericFunctionExample() = let y = 1 let compiledAsLocalGenericFunction x = x compiledAsLocalGenericFunction y, compiledAsLocalGenericFunction 1.0 @@ -402,14 +407,14 @@ let testILCall2 = System.Console.WriteLine("176") let rec recValNeverUsedAtRuntime = recFuncIgnoresFirstArg (fun _ -> recValNeverUsedAtRuntime) 1 and recFuncIgnoresFirstArg g v = v -let testFun4() = +let testFun4() = // Test recursive values in expression position let rec recValNeverUsedAtRuntime = recFuncIgnoresFirstArg (fun _ -> recValNeverUsedAtRuntime) 1 and recFuncIgnoresFirstArg g v = v recValNeverUsedAtRuntime -type ClassWithImplicitConstructor(compiledAsArg: int) = +type ClassWithImplicitConstructor(compiledAsArg: int) = inherit obj() let compiledAsField = 1 let compiledAsLocal = 1 @@ -425,9 +430,9 @@ type ClassWithImplicitConstructor(compiledAsArg: int) = member __.M1() = compiledAsField + compiledAsGenericInstanceMethod compiledAsField + compiledAsArg member __.M2() = compiledAsInstanceMethod() - static member SM1() = compiledAsStaticField + compiledAsGenericStaticMethod compiledAsStaticField + static member SM1() = compiledAsStaticField + compiledAsGenericStaticMethod compiledAsStaticField static member SM2() = compiledAsStaticMethod() - //override __.ToString() = base.ToString() + string 999 + //override _.ToString() = base.ToString() + string 999 member this.TestCallinToString() = this.ToString() exception Error of int * int @@ -436,17 +441,17 @@ let err = Error(3,4) let matchOnException err = match err with Error(a,b) -> 3 | e -> raise e -let upwardForLoop () = +let upwardForLoop () = let mutable a = 1 for i in 0 .. 10 do a <- a + 1 a -let upwardForLoop2 () = +let upwardForLoop2 () = let mutable a = 1 for i = 0 to 10 do a <- a + 1 a -let downwardForLoop () = +let downwardForLoop () = let mutable a = 1 for i = 10 downto 1 do a <- a + 1 a @@ -455,9 +460,9 @@ let quotationTest1() = <@ 1 + 1 @> let quotationTest2 v = <@ %v + 1 @> type RecdType = { Field1: int; Field2: int } -type UnionType = Case1 of int | Case2 | Case3 of int * string +type UnionType = Case1 of int | Case2 | Case3 of int * string -type ClassWithEventsAndProperties() = +type ClassWithEventsAndProperties() = let ev = new Event<_>() static let sev = new Event<_>() member x.InstanceProperty = ev.Trigger(1); 1 @@ -473,26 +478,26 @@ System.Console.WriteLine("777") // do a top-levl action let functionWithSubmsumption(x:obj) = x :?> string //let functionWithCoercion(x:string) = (x :> obj) :?> string |> functionWithSubmsumption |> functionWithSubmsumption -type MultiArgMethods(c:int,d:int) = +type MultiArgMethods(c:int,d:int) = member x.Method(a:int, b : int) = 1 member x.CurriedMethod(a1:int, b1: int) (a2:int, b2:int) = 1 -let testFunctionThatCallsMultiArgMethods() = +let testFunctionThatCallsMultiArgMethods() = let m = MultiArgMethods(3,4) (m.Method(7,8) + m.CurriedMethod (9,10) (11,12)) -//let functionThatUsesObjectExpression() = -// { new obj() with member x.ToString() = string 888 } +//let functionThatUsesObjectExpression() = +// { new obj() with member x.ToString() = string 888 } // -//let functionThatUsesObjectExpressionWithInterfaceImpl() = -// { new obj() with -// member x.ToString() = string 888 -// interface System.IComparable with -// member x.CompareTo(y:obj) = 0 } +//let functionThatUsesObjectExpressionWithInterfaceImpl() = +// { new obj() with +// member x.ToString() = string 888 +// interface System.IComparable with +// member x.CompareTo(y:obj) = 0 } let testFunctionThatUsesUnitsOfMeasure (x : float<_>) (y: float<_>) = x + y -let testFunctionThatUsesAddressesAndByrefs (x: byref) = +let testFunctionThatUsesAddressesAndByrefs (x: byref) = let mutable w = 4 let y1 = &x // address-of let y2 = &w // address-of @@ -500,7 +505,7 @@ let testFunctionThatUsesAddressesAndByrefs (x: byref) = let r = ref 3 // address-of let y3 = &arr.[0] // address-of array let y4 = &r.contents // address-of field - let z = x + y1 + y2 + y3 // dereference + let z = x + y1 + y2 + y3 // dereference w <- 3 // assign to pointer x <- 4 // assign to byref y2 <- 4 // assign to byref @@ -509,7 +514,7 @@ let testFunctionThatUsesAddressesAndByrefs (x: byref) = let testFunctionThatUsesStructs1 (dt:System.DateTime) = dt.AddDays(3.0) -let testFunctionThatUsesStructs2 () = +let testFunctionThatUsesStructs2 () = let dt1 = System.DateTime.Now let mutable dt2 = System.DateTime.Now let dt3 = dt1 - dt2 @@ -519,20 +524,20 @@ let testFunctionThatUsesStructs2 () = let dt7 = dt6 - dt4 dt7 -let testFunctionThatUsesWhileLoop() = +let testFunctionThatUsesWhileLoop() = let mutable x = 1 while x < 100 do x <- x + 1 x -let testFunctionThatUsesTryWith() = - try +let testFunctionThatUsesTryWith() = + try testFunctionThatUsesWhileLoop() with :? System.ArgumentException as e -> e.Message.Length -let testFunctionThatUsesTryFinally() = - try +let testFunctionThatUsesTryFinally() = + try testFunctionThatUsesWhileLoop() finally System.Console.WriteLine("8888") @@ -543,36 +548,36 @@ type System.Console with type System.DateTime with member x.TwoMinute = x.Minute + x.Minute -let testFunctionThatUsesExtensionMembers() = +let testFunctionThatUsesExtensionMembers() = System.Console.WriteTwoLines() let v = System.DateTime.Now.TwoMinute System.Console.WriteTwoLines() -let testFunctionThatUsesOptionMembers() = +let testFunctionThatUsesOptionMembers() = let x = Some(3) (x.IsSome, x.IsNone) -let testFunctionThatUsesOverAppliedFunction() = +let testFunctionThatUsesOverAppliedFunction() = id id 3 -let testFunctionThatUsesPatternMatchingOnLists(x) = - match x with +let testFunctionThatUsesPatternMatchingOnLists(x) = + match x with | [] -> 1 | [h] -> 2 | [h;h2] -> 3 | _ -> 4 -let testFunctionThatUsesPatternMatchingOnOptions(x) = - match x with +let testFunctionThatUsesPatternMatchingOnOptions(x) = + match x with | None -> 1 | Some h -> 2 + h -let testFunctionThatUsesPatternMatchingOnOptions2(x) = - match x with +let testFunctionThatUsesPatternMatchingOnOptions2(x) = + match x with | None -> 1 | Some _ -> 2 -let testFunctionThatUsesConditionalOnOptions2(x: int option) = +let testFunctionThatUsesConditionalOnOptions2(x: int option) = if x.IsSome then 1 else 2 let f x y = x+y @@ -610,14 +615,14 @@ let test11(s:string) = let rec badLoop : (int -> int) = () // so that it is a function value - fun x -> badLoop (x + 1) + fun x -> badLoop (x + 1) module LetLambda = let f = () // so that it is a function value fun a b -> a + b -let letLambdaRes = [ 1, 2 ] |> List.map (fun (a, b) -> LetLambda.f a b) +let letLambdaRes = [ 1, 2 ] |> List.map (fun (a, b) -> LetLambda.f a b) let anonRecd = {| X = 1; Y = 2 |} let anonRecdGet = (anonRecd.X, anonRecd.Y) @@ -725,13 +730,13 @@ let ``Test Unoptimized Declarations Project1`` () = let exprChecker = FSharpChecker.Create(keepAssemblyContents=true) let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project1 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 3 // recursive value warning - wholeProjectResults.Errors.[0].Severity |> shouldEqual FSharpErrorSeverity.Warning - wholeProjectResults.Errors.[1].Severity |> shouldEqual FSharpErrorSeverity.Warning - wholeProjectResults.Errors.[2].Severity |> shouldEqual FSharpErrorSeverity.Warning + wholeProjectResults.Diagnostics.Length |> shouldEqual 3 // recursive value warning + wholeProjectResults.Diagnostics.[0].Severity |> shouldEqual FSharpDiagnosticSeverity.Warning + wholeProjectResults.Diagnostics.[1].Severity |> shouldEqual FSharpDiagnosticSeverity.Warning + wholeProjectResults.Diagnostics.[2].Severity |> shouldEqual FSharpDiagnosticSeverity.Warning wholeProjectResults.AssemblyContents.ImplementationFiles.Length |> shouldEqual 2 let file1 = wholeProjectResults.AssemblyContents.ImplementationFiles.[0] @@ -841,13 +846,13 @@ let ``Test Unoptimized Declarations Project1`` () = printfn "// unoptimized" printfn "let expected =\n%A" (printDeclarations None (List.ofSeq file1.Declarations) |> Seq.toList) printfn "let expected2 =\n%A" (printDeclarations None (List.ofSeq file2.Declarations) |> Seq.toList) - printDeclarations None (List.ofSeq file1.Declarations) - |> Seq.toList + printDeclarations None (List.ofSeq file1.Declarations) + |> Seq.toList |> Utils.filterHack |> shouldPairwiseEqual (Utils.filterHack expected) - printDeclarations None (List.ofSeq file2.Declarations) - |> Seq.toList + printDeclarations None (List.ofSeq file2.Declarations) + |> Seq.toList |> Utils.filterHack |> shouldPairwiseEqual (Utils.filterHack expected2) @@ -860,13 +865,13 @@ let ``Test Optimized Declarations Project1`` () = let exprChecker = FSharpChecker.Create(keepAssemblyContents=true) let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project1 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 3 // recursive value warning - wholeProjectResults.Errors.[0].Severity |> shouldEqual FSharpErrorSeverity.Warning - wholeProjectResults.Errors.[1].Severity |> shouldEqual FSharpErrorSeverity.Warning - wholeProjectResults.Errors.[2].Severity |> shouldEqual FSharpErrorSeverity.Warning + wholeProjectResults.Diagnostics.Length |> shouldEqual 3 // recursive value warning + wholeProjectResults.Diagnostics.[0].Severity |> shouldEqual FSharpDiagnosticSeverity.Warning + wholeProjectResults.Diagnostics.[1].Severity |> shouldEqual FSharpDiagnosticSeverity.Warning + wholeProjectResults.Diagnostics.[2].Severity |> shouldEqual FSharpDiagnosticSeverity.Warning wholeProjectResults.GetOptimizedAssemblyContents().ImplementationFiles.Length |> shouldEqual 2 let file1 = wholeProjectResults.GetOptimizedAssemblyContents().ImplementationFiles.[0] @@ -977,13 +982,13 @@ let ``Test Optimized Declarations Project1`` () = printfn "// optimized" printfn "let expected =\n%A" (printDeclarations None (List.ofSeq file1.Declarations) |> Seq.toList) printfn "let expected2 =\n%A" (printDeclarations None (List.ofSeq file2.Declarations) |> Seq.toList) - printDeclarations None (List.ofSeq file1.Declarations) - |> Seq.toList + printDeclarations None (List.ofSeq file1.Declarations) + |> Seq.toList |> Utils.filterHack |> shouldPairwiseEqual (Utils.filterHack expected) - printDeclarations None (List.ofSeq file2.Declarations) - |> Seq.toList + printDeclarations None (List.ofSeq file2.Declarations) + |> Seq.toList |> Utils.filterHack |> shouldPairwiseEqual (Utils.filterHack expected2) @@ -1003,7 +1008,7 @@ let testOperators dnName fsName excludedTests expectedUnoptimized expectedOptimi let source = System.String.Format(Project1.operatorTests, dnName, fsName) let replace (s:string) r = s.Replace("let " + r, "// let " + r) let fileSource = excludedTests |> List.fold replace source - File.WriteAllText(filePath, fileSource) + FileSystem.OpenFileForWriteShim(filePath).Write(fileSource) let args = mkProjectCommandLineArgsSilent (dllPath, [filePath]) @@ -1014,7 +1019,7 @@ let testOperators dnName fsName excludedTests expectedUnoptimized expectedOptimi let currentAssemblyToken = let fsCore = referencedAssemblies |> List.tryFind (fun asm -> asm.SimpleName = "FSharp.Core") match fsCore with - | Some core -> + | Some core -> if core.QualifiedName.StartsWith("FSharp.Core, Version=5.0") then FC50 elif core.QualifiedName.StartsWith("FSharp.Core, Version=4.7") then FC47 elif core.QualifiedName.StartsWith("FSharp.Core, Version=4.6") then FC46 @@ -1025,20 +1030,20 @@ let testOperators dnName fsName excludedTests expectedUnoptimized expectedOptimi printfn "Referenced assembly %s: %O" r.QualifiedName r.FileName let errors = StringBuilder() - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "%s Operator Tests error: <<<%s>>>" dnName e.Message errors.AppendLine e.Message |> ignore errors.ToString() |> shouldEqual "" - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 - let resultUnoptimized = - wholeProjectResults.AssemblyContents.ImplementationFiles.[0].Declarations + let resultUnoptimized = + wholeProjectResults.AssemblyContents.ImplementationFiles.[0].Declarations |> printDeclarations None |> Seq.toList - let resultOptimized = - wholeProjectResults.GetOptimizedAssemblyContents().ImplementationFiles.[0].Declarations + let resultOptimized = + wholeProjectResults.GetOptimizedAssemblyContents().ImplementationFiles.[0].Declarations |> printDeclarations None |> Seq.toList @@ -1061,7 +1066,7 @@ let testOperators dnName fsName excludedTests expectedUnoptimized expectedOptimi let filterTests result expected = List.zip result expected |> List.choose (fun (result, (when', s)) -> - if List.isEmpty when' then + if List.isEmpty when' then countFC45 <- countFC45 + 1 countFC46 <- countFC46 + 1 countFC47 <- countFC47 + 1 @@ -1074,7 +1079,7 @@ let testOperators dnName fsName excludedTests expectedUnoptimized expectedOptimi if when' |> List.contains FC50 then countFC50 <- countFC50 + 1 if when' |> List.contains currentAssemblyToken then Some(result, s) - else + else None) |> List.unzip @@ -1108,7 +1113,7 @@ let ``Test Operator Declarations for Byte`` () = "testByteUnaryNegOperator"; "testByteUnaryNegChecked"; ] - + let expectedUnoptimized = [ [], "type OperatorTestsByte" [], "let testByteEqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,63--4,72)" @@ -1215,7 +1220,7 @@ let ``Test Operator Declarations for Byte`` () = [] let ``Test Operator Declarations for SByte`` () = let excludedTests = [ ] - + let expectedUnoptimized = [ [], "type OperatorTestsSByte" [], "let testSByteEqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,66--4,75)" @@ -1324,7 +1329,7 @@ let ``Test Operator Declarations for SByte`` () = [] let ``Test Operator Declarations for Int16`` () = let excludedTests = [ ] - + let expectedUnoptimized = [ [], "type OperatorTestsInt16" [], "let testInt16EqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,66--4,75)" @@ -1436,7 +1441,7 @@ let ``Test Operator Declarations for UInt16`` () = "testUInt16UnaryNegOperator"; "testUInt16UnaryNegChecked"; ] - + let expectedUnoptimized = [ [], "type OperatorTestsUInt16" [], "let testUInt16EqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,69--4,78)" @@ -1541,7 +1546,7 @@ let ``Test Operator Declarations for UInt16`` () = [] let ``Test Operator Declarations for Int`` () = let excludedTests = [ ] - + let expectedUnoptimized = [ [], "type OperatorTestsInt" [], "let testIntEqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,60--4,69)" @@ -1650,7 +1655,7 @@ let ``Test Operator Declarations for Int`` () = [] let ``Test Operator Declarations for Int32`` () = let excludedTests = [ ] - + let expectedUnoptimized = [ [], "type OperatorTestsInt32" [], "let testInt32EqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,66--4,75)" @@ -1763,7 +1768,7 @@ let ``Test Operator Declarations for UInt32`` () = "testUInt32UnaryNegOperator"; "testUInt32UnaryNegChecked"; ] - + let expectedUnoptimized = [ [], "type OperatorTestsUInt32" [], "let testUInt32EqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,69--4,78)" @@ -1868,7 +1873,7 @@ let ``Test Operator Declarations for UInt32`` () = [] let ``Test Operator Declarations for Int64`` () = let excludedTests = [ ] - + let expectedUnoptimized = [ [], "type OperatorTestsInt64" [], "let testInt64EqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,66--4,75)" @@ -1981,7 +1986,7 @@ let ``Test Operator Declarations for UInt64`` () = "testUInt64UnaryNegOperator"; "testUInt64UnaryNegChecked"; ] - + let expectedUnoptimized = [ [], "type OperatorTestsUInt64" [], "let testUInt64EqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,69--4,78)" @@ -2086,7 +2091,7 @@ let ``Test Operator Declarations for UInt64`` () = [] let ``Test Operator Declarations for IntPtr`` () = let excludedTests = [ ] - + let expectedUnoptimized = [ [], "type OperatorTestsIntPtr" [], "let testIntPtrEqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,75--4,84)" @@ -2198,7 +2203,7 @@ let ``Test Operator Declarations for UIntPtr`` () = "testUIntPtrUnaryNegOperator"; "testUIntPtrUnaryNegChecked"; ] - + let expectedUnoptimized = [ [], "type OperatorTestsUIntPtr" [], "let testUIntPtrEqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,78--4,87)" @@ -2507,7 +2512,7 @@ let ``Test Operator Declarations for Single with unit of measure`` () = [], "let testSingleUnitizedToCharOperator(e1) = Operators.ToChar> (fun arg0_0 -> LanguagePrimitives.ExplicitDynamic,Microsoft.FSharp.Core.char> (arg0_0),e1) @ (55,98--55,105)" [FC47; FC50], "let testSingleUnitizedToStringOperator(e1) = let x: Microsoft.FSharp.Core.float32 = Operators.ToSingle> (fun arg0_0 -> LanguagePrimitives.ExplicitDynamic,Microsoft.FSharp.Core.float32> (arg0_0),e1) in x.ToString(dflt,CultureInfo.get_InvariantCulture () :> System.IFormatProvider) @ (56,98--56,107)" ] - + testOperators "SingleUnitized" "float32" excludedTests expectedUnoptimized expectedOptimized [] @@ -2519,7 +2524,7 @@ let ``Test Operator Declarations for Double`` () = "testDoubleShiftLeftOperator"; "testDoubleShiftRightOperator"; ] - + let expectedUnoptimized = [ [], "type OperatorTestsDouble" [], "let testDoubleEqualsOperator(e1) (e2) = Operators.op_Equality (e1,e2) @ (4,67--4,76)" @@ -2990,13 +2995,13 @@ let ``Test Operator Declarations for String`` () = //--------------------------------------------------------------------------------------------------------- // This big list expression was causing us trouble -module internal ProjectStressBigExpressions = +module internal ProjectStressBigExpressions = let fileSource1 = """ -module StressBigExpressions +module StressBigExpressions -let BigListExpression = +let BigListExpression = [("C", "M.C", "file1", ((3, 5), (3, 6)), ["class"]); ("( .ctor )", "M.C.( .ctor )", "file1", ((3, 5), (3, 6)),["member"; "ctor"]); @@ -3016,7 +3021,7 @@ let BigListExpression = ("M", "M", "file1", ((1, 7), (1, 8)), ["module"]); ("D1", "N.D1", "file2", ((5, 5), (5, 7)), ["class"]); ("( .ctor )", "N.D1.( .ctor )", "file2", ((5, 5), (5, 7)),["member"; "ctor"]); - ("SomeProperty", "N.D1.SomeProperty", "file2", ((6, 13), (6, 25)),["member"; "getter"]); + ("SomeProperty", "N.D1.SomeProperty", "file2", ((6, 13), (6, 25)),["member"; "getter"]); ("x", "x", "file2", ((6, 11), (6, 12)), []); ("M", "M", "file2", ((6, 28), (6, 29)), ["module"]); ("xxx", "M.xxx", "file2", ((6, 28), (6, 33)), ["val"]); @@ -3089,7 +3094,7 @@ let BigListExpression = ("mmmm2", "N.mmmm2", "file2", ((39, 4), (39, 9)), ["val"]); ("N", "N", "file2", ((1, 7), (1, 8)), ["module"])] -let BigSequenceExpression(outFileOpt,docFileOpt,baseAddressOpt) = +let BigSequenceExpression(outFileOpt,docFileOpt,baseAddressOpt) = [ yield "--simpleresolution" yield "--noframework" match outFileOpt with @@ -3132,7 +3137,7 @@ let BigSequenceExpression(outFileOpt,docFileOpt,baseAddressOpt) = yield "--fullpaths" yield "--flaterrors" if true then yield "--warnaserror" - yield + yield if true then "--target:library" else "--target:exe" for symbol in [] do @@ -3149,7 +3154,7 @@ let BigSequenceExpression(outFileOpt,docFileOpt,baseAddressOpt) = else "--tailcalls-" match baseAddressOpt with | None -> () - | Some debugType -> + | Some debugType -> match "" with | "NONE" -> () | "PDBONLY" -> yield "--debug:pdbonly" @@ -3172,12 +3177,12 @@ let BigSequenceExpression(outFileOpt,docFileOpt,baseAddressOpt) = for f in [] do yield "--resource:" + f for i in [] do - yield "--lib:" + yield "--lib:" for r in [] do - yield "-r:" + r + yield "-r:" + r yield! [] ] - + """ @@ -3190,8 +3195,8 @@ let ``Test expressions of declarations stress big expressions`` () = use _holder = cleanup let exprChecker = FSharpChecker.Create(keepAssemblyContents=true) let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - - wholeProjectResults.Errors.Length |> shouldEqual 0 + + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 wholeProjectResults.AssemblyContents.ImplementationFiles.Length |> shouldEqual 1 let file1 = wholeProjectResults.AssemblyContents.ImplementationFiles.[0] @@ -3206,8 +3211,8 @@ let ``Test expressions of optimized declarations stress big expressions`` () = use _holder = cleanup let exprChecker = FSharpChecker.Create(keepAssemblyContents=true) let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - - wholeProjectResults.Errors.Length |> shouldEqual 0 + + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 wholeProjectResults.GetOptimizedAssemblyContents().ImplementationFiles.Length |> shouldEqual 1 let file1 = wholeProjectResults.GetOptimizedAssemblyContents().ImplementationFiles.[0] @@ -3218,7 +3223,7 @@ let ``Test expressions of optimized declarations stress big expressions`` () = //--------------------------------------------------------------------------------------------------------- // This project is for witness arguments (CallWithWitnesses) -module internal ProjectForWitnesses1 = +module internal ProjectForWitnesses1 = let fileSource1 = """ module M @@ -3267,13 +3272,13 @@ let ``Test ProjectForWitnesses1`` () = let exprChecker = FSharpChecker.Create(keepAssemblyContents=true) let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project1 error: <<<%s>>>" e.Message wholeProjectResults.AssemblyContents.ImplementationFiles.Length |> shouldEqual 1 let file1 = wholeProjectResults.AssemblyContents.ImplementationFiles.[0] - let expected = + let expected = ["type M"; "let callX(x) (y) = trait call X(x,y) @ (5,35--5,88)"; "let callXY(x) (y) = (trait call Y1(x,y); trait call Y2(x,y)) @ (9,4--10,60)"; "type C"; "type D"; @@ -3296,9 +3301,9 @@ let ``Test ProjectForWitnesses1`` () = "let f7(unitVar0) = M.callXY (fun arg0_0 -> fun arg1_0 -> C.Y1 (arg0_0,arg1_0),fun arg0_0 -> fun arg1_0 -> C.Y2 (arg0_0,arg1_0),new C(()),new D(())) @ (35,11--35,29)"; "let f8(unitVar0) = M.callXY (fun arg0_0 -> fun arg1_0 -> D.Y1 (arg0_0,arg1_0),fun arg0_0 -> fun arg1_0 -> D.Y2 (arg0_0,arg1_0),new D(()),new C(())) @ (36,11--36,29)"] - let actual = + let actual = printDeclarations None (List.ofSeq file1.Declarations) - |> Seq.toList + |> Seq.toList printfn "actual:\n\n%A" actual actual |> shouldPairwiseEqual expected @@ -3311,11 +3316,11 @@ let ``Test ProjectForWitnesses1 GetWitnessPassingInfo`` () = let exprChecker = FSharpChecker.Create(keepAssemblyContents=true) let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "ProjectForWitnesses1 error: <<<%s>>>" e.Message begin - let symbol = + let symbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.tryFind (fun su -> su.Symbol.DisplayName = "callX") |> Option.orElseWith (fun _ -> failwith "Could not get symbol") @@ -3323,7 +3328,7 @@ let ``Test ProjectForWitnesses1 GetWitnessPassingInfo`` () = |> Option.get printfn "symbol = %s" symbol.FullName let wpi = (symbol.GetWitnessPassingInfo()) - match wpi with + match wpi with | None -> failwith "witness passing info expected" | Some (nm, argTypes) -> nm |> shouldEqual "callX$W" @@ -3334,7 +3339,7 @@ let ``Test ProjectForWitnesses1 GetWitnessPassingInfo`` () = begin - let symbol = + let symbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.tryFind (fun su -> su.Symbol.DisplayName = "callXY") |> Option.orElseWith (fun _ -> failwith "Could not get symbol") @@ -3342,7 +3347,7 @@ let ``Test ProjectForWitnesses1 GetWitnessPassingInfo`` () = |> Option.get printfn "symbol = %s" symbol.FullName let wpi = (symbol.GetWitnessPassingInfo()) - match wpi with + match wpi with | None -> failwith "witness passing info expected" | Some (nm, argTypes) -> nm |> shouldEqual "callXY$W" @@ -3359,7 +3364,7 @@ let ``Test ProjectForWitnesses1 GetWitnessPassingInfo`` () = //--------------------------------------------------------------------------------------------------------- // This project is for witness arguments (CallWithWitnesses) -module internal ProjectForWitnesses2 = +module internal ProjectForWitnesses2 = let fileSource1 = """ module M @@ -3391,14 +3396,14 @@ let ``Test ProjectForWitnesses2`` () = let exprChecker = FSharpChecker.Create(keepAssemblyContents=true) let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "ProjectForWitnesses2 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 wholeProjectResults.AssemblyContents.ImplementationFiles.Length |> shouldEqual 1 let file1 = wholeProjectResults.AssemblyContents.ImplementationFiles.[0] - let expected = + let expected = ["type M"; "type Point"; "member get_Zero(unitVar0) = {x = 0; y = 0} @ (6,25--6,37)"; "member Neg(p) = {x = Operators.op_UnaryNegation (fun arg0_0 -> LanguagePrimitives.UnaryNegationDynamic (arg0_0),p.x); y = Operators.op_UnaryNegation (fun arg0_0 -> LanguagePrimitives.UnaryNegationDynamic (arg0_0),p.y)} @ (7,34--7,56)"; @@ -3408,9 +3413,9 @@ let ``Test ProjectForWitnesses2`` () = "member DivideByInt(_arg3,i) = let x: Microsoft.FSharp.Core.int = _arg3.Item in MyNumber(Operators.op_Division (fun arg0_0 -> fun arg1_0 -> LanguagePrimitives.DivisionDynamic (arg0_0,arg1_0),x,i)) @ (15,31--15,41)"; "type MyNumberWrapper"] - let actual = + let actual = printDeclarations None (List.ofSeq file1.Declarations) - |> Seq.toList + |> Seq.toList printfn "actual:\n\n%A" actual actual |> shouldPairwiseEqual expected @@ -3418,7 +3423,7 @@ let ``Test ProjectForWitnesses2`` () = //--------------------------------------------------------------------------------------------------------- // This project is for witness arguments, testing for https://github.com/dotnet/fsharp/issues/10364 -module internal ProjectForWitnesses3 = +module internal ProjectForWitnesses3 = let fileSource1 = """ module M @@ -3438,7 +3443,7 @@ let s2 = sign p1 """ let createOptions() = createOptionsAux [fileSource1] ["--langversion:preview"] - + [] let ``Test ProjectForWitnesses3`` () = let cleanup, options = createOptionsAux [ ProjectForWitnesses3.fileSource1 ] ["--langversion:preview"] @@ -3446,14 +3451,14 @@ let ``Test ProjectForWitnesses3`` () = let exprChecker = FSharpChecker.Create(keepAssemblyContents=true) let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "ProjectForWitnesses3 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 wholeProjectResults.AssemblyContents.ImplementationFiles.Length |> shouldEqual 1 let file1 = wholeProjectResults.AssemblyContents.ImplementationFiles.[0] - let expected = + let expected = ["type M"; "type Point"; "member get_Zero(unitVar0) = {x = 0; y = 0} @ (6,25--6,37)"; "member get_Sign(p) (unitVar1) = Operators.Sign (fun arg0_0 -> Operators.Sign (arg0_0),p.x) @ (7,20--7,28)"; @@ -3463,9 +3468,9 @@ let ``Test ProjectForWitnesses3`` () = "let s = ListModule.Sum (fun arg0_0 -> Point.get_Zero (()),fun arg0_0 -> fun arg1_0 -> Point.op_Addition (arg0_0,arg1_0),Cons(M.p1 (),Cons(M.p2 (),Empty()))) @ (13,8--13,25)"; "let s2 = Operators.Sign (fun arg0_0 -> arg0_0.get_Sign(()),M.p1 ()) @ (14,9--14,16)"] - let actual = + let actual = printDeclarations None (List.ofSeq file1.Declarations) - |> Seq.toList + |> Seq.toList printfn "actual:\n\n%A" actual actual |> shouldPairwiseEqual expected @@ -3477,11 +3482,11 @@ let ``Test ProjectForWitnesses3 GetWitnessPassingInfo`` () = let exprChecker = FSharpChecker.Create(keepAssemblyContents=true) let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "ProjectForWitnesses3 error: <<<%s>>>" e.Message begin - let symbol = + let symbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.tryFind (fun su -> su.Symbol.DisplayName = "sum") |> Option.orElseWith (fun _ -> failwith "Could not get symbol") @@ -3489,7 +3494,7 @@ let ``Test ProjectForWitnesses3 GetWitnessPassingInfo`` () = |> Option.get printfn "symbol = %s" symbol.FullName let wpi = (symbol.GetWitnessPassingInfo()) - match wpi with + match wpi with | None -> failwith "witness passing info expected" | Some (nm, argTypes) -> nm |> shouldEqual "Sum$W" @@ -3504,3 +3509,59 @@ let ``Test ProjectForWitnesses3 GetWitnessPassingInfo`` () = argText2 |> shouldEqual "type ^T -> ^T -> ^T" end +//--------------------------------------------------------------------------------------------------------- +// This project is for witness arguments, testing for https://github.com/dotnet/fsharp/issues/10364 + +module internal ProjectForWitnesses4 = + + let fileSource1 = """ +module M + +let isEmptyArray x = + match x with + | [| |] -> x + | _ -> x + +let isNull (ts : 't[]) = + match ts with + | null -> true + | _ -> false + +let isNullQuoted (ts : 't[]) = + <@ + match ts with + | null -> true + | _ -> false + @> + +""" + + let createOptions() = createOptionsAux [fileSource1] ["--langversion:preview"] + +[] +let ``Test ProjectForWitnesses4 GetWitnessPassingInfo`` () = + let cleanup, options = ProjectForWitnesses4.createOptions() + use _holder = cleanup + let exprChecker = FSharpChecker.Create(keepAssemblyContents=true) + let wholeProjectResults = exprChecker.ParseAndCheckProject(options) |> Async.RunSynchronously + + for e in wholeProjectResults.Diagnostics do + printfn "ProjectForWitnesses4 error: <<<%s>>>" e.Message + + Assert.AreEqual(wholeProjectResults.Diagnostics.Length, 0) + + wholeProjectResults.AssemblyContents.ImplementationFiles.Length |> shouldEqual 1 + let file1 = wholeProjectResults.AssemblyContents.ImplementationFiles.[0] + + let expected = + ["type M"; + "let isEmptyArray(x) = (if (if Operators.op_Inequality<'a Microsoft.FSharp.Core.[]> (x,dflt) then Operators.op_Equality (ArrayModule.Length<'a> (x),0) else False) then x else x) @ (5,10--5,11)"; + "let isNull(ts) = (if Operators.op_Equality<'t Microsoft.FSharp.Core.[]> (ts,dflt) then True else False) @ (10,10--10,12)"; + "let isNullQuoted(ts) = quote((if Operators.op_Equality<'t Microsoft.FSharp.Core.[]> (ts,dflt) then True else False)) @ (15,4--19,6)"] + + let actual = + printDeclarations None (List.ofSeq file1.Declarations) + |> Seq.toList + printfn "actual:\n\n%A" actual + actual + |> shouldPairwiseEqual expected diff --git a/tests/service/FileSystemTests.fs b/tests/service/FileSystemTests.fs index 59bb29f0553..a6dd94fcc45 100644 --- a/tests/service/FileSystemTests.fs +++ b/tests/service/FileSystemTests.fs @@ -13,107 +13,82 @@ open FsUnit open System open System.IO open System.Text -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.IO open FSharp.Compiler.Service.Tests.Common + let fileName1 = @"c:\mycode\test1.fs" // note, the path doesn' exist let fileName2 = @"c:\mycode\test2.fs" // note, the path doesn' exist -type internal MyFileSystem(defaultFileSystem:IFileSystem) = - let file1 = """ +#nowarn "57" + +let file1 = """ module File1 let A = 1""" - let file2 = """ + +let file2 = """ module File2 let B = File1.A + File1.A""" - let files = dict [(fileName1, file1); (fileName2, file2)] - interface IFileSystem with +type internal MyFileSystem() = + inherit DefaultFileSystem() + static member FilesCache = dict [(fileName1, file1); (fileName2, file2)] // Implement the service to open files for reading and writing - member __.FileStreamReadShim(fileName) = - match files.TryGetValue fileName with - | true, text -> new MemoryStream(Encoding.UTF8.GetBytes(text)) :> Stream - | _ -> defaultFileSystem.FileStreamReadShim(fileName) - - member __.FileStreamCreateShim(fileName) = - defaultFileSystem.FileStreamCreateShim(fileName) - - member __.IsStableFileHeuristic(fileName) = - defaultFileSystem.IsStableFileHeuristic(fileName) - - member __.FileStreamWriteExistingShim(fileName) = - defaultFileSystem.FileStreamWriteExistingShim(fileName) - - member __.ReadAllBytesShim(fileName) = - match files.TryGetValue fileName with - | true, text -> Encoding.UTF8.GetBytes(text) - | _ -> defaultFileSystem.ReadAllBytesShim(fileName) - - // Implement the service related to temporary paths and file time stamps - member __.GetTempPathShim() = defaultFileSystem.GetTempPathShim() - member __.GetLastWriteTimeShim(fileName) = defaultFileSystem.GetLastWriteTimeShim(fileName) - member __.GetFullPathShim(fileName) = defaultFileSystem.GetFullPathShim(fileName) - member __.IsInvalidPathShim(fileName) = defaultFileSystem.IsInvalidPathShim(fileName) - member __.IsPathRootedShim(fileName) = defaultFileSystem.IsPathRootedShim(fileName) - - // Implement the service related to file existence and deletion - member __.SafeExists(fileName) = files.ContainsKey(fileName) || defaultFileSystem.SafeExists(fileName) - member __.FileDelete(fileName) = defaultFileSystem.FileDelete(fileName) - - // Implement the service related to assembly loading, used to load type providers - // and for F# interactive. - member __.AssemblyLoadFrom(fileName) = defaultFileSystem.AssemblyLoadFrom fileName - member __.AssemblyLoad(assemblyName) = defaultFileSystem.AssemblyLoad assemblyName - -let UseMyFileSystem() = - let myFileSystem = MyFileSystem(Shim.FileSystem) - Shim.FileSystem <- myFileSystem - { new IDisposable with member x.Dispose() = Shim.FileSystem <- myFileSystem } - + override _.OpenFileForReadShim(filePath, ?useMemoryMappedFile: bool, ?shouldShadowCopy: bool) = + let shouldShadowCopy = defaultArg shouldShadowCopy false + let useMemoryMappedFile = defaultArg useMemoryMappedFile false + match MyFileSystem.FilesCache.TryGetValue filePath with + | true, text -> + new MemoryStream(Encoding.UTF8.GetBytes(text)) :> Stream + | _ -> base.OpenFileForReadShim(filePath, useMemoryMappedFile, shouldShadowCopy) + override _.FileExistsShim(fileName) = MyFileSystem.FilesCache.ContainsKey(fileName) || base.FileExistsShim(fileName) + +let UseMyFileSystem() = + let myFileSystem = MyFileSystem() + FileSystemAutoOpens.FileSystem <- myFileSystem + { new IDisposable with member x.Dispose() = FileSystemAutoOpens.FileSystem <- myFileSystem } [] #if NETCOREAPP [] #endif -let ``FileSystem compilation test``() = - if System.Environment.OSVersion.Platform = System.PlatformID.Win32NT then // file references only valid on Windows +let ``FileSystem compilation test``() = + if System.Environment.OSVersion.Platform = System.PlatformID.Win32NT then // file references only valid on Windows use myFileSystem = UseMyFileSystem() let programFilesx86Folder = System.Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") - let projectOptions = - let allFlags = - [| yield "--simpleresolution"; - yield "--noframework"; - yield "--debug:full"; - yield "--define:DEBUG"; - yield "--optimize-"; - yield "--doc:test.xml"; - yield "--warn:3"; - yield "--fullpaths"; - yield "--flaterrors"; - yield "--target:library"; - for r in [ sysLib "mscorlib"; sysLib "System"; sysLib "System.Core"; fsCoreDefaultReference() ] do + let projectOptions = + let allFlags = + [| yield "--simpleresolution"; + yield "--noframework"; + yield "--debug:full"; + yield "--define:DEBUG"; + yield "--optimize-"; + yield "--doc:test.xml"; + yield "--warn:3"; + yield "--fullpaths"; + yield "--flaterrors"; + yield "--target:library"; + for r in [ sysLib "mscorlib"; sysLib "System"; sysLib "System.Core"; fsCoreDefaultReference() ] do yield "-r:" + r |] - + { ProjectFileName = @"c:\mycode\compilation.fsproj" // Make a name that is unique in this directory. ProjectId = None SourceFiles = [| fileName1; fileName2 |] - OtherOptions = allFlags + OtherOptions = allFlags ReferencedProjects = [| |]; IsIncompleteTypeCheckEnvironment = false - UseScriptResolutionRules = true + UseScriptResolutionRules = true LoadTime = System.DateTime.Now // Not 'now', we don't want to force reloading - UnresolvedReferences = None + UnresolvedReferences = None OriginalLoadReferences = [] - ExtraProjectInfo = None Stamp = None } let results = checker.ParseAndCheckProject(projectOptions) |> Async.RunSynchronously - results.Errors.Length |> shouldEqual 0 + results.Diagnostics.Length |> shouldEqual 0 results.AssemblySignature.Entities.Count |> shouldEqual 2 results.AssemblySignature.Entities.[0].MembersFunctionsAndValues.Count |> shouldEqual 1 results.AssemblySignature.Entities.[0].MembersFunctionsAndValues.[0].DisplayName |> shouldEqual "B" - diff --git a/tests/service/FsiTests.fs b/tests/service/FsiTests.fs index 39ff624fbf2..58a3af852d8 100644 --- a/tests/service/FsiTests.fs +++ b/tests/service/FsiTests.fs @@ -40,8 +40,8 @@ let evalExpression text = | Some value -> sprintf "%A" value.ReflectionValue | None -> sprintf "null or no result" -let formatErrors (errs: FSharpErrorInfo[]) = - [ for err in errs do yield sprintf "%s %d,%d - %d,%d; %s" (match err.Severity with FSharpErrorSeverity.Error -> "error" | FSharpErrorSeverity.Warning -> "warning") err.StartLineAlternate err.StartColumn err.EndLineAlternate err.EndColumn err.Message ] +let formatErrors (errs: FSharpDiagnostic[]) = + [ for err in errs do yield sprintf "%s %d,%d - %d,%d; %s" (match err.Severity with FSharpDiagnosticSeverity.Error -> "error" | FSharpDiagnosticSeverity.Warning -> "warning") err.StartLineAlternate err.StartColumn err.EndLineAlternate err.EndColumn err.Message ] let showErrorsAndResult (x, errs) = [ match x with @@ -49,7 +49,7 @@ let showErrorsAndResult (x, errs) = | Choice2Of2 (exn:exn) -> yield sprintf "exception %s" exn.Message yield! formatErrors errs ] -let showErrors (x, errs: FSharpErrorInfo[]) = +let showErrors (x, errs: FSharpDiagnostic[]) = [ match x with | Choice1Of2 () -> () | Choice2Of2 (exn:exn) -> yield sprintf "exception %s" exn.Message diff --git a/tests/service/InteractiveCheckerTests.fs b/tests/service/InteractiveCheckerTests.fs index 90328a73d8f..21852fa1434 100644 --- a/tests/service/InteractiveCheckerTests.fs +++ b/tests/service/InteractiveCheckerTests.fs @@ -11,10 +11,10 @@ module FSharp.Compiler.Service.Tests.InteractiveChecker open NUnit.Framework open FsUnit open System -open FSharp.Compiler -open FSharp.Compiler.Range open FSharp.Compiler.Service.Tests.Common -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range let internal longIdentToString (longIdent: LongIdent) = String.Join(".", longIdent |> List.map (fun ident -> ident.ToString())) @@ -27,11 +27,11 @@ let internal identsAndRanges (input: ParsedInput) = let identAndRange ident (range: range) = (ident, rangeToTuple range) let extractFromComponentInfo (componentInfo: SynComponentInfo) = - let ((SynComponentInfo.ComponentInfo(_attrs, _typarDecls, _typarConstraints, longIdent, _, _, _, range))) = componentInfo + let ((SynComponentInfo.SynComponentInfo(_attrs, _typarDecls, _typarConstraints, longIdent, _, _, _, range))) = componentInfo // TODO : attrs, typarDecls and typarConstraints [identAndRange (longIdentToString longIdent) range] let extractFromTypeDefn (typeDefn: SynTypeDefn) = - let (SynTypeDefn.TypeDefn(componentInfo, _repr, _members, _)) = typeDefn + let (SynTypeDefn(componentInfo, _repr, _members, _, _)) = typeDefn // TODO : repr and members extractFromComponentInfo componentInfo let rec extractFromModuleDecl (moduleDecl: SynModuleDecl) = @@ -59,11 +59,9 @@ let internal identsAndRanges (input: ParsedInput) = | ParsedInput.SigFile _ -> [] let internal parseAndExtractRanges code = - let file = "Test" + let file = "Test.fs" let result = parseSourceCode (file, code) - match result with - | Some tree -> tree |> identsAndRanges - | None -> failwith "fail to parse..." + result |> identsAndRanges let input = """ diff --git a/tests/service/MultiProjectAnalysisTests.fs b/tests/service/MultiProjectAnalysisTests.fs index a5863d15cba..d8d41480664 100644 --- a/tests/service/MultiProjectAnalysisTests.fs +++ b/tests/service/MultiProjectAnalysisTests.fs @@ -8,25 +8,26 @@ module Tests.Service.MultiProjectAnalysisTests #endif -open FSharp.Compiler -open FSharp.Compiler.SourceCodeServices - open NUnit.Framework open FsUnit open System.IO open System.Collections.Generic - +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.IO +open FSharp.Compiler.Symbols +open FSharp.Compiler.Text open FSharp.Compiler.Service.Tests.Common let toIList (x: _ array) = x :> IList<_> let numProjectsForStressTest = 100 let internal checker = FSharpChecker.Create(projectCacheSize=numProjectsForStressTest + 10) -/// Extract range info -let internal tups (m:Range.range) = (m.StartLine, m.StartColumn), (m.EndLine, m.EndColumn) +/// Extract range info +let internal tups (m:range) = (m.StartLine, m.StartColumn), (m.EndLine, m.EndColumn) -module internal Project1A = +module internal Project1A = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName = Path.GetTempFileName() @@ -36,7 +37,7 @@ module internal Project1A = module Project1A /// This is type C -type C() = +type C() = static member M(arg1: int, arg2: int, ?arg3 : int) = arg1 + arg2 + defaultArg arg3 4 /// This is x1 @@ -53,7 +54,7 @@ let x3 ( ) = () /// This is type U -type U = +type U = /// This is Case1 | Case1 of int @@ -61,7 +62,7 @@ type U = /// This is Case2 | Case2 of string """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -72,7 +73,7 @@ type U = //----------------------------------------------------------------------------------------- -module internal Project1B = +module internal Project1B = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName = Path.GetTempFileName() @@ -84,12 +85,12 @@ module Project1B type A = B of xxx: int * yyy : int let b = B(xxx=1, yyy=2) -let x = +let x = match b with // does not find usage here | B (xxx = a; yyy = b) -> () """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -99,7 +100,7 @@ let x = // A project referencing two sub-projects -module internal MultiProject1 = +module internal MultiProject1 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName = Path.GetTempFileName() @@ -116,20 +117,20 @@ let p = (Project1A.x1, Project1B.b) let c = C() let u = Case1 3 """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) - let options = + let options = let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) - { options with + { options with OtherOptions = Array.append options.OtherOptions [| ("-r:" + Project1A.dllName); ("-r:" + Project1B.dllName) |] - ReferencedProjects = [| (Project1A.dllName, Project1A.options); - (Project1B.dllName, Project1B.options); |] } + ReferencedProjects = [| FSharpReferencedProject.CreateFSharp(Project1A.dllName, Project1A.options); + FSharpReferencedProject.CreateFSharp(Project1B.dllName, Project1B.options); |] } let cleanFileName a = if a = fileName1 then "file1" else "??" [] -let ``Test multi project 1 basic`` () = +let ``Test multi project 1 basic`` () = let wholeProjectResults = checker.ParseAndCheckProject(MultiProject1.options) |> Async.RunSynchronously @@ -138,117 +139,131 @@ let ``Test multi project 1 basic`` () = [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] |> shouldEqual [] - [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] + [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] |> shouldEqual ["p"; "c"; "u"] [] -let ``Test multi project 1 all symbols`` () = +let ``Test multi project 1 all symbols`` () = let p1A = checker.ParseAndCheckProject(Project1A.options) |> Async.RunSynchronously let p1B = checker.ParseAndCheckProject(Project1B.options) |> Async.RunSynchronously let mp = checker.ParseAndCheckProject(MultiProject1.options) |> Async.RunSynchronously - let x1FromProject1A = + let x1FromProject1A = [ for s in p1A.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = "x1" then + if s.Symbol.DisplayName = "x1" then yield s.Symbol ] |> List.head - let x1FromProjectMultiProject = + let x1FromProjectMultiProject = [ for s in mp.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = "x1" then + if s.Symbol.DisplayName = "x1" then yield s.Symbol ] |> List.head - let bFromProjectMultiProject = + let bFromProjectMultiProject = [ for s in mp.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = "b" then + if s.Symbol.DisplayName = "b" then yield s.Symbol ] |> List.head x1FromProject1A.Assembly.FileName.IsNone |> shouldEqual true // For now, the assembly being analyzed doesn't return a filename x1FromProject1A.Assembly.QualifiedName |> shouldEqual "" // For now, the assembly being analyzed doesn't return a qualified name - x1FromProject1A.Assembly.SimpleName |> shouldEqual (Path.GetFileNameWithoutExtension Project1A.dllName) + x1FromProject1A.Assembly.SimpleName |> shouldEqual (Path.GetFileNameWithoutExtension Project1A.dllName) x1FromProjectMultiProject.Assembly.FileName |> shouldEqual (Some Project1A.dllName) bFromProjectMultiProject.Assembly.FileName |> shouldEqual (Some Project1B.dllName) - let usesOfx1FromProject1AInMultiProject1 = - mp.GetUsesOfSymbol(x1FromProject1A) - |> Array.map (fun s -> s.Symbol.DisplayName, MultiProject1.cleanFileName s.FileName, tups s.Symbol.DeclarationLocation.Value) + let usesOfx1FromProject1AInMultiProject1 = + mp.GetUsesOfSymbol(x1FromProject1A) + |> Array.map (fun s -> s.Symbol.DisplayName, MultiProject1.cleanFileName s.FileName, tups s.Symbol.DeclarationLocation.Value) - let usesOfx1FromMultiProject1InMultiProject1 = - mp.GetUsesOfSymbol(x1FromProjectMultiProject) - |> Array.map (fun s -> s.Symbol.DisplayName, MultiProject1.cleanFileName s.FileName, tups s.Symbol.DeclarationLocation.Value) + let usesOfx1FromMultiProject1InMultiProject1 = + mp.GetUsesOfSymbol(x1FromProjectMultiProject) + |> Array.map (fun s -> s.Symbol.DisplayName, MultiProject1.cleanFileName s.FileName, tups s.Symbol.DeclarationLocation.Value) usesOfx1FromProject1AInMultiProject1 |> shouldEqual usesOfx1FromMultiProject1InMultiProject1 [] -let ``Test multi project 1 xmldoc`` () = +let ``Test multi project 1 xmldoc`` () = let p1A = checker.ParseAndCheckProject(Project1A.options) |> Async.RunSynchronously let p1B = checker.ParseAndCheckProject(Project1B.options) |> Async.RunSynchronously let mp = checker.ParseAndCheckProject(MultiProject1.options) |> Async.RunSynchronously - let symbolFromProject1A sym = + let symbolFromProject1A sym = [ for s in p1A.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = sym then + if s.Symbol.DisplayName = sym then yield s.Symbol ] |> List.head - + let x1FromProject1A = symbolFromProject1A "x1" let x3FromProject1A = symbolFromProject1A "x3" - let x1FromProjectMultiProject = + let x1FromProjectMultiProject = [ for s in mp.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = "x1" then + if s.Symbol.DisplayName = "x1" then yield s.Symbol ] |> List.head - let ctorFromProjectMultiProject = + let ctorFromProjectMultiProject = [ for s in mp.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = "C" then + if s.Symbol.DisplayName = "C" then yield s.Symbol ] |> List.head - let case1FromProjectMultiProject = + let case1FromProjectMultiProject = [ for s in mp.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = "Case1" then + if s.Symbol.DisplayName = "Case1" then yield s.Symbol ] |> List.head - match x1FromProject1A with - | :? FSharpMemberOrFunctionOrValue as v -> v.XmlDoc.Count |> shouldEqual 1 - | _ -> failwith "odd symbol!" - - match x3FromProject1A with - | :? FSharpMemberOrFunctionOrValue as v -> v.XmlDoc |> shouldEqual ([|" This is"; " x3"|] |> toIList) + match x1FromProject1A with + | :? FSharpMemberOrFunctionOrValue as v -> + match v.XmlDoc with + | FSharpXmlDoc.FromXmlText t -> t.UnprocessedLines.Length |> shouldEqual 1 + | _ -> failwith "wrong kind" | _ -> failwith "odd symbol!" - match x3FromProject1A with - | :? FSharpMemberOrFunctionOrValue as v -> v.ElaboratedXmlDoc |> shouldEqual ([|""; " This is"; " x3"; "" |] |> toIList) + match x3FromProject1A with + | :? FSharpMemberOrFunctionOrValue as v -> + match v.XmlDoc with + | FSharpXmlDoc.FromXmlText t -> t.UnprocessedLines |> shouldEqual [|" This is"; " x3"|] + | _ -> failwith "wrong kind" | _ -> failwith "odd symbol!" - match x1FromProjectMultiProject with - | :? FSharpMemberOrFunctionOrValue as v -> v.XmlDoc.Count |> shouldEqual 1 + match x3FromProject1A with + | :? FSharpMemberOrFunctionOrValue as v -> + match v.XmlDoc with + | FSharpXmlDoc.FromXmlText t -> t.GetElaboratedXmlLines() |> shouldEqual [|""; " This is"; " x3"; "" |] + | _ -> failwith "wrong kind" | _ -> failwith "odd symbol!" - match ctorFromProjectMultiProject with - | :? FSharpMemberOrFunctionOrValue as c -> c.XmlDoc.Count |> shouldEqual 0 + match x1FromProjectMultiProject with + | :? FSharpMemberOrFunctionOrValue as v -> + match v.XmlDoc with + | FSharpXmlDoc.FromXmlText t -> t.UnprocessedLines.Length |> shouldEqual 1 + | _ -> failwith "wrong kind" | _ -> failwith "odd symbol!" - match ctorFromProjectMultiProject with - | :? FSharpMemberOrFunctionOrValue as c -> c.DeclaringEntity.Value.XmlDoc.Count |> shouldEqual 1 + match ctorFromProjectMultiProject with + | :? FSharpMemberOrFunctionOrValue as c -> + match c.XmlDoc with + | FSharpXmlDoc.FromXmlText t -> t.UnprocessedLines.Length |> shouldEqual 0 + | _ -> failwith "wrong kind" | _ -> failwith "odd symbol!" - match case1FromProjectMultiProject with - | :? FSharpUnionCase as c -> c.XmlDoc.Count |> shouldEqual 1 + match case1FromProjectMultiProject with + | :? FSharpUnionCase as c -> + match c.XmlDoc with + | FSharpXmlDoc.FromXmlText t -> t.UnprocessedLines.Length |> shouldEqual 1 + | _ -> failwith "wrong kind" | _ -> failwith "odd symbol!" //------------------------------------------------------------------------------------ // A project referencing many sub-projects -module internal ManyProjectsStressTest = +module internal ManyProjectsStressTest = let numProjectsForStressTest = 100 - - type Project = { ModuleName: string; FileName: string; Options: FSharpProjectOptions; DllName: string } - let projects = - [ for i in 1 .. numProjectsForStressTest do + + type Project = { ModuleName: string; FileName: string; Options: FSharpProjectOptions; DllName: string } + let projects = + [ for i in 1 .. numProjectsForStressTest do let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let moduleName = "Project" + string i let fileSource1 = "module " + moduleName + """ @@ -256,15 +271,15 @@ module internal ManyProjectsStressTest = // Some random code open System -type C() = +type C() = static member Print() = System.Console.WriteLine("Hello World") - + let v = C() let p = C.Print() """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let baseName = Path.GetTempFileName() let dllName = Path.ChangeExtension(baseName, ".dll") let projFileName = Path.ChangeExtension(baseName, ".fsproj") @@ -273,42 +288,42 @@ let p = C.Print() let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) yield { ModuleName = moduleName; FileName=fileName1; Options = options; DllName=dllName } ] - let jointProject = + let jointProject = let fileName = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let dllBase = Path.GetTempFileName() let dllName = Path.ChangeExtension(dllBase, ".dll") let projFileName = Path.ChangeExtension(dllBase, ".fsproj") - let fileSource = + let fileSource = """ module JointProject """ + String.concat "\r\n" [ for p in projects -> "open " + p.ModuleName ] + """ -let p = (""" +let p = (""" + String.concat ",\r\n " [ for p in projects -> p.ModuleName + ".v" ] + ")" - File.WriteAllText(fileName, fileSource) + FileSystem.OpenFileForWriteShim(fileName).Write(fileSource) let fileNames = [fileName] let args = mkProjectCommandLineArgs (dllName, fileNames) - let options = + let options = let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) - { options with + { options with OtherOptions = Array.append options.OtherOptions [| for p in projects -> ("-r:" + p.DllName) |] - ReferencedProjects = [| for p in projects -> (p.DllName, p.Options); |] } - { ModuleName = "JointProject"; FileName=fileName; Options = options; DllName=dllName } + ReferencedProjects = [| for p in projects -> FSharpReferencedProject.CreateFSharp(p.DllName, p.Options); |] } + { ModuleName = "JointProject"; FileName=fileName; Options = options; DllName=dllName } - let cleanFileName a = + let cleanFileName a = projects |> List.tryPick (fun m -> if a = m.FileName then Some m.ModuleName else None) |> function Some x -> x | None -> if a = jointProject.FileName then "fileN" else "??" - let makeCheckerForStressTest ensureBigEnough = + let makeCheckerForStressTest ensureBigEnough = let size = (if ensureBigEnough then numProjectsForStressTest + 10 else numProjectsForStressTest / 2 ) FSharpChecker.Create(projectCacheSize=size) [] -let ``Test ManyProjectsStressTest basic`` () = +let ``Test ManyProjectsStressTest basic`` () = let checker = ManyProjectsStressTest.makeCheckerForStressTest true @@ -318,11 +333,11 @@ let ``Test ManyProjectsStressTest basic`` () = [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] |> shouldEqual [] - [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] + [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] |> shouldEqual ["p"] [] -let ``Test ManyProjectsStressTest cache too small`` () = +let ``Test ManyProjectsStressTest cache too small`` () = let checker = ManyProjectsStressTest.makeCheckerForStressTest false @@ -332,41 +347,41 @@ let ``Test ManyProjectsStressTest cache too small`` () = [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] |> shouldEqual [] - [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] + [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] |> shouldEqual ["p"] [] -let ``Test ManyProjectsStressTest all symbols`` () = +let ``Test ManyProjectsStressTest all symbols`` () = let checker = ManyProjectsStressTest.makeCheckerForStressTest true - for i in 1 .. 10 do + for i in 1 .. 10 do printfn "stress test iteration %d (first may be slow, rest fast)" i let projectsResults = [ for p in ManyProjectsStressTest.projects -> p, checker.ParseAndCheckProject(p.Options) |> Async.RunSynchronously ] let jointProjectResults = checker.ParseAndCheckProject(ManyProjectsStressTest.jointProject.Options) |> Async.RunSynchronously - let vsFromJointProject = + let vsFromJointProject = [ for s in jointProjectResults.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = "v" then - yield s.Symbol ] + if s.Symbol.DisplayName = "v" then + yield s.Symbol ] - for (p,pResults) in projectsResults do - let vFromProject = + for (p,pResults) in projectsResults do + let vFromProject = [ for s in pResults.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = "v" then - yield s.Symbol ] |> List.head + if s.Symbol.DisplayName = "v" then + yield s.Symbol ] |> List.head vFromProject.Assembly.FileName.IsNone |> shouldEqual true // For now, the assembly being analyzed doesn't return a filename vFromProject.Assembly.QualifiedName |> shouldEqual "" // For now, the assembly being analyzed doesn't return a qualified name - vFromProject.Assembly.SimpleName |> shouldEqual (Path.GetFileNameWithoutExtension p.DllName) + vFromProject.Assembly.SimpleName |> shouldEqual (Path.GetFileNameWithoutExtension p.DllName) - let usesFromJointProject = - jointProjectResults.GetUsesOfSymbol(vFromProject) - |> Array.map (fun s -> s.Symbol.DisplayName, ManyProjectsStressTest.cleanFileName s.FileName, tups s.Symbol.DeclarationLocation.Value) + let usesFromJointProject = + jointProjectResults.GetUsesOfSymbol(vFromProject) + |> Array.map (fun s -> s.Symbol.DisplayName, ManyProjectsStressTest.cleanFileName s.FileName, tups s.Symbol.DeclarationLocation.Value) usesFromJointProject.Length |> shouldEqual 1 //----------------------------------------------------------------------------------------- -module internal MultiProjectDirty1 = +module internal MultiProjectDirty1 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName = Path.GetTempFileName() @@ -375,26 +390,26 @@ module internal MultiProjectDirty1 = let content = """module Project1 let x = "F#" -""" - - File.WriteAllText(fileName1, content) +""" + + FileSystem.OpenFileForWriteShim(fileName1).Write(content) let cleanFileName a = if a = fileName1 then "Project1" else "??" let fileNames = [fileName1] - - let getOptions() = + + let getOptions() = let args = mkProjectCommandLineArgs (dllName, fileNames) checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) -module internal MultiProjectDirty2 = +module internal MultiProjectDirty2 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName = Path.GetTempFileName() let dllName = Path.ChangeExtension(baseName, ".dll") let projFileName = Path.ChangeExtension(baseName, ".fsproj") - + let content = """module Project2 open Project1 @@ -402,21 +417,21 @@ open Project1 let y = x let z = Project1.x """ - File.WriteAllText(fileName1, content) + FileSystem.OpenFileForWriteShim(fileName1).Write(content) let cleanFileName a = if a = fileName1 then "Project2" else "??" - let fileNames = [fileName1] - - let getOptions() = + let fileNames = [fileName1] + + let getOptions() = let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) - { options with + { options with OtherOptions = Array.append options.OtherOptions [| ("-r:" + MultiProjectDirty1.dllName) |] - ReferencedProjects = [| (MultiProjectDirty1.dllName, MultiProjectDirty1.getOptions()) |] } + ReferencedProjects = [| FSharpReferencedProject.CreateFSharp(MultiProjectDirty1.dllName, MultiProjectDirty1.getOptions()) |] } [] -let ``Test multi project symbols should pick up changes in dependent projects`` () = +let ``Test multi project symbols should pick up changes in dependent projects`` () = // register to count the file checks let count = ref 0 @@ -430,16 +445,16 @@ let ``Test multi project symbols should pick up changes in dependent projects`` count.Value |> shouldEqual 1 - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(MultiProjectDirty1.fileName1, proj1options) - |> Async.RunSynchronously + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(MultiProjectDirty1.fileName1, proj1options) + |> Async.RunSynchronously count.Value |> shouldEqual 1 //---------------- Get a symbol from project 1 and look up its uses in both projects -------------------- let xSymbolUse = backgroundTypedParse1.GetSymbolUseAtLocation(3, 4, "", ["x"]) - xSymbolUse.IsSome |> shouldEqual true + xSymbolUse.IsSome |> shouldEqual true let xSymbol = xSymbolUse.Value.Symbol printfn "Symbol found. Checking symbol uses in another project..." @@ -449,38 +464,38 @@ let ``Test multi project symbols should pick up changes in dependent projects`` let wholeProjectResults2 = checker.ParseAndCheckProject(proj2options) |> Async.RunSynchronously count.Value |> shouldEqual 2 - + let _ = checker.ParseAndCheckProject(proj2options) |> Async.RunSynchronously count.Value |> shouldEqual 2 // cached - let usesOfXSymbolInProject1 = - wholeProjectResults1.GetUsesOfSymbol(xSymbol) - |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty1.cleanFileName su.FileName, tups su.RangeAlternate) + let usesOfXSymbolInProject1 = + wholeProjectResults1.GetUsesOfSymbol(xSymbol) + |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty1.cleanFileName su.FileName, tups su.Range) usesOfXSymbolInProject1 - |> shouldEqual + |> shouldEqual [|("val x", "Project1", ((3, 4), (3, 5))) |] - let usesOfXSymbolInProject2 = - wholeProjectResults2.GetUsesOfSymbol(xSymbol) - |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty2.cleanFileName su.FileName, tups su.RangeAlternate) + let usesOfXSymbolInProject2 = + wholeProjectResults2.GetUsesOfSymbol(xSymbol) + |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty2.cleanFileName su.FileName, tups su.Range) - usesOfXSymbolInProject2 - |> shouldEqual + usesOfXSymbolInProject2 + |> shouldEqual [|("val x", "Project2", ((5, 8), (5, 9))); ("val x", "Project2", ((6, 8), (6, 18)))|] //---------------- Change the file by adding a line, then re-check everything -------------------- - + let wt0 = System.DateTime.UtcNow - let wt1 = File.GetLastWriteTimeUtc MultiProjectDirty1.fileName1 + let wt1 = FileSystem.GetLastWriteTimeShim MultiProjectDirty1.fileName1 printfn "Writing new content to file '%s'" MultiProjectDirty1.fileName1 System.Threading.Thread.Sleep(1000) - File.WriteAllText(MultiProjectDirty1.fileName1, System.Environment.NewLine + MultiProjectDirty1.content) + FileSystem.OpenFileForWriteShim(MultiProjectDirty1.fileName1).Write(System.Environment.NewLine + MultiProjectDirty1.content) printfn "Wrote new content to file '%s'" MultiProjectDirty1.fileName1 - let wt2 = File.GetLastWriteTimeUtc MultiProjectDirty1.fileName1 + let wt2 = FileSystem.GetLastWriteTimeShim MultiProjectDirty1.fileName1 printfn "Current time: '%A', ticks = %d" wt0 wt0.Ticks printfn "Old write time: '%A', ticks = %d" wt1 wt1.Ticks printfn "New write time: '%A', ticks = %d" wt2 wt2.Ticks @@ -488,12 +503,12 @@ let ``Test multi project symbols should pick up changes in dependent projects`` let wholeProjectResults1AfterChange1 = checker.ParseAndCheckProject(proj1options) |> Async.RunSynchronously count.Value |> shouldEqual 3 - let backgroundParseResults1AfterChange1, backgroundTypedParse1AfterChange1 = - checker.GetBackgroundCheckResultsForFileInProject(MultiProjectDirty1.fileName1, proj1options) - |> Async.RunSynchronously + let backgroundParseResults1AfterChange1, backgroundTypedParse1AfterChange1 = + checker.GetBackgroundCheckResultsForFileInProject(MultiProjectDirty1.fileName1, proj1options) + |> Async.RunSynchronously let xSymbolUseAfterChange1 = backgroundTypedParse1AfterChange1.GetSymbolUseAtLocation(4, 4, "", ["x"]) - xSymbolUseAfterChange1.IsSome |> shouldEqual true + xSymbolUseAfterChange1.IsSome |> shouldEqual true let xSymbolAfterChange1 = xSymbolUseAfterChange1.Value.Symbol @@ -503,38 +518,37 @@ let ``Test multi project symbols should pick up changes in dependent projects`` count.Value |> shouldEqual 4 - let usesOfXSymbolInProject1AfterChange1 = - wholeProjectResults1AfterChange1.GetUsesOfSymbol(xSymbolAfterChange1) - |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty1.cleanFileName su.FileName, tups su.RangeAlternate) - + let usesOfXSymbolInProject1AfterChange1 = + wholeProjectResults1AfterChange1.GetUsesOfSymbol(xSymbolAfterChange1) + |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty1.cleanFileName su.FileName, tups su.Range) + usesOfXSymbolInProject1AfterChange1 - |> shouldEqual + |> shouldEqual [|("val x", "Project1", ((4, 4), (4, 5))) |] - let usesOfXSymbolInProject2AfterChange1 = - wholeProjectResults2AfterChange1.GetUsesOfSymbol(xSymbolAfterChange1) - |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty2.cleanFileName su.FileName, tups su.RangeAlternate) + let usesOfXSymbolInProject2AfterChange1 = + wholeProjectResults2AfterChange1.GetUsesOfSymbol(xSymbolAfterChange1) + |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty2.cleanFileName su.FileName, tups su.Range) - usesOfXSymbolInProject2AfterChange1 - |> shouldEqual + usesOfXSymbolInProject2AfterChange1 + |> shouldEqual [|("val x", "Project2", ((5, 8), (5, 9))); ("val x", "Project2", ((6, 8), (6, 18)))|] //---------------- Revert the change to the file -------------------- let wt0b = System.DateTime.UtcNow - let wt1b = File.GetLastWriteTimeUtc MultiProjectDirty1.fileName1 + let wt1b = FileSystem.GetLastWriteTimeShim MultiProjectDirty1.fileName1 printfn "Writing old content to file '%s'" MultiProjectDirty1.fileName1 System.Threading.Thread.Sleep(1000) - File.WriteAllText(MultiProjectDirty1.fileName1, MultiProjectDirty1.content) + FileSystem.OpenFileForWriteShim(MultiProjectDirty1.fileName1).Write(MultiProjectDirty1.content) printfn "Wrote old content to file '%s'" MultiProjectDirty1.fileName1 - let wt2b = File.GetLastWriteTimeUtc MultiProjectDirty1.fileName1 + let wt2b = FileSystem.GetLastWriteTimeShim MultiProjectDirty1.fileName1 printfn "Current time: '%A', ticks = %d" wt0b wt0b.Ticks printfn "Old write time: '%A', ticks = %d" wt1b wt1b.Ticks printfn "New write time: '%A', ticks = %d" wt2b wt2b.Ticks count.Value |> shouldEqual 4 - let wholeProjectResults2AfterChange2 = checker.ParseAndCheckProject(proj2options) |> Async.RunSynchronously System.Threading.Thread.Sleep(1000) @@ -545,30 +559,30 @@ let ``Test multi project symbols should pick up changes in dependent projects`` count.Value |> shouldEqual 6 // the project is already checked - let backgroundParseResults1AfterChange2, backgroundTypedParse1AfterChange2 = - checker.GetBackgroundCheckResultsForFileInProject(MultiProjectDirty1.fileName1, proj1options) - |> Async.RunSynchronously + let backgroundParseResults1AfterChange2, backgroundTypedParse1AfterChange2 = + checker.GetBackgroundCheckResultsForFileInProject(MultiProjectDirty1.fileName1, proj1options) + |> Async.RunSynchronously let xSymbolUseAfterChange2 = backgroundTypedParse1AfterChange2.GetSymbolUseAtLocation(4, 4, "", ["x"]) - xSymbolUseAfterChange2.IsSome |> shouldEqual true + xSymbolUseAfterChange2.IsSome |> shouldEqual true let xSymbolAfterChange2 = xSymbolUseAfterChange2.Value.Symbol - let usesOfXSymbolInProject1AfterChange2 = - wholeProjectResults1AfterChange2.GetUsesOfSymbol(xSymbolAfterChange2) - |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty1.cleanFileName su.FileName, tups su.RangeAlternate) + let usesOfXSymbolInProject1AfterChange2 = + wholeProjectResults1AfterChange2.GetUsesOfSymbol(xSymbolAfterChange2) + |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty1.cleanFileName su.FileName, tups su.Range) usesOfXSymbolInProject1AfterChange2 - |> shouldEqual + |> shouldEqual [|("val x", "Project1", ((3, 4), (3, 5))) |] - let usesOfXSymbolInProject2AfterChange2 = - wholeProjectResults2AfterChange2.GetUsesOfSymbol(xSymbolAfterChange2) - |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty2.cleanFileName su.FileName, tups su.RangeAlternate) + let usesOfXSymbolInProject2AfterChange2 = + wholeProjectResults2AfterChange2.GetUsesOfSymbol(xSymbolAfterChange2) + |> Array.map (fun su -> su.Symbol.ToString(), MultiProjectDirty2.cleanFileName su.FileName, tups su.Range) usesOfXSymbolInProject2AfterChange2 - |> shouldEqual + |> shouldEqual [|("val x", "Project2", ((5, 8), (5, 9))); ("val x", "Project2", ((6, 8), (6, 18)))|] @@ -576,7 +590,7 @@ let ``Test multi project symbols should pick up changes in dependent projects`` //------------------------------------------------------------------ -module internal Project2A = +module internal Project2A = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName1 = Path.GetTempFileName() @@ -591,11 +605,11 @@ module Project2A [] do() -type C() = +type C() = member internal x.InternalMember = 1 """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -605,7 +619,7 @@ type C() = //Project2A.fileSource1 // A project referencing Project2A -module internal Project2B = +module internal Project2B = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let dllName = Path.ChangeExtension(Project2A.baseName2, ".dll") @@ -616,20 +630,20 @@ module Project2B let v = Project2A.C().InternalMember // access an internal symbol """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) - let options = + let options = let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) - { options with + { options with OtherOptions = Array.append options.OtherOptions [| ("-r:" + Project2A.dllName); |] - ReferencedProjects = [| (Project2A.dllName, Project2A.options); |] } + ReferencedProjects = [| FSharpReferencedProject.CreateFSharp(Project2A.dllName, Project2A.options); |] } let cleanFileName a = if a = fileName1 then "file1" else "??" //Project2A.fileSource1 // A project referencing Project2A but without access to the internals of A -module internal Project2C = +module internal Project2C = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let dllName = Path.ChangeExtension(Project2A.baseName3, ".dll") @@ -640,48 +654,48 @@ module Project2C let v = Project2A.C().InternalMember // access an internal symbol """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) - let options = + let options = let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) - { options with + { options with OtherOptions = Array.append options.OtherOptions [| ("-r:" + Project2A.dllName); |] - ReferencedProjects = [| (Project2A.dllName, Project2A.options); |] } + ReferencedProjects = [| FSharpReferencedProject.CreateFSharp(Project2A.dllName, Project2A.options); |] } let cleanFileName a = if a = fileName1 then "file1" else "??" [] -let ``Test multi project2 errors`` () = +let ``Test multi project2 errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project2B.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "multi project2 error: <<<%s>>>" e.Message - wholeProjectResults .Errors.Length |> shouldEqual 0 + wholeProjectResults .Diagnostics.Length |> shouldEqual 0 let wholeProjectResultsC = checker.ParseAndCheckProject(Project2C.options) |> Async.RunSynchronously - wholeProjectResultsC.Errors.Length |> shouldEqual 1 + wholeProjectResultsC.Diagnostics.Length |> shouldEqual 1 [] -let ``Test multi project 2 all symbols`` () = +let ``Test multi project 2 all symbols`` () = let mpA = checker.ParseAndCheckProject(Project2A.options) |> Async.RunSynchronously let mpB = checker.ParseAndCheckProject(Project2B.options) |> Async.RunSynchronously let mpC = checker.ParseAndCheckProject(Project2C.options) |> Async.RunSynchronously // These all get the symbol in A, but from three different project compilations/checks - let symFromA = + let symFromA = [ for s in mpA.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = "InternalMember" then + if s.Symbol.DisplayName = "InternalMember" then yield s.Symbol ] |> List.head - let symFromB = + let symFromB = [ for s in mpB.GetAllUsesOfAllSymbols() do - if s.Symbol.DisplayName = "InternalMember" then + if s.Symbol.DisplayName = "InternalMember" then yield s.Symbol ] |> List.head symFromA.IsAccessible(mpA.ProjectContext.AccessibilityRights) |> shouldEqual true @@ -690,10 +704,10 @@ let ``Test multi project 2 all symbols`` () = symFromB.IsAccessible(mpA.ProjectContext.AccessibilityRights) |> shouldEqual true symFromB.IsAccessible(mpB.ProjectContext.AccessibilityRights) |> shouldEqual true symFromB.IsAccessible(mpC.ProjectContext.AccessibilityRights) |> shouldEqual false - + //------------------------------------------------------------------------------------ -module internal Project3A = +module internal Project3A = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName = Path.GetTempFileName() @@ -703,10 +717,10 @@ module internal Project3A = module Project3A ///A parameterized active pattern of divisibility -let (|DivisibleBy|_|) by n = +let (|DivisibleBy|_|) by n = if n % by = 0 then Some DivisibleBy else None """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -716,7 +730,7 @@ let (|DivisibleBy|_|) by n = // A project referencing a sub-project -module internal MultiProject3 = +module internal MultiProject3 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName = Path.GetTempFileName() @@ -727,48 +741,51 @@ module MultiProject3 open Project3A -let fizzBuzz = function - | DivisibleBy 3 & DivisibleBy 5 -> "FizzBuzz" - | DivisibleBy 3 -> "Fizz" - | DivisibleBy 5 -> "Buzz" - | _ -> "" +let fizzBuzz = function + | DivisibleBy 3 & DivisibleBy 5 -> "FizzBuzz" + | DivisibleBy 3 -> "Fizz" + | DivisibleBy 5 -> "Buzz" + | _ -> "" """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) - let options = + let options = let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) - { options with + { options with OtherOptions = Array.append options.OtherOptions [| ("-r:" + Project3A.dllName) |] - ReferencedProjects = [| (Project3A.dllName, Project3A.options) |] } + ReferencedProjects = [| FSharpReferencedProject.CreateFSharp(Project3A.dllName, Project3A.options) |] } let cleanFileName a = if a = fileName1 then "file1" else "??" [] -let ``Test multi project 3 whole project errors`` () = +let ``Test multi project 3 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(MultiProject3.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "multi project 3 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] let ``Test active patterns' XmlDocSig declared in referenced projects`` () = let wholeProjectResults = checker.ParseAndCheckProject(MultiProject3.options) |> Async.RunSynchronously - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(MultiProject3.fileName1, MultiProject3.options) - |> Async.RunSynchronously + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(MultiProject3.fileName1, MultiProject3.options) + |> Async.RunSynchronously let divisibleBySymbolUse = backgroundTypedParse1.GetSymbolUseAtLocation(7,7,"",["DivisibleBy"]) - divisibleBySymbolUse.IsSome |> shouldEqual true - let divisibleBySymbol = divisibleBySymbolUse.Value.Symbol + divisibleBySymbolUse.IsSome |> shouldEqual true + let divisibleBySymbol = divisibleBySymbolUse.Value.Symbol divisibleBySymbol.ToString() |> shouldEqual "symbol DivisibleBy" let divisibleByActivePatternCase = divisibleBySymbol :?> FSharpActivePatternCase - divisibleByActivePatternCase.XmlDoc |> Seq.toList |> shouldEqual [ "A parameterized active pattern of divisibility" ] - divisibleByActivePatternCase.ElaboratedXmlDoc |> Seq.toList |> shouldEqual [ ""; "A parameterized active pattern of divisibility"; "" ] + match divisibleByActivePatternCase.XmlDoc with + | FSharpXmlDoc.FromXmlText t -> + t.UnprocessedLines |> shouldEqual [| "A parameterized active pattern of divisibility" |] + t.GetElaboratedXmlLines() |> shouldEqual [| ""; "A parameterized active pattern of divisibility"; "" |] + | _ -> failwith "wrong kind" divisibleByActivePatternCase.XmlDocSig |> shouldEqual "M:Project3A.|DivisibleBy|_|(System.Int32,System.Int32)" let divisibleByGroup = divisibleByActivePatternCase.Group divisibleByGroup.IsTotal |> shouldEqual false @@ -784,7 +801,7 @@ let ``Test active patterns' XmlDocSig declared in referenced projects`` () = [] let ``Test max memory gets triggered`` () = let checker = FSharpChecker.Create() - let reached = ref false + let reached = ref false checker.MaxMemoryReached.Add (fun () -> reached := true) let wholeProjectResults = checker.ParseAndCheckProject(MultiProject3.options) |> Async.RunSynchronously reached.Value |> shouldEqual false @@ -803,7 +820,7 @@ let ``Test max memory gets triggered`` () = [] #endif let ``Type provider project references should not throw exceptions`` () = - let options = + let options = {ProjectFileName = __SOURCE_DIRECTORY__ + @"/data/TypeProviderConsole/TypeProviderConsole.fsproj"; ProjectId = None SourceFiles = [|__SOURCE_DIRECTORY__ + @"/data/TypeProviderConsole/Program.fs"|]; @@ -813,43 +830,43 @@ let ``Type provider project references should not throw exceptions`` () = yield "--noframework"; yield "--out:" + __SOURCE_DIRECTORY__ + @"/data/TypeProviderConsole/bin/Debug/TypeProviderConsole.exe"; yield "--doc:" + __SOURCE_DIRECTORY__ + @"/data/TypeProviderConsole/bin/Debug/TypeProviderConsole.xml"; - yield "--subsystemversion:6.00"; - yield "--highentropyva+"; + yield "--subsystemversion:6.00"; + yield "--highentropyva+"; yield "--fullpaths"; - yield "--flaterrors"; - yield "--target:exe"; - yield "--define:DEBUG"; + yield "--flaterrors"; + yield "--target:exe"; + yield "--define:DEBUG"; yield "--define:TRACE"; - yield "--debug+"; - yield "--optimize-"; - yield "--tailcalls-"; + yield "--debug+"; + yield "--optimize-"; + yield "--tailcalls-"; yield "--debug:full"; yield "--platform:anycpu"; for r in mkStandardProjectReferences () do yield "-r:" + r yield "-r:" + __SOURCE_DIRECTORY__ + @"/data/TypeProviderLibrary/TypeProviderLibrary.dll"|]; ReferencedProjects = - [|(__SOURCE_DIRECTORY__ + @"/data/TypeProviderLibrary/TypeProviderLibrary.dll", + [|FSharpReferencedProject.CreateFSharp(__SOURCE_DIRECTORY__ + @"/data/TypeProviderLibrary/TypeProviderLibrary.dll", {ProjectFileName = __SOURCE_DIRECTORY__ + @"/data/TypeProviderLibrary/TypeProviderLibrary.fsproj"; ProjectId = None SourceFiles = [|__SOURCE_DIRECTORY__ + @"/data/TypeProviderLibrary/Library1.fs"|]; Stamp = None OtherOptions = - [|yield "--simpleresolution"; + [|yield "--simpleresolution"; yield "--noframework"; yield "--out:" + __SOURCE_DIRECTORY__ + @"/data/TypeProviderLibrary/TypeProviderLibrary.dll"; yield "--doc:" + __SOURCE_DIRECTORY__ + @"/data/TypeProviderLibrary/bin/Debug/TypeProviderLibrary.xml"; - yield "--subsystemversion:6.00"; - yield "--highentropyva+"; + yield "--subsystemversion:6.00"; + yield "--highentropyva+"; yield "--fullpaths"; - yield "--flaterrors"; - yield "--target:library"; + yield "--flaterrors"; + yield "--target:library"; yield "--define:DEBUG"; - yield "--define:TRACE"; - yield "--debug+"; - yield "--optimize-"; + yield "--define:TRACE"; + yield "--debug+"; + yield "--optimize-"; yield "--tailcalls-"; - yield "--debug:full"; + yield "--debug:full"; yield "--platform:anycpu"; for r in mkStandardProjectReferences () do yield "-r:" + r @@ -859,30 +876,25 @@ let ``Type provider project references should not throw exceptions`` () = UseScriptResolutionRules = false; LoadTime = System.DateTime.Now UnresolvedReferences = None; - OriginalLoadReferences = []; - ExtraProjectInfo = None;})|]; + OriginalLoadReferences = [] })|]; IsIncompleteTypeCheckEnvironment = false; UseScriptResolutionRules = false; LoadTime = System.DateTime.Now UnresolvedReferences = None; - OriginalLoadReferences = []; - ExtraProjectInfo = None;} + OriginalLoadReferences = [];} //printfn "options: %A" options - let fileName = __SOURCE_DIRECTORY__ + @"/data/TypeProviderConsole/Program.fs" - let fileSource = File.ReadAllText(fileName) - let fileParseResults, fileCheckAnswer = checker.ParseAndCheckFileInProject(fileName, 0, FSharp.Compiler.Text.SourceText.ofString fileSource, options) |> Async.RunSynchronously - let fileCheckResults = + let fileName = __SOURCE_DIRECTORY__ + @"/data/TypeProviderConsole/Program.fs" + let fileSource = FileSystem.OpenFileForReadShim(fileName).ReadAllText() + let fileParseResults, fileCheckAnswer = checker.ParseAndCheckFileInProject(fileName, 0, SourceText.ofString fileSource, options) |> Async.RunSynchronously + let fileCheckResults = match fileCheckAnswer with | FSharpCheckFileAnswer.Succeeded(res) -> res | res -> failwithf "Parsing did not finish... (%A)" res - printfn "Parse Errors: %A" fileParseResults.Errors - printfn "Errors: %A" fileCheckResults.Errors - fileCheckResults.Errors |> Array.exists (fun error -> error.Severity = FSharpErrorSeverity.Error) |> shouldEqual false - - - + printfn "Parse Errors: %A" fileParseResults.Diagnostics + printfn "Errors: %A" fileCheckResults.Diagnostics + fileCheckResults.Diagnostics |> Array.exists (fun error -> error.Severity = FSharpDiagnosticSeverity.Error) |> shouldEqual false //------------------------------------------------------------------------------------ @@ -893,7 +905,7 @@ let ``Type provider project references should not throw exceptions`` () = [] #endif let ``Projects creating generated types should not utilize cross-project-references but should still analyze oK once project is built`` () = - let options = + let options = {ProjectFileName = __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TestConsole/TestConsole.fsproj"; ProjectId = None @@ -901,20 +913,20 @@ let ``Projects creating generated types should not utilize cross-project-referen [|__SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TestConsole/AssemblyInfo.fs"; __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TestConsole/Program.fs"|]; OtherOptions = - [|yield "--simpleresolution"; + [|yield "--simpleresolution"; yield "--noframework"; yield "--out:" + __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TestConsole/bin/Debug/TestConsole.exe"; yield "--doc:" + __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TestConsole/bin/Debug/TestConsole.XML"; - yield "--subsystemversion:6.00"; - yield "--highentropyva+"; + yield "--subsystemversion:6.00"; + yield "--highentropyva+"; yield "--fullpaths"; - yield "--flaterrors"; - yield "--target:exe"; - yield "--define:DEBUG"; + yield "--flaterrors"; + yield "--target:exe"; + yield "--define:DEBUG"; yield "--define:TRACE"; - yield "--debug+"; - yield "--optimize-"; - yield "--tailcalls-"; + yield "--debug+"; + yield "--optimize-"; + yield "--tailcalls-"; yield "--debug:full"; yield "--platform:anycpu"; yield "-r:" + __SOURCE_DIRECTORY__ + @"/../../packages/FSharp.Configuration.1.3.0/lib/net45/FSharp.Configuration.dll"; @@ -922,7 +934,7 @@ let ``Projects creating generated types should not utilize cross-project-referen yield "-r:" + r yield "-r:" + __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TypeProvidersBug/bin/Debug/TypeProvidersBug.dll"|]; ReferencedProjects = - [|(__SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TypeProvidersBug/bin/Debug/TypeProvidersBug.dll", + [|FSharpReferencedProject.CreateFSharp(__SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TypeProvidersBug/bin/Debug/TypeProvidersBug.dll", {ProjectFileName = __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TypeProvidersBug/TypeProvidersBug.fsproj"; ProjectId = None @@ -930,21 +942,21 @@ let ``Projects creating generated types should not utilize cross-project-referen [|__SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TypeProvidersBug/AssemblyInfo.fs"; __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TypeProvidersBug/Library1.fs"|]; OtherOptions = - [|yield "--simpleresolution"; + [|yield "--simpleresolution"; yield "--noframework"; yield "--out:" + __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TypeProvidersBug/bin/Debug/TypeProvidersBug.dll"; yield "--doc:" + __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TypeProvidersBug/bin/Debug/TypeProvidersBug.XML"; - yield "--subsystemversion:6.00"; - yield "--highentropyva+"; + yield "--subsystemversion:6.00"; + yield "--highentropyva+"; yield "--fullpaths"; - yield "--flaterrors"; - yield "--target:library"; + yield "--flaterrors"; + yield "--target:library"; yield "--define:DEBUG"; - yield "--define:TRACE"; - yield "--debug+"; - yield "--optimize-"; + yield "--define:TRACE"; + yield "--debug+"; + yield "--optimize-"; yield "--tailcalls-"; - yield "--debug:full"; + yield "--debug:full"; yield "--platform:anycpu"; yield "-r:" + __SOURCE_DIRECTORY__ + @"/../../packages/FSharp.Configuration.1.3.0/lib/net45/FSharp.Configuration.dll"; for r in mkStandardProjectReferences () do @@ -955,26 +967,25 @@ let ``Projects creating generated types should not utilize cross-project-referen LoadTime = System.DateTime.Now UnresolvedReferences = None; OriginalLoadReferences = []; - Stamp = None; - ExtraProjectInfo = None;})|]; + Stamp = None})|]; IsIncompleteTypeCheckEnvironment = false; UseScriptResolutionRules = false; LoadTime = System.DateTime.Now UnresolvedReferences = None; Stamp = None; - OriginalLoadReferences = []; - ExtraProjectInfo = None;} + OriginalLoadReferences = [] } //printfn "options: %A" options - let fileName = __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TestConsole/Program.fs" - let fileSource = File.ReadAllText(fileName) - let fileParseResults, fileCheckAnswer = checker.ParseAndCheckFileInProject(fileName, 0, FSharp.Compiler.Text.SourceText.ofString fileSource, options) |> Async.RunSynchronously - let fileCheckResults = + let fileName = __SOURCE_DIRECTORY__ + @"/data/TypeProvidersBug/TestConsole/Program.fs" + let fileSource = FileSystem.OpenFileForReadShim(fileName).ReadAllText() + + let fileParseResults, fileCheckAnswer = checker.ParseAndCheckFileInProject(fileName, 0, SourceText.ofString fileSource, options) |> Async.RunSynchronously + let fileCheckResults = match fileCheckAnswer with | FSharpCheckFileAnswer.Succeeded(res) -> res | res -> failwithf "Parsing did not finish... (%A)" res - printfn "Parse Errors: %A" fileParseResults.Errors - printfn "Errors: %A" fileCheckResults.Errors - fileCheckResults.Errors |> Array.exists (fun error -> error.Severity = FSharpErrorSeverity.Error) |> shouldEqual false + printfn "Parse Errors: %A" fileParseResults.Diagnostics + printfn "Errors: %A" fileCheckResults.Diagnostics + fileCheckResults.Diagnostics |> Array.exists (fun error -> error.Severity = FSharpDiagnosticSeverity.Error) |> shouldEqual false //------------------------------------------------------------------------------------ diff --git a/tests/service/ParserTests.fs b/tests/service/ParserTests.fs index 177a989cfd5..76acd1ba6aa 100644 --- a/tests/service/ParserTests.fs +++ b/tests/service/ParserTests.fs @@ -1,7 +1,7 @@ module Tests.Parser open FSharp.Compiler.Service.Tests.Common -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax open NUnit.Framework module Recovery = @@ -16,6 +16,31 @@ let x = () """ let (SynModuleOrNamespace (decls = decls)) = getSingleModuleLikeDecl parseResults match decls with - | [ SynModuleDecl.Types ([ TypeDefn (typeRepr = SynTypeDefnRepr.ObjectModel (members = [ _; _ ])) ], _) + | [ SynModuleDecl.Types ([ SynTypeDefn (typeRepr = SynTypeDefnRepr.ObjectModel (members = [ _; _ ])) ], _) + SynModuleDecl.Let _ ] -> () + | _ -> failwith "Unexpected tree" + + [] + let ``Union case 01 - of`` () = + let parseResults = getParseResults """ +type U1 = + | A of + +type U2 = + | B of + | C + +let x = () + """ + let (|UnionWithCases|_|) typeDefn = + match typeDefn with + | SynTypeDefn (typeRepr = SynTypeDefnRepr.Simple (SynTypeDefnSimpleRepr.Union (unionCases = cases), _)) -> + cases |> List.map (fun (SynUnionCase (ident = ident)) -> ident.idText) |> Some + | _ -> None + + let (SynModuleOrNamespace (decls = decls)) = getSingleModuleLikeDecl parseResults + match decls with + | [ SynModuleDecl.Types ([ UnionWithCases ["A"]], _) + SynModuleDecl.Types ([ UnionWithCases ["B"; "C"] ], _) SynModuleDecl.Let _ ] -> () | _ -> failwith "Unexpected tree" diff --git a/tests/service/PatternMatchCompilationTests.fs b/tests/service/PatternMatchCompilationTests.fs index b4261473935..30afbefd85d 100644 --- a/tests/service/PatternMatchCompilationTests.fs +++ b/tests/service/PatternMatchCompilationTests.fs @@ -2,9 +2,17 @@ module FSharp.Compiler.Service.Tests.PatternMatchCompilationTests open FsUnit open NUnit.Framework +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.EditorServices +open FSharp.Compiler.IO +open FSharp.Compiler.Syntax [] +#if !NETCOREAPP +[] +#endif let ``Wrong type 01 - Match`` () = let _, checkResults = getParseAndCheckResults """ match () with @@ -16,8 +24,10 @@ match () with "(3,2--3,4): This expression was expected to have type 'unit' but here has type 'string'" ] - [] +#if !NETCOREAPP +[] +#endif let ``Wrong type 02 - Binding`` () = let _, checkResults = getParseAndCheckResults """ let ("": unit), (x: int) = let y = () in () @@ -31,6 +41,9 @@ let ("": unit), (x: int) = let y = () in () [] +#if !NETCOREAPP +[] +#endif let ``Attributes 01 `` () = let _, checkResults = getParseAndCheckResults """ match () with @@ -44,6 +57,9 @@ match () with [] +#if !NETCOREAPP +[] +#endif let ``Optional val 01 `` () = let _, checkResults = getParseAndCheckResults """ match () with @@ -56,6 +72,9 @@ match () with [] +#if !NETCOREAPP +[] +#endif let ``Null 01`` () = let _, checkResults = getParseAndCheckResults """ match 1, 2 with @@ -69,6 +88,9 @@ match 1, 2 with [] +#if !NETCOREAPP +[] +#endif let ``Union case 01 - Missing field`` () = let _, checkResults = getParseAndCheckResults """ type U = @@ -86,6 +108,9 @@ match A with [] +#if !NETCOREAPP +[] +#endif let ``Union case 02 - Extra args`` () = let _, checkResults = getParseAndCheckResults """ type U = @@ -103,6 +128,9 @@ match A with [] +#if !NETCOREAPP +[] +#endif let ``Union case 03 - Extra args`` () = let _, checkResults = getParseAndCheckResults """ type U = @@ -119,6 +147,9 @@ match A with ] [] +#if !NETCOREAPP +[] +#endif let ``Union case 04 - Extra args`` () = let _, checkResults = getParseAndCheckResults """ type U = @@ -135,6 +166,9 @@ match A with ] [] +#if !NETCOREAPP +[] +#endif let ``Union case 05 - Single arg, no errors`` () = let _, checkResults = getParseAndCheckResults """ type U = @@ -151,6 +185,9 @@ match A with [] +#if !NETCOREAPP +[] +#endif let ``Union case 06 - Named args - Wrong field name`` () = let _, checkResults = getParseAndCheckResults """ type U = @@ -168,6 +205,9 @@ match A with [] +#if !NETCOREAPP +[] +#endif let ``Union case 07 - Named args - Name used twice`` () = let _, checkResults = getParseAndCheckResults """ type U = @@ -185,6 +225,9 @@ match A with [] +#if !NETCOREAPP +[] +#endif let ``Union case 08 - Multiple tupled args`` () = let _, checkResults = getParseAndCheckResults """ type U = @@ -214,6 +257,9 @@ match None with [] +#if !NETCOREAPP +[] +#endif let ``Active pattern 01 - Named args`` () = let _, checkResults = getParseAndCheckResults """ let (|Foo|) x = x @@ -228,6 +274,9 @@ match 1 with [] +#if !NETCOREAPP +[] +#endif let ``Literal 01 - Args - F#`` () = let _, checkResults = getParseAndCheckResults """ let [] Foo = 1 @@ -243,6 +292,9 @@ match 1 with [] +#if !NETCOREAPP +[] +#endif let ``Literal 02 - Args - IL`` () = let _, checkResults = getParseAndCheckResults """ open System.Diagnostics @@ -258,6 +310,9 @@ match TraceLevel.Off with [] +#if !NETCOREAPP +[] +#endif let ``Caseless DU`` () = let _, checkResults = getParseAndCheckResults """ type DU = Case of int @@ -285,6 +340,9 @@ match 1 with [] +#if !NETCOREAPP +[] +#endif let ``Or 02 - Different names`` () = let _, checkResults = getParseAndCheckResults """ match 1 with @@ -297,6 +355,9 @@ match 1 with [] +#if !NETCOREAPP +[] +#endif let ``Or 03 - Different names and types`` () = let _, checkResults = getParseAndCheckResults """ type U = @@ -312,3 +373,905 @@ match A with "(7,19--7,20): This expression was expected to have type 'int' but here has type 'string'" "(6,6--6,7): Incomplete pattern matches on this expression. For example, the value 'A' may indicate a case not covered by the pattern(s)." ] + +[] +let ``As 01 - names and wildcards`` () = + let _, checkResults = getParseAndCheckResultsPreview """ +match 1 with +| _ as w -> let x = w + 1 in () + +match 2 with +| y as _ -> let z = y + 1 in () + +match 3 with +| a as b -> let c = a + b in () +""" + assertHasSymbolUsages ["a"; "b"; "c"; "w"; "x"; "y"; "z"] checkResults + dumpErrors checkResults |> shouldEqual [] + + +[] +#if !NETCOREAPP +[] +#endif +let ``As 02 - type testing`` () = + let _, checkResults = getParseAndCheckResultsPreview """ +let (|Id|) = id +match box 1 with +| :? int as a -> let b = a + 1 in () +| c & d as :? uint -> let z = c + d + 2u in () // Tighten typing left-to-right: https://github.com/fsharp/fslang-design/pull/595#issuecomment-860591709 +| :? int64 as Id e -> let f = e + 3L in () +| :? uint64 as Id g & h -> let y = g + 4UL + h in () // (:? uint64 as Id h) & (i : obj) +| :? int8 as Id i as j -> let x = i + 5y + j in () // Only the first "as" will have the derived type +""" + assertHasSymbolUsages (List.map string ['a'..'j']) checkResults + dumpErrors checkResults |> shouldEqual [ + "(5,34--5,35): The type 'obj' does not support the operator '+'" + "(5,32--5,33): The type 'obj' does not support the operator '+'" + "(7,45--7,46): The type 'obj' does not match the type 'uint64'" + "(7,43--7,44): The type 'obj' does not match the type 'uint64'" + "(8,43--8,44): The type 'obj' does not match the type 'int8'" + "(8,41--8,42): The type 'obj' does not match the type 'int8'" + "(3,6--3,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + ] + +[] +#if !NETCOREAPP +[] +#endif +let ``As 03 - impossible type testing`` () = + let _, checkResults = getParseAndCheckResultsPreview """ +match Unchecked.defaultof with +| :? System.Enum as (:? System.ConsoleKey as a) -> let b = a + enum 1 in () +| :? System.Enum as (:? System.ConsoleKey as c) -> let d = c + enum 1 in () +| :? System.Enum as (:? int as x) -> let w = x + 1 in () +| :? string as y -> let z = y + "" in () +| _ -> () +""" + assertHasSymbolUsages ["a"; "b"; "c"; "d"] checkResults + dumpErrors checkResults |> shouldEqual [ + "(5,21--5,27): Type constraint mismatch. The type 'int' is not compatible with type 'System.Enum' " + ] + +[] +#if !NETCOREAPP +[] +#endif +let ``As 04 - duplicate type testing`` () = + let _, checkResults = getParseAndCheckResultsPreview """ +match Unchecked.defaultof with +| :? System.Enum as (a & b) -> let c = a = b in () +| :? System.Enum as (:? System.ConsoleKey as (d & e)) -> let f = d + e + enum 1 in () +| g -> () +""" + assertHasSymbolUsages ["a"; "b"; "c"; "d"; "e"; "f"; "g"] checkResults + dumpErrors checkResults |> shouldEqual [ + "(4,2--4,85): This rule will never be matched" + ] + +[] +#if !NETCOREAPP +[] +#endif +let ``As 05 - inferred type testing`` () = + let _, checkResults = getParseAndCheckResultsPreview """ +match Unchecked.defaultof with +| :? _ as a -> let _ = a in () + +match Unchecked.defaultof with +| :? _ as z -> let _ = z in () +""" + assertHasSymbolUsages ["a"] checkResults + dumpErrors checkResults |> shouldEqual [ + "(2,6--2,25): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(6,2--6,6): The type 'int' does not have any proper subtypes and cannot be used as the source of a type test or runtime coercion." + ] + +[] +let ``As 06 - completeness`` () = + let _, checkResults = getParseAndCheckResultsPreview """ +match Unchecked.defaultof with +| true as a -> if a then () +| b as false -> if not b then () + +match Unchecked.defaultof with +| c as true as d -> if c && d then () +| e as (f as false) -> if e || f then () + +match Unchecked.defaultof with +| (g & h) as (i as true) as (_ as j) -> if g && h && i && j then () +| k & l as (m as (false as n)) as (o as _) -> if k || l || m || n || o then () +""" + assertHasSymbolUsages (List.map string ['a'..'o']) checkResults + dumpErrors checkResults |> shouldEqual [] + +[] +let ``As 07 - syntactical precedence matrix testing right - total patterns`` () = + (* +bindingPattern: + | headBindingPattern +headBindingPattern: + | headBindingPattern AS constrPattern + | headBindingPattern BAR headBindingPattern + | headBindingPattern COLON_COLON headBindingPattern + | tuplePatternElements %prec pat_tuple + | conjPatternElements %prec pat_conj + | constrPattern +constrPattern: + | atomicPatternLongIdent explicitValTyparDecls + | atomicPatternLongIdent opt_explicitValTyparDecls2 atomicPatsOrNamePatPairs %prec pat_app + | atomicPatternLongIdent opt_explicitValTyparDecls2 HIGH_PRECEDENCE_PAREN_APP atomicPatsOrNamePatPairs + | atomicPatternLongIdent opt_explicitValTyparDecls2 HIGH_PRECEDENCE_BRACK_APP atomicPatsOrNamePatPairs + | COLON_QMARK atomTypeOrAnonRecdType %prec pat_isinst + | atomicPattern +atomicPattern: + | quoteExpr + | CHAR DOT_DOT CHAR + | LBRACE recordPatternElementsAux rbrace + | LBRACK listPatternElements RBRACK + | LBRACK_BAR listPatternElements BAR_RBRACK + | UNDERSCORE + | QMARK ident + | atomicPatternLongIdent %prec prec_atompat_pathop + | constant + | FALSE + | TRUE + | NULL + | LPAREN parenPatternBody rparen + | LPAREN parenPatternBody recover + | LPAREN error rparen + | LPAREN recover + | STRUCT LPAREN tupleParenPatternElements rparen + | STRUCT LPAREN tupleParenPatternElements recover + | STRUCT LPAREN error rparen + | STRUCT LPAREN recover +parenPatternBody: + | parenPattern + | /* EMPTY */ +parenPattern: + | parenPattern AS constrPattern + | parenPattern BAR parenPattern + | tupleParenPatternElements + | conjParenPatternElements + | parenPattern COLON typeWithTypeConstraints %prec paren_pat_colon + | attributes parenPattern %prec paren_pat_attribs + | parenPattern COLON_COLON parenPattern + | constrPattern + *) + let _, checkResults = getParseAndCheckResultsPreview $""" +let eq<'T> (x:'T option) = () // FS-1093-safe type assert function +let (|Id0|) = ignore +let (|Id1|) = id +let (|Id2|) _ = id +type AAA = {{ aaa : int }} +let a = 1 +let b as c = 2 +let d as e | d & e = 3 +let f as g, h = 4, 5 +let i as j & k = 6 +let l as Id1 m = 7 +let n as Id2 a o = 8 +let p as {{ aaa = q }} = {{ aaa = 9 }} +let r as _ = 10 +let s as Id0 = 11 +let t as (u) = 12 +let v as struct(w, x) = 13, 14 +let y as z : int = 15{set { 'a'..'x' } - set [ 'p'; 'v' ] |> Set.map (sprintf " + %c") |> System.String.Concat} +Some p |> eq +Some v |> eq +() +""" + assertHasSymbolUsages (List.map string ['a'..'z']) checkResults + dumpErrors checkResults |> shouldEqual [] + +[] +#if !NETCOREAPP +[] +#endif +let ``As 08 - syntactical precedence matrix testing right - partial patterns`` () = + let _, checkResults = getParseAndCheckResultsPreview """ +let eq<'T> (x:'T option) = () // FS-1093-safe type assert function +let (|Unit1|_|) x = if System.Random().NextDouble() < 0.5 then Some Unit1 else None +let (|Unit2|_|) _ = (|Unit1|_|) +let (|Id1|_|) x = if System.Random().NextDouble() < 0.5 then Some x else None +let (|Id2|_|) _ = (|Id1|_|) +let a = 1 +let b as c::d as e = 2::[3] +let f as Unit1 = 4 +let g as Unit2 a h = 5 +let i as Id1 j = 6 +let k as Id2 a l = 7 +box 8 |> function +| m as :? int -> +box {| aaa = 9 |} |> function +| n as :? {| aaa : int |} -> +let o as [p] = [10] +let q as [|r|] = [|11|] +let s as 12 = 12 +let t as false = false +let u as true = true +let v as null = null +let w as (null) = null +let x as y : int = 13 + a + b + c + f + g + i + j + k + l + p + r + s +Some d |> eq +Some e |> eq +Some h |> eq +Some m |> eq +Some n |> eq +Some o |> eq +Some q |> eq +Some t |> eq +Some u |> eq +Some v |> eq +Some w |> eq +() +""" + assertHasSymbolUsages (List.map string ['a'..'y']) checkResults + dumpErrors checkResults |> shouldEqual [ + "(8,4--8,18): Incomplete pattern matches on this expression. For example, the value '[]' may indicate a case not covered by the pattern(s)." + "(9,4--9,14): Incomplete pattern matches on this expression." + "(10,4--10,18): Incomplete pattern matches on this expression." + "(11,4--11,14): Incomplete pattern matches on this expression." + "(12,4--12,16): Incomplete pattern matches on this expression." + "(23,4--23,15): Incomplete pattern matches on this expression. For example, the value '( some-non-null-value )' may indicate a case not covered by the pattern(s)." + "(22,4--22,13): Incomplete pattern matches on this expression. For example, the value '( some-non-null-value )' may indicate a case not covered by the pattern(s)." + "(21,4--21,13): Incomplete pattern matches on this expression. For example, the value 'false' may indicate a case not covered by the pattern(s)." + "(20,4--20,14): Incomplete pattern matches on this expression. For example, the value 'true' may indicate a case not covered by the pattern(s)." + "(19,4--19,11): Incomplete pattern matches on this expression. For example, the value '0' may indicate a case not covered by the pattern(s)." + "(18,4--18,14): Incomplete pattern matches on this expression. For example, the value '[|_; _|]' may indicate a case not covered by the pattern(s)." + "(17,4--17,12): Incomplete pattern matches on this expression. For example, the value '[_;_]' may indicate a case not covered by the pattern(s)." + "(15,21--15,29): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(13,9--13,17): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + ] + +[] +#if !NETCOREAPP +[] +#endif +let ``As 09 - syntactical precedence matrix testing right - erroneous patterns`` () = + let _, checkResults = getParseAndCheckResultsPreview """ +let (|DefinedPattern|) = id +let a as 1 = true +let b as true = 2 +let c as :? int = box 3 +let d as :? int = 4 +let e as UndefinedPattern = 5 +let f as DefinedPattern () = 6 +let g as DefinedPattern = 7 +let h as , i = 8 +let j as : k = 9 +let l as :: m = 10 +let n as & o = 11 +let p as | q = 12 +let r as ( s = 13 +let t as ) u = 14 +let v as struct w = 15 +let x as () = y +let z as +""" + dumpErrors checkResults |> shouldEqual [ + "(10,9--10,10): Unexpected symbol ',' in binding" + "(11,9--11,10): Unexpected symbol ':' in binding" + "(12,9--12,11): Unexpected symbol '::' in binding" + "(13,9--13,10): Unexpected symbol '&' in binding" + "(14,9--14,10): Unexpected symbol '|' in binding" + "(15,13--15,14): Unexpected symbol '=' in pattern. Expected ')' or other token." + "(15,9--15,10): Unmatched '('" + "(16,0--16,3): Possible incorrect indentation: this token is offside of context started at position (15:10). Try indenting this token further or using standard formatting conventions." + "(17,16--17,17): Unexpected identifier in pattern. Expected '(' or other token." + "(20,0--20,0): Incomplete structured construct at or before this point in binding" + "(3,13--3,17): This expression was expected to have type 'int' but here has type 'bool'" + "(3,4--3,10): Incomplete pattern matches on this expression. For example, the value '0' may indicate a case not covered by the pattern(s)." + "(4,16--4,17): This expression was expected to have type 'bool' but here has type 'int'" + "(4,4--4,13): Incomplete pattern matches on this expression. For example, the value 'false' may indicate a case not covered by the pattern(s)." + "(5,9--5,15): This runtime coercion or type test from type 'a to int involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." + "(6,9--6,15): This runtime coercion or type test from type 'a to int involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." + "(8,29--8,30): This expression was expected to have type 'unit' but here has type 'int'" + "(9,26--9,27): This expression was expected to have type 'unit' but here has type 'int'" + "(18,14--18,15): The value or constructor 'y' is not defined." + ] + +[] +let ``As 10 - syntactical precedence matrix testing left - total patterns`` () = + let _, checkResults = getParseAndCheckResultsPreview $""" +let eq<'T> (x:'T option) = () // FS-1093-safe type assert function +let (|Id0|) = ignore +let (|Id1|) = id +let (|Id2|) _ = id +type AAA = {{ aaa : int }} +let a = 1 +let b as c = 2 +let d | d as e = 3 +let f, g as h = 4, 5 +let i & j as k = 6 +let Id1 l as m = 7 +let Id2 a n as o = 8 +let {{ aaa = p }} as q = {{ aaa = 9 }} +let _ as r = 10 +let Id0 as s = 11 +let (t) as u = 12 +let struct(w, v) as x = 13, 14 +let (y : int) as z = 15{set { 'a'..'v' } - set [ 'h'; 'q' ] |> Set.map (sprintf " + %c") |> System.String.Concat} +Some h |> eq +Some q |> eq +Some x |> eq +() +""" + assertHasSymbolUsages (List.map string ['a'..'z']) checkResults + dumpErrors checkResults |> shouldEqual [] + +[] +#if !NETCOREAPP +[] +#endif +let ``As 11 - syntactical precedence matrix testing left - partial patterns`` () = + let _, checkResults = getParseAndCheckResultsPreview """ +let eq<'T> (x:'T option) = () // FS-1093-safe type assert function +let (|Unit1|_|) x = if System.Random().NextDouble() < 0.5 then Some Unit1 else None +let (|Unit2|_|) _ = (|Unit1|_|) +let (|Id1|_|) x = if System.Random().NextDouble() < 0.5 then Some x else None +let (|Id2|_|) _ = (|Id1|_|) +let a = 1 +let b as (c::d as e) = 2::[3] +let Unit1 as f = 4 +let Unit2 a g as h = 5 +let Id1 i as j = 6 +let Id2 a k as l = 7 +box 8 |> function +| :? int as m -> +box {| aaa = 9 |} |> function +| :? {| aaa : int |} as n -> +let [o] as p = [10] +let [|q|] as r = [|11|] +let 12 as s = 12 +let false as t = false +let true as u = true +let null as v = null +let (null) as w = null +let (x : int) as y = 13 + a + c + f + h + i + j + k + l + m + o + q + s +Some b |> eq +Some d |> eq +Some e |> eq +Some g |> eq +Some n |> eq<{| aaa : int |}> +Some p |> eq +Some r |> eq +Some t |> eq +Some u |> eq +Some v |> eq +Some w |> eq +() +""" + assertHasSymbolUsages (List.map string ['a'..'y']) checkResults + dumpErrors checkResults |> shouldEqual [ + "(8,4--8,20): Incomplete pattern matches on this expression. For example, the value '[]' may indicate a case not covered by the pattern(s)." + "(9,4--9,14): Incomplete pattern matches on this expression." + "(10,4--10,18): Incomplete pattern matches on this expression." + "(11,4--11,14): Incomplete pattern matches on this expression." + "(12,4--12,16): Incomplete pattern matches on this expression." + "(23,4--23,15): Incomplete pattern matches on this expression. For example, the value '( some-non-null-value )' may indicate a case not covered by the pattern(s)." + "(22,4--22,13): Incomplete pattern matches on this expression. For example, the value '( some-non-null-value )' may indicate a case not covered by the pattern(s)." + "(21,4--21,13): Incomplete pattern matches on this expression. For example, the value 'false' may indicate a case not covered by the pattern(s)." + "(20,4--20,14): Incomplete pattern matches on this expression. For example, the value 'true' may indicate a case not covered by the pattern(s)." + "(19,4--19,11): Incomplete pattern matches on this expression. For example, the value '0' may indicate a case not covered by the pattern(s)." + "(18,4--18,14): Incomplete pattern matches on this expression. For example, the value '[|_; _|]' may indicate a case not covered by the pattern(s)." + "(17,4--17,12): Incomplete pattern matches on this expression. For example, the value '[_;_]' may indicate a case not covered by the pattern(s)." + "(15,21--15,29): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(13,9--13,17): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + ] + +[] +#if !NETCOREAPP +[] +#endif +let ``As 12 - syntactical precedence matrix testing left - erroneous patterns`` () = + let _, checkResults = getParseAndCheckResultsPreview """ +let (|DefinedPattern|) = id +let 1 as a = true +let true as b = 2 +let :? int as c = box 3 +let :? int as d = 4 +let UndefinedPattern as e = 5 +let DefinedPattern () as f = 6 +let DefinedPattern as g = 7 +let h, as i = 8 +let j : _ as k = 9 +let l :: as m = 10 +let n & as o = 11 +let p | as q = 12 +let r ( as s = 13 +let t ) as u = 14 +let v struct as w = 15 +let () as x = y +let z as = +""" + dumpErrors checkResults |> shouldEqual [ + "(10,7--10,9): Unexpected keyword 'as' in binding" + "(11,10--11,12): Unexpected keyword 'as' in binding. Expected '=' or other token." + "(12,9--12,11): Unexpected keyword 'as' in binding" + "(13,8--13,10): Unexpected keyword 'as' in binding" + "(14,8--14,10): Unexpected keyword 'as' in binding" + "(15,8--15,10): Unexpected keyword 'as' in pattern. Expected ')' or other token." + "(15,6--15,7): Unmatched '('" + "(16,0--16,3): Possible incorrect indentation: this token is offside of context started at position (15:7). Try indenting this token further or using standard formatting conventions." + "(16,0--16,3): Unexpected keyword 'let' or 'use' in binding. Expected incomplete structured construct at or before this point or other token." + "(15,0--15,3): Incomplete value or function definition. If this is in an expression, the body of the expression must be indented to the same column as the 'let' keyword." + "(17,0--17,3): Incomplete structured construct at or before this point in implementation file" + "(20,0--20,0): Possible incorrect indentation: this token is offside of context started at position (19:1). Try indenting this token further or using standard formatting conventions." + "(20,0--20,0): Possible incorrect indentation: this token is offside of context started at position (19:1). Try indenting this token further or using standard formatting conventions." + "(3,13--3,17): This expression was expected to have type 'int' but here has type 'bool'" + "(3,4--3,10): Incomplete pattern matches on this expression. For example, the value '0' may indicate a case not covered by the pattern(s)." + "(4,16--4,17): This expression was expected to have type 'bool' but here has type 'int'" + "(4,4--4,13): Incomplete pattern matches on this expression. For example, the value 'false' may indicate a case not covered by the pattern(s)." + "(5,4--5,10): This runtime coercion or type test from type 'a to int involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." + "(6,4--6,10): This runtime coercion or type test from type 'a to int involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." + "(8,29--8,30): This expression was expected to have type 'unit' but here has type 'int'" + "(9,26--9,27): This expression was expected to have type 'unit' but here has type 'int'" + "(15,4--15,5): The pattern discriminator 'r' is not defined." + "(15,4--15,12): Incomplete pattern matches on this expression." + ] + +[] +#if !NETCOREAPP +[] +#endif +let ``As 13 - syntactical precedence matrix testing right with type tests - total patterns`` () = + let _, checkResults = getParseAndCheckResultsPreview $""" +let eq<'T> (x:'T option) = () // FS-1093-safe type assert function +let (|Id0|) = ignore +let (|Id1|) = id +let (|Id2|) _ = id +type AAA = {{ aaa : int }} +let a = 1 +match box 2 with +| :? int as b as c -> +match box 3 with +| :? int as d | :? int & d as e -> // The left d has type 'int', the right d has type 'obj' +match box 4, 5 with +| :? int as f, g & h -> +match box 6 with +| :? int as i & j as k -> +match box 7 with +| :? int as Id1 l as m -> +match box 8 with +| :? int as Id2 a n as o -> +match box {{ aaa = 9 }} with +| :? AAA as {{ aaa = p }} as q -> +match box 10 with +| :? int as _ as r -> +match box 11 with +| :? int as Id0 as s -> +match box 12 with +| :? int as (t) as u -> +match box struct(13, 14) with +| :? struct(int * int) as struct(v, w) as x -> +let y as z : int = 15 + a + b + d + f + g + h + i + l + n + p + t + v + w +Some c |> eq +Some e |> eq +Some j |> eq +Some k |> eq +Some m |> eq +Some o |> eq +Some q |> eq +Some r |> eq +Some s |> eq +Some u |> eq +Some x |> eq +() +""" + assertHasSymbolUsages (List.map string ['a'..'z']) checkResults + dumpErrors checkResults |> shouldEqual [ + "(11,25--11,26): This expression was expected to have type 'int' but here has type 'obj'" + "(28,6--28,24): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(26,6--26,12): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(24,6--24,12): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(22,6--22,12): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(20,6--20,21): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(18,6--18,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(16,6--16,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(14,6--14,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(12,6--12,14): Incomplete pattern matches on this expression. For example, the value '(( some-other-subtype ),_)' may indicate a case not covered by the pattern(s)." + "(10,6--10,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(8,6--8,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + ] + +[] +#if !NETCOREAPP +[] +#endif +let ``As 14 - syntactical precedence matrix testing right with type tests - partial patterns`` () = + let _, checkResults = getParseAndCheckResultsPreview """ +let eq<'T> (x:'T option) = () // FS-1093-safe type assert function +let (|Unit1|_|) x = if System.Random().NextDouble() < 0.5 then Some Unit1 else None +let (|Unit2|_|) _ = (|Unit1|_|) +let (|Id1|_|) x = if System.Random().NextDouble() < 0.5 then Some x else None +let (|Id2|_|) _ = (|Id1|_|) +let a = 1 +match box 2::[box 3] with +| :? int as b as c::d as e -> +match box 4 with +| :? int as Unit1 as f -> +match box 5 with +| :? int as Unit2 a g as h -> +match box 6 with +| :? int as Id1 i as j -> +match box 7 with +| :? int as Id2 a k as l -> +match box 8 with +| :? System.ValueType as :? int as m -> +match box {| aaa = 9 |} with +| :? obj as :? {| aaa : int |} as n -> +match box [10] with +| :? (int list) as [o] as p -> +match box [|11|] with +| :? (int[]) as [|q|] as r -> +match box 12 with +| :? int as 12 as s -> +match box false with +| :? bool as false as t -> +match box true with +| :? bool as true as u -> +match box null with +| :? System.ValueType as null as v -> +match box null with +| :? System.ValueType as (null) as w -> +let x as y : int = 13 + a + b + i + k + o + q +Some c |> eq +Some d |> eq +Some e |> eq +Some f |> eq +Some g |> eq +Some h |> eq +Some j |> eq +Some l |> eq +Some m |> eq +Some n |> eq +Some p |> eq +Some r |> eq +Some s |> eq +Some t |> eq +Some u |> eq +Some v |> eq +Some w |> eq +() +""" + assertHasSymbolUsages (set ['a' .. 'y'] |> Set.remove 'n' |> Set.map string |> Set.toList) checkResults + dumpErrors checkResults |> shouldEqual [ + "(21,2--21,8): This type test or downcast will always hold" + "(34,6--34,14): Incomplete pattern matches on this expression. For example, the value '( some-non-null-value )' may indicate a case not covered by the pattern(s)." + "(32,6--32,14): Incomplete pattern matches on this expression. For example, the value '( some-non-null-value )' may indicate a case not covered by the pattern(s)." + "(30,6--30,14): Incomplete pattern matches on this expression. For example, the value 'false' may indicate a case not covered by the pattern(s)." + "(28,6--28,15): Incomplete pattern matches on this expression. For example, the value 'true' may indicate a case not covered by the pattern(s)." + "(26,6--26,12): Incomplete pattern matches on this expression. For example, the value '0' may indicate a case not covered by the pattern(s)." + "(24,6--24,16): Incomplete pattern matches on this expression. For example, the value '[|_; _|]' may indicate a case not covered by the pattern(s)." + "(22,6--22,14): Incomplete pattern matches on this expression. For example, the value '[_;_]' may indicate a case not covered by the pattern(s)." + "(20,6--20,23): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(18,6--18,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(16,6--16,11): Incomplete pattern matches on this expression." + "(14,6--14,11): Incomplete pattern matches on this expression." + "(12,6--12,11): Incomplete pattern matches on this expression." + "(10,6--10,11): Incomplete pattern matches on this expression." + "(8,6--8,20): Incomplete pattern matches on this expression. For example, the value '[( some-other-subtype )]' may indicate a case not covered by the pattern(s)." + ] + +[] +#if !NETCOREAPP +[] +#endif +let ``As 15 - syntactical precedence matrix testing right with type tests - erroneous patterns`` () = + let _, checkResults = getParseAndCheckResultsPreview """ +let (|DefinedPattern|) = id +let :? a as 1 = true +let :? b as true = 2 +let :? c as :? int = box 3 +let :? d as :? int = 4 +let :? e as UndefinedPattern = 5 +let :? f as DefinedPattern () = 6 +let :? g as DefinedPattern = 7 +let :? h as , i = 8 +let :? j as : k = 9 +let :? l as :: m = 10 +let :? n as & o = 11 +let :? p as | q = 12 +let :? r as ( s = 13 +let :? t as ) u = 14 +let :? v as struct w = 15 +let :? x as () = y +let :? z as +""" + dumpErrors checkResults |> shouldEqual [ + "(10,12--10,13): Unexpected symbol ',' in binding" + "(11,12--11,13): Unexpected symbol ':' in binding" + "(12,12--12,14): Unexpected symbol '::' in binding" + "(13,12--13,13): Unexpected symbol '&' in binding" + "(14,12--14,13): Unexpected symbol '|' in binding" + "(15,16--15,17): Unexpected symbol '=' in pattern. Expected ')' or other token." + "(15,12--15,13): Unmatched '('" + "(16,0--16,3): Possible incorrect indentation: this token is offside of context started at position (15:13). Try indenting this token further or using standard formatting conventions." + "(17,19--17,20): Unexpected identifier in pattern. Expected '(' or other token." + "(20,0--20,0): Incomplete structured construct at or before this point in binding" + "(3,7--3,8): The type 'a' is not defined." + "(3,4--3,8): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." + "(4,7--4,8): The type 'b' is not defined." + "(4,4--4,8): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." + "(5,7--5,8): The type 'c' is not defined." + "(5,4--5,8): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." + "(6,7--6,8): The type 'd' is not defined." + "(6,4--6,8): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." + "(7,7--7,8): The type 'e' is not defined." + "(7,4--7,8): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." + "(8,7--8,8): The type 'f' is not defined." + "(8,4--8,8): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." + "(9,7--9,8): The type 'g' is not defined." + "(9,4--9,8): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." + "(15,7--15,8): The type 'r' is not defined." + "(15,4--15,8): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." + "(18,7--18,8): The type 'x' is not defined." + "(18,4--18,8): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." + ] + +[] +#if !NETCOREAPP +[] +#endif +let ``As 16 - syntactical precedence matrix testing left with type tests - total patterns`` () = + let validSet = set { 'a'..'x' } - set [ 'p'; 'q' ] |> Set.map string + let _, checkResults = getParseAndCheckResultsPreview $""" +let eq<'T> (x:'T option) = () // FS-1093-safe type assert function +let (|Id0|) = ignore +let (|Id1|) = id +let (|Id2|) _ = id +type AAA = {{ aaa : int }} +let a = 1 +match box 2 with +| b as :? int as c -> +match box 3 with +| d as :? int | d & :? int as e -> +match box 4, 5 with +| f as :? int, g as h -> +match box 6 with +| i as :? int & j as k -> +match box 7 with +| Id1 l as :? int as m -> +match box 8 with +| Id2 a n as :? int as o -> +match box 10 with +| _ as :? int as r -> +match box 11 with +| Id0 as :? int as s -> +match box 12 with +| (t) as :? int as u -> +match box struct(13, 14) with +| struct(v, w) as :? struct(int * int) as x -> +Some a |> eq +Some g |> eq +Some h |> eq +{validSet - set [ "a"; "g"; "h" ] |> Set.map (sprintf "Some %s |> eq\n") |> System.String.Concat} +match box {{ aaa = 9 }} with +| {{ aaa = p }} as :? AAA as q -> +Some "" |> eq // No more type checks after the above line? +""" + assertHasSymbolUsages (Set.toList validSet) checkResults + dumpErrors checkResults |> shouldEqual [ + "(27,2--27,14): This expression was expected to have type 'obj' but here has type 'struct ('a * 'b)'" + "(52,2--52,13): This expression was expected to have type 'obj' but here has type 'AAA'" + "(26,6--26,24): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(24,6--24,12): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(22,6--22,12): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(20,6--20,12): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(18,6--18,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(16,6--16,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(14,6--14,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(12,6--12,14): Incomplete pattern matches on this expression. For example, the value '(( some-other-subtype ),_)' may indicate a case not covered by the pattern(s)." + "(10,6--10,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(8,6--8,11): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + ] + +[] +#if !NETCOREAPP +[] +#endif +let ``As 17 - syntactical precedence matrix testing left with type tests - partial patterns`` () = + let _, checkResults = getParseAndCheckResultsPreview """ +let eq<'T> (x:'T option) = () // FS-1093-safe type assert function +let (|Unit1|_|) x = if System.Random().NextDouble() < 0.5 then Some Unit1 else None +let (|Unit2|_|) _ = (|Unit1|_|) +let (|Id1|_|) x = if System.Random().NextDouble() < 0.5 then Some x else None +let (|Id2|_|) _ = (|Id1|_|) +let a = 1 +match box 2::[box 3] with +| b as :? int as c::d as e -> +match box 4 with +| Unit1 as :? int as f -> +match box 5 with +| Unit2 a g as :? int as h -> +match box 6 with +| Id1 i as :? int as j -> +match box 7 with +| Id2 a k as :? int as l -> +match box 12 with +| 12 as :? int as s -> +match box false with +| false as :? bool as t -> +match box true with +| true as :? bool as u -> +match box null with +| null as :? System.ValueType as v -> +match box null with +| (null) as :? System.ValueType as w -> +let x as y : int = 13 + a + b +Some a |> eq +Some b |> eq +Some c |> eq +Some d |> eq +Some e |> eq +Some f |> eq +Some g |> eq +Some h |> eq +Some i |> eq +Some j |> eq +Some k |> eq +Some l |> eq +Some m |> eq +Some n |> eq +Some o |> eq +Some p |> eq +Some q |> eq +Some r |> eq +Some s |> eq +Some t |> eq +Some u |> eq +Some v |> eq +Some w |> eq +Some x |> eq +Some y |> eq +match box 8 with +| :? int as :? System.ValueType as m -> +match box {| aaa = 9 |} with +| :? {| aaa : int |} as :? obj as n -> +match box [10] with +| [o] as :? (int list) as p -> +match box [|11|] with +| [|q|] as :? (int[]) as r -> +// No more type checking after the above 4 matches +Some "" |> eq +""" + assertHasSymbolUsages (set ['a'..'y'] - set [ 'm'..'r' ] |> Set.map string |> Set.toList) checkResults + dumpErrors checkResults |> shouldEqual [ + "(19,2--19,4): This expression was expected to have type 'obj' but here has type 'int'" + "(21,2--21,7): This expression was expected to have type 'obj' but here has type 'bool'" + "(23,2--23,6): This expression was expected to have type 'obj' but here has type 'bool'" + "(28,28--28,29): The type 'obj' does not match the type 'int'" + "(41,5--41,6): The value or constructor 'm' is not defined." + "(42,5--42,6): The value or constructor 'n' is not defined." + "(43,5--43,6): The value or constructor 'o' is not defined." + "(44,5--44,6): The value or constructor 'p' is not defined." + "(45,5--45,6): The value or constructor 'q' is not defined." + "(46,5--46,6): The value or constructor 'r' is not defined." + "(55,12--55,31): The type 'int' does not have any proper subtypes and cannot be used as the source of a type test or runtime coercion." + "(26,6--26,14): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(24,6--24,14): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(22,6--22,14): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(20,6--20,15): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(18,6--18,12): Incomplete pattern matches on this expression. For example, the value '( some-other-subtype )' may indicate a case not covered by the pattern(s)." + "(16,6--16,11): Incomplete pattern matches on this expression." + "(14,6--14,11): Incomplete pattern matches on this expression." + "(12,6--12,11): Incomplete pattern matches on this expression." + "(10,6--10,11): Incomplete pattern matches on this expression." + "(8,6--8,20): Incomplete pattern matches on this expression. For example, the value '[( some-other-subtype )]' may indicate a case not covered by the pattern(s)." + ] + +[] +#if !NETCOREAPP +[] +#endif +let ``As 18 - syntactical precedence matrix testing left with type tests - erroneous patterns`` () = + let _, checkResults = getParseAndCheckResultsPreview """ +let (|DefinedPattern|) = id +let 1 as :? a = true +let true as :? b = 2 +let :? int as :? c = box 3 +let :? int as :? d = 4 +let UndefinedPattern as :? e = 5 +let DefinedPattern () as :? f = 6 +let DefinedPattern as :? g = 7 +let h, as :? i = 8 +let j : _ as :? k = 9 +let l :: as :? m = 10 +let n & as :? o = 11 +let p | as :? q = 12 +let r struct as :? s = 13 +let t ( as :? u = 14 +let v [ as :? w = 15 +let () as :? x = y +let as :? z = +""" + dumpErrors checkResults |> shouldEqual [ + "(10,7--10,9): Unexpected keyword 'as' in binding" + "(11,10--11,12): Unexpected keyword 'as' in binding. Expected '=' or other token." + "(12,9--12,11): Unexpected keyword 'as' in binding" + "(13,8--13,10): Unexpected keyword 'as' in binding" + "(14,8--14,10): Unexpected keyword 'as' in binding" + "(15,13--15,15): Unexpected keyword 'as' in pattern. Expected '(' or other token." + "(16,8--16,10): Unexpected keyword 'as' in pattern. Expected ')' or other token." + "(16,6--16,7): Unmatched '('" + "(17,0--17,3): Possible incorrect indentation: this token is offside of context started at position (16:7). Try indenting this token further or using standard formatting conventions." + "(17,0--17,3): Unexpected keyword 'let' or 'use' in binding. Expected incomplete structured construct at or before this point or other token." + "(16,0--16,3): Incomplete value or function definition. If this is in an expression, the body of the expression must be indented to the same column as the 'let' keyword." + "(17,8--17,10): Unexpected keyword 'as' in pattern. Expected ']' or other token." + "(18,0--18,3): Possible incorrect indentation: this token is offside of context started at position (17:7). Try indenting this token further or using standard formatting conventions." + "(19,0--19,3): Possible incorrect indentation: this token is offside of context started at position (18:1). Try indenting this token further or using standard formatting conventions." + "(20,0--20,0): Possible incorrect indentation: this token is offside of context started at position (19:1). Try indenting this token further or using standard formatting conventions." + "(20,0--20,0): Possible incorrect indentation: this token is offside of context started at position (19:1). Try indenting this token further or using standard formatting conventions." + "(3,12--3,13): The type 'a' is not defined." + "(3,9--3,13): The type 'int' does not have any proper subtypes and cannot be used as the source of a type test or runtime coercion." + "(4,15--4,16): The type 'b' is not defined." + "(4,12--4,16): The type 'bool' does not have any proper subtypes and cannot be used as the source of a type test or runtime coercion." + "(5,4--5,10): This runtime coercion or type test from type 'a to int involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." + "(6,4--6,10): This runtime coercion or type test from type 'a to int involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." + "(7,27--7,28): The type 'e' is not defined." + "(7,24--7,28): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." + "(8,28--8,29): The type 'f' is not defined." + "(8,25--8,29): The type 'unit' does not have any proper subtypes and cannot be used as the source of a type test or runtime coercion." + "(9,25--9,26): The type 'g' is not defined." + "(9,22--9,26): The type 'unit' does not have any proper subtypes and cannot be used as the source of a type test or runtime coercion." + "(16,4--16,5): The pattern discriminator 't' is not defined." + "(16,14--16,15): The type 'u' is not defined." + "(16,11--16,15): This runtime coercion or type test from type 'a to 'b involves an indeterminate type based on information prior to this program point. Runtime type tests are not allowed on some types. Further type annotations are needed." + ] + +[] +#if !NETCOREAPP +[] +#endif +let ``As 19 - syntactical precedence matrix testing - valid syntactic patterns that cause type errors later`` () = + let _, checkResults = getParseAndCheckResultsPreview """ +type I() = inherit System.Attribute() +type M() = inherit I() +let 'a'..'b' as c = 'd' +let e as 'f'..'g' = 'h' +let [] j as k = 1 +let l as [] n = 2 +let <@ o @> as p = 3 +let q as <@ r @> = 4 +let <@@ s @@> as t = 5 +let u as <@@ v @@> = 6 +let ?w as x = 7 +let y as ?z = 8 +() +""" + dumpErrors checkResults |> shouldEqual [ + "(7,9--7,11): Unexpected symbol '[<' in binding" + "(4,4--4,12): This construct is deprecated: Character range matches have been removed in F#. Consider using a 'when' pattern guard instead." + "(4,4--4,17): Incomplete pattern matches on this expression. For example, the value '' '' may indicate a case not covered by the pattern(s)." + "(5,9--5,17): This construct is deprecated: Character range matches have been removed in F#. Consider using a 'when' pattern guard instead." + "(5,4--5,17): Incomplete pattern matches on this expression. For example, the value '' '' may indicate a case not covered by the pattern(s)." + "(8,4--8,11): This is not a valid pattern" + "(8,4--8,16): Incomplete pattern matches on this expression." + "(9,9--9,16): This is not a valid pattern" + "(9,4--9,16): Incomplete pattern matches on this expression." + "(10,4--10,13): This is not a valid pattern" + "(10,4--10,18): Incomplete pattern matches on this expression." + "(11,9--11,18): This is not a valid pattern" + "(11,4--11,18): Incomplete pattern matches on this expression." + "(12,4--12,6): Optional arguments are only permitted on type members" + "(13,9--13,11): Optional arguments are only permitted on type members" + ] + +[] +#if !NETCOREAPP +[] +#endif +let ``As 20 - limit the right of 'as' patterns to only variable patterns in F# 5`` () = + let _, checkResults = getParseAndCheckResults """ +let f : obj -> _ = + function + | :? int as i -> i + | :? uint as _ -> 0 + | a as :? int64 -> -1 +() +""" + assertHasSymbolUsages ["i"] checkResults + dumpErrors checkResults |> shouldEqual [ + "(5,6--5,18): Feature 'non-variable patterns to the right of 'as' patterns' is not available in F# 5.0. Please use language version 'preview' or greater." + ] \ No newline at end of file diff --git a/tests/service/PerfTests.fs b/tests/service/PerfTests.fs index ffffa412a36..b947555dbb6 100644 --- a/tests/service/PerfTests.fs +++ b/tests/service/PerfTests.fs @@ -11,23 +11,23 @@ module FSharp.Compiler.Service.Tests.PerfTests open NUnit.Framework open FsUnit open System.IO - -open FSharp.Compiler.SourceCodeServices - +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.IO +open FSharp.Compiler.Text open FSharp.Compiler.Service.Tests.Common -// Create an interactive checker instance +// Create an interactive checker instance let internal checker = FSharpChecker.Create() -module internal Project1 = +module internal Project1 = let fileNamesI = [ for i in 1 .. 10 -> (i, Path.ChangeExtension(Path.GetTempFileName(), ".fs")) ] let base2 = Path.GetTempFileName() let dllName = Path.ChangeExtension(base2, ".dll") let projFileName = Path.ChangeExtension(base2, ".fsproj") let fileSources = [ for (i,f) in fileNamesI -> (f, "module M" + string i) ] - for (f,text) in fileSources do File.WriteAllText(f, text) - let fileSources2 = [ for (i,f) in fileSources -> FSharp.Compiler.Text.SourceText.ofString f ] + for (f,text) in fileSources do FileSystem.OpenFileForWriteShim(f).Write(text) + let fileSources2 = [ for (i,f) in fileSources -> SourceText.ofString f ] let fileNames = [ for (_,f) in fileNamesI -> f ] let args = mkProjectCommandLineArgs (dllName, fileNames) @@ -36,20 +36,21 @@ module internal Project1 = [] -let ``Test request for parse and check doesn't check whole project`` () = +[] +let ``Test request for parse and check doesn't check whole project`` () = printfn "starting test..." - let backgroundParseCount = ref 0 - let backgroundCheckCount = ref 0 + let backgroundParseCount = ref 0 + let backgroundCheckCount = ref 0 checker.FileChecked.Add (fun x -> incr backgroundCheckCount) checker.FileParsed.Add (fun x -> incr backgroundParseCount) checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() - let pB, tB = FSharpChecker.GlobalForegroundParseCountStatistic, FSharpChecker.GlobalForegroundTypeCheckCountStatistic + let pB, tB = FSharpChecker.ActualParseFileCount, FSharpChecker.ActualCheckFileCount printfn "ParseFile()..." let parseResults1 = checker.ParseFile(Project1.fileNames.[5], Project1.fileSources2.[5], Project1.parsingOptions) |> Async.RunSynchronously - let pC, tC = FSharpChecker.GlobalForegroundParseCountStatistic, FSharpChecker.GlobalForegroundTypeCheckCountStatistic + let pC, tC = FSharpChecker.ActualParseFileCount, FSharpChecker.ActualCheckFileCount (pC - pB) |> shouldEqual 1 (tC - tB) |> shouldEqual 0 printfn "checking backgroundParseCount.Value = %d" backgroundParseCount.Value @@ -59,7 +60,7 @@ let ``Test request for parse and check doesn't check whole project`` () = printfn "CheckFileInProject()..." let checkResults1 = checker.CheckFileInProject(parseResults1, Project1.fileNames.[5], 0, Project1.fileSources2.[5], Project1.options) |> Async.RunSynchronously - let pD, tD = FSharpChecker.GlobalForegroundParseCountStatistic, FSharpChecker.GlobalForegroundTypeCheckCountStatistic + let pD, tD = FSharpChecker.ActualParseFileCount, FSharpChecker.ActualCheckFileCount printfn "checking background parsing happened...., backgroundParseCount.Value = %d" backgroundParseCount.Value (backgroundParseCount.Value >= 5) |> shouldEqual true // but note, the project does not get reparsed @@ -78,7 +79,7 @@ let ``Test request for parse and check doesn't check whole project`` () = printfn "CheckFileInProject()..." let checkResults2 = checker.CheckFileInProject(parseResults1, Project1.fileNames.[7], 0, Project1.fileSources2.[7], Project1.options) |> Async.RunSynchronously - let pE, tE = FSharpChecker.GlobalForegroundParseCountStatistic, FSharpChecker.GlobalForegroundTypeCheckCountStatistic + let pE, tE = FSharpChecker.ActualParseFileCount, FSharpChecker.ActualCheckFileCount printfn "checking no extra foreground parsing...., (pE - pD) = %d" (pE - pD) (pE - pD) |> shouldEqual 0 printfn "checking one foreground typecheck...., tE - tD = %d" (tE - tD) @@ -91,7 +92,7 @@ let ``Test request for parse and check doesn't check whole project`` () = printfn "ParseAndCheckFileInProject()..." // A subsequent ParseAndCheck of identical source code doesn't do any more anything let checkResults2 = checker.ParseAndCheckFileInProject(Project1.fileNames.[7], 0, Project1.fileSources2.[7], Project1.options) |> Async.RunSynchronously - let pF, tF = FSharpChecker.GlobalForegroundParseCountStatistic, FSharpChecker.GlobalForegroundTypeCheckCountStatistic + let pF, tF = FSharpChecker.ActualParseFileCount, FSharpChecker.ActualCheckFileCount printfn "checking no extra foreground parsing...." (pF - pE) |> shouldEqual 0 // note, no new parse of the file printfn "checking no extra foreground typechecks...." @@ -101,4 +102,3 @@ let ``Test request for parse and check doesn't check whole project`` () = printfn "checking no extra background typechecks...., backgroundCheckCount.Value = %d" backgroundCheckCount.Value (backgroundCheckCount.Value <= 10) |> shouldEqual true // only two extra typechecks of files () - diff --git a/tests/service/ProjectAnalysisTests.fs b/tests/service/ProjectAnalysisTests.fs index 09b360b66ee..4e6503797c6 100644 --- a/tests/service/ProjectAnalysisTests.fs +++ b/tests/service/ProjectAnalysisTests.fs @@ -13,13 +13,16 @@ open NUnit.Framework open FsUnit open System open System.IO - -open FSharp.Compiler -open FSharp.Compiler.SourceCodeServices - +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.EditorServices +open FSharp.Compiler.IO +open FSharp.Compiler.Text open FSharp.Compiler.Service.Tests.Common +open FSharp.Compiler.Symbols +open FSharp.Compiler.Symbols.FSharpExprPatterns -module internal Project1 = +module internal Project1 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -29,7 +32,7 @@ module internal Project1 = let fileSource1Text = """ module M -type C() = +type C() = member x.P = 1 let xxx = 3 + 4 @@ -37,25 +40,25 @@ let fff () = xxx + xxx type CAbbrev = C """ - let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text - File.WriteAllText(fileName1, fileSource1Text) + let fileSource1 = SourceText.ofString fileSource1Text + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1Text) let fileSource2Text = """ module N open M -type D1() = +type D1() = member x.SomeProperty = M.xxx -type D2() = +type D2() = member x.SomeProperty = M.fff() + D1().P // Generate a warning let y2 = match 1 with 1 -> M.xxx // A class with some 'let' bindings -type D3(a:int) = +type D3(a:int) = let b = a + 4 [] @@ -66,14 +69,14 @@ type D3(a:int) = let pair1,pair2 = (3 + 4 + int32 System.DateTime.Now.Ticks, 5 + 6) // Check enum values -type SaveOptions = +type SaveOptions = | None = 0 | DisableFormatting = 1 let enumValue = SaveOptions.DisableFormatting let (++) x y = x + y - + let c1 = 1 ++ 2 let c2 = 1 ++ 2 @@ -82,8 +85,8 @@ let mmmm1 : M.C = new M.C() // note, these don't count as uses of CA let mmmm2 : M.CAbbrev = new M.CAbbrev() // note, these don't count as uses of C """ - let fileSource2 = FSharp.Compiler.Text.SourceText.ofString fileSource2Text - File.WriteAllText(fileName2, fileSource2Text) + let fileSource2 = SourceText.ofString fileSource2Text + FileSystem.OpenFileForWriteShim(fileName2).Write(fileSource2Text) let fileNames = [fileName1; fileName2] let args = mkProjectCommandLineArgs (dllName, fileNames) @@ -92,20 +95,20 @@ let mmmm2 : M.CAbbrev = new M.CAbbrev() // note, these don't count as uses of C let cleanFileName a = if a = fileName1 then "file1" else if a = fileName2 then "file2" else "??" [] -let ``Test project1 whole project errors`` () = +let ``Test project1 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously - wholeProjectResults .Errors.Length |> shouldEqual 2 - wholeProjectResults.Errors.[1].Message.Contains("Incomplete pattern matches on this expression") |> shouldEqual true // yes it does - wholeProjectResults.Errors.[1].ErrorNumber |> shouldEqual 25 + wholeProjectResults .Diagnostics.Length |> shouldEqual 2 + wholeProjectResults.Diagnostics.[1].Message.Contains("Incomplete pattern matches on this expression") |> shouldEqual true // yes it does + wholeProjectResults.Diagnostics.[1].ErrorNumber |> shouldEqual 25 - wholeProjectResults.Errors.[0].Range.StartLine |> shouldEqual 10 - wholeProjectResults.Errors.[0].Range.EndLine |> shouldEqual 10 - wholeProjectResults.Errors.[0].Range.StartColumn |> shouldEqual 43 - wholeProjectResults.Errors.[0].Range.EndColumn |> shouldEqual 44 + wholeProjectResults.Diagnostics.[0].Range.StartLine |> shouldEqual 10 + wholeProjectResults.Diagnostics.[0].Range.EndLine |> shouldEqual 10 + wholeProjectResults.Diagnostics.[0].Range.StartColumn |> shouldEqual 43 + wholeProjectResults.Diagnostics.[0].Range.EndColumn |> shouldEqual 44 [] -let ``Test project1 and make sure TcImports gets cleaned up`` () = +let ``Test project1 and make sure TcImports gets cleaned up`` () = let test () = let (_, checkFileAnswer) = checker.ParseAndCheckFileInProject(Project1.fileName1, 0, Project1.fileSource1, Project1.options) |> Async.RunSynchronously @@ -117,7 +120,8 @@ let ``Test project1 and make sure TcImports gets cleaned up`` () = let weakTcImports = WeakReference tcImportsOpt.Value Assert.True weakTcImports.IsAlive weakTcImports - + + // Here we are only keeping a handle to weakTcImports and nothing else let weakTcImports = test () checker.InvalidateConfiguration (Project1.options) checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() @@ -127,7 +131,7 @@ let ``Test project1 and make sure TcImports gets cleaned up`` () = [] let ``Test Project1 should have protected FullName and TryFullName return same results`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously - let rec getFullNameComparisons (entity: FSharpEntity) = + let rec getFullNameComparisons (entity: FSharpEntity) = #if !NO_EXTENSIONTYPING seq { if not entity.IsProvided && entity.Accessibility.IsPublic then #else @@ -136,7 +140,7 @@ let ``Test Project1 should have protected FullName and TryFullName return same r yield (entity.TryFullName = try Some entity.FullName with _ -> None) for e in entity.NestedEntities do yield! getFullNameComparisons e } - + wholeProjectResults.ProjectContext.GetReferencedAssemblies() |> List.map (fun asm -> asm.Contents.Entities) |> Seq.collect (Seq.collect getFullNameComparisons) @@ -159,7 +163,7 @@ let ``Test project1 should not throw exceptions on entities from referenced asse Assert.DoesNotThrow(fun () -> Seq.iter (fun _ -> ()) allBaseTypes) [] -let ``Test project1 basic`` () = +let ``Test project1 basic`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously @@ -170,27 +174,27 @@ let ``Test project1 basic`` () = [ for x in wholeProjectResults.AssemblySignature.Entities.[1].NestedEntities -> x.DisplayName ] |> shouldEqual ["C"; "CAbbrev"] - set [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] + set [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] |> shouldEqual (set ["y2"; "pair2"; "pair1"; "( ++ )"; "c1"; "c2"; "mmmm1"; "mmmm2"; "enumValue" ]) [] -let ``Test project1 all symbols`` () = +let ``Test project1 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously let allSymbols = allSymbolsInEntities true wholeProjectResults.AssemblySignature.Entities - for s in allSymbols do + for s in allSymbols do s.DeclarationLocation.IsSome |> shouldEqual true - for s in allSymbols do - match s with - | :? FSharpMemberOrFunctionOrValue as v when v.IsModuleValueOrMember -> + for s in allSymbols do + match s with + | :? FSharpMemberOrFunctionOrValue as v when v.IsModuleValueOrMember -> s.IsAccessible(wholeProjectResults.ProjectContext.AccessibilityRights) |> shouldEqual true - | :? FSharpEntity -> + | :? FSharpEntity -> s.IsAccessible(wholeProjectResults.ProjectContext.AccessibilityRights) |> shouldEqual true | _ -> () - let allDeclarationLocations = - [ for s in allSymbols do + let allDeclarationLocations = + [ for s in allSymbols do let m = s.DeclarationLocation.Value yield s.ToString(), Project1.cleanFileName m.FileName, (m.StartLine, m.StartColumn), (m.EndLine, m.EndColumn ), attribsOfSymbol s ] @@ -237,11 +241,11 @@ let ``Test project1 all symbols`` () = ("CAbbrev", "file1", (10, 5), (10, 12), ["abbrev"]); ("property P", "file1", (5, 13), (5, 14), ["member"; "prop"])] - for s in allSymbols do + for s in allSymbols do s.ImplementationLocation.IsSome |> shouldEqual true - let allImplementationLocations = - [ for s in allSymbols do + let allImplementationLocations = + [ for s in allSymbols do let m = s.ImplementationLocation.Value yield s.ToString(), Project1.cleanFileName m.FileName, (m.StartLine, m.StartColumn), (m.EndLine, m.EndColumn ), attribsOfSymbol s ] @@ -288,8 +292,8 @@ let ``Test project1 all symbols`` () = ("CAbbrev", "file1", (10, 5), (10, 12), ["abbrev"]); ("property P", "file1", (5, 13), (5, 14), ["member"; "prop"])] - [ for x in allSymbols -> x.ToString() ] - |> shouldEqual + [ for x in allSymbols -> x.ToString() ] + |> shouldEqual ["N"; "val y2"; "val pair2"; "val pair1"; "val enumValue"; "val op_PlusPlus"; "val c1"; "val c2"; "val mmmm1"; "val mmmm2"; "D1"; "member .ctor"; "member get_SomeProperty"; "property SomeProperty"; "D2"; "member .ctor"; @@ -300,12 +304,12 @@ let ``Test project1 all symbols`` () = "member get_P"; "property P"; "CAbbrev"; "property P"] [] -let ``Test project1 all symbols excluding compiler generated`` () = +let ``Test project1 all symbols excluding compiler generated`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously let allSymbolsNoCompGen = allSymbolsInEntities false wholeProjectResults.AssemblySignature.Entities - [ for x in allSymbolsNoCompGen -> x.ToString() ] - |> shouldEqual + [ for x in allSymbolsNoCompGen -> x.ToString() ] + |> shouldEqual ["N"; "val y2"; "val pair2"; "val pair1"; "val enumValue"; "val op_PlusPlus"; "val c1"; "val c2"; "val mmmm1"; "val mmmm2"; "D1"; "member .ctor"; "member get_SomeProperty"; "property SomeProperty"; "D2"; "member .ctor"; @@ -316,12 +320,12 @@ let ``Test project1 all symbols excluding compiler generated`` () = "property P"] [] -let ``Test project1 xxx symbols`` () = +let ``Test project1 xxx symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project1.fileName1, Project1.options) + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project1.fileName1, Project1.options) |> Async.RunSynchronously let xSymbolUseOpt = backgroundTypedParse1.GetSymbolUseAtLocation(9,9,"",["xxx"]) @@ -329,9 +333,9 @@ let ``Test project1 xxx symbols`` () = let xSymbol = xSymbolUse.Symbol xSymbol.ToString() |> shouldEqual "val xxx" - let usesOfXSymbol = + let usesOfXSymbol = [ for su in wholeProjectResults.GetUsesOfSymbol(xSymbol) do - yield Project1.cleanFileName su.FileName , tups su.RangeAlternate, attribsOfSymbol su.Symbol ] + yield Project1.cleanFileName su.FileName , tups su.Range, attribsOfSymbol su.Symbol ] usesOfXSymbol |> shouldEqual [("file1", ((7, 4), (7, 7)), ["val"]); @@ -341,16 +345,16 @@ let ``Test project1 xxx symbols`` () = ("file2", ((13, 27), (13, 32)), ["val"])] [] -let ``Test project1 all uses of all signature symbols`` () = +let ``Test project1 all uses of all signature symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously let allSymbols = allSymbolsInEntities true wholeProjectResults.AssemblySignature.Entities - let allUsesOfAllSymbols = - [ for s in allSymbols do - yield s.ToString(), - [ for s in wholeProjectResults.GetUsesOfSymbol(s) -> - (Project1.cleanFileName s.FileName, tupsZ s.RangeAlternate) ] ] - let expected = + let allUsesOfAllSymbols = + [ for s in allSymbols do + yield s.ToString(), + [ for s in wholeProjectResults.GetUsesOfSymbol(s) -> + (Project1.cleanFileName s.FileName, tupsZ s.Range) ] ] + let expected = [("N", [("file2", ((1, 7), (1, 8)))]); ("val y2", [("file2", ((12, 4), (12, 6)))]); ("val pair2", [("file2", ((23, 10), (23, 15)))]); @@ -409,13 +413,13 @@ let ``Test project1 all uses of all signature symbols`` () = (set expected = set allUsesOfAllSymbols) |> shouldEqual true [] -let ``Test project1 all uses of all symbols`` () = +let ``Test project1 all uses of all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = - [ for s in wholeProjectResults.GetAllUsesOfAllSymbols() -> - s.Symbol.DisplayName, s.Symbol.FullName, Project1.cleanFileName s.FileName, tupsZ s.RangeAlternate, attribsOfSymbol s.Symbol ] - let expected = + let allUsesOfAllSymbols = + [ for s in wholeProjectResults.GetAllUsesOfAllSymbols() -> + s.Symbol.DisplayName, s.Symbol.FullName, Project1.cleanFileName s.FileName, tupsZ s.Range, attribsOfSymbol s.Symbol ] + let expected = [("C", "M.C", "file1", ((3, 5), (3, 6)), ["class"]); ("( .ctor )", "M.C.( .ctor )", "file1", ((3, 5), (3, 6)), ["member"; "ctor"]); @@ -547,33 +551,33 @@ let ``Test project1 all uses of all symbols`` () = #if !NO_EXTENSIONTYPING [] -let ``Test file explicit parse symbols`` () = +let ``Test file explicit parse symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously let parseResults1 = checker.ParseFile(Project1.fileName1, Project1.fileSource1, Project1.parsingOptions) |> Async.RunSynchronously let parseResults2 = checker.ParseFile(Project1.fileName2, Project1.fileSource2, Project1.parsingOptions) |> Async.RunSynchronously - let checkResults1 = - checker.CheckFileInProject(parseResults1, Project1.fileName1, 0, Project1.fileSource1, Project1.options) + let checkResults1 = + checker.CheckFileInProject(parseResults1, Project1.fileName1, 0, Project1.fileSource1, Project1.options) |> Async.RunSynchronously |> function FSharpCheckFileAnswer.Succeeded x -> x | _ -> failwith "unexpected aborted" - let checkResults2 = + let checkResults2 = checker.CheckFileInProject(parseResults2, Project1.fileName2, 0, Project1.fileSource2, Project1.options) |> Async.RunSynchronously |> function FSharpCheckFileAnswer.Succeeded x -> x | _ -> failwith "unexpected aborted" let xSymbolUse2Opt = checkResults1.GetSymbolUseAtLocation(9,9,"",["xxx"]) let xSymbol2 = xSymbolUse2Opt.Value.Symbol - let usesOfXSymbol2 = - [| for s in wholeProjectResults.GetUsesOfSymbol(xSymbol2) -> (Project1.cleanFileName s.FileName, tupsZ s.RangeAlternate) |] + let usesOfXSymbol2 = + [| for s in wholeProjectResults.GetUsesOfSymbol(xSymbol2) -> (Project1.cleanFileName s.FileName, tupsZ s.Range) |] - let usesOfXSymbol21 = - [| for s in checkResults1.GetUsesOfSymbolInFile(xSymbol2) -> (Project1.cleanFileName s.FileName, tupsZ s.RangeAlternate) |] + let usesOfXSymbol21 = + [| for s in checkResults1.GetUsesOfSymbolInFile(xSymbol2) -> (Project1.cleanFileName s.FileName, tupsZ s.Range) |] - let usesOfXSymbol22 = - [| for s in checkResults2.GetUsesOfSymbolInFile(xSymbol2) -> (Project1.cleanFileName s.FileName, tupsZ s.RangeAlternate) |] + let usesOfXSymbol22 = + [| for s in checkResults2.GetUsesOfSymbolInFile(xSymbol2) -> (Project1.cleanFileName s.FileName, tupsZ s.Range) |] usesOfXSymbol2 |> shouldEqual [|("file1", ((6, 4), (6, 7))); @@ -593,29 +597,29 @@ let ``Test file explicit parse symbols`` () = [] -let ``Test file explicit parse all symbols`` () = +let ``Test file explicit parse all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project1.options) |> Async.RunSynchronously let parseResults1 = checker.ParseFile(Project1.fileName1, Project1.fileSource1, Project1.parsingOptions) |> Async.RunSynchronously let parseResults2 = checker.ParseFile(Project1.fileName2, Project1.fileSource2, Project1.parsingOptions) |> Async.RunSynchronously - let checkResults1 = - checker.CheckFileInProject(parseResults1, Project1.fileName1, 0, Project1.fileSource1, Project1.options) + let checkResults1 = + checker.CheckFileInProject(parseResults1, Project1.fileName1, 0, Project1.fileSource1, Project1.options) |> Async.RunSynchronously |> function FSharpCheckFileAnswer.Succeeded x -> x | _ -> failwith "unexpected aborted" - let checkResults2 = + let checkResults2 = checker.CheckFileInProject(parseResults2, Project1.fileName2, 0, Project1.fileSource2, Project1.options) |> Async.RunSynchronously |> function FSharpCheckFileAnswer.Succeeded x -> x | _ -> failwith "unexpected aborted" let usesOfSymbols = checkResults1.GetAllUsesOfAllSymbolsInFile() - let cleanedUsesOfSymbols = - [ for s in usesOfSymbols -> s.Symbol.DisplayName, Project1.cleanFileName s.FileName, tupsZ s.RangeAlternate, attribsOfSymbol s.Symbol ] + let cleanedUsesOfSymbols = + [ for s in usesOfSymbols -> s.Symbol.DisplayName, Project1.cleanFileName s.FileName, tupsZ s.Range, attribsOfSymbol s.Symbol ] - cleanedUsesOfSymbols - |> shouldEqual + cleanedUsesOfSymbols + |> shouldEqual [("C", "file1", ((3, 5), (3, 6)), ["class"]); ("( .ctor )", "file1", ((3, 5), (3, 6)), ["member"; "ctor"]); ("P", "file1", ((4, 13), (4, 14)), ["member"; "getter"]); @@ -636,7 +640,7 @@ let ``Test file explicit parse all symbols`` () = //----------------------------------------------------------------------------------------- -module internal Project2 = +module internal Project2 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -645,7 +649,7 @@ module internal Project2 = let fileSource1 = """ module M -type DUWithNormalFields = +type DUWithNormalFields = | DU1 of int * int | DU2 of int * int | D of int * int @@ -658,7 +662,7 @@ type DUWithNamedFields = DU of x : int * y : int let _ = DU(x=1, y=2) -type GenericClass<'T>() = +type GenericClass<'T>() = member x.GenericMethod<'U>(t: 'T, u: 'U) = 1 let c = GenericClass() @@ -668,7 +672,7 @@ let GenericFunction (x:'T, y: 'T) = (x,y) : ('T * 'T) let _ = GenericFunction(3, 4) """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) @@ -678,14 +682,14 @@ let _ = GenericFunction(3, 4) [] -let ``Test project2 whole project errors`` () = +let ``Test project2 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project2.options) |> Async.RunSynchronously - wholeProjectResults .Errors.Length |> shouldEqual 0 + wholeProjectResults .Diagnostics.Length |> shouldEqual 0 [] -let ``Test project2 basic`` () = +let ``Test project2 basic`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project2.options) |> Async.RunSynchronously @@ -694,16 +698,16 @@ let ``Test project2 basic`` () = [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] |> shouldEqual ["DUWithNormalFields"; "DUWithNamedFields"; "GenericClass" ] - set [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] + set [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] |> shouldEqual (set ["c"; "GenericFunction"]) [] -let ``Test project2 all symbols in signature`` () = +let ``Test project2 all symbols in signature`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project2.options) |> Async.RunSynchronously let allSymbols = allSymbolsInEntities true wholeProjectResults.AssemblySignature.Entities - [ for x in allSymbols -> x.ToString() ] - |> shouldEqual + [ for x in allSymbols -> x.ToString() ] + |> shouldEqual ["M"; "val c"; "val GenericFunction"; "generic parameter T"; "DUWithNormalFields"; "DU1"; "field Item1"; "field Item2"; "DU2"; "field Item1"; "field Item2"; "D"; "field Item1"; "field Item2"; @@ -712,14 +716,14 @@ let ``Test project2 all symbols in signature`` () = "generic parameter U"] [] -let ``Test project2 all uses of all signature symbols`` () = +let ``Test project2 all uses of all signature symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project2.options) |> Async.RunSynchronously let allSymbols = allSymbolsInEntities true wholeProjectResults.AssemblySignature.Entities - let allUsesOfAllSymbols = - [ for s in allSymbols do - let uses = [ for s in wholeProjectResults.GetUsesOfSymbol(s) -> (if s.FileName = Project2.fileName1 then "file1" else "??"), tupsZ s.RangeAlternate ] + let allUsesOfAllSymbols = + [ for s in allSymbols do + let uses = [ for s in wholeProjectResults.GetUsesOfSymbol(s) -> (if s.FileName = Project2.fileName1 then "file1" else "??"), tupsZ s.Range ] yield s.ToString(), uses ] - let expected = + let expected = [("M", [("file1", ((1, 7), (1, 8)))]); ("val c", [("file1", ((19, 4), (19, 5))); ("file1", ((20, 8), (20, 9)))]); ("val GenericFunction", @@ -751,13 +755,13 @@ let ``Test project2 all uses of all signature symbols`` () = (set expected = set allUsesOfAllSymbols) |> shouldEqual true [] -let ``Test project2 all uses of all symbols`` () = +let ``Test project2 all uses of all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project2.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = - [ for s in wholeProjectResults.GetAllUsesOfAllSymbols() -> - s.Symbol.DisplayName, (if s.FileName = Project2.fileName1 then "file1" else "???"), tupsZ s.RangeAlternate, attribsOfSymbol s.Symbol ] - let expected = + let allUsesOfAllSymbols = + [ for s in wholeProjectResults.GetAllUsesOfAllSymbols() -> + s.Symbol.DisplayName, (if s.FileName = Project2.fileName1 then "file1" else "???"), tupsZ s.Range, attribsOfSymbol s.Symbol ] + let expected = [("int", "file1", ((4, 13), (4, 16)), ["abbrev"]); ("int", "file1", ((4, 19), (4, 22)), ["abbrev"]); ("int", "file1", ((5, 13), (5, 16)), ["abbrev"]); @@ -823,7 +827,7 @@ let ``Test project2 all uses of all symbols`` () = //----------------------------------------------------------------------------------------- -module internal Project3 = +module internal Project3 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -910,7 +914,7 @@ let setP (foo: IFoo) v = foo.InterfacePropertySet <- v let getE (foo: IFoo) = foo.InterfaceEvent let getM (foo: IFoo) = foo.InterfaceMethod("d") """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) @@ -920,39 +924,39 @@ let getM (foo: IFoo) = foo.InterfaceMethod("d") [] -let ``Test project3 whole project errors`` () = +let ``Test project3 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project3.options) |> Async.RunSynchronously - wholeProjectResults .Errors.Length |> shouldEqual 0 + wholeProjectResults .Diagnostics.Length |> shouldEqual 0 [] -let ``Test project3 basic`` () = +let ``Test project3 basic`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project3.options) |> Async.RunSynchronously set [ for x in wholeProjectResults.AssemblySignature.Entities -> x.DisplayName ] |> shouldEqual (set ["M"]) - [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] + [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] |> shouldEqual ["IFoo"; "CFoo"; "CBaseFoo"; "IFooImpl"; "CFooImpl"; "CBaseFooImpl"] - [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] + [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] |> shouldEqual ["IFooImplObjectExpression"; "CFooImplObjectExpression"; "getP"; "setP"; "getE";"getM"] [] -let ``Test project3 all symbols in signature`` () = +let ``Test project3 all symbols in signature`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project3.options) |> Async.RunSynchronously let allSymbols = allSymbolsInEntities false wholeProjectResults.AssemblySignature.Entities - let results = [ for x in allSymbols -> x.ToString(), attribsOfSymbol x ] - [("M", ["module"]); + let results = [ for x in allSymbols -> x.ToString(), attribsOfSymbol x ] + [("M", ["module"]); ("val IFooImplObjectExpression", ["val"]); - ("val CFooImplObjectExpression", ["val"]); + ("val CFooImplObjectExpression", ["val"]); ("val getP", ["val"]); - ("val setP", ["val"]); ("val getE", ["val"]); + ("val setP", ["val"]); ("val getE", ["val"]); ("val getM", ["val"]); - ("IFoo", ["interface"]); + ("IFoo", ["interface"]); ("member InterfaceMethod", ["slot"; "member"]); ("member add_InterfaceEvent", ["slot"; "member"; "add"]); ("member get_InterfaceEvent", ["slot"; "member"; "getter"]); @@ -961,7 +965,7 @@ let ``Test project3 all symbols in signature`` () = ("member set_InterfacePropertySet", ["slot"; "member"; "setter"]); ("property InterfacePropertySet", ["slot"; "member"; "prop"]); ("property InterfaceProperty", ["slot"; "member"; "prop"]); - ("property InterfaceEvent", ["slot"; "member"; "prop"; "clievent"]); + ("property InterfaceEvent", ["slot"; "member"; "prop"; "clievent"]); ("CFoo", ["class"]); ("member .ctor", ["member"; "ctor"]); ("member AbstractClassMethod", ["slot"; "member"]); @@ -1025,18 +1029,18 @@ let ``Test project3 all symbols in signature`` () = ) [] -let ``Test project3 all uses of all signature symbols`` () = +let ``Test project3 all uses of all signature symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project3.options) |> Async.RunSynchronously let allSymbols = allSymbolsInEntities false wholeProjectResults.AssemblySignature.Entities - let allUsesOfAllSymbols = - [ for s in allSymbols do - let uses = [ for s in wholeProjectResults.GetUsesOfSymbol(s) -> - ((if s.FileName = Project3.fileName1 then "file1" else "??"), - tupsZ s.RangeAlternate, attribsOfSymbolUse s, attribsOfSymbol s.Symbol) ] + let allUsesOfAllSymbols = + [ for s in allSymbols do + let uses = [ for s in wholeProjectResults.GetUsesOfSymbol(s) -> + ((if s.FileName = Project3.fileName1 then "file1" else "??"), + tupsZ s.Range, attribsOfSymbolUse s, attribsOfSymbol s.Symbol) ] yield s.ToString(), uses ] - let expected = + let expected = [("M", [("file1", ((1, 7), (1, 8)), ["defn"], ["module"])]); ("val IFooImplObjectExpression", [("file1", ((58, 4), (58, 28)), ["defn"], ["val"])]); @@ -1266,7 +1270,7 @@ let ``Test project3 all uses of all signature symbols`` () = //----------------------------------------------------------------------------------------- -module internal Project4 = +module internal Project4 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -1279,7 +1283,7 @@ type Foo<'T>(x : 'T, y : Foo<'T>) = class end let inline twice(x : ^U, y : ^U) = x + y """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) @@ -1289,43 +1293,43 @@ let inline twice(x : ^U, y : ^U) = x + y [] -let ``Test project4 whole project errors`` () = +let ``Test project4 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project4.options) |> Async.RunSynchronously - wholeProjectResults .Errors.Length |> shouldEqual 0 + wholeProjectResults .Diagnostics.Length |> shouldEqual 0 [] -let ``Test project4 basic`` () = +let ``Test project4 basic`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project4.options) |> Async.RunSynchronously set [ for x in wholeProjectResults.AssemblySignature.Entities -> x.DisplayName ] |> shouldEqual (set ["M"]) - [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] + [ for x in wholeProjectResults.AssemblySignature.Entities.[0].NestedEntities -> x.DisplayName ] |> shouldEqual ["Foo"] - [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] + [ for x in wholeProjectResults.AssemblySignature.Entities.[0].MembersFunctionsAndValues -> x.DisplayName ] |> shouldEqual ["twice"] [] -let ``Test project4 all symbols in signature`` () = +let ``Test project4 all symbols in signature`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project4.options) |> Async.RunSynchronously let allSymbols = allSymbolsInEntities false wholeProjectResults.AssemblySignature.Entities - [ for x in allSymbols -> x.ToString() ] - |> shouldEqual + [ for x in allSymbols -> x.ToString() ] + |> shouldEqual ["M"; "val twice"; "generic parameter U"; "Foo`1"; "generic parameter T"; "member .ctor"] [] -let ``Test project4 all uses of all signature symbols`` () = +let ``Test project4 all uses of all signature symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project4.options) |> Async.RunSynchronously let allSymbols = allSymbolsInEntities false wholeProjectResults.AssemblySignature.Entities - let allUsesOfAllSymbols = - [ for s in allSymbols do - let uses = [ for s in wholeProjectResults.GetUsesOfSymbol(s) -> (if s.FileName = Project4.fileName1 then "file1" else "??"), tupsZ s.RangeAlternate ] + let allUsesOfAllSymbols = + [ for s in allSymbols do + let uses = [ for s in wholeProjectResults.GetUsesOfSymbol(s) -> (if s.FileName = Project4.fileName1 then "file1" else "??"), tupsZ s.Range ] yield s.ToString(), uses ] - let expected = + let expected = [("M", [("file1", ((1, 7), (1, 8)))]); ("val twice", [("file1", ((5, 11), (5, 16)))]); ("generic parameter U", @@ -1336,29 +1340,29 @@ let ``Test project4 all uses of all signature symbols`` () = ("file1", ((3, 29), (3, 31)))]); ("member .ctor", [("file1", ((3, 5), (3, 8))); ("file1", ((3, 25), (3, 28)))])] - + set allUsesOfAllSymbols - set expected |> shouldEqual Set.empty set expected - set allUsesOfAllSymbols |> shouldEqual Set.empty (set expected = set allUsesOfAllSymbols) |> shouldEqual true [] -let ``Test project4 T symbols`` () = +let ``Test project4 T symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project4.options) |> Async.RunSynchronously - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project4.fileName1, Project4.options) + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project4.fileName1, Project4.options) |> Async.RunSynchronously let tSymbolUse2 = backgroundTypedParse1.GetSymbolUseAtLocation(4,19,"",["T"]) tSymbolUse2.IsSome |> shouldEqual true - let tSymbol2 = tSymbolUse2.Value.Symbol + let tSymbol2 = tSymbolUse2.Value.Symbol tSymbol2.ToString() |> shouldEqual "generic parameter T" tSymbol2.ImplementationLocation.IsSome |> shouldEqual true let uses = backgroundTypedParse1.GetAllUsesOfAllSymbolsInFile() - let allUsesOfAllSymbols = - [ for s in uses -> s.Symbol.ToString(), (if s.FileName = Project4.fileName1 then "file1" else "??"), tupsZ s.RangeAlternate ] + let allUsesOfAllSymbols = + [ for s in uses -> s.Symbol.ToString(), (if s.FileName = Project4.fileName1 then "file1" else "??"), tupsZ s.Range ] allUsesOfAllSymbols |> shouldEqual [("generic parameter T", "file1", ((3, 9), (3, 11))); ("Foo`1", "file1", ((3, 5), (3, 8))); @@ -1385,19 +1389,19 @@ let ``Test project4 T symbols`` () = tSymbol3.ImplementationLocation.IsSome |> shouldEqual true - let usesOfTSymbol2 = + let usesOfTSymbol2 = wholeProjectResults.GetUsesOfSymbol(tSymbol2) - |> Array.map (fun su -> su.FileName , tupsZ su.RangeAlternate) + |> Array.map (fun su -> su.FileName , tupsZ su.Range) |> Array.map (fun (a,b) -> (if a = Project4.fileName1 then "file1" else "??"), b) - usesOfTSymbol2 |> shouldEqual + usesOfTSymbol2 |> shouldEqual [|("file1", ((3, 9), (3, 11))); ("file1", ((3, 17), (3, 19))); ("file1", ((3, 29), (3, 31)))|] - let usesOfTSymbol3 = - wholeProjectResults.GetUsesOfSymbol(tSymbol3) - - |> Array.map (fun su -> su.FileName , tupsZ su.RangeAlternate) + let usesOfTSymbol3 = + wholeProjectResults.GetUsesOfSymbol(tSymbol3) + + |> Array.map (fun su -> su.FileName , tupsZ su.Range) |> Array.map (fun (a,b) -> (if a = Project4.fileName1 then "file1" else "??"), b) usesOfTSymbol3 |> shouldEqual usesOfTSymbol2 @@ -1409,10 +1413,10 @@ let ``Test project4 T symbols`` () = uSymbol2.ImplementationLocation.IsSome |> shouldEqual true - let usesOfUSymbol2 = - wholeProjectResults.GetUsesOfSymbol(uSymbol2) - - |> Array.map (fun su -> su.FileName , tupsZ su.RangeAlternate) + let usesOfUSymbol2 = + wholeProjectResults.GetUsesOfSymbol(uSymbol2) + + |> Array.map (fun su -> su.FileName , tupsZ su.Range) |> Array.map (fun (a,b) -> (if a = Project4.fileName1 then "file1" else "??"), b) usesOfUSymbol2 |> shouldEqual [|("file1", ((5, 21), (5, 23))); ("file1", ((5, 29), (5, 31)))|] @@ -1420,7 +1424,7 @@ let ``Test project4 T symbols`` () = //----------------------------------------------------------------------------------------- -module internal Project5 = +module internal Project5 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") @@ -1428,7 +1432,7 @@ module internal Project5 = let dllName = Path.ChangeExtension(base2, ".dll") let projFileName = Path.ChangeExtension(base2, ".fsproj") let fileSource1 = """ -module ActivePatterns +module ActivePatterns ///Total active pattern for even/odd integers let (|Even|Odd|) input = if input % 2 = 0 then Even else Odd @@ -1451,7 +1455,7 @@ let parseNumeric str = | Float f -> printfn "%f : Floating point" f | _ -> printfn "%s : Not matched." str """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -1461,12 +1465,12 @@ let parseNumeric str = [] -let ``Test project5 whole project errors`` () = +let ``Test project5 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project5.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project5 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] @@ -1474,10 +1478,10 @@ let ``Test project 5 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project5.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.FullName, Project5.cleanFileName su.FileName, tupsZ su.RangeAlternate, attribsOfSymbolUse su) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.FullName, Project5.cleanFileName su.FileName, tupsZ su.Range, attribsOfSymbolUse su) allUsesOfAllSymbols |> shouldEqual [|("symbol ", "Even", "file1", ((4, 6), (4, 10)), ["defn"]); @@ -1540,19 +1544,23 @@ let ``Test project 5 all symbols`` () = let ``Test complete active patterns' exact ranges from uses of symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project5.options) |> Async.RunSynchronously - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project5.fileName1, Project5.options) + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project5.fileName1, Project5.options) |> Async.RunSynchronously let oddSymbolUse = backgroundTypedParse1.GetSymbolUseAtLocation(11,8,"",["Odd"]) - oddSymbolUse.IsSome |> shouldEqual true + oddSymbolUse.IsSome |> shouldEqual true let oddSymbol = oddSymbolUse.Value.Symbol oddSymbol.ToString() |> shouldEqual "symbol Odd" let oddActivePatternCase = oddSymbol :?> FSharpActivePatternCase - oddActivePatternCase.XmlDoc |> Seq.toList |> shouldEqual ["Total active pattern for even/odd integers"] - oddActivePatternCase.ElaboratedXmlDoc |> Seq.toList |> shouldEqual [""; "Total active pattern for even/odd integers"; ""] - oddActivePatternCase.XmlDocSig |> shouldEqual "" + match oddActivePatternCase.XmlDoc with + | FSharpXmlDoc.FromXmlText t -> t.UnprocessedLines |> shouldEqual [| "Total active pattern for even/odd integers" |] + | _ -> failwith "wrong kind" + match oddActivePatternCase.XmlDoc with + | FSharpXmlDoc.FromXmlText t -> t.GetElaboratedXmlLines() |> shouldEqual [|""; "Total active pattern for even/odd integers"; "" |] + | _ -> failwith "wrong kind" + oddActivePatternCase.XmlDocSig |> shouldEqual "M:ActivePatterns.|Even|Odd|(System.Int32)" let oddGroup = oddActivePatternCase.Group oddGroup.IsTotal |> shouldEqual true oddGroup.Names |> Seq.toList |> shouldEqual ["Even"; "Odd"] @@ -1561,13 +1569,16 @@ let ``Test complete active patterns' exact ranges from uses of symbols`` () = oddEntity.ToString() |> shouldEqual "ActivePatterns" let evenSymbolUse = backgroundTypedParse1.GetSymbolUseAtLocation(10,9,"",["Even"]) - evenSymbolUse.IsSome |> shouldEqual true + evenSymbolUse.IsSome |> shouldEqual true let evenSymbol = evenSymbolUse.Value.Symbol evenSymbol.ToString() |> shouldEqual "symbol Even" let evenActivePatternCase = evenSymbol :?> FSharpActivePatternCase - evenActivePatternCase.XmlDoc |> Seq.toList |> shouldEqual ["Total active pattern for even/odd integers"] - evenActivePatternCase.ElaboratedXmlDoc |> Seq.toList |> shouldEqual [""; "Total active pattern for even/odd integers"; ""] - evenActivePatternCase.XmlDocSig |> shouldEqual "" + match evenActivePatternCase.XmlDoc with + | FSharpXmlDoc.FromXmlText t -> + t.UnprocessedLines |> shouldEqual [| "Total active pattern for even/odd integers" |] + t.GetElaboratedXmlLines() |> shouldEqual [| ""; "Total active pattern for even/odd integers"; "" |] + | _ -> failwith "wrong kind" + evenActivePatternCase.XmlDocSig |> shouldEqual "M:ActivePatterns.|Even|Odd|(System.Int32)" let evenGroup = evenActivePatternCase.Group evenGroup.IsTotal |> shouldEqual true evenGroup.Names |> Seq.toList |> shouldEqual ["Even"; "Odd"] @@ -1575,22 +1586,22 @@ let ``Test complete active patterns' exact ranges from uses of symbols`` () = let evenEntity = evenGroup.DeclaringEntity.Value evenEntity.ToString() |> shouldEqual "ActivePatterns" - let usesOfEvenSymbol = - wholeProjectResults.GetUsesOfSymbol(evenSymbol) - - |> Array.map (fun su -> su.Symbol.ToString(), Project5.cleanFileName su.FileName, tupsZ su.RangeAlternate) + let usesOfEvenSymbol = + wholeProjectResults.GetUsesOfSymbol(evenSymbol) + + |> Array.map (fun su -> su.Symbol.ToString(), Project5.cleanFileName su.FileName, tupsZ su.Range) + + let usesOfOddSymbol = + wholeProjectResults.GetUsesOfSymbol(oddSymbol) - let usesOfOddSymbol = - wholeProjectResults.GetUsesOfSymbol(oddSymbol) - - |> Array.map (fun su -> su.Symbol.ToString(), Project5.cleanFileName su.FileName, tupsZ su.RangeAlternate) + |> Array.map (fun su -> su.Symbol.ToString(), Project5.cleanFileName su.FileName, tupsZ su.Range) - usesOfEvenSymbol |> shouldEqual + usesOfEvenSymbol |> shouldEqual [|("symbol Even", "file1", ((4, 6), (4, 10))); ("symbol Even", "file1", ((4, 47), (4, 51))); ("symbol Even", "file1", ((9, 5), (9, 9)))|] - usesOfOddSymbol |> shouldEqual + usesOfOddSymbol |> shouldEqual [|("symbol Odd", "file1", ((4, 11), (4, 14))); ("symbol Odd", "file1", ((4, 57), (4, 60))); ("symbol Odd", "file1", ((10, 5), (10, 8)))|] @@ -1600,19 +1611,22 @@ let ``Test complete active patterns' exact ranges from uses of symbols`` () = let ``Test partial active patterns' exact ranges from uses of symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project5.options) |> Async.RunSynchronously - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project5.fileName1, Project5.options) - |> Async.RunSynchronously + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project5.fileName1, Project5.options) + |> Async.RunSynchronously let floatSymbolUse = backgroundTypedParse1.GetSymbolUseAtLocation(22,10,"",["Float"]) - floatSymbolUse.IsSome |> shouldEqual true - let floatSymbol = floatSymbolUse.Value.Symbol + floatSymbolUse.IsSome |> shouldEqual true + let floatSymbol = floatSymbolUse.Value.Symbol floatSymbol.ToString() |> shouldEqual "symbol Float" let floatActivePatternCase = floatSymbol :?> FSharpActivePatternCase - floatActivePatternCase.XmlDoc |> Seq.toList |> shouldEqual ["Partial active pattern for floats"] - floatActivePatternCase.ElaboratedXmlDoc |> Seq.toList |> shouldEqual [""; "Partial active pattern for floats"; ""] - floatActivePatternCase.XmlDocSig |> shouldEqual "" + match floatActivePatternCase.XmlDoc with + | FSharpXmlDoc.FromXmlText t -> + t.UnprocessedLines |> shouldEqual [| "Partial active pattern for floats" |] + t.GetElaboratedXmlLines() |> shouldEqual [| ""; "Partial active pattern for floats"; "" |] + | _ -> failwith "wrong kind" + floatActivePatternCase.XmlDocSig |> shouldEqual "M:ActivePatterns.|Float|_|(System.String)" let floatGroup = floatActivePatternCase.Group floatGroup.IsTotal |> shouldEqual false floatGroup.Names |> Seq.toList |> shouldEqual ["Float"] @@ -1620,25 +1634,25 @@ let ``Test partial active patterns' exact ranges from uses of symbols`` () = let evenEntity = floatGroup.DeclaringEntity.Value evenEntity.ToString() |> shouldEqual "ActivePatterns" - let usesOfFloatSymbol = - wholeProjectResults.GetUsesOfSymbol(floatSymbol) - - |> Array.map (fun su -> su.Symbol.ToString(), Project5.cleanFileName su.FileName, tups su.RangeAlternate) + let usesOfFloatSymbol = + wholeProjectResults.GetUsesOfSymbol(floatSymbol) + + |> Array.map (fun su -> su.Symbol.ToString(), Project5.cleanFileName su.FileName, tups su.Range) - usesOfFloatSymbol |> shouldEqual + usesOfFloatSymbol |> shouldEqual [|("symbol Float", "file1", ((14, 6), (14, 11))); ("symbol Float", "file1", ((22, 5), (22, 10)))|] // Should also return its definition - let floatSymUseOpt = + let floatSymUseOpt = backgroundTypedParse1.GetSymbolUseAtLocation(14,11,"",["Float"]) - + floatSymUseOpt.IsSome |> shouldEqual true //----------------------------------------------------------------------------------------- -module internal Project6 = +module internal Project6 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -1652,7 +1666,7 @@ exception Fail of string let f () = raise (Fail "unknown") """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -1662,12 +1676,12 @@ let f () = [] -let ``Test project6 whole project errors`` () = +let ``Test project6 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project6.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project6 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] @@ -1675,10 +1689,10 @@ let ``Test project 6 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project6.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), Project6.cleanFileName su.FileName, tupsZ su.RangeAlternate, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), Project6.cleanFileName su.FileName, tupsZ su.Range, attribsOfSymbol su.Symbol) allUsesOfAllSymbols |> shouldEqual [|("string", "file1", ((3, 18), (3, 24)), ["abbrev"]); @@ -1691,7 +1705,7 @@ let ``Test project 6 all symbols`` () = //----------------------------------------------------------------------------------------- -module internal Project7 = +module internal Project7 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -1700,7 +1714,7 @@ module internal Project7 = let fileSource1 = """ module NamedArgs -type C() = +type C() = static member M(arg1: int, arg2: int, ?arg3 : int) = arg1 + arg2 + defaultArg arg3 4 let x1 = C.M(arg1 = 3, arg2 = 4, arg3 = 5) @@ -1708,7 +1722,7 @@ let x1 = C.M(arg1 = 3, arg2 = 4, arg3 = 5) let x2 = C.M(arg1 = 3, arg2 = 4, ?arg3 = Some 5) """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -1718,12 +1732,12 @@ let x2 = C.M(arg1 = 3, arg2 = 4, ?arg3 = Some 5) [] -let ``Test project7 whole project errors`` () = +let ``Test project7 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project7.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project7 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] @@ -1731,19 +1745,19 @@ let ``Test project 7 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project7.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = + wholeProjectResults.GetAllUsesOfAllSymbols() + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project7.cleanFileName su.FileName, tups su.Range) + + let arg1symbol = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project7.cleanFileName su.FileName, tups su.RangeAlternate) - let arg1symbol = - wholeProjectResults.GetAllUsesOfAllSymbols() - |> Array.pick (fun x -> if x.Symbol.DisplayName = "arg1" then Some x.Symbol else None) - let arg1uses = - wholeProjectResults.GetUsesOfSymbol(arg1symbol) - - |> Array.map (fun su -> su.Symbol.ToString(), Option.map tups su.Symbol.DeclarationLocation, Project7.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbol su.Symbol) + let arg1uses = + wholeProjectResults.GetUsesOfSymbol(arg1symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), Option.map tups su.Symbol.DeclarationLocation, Project7.cleanFileName su.FileName, tups su.Range, attribsOfSymbol su.Symbol) arg1uses |> shouldEqual [|("val arg1", Some ((5, 20), (5, 24)), "file1", ((5, 20), (5, 24)), []); ("val arg1", Some ((5, 20), (5, 24)), "file1", ((5, 57), (5, 61)), []); @@ -1752,7 +1766,7 @@ let ``Test project 7 all symbols`` () = //----------------------------------------------------------------------------------------- -module internal Project8 = +module internal Project8 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -1764,12 +1778,12 @@ module NamedUnionFields type A = B of xxx: int * yyy : int let b = B(xxx=1, yyy=2) -let x = +let x = match b with // does not find usage here | B (xxx = a; yyy = b) -> () """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -1779,12 +1793,12 @@ let x = [] -let ``Test project8 whole project errors`` () = +let ``Test project8 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project8.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project8 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] @@ -1792,12 +1806,12 @@ let ``Test project 8 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project8.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project8.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) - allUsesOfAllSymbols + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project8.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) + + allUsesOfAllSymbols |> shouldEqual [|("int", "int", "file1", ((4, 19), (4, 22)), ["type"], ["abbrev"]); ("int", "int", "file1", ((4, 31), (4, 34)), ["type"], ["abbrev"]); @@ -1821,14 +1835,14 @@ let ``Test project 8 all symbols`` () = ("NamedUnionFields", "NamedUnionFields", "file1", ((2, 7), (2, 23)), ["defn"], ["module"])|] - let arg1symbol = - wholeProjectResults.GetAllUsesOfAllSymbols() - + let arg1symbol = + wholeProjectResults.GetAllUsesOfAllSymbols() + |> Array.pick (fun x -> if x.Symbol.DisplayName = "xxx" then Some x.Symbol else None) - let arg1uses = - wholeProjectResults.GetUsesOfSymbol(arg1symbol) - - |> Array.map (fun su -> Option.map tups su.Symbol.DeclarationLocation, Project8.cleanFileName su.FileName, tups su.RangeAlternate) + let arg1uses = + wholeProjectResults.GetUsesOfSymbol(arg1symbol) + + |> Array.map (fun su -> Option.map tups su.Symbol.DeclarationLocation, Project8.cleanFileName su.FileName, tups su.Range) arg1uses |> shouldEqual [|(Some ((4, 14), (4, 17)), "file1", ((4, 14), (4, 17))); @@ -1836,7 +1850,7 @@ let ``Test project 8 all symbols`` () = (Some ((4, 14), (4, 17)), "file1", ((10, 9), (10, 12)))|] //----------------------------------------------------------------------------------------- -module internal Project9 = +module internal Project9 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -1849,7 +1863,7 @@ let inline check< ^T when ^T : (static member IsInfinity : ^T -> bool)> (num: ^T if (^T : (static member IsInfinity: ^T -> bool) (num)) then None else Some num """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -1859,12 +1873,12 @@ let inline check< ^T when ^T : (static member IsInfinity : ^T -> bool)> (num: ^T [] -let ``Test project9 whole project errors`` () = +let ``Test project9 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project9.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project9 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] @@ -1872,10 +1886,10 @@ let ``Test project 9 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project9.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project9.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project9.cleanFileName su.FileName, tups su.Range, attribsOfSymbol su.Symbol) allUsesOfAllSymbols |> shouldEqual [|("generic parameter T", "T", "file1", ((4, 18), (4, 20)), []); @@ -1898,14 +1912,14 @@ let ``Test project 9 all symbols`` () = ("val check", "check", "file1", ((4, 11), (4, 16)), ["val"]); ("Constraints", "Constraints", "file1", ((2, 7), (2, 18)), ["module"])|] - let arg1symbol = - wholeProjectResults.GetAllUsesOfAllSymbols() - + let arg1symbol = + wholeProjectResults.GetAllUsesOfAllSymbols() + |> Array.pick (fun x -> if x.Symbol.DisplayName = "IsInfinity" then Some x.Symbol else None) - let arg1uses = - wholeProjectResults.GetUsesOfSymbol(arg1symbol) - - |> Array.map (fun su -> Option.map tups su.Symbol.DeclarationLocation, Project9.cleanFileName su.FileName, tups su.RangeAlternate) + let arg1uses = + wholeProjectResults.GetUsesOfSymbol(arg1symbol) + + |> Array.map (fun su -> Option.map tups su.Symbol.DeclarationLocation, Project9.cleanFileName su.FileName, tups su.Range) arg1uses |> shouldEqual [|(Some ((4, 46), (4, 56)), "file1", ((4, 46), (4, 56)))|] @@ -1913,7 +1927,7 @@ let ``Test project 9 all symbols`` () = //----------------------------------------------------------------------------------------- // see https://github.com/fsharp/FSharp.Compiler.Service/issues/95 -module internal Project10 = +module internal Project10 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -1922,13 +1936,13 @@ module internal Project10 = let fileSource1 = """ module NamedArgs -type C() = +type C() = static member M(url: string, query: int) = () C.M("http://goo", query = 1) """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -1938,12 +1952,12 @@ C.M("http://goo", query = 1) [] -let ``Test Project10 whole project errors`` () = +let ``Test Project10 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project10.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project10 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] @@ -1951,10 +1965,10 @@ let ``Test Project10 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project10.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project10.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project10.cleanFileName su.FileName, tups su.Range, attribsOfSymbol su.Symbol) allUsesOfAllSymbols |> shouldEqual [|("C", "C", "file1", ((4, 5), (4, 6)), ["class"]); @@ -1972,21 +1986,21 @@ let ``Test Project10 all symbols`` () = ("parameter query", "query", "file1", ((7, 18), (7, 23)), []); ("NamedArgs", "NamedArgs", "file1", ((2, 7), (2, 16)), ["module"])|] - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project10.fileName1, Project10.options) + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project10.fileName1, Project10.options) |> Async.RunSynchronously - let querySymbolUseOpt = - backgroundTypedParse1.GetSymbolUseAtLocation(7,23,"",["query"]) - + let querySymbolUseOpt = + backgroundTypedParse1.GetSymbolUseAtLocation(7,23,"",["query"]) + let querySymbolUse = querySymbolUseOpt.Value let querySymbol = querySymbolUse.Symbol querySymbol.ToString() |> shouldEqual "parameter query" - let querySymbolUse2Opt = + let querySymbolUse2Opt = backgroundTypedParse1.GetSymbolUseAtLocation(7,22,"",["query"]) - + let querySymbolUse2 = querySymbolUse2Opt.Value let querySymbol2 = querySymbolUse2.Symbol @@ -1995,7 +2009,7 @@ let ``Test Project10 all symbols`` () = //----------------------------------------------------------------------------------------- // see https://github.com/fsharp/FSharp.Compiler.Service/issues/92 -module internal Project11 = +module internal Project11 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2008,7 +2022,7 @@ let enum = new System.Collections.Generic.Dictionary.Enumerator() let fff (x:System.Collections.Generic.Dictionary.Enumerator) = () """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -2018,12 +2032,12 @@ let fff (x:System.Collections.Generic.Dictionary.Enumerator) = () [] -let ``Test Project11 whole project errors`` () = +let ``Test Project11 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project11.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project11 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] @@ -2031,10 +2045,10 @@ let ``Test Project11 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project11.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project11.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project11.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) allUsesOfAllSymbols |> shouldEqual [|("System", "System", "file1", ((4, 15), (4, 21)), [], ["namespace"]); @@ -2062,7 +2076,7 @@ let ``Test Project11 all symbols`` () = //----------------------------------------------------------------------------------------- // see https://github.com/fsharp/FSharp.Compiler.Service/issues/92 -module internal Project12 = +module internal Project12 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2077,7 +2091,7 @@ let x2 = query { for i in 0 .. 100 do select (i,i) } """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -2087,12 +2101,12 @@ let x2 = query { for i in 0 .. 100 do [] -let ``Test Project12 whole project errors`` () = +let ``Test Project12 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project12.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project12 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] @@ -2100,10 +2114,10 @@ let ``Test Project12 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project12.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project12.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project12.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) allUsesOfAllSymbols |> shouldEqual [|("val seq", "seq", "file1", ((4, 9), (4, 12)), ["compexpr"], ["val"]); @@ -2130,7 +2144,7 @@ let ``Test Project12 all symbols`` () = //----------------------------------------------------------------------------------------- // Test fetching information about some external types (e.g. System.Object, System.DateTime) -module internal Project13 = +module internal Project13 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2144,7 +2158,7 @@ let x2 = new System.DateTime(1,1,1) let x3 = new System.DateTime() """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -2154,12 +2168,12 @@ let x3 = new System.DateTime() [] -let ``Test Project13 whole project errors`` () = +let ``Test Project13 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project13.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project13 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] @@ -2167,10 +2181,10 @@ let ``Test Project13 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project13.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project13.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project13.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) allUsesOfAllSymbols |> shouldEqual [|("System", "System", "file1", ((4, 14), (4, 20)), [], ["namespace"]); @@ -2192,7 +2206,7 @@ let ``Test Project13 all symbols`` () = let objEntity = objSymbol.Symbol :?> FSharpEntity let objMemberNames = [ for x in objEntity.MembersFunctionsAndValues -> x.DisplayName ] set objMemberNames |> shouldEqual (set [".ctor"; "ToString"; "Equals"; "Equals"; "ReferenceEquals"; "GetHashCode"; "GetType"; "Finalize"; "MemberwiseClone"]) - + let dtSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.Symbol.DisplayName = "DateTime") let dtEntity = dtSymbol.Symbol :?> FSharpEntity let dtPropNames = [ for x in dtEntity.MembersFunctionsAndValues do if x.IsProperty then yield x.DisplayName ] @@ -2201,7 +2215,7 @@ let ``Test Project13 all symbols`` () = set [ for i in dtType.DeclaredInterfaces -> i.ToString() ] |> shouldEqual (set - ["type System.IComparable"; + ["type System.IComparable"; "type System.IFormattable"; "type System.IConvertible"; "type System.Runtime.Serialization.ISerializable"; @@ -2209,23 +2223,23 @@ let ``Test Project13 all symbols`` () = "type System.IEquatable"]) dtType.BaseType.ToString() |> shouldEqual "Some(type System.ValueType)" - - set ["Date"; "Day"; "DayOfWeek"; "DayOfYear"; "Hour"; "Kind"; "Millisecond"; "Minute"; "Month"; "Now"; "Second"; "Ticks"; "TimeOfDay"; "Today"; "Year"] - - set dtPropNames + + set ["Date"; "Day"; "DayOfWeek"; "DayOfYear"; "Hour"; "Kind"; "Millisecond"; "Minute"; "Month"; "Now"; "Second"; "Ticks"; "TimeOfDay"; "Today"; "Year"] + - set dtPropNames |> shouldEqual (set []) let objDispatchSlotNames = [ for x in objEntity.MembersFunctionsAndValues do if x.IsDispatchSlot then yield x.DisplayName ] - + set objDispatchSlotNames |> shouldEqual (set ["ToString"; "Equals"; "GetHashCode"; "Finalize"]) // check we can get the CurriedParameterGroups - let objMethodsCurriedParameterGroups = - [ for x in objEntity.MembersFunctionsAndValues do - for pg in x.CurriedParameterGroups do - for p in pg do + let objMethodsCurriedParameterGroups = + [ for x in objEntity.MembersFunctionsAndValues do + for pg in x.CurriedParameterGroups do + for p in pg do yield x.CompiledName, p.Name, p.Type.ToString(), p.Type.Format(dtSymbol.DisplayContext) ] - objMethodsCurriedParameterGroups |> shouldEqual + objMethodsCurriedParameterGroups |> shouldEqual [("Equals", Some "obj", "type Microsoft.FSharp.Core.obj", "obj"); ("Equals", Some "objA", "type Microsoft.FSharp.Core.obj", "obj"); ("Equals", Some "objB", "type Microsoft.FSharp.Core.obj", "obj"); @@ -2233,9 +2247,9 @@ let ``Test Project13 all symbols`` () = ("ReferenceEquals", Some "objB", "type Microsoft.FSharp.Core.obj", "obj")] // check we can get the ReturnParameter - let objMethodsReturnParameter = - [ for x in objEntity.MembersFunctionsAndValues do - let p = x.ReturnParameter + let objMethodsReturnParameter = + [ for x in objEntity.MembersFunctionsAndValues do + let p = x.ReturnParameter yield x.DisplayName, p.Name, p.Type.ToString(), p.Type.Format(dtSymbol.DisplayContext) ] set objMethodsReturnParameter |> shouldEqual (set @@ -2250,20 +2264,20 @@ let ``Test Project13 all symbols`` () = ("MemberwiseClone", None, "type Microsoft.FSharp.Core.obj", "obj")]) // check we can get the CurriedParameterGroups - let dtMethodsCurriedParameterGroups = - [ for x in dtEntity.MembersFunctionsAndValues do - if x.CompiledName = "FromFileTime" || x.CompiledName = "AddMilliseconds" then - for pg in x.CurriedParameterGroups do - for p in pg do + let dtMethodsCurriedParameterGroups = + [ for x in dtEntity.MembersFunctionsAndValues do + if x.CompiledName = "FromFileTime" || x.CompiledName = "AddMilliseconds" then + for pg in x.CurriedParameterGroups do + for p in pg do yield x.CompiledName, p.Name, p.Type.ToString(), p.Type.Format(dtSymbol.DisplayContext) ] - dtMethodsCurriedParameterGroups |> shouldEqual + dtMethodsCurriedParameterGroups |> shouldEqual [("AddMilliseconds", Some "value", "type Microsoft.FSharp.Core.float","float"); ("FromFileTime", Some "fileTime", "type Microsoft.FSharp.Core.int64","int64")] let _test1 = [ for x in objEntity.MembersFunctionsAndValues -> x.FullType ] - for x in objEntity.MembersFunctionsAndValues do + for x in objEntity.MembersFunctionsAndValues do x.IsCompilerGenerated |> shouldEqual false x.IsExtensionMember |> shouldEqual false x.IsEvent |> shouldEqual false @@ -2278,7 +2292,7 @@ let ``Test Project13 all symbols`` () = //----------------------------------------------------------------------------------------- // Misc - structs -module internal Project14 = +module internal Project14 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2288,14 +2302,14 @@ module internal Project14 = module Structs [] -type S(p:int) = +type S(p:int) = member x.P = p let x1 = S() let x2 = S(3) """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -2305,12 +2319,12 @@ let x2 = S(3) [] -let ``Test Project14 whole project errors`` () = +let ``Test Project14 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project14.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project14 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] @@ -2318,10 +2332,10 @@ let ``Test Project14 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project14.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project14.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project14.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su) allUsesOfAllSymbols |> shouldEqual [|("StructAttribute", "StructAttribute", "file1", ((4, 2), (4, 8)), @@ -2346,7 +2360,7 @@ let ``Test Project14 all symbols`` () = //----------------------------------------------------------------------------------------- // Misc - union patterns -module internal Project15 = +module internal Project15 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2355,15 +2369,15 @@ module internal Project15 = let fileSource1 = """ module UnionPatterns -let f x = - match x with - | [h] - | [_; h] - | [_; _; h] -> h +let f x = + match x with + | [h] + | [_; h] + | [_; _; h] -> h | _ -> 0 """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -2373,12 +2387,12 @@ let f x = [] -let ``Test Project15 whole project errors`` () = +let ``Test Project15 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project15.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project15 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] @@ -2386,10 +2400,10 @@ let ``Test Project15 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project15.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project15.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project15.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su) allUsesOfAllSymbols |> shouldEqual [|("val x", "x", "file1", ((4, 6), (4, 7)), ["defn"]); @@ -2405,7 +2419,7 @@ let ``Test Project15 all symbols`` () = //----------------------------------------------------------------------------------------- // Misc - signature files -module internal Project16 = +module internal Project16 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let sigFileName1 = Path.ChangeExtension(fileName1, ".fsi") @@ -2415,34 +2429,34 @@ module internal Project16 = let fileSource1Text = """ module Impl -type C() = +type C() = member x.PC = 1 -and D() = +and D() = member x.PD = 1 -and E() = +and E() = member x.PE = 1 and F = { Field1 : int; Field2 : int } and G = Case1 | Case2 of int """ - let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text - File.WriteAllText(fileName1, fileSource1Text) + let fileSource1 = SourceText.ofString fileSource1Text + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1Text) let sigFileSource1Text = """ module Impl -type C = +type C = new : unit -> C member PC : int -and [] D = +and [] D = new : unit -> D member PD : int -and [] E = +and [] E = new : unit -> E member PE : int @@ -2450,8 +2464,8 @@ and F = { Field1 : int; Field2 : int } and G = Case1 | Case2 of int """ - let sigFileSource1 = FSharp.Compiler.Text.SourceText.ofString sigFileSource1Text - File.WriteAllText(sigFileName1, sigFileSource1Text) + let sigFileSource1 = SourceText.ofString sigFileSource1Text + FileSystem.OpenFileForWriteShim(sigFileName1).Write(sigFileSource1Text) let cleanFileName a = if a = fileName1 then "file1" elif a = sigFileName1 then "sig1" else "??" let fileNames = [sigFileName1; fileName1] @@ -2460,12 +2474,12 @@ and G = Case1 | Case2 of int [] -let ``Test Project16 whole project errors`` () = +let ``Test Project16 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project16.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project16 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] @@ -2473,10 +2487,10 @@ let ``Test Project16 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project16.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project16.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project16.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) allUsesOfAllSymbols |> shouldEqual [|("ClassAttribute", "ClassAttribute", "sig1", ((8, 6), (8, 11)), @@ -2567,44 +2581,44 @@ let ``Test Project16 all symbols`` () = [] let ``Test Project16 sig symbols are equal to impl symbols`` () = - let checkResultsSig = + let checkResultsSig = checker.ParseAndCheckFileInProject(Project16.sigFileName1, 0, Project16.sigFileSource1, Project16.options) |> Async.RunSynchronously - |> function + |> function | _, FSharpCheckFileAnswer.Succeeded(res) -> res - | _ -> failwithf "Parsing aborted unexpectedly..." + | _ -> failwithf "Parsing aborted unexpectedly..." - let checkResultsImpl = + let checkResultsImpl = checker.ParseAndCheckFileInProject(Project16.fileName1, 0, Project16.fileSource1, Project16.options) |> Async.RunSynchronously - |> function + |> function | _, FSharpCheckFileAnswer.Succeeded(res) -> res - | _ -> failwithf "Parsing aborted unexpectedly..." + | _ -> failwithf "Parsing aborted unexpectedly..." let symbolsSig = checkResultsSig.GetAllUsesOfAllSymbolsInFile() let symbolsImpl = checkResultsImpl.GetAllUsesOfAllSymbolsInFile() - // Test that all 'definition' symbols in the signature (or implementation) have a matching symbol in the + // Test that all 'definition' symbols in the signature (or implementation) have a matching symbol in the // implementation (or signature). - let testFind (tag1,symbols1) (tag2,symbols2) = - for (symUse1: FSharpSymbolUse) in symbols1 do + let testFind (tag1,symbols1) (tag2,symbols2) = + for (symUse1: FSharpSymbolUse) in symbols1 do - if symUse1.IsFromDefinition && - (match symUse1.Symbol with + if symUse1.IsFromDefinition && + (match symUse1.Symbol with | :? FSharpMemberOrFunctionOrValue as m -> m.IsModuleValueOrMember | :? FSharpEntity -> true | _ -> false) then - let ok = - symbols2 - |> Seq.filter (fun (symUse2:FSharpSymbolUse) -> - //if symUse2.IsFromDefinition && symUse1.Symbol.DisplayName = symUse2.Symbol.DisplayName then + let ok = + symbols2 + |> Seq.filter (fun (symUse2:FSharpSymbolUse) -> + //if symUse2.IsFromDefinition && symUse1.Symbol.DisplayName = symUse2.Symbol.DisplayName then // printfn "Comparing \n\t'%A' \n\t\t@ %A \n\t\t@@ %A and \n\t'%A' \n\t\t@ %A \n\t\t@@ %A" symUse1.Symbol symUse1.Symbol.ImplementationLocation symUse1.Symbol.SignatureLocation symUse2.Symbol symUse2.Symbol.ImplementationLocation symUse2.Symbol.SignatureLocation symUse2.Symbol.IsEffectivelySameAs(symUse1.Symbol) ) |> Seq.toList - match ok with + match ok with | [] -> failwith (sprintf "Didn't find symbol equivalent to %s symbol '%A' in %s" tag1 symUse1.Symbol tag2) - | [sym] -> () + | [sym] -> () | [sym1;sym2] when sym1.Symbol.DisplayName = sym2.Symbol.DisplayName -> () // constructor and type | syms -> failwith (sprintf "Found multiple symbols for %s '%A' in %s: '%A'" tag1 symUse1.Symbol tag2 [for sym in syms -> sym.Symbol ] ) @@ -2619,19 +2633,19 @@ let ``Test Project16 sym locations`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project16.options) |> Async.RunSynchronously - let fmtLoc (mOpt: Range.range option) = - match mOpt with + let fmtLoc (mOpt: range option) = + match mOpt with | None -> None - | Some m -> + | Some m -> let file = Project16.cleanFileName m.FileName if file = "??" then None else Some (file, (m.StartLine, m.StartColumn), (m.EndLine, m.EndColumn )) - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.choose (fun su -> - match fmtLoc su.Symbol.SignatureLocation, fmtLoc su.Symbol.DeclarationLocation, fmtLoc su.Symbol.ImplementationLocation with + + |> Array.choose (fun su -> + match fmtLoc su.Symbol.SignatureLocation, fmtLoc su.Symbol.DeclarationLocation, fmtLoc su.Symbol.ImplementationLocation with | Some a, Some b, Some c -> Some (su.Symbol.ToString(), a, b, c) | _ -> None) @@ -2682,20 +2696,20 @@ let ``Test project16 DeclaringEntity`` () = |> Async.RunSynchronously let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() for sym in allSymbolsUses do - match sym.Symbol with - | :? FSharpEntity as e when not e.IsNamespace || e.AccessPath.Contains(".") -> + match sym.Symbol with + | :? FSharpEntity as e when not e.IsNamespace || e.AccessPath.Contains(".") -> printfn "checking declaring type of entity '%s' --> '%s', assembly = '%s'" e.AccessPath e.CompiledName (e.Assembly.ToString()) shouldEqual e.DeclaringEntity.IsSome (e.AccessPath <> "global") - match e.AccessPath with - | "C" | "D" | "E" | "F" | "G" -> + match e.AccessPath with + | "C" | "D" | "E" | "F" | "G" -> shouldEqual e.AccessPath "Impl" shouldEqual e.DeclaringEntity.Value.IsFSharpModule true shouldEqual e.DeclaringEntity.Value.IsNamespace false - | "int" -> + | "int" -> shouldEqual e.AccessPath "Microsoft.FSharp.Core" shouldEqual e.DeclaringEntity.Value.AccessPath "Microsoft.FSharp" | _ -> () - | :? FSharpMemberOrFunctionOrValue as e when e.IsModuleValueOrMember -> + | :? FSharpMemberOrFunctionOrValue as e when e.IsModuleValueOrMember -> printfn "checking declaring type of value '%s', assembly = '%s'" e.CompiledName (e.Assembly.ToString()) shouldEqual e.DeclaringEntity.IsSome true | _ -> () @@ -2704,7 +2718,7 @@ let ``Test project16 DeclaringEntity`` () = //----------------------------------------------------------------------------------------- // Misc - namespace symbols -module internal Project17 = +module internal Project17 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2721,7 +2735,7 @@ let f2 (x: System.Collections.Generic.IList) = x.[3] <- 4 // check use of let f3 (x: System.Exception) = x.HelpLink <- "" // check use of .NET setter property """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] @@ -2730,12 +2744,12 @@ let f3 (x: System.Exception) = x.HelpLink <- "" // check use of .NET setter prop [] -let ``Test Project17 whole project errors`` () = +let ``Test Project17 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project17.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project17 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] @@ -2743,12 +2757,12 @@ let ``Test Project17 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project17.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project17.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) - allUsesOfAllSymbols + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project17.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) + + allUsesOfAllSymbols |> shouldEqual [|("Microsoft", "Microsoft", "file1", ((4, 8), (4, 17)), [], ["namespace"]); ("Collections", "Collections", "file1", ((4, 25), (4, 36)), [], ["namespace"]); @@ -2796,7 +2810,7 @@ let ``Test Project17 all symbols`` () = //----------------------------------------------------------------------------------------- // Misc - generic type definnitions -module internal Project18 = +module internal Project18 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2807,7 +2821,7 @@ module Impl let _ = list<_>.Empty """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] @@ -2816,12 +2830,12 @@ let _ = list<_>.Empty [] -let ``Test Project18 whole project errors`` () = +let ``Test Project18 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project18.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project18 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] @@ -2829,10 +2843,10 @@ let ``Test Project18 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project18.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project18.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project18.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, (match su.Symbol with :? FSharpEntity as e -> e.IsNamespace | _ -> false)) allUsesOfAllSymbols |> shouldEqual @@ -2846,7 +2860,7 @@ let ``Test Project18 all symbols`` () = //----------------------------------------------------------------------------------------- // Misc - enums -module internal Project19 = +module internal Project19 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2863,7 +2877,7 @@ let f x = match x with Enum.EnumCase1 -> 1 | Enum.EnumCase2 -> 2 | _ -> 3 let s = System.DayOfWeek.Monday """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] @@ -2872,12 +2886,12 @@ let s = System.DayOfWeek.Monday [] -let ``Test Project19 whole project errors`` () = +let ``Test Project19 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project19.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project19 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] @@ -2885,10 +2899,10 @@ let ``Test Project19 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project19.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project19.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project19.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) allUsesOfAllSymbols |> shouldEqual [|("field EnumCase1", "EnumCase1", "file1", ((4, 14), (4, 23)), ["defn"], @@ -2924,7 +2938,7 @@ let ``Test Project19 all symbols`` () = //----------------------------------------------------------------------------------------- // Misc - https://github.com/fsharp/FSharp.Compiler.Service/issues/109 -module internal Project20 = +module internal Project20 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2933,11 +2947,11 @@ module internal Project20 = let fileSource1 = """ module Impl -type A<'T>() = +type A<'T>() = member x.M() : 'T = failwith "" """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] @@ -2946,12 +2960,12 @@ type A<'T>() = [] -let ``Test Project20 whole project errors`` () = +let ``Test Project20 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project20.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project20 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] @@ -2959,15 +2973,15 @@ let ``Test Project20 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project20.options) |> Async.RunSynchronously - let tSymbolUse = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.RangeAlternate.StartLine = 5 && su.Symbol.ToString() = "generic parameter T") + let tSymbolUse = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.Range.StartLine = 5 && su.Symbol.ToString() = "generic parameter T") let tSymbol = tSymbolUse.Symbol - let allUsesOfTSymbol = + let allUsesOfTSymbol = wholeProjectResults.GetUsesOfSymbol(tSymbol) - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project20.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project20.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) allUsesOfTSymbol |> shouldEqual [|("generic parameter T", "T", "file1", ((4, 7), (4, 9)), ["type"], []); @@ -2976,7 +2990,7 @@ let ``Test Project20 all symbols`` () = //----------------------------------------------------------------------------------------- // Misc - https://github.com/fsharp/FSharp.Compiler.Service/issues/137 -module internal Project21 = +module internal Project21 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2985,20 +2999,20 @@ module internal Project21 = let fileSource1 = """ module Impl -type IMyInterface<'a> = +type IMyInterface<'a> = abstract Method1: 'a -> unit abstract Method2: 'a -> unit let _ = { new IMyInterface with - member x.Method1(arg1: string): unit = + member x.Method1(arg1: string): unit = raise (System.NotImplementedException()) - member x.Method2(arg1: int): unit = + member x.Method2(arg1: int): unit = raise (System.NotImplementedException()) } """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] @@ -3007,12 +3021,12 @@ let _ = { new IMyInterface with [] -let ``Test Project21 whole project errors`` () = +let ``Test Project21 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project21.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project21 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 2 + wholeProjectResults.Diagnostics.Length |> shouldEqual 2 [] @@ -3020,10 +3034,10 @@ let ``Test Project21 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project21.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project21.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project21.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) allUsesOfAllSymbols |> shouldEqual [|("generic parameter a", "a", "file1", ((4, 18), (4, 20)), ["type"], []); @@ -3054,7 +3068,7 @@ let ``Test Project21 all symbols`` () = //----------------------------------------------------------------------------------------- // Misc - namespace symbols -module internal Project22 = +module internal Project22 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3063,7 +3077,7 @@ module internal Project22 = let fileSource1 = """ module Impl -type AnotherMutableList() = +type AnotherMutableList() = member x.Item with get() = 3 and set (v:int) = () let f1 (x: System.Collections.Generic.IList<'T>) = () // grab the IList symbol and look into it @@ -3072,7 +3086,7 @@ let f3 (x: System.Collections.ObjectModel.ObservableCollection<'T>) = () // grab let f4 (x: int[]) = () // test a one-dimensional array let f5 (x: int[,,]) = () // test a multi-dimensional array """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] @@ -3082,12 +3096,12 @@ let f5 (x: int[,,]) = () // test a multi-dimensional array [] -let ``Test Project22 whole project errors`` () = +let ``Test Project22 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project22.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project22 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] @@ -3095,19 +3109,19 @@ let ``Test Project22 IList contents`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project22.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - let ilistTypeUse = + + let ilistTypeUse = allUsesOfAllSymbols |> Array.find (fun su -> su.Symbol.DisplayName = "IList") - let ocTypeUse = + let ocTypeUse = allUsesOfAllSymbols |> Array.find (fun su -> su.Symbol.DisplayName = "ObservableCollection") - let alistTypeUse = + let alistTypeUse = allUsesOfAllSymbols |> Array.find (fun su -> su.Symbol.DisplayName = "AnotherMutableList") @@ -3117,7 +3131,7 @@ let ``Test Project22 IList contents`` () = let arrayTypes = allTypes - |> Array.choose (fun t -> + |> Array.choose (fun t -> if t.HasTypeDefinition then let td = t.TypeDefinition if td.IsArrayType then Some (td.DisplayName, td.ArrayRank) else None @@ -3130,39 +3144,39 @@ let ``Test Project22 IList contents`` () = set [ for x in ilistTypeDefn.MembersFunctionsAndValues -> x.LogicalName, attribsOfSymbol x ] |> shouldEqual (set [("get_Item", ["slot"; "member"; "getter"]); - ("set_Item", ["slot"; "member"; "setter"]); + ("set_Item", ["slot"; "member"; "setter"]); ("IndexOf", ["slot"; "member"]); - ("Insert", ["slot"; "member"]); + ("Insert", ["slot"; "member"]); ("RemoveAt", ["slot"; "member"]); ("Item", ["slot"; "member"; "prop"])]) set [ for x in ocTypeDefn.MembersFunctionsAndValues -> x.LogicalName, attribsOfSymbol x ] |> shouldEqual - (set [(".ctor", ["member"]); - (".ctor", ["member"]); + (set [(".ctor", ["member"]); (".ctor", ["member"]); - ("Move", ["member"]); + (".ctor", ["member"]); + ("Move", ["member"]); ("add_CollectionChanged", ["slot"; "member"; "add"]); ("remove_CollectionChanged", ["slot"; "member"; "remove"]); - ("ClearItems", ["slot"; "member"]); + ("ClearItems", ["slot"; "member"]); ("RemoveItem", ["slot"; "member"]); - ("InsertItem", ["slot"; "member"]); + ("InsertItem", ["slot"; "member"]); ("SetItem", ["slot"; "member"]); - ("MoveItem", ["slot"; "member"]); + ("MoveItem", ["slot"; "member"]); ("OnPropertyChanged", ["slot"; "member"]); ("add_PropertyChanged", ["slot"; "member"; "add"]); ("remove_PropertyChanged", ["slot"; "member"; "remove"]); ("OnCollectionChanged", ["slot"; "member"]); - ("BlockReentrancy", ["member"]); + ("BlockReentrancy", ["member"]); ("CheckReentrancy", ["member"]); ("CollectionChanged", ["slot"; "member"; "event"]); ("PropertyChanged", ["slot"; "member"; "event"])]) set [ for x in alistTypeDefn.MembersFunctionsAndValues -> x.LogicalName, attribsOfSymbol x ] |> shouldEqual - (set [(".ctor", ["member"; "ctor"]); + (set [(".ctor", ["member"; "ctor"]); ("get_Item", ["member"; "getter"]); - ("set_Item", ["member"; "setter"]); + ("set_Item", ["member"; "setter"]); ("Item", ["member"; "prop"])]) set [ for x in ilistTypeDefn.AllInterfaces -> x.TypeDefinition.DisplayName, attribsOfSymbol x.TypeDefinition ] @@ -3177,9 +3191,9 @@ let ``Test Project22 IList properties`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project22.options) |> Async.RunSynchronously - let ilistTypeUse = + let ilistTypeUse = wholeProjectResults.GetAllUsesOfAllSymbols() - + |> Array.find (fun su -> su.Symbol.DisplayName = "IList") let ilistTypeDefn = ilistTypeUse.Symbol :?> FSharpEntity @@ -3193,7 +3207,7 @@ let ``Test Project22 IList properties`` () = //----------------------------------------------------------------------------------------- // Misc - properties -module internal Project23 = +module internal Project23 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3209,7 +3223,7 @@ type Class() = module Getter = type System.Int32 with static member Zero = 0 - member x.Value = 0 + member x.Value = 0 let _ = 0 .Value @@ -3219,7 +3233,7 @@ module Setter = 0 .Value <- 0 """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] @@ -3227,27 +3241,27 @@ module Setter = let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) [] -let ``Test Project23 whole project errors`` () = +let ``Test Project23 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project23.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project23 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] let ``Test Project23 property`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project23.options) |> Async.RunSynchronously - let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() - + let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() + let classTypeUse = allSymbolsUses |> Array.find (fun su -> su.Symbol.DisplayName = "Class") let classTypeDefn = classTypeUse.Symbol :?> FSharpEntity let results = [ for x in classTypeDefn.MembersFunctionsAndValues -> x.LogicalName, attribsOfSymbol x ] - [(".ctor", ["member"; "ctor"]); + [(".ctor", ["member"; "ctor"]); ("get_Property", ["member"; "getter"]); ("get_StaticProperty", ["member"; "getter"]); - ("StaticProperty", ["member"; "prop"]); + ("StaticProperty", ["member"; "prop"]); ("Property", ["member"; "prop"])] |> List.iter (fun x -> if results |> List.exists (fun y -> x = y) |> not then @@ -3258,16 +3272,16 @@ let ``Test Project23 property`` () = let getterModuleDefn = getterModuleUse.Symbol :?> FSharpEntity [ for x in getterModuleDefn.MembersFunctionsAndValues -> x.LogicalName, attribsOfSymbol x ] - |> shouldEqual + |> shouldEqual [("get_Zero", ["member"; "extmem"; "getter"]); ("Zero", ["member"; "prop"; "extmem"]); ("get_Value", ["member"; "extmem"; "getter"]); ("Value", ["member"; "prop"; "extmem"])] let extensionProps = getterModuleDefn.MembersFunctionsAndValues |> Seq.toArray |> Array.filter (fun su -> su.LogicalName = "Value" || su.LogicalName = "Zero" ) - let extensionPropsRelated = + let extensionPropsRelated = extensionProps - |> Array.collect (fun f -> + |> Array.collect (fun f -> [| if f.HasGetterMethod then yield (f.DeclaringEntity.Value.FullName, f.ApparentEnclosingEntity.FullName, f.GetterMethod.CompiledName, f.GetterMethod.DeclaringEntity.Value.FullName, attribsOfSymbol f) if f.HasSetterMethod then @@ -3279,56 +3293,56 @@ let ``Test Project23 property`` () = [("Impl.Getter", "System.Int32", "Int32.get_Zero.Static", "Impl.Getter", ["member"; "prop"; "extmem"]); ("Impl.Getter", "System.Int32", "Int32.get_Value", "Impl.Getter", - ["member"; "prop"; "extmem"])] + ["member"; "prop"; "extmem"])] - allSymbolsUses + allSymbolsUses |> Array.map (fun x -> x.Symbol) - |> Array.choose (function + |> Array.choose (function | :? FSharpMemberOrFunctionOrValue as f -> Some (f.LogicalName, attribsOfSymbol f) | _ -> None) |> Array.toList - |> shouldEqual - [(".ctor", ["member"; "ctor"]); + |> shouldEqual + [(".ctor", ["member"; "ctor"]); ("get_StaticProperty", ["member"; "getter"]); - ("get_Property", ["member"; "getter"]); + ("get_Property", ["member"; "getter"]); ("x", []); ("get_Zero", ["member"; "extmem"; "getter"]); - ("get_Value", ["member"; "extmem"; "getter"]); + ("get_Value", ["member"; "extmem"; "getter"]); ("x", []); ("Value", ["member"; "prop"; "extmem"]); - ("set_Value", ["member"; "extmem"; "setter"]); + ("set_Value", ["member"; "extmem"; "setter"]); ("x", []); - ("_arg1", ["compgen"]); + ("_arg1", ["compgen"]); ("Value", ["member"; "prop"; "extmem"])] [] let ``Test Project23 extension properties' getters/setters should refer to the correct declaring entities`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project23.options) |> Async.RunSynchronously - let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() + let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() let extensionMembers = allSymbolsUses |> Array.rev |> Array.filter (fun su -> su.Symbol.DisplayName = "Value") extensionMembers |> Array.collect (fun memb -> wholeProjectResults.GetUsesOfSymbol(memb.Symbol) ) - |> Array.collect (fun x -> + |> Array.collect (fun x -> [| match x.Symbol with - | :? FSharpMemberOrFunctionOrValue as f -> + | :? FSharpMemberOrFunctionOrValue as f -> if f.HasGetterMethod then yield (f.DeclaringEntity.Value.FullName, f.GetterMethod.DeclaringEntity.Value.FullName, f.ApparentEnclosingEntity.FullName, f.GetterMethod.ApparentEnclosingEntity.FullName, attribsOfSymbol f) if f.HasSetterMethod then yield (f.DeclaringEntity.Value.FullName, f.SetterMethod.DeclaringEntity.Value.FullName, f.ApparentEnclosingEntity.FullName, f.SetterMethod.ApparentEnclosingEntity.FullName, attribsOfSymbol f) - | _ -> () + | _ -> () |]) |> Array.toList - |> shouldEqual + |> shouldEqual [ ("Impl.Setter", "Impl.Setter", "System.Int32", "System.Int32", ["member"; "prop"; "extmem"]); ("Impl.Setter", "Impl.Setter", "System.Int32", "System.Int32", ["member"; "prop"; "extmem"]); ("Impl.Getter", "Impl.Getter", "System.Int32", "System.Int32", ["member"; "prop"; "extmem"]) ("Impl.Getter", "Impl.Getter", "System.Int32", "System.Int32", ["member"; "prop"; "extmem"]) ] // Misc - property symbols -module internal Project24 = +module internal Project24 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3366,21 +3380,21 @@ type TypeWithProperties() = static member val StaticAutoPropGet = 0 with get static member val StaticAutoPropGetSet = 0 with get, set -let v1 = TypeWithProperties().NameGetSet +let v1 = TypeWithProperties().NameGetSet TypeWithProperties().NameGetSet <- 3 let v2 = TypeWithProperties().NameGet TypeWithProperties().NameSet <- 3 -let v3 = TypeWithProperties.StaticNameGetSet +let v3 = TypeWithProperties.StaticNameGetSet TypeWithProperties.StaticNameGetSet <- 3 let v4 = TypeWithProperties.StaticNameGet TypeWithProperties.StaticNameSet <- 3 -let v5 = TypeWithProperties().AutoPropGet +let v5 = TypeWithProperties().AutoPropGet let v6 = TypeWithProperties().AutoPropGetSet TypeWithProperties().AutoPropGetSet <- 3 @@ -3391,33 +3405,33 @@ let v8 = TypeWithProperties.StaticAutoPropGetSet TypeWithProperties.StaticAutoPropGetSet <- 3 """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] - let args = mkProjectCommandLineArgs (dllName, fileNames) + let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) [] -let ``Test Project24 whole project errors`` () = +let ``Test Project24 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project24.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project24 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] -let ``Test Project24 all symbols`` () = +let ``Test Project24 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project24.options) |> Async.RunSynchronously - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project24.fileName1, Project24.options) - |> Async.RunSynchronously + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project24.fileName1, Project24.options) + |> Async.RunSynchronously - let allUses = - backgroundTypedParse1.GetAllUsesOfAllSymbolsInFile() + let allUses = + backgroundTypedParse1.GetAllUsesOfAllSymbolsInFile() |> Array.ofSeq - |> Array.map (fun s -> (s.Symbol.DisplayName, Project24.cleanFileName s.FileName, tups s.RangeAlternate, attribsOfSymbolUse s, attribsOfSymbol s.Symbol)) + |> Array.map (fun s -> (s.Symbol.DisplayName, Project24.cleanFileName s.FileName, tups s.Range, attribsOfSymbolUse s, attribsOfSymbol s.Symbol)) - allUses |> shouldEqual + allUses |> shouldEqual [|("TypeWithProperties", "file1", ((4, 5), (4, 23)), ["defn"], ["class"]); ("( .ctor )", "file1", ((4, 5), (4, 23)), ["defn"], ["member"; "ctor"]); ("NameGetSet", "file1", ((5, 13), (5, 23)), ["defn"], ["member"; "getter"]); @@ -3513,16 +3527,16 @@ let ``Test Project24 all symbols`` () = ("PropertyTest", "file1", ((2, 7), (2, 19)), ["defn"], ["module"])|] [] -let ``Test symbol uses of properties with both getters and setters`` () = +let ``Test symbol uses of properties with both getters and setters`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project24.options) |> Async.RunSynchronously - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project24.fileName1, Project24.options) - |> Async.RunSynchronously + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project24.fileName1, Project24.options) + |> Async.RunSynchronously - let getAllSymbolUses = - backgroundTypedParse1.GetAllUsesOfAllSymbolsInFile() + let getAllSymbolUses = + backgroundTypedParse1.GetAllUsesOfAllSymbolsInFile() |> Array.ofSeq - |> Array.map (fun s -> (s.Symbol.DisplayName, Project24.cleanFileName s.FileName, tups s.RangeAlternate, attribsOfSymbol s.Symbol)) + |> Array.map (fun s -> (s.Symbol.DisplayName, Project24.cleanFileName s.FileName, tups s.Range, attribsOfSymbol s.Symbol)) getAllSymbolUses |> shouldEqual [|("TypeWithProperties", "file1", ((4, 5), (4, 23)), ["class"]); @@ -3604,23 +3618,23 @@ let ``Test symbol uses of properties with both getters and setters`` () = ("StaticAutoPropGetSet", "file1", ((55, 0), (55, 39)), ["member"; "prop"]); ("PropertyTest", "file1", ((2, 7), (2, 19)), ["module"])|] - let getSampleSymbolUseOpt = - backgroundTypedParse1.GetSymbolUseAtLocation(9,20,"",["NameGet"]) - + let getSampleSymbolUseOpt = + backgroundTypedParse1.GetSymbolUseAtLocation(9,20,"",["NameGet"]) + let getSampleSymbol = getSampleSymbolUseOpt.Value.Symbol - - let usesOfGetSampleSymbol = - backgroundTypedParse1.GetUsesOfSymbolInFile(getSampleSymbol) - - |> Array.map (fun s -> (Project24.cleanFileName s.FileName, tups s.RangeAlternate)) + + let usesOfGetSampleSymbol = + backgroundTypedParse1.GetUsesOfSymbolInFile(getSampleSymbol) + + |> Array.map (fun s -> (Project24.cleanFileName s.FileName, tups s.Range)) usesOfGetSampleSymbol |> shouldEqual [|("file1", ((9, 13), (9, 20))); ("file1", ((36, 9), (36, 37)))|] #if NO_CHECK_USE_OF_FSHARP_DATA_DLL #endif // Misc - type provider symbols -module internal Project25 = +module internal Project25 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3637,12 +3651,12 @@ let r = { Record.Field = 1 } let _ = XmlProvider<"13">.GetSample() """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] - let args = - [| yield! mkProjectCommandLineArgs (dllName, fileNames) + let args = + [| yield! mkProjectCommandLineArgs (dllName, fileNames) yield @"-r:" + Path.Combine(__SOURCE_DIRECTORY__, Path.Combine("data", "FSharp.Data.dll")) yield @"-r:" + sysLib "System.Xml.Linq" |] let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) @@ -3651,28 +3665,28 @@ let _ = XmlProvider<"13">.GetSample() #if NETCOREAPP [] #endif -let ``Test Project25 whole project errors`` () = +let ``Test Project25 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project25.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project25 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] #if NETCOREAPP [] #endif -let ``Test Project25 symbol uses of type-provided members`` () = +let ``Test Project25 symbol uses of type-provided members`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project25.options) |> Async.RunSynchronously - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options) - |> Async.RunSynchronously + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options) + |> Async.RunSynchronously - let allUses = - backgroundTypedParse1.GetAllUsesOfAllSymbolsInFile() + let allUses = + backgroundTypedParse1.GetAllUsesOfAllSymbolsInFile() |> Array.ofSeq - |> Array.map (fun s -> (s.Symbol.FullName, Project25.cleanFileName s.FileName, tups s.RangeAlternate, attribsOfSymbol s.Symbol)) + |> Array.map (fun s -> (s.Symbol.FullName, Project25.cleanFileName s.FileName, tups s.Range, attribsOfSymbol s.Symbol)) - allUses |> shouldEqual + allUses |> shouldEqual [|("FSharp", "file1", ((3, 5), (3, 11)), ["namespace"]); ("FSharp.Data", "file1", ((3, 12), (3, 16)), ["namespace"; "provided"]); @@ -3703,16 +3717,16 @@ let ``Test Project25 symbol uses of type-provided members`` () = ["class"; "provided"; "staticinst"; "erased"]); ("FSharp.Data.XmlProvider<...>.GetSample", "file1", ((10, 8), (10, 78)), ["member"]); ("TypeProviderTests", "file1", ((2, 7), (2, 24)), ["module"])|] - let getSampleSymbolUseOpt = - backgroundTypedParse1.GetSymbolUseAtLocation(5,25,"",["GetSample"]) - + let getSampleSymbolUseOpt = + backgroundTypedParse1.GetSymbolUseAtLocation(5,25,"",["GetSample"]) + let getSampleSymbol = getSampleSymbolUseOpt.Value.Symbol - - let usesOfGetSampleSymbol = - backgroundTypedParse1.GetUsesOfSymbolInFile(getSampleSymbol) - - |> Array.map (fun s -> (Project25.cleanFileName s.FileName, tups s.RangeAlternate)) + + let usesOfGetSampleSymbol = + backgroundTypedParse1.GetUsesOfSymbolInFile(getSampleSymbol) + + |> Array.map (fun s -> (Project25.cleanFileName s.FileName, tups s.Range)) usesOfGetSampleSymbol |> shouldEqual [|("file1", ((5, 8), (5, 25))); ("file1", ((10, 8), (10, 78)))|] @@ -3720,47 +3734,47 @@ let ``Test Project25 symbol uses of type-provided members`` () = #if NETCOREAPP [] #endif -let ``Test symbol uses of type-provided types`` () = +let ``Test symbol uses of type-provided types`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project25.options) |> Async.RunSynchronously - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options) - |> Async.RunSynchronously + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options) + |> Async.RunSynchronously + + let getSampleSymbolUseOpt = + backgroundTypedParse1.GetSymbolUseAtLocation(4,26,"",["XmlProvider"]) - let getSampleSymbolUseOpt = - backgroundTypedParse1.GetSymbolUseAtLocation(4,26,"",["XmlProvider"]) - let getSampleSymbol = getSampleSymbolUseOpt.Value.Symbol - - let usesOfGetSampleSymbol = - backgroundTypedParse1.GetUsesOfSymbolInFile(getSampleSymbol) - - |> Array.map (fun s -> (Project25.cleanFileName s.FileName, tups s.RangeAlternate)) + + let usesOfGetSampleSymbol = + backgroundTypedParse1.GetUsesOfSymbolInFile(getSampleSymbol) + + |> Array.map (fun s -> (Project25.cleanFileName s.FileName, tups s.Range)) usesOfGetSampleSymbol |> shouldEqual [|("file1", ((4, 15), (4, 26))); ("file1", ((10, 8), (10, 19)))|] [] -let ``Test symbol uses of fully-qualified records`` () = +let ``Test symbol uses of fully-qualified records`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project25.options) |> Async.RunSynchronously - let backgroundParseResults1, backgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options) - |> Async.RunSynchronously + let backgroundParseResults1, backgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project25.fileName1, Project25.options) + |> Async.RunSynchronously + + let getSampleSymbolUseOpt = + backgroundTypedParse1.GetSymbolUseAtLocation(7,11,"",["Record"]) - let getSampleSymbolUseOpt = - backgroundTypedParse1.GetSymbolUseAtLocation(7,11,"",["Record"]) - let getSampleSymbol = getSampleSymbolUseOpt.Value.Symbol - - let usesOfGetSampleSymbol = - backgroundTypedParse1.GetUsesOfSymbolInFile(getSampleSymbol) - - |> Array.map (fun s -> (Project25.cleanFileName s.FileName, tups s.RangeAlternate)) + + let usesOfGetSampleSymbol = + backgroundTypedParse1.GetUsesOfSymbolInFile(getSampleSymbol) + + |> Array.map (fun s -> (Project25.cleanFileName s.FileName, tups s.Range)) usesOfGetSampleSymbol |> shouldEqual [|("file1", ((7, 5), (7, 11))); ("file1", ((8, 10), (8, 16)))|] -module internal Project26 = +module internal Project26 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3776,7 +3790,7 @@ type Class() = member x.M2([] arg1, [] arg2) = () member x.M3([] arg: byref) = () """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" @@ -3786,37 +3800,37 @@ type Class() = [] -let ``Test Project26 whole project errors`` () = +let ``Test Project26 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project26.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project26 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] let ``Test Project26 parameter symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project26.options) |> Async.RunSynchronously - let allUsesOfAllSymbols = + let allUsesOfAllSymbols = wholeProjectResults.GetAllUsesOfAllSymbols() - - |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project13.cleanFileName su.FileName, tups su.RangeAlternate, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) + + |> Array.map (fun su -> su.Symbol.ToString(), su.Symbol.DisplayName, Project13.cleanFileName su.FileName, tups su.Range, attribsOfSymbolUse su, attribsOfSymbol su.Symbol) let objSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.Symbol.DisplayName = "Class") let objEntity = objSymbol.Symbol :?> FSharpEntity - - let rec isByRef (ty: FSharpType) = - if ty.IsAbbreviation then isByRef ty.AbbreviatedType + + let rec isByRef (ty: FSharpType) = + if ty.IsAbbreviation then isByRef ty.AbbreviatedType else ty.HasTypeDefinition && ty.TypeDefinition.IsByRef // check we can get the CurriedParameterGroups - let objMethodsCurriedParameterGroups = - [ for x in objEntity.MembersFunctionsAndValues do - for pg in x.CurriedParameterGroups do + let objMethodsCurriedParameterGroups = + [ for x in objEntity.MembersFunctionsAndValues do + for pg in x.CurriedParameterGroups do for p in pg do - let attributeNames = + let attributeNames = seq { if p.IsParamArrayArg then yield "params" if p.IsOutArg then yield "out" @@ -3825,7 +3839,7 @@ let ``Test Project26 parameter symbols`` () = |> String.concat "," yield x.CompiledName, p.Name, p.Type.ToString(), isByRef p.Type, attributeNames ] - objMethodsCurriedParameterGroups |> shouldEqual + objMethodsCurriedParameterGroups |> shouldEqual [("M1", Some "arg1", "type 'c", false, ""); ("M1", Some "arg2", "type 'd Microsoft.FSharp.Core.option", false, "optional"); ("M2", Some "arg1", "type 'a", false, "params"); @@ -3833,10 +3847,10 @@ let ``Test Project26 parameter symbols`` () = ("M3", Some "arg", "type Microsoft.FSharp.Core.byref", true, "out")] // check we can get the ReturnParameter - let objMethodsReturnParameter = - [ for x in objEntity.MembersFunctionsAndValues do - let p = x.ReturnParameter - let attributeNames = + let objMethodsReturnParameter = + [ for x in objEntity.MembersFunctionsAndValues do + let p = x.ReturnParameter + let attributeNames = seq { if p.IsParamArrayArg then yield "params" if p.IsOutArg then yield "out" @@ -3851,7 +3865,7 @@ let ``Test Project26 parameter symbols`` () = ("M2", None, "type Microsoft.FSharp.Core.unit", ""); ("M3", None, "type Microsoft.FSharp.Core.unit", "")]) -module internal Project27 = +module internal Project27 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3862,41 +3876,41 @@ module M type CFoo() = abstract AbstractMethod: int -> string - default __.AbstractMethod _ = "dflt" - + default _.AbstractMethod _ = "dflt" + type CFooImpl() = inherit CFoo() - override __.AbstractMethod _ = "v" + override _.AbstractMethod _ = "v" """ - File.WriteAllText(fileName1, fileSource1) - + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) [] -let ``Test project27 whole project errors`` () = +let ``Test project27 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project27.options) |> Async.RunSynchronously - wholeProjectResults .Errors.Length |> shouldEqual 0 + wholeProjectResults .Diagnostics.Length |> shouldEqual 0 [] -let ``Test project27 all symbols in signature`` () = +let ``Test project27 all symbols in signature`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project27.options) |> Async.RunSynchronously let allSymbols = allSymbolsInEntities true wholeProjectResults.AssemblySignature.Entities - [ for x in allSymbols -> x.ToString(), attribsOfSymbol x ] - |> shouldEqual - [("M", ["module"]); - ("CFoo", ["class"]); + [ for x in allSymbols -> x.ToString(), attribsOfSymbol x ] + |> shouldEqual + [("M", ["module"]); + ("CFoo", ["class"]); ("member .ctor", ["member"; "ctor"]); ("member AbstractMethod", ["slot"; "member"]); - ("member AbstractMethod", ["member"; "overridemem"]); + ("member AbstractMethod", ["member"; "overridemem"]); ("CFooImpl", ["class"]); ("member .ctor", ["member"; "ctor"]); ("member AbstractMethod", ["member"; "overridemem"])] -module internal Project28 = +module internal Project28 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3933,7 +3947,7 @@ type Use() = member x.Test number = TestNumber 42 """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) @@ -3966,9 +3980,9 @@ let ``Test project28 all symbols in signature`` () = [|("FSharpEntity", "M", "T:M"); ("FSharpMemberOrFunctionOrValue", "( |Even|Odd| )", "M:M.|Even|Odd|(System.Int32)"); ("FSharpMemberOrFunctionOrValue", "TestNumber", "M:M.TestNumber(System.Int32)"); - ("FSharpEntity", "DU", "T:M.DU"); + ("FSharpEntity", "DU", "T:M.DU"); ("FSharpUnionCase", "A", "T:M.DU.A"); - ("FSharpField", "Item", "T:M.DU.A"); + ("FSharpField", "Item", "T:M.DU.A"); ("FSharpUnionCase", "B", "T:M.DU.B"); ("FSharpField", "Item", "T:M.DU.B"); ("FSharpEntity", "XmlDocSigTest", "T:M.XmlDocSigTest"); @@ -4000,7 +4014,7 @@ let ``Test project28 all symbols in signature`` () = failwithf "%A does not exist in the collection." x ) #endif -module internal Project29 = +module internal Project29 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4009,9 +4023,9 @@ module internal Project29 = let fileSource1 = """ module M open System.ComponentModel -let f (x: INotifyPropertyChanged) = failwith "" +let f (x: INotifyPropertyChanged) = failwith "" """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) @@ -4019,35 +4033,35 @@ let f (x: INotifyPropertyChanged) = failwith "" [] -let ``Test project29 whole project errors`` () = +let ``Test project29 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project29.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project29 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] -let ``Test project29 event symbols`` () = +let ``Test project29 event symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project29.options) |> Async.RunSynchronously - + let objSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.Symbol.DisplayName = "INotifyPropertyChanged") let objEntity = objSymbol.Symbol :?> FSharpEntity - let objMethodsCurriedParameterGroups = - [ for x in objEntity.MembersFunctionsAndValues do - for pg in x.CurriedParameterGroups do + let objMethodsCurriedParameterGroups = + [ for x in objEntity.MembersFunctionsAndValues do + for pg in x.CurriedParameterGroups do for p in pg do yield x.CompiledName, p.Name, p.Type.Format(objSymbol.DisplayContext) ] - objMethodsCurriedParameterGroups |> shouldEqual + objMethodsCurriedParameterGroups |> shouldEqual [("add_PropertyChanged", Some "value", "PropertyChangedEventHandler"); ("remove_PropertyChanged", Some "value", "PropertyChangedEventHandler")] - + // check we can get the ReturnParameter - let objMethodsReturnParameter = - [ for x in objEntity.MembersFunctionsAndValues do - let p = x.ReturnParameter + let objMethodsReturnParameter = + [ for x in objEntity.MembersFunctionsAndValues do + let p = x.ReturnParameter yield x.DisplayName, p.Name, p.Type.Format(objSymbol.DisplayContext) ] set objMethodsReturnParameter |> shouldEqual (set @@ -4056,7 +4070,7 @@ let ``Test project29 event symbols`` () = ("remove_PropertyChanged", None, "unit")]) -module internal Project30 = +module internal Project30 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4066,57 +4080,57 @@ module internal Project30 = [] module Module open System -type T() = +type T() = [] - member __.Member = 0 + member _.Member = 0 """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) -let ``Test project30 whole project errors`` () = +let ``Test project30 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project30.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project30 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] -let ``Test project30 Format attributes`` () = +let ``Test project30 Format attributes`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project30.options) |> Async.RunSynchronously - + let moduleSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.Symbol.DisplayName = "Module") let moduleEntity = moduleSymbol.Symbol :?> FSharpEntity - - let moduleAttributes = - [ for x in moduleEntity.Attributes do + + let moduleAttributes = + [ for x in moduleEntity.Attributes do yield x.Format(moduleSymbol.DisplayContext), x.Format(FSharpDisplayContext.Empty) ] - moduleAttributes + moduleAttributes |> set - |> shouldEqual + |> shouldEqual (set - [("[ (4))>]", + [("[ (4))>]", "[ (4))>]")]) - + let memberSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.Symbol.DisplayName = "Member") let memberEntity = memberSymbol.Symbol :?> FSharpMemberOrFunctionOrValue - - let memberAttributes = - [ for x in memberEntity.Attributes do + + let memberAttributes = + [ for x in memberEntity.Attributes do yield x.Format(memberSymbol.DisplayContext), x.Format(FSharpDisplayContext.Empty) ] memberAttributes - |> set - |> shouldEqual + |> set + |> shouldEqual (set - [("""[]""", + [("""[]""", """[]""")]) -module internal Project31 = +module internal Project31 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4128,34 +4142,34 @@ open System open System.Collections.Generic open System.Diagnostics let f (x: List<'T>) = failwith "" -let g = Console.ReadKey() +let g = Console.ReadKey() """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) -let ``Test project31 whole project errors`` () = +let ``Test project31 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project31.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project31 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] #if NETCOREAPP [] #endif let ``Test project31 C# type attributes`` () = - if not runningOnMono then + if not runningOnMono then let wholeProjectResults = checker.ParseAndCheckProject(Project31.options) |> Async.RunSynchronously - + let objSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.Symbol.DisplayName = "List") let objEntity = objSymbol.Symbol :?> FSharpEntity let attributes = objEntity.Attributes |> Seq.filter (fun attrib -> attrib.AttributeType.DisplayName <> "__DynamicallyInvokableAttribute") - [ for attrib in attributes do + [ for attrib in attributes do let args = try Seq.toList attrib.ConstructorArguments with _ -> [] let namedArgs = try Seq.toList attrib.NamedArguments with _ -> [] let output = sprintf "%A" (attrib.AttributeType, args, namedArgs) @@ -4170,22 +4184,22 @@ let ``Test project31 C# type attributes`` () = [] let ``Test project31 C# method attributes`` () = - if not runningOnMono then + if not runningOnMono then let wholeProjectResults = checker.ParseAndCheckProject(Project31.options) |> Async.RunSynchronously - + let objSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.Symbol.DisplayName = "Console") let objEntity = objSymbol.Symbol :?> FSharpEntity - - let objMethodsAttributes = - [ for x in objEntity.MembersFunctionsAndValues do - for attrib in x.Attributes do + + let objMethodsAttributes = + [ for x in objEntity.MembersFunctionsAndValues do + for attrib in x.Attributes do let args = try Seq.toList attrib.ConstructorArguments with _ -> [] let namedArgs = try Seq.toList attrib.NamedArguments with _ -> [] yield sprintf "%A" (attrib.AttributeType, args, namedArgs) ] - objMethodsAttributes + objMethodsAttributes |> set - |> shouldEqual + |> shouldEqual (set [ #if !NETCOREAPP "(SecuritySafeCriticalAttribute, [], [])"; @@ -4197,9 +4211,9 @@ let ``Test project31 C# method attributes`` () = [] #endif let ``Test project31 Format C# type attributes`` () = - if not runningOnMono then + if not runningOnMono then let wholeProjectResults = checker.ParseAndCheckProject(Project31.options) |> Async.RunSynchronously - + let objSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.Symbol.DisplayName = "List") let objEntity = objSymbol.Symbol :?> FSharpEntity let attributes = objEntity.Attributes |> Seq.filter (fun attrib -> attrib.AttributeType.DisplayName <> "__DynamicallyInvokableAttribute") @@ -4214,26 +4228,26 @@ let ``Test project31 Format C# type attributes`` () = [] let ``Test project31 Format C# method attributes`` () = - if not runningOnMono then + if not runningOnMono then let wholeProjectResults = checker.ParseAndCheckProject(Project31.options) |> Async.RunSynchronously - + let objSymbol = wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.find (fun su -> su.Symbol.DisplayName = "Console") let objEntity = objSymbol.Symbol :?> FSharpEntity - - let objMethodsAttributes = - [ for x in objEntity.MembersFunctionsAndValues do + + let objMethodsAttributes = + [ for x in objEntity.MembersFunctionsAndValues do for attrib in x.Attributes -> attrib.Format(objSymbol.DisplayContext) ] - objMethodsAttributes + objMethodsAttributes |> set - |> shouldEqual + |> shouldEqual (set ["[]"; #if !NETCOREAPP "[]"; #endif ]) -module internal Project32 = +module internal Project32 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let sigFileName1 = Path.ChangeExtension(fileName1, ".fsi") @@ -4244,14 +4258,14 @@ module internal Project32 = module Sample let func x = x + 1 """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let sigFileSource1 = """ module Sample val func : int -> int """ - File.WriteAllText(sigFileName1, sigFileSource1) + FileSystem.OpenFileForWriteShim(sigFileName1).Write(sigFileSource1) let cleanFileName a = if a = fileName1 then "file1" elif a = sigFileName1 then "sig1" else "??" let fileNames = [sigFileName1; fileName1] @@ -4260,52 +4274,52 @@ val func : int -> int [] -let ``Test Project32 whole project errors`` () = +let ``Test Project32 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project32.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project32 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] let ``Test Project32 should be able to find sig symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project32.options) |> Async.RunSynchronously - let _sigBackgroundParseResults1, sigBackgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project32.sigFileName1, Project32.options) + let _sigBackgroundParseResults1, sigBackgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project32.sigFileName1, Project32.options) |> Async.RunSynchronously - let sigSymbolUseOpt = sigBackgroundTypedParse1.GetSymbolUseAtLocation(4,5,"",["func"]) + let sigSymbolUseOpt = sigBackgroundTypedParse1.GetSymbolUseAtLocation(4,5,"",["func"]) let sigSymbol = sigSymbolUseOpt.Value.Symbol - - let usesOfSigSymbol = + + let usesOfSigSymbol = [ for su in wholeProjectResults.GetUsesOfSymbol(sigSymbol) do - yield Project32.cleanFileName su.FileName , tups su.RangeAlternate, attribsOfSymbol su.Symbol ] + yield Project32.cleanFileName su.FileName , tups su.Range, attribsOfSymbol su.Symbol ] usesOfSigSymbol |> shouldEqual - [("sig1", ((4, 4), (4, 8)), ["val"]); + [("sig1", ((4, 4), (4, 8)), ["val"]); ("file1", ((3, 4), (3, 8)), ["val"])] [] let ``Test Project32 should be able to find impl symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project32.options) |> Async.RunSynchronously - let _implBackgroundParseResults1, implBackgroundTypedParse1 = - checker.GetBackgroundCheckResultsForFileInProject(Project32.fileName1, Project32.options) + let _implBackgroundParseResults1, implBackgroundTypedParse1 = + checker.GetBackgroundCheckResultsForFileInProject(Project32.fileName1, Project32.options) |> Async.RunSynchronously - let implSymbolUseOpt = implBackgroundTypedParse1.GetSymbolUseAtLocation(3,5,"",["func"]) + let implSymbolUseOpt = implBackgroundTypedParse1.GetSymbolUseAtLocation(3,5,"",["func"]) let implSymbol = implSymbolUseOpt.Value.Symbol - - let usesOfImplSymbol = + + let usesOfImplSymbol = [ for su in wholeProjectResults.GetUsesOfSymbol(implSymbol) do - yield Project32.cleanFileName su.FileName , tups su.RangeAlternate, attribsOfSymbol su.Symbol ] + yield Project32.cleanFileName su.FileName , tups su.Range, attribsOfSymbol su.Symbol ] usesOfImplSymbol |> shouldEqual - [("sig1", ((4, 4), (4, 8)), ["val"]); + [("sig1", ((4, 4), (4, 8)), ["val"]); ("file1", ((3, 4), (3, 8)), ["val"])] -module internal Project33 = +module internal Project33 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4319,7 +4333,7 @@ type System.Int32 with member x.SetValue (_: int) = () member x.GetValue () = x """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] @@ -4327,30 +4341,30 @@ type System.Int32 with let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) [] -let ``Test Project33 whole project errors`` () = +let ``Test Project33 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project33.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project33 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] let ``Test Project33 extension methods`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project33.options) |> Async.RunSynchronously - let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() - + let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() + let implModuleUse = allSymbolsUses |> Array.find (fun su -> su.Symbol.DisplayName = "Impl") let implModuleDefn = implModuleUse.Symbol :?> FSharpEntity - [ + [ for x in implModuleDefn.MembersFunctionsAndValues -> x.LogicalName, attribsOfSymbol x ] - |> shouldEqual - [("SetValue", ["member"; "extmem"]); + |> shouldEqual + [("SetValue", ["member"; "extmem"]); ("GetValue", ["member"; "extmem"])] -module internal Project34 = +module internal Project34 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4359,11 +4373,11 @@ module internal Project34 = let fileSource1 = """ module Dummy """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] - let args = + let args = [| yield! mkProjectCommandLineArgs (dllName, fileNames) // We use .NET-buit version of System.Data.dll since the tests depend on implementation details @@ -4373,11 +4387,11 @@ module Dummy let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) [] -let ``Test Project34 whole project errors`` () = +let ``Test Project34 whole project errors`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project34.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "Project34 error: <<<%s>>>" e.Message - wholeProjectResults.Errors.Length |> shouldEqual 0 + wholeProjectResults.Diagnostics.Length |> shouldEqual 0 [] #if NETCOREAPP @@ -4385,7 +4399,7 @@ let ``Test Project34 whole project errors`` () = #endif let ``Test project34 should report correct accessibility for System.Data.Listeners`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project34.options) |> Async.RunSynchronously - let rec getNestedEntities (entity: FSharpEntity) = + let rec getNestedEntities (entity: FSharpEntity) = seq { yield entity for e in entity.NestedEntities do yield! getNestedEntities e } @@ -4394,18 +4408,18 @@ let ``Test project34 should report correct accessibility for System.Data.Listene |> List.tryPick (fun asm -> if asm.SimpleName.Contains("System.Data") then Some asm.Contents.Entities else None) |> Option.get |> Seq.collect getNestedEntities - |> Seq.tryFind (fun entity -> - entity.TryFullName - |> Option.map (fun s -> s.Contains("System.Data.Listeners")) + |> Seq.tryFind (fun entity -> + entity.TryFullName + |> Option.map (fun s -> s.Contains("System.Data.Listeners")) |> fun arg -> defaultArg arg false) |> Option.get listenerEntity.Accessibility.IsPrivate |> shouldEqual true let listenerFuncEntity = listenerEntity.NestedEntities - |> Seq.tryFind (fun entity -> - entity.TryFullName - |> Option.map (fun s -> s.Contains("Func")) + |> Seq.tryFind (fun entity -> + entity.TryFullName + |> Option.map (fun s -> s.Contains("Func")) |> fun arg -> defaultArg arg false) |> Option.get @@ -4414,7 +4428,7 @@ let ``Test project34 should report correct accessibility for System.Data.Listene //------------------------------------------------------ -module internal Project35 = +module internal Project35 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4427,7 +4441,7 @@ type Test = let tupleFunction (one:int, two:float, three:string) = float32 (one + int two + int three) """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] @@ -4438,10 +4452,10 @@ type Test = [] let ``Test project35 CurriedParameterGroups should be available for nested functions`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project35.options) |> Async.RunSynchronously - let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() - let findByDisplayName name = + let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() + let findByDisplayName name = Array.find (fun (su:FSharpSymbolUse) -> su.Symbol.DisplayName = name) - + let curriedFunction = allSymbolUses |> findByDisplayName "curriedFunction" match curriedFunction.Symbol with @@ -4491,15 +4505,15 @@ let ``Test project35 CurriedParameterGroups should be available for nested funct //------------------------------------------------------ -module internal Project35b = +module internal Project35b = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fsx") let fileSource1Text = """ #r "System.dll" #r "notexist.dll" """ - let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text - File.WriteAllText(fileName1, fileSource1Text) + let fileSource1 = SourceText.ofString fileSource1Text + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1Text) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] @@ -4509,18 +4523,18 @@ module internal Project35b = let args = mkProjectCommandLineArgs(dllPath, fileNames) let args2 = Array.append args [| "-r:notexist.dll" |] let options = checker.GetProjectOptionsFromCommandLineArgs (projPath, args2) -#else +#else let options = checker.GetProjectOptionsFromScript(fileName1, fileSource1) |> Async.RunSynchronously |> fst #endif [] let ``Test project35b Dependency files for ParseAndCheckFileInProject`` () = - let checkFileResults = + let checkFileResults = checker.ParseAndCheckFileInProject(Project35b.fileName1, 0, Project35b.fileSource1, Project35b.options) |> Async.RunSynchronously - |> function + |> function | _, FSharpCheckFileAnswer.Succeeded(res) -> res - | _ -> failwithf "Parsing aborted unexpectedly..." - for d in checkFileResults.DependencyFiles do + | _ -> failwithf "Parsing aborted unexpectedly..." + for d in checkFileResults.DependencyFiles do printfn "ParseAndCheckFileInProject dependency: %s" d checkFileResults.DependencyFiles |> Array.exists (fun s -> s.Contains "notexist.dll") |> shouldEqual true // The file itself is not a dependency since it is never read from the file system when using ParseAndCheckFileInProject @@ -4529,7 +4543,7 @@ let ``Test project35b Dependency files for ParseAndCheckFileInProject`` () = [] let ``Test project35b Dependency files for GetBackgroundCheckResultsForFileInProject`` () = let _,checkFileResults = checker.GetBackgroundCheckResultsForFileInProject(Project35b.fileName1, Project35b.options) |> Async.RunSynchronously - for d in checkFileResults.DependencyFiles do + for d in checkFileResults.DependencyFiles do printfn "GetBackgroundCheckResultsForFileInProject dependency: %s" d checkFileResults.DependencyFiles |> Array.exists (fun s -> s.Contains "notexist.dll") |> shouldEqual true // The file is a dependency since it is read from the file system when using GetBackgroundCheckResultsForFileInProject @@ -4538,7 +4552,7 @@ let ``Test project35b Dependency files for GetBackgroundCheckResultsForFileInPro [] let ``Test project35b Dependency files for check of project`` () = let checkResults = checker.ParseAndCheckProject(Project35b.options) |> Async.RunSynchronously - for d in checkResults.DependencyFiles do + for d in checkResults.DependencyFiles do printfn "ParseAndCheckProject dependency: %s" d checkResults.DependencyFiles |> Array.exists (fun s -> s.Contains "notexist.dll") |> shouldEqual true checkResults.DependencyFiles |> Array.exists (fun s -> s.Contains Project35b.fileName1) |> shouldEqual true @@ -4551,7 +4565,7 @@ module internal Project36 = let base2 = Path.GetTempFileName() let dllName = Path.ChangeExtension(base2, ".dll") let projFileName = Path.ChangeExtension(base2, ".fsproj") - let fileSource1 = """ + let fileSource1 = """module Project36 type A(i:int) = member x.Value = i @@ -4566,31 +4580,21 @@ let [] lit = 1.0 let notLit = 1.0 let callToOverload = B(5).Overload(4) """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let cleanFileName a = if a = fileName1 then "file1" else "??" let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) + +[] +let ``Test project36 FSharpMemberOrFunctionOrValue.IsBaseValue`` () = let keepAssemblyContentsChecker = FSharpChecker.Create(keepAssemblyContents=true) - let options = keepAssemblyContentsChecker.GetProjectOptionsFromCommandLineArgs (projFileName, args) + let options = keepAssemblyContentsChecker.GetProjectOptionsFromCommandLineArgs (Project36.projFileName, Project36.args) let wholeProjectResults = keepAssemblyContentsChecker.ParseAndCheckProject(options) |> Async.RunSynchronously - let declarations = - let checkedFile = wholeProjectResults.AssemblyContents.ImplementationFiles.[0] - match checkedFile.Declarations.[0] with - | FSharpImplementationFileDeclaration.Entity (_, subDecls) -> subDecls - | _ -> failwith "unexpected declaration" - let getExpr exprIndex = - match declarations.[exprIndex] with - | FSharpImplementationFileDeclaration.MemberOrFunctionOrValue(_,_,e) -> e - | FSharpImplementationFileDeclaration.InitAction e -> e - | _ -> failwith "unexpected declaration" -[] -let ``Test project36 FSharpMemberOrFunctionOrValue.IsBaseValue`` () = - Project36.wholeProjectResults.GetAllUsesOfAllSymbols() - + wholeProjectResults.GetAllUsesOfAllSymbols() |> Array.pick (fun (su:FSharpSymbolUse) -> if su.Symbol.DisplayName = "base" then Some (su.Symbol :?> FSharpMemberOrFunctionOrValue) @@ -4599,7 +4603,9 @@ let ``Test project36 FSharpMemberOrFunctionOrValue.IsBaseValue`` () = [] let ``Test project36 FSharpMemberOrFunctionOrValue.IsConstructorThisValue & IsMemberThisValue`` () = - let wholeProjectResults = Project36.keepAssemblyContentsChecker.ParseAndCheckProject(Project36.options) |> Async.RunSynchronously + let keepAssemblyContentsChecker = FSharpChecker.Create(keepAssemblyContents=true) + let options = keepAssemblyContentsChecker.GetProjectOptionsFromCommandLineArgs (Project36.projFileName, Project36.args) + let wholeProjectResults = keepAssemblyContentsChecker.ParseAndCheckProject(options) |> Async.RunSynchronously let declarations = let checkedFile = wholeProjectResults.AssemblyContents.ImplementationFiles.[0] match checkedFile.Declarations.[0] with @@ -4612,29 +4618,31 @@ let ``Test project36 FSharpMemberOrFunctionOrValue.IsConstructorThisValue & IsMe | _ -> failwith "unexpected declaration" // Instead of checking the symbol uses directly, walk the typed tree to check // the correct values are also visible from there. Also note you cannot use - // BasicPatterns.ThisValue in these cases, this is only used when the symbol + // ThisValue in these cases, this is only used when the symbol // is implicit in the constructor - match Project36.getExpr 4 with - | BasicPatterns.Let((b,_),_) -> + match getExpr 4 with + | Let((b,_),_) -> b.IsConstructorThisValue && not b.IsMemberThisValue | _ -> failwith "unexpected expression" |> shouldEqual true - match Project36.getExpr 5 with - | BasicPatterns.FSharpFieldGet(Some(BasicPatterns.Value x),_,_) -> + match getExpr 5 with + | FSharpFieldGet(Some(Value x),_,_) -> x.IsMemberThisValue && not x.IsConstructorThisValue | _ -> failwith "unexpected expression" |> shouldEqual true - match Project36.getExpr 6 with - | BasicPatterns.Call(_,_,_,_,[BasicPatterns.Value s;_]) -> + match getExpr 6 with + | Call(_,_,_,_,[Value s;_]) -> not s.IsMemberThisValue && not s.IsConstructorThisValue | _ -> failwith "unexpected expression" |> shouldEqual true [] let ``Test project36 FSharpMemberOrFunctionOrValue.LiteralValue`` () = - let wholeProjectResults = Project36.keepAssemblyContentsChecker.ParseAndCheckProject(Project36.options) |> Async.RunSynchronously + let keepAssemblyContentsChecker = FSharpChecker.Create(keepAssemblyContents=true) + let options = keepAssemblyContentsChecker.GetProjectOptionsFromCommandLineArgs (Project36.projFileName, Project36.args) + let wholeProjectResults = keepAssemblyContentsChecker.ParseAndCheckProject(options) |> Async.RunSynchronously let project36Module = wholeProjectResults.AssemblySignature.Entities.[0] let lit = project36Module.MembersFunctionsAndValues.[0] shouldEqual true (lit.LiteralValue.Value |> unbox |> (=) 1.) @@ -4642,7 +4650,7 @@ let ``Test project36 FSharpMemberOrFunctionOrValue.LiteralValue`` () = let notLit = project36Module.MembersFunctionsAndValues.[1] shouldEqual true notLit.LiteralValue.IsNone -module internal Project37 = +module internal Project37 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4680,20 +4688,20 @@ module Test = let withTypeArray = 0 [] let withIntArray = 0 - module NestedModule = + module NestedModule = type NestedRecordType = { B : int } [] do () """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let fileSource2 = """ namespace AttrTests [] do () """ - File.WriteAllText(fileName2, fileSource2) + FileSystem.OpenFileForWriteShim(fileName2).Write(fileSource2) let fileNames = [fileName1; fileName2] let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) @@ -4703,13 +4711,13 @@ let ``Test project37 typeof and arrays in attribute constructor arguments`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project37.options) |> Async.RunSynchronously - let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() + let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() for su in allSymbolsUses do match su.Symbol with | :? FSharpMemberOrFunctionOrValue as funcSymbol -> let getAttrArg() = - let arg = funcSymbol.Attributes.[0].ConstructorArguments.[0] |> snd - arg :?> FSharpType + let arg = funcSymbol.Attributes.[0].ConstructorArguments.[0] |> snd + arg :?> FSharpType match funcSymbol.DisplayName with | "withType" -> let t = getAttrArg() @@ -4729,25 +4737,25 @@ let ``Test project37 typeof and arrays in attribute constructor arguments`` () = t.GenericArguments.[0].TypeDefinition.DisplayName |> shouldEqual "int" t.GenericArguments.[1].TypeDefinition.DisplayName |> shouldEqual "int" | "withTypeArray" -> - let attr = funcSymbol.Attributes.[0].ConstructorArguments.[0] |> snd + let attr = funcSymbol.Attributes.[0].ConstructorArguments.[0] |> snd let ta = attr :?> obj[] |> Array.map (fun t -> t :?> FSharpType) ta.[0].TypeDefinition.DisplayName |> shouldEqual "TestUnion" ta.[1].TypeDefinition.DisplayName |> shouldEqual "TestRecord" | "withIntArray" -> - let attr = funcSymbol.Attributes.[0].ConstructorArguments.[0] |> snd + let attr = funcSymbol.Attributes.[0].ConstructorArguments.[0] |> snd let a = attr :?> obj[] |> Array.map (fun t -> t :?> int) - a |> shouldEqual [| 0; 1; 2 |] + a |> shouldEqual [| 0; 1; 2 |] | _ -> () | _ -> () - let mscorlibAsm = - wholeProjectResults.ProjectContext.GetReferencedAssemblies() + let mscorlibAsm = + wholeProjectResults.ProjectContext.GetReferencedAssemblies() |> Seq.find (fun a -> a.SimpleName = "mscorlib") printfn "Attributes found in mscorlib: %A" mscorlibAsm.Contents.Attributes shouldEqual (mscorlibAsm.Contents.Attributes.Count > 0) true - let fsharpCoreAsm = - wholeProjectResults.ProjectContext.GetReferencedAssemblies() + let fsharpCoreAsm = + wholeProjectResults.ProjectContext.GetReferencedAssemblies() |> Seq.find (fun a -> a.SimpleName = "FSharp.Core") printfn "Attributes found in FSharp.Core: %A" fsharpCoreAsm.Contents.Attributes shouldEqual (fsharpCoreAsm.Contents.Attributes.Count > 0) true @@ -4757,35 +4765,35 @@ let ``Test project37 DeclaringEntity`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project37.options) |> Async.RunSynchronously - let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() + let allSymbolsUses = wholeProjectResults.GetAllUsesOfAllSymbols() for sym in allSymbolsUses do - match sym.Symbol with - | :? FSharpEntity as e when not e.IsNamespace || e.AccessPath.Contains(".") -> + match sym.Symbol with + | :? FSharpEntity as e when not e.IsNamespace || e.AccessPath.Contains(".") -> printfn "checking declaring type of entity '%s' --> '%s', assembly = '%s'" e.AccessPath e.CompiledName (e.Assembly.ToString()) shouldEqual e.DeclaringEntity.IsSome true - match e.CompiledName with - | "AttrTestAttribute" -> + match e.CompiledName with + | "AttrTestAttribute" -> shouldEqual e.AccessPath "AttrTests" - | "int" -> + | "int" -> shouldEqual e.AccessPath "Microsoft.FSharp.Core" shouldEqual e.DeclaringEntity.Value.AccessPath "Microsoft.FSharp" - | "list`1" -> + | "list`1" -> shouldEqual e.AccessPath "Microsoft.FSharp.Collections" shouldEqual e.DeclaringEntity.Value.AccessPath "Microsoft.FSharp" shouldEqual e.DeclaringEntity.Value.DeclaringEntity.IsSome true shouldEqual e.DeclaringEntity.Value.DeclaringEntity.Value.IsNamespace true shouldEqual e.DeclaringEntity.Value.DeclaringEntity.Value.AccessPath "Microsoft" shouldEqual e.DeclaringEntity.Value.DeclaringEntity.Value.DeclaringEntity.Value.DeclaringEntity.IsSome false - | "Attribute" -> + | "Attribute" -> shouldEqual e.AccessPath "System" shouldEqual e.DeclaringEntity.Value.AccessPath "global" - | "NestedRecordType" -> + | "NestedRecordType" -> shouldEqual e.AccessPath "AttrTests.Test.NestedModule" shouldEqual e.DeclaringEntity.Value.AccessPath "AttrTests.Test" shouldEqual e.DeclaringEntity.Value.DeclaringEntity.Value.AccessPath "AttrTests" shouldEqual e.DeclaringEntity.Value.DeclaringEntity.Value.DeclaringEntity.Value.AccessPath "global" | _ -> () - | :? FSharpMemberOrFunctionOrValue as e when e.IsModuleValueOrMember -> + | :? FSharpMemberOrFunctionOrValue as e when e.IsModuleValueOrMember -> printfn "checking declaring type of value '%s', assembly = '%s'" e.CompiledName (e.Assembly.ToString()) shouldEqual e.DeclaringEntity.IsSome true | _ -> () @@ -4806,7 +4814,7 @@ type I<'X> = abstract Method : unit -> unit abstract Generic : named:'X -> unit abstract Generic<'Y> : 'X * 'Y -> unit - abstract Property : int + abstract Property : int [] type B<'Y>() = @@ -4818,7 +4826,7 @@ type B<'Y>() = type A<'XX, 'YY>() = inherit B<'YY>() - + let ev = Event() override this.Method() = () @@ -4835,7 +4843,7 @@ type A<'XX, 'YY>() = member this.Generic<'Y> (a: 'XX, b: 'Y) = () member this.Property = 1 """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) @@ -4846,28 +4854,28 @@ let ``Test project38 abstract slot information`` () = checker.ParseAndCheckProject(Project38.options) |> Async.RunSynchronously let printAbstractSignature (s: FSharpAbstractSignature) = - let printType (t: FSharpType) = + let printType (t: FSharpType) = hash t |> ignore // smoke test to check hash code doesn't loop - (string t).[5 ..] - let args = - (s.AbstractArguments |> Seq.concat |> Seq.map (fun a -> + (string t).[5 ..] + let args = + (s.AbstractArguments |> Seq.concat |> Seq.map (fun a -> (match a.Name with Some n -> n + ":" | _ -> "") + printType a.Type) |> String.concat " * ") |> function "" -> "()" | a -> a let tgen = match s.DeclaringTypeGenericParameters |> Seq.map (fun m -> "'" + m.Name) |> String.concat "," with | "" -> "" - | g -> " original generics: <" + g + ">" + | g -> " original generics: <" + g + ">" let mgen = match s.MethodGenericParameters |> Seq.map (fun m -> "'" + m.Name) |> String.concat "," with | "" -> "" - | g -> "<" + g + ">" + | g -> "<" + g + ">" "type " + printType s.DeclaringType + tgen + " with member " + s.Name + mgen + " : " + args + " -> " + printType s.AbstractReturnType - + let results = let a2ent = wholeProjectResults.AssemblySignature.Entities |> Seq.find (fun e -> e.FullName = "OverrideTests.A`2") a2ent.MembersFunctionsAndValues |> Seq.map (fun m -> - m.CompiledName, (m.ImplementedAbstractSignatures |> Seq.map printAbstractSignature |> List.ofSeq) + m.CompiledName, (m.ImplementedAbstractSignatures |> Seq.map printAbstractSignature |> List.ofSeq) ) |> Array.ofSeq @@ -4895,7 +4903,7 @@ let ``Test project38 abstract slot information`` () = //-------------------------------------------- -module internal Project39 = +module internal Project39 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4905,42 +4913,42 @@ module internal Project39 = module M let functionWithIncompleteSignature x = System.ThisDoesntExist.SomeMethod(x) -let curriedFunctionWithIncompleteSignature (x1:'a) x2 (x3:'a,x4) = +let curriedFunctionWithIncompleteSignature (x1:'a) x2 (x3:'a,x4) = (x2 = x4) |> ignore System.ThisDoesntExist.SomeMethod(x1,x2,x3,x4) -type C() = +type C() = member x.MemberWithIncompleteSignature x = System.ThisDoesntExist.SomeMethod(x) - member x.CurriedMemberWithIncompleteSignature (x1:'a) x2 (x3:'a,x4) = + member x.CurriedMemberWithIncompleteSignature (x1:'a) x2 (x3:'a,x4) = (x2 = x4) |> ignore System.ThisDoesntExist.SomeMethod(x1,x2,x3,x4) -let uses () = +let uses () = functionWithIncompleteSignature (failwith "something") curriedFunctionWithIncompleteSignature (failwith "x1") (failwith "x2") (failwith "x3", failwith "x4") C().MemberWithIncompleteSignature (failwith "something") C().CurriedMemberWithIncompleteSignature (failwith "x1") (failwith "x2") (failwith "x3", failwith "x4") """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) let cleanFileName a = if a = fileName1 then "file1" else "??" [] -let ``Test project39 all symbols`` () = +let ``Test project39 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project39.options) |> Async.RunSynchronously - let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() - let typeTextOfAllSymbolUses = + let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() + let typeTextOfAllSymbolUses = [ for s in allSymbolUses do - match s.Symbol with - | :? FSharpMemberOrFunctionOrValue as mem -> + match s.Symbol with + | :? FSharpMemberOrFunctionOrValue as mem -> if s.Symbol.DisplayName.Contains "Incomplete" then - yield s.Symbol.DisplayName, tups s.RangeAlternate, + yield s.Symbol.DisplayName, tups s.Range, ("full", mem.FullType |> FSharpType.Prettify |> fun p -> p.Format(s.DisplayContext)), ("params", mem.CurriedParameterGroups |> FSharpType.Prettify |> Seq.toList |> List.map (Seq.toList >> List.map (fun p -> p.Type.Format(s.DisplayContext)))), - ("return", mem.ReturnParameter |> FSharpType.Prettify |> fun p -> p.Type.Format(s.DisplayContext)) + ("return", mem.ReturnParameter |> FSharpType.Prettify |> fun p -> p.Type.Format(s.DisplayContext)) | _ -> () ] typeTextOfAllSymbolUses |> shouldEqual [("functionWithIncompleteSignature", ((4, 4), (4, 35)), @@ -4975,7 +4983,7 @@ let ``Test project39 all symbols`` () = //-------------------------------------------- -module internal Project40 = +module internal Project40 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4986,28 +4994,28 @@ module M let f (x: option<_>) = x.IsSome, x.IsNone -[] -type C = - | A +[] +type C = + | A | B of string member x.IsItAnA = match x with A -> true | B _ -> false member x.IsItAnAMethod() = match x with A -> true | B _ -> false -let g (x: C) = x.IsItAnA,x.IsItAnAMethod() +let g (x: C) = x.IsItAnA,x.IsItAnAMethod() """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) let cleanFileName a = if a = fileName1 then "file1" else "??" [] -let ``Test Project40 all symbols`` () = +let ``Test Project40 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project40.options) |> Async.RunSynchronously - let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() - let allSymbolUsesInfo = [ for s in allSymbolUses -> s.Symbol.DisplayName, tups s.RangeAlternate, attribsOfSymbol s.Symbol ] + let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() + let allSymbolUsesInfo = [ for s in allSymbolUses -> s.Symbol.DisplayName, tups s.Range, attribsOfSymbol s.Symbol ] allSymbolUsesInfo |> shouldEqual [("option", ((4, 10), (4, 16)), ["abbrev"]); ("x", ((4, 7), (4, 8)), []); ("x", ((4, 23), (4, 24)), []); @@ -5039,7 +5047,7 @@ let ``Test Project40 all symbols`` () = //-------------------------------------------- -module internal Project41 = +module internal Project41 = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") // We need to us a stable name to keep the hashes stable @@ -5066,24 +5074,24 @@ module M let f3 (v : {| X: {| X : int; Y : string |} |}) = v.X.X """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) let cleanFileName a = if a = fileName1 then "file1" else "??" [] -let ``Test project41 all symbols`` () = +let ``Test project41 all symbols`` () = let wholeProjectResults = checker.ParseAndCheckProject(Project41.options) |> Async.RunSynchronously - let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() - let allSymbolUsesInfo = + let allSymbolUses = wholeProjectResults.GetAllUsesOfAllSymbols() + let allSymbolUsesInfo = [ for s in allSymbolUses do - let pos = - match s.Symbol.DeclarationLocation with + let pos = + match s.Symbol.DeclarationLocation with | Some r when r.FileName = Project41.fileName1 -> r.StartLine, r.StartColumn | _ -> (0,0) - yield (s.Symbol.DisplayName, tups s.RangeAlternate, attribsOfSymbol s.Symbol, pos) ] + yield (s.Symbol.DisplayName, tups s.Range, attribsOfSymbol s.Symbol, pos) ] allSymbolUsesInfo |> shouldEqual [("X", ((4, 19), (4, 20)), ["field"; "anon(0, [//<>f__AnonymousType1416859829`1]X)"], (4, 19)); @@ -5132,15 +5140,61 @@ let ``Test project41 all symbols`` () = ("M", ((2, 7), (2, 8)), ["module"], (2, 7))] -module internal ProjectBig = +module internal Project42 = + + let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") + let fileName2 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") + // We need to us a stable name to keep the hashes stable + let base2 = Path.Combine(Path.GetDirectoryName(Path.GetTempFileName()), "stabletmp.tmp") + let dllName = Path.ChangeExtension(base2, ".dll") + let projFileName = Path.ChangeExtension(base2, ".fsproj") + let fileSource1 = """ +module File1 + +let test() = () + """ + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) + let fileSource2 = """ +module File2 + +open File1 + +let test2() = test() + """ + FileSystem.OpenFileForWriteShim(fileName2).Write(fileSource2) + let fileNames = [fileName1;fileName2] + let args = mkProjectCommandLineArgs (dllName, fileNames) + let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) + +[] +let ``Test project42 to ensure cached checked results are invalidated`` () = + let text2 = SourceText.ofString(FileSystem.OpenFileForReadShim(Project42.fileName2).ReadAllText()) + let checkedFile2 = checker.ParseAndCheckFileInProject(Project42.fileName2, text2.GetHashCode(), text2, Project42.options) |> Async.RunSynchronously + match checkedFile2 with + | _, FSharpCheckFileAnswer.Succeeded(checkedFile2Results) -> + Assert.IsEmpty(checkedFile2Results.Diagnostics) + FileSystem.OpenFileForWriteShim(Project42.fileName1).Write("""module File1""") + try + let checkedFile2Again = checker.ParseAndCheckFileInProject(Project42.fileName2, text2.GetHashCode(), text2, Project42.options) |> Async.RunSynchronously + match checkedFile2Again with + | _, FSharpCheckFileAnswer.Succeeded(checkedFile2AgainResults) -> + Assert.IsNotEmpty(checkedFile2AgainResults.Diagnostics) // this should contain errors as File1 does not contain the function `test()` + | _ -> + failwith "Project42 failed to check." + finally + FileSystem.OpenFileForWriteShim(Project42.fileName1).Write(Project42.fileSource1) // Revert to the original state of the file + | _ -> + failwith "Project42 failed to check." + +module internal ProjectBig = let fileNamesI = [ for i in 1 .. 10 -> (i, Path.ChangeExtension(Path.GetTempFileName(), ".fs")) ] let base2 = Path.GetTempFileName() let dllName = Path.ChangeExtension(base2, ".dll") let projFileName = Path.ChangeExtension(base2, ".fsproj") let fileSources = [ for (i,f) in fileNamesI -> (f, "module M" + string i) ] - for (f,text) in fileSources do File.WriteAllText(f, text) - let fileSources2 = [ for (i,f) in fileSources -> FSharp.Compiler.Text.SourceText.ofString f ] + for (f,text) in fileSources do FileSystem.OpenFileForWriteShim(f).Write(text) + let fileSources2 = [ for (i,f) in fileSources -> SourceText.ofString f ] let fileNames = [ for (_,f) in fileNamesI -> f ] let args = mkProjectCommandLineArgs (dllName, fileNames) @@ -5151,7 +5205,7 @@ module internal ProjectBig = [] // Simplified repro for https://github.com/Microsoft/visualfsharp/issues/2679 -let ``add files with same name from different folders`` () = +let ``add files with same name from different folders`` () = let fileNames = [ __SOURCE_DIRECTORY__ + "/data/samename/folder1/a.fs" __SOURCE_DIRECTORY__ + "/data/samename/folder2/a.fs" ] @@ -5160,15 +5214,15 @@ let ``add files with same name from different folders`` () = let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) let wholeProjectResults = checker.ParseAndCheckProject(options) |> Async.RunSynchronously let errors = - wholeProjectResults.Errors - |> Array.filter (fun x -> x.Severity = FSharpErrorSeverity.Error) + wholeProjectResults.Diagnostics + |> Array.filter (fun x -> x.Severity = FSharpDiagnosticSeverity.Error) if errors.Length > 0 then printfn "add files with same name from different folders" for err in errors do printfn "ERROR: %s" err.Message shouldEqual 0 errors.Length -module internal ProjectStructUnions = +module internal ProjectStructUnions = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -5189,14 +5243,15 @@ let foo (a: Foo): bool = | _ -> false """ - File.WriteAllText(fileName1, fileSource1) + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) [] let ``Test typed AST for struct unions`` () = // See https://github.com/fsharp/FSharp.Compiler.Service/issues/756 - let wholeProjectResults = Project36.keepAssemblyContentsChecker.ParseAndCheckProject(ProjectStructUnions.options) |> Async.RunSynchronously + let keepAssemblyContentsChecker = FSharpChecker.Create(keepAssemblyContents=true) + let wholeProjectResults = keepAssemblyContentsChecker.ParseAndCheckProject(ProjectStructUnions.options) |> Async.RunSynchronously let declarations = let checkedFile = wholeProjectResults.AssemblyContents.ImplementationFiles.[0] match checkedFile.Declarations.[0] with @@ -5208,13 +5263,13 @@ let ``Test typed AST for struct unions`` () = // See https://github.com/fsharp/F | FSharpImplementationFileDeclaration.InitAction e -> e | _ -> failwith "unexpected declaration" match getExpr (declarations.Length - 1) with - | BasicPatterns.IfThenElse(BasicPatterns.UnionCaseTest(BasicPatterns.AddressOf(BasicPatterns.UnionCaseGet _),_,uci), - BasicPatterns.Const(trueValue, _), BasicPatterns.Const(falseValue, _)) + | IfThenElse(UnionCaseTest(AddressOf(UnionCaseGet _),_,uci), + Const(trueValue, _), Const(falseValue, _)) when uci.Name = "Ok" && obj.Equals(trueValue, true) && obj.Equals(falseValue, false) -> true | _ -> failwith "unexpected expression" |> shouldEqual true -module internal ProjectLineDirectives = +module internal ProjectLineDirectives = let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -5226,8 +5281,8 @@ module M # 10 "Test.fsy" let x = (1 = 3.0) """ - let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text - File.WriteAllText(fileName1, fileSource1Text) + let fileSource1 = SourceText.ofString fileSource1Text + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1Text) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let options = checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) @@ -5237,22 +5292,22 @@ let ``Test line directives in foreground analysis`` () = // see https://github.c // In background analysis and normal compiler checking, the errors are reported w.r.t. the line directives let wholeProjectResults = checker.ParseAndCheckProject(ProjectLineDirectives.options) |> Async.RunSynchronously - for e in wholeProjectResults.Errors do + for e in wholeProjectResults.Diagnostics do printfn "ProjectLineDirectives wholeProjectResults error file: <<<%s>>>" e.Range.FileName - [ for e in wholeProjectResults.Errors -> e.Range.StartLine, e.Range.EndLine, e.Range.FileName ] |> shouldEqual [(10, 10, "Test.fsy")] + [ for e in wholeProjectResults.Diagnostics -> e.Range.StartLine, e.Range.EndLine, e.Range.FileName ] |> shouldEqual [(10, 10, "Test.fsy")] // In foreground analysis routines, used by visual editing tools, the errors are reported w.r.t. the source // file, which is assumed to be in the editor, not the other files referred to by line directives. - let checkResults1 = - checker.ParseAndCheckFileInProject(ProjectLineDirectives.fileName1, 0, ProjectLineDirectives.fileSource1, ProjectLineDirectives.options) + let checkResults1 = + checker.ParseAndCheckFileInProject(ProjectLineDirectives.fileName1, 0, ProjectLineDirectives.fileSource1, ProjectLineDirectives.options) |> Async.RunSynchronously |> function (_,FSharpCheckFileAnswer.Succeeded x) -> x | _ -> failwith "unexpected aborted" - for e in checkResults1.Errors do + for e in checkResults1.Diagnostics do printfn "ProjectLineDirectives checkResults1 error file: <<<%s>>>" e.Range.FileName - [ for e in checkResults1.Errors -> e.Range.StartLine, e.Range.EndLine, e.Range.FileName ] |> shouldEqual [(5, 5, ProjectLineDirectives.fileName1)] + [ for e in checkResults1.Diagnostics -> e.Range.StartLine, e.Range.EndLine, e.Range.FileName ] |> shouldEqual [(5, 5, ProjectLineDirectives.fileName1)] //------------------------------------------------------ @@ -5267,17 +5322,17 @@ let ``ParseAndCheckFileResults contains ImplFile list if FSharpChecker is create type A(i:int) = member x.Value = i """ - let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text - File.WriteAllText(fileName1, fileSource1Text) + let fileSource1 = SourceText.ofString fileSource1Text + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1Text) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let keepAssemblyContentsChecker = FSharpChecker.Create(keepAssemblyContents=true) let options = keepAssemblyContentsChecker.GetProjectOptionsFromCommandLineArgs (projFileName, args) - - let fileCheckResults = + + let fileCheckResults = keepAssemblyContentsChecker.ParseAndCheckFileInProject(fileName1, 0, fileSource1, options) |> Async.RunSynchronously - |> function + |> function | _, FSharpCheckFileAnswer.Succeeded(res) -> res | _ -> failwithf "Parsing aborted unexpectedly..." @@ -5309,7 +5364,7 @@ let ``#4030, Incremental builder creation warnings`` (args, errorSeverities) = let fileName, options = mkTestFileAndOptions source args let _, checkResults = parseAndCheckFile fileName source options - checkResults.Errors |> Array.map (fun e -> e.Severity = FSharpErrorSeverity.Error) |> shouldEqual errorSeverities + checkResults.Diagnostics |> Array.map (fun e -> e.Severity = FSharpDiagnosticSeverity.Error) |> shouldEqual errorSeverities //------------------------------------------------------ @@ -5330,19 +5385,19 @@ open FSharp.Control // unused open FSharp.Data // unused open System.Globalization // unused -module SomeUnusedModule = +module SomeUnusedModule = let f x = x -module SomeUsedModuleContainingFunction = +module SomeUsedModuleContainingFunction = let g x = x -module SomeUsedModuleContainingActivePattern = +module SomeUsedModuleContainingActivePattern = let (|ActivePattern|) x = x -module SomeUsedModuleContainingExtensionMember = +module SomeUsedModuleContainingExtensionMember = type System.Int32 with member x.Q = 1 -module SomeUsedModuleContainingUnion = +module SomeUsedModuleContainingUnion = type Q = A | B open SomeUnusedModule @@ -5358,28 +5413,28 @@ type UseTheThings(i:int) = member x.UseSomeUsedModuleContainingExtensionMember() = (3).Q member x.UseSomeUsedModuleContainingUnion() = A """ - let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text - File.WriteAllText(fileName1, fileSource1Text) + let fileSource1 = SourceText.ofString fileSource1Text + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1Text) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let keepAssemblyContentsChecker = FSharpChecker.Create(keepAssemblyContents=true) let options = keepAssemblyContentsChecker.GetProjectOptionsFromCommandLineArgs (projFileName, args) - - let fileCheckResults = + + let fileCheckResults = keepAssemblyContentsChecker.ParseAndCheckFileInProject(fileName1, 0, fileSource1, options) |> Async.RunSynchronously - |> function + |> function | _, FSharpCheckFileAnswer.Succeeded(res) -> res | _ -> failwithf "Parsing aborted unexpectedly..." - //let symbolUses = fileCheckResults.GetAllUsesOfAllSymbolsInFile() |> Async.RunSynchronously |> Array.indexed + //let symbolUses = fileCheckResults.GetAllUsesOfAllSymbolsInFile() |> Async.RunSynchronously |> Array.indexed // Fragments used to check hash codes: //(snd symbolUses.[42]).Symbol.IsEffectivelySameAs((snd symbolUses.[37]).Symbol) //(snd symbolUses.[42]).Symbol.GetEffectivelySameAsHash() //(snd symbolUses.[37]).Symbol.GetEffectivelySameAsHash() - let lines = File.ReadAllLines(fileName1) + let lines = FileSystem.OpenFileForReadShim(fileName1).ReadAllLines() let unusedOpens = UnusedOpens.getUnusedOpens (fileCheckResults, (fun i -> lines.[i-1])) |> Async.RunSynchronously let unusedOpensData = [ for uo in unusedOpens -> tups uo, lines.[uo.StartLine-1] ] - let expected = + let expected = [(((4, 5), (4, 23)), "open System.Collections // unused"); (((6, 5), (6, 19)), "open FSharp.Control // unused"); (((7, 5), (7, 16)), "open FSharp.Data // unused"); @@ -5403,19 +5458,19 @@ open FSharp.Control // unused open FSharp.Data // unused open System.Globalization // unused -module SomeUnusedModule = +module SomeUnusedModule = let f x = x -module SomeUsedModuleContainingFunction = +module SomeUsedModuleContainingFunction = let g x = x -module SomeUsedModuleContainingActivePattern = +module SomeUsedModuleContainingActivePattern = let (|ActivePattern|) x = x -module SomeUsedModuleContainingExtensionMember = +module SomeUsedModuleContainingExtensionMember = type System.Int32 with member x.Q = 1 -module SomeUsedModuleContainingUnion = +module SomeUsedModuleContainingUnion = type Q = A | B open SomeUnusedModule @@ -5431,28 +5486,28 @@ type UseTheThings(i:int) = member x.UseSomeUsedModuleContainingExtensionMember() = (3).Q member x.UseSomeUsedModuleContainingUnion() = A """ - let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text - File.WriteAllText(fileName1, fileSource1Text) + let fileSource1 = SourceText.ofString fileSource1Text + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1Text) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let keepAssemblyContentsChecker = FSharpChecker.Create(keepAssemblyContents=true) let options = keepAssemblyContentsChecker.GetProjectOptionsFromCommandLineArgs (projFileName, args) - - let fileCheckResults = + + let fileCheckResults = keepAssemblyContentsChecker.ParseAndCheckFileInProject(fileName1, 0, fileSource1, options) |> Async.RunSynchronously - |> function + |> function | _, FSharpCheckFileAnswer.Succeeded(res) -> res | _ -> failwithf "Parsing aborted unexpectedly..." - //let symbolUses = fileCheckResults.GetAllUsesOfAllSymbolsInFile() |> Async.RunSynchronously |> Array.indexed + //let symbolUses = fileCheckResults.GetAllUsesOfAllSymbolsInFile() |> Async.RunSynchronously |> Array.indexed // Fragments used to check hash codes: //(snd symbolUses.[42]).Symbol.IsEffectivelySameAs((snd symbolUses.[37]).Symbol) //(snd symbolUses.[42]).Symbol.GetEffectivelySameAsHash() //(snd symbolUses.[37]).Symbol.GetEffectivelySameAsHash() - let lines = File.ReadAllLines(fileName1) + let lines = FileSystem.OpenFileForReadShim(fileName1).ReadAllLines() let unusedOpens = UnusedOpens.getUnusedOpens (fileCheckResults, (fun i -> lines.[i-1])) |> Async.RunSynchronously let unusedOpensData = [ for uo in unusedOpens -> tups uo, lines.[uo.StartLine-1] ] - let expected = + let expected = [(((4, 5), (4, 23)), "open System.Collections // unused"); (((6, 5), (6, 19)), "open FSharp.Control // unused"); (((7, 5), (7, 16)), "open FSharp.Data // unused"); @@ -5475,20 +5530,20 @@ open FSharp.Data // unused open System.Globalization // unused [] -module Helpers = - module SomeUnusedModule = +module Helpers = + module SomeUnusedModule = let f x = x - module SomeUsedModuleContainingFunction = + module SomeUsedModuleContainingFunction = let g x = x - module SomeUsedModuleContainingActivePattern = + module SomeUsedModuleContainingActivePattern = let (|ActivePattern|) x = x - module SomeUsedModuleContainingExtensionMember = + module SomeUsedModuleContainingExtensionMember = type System.Int32 with member x.Q = 1 - module SomeUsedModuleContainingUnion = + module SomeUsedModuleContainingUnion = type Q = A | B open SomeUnusedModule @@ -5512,23 +5567,23 @@ module M2 = let foo x = x.Field """ - let fileSource1 = FSharp.Compiler.Text.SourceText.ofString fileSource1Text - File.WriteAllText(fileName1, fileSource1Text) + let fileSource1 = SourceText.ofString fileSource1Text + FileSystem.OpenFileForWriteShim(fileName1).Write(fileSource1Text) let fileNames = [fileName1] let args = mkProjectCommandLineArgs (dllName, fileNames) let keepAssemblyContentsChecker = FSharpChecker.Create(keepAssemblyContents=true) let options = keepAssemblyContentsChecker.GetProjectOptionsFromCommandLineArgs (projFileName, args) - - let fileCheckResults = + + let fileCheckResults = keepAssemblyContentsChecker.ParseAndCheckFileInProject(fileName1, 0, fileSource1, options) |> Async.RunSynchronously - |> function + |> function | _, FSharpCheckFileAnswer.Succeeded(res) -> res | _ -> failwithf "Parsing aborted unexpectedly..." - let lines = File.ReadAllLines(fileName1) + let lines = FileSystem.OpenFileForReadShim(fileName1).ReadAllLines() let unusedOpens = UnusedOpens.getUnusedOpens (fileCheckResults, (fun i -> lines.[i-1])) |> Async.RunSynchronously let unusedOpensData = [ for uo in unusedOpens -> tups uo, lines.[uo.StartLine-1] ] - let expected = + let expected = [(((2, 5), (2, 23)), "open System.Collections // unused"); (((4, 5), (4, 19)), "open FSharp.Control // unused"); (((5, 5), (5, 16)), "open FSharp.Data // unused"); @@ -5588,3 +5643,32 @@ module Nested = (6, 0), (7, 15) (11, 0), (14, 15) (13, 0), (14, 15) ] + +let checkContentAsScript content = + // can't use the helper function in these tests because `getParseAndCheckResults` doesn't seem to operate in a mode + // that uses the dependency manager (possibly because `useSdkScripts` isn't set/`assumeDotNetFramework` is implicitly + // set). + // because of this we have to do it all manually + let scriptName = "test.fsx" + let tempDir = Path.GetTempPath() + let scriptFullPath = Path.Combine(tempDir, scriptName) + let sourceText = SourceText.ofString content + let projectOptions, _ = checker.GetProjectOptionsFromScript(scriptFullPath, sourceText, useSdkRefs = true, assumeDotNetFramework = false) |> Async.RunSynchronously + let parseOptions, _ = checker.GetParsingOptionsFromProjectOptions projectOptions + let parseResults = checker.ParseFile(scriptFullPath, sourceText, parseOptions) |> Async.RunSynchronously + let checkResults = checker.CheckFileInProject(parseResults, scriptFullPath, 0, sourceText, projectOptions) |> Async.RunSynchronously + match checkResults with + | FSharpCheckFileAnswer.Aborted -> failwith "no check results" + | FSharpCheckFileAnswer.Succeeded r -> r + +[] +let ``References from #r nuget are included in script project options`` () = + let checkResults = checkContentAsScript """ +#r "nuget: Dapper" +""" + let assemblyNames = + checkResults.ProjectContext.GetReferencedAssemblies() + |> Seq.choose (fun f -> f.FileName |> Option.map Path.GetFileName) + |> Seq.distinct + printfn "%s" (assemblyNames |> String.concat "\n") + assemblyNames |> should contain "Dapper.dll" diff --git a/tests/service/ScriptOptionsTests.fs b/tests/service/ScriptOptionsTests.fs index 9ceae471bd4..96205ab5734 100644 --- a/tests/service/ScriptOptionsTests.fs +++ b/tests/service/ScriptOptionsTests.fs @@ -10,6 +10,9 @@ module Tests.Service.ScriptOptions open NUnit.Framework open System.IO open FSharp.Compiler.Service.Tests.Common +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.IO +open FSharp.Compiler.Text.Range open FSharp.Compiler.Text // Add additional imports/constructs into this script text to verify that common scenarios @@ -36,22 +39,58 @@ let ``can generate options for different frameworks regardless of execution envi [] [] [] -let ``all default assembly references are system assemblies``(assumeNetFx, useSdk, flags) = - let path = Path.GetTempPath() - let file = Path.GetTempFileName() - let tempFile = Path.Combine(path, file) +let ``all default assembly references are system assemblies``(assumeNetFx, useSdkRefs, flags) = + let tempFile = Path.GetTempFileName() + ".fsx" let (options, errors) = - checker.GetProjectOptionsFromScript(tempFile, SourceText.ofString scriptSource, assumeDotNetFramework = assumeNetFx, useSdkRefs = useSdk, otherFlags = flags) + checker.GetProjectOptionsFromScript(tempFile, SourceText.ofString scriptSource, assumeDotNetFramework = assumeNetFx, useSdkRefs = useSdkRefs, otherFlags = flags) |> Async.RunSynchronously match errors with | [] -> () - | errors -> failwithf "Error while parsing script with assumeDotNetFramework:%b, useSdkRefs:%b, and otherFlags:%A:\n%A" assumeNetFx useSdk flags errors - for r in options.OtherOptions do - if r.StartsWith("-r:") then + | errors -> failwithf "Error while parsing script with assumeNetFx:%b, useSdkRefs:%b, and otherFlags:%A:\n%A" assumeNetFx useSdkRefs flags errors + for r in options.OtherOptions do + if r.StartsWith("-r:") then let ref = Path.GetFullPath(r.[3..]) let baseName = Path.GetFileNameWithoutExtension(ref) - if not (FSharp.Compiler.DotNetFrameworkDependencies.systemAssemblies.Contains(baseName)) then + let projectDir = System.Environment.CurrentDirectory + if not (FSharp.Compiler.FxResolver(assumeNetFx, projectDir, rangeForErrors=range0, useSdkRefs=useSdkRefs, isInteractive=false, sdkDirOverride=None).GetSystemAssemblies().Contains(baseName)) then printfn "Failing, printing options from GetProjectOptionsFromScript..." for opt in options.OtherOptions do printfn "option: %s" opt - failwithf "expected FSharp.Compiler.DotNetFrameworkDependencies.systemAssemblies to contain '%s' because '%s' is a default reference for a script, (assumeNetFx, useSdk, flags) = %A" baseName ref (assumeNetFx, useSdk, flags) \ No newline at end of file + failwithf "expected FSharp.Compiler.DotNetFrameworkDependencies.systemAssemblies to contain '%s' because '%s' is a default reference for a script, (assumeNetFx, useSdk, flags) = %A" baseName ref (assumeNetFx, useSdkRefs, flags) + +// This test atempts to use a bad SDK number 666.666.666 +// +// It's disabled because on CI server the SDK is still being resolved to 5.0.101 by `dotnet --version`. +// +// This must be because of some setting in the CI build scripts - e.g. an environment variable +// that allows SDK resolution to be overriden. I've tried to track this down by looking through +// https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet resolution rules +// and the F# and CI settings but can't find the setting that is causing this. +// +// Because of this the test has been manually verified by running locally. +//[] +let ``sdk dir with dodgy global json gives warning``() = + let tempFile = Path.GetTempFileName() + ".fsx" + let tempPath = Path.GetDirectoryName(tempFile) + let globalJsonPath = Path.Combine(tempPath, "global.json") + FileSystem.OpenFileForWriteShim(globalJsonPath).Write("""{ "sdk": { "version": "666.666.666" } }""") + let (options, errors) = + checker.GetProjectOptionsFromScript(tempFile, SourceText.ofString scriptSource, assumeDotNetFramework = false, useSdkRefs = true, otherFlags = [| |]) + |> Async.RunSynchronously + FileSystem.FileDeleteShim(globalJsonPath) + match errors with + | [] -> + printfn "Failure!" + printfn "tempPath = %A" tempPath + printfn "options = %A" options + let fxResolver = FSharp.Compiler.FxResolver(false, tempPath, rangeForErrors=range0, useSdkRefs=true, isInteractive=false, sdkDirOverride=None) + let result = fxResolver.TryGetDesiredDotNetSdkVersionForDirectory() + printfn "sdkVersion = %A" result + + printfn "options = %A" options + failwith "Expected error while parsing script" + | errors -> + for error in errors do + // {C:\Users\Administrator\AppData\Local\Temp\tmp6F0F.tmp.fsx (0,1)-(0,1) The .NET SDK for this script could not be determined. If the script is in a directory using a 'global.json' ensure the relevant .NET SDK is installed. The output from 'C:\Program Files\dotnet\dotnet.exe --version' in the script directory was: ' 2.1.300 [C:\Program Files\dotnet\sdk] + Assert.AreEqual(3384, error.ErrorNumber) + Assert.AreEqual(tempFile, error.FileName) diff --git a/tests/service/ServiceUntypedParseTests.fs b/tests/service/ServiceUntypedParseTests.fs index 472fc7e2e7f..c609d8d488a 100644 --- a/tests/service/ServiceUntypedParseTests.fs +++ b/tests/service/ServiceUntypedParseTests.fs @@ -9,10 +9,14 @@ module Tests.Service.ServiceUntypedParseTests open System.IO open FsUnit -open FSharp.Compiler.Range -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.EditorServices +open FSharp.Compiler.IO open FSharp.Compiler.Service.Tests.Common -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Position open NUnit.Framework let [] private Marker = "(* marker *)" @@ -39,14 +43,12 @@ let private (=>) (source: string) (expected: CompletionContext option) = match markerPos with | None -> failwithf "Marker '%s' was not found in the source code" Marker | Some markerPos -> - match parseSourceCode("C:\\test.fs", source) with - | None -> failwith "No parse tree" - | Some parseTree -> - let actual = UntypedParseImpl.TryGetCompletionContext(markerPos, parseTree, lines.[Line.toZ markerPos.Line]) - try Assert.AreEqual(expected, actual) - with e -> - printfn "ParseTree: %A" parseTree - reraise() + let parseTree = parseSourceCode("C:\\test.fs", source) + let actual = ParsedInput.TryGetCompletionContext(markerPos, parseTree, lines.[Line.toZ markerPos.Line]) + try Assert.AreEqual(expected, actual) + with e -> + printfn "ParseTree: %A" parseTree + reraise() module AttributeCompletion = [] @@ -133,7 +135,7 @@ let foo8 = () let (SynModuleOrNamespace (decls = decls)) = parseSourceCodeAndGetModule source decls |> List.map (fun decl -> match decl with - | SynModuleDecl.Let (_, [Binding (attributes = attributeLists)], _) -> + | SynModuleDecl.Let (_, [SynBinding (attributes = attributeLists)], _) -> attributeLists |> List.map (fun list -> list.Attributes.Length, getRangeCoords list.Range) | _ -> failwith "Could not get binding") |> shouldEqual @@ -198,7 +200,7 @@ module TypeMemberRanges = let getTypeMemberRange source = let (SynModuleOrNamespace (decls = decls)) = parseSourceCodeAndGetModule source match decls with - | [ SynModuleDecl.Types ([ TypeDefn (_, SynTypeDefnRepr.ObjectModel (_, memberDecls, _), _, _) ], _) ] -> + | [ SynModuleDecl.Types ([ SynTypeDefn (_, SynTypeDefnRepr.ObjectModel (_, memberDecls, _), _, _, _) ], _) ] -> memberDecls |> List.map (fun memberDecl -> getRangeCoords memberDecl.Range) | _ -> failwith "Could not get member" @@ -670,6 +672,46 @@ add2 x y let parseFileResults, _ = getParseAndCheckResults source Assert.True(parseFileResults.IsPosContainedInApplication (mkPos 3 6), "Pos should be in application") + [] + let ``IsPosContainedInApplication - inside computation expression - no``() = + let source = """ +async { + sqrt +} +""" + let parseFileResults, _ = getParseAndCheckResults source + Assert.False(parseFileResults.IsPosContainedInApplication (mkPos 2 5), "Pos should not be in application") + + [] + let ``IsPosContainedInApplication - inside CE return - no``() = + let source = """ +async { + return sqrt +} +""" + let parseFileResults, _ = getParseAndCheckResults source + Assert.False(parseFileResults.IsPosContainedInApplication (mkPos 2 5), "Pos should not be in application") + + [] + let ``IsPosContainedInApplication - inside CE - yes``() = + let source = """ +let myAdd x y = x + y +async { + return myAdd 1 +} + """ + let parseFileResults, _ = getParseAndCheckResults source + Assert.False(parseFileResults.IsPosContainedInApplication (mkPos 3 18), "Pos should not be in application") + + [] + let ``IsPosContainedInApplication - inside type application``() = + let source = """ +let f<'x> x = () +f + """ + let parseFileResults, _ = getParseAndCheckResults source + Assert.True(parseFileResults.IsPosContainedInApplication (mkPos 3 6), "A type application is an application, expected True.") + [] let ``TryRangeOfFunctionOrMethodBeingApplied - no application``() = let source = """ @@ -786,6 +828,184 @@ add2 1 2 |> tups |> shouldEqual ((3, 17), (3, 18)) + [] + let ``TryRangeOfFunctionOrMethodBeingApplied - inside CE``() = + let source = """ +let myAdd x y = x + y +async { + return myAdd 1 +} +""" + let parseFileResults, _ = getParseAndCheckResults source + let res = parseFileResults.TryRangeOfFunctionOrMethodBeingApplied (mkPos 4 18) + match res with + | None -> Assert.Fail("Expected 'myAdd' but got nothing") + | Some range -> + range + |> tups + |> shouldEqual ((4, 11), (4, 16)) + + [] + let ``TryRangeOfFunctionOrMethodBeingApplied - inside lambda - binding``() = + let source = """ +let add n1 n2 = n1 + n2 +let lst = [1; 2; 3] +let mapped = + lst |> List.map (fun n -> + let sum = add + n.ToString() + ) +""" + let parseFileResults, _ = getParseAndCheckResults source + let res = parseFileResults.TryRangeOfFunctionOrMethodBeingApplied (mkPos 6 21) + match res with + | None -> Assert.Fail("Expected 'add' but got nothing") + | Some range -> + range + |> tups + |> shouldEqual ((6, 18), (6, 21)) + + [] + let ``TryRangeOfFunctionOrMethodBeingApplied - inside lambda - if expression``() = + let source = """ +let add n1 n2 = n1 + n2 +let lst = [1; 2; 3] +let mapped = + lst |> List.map (fun n -> + if true then + add + else + match add 1 2 with + | 0 when 0 = 0 -> add 1 2 + | _ -> add 1 2 + ) +""" + let parseFileResults, _ = getParseAndCheckResults source + let res = parseFileResults.TryRangeOfFunctionOrMethodBeingApplied (mkPos 7 15) + match res with + | None -> Assert.Fail("Expected 'add' but got nothing") + | Some range -> + range + |> tups + |> shouldEqual ((7, 12), (7, 15)) + + [] + let ``TryRangeOfFunctionOrMethodBeingApplied - inside lambda - match expression``() = + let source = """ +let add n1 n2 = n1 + n2 +let lst = [1; 2; 3] +let mapped = + lst |> List.map (fun n -> + if true then + add + else + match add 1 2 with + | 0 when 0 = 0 -> add 1 2 + | _ -> add 1 2 + ) +""" + let parseFileResults, _ = getParseAndCheckResults source + let res = parseFileResults.TryRangeOfFunctionOrMethodBeingApplied (mkPos 7 15) + match res with + | None -> Assert.Fail("Expected 'add' but got nothing") + | Some range -> + range + |> tups + |> shouldEqual ((7, 12), (7, 15)) + + [] + let ``TryRangeOfFunctionOrMethodBeingApplied - inside lambda - match expr``() = + let source = """ +let add n1 n2 = n1 + n2 +let lst = [1; 2; 3] +let mapped = + lst |> List.map (fun n -> + if true then + add + else + match add with + | 0 when 0 = 0 -> add 1 2 + | _ -> add 1 2 + ) +""" + let parseFileResults, _ = getParseAndCheckResults source + let res = parseFileResults.TryRangeOfFunctionOrMethodBeingApplied (mkPos 9 21) + match res with + | None -> Assert.Fail("Expected 'add' but got nothing") + | Some range -> + range + |> tups + |> shouldEqual ((9, 18), (9, 21)) + + [] + let ``TryRangeOfFunctionOrMethodBeingApplied - inside lambda - match case``() = + let source = """ +let add n1 n2 = n1 + n2 +let lst = [1; 2; 3] +let mapped = + lst |> List.map (fun n -> + if true then + add + else + match add 1 2 with + | 0 when 0 = 0 -> add 1 2 + | _ -> add + ) +""" + let parseFileResults, _ = getParseAndCheckResults source + let res = parseFileResults.TryRangeOfFunctionOrMethodBeingApplied (mkPos 11 22) + match res with + | None -> Assert.Fail("Expected 'add' but got nothing") + | Some range -> + range + |> tups + |> shouldEqual ((11, 19), (11, 22)) + + [] + let ``TryRangeOfFunctionOrMethodBeingApplied - inside method call``() = + let source = """ +type C() = static member Yeet(x, y, z) = () +C.Yeet(1, 2, sqrt) +""" + let parseFileResults, _ = getParseAndCheckResults source + let res = parseFileResults.TryRangeOfFunctionOrMethodBeingApplied (mkPos 3 17) + match res with + | None -> Assert.Fail("Expected 'sqrt' but got nothing") + | Some range -> + range + |> tups + |> shouldEqual ((3, 13), (3, 17)) + + [] + let ``TryRangeOfFunctionOrMethodBeingApplied - inside method call - parenthesized lambda``() = + let source = """ +type C() = static member Yeet(x, y, z) = () +C.Yeet(1, 2, (fun x -> sqrt)) +""" + let parseFileResults, _ = getParseAndCheckResults source + let res = parseFileResults.TryRangeOfFunctionOrMethodBeingApplied (mkPos 3 27) + match res with + | None -> Assert.Fail("Expected 'sqrt' but got nothing") + | Some range -> + range + |> tups + |> shouldEqual ((3, 23), (3, 27)) + + [] + let ``TryRangeOfFunctionOrMethodBeingApplied - generic-typed app``() = + let source = """ +let f<'x> x = () +f +""" + let parseFileResults, _ = getParseAndCheckResults source + let res = parseFileResults.TryRangeOfFunctionOrMethodBeingApplied (mkPos 3 6) + match res with + | None -> Assert.Fail("Expected 'f' but got nothing") + | Some range -> + range + |> tups + |> shouldEqual ((3, 0), (3, 1)) + module PipelinesAndArgs = [] let ``TryIdentOfPipelineContainingPosAndNumArgsApplied - No pipeline, no infix app``() = @@ -848,6 +1068,21 @@ let square x = x * | None -> Assert.Fail("No pipeline found") + [] + let ``TryIdentOfPipelineContainingPosAndNumArgsApplied - none when inside lambda``() = + let source = """ +let add n1 n2 = n1 + n2 +let lst = [1; 2; 3] +let mapped = + lst |> List.map (fun n -> + let sum = add 1 + n.ToString() + ) + """ + let parseFileResults, _ = getParseAndCheckResults source + let res = parseFileResults.TryIdentOfPipelineContainingPosAndNumArgsApplied (mkPos 6 22) + Assert.IsTrue(res.IsNone, "Inside a lambda but counted the pipeline outside of that lambda.") + [] let ``TryRangeOfExprInYieldOrReturn - not contained``() = let source = """ @@ -1001,3 +1236,245 @@ let f x = |> shouldEqual ((6, 8), (6, 9)) | None -> Assert.Fail("Expected to get a range back, but got none.") + +module TypeAnnotations = + [] + let ``IsTypeAnnotationGivenAtPosition - function - no annotation``() = + let source = """ +let f x = () +""" + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 6), "Expected no annotation for argument 'x'") + + [] + let ``IsTypeAnnotationGivenAtPosition - function - single arg annotation``() = + let source = """ +let f (x: int) = () +""" + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 7), "Expected annotation for argument 'x'") + + [] + let ``IsTypeAnnotationGivenAtPosition - function - first arg annotated``() = + let source = """ +let f (x: int) y = () +""" + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 7), "Expected annotation for argument 'x'") + Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 15), "Expected no annotation for argument 'x'") + + [] + let ``IsTypeAnnotationGivenAtPosition - function - second arg annotated``() = + let source = """ +let f x (y: string) = () +""" + let parseFileResults, _ = getParseAndCheckResults source + Assert.False(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 7), "Expected no annotation for argument 'x'") + Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 9), "Expected annotation for argument 'y'") + + [] + let ``IsTypeAnnotationGivenAtPosition - function - all args annotated``() = + let source = """ +let f (x: int) (y: string) = () +""" + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 7), "Expected annotation for argument 'x'") + Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 16), "Expected annotation for argument 'y'") + + [] + let ``IsTypeAnnotationGivenAtPosition - lambda function - all args annotated``() = + let source = """ +let f = fun (x: int) (y: string) -> () +""" + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 13), "Expected a annotation for argument 'x'") + Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 22), "Expected a annotation for argument 'y'") + + [] + let ``IsTypeAnnotationGivenAtPosition - constuctor - arg no annotations``() = + let source = """ +type C(x) = class end +""" + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 7), "Expected no annotation for argument 'x'") + + [] + let ``IsTypeAnnotationGivenAtPosition - constuctor - first arg unannotated``() = + let source = """ +type C(x, y: string) = class end +""" + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 7), "Expected no annotation for argument 'x'") + Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 10), "Expected annotation for argument 'y'") + + [] + let ``IsTypeAnnotationGivenAtPosition - constuctor - second arg unannotated``() = + let source = """ +type C(x: int, y) = class end + """ + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 7), "Expected annotation for argument 'x'") + Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 15), "Expected no annotation for argument 'y'") + + [] + let ``IsTypeAnnotationGivenAtPosition - constuctor - both args annotated``() = + let source = """ +type C(x: int, y: int) = class end + """ + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 7), "Expected annotation for argument 'x'") + Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 15), "Expected annotation for argument 'y'") + + [] + let ``IsTypeAnnotationGivenAtPosition - method - args no unannotions``() = + let source = """ +type C() = + member _.M(x, y) = () +""" + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 15), "Expected no annotation for argument 'x'") + Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 18), "Expected no annotation for argument 'y'") + + [] + let ``IsTypeAnnotationGivenAtPosition - method - first arg annotated``() = + let source = """ +type C() = + member _.M(x: int, y) = () + """ + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 15), "Expected annotation for argument 'x'") + Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 23), "Expected no annotation for argument 'y'") + + [] + let ``IsTypeAnnotationGivenAtPosition - method - second arg annotated``() = + let source = """ +type C() = + member _.M(x, y: int) = () + """ + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 15), "Expected no annotation for argument 'x'") + Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 18), "Expected annotation for argument 'y'") + + [] + let ``IsTypeAnnotationGivenAtPosition - method - both args annotated``() = + let source = """ +type C() = + member _.M(x: int, y: string) = () +""" + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 15), "Expected annotation for argument 'x'") + Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 23), "Expected annotation for argument 'y'") + + [] + let ``IsTypeAnnotationGivenAtPosition - method currying - args no unannotions``() = + let source = """ +type C() = + member _.M x y = () +""" + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 15), "Expected no annotation for argument 'x'") + Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 17), "Expected no annotation for argument 'y'") + + [] + let ``IsTypeAnnotationGivenAtPosition - method currying - first arg annotated``() = + let source = """ +type C() = + member _.M (x: int) y = () + """ + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 16), "Expected annotation for argument 'x'") + Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 24), "Expected no annotation for argument 'y'") + + [] + let ``IsTypeAnnotationGivenAtPosition - method currying - second arg annotated``() = + let source = """ +type C() = + member _.M x (y: int) = () + """ + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 16), "Expected no annotation for argument 'x'") + Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 18), "Expected annotation for argument 'y'") + + [] + let ``IsTypeAnnotationGivenAtPosition - method currying - both args annotated``() = + let source = """ +type C() = + member _.M (x: int) (y: string) = () +""" + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 16), "Expected annotation for argument 'x'") + Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 25), "Expected annotation for argument 'y'") + + [] + let ``IsTypeAnnotationGivenAtPosition - method - only return type annotated``() = + let source = """ +type C() = + member _.M(x): string = "hello" + x +""" + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 3 15), "Expected no annotation for argument 'x'") + + [] + let ``IsTypeAnnotationGivenAtPosition - tuple - no annotations``() = + let source = """ +let (x, y) = (12, "hello") +""" + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 5), "Expected no annotation for value 'x'") + Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 8), "Expected no annotation for value 'y'") + + [] + let ``IsTypeAnnotationGivenAtPosition - tuple - first value annotated``() = + let source = """ +let (x: int, y) = (12, "hello") +""" + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 5), "Expected annotation for argument 'x'") + Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 13), "Expected no annotation for argument 'y'") + + [] + let ``IsTypeAnnotationGivenAtPosition - tuple - second value annotated``() = + let source = """ +let (x, y: string) = (12, "hello") +""" + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsFalse(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 5), "Expected no annotation for argument 'x'") + Assert.IsTrue(parseFileResults.IsTypeAnnotationGivenAtPosition (mkPos 2 8), "Expected annotation for argument 'y'") + +module LambdaRecognition = + [] + let ``IsBindingALambdaAtPosition - recognize a lambda``() = + let source = """ +let f = fun x y -> x + y + """ + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsTrue(parseFileResults.IsBindingALambdaAtPosition (mkPos 2 4), "Expected 'f' to be a lambda expression") + + [] + let ``IsBindingALambdaAtPosition - recognize a nested lambda``() = + let source = """ +let f = + fun x -> + fun y -> + x + y + """ + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsTrue(parseFileResults.IsBindingALambdaAtPosition (mkPos 2 4), "Expected 'f' to be a lambda expression") + + [] + let ``IsBindingALambdaAtPosition - recognize a "partial" lambda``() = + let source = """ +let f x = + fun y -> + x + y + """ + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsTrue(parseFileResults.IsBindingALambdaAtPosition (mkPos 2 4), "Expected 'f' to be a lambda expression") + + [] + let ``IsBindingALambdaAtPosition - not a lambda``() = + let source = """ +let f x y = x + y + """ + let parseFileResults, _ = getParseAndCheckResults source + Assert.IsFalse(parseFileResults.IsBindingALambdaAtPosition (mkPos 2 4), "'f' is not a lambda expression'") diff --git a/tests/service/StructureTests.fs b/tests/service/StructureTests.fs index 8fc1fb6dc7b..cb9f1a6d0c8 100644 --- a/tests/service/StructureTests.fs +++ b/tests/service/StructureTests.fs @@ -9,10 +9,10 @@ module Tests.Service.StructureTests open System.IO open NUnit.Framework -open FSharp.Compiler.Range -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.SourceCodeServices.Structure +open FSharp.Compiler.EditorServices +open FSharp.Compiler.EditorServices.Structure open FSharp.Compiler.Service.Tests.Common +open FSharp.Compiler.Text open System.Text let fileName = Path.Combine (__SOURCE_DIRECTORY__, __SOURCE_FILE__) @@ -42,18 +42,15 @@ let (=>) (source: string) (expectedRanges: (Range * Range) list) = let ast = parseSourceCode(fileName, source) try - match ast with - | Some tree -> - let actual = - Structure.getOutliningRanges lines tree - |> Seq.filter (fun sr -> sr.Range.StartLine <> sr.Range.EndLine) - |> Seq.map (fun sr -> getRange sr.Range, getRange sr.CollapseRange) - |> Seq.sort - |> List.ofSeq - let expected = List.sort expectedRanges - if actual <> expected then - failwithf "Expected %s, but was %s" (formatList expected) (formatList actual) - | None -> failwithf "Expected there to be a parse tree for source:\n%s" source + let actual = + Structure.getOutliningRanges lines ast + |> Seq.filter (fun sr -> sr.Range.StartLine <> sr.Range.EndLine) + |> Seq.map (fun sr -> getRange sr.Range, getRange sr.CollapseRange) + |> Seq.sort + |> List.ofSeq + let expected = List.sort expectedRanges + if actual <> expected then + failwithf "Expected %s, but was %s" (formatList expected) (formatList actual) with _ -> printfn "AST:\n%+A" ast reraise() @@ -654,11 +651,11 @@ type T() = """ => [ (2, 5, 11, 12), (2, 7, 11, 12) (3, 4, 4, 12), (3, 7, 4, 12) - (3, 4, 4, 12), (4, 8, 4, 12) + (3, 4, 4, 12), (3, 10, 4, 12) (6, 4, 7, 12), (6, 16, 7, 12) - (6, 4, 7, 12), (7, 8, 7, 12) + (6, 4, 7, 12), (6, 19, 7, 12) (9, 4, 11, 12), (10, 7, 11, 12) - (9, 4, 11, 12), (11, 8, 11, 12) ] + (9, 4, 11, 12), (10, 10, 11, 12) ] [] diff --git a/tests/service/Symbols.fs b/tests/service/Symbols.fs index 4de3f1ed799..6bffb542035 100644 --- a/tests/service/Symbols.fs +++ b/tests/service/Symbols.fs @@ -8,8 +8,11 @@ module Tests.Service.Symbols #endif open FSharp.Compiler.Service.Tests.Common -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Symbols +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text open FsUnit open NUnit.Framework @@ -40,7 +43,7 @@ match "foo" with checkResults.GetAllUsesOfAllSymbolsInFile() |> Array.ofSeq - |> Array.filter (fun su -> su.RangeAlternate.StartLine = line && su.Symbol :? FSharpActivePatternCase) + |> Array.filter (fun su -> su.Range.StartLine = line && su.Symbol :? FSharpActivePatternCase) |> Array.map (fun su -> su.Symbol :?> FSharpActivePatternCase) [] @@ -74,8 +77,8 @@ extern int private c() |> List.zip decls |> List.iter (fun (actual, expected) -> match actual with - | SynModuleDecl.Let (_, [Binding (accessibility = access)], _) -> access |> should equal expected - | decl -> failwithf "unexpected decl: %O" decl) + | SynModuleDecl.Let (_, [SynBinding (accessibility = access)], _) -> access |> should equal expected + | decl -> Assert.Fail (sprintf "unexpected decl: %O" decl)) [ "a", (true, false, false, false) "b", (true, false, false, false) @@ -86,8 +89,23 @@ extern int private c() let access = mfv.Accessibility (access.IsPublic, access.IsProtected, access.IsInternal, access.IsPrivate) |> should equal expected - | _ -> failwithf "Couldn't get mfv: %s" name) + | _ -> Assert.Fail (sprintf "Couldn't get mfv: %s" name)) + [] + let ``Range of attribute should be included in SynDecl.Let and SynBinding`` () = + let parseResults = + getParseResults + """ +[] +extern int AccessibleChildren()""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Let(false, [ SynBinding(range = mb) ] , ml) + ]) ])) -> + assertRange (2, 0) (3, 31) ml + assertRange (2, 0) (3, 31) mb + | _ -> Assert.Fail "Could not get valid AST" module XmlDocSig = @@ -191,7 +209,7 @@ type E = Ns1.Ns2.T entity.AbbreviatedType.Format(symbolUse.DisplayContext) |> should equal expectedPrintedType - | _ -> failwithf "Couldn't get entity: %s" symbolName) + | _ -> Assert.Fail (sprintf "Couldn't get entity: %s" symbolName)) [] let ``FSharpType.Format can use prefix representations`` () = @@ -209,7 +227,7 @@ let tester: int folks = Cons(1, Nil) | :? FSharpMemberOrFunctionOrValue as v -> v.FullType.Format (symbolUse.DisplayContext.WithPrefixGenericParameters()) |> should equal prefixForm - | _ -> failwithf "Couldn't get member: %s" entity + | _ -> Assert.Fail (sprintf "Couldn't get member: %s" entity) [] let ``FSharpType.Format can use suffix representations`` () = @@ -227,7 +245,7 @@ let tester: Folks = Cons(1, Nil) | :? FSharpMemberOrFunctionOrValue as v -> v.FullType.Format (symbolUse.DisplayContext.WithSuffixGenericParameters()) |> should equal suffixForm - | _ -> failwithf "Couldn't get member: %s" entity + | _ -> Assert.Fail (sprintf "Couldn't get member: %s" entity) [] let ``FSharpType.Format defaults to derived suffix representations`` () = @@ -252,5 +270,959 @@ let tester2: int Group = [] | :? FSharpMemberOrFunctionOrValue as v -> v.FullType.Format (symbolUse.DisplayContext) |> should equal expectedTypeFormat - | _ -> failwithf "Couldn't get member: %s" entityName + | _ -> Assert.Fail (sprintf "Couldn't get member: %s" entityName) ) + + [] + let ``Single SynEnumCase contains range of constant`` () = + let parseResults = + getParseResults + """ +type Foo = One = 0x00000001 +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [ + SynTypeDefn.SynTypeDefn(typeRepr = + SynTypeDefnRepr.Simple(simpleRepr = SynTypeDefnSimpleRepr.Enum(cases = [ SynEnumCase.SynEnumCase(valueRange = r) ])))]) + ]) ])) -> + assertRange (2, 17) (2, 27) r + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Multiple SynEnumCase contains range of constant`` () = + let parseResults = + getParseResults + """ +type Foo = + | One = 0x00000001 + | Two = 2 +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [ + SynTypeDefn.SynTypeDefn(typeRepr = + SynTypeDefnRepr.Simple(simpleRepr = SynTypeDefnSimpleRepr.Enum(cases = [ SynEnumCase.SynEnumCase(valueRange = r1) + SynEnumCase.SynEnumCase(valueRange = r2) ])))]) + ]) ])) -> + assertRange (3, 13) (3, 23) r1 + assertRange (4, 12) (4, 13) r2 + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of attribute should be included in SynTypeDefn`` () = + let parseResults = + getParseResults + """ +[] +type Bar = + class + end""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [t]) as types + ]) ])) -> + assertRange (2, 0) (5, 7) types.Range + assertRange (2, 0) (5, 7) t.Range + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of attributes should be included in recursive types`` () = + let parseResults = + getParseResults + """ +[] +type Foo<'context, 'a> = + | Apply of ApplyCrate<'context, 'a> + +and [] Bar<'context, 'a> = + internal { + Hash : int + Foo : Foo<'a, 'b> + }""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [t1;t2]) as types + ]) ])) -> + assertRange (2, 0) (10, 5) types.Range + assertRange (2, 0) (4, 39) t1.Range + assertRange (6, 4) (10, 5) t2.Range + | _ -> Assert.Fail "Could not get valid AST" + +module SyntaxExpressions = + [] + let ``SynExpr.Do contains the range of the do keyword`` () = + let ast = """let a = + do + foobar + do! + foobarBang +""" + |> getParseResults + + match ast with + | ParsedInput.ImplFile(ParsedImplFileInput(modules = [ + SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Let(bindings = [ + SynBinding(expr = SynExpr.Sequential(expr1 = SynExpr.Do(_, doRange) ; expr2 = SynExpr.DoBang(_, doBangRange))) + ]) + ]) + ])) -> + assertRange (2, 4) (3, 14) doRange + assertRange (4, 4) (5, 18) doBangRange + | _ -> + Assert.Fail "Could not find SynExpr.Do" + +module Strings = + let getBindingExpressionValue (parseResults: ParsedInput) = + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = modules)) -> + modules |> List.tryPick (fun (SynModuleOrNamespace (decls = decls)) -> + decls |> List.tryPick (fun decl -> + match decl with + | SynModuleDecl.Let (bindings = bindings) -> + bindings |> List.tryPick (fun binding -> + match binding with + | SynBinding.SynBinding (_,_,_,_,_,_,_,(SynPat.Named _|SynPat.As(_,SynPat.Named _,_)),_,e,_,_) -> Some e + | _ -> None) + | _ -> None)) + | _ -> None + + let getBindingConstValue parseResults = + match getBindingExpressionValue parseResults with + | Some (SynExpr.Const(c,_)) -> Some c + | _ -> None + + [] + let ``SynConst.String with SynStringKind.Regular`` () = + let parseResults = + getParseResults + """ + let s = "yo" + """ + + match getBindingConstValue parseResults with + | Some (SynConst.String (_, kind, _)) -> kind |> should equal SynStringKind.Regular + | _ -> Assert.Fail "Couldn't find const" + + [] + let ``SynConst.String with SynStringKind.Verbatim`` () = + let parseResults = + getParseResults + """ + let s = @"yo" + """ + + match getBindingConstValue parseResults with + | Some (SynConst.String (_, kind, _)) -> kind |> should equal SynStringKind.Verbatim + | _ -> Assert.Fail "Couldn't find const" + + [] + let ``SynConst.String with SynStringKind.TripleQuote`` () = + let parseResults = + getParseResults + " + let s = \"\"\"yo\"\"\" + " + + match getBindingConstValue parseResults with + | Some (SynConst.String (_, kind, _)) -> kind |> should equal SynStringKind.TripleQuote + | _ -> Assert.Fail "Couldn't find const" + + [] + let ``SynConst.Bytes with SynByteStringKind.Regular`` () = + let parseResults = + getParseResults + """ +let bytes = "yo"B + """ + + match getBindingConstValue parseResults with + | Some (SynConst.Bytes (_, kind, _)) -> kind |> should equal SynByteStringKind.Regular + | _ -> Assert.Fail "Couldn't find const" + + [] + let ``SynConst.Bytes with SynByteStringKind.Verbatim`` () = + let parseResults = + getParseResults + """ +let bytes = @"yo"B + """ + + match getBindingConstValue parseResults with + | Some (SynConst.Bytes (_, kind, _)) -> kind |> should equal SynByteStringKind.Verbatim + | _ -> Assert.Fail "Couldn't find const" + + [] + let ``SynExpr.InterpolatedString with SynStringKind.TripleQuote`` () = + let parseResults = + getParseResults + " + let s = $\"\"\"yo {42}\"\"\" + " + + match getBindingExpressionValue parseResults with + | Some (SynExpr.InterpolatedString(_, kind, _)) -> kind |> should equal SynStringKind.TripleQuote + | _ -> Assert.Fail "Couldn't find const" + + [] + let ``SynExpr.InterpolatedString with SynStringKind.Regular`` () = + let parseResults = + getParseResults + """ + let s = $"yo {42}" + """ + + match getBindingExpressionValue parseResults with + | Some (SynExpr.InterpolatedString(_, kind, _)) -> kind |> should equal SynStringKind.Regular + | _ -> Assert.Fail "Couldn't find const" + + [] + let ``SynExpr.InterpolatedString with SynStringKind.Verbatim`` () = + let parseResults = + getParseResults + """ + let s = $@"Migrate notes of file ""{oldId}"" to new file ""{newId}""." + """ + + match getBindingExpressionValue parseResults with + | Some (SynExpr.InterpolatedString(_, kind, _)) -> kind |> should equal SynStringKind.Verbatim + | _ -> Assert.Fail "Couldn't find const" + +module SynModuleOrNamespace = + [] + let ``DeclaredNamespace range should start at namespace keyword`` () = + let parseResults = + getParseResults + """namespace TypeEquality + +/// A type for witnessing type equality between 'a and 'b +type Teq<'a, 'b> +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(kind = SynModuleOrNamespaceKind.DeclaredNamespace; range = r) ])) -> + assertRange (1, 0) (4, 8) r + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Multiple DeclaredNamespaces should have a range that starts at the namespace keyword`` () = + let parseResults = + getParseResults + """namespace TypeEquality + +/// A type for witnessing type equality between 'a and 'b +type Teq = class end + +namespace Foobar + +let x = 42 +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ + SynModuleOrNamespace.SynModuleOrNamespace(kind = SynModuleOrNamespaceKind.DeclaredNamespace; range = r1) + SynModuleOrNamespace.SynModuleOrNamespace(kind = SynModuleOrNamespaceKind.DeclaredNamespace; range = r2) ])) -> + assertRange (1, 0) (4, 20) r1 + assertRange (6, 0) (8, 10) r2 + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``GlobalNamespace should start at namespace keyword`` () = + let parseResults = + getParseResults + """// foo +// bar +namespace global + +type X = int +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ + SynModuleOrNamespace.SynModuleOrNamespace(kind = SynModuleOrNamespaceKind.GlobalNamespace; range = r) ])) -> + assertRange (3, 0) (5, 12) r + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Module range should start at first attribute`` () = + let parseResults = + getParseResults + """ +[< Foo >] +module Bar + +let s : string = "s" +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ + SynModuleOrNamespace.SynModuleOrNamespace(kind = SynModuleOrNamespaceKind.NamedModule; range = r) ])) -> + assertRange (2, 0) (5, 20) r + | _ -> Assert.Fail "Could not get valid AST" + +module SynConsts = + [] + let ``Measure contains the range of the constant`` () = + let parseResults = + getParseResults + """ +let n = 1.0m +let m = 7.000 +""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Let(bindings = [ SynBinding.SynBinding(expr = SynExpr.Const(SynConst.Measure(constantRange = r1), _)) ]) + SynModuleDecl.Let(bindings = [ SynBinding.SynBinding(expr = SynExpr.Const(SynConst.Measure(constantRange = r2), _)) ]) + ]) ])) -> + assertRange (2, 8) (2, 12) r1 + assertRange (3, 8) (3, 13) r2 + | _ -> Assert.Fail "Could not get valid AST" + +module SynModuleOrNamespaceSig = + [] + let ``Range member returns range of SynModuleOrNamespaceSig`` () = + let parseResults = + getParseResultsOfSignatureFile + """ +namespace Foobar + +type Bar = | Bar of string * int +""" + + match parseResults with + | ParsedInput.SigFile(ParsedSigFileInput(modules = [ + SynModuleOrNamespaceSig(kind = SynModuleOrNamespaceKind.DeclaredNamespace) as singleModule + ])) -> + assertRange (2,0) (4,32) singleModule.Range + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``GlobalNamespace should start at namespace keyword`` () = + let parseResults = + getParseResultsOfSignatureFile + """// foo +// bar +namespace global + +type Bar = | Bar of string * int +""" + + match parseResults with + | ParsedInput.SigFile (ParsedSigFileInput (modules = [ + SynModuleOrNamespaceSig(kind = SynModuleOrNamespaceKind.GlobalNamespace; range = r) ])) -> + assertRange (3, 0) (5, 32) r + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Module range should start at first attribute`` () = + let parseResults = + getParseResultsOfSignatureFile + """ + [< Foo >] +module Bar + +val s : string +""" + + match parseResults with + | ParsedInput.SigFile (ParsedSigFileInput (modules = [ + SynModuleOrNamespaceSig.SynModuleOrNamespaceSig(kind = SynModuleOrNamespaceKind.NamedModule; range = r) ])) -> + assertRange (2, 1) (5, 14) r + | _ -> Assert.Fail "Could not get valid AST" + +module SignatureTypes = + [] + let ``Range of Type should end at end keyword`` () = + let parseResults = + getParseResultsOfSignatureFile + """namespace GreatProjectThing + +type Meh = + class + end + + +// foo""" + + match parseResults with + | ParsedInput.SigFile (ParsedSigFileInput (modules = [ + SynModuleOrNamespaceSig(decls = [SynModuleSigDecl.Types(range = r)]) ])) -> + assertRange (3, 0) (5,11) r + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of SynTypeDefnSig record should end at last member`` () = + let parseResults = + getParseResultsOfSignatureFile + """namespace X +type MyRecord = + { Level: int } + member Score : unit -> int""" + + match parseResults with + | ParsedInput.SigFile (ParsedSigFileInput (modules = [ + SynModuleOrNamespaceSig(decls = [SynModuleSigDecl.Types(types = [SynTypeDefnSig.SynTypeDefnSig(range = r)])]) ])) -> + assertRange (2, 0) (4, 30) r + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of SynTypeDefnSig object model should end at last member`` () = + let parseResults = + getParseResultsOfSignatureFile + """namespace X +type MyRecord = + class + end + member Score : unit -> int""" + + match parseResults with + | ParsedInput.SigFile (ParsedSigFileInput (modules = [ + SynModuleOrNamespaceSig(decls = [SynModuleSigDecl.Types(types = [SynTypeDefnSig.SynTypeDefnSig(range = r)])]) ])) -> + assertRange (2, 0) (5, 30) r + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of SynTypeDefnSig delegate of should start from name`` () = + let parseResults = + getParseResultsOfSignatureFile + """namespace Y +type MyFunction = + delegate of int -> string""" + + match parseResults with + | ParsedInput.SigFile (ParsedSigFileInput (modules = [ + SynModuleOrNamespaceSig(decls = [SynModuleSigDecl.Types(types = [SynTypeDefnSig.SynTypeDefnSig(range = r)])]) ])) -> + assertRange (2, 0) (3, 29) r + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of SynTypeDefnSig simple should end at last val`` () = + let parseResults = + getParseResultsOfSignatureFile + """namespace Z +type SomeCollection with + val LastIndex : int + val SomeThingElse : int -> string""" + + match parseResults with + | ParsedInput.SigFile (ParsedSigFileInput (modules = [ + SynModuleOrNamespaceSig(decls = [SynModuleSigDecl.Types(types = [SynTypeDefnSig.SynTypeDefnSig(range = r)])]) ])) -> + assertRange (2, 0) (4, 37) r + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of attribute should be included in SynTypeDefnSig`` () = + let parseResults = + getParseResultsOfSignatureFile + """ +namespace SomeNamespace + +[] +type MyType = + class + end +""" + + match parseResults with + | ParsedInput.SigFile (ParsedSigFileInput (modules = [ + SynModuleOrNamespaceSig(decls = [SynModuleSigDecl.Types(types = [SynTypeDefnSig.SynTypeDefnSig(range = r)]) as t]) ])) -> + assertRange (4, 0) (7, 7) r + assertRange (4, 0) (7, 7) t.Range + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of attributes should be included in recursive types`` () = + let parseResults = + getParseResultsOfSignatureFile + """ +namespace SomeNamespace + +type Foo = + | Bar + +and [] Bang = + internal + { + LongNameBarBarBarBarBarBarBar: int + } + override GetHashCode : unit -> int +""" + + match parseResults with + | ParsedInput.SigFile (ParsedSigFileInput (modules = [ + SynModuleOrNamespaceSig(decls = [SynModuleSigDecl.Types(types = [ + SynTypeDefnSig.SynTypeDefnSig(range = r1) + SynTypeDefnSig.SynTypeDefnSig(range = r2) + ]) as t]) ])) -> + assertRange (4, 0) (5, 9) r1 + assertRange (7, 4) (12, 42) r2 + assertRange (4, 0) (12, 42) t.Range + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of attribute should be included in SynValSpfn and Member`` () = + let parseResults = + getParseResultsOfSignatureFile + """ +namespace SomeNamespace + +type FooType = + [] // ValSpfn + abstract x : int +""" + + match parseResults with + | ParsedInput.SigFile (ParsedSigFileInput (modules = [ + SynModuleOrNamespaceSig(decls = + [ SynModuleSigDecl.Types(types = [ + SynTypeDefnSig.SynTypeDefnSig(typeRepr = + SynTypeDefnSigRepr.ObjectModel(memberSigs = [ + SynMemberSig.Member(range = mr; memberSig = SynValSig(range = mv)) ])) + ]) ]) ])) -> + assertRange (5, 4) (6, 20) mr + assertRange (5, 4) (6, 20) mv + | _ -> Assert.Fail "Could not get valid AST" + +module SynMatchClause = + [] + let ``Range of single SynMatchClause`` () = + let parseResults = + getParseResults + """ +try + let content = tryDownloadFile url + Some content +with ex -> + Infrastructure.ReportWarning ex + None""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.DoExpr(expr = SynExpr.TryWith(withCases = [ SynMatchClause(range = range) as clause ])) + ]) ])) -> + assertRange (5, 5) (7, 8) range + assertRange (5, 5) (7, 8) clause.Range + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of multiple SynMatchClause`` () = + let parseResults = + getParseResults + """ +try + let content = tryDownloadFile url + Some content +with +| ex -> + Infrastructure.ReportWarning ex + None +| exx -> + None""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.DoExpr(expr = SynExpr.TryWith(withCases = [ SynMatchClause(range = r1) as clause1 + SynMatchClause(range = r2) as clause2 ])) + ]) ])) -> + assertRange (6, 2) (8, 8) r1 + assertRange (6, 2) (8, 8) clause1.Range + + assertRange (9, 2) (10, 8) r2 + assertRange (9, 2) (10, 8) clause2.Range + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of single SynMatchClause followed by bar`` () = + let parseResults = + getParseResults + """ +try + let content = tryDownloadFile url + Some content +with +| ex -> + () +| """ + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.DoExpr(expr = SynExpr.TryWith(withCases = [ SynMatchClause(range = range) as clause ])) + ]) ])) -> + assertRange (6, 2) (7, 6) range + assertRange (6, 2) (7, 6) clause.Range + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of single SynMatchClause with missing body`` () = + let parseResults = + getParseResults + """ +try + let content = tryDownloadFile url + Some content +with +| ex ->""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.DoExpr(expr = SynExpr.TryWith(withCases = [ SynMatchClause(range = range) as clause ])) + ]) ])) -> + assertRange (6, 2) (6, 4) range + assertRange (6, 2) (6, 4) clause.Range + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of single SynMatchClause with missing body and when expr`` () = + let parseResults = + getParseResults + """ +try + let content = tryDownloadFile url + Some content +with +| ex when (isNull ex) ->""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.DoExpr(expr = SynExpr.TryWith(withCases = [ SynMatchClause(range = range) as clause ])) + ]) ])) -> + assertRange (6, 2) (6, 21) range + assertRange (6, 2) (6, 21) clause.Range + | _ -> Assert.Fail "Could not get valid AST" + +module SourceIdentifiers = + [] + let ``__LINE__`` () = + let parseResults = + getParseResults + """ +__LINE__""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.DoExpr(expr = SynExpr.Const(SynConst.SourceIdentifier("__LINE__", "2", range), _)) + ]) ])) -> + assertRange (2, 0) (2, 8) range + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``__SOURCE_DIRECTORY__`` () = + let parseResults = + getParseResults + """ +__SOURCE_DIRECTORY__""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.DoExpr(expr = SynExpr.Const(SynConst.SourceIdentifier("__SOURCE_DIRECTORY__", _, range), _)) + ]) ])) -> + assertRange (2, 0) (2, 20) range + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``__SOURCE_FILE__`` () = + let parseResults = + getParseResults + """ +__SOURCE_FILE__""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.DoExpr(expr = SynExpr.Const(SynConst.SourceIdentifier("__SOURCE_FILE__", _, range), _)) + ]) ])) -> + assertRange (2, 0) (2, 15) range + | _ -> Assert.Fail "Could not get valid AST" + +module NestedModules = + + [] + let ``Range of attribute should be included in SynModuleSigDecl.NestedModule`` () = + let parseResults = + getParseResultsOfSignatureFile + """ +namespace SomeNamespace + +[] +module Nested = + val x : int +""" + + match parseResults with + | ParsedInput.SigFile (ParsedSigFileInput (modules = [ SynModuleOrNamespaceSig(decls = [ + SynModuleSigDecl.NestedModule _ as nm + ]) as sigModule ])) -> + assertRange (4, 0) (6, 15) nm.Range + assertRange (2, 0) (6, 15) sigModule.Range + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of attribute should be included in SynModuleDecl.NestedModule`` () = + let parseResults = + getParseResults + """ +module TopLevel + +[] +module Nested = + ()""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.NestedModule _ as nm + ]) ])) -> + assertRange (4, 0) (6, 6) nm.Range + | _ -> Assert.Fail "Could not get valid AST" + +module SynBindings = + [] + let ``Range of attribute should be included in SynModuleDecl.Let`` () = + let parseResults = + getParseResults + """ +[] +let a = 0""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Let(bindings = [SynBinding(range = mb)]) as lt + ]) ])) -> + assertRange (2, 0) (3, 5) mb + assertRange (2, 0) (3, 9) lt.Range + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of attribute between let keyword and pattern should be included in SynModuleDecl.Let`` () = + let parseResults = + getParseResults + """ +let [] (A x) = 1""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Let(bindings = [SynBinding(range = mb)]) as lt + ]) ])) -> + assertRange (2, 4) (2, 21) mb + assertRange (2, 0) (2, 25) lt.Range + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of attribute should be included in SynMemberDefn.LetBindings`` () = + let parseResults = + getParseResults + """ +type Bar = + [] + let x = 8""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [SynMemberDefn.LetBindings(bindings = [SynBinding(range = mb)]) as m]))]) + ]) ])) -> + assertRange (3, 4) (4, 9) mb + assertRange (3, 4) (4, 13) m.Range + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of attribute should be included in SynMemberDefn.Member`` () = + let parseResults = + getParseResults + """ +type Bar = + [] + member this.Something () = ()""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [SynMemberDefn.Member(memberDefn = SynBinding(range = mb)) as m]))]) + ]) ])) -> + assertRange (3, 4) (4, 28) mb + assertRange (3, 4) (4, 33) m.Range + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of attribute should be included in binding of SynExpr.ObjExpr`` () = + let parseResults = + getParseResults + """ +{ new System.Object() with + [] + member x.ToString() = "F#" }""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.DoExpr(expr = SynExpr.ObjExpr(bindings = [SynBinding(range = mb)])) + ]) ])) -> + assertRange (3, 4) (4, 23) mb + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of attribute should be included in constructor SynMemberDefn.Member`` () = + let parseResults = + getParseResults + """ +type Tiger = + [] + new () = ()""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [SynMemberDefn.Member(memberDefn = SynBinding(range = mb)) as m]))]) + ]) ])) -> + assertRange (3, 4) (4, 10) mb + assertRange (3, 4) (4, 15) m.Range + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of attribute should be included in constructor SynMemberDefn.Member, optAsSpec`` () = + let parseResults = + getParseResults + """ +type Tiger = + [] + new () as tony = ()""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [SynMemberDefn.Member(memberDefn = SynBinding(range = mb)) as m]))]) + ]) ])) -> + assertRange (3, 4) (4, 18) mb + assertRange (3, 4) (4, 23) m.Range + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of attribute should be included in secondary constructor`` () = + let parseResults = + getParseResults + """ +type T() = + new () = + T () + + internal new () = + T () + + [] + new () = + T ()""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ + SynMemberDefn.ImplicitCtor _ + SynMemberDefn.Member(memberDefn = SynBinding(range = mb1)) as m1 + SynMemberDefn.Member(memberDefn = SynBinding(range = mb2)) as m2 + SynMemberDefn.Member(memberDefn = SynBinding(range = mb3)) as m3 + ]))]) + ]) ])) -> + assertRange (3, 4) (3, 10) mb1 + assertRange (3, 4) (4, 12) m1.Range + assertRange (6, 4) (6, 19) mb2 + assertRange (6, 4) (7, 12) m2.Range + assertRange (9, 4) (10, 10) mb3 + assertRange (9, 4) (11, 12) m3.Range + | _ -> Assert.Fail "Could not get valid AST" + + + [] + let ``Range of attribute should be included in write only SynMemberDefn.Member property`` () = + let parseResults = + getParseResults + """ +type Crane = + [] + member this.MyWriteOnlyProperty with set (value) = myInternalValue <- value""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [SynMemberDefn.Member(memberDefn = SynBinding(range = mb)) as m]))]) + ]) ])) -> + assertRange (3, 4) (4, 52) mb + assertRange (3, 4) (4, 79) m.Range + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Range of attribute should be included in full SynMemberDefn.Member property`` () = + let parseResults = + getParseResults + """ +type Bird = + [] + member this.TheWord + with get () = myInternalValue + and set (value) = myInternalValue <- value""" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.Types(typeDefns = [SynTypeDefn(typeRepr = SynTypeDefnRepr.ObjectModel(members = [ + SynMemberDefn.Member(memberDefn = SynBinding(range = mb1)) as getter + SynMemberDefn.Member(memberDefn = SynBinding(range = mb2)) as setter + ]))]) + ]) ])) -> + assertRange (3, 4) (5, 19) mb1 + assertRange (3, 4) (6, 50) getter.Range + assertRange (3, 4) (6, 23) mb2 + assertRange (3, 4) (6, 50) setter.Range + | _ -> Assert.Fail "Could not get valid AST" + +module ParsedHashDirective = + [] + let ``SourceIdentifier as ParsedHashDirectiveArgument`` () = + let parseResults = + getParseResults + "#I __SOURCE_DIRECTORY__" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.HashDirective(ParsedHashDirective("I", [ ParsedHashDirectiveArgument.SourceIdentifier(c,_,m) ] , _), _) + ]) ])) -> + Assert.AreEqual("__SOURCE_DIRECTORY__", c) + assertRange (1, 3) (1, 23) m + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Regular String as ParsedHashDirectiveArgument`` () = + let parseResults = + getParseResults + "#I \"/tmp\"" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.HashDirective(ParsedHashDirective("I", [ ParsedHashDirectiveArgument.String(v, SynStringKind.Regular, m) ] , _), _) + ]) ])) -> + Assert.AreEqual("/tmp", v) + assertRange (1, 3) (1, 9) m + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Verbatim String as ParsedHashDirectiveArgument`` () = + let parseResults = + getParseResults + "#I @\"C:\\Temp\"" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.HashDirective(ParsedHashDirective("I", [ ParsedHashDirectiveArgument.String(v, SynStringKind.Verbatim, m) ] , _), _) + ]) ])) -> + Assert.AreEqual("C:\\Temp", v) + assertRange (1, 3) (1, 13) m + | _ -> Assert.Fail "Could not get valid AST" + + [] + let ``Triple quote String as ParsedHashDirectiveArgument`` () = + let parseResults = + getParseResults + "#nowarn \"\"\"40\"\"\"" + + match parseResults with + | ParsedInput.ImplFile (ParsedImplFileInput (modules = [ SynModuleOrNamespace.SynModuleOrNamespace(decls = [ + SynModuleDecl.HashDirective(ParsedHashDirective("nowarn", [ ParsedHashDirectiveArgument.String(v, SynStringKind.TripleQuote, m) ] , _), _) + ]) ])) -> + Assert.AreEqual("40", v) + assertRange (1, 8) (1, 16) m + | _ -> Assert.Fail "Could not get valid AST" \ No newline at end of file diff --git a/tests/service/TokenizerTests.fs b/tests/service/TokenizerTests.fs index 6dea4640543..275e01edb9c 100644 --- a/tests/service/TokenizerTests.fs +++ b/tests/service/TokenizerTests.fs @@ -8,11 +8,11 @@ module FSharp.Compiler.Service.Tests.TokenizerTests #endif -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Tokenization open NUnit.Framework - let sourceTok = FSharpSourceTokenizer([], Some "C:\\test.fsx") let rec parseLine(line: string, state: FSharpTokenizerLexState ref, tokenizer: FSharpLineTokenizer) = seq { diff --git a/tests/service/TreeVisitorTests.fs b/tests/service/TreeVisitorTests.fs index 6ff20227235..206b7daaf8e 100644 --- a/tests/service/TreeVisitorTests.fs +++ b/tests/service/TreeVisitorTests.fs @@ -1,25 +1,22 @@ module Tests.Service.TreeVisitorTests open FSharp.Compiler.Service.Tests.Common -open FSharp.Compiler.Range -open FSharp.Compiler.SourceCodeServices.AstTraversal +open FSharp.Compiler.Text.Position +open FSharp.Compiler.Syntax open NUnit.Framework [] let ``Visit type test`` () = let visitor = - { new AstVisitorBase<_>() with + { new SyntaxVisitorBase<_>() with member x.VisitExpr(_, _, defaultTraverse, expr) = defaultTraverse expr - member x.VisitType(_, _) = Some () } + member x.VisitType(_, _, _) = Some () } let source = "123 :? int" - let parseTree = - match parseSourceCode("C:\\test.fs", source) with - | None -> failwith "No parse tree" - | Some parseTree -> parseTree + let parseTree = parseSourceCode("C:\\test.fs", source) - Traverse(mkPos 1 11, parseTree, visitor) + SyntaxTraversal.Traverse(mkPos 1 11, parseTree, visitor) |> Option.defaultWith (fun _ -> failwith "Did not visit type") - Traverse(mkPos 1 3, parseTree, visitor) + SyntaxTraversal.Traverse(mkPos 1 3, parseTree, visitor) |> Option.iter (fun _ -> failwith "Should not visit type") diff --git a/tests/service/data/TestTP/Library.fs b/tests/service/data/TestTP/Library.fs index 3d5474e50bf..b97eb774e06 100644 --- a/tests/service/data/TestTP/Library.fs +++ b/tests/service/data/TestTP/Library.fs @@ -35,17 +35,17 @@ module Helper = static member DoNothingGeneric(x:'T) = () [] static member DoNothingWithCompiledName() = () - member __.InstanceDoNothing() = () - member __.InstanceDoNothingOneArg(x:int) = () - member __.InstanceDoNothingOneArg(x:string) = () - member __.InstanceDoNothingTwoArg(c:C, x:int) = () - member __.InstanceDoNothingTwoArgCurried(c:C) (x:int) = () - member __.InstanceDoNothingGeneric(x:'T) = () + member _.InstanceDoNothing() = () + member _.InstanceDoNothingOneArg(x:int) = () + member _.InstanceDoNothingOneArg(x:string) = () + member _.InstanceDoNothingTwoArg(c:C, x:int) = () + member _.InstanceDoNothingTwoArgCurried(c:C) (x:int) = () + member _.InstanceDoNothingGeneric(x:'T) = () [] - member __.InstanceDoNothingWithCompiledName() = () - override __.VirtualDoNothing() = () + member _.InstanceDoNothingWithCompiledName() = () + override _.VirtualDoNothing() = () - member __.Property with get() = p and set v = p <- v + member _.Property with get() = p and set v = p <- v member val AutoProperty = 0 with get, set static member val StaticAutoProperty = 0 with get, set @@ -57,10 +57,10 @@ module Helper = static member DoNothingOneArg(x:int) = () static member DoNothingTwoArg(c:C, x:int) = () static member DoNothingGeneric(x:'T) = () - member __.InstanceDoNothing() = () - member __.InstanceDoNothingOneArg(x:int) = () - member __.InstanceDoNothingTwoArg(c:C, x:int) = () - member __.InstanceDoNothingGeneric(x:'U) = () + member _.InstanceDoNothing() = () + member _.InstanceDoNothingOneArg(x:int) = () + member _.InstanceDoNothingTwoArg(c:C, x:int) = () + member _.InstanceDoNothingGeneric(x:'U) = () type R = { A : int; mutable B : int } diff --git a/tests/service/data/TestTP/ProvidedTypes.fs b/tests/service/data/TestTP/ProvidedTypes.fs index 51cdb0bddd0..943ef8ea567 100644 --- a/tests/service/data/TestTP/ProvidedTypes.fs +++ b/tests/service/data/TestTP/ProvidedTypes.fs @@ -63,9 +63,9 @@ module internal Misc = #else { new CustomAttributeData() with #endif - member __.Constructor = typeof.GetConstructors().[0] - member __.ConstructorArguments = upcast [| |] - member __.NamedArguments = upcast [| |] } + member _.Constructor = typeof.GetConstructors().[0] + member _.ConstructorArguments = upcast [| |] + member _.NamedArguments = upcast [| |] } #if FX_NO_CUSTOMATTRIBUTEDATA let CustomAttributeTypedArgument(ty,v) = @@ -86,9 +86,9 @@ module internal Misc = #else { new CustomAttributeData() with #endif - member __.Constructor = typeof.GetConstructors().[0] - member __.ConstructorArguments = upcast [| |] - member __.NamedArguments = upcast [| |] } + member _.Constructor = typeof.GetConstructors().[0] + member _.ConstructorArguments = upcast [| |] + member _.NamedArguments = upcast [| |] } let mkAllowNullLiteralCustomAttributeData value = #if FX_NO_CUSTOMATTRIBUTEDATA @@ -96,9 +96,9 @@ module internal Misc = #else { new CustomAttributeData() with #endif - member __.Constructor = typeof.GetConstructors().[0] - member __.ConstructorArguments = upcast [| CustomAttributeTypedArgument(typeof, value) |] - member __.NamedArguments = upcast [| |] } + member _.Constructor = typeof.GetConstructors().[0] + member _.ConstructorArguments = upcast [| CustomAttributeTypedArgument(typeof, value) |] + member _.NamedArguments = upcast [| |] } /// This makes an xml doc attribute w.r.t. an amortized computation of an xml doc string. /// It is important that the text of the xml doc only get forced when poking on the ConstructorArguments @@ -109,9 +109,9 @@ module internal Misc = #else { new CustomAttributeData() with #endif - member __.Constructor = typeof.GetConstructors().[0] - member __.ConstructorArguments = upcast [| CustomAttributeTypedArgument(typeof, lazyText.Force()) |] - member __.NamedArguments = upcast [| |] } + member _.Constructor = typeof.GetConstructors().[0] + member _.ConstructorArguments = upcast [| CustomAttributeTypedArgument(typeof, lazyText.Force()) |] + member _.NamedArguments = upcast [| |] } let mkXmlDocCustomAttributeData(s:string) = mkXmlDocCustomAttributeDataLazy (lazy s) @@ -121,9 +121,9 @@ module internal Misc = #else { new CustomAttributeData() with #endif - member __.Constructor = typeof.GetConstructors().[0] - member __.ConstructorArguments = upcast [| |] - member __.NamedArguments = + member _.Constructor = typeof.GetConstructors().[0] + member _.ConstructorArguments = upcast [| |] + member _.NamedArguments = upcast [| CustomAttributeNamedArgument(typeof.GetProperty("FilePath"), CustomAttributeTypedArgument(typeof, filePath)); CustomAttributeNamedArgument(typeof.GetProperty("Line"), CustomAttributeTypedArgument(typeof, line)) ; CustomAttributeNamedArgument(typeof.GetProperty("Column"), CustomAttributeTypedArgument(typeof, column)) @@ -134,9 +134,9 @@ module internal Misc = #else { new CustomAttributeData() with #endif - member __.Constructor = typeof.GetConstructors() |> Array.find (fun x -> x.GetParameters().Length = 1) - member __.ConstructorArguments = upcast [|CustomAttributeTypedArgument(typeof, message) ; CustomAttributeTypedArgument(typeof, isError) |] - member __.NamedArguments = upcast [| |] } + member _.Constructor = typeof.GetConstructors() |> Array.find (fun x -> x.GetParameters().Length = 1) + member _.ConstructorArguments = upcast [|CustomAttributeTypedArgument(typeof, message) ; CustomAttributeTypedArgument(typeof, isError) |] + member _.NamedArguments = upcast [| |] } type CustomAttributesImpl() = let customAttributes = ResizeArray() @@ -163,16 +163,16 @@ module internal Misc = if hasParamArray then yield mkParamArrayCustomAttributeData() yield! customAttributes |] - member __.AddDefinitionLocation(line:int,column:int,filePath:string) = customAttributes.Add(mkDefinitionLocationAttributeCustomAttributeData(line, column, filePath)) - member __.AddObsolete(message : string, isError) = obsoleteMessage <- Some (message,isError) - member __.HasParamArray with get() = hasParamArray and set(v) = hasParamArray <- v - member __.AddXmlDocComputed xmlDocFunction = xmlDocAlwaysRecomputed <- Some xmlDocFunction - member __.AddXmlDocDelayed xmlDocFunction = xmlDocDelayed <- Some xmlDocFunction - member __.AddXmlDoc xmlDoc = xmlDocDelayed <- Some (fun () -> xmlDoc) - member __.HideObjectMethods with set v = hideObjectMethods <- v - member __.NonNullable with set v = nonNullable <- v - member __.AddCustomAttribute(attribute) = customAttributes.Add(attribute) - member __.GetCustomAttributesData() = + member _.AddDefinitionLocation(line:int,column:int,filePath:string) = customAttributes.Add(mkDefinitionLocationAttributeCustomAttributeData(line, column, filePath)) + member _.AddObsolete(message : string, isError) = obsoleteMessage <- Some (message,isError) + member _.HasParamArray with get() = hasParamArray and set(v) = hasParamArray <- v + member _.AddXmlDocComputed xmlDocFunction = xmlDocAlwaysRecomputed <- Some xmlDocFunction + member _.AddXmlDocDelayed xmlDocFunction = xmlDocDelayed <- Some xmlDocFunction + member _.AddXmlDoc xmlDoc = xmlDocDelayed <- Some (fun () -> xmlDoc) + member _.HideObjectMethods with set v = hideObjectMethods <- v + member _.NonNullable with set v = nonNullable <- v + member _.AddCustomAttribute(attribute) = customAttributes.Add(attribute) + member _.GetCustomAttributesData() = [| yield! customAttributesOnce.Force() match xmlDocAlwaysRecomputed with None -> () | Some f -> customAttributes.Add(mkXmlDocCustomAttributeData (f())) |] :> IList<_> @@ -552,34 +552,34 @@ type ProvidedStaticParameter(parameterName:string,parameterType:Type,?parameterD let customAttributesImpl = CustomAttributesImpl() - member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - override __.RawDefaultValue = defaultArg parameterDefaultValue null - override __.Attributes = if parameterDefaultValue.IsNone then enum 0 else ParameterAttributes.Optional - override __.Position = 0 - override __.ParameterType = parameterType - override __.Name = parameterName + override _.RawDefaultValue = defaultArg parameterDefaultValue null + override _.Attributes = if parameterDefaultValue.IsNone then enum 0 else ParameterAttributes.Optional + override _.Position = 0 + override _.ParameterType = parameterType + override _.Name = parameterName - override __.GetCustomAttributes(_inherit) = ignore(_inherit); notRequired "GetCustomAttributes" parameterName - override __.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" parameterName + override _.GetCustomAttributes(_inherit) = ignore(_inherit); notRequired "GetCustomAttributes" parameterName + override _.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" parameterName type ProvidedParameter(name:string,parameterType:Type,?isOut:bool,?optionalValue:obj) = inherit System.Reflection.ParameterInfo() let customAttributesImpl = CustomAttributesImpl() let isOut = defaultArg isOut false - member __.IsParamArray with get() = customAttributesImpl.HasParamArray and set(v) = customAttributesImpl.HasParamArray <- v - override __.Name = name - override __.ParameterType = parameterType - override __.Attributes = (base.Attributes ||| (if isOut then ParameterAttributes.Out else enum 0) + member _.IsParamArray with get() = customAttributesImpl.HasParamArray and set(v) = customAttributesImpl.HasParamArray <- v + override _.Name = name + override _.ParameterType = parameterType + override _.Attributes = (base.Attributes ||| (if isOut then ParameterAttributes.Out else enum 0) ||| (match optionalValue with None -> enum 0 | Some _ -> ParameterAttributes.Optional ||| ParameterAttributes.HasDefault)) - override __.RawDefaultValue = defaultArg optionalValue null - member __.HasDefaultParameterValue = Option.isSome optionalValue - member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() + override _.RawDefaultValue = defaultArg optionalValue null + member _.HasDefaultParameterValue = Option.isSome optionalValue + member _.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() #if FX_NO_CUSTOMATTRIBUTEDATA #else - override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() #endif type ProvidedConstructor(parameters : ProvidedParameter list) = @@ -595,41 +595,41 @@ type ProvidedConstructor(parameters : ProvidedParameter list) = let isStatic() = ctorAttributes.HasFlag(MethodAttributes.Static) let customAttributesImpl = CustomAttributesImpl() - member __.IsTypeInitializer + member _.IsTypeInitializer with get() = isStatic() && ctorAttributes.HasFlag(MethodAttributes.Private) and set(v) = let typeInitializerAttributes = MethodAttributes.Static ||| MethodAttributes.Private ctorAttributes <- if v then ctorAttributes ||| typeInitializerAttributes else ctorAttributes &&& ~~~typeInitializerAttributes - member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() + member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member _.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() #if FX_NO_CUSTOMATTRIBUTEDATA #else - override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() #endif - member __.DeclaringTypeImpl + member _.DeclaringTypeImpl with set x = if declaringType<>null then failwith (sprintf "ProvidedConstructor: declaringType already set on '%s'" (nameText())); declaringType <- x - member __.InvokeCode + member _.InvokeCode with set (q:Quotations.Expr list -> Quotations.Expr) = match invokeCode with | None -> invokeCode <- Some q | Some _ -> failwith (sprintf "ProvidedConstructor: code already given for '%s'" (nameText())) - member __.BaseConstructorCall + member _.BaseConstructorCall with set (d:Quotations.Expr list -> (ConstructorInfo * Quotations.Expr list)) = match baseCall with | None -> baseCall <- Some d | Some _ -> failwith (sprintf "ProvidedConstructor: base call already given for '%s'" (nameText())) - member __.GetInvokeCodeInternal isGenerated = + member _.GetInvokeCodeInternal isGenerated = match invokeCode with | Some f -> // FSharp.Data change: use the real variable names instead of indices, to improve output of Debug.fs @@ -641,26 +641,26 @@ type ProvidedConstructor(parameters : ProvidedParameter list) = transQuotationToCode isGenerated f paramNames | None -> failwith (sprintf "ProvidedConstructor: no invoker for '%s'" (nameText())) - member __.GetBaseConstructorCallInternal isGenerated = + member _.GetBaseConstructorCallInternal isGenerated = match baseCall with | Some f -> Some(fun ctorArgs -> let c,baseCtorArgExprs = f ctorArgs in c, List.map (transExpr isGenerated) baseCtorArgExprs) | None -> None - member __.IsImplicitCtor with get() = isImplicitCtor and set v = isImplicitCtor <- v + member _.IsImplicitCtor with get() = isImplicitCtor and set v = isImplicitCtor <- v // Implement overloads - override __.GetParameters() = parameters |> List.toArray - override __.Attributes = ctorAttributes - override __.Name = if isStatic() then ".cctor" else ".ctor" - override __.DeclaringType = declaringType |> nonNull "ProvidedConstructor.DeclaringType" - override __.IsDefined(_attributeType, _inherit) = true - - override __.Invoke(_invokeAttr, _binder, _parameters, _culture) = notRequired "Invoke" (nameText()) - override __.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired "Invoke" (nameText()) - override __.ReflectedType = notRequired "ReflectedType" (nameText()) - override __.GetMethodImplementationFlags() = notRequired "GetMethodImplementationFlags" (nameText()) - override __.MethodHandle = notRequired "MethodHandle" (nameText()) - override __.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" (nameText()) - override __.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" (nameText()) + override _.GetParameters() = parameters |> List.toArray + override _.Attributes = ctorAttributes + override _.Name = if isStatic() then ".cctor" else ".ctor" + override _.DeclaringType = declaringType |> nonNull "ProvidedConstructor.DeclaringType" + override _.IsDefined(_attributeType, _inherit) = true + + override _.Invoke(_invokeAttr, _binder, _parameters, _culture) = notRequired "Invoke" (nameText()) + override _.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired "Invoke" (nameText()) + override _.ReflectedType = notRequired "ReflectedType" (nameText()) + override _.GetMethodImplementationFlags() = notRequired "GetMethodImplementationFlags" (nameText()) + override _.MethodHandle = notRequired "MethodHandle" (nameText()) + override _.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" (nameText()) + override _.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" (nameText()) type ProvidedMethod(methodName: string, parameters: ProvidedParameter list, returnType: Type) = inherit System.Reflection.MethodInfo() @@ -675,27 +675,27 @@ type ProvidedMethod(methodName: string, parameters: ProvidedParameter list, retu let isStatic() = methodAttrs.HasFlag(MethodAttributes.Static) let customAttributesImpl = CustomAttributesImpl() - member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member __.AddCustomAttribute(attribute) = customAttributesImpl.AddCustomAttribute(attribute) - member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() + member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member _.AddCustomAttribute(attribute) = customAttributesImpl.AddCustomAttribute(attribute) + member _.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() #if FX_NO_CUSTOMATTRIBUTEDATA #else - override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() #endif - member __.SetMethodAttrs m = methodAttrs <- m - member __.AddMethodAttrs m = methodAttrs <- methodAttrs ||| m - member __.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice - member __.IsStaticMethod + member _.SetMethodAttrs m = methodAttrs <- m + member _.AddMethodAttrs m = methodAttrs <- methodAttrs ||| m + member _.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice + member _.IsStaticMethod with get() = isStatic() and set x = if x then methodAttrs <- methodAttrs ||| MethodAttributes.Static else methodAttrs <- methodAttrs &&& (~~~ MethodAttributes.Static) - member __.InvokeCode + member _.InvokeCode with set (q:Quotations.Expr list -> Quotations.Expr) = match invokeCode with | None -> invokeCode <- Some q @@ -703,15 +703,15 @@ type ProvidedMethod(methodName: string, parameters: ProvidedParameter list, retu /// Abstract a type to a parametric-type. Requires "formal parameters" and "instantiation function". - member __.DefineStaticParameters(staticParameters : list, apply : (string -> obj[] -> ProvidedMethod)) = + member _.DefineStaticParameters(staticParameters : list, apply : (string -> obj[] -> ProvidedMethod)) = staticParams <- staticParameters staticParamsApply <- Some apply /// Get ParameterInfo[] for the parametric type parameters (//s GetGenericParameters) - member __.GetStaticParameters() = [| for p in staticParams -> p :> ParameterInfo |] + member _.GetStaticParameters() = [| for p in staticParams -> p :> ParameterInfo |] /// Instantiate parametrics type - member __.ApplyStaticArguments(mangledName:string, args:obj[]) = + member _.ApplyStaticArguments(mangledName:string, args:obj[]) = if staticParams.Length>0 then if staticParams.Length <> args.Length then failwith (sprintf "ProvidedTypeDefinition: expecting %d static parameters but given %d for method %s" staticParams.Length args.Length methodName) @@ -721,7 +721,7 @@ type ProvidedMethod(methodName: string, parameters: ProvidedParameter list, retu else failwith (sprintf "ProvidedTypeDefinition: static parameters supplied but not expected for method %s" methodName) - member __.GetInvokeCodeInternal isGenerated = + member _.GetInvokeCodeInternal isGenerated = match invokeCode with | Some f -> // FSharp.Data change: use the real variable names instead of indices, to improve output of Debug.fs @@ -734,33 +734,33 @@ type ProvidedMethod(methodName: string, parameters: ProvidedParameter list, retu | None -> failwith (sprintf "ProvidedMethod: no invoker for %s on type %s" methodName (if declaringType=null then "" else declaringType.FullName)) // Implement overloads - override __.GetParameters() = argParams |> Array.ofList - override __.Attributes = methodAttrs - override __.Name = methodName - override __.DeclaringType = declaringType |> nonNull "ProvidedMethod.DeclaringType" - override __.IsDefined(_attributeType, _inherit) : bool = true - override __.MemberType = MemberTypes.Method - override __.CallingConvention = + override _.GetParameters() = argParams |> Array.ofList + override _.Attributes = methodAttrs + override _.Name = methodName + override _.DeclaringType = declaringType |> nonNull "ProvidedMethod.DeclaringType" + override _.IsDefined(_attributeType, _inherit) : bool = true + override _.MemberType = MemberTypes.Method + override _.CallingConvention = let cc = CallingConventions.Standard let cc = if not (isStatic()) then cc ||| CallingConventions.HasThis else cc cc - override __.ReturnType = returnType - override __.ReturnParameter = null // REVIEW: Give it a name and type? - override __.ToString() = "Method " + methodName + override _.ReturnType = returnType + override _.ReturnParameter = null // REVIEW: Give it a name and type? + override _.ToString() = "Method " + methodName // These don't have to return fully accurate results - they are used // by the F# Quotations library function SpecificCall as a pre-optimization // when comparing methods - override __.MetadataToken = hash declaringType + hash methodName - override __.MethodHandle = RuntimeMethodHandle() + override _.MetadataToken = hash declaringType + hash methodName + override _.MethodHandle = RuntimeMethodHandle() - override __.ReturnTypeCustomAttributes = notRequired "ReturnTypeCustomAttributes" methodName - override __.GetBaseDefinition() = notRequired "GetBaseDefinition" methodName - override __.GetMethodImplementationFlags() = notRequired "GetMethodImplementationFlags" methodName - override __.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired "Invoke" methodName - override __.ReflectedType = notRequired "ReflectedType" methodName - override __.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" methodName - override __.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" methodName + override _.ReturnTypeCustomAttributes = notRequired "ReturnTypeCustomAttributes" methodName + override _.GetBaseDefinition() = notRequired "GetBaseDefinition" methodName + override _.GetMethodImplementationFlags() = notRequired "GetMethodImplementationFlags" methodName + override _.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired "Invoke" methodName + override _.ReflectedType = notRequired "ReflectedType" methodName + override _.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" methodName + override _.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" methodName type ProvidedProperty(propertyName: string, propertyType: Type, ?parameters: ProvidedParameter list) = @@ -782,51 +782,51 @@ type ProvidedProperty(propertyName: string, propertyType: Type, ?parameters: Pro let setter = lazy (ProvidedMethod("set_" + propertyName,parameters @ [ProvidedParameter("value",propertyType)],typeof,IsStaticMethod=isStatic,DeclaringTypeImpl=declaringType,InvokeCode=setterCode.Value) |> markSpecialName) let customAttributesImpl = CustomAttributesImpl() - member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() - member __.AddCustomAttribute attribute = customAttributesImpl.AddCustomAttribute attribute + member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member _.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() + member _.AddCustomAttribute attribute = customAttributesImpl.AddCustomAttribute attribute #if FX_NO_CUSTOMATTRIBUTEDATA #else - override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() #endif - member __.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice + member _.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice - member __.IsStatic + member _.IsStatic with get() = isStatic and set x = isStatic <- x - member __.GetterCode + member _.GetterCode with set (q:Quotations.Expr list -> Quotations.Expr) = if not getter.IsValueCreated then getterCode <- Some q else failwith "ProvidedProperty: getter MethodInfo has already been created" - member __.SetterCode + member _.SetterCode with set (q:Quotations.Expr list -> Quotations.Expr) = if not (setter.IsValueCreated) then setterCode <- Some q else failwith "ProvidedProperty: setter MethodInfo has already been created" // Implement overloads - override __.PropertyType = propertyType - override __.SetValue(_obj, _value, _invokeAttr, _binder, _index, _culture) = notRequired "SetValue" propertyName - override __.GetAccessors _nonPublic = notRequired "nonPublic" propertyName - override __.GetGetMethod _nonPublic = if hasGetter() then getter.Force() :> MethodInfo else null - override __.GetSetMethod _nonPublic = if hasSetter() then setter.Force() :> MethodInfo else null - override __.GetIndexParameters() = [| for p in parameters -> upcast p |] - override __.Attributes = PropertyAttributes.None - override __.CanRead = hasGetter() - override __.CanWrite = hasSetter() - override __.GetValue(_obj, _invokeAttr, _binder, _index, _culture) : obj = notRequired "GetValue" propertyName - override __.Name = propertyName - override __.DeclaringType = declaringType |> nonNull "ProvidedProperty.DeclaringType" - override __.MemberType : MemberTypes = MemberTypes.Property - - override __.ReflectedType = notRequired "ReflectedType" propertyName - override __.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" propertyName - override __.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" propertyName - override __.IsDefined(_attributeType, _inherit) = notRequired "IsDefined" propertyName + override _.PropertyType = propertyType + override _.SetValue(_obj, _value, _invokeAttr, _binder, _index, _culture) = notRequired "SetValue" propertyName + override _.GetAccessors _nonPublic = notRequired "nonPublic" propertyName + override _.GetGetMethod _nonPublic = if hasGetter() then getter.Force() :> MethodInfo else null + override _.GetSetMethod _nonPublic = if hasSetter() then setter.Force() :> MethodInfo else null + override _.GetIndexParameters() = [| for p in parameters -> upcast p |] + override _.Attributes = PropertyAttributes.None + override _.CanRead = hasGetter() + override _.CanWrite = hasSetter() + override _.GetValue(_obj, _invokeAttr, _binder, _index, _culture) : obj = notRequired "GetValue" propertyName + override _.Name = propertyName + override _.DeclaringType = declaringType |> nonNull "ProvidedProperty.DeclaringType" + override _.MemberType : MemberTypes = MemberTypes.Property + + override _.ReflectedType = notRequired "ReflectedType" propertyName + override _.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" propertyName + override _.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" propertyName + override _.IsDefined(_attributeType, _inherit) = notRequired "IsDefined" propertyName type ProvidedEvent(eventName:string,eventHandlerType:Type) = inherit System.Reflection.EventInfo() @@ -843,45 +843,45 @@ type ProvidedEvent(eventName:string,eventHandlerType:Type) = let remover = lazy (ProvidedMethod("remove_" + eventName, [ProvidedParameter("handler", eventHandlerType)],typeof,IsStaticMethod=isStatic,DeclaringTypeImpl=declaringType,InvokeCode=removerCode.Value) |> markSpecialName) let customAttributesImpl = CustomAttributesImpl() - member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() + member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member _.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() #if FX_NO_CUSTOMATTRIBUTEDATA #else - override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() #endif - member __.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice - member __.IsStatic + member _.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice + member _.IsStatic with get() = isStatic and set x = isStatic <- x - member __.AdderCode + member _.AdderCode with get() = adderCode.Value and set f = if not adder.IsValueCreated then adderCode <- Some f else failwith "ProvidedEvent: Add MethodInfo has already been created" - member __.RemoverCode + member _.RemoverCode with get() = removerCode.Value and set f = if not (remover.IsValueCreated) then removerCode <- Some f else failwith "ProvidedEvent: Remove MethodInfo has already been created" // Implement overloads - override __.EventHandlerType = eventHandlerType - override __.GetAddMethod _nonPublic = adder.Force() :> MethodInfo - override __.GetRemoveMethod _nonPublic = remover.Force() :> MethodInfo - override __.Attributes = EventAttributes.None - override __.Name = eventName - override __.DeclaringType = declaringType |> nonNull "ProvidedEvent.DeclaringType" - override __.MemberType : MemberTypes = MemberTypes.Event - - override __.GetRaiseMethod _nonPublic = notRequired "GetRaiseMethod" eventName - override __.ReflectedType = notRequired "ReflectedType" eventName - override __.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" eventName - override __.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" eventName - override __.IsDefined(_attributeType, _inherit) = notRequired "IsDefined" eventName + override _.EventHandlerType = eventHandlerType + override _.GetAddMethod _nonPublic = adder.Force() :> MethodInfo + override _.GetRemoveMethod _nonPublic = remover.Force() :> MethodInfo + override _.Attributes = EventAttributes.None + override _.Name = eventName + override _.DeclaringType = declaringType |> nonNull "ProvidedEvent.DeclaringType" + override _.MemberType : MemberTypes = MemberTypes.Event + + override _.GetRaiseMethod _nonPublic = notRequired "GetRaiseMethod" eventName + override _.ReflectedType = notRequired "ReflectedType" eventName + override _.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" eventName + override _.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" eventName + override _.IsDefined(_attributeType, _inherit) = notRequired "IsDefined" eventName type ProvidedLiteralField(fieldName:string,fieldType:Type,literalValue:obj) = inherit System.Reflection.FieldInfo() @@ -890,36 +890,36 @@ type ProvidedLiteralField(fieldName:string,fieldType:Type,literalValue:obj) = let mutable declaringType = null let customAttributesImpl = CustomAttributesImpl() - member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() + member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member _.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() #if FX_NO_CUSTOMATTRIBUTEDATA #else - override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() #endif - member __.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice + member _.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice // Implement overloads - override __.FieldType = fieldType - override __.GetRawConstantValue() = literalValue - override __.Attributes = FieldAttributes.Static ||| FieldAttributes.Literal ||| FieldAttributes.Public - override __.Name = fieldName - override __.DeclaringType = declaringType |> nonNull "ProvidedLiteralField.DeclaringType" - override __.MemberType : MemberTypes = MemberTypes.Field - - override __.ReflectedType = notRequired "ReflectedType" fieldName - override __.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" fieldName - override __.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" fieldName - override __.IsDefined(_attributeType, _inherit) = notRequired "IsDefined" fieldName - - override __.SetValue(_obj, _value, _invokeAttr, _binder, _culture) = notRequired "SetValue" fieldName - override __.GetValue(_obj) : obj = notRequired "GetValue" fieldName - override __.FieldHandle = notRequired "FieldHandle" fieldName + override _.FieldType = fieldType + override _.GetRawConstantValue() = literalValue + override _.Attributes = FieldAttributes.Static ||| FieldAttributes.Literal ||| FieldAttributes.Public + override _.Name = fieldName + override _.DeclaringType = declaringType |> nonNull "ProvidedLiteralField.DeclaringType" + override _.MemberType : MemberTypes = MemberTypes.Field + + override _.ReflectedType = notRequired "ReflectedType" fieldName + override _.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" fieldName + override _.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" fieldName + override _.IsDefined(_attributeType, _inherit) = notRequired "IsDefined" fieldName + + override _.SetValue(_obj, _value, _invokeAttr, _binder, _culture) = notRequired "SetValue" fieldName + override _.GetValue(_obj) : obj = notRequired "GetValue" fieldName + override _.FieldHandle = notRequired "FieldHandle" fieldName type ProvidedField(fieldName:string,fieldType:Type) = inherit System.Reflection.FieldInfo() @@ -929,36 +929,36 @@ type ProvidedField(fieldName:string,fieldType:Type) = let customAttributesImpl = CustomAttributesImpl() let mutable fieldAttrs = FieldAttributes.Private - member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() + member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member _.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() #if FX_NO_CUSTOMATTRIBUTEDATA #else - override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() #endif - member __.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice + member _.DeclaringTypeImpl with set x = declaringType <- x // check: not set twice - member __.SetFieldAttributes attrs = fieldAttrs <- attrs + member _.SetFieldAttributes attrs = fieldAttrs <- attrs // Implement overloads - override __.FieldType = fieldType - override __.GetRawConstantValue() = null - override __.Attributes = fieldAttrs - override __.Name = fieldName - override __.DeclaringType = declaringType |> nonNull "ProvidedField.DeclaringType" - override __.MemberType : MemberTypes = MemberTypes.Field - - override __.ReflectedType = notRequired "ReflectedType" fieldName - override __.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" fieldName - override __.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" fieldName - override __.IsDefined(_attributeType, _inherit) = notRequired "IsDefined" fieldName - - override __.SetValue(_obj, _value, _invokeAttr, _binder, _culture) = notRequired "SetValue" fieldName - override __.GetValue(_obj) : obj = notRequired "GetValue" fieldName - override __.FieldHandle = notRequired "FieldHandle" fieldName + override _.FieldType = fieldType + override _.GetRawConstantValue() = null + override _.Attributes = fieldAttrs + override _.Name = fieldName + override _.DeclaringType = declaringType |> nonNull "ProvidedField.DeclaringType" + override _.MemberType : MemberTypes = MemberTypes.Field + + override _.ReflectedType = notRequired "ReflectedType" fieldName + override _.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" fieldName + override _.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" fieldName + override _.IsDefined(_attributeType, _inherit) = notRequired "IsDefined" fieldName + + override _.SetValue(_obj, _value, _invokeAttr, _binder, _culture) = notRequired "SetValue" fieldName + override _.GetValue(_obj) : obj = notRequired "GetValue" fieldName + override _.FieldHandle = notRequired "FieldHandle" fieldName /// Represents the type constructor in a provided symbol type. [] @@ -1020,7 +1020,7 @@ type ProvidedSymbolType(kind: SymbolKind, args: Type list) = ty else ty - override __.FullName = + override _.FullName = match kind,args with | SymbolKind.SDArray,[arg] -> arg.FullName + "[]" | SymbolKind.Array _,[arg] -> arg.FullName + "[*]" @@ -1032,7 +1032,7 @@ type ProvidedSymbolType(kind: SymbolKind, args: Type list) = /// Although not strictly required by the type provider specification, this is required when doing basic operations like FullName on /// .NET symbolic types made from this type, e.g. when building Nullable.FullName - override __.DeclaringType = + override _.DeclaringType = match kind,args with | SymbolKind.SDArray,[arg] -> arg | SymbolKind.Array _,[arg] -> arg @@ -1042,7 +1042,7 @@ type ProvidedSymbolType(kind: SymbolKind, args: Type list) = | SymbolKind.FSharpTypeAbbreviation _,_ -> null | _ -> failwith "unreachable" - override __.IsAssignableFrom(otherTy) = + override _.IsAssignableFrom(otherTy) = match kind with | Generic gtd -> if otherTy.IsGenericType then @@ -1054,9 +1054,9 @@ type ProvidedSymbolType(kind: SymbolKind, args: Type list) = base.IsAssignableFrom(otherTy) | _ -> base.IsAssignableFrom(otherTy) - override __.Name = nameText() + override _.Name = nameText() - override __.BaseType = + override _.BaseType = match kind with | SymbolKind.SDArray -> typeof | SymbolKind.Array _ -> typeof @@ -1067,31 +1067,31 @@ type ProvidedSymbolType(kind: SymbolKind, args: Type list) = ProvidedSymbolType.convType args gty.BaseType | SymbolKind.FSharpTypeAbbreviation _ -> typeof - override __.GetArrayRank() = (match kind with SymbolKind.Array n -> n | SymbolKind.SDArray -> 1 | _ -> invalidOp "non-array type") - override __.IsArrayImpl() = (match kind with SymbolKind.Array _ | SymbolKind.SDArray -> true | _ -> false) - override __.IsByRefImpl() = (match kind with SymbolKind.ByRef _ -> true | _ -> false) - override __.IsPointerImpl() = (match kind with SymbolKind.Pointer _ -> true | _ -> false) - override __.IsPrimitiveImpl() = false - override __.IsGenericType = (match kind with SymbolKind.Generic _ -> true | _ -> false) - override __.GetGenericArguments() = (match kind with SymbolKind.Generic _ -> args |> List.toArray | _ -> invalidOp "non-generic type") - override __.GetGenericTypeDefinition() = (match kind with SymbolKind.Generic e -> e | _ -> invalidOp "non-generic type") - override __.IsCOMObjectImpl() = false - override __.HasElementTypeImpl() = (match kind with SymbolKind.Generic _ -> false | _ -> true) - override __.GetElementType() = (match kind,args with (SymbolKind.Array _ | SymbolKind.SDArray | SymbolKind.ByRef | SymbolKind.Pointer),[e] -> e | _ -> invalidOp "not an array, pointer or byref type") + override _.GetArrayRank() = (match kind with SymbolKind.Array n -> n | SymbolKind.SDArray -> 1 | _ -> invalidOp "non-array type") + override _.IsArrayImpl() = (match kind with SymbolKind.Array _ | SymbolKind.SDArray -> true | _ -> false) + override _.IsByRefImpl() = (match kind with SymbolKind.ByRef _ -> true | _ -> false) + override _.IsPointerImpl() = (match kind with SymbolKind.Pointer _ -> true | _ -> false) + override _.IsPrimitiveImpl() = false + override _.IsGenericType = (match kind with SymbolKind.Generic _ -> true | _ -> false) + override _.GetGenericArguments() = (match kind with SymbolKind.Generic _ -> args |> List.toArray | _ -> invalidOp "non-generic type") + override _.GetGenericTypeDefinition() = (match kind with SymbolKind.Generic e -> e | _ -> invalidOp "non-generic type") + override _.IsCOMObjectImpl() = false + override _.HasElementTypeImpl() = (match kind with SymbolKind.Generic _ -> false | _ -> true) + override _.GetElementType() = (match kind,args with (SymbolKind.Array _ | SymbolKind.SDArray | SymbolKind.ByRef | SymbolKind.Pointer),[e] -> e | _ -> invalidOp "not an array, pointer or byref type") override this.ToString() = this.FullName - override __.Assembly = + override _.Assembly = match kind with | SymbolKind.FSharpTypeAbbreviation (assembly,_nsp,_path) -> assembly | SymbolKind.Generic gty -> gty.Assembly | _ -> notRequired "Assembly" (nameText()) - override __.Namespace = + override _.Namespace = match kind with | SymbolKind.FSharpTypeAbbreviation (_assembly,nsp,_path) -> nsp | _ -> notRequired "Namespace" (nameText()) - override __.GetHashCode() = + override _.GetHashCode() = match kind,args with | SymbolKind.SDArray,[arg] -> 10 + hash arg | SymbolKind.Array _,[arg] -> 163 + hash arg @@ -1101,35 +1101,35 @@ type ProvidedSymbolType(kind: SymbolKind, args: Type list) = | SymbolKind.FSharpTypeAbbreviation _,_ -> 3092 | _ -> failwith "unreachable" - override __.Equals(other: obj) = + override _.Equals(other: obj) = match other with | :? ProvidedSymbolType as otherTy -> (kind, args) = (otherTy.Kind, otherTy.Args) | _ -> false - member __.Kind = kind - member __.Args = args + member _.Kind = kind + member _.Args = args - override __.Module : Module = notRequired "Module" (nameText()) - override __.GetConstructors _bindingAttr = notRequired "GetConstructors" (nameText()) - override __.GetMethodImpl(_name, _bindingAttr, _binderBinder, _callConvention, _types, _modifiers) = + override _.Module : Module = notRequired "Module" (nameText()) + override _.GetConstructors _bindingAttr = notRequired "GetConstructors" (nameText()) + override _.GetMethodImpl(_name, _bindingAttr, _binderBinder, _callConvention, _types, _modifiers) = match kind with | Generic gtd -> let ty = gtd.GetGenericTypeDefinition().MakeGenericType(Array.ofList args) ty.GetMethod(_name, _bindingAttr) | _ -> notRequired "GetMethodImpl" (nameText()) - override __.GetMembers _bindingAttr = notRequired "GetMembers" (nameText()) - override __.GetMethods _bindingAttr = notRequired "GetMethods" (nameText()) - override __.GetField(_name, _bindingAttr) = notRequired "GetField" (nameText()) - override __.GetFields _bindingAttr = notRequired "GetFields" (nameText()) - override __.GetInterface(_name, _ignoreCase) = notRequired "GetInterface" (nameText()) - override __.GetInterfaces() = notRequired "GetInterfaces" (nameText()) - override __.GetEvent(_name, _bindingAttr) = notRequired "GetEvent" (nameText()) - override __.GetEvents _bindingAttr = notRequired "GetEvents" (nameText()) - override __.GetProperties _bindingAttr = notRequired "GetProperties" (nameText()) - override __.GetPropertyImpl(_name, _bindingAttr, _binder, _returnType, _types, _modifiers) = notRequired "GetPropertyImpl" (nameText()) - override __.GetNestedTypes _bindingAttr = notRequired "GetNestedTypes" (nameText()) - override __.GetNestedType(_name, _bindingAttr) = notRequired "GetNestedType" (nameText()) - override __.GetAttributeFlagsImpl() = notRequired "GetAttributeFlagsImpl" (nameText()) + override _.GetMembers _bindingAttr = notRequired "GetMembers" (nameText()) + override _.GetMethods _bindingAttr = notRequired "GetMethods" (nameText()) + override _.GetField(_name, _bindingAttr) = notRequired "GetField" (nameText()) + override _.GetFields _bindingAttr = notRequired "GetFields" (nameText()) + override _.GetInterface(_name, _ignoreCase) = notRequired "GetInterface" (nameText()) + override _.GetInterfaces() = notRequired "GetInterfaces" (nameText()) + override _.GetEvent(_name, _bindingAttr) = notRequired "GetEvent" (nameText()) + override _.GetEvents _bindingAttr = notRequired "GetEvents" (nameText()) + override _.GetProperties _bindingAttr = notRequired "GetProperties" (nameText()) + override _.GetPropertyImpl(_name, _bindingAttr, _binder, _returnType, _types, _modifiers) = notRequired "GetPropertyImpl" (nameText()) + override _.GetNestedTypes _bindingAttr = notRequired "GetNestedTypes" (nameText()) + override _.GetNestedType(_name, _bindingAttr) = notRequired "GetNestedType" (nameText()) + override _.GetAttributeFlagsImpl() = notRequired "GetAttributeFlagsImpl" (nameText()) override this.UnderlyingSystemType = match kind with | SymbolKind.SDArray @@ -1140,17 +1140,17 @@ type ProvidedSymbolType(kind: SymbolKind, args: Type list) = | SymbolKind.Generic gty -> gty.UnderlyingSystemType #if FX_NO_CUSTOMATTRIBUTEDATA #else - override __.GetCustomAttributesData() = ([| |] :> IList<_>) + override _.GetCustomAttributesData() = ([| |] :> IList<_>) #endif - override __.MemberType = notRequired "MemberType" (nameText()) - override __.GetMember(_name,_mt,_bindingAttr) = notRequired "GetMember" (nameText()) - override __.GUID = notRequired "GUID" (nameText()) - override __.InvokeMember(_name, _invokeAttr, _binder, _target, _args, _modifiers, _culture, _namedParameters) = notRequired "InvokeMember" (nameText()) - override __.AssemblyQualifiedName = notRequired "AssemblyQualifiedName" (nameText()) - override __.GetConstructorImpl(_bindingAttr, _binder, _callConvention, _types, _modifiers) = notRequired "GetConstructorImpl" (nameText()) - override __.GetCustomAttributes(_inherit) = [| |] - override __.GetCustomAttributes(_attributeType, _inherit) = [| |] - override __.IsDefined(_attributeType, _inherit) = false + override _.MemberType = notRequired "MemberType" (nameText()) + override _.GetMember(_name,_mt,_bindingAttr) = notRequired "GetMember" (nameText()) + override _.GUID = notRequired "GUID" (nameText()) + override _.InvokeMember(_name, _invokeAttr, _binder, _target, _args, _modifiers, _culture, _namedParameters) = notRequired "InvokeMember" (nameText()) + override _.AssemblyQualifiedName = notRequired "AssemblyQualifiedName" (nameText()) + override _.GetConstructorImpl(_bindingAttr, _binder, _callConvention, _types, _modifiers) = notRequired "GetConstructorImpl" (nameText()) + override _.GetCustomAttributes(_inherit) = [| |] + override _.GetCustomAttributes(_attributeType, _inherit) = [| |] + override _.IsDefined(_attributeType, _inherit) = false // FSharp.Data addition: this was added to support arrays of arrays override this.MakeArrayType() = ProvidedSymbolType(SymbolKind.SDArray, [this]) :> Type override this.MakeArrayType arg = ProvidedSymbolType(SymbolKind.Array arg, [this]) :> Type @@ -1160,13 +1160,13 @@ type ProvidedSymbolMethod(genericMethodDefinition: MethodInfo, parameters: Type let convParam (p:ParameterInfo) = { new System.Reflection.ParameterInfo() with - override __.Name = p.Name - override __.ParameterType = ProvidedSymbolType.convType parameters p.ParameterType - override __.Attributes = p.Attributes - override __.RawDefaultValue = p.RawDefaultValue + override _.Name = p.Name + override _.ParameterType = ProvidedSymbolType.convType parameters p.ParameterType + override _.Attributes = p.Attributes + override _.RawDefaultValue = p.RawDefaultValue #if FX_NO_CUSTOMATTRIBUTEDATA #else - override __.GetCustomAttributesData() = p.GetCustomAttributesData() + override _.GetCustomAttributesData() = p.GetCustomAttributesData() #endif } @@ -1176,28 +1176,28 @@ type ProvidedSymbolMethod(genericMethodDefinition: MethodInfo, parameters: Type override this.GetGenericArguments() = Seq.skip (if this.DeclaringType.IsGenericType then this.DeclaringType.GetGenericArguments().Length else 0) parameters |> Seq.toArray - override __.GetGenericMethodDefinition() = genericMethodDefinition + override _.GetGenericMethodDefinition() = genericMethodDefinition - override __.DeclaringType = ProvidedSymbolType.convType parameters genericMethodDefinition.DeclaringType - override __.ToString() = "Method " + genericMethodDefinition.Name - override __.Name = genericMethodDefinition.Name - override __.MetadataToken = genericMethodDefinition.MetadataToken - override __.Attributes = genericMethodDefinition.Attributes - override __.CallingConvention = genericMethodDefinition.CallingConvention - override __.MemberType = genericMethodDefinition.MemberType + override _.DeclaringType = ProvidedSymbolType.convType parameters genericMethodDefinition.DeclaringType + override _.ToString() = "Method " + genericMethodDefinition.Name + override _.Name = genericMethodDefinition.Name + override _.MetadataToken = genericMethodDefinition.MetadataToken + override _.Attributes = genericMethodDefinition.Attributes + override _.CallingConvention = genericMethodDefinition.CallingConvention + override _.MemberType = genericMethodDefinition.MemberType - override __.IsDefined(_attributeType, _inherit) : bool = notRequired "IsDefined" genericMethodDefinition.Name - override __.ReturnType = ProvidedSymbolType.convType parameters genericMethodDefinition.ReturnType - override __.GetParameters() = genericMethodDefinition.GetParameters() |> Array.map convParam - override __.ReturnParameter = genericMethodDefinition.ReturnParameter |> convParam - override __.ReturnTypeCustomAttributes = notRequired "ReturnTypeCustomAttributes" genericMethodDefinition.Name - override __.GetBaseDefinition() = notRequired "GetBaseDefinition" genericMethodDefinition.Name - override __.GetMethodImplementationFlags() = notRequired "GetMethodImplementationFlags" genericMethodDefinition.Name - override __.MethodHandle = notRequired "MethodHandle" genericMethodDefinition.Name - override __.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired "Invoke" genericMethodDefinition.Name - override __.ReflectedType = notRequired "ReflectedType" genericMethodDefinition.Name - override __.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" genericMethodDefinition.Name - override __.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" genericMethodDefinition.Name + override _.IsDefined(_attributeType, _inherit) : bool = notRequired "IsDefined" genericMethodDefinition.Name + override _.ReturnType = ProvidedSymbolType.convType parameters genericMethodDefinition.ReturnType + override _.GetParameters() = genericMethodDefinition.GetParameters() |> Array.map convParam + override _.ReturnParameter = genericMethodDefinition.ReturnParameter |> convParam + override _.ReturnTypeCustomAttributes = notRequired "ReturnTypeCustomAttributes" genericMethodDefinition.Name + override _.GetBaseDefinition() = notRequired "GetBaseDefinition" genericMethodDefinition.Name + override _.GetMethodImplementationFlags() = notRequired "GetMethodImplementationFlags" genericMethodDefinition.Name + override _.MethodHandle = notRequired "MethodHandle" genericMethodDefinition.Name + override _.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired "Invoke" genericMethodDefinition.Name + override _.ReflectedType = notRequired "ReflectedType" genericMethodDefinition.Name + override _.GetCustomAttributes(_inherit) = notRequired "GetCustomAttributes" genericMethodDefinition.Name + override _.GetCustomAttributes(_attributeType, _inherit) = notRequired "GetCustomAttributes" genericMethodDefinition.Name @@ -1223,16 +1223,16 @@ type ProvidedMeasureBuilder() = static let theBuilder = ProvidedMeasureBuilder() static member Default = theBuilder - member __.One = typeof - member __.Product (m1,m2) = typedefof>.MakeGenericType [| m1;m2 |] - member __.Inverse m = typedefof>.MakeGenericType [| m |] + member _.One = typeof + member _.Product (m1,m2) = typedefof>.MakeGenericType [| m1;m2 |] + member _.Inverse m = typedefof>.MakeGenericType [| m |] member b.Ratio (m1, m2) = b.Product(m1, b.Inverse m2) member b.Square m = b.Product(m, m) // FSharp.Data change: if the unit is not a valid type, instead // of assuming it's a type abbreviation, which may not be the case and cause a // problem later on, check the list of valid abbreviations - member __.SI (m:string) = + member _.SI (m:string) = let mLowerCase = m.ToLowerInvariant() let abbreviation = if unitNamesTypeAbbreviations.Contains mLowerCase then @@ -1252,7 +1252,7 @@ type ProvidedMeasureBuilder() = | None -> typedefof>.Assembly.GetType("Microsoft.FSharp.Data.UnitSystems.SI.UnitNames." + mLowerCase) - member __.AnnotateType (basicType, annotation) = ProvidedSymbolType(Generic basicType, annotation) :> Type + member _.AnnotateType (basicType, annotation) = ProvidedSymbolType(Generic basicType, annotation) :> Type @@ -1369,53 +1369,53 @@ type ProvidedTypeDefinition(container:TypeContainer,className : string, baseType let customAttributesImpl = CustomAttributesImpl() - member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member __.HideObjectMethods with set v = customAttributesImpl.HideObjectMethods <- v - member __.NonNullable with set v = customAttributesImpl.NonNullable <- v - member __.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() - member __.AddCustomAttribute attribute = customAttributesImpl.AddCustomAttribute attribute + member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member _.HideObjectMethods with set v = customAttributesImpl.HideObjectMethods <- v + member _.NonNullable with set v = customAttributesImpl.NonNullable <- v + member _.GetCustomAttributesDataImpl() = customAttributesImpl.GetCustomAttributesData() + member _.AddCustomAttribute attribute = customAttributesImpl.AddCustomAttribute attribute #if FX_NO_CUSTOMATTRIBUTEDATA #else - override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() #endif - member __.ResetEnclosingType (ty) = + member _.ResetEnclosingType (ty) = container <- TypeContainer.Type ty new (assembly:Assembly,namespaceName,className,baseType) = new ProvidedTypeDefinition(TypeContainer.Namespace (assembly,namespaceName), className, baseType) new (className,baseType) = new ProvidedTypeDefinition(TypeContainer.TypeToBeDecided, className, baseType) // state ops - override __.UnderlyingSystemType = typeof + override _.UnderlyingSystemType = typeof - member __.SetEnumUnderlyingType(ty) = enumUnderlyingType <- ty + member _.SetEnumUnderlyingType(ty) = enumUnderlyingType <- ty - override __.GetEnumUnderlyingType() = if this.IsEnum then enumUnderlyingType else invalidOp "not enum type" + override _.GetEnumUnderlyingType() = if this.IsEnum then enumUnderlyingType else invalidOp "not enum type" - member __.SetBaseType t = baseType <- lazy Some t + member _.SetBaseType t = baseType <- lazy Some t - member __.SetBaseTypeDelayed baseTypeFunction = baseType <- lazy (Some (baseTypeFunction())) + member _.SetBaseTypeDelayed baseTypeFunction = baseType <- lazy (Some (baseTypeFunction())) - member __.SetAttributes x = attributes <- x + member _.SetAttributes x = attributes <- x // Add MemberInfos - member __.AddMembersDelayed(membersFunction : unit -> list<#MemberInfo>) = + member _.AddMembersDelayed(membersFunction : unit -> list<#MemberInfo>) = membersQueue.Add (fun () -> membersFunction() |> List.map (fun x -> patchUpAddedMemberInfo this x; x :> MemberInfo )) - member __.AddMembers(memberInfos:list<#MemberInfo>) = (* strict *) + member _.AddMembers(memberInfos:list<#MemberInfo>) = (* strict *) memberInfos |> List.iter (patchUpAddedMemberInfo this) // strict: patch up now membersQueue.Add (fun () -> memberInfos |> List.map (fun x -> x :> MemberInfo)) - member __.AddMember(memberInfo:MemberInfo) = + member _.AddMember(memberInfo:MemberInfo) = this.AddMembers [memberInfo] - member __.AddMemberDelayed(memberFunction : unit -> #MemberInfo) = + member _.AddMemberDelayed(memberFunction : unit -> #MemberInfo) = this.AddMembersDelayed(fun () -> [memberFunction()]) - member __.AddAssemblyTypesAsNestedTypesDelayed (assemblyf : unit -> System.Reflection.Assembly) = + member _.AddAssemblyTypesAsNestedTypesDelayed (assemblyf : unit -> System.Reflection.Assembly) = let bucketByPath nodef tipf (items: (string list * 'Value) list) = // Find all the items with an empty key list and call 'tipf' let tips = @@ -1453,15 +1453,15 @@ type ProvidedTypeDefinition(container:TypeContainer,className : string, baseType loop topTypes) /// Abstract a type to a parametric-type. Requires "formal parameters" and "instantiation function". - member __.DefineStaticParameters(staticParameters : list, apply : (string -> obj[] -> ProvidedTypeDefinition)) = + member _.DefineStaticParameters(staticParameters : list, apply : (string -> obj[] -> ProvidedTypeDefinition)) = staticParams <- staticParameters staticParamsApply <- Some apply /// Get ParameterInfo[] for the parametric type parameters (//s GetGenericParameters) - member __.GetStaticParameters() = [| for p in staticParams -> p :> ParameterInfo |] + member _.GetStaticParameters() = [| for p in staticParams -> p :> ParameterInfo |] /// Instantiate parametrics type - member __.MakeParametricType(name:string,args:obj[]) = + member _.MakeParametricType(name:string,args:obj[]) = if staticParams.Length>0 then if staticParams.Length <> args.Length then failwith (sprintf "ProvidedTypeDefinition: expecting %d static parameters but given %d for type %s" staticParams.Length args.Length (fullName.Force())) @@ -1472,31 +1472,31 @@ type ProvidedTypeDefinition(container:TypeContainer,className : string, baseType else failwith (sprintf "ProvidedTypeDefinition: static parameters supplied but not expected for %s" (fullName.Force())) - member __.DeclaringTypeImpl + member _.DeclaringTypeImpl with set x = match container with TypeContainer.TypeToBeDecided -> () | _ -> failwith (sprintf "container type for '%s' was already set to '%s'" this.FullName x.FullName); container <- TypeContainer.Type x // Implement overloads - override __.Assembly = theAssembly.Force() + override _.Assembly = theAssembly.Force() - member __.SetAssembly assembly = theAssembly <- lazy assembly + member _.SetAssembly assembly = theAssembly <- lazy assembly - member __.SetAssemblyLazy assembly = theAssembly <- assembly + member _.SetAssemblyLazy assembly = theAssembly <- assembly - override __.FullName = fullName.Force() + override _.FullName = fullName.Force() - override __.Namespace = rootNamespace.Force() + override _.Namespace = rootNamespace.Force() - override __.BaseType = match baseType.Value with Some ty -> ty | None -> null + override _.BaseType = match baseType.Value with Some ty -> ty | None -> null // Constructors - override __.GetConstructors bindingAttr = + override _.GetConstructors bindingAttr = [| for m in this.GetMembers bindingAttr do if m.MemberType = MemberTypes.Constructor then yield (m :?> ConstructorInfo) |] // Methods - override __.GetMethodImpl(name, bindingAttr, _binderBinder, _callConvention, _types, _modifiers) : MethodInfo = + override _.GetMethodImpl(name, bindingAttr, _binderBinder, _callConvention, _types, _modifiers) : MethodInfo = let membersWithName = [ for m in this.GetMembers(bindingAttr) do if m.MemberType.HasFlag(MemberTypes.Method) && m.Name = name then @@ -1506,52 +1506,52 @@ type ProvidedTypeDefinition(container:TypeContainer,className : string, baseType | [meth] -> meth :?> MethodInfo | _several -> failwith "GetMethodImpl. not support overloads" - override __.GetMethods bindingAttr = + override _.GetMethods bindingAttr = this.GetMembers bindingAttr |> Array.filter (fun m -> m.MemberType.HasFlag(MemberTypes.Method)) |> Array.map (fun m -> m :?> MethodInfo) // Fields - override __.GetField(name, bindingAttr) = + override _.GetField(name, bindingAttr) = let fields = [| for m in this.GetMembers bindingAttr do if m.MemberType.HasFlag(MemberTypes.Field) && (name = null || m.Name = name) then // REVIEW: name = null. Is that a valid query?! yield m |] if fields.Length > 0 then fields.[0] :?> FieldInfo else null - override __.GetFields bindingAttr = + override _.GetFields bindingAttr = [| for m in this.GetMembers bindingAttr do if m.MemberType.HasFlag(MemberTypes.Field) then yield m :?> FieldInfo |] - override __.GetInterface(_name, _ignoreCase) = notRequired "GetInterface" this.Name + override _.GetInterface(_name, _ignoreCase) = notRequired "GetInterface" this.Name - override __.GetInterfaces() = + override _.GetInterfaces() = [| yield! getInterfaces() |] - member __.GetInterfaceImplementations() = + member _.GetInterfaceImplementations() = [| yield! getInterfaces() |] - member __.AddInterfaceImplementation ityp = interfaceImpls.Add ityp + member _.AddInterfaceImplementation ityp = interfaceImpls.Add ityp - member __.AddInterfaceImplementationsDelayed itypf = interfaceImplsDelayed.Add itypf + member _.AddInterfaceImplementationsDelayed itypf = interfaceImplsDelayed.Add itypf - member __.GetMethodOverrides() = + member _.GetMethodOverrides() = [| yield! methodOverrides |] - member __.DefineMethodOverride (bodyMethInfo,declMethInfo) = methodOverrides.Add (bodyMethInfo, declMethInfo) + member _.DefineMethodOverride (bodyMethInfo,declMethInfo) = methodOverrides.Add (bodyMethInfo, declMethInfo) // Events - override __.GetEvent(name, bindingAttr) = + override _.GetEvent(name, bindingAttr) = let events = this.GetMembers bindingAttr |> Array.filter(fun m -> m.MemberType.HasFlag(MemberTypes.Event) && (name = null || m.Name = name)) if events.Length > 0 then events.[0] :?> EventInfo else null - override __.GetEvents bindingAttr = + override _.GetEvents bindingAttr = [| for m in this.GetMembers bindingAttr do if m.MemberType.HasFlag(MemberTypes.Event) then yield downcast m |] // Properties - override __.GetProperties bindingAttr = + override _.GetProperties bindingAttr = [| for m in this.GetMembers bindingAttr do if m.MemberType.HasFlag(MemberTypes.Property) then yield downcast m |] - override __.GetPropertyImpl(name, bindingAttr, binder, returnType, types, modifiers) = + override _.GetPropertyImpl(name, bindingAttr, binder, returnType, types, modifiers) = if returnType <> null then failwith "Need to handle specified return type in GetPropertyImpl" if types <> null then failwith "Need to handle specified parameter types in GetPropertyImpl" if modifiers <> null then failwith "Need to handle specified modifiers in GetPropertyImpl" @@ -1562,10 +1562,10 @@ type ProvidedTypeDefinition(container:TypeContainer,className : string, baseType else null // Nested Types - override __.MakeArrayType() = ProvidedSymbolType(SymbolKind.SDArray, [this]) :> Type - override __.MakeArrayType arg = ProvidedSymbolType(SymbolKind.Array arg, [this]) :> Type - override __.MakePointerType() = ProvidedSymbolType(SymbolKind.Pointer, [this]) :> Type - override __.MakeByRefType() = ProvidedSymbolType(SymbolKind.ByRef, [this]) :> Type + override _.MakeArrayType() = ProvidedSymbolType(SymbolKind.SDArray, [this]) :> Type + override _.MakeArrayType arg = ProvidedSymbolType(SymbolKind.Array arg, [this]) :> Type + override _.MakePointerType() = ProvidedSymbolType(SymbolKind.Pointer, [this]) :> Type + override _.MakeByRefType() = ProvidedSymbolType(SymbolKind.ByRef, [this]) :> Type // FSharp.Data addition: this method is used by Debug.fs and QuotationBuilder.fs // Emulate the F# type provider type erasure mechanism to get the @@ -1603,7 +1603,7 @@ type ProvidedTypeDefinition(container:TypeContainer,className : string, baseType // The binding attributes are always set to DeclaredOnly ||| Static ||| Instance ||| Public when GetMembers is called directly by the F# compiler // However, it's possible for the framework to generate other sets of flags in some corner cases (e.g. via use of `enum` with a provided type as the target) - override __.GetMembers bindingAttr = + override _.GetMembers bindingAttr = let mems = getMembers() |> Array.filter (fun mem -> @@ -1633,14 +1633,14 @@ type ProvidedTypeDefinition(container:TypeContainer,className : string, baseType let baseMems = (ProvidedTypeDefinition.EraseType this.BaseType).GetMembers bindingAttr Array.append mems baseMems - override __.GetNestedTypes bindingAttr = + override _.GetNestedTypes bindingAttr = this.GetMembers bindingAttr |> Array.filter(fun m -> m.MemberType.HasFlag(MemberTypes.NestedType) || // Allow 'fake' nested types that are actually real .NET types m.MemberType.HasFlag(MemberTypes.TypeInfo)) |> Array.map(fun m -> m :?> Type) - override __.GetMember(name,mt,_bindingAttr) = + override _.GetMember(name,mt,_bindingAttr) = let mt = if mt &&& MemberTypes.NestedType = MemberTypes.NestedType then mt ||| MemberTypes.TypeInfo @@ -1648,7 +1648,7 @@ type ProvidedTypeDefinition(container:TypeContainer,className : string, baseType mt getMembers() |> Array.filter(fun m->0<>(int(m.MemberType &&& mt)) && m.Name = name) - override __.GetNestedType(name, bindingAttr) = + override _.GetNestedType(name, bindingAttr) = let nt = this.GetMember(name, MemberTypes.NestedType ||| MemberTypes.TypeInfo, bindingAttr) match nt.Length with | 0 -> null @@ -1656,44 +1656,44 @@ type ProvidedTypeDefinition(container:TypeContainer,className : string, baseType | _ -> failwith (sprintf "There is more than one nested type called '%s' in type '%s'" name this.FullName) // Attributes, etc.. - override __.GetAttributeFlagsImpl() = adjustTypeAttributes attributes this.IsNested - override __.IsArrayImpl() = false - override __.IsByRefImpl() = false - override __.IsPointerImpl() = false - override __.IsPrimitiveImpl() = false - override __.IsCOMObjectImpl() = false - override __.HasElementTypeImpl() = false - override __.Name = className - override __.DeclaringType = declaringType.Force() - override __.MemberType = if this.IsNested then MemberTypes.NestedType else MemberTypes.TypeInfo - override __.GetHashCode() = rootNamespace.GetHashCode() ^^^ className.GetHashCode() - override __.Equals(that:obj) = + override _.GetAttributeFlagsImpl() = adjustTypeAttributes attributes this.IsNested + override _.IsArrayImpl() = false + override _.IsByRefImpl() = false + override _.IsPointerImpl() = false + override _.IsPrimitiveImpl() = false + override _.IsCOMObjectImpl() = false + override _.HasElementTypeImpl() = false + override _.Name = className + override _.DeclaringType = declaringType.Force() + override _.MemberType = if this.IsNested then MemberTypes.NestedType else MemberTypes.TypeInfo + override _.GetHashCode() = rootNamespace.GetHashCode() ^^^ className.GetHashCode() + override _.Equals(that:obj) = match that with | null -> false | :? ProvidedTypeDefinition as ti -> System.Object.ReferenceEquals(this,ti) | _ -> false - override __.GetGenericArguments() = [||] - override __.ToString() = this.Name + override _.GetGenericArguments() = [||] + override _.ToString() = this.Name - override __.Module : Module = notRequired "Module" this.Name - override __.GUID = Guid.Empty - override __.GetConstructorImpl(_bindingAttr, _binder, _callConvention, _types, _modifiers) = null - override __.GetCustomAttributes(_inherit) = [| |] - override __.GetCustomAttributes(_attributeType, _inherit) = [| |] - override __.IsDefined(_attributeType: Type, _inherit) = false - - override __.GetElementType() = notRequired "Module" this.Name - override __.InvokeMember(_name, _invokeAttr, _binder, _target, _args, _modifiers, _culture, _namedParameters) = notRequired "Module" this.Name - override __.AssemblyQualifiedName = notRequired "Module" this.Name - member __.IsErased + override _.Module : Module = notRequired "Module" this.Name + override _.GUID = Guid.Empty + override _.GetConstructorImpl(_bindingAttr, _binder, _callConvention, _types, _modifiers) = null + override _.GetCustomAttributes(_inherit) = [| |] + override _.GetCustomAttributes(_attributeType, _inherit) = [| |] + override _.IsDefined(_attributeType: Type, _inherit) = false + + override _.GetElementType() = notRequired "Module" this.Name + override _.InvokeMember(_name, _invokeAttr, _binder, _target, _args, _modifiers, _culture, _namedParameters) = notRequired "Module" this.Name + override _.AssemblyQualifiedName = notRequired "Module" this.Name + member _.IsErased with get() = (attributes &&& enum (int32 TypeProviderTypeAttributes.IsErased)) <> enum 0 and set v = if v then attributes <- attributes ||| enum (int32 TypeProviderTypeAttributes.IsErased) else attributes <- attributes &&& ~~~(enum (int32 TypeProviderTypeAttributes.IsErased)) - member __.SuppressRelocation + member _.SuppressRelocation with get() = (attributes &&& enum (int32 TypeProviderTypeAttributes.SuppressRelocate)) <> enum 0 and set v = if v then attributes <- attributes ||| enum (int32 TypeProviderTypeAttributes.SuppressRelocate) @@ -1719,11 +1719,11 @@ type AssemblyGenerator(assemblyFileName) = // lambda name should be unique across all types that all type provider might contribute in result assembly sprintf "Lambda%O" (Guid.NewGuid()) - member __.Assembly = assembly :> Assembly + member _.Assembly = assembly :> Assembly /// Emit the given provided type definitions into an assembly and adjust 'Assembly' property of all type definitions to return that /// assembly. - member __.Generate(providedTypeDefinitions:(ProvidedTypeDefinition * string list option) list) = + member _.Generate(providedTypeDefinitions:(ProvidedTypeDefinition * string list option) list) = let ALL = BindingFlags.Public ||| BindingFlags.NonPublic ||| BindingFlags.Static ||| BindingFlags.Instance // phase 1 - set assembly fields and emit type definitions begin @@ -2490,7 +2490,7 @@ type AssemblyGenerator(assemblyFileName) = #if FX_NO_LOCAL_FILESYSTEM #else - member __.GetFinalBytes() = + member _.GetFinalBytes() = let assemblyBytes = File.ReadAllBytes assemblyFileName let _assemblyLoadedInMemory = System.Reflection.Assembly.Load(assemblyBytes,null,System.Security.SecurityContextSource.CurrentAppDomain) //printfn "final bytes in '%s'" assemblyFileName @@ -2540,10 +2540,10 @@ module Local = let makeProvidedNamespace (namespaceName:string) (types:ProvidedTypeDefinition list) = let types = [| for ty in types -> ty :> Type |] {new IProvidedNamespace with - member __.GetNestedNamespaces() = [| |] - member __.NamespaceName = namespaceName - member __.GetTypes() = types |> Array.copy - member __.ResolveTypeName typeName : System.Type = + member _.GetNestedNamespaces() = [| |] + member _.NamespaceName = namespaceName + member _.GetTypes() = types |> Array.copy + member _.ResolveTypeName typeName : System.Type = match types |> Array.tryFind (fun ty -> ty.Name = typeName) with | Some ty -> ty | None -> null @@ -2578,7 +2578,7 @@ type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list] - member __.Disposing = disposing.Publish + member _.Disposing = disposing.Publish #if FX_NO_LOCAL_FILESYSTEM interface System.IDisposable with @@ -2587,7 +2587,7 @@ type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list Assembly - default __.ResolveAssembly(args) = + default _.ResolveAssembly(args) = let expectedName = (AssemblyName(args.Name)).Name + ".dll" let expectedLocationOpt = probingFolders @@ -2597,12 +2597,12 @@ type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list Assembly.LoadFrom f | None -> null - member __.RegisterProbingFolder (folder) = + member _.RegisterProbingFolder (folder) = // use GetFullPath to ensure that folder is valid ignore(IO.Path.GetFullPath folder) probingFolders.Add folder - member __.RegisterRuntimeAssemblyLocationAsProbingFolder (config : TypeProviderConfig) = + member _.RegisterRuntimeAssemblyLocationAsProbingFolder (config : TypeProviderConfig) = config.RuntimeAssembly |> IO.Path.GetDirectoryName |> this.RegisterProbingFolder @@ -2613,20 +2613,20 @@ type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list) = otherNamespaces.Add (namespaceName,types) + member _.AddNamespace (namespaceName,types:list<_>) = otherNamespaces.Add (namespaceName,types) // FSharp.Data addition: this method is used by Debug.fs - member __.Namespaces = Seq.readonly otherNamespaces + member _.Namespaces = Seq.readonly otherNamespaces member this.Invalidate() = invalidateE.Trigger(this,EventArgs()) - member __.GetStaticParametersForMethod(mb: MethodBase) = + member _.GetStaticParametersForMethod(mb: MethodBase) = printfn "In GetStaticParametersForMethod" match mb with | :? ProvidedMethod as t -> t.GetStaticParameters() | _ -> [| |] - member __.ApplyStaticArgumentsForMethod(mb: MethodBase, mangledName, objs) = + member _.ApplyStaticArgumentsForMethod(mb: MethodBase, mangledName, objs) = printfn "In ApplyStaticArgumentsForMethod" match mb with | :? ProvidedMethod as t -> t.ApplyStaticArguments(mangledName, objs) :> MethodBase @@ -2635,11 +2635,11 @@ type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list] - override __.Invalidate = invalidateE.Publish + override _.Invalidate = invalidateE.Publish - override __.GetNamespaces() = Array.copy providedNamespaces.Value + override _.GetNamespaces() = Array.copy providedNamespaces.Value - member __.GetInvokerExpression(methodBase, parameters) = + member _.GetInvokerExpression(methodBase, parameters) = let rec getInvokerExpression (methodBase : MethodBase) parameters = match methodBase with | :? ProvidedMethod as m when (match methodBase.DeclaringType with :? ProvidedTypeDefinition as pt -> pt.IsErased | _ -> true) -> @@ -2675,7 +2675,7 @@ type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list m.GetCustomAttributesDataImpl() | :? ProvidedMethod as m -> m.GetCustomAttributesDataImpl() @@ -2686,14 +2686,14 @@ type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list m.GetCustomAttributesDataImpl() | _ -> [| |] :> IList<_> - member __.GetParameterCustomAttributesData(methodBase) = + member _.GetParameterCustomAttributesData(methodBase) = match methodBase with | :? ProvidedParameter as m -> m.GetCustomAttributesDataImpl() | _ -> [| |] :> IList<_> #endif - override __.GetStaticParameters(ty) = + override _.GetStaticParameters(ty) = match ty with | :? ProvidedTypeDefinition as t -> if ty.Name = t.Name (* REVIEW: use equality? *) then @@ -2702,14 +2702,14 @@ type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list [| |] - override __.ApplyStaticArguments(ty,typePathAfterArguments:string[],objs) = + override _.ApplyStaticArguments(ty,typePathAfterArguments:string[],objs) = let typePathAfterArguments = typePathAfterArguments.[typePathAfterArguments.Length-1] match ty with | :? ProvidedTypeDefinition as t -> (t.MakeParametricType(typePathAfterArguments,objs) :> Type) | _ -> failwith (sprintf "ApplyStaticArguments: static params for type %s are unexpected" ty.FullName) #if FX_NO_LOCAL_FILESYSTEM - override __.GetGeneratedAssemblyContents(_assembly) = + override _.GetGeneratedAssemblyContents(_assembly) = // TODO: this is very fake, we rely on the fact it is never needed match System.Windows.Application.GetResourceStream(System.Uri("FSharp.Core.dll",System.UriKind.Relative)) with | null -> failwith "FSharp.Core.dll not found as Manifest Resource, we're just trying to read some random .NET assembly, ok?" @@ -2725,7 +2725,7 @@ type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list bytes.Force() diff --git a/tests/service/data/TestTP/TestTP.fsproj b/tests/service/data/TestTP/TestTP.fsproj index 4343a1d8a4a..442fc909f7a 100644 --- a/tests/service/data/TestTP/TestTP.fsproj +++ b/tests/service/data/TestTP/TestTP.fsproj @@ -5,7 +5,7 @@ net472 true nunit - --nowarn:3390 --nowarn:3218 + $(OtherFlags) --nowarn:3390 --nowarn:3218 diff --git a/tests/walkthroughs/DebugStepping/TheBigFileOfDebugStepping.fsx b/tests/walkthroughs/DebugStepping/TheBigFileOfDebugStepping.fsx index 6a99c01e5e7..b5dcc2d6f0b 100644 --- a/tests/walkthroughs/DebugStepping/TheBigFileOfDebugStepping.fsx +++ b/tests/walkthroughs/DebugStepping/TheBigFileOfDebugStepping.fsx @@ -168,6 +168,24 @@ let ListExpressionSteppingTest6 () = printfn "goodbye" yield x ] +let ListExpressionSteppingTest7 () = + [ for x in 1..4 do + printfn "hello" + yield x ] + +let ListExpressionSteppingTest8 () = + [ for x in 1..4 do + match x with + | 1 -> + printfn "hello" + yield x + | 2 -> + printfn "hello" + yield x + | _ -> + yield x + ] + let SeqExpressionSteppingTest1 () = seq { yield 1 } @@ -674,6 +692,8 @@ ListExpressionSteppingTest3() ListExpressionSteppingTest4() ListExpressionSteppingTest5() ListExpressionSteppingTest6() +ListExpressionSteppingTest7() +ListExpressionSteppingTest8() SeqExpressionSteppingTest1()|> Seq.length SeqExpressionSteppingTest2()|> Seq.length SeqExpressionSteppingTest3()|> Seq.length diff --git a/tests/walkthroughs/sdk-script-manual-tests/README.md.txt b/tests/walkthroughs/sdk-script-manual-tests/README.md.txt new file mode 100644 index 00000000000..7d0428ddc0c --- /dev/null +++ b/tests/walkthroughs/sdk-script-manual-tests/README.md.txt @@ -0,0 +1,84 @@ + + + +#### no warnings + +``` +artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\netcore-script.fsx +artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\netfx-script.fsx +artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\neutral-script.fsx +artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\netcore-script-reference-netcore-script.fsx +artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\netcore-script-reference-neutral-script.fsx +artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\netfx-script-reference-netfx-script.fsx +artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\netfx-script-reference-neutral-script.fsx +artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\neutral-script-reference-netcore-script.fsx +artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\neutral-script-reference-netfx-script.fsx +artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\neutral-script-reference-neutral-script.fsx +``` +#### warnings + +``` +artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\netcore-script-reference-netfx-script.fsx +artifacts\bin\fsc\Debug\net472\fsc.exe c:\misc\tests\netfx-script-reference-netcore-script.fsx +``` + + +``` +dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\netcore-script.fsx +dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\netfx-script.fsx +dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\neutral-script.fsx +dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\netcore-script-reference-netcore-script.fsx +dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\netcore-script-reference-netfx-script.fsx +dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\netcore-script-reference-neutral-script.fsx +dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\netfx-script-reference-netcore-script.fsx +dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\netfx-script-reference-netfx-script.fsx +dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\netfx-script-reference-neutral-script.fsx +dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\neutral-script-reference-netcore-script.fsx +dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\neutral-script-reference-netfx-script.fsx +dotnet artifacts\bin\fsc\Debug\netcoreapp3.1\fsc.exe c:\misc\tests\neutral-script-reference-neutral-script.fsx +``` + +#### no warnings + +``` +artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\netfx-script.fsx +artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\neutral-script.fsx +artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\netfx-script-reference-netfx-script.fsx +artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\netfx-script-reference-neutral-script.fsx +artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\neutral-script-reference-netfx-script.fsx +artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\neutral-script-reference-neutral-script.fsx +``` + +#### warnings + +``` +artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\netcore-script.fsx +artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\netcore-script-reference-netcore-script.fsx +artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\netcore-script-reference-netfx-script.fsx +artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\netcore-script-reference-neutral-script.fsx +artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\netfx-script-reference-netcore-script.fsx +artifacts\bin\fsi\Debug\net472\fsi.exe c:\misc\tests\neutral-script-reference-netcore-script.fsx +``` + +#### no warnings + +``` +dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\netcore-script.fsx +dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\neutral-script.fsx +dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\netcore-script-reference-netcore-script.fsx +dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\netcore-script-reference-netfx-script.fsx +dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\netcore-script-reference-neutral-script.fsx +``` + +#### warnings + +``` +dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\netfx-script.fsx +dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\netfx-script-reference-netcore-script.fsx +dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\netfx-script-reference-netfx-script.fsx +dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\netfx-script-reference-neutral-script.fsx +dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\neutral-script-reference-netcore-script.fsx +dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\neutral-script-reference-netfx-script.fsx +dotnet artifacts\bin\fsi\Debug\netcoreapp3.1\fsi.exe c:\misc\tests\neutral-script-reference-neutral-script.fsx + +``` \ No newline at end of file diff --git a/tests/walkthroughs/sdk-script-manual-tests/netcore-script-reference-netcore-script.fsx b/tests/walkthroughs/sdk-script-manual-tests/netcore-script-reference-netcore-script.fsx new file mode 100644 index 00000000000..c2dea42e0a1 --- /dev/null +++ b/tests/walkthroughs/sdk-script-manual-tests/netcore-script-reference-netcore-script.fsx @@ -0,0 +1,9 @@ + +#r "System.dll" +//#r "nuget: FSharp.Data" +//#r "nuget: Quack" +printfn "hello from %s" __SOURCE_FILE__ +#r "netstandard.dll" + +#load "netcore-script.fsx" + diff --git a/tests/walkthroughs/sdk-script-manual-tests/netcore-script.fsx b/tests/walkthroughs/sdk-script-manual-tests/netcore-script.fsx new file mode 100644 index 00000000000..025547c8450 --- /dev/null +++ b/tests/walkthroughs/sdk-script-manual-tests/netcore-script.fsx @@ -0,0 +1,26 @@ + +#r "System.dll" + +printfn "hello from %s" __SOURCE_FILE__ + +System.Environment.CurrentDirectory + +#r "netstandard.dll" + +// A .netcoreapp3.1 api +let f x = System.Runtime.InteropServices.NativeLibrary.Free(x) + +1+1 + + +//#r "nuget: DiffSharp.Core,1.0.0-preview-263264614" + +//#r "nuget: Quack" + + + + +//#r "System.EnterpriseServices.dll" +//// A netfx api +//let f2 (x: System.EnterpriseServices.Activity) = () + diff --git a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-3.1.0/global.json b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-3.1.0/global.json new file mode 100644 index 00000000000..c120c8115ea --- /dev/null +++ b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-3.1.0/global.json @@ -0,0 +1,5 @@ +{ + "sdk": { + "version": "3.1.301" + } +} \ No newline at end of file diff --git a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-3.1.0/netcore-script-sdk-3.1.0.fsx b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-3.1.0/netcore-script-sdk-3.1.0.fsx new file mode 100644 index 00000000000..14bc4a2334f --- /dev/null +++ b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-3.1.0/netcore-script-sdk-3.1.0.fsx @@ -0,0 +1,26 @@ + +#r "System.dll" + +printfn "hello from %s" __SOURCE_FILE__ + +System.Environment.CurrentDirectory + +#r "netstandard.dll" + +// A .netcoreapp3.1 api +let f x = System.Runtime.InteropServices.NativeLibrary.Free(x) + + +1+1 + +#r "nuget: DiffSharp.Core,1.0.0-preview-263264614" + +//#r "nuget: Quack" + + + + +//#r "System.EnterpriseServices.dll" +//// A netfx api +//let f2 (x: System.EnterpriseServices.Activity) = () + diff --git a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-5.0.101/global.json b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-5.0.101/global.json new file mode 100644 index 00000000000..fbb332028b9 --- /dev/null +++ b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-5.0.101/global.json @@ -0,0 +1,5 @@ +{ + "sdk": { + "version": "5.0.101" + } +} \ No newline at end of file diff --git a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-5.0.101/netcore-script-sdk-5.0.101.fsx b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-5.0.101/netcore-script-sdk-5.0.101.fsx new file mode 100644 index 00000000000..53ee539c4a8 --- /dev/null +++ b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-5.0.101/netcore-script-sdk-5.0.101.fsx @@ -0,0 +1,26 @@ + +#r "System.dll" + +printfn "hello from %s" __SOURCE_FILE__ + +System.Environment.CurrentDirectory + +#r "netstandard.dll" + +// A .netcoreapp3.1 api +let f x = System.Runtime.InteropServices.NativeLibrary.Free(x) + + +1+1 + +//#r "nuget: DiffSharp.Core,1.0.0-preview-263264614" + +//#r "nuget: Quack" + + + + +//#r "System.EnterpriseServices.dll" +//// A netfx api +//let f2 (x: System.EnterpriseServices.Activity) = () + diff --git a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/global.json b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/global.json new file mode 100644 index 00000000000..7337e805efb --- /dev/null +++ b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/global.json @@ -0,0 +1,5 @@ +{ + "sdk": { + "version": "666.666.666" + } +} \ No newline at end of file diff --git a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/netcore-script-sdk-666.666.666 - Copy.fsx b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/netcore-script-sdk-666.666.666 - Copy.fsx new file mode 100644 index 00000000000..53f3881d296 --- /dev/null +++ b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/netcore-script-sdk-666.666.666 - Copy.fsx @@ -0,0 +1,13 @@ + +#r "System.dll" + +printfn "hello from %s" __SOURCE_FILE__ + +System.Environment.CurrentDirectory + +#r "netstandard.dll" + +// A .netcoreapp3.1 api +let f x = System.Runtime.InteropServices.NativeLibrary.Free(x) + +1+1 diff --git a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/netcore-script-sdk-666.666.666.fsx b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/netcore-script-sdk-666.666.666.fsx new file mode 100644 index 00000000000..7756ebcebbf --- /dev/null +++ b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.666/netcore-script-sdk-666.666.666.fsx @@ -0,0 +1,14 @@ + +#r "System.dll" + +printfn "hello from %s" __SOURCE_FILE__ + +System.Environment.CurrentDirectory + +#r "netstandard.dll" + +// A .netcoreapp3.1 api +let f x = System.Runtime.InteropServices.NativeLibrary.Free(x) + + +1+1 diff --git a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.667/global.json b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.667/global.json new file mode 100644 index 00000000000..7337e805efb --- /dev/null +++ b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.667/global.json @@ -0,0 +1,5 @@ +{ + "sdk": { + "version": "666.666.666" + } +} \ No newline at end of file diff --git a/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.667/netcore-script-sdk-666.666.666.fsx b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.667/netcore-script-sdk-666.666.666.fsx new file mode 100644 index 00000000000..7756ebcebbf --- /dev/null +++ b/tests/walkthroughs/sdk-script-manual-tests/with-sdk-666.666.667/netcore-script-sdk-666.666.666.fsx @@ -0,0 +1,14 @@ + +#r "System.dll" + +printfn "hello from %s" __SOURCE_FILE__ + +System.Environment.CurrentDirectory + +#r "netstandard.dll" + +// A .netcoreapp3.1 api +let f x = System.Runtime.InteropServices.NativeLibrary.Free(x) + + +1+1 diff --git a/vsintegration/Directory.Build.targets b/vsintegration/Directory.Build.targets index 3eb8d6a5df3..170ace14822 100644 --- a/vsintegration/Directory.Build.targets +++ b/vsintegration/Directory.Build.targets @@ -2,10 +2,6 @@ - - true - - @@ -17,8 +13,8 @@ - + diff --git a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj index 889923f5f98..ee7baed3960 100644 --- a/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj +++ b/vsintegration/ProjectTemplates/ConsoleProject/Template/ConsoleApplication.fsproj @@ -3,6 +3,7 @@ Exe $if$ ($targetframeworkversion$ == 4.5) net45$endif$$if$ ($targetframeworkversion$ == 4.6) net46 $endif$$if$ ($targetframeworkversion$ == 4.6.1) net461 $endif$$if$ ($targetframeworkversion$ == 4.6.2) net462 $endif$$if$ ($targetframeworkversion$ == 4.7) net47 $endif$$if$ ($targetframeworkversion$ == 4.7.1) net471 $endif$$if$ ($targetframeworkversion$ == 4.7.2) net472 $endif$$if$ ($targetframeworkversion$ == 4.8) net48 $endif$ $if$ ($safeprojectname$ != $projectname$) $safeprojectname$ $endif$ + 3390;$(WarnOn) diff --git a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj index 2b34dbdff03..736dff548d6 100644 --- a/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj +++ b/vsintegration/ProjectTemplates/LibraryProject/Template/Library.fsproj @@ -3,6 +3,7 @@ $if$ ($targetframeworkversion$ == 4.5) net45$endif$$if$ ($targetframeworkversion$ == 4.6) net46 $endif$$if$ ($targetframeworkversion$ == 4.6.1) net461 $endif$$if$ ($targetframeworkversion$ == 4.6.2) net462 $endif$$if$ ($targetframeworkversion$ == 4.7) net47 $endif$$if$ ($targetframeworkversion$ == 4.7.1) net471 $endif$$if$ ($targetframeworkversion$ == 4.7.2) net472 $endif$$if$ ($targetframeworkversion$ == 4.8) net48 $endif$ $if$ ($safeprojectname$ != $projectname$) $safeprojectname$ $endif$ true + 3390;$(WarnOn) diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj index 0b2f380c5dd..83103261b80 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsproj @@ -3,6 +3,7 @@ Exe $if$ ($targetframeworkversion$ == 4.5) net45$endif$$if$ ($targetframeworkversion$ == 4.6) net46 $endif$$if$ ($targetframeworkversion$ == 4.6.1) net461 $endif$$if$ ($targetframeworkversion$ == 4.6.2) net462 $endif$$if$ ($targetframeworkversion$ == 4.7) net47 $endif$$if$ ($targetframeworkversion$ == 4.7.1) net471 $endif$$if$ ($targetframeworkversion$ == 4.7.2) net472 $endif$$if$ ($targetframeworkversion$ == 4.8) net48 $endif$ $if$ ($safeprojectname$ != $projectname$) $safeprojectname$ $endif$ + 3390;$(WarnOn) diff --git a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsx b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsx index 52b6649ca38..741e8c5a866 100644 --- a/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsx +++ b/vsintegration/ProjectTemplates/TutorialProject/Template/Tutorial.fsx @@ -1,4 +1,4 @@ -// @@@SampleHeader|This sample will guide you through elements of the F# language.@@@ +// @@@SampleHeader|This sample will guide you through elements of the F# language.@@@ // // ******************************************************************************************************* // @@@Instructions-Line1|To execute the code in F# Interactive, highlight a section of code and press Alt-Enter or right-click@@@ @@ -986,12 +986,3 @@ module Events = // @@@TriggerEventWithArgs|Next, trigger this event (note that sender argument should be set).@@@ eventForDelegateType.Trigger(null, EventArgs.Empty) - - - -#if COMPILED -module BoilerPlateForForm = - [] - do () - do System.Windows.Forms.Application.Run() -#endif diff --git a/vsintegration/Vsix/VisualFSharpFull/Properties/launchSettings.json b/vsintegration/Vsix/VisualFSharpFull/Properties/launchSettings.json index 18d884aa2e7..a3e00ad6bec 100644 --- a/vsintegration/Vsix/VisualFSharpFull/Properties/launchSettings.json +++ b/vsintegration/Vsix/VisualFSharpFull/Properties/launchSettings.json @@ -1,6 +1,6 @@ { "profiles": { - "VisualFSharpFull": { + "VisualFSharpDebug": { "commandName": "Executable", "executablePath": "$(DevEnvDir)devenv.exe", "commandLineArgs": "/rootsuffix $(VSSDKTargetPlatformRegRootSuffix) /log" diff --git a/vsintegration/Vsix/VisualFSharpFull/Source.extension.vsixmanifest b/vsintegration/Vsix/VisualFSharpFull/Source.extension.vsixmanifest index ddefbd74b71..c6294c49632 100644 --- a/vsintegration/Vsix/VisualFSharpFull/Source.extension.vsixmanifest +++ b/vsintegration/Vsix/VisualFSharpFull/Source.extension.vsixmanifest @@ -15,7 +15,8 @@ - + + @@ -29,7 +30,6 @@ - diff --git a/vsintegration/Vsix/VisualFSharpFull/VisualFSharp.Core.targets b/vsintegration/Vsix/VisualFSharpFull/VisualFSharp.Core.targets new file mode 100644 index 00000000000..3650e6ef923 --- /dev/null +++ b/vsintegration/Vsix/VisualFSharpFull/VisualFSharp.Core.targets @@ -0,0 +1,256 @@ + + + + + + + Designer + + + + RegisterFsharpPackage.pkgdef + {{FSProductVersion}} + $(FSProductVersion) + {{FSLanguageVersion}} + $(FSLanguageVersion) + true + RegisterFsharpPackage.pkgdef + + + + PreserveNewest + License.txt + true + + + + + + {702A7979-BCF9-4C41-853E-3ADFC9897890} + FSharp.Build + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + TargetFramework=$(DependencyTargetFramework) + + + + {649FA588-F02E-457C-9FCF-87E46407481E} + FSharp.Compiler.Interactive.Settings + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + TargetFramework=netstandard2.0 + + + + {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06} + FSharp.Compiler.Server.Shared + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + TargetFramework=$(DependencyTargetFramework) + + + + {A59DB8AE-8044-41A5-848A-800A7FF31C93} + FSharp.Compiler.Service + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + TargetFramework=$(DependencyTargetFramework) + + + + {DED3BBD7-53F4-428A-8C9F-27968E768605} + FSharp.Core + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + TargetFramework=netstandard2.0 + + + + false + False + + + + false + False + + + + false + False + + + + {65e0e82a-eace-4787-8994-888674c2fe87} + FSharp.Editor + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + + + + {c4586a06-1402-48bc-8e35-a1b8642f895b} + FSharp.UIResources + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + True + + + + {1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF} + FSharp.LanguageService.Base + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + + + + {EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F} + FSharp.LanguageService + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + + + + {B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7} + ProjectSystem.Base + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + + + + {6196B0F8-CAEA-4CF1-AF82-1B520F77FE44} + ProjectSystem + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + + + + {FCFB214C-462E-42B3-91CA-FC557EFEE74F} + FSharp.PropertiesPages + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + + + + {991DCF75-C2EB-42B6-9A0D-AA1D2409D519} + FSharp.VS.FSI + BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b + DebugSymbolsProjectOutputGroup%3b + true + All + 2 + True + + + + {6ba13aa4-c25f-480f-856b-8e8000299a72} + AppConfig + ItemTemplates + TemplateProjectOutputGroup%3b + false + True + + + + {12ac2813-e895-4aaa-ae6c-94e21da09f64} + CodeFile + ItemTemplates + TemplateProjectOutputGroup%3b + false + True + + + + {0385564F-07B4-4264-AB8A-17C393E9140C} + ResourceFile + 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 + + + + + + + + + \ No newline at end of file diff --git a/vsintegration/Vsix/VisualFSharpFull/VisualFSharpDebug.csproj b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpDebug.csproj new file mode 100644 index 00000000000..3c667559ccb --- /dev/null +++ b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpDebug.csproj @@ -0,0 +1,55 @@ + + + + + + Library + Microsoft\FSharp + netcoreapp1.0 + true + net472 + + + + + + + + + + + + + + Tools/%(_XlfLanguages.Identity) + true + + + + Tools/%(_XlfLanguages.Identity) + true + + + + Tools/%(_XlfLanguages.Identity) + true + + + + Tools + true + + + + Tools + true + + + + Tools + true + + + + + diff --git a/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj index be3261418ec..10c18b8530e 100644 --- a/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj +++ b/vsintegration/Vsix/VisualFSharpFull/VisualFSharpFull.csproj @@ -8,280 +8,10 @@ netcoreapp1.0 true net472 + + false - - - Designer - + - - RegisterFsharpPackage.pkgdef - {{FSProductVersion}} - $(FSProductVersion) - {{FSLanguageVersion}} - $(FSLanguageVersion) - true - RegisterFsharpPackage.pkgdef - - - - PreserveNewest - License.txt - true - - - - - - {702A7979-BCF9-4C41-853E-3ADFC9897890} - FSharp.Build - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - TargetFramework=$(DependencyTargetFramework) - - - {649FA588-F02E-457C-9FCF-87E46407481E} - FSharp.Compiler.Interactive.Settings - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - TargetFramework=netstandard2.0 - - - {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06} - FSharp.Compiler.Server.Shared - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - TargetFramework=$(DependencyTargetFramework) - - - {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3} - FSharp.Compiler.Private - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - TargetFramework=$(DependencyTargetFramework) - - - FSharp.DependencyManager.Nuget - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - TargetFramework=netstandard2.0 - - - Microsoft.DotNet.DependencyManager - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - TargetFramework=net472 - - - {DED3BBD7-53F4-428A-8C9F-27968E768605} - FSharp.Core - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - TargetFramework=netstandard2.0 - - - {8B3E283D-B5FE-4055-9D80-7E3A32F3967B} - FsiAnyCpu - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3b - DebugSymbolsProjectOutputGroup%3b - true - [installDir]\Common7\IDE\CommonExtensions\Microsoft\FSharp\fsiAnyCpu.exe - X64 - 2 - True - TargetFramework=$(DependencyTargetFramework) - - - {D0E98C0D-490B-4C61-9329-0862F6E87645} - Fsi - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3b - DebugSymbolsProjectOutputGroup%3b - true - [installDir]\Common7\IDE\CommonExtensions\Microsoft\FSharp\fsi.exe - X86 - 2 - True - TargetFramework=$(DependencyTargetFramework) - - - {C94C257C-3C0A-4858-B5D8-D746498D1F08} - fsc - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3b - DebugSymbolsProjectOutputGroup%3b - true - [installDir]\Common7\IDE\CommonExtensions\Microsoft\FSharp\fsc.exe - All - 2 - True - TargetFramework=$(DependencyTargetFramework) - - - {65e0e82a-eace-4787-8994-888674c2fe87} - FSharp.Editor - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - - - {c4586a06-1402-48bc-8e35-a1b8642f895b} - FSharp.UIResources - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - True - - - {1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF} - FSharp.LanguageService.Base - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - - - {EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F} - FSharp.LanguageService - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - - - {B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7} - ProjectSystem.Base - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - - - {6196B0F8-CAEA-4CF1-AF82-1B520F77FE44} - ProjectSystem - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - - - {FCFB214C-462E-42B3-91CA-FC557EFEE74F} - FSharp.PropertiesPages - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - - - {991DCF75-C2EB-42B6-9A0D-AA1D2409D519} - FSharp.VS.FSI - BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bPkgDefProjectOutputGroup%3bSatelliteDllsProjectOutputGroup%3b - DebugSymbolsProjectOutputGroup%3b - true - All - 2 - True - - - - {6ba13aa4-c25f-480f-856b-8e8000299a72} - AppConfig - ItemTemplates - TemplateProjectOutputGroup%3b - false - True - - - {12ac2813-e895-4aaa-ae6c-94e21da09f64} - CodeFile - ItemTemplates - TemplateProjectOutputGroup%3b - false - True - - - {0385564F-07B4-4264-AB8A-17C393E9140C} - ResourceFile - 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 - - - - - - - - + \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/AutomaticCompletion/BraceCompletionSessionProvider.fs b/vsintegration/src/FSharp.Editor/AutomaticCompletion/BraceCompletionSessionProvider.fs index 0ee68698c2e..184dbcf959d 100644 --- a/vsintegration/src/FSharp.Editor/AutomaticCompletion/BraceCompletionSessionProvider.fs +++ b/vsintegration/src/FSharp.Editor/AutomaticCompletion/BraceCompletionSessionProvider.fs @@ -76,11 +76,11 @@ type BraceCompletionSession let mutable openingPoint : ITrackingPoint = null let editorOperations = editorOperationsFactoryService.GetEditorOperations(textView) - member __.EndSession() = + member _.EndSession() = closingPoint <- null openingPoint <- null - member __.CreateUndoTransaction() = + member _.CreateUndoTransaction() = undoHistory.CreateTransaction(BraceCompletion) member this.Start (cancellationToken: CancellationToken) = @@ -148,7 +148,7 @@ type BraceCompletionSession undo.Complete() - member __.HasNoForwardTyping(caretPoint: SnapshotPoint, endPoint: SnapshotPoint) = + member _.HasNoForwardTyping(caretPoint: SnapshotPoint, endPoint: SnapshotPoint) = Debug.Assert(caretPoint.Snapshot = endPoint.Snapshot, "snapshots do not match") if caretPoint.Snapshot = endPoint.Snapshot then @@ -173,7 +173,7 @@ type BraceCompletionSession else false - member __.MoveCaretToClosingPoint() = + member _.MoveCaretToClosingPoint() = let closingSnapshotPoint = closingPoint.GetPoint(subjectBuffer.CurrentSnapshot) // find the position just after the closing brace in the view's text buffer @@ -217,7 +217,7 @@ type BraceCompletionSession undo.Complete() this.EndSession() - member __.PostBackspace() = () + member _.PostBackspace() = () member this.PreOverType handledCommand = handledCommand <- false @@ -259,7 +259,7 @@ type BraceCompletionSession undo.Complete() | _ -> () - member __.PostOverType() = () + member _.PostOverType() = () member this.PreTab handledCommand = handledCommand <- false @@ -274,7 +274,7 @@ type BraceCompletionSession editorOperations.AddAfterTextBufferChangePrimitive() undo.Complete() - member __.PreReturn handledCommand = + member _.PreReturn handledCommand = handledCommand <- false member this.PostReturn() = @@ -286,26 +286,26 @@ type BraceCompletionSession session.AfterReturn(this, CancellationToken.None) | _ -> () - member __.Finish() = () + member _.Finish() = () - member __.PostTab() = () + member _.PostTab() = () - member __.PreDelete handledCommand = + member _.PreDelete handledCommand = handledCommand <- false - member __.PostDelete() = () + member _.PostDelete() = () - member __.OpeningBrace = openingBrace + member _.OpeningBrace = openingBrace - member __.ClosingBrace = closingBrace + member _.ClosingBrace = closingBrace - member __.OpeningPoint = openingPoint + member _.OpeningPoint = openingPoint - member __.ClosingPoint = closingPoint + member _.ClosingPoint = closingPoint - member __.SubjectBuffer = subjectBuffer + member _.SubjectBuffer = subjectBuffer - member __.TextView = textView + member _.TextView = textView module Parenthesis = @@ -372,50 +372,50 @@ type ParenthesisCompletionSession() = interface IEditorBraceCompletionSession with - member __.AfterReturn(_session, _cancellationToken) = + member _.AfterReturn(_session, _cancellationToken) = () - member __.AfterStart(_session, _cancellationToken) = + member _.AfterStart(_session, _cancellationToken) = () - member __.AllowOverType(_session, _cancellationToken) = + member _.AllowOverType(_session, _cancellationToken) = true - member __.CheckOpeningPoint(_session, _cancellationToken) = + member _.CheckOpeningPoint(_session, _cancellationToken) = true type DoubleQuoteCompletionSession() = interface IEditorBraceCompletionSession with - member __.AfterReturn(_session, _cancellationToken) = + member _.AfterReturn(_session, _cancellationToken) = () - member __.AfterStart(_session, _cancellationToken) = + member _.AfterStart(_session, _cancellationToken) = () - member __.AllowOverType(_session, _cancellationToken) = + member _.AllowOverType(_session, _cancellationToken) = true - member __.CheckOpeningPoint(_session, _cancellationToken) = + member _.CheckOpeningPoint(_session, _cancellationToken) = true type VerticalBarCompletionSession() = interface IEditorBraceCompletionSession with - member __.AfterReturn(_session, _cancellationToken) = + member _.AfterReturn(_session, _cancellationToken) = () - member __.AfterStart(_session, _cancellationToken) = + member _.AfterStart(_session, _cancellationToken) = () - member __.AllowOverType(_session, _cancellationToken) = + member _.AllowOverType(_session, _cancellationToken) = true (* This is for [| |] and {| |} , since the implementation deals with chars only. We have to test if there is a { or [ before the cursor position and insert the closing '|'. *) - member __.CheckOpeningPoint(session, _cancellationToken) = + member _.CheckOpeningPoint(session, _cancellationToken) = tryInsertAdditionalBracePair session CurlyBrackets.OpenCharacter CurlyBrackets.CloseCharacter || tryInsertAdditionalBracePair session SquareBrackets.OpenCharacter SquareBrackets.CloseCharacter @@ -423,18 +423,18 @@ type AngleBracketCompletionSession() = interface IEditorBraceCompletionSession with - member __.AfterReturn(_session, _cancellationToken) = + member _.AfterReturn(_session, _cancellationToken) = () - member __.AfterStart(_session, _cancellationToken) = + member _.AfterStart(_session, _cancellationToken) = () - member __.AllowOverType(_session, _cancellationToken) = + member _.AllowOverType(_session, _cancellationToken) = true (* This is for attributes [< >] , since the implementation deals with chars only. We have to test if there is a [ before the cursor position and insert the closing '>'. *) - member __.CheckOpeningPoint(session, _cancellationToken) = + member _.CheckOpeningPoint(session, _cancellationToken) = tryInsertAdditionalBracePair session SquareBrackets.OpenCharacter SquareBrackets.CloseCharacter (* For multi-line comments, test if it is between "()" *) @@ -442,18 +442,18 @@ type AsteriskCompletionSession() = interface IEditorBraceCompletionSession with - member __.AfterReturn(_session, _cancellationToken) = + member _.AfterReturn(_session, _cancellationToken) = () - member __.AfterStart(_session, _cancellationToken) = + member _.AfterStart(_session, _cancellationToken) = () - member __.AllowOverType(_session, _cancellationToken) = + member _.AllowOverType(_session, _cancellationToken) = true (* This is for attributes [< >] , since the implementation deals with chars only. We have to test if there is a [ before the cursor position and insert the closing '>'. *) - member __.CheckOpeningPoint(session, _cancellationToken) = + member _.CheckOpeningPoint(session, _cancellationToken) = tryInsertAdditionalBracePair session Parenthesis.OpenCharacter Parenthesis.CloseCharacter [, FSharpConstants.FSharpLanguageName)>] @@ -465,14 +465,14 @@ type EditorBraceCompletionSessionFactory() = | ClassificationTypeNames.StringLiteral -> false | _ -> true - member __.IsSupportedOpeningBrace openingBrace = + member _.IsSupportedOpeningBrace openingBrace = match openingBrace with | Parenthesis.OpenCharacter | CurlyBrackets.OpenCharacter | SquareBrackets.OpenCharacter | DoubleQuote.OpenCharacter | VerticalBar.OpenCharacter | AngleBrackets.OpenCharacter | Asterisk.OpenCharacter -> true | _ -> false - member __.CheckCodeContext(document: Document, position: int, _openingBrace:char, cancellationToken) = + member _.CheckCodeContext(document: Document, position: int, _openingBrace:char, cancellationToken) = // We need to know if we are inside a F# string or comment. If we are, then don't do automatic completion. let sourceCodeTask = document.GetTextAsync(cancellationToken) sourceCodeTask.Wait(cancellationToken) @@ -504,7 +504,7 @@ type EditorBraceCompletionSessionFactory() = // classifiedSpan.TextSpan.IntersectsWith position && // not (spanIsString classifiedSpan))))) - member __.CreateEditorSession(_document, _openingPosition, openingBrace, _cancellationToken) = + member _.CreateEditorSession(_document, _openingPosition, openingBrace, _cancellationToken) = match openingBrace with | Parenthesis.OpenCharacter -> ParenthesisCompletionSession() :> IEditorBraceCompletionSession | CurlyBrackets.OpenCharacter -> ParenthesisCompletionSession() :> IEditorBraceCompletionSession @@ -541,7 +541,7 @@ type BraceCompletionSessionProvider interface IBraceCompletionSessionProvider with - member __.TryCreateSession(textView, openingPoint, openingBrace, closingBrace, session) = + member _.TryCreateSession(textView, openingPoint, openingBrace, closingBrace, session) = session <- maybe { let! document = openingPoint.Snapshot.GetOpenDocumentInCurrentContextWithChanges() |> Option.ofObj diff --git a/vsintegration/src/FSharp.Editor/Build/SetGlobalPropertiesForSdkProjects.fs b/vsintegration/src/FSharp.Editor/Build/SetGlobalPropertiesForSdkProjects.fs index dde8fbc04bc..6aa643def1d 100644 --- a/vsintegration/src/FSharp.Editor/Build/SetGlobalPropertiesForSdkProjects.fs +++ b/vsintegration/src/FSharp.Editor/Build/SetGlobalPropertiesForSdkProjects.fs @@ -22,6 +22,6 @@ type internal SetGlobalPropertiesForSdkProjects ) = inherit StaticGlobalPropertiesProviderBase(projectService.Services) - override __.GetGlobalPropertiesAsync(_cancellationToken: CancellationToken): Task> = - let properties = Empty.PropertiesMap.Add("FSharpCompilerPath", Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)) + override _.GetGlobalPropertiesAsync(_cancellationToken: CancellationToken): Task> = + let properties = Empty.PropertiesMap.Add("FSharpCompilerPath", Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Tools")) Task.FromResult>(properties) diff --git a/vsintegration/src/FSharp.Editor/Classification/ClassificationDefinitions.fs b/vsintegration/src/FSharp.Editor/Classification/ClassificationDefinitions.fs index 456e266a52f..c3dfc687224 100644 --- a/vsintegration/src/FSharp.Editor/Classification/ClassificationDefinitions.fs +++ b/vsintegration/src/FSharp.Editor/Classification/ClassificationDefinitions.fs @@ -17,7 +17,8 @@ open Microsoft.VisualStudio.Text.Classification open Microsoft.VisualStudio.Utilities open Microsoft.CodeAnalysis.Classification -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices [] module internal FSharpClassificationTypes = @@ -61,11 +62,12 @@ module internal FSharpClassificationTypes = | SemanticClassificationType.NamedArgument -> ClassificationTypeNames.LabelName | SemanticClassificationType.Event -> ClassificationTypeNames.EventName | SemanticClassificationType.Delegate -> ClassificationTypeNames.DelegateName - | SemanticClassificationType.DisposableTopLevelValue + | SemanticClassificationType.DisposableTopLevelValue -> DisposableTopLevelValue | SemanticClassificationType.Value -> ClassificationTypeNames.Identifier - | SemanticClassificationType.DisposableLocalValue + | SemanticClassificationType.DisposableLocalValue -> DisposableLocalValue | SemanticClassificationType.LocalValue -> ClassificationTypeNames.LocalName | SemanticClassificationType.Plaintext -> ClassificationTypeNames.Text + | _ -> failwith "Compiler Bug: Unknown classification type" module internal ClassificationDefinitions = diff --git a/vsintegration/src/FSharp.Editor/Classification/ClassificationService.fs b/vsintegration/src/FSharp.Editor/Classification/ClassificationService.fs index 916ad1e2f29..bb16634ff28 100644 --- a/vsintegration/src/FSharp.Editor/Classification/ClassificationService.fs +++ b/vsintegration/src/FSharp.Editor/Classification/ClassificationService.fs @@ -17,6 +17,10 @@ open Microsoft.CodeAnalysis.Host.Mef open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Classification +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Tokenization + // IEditorClassificationService is marked as Obsolete, but is still supported. The replacement (IClassificationService) // is internal to Microsoft.CodeAnalysis.Workspaces which we don't have internals visible to. Rather than add yet another // IVT, we'll maintain the status quo. @@ -24,13 +28,8 @@ open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Classification #nowarn "57" -open Microsoft.CodeAnalysis -open FSharp.Compiler.Range -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.SourceCodeServices.Lexer - -type SemanticClassificationData = (struct(FSharp.Compiler.Range.range * SemanticClassificationType)[]) -type SemanticClassificationLookup = IReadOnlyDictionary> +type SemanticClassificationData = SemanticClassificationView +type SemanticClassificationLookup = IReadOnlyDictionary> [] type DocumentCache<'Value when 'Value : not struct>() = @@ -69,16 +68,13 @@ type DocumentCache<'Value when 'Value : not struct>() = type internal FSharpClassificationService [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = - static let userOpName = "SemanticColorization" static let getLexicalClassifications(filePath: string, defines, text: SourceText, textSpan: TextSpan, ct) = let text = text.GetSubText(textSpan) let result = ImmutableArray.CreateBuilder() let tokenCallback = - fun (tok: FSharpSyntaxToken) -> + fun (tok: FSharpToken) -> let spanKind = if tok.IsKeyword then ClassificationTypeNames.Keyword @@ -95,21 +91,21 @@ type internal FSharpClassificationService | _ -> () let flags = FSharpLexerFlags.Default &&& ~~~FSharpLexerFlags.Compiling &&& ~~~FSharpLexerFlags.UseLexFilter - FSharpLexer.Lex(text.ToFSharpSourceText(), tokenCallback, filePath = filePath, conditionalCompilationDefines = defines, flags = flags, ct = ct) + FSharpLexer.Tokenize(text.ToFSharpSourceText(), tokenCallback, filePath = filePath, conditionalCompilationDefines = defines, flags = flags, ct = ct) result.ToImmutable() - static let addSemanticClassification sourceText (targetSpan: TextSpan) items (outputResult: List) = - for struct(range, classificationType) in items do - match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, range) with + static let addSemanticClassification sourceText (targetSpan: TextSpan) (items: seq) (outputResult: List) = + for item in items do + match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, item.Range) with | None -> () | Some span -> let span = - match classificationType with + match item.Type with | SemanticClassificationType.Printf -> span | _ -> Tokenizer.fixupSpan(sourceText, span) if targetSpan.Contains span then - outputResult.Add(ClassifiedSpan(span, FSharpClassificationTypes.getClassificationTypeName(classificationType))) + outputResult.Add(ClassifiedSpan(span, FSharpClassificationTypes.getClassificationTypeName(item.Type))) static let addSemanticClassificationByLookup sourceText (targetSpan: TextSpan) (lookup: SemanticClassificationLookup) (outputResult: List) = let r = RoslynHelpers.TextSpanToFSharpRange("", targetSpan, sourceText) @@ -118,32 +114,35 @@ type internal FSharpClassificationService | true, items -> addSemanticClassification sourceText targetSpan items outputResult | _ -> () - static let toSemanticClassificationLookup (data: SemanticClassificationData) = - let lookup = System.Collections.Generic.Dictionary>() - for i = 0 to data.Length - 1 do - let (struct(r, _) as dataItem) = data.[i] + static let toSemanticClassificationLookup (d: SemanticClassificationData) = + let lookup = System.Collections.Generic.Dictionary>() + let f (dataItem: SemanticClassificationItem) = let items = - match lookup.TryGetValue r.StartLine with + match lookup.TryGetValue dataItem.Range.StartLine with | true, items -> items | _ -> let items = ResizeArray() - lookup.[r.StartLine] <- items + lookup.[dataItem.Range.StartLine] <- items items + items.Add dataItem + + d.ForEach(f) + System.Collections.ObjectModel.ReadOnlyDictionary lookup :> IReadOnlyDictionary<_, _> let semanticClassificationCache = new DocumentCache() interface IFSharpClassificationService with // Do not perform classification if we don't have project options (#defines matter) - member __.AddLexicalClassifications(_: SourceText, _: TextSpan, _: List, _: CancellationToken) = () + member _.AddLexicalClassifications(_: SourceText, _: TextSpan, _: List, _: CancellationToken) = () - member __.AddSyntacticClassificationsAsync(document: Document, textSpan: TextSpan, result: List, cancellationToken: CancellationToken) = + member _.AddSyntacticClassificationsAsync(document: Document, textSpan: TextSpan, result: List, cancellationToken: CancellationToken) = async { use _logBlock = Logger.LogBlock(LogEditorFunctionId.Classification_Syntactic) - let defines = projectInfoManager.GetCompilationDefinesForEditingDocument(document) - let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask + let defines = document.GetFSharpQuickDefines() + let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask // For closed documents, only get classification for the text within the span. // This may be inaccurate for multi-line tokens such as string literals, but this is ok for now @@ -152,29 +151,29 @@ type internal FSharpClassificationService result.AddRange(getLexicalClassifications(document.FilePath, defines, sourceText, textSpan, cancellationToken)) else result.AddRange(Tokenizer.getClassifiedSpans(document.Id, sourceText, textSpan, Some(document.FilePath), defines, cancellationToken)) - } |> RoslynHelpers.StartAsyncUnitAsTask cancellationToken + } + |> RoslynHelpers.StartAsyncUnitAsTask cancellationToken - member __.AddSemanticClassificationsAsync(document: Document, textSpan: TextSpan, result: List, cancellationToken: CancellationToken) = - asyncMaybe { + member this.AddSemanticClassificationsAsync(document: Document, textSpan: TextSpan, result: List, cancellationToken: CancellationToken) = + async { use _logBlock = Logger.LogBlock(LogEditorFunctionId.Classification_Semantic) - let! _, _, projectOptions = projectInfoManager.TryGetOptionsForDocumentOrProject(document, cancellationToken, userOpName) - let! sourceText = document.GetTextAsync(cancellationToken) + let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask // If we are trying to get semantic classification for a document that is not open, get the results from the background and cache it. // We do this for find all references when it is populating results. // We cache it temporarily so we do not have to continously call into the checker and perform a background operation. if not (document.Project.Solution.Workspace.IsDocumentOpen document.Id) then - match! semanticClassificationCache.TryGetValueAsync document |> liftAsync with + match! semanticClassificationCache.TryGetValueAsync document with | ValueSome classificationDataLookup -> addSemanticClassificationByLookup sourceText textSpan classificationDataLookup result | _ -> - let! classificationData = checkerProvider.Checker.GetBackgroundSemanticClassificationForFile(document.FilePath, projectOptions, userOpName=userOpName) |> liftAsync + let! classificationData = document.GetFSharpSemanticClassificationAsync(nameof(FSharpClassificationService)) let classificationDataLookup = toSemanticClassificationLookup classificationData - do! semanticClassificationCache.SetAsync(document, classificationDataLookup) |> liftAsync + do! semanticClassificationCache.SetAsync(document, classificationDataLookup) addSemanticClassificationByLookup sourceText textSpan classificationDataLookup result else - let! _, _, checkResults = checkerProvider.Checker.ParseAndCheckDocument(document, projectOptions, sourceText = sourceText, allowStaleResults = false, userOpName=userOpName) + let! _, checkResults = document.GetFSharpParseAndCheckResultsAsync(nameof(IFSharpClassificationService)) let targetRange = RoslynHelpers.TextSpanToFSharpRange(document.FilePath, textSpan, sourceText) let classificationData = checkResults.GetSemanticClassification (Some targetRange) addSemanticClassification sourceText textSpan classificationData result @@ -182,6 +181,6 @@ type internal FSharpClassificationService |> Async.Ignore |> RoslynHelpers.StartAsyncUnitAsTask cancellationToken // Do not perform classification if we don't have project options (#defines matter) - member __.AdjustStaleClassification(_: SourceText, classifiedSpan: ClassifiedSpan) : ClassifiedSpan = classifiedSpan + member _.AdjustStaleClassification(_: SourceText, classifiedSpan: ClassifiedSpan) : ClassifiedSpan = classifiedSpan diff --git a/vsintegration/src/FSharp.Editor/CodeFix/AddInstanceMemberParameter.fs b/vsintegration/src/FSharp.Editor/CodeFix/AddInstanceMemberParameter.fs new file mode 100644 index 00000000000..d0845021ce0 --- /dev/null +++ b/vsintegration/src/FSharp.Editor/CodeFix/AddInstanceMemberParameter.fs @@ -0,0 +1,37 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace Microsoft.VisualStudio.FSharp.Editor + +open System.Composition +open System.Threading.Tasks + +open Microsoft.CodeAnalysis.Text +open Microsoft.CodeAnalysis.CodeFixes + +[] +type internal FSharpAddInstanceMemberParameterCodeFixProvider() = + inherit CodeFixProvider() + + let fixableDiagnosticIds = set ["FS0673"] + + override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds + + override _.RegisterCodeFixesAsync context : Task = + asyncMaybe { + let diagnostics = + context.Diagnostics + |> Seq.filter (fun x -> fixableDiagnosticIds |> Set.contains x.Id) + |> Seq.toImmutableArray + + let title = SR.AddMissingInstanceMemberParameter() + + let codeFix = + CodeFixHelpers.createTextChangeCodeFix( + title, + context, + (fun () -> asyncMaybe.Return [| TextChange(TextSpan(context.Span.Start, 0), "x.") |])) + + context.RegisterCodeFix(codeFix, diagnostics) + } + |> Async.Ignore + |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/AddMissingEqualsToTypeDefinition.fs b/vsintegration/src/FSharp.Editor/CodeFix/AddMissingEqualsToTypeDefinition.fs index 22877845814..5994ff7cae9 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/AddMissingEqualsToTypeDefinition.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/AddMissingEqualsToTypeDefinition.fs @@ -33,12 +33,10 @@ type internal FSharpAddMissingEqualsToTypeDefinitionCodeFixProvider() = // This won't ever actually happen, but eh why not do! Option.guard (pos > 0) - let mutable ch = sourceText.GetSubText(TextSpan(pos, 1)).ToString().[0] - + let mutable ch = sourceText.[pos] while pos > 0 && Char.IsWhiteSpace(ch) do pos <- pos - 1 - let text = sourceText.GetSubText(TextSpan(pos, 1)) - ch <- text.ToString().[0] + ch <- sourceText.[pos] let title = SR.AddMissingEqualsToTypeDefinition() diff --git a/vsintegration/src/FSharp.Editor/CodeFix/AddMissingFunKeyword.fs b/vsintegration/src/FSharp.Editor/CodeFix/AddMissingFunKeyword.fs new file mode 100644 index 00000000000..14149d507f1 --- /dev/null +++ b/vsintegration/src/FSharp.Editor/CodeFix/AddMissingFunKeyword.fs @@ -0,0 +1,64 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace Microsoft.VisualStudio.FSharp.Editor + +open System +open System.Composition + +open Microsoft.CodeAnalysis.Text +open Microsoft.CodeAnalysis.CodeFixes + +open FSharp.Compiler +open FSharp.Compiler.CodeAnalysis + +[] +type internal FSharpAddMissingFunKeywordCodeFixProvider + [] + ( + ) = + inherit CodeFixProvider() + + let fixableDiagnosticIds = set ["FS0010"] + + override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds + + override _.RegisterCodeFixesAsync context = + asyncMaybe { + let document = context.Document + let! sourceText = context.Document.GetTextAsync(context.CancellationToken) + let textOfError = sourceText.GetSubText(context.Span).ToString() + + // Only trigger when failing to parse `->`, which arises when `fun` is missing + do! Option.guard (textOfError = "->") + + let! defines = document.GetFSharpCompilationDefinesAsync(nameof(FSharpAddMissingFunKeywordCodeFixProvider)) |> liftAsync + + let adjustedPosition = + let rec loop ch pos = + if not (Char.IsWhiteSpace(ch)) then + pos + else + loop sourceText.[pos] (pos - 1) + + loop sourceText.[context.Span.Start - 1] context.Span.Start + + let! intendedArgLexerSymbol = Tokenizer.getSymbolAtPosition (document.Id, sourceText, adjustedPosition, document.FilePath, defines, SymbolLookupKind.Greedy, false, false) + let! intendedArgSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, intendedArgLexerSymbol.Range) + + let diagnostics = + context.Diagnostics + |> Seq.filter (fun x -> fixableDiagnosticIds |> Set.contains x.Id) + |> Seq.toImmutableArray + + let title = SR.AddMissingFunKeyword() + + let codeFix = + CodeFixHelpers.createTextChangeCodeFix( + title, + context, + (fun () -> asyncMaybe.Return [| TextChange(TextSpan(intendedArgSpan.Start, 0), "fun ") |])) + + context.RegisterCodeFix(codeFix, diagnostics) + } + |> Async.Ignore + |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/AddMissingRecToMutuallyRecFunctions.fs b/vsintegration/src/FSharp.Editor/CodeFix/AddMissingRecToMutuallyRecFunctions.fs new file mode 100644 index 00000000000..55b73b1fee6 --- /dev/null +++ b/vsintegration/src/FSharp.Editor/CodeFix/AddMissingRecToMutuallyRecFunctions.fs @@ -0,0 +1,70 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace Microsoft.VisualStudio.FSharp.Editor + +open System +open System.Collections.Immutable +open System.Composition +open System.Threading + +open Microsoft.CodeAnalysis.Text +open Microsoft.CodeAnalysis.CodeFixes + +open FSharp.Compiler +open FSharp.Compiler.CodeAnalysis + +open Microsoft.CodeAnalysis +open Microsoft.CodeAnalysis.CodeActions + +[] +type internal FSharpAddMissingRecToMutuallyRecFunctionsCodeFixProvider + [] + ( + ) = + inherit CodeFixProvider() + + let fixableDiagnosticIds = set ["FS0576"] + + let createCodeFix (context: CodeFixContext, symbolName: string, titleFormat: string, textChange: TextChange, diagnostics: ImmutableArray) = + let title = String.Format(titleFormat, symbolName) + let codeAction = + CodeAction.Create( + title, + (fun (cancellationToken: CancellationToken) -> + async { + let cancellationToken = context.CancellationToken + let! sourceText = context.Document.GetTextAsync(cancellationToken) |> Async.AwaitTask + return context.Document.WithText(sourceText.WithChanges(textChange)) + } |> RoslynHelpers.StartAsyncAsTask(cancellationToken)), + title) + context.RegisterCodeFix(codeAction, diagnostics) + + override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds + + override _.RegisterCodeFixesAsync context = + asyncMaybe { + let! defines = context.Document.GetFSharpCompilationDefinesAsync(nameof(FSharpAddMissingRecToMutuallyRecFunctionsCodeFixProvider)) |> liftAsync + let! sourceText = context.Document.GetTextAsync(context.CancellationToken) + + let funcStartPos = + let rec loop ch pos = + if not (Char.IsWhiteSpace(ch)) then + pos + else + loop sourceText.[pos + 1] (pos + 1) + + loop sourceText.[context.Span.End + 1] (context.Span.End + 1) + + let! funcLexerSymbol = Tokenizer.getSymbolAtPosition (context.Document.Id, sourceText, funcStartPos, context.Document.FilePath, defines, SymbolLookupKind.Greedy, false, false) + let! funcNameSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, funcLexerSymbol.Range) + let funcName = sourceText.GetSubText(funcNameSpan).ToString() + + let diagnostics = + context.Diagnostics + |> Seq.filter (fun x -> fixableDiagnosticIds |> Set.contains x.Id) + |> Seq.toImmutableArray + + createCodeFix(context, funcName, SR.MakeOuterBindingRecursive(), TextChange(TextSpan(context.Span.End, 0), " rec"), diagnostics) + } + |> Async.Ignore + |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/AddOpenCodeFixProvider.fs b/vsintegration/src/FSharp.Editor/CodeFix/AddOpenCodeFixProvider.fs index 6932a6c6a5f..392773a637a 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/AddOpenCodeFixProvider.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/AddOpenCodeFixProvider.fs @@ -13,24 +13,20 @@ open Microsoft.CodeAnalysis.CodeFixes open Microsoft.CodeAnalysis.CodeActions open FSharp.Compiler -open FSharp.Compiler.Range -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Text [] type internal FSharpAddOpenCodeFixProvider [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager, assemblyContentProvider: AssemblyContentProvider ) = inherit CodeFixProvider() - static let userOpName = "FSharpAddOpenCodeFixProvider" let fixableDiagnosticIds = ["FS0039"; "FS0043"] - let checker = checkerProvider.Checker let fixUnderscoresInMenuText (text: string) = text.Replace("_", "__") let qualifySymbolFix (context: CodeFixContext) (fullName, qualifier) = @@ -51,10 +47,10 @@ type internal FSharpAddOpenCodeFixProvider } |> RoslynHelpers.StartAsyncAsTask(cancellationToken)), displayText) - let addSuggestionsAsCodeFixes (context: CodeFixContext) (candidates: (Entity * InsertContext) list) = + let addSuggestionsAsCodeFixes (context: CodeFixContext) (candidates: (InsertionContextEntity * InsertionContext) list) = let openNamespaceFixes = candidates - |> Seq.choose (fun (entity, ctx) -> entity.Namespace |> Option.map (fun ns -> ns, entity.Name, ctx)) + |> Seq.choose (fun (entity, ctx) -> entity.Namespace |> Option.map (fun ns -> ns, entity.FullDisplayName, ctx)) |> Seq.groupBy (fun (ns, _, _) -> ns) |> Seq.map (fun (ns, xs) -> ns, @@ -88,12 +84,12 @@ type internal FSharpAddOpenCodeFixProvider override _.RegisterCodeFixesAsync context : Task = asyncMaybe { let document = context.Document - let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, context.CancellationToken, userOpName) - let! sourceText = context.Document.GetTextAsync(context.CancellationToken) - let! _, parsedInput, checkResults = checker.ParseAndCheckDocument(document, projectOptions, sourceText = sourceText, userOpName = userOpName) + + let! sourceText = document.GetTextAsync(context.CancellationToken) + let! parseResults, checkResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpAddOpenCodeFixProvider)) |> liftAsync let line = sourceText.Lines.GetLineFromPosition(context.Span.End) let linePos = sourceText.Lines.GetLinePosition(context.Span.End) - let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions + let! defines = document.GetFSharpCompilationDefinesAsync(nameof(FSharpAddOpenCodeFixProvider)) |> liftAsync let! symbol = maybe { @@ -105,12 +101,12 @@ type internal FSharpAddOpenCodeFixProvider let unresolvedIdentRange = let startLinePos = sourceText.Lines.GetLinePosition context.Span.Start - let startPos = Pos.fromZ startLinePos.Line startLinePos.Character + let startPos = Position.fromZ startLinePos.Line startLinePos.Character let endLinePos = sourceText.Lines.GetLinePosition context.Span.End - let endPos = Pos.fromZ endLinePos.Line endLinePos.Character + let endPos = Position.fromZ endLinePos.Line endLinePos.Character Range.mkRange context.Document.FilePath startPos endPos - let isAttribute = UntypedParseImpl.GetEntityKind(unresolvedIdentRange.Start, parsedInput) = Some EntityKind.Attribute + let isAttribute = ParsedInput.GetEntityKind(unresolvedIdentRange.Start, parseResults.ParseTree) = Some EntityKind.Attribute let entities = assemblyContentProvider.GetAllEntitiesInProjectAndReferencedAssemblies checkResults @@ -126,7 +122,7 @@ type internal FSharpAddOpenCodeFixProvider s.CleanedIdents |> Array.replace (s.CleanedIdents.Length - 1) (lastIdent.Substring(0, lastIdent.Length - 9)) ]) - let longIdent = ParsedInput.getLongIdentAt parsedInput unresolvedIdentRange.End + let longIdent = ParsedInput.GetLongIdentAt parseResults.ParseTree unresolvedIdentRange.End let! maybeUnresolvedIdents = longIdent @@ -138,10 +134,10 @@ type internal FSharpAddOpenCodeFixProvider |> List.toArray) let insertionPoint = - if document.FSharpOptions.CodeFixes.AlwaysPlaceOpensAtTopLevel then OpenStatementInsertionPoint.TopLevel + if document.Project.IsFSharpCodeFixesAlwaysPlaceOpensAtTopLevelEnabled then OpenStatementInsertionPoint.TopLevel else OpenStatementInsertionPoint.Nearest - let createEntity = ParsedInput.tryFindInsertionContext unresolvedIdentRange.StartLine parsedInput maybeUnresolvedIdents insertionPoint + let createEntity = ParsedInput.TryFindInsertionContext unresolvedIdentRange.StartLine parseResults.ParseTree maybeUnresolvedIdents insertionPoint return entities |> Seq.map createEntity |> Seq.concat |> Seq.toList |> addSuggestionsAsCodeFixes context } |> Async.Ignore diff --git a/vsintegration/src/FSharp.Editor/CodeFix/AddTypeAnnotationToObjectOfIndeterminateType.fs b/vsintegration/src/FSharp.Editor/CodeFix/AddTypeAnnotationToObjectOfIndeterminateType.fs new file mode 100644 index 00000000000..9f5c441cb83 --- /dev/null +++ b/vsintegration/src/FSharp.Editor/CodeFix/AddTypeAnnotationToObjectOfIndeterminateType.fs @@ -0,0 +1,98 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace Microsoft.VisualStudio.FSharp.Editor + +open System +open System.Composition +open System.Threading +open System.Threading.Tasks + +open Microsoft.CodeAnalysis.Text +open Microsoft.CodeAnalysis.CodeFixes + +open FSharp.Compiler +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Text +open FSharp.Compiler.Symbols +open Microsoft.CodeAnalysis.CodeActions + +[] +type internal FSharpAddTypeAnnotationToObjectOfIndeterminateTypeFixProvider + [] + ( + ) = + inherit CodeFixProvider() + + let fixableDiagnosticIds = set ["FS0072"; "FS3245"] + + override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds + + override _.RegisterCodeFixesAsync context : Task = + asyncMaybe { + let diagnostics = + context.Diagnostics + |> Seq.filter (fun x -> fixableDiagnosticIds |> Set.contains x.Id) + |> Seq.toImmutableArray + + let document = context.Document + let position = context.Span.Start + + let! sourceText = document.GetTextAsync(context.CancellationToken) + let textLine = sourceText.Lines.GetLineFromPosition position + let textLinePos = sourceText.Lines.GetLinePosition position + let fcsTextLineNumber = Line.fromZ textLinePos.Line + let! lexerSymbol = document.TryFindFSharpLexerSymbolAsync(position, SymbolLookupKind.Greedy, false, false, nameof(FSharpAddTypeAnnotationToObjectOfIndeterminateTypeFixProvider)) + + let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpAddTypeAnnotationToObjectOfIndeterminateTypeFixProvider)) |> liftAsync + let decl = checkFileResults.GetDeclarationLocation (fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLine.ToString(), lexerSymbol.FullIsland, false) + + match decl with + | FindDeclResult.DeclFound declRange when declRange.FileName = document.FilePath -> + let! declSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, declRange) + let declTextLine = sourceText.Lines.GetLineFromPosition declSpan.Start + let! symbolUse = checkFileResults.GetSymbolUseAtLocation(declRange.StartLine, declRange.EndColumn, declTextLine.ToString(), lexerSymbol.FullIsland) + match symbolUse.Symbol with + | :? FSharpMemberOrFunctionOrValue as mfv -> + let typeString = mfv.FullType.FormatWithConstraints symbolUse.DisplayContext + + let alreadyWrappedInParens = + let rec leftLoop ch pos = + if not (Char.IsWhiteSpace(ch)) then + ch = '(' + else + leftLoop sourceText.[pos - 1] (pos - 1) + + let rec rightLoop ch pos = + if not (Char.IsWhiteSpace(ch)) then + ch = ')' + else + rightLoop sourceText.[pos + 1] (pos + 1) + + let hasLeftParen = leftLoop sourceText.[declSpan.Start - 1] (declSpan.Start - 1) + let hasRightParen = rightLoop sourceText.[declSpan.End] declSpan.End + hasLeftParen && hasRightParen + + let getChangedText (sourceText: SourceText) = + if alreadyWrappedInParens then + sourceText.WithChanges(TextChange(TextSpan(declSpan.End, 0), ": " + typeString)) + else + sourceText.WithChanges(TextChange(TextSpan(declSpan.Start, 0), "(")) + .WithChanges(TextChange(TextSpan(declSpan.End + 1, 0), ": " + typeString + ")")) + + let title = SR.AddTypeAnnotation() + let codeAction = + CodeAction.Create( + title, + (fun (cancellationToken: CancellationToken) -> + async { + let! sourceText = context.Document.GetTextAsync(cancellationToken) |> Async.AwaitTask + return context.Document.WithText(getChangedText sourceText) + } |> RoslynHelpers.StartAsyncAsTask(cancellationToken)), + title) + + context.RegisterCodeFix(codeAction, diagnostics) + |_ -> () + | _ -> () + } + |> Async.Ignore + |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ChangePrefixNegationToInfixSubtraction.fs b/vsintegration/src/FSharp.Editor/CodeFix/ChangePrefixNegationToInfixSubtraction.fs index 79d41ccbf16..793cc92a4b1 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/ChangePrefixNegationToInfixSubtraction.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/ChangePrefixNegationToInfixSubtraction.fs @@ -31,12 +31,10 @@ type internal FSharpChangePrefixNegationToInfixSubtractionodeFixProvider() = // This won't ever actually happen, but eh why not do! Option.guard (pos < sourceText.Length) - let mutable ch = sourceText.GetSubText(TextSpan(pos, 1)).ToString().[0] - + let mutable ch = sourceText.[pos] while pos < sourceText.Length && Char.IsWhiteSpace(ch) do pos <- pos + 1 - let text = sourceText.GetSubText(TextSpan(pos, 1)) - ch <- text.ToString().[0] + ch <- sourceText.[pos] // Bail if this isn't a negation do! Option.guard (ch = '-') diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ChangeRefCellDerefToNotExpression.fs b/vsintegration/src/FSharp.Editor/CodeFix/ChangeRefCellDerefToNotExpression.fs index 0d7b80e9d96..f7f33d4c198 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/ChangeRefCellDerefToNotExpression.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/ChangeRefCellDerefToNotExpression.fs @@ -12,22 +12,18 @@ open Microsoft.CodeAnalysis.CodeFixes type internal FSharpChangeRefCellDerefToNotExpressionCodeFixProvider [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() - static let userOpName = "FSharpChangeRefCellDerefToNotExpressionCodeFix" let fixableDiagnosticIds = set ["FS0001"] - override __.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds + override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds override this.RegisterCodeFixesAsync context : Task = asyncMaybe { let document = context.Document - let! parsingOptions, _ = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, context.CancellationToken, userOpName) + let! parseResults = document.GetFSharpParseResultsAsync(nameof(FSharpChangeRefCellDerefToNotExpressionCodeFixProvider)) |> liftAsync let! sourceText = context.Document.GetTextAsync(context.CancellationToken) - let! parseResults = checkerProvider.Checker.ParseFile(document.FilePath, sourceText.ToFSharpSourceText(), parsingOptions, userOpName) |> liftAsync let errorRange = RoslynHelpers.TextSpanToFSharpRange(document.FilePath, context.Span, sourceText) let! derefRange = parseResults.TryRangeOfRefCellDereferenceContainingPos errorRange.Start diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ChangeToUpcast.fs b/vsintegration/src/FSharp.Editor/CodeFix/ChangeToUpcast.fs index cc28cdc0a52..cdc95a9e643 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/ChangeToUpcast.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/ChangeToUpcast.fs @@ -14,7 +14,7 @@ type internal FSharpChangeToUpcastCodeFixProvider() = let fixableDiagnosticIds = set ["FS3198"] - override __.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds + override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds override this.RegisterCodeFixesAsync context : Task = asyncMaybe { diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ConvertCSharpLambdaToFSharpLambda.fs b/vsintegration/src/FSharp.Editor/CodeFix/ConvertCSharpLambdaToFSharpLambda.fs index 76d3ae60a6c..824bc52e2a6 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/ConvertCSharpLambdaToFSharpLambda.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/ConvertCSharpLambdaToFSharpLambda.fs @@ -11,22 +11,18 @@ open Microsoft.CodeAnalysis.CodeFixes type internal FSharpConvertCSharpLambdaToFSharpLambdaCodeFixProvider [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() - static let userOpName = "ConvertCSharpLambdaToFSharpLambda" let fixableDiagnosticIds = set ["FS0039"; "FS0043"] override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds override _.RegisterCodeFixesAsync context = asyncMaybe { - let! sourceText = context.Document.GetTextAsync(context.CancellationToken) - let! parsingOptions, _ = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(context.Document, context.CancellationToken, userOpName) - let! parseResults = checkerProvider.Checker.ParseFile(context.Document.FilePath, sourceText.ToFSharpSourceText(), parsingOptions, userOpName) |> liftAsync + let! parseResults = context.Document.GetFSharpParseResultsAsync(nameof(FSharpConvertCSharpLambdaToFSharpLambdaCodeFixProvider)) |> liftAsync + let! sourceText = context.Document.GetTextAsync(context.CancellationToken) let errorRange = RoslynHelpers.TextSpanToFSharpRange(context.Document.FilePath, context.Span, sourceText) let! fullParenRange, lambdaArgRange, lambdaBodyRange = parseResults.TryRangeOfParenEnclosingOpEqualsGreaterUsage errorRange.Start diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ConvertToAnonymousRecord.fs b/vsintegration/src/FSharp.Editor/CodeFix/ConvertToAnonymousRecord.fs index 645ffee5ab8..3250e7e33f5 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/ConvertToAnonymousRecord.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/ConvertToAnonymousRecord.fs @@ -14,13 +14,9 @@ open Microsoft.CodeAnalysis.CodeActions type internal FSharpConvertToAnonymousRecordCodeFixProvider [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() - static let userOpName = "ConvertToAnonymousRecord" - let fixableDiagnosticIds = set ["FS0039"] override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds @@ -28,10 +24,9 @@ type internal FSharpConvertToAnonymousRecordCodeFixProvider override _.RegisterCodeFixesAsync context : Task = asyncMaybe { let document = context.Document - let! parsingOptions, _ = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, context.CancellationToken, userOpName) - let! sourceText = context.Document.GetTextAsync(context.CancellationToken) - let! parseResults = checkerProvider.Checker.ParseFile(document.FilePath, sourceText.ToFSharpSourceText(), parsingOptions, userOpName) |> liftAsync + let! parseResults = document.GetFSharpParseResultsAsync(nameof(FSharpConvertToAnonymousRecordCodeFixProvider)) |> liftAsync + let! sourceText = context.Document.GetTextAsync(context.CancellationToken) let errorRange = RoslynHelpers.TextSpanToFSharpRange(document.FilePath, context.Span, sourceText) let! recordRange = parseResults.TryRangeOfRecordExpressionContainingPos errorRange.Start let! recordSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, recordRange) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ConvertToNotEqualsEqualityExpression.fs b/vsintegration/src/FSharp.Editor/CodeFix/ConvertToNotEqualsEqualityExpression.fs new file mode 100644 index 00000000000..debdda8a021 --- /dev/null +++ b/vsintegration/src/FSharp.Editor/CodeFix/ConvertToNotEqualsEqualityExpression.fs @@ -0,0 +1,44 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace Microsoft.VisualStudio.FSharp.Editor + +open System.Composition +open System.Threading.Tasks + +open Microsoft.CodeAnalysis.Text +open Microsoft.CodeAnalysis.CodeFixes + +[] +type internal FSharpConvertToNotEqualsEqualityExpressionCodeFixProvider() = + inherit CodeFixProvider() + + let fixableDiagnosticIds = set ["FS0043"] + + override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds + + override this.RegisterCodeFixesAsync context : Task = + asyncMaybe { + let! sourceText = context.Document.GetTextAsync(context.CancellationToken) + let text = sourceText.GetSubText(context.Span).ToString() + + // We're converting '!=' into '<>', a common new user mistake. + // If this is an FS00043 that is anything other than that, bail out + do! Option.guard (text = "!=") + + let title = SR.ConvertToNotEqualsEqualityExpression() + + let diagnostics = + context.Diagnostics + |> Seq.filter (fun x -> fixableDiagnosticIds |> Set.contains x.Id) + |> Seq.toImmutableArray + + let codeFix = + CodeFixHelpers.createTextChangeCodeFix( + title, + context, + (fun () -> asyncMaybe.Return [| TextChange(context.Span, "<>") |])) + + context.RegisterCodeFix(codeFix, diagnostics) + } + |> Async.Ignore + |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ConvertToSingleEqualsEqualityExpression.fs b/vsintegration/src/FSharp.Editor/CodeFix/ConvertToSingleEqualsEqualityExpression.fs index e87538d1b88..18e14e6cc05 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/ConvertToSingleEqualsEqualityExpression.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/ConvertToSingleEqualsEqualityExpression.fs @@ -3,12 +3,10 @@ namespace Microsoft.VisualStudio.FSharp.Editor open System.Composition -open System.Threading open System.Threading.Tasks open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.CodeFixes -open Microsoft.CodeAnalysis.CodeActions [] type internal FSharpConvertToSingleEqualsEqualityExpressionCodeFixProvider() = @@ -16,7 +14,7 @@ type internal FSharpConvertToSingleEqualsEqualityExpressionCodeFixProvider() = let fixableDiagnosticIds = set ["FS0043"] - override __.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds + override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds override this.RegisterCodeFixesAsync context : Task = asyncMaybe { diff --git a/vsintegration/src/FSharp.Editor/CodeFix/FixIndexerAccess.fs b/vsintegration/src/FSharp.Editor/CodeFix/FixIndexerAccess.fs index 08204e3d491..b41eb1e94ad 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/FixIndexerAccess.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/FixIndexerAccess.fs @@ -8,7 +8,7 @@ open System.Threading.Tasks open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.CodeFixes -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics [] type internal FSharpFixIndexerAccessCodeFixProvider() = @@ -34,9 +34,8 @@ type internal FSharpFixIndexerAccessCodeFixProvider() = let mutable span = context.Span let notStartOfBracket (span: TextSpan) = - let t = TextSpan(span.Start, span.Length + 1) - let s = sourceText.GetSubText(t).ToString() - s.[s.Length-1] <> '[' + let t = sourceText.GetSubText(TextSpan(span.Start, span.Length + 1)) + t.[t.Length-1] <> '[' // skip all braces and blanks until we find [ while span.End < sourceText.Length && notStartOfBracket span do @@ -48,7 +47,7 @@ type internal FSharpFixIndexerAccessCodeFixProvider() = let codefix = CodeFixHelpers.createTextChangeCodeFix( - CompilerDiagnostics.getErrorMessage AddIndexerDot, + CompilerDiagnostics.GetErrorMessage FSharpDiagnosticKind.AddIndexerDot, context, (fun () -> asyncMaybe.Return [| TextChange(span, replacement.TrimEnd() + ".") |])) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ImplementInterfaceCodeFixProvider.fs b/vsintegration/src/FSharp.Editor/CodeFix/ImplementInterfaceCodeFixProvider.fs index 9bc085b325b..93d2686c5c9 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/ImplementInterfaceCodeFixProvider.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/ImplementInterfaceCodeFixProvider.fs @@ -12,9 +12,14 @@ open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.CodeFixes open Microsoft.CodeAnalysis.CodeActions -open FSharp.Compiler.Range -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Symbols +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Tokenization [] type internal InterfaceState = @@ -27,23 +32,19 @@ type internal InterfaceState = type internal FSharpImplementInterfaceCodeFixProvider [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() let fixableDiagnosticIds = ["FS0366"] - let checker = checkerProvider.Checker - static let userOpName = "ImplementInterfaceCodeFixProvider" let queryInterfaceState appendBracketAt (pos: pos) (tokens: Tokenizer.SavedTokenInfo[]) (ast: ParsedInput) = asyncMaybe { let line = pos.Line - 1 - let! iface = InterfaceStubGenerator.tryFindInterfaceDeclaration pos ast + let! iface = InterfaceStubGenerator.TryFindInterfaceDeclaration pos ast let endPosOfWidth = tokens |> Array.tryPick (fun (t: Tokenizer.SavedTokenInfo) -> if t.Tag = FSharpTokenTag.WITH || t.Tag = FSharpTokenTag.OWITH then - Some (Pos.fromZ line (t.RightColumn + 1)) + Some (Position.fromZ line (t.RightColumn + 1)) else None) let appendBracketAt = match iface, appendBracketAt with @@ -56,7 +57,7 @@ type internal FSharpImplementInterfaceCodeFixProvider lineStr.Length - lineStr.TrimStart(' ').Length let inferStartColumn indentSize state (sourceText: SourceText) = - match InterfaceStubGenerator.getMemberNameAndRanges state.InterfaceData with + match InterfaceStubGenerator.GetMemberNameAndRanges state.InterfaceData with | (_, range) :: _ -> let lineStr = sourceText.Lines.[range.StartLine-1].ToString() getLineIdent lineStr @@ -81,7 +82,7 @@ type internal FSharpImplementInterfaceCodeFixProvider let defaultBody = "raise (System.NotImplementedException())" let typeParams = state.InterfaceData.TypeParameters let stub = - let stub = InterfaceStubGenerator.formatInterface + let stub = InterfaceStubGenerator.FormatInterface startColumn indentSize typeParams objectIdentifier defaultBody displayContext implementedMemberSignatures entity verboseMode stub.TrimEnd(Environment.NewLine.ToCharArray()) @@ -101,12 +102,12 @@ type internal FSharpImplementInterfaceCodeFixProvider sourceText.WithChanges(stubChange) let registerSuggestions (context: CodeFixContext, results: FSharpCheckFileResults, state: InterfaceState, displayContext, entity, indentSize) = - if InterfaceStubGenerator.hasNoInterfaceMember entity then + if InterfaceStubGenerator.HasNoInterfaceMember entity then () else - let membersAndRanges = InterfaceStubGenerator.getMemberNameAndRanges state.InterfaceData - let interfaceMembers = InterfaceStubGenerator.getInterfaceMembers entity - let hasTypeCheckError = results.Errors |> Array.exists (fun e -> e.Severity = FSharpErrorSeverity.Error) + let membersAndRanges = InterfaceStubGenerator.GetMemberNameAndRanges state.InterfaceData + let interfaceMembers = InterfaceStubGenerator.GetInterfaceMembers entity + let hasTypeCheckError = results.Diagnostics |> Array.exists (fun e -> e.Severity = FSharpDiagnosticSeverity.Error) // This comparison is a bit expensive if hasTypeCheckError && List.length membersAndRanges <> Seq.length interfaceMembers then let diagnostics = context.Diagnostics |> Seq.filter (fun x -> fixableDiagnosticIds |> List.contains x.Id) |> Seq.toImmutableArray @@ -121,7 +122,7 @@ type internal FSharpImplementInterfaceCodeFixProvider let lineStr = sourceText.Lines.[range.EndLine-1].ToString() results.GetSymbolUseAtLocation(range.EndLine, range.EndColumn, lineStr, [name]) let! implementedMemberSignatures = - InterfaceStubGenerator.getImplementedMemberSignatures getMemberByLocation displayContext state.InterfaceData + InterfaceStubGenerator.GetImplementedMemberSignatures getMemberByLocation displayContext state.InterfaceData let newSourceText = applyImplementInterface sourceText state displayContext implementedMemberSignatures entity indentSize verboseMode return context.Document.WithText(newSourceText) } |> RoslynHelpers.StartAsyncAsTask(cancellationToken)), @@ -133,15 +134,15 @@ type internal FSharpImplementInterfaceCodeFixProvider else () - override __.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds + override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds - override __.RegisterCodeFixesAsync context : Task = + override _.RegisterCodeFixesAsync context : Task = asyncMaybe { - let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(context.Document, context.CancellationToken, userOpName) + let! parseResults, checkFileResults = context.Document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpImplementInterfaceCodeFixProvider)) |> liftAsync let cancellationToken = context.CancellationToken let! sourceText = context.Document.GetTextAsync(cancellationToken) - let! _, parsedInput, checkFileResults = checker.ParseAndCheckDocument(context.Document, projectOptions, sourceText = sourceText, userOpName = userOpName) let textLine = sourceText.Lines.GetLineFromPosition context.Span.Start + let! _, _, parsingOptions, _ = context.Document.GetFSharpCompilationOptionsAsync(nameof(FSharpImplementInterfaceCodeFixProvider)) |> liftAsync let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions // Notice that context.Span doesn't return reliable ranges to find tokens at exact positions. // That's why we tokenize the line and try to find the last successive identifier token @@ -160,14 +161,14 @@ type internal FSharpImplementInterfaceCodeFixProvider | _ -> acc let! token = tryFindIdentifierToken None 0 let fixupPosition = textLine.Start + token.RightColumn - let interfacePos = Pos.fromZ textLine.LineNumber token.RightColumn + let interfacePos = Position.fromZ textLine.LineNumber token.RightColumn // We rely on the observation that the lastChar of the context should be '}' if that character is present let appendBracketAt = match sourceText.[context.Span.End-1] with | '}' -> None | _ -> Some context.Span.End - let! interfaceState = queryInterfaceState appendBracketAt interfacePos tokens parsedInput + let! interfaceState = queryInterfaceState appendBracketAt interfacePos tokens parseResults.ParseTree let! symbol = Tokenizer.getSymbolAtPosition(context.Document.Id, sourceText, fixupPosition, context.Document.FilePath, defines, SymbolLookupKind.Greedy, false, false) let fcsTextLineNumber = textLine.LineNumber + 1 let lineContents = textLine.ToString() @@ -177,7 +178,7 @@ type internal FSharpImplementInterfaceCodeFixProvider let! entity, displayContext = match symbolUse.Symbol with | :? FSharpEntity as entity -> - if InterfaceStubGenerator.isInterface entity then + if InterfaceStubGenerator.IsInterface entity then Some (entity, symbolUse.DisplayContext) else None | _ -> None diff --git a/vsintegration/src/FSharp.Editor/CodeFix/MakeDeclarationMutable.fs b/vsintegration/src/FSharp.Editor/CodeFix/MakeDeclarationMutable.fs index 52287c96298..e93e9f4db13 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/MakeDeclarationMutable.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/MakeDeclarationMutable.fs @@ -9,21 +9,18 @@ open System.Threading.Tasks open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.CodeFixes -open FSharp.Compiler.Range -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Text [] type internal FSharpMakeDeclarationMutableFixProvider [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() - static let userOpName = "MakeDeclarationMutable" - let fixableDiagnosticIds = set ["FS0027"] override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds @@ -38,21 +35,19 @@ type internal FSharpMakeDeclarationMutableFixProvider let document = context.Document do! Option.guard (not(isSignatureFile document.FilePath)) let position = context.Span.Start - let checker = checkerProvider.Checker - let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, CancellationToken.None, userOpName) + + let! lexerSymbol = document.TryFindFSharpLexerSymbolAsync(position, SymbolLookupKind.Greedy, false, false, nameof(FSharpMakeDeclarationMutableFixProvider)) let! sourceText = document.GetTextAsync () |> liftTaskAsync - let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions let textLine = sourceText.Lines.GetLineFromPosition position let textLinePos = sourceText.Lines.GetLinePosition position let fcsTextLineNumber = Line.fromZ textLinePos.Line - let! parseFileResults, _, checkFileResults = checker.ParseAndCheckDocument (document, projectOptions, sourceText=sourceText, userOpName=userOpName) - let! lexerSymbol = Tokenizer.getSymbolAtPosition (document.Id, sourceText, position, document.FilePath, defines, SymbolLookupKind.Greedy, false, false) + let! parseFileResults, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpMakeDeclarationMutableFixProvider)) |> liftAsync let decl = checkFileResults.GetDeclarationLocation (fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLine.ToString(), lexerSymbol.FullIsland, false) match decl with // Only do this for symbols in the same file. That covers almost all cases anyways. // We really shouldn't encourage making values mutable outside of local scopes anyways. - | FSharpFindDeclResult.DeclFound declRange when declRange.FileName = document.FilePath -> + | FindDeclResult.DeclFound declRange when declRange.FileName = document.FilePath -> let! span = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, declRange) // Bail if it's a parameter, because like, that ain't allowed diff --git a/vsintegration/src/FSharp.Editor/CodeFix/MakeOuterBindingRecursive.fs b/vsintegration/src/FSharp.Editor/CodeFix/MakeOuterBindingRecursive.fs index 581380d2c23..842de538108 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/MakeOuterBindingRecursive.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/MakeOuterBindingRecursive.fs @@ -12,22 +12,18 @@ open Microsoft.CodeAnalysis.CodeFixes type internal FSharpMakeOuterBindingRecursiveCodeFixProvider [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() - static let userOpName = "MakeOuterBindingRecursive" let fixableDiagnosticIds = set ["FS0039"] override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds override _.RegisterCodeFixesAsync context = asyncMaybe { - let! sourceText = context.Document.GetTextAsync(context.CancellationToken) - let! parsingOptions, _ = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(context.Document, context.CancellationToken, userOpName) - let! parseResults = checkerProvider.Checker.ParseFile(context.Document.FilePath, sourceText.ToFSharpSourceText(), parsingOptions, userOpName) |> liftAsync + let! parseResults = context.Document.GetFSharpParseResultsAsync(nameof(FSharpMakeOuterBindingRecursiveCodeFixProvider)) |> liftAsync + let! sourceText = context.Document.GetTextAsync(context.CancellationToken) let diagnosticRange = RoslynHelpers.TextSpanToFSharpRange(context.Document.FilePath, context.Span, sourceText) do! Option.guard (parseResults.IsPosContainedInApplication diagnosticRange.Start) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/MissingReferenceCodeFixProvider.fs b/vsintegration/src/FSharp.Editor/CodeFix/MissingReferenceCodeFixProvider.fs index d44fc942075..9f9ab08d51d 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/MissingReferenceCodeFixProvider.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/MissingReferenceCodeFixProvider.fs @@ -46,9 +46,9 @@ type internal MissingReferenceCodeFixProvider() = ), title) - override __.FixableDiagnosticIds = Seq.toImmutableArray [fixableDiagnosticId] + override _.FixableDiagnosticIds = Seq.toImmutableArray [fixableDiagnosticId] - override __.RegisterCodeFixesAsync context : Task = + override _.RegisterCodeFixesAsync context : Task = async { let solution = context.Document.Project.Solution diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ProposeUppercaseLabel.fs b/vsintegration/src/FSharp.Editor/CodeFix/ProposeUppercaseLabel.fs index 5dd2f303208..65ebe4edb33 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/ProposeUppercaseLabel.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/ProposeUppercaseLabel.fs @@ -6,26 +6,23 @@ open System.Composition open System.Threading.Tasks open Microsoft.CodeAnalysis.CodeFixes open Microsoft.CodeAnalysis.CodeActions -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Diagnostics [] type internal FSharpProposeUpperCaseLabelCodeFixProvider [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() let fixableDiagnosticIds = ["FS0053"] - static let userOpName = "ProposeUpperCaseLabel" override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds override _.RegisterCodeFixesAsync context : Task = asyncMaybe { let textChanger (originalText: string) = originalText.[0].ToString().ToUpper() + originalText.Substring(1) - let! solutionChanger, originalText = SymbolHelpers.changeAllSymbolReferences(context.Document, context.Span, textChanger, projectInfoManager, checkerProvider.Checker, userOpName) - let title = CompilerDiagnostics.getErrorMessage (ReplaceWithSuggestion <| textChanger originalText) + let! solutionChanger, originalText = SymbolHelpers.changeAllSymbolReferences(context.Document, context.Span, textChanger) + let title = CompilerDiagnostics.GetErrorMessage (FSharpDiagnosticKind.ReplaceWithSuggestion <| textChanger originalText) context.RegisterCodeFix( CodeAction.Create(title, solutionChanger, title), context.Diagnostics |> Seq.filter (fun x -> fixableDiagnosticIds |> List.contains x.Id) |> Seq.toImmutableArray) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/RemoveReturnOrYield.fs b/vsintegration/src/FSharp.Editor/CodeFix/RemoveReturnOrYield.fs index cede948661f..863a9343e72 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/RemoveReturnOrYield.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/RemoveReturnOrYield.fs @@ -11,22 +11,18 @@ open Microsoft.CodeAnalysis.CodeFixes type internal FSharpRemoveReturnOrYieldCodeFixProvider [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() - static let userOpName = "RemoveReturnOrYield" let fixableDiagnosticIds = set ["FS0748"; "FS0747"] override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds override _.RegisterCodeFixesAsync context = asyncMaybe { - let! sourceText = context.Document.GetTextAsync(context.CancellationToken) - let! parsingOptions, _ = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(context.Document, context.CancellationToken, userOpName) - let! parseResults = checkerProvider.Checker.ParseFile(context.Document.FilePath, sourceText.ToFSharpSourceText(), parsingOptions, userOpName) |> liftAsync + let! parseResults = context.Document.GetFSharpParseResultsAsync(nameof(FSharpRemoveReturnOrYieldCodeFixProvider)) |> liftAsync + let! sourceText = context.Document.GetTextAsync(context.CancellationToken) let errorRange = RoslynHelpers.TextSpanToFSharpRange(context.Document.FilePath, context.Span, sourceText) let! exprRange = parseResults.TryRangeOfExprInYieldOrReturn errorRange.Start let! exprSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, exprRange) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/RemoveUnusedBinding.fs b/vsintegration/src/FSharp.Editor/CodeFix/RemoveUnusedBinding.fs new file mode 100644 index 00000000000..fe0a4200e47 --- /dev/null +++ b/vsintegration/src/FSharp.Editor/CodeFix/RemoveUnusedBinding.fs @@ -0,0 +1,64 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace Microsoft.VisualStudio.FSharp.Editor + +open System +open System.Composition +open System.Threading.Tasks + +open Microsoft.CodeAnalysis.Text +open Microsoft.CodeAnalysis.CodeFixes + +[] +type internal FSharpRemoveUnusedBindingCodeFixProvider + [] + ( + ) = + + inherit CodeFixProvider() + + let fixableDiagnosticIds = set ["FS1182"] + + override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds + + override _.RegisterCodeFixesAsync context : Task = + asyncMaybe { + // Don't show code fixes for unused values, even if they are compiler-generated. + do! Option.guard context.Document.Project.IsFSharpCodeFixesUnusedDeclarationsEnabled + + let document = context.Document + let! sourceText = document.GetTextAsync(context.CancellationToken) + + let! parseResults = context.Document.GetFSharpParseResultsAsync(nameof(FSharpRemoveUnusedBindingCodeFixProvider)) |> liftAsync + + let diagnostics = + context.Diagnostics + |> Seq.filter (fun x -> fixableDiagnosticIds |> Set.contains x.Id) + |> Seq.toImmutableArray + + let symbolRange = RoslynHelpers.TextSpanToFSharpRange(document.FilePath, context.Span, sourceText) + let! rangeOfBinding = parseResults.TryRangeOfBindingWithHeadPatternWithPos(symbolRange.Start) + let! spanOfBinding = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, rangeOfBinding) + + let keywordEndColumn = + let rec loop ch pos = + if not (Char.IsWhiteSpace(ch)) then + pos + else + loop sourceText.[pos - 1] (pos - 1) + loop sourceText.[spanOfBinding.Start - 1] (spanOfBinding.Start - 1) + + // This is safe, since we could never have gotten here unless there was a `let` or `use` + let keywordStartColumn = keywordEndColumn - 2 + let fullSpan = TextSpan(keywordStartColumn, spanOfBinding.End - keywordStartColumn) + + let prefixTitle = SR.RemoveUnusedBinding() + let removalCodeFix = + CodeFixHelpers.createTextChangeCodeFix( + prefixTitle, + context, + (fun () -> asyncMaybe.Return [| TextChange(fullSpan, "") |])) + context.RegisterCodeFix(removalCodeFix, diagnostics) + } + |> Async.Ignore + |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/RemoveUnusedOpens.fs b/vsintegration/src/FSharp.Editor/CodeFix/RemoveUnusedOpens.fs index c871c5c25f2..9bc06368210 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/RemoveUnusedOpens.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/RemoveUnusedOpens.fs @@ -9,17 +9,15 @@ open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.CodeFixes open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Diagnostics -open FSharp.Compiler.Range +open FSharp.Compiler.Text [] type internal FSharpRemoveUnusedOpensCodeFixProvider [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() - let userOpName = "FSharpRemoveUnusedOpensCodeFixProvider" + let fixableDiagnosticIds = [FSharpIDEDiagnosticIds.RemoveUnnecessaryImportsDiagnosticId] override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds @@ -28,9 +26,7 @@ type internal FSharpRemoveUnusedOpensCodeFixProvider asyncMaybe { let document = context.Document let! sourceText = document.GetTextAsync() - let checker = checkerProvider.Checker - let! _, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, context.CancellationToken, userOpName) - let! unusedOpens = UnusedOpensDiagnosticAnalyzer.GetUnusedOpenRanges(document, projectOptions, checker) + let! unusedOpens = UnusedOpensDiagnosticAnalyzer.GetUnusedOpenRanges(document) let changes = unusedOpens |> List.map (fun m -> @@ -56,5 +52,5 @@ type internal FSharpRemoveUnusedOpensCodeFixProvider |> Async.Ignore |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) - override __.GetFixAllProvider() = WellKnownFixAllProviders.BatchFixer + override _.GetFixAllProvider() = WellKnownFixAllProviders.BatchFixer \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/CodeFix/RenameParamToMatchSignature.fs b/vsintegration/src/FSharp.Editor/CodeFix/RenameParamToMatchSignature.fs index ee2f2ace708..64632f5bbf4 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/RenameParamToMatchSignature.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/RenameParamToMatchSignature.fs @@ -9,20 +9,18 @@ open System.Threading.Tasks open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.CodeFixes -open FSharp.Compiler.SourceCodeServices open Microsoft.VisualStudio.FSharp.Editor.SymbolHelpers -open FSharp.Compiler.SourceCodeServices.Keywords +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.Tokenization.FSharpKeywords [] type internal FSharpRenameParamToMatchSignature [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() - static let userOpName = "RenameParamToMatchSignature" + let fixableDiagnosticIds = ["FS3218"] @@ -44,17 +42,17 @@ type internal FSharpRenameParamToMatchSignature let document = context.Document let! cancellationToken = Async.CancellationToken |> liftAsync let! sourceText = document.GetTextAsync(cancellationToken) - let! symbolUses = getSymbolUsesOfSymbolAtLocationInDocument (document, context.Span.Start, projectInfoManager, checkerProvider.Checker, userOpName) + let! symbolUses = getSymbolUsesOfSymbolAtLocationInDocument (document, context.Span.Start) let changes = [| for symbolUse in symbolUses do - match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.RangeAlternate) with + match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.Range) with | None -> () | Some span -> let textSpan = Tokenizer.fixupSpan(sourceText, span) yield TextChange(textSpan, replacement) |] return changes } - let title = CompilerDiagnostics.getErrorMessage (ReplaceWithSuggestion suggestion) + let title = CompilerDiagnostics.GetErrorMessage (FSharpDiagnosticKind.ReplaceWithSuggestion suggestion) let codefix = CodeFixHelpers.createTextChangeCodeFix(title, context, computeChanges) context.RegisterCodeFix(codefix, diagnostics) | _ -> () diff --git a/vsintegration/src/FSharp.Editor/CodeFix/RenameUnusedValue.fs b/vsintegration/src/FSharp.Editor/CodeFix/RenameUnusedValue.fs index 856c3f575e5..9f44097b25b 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/RenameUnusedValue.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/RenameUnusedValue.fs @@ -4,50 +4,44 @@ namespace Microsoft.VisualStudio.FSharp.Editor open System open System.Composition -open System.Threading open System.Threading.Tasks -open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.CodeFixes -open Microsoft.CodeAnalysis.CodeActions open FSharp.Compiler -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Symbols +open FSharp.Compiler.Syntax [] type internal FSharpRenameUnusedValueCodeFixProvider [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() - static let userOpName = "RenameUnusedValueCodeFix" + let fixableDiagnosticIds = set ["FS1182"] - let checker = checkerProvider.Checker - override __.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds + override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds - override __.RegisterCodeFixesAsync context : Task = + override _.RegisterCodeFixesAsync context : Task = asyncMaybe { // Don't show code fixes for unused values, even if they are compiler-generated. - do! Option.guard context.Document.FSharpOptions.CodeFixes.UnusedDeclarations + do! Option.guard context.Document.Project.IsFSharpCodeFixesUnusedDeclarationsEnabled let document = context.Document - let! sourceText = document.GetTextAsync() + let! sourceText = document.GetTextAsync(context.CancellationToken) let ident = sourceText.ToString(context.Span) // Prefixing operators and backticked identifiers does not make sense. // We have to use the additional check for backtickes because `IsOperatorOrBacktickedName` operates on display names // where backtickes are replaced with parens. if not (PrettyNaming.IsOperatorOrBacktickedName ident) && not (ident.StartsWith "``") then - let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, context.CancellationToken, userOpName) - let! _, _, checkResults = checker.ParseAndCheckDocument(document, projectOptions, sourceText = sourceText, userOpName=userOpName) + let! lexerSymbol = document.TryFindFSharpLexerSymbolAsync(context.Span.Start, SymbolLookupKind.Greedy, false, false, nameof(FSharpRenameUnusedValueCodeFixProvider)) let m = RoslynHelpers.TextSpanToFSharpRange(document.FilePath, context.Span, sourceText) - let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions - let! lexerSymbol = Tokenizer.getSymbolAtPosition (document.Id, sourceText, context.Span.Start, document.FilePath, defines, SymbolLookupKind.Greedy, false, false) let lineText = (sourceText.Lines.GetLineFromPosition context.Span.Start).ToString() + let! _, checkResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpRenameUnusedValueCodeFixProvider)) |> liftAsync let! symbolUse = checkResults.GetSymbolUseAtLocation(m.StartLine, m.EndColumn, lineText, lexerSymbol.FullIsland) let symbolName = symbolUse.Symbol.DisplayName diff --git a/vsintegration/src/FSharp.Editor/CodeFix/ReplaceWithSuggestion.fs b/vsintegration/src/FSharp.Editor/CodeFix/ReplaceWithSuggestion.fs index d235d83034c..8fb23402339 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/ReplaceWithSuggestion.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/ReplaceWithSuggestion.fs @@ -8,23 +8,20 @@ open System.Threading.Tasks open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.CodeFixes -open FSharp.Compiler -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Range +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Text +open FSharp.Compiler.Tokenization [] type internal FSharpReplaceWithSuggestionCodeFixProvider [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager, settings: EditorOptions ) = inherit CodeFixProvider() - static let userOpName = "ReplaceWithSuggestionCodeFix" let fixableDiagnosticIds = set ["FS0039"; "FS1129"; "FS0495"] - let checker = checkerProvider.Checker override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds @@ -33,8 +30,7 @@ type internal FSharpReplaceWithSuggestionCodeFixProvider do! Option.guard settings.CodeFixes.SuggestNamesForErrors let document = context.Document - let! _, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, context.CancellationToken, userOpName) - let! parseFileResults, _, checkFileResults = checker.ParseAndCheckDocument(document, projectOptions, userOpName=userOpName) + let! parseFileResults, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpReplaceWithSuggestionCodeFixProvider)) |> liftAsync // This is all needed to get a declaration list let! sourceText = document.GetTextAsync(context.CancellationToken) @@ -43,9 +39,10 @@ type internal FSharpReplaceWithSuggestionCodeFixProvider let caretLinePos = sourceText.Lines.GetLinePosition(pos) let caretLine = sourceText.Lines.GetLineFromPosition(pos) let fcsCaretLineNumber = Line.fromZ caretLinePos.Line - let partialName = QuickParse.GetPartialLongNameEx(caretLine.ToString(), caretLinePos.Character - 1) + let lineText = caretLine.ToString() + let partialName = QuickParse.GetPartialLongNameEx(lineText, caretLinePos.Character - 1) - let declInfo = checkFileResults.GetDeclarationListInfo(Some parseFileResults, fcsCaretLineNumber, caretLine.ToString(), partialName) + let declInfo = checkFileResults.GetDeclarationListInfo(Some parseFileResults, fcsCaretLineNumber, lineText, partialName) let addNames (addToBuffer:string -> unit) = for item in declInfo.Items do addToBuffer item.Name @@ -55,11 +52,11 @@ type internal FSharpReplaceWithSuggestionCodeFixProvider |> Seq.filter (fun x -> fixableDiagnosticIds |> Set.contains x.Id) |> Seq.toImmutableArray - for suggestion in ErrorResolutionHints.getSuggestedNames addNames unresolvedIdentifierText do - let replacement = Keywords.QuoteIdentifierIfNeeded suggestion + for suggestion in CompilerDiagnostics.GetSuggestedNames addNames unresolvedIdentifierText do + let replacement = FSharpKeywords.QuoteIdentifierIfNeeded suggestion let codeFix = CodeFixHelpers.createTextChangeCodeFix( - CompilerDiagnostics.getErrorMessage (ReplaceWithSuggestion suggestion), + CompilerDiagnostics.GetErrorMessage (FSharpDiagnosticKind.ReplaceWithSuggestion suggestion), context, (fun () -> asyncMaybe.Return [| TextChange(context.Span, replacement) |])) diff --git a/vsintegration/src/FSharp.Editor/CodeFix/UseMutationWhenValueIsMutable.fs b/vsintegration/src/FSharp.Editor/CodeFix/UseMutationWhenValueIsMutable.fs index 67003759d0a..ecf9c59708b 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/UseMutationWhenValueIsMutable.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/UseMutationWhenValueIsMutable.fs @@ -2,6 +2,7 @@ namespace Microsoft.VisualStudio.FSharp.Editor +open System open System.Composition open System.Threading open System.Threading.Tasks @@ -9,20 +10,18 @@ open System.Threading.Tasks open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.CodeFixes -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Range +open FSharp.Compiler +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Symbols +open FSharp.Compiler.Text [] type internal FSharpUseMutationWhenValueIsMutableFixProvider [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = inherit CodeFixProvider() - static let userOpName = "UseMutationWhenValueIsMutable" - let fixableDiagnosticIds = set ["FS0020"] override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds @@ -36,29 +35,36 @@ type internal FSharpUseMutationWhenValueIsMutableFixProvider let document = context.Document do! Option.guard (not(isSignatureFile document.FilePath)) - let position = context.Span.Start - let checker = checkerProvider.Checker - let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, CancellationToken.None, userOpName) - let! sourceText = document.GetTextAsync () |> liftTaskAsync - let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions - let textLine = sourceText.Lines.GetLineFromPosition position - let textLinePos = sourceText.Lines.GetLinePosition position + + let! sourceText = document.GetTextAsync(context.CancellationToken) + + let adjustedPosition = + let rec loop ch pos = + if Char.IsWhiteSpace(ch) then + pos + else + loop sourceText.[pos + 1] (pos + 1) + + loop sourceText.[context.Span.Start] context.Span.Start + + let textLine = sourceText.Lines.GetLineFromPosition adjustedPosition + let textLinePos = sourceText.Lines.GetLinePosition adjustedPosition let fcsTextLineNumber = Line.fromZ textLinePos.Line - let! _, _, checkFileResults = checker.ParseAndCheckDocument (document, projectOptions, sourceText=sourceText, userOpName=userOpName) - let! lexerSymbol = Tokenizer.getSymbolAtPosition (document.Id, sourceText, position, document.FilePath, defines, SymbolLookupKind.Greedy, false, false) + let! lexerSymbol = document.TryFindFSharpLexerSymbolAsync(adjustedPosition, SymbolLookupKind.Greedy, false, false, nameof(FSharpUseMutationWhenValueIsMutableFixProvider)) + let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpUseMutationWhenValueIsMutableFixProvider)) |> liftAsync let! symbolUse = checkFileResults.GetSymbolUseAtLocation(fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLine.ToString(), lexerSymbol.FullIsland) match symbolUse.Symbol with - | :? FSharpMemberOrFunctionOrValue as mfv when mfv.IsValue && mfv.IsMutable -> + | :? FSharpMemberOrFunctionOrValue as mfv when mfv.IsMutable || mfv.HasSetterMethod -> let title = SR.UseMutationWhenValueIsMutable() - let! symbolSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.RangeAlternate) + let! symbolSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.Range) let mutable pos = symbolSpan.End - let mutable ch = sourceText.GetSubText(pos).ToString() + let mutable ch = sourceText.[pos] // We're looking for the possibly erroneous '=' - while pos <= context.Span.Length && ch <> "=" do + while pos <= context.Span.Length && ch <> '=' do pos <- pos + 1 - ch <- sourceText.GetSubText(pos).ToString() + ch <- sourceText.[pos] let codeFix = CodeFixHelpers.createTextChangeCodeFix( diff --git a/vsintegration/src/FSharp.Editor/CodeFix/WrapExpressionInParentheses.fs b/vsintegration/src/FSharp.Editor/CodeFix/WrapExpressionInParentheses.fs index b6e41206a9c..07ec5a24c4a 100644 --- a/vsintegration/src/FSharp.Editor/CodeFix/WrapExpressionInParentheses.fs +++ b/vsintegration/src/FSharp.Editor/CodeFix/WrapExpressionInParentheses.fs @@ -16,7 +16,7 @@ type internal FSharpWrapExpressionInParenthesesFixProvider() = let fixableDiagnosticIds = set ["FS0597"] - override __.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds + override _.FixableDiagnosticIds = Seq.toImmutableArray fixableDiagnosticIds override this.RegisterCodeFixesAsync context : Task = async { @@ -24,14 +24,13 @@ type internal FSharpWrapExpressionInParenthesesFixProvider() = let getChangedText (sourceText: SourceText) = sourceText.WithChanges(TextChange(TextSpan(context.Span.Start, 0), "(")) - .WithChanges(TextChange(TextSpan(context.Span.End, 0), ")")) + .WithChanges(TextChange(TextSpan(context.Span.End + 1, 0), ")")) context.RegisterCodeFix( CodeAction.Create( title, (fun (cancellationToken: CancellationToken) -> async { - let! cancellationToken = Async.CancellationToken let! sourceText = context.Document.GetTextAsync(cancellationToken) |> Async.AwaitTask return context.Document.WithText(getChangedText sourceText) } |> RoslynHelpers.StartAsyncAsTask(cancellationToken)), diff --git a/vsintegration/src/FSharp.Editor/CodeLens/AbstractCodeLensDisplayService.fs b/vsintegration/src/FSharp.Editor/CodeLens/AbstractCodeLensDisplayService.fs index 0c21690fc41..ba21dabebde 100644 --- a/vsintegration/src/FSharp.Editor/CodeLens/AbstractCodeLensDisplayService.fs +++ b/vsintegration/src/FSharp.Editor/CodeLens/AbstractCodeLensDisplayService.fs @@ -64,11 +64,11 @@ type CodeLensDisplayService (view : IWpfTextView, buffer : ITextBuffer, layerNam member val CurrentBufferSnapshot = null with get, set /// Helper method which returns the start line number of a tracking span - member __.GetTrackingSpanStartLine (snapshot:ITextSnapshot) (trackingSpan:ITrackingSpan) = + member _.GetTrackingSpanStartLine (snapshot:ITextSnapshot) (trackingSpan:ITrackingSpan) = snapshot.GetLineNumberFromPosition(trackingSpan.GetStartPoint(snapshot).Position) /// Helper method which returns the start line number of a tracking span - member __.TryGetTSpanStartLine (snapshot:ITextSnapshot) (trackingSpan:ITrackingSpan) = + member _.TryGetTSpanStartLine (snapshot:ITextSnapshot) (trackingSpan:ITrackingSpan) = let pos = trackingSpan.GetStartPoint(snapshot).Position if snapshot.Length - 1 < pos then None else pos |> snapshot.GetLineNumberFromPosition |> Some @@ -110,7 +110,7 @@ type CodeLensDisplayService (view : IWpfTextView, buffer : ITextBuffer, layerNam let mutable element = self.UiElements.[trackingSpan] element.Visibility <- Visibility.Hidden - member __.CreateDefaultStackPanel () = + member _.CreateDefaultStackPanel () = let grid = Grid(Visibility = Visibility.Hidden) Canvas.SetLeft(grid, 0.) Canvas.SetTop(grid, 0.) diff --git a/vsintegration/src/FSharp.Editor/CodeLens/CodeLensGeneralTagger.fs b/vsintegration/src/FSharp.Editor/CodeLens/CodeLensGeneralTagger.fs index 3702ac62878..fbc54c1e5fc 100644 --- a/vsintegration/src/FSharp.Editor/CodeLens/CodeLensGeneralTagger.fs +++ b/vsintegration/src/FSharp.Editor/CodeLens/CodeLensGeneralTagger.fs @@ -114,11 +114,11 @@ type CodeLensGeneralTagger (view, buffer) as self = interface ITagger with [] - override __.TagsChanged = tagsChangedEvent.Publish + override _.TagsChanged = tagsChangedEvent.Publish /// Returns the tags which reserve the correct space for adornments /// Notice, it's asumed that the data in the collection is valid. - override __.GetTags spans = + override _.GetTags spans = try seq { for span in spans do diff --git a/vsintegration/src/FSharp.Editor/CodeLens/CodeLensProvider.fs b/vsintegration/src/FSharp.Editor/CodeLens/CodeLensProvider.fs index eaf4b541a84..8d3be2fcf35 100644 --- a/vsintegration/src/FSharp.Editor/CodeLens/CodeLensProvider.fs +++ b/vsintegration/src/FSharp.Editor/CodeLens/CodeLensProvider.fs @@ -23,8 +23,7 @@ type internal CodeLensProvider ( [)>] serviceProvider: IServiceProvider, textDocumentFactory: ITextDocumentFactoryService, - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager, + metadataAsSource: FSharpMetadataAsSourceService, typeMap : FSharpClassificationTypeMap Lazy, settings: EditorOptions ) = @@ -50,7 +49,7 @@ type internal CodeLensProvider ) let tagger = CodeLensGeneralTagger(wpfView, buffer) - let service = FSharpCodeLensService(serviceProvider, workspace, documentId, buffer, checkerProvider.Checker, projectInfoManager, componentModel.GetService(), typeMap, tagger, settings) + let service = FSharpCodeLensService(serviceProvider, workspace, documentId, buffer, metadataAsSource, componentModel.GetService(), typeMap, tagger, settings) let provider = (wpfView, (tagger, service)) wpfView.Closed.Add (fun _ -> taggers.Remove provider |> ignore) taggers.Add((wpfView, (tagger, service))) @@ -69,7 +68,7 @@ type internal CodeLensProvider | _ -> None |> Option.get ) - let service = FSharpCodeLensService(serviceProvider, workspace, documentId, buffer, checkerProvider.Checker, projectInfoManager, componentModel.GetService(), typeMap, LineLensDisplayService(wpfView, buffer), settings) + let service = FSharpCodeLensService(serviceProvider, workspace, documentId, buffer, metadataAsSource, componentModel.GetService(), typeMap, LineLensDisplayService(wpfView, buffer), settings) let provider = (wpfView, service) wpfView.Closed.Add (fun _ -> lineLensProvider.Remove provider |> ignore) lineLensProvider.Add(provider) @@ -86,7 +85,7 @@ type internal CodeLensProvider member val LineLensAdornmentLayerDefinition : AdornmentLayerDefinition = null with get, set interface IViewTaggerProvider with - override __.CreateTagger(view, buffer) = + override _.CreateTagger(view, buffer) = if settings.CodeLens.Enabled && not settings.CodeLens.ReplaceWithLineLens then let wpfView = match view with @@ -98,6 +97,6 @@ type internal CodeLensProvider null interface IWpfTextViewCreationListener with - override __.TextViewCreated view = + override _.TextViewCreated view = if settings.CodeLens.Enabled && settings.CodeLens.ReplaceWithLineLens then addLineLensProviderOnce view (view.TextBuffer) |> ignore \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/CodeLens/FSharpCodeLensService.fs b/vsintegration/src/FSharp.Editor/CodeLens/FSharpCodeLensService.fs index 79b0f97cfd0..ac322ac733f 100644 --- a/vsintegration/src/FSharp.Editor/CodeLens/FSharpCodeLensService.fs +++ b/vsintegration/src/FSharp.Editor/CodeLens/FSharpCodeLensService.fs @@ -16,23 +16,24 @@ open Microsoft.CodeAnalysis.Editor.Shared.Extensions open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Classification open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor.Shared.Extensions -open FSharp.Compiler -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Range +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Symbols +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Text +open FSharp.Compiler.Tokenization open Microsoft.VisualStudio.FSharp.Editor.Logging - open Microsoft.VisualStudio.Shell.Interop - open Microsoft.VisualStudio.Text open Microsoft.VisualStudio.Text.Classification -open Internal.Utilities.StructuredFormat - open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor.Shared.Utilities type internal CodeLens(taggedText, computed, fullTypeSignature, uiElement) = - member val TaggedText: Async<(ResizeArray * QuickInfoNavigation) option> = taggedText + member val TaggedText: Async<(ResizeArray * QuickInfoNavigation) option> = taggedText member val Computed: bool = computed with get, set member val FullTypeSignature: string = fullTypeSignature member val UiElement: UIElement = uiElement with get, set @@ -43,8 +44,7 @@ type internal FSharpCodeLensService workspace: Workspace, documentId: Lazy, buffer: ITextBuffer, - checker: FSharpChecker, - projectInfoManager: FSharpProjectOptionsManager, + metadataAsSource: FSharpMetadataAsSourceService, classificationFormatMapService: IClassificationFormatMapService, typeMap: Lazy, codeLens : CodeLensDisplayService, @@ -52,29 +52,28 @@ type internal FSharpCodeLensService ) as self = let lineLens = codeLens - let userOpName = "FSharpCodeLensService" let visit pos parseTree = - AstTraversal.Traverse(pos, parseTree, { new AstTraversal.AstVisitorBase<_>() with - member __.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) = + SyntaxTraversal.Traverse(pos, parseTree, { new SyntaxVisitorBase<_>() with + member _.VisitExpr(_path, traverseSynExpr, defaultTraverse, expr) = defaultTraverse(expr) - override __.VisitInheritSynMemberDefn (_, _, _, _, range) = Some range + override _.VisitInheritSynMemberDefn (_, _, _, _, _, range) = Some range - override __.VisitTypeAbbrev( _, range) = Some range + override _.VisitTypeAbbrev(_, _, range) = Some range - override __.VisitLetOrUse(_, _, bindings, range) = - match bindings |> Seq.tryFind (fun b -> b.RangeOfHeadPat.StartLine = pos.Line) with + override _.VisitLetOrUse(_, _, _, bindings, range) = + match bindings |> Seq.tryFind (fun b -> b.RangeOfHeadPattern.StartLine = pos.Line) with | Some entry -> - Some entry.RangeOfBindingAndRhs + Some entry.RangeOfBindingWithRhs | None -> // We choose to use the default range because // it wasn't possible to find the complete range // including implementation code. Some range - override __.VisitBinding (fn, binding) = - Some binding.RangeOfBindingAndRhs + override _.VisitBinding (_, fn, binding) = + Some binding.RangeOfBindingWithRhs }) let formatMap = lazy classificationFormatMapService.GetClassificationFormatMap "tooltip" @@ -84,7 +83,7 @@ type internal FSharpCodeLensService let mutable bufferChangedCts = new CancellationTokenSource() let uiContext = SynchronizationContext.Current - let layoutTagToFormatting (layoutTag: LayoutTag) = + let layoutTagToFormatting (layoutTag: TextTag) = layoutTag |> RoslynHelpers.roslynTag |> FSharpClassificationTags.GetClassificationTypeName @@ -130,7 +129,7 @@ type internal FSharpCodeLensService let inl = match text with - | :? Layout.NavigableTaggedText as nav when navigation.IsTargetValid nav.Range -> + | :? NavigableTaggedText as nav when navigation.IsTargetValid nav.Range -> let h = Documents.Hyperlink(run, ToolTip = nav.Range.FileName) h.Click.Add (fun _ -> navigation.NavigateTo nav.Range) @@ -155,8 +154,8 @@ type internal FSharpCodeLensService logInfof "Rechecking code due to buffer edit!" #endif let! document = workspace.CurrentSolution.GetDocument(documentId.Value) |> Option.ofObj - let! _, options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, bufferChangedCts.Token, userOpName) - let! _, parsedInput, checkFileResults = checker.ParseAndCheckDocument(document, options, "LineLens", allowStaleResults=true) + let! parseFileResults, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpUseMutationWhenValueIsMutableFixProvider)) |> liftAsync + let parsedInput = parseFileResults.ParseTree #if DEBUG logInfof "Getting uses of all symbols!" #endif @@ -190,9 +189,9 @@ type internal FSharpCodeLensService let displayContext = Option.defaultValue displayContext maybeContext let typeLayout = func.FormatLayout displayContext let taggedText = ResizeArray() - Layout.renderL (Layout.taggedTextListR taggedText.Add) typeLayout |> ignore + typeLayout |> Seq.iter taggedText.Add let statusBar = StatusBar(serviceProvider.GetService()) - let navigation = QuickInfoNavigation(statusBar, checker, projectInfoManager, document, realPosition) + let navigation = QuickInfoNavigation(statusBar, metadataAsSource, document, realPosition) // Because the data is available notify that this line should be updated, displaying the results return Some (taggedText, navigation) | None -> @@ -407,7 +406,7 @@ type internal FSharpCodeLensService } |> Async.Start end - member __.BufferChanged ___ = + member _.BufferChanged ___ = bufferChangedCts.Cancel() // Stop all ongoing async workflow. bufferChangedCts.Dispose() bufferChangedCts <- new CancellationTokenSource() diff --git a/vsintegration/src/FSharp.Editor/Commands/FsiCommandService.fs b/vsintegration/src/FSharp.Editor/Commands/FsiCommandService.fs index 389d50b3cba..81dccba08ed 100644 --- a/vsintegration/src/FSharp.Editor/Commands/FsiCommandService.fs +++ b/vsintegration/src/FSharp.Editor/Commands/FsiCommandService.fs @@ -82,7 +82,7 @@ type internal FsiCommandFilterProvider [] ([)>] serviceProvider: System.IServiceProvider, editorFactory: IVsEditorAdaptersFactoryService) = interface IWpfTextViewCreationListener with - member __.TextViewCreated(textView) = + member _.TextViewCreated(textView) = match editorFactory.GetViewAdapter(textView) with | null -> () | textViewAdapter -> diff --git a/vsintegration/src/FSharp.Editor/Commands/HelpContextService.fs b/vsintegration/src/FSharp.Editor/Commands/HelpContextService.fs index ffdb586ff57..3b1afa222a2 100644 --- a/vsintegration/src/FSharp.Editor/Commands/HelpContextService.fs +++ b/vsintegration/src/FSharp.Editor/Commands/HelpContextService.fs @@ -9,23 +9,23 @@ open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.Classification open Microsoft.VisualStudio.LanguageServices.Implementation.F1Help open Microsoft.CodeAnalysis.Host.Mef -open FSharp.Compiler -open FSharp.Compiler.Range -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open Microsoft.CodeAnalysis [] [, FSharpConstants.FSharpLanguageName)>] type internal FSharpHelpContextService [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = - static let userOpName = "ImplementInterfaceCodeFix" - static member GetHelpTerm(checker: FSharpChecker, sourceText : SourceText, fileName, options, span: TextSpan, tokens: List, textVersion, perfOptions) : Async = + static member GetHelpTerm(document: Document, span: TextSpan, tokens: List) : Async = asyncMaybe { - let! _, _, check = checker.ParseAndCheckDocument(fileName, textVersion, sourceText, options, perfOptions, userOpName = userOpName) + let! _, check = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpHelpContextService)) |> liftAsync + let! sourceText = document.GetTextAsync() |> liftTaskAsync let textLines = sourceText.Lines let lineInfo = textLines.GetLineFromPosition(span.Start) let line = lineInfo.LineNumber @@ -98,14 +98,11 @@ type internal FSharpHelpContextService member this.GetHelpTermAsync(document, textSpan, cancellationToken) = asyncMaybe { - let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) let! sourceText = document.GetTextAsync(cancellationToken) - let! textVersion = document.GetTextVersionAsync(cancellationToken) - let defines = projectInfoManager.GetCompilationDefinesForEditingDocument(document) + let defines = document.GetFSharpQuickDefines() let textLine = sourceText.Lines.GetLineFromPosition(textSpan.Start) let classifiedSpans = Tokenizer.getClassifiedSpans(document.Id, sourceText, textLine.Span, Some document.Name, defines, cancellationToken) - let perfOptions = document.FSharpOptions.LanguageServicePerformance - return! FSharpHelpContextService.GetHelpTerm(checkerProvider.Checker, sourceText, document.FilePath, projectOptions, textSpan, classifiedSpans, textVersion.GetHashCode(), perfOptions) + return! FSharpHelpContextService.GetHelpTerm(document, textSpan, classifiedSpans) } |> Async.map (Option.defaultValue "") |> RoslynHelpers.StartAsyncAsTask cancellationToken diff --git a/vsintegration/src/FSharp.Editor/Commands/XmlDocCommandService.fs b/vsintegration/src/FSharp.Editor/Commands/XmlDocCommandService.fs index 107cde020bf..0771f84d4d8 100644 --- a/vsintegration/src/FSharp.Editor/Commands/XmlDocCommandService.fs +++ b/vsintegration/src/FSharp.Editor/Commands/XmlDocCommandService.fs @@ -13,23 +13,17 @@ open Microsoft.VisualStudio.OLE.Interop open Microsoft.VisualStudio.Text open Microsoft.VisualStudio.Text.Editor open Microsoft.VisualStudio.TextManager.Interop +open Microsoft.VisualStudio.LanguageServices open Microsoft.VisualStudio.Utilities -open Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.EditorServices type internal XmlDocCommandFilter ( wpfTextView: IWpfTextView, - filePath: string, - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager, - workspace: VisualStudioWorkspaceImpl + filePath: string, + workspace: VisualStudioWorkspace ) = - static let userOpName = "XmlDocCommand" - - let checker = checkerProvider.Checker - let document = // There may be multiple documents with the same file path. // However, for the purpose of generating XmlDoc comments, it is ok to keep only the first document. @@ -51,7 +45,7 @@ type internal XmlDocCommandFilter ErrorHandler.ThrowOnFailure errorCode |> ignore interface IOleCommandTarget with - member __.Exec(pguidCmdGroup: byref, nCmdID: uint32, nCmdexecopt: uint32, pvaIn: IntPtr, pvaOut: IntPtr) = + member _.Exec(pguidCmdGroup: byref, nCmdID: uint32, nCmdexecopt: uint32, pvaIn: IntPtr, pvaOut: IntPtr) = if pguidCmdGroup = VSConstants.VSStd2K && nCmdID = uint32 VSConstants.VSStd2KCmdID.TYPECHAR then match getTypedChar pvaIn with | ('/' | '<') as lastChar -> @@ -60,17 +54,17 @@ type internal XmlDocCommandFilter let curLine = wpfTextView.Caret.Position.BufferPosition.GetContainingLine().GetText() let lineWithLastCharInserted = curLine.Insert (indexOfCaret, string lastChar) - match XmlDocComment.isBlank lineWithLastCharInserted with + match XmlDocComment.IsBlank lineWithLastCharInserted with | Some i when i = indexOfCaret -> asyncMaybe { try // XmlDocable line #1 are 1-based, editor is 0-based let curLineNum = wpfTextView.Caret.Position.BufferPosition.GetContainingLine().LineNumber + 1 let! document = document.Value - let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, CancellationToken.None, userOpName) - let! sourceText = document.GetTextAsync(CancellationToken.None) - let! parsedInput = checker.ParseDocument(document, parsingOptions, sourceText, userOpName) - let xmlDocables = XmlDocParser.getXmlDocables (sourceText.ToFSharpSourceText(), Some parsedInput) + let! cancellationToken = Async.CancellationToken |> liftAsync + let! sourceText = document.GetTextAsync(cancellationToken) + let! parseResults = document.GetFSharpParseResultsAsync(nameof(XmlDocCommandFilter)) |> liftAsync + let xmlDocables = XmlDocParser.GetXmlDocables (sourceText.ToFSharpSourceText(), parseResults.ParseTree) let xmlDocablesBelowThisLine = // +1 because looking below current line for e.g. a 'member' xmlDocables |> List.filter (fun (XmlDocable(line,_indent,_paramNames)) -> line = curLineNum+1) @@ -106,33 +100,29 @@ type internal XmlDocCommandFilter else VSConstants.E_FAIL - member __.QueryStatus(pguidCmdGroup: byref, cCmds: uint32, prgCmds: OLECMD [], pCmdText: IntPtr) = + member _.QueryStatus(pguidCmdGroup: byref, cCmds: uint32, prgCmds: OLECMD [], pCmdText: IntPtr) = if not (isNull nextTarget) then nextTarget.QueryStatus(ref pguidCmdGroup, cCmds, prgCmds, pCmdText) else VSConstants.E_FAIL -// Disabled: -// - https://github.com/Microsoft/visualfsharp/issues/6076 -// - The feature does not work; it should probably use an exposed Roslyn API of some sort -// - Despite not working, it is a source of UI delays -//[)>] -//[] -//[] +[)>] +[] +[] type internal XmlDocCommandFilterProvider [] - (checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager, - workspace: VisualStudioWorkspaceImpl, + ( + workspace: VisualStudioWorkspace, textDocumentFactoryService: ITextDocumentFactoryService, - editorFactory: IVsEditorAdaptersFactoryService) = + editorFactory: IVsEditorAdaptersFactoryService + ) = interface IWpfTextViewCreationListener with - member __.TextViewCreated(textView) = + member _.TextViewCreated(textView) = match editorFactory.GetViewAdapter(textView) with | null -> () | textViewAdapter -> match textDocumentFactoryService.TryGetTextDocument(textView.TextBuffer) with | true, doc -> - let commandFilter = XmlDocCommandFilter(textView, doc.FilePath, checkerProvider, projectInfoManager, workspace) + let commandFilter = XmlDocCommandFilter(textView, doc.FilePath, workspace) commandFilter.AttachToViewAdapter textViewAdapter | _ -> () \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/Common/CodeAnalysisExtensions.fs b/vsintegration/src/FSharp.Editor/Common/CodeAnalysisExtensions.fs index 21da00649ea..8f40f743507 100644 --- a/vsintegration/src/FSharp.Editor/Common/CodeAnalysisExtensions.fs +++ b/vsintegration/src/FSharp.Editor/Common/CodeAnalysisExtensions.fs @@ -2,7 +2,7 @@ module internal Microsoft.VisualStudio.FSharp.Editor.CodeAnalysisExtensions open Microsoft.CodeAnalysis -open FSharp.Compiler.Range +open FSharp.Compiler.Text open System.IO type Project with @@ -11,29 +11,30 @@ type Project with member this.GetDependentProjectIds () = this.Solution.GetProjectDependencyGraph().GetProjectsThatDirectlyDependOnThisProject this.Id - /// Returns all projects within the same solution that directly reference this project. member this.GetDependentProjects () = this.Solution.GetProjectDependencyGraph().GetProjectsThatDirectlyDependOnThisProject this.Id |> Seq.map this.Solution.GetProject - /// Returns the ProjectIds of all of the projects that this project directly or transitively depneds on member this.GetProjectIdsOfAllProjectsThisProjectDependsOn () = let graph = this.Solution.GetProjectDependencyGraph() let transitiveDependencies = graph.GetProjectsThatThisProjectTransitivelyDependsOn this.Id let directDependencies = graph.GetProjectsThatThisProjectDirectlyDependsOn this.Id Seq.append directDependencies transitiveDependencies - /// The list all of the projects that this project directly or transitively depneds on member this.GetAllProjectsThisProjectDependsOn () = this.GetProjectIdsOfAllProjectsThisProjectDependsOn () |> Seq.map this.Solution.GetProject - type Solution with + /// Checks if the file path is associated with a document in the solution. + member self.ContainsDocumentWithFilePath filePath = + self.GetDocumentIdsWithFilePath(filePath).IsEmpty + |> not + /// Try to get a document inside the solution using the document's name member self.TryGetDocumentNamed docName = self.Projects |> Seq.tryPick (fun proj -> @@ -55,23 +56,19 @@ type Solution with |> Seq.filter (fun x -> x.ProjectId = projId) |> Seq.tryHead |> Option.map (fun docId -> self.GetDocument docId) - /// Try to get a project inside the solution using the project's id member self.TryGetProject (projId:ProjectId) = if self.ContainsProject projId then Some (self.GetProject projId) else None - /// Returns the projectIds of all projects within this solution that directly reference the provided project member self.GetDependentProjects (projectId:ProjectId) = self.GetProjectDependencyGraph().GetProjectsThatDirectlyDependOnThisProject projectId |> Seq.map self.GetProject - /// Returns the projectIds of all projects within this solution that directly reference the provided project member self.GetDependentProjectIds (projectId:ProjectId) = self.GetProjectDependencyGraph().GetProjectsThatDirectlyDependOnThisProject projectId - /// Returns the ProjectIds of all of the projects that directly or transitively depends on member self.GetProjectIdsOfAllProjectReferences (projectId:ProjectId) = let graph = self.GetProjectDependencyGraph() @@ -79,13 +76,11 @@ type Solution with let directDependencies = graph.GetProjectsThatThisProjectDirectlyDependsOn projectId Seq.append directDependencies transitiveDependencies - /// Returns all of the projects that this project that directly or transitively depends on member self.GetAllProjectsThisProjectDependsOn (projectId:ProjectId) = self.GetProjectIdsOfAllProjectReferences projectId |> Seq.map self.GetProject - /// Try to retrieve the corresponding DocumentId for the range's file in the solution /// and if a projectId is provided, only try to find the document within that project /// or a project referenced by that project @@ -109,7 +104,6 @@ type Solution with self.GetDocumentIdsWithFilePath filePath |> List.ofSeq |> matchingDoc - /// Try to retrieve the corresponding Document for the range's file in the solution /// and if a projectId is provided, only try to find the document within that project /// or a project referenced by that project diff --git a/vsintegration/src/FSharp.Editor/Common/Constants.fs b/vsintegration/src/FSharp.Editor/Common/Constants.fs index 2c6e7c58fdc..75ad88e3379 100644 --- a/vsintegration/src/FSharp.Editor/Common/Constants.fs +++ b/vsintegration/src/FSharp.Editor/Common/Constants.fs @@ -51,6 +51,10 @@ module internal FSharpConstants = /// "F# Miscellaneous Files" let FSharpMiscellaneousFilesName = "F# Miscellaneous Files" + [] + /// "F# Metadata" + let FSharpMetadataName = "F# Metadata" + [] module internal FSharpProviderConstants = diff --git a/vsintegration/src/FSharp.Editor/Common/Extensions.fs b/vsintegration/src/FSharp.Editor/Common/Extensions.fs index a68ce44a226..f6f07117b52 100644 --- a/vsintegration/src/FSharp.Editor/Common/Extensions.fs +++ b/vsintegration/src/FSharp.Editor/Common/Extensions.fs @@ -11,13 +11,14 @@ open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.Host +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Syntax open FSharp.Compiler.Text -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.SyntaxTree -type private FSharpGlyph = FSharp.Compiler.SourceCodeServices.FSharpGlyph -type private FSharpRoslynGlyph = Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpGlyph +open Microsoft.VisualStudio.FSharp.Editor +type private FSharpGlyph = FSharp.Compiler.EditorServices.FSharpGlyph +type private FSharpRoslynGlyph = Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpGlyph type Path with static member GetFullPathSafe path = @@ -37,6 +38,12 @@ type ProjectId with member this.ToFSharpProjectIdString() = this.Id.ToString("D").ToLowerInvariant() +type Project with + member this.IsFSharpMiscellaneous = this.Name = FSharpConstants.FSharpMiscellaneousFilesName + member this.IsFSharpMetadata = this.Name.StartsWith(FSharpConstants.FSharpMetadataName) + member this.IsFSharpMiscellaneousOrMetadata = this.IsFSharpMiscellaneous || this.IsFSharpMetadata + member this.IsFSharp = this.Language = LanguageNames.FSharp + type Document with member this.TryGetLanguageService<'T when 'T :> ILanguageService>() = match this.Project with @@ -48,6 +55,9 @@ type Document with languageServices.GetService<'T>() |> Some + member this.IsFSharpScript = + isScriptFile this.FilePath + module private SourceText = open System.Runtime.CompilerServices @@ -67,7 +77,7 @@ module private SourceText = let sourceText = { new Object() with - override __.GetHashCode() = + override _.GetHashCode() = let checksum = sourceText.GetChecksum() let contentsHash = if not checksum.IsDefault then Hash.combineValues checksum else 0 let encodingHash = if not (isNull sourceText.Encoding) then sourceText.Encoding.GetHashCode() else 0 @@ -79,24 +89,24 @@ module private SourceText = interface ISourceText with - member __.Item with get index = sourceText.[index] + member _.Item with get index = sourceText.[index] - member __.GetLineString(lineIndex) = + member _.GetLineString(lineIndex) = sourceText.Lines.[lineIndex].ToString() - member __.GetLineCount() = + member _.GetLineCount() = sourceText.Lines.Count - member __.GetLastCharacterPosition() = + member _.GetLastCharacterPosition() = if sourceText.Lines.Count > 0 then (sourceText.Lines.Count, sourceText.Lines.[sourceText.Lines.Count - 1].Span.Length) else (0, 0) - member __.GetSubTextString(start, length) = + member _.GetSubTextString(start, length) = sourceText.GetSubText(TextSpan(start, length)).ToString() - member __.SubTextEquals(target, startIndex) = + member _.SubTextEquals(target, startIndex) = if startIndex < 0 || startIndex >= sourceText.Length then invalidArg "startIndex" "Out of range." @@ -119,14 +129,14 @@ module private SourceText = didEqual - member __.ContentEquals(sourceText) = + member _.ContentEquals(sourceText) = match sourceText with | :? SourceText as sourceText -> sourceText.ContentEquals(sourceText) | _ -> false - member __.Length = sourceText.Length + member _.Length = sourceText.Length - member __.CopyTo(sourceIndex, destination, destinationIndex, count) = + member _.CopyTo(sourceIndex, destination, destinationIndex, count) = sourceText.CopyTo(sourceIndex, destination, destinationIndex, count) } @@ -137,7 +147,7 @@ type SourceText with member this.ToFSharpSourceText() = SourceText.weakTable.GetValue(this, Runtime.CompilerServices.ConditionalWeakTable<_,_>.CreateValueCallback(SourceText.create)) -type FSharpNavigationDeclarationItem with +type NavigationItem with member x.RoslynGlyph : FSharpRoslynGlyph = match x.Glyph with | FSharpGlyph.Class diff --git a/vsintegration/src/FSharp.Editor/Common/FSharpCodeAnalysisExtensions.fs b/vsintegration/src/FSharp.Editor/Common/FSharpCodeAnalysisExtensions.fs new file mode 100644 index 00000000000..2ee5e4c64f2 --- /dev/null +++ b/vsintegration/src/FSharp.Editor/Common/FSharpCodeAnalysisExtensions.fs @@ -0,0 +1,49 @@ +[] +module internal FSharpParseFileResultsExtensions + +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text + +type FSharpParseFileResults with + member this.TryRangeOfBindingWithHeadPatternWithPos pos = + let input = this.ParseTree + SyntaxTraversal.Traverse(pos, input, { new SyntaxVisitorBase<_>() with + member _.VisitExpr(_, _, defaultTraverse, expr) = + defaultTraverse expr + + override _.VisitBinding(_path, defaultTraverse, binding) = + match binding with + | SynBinding(_, SynBindingKind.Normal, _, _, _, _, _, pat, _, _, _, _) as binding -> + if Position.posEq binding.RangeOfHeadPattern.Start pos then + Some binding.RangeOfBindingWithRhs + else + // Check if it's an operator + match pat with + | SynPat.LongIdent(LongIdentWithDots([id], _), _, _, _, _, _) when id.idText.StartsWith("op_") -> + if Position.posEq id.idRange.Start pos then + Some binding.RangeOfBindingWithRhs + else + defaultTraverse binding + | _ -> defaultTraverse binding + + | _ -> defaultTraverse binding }) + + member this.TryRangeOfTypeofWithNameAndTypeExpr pos = + SyntaxTraversal.Traverse(pos, this.ParseTree, { new SyntaxVisitorBase<_>() with + member _.VisitExpr(_path, _, defaultTraverse, expr) = + match expr with + | SynExpr.DotGet(expr, _, _, range) -> + match expr with + | SynExpr.TypeApp(SynExpr.Ident(ident), _, typeArgs, _, _, _, _) -> + let onlyOneTypeArg = + match typeArgs with + | [] -> false + | [_] -> true + | _ -> false + if ident.idText = "typeof" && onlyOneTypeArg then + Some {| NamedIdentRange = typeArgs.Head.Range; FullExpressionRange = range |} + else + defaultTraverse expr + | _ -> defaultTraverse expr + | _ -> defaultTraverse expr }) \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/Common/Logger.fs b/vsintegration/src/FSharp.Editor/Common/Logger.fs index 03a507bf74a..3488917ae4f 100644 --- a/vsintegration/src/FSharp.Editor/Common/Logger.fs +++ b/vsintegration/src/FSharp.Editor/Common/Logger.fs @@ -77,12 +77,12 @@ module Logger = let LogBlock(functionId) = FSharpEditorEventSource.Instance.BlockStart(functionId) { new IDisposable with - member __.Dispose() = + member _.Dispose() = FSharpEditorEventSource.Instance.BlockStop(functionId) } let LogBlockMessage message functionId = FSharpEditorEventSource.Instance.BlockMessageStart(message, functionId) { new IDisposable with - member __.Dispose() = + member _.Dispose() = FSharpEditorEventSource.Instance.BlockMessageStop(message, functionId) } \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/Common/Logging.fs b/vsintegration/src/FSharp.Editor/Common/Logging.fs index cc37f948f42..67dd99f6615 100644 --- a/vsintegration/src/FSharp.Editor/Common/Logging.fs +++ b/vsintegration/src/FSharp.Editor/Common/Logging.fs @@ -20,7 +20,6 @@ type LogType = | Warn -> "Warning" | Error -> "Error" - module Config = let [] fsharpOutputGuidString = "E721F849-446C-458C-997A-99E14A04CFD3" let fsharpOutputGuid = Guid fsharpOutputGuidString @@ -50,7 +49,7 @@ type [] Logger [] with get () = globalServiceProvider |> Option.defaultValue (ServiceProvider.GlobalProvider :> IServiceProvider) and set v = globalServiceProvider <- Some v - member __.FSharpLoggingPane + member _.FSharpLoggingPane with get () = getPane () |> function diff --git a/vsintegration/src/FSharp.Editor/Common/Pervasive.fs b/vsintegration/src/FSharp.Editor/Common/Pervasive.fs index 9dd525d609c..fc38c56885b 100644 --- a/vsintegration/src/FSharp.Editor/Common/Pervasive.fs +++ b/vsintegration/src/FSharp.Editor/Common/Pervasive.fs @@ -20,29 +20,29 @@ type internal ISetThemeColors = abstract member SetColors: unit -> unit type MaybeBuilder () = // 'T -> M<'T> [] - member inline __.Return value: 'T option = + member inline _.Return value: 'T option = Some value // M<'T> -> M<'T> [] - member inline __.ReturnFrom value: 'T option = + member inline _.ReturnFrom value: 'T option = value // unit -> M<'T> [] - member inline __.Zero (): unit option = + member inline _.Zero (): unit option = Some () // TODO: Should this be None? // (unit -> M<'T>) -> M<'T> [] - member __.Delay (f: unit -> 'T option): 'T option = + member _.Delay (f: unit -> 'T option): 'T option = f () // M<'T> -> M<'T> -> M<'T> // or // M -> M<'T> -> M<'T> [] - member inline __.Combine (r1, r2: 'T option): 'T option = + member inline _.Combine (r1, r2: 'T option): 'T option = match r1 with | None -> None @@ -51,12 +51,12 @@ type MaybeBuilder () = // M<'T> * ('T -> M<'U>) -> M<'U> [] - member inline __.Bind (value, f: 'T -> 'U option): 'U option = + member inline _.Bind (value, f: 'T -> 'U option): 'U option = Option.bind f value // 'T * ('T -> M<'U>) -> M<'U> when 'U :> IDisposable [] - member __.Using (resource: ('T :> System.IDisposable), body: _ -> _ option): _ option = + member _.Using (resource: ('T :> System.IDisposable), body: _ -> _ option): _ option = try body resource finally if not <| obj.ReferenceEquals (null, box resource) then @@ -88,23 +88,23 @@ let maybe = MaybeBuilder() [] type AsyncMaybeBuilder () = [] - member __.Return value : Async<'T option> = Some value |> async.Return + member _.Return value : Async<'T option> = Some value |> async.Return [] - member __.ReturnFrom value : Async<'T option> = value + member _.ReturnFrom value : Async<'T option> = value [] - member __.ReturnFrom (value: 'T option) : Async<'T option> = async.Return value + member _.ReturnFrom (value: 'T option) : Async<'T option> = async.Return value [] - member __.Zero () : Async = + member _.Zero () : Async = Some () |> async.Return [] - member __.Delay (f : unit -> Async<'T option>) : Async<'T option> = async.Delay f + member _.Delay (f : unit -> Async<'T option>) : Async<'T option> = async.Delay f [] - member __.Combine (r1, r2 : Async<'T option>) : Async<'T option> = + member _.Combine (r1, r2 : Async<'T option>) : Async<'T option> = async { let! r1' = r1 match r1' with @@ -113,7 +113,7 @@ type AsyncMaybeBuilder () = } [] - member __.Bind (value: Async<'T option>, f : 'T -> Async<'U option>) : Async<'U option> = + member _.Bind (value: Async<'T option>, f : 'T -> Async<'U option>) : Async<'U option> = async { let! value' = value match value' with @@ -122,14 +122,14 @@ type AsyncMaybeBuilder () = } [] - member __.Bind (value: System.Threading.Tasks.Task<'T>, f : 'T -> Async<'U option>) : Async<'U option> = + member _.Bind (value: System.Threading.Tasks.Task<'T>, f : 'T -> Async<'U option>) : Async<'U option> = async { let! value' = Async.AwaitTask value return! f value' } [] - member __.Bind (value: 'T option, f : 'T -> Async<'U option>) : Async<'U option> = + member _.Bind (value: 'T option, f : 'T -> Async<'U option>) : Async<'U option> = async { match value with | None -> return None @@ -137,7 +137,7 @@ type AsyncMaybeBuilder () = } [] - member __.Using (resource : ('T :> IDisposable), body : 'T -> Async<'U option>) : Async<'U option> = + member _.Using (resource : ('T :> IDisposable), body : 'T -> Async<'U option>) : Async<'U option> = async { use resource = resource return! body resource @@ -156,11 +156,11 @@ type AsyncMaybeBuilder () = x.While (enum.MoveNext, x.Delay (fun () -> body enum.Current))) [] - member inline __.TryWith (computation : Async<'T option>, catchHandler : exn -> Async<'T option>) : Async<'T option> = + member inline _.TryWith (computation : Async<'T option>, catchHandler : exn -> Async<'T option>) : Async<'T option> = async.TryWith (computation, catchHandler) [] - member inline __.TryFinally (computation : Async<'T option>, compensation : unit -> unit) : Async<'T option> = + member inline _.TryFinally (computation : Async<'T option>, compensation : unit -> unit) : Async<'T option> = async.TryFinally (computation, compensation) let asyncMaybe = AsyncMaybeBuilder() @@ -173,6 +173,14 @@ let inline liftAsync (computation : Async<'T>) : Async<'T option> = let liftTaskAsync task = task |> Async.AwaitTask |> liftAsync +module Array = + /// Returns a new array with an element replaced with a given value. + let replace index value (array: _ []) = + if index >= array.Length then raise (IndexOutOfRangeException "index") + let res = Array.copy array + res.[index] <- value + res + module Async = let map (f: 'T -> 'U) (a: Async<'T>) : Async<'U> = async { diff --git a/vsintegration/src/FSharp.Editor/Common/RoslynHelpers.fs b/vsintegration/src/FSharp.Editor/Common/RoslynHelpers.fs index 89faa387881..b327eab0ca3 100644 --- a/vsintegration/src/FSharp.Editor/Common/RoslynHelpers.fs +++ b/vsintegration/src/FSharp.Editor/Common/RoslynHelpers.fs @@ -4,21 +4,25 @@ namespace Microsoft.VisualStudio.FSharp.Editor open System open System.Collections.Generic +open System.Collections.Immutable open System.Threading open System.Threading.Tasks open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Text -open FSharp.Compiler -open FSharp.Compiler.Layout -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Range +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Text +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Range open Microsoft.VisualStudio.FSharp.Editor.Logging open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Diagnostics +type RoslynTaggedText = Microsoft.CodeAnalysis.TaggedText + [] module internal RoslynHelpers = let joinWithLineBreaks segments = - let lineBreak = TaggedTextOps.Literals.lineBreak + let lineBreak = TaggedText.lineBreak match segments |> List.filter (Seq.isEmpty >> not) with | [] -> Seq.empty | xs -> xs |> List.reduce (fun acc elem -> seq { yield! acc; yield lineBreak; yield! elem }) @@ -40,8 +44,8 @@ module internal RoslynHelpers = let endLine = sourceText.Lines.GetLineFromPosition textSpan.End mkRange fileName - (Pos.fromZ startLine.LineNumber (textSpan.Start - startLine.Start)) - (Pos.fromZ endLine.LineNumber (textSpan.End - endLine.Start)) + (Position.fromZ startLine.LineNumber (textSpan.Start - startLine.Start)) + (Position.fromZ endLine.LineNumber (textSpan.End - endLine.Start)) let GetCompletedTaskResult(task: Task<'TResult>) = if task.Status = TaskStatus.RanToCompletion then @@ -50,50 +54,50 @@ module internal RoslynHelpers = Assert.Exception(task.Exception.GetBaseException()) raise(task.Exception.GetBaseException()) - /// maps from `LayoutTag` of the F# Compiler to Roslyn `TextTags` for use in tooltips + /// maps from `TextTag` of the F# Compiler to Roslyn `TextTags` for use in tooltips let roslynTag = function - | LayoutTag.ActivePatternCase - | LayoutTag.ActivePatternResult - | LayoutTag.UnionCase - | LayoutTag.Enum -> TextTags.Enum - | LayoutTag.Struct -> TextTags.Struct - | LayoutTag.TypeParameter -> TextTags.TypeParameter - | LayoutTag.Alias - | LayoutTag.Class - | LayoutTag.Union - | LayoutTag.Record - | LayoutTag.UnknownType // Default to class until/unless we use classification data - | LayoutTag.Module -> TextTags.Class - | LayoutTag.Interface -> TextTags.Interface - | LayoutTag.Keyword -> TextTags.Keyword - | LayoutTag.Member - | LayoutTag.Function - | LayoutTag.Method -> TextTags.Method - | LayoutTag.RecordField - | LayoutTag.Property -> TextTags.Property - | LayoutTag.Parameter // parameter? - | LayoutTag.Local -> TextTags.Local - | LayoutTag.Namespace -> TextTags.Namespace - | LayoutTag.Delegate -> TextTags.Delegate - | LayoutTag.Event -> TextTags.Event - | LayoutTag.Field -> TextTags.Field - | LayoutTag.LineBreak -> TextTags.LineBreak - | LayoutTag.Space -> TextTags.Space - | LayoutTag.NumericLiteral -> TextTags.NumericLiteral - | LayoutTag.Operator -> TextTags.Operator - | LayoutTag.StringLiteral -> TextTags.StringLiteral - | LayoutTag.Punctuation -> TextTags.Punctuation - | LayoutTag.Text - | LayoutTag.ModuleBinding // why no 'Identifier'? Does it matter? - | LayoutTag.UnknownEntity -> TextTags.Text - - let CollectTaggedText (list: List<_>) (t:TaggedText) = list.Add(TaggedText(roslynTag t.Tag, t.Text)) + | TextTag.ActivePatternCase + | TextTag.ActivePatternResult + | TextTag.UnionCase + | TextTag.Enum -> TextTags.Enum + | TextTag.Struct -> TextTags.Struct + | TextTag.TypeParameter -> TextTags.TypeParameter + | TextTag.Alias + | TextTag.Class + | TextTag.Union + | TextTag.Record + | TextTag.UnknownType // Default to class until/unless we use classification data + | TextTag.Module -> TextTags.Class + | TextTag.Interface -> TextTags.Interface + | TextTag.Keyword -> TextTags.Keyword + | TextTag.Member + | TextTag.Function + | TextTag.Method -> TextTags.Method + | TextTag.RecordField + | TextTag.Property -> TextTags.Property + | TextTag.Parameter // parameter? + | TextTag.Local -> TextTags.Local + | TextTag.Namespace -> TextTags.Namespace + | TextTag.Delegate -> TextTags.Delegate + | TextTag.Event -> TextTags.Event + | TextTag.Field -> TextTags.Field + | TextTag.LineBreak -> TextTags.LineBreak + | TextTag.Space -> TextTags.Space + | TextTag.NumericLiteral -> TextTags.NumericLiteral + | TextTag.Operator -> TextTags.Operator + | TextTag.StringLiteral -> TextTags.StringLiteral + | TextTag.Punctuation -> TextTags.Punctuation + | TextTag.Text + | TextTag.ModuleBinding // why no 'Identifier'? Does it matter? + | TextTag.UnknownEntity -> TextTags.Text + + let CollectTaggedText (list: List<_>) (t:TaggedText) = list.Add(RoslynTaggedText(roslynTag t.Tag, t.Text)) type VolatileBarrier() = [] let mutable isStopped = false - member __.Proceed = not isStopped - member __.Stop() = isStopped <- true + member _.Proceed = not isStopped + member _.Stop() = isStopped <- true // This is like Async.StartAsTask, but // 1. if cancellation occurs we explicitly associate the cancellation with cancellationToken @@ -106,8 +110,7 @@ module internal RoslynHelpers = let task = tcs.Task let disposeReg() = barrier.Stop(); if not task.IsCanceled then reg.Dispose() Async.StartWithContinuations( - async { do! Async.SwitchToThreadPool() - return! computation }, + computation, continuation=(fun result -> disposeReg() tcs.TrySetResult(result) |> ignore @@ -132,16 +135,21 @@ module internal RoslynHelpers = let StartAsyncUnitAsTask cancellationToken (computation:Async) = StartAsyncAsTask cancellationToken computation :> Task - let ConvertError(error: FSharpErrorInfo, location: Location) = + let ConvertError(error: FSharpDiagnostic, location: Location) = // Normalize the error message into the same format that we will receive it from the compiler. // This ensures that IntelliSense and Compiler errors in the 'Error List' are de-duplicated. // (i.e the same error does not appear twice, where the only difference is the line endings.) - let normalizedMessage = error.Message |> ErrorLogger.NormalizeErrorString |> ErrorLogger.NewlineifyErrorString + let normalizedMessage = error.Message |> FSharpDiagnostic.NormalizeErrorString |> FSharpDiagnostic.NewlineifyErrorString - let id = "FS" + error.ErrorNumber.ToString("0000") + let id = error.ErrorNumberText let emptyString = LocalizableString.op_Implicit("") let description = LocalizableString.op_Implicit(normalizedMessage) - let severity = if error.Severity = FSharpErrorSeverity.Error then DiagnosticSeverity.Error else DiagnosticSeverity.Warning + let severity = + match error.Severity with + | FSharpDiagnosticSeverity.Error -> DiagnosticSeverity.Error + | FSharpDiagnosticSeverity.Warning -> DiagnosticSeverity.Warning + | FSharpDiagnosticSeverity.Info -> DiagnosticSeverity.Info + | FSharpDiagnosticSeverity.Hidden -> DiagnosticSeverity.Hidden let customTags = match error.ErrorNumber with | 1182 -> FSharpDiagnosticCustomTags.Unnecessary @@ -173,7 +181,7 @@ module internal OpenDeclarationHelper = /// SourceText. /// Insertion context. Typically returned from tryGetInsertionContext /// Namespace to open. - let insertOpenDeclaration (sourceText: SourceText) (ctx: InsertContext) (ns: string) : SourceText * int = + let insertOpenDeclaration (sourceText: SourceText) (ctx: InsertionContext) (ns: string) : SourceText * int = let mutable minPos = None let insert line lineStr (sourceText: SourceText) : SourceText = @@ -188,7 +196,7 @@ module internal OpenDeclarationHelper = sourceText.WithChanges(TextChange(TextSpan(pos, 0), lineStr + lineBreak)) let getLineStr line = sourceText.Lines.[line].ToString().Trim() - let pos = ParsedInput.adjustInsertionPoint getLineStr ctx + let pos = ParsedInput.AdjustInsertionPoint getLineStr ctx let docLine = Line.toZ pos.Line let lineStr = (String.replicate pos.Column " ") + "open " + ns @@ -215,3 +223,8 @@ module internal OpenDeclarationHelper = else sourceText sourceText, minPos |> Option.defaultValue 0 + +[] +module internal TaggedText = + let toString (tts: TaggedText[]) = + tts |> Array.map (fun tt -> tt.Text) |> String.concat "" diff --git a/vsintegration/src/FSharp.Editor/Common/Vs.fs b/vsintegration/src/FSharp.Editor/Common/Vs.fs index ee17ab8b381..7fd2095f855 100644 --- a/vsintegration/src/FSharp.Editor/Common/Vs.fs +++ b/vsintegration/src/FSharp.Editor/Common/Vs.fs @@ -15,19 +15,19 @@ module internal Com = ErrorHandler.ThrowOnFailure(hr) |> ignore let ThrowOnFailure1(hr,res) = - ErrorHandler.ThrowOnFailure(hr) |> ignore; + ErrorHandler.ThrowOnFailure(hr) |> ignore res let ThrowOnFailure2(hr,res1,res2) = - ErrorHandler.ThrowOnFailure(hr) |> ignore; + ErrorHandler.ThrowOnFailure(hr) |> ignore res1,res2 let ThrowOnFailure3(hr,res1,res2,res3) = - ErrorHandler.ThrowOnFailure(hr) |> ignore; + ErrorHandler.ThrowOnFailure(hr) |> ignore res1,res2,res3 let ThrowOnFailure4(hr,res1,res2,res3,res4) = - ErrorHandler.ThrowOnFailure(hr) |> ignore; + ErrorHandler.ThrowOnFailure(hr) |> ignore res1,res2,res3,res4 let Succeeded hr = diff --git a/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs b/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs index 12e66f1ade6..8cf74d0d665 100644 --- a/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs +++ b/vsintegration/src/FSharp.Editor/Completion/CompletionProvider.fs @@ -16,9 +16,11 @@ open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Completion open Microsoft.VisualStudio.Shell -open FSharp.Compiler -open FSharp.Compiler.Range -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Tokenization module Logger = Microsoft.VisualStudio.FSharp.Editor.Logger @@ -26,17 +28,14 @@ type internal FSharpCompletionProvider ( workspace: Workspace, serviceProvider: SVsServiceProvider, - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager, assemblyContentProvider: AssemblyContentProvider ) = inherit CompletionProvider() - static let userOpName = "CompletionProvider" // Save the backing data in a cache, we need to save for at least the length of the completion session // See https://github.com/Microsoft/visualfsharp/issues/4714 - static let mutable declarationItems: FSharpDeclarationListItem[] = [||] + static let mutable declarationItems: DeclarationListItem[] = [||] static let [] NameInCodePropName = "NameInCode" static let [] FullNamePropName = "FullName" static let [] IsExtensionMemberPropName = "IsExtensionMember" @@ -45,7 +44,7 @@ type internal FSharpCompletionProvider static let [] KeywordDescription = "KeywordDescription" static let keywordCompletionItems = - Keywords.KeywordsWithDescription + FSharpKeywords.KeywordsWithDescription |> List.filter (fun (keyword, _) -> not (PrettyNaming.IsOperatorName keyword)) |> List.sortBy (fun (keyword, _) -> keyword) |> List.mapi (fun n (keyword, description) -> @@ -57,8 +56,6 @@ type internal FSharpCompletionProvider sortText = sprintf "%06d" (1000000 + n)) .AddProperty(KeywordDescription, description)) - let checker = checkerProvider.Checker - let settings: EditorOptions = workspace.Services.GetService() let documentationBuilder = XmlDocumentation.CreateDocumentationBuilder(serviceProvider.XMLMemberIndexService) @@ -105,23 +102,23 @@ type internal FSharpCompletionProvider (triggerChar = '.' || (intelliSenseOptions.ShowAfterCharIsTyped && CompletionUtils.isStartingNewWord(sourceText, triggerPosition))) - static member ProvideCompletionsAsyncAux(checker: FSharpChecker, sourceText: SourceText, caretPosition: int, options: FSharpProjectOptions, filePath: string, - textVersionHash: int, getAllSymbols: FSharpCheckFileResults -> AssemblySymbol list, languageServicePerformanceOptions: LanguageServicePerformanceOptions, intellisenseOptions: IntelliSenseOptions) = + static member ProvideCompletionsAsyncAux(document: Document, caretPosition: int, getAllSymbols: FSharpCheckFileResults -> AssemblySymbol list, intellisenseOptions: IntelliSenseOptions) = asyncMaybe { - let! parseResults, _, checkFileResults = checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, options, languageServicePerformanceOptions, userOpName = userOpName) + let! parseResults, checkFileResults = document.GetFSharpParseAndCheckResultsAsync("ProvideCompletionsAsyncAux") |> liftAsync + let! sourceText = document.GetTextAsync() let textLines = sourceText.Lines let caretLinePos = textLines.GetLinePosition(caretPosition) let caretLine = textLines.GetLineFromPosition(caretPosition) let fcsCaretLineNumber = Line.fromZ caretLinePos.Line // Roslyn line numbers are zero-based, FSharp.Compiler.Service line numbers are 1-based let caretLineColumn = caretLinePos.Character - let partialName = QuickParse.GetPartialLongNameEx(caretLine.ToString(), caretLineColumn - 1) + let line = caretLine.ToString() + let partialName = QuickParse.GetPartialLongNameEx(line, caretLineColumn - 1) let getAllSymbols() = getAllSymbols checkFileResults |> List.filter (fun assemblySymbol -> assemblySymbol.FullName.Contains "." && not (PrettyNaming.IsOperatorName assemblySymbol.Symbol.DisplayName)) - let declarations = checkFileResults.GetDeclarationListInfo(Some(parseResults), fcsCaretLineNumber, caretLine.ToString(), - partialName, getAllSymbols) + let declarations = checkFileResults.GetDeclarationListInfo(Some(parseResults), fcsCaretLineNumber, line, partialName, getAllSymbols) let results = List() declarationItems <- @@ -193,12 +190,7 @@ type internal FSharpCompletionProvider if results.Count > 0 && not declarations.IsForType && not declarations.IsError && List.isEmpty partialName.QualifyingIdents then - let lineStr = textLines.[caretLinePos.Line].ToString() - - let completionContext = - parseResults.ParseTree - |> Option.bind (fun parseTree -> - UntypedParseImpl.TryGetCompletionContext(Pos.fromZ caretLinePos.Line caretLinePos.Character, parseTree, lineStr)) + let completionContext = ParsedInput.TryGetCompletionContext(Position.fromZ caretLinePos.Line caretLinePos.Character, parseResults.ParseTree, line) match completionContext with | None -> results.AddRange(keywordCompletionItems) @@ -213,7 +205,7 @@ type internal FSharpCompletionProvider let getInfo() = let documentId = workspace.GetDocumentIdInCurrentContext(sourceText.Container) let document = workspace.CurrentSolution.GetDocument(documentId) - let defines = projectInfoManager.GetCompilationDefinesForEditingDocument(document) + let defines = document.GetFSharpQuickDefines() (documentId, document.FilePath, defines) FSharpCompletionProvider.ShouldTriggerCompletionAux(sourceText, caretPosition, trigger.Kind, getInfo, settings.IntelliSense) @@ -223,17 +215,14 @@ type internal FSharpCompletionProvider use _logBlock = Logger.LogBlockMessage context.Document.Name LogEditorFunctionId.Completion_ProvideCompletionsAsync let document = context.Document let! sourceText = context.Document.GetTextAsync(context.CancellationToken) - let defines = projectInfoManager.GetCompilationDefinesForEditingDocument(document) + let defines = document.GetFSharpQuickDefines() do! Option.guard (CompletionUtils.shouldProvideCompletion(document.Id, document.FilePath, defines, sourceText, context.Position)) - let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, context.CancellationToken, userOpName) - let! textVersion = context.Document.GetTextVersionAsync(context.CancellationToken) let getAllSymbols(fileCheckResults: FSharpCheckFileResults) = if settings.IntelliSense.IncludeSymbolsFromUnopenedNamespacesOrModules then assemblyContentProvider.GetAllEntitiesInProjectAndReferencedAssemblies(fileCheckResults) else [] let! results = - FSharpCompletionProvider.ProvideCompletionsAsyncAux(checker, sourceText, context.Position, projectOptions, document.FilePath, - textVersion.GetHashCode(), getAllSymbols, settings.LanguageServicePerformance, settings.IntelliSense) + FSharpCompletionProvider.ProvideCompletionsAsyncAux(context.Document, context.Position, getAllSymbols, settings.IntelliSense) context.AddItems(results) } |> Async.Ignore |> RoslynHelpers.StartAsyncUnitAsTask context.CancellationToken @@ -245,7 +234,7 @@ type internal FSharpCompletionProvider let completionItemIndex = int completionItemIndexStr if completionItemIndex < declarationItems.Length then let declarationItem = declarationItems.[completionItemIndex] - let! description = declarationItem.StructuredDescriptionTextAsync + let description = declarationItem.Description let documentation = List() let collector = RoslynHelpers.CollectTaggedText documentation // mix main description and xmldoc by using one collector @@ -294,15 +283,14 @@ type internal FSharpCompletionProvider let! sourceText = document.GetTextAsync(cancellationToken) let textWithItemCommitted = sourceText.WithChanges(TextChange(item.Span, nameInCode)) let line = sourceText.Lines.GetLineFromPosition(item.Span.Start) - let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) - let! parsedInput = checker.ParseDocument(document, parsingOptions, sourceText, userOpName) + let! parseResults = document.GetFSharpParseResultsAsync(nameof(FSharpCompletionProvider)) |> liftAsync let fullNameIdents = fullName |> Option.map (fun x -> x.Split '.') |> Option.defaultValue [||] let insertionPoint = if settings.CodeFixes.AlwaysPlaceOpensAtTopLevel then OpenStatementInsertionPoint.TopLevel else OpenStatementInsertionPoint.Nearest - let ctx = ParsedInput.findNearestPointToInsertOpenDeclaration line.LineNumber parsedInput fullNameIdents insertionPoint + let ctx = ParsedInput.FindNearestPointToInsertOpenDeclaration line.LineNumber parseResults.ParseTree fullNameIdents insertionPoint let finalSourceText, changedSpanStartPos = OpenDeclarationHelper.insertOpenDeclaration textWithItemCommitted ctx ns let fullChangingSpan = TextSpan.FromBounds(changedSpanStartPos, item.Span.End) let changedSpan = TextSpan.FromBounds(changedSpanStartPos, item.Span.End + (finalSourceText.Length - sourceText.Length)) diff --git a/vsintegration/src/FSharp.Editor/Completion/CompletionService.fs b/vsintegration/src/FSharp.Editor/Completion/CompletionService.fs index e2c03429d55..ccdadf504f7 100644 --- a/vsintegration/src/FSharp.Editor/Completion/CompletionService.fs +++ b/vsintegration/src/FSharp.Editor/Completion/CompletionService.fs @@ -17,16 +17,16 @@ type internal FSharpCompletionService ( workspace: Workspace, serviceProvider: SVsServiceProvider, - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager, assemblyContentProvider: AssemblyContentProvider, settings: EditorOptions ) = inherit CompletionServiceWithProviders(workspace) + let projectInfoManager = workspace.Services.GetRequiredService().FSharpProjectOptionsManager + let builtInProviders = ImmutableArray.Create( - FSharpCompletionProvider(workspace, serviceProvider, checkerProvider, projectInfoManager, assemblyContentProvider), + FSharpCompletionProvider(workspace, serviceProvider, assemblyContentProvider), FSharpCommonCompletionProvider.Create(HashDirectiveCompletionProvider.Create(workspace, projectInfoManager))) override _.Language = FSharpConstants.FSharpLanguageName @@ -56,13 +56,11 @@ type internal FSharpCompletionServiceFactory [] ( serviceProvider: SVsServiceProvider, - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager, assemblyContentProvider: AssemblyContentProvider, settings: EditorOptions ) = interface ILanguageServiceFactory with member _.CreateLanguageService(hostLanguageServices: HostLanguageServices) : ILanguageService = - upcast new FSharpCompletionService(hostLanguageServices.WorkspaceServices.Workspace, serviceProvider, checkerProvider, projectInfoManager, assemblyContentProvider, settings) + upcast new FSharpCompletionService(hostLanguageServices.WorkspaceServices.Workspace, serviceProvider, assemblyContentProvider, settings) diff --git a/vsintegration/src/FSharp.Editor/Completion/CompletionUtils.fs b/vsintegration/src/FSharp.Editor/Completion/CompletionUtils.fs index b87f7e6c6a6..48ddb9ce974 100644 --- a/vsintegration/src/FSharp.Editor/Completion/CompletionUtils.fs +++ b/vsintegration/src/FSharp.Editor/Completion/CompletionUtils.fs @@ -7,11 +7,10 @@ open System.Threading open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Classification open Microsoft.CodeAnalysis.Text -open Microsoft.CodeAnalysis.Completion open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Completion open System.Globalization -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.PrettyNaming +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Syntax.PrettyNaming module internal CompletionUtils = diff --git a/vsintegration/src/FSharp.Editor/Completion/PathCompletionUtilities.fs b/vsintegration/src/FSharp.Editor/Completion/PathCompletionUtilities.fs index e2dc84e64e7..737bffb7553 100644 --- a/vsintegration/src/FSharp.Editor/Completion/PathCompletionUtilities.fs +++ b/vsintegration/src/FSharp.Editor/Completion/PathCompletionUtilities.fs @@ -6,6 +6,7 @@ open System open System.IO module PathCompletionUtilities = + let GetPathThroughLastSlash(quotedPath: string, quotedPathStart: int, position: int) = let quoteLength = "\"".Length let positionInQuotedPath = position - quotedPathStart @@ -15,5 +16,6 @@ module PathCompletionUtilities = let index = path.LastIndexOf(Path.DirectorySeparatorChar, position) if index >= 0 then index + 1 else -1 if afterLastSlashIndex >= 0 then path.Substring(0, afterLastSlashIndex) else path + let EndsWithQuote(quotedPath: string) = quotedPath.Length >= 2 && quotedPath.[quotedPath.Length - 1] = '"' diff --git a/vsintegration/src/FSharp.Editor/Completion/SignatureHelp.fs b/vsintegration/src/FSharp.Editor/Completion/SignatureHelp.fs index e72bb4d05ad..8bc06631418 100644 --- a/vsintegration/src/FSharp.Editor/Completion/SignatureHelp.fs +++ b/vsintegration/src/FSharp.Editor/Completion/SignatureHelp.fs @@ -11,55 +11,63 @@ open Microsoft.CodeAnalysis.ExternalAccess.FSharp.SignatureHelp open Microsoft.VisualStudio.Shell -open FSharp.Compiler -open FSharp.Compiler.Layout -open FSharp.Compiler.Range -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Symbols +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Position +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Tokenization type SignatureHelpParameterInfo = { ParameterName: string IsOptional: bool CanonicalTypeTextForSorting: string - Documentation: ResizeArray - DisplayParts: ResizeArray } + Documentation: ResizeArray + DisplayParts: ResizeArray } type SignatureHelpItem = { HasParamArrayArg: bool - Documentation: ResizeArray - PrefixParts: Microsoft.CodeAnalysis.TaggedText[] - SeparatorParts: Microsoft.CodeAnalysis.TaggedText[] - SuffixParts: Microsoft.CodeAnalysis.TaggedText[] + Documentation: ResizeArray + PrefixParts: RoslynTaggedText[] + SeparatorParts: RoslynTaggedText[] + SuffixParts: RoslynTaggedText[] Parameters: SignatureHelpParameterInfo[] - MainDescription: ResizeArray } + MainDescription: ResizeArray } + +type CurrentSignatureHelpSessionKind = + | FunctionApplication + | MethodCall type SignatureHelpData = { SignatureHelpItems: SignatureHelpItem[] ApplicableSpan: TextSpan ArgumentIndex: int ArgumentCount: int - ArgumentName: string option } + ArgumentName: string option + CurrentSignatureHelpSessionKind: CurrentSignatureHelpSessionKind } [] [)>] type internal FSharpSignatureHelpProvider [] ( - serviceProvider: SVsServiceProvider, - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager + serviceProvider: SVsServiceProvider ) = - static let userOpName = "SignatureHelpProvider" let documentationBuilder = XmlDocumentation.CreateDocumentationBuilder(serviceProvider.XMLMemberIndexService) static let oneColAfter (lp: LinePosition) = LinePosition(lp.Line,lp.Character+1) static let oneColBefore (lp: LinePosition) = LinePosition(lp.Line,max 0 (lp.Character-1)) + let mutable possibleCurrentSignatureHelpSessionKind = None + static member internal ProvideMethodsAsyncAux ( caretLinePos: LinePosition, caretLineColumn: int, - paramLocations: FSharpNoteworthyParamInfoLocations, + paramLocations: ParameterLocations, checkFileResults: FSharpCheckFileResults, documentationBuilder: IDocumentationBuilder, sourceText: SourceText, @@ -78,9 +86,9 @@ type internal FSharpSignatureHelpProvider do! Option.guard (methods.Length > 0 && not(methodGroup.MethodName.EndsWith("> )"))) let isStaticArgTip = - let parenLine, parenCol = Pos.toZ paramLocations.OpenParenLocation + let parenLine, parenCol = Position.toZ paramLocations.OpenParenLocation assert (parenLine < textLines.Count) - let parenLineText = textLines.[parenLine].ToString() + let parenLineText = sourceText.GetSubText(textLines.[parenLine].Span) parenCol < parenLineText.Length && parenLineText.[parenCol] = '<' let filteredMethods = @@ -94,7 +102,7 @@ type internal FSharpSignatureHelpProvider do! Option.guard (filteredMethods.Length > 0) let posToLinePosition pos = - let (l,c) = Pos.toZ pos + let (l,c) = Position.toZ pos let result = LinePosition(l,c) let lastPosInDocument = textLines.GetLinePosition(textLines.[textLines.Count-1].End) if lastPosInDocument.CompareTo(result) > 0 then result else lastPosInDocument @@ -158,7 +166,7 @@ type internal FSharpSignatureHelpProvider | n -> n // Compute the current argument name if it is named. - let argumentName = + let namedArgumentName = if argumentIndex < paramLocations.NamedParamNames.Length then paramLocations.NamedParamNames.[argumentIndex] else @@ -173,7 +181,7 @@ type internal FSharpSignatureHelpProvider documentationBuilder, RoslynHelpers.CollectTaggedText mainDescription, RoslynHelpers.CollectTaggedText documentation, - method.StructuredDescription, false) + method.Description, false) let parameters = let parameters = if isStaticArgTip then method.StaticParameters else method.Parameters @@ -182,7 +190,7 @@ type internal FSharpSignatureHelpProvider let doc = ResizeArray() let parts = ResizeArray() XmlDocumentation.BuildMethodParamText(documentationBuilder, RoslynHelpers.CollectTaggedText doc, method.XmlDoc, p.ParameterName) - renderL (taggedTextListR (RoslynHelpers.CollectTaggedText parts)) p.StructuredDisplay |> ignore + p.Display |> Seq.iter (RoslynHelpers.CollectTaggedText parts) { ParameterName = p.ParameterName IsOptional = p.IsOptional CanonicalTypeTextForSorting = p.CanonicalTypeTextForSorting @@ -191,11 +199,11 @@ type internal FSharpSignatureHelpProvider |] let prefixParts = - [| TaggedText(TextTags.Method, methodGroup.MethodName); - TaggedText(TextTags.Punctuation, (if isStaticArgTip then "<" else "(")) |] + [| RoslynTaggedText(TextTags.Method, methodGroup.MethodName); + RoslynTaggedText(TextTags.Punctuation, (if isStaticArgTip then "<" else "(")) |] - let separatorParts = [| TaggedText(TextTags.Punctuation, ","); TaggedText(TextTags.Space, " ") |] - let suffixParts = [| TaggedText(TextTags.Punctuation, (if isStaticArgTip then ">" else ")")) |] + let separatorParts = [| RoslynTaggedText(TextTags.Punctuation, ","); RoslynTaggedText(TextTags.Space, " ") |] + let suffixParts = [| RoslynTaggedText(TextTags.Punctuation, (if isStaticArgTip then ">" else ")")) |] { HasParamArrayArg = method.HasParamArrayArg Documentation = documentation @@ -211,7 +219,8 @@ type internal FSharpSignatureHelpProvider ApplicableSpan = applicableSpan ArgumentIndex = argumentIndex ArgumentCount = argumentCount - ArgumentName = argumentName } + ArgumentName = namedArgumentName + CurrentSignatureHelpSessionKind = MethodCall } return! Some data } @@ -225,26 +234,13 @@ type internal FSharpSignatureHelpProvider documentationBuilder: IDocumentationBuilder, sourceText: SourceText, caretPosition: int, + adjustedColumnInSource: int, filePath: string ) = asyncMaybe { - // Backtrack to find a non-whitespace character to get curried arg infos (if present) and a symbol to inspect. - let adjustedColumnInSource = - let rec loop s c = - if String.IsNullOrWhiteSpace(s.ToString()) then - loop (sourceText.GetSubText(c - 1)) (c - 1) - else - c - let startText = - if caretPosition = sourceText.Length then - sourceText.GetSubText(caretPosition) - else - sourceText.GetSubText(TextSpan(caretPosition, 1)) - - loop startText caretPosition - let textLine = sourceText.Lines.GetLineFromPosition(adjustedColumnInSource) let textLinePos = sourceText.Lines.GetLinePosition(adjustedColumnInSource) + let textLineText = textLine.ToString() let pos = mkPos (Line.fromZ textLinePos.Line) textLinePos.Character let textLinePos = sourceText.Lines.GetLinePosition(adjustedColumnInSource) let fcsTextLineNumber = Line.fromZ textLinePos.Line @@ -260,7 +256,7 @@ type internal FSharpSignatureHelpProvider } let! lexerSymbol = Tokenizer.getSymbolAtPosition(documentId, sourceText, possibleApplicableSymbolEndColumn, filePath, defines, SymbolLookupKind.Greedy, false, false) - let! symbolUse = checkFileResults.GetSymbolUseAtLocation(fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLine.ToString(), lexerSymbol.FullIsland) + let! symbolUse = checkFileResults.GetSymbolUseAtLocation(fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLineText, lexerSymbol.FullIsland) let isValid (mfv: FSharpMemberOrFunctionOrValue) = not (PrettyNaming.IsOperatorName mfv.DisplayName) && @@ -269,23 +265,23 @@ type internal FSharpSignatureHelpProvider match symbolUse.Symbol with | :? FSharpMemberOrFunctionOrValue as mfv when isValid mfv -> - let tooltip = checkFileResults.GetStructuredToolTipText(fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLine.ToString(), lexerSymbol.FullIsland, FSharpTokenTag.IDENT) + let tooltip = checkFileResults.GetToolTip(fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLineText, lexerSymbol.FullIsland, FSharpTokenTag.IDENT) match tooltip with - | FSharpToolTipText [] - | FSharpToolTipText [FSharpStructuredToolTipElement.None] -> return! None + | ToolTipText [] + | ToolTipText [ToolTipElement.None] -> return! None | _ -> - let possiblePipelineIdent = parseResults.TryIdentOfPipelineContainingPosAndNumArgsApplied symbolUse.RangeAlternate.Start + let possiblePipelineIdent = parseResults.TryIdentOfPipelineContainingPosAndNumArgsApplied symbolUse.Range.Start let numArgsAlreadyApplied = match possiblePipelineIdent with | None -> 0 | Some (_, numArgsApplied) -> numArgsApplied - let definedArgs = mfv.CurriedParameterGroups |> Seq.concat |> Array.ofSeq + let definedArgs = mfv.CurriedParameterGroups |> Array.ofSeq let numDefinedArgs = definedArgs.Length let curriedArgsInSource = - parseResults.GetAllArgumentsForFunctionApplicationAtPostion symbolUse.RangeAlternate.Start + parseResults.GetAllArgumentsForFunctionApplicationAtPostion symbolUse.Range.Start |> Option.defaultValue [] |> Array.ofList @@ -325,7 +321,7 @@ type internal FSharpSignatureHelpProvider | None -> let possibleNextIndex = curriedArgsInSource - |> Array.tryFindIndex(fun argRange -> Range.posGeq argRange.Start caretPos) + |> Array.tryFindIndex(fun argRange -> Position.posGeq argRange.Start caretPos) match possibleNextIndex with | Some index -> Some index @@ -350,62 +346,127 @@ type internal FSharpSignatureHelpProvider let fsharpDocs = RoslynHelpers.joinWithLineBreaks [documentation; typeParameterMap; usage; exceptions] let docs = ResizeArray() - for fsharpDoc in fsharpDocs do - RoslynHelpers.CollectTaggedText docs fsharpDoc + fsharpDocs |> Seq.iter (RoslynHelpers.CollectTaggedText docs) let parts = ResizeArray() - for part in mainDescription do - RoslynHelpers.CollectTaggedText parts part + mainDescription |> Seq.iter (RoslynHelpers.CollectTaggedText parts) let displayArgs = ResizeArray() // Offset by 1 here until we support reverse indexes in this codebase - for argument in definedArgs.[.. definedArgs.Length - 1 - numArgsAlreadyApplied] do - let taggedText = ResizeArray() + definedArgs.[.. definedArgs.Length - 1 - numArgsAlreadyApplied] |> Array.iteri (fun index argument -> let tt = ResizeArray() - let layout = argument.Type.FormatLayout symbolUse.DisplayContext - Layout.renderL (Layout.taggedTextListR taggedText.Add) layout |> ignore - for part in taggedText do - RoslynHelpers.CollectTaggedText tt part - - let display = - [| - TaggedText(TextTags.Local, argument.DisplayName) - TaggedText(TextTags.Punctuation, ":") - TaggedText(TextTags.Space, " ") - |] - |> ResizeArray - - display.AddRange(tt) - - let info = - { ParameterName = argument.DisplayName - IsOptional = false - CanonicalTypeTextForSorting = argument.FullName - Documentation = ResizeArray() - DisplayParts = display } - - displayArgs.Add(info) + + if argument.Count = 1 then + let argument = argument.[0] + let taggedText = argument.Type.FormatLayout symbolUse.DisplayContext + taggedText |> Seq.iter (RoslynHelpers.CollectTaggedText tt) + + let name = + if String.IsNullOrWhiteSpace(argument.DisplayName) then + "arg" + string index + else + argument.DisplayName + + let display = + [| + RoslynTaggedText(TextTags.Local, name) + RoslynTaggedText(TextTags.Punctuation, ":") + RoslynTaggedText(TextTags.Space, " ") + |] + |> ResizeArray + + if argument.Type.IsFunctionType then + display.Add(RoslynTaggedText(TextTags.Punctuation, "(")) + + display.AddRange(tt) + + if argument.Type.IsFunctionType then + display.Add(RoslynTaggedText(TextTags.Punctuation, ")")) + + let info = + { ParameterName = name + IsOptional = false + CanonicalTypeTextForSorting = name + Documentation = ResizeArray() + DisplayParts = display } + + displayArgs.Add(info) + else + let display = ResizeArray() + display.Add(RoslynTaggedText(TextTags.Punctuation, "(")) + + let separatorParts = + [| + RoslynTaggedText(TextTags.Space, " ") + RoslynTaggedText(TextTags.Operator, "*") + RoslynTaggedText(TextTags.Space, " ") + |] + + let mutable first = true + argument |> Seq.iteri (fun index arg -> + if first then + first <- false + else + display.AddRange(separatorParts) + let tt = ResizeArray() + + let taggedText = arg.Type.FormatLayout symbolUse.DisplayContext + taggedText |> Seq.iter (RoslynHelpers.CollectTaggedText tt) + + let name = + if String.IsNullOrWhiteSpace(arg.DisplayName) then + "arg" + string index + else + arg.DisplayName + + let namePart = + [| + RoslynTaggedText(TextTags.Local, name) + RoslynTaggedText(TextTags.Punctuation, ":") + RoslynTaggedText(TextTags.Space, " ") + |] + + display.AddRange(namePart) + + if arg.Type.IsFunctionType then + display.Add(RoslynTaggedText(TextTags.Punctuation, "(")) + + display.AddRange(tt) + + if arg.Type.IsFunctionType then + display.Add(RoslynTaggedText(TextTags.Punctuation, ")"))) + + display.Add(RoslynTaggedText(TextTags.Punctuation, ")")) + + let info = + { ParameterName = "" // No name here, since it's a tuple of arguments has no name in the F# symbol info + IsOptional = false + CanonicalTypeTextForSorting = "" + Documentation = ResizeArray() + DisplayParts = display } + + displayArgs.Add(info)) do! Option.guard (displayArgs.Count > 0) let prefixParts = [| if mfv.IsMember then - TaggedText(TextTags.Keyword, "member") + RoslynTaggedText(TextTags.Keyword, "member") else - TaggedText(TextTags.Keyword, "val") - TaggedText(TextTags.Space, " ") - TaggedText(TextTags.Method, mfv.DisplayName) - TaggedText(TextTags.Punctuation, ":") - TaggedText(TextTags.Space, " ") + RoslynTaggedText(TextTags.Keyword, "val") + RoslynTaggedText(TextTags.Space, " ") + RoslynTaggedText(TextTags.Method, mfv.DisplayName) + RoslynTaggedText(TextTags.Punctuation, ":") + RoslynTaggedText(TextTags.Space, " ") |] let separatorParts = [| - TaggedText(TextTags.Space, " ") - TaggedText(TextTags.Operator, "->") - TaggedText(TextTags.Space, " ") + RoslynTaggedText(TextTags.Space, " ") + RoslynTaggedText(TextTags.Operator, "->") + RoslynTaggedText(TextTags.Space, " ") |] let sigHelpItem = @@ -417,14 +478,15 @@ type internal FSharpSignatureHelpProvider Parameters = displayArgs.ToArray() MainDescription = ResizeArray() } - let! symbolSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.RangeAlternate) + let! symbolSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.Range) let data = { SignatureHelpItems = [| sigHelpItem |] ApplicableSpan = TextSpan(symbolSpan.End, caretPosition - symbolSpan.End) ArgumentIndex = argumentIndex ArgumentCount = displayArgs.Count - ArgumentName = None } + ArgumentName = None + CurrentSignatureHelpSessionKind = FunctionApplication } return! Some data | _ -> @@ -435,35 +497,47 @@ type internal FSharpSignatureHelpProvider ( document: Document, defines: string list, - checker: FSharpChecker, documentationBuilder: IDocumentationBuilder, - sourceText: SourceText, caretPosition: int, - options: FSharpProjectOptions, - filePath: string, - textVersionHash: int, - triggerTypedChar: char option + triggerTypedChar: char option, + possibleCurrentSignatureHelpSessionKind: CurrentSignatureHelpSessionKind option ) = asyncMaybe { + let! parseResults, checkFileResults = document.GetFSharpParseAndCheckResultsAsync("ProvideSignatureHelp") |> liftAsync + + let! sourceText = document.GetTextAsync() |> liftTaskAsync + let textLines = sourceText.Lines let caretLinePos = textLines.GetLinePosition(caretPosition) let caretLineColumn = caretLinePos.Character - let perfOptions = document.FSharpOptions.LanguageServicePerformance - let! parseResults, _, checkFileResults = checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, options, perfOptions, userOpName = userOpName) - match parseResults.FindNoteworthyParamInfoLocations(Pos.fromZ caretLinePos.Line caretLineColumn) with - | Some paramInfoLocations -> + let adjustedColumnInSource = + let rec loop ch pos = + if Char.IsWhiteSpace(ch) then + loop sourceText.[pos - 1] (pos - 1) + else + pos + loop sourceText.[caretPosition - 1] (caretPosition - 1) + + let adjustedColumnChar = sourceText.[adjustedColumnInSource] + + match triggerTypedChar, possibleCurrentSignatureHelpSessionKind with + // Generally ' ' indicates a function application, but it's also used commonly after a comma in a method call. + // This means that the adjusted position relative to the caret could be a ',' or a '(' or '<', + // which would mean we're already inside of a method call - not a function argument. So we bail if that's the case. + | Some ' ', _ when adjustedColumnChar <> ',' && adjustedColumnChar <> '(' && adjustedColumnChar <> '<' -> return! - FSharpSignatureHelpProvider.ProvideMethodsAsyncAux( - caretLinePos, - caretLineColumn, - paramInfoLocations, + FSharpSignatureHelpProvider.ProvideParametersAsyncAux( + parseResults, checkFileResults, + document.Id, + defines, documentationBuilder, sourceText, caretPosition, - triggerTypedChar) - | None -> + adjustedColumnInSource, + document.FilePath) + | _, Some FunctionApplication when adjustedColumnChar <> ',' && adjustedColumnChar <> '(' && adjustedColumnChar <> '<' -> return! FSharpSignatureHelpProvider.ProvideParametersAsyncAux( parseResults, @@ -473,7 +547,20 @@ type internal FSharpSignatureHelpProvider documentationBuilder, sourceText, caretPosition, - filePath) + adjustedColumnInSource, + document.FilePath) + | _ -> + let! paramInfoLocations = parseResults.FindParameterLocations(Position.fromZ caretLinePos.Line caretLineColumn) + return! + FSharpSignatureHelpProvider.ProvideMethodsAsyncAux( + caretLinePos, + caretLineColumn, + paramInfoLocations, + checkFileResults, + documentationBuilder, + sourceText, + caretPosition, + triggerTypedChar) } interface IFSharpSignatureHelpProvider with @@ -482,57 +569,65 @@ type internal FSharpSignatureHelpProvider member _.GetItemsAsync(document, position, triggerInfo, cancellationToken) = asyncMaybe { - let! _, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) - let defines = projectInfoManager.GetCompilationDefinesForEditingDocument(document) - let! sourceText = document.GetTextAsync(cancellationToken) - let! textVersion = document.GetTextVersionAsync(cancellationToken) - let checker = checkerProvider.Checker + let defines = document.GetFSharpQuickDefines() let triggerTypedChar = if triggerInfo.TriggerCharacter.HasValue && triggerInfo.TriggerReason = FSharpSignatureHelpTriggerReason.TypeCharCommand then Some triggerInfo.TriggerCharacter.Value else None - let! signatureHelpData = - FSharpSignatureHelpProvider.ProvideSignatureHelp( - document, - defines, - checker, - documentationBuilder, - sourceText, - position, - projectOptions, - document.FilePath, - textVersion.GetHashCode(), - triggerTypedChar) - let items = - signatureHelpData.SignatureHelpItems - |> Array.map (fun item -> - let parameters = - item.Parameters - |> Array.map (fun paramInfo -> - FSharpSignatureHelpParameter( - paramInfo.ParameterName, - paramInfo.IsOptional, - documentationFactory = (fun _ -> paramInfo.Documentation :> seq<_>), - displayParts = paramInfo.DisplayParts)) + let doWork () = + async { + let! signatureHelpDataOpt = + FSharpSignatureHelpProvider.ProvideSignatureHelp( + document, + defines, + documentationBuilder, + position, + triggerTypedChar, + possibleCurrentSignatureHelpSessionKind) + match signatureHelpDataOpt with + | None -> + possibleCurrentSignatureHelpSessionKind <- None + return None + | Some signatureHelpData -> + let items = + signatureHelpData.SignatureHelpItems + |> Array.map (fun item -> + let parameters = + item.Parameters + |> Array.map (fun paramInfo -> + FSharpSignatureHelpParameter( + paramInfo.ParameterName, + paramInfo.IsOptional, + documentationFactory = (fun _ -> paramInfo.Documentation :> seq<_>), + displayParts = paramInfo.DisplayParts)) - FSharpSignatureHelpItem( - isVariadic=item.HasParamArrayArg, - documentationFactory=(fun _ -> item.Documentation :> seq<_>), - prefixParts=item.PrefixParts, - separatorParts=item.SeparatorParts, - suffixParts=item.SuffixParts, - parameters=parameters, - descriptionParts=item.MainDescription)) - - return - FSharpSignatureHelpItems( - items, - signatureHelpData.ApplicableSpan, - signatureHelpData.ArgumentIndex, - signatureHelpData.ArgumentCount, - Option.toObj signatureHelpData.ArgumentName) + FSharpSignatureHelpItem( + isVariadic=item.HasParamArrayArg, + documentationFactory=(fun _ -> item.Documentation :> seq<_>), + prefixParts=item.PrefixParts, + separatorParts=item.SeparatorParts, + suffixParts=item.SuffixParts, + parameters=parameters, + descriptionParts=item.MainDescription)) + + match signatureHelpData.CurrentSignatureHelpSessionKind with + | MethodCall -> + possibleCurrentSignatureHelpSessionKind <- Some MethodCall + | FunctionApplication -> + possibleCurrentSignatureHelpSessionKind <- Some FunctionApplication + + return + FSharpSignatureHelpItems( + items, + signatureHelpData.ApplicableSpan, + signatureHelpData.ArgumentIndex, + signatureHelpData.ArgumentCount, + Option.toObj signatureHelpData.ArgumentName) + |> Some + } + return! doWork () } |> Async.map Option.toObj |> RoslynHelpers.StartAsyncAsTask cancellationToken diff --git a/vsintegration/src/FSharp.Editor/Debugging/BreakpointResolutionService.fs b/vsintegration/src/FSharp.Editor/Debugging/BreakpointResolutionService.fs index 17e2724d6ee..f0fe54af81d 100644 --- a/vsintegration/src/FSharp.Editor/Debugging/BreakpointResolutionService.fs +++ b/vsintegration/src/FSharp.Editor/Debugging/BreakpointResolutionService.fs @@ -10,25 +10,25 @@ open System.Threading.Tasks open System.Linq open Microsoft.CodeAnalysis -open Microsoft.CodeAnalysis.Editor.Implementation.Debugging -open Microsoft.CodeAnalysis.Host.Mef open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor.Implementation.Debugging -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Range +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Text +open FSharp.Compiler.Text.Position [)>] type internal FSharpBreakpointResolutionService [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = - static let userOpName = "BreakpointResolution" - static member GetBreakpointLocation(checker: FSharpChecker, sourceText: SourceText, fileName: string, textSpan: TextSpan, parsingOptions: FSharpParsingOptions) = + static member GetBreakpointLocation(document: Document, textSpan: TextSpan) = async { + let! ct = Async.CancellationToken + + let! sourceText = document.GetTextAsync(ct) |> Async.AwaitTask + let textLinePos = sourceText.Lines.GetLinePosition(textSpan.Start) let textInLine = sourceText.GetSubText(sourceText.Lines.[textLinePos.Line].Span).ToString() @@ -37,16 +37,17 @@ type internal FSharpBreakpointResolutionService else let textLineColumn = textLinePos.Character let fcsTextLineNumber = Line.fromZ textLinePos.Line // Roslyn line numbers are zero-based, FSharp.Compiler.Service line numbers are 1-based - let! parseResults = checker.ParseFile(fileName, sourceText.ToFSharpSourceText(), parsingOptions, userOpName = userOpName) - return parseResults.ValidateBreakpointLocation(mkPos fcsTextLineNumber textLineColumn) + let! parseResults = document.GetFSharpParseResultsAsync(nameof(FSharpBreakpointResolutionService)) |> liftAsync + match parseResults with + | Some parseResults -> return parseResults.ValidateBreakpointLocation(mkPos fcsTextLineNumber textLineColumn) + | _ -> return None } interface IFSharpBreakpointResolutionService with member this.ResolveBreakpointAsync(document: Document, textSpan: TextSpan, cancellationToken: CancellationToken): Task = asyncMaybe { - let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) + let! range = FSharpBreakpointResolutionService.GetBreakpointLocation(document, textSpan) let! sourceText = document.GetTextAsync(cancellationToken) - let! range = FSharpBreakpointResolutionService.GetBreakpointLocation(checkerProvider.Checker, sourceText, document.Name, textSpan, parsingOptions) let! span = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, range) return FSharpBreakpointResolutionResult.CreateSpanResult(document, span) } diff --git a/vsintegration/src/FSharp.Editor/Debugging/LanguageDebugInfoService.fs b/vsintegration/src/FSharp.Editor/Debugging/LanguageDebugInfoService.fs index cf37cf08aa6..d2b30fc01bb 100644 --- a/vsintegration/src/FSharp.Editor/Debugging/LanguageDebugInfoService.fs +++ b/vsintegration/src/FSharp.Editor/Debugging/LanguageDebugInfoService.fs @@ -10,15 +10,12 @@ open System.Threading.Tasks open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Classification -open Microsoft.CodeAnalysis.Editor.Implementation.Debugging -open Microsoft.CodeAnalysis.Host.Mef +open FSharp.Compiler.EditorServices open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor.Implementation.Debugging -open FSharp.Compiler - [)>] -type internal FSharpLanguageDebugInfoService [](projectInfoManager: FSharpProjectOptionsManager) = +type internal FSharpLanguageDebugInfoService []() = static member GetDataTipInformation(sourceText: SourceText, position: int, tokens: List): TextSpan option = let tokenIndex = tokens |> Seq.tryFindIndex(fun t -> t.TextSpan.Contains(position)) @@ -52,7 +49,7 @@ type internal FSharpLanguageDebugInfoService [](projectInf member this.GetDataTipInfoAsync(document: Document, position: int, cancellationToken: CancellationToken): Task = async { - let defines = projectInfoManager.GetCompilationDefinesForEditingDocument(document) + let defines = document.GetFSharpQuickDefines() let! cancellationToken = Async.CancellationToken let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask let textSpan = TextSpan.FromBounds(0, sourceText.Length) diff --git a/vsintegration/src/FSharp.Editor/Diagnostics/DocumentDiagnosticAnalyzer.fs b/vsintegration/src/FSharp.Editor/Diagnostics/DocumentDiagnosticAnalyzer.fs index 43e6efec1fb..4f8e55f23fd 100644 --- a/vsintegration/src/FSharp.Editor/Diagnostics/DocumentDiagnosticAnalyzer.fs +++ b/vsintegration/src/FSharp.Editor/Diagnostics/DocumentDiagnosticAnalyzer.fs @@ -13,7 +13,8 @@ open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Diagnostics -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Diagnostics [] type internal DiagnosticsType = @@ -24,28 +25,24 @@ type internal DiagnosticsType = type internal FSharpDocumentDiagnosticAnalyzer [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = - static let userOpName = "DocumentDiagnosticAnalyzer" - static let errorInfoEqualityComparer = - { new IEqualityComparer with - member __.Equals (x, y) = + { new IEqualityComparer with + member _.Equals (x, y) = x.FileName = y.FileName && - x.StartLineAlternate = y.StartLineAlternate && - x.EndLineAlternate = y.EndLineAlternate && + x.StartLine = y.StartLine && + x.EndLine = y.EndLine && x.StartColumn = y.StartColumn && x.EndColumn = y.EndColumn && x.Severity = y.Severity && x.Message = y.Message && x.Subcategory = y.Subcategory && x.ErrorNumber = y.ErrorNumber - member __.GetHashCode x = + member _.GetHashCode x = let mutable hash = 17 - hash <- hash * 23 + x.StartLineAlternate.GetHashCode() - hash <- hash * 23 + x.EndLineAlternate.GetHashCode() + hash <- hash * 23 + x.StartLine.GetHashCode() + hash <- hash * 23 + x.EndLine.GetHashCode() hash <- hash * 23 + x.StartColumn.GetHashCode() hash <- hash * 23 + x.EndColumn.GetHashCode() hash <- hash * 23 + x.Severity.GetHashCode() @@ -55,35 +52,37 @@ type internal FSharpDocumentDiagnosticAnalyzer hash } - static member GetDiagnostics(checker: FSharpChecker, filePath: string, sourceText: SourceText, textVersionHash: int, parsingOptions: FSharpParsingOptions, options: FSharpProjectOptions, diagnosticType: DiagnosticsType) = + static member GetDiagnostics(document: Document, diagnosticType: DiagnosticsType) = async { - let fsSourceText = sourceText.ToFSharpSourceText() - let! parseResults = checker.ParseFile(filePath, fsSourceText, parsingOptions, userOpName=userOpName) + let! ct = Async.CancellationToken + + let! parseResults = document.GetFSharpParseResultsAsync("GetDiagnostics") + + let! sourceText = document.GetTextAsync(ct) |> Async.AwaitTask + let filePath = document.FilePath + let! errors = async { match diagnosticType with | DiagnosticsType.Semantic -> - let! checkResultsAnswer = checker.CheckFileInProject(parseResults, filePath, textVersionHash, fsSourceText, options, userOpName=userOpName) - match checkResultsAnswer with - | FSharpCheckFileAnswer.Aborted -> return [||] - | FSharpCheckFileAnswer.Succeeded results -> - // In order to eleminate duplicates, we should not return parse errors here because they are returned by `AnalyzeSyntaxAsync` method. - let allErrors = HashSet(results.Errors, errorInfoEqualityComparer) - allErrors.ExceptWith(parseResults.Errors) - return Seq.toArray allErrors + let! _, checkResults = document.GetFSharpParseAndCheckResultsAsync("GetDiagnostics") + // In order to eleminate duplicates, we should not return parse errors here because they are returned by `AnalyzeSyntaxAsync` method. + let allErrors = HashSet(checkResults.Diagnostics, errorInfoEqualityComparer) + allErrors.ExceptWith(parseResults.Diagnostics) + return Seq.toArray allErrors | DiagnosticsType.Syntax -> - return parseResults.Errors + return parseResults.Diagnostics } let results = HashSet(errors, errorInfoEqualityComparer) |> Seq.choose(fun error -> - if error.StartLineAlternate = 0 || error.EndLineAlternate = 0 then + if error.StartLine = 0 || error.EndLine = 0 then // F# error line numbers are one-based. Compiler returns 0 for global errors (reported by ProjectDiagnosticAnalyzer) None else // Roslyn line numbers are zero-based - let linePositionSpan = LinePositionSpan(LinePosition(error.StartLineAlternate - 1, error.StartColumn), LinePosition(error.EndLineAlternate - 1, error.EndColumn)) + let linePositionSpan = LinePositionSpan(LinePosition(error.StartLine - 1, error.StartColumn), LinePosition(error.EndLine - 1, error.EndColumn)) let textSpan = sourceText.Lines.GetTextSpan(linePositionSpan) // F# compiler report errors at end of file if parsing fails. It should be corrected to match Roslyn boundaries @@ -106,28 +105,25 @@ type internal FSharpDocumentDiagnosticAnalyzer interface IFSharpDocumentDiagnosticAnalyzer with member this.AnalyzeSyntaxAsync(document: Document, cancellationToken: CancellationToken): Task> = + if document.Project.IsFSharpMetadata then Task.FromResult(ImmutableArray.Empty) + else + asyncMaybe { - let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) - let! sourceText = document.GetTextAsync(cancellationToken) - let! textVersion = document.GetTextVersionAsync(cancellationToken) return! - FSharpDocumentDiagnosticAnalyzer.GetDiagnostics(checkerProvider.Checker, document.FilePath, sourceText, textVersion.GetHashCode(), parsingOptions, projectOptions, DiagnosticsType.Syntax) + FSharpDocumentDiagnosticAnalyzer.GetDiagnostics(document, DiagnosticsType.Syntax) |> liftAsync } |> Async.map (Option.defaultValue ImmutableArray.Empty) |> RoslynHelpers.StartAsyncAsTask cancellationToken member this.AnalyzeSemanticsAsync(document: Document, cancellationToken: CancellationToken): Task> = + if document.Project.IsFSharpMiscellaneousOrMetadata && not document.IsFSharpScript then Task.FromResult(ImmutableArray.Empty) + else + asyncMaybe { - let! parsingOptions, _, projectOptions = projectInfoManager.TryGetOptionsForDocumentOrProject(document, cancellationToken, userOpName) - let! sourceText = document.GetTextAsync(cancellationToken) - let! textVersion = document.GetTextVersionAsync(cancellationToken) - if document.Project.Name <> FSharpConstants.FSharpMiscellaneousFilesName || isScriptFile document.FilePath then - return! - FSharpDocumentDiagnosticAnalyzer.GetDiagnostics(checkerProvider.Checker, document.FilePath, sourceText, textVersion.GetHashCode(), parsingOptions, projectOptions, DiagnosticsType.Semantic) - |> liftAsync - else - return ImmutableArray.Empty + return! + FSharpDocumentDiagnosticAnalyzer.GetDiagnostics(document, DiagnosticsType.Semantic) + |> liftAsync } |> Async.map (Option.defaultValue ImmutableArray.Empty) |> RoslynHelpers.StartAsyncAsTask cancellationToken diff --git a/vsintegration/src/FSharp.Editor/Diagnostics/SimplifyNameDiagnosticAnalyzer.fs b/vsintegration/src/FSharp.Editor/Diagnostics/SimplifyNameDiagnosticAnalyzer.fs index 50ac17d7bc4..0c853a404cf 100644 --- a/vsintegration/src/FSharp.Editor/Diagnostics/SimplifyNameDiagnosticAnalyzer.fs +++ b/vsintegration/src/FSharp.Editor/Diagnostics/SimplifyNameDiagnosticAnalyzer.fs @@ -9,10 +9,10 @@ open System.Diagnostics open System.Threading open Microsoft.CodeAnalysis -open FSharp.Compiler.Range open System.Runtime.Caching open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Diagnostics -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Text type private PerDocumentSavedData = { Hash: int; Diagnostics: ImmutableArray } @@ -20,8 +20,6 @@ type private PerDocumentSavedData = { Hash: int; Diagnostics: ImmutableArray] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = static let userOpName = "SimplifyNameDiagnosticAnalyzer" @@ -34,11 +32,12 @@ type internal SimplifyNameDiagnosticAnalyzer interface IFSharpSimplifyNameDiagnosticAnalyzer with member _.AnalyzeSemanticsAsync(descriptor, document: Document, cancellationToken: CancellationToken) = + if document.Project.IsFSharpMiscellaneousOrMetadata && not document.IsFSharpScript then Tasks.Task.FromResult(ImmutableArray.Empty) + else + asyncMaybe { - do! Option.guard document.FSharpOptions.CodeFixes.SimplifyName + do! Option.guard document.Project.IsFSharpCodeFixesSimplifyNameEnabled do Trace.TraceInformation("{0:n3} (start) SimplifyName", DateTime.Now.TimeOfDay.TotalSeconds) - do! Async.Sleep DefaultTuning.SimplifyNameInitialDelay |> liftAsync - let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) let! textVersion = document.GetTextVersionAsync(cancellationToken) let textVersionHash = textVersion.GetHashCode() let! _ = guard.WaitAsync(cancellationToken) |> Async.AwaitTask |> liftAsync @@ -48,8 +47,7 @@ type internal SimplifyNameDiagnosticAnalyzer | :? PerDocumentSavedData as data when data.Hash = textVersionHash -> return data.Diagnostics | _ -> let! sourceText = document.GetTextAsync() - let checker = checkerProvider.Checker - let! _, _, checkResults = checker.ParseAndCheckDocument(document, projectOptions, sourceText = sourceText, userOpName=userOpName) + let! _, checkResults = document.GetFSharpParseAndCheckResultsAsync(nameof(SimplifyNameDiagnosticAnalyzer)) |> liftAsync let! result = SimplifyNames.getSimplifiableNames(checkResults, fun lineNumber -> sourceText.Lines.[Line.toZ lineNumber].ToString()) |> liftAsync let mutable diag = ResizeArray() for r in result do diff --git a/vsintegration/src/FSharp.Editor/Diagnostics/UnusedDeclarationsAnalyzer.fs b/vsintegration/src/FSharp.Editor/Diagnostics/UnusedDeclarationsAnalyzer.fs index ce979c4e0e1..c94b193e6aa 100644 --- a/vsintegration/src/FSharp.Editor/Diagnostics/UnusedDeclarationsAnalyzer.fs +++ b/vsintegration/src/FSharp.Editor/Diagnostics/UnusedDeclarationsAnalyzer.fs @@ -8,37 +8,32 @@ open System.Collections.Immutable open System.Diagnostics open Microsoft.CodeAnalysis -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.EditorServices open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Diagnostics [)>] type internal UnusedDeclarationsAnalyzer [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = - - static let userOpName = "UnusedDeclarationsAnalyzer" interface IFSharpUnusedDeclarationsDiagnosticAnalyzer with member _.AnalyzeSemanticsAsync(descriptor, document, cancellationToken) = + if document.Project.IsFSharpMiscellaneousOrMetadata && not document.IsFSharpScript then Threading.Tasks.Task.FromResult(ImmutableArray.Empty) + else + asyncMaybe { - do! Option.guard document.FSharpOptions.CodeFixes.UnusedDeclarations + do! Option.guard document.Project.IsFSharpCodeFixesUnusedDeclarationsEnabled do Trace.TraceInformation("{0:n3} (start) UnusedDeclarationsAnalyzer", DateTime.Now.TimeOfDay.TotalSeconds) - do! Async.Sleep DefaultTuning.UnusedDeclarationsAnalyzerInitialDelay |> liftAsync // be less intrusive, give other work priority most of the time - match! projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) with - | (_parsingOptions, projectOptions) -> - let! sourceText = document.GetTextAsync() - let checker = checkerProvider.Checker - let! _, _, checkResults = checker.ParseAndCheckDocument(document, projectOptions, sourceText = sourceText, userOpName = userOpName) - let! unusedRanges = UnusedDeclarations.getUnusedDeclarations( checkResults, (isScriptFile document.FilePath)) |> liftAsync - return - unusedRanges - |> Seq.map (fun m -> Diagnostic.Create(descriptor, RoslynHelpers.RangeToLocation(m, sourceText, document.FilePath))) - |> Seq.toImmutableArray + let! _, checkResults = document.GetFSharpParseAndCheckResultsAsync(nameof(UnusedDeclarationsAnalyzer)) |> liftAsync + let! unusedRanges = UnusedDeclarations.getUnusedDeclarations( checkResults, (isScriptFile document.FilePath)) |> liftAsync + let! sourceText = document.GetTextAsync() + return + unusedRanges + |> Seq.map (fun m -> Diagnostic.Create(descriptor, RoslynHelpers.RangeToLocation(m, sourceText, document.FilePath))) + |> Seq.toImmutableArray } |> Async.map (Option.defaultValue ImmutableArray.Empty) |> RoslynHelpers.StartAsyncAsTask cancellationToken diff --git a/vsintegration/src/FSharp.Editor/Diagnostics/UnusedOpensDiagnosticAnalyzer.fs b/vsintegration/src/FSharp.Editor/Diagnostics/UnusedOpensDiagnosticAnalyzer.fs index f7ef3160b88..9c75bab971e 100644 --- a/vsintegration/src/FSharp.Editor/Diagnostics/UnusedOpensDiagnosticAnalyzer.fs +++ b/vsintegration/src/FSharp.Editor/Diagnostics/UnusedOpensDiagnosticAnalyzer.fs @@ -10,8 +10,9 @@ open System.Threading open Microsoft.CodeAnalysis -open FSharp.Compiler.Range -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Text open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Diagnostics @@ -19,31 +20,27 @@ open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Diagnostics type internal UnusedOpensDiagnosticAnalyzer [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = - static let userOpName = "UnusedOpensAnalyzer" - - static member GetUnusedOpenRanges(document: Document, options, checker: FSharpChecker) : Async> = + static member GetUnusedOpenRanges(document: Document) : Async> = asyncMaybe { - do! Option.guard document.FSharpOptions.CodeFixes.UnusedOpens + do! Option.guard document.Project.IsFSharpCodeFixesUnusedOpensEnabled let! sourceText = document.GetTextAsync() - let! _, _, checkResults = checker.ParseAndCheckDocument(document, options, sourceText = sourceText, userOpName = userOpName) + let! _, checkResults = document.GetFSharpParseAndCheckResultsAsync(nameof(UnusedOpensDiagnosticAnalyzer)) |> liftAsync let! unusedOpens = UnusedOpens.getUnusedOpens(checkResults, fun lineNumber -> sourceText.Lines.[Line.toZ lineNumber].ToString()) |> liftAsync return unusedOpens } interface IFSharpUnusedOpensDiagnosticAnalyzer with - member this.AnalyzeSemanticsAsync(descriptor, document: Document, cancellationToken: CancellationToken) = + member _.AnalyzeSemanticsAsync(descriptor, document: Document, cancellationToken: CancellationToken) = + if document.Project.IsFSharpMiscellaneousOrMetadata && not document.IsFSharpScript then Tasks.Task.FromResult(ImmutableArray.Empty) + else + asyncMaybe { do Trace.TraceInformation("{0:n3} (start) UnusedOpensAnalyzer", DateTime.Now.TimeOfDay.TotalSeconds) - do! Async.Sleep DefaultTuning.UnusedOpensAnalyzerInitialDelay |> liftAsync // be less intrusive, give other work priority most of the time - let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) let! sourceText = document.GetTextAsync() - let checker = checkerProvider.Checker - let! unusedOpens = UnusedOpensDiagnosticAnalyzer.GetUnusedOpenRanges(document, projectOptions, checker) + let! unusedOpens = UnusedOpensDiagnosticAnalyzer.GetUnusedOpenRanges(document) return unusedOpens diff --git a/vsintegration/src/FSharp.Editor/DocComments/XMLDocumentation.fs b/vsintegration/src/FSharp.Editor/DocComments/XMLDocumentation.fs index 754fb99265a..3eddf9a3ec8 100644 --- a/vsintegration/src/FSharp.Editor/DocComments/XMLDocumentation.fs +++ b/vsintegration/src/FSharp.Editor/DocComments/XMLDocumentation.fs @@ -3,13 +3,17 @@ namespace Microsoft.VisualStudio.FSharp.Editor open System +open System.Collections.Immutable open System.Runtime.CompilerServices open System.Text.RegularExpressions open Microsoft.VisualStudio.Shell open Microsoft.VisualStudio.Shell.Interop -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Layout -open FSharp.Compiler.Layout.TaggedTextOps +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Symbols +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Text.TaggedText open System.Collections.Generic type internal ITaggedTextCollector = @@ -32,7 +36,7 @@ type internal TextSanitizingCollector(collector, ?lineLimit: int) = count <- count + 1 | _ -> isEmpty <- false - endsWithLineBreak <- text.Tag = LayoutTag.LineBreak + endsWithLineBreak <- text.Tag = TextTag.LineBreak if endsWithLineBreak then count <- count + 1 collector text @@ -57,14 +61,14 @@ type internal TextSanitizingCollector(collector, ?lineLimit: int) = addTaggedTextEntry (tagText paragraph) if i < paragraphs.Length - 1 then // insert two line breaks to separate paragraphs - addTaggedTextEntry Literals.lineBreak - addTaggedTextEntry Literals.lineBreak) + addTaggedTextEntry TaggedText.lineBreak + addTaggedTextEntry TaggedText.lineBreak) interface ITaggedTextCollector with member this.Add taggedText = // TODO: bail out early if line limit is already hit match taggedText.Tag with - | LayoutTag.Text -> reportTextLines taggedText.Text + | TextTag.Text -> reportTextLines taggedText.Text | _ -> addTaggedTextEntry taggedText member this.IsEmpty = isEmpty @@ -101,7 +105,7 @@ module internal XmlDocumentation = else xml let AppendHardLine(collector: ITaggedTextCollector) = - collector.Add Literals.lineBreak + collector.Add TaggedText.lineBreak let EnsureHardLine(collector: ITaggedTextCollector) = if not collector.EndsWithLineBreak then AppendHardLine collector @@ -109,7 +113,7 @@ module internal XmlDocumentation = let AppendOnNewLine (collector: ITaggedTextCollector) (line:string) = if line.Length > 0 then EnsureHardLine collector - collector.Add(TaggedTextOps.tagText line) + collector.Add(TaggedText.tagText line) open System.Xml open System.Xml.Linq @@ -149,7 +153,7 @@ module internal XmlDocumentation = let parts = typeName.Split([|'.'|]) for i = 0 to parts.Length - 2 do collector.Add(tagNamespace parts.[i]) - collector.Add(Literals.dot) + collector.Add(TaggedText.dot) collector.Add(tagClass parts.[parts.Length - 1]) type XmlDocReader private (doc: XElement) = @@ -164,7 +168,7 @@ module internal XmlDocumentation = static member TryCreate (xml: string) = try Some (XmlDocReader(XElement.Parse(ProcessXml xml))) with _ -> None - member __.CollectSummary(collector: ITaggedTextCollector) = + member _.CollectSummary(collector: ITaggedTextCollector) = match Seq.tryHead (doc.Descendants(XName.op_Implicit "summary")) with | None -> () | Some el -> @@ -185,8 +189,8 @@ module internal XmlDocumentation = | name -> EnsureHardLine collector collector.Add(tagParameter name.Value) - collector.Add(Literals.colon) - collector.Add(Literals.space) + collector.Add(TaggedText.colon) + collector.Add(TaggedText.space) WriteNodes collector (p.Nodes()) member this.CollectExceptions(collector: ITaggedTextCollector) = @@ -203,9 +207,9 @@ module internal XmlDocumentation = collector.Add(tagSpace " ") WriteTypeName collector exnType.Value if not (Seq.isEmpty (p.Nodes())) then - collector.Add Literals.space - collector.Add Literals.minus - collector.Add Literals.space + collector.Add TaggedText.space + collector.Add TaggedText.minus + collector.Add TaggedText.space WriteNodes collector (p.Nodes()) type VsThreadToken() = class end @@ -244,7 +248,7 @@ module internal XmlDocumentation = interface IDocumentationBuilder with /// Append the given processed XML formatted into the string builder - override __.AppendDocumentationFromProcessedXML(xmlCollector, exnCollector, processedXml, showExceptions, showParameters, paramName) = + override _.AppendDocumentationFromProcessedXML(xmlCollector, exnCollector, processedXml, showExceptions, showParameters, paramName) = match XmlDocReader.TryCreate processedXml with | Some xmlDocReader -> match paramName with @@ -286,10 +290,11 @@ module internal XmlDocumentation = let AppendXmlComment(documentationProvider:IDocumentationBuilder, xmlCollector: ITaggedTextCollector, exnCollector: ITaggedTextCollector, xml, showExceptions, showParameters, paramName) = match xml with | FSharpXmlDoc.None -> () - | FSharpXmlDoc.XmlDocFileSignature(filename,signature) -> + | FSharpXmlDoc.FromXmlFile(filename,signature) -> documentationProvider.AppendDocumentation(xmlCollector, exnCollector, filename, signature, showExceptions, showParameters, paramName) - | FSharpXmlDoc.Text(_rawText, processedXml) -> - let processedXml = ProcessXml("\n\n" + String.concat "\n" processedXml) + | FSharpXmlDoc.FromXmlText(xmlDoc) -> + let elaboratedXml = xmlDoc.GetElaboratedXmlLines() + let processedXml = ProcessXml("\n\n" + String.concat "\n" elaboratedXml) documentationProvider.AppendDocumentationFromProcessedXML(xmlCollector, exnCollector, processedXml, showExceptions, showParameters, paramName) let private AddSeparator (collector: ITaggedTextCollector) = @@ -300,7 +305,7 @@ module internal XmlDocumentation = /// Build a data tip text string with xml comments injected. let BuildTipText(documentationProvider:IDocumentationBuilder, - dataTipText: FSharpStructuredToolTipElement list, + dataTipText: ToolTipElement list, textCollector, xmlCollector, typeParameterMapCollector, usageCollector, exnCollector, showText, showExceptions, showParameters) = let textCollector: ITaggedTextCollector = TextSanitizingCollector(textCollector, lineLimit = 45) :> _ @@ -314,32 +319,32 @@ module internal XmlDocumentation = AddSeparator textCollector AddSeparator xmlCollector - let ProcessGenericParameters (tps: Layout list) = + let ProcessGenericParameters (tps: TaggedText[] list) = if not tps.IsEmpty then AppendHardLine typeParameterMapCollector AppendOnNewLine typeParameterMapCollector (SR.GenericParametersHeader()) for tp in tps do AppendHardLine typeParameterMapCollector typeParameterMapCollector.Add(tagSpace " ") - renderL (taggedTextListR typeParameterMapCollector.Add) tp |> ignore + tp |> Array.iter typeParameterMapCollector.Add - let Process add (dataTipElement: FSharpStructuredToolTipElement) = + let Process add (dataTipElement: ToolTipElement) = match dataTipElement with - | FSharpStructuredToolTipElement.None -> + | ToolTipElement.None -> false - | FSharpStructuredToolTipElement.Group (overloads) -> + | ToolTipElement.Group (overloads) -> let overloads = Array.ofList overloads let len = overloads.Length if len >= 1 then addSeparatorIfNecessary add if showText then - let AppendOverload (item: FSharpToolTipElementData<_>) = - if not(isEmptyL item.MainDescription) then + let AppendOverload (item: ToolTipElementData) = + if TaggedText.toString item.MainDescription <> "" then if not textCollector.IsEmpty then AppendHardLine textCollector - renderL (taggedTextListR textCollector.Add) item.MainDescription |> ignore + item.MainDescription |> Seq.iter textCollector.Add AppendOverload(overloads.[0]) if len >= 2 then AppendOverload(overloads.[1]) @@ -353,9 +358,9 @@ module internal XmlDocumentation = let item0 = overloads.[0] item0.Remarks |> Option.iter (fun r -> - if not(isEmptyL r) then + if TaggedText.toString r <> "" then AppendHardLine usageCollector - renderL (taggedTextListR usageCollector.Add) r |> ignore) + r |> Seq.iter usageCollector.Add) AppendXmlComment(documentationProvider, xmlCollector, exnCollector, item0.XmlDoc, showExceptions, showParameters, item0.ParamName) @@ -366,16 +371,16 @@ module internal XmlDocumentation = else false - | FSharpStructuredToolTipElement.CompositionError(errText) -> + | ToolTipElement.CompositionError(errText) -> textCollector.Add(tagText errText) true List.fold Process false dataTipText |> ignore - let BuildDataTipText(documentationProvider, textCollector, xmlCollector, typeParameterMapCollector, usageCollector, exnCollector, FSharpToolTipText(dataTipText)) = + let BuildDataTipText(documentationProvider, textCollector, xmlCollector, typeParameterMapCollector, usageCollector, exnCollector, ToolTipText(dataTipText)) = BuildTipText(documentationProvider, dataTipText, textCollector, xmlCollector, typeParameterMapCollector, usageCollector, exnCollector, true, true, false) - let BuildMethodOverloadTipText(documentationProvider, textCollector, xmlCollector, FSharpToolTipText(dataTipText), showParams) = + let BuildMethodOverloadTipText(documentationProvider, textCollector, xmlCollector, ToolTipText(dataTipText), showParams) = BuildTipText(documentationProvider, dataTipText, textCollector, xmlCollector, xmlCollector, ignore, ignore, false, false, showParams) let BuildMethodParamText(documentationProvider, xmlCollector, xml, paramName) = diff --git a/vsintegration/src/FSharp.Editor/DocumentHighlights/DocumentHighlightsService.fs b/vsintegration/src/FSharp.Editor/DocumentHighlights/DocumentHighlightsService.fs index bcc0bd3629b..207c1dd1e5c 100644 --- a/vsintegration/src/FSharp.Editor/DocumentHighlights/DocumentHighlightsService.fs +++ b/vsintegration/src/FSharp.Editor/DocumentHighlights/DocumentHighlightsService.fs @@ -8,13 +8,12 @@ open System.Collections.Immutable open System.Threading.Tasks open Microsoft.CodeAnalysis -open Microsoft.CodeAnalysis.DocumentHighlighting -open Microsoft.CodeAnalysis.Host.Mef open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.ExternalAccess.FSharp.DocumentHighlighting -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Range +open FSharp.Compiler +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Text type internal FSharpHighlightSpan = { IsDefinition: bool @@ -22,9 +21,7 @@ type internal FSharpHighlightSpan = override this.ToString() = sprintf "%+A" this [)>] -type internal FSharpDocumentHighlightsService [] (checkerProvider: FSharpCheckerProvider, projectInfoManager: FSharpProjectOptionsManager) = - - static let userOpName = "DocumentHighlights" +type internal FSharpDocumentHighlightsService [] () = /// Fix invalid spans if they appear to have redundant suffix and prefix. static let fixInvalidSymbolSpans (sourceText: SourceText) (lastIdent: string) (spans: FSharpHighlightSpan []) = @@ -52,19 +49,22 @@ type internal FSharpDocumentHighlightsService [] (checkerP |> Seq.distinctBy (fun span -> span.TextSpan.Start) |> Seq.toArray - static member GetDocumentHighlights(checker: FSharpChecker, documentKey: DocumentId, sourceText: SourceText, filePath: string, position: int, - defines: string list, options: FSharpProjectOptions, textVersionHash: int, languageServicePerformanceOptions: LanguageServicePerformanceOptions) : Async = + static member GetDocumentHighlights(document: Document, position: int) : Async = asyncMaybe { + let! symbol = document.TryFindFSharpLexerSymbolAsync(position, SymbolLookupKind.Greedy, false, false, nameof(FSharpDocumentHighlightsService.GetDocumentHighlights)) + + let! ct = Async.CancellationToken |> liftAsync + let! sourceText = document.GetTextAsync(ct) let textLine = sourceText.Lines.GetLineFromPosition(position) let textLinePos = sourceText.Lines.GetLinePosition(position) let fcsTextLineNumber = Line.fromZ textLinePos.Line - let! symbol = Tokenizer.getSymbolAtPosition(documentKey, sourceText, position, filePath, defines, SymbolLookupKind.Greedy, false, false) - let! _, _, checkFileResults = checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, options, languageServicePerformanceOptions, userOpName = userOpName) + + let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpDocumentHighlightsService)) |> liftAsync let! symbolUse = checkFileResults.GetSymbolUseAtLocation(fcsTextLineNumber, symbol.Ident.idRange.EndColumn, textLine.ToString(), symbol.FullIsland) let symbolUses = checkFileResults.GetUsesOfSymbolInFile(symbolUse.Symbol) return [| for symbolUse in symbolUses do - match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.RangeAlternate) with + match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.Range) with | None -> () | Some span -> yield { IsDefinition = symbolUse.IsFromDefinition @@ -73,15 +73,9 @@ type internal FSharpDocumentHighlightsService [] (checkerP } interface IFSharpDocumentHighlightsService with - member __.GetDocumentHighlightsAsync(document, position, _documentsToSearch, cancellationToken) : Task> = + member _.GetDocumentHighlightsAsync(document, position, _documentsToSearch, cancellationToken) : Task> = asyncMaybe { - let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) - let! sourceText = document.GetTextAsync(cancellationToken) - let! textVersion = document.GetTextVersionAsync(cancellationToken) - let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions - let perfOptions = document.FSharpOptions.LanguageServicePerformance - let! spans = FSharpDocumentHighlightsService.GetDocumentHighlights(checkerProvider.Checker, document.Id, sourceText, document.FilePath, - position, defines, projectOptions, textVersion.GetHashCode(), perfOptions) + let! spans = FSharpDocumentHighlightsService.GetDocumentHighlights(document, position) let highlightSpans = spans |> Array.map (fun span -> diff --git a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj index 466b15a8256..da325f32a96 100644 --- a/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj +++ b/vsintegration/src/FSharp.Editor/FSharp.Editor.fsproj @@ -7,8 +7,6 @@ $(NoWarn);75 $(NoWarn);44 true - true - $(SystemValueTupleVersion) $(OtherFlags) --warnon:1182 --subsystemversion:6.00 false @@ -28,11 +26,12 @@ - + + @@ -43,14 +42,16 @@ - - + + + + @@ -88,15 +89,23 @@ + + + + + + + + @@ -105,6 +114,7 @@ + @@ -124,7 +134,7 @@ - + @@ -170,9 +180,8 @@ - - + diff --git a/vsintegration/src/FSharp.Editor/FSharp.Editor.resx b/vsintegration/src/FSharp.Editor/FSharp.Editor.resx index 87076943ea0..bb52e1a6d80 100644 --- a/vsintegration/src/FSharp.Editor/FSharp.Editor.resx +++ b/vsintegration/src/FSharp.Editor/FSharp.Editor.resx @@ -217,7 +217,7 @@ F# Properties - F# Dispostable Values (top-level) + F# Disposable Values (top-level) Make declaration 'mutable' @@ -253,7 +253,7 @@ Remove 'yield' - Remove yield!' + Remove 'yield!' Convert to Anonymous Record @@ -261,10 +261,31 @@ Use '<-' to mutate value + + Add missing 'fun' keyword + Use F# lambda syntax Make '{0}' recursive - \ No newline at end of file + + Use '<>' for inequality check + + + Use '.Value' to dereference expression + + + Add type annotation + + + Remove unused binding + + + Add missing instance member parameter + + + Use 'nameof' + + diff --git a/vsintegration/src/FSharp.Editor/Formatting/BraceMatchingService.fs b/vsintegration/src/FSharp.Editor/Formatting/BraceMatchingService.fs index 8b6cacb5436..edd3920d7c0 100644 --- a/vsintegration/src/FSharp.Editor/Formatting/BraceMatchingService.fs +++ b/vsintegration/src/FSharp.Editor/Formatting/BraceMatchingService.fs @@ -4,8 +4,7 @@ namespace Microsoft.VisualStudio.FSharp.Editor open System.ComponentModel.Composition open Microsoft.CodeAnalysis.Text -open Microsoft.CodeAnalysis.Editor -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis open System.Runtime.InteropServices open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor @@ -13,11 +12,7 @@ open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor type internal FSharpBraceMatchingService [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = - - static let userOpName = "BraceMatching" static member GetBraceMatchingResult(checker: FSharpChecker, sourceText: SourceText, fileName, parsingOptions: FSharpParsingOptions, position: int, userOpName: string, [] forFormatting: bool) = async { @@ -37,9 +32,9 @@ type internal FSharpBraceMatchingService interface IFSharpBraceMatcher with member this.FindBracesAsync(document, position, cancellationToken) = asyncMaybe { - let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) + let! checker, _, parsingOptions, _ = document.GetFSharpCompilationOptionsAsync(nameof(FSharpBraceMatchingService)) |> liftAsync let! sourceText = document.GetTextAsync(cancellationToken) - let! (left, right) = FSharpBraceMatchingService.GetBraceMatchingResult(checkerProvider.Checker, sourceText, document.Name, parsingOptions, position, userOpName) + let! (left, right) = FSharpBraceMatchingService.GetBraceMatchingResult(checker, sourceText, document.Name, parsingOptions, position, nameof(FSharpBraceMatchingService)) let! leftSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, left) let! rightSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, right) return FSharpBraceMatchingResult(leftSpan, rightSpan) diff --git a/vsintegration/src/FSharp.Editor/Formatting/EditorFormattingService.fs b/vsintegration/src/FSharp.Editor/Formatting/EditorFormattingService.fs index 0cb8af738f6..b35d122d04b 100644 --- a/vsintegration/src/FSharp.Editor/Formatting/EditorFormattingService.fs +++ b/vsintegration/src/FSharp.Editor/Formatting/EditorFormattingService.fs @@ -6,13 +6,13 @@ open System.Composition open System.Collections.Generic open Microsoft.CodeAnalysis -open Microsoft.CodeAnalysis.Editor open Microsoft.CodeAnalysis.Formatting -open Microsoft.CodeAnalysis.Host.Mef open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Tokenization open System.Threading open System.Windows.Forms @@ -20,8 +20,6 @@ open System.Windows.Forms type internal FSharpEditorFormattingService [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager, settings: EditorOptions ) = @@ -148,23 +146,23 @@ type internal FSharpEditorFormattingService return stripIndentation removeIndentation } - member __.GetFormattingChangesAsync (document: Document, position: int, cancellationToken: CancellationToken) = + member _.GetFormattingChangesAsync (document: Document, position: int, cancellationToken: CancellationToken) = async { let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask let! options = document.GetOptionsAsync(cancellationToken) |> Async.AwaitTask let indentStyle = options.GetOption(FormattingOptions.SmartIndent, FSharpConstants.FSharpLanguageName) - let parsingOptions = projectInfoManager.TryGetQuickParsingOptionsForEditingDocumentOrProject(document) - let! textChange = FSharpEditorFormattingService.GetFormattingChanges(document.Id, sourceText, document.FilePath, checkerProvider.Checker, indentStyle, parsingOptions, position) + let parsingOptions = document.GetFSharpQuickParsingOptions() + let! textChange = FSharpEditorFormattingService.GetFormattingChanges(document.Id, sourceText, document.FilePath, document.GetFSharpChecker(), indentStyle, parsingOptions, position) return textChange |> Option.toList |> toIList } - member __.OnPasteAsync (document: Document, span: TextSpan, currentClipboard: string, cancellationToken: CancellationToken) = + member _.OnPasteAsync (document: Document, span: TextSpan, currentClipboard: string, cancellationToken: CancellationToken) = async { let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask let! options = document.GetOptionsAsync(cancellationToken) |> Async.AwaitTask let tabSize = options.GetOption(FormattingOptions.TabSize, FSharpConstants.FSharpLanguageName) - let parsingOptions = projectInfoManager.TryGetQuickParsingOptionsForEditingDocumentOrProject(document) + let parsingOptions = document.GetFSharpQuickParsingOptions() let! textChanges = FSharpEditorFormattingService.GetPasteChanges(document.Id, sourceText, document.FilePath, settings.Formatting, tabSize, parsingOptions, currentClipboard, span) return textChanges |> Option.defaultValue Seq.empty |> toIList } @@ -175,7 +173,7 @@ type internal FSharpEditorFormattingService member val SupportsFormatOnPaste = true member val SupportsFormatOnReturn = true - override __.SupportsFormattingOnTypedCharacter (document, ch) = + override _.SupportsFormattingOnTypedCharacter (document, ch) = if FSharpIndentationService.IsSmartIndentEnabled document.Project.Solution.Workspace.Options then match ch with | ')' | ']' | '}' -> true @@ -183,7 +181,7 @@ type internal FSharpEditorFormattingService else false - override __.GetFormattingChangesAsync (_document, _span, cancellationToken) = + override _.GetFormattingChangesAsync (_document, _span, cancellationToken) = async { return ResizeArray() :> IList<_> } |> RoslynHelpers.StartAsyncAsTask cancellationToken diff --git a/vsintegration/src/FSharp.Editor/Formatting/IndentationService.fs b/vsintegration/src/FSharp.Editor/Formatting/IndentationService.fs index 32b06175449..b540e06caf4 100644 --- a/vsintegration/src/FSharp.Editor/Formatting/IndentationService.fs +++ b/vsintegration/src/FSharp.Editor/Formatting/IndentationService.fs @@ -13,12 +13,15 @@ open Microsoft.CodeAnalysis.Host.Mef open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Tokenization [)>] type internal FSharpIndentationService [] - (projectInfoManager: FSharpProjectOptionsManager) = + () = static member IsSmartIndentEnabled (options: Microsoft.CodeAnalysis.Options.OptionSet) = options.GetOption(FormattingOptions.SmartIndent, FSharpConstants.FSharpLanguageName) = FormattingOptions.IndentStyle.Smart @@ -98,7 +101,7 @@ type internal FSharpIndentationService let! options = document.GetOptionsAsync(cancellationToken) |> Async.AwaitTask let tabSize = options.GetOption(FormattingOptions.TabSize, FSharpConstants.FSharpLanguageName) let indentStyle = options.GetOption(FormattingOptions.SmartIndent, FSharpConstants.FSharpLanguageName) - let parsingOptions = projectInfoManager.TryGetQuickParsingOptionsForEditingDocumentOrProject(document) + let parsingOptions = document.GetFSharpQuickParsingOptions() let indent = FSharpIndentationService.GetDesiredIndentation(document.Id, sourceText, document.FilePath, lineNumber, tabSize, indentStyle, parsingOptions) return match indent with diff --git a/vsintegration/src/FSharp.Editor/InlineRename/InlineRenameService.fs b/vsintegration/src/FSharp.Editor/InlineRename/InlineRenameService.fs index 0fd8e3171f7..51a9efe9951 100644 --- a/vsintegration/src/FSharp.Editor/InlineRename/InlineRenameService.fs +++ b/vsintegration/src/FSharp.Editor/InlineRename/InlineRenameService.fs @@ -9,40 +9,40 @@ open System.Threading open System.Threading.Tasks open Microsoft.CodeAnalysis -open Microsoft.CodeAnalysis.Editor -open Microsoft.CodeAnalysis.Host.Mef open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.ExternalAccess.FSharp open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor open FSharp.Compiler -open FSharp.Compiler.Range -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Symbols +open FSharp.Compiler.Text +open FSharp.Compiler.Tokenization open Symbols type internal FailureInlineRenameInfo private () = interface IFSharpInlineRenameInfo with - member __.CanRename = false - member __.LocalizedErrorMessage = FSharpEditorFeaturesResources.You_cannot_rename_this_element - member __.TriggerSpan = Unchecked.defaultof<_> - member __.HasOverloads = false - member __.ForceRenameOverloads = true - member __.DisplayName = "" - member __.FullDisplayName = "" - member __.Glyph = Glyph.MethodPublic - member __.GetFinalSymbolName _ = "" - member __.GetReferenceEditSpan(_, _) = Unchecked.defaultof<_> - member __.GetConflictEditSpan(_, _, _) = Nullable() - member __.FindRenameLocationsAsync(_, _) = Task.FromResult null - member __.TryOnBeforeGlobalSymbolRenamed(_, _, _) = false - member __.TryOnAfterGlobalSymbolRenamed(_, _, _) = false + member _.CanRename = false + member _.LocalizedErrorMessage = FSharpEditorFeaturesResources.You_cannot_rename_this_element + member _.TriggerSpan = Unchecked.defaultof<_> + member _.HasOverloads = false + member _.ForceRenameOverloads = true + member _.DisplayName = "" + member _.FullDisplayName = "" + member _.Glyph = Glyph.MethodPublic + member _.GetFinalSymbolName _ = "" + member _.GetReferenceEditSpan(_, _) = Unchecked.defaultof<_> + member _.GetConflictEditSpan(_, _, _) = Nullable() + member _.FindRenameLocationsAsync(_, _) = Task.FromResult null + member _.TryOnBeforeGlobalSymbolRenamed(_, _, _) = false + member _.TryOnAfterGlobalSymbolRenamed(_, _, _) = false static member Instance = FailureInlineRenameInfo() :> IFSharpInlineRenameInfo type internal InlineRenameLocationSet(locations: FSharpInlineRenameLocation [], originalSolution: Solution, symbolKind: LexerSymbolKind, symbol: FSharpSymbol) = interface IFSharpInlineRenameLocationSet with - member __.Locations = upcast locations.ToList() + member _.Locations = upcast locations.ToList() - member __.GetReplacementsAsync(replacementText, _optionSet, cancellationToken) : Task = + member _.GetReplacementsAsync(replacementText, _optionSet, cancellationToken) : Task = let rec applyChanges (solution: Solution) (locationsByDocument: (Document * FSharpInlineRenameLocation list) list) = async { match locationsByDocument with @@ -59,20 +59,18 @@ type internal InlineRenameLocationSet(locations: FSharpInlineRenameLocation [], match symbolKind with | LexerSymbolKind.GenericTypeParameter | LexerSymbolKind.StaticallyResolvedTypeParameter -> replacementText - | _ -> Keywords.NormalizeIdentifierBackticks replacementText + | _ -> FSharpKeywords.NormalizeIdentifierBackticks replacementText return { new IFSharpInlineRenameReplacementInfo with - member __.NewSolution = newSolution - member __.ReplacementTextValid = Tokenizer.isValidNameForSymbol(symbolKind, symbol, replacementText) - member __.DocumentIds = locations |> Seq.map (fun doc -> doc.Document.Id) |> Seq.distinct - member __.GetReplacements _ = Seq.empty } + member _.NewSolution = newSolution + member _.ReplacementTextValid = Tokenizer.isValidNameForSymbol(symbolKind, symbol, replacementText) + member _.DocumentIds = locations |> Seq.map (fun doc -> doc.Document.Id) |> Seq.distinct + member _.GetReplacements _ = Seq.empty } } |> RoslynHelpers.StartAsyncAsTask(cancellationToken) type internal InlineRenameInfo ( - checker: FSharpChecker, - projectInfoManager: FSharpProjectOptionsManager, document: Document, triggerSpan: TextSpan, lexerSymbol: LexerSymbol, @@ -81,40 +79,38 @@ type internal InlineRenameInfo checkFileResults: FSharpCheckFileResults ) = - static let userOpName = "InlineRename" - let getDocumentText (document: Document) cancellationToken = match document.TryGetText() with | true, text -> text | _ -> document.GetTextAsync(cancellationToken).Result - let symbolUses = - SymbolHelpers.getSymbolUsesInSolution(symbolUse.Symbol, declLoc, checkFileResults, projectInfoManager, checker, document.Project.Solution, userOpName) + let symbolUses = + SymbolHelpers.getSymbolUsesInSolution(symbolUse.Symbol, declLoc, checkFileResults, document.Project.Solution) |> Async.cache interface IFSharpInlineRenameInfo with - member __.CanRename = true - member __.LocalizedErrorMessage = null - member __.TriggerSpan = triggerSpan - member __.HasOverloads = false - member __.ForceRenameOverloads = false - member __.DisplayName = symbolUse.Symbol.DisplayName - member __.FullDisplayName = try symbolUse.Symbol.FullName with _ -> symbolUse.Symbol.DisplayName - member __.Glyph = Glyph.MethodPublic - member __.GetFinalSymbolName replacementText = replacementText - - member __.GetReferenceEditSpan(location, cancellationToken) = + member _.CanRename = true + member _.LocalizedErrorMessage = null + member _.TriggerSpan = triggerSpan + member _.HasOverloads = false + member _.ForceRenameOverloads = false + member _.DisplayName = symbolUse.Symbol.DisplayName + member _.FullDisplayName = try symbolUse.Symbol.FullName with _ -> symbolUse.Symbol.DisplayName + member _.Glyph = Glyph.MethodPublic + member _.GetFinalSymbolName replacementText = replacementText + + member _.GetReferenceEditSpan(location, cancellationToken) = let text = getDocumentText location.Document cancellationToken Tokenizer.fixupSpan(text, location.TextSpan) - member __.GetConflictEditSpan(location, replacementText, cancellationToken) = + member _.GetConflictEditSpan(location, replacementText, cancellationToken) = let text = getDocumentText location.Document cancellationToken let spanText = text.ToString(location.TextSpan) let position = spanText.LastIndexOf(replacementText, StringComparison.Ordinal) if position < 0 then Nullable() else Nullable(TextSpan(location.TextSpan.Start + position, replacementText.Length)) - member __.FindRenameLocationsAsync(_optionSet, cancellationToken) = + member _.FindRenameLocationsAsync(_optionSet, cancellationToken) = async { let! symbolUsesByDocumentId = symbolUses let! locations = @@ -137,42 +133,38 @@ type internal InlineRenameInfo return InlineRenameLocationSet(locations, document.Project.Solution, lexerSymbol.Kind, symbolUse.Symbol) :> IFSharpInlineRenameLocationSet } |> RoslynHelpers.StartAsyncAsTask(cancellationToken) - member __.TryOnBeforeGlobalSymbolRenamed(_workspace, _changedDocumentIDs, _replacementText) = true - member __.TryOnAfterGlobalSymbolRenamed(_workspace, _changedDocumentIDs, _replacementText) = true + member _.TryOnBeforeGlobalSymbolRenamed(_workspace, _changedDocumentIDs, _replacementText) = true + member _.TryOnAfterGlobalSymbolRenamed(_workspace, _changedDocumentIDs, _replacementText) = true [); Shared>] type internal InlineRenameService [] ( - projectInfoManager: FSharpProjectOptionsManager, - checkerProvider: FSharpCheckerProvider ) = - static let userOpName = "InlineRename" - static member GetInlineRenameInfo(checker: FSharpChecker, projectInfoManager: FSharpProjectOptionsManager, document: Document, sourceText: SourceText, position: int, - defines: string list, options: FSharpProjectOptions) : Async = + static member GetInlineRenameInfo(document: Document, position: int) : Async = asyncMaybe { + let! ct = Async.CancellationToken |> liftAsync + let! sourceText = document.GetTextAsync(ct) let textLine = sourceText.Lines.GetLineFromPosition(position) let textLinePos = sourceText.Lines.GetLinePosition(position) let fcsTextLineNumber = Line.fromZ textLinePos.Line - let! symbol = Tokenizer.getSymbolAtPosition(document.Id, sourceText, position, document.FilePath, defines, SymbolLookupKind.Greedy, false, false) - let! _, _, checkFileResults = checker.ParseAndCheckDocument(document, options, userOpName = userOpName) + let! symbol = document.TryFindFSharpLexerSymbolAsync(position, SymbolLookupKind.Greedy, false, false, nameof(InlineRenameService)) + + let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(InlineRenameService)) |> liftAsync let! symbolUse = checkFileResults.GetSymbolUseAtLocation(fcsTextLineNumber, symbol.Ident.idRange.EndColumn, textLine.Text.ToString(), symbol.FullIsland) let! declLoc = symbolUse.GetDeclarationLocation(document) - let! span = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.RangeAlternate) + let! span = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.Range) let triggerSpan = Tokenizer.fixupSpan(sourceText, span) - return InlineRenameInfo(checker, projectInfoManager, document, triggerSpan, symbol, symbolUse, declLoc, checkFileResults) :> IFSharpInlineRenameInfo + return InlineRenameInfo(document, triggerSpan, symbol, symbolUse, declLoc, checkFileResults) :> IFSharpInlineRenameInfo } interface IFSharpEditorInlineRenameService with - member __.GetRenameInfoAsync(document: Document, position: int, cancellationToken: CancellationToken) : Task = + member _.GetRenameInfoAsync(document: Document, position: int, cancellationToken: CancellationToken) : Task = asyncMaybe { - let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) - let! sourceText = document.GetTextAsync(cancellationToken) - let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions - return! InlineRenameService.GetInlineRenameInfo(checkerProvider.Checker, projectInfoManager, document, sourceText, position, defines, projectOptions) + return! InlineRenameService.GetInlineRenameInfo(document, position) } |> Async.map (Option.defaultValue FailureInlineRenameInfo.Instance) |> RoslynHelpers.StartAsyncAsTask(cancellationToken) diff --git a/vsintegration/src/FSharp.Editor/LanguageService/AssemblyContentProvider.fs b/vsintegration/src/FSharp.Editor/LanguageService/AssemblyContentProvider.fs index d6777df4720..871dd42287c 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/AssemblyContentProvider.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/AssemblyContentProvider.fs @@ -5,14 +5,15 @@ namespace Microsoft.VisualStudio.FSharp.Editor open System open System.ComponentModel.Composition -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices [); Composition.Shared>] type internal AssemblyContentProvider () = let entityCache = EntityCache() member x.GetAllEntitiesInProjectAndReferencedAssemblies (fileCheckResults: FSharpCheckFileResults) = - [ yield! AssemblyContentProvider.getAssemblySignatureContent AssemblyContentType.Full fileCheckResults.PartialAssemblySignature + [ yield! AssemblyContent.GetAssemblySignatureContent AssemblyContentType.Full fileCheckResults.PartialAssemblySignature // FCS sometimes returns several FSharpAssembly for single referenced assembly. // For example, it returns two different ones for Swensen.Unquote; the first one // contains no useful entities, the second one does. Our cache prevents to process @@ -27,5 +28,5 @@ type internal AssemblyContentProvider () = // get Content.Entities from it. for fileName, signatures in assembliesByFileName do - let contentType = Public // it's always Public for now since we don't support InternalsVisibleTo attribute yet - yield! AssemblyContentProvider.getAssemblyContent entityCache.Locking contentType fileName signatures ] + let contentType = AssemblyContentType.Public // it's always Public for now since we don't support InternalsVisibleTo attribute yet + yield! AssemblyContent.GetAssemblyContent entityCache.Locking contentType fileName signatures ] diff --git a/vsintegration/src/FSharp.Editor/LanguageService/FSharpAnalysisSaveFileCommandHandler.fs b/vsintegration/src/FSharp.Editor/LanguageService/FSharpAnalysisSaveFileCommandHandler.fs new file mode 100644 index 00000000000..05664377fd1 --- /dev/null +++ b/vsintegration/src/FSharp.Editor/LanguageService/FSharpAnalysisSaveFileCommandHandler.fs @@ -0,0 +1,89 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace Microsoft.VisualStudio.FSharp.Editor + +open System +open System.ComponentModel.Composition +open Microsoft.CodeAnalysis +open Microsoft.CodeAnalysis.Text +open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Diagnostics +open Microsoft.VisualStudio.FSharp.Editor +open Microsoft.VisualStudio.FSharp.Editor.Logging +open Microsoft.VisualStudio.Text.Editor.Commanding.Commands +open Microsoft.VisualStudio.Commanding +open Microsoft.VisualStudio.Utilities + +// This causes re-analysis to happen when a F# document is saved. +// We do this because FCS relies on the file system and existing open documents +// need to be re-analyzed so the changes are propogated. +// We only re-analyze F# documents that are dependent on the document that was just saved. +// We ignore F# script documents here. +// REVIEW: This could be removed when Roslyn workspaces becomes the source of truth for FCS instead of the file system. +[] +[)>] +[] +[] +type internal FSharpAnalysisSaveFileCommandHandler + [] + (analyzerService: IFSharpDiagnosticAnalyzerService) = + + interface IChainedCommandHandler with + + member _.DisplayName = Constants.FSharpAnalysisSaveFileHandler + + member _.ExecuteCommand(args: SaveCommandArgs, nextCommandHandler: Action, _) = + let textContainer = args.SubjectBuffer.AsTextContainer() + match textContainer with + | null -> () + | _ -> + let mutable workspace = Unchecked.defaultof<_> + if Workspace.TryGetWorkspace(textContainer, &workspace) then + let solution = workspace.CurrentSolution + let documentId = workspace.GetDocumentIdInCurrentContext(textContainer) + match box documentId with + | null -> () + | _ -> + let document = solution.GetDocument(documentId) + async { + try + if document.Project.Language = LanguageNames.FSharp then + let openDocIds = workspace.GetOpenDocumentIds() + + let docIdsToReanalyze = + if document.IsFSharpScript then + openDocIds + |> Seq.filter (fun x -> + x <> document.Id && + ( + let doc = solution.GetDocument(x) + match doc with + | null -> false + | _ -> doc.IsFSharpScript + ) + ) + |> Array.ofSeq + else + let depProjIds = document.Project.GetDependentProjectIds().Add(document.Project.Id) + openDocIds + |> Seq.filter (fun x -> + depProjIds.Contains(x.ProjectId) && x <> document.Id && + ( + let doc = solution.GetDocument(x) + match box doc with + | null -> false + | _ -> doc.Project.Language = LanguageNames.FSharp + ) + ) + |> Array.ofSeq + + if docIdsToReanalyze.Length > 0 then + analyzerService.Reanalyze(workspace, documentIds=docIdsToReanalyze) + with + | ex -> logException ex + } + |> Async.Start // fire and forget + + nextCommandHandler.Invoke() + + member _.GetCommandState(_, nextCommandHandler: Func) = + nextCommandHandler.Invoke() \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/LanguageService/FSharpCheckerExtensions.fs b/vsintegration/src/FSharp.Editor/LanguageService/FSharpCheckerExtensions.fs deleted file mode 100644 index aaf20f5c4d6..00000000000 --- a/vsintegration/src/FSharp.Editor/LanguageService/FSharpCheckerExtensions.fs +++ /dev/null @@ -1,90 +0,0 @@ -[] -module internal Microsoft.VisualStudio.FSharp.Editor.FSharpCheckerExtensions - -open System - -open Microsoft.CodeAnalysis -open Microsoft.CodeAnalysis.Text - -open FSharp.Compiler.SourceCodeServices - -type FSharpChecker with - member checker.ParseDocument(document: Document, parsingOptions: FSharpParsingOptions, sourceText: SourceText, userOpName: string) = - asyncMaybe { - let! fileParseResults = checker.ParseFile(document.FilePath, sourceText.ToFSharpSourceText(), parsingOptions, userOpName=userOpName) |> liftAsync - return! fileParseResults.ParseTree - } - - member checker.ParseAndCheckDocument(filePath: string, textVersionHash: int, sourceText: SourceText, options: FSharpProjectOptions, languageServicePerformanceOptions: LanguageServicePerformanceOptions, userOpName: string) = - async { - let parseAndCheckFile = - async { - let! parseResults, checkFileAnswer = checker.ParseAndCheckFileInProject(filePath, textVersionHash, sourceText.ToFSharpSourceText(), options, userOpName=userOpName) - return - match checkFileAnswer with - | FSharpCheckFileAnswer.Aborted -> - None - | FSharpCheckFileAnswer.Succeeded(checkFileResults) -> - Some (parseResults, checkFileResults) - } - - let tryGetFreshResultsWithTimeout() = - async { - let! worker = Async.StartChild(parseAndCheckFile, millisecondsTimeout=languageServicePerformanceOptions.TimeUntilStaleCompletion) - try - return! worker - with :? TimeoutException -> - return None // worker is cancelled at this point, we cannot return it and wait its completion anymore - } - - let bindParsedInput(results: (FSharpParseFileResults * FSharpCheckFileResults) option) = - match results with - | Some(parseResults, checkResults) -> - match parseResults.ParseTree with - | Some parsedInput -> Some (parseResults, parsedInput, checkResults) - | None -> None - | None -> None - - if languageServicePerformanceOptions.AllowStaleCompletionResults then - let! freshResults = tryGetFreshResultsWithTimeout() - - let! results = - match freshResults with - | Some x -> async.Return (Some x) - | None -> - async { - match checker.TryGetRecentCheckResultsForFile(filePath, options) with - | Some (parseResults, checkFileResults, _) -> - return Some (parseResults, checkFileResults) - | None -> - return! parseAndCheckFile - } - return bindParsedInput results - else - let! results = parseAndCheckFile - return bindParsedInput results - } - - - member checker.ParseAndCheckDocument(document: Document, options: FSharpProjectOptions, userOpName: string, ?allowStaleResults: bool, ?sourceText: SourceText) = - async { - let! cancellationToken = Async.CancellationToken - let! sourceText = - match sourceText with - | Some x -> async.Return x - | None -> document.GetTextAsync(cancellationToken) |> Async.AwaitTask - let! textVersion = document.GetTextVersionAsync(cancellationToken) |> Async.AwaitTask - let perfOpts = - match allowStaleResults with - | Some b -> { document.FSharpOptions.LanguageServicePerformance with AllowStaleCompletionResults = b } - | _ -> document.FSharpOptions.LanguageServicePerformance - return! checker.ParseAndCheckDocument(document.FilePath, textVersion.GetHashCode(), sourceText, options, perfOpts, userOpName=userOpName) - } - - - member checker.TryParseAndCheckFileInProject (projectOptions, fileName, sourceText: SourceText, userOpName) = async { - let! (parseResults, checkAnswer) = checker.ParseAndCheckFileInProject (fileName,0,sourceText.ToFSharpSourceText(),projectOptions, userOpName=userOpName) - match checkAnswer with - | FSharpCheckFileAnswer.Aborted -> return None - | FSharpCheckFileAnswer.Succeeded checkResults -> return Some (parseResults,checkResults) - } diff --git a/vsintegration/src/FSharp.Editor/LanguageService/FSharpCheckerProvider.fs b/vsintegration/src/FSharp.Editor/LanguageService/FSharpCheckerProvider.fs deleted file mode 100644 index 05d7f9b1309..00000000000 --- a/vsintegration/src/FSharp.Editor/LanguageService/FSharpCheckerProvider.fs +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.VisualStudio.FSharp.Editor - -open System -open System.ComponentModel.Composition -open System.Diagnostics -open Microsoft.CodeAnalysis -open FSharp.Compiler.SourceCodeServices -open Microsoft.VisualStudio -open Microsoft.VisualStudio.FSharp.Editor -open Microsoft.VisualStudio.LanguageServices -open FSharp.NativeInterop -open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Diagnostics - -#nowarn "9" // NativePtr.toNativeInt - -// Exposes FSharpChecker as MEF export -[); Composition.Shared>] -type internal FSharpCheckerProvider - [] - ( - analyzerService: IFSharpDiagnosticAnalyzerService, - [)>] workspace: VisualStudioWorkspace, - settings: EditorOptions - ) = - - let tryGetMetadataSnapshot (path, timeStamp) = - try - let md = Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices.FSharpVisualStudioWorkspaceExtensions.GetMetadata(workspace, path, timeStamp) - let amd = (md :?> AssemblyMetadata) - let mmd = amd.GetModules().[0] - let mmr = mmd.GetMetadataReader() - - // "lifetime is timed to Metadata you got from the GetMetadata(...). As long as you hold it strongly, raw - // memory we got from metadata reader will be alive. Once you are done, just let everything go and - // let finalizer handle resource rather than calling Dispose from Metadata directly. It is shared metadata. - // You shouldn't dispose it directly." - - let objToHold = box md - - // We don't expect any ilread WeakByteFile to be created when working in Visual Studio - Debug.Assert((FSharp.Compiler.AbstractIL.ILBinaryReader.GetStatistics().weakByteFileCount = 0), "Expected weakByteFileCount to be zero when using F# in Visual Studio. Was there a problem reading a .NET binary?") - - Some (objToHold, NativePtr.toNativeInt mmr.MetadataPointer, mmr.MetadataLength) - with ex -> - // We catch all and let the backup routines in the F# compiler find the error - Assert.Exception(ex) - None - - - let checker = - lazy - let checker = - FSharpChecker.Create( - projectCacheSize = settings.LanguageServicePerformance.ProjectCheckCacheSize, - keepAllBackgroundResolutions = false, - // Enabling this would mean that if devenv.exe goes above 2.3GB we do a one-off downsize of the F# Compiler Service caches - (* , MaxMemory = 2300 *) - legacyReferenceResolver=LegacyMSBuildReferenceResolver.getResolver(), - tryGetMetadataSnapshot = tryGetMetadataSnapshot, - keepAllBackgroundSymbolUses = false, - enableBackgroundItemKeyStoreAndSemanticClassification = true, - enablePartialTypeChecking = true) - - // This is one half of the bridge between the F# background builder and the Roslyn analysis engine. - // When the F# background builder refreshes the background semantic build context for a file, - // we request Roslyn to reanalyze that individual file. - checker.BeforeBackgroundFileCheck.Add(fun (fileName, _extraProjectInfo) -> - async { - try - let solution = workspace.CurrentSolution - let documentIds = solution.GetDocumentIdsWithFilePath(fileName) - if not documentIds.IsEmpty then - let documentIdsFiltered = documentIds |> Seq.filter workspace.IsDocumentOpen |> Seq.toArray - for documentId in documentIdsFiltered do - Trace.TraceInformation("{0:n3} Requesting Roslyn reanalysis of {1}", DateTime.Now.TimeOfDay.TotalSeconds, documentId) - if documentIdsFiltered.Length > 0 then - analyzerService.Reanalyze(workspace,documentIds=documentIdsFiltered) - with ex -> - Assert.Exception(ex) - } |> Async.StartImmediate - ) - checker - - member this.Checker = checker.Value - diff --git a/vsintegration/src/FSharp.Editor/LanguageService/FSharpEditorFactory.fs b/vsintegration/src/FSharp.Editor/LanguageService/FSharpEditorFactory.fs index cadf0d33e06..d539f249e1e 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/FSharpEditorFactory.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/FSharpEditorFactory.fs @@ -26,6 +26,9 @@ module Constants = [] let FSharpEditorFactoryPhysicalViewAttributes = 2 + [] + let FSharpAnalysisSaveFileHandler = "FSharp Analysis Save File Handler" + [] type FSharpEditorFactory(parentPackage: ShellPackage) = @@ -67,9 +70,9 @@ type FSharpEditorFactory(parentPackage: ShellPackage) = interface IVsEditorFactory with - member __.Close() = VSConstants.S_OK + member _.Close() = VSConstants.S_OK - member __.CreateEditorInstance(_grfCreateDoc, _pszMkDocument, _pszPhysicalView, _pvHier, _itemid, punkDocDataExisting, ppunkDocView, ppunkDocData, pbstrEditorCaption, pguidCmdUI, pgrfCDW) = + member _.CreateEditorInstance(_grfCreateDoc, _pszMkDocument, _pszPhysicalView, _pvHier, _itemid, punkDocDataExisting, ppunkDocView, ppunkDocData, pbstrEditorCaption, pguidCmdUI, pgrfCDW) = ppunkDocView <- IntPtr.Zero ppunkDocData <- IntPtr.Zero pbstrEditorCaption <- String.Empty @@ -99,7 +102,7 @@ type FSharpEditorFactory(parentPackage: ShellPackage) = let textBuffer = editorAdaptersFactoryService.CreateVsTextBufferAdapter(oleServiceProvider, contentType) setWindowBuffer oleServiceProvider textBuffer &ppunkDocView &ppunkDocData &pbstrEditorCaption - member __.MapLogicalView(rguidLogicalView, pbstrPhysicalView) = + member _.MapLogicalView(rguidLogicalView, pbstrPhysicalView) = pbstrPhysicalView <- null match rguidLogicalView with @@ -112,7 +115,7 @@ type FSharpEditorFactory(parentPackage: ShellPackage) = | _ -> VSConstants.E_NOTIMPL - member __.SetSite(packageServiceProvider) = + member _.SetSite(packageServiceProvider) = oleServiceProviderOpt <- Some packageServiceProvider VSConstants.S_OK \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/LanguageService/FSharpProjectOptionsManager.fs b/vsintegration/src/FSharp.Editor/LanguageService/FSharpProjectOptionsManager.fs index 2c09f05df36..e30c178f5b6 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/FSharpProjectOptionsManager.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/FSharpProjectOptionsManager.fs @@ -6,21 +6,15 @@ open System open System.Collections.Generic open System.Collections.Concurrent open System.Collections.Immutable -open System.ComponentModel.Composition open System.IO open System.Linq open Microsoft.CodeAnalysis -open FSharp.Compiler.SourceCodeServices -open Microsoft.VisualStudio +open FSharp.Compiler +open FSharp.Compiler.CodeAnalysis open Microsoft.VisualStudio.FSharp.Editor -open Microsoft.VisualStudio.LanguageServices -open Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem -open Microsoft.VisualStudio.Shell open System.Threading -open Microsoft.VisualStudio.Shell.Interop -open Microsoft.VisualStudio.LanguageServices.Implementation.TaskList -open Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices open Microsoft.VisualStudio.FSharp.Interactive.Session +open System.Runtime.CompilerServices [] module private FSharpProjectOptionsHelpers = @@ -33,43 +27,59 @@ module private FSharpProjectOptionsHelpers = let mutable errorReporter = Unchecked.defaultof<_> { new IProjectSite with - member __.Description = project.Name - member __.CompilationSourceFiles = sourcePaths - member __.CompilationOptions = + member _.Description = project.Name + member _.CompilationSourceFiles = sourcePaths + member _.CompilationOptions = Array.concat [options; referencePaths |> Array.map(fun r -> "-r:" + r)] - member __.CompilationReferences = referencePaths + member _.CompilationReferences = referencePaths member site.CompilationBinOutputPath = site.CompilationOptions |> Array.tryPick (fun s -> if s.StartsWith("-o:") then Some s.[3..] else None) - member __.ProjectFileName = project.FilePath - member __.AdviseProjectSiteChanges(_,_) = () - member __.AdviseProjectSiteCleaned(_,_) = () - member __.AdviseProjectSiteClosed(_,_) = () - member __.IsIncompleteTypeCheckEnvironment = false - member __.TargetFrameworkMoniker = "" - member __.ProjectGuid = project.Id.Id.ToString() - member __.LoadTime = System.DateTime.Now - member __.ProjectProvider = None - member __.BuildErrorReporter with get () = errorReporter and set (v) = errorReporter <- v + member _.ProjectFileName = project.FilePath + member _.AdviseProjectSiteChanges(_,_) = () + member _.AdviseProjectSiteCleaned(_,_) = () + member _.AdviseProjectSiteClosed(_,_) = () + member _.IsIncompleteTypeCheckEnvironment = false + member _.TargetFrameworkMoniker = "" + member _.ProjectGuid = project.Id.Id.ToString() + member _.LoadTime = System.DateTime.Now + member _.ProjectProvider = None + member _.BuildErrorReporter with get () = errorReporter and set (v) = errorReporter <- v } let hasProjectVersionChanged (oldProject: Project) (newProject: Project) = oldProject.Version <> newProject.Version - let hasDependentVersionChanged (oldProject: Project) (newProject: Project) = + let hasDependentVersionChanged (oldProject: Project) (newProject: Project) (ct: CancellationToken) = + let oldProjectMetadataRefs = oldProject.MetadataReferences + let newProjectMetadataRefs = newProject.MetadataReferences + + if oldProjectMetadataRefs.Count <> newProjectMetadataRefs.Count then true + else + let oldProjectRefs = oldProject.ProjectReferences let newProjectRefs = newProject.ProjectReferences + oldProjectRefs.Count() <> newProjectRefs.Count() || (oldProjectRefs, newProjectRefs) ||> Seq.exists2 (fun p1 p2 -> + ct.ThrowIfCancellationRequested() let doesProjectIdDiffer = p1.ProjectId <> p2.ProjectId let p1 = oldProject.Solution.GetProject(p1.ProjectId) let p2 = newProject.Solution.GetProject(p2.ProjectId) - doesProjectIdDiffer || p1.Version <> p2.Version + doesProjectIdDiffer || + ( + if p1.IsFSharp then + p1.Version <> p2.Version + else + let v1 = p1.GetDependentVersionAsync(ct).Result + let v2 = p2.GetDependentVersionAsync(ct).Result + v1 <> v2 + ) ) - let isProjectInvalidated (oldProject: Project) (newProject: Project) (settings: EditorOptions) = + let isProjectInvalidated (oldProject: Project) (newProject: Project) ct = let hasProjectVersionChanged = hasProjectVersionChanged oldProject newProject - if settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences then - hasProjectVersionChanged || hasDependentVersionChanged oldProject newProject + if newProject.AreFSharpInMemoryCrossProjectReferencesEnabled then + hasProjectVersionChanged || hasDependentVersionChanged oldProject newProject ct else hasProjectVersionChanged @@ -81,70 +91,144 @@ type private FSharpProjectOptionsMessage = | ClearSingleFileOptionsCache of DocumentId [] -type private FSharpProjectOptionsReactor (workspace: Workspace, settings: EditorOptions, _serviceProvider, checkerProvider: FSharpCheckerProvider) = +type private FSharpProjectOptionsReactor (checker: FSharpChecker) = let cancellationTokenSource = new CancellationTokenSource() - // Hack to store command line options from HandleCommandLineChanges - let cpsCommandLineOptions = ConcurrentDictionary() + // Store command line options + let commandLineOptions = ConcurrentDictionary() let legacyProjectSites = ConcurrentDictionary() let cache = ConcurrentDictionary() - let singleFileCache = ConcurrentDictionary() + let singleFileCache = ConcurrentDictionary() + + // This is used to not constantly emit the same compilation. + let weakPEReferences = ConditionalWeakTable() + let lastSuccessfulCompilations = ConcurrentDictionary() + + let scriptUpdatedEvent = Event() + + let createPEReference (referencedProject: Project) (comp: Compilation) = + let projectId = referencedProject.Id + + match weakPEReferences.TryGetValue comp with + | true, fsRefProj -> fsRefProj + | _ -> + let weakComp = WeakReference(comp) + let getStream = + fun ct -> + let tryStream (comp: Compilation) = + let ms = new MemoryStream() // do not dispose the stream as it will be owned on the reference. + let emitOptions = Emit.EmitOptions(metadataOnly = true, includePrivateMembers = false, tolerateErrors = true) + try + let result = comp.Emit(ms, options = emitOptions, cancellationToken = ct) - let rec tryComputeOptionsByFile (document: Document) (ct: CancellationToken) userOpName = + if result.Success then + lastSuccessfulCompilations.[projectId] <- comp + ms.Position <- 0L + ms :> Stream + |> Some + else + ms.Dispose() // it failed, dispose of stream + None + with + | _ -> + ms.Dispose() // it failed, dispose of stream + None + + let resultOpt = + match weakComp.TryGetTarget() with + | true, comp -> tryStream comp + | _ -> None + + match resultOpt with + | Some _ -> resultOpt + | _ -> + match lastSuccessfulCompilations.TryGetValue(projectId) with + | true, comp -> tryStream comp + | _ -> None + + let fsRefProj = + FSharpReferencedProject.CreatePortableExecutable( + referencedProject.OutputFilePath, + DateTime.UtcNow, + getStream + ) + weakPEReferences.Add(comp, fsRefProj) + fsRefProj + + let rec tryComputeOptionsBySingleScriptOrFile (document: Document) (ct: CancellationToken) userOpName = async { let! fileStamp = document.GetTextVersionAsync(ct) |> Async.AwaitTask match singleFileCache.TryGetValue(document.Id) with | false, _ -> let! sourceText = document.GetTextAsync(ct) |> Async.AwaitTask - let! scriptProjectOptions, _ = checkerProvider.Checker.GetProjectOptionsFromScript(document.FilePath, sourceText.ToFSharpSourceText(), SessionsProperties.fsiPreview, userOpName=userOpName) + + let! scriptProjectOptions, _ = + checker.GetProjectOptionsFromScript(document.FilePath, + sourceText.ToFSharpSourceText(), + SessionsProperties.fsiPreview, + assumeDotNetFramework=not SessionsProperties.fsiUseNetCore, + userOpName=userOpName) + + let project = document.Project + + let otherOptions = + if project.IsFSharpMetadata then + project.ProjectReferences + |> Seq.map (fun x -> "-r:" + project.Solution.GetProject(x.ProjectId).OutputFilePath) + |> Array.ofSeq + |> Array.append ( + project.MetadataReferences.OfType() + |> Seq.map (fun x -> "-r:" + x.FilePath) + |> Array.ofSeq) + else + [||] + let projectOptions = if isScriptFile document.FilePath then + scriptUpdatedEvent.Trigger(scriptProjectOptions) scriptProjectOptions else { ProjectFileName = document.FilePath ProjectId = None SourceFiles = [|document.FilePath|] - OtherOptions = [||] + OtherOptions = otherOptions ReferencedProjects = [||] IsIncompleteTypeCheckEnvironment = false - UseScriptResolutionRules = SourceFile.MustBeSingleFileProject (Path.GetFileName(document.FilePath)) + UseScriptResolutionRules = CompilerEnvironment.MustBeSingleFileProject (Path.GetFileName(document.FilePath)) LoadTime = DateTime.Now UnresolvedReferences = None OriginalLoadReferences = [] - ExtraProjectInfo= None Stamp = Some(int64 (fileStamp.GetHashCode())) } - checkerProvider.Checker.CheckProjectInBackground(projectOptions, userOpName="checkOptions") + let parsingOptions, _ = checker.GetParsingOptionsFromProjectOptions(projectOptions) - let parsingOptions, _ = checkerProvider.Checker.GetParsingOptionsFromProjectOptions(projectOptions) - - singleFileCache.[document.Id] <- (fileStamp, parsingOptions, projectOptions) + singleFileCache.[document.Id] <- (document.Project, fileStamp, parsingOptions, projectOptions) return Some(parsingOptions, projectOptions) - | true, (fileStamp2, parsingOptions, projectOptions) -> - if fileStamp <> fileStamp2 then + | true, (oldProject, oldFileStamp, parsingOptions, projectOptions) -> + if fileStamp <> oldFileStamp || isProjectInvalidated document.Project oldProject ct then singleFileCache.TryRemove(document.Id) |> ignore - return! tryComputeOptionsByFile document ct userOpName + return! tryComputeOptionsBySingleScriptOrFile document ct userOpName else return Some(parsingOptions, projectOptions) } let tryGetProjectSite (project: Project) = // Cps - if cpsCommandLineOptions.ContainsKey project.Id then - Some (mapCpsProjectToSite(project, cpsCommandLineOptions)) + if commandLineOptions.ContainsKey project.Id then + Some (mapCpsProjectToSite(project, commandLineOptions)) else // Legacy match legacyProjectSites.TryGetValue project.Id with | true, site -> Some site | _ -> None - let rec tryComputeOptions (project: Project) = + let rec tryComputeOptions (project: Project) ct = async { let projectId = project.Id match cache.TryGetValue(projectId) with @@ -156,13 +240,17 @@ type private FSharpProjectOptionsReactor (workspace: Workspace, settings: Editor let referencedProjects = ResizeArray() - if settings.LanguageServicePerformance.EnableInMemoryCrossProjectReferences then + if project.AreFSharpInMemoryCrossProjectReferencesEnabled then for projectReference in project.ProjectReferences do let referencedProject = project.Solution.GetProject(projectReference.ProjectId) if referencedProject.Language = FSharpConstants.FSharpLanguageName then - match! tryComputeOptions referencedProject with + match! tryComputeOptions referencedProject ct with | None -> canBail <- true - | Some(_, projectOptions) -> referencedProjects.Add(referencedProject.OutputFilePath, projectOptions) + | Some(_, projectOptions) -> referencedProjects.Add(FSharpReferencedProject.CreateFSharp(referencedProject.OutputFilePath, projectOptions)) + elif referencedProject.SupportsCompilation then + let! comp = referencedProject.GetCompilationAsync(ct) |> Async.AwaitTask + let peRef = createPEReference referencedProject comp + referencedProjects.Add(peRef) if canBail then return None @@ -188,6 +276,8 @@ type private FSharpProjectOptionsReactor (workspace: Workspace, settings: Editor ) ) + let! ver = project.GetDependentVersionAsync(ct) |> Async.AwaitTask + let projectOptions = { ProjectFileName = projectSite.ProjectFileName @@ -196,12 +286,11 @@ type private FSharpProjectOptionsReactor (workspace: Workspace, settings: Editor OtherOptions = otherOptions ReferencedProjects = referencedProjects.ToArray() IsIncompleteTypeCheckEnvironment = projectSite.IsIncompleteTypeCheckEnvironment - UseScriptResolutionRules = SourceFile.MustBeSingleFileProject (Path.GetFileName(project.FilePath)) + UseScriptResolutionRules = CompilerEnvironment.MustBeSingleFileProject (Path.GetFileName(project.FilePath)) LoadTime = projectSite.LoadTime UnresolvedReferences = None OriginalLoadReferences = [] - ExtraProjectInfo= None - Stamp = Some(int64 (project.Version.GetHashCode())) + Stamp = Some(int64 (ver.GetHashCode())) } // This can happen if we didn't receive the callback from HandleCommandLineChanges yet. @@ -209,7 +298,7 @@ type private FSharpProjectOptionsReactor (workspace: Workspace, settings: Editor return None else // Clear any caches that need clearing and invalidate the project. - let currentSolution = workspace.CurrentSolution + let currentSolution = project.Solution.Workspace.CurrentSolution let projectsToClearCache = cache |> Seq.filter (fun pair -> not (currentSolution.ContainsProject pair.Key)) @@ -222,20 +311,26 @@ type private FSharpProjectOptionsReactor (workspace: Workspace, settings: Editor |> Seq.map (fun pair -> let _, _, projectOptions = pair.Value projectOptions) - checkerProvider.Checker.ClearCache(options, userOpName = "tryComputeOptions") + checker.ClearCache(options, userOpName = "tryComputeOptions") - checkerProvider.Checker.InvalidateConfiguration(projectOptions, startBackgroundCompile = false, userOpName = "computeOptions") + lastSuccessfulCompilations.ToArray() + |> Array.iter (fun pair -> + if not (currentSolution.ContainsProject(pair.Key)) then + lastSuccessfulCompilations.TryRemove(pair.Key) |> ignore + ) - let parsingOptions, _ = checkerProvider.Checker.GetParsingOptionsFromProjectOptions(projectOptions) + checker.InvalidateConfiguration(projectOptions, userOpName = "tryComputeOptions") + + let parsingOptions, _ = checker.GetParsingOptionsFromProjectOptions(projectOptions) cache.[projectId] <- (project, parsingOptions, projectOptions) return Some(parsingOptions, projectOptions) | true, (oldProject, parsingOptions, projectOptions) -> - if isProjectInvalidated oldProject project settings then + if isProjectInvalidated oldProject project ct then cache.TryRemove(projectId) |> ignore - return! tryComputeOptions project + return! tryComputeOptions project ct else return Some(parsingOptions, projectOptions) } @@ -252,16 +347,22 @@ type private FSharpProjectOptionsReactor (workspace: Workspace, settings: Editor // For now, disallow miscellaneous workspace since we are using the hacky F# miscellaneous files project. if document.Project.Solution.Workspace.Kind = WorkspaceKind.MiscellaneousFiles then reply.Reply None - elif document.Project.Name = FSharpConstants.FSharpMiscellaneousFilesName then - let! options = tryComputeOptionsByFile document ct userOpName - reply.Reply options + elif document.Project.IsFSharpMiscellaneousOrMetadata then + let! options = tryComputeOptionsBySingleScriptOrFile document ct userOpName + if ct.IsCancellationRequested then + reply.Reply None + else + reply.Reply options else // We only care about the latest project in the workspace's solution. // We do this to prevent any possible cache thrashing in FCS. let project = document.Project.Solution.Workspace.CurrentSolution.GetProject(document.Project.Id) if not (isNull project) then - let! options = tryComputeOptions project - reply.Reply options + let! options = tryComputeOptions project ct + if ct.IsCancellationRequested then + reply.Reply None + else + reply.Reply options else reply.Reply None with @@ -273,15 +374,18 @@ type private FSharpProjectOptionsReactor (workspace: Workspace, settings: Editor reply.Reply None else try - if project.Solution.Workspace.Kind = WorkspaceKind.MiscellaneousFiles || project.Name = FSharpConstants.FSharpMiscellaneousFilesName then + if project.Solution.Workspace.Kind = WorkspaceKind.MiscellaneousFiles || project.IsFSharpMiscellaneousOrMetadata then reply.Reply None else // We only care about the latest project in the workspace's solution. // We do this to prevent any possible cache thrashing in FCS. let project = project.Solution.Workspace.CurrentSolution.GetProject(project.Id) if not (isNull project) then - let! options = tryComputeOptions project - reply.Reply options + let! options = tryComputeOptions project ct + if ct.IsCancellationRequested then + reply.Reply None + else + reply.Reply options else reply.Reply None with @@ -289,63 +393,70 @@ type private FSharpProjectOptionsReactor (workspace: Workspace, settings: Editor reply.Reply None | FSharpProjectOptionsMessage.ClearOptions(projectId) -> - cache.TryRemove(projectId) |> ignore + match cache.TryRemove(projectId) with + | true, (_, _, projectOptions) -> + lastSuccessfulCompilations.TryRemove(projectId) |> ignore + checker.ClearCache([projectOptions]) + | _ -> + () legacyProjectSites.TryRemove(projectId) |> ignore | FSharpProjectOptionsMessage.ClearSingleFileOptionsCache(documentId) -> - singleFileCache.TryRemove(documentId) |> ignore + match singleFileCache.TryRemove(documentId) with + | true, (_, _, _, projectOptions) -> + lastSuccessfulCompilations.TryRemove(documentId.ProjectId) |> ignore + checker.ClearCache([projectOptions]) + | _ -> + () } let agent = MailboxProcessor.Start((fun agent -> loop agent), cancellationToken = cancellationTokenSource.Token) - member __.TryGetOptionsByProjectAsync(project, ct) = + member _.TryGetOptionsByProjectAsync(project, ct) = agent.PostAndAsyncReply(fun reply -> FSharpProjectOptionsMessage.TryGetOptionsByProject(project, reply, ct)) - member __.TryGetOptionsByDocumentAsync(document, ct, userOpName) = + member _.TryGetOptionsByDocumentAsync(document, ct, userOpName) = agent.PostAndAsyncReply(fun reply -> FSharpProjectOptionsMessage.TryGetOptionsByDocument(document, reply, ct, userOpName)) - member __.ClearOptionsByProjectId(projectId) = + member _.ClearOptionsByProjectId(projectId) = agent.Post(FSharpProjectOptionsMessage.ClearOptions(projectId)) - member __.ClearSingleFileOptionsCache(documentId) = + member _.ClearSingleFileOptionsCache(documentId) = agent.Post(FSharpProjectOptionsMessage.ClearSingleFileOptionsCache(documentId)) - member __.SetCpsCommandLineOptions(projectId, sourcePaths, options) = - cpsCommandLineOptions.[projectId] <- (sourcePaths, options) + member _.SetCommandLineOptions(projectId, sourcePaths, options) = + commandLineOptions.[projectId] <- (sourcePaths, options) - member __.SetLegacyProjectSite (projectId, projectSite) = + member _.SetLegacyProjectSite (projectId, projectSite) = legacyProjectSites.[projectId] <- projectSite - member __.TryGetCachedOptionsByProjectId(projectId) = + member _.TryGetCachedOptionsByProjectId(projectId) = match cache.TryGetValue(projectId) with | true, result -> Some(result) | _ -> None + member _.ClearAllCaches() = + commandLineOptions.Clear() + legacyProjectSites.Clear() + cache.Clear() + singleFileCache.Clear() + lastSuccessfulCompilations.Clear() + + member _.ScriptUpdated = scriptUpdatedEvent.Publish + interface IDisposable with - member __.Dispose() = + member _.Dispose() = cancellationTokenSource.Cancel() cancellationTokenSource.Dispose() (agent :> IDisposable).Dispose() -/// Exposes FCS FSharpProjectOptions information management as MEF component. -// -// This service allows analyzers to get an appropriate FSharpProjectOptions value for a project or single file. -// It also allows a 'cheaper' route to get the project options relevant to parsing (e.g. the #define values). -// The main entrypoints are TryGetOptionsForDocumentOrProject and TryGetOptionsForEditingDocumentOrProject. -[); Composition.Shared>] +/// Manages mappings of Roslyn workspace Projects/Documents to FCS. type internal FSharpProjectOptionsManager - [] ( - checkerProvider: FSharpCheckerProvider, - [)>] workspace: VisualStudioWorkspace, - [)>] serviceProvider: System.IServiceProvider, - settings: EditorOptions + checker: FSharpChecker, + workspace: Workspace ) = - let projectDisplayNameOf projectFileName = - if String.IsNullOrWhiteSpace projectFileName then projectFileName - else Path.GetFileNameWithoutExtension projectFileName - - let reactor = new FSharpProjectOptionsReactor(workspace, settings, serviceProvider, checkerProvider) + let reactor = new FSharpProjectOptionsReactor(checker) do // We need to listen to this event for lifecycle purposes. @@ -355,7 +466,16 @@ type internal FSharpProjectOptionsManager | _ -> () ) - member __.SetLegacyProjectSite (projectId, projectSite) = + workspace.DocumentClosed.Add(fun args -> + let doc = args.Document + let proj = doc.Project + if proj.IsFSharp && proj.IsFSharpMiscellaneousOrMetadata then + reactor.ClearSingleFileOptionsCache(doc.Id) + ) + + member _.ScriptUpdated = reactor.ScriptUpdated + + member _.SetLegacyProjectSite (projectId, projectSite) = reactor.SetLegacyProjectSite (projectId, projectSite) /// Clear a project from the project table @@ -372,7 +492,7 @@ type internal FSharpProjectOptionsManager let parsingOptions = match reactor.TryGetCachedOptionsByProjectId(document.Project.Id) with | Some (_, parsingOptions, _) -> parsingOptions - | _ -> { FSharpParsingOptions.Default with IsInteractive = FSharpFileUtilities.isScriptFile document.Name } + | _ -> { FSharpParsingOptions.Default with IsInteractive = CompilerEnvironment.IsScriptFile document.Name } CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions member this.TryGetOptionsByProject(project) = @@ -400,29 +520,12 @@ type internal FSharpProjectOptionsManager member this.TryGetQuickParsingOptionsForEditingDocumentOrProject(document:Document) = match reactor.TryGetCachedOptionsByProjectId(document.Project.Id) with | Some (_, parsingOptions, _) -> parsingOptions - | _ -> { FSharpParsingOptions.Default with IsInteractive = FSharpFileUtilities.isScriptFile document.Name } - - [] - /// This handles commandline change notifications from the Dotnet Project-system - /// Prior to VS 15.7 path contained path to project file, post 15.7 contains target binpath - /// binpath is more accurate because a project file can have multiple in memory projects based on configuration - member __.HandleCommandLineChanges(path:string, sources:ImmutableArray, _references:ImmutableArray, options:ImmutableArray) = - use _logBlock = Logger.LogBlock(LogEditorFunctionId.LanguageService_HandleCommandLineArgs) - - let projectId = - match Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices.FSharpVisualStudioWorkspaceExtensions.TryGetProjectIdByBinPath(workspace, path) with - | true, projectId -> projectId - | false, _ -> Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices.FSharpVisualStudioWorkspaceExtensions.GetOrCreateProjectIdForPath(workspace, path, projectDisplayNameOf path) - let path = Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices.FSharpVisualStudioWorkspaceExtensions.GetProjectFilePath(workspace, projectId) - - let getFullPath p = - let p' = - if Path.IsPathRooted(p) || path = null then p - else Path.Combine(Path.GetDirectoryName(path), p) - Path.GetFullPathSafe(p') + | _ -> { FSharpParsingOptions.Default with IsInteractive = CompilerEnvironment.IsScriptFile document.Name } - let sourcePaths = sources |> Seq.map(fun s -> getFullPath s.Path) |> Seq.toArray + member this.SetCommandLineOptions(projectId, sourcePaths, options: ImmutableArray) = + reactor.SetCommandLineOptions(projectId, sourcePaths, options.ToArray()) - reactor.SetCpsCommandLineOptions(projectId, sourcePaths, options.ToArray()) + member this.ClearAllCaches() = + reactor.ClearAllCaches() - member __.Checker = checkerProvider.Checker + member _.Checker = checker diff --git a/vsintegration/src/FSharp.Editor/LanguageService/IFSharpWorkspaceService.fs b/vsintegration/src/FSharp.Editor/LanguageService/IFSharpWorkspaceService.fs new file mode 100644 index 00000000000..db1794308b6 --- /dev/null +++ b/vsintegration/src/FSharp.Editor/LanguageService/IFSharpWorkspaceService.fs @@ -0,0 +1,15 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace Microsoft.VisualStudio.FSharp.Editor + +open FSharp.Compiler.CodeAnalysis +open Microsoft.VisualStudio.FSharp.Editor +open Microsoft.CodeAnalysis.Host + +// Used to expose FSharpChecker/ProjectInfo manager to diagnostic providers +// Diagnostic providers can be executed in environment that does not use MEF so they can rely only +// on services exposed by the workspace +type internal IFSharpWorkspaceService = + inherit IWorkspaceService + abstract Checker: FSharpChecker + abstract FSharpProjectOptionsManager: FSharpProjectOptionsManager \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs b/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs index f02f4e344b4..19b9fe30a39 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/LanguageService.fs @@ -6,11 +6,15 @@ open System open System.ComponentModel.Design open System.Runtime.InteropServices open System.Threading +open System.IO +open System.Collections.Immutable open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Options -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler +open FSharp.Compiler.CodeAnalysis open FSharp.NativeInterop open Microsoft.VisualStudio +open Microsoft.VisualStudio.Editor open Microsoft.VisualStudio.FSharp.Editor open Microsoft.VisualStudio.LanguageServices open Microsoft.VisualStudio.LanguageServices.Implementation.LanguageService @@ -19,23 +23,16 @@ open Microsoft.VisualStudio.LanguageServices.ProjectSystem open Microsoft.VisualStudio.Shell open Microsoft.VisualStudio.Shell.Interop open Microsoft.VisualStudio.Text.Outlining -open FSharp.NativeInterop open Microsoft.CodeAnalysis.ExternalAccess.FSharp +open Microsoft.CodeAnalysis.Host +open Microsoft.CodeAnalysis.Host.Mef #nowarn "9" // NativePtr.toNativeInt -// Used to expose FSharpChecker/ProjectInfo manager to diagnostic providers -// Diagnostic providers can be executed in environment that does not use MEF so they can rely only -// on services exposed by the workspace -type internal FSharpCheckerWorkspaceService = - inherit Microsoft.CodeAnalysis.Host.IWorkspaceService - abstract Checker: FSharpChecker - abstract FSharpProjectOptionsManager: FSharpProjectOptionsManager - type internal RoamingProfileStorageLocation(keyName: string) = inherit OptionStorageLocation() - member __.GetKeyNameForLanguage(languageName: string) = + member _.GetKeyNameForLanguage(languageName: string) = let unsubstitutedKeyName = keyName match languageName with | null -> unsubstitutedKeyName @@ -43,52 +40,122 @@ type internal RoamingProfileStorageLocation(keyName: string) = let substituteLanguageName = if languageName = FSharpConstants.FSharpLanguageName then "FSharp" else languageName unsubstitutedKeyName.Replace("%LANGUAGE%", substituteLanguageName) -[] -[, Microsoft.CodeAnalysis.Host.Mef.ServiceLayer.Default)>] -type internal FSharpCheckerWorkspaceServiceFactory - [] +[] +[, ServiceLayer.Default)>] +type internal FSharpWorkspaceServiceFactory + [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = - interface Microsoft.CodeAnalysis.Host.Mef.IWorkspaceServiceFactory with - member __.CreateService(_workspaceServices) = - upcast { new FSharpCheckerWorkspaceService with - member __.Checker = checkerProvider.Checker - member __.FSharpProjectOptionsManager = projectInfoManager } + + // We have a lock just in case if multi-threads try to create a new IFSharpWorkspaceService - + // but we only want to have a single instance of the FSharpChecker regardless if there are multiple instances of IFSharpWorkspaceService. + // In VS, we only ever have a single IFSharpWorkspaceService, but for testing we may have mutliple; we still only want a + // single FSharpChecker instance shared across them. + static let gate = obj() + + // We only ever want to have a single FSharpChecker. + static let mutable checkerSingleton = None + + interface IWorkspaceServiceFactory with + member _.CreateService(workspaceServices) = + + let workspace = workspaceServices.Workspace + + let tryGetMetadataSnapshot (path, timeStamp) = + match workspace with + | :? VisualStudioWorkspace as workspace -> + try + let md = Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices.FSharpVisualStudioWorkspaceExtensions.GetMetadata(workspace, path, timeStamp) + let amd = (md :?> AssemblyMetadata) + let mmd = amd.GetModules().[0] + let mmr = mmd.GetMetadataReader() + + // "lifetime is timed to Metadata you got from the GetMetadata(...). As long as you hold it strongly, raw + // memory we got from metadata reader will be alive. Once you are done, just let everything go and + // let finalizer handle resource rather than calling Dispose from Metadata directly. It is shared metadata. + // You shouldn't dispose it directly." + + let objToHold = box md + + // We don't expect any ilread WeakByteFile to be created when working in Visual Studio + // Debug.Assert((FSharp.Compiler.AbstractIL.ILBinaryReader.GetStatistics().weakByteFileCount = 0), "Expected weakByteFileCount to be zero when using F# in Visual Studio. Was there a problem reading a .NET binary?") + + Some (objToHold, NativePtr.toNativeInt mmr.MetadataPointer, mmr.MetadataLength) + with ex -> + // We catch all and let the backup routines in the F# compiler find the error + Assert.Exception(ex) + None + | _ -> + None + + lock gate (fun () -> + match checkerSingleton with + | Some _ -> () + | _ -> + let checker = + lazy + let checker = + FSharpChecker.Create( + projectCacheSize = 5000, // We do not care how big the cache is. VS will actually tell FCS to clear caches, so this is fine. + keepAllBackgroundResolutions = false, + legacyReferenceResolver=LegacyMSBuildReferenceResolver.getResolver(), + tryGetMetadataSnapshot = tryGetMetadataSnapshot, + keepAllBackgroundSymbolUses = false, + enableBackgroundItemKeyStoreAndSemanticClassification = true, + enablePartialTypeChecking = true) + checker + checkerSingleton <- Some checker + ) + + let optionsManager = + lazy + match checkerSingleton with + | Some checker -> + FSharpProjectOptionsManager(checker.Value, workspaceServices.Workspace) + | _ -> + failwith "Checker not set." + + { new IFSharpWorkspaceService with + member _.Checker = + match checkerSingleton with + | Some checker -> checker.Value + | _ -> failwith "Checker not set." + member _.FSharpProjectOptionsManager = optionsManager.Value } :> _ [] -type private FSharpSolutionEvents(projectManager: FSharpProjectOptionsManager) = +type private FSharpSolutionEvents(projectManager: FSharpProjectOptionsManager, metadataAsSource: FSharpMetadataAsSourceService) = interface IVsSolutionEvents with - member __.OnAfterCloseSolution(_) = + member _.OnAfterCloseSolution(_) = projectManager.Checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() + metadataAsSource.ClearGeneratedFiles() + projectManager.ClearAllCaches() VSConstants.S_OK - member __.OnAfterLoadProject(_, _) = VSConstants.E_NOTIMPL + member _.OnAfterLoadProject(_, _) = VSConstants.E_NOTIMPL - member __.OnAfterOpenProject(_, _) = VSConstants.E_NOTIMPL + member _.OnAfterOpenProject(_, _) = VSConstants.E_NOTIMPL - member __.OnAfterOpenSolution(_, _) = VSConstants.E_NOTIMPL + member _.OnAfterOpenSolution(_, _) = VSConstants.E_NOTIMPL - member __.OnBeforeCloseProject(_, _) = VSConstants.E_NOTIMPL + member _.OnBeforeCloseProject(_, _) = VSConstants.E_NOTIMPL - member __.OnBeforeCloseSolution(_) = VSConstants.E_NOTIMPL + member _.OnBeforeCloseSolution(_) = VSConstants.E_NOTIMPL - member __.OnBeforeUnloadProject(_, _) = VSConstants.E_NOTIMPL + member _.OnBeforeUnloadProject(_, _) = VSConstants.E_NOTIMPL - member __.OnQueryCloseProject(_, _, _) = VSConstants.E_NOTIMPL + member _.OnQueryCloseProject(_, _, _) = VSConstants.E_NOTIMPL - member __.OnQueryCloseSolution(_, _) = VSConstants.E_NOTIMPL + member _.OnQueryCloseSolution(_, _) = VSConstants.E_NOTIMPL - member __.OnQueryUnloadProject(_, _) = VSConstants.E_NOTIMPL + member _.OnQueryUnloadProject(_, _) = VSConstants.E_NOTIMPL [, Microsoft.CodeAnalysis.Host.Mef.ServiceLayer.Default)>] type internal FSharpSettingsFactory [] (settings: EditorOptions) = interface Microsoft.CodeAnalysis.Host.Mef.IWorkspaceServiceFactory with - member __.CreateService(_) = upcast settings + member _.CreateService(_) = upcast settings [] [, @@ -175,21 +242,32 @@ type internal FSharpPackage() as this = // FSI-LINKAGE-POINT: private method GetDialogPage forces fsi options to be loaded let _fsiPropertyPage = this.GetDialogPage(typeof) - let projectInfoManager = this.ComponentModel.DefaultExportProvider.GetExport().Value + + + let workspace = this.ComponentModel.GetService() + let _ = this.ComponentModel.DefaultExportProvider.GetExport() + let optionsManager = workspace.Services.GetService().FSharpProjectOptionsManager + let metadataAsSource = this.ComponentModel.DefaultExportProvider.GetExport().Value let solution = this.GetServiceAsync(typeof).Result let solution = solution :?> IVsSolution - let solutionEvents = FSharpSolutionEvents(projectInfoManager) + let solutionEvents = FSharpSolutionEvents(optionsManager, metadataAsSource) let rdt = this.GetServiceAsync(typeof).Result let rdt = rdt :?> IVsRunningDocumentTable solutionEventsOpt <- Some(solutionEvents) solution.AdviseSolutionEvents(solutionEvents) |> ignore - + let projectContextFactory = this.ComponentModel.GetService() - let workspace = this.ComponentModel.GetService() let miscFilesWorkspace = this.ComponentModel.GetService() - let _singleFileWorkspaceMap = new SingleFileWorkspaceMap(workspace, miscFilesWorkspace, projectInfoManager, projectContextFactory, rdt) - let _legacyProjectWorkspaceMap = new LegacyProjectWorkspaceMap(solution, projectInfoManager, projectContextFactory) + let _singleFileWorkspaceMap = + new SingleFileWorkspaceMap( + FSharpMiscellaneousFileService( + workspace, + miscFilesWorkspace, + FSharpWorkspaceProjectContextFactory(projectContextFactory) + ), + rdt) + let _legacyProjectWorkspaceMap = new LegacyProjectWorkspaceMap(solution, optionsManager, projectContextFactory) () let awaiter = this.JoinableTaskFactory.SwitchToMainThreadAsync().GetAwaiter() if awaiter.IsCompleted then @@ -226,14 +304,14 @@ type internal FSharpLanguageService(package : FSharpPackage) = let theme = package.ComponentModel.DefaultExportProvider.GetExport().Value theme.SetColors() - override __.ContentTypeName = FSharpConstants.FSharpContentTypeName - override __.LanguageName = FSharpConstants.FSharpLanguageName - override __.RoslynLanguageName = FSharpConstants.FSharpLanguageName + override _.ContentTypeName = FSharpConstants.FSharpContentTypeName + override _.LanguageName = FSharpConstants.FSharpLanguageName + override _.RoslynLanguageName = FSharpConstants.FSharpLanguageName - override __.LanguageServiceId = new Guid(FSharpConstants.languageServiceGuidString) - override __.DebuggerLanguageId = DebuggerEnvironment.GetLanguageID() + override _.LanguageServiceId = new Guid(FSharpConstants.languageServiceGuidString) + override _.DebuggerLanguageId = CompilerEnvironment.GetDebuggerLanguageID() - override __.CreateContext(_,_,_,_,_) = raise(System.NotImplementedException()) + override _.CreateContext(_,_,_,_,_) = raise(System.NotImplementedException()) override this.SetupNewTextView(textView) = base.SetupNewTextView(textView) @@ -245,3 +323,39 @@ type internal FSharpLanguageService(package : FSharpPackage) = if not (isNull outliningManager) then let settings = this.Workspace.Services.GetService() outliningManager.Enabled <- settings.Advanced.IsOutliningEnabled + +[] +[)>] +type internal HackCpsCommandLineChanges + [] + ( + [)>] workspace: VisualStudioWorkspace + ) = + + static let projectDisplayNameOf projectFileName = + if String.IsNullOrWhiteSpace projectFileName then projectFileName + else Path.GetFileNameWithoutExtension projectFileName + + [] + /// This handles commandline change notifications from the Dotnet Project-system + /// Prior to VS 15.7 path contained path to project file, post 15.7 contains target binpath + /// binpath is more accurate because a project file can have multiple in memory projects based on configuration + member _.HandleCommandLineChanges(path:string, sources:ImmutableArray, _references:ImmutableArray, options:ImmutableArray) = + use _logBlock = Logger.LogBlock(LogEditorFunctionId.LanguageService_HandleCommandLineArgs) + + let projectId = + match Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices.FSharpVisualStudioWorkspaceExtensions.TryGetProjectIdByBinPath(workspace, path) with + | true, projectId -> projectId + | false, _ -> Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices.FSharpVisualStudioWorkspaceExtensions.GetOrCreateProjectIdForPath(workspace, path, projectDisplayNameOf path) + let path = Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices.FSharpVisualStudioWorkspaceExtensions.GetProjectFilePath(workspace, projectId) + + let getFullPath p = + let p' = + if Path.IsPathRooted(p) || path = null then p + else Path.Combine(Path.GetDirectoryName(path), p) + Path.GetFullPathSafe(p') + + let sourcePaths = sources |> Seq.map(fun s -> getFullPath s.Path) |> Seq.toArray + + let workspaceService = workspace.Services.GetRequiredService() + workspaceService.FSharpProjectOptionsManager.SetCommandLineOptions(projectId, sourcePaths, options) diff --git a/vsintegration/src/FSharp.Editor/LanguageService/LegacyProjectWorkspaceMap.fs b/vsintegration/src/FSharp.Editor/LanguageService/LegacyProjectWorkspaceMap.fs index 426ecf9a5f2..996ce1cadf8 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/LegacyProjectWorkspaceMap.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/LegacyProjectWorkspaceMap.fs @@ -147,15 +147,15 @@ type internal LegacyProjectWorkspaceMap(solution: IVsSolution, interface IVsSolutionEvents with - member __.OnAfterCloseSolution(_) = + member _.OnAfterCloseSolution(_) = // Clear let mutable setup = Unchecked.defaultof<_> while setupQueue.TryDequeue(&setup) do () VSConstants.S_OK - member __.OnAfterLoadProject(_, _) = VSConstants.S_OK + member _.OnAfterLoadProject(_, _) = VSConstants.S_OK - member __.OnAfterOpenProject(hier, _) = + member _.OnAfterOpenProject(hier, _) = match hier with | :? IProvideProjectSite as siteProvider -> let setup = fun () -> this.SetupLegacyProjectFile(siteProvider) @@ -167,13 +167,13 @@ type internal LegacyProjectWorkspaceMap(solution: IVsSolution, | _ -> () VSConstants.S_OK - member __.OnAfterOpenSolution(_, _) = + member _.OnAfterOpenSolution(_, _) = let mutable setup = Unchecked.defaultof<_> while setupQueue.TryDequeue(&setup) do setup () VSConstants.S_OK - member __.OnBeforeCloseProject(hier, _) = + member _.OnBeforeCloseProject(hier, _) = match hier with | :? IProvideProjectSite as siteProvider -> let site = siteProvider.GetProjectSite() @@ -186,12 +186,12 @@ type internal LegacyProjectWorkspaceMap(solution: IVsSolution, | _ -> () VSConstants.S_OK - member __.OnBeforeCloseSolution(_) = VSConstants.S_OK + member _.OnBeforeCloseSolution(_) = VSConstants.S_OK - member __.OnBeforeUnloadProject(_, _) = VSConstants.S_OK + member _.OnBeforeUnloadProject(_, _) = VSConstants.S_OK - member __.OnQueryCloseProject(_, _, _) = VSConstants.S_OK + member _.OnQueryCloseProject(_, _, _) = VSConstants.S_OK - member __.OnQueryCloseSolution(_, _) = VSConstants.S_OK + member _.OnQueryCloseSolution(_, _) = VSConstants.S_OK - member __.OnQueryUnloadProject(_, _) = VSConstants.S_OK \ No newline at end of file + member _.OnQueryUnloadProject(_, _) = VSConstants.S_OK \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/LanguageService/MetadataAsSource.fs b/vsintegration/src/FSharp.Editor/LanguageService/MetadataAsSource.fs new file mode 100644 index 00000000000..1121c0c8609 --- /dev/null +++ b/vsintegration/src/FSharp.Editor/LanguageService/MetadataAsSource.fs @@ -0,0 +1,147 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace Microsoft.VisualStudio.FSharp.Editor + +open System +open System.Threading +open System.Collections.Immutable +open System.Diagnostics +open System.IO +open System.Linq +open System.Text +open System.Runtime.InteropServices +open System.Reflection.PortableExecutable +open System.ComponentModel.Composition + +open Microsoft.CodeAnalysis +open Microsoft.CodeAnalysis.FindSymbols +open Microsoft.CodeAnalysis.Text +open Microsoft.CodeAnalysis.Navigation +open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Navigation +open Microsoft.VisualStudio.ComponentModelHost +open Microsoft.VisualStudio.LanguageServices.ProjectSystem + +open Microsoft.VisualStudio +open Microsoft.VisualStudio.Editor +open Microsoft.VisualStudio.Threading +open Microsoft.VisualStudio.Shell +open Microsoft.VisualStudio.Shell.Interop +open Microsoft.VisualStudio.TextManager.Interop + +module internal MetadataAsSource = + + let generateTemporaryDocument (asmIdentity: AssemblyIdentity, name: string, metadataReferences) = + let rootPath = Path.Combine(Path.GetTempPath(), "MetadataAsSource") + let extension = ".fsi" + let directoryName = Guid.NewGuid().ToString("N") + let temporaryFilePath = Path.Combine(rootPath, directoryName, name + extension) + + let projectId = ProjectId.CreateNewId() + + let generatedDocumentId = DocumentId.CreateNewId(projectId) + let documentInfo = + DocumentInfo.Create( + generatedDocumentId, + Path.GetFileName(temporaryFilePath), + filePath = temporaryFilePath, + loader = FileTextLoader(temporaryFilePath, Encoding.UTF8)) + + let projectInfo = + ProjectInfo.Create( + projectId, + VersionStamp.Default, + name = FSharpConstants.FSharpMetadataName + " - " + asmIdentity.Name, + assemblyName = asmIdentity.Name, + language = LanguageNames.FSharp, + documents = [|documentInfo|], + metadataReferences = metadataReferences) + + (projectInfo, documentInfo) + + let showDocument (filePath, name, serviceProvider: IServiceProvider) = + let vsRunningDocumentTable4 = serviceProvider.GetService() + let fileAlreadyOpen = vsRunningDocumentTable4.IsMonikerValid(filePath) + + let openDocumentService = serviceProvider.GetService() + + let (_, _, _, _, windowFrame) = openDocumentService.OpenDocumentViaProject(filePath, ref VSConstants.LOGVIEWID.TextView_guid) + + let componentModel = serviceProvider.GetService() + let editorAdaptersFactory = componentModel.GetService() + let documentCookie = vsRunningDocumentTable4.GetDocumentCookie(filePath) + let vsTextBuffer = vsRunningDocumentTable4.GetDocumentData(documentCookie) :?> IVsTextBuffer + let textBuffer = editorAdaptersFactory.GetDataBuffer(vsTextBuffer) + + if not fileAlreadyOpen then + ErrorHandler.ThrowOnFailure(vsTextBuffer.SetStateFlags(uint32 BUFFERSTATEFLAGS.BSF_USER_READONLY)) |> ignore + ErrorHandler.ThrowOnFailure(windowFrame.SetProperty(int __VSFPROPID5.VSFPROPID_IsProvisional, true)) |> ignore + ErrorHandler.ThrowOnFailure(windowFrame.SetProperty(int __VSFPROPID5.VSFPROPID_OverrideCaption, name)) |> ignore + ErrorHandler.ThrowOnFailure(windowFrame.SetProperty(int __VSFPROPID5.VSFPROPID_OverrideToolTip, name)) |> ignore + + windowFrame.Show() |> ignore + + let textContainer = textBuffer.AsTextContainer() + let mutable workspace = Unchecked.defaultof<_> + if Workspace.TryGetWorkspace(textContainer, &workspace) then + let solution = workspace.CurrentSolution + let documentId = workspace.GetDocumentIdInCurrentContext(textContainer) + match box documentId with + | null -> None + | _ -> solution.GetDocument(documentId) |> Some + else + None + +[] +[); Composition.Shared>] +type internal FSharpMetadataAsSourceService [] (projectContextFactory: IWorkspaceProjectContextFactory) = + + let serviceProvider = ServiceProvider.GlobalProvider + let projs = System.Collections.Concurrent.ConcurrentDictionary() + + let createMetadataProjectContext (projInfo: ProjectInfo) (docInfo: DocumentInfo) = + let projectContext = projectContextFactory.CreateProjectContext(LanguageNames.FSharp, projInfo.Id.ToString(), projInfo.FilePath, Guid.NewGuid(), null, null) + projectContext.DisplayName <- projInfo.Name + projectContext.AddSourceFile(docInfo.FilePath, sourceCodeKind = SourceCodeKind.Regular) + + for metaRef in projInfo.MetadataReferences do + match metaRef with + | :? PortableExecutableReference as peRef -> + projectContext.AddMetadataReference(peRef.FilePath, MetadataReferenceProperties.Assembly) + | _ -> + () + + projectContext + + let clear filePath (projectContext: IWorkspaceProjectContext) = + projs.TryRemove(filePath) |> ignore + projectContext.Dispose() + try + File.Delete filePath |> ignore + with + | _ -> () + + member _.ClearGeneratedFiles() = + let projsArr = projs.ToArray() + projsArr + |> Array.iter (fun pair -> + clear pair.Key pair.Value + ) + + member _.ShowDocument(projInfo: ProjectInfo, filePath: string, text: Text.SourceText) = + match projInfo.Documents |> Seq.tryFind (fun doc -> doc.FilePath = filePath) with + | Some document -> + let _ = + let directoryName = Path.GetDirectoryName(filePath) + if Directory.Exists(directoryName) |> not then + Directory.CreateDirectory(directoryName) |> ignore + use fileStream = new FileStream(filePath, IO.FileMode.Create) + use writer = new StreamWriter(fileStream) + text.Write(writer) + + let projectContext = createMetadataProjectContext projInfo document + + projs.[filePath] <- projectContext + + MetadataAsSource.showDocument(filePath, Path.GetFileName(filePath), serviceProvider) + | _ -> + None \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/LanguageService/ProvideBraceCompletionAttribute.fs b/vsintegration/src/FSharp.Editor/LanguageService/ProvideBraceCompletionAttribute.fs index 916a7380da1..afea098da33 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/ProvideBraceCompletionAttribute.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/ProvideBraceCompletionAttribute.fs @@ -10,8 +10,8 @@ open Microsoft.VisualStudio.Shell type internal ProvideBraceCompletionAttribute(languageName: string) = inherit RegistrationAttribute() - override __.Register(context) = + override _.Register(context) = use key = context.CreateKey(@"Languages\Language Services\" + languageName) key.SetValue("ShowBraceCompletion", 1) - override __.Unregister(_) = () \ No newline at end of file + override _.Unregister(_) = () \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/LanguageService/SingleFileWorkspaceMap.fs b/vsintegration/src/FSharp.Editor/LanguageService/SingleFileWorkspaceMap.fs index 21249b80c5f..637c6dd92d7 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/SingleFileWorkspaceMap.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/SingleFileWorkspaceMap.fs @@ -4,6 +4,7 @@ namespace Microsoft.VisualStudio.FSharp.Editor open System open System.Collections.Concurrent +open System.Collections.Immutable open Microsoft.CodeAnalysis open Microsoft.VisualStudio open Microsoft.VisualStudio.FSharp.Editor @@ -11,102 +12,266 @@ open Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem open Microsoft.VisualStudio.LanguageServices.ProjectSystem open Microsoft.VisualStudio.Shell.Interop open Microsoft.VisualStudio.LanguageServices +open FSharp.Compiler.CodeAnalysis -[] -type internal SingleFileWorkspaceMap(workspace: VisualStudioWorkspace, - miscFilesWorkspace: MiscellaneousFilesWorkspace, - optionsManager: FSharpProjectOptionsManager, - projectContextFactory: IWorkspaceProjectContextFactory, - rdt: IVsRunningDocumentTable) as this = +type internal IFSharpWorkspaceProjectContext = + inherit IDisposable - let files = ConcurrentDictionary(StringComparer.OrdinalIgnoreCase) + abstract Id : ProjectId + + abstract FilePath : string + + abstract ProjectReferenceCount : int + + abstract HasProjectReference : filePath: string -> bool + + abstract SetProjectReferences : IFSharpWorkspaceProjectContext seq -> unit + +type internal IFSharpWorkspaceProjectContextFactory = + + abstract CreateProjectContext : filePath: string -> IFSharpWorkspaceProjectContext + +type internal FSharpWorkspaceProjectContext(vsProjectContext: IWorkspaceProjectContext) = + + let mutable refs = ImmutableDictionary.Create(StringComparer.OrdinalIgnoreCase) + + member private _.VisualStudioProjectContext = vsProjectContext + + member private _.AddProjectReference(builder: ImmutableDictionary<_, _>.Builder, projectContext: IFSharpWorkspaceProjectContext) = + match projectContext with + | :? FSharpWorkspaceProjectContext as fsProjectContext -> + vsProjectContext.AddProjectReference(fsProjectContext.VisualStudioProjectContext, MetadataReferenceProperties.Assembly) + builder.Add(projectContext.FilePath, projectContext) + | _ -> + () + + member private _.RemoveProjectReference(projectContext: IFSharpWorkspaceProjectContext) = + match projectContext with + | :? FSharpWorkspaceProjectContext as fsProjectContext -> + vsProjectContext.RemoveProjectReference(fsProjectContext.VisualStudioProjectContext) + | _ -> + () + + interface IFSharpWorkspaceProjectContext with - let createSourceCodeKind (filePath: string) = + member _.Id = vsProjectContext.Id + + member _.FilePath = vsProjectContext.ProjectFilePath + + member _.ProjectReferenceCount = refs.Count + + member _.HasProjectReference(filePath) = refs.ContainsKey(filePath) + + member this.SetProjectReferences(projRefs) = + let builder = ImmutableDictionary.CreateBuilder() + + refs.Values + |> Seq.iter (fun x -> + this.RemoveProjectReference(x) + ) + + projRefs + |> Seq.iter (fun x -> + this.AddProjectReference(builder, x) + ) + + refs <- builder.ToImmutable() + + member _.Dispose() = + vsProjectContext.Dispose() + +type internal FSharpWorkspaceProjectContextFactory(projectContextFactory: IWorkspaceProjectContextFactory) = + + static let createSourceCodeKind (filePath: string) = if isScriptFile filePath then SourceCodeKind.Script else SourceCodeKind.Regular - let createProjectContext filePath = - let projectContext = projectContextFactory.CreateProjectContext(FSharpConstants.FSharpLanguageName, filePath, filePath, Guid.NewGuid(), null, null) - projectContext.DisplayName <- FSharpConstants.FSharpMiscellaneousFilesName - projectContext.AddSourceFile(filePath, sourceCodeKind = createSourceCodeKind filePath) - projectContext + interface IFSharpWorkspaceProjectContextFactory with + + member _.CreateProjectContext filePath = + let projectContext = projectContextFactory.CreateProjectContext(FSharpConstants.FSharpLanguageName, filePath, filePath, Guid.NewGuid(), null, null) + projectContext.DisplayName <- FSharpConstants.FSharpMiscellaneousFilesName + projectContext.AddSourceFile(filePath, sourceCodeKind = createSourceCodeKind filePath) + new FSharpWorkspaceProjectContext(projectContext) :> IFSharpWorkspaceProjectContext + +type internal FSharpMiscellaneousFileService(workspace: Workspace, + miscFilesWorkspace: Workspace, + projectContextFactory: IFSharpWorkspaceProjectContextFactory) = + + // We have a lock because the `ScriptUpdated` event may happen concurrently when a document opens or closes. + let gate = obj() + let files = ConcurrentDictionary(StringComparer.OrdinalIgnoreCase) + let optionsManager = workspace.Services.GetRequiredService().FSharpProjectOptionsManager + + static let mustUpdateProject (refSourceFiles: string []) (projectContext: IFSharpWorkspaceProjectContext) = + refSourceFiles.Length <> projectContext.ProjectReferenceCount || + ( + refSourceFiles + |> Seq.forall projectContext.HasProjectReference + |> not + ) + + let tryRemove (document: Document) = + let projIds = document.Project.Solution.GetDependentProjectIds(document.Project.Id) + if projIds.Count = 0 then + optionsManager.ClearSingleFileOptionsCache(document.Id) + + match files.TryRemove(document.FilePath) with + | true, projectContext -> + (projectContext :> IDisposable).Dispose() + | _ -> + () do + optionsManager.ScriptUpdated.Add(fun scriptProjectOptions -> + if scriptProjectOptions.SourceFiles.Length > 0 then + // The last file in the project options is the main script file. + let filePath = scriptProjectOptions.SourceFiles.[scriptProjectOptions.SourceFiles.Length - 1] + let refSourceFiles = scriptProjectOptions.SourceFiles |> Array.take (scriptProjectOptions.SourceFiles.Length - 1) + + match files.TryGetValue(filePath) with + | true, (projectContext: IFSharpWorkspaceProjectContext) -> + if mustUpdateProject refSourceFiles projectContext then + lock gate (fun () -> + let newProjRefs = + refSourceFiles + |> Array.map (fun filePath -> + match files.TryGetValue(filePath) with + | true, refProjectContext -> refProjectContext + | _ -> + let refProjectContext = projectContextFactory.CreateProjectContext(filePath) + files.[filePath] <- refProjectContext + refProjectContext + ) + + projectContext.SetProjectReferences(newProjRefs) + ) + | _ -> + () + ) + miscFilesWorkspace.DocumentOpened.Add(fun args -> let document = args.Document - if document.Project.Language = FSharpConstants.FSharpLanguageName && workspace.CurrentSolution.GetDocumentIdsWithFilePath(document.FilePath).Length = 0 then - files.[document.FilePath] <- createProjectContext document.FilePath + + // If the file does not exist in the current solution, then we can create new project in the VisualStudioWorkspace that represents + // a F# miscellaneous project, which could be a script or not. + if document.Project.IsFSharp && workspace.CurrentSolution.GetDocumentIdsWithFilePath(document.FilePath).Length = 0 then + let filePath = document.FilePath + lock gate (fun () -> + if files.ContainsKey(filePath) |> not then + files.[filePath] <- projectContextFactory.CreateProjectContext(filePath) + ) ) workspace.DocumentOpened.Add(fun args -> let document = args.Document - if document.Project.Language = FSharpConstants.FSharpLanguageName && document.Project.Name <> FSharpConstants.FSharpMiscellaneousFilesName then - match files.TryRemove(document.FilePath) with - | true, projectContext -> - optionsManager.ClearSingleFileOptionsCache(document.Id) - projectContext.Dispose() - | _ -> () + if not document.Project.IsFSharpMiscellaneousOrMetadata then + if files.ContainsKey(document.FilePath) then + lock gate (fun () -> + tryRemove document + ) ) workspace.DocumentClosed.Add(fun args -> let document = args.Document - match files.TryRemove(document.FilePath) with - | true, projectContext -> - optionsManager.ClearSingleFileOptionsCache(document.Id) - projectContext.Dispose() - | _ -> () + if document.Project.IsFSharpMiscellaneousOrMetadata then + lock gate (fun () -> + tryRemove document + ) + ) + + workspace.WorkspaceChanged.Add(fun args -> + match args.Kind with + | WorkspaceChangeKind.ProjectRemoved -> + let proj = args.OldSolution.GetProject(args.ProjectId) + if proj.IsFSharpMiscellaneousOrMetadata then + let projRefs = + proj.GetAllProjectsThisProjectDependsOn() + |> Array.ofSeq + + if projRefs.Length > 0 then + lock gate (fun () -> + projRefs + |> Array.iter (fun proj -> + let proj = args.NewSolution.GetProject(proj.Id) + match proj with + | null -> () + | _ -> + if proj.IsFSharpMiscellaneousOrMetadata then + match proj.Documents |> Seq.tryExactlyOne with + | Some doc when not (workspace.IsDocumentOpen(doc.Id)) -> + tryRemove doc + | _ -> + () + ) + ) + | _ -> + () ) - do - rdt.AdviseRunningDocTableEvents(this) |> ignore + member _.Workspace = workspace + + member _.ProjectContextFactory = projectContextFactory + + member _.ContainsFile filePath = files.ContainsKey(filePath) + + member _.RenameFile(filePath, newFilePath) = + match files.TryRemove(filePath) with + | true, projectContext -> + let project = workspace.CurrentSolution.GetProject(projectContext.Id) + if project <> null then + let documentOpt = + project.Documents + |> Seq.tryFind (fun x -> String.Equals(x.FilePath, filePath, StringComparison.OrdinalIgnoreCase)) + match documentOpt with + | None -> () + | Some(document) -> + optionsManager.ClearSingleFileOptionsCache(document.Id) + projectContext.Dispose() + files.[newFilePath] <- projectContextFactory.CreateProjectContext(newFilePath) + else + projectContext.Dispose() // fallback, shouldn't happen, but in case it does let's dispose of the project context so we don't leak + | _ -> () + +[] +type internal SingleFileWorkspaceMap(miscFileService: FSharpMiscellaneousFileService, + rdt: IVsRunningDocumentTable) as this = + + do + rdt.AdviseRunningDocTableEvents(this) |> ignore interface IVsRunningDocTableEvents with - member __.OnAfterAttributeChange(_, _) = VSConstants.E_NOTIMPL + member _.OnAfterAttributeChange(_, _) = VSConstants.E_NOTIMPL - member __.OnAfterDocumentWindowHide(_, _) = VSConstants.E_NOTIMPL + member _.OnAfterDocumentWindowHide(_, _) = VSConstants.E_NOTIMPL - member __.OnAfterFirstDocumentLock(_, _, _, _) = VSConstants.E_NOTIMPL + member _.OnAfterFirstDocumentLock(_, _, _, _) = VSConstants.E_NOTIMPL - member __.OnAfterSave(_) = VSConstants.E_NOTIMPL + member _.OnAfterSave(_) = VSConstants.E_NOTIMPL - member __.OnBeforeDocumentWindowShow(_, _, _) = VSConstants.E_NOTIMPL + member _.OnBeforeDocumentWindowShow(_, _, _) = VSConstants.E_NOTIMPL - member __.OnBeforeLastDocumentUnlock(_, _, _, _) = VSConstants.E_NOTIMPL + member _.OnBeforeLastDocumentUnlock(_, _, _, _) = VSConstants.E_NOTIMPL interface IVsRunningDocTableEvents2 with - member __.OnAfterAttributeChange(_, _) = VSConstants.E_NOTIMPL + member _.OnAfterAttributeChange(_, _) = VSConstants.E_NOTIMPL - member __.OnAfterAttributeChangeEx(_, grfAttribs, _, _, pszMkDocumentOld, _, _, pszMkDocumentNew) = + member _.OnAfterAttributeChangeEx(_, grfAttribs, _, _, pszMkDocumentOld, _, _, pszMkDocumentNew) = // Handles renaming of a misc file - if (grfAttribs &&& (uint32 __VSRDTATTRIB.RDTA_MkDocument)) <> 0u && files.ContainsKey(pszMkDocumentOld) then - match files.TryRemove(pszMkDocumentOld) with - | true, projectContext -> - let project = workspace.CurrentSolution.GetProject(projectContext.Id) - if project <> null then - let documentOpt = - project.Documents - |> Seq.tryFind (fun x -> String.Equals(x.FilePath, pszMkDocumentOld, StringComparison.OrdinalIgnoreCase)) - match documentOpt with - | None -> () - | Some(document) -> - optionsManager.ClearSingleFileOptionsCache(document.Id) - projectContext.Dispose() - files.[pszMkDocumentNew] <- createProjectContext pszMkDocumentNew - else - projectContext.Dispose() // fallback, shouldn't happen, but in case it does let's dispose of the project context so we don't leak - | _ -> () + if (grfAttribs &&& (uint32 __VSRDTATTRIB.RDTA_MkDocument)) <> 0u && miscFileService.ContainsFile(pszMkDocumentOld) then + miscFileService.RenameFile(pszMkDocumentOld, pszMkDocumentNew) VSConstants.S_OK - member __.OnAfterDocumentWindowHide(_, _) = VSConstants.E_NOTIMPL + member _.OnAfterDocumentWindowHide(_, _) = VSConstants.E_NOTIMPL - member __.OnAfterFirstDocumentLock(_, _, _, _) = VSConstants.E_NOTIMPL + member _.OnAfterFirstDocumentLock(_, _, _, _) = VSConstants.E_NOTIMPL - member __.OnAfterSave(_) = VSConstants.E_NOTIMPL + member _.OnAfterSave(_) = VSConstants.E_NOTIMPL - member __.OnBeforeDocumentWindowShow(_, _, _) = VSConstants.E_NOTIMPL + member _.OnBeforeDocumentWindowShow(_, _, _) = VSConstants.E_NOTIMPL - member __.OnBeforeLastDocumentUnlock(_, _, _, _) = VSConstants.E_NOTIMPL \ No newline at end of file + member _.OnBeforeLastDocumentUnlock(_, _, _, _) = VSConstants.E_NOTIMPL \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/LanguageService/SymbolHelpers.fs b/vsintegration/src/FSharp.Editor/LanguageService/SymbolHelpers.fs index 1be896711b4..5a16321171a 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/SymbolHelpers.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/SymbolHelpers.fs @@ -10,59 +10,38 @@ open System.Threading.Tasks open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Text -open FSharp.Compiler.Range -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Symbols +open FSharp.Compiler.Text open Microsoft.VisualStudio.FSharp.Editor.Symbols module internal SymbolHelpers = /// Used for local code fixes in a document, e.g. to rename local parameters - let getSymbolUsesOfSymbolAtLocationInDocument (document: Document, position: int, projectInfoManager: FSharpProjectOptionsManager, checker: FSharpChecker, userOpName) = + let getSymbolUsesOfSymbolAtLocationInDocument (document: Document, position: int) = asyncMaybe { + let userOpName = "getSymbolUsesOfSymbolAtLocationInDocument" + let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(userOpName) |> liftAsync + let! defines = document.GetFSharpCompilationDefinesAsync(userOpName) |> liftAsync + let! cancellationToken = Async.CancellationToken |> liftAsync let! sourceText = document.GetTextAsync(cancellationToken) - let! textVersion = document.GetTextVersionAsync(cancellationToken) - let textVersionHash = textVersion.GetHashCode() let textLine = sourceText.Lines.GetLineFromPosition(position) let textLinePos = sourceText.Lines.GetLinePosition(position) let fcsTextLineNumber = Line.fromZ textLinePos.Line - let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) - let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions let! symbol = Tokenizer.getSymbolAtPosition(document.Id, sourceText, position, document.FilePath, defines, SymbolLookupKind.Greedy, false, false) - let settings = document.FSharpOptions - let! _, _, checkFileResults = checker.ParseAndCheckDocument(document.FilePath, textVersionHash, sourceText, projectOptions, settings.LanguageServicePerformance, userOpName = userOpName) let! symbolUse = checkFileResults.GetSymbolUseAtLocation(fcsTextLineNumber, symbol.Ident.idRange.EndColumn, textLine.ToString(), symbol.FullIsland) let! ct = Async.CancellationToken |> liftAsync let symbolUses = checkFileResults.GetUsesOfSymbolInFile(symbolUse.Symbol, cancellationToken=ct) return symbolUses } - let getSymbolUsesInProjects (symbol: FSharpSymbol, projectInfoManager: FSharpProjectOptionsManager, checker: FSharpChecker, projects: Project list, onFound: Document -> TextSpan -> range -> Async, userOpName) = + let getSymbolUsesInProjects (symbol: FSharpSymbol, projects: Project list, onFound: Document -> TextSpan -> range -> Async) = projects - |> Seq.map (fun project -> - async { - match! projectInfoManager.TryGetOptionsByProject(project, CancellationToken.None) with - | Some (_parsingOptions, projectOptions) -> - for filePath in projectOptions.SourceFiles do - let! symbolUses = checker.FindBackgroundReferencesInFile(filePath, projectOptions, symbol, canInvalidateProject = false, userOpName = userOpName) - let documentOpt = project.Solution.TryGetDocumentFromPath(filePath, project.Id) - match documentOpt with - | Some document -> - let! ct = Async.CancellationToken - let! sourceText = document.GetTextAsync ct |> Async.AwaitTask - for symbolUse in symbolUses do - match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse) with - | Some textSpan -> - do! onFound document textSpan symbolUse - | _ -> - () - | _ -> - () - | _ -> () - }) + |> Seq.map (fun project -> project.FindFSharpReferencesAsync(symbol, onFound, "getSymbolUsesInProjects")) |> Async.Sequential - let getSymbolUsesInSolution (symbol: FSharpSymbol, declLoc: SymbolDeclarationLocation, checkFileResults: FSharpCheckFileResults, - projectInfoManager: FSharpProjectOptionsManager, checker: FSharpChecker, solution: Solution, userOpName) = + let getSymbolUsesInSolution (symbol: FSharpSymbol, declLoc: SymbolDeclarationLocation, checkFileResults: FSharpCheckFileResults, solution: Solution) = async { let toDict (symbolUseRanges: range seq) = let groups = @@ -78,7 +57,7 @@ module internal SymbolHelpers = | SymbolDeclarationLocation.CurrentDocument -> let! ct = Async.CancellationToken let symbolUses = checkFileResults.GetUsesOfSymbolInFile(symbol, ct) - return toDict (symbolUses |> Seq.map (fun symbolUse -> symbolUse.RangeAlternate)) + return toDict (symbolUses |> Seq.map (fun symbolUse -> symbolUse.Range)) | SymbolDeclarationLocation.Projects (projects, isInternalToProject) -> let symbolUseRanges = ImmutableArray.CreateBuilder() @@ -94,7 +73,7 @@ module internal SymbolHelpers = fun _ _ symbolUseRange -> async { symbolUseRanges.Add symbolUseRange } - let! _ = getSymbolUsesInProjects (symbol, projectInfoManager, checker, projects, onFound, userOpName) + let! _ = getSymbolUsesInProjects (symbol, projects, onFound) // Distinct these down because each TFM will produce a new 'project'. // Unless guarded by a #if define, symbols with the same range will be added N times @@ -112,22 +91,23 @@ module internal SymbolHelpers = // A better approach is to use something like createTextChangeCodeFix below, with a delayed function to compute a set of changes to be applied // simultaneously. But that doesn't work for this case, as we want a set of changes to apply acrosss the whole solution. - let changeAllSymbolReferences (document: Document, symbolSpan: TextSpan, textChanger: string -> string, projectInfoManager: FSharpProjectOptionsManager, checker: FSharpChecker, userOpName) + let changeAllSymbolReferences (document: Document, symbolSpan: TextSpan, textChanger: string -> string) : Async<(Func> * OriginalText) option> = asyncMaybe { + let userOpName = "changeAllSymbolReferences" do! Option.guard (symbolSpan.Length > 0) let! cancellationToken = liftAsync Async.CancellationToken let! sourceText = document.GetTextAsync(cancellationToken) let originalText = sourceText.ToString(symbolSpan) do! Option.guard (originalText.Length > 0) - let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) - let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions - let! symbol = Tokenizer.getSymbolAtPosition(document.Id, sourceText, symbolSpan.Start, document.FilePath, defines, SymbolLookupKind.Greedy, false, false) - let! _, _, checkFileResults = checker.ParseAndCheckDocument(document, projectOptions, userOpName = userOpName) + + let! symbol = document.TryFindFSharpLexerSymbolAsync(symbolSpan.Start, SymbolLookupKind.Greedy, false, false, userOpName) let textLine = sourceText.Lines.GetLineFromPosition(symbolSpan.Start) let textLinePos = sourceText.Lines.GetLinePosition(symbolSpan.Start) let fcsTextLineNumber = Line.fromZ textLinePos.Line - let! symbolUse = checkFileResults.GetSymbolUseAtLocation(fcsTextLineNumber, symbol.Ident.idRange.EndColumn, textLine.Text.ToString(), symbol.FullIsland) + + let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(userOpName) |> liftAsync + let! symbolUse = checkFileResults.GetSymbolUseAtLocation(fcsTextLineNumber, symbol.Ident.idRange.EndColumn, textLine.ToString(), symbol.FullIsland) let! declLoc = symbolUse.GetDeclarationLocation(document) let newText = textChanger originalText // defer finding all symbol uses throughout the solution @@ -135,7 +115,7 @@ module internal SymbolHelpers = Func<_,_>(fun (cancellationToken: CancellationToken) -> async { let! symbolUsesByDocumentId = - getSymbolUsesInSolution(symbolUse.Symbol, declLoc, checkFileResults, projectInfoManager, checker, document.Project.Solution, userOpName) + getSymbolUsesInSolution(symbolUse.Symbol, declLoc, checkFileResults, document.Project.Solution) let mutable solution = document.Project.Solution diff --git a/vsintegration/src/FSharp.Editor/LanguageService/Symbols.fs b/vsintegration/src/FSharp.Editor/LanguageService/Symbols.fs index 45b1eb22b30..5f5d7fae794 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/Symbols.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/Symbols.fs @@ -1,34 +1,22 @@ [] module internal Microsoft.VisualStudio.FSharp.Editor.Symbols -open System -open System.Collections.Generic open System.IO -open System.Threading -open System.Threading.Tasks -open System.Runtime.CompilerServices - open Microsoft.CodeAnalysis -open Microsoft.CodeAnalysis.Classification -open Microsoft.CodeAnalysis.Text - -open FSharp.Compiler -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.SyntaxTree - +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Symbols [] type SymbolDeclarationLocation = | CurrentDocument | Projects of Project list * isLocalForProject: bool - [] type SymbolUse = { SymbolUse: FSharpSymbolUse IsUsed: bool - FullNames: Idents[] } - + FullNames: ShortIdent[] } type FSharpSymbol with member this.IsInternalToProject = diff --git a/vsintegration/src/FSharp.Editor/LanguageService/TextViewCreationListener.fs b/vsintegration/src/FSharp.Editor/LanguageService/TextViewCreationListener.fs index 8dae5999bbc..4d37f1c93cd 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/TextViewCreationListener.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/TextViewCreationListener.fs @@ -58,6 +58,6 @@ type TextViewCreationListener [] (adaptersFactory: IVsEdit interface IVsTextViewCreationListener with - member __.VsTextViewCreated(textViewAdapter) = + member _.VsTextViewCreated(textViewAdapter) = let _textView = adaptersFactory.GetWpfTextView(textViewAdapter) initKeyBindings textViewAdapter \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/LanguageService/Tokenizer.fs b/vsintegration/src/FSharp.Editor/LanguageService/Tokenizer.fs index 8a39d38ec29..722360d76f2 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/Tokenizer.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/Tokenizer.fs @@ -13,16 +13,19 @@ open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Classification open Microsoft.CodeAnalysis.Text -open FSharp.Compiler -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Symbols +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Tokenization open Microsoft.VisualStudio.Core.Imaging open Microsoft.VisualStudio.Imaging open Microsoft.CodeAnalysis.ExternalAccess.FSharp -type private FSharpGlyph = FSharp.Compiler.SourceCodeServices.FSharpGlyph +type private FSharpGlyph = FSharp.Compiler.EditorServices.FSharpGlyph type private Glyph = Microsoft.CodeAnalysis.ExternalAccess.FSharp.FSharpGlyph [] @@ -42,7 +45,7 @@ type internal LexerSymbol = Ident: Ident /// All parts of `LongIdent` FullIsland: string list } - member x.Range: Range.range = x.Ident.idRange + member x.Range: Range = x.Ident.idRange [] type internal SymbolLookupKind = @@ -55,16 +58,13 @@ type internal SymbolLookupKind = module internal Tokenizer = - let (|Public|Internal|Protected|Private|) (a: FSharpAccessibility option) = - match a with - | None -> Public - | Some a -> - if a.IsPublic then Public - elif a.IsInternal then Internal - elif a.IsPrivate then Private - else Protected + let (|Public|Internal|Protected|Private|) (a: FSharpAccessibility) = + if a.IsPublic then Public + elif a.IsInternal then Internal + elif a.IsPrivate then Private + else Protected - let FSharpGlyphToRoslynGlyph (glyph: FSharpGlyph, accessibility: FSharpAccessibility option) = + let FSharpGlyphToRoslynGlyph (glyph: FSharpGlyph, accessibility: FSharpAccessibility) = match glyph with | FSharpGlyph.Class | FSharpGlyph.Exception @@ -158,7 +158,7 @@ module internal Tokenizer = | Some symbol -> match symbol with | :? FSharpUnionCase as x -> - match Some x.Accessibility with + match x.Accessibility with | Public -> KnownImageIds.EnumerationPublic | Internal -> KnownImageIds.EnumerationInternal | Protected -> KnownImageIds.EnumerationProtected @@ -166,13 +166,13 @@ module internal Tokenizer = | :? FSharpActivePatternCase -> KnownImageIds.EnumerationPublic | :? FSharpField as x -> if x.IsLiteral then - match Some x.Accessibility with + match x.Accessibility with | Public -> KnownImageIds.ConstantPublic | Internal -> KnownImageIds.ConstantInternal | Protected -> KnownImageIds.ConstantProtected | Private -> KnownImageIds.ConstantPrivate else - match Some x.Accessibility with + match x.Accessibility with | Public -> KnownImageIds.FieldPublic | Internal -> KnownImageIds.FieldInternal | Protected -> KnownImageIds.FieldProtected @@ -180,57 +180,57 @@ module internal Tokenizer = | :? FSharpParameter -> KnownImageIds.Parameter | :? FSharpMemberOrFunctionOrValue as x -> if x.LiteralValue.IsSome then - match Some x.Accessibility with + match x.Accessibility with | Public -> KnownImageIds.ConstantPublic | Internal -> KnownImageIds.ConstantInternal | Protected -> KnownImageIds.ConstantProtected | Private -> KnownImageIds.ConstantPrivate elif x.IsExtensionMember then KnownImageIds.ExtensionMethod elif x.IsProperty || x.IsPropertyGetterMethod || x.IsPropertySetterMethod then - match Some x.Accessibility with + match x.Accessibility with | Public -> KnownImageIds.PropertyPublic | Internal -> KnownImageIds.PropertyInternal | Protected -> KnownImageIds.PropertyProtected | Private -> KnownImageIds.PropertyPrivate elif x.IsEvent then - match Some x.Accessibility with + match x.Accessibility with | Public -> KnownImageIds.EventPublic | Internal -> KnownImageIds.EventInternal | Protected -> KnownImageIds.EventProtected | Private -> KnownImageIds.EventPrivate else - match Some x.Accessibility with + match x.Accessibility with | Public -> KnownImageIds.MethodPublic | Internal -> KnownImageIds.MethodInternal | Protected -> KnownImageIds.MethodProtected | Private -> KnownImageIds.MethodPrivate | :? FSharpEntity as x -> if x.IsValueType then - match Some x.Accessibility with + match x.Accessibility with | Public -> KnownImageIds.StructurePublic | Internal -> KnownImageIds.StructureInternal | Protected -> KnownImageIds.StructureProtected | Private -> KnownImageIds.StructurePrivate elif x.IsFSharpModule then - match Some x.Accessibility with + match x.Accessibility with | Public -> KnownImageIds.ModulePublic | Internal -> KnownImageIds.ModuleInternal | Protected -> KnownImageIds.ModuleProtected | Private -> KnownImageIds.ModulePrivate elif x.IsEnum || x.IsFSharpUnion then - match Some x.Accessibility with + match x.Accessibility with | Public -> KnownImageIds.EnumerationPublic | Internal -> KnownImageIds.EnumerationInternal | Protected -> KnownImageIds.EnumerationProtected | Private -> KnownImageIds.EnumerationPrivate elif x.IsInterface then - match Some x.Accessibility with + match x.Accessibility with | Public -> KnownImageIds.InterfacePublic | Internal -> KnownImageIds.InterfaceInternal | Protected -> KnownImageIds.InterfaceProtected | Private -> KnownImageIds.InterfacePrivate elif x.IsDelegate then - match Some x.Accessibility with + match x.Accessibility with | Public -> KnownImageIds.DelegatePublic | Internal -> KnownImageIds.DelegateInternal | Protected -> KnownImageIds.DelegateProtected @@ -238,7 +238,7 @@ module internal Tokenizer = elif x.IsNamespace then KnownImageIds.Namespace else - match Some x.Accessibility with + match x.Accessibility with | Public -> KnownImageIds.ClassPublic | Internal -> KnownImageIds.ClassInternal | Protected -> KnownImageIds.ClassProtected @@ -255,7 +255,7 @@ module internal Tokenizer = | _ -> match symbol with | :? FSharpUnionCase as x -> - match Some x.Accessibility with + match x.Accessibility with | Public -> Glyph.EnumPublic | Internal -> Glyph.EnumInternal | Protected -> Glyph.EnumProtected @@ -263,13 +263,13 @@ module internal Tokenizer = | :? FSharpActivePatternCase -> Glyph.EnumPublic | :? FSharpField as x -> if x.IsLiteral then - match Some x.Accessibility with + match x.Accessibility with | Public -> Glyph.ConstantPublic | Internal -> Glyph.ConstantInternal | Protected -> Glyph.ConstantProtected | Private -> Glyph.ConstantPrivate else - match Some x.Accessibility with + match x.Accessibility with | Public -> Glyph.FieldPublic | Internal -> Glyph.FieldInternal | Protected -> Glyph.FieldProtected @@ -277,62 +277,62 @@ module internal Tokenizer = | :? FSharpParameter -> Glyph.Parameter | :? FSharpMemberOrFunctionOrValue as x -> if x.LiteralValue.IsSome then - match Some x.Accessibility with + match x.Accessibility with | Public -> Glyph.ConstantPublic | Internal -> Glyph.ConstantInternal | Protected -> Glyph.ConstantProtected | Private -> Glyph.ConstantPrivate elif x.IsExtensionMember then - match Some x.Accessibility with + match x.Accessibility with | Public -> Glyph.ExtensionMethodPublic | Internal -> Glyph.ExtensionMethodInternal | Protected -> Glyph.ExtensionMethodProtected | Private -> Glyph.ExtensionMethodPrivate elif x.IsProperty || x.IsPropertyGetterMethod || x.IsPropertySetterMethod then - match Some x.Accessibility with + match x.Accessibility with | Public -> Glyph.PropertyPublic | Internal -> Glyph.PropertyInternal | Protected -> Glyph.PropertyProtected | Private -> Glyph.PropertyPrivate elif x.IsEvent then - match Some x.Accessibility with + match x.Accessibility with | Public -> Glyph.EventPublic | Internal -> Glyph.EventInternal | Protected -> Glyph.EventProtected | Private -> Glyph.EventPrivate else - match Some x.Accessibility with + match x.Accessibility with | Public -> Glyph.MethodPublic | Internal -> Glyph.MethodInternal | Protected -> Glyph.MethodProtected | Private -> Glyph.MethodPrivate | :? FSharpEntity as x -> if x.IsValueType then - match Some x.Accessibility with + match x.Accessibility with | Public -> Glyph.StructurePublic | Internal -> Glyph.StructureInternal | Protected -> Glyph.StructureProtected | Private -> Glyph.StructurePrivate elif x.IsFSharpModule then - match Some x.Accessibility with + match x.Accessibility with | Public -> Glyph.ModulePublic | Internal -> Glyph.ModuleInternal | Protected -> Glyph.ModuleProtected | Private -> Glyph.ModulePrivate elif x.IsEnum || x.IsFSharpUnion then - match Some x.Accessibility with + match x.Accessibility with | Public -> Glyph.EnumPublic | Internal -> Glyph.EnumInternal | Protected -> Glyph.EnumProtected | Private -> Glyph.EnumPrivate elif x.IsInterface then - match Some x.Accessibility with + match x.Accessibility with | Public -> Glyph.InterfacePublic | Internal -> Glyph.InterfaceInternal | Protected -> Glyph.InterfaceProtected | Private -> Glyph.InterfacePrivate elif x.IsDelegate then - match Some x.Accessibility with + match x.Accessibility with | Public -> Glyph.DelegatePublic | Internal -> Glyph.DelegateInternal | Protected -> Glyph.DelegateProtected @@ -340,7 +340,7 @@ module internal Tokenizer = elif x.IsNamespace then Glyph.Namespace else - match Some x.Accessibility with + match x.Accessibility with | Public -> Glyph.ClassPublic | Internal -> Glyph.ClassInternal | Protected -> Glyph.ClassProtected @@ -723,8 +723,8 @@ module internal Tokenizer = Ident(identStr, Range.mkRange fileName - (Range.mkPos (linePos.Line + 1) token.LeftColumn) - (Range.mkPos (linePos.Line + 1) (token.RightColumn + 1))) + (Position.mkPos (linePos.Line + 1) token.LeftColumn) + (Position.mkPos (linePos.Line + 1) (token.RightColumn + 1))) FullIsland = partialName.QualifyingIdents @ [identStr] }) let private getCachedSourceLineData(documentKey: DocumentId, sourceText: SourceText, position: int, fileName: string, defines: string list) = @@ -827,7 +827,7 @@ module internal Tokenizer = else PrettyNaming.IsIdentifierPartCharacter c) let isFixableIdentifier (s: string) = - not (String.IsNullOrEmpty s) && Keywords.NormalizeIdentifierBackticks s |> isIdentifier + not (String.IsNullOrEmpty s) && FSharpKeywords.NormalizeIdentifierBackticks s |> isIdentifier let forbiddenChars = [| '.'; '+'; '$'; '&'; '['; ']'; '/'; '\\'; '*'; '\"' |] diff --git a/vsintegration/src/FSharp.Editor/LanguageService/WorkspaceExtensions.fs b/vsintegration/src/FSharp.Editor/LanguageService/WorkspaceExtensions.fs new file mode 100644 index 00000000000..11a265d3b04 --- /dev/null +++ b/vsintegration/src/FSharp.Editor/LanguageService/WorkspaceExtensions.fs @@ -0,0 +1,217 @@ +[] +module internal Microsoft.VisualStudio.FSharp.Editor.WorkspaceExtensions + +open System +open System.Runtime.CompilerServices +open System.Threading +open Microsoft.CodeAnalysis +open FSharp.Compiler +open FSharp.Compiler.CodeAnalysis + +[] +module private CheckerExtensions = + + type FSharpChecker with + /// Parse the source text from the Roslyn document. + member checker.ParseDocument(document: Document, parsingOptions: FSharpParsingOptions, userOpName: string) = + async { + let! ct = Async.CancellationToken + let! sourceText = document.GetTextAsync(ct) |> Async.AwaitTask + + return! checker.ParseFile(document.FilePath, sourceText.ToFSharpSourceText(), parsingOptions, userOpName=userOpName) + } + + /// Parse and check the source text from the Roslyn document with possible stale results. + member checker.ParseAndCheckDocumentWithPossibleStaleResults(document: Document, options: FSharpProjectOptions, allowStaleResults: bool, userOpName: string) = + async { + let! ct = Async.CancellationToken + + let! sourceText = document.GetTextAsync(ct) |> Async.AwaitTask + let! textVersion = document.GetTextVersionAsync(ct) |> Async.AwaitTask + + let filePath = document.FilePath + let textVersionHash = textVersion.GetHashCode() + + let parseAndCheckFile = + async { + let! (parseResults, checkFileAnswer) = checker.ParseAndCheckFileInProject(filePath, textVersionHash, sourceText.ToFSharpSourceText(), options, userOpName=userOpName) + return + match checkFileAnswer with + | FSharpCheckFileAnswer.Aborted -> + None + | FSharpCheckFileAnswer.Succeeded(checkFileResults) -> + Some (parseResults, checkFileResults) + } + + let tryGetFreshResultsWithTimeout() = + async { + let! worker = Async.StartChild(async { try return! parseAndCheckFile with | _ -> return None }, millisecondsTimeout=document.Project.FSharpTimeUntilStaleCompletion) + try + return! worker + with :? TimeoutException -> + return None // worker is cancelled at this point, we cannot return it and wait its completion anymore + } + + let bindParsedInput(results: (FSharpParseFileResults * FSharpCheckFileResults) option) = + match results with + | Some(parseResults, checkResults) -> + Some (parseResults, parseResults.ParseTree, checkResults) + | None -> None + + if allowStaleResults then + let! freshResults = tryGetFreshResultsWithTimeout() + + let! results = + match freshResults with + | Some x -> async.Return (Some x) + | None -> + async { + match checker.TryGetRecentCheckResultsForFile(filePath, options, userOpName=userOpName) with + | Some (parseResults, checkFileResults, _) -> + return Some (parseResults, checkFileResults) + | None -> + return! parseAndCheckFile + } + return bindParsedInput results + else + let! results = parseAndCheckFile + return bindParsedInput results + } + + /// Parse and check the source text from the Roslyn document. + member checker.ParseAndCheckDocument(document: Document, options: FSharpProjectOptions, userOpName: string, ?allowStaleResults: bool) = + async { + let allowStaleResults = + match allowStaleResults with + | Some b -> b + | _ -> document.Project.IsFSharpStaleCompletionResultsEnabled + return! checker.ParseAndCheckDocumentWithPossibleStaleResults(document, options, allowStaleResults, userOpName=userOpName) + } + +[] +module private ProjectCache = + + /// This is a cache to maintain FSharpParsingOptions and FSharpProjectOptions per Roslyn Project. + /// The Roslyn Project is held weakly meaning when it is cleaned up by the GC, the FSharParsingOptions and FSharpProjectOptions will be cleaned up by the GC. + /// At some point, this will be the main caching mechanism for FCS projects instead of FCS itself. + let Projects = ConditionalWeakTable() + +type Solution with + + /// Get the instance of IFSharpWorkspaceService. + member private this.GetFSharpWorkspaceService() = + this.Workspace.Services.GetRequiredService() + +type Document with + + /// Get the FSharpParsingOptions and FSharpProjectOptions from the F# project that is associated with the given F# document. + member this.GetFSharpCompilationOptionsAsync(userOpName) = + async { + if this.Project.IsFSharp then + match ProjectCache.Projects.TryGetValue(this.Project) with + | true, result -> return result + | _ -> + let service = this.Project.Solution.GetFSharpWorkspaceService() + let projectOptionsManager = service.FSharpProjectOptionsManager + let! ct = Async.CancellationToken + match! projectOptionsManager.TryGetOptionsForDocumentOrProject(this, ct, userOpName) with + | None -> return raise(System.OperationCanceledException("FSharp project options not found.")) + | Some(parsingOptions, _, projectOptions) -> + let result = (service.Checker, projectOptionsManager, parsingOptions, projectOptions) + return ProjectCache.Projects.GetValue(this.Project, Runtime.CompilerServices.ConditionalWeakTable<_,_>.CreateValueCallback(fun _ -> result)) + else + return raise(System.OperationCanceledException("Document is not a FSharp document.")) + } + + /// Get the compilation defines from F# project that is associated with the given F# document. + member this.GetFSharpCompilationDefinesAsync(userOpName) = + async { + let! _, _, parsingOptions, _ = this.GetFSharpCompilationOptionsAsync(userOpName) + return CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions + } + + /// Get the instance of the FSharpChecker from the workspace by the given F# document. + member this.GetFSharpChecker() = + let workspaceService = this.Project.Solution.GetFSharpWorkspaceService() + workspaceService.Checker + + /// A non-async call that quickly gets FSharpParsingOptions of the given F# document. + /// This tries to get the FSharpParsingOptions by looking at an internal cache; if it doesn't exist in the cache it will create an inaccurate but usable form of the FSharpParsingOptions. + member this.GetFSharpQuickParsingOptions() = + let workspaceService = this.Project.Solution.GetFSharpWorkspaceService() + workspaceService.FSharpProjectOptionsManager.TryGetQuickParsingOptionsForEditingDocumentOrProject(this) + + /// A non-async call that quickly gets the defines of the given F# document. + /// This tries to get the defines by looking at an internal cache; if it doesn't exist in the cache it will create an inaccurate but usable form of the defines. + member this.GetFSharpQuickDefines() = + let workspaceService = this.Project.Solution.GetFSharpWorkspaceService() + workspaceService.FSharpProjectOptionsManager.GetCompilationDefinesForEditingDocument(this) + + /// Parses the given F# document. + member this.GetFSharpParseResultsAsync(userOpName) = + async { + let! checker, _, parsingOptions, _ = this.GetFSharpCompilationOptionsAsync(userOpName) + return! checker.ParseDocument(this, parsingOptions, userOpName) + } + + /// Parses and checks the given F# document. + member this.GetFSharpParseAndCheckResultsAsync(userOpName) = + async { + let! checker, _, _, projectOptions = this.GetFSharpCompilationOptionsAsync(userOpName) + match! checker.ParseAndCheckDocument(this, projectOptions, userOpName, allowStaleResults = false) with + | Some(parseResults, _, checkResults) -> + return (parseResults, checkResults) + | _ -> + return raise(System.OperationCanceledException("Unable to get FSharp parse and check results.")) + } + + /// Get the semantic classifications of the given F# document. + member this.GetFSharpSemanticClassificationAsync(userOpName) = + async { + let! checker, _, _, projectOptions = this.GetFSharpCompilationOptionsAsync(userOpName) + match! checker.GetBackgroundSemanticClassificationForFile(this.FilePath, projectOptions) with + | Some results -> return results + | _ -> return raise(System.OperationCanceledException("Unable to get FSharp semantic classification.")) + } + + /// Find F# references in the given F# document. + member this.FindFSharpReferencesAsync(symbol, onFound, userOpName) = + async { + let! checker, _, _, projectOptions = this.GetFSharpCompilationOptionsAsync(userOpName) + let! symbolUses = checker.FindBackgroundReferencesInFile(this.FilePath, projectOptions, symbol, canInvalidateProject = false) + let! ct = Async.CancellationToken + let! sourceText = this.GetTextAsync ct |> Async.AwaitTask + for symbolUse in symbolUses do + match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse) with + | Some textSpan -> + do! onFound textSpan symbolUse + | _ -> + () + } + + /// Try to find a F# lexer/token symbol of the given F# document and position. + member this.TryFindFSharpLexerSymbolAsync(position, lookupKind, wholeActivePattern, allowStringToken, userOpName) = + async { + let! defines = this.GetFSharpCompilationDefinesAsync(userOpName) + let! ct = Async.CancellationToken + let! sourceText = this.GetTextAsync(ct) |> Async.AwaitTask + return Tokenizer.getSymbolAtPosition(this.Id, sourceText, position, this.FilePath, defines, lookupKind, wholeActivePattern, allowStringToken) + } + + /// This is only used for testing purposes. It sets the ProjectCache.Projects with the given FSharpProjectOptions and F# document's project. + member this.SetFSharpProjectOptionsForTesting(projectOptions: FSharpProjectOptions) = + let workspaceService = this.Project.Solution.GetFSharpWorkspaceService() + let parsingOptions, _, _ = + workspaceService.FSharpProjectOptionsManager.TryGetOptionsForDocumentOrProject(this, CancellationToken.None, nameof(this.SetFSharpProjectOptionsForTesting)) + |> Async.RunSynchronously + |> Option.get + ProjectCache.Projects.Add(this.Project, (workspaceService.Checker, workspaceService.FSharpProjectOptionsManager, parsingOptions, projectOptions)) + +type Project with + + /// Find F# references in the given project. + member this.FindFSharpReferencesAsync(symbol, onFound, userOpName) = + async { + for doc in this.Documents do + do! doc.FindFSharpReferencesAsync(symbol, (fun textSpan range -> onFound doc textSpan range), userOpName) + } diff --git a/vsintegration/src/FSharp.Editor/Navigation/FindUsagesService.fs b/vsintegration/src/FSharp.Editor/Navigation/FindUsagesService.fs index e60aa9f4db1..2819eb65d38 100644 --- a/vsintegration/src/FSharp.Editor/Navigation/FindUsagesService.fs +++ b/vsintegration/src/FSharp.Editor/Navigation/FindUsagesService.fs @@ -2,7 +2,6 @@ namespace Microsoft.VisualStudio.FSharp.Editor -open System.Threading open System.Collections.Immutable open System.Composition @@ -11,19 +10,17 @@ open Microsoft.CodeAnalysis.ExternalAccess.FSharp open Microsoft.CodeAnalysis.ExternalAccess.FSharp.FindUsages open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor.FindUsages -open FSharp.Compiler.Range -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Text open Microsoft.CodeAnalysis.Text [)>] type internal FSharpFindUsagesService [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = - - static let userOpName = "FindUsages" // File can be included in more than one project, hence single `range` may results with multiple `Document`s. let rangeToDocumentSpans (solution: Solution, range: range) = @@ -47,24 +44,21 @@ type internal FSharpFindUsagesService return spans |> Array.choose id |> Array.toList } - let findReferencedSymbolsAsync(document: Document, position: int, context: IFSharpFindUsagesContext, allReferences: bool, userOpName: string) : Async = + let findReferencedSymbolsAsync(document: Document, position: int, context: IFSharpFindUsagesContext, allReferences: bool) : Async = asyncMaybe { let! sourceText = document.GetTextAsync(context.CancellationToken) |> Async.AwaitTask |> liftAsync - let checker = checkerProvider.Checker - let! parsingOptions, _, projectOptions = projectInfoManager.TryGetOptionsForDocumentOrProject(document, context.CancellationToken, userOpName) - let! _, _, checkFileResults = checker.ParseAndCheckDocument(document, projectOptions, sourceText = sourceText, userOpName = userOpName) let textLine = sourceText.Lines.GetLineFromPosition(position).ToString() let lineNumber = sourceText.Lines.GetLinePosition(position).Line + 1 - let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions + let! symbol = document.TryFindFSharpLexerSymbolAsync(position, SymbolLookupKind.Greedy, false, false, "findReferencedSymbolsAsync") - let! symbol = Tokenizer.getSymbolAtPosition(document.Id, sourceText, position, document.FilePath, defines, SymbolLookupKind.Greedy, false, false) + let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpFindUsagesService)) |> liftAsync let! symbolUse = checkFileResults.GetSymbolUseAtLocation(lineNumber, symbol.Ident.idRange.EndColumn, textLine, symbol.FullIsland) let declaration = checkFileResults.GetDeclarationLocation (lineNumber, symbol.Ident.idRange.EndColumn, textLine, symbol.FullIsland, false) let tags = FSharpGlyphTags.GetTags(Tokenizer.GetGlyphForSymbol (symbolUse.Symbol, symbol.Kind)) let declarationRange = match declaration with - | FSharpFindDeclResult.DeclFound range -> Some range + | FindDeclResult.DeclFound range -> Some range | _ -> None let! declarationSpans = async { @@ -73,8 +67,8 @@ type internal FSharpFindUsagesService | None -> return! async.Return [] } |> liftAsync let isExternal = declarationSpans |> List.isEmpty - let displayParts = ImmutableArray.Create(TaggedText(TextTags.Text, symbol.Ident.idText)) - let originationParts = ImmutableArray.Create(TaggedText(TextTags.Assembly, symbolUse.Symbol.Assembly.SimpleName)) + let displayParts = ImmutableArray.Create(Microsoft.CodeAnalysis.TaggedText(TextTags.Text, symbol.Ident.idText)) + let originationParts = ImmutableArray.Create(Microsoft.CodeAnalysis.TaggedText(TextTags.Assembly, symbolUse.Symbol.Assembly.SimpleName)) let externalDefinitionItem = FSharpDefinitionItem.CreateNonNavigableItem(tags, displayParts, originationParts) let definitionItems = declarationSpans @@ -90,7 +84,7 @@ type internal FSharpFindUsagesService fun (doc: Document) (textSpan: TextSpan) (symbolUse: range) -> async { match declarationRange with - | Some declRange when FSharp.Compiler.Range.equals declRange symbolUse -> () + | Some declRange when Range.equals declRange symbolUse -> () | _ -> if allReferences then let definitionItem = @@ -110,9 +104,9 @@ type internal FSharpFindUsagesService | Some SymbolDeclarationLocation.CurrentDocument -> let symbolUses = checkFileResults.GetUsesOfSymbolInFile(symbolUse.Symbol) for symbolUse in symbolUses do - match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.RangeAlternate) with + match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.Range) with | Some textSpan -> - do! onFound document textSpan symbolUse.RangeAlternate |> liftAsync + do! onFound document textSpan symbolUse.Range |> liftAsync | _ -> () | scope -> @@ -128,15 +122,15 @@ type internal FSharpFindUsagesService // In order to find all its usages we have to check all F# projects. | _ -> Seq.toList document.Project.Solution.Projects - let! _ = SymbolHelpers.getSymbolUsesInProjects (symbolUse.Symbol, projectInfoManager, checker, projectsToCheck, onFound, userOpName) |> liftAsync + let! _ = SymbolHelpers.getSymbolUsesInProjects (symbolUse.Symbol, projectsToCheck, onFound) |> liftAsync () } |> Async.Ignore interface IFSharpFindUsagesService with - member __.FindReferencesAsync(document, position, context) = - findReferencedSymbolsAsync(document, position, context, true, userOpName) + member _.FindReferencesAsync(document, position, context) = + findReferencedSymbolsAsync(document, position, context, true) |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) - member __.FindImplementationsAsync(document, position, context) = - findReferencedSymbolsAsync(document, position, context, false, userOpName) + member _.FindImplementationsAsync(document, position, context) = + findReferencedSymbolsAsync(document, position, context, false) |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/Navigation/GoToDefinition.fs b/vsintegration/src/FSharp.Editor/Navigation/GoToDefinition.fs index 7de8934fed6..90474acfd3c 100644 --- a/vsintegration/src/FSharp.Editor/Navigation/GoToDefinition.fs +++ b/vsintegration/src/FSharp.Editor/Navigation/GoToDefinition.fs @@ -8,18 +8,21 @@ open System.Collections.Immutable open System.Diagnostics open System.IO open System.Linq -open System.Runtime.InteropServices open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.FindSymbols open Microsoft.CodeAnalysis.Text -open Microsoft.CodeAnalysis.Navigation open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Navigation +open Microsoft.VisualStudio open Microsoft.VisualStudio.Shell.Interop -open FSharp.Compiler.Range -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Text +open FSharp.Compiler.Symbols + module private Symbol = let fullName (root: ISymbol) : string = @@ -37,42 +40,40 @@ module private Symbol = inner [] root |> String.concat "." -module private ExternalType = - let rec tryOfRoslynType (typesym: ITypeSymbol): ExternalType option = +module private FindDeclExternalType = + let rec tryOfRoslynType (typesym: ITypeSymbol): FindDeclExternalType option = match typesym with | :? IPointerTypeSymbol as ptrparam -> - tryOfRoslynType ptrparam.PointedAtType |> Option.map ExternalType.Pointer + tryOfRoslynType ptrparam.PointedAtType |> Option.map FindDeclExternalType.Pointer | :? IArrayTypeSymbol as arrparam -> - tryOfRoslynType arrparam.ElementType |> Option.map ExternalType.Array + tryOfRoslynType arrparam.ElementType |> Option.map FindDeclExternalType.Array | :? ITypeParameterSymbol as typaram -> - Some (ExternalType.TypeVar typaram.Name) + Some (FindDeclExternalType.TypeVar typaram.Name) | :? INamedTypeSymbol as namedTypeSym -> namedTypeSym.TypeArguments |> Seq.map tryOfRoslynType |> List.ofSeq |> Option.ofOptionList |> Option.map (fun genericArgs -> - ExternalType.Type (Symbol.fullName typesym, genericArgs)) + FindDeclExternalType.Type (Symbol.fullName typesym, genericArgs)) | _ -> Debug.Assert(false, sprintf "GoToDefinitionService: Unexpected Roslyn type symbol subclass: %O" (typesym.GetType())) None -module private ParamTypeSymbol = +module private FindDeclExternalParam = - let tryOfRoslynParameter (param: IParameterSymbol): ParamTypeSymbol option = - ExternalType.tryOfRoslynType param.Type - |> Option.map ( - if param.RefKind = RefKind.None then ParamTypeSymbol.Param - else ParamTypeSymbol.Byref) + let tryOfRoslynParameter (param: IParameterSymbol): FindDeclExternalParam option = + FindDeclExternalType.tryOfRoslynType param.Type + |> Option.map (fun ty -> FindDeclExternalParam.Create(ty, param.RefKind <> RefKind.None)) - let tryOfRoslynParameters (paramSyms: ImmutableArray): ParamTypeSymbol list option = + let tryOfRoslynParameters (paramSyms: ImmutableArray): FindDeclExternalParam list option = paramSyms |> Seq.map tryOfRoslynParameter |> Seq.toList |> Option.ofOptionList module private ExternalSymbol = - let rec ofRoslynSymbol (symbol: ISymbol) : (ISymbol * ExternalSymbol) list = + let rec ofRoslynSymbol (symbol: ISymbol) : (ISymbol * FindDeclExternalSymbol) list = let container = Symbol.fullName symbol.ContainingSymbol match symbol with @@ -81,28 +82,28 @@ module private ExternalSymbol = let constructors = typesym.InstanceConstructors - |> Seq.choose<_,ISymbol * ExternalSymbol> (fun methsym -> - ParamTypeSymbol.tryOfRoslynParameters methsym.Parameters - |> Option.map (fun args -> upcast methsym, ExternalSymbol.Constructor(fullTypeName, args)) + |> Seq.choose<_,ISymbol * FindDeclExternalSymbol> (fun methsym -> + FindDeclExternalParam.tryOfRoslynParameters methsym.Parameters + |> Option.map (fun args -> upcast methsym, FindDeclExternalSymbol.Constructor(fullTypeName, args)) ) |> List.ofSeq - (symbol, ExternalSymbol.Type fullTypeName) :: constructors + (symbol, FindDeclExternalSymbol.Type fullTypeName) :: constructors | :? IMethodSymbol as methsym -> - ParamTypeSymbol.tryOfRoslynParameters methsym.Parameters + FindDeclExternalParam.tryOfRoslynParameters methsym.Parameters |> Option.map (fun args -> - symbol, ExternalSymbol.Method(container, methsym.MetadataName, args, methsym.TypeParameters.Length)) + symbol, FindDeclExternalSymbol.Method(container, methsym.MetadataName, args, methsym.TypeParameters.Length)) |> Option.toList | :? IPropertySymbol as propsym -> - [upcast propsym, ExternalSymbol.Property(container, propsym.MetadataName)] + [upcast propsym, FindDeclExternalSymbol.Property(container, propsym.MetadataName)] | :? IFieldSymbol as fieldsym -> - [upcast fieldsym, ExternalSymbol.Field(container, fieldsym.MetadataName)] + [upcast fieldsym, FindDeclExternalSymbol.Field(container, fieldsym.MetadataName)] | :? IEventSymbol as eventsym -> - [upcast eventsym, ExternalSymbol.Event(container, eventsym.MetadataName)] + [upcast eventsym, FindDeclExternalSymbol.Event(container, eventsym.MetadataName)] | _ -> [] @@ -115,7 +116,7 @@ type internal StatusBar(statusBar: IVsStatusbar) = statusBar.FreezeOutput 0 |> ignore statusBar.Clear() |> ignore - member __.Message(_msg: string) = + member _.Message(_msg: string) = () //let _, frozen = statusBar.IsFrozen() //// unfreeze the status bar @@ -134,19 +135,23 @@ type internal StatusBar(statusBar: IVsStatusbar) = // | _ -> clear() //}|> Async.Start - member __.Clear() = () //clear() + member _.Clear() = () //clear() /// Animated magnifying glass that displays on the status bar while a symbol search is in progress. - member __.Animate() : IDisposable = + member _.Animate() : IDisposable = //statusBar.Animation (1, &searchIcon) |> ignore { new IDisposable with - member __.Dispose() = () } //statusBar.Animation(0, &searchIcon) |> ignore } + member _.Dispose() = () } //statusBar.Animation(0, &searchIcon) |> ignore } type internal FSharpGoToDefinitionNavigableItem(document, sourceSpan) = inherit FSharpNavigableItem(Glyph.BasicFile, ImmutableArray.Empty, document, sourceSpan) -type internal GoToDefinition(checker: FSharpChecker, projectInfoManager: FSharpProjectOptionsManager) = - let userOpName = "GoToDefinition" +[] +type internal FSharpGoToDefinitionResult = + | NavigableItem of FSharpNavigableItem + | ExternalAssembly of FSharpSymbolUse * MetadataReference seq + +type internal GoToDefinition(metadataAsSource: FSharpMetadataAsSourceService) = /// Use an origin document to provide the solution & workspace used to /// find the corresponding textSpan and INavigableItem for the range @@ -166,20 +171,18 @@ type internal GoToDefinition(checker: FSharpChecker, projectInfoManager: FSharpP } /// Helper function that is used to determine the navigation strategy to apply, can be tuned towards signatures or implementation files. - member private __.FindSymbolHelper (originDocument: Document, originRange: range, sourceText: SourceText, preferSignature: bool) = + member private _.FindSymbolHelper (originDocument: Document, originRange: range, sourceText: SourceText, preferSignature: bool) = asyncMaybe { - let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(originDocument, CancellationToken.None, userOpName) - let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions + let userOpName = "FindSymbolHelper" let! originTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (sourceText, originRange) let position = originTextSpan.Start - let! lexerSymbol = Tokenizer.getSymbolAtPosition (originDocument.Id, sourceText, position, originDocument.FilePath, defines, SymbolLookupKind.Greedy, false, false) - + let! lexerSymbol = originDocument.TryFindFSharpLexerSymbolAsync(position, SymbolLookupKind.Greedy, false, false, userOpName) let textLinePos = sourceText.Lines.GetLinePosition position let fcsTextLineNumber = Line.fromZ textLinePos.Line let lineText = (sourceText.Lines.GetLineFromPosition position).ToString() - - let! _, _, checkFileResults = checker.ParseAndCheckDocument (originDocument, projectOptions, sourceText=sourceText, userOpName=userOpName) let idRange = lexerSymbol.Ident.idRange + + let! _, checkFileResults = originDocument.GetFSharpParseAndCheckResultsAsync(nameof(GoToDefinition)) |> liftAsync let! fsSymbolUse = checkFileResults.GetSymbolUseAtLocation (fcsTextLineNumber, idRange.EndColumn, lineText, lexerSymbol.FullIsland) let symbol = fsSymbolUse.Symbol // if the tooltip was spawned in an implementation file and we have a range targeting @@ -190,130 +193,132 @@ type internal GoToDefinition(checker: FSharpChecker, projectInfoManager: FSharpP if not (File.Exists fsfilePath) then return! None else let! implDoc = originDocument.Project.Solution.TryGetDocumentFromPath fsfilePath let! implSourceText = implDoc.GetTextAsync () - let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(implDoc, CancellationToken.None, userOpName) - let! _, _, checkFileResults = checker.ParseAndCheckDocument (implDoc, projectOptions, sourceText=implSourceText, userOpName=userOpName) + let! _, checkFileResults = implDoc.GetFSharpParseAndCheckResultsAsync(userOpName) |> liftAsync let symbolUses = checkFileResults.GetUsesOfSymbolInFile symbol let! implSymbol = symbolUses |> Array.tryHead - let! implTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (implSourceText, implSymbol.RangeAlternate) + let! implTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (implSourceText, implSymbol.Range) return FSharpGoToDefinitionNavigableItem (implDoc, implTextSpan) else - let! targetDocument = originDocument.Project.Solution.TryGetDocumentFromFSharpRange fsSymbolUse.RangeAlternate - return! rangeToNavigableItem (fsSymbolUse.RangeAlternate, targetDocument) + let! targetDocument = originDocument.Project.Solution.TryGetDocumentFromFSharpRange fsSymbolUse.Range + return! rangeToNavigableItem (fsSymbolUse.Range, targetDocument) } /// if the symbol is defined in the given file, return its declaration location, otherwise use the targetSymbol to find the first /// instance of its presence in the provided source file. The first case is needed to return proper declaration location for /// recursive type definitions, where the first its usage may not be the declaration. - member __.FindSymbolDeclarationInFile(targetSymbolUse: FSharpSymbolUse, filePath: string, sourceText: SourceText, options: FSharpProjectOptions, fileVersion:int) = + member _.FindSymbolDeclarationInDocument(targetSymbolUse: FSharpSymbolUse, document: Document) = asyncMaybe { + let filePath = document.FilePath match targetSymbolUse.Symbol.DeclarationLocation with | Some decl when decl.FileName = filePath -> return decl | _ -> - let! _, checkFileAnswer = checker.ParseAndCheckFileInProject (filePath, fileVersion, sourceText.ToFSharpSourceText(), options, userOpName = userOpName) |> liftAsync - match checkFileAnswer with - | FSharpCheckFileAnswer.Aborted -> return! None - | FSharpCheckFileAnswer.Succeeded checkFileResults -> - let symbolUses = checkFileResults.GetUsesOfSymbolInFile targetSymbolUse.Symbol - let! implSymbol = symbolUses |> Array.tryHead - return implSymbol.RangeAlternate + let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync("FindSymbolDeclarationInDocument") |> liftAsync + let symbolUses = checkFileResults.GetUsesOfSymbolInFile targetSymbolUse.Symbol + let! implSymbol = symbolUses |> Array.tryHead + return implSymbol.Range } - member private this.FindDefinitionAtPosition(originDocument: Document, position: int) = + member private this.FindDefinitionAtPosition(originDocument: Document, position: int, cancellationToken: CancellationToken) = asyncMaybe { - let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(originDocument, CancellationToken.None, userOpName) - let! sourceText = originDocument.GetTextAsync () |> liftTaskAsync - let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions + let userOpName = "FindDefinitionAtPosition" + let! sourceText = originDocument.GetTextAsync(cancellationToken) let textLine = sourceText.Lines.GetLineFromPosition position let textLinePos = sourceText.Lines.GetLinePosition position + let textLineString = textLine.ToString() let fcsTextLineNumber = Line.fromZ textLinePos.Line let lineText = (sourceText.Lines.GetLineFromPosition position).ToString() let preferSignature = isSignatureFile originDocument.FilePath - - let! _, _, checkFileResults = checker.ParseAndCheckDocument (originDocument, projectOptions, sourceText=sourceText, userOpName=userOpName) - let! lexerSymbol = Tokenizer.getSymbolAtPosition (originDocument.Id, sourceText, position,originDocument.FilePath, defines, SymbolLookupKind.Greedy, false, false) + let! lexerSymbol = originDocument.TryFindFSharpLexerSymbolAsync(position, SymbolLookupKind.Greedy, false, false, userOpName) let idRange = lexerSymbol.Ident.idRange - let declarations = checkFileResults.GetDeclarationLocation (fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLine.ToString(), lexerSymbol.FullIsland, preferSignature) + let! _, checkFileResults = originDocument.GetFSharpParseAndCheckResultsAsync(userOpName) |> liftAsync + let declarations = checkFileResults.GetDeclarationLocation (fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLineString, lexerSymbol.FullIsland, preferSignature) let! targetSymbolUse = checkFileResults.GetSymbolUseAtLocation (fcsTextLineNumber, idRange.EndColumn, lineText, lexerSymbol.FullIsland) match declarations with - | FSharpFindDeclResult.ExternalDecl (assembly, targetExternalSym) -> - let! project = originDocument.Project.Solution.Projects |> Seq.tryFind (fun p -> p.AssemblyName.Equals(assembly, StringComparison.OrdinalIgnoreCase)) - let! symbols = SymbolFinder.FindSourceDeclarationsAsync(project, fun _ -> true) - - let roslynSymbols = - symbols - |> Seq.collect ExternalSymbol.ofRoslynSymbol - |> Array.ofSeq - - let! symbol = - roslynSymbols - |> Seq.tryPick (fun (sym, externalSym) -> - if externalSym = targetExternalSym then Some sym - else None - ) - - let! location = symbol.Locations |> Seq.tryHead - return (FSharpGoToDefinitionNavigableItem(project.GetDocument(location.SourceTree), location.SourceSpan), idRange) - - | FSharpFindDeclResult.DeclFound targetRange -> - // if goto definition is called at we are alread at the declaration location of a symbol in - // either a signature or an implementation file then we jump to it's respective postion in thethe - if lexerSymbol.Range = targetRange then - // jump from signature to the corresponding implementation - if isSignatureFile originDocument.FilePath then - let implFilePath = Path.ChangeExtension (originDocument.FilePath,"fs") - if not (File.Exists implFilePath) then return! None else - let! implDocument = originDocument.Project.Solution.TryGetDocumentFromPath implFilePath - let! implSourceText = implDocument.GetTextAsync () |> liftTaskAsync - let! implVersion = implDocument.GetTextVersionAsync () |> liftTaskAsync + | FindDeclResult.ExternalDecl (assembly, targetExternalSym) -> + let projectOpt = originDocument.Project.Solution.Projects |> Seq.tryFind (fun p -> p.AssemblyName.Equals(assembly, StringComparison.OrdinalIgnoreCase)) + match projectOpt with + | Some project -> + let! symbols = SymbolFinder.FindSourceDeclarationsAsync(project, fun _ -> true) + + let roslynSymbols = + symbols + |> Seq.collect ExternalSymbol.ofRoslynSymbol + |> Array.ofSeq + + let! symbol = + roslynSymbols + |> Seq.tryPick (fun (sym, externalSym) -> + if externalSym = targetExternalSym then Some sym + else None + ) + + let! location = symbol.Locations |> Seq.tryHead + return (FSharpGoToDefinitionResult.NavigableItem(FSharpGoToDefinitionNavigableItem(project.GetDocument(location.SourceTree), location.SourceSpan)), idRange) + | _ -> + let metadataReferences = originDocument.Project.MetadataReferences + return (FSharpGoToDefinitionResult.ExternalAssembly(targetSymbolUse, metadataReferences), idRange) + + | FindDeclResult.DeclFound targetRange -> + // If the file is not associated with a document, it's considered external. + if not (originDocument.Project.Solution.ContainsDocumentWithFilePath(targetRange.FileName)) then + let metadataReferences = originDocument.Project.MetadataReferences + return (FSharpGoToDefinitionResult.ExternalAssembly(targetSymbolUse, metadataReferences), idRange) + else + // if goto definition is called at we are alread at the declaration location of a symbol in + // either a signature or an implementation file then we jump to it's respective postion in thethe + if lexerSymbol.Range = targetRange then + // jump from signature to the corresponding implementation + if isSignatureFile originDocument.FilePath then + let implFilePath = Path.ChangeExtension (originDocument.FilePath,"fs") + if not (File.Exists implFilePath) then return! None else + let! implDocument = originDocument.Project.Solution.TryGetDocumentFromPath implFilePath - let! targetRange = this.FindSymbolDeclarationInFile(targetSymbolUse, implFilePath, implSourceText, projectOptions, implVersion.GetHashCode()) - - let! implTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (implSourceText, targetRange) - let navItem = FSharpGoToDefinitionNavigableItem (implDocument, implTextSpan) - return (navItem, idRange) - else // jump from implementation to the corresponding signature - let declarations = checkFileResults.GetDeclarationLocation (fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLine.ToString(), lexerSymbol.FullIsland, true) - match declarations with - | FSharpFindDeclResult.DeclFound targetRange -> - let! sigDocument = originDocument.Project.Solution.TryGetDocumentFromPath targetRange.FileName - let! sigSourceText = sigDocument.GetTextAsync () |> liftTaskAsync - let! sigTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (sigSourceText, targetRange) + let! targetRange = this.FindSymbolDeclarationInDocument(targetSymbolUse, implDocument) + let! implSourceText = implDocument.GetTextAsync(cancellationToken) |> liftTaskAsync + let! implTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (implSourceText, targetRange) + let navItem = FSharpGoToDefinitionNavigableItem (implDocument, implTextSpan) + return (FSharpGoToDefinitionResult.NavigableItem(navItem), idRange) + else // jump from implementation to the corresponding signature + let declarations = checkFileResults.GetDeclarationLocation (fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLineString, lexerSymbol.FullIsland, true) + match declarations with + | FindDeclResult.DeclFound targetRange -> + let! sigDocument = originDocument.Project.Solution.TryGetDocumentFromPath targetRange.FileName + let! sigSourceText = sigDocument.GetTextAsync(cancellationToken) |> liftTaskAsync + let! sigTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (sigSourceText, targetRange) + let navItem = FSharpGoToDefinitionNavigableItem (sigDocument, sigTextSpan) + return (FSharpGoToDefinitionResult.NavigableItem(navItem), idRange) + | _ -> + return! None + // when the target range is different follow the navigation convention of + // - gotoDefn origin = signature , gotoDefn destination = signature + // - gotoDefn origin = implementation, gotoDefn destination = implementation + else + let! sigDocument = originDocument.Project.Solution.TryGetDocumentFromPath targetRange.FileName + let! sigSourceText = sigDocument.GetTextAsync(cancellationToken) |> liftTaskAsync + let! sigTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (sigSourceText, targetRange) + // if the gotodef call originated from a signature and the returned target is a signature, navigate there + if isSignatureFile targetRange.FileName && preferSignature then let navItem = FSharpGoToDefinitionNavigableItem (sigDocument, sigTextSpan) - return (navItem, idRange) - | _ -> - return! None - // when the target range is different follow the navigation convention of - // - gotoDefn origin = signature , gotoDefn destination = signature - // - gotoDefn origin = implementation, gotoDefn destination = implementation - else - let! sigDocument = originDocument.Project.Solution.TryGetDocumentFromPath targetRange.FileName - let! sigSourceText = sigDocument.GetTextAsync () |> liftTaskAsync - let! sigTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (sigSourceText, targetRange) - // if the gotodef call originated from a signature and the returned target is a signature, navigate there - if isSignatureFile targetRange.FileName && preferSignature then - let navItem = FSharpGoToDefinitionNavigableItem (sigDocument, sigTextSpan) - return (navItem, idRange) - else // we need to get an FSharpSymbol from the targetRange found in the signature - // that symbol will be used to find the destination in the corresponding implementation file - let implFilePath = - // Bugfix: apparently sigDocument not always is a signature file - if isSignatureFile sigDocument.FilePath then Path.ChangeExtension (sigDocument.FilePath, "fs") - else sigDocument.FilePath - - let! implDocument = originDocument.Project.Solution.TryGetDocumentFromPath implFilePath - let! implVersion = implDocument.GetTextVersionAsync () |> liftTaskAsync - let! implSourceText = implDocument.GetTextAsync () |> liftTaskAsync - let! _parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(implDocument, CancellationToken.None, userOpName) + return (FSharpGoToDefinitionResult.NavigableItem(navItem), idRange) + else // we need to get an FSharpSymbol from the targetRange found in the signature + // that symbol will be used to find the destination in the corresponding implementation file + let implFilePath = + // Bugfix: apparently sigDocument not always is a signature file + if isSignatureFile sigDocument.FilePath then Path.ChangeExtension (sigDocument.FilePath, "fs") + else sigDocument.FilePath + + let! implDocument = originDocument.Project.Solution.TryGetDocumentFromPath implFilePath - let! targetRange = this.FindSymbolDeclarationInFile(targetSymbolUse, implFilePath, implSourceText, projectOptions, implVersion.GetHashCode()) + let! targetRange = this.FindSymbolDeclarationInDocument(targetSymbolUse, implDocument) - let! implTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (implSourceText, targetRange) - let navItem = FSharpGoToDefinitionNavigableItem (implDocument, implTextSpan) - return (navItem, idRange) + let! implSourceText = implDocument.GetTextAsync () |> liftTaskAsync + let! implTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (implSourceText, targetRange) + let navItem = FSharpGoToDefinitionNavigableItem (implDocument, implTextSpan) + return (FSharpGoToDefinitionResult.NavigableItem(navItem), idRange) | _ -> return! None } @@ -327,22 +332,21 @@ type internal GoToDefinition(checker: FSharpChecker, projectInfoManager: FSharpP this.FindSymbolHelper(targetDocument, symbolRange, targetSourceText, preferSignature=false) member this.FindDefinitionsForPeekTask(originDocument: Document, position: int, cancellationToken: CancellationToken) = - this.FindDefinitionAtPosition(originDocument, position) + this.FindDefinitionAtPosition(originDocument, position, cancellationToken) |> Async.map ( - Option.map (fun (navItem, _) -> navItem :> FSharpNavigableItem) - >> Option.toArray + Option.toArray >> Array.toSeq) |> RoslynHelpers.StartAsyncAsTask cancellationToken /// Construct a task that will return a navigation target for the implementation definition of the symbol /// at the provided position in the document. member this.FindDefinitionTask(originDocument: Document, position: int, cancellationToken: CancellationToken) = - this.FindDefinitionAtPosition(originDocument, position) + this.FindDefinitionAtPosition(originDocument, position, cancellationToken) |> RoslynHelpers.StartAsyncAsTask cancellationToken /// Navigate to the positon of the textSpan in the provided document /// used by quickinfo link navigation when the tooltip contains the correct destination range. - member __.TryNavigateToTextSpan(document: Document, textSpan: TextSpan, statusBar: StatusBar) = + member _.TryNavigateToTextSpan(document: Document, textSpan: Microsoft.CodeAnalysis.Text.TextSpan, statusBar: StatusBar) = let navigableItem = FSharpGoToDefinitionNavigableItem(document, textSpan) let workspace = document.Project.Solution.Workspace let navigationService = workspace.Services.GetService() @@ -352,7 +356,7 @@ type internal GoToDefinition(checker: FSharpChecker, projectInfoManager: FSharpP if not navigationSucceeded then statusBar.TempMessage (SR.CannotNavigateUnknown()) - member __.NavigateToItem(navigableItem: FSharpNavigableItem, statusBar: StatusBar) = + member _.NavigateToItem(navigableItem: FSharpNavigableItem, statusBar: StatusBar) = use __ = statusBar.Animate() statusBar.Message (SR.NavigatingTo()) @@ -382,3 +386,106 @@ type internal GoToDefinition(checker: FSharpChecker, projectInfoManager: FSharpP let! item = this.FindDefinitionOfSymbolAtRange(targetDocument, symbolRange, targetSourceText) return this.NavigateToItem(item, statusBar) } + + member this.NavigateToExternalDeclaration(targetSymbolUse: FSharpSymbolUse, metadataReferences: seq, cancellationToken: CancellationToken, statusBar: StatusBar) = + use __ = statusBar.Animate() + statusBar.Message (SR.NavigatingTo()) + + let textOpt = + match targetSymbolUse.Symbol with + | :? FSharpEntity as symbol -> + symbol.TryGetMetadataText() + |> Option.map (fun text -> text, symbol.DisplayName) + | :? FSharpMemberOrFunctionOrValue as symbol -> + symbol.ApparentEnclosingEntity.TryGetMetadataText() + |> Option.map (fun text -> text, symbol.ApparentEnclosingEntity.DisplayName) + | _ -> + None + + let result = + match textOpt with + | Some (text, fileName) -> + let tmpProjInfo, tmpDocInfo = + MetadataAsSource.generateTemporaryDocument( + AssemblyIdentity(targetSymbolUse.Symbol.Assembly.QualifiedName), + fileName, + metadataReferences) + let tmpShownDocOpt = metadataAsSource.ShowDocument(tmpProjInfo, tmpDocInfo.FilePath, SourceText.From(text.ToString())) + match tmpShownDocOpt with + | Some tmpShownDoc -> + let goToAsync = + asyncMaybe { + let! _, checkResults = tmpShownDoc.GetFSharpParseAndCheckResultsAsync("NavigateToExternalDeclaration") |> liftAsync + let! r = + let rec areTypesEqual (ty1: FSharpType) (ty2: FSharpType) = + let ty1 = ty1.StripAbbreviations() + let ty2 = ty2.StripAbbreviations() + let generic = + ty1.IsGenericParameter && ty2.IsGenericParameter || + ( + ty1.GenericArguments.Count = ty2.GenericArguments.Count && + (ty1.GenericArguments, ty2.GenericArguments) + ||> Seq.forall2 areTypesEqual + ) + if generic then + true + else + let namesEqual = ty1.TypeDefinition.DisplayName = ty2.TypeDefinition.DisplayName + let accessPathsEqual = ty1.TypeDefinition.AccessPath = ty2.TypeDefinition.AccessPath + namesEqual && accessPathsEqual + + // This tries to find the best possible location of the target symbol's location in the metadata source. + // We really should rely on symbol equality within FCS instead of doing it here, + // but the generated metadata as source isn't perfect for symbol equality. + checkResults.GetAllUsesOfAllSymbolsInFile(cancellationToken) + |> Seq.tryFind (fun x -> + match x.Symbol, targetSymbolUse.Symbol with + | (:? FSharpEntity as symbol1), (:? FSharpEntity as symbol2) when x.IsFromDefinition -> + symbol1.DisplayName = symbol2.DisplayName + | (:? FSharpMemberOrFunctionOrValue as symbol1), (:? FSharpMemberOrFunctionOrValue as symbol2) -> + symbol1.DisplayName = symbol2.DisplayName && + symbol1.GenericParameters.Count = symbol2.GenericParameters.Count && + symbol1.CurriedParameterGroups.Count = symbol2.CurriedParameterGroups.Count && + ( + (symbol1.CurriedParameterGroups, symbol2.CurriedParameterGroups) + ||> Seq.forall2 (fun pg1 pg2 -> + pg1.Count = pg2.Count && + ( + (pg1, pg2) + ||> Seq.forall2 (fun p1 p2 -> + areTypesEqual p1.Type p2.Type + ) + ) + ) + ) && + areTypesEqual symbol1.ReturnParameter.Type symbol2.ReturnParameter.Type + | _ -> + false + ) + |> Option.map (fun x -> x.Range) + + let span = + match RoslynHelpers.TryFSharpRangeToTextSpan(tmpShownDoc.GetTextAsync(cancellationToken).Result, r) with + | Some span -> span + | _ -> TextSpan() + + return span + } + + let span = + match Async.RunSynchronously(goToAsync, cancellationToken = cancellationToken) with + | Some span -> span + | _ -> TextSpan() + + let navItem = FSharpGoToDefinitionNavigableItem(tmpShownDoc, span) + this.NavigateToItem(navItem, statusBar) + true + | _ -> + false + | _ -> + false + + if result then + statusBar.Clear() + else + statusBar.TempMessage (SR.CannotNavigateUnknown()) \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/Navigation/GoToDefinitionService.fs b/vsintegration/src/FSharp.Editor/Navigation/GoToDefinitionService.fs index 1a5b1e611ec..6ed309bf573 100644 --- a/vsintegration/src/FSharp.Editor/Navigation/GoToDefinitionService.fs +++ b/vsintegration/src/FSharp.Editor/Navigation/GoToDefinitionService.fs @@ -2,39 +2,45 @@ namespace Microsoft.VisualStudio.FSharp.Editor +open System open System.Composition open System.Threading open System.Threading.Tasks open Microsoft.CodeAnalysis -open Microsoft.CodeAnalysis.Editor -open Microsoft.CodeAnalysis.Host.Mef open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor open Microsoft.VisualStudio.Shell open Microsoft.VisualStudio.Shell.Interop -open System [)>] [)>] type internal FSharpGoToDefinitionService [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager + metadataAsSource: FSharpMetadataAsSourceService ) = - let gtd = GoToDefinition(checkerProvider.Checker, projectInfoManager) - let statusBar = StatusBar(ServiceProvider.GlobalProvider.GetService()) + let gtd = GoToDefinition(metadataAsSource) + let statusBar = StatusBar(ServiceProvider.GlobalProvider.GetService()) interface IFSharpGoToDefinitionService with /// Invoked with Peek Definition. - member __.FindDefinitionsAsync (document: Document, position: int, cancellationToken: CancellationToken) = - gtd.FindDefinitionsForPeekTask(document, position, cancellationToken) + member _.FindDefinitionsAsync (document: Document, position: int, cancellationToken: CancellationToken) = + let task = gtd.FindDefinitionsForPeekTask(document, position, cancellationToken) + task.Wait(cancellationToken) + let results = task.Result + results + |> Seq.choose(fun (result, _) -> + match result with + | FSharpGoToDefinitionResult.NavigableItem(navItem) -> Some navItem + | _ -> None + ) + |> Task.FromResult /// Invoked with Go to Definition. /// Try to navigate to the definiton of the symbol at the symbolRange in the originDocument - member __.TryGoToDefinition(document: Document, position: int, cancellationToken: CancellationToken) = + member _.TryGoToDefinition(document: Document, position: int, cancellationToken: CancellationToken) = statusBar.Message(SR.LocatingSymbol()) use __ = statusBar.Animate() @@ -44,13 +50,18 @@ type internal FSharpGoToDefinitionService // Task.Wait throws an exception if the task is cancelled, so be sure to catch it. try // This call to Wait() is fine because we want to be able to provide the error message in the status bar. - gtdTask.Wait() + gtdTask.Wait(cancellationToken) if gtdTask.Status = TaskStatus.RanToCompletion && gtdTask.Result.IsSome then - let item, _ = gtdTask.Result.Value - gtd.NavigateToItem(item, statusBar) - - // 'true' means do it, like Sheev Palpatine would want us to. - true + let result, _ = gtdTask.Result.Value + match result with + | FSharpGoToDefinitionResult.NavigableItem(navItem) -> + gtd.NavigateToItem(navItem, statusBar) + // 'true' means do it, like Sheev Palpatine would want us to. + true + | FSharpGoToDefinitionResult.ExternalAssembly(targetSymbolUse, metadataReferences) -> + gtd.NavigateToExternalDeclaration(targetSymbolUse, metadataReferences, cancellationToken, statusBar) + // 'true' means do it, like Sheev Palpatine would want us to. + true else statusBar.TempMessage (SR.CannotDetermineSymbol()) false diff --git a/vsintegration/src/FSharp.Editor/Navigation/NavigableSymbolsService.fs b/vsintegration/src/FSharp.Editor/Navigation/NavigableSymbolsService.fs index a1022788ab6..d1af75a598a 100644 --- a/vsintegration/src/FSharp.Editor/Navigation/NavigableSymbolsService.fs +++ b/vsintegration/src/FSharp.Editor/Navigation/NavigableSymbolsService.fs @@ -21,21 +21,21 @@ open Microsoft.VisualStudio.Shell [] type internal FSharpNavigableSymbol(item: FSharpNavigableItem, span: SnapshotSpan, gtd: GoToDefinition, statusBar: StatusBar) = interface INavigableSymbol with - member __.Navigate(_: INavigableRelationship) = + member _.Navigate(_: INavigableRelationship) = gtd.NavigateToItem(item, statusBar) - member __.Relationships = seq { yield PredefinedNavigableRelationships.Definition } + member _.Relationships = seq { yield PredefinedNavigableRelationships.Definition } - member __.SymbolSpan = span + member _.SymbolSpan = span -type internal FSharpNavigableSymbolSource(checkerProvider: FSharpCheckerProvider, projectInfoManager: FSharpProjectOptionsManager, serviceProvider: IServiceProvider) = +type internal FSharpNavigableSymbolSource(metadataAsSource, serviceProvider: IServiceProvider) = let mutable disposed = false - let gtd = GoToDefinition(checkerProvider.Checker, projectInfoManager) + let gtd = GoToDefinition(metadataAsSource) let statusBar = StatusBar(serviceProvider.GetService()) interface INavigableSymbolSource with - member __.GetNavigableSymbolAsync(triggerSpan: SnapshotSpan, cancellationToken: CancellationToken) = + member _.GetNavigableSymbolAsync(triggerSpan: SnapshotSpan, cancellationToken: CancellationToken) = // Yes, this is a code smell. But this is how the editor API accepts what we would treat as None. if disposed then null else @@ -43,7 +43,7 @@ type internal FSharpNavigableSymbolSource(checkerProvider: FSharpCheckerProvider let snapshot = triggerSpan.Snapshot let position = triggerSpan.Start.Position let document = snapshot.GetOpenDocumentInCurrentContextWithChanges() - let! sourceText = document.GetTextAsync() |> liftTaskAsync + let! sourceText = document.GetTextAsync(cancellationToken) |> liftTaskAsync statusBar.Message(SR.LocatingSymbol()) use _ = statusBar.Animate() @@ -54,17 +54,34 @@ type internal FSharpNavigableSymbolSource(checkerProvider: FSharpCheckerProvider // Task.Wait throws an exception if the task is cancelled, so be sure to catch it. try // This call to Wait() is fine because we want to be able to provide the error message in the status bar. - gtdTask.Wait() + gtdTask.Wait(cancellationToken) statusBar.Clear() if gtdTask.Status = TaskStatus.RanToCompletion && gtdTask.Result.IsSome then - let navigableItem, range = gtdTask.Result.Value + let result, range = gtdTask.Result.Value let declarationTextSpan = RoslynHelpers.FSharpRangeToTextSpan(sourceText, range) let declarationSpan = Span(declarationTextSpan.Start, declarationTextSpan.Length) let symbolSpan = SnapshotSpan(snapshot, declarationSpan) - return FSharpNavigableSymbol(navigableItem, symbolSpan, gtd, statusBar) :> INavigableSymbol + match result with + | FSharpGoToDefinitionResult.NavigableItem(navItem) -> + return FSharpNavigableSymbol(navItem, symbolSpan, gtd, statusBar) :> INavigableSymbol + + | FSharpGoToDefinitionResult.ExternalAssembly(targetSymbolUse, metadataReferences) -> + let nav = + { new INavigableSymbol with + member _.Navigate(_: INavigableRelationship) = + // Need to new up a CTS here instead of re-using the other one, since VS + // will navigate disconnected from the outer routine, leading to an + // OperationCancelledException if you use the one defined outside. + use ct = new CancellationTokenSource() + gtd.NavigateToExternalDeclaration(targetSymbolUse, metadataReferences, ct.Token, statusBar) + + member _.Relationships = seq { yield PredefinedNavigableRelationships.Definition } + + member _.SymbolSpan = symbolSpan } + return nav else statusBar.TempMessage(SR.CannotDetermineSymbol()) @@ -79,7 +96,7 @@ type internal FSharpNavigableSymbolSource(checkerProvider: FSharpCheckerProvider |> Async.map Option.toObj |> RoslynHelpers.StartAsyncAsTask cancellationToken - member __.Dispose() = + member _.Dispose() = disposed <- true [)>] @@ -90,10 +107,9 @@ type internal FSharpNavigableSymbolService [] ( [)>] serviceProvider: IServiceProvider, - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager + metadataAsSource: FSharpMetadataAsSourceService ) = interface INavigableSymbolSourceProvider with - member __.TryCreateNavigableSymbolSource(_: ITextView, _: ITextBuffer) = - new FSharpNavigableSymbolSource(checkerProvider, projectInfoManager, serviceProvider) :> INavigableSymbolSource \ No newline at end of file + member _.TryCreateNavigableSymbolSource(_: ITextView, _: ITextBuffer) = + new FSharpNavigableSymbolSource(metadataAsSource, serviceProvider) :> INavigableSymbolSource \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/Navigation/NavigateToSearchService.fs b/vsintegration/src/FSharp.Editor/Navigation/NavigateToSearchService.fs index 3fb063047ec..6fd2bf231cf 100644 --- a/vsintegration/src/FSharp.Editor/Navigation/NavigateToSearchService.fs +++ b/vsintegration/src/FSharp.Editor/Navigation/NavigateToSearchService.fs @@ -7,50 +7,44 @@ open System.IO open System.Composition open System.Collections.Generic open System.Collections.Immutable -open System.Threading open System.Threading.Tasks -open System.Runtime.CompilerServices open System.Runtime.Caching open System.Globalization open Microsoft.CodeAnalysis -open Microsoft.CodeAnalysis.Host.Mef open Microsoft.CodeAnalysis.Text -open Microsoft.CodeAnalysis.NavigateTo -open Microsoft.CodeAnalysis.Navigation open Microsoft.CodeAnalysis.PatternMatching open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Navigation open Microsoft.CodeAnalysis.ExternalAccess.FSharp.NavigateTo -open FSharp.Compiler -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Syntax type internal NavigableItem(document: Document, sourceSpan: TextSpan, glyph: Glyph, name: string, kind: string, additionalInfo: string) = inherit FSharpNavigableItem(glyph, ImmutableArray.Create (TaggedText(TextTags.Text, name)), document, sourceSpan) - member __.Name = name - member __.Kind = kind - member __.AdditionalInfo = additionalInfo + member _.Name = name + member _.Kind = kind + member _.AdditionalInfo = additionalInfo type internal NavigateToSearchResult(item: NavigableItem, matchKind: FSharpNavigateToMatchKind) = inherit FSharpNavigateToSearchResult(item.AdditionalInfo, item.Kind, matchKind, item.Name, item) module private Index = [] - type private IndexEntry(str: string, offset: int, item: NavigableItem, isOperator: bool) = - member __.String = str - member __.Offset = offset - member __.Length = str.Length - offset - member __.Item = item - member __.IsOperator = isOperator + type private IndexEntry(str: string, offset: int, item: NavigableItem) = + member _.String = str + member _.Offset = offset + member _.Length = str.Length - offset + member _.Item = item member x.StartsWith (s: string) = if s.Length > x.Length then false else CultureInfo.CurrentCulture.CompareInfo.IndexOf(str, s, offset, s.Length, CompareOptions.IgnoreCase) = offset - member private __.DebugString() = sprintf "%s (offset %d) (%s)" (str.Substring offset) offset str let private indexEntryComparer = { new IComparer with - member __.Compare(a, b) = + member _.Compare(a, b) = let res = CultureInfo.CurrentCulture.CompareInfo.Compare(a.String, a.Offset, b.String, b.Offset, CompareOptions.IgnoreCase) if res = 0 then a.Offset.CompareTo(b.Offset) else res } @@ -60,13 +54,13 @@ module private Index = let private navigateToSearchResultComparer = { new IEqualityComparer with - member __.Equals(x: FSharpNavigateToSearchResult, y: FSharpNavigateToSearchResult) = + member _.Equals(x: FSharpNavigateToSearchResult, y: FSharpNavigateToSearchResult) = match x, y with | null, _ | _, null -> false | _ -> x.NavigableItem.Document.Id = y.NavigableItem.Document.Id && x.NavigableItem.SourceSpan = y.NavigableItem.SourceSpan - member __.GetHashCode(x: FSharpNavigateToSearchResult) = + member _.GetHashCode(x: FSharpNavigateToSearchResult) = if isNull x then 0 else 23 * (17 * 23 + x.NavigableItem.Document.Id.GetHashCode()) + x.NavigableItem.SourceSpan.GetHashCode() } @@ -74,20 +68,20 @@ module private Index = let entries = ResizeArray() for item in items do - let isOperator, name = + let name = if PrettyNaming.IsMangledOpName item.Name then - true, PrettyNaming.DecompileOpName item.Name + PrettyNaming.DecompileOpName item.Name else - false, item.Name + item.Name for i = 0 to name.Length - 1 do - entries.Add(IndexEntry(name, i, item, isOperator)) + entries.Add(IndexEntry(name, i, item)) entries.Sort(indexEntryComparer) { new IIndexedNavigableItems with - member __.Find (searchValue) = + member _.Find (searchValue) = let result = HashSet(navigateToSearchResultComparer) if entries.Count > 0 then - let entryToFind = IndexEntry(searchValue, 0, Unchecked.defaultof<_>, Unchecked.defaultof<_>) + let entryToFind = IndexEntry(searchValue, 0, Unchecked.defaultof<_>) let initial = let p = entries.BinarySearch(entryToFind, indexEntryComparer) @@ -116,51 +110,58 @@ module private Index = handle pos pos <- pos + 1 Seq.toArray result - member __.AllItems = items } + member _.AllItems = items } [] module private Utils = let navigateToItemKindToRoslynKind = function - | NavigateTo.NavigableItemKind.Module -> FSharpNavigateToItemKind.Module - | NavigateTo.NavigableItemKind.ModuleAbbreviation -> FSharpNavigateToItemKind.Module - | NavigateTo.NavigableItemKind.Exception -> FSharpNavigateToItemKind.Class - | NavigateTo.NavigableItemKind.Type -> FSharpNavigateToItemKind.Class - | NavigateTo.NavigableItemKind.ModuleValue -> FSharpNavigateToItemKind.Field - | NavigateTo.NavigableItemKind.Field -> FSharpNavigateToItemKind.Field - | NavigateTo.NavigableItemKind.Property -> FSharpNavigateToItemKind.Property - | NavigateTo.NavigableItemKind.Constructor -> FSharpNavigateToItemKind.Method - | NavigateTo.NavigableItemKind.Member -> FSharpNavigateToItemKind.Method - | NavigateTo.NavigableItemKind.EnumCase -> FSharpNavigateToItemKind.EnumItem - | NavigateTo.NavigableItemKind.UnionCase -> FSharpNavigateToItemKind.EnumItem + | NavigableItemKind.Module -> FSharpNavigateToItemKind.Module + | NavigableItemKind.ModuleAbbreviation -> FSharpNavigateToItemKind.Module + | NavigableItemKind.Exception -> FSharpNavigateToItemKind.Class + | NavigableItemKind.Type -> FSharpNavigateToItemKind.Class + | NavigableItemKind.ModuleValue -> FSharpNavigateToItemKind.Field + | NavigableItemKind.Field -> FSharpNavigateToItemKind.Field + | NavigableItemKind.Property -> FSharpNavigateToItemKind.Property + | NavigableItemKind.Constructor -> FSharpNavigateToItemKind.Method + | NavigableItemKind.Member -> FSharpNavigateToItemKind.Method + | NavigableItemKind.EnumCase -> FSharpNavigateToItemKind.EnumItem + | NavigableItemKind.UnionCase -> FSharpNavigateToItemKind.EnumItem let navigateToItemKindToGlyph = function - | NavigateTo.NavigableItemKind.Module -> Glyph.ModulePublic - | NavigateTo.NavigableItemKind.ModuleAbbreviation -> Glyph.ModulePublic - | NavigateTo.NavigableItemKind.Exception -> Glyph.ClassPublic - | NavigateTo.NavigableItemKind.Type -> Glyph.ClassPublic - | NavigateTo.NavigableItemKind.ModuleValue -> Glyph.FieldPublic - | NavigateTo.NavigableItemKind.Field -> Glyph.FieldPublic - | NavigateTo.NavigableItemKind.Property -> Glyph.PropertyPublic - | NavigateTo.NavigableItemKind.Constructor -> Glyph.MethodPublic - | NavigateTo.NavigableItemKind.Member -> Glyph.MethodPublic - | NavigateTo.NavigableItemKind.EnumCase -> Glyph.EnumPublic - | NavigateTo.NavigableItemKind.UnionCase -> Glyph.EnumPublic - - let containerToString (container: NavigateTo.Container) (project: Project) = + | NavigableItemKind.Module -> Glyph.ModulePublic + | NavigableItemKind.ModuleAbbreviation -> Glyph.ModulePublic + | NavigableItemKind.Exception -> Glyph.ClassPublic + | NavigableItemKind.Type -> Glyph.ClassPublic + | NavigableItemKind.ModuleValue -> Glyph.FieldPublic + | NavigableItemKind.Field -> Glyph.FieldPublic + | NavigableItemKind.Property -> Glyph.PropertyPublic + | NavigableItemKind.Constructor -> Glyph.MethodPublic + | NavigableItemKind.Member -> Glyph.MethodPublic + | NavigableItemKind.EnumCase -> Glyph.EnumPublic + | NavigableItemKind.UnionCase -> Glyph.EnumPublic + + let containerToString (container: NavigableContainer) (document: Document) = + let project = document.Project let typeAsString = match container.Type with - | NavigateTo.ContainerType.File -> "project " - | NavigateTo.ContainerType.Namespace -> "namespace " - | NavigateTo.ContainerType.Module -> "module " - | NavigateTo.ContainerType.Exception -> "exception " - | NavigateTo.ContainerType.Type -> "type " + | NavigableContainerType.File -> "project " + | NavigableContainerType.Namespace -> "namespace " + | NavigableContainerType.Module -> "module " + | NavigableContainerType.Exception -> "exception " + | NavigableContainerType.Type -> "type " let name = match container.Type with - | NavigateTo.ContainerType.File -> + | NavigableContainerType.File -> (Path.GetFileNameWithoutExtension project.Name) + ", " + (Path.GetFileName container.Name) | _ -> container.Name - typeAsString + name + + let combined = typeAsString + name + + if isSignatureFile document.FilePath then + "signature for: " + combined + else + combined type PerDocumentSavedData = { Hash: int; Items: Index.IIndexedNavigableItems } @@ -168,41 +169,43 @@ module private Utils = type internal FSharpNavigateToSearchService [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = - let userOpName = "FSharpNavigateToSearchService" let kindsProvided = ImmutableHashSet.Create(FSharpNavigateToItemKind.Module, FSharpNavigateToItemKind.Class, FSharpNavigateToItemKind.Field, FSharpNavigateToItemKind.Property, FSharpNavigateToItemKind.Method, FSharpNavigateToItemKind.Enum, FSharpNavigateToItemKind.EnumItem) :> IImmutableSet // Save the backing navigation data in a memory cache held in a sliding window let itemsByDocumentId = new MemoryCache("FSharp.Editor.FSharpNavigateToSearchService") - let getNavigableItems(document: Document, parsingOptions: FSharpParsingOptions, kinds: IImmutableSet) = + let GetNavigableItems(document: Document, kinds: IImmutableSet) = async { let! cancellationToken = Async.CancellationToken + let! parseResults = document.GetFSharpParseResultsAsync(nameof(FSharpNavigateToSearchService)) let! sourceText = document.GetTextAsync(cancellationToken) |> Async.AwaitTask - let! parseResults = checkerProvider.Checker.ParseFile(document.FilePath, sourceText.ToFSharpSourceText(), parsingOptions) - let navItems parsedInput = - NavigateTo.getNavigableItems parsedInput + NavigateTo.GetNavigableItems parsedInput |> Array.filter (fun i -> kinds.Contains(navigateToItemKindToRoslynKind i.Kind)) - return - match parseResults.ParseTree |> Option.map navItems with - | Some items -> - [| for item in items do - match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, item.Range) with - | None -> () - | Some sourceSpan -> - let glyph = navigateToItemKindToGlyph item.Kind - let kind = navigateToItemKindToRoslynKind item.Kind - let additionalInfo = containerToString item.Container document.Project - yield NavigableItem(document, sourceSpan, glyph, item.Name, kind, additionalInfo) |] - | None -> [||] + let items = parseResults.ParseTree |> navItems + let navigableItems = + [| + for item in items do + match RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, item.Range) with + | None -> () + | Some sourceSpan -> + let glyph = navigateToItemKindToGlyph item.Kind + let kind = navigateToItemKindToRoslynKind item.Kind + let additionalInfo = containerToString item.Container document + let _name = + if isSignatureFile document.FilePath then + item.Name + " (signature)" + else + item.Name + yield NavigableItem(document, sourceSpan, glyph, item.Name, kind, additionalInfo) + |] + return navigableItems } - let getCachedIndexedNavigableItems(document: Document, parsingOptions: FSharpParsingOptions, kinds: IImmutableSet) = + let getCachedIndexedNavigableItems(document: Document, kinds: IImmutableSet) = async { let! cancellationToken = Async.CancellationToken let! textVersion = document.GetTextVersionAsync(cancellationToken) |> Async.AwaitTask @@ -211,7 +214,7 @@ type internal FSharpNavigateToSearchService match itemsByDocumentId.Get(key) with | :? PerDocumentSavedData as data when data.Hash = textVersionHash -> return data.Items | _ -> - let! items = getNavigableItems(document, parsingOptions, kinds) + let! items = GetNavigableItems(document, kinds) let indexedItems = Index.build items let data = { Hash= textVersionHash; Items = indexedItems } let cacheItem = CacheItem(key, data) @@ -228,12 +231,11 @@ type internal FSharpNavigateToSearchService | _ -> FSharpNavigateToMatchKind.Regular interface IFSharpNavigateToSearchService with - member __.SearchProjectAsync(project, _priorityDocuments, searchPattern, kinds, cancellationToken) : Task> = + member _.SearchProjectAsync(project, _priorityDocuments, searchPattern, kinds, cancellationToken) : Task> = asyncMaybe { - let! parsingOptions, _options = projectInfoManager.TryGetOptionsByProject(project, cancellationToken) let! items = project.Documents - |> Seq.map (fun document -> getCachedIndexedNavigableItems(document, parsingOptions, kinds)) + |> Seq.map (fun document -> getCachedIndexedNavigableItems(document, kinds)) |> Async.Parallel |> liftAsync @@ -260,16 +262,15 @@ type internal FSharpNavigateToSearchService |> Async.map Seq.toImmutableArray |> RoslynHelpers.StartAsyncAsTask(cancellationToken) - member __.SearchDocumentAsync(document, searchPattern, kinds, cancellationToken) : Task> = + member _.SearchDocumentAsync(document, searchPattern, kinds, cancellationToken) : Task> = asyncMaybe { - let! parsingOptions, _, _ = projectInfoManager.TryGetOptionsForDocumentOrProject(document, cancellationToken, userOpName) - let! items = getCachedIndexedNavigableItems(document, parsingOptions, kinds) |> liftAsync + let! items = getCachedIndexedNavigableItems(document, kinds) |> liftAsync return items.Find(searchPattern) } |> Async.map (Option.defaultValue [||]) |> Async.map Seq.toImmutableArray |> RoslynHelpers.StartAsyncAsTask(cancellationToken) - member __.KindsProvided = kindsProvided + member _.KindsProvided = kindsProvided - member __.CanFilter = true \ No newline at end of file + member _.CanFilter = true \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/Navigation/NavigationBarItemService.fs b/vsintegration/src/FSharp.Editor/Navigation/NavigationBarItemService.fs index 13350004ab1..d09647a2396 100644 --- a/vsintegration/src/FSharp.Editor/Navigation/NavigationBarItemService.fs +++ b/vsintegration/src/FSharp.Editor/Navigation/NavigationBarItemService.fs @@ -6,14 +6,9 @@ open System.Composition open System.Collections.Generic open System.Threading.Tasks -open Microsoft.CodeAnalysis.Editor -open Microsoft.CodeAnalysis.Navigation -open Microsoft.CodeAnalysis.Host.Mef -open Microsoft.CodeAnalysis.Notification open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Editor -open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Navigation -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.EditorServices type internal NavigationBarSymbolItem(text, glyph, spans, childItems) = inherit FSharpNavigationBarItem(text, glyph, spans, childItems) @@ -22,20 +17,16 @@ type internal NavigationBarSymbolItem(text, glyph, spans, childItems) = type internal FSharpNavigationBarItemService [] ( - checkerProvider: FSharpCheckerProvider, - projectInfoManager: FSharpProjectOptionsManager ) = - static let userOpName = "NavigationBarItem" static let emptyResult: IList = upcast [||] interface IFSharpNavigationBarItemService with - member __.GetItemsAsync(document, cancellationToken) : Task> = + member _.GetItemsAsync(document, cancellationToken) : Task> = asyncMaybe { - let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) + let! parseResults = document.GetFSharpParseResultsAsync(nameof(FSharpNavigationBarItemService)) |> liftAsync + let navItems = Navigation.getNavigation parseResults.ParseTree let! sourceText = document.GetTextAsync(cancellationToken) - let! parsedInput = checkerProvider.Checker.ParseDocument(document, parsingOptions, sourceText=sourceText, userOpName=userOpName) - let navItems = FSharpNavigation.getNavigation parsedInput let rangeToTextSpan range = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, range) return navItems.Declarations diff --git a/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs b/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs index 7485176811a..578b675ae14 100644 --- a/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs +++ b/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs @@ -3,17 +3,11 @@ namespace Microsoft.VisualStudio.FSharp.Editor open System open System.ComponentModel.Composition open System.Runtime.InteropServices -open System.Windows -open System.Windows.Controls open Microsoft.VisualStudio.Shell open Microsoft.VisualStudio.FSharp.UIResources +open Microsoft.CodeAnalysis -module DefaultTuning = - let UnusedDeclarationsAnalyzerInitialDelay = 0 (* 1000 *) (* milliseconds *) - let UnusedOpensAnalyzerInitialDelay = 0 (* 2000 *) (* milliseconds *) - let SimplifyNameInitialDelay = 2000 (* milliseconds *) - let SimplifyNameEachItemDelay = 0 (* milliseconds *) - +module DefaultTuning = /// How long is the per-document data saved before it is eligible for eviction from the cache? 10 seconds. /// Re-tokenizing is fast so we don't need to save this data long. let PerDocumentSavedDataSlidingWindow = TimeSpan(0,0,10)(* seconds *) @@ -107,7 +101,7 @@ type FormattingOptions = type EditorOptions [] ( - [)>] serviceProvider: IServiceProvider + [)>] serviceProvider: IServiceProvider ) = let store = SettingsStore(serviceProvider) @@ -121,26 +115,19 @@ type EditorOptions store.Register CodeLensOptions.Default store.Register FormattingOptions.Default - member __.IntelliSense : IntelliSenseOptions = store.Get() - member __.QuickInfo : QuickInfoOptions = store.Get() - member __.CodeFixes : CodeFixesOptions = store.Get() - member __.LanguageServicePerformance : LanguageServicePerformanceOptions = store.Get() - member __.Advanced: AdvancedOptions = store.Get() - member __.CodeLens: CodeLensOptions = store.Get() - member __.Formatting : FormattingOptions = store.Get() + member _.IntelliSense : IntelliSenseOptions = store.Get() + member _.QuickInfo : QuickInfoOptions = store.Get() + member _.CodeFixes : CodeFixesOptions = store.Get() + member _.LanguageServicePerformance : LanguageServicePerformanceOptions = store.Get() + member _.Advanced: AdvancedOptions = store.Get() + member _.CodeLens: CodeLensOptions = store.Get() + member _.Formatting : FormattingOptions = store.Get() interface Microsoft.CodeAnalysis.Host.IWorkspaceService interface IPersistSettings with - member __.LoadSettings() = store.LoadSettings() - member __.SaveSettings(settings) = store.SaveSettings(settings) - - -[] -module internal WorkspaceSettingFromDocumentExtension = - type Microsoft.CodeAnalysis.Document with - member this.FSharpOptions = - this.Project.Solution.Workspace.Services.GetService() : EditorOptions + member _.LoadSettings() = store.LoadSettings() + member _.SaveSettings(settings) = store.SaveSettings(settings) module internal OptionsUI = @@ -193,11 +180,64 @@ module internal OptionsUI = [] type internal AdvancedSettingsOptionPage() = inherit AbstractOptionPage() - override __.CreateView() = + override _.CreateView() = upcast AdvancedOptionsControl() [] type internal FormattingOptionPage() = inherit AbstractOptionPage() - override __.CreateView() = + override _.CreateView() = upcast FormattingOptionsControl() + +[] +module EditorOptionsExtensions = + + type Project with + + member this.AreFSharpInMemoryCrossProjectReferencesEnabled = + let editorOptions = this.Solution.Workspace.Services.GetService() + match box editorOptions with + | null -> true + | _ -> editorOptions.LanguageServicePerformance.EnableInMemoryCrossProjectReferences + + member this.IsFSharpCodeFixesAlwaysPlaceOpensAtTopLevelEnabled = + let editorOptions = this.Solution.Workspace.Services.GetService() + match box editorOptions with + | null -> false + | _ -> editorOptions.CodeFixes.AlwaysPlaceOpensAtTopLevel + + member this.IsFSharpCodeFixesUnusedDeclarationsEnabled = + let editorOptions = this.Solution.Workspace.Services.GetService() + match box editorOptions with + | null -> false + | _ -> editorOptions.CodeFixes.UnusedDeclarations + + member this.IsFSharpStaleCompletionResultsEnabled = + let editorOptions = this.Solution.Workspace.Services.GetService() + match box editorOptions with + | null -> false + | _ -> editorOptions.LanguageServicePerformance.AllowStaleCompletionResults + + member this.FSharpTimeUntilStaleCompletion = + let editorOptions = this.Solution.Workspace.Services.GetService() + match box editorOptions with + | null -> 0 + | _ -> editorOptions.LanguageServicePerformance.TimeUntilStaleCompletion + + member this.IsFSharpCodeFixesSimplifyNameEnabled = + let editorOptions = this.Solution.Workspace.Services.GetService() + match box editorOptions with + | null -> false + | _ -> editorOptions.CodeFixes.SimplifyName + + member this.IsFSharpCodeFixesUnusedOpensEnabled = + let editorOptions = this.Solution.Workspace.Services.GetService() + match box editorOptions with + | null -> false + | _ -> editorOptions.CodeFixes.UnusedOpens + + member this.IsFSharpBlockStructureEnabled = + let editorOptions = this.Solution.Workspace.Services.GetService() + match box editorOptions with + | null -> false + | _ -> editorOptions.Advanced.IsBlockStructureEnabled \ No newline at end of file diff --git a/vsintegration/src/FSharp.Editor/Options/SettingsPersistence.fs b/vsintegration/src/FSharp.Editor/Options/SettingsPersistence.fs index 096aebc9544..22f726ec37d 100644 --- a/vsintegration/src/FSharp.Editor/Options/SettingsPersistence.fs +++ b/vsintegration/src/FSharp.Editor/Options/SettingsPersistence.fs @@ -58,14 +58,14 @@ type SettingsStore(serviceProvider: IServiceProvider) = |> Option.iter (fun json -> try JsonConvert.PopulateObject(json, copy) with _ -> ()) copy - member __.Get() = getCached() + member _.Get() = getCached() // Used by the AbstractOptionPage to populate dialog controls. // We always have the latest value in the cache so we just return // cloned value here because it may be altered by the UI if declared with [] - member __.LoadSettings() = getCached() |> clone + member _.LoadSettings() = getCached() |> clone - member __.SaveSettings settings = + member _.SaveSettings settings = // We replace default serialization with Newtonsoft.Json for easy schema evolution. // For example, if we add a new bool field to the record, representing another checkbox in Options dialog // deserialization will still work fine. When we pass default value to JsonConvert.PopulateObject it will @@ -74,7 +74,7 @@ type SettingsStore(serviceProvider: IServiceProvider) = |> Async.AwaitTask |> Async.Start // This is the point we retrieve the initial value and subscribe to watch for changes - member __.Register (defaultSettings : 'options) = + member _.Register (defaultSettings : 'options) = defaultSettings |> updateFromStore |> keepInCache let subset = defaultSettings.GetType() |> storageKey |> settingsManager.GetSubset // this event is also raised when a setting change occurs in another VS instance, so we can keep everything in sync diff --git a/vsintegration/src/FSharp.Editor/QuickInfo/NavigableTextRun.fs b/vsintegration/src/FSharp.Editor/QuickInfo/NavigableTextRun.fs index 1ebb945903f..006041e0a92 100644 --- a/vsintegration/src/FSharp.Editor/QuickInfo/NavigableTextRun.fs +++ b/vsintegration/src/FSharp.Editor/QuickInfo/NavigableTextRun.fs @@ -4,6 +4,6 @@ namespace Microsoft.VisualStudio.FSharp.Editor [] type NavigableTextRun(classificationTypeName:string, text:string, navigateAction:unit -> unit) = - member __.ClassificationTypeName = classificationTypeName - member __.Text = text - member __.NavigateAction = navigateAction + member _.ClassificationTypeName = classificationTypeName + member _.Text = text + member _.NavigateAction = navigateAction diff --git a/vsintegration/src/FSharp.Editor/QuickInfo/Navigation.fs b/vsintegration/src/FSharp.Editor/QuickInfo/Navigation.fs index 63a5041f3ea..0ea6a4a3a06 100644 --- a/vsintegration/src/FSharp.Editor/QuickInfo/Navigation.fs +++ b/vsintegration/src/FSharp.Editor/QuickInfo/Navigation.fs @@ -6,16 +6,15 @@ open System open Microsoft.CodeAnalysis -open FSharp.Compiler.SourceCodeServices - -open FSharp.Compiler.Range +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Text.Range +open FSharp.Compiler.Text open Microsoft.VisualStudio.Shell.Interop type internal QuickInfoNavigation ( statusBar: StatusBar, - checker: FSharpChecker, - projectInfoManager: FSharpProjectOptionsManager, + metadataAsSource: FSharpMetadataAsSourceService, initialDoc: Document, thisSymbolUseRange: range ) = @@ -23,12 +22,12 @@ type internal QuickInfoNavigation let workspace = initialDoc.Project.Solution.Workspace let solution = workspace.CurrentSolution - member __.IsTargetValid (range: range) = + member _.IsTargetValid (range: range) = range <> rangeStartup && range <> thisSymbolUseRange && solution.TryGetDocumentIdFromFSharpRange (range, initialDoc.Project.Id) |> Option.isSome - member __.RelativePath (range: range) = + member _.RelativePath (range: range) = let relativePathEscaped = match solution.FilePath with | null -> range.FileName @@ -37,13 +36,13 @@ type internal QuickInfoNavigation Uri(sfp).MakeRelativeUri(targetUri).ToString() relativePathEscaped |> Uri.UnescapeDataString - member __.NavigateTo (range: range) = + member _.NavigateTo (range: range) = asyncMaybe { let targetPath = range.FileName let! targetDoc = solution.TryGetDocumentFromFSharpRange (range, initialDoc.Project.Id) let! targetSource = targetDoc.GetTextAsync() let! targetTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (targetSource, range) - let gtd = GoToDefinition(checker, projectInfoManager) + let gtd = GoToDefinition(metadataAsSource) // To ensure proper navigation decsions, we need to check the type of document the navigation call // is originating from and the target we're provided by default: diff --git a/vsintegration/src/FSharp.Editor/QuickInfo/QuickInfoProvider.fs b/vsintegration/src/FSharp.Editor/QuickInfo/QuickInfoProvider.fs index b7a8d17925a..a4b37b7c908 100644 --- a/vsintegration/src/FSharp.Editor/QuickInfo/QuickInfoProvider.fs +++ b/vsintegration/src/FSharp.Editor/QuickInfo/QuickInfoProvider.fs @@ -17,14 +17,15 @@ open Microsoft.VisualStudio.Shell.Interop open Microsoft.VisualStudio.Text open Microsoft.VisualStudio.Utilities -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Range open FSharp.Compiler - -open Internal.Utilities.StructuredFormat +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Symbols +open FSharp.Compiler.Text +open FSharp.Compiler.Tokenization type internal QuickInfo = - { StructuredText: FSharpStructuredToolTipText + { StructuredText: ToolTipText Span: TextSpan Symbol: FSharpSymbol option SymbolKind: LexerSymbolKind } @@ -38,8 +39,6 @@ module internal FSharpQuickInfo = // therefore we should include these doccoms in our design time quick info let getQuickInfoFromRange ( - checker: FSharpChecker, - projectInfoManager: FSharpProjectOptionsManager, document: Document, declRange: range, cancellationToken: CancellationToken @@ -47,6 +46,7 @@ module internal FSharpQuickInfo = : Async = asyncMaybe { + let userOpName = "getQuickInfoFromRange" let solution = document.Project.Solution // ascertain the location of the target declaration in the signature file let! extDocId = solution.GetDocumentIdsWithFilePath declRange.FileName |> Seq.tryHead @@ -56,18 +56,16 @@ module internal FSharpQuickInfo = let extLineText = (extSourceText.Lines.GetLineFromPosition extSpan.Start).ToString() // project options need to be retrieved because the signature file could be in another project - let! extParsingOptions, extProjectOptions = projectInfoManager.TryGetOptionsByProject(document.Project, cancellationToken) - let extDefines = CompilerEnvironment.GetCompilationDefinesForEditing extParsingOptions - let! extLexerSymbol = Tokenizer.getSymbolAtPosition(extDocId, extSourceText, extSpan.Start, declRange.FileName, extDefines, SymbolLookupKind.Greedy, true, true) - let! _, _, extCheckFileResults = checker.ParseAndCheckDocument(extDocument, extProjectOptions, allowStaleResults=true, sourceText=extSourceText, userOpName = userOpName) + let! extLexerSymbol = extDocument.TryFindFSharpLexerSymbolAsync(extSpan.Start, SymbolLookupKind.Greedy, true, true, userOpName) + let! _, extCheckFileResults = extDocument.GetFSharpParseAndCheckResultsAsync(userOpName) |> liftAsync let extQuickInfoText = - extCheckFileResults.GetStructuredToolTipText + extCheckFileResults.GetToolTip (declRange.StartLine, extLexerSymbol.Ident.idRange.EndColumn, extLineText, extLexerSymbol.FullIsland, FSharpTokenTag.IDENT) match extQuickInfoText with - | FSharpToolTipText [] - | FSharpToolTipText [FSharpStructuredToolTipElement.None] -> return! None + | ToolTipText [] + | ToolTipText [ToolTipElement.None] -> return! None | extQuickInfoText -> let! extSymbolUse = extCheckFileResults.GetSymbolUseAtLocation(declRange.StartLine, extLexerSymbol.Ident.idRange.EndColumn, extLineText, extLexerSymbol.FullIsland) @@ -82,8 +80,6 @@ module internal FSharpQuickInfo = /// Get QuickInfo combined from doccom of Signature and definition let getQuickInfo ( - checker: FSharpChecker, - projectInfoManager: FSharpProjectOptionsManager, document: Document, position: int, cancellationToken: CancellationToken @@ -91,12 +87,11 @@ module internal FSharpQuickInfo = : Async<(range * QuickInfo option * QuickInfo option) option> = asyncMaybe { + let userOpName = "getQuickInfo" + let! lexerSymbol = document.TryFindFSharpLexerSymbolAsync(position, SymbolLookupKind.Greedy, true, true, userOpName) + let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(userOpName) |> liftAsync let! sourceText = document.GetTextAsync cancellationToken - let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) - let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions - let! lexerSymbol = Tokenizer.getSymbolAtPosition(document.Id, sourceText, position, document.FilePath, defines, SymbolLookupKind.Greedy, true, true) let idRange = lexerSymbol.Ident.idRange - let! _, _, checkFileResults = checker.ParseAndCheckDocument(document, projectOptions, allowStaleResults = true, sourceText=sourceText, userOpName = userOpName) let textLinePos = sourceText.Lines.GetLinePosition position let fcsTextLineNumber = Line.fromZ textLinePos.Line let lineText = (sourceText.Lines.GetLineFromPosition position).ToString() @@ -105,12 +100,12 @@ module internal FSharpQuickInfo = let getTargetSymbolQuickInfo (symbol, tag) = asyncMaybe { let targetQuickInfo = - checkFileResults.GetStructuredToolTipText + checkFileResults.GetToolTip (fcsTextLineNumber, idRange.EndColumn, lineText, lexerSymbol.FullIsland,tag) match targetQuickInfo with - | FSharpToolTipText [] - | FSharpToolTipText [FSharpStructuredToolTipElement.None] -> return! None + | ToolTipText [] + | ToolTipText [ToolTipElement.None] -> return! None | _ -> let! targetTextSpan = RoslynHelpers.TryFSharpRangeToTextSpan (sourceText, lexerSymbol.Range) return { StructuredText = targetQuickInfo @@ -130,7 +125,7 @@ module internal FSharpQuickInfo = // if the target is in a signature file, adjusting the quick info is unnecessary if isSignatureFile document.FilePath then let! targetQuickInfo = getTargetSymbolQuickInfo (Some symbolUse.Symbol, FSharpTokenTag.IDENT) - return symbolUse.RangeAlternate, None, Some targetQuickInfo + return symbolUse.Range, None, Some targetQuickInfo else // find the declaration location of the target symbol, with a preference for signature files let findSigDeclarationResult = checkFileResults.GetDeclarationLocation (idRange.StartLine, idRange.EndColumn, lineText, lexerSymbol.FullIsland, preferFlag=true) @@ -141,9 +136,9 @@ module internal FSharpQuickInfo = let! result = match findSigDeclarationResult with - | FSharpFindDeclResult.DeclFound declRange when isSignatureFile declRange.FileName -> + | FindDeclResult.DeclFound declRange when isSignatureFile declRange.FileName -> asyncMaybe { - let! sigQuickInfo = getQuickInfoFromRange(checker, projectInfoManager, document, declRange, cancellationToken) + let! sigQuickInfo = getQuickInfoFromRange(document, declRange, cancellationToken) // if the target was declared in a signature file, and the current file // is not the corresponding module implementation file for that signature, @@ -152,43 +147,44 @@ module internal FSharpQuickInfo = let findImplDefinitionResult = checkFileResults.GetDeclarationLocation (idRange.StartLine, idRange.EndColumn, lineText, lexerSymbol.FullIsland, preferFlag=false) match findImplDefinitionResult with - | FSharpFindDeclResult.DeclNotFound _ - | FSharpFindDeclResult.ExternalDecl _ -> - return symbolUse.RangeAlternate, Some sigQuickInfo, None - | FSharpFindDeclResult.DeclFound declRange -> - let! implQuickInfo = getQuickInfoFromRange(checker, projectInfoManager, document, declRange, cancellationToken) - return symbolUse.RangeAlternate, Some sigQuickInfo, Some { implQuickInfo with Span = targetQuickInfo.Span } + | FindDeclResult.DeclNotFound _ + | FindDeclResult.ExternalDecl _ -> + return symbolUse.Range, Some sigQuickInfo, None + | FindDeclResult.DeclFound declRange -> + let! implQuickInfo = getQuickInfoFromRange(document, declRange, cancellationToken) + return symbolUse.Range, Some sigQuickInfo, Some { implQuickInfo with Span = targetQuickInfo.Span } } | _ -> async.Return None |> liftAsync - return result |> Option.defaultValue (symbolUse.RangeAlternate, None, Some targetQuickInfo) + return result |> Option.defaultValue (symbolUse.Range, None, Some targetQuickInfo) } type internal FSharpAsyncQuickInfoSource ( statusBar: StatusBar, xmlMemberIndexService: IVsXMLMemberIndexService, - checkerProvider:FSharpCheckerProvider, - projectInfoManager:FSharpProjectOptionsManager, + metadataAsSource: FSharpMetadataAsSourceService, textBuffer:ITextBuffer, _settings: EditorOptions ) = // test helper - static member ProvideQuickInfo(checker:FSharpChecker, documentId:DocumentId, sourceText:SourceText, filePath:string, position:int, parsingOptions:FSharpParsingOptions, options:FSharpProjectOptions, textVersionHash:int, languageServicePerformanceOptions: LanguageServicePerformanceOptions) = + static member ProvideQuickInfo(document: Document, position:int) = asyncMaybe { - let! _, _, checkFileResults = checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, options, languageServicePerformanceOptions, userOpName=FSharpQuickInfo.userOpName) + let! sourceText = document.GetTextAsync() let textLine = sourceText.Lines.GetLineFromPosition position let textLineNumber = textLine.LineNumber + 1 // Roslyn line numbers are zero-based - let defines = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions - let! symbol = Tokenizer.getSymbolAtPosition (documentId, sourceText, position, filePath, defines, SymbolLookupKind.Precise, true, true) - let res = checkFileResults.GetStructuredToolTipText (textLineNumber, symbol.Ident.idRange.EndColumn, textLine.ToString(), symbol.FullIsland, FSharpTokenTag.IDENT) + let textLineString = textLine.ToString() + let! symbol = document.TryFindFSharpLexerSymbolAsync(position, SymbolLookupKind.Precise, true, true, nameof(FSharpAsyncQuickInfoSource)) + + let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpAsyncQuickInfoSource)) |> liftAsync + let res = checkFileResults.GetToolTip (textLineNumber, symbol.Ident.idRange.EndColumn, textLineString, symbol.FullIsland, FSharpTokenTag.IDENT) match res with - | FSharpToolTipText [] - | FSharpToolTipText [FSharpStructuredToolTipElement.None] -> return! None + | ToolTipText [] + | ToolTipText [ToolTipElement.None] -> return! None | _ -> - let! symbolUse = checkFileResults.GetSymbolUseAtLocation (textLineNumber, symbol.Ident.idRange.EndColumn, textLine.ToString(), symbol.FullIsland) + let! symbolUse = checkFileResults.GetSymbolUseAtLocation (textLineNumber, symbol.Ident.idRange.EndColumn, textLineString, symbol.FullIsland) let! symbolSpan = RoslynHelpers.TryFSharpRangeToTextSpan (sourceText, symbol.Range) return { StructuredText = res Span = symbolSpan @@ -203,11 +199,11 @@ type internal FSharpAsyncQuickInfoSource (mainDescription, docs) interface IAsyncQuickInfoSource with - override __.Dispose() = () // no cleanup necessary + override _.Dispose() = () // no cleanup necessary // This method can be called from the background thread. // Do not call IServiceProvider.GetService here. - override __.GetQuickInfoItemAsync(session:IAsyncQuickInfoSession, cancellationToken:CancellationToken) : Task = + override _.GetQuickInfoItemAsync(session:IAsyncQuickInfoSession, cancellationToken:CancellationToken) : Task = let triggerPoint = session.GetTriggerPoint(textBuffer.CurrentSnapshot) match triggerPoint.HasValue with | false -> Task.FromResult(null) @@ -215,7 +211,7 @@ type internal FSharpAsyncQuickInfoSource let triggerPoint = triggerPoint.GetValueOrDefault() asyncMaybe { let document = textBuffer.CurrentSnapshot.GetOpenDocumentInCurrentContextWithChanges() - let! symbolUseRange, sigQuickInfo, targetQuickInfo = FSharpQuickInfo.getQuickInfo(checkerProvider.Checker, projectInfoManager, document, triggerPoint.Position, cancellationToken) + let! symbolUseRange, sigQuickInfo, targetQuickInfo = FSharpQuickInfo.getQuickInfo(document, triggerPoint.Position, cancellationToken) let getTrackingSpan (span:TextSpan) = textBuffer.CurrentSnapshot.CreateTrackingSpan(span.Start, span.Length, SpanTrackingMode.EdgeInclusive) @@ -226,7 +222,7 @@ type internal FSharpAsyncQuickInfoSource | None, Some quickInfo -> let mainDescription, docs = FSharpAsyncQuickInfoSource.BuildSingleQuickInfoItem documentationBuilder quickInfo let imageId = Tokenizer.GetImageIdForSymbol(quickInfo.Symbol, quickInfo.SymbolKind) - let navigation = QuickInfoNavigation(statusBar, checkerProvider.Checker, projectInfoManager, document, symbolUseRange) + let navigation = QuickInfoNavigation(statusBar, metadataAsSource, document, symbolUseRange) let content = QuickInfoViewProvider.provideContent(imageId, mainDescription, docs, navigation) let span = getTrackingSpan quickInfo.Span return QuickInfoItem(span, content) @@ -236,7 +232,7 @@ type internal FSharpAsyncQuickInfoSource XmlDocumentation.BuildDataTipText(documentationBuilder, ignore, sigDocumentation.Add, ignore, ignore, ignore, sigQuickInfo.StructuredText) XmlDocumentation.BuildDataTipText(documentationBuilder, mainDescription.Add, targetDocumentation.Add, typeParameterMap.Add, exceptions.Add, usage.Add, targetQuickInfo.StructuredText) // get whitespace nomalized documentation text - let getText (tts: seq) = + let getText (tts: seq) = let text = (StringBuilder(), tts) ||> Seq.fold (fun sb tt -> @@ -252,11 +248,11 @@ type internal FSharpAsyncQuickInfoSource | Some implText, Some sigText when implText.Equals (sigText, StringComparison.OrdinalIgnoreCase) -> yield! sigDocumentation | Some _ , Some _ -> - yield! RoslynHelpers.joinWithLineBreaks [ sigDocumentation; [ TaggedTextOps.tagText "-------------" ]; targetDocumentation ] + yield! RoslynHelpers.joinWithLineBreaks [ sigDocumentation; [ TaggedText.tagText "-------------" ]; targetDocumentation ] ] |> ResizeArray let docs = RoslynHelpers.joinWithLineBreaks [documentation; typeParameterMap; usage; exceptions] let imageId = Tokenizer.GetImageIdForSymbol(targetQuickInfo.Symbol, targetQuickInfo.SymbolKind) - let navigation = QuickInfoNavigation(statusBar, checkerProvider.Checker, projectInfoManager, document, symbolUseRange) + let navigation = QuickInfoNavigation(statusBar, metadataAsSource, document, symbolUseRange) let content = QuickInfoViewProvider.provideContent(imageId, mainDescription, docs, navigation) let span = getTrackingSpan targetQuickInfo.Span return QuickInfoItem(span, content) @@ -271,15 +267,14 @@ type internal FSharpAsyncQuickInfoSourceProvider [] ( [)>] serviceProvider: IServiceProvider, - checkerProvider:FSharpCheckerProvider, - projectInfoManager:FSharpProjectOptionsManager, + metadataAsSource: FSharpMetadataAsSourceService, settings: EditorOptions ) = interface IAsyncQuickInfoSourceProvider with - override __.TryCreateQuickInfoSource(textBuffer:ITextBuffer) : IAsyncQuickInfoSource = + override _.TryCreateQuickInfoSource(textBuffer:ITextBuffer) : IAsyncQuickInfoSource = // GetService calls must be made on the UI thread // It is safe to do it here (see #4713) let statusBar = StatusBar(serviceProvider.GetService()) let xmlMemberIndexService = serviceProvider.XMLMemberIndexService - new FSharpAsyncQuickInfoSource(statusBar, xmlMemberIndexService, checkerProvider, projectInfoManager, textBuffer, settings) :> IAsyncQuickInfoSource + new FSharpAsyncQuickInfoSource(statusBar, xmlMemberIndexService, metadataAsSource, textBuffer, settings) :> IAsyncQuickInfoSource diff --git a/vsintegration/src/FSharp.Editor/QuickInfo/Views.fs b/vsintegration/src/FSharp.Editor/QuickInfo/Views.fs index f36700bb0cc..abcc6bde066 100644 --- a/vsintegration/src/FSharp.Editor/QuickInfo/Views.fs +++ b/vsintegration/src/FSharp.Editor/QuickInfo/Views.fs @@ -3,61 +3,60 @@ namespace Microsoft.VisualStudio.FSharp.Editor open System.Collections.Generic -open Internal.Utilities.StructuredFormat +open FSharp.Compiler.Text open Microsoft.CodeAnalysis.Classification -open FSharp.Compiler open Microsoft.VisualStudio.Core.Imaging open Microsoft.VisualStudio.Language.StandardClassification open Microsoft.VisualStudio.Text.Adornments module internal QuickInfoViewProvider = - let layoutTagToClassificationTag (layoutTag:LayoutTag) = + let layoutTagToClassificationTag (layoutTag:TextTag) = match layoutTag with - | ActivePatternCase - | ActivePatternResult - | UnionCase - | Enum -> ClassificationTypeNames.EnumName - | Struct -> ClassificationTypeNames.StructName - | TypeParameter -> ClassificationTypeNames.TypeParameterName - | Alias - | Class - | Record - | Union - | UnknownType // Default to class until/unless we use classification data - | Module -> ClassificationTypeNames.ClassName - | Interface -> ClassificationTypeNames.InterfaceName - | Keyword -> ClassificationTypeNames.Keyword - | Member - | Function - | Method -> ClassificationTypeNames.MethodName - | Property - | RecordField -> ClassificationTypeNames.PropertyName - | Parameter - | Local -> ClassificationTypeNames.LocalName - | ModuleBinding -> ClassificationTypeNames.Identifier - | Namespace -> ClassificationTypeNames.NamespaceName - | Delegate -> ClassificationTypeNames.DelegateName - | Event -> ClassificationTypeNames.EventName - | Field -> ClassificationTypeNames.FieldName - | LineBreak - | Space -> ClassificationTypeNames.WhiteSpace - | NumericLiteral -> ClassificationTypeNames.NumericLiteral - | Operator -> ClassificationTypeNames.Operator - | StringLiteral -> ClassificationTypeNames.StringLiteral - | Punctuation -> ClassificationTypeNames.Punctuation - | UnknownEntity - | Text -> ClassificationTypeNames.Text + | TextTag.ActivePatternCase + | TextTag.ActivePatternResult + | TextTag.UnionCase + | TextTag.Enum -> ClassificationTypeNames.EnumName + | TextTag.Struct -> ClassificationTypeNames.StructName + | TextTag.TypeParameter -> ClassificationTypeNames.TypeParameterName + | TextTag.Alias + | TextTag.Class + | TextTag.Record + | TextTag.Union + | TextTag.UnknownType // Default to class until/unless we use classification data + | TextTag.Module -> ClassificationTypeNames.ClassName + | TextTag.Interface -> ClassificationTypeNames.InterfaceName + | TextTag.Keyword -> ClassificationTypeNames.Keyword + | TextTag.Member + | TextTag.Function + | TextTag.Method -> ClassificationTypeNames.MethodName + | TextTag.Property + | TextTag.RecordField -> ClassificationTypeNames.PropertyName + | TextTag.Parameter + | TextTag.Local -> ClassificationTypeNames.LocalName + | TextTag.ModuleBinding -> ClassificationTypeNames.Identifier + | TextTag.Namespace -> ClassificationTypeNames.NamespaceName + | TextTag.Delegate -> ClassificationTypeNames.DelegateName + | TextTag.Event -> ClassificationTypeNames.EventName + | TextTag.Field -> ClassificationTypeNames.FieldName + | TextTag.LineBreak + | TextTag.Space -> ClassificationTypeNames.WhiteSpace + | TextTag.NumericLiteral -> ClassificationTypeNames.NumericLiteral + | TextTag.Operator -> ClassificationTypeNames.Operator + | TextTag.StringLiteral -> ClassificationTypeNames.StringLiteral + | TextTag.Punctuation -> ClassificationTypeNames.Punctuation + | TextTag.UnknownEntity + | TextTag.Text -> ClassificationTypeNames.Text let provideContent ( imageId:ImageId option, - description:#seq, - documentation:#seq, + description: seq, + documentation: seq, navigation:QuickInfoNavigation ) = - let buildContainerElement (itemGroup:#seq) = + let buildContainerElement (itemGroup: seq) = let finalCollection = List() let currentContainerItems = List() let runsCollection = List() @@ -74,11 +73,11 @@ module internal QuickInfoViewProvider = for item in itemGroup do let classificationTag = layoutTagToClassificationTag item.Tag match item with - | :? Layout.NavigableTaggedText as nav when navigation.IsTargetValid nav.Range -> + | :? NavigableTaggedText as nav when navigation.IsTargetValid nav.Range -> flushRuns() let navigableTextRun = NavigableTextRun(classificationTag, item.Text, fun () -> navigation.NavigateTo nav.Range) currentContainerItems.Add(navigableTextRun :> obj) - | _ when item.Tag = LineBreak -> + | _ when item.Tag = TextTag.LineBreak -> flushRuns() // preserve succesive linebreaks if currentContainerItems.Count = 0 then diff --git a/vsintegration/src/FSharp.Editor/QuickInfo/WpfNagivableTextRunViewElementFactory.fs b/vsintegration/src/FSharp.Editor/QuickInfo/WpfNagivableTextRunViewElementFactory.fs index f560382b34a..134105e9ef8 100644 --- a/vsintegration/src/FSharp.Editor/QuickInfo/WpfNagivableTextRunViewElementFactory.fs +++ b/vsintegration/src/FSharp.Editor/QuickInfo/WpfNagivableTextRunViewElementFactory.fs @@ -23,7 +23,7 @@ type WpfNavigableTextRunViewElementFactory ) = let styles = Microsoft.VisualStudio.FSharp.UIResources.NavStyles() interface IViewElementFactory with - override __.CreateViewElement<'TView when 'TView: not struct>(textView:ITextView, model:obj) : 'TView = + override _.CreateViewElement<'TView when 'TView: not struct>(textView:ITextView, model:obj) : 'TView = if not (model :? NavigableTextRun) || typeof<'TView> <> typeof then failwith <| sprintf "Invalid type conversion. Supported conversion is `%s` to `%s`." typeof.Name typeof.Name diff --git a/vsintegration/src/FSharp.Editor/Refactor/AddExplicitTypeToParameter.fs b/vsintegration/src/FSharp.Editor/Refactor/AddExplicitTypeToParameter.fs new file mode 100644 index 00000000000..6eea90f188d --- /dev/null +++ b/vsintegration/src/FSharp.Editor/Refactor/AddExplicitTypeToParameter.fs @@ -0,0 +1,96 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace Microsoft.VisualStudio.FSharp.Editor + +open System +open System.Composition +open System.Threading + +open FSharp.Compiler +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Symbols +open FSharp.Compiler.Text +open FSharp.Compiler.Syntax + +open Microsoft.CodeAnalysis.Text +open Microsoft.CodeAnalysis.CodeRefactorings +open Microsoft.CodeAnalysis.CodeActions + +[] +type internal FSharpAddExplicitTypeToParameterRefactoring + [] + ( + ) = + inherit CodeRefactoringProvider() + + override _.ComputeRefactoringsAsync context = + asyncMaybe { + let document = context.Document + let position = context.Span.Start + let! sourceText = document.GetTextAsync () |> liftTaskAsync + let textLine = sourceText.Lines.GetLineFromPosition position + let textLinePos = sourceText.Lines.GetLinePosition position + let fcsTextLineNumber = Line.fromZ textLinePos.Line + let! lexerSymbol = document.TryFindFSharpLexerSymbolAsync(position, SymbolLookupKind.Greedy, false, false, nameof(FSharpAddExplicitTypeToParameterRefactoring)) + + let! parseFileResults, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(FSharpAddExplicitTypeToParameterRefactoring)) |> liftAsync + let! symbolUse = checkFileResults.GetSymbolUseAtLocation(fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLine.ToString(), lexerSymbol.FullIsland) + + let isValidParameterWithoutTypeAnnotation (funcOrValue: FSharpMemberOrFunctionOrValue) (symbolUse: FSharpSymbolUse) = + let isLambdaIfFunction = + funcOrValue.IsFunction && + parseFileResults.IsBindingALambdaAtPosition symbolUse.Range.Start + + (funcOrValue.IsValue || isLambdaIfFunction) && + parseFileResults.IsPositionContainedInACurriedParameter symbolUse.Range.Start && + not (parseFileResults.IsTypeAnnotationGivenAtPosition symbolUse.Range.Start) && + not funcOrValue.IsMember && + not funcOrValue.IsMemberThisValue && + not funcOrValue.IsConstructorThisValue && + not (PrettyNaming.IsOperatorName funcOrValue.DisplayName) + + match symbolUse.Symbol with + | :? FSharpMemberOrFunctionOrValue as v when isValidParameterWithoutTypeAnnotation v symbolUse -> + let typeString = v.FullType.FormatWithConstraints symbolUse.DisplayContext + let title = SR.AddTypeAnnotation() + + let! symbolSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, symbolUse.Range) + + let alreadyWrappedInParens = + let rec leftLoop ch pos = + if not (Char.IsWhiteSpace(ch)) then + ch = '(' + else + leftLoop sourceText.[pos - 1] (pos - 1) + + let rec rightLoop ch pos = + if not (Char.IsWhiteSpace(ch)) then + ch = ')' + else + rightLoop sourceText.[pos + 1] (pos + 1) + + let hasLeftParen = leftLoop sourceText.[symbolSpan.Start - 1] (symbolSpan.Start - 1) + let hasRightParen = rightLoop sourceText.[symbolSpan.End] symbolSpan.End + hasLeftParen && hasRightParen + + let getChangedText (sourceText: SourceText) = + if alreadyWrappedInParens then + sourceText.WithChanges(TextChange(TextSpan(symbolSpan.End, 0), ": " + typeString)) + else + sourceText.WithChanges(TextChange(TextSpan(symbolSpan.Start, 0), "(")) + .WithChanges(TextChange(TextSpan(symbolSpan.End + 1, 0), ": " + typeString + ")")) + + let codeAction = + CodeAction.Create( + title, + (fun (cancellationToken: CancellationToken) -> + async { + let! sourceText = context.Document.GetTextAsync(cancellationToken) |> Async.AwaitTask + return context.Document.WithText(getChangedText sourceText) + } |> RoslynHelpers.StartAsyncAsTask(cancellationToken)), + title) + context.RegisterRefactoring(codeAction) + | _ -> () + } + |> Async.Ignore + |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) diff --git a/vsintegration/src/FSharp.Editor/Refactor/ChangeDerefToValueRefactoring.fs b/vsintegration/src/FSharp.Editor/Refactor/ChangeDerefToValueRefactoring.fs new file mode 100644 index 00000000000..ab0a748276d --- /dev/null +++ b/vsintegration/src/FSharp.Editor/Refactor/ChangeDerefToValueRefactoring.fs @@ -0,0 +1,59 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace Microsoft.VisualStudio.FSharp.Editor + +open System +open System.Composition +open System.Threading + +open FSharp.Compiler +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Symbols +open FSharp.Compiler.Text +open FSharp.Compiler.Syntax + +open Microsoft.CodeAnalysis.Text +open Microsoft.CodeAnalysis.CodeRefactorings +open Microsoft.CodeAnalysis.CodeActions + +[] +type internal FSharpChangeDerefToValueRefactoring + [] + ( + ) = + inherit CodeRefactoringProvider() + + override _.ComputeRefactoringsAsync context = + asyncMaybe { + let document = context.Document + let! sourceText = context.Document.GetTextAsync(context.CancellationToken) + let! parseResults = document.GetFSharpParseResultsAsync(nameof(FSharpChangeDerefToValueRefactoring)) |> liftAsync + + let selectionRange = RoslynHelpers.TextSpanToFSharpRange(document.FilePath, context.Span, sourceText) + let! derefRange = parseResults.TryRangeOfRefCellDereferenceContainingPos selectionRange.Start + let! exprRange = parseResults.TryRangeOfExpressionBeingDereferencedContainingPos selectionRange.Start + + let combinedRange = Range.unionRanges derefRange exprRange + let! combinedSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, combinedRange) + let replacementString = + // Trim off the `!` + sourceText.GetSubText(combinedSpan).ToString().[1..] + ".Value" + + let title = SR.UseValueInsteadOfDeref() + + let getChangedText (sourceText: SourceText) = + sourceText.WithChanges(TextChange(combinedSpan, replacementString)) + + let codeAction = + CodeAction.Create( + title, + (fun (cancellationToken: CancellationToken) -> + async { + let! sourceText = context.Document.GetTextAsync(cancellationToken) |> Async.AwaitTask + return context.Document.WithText(getChangedText sourceText) + } |> RoslynHelpers.StartAsyncAsTask(cancellationToken)), + title) + context.RegisterRefactoring(codeAction) + } + |> Async.Ignore + |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) diff --git a/vsintegration/src/FSharp.Editor/Refactor/ChangeTypeofWithNameToNameofExpression.fs b/vsintegration/src/FSharp.Editor/Refactor/ChangeTypeofWithNameToNameofExpression.fs new file mode 100644 index 00000000000..5fd447fcc24 --- /dev/null +++ b/vsintegration/src/FSharp.Editor/Refactor/ChangeTypeofWithNameToNameofExpression.fs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace Microsoft.VisualStudio.FSharp.Editor + +open System +open System.Composition +open System.Threading + +open FSharp.Compiler +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Symbols +open FSharp.Compiler.Text +open FSharp.Compiler.Syntax + +open Microsoft.CodeAnalysis.Text +open Microsoft.CodeAnalysis.CodeRefactorings +open Microsoft.CodeAnalysis.CodeActions + +[] +type internal FSharpChangeTypeofWithNameToNameofExpressionRefactoring + [] + ( + ) = + inherit CodeRefactoringProvider() + + override _.ComputeRefactoringsAsync context = + asyncMaybe { + let document = context.Document + let! sourceText = context.Document.GetTextAsync(context.CancellationToken) + let! parseResults = document.GetFSharpParseResultsAsync(nameof(FSharpChangeTypeofWithNameToNameofExpressionRefactoring)) |> liftAsync + + let selectionRange = RoslynHelpers.TextSpanToFSharpRange(document.FilePath, context.Span, sourceText) + let! namedTypeOfResults = parseResults.TryRangeOfTypeofWithNameAndTypeExpr(selectionRange.Start) + + let! namedTypeSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText, namedTypeOfResults.NamedIdentRange) + let! typeofAndNameSpan = RoslynHelpers.TryFSharpRangeToTextSpan(sourceText,namedTypeOfResults.FullExpressionRange) + let namedTypeName = sourceText.GetSubText(namedTypeSpan) + let replacementString = $"nameof({namedTypeName})" + + let title = SR.UseNameof() + + let getChangedText (sourceText: SourceText) = + sourceText.WithChanges(TextChange(typeofAndNameSpan, replacementString)) + + let codeAction = + CodeAction.Create( + title, + (fun (cancellationToken: CancellationToken) -> + async { + let! sourceText = context.Document.GetTextAsync(cancellationToken) |> Async.AwaitTask + return context.Document.WithText(getChangedText sourceText) + } |> RoslynHelpers.StartAsyncAsTask(cancellationToken)), + title) + context.RegisterRefactoring(codeAction) + } + |> Async.Ignore + |> RoslynHelpers.StartAsyncUnitAsTask(context.CancellationToken) diff --git a/vsintegration/src/FSharp.Editor/Structure/BlockStructureService.fs b/vsintegration/src/FSharp.Editor/Structure/BlockStructureService.fs index 13c74ef0f53..8211b8f4bc2 100644 --- a/vsintegration/src/FSharp.Editor/Structure/BlockStructureService.fs +++ b/vsintegration/src/FSharp.Editor/Structure/BlockStructureService.fs @@ -7,15 +7,12 @@ open System.Collections.Immutable open System.Threading.Tasks open Microsoft.CodeAnalysis -open Microsoft.CodeAnalysis.Host.Mef open Microsoft.CodeAnalysis.Text -open Microsoft.CodeAnalysis.Structure open Microsoft.CodeAnalysis.ExternalAccess.FSharp.Structure -open FSharp.Compiler -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.SourceCodeServices.Structure -open FSharp.Compiler.SyntaxTree +open FSharp.Compiler.EditorServices +open FSharp.Compiler.EditorServices.Structure +open FSharp.Compiler.Syntax module internal BlockStructure = let scopeToBlockType = function @@ -144,18 +141,15 @@ module internal BlockStructure = open BlockStructure [)>] -type internal FSharpBlockStructureService [] (checkerProvider: FSharpCheckerProvider, projectInfoManager: FSharpProjectOptionsManager) = - - static let userOpName = "FSharpBlockStructure" +type internal FSharpBlockStructureService [] () = interface IFSharpBlockStructureService with - member __.GetBlockStructureAsync(document, cancellationToken) : Task = + member _.GetBlockStructureAsync(document, cancellationToken) : Task = asyncMaybe { - let! parsingOptions, _options = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken, userOpName) let! sourceText = document.GetTextAsync(cancellationToken) - let! parsedInput = checkerProvider.Checker.ParseDocument(document, parsingOptions, sourceText, userOpName) - return createBlockSpans document.FSharpOptions.Advanced.IsBlockStructureEnabled sourceText parsedInput |> Seq.toImmutableArray + let! parseResults = document.GetFSharpParseResultsAsync(nameof(FSharpBlockStructureService)) |> liftAsync + return createBlockSpans document.Project.IsFSharpBlockStructureEnabled sourceText parseResults.ParseTree |> Seq.toImmutableArray } |> Async.map (Option.defaultValue ImmutableArray<_>.Empty) |> Async.map FSharpBlockStructure diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf index 5c069ffbd7e..415992efdff 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.cs.xlf @@ -7,16 +7,36 @@ Přidejte do definice typu chybějící =. + + Add missing 'fun' keyword + Přidat chybějící klíčové slovo fun + + + + Add missing instance member parameter + Add missing instance member parameter + + Add 'new' keyword Přidejte klíčové slovo new. + + Add type annotation + Přidat anotaci typu + + Convert to Anonymous Record Převést na anonymní záznam + + Use '<>' for inequality check + Pro kontrolu nerovnosti použijte <>. + + Use '=' for equality check Pro kontrolu rovnosti použijte =. @@ -33,7 +53,7 @@ - F# Dispostable Values (top-level) + F# Disposable Values (top-level) Uvolnitelné hodnoty jazyka F# (nejvyšší úroveň) @@ -64,7 +84,7 @@ Make '{0}' recursive - Make '{0}' recursive + Nastavit {0} jako rekurzivní @@ -74,22 +94,27 @@ Remove 'return' - Remove 'return' + Odebrat return Remove 'return!' - Remove 'return!' + Odebrat return! + + + + Remove unused binding + Odebrat nepoužívanou vazbu Remove 'yield' - Remove 'yield' + Odebrat yield - Remove yield!' - Remove yield!' + Remove 'yield!' + Odebrat yield! @@ -224,7 +249,7 @@ Use F# lambda syntax - Use F# lambda syntax + Použít syntaxi lambda jazyka F# @@ -232,6 +257,11 @@ Pokud chcete změnit hodnotu, použijte <-. + + Use 'nameof' + Use 'nameof' + + Use 'upcast' Použijte upcast @@ -247,6 +277,11 @@ Negovat výraz pomocí not + + Use '.Value' to dereference expression + Pokud chcete k výrazu přistupovat přes ukazatel, použijte .Value. + + Wrap expression in parentheses Uzavřít výraz do závorek diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf index e538846342d..bd944dcaa24 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.de.xlf @@ -7,16 +7,36 @@ Fehlende "=" zur Typdefinition hinzufügen + + Add missing 'fun' keyword + Fehlendes Schlüsselwort "fun" hinzufügen + + + + Add missing instance member parameter + Add missing instance member parameter + + Add 'new' keyword Schlüsselwort "new" hinzufügen + + Add type annotation + Typanmerkung hinzufügen + + Convert to Anonymous Record In anonymen Datensatz konvertieren + + Use '<>' for inequality check + "<>" für die Überprüfung auf Ungleichheit verwenden + + Use '=' for equality check "=" für Gleichheitsüberprüfung verwenden @@ -33,8 +53,8 @@ - F# Dispostable Values (top-level) - Disposable-Werte in F# (oberste Ebene) + F# Disposable Values (top-level) + F# Verfügbare Werte (oberste Ebene) @@ -64,7 +84,7 @@ Make '{0}' recursive - Make '{0}' recursive + "{0}" als rekursiv festlegen @@ -74,22 +94,27 @@ Remove 'return' - Remove 'return' + "return" entfernen Remove 'return!' - Remove 'return!' + "return!" entfernen + + + + Remove unused binding + Nicht verwendete Bindung entfernen Remove 'yield' - Remove 'yield' + "yield" entfernen - Remove yield!' - Remove yield!' + Remove 'yield!' + "yield!" entfernen @@ -224,7 +249,7 @@ Use F# lambda syntax - Use F# lambda syntax + F#-Lambdasyntax verwenden @@ -232,6 +257,11 @@ "<-" zum Ändern des Werts verwenden + + Use 'nameof' + Use 'nameof' + + Use 'upcast' "upcast" verwenden @@ -247,6 +277,11 @@ "not" zum Negieren eines Ausdruck verwenden + + Use '.Value' to dereference expression + ".Value" zum Dereferenzieren eines Ausdrucks verwenden + + Wrap expression in parentheses Ausdruck in Klammern einschließen diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf index c0b21f5978a..94b05697af1 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.es.xlf @@ -7,16 +7,36 @@ Agregar el carácter "=" que falta a la definición de tipo + + Add missing 'fun' keyword + Agregar la palabra clave "fun" que falta + + + + Add missing instance member parameter + Agregar parámetro de miembro de instancia que falta + + Add 'new' keyword Agregar "nueva" palabra clave + + Add type annotation + Agregar una anotación de tipo + + Convert to Anonymous Record Convertir en registro anónimo + + Use '<>' for inequality check + Usar "<>" para la comprobación de desigualdad + + Use '=' for equality check Usar "=" para la comprobación de igualdad @@ -33,8 +53,8 @@ - F# Dispostable Values (top-level) - Valores descartables de F # (nivel superior) + F# Disposable Values (top-level) + Valores desechables en F# (nivel superior) @@ -64,7 +84,7 @@ Make '{0}' recursive - Make '{0}' recursive + Convertir el elemento "{0}" en recursivo @@ -74,22 +94,27 @@ Remove 'return' - Remove 'return' + Quitar "return" Remove 'return!' - Remove 'return!' + Quitar "return!" + + + + Remove unused binding + Quitar el enlace no usado Remove 'yield' - Remove 'yield' + Quitar "yield" - Remove yield!' - Remove yield!' + Remove 'yield!' + Quitar "yield!" @@ -224,7 +249,7 @@ Use F# lambda syntax - Use F# lambda syntax + Usar la sintaxis lambda de F# @@ -232,6 +257,11 @@ Usar "<-" para mutar el valor + + Use 'nameof' + Usar 'nameof' + + Use 'upcast' Usar "upcast" @@ -247,6 +277,11 @@ Usar "not" para negar la expresión + + Use '.Value' to dereference expression + Usar ".Value" para desreferenciar la expresión + + Wrap expression in parentheses Encapsular la expresión entre paréntesis diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf index c3279ecdcc3..411291f3107 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.fr.xlf @@ -7,16 +7,36 @@ Ajouter un '=' manquant à la définition de type + + Add missing 'fun' keyword + Ajouter le mot clé 'fun' manquant + + + + Add missing instance member parameter + Ajouter un paramètre de membre d’instance manquant + + Add 'new' keyword Ajouter le mot clé 'new' + + Add type annotation + Ajouter une annotation de type + + Convert to Anonymous Record Convertir en enregistrement anonyme + + Use '<>' for inequality check + Utiliser '<>' pour vérifier l'inégalité + + Use '=' for equality check Utiliser '=' pour vérifier l'égalité @@ -33,7 +53,7 @@ - F# Dispostable Values (top-level) + F# Disposable Values (top-level) Valeurs F# pouvant être supprimées (niveau supérieur) @@ -64,7 +84,7 @@ Make '{0}' recursive - Make '{0}' recursive + Rendre '{0}' récursif @@ -74,22 +94,27 @@ Remove 'return' - Remove 'return' + Supprimer 'return' Remove 'return!' - Remove 'return!' + Supprimer 'return!' + + + + Remove unused binding + Supprimer la liaison inutilisée Remove 'yield' - Remove 'yield' + Supprimer 'yield' - Remove yield!' - Remove yield!' + Remove 'yield!' + Supprimer 'yield!' @@ -224,7 +249,7 @@ Use F# lambda syntax - Use F# lambda syntax + Utiliser la syntaxe lambda F# @@ -232,6 +257,11 @@ Utiliser '<-' pour muter la valeur + + Use 'nameof' + Utiliser « nameof » + + Use 'upcast' Utiliser 'upcast' @@ -247,6 +277,11 @@ Utiliser 'not' pour annuler l'expression + + Use '.Value' to dereference expression + Utilisez '.Value' pour déréférencer l'expression + + Wrap expression in parentheses Mettre l'expression entre parenthèses diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf index 4eb00f6e453..0135663e689 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.it.xlf @@ -7,16 +7,36 @@ Aggiungere il carattere '=' mancante alla definizione di tipo + + Add missing 'fun' keyword + Aggiungi la parola chiave mancante 'fun' + + + + Add missing instance member parameter + Aggiungi parametro membro di istanza mancante + + Add 'new' keyword Aggiungi la parola chiave 'new' + + Add type annotation + Aggiungere l'annotazione di tipo + + Convert to Anonymous Record Converti in record anonimo + + Use '<>' for inequality check + Usare '<>' per il controllo di disuguaglianza + + Use '=' for equality check Usare '=' per il controllo di uguaglianza @@ -33,7 +53,7 @@ - F# Dispostable Values (top-level) + F# Disposable Values (top-level) Valori eliminabili F# (primo livello) @@ -64,7 +84,7 @@ Make '{0}' recursive - Make '{0}' recursive + Imposta '{0}' come ricorsivo @@ -74,22 +94,27 @@ Remove 'return' - Remove 'return' + Rimuovi 'return' Remove 'return!' - Remove 'return!' + Rimuovi 'return!' + + + + Remove unused binding + Rimuovi il binding inutilizzato Remove 'yield' - Remove 'yield' + Rimuovi 'yield' - Remove yield!' - Remove yield!' + Remove 'yield!' + Rimuovi 'yield!' @@ -224,7 +249,7 @@ Use F# lambda syntax - Use F# lambda syntax + Usa la sintassi lambda di F# @@ -232,6 +257,11 @@ Usare '<-' per modificare il valore + + Use 'nameof' + Usa 'nameof' + + Use 'upcast' Usare 'upcast' @@ -247,6 +277,11 @@ Usare 'not' per negare l'espressione + + Use '.Value' to dereference expression + Usa '.Value' per dereferenziare l'espressione + + Wrap expression in parentheses Racchiudere l'espressione tra parentesi diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf index 997fdbb34c2..4d2eee45eda 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ja.xlf @@ -7,16 +7,36 @@ 不足している '=' を型定義に追加します + + Add missing 'fun' keyword + 不足している 'fun' キーワードを追加する + + + + Add missing instance member parameter + 見つからないインスタンス メンバー パラメーターを追加する + + Add 'new' keyword 'new' キーワードを追加する + + Add type annotation + 型の注釈の追加 + + Convert to Anonymous Record 匿名レコードに変換 + + Use '<>' for inequality check + 非等値のチェックには '<>' を使用します + + Use '=' for equality check 等値性のチェックには '=' を使用します @@ -33,7 +53,7 @@ - F# Dispostable Values (top-level) + F# Disposable Values (top-level) F# の破棄可能な値 (トップレベル) @@ -64,7 +84,7 @@ Make '{0}' recursive - Make '{0}' recursive + '{0}' を再帰的にする @@ -74,22 +94,27 @@ Remove 'return' - Remove 'return' + 'return' の削除 Remove 'return!' - Remove 'return!' + 'return!' の削除 + + + + Remove unused binding + 使用されていないバインドの削除 Remove 'yield' - Remove 'yield' + 'yield' の削除 - Remove yield!' - Remove yield!' + Remove 'yield!' + 'yield!' の削除 @@ -224,7 +249,7 @@ Use F# lambda syntax - Use F# lambda syntax + F# のラムダ構文を使用する @@ -232,6 +257,11 @@ '<-' を使用して値を変換する + + Use 'nameof' + 'nameof' を使用する + + Use 'upcast' 'upcast' を使用する @@ -247,6 +277,11 @@ 式を否定するには 'not' を使用する + + Use '.Value' to dereference expression + '.Value' を使用して式を逆参照する + + Wrap expression in parentheses 式をかっこで囲む diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf index 296fdd04ce7..62e94f8675a 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ko.xlf @@ -7,16 +7,36 @@ 형식 정의에 누락된 '=' 추가 + + Add missing 'fun' keyword + 누락된 'fun' 키워드 추가 + + + + Add missing instance member parameter + 누락된 인스턴스 멤버 매개 변수 추가 + + Add 'new' keyword 'new' 키워드 추가 + + Add type annotation + 형식 주석 추가 + + Convert to Anonymous Record 익명 레코드로 변환 + + Use '<>' for inequality check + 같지 않음 검사에 '<>' 사용 + + Use '=' for equality check 같음 검사에 '=' 사용 @@ -33,8 +53,8 @@ - F# Dispostable Values (top-level) - F# 삭제 가능한 값(최상위) + F# Disposable Values (top-level) + F# 삭제 가능한 값(최상위 수준) @@ -64,7 +84,7 @@ Make '{0}' recursive - Make '{0}' recursive + '{0}'을(를) 재귀적으로 만들기 @@ -74,22 +94,27 @@ Remove 'return' - Remove 'return' + 'return' 제거 Remove 'return!' - Remove 'return!' + 'return!' 제거 + + + + Remove unused binding + 사용되지 않는 바인딩 제거 Remove 'yield' - Remove 'yield' + 'yield' 제거 - Remove yield!' - Remove yield!' + Remove 'yield!' + 'yield!' 제거 @@ -224,7 +249,7 @@ Use F# lambda syntax - Use F# lambda syntax + F# 람다 구문 사용 @@ -232,6 +257,11 @@ '<-'를 사용하여 값 변경 + + Use 'nameof' + 'nameof' 사용 + + Use 'upcast' 'upcast' 사용 @@ -247,6 +277,11 @@ 식을 부정하려면 'not' 사용 + + Use '.Value' to dereference expression + 식을 역참조하려면 '.Value' 사용 + + Wrap expression in parentheses 식을 괄호로 래핑 diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf index 0422c21b5bc..083e7e538dc 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pl.xlf @@ -7,16 +7,36 @@ Dodaj brakujący element znak „=” do definicji typu + + Add missing 'fun' keyword + Dodaj brakujące słowo kluczowe „fun” + + + + Add missing instance member parameter + Add missing instance member parameter + + Add 'new' keyword Dodaj słowo kluczowe „new” + + Add type annotation + Dodaj adnotację typu + + Convert to Anonymous Record Konwertuj na rekord anonimowy + + Use '<>' for inequality check + Użyj operatora „<>” do sprawdzenia nierówności + + Use '=' for equality check Użyj znaku „=” w celu sprawdzenia równości @@ -33,7 +53,7 @@ - F# Dispostable Values (top-level) + F# Disposable Values (top-level) Wartości możliwe do likwidacji języka F# (najwyższy poziom) @@ -64,7 +84,7 @@ Make '{0}' recursive - Make '{0}' recursive + Zmień element „{0}” w cykliczny @@ -74,22 +94,27 @@ Remove 'return' - Remove 'return' + Usuń element „return” Remove 'return!' - Remove 'return!' + Usuń element „return!” + + + + Remove unused binding + Usuń nieużywane powiązanie Remove 'yield' - Remove 'yield' + Usuń element „yield” - Remove yield!' - Remove yield!' + Remove 'yield!' + Usuń element „yield!” @@ -224,7 +249,7 @@ Use F# lambda syntax - Use F# lambda syntax + Użyj składni wyrażenia lambda języka F# @@ -232,6 +257,11 @@ Użyj znaku „<-” w celu zmodyfikowania wartości + + Use 'nameof' + Use 'nameof' + + Use 'upcast' Użyj operatora „upcast” @@ -247,6 +277,11 @@ Użyj operatora „not”, aby zanegować wyrażenie + + Use '.Value' to dereference expression + Użyj elementu „.Value”, aby wyłuskać wyrażenie + + Wrap expression in parentheses Ujmij wyrażenie w nawiasy diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf index 6085b32124d..621923126a9 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.pt-BR.xlf @@ -7,16 +7,36 @@ Adicionar o '=' ausente à definição de tipo + + Add missing 'fun' keyword + Adicionar palavra-chave 'fun' ausente + + + + Add missing instance member parameter + Add missing instance member parameter + + Add 'new' keyword Adicionar a palavra-chave 'new' + + Add type annotation + Adicionar uma anotação de tipo + + Convert to Anonymous Record Converter em Registro Anônimo + + Use '<>' for inequality check + Usar '<>' para a verificação de desigualdade + + Use '=' for equality check Usar '=' para verificação de igualdade @@ -33,7 +53,7 @@ - F# Dispostable Values (top-level) + F# Disposable Values (top-level) Valores F# Descartáveis (nível superior) @@ -64,7 +84,7 @@ Make '{0}' recursive - Make '{0}' recursive + Tornar '{0}' recursiva @@ -74,22 +94,27 @@ Remove 'return' - Remove 'return' + Remover 'return' Remove 'return!' - Remove 'return!' + Remover 'return!' + + + + Remove unused binding + Remover associação não usada Remove 'yield' - Remove 'yield' + Remover 'yield' - Remove yield!' - Remove yield!' + Remove 'yield!' + Remover 'yield!' @@ -224,7 +249,7 @@ Use F# lambda syntax - Use F# lambda syntax + Usar a sintaxe lambda F# @@ -232,6 +257,11 @@ Usar '<-' para modificar o valor + + Use 'nameof' + Use 'nameof' + + Use 'upcast' Usar 'upcast' @@ -247,6 +277,11 @@ Use 'not' para negar a expressão + + Use '.Value' to dereference expression + Use '.Value' para desreferenciar a expressão + + Wrap expression in parentheses Coloque a expressão entre parênteses diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf index f6dd2c6f6ad..fd61cbdc2eb 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.ru.xlf @@ -7,16 +7,36 @@ Добавьте недостающий символ "=" к определению типа. + + Add missing 'fun' keyword + Добавить отсутствующее ключевое слово "fun" + + + + Add missing instance member parameter + Добавить отсутствующий параметр экземплярного элемента + + Add 'new' keyword Добавить ключевое слово "new" + + Add type annotation + Добавить заметку типа + + Convert to Anonymous Record Преобразовать в анонимную запись + + Use '<>' for inequality check + Используйте "<>" для проверки на неравенство + + Use '=' for equality check Используйте "=" для проверки равенства @@ -33,7 +53,7 @@ - F# Dispostable Values (top-level) + F# Disposable Values (top-level) Освобождаемые значения F# (верхний уровень) @@ -64,7 +84,7 @@ Make '{0}' recursive - Make '{0}' recursive + Сделать "{0}" рекурсивным @@ -74,22 +94,27 @@ Remove 'return' - Remove 'return' + Удалить "return" Remove 'return!' - Remove 'return!' + Удалить "return!" + + + + Remove unused binding + Удалить неиспользуемую привязку Remove 'yield' - Remove 'yield' + Удалить "yield" - Remove yield!' - Remove yield!' + Remove 'yield!' + Удалить "yield!" @@ -224,7 +249,7 @@ Use F# lambda syntax - Use F# lambda syntax + Использовать синтаксис лямбда F# @@ -232,6 +257,11 @@ Используйте "<-", чтобы изменить значение + + Use 'nameof' + Использовать "nameof" + + Use 'upcast' Используйте "upcast" @@ -247,6 +277,11 @@ Используйте "not" для отрицания выражения. + + Use '.Value' to dereference expression + Использовать синтаксис ".значение" для разыменования выражения + + Wrap expression in parentheses Заключите выражение в круглые скобки. diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf index e78dffc69a7..2a80615d4b5 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.tr.xlf @@ -7,16 +7,36 @@ Tür tanımına eksik '=' işaretini ekle + + Add missing 'fun' keyword + Eksik 'fun' anahtar sözcüğünü ekle + + + + Add missing instance member parameter + Add missing instance member parameter + + Add 'new' keyword 'new' anahtar sözcüğünü ekleme + + Add type annotation + Tür ek açıklaması ekle + + Convert to Anonymous Record Anonim Kayda Dönüştür + + Use '<>' for inequality check + Eşitsizlik denetimi için '<>' kullanın + + Use '=' for equality check Eşitlik denetimi için '=' kullan @@ -33,7 +53,7 @@ - F# Dispostable Values (top-level) + F# Disposable Values (top-level) F# Atılabilir Değerleri (üst düzey) @@ -64,7 +84,7 @@ Make '{0}' recursive - Make '{0}' recursive + '{0}' bağlamasını özyinelemeli yap @@ -74,22 +94,27 @@ Remove 'return' - Remove 'return' + 'return' öğesini kaldır Remove 'return!' - Remove 'return!' + 'return!' öğesini kaldır + + + + Remove unused binding + Kullanılmayan bağlamayı kaldır Remove 'yield' - Remove 'yield' + 'yield' öğesini kaldır - Remove yield!' - Remove yield!' + Remove 'yield!' + 'yield!' ifadesini kaldır @@ -224,7 +249,7 @@ Use F# lambda syntax - Use F# lambda syntax + F# lambda söz dizimini kullan @@ -232,6 +257,11 @@ Değeri değiştirmek için '<-' kullan + + Use 'nameof' + Use 'nameof' + + Use 'upcast' 'upcast' kullan @@ -247,6 +277,11 @@ İfadeyi negatif yapmak için 'not' kullanın + + Use '.Value' to dereference expression + İfadeye başvurmak için '.Value' kullanın + + Wrap expression in parentheses İfadeyi parantez içinde sarmalayın diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf index ce0669b423a..70449e9bd87 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hans.xlf @@ -7,16 +7,36 @@ 将缺少的 "=" 添加到类型定义 + + Add missing 'fun' keyword + 添加缺少的 "fun" 关键字 + + + + Add missing instance member parameter + Add missing instance member parameter + + Add 'new' keyword 添加“新”关键字 + + Add type annotation + 添加类型注释 + + Convert to Anonymous Record 转换为匿名记录 + + Use '<>' for inequality check + 使用 "<>" 进行不相等检查 + + Use '=' for equality check 使用 "=" 进行同等性检查 @@ -33,7 +53,7 @@ - F# Dispostable Values (top-level) + F# Disposable Values (top-level) F# 可释放值(顶级) @@ -64,7 +84,7 @@ Make '{0}' recursive - Make '{0}' recursive + 使 "{0}" 递归 @@ -74,22 +94,27 @@ Remove 'return' - Remove 'return' + 删除 "return" Remove 'return!' - Remove 'return!' + 删除 "return!" + + + + Remove unused binding + 删除未使用的绑定 Remove 'yield' - Remove 'yield' + 删除 "yield" - Remove yield!' - Remove yield!' + Remove 'yield!' + 删除 "yield!" @@ -224,7 +249,7 @@ Use F# lambda syntax - Use F# lambda syntax + 使用 F# lambda 语法 @@ -232,6 +257,11 @@ 使用 "<-" 来更改值 + + Use 'nameof' + Use 'nameof' + + Use 'upcast' 使用“向上转换” @@ -247,6 +277,11 @@ 使用 "not" 对表达式求反 + + Use '.Value' to dereference expression + 对取消引用表达式使用 ".Value" + + Wrap expression in parentheses 将表达式用括号括起来 diff --git a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf index 063176df13e..43c5ce4f127 100644 --- a/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf +++ b/vsintegration/src/FSharp.Editor/xlf/FSharp.Editor.zh-Hant.xlf @@ -7,16 +7,36 @@ 將缺少的 '=' 新增至類型定義 + + Add missing 'fun' keyword + 新增缺少的 'fun' 關鍵字 + + + + Add missing instance member parameter + 新增缺少的執行個體成員參數 + + Add 'new' keyword 新增 'new' 關鍵字 + + Add type annotation + 新增型別註解 + + Convert to Anonymous Record 轉換為匿名記錄 + + Use '<>' for inequality check + 使用 '<>' 進行不等式檢查 + + Use '=' for equality check 使用 '=' 檢查是否相等 @@ -33,7 +53,7 @@ - F# Dispostable Values (top-level) + F# Disposable Values (top-level) F# 可處置的值 (最上層) @@ -64,7 +84,7 @@ Make '{0}' recursive - Make '{0}' recursive + 將 '{0}' 設為遞迴 @@ -74,22 +94,27 @@ Remove 'return' - Remove 'return' + 移除 'return' Remove 'return!' - Remove 'return!' + 移除 'return!' + + + + Remove unused binding + 移除未使用的繫結 Remove 'yield' - Remove 'yield' + 移除 'yield' - Remove yield!' - Remove yield!' + Remove 'yield!' + 移除 'yield!' @@ -224,7 +249,7 @@ Use F# lambda syntax - Use F# lambda syntax + 使用 F# lambda 語法 @@ -232,6 +257,11 @@ 使用 '<-' 來變動值 + + Use 'nameof' + 使用 'nameof' + + Use 'upcast' 使用「向上轉型」 @@ -247,6 +277,11 @@ 使用 'not' 來否定運算式 + + Use '.Value' to dereference expression + 使用 '.Value' 擷取運算式的值 + + Wrap expression in parentheses 使用括弧包裝運算式 diff --git a/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj b/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj index 9396c8c41b7..74fccb35d7b 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj +++ b/vsintegration/src/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj @@ -41,7 +41,7 @@ - + @@ -58,7 +58,6 @@ - diff --git a/vsintegration/src/FSharp.LanguageService.Base/LanguageService.cs b/vsintegration/src/FSharp.LanguageService.Base/LanguageService.cs index 257f638cb45..0b832a7d609 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/LanguageService.cs +++ b/vsintegration/src/FSharp.LanguageService.Base/LanguageService.cs @@ -1453,7 +1453,7 @@ internal abstract class MethodListForAMethodTip_DEPRECATED internal abstract bool IsThereACloseParen(); // false if either this is a call without parens "f x" or the parser recovered as in "f(x,y" - internal abstract Tuple[] GetNoteworthyParamInfoLocations(); // 0-based: longId start, longId end, open paren, (see below) - relative to the ITextSnapshot this was created against + internal abstract Tuple[] GetParameterLocations(); // 0-based: longId start, longId end, open paren, (see below) - relative to the ITextSnapshot this was created against // let resultVal = some.functionOrMethod.call ( arg1 , arg2 ) // ^ ^ ^ ^ ^ // start of call identifier ^ ^ ^ ^ ^ @@ -1465,7 +1465,7 @@ internal abstract class MethodListForAMethodTip_DEPRECATED // and thus arg ranges are e.g. computed to be: |--------|-------| // and so when in those regions, we bold that param - internal abstract ITrackingSpan[] GetParameterRanges(); // GetNoteworthyParamInfoLocations above is for unit testing; VS uses GetParameterRanges instead, to track changes as user types // TODO can we remove GetNoteworthyParamInfoLocations and move unit tests to GetParameterRanges? + internal abstract ITrackingSpan[] GetParameterRanges(); // GetParameterLocations above is for unit testing; VS uses GetParameterRanges instead, to track changes as user types // TODO can we remove GetParameterLocations and move unit tests to GetParameterRanges? internal abstract string[] GetParameterNames(); // an entry for each actual parameter, either null, or the parameter name if this is a named parameter (e.g. "f(0,y=4)" has [|null;"y"|] ) diff --git a/vsintegration/src/FSharp.LanguageService.Base/Source.cs b/vsintegration/src/FSharp.LanguageService.Base/Source.cs index 5053c4d21f3..2bc5ac3f801 100644 --- a/vsintegration/src/FSharp.LanguageService.Base/Source.cs +++ b/vsintegration/src/FSharp.LanguageService.Base/Source.cs @@ -1248,8 +1248,8 @@ private void HandleMethodTipResponse(BackgroundRequest_DEPRECATED req) if (methods != null) { TextSpan spanNotToObscureWithTipPopup = new TextSpan(); - spanNotToObscureWithTipPopup.iStartLine = methods.GetNoteworthyParamInfoLocations()[0].Item1; - spanNotToObscureWithTipPopup.iStartIndex = methods.GetNoteworthyParamInfoLocations()[0].Item2; + spanNotToObscureWithTipPopup.iStartLine = methods.GetParameterLocations()[0].Item1; + spanNotToObscureWithTipPopup.iStartIndex = methods.GetParameterLocations()[0].Item2; spanNotToObscureWithTipPopup.iEndLine = req.Line; spanNotToObscureWithTipPopup.iEndIndex = req.Col; this.methodData.Refresh(req.View, methods, spanNotToObscureWithTipPopup, req.MethodTipMiscellany); @@ -2328,7 +2328,7 @@ private static bool MethodsSeemToDiffer(MethodListForAMethodTip_DEPRECATED a, Me // this is an approximate test, that is good enough in practice return (a.GetName(0) != b.GetName(0)) || (a.GetCount() != b.GetCount()) - || (!(a.GetNoteworthyParamInfoLocations()[0].Equals(b.GetNoteworthyParamInfoLocations()[0]))); + || (!(a.GetParameterLocations()[0].Equals(b.GetParameterLocations()[0]))); } private static HashSet FormalParamNames(MethodListForAMethodTip_DEPRECATED m, int index) @@ -2448,7 +2448,7 @@ public void Refresh(MethodTipMiscellany_DEPRECATED methodTipMiscellany) var actualParamNames = System.Linq.Enumerable.ToList(System.Linq.Enumerable.Where(this.methods.GetParameterNames(), s => null != s)); - int numOfParamsUserHasSoFar = methods.GetNoteworthyParamInfoLocations().Length - 3; // -3 because first 3 ranges are [LID.start, LID.end, Paren], rest are params + int numOfParamsUserHasSoFar = methods.GetParameterLocations().Length - 3; // -3 because first 3 ranges are [LID.start, LID.end, Paren], rest are params // however note that this is never zero, "foo(" and "foo(x" both report 1 int curMeth = this.currentMethod; // start wherever the user already is. the methods are already ordered in increasing order-of-params; only can increase of user has longer param list. diff --git a/vsintegration/src/FSharp.LanguageService/BackgroundRequests.fs b/vsintegration/src/FSharp.LanguageService/BackgroundRequests.fs index c7549282ed0..5c2aa632f3c 100644 --- a/vsintegration/src/FSharp.LanguageService/BackgroundRequests.fs +++ b/vsintegration/src/FSharp.LanguageService/BackgroundRequests.fs @@ -9,7 +9,10 @@ namespace Microsoft.VisualStudio.FSharp.LanguageService open System open Microsoft.VisualStudio.TextManager.Interop open Microsoft.VisualStudio.Text -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.EditorServices open Microsoft.VisualStudio.FSharp.LanguageService.SiteProvider open Microsoft.VisualStudio.FSharp.Interactive.Session @@ -90,7 +93,7 @@ type internal FSharpLanguageServiceBackgroundRequests_DEPRECATED | _ -> // For scripts, GetProjectOptionsFromScript involves parsing and sync op, so is run on the language service thread later // For projects, we need to access RDT on UI thread, so do it on the GUI thread now - if SourceFile.MustBeSingleFileProject(fileName) then + if CompilerEnvironment.MustBeSingleFileProject(fileName) then let data = lazy // This portion is executed on the language service thread let timestamp = if source=null then System.DateTime(2000,1,1) else source.OpenedTime // source is null in unit tests @@ -109,7 +112,7 @@ type internal FSharpLanguageServiceBackgroundRequests_DEPRECATED let rdt = getServiceProvider().RunningDocumentTable let projectSite = getProjectSitesAndFiles().FindOwningProject_DEPRECATED(rdt,fileName) let enableInMemoryCrossProjectReferences = true - let _, checkOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, (fun _ -> None), projectSite, getServiceProvider(), None(*projectId*), fileName, None(*extraProjectInfo*), None(*FSharpProjectOptionsTable*), false) + let _, checkOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, (fun _ -> None), projectSite, getServiceProvider(), fileName, false) let projectFileName = projectSite.ProjectFileName let data = { ProjectSite = projectSite @@ -192,15 +195,14 @@ type internal FSharpLanguageServiceBackgroundRequests_DEPRECATED // Type-checking let typedResults,aborted = - match interactiveChecker.CheckFileInProjectAllowingStaleCachedResults(parseResults,req.FileName,req.Timestamp,req.Text,checkOptions) |> Async.RunSynchronously with - | None -> None,false - | Some FSharpCheckFileAnswer.Aborted -> + match interactiveChecker.CheckFileInProject(parseResults,req.FileName,req.Timestamp,FSharp.Compiler.Text.SourceText.ofString(req.Text),checkOptions) |> Async.RunSynchronously with + | FSharpCheckFileAnswer.Aborted -> // isResultObsolete returned true during the type check. None,true - | Some (FSharpCheckFileAnswer.Succeeded results) -> Some results, false + | FSharpCheckFileAnswer.Succeeded results -> Some results, false sr := None - parseResults,typedResults,true,aborted,req.Timestamp + parseResults,typedResults,true,aborted,int64 req.Timestamp // Now that we have the parseResults, we can SetDependencyFiles(). // @@ -216,7 +218,9 @@ type internal FSharpLanguageServiceBackgroundRequests_DEPRECATED // Furthermore, if the project is out-of-date behave just as if we were notified dependency files changed. if outOfDateProjectFileNames.Contains(projectFileName) then interactiveChecker.InvalidateConfiguration(checkOptions) - interactiveChecker.CheckProjectInBackground(checkOptions) + interactiveChecker.ParseAndCheckProject(checkOptions) + |> Async.RunSynchronously + |> ignore outOfDateProjectFileNames.Remove(projectFileName) |> ignore else @@ -231,17 +235,21 @@ type internal FSharpLanguageServiceBackgroundRequests_DEPRECATED req.IsAborted <- aborted // On 'FullTypeCheck', send a message to the reactor to start the background compile for this project, just in case if req.Reason = BackgroundRequestReason.FullTypeCheck then - interactiveChecker.CheckProjectInBackground(checkOptions) + interactiveChecker.ParseAndCheckProject(checkOptions) + |> Async.RunSynchronously + |> ignore | Some typedResults -> // Post the parse errors. if containsFreshFullTypeCheck then - for error in typedResults.Errors do - let span = new TextSpan(iStartLine=error.StartLineAlternate-1,iStartIndex=error.StartColumn,iEndLine=error.EndLineAlternate-1,iEndIndex=error.EndColumn) + for error in typedResults.Diagnostics do + let span = new TextSpan(iStartLine=error.StartLine-1,iStartIndex=error.StartColumn,iEndLine=error.EndLine-1,iEndIndex=error.EndColumn) let sev = match error.Severity with - | FSharpErrorSeverity.Warning -> Microsoft.VisualStudio.FSharp.LanguageService.Severity.Warning - | FSharpErrorSeverity.Error -> Microsoft.VisualStudio.FSharp.LanguageService.Severity.Error + | FSharpDiagnosticSeverity.Hidden -> Microsoft.VisualStudio.FSharp.LanguageService.Severity.Hint + | FSharpDiagnosticSeverity.Info -> Microsoft.VisualStudio.FSharp.LanguageService.Severity.Hint + | FSharpDiagnosticSeverity.Warning -> Microsoft.VisualStudio.FSharp.LanguageService.Severity.Warning + | FSharpDiagnosticSeverity.Error -> Microsoft.VisualStudio.FSharp.LanguageService.Severity.Error req.ResultSink.AddError(req.FileName, error.Subcategory, error.Message, span, sev) @@ -250,13 +258,15 @@ type internal FSharpLanguageServiceBackgroundRequests_DEPRECATED let scope = new FSharpIntellisenseInfo_DEPRECATED(parseResults, req.Line, req.Col, req.Snapshot, typedResults, projectSite, req.View, colorizer, getDocumentationBuilder(), provideMethodList) req.ResultIntellisenseInfo <- scope - req.ResultTimestamp <- resultTimestamp // This will be different from req.Timestamp when we're using stale results. + req.ResultTimestamp <- int resultTimestamp // This will be different from req.Timestamp when we're using stale results. req.ResultClearsDirtinessOfFile <- containsFreshFullTypeCheck // On 'FullTypeCheck', send a message to the reactor to start the background compile for this project, just in case if req.Reason = BackgroundRequestReason.FullTypeCheck then - interactiveChecker.CheckProjectInBackground(checkOptions) + interactiveChecker.ParseAndCheckProject(checkOptions) + |> Async.RunSynchronously + |> ignore // On 'QuickInfo', get the text for the quick info while we're off the UI thread, instead of doing it later if req.Reason = BackgroundRequestReason.QuickInfo then @@ -291,7 +301,7 @@ type internal FSharpLanguageServiceBackgroundRequests_DEPRECATED // OK, the last request is still active, so try to wait again lastParseFileRequest.Result.TryWaitForBackgroundRequestCompletion(millisecondsTimeout) - member __.OnActiveViewChanged(_textView: IVsTextView) = + member _.OnActiveViewChanged(_textView: IVsTextView) = parseFileResults <- None lastParseFileRequest <- null // abandon any request for untyped parse information, without cancellation @@ -300,7 +310,7 @@ type internal FSharpLanguageServiceBackgroundRequests_DEPRECATED // // THIS MUST ONLY RETURN TRUE IF ---> ExecuteBackgroundRequest is equivalent to fetching a recent, // perhaps out-of-date scope. - member __.IsRecentScopeSufficientForBackgroundRequest(reason:BackgroundRequestReason) = + member _.IsRecentScopeSufficientForBackgroundRequest(reason:BackgroundRequestReason) = match reason with | BackgroundRequestReason.MatchBraces diff --git a/vsintegration/src/FSharp.LanguageService/Colorize.fs b/vsintegration/src/FSharp.LanguageService/Colorize.fs index 235e52b98cc..fd6c8dd6b46 100644 --- a/vsintegration/src/FSharp.LanguageService/Colorize.fs +++ b/vsintegration/src/FSharp.LanguageService/Colorize.fs @@ -13,9 +13,10 @@ open Microsoft.VisualStudio.FSharp.LanguageService open Microsoft.VisualStudio.TextManager.Interop open Microsoft.VisualStudio open Microsoft.VisualStudio.Text -open FSharp.Compiler -open FSharp.Compiler.Range -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Text +open FSharp.Compiler.Tokenization #nowarn "45" // This method will be made public in the underlying IL because it may implement an interface or override a method @@ -87,7 +88,7 @@ module internal ColorStateLookup_DEPRECATED = type internal FSharpScanner_DEPRECATED(makeLineTokenizer : string -> FSharpLineTokenizer) = let mutable lineTokenizer = makeLineTokenizer "" - let mutable extraColorizations : IDictionary option = None + let mutable extraColorizations : IDictionary option = None /// Decode compiler FSharpTokenColorKind into VS TokenColor. let lookupTokenColor colorKind = @@ -148,11 +149,11 @@ type internal FSharpScanner_DEPRECATED(makeLineTokenizer : string -> FSharpLineT lineTokenizer <- makeLineTokenizer lineText /// Adjust the set of extra colorizations and return a sorted list of affected lines. - member __.SetExtraColorizations (tokens: struct (Range.range * SemanticClassificationType)[]) = + member _.SetExtraColorizations (tokens: SemanticClassificationItem[]) = if tokens.Length = 0 && extraColorizations.IsNone then [| |] else - let newExtraColorizationsKeyed = dict (tokens |> Array.groupBy (fun struct (r, _) -> Range.Line.toZ r.StartLine)) + let newExtraColorizationsKeyed = dict (tokens |> Array.groupBy (fun item -> Line.toZ item.Range.StartLine)) let oldExtraColorizationsKeyedOpt = extraColorizations extraColorizations <- Some newExtraColorizationsKeyed let changedLines = @@ -352,7 +353,7 @@ type internal FSharpColorizer_DEPRECATED member c.Buffer = buffer - member __.SetExtraColorizations tokens = scanner.SetExtraColorizations tokens + member _.SetExtraColorizations tokens = scanner.SetExtraColorizations tokens /// Implements IVsColorableItem and IVsMergeableUIItem, for colored text items diff --git a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj index 7692f24fcb1..20cfe642326 100644 --- a/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj +++ b/vsintegration/src/FSharp.LanguageService/FSharp.LanguageService.fsproj @@ -7,8 +7,6 @@ $(NoWarn);75 $(NoWarn);44 true - true - $(SystemValueTupleVersion) $(OtherFlags) --warnon:1182 --subsystemversion:6.00 false @@ -47,7 +45,7 @@ - + @@ -78,10 +76,9 @@ - - + diff --git a/vsintegration/src/FSharp.LanguageService/FSharpSource.fs b/vsintegration/src/FSharp.LanguageService/FSharpSource.fs index 446fcfffb77..b311983e6b4 100644 --- a/vsintegration/src/FSharp.LanguageService/FSharpSource.fs +++ b/vsintegration/src/FSharp.LanguageService/FSharpSource.fs @@ -20,8 +20,10 @@ open Microsoft.VisualStudio.Text.Editor open Microsoft.VisualStudio.Text.Formatting open Microsoft.VisualStudio.TextManager.Interop open Microsoft.VisualStudio.OLE.Interop -open FSharp.Compiler -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Diagnostics +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Text #nowarn "45" // This method will be made public in the underlying IL because it may implement an interface or override a method @@ -334,12 +336,12 @@ type internal FSharpSource_DEPRECATED(service:LanguageService_DEPRECATED, textLi let iSource = new FSharpSourceTestable_DEPRECATED(recolorizeWholeFile,recolorizeLine,(fun () -> VsTextLines.GetFilename textLines),(fun () -> source.IsClosed),vsFileWatch, depFileChange) :> IFSharpSource_DEPRECATED - override source.NormalizeErrorString(message) = ErrorLogger.NormalizeErrorString message - override source.NewlineifyErrorString(message) = ErrorLogger.NewlineifyErrorString message + override source.NormalizeErrorString(message) = FSharpDiagnostic.NormalizeErrorString message + override source.NewlineifyErrorString(message) = FSharpDiagnostic.NewlineifyErrorString message override source.GetExpressionAtPosition(line, col) = let upi = source.GetParseTree() - match UntypedParseImpl.TryFindExpressionIslandInPosition(Range.Pos.fromZ line col, upi.ParseTree) with + match ParsedInput.TryFindExpressionIslandInPosition(Position.fromZ line col, upi.ParseTree) with | Some islandToEvaluate -> islandToEvaluate | None -> null @@ -353,6 +355,7 @@ type internal FSharpSource_DEPRECATED(service:LanguageService_DEPRECATED, textLi yield! pi.CompilationOptions |> Array.filter(fun flag -> flag.StartsWith("--define:")) | None -> () yield "--noframework" + yield "--define:COMPILED" |] // get a sync parse of the file @@ -367,7 +370,6 @@ type internal FSharpSource_DEPRECATED(service:LanguageService_DEPRECATED, textLi LoadTime = new System.DateTime(2000,1,1) // dummy data, just enough to get a parse UnresolvedReferences = None OriginalLoadReferences = [] - ExtraProjectInfo=None Stamp = None } |> ic.GetParsingOptionsFromProjectOptions @@ -445,7 +447,7 @@ type internal FSharpSource_DEPRECATED(service:LanguageService_DEPRECATED, textLi if reason = BackgroundRequestReason.CompleteWord then let upi = source.GetParseTree() let isBetweenDotAndIdent = - match FSharp.Compiler.SourceCodeServices.UntypedParseImpl.TryFindExpressionASTLeftOfDotLeftOfCursor(Range.Pos.fromZ !line !idx, upi.ParseTree) with + match ParsedInput.TryFindExpressionASTLeftOfDotLeftOfCursor(Position.fromZ !line !idx, upi.ParseTree) with | Some(_,isBetweenDotAndIdent) -> isBetweenDotAndIdent | None -> false if isBetweenDotAndIdent then diff --git a/vsintegration/src/FSharp.LanguageService/GotoDefinition.fs b/vsintegration/src/FSharp.LanguageService/GotoDefinition.fs index 0506ed63abe..8f575af130a 100644 --- a/vsintegration/src/FSharp.LanguageService/GotoDefinition.fs +++ b/vsintegration/src/FSharp.LanguageService/GotoDefinition.fs @@ -8,8 +8,9 @@ open System open System.Diagnostics open Microsoft.VisualStudio open Microsoft.VisualStudio.TextManager.Interop -open FSharp.Compiler -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Tokenization module internal OperatorToken = @@ -73,23 +74,23 @@ module internal GotoDefinition = |> GotoDefinitionResult_DEPRECATED.MakeError else match typedResults.GetDeclarationLocation (line+1, colIdent, lineStr, qualId, false) with - | FSharpFindDeclResult.DeclNotFound(reason) -> + | FindDeclResult.DeclNotFound(reason) -> if makeAnotherAttempt then gotoDefinition true else Trace.Write("LanguageService", sprintf "Goto definition failed: Reason %+A" reason) let text = match reason with - | FSharpFindDeclFailureReason.Unknown _message -> Strings.GotoDefinitionFailed_Generic() - | FSharpFindDeclFailureReason.NoSourceCode -> Strings.GotoDefinitionFailed_NotSourceCode() - | FSharpFindDeclFailureReason.ProvidedType(typeName) -> String.Format(Strings.GotoDefinitionFailed_ProvidedType(), typeName) - | FSharpFindDeclFailureReason.ProvidedMember(name) -> String.Format(Strings.GotoDefinitionFailed_ProvidedMember(), name) + | FindDeclFailureReason.Unknown _message -> Strings.GotoDefinitionFailed_Generic() + | FindDeclFailureReason.NoSourceCode -> Strings.GotoDefinitionFailed_NotSourceCode() + | FindDeclFailureReason.ProvidedType(typeName) -> String.Format(Strings.GotoDefinitionFailed_ProvidedType(), typeName) + | FindDeclFailureReason.ProvidedMember(name) -> String.Format(Strings.GotoDefinitionFailed_ProvidedMember(), name) GotoDefinitionResult_DEPRECATED.MakeError text - | FSharpFindDeclResult.DeclFound m when System.IO.File.Exists m.FileName -> + | FindDeclResult.DeclFound m when System.IO.File.Exists m.FileName -> let span = TextSpan (iStartLine = m.StartLine-1, iEndLine = m.StartLine-1, iStartIndex = m.StartColumn, iEndIndex = m.StartColumn) GotoDefinitionResult_DEPRECATED.MakeSuccess(m.FileName, span) - | FSharpFindDeclResult.DeclFound _ (* File does not exist *) -> + | FindDeclResult.DeclFound _ (* File does not exist *) -> GotoDefinitionResult_DEPRECATED.MakeError(Strings.GotoDefinitionFailed_NotSourceCode()) - | FSharpFindDeclResult.ExternalDecl _ -> + | FindDeclResult.ExternalDecl _ -> GotoDefinitionResult_DEPRECATED.MakeError(Strings.GotoDefinitionFailed_NotSourceCode()) else Trace.Write("LanguageService", "Goto definition: No 'TypeCheckInfo' available") diff --git a/vsintegration/src/FSharp.LanguageService/Intellisense.fs b/vsintegration/src/FSharp.LanguageService/Intellisense.fs index 76b3c7b36d0..6eeffd1695d 100644 --- a/vsintegration/src/FSharp.LanguageService/Intellisense.fs +++ b/vsintegration/src/FSharp.LanguageService/Intellisense.fs @@ -8,18 +8,24 @@ namespace Microsoft.VisualStudio.FSharp.LanguageService open System open System.Collections.Generic +open System.Collections.Immutable open Microsoft.VisualStudio open Microsoft.VisualStudio.Shell.Interop open Microsoft.VisualStudio.TextManager.Interop open Microsoft.VisualStudio.Text open Microsoft.VisualStudio.OLE.Interop open FSharp.Compiler -open FSharp.Compiler.Range -open FSharp.Compiler.SourceCodeServices - +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Text +open FSharp.Compiler.Tokenization module internal TaggedText = - let appendTo (sb: System.Text.StringBuilder) (t: Layout.TaggedText) = sb.Append t.Text |> ignore + let appendTo (sb: System.Text.StringBuilder) (t: TaggedText) = sb.Append t.Text |> ignore + let toString (tts: TaggedText[]) = + tts |> Array.map (fun tt -> tt.Text) |> String.concat "" // Note: DEPRECATED CODE ONLY ACTIVE IN UNIT TESTING VIA "UNROSLYNIZED" UNIT TESTS. // @@ -28,19 +34,19 @@ module internal TaggedText = // functionality and thus have considerable value, they should ony be deleted if we are sure this // is not the case. // -type internal FSharpMethodListForAMethodTip_DEPRECATED(documentationBuilder: IDocumentationBuilder_DEPRECATED, methodsName, methods: FSharpMethodGroupItem[], nwpl: FSharpNoteworthyParamInfoLocations, snapshot: ITextSnapshot, isThisAStaticArgumentsTip: bool) = +type internal FSharpMethodListForAMethodTip_DEPRECATED(documentationBuilder: IDocumentationBuilder_DEPRECATED, methodsName, methods: MethodGroupItem[], nwpl: ParameterLocations, snapshot: ITextSnapshot, isThisAStaticArgumentsTip: bool) = inherit MethodListForAMethodTip_DEPRECATED() // Compute the tuple end points let tupleEnds = - let oneColAfter ((l,c): Pos01) = (l,c+1) - let oneColBefore ((l,c): Pos01) = (l,c-1) - [| yield Pos.toZ nwpl.LongIdStartLocation - yield Pos.toZ nwpl.LongIdEndLocation - yield oneColAfter (Pos.toZ nwpl.OpenParenLocation) + let oneColAfter ((l,c): Position01) = (l,c+1) + let oneColBefore ((l,c): Position01) = (l,c-1) + [| yield Position.toZ nwpl.LongIdStartLocation + yield Position.toZ nwpl.LongIdEndLocation + yield oneColAfter (Position.toZ nwpl.OpenParenLocation) for i in 0..nwpl.TupleEndLocations.Length-2 do - yield Pos.toZ nwpl.TupleEndLocations.[i] - let last = Pos.toZ nwpl.TupleEndLocations.[nwpl.TupleEndLocations.Length-1] + yield Position.toZ nwpl.TupleEndLocations.[i] + let last = Position.toZ nwpl.TupleEndLocations.[nwpl.TupleEndLocations.Length-1] yield if nwpl.IsThereACloseParen then oneColBefore last else last |] let safe i dflt f = if 0 <= i && i < methods.Length then f methods.[i] else dflt @@ -52,7 +58,7 @@ type internal FSharpMethodListForAMethodTip_DEPRECATED(documentationBuilder: IDo let span = ss.CreateTrackingSpan(MakeSpan(ss,sl,sc,el,ec), SpanTrackingMode.EdgeInclusive) yield span |] - let getParameters (m : FSharpMethodGroupItem) = if isThisAStaticArgumentsTip then m.StaticParameters else m.Parameters + let getParameters (m : MethodGroupItem) = if isThisAStaticArgumentsTip then m.StaticParameters else m.Parameters do assert(methods.Length > 0) @@ -60,7 +66,7 @@ type internal FSharpMethodListForAMethodTip_DEPRECATED(documentationBuilder: IDo override x.IsThereACloseParen() = nwpl.IsThereACloseParen - override x.GetNoteworthyParamInfoLocations() = tupleEnds + override x.GetParameterLocations() = tupleEnds override x.GetParameterNames() = nwpl.NamedParamNames |> Array.map Option.toObj @@ -70,16 +76,16 @@ type internal FSharpMethodListForAMethodTip_DEPRECATED(documentationBuilder: IDo override x.GetDescription(methodIndex) = safe methodIndex "" (fun m -> let buf = Text.StringBuilder() - XmlDocumentation.BuildMethodOverloadTipText_DEPRECATED(documentationBuilder, TaggedText.appendTo buf, TaggedText.appendTo buf, m.StructuredDescription, true) + XmlDocumentation.BuildMethodOverloadTipText_DEPRECATED(documentationBuilder, TaggedText.appendTo buf, TaggedText.appendTo buf, m.Description, true) buf.ToString() ) - override x.GetReturnTypeText(methodIndex) = safe methodIndex "" (fun m -> m.ReturnTypeText) + override x.GetReturnTypeText(methodIndex) = safe methodIndex "" (fun m -> m.ReturnTypeText |> TaggedText.toString) override x.GetParameterCount(methodIndex) = safe methodIndex 0 (fun m -> getParameters(m).Length) override x.GetParameterInfo(methodIndex, parameterIndex, nameOut, displayOut, descriptionOut) = - let name,display = safe methodIndex ("","") (fun m -> let p = getParameters(m).[parameterIndex] in p.ParameterName, p.Display ) + let name,display = safe methodIndex ("","") (fun m -> let p = getParameters(m).[parameterIndex] in p.ParameterName, TaggedText.toString p.Display ) nameOut <- name displayOut <- display @@ -116,7 +122,7 @@ type internal ObsoleteGlyph = // functionality and thus have considerable value, they should ony be deleted if we are sure this // is not the case. // -type internal FSharpDeclarations_DEPRECATED(documentationBuilder, declarations: FSharpDeclarationListItem[], reason: BackgroundRequestReason) = +type internal FSharpDeclarations_DEPRECATED(documentationBuilder, declarations: DeclarationListItem[], reason: BackgroundRequestReason) = inherit Declarations_DEPRECATED() @@ -125,7 +131,7 @@ type internal FSharpDeclarations_DEPRECATED(documentationBuilder, declarations: let mutable lastBestMatch = "" let isEmpty = (declarations.Length = 0) - let tab = Dictionary() + let tab = Dictionary() // Given a prefix, narrow the items to the include the ones containing that prefix, and store in a lookaside table // attached to this declaration set. @@ -183,7 +189,7 @@ type internal FSharpDeclarations_DEPRECATED(documentationBuilder, declarations: let decls = trimmedDeclarations filterText if (index >= 0 && index < decls.Length) then let buf = Text.StringBuilder() - XmlDocumentation.BuildDataTipText_DEPRECATED(documentationBuilder, TaggedText.appendTo buf, TaggedText.appendTo buf, decls.[index].StructuredDescriptionTextAsync |> Async.RunSynchronously) + XmlDocumentation.BuildDataTipText_DEPRECATED(documentationBuilder, TaggedText.appendTo buf, TaggedText.appendTo buf, decls.[index].Description) buf.ToString() else "" @@ -224,7 +230,7 @@ type internal FSharpDeclarations_DEPRECATED(documentationBuilder, declarations: // We intercept this call only to get the initial extent // of what was committed to the source buffer. let result = decl.GetName(filterText, index) - Keywords.QuoteIdentifierIfNeeded result + FSharpKeywords.QuoteIdentifierIfNeeded result override decl.IsCommitChar(commitCharacter) = // Usual language identifier rules... @@ -314,7 +320,7 @@ type internal FSharpIntellisenseInfo_DEPRECATED if provideMethodList then try // go ahead and compute this now, on this background thread, so will have info ready when UI thread asks - let noteworthyParamInfoLocations = untypedResults.FindNoteworthyParamInfoLocations(Range.Pos.fromZ brLine brCol) + let noteworthyParamInfoLocations = untypedResults.FindParameterLocations(Position.fromZ brLine brCol) // we need some typecheck info, even if stale, in order to look up e.g. method overload types/xmldocs if typedResults.HasFullTypeCheckInfo then @@ -344,7 +350,7 @@ type internal FSharpIntellisenseInfo_DEPRECATED // both point to the same longId. However we can look at the character at the 'OpenParen' location and see if it is a '(' or a '<' and then // filter the "methods" list accordingly. let isThisAStaticArgumentsTip = - let parenLine, parenCol = Pos.toZ nwpl.OpenParenLocation + let parenLine, parenCol = Position.toZ nwpl.OpenParenLocation let textAtOpenParenLocation = if brSnapshot=null then // we are unit testing, use the view @@ -418,10 +424,10 @@ type internal FSharpIntellisenseInfo_DEPRECATED // Correct the identifier (e.g. to correctly handle active pattern names that end with "BAR" token) let tokenTag = QuickParse.CorrectIdentifierToken s tokenTag - let dataTip = typedResults.GetStructuredToolTipText(Range.Line.fromZ line, colAtEndOfNames, lineText, qualId, tokenTag) + let dataTip = typedResults.GetToolTip(Line.fromZ line, colAtEndOfNames, lineText, qualId, tokenTag) match dataTip with - | FSharpStructuredToolTipText.FSharpToolTipText [] when makeSecondAttempt -> getDataTip true + | ToolTipText.ToolTipText [] when makeSecondAttempt -> getDataTip true | _ -> let buf = Text.StringBuilder() XmlDocumentation.BuildDataTipText_DEPRECATED(documentationBuilder, TaggedText.appendTo buf, TaggedText.appendTo buf, dataTip) @@ -449,7 +455,7 @@ type internal FSharpIntellisenseInfo_DEPRECATED | BackgroundRequestReason.MethodTip // param info... | BackgroundRequestReason.MatchBracesAndMethodTip // param info... | BackgroundRequestReason.CompleteWord | BackgroundRequestReason.MemberSelect | BackgroundRequestReason.DisplayMemberList // and intellisense-completion... - -> true // ...require a sync parse (so as to call FindNoteworthyParamInfoLocations and GetRangeOfExprLeftOfDot, respectively) + -> true // ...require a sync parse (so as to call FindParameterLocations and GetRangeOfExprLeftOfDot, respectively) | _ -> false /// Implements the corresponding abstract member from IntellisenseInfo in MPF. @@ -496,7 +502,7 @@ type internal FSharpIntellisenseInfo_DEPRECATED let pname = QuickParse.GetPartialLongNameEx(lineText, col-1) let _x = 1 // for breakpoint - let decls = typedResults.GetDeclarationListInfo(untypedParseInfoOpt, Range.Line.fromZ line, lineText, pname, (fun() -> [])) + let decls = typedResults.GetDeclarationListInfo(untypedParseInfoOpt, Line.fromZ line, lineText, pname, (fun() -> [])) return (new FSharpDeclarations_DEPRECATED(documentationBuilder, decls.Items, reason) :> Declarations_DEPRECATED) else // no TypeCheckInfo in ParseResult. @@ -556,7 +562,7 @@ type internal FSharpIntellisenseInfo_DEPRECATED | Some(s,colAtEndOfNames, _) -> if typedResults.HasFullTypeCheckInfo then let qualId = PrettyNaming.GetLongNameFromString s - match typedResults.GetF1Keyword(Range.Line.fromZ line,colAtEndOfNames, lineText, qualId) with + match typedResults.GetF1Keyword(Line.fromZ line,colAtEndOfNames, lineText, qualId) with | Some s -> Some s | None -> None else None diff --git a/vsintegration/src/FSharp.LanguageService/ProjectSitesAndFiles.fs b/vsintegration/src/FSharp.LanguageService/ProjectSitesAndFiles.fs index 9909aaefa57..5200249efab 100644 --- a/vsintegration/src/FSharp.LanguageService/ProjectSitesAndFiles.fs +++ b/vsintegration/src/FSharp.LanguageService/ProjectSitesAndFiles.fs @@ -40,17 +40,12 @@ open System.Diagnostics open Microsoft.VisualStudio open Microsoft.VisualStudio.TextManager.Interop open Microsoft.VisualStudio.Shell.Interop -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler +open FSharp.Compiler.CodeAnalysis open Microsoft.CodeAnalysis -open Microsoft.VisualStudio.LanguageServices open Microsoft.VisualStudio.LanguageServices.Implementation.ProjectSystem open Microsoft.VisualStudio.LanguageServices.Implementation.TaskList -open VSLangProj -open System.ComponentModel.Composition.Primitives -open Microsoft.VisualStudio.Shell -open System.Collections.Immutable - /// An additional interface that an IProjectSite object can implement to indicate it has an FSharpProjectOptions /// already available, so we don't have to recreate it @@ -141,7 +136,7 @@ type internal FSharpProjectOptionsTable () = projectTable.[otherProjectId] <- (refresh true, refresh) /// Add or update a project in the project table - member __.AddOrUpdateProject(projectId:ProjectId, refresh) = + member _.AddOrUpdateProject(projectId:ProjectId, refresh) = projectTable.[projectId] <- (refresh false, refresh) refreshInfoForProjectsThatReferenceThisProject(projectId) @@ -157,7 +152,7 @@ type internal FSharpProjectOptionsTable () = | _ -> None /// Given a projectId return the most recent set of command line options for it - member __.GetCommandLineOptionsWithProjectId(projectId:ProjectId) = + member _.GetCommandLineOptionsWithProjectId(projectId:ProjectId) = match commandLineOptions.TryGetValue projectId with | true, (sources, references, options) -> sources, references, options | _ -> [||], [||], [||] @@ -184,45 +179,45 @@ let internal provideProjectSiteProvider(workspace:VisualStudioWorkspaceImpl, pro { new IProjectSite with - member __.Description = project.Name - member __.CompilationSourceFiles = getCommandLineOptionsWithProjectId(project.Id) |> fst - member __.CompilationOptions = + member _.Description = project.Name + member _.CompilationSourceFiles = getCommandLineOptionsWithProjectId(project.Id) |> fst + member _.CompilationOptions = let _,references,options = getCommandLineOptionsWithProjectId(project.Id) Array.concat [options; references |> Array.map(fun r -> "-r:" + r)] - member __.CompilationReferences = getCommandLineOptionsWithProjectId(project.Id) |> snd + member _.CompilationReferences = getCommandLineOptionsWithProjectId(project.Id) |> snd member site.CompilationBinOutputPath = site.CompilationOptions |> Array.tryPick (fun s -> if s.StartsWith("-o:") then Some s.[3..] else None) - member __.ProjectFileName = project.FilePath - member __.AdviseProjectSiteChanges(_,_) = () - member __.AdviseProjectSiteCleaned(_,_) = () - member __.AdviseProjectSiteClosed(_,_) = () - member __.IsIncompleteTypeCheckEnvironment = false - member __.TargetFrameworkMoniker = "" - member __.ProjectGuid = project.Id.Id.ToString() - member __.LoadTime = System.DateTime.Now - member __.ProjectProvider = Some (x) - member __.BuildErrorReporter with get () = errorReporter and set (v) = errorReporter <- v + member _.ProjectFileName = project.FilePath + member _.AdviseProjectSiteChanges(_,_) = () + member _.AdviseProjectSiteCleaned(_,_) = () + member _.AdviseProjectSiteClosed(_,_) = () + member _.IsIncompleteTypeCheckEnvironment = false + member _.TargetFrameworkMoniker = "" + member _.ProjectGuid = project.Id.Id.ToString() + member _.LoadTime = System.DateTime.Now + member _.ProjectProvider = Some (x) + member _.BuildErrorReporter with get () = errorReporter and set (v) = errorReporter <- v } interface IVsHierarchy with - member __.SetSite(psp) = hier.SetSite(psp) - member __.GetSite(psp) = hier.GetSite(ref psp) - member __.QueryClose(pfCanClose) = hier.QueryClose(ref pfCanClose) - member __.Close() = hier.Close() - member __.GetGuidProperty(itemid, propid, pguid) = hier.GetGuidProperty(itemid, propid, ref pguid) - member __.SetGuidProperty(itemid, propid, rguid) = hier.SetGuidProperty(itemid, propid, ref rguid) - member __.GetProperty(itemid, propid, pvar) = hier.GetProperty(itemid, propid, ref pvar) - member __.SetProperty(itemid, propid, var) = hier.SetProperty(itemid, propid, var) - member __.GetNestedHierarchy(itemid, iidHierarchyNested, ppHierarchyNested, pitemidNested) = + member _.SetSite(psp) = hier.SetSite(psp) + member _.GetSite(psp) = hier.GetSite(ref psp) + member _.QueryClose(pfCanClose) = hier.QueryClose(ref pfCanClose) + member _.Close() = hier.Close() + member _.GetGuidProperty(itemid, propid, pguid) = hier.GetGuidProperty(itemid, propid, ref pguid) + member _.SetGuidProperty(itemid, propid, rguid) = hier.SetGuidProperty(itemid, propid, ref rguid) + member _.GetProperty(itemid, propid, pvar) = hier.GetProperty(itemid, propid, ref pvar) + member _.SetProperty(itemid, propid, var) = hier.SetProperty(itemid, propid, var) + member _.GetNestedHierarchy(itemid, iidHierarchyNested, ppHierarchyNested, pitemidNested) = hier.GetNestedHierarchy(itemid, ref iidHierarchyNested, ref ppHierarchyNested, ref pitemidNested) - member __.GetCanonicalName(itemid, pbstrName) = hier.GetCanonicalName(itemid, ref pbstrName) - member __.ParseCanonicalName(pszName, pitemid) = hier.ParseCanonicalName(pszName, ref pitemid) - member __.Unused0() = hier.Unused0() - member __.AdviseHierarchyEvents(pEventSink, pdwCookie) = hier.AdviseHierarchyEvents(pEventSink, ref pdwCookie) - member __.UnadviseHierarchyEvents(dwCookie) = hier.UnadviseHierarchyEvents(dwCookie) - member __.Unused1() = hier.Unused1() - member __.Unused2() = hier.Unused2() - member __.Unused3() = hier.Unused3() - member __.Unused4() = hier.Unused4() + member _.GetCanonicalName(itemid, pbstrName) = hier.GetCanonicalName(itemid, ref pbstrName) + member _.ParseCanonicalName(pszName, pitemid) = hier.ParseCanonicalName(pszName, ref pitemid) + member _.Unused0() = hier.Unused0() + member _.AdviseHierarchyEvents(pEventSink, pdwCookie) = hier.AdviseHierarchyEvents(pEventSink, ref pdwCookie) + member _.UnadviseHierarchyEvents(dwCookie) = hier.UnadviseHierarchyEvents(dwCookie) + member _.Unused1() = hier.Unused1() + member _.Unused2() = hier.Unused2() + member _.Unused3() = hier.Unused3() + member _.Unused4() = hier.Unused4() } /// Information about projects, open files and other active artifacts in visual studio. @@ -262,29 +257,16 @@ type internal ProjectSitesAndFiles() = | _ -> None | Some _ -> None - static let rec referencedProvideProjectSites(projectSite:IProjectSite, serviceProvider:System.IServiceProvider, extraProjectInfo:obj option, projectOptionsTable:FSharpProjectOptionsTable option) = + static let rec referencedProvideProjectSites(projectSite:IProjectSite, serviceProvider:System.IServiceProvider) = let getReferencesForSolutionService (solutionService:IVsSolution) = [| - match referencedProjects projectSite, extraProjectInfo with - | None, Some (:? VisualStudioWorkspaceImpl as workspace) when not (isNull workspace.CurrentSolution)-> - let path = projectSite.ProjectFileName - if not (String.IsNullOrWhiteSpace(path)) then - let projectId = workspace.ProjectTracker.GetOrCreateProjectIdForPath(path, projectDisplayNameOf path) - let project = workspace.CurrentSolution.GetProject(projectId) - if not (isNull project) then - for reference in project.ProjectReferences do - let project = workspace.CurrentSolution.GetProject(reference.ProjectId) - if not (isNull project) && project.Language = LanguageServiceConstants.FSharpLanguageName then - let siteProvider = provideProjectSiteProvider (workspace, project, serviceProvider, projectOptionsTable) - let referenceProject = workspace.ProjectTracker.GetProject(reference.ProjectId) - let outputPath = referenceProject.BinOutputPath - yield Some projectId, project.FilePath, outputPath, siteProvider + match referencedProjects projectSite, None with | (Some references), _ -> for p in references do match solutionService.GetProjectOfUniqueName(p.UniqueName) with | VSConstants.S_OK, (:? IProvideProjectSite as ps) -> - yield None, p.FileName, (fullOutputAssemblyPath p) |> Option.defaultValue "", ps + yield p.FileName, (fullOutputAssemblyPath p) |> Option.defaultValue "", ps | _ -> () | None, _ -> () |] @@ -296,62 +278,48 @@ type internal ProjectSitesAndFiles() = | None -> () } - static let rec referencedProjectsOf(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSite, serviceProvider, extraProjectInfo, projectOptionsTable, useUniqueStamp) = - [| for (projectId, projectFileName, outputPath, projectSiteProvider) in referencedProvideProjectSites (projectSite, serviceProvider, extraProjectInfo, projectOptionsTable) do + static let rec referencedProjectsOf(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSite, serviceProvider, useUniqueStamp) = + [| for (projectFileName, outputPath, projectSiteProvider) in referencedProvideProjectSites (projectSite, serviceProvider) do let referencedProjectOptions = // Lookup may not succeed if the project has not been established yet // In this case we go and compute the options recursively. match tryGetOptionsForReferencedProject projectFileName with - | None -> getProjectOptionsForProjectSite (enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSiteProvider.GetProjectSite(), serviceProvider, projectId, projectFileName, extraProjectInfo, projectOptionsTable, useUniqueStamp) |> snd + | None -> getProjectOptionsForProjectSite (enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSiteProvider.GetProjectSite(), serviceProvider, projectFileName, useUniqueStamp) |> snd | Some options -> options - yield projectFileName, (outputPath, referencedProjectOptions) |] + yield projectFileName, FSharpReferencedProject.CreateFSharp(outputPath, referencedProjectOptions) |] - and getProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSite, serviceProvider, projectId, fileName, extraProjectInfo, projectOptionsTable, useUniqueStamp) = + and getProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSite, serviceProvider, fileName, useUniqueStamp) = let referencedProjectFileNames, referencedProjectOptions = if enableInMemoryCrossProjectReferences then - referencedProjectsOf(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSite, serviceProvider, extraProjectInfo, projectOptionsTable, useUniqueStamp) + referencedProjectsOf(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSite, serviceProvider, useUniqueStamp) |> Array.unzip else [| |], [| |] let option = - let newOption () = { + { ProjectFileName = projectSite.ProjectFileName ProjectId = None SourceFiles = projectSite.CompilationSourceFiles OtherOptions = projectSite.CompilationOptions ReferencedProjects = referencedProjectOptions IsIncompleteTypeCheckEnvironment = projectSite.IsIncompleteTypeCheckEnvironment - UseScriptResolutionRules = SourceFile.MustBeSingleFileProject fileName + UseScriptResolutionRules = CompilerEnvironment.MustBeSingleFileProject fileName LoadTime = projectSite.LoadTime UnresolvedReferences = None OriginalLoadReferences = [] - ExtraProjectInfo=extraProjectInfo Stamp = if useUniqueStamp then (stamp <- stamp + 1L; Some stamp) else None } - match projectId, projectOptionsTable with - | Some id, Some optionsTable -> - // Get options from cache - match optionsTable.TryGetOptionsForProject(id) with - | Some (_parsingOptions, _site, projectOptions) -> - if projectSite.CompilationSourceFiles <> projectOptions.SourceFiles || - projectSite.CompilationOptions <> projectOptions.OtherOptions || - referencedProjectOptions <> projectOptions.ReferencedProjects then - newOption() - else - projectOptions - | _ -> newOption() - | _ -> newOption() referencedProjectFileNames, option /// Construct a project site for a single file. May be a single file project (for scripts) or an orphan project site (for everything else). static member ProjectSiteOfSingleFile(filename:string) : IProjectSite = - if SourceFile.MustBeSingleFileProject(filename) then + if CompilerEnvironment.MustBeSingleFileProject(filename) then Debug.Assert(false, ".fsx or .fsscript should have been treated as implicit project") failwith ".fsx or .fsscript should have been treated as implicit project" new ProjectSiteOfSingleFile(filename) :> IProjectSite - static member GetReferencedProjectSites(projectSite:IProjectSite, serviceProvider:System.IServiceProvider, extraProjectInfo, projectOptions) = - referencedProvideProjectSites (projectSite, serviceProvider, extraProjectInfo, projectOptions) - |> Seq.map (fun (_, _, _, ps) -> ps.GetProjectSite()) + static member GetReferencedProjectSites(projectSite:IProjectSite, serviceProvider:System.IServiceProvider) = + referencedProvideProjectSites (projectSite, serviceProvider) + |> Seq.map (fun (_, _, ps) -> ps.GetProjectSite()) |> Seq.toArray member art.SetSource_DEPRECATED(buffer:IVsTextLines, source:IFSharpSource_DEPRECATED) : unit = @@ -359,10 +327,10 @@ type internal ProjectSitesAndFiles() = (buffer :?> IVsUserData).SetData(&guid, source) |> ErrorHandler.ThrowOnFailure |> ignore /// Create project options for this project site. - static member GetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSite:IProjectSite, serviceProvider, projectId, filename, extraProjectInfo, projectOptionsTable, useUniqueStamp) = + static member GetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSite:IProjectSite, serviceProvider, filename, useUniqueStamp) = match projectSite with | :? IHaveCheckOptions as hco -> hco.OriginalCheckOptions() - | _ -> getProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSite, serviceProvider, projectId, filename, extraProjectInfo, projectOptionsTable, useUniqueStamp) + | _ -> getProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, tryGetOptionsForReferencedProject, projectSite, serviceProvider, filename, useUniqueStamp) /// Create project site for these project options static member CreateProjectSiteForScript (filename, referencedProjectFileNames, checkOptions) = @@ -386,7 +354,7 @@ type internal ProjectSitesAndFiles() = member art.GetDefinesForFile_DEPRECATED(rdt:IVsRunningDocumentTable, filename : string, checker:FSharpChecker) = // The only caller of this function calls it each time it needs to colorize a line, so this call must execute very fast. - if SourceFile.MustBeSingleFileProject(filename) then + if CompilerEnvironment.MustBeSingleFileProject(filename) then let parsingOptions = { FSharpParsingOptions.Default with IsInteractive = true} CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions else @@ -404,7 +372,7 @@ type internal ProjectSitesAndFiles() = CompilerEnvironment.GetCompilationDefinesForEditing parsingOptions member art.TryFindOwningProject_DEPRECATED(rdt:IVsRunningDocumentTable, filename) = - if SourceFile.MustBeSingleFileProject(filename) then None + if CompilerEnvironment.MustBeSingleFileProject(filename) then None else match VsRunningDocumentTable.FindDocumentWithoutLocking(rdt,filename) with | Some(hier, _textLines) -> diff --git a/vsintegration/src/FSharp.LanguageService/Vs.fs b/vsintegration/src/FSharp.LanguageService/Vs.fs index 5ce30d677bd..95fae820b59 100644 --- a/vsintegration/src/FSharp.LanguageService/Vs.fs +++ b/vsintegration/src/FSharp.LanguageService/Vs.fs @@ -3,18 +3,12 @@ namespace Microsoft.VisualStudio.FSharp.LanguageService open System -open System.IO -open System.Collections -open System.Collections.Generic -open System.Reflection open Microsoft.VisualStudio open Microsoft.VisualStudio.Editor -open Microsoft.VisualStudio.Shell open Microsoft.VisualStudio.Shell.Interop open Microsoft.VisualStudio.Text open Microsoft.VisualStudio.TextManager.Interop -open Microsoft.VisualStudio.OLE.Interop -open FSharp.Compiler.Range +open FSharp.Compiler.Text open System.Runtime.InteropServices /// Helper methods for interoperating with COM diff --git a/vsintegration/src/FSharp.LanguageService/XmlDocumentation.fs b/vsintegration/src/FSharp.LanguageService/XmlDocumentation.fs index 49e54e41ee5..d6871052665 100644 --- a/vsintegration/src/FSharp.LanguageService/XmlDocumentation.fs +++ b/vsintegration/src/FSharp.LanguageService/XmlDocumentation.fs @@ -6,10 +6,19 @@ namespace Microsoft.VisualStudio.FSharp.LanguageService open System +open System.Collections.Immutable open System.Text.RegularExpressions -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Layout -open FSharp.Compiler.Layout.TaggedTextOps +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Symbols +open FSharp.Compiler.Syntax +open FSharp.Compiler.Text +open FSharp.Compiler.Text.TaggedText + +[] +module internal Utils2 = + let taggedTextToString (tts: TaggedText[]) = + tts |> Array.map (fun tt -> tt.Text) |> String.concat "" type internal ITaggedTextCollector_DEPRECATED = abstract Add: text: TaggedText -> unit @@ -31,7 +40,7 @@ type internal TextSanitizingCollector_DEPRECATED(collector, ?lineLimit: int) = count <- count + 1 | _ -> isEmpty <- false - endsWithLineBreak <- text.Tag = LayoutTag.LineBreak + endsWithLineBreak <- text.Tag = TextTag.LineBreak if endsWithLineBreak then count <- count + 1 collector text @@ -56,14 +65,14 @@ type internal TextSanitizingCollector_DEPRECATED(collector, ?lineLimit: int) = addTaggedTextEntry (tagText paragraph) if i < paragraphs.Length - 1 then // insert two line breaks to separate paragraphs - addTaggedTextEntry Literals.lineBreak - addTaggedTextEntry Literals.lineBreak) + addTaggedTextEntry TaggedText.lineBreak + addTaggedTextEntry TaggedText.lineBreak) interface ITaggedTextCollector_DEPRECATED with member this.Add taggedText = // TODO: bail out early if line limit is already hit match taggedText.Tag with - | LayoutTag.Text -> reportTextLines taggedText.Text + | TextTag.Text -> reportTextLines taggedText.Text | _ -> addTaggedTextEntry taggedText member this.IsEmpty = isEmpty @@ -99,7 +108,7 @@ module internal XmlDocumentation = else xml let AppendHardLine(collector: ITaggedTextCollector_DEPRECATED) = - collector.Add Literals.lineBreak + collector.Add TaggedText.lineBreak let EnsureHardLine(collector: ITaggedTextCollector_DEPRECATED) = if not collector.EndsWithLineBreak then AppendHardLine collector @@ -107,17 +116,17 @@ module internal XmlDocumentation = let AppendOnNewLine (collector: ITaggedTextCollector_DEPRECATED) (line:string) = if line.Length > 0 then EnsureHardLine collector - collector.Add(TaggedTextOps.tagText line) + collector.Add(TaggedText.tagText line) /// Append an XmlCommnet to the segment. let AppendXmlComment_DEPRECATED(documentationProvider:IDocumentationBuilder_DEPRECATED, sink: ITaggedTextCollector_DEPRECATED, xml, showExceptions, showParameters, paramName) = match xml with | FSharpXmlDoc.None -> () - | FSharpXmlDoc.XmlDocFileSignature(filename,signature) -> + | FSharpXmlDoc.FromXmlFile(filename,signature) -> documentationProvider.AppendDocumentation(sink, filename, signature, showExceptions, showParameters, paramName) - | FSharpXmlDoc.Text(rawText, _) -> - let processedXml = ProcessXml("\n\n" + String.concat "\n" rawText) + | FSharpXmlDoc.FromXmlText(xmlDoc) -> + let processedXml = ProcessXml("\n\n" + String.concat "\n" xmlDoc.UnprocessedLines) documentationProvider.AppendDocumentationFromProcessedXML(sink, processedXml, showExceptions, showParameters, paramName) let private AddSeparator (collector: ITaggedTextCollector_DEPRECATED) = @@ -127,7 +136,7 @@ module internal XmlDocumentation = AppendHardLine collector /// Build a data tip text string with xml comments injected. - let BuildTipText_DEPRECATED(documentationProvider:IDocumentationBuilder_DEPRECATED, dataTipText: FSharpStructuredToolTipElement list, textCollector, xmlCollector, showText, showExceptions, showParameters) = + let BuildTipText_DEPRECATED(documentationProvider:IDocumentationBuilder_DEPRECATED, dataTipText: ToolTipElement list, textCollector, xmlCollector, showText, showExceptions, showParameters) = let textCollector: ITaggedTextCollector_DEPRECATED = TextSanitizingCollector_DEPRECATED(textCollector, lineLimit = 45) :> _ let xmlCollector: ITaggedTextCollector_DEPRECATED = TextSanitizingCollector_DEPRECATED(xmlCollector, lineLimit = 45) :> _ @@ -136,21 +145,21 @@ module internal XmlDocumentation = AddSeparator textCollector AddSeparator xmlCollector - let Process add (dataTipElement: FSharpStructuredToolTipElement) = + let Process add (dataTipElement: ToolTipElement) = match dataTipElement with - | FSharpStructuredToolTipElement.None -> false + | ToolTipElement.None -> false - | FSharpStructuredToolTipElement.Group (overloads) -> + | ToolTipElement.Group (overloads) -> let overloads = Array.ofList overloads let len = overloads.Length if len >= 1 then addSeparatorIfNecessary add if showText then - let AppendOverload (item :FSharpToolTipElementData<_>) = - if not(FSharp.Compiler.Layout.isEmptyL item.MainDescription) then - if not textCollector.IsEmpty then textCollector.Add Literals.lineBreak - renderL (taggedTextListR textCollector.Add) item.MainDescription |> ignore + let AppendOverload (item :ToolTipElementData) = + if taggedTextToString item.MainDescription <> "" then + if not textCollector.IsEmpty then textCollector.Add TaggedText.lineBreak + item.MainDescription |> Seq.iter textCollector.Add AppendOverload(overloads.[0]) if len >= 2 then AppendOverload(overloads.[1]) @@ -158,14 +167,14 @@ module internal XmlDocumentation = if len >= 4 then AppendOverload(overloads.[3]) if len >= 5 then AppendOverload(overloads.[4]) if len >= 6 then - textCollector.Add Literals.lineBreak + textCollector.Add TaggedText.lineBreak textCollector.Add (tagText(PrettyNaming.FormatAndOtherOverloadsString(len-5))) let item0 = overloads.[0] item0.Remarks |> Option.iter (fun r -> - textCollector.Add Literals.lineBreak - renderL (taggedTextListR textCollector.Add) r |> ignore) + textCollector.Add TaggedText.lineBreak + r |> Seq.iter textCollector.Add |> ignore) AppendXmlComment_DEPRECATED(documentationProvider, xmlCollector, item0.XmlDoc, showExceptions, showParameters, item0.ParamName) @@ -173,16 +182,16 @@ module internal XmlDocumentation = else false - | FSharpStructuredToolTipElement.CompositionError(errText) -> + | ToolTipElement.CompositionError(errText) -> textCollector.Add(tagText errText) true List.fold Process false dataTipText |> ignore - let BuildDataTipText_DEPRECATED(documentationProvider, textCollector, xmlCollector, FSharpToolTipText(dataTipText)) = + let BuildDataTipText_DEPRECATED(documentationProvider, textCollector, xmlCollector, ToolTipText(dataTipText)) = BuildTipText_DEPRECATED(documentationProvider, dataTipText, textCollector, xmlCollector, true, true, false) - let BuildMethodOverloadTipText_DEPRECATED(documentationProvider, textCollector, xmlCollector, FSharpToolTipText(dataTipText), showParams) = + let BuildMethodOverloadTipText_DEPRECATED(documentationProvider, textCollector, xmlCollector, ToolTipText(dataTipText), showParams) = BuildTipText_DEPRECATED(documentationProvider, dataTipText, textCollector, xmlCollector, false, false, showParams) diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/AssemblyInfo.cs b/vsintegration/src/FSharp.ProjectSystem.Base/AssemblyInfo.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/AssemblyInfo.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/AssemblyInfo.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/AssemblyReferenceNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/AssemblyReferenceNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/AssemblyReferenceNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/AssemblyReferenceNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Attributes.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Attributes.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Attributes.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Attributes.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAFileItem.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAFileItem.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAFileItem.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAFileItem.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAFolderItem.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAFolderItem.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAFolderItem.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAFolderItem.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OANavigableProjectItems.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OANavigableProjectItems.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OANavigableProjectItems.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Automation/OANavigableProjectItems.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OANullProperty.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OANullProperty.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OANullProperty.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Automation/OANullProperty.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAProject.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAProject.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAProject.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAProject.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAProjectItem.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAProjectItem.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAProjectItem.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAProjectItem.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAProjectItems.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAProjectItems.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAProjectItems.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAProjectItems.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAProperties.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAProperties.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAProperties.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAProperties.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAProperty.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAProperty.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAProperty.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAProperty.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAReferenceFolderItem.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAReferenceFolderItem.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAReferenceFolderItem.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAReferenceFolderItem.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAReferenceItem.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAReferenceItem.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/OAReferenceItem.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Automation/OAReferenceItem.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAAssemblyReference.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAAssemblyReference.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAAssemblyReference.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAAssemblyReference.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OABuildManager.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OABuildManager.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OABuildManager.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OABuildManager.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAComReference.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAComReference.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAComReference.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAComReference.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAProjectReference.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAProjectReference.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAProjectReference.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAProjectReference.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAReferenceBase.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAReferenceBase.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAReferenceBase.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAReferenceBase.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAReferences.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAReferences.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAReferences.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAReferences.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAVSProject.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAVSProject.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAVSProject.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAVSProject.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAVSProjectItem.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAVSProjectItem.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Automation/VSProject/OAVSProjectItem.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Automation/VSProject/OAVSProjectItem.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/BuildDependency.cs b/vsintegration/src/FSharp.ProjectSystem.Base/BuildDependency.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/BuildDependency.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/BuildDependency.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/BuildPropertyPage.cs b/vsintegration/src/FSharp.ProjectSystem.Base/BuildPropertyPage.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/BuildPropertyPage.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/BuildPropertyPage.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ComReferenceNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/ComReferenceNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/ComReferenceNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/ComReferenceNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ConfigProvider.cs b/vsintegration/src/FSharp.ProjectSystem.Base/ConfigProvider.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/ConfigProvider.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/ConfigProvider.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ConfigurationProperties.cs b/vsintegration/src/FSharp.ProjectSystem.Base/ConfigurationProperties.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/ConfigurationProperties.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/ConfigurationProperties.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/DataObject.cs b/vsintegration/src/FSharp.ProjectSystem.Base/DataObject.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/DataObject.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/DataObject.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/DesignPropertyDescriptor.cs b/vsintegration/src/FSharp.ProjectSystem.Base/DesignPropertyDescriptor.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/DesignPropertyDescriptor.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/DesignPropertyDescriptor.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/DocumentManager.cs b/vsintegration/src/FSharp.ProjectSystem.Base/DocumentManager.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/DocumentManager.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/DocumentManager.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/EnumDependencies.cs b/vsintegration/src/FSharp.ProjectSystem.Base/EnumDependencies.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/EnumDependencies.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/EnumDependencies.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectSystem.Base.csproj b/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectSystem.Base.csproj rename to vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.csproj diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/FSharp.ProjectSystem.Base.ruleset b/vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.ruleset similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/FSharp.ProjectSystem.Base.ruleset rename to vsintegration/src/FSharp.ProjectSystem.Base/FSharp.ProjectSystem.Base.ruleset diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/FileChangeManager.cs b/vsintegration/src/FSharp.ProjectSystem.Base/FileChangeManager.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/FileChangeManager.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/FileChangeManager.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/FileDocumentManager.cs b/vsintegration/src/FSharp.ProjectSystem.Base/FileDocumentManager.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/FileDocumentManager.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/FileDocumentManager.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/FileNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/FileNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/FileNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/FileNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/FolderNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/FolderNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/FolderNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/FolderNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/GlobalSuppressions.cs b/vsintegration/src/FSharp.ProjectSystem.Base/GlobalSuppressions.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/GlobalSuppressions.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/GlobalSuppressions.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/GroupingReferenceNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/GroupingReferenceNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/GroupingReferenceNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/GroupingReferenceNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/HierarchyNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/HierarchyNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/HierarchyNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/HierarchyNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/IDEBuildLogger.cs b/vsintegration/src/FSharp.ProjectSystem.Base/IDEBuildLogger.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/IDEBuildLogger.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/IDEBuildLogger.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ImageHandler.cs b/vsintegration/src/FSharp.ProjectSystem.Base/ImageHandler.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/ImageHandler.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/ImageHandler.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Interfaces.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Interfaces.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Interfaces.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Interfaces.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/LinkedFileNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/LinkedFileNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/LinkedFileNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/LinkedFileNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/LocalizableProperties.cs b/vsintegration/src/FSharp.ProjectSystem.Base/LocalizableProperties.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/LocalizableProperties.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/LocalizableProperties.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Microsoft.VisualStudio.Package.Project.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Microsoft.VisualStudio.Package.Project.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Microsoft.VisualStudio.Package.Project.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Microsoft.VisualStudio.Package.Project.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Microsoft.VisualStudio.Package.Project.resx b/vsintegration/src/FSharp.ProjectSystem.Base/Microsoft.VisualStudio.Package.Project.resx similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Microsoft.VisualStudio.Package.Project.resx rename to vsintegration/src/FSharp.ProjectSystem.Base/Microsoft.VisualStudio.Package.Project.resx diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Misc/AutomationExtenderManager.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Misc/AutomationExtenderManager.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Misc/AutomationExtenderManager.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Misc/AutomationExtenderManager.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Misc/ConnectionPointContainer.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Misc/ConnectionPointContainer.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Misc/ConnectionPointContainer.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Misc/ConnectionPointContainer.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Misc/ExternDll.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Misc/ExternDll.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Misc/ExternDll.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Misc/ExternDll.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Misc/NativeMethods.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Misc/NativeMethods.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Misc/NativeMethods.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Misc/NativeMethods.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Misc/UnsafeNativeMethods.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Misc/UnsafeNativeMethods.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Misc/UnsafeNativeMethods.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Misc/UnsafeNativeMethods.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/NodeProperties.cs b/vsintegration/src/FSharp.ProjectSystem.Base/NodeProperties.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/NodeProperties.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/NodeProperties.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/OleServiceProvider.cs b/vsintegration/src/FSharp.ProjectSystem.Base/OleServiceProvider.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/OleServiceProvider.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/OleServiceProvider.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Output.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Output.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Output.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Output.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/OutputGroup.cs b/vsintegration/src/FSharp.ProjectSystem.Base/OutputGroup.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/OutputGroup.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/OutputGroup.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectBase.files b/vsintegration/src/FSharp.ProjectSystem.Base/ProjectBase.files similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectBase.files rename to vsintegration/src/FSharp.ProjectSystem.Base/ProjectBase.files diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectConfig.cs b/vsintegration/src/FSharp.ProjectSystem.Base/ProjectConfig.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectConfig.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/ProjectConfig.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectDesignerDocumentManager.cs b/vsintegration/src/FSharp.ProjectSystem.Base/ProjectDesignerDocumentManager.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectDesignerDocumentManager.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/ProjectDesignerDocumentManager.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectElement.cs b/vsintegration/src/FSharp.ProjectSystem.Base/ProjectElement.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectElement.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/ProjectElement.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectFactory.cs b/vsintegration/src/FSharp.ProjectSystem.Base/ProjectFactory.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectFactory.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/ProjectFactory.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectFileConstants.cs b/vsintegration/src/FSharp.ProjectSystem.Base/ProjectFileConstants.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectFileConstants.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/ProjectFileConstants.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectNode.CopyPaste.cs b/vsintegration/src/FSharp.ProjectSystem.Base/ProjectNode.CopyPaste.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectNode.CopyPaste.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/ProjectNode.CopyPaste.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectNode.Events.cs b/vsintegration/src/FSharp.ProjectSystem.Base/ProjectNode.Events.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectNode.Events.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/ProjectNode.Events.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/ProjectNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/ProjectNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectOptions.cs b/vsintegration/src/FSharp.ProjectSystem.Base/ProjectOptions.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectOptions.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/ProjectOptions.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectPackage.cs b/vsintegration/src/FSharp.ProjectSystem.Base/ProjectPackage.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectPackage.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/ProjectPackage.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectReferenceNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/ProjectReferenceNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/ProjectReferenceNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/ProjectReferenceNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/PropertiesEditorLauncher.cs b/vsintegration/src/FSharp.ProjectSystem.Base/PropertiesEditorLauncher.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/PropertiesEditorLauncher.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/PropertiesEditorLauncher.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ReferenceContainerNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/ReferenceContainerNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/ReferenceContainerNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/ReferenceContainerNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/ReferenceNode.cs b/vsintegration/src/FSharp.ProjectSystem.Base/ReferenceNode.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/ReferenceNode.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/ReferenceNode.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/CodeGeneratorRegistrationAttribute.cs b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/CodeGeneratorRegistrationAttribute.cs deleted file mode 100644 index 83e17e61b8e..00000000000 --- a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/CodeGeneratorRegistrationAttribute.cs +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -using System; -using System.Globalization; - -namespace Microsoft.VisualStudio.Shell -{ - /// - /// This attribute adds a custom file generator registry entry for specific file - /// type. - /// For Example: - /// [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Generators\ - /// {fae04ec1-301f-11d3-bf4b-00c04f79efbc}\MyGenerator] - /// "CLSID"="{AAAA53CC-3D4F-40a2-BD4D-4F3419755476}" - /// "GeneratesDesignTimeSource" = d'1' - /// - /// - [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] - public sealed class CodeGeneratorRegistrationAttribute : RegistrationAttribute - { - private string _contextGuid; - private Type _generatorType; - private Guid _generatorGuid; - private string _generatorName; - private string _generatorRegKeyName; - private bool _generatesDesignTimeSource = false; - private bool _generatesSharedDesignTimeSource = false; - /// - /// Creates a new CodeGeneratorRegistrationAttribute attribute to register a custom - /// code generator for the provided context. - /// - /// The type of Code generator. Type that implements IVsSingleFileGenerator - /// The generator name - /// The context GUID this code generator would appear under. - public CodeGeneratorRegistrationAttribute(Type generatorType, string generatorName, string contextGuid) - { - if (generatorType == null) - throw new ArgumentNullException("generatorType"); - if (generatorName == null) - throw new ArgumentNullException("generatorName"); - if (contextGuid == null) - throw new ArgumentNullException("contextGuid"); - - _contextGuid = contextGuid; - _generatorType = generatorType; - _generatorName = generatorName; - _generatorRegKeyName = generatorType.Name; - _generatorGuid = generatorType.GUID; - } - - /// - /// Get the generator Type - /// - public Type GeneratorType - { - get { return _generatorType; } - } - - /// - /// Get the Guid representing the project type - /// - public string ContextGuid - { - get { return _contextGuid; } - } - - /// - /// Get the Guid representing the generator type - /// - public Guid GeneratorGuid - { - get { return _generatorGuid; } - } - - /// - /// Get or Set the GeneratesDesignTimeSource value - /// - public bool GeneratesDesignTimeSource - { - get { return _generatesDesignTimeSource; } - set { _generatesDesignTimeSource = value; } - } - - /// - /// Get or Set the GeneratesSharedDesignTimeSource value - /// - public bool GeneratesSharedDesignTimeSource - { - get { return _generatesSharedDesignTimeSource; } - set { _generatesSharedDesignTimeSource = value; } - } - - - /// - /// Gets the Generator name - /// - public string GeneratorName - { - get { return _generatorName; } - } - - /// - /// Gets the Generator reg key name under - /// - public string GeneratorRegKeyName - { - get { return _generatorRegKeyName; } - set { _generatorRegKeyName = value; } - } - - /// - /// Property that gets the generator base key name - /// - private string GeneratorRegKey - { - get { return string.Format(CultureInfo.InvariantCulture, @"Generators\{0}\{1}", ContextGuid, GeneratorRegKeyName); } - } - /// - /// Called to register this attribute with the given context. The context - /// contains the location where the registration inforomation should be placed. - /// It also contains other information such as the type being registered and path information. - /// - public override void Register(RegistrationContext context) - { - using (Key childKey = context.CreateKey(GeneratorRegKey)) - { - childKey.SetValue(string.Empty, GeneratorName); - childKey.SetValue("CLSID", GeneratorGuid.ToString("B")); - - if (GeneratesDesignTimeSource) - childKey.SetValue("GeneratesDesignTimeSource", 1); - - if (GeneratesSharedDesignTimeSource) - childKey.SetValue("GeneratesSharedDesignTimeSource", 1); - - } - - } - - /// - /// Unregister this file extension. - /// - /// - public override void Unregister(RegistrationContext context) - { - context.RemoveKey(GeneratorRegKey); - } - } -} diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/ComponentPickerPropertyPageAttribute.cs b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/ComponentPickerPropertyPageAttribute.cs deleted file mode 100644 index 0ab49e00e03..00000000000 --- a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/ComponentPickerPropertyPageAttribute.cs +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -using System; -using System.Globalization; - -namespace Microsoft.VisualStudio.Shell -{ - /// - /// This attribute adds the property page registration for Component picker - /// For Example: - /// [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0Exp\ComponentPickerPages\My Component Page] - /// @="#13925" - /// "Package"="{B0002DC2-56EE-4931-93F7-70D6E9863940}" - /// "Page"="{0A9F3920-3881-4f50-8986-9EDEC7B33566}" - /// "Sort"=dword:00000014 - /// "AddToMru"=dword:00000000 - /// "ComponentType"=".Net Assembly" - /// - [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] - public sealed class ComponentPickerPropertyPageAttribute : RegistrationAttribute - { - private string _packageGuid; - private string _pageGuid; - private string _pageRegKeyName; - - private string _componentType = null; - private int _sortOrder = -1; - private bool _addToMRU = false; - private string _defaultPageNameValue = ""; - - /// - /// Creates a new ComponentPicker page registration attribute to register a custom - /// component picker property page. - /// - /// The type of pacakge that provides the page - /// The page type that needs to be registered - /// Registry key name for the page. - public ComponentPickerPropertyPageAttribute(Type packageType, Type pageType, string pageRegKeyName) - { - if (packageType == null) - throw new ArgumentNullException("packageType"); - if (pageType == null) - throw new ArgumentNullException("pageType"); - if (pageRegKeyName == null) - throw new ArgumentNullException("pageName"); - - _packageGuid = packageType.GUID.ToString("B"); - _pageGuid = pageType.GUID.ToString("B"); - _pageRegKeyName = pageRegKeyName; - } - - /// - /// Get the pacakge Guid - /// - public string PacakgeGuid - { - get { return _packageGuid; } - } - - /// - /// Get the Guid representing the property page - /// - public string PageGuid - { - get { return _pageGuid; } - } - - /// - /// Get the property page reg key name. - /// - public string PageRegKeyName - { - get { return _pageRegKeyName; } - } - - /// - /// Get or Set the AddToMru value - /// - public bool AddToMru - { - get { return _addToMRU; } - set { _addToMRU = value; } - } - - /// - /// Get or set the Component Type value. - /// - public string ComponentType - { - get{ return _componentType; } - set{ _componentType = value; } - } - - /// - /// Get or Set the Sort reg value - /// - public int SortOrder - { - get { return _sortOrder; } - set { _sortOrder = value; } - } - - /// - /// get / sets default page name value - /// - public string DefaultPageNameValue - { - get { return _defaultPageNameValue; } - set { _defaultPageNameValue = value; } - } - - /// - /// Property that gets the page reg key name - /// - private string PageRegKey - { - get { return string.Format(CultureInfo.InvariantCulture, @"ComponentPickerPages\{0}", PageRegKeyName); } - } - /// - /// Called to register this attribute with the given context. The context - /// contains the location where the registration inforomation should be placed. - /// It also contains other information such as the type being registered and path information. - /// - public override void Register(RegistrationContext context) - { - using (Key childKey = context.CreateKey(PageRegKey)) - { - childKey.SetValue(string.Empty, DefaultPageNameValue); - childKey.SetValue("Package", PacakgeGuid); - childKey.SetValue("Page", PageGuid); - - if (SortOrder != -1) - childKey.SetValue("Sort", SortOrder); - if (AddToMru) - childKey.SetValue("AddToMru", Convert.ToInt32(AddToMru)); - if (ComponentType != null) - childKey.SetValue("ComponentType", ComponentType); - - } - - } - - /// - /// Unregister property page - /// - /// - public override void Unregister(RegistrationContext context) - { - context.RemoveKey(PageRegKey); - } - } -} diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/EditorFactoryNotifyForProjectAttribute.cs b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/EditorFactoryNotifyForProjectAttribute.cs deleted file mode 100644 index ba43e3de099..00000000000 --- a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/EditorFactoryNotifyForProjectAttribute.cs +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -using System; -using System.Globalization; - -namespace Microsoft.VisualStudio.Shell -{ - /// - /// This attribute adds a File Extension for a Project System so that the Project - /// will call IVsEditorFactoryNotify methods when an item of this type is added - /// or renamed. - /// - /// - /// For example: - /// [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Projects\ - /// {F184B08F-C81C-45F6-A57F-5ABD9991F28F}\FileExtensions\.addin] - /// "EditorFactoryNotify"="{FA3CD31E-987B-443A-9B81-186104E8DAC1}" - /// - [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] - [System.Runtime.InteropServices.ComVisibleAttribute(false)] - public sealed class EditorFactoryNotifyForProjectAttribute : RegistrationAttribute - { - #region Fields - private Guid projectType; - private Guid factoryType; - private string fileExtension; - #endregion - - #region Constructors - /// - /// Creates a new ProvideEditorFactoryNotifyForProject attribute to register a - /// file extension with a project. - /// - /// The type of project; can be a Type, a GUID or a string representation of a GUID - /// The type of factory; can be a Type, a GUID or a string representation of a GUID - /// The file extension the EditorFactoryNotify wants to handle - public EditorFactoryNotifyForProjectAttribute(object projectType, string fileExtension, object factoryType) - { - if (factoryType == null) - { - throw new ArgumentNullException("factoryType", "Factory type can not be null."); - } - if (projectType == null) - { - throw new ArgumentNullException("projectType", "Project type can not be null."); - } - - this.fileExtension = fileExtension; - - // figure out what type of object they passed in and get the GUID from it - if (factoryType is string) - { - this.factoryType = new Guid(factoryType.ToString()); - } - else if (factoryType is Type) - { - this.factoryType = ((Type)factoryType).GUID; - } - else if (factoryType is Guid) - { - this.factoryType = (Guid)factoryType; - } - else - { - throw new ArgumentException( "Parameter is expected to be an instance of the type 'Type' or 'Guid'.", "factoryType"); - } - - // figure out what type of object they passed in and get the GUID from it - if (projectType is string) - { - this.projectType = new Guid(projectType.ToString()); - } - else if (projectType is Type) - { - this.projectType = ((Type)projectType).GUID; - } - else if (projectType is Guid) - { - this.projectType = (Guid)projectType; - } - else - { - throw new ArgumentException("Parameter is expected to be an instance of the type 'Type' or 'Guid'.", "projectType"); - } - } - #endregion - - #region Properties - /// - /// Get the Guid representing the type of the editor factory - /// - //public Guid FactoryType - public object FactoryType - { - get { return factoryType; } - } - - /// - /// Get the Guid representing the project type - /// - public object ProjectType - { - get { return projectType; } - } - - /// - /// Get or Set the extension of the XML files that support this view - /// - public string FileExtension - { - get { return fileExtension; } - } - - /// - /// Extention path within the registration context - /// - private string ProjectFileExtensionPath - { - get - { - return string.Format(CultureInfo.InvariantCulture, "Projects\\{0}\\FileExtensions\\{1}", projectType.ToString("B"), fileExtension); - } - } - #endregion - - #region Methods - /// - /// Called to register this attribute with the given context. The context - /// contains the location where the registration information should be placed. - /// It also contains other information such as the type being registered and path information. - /// - /// Given context to register in - public override void Register(RegistrationContext context) - { - if (context == null) - { - throw new ArgumentNullException("context"); - } - - context.Log.WriteLine(String.Format(CultureInfo.CurrentCulture, "EditorFactoryNoftifyForProject: {0} Extension = {1}\n", projectType.ToString(), fileExtension)); - - using (Key childKey = context.CreateKey(ProjectFileExtensionPath)) - { - childKey.SetValue("EditorFactoryNotify", factoryType.ToString("B")); - } - } - - /// - /// Unregister this file extension. - /// - /// Given context to unregister from - public override void Unregister(RegistrationContext context) - { - if (context != null) - { - context.RemoveKey(ProjectFileExtensionPath); - } - } - #endregion - } -} diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/ProvideAppCommandLineAttribute.cs b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/ProvideAppCommandLineAttribute.cs deleted file mode 100644 index e6b95483994..00000000000 --- a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/ProvideAppCommandLineAttribute.cs +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -using System; -using System.ComponentModel.Design; -using System.Globalization; - -namespace Microsoft.VisualStudio.Shell -{ - /// - /// This attribute adds a commandline option to devenv for a specfic package - /// type. - /// For Example: - /// [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\AppCommandLine\MyAppCommand - /// "Arguments"="*" - /// "DemandLoad"=dword:1 - /// "Package"="{5C48C732-5C7F-40f0-87A7-05C4F15BC8C3}" - /// "HelpString"="#200" - /// - /// - [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] - public sealed class ProvideAppCommandLineAttribute : RegistrationAttribute - { - #region fields - private string _name = null; - private string _args = null; - private int _demandLoad = 0; - private Guid _pkgGuid = Guid.Empty; - private string _helpString = null; - #endregion - - #region ctors - /// - /// Constructor - /// - /// Name of new command line option - /// package type - public ProvideAppCommandLineAttribute(string name, Type packageType) - { - if (string.IsNullOrEmpty(name)) - throw new ArgumentNullException("Name is null"); - - if (packageType == null) - throw new ArgumentNullException("Package Type is null."); - - _name = name; - _pkgGuid = packageType.GUID; - } - #endregion - - #region Properties - /// - /// Name of the command line - /// - public string Name - { - get { return _name; } - set { _name = value; } - } - - /// - /// Default arguments for the command line - /// - public string Arguments - { - get { return _args; } - set { _args = value; } - } - - /// - /// Should the package be demand loaded. - /// - public int DemandLoad - { - get { return _demandLoad; } - set { _demandLoad = value; } - } - - /// - /// Guid of the package providing the command line - /// - public string PackageGuid - { - get { return _pkgGuid.ToString("B"); } - set { _pkgGuid = new Guid(value.ToString()); } - } - - /// - /// Help string to show for the command. Can be a resource id - /// - public string HelpString - { - get { return _helpString; } - set { _helpString = value; } - } - - #endregion - - #region overridden methods - /// - /// Called to register this attribute with the given context. The context - /// contains the location where the registration information should be placed. - /// it also contains such as the type being registered, and path information. - /// - public override void Register(RegistrationContext context) - { - - if (context == null) - { - throw new ArgumentNullException("context"); - } - - context.Log.WriteLine(String.Format(CultureInfo.CurrentCulture, "AppCommandLineKey: {0} \n", AppCommandLineRegKeyName)); - - using (Key childKey = context.CreateKey(AppCommandLineRegKeyName)) - { - childKey.SetValue("Arguments", Arguments); - childKey.SetValue("DemandLoad", DemandLoad); - childKey.SetValue("Package", PackageGuid); - childKey.SetValue("HelpString", HelpString); - } - } - - /// - /// Unregister this App command line - /// - public override void Unregister(RegistrationContext context) - { - context.RemoveKey(AppCommandLineRegKeyName); - } - #endregion - - #region helpers - /// - /// The reg key name of this AppCommandLine. - /// - private string AppCommandLineRegKeyName - { - get - { - return string.Format(CultureInfo.InvariantCulture, @"AppCommandLine\{0}", Name); - } - } - #endregion - } -} - diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/SolutionPersistenceRegistrationAttribute.cs b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/SolutionPersistenceRegistrationAttribute.cs deleted file mode 100644 index a5847ef6ab3..00000000000 --- a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/SolutionPersistenceRegistrationAttribute.cs +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -using System; -using System.Globalization; - -namespace Microsoft.VisualStudio.Shell -{ - /// - /// This attribute adds a solution persistence property name and related Guid - /// type. - /// For Example: - /// [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0Exp\SolutionPersistence\MyProperty] - /// "Default"="{AAAA53CC-3D4F-40a2-BD4D-4F3419755476}" - /// - [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] - internal sealed class SolutionPersistenceRegistrationAttribute : RegistrationAttribute - { - /// - /// Property name - /// - private string _propName; - - /// - /// Creates a new SolutionPersistenceRegistrationAttribute attribute to register a solution persistence attribute - /// for the provided context. - /// - /// Name of the property - public SolutionPersistenceRegistrationAttribute(string propName) - { - _propName = propName; - } - - /// - /// Get the property name - /// - public string PropName - { - get { return _propName; } - } - - /// - /// Property that gets the SolutionPersistence base key name - /// - private string SolutionPersistenceRegKey - { - get { return "SolutionPersistence"; } - } - - /// - /// Called to register this attribute with the given context. The context - /// contains the location where the registration inforomation should be placed. - /// It also contains other information such as the type being registered and path information. - /// - public override void Register(RegistrationContext context) - { - context.Log.WriteLine(string.Format(CultureInfo.InvariantCulture, "ProvideSolutionProps: ({0} = {1})", context.ComponentType.GUID.ToString("B"), PropName)); - Key childKey = null; - - try - { - childKey = context.CreateKey(string.Format(CultureInfo.InvariantCulture, "{0}\\{1}", SolutionPersistenceRegKey, PropName)); - childKey.SetValue(string.Empty, context.ComponentType.GUID.ToString("B")); - } - finally - { - if (childKey != null) childKey.Close(); - } - } - - /// - /// Unregister this property. - /// - /// - public override void Unregister(RegistrationContext context) - { - context.RemoveKey(string.Format(CultureInfo.InvariantCulture, "{0}\\{1}", SolutionPersistenceRegKey, PropName)); - } - } -} diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideLanguagePropertyAttribute.cs b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideLanguagePropertyAttribute.cs deleted file mode 100644 index 046d45609cd..00000000000 --- a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideLanguagePropertyAttribute.cs +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - - -using System; -using System.IO; -using System.ComponentModel; -using System.Globalization; -using Microsoft.Win32; - -namespace Microsoft.VisualStudio.Shell -{ - /// - /// This class can be used for registering a Web Application Property for a project - /// - [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] - internal sealed class WAProvideLanguagePropertyAttribute : RegistrationAttribute - { - private Type _languageTemplateFactoryType; - private string _propertyName; - private string _propertyValueString; - private int _propertyValueInt; - - - public WAProvideLanguagePropertyAttribute(Type languageTemplateFactoryType, string propertyName, string propertyValue) - { - _languageTemplateFactoryType = languageTemplateFactoryType; - _propertyName = propertyName; - _propertyValueString = propertyValue; - _propertyValueInt = 0; - } - - public WAProvideLanguagePropertyAttribute(Type languageTemplateFactoryType, string propertyName, int propertyValue) - { - _languageTemplateFactoryType = languageTemplateFactoryType; - _propertyName = propertyName; - _propertyValueString = null; - _propertyValueInt = propertyValue; - } - - public WAProvideLanguagePropertyAttribute(Type languageTemplateFactoryType, string propertyName, bool propertyValue) - { - _languageTemplateFactoryType = languageTemplateFactoryType; - _propertyName = propertyName; - _propertyValueString = null; - _propertyValueInt = propertyValue ? 1 : 0; - } - - public WAProvideLanguagePropertyAttribute(Type languageTemplateFactoryType, string propertyName, Type propertyValue) - { - _languageTemplateFactoryType = languageTemplateFactoryType; - _propertyName = propertyName; - _propertyValueString = propertyValue.GUID.ToString("B"); - _propertyValueInt = 0; - } - - public Type LanguageTemplateFactoryType - { - get - { - return _languageTemplateFactoryType; - } - } - - public string PropertyName - { - get - { - return _propertyName; - } - } - - public string PropertyValueString - { - get - { - return _propertyValueString; - } - } - - public int PropertyValueInt - { - get - { - return _propertyValueInt; - } - } - - private string LanguagePropertyKey - { - get { return string.Format(CultureInfo.InvariantCulture, "Projects\\{0}\\WebApplicationProperties", LanguageTemplateFactoryType.GUID.ToString("B")); } - } - - - public override void Register(RegistrationContext context) - { - using (Key propertyKey = context.CreateKey(LanguagePropertyKey)) - { - if (PropertyValueString != null) - { - propertyKey.SetValue(PropertyName, PropertyValueString); - } - else - { - propertyKey.SetValue(PropertyName, PropertyValueInt); - } - } - } - - public override void Unregister(RegistrationContext context) - { - context.RemoveKey(LanguagePropertyKey); - } - } -} diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideProjectFactoryAttribute.cs b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideProjectFactoryAttribute.cs deleted file mode 100644 index 3979abce9b3..00000000000 --- a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideProjectFactoryAttribute.cs +++ /dev/null @@ -1,243 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -extern alias ImmutableShell; - -using System; -using System.IO; -using System.ComponentModel; -using System.Globalization; -using Microsoft.Win32; - - - -namespace Microsoft.VisualStudio.Shell -{ - /// - /// This attribute can be used to register information about a project system that supports - /// the WAP flavor/sub-type. - /// - [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] - internal class WAProvideProjectFactoryAttribute : ImmutableShell::Microsoft.VisualStudio.Shell.RegistrationAttribute - { - private Type _factoryType; - private string _displayProjectFileExtensions = null; - private string _name; - private string _displayName = null; - private string _defaultProjectExtension = null; - private string _possibleProjectExtensions = null; - private string _projectTemplatesDirectory; - private int _sortPriority = 100; - private Guid _folderGuid = Guid.Empty; - private string _languageVsTemplate; - private string _templateGroupIDsVsTemplate; - private string _templateIDsVsTemplate; - private string _displayProjectTypeVsTemplate; - private string _projectSubTypeVsTemplate; - private bool _newProjectRequireNewFolderVsTemplate = false; - private bool _showOnlySpecifiedTemplatesVsTemplate = false; - - public WAProvideProjectFactoryAttribute(Type factoryType, string name) - { - if (factoryType == null) - { - throw new ArgumentNullException("factoryType"); - } - - _factoryType = factoryType; - _name = name; - } - - public WAProvideProjectFactoryAttribute(Type factoryType, - string name, - string languageVsTemplate, - bool showOnlySpecifiedTemplatesVsTemplate, - string templateGroupIDsVsTemplate, - string templateIDsVsTemplate) - { - if (factoryType == null) - { - throw new ArgumentNullException("factoryType"); - } - - _factoryType = factoryType; - _name = name; - _languageVsTemplate = languageVsTemplate; - _templateGroupIDsVsTemplate = templateGroupIDsVsTemplate; - _templateIDsVsTemplate = templateIDsVsTemplate; - _showOnlySpecifiedTemplatesVsTemplate = showOnlySpecifiedTemplatesVsTemplate; - } - - public string Name - { - get { return _name; } - } - - public string DisplayName - { - get { return _displayName; } - } - - public int SortPriority - { - get { return _sortPriority; } - set { _sortPriority = value; } - } - - public Type FactoryType - { - get - { - return _factoryType; - } - } - - public string DisplayProjectFileExtensions - { - get - { - return _displayProjectFileExtensions; - } - } - - public string DefaultProjectExtension - { - get - { - return _defaultProjectExtension; - } - } - - public string PossibleProjectExtensions - { - get - { - return _possibleProjectExtensions; - } - } - - public string ProjectTemplatesDirectory - { - get - { - return _projectTemplatesDirectory; - } - } - - public string FolderGuid - { - get { return _folderGuid.ToString("B"); } - set { _folderGuid = new Guid(value); } - } - - public string LanguageVsTemplate - { - get { return _languageVsTemplate; } - set { _languageVsTemplate = value; } - } - - public string DisplayProjectTypeVsTemplate - { - get { return _displayProjectTypeVsTemplate; } - set { _displayProjectTypeVsTemplate = value; } - } - - public string ProjectSubTypeVsTemplate - { - get { return _projectSubTypeVsTemplate; } - set { _projectSubTypeVsTemplate = value; } - } - - public bool NewProjectRequireNewFolderVsTemplate - { - get { return _newProjectRequireNewFolderVsTemplate; } - set { _newProjectRequireNewFolderVsTemplate = value; } - } - - public bool ShowOnlySpecifiedTemplatesVsTemplate - { - get { return _showOnlySpecifiedTemplatesVsTemplate; } - set { _showOnlySpecifiedTemplatesVsTemplate = value; } - } - - public string TemplateGroupIDsVsTemplate - { - get { return _templateGroupIDsVsTemplate; } - set { _templateGroupIDsVsTemplate = value; } - } - - public string TemplateIDsVsTemplate - { - get { return _templateIDsVsTemplate; } - set { _templateIDsVsTemplate = value; } - } - - private string ProjectRegKey - { - get { return string.Format(CultureInfo.InvariantCulture, "Projects\\{0}", FactoryType.GUID.ToString("B")); } - } - - private string NewPrjTemplateRegKey(RegistrationContext context) - { - return string.Format(CultureInfo.InvariantCulture, "NewProjectTemplates\\TemplateDirs\\{0}\\/1", context.ComponentType.GUID.ToString("B")); - } - - public override void Register(RegistrationContext context) - { - //context.Log.WriteLine(SR.GetString(SR.Reg_NotifyProjectFactory, FactoryType.Name)); - - using (Key projectKey = context.CreateKey(ProjectRegKey)) - { - projectKey.SetValue(string.Empty, Name); - if (_displayName != null) - projectKey.SetValue("DisplayName", _displayName); - if (_displayProjectFileExtensions != null) - projectKey.SetValue("DisplayProjectFileExtensions", _displayProjectFileExtensions); - projectKey.SetValue("Package", context.ComponentType.GUID.ToString("B")); - if (_defaultProjectExtension != null) - projectKey.SetValue("DefaultProjectExtension", _defaultProjectExtension); - if (_possibleProjectExtensions != null) - projectKey.SetValue("PossibleProjectExtensions", _possibleProjectExtensions); - if (_projectTemplatesDirectory != null) - { - if (!System.IO.Path.IsPathRooted(_projectTemplatesDirectory)) - { - // If path is not rooted, make it relative to package path - _projectTemplatesDirectory = System.IO.Path.Combine(context.ComponentPath, _projectTemplatesDirectory); - } - projectKey.SetValue("ProjectTemplatesDir", context.EscapePath(_projectTemplatesDirectory)); - } - - // VsTemplate Specific Keys - // - if (_languageVsTemplate != null) - projectKey.SetValue("Language(VsTemplate)", _languageVsTemplate); - - if (_showOnlySpecifiedTemplatesVsTemplate || _templateGroupIDsVsTemplate != null || _templateIDsVsTemplate != null) - { - int showOnlySpecifiedTemplatesVsTemplate = _showOnlySpecifiedTemplatesVsTemplate ? 1 : 0; - projectKey.SetValue("ShowOnlySpecifiedTemplates(VsTemplate)", showOnlySpecifiedTemplatesVsTemplate); - } - - if (_templateGroupIDsVsTemplate != null) - projectKey.SetValue("TemplateGroupIDs(VsTemplate)", _templateGroupIDsVsTemplate); - - if (_templateIDsVsTemplate != null) - projectKey.SetValue("TemplateIDs(VsTemplate)", _templateIDsVsTemplate); - - if (_displayProjectTypeVsTemplate != null) - projectKey.SetValue("DisplayProjectType(VsTemplate)", _displayProjectTypeVsTemplate); - - if (_projectSubTypeVsTemplate != null) - projectKey.SetValue("ProjectSubType(VsTemplate)", _projectSubTypeVsTemplate); - - if (_newProjectRequireNewFolderVsTemplate) - projectKey.SetValue("NewProjectRequireNewFolder(VsTemplate)", (int)1); - } - } - - public override void Unregister(RegistrationContext context) - { - context.RemoveKey(ProjectRegKey); - context.RemoveKey(NewPrjTemplateRegKey(context)); - } - } -} diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideProjectFactoryTemplateMappingAttribute.cs b/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideProjectFactoryTemplateMappingAttribute.cs deleted file mode 100644 index e6f9f64707a..00000000000 --- a/vsintegration/src/FSharp.ProjectSystem.Base/RegistrationAttributes/WAProvideProjectFactoryTemplateMappingAttribute.cs +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - - -using Microsoft.VisualStudio.Shell; -using System; -using System.ComponentModel; -using System.Globalization; - -namespace Microsoft.VisualStudio.Shell -{ - /// - /// This attribute is used to declare a new project system that supports Web Application Projects - /// and define a mapping between the real project system and the 'fake' one that is defined only - /// to store some WAP specific properties in the registry. - /// - [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] - internal sealed class WAProvideProjectFactoryTemplateMappingAttribute : RegistrationAttribute - { - private const string WAPFactoryGuid = "{349c5851-65df-11da-9384-00065b846f21}"; - private string _flavoredFactoryGuid; - private Type _languageTemplateFactoryType; - - public WAProvideProjectFactoryTemplateMappingAttribute(string flavoredFactoryGuid, Type languageTemplateFactoryType) - { - _flavoredFactoryGuid = flavoredFactoryGuid; - _languageTemplateFactoryType = languageTemplateFactoryType; - } - - public string FlavoredFactoryGuid - { - get - { - return _flavoredFactoryGuid; - } - } - - public Type LanguageTemplateFactoryType - { - get - { - return _languageTemplateFactoryType; - } - } - - private string LanguageTemplatesKey - { - get { return string.Format(CultureInfo.InvariantCulture, "Projects\\{0}\\LanguageTemplates", WAPFactoryGuid); } - } - - - public override void Register(RegistrationContext context) - { - using (Key languageTemplatesKey = context.CreateKey(LanguageTemplatesKey)) - { - languageTemplatesKey.SetValue(FlavoredFactoryGuid, LanguageTemplateFactoryType.GUID.ToString("B")); - } - } - - public override void Unregister(RegistrationContext context) - { - context.RemoveKey(LanguageTemplatesKey); - } - } -} diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Resources/imagelis.bmp b/vsintegration/src/FSharp.ProjectSystem.Base/Resources/imagelis.bmp similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Resources/imagelis.bmp rename to vsintegration/src/FSharp.ProjectSystem.Base/Resources/imagelis.bmp diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/SelectionListener.cs b/vsintegration/src/FSharp.ProjectSystem.Base/SelectionListener.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/SelectionListener.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/SelectionListener.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/SolutionListener.cs b/vsintegration/src/FSharp.ProjectSystem.Base/SolutionListener.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/SolutionListener.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/SolutionListener.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/SolutionListenerForProjectEvents.cs b/vsintegration/src/FSharp.ProjectSystem.Base/SolutionListenerForProjectEvents.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/SolutionListenerForProjectEvents.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/SolutionListenerForProjectEvents.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/SolutionListenerForProjectOpen.cs b/vsintegration/src/FSharp.ProjectSystem.Base/SolutionListenerForProjectOpen.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/SolutionListenerForProjectOpen.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/SolutionListenerForProjectOpen.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/SolutionListenerForProjectReferenceUpdate.cs b/vsintegration/src/FSharp.ProjectSystem.Base/SolutionListenerForProjectReferenceUpdate.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/SolutionListenerForProjectReferenceUpdate.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/SolutionListenerForProjectReferenceUpdate.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/StructuresEnums.cs b/vsintegration/src/FSharp.ProjectSystem.Base/StructuresEnums.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/StructuresEnums.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/StructuresEnums.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/SuspendFileChanges.cs b/vsintegration/src/FSharp.ProjectSystem.Base/SuspendFileChanges.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/SuspendFileChanges.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/SuspendFileChanges.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Tracing.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Tracing.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Tracing.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Tracing.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/TrackDocumentsHelper.cs b/vsintegration/src/FSharp.ProjectSystem.Base/TrackDocumentsHelper.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/TrackDocumentsHelper.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/TrackDocumentsHelper.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/TypeConverters.cs b/vsintegration/src/FSharp.ProjectSystem.Base/TypeConverters.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/TypeConverters.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/TypeConverters.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/UIThread.cs b/vsintegration/src/FSharp.ProjectSystem.Base/UIThread.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/UIThread.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/UIThread.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/UpdateSolutionEventsListener.cs b/vsintegration/src/FSharp.ProjectSystem.Base/UpdateSolutionEventsListener.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/UpdateSolutionEventsListener.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/UpdateSolutionEventsListener.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Utilities.cs b/vsintegration/src/FSharp.ProjectSystem.Base/Utilities.cs similarity index 99% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/Utilities.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/Utilities.cs index b638c4c69fb..00cf273f321 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/Utilities.cs +++ b/vsintegration/src/FSharp.ProjectSystem.Base/Utilities.cs @@ -740,7 +740,7 @@ public static Microsoft.Build.Evaluation.Project InitializeMsBuildProject(Micros { var lclGlobalProperties = (null == globalProperties) ? new Dictionary() : new Dictionary(globalProperties) { - { "FSharpCompilerPath", Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) } + { "FSharpCompilerPath", Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Tools") } }; buildProject = buildEngine.LoadProject(fullProjectPath, lclGlobalProperties, null); buildProject.IsBuildEnabled = true; diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/VSMDCodeDomProvider.cs b/vsintegration/src/FSharp.ProjectSystem.Base/VSMDCodeDomProvider.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/VSMDCodeDomProvider.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/VSMDCodeDomProvider.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/VSProjectConstants.cs b/vsintegration/src/FSharp.ProjectSystem.Base/VSProjectConstants.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/VSProjectConstants.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/VSProjectConstants.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/VSShellUtilities.cs b/vsintegration/src/FSharp.ProjectSystem.Base/VSShellUtilities.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/VSShellUtilities.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/VSShellUtilities.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/VsCommands.cs b/vsintegration/src/FSharp.ProjectSystem.Base/VsCommands.cs similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/VsCommands.cs rename to vsintegration/src/FSharp.ProjectSystem.Base/VsCommands.cs diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.cs.xlf similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.cs.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.cs.xlf diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.de.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.de.xlf similarity index 99% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.de.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.de.xlf index d5de79f0e5c..500919c1429 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.de.xlf @@ -612,7 +612,7 @@ A 'UsingTask' tag which registers the '{1}' task was found in the project file '{0}'. 'UsingTask' tags in the project file take precedence over those in the imported .TARGETS files, and therefore could be used to execute arbitrary code during an otherwise unmodified build process. - In der Projektdatei "{0}" wurde ein <UsingTask>-Tag gefunden, das die Aufgabe "{1}" registriert. <UsingTask>-Tags in der Projektdatei haben Vorrang gegenüber denen in importierten TARGETS-Dateien. Daher könnten sie dazu verwendet werden, willkürlichen Code während eines sonst unveränderten Buildprozesses auszuführen. + In der Projektdatei "{1}" wurde ein <UsingTask>-Tag gefunden, das die Aufgabe "{0}" registriert. <UsingTask>-Tags in der Projektdatei haben Vorrang gegenüber denen in importierten TARGETS-Dateien. Daher könnten sie dazu verwendet werden, willkürlichen Code während eines sonst unveränderten Buildprozesses auszuführen. diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.es.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.es.xlf similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.es.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.es.xlf diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf similarity index 99% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf index 98538c729e1..61528d55d61 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.fr.xlf @@ -131,8 +131,8 @@ Les noms de fichiers et de dossiers ne peuvent pas : - être des chaînes vides ; - être des noms réservés au système, notamment 'CON', 'AUX', PRN', 'COM1' ou 'LPT2' ; -- contenir uniquement '.' ; -- comporter les caractères suivants : / ? : & \ * " < > | # % +- contenir uniquement '.' +- comporter les caractères suivants : / ? : & \ * " < > | # % diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.it.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.it.xlf similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.it.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.it.xlf diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.ja.xlf similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ja.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.ja.xlf diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.ko.xlf similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ko.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.ko.xlf diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.pl.xlf similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pl.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.pl.xlf diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.pt-BR.xlf similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.pt-BR.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.pt-BR.xlf diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf similarity index 98% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf index d279159cd7d..88d0087541f 100644 --- a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.ru.xlf @@ -592,12 +592,12 @@ An 'Import' of the file '{1}' was found in the project file '{0}'. This file is not registered as a safe file to import, and could contain targets and tasks that are harmful. If this imported file is indeed considered safe, then it can be registered by writing to the registry key {2}. - В файле проекта "{0}" найден <Import> файла "{1}". Этот файл не зарегистрирован как безопасный для импорта, и может содержать опасные цели и задания. Если файл является безопасным, он может быть зарегистрирован при помощи записи в раздел реестра {2}. + В файле проекта "{1}" найден импорт файла "{0}". Этот файл не зарегистрирован как безопасный для импорта и может содержать уязвимые места или злонамеренные задачи. Если этот файл в самом деле безопасен, его можно зарегистрировать при помощи записи в раздел реестра {2}. An 'Import' of the file '{1}' was found in the user project file '{0}'. All imports in user project files are considered unsafe. - В файле проекта пользователя "{0}" найден <Import> файла "{1}". Весь импорт в пользовательских файлах проекта считается небезопасным. + В файле проекта пользователя "{0}" найден импорт файла "{1}". Весь импорт в пользовательских файлах проекта считается небезопасным. diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.tr.xlf similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.tr.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.tr.xlf diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.zh-Hans.xlf similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hans.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.zh-Hans.xlf diff --git a/vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.zh-Hant.xlf similarity index 100% rename from vsintegration/src/FSharp.ProjectSystem.Base/Project/xlf/Microsoft.VisualStudio.Package.Project.zh-Hant.xlf rename to vsintegration/src/FSharp.ProjectSystem.Base/xlf/Microsoft.VisualStudio.Package.Project.zh-Hant.xlf diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj b/vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj similarity index 91% rename from vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj rename to vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj index 8408b7a2989..0ab10a03ae5 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/FSharp.ProjectSystem.FSharp.fsproj @@ -7,8 +7,6 @@ FSharp.ProjectSystem.FSharp $(NoWarn);52;62;75 true - true - $(SystemValueTupleVersion) $(OtherFlags) --warnon:1182 --subsystemversion:6.00 false @@ -79,9 +77,9 @@ $PackageFolder$\FSharp.ProjectSystem.FSharp.dll - FSharp.Compiler.Private - $(FSProductVersion) - $PackageFolder$\FSharp.Compiler.Private.dll + FSharp.Compiler.Service + $(FSharpCompilerServiceVersion) + $PackageFolder$\FSharp.Compiler.Service.dll FSharp.Compiler.Server.Shared @@ -104,10 +102,10 @@ - + - - + + @@ -126,6 +124,8 @@ + + diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/MenusAndCommands.vsct b/vsintegration/src/FSharp.ProjectSystem.FSharp/MenusAndCommands.vsct index 4a95e4cfcfc..b1e215a3db9 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/MenusAndCommands.vsct +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/MenusAndCommands.vsct @@ -47,6 +47,9 @@ + + + @@ -126,6 +129,14 @@ DynamicVisibility | DefaultInvisible + + + + + + @@ -375,6 +390,7 @@ + diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/Overview.xml b/vsintegration/src/FSharp.ProjectSystem.FSharp/Overview.xml deleted file mode 100644 index c2837d0a6d5..00000000000 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/Overview.xml +++ /dev/null @@ -1,257 +0,0 @@ - - - - - ../../../Common - - true - false - true - true - true - true - true - true - true - true - true - - - - C# Example.FSharpProject - FSharp Project - Integrating a project type for FSharp. - - - - This sample is a component of FSharp integration inside Visual Studio and it demostrates how to create a project type and a winforms designer. - The sample is based on the Project Framework and references the source code installed with the VSSDK. - Support is also included for the WPF designer. - The main goals of this sample are: - - Creating a Visual Studio project type for building Windows Forms applications using Iron FSharp - Creating a Visual Studio project type for building Web Application Projects using Iron FSharp - Creating a Visual Studio project type for building Web Site Projects using Iron FSharp - Creating a Visual Studio project type for building WPF Applications using Iron FSharp - Project.jpg - - - - - Example - 3 - Project.jpg - Iron FSharp - C# - VisualStudioIntegration\Samples\FSharpIntegration\ - Project\FSharpProject.sln - VisualStudioIntegration\Samples\FSharpIntegration\Project\TDD\ - FSharpProject.UnitTest.sln - - - Iron FSharp - Project - - - - - Open the FSharpProject.sln solution. - - - Press F5 to build the sample, register it in the experimental hive, and launch Visual Studio from the experimental hive. - - - - - - To see the sample's functionality... - - - On the File menu, click New Project to display the New Project dialog box. - - - Create a new FSharpProject Console Application. - The new solution appears in Solution Explorer, the file Program.py appears in the code editor, and the project - properties appear in the Properties Browser. - - - Right-click the project node and click Properties. - - - The Property Pages dialog box appears and displays the common and configuration properties. - - - Close the dialog box. Press F5 to build and run the FSharp program Program.py. - A console window opens, displays "Hello VSIP!", and closes. - - - - - - Visual Studio SDK Website - http://msdn.microsoft.com/vstudio/extend - - - - - Create an instance and make sure the instance implements IVsPackage. - - - Make sure that the project can add a reference. - - - - - Make sure that the project can add new FSharp items. - - - Make sure that the project can add a reference. - - - - - Automation.cs - - Contains a number of classes that enables automation of the FSharp project and py files in the Iron FSharp Project. Especially the project object enables the CodeModel - - - - ConfigurationPropertyPages.cs - - Contains a definition for the build property page in the Project Designer. - - - - EditorFactory.cs - - Contains a definition for the editor factory that creates the editor for editting iron python code files in code/design view - - - - Enums.cs - - Contains enumerations defined for the Iron FSharp Project. - - - - Guids.cs - - Defines the Package and Project guids. - - - - PkgCmd.vsct - - Defines the layout for Iron FSharp specific commands. - - - - ProjectDocumentsListenerForMainFileUpdates.cs - Implements a project listener that updates the mainfile project property in the iron python project whenever files are renamed/added/deleted - - - PropertyPages.cs - Contains the implementation for the General Tab in the Projct Designer - - - FSharpConfigProvider.cs - Enables the Any CPU Platform name for Iron FSharp Projects - - - FSharpFileNode.cs - Contains Iron FSharp specific implementation details of FileNode - - - FSharpFileNodeProperties.cs - Contains a definition of the Iron FSharp specific Node properties. The class derives from SingleFileNodeProperties which means that a Custom Tool can be associated with a py file. - - - FSharpMenus.cs - - Defines CommandIDs matching the commands defined symbols in PkgCmd.vsct. - - - - FSharpProjectFactory.cs - - Defines the Iron FSharp project factory. - - - - FSharpProjectFileConstants.cs - - Defines constants used by the Iron FSharp project file. - - - - FSharpProjectNode.cs - - Contains the implementation for the project node in the Iron FSharp Project. - - - - FSharpProjectNodeProperties.cs - Defines Iron FSharp specific Node Properties for the ProjectNode object - - - FSharpPrjectPackage.cs - - Defines the package object for Iron FSharp project package. - - - - FSharpProjectReferenceNode.cs - - Defines Iron FSharp Project specific requirements for project to project references. - - - - FSharpReferenceContainerNode.cs - - Defines the reference container node for Iron FSharp projects. - - - - SelectionElementValueChangedListener.cs - Defines a Selection changed listener that enables the RunGenerator on a python file node to be triggered when focus is removed from an active iron python document window - - - VSMDFSharpProvider.cs - Contains the definition of the FSharp CodeDOM Provider. The provider listen for reference event in order to stay in sync with list of references in the FSharp project - - - WPFProviders\FSharpEventBindingProvider.cs - Contains the FSharpEventBindingProvider which provides the communication between the WPF designer and the associated code file for adding and navigating to event handlers. - - - WPFProviders\FSharpRuntimeNameProvider.cs - Contains the FSharpRuntimeNameFactory which contains logic to generate uniquely named code fields for WPF designer scenarios. - - - WPFProviders\FSharpWPFFlavor.cs - - Contains the definition of the Iron FSharp project flavor of the WPFFlavor. - - - - WPFProviders\FSharpWPFProjectFactory.cs - - Defines the factory object for the Iron FSharp project flavor of the WPFFlavor. - - - - - - 2005-11-21 - Created this sample for the Visual Studio SDK. - - - 2007-07-19 - Added support for WPF Applications. - - - 2007-10-10 - Fixed bugs related to references. - - - \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs b/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs index 3ec5d637660..38ad605c2bc 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/Project.fs @@ -88,21 +88,21 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem // This interface is thread-safe, assuming "inner" is thread-safe interface Microsoft.VisualStudio.FSharp.Editor.IProjectSite with - member __.Description = inner.Description - member __.CompilationSourceFiles = inner.CompilationSourceFiles - member __.CompilationOptions = inner.CompilationOptions - member __.CompilationReferences = inner.CompilationReferences - member __.CompilationBinOutputPath = inner.CompilationBinOutputPath - member __.ProjectFileName = inner.ProjectFileName - member __.AdviseProjectSiteChanges(callbackOwnerKey,callback) = inner.AdviseProjectSiteChanges(callbackOwnerKey, callback) - member __.AdviseProjectSiteCleaned(callbackOwnerKey,callback) = inner.AdviseProjectSiteCleaned(callbackOwnerKey, callback) - member __.AdviseProjectSiteClosed(callbackOwnerKey,callback) = inner.AdviseProjectSiteClosed(callbackOwnerKey, callback) - member __.BuildErrorReporter with get() = inner.BuildErrorReporter and set v = inner.BuildErrorReporter <- v - member __.TargetFrameworkMoniker = inner.TargetFrameworkMoniker - member __.ProjectGuid = inner.ProjectGuid - member __.IsIncompleteTypeCheckEnvironment = false - member __.LoadTime = inner.LoadTime - member __.ProjectProvider = inner.ProjectProvider + member _.Description = inner.Description + member _.CompilationSourceFiles = inner.CompilationSourceFiles + member _.CompilationOptions = inner.CompilationOptions + member _.CompilationReferences = inner.CompilationReferences + member _.CompilationBinOutputPath = inner.CompilationBinOutputPath + member _.ProjectFileName = inner.ProjectFileName + member _.AdviseProjectSiteChanges(callbackOwnerKey,callback) = inner.AdviseProjectSiteChanges(callbackOwnerKey, callback) + member _.AdviseProjectSiteCleaned(callbackOwnerKey,callback) = inner.AdviseProjectSiteCleaned(callbackOwnerKey, callback) + member _.AdviseProjectSiteClosed(callbackOwnerKey,callback) = inner.AdviseProjectSiteClosed(callbackOwnerKey, callback) + member _.BuildErrorReporter with get() = inner.BuildErrorReporter and set v = inner.BuildErrorReporter <- v + member _.TargetFrameworkMoniker = inner.TargetFrameworkMoniker + member _.ProjectGuid = inner.ProjectGuid + member _.IsIncompleteTypeCheckEnvironment = false + member _.LoadTime = inner.LoadTime + member _.ProjectProvider = inner.ProjectProvider override x.ToString() = inner.ProjectFileName type internal ProjectSiteOptionLifetimeState = @@ -792,7 +792,7 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem /// Full path to template file /// Full path to destination file override x.AddFileFromTemplate(source:string, target:string ) = - if not (FSharp.Compiler.AbstractIL.Internal.Library.Shim.FileSystem.SafeExists(source)) then + if not (File.Exists(source)) then raise <| new FileNotFoundException(String.Format(FSharpSR.TemplateNotFound(), source)) // We assume that there is no token inside the file because the only @@ -1265,9 +1265,9 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem else 0 - member __.CompilationSourceFiles = match sourcesAndFlags with None -> [| |] | Some (sources,_) -> sources - member __.CompilationOptions = match sourcesAndFlags with None -> [| |] | Some (_,flags) -> flags - member __.CompilationReferences = match normalizedRefs with None -> [| |] | Some refs -> refs + member _.CompilationSourceFiles = match sourcesAndFlags with None -> [| |] | Some (sources,_) -> sources + member _.CompilationOptions = match sourcesAndFlags with None -> [| |] | Some (_,flags) -> flags + member _.CompilationReferences = match normalizedRefs with None -> [| |] | Some refs -> refs override x.ComputeSourcesAndFlags() = @@ -1386,32 +1386,32 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem let creationTime = System.DateTime.UtcNow { new Microsoft.VisualStudio.FSharp.Editor.IProjectSite with - member __.CompilationSourceFiles = x.CompilationSourceFiles - member __.CompilationOptions = x.CompilationOptions - member __.CompilationReferences = x.CompilationReferences - member __.CompilationBinOutputPath = + member _.CompilationSourceFiles = x.CompilationSourceFiles + member _.CompilationOptions = x.CompilationOptions + member _.CompilationReferences = x.CompilationReferences + member _.CompilationBinOutputPath = let outputPath = x.GetCurrentOutputAssembly() if String.IsNullOrWhiteSpace(outputPath) then None else Some(outputPath) - member __.Description = + member _.Description = match sourcesAndFlags with | Some (sources,flags) -> sprintf "Project System: flags(%A) sources:\n%A" flags sources | None -> sprintf "Project System, no flags available" - member __.ProjectFileName = MSBuildProject.GetFullPath(x.BuildProject) + member _.ProjectFileName = MSBuildProject.GetFullPath(x.BuildProject) - member __.BuildErrorReporter + member _.BuildErrorReporter with get() = buildErrorReporter and set v = buildErrorReporter <- v - member __.AdviseProjectSiteChanges(callbackOwnerKey,callback) = sourcesAndFlagsNotifier.Advise(callbackOwnerKey,callback) - member __.AdviseProjectSiteCleaned(callbackOwnerKey,callback) = cleanNotifier.Advise(callbackOwnerKey,callback) - member __.AdviseProjectSiteClosed(callbackOwnerKey,callback) = closeNotifier.Advise(callbackOwnerKey,callback) - member __.IsIncompleteTypeCheckEnvironment = false - member __.TargetFrameworkMoniker = x.GetTargetFrameworkMoniker() - member __.ProjectGuid = x.GetProjectGuid() - member __.LoadTime = creationTime - member __.ProjectProvider = Some (x :> Microsoft.VisualStudio.FSharp.Editor.IProvideProjectSite) + member _.AdviseProjectSiteChanges(callbackOwnerKey,callback) = sourcesAndFlagsNotifier.Advise(callbackOwnerKey,callback) + member _.AdviseProjectSiteCleaned(callbackOwnerKey,callback) = cleanNotifier.Advise(callbackOwnerKey,callback) + member _.AdviseProjectSiteClosed(callbackOwnerKey,callback) = closeNotifier.Advise(callbackOwnerKey,callback) + member _.IsIncompleteTypeCheckEnvironment = false + member _.TargetFrameworkMoniker = x.GetTargetFrameworkMoniker() + member _.ProjectGuid = x.GetProjectGuid() + member _.LoadTime = creationTime + member _.ProjectProvider = Some (x :> Microsoft.VisualStudio.FSharp.Editor.IProvideProjectSite) } // Snapshot-capture relevent values from "this", and returns an IProjectSite @@ -1430,23 +1430,23 @@ namespace rec Microsoft.VisualStudio.FSharp.ProjectSystem // This object is thread-safe { new Microsoft.VisualStudio.FSharp.Editor.IProjectSite with - member __.Description = description - member __.CompilationSourceFiles = sourceFiles - member __.CompilationOptions = options - member __.CompilationReferences = refs - member __.CompilationBinOutputPath = if String.IsNullOrWhiteSpace(outputPath) then None else Some(outputPath) - member __.ProjectFileName = projFileName - member __.BuildErrorReporter + member _.Description = description + member _.CompilationSourceFiles = sourceFiles + member _.CompilationOptions = options + member _.CompilationReferences = refs + member _.CompilationBinOutputPath = if String.IsNullOrWhiteSpace(outputPath) then None else Some(outputPath) + member _.ProjectFileName = projFileName + member _.BuildErrorReporter with get() = staticBuildErrorReporter and set v = staticBuildErrorReporter <- v - member __.AdviseProjectSiteChanges(_,_) = () - member __.AdviseProjectSiteCleaned(_,_) = () - member __.AdviseProjectSiteClosed(_,_) = () - member __.IsIncompleteTypeCheckEnvironment = false - member __.TargetFrameworkMoniker = targetFrameworkMoniker - member __.ProjectGuid = x.GetProjectGuid() - member __.LoadTime = creationTime - member __.ProjectProvider = Some (x :> Microsoft.VisualStudio.FSharp.Editor.IProvideProjectSite) + member _.AdviseProjectSiteChanges(_,_) = () + member _.AdviseProjectSiteCleaned(_,_) = () + member _.AdviseProjectSiteClosed(_,_) = () + member _.IsIncompleteTypeCheckEnvironment = false + member _.TargetFrameworkMoniker = targetFrameworkMoniker + member _.ProjectGuid = x.GetProjectGuid() + member _.LoadTime = creationTime + member _.ProjectProvider = Some (x :> Microsoft.VisualStudio.FSharp.Editor.IProvideProjectSite) } // let the language service ask us questions diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/WaitDialog.fs b/vsintegration/src/FSharp.ProjectSystem.FSharp/WaitDialog.fs index 08b9de7f1d3..bd6451ef6d5 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/WaitDialog.fs +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/WaitDialog.fs @@ -38,7 +38,7 @@ module internal WaitDialog = |> Marshal.ThrowExceptionForHR { new IDisposable with - override __.Dispose () = + override _.Dispose () = let cancelled = ref 0 waitDialog.Value.EndWaitDialog cancelled |> Marshal.ThrowExceptionForHR } \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.cs.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.cs.xlf index 02128b8f00d..80284f91346 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.cs.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.cs.xlf @@ -247,6 +247,16 @@ Nová &složka + + Quit F# Interactive Process + Ukončit proces F# Interactive + + + + FSharp.Interactive.QuitProcess + FSharp.Interactive.QuitProcess + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.de.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.de.xlf index 74b69acd487..2024bc7ac4c 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.de.xlf @@ -247,6 +247,16 @@ &Neuer Ordner + + Quit F# Interactive Process + F# Interactive-Prozess beenden + + + + FSharp.Interactive.QuitProcess + FSharp.Interactive.QuitProcess + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.es.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.es.xlf index 5f286a95698..c58ac1a46fb 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.es.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.es.xlf @@ -247,6 +247,16 @@ N&ueva carpeta + + Quit F# Interactive Process + Salir del proceso de F# interactivo + + + + FSharp.Interactive.QuitProcess + FSharp.Interactive.QuitProcess + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.fr.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.fr.xlf index 2e8a0c00453..4647c7fdbda 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.fr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.fr.xlf @@ -247,6 +247,16 @@ Nouveau &dossier + + Quit F# Interactive Process + Quitter le processus F# Interactive + + + + FSharp.Interactive.QuitProcess + FSharp.Interactive.QuitProcess + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.it.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.it.xlf index 5b59a67af85..231db14c05f 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.it.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.it.xlf @@ -247,6 +247,16 @@ &Nuova cartella + + Quit F# Interactive Process + Chiudi il processo di F# Interactive + + + + FSharp.Interactive.QuitProcess + FSharp.Interactive.QuitProcess + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ja.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ja.xlf index 4266774b23c..27e442fa473 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ja.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ja.xlf @@ -247,6 +247,16 @@ 新しいフォルダー(&D) + + Quit F# Interactive Process + F# インタラクティブ プロセスの終了 + + + + FSharp.Interactive.QuitProcess + FSharp.Interactive.QuitProcess + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ko.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ko.xlf index 1d311984cab..bd79a9f866b 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ko.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ko.xlf @@ -247,6 +247,16 @@ 새 폴더(&D) + + Quit F# Interactive Process + F# 대화형 프로세스 종료 + + + + FSharp.Interactive.QuitProcess + FSharp.Interactive.QuitProcess + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pl.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pl.xlf index 0b59a2dd7d2..265075d7f28 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pl.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pl.xlf @@ -247,6 +247,16 @@ Nowy fol&der + + Quit F# Interactive Process + Zakończ proces narzędzia F# Interactive + + + + FSharp.Interactive.QuitProcess + FSharp.Interactive.QuitProcess + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pt-BR.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pt-BR.xlf index e2a2158cf9e..e7c689e5c64 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pt-BR.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.pt-BR.xlf @@ -247,6 +247,16 @@ Nova pa&sta + + Quit F# Interactive Process + Encerrar processo de F# Interativo + + + + FSharp.Interactive.QuitProcess + FSharp.Interactive.QuitProcess + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ru.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ru.xlf index 77e44dc54ee..c130a83a65e 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ru.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.ru.xlf @@ -247,6 +247,16 @@ &Создать папку + + Quit F# Interactive Process + Выйти из процесса F# Interactive + + + + FSharp.Interactive.QuitProcess + FSharp.Interactive.QuitProcess + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.tr.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.tr.xlf index 4ac66f5451d..988963a34e1 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.tr.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.tr.xlf @@ -247,6 +247,16 @@ Yeni &Klasör + + Quit F# Interactive Process + F# Etkileşimli İşleminden Çık + + + + FSharp.Interactive.QuitProcess + FSharp.Interactive.QuitProcess + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hans.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hans.xlf index 853138f9a59..676a80ada28 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hans.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hans.xlf @@ -247,6 +247,16 @@ 新建文件夹(&D) + + Quit F# Interactive Process + 退出 F# 交互进程 + + + + FSharp.Interactive.QuitProcess + FSharp.Interactive.QuitProcess + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hant.xlf b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hant.xlf index 918c8824296..16e68bcc367 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hant.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/xlf/MenusAndCommands.vsct.zh-Hant.xlf @@ -247,6 +247,16 @@ 新增資料夾(&D) + + Quit F# Interactive Process + 結束 F# 互動處理序 + + + + FSharp.Interactive.QuitProcess + FSharp.Interactive.QuitProcess + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj similarity index 99% rename from vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj rename to vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj index 855ef4c5c21..81fedfa6003 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.PropertiesPages.vbproj +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/FSharp.ProjectSystem.PropertyPages.vbproj @@ -59,7 +59,7 @@ - + {B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7} ProjectSystem.Base diff --git a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf index 4184f3edc59..0f2031ab4b6 100644 --- a/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf +++ b/vsintegration/src/FSharp.ProjectSystem.PropertyPages/Resources/xlf/Microsoft.VisualStudio.Editors.Designer.de.xlf @@ -940,7 +940,7 @@ Fehler: The URL is invalid. Please enter a valid URL like "http://www.microsoft.com/" - Die URL ist ungültig. Geben Sie eine gültige URL (beispielsweise "http://www.microsoft.com/de/de/default.aspx") ein. + Die URL ist ungültig. Geben Sie eine gültige URL (beispielsweise "http://www.microsoft.com/") ein. diff --git a/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj b/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj index 7df8e60ebd3..a3ce5bb52e2 100644 --- a/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj +++ b/vsintegration/src/FSharp.VS.FSI/FSharp.VS.FSI.fsproj @@ -6,8 +6,6 @@ Library $(NoWarn);47;75 true - true - $(SystemValueTupleVersion) $(OtherFlags) --subsystemversion:6.00 false @@ -45,8 +43,8 @@ - - + + @@ -71,11 +69,10 @@ - - + diff --git a/vsintegration/src/FSharp.VS.FSI/Properties.resx b/vsintegration/src/FSharp.VS.FSI/Properties.resx index bf0ca9896ef..ca594efbb3e 100644 --- a/vsintegration/src/FSharp.VS.FSI/Properties.resx +++ b/vsintegration/src/FSharp.VS.FSI/Properties.resx @@ -157,5 +157,11 @@ Enable preview language features + + Use .NET Core Scripting + + + Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window + \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/VFSIstrings.txt b/vsintegration/src/FSharp.VS.FSI/VFSIstrings.txt index 59f9615fffa..0e1e7979c8d 100644 --- a/vsintegration/src/FSharp.VS.FSI/VFSIstrings.txt +++ b/vsintegration/src/FSharp.VS.FSI/VFSIstrings.txt @@ -4,9 +4,10 @@ cannotCreateToolWindow,"Cannot create window F# Interactive ToolWindow" exceptionRaisedWhenCreatingRemotingClient,"Exception raised when creating remoting client for launched fsi.exe\n%s" exceptionRaisedWhenRequestingToolWindow,"Exception raised when requesting FSI ToolWindow.\n%s" couldNotObtainFSharpLS,"Could not load F# language service" -sessionTerminationDetected,"Session termination detected. Press Enter to restart." +sessionTerminationDetected,"Session termination detected." fsharpInteractive,"F# Interactive" couldNotFindFsiExe,"Could not find fsi.exe, the F# Interactive executable.\nThis file does not exist:\n\n%s\n" killingProcessRaisedException,"Killing process raised exception:\n%s" sessionIsNotDebugFriendly,"The current F# Interactive session is not configured for debugging. For the best experience, enable debugging in F# Interactive settings, then reset the session.\n\nAttempt debugging with current settings?" doNotShowWarningInFuture,"Don't show this warning again" +sessionInitialMessageNetCore,"Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings." diff --git a/vsintegration/src/FSharp.VS.FSI/fsiBasis.fs b/vsintegration/src/FSharp.VS.FSI/fsiBasis.fs index c0ef2546c6a..8e4d3974761 100644 --- a/vsintegration/src/FSharp.VS.FSI/fsiBasis.fs +++ b/vsintegration/src/FSharp.VS.FSI/fsiBasis.fs @@ -1,36 +1,12 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. namespace Microsoft.VisualStudio.FSharp.Interactive -#if DESIGNER -#r "FSharp.Compiler.Server.Shared.dll" -#I @"C:\Program Files\Microsoft Visual Studio 2008 SDK\VisualStudioIntegration\Common\Assemblies" -#I @"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5" -#r "System.Core.dll" -#r "system.windows.forms.dll" -#r "Microsoft.VisualStudio.OLE.Interop.dll" -#r "Microsoft.VisualStudio.Package.LanguageService.9.0.dll" -#r "Microsoft.VisualStudio.Shell.9.0.dll" -#r "Microsoft.VisualStudio.Shell.Interop.dll" -#r "Microsoft.VisualStudio.Shell.Interop.8.0.dll" -#r "Microsoft.VisualStudio.Shell.Interop.9.0.dll" -#r "Microsoft.VisualStudio.TextManager.Interop.dll" -#r "Microsoft.VisualStudio.TextManager.Interop.8.0.dll" -#endif - open System -open System.IO -open System.Diagnostics -open System.Globalization open System.Text.RegularExpressions -open System.Windows.Forms open System.Runtime.InteropServices -open System.ComponentModel.Design open Microsoft.Win32 -open Microsoft.VisualStudio open Microsoft.VisualStudio.Shell.Interop open Microsoft.VisualStudio.OLE.Interop -open Microsoft.VisualStudio.Shell -open Microsoft.VisualStudio.TextManager.Interop module internal AssemblyAttributes = [] diff --git a/vsintegration/src/FSharp.VS.FSI/fsiLanguageService.fs b/vsintegration/src/FSharp.VS.FSI/fsiLanguageService.fs index 581eafdd28e..160b7a204fa 100644 --- a/vsintegration/src/FSharp.VS.FSI/fsiLanguageService.fs +++ b/vsintegration/src/FSharp.VS.FSI/fsiLanguageService.fs @@ -3,18 +3,11 @@ namespace Microsoft.VisualStudio.FSharp.Interactive open System -open System.IO -open System.Diagnostics -open System.Globalization -open System.Windows.Forms open System.Runtime.InteropServices -open System.ComponentModel.Design -open Microsoft.Win32 open Microsoft.VisualStudio open Microsoft.VisualStudio.FSharp.Interactive open Microsoft.VisualStudio.OLE.Interop open Microsoft.VisualStudio.Shell -open Microsoft.VisualStudio.Shell.Interop open Microsoft.VisualStudio.Package open Microsoft.VisualStudio.TextManager.Interop open System.ComponentModel.Composition @@ -63,6 +56,11 @@ type FsiPropertyPage() = [] member this.FsiPreview with get() = SessionsProperties.fsiPreview and set (x:bool) = SessionsProperties.fsiPreview <- x + [] + [] + [] + member this.FsiUseNetCore with get() = SessionsProperties.fsiUseNetCore and set (x:bool) = SessionsProperties.fsiUseNetCore <- x + // CompletionSet type internal FsiCompletionSet(imageList,source:Source) = inherit CompletionSet(imageList, source) diff --git a/vsintegration/src/FSharp.VS.FSI/fsiPackageHooks.fs b/vsintegration/src/FSharp.VS.FSI/fsiPackageHooks.fs index bbe816faf91..446c425a9c4 100644 --- a/vsintegration/src/FSharp.VS.FSI/fsiPackageHooks.fs +++ b/vsintegration/src/FSharp.VS.FSI/fsiPackageHooks.fs @@ -3,18 +3,12 @@ namespace Microsoft.VisualStudio.FSharp.Interactive open System -open System.Diagnostics -open System.Globalization -open System.Runtime.InteropServices open System.ComponentModel.Design -open Microsoft.Win32 open Microsoft.VisualStudio open Microsoft.VisualStudio.Shell.Interop -open Microsoft.VisualStudio.OLE.Interop open Microsoft.VisualStudio.Shell open Microsoft.VisualStudio.TextManager.Interop open Util -open EnvDTE module internal Hooks = let fsiServiceCreatorCallback(package:Package) = diff --git a/vsintegration/src/FSharp.VS.FSI/fsiSessionToolWindow.fs b/vsintegration/src/FSharp.VS.FSI/fsiSessionToolWindow.fs index eae479ef9e2..61ff177fd3b 100644 --- a/vsintegration/src/FSharp.VS.FSI/fsiSessionToolWindow.fs +++ b/vsintegration/src/FSharp.VS.FSI/fsiSessionToolWindow.fs @@ -4,10 +4,8 @@ namespace Microsoft.VisualStudio.FSharp.Interactive open System open System.Diagnostics -open System.Globalization open System.Runtime.InteropServices open System.ComponentModel.Design -open Microsoft.Win32 open Microsoft.VisualStudio open Microsoft.VisualStudio.Shell.Interop open Microsoft.VisualStudio.OLE.Interop @@ -19,7 +17,6 @@ open EnvDTE open Microsoft.VisualStudio.ComponentModelHost open Microsoft.VisualStudio.Editor open Microsoft.VisualStudio.Text.Editor -open Microsoft.VisualStudio.Text open Microsoft.VisualStudio.Utilities type VSStd2KCmdID = VSConstants.VSStd2KCmdID // nested type @@ -39,12 +36,12 @@ module internal Locals = let defaultVSRegistryRoot = @"Software\Microsoft\VisualStudio\15.0" let settingsRegistrySubKey = @"General" let debugPromptRegistryValue = "FSharpHideScriptDebugWarning" + // Prompts come through as "SERVER-PROMPT>\n" (when in "server mode"). + // In fsi.exe, the newline is needed to get the output send through to VS. + // Here the reverse mapping is applied. + let prompt = "SERVER-PROMPT>" let fixServerPrompt (str:string) = - // Prompts come through as "SERVER-PROMPT>\n" (when in "server mode"). - // In fsi.exe, the newline is needed to get the output send through to VS. - // Here the reverse mapping is applied. - let prompt = "SERVER-PROMPT>" in (* Replace 'prompt' by ">" throughout string, add newline, unless ending in prompt *) let str = if str.EndsWith(prompt) then str + " " else str + Environment.NewLine let str = str.Replace(prompt,">") @@ -197,14 +194,18 @@ type internal FsiToolWindow() as this = let history = HistoryBuffer() let sessions = Session.FsiSessions() do fsiLangService.Sessions <- sessions - let writeTextAndScroll (str:string) = + + let writeText scroll (str:string) = if str <> null && textLines <> null then lock textLines (fun () -> textStream.DirectWrite(fixServerPrompt str) - setScrollToEndOfBuffer() // I'm not convinced that users want jump to end on output. - ) // IP sample did it. Previously, VFSI did not. - // What if there is scrolling output on a timer and a user wants to look over it?? - // Maybe, if already at the end, then stay at the end? + if scroll then + setScrollToEndOfBuffer() + ) + + let writeTextAndScroll (str:string) = writeText true str + + let writeTextNoScroll (str:string) = writeText false str // Merge stdout/stderr events prior to buffering. Paired with StdOut/StdErr keys so we can split them afterwards. let responseE = Observable.merge (Observable.map (pair StdOut) sessions.Output) (Observable.map (pair StdErr) sessions.Error) @@ -222,19 +223,27 @@ type internal FsiToolWindow() as this = | StdErr,strs -> writeTextAndScroll (String.concat Environment.NewLine strs) // later: hence keep them split. do responseBufferE.Add(fun keyStrings -> let keyChunks : (Response * string list) list = chunkKeyValues keyStrings List.iter writeKeyChunk keyChunks) + let showInitialMessageNetCore scroll = + if Session.SessionsProperties.fsiUseNetCore then + writeText scroll ((VFSIstrings.SR.sessionInitialMessageNetCore()+Environment.NewLine+prompt)) // Write message on a session termination. Should be called on Gui thread. let recordTermination () = if not sessions.Alive then // check is likely redundant synchronizationContext.Post( System.Threading.SendOrPostCallback( - fun _ -> writeTextAndScroll ((VFSIstrings.SR.sessionTerminationDetected())+Environment.NewLine) + fun _ -> + writeTextAndScroll ((VFSIstrings.SR.sessionTerminationDetected())+Environment.NewLine) + showInitialMessageNetCore true ), null) do sessions.Exited.Add(fun _ -> recordTermination()) - - // finally, start the session - do sessions.Restart() + + // For .NET Core the session doesn't start automatically. Rather it may optionally be started by an Alt-Enter from a script, + // or else by pressing Enter in the REPL window. + do showInitialMessageNetCore false + if not Session.SessionsProperties.fsiUseNetCore then + sessions.Restart(null) let clearUndoStack (textLines:IVsTextLines) = // Clear the UNDO stack. let undoManager = textLines.GetUndoManager() |> throwOnFailure1 @@ -291,19 +300,15 @@ type internal FsiToolWindow() as this = strHandle.Free() ) - let executeTextNoHistory (text:string) = + let executeTextNoHistory sourceFile (text:string) = + sessions.Ensure(sourceFile) textStream.DirectWriteLine() sessions.SendInput(text) setCursorAtEndOfBuffer() - let executeText (text:string) = - textStream.DirectWriteLine() - history.Add(text) - sessions.SendInput(text) - setCursorAtEndOfBuffer() - let executeUserInput() = if isCurrentPositionInInputArea() then + sessions.Ensure(null) let text = getInputAreaText() textStream.ExtendReadOnlyMarker() textStream.DirectWriteLine() @@ -317,7 +322,8 @@ type internal FsiToolWindow() as this = let supportWhenInInputArea (sender:obj) (args:EventArgs) = let command = sender :?> MenuCommand if null <> command then // are these null checks needed? - command.Supported <- not source.IsCompletorActive && isCurrentPositionInInputArea() + let enabled = not source.IsCompletorActive && isCurrentPositionInInputArea() + command.Supported <- enabled /// Support command except when completion is active. let supportUnlessCompleting (sender:obj) (args:EventArgs) = @@ -333,13 +339,13 @@ type internal FsiToolWindow() as this = let supportWhenAtStartOfInputArea (sender:obj) (e:EventArgs) = let command = sender :?> MenuCommand if command <> null then - command.Supported <- isCurrentPositionAtStartOfInputArea() + command.Supported <- not source.IsCompletorActive && isCurrentPositionAtStartOfInputArea() /// Support when at the start of the input area AND no-selection (e.g. to enable NoAction on BACKSPACE). let supportWhenAtStartOfInputAreaAndNoSelection (sender:obj) (e:EventArgs) = let command = sender :?> MenuCommand if command <> null then - command.Supported <- isCurrentPositionAtStartOfInputArea() && not (haveTextViewSelection()) + command.Supported <- isCurrentPositionAtStartOfInputArea() let supportWhenSelectionIntersectsWithReadonlyOrNoSelection (sender:obj) (_:EventArgs) = let command = sender :?> MenuCommand @@ -414,13 +420,15 @@ type internal FsiToolWindow() as this = textLines.ReplaceLines(0, 0, lastLine, lastColumn, IntPtr.Zero, 0, null) |> throwOnFailure0 ) clearUndoStack textLines // The reset clear should not be undoable. - sessions.Restart() + showInitialMessageNetCore true + if not Session.SessionsProperties.fsiUseNetCore then + sessions.Restart(null) /// Handle RETURN, unless Intelisense completion is in progress. let onReturn (sender:obj) (e:EventArgs) = lock textLines (fun () -> if not sessions.Alive then - sessions.Restart() + sessions.Restart(null) else if isCurrentPositionInInputArea() then executeUserInput() @@ -520,10 +528,10 @@ type internal FsiToolWindow() as this = showNoActivate() let directiveC = sprintf "# 1 \"stdin\"" (* stdin line number reset code *) let text = "\n" + text + "\n" + directiveC + "\n;;\n" - executeTextNoHistory text + executeTextNoHistory null text with _ -> () - let executeInteraction dbgBreak dir filename topLine text = + let executeInteraction dbgBreak dir (filename: string) topLine text = // Preserving previous functionality, including the #directives... let interaction = "\n" @@ -534,7 +542,7 @@ type internal FsiToolWindow() as this = + "# 1 \"stdin\"" + "\n" (* stdin line number reset code *) + ";;" + "\n" - executeTextNoHistory interaction + executeTextNoHistory filename interaction let sendSelectionToFSI action = let dbgBreak,selectLine = @@ -667,7 +675,7 @@ type internal FsiToolWindow() as this = else new OleMenuCommandService(this, originalFilter) - let addCommand guid cmdId handler guard= + let addCommand guid cmdId handler guard = let id = new CommandID(guid,cmdId) let cmd = new OleMenuCommand(new EventHandler(handler),id) match guard with @@ -713,7 +721,7 @@ type internal FsiToolWindow() as this = context.AddAttribute(VSUSERCONTEXTATTRIBUTEUSAGE.VSUC_Usage_LookupF1, "Keyword", "VS.FSharpInteractive") |> ignore | _ -> Debug.Assert(false) - member __.QueryCommandStatus(guidCmdGroup:Guid, nCmdId:uint32) = + member _.QueryCommandStatus(guidCmdGroup:Guid, nCmdId:uint32) = match () with | _ when guidCmdGroup = Guids.guidFsiConsoleCmdSet && nCmdId = uint32 Guids.cmdIDAttachDebugger -> if debuggerIsRunning () then Some(OLECMDF.OLECMDF_INVISIBLE) diff --git a/vsintegration/src/FSharp.VS.FSI/fsiTextBufferStream.fs b/vsintegration/src/FSharp.VS.FSI/fsiTextBufferStream.fs index 6bcac8c608e..a5e3128e872 100644 --- a/vsintegration/src/FSharp.VS.FSI/fsiTextBufferStream.fs +++ b/vsintegration/src/FSharp.VS.FSI/fsiTextBufferStream.fs @@ -3,22 +3,8 @@ namespace Microsoft.VisualStudio.FSharp.Interactive open System -open System.IO -open System.Diagnostics -open System.Globalization -open System.Windows.Forms -open System.Runtime.InteropServices -open System.ComponentModel.Design -open Microsoft.Win32 -open Microsoft.VisualStudio -open Microsoft.VisualStudio.Shell.Interop -open Microsoft.VisualStudio.OLE.Interop -open Microsoft.VisualStudio.Shell open Microsoft.VisualStudio.TextManager.Interop -open Util -open Microsoft.VisualStudio.Editor open Microsoft.VisualStudio.Text -open Microsoft.VisualStudio.Text.Editor open Microsoft.VisualStudio.Utilities // This type wraps the IVsTextLines which contains the FSI session (output and input). diff --git a/vsintegration/src/FSharp.VS.FSI/sessions.fs b/vsintegration/src/FSharp.VS.FSI/sessions.fs index c91b9ef66a2..b7fea42c484 100644 --- a/vsintegration/src/FSharp.VS.FSI/sessions.fs +++ b/vsintegration/src/FSharp.VS.FSI/sessions.fs @@ -2,15 +2,12 @@ module internal Microsoft.VisualStudio.FSharp.Interactive.Session -open FSharp.Compiler open System open System.IO open System.Text open System.Diagnostics open System.Runtime.Remoting open System.Runtime.Remoting.Lifetime -open System.Windows.Forms -open Internal.Utilities #nowarn "52" // The value has been copied to ensure the original is not mutated by this operation @@ -67,6 +64,7 @@ let timeoutApp descr timeoutMS (f : 'a -> 'b) (arg:'a) = module SessionsProperties = let mutable useAnyCpuVersion = true // 64-bit by default + let mutable fsiUseNetCore = false let mutable fsiArgs = "--optimize" let mutable fsiShadowCopy = true let mutable fsiDebugMode = false @@ -130,37 +128,48 @@ let catchAll trigger x = try trigger x with err -> System.Windows.Forms.MessageBox.Show(err.ToString()) |> ignore -let fsiExeName () = - if SessionsProperties.useAnyCpuVersion then "fsiAnyCpu.exe" else "fsi.exe" - -// Use the VS-extension-installed development path if available, relative to the location of this assembly -let determineFsiRelativePath1 () = - let thisAssemblyDirectory = typeof.Assembly.Location |> Path.GetDirectoryName - Path.Combine(thisAssemblyDirectory,fsiExeName() ) - -// This path is relative to the location of "FSharp.Compiler.Interactive.Settings.dll" -let determineFsiRelativePath2 () = - let thisAssembly : System.Reflection.Assembly = typeof.Assembly - let thisAssemblyDirectory = thisAssembly.Location |> Path.GetDirectoryName - // Use the quick-development path if available - Path.Combine(thisAssemblyDirectory,fsiExeName() ) - let determineFsiPath () = - // Choose VS extension path, if it exists (for developers) - let fsiRelativePath1 = determineFsiRelativePath1() - if File.Exists fsiRelativePath1 then fsiRelativePath1 else - - // Choose relative path, if it exists (for developers), otherwise, the installed path. - let fsiRelativePath2 = determineFsiRelativePath2() - if File.Exists fsiRelativePath2 then fsiRelativePath2 else - - // Try the registry key - let fsbin = match Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(None) with Some(s) -> s | None -> "" - let fsiRegistryPath = Path.Combine(fsbin, fsiExeName() ) - if File.Exists(fsiRegistryPath) then fsiRegistryPath else - - // Otherwise give up - raise (SessionError (VFSIstrings.SR.couldNotFindFsiExe fsiRegistryPath)) + if SessionsProperties.fsiUseNetCore then + let pf = Environment.GetEnvironmentVariable("ProgramW6432") + let pf = if String.IsNullOrEmpty(pf) then Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) else pf + let exe = Path.Combine(pf,"dotnet","dotnet.exe") + let arg = "fsi" + if not (File.Exists exe) then + raise (SessionError (VFSIstrings.SR.couldNotFindFsiExe exe)) + exe, arg, false, false + else + let fsiExeName () = + if SessionsProperties.useAnyCpuVersion then "fsiAnyCpu.exe" else "fsi.exe" + + // Use the VS-extension-installed development path if available, relative to the location of this assembly + let determineFsiRelativePath1 () = + let thisAssemblyDirectory = typeof.Assembly.Location |> Path.GetDirectoryName + Path.Combine(thisAssemblyDirectory,fsiExeName() ) + + // This path is relative to the location of "FSharp.Compiler.Interactive.Settings.dll" + let determineFsiRelativePath2 () = + let thisAssembly : System.Reflection.Assembly = typeof.Assembly + let thisAssemblyDirectory = thisAssembly.Location |> Path.GetDirectoryName + // Use the quick-development path if available + Path.Combine(thisAssemblyDirectory, "Tools", fsiExeName() ) + + let fsiExe = + // Choose VS extension path, if it exists (for developers) + let fsiRelativePath1 = determineFsiRelativePath1() + if File.Exists fsiRelativePath1 then fsiRelativePath1 else + + // Choose relative path, if it exists (for developers), otherwise, the installed path. + let fsiRelativePath2 = determineFsiRelativePath2() + if File.Exists fsiRelativePath2 then fsiRelativePath2 else + + // Try the registry key + let fsbin = match Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler(None) with Some(s) -> s | None -> "" + let fsiRegistryPath = Path.Combine(fsbin, "Tools", fsiExeName() ) + if File.Exists(fsiRegistryPath) then fsiRegistryPath else + + // Otherwise give up + raise (SessionError (VFSIstrings.SR.couldNotFindFsiExe fsiRegistryPath)) + fsiExe, "", true, true let readLinesAsync (reader: StreamReader) trigger = let buffer = StringBuilder(1024) @@ -206,9 +215,9 @@ let readLinesAsync (reader: StreamReader) trigger = } Async.StartImmediate (read 0) -let fsiStartInfo channelName = +let fsiStartInfo channelName sourceFile = let procInfo = new ProcessStartInfo() - let fsiPath = determineFsiPath () + let fsiPath, fsiFirstArgs, fsiSupportsServer, fsiSupportsShadowcopy = determineFsiPath () procInfo.FileName <- fsiPath // Mismatched encoding on I/O streams between VS addin and it's FSI session. @@ -217,29 +226,23 @@ let fsiStartInfo channelName = // We also need to send fsi.exe the locale of the VS process let inCP,outCP = Encoding.UTF8.CodePage,Encoding.UTF8.CodePage - let addBoolOption name value args = sprintf "%s --%s%s" args name (if value then "+" else "-") - let addStringOption name value args = sprintf "%s --%s:%O" args name value + let addBoolOption b name value args = if b then sprintf "%s --%s%s" args name (if value then "+" else "-") else args + let addStringOption b name value args = if b then sprintf "%s --%s:%O" args name value else args let procArgs = - "" - |> addStringOption "fsi-server-output-codepage" outCP - |> addStringOption "fsi-server-input-codepage" inCP - |> addStringOption "fsi-server-lcid" System.Threading.Thread.CurrentThread.CurrentUICulture.LCID - |> addStringOption "fsi-server" channelName + fsiFirstArgs + |> addStringOption true "fsi-server-output-codepage" outCP + |> addStringOption true "fsi-server-input-codepage" inCP + |> addStringOption true "fsi-server-lcid" System.Threading.Thread.CurrentThread.CurrentUICulture.LCID + //|> addStringOption true "fsi-server-association-file" sourceFile + |> addStringOption true "fsi-server" channelName |> (fun s -> s + sprintf " %s" SessionsProperties.fsiArgs) - |> addBoolOption "shadowcopyreferences" SessionsProperties.fsiShadowCopy - |> (fun args -> - // for best debug experience, need optimizations OFF and debug info ON - // tack these on the the end, they will override whatever comes earlier - if SessionsProperties.fsiDebugMode then - args |> addBoolOption "optimize" false |> addBoolOption "debug" true - else - args) - |> (fun args -> - if SessionsProperties.fsiPreview then - args |> addStringOption "langversion" "preview" - else - args) + |> addBoolOption fsiSupportsShadowcopy "shadowcopyreferences" SessionsProperties.fsiShadowCopy + // For best debug experience, need optimizations OFF and debug info ON + // tack these on the the end, they will override whatever comes earlier + |> addBoolOption SessionsProperties.fsiDebugMode "optimize" false + |> addBoolOption SessionsProperties.fsiDebugMode "debug" true + |> addStringOption SessionsProperties.fsiPreview "langversion" "preview" procInfo.Arguments <- procArgs procInfo.CreateNoWindow <- true @@ -249,16 +252,20 @@ let fsiStartInfo channelName = procInfo.RedirectStandardOutput <- true procInfo.StandardOutputEncoding <- Encoding.UTF8 procInfo.StandardErrorEncoding <- Encoding.UTF8 - let tmpPath = Path.GetTempPath() - if Directory.Exists(tmpPath) then - procInfo.WorkingDirectory <- tmpPath - procInfo + + let initialPath = + match sourceFile with + | path when path <> null && Directory.Exists(Path.GetDirectoryName(path)) -> Path.GetDirectoryName(path) + | _ -> Path.GetTempPath() + if Directory.Exists(initialPath) then + procInfo.WorkingDirectory <- initialPath + procInfo, fsiSupportsServer let nonNull = function null -> false | (s:string) -> true /// Represents an active F# Interactive process to which Visual Studio is connected via stdin/stdout/stderr and a remoting channel -type FsiSession() = +type FsiSession(sourceFile: string) = let randomSalt = System.Random() let channelName = let pid = System.Diagnostics.Process.GetCurrentProcess().Id @@ -266,7 +273,7 @@ type FsiSession() = let salt = randomSalt.Next() sprintf "FSIChannel_%d_%d_%d" pid tick salt - let procInfo = fsiStartInfo channelName + let procInfo, fsiSupportsServer = fsiStartInfo channelName sourceFile let cmdProcess = new Process(StartInfo=procInfo) let fsiOutput = Event<_>() let fsiError = Event<_>() @@ -293,9 +300,12 @@ type FsiSession() = do cmdProcess.EnableRaisingEvents <- true - let client = - try FSharp.Compiler.Server.Shared.FSharpInteractiveServer.StartClient(channelName) - with e -> raise (SessionError (VFSIstrings.SR.exceptionRaisedWhenCreatingRemotingClient(e.ToString()))) + let clientConnection = + if fsiSupportsServer then + try Some (FSharp.Compiler.Server.Shared.FSharpInteractiveServer.StartClient(channelName)) + with e -> raise (SessionError (VFSIstrings.SR.exceptionRaisedWhenCreatingRemotingClient(e.ToString()))) + else + None /// interrupt timeout in miliseconds let interruptTimeoutMS = 1000 @@ -316,10 +326,13 @@ type FsiSession() = // Create session object member x.Interrupt() = - checkLeaseStatus client - match timeoutApp "VFSI interrupt" interruptTimeoutMS (fun () -> client.Interrupt()) () with - | Some () -> true - | None -> false + match clientConnection with + | None -> false + | Some client -> + checkLeaseStatus client + match timeoutApp "VFSI interrupt" interruptTimeoutMS (fun () -> client.Interrupt()) () with + | Some () -> true + | None -> false member x.SendInput (str: string) = inputQueue.Post(str) @@ -331,6 +344,8 @@ type FsiSession() = member x.Alive = not cmdProcess.HasExited + member x.SupportsInterrupt = not cmdProcess.HasExited && clientConnection.IsSome // clientConnection not on .NET Core + member x.ProcessID = cmdProcess.Id member x.ProcessArgs = procInfo.Arguments @@ -367,10 +382,10 @@ type FsiSessions() = // clearing sessionR before kill() means session.Exited is ignored below session.Kill()) - let restart() = + let restart(sourceFile) = kill() try - let session = FsiSession() + let session = FsiSession(sourceFile) sessionR <- Some session // All response callbacks are guarded by checks that "session" is still THE ACTIVE session. session.Output.Add(fun s -> if isCurrentSession session then fsiOut.Trigger s) @@ -379,6 +394,9 @@ type FsiSessions() = with SessionError text -> fsiError.Trigger text + let ensure(sourceFile) = + if sessionR.IsNone then restart(sourceFile) + member x.Interrupt() = sessionR |> Option.forall (fun session -> session.Interrupt()) @@ -392,6 +410,9 @@ type FsiSessions() = member x.Alive = sessionR |> Option.exists (fun session -> session.Alive) + member x.SupportsInterrupt = + sessionR |> Option.exists (fun session -> session.SupportsInterrupt) + member x.ProcessID = match sessionR with | None -> -1 (* -1 assumed to never be a valid process ID *) @@ -403,5 +424,9 @@ type FsiSessions() = | Some session -> session.ProcessArgs member x.Kill() = kill() - member x.Restart() = restart() + + member x.Ensure(sourceFile) = ensure(sourceFile) + + member x.Restart(sourceFile) = restart(sourceFile) + member x.Exited = fsiExited.Publish diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.cs.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.cs.xlf index e639f36873f..ef9d28d48ae 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.cs.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.cs.xlf @@ -12,6 +12,11 @@ V případě nastavení na true a za předpokladu, že aktuální počítač je 64bitový, se F# Interactive spustí jako 64bitový proces. (V opačném případě je F# Interactive 32bitový proces.) + + Misc + Různé + + F# Interactive options Možnost F# Interactive @@ -22,11 +27,6 @@ Další argumenty příkazového řádku předané F# Interactive a spustitelné v sadě Visual Studio. (Pokud se povolí ladění skriptů, ignorují se příznaky optimalizace a ladění.) - - Misc - Různé - - FSI Preview FSI Preview @@ -67,6 +67,16 @@ Ladění + + Use .NET Core Scripting + Použít skriptování .NET Core + + + + Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window + Povolit úpravy a provádění skriptů .NET Core pro všechny skripty F # a okno F# Interactive + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.de.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.de.xlf index 76d0e5a44be..0f547bc7453 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.de.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.de.xlf @@ -12,6 +12,11 @@ Wenn diese Einstellung auf "True" gesetzt ist und der aktuelle Computer eine 64-Bit-Version ist, müssen Sie F# Interactive als einen 64-Bit-Prozess ausführen (Andernfalls ist F# Interactive ein 32-Bit-Prozess). + + Misc + Verschiedene + + F# Interactive options F# Interactive-Optionen @@ -22,11 +27,6 @@ Die an die ausführbare F# Interactive-Datei von Visual Studio übergebenen zusätzlichen Befehlszeilenargumente. (Optimierungs- und Debugflags werden bei aktiviertem Skriptdebuggen ignoriert.) - - Misc - Verschiedene - - FSI Preview FSI-Vorschau @@ -67,6 +67,16 @@ Debuggen + + Use .NET Core Scripting + .NET Core-Skripts verwenden + + + + Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window + .NET Core-Skriptbearbeitung und -ausführung für alle F#-Skripts und das F# Interactive-Fenster aktivieren + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.es.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.es.xlf index 8ac14c069ad..84099f2ddc8 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.es.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.es.xlf @@ -12,6 +12,11 @@ Si se establece en True y la máquina actual es de 64 bits, F# interactivo se ejecuta como proceso de 64 bits; de lo contrario, se ejecuta como proceso de 32 bits. + + Misc + Varios + + F# Interactive options Opciones de F# interactivo @@ -22,11 +27,6 @@ Argumentos de la línea de comandos adicional pasados al archivo ejecutable de F# interactivo por Visual Studio. (se prescinde de las marcas de optimización y depuración si la depuración de scripts está habilitada) - - Misc - Varios - - FSI Preview Versión preliminar de FSI @@ -67,6 +67,16 @@ Depuración + + Use .NET Core Scripting + Usar scripting de .NET Core + + + + Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window + Habilita la ejecución y la edición de scripts de .NET Core para todos los scripts de F # y la ventana de F# interactivo. + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.fr.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.fr.xlf index 30b049287c4..922cb52f629 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.fr.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.fr.xlf @@ -12,6 +12,11 @@ Si la valeur est true et que l'ordinateur actuel est de type 64 bits, exécutez F# Interactive en tant que processus 64 bits. (Sinon, F# Interactive est un processus 32 bits.) + + Misc + Divers + + F# Interactive options Options de F# Interactive @@ -22,11 +27,6 @@ Arguments supplémentaires de la ligne de commande passés à l'exécutable F# Interactive par Visual Studio. (les indicateurs d'optimisation et de débogage sont ignorés si le débogage de script est activé) - - Misc - Divers - - FSI Preview Préversion FSI @@ -67,6 +67,16 @@ Débogage + + Use .NET Core Scripting + Utiliser les scripts .NET Core + + + + Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window + Activer l'édition et l'exécution de scripts .NET Core pour tous les scripts F# et la fenêtre F# Interactive + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.it.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.it.xlf index dda750479da..0870d4eecbb 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.it.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.it.xlf @@ -12,6 +12,11 @@ Se impostato su true, e il computer corrente è a 64 bit, eseguire F# Interactive come processo a 64 bit. In caso contrario, F# Interactive è un processo a 32 bit. + + Misc + Varie + + F# Interactive options Opzioni di F# Interactive @@ -22,11 +27,6 @@ Argomenti aggiuntivi della riga di comando passati all'eseguibile F# Interactive da Visual Studio. Se è abilitato il debug di script, i flag di ottimizzazione e debug vengono ignorati. - - Misc - Varie - - FSI Preview Anteprima FSI @@ -67,6 +67,16 @@ Debug + + Use .NET Core Scripting + Usa script di .NET Core + + + + Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window + Abilita la modifica e l'esecuzione di script .NET Core per tutti gli script F# e la finestra F# Interactive + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ja.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ja.xlf index 292872a5ee0..0ff78720e9f 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ja.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ja.xlf @@ -12,6 +12,11 @@ true に設定されていて、現在のコンピューターが 64 ビットである場合は、F# インタラクティブを 64 ビット プロセスで実行してください (そうしないと、F# インタラクティブは 32 ビット プロセスになります)。 + + Misc + その他 + + F# Interactive options F# インタラクティブ オプション @@ -22,11 +27,6 @@ 追加のコマンド ライン引数が Visual Studio によって F# インタラクティブ実行可能ファイルに渡されました。(スクリプト デバッグが有効な場合、最適化とデバッグのフラグは無視されます) - - Misc - その他 - - FSI Preview FSI プレビュー @@ -67,6 +67,16 @@ デバッグ中 + + Use .NET Core Scripting + .Net Core スクリプトの使用 + + + + Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window + すべての F# スクリプトと F# インタラクティブ ウィンドウで、.NET Core スクリプトの編集と実行を有効にします + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ko.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ko.xlf index beb4244148f..aa8ebcfefb7 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ko.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ko.xlf @@ -12,6 +12,11 @@ true로 설정하는 경우 현재 컴퓨터가 64비트이면 F# 대화형을 64비트 프로세스로 실행하고, 그렇지 않으면 F# 대화형이 32비트 프로세스로 실행됩니다. + + Misc + 기타 + + F# Interactive options F# 대화형 옵션 @@ -22,11 +27,6 @@ Visual Studio에서 F# 대화형 실행 파일로 전달되는 추가 명령줄 인수입니다. 스크립트 디버깅을 사용하도록 설정한 경우 최적화 및 디버그 플래그는 무시됩니다. - - Misc - 기타 - - FSI Preview FSI 미리 보기 @@ -67,6 +67,16 @@ 디버깅 + + Use .NET Core Scripting + .NET Core 스크립팅 사용 + + + + Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window + 모든 F# 스크립트 및 F# 대화형 창에 대해 .NET Core 스크립트 편집 및 실행을 사용하도록 설정합니다. + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pl.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pl.xlf index 7d4a0e10460..8730043dc07 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pl.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pl.xlf @@ -12,6 +12,11 @@ Jeśli ustawiono wartość true i obecnie jest używany komputer 64-bitowy, należy uruchomić narzędzie F# Interactive jako proces 64-bitowy. W przeciwnym razie narzędzie F# Interactive zostanie uruchomione jako proces 32-bitowy. + + Misc + Różne + + F# Interactive options Opcje narzędzia F# Interactive @@ -22,11 +27,6 @@ Argumenty wiersza polecenia przekazywane do pliku wykonywalnego narzędzia F# Interactive przez program Visual Studio. (Flagi optymalizacji i debugowania są ignorowane, jeśli włączone jest debugowanie skryptów). - - Misc - Różne - - FSI Preview FSI (wersja zapoznawcza) @@ -67,6 +67,16 @@ Debugowanie + + Use .NET Core Scripting + Użyj wykonywania skryptów .NET Core + + + + Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window + Włącz edycję i wykonywanie skryptów .NET Core dla wszystkich skryptów języka F# i okna narzędzia F# Interactive + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pt-BR.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pt-BR.xlf index cc7367e86e9..406a9f20545 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pt-BR.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.pt-BR.xlf @@ -12,6 +12,11 @@ Se estiver definido como true, e o computador atual for 64 bits, execute o F# Interativo como um processo de 64 bits. (Caso contrário, o F# Interactive será um processo de 32 bits.) + + Misc + Diversos + + F# Interactive options Opções do F# Interativo @@ -22,11 +27,6 @@ Argumentos da linha de comando adicionais passados para o executável do F# Interativo pelo Visual Studio (sinalizadores de depuração e otimização são ignorados se a depuração do script estiver habilitada) - - Misc - Diversos - - FSI Preview Versão prévia do FSI @@ -67,6 +67,16 @@ Depurando + + Use .NET Core Scripting + Usar o script do .NET Core + + + + Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window + Habilitar a edição e a execução de scripts do .NET Core para todos os scripts F# e a janela do F# Interativo + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ru.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ru.xlf index 10a8b7753dd..4d25a0ea143 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ru.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.ru.xlf @@ -12,6 +12,11 @@ Если задано значение true и текущий компьютер является 64-разрядным, F# Interactive запускается как 64-разрядный процесс. (В остальных случая F# Interactive является 32-разрядным процессом.) + + Misc + Прочее + + F# Interactive options Параметры F# Interactive @@ -22,11 +27,6 @@ Дополнительные аргументы командной строки, передаваемые исполняемому файлу F# Interactive из Visual Studio. Оптимизация и флаги отладки игнорируются, если включена отладка скриптов. - - Misc - Прочее - - FSI Preview Предварительная версия FSI @@ -67,6 +67,16 @@ Отладка + + Use .NET Core Scripting + Использовать сценарии .NET Core + + + + Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window + Включить редактирование и выполнение скриптов в .NET Core для всех скриптов F# и окна F# Interactive + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.tr.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.tr.xlf index 85078fa5e22..232fdbe676d 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.tr.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.tr.xlf @@ -12,6 +12,11 @@ True olarak ayarlanırsa ve geçerli makine 64 bit ise F# Etkileşimli'yi 64 bit işlem olarak çalıştırın. (Aksi takdirde F# Etkileşimli 32 bit işlemdir.) + + Misc + Çeşitli + + F# Interactive options F# Etkileşimli seçenekleri @@ -22,11 +27,6 @@ Visual Studio tarafından çalıştırılabilen F# Etkileşimli'ye geçirilmiş ek komut satırı bağımsız değişkenleri. (Betik hata ayıklaması etkinleştirilmişse en iyi duruma getirme ve hata ayıklama bayrakları yok sayılır.) - - Misc - Çeşitli - - FSI Preview FSI Önizleme @@ -67,6 +67,16 @@ Hata Ayıklama + + Use .NET Core Scripting + .NET Core Betiği Kullan + + + + Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window + Tüm F# betikleri ile F# Etkileşimli penceresi için .NET Core betik düzenlemeyi ve yürütmeyi etkinleştirin + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hans.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hans.xlf index f1759dcf7c3..50328a7aabd 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hans.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hans.xlf @@ -12,6 +12,11 @@ 如果设为 true,且当前计算机是 64 位的,则将 F# 交互窗口作为 64 位进程运行。(否则,F# 交互为 32 位进程。) + + Misc + 杂项 + + F# Interactive options F# 交互窗口选项 @@ -22,11 +27,6 @@ 其他命令行参数传递到 Visual Studio 执行的 F# 交互窗口可执行文件。(若已启动脚本调试,则忽略优化和调试标志) - - Misc - 杂项 - - FSI Preview FSI 预览 @@ -67,6 +67,16 @@ 正在调试 + + Use .NET Core Scripting + 使用 .NET Core 脚本 + + + + Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window + 对所有 F# 脚本和 F# 交互窗口启用 .NET Core 脚本编辑和执行 + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hant.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hant.xlf index ed8368b0bcb..01303e69aa0 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hant.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/Properties.zh-Hant.xlf @@ -12,6 +12,11 @@ 如果設為 true,並且目前電腦為 64 位元,則 F# 互動會當做 64 位元處理序來執行 (反之,F# 互動則為 32 位元處理序)。 + + Misc + 其他 + + F# Interactive options F# 互動選項 @@ -22,11 +27,6 @@ 由 Visual Studio 額外傳遞給 F# 互動可執行檔的命令列引數。(若啟用指令碼偵錯,則會忽略最佳化及偵錯旗標) - - Misc - 其他 - - FSI Preview FSI 預覽 @@ -67,6 +67,16 @@ 偵錯 + + Use .NET Core Scripting + 使用 .NET Core 指令碼 + + + + Enable .NET Core script editing and execution for all F# scripts and the F# Interactive window + 為所有 F# 指令碼及 F# 互動視窗啟用 .NET Core 指令碼編輯與執行 + + \ No newline at end of file diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.cs.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.cs.xlf index b79b747fad9..1d790e879b1 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.cs.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.cs.xlf @@ -22,9 +22,14 @@ Nepovedlo se načíst službu jazyka F#. + + Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. + Vítá vás F# Interactive pro .NET Core v sadě Visual Studio. Kód spustíte těmito způsoby:\n 1. Ve skriptu F # použijte možnost Odeslat do interaktivního okna (Alt-Enter nebo kliknutí pravým tlačítkem).\n Proces F# Interactive použije případné nastavení global.js přidružené k tomuto skriptu.\n 2. Začněte tím, že stisknete Enter. Proces F# Interactive použije výchozí nastavení. + + - Session termination detected. Press Enter to restart. - Zjistilo se ukončení relace. Pokračovat můžete stisknutím klávesy Enter. + Session termination detected. + Zjistilo se ukončení relace. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.de.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.de.xlf index e8dabd63d6b..7e2462013ed 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.de.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.de.xlf @@ -22,9 +22,14 @@ Der F#-Sprachendienst konnte nicht geladen werden. + + Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. + Willkommen bei F# Interactive für .NET Core in Visual Studio. Führen Sie einen der folgenden Schritte durch, um Code auszuführen:\n 1. Verwenden Sie in einem F#-Skript "An Interactive senden" (ALT-EINGABETASTE oder Klick mit der rechten Maustaste). Der F# Interactive-Prozess\n verwendet keine global.json-Einstellungen, die diesem Skript zugeordnet sind.\n 2. Drücken Sie zum Starten die EINGABETASTE. Der F# Interactive-Prozess verwendet Standardeinstellungen. + + - Session termination detected. Press Enter to restart. - Es wurde eine Beendigung der Sitzung erkannt. Drücken Sie die EINGABETASTE, um neu zu starten. + Session termination detected. + Es wurde eine Beendigung der Sitzung erkannt. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.es.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.es.xlf index 8fafdfe73df..9a12087f57c 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.es.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.es.xlf @@ -22,9 +22,14 @@ No se pudo cargar el servicio del lenguaje F#. + + Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. + Esto es F# interactivo para .NET Core en Visual Studio. Para ejecutar el código, puede realizar una de las acciones siguientes:\n 1. Use "Enviar a interactivo" (Alt-Entrar o hacer clic con el botón derecho) desde un script de F #. El proceso de F# interactivo\n usará cualquier configuración de global.json asociada a ese script.\n 2. Presione "Entrar" para empezar. El proceso de F# interactivo usará la configuración predeterminada. + + - Session termination detected. Press Enter to restart. - Se detectó una terminación de sesión. Presione Entrar para reiniciar. + Session termination detected. + Se detectó una terminación de sesión. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.fr.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.fr.xlf index 14025011c11..8ef997c62c7 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.fr.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.fr.xlf @@ -22,9 +22,14 @@ Impossible de charger le service de langage F# + + Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. + Bienvenue dans F# Interactive pour .NET Core dans Visual Studio. Pour exécuter du code, vous disposez de plusieurs possibilités\n 1. Utilisez 'Envoyer vers Interactive' (Alt-Entrée ou clic droit) à partir d'un script F#. Le processus F# Interactive va\n utiliser les paramètres global.json associés au script.\n 2. Appuyez sur 'Entrée' pour démarrer. Le processus F# Interactive va utiliser les paramètres par défaut. + + - Session termination detected. Press Enter to restart. - Fin de session détectée. Appuyez sur Entrée pour redémarrer. + Session termination detected. + Arrêt de session détectée. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.it.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.it.xlf index 5f2b1b679c9..f9fdb9f3c6a 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.it.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.it.xlf @@ -22,9 +22,14 @@ Non è stato possibile caricare il servizio di linguaggio F# + + Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. + Benvenuti in F# Interactive per .NET Core in Visual Studio. Per eseguire il codice:\n 1. Usare 'Invia a Interactive' (ALT-INVIO o clic con il pulsante destro del mouse) da uno script F#. Il processo di F# Interactive\n userà le eventuali impostazioni di global.json associate allo script.\n 2. Premere 'INVIO' per iniziare. Il processo di F# Interactive userà le impostazioni predefinite. + + - Session termination detected. Press Enter to restart. - Rilevata terminazione di sessione. Premere INVIO per riavviare. + Session termination detected. + È stata rilevata la terminazione della sessione. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ja.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ja.xlf index 34c5ae7317f..568834e7f23 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ja.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ja.xlf @@ -22,9 +22,14 @@ F# 言語サービスを読み込めませんでした + + Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. + Visual Studio の .NET Core の F# インタラクティブへようこそ。コードを実行するには、\n 1. F# スクリプトから [Interactive に送信] (Alt+Enter または右クリック) を使用します。F# インタラクティブ プロセスでは、\n そのスクリプトに関連付けられている任意の global.json 設定が使用されます。\n 2. 開始するには、Enter キーを押します。F# インタラクティブ プロセスでは、既定の設定が使用されます。 + + - Session termination detected. Press Enter to restart. - セッションの終了が検出されました。再開する場合は Enter キーを押してください。 + Session termination detected. + セッションの終了が検出されました。 diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ko.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ko.xlf index a4aa68732a3..ca0309e1962 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ko.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ko.xlf @@ -22,9 +22,14 @@ F# 언어 서비스를 로드할 수 없습니다. + + Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. + Visual Studio의 .NET Core용 F# 대화형을 시작합니다. 코드를 실행하려면 다음 중 한 가지를 수행합니다.\n 1. F# 스크립트에서 '대화형으로 보내기'(Alt-Enter 또는 마우스 오른쪽 단추 클릭)를 사용합니다. F# 대화형 프로세스에서\n 해당 스크립트와 연결된 모든 global.json 설정을 사용합니다.\n 2. 'Enter' 키를 눌러 시작합니다. F# 대화형 프로세스에서 기본 설정을 사용합니다. + + - Session termination detected. Press Enter to restart. - 세션 종료가 검색되었습니다. 다시 시작하려면 <Enter> 키를 누르세요. + Session termination detected. + 세션 종료가 감지되었습니다. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pl.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pl.xlf index 34a64865416..00f73c99b22 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pl.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pl.xlf @@ -22,9 +22,14 @@ Nie można załadować usługi języka F# + + Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. + F# Interactive dla platformy .NET Core w programie Visual Studio — Zapraszamy! Aby wykonać kod, wykonaj jedną z następujących akcji:\n 1. Użyj polecenia „Wyślij do interaktywnego” (Alt+Enter lub kliknij prawym przyciskiem myszy) z poziomu skryptu języka F#. Proces narzędzia F# Interactive\n użyje dowolnych ustawień global.json skojarzonych z tym skryptem.\n 2. Naciśnij klawisz „Enter”, aby rozpocząć. Proces narzędzia F# Interactive użyje ustawień domyślnych. + + - Session termination detected. Press Enter to restart. - Wykryto zakończenie sesji. Naciśnij klawisz Enter, aby uruchomić ją ponownie. + Session termination detected. + Wykryto zakończenie sesji. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pt-BR.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pt-BR.xlf index a3d2f3edb35..5fdb3152e34 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pt-BR.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.pt-BR.xlf @@ -22,9 +22,14 @@ Não foi possível carregar o serviço de linguagem F# + + Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. + Bem-vindo(a) ao F# Interativo para .NET Core no Visual Studio. Para executar o código, ou\n 1. Use 'Enviar para Interativo' (Alt-Enter ou clique com o botão direito do mouse) de um script F#. O processo de F# Interativo\n usará quaisquer configurações global.json associadas a esse script.\n 2. Pressione 'Enter' para começar. O processo de F# Interativo usará as configurações padrão. + + - Session termination detected. Press Enter to restart. - Encerramento da sessão detectado. Pressione a tecla Enter para reiniciar. + Session termination detected. + Encerramento da sessão detectado. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ru.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ru.xlf index c0b711f3b86..2b699562cab 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ru.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.ru.xlf @@ -22,9 +22,14 @@ Не удалось загрузить службу языка F# + + Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. + Добро пожаловать в F# Interactive для .NET Core в Visual Studio. Для выполнения кода используйте любой из двух следующих вариантов: \n 1. Используйте команду "Отправить в Interactive" для сценария F# (чтобы получить доступ к этой команде, нажмите ALT+ВВОД или правую кнопку мыши). Процесс F# Interactive \n будет использовать все параметры global.json, связанные с этим сценарием.\n 2. Нажмите клавишу ВВОД для запуска сценария. Процесс F# Interactive будет использовать параметры по умолчанию. + + - Session termination detected. Press Enter to restart. - Обнаружено прекращение сеанса. Нажмите клавишу ВВОД для перезапуска. + Session termination detected. + Обнаружено прекращение сеанса. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.tr.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.tr.xlf index 6d80fb6bee6..972fae6d8e4 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.tr.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.tr.xlf @@ -22,9 +22,14 @@ F# dil hizmeti yüklenemedi + + Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. + Visual Studio'daki .NET Core için F# Etkileşimli'ye hoş geldiniz. Kodu yürütmek için şunlardan birini yapın:\n 1. Bir F# betiğinden 'Etkileşimliye Gönder' (Alt+Enter veya sağ tıklama) seçeneğini kullanın. F# Etkileşimli işlemi\n bu betikle ilişkili tüm global.json ayarlarını kullanır.\n 2. Başlatmak için 'Enter' tuşuna basın. F# Etkileşimli işlemi varsayılan ayarları kullanır. + + - Session termination detected. Press Enter to restart. - Oturum sonlandırma algılandı. Yeniden başlatmak için Enter'a basın. + Session termination detected. + Oturumun sonlandırıldığı algılandı. diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hans.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hans.xlf index f4789a477c4..c8f65fa5dce 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hans.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hans.xlf @@ -22,9 +22,14 @@ 未能加载 F# 语言服务 + + Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. + 欢迎使用 Visual Studio 中 .NET Core 的 F# 交互窗口。若要执行代码,请\n 1. 从 F# 脚本中使用“发送到交互”(Alt-Enter 或右键单击)。F# 交互进程将\n 使用与该脚本关联的任何 global.json 设置。\n 2. 按 "Enter" 开始。F# 交互进程将使用默认设置。 + + - Session termination detected. Press Enter to restart. - 检测到会话已终止。请按 Enter 重新启动会话。 + Session termination detected. + 检测到会话已终止。 diff --git a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hant.xlf b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hant.xlf index ba06ff32813..5eac45e87cb 100644 --- a/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hant.xlf +++ b/vsintegration/src/FSharp.VS.FSI/xlf/VFSIstrings.txt.zh-Hant.xlf @@ -22,9 +22,14 @@ 無法載入 F# 語言服務 + + Welcome to F# Interactive for .NET Core in Visual Studio. To execute code, either\n 1. Use 'Send to Interactive' (Alt-Enter or right-click) from an F# script. The F# Interactive process will\n use any global.json settings associated with that script.\n 2. Press 'Enter' to start. The F# Interactive process will use default settings. + 歡迎使用 Visual Studio 中 .NET Core 的 F# 互動。若要執行程式碼,請選用其中一種方式:\n 1. 從 F# 指令碼使用 [傳送到互動] (按 Alt-Enter 鍵或滑鼠右鍵)。F# 互動處理序將會\n 使用任何與該指令碼相關的 global.json 設定。\n 2. 按下 'Enter' 鍵即可開始。F# 互動處理序將使用預設設定。 + + - Session termination detected. Press Enter to restart. - 偵測到工作階段終止。請按 Enter 重新啟動。 + Session termination detected. + 偵測到工作階段終止。 diff --git a/vsintegration/tests/GetTypesVS.UnitTests/GetTypesVS.UnitTests.fsproj b/vsintegration/tests/GetTypesVS.UnitTests/GetTypesVS.UnitTests.fsproj index 911e5e9a944..4fa4549e645 100644 --- a/vsintegration/tests/GetTypesVS.UnitTests/GetTypesVS.UnitTests.fsproj +++ b/vsintegration/tests/GetTypesVS.UnitTests/GetTypesVS.UnitTests.fsproj @@ -23,6 +23,7 @@ + diff --git a/vsintegration/tests/MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fsproj b/vsintegration/tests/MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fsproj index 5bdfd8af56f..84b50e8a6a7 100644 --- a/vsintegration/tests/MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fsproj +++ b/vsintegration/tests/MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fsproj @@ -5,7 +5,7 @@ net472 true - --nowarn:3390 --nowarn:3218 + $(OtherFlags) --nowarn:3390 --nowarn:3218 diff --git a/vsintegration/tests/MockTypeProviders/DummyProviderForLanguageServiceTesting/ProvidedTypes.fs b/vsintegration/tests/MockTypeProviders/DummyProviderForLanguageServiceTesting/ProvidedTypes.fs index f3ab2e871c3..70203708ee9 100644 --- a/vsintegration/tests/MockTypeProviders/DummyProviderForLanguageServiceTesting/ProvidedTypes.fs +++ b/vsintegration/tests/MockTypeProviders/DummyProviderForLanguageServiceTesting/ProvidedTypes.fs @@ -33,10 +33,10 @@ namespace ProviderImplementation.ProvidedTypes [] type StructOption<'T> (hasValue: bool, value: 'T) = - member __.IsNone = not hasValue - member __.HasValue = hasValue - member __.Value = value - override __.ToString() = if hasValue then match box value with null -> "null" | x -> x.ToString() else "" + member _.IsNone = not hasValue + member _.HasValue = hasValue + member _.Value = value + override _.ToString() = if hasValue then match box value with null -> "null" | x -> x.ToString() else "" type uoption<'T> = StructOption<'T> @@ -503,7 +503,7 @@ namespace ProviderImplementation.ProvidedTypes do this.typeImpl <- this /// Substitute types for type variables. - override __.FullName = + override _.FullName = match kind,typeArgs with | ProvidedTypeSymbolKind.SDArray,[| arg |] -> arg.FullName + "[]" | ProvidedTypeSymbolKind.Array _,[| arg |] -> arg.FullName + "[*]" @@ -515,7 +515,7 @@ namespace ProviderImplementation.ProvidedTypes /// Although not strictly required by the type provider specification, this is required when doing basic operations like FullName on /// .NET symbolic types made from this type, e.g. when building Nullable.FullName - override __.DeclaringType = + override _.DeclaringType = match kind with | ProvidedTypeSymbolKind.SDArray -> null | ProvidedTypeSymbolKind.Array _ -> null @@ -524,7 +524,7 @@ namespace ProviderImplementation.ProvidedTypes | ProvidedTypeSymbolKind.Generic gty -> gty.DeclaringType | ProvidedTypeSymbolKind.FSharpTypeAbbreviation _ -> null - override __.Name = + override _.Name = match kind,typeArgs with | ProvidedTypeSymbolKind.SDArray,[| arg |] -> arg.Name + "[]" | ProvidedTypeSymbolKind.Array _,[| arg |] -> arg.Name + "[*]" @@ -534,7 +534,7 @@ namespace ProviderImplementation.ProvidedTypes | ProvidedTypeSymbolKind.FSharpTypeAbbreviation (_,_,path),_ -> path.[path.Length-1] | _ -> failwith "unreachable" - override __.BaseType = + override _.BaseType = match kind with | ProvidedTypeSymbolKind.SDArray -> typeof | ProvidedTypeSymbolKind.Array _ -> typeof @@ -545,18 +545,18 @@ namespace ProviderImplementation.ProvidedTypes instType (typeArgs, [| |]) gty.BaseType | ProvidedTypeSymbolKind.FSharpTypeAbbreviation _ -> typeof - override __.GetArrayRank() = (match kind with ProvidedTypeSymbolKind.Array n -> n | ProvidedTypeSymbolKind.SDArray -> 1 | _ -> failwithf "non-array type '%O'" this) - override __.IsValueTypeImpl() = (match kind with ProvidedTypeSymbolKind.Generic gtd -> gtd.IsValueType | _ -> false) - override __.IsArrayImpl() = (match kind with ProvidedTypeSymbolKind.Array _ | ProvidedTypeSymbolKind.SDArray -> true | _ -> false) - override __.IsByRefImpl() = (match kind with ProvidedTypeSymbolKind.ByRef _ -> true | _ -> false) - override __.IsPointerImpl() = (match kind with ProvidedTypeSymbolKind.Pointer _ -> true | _ -> false) - override __.IsPrimitiveImpl() = false - override __.IsGenericType = (match kind with ProvidedTypeSymbolKind.Generic _ -> true | _ -> false) + override _.GetArrayRank() = (match kind with ProvidedTypeSymbolKind.Array n -> n | ProvidedTypeSymbolKind.SDArray -> 1 | _ -> failwithf "non-array type '%O'" this) + override _.IsValueTypeImpl() = (match kind with ProvidedTypeSymbolKind.Generic gtd -> gtd.IsValueType | _ -> false) + override _.IsArrayImpl() = (match kind with ProvidedTypeSymbolKind.Array _ | ProvidedTypeSymbolKind.SDArray -> true | _ -> false) + override _.IsByRefImpl() = (match kind with ProvidedTypeSymbolKind.ByRef _ -> true | _ -> false) + override _.IsPointerImpl() = (match kind with ProvidedTypeSymbolKind.Pointer _ -> true | _ -> false) + override _.IsPrimitiveImpl() = false + override _.IsGenericType = (match kind with ProvidedTypeSymbolKind.Generic _ -> true | _ -> false) override this.GetGenericArguments() = (match kind with ProvidedTypeSymbolKind.Generic _ -> typeArgs | _ -> failwithf "non-generic type '%O'" this) override this.GetGenericTypeDefinition() = (match kind with ProvidedTypeSymbolKind.Generic e -> e | _ -> failwithf "non-generic type '%O'" this) - override __.IsCOMObjectImpl() = false - override __.HasElementTypeImpl() = (match kind with ProvidedTypeSymbolKind.Generic _ -> false | _ -> true) - override __.GetElementType() = (match kind,typeArgs with (ProvidedTypeSymbolKind.Array _ | ProvidedTypeSymbolKind.SDArray | ProvidedTypeSymbolKind.ByRef | ProvidedTypeSymbolKind.Pointer),[| e |] -> e | _ -> failwithf "not an array, pointer or byref type") + override _.IsCOMObjectImpl() = false + override _.HasElementTypeImpl() = (match kind with ProvidedTypeSymbolKind.Generic _ -> false | _ -> true) + override _.GetElementType() = (match kind,typeArgs with (ProvidedTypeSymbolKind.Array _ | ProvidedTypeSymbolKind.SDArray | ProvidedTypeSymbolKind.ByRef | ProvidedTypeSymbolKind.Pointer),[| e |] -> e | _ -> failwithf "not an array, pointer or byref type") override this.Assembly = match kind, typeArgs with @@ -580,7 +580,7 @@ namespace ProviderImplementation.ProvidedTypes override x.Module = x.Assembly.ManifestModule - override __.GetHashCode() = + override _.GetHashCode() = match kind,typeArgs with | ProvidedTypeSymbolKind.SDArray,[| arg |] -> 10 + hash arg | ProvidedTypeSymbolKind.Array _,[| arg |] -> 163 + hash arg @@ -598,16 +598,16 @@ namespace ProviderImplementation.ProvidedTypes override this.IsSubclassOf(otherTy: Type) = isSubclassOf this otherTy - member __.Kind = kind + member _.Kind = kind - member __.Args = typeArgs + member _.Args = typeArgs - member __.IsFSharpTypeAbbreviation = match kind with FSharpTypeAbbreviation _ -> true | _ -> false + member _.IsFSharpTypeAbbreviation = match kind with FSharpTypeAbbreviation _ -> true | _ -> false // For example, int - member __.IsFSharpUnitAnnotated = match kind with ProvidedTypeSymbolKind.Generic gtd -> not gtd.IsGenericTypeDefinition | _ -> false + member _.IsFSharpUnitAnnotated = match kind with ProvidedTypeSymbolKind.Generic gtd -> not gtd.IsGenericTypeDefinition | _ -> false - override __.GetConstructorImpl(_bindingFlags, _binder, _callConventions, _types, _modifiers) = null + override _.GetConstructorImpl(_bindingFlags, _binder, _callConventions, _types, _modifiers) = null override this.GetMethodImpl(name, bindingFlags, _binderBinder, _callConvention, _types, _modifiers) = match kind with @@ -654,7 +654,7 @@ namespace ProviderImplementation.ProvidedTypes | ProvidedTypeSymbolKind.ByRef -> upcast this | ProvidedTypeSymbolKind.Generic gty -> gty.UnderlyingSystemType - override __.GetCustomAttributesData() = ([| |] :> IList<_>) + override _.GetCustomAttributesData() = ([| |] :> IList<_>) override this.MemberType = notRequired this "MemberType" this.FullName @@ -666,17 +666,17 @@ namespace ProviderImplementation.ProvidedTypes override this.AssemblyQualifiedName = notRequired this "AssemblyQualifiedName" this.FullName - override __.GetCustomAttributes(_inherit) = emptyAttributes + override _.GetCustomAttributes(_inherit) = emptyAttributes - override __.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes + override _.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes - override __.IsDefined(_attributeType, _inherit) = false + override _.IsDefined(_attributeType, _inherit) = false override this.MakeArrayType() = ProvidedTypeSymbol(ProvidedTypeSymbolKind.SDArray, [this]) :> Type override this.MakeArrayType arg = ProvidedTypeSymbol(ProvidedTypeSymbolKind.Array arg, [this]) :> Type - override __.MetadataToken = + override _.MetadataToken = match kind with | ProvidedTypeSymbolKind.SDArray -> typeof.MetadataToken | ProvidedTypeSymbolKind.Array _ -> typeof.MetadataToken @@ -694,11 +694,11 @@ namespace ProviderImplementation.ProvidedTypes let convParam (p:ParameterInfo) = { new ParameterInfo() with - override __.Name = p.Name - override __.ParameterType = instType (parameters, [| |]) p.ParameterType - override __.Attributes = p.Attributes - override __.RawDefaultValue = p.RawDefaultValue - override __.GetCustomAttributesData() = p.GetCustomAttributesData() + override _.Name = p.Name + override _.ParameterType = instType (parameters, [| |]) p.ParameterType + override _.Attributes = p.Attributes + override _.RawDefaultValue = p.RawDefaultValue + override _.GetCustomAttributesData() = p.GetCustomAttributesData() } override this.IsGenericMethod = @@ -707,28 +707,28 @@ namespace ProviderImplementation.ProvidedTypes override this.GetGenericArguments() = Seq.skip (if this.DeclaringType.IsGenericType then this.DeclaringType.GetGenericArguments().Length else 0) parameters |> Seq.toArray - override __.GetGenericMethodDefinition() = genericMethodDefinition + override _.GetGenericMethodDefinition() = genericMethodDefinition - override __.DeclaringType = instType (parameters, [| |]) genericMethodDefinition.DeclaringType - override __.ToString() = "Method " + genericMethodDefinition.Name - override __.Name = genericMethodDefinition.Name - override __.MetadataToken = genericMethodDefinition.MetadataToken - override __.Attributes = genericMethodDefinition.Attributes - override __.CallingConvention = genericMethodDefinition.CallingConvention - override __.MemberType = genericMethodDefinition.MemberType + override _.DeclaringType = instType (parameters, [| |]) genericMethodDefinition.DeclaringType + override _.ToString() = "Method " + genericMethodDefinition.Name + override _.Name = genericMethodDefinition.Name + override _.MetadataToken = genericMethodDefinition.MetadataToken + override _.Attributes = genericMethodDefinition.Attributes + override _.CallingConvention = genericMethodDefinition.CallingConvention + override _.MemberType = genericMethodDefinition.MemberType override this.IsDefined(_attributeType, _inherit): bool = notRequired this "IsDefined" genericMethodDefinition.Name - override __.ReturnType = instType (parameters, [| |]) genericMethodDefinition.ReturnType - override __.GetParameters() = genericMethodDefinition.GetParameters() |> Array.map convParam - override __.ReturnParameter = genericMethodDefinition.ReturnParameter |> convParam + override _.ReturnType = instType (parameters, [| |]) genericMethodDefinition.ReturnType + override _.GetParameters() = genericMethodDefinition.GetParameters() |> Array.map convParam + override _.ReturnParameter = genericMethodDefinition.ReturnParameter |> convParam override this.ReturnTypeCustomAttributes = notRequired this "ReturnTypeCustomAttributes" genericMethodDefinition.Name override this.GetBaseDefinition() = notRequired this "GetBaseDefinition" genericMethodDefinition.Name override this.GetMethodImplementationFlags() = notRequired this "GetMethodImplementationFlags" genericMethodDefinition.Name override this.MethodHandle = notRequired this "MethodHandle" genericMethodDefinition.Name override this.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired this "Invoke" genericMethodDefinition.Name override this.ReflectedType = notRequired this "ReflectedType" genericMethodDefinition.Name - override __.GetCustomAttributes(_inherit) = emptyAttributes - override __.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes + override _.GetCustomAttributes(_inherit) = emptyAttributes + override _.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes //-------------------------------------------------------------------------------- // ProvidedMethod, ProvidedConstructor, ProvidedTypeDefinition and other provided objects @@ -740,53 +740,53 @@ namespace ProviderImplementation.ProvidedTypes let mkParamArrayCustomAttributeData() = { new CustomAttributeData() with - member __.Constructor = typeof.GetConstructors().[0] - member __.ConstructorArguments = upcast [| |] - member __.NamedArguments = upcast [| |] } + member _.Constructor = typeof.GetConstructors().[0] + member _.ConstructorArguments = upcast [| |] + member _.NamedArguments = upcast [| |] } let mkEditorHideMethodsCustomAttributeData() = { new CustomAttributeData() with - member __.Constructor = typeof.GetConstructors().[0] - member __.ConstructorArguments = upcast [| |] - member __.NamedArguments = upcast [| |] } + member _.Constructor = typeof.GetConstructors().[0] + member _.ConstructorArguments = upcast [| |] + member _.NamedArguments = upcast [| |] } let mkAllowNullLiteralCustomAttributeData value = { new CustomAttributeData() with - member __.Constructor = typeof.GetConstructors().[0] - member __.ConstructorArguments = upcast [| CustomAttributeTypedArgument(typeof, value) |] - member __.NamedArguments = upcast [| |] } + member _.Constructor = typeof.GetConstructors().[0] + member _.ConstructorArguments = upcast [| CustomAttributeTypedArgument(typeof, value) |] + member _.NamedArguments = upcast [| |] } /// This makes an xml doc attribute w.r.t. an amortized computation of an xml doc string. /// It is important that the text of the xml doc only get forced when poking on the ConstructorArguments /// for the CustomAttributeData object. let mkXmlDocCustomAttributeDataLazy(lazyText: Lazy) = { new CustomAttributeData() with - member __.Constructor = typeof.GetConstructors().[0] - member __.ConstructorArguments = upcast [| CustomAttributeTypedArgument(typeof, lazyText.Force()) |] - member __.NamedArguments = upcast [| |] } + member _.Constructor = typeof.GetConstructors().[0] + member _.ConstructorArguments = upcast [| CustomAttributeTypedArgument(typeof, lazyText.Force()) |] + member _.NamedArguments = upcast [| |] } let mkXmlDocCustomAttributeData(s:string) = mkXmlDocCustomAttributeDataLazy (lazy s) let mkDefinitionLocationAttributeCustomAttributeData(line:int,column:int,filePath:string) = { new CustomAttributeData() with - member __.Constructor = typeof.GetConstructors().[0] - member __.ConstructorArguments = upcast [| |] - member __.NamedArguments = + member _.Constructor = typeof.GetConstructors().[0] + member _.ConstructorArguments = upcast [| |] + member _.NamedArguments = upcast [| CustomAttributeNamedArgument(typeof.GetProperty("FilePath"), CustomAttributeTypedArgument(typeof, filePath)); CustomAttributeNamedArgument(typeof.GetProperty("Line"), CustomAttributeTypedArgument(typeof, line)) ; CustomAttributeNamedArgument(typeof.GetProperty("Column"), CustomAttributeTypedArgument(typeof, column)) |] } let mkObsoleteAttributeCustomAttributeData(message:string, isError: bool) = { new CustomAttributeData() with - member __.Constructor = typeof.GetConstructors() |> Array.find (fun x -> x.GetParameters().Length = 2) - member __.ConstructorArguments = upcast [|CustomAttributeTypedArgument(typeof, message) ; CustomAttributeTypedArgument(typeof, isError) |] - member __.NamedArguments = upcast [| |] } + member _.Constructor = typeof.GetConstructors() |> Array.find (fun x -> x.GetParameters().Length = 2) + member _.ConstructorArguments = upcast [|CustomAttributeTypedArgument(typeof, message) ; CustomAttributeTypedArgument(typeof, isError) |] + member _.NamedArguments = upcast [| |] } let mkReflectedDefinitionCustomAttributeData() = { new CustomAttributeData() with - member __.Constructor = typeof.GetConstructors().[0] - member __.ConstructorArguments = upcast [| |] - member __.NamedArguments = upcast [| |] } + member _.Constructor = typeof.GetConstructors().[0] + member _.ConstructorArguments = upcast [| |] + member _.NamedArguments = upcast [| |] } type CustomAttributesImpl(customAttributesData) = let customAttributes = ResizeArray() @@ -816,17 +816,17 @@ namespace ProviderImplementation.ProvidedTypes yield! customAttributesData() yield! customAttributes |] - member __.AddDefinitionLocation(line:int,column:int,filePath:string) = customAttributes.Add(mkDefinitionLocationAttributeCustomAttributeData(line, column, filePath)) - member __.AddObsolete(message: string, isError) = obsoleteMessage <- Some (message,isError) - member __.HasParamArray with get() = hasParamArray and set(v) = hasParamArray <- v - member __.HasReflectedDefinition with get() = hasReflectedDefinition and set(v) = hasReflectedDefinition <- v - member __.AddXmlDocComputed xmlDocFunction = xmlDocAlwaysRecomputed <- Some xmlDocFunction - member __.AddXmlDocDelayed xmlDocFunction = xmlDocDelayed <- Some xmlDocFunction - member __.AddXmlDoc xmlDoc = xmlDocDelayed <- Some (K xmlDoc) - member __.HideObjectMethods with get() = hideObjectMethods and set v = hideObjectMethods <- v - member __.NonNullable with get () = nonNullable and set v = nonNullable <- v - member __.AddCustomAttribute(attribute) = customAttributes.Add(attribute) - member __.GetCustomAttributesData() = + member _.AddDefinitionLocation(line:int,column:int,filePath:string) = customAttributes.Add(mkDefinitionLocationAttributeCustomAttributeData(line, column, filePath)) + member _.AddObsolete(message: string, isError) = obsoleteMessage <- Some (message,isError) + member _.HasParamArray with get() = hasParamArray and set(v) = hasParamArray <- v + member _.HasReflectedDefinition with get() = hasReflectedDefinition and set(v) = hasReflectedDefinition <- v + member _.AddXmlDocComputed xmlDocFunction = xmlDocAlwaysRecomputed <- Some xmlDocFunction + member _.AddXmlDocDelayed xmlDocFunction = xmlDocDelayed <- Some xmlDocFunction + member _.AddXmlDoc xmlDoc = xmlDocDelayed <- Some (K xmlDoc) + member _.HideObjectMethods with get() = hideObjectMethods and set v = hideObjectMethods <- v + member _.NonNullable with get () = nonNullable and set v = nonNullable <- v + member _.AddCustomAttribute(attribute) = customAttributes.Add(attribute) + member _.GetCustomAttributesData() = [| yield! customAttributesOnce.Force() // Recomputed XML doc is evaluated on every call to GetCustomAttributesData() match xmlDocAlwaysRecomputed with None -> () | Some f -> yield mkXmlDocCustomAttributeData (f()) |] @@ -841,21 +841,21 @@ namespace ProviderImplementation.ProvidedTypes new (parameterName:string, parameterType:Type, ?parameterDefaultValue:obj) = ProvidedStaticParameter(false, parameterName, parameterType, parameterDefaultValue, (K [| |])) - member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member __.ParameterDefaultValue = parameterDefaultValue - member __.BelongsToTargetModel = isTgt + member _.ParameterDefaultValue = parameterDefaultValue + member _.BelongsToTargetModel = isTgt - override __.RawDefaultValue = defaultArg parameterDefaultValue null - override __.Attributes = if parameterDefaultValue.IsNone then enum 0 else ParameterAttributes.Optional - override __.Position = 0 - override __.ParameterType = parameterType - override __.Name = parameterName - override __.GetCustomAttributes(_inherit) = emptyAttributes - override __.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes - override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override _.RawDefaultValue = defaultArg parameterDefaultValue null + override _.Attributes = if parameterDefaultValue.IsNone then enum 0 else ParameterAttributes.Optional + override _.Position = 0 + override _.ParameterType = parameterType + override _.Name = parameterName + override _.GetCustomAttributes(_inherit) = emptyAttributes + override _.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes + override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() type ProvidedParameter(isTgt: bool, parameterName:string, attrs, parameterType:Type, optionalValue:obj option, customAttributesData) = @@ -872,18 +872,18 @@ namespace ProviderImplementation.ProvidedTypes (match optionalValue with None -> enum 0 | Some _ -> ParameterAttributes.Optional ||| ParameterAttributes.HasDefault) ProvidedParameter(false, parameterName, attrs, parameterType, optionalValue, K [| |]) - member __.IsParamArray with set(v) = customAttributesImpl.HasParamArray <- v - member __.IsReflectedDefinition with set(v) = customAttributesImpl.HasReflectedDefinition <- v - member __.OptionalValue = optionalValue - member __.HasDefaultParameterValue = Option.isSome optionalValue - member __.BelongsToTargetModel = isTgt - member __.AddCustomAttribute(attribute) = customAttributesImpl.AddCustomAttribute(attribute) + member _.IsParamArray with set(v) = customAttributesImpl.HasParamArray <- v + member _.IsReflectedDefinition with set(v) = customAttributesImpl.HasReflectedDefinition <- v + member _.OptionalValue = optionalValue + member _.HasDefaultParameterValue = Option.isSome optionalValue + member _.BelongsToTargetModel = isTgt + member _.AddCustomAttribute(attribute) = customAttributesImpl.AddCustomAttribute(attribute) - override __.Name = parameterName - override __.ParameterType = parameterType - override __.Attributes = attrs - override __.RawDefaultValue = defaultArg optionalValue null - override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override _.Name = parameterName + override _.ParameterType = parameterType + override _.Attributes = attrs + override _.RawDefaultValue = defaultArg optionalValue null + override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() and ProvidedConstructor(isTgt: bool, attrs: MethodAttributes, parameters: ProvidedParameter[], invokeCode: (Expr list -> Expr), baseCall, isImplicitCtor, customAttributesData) = @@ -900,48 +900,48 @@ namespace ProviderImplementation.ProvidedTypes new (parameters, invokeCode) = ProvidedConstructor(false, MethodAttributes.Public ||| MethodAttributes.RTSpecialName, Array.ofList parameters, invokeCode, None, false, K [| |]) - member __.IsTypeInitializer + member _.IsTypeInitializer with get() = isStatic() && attrs.HasFlag(MethodAttributes.Private) and set(v) = let typeInitializerAttributes = MethodAttributes.Static ||| MethodAttributes.Private attrs <- if v then attrs ||| typeInitializerAttributes else attrs &&& ~~~typeInitializerAttributes - member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member __.PatchDeclaringType x = patchOption declaringType (fun () -> declaringType <- Some x) + member _.PatchDeclaringType x = patchOption declaringType (fun () -> declaringType <- Some x) member this.BaseConstructorCall with set (d:Expr list -> (ConstructorInfo * Expr list)) = match baseCall with | None -> baseCall <- Some d | Some _ -> failwithf "ProvidedConstructor: base call already given for '%s'" this.Name - member __.IsImplicitConstructor with get() = isImplicitCtor and set v = isImplicitCtor <- v - member __.BaseCall = baseCall - member __.Parameters = parameters - member __.GetInvokeCode args = invokeCode args - member __.BelongsToTargetModel = isTgt - member __.DeclaringProvidedType = declaringType + member _.IsImplicitConstructor with get() = isImplicitCtor and set v = isImplicitCtor <- v + member _.BaseCall = baseCall + member _.Parameters = parameters + member _.GetInvokeCode args = invokeCode args + member _.BelongsToTargetModel = isTgt + member _.DeclaringProvidedType = declaringType member this.IsErased = (nonNone "DeclaringType" this.DeclaringProvidedType).IsErased // Implement overloads - override __.GetParameters() = parameterInfos - override __.Attributes = attrs - override __.Name = if isStatic() then ".cctor" else ".ctor" - override __.DeclaringType = declaringType |> nonNone "DeclaringType" :> Type - override __.IsDefined(_attributeType, _inherit) = true + override _.GetParameters() = parameterInfos + override _.Attributes = attrs + override _.Name = if isStatic() then ".cctor" else ".ctor" + override _.DeclaringType = declaringType |> nonNone "DeclaringType" :> Type + override _.IsDefined(_attributeType, _inherit) = true override this.Invoke(_invokeAttr, _binder, _parameters, _culture) = notRequired this "Invoke" this.Name override this.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired this "Invoke" this.Name override this.ReflectedType = notRequired this "ReflectedType" this.Name override this.GetMethodImplementationFlags() = notRequired this "GetMethodImplementationFlags" this.Name override this.MethodHandle = notRequired this "MethodHandle" this.Name - override __.GetCustomAttributes(_inherit) = emptyAttributes - override __.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes - override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override _.GetCustomAttributes(_inherit) = emptyAttributes + override _.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes + override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() and ProvidedMethod(isTgt: bool, methodName: string, attrs: MethodAttributes, parameters: ProvidedParameter[], returnType: Type, invokeCode: (Expr list -> Expr), staticParams, staticParamsApply, customAttributesData) = inherit MethodInfo() @@ -959,24 +959,24 @@ namespace ProviderImplementation.ProvidedTypes let attrs = if isStatic then MethodAttributes.Public ||| MethodAttributes.Static else MethodAttributes.Public ProvidedMethod(false, methodName, attrs, Array.ofList parameters, returnType, invokeCode, [], None, K [| |]) - member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member __.AddCustomAttribute(attribute) = customAttributesImpl.AddCustomAttribute(attribute) + member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member _.AddCustomAttribute(attribute) = customAttributesImpl.AddCustomAttribute(attribute) - member __.SetMethodAttrs attributes = attrs <- attributes - member __.AddMethodAttrs attributes = attrs <- attrs ||| attributes - member __.PatchDeclaringType x = patchOption declaringType (fun () -> declaringType <- Some x) + member _.SetMethodAttrs attributes = attrs <- attributes + member _.AddMethodAttrs attributes = attrs <- attrs ||| attributes + member _.PatchDeclaringType x = patchOption declaringType (fun () -> declaringType <- Some x) /// Abstract a type to a parametric-type. Requires "formal parameters" and "instantiation function". - member __.DefineStaticParameters(parameters: ProvidedStaticParameter list, instantiationFunction: (string -> obj[] -> ProvidedMethod)) = + member _.DefineStaticParameters(parameters: ProvidedStaticParameter list, instantiationFunction: (string -> obj[] -> ProvidedMethod)) = staticParams <- parameters staticParamsApply <- Some instantiationFunction /// Get ParameterInfo[] for the parametric type parameters - member __.GetStaticParametersInternal() = [| for p in staticParams -> p :> ParameterInfo |] + member _.GetStaticParametersInternal() = [| for p in staticParams -> p :> ParameterInfo |] /// Instantiate parametric method member this.ApplyStaticArguments(mangledName:string, args:obj[]) = @@ -989,43 +989,43 @@ namespace ProviderImplementation.ProvidedTypes else this - member __.Parameters = parameters - member __.GetInvokeCode args = invokeCode args - member __.StaticParams = staticParams - member __.StaticParamsApply = staticParamsApply - member __.BelongsToTargetModel = isTgt - member __.DeclaringProvidedType = declaringType + member _.Parameters = parameters + member _.GetInvokeCode args = invokeCode args + member _.StaticParams = staticParams + member _.StaticParamsApply = staticParamsApply + member _.BelongsToTargetModel = isTgt + member _.DeclaringProvidedType = declaringType member this.IsErased = (nonNone "DeclaringType" this.DeclaringProvidedType).IsErased // Implement overloads - override __.GetParameters() = parameterInfos - override __.Attributes = attrs - override __.Name = methodName - override __.DeclaringType = declaringType |> nonNone "DeclaringType" :> Type - override __.IsDefined(_attributeType, _inherit): bool = true - override __.MemberType = MemberTypes.Method + override _.GetParameters() = parameterInfos + override _.Attributes = attrs + override _.Name = methodName + override _.DeclaringType = declaringType |> nonNone "DeclaringType" :> Type + override _.IsDefined(_attributeType, _inherit): bool = true + override _.MemberType = MemberTypes.Method override x.CallingConvention = let cc = CallingConventions.Standard let cc = if not x.IsStatic then cc ||| CallingConventions.HasThis else cc cc - override __.ReturnType = returnType - override __.ReturnParameter = null // REVIEW: Give it a name and type? - override __.ToString() = "Method " + methodName + override _.ReturnType = returnType + override _.ReturnParameter = null // REVIEW: Give it a name and type? + override _.ToString() = "Method " + methodName // These don't have to return fully accurate results - they are used // by the F# Quotations library function SpecificCall as a pre-optimization // when comparing methods - override __.MetadataToken = genToken() - override __.MethodHandle = RuntimeMethodHandle() + override _.MetadataToken = genToken() + override _.MethodHandle = RuntimeMethodHandle() override this.ReturnTypeCustomAttributes = notRequired this "ReturnTypeCustomAttributes" methodName override this.GetBaseDefinition() = notRequired this "GetBaseDefinition" methodName override this.GetMethodImplementationFlags() = notRequired this "GetMethodImplementationFlags" methodName override this.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired this "Invoke" methodName override this.ReflectedType = notRequired this "ReflectedType" methodName - override __.GetCustomAttributes(_inherit) = emptyAttributes - override __.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes - override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override _.GetCustomAttributes(_inherit) = emptyAttributes + override _.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes + override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() and ProvidedProperty(isTgt: bool, propertyName: string, attrs: PropertyAttributes, propertyType: Type, isStatic: bool, getter: (unit -> MethodInfo) option, setter: (unit -> MethodInfo) option, indexParameters: ProvidedParameter[], customAttributesData) = @@ -1044,43 +1044,43 @@ namespace ProviderImplementation.ProvidedTypes let setter = setterCode |> Option.map (fun code -> ProvidedMethod(false, "set_" + propertyName, pattrs, [| yield! indexParameters; yield ProvidedParameter(false, "value",propertyType,isOut=Some false,optionalValue=None) |], typeof,code, [], None, K [| |]) :> MethodInfo) ProvidedProperty(false, propertyName, PropertyAttributes.None, propertyType, isStatic, Option.map K getter, Option.map K setter, Array.ofList indexParameters, K [| |]) - member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member __.AddCustomAttribute attribute = customAttributesImpl.AddCustomAttribute attribute - override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member _.AddCustomAttribute attribute = customAttributesImpl.AddCustomAttribute attribute + override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() - member __.PatchDeclaringType x = + member _.PatchDeclaringType x = if not isTgt then match getter with Some f -> (match f() with (:? ProvidedMethod as g) -> g.PatchDeclaringType x | _ -> ()) | _ -> () match setter with Some f -> (match f() with (:? ProvidedMethod as s) -> s.PatchDeclaringType x | _ -> ()) | _ -> () patchOption declaringType (fun () -> declaringType <- Some x) - member __.IsStatic = isStatic - member __.IndexParameters = indexParameters - member __.BelongsToTargetModel = isTgt - member __.Getter = getter - member __.Setter = setter + member _.IsStatic = isStatic + member _.IndexParameters = indexParameters + member _.BelongsToTargetModel = isTgt + member _.Getter = getter + member _.Setter = setter - override __.PropertyType = propertyType + override _.PropertyType = propertyType override this.SetValue(_obj, _value, _invokeAttr, _binder, _index, _culture) = notRequired this "SetValue" propertyName override this.GetAccessors _nonPublic = notRequired this "nonPublic" propertyName - override __.GetGetMethod _nonPublic = match getter with None -> null | Some g -> g() - override __.GetSetMethod _nonPublic = match setter with None -> null | Some s -> s() - override __.GetIndexParameters() = [| for p in indexParameters -> upcast p |] - override __.Attributes = attrs - override __.CanRead = getter.IsSome - override __.CanWrite = setter.IsSome + override _.GetGetMethod _nonPublic = match getter with None -> null | Some g -> g() + override _.GetSetMethod _nonPublic = match setter with None -> null | Some s -> s() + override _.GetIndexParameters() = [| for p in indexParameters -> upcast p |] + override _.Attributes = attrs + override _.CanRead = getter.IsSome + override _.CanWrite = setter.IsSome override this.GetValue(_obj, _invokeAttr, _binder, _index, _culture): obj = notRequired this "GetValue" propertyName - override __.Name = propertyName - override __.DeclaringType = declaringType |> nonNone "DeclaringType":> Type - override __.MemberType: MemberTypes = MemberTypes.Property + override _.Name = propertyName + override _.DeclaringType = declaringType |> nonNone "DeclaringType":> Type + override _.MemberType: MemberTypes = MemberTypes.Property override this.ReflectedType = notRequired this "ReflectedType" propertyName - override __.GetCustomAttributes(_inherit) = emptyAttributes - override __.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes + override _.GetCustomAttributes(_inherit) = emptyAttributes + override _.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes override this.IsDefined(_attributeType, _inherit) = notRequired this "IsDefined" propertyName and ProvidedEvent(isTgt: bool, eventName:string, attrs: EventAttributes, eventHandlerType:Type, isStatic: bool, adder: (unit -> MethodInfo), remover: (unit -> MethodInfo), customAttributesData) = @@ -1097,36 +1097,36 @@ namespace ProviderImplementation.ProvidedTypes let remover = ProvidedMethod(false, "remove_" + eventName, pattrs, [| ProvidedParameter(false, "handler", eventHandlerType, isOut=Some false, optionalValue=None) |], typeof, removerCode, [], None, K [| |]) :> MethodInfo ProvidedEvent(false, eventName, EventAttributes.None, eventHandlerType, isStatic, K adder, K remover, K [| |]) - member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member __.PatchDeclaringType x = + member _.PatchDeclaringType x = if not isTgt then match adder() with :? ProvidedMethod as a -> a.PatchDeclaringType x | _ -> () match remover() with :? ProvidedMethod as r -> r.PatchDeclaringType x | _ -> () patchOption declaringType (fun () -> declaringType <- Some x) - member __.IsStatic = isStatic - member __.Adder = adder() - member __.Remover = remover() - member __.BelongsToTargetModel = isTgt + member _.IsStatic = isStatic + member _.Adder = adder() + member _.Remover = remover() + member _.BelongsToTargetModel = isTgt - override __.EventHandlerType = eventHandlerType - override __.GetAddMethod _nonPublic = adder() - override __.GetRemoveMethod _nonPublic = remover() - override __.Attributes = attrs - override __.Name = eventName - override __.DeclaringType = declaringType |> nonNone "DeclaringType":> Type - override __.MemberType: MemberTypes = MemberTypes.Event + override _.EventHandlerType = eventHandlerType + override _.GetAddMethod _nonPublic = adder() + override _.GetRemoveMethod _nonPublic = remover() + override _.Attributes = attrs + override _.Name = eventName + override _.DeclaringType = declaringType |> nonNone "DeclaringType":> Type + override _.MemberType: MemberTypes = MemberTypes.Event override this.GetRaiseMethod _nonPublic = notRequired this "GetRaiseMethod" eventName override this.ReflectedType = notRequired this "ReflectedType" eventName - override __.GetCustomAttributes(_inherit) = emptyAttributes - override __.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes + override _.GetCustomAttributes(_inherit) = emptyAttributes + override _.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes override this.IsDefined(_attributeType, _inherit) = notRequired this "IsDefined" eventName - override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() and ProvidedField(isTgt: bool, fieldName:string, attrs, fieldType:Type, rawConstantValue: obj, customAttributesData) = inherit FieldInfo() @@ -1139,30 +1139,30 @@ namespace ProviderImplementation.ProvidedTypes new (fieldName:string, fieldType:Type, value:obj) = ProvidedField(false, fieldName, FieldAttributes.Private, fieldType, value, (K [| |])) new (fieldName:string, fieldType:Type) = ProvidedField(fieldName, fieldType, null) - member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member __.SetFieldAttributes attributes = attrs <- attributes - member __.BelongsToTargetModel = isTgt + member _.SetFieldAttributes attributes = attrs <- attributes + member _.BelongsToTargetModel = isTgt - member __.PatchDeclaringType x = patchOption declaringType (fun () -> declaringType <- Some x) + member _.PatchDeclaringType x = patchOption declaringType (fun () -> declaringType <- Some x) - override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() // Implement overloads - override __.FieldType = fieldType - override __.GetRawConstantValue() = rawConstantValue - override __.Attributes = attrs - override __.Name = fieldName - override __.DeclaringType = declaringType |> nonNone "DeclaringType":> Type - override __.MemberType: MemberTypes = MemberTypes.Field + override _.FieldType = fieldType + override _.GetRawConstantValue() = rawConstantValue + override _.Attributes = attrs + override _.Name = fieldName + override _.DeclaringType = declaringType |> nonNone "DeclaringType":> Type + override _.MemberType: MemberTypes = MemberTypes.Field override this.ReflectedType = notRequired this "ReflectedType" fieldName - override __.GetCustomAttributes(_inherit) = emptyAttributes - override __.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes + override _.GetCustomAttributes(_inherit) = emptyAttributes + override _.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes override this.IsDefined(_attributeType, _inherit) = notRequired this "IsDefined" fieldName override this.SetValue(_obj, _value, _invokeAttr, _binder, _culture) = notRequired this "SetValue" fieldName @@ -1330,7 +1330,7 @@ namespace ProviderImplementation.ProvidedTypes do if hideObjectMethods then customAttributesImpl.HideObjectMethods <- true do this.typeImpl <- this - override __.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() + override _.GetCustomAttributesData() = customAttributesImpl.GetCustomAttributesData() new (assembly:Assembly, namespaceName, className, baseType, ?hideObjectMethods, ?nonNullable, ?isErased) = let isErased = defaultArg isErased true @@ -1349,16 +1349,16 @@ namespace ProviderImplementation.ProvidedTypes // state ops - override __.UnderlyingSystemType = typeof + override _.UnderlyingSystemType = typeof // Implement overloads - override __.Assembly = + override _.Assembly = match container with | TypeContainer.Namespace (theAssembly,_) -> theAssembly() | TypeContainer.Type t -> t.Assembly | TypeContainer.TypeToBeDecided -> failwithf "type '%s' was not yet added as a member to a declaring type, stacktrace = %s" className Environment.StackTrace - override __.FullName = + override _.FullName = match container with | TypeContainer.Type declaringType -> declaringType.FullName + "+" + className | TypeContainer.Namespace (_,namespaceName) -> @@ -1368,15 +1368,15 @@ namespace ProviderImplementation.ProvidedTypes | _ -> namespaceName + "." + className | TypeContainer.TypeToBeDecided -> failwithf "type '%s' was not added as a member to a declaring type" className - override __.Namespace = + override _.Namespace = match container with | TypeContainer.Namespace (_,nsp) -> nsp | TypeContainer.Type t -> t.Namespace | TypeContainer.TypeToBeDecided -> failwithf "type '%s' was not added as a member to a declaring type" className - override __.BaseType = match baseType.Value with Some ty -> ty | None -> null + override _.BaseType = match baseType.Value with Some ty -> ty | None -> null - override __.GetConstructors bindingFlags = + override _.GetConstructors bindingFlags = getMembers() |> Array.choose (function :? ConstructorInfo as c when memberBinds false bindingFlags c.IsStatic c.IsPublic -> Some c | _ -> None) @@ -1400,7 +1400,7 @@ namespace ProviderImplementation.ProvidedTypes |> Array.choose (function :? EventInfo as m when memberBinds false bindingFlags m.IsStatic m.IsPublic -> Some m | _ -> None) |> (if bindingFlags.HasFlag(BindingFlags.DeclaredOnly) || this.BaseType = null then id else (fun mems -> Array.append mems (this.ErasedBaseType.GetEvents(bindingFlags)))) - override __.GetNestedTypes bindingFlags = + override _.GetNestedTypes bindingFlags = getMembers() |> Array.choose (function :? Type as m when memberBinds true bindingFlags false m.IsPublic || m.IsNestedPublic -> Some m | _ -> None) |> (if bindingFlags.HasFlag(BindingFlags.DeclaredOnly) || this.BaseType = null then id else (fun mems -> Array.append mems (this.ErasedBaseType.GetNestedTypes(bindingFlags)))) @@ -1410,7 +1410,7 @@ namespace ProviderImplementation.ProvidedTypes if xs.Length > 1 then failwith "GetConstructorImpl. not support overloads" if xs.Length > 0 then xs.[0] else null - override __.GetMethodImpl(name, bindingFlags, _binderBinder, _callConvention, _types, _modifiers): MethodInfo = + override _.GetMethodImpl(name, bindingFlags, _binderBinder, _callConvention, _types, _modifiers): MethodInfo = let xs = this.GetMethods bindingFlags |> Array.filter (fun m -> m.Name = name) if xs.Length > 1 then failwithf "GetMethodImpl. not support overloads, name = '%s', methods - '%A', callstack = '%A'" name xs Environment.StackTrace if xs.Length > 0 then xs.[0] else null @@ -1419,34 +1419,34 @@ namespace ProviderImplementation.ProvidedTypes let xs = this.GetFields bindingFlags |> Array.filter (fun m -> m.Name = name) if xs.Length > 0 then xs.[0] else null - override __.GetPropertyImpl(name, bindingFlags, _binder, _returnType, _types, _modifiers) = + override _.GetPropertyImpl(name, bindingFlags, _binder, _returnType, _types, _modifiers) = let xs = this.GetProperties bindingFlags |> Array.filter (fun m -> m.Name = name) if xs.Length > 0 then xs.[0] else null - override __.GetEvent(name, bindingFlags) = + override _.GetEvent(name, bindingFlags) = let xs = this.GetEvents bindingFlags |> Array.filter (fun m -> m.Name = name) if xs.Length > 0 then xs.[0] else null - override __.GetNestedType(name, bindingFlags) = + override _.GetNestedType(name, bindingFlags) = let xs = this.GetNestedTypes bindingFlags |> Array.filter (fun m -> m.Name = name) if xs.Length > 0 then xs.[0] else null - override __.GetInterface(_name, _ignoreCase) = notRequired this "GetInterface" this.Name + override _.GetInterface(_name, _ignoreCase) = notRequired this "GetInterface" this.Name - override __.GetInterfaces() = getInterfaces() + override _.GetInterfaces() = getInterfaces() - override __.MakeArrayType() = ProvidedTypeSymbol(ProvidedTypeSymbolKind.SDArray, [this]) :> Type + override _.MakeArrayType() = ProvidedTypeSymbol(ProvidedTypeSymbolKind.SDArray, [this]) :> Type - override __.MakeArrayType arg = ProvidedTypeSymbol(ProvidedTypeSymbolKind.Array arg, [this]) :> Type + override _.MakeArrayType arg = ProvidedTypeSymbol(ProvidedTypeSymbolKind.Array arg, [this]) :> Type - override __.MakePointerType() = ProvidedTypeSymbol(ProvidedTypeSymbolKind.Pointer, [this]) :> Type + override _.MakePointerType() = ProvidedTypeSymbol(ProvidedTypeSymbolKind.Pointer, [this]) :> Type - override __.MakeByRefType() = ProvidedTypeSymbol(ProvidedTypeSymbolKind.ByRef, [this]) :> Type + override _.MakeByRefType() = ProvidedTypeSymbol(ProvidedTypeSymbolKind.ByRef, [this]) :> Type // The binding attributes are always set to DeclaredOnly ||| Static ||| Instance ||| Public when GetMembers is called directly by the F# compiler // However, it's possible for the framework to generate other sets of flags in some corner cases (e.g. via use of `enum` with a provided type as the target) - override __.GetMembers bindingFlags = + override _.GetMembers bindingFlags = [| for m in getMembers() do match m with | :? ConstructorInfo as c when memberBinds false bindingFlags c.IsStatic c.IsPublic -> yield (c :> MemberInfo) @@ -1462,40 +1462,40 @@ namespace ProviderImplementation.ProvidedTypes this.GetMembers() |> Array.filter (fun m -> 0 <> int(m.MemberType &&& mt) && m.Name = name) // Attributes, etc.. - override __.GetAttributeFlagsImpl() = adjustTypeAttributes this.IsNested attrs + override _.GetAttributeFlagsImpl() = adjustTypeAttributes this.IsNested attrs override this.IsValueTypeImpl() = match this.BaseType with | null -> false | bt -> bt.FullName = "System.Enum" || bt.FullName = "System.ValueType" || bt.IsValueType - override __.IsEnum = + override _.IsEnum = match this.BaseType with | null -> false | bt -> bt.FullName = "System.Enum" || bt.IsEnum - override __.GetEnumUnderlyingType() = + override _.GetEnumUnderlyingType() = if this.IsEnum then match enumUnderlyingType.Force() with | None -> typeof | Some ty -> ty else failwithf "not enum type" - override __.IsArrayImpl() = false - override __.IsByRefImpl() = false - override __.IsPointerImpl() = false - override __.IsPrimitiveImpl() = false - override __.IsCOMObjectImpl() = false - override __.HasElementTypeImpl() = false - override __.Name = className + override _.IsArrayImpl() = false + override _.IsByRefImpl() = false + override _.IsPointerImpl() = false + override _.IsPrimitiveImpl() = false + override _.IsCOMObjectImpl() = false + override _.HasElementTypeImpl() = false + override _.Name = className - override __.DeclaringType = + override _.DeclaringType = match container with | TypeContainer.Namespace _ -> null | TypeContainer.Type enclosingTyp -> (enclosingTyp :> Type) | TypeContainer.TypeToBeDecided -> failwithf "type '%s' was not added as a member to a declaring type" className - override __.MemberType = if this.IsNested then MemberTypes.NestedType else MemberTypes.TypeInfo + override _.MemberType = if this.IsNested then MemberTypes.NestedType else MemberTypes.TypeInfo override x.GetHashCode() = x.Namespace.GetHashCode() ^^^ className.GetHashCode() override this.Equals(that: obj) = Object.ReferenceEquals(this, that) @@ -1505,79 +1505,79 @@ namespace ProviderImplementation.ProvidedTypes override this.IsSubclassOf(otherTy: Type) = isSubclassOf this otherTy - override __.GetGenericArguments() = [||] + override _.GetGenericArguments() = [||] - override __.ToString() = this.Name + override _.ToString() = this.Name override x.Module = x.Assembly.ManifestModule - override __.GUID = Guid.Empty - override __.GetCustomAttributes(_inherit) = emptyAttributes - override __.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes - override __.IsDefined(_attributeType: Type, _inherit) = false + override _.GUID = Guid.Empty + override _.GetCustomAttributes(_inherit) = emptyAttributes + override _.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes + override _.IsDefined(_attributeType: Type, _inherit) = false - override __.GetElementType() = notRequired this "Module" this.Name - override __.InvokeMember(_name, _invokeAttr, _binder, _target, _args, _modifiers, _culture, _namedParameters) = notRequired this "Module" this.Name - override __.AssemblyQualifiedName = notRequired this "Module" this.Name + override _.GetElementType() = notRequired this "Module" this.Name + override _.InvokeMember(_name, _invokeAttr, _binder, _target, _args, _modifiers, _culture, _namedParameters) = notRequired this "Module" this.Name + override _.AssemblyQualifiedName = notRequired this "Module" this.Name // Needed because TypeDelegator.cs provides a delegting implementation of this, and we are self-delegating override this.GetEvents() = this.GetEvents(BindingFlags.Public ||| BindingFlags.Instance ||| BindingFlags.Static) // Needed because TypeDelegator.cs provides a delegting implementation of this, and we are self-delegating // Get the model - member __.BelongsToTargetModel = isTgt - member __.AttributesRaw = attrs - member __.EnumUnderlyingTypeRaw() = enumUnderlyingType.Force() - member __.Container = container - member __.BaseTypeRaw() = baseType.Force() - member __.StaticParams = staticParams - member __.StaticParamsApply = staticParamsApply + member _.BelongsToTargetModel = isTgt + member _.AttributesRaw = attrs + member _.EnumUnderlyingTypeRaw() = enumUnderlyingType.Force() + member _.Container = container + member _.BaseTypeRaw() = baseType.Force() + member _.StaticParams = staticParams + member _.StaticParamsApply = staticParamsApply // Fetch the members declared since the indicated position in the members list. This allows the target model to observe // incremental additions made to the source model - member __.GetMembersFromCursor(idx: int) = evalMembers(); members.GetRange(idx, members.Count - idx).ToArray(), members.Count + member _.GetMembersFromCursor(idx: int) = evalMembers(); members.GetRange(idx, members.Count - idx).ToArray(), members.Count // Fetch the interfaces declared since the indicated position in the interfaces list - member __.GetInterfaceImplsFromCursor(idx: int) = evalInterfaces(); interfaceImpls.GetRange(idx, interfaceImpls.Count - idx).ToArray(), interfaceImpls.Count + member _.GetInterfaceImplsFromCursor(idx: int) = evalInterfaces(); interfaceImpls.GetRange(idx, interfaceImpls.Count - idx).ToArray(), interfaceImpls.Count // Fetch the method overrides declared since the indicated position in the list - member __.GetMethodOverridesFromCursor(idx: int) = evalMethodOverrides(); methodOverrides.GetRange(idx, methodOverrides.Count - idx).ToArray(), methodOverrides.Count + member _.GetMethodOverridesFromCursor(idx: int) = evalMethodOverrides(); methodOverrides.GetRange(idx, methodOverrides.Count - idx).ToArray(), methodOverrides.Count // Fetch the method overrides - member __.GetMethodOverrides() = getMethodOverrides() + member _.GetMethodOverrides() = getMethodOverrides() member this.ErasedBaseType : Type = ProvidedTypeDefinition.EraseType(this.BaseType) - member __.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction - member __.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction - member __.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc - member __.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) - member __.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) - member __.HideObjectMethods with get() = customAttributesImpl.HideObjectMethods and set v = customAttributesImpl.HideObjectMethods <- v - member __.NonNullable with get() = customAttributesImpl.NonNullable and set v = customAttributesImpl.NonNullable <- v - member __.AddCustomAttribute attribute = customAttributesImpl.AddCustomAttribute attribute - - member __.SetEnumUnderlyingType(ty) = enumUnderlyingType <- lazy Some ty - member __.SetBaseType t = + member _.AddXmlDocComputed xmlDocFunction = customAttributesImpl.AddXmlDocComputed xmlDocFunction + member _.AddXmlDocDelayed xmlDocFunction = customAttributesImpl.AddXmlDocDelayed xmlDocFunction + member _.AddXmlDoc xmlDoc = customAttributesImpl.AddXmlDoc xmlDoc + member _.AddObsoleteAttribute (message,?isError) = customAttributesImpl.AddObsolete (message,defaultArg isError false) + member _.AddDefinitionLocation(line,column,filePath) = customAttributesImpl.AddDefinitionLocation(line, column, filePath) + member _.HideObjectMethods with get() = customAttributesImpl.HideObjectMethods and set v = customAttributesImpl.HideObjectMethods <- v + member _.NonNullable with get() = customAttributesImpl.NonNullable and set v = customAttributesImpl.NonNullable <- v + member _.AddCustomAttribute attribute = customAttributesImpl.AddCustomAttribute attribute + + member _.SetEnumUnderlyingType(ty) = enumUnderlyingType <- lazy Some ty + member _.SetBaseType t = if baseType.IsValueCreated then failwithf "The base type has already been evaluated for this type. Please call SetBaseType before any operations which traverse the type hierarchy. stacktrace = %A" Environment.StackTrace baseType <- lazy Some t - member __.SetBaseTypeDelayed baseTypeFunction = + member _.SetBaseTypeDelayed baseTypeFunction = if baseType.IsValueCreated then failwithf "The base type has already been evaluated for this type. Please call SetBaseType before any operations which traverse the type hierarchy. stacktrace = %A" Environment.StackTrace baseType <- lazy (Some (baseTypeFunction())) - member __.SetAttributes x = attrs <- x + member _.SetAttributes x = attrs <- x member this.AddMembers(memberInfos:list<#MemberInfo>) = memberInfos |> List.iter this.PatchDeclaringTypeOfMember membersQueue.Add (fun () -> memberInfos |> List.toArray |> Array.map (fun x -> x :> MemberInfo )) - member __.AddMember(memberInfo:MemberInfo) = + member _.AddMember(memberInfo:MemberInfo) = this.AddMembers [memberInfo] - member __.AddMembersDelayed(membersFunction: unit -> list<#MemberInfo>) = + member _.AddMembersDelayed(membersFunction: unit -> list<#MemberInfo>) = membersQueue.Add (fun () -> membersFunction() |> List.toArray |> Array.map (fun x -> this.PatchDeclaringTypeOfMember x; x :> MemberInfo )) - member __.AddMemberDelayed(memberFunction: unit -> #MemberInfo) = + member _.AddMemberDelayed(memberFunction: unit -> #MemberInfo) = this.AddMembersDelayed(fun () -> [memberFunction()]) - member __.AddAssemblyTypesAsNestedTypesDelayed (assemblyFunction: unit -> Assembly) = + member _.AddAssemblyTypesAsNestedTypesDelayed (assemblyFunction: unit -> Assembly) = let bucketByPath nodef tipf (items: (string list * 'Value) list) = // Find all the items with an empty key list and call 'tipf' let tips = @@ -1615,14 +1615,14 @@ namespace ProviderImplementation.ProvidedTypes loop topTypes) /// Abstract a type to a parametric-type. Requires "formal parameters" and "instantiation function". - member __.DefineStaticParameters(parameters: ProvidedStaticParameter list, instantiationFunction: (string -> obj[] -> ProvidedTypeDefinition)) = + member _.DefineStaticParameters(parameters: ProvidedStaticParameter list, instantiationFunction: (string -> obj[] -> ProvidedTypeDefinition)) = if staticParamsDefined then failwithf "Static parameters have already been defined for this type. stacktrace = %A" Environment.StackTrace staticParamsDefined <- true staticParams <- parameters staticParamsApply <- Some instantiationFunction /// Get ParameterInfo[] for the parametric type parameters - member __.GetStaticParametersInternal() = [| for p in staticParams -> p :> ParameterInfo |] + member _.GetStaticParametersInternal() = [| for p in staticParams -> p :> ParameterInfo |] /// Instantiate parametric type member this.ApplyStaticArguments(name:string, args:obj[]) = @@ -1635,32 +1635,32 @@ namespace ProviderImplementation.ProvidedTypes else this - member __.PatchDeclaringType x = container <- TypeContainer.Type x + member _.PatchDeclaringType x = container <- TypeContainer.Type x - member __.IsErased + member _.IsErased with get() = (attrs &&& enum (int32 TypeProviderTypeAttributes.IsErased)) <> enum 0 and set v = if v then attrs <- attrs ||| enum (int32 TypeProviderTypeAttributes.IsErased) else attrs <- attrs &&& ~~~(enum (int32 TypeProviderTypeAttributes.IsErased)) - member __.SuppressRelocation + member _.SuppressRelocation with get() = (attrs &&& enum (int32 TypeProviderTypeAttributes.SuppressRelocate)) <> enum 0 and set v = if v then attrs <- attrs ||| enum (int32 TypeProviderTypeAttributes.SuppressRelocate) else attrs <- attrs &&& ~~~(enum (int32 TypeProviderTypeAttributes.SuppressRelocate)) - member __.AddInterfaceImplementation interfaceType = interfaceImpls.Add interfaceType + member _.AddInterfaceImplementation interfaceType = interfaceImpls.Add interfaceType - member __.AddInterfaceImplementationsDelayed interfacesFunction = interfacesQueue.Add (interfacesFunction >> Array.ofList) + member _.AddInterfaceImplementationsDelayed interfacesFunction = interfacesQueue.Add (interfacesFunction >> Array.ofList) - member __.SetAssemblyInternal (assembly: unit -> Assembly) = + member _.SetAssemblyInternal (assembly: unit -> Assembly) = match container with | TypeContainer.Namespace (_, ns) -> container <- TypeContainer.Namespace (assembly, ns) | TypeContainer.Type _ -> failwithf "can't set assembly of nested type '%s'" className | TypeContainer.TypeToBeDecided -> failwithf "type '%s' was not added as a member to a declaring type" className - member __.DefineMethodOverride (methodInfoBody,methodInfoDeclaration) = methodOverrides.Add (methodInfoBody, methodInfoDeclaration) - member __.DefineMethodOverridesDelayed f = methodOverridesQueue.Add (f >> Array.ofList) + member _.DefineMethodOverride (methodInfoBody,methodInfoDeclaration) = methodOverrides.Add (methodInfoBody, methodInfoDeclaration) + member _.DefineMethodOverridesDelayed f = methodOverridesQueue.Add (f >> Array.ofList) // This method is used by Debug.fs and QuotationBuilder.fs. // Emulate the F# type provider type erasure mechanism to get the @@ -1862,12 +1862,12 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader [] type ILAssemblyRef(name: string, hash: byte[] uoption, publicKey: PublicKey uoption, retargetable: bool, version: Version uoption, locale: string uoption) = - member __.Name=name - member __.Hash=hash - member __.PublicKey=publicKey - member __.Retargetable=retargetable - member __.Version=version - member __.Locale=locale + member _.Name=name + member _.Hash=hash + member _.PublicKey=publicKey + member _.Retargetable=retargetable + member _.Version=version + member _.Locale=locale member x.ToAssemblyName() = let asmName = AssemblyName(Name=x.Name) @@ -1947,10 +1947,10 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader type ILModuleRef(name:string, hasMetadata: bool, hash: byte[] uoption) = - member __.Name=name - member __.HasMetadata=hasMetadata - member __.Hash=hash - override __.ToString() = "module " + name + member _.Name=name + member _.HasMetadata=hasMetadata + member _.Hash=hash + override _.ToString() = "module " + name [] @@ -2042,9 +2042,9 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader // IL type references have a pre-computed hash code to enable quick lookup tables during binary generation. and ILTypeRef(enc: ILTypeRefScope, nsp: string uoption, name: string) = - member __.Scope = enc - member __.Name = name - member __.Namespace = nsp + member _.Scope = enc + member _.Name = name + member _.Namespace = nsp member tref.FullName = match enc with @@ -2056,7 +2056,7 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader | ILTypeRefScope.Top _ -> joinILTypeName tref.Namespace tref.Name | ILTypeRefScope.Nested enc -> enc.BasicQualifiedName + "+" + tref.Name - member __.QualifiedNameExtension = enc.QualifiedNameExtension + member _.QualifiedNameExtension = enc.QualifiedNameExtension member tref.QualifiedName = tref.BasicQualifiedName + enc.QualifiedNameExtension @@ -2064,11 +2064,11 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader and ILTypeSpec(typeRef: ILTypeRef, inst: ILGenericArgs) = - member __.TypeRef = typeRef + member _.TypeRef = typeRef member x.Scope = x.TypeRef.Scope member x.Name = x.TypeRef.Name member x.Namespace = x.TypeRef.Namespace - member __.GenericArgs = inst + member _.GenericArgs = inst member x.BasicQualifiedName = let tc = x.TypeRef.BasicQualifiedName if x.GenericArgs.Length = 0 then @@ -2153,37 +2153,37 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader override x.ToString() = x.QualifiedName and ILCallingSignature(callingConv: ILCallingConv, argTypes: ILTypes, returnType: ILType) = - member __.CallingConv = callingConv - member __.ArgTypes = argTypes - member __.ReturnType = returnType + member _.CallingConv = callingConv + member _.ArgTypes = argTypes + member _.ReturnType = returnType and ILGenericArgs = ILType[] and ILTypes = ILType[] type ILMethodRef(parent: ILTypeRef, callconv: ILCallingConv, genericArity: int, name: string, args: ILTypes, ret: ILType) = - member __.EnclosingTypeRef = parent - member __.CallingConv = callconv - member __.Name = name - member __.GenericArity = genericArity - member __.ArgCount = args.Length - member __.ArgTypes = args - member __.ReturnType = ret + member _.EnclosingTypeRef = parent + member _.CallingConv = callconv + member _.Name = name + member _.GenericArity = genericArity + member _.ArgCount = args.Length + member _.ArgTypes = args + member _.ReturnType = ret member x.CallingSignature = ILCallingSignature (x.CallingConv,x.ArgTypes,x.ReturnType) override x.ToString() = x.EnclosingTypeRef.ToString() + "::" + x.Name + "(...)" type ILFieldRef(enclosingTypeRef: ILTypeRef, name: string, typ: ILType) = - member __.EnclosingTypeRef = enclosingTypeRef - member __.Name = name - member __.Type = typ + member _.EnclosingTypeRef = enclosingTypeRef + member _.Name = name + member _.Type = typ override x.ToString() = x.EnclosingTypeRef.ToString() + "::" + x.Name type ILMethodSpec(methodRef: ILMethodRef, enclosingType: ILType, methodInst: ILGenericArgs) = - member __.MethodRef = methodRef - member __.EnclosingType = enclosingType - member __.GenericArgs = methodInst + member _.MethodRef = methodRef + member _.EnclosingType = enclosingType + member _.GenericArgs = methodInst member x.Name = x.MethodRef.Name member x.CallingConv = x.MethodRef.CallingConv member x.GenericArity = x.MethodRef.GenericArity @@ -2192,11 +2192,11 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader override x.ToString() = x.MethodRef.ToString() + "(...)" type ILFieldSpec(fieldRef: ILFieldRef, enclosingType: ILType) = - member __.FieldRef = fieldRef - member __.EnclosingType = enclosingType - member __.FormalType = fieldRef.Type - member __.Name = fieldRef.Name - member __.EnclosingTypeRef = fieldRef.EnclosingTypeRef + member _.FieldRef = fieldRef + member _.EnclosingType = enclosingType + member _.FormalType = fieldRef.Type + member _.Name = fieldRef.Name + member _.EnclosingTypeRef = fieldRef.EnclosingTypeRef override x.ToString() = x.FieldRef.ToString() type ILCodeLabel = int @@ -2471,7 +2471,7 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader abstract Entries: ILCustomAttribute[] type ILCustomAttrsStatics() = - static let empty = { new ILCustomAttrs with member __.Entries = [| |] } + static let empty = { new ILCustomAttrs with member _.Entries = [| |] } static member Empty = empty [] @@ -2595,8 +2595,8 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader lmap.[key] <- [| y |] lmap - member __.Entries = larr.Force() - member __.FindByName nm = getmap().[nm] + member _.Entries = larr.Force() + member _.FindByName nm = getmap().[nm] member x.FindByNameAndArity (nm,arity) = x.FindByName nm |> Array.filter (fun x -> x.Parameters.Length = arity) member x.TryFindUniqueByName name = match x.FindByName(name) with @@ -2808,10 +2808,10 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader lmap.[key] <- ltd lmap - member __.Entries = + member _.Entries = [| for (_,_,td) in larr.Force() -> td.Force() |] - member __.TryFindByName (nsp,nm) = + member _.TryFindByName (nsp,nm) = let tdefs = getmap() let key = (nsp,nm) if tdefs.ContainsKey key then @@ -2828,8 +2828,8 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader and ILNestedExportedTypesAndForwarders(larr:Lazy) = let lmap = lazy ((Map.empty, larr.Force()) ||> Array.fold (fun m x -> m.Add(x.Name,x))) - member __.Entries = larr.Force() - member __.TryFindByName nm = lmap.Force().TryFind nm + member _.Entries = larr.Force() + member _.TryFindByName nm = lmap.Force().TryFind nm and [] ILExportedTypeOrForwarder = @@ -2851,8 +2851,8 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader let key = ltd.Namespace, ltd.Name lmap.[key] <- ltd lmap - member __.Entries = larr.Force() - member __.TryFindByName (nsp,nm) = match getmap().TryGetValue ((nsp,nm)) with true,v -> Some v | false, _ -> None + member _.Entries = larr.Force() + member _.TryFindByName (nsp,nm) = match getmap().TryGetValue ((nsp,nm)) with true,v -> Some v | false, _ -> None [] type ILResourceAccess = @@ -2873,7 +2873,7 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader override x.ToString() = "resource " + x.Name type ILResources(larr: Lazy) = - member __.Entries = larr.Force() + member _.Entries = larr.Force() type ILAssemblyManifest = { Name: string @@ -2961,13 +2961,13 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader typ_IntPtr: ILType typ_UIntPtr: ILType systemRuntimeScopeRef: ILScopeRef } - override __.ToString() = "" + override _.ToString() = "" [] [] type ILTableName(idx: int) = - member __.Index = idx + member _.Index = idx static member FromIndex n = ILTableName n module ILTableNames = @@ -3042,21 +3042,21 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader [] type TypeDefOrRefOrSpecTag(tag: int32) = - member __.Tag = tag + member _.Tag = tag static member TypeDef = TypeDefOrRefOrSpecTag 0x00 static member TypeRef = TypeDefOrRefOrSpecTag 0x01 static member TypeSpec = TypeDefOrRefOrSpecTag 0x2 [] type HasConstantTag(tag: int32) = - member __.Tag = tag + member _.Tag = tag static member FieldDef = HasConstantTag 0x0 static member ParamDef = HasConstantTag 0x1 static member Property = HasConstantTag 0x2 [] type HasCustomAttributeTag(tag: int32) = - member __.Tag = tag + member _.Tag = tag static member MethodDef = HasCustomAttributeTag 0x0 static member FieldDef = HasCustomAttributeTag 0x1 static member TypeRef = HasCustomAttributeTag 0x2 @@ -3082,20 +3082,20 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader [] type HasFieldMarshalTag(tag: int32) = - member __.Tag = tag + member _.Tag = tag static member FieldDef = HasFieldMarshalTag 0x00 static member ParamDef = HasFieldMarshalTag 0x01 [] type HasDeclSecurityTag(tag: int32) = - member __.Tag = tag + member _.Tag = tag static member TypeDef = HasDeclSecurityTag 0x00 static member MethodDef = HasDeclSecurityTag 0x01 static member Assembly = HasDeclSecurityTag 0x02 [] type MemberRefParentTag(tag: int32) = - member __.Tag = tag + member _.Tag = tag static member TypeRef = MemberRefParentTag 0x01 static member ModuleRef = MemberRefParentTag 0x02 static member MethodDef = MemberRefParentTag 0x03 @@ -3103,39 +3103,39 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader [] type HasSemanticsTag(tag: int32) = - member __.Tag = tag + member _.Tag = tag static member Event = HasSemanticsTag 0x00 static member Property = HasSemanticsTag 0x01 [] type MethodDefOrRefTag(tag: int32) = - member __.Tag = tag + member _.Tag = tag static member MethodDef = MethodDefOrRefTag 0x00 static member MemberRef = MethodDefOrRefTag 0x01 static member MethodSpec = MethodDefOrRefTag 0x02 [] type MemberForwardedTag(tag: int32) = - member __.Tag = tag + member _.Tag = tag static member FieldDef = MemberForwardedTag 0x00 static member MethodDef = MemberForwardedTag 0x01 [] type ImplementationTag(tag: int32) = - member __.Tag = tag + member _.Tag = tag static member File = ImplementationTag 0x00 static member AssemblyRef = ImplementationTag 0x01 static member ExportedType = ImplementationTag 0x02 [] type CustomAttributeTypeTag(tag: int32) = - member __.Tag = tag + member _.Tag = tag static member MethodDef = CustomAttributeTypeTag 0x02 static member MemberRef = CustomAttributeTypeTag 0x03 [] type ResolutionScopeTag(tag: int32) = - member __.Tag = tag + member _.Tag = tag static member Module = ResolutionScopeTag 0x00 static member ModuleRef = ResolutionScopeTag 0x01 static member AssemblyRef = ResolutionScopeTag 0x02 @@ -3143,7 +3143,7 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader [] type TypeOrMethodDefTag(tag: int32) = - member __.Tag = tag + member _.Tag = tag static member TypeDef = TypeOrMethodDefTag 0x00 static member MethodDef = TypeOrMethodDefTag 0x01 @@ -4046,10 +4046,10 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader type ByteFile(bytes:byte[]) = - member __.Bytes = bytes - member __.ReadByte addr = bytes.[addr] - member __.ReadBytes addr len = Array.sub bytes addr len - member __.CountUtf8String addr = + member _.Bytes = bytes + member _.ReadByte addr = bytes.[addr] + member _.ReadBytes addr len = Array.sub bytes addr len + member _.CountUtf8String addr = let mutable p = addr while bytes.[p] <> 0uy do p <- p + 1 @@ -4399,14 +4399,14 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader let td = ltd.Force() (td.Name,ltd) - let emptyILEvents = { new ILEventDefs with member __.Entries = [| |] } - let emptyILProperties = { new ILPropertyDefs with member __.Entries = [| |] } + let emptyILEvents = { new ILEventDefs with member _.Entries = [| |] } + let emptyILProperties = { new ILPropertyDefs with member _.Entries = [| |] } let emptyILTypeDefs = ILTypeDefs (lazy [| |]) - let emptyILCustomAttrs = { new ILCustomAttrs with member __.Entries = [| |] } - let mkILCustomAttrs x = { new ILCustomAttrs with member __.Entries = x } - let emptyILMethodImpls = { new ILMethodImplDefs with member __.Entries = [| |] } + let emptyILCustomAttrs = { new ILCustomAttrs with member _.Entries = [| |] } + let mkILCustomAttrs x = { new ILCustomAttrs with member _.Entries = x } + let emptyILMethodImpls = { new ILMethodImplDefs with member _.Entries = [| |] } let emptyILMethods = ILMethodDefs (lazy [| |]) - let emptyILFields = { new ILFieldDefs with member __.Entries = [| |] } + let emptyILFields = { new ILFieldDefs with member _.Entries = [| |] } let mkILTy boxed tspec = match boxed with @@ -5469,7 +5469,7 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader and seekReadFields (numtypars, hasLayout) fidx1 fidx2 = { new ILFieldDefs with - member __.Entries = + member _.Entries = [| for i = fidx1 to fidx2 - 1 do yield seekReadField (numtypars, hasLayout) i |] } @@ -5749,7 +5749,7 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader and seekReadMethodImpls numtypars tidx = { new ILMethodImplDefs with - member __.Entries = + member _.Entries = let mimpls = seekReadIndexedRows (getNumRows ILTableNames.MethodImpl,seekReadMethodImplRow,(fun (a,_,_) -> a),simpleIndexCompare tidx,isSorted ILTableNames.MethodImpl,(fun (_,b,c) -> b,c)) mimpls |> Array.map (fun (b,c) -> { OverrideBy= @@ -5798,7 +5798,7 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader and seekReadEvents numtypars tidx = { new ILEventDefs with - member __.Entries = + member _.Entries = match seekReadOptionalIndexedRow (getNumRows ILTableNames.EventMap,(fun i -> i, seekReadEventMapRow i),(fun (_,row) -> fst row),compare tidx,false,(fun (i,row) -> (i,snd row))) with | None -> [| |] | Some (rowNum,beginEventIdx) -> @@ -5837,7 +5837,7 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader and seekReadProperties numtypars tidx = { new ILPropertyDefs with - member __.Entries = + member _.Entries = match seekReadOptionalIndexedRow (getNumRows ILTableNames.PropertyMap,(fun i -> i, seekReadPropertyMapRow i),(fun (_,row) -> fst row),compare tidx,false,(fun (i,row) -> (i,snd row))) with | None -> [| |] | Some (rowNum,beginPropIdx) -> @@ -5853,7 +5853,7 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader and seekReadCustomAttrs idx = { new ILCustomAttrs with - member __.Entries = + member _.Entries = seekReadIndexedRows (getNumRows ILTableNames.CustomAttribute, seekReadCustomAttributeRow,(fun (a,_,_) -> a), hcaCompare idx, @@ -5981,10 +5981,10 @@ namespace ProviderImplementation.ProvidedTypes.AssemblyReader let ilModule = seekReadModule (subsys, (subsysMajor, subsysMinor), useHighEntropyVA, ilOnly, only32, is32bitpreferred, only64, platform, isDll, alignVirt, alignPhys, imageBaseReal, ilMetadataVersion) 1 let ilAssemblyRefs = [ for i in 1 .. getNumRows ILTableNames.AssemblyRef do yield seekReadAssemblyRef i ] - member __.Bytes = is.Bytes - member __.ILGlobals = ilg - member __.ILModuleDef = ilModule - member __.ILAssemblyRefs = ilAssemblyRefs + member _.Bytes = is.Bytes + member _.ILGlobals = ilg + member _.ILModuleDef = ilModule + member _.ILAssemblyRefs = ilAssemblyRefs let sigptr_get_byte (bytes: byte[]) sigptr = int bytes.[sigptr], sigptr + 1 @@ -6617,7 +6617,7 @@ namespace ProviderImplementation.ProvidedTypes // on object identity. type TxTable<'T2>() = let tab = Dictionary() - member __.Get inp f = + member _.Get inp f = if tab.ContainsKey inp then tab.[inp] else @@ -6625,17 +6625,17 @@ namespace ProviderImplementation.ProvidedTypes tab.[inp] <- res res - member __.ContainsKey inp = tab.ContainsKey inp + member _.ContainsKey inp = tab.ContainsKey inp let instParameterInfo inst (inp: ParameterInfo) = { new ParameterInfo() with - override __.Name = inp.Name - override __.ParameterType = inp.ParameterType |> instType inst - override __.Attributes = inp.Attributes - override __.RawDefaultValue = inp.RawDefaultValue - override __.GetCustomAttributesData() = inp.GetCustomAttributesData() - override __.ToString() = inp.ToString() + "@inst" } + override _.Name = inp.Name + override _.ParameterType = inp.ParameterType |> instType inst + override _.Attributes = inp.Attributes + override _.RawDefaultValue = inp.RawDefaultValue + override _.GetCustomAttributesData() = inp.GetCustomAttributesData() + override _.ToString() = inp.ToString() + "@inst" } let hashILParameterTypes (ps: ILParameters) = // This hash code doesn't need to be very good as hashing by name is sufficient to give decent hash granularity @@ -6717,22 +6717,22 @@ namespace ProviderImplementation.ProvidedTypes let dty = gmd.DeclaringType let dinst = (if dty.IsGenericType then dty.GetGenericArguments() else [| |]) - override __.Attributes = gmd.Attributes - override __.Name = gmd.Name - override __.DeclaringType = dty - override __.MemberType = gmd.MemberType - - override __.GetParameters() = gmd.GetParameters() |> Array.map (instParameterInfo (dinst, gargs)) - override __.CallingConvention = gmd.CallingConvention - override __.ReturnType = gmd.ReturnType |> instType (dinst, gargs) - override __.GetGenericMethodDefinition() = gmd - override __.IsGenericMethod = gmd.IsGenericMethod - override __.GetGenericArguments() = gargs - override __.MetadataToken = gmd.MetadataToken - - override __.GetCustomAttributesData() = gmd.GetCustomAttributesData() - override __.MakeGenericMethod(typeArgs) = MethodSymbol2(gmd, typeArgs) :> MethodInfo - override __.GetHashCode() = gmd.MetadataToken + override _.Attributes = gmd.Attributes + override _.Name = gmd.Name + override _.DeclaringType = dty + override _.MemberType = gmd.MemberType + + override _.GetParameters() = gmd.GetParameters() |> Array.map (instParameterInfo (dinst, gargs)) + override _.CallingConvention = gmd.CallingConvention + override _.ReturnType = gmd.ReturnType |> instType (dinst, gargs) + override _.GetGenericMethodDefinition() = gmd + override _.IsGenericMethod = gmd.IsGenericMethod + override _.GetGenericArguments() = gargs + override _.MetadataToken = gmd.MetadataToken + + override _.GetCustomAttributesData() = gmd.GetCustomAttributesData() + override _.MakeGenericMethod(typeArgs) = MethodSymbol2(gmd, typeArgs) :> MethodInfo + override _.GetHashCode() = gmd.MetadataToken override this.Equals(that:obj) = match that with | :? MethodInfo as that -> this.MetadataToken = that.MetadataToken && eqTypes dty that.DeclaringType && lengthsEqAndForall2 (gmd.GetGenericArguments()) (that.GetGenericArguments()) (=) @@ -6747,10 +6747,10 @@ namespace ProviderImplementation.ProvidedTypes override this.GetMethodImplementationFlags() = notRequired this "GetMethodImplementationFlags" this.Name override this.Invoke(_obj, _invokeAttr, _binder, _parameters, _culture) = notRequired this "Invoke" this.Name override this.ReflectedType = notRequired this "ReflectedType" this.Name - override __.GetCustomAttributes(_inherited) = emptyAttributes - override __.GetCustomAttributes(_attributeType, _inherited) = emptyAttributes + override _.GetCustomAttributes(_inherited) = emptyAttributes + override _.GetCustomAttributes(_attributeType, _inherited) = emptyAttributes - override __.ToString() = gmd.ToString() + "@inst" + override _.ToString() = gmd.ToString() + "@inst" /// Represents a constructor in an instantiated type @@ -6758,16 +6758,16 @@ namespace ProviderImplementation.ProvidedTypes inherit ConstructorInfo() let gps = ((if declTy.IsGenericType then declTy.GetGenericArguments() else [| |]), [| |]) - override __.Name = ".ctor" - override __.Attributes = inp.Attributes - override __.MemberType = MemberTypes.Constructor - override __.DeclaringType = declTy + override _.Name = ".ctor" + override _.Attributes = inp.Attributes + override _.MemberType = MemberTypes.Constructor + override _.DeclaringType = declTy - override __.GetParameters() = inp.GetParameters() |> Array.map (instParameterInfo gps) - override __.GetCustomAttributesData() = inp.GetCustomAttributesData() - override __.MetadataToken = inp.MetadataToken + override _.GetParameters() = inp.GetParameters() |> Array.map (instParameterInfo gps) + override _.GetCustomAttributesData() = inp.GetCustomAttributesData() + override _.MetadataToken = inp.MetadataToken - override __.GetHashCode() = inp.GetHashCode() + override _.GetHashCode() = inp.GetHashCode() override this.Equals(that:obj) = match that with | :? ConstructorInfo as that -> this.MetadataToken = that.MetadataToken && eqTypes declTy that.DeclaringType @@ -6782,7 +6782,7 @@ namespace ProviderImplementation.ProvidedTypes override this.GetCustomAttributes(_inherited) = notRequired this "GetCustomAttributes" this.Name override this.GetCustomAttributes(_attributeType, _inherited) = notRequired this "GetCustomAttributes" this.Name - override __.ToString() = sprintf "tgt constructor(...) in type %s" declTy.FullName + override _.ToString() = sprintf "tgt constructor(...) in type %s" declTy.FullName static member Make (declTy: Type) md = ConstructorSymbol (declTy, md) :> ConstructorInfo /// Represents a method in an instantiated type @@ -6792,19 +6792,19 @@ namespace ProviderImplementation.ProvidedTypes let gps2 = inp.GetGenericArguments() let gps = (gps1, gps2) - override __.Name = inp.Name - override __.DeclaringType = declTy - override __.MemberType = inp.MemberType - override __.Attributes = inp.Attributes - override __.GetParameters() = inp.GetParameters() |> Array.map (instParameterInfo gps) - override __.CallingConvention = inp.CallingConvention - override __.ReturnType = inp.ReturnType |> instType gps - override __.GetCustomAttributesData() = inp.GetCustomAttributesData() - override __.GetGenericArguments() = gps2 - override __.IsGenericMethod = (gps2.Length <> 0) - override __.IsGenericMethodDefinition = __.IsGenericMethod - - override __.GetHashCode() = inp.GetHashCode() + override _.Name = inp.Name + override _.DeclaringType = declTy + override _.MemberType = inp.MemberType + override _.Attributes = inp.Attributes + override _.GetParameters() = inp.GetParameters() |> Array.map (instParameterInfo gps) + override _.CallingConvention = inp.CallingConvention + override _.ReturnType = inp.ReturnType |> instType gps + override _.GetCustomAttributesData() = inp.GetCustomAttributesData() + override _.GetGenericArguments() = gps2 + override _.IsGenericMethod = (gps2.Length <> 0) + override t.IsGenericMethodDefinition = t.IsGenericMethod + + override _.GetHashCode() = inp.GetHashCode() override this.Equals(that:obj) = match that with | :? MethodInfo as that -> this.MetadataToken = that.MetadataToken && eqTypes this.DeclaringType that.DeclaringType @@ -6812,7 +6812,7 @@ namespace ProviderImplementation.ProvidedTypes override this.MakeGenericMethod(args) = MethodSymbol2(this, args) :> MethodInfo - override __.MetadataToken = inp.MetadataToken + override _.MetadataToken = inp.MetadataToken override this.MethodHandle = notRequired this "MethodHandle" this.Name override this.ReturnParameter = notRequired this "ReturnParameter" this.Name @@ -6825,7 +6825,7 @@ namespace ProviderImplementation.ProvidedTypes override this.GetCustomAttributes(_inherited) = notRequired this "GetCustomAttributes" this.Name override this.GetCustomAttributes(_attributeType, _inherited) = notRequired this "GetCustomAttributes" this.Name - override __.ToString() = sprintf "tgt method %s(...) in type %s" inp.Name declTy.FullName + override _.ToString() = sprintf "tgt method %s(...) in type %s" inp.Name declTy.FullName static member Make (declTy: Type) md = MethodSymbol (declTy, md) :> MethodInfo @@ -6834,21 +6834,21 @@ namespace ProviderImplementation.ProvidedTypes inherit PropertyInfo() let gps = ((if declTy.IsGenericType then declTy.GetGenericArguments() else [| |]), [| |]) - override __.Name = inp.Name - override __.Attributes = inp.Attributes - override __.MemberType = MemberTypes.Property - override __.DeclaringType = declTy - - override __.PropertyType = inp.PropertyType |> instType gps - override __.GetGetMethod(nonPublic) = inp.GetGetMethod(nonPublic) |> Option.ofObj |> Option.map (MethodSymbol.Make declTy) |> Option.toObj - override __.GetSetMethod(nonPublic) = inp.GetSetMethod(nonPublic) |> Option.ofObj |> Option.map (MethodSymbol.Make declTy) |> Option.toObj - override __.GetIndexParameters() = inp.GetIndexParameters() |> Array.map (instParameterInfo gps) - override __.CanRead = inp.GetGetMethod(false) |> isNull |> not - override __.CanWrite = inp.GetSetMethod(false) |> isNull |> not - override __.GetCustomAttributesData() = inp.GetCustomAttributesData() - override __.MetadataToken = inp.MetadataToken - - override __.GetHashCode() = inp.GetHashCode() + override _.Name = inp.Name + override _.Attributes = inp.Attributes + override _.MemberType = MemberTypes.Property + override _.DeclaringType = declTy + + override _.PropertyType = inp.PropertyType |> instType gps + override _.GetGetMethod(nonPublic) = inp.GetGetMethod(nonPublic) |> Option.ofObj |> Option.map (MethodSymbol.Make declTy) |> Option.toObj + override _.GetSetMethod(nonPublic) = inp.GetSetMethod(nonPublic) |> Option.ofObj |> Option.map (MethodSymbol.Make declTy) |> Option.toObj + override _.GetIndexParameters() = inp.GetIndexParameters() |> Array.map (instParameterInfo gps) + override _.CanRead = inp.GetGetMethod(false) |> isNull |> not + override _.CanWrite = inp.GetSetMethod(false) |> isNull |> not + override _.GetCustomAttributesData() = inp.GetCustomAttributesData() + override _.MetadataToken = inp.MetadataToken + + override _.GetHashCode() = inp.GetHashCode() override this.Equals(that:obj) = match that with | :? PropertyInfo as that -> this.MetadataToken = that.MetadataToken && eqTypes this.DeclaringType that.DeclaringType @@ -6862,7 +6862,7 @@ namespace ProviderImplementation.ProvidedTypes override this.GetCustomAttributes(_attributeType, _inherited) = notRequired this "GetCustomAttributes" this.Name override this.IsDefined(_attributeType, _inherited) = notRequired this "IsDefined" this.Name - override __.ToString() = sprintf "tgt property %s(...) in type %s" inp.Name declTy.Name + override _.ToString() = sprintf "tgt property %s(...) in type %s" inp.Name declTy.Name static member Make (declTy: Type) md = PropertySymbol (declTy, md) :> PropertyInfo @@ -6871,18 +6871,18 @@ namespace ProviderImplementation.ProvidedTypes inherit EventInfo() let gps = if declTy.IsGenericType then declTy.GetGenericArguments() else [| |] - override __.Name = inp.Name - override __.Attributes = inp.Attributes - override __.MemberType = MemberTypes.Event - override __.DeclaringType = declTy + override _.Name = inp.Name + override _.Attributes = inp.Attributes + override _.MemberType = MemberTypes.Event + override _.DeclaringType = declTy - override __.EventHandlerType = inp.EventHandlerType |> instType (gps, [| |]) - override __.GetAddMethod(nonPublic) = inp.GetAddMethod(nonPublic) |> Option.ofObj |> Option.map (MethodSymbol.Make declTy) |> Option.toObj - override __.GetRemoveMethod(nonPublic) = inp.GetRemoveMethod(nonPublic) |> Option.ofObj |> Option.map (MethodSymbol.Make declTy) |> Option.toObj - override __.GetCustomAttributesData() = inp.GetCustomAttributesData() - override __.MetadataToken = inp.MetadataToken + override _.EventHandlerType = inp.EventHandlerType |> instType (gps, [| |]) + override _.GetAddMethod(nonPublic) = inp.GetAddMethod(nonPublic) |> Option.ofObj |> Option.map (MethodSymbol.Make declTy) |> Option.toObj + override _.GetRemoveMethod(nonPublic) = inp.GetRemoveMethod(nonPublic) |> Option.ofObj |> Option.map (MethodSymbol.Make declTy) |> Option.toObj + override _.GetCustomAttributesData() = inp.GetCustomAttributesData() + override _.MetadataToken = inp.MetadataToken - override __.GetHashCode() = inp.GetHashCode() + override _.GetHashCode() = inp.GetHashCode() override this.Equals(that:obj) = match that with | :? EventInfo as that -> this.MetadataToken = that.MetadataToken && eqTypes this.DeclaringType that.DeclaringType @@ -6894,7 +6894,7 @@ namespace ProviderImplementation.ProvidedTypes override this.GetCustomAttributes(_attributeType, _inherited) = notRequired this "GetCustomAttributes" this.Name override this.IsDefined(_attributeType, _inherited) = notRequired this "IsDefined" this.Name - override __.ToString() = sprintf "tgt event %s(...) in type %s" inp.Name declTy.FullName + override _.ToString() = sprintf "tgt event %s(...) in type %s" inp.Name declTy.FullName static member Make (declTy: Type) md = EventSymbol (declTy, md) :> EventInfo @@ -6903,17 +6903,17 @@ namespace ProviderImplementation.ProvidedTypes inherit FieldInfo() let gps = if declTy.IsGenericType then declTy.GetGenericArguments() else [| |] - override __.Name = inp.Name - override __.Attributes = inp.Attributes - override __.MemberType = MemberTypes.Field - override __.DeclaringType = declTy + override _.Name = inp.Name + override _.Attributes = inp.Attributes + override _.MemberType = MemberTypes.Field + override _.DeclaringType = declTy - override __.FieldType = inp.FieldType |> instType (gps, [| |]) - override __.GetRawConstantValue() = inp.GetRawConstantValue() - override __.GetCustomAttributesData() = inp.GetCustomAttributesData() - override __.MetadataToken = inp.MetadataToken + override _.FieldType = inp.FieldType |> instType (gps, [| |]) + override _.GetRawConstantValue() = inp.GetRawConstantValue() + override _.GetCustomAttributesData() = inp.GetCustomAttributesData() + override _.MetadataToken = inp.MetadataToken - override __.GetHashCode() = inp.GetHashCode() + override _.GetHashCode() = inp.GetHashCode() override this.Equals(that:obj) = match that with | :? FieldInfo as that -> this.MetadataToken = that.MetadataToken && eqTypes this.DeclaringType that.DeclaringType @@ -6927,7 +6927,7 @@ namespace ProviderImplementation.ProvidedTypes override this.GetValue(_obj) = notRequired this "GetValue" this.Name override this.FieldHandle = notRequired this "FieldHandle" this.Name - override __.ToString() = sprintf "tgt literal field %s(...) in type %s" inp.Name declTy.FullName + override _.ToString() = sprintf "tgt literal field %s(...) in type %s" inp.Name declTy.FullName static member Make (declTy: Type) md = FieldSymbol (declTy, md) :> FieldInfo @@ -6992,18 +6992,18 @@ namespace ProviderImplementation.ProvidedTypes elif this.IsGenericType then this.GetGenericTypeDefinition().Namespace else failwithf "unreachable, stack trace = %A" Environment.StackTrace - override __.GetArrayRank() = (match kind with TypeSymbolKind.Array n -> n | TypeSymbolKind.SDArray -> 1 | _ -> failwithf "non-array type") - override __.IsValueTypeImpl() = this.IsGenericType && this.GetGenericTypeDefinition().IsValueType - override __.IsArrayImpl() = (match kind with TypeSymbolKind.Array _ | TypeSymbolKind.SDArray -> true | _ -> false) - override __.IsByRefImpl() = (match kind with TypeSymbolKind.ByRef _ -> true | _ -> false) - override __.IsPointerImpl() = (match kind with TypeSymbolKind.Pointer _ -> true | _ -> false) - override __.IsPrimitiveImpl() = false - override __.IsGenericType = (match kind with TypeSymbolKind.TargetGeneric _ | TypeSymbolKind.OtherGeneric _ -> true | _ -> false) - override __.GetGenericArguments() = (match kind with TypeSymbolKind.TargetGeneric _ | TypeSymbolKind.OtherGeneric _ -> typeArgs | _ -> [| |]) - override __.GetGenericTypeDefinition() = (match kind with TypeSymbolKind.TargetGeneric e -> (e :> Type) | TypeSymbolKind.OtherGeneric gtd -> gtd | _ -> failwithf "non-generic type") - override __.IsCOMObjectImpl() = false - override __.HasElementTypeImpl() = (match kind with TypeSymbolKind.TargetGeneric _ | TypeSymbolKind.OtherGeneric _ -> false | _ -> true) - override __.GetElementType() = (match kind,typeArgs with (TypeSymbolKind.Array _ | TypeSymbolKind.SDArray | TypeSymbolKind.ByRef | TypeSymbolKind.Pointer),[| e |] -> e | _ -> failwithf "%A, %A: not an array, pointer or byref type" kind typeArgs) + override _.GetArrayRank() = (match kind with TypeSymbolKind.Array n -> n | TypeSymbolKind.SDArray -> 1 | _ -> failwithf "non-array type") + override _.IsValueTypeImpl() = this.IsGenericType && this.GetGenericTypeDefinition().IsValueType + override _.IsArrayImpl() = (match kind with TypeSymbolKind.Array _ | TypeSymbolKind.SDArray -> true | _ -> false) + override _.IsByRefImpl() = (match kind with TypeSymbolKind.ByRef _ -> true | _ -> false) + override _.IsPointerImpl() = (match kind with TypeSymbolKind.Pointer _ -> true | _ -> false) + override _.IsPrimitiveImpl() = false + override _.IsGenericType = (match kind with TypeSymbolKind.TargetGeneric _ | TypeSymbolKind.OtherGeneric _ -> true | _ -> false) + override _.GetGenericArguments() = (match kind with TypeSymbolKind.TargetGeneric _ | TypeSymbolKind.OtherGeneric _ -> typeArgs | _ -> [| |]) + override _.GetGenericTypeDefinition() = (match kind with TypeSymbolKind.TargetGeneric e -> (e :> Type) | TypeSymbolKind.OtherGeneric gtd -> gtd | _ -> failwithf "non-generic type") + override _.IsCOMObjectImpl() = false + override _.HasElementTypeImpl() = (match kind with TypeSymbolKind.TargetGeneric _ | TypeSymbolKind.OtherGeneric _ -> false | _ -> true) + override _.GetElementType() = (match kind,typeArgs with (TypeSymbolKind.Array _ | TypeSymbolKind.SDArray | TypeSymbolKind.ByRef | TypeSymbolKind.Pointer),[| e |] -> e | _ -> failwithf "%A, %A: not an array, pointer or byref type" kind typeArgs) override x.Module = x.Assembly.ManifestModule @@ -7021,8 +7021,8 @@ namespace ProviderImplementation.ProvidedTypes override this.IsSubclassOf(otherTy: Type) = isSubclassOf this otherTy - member __.Kind = kind - member __.Args = typeArgs + member _.Kind = kind + member _.Args = typeArgs override this.GetConstructors bindingFlags = match kind with @@ -7169,14 +7169,14 @@ namespace ProviderImplementation.ProvidedTypes override this.UnderlyingSystemType = (this :> Type) - override __.GetCustomAttributesData() = ([| |] :> IList<_>) + override _.GetCustomAttributesData() = ([| |] :> IList<_>) override this.GetMembers _bindingFlags = notRequired this "GetMembers" this.Name override this.GetInterface(_name, _ignoreCase) = notRequired this "GetInterface" this.Name override this.GetInterfaces() = notRequired this "GetInterfaces" this.Name - override __.GetCustomAttributes(_inherit) = emptyAttributes - override __.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes - override __.IsDefined(_attributeType, _inherit) = false + override _.GetCustomAttributes(_inherit) = emptyAttributes + override _.GetCustomAttributes(_attributeType, _inherit) = emptyAttributes + override _.IsDefined(_attributeType, _inherit) = false override this.MemberType = notRequired this "MemberType" this.Name override this.GetMember(_name,_mt,_bindingFlags) = notRequired this "GetMember" this.Name @@ -7204,10 +7204,10 @@ namespace ProviderImplementation.ProvidedTypes and txCustomAttributesDatum (inp: ILCustomAttribute) = let args, namedArgs = decodeILCustomAttribData ilGlobals inp { new CustomAttributeData () with - member __.Constructor = txILConstructorRef inp.Method.MethodRef - member __.ConstructorArguments = [| for arg in args -> txCustomAttributesArg arg |] :> IList<_> + member _.Constructor = txILConstructorRef inp.Method.MethodRef + member _.ConstructorArguments = [| for arg in args -> txCustomAttributesArg arg |] :> IList<_> // Note, named arguments of custom attributes are not required by F# compiler on binding context elements. - member __.NamedArguments = [| |] :> IList<_> + member _.NamedArguments = [| |] :> IList<_> } and txCustomAttributesData (inp: ILCustomAttrs) = @@ -7219,11 +7219,11 @@ namespace ProviderImplementation.ProvidedTypes and txILParameter gps (inp: ILParameter) = { new ParameterInfo() with - override __.Name = StructOption.toObj inp.Name - override __.ParameterType = inp.ParameterType |> txILType gps - override __.RawDefaultValue = (match inp.Default with UNone -> null | USome v -> v) - override __.Attributes = inp.Attributes - override __.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData + override _.Name = StructOption.toObj inp.Name + override _.ParameterType = inp.ParameterType |> txILType gps + override _.RawDefaultValue = (match inp.Default with UNone -> null | USome v -> v) + override _.Attributes = inp.Attributes + override _.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData override x.ToString() = sprintf "tgt parameter %s" x.Name } @@ -7232,16 +7232,16 @@ namespace ProviderImplementation.ProvidedTypes let gps = if declTy.IsGenericType then declTy.GetGenericArguments() else [| |] { new ConstructorInfo() with - override __.Name = ".ctor" - override __.Attributes = inp.Attributes - override __.MemberType = MemberTypes.Constructor - override __.DeclaringType = declTy + override _.Name = ".ctor" + override _.Attributes = inp.Attributes + override _.MemberType = MemberTypes.Constructor + override _.DeclaringType = declTy - override __.GetParameters() = inp.Parameters |> Array.map (txILParameter (gps, [| |])) - override __.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData - override __.MetadataToken = inp.Token + override _.GetParameters() = inp.Parameters |> Array.map (txILParameter (gps, [| |])) + override _.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData + override _.MetadataToken = inp.Token - override __.GetHashCode() = inp.Token + override _.GetHashCode() = inp.Token override this.Equals(that:obj) = match that with @@ -7257,7 +7257,7 @@ namespace ProviderImplementation.ProvidedTypes override this.GetCustomAttributes(_inherited) = notRequired this "GetCustomAttributes" this.Name override this.GetCustomAttributes(_attributeType, _inherited) = notRequired this "GetCustomAttributes" this.Name - override __.ToString() = sprintf "tgt constructor(...) in type %s" declTy.FullName } + override _.ToString() = sprintf "tgt constructor(...) in type %s" declTy.FullName } /// Makes a method definition read from a binary available as a MethodInfo. Not all methods are implemented. and txILMethodDef (declTy: Type) (inp: ILMethodDef) = @@ -7265,19 +7265,19 @@ namespace ProviderImplementation.ProvidedTypes let rec gps2 = inp.GenericParams |> Array.mapi (fun i gp -> txILGenericParam (fun () -> gps, gps2) (i + gps.Length) gp) { new MethodInfo() with - override __.Name = inp.Name - override __.DeclaringType = declTy - override __.MemberType = MemberTypes.Method - override __.Attributes = inp.Attributes - override __.GetParameters() = inp.Parameters |> Array.map (txILParameter (gps, gps2)) - override __.CallingConvention = if inp.IsStatic then CallingConventions.Standard else CallingConventions.HasThis ||| CallingConventions.Standard - override __.ReturnType = inp.Return.Type |> txILType (gps, gps2) - override __.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData - override __.GetGenericArguments() = gps2 - override __.IsGenericMethod = (gps2.Length <> 0) - override __.IsGenericMethodDefinition = __.IsGenericMethod + override _.Name = inp.Name + override _.DeclaringType = declTy + override _.MemberType = MemberTypes.Method + override _.Attributes = inp.Attributes + override _.GetParameters() = inp.Parameters |> Array.map (txILParameter (gps, gps2)) + override _.CallingConvention = if inp.IsStatic then CallingConventions.Standard else CallingConventions.HasThis ||| CallingConventions.Standard + override _.ReturnType = inp.Return.Type |> txILType (gps, gps2) + override _.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData + override _.GetGenericArguments() = gps2 + override _.IsGenericMethod = (gps2.Length <> 0) + override t.IsGenericMethodDefinition = t.IsGenericMethod - override __.GetHashCode() = inp.Token + override _.GetHashCode() = inp.Token override this.Equals(that:obj) = match that with @@ -7286,7 +7286,7 @@ namespace ProviderImplementation.ProvidedTypes override this.MakeGenericMethod(args) = MethodSymbol2(this, args) :> MethodInfo - override __.MetadataToken = inp.Token + override _.MetadataToken = inp.Token // unused override this.MethodHandle = notRequired this "MethodHandle" this.Name @@ -7300,28 +7300,28 @@ namespace ProviderImplementation.ProvidedTypes override this.GetCustomAttributes(_inherited) = notRequired this "GetCustomAttributes" this.Name override this.GetCustomAttributes(_attributeType, _inherited) = notRequired this "GetCustomAttributes" this.Name - override __.ToString() = sprintf "tgt method %s(...) in type %s" inp.Name declTy.FullName } + override _.ToString() = sprintf "tgt method %s(...) in type %s" inp.Name declTy.FullName } /// Makes a property definition read from a binary available as a PropertyInfo. Not all methods are implemented. and txILPropertyDef (declTy: Type) (inp: ILPropertyDef) = let gps = if declTy.IsGenericType then declTy.GetGenericArguments() else [| |] { new PropertyInfo() with - override __.Name = inp.Name - override __.Attributes = inp.Attributes - override __.MemberType = MemberTypes.Property - override __.DeclaringType = declTy + override _.Name = inp.Name + override _.Attributes = inp.Attributes + override _.MemberType = MemberTypes.Property + override _.DeclaringType = declTy - override __.PropertyType = inp.PropertyType |> txILType (gps, [| |]) - override __.GetGetMethod(_nonPublic) = inp.GetMethod |> Option.map (txILMethodRef declTy) |> Option.toObj - override __.GetSetMethod(_nonPublic) = inp.SetMethod |> Option.map (txILMethodRef declTy) |> Option.toObj - override __.GetIndexParameters() = inp.IndexParameters |> Array.map (txILParameter (gps, [| |])) - override __.CanRead = inp.GetMethod.IsSome - override __.CanWrite = inp.SetMethod.IsSome - override __.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData - override __.MetadataToken = inp.Token + override _.PropertyType = inp.PropertyType |> txILType (gps, [| |]) + override _.GetGetMethod(_nonPublic) = inp.GetMethod |> Option.map (txILMethodRef declTy) |> Option.toObj + override _.GetSetMethod(_nonPublic) = inp.SetMethod |> Option.map (txILMethodRef declTy) |> Option.toObj + override _.GetIndexParameters() = inp.IndexParameters |> Array.map (txILParameter (gps, [| |])) + override _.CanRead = inp.GetMethod.IsSome + override _.CanWrite = inp.SetMethod.IsSome + override _.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData + override _.MetadataToken = inp.Token - override __.GetHashCode() = inp.Token + override _.GetHashCode() = inp.Token override this.Equals(that:obj) = match that with @@ -7336,25 +7336,25 @@ namespace ProviderImplementation.ProvidedTypes override this.GetCustomAttributes(_attributeType, _inherited) = notRequired this "GetCustomAttributes" this.Name override this.IsDefined(_attributeType, _inherited) = notRequired this "IsDefined" this.Name - override __.ToString() = sprintf "tgt property %s(...) in type %s" inp.Name declTy.Name } + override _.ToString() = sprintf "tgt property %s(...) in type %s" inp.Name declTy.Name } /// Make an event definition read from a binary available as an EventInfo. Not all methods are implemented. and txILEventDef (declTy: Type) (inp: ILEventDef) = let gps = if declTy.IsGenericType then declTy.GetGenericArguments() else [| |] { new EventInfo() with - override __.Name = inp.Name - override __.Attributes = inp.Attributes - override __.MemberType = MemberTypes.Event - override __.DeclaringType = declTy + override _.Name = inp.Name + override _.Attributes = inp.Attributes + override _.MemberType = MemberTypes.Event + override _.DeclaringType = declTy - override __.EventHandlerType = inp.EventHandlerType |> txILType (gps, [| |]) - override __.GetAddMethod(_nonPublic) = inp.AddMethod |> txILMethodRef declTy - override __.GetRemoveMethod(_nonPublic) = inp.RemoveMethod |> txILMethodRef declTy - override __.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData - override __.MetadataToken = inp.Token + override _.EventHandlerType = inp.EventHandlerType |> txILType (gps, [| |]) + override _.GetAddMethod(_nonPublic) = inp.AddMethod |> txILMethodRef declTy + override _.GetRemoveMethod(_nonPublic) = inp.RemoveMethod |> txILMethodRef declTy + override _.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData + override _.MetadataToken = inp.Token - override __.GetHashCode() = inp.Token + override _.GetHashCode() = inp.Token override this.Equals(that:obj) = match that with @@ -7367,24 +7367,24 @@ namespace ProviderImplementation.ProvidedTypes override this.GetCustomAttributes(_attributeType, _inherited) = notRequired this "GetCustomAttributes" this.Name override this.IsDefined(_attributeType, _inherited) = notRequired this "IsDefined" this.Name - override __.ToString() = sprintf "tgt event %s(...) in type %s" inp.Name declTy.FullName } + override _.ToString() = sprintf "tgt event %s(...) in type %s" inp.Name declTy.FullName } /// Makes a field definition read from a binary available as a FieldInfo. Not all methods are implemented. and txILFieldDef (declTy: Type) (inp: ILFieldDef) = let gps = if declTy.IsGenericType then declTy.GetGenericArguments() else [| |] { new FieldInfo() with - override __.Name = inp.Name - override __.Attributes = inp.Attributes - override __.MemberType = MemberTypes.Field - override __.DeclaringType = declTy + override _.Name = inp.Name + override _.Attributes = inp.Attributes + override _.MemberType = MemberTypes.Field + override _.DeclaringType = declTy - override __.FieldType = inp.FieldType |> txILType (gps, [| |]) - override __.GetRawConstantValue() = match inp.LiteralValue with None -> null | Some v -> v - override __.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData - override __.MetadataToken = inp.Token + override _.FieldType = inp.FieldType |> txILType (gps, [| |]) + override _.GetRawConstantValue() = match inp.LiteralValue with None -> null | Some v -> v + override _.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData + override _.MetadataToken = inp.Token - override __.GetHashCode() = inp.Token + override _.GetHashCode() = inp.Token override this.Equals(that:obj) = match that with @@ -7399,7 +7399,7 @@ namespace ProviderImplementation.ProvidedTypes override this.GetValue(_obj) = notRequired this "GetValue" this.Name override this.FieldHandle = notRequired this "FieldHandle" this.Name - override __.ToString() = sprintf "tgt literal field %s(...) in type %s" inp.Name declTy.FullName } + override _.ToString() = sprintf "tgt literal field %s(...) in type %s" inp.Name declTy.FullName } /// Bind a reference to an assembly and txScopeRef(sref: ILScopeRef) = @@ -7459,19 +7459,19 @@ namespace ProviderImplementation.ProvidedTypes /// Convert an ILGenericParameterDef read from a binary to a System.Type. and txILGenericParam gpsf pos (inp: ILGenericParameterDef) = { new Type() with - override __.Name = inp.Name - override __.Assembly = (asm :> Assembly) - override __.FullName = inp.Name - override __.IsGenericParameter = true - override __.GenericParameterPosition = pos - override __.GetGenericParameterConstraints() = inp.Constraints |> Array.map (txILType (gpsf())) + override _.Name = inp.Name + override _.Assembly = (asm :> Assembly) + override _.FullName = inp.Name + override _.IsGenericParameter = true + override _.GenericParameterPosition = pos + override _.GetGenericParameterConstraints() = inp.Constraints |> Array.map (txILType (gpsf())) - override __.MemberType = enum 0 - override __.MetadataToken = inp.Token + override _.MemberType = enum 0 + override _.MetadataToken = inp.Token - override __.Namespace = null //notRequired this "Namespace" + override _.Namespace = null //notRequired this "Namespace" override this.DeclaringType = notRequired this "DeclaringType" this.Name - override __.BaseType = null //notRequired this "BaseType" this.Name + override _.BaseType = null //notRequired this "BaseType" this.Name override this.GetInterfaces() = notRequired this "GetInterfaces" this.Name override this.GetConstructors(_bindingFlags) = notRequired this "GetConstructors" this.Name @@ -7496,24 +7496,24 @@ namespace ProviderImplementation.ProvidedTypes override this.MakePointerType() = TypeSymbol(TypeSymbolKind.Pointer, [| this |]) :> Type override this.MakeByRefType() = TypeSymbol(TypeSymbolKind.ByRef, [| this |]) :> Type - override __.GetAttributeFlagsImpl() = TypeAttributes.Public ||| TypeAttributes.Class ||| TypeAttributes.Sealed + override _.GetAttributeFlagsImpl() = TypeAttributes.Public ||| TypeAttributes.Class ||| TypeAttributes.Sealed - override __.IsArrayImpl() = false - override __.IsByRefImpl() = false - override __.IsPointerImpl() = false - override __.IsPrimitiveImpl() = false - override __.IsCOMObjectImpl() = false - override __.IsGenericType = false - override __.IsGenericTypeDefinition = false + override _.IsArrayImpl() = false + override _.IsByRefImpl() = false + override _.IsPointerImpl() = false + override _.IsPrimitiveImpl() = false + override _.IsCOMObjectImpl() = false + override _.IsGenericType = false + override _.IsGenericTypeDefinition = false - override __.HasElementTypeImpl() = false + override _.HasElementTypeImpl() = false override this.UnderlyingSystemType = this - override __.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData + override _.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData override this.Equals(that:obj) = System.Object.ReferenceEquals (this, that) - override __.ToString() = sprintf "tgt generic param %s" inp.Name + override _.ToString() = sprintf "tgt generic param %s" inp.Name override this.AssemblyQualifiedName = "[" + this.Assembly.FullName + "]" + this.FullName @@ -7536,13 +7536,13 @@ namespace ProviderImplementation.ProvidedTypes let isNested = declTyOpt.IsSome do this.typeImpl <- this - override __.Name = inp.Name - override __.Assembly = (asm :> Assembly) - override __.DeclaringType = declTyOpt |> Option.toObj - override __.MemberType = if isNested then MemberTypes.NestedType else MemberTypes.TypeInfo - override __.MetadataToken = inp.Token + override _.Name = inp.Name + override _.Assembly = (asm :> Assembly) + override _.DeclaringType = declTyOpt |> Option.toObj + override _.MemberType = if isNested then MemberTypes.NestedType else MemberTypes.TypeInfo + override _.MetadataToken = inp.Token - override __.FullName = + override _.FullName = match declTyOpt with | None -> match inp.Namespace with @@ -7551,9 +7551,9 @@ namespace ProviderImplementation.ProvidedTypes | Some declTy -> declTy.FullName + "+" + inp.Name - override __.Namespace = inp.Namespace |> StructOption.toObj - override __.BaseType = inp.Extends |> Option.map (txILType (gps, [| |])) |> Option.toObj - override __.GetInterfaces() = inp.Implements |> Array.map (txILType (gps, [| |])) + override _.Namespace = inp.Namespace |> StructOption.toObj + override _.BaseType = inp.Extends |> Option.map (txILType (gps, [| |])) |> Option.toObj + override _.GetInterfaces() = inp.Implements |> Array.map (txILType (gps, [| |])) override this.GetConstructors(bindingFlags) = inp.Methods.Entries @@ -7640,40 +7640,40 @@ namespace ProviderImplementation.ProvidedTypes override this.MakePointerType() = TypeSymbol(TypeSymbolKind.Pointer, [| this |]) :> Type override this.MakeByRefType() = TypeSymbol(TypeSymbolKind.ByRef, [| this |]) :> Type - override __.GetAttributeFlagsImpl() = + override _.GetAttributeFlagsImpl() = let attr = TypeAttributes.Public ||| TypeAttributes.Class let attr = if inp.IsSealed then attr ||| TypeAttributes.Sealed else attr let attr = if inp.IsInterface then attr ||| TypeAttributes.Interface else attr let attr = if inp.IsSerializable then attr ||| TypeAttributes.Serializable else attr if isNested then adjustTypeAttributes isNested attr else attr - override __.IsValueTypeImpl() = inp.IsStructOrEnum + override _.IsValueTypeImpl() = inp.IsStructOrEnum - override __.IsEnum = + override _.IsEnum = match this.BaseType with | null -> false | bt -> bt.FullName = "System.Enum" || bt.IsEnum - override __.GetEnumUnderlyingType() = + override _.GetEnumUnderlyingType() = if this.IsEnum then txILType ([| |], [| |]) ilGlobals.typ_Int32 // TODO: in theory the assumption of "Int32" is not accurate for all enums, howver in practice .NET only uses enums with backing field Int32 else failwithf "not enum type" - override __.IsArrayImpl() = false - override __.IsByRefImpl() = false - override __.IsPointerImpl() = false - override __.IsPrimitiveImpl() = false - override __.IsCOMObjectImpl() = false - override __.IsGenericType = (gps.Length <> 0) - override __.IsGenericTypeDefinition = (gps.Length <> 0) - override __.HasElementTypeImpl() = false + override _.IsArrayImpl() = false + override _.IsByRefImpl() = false + override _.IsPointerImpl() = false + override _.IsPrimitiveImpl() = false + override _.IsCOMObjectImpl() = false + override _.IsGenericType = (gps.Length <> 0) + override _.IsGenericTypeDefinition = (gps.Length <> 0) + override _.HasElementTypeImpl() = false override this.UnderlyingSystemType = (this :> Type) - override __.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData + override _.GetCustomAttributesData() = inp.CustomAttrs |> txCustomAttributesData override this.Equals(that:obj) = System.Object.ReferenceEquals (this, that) override this.Equals(that:Type) = System.Object.ReferenceEquals (this, that) - override __.GetHashCode() = inp.Token + override _.GetHashCode() = inp.Token override this.IsAssignableFrom(otherTy: Type) = isAssignableFrom this otherTy @@ -7683,7 +7683,7 @@ namespace ProviderImplementation.ProvidedTypes override this.ToString() = sprintf "tgt type %s" this.FullName - override __.GetGenericArguments() = gps + override _.GetGenericArguments() = gps override this.GetGenericTypeDefinition() = (this :> Type) override x.Module = x.Assembly.ManifestModule @@ -7697,18 +7697,18 @@ namespace ProviderImplementation.ProvidedTypes override this.GetElementType() = notRequired this "GetElementType" inp.Name override this.InvokeMember(_name, _invokeAttr, _binder, _target, _args, _modifiers, _culture, _namedParameters) = notRequired this "InvokeMember" inp.Name - member __.Metadata: ILTypeDef = inp - member __.MakeMethodInfo (declTy: Type) md = txILMethodDef declTy md - member __.MakeConstructorInfo (declTy: Type) md = txILConstructorDef declTy md - member __.MakePropertyInfo (declTy: Type) md = txILPropertyDef declTy md - member __.MakeEventInfo (declTy: Type) md = txILEventDef declTy md - member __.MakeFieldInfo (declTy: Type) md = txILFieldDef declTy md - member __.MakeNestedTypeInfo (declTy: Type) md = asm.TxILTypeDef (Some declTy) md + member _.Metadata: ILTypeDef = inp + member _.MakeMethodInfo (declTy: Type) md = txILMethodDef declTy md + member _.MakeConstructorInfo (declTy: Type) md = txILConstructorDef declTy md + member _.MakePropertyInfo (declTy: Type) md = txILPropertyDef declTy md + member _.MakeEventInfo (declTy: Type) md = txILEventDef declTy md + member _.MakeFieldInfo (declTy: Type) md = txILFieldDef declTy md + member _.MakeNestedTypeInfo (declTy: Type) md = asm.TxILTypeDef (Some declTy) md override this.GetEvents() = this.GetEvents(BindingFlags.Public ||| BindingFlags.Instance ||| BindingFlags.Static) // Needed because TypeDelegator.cs provides a delegting implementation of this, and we are self-delegating and TargetModule(location: string) = inherit Module() - override __.MetadataToken = hash location + override _.MetadataToken = hash location /// Implements System.Reflection.Assembly backed by .NET metadata provided by an ILModuleReader and TargetAssembly(ilGlobals, tryBindAssembly: ILAssemblyRef -> Choice, reader: ILModuleReader option, location: string) as asm = @@ -7753,9 +7753,9 @@ namespace ProviderImplementation.ProvidedTypes let types = lazy [| for td in getReader().ILModuleDef.TypeDefs.Entries -> txILTypeDef None td |] - override __.GetReferencedAssemblies() = [| for aref in getReader().ILAssemblyRefs -> aref.ToAssemblyName() |] + override _.GetReferencedAssemblies() = [| for aref in getReader().ILAssemblyRefs -> aref.ToAssemblyName() |] - override __.GetTypes () = types.Force() + override _.GetTypes () = types.Force() override x.GetType (nm:string) = if nm.Contains("+") then @@ -7771,14 +7771,14 @@ namespace ProviderImplementation.ProvidedTypes else x.TryBindType(UNone, nm) |> Option.toObj - override __.GetName() = getReader().ILModuleDef.ManifestOfAssembly.GetName() + override _.GetName() = getReader().ILModuleDef.ManifestOfAssembly.GetName() override x.FullName = x.GetName().ToString() - override __.Location = location - override __.ManifestModule = (manifestModule :> Module) + override _.Location = location + override _.ManifestModule = (manifestModule :> Module) - override __.ReflectionOnly = true + override _.ReflectionOnly = true override x.GetManifestResourceStream(resourceName:string) = let r = getReader().ILModuleDef.Resources.Entries |> Seq.find (fun r -> r.Name = resourceName) @@ -7786,11 +7786,11 @@ namespace ProviderImplementation.ProvidedTypes | ILResourceLocation.Local f -> new MemoryStream(f()) :> Stream | _ -> notRequired x "reading manifest resource %s from non-embedded location" resourceName - member __.TxILTypeDef declTyOpt inp = txILTypeDef declTyOpt inp + member _.TxILTypeDef declTyOpt inp = txILTypeDef declTyOpt inp - member __.Reader with get() = reader and set v = (if reader.IsSome then failwith "reader on TargetAssembly already set"); reader <- v + member _.Reader with get() = reader and set v = (if reader.IsSome then failwith "reader on TargetAssembly already set"); reader <- v - member __.TryBindType(nsp:string uoption, nm:string): Type option = + member _.TryBindType(nsp:string uoption, nm:string): Type option = match getReader().ILModuleDef.TypeDefs.TryFindByName(nsp, nm) with | Some td -> asm.TxILTypeDef None td |> Some | None -> @@ -7833,17 +7833,17 @@ namespace ProviderImplementation.ProvidedTypes let theTypesArray = lazy (theTypes.ToArray() |> Array.collect (function (ptds, None) -> Array.map (fun ptd -> (ptd :> Type)) ptds | _ -> [| |])) - override __.GetReferencedAssemblies() = [| |] //notRequired x "GetReferencedAssemblies" (assemblyName.ToString()) + override _.GetReferencedAssemblies() = [| |] //notRequired x "GetReferencedAssemblies" (assemblyName.ToString()) - override __.GetName() = assemblyName + override _.GetName() = assemblyName - override __.FullName = assemblyName.ToString() + override _.FullName = assemblyName.ToString() - override __.Location = assemblyFileName + override _.Location = assemblyFileName - override __.ReflectionOnly = true + override _.ReflectionOnly = true - override __.GetTypes () = theTypesArray.Force() + override _.GetTypes () = theTypesArray.Force() override x.GetType (nm: string) = if nm.Contains("+") then @@ -7867,18 +7867,18 @@ namespace ProviderImplementation.ProvidedTypes new (assemblyName, assemblyFileName) = ProvidedAssembly(false, assemblyName, assemblyFileName) - member __.BelongsToTargetModel = isTgt + member _.BelongsToTargetModel = isTgt - member __.AddNestedTypes (types, enclosingGeneratedTypeNames) = + member _.AddNestedTypes (types, enclosingGeneratedTypeNames) = addTypes (Array.ofList types, Some enclosingGeneratedTypeNames) - member __.AddTypes (types) = + member _.AddTypes (types) = addTypes (Array.ofList types, None) - member __.AddTheTypes (types, enclosingGeneratedTypeNames) = + member _.AddTheTypes (types, enclosingGeneratedTypeNames) = addTypes (types, enclosingGeneratedTypeNames) - member __.GetTheTypes () = theTypes.ToArray() + member _.GetTheTypes () = theTypes.ToArray() //==================================================================================================== // ProvidedTypesContext @@ -8353,9 +8353,9 @@ namespace ProviderImplementation.ProvidedTypes loop expr #endif - member __.TranslateExpression q = simplifyExpr q + member _.TranslateExpression q = simplifyExpr q - member __.TranslateQuotationToCode qexprf (paramNames: string[]) (argExprs: Expr[]) = + member _.TranslateQuotationToCode qexprf (paramNames: string[]) (argExprs: Expr[]) = // Use the real variable names instead of indices, to improve output of Debug.fs // Add let bindings for arguments to ensure that arguments will be evaluated let varDecisions = argExprs |> Array.mapi (fun i e -> match e with Var v when v.Name = paramNames.[i] -> false, v | _ -> true, Var(paramNames.[i], e.Type)) @@ -8919,35 +8919,35 @@ namespace ProviderImplementation.ProvidedTypes let rec convNamespaceToTgt (x: IProvidedNamespace) = { new IProvidedNamespace with - member __.GetNestedNamespaces() = Array.map convNamespaceToTgt (x.GetNestedNamespaces()) - member __.NamespaceName = x.NamespaceName - member __.GetTypes() = Array.map convTypeDefToTgt (x.GetTypes()) - member __.ResolveTypeName typeName = convTypeDefToTgt (x.ResolveTypeName typeName) } + member _.GetNestedNamespaces() = Array.map convNamespaceToTgt (x.GetNestedNamespaces()) + member _.NamespaceName = x.NamespaceName + member _.GetTypes() = Array.map convTypeDefToTgt (x.GetTypes()) + member _.ResolveTypeName typeName = convTypeDefToTgt (x.ResolveTypeName typeName) } /// Gets the equivalent target type - member __.ConvertSourceTypeToTarget t = convTypeToTgt t + member _.ConvertSourceTypeToTarget t = convTypeToTgt t - member __.ConvertTargetTypeToSource t = convTypeToSrc t + member _.ConvertTargetTypeToSource t = convTypeToSrc t - member __.ConvertSourceExprToTarget e = convExprToTgt e + member _.ConvertSourceExprToTarget e = convExprToTgt e - member __.ConvertSourceNamespaceToTarget ns = convNamespaceToTgt ns - member __.ConvertSourceProvidedTypeDefinitionToTarget ptd = convProvidedTypeDefToTgt ptd - member __.TryBindILAssemblyRefToTgt(aref: ILAssemblyRef): Choice = tryBindTargetAssemblySimple(aref.Name) + member _.ConvertSourceNamespaceToTarget ns = convNamespaceToTgt ns + member _.ConvertSourceProvidedTypeDefinitionToTarget ptd = convProvidedTypeDefToTgt ptd + member _.TryBindILAssemblyRefToTgt(aref: ILAssemblyRef): Choice = tryBindTargetAssemblySimple(aref.Name) - member __.TryBindAssemblyNameToTarget(aref: AssemblyName): Choice = tryBindTargetAssemblySimple(aref.Name) + member _.TryBindAssemblyNameToTarget(aref: AssemblyName): Choice = tryBindTargetAssemblySimple(aref.Name) - member __.TryBindSimpleAssemblyNameToTarget(assemblyName: string) = tryBindTargetAssemblySimple(assemblyName) + member _.TryBindSimpleAssemblyNameToTarget(assemblyName: string) = tryBindTargetAssemblySimple(assemblyName) - member __.ILGlobals = ilGlobals.Value + member _.ILGlobals = ilGlobals.Value - member __.ReferencedAssemblyPaths = referencedAssemblyPaths + member _.ReferencedAssemblyPaths = referencedAssemblyPaths - member __.GetTargetAssemblies() = getTargetAssemblies().ToArray() + member _.GetTargetAssemblies() = getTargetAssemblies().ToArray() - member __.GetSourceAssemblies() = getSourceAssemblies().ToArray() + member _.GetSourceAssemblies() = getSourceAssemblies().ToArray() - member __.FSharpCoreAssemblyVersion = fsharpCoreRefVersion.Force() + member _.FSharpCoreAssemblyVersion = fsharpCoreRefVersion.Force() member this.ReadRelatedAssembly(fileName) = let ilg = ilGlobals.Force() @@ -8960,10 +8960,10 @@ namespace ProviderImplementation.ProvidedTypes let reader = ILModuleReader(fileName, ByteFile(bytes), ilg, true) TargetAssembly(ilg, this.TryBindILAssemblyRefToTgt, Some reader, fileName) :> Assembly - member __.AddSourceAssembly(asm: Assembly) = + member _.AddSourceAssembly(asm: Assembly) = sourceAssembliesQueue.Add (fun () -> [| asm |]) - member __.AddTargetAssembly(asmName: AssemblyName, asm: Assembly) = + member _.AddTargetAssembly(asmName: AssemblyName, asm: Assembly) = targetAssembliesQueue.Add (fun () -> targetAssembliesTable_.[asmName.Name] <- Choice1Of2 asm targetAssemblies_.Add asm) @@ -9182,8 +9182,8 @@ namespace ProviderImplementation.ProvidedTypes [] type RowElement(tag:int32, idx: int32) = - member __.Tag = tag - member __.Val = idx + member _.Tag = tag + member _.Val = idx // These create RowElements let UShort (x:uint16) = RowElement(RowElementTags.UShort, int32 x) @@ -9245,9 +9245,9 @@ namespace ProviderImplementation.ProvidedTypes /// representations. [] type SharedRow(elems: RowElement[], hashCode: int) = - member __.GenericRow = elems - override __.GetHashCode() = hashCode - override __.Equals(obj:obj) = + member _.GenericRow = elems + override _.GetHashCode() = hashCode + override _.Equals(obj:obj) = match obj with | :? SharedRow as y -> equalRows elems y.GenericRow | _ -> false @@ -9271,9 +9271,9 @@ namespace ProviderImplementation.ProvidedTypes /// hash code for these rows, and indeed the GetHashCode and Equals should not be needed. [] type UnsharedRow(elems: RowElement[]) = - member __.GenericRow = elems - override __.GetHashCode() = hashRow elems - override __.Equals(obj:obj) = + member _.GenericRow = elems + override _.GetHashCode() = hashRow elems + override _.Equals(obj:obj) = match obj with | :? UnsharedRow as y -> equalRows elems y.GenericRow | _ -> false @@ -9363,15 +9363,15 @@ namespace ProviderImplementation.ProvidedTypes |> combineHash (hash nm) |> combineHash (hash argtys.Length) |> combineHash (hash isStatic) - member __.TypeIdx = tidx - member __.GenericArity = garity - member __.Name = nm - member __.ReturnType = rty - member __.ArgTypes = argtys - member __.IsStatic = isStatic - override __.ToString() = sprintf "%A" (tidx, garity, nm, rty, argtys, isStatic) - override __.GetHashCode() = hashCode - override __.Equals(obj:obj) = + member _.TypeIdx = tidx + member _.GenericArity = garity + member _.Name = nm + member _.ReturnType = rty + member _.ArgTypes = argtys + member _.IsStatic = isStatic + override _.ToString() = sprintf "%A" (tidx, garity, nm, rty, argtys, isStatic) + override _.GetHashCode() = hashCode + override _.Equals(obj:obj) = match obj with | :? MethodDefKey as y -> tidx = y.TypeIdx && @@ -9387,11 +9387,11 @@ namespace ProviderImplementation.ProvidedTypes type FieldDefKey(tidx:int, nm:string, ty:ILType) = // precompute the hash. hash doesn't include the type let hashCode = hash tidx |> combineHash (hash nm) - member __.TypeIdx = tidx - member __.Name = nm - member __.Type = ty - override __.GetHashCode() = hashCode - override __.Equals(obj:obj) = + member _.TypeIdx = tidx + member _.Name = nm + member _.Type = ty + override _.GetHashCode() = hashCode + override _.Equals(obj:obj) = match obj with | :? FieldDefKey as y -> tidx = y.TypeIdx && @@ -13066,7 +13066,7 @@ namespace ProviderImplementation.ProvidedTypes type ILLocalBuilder(i: int) = - member __.LocalIndex = i + member _.LocalIndex = i type ILGenerator(methodName) = let mutable locals = ResizeArray() @@ -13074,7 +13074,7 @@ namespace ProviderImplementation.ProvidedTypes let mutable labelCount = 0 let mutable labels = Dictionary() - member __.Content = + member _.Content = { IsZeroInit = true MaxStack = instrs.Count Locals = locals.ToArray() @@ -13085,16 +13085,16 @@ namespace ProviderImplementation.ProvidedTypes Locals = [| |] (* TODO ILLocalDebugInfo *) } } - member __.DeclareLocal(ty: ILType) = + member _.DeclareLocal(ty: ILType) = let idx = locals.Count let local = { Type = ty; IsPinned = false; DebugInfo = None } locals.Add(local) ILLocalBuilder(idx) - member __.DefineLabel() = labelCount <- labelCount + 1; labelCount - member __.MarkLabel(label) = labels.[label] <- instrs.Count - member __.Emit(opcode) = instrs.Add(opcode) - override __.ToString() = "generator for " + methodName + member _.DefineLabel() = labelCount <- labelCount + 1; labelCount + member _.MarkLabel(label) = labels.[label] <- instrs.Count + member _.Emit(opcode) = instrs.Add(opcode) + override _.ToString() = "generator for " + methodName type ILFieldBuilder(enclosing: ILType, nm: string, fty: ILType, attrs: FieldAttributes) = @@ -13102,13 +13102,13 @@ namespace ProviderImplementation.ProvidedTypes let mutable lit = None let cattrs = ResizeArray() - member __.SetConstant(lit2) = (lit <- Some lit2) - member __.SetCustomAttribute(ca) = cattrs.Add(ca) - member __.FormalFieldRef = ILFieldRef(enclosing.TypeRef, nm, fty) + member _.SetConstant(lit2) = (lit <- Some lit2) + member _.SetCustomAttribute(ca) = cattrs.Add(ca) + member _.FormalFieldRef = ILFieldRef(enclosing.TypeRef, nm, fty) member this.FormalFieldSpec = ILFieldSpec(this.FormalFieldRef, enclosing) - member __.Name = nm + member _.Name = nm - member __.Content = + member _.Content = { Name = nm FieldType = fty LiteralValue = lit @@ -13116,23 +13116,23 @@ namespace ProviderImplementation.ProvidedTypes Offset = None CustomAttrs = mkILCustomAttrs (cattrs.ToArray()) Token = genToken() } - override __.ToString() = "builder for " + nm + override _.ToString() = "builder for " + nm type ILGenericParameterBuilder(nm, attrs: GenericParameterAttributes) = let mutable constraints = ResizeArray() let cattrs = ResizeArray() - member __.AddConstraint(ty) = constraints.Add(ty) - member __.SetCustomAttribute(ca) = cattrs.Add(ca) + member _.AddConstraint(ty) = constraints.Add(ty) + member _.SetCustomAttribute(ca) = cattrs.Add(ca) - member __.Content = + member _.Content = { Name=nm Constraints= constraints.ToArray() Attributes = attrs CustomAttrs = mkILCustomAttrs (cattrs.ToArray()) Token = genToken() } - override __.ToString() = "builder for " + nm + override _.ToString() = "builder for " + nm type ILParameterBuilder(ty: ILType) = @@ -13141,11 +13141,11 @@ namespace ProviderImplementation.ProvidedTypes let mutable dflt = UNone let cattrs = ResizeArray() - member __.SetData(attrs2,nm2) = attrs <- attrs2; nm <- USome nm2 - member __.SetConstant(obj) = dflt <- USome obj - member __.SetCustomAttribute(ca) = cattrs.Add(ca) + member _.SetData(attrs2,nm2) = attrs <- attrs2; nm <- USome nm2 + member _.SetConstant(obj) = dflt <- USome obj + member _.SetCustomAttribute(ca) = cattrs.Add(ca) - member __.Content = + member _.Content = { Name=nm ParameterType=ty Default=dflt @@ -13160,17 +13160,17 @@ namespace ProviderImplementation.ProvidedTypes let cattrs = ResizeArray() let mutable body = None - member __.DefineGenericParameter(name, attrs) = let eb = ILGenericParameterBuilder(name, attrs) in gparams.Add eb; eb - member __.DefineParameter(i, attrs, parameterName) = ilParams.[i].SetData(attrs, parameterName) ; ilParams.[i] - member __.SetCustomAttribute(ca) = cattrs.Add(ca) - member __.GetILGenerator() = let ilg = ILGenerator(methodName) in body <- Some ilg; ilg - member __.FormalMethodRef = + member _.DefineGenericParameter(name, attrs) = let eb = ILGenericParameterBuilder(name, attrs) in gparams.Add eb; eb + member _.DefineParameter(i, attrs, parameterName) = ilParams.[i].SetData(attrs, parameterName) ; ilParams.[i] + member _.SetCustomAttribute(ca) = cattrs.Add(ca) + member _.GetILGenerator() = let ilg = ILGenerator(methodName) in body <- Some ilg; ilg + member _.FormalMethodRef = let cc = (if ILMethodDef.ComputeIsStatic attrs then ILCallingConv.Static else ILCallingConv.Instance) ILMethodRef (enclosing.TypeRef, cc, gparams.Count, methodName, argtys, retty) member this.FormalMethodSpec = ILMethodSpec(this.FormalMethodRef, enclosing, mkILFormalGenericArgs enclosing.TypeSpec.GenericArgs.Length gparams.Count) - member __.Content = + member _.Content = { Token = genToken() Name = methodName Attributes = attrs @@ -13182,7 +13182,7 @@ namespace ProviderImplementation.ProvidedTypes Return = (let p = ilParams.[0].Content in { Type = p.ParameterType; CustomAttrs = p.CustomAttrs }) Body = body |> Option.map (fun b -> b.Content) IsEntryPoint = false } - override __.ToString() = "builder for " + methodName + override _.ToString() = "builder for " + methodName type ILPropertyBuilder(nm, attrs: PropertyAttributes, retty: ILType, argtys: ILType[]) = @@ -13190,11 +13190,11 @@ namespace ProviderImplementation.ProvidedTypes let mutable getMethod = None let cattrs = ResizeArray() - member __.SetGetMethod(mb: ILMethodBuilder) = getMethod <- Some mb - member __.SetSetMethod(mb: ILMethodBuilder) = setMethod <- Some mb - member __.SetCustomAttribute(ca) = cattrs.Add(ca) + member _.SetGetMethod(mb: ILMethodBuilder) = getMethod <- Some mb + member _.SetSetMethod(mb: ILMethodBuilder) = setMethod <- Some mb + member _.SetCustomAttribute(ca) = cattrs.Add(ca) - member __.Content = + member _.Content = { Name=nm CallingConv = (if (getMethod.IsSome && getMethod.Value.Content.IsStatic) || @@ -13209,7 +13209,7 @@ namespace ProviderImplementation.ProvidedTypes Init= None // TODO if (attrs &&& PropertyAttributes.HasDefault) = 0 then None else IndexParameterTypes=argtys Token = genToken() } - override __.ToString() = "builder for " + nm + override _.ToString() = "builder for " + nm type ILEventBuilder(nm, attrs: EventAttributes) = @@ -13217,17 +13217,17 @@ namespace ProviderImplementation.ProvidedTypes let mutable removeMethod = None let cattrs = ResizeArray() - member __.SetAddOnMethod(mb: ILMethodBuilder) = addMethod <- Some mb - member __.SetRemoveOnMethod(mb: ILMethodBuilder) = removeMethod <- Some mb - member __.SetCustomAttribute(ca) = cattrs.Add(ca) - member __.Content = + member _.SetAddOnMethod(mb: ILMethodBuilder) = addMethod <- Some mb + member _.SetRemoveOnMethod(mb: ILMethodBuilder) = removeMethod <- Some mb + member _.SetCustomAttribute(ca) = cattrs.Add(ca) + member _.Content = { Name = nm Attributes = attrs AddMethod = addMethod.Value.FormalMethodRef RemoveMethod = removeMethod.Value.FormalMethodRef CustomAttrs = mkILCustomAttrs (cattrs.ToArray()) Token = genToken()} - override __.ToString() = "builder for " + nm + override _.ToString() = "builder for " + nm type ILTypeBuilder(scoref, nsp: string uoption, nm: string, attrs: TypeAttributes) = @@ -13242,7 +13242,7 @@ namespace ProviderImplementation.ProvidedTypes let methodImpls = ResizeArray() let cattrs = ResizeArray() - member __.ILTypeRef = ILTypeRef(scoref, nsp, nm) + member _.ILTypeRef = ILTypeRef(scoref, nsp, nm) member this.ILTypeSpec = ILTypeSpec(this.ILTypeRef, mkILFormalGenericArgs 0 gparams.Count) member this.ILType = match ILTypeDef.ComputeKind (int attrs) extends nsp nm with @@ -13254,14 +13254,14 @@ namespace ProviderImplementation.ProvidedTypes member this.DefineField(name, retty, attrs) = let fb = ILFieldBuilder(this.ILType, name, retty, attrs) in fields.Add fb; fb member this.DefineMethod(name, attrs, retty, argtys) = let mb = ILMethodBuilder(this.ILType, name, attrs, retty, argtys) in methods.Add mb; mb member this.DefineConstructor(attrs, argtys) = let mb = ILMethodBuilder(this.ILType, ".ctor", attrs ||| MethodAttributes.SpecialName ||| MethodAttributes.RTSpecialName, ILType.Void, argtys) in methods.Add mb; mb - member __.DefineProperty(name, attrs, propty, argtys) = let pb = ILPropertyBuilder(name, attrs, propty, argtys) in props.Add pb; pb - member __.DefineEvent(name, attrs) = let eb = ILEventBuilder(name, attrs) in events.Add eb; eb - member __.DefineMethodOverride(mimpl) = methodImpls.Add (mimpl) - member __.DefineGenericParameter(name, attrs) = let eb = ILGenericParameterBuilder(name, attrs) in gparams.Add eb; eb - member __.SetCustomAttribute(ca) = cattrs.Add(ca) - member __.AddInterfaceImplementation(ty) = implements.Add(ty) + member _.DefineProperty(name, attrs, propty, argtys) = let pb = ILPropertyBuilder(name, attrs, propty, argtys) in props.Add pb; pb + member _.DefineEvent(name, attrs) = let eb = ILEventBuilder(name, attrs) in events.Add eb; eb + member _.DefineMethodOverride(mimpl) = methodImpls.Add (mimpl) + member _.DefineGenericParameter(name, attrs) = let eb = ILGenericParameterBuilder(name, attrs) in gparams.Add eb; eb + member _.SetCustomAttribute(ca) = cattrs.Add(ca) + member _.AddInterfaceImplementation(ty) = implements.Add(ty) member this.DefineTypeInitializer () = let mb = ILMethodBuilder(this.ILType, ".cctor", MethodAttributes.Static ||| MethodAttributes.SpecialName, ILType.Void, [| |]) in methods.Add mb; mb - member __.SetParent ty = (extends <- Some ty) + member _.SetParent ty = (extends <- Some ty) member this.DefineDefaultConstructor(attrs, baseCtor: ILMethodSpec) = let ctor = this.DefineConstructor(attrs, [| |]) let ilg = ctor.GetILGenerator() @@ -13271,7 +13271,7 @@ namespace ProviderImplementation.ProvidedTypes ctor - member __.Content = + member _.Content = { Namespace=nsp Name=nm GenericParams= [| for x in gparams -> x.Content |] @@ -13283,23 +13283,23 @@ namespace ProviderImplementation.ProvidedTypes //SecurityDecls=emptyILSecurityDecls; //HasSecurity=false; NestedTypes = ILTypeDefs( lazy [| for x in nestedTypes -> let td = x.Content in td.Namespace, td.Name, lazy td |] ) - Fields = { new ILFieldDefs with member __.Entries = [| for x in fields -> x.Content |] } - Properties = { new ILPropertyDefs with member __.Entries = [| for x in props -> x.Content |] } - Events = { new ILEventDefs with member __.Entries = [| for x in events -> x.Content |] } + Fields = { new ILFieldDefs with member _.Entries = [| for x in fields -> x.Content |] } + Properties = { new ILPropertyDefs with member _.Entries = [| for x in props -> x.Content |] } + Events = { new ILEventDefs with member _.Entries = [| for x in events -> x.Content |] } Methods = ILMethodDefs (lazy [| for x in methods -> x.Content |]) - MethodImpls = { new ILMethodImplDefs with member __.Entries = methodImpls.ToArray() } + MethodImpls = { new ILMethodImplDefs with member _.Entries = methodImpls.ToArray() } CustomAttrs = mkILCustomAttrs (cattrs.ToArray()) } - override __.ToString() = "builder for " + joinILTypeName nsp nm + override _.ToString() = "builder for " + joinILTypeName nsp nm type ILModuleBuilder(scoref, moduleName, manifest) = let typeDefs = ResizeArray() let cattrs = ResizeArray() - member __.DefineType(nsp, name, attrs) = let tb = ILTypeBuilder(ILTypeRefScope.Top scoref, nsp, name, attrs) in typeDefs.Add tb; tb - member __.SetCustomAttribute(ca) = cattrs.Add(ca) + member _.DefineType(nsp, name, attrs) = let tb = ILTypeBuilder(ILTypeRefScope.Top scoref, nsp, name, attrs) in typeDefs.Add tb; tb + member _.SetCustomAttribute(ca) = cattrs.Add(ca) - member __.Content = + member _.Content = { Manifest=manifest Name=moduleName SubsystemVersion = (4, 0) @@ -13318,9 +13318,9 @@ namespace ProviderImplementation.ProvidedTypes MetadataVersion="" Resources=ILResources (lazy [| |]) TypeDefs = ILTypeDefs( lazy [| for x in typeDefs-> let td = x.Content in td.Namespace, td.Name, lazy td |] ) - CustomAttrs = { new ILCustomAttrs with member __.Entries = cattrs.ToArray() } + CustomAttrs = { new ILCustomAttrs with member _.Entries = cattrs.ToArray() } } - override __.ToString() = "builder for " + moduleName + override _.ToString() = "builder for " + moduleName type ILAssemblyBuilder(assemblyName: AssemblyName, fileName, ilg) = let manifest = @@ -13338,12 +13338,12 @@ namespace ProviderImplementation.ProvidedTypes ExportedTypes = ILExportedTypesAndForwarders (lazy [| |]) EntrypointElsewhere=None } let mb = ILModuleBuilder(ILScopeRef.Local, "MainModule", Some manifest) - member __.MainModule = mb - member __.Save() = + member _.MainModule = mb + member _.Save() = let il = mb.Content let options: BinaryWriter.options = { ilg = ilg; pdbfile = None; portablePDB = false; embeddedPDB = false; embedAllSource = false; embedSourceList = []; sourceLink = ""; emitTailcalls = true; deterministic = false; showTimes = false; dumpDebugInfo = false } BinaryWriter.WriteILBinary (fileName, options, il) - override __.ToString() = "builder for " + (assemblyName.ToString()) + override _.ToString() = "builder for " + (assemblyName.ToString()) type ExpectedStackState = @@ -13751,7 +13751,7 @@ namespace ProviderImplementation.ProvidedTypes | n -> failwithf "unknown expression '%A' in generated method" n - member __.EmitExpr (expectedState, expr) = emitExpr expectedState expr + member _.EmitExpr (expectedState, expr) = emitExpr expectedState expr //------------------------------------------------------------------------------------------------- // AssemblyCompiler: the assembly compiler for generative type providers. @@ -13902,7 +13902,7 @@ namespace ProviderImplementation.ProvidedTypes let ca = mkILCustomAttribMethRef (transCtorSpec attr.Constructor, constructorArgs, namedProps, namedFields) f ca - member __.Compile(isHostedExecution) = + member _.Compile(isHostedExecution) = let providedTypeDefinitionsT = targetAssembly.GetTheTypes() |> Array.collect (fun (tds,nsps) -> Array.map (fun td -> (td,nsps)) tds) let ilg = context.ILGlobals let assemblyName = targetAssembly.GetName() @@ -14250,10 +14250,10 @@ namespace ProviderImplementation.ProvidedTypes let typesSrc = [| for ty in typesSrc -> ty :> Type |] let nsSrc = { new IProvidedNamespace with - member __.GetNestedNamespaces() = [| |] - member __.NamespaceName = namespaceName - member __.GetTypes() = typesSrc |> Array.map ensureCompiled - member __.ResolveTypeName typeName = typesSrc |> Array.tryFind (fun ty -> ty.Name = typeName) |> Option.map ensureCompiled |> Option.toObj } + member _.GetNestedNamespaces() = [| |] + member _.NamespaceName = namespaceName + member _.GetTypes() = typesSrc |> Array.map ensureCompiled + member _.ResolveTypeName typeName = typesSrc |> Array.tryFind (fun ty -> ty.Name = typeName) |> Option.map ensureCompiled |> Option.toObj } let nsT = ctxt.ConvertSourceNamespaceToTarget nsSrc nsT @@ -14283,10 +14283,10 @@ namespace ProviderImplementation.ProvidedTypes let assemblyReplacementMap = defaultArg assemblyReplacementMap [] new TypeProviderForNamespaces(config, [], assemblyReplacementMap=assemblyReplacementMap, sourceAssemblies=sourceAssemblies) - member __.TargetContext = ctxt + member _.TargetContext = ctxt [] - member __.Disposing = disposing.Publish + member _.Disposing = disposing.Publish #if FX_NO_LOCAL_FILESYSTEM @@ -14298,7 +14298,7 @@ namespace ProviderImplementation.ProvidedTypes abstract member ResolveAssembly: args: ResolveEventArgs -> Assembly - default __.ResolveAssembly(args) = + default _.ResolveAssembly(args) = let expectedName = (AssemblyName(args.Name)).Name + ".dll" let expectedLocationOpt = probingFolders @@ -14308,12 +14308,12 @@ namespace ProviderImplementation.ProvidedTypes | Some f -> Assembly.LoadFrom f | None -> null - member __.RegisterProbingFolder (folder) = + member _.RegisterProbingFolder (folder) = // use GetFullPath to ensure that folder is valid ignore(Path.GetFullPath folder) probingFolders.Add folder - member __.RegisterRuntimeAssemblyLocationAsProbingFolder (config: TypeProviderConfig) = + member _.RegisterRuntimeAssemblyLocationAsProbingFolder (config: TypeProviderConfig) = config.RuntimeAssembly |> Path.GetDirectoryName |> this.RegisterProbingFolder @@ -14324,18 +14324,18 @@ namespace ProviderImplementation.ProvidedTypes AppDomain.CurrentDomain.remove_AssemblyResolve handler #endif - member __.AddNamespace (namespaceName, types) = namespacesT.Add (makeProvidedNamespace namespaceName types) + member _.AddNamespace (namespaceName, types) = namespacesT.Add (makeProvidedNamespace namespaceName types) - member __.Namespaces = namespacesT.ToArray() + member _.Namespaces = namespacesT.ToArray() member this.Invalidate() = invalidateE.Trigger(this,EventArgs()) - member __.GetStaticParametersForMethod(mb: MethodBase) = + member _.GetStaticParametersForMethod(mb: MethodBase) = match mb with | :? ProvidedMethod as t -> t.GetStaticParametersInternal() | _ -> [| |] - member __.ApplyStaticArgumentsForMethod(mb: MethodBase, mangledName, objs) = + member _.ApplyStaticArgumentsForMethod(mb: MethodBase, mangledName, objs) = match mb with | :? ProvidedMethod as t -> t.ApplyStaticArguments(mangledName, objs) :> MethodBase | _ -> failwithf "ApplyStaticArguments: static parameters for method %s are unexpected. Please report this bug to https://github.com/fsprojects/FSharp.TypeProviders.SDK/issues" mb.Name @@ -14343,11 +14343,11 @@ namespace ProviderImplementation.ProvidedTypes interface ITypeProvider with [] - member __.Invalidate = invalidateE.Publish + member _.Invalidate = invalidateE.Publish - member __.GetNamespaces() = namespacesT.ToArray() + member _.GetNamespaces() = namespacesT.ToArray() - member __.GetInvokerExpression(methodBaseT, parametersT) = + member _.GetInvokerExpression(methodBaseT, parametersT) = /// This checks that the GetInvokeCodeInternal doesn't return things containing calls to other provided methods or constructors. let rec check expr = @@ -14379,7 +14379,7 @@ namespace ProviderImplementation.ProvidedTypes | _ -> failwith ("TypeProviderForNamespaces.GetInvokerExpression: not a ProvidedMethod/ProvidedConstructor/ConstructorInfo/MethodInfo, name=" + methodBaseT.Name + " class=" + methodBaseT.GetType().FullName) - member __.GetStaticParameters(ty) = + member _.GetStaticParameters(ty) = match ty with | :? ProvidedTypeDefinition as t -> if ty.Name = t.Name then @@ -14388,7 +14388,7 @@ namespace ProviderImplementation.ProvidedTypes [| |] | _ -> [| |] - member __.ApplyStaticArguments(ty, typePathAfterArguments:string[], objs) = + member _.ApplyStaticArguments(ty, typePathAfterArguments:string[], objs) = let typePathAfterArguments = typePathAfterArguments.[typePathAfterArguments.Length-1] match ty with | :? ProvidedTypeDefinition as t -> @@ -14397,7 +14397,7 @@ namespace ProviderImplementation.ProvidedTypes | _ -> failwithf "ApplyStaticArguments: static params for type %s are unexpected, it is not a provided type definition. Please report this bug to https://github.com/fsprojects/FSharp.TypeProviders.SDK/issues" ty.FullName - member __.GetGeneratedAssemblyContents(assembly:Assembly) = + member _.GetGeneratedAssemblyContents(assembly:Assembly) = #if NO_GENERATIVE ignore assembly; failwith "no generative assemblies" #else @@ -14414,7 +14414,7 @@ namespace ProviderImplementation.ProvidedTypes bytes #if !NO_GENERATIVE - member __.RegisterGeneratedTargetAssembly (fileName:string) = + member _.RegisterGeneratedTargetAssembly (fileName:string) = let assemblyBytes = File.ReadAllBytes fileName //printfn "registering assembly in '%s'" fileName let assembly = diff --git a/vsintegration/tests/Salsa/FSharpLanguageServiceTestable.fs b/vsintegration/tests/Salsa/FSharpLanguageServiceTestable.fs index a31777b9435..cddffc15c0a 100644 --- a/vsintegration/tests/Salsa/FSharpLanguageServiceTestable.fs +++ b/vsintegration/tests/Salsa/FSharpLanguageServiceTestable.fs @@ -15,7 +15,9 @@ open Microsoft.VisualStudio.TextManager.Interop open Microsoft.VisualStudio.Text open Microsoft.VisualStudio.OLE.Interop open FSharp.Compiler -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Tokenization open Microsoft.VisualStudio.FSharp.LanguageService open Microsoft.VisualStudio.FSharp.LanguageService.SiteProvider @@ -99,7 +101,6 @@ type internal FSharpLanguageServiceTestable() as this = match checkerContainerOpt with | Some container -> let checker = container - checker.StopBackgroundCompile() checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() | None -> () @@ -127,7 +128,7 @@ type internal FSharpLanguageServiceTestable() as this = /// Respond to project being cleaned/rebuilt (any live type providers in the project should be refreshed) member this.OnProjectCleaned(projectSite:IProjectSite) = let enableInMemoryCrossProjectReferences = true - let _, checkOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, (fun _ -> None), projectSite, serviceProvider.Value, None(*projectId*), "" ,None, None, false) + let _, checkOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, (fun _ -> None), projectSite, serviceProvider.Value, "" , false) this.FSharpChecker.NotifyProjectCleaned(checkOptions) |> Async.RunSynchronously member this.OnActiveViewChanged(textView) = @@ -170,7 +171,7 @@ type internal FSharpLanguageServiceTestable() as this = member this.DependencyFileCreated projectSite = let enableInMemoryCrossProjectReferences = true // Invalidate the configuration if we notice any add for any DependencyFiles - let _, checkOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, (fun _ -> None), projectSite, serviceProvider.Value, None(*projectId*),"" ,None, None, false) + let _, checkOptions = ProjectSitesAndFiles.GetProjectOptionsForProjectSite(enableInMemoryCrossProjectReferences, (fun _ -> None), projectSite, serviceProvider.Value, "" , false) this.FSharpChecker.InvalidateConfiguration(checkOptions) member this.DependencyFileChanged (filename) = @@ -223,4 +224,4 @@ type internal FSharpLanguageServiceTestable() as this = // // This is for unit testing only member this.WaitForBackgroundCompile() = - this.FSharpChecker.WaitForBackgroundCompile() + () diff --git a/vsintegration/tests/Salsa/SalsaUtils.fs b/vsintegration/tests/Salsa/SalsaUtils.fs index a4c42200ce3..7d9e386a274 100644 --- a/vsintegration/tests/Salsa/SalsaUtils.fs +++ b/vsintegration/tests/Salsa/SalsaUtils.fs @@ -7,7 +7,8 @@ open System.IO open Microsoft.VisualStudio.FSharp.ProjectSystem open Microsoft.VisualStudio.FSharp.LanguageService open Microsoft.VisualStudio.TextManager.Interop -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices open NUnit.Framework open Salsa.Salsa diff --git a/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj b/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj index c3473e7b184..2cbefb3b41f 100644 --- a/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj +++ b/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj @@ -4,10 +4,8 @@ Library - $(NoWarn);45;47;52;58;75 + $(NoWarn);44;45;47;52;58;75 true - true - $(SystemValueTupleVersion) true false @@ -33,12 +31,12 @@ - + - - + + diff --git a/vsintegration/tests/Salsa/VsMocks.fs b/vsintegration/tests/Salsa/VsMocks.fs index b97fd6a1e40..5986949069f 100644 --- a/vsintegration/tests/Salsa/VsMocks.fs +++ b/vsintegration/tests/Salsa/VsMocks.fs @@ -1642,7 +1642,7 @@ module internal VsActual = static let jtc = new JoinableTaskContext() [)>] - member public __.JoinableTaskContext : JoinableTaskContext = jtc + member public _.JoinableTaskContext : JoinableTaskContext = jtc let vsInstallDir = // use the environment variable to find the VS installdir diff --git a/vsintegration/tests/Salsa/salsa.fs b/vsintegration/tests/Salsa/salsa.fs index b4ca688c171..c0dfd0e18e2 100644 --- a/vsintegration/tests/Salsa/salsa.fs +++ b/vsintegration/tests/Salsa/salsa.fs @@ -25,8 +25,8 @@ open Microsoft.VisualStudio.FSharp.LanguageService open Microsoft.VisualStudio.TextManager.Interop open UnitTests.TestLib.Utils.FilesystemHelpers open Microsoft.Build.Framework -open FSharp.Compiler -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices open Microsoft.Build.Evaluation @@ -1443,21 +1443,21 @@ module internal Salsa = let documentationProvider = { new IDocumentationBuilder_DEPRECATED with override doc.AppendDocumentationFromProcessedXML(appendTo,processedXml:string,showExceptions, showReturns, paramName) = - appendTo.Add(FSharp.Compiler.Layout.TaggedTextOps.tagText processedXml) - appendTo.Add(FSharp.Compiler.Layout.TaggedTextOps.Literals.lineBreak) + appendTo.Add(FSharp.Compiler.Text.TaggedText.tagText processedXml) + appendTo.Add(FSharp.Compiler.Text.TaggedText.lineBreak) override doc.AppendDocumentation(appendTo,filename:string,signature:string, showExceptions, showReturns, paramName) = - appendTo.Add(FSharp.Compiler.Layout.TaggedTextOps.tagText (sprintf "[Filename:%s]" filename)) - appendTo.Add(FSharp.Compiler.Layout.TaggedTextOps.Literals.lineBreak) - appendTo.Add(FSharp.Compiler.Layout.TaggedTextOps.tagText (sprintf "[Signature:%s]" signature)) - appendTo.Add(FSharp.Compiler.Layout.TaggedTextOps.Literals.lineBreak) + appendTo.Add(FSharp.Compiler.Text.TaggedText.tagText (sprintf "[Filename:%s]" filename)) + appendTo.Add(FSharp.Compiler.Text.TaggedText.lineBreak) + appendTo.Add(FSharp.Compiler.Text.TaggedText.tagText (sprintf "[Signature:%s]" signature)) + appendTo.Add(FSharp.Compiler.Text.TaggedText.lineBreak) if paramName.IsSome then - appendTo.Add(FSharp.Compiler.Layout.TaggedTextOps.tagText (sprintf "[ParamName: %s]" paramName.Value)) - appendTo.Add(FSharp.Compiler.Layout.TaggedTextOps.Literals.lineBreak) + appendTo.Add(FSharp.Compiler.Text.TaggedText.tagText (sprintf "[ParamName: %s]" paramName.Value)) + appendTo.Add(FSharp.Compiler.Text.TaggedText.lineBreak) } let sp2 = { new System.IServiceProvider with - member __.GetService(serviceType:Type) : obj = + member _.GetService(serviceType:Type) : obj = if serviceType = typeof then rdt else if serviceType = typeof then tm else raise (new Exception(sprintf "Salsa did not create service %A" serviceType)) } @@ -1546,8 +1546,8 @@ module internal Salsa = member ops.CleanUp vs = VsImpl(vs).CleanUp() member ops.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients vs = VsImpl(vs).ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() member ops.AutoCompleteMemberDataTipsThrowsScope message = - SymbolHelpers.ToolTipFault <- Some message - { new System.IDisposable with member x.Dispose() = SymbolHelpers.ToolTipFault <- None } + DeclarationListHelpers.ToolTipFault <- Some message + { new System.IDisposable with member x.Dispose() = DeclarationListHelpers.ToolTipFault <- None } member ops.OutOfConeFilesAreAddedAsLinks = false member ops.SupportsOutputWindowPane = false member ops.CleanInvisibleProject vs = VsImpl(vs).CleanInvisibleProject() diff --git a/vsintegration/tests/UnitTests/AssemblyResolver.fs b/vsintegration/tests/UnitTests/AssemblyResolver.fs index 229650849fa..a118adfd97f 100644 --- a/vsintegration/tests/UnitTests/AssemblyResolver.fs +++ b/vsintegration/tests/UnitTests/AssemblyResolver.fs @@ -51,4 +51,4 @@ module AssemblyResolver = type public AssemblyResolverTestFixture () = [] - member public __.Init () = AssemblyResolver.addResolver () + member public _.Init () = AssemblyResolver.addResolver () diff --git a/vsintegration/tests/UnitTests/BraceMatchingServiceTests.fs b/vsintegration/tests/UnitTests/BraceMatchingServiceTests.fs index 67d8f88b882..1e05ea76bd8 100644 --- a/vsintegration/tests/UnitTests/BraceMatchingServiceTests.fs +++ b/vsintegration/tests/UnitTests/BraceMatchingServiceTests.fs @@ -9,7 +9,7 @@ open NUnit.Framework open Microsoft.CodeAnalysis.Classification open Microsoft.CodeAnalysis.Editor open Microsoft.CodeAnalysis.Text -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis open Microsoft.VisualStudio.FSharp.Editor open Microsoft.VisualStudio.FSharp.LanguageService open UnitTests.TestLib.LanguageService @@ -28,7 +28,6 @@ type BraceMatchingServiceTests() = LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None - ExtraProjectInfo = None Stamp = None } diff --git a/vsintegration/tests/UnitTests/BreakpointResolutionService.fs b/vsintegration/tests/UnitTests/BreakpointResolutionService.fs index 8ccf2c69441..09b5e105857 100644 --- a/vsintegration/tests/UnitTests/BreakpointResolutionService.fs +++ b/vsintegration/tests/UnitTests/BreakpointResolutionService.fs @@ -13,8 +13,8 @@ open Microsoft.CodeAnalysis.Text open Microsoft.VisualStudio.FSharp.Editor open Microsoft.VisualStudio.FSharp.LanguageService -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Range +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Text open UnitTests.TestLib.LanguageService @@ -33,7 +33,6 @@ type BreakpointResolutionServiceTests() = LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None - ExtraProjectInfo = None Stamp = None } let code = " @@ -73,10 +72,10 @@ let main argv = let searchPosition = code.IndexOf(searchToken) Assert.IsTrue(searchPosition >= 0, "SearchToken '{0}' is not found in code", searchToken) - let sourceText = SourceText.From(code) + let document, sourceText = RoslynTestHelpers.CreateDocument(fileName, code) let searchSpan = TextSpan.FromBounds(searchPosition, searchPosition + searchToken.Length) - let parsingOptions, _ = checker.GetParsingOptionsFromProjectOptions projectOptions - let actualResolutionOption = FSharpBreakpointResolutionService.GetBreakpointLocation(checker, sourceText, fileName, searchSpan, parsingOptions) |> Async.RunSynchronously + + let actualResolutionOption = FSharpBreakpointResolutionService.GetBreakpointLocation(document, searchSpan) |> Async.RunSynchronously match actualResolutionOption with | None -> Assert.IsTrue(expectedResolution.IsNone, "BreakpointResolutionService failed to resolve breakpoint position") diff --git a/vsintegration/tests/UnitTests/CompletionProviderTests.fs b/vsintegration/tests/UnitTests/CompletionProviderTests.fs index 8b7f1ad24f7..9003031df00 100644 --- a/vsintegration/tests/UnitTests/CompletionProviderTests.fs +++ b/vsintegration/tests/UnitTests/CompletionProviderTests.fs @@ -11,7 +11,7 @@ // and capturing large amounts of structured output. (* cd Debug\net40\bin - .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Private.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\CompletionProviderTests.fs + .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Service.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\CompletionProviderTests.fs .\VisualFSharp.UnitTests.exe *) // Technique 3: @@ -31,7 +31,7 @@ open Microsoft.CodeAnalysis.Completion open Microsoft.CodeAnalysis.Text open Microsoft.VisualStudio.FSharp.Editor -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis open UnitTests.TestLib.LanguageService let filePath = "C:\\test.fs" @@ -46,7 +46,6 @@ let internal projectOptions opts = { LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None - ExtraProjectInfo = None Stamp = None } @@ -55,8 +54,9 @@ let formatCompletions(completions : string seq) = let VerifyCompletionListWithOptions(fileContents: string, marker: string, expected: string list, unexpected: string list, opts) = let caretPosition = fileContents.IndexOf(marker) + marker.Length + let document, _ = RoslynTestHelpers.CreateDocument(filePath, fileContents) let results = - FSharpCompletionProvider.ProvideCompletionsAsyncAux(checker, SourceText.From(fileContents), caretPosition, projectOptions opts, filePath, 0, (fun _ -> []), LanguageServicePerformanceOptions.Default, IntelliSenseOptions.Default) + FSharpCompletionProvider.ProvideCompletionsAsyncAux(document, caretPosition, (fun _ -> []), IntelliSenseOptions.Default) |> Async.RunSynchronously |> Option.defaultValue (ResizeArray()) |> Seq.map(fun result -> result.DisplayText) @@ -105,9 +105,9 @@ let VerifyCompletionList(fileContents, marker, expected, unexpected) = let VerifyCompletionListExactly(fileContents: string, marker: string, expected: string list) = let caretPosition = fileContents.IndexOf(marker) + marker.Length - + let document, _ = RoslynTestHelpers.CreateDocument(filePath, fileContents) let actual = - FSharpCompletionProvider.ProvideCompletionsAsyncAux(checker, SourceText.From(fileContents), caretPosition, projectOptions [| |], filePath, 0, (fun _ -> []), LanguageServicePerformanceOptions.Default, IntelliSenseOptions.Default) + FSharpCompletionProvider.ProvideCompletionsAsyncAux(document, caretPosition, (fun _ -> []), IntelliSenseOptions.Default) |> Async.RunSynchronously |> Option.defaultValue (ResizeArray()) |> Seq.toList @@ -356,8 +356,8 @@ let x = $"1 not the same as {System.Int32.MaxValue} is it" let ``Class instance members are ordered according to their kind and where they are defined (simple case, by a variable)``() = let fileContents = """ type Base() = - member __.BaseMethod() = 1 - member __.BaseProp = 1 + member _.BaseMethod() = 1 + member _.BaseProp = 1 type Class() = inherit Base() @@ -374,8 +374,8 @@ x. let ``Class instance members are ordered according to their kind and where they are defined (simple case, by a constructor)``() = let fileContents = """ type Base() = - member __.BaseMethod() = 1 - member __.BaseProp = 1 + member _.BaseMethod() = 1 + member _.BaseProp = 1 type Class() = inherit Base() @@ -410,8 +410,8 @@ let ``Class instance members are ordered according to their kind and where they let fileContents = """ type Base() = inherit System.Collections.Generic.List - member __.BaseMethod() = 1 - member __.BaseProp = 1 + member _.BaseMethod() = 1 + member _.BaseProp = 1 type Class() = inherit Base() @@ -479,8 +479,8 @@ let ``Extension methods go after everything else, extension properties are treat open System.Collections.Generic type List<'a> with - member __.ExtensionProp = 1 - member __.ExtensionMeth() = 1 + member _.ExtensionProp = 1 + member _.ExtensionMeth() = 1 List(). """ diff --git a/vsintegration/tests/UnitTests/DocumentDiagnosticAnalyzerTests.fs b/vsintegration/tests/UnitTests/DocumentDiagnosticAnalyzerTests.fs index 6fb3909079a..2f3b76b2965 100644 --- a/vsintegration/tests/UnitTests/DocumentDiagnosticAnalyzerTests.fs +++ b/vsintegration/tests/UnitTests/DocumentDiagnosticAnalyzerTests.fs @@ -14,8 +14,8 @@ open Microsoft.CodeAnalysis.Text open Microsoft.VisualStudio.FSharp.Editor open Microsoft.VisualStudio.FSharp.LanguageService -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Range +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Text open UnitTests.TestLib.LanguageService @@ -35,15 +35,14 @@ type DocumentDiagnosticAnalyzerTests() = LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None - ExtraProjectInfo = None Stamp = None } let getDiagnostics (fileContents: string) = async { - let parsingOptions, _ = checker.GetParsingOptionsFromProjectOptions projectOptions - let! syntacticDiagnostics = FSharpDocumentDiagnosticAnalyzer.GetDiagnostics(checker, filePath, SourceText.From(fileContents), 0, parsingOptions, projectOptions, DiagnosticsType.Syntax) - let! semanticDiagnostics = FSharpDocumentDiagnosticAnalyzer.GetDiagnostics(checker, filePath, SourceText.From(fileContents), 0, parsingOptions, projectOptions, DiagnosticsType.Semantic) + let document, _ = RoslynTestHelpers.CreateDocument(filePath, fileContents) + let! syntacticDiagnostics = FSharpDocumentDiagnosticAnalyzer.GetDiagnostics(document, DiagnosticsType.Syntax) + let! semanticDiagnostics = FSharpDocumentDiagnosticAnalyzer.GetDiagnostics(document, DiagnosticsType.Semantic) return syntacticDiagnostics.AddRange(semanticDiagnostics) } |> Async.RunSynchronously @@ -54,7 +53,8 @@ type DocumentDiagnosticAnalyzerTests() = | Some(flags) -> {projectOptions with OtherOptions = Array.append projectOptions.OtherOptions flags} let errors = getDiagnostics fileContents - Assert.AreEqual(0, errors.Length, "There should be no errors generated") + if not errors.IsEmpty then + Assert.Fail("There should be no errors generated", errors) member private this.VerifyErrorAtMarker(fileContents: string, expectedMarker: string, ?expectedMessage: string) = let errors = getDiagnostics fileContents |> Seq.filter(fun e -> e.Severity = DiagnosticSeverity.Error) |> Seq.toArray diff --git a/vsintegration/tests/UnitTests/DocumentHighlightsServiceTests.fs b/vsintegration/tests/UnitTests/DocumentHighlightsServiceTests.fs index 07d4eed0756..f7074122dd5 100644 --- a/vsintegration/tests/UnitTests/DocumentHighlightsServiceTests.fs +++ b/vsintegration/tests/UnitTests/DocumentHighlightsServiceTests.fs @@ -11,12 +11,12 @@ // and capturing large amounts of structured output. (* cd Debug\net40\bin - .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Private.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\CompletionProviderTests.fs + .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Service.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\CompletionProviderTests.fs .\VisualFSharp.UnitTests.exe *) // Technique 3: // -// Use F# Interactive. This only works for FSharp.Compiler.Private.dll which has a public API +// Use F# Interactive. This only works for FSharp.Compiler.Service.dll which has a public API // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. [] @@ -31,8 +31,8 @@ open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Text open Microsoft.VisualStudio.FSharp.Editor -open FSharp.Compiler -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Text open UnitTests.TestLib.LanguageService let filePath = "C:\\test.fs" @@ -48,18 +48,17 @@ let internal projectOptions = { LoadTime = DateTime.MaxValue UnresolvedReferences = None OriginalLoadReferences = [] - ExtraProjectInfo = None Stamp = None } let private getSpans (sourceText: SourceText) (caretPosition: int) = - let documentId = DocumentId.CreateNewId(ProjectId.CreateNewId()) - FSharpDocumentHighlightsService.GetDocumentHighlights(checker, documentId, sourceText, filePath, caretPosition, [], projectOptions, 0, LanguageServicePerformanceOptions.Default) + let document = RoslynTestHelpers.CreateDocument(filePath, sourceText) + FSharpDocumentHighlightsService.GetDocumentHighlights(document, caretPosition) |> Async.RunSynchronously |> Option.defaultValue [||] let private span sourceText isDefinition (startLine, startCol) (endLine, endCol) = - let range = Range.mkRange filePath (Range.mkPos startLine startCol) (Range.mkPos endLine endCol) + let range = Range.mkRange filePath (Position.mkPos startLine startCol) (Position.mkPos endLine endCol) { IsDefinition = isDefinition TextSpan = RoslynHelpers.FSharpRangeToTextSpan(sourceText, range) } diff --git a/vsintegration/tests/UnitTests/EditorFormattingServiceTests.fs b/vsintegration/tests/UnitTests/EditorFormattingServiceTests.fs index 3a5b70f2051..583e52e59ba 100644 --- a/vsintegration/tests/UnitTests/EditorFormattingServiceTests.fs +++ b/vsintegration/tests/UnitTests/EditorFormattingServiceTests.fs @@ -8,7 +8,7 @@ open NUnit.Framework open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Text open Microsoft.VisualStudio.FSharp.Editor -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis open Microsoft.CodeAnalysis.Formatting [] @@ -26,7 +26,6 @@ type EditorFormattingServiceTests() = LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None - ExtraProjectInfo = None Stamp = None } @@ -95,7 +94,7 @@ marker4""" let clipboard = prefix + """[] type SomeNameHere () = - member __.Test ()""" + member _.Test ()""" let start = """ @@ -112,7 +111,7 @@ let foo = printfn "Something here" [] type SomeNameHere () = - member __.Test () + member _.Test () somethingElseHere """ @@ -144,7 +143,7 @@ somethingElseHere let clipboard = prefix + """[] type SomeNameHere () = - member __.Test ()""" + member _.Test ()""" let start = """ $ @@ -158,7 +157,7 @@ somethingElseHere let expected = """ [] type SomeNameHere () = - member __.Test () + member _.Test () let foo = printfn "Something here" @@ -189,7 +188,7 @@ somethingElseHere let clipboard = """[] type SomeNameHere () = - member __.Test ()""" + member _.Test ()""" let start = """ @@ -206,7 +205,7 @@ let foo = printfn "Something here" [] type SomeNameHere () = - member __.Test () + member _.Test () somethingElseHere """ diff --git a/vsintegration/tests/UnitTests/FsxCompletionProviderTests.fs b/vsintegration/tests/UnitTests/FsxCompletionProviderTests.fs index daaec566c8e..7441639316f 100644 --- a/vsintegration/tests/UnitTests/FsxCompletionProviderTests.fs +++ b/vsintegration/tests/UnitTests/FsxCompletionProviderTests.fs @@ -10,7 +10,7 @@ // and capturing large amounts of structured output. (* cd Debug\net40\bin - .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Private.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\FsxCompletionProviderTests.fs + .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Service.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\FsxCompletionProviderTests.fs .\VisualFSharp.UnitTests.exe *) // Technique 3: @@ -33,12 +33,11 @@ open Microsoft.CodeAnalysis.Completion open Microsoft.CodeAnalysis.Text open Microsoft.VisualStudio.FSharp.Editor -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis open UnitTests.TestLib.LanguageService // AppDomain helper type Worker () = - inherit MarshalByRefObject() let filePath = "C:\\test.fsx" let projectOptions = { @@ -52,66 +51,15 @@ type Worker () = LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None - ExtraProjectInfo = None Stamp = None } - let formatCompletions(completions : string seq) = - "\n\t" + String.Join("\n\t", completions) - - let VerifyCompletionList(fileContents: string, marker: string, expected: string list, unexpected: string list) = - let caretPosition = fileContents.IndexOf(marker) + marker.Length - let results = - FSharpCompletionProvider.ProvideCompletionsAsyncAux(checker, SourceText.From(fileContents), caretPosition, projectOptions, filePath, 0, (fun _ -> []), LanguageServicePerformanceOptions.Default, IntelliSenseOptions.Default) - |> Async.RunSynchronously - |> Option.defaultValue (ResizeArray()) - |> Seq.map(fun result -> result.DisplayText) - - let expectedFound = - expected - |> Seq.filter results.Contains - - let expectedNotFound = - expected - |> Seq.filter (expectedFound.Contains >> not) - - let unexpectedNotFound = - unexpected - |> Seq.filter (results.Contains >> not) - - let unexpectedFound = - unexpected - |> Seq.filter (unexpectedNotFound.Contains >> not) - - // If either of these are true, then the test fails. - let hasExpectedNotFound = not (Seq.isEmpty expectedNotFound) - let hasUnexpectedFound = not (Seq.isEmpty unexpectedFound) - - if hasExpectedNotFound || hasUnexpectedFound then - let expectedNotFoundMsg = - if hasExpectedNotFound then - sprintf "\nExpected completions not found:%s\n" (formatCompletions expectedNotFound) - else - String.Empty - - let unexpectedFoundMsg = - if hasUnexpectedFound then - sprintf "\nUnexpected completions found:%s\n" (formatCompletions unexpectedFound) - else - String.Empty - - let completionsMsg = sprintf "\nin Completions:%s" (formatCompletions results) - - let msg = sprintf "%s%s%s" expectedNotFoundMsg unexpectedFoundMsg completionsMsg - - Assert.Fail(msg) - - member __.VerifyCompletionListExactly(fileContents: string, marker: string, expected: List) = - + member _.VerifyCompletionListExactly(fileContents: string, marker: string, expected: List) = let caretPosition = fileContents.IndexOf(marker) + marker.Length + let document = RoslynTestHelpers.CreateDocument(filePath, SourceText.From(fileContents), options = projectOptions) let expected = expected |> Seq.toList let actual = - let x = FSharpCompletionProvider.ProvideCompletionsAsyncAux(checker, SourceText.From(fileContents), caretPosition, projectOptions, filePath, 0, (fun _ -> []), LanguageServicePerformanceOptions.Default, IntelliSenseOptions.Default) + let x = FSharpCompletionProvider.ProvideCompletionsAsyncAux(document, caretPosition, (fun _ -> []), IntelliSenseOptions.Default) |> Async.RunSynchronously x |> Option.defaultValue (ResizeArray()) |> Seq.toList @@ -128,17 +76,7 @@ type Worker () = module FsxCompletionProviderTests = - let pathToThisDll = Assembly.GetExecutingAssembly().CodeBase - - let getWorker () = - - let adSetup = - let setup = new System.AppDomainSetup () - setup.PrivateBinPath <- pathToThisDll - setup - - let ad = AppDomain.CreateDomain((Guid()).ToString(), null, adSetup) - (ad.CreateInstanceFromAndUnwrap(pathToThisDll, typeof.FullName)) :?> Worker + let getWorker () = Worker() [] let fsiShouldTriggerCompletionInFsxFile() = diff --git a/vsintegration/tests/UnitTests/GoToDefinitionServiceTests.fs b/vsintegration/tests/UnitTests/GoToDefinitionServiceTests.fs index 31cdd24a75f..49527630ff6 100644 --- a/vsintegration/tests/UnitTests/GoToDefinitionServiceTests.fs +++ b/vsintegration/tests/UnitTests/GoToDefinitionServiceTests.fs @@ -12,12 +12,12 @@ // and capturing large amounts of structured output. (* cd Debug\net40\bin - .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Private.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\GoToDefinitionServiceTests.fs + .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Service.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\GoToDefinitionServiceTests.fs .\VisualFSharp.UnitTests.exe *) // Technique 3: // -// Use F# Interactive. This only works for FSharp.Compiler.Private.dll which has a public API +// Use F# Interactive. This only works for FSharp.Compiler.Service.dll which has a public API namespace Microsoft.VisualStudio.FSharp.Editor.Tests.Roslyn @@ -28,8 +28,10 @@ open NUnit.Framework open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Text open Microsoft.VisualStudio.FSharp.Editor -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Range +open FSharp.Compiler +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Text open UnitTests.TestLib.LanguageService [][] @@ -39,26 +41,22 @@ module GoToDefinitionServiceTests = let private findDefinition ( - checker: FSharpChecker, - documentKey: DocumentId, - sourceText: SourceText, - filePath: string, + document: Document, + sourceText: SourceText, position: int, - defines: string list, - options: FSharpProjectOptions, - textVersionHash: int + defines: string list ) : range option = maybe { let textLine = sourceText.Lines.GetLineFromPosition position let textLinePos = sourceText.Lines.GetLinePosition position let fcsTextLineNumber = Line.fromZ textLinePos.Line - let! lexerSymbol = Tokenizer.getSymbolAtPosition(documentKey, sourceText, position, filePath, defines, SymbolLookupKind.Greedy, false, false) - let! _, _, checkFileResults = checker.ParseAndCheckDocument (filePath, textVersionHash, sourceText, options, LanguageServicePerformanceOptions.Default, userOpName=userOpName) |> Async.RunSynchronously + let! lexerSymbol = Tokenizer.getSymbolAtPosition(document.Id, sourceText, position, document.FilePath, defines, SymbolLookupKind.Greedy, false, false) + let _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync(nameof(userOpName)) |> Async.RunSynchronously let declarations = checkFileResults.GetDeclarationLocation (fcsTextLineNumber, lexerSymbol.Ident.idRange.EndColumn, textLine.ToString(), lexerSymbol.FullIsland, false) match declarations with - | FSharpFindDeclResult.DeclFound range -> return range + | FindDeclResult.DeclFound range -> return range | _ -> return! None } @@ -74,20 +72,18 @@ module GoToDefinitionServiceTests = LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None - ExtraProjectInfo = None Stamp = None } let GoToDefinitionTest (fileContents: string, caretMarker: string, expected) = let filePath = Path.GetTempFileName() + ".fs" - let options = makeOptions filePath [| |] File.WriteAllText(filePath, fileContents) let caretPosition = fileContents.IndexOf(caretMarker) + caretMarker.Length - 1 // inside the marker - let documentId = DocumentId.CreateNewId(ProjectId.CreateNewId()) + let document, sourceText = RoslynTestHelpers.CreateDocument(filePath, fileContents) let actual = - findDefinition(checker, documentId, SourceText.From(fileContents), filePath, caretPosition, [], options, 0) + findDefinition(document, sourceText, caretPosition, []) |> Option.map (fun range -> (range.StartLine, range.EndLine, range.StartColumn, range.EndColumn)) if actual <> expected then diff --git a/vsintegration/tests/UnitTests/IndentationServiceTests.fs b/vsintegration/tests/UnitTests/IndentationServiceTests.fs index a1a8cb0943f..7c535ccdff9 100644 --- a/vsintegration/tests/UnitTests/IndentationServiceTests.fs +++ b/vsintegration/tests/UnitTests/IndentationServiceTests.fs @@ -11,7 +11,7 @@ open Microsoft.CodeAnalysis.Classification open Microsoft.CodeAnalysis.Editor open Microsoft.CodeAnalysis.Text open Microsoft.VisualStudio.FSharp.Editor -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis open Microsoft.CodeAnalysis.Formatting open UnitTests.TestLib.LanguageService @@ -30,7 +30,6 @@ type IndentationServiceTests() = LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None - ExtraProjectInfo = None Stamp = None } diff --git a/vsintegration/tests/UnitTests/LanguageDebugInfoServiceTests.fs b/vsintegration/tests/UnitTests/LanguageDebugInfoServiceTests.fs index 189f0d05027..6c2968a16ca 100644 --- a/vsintegration/tests/UnitTests/LanguageDebugInfoServiceTests.fs +++ b/vsintegration/tests/UnitTests/LanguageDebugInfoServiceTests.fs @@ -6,16 +6,12 @@ open System.Threading open NUnit.Framework -open Microsoft.CodeAnalysis.Classification -open Microsoft.CodeAnalysis.Editor open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis open Microsoft.VisualStudio.FSharp.Editor -open Microsoft.VisualStudio.FSharp.LanguageService -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Range +open FSharp.Compiler.Text [][] type LanguageDebugInfoServiceTests() = diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Completion.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Completion.fs index 2ae86637bc1..118339a2d82 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Completion.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Completion.fs @@ -346,22 +346,22 @@ a. [ [ "type A() =" - " member __.X = ()" + " member _.X = ()" " member this." ] [ "type A() =" - " member __.X = ()" + " member _.X = ()" " member private this." ] [ "type A() =" - " member __.X = ()" + " member _.X = ()" " member public this." ] [ "type A() =" - " member __.X = ()" + " member _.X = ()" " member internal this." ] @@ -519,10 +519,10 @@ a. [ "type Foo = Foo" " with" - " member __.Bar = 1" - " member __.PublicMethodForIntellisense() = 2" - " member internal __.InternalMethod() = 3" - " member private __.PrivateProperty = 4" + " member _.Bar = 1" + " member _.PublicMethodForIntellisense() = 2" + " member internal _.InternalMethod() = 3" + " member private _.PrivateProperty = 4" "" "let u: Unit =" " [ Foo ]" @@ -3864,7 +3864,7 @@ let x = query { for bbbb in abbbbc(*D0*) do [ @" type C() = let someValue = ""abc"" - member __.M() = + member _.M() = let x = 1 match someValue. with let x = 1 @@ -4526,7 +4526,8 @@ let x = query { for bbbb in abbbbc(*D0*) do // Save file2 ReplaceFileInMemory file2 [""] - SaveFileToDisk file2 + SaveFileToDisk file2 + let file3 = OpenFile(project,"File3.fs") TakeCoffeeBreak(this.VS) gpatcc.AssertExactly(notAA[file2; file3], notAA[file2;file3]) @@ -5124,6 +5125,7 @@ let x = query { for bbbb in abbbbc(*D0*) do Assert.IsTrue(completions.Length>0) [] + [] member this.``BadCompletionAfterQuicklyTyping.Bug72561``() = let code = [ " " ] let (_, _, file) = this.CreateSingleFileProject(code) @@ -5546,8 +5548,8 @@ let x = query { for bbbb in abbbbc(*D0*) do this.VerifyDotCompListContainAllAtStartOfMarker( fileContents = """ type T() = - member __.P with get() = new T() - member __.M() = [|1..2|] + member _.P with get() = new T() + member _.M() = [|1..2|] let t = new T() t.P.M()(*marker*) """, marker = "(*marker*)", @@ -5558,7 +5560,7 @@ let x = query { for bbbb in abbbbc(*D0*) do this.VerifyDotCompListContainAllAtStartOfMarker( fileContents = """ type T() = - member __.M() = [|1..2|] + member _.M() = [|1..2|] type R = { P : T } @@ -7148,7 +7150,6 @@ let rec f l = let (_, _, file) = this.CreateSingleFileProject(code) TakeCoffeeBreak(this.VS) - let gpatcc = GlobalParseAndTypeCheckCounter.StartNew(this.VS) // In this case, we quickly type "." and then get dot-completions // For "level <- Module" this shows completions from the "Module" (e.g. "Module.Other") @@ -7161,7 +7162,6 @@ let rec f l = let completions = AutoCompleteAtCursor file AssertCompListContainsAll(completions, ["Length"]) AssertCompListDoesNotContainAny(completions, ["AbstractClassAttribute"]) - gpatcc.AssertExactly(0,0) [] member this.``SelfParameter.InDoKeywordScope``() = diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.ErrorList.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.ErrorList.fs index 25068fc33d6..aff227acd96 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.ErrorList.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.ErrorList.fs @@ -17,7 +17,7 @@ open UnitTests.TestLib.ProjectSystem type public AssemblyResolverTestFixture () = [] - member public __.Init () = AssemblyResolver.addResolver () + member public _.Init () = AssemblyResolver.addResolver () [] [] diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.General.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.General.fs index 7bf26561c21..b5a3aeaee1b 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.General.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.General.fs @@ -8,7 +8,10 @@ open System.IO open System.Reflection open System.Runtime.InteropServices open FSharp.Compiler -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Syntax +open FSharp.Compiler.Tokenization open Microsoft.VisualStudio.FSharp.LanguageService open Salsa.Salsa open Salsa @@ -262,7 +265,7 @@ type UsingMSBuild() = [ "type C() = " " member this.F() = ()" " interface System.IComparable with " - " member __.CompareTo(v:obj) = 1" ] + " member _.CompareTo(v:obj) = 1" ] ) [] diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.GotoDefinition.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.GotoDefinition.fs index 95b52add9ea..2e398ab682e 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.GotoDefinition.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.GotoDefinition.fs @@ -13,6 +13,8 @@ open System.Collections.Generic open System.Text.RegularExpressions open UnitTests.TestLib.LanguageService open UnitTests.TestLib.ProjectSystem +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices [] [] @@ -1343,7 +1345,7 @@ type UsingMSBuild() = member this.GetCompleteIdTest tolerate (s : string)(exp : string option) : unit = let n = s.IndexOf '$' let s = s.Remove (n, 1) - match (FSharp.Compiler.QuickParse.GetCompleteIdentifierIsland tolerate s n, exp) with + match (QuickParse.GetCompleteIdentifierIsland tolerate s n, exp) with | (Some (s1, _, _), Some s2) -> printfn "%s" "Received result, as expected." Assert.AreEqual (s1, s2) diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.ParameterInfo.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.ParameterInfo.fs index 5b05e438935..2ff85f4b0b3 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.ParameterInfo.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.ParameterInfo.fs @@ -903,7 +903,7 @@ type UsingMSBuild() = let info = info.Value AssertEqual("f1", info.GetName(0)) // note about (5,0): service.fs adds three lines of empty text to the end of every file, so it reports the location of 'end of file' as first the char, 3 lines past the last line of the file - AssertEqual([|(2,10);(2,12);(2,13);(3,0)|], info.GetNoteworthyParamInfoLocations()) + AssertEqual([|(2,10);(2,12);(2,13);(3,0)|], info.GetParameterLocations()) [] [] @@ -926,7 +926,7 @@ type UsingMSBuild() = let info = info.Value AssertEqual("Foo", info.GetName(0)) // note about (4,0): service.fs adds three lines of empty text to the end of every file, so it reports the location of 'end of file' as first the char, 3 lines past the last line of the file - AssertEqual([|(1,14);(1,17);(1,18);(2,0)|], info.GetNoteworthyParamInfoLocations()) + AssertEqual([|(1,14);(1,17);(1,18);(2,0)|], info.GetParameterLocations()) (* @@ -953,7 +953,7 @@ We really need to rewrite some code paths here to use the real parse tree rather let info = GetParameterInfoAtCursor file // this will fall back to using the name environment, which is stale, but sufficient to look up the call to 'f1' AssertEqual("Foo", info.GetName(0)) // note about (4,0): service.fs adds three lines of empty text to the end of every file, so it reports the location of 'end of file' as first the char, 3 lines past the last line of the file - AssertEqual([|(1,14);(1,21);(1,21);(4,0)|], info.GetNoteworthyParamInfoLocations()) + AssertEqual([|(1,14);(1,21);(1,21);(4,0)|], info.GetParameterLocations()) *) [] @@ -1003,7 +1003,7 @@ We really need to rewrite some code paths here to use the real parse tree rather let info = GetParameterInfoAtCursor file Assert.IsTrue(info.IsSome, "expected parameter info") let info = info.Value - AssertEqual(expectedLocs, info.GetNoteworthyParamInfoLocations()) + AssertEqual(expectedLocs, info.GetParameterLocations()) // These pin down known failing cases member public this.TestNoParameterInfo (testLine, ?additionalReferenceAssemblies) = @@ -1153,7 +1153,7 @@ We really need to rewrite some code paths here to use the real parse tree rather [] member public this.``LocationOfParams.InsideObjectExpression``() = this.TestParameterInfoLocationOfParams(""" - let _ = { new ^System.Object^(^$^) with member __.GetHashCode() = 2}""") + let _ = { new ^System.Object^(^$^) with member _.GetHashCode() = 2}""") [] member public this.``LocationOfParams.Nested1``() = @@ -1653,7 +1653,7 @@ We really need to rewrite some code paths here to use the real parse tree rather [] member public this.``Multi.Constructor.WithinObjectExpression``() = - let fileContents = "let _ = { new System.Object((*Mark*)) with member __.GetHashCode() = 2}" + let fileContents = "let _ = { new System.Object((*Mark*)) with member _.GetHashCode() = 2}" this.VerifyParameterInfoContainedAtStartOfMarker(fileContents,"(*Mark*)",[]) [] diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.QuickInfo.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.QuickInfo.fs index 200db7b2727..d501e84ce83 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.QuickInfo.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.QuickInfo.fs @@ -352,6 +352,7 @@ Full name: Microsoft.FSharp.Control.Async""".TrimStart().Replace("\r\n", "\n") [] [] [] + [] //This is to test when the message is null in the TypeProviderXmlDocAttribute for TypeProvider Type member public this.``TypeProvider.XmlDocAttribute.Type.WithNullComment``() = @@ -359,12 +360,13 @@ Full name: Microsoft.FSharp.Control.Async""".TrimStart().Replace("\r\n", "\n") let a = typeof """ this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "T(*Marker*)", - "type T =\n new : unit -> T\n static member M : unit -> int []\n static member StaticProp : decimal\n event Event1 : EventHandler", + "type T =\n new : unit -> T\n static member M : unit -> int []\n static member StaticProp : decimal\n member Event1 : EventHandler", addtlRefAssy = [PathRelativeToTestAssembly( @"XmlDocAttributeWithNullComment.dll")]) [] [] [] + [] //This is to test when there is empty message from the TypeProviderXmlDocAttribute for TypeProvider Type member public this.``TypeProvider.XmlDocAttribute.Type.WithEmptyComment``() = @@ -372,7 +374,7 @@ Full name: Microsoft.FSharp.Control.Async""".TrimStart().Replace("\r\n", "\n") let a = typeof """ this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "T(*Marker*)", - "type T =\n new : unit -> T\n static member M : unit -> int []\n static member StaticProp : decimal\n event Event1 : EventHandler", + "type T =\n new : unit -> T\n static member M : unit -> int []\n static member StaticProp : decimal\n member Event1 : EventHandler", addtlRefAssy = [PathRelativeToTestAssembly( @"XmlDocAttributeWithEmptyComment.dll")]) @@ -509,6 +511,7 @@ Full name: Microsoft.FSharp.Control.Async""".TrimStart().Replace("\r\n", "\n") [] [] [] + [] //This is to test when the message is null in the TypeProviderXmlDocAttribute for TypeProvider Event member public this.``TypeProvider.XmlDocAttribute.Event.WithNullComment``() = @@ -517,12 +520,13 @@ Full name: Microsoft.FSharp.Control.Async""".TrimStart().Replace("\r\n", "\n") t.Event1(*Marker*)""" this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "Event1(*Marker*)", - "event N.T.Event1: IEvent", + "member N.T.Event1: IEvent", addtlRefAssy = [PathRelativeToTestAssembly( @"XmlDocAttributeWithNullComment.dll")]) [] [] [] + [] //This is to test when there is empty message from the TypeProviderXmlDocAttribute for TypeProvider Event member public this.``TypeProvider.XmlDocAttribute.Event.WithEmptyComment``() = @@ -531,7 +535,7 @@ Full name: Microsoft.FSharp.Control.Async""".TrimStart().Replace("\r\n", "\n") t.Event1(*Marker*)""" this.AssertQuickInfoContainsAtStartOfMarker (fileContents, "Event1(*Marker*)", - "event N.T.Event1: IEvent", + "member N.T.Event1: IEvent", addtlRefAssy = [PathRelativeToTestAssembly( @"XmlDocAttributeWithEmptyComment.dll")]) @@ -1034,6 +1038,7 @@ let f (tp:ITypeProvider(*$$$*)) = tp.Invalidate "Generic.LinkedList" "System.Collections.ICollection.ISynchronized" // Bug 5092: A framework class contained a private method impl [] + [] member public this.``Regression.ModulesFromExternalLibrariesBug5785``() = use _guard = this.UsingNewVS() let solution = this.CreateSolution() @@ -1944,8 +1949,7 @@ let f (tp:ITypeProvider(*$$$*)) = tp.Invalidate [ "type KeyCollection<"; "member CopyTo"; - "[Filename:"; "mscorlib.dll]"; - "[Signature:T:System.Collections.Generic.Dictionary`2.KeyCollection]" + """Represents the collection of keys in a . This class cannot be inherited.""" ] ) @@ -1964,8 +1968,7 @@ let f (tp:ITypeProvider(*$$$*)) = tp.Invalidate [ "type ArgumentException"; "member Message"; - "[Filename"; "mscorlib.dll]"; - "[Signature:T:System.ArgumentException]" + "The exception that is thrown when one of the arguments provided to a method is not valid.Gets the current application domain for the current .""" ] ) @@ -2047,8 +2049,7 @@ query." "AcceptButton", (* expect to see in order... *) [ - "[Filename:"; "System.Windows.Forms.dll]" - "[Signature:P:System.Windows.Forms.Form.AcceptButton]" + "Gets or sets the button on the form that is clicked when the user presses the ENTER key." ] ) @@ -2879,7 +2880,7 @@ query." this.AssertQuickInfoContainsAtStartOfMarker (fileContent, "(*Marker0*)", "Test for members") this.AssertQuickInfoContainsAtStartOfMarker (fileContent, "(*Marker1*)", "x1 param!") - this.AssertQuickInfoContainsAtStartOfMarker (fileContent, "(*Marker2*)", "[ParamName: arg1]") + this.AssertQuickInfoContainsAtStartOfMarker (fileContent, "(*Marker2*)", "Concatenates the string representations of two specified objects.") this.AssertQuickInfoContainsAtStartOfMarker (fileContent, "(*Marker3*)", "str of case1") this.AssertQuickInfoContainsAtStartOfMarker (fileContent, "(*Marker4*)", "str of case1") this.AssertQuickInfoContainsAtStartOfMarker (fileContent, "(*Marker5*)", "value param") @@ -3243,7 +3244,7 @@ query." }""" this.AssertQuickInfoInQuery (fileContent, "(*Mark*)", "custom operation: minBy ('Value)") - [] + [] [] // QuickInfo works in a large query (using many operators) member public this.``Query.WithinLargeQuery``() = @@ -3365,19 +3366,19 @@ query." open Microsoft.FSharp.Quotations type EventBuilder() = - member __.For(ev:IObservable<'T>, loop:('T -> #IObservable<'U>)) : IObservable<'U> = failwith "" - member __.Yield(v:'T) : IObservable<'T> = failwith "" - member __.Quote(v:Quotations.Expr<'T>) : Expr<'T> = v - member __.Run(x:Expr<'T>) = Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.EvaluateQuotation x :?> 'T + member _.For(ev:IObservable<'T>, loop:('T -> #IObservable<'U>)) : IObservable<'U> = failwith "" + member _.Yield(v:'T) : IObservable<'T> = failwith "" + member _.Quote(v:Quotations.Expr<'T>) : Expr<'T> = v + member _.Run(x:Expr<'T>) = Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter.EvaluateQuotation x :?> 'T [] - member __.Where (x, [] f) = Observable.filter f x + member _.Where (x, [] f) = Observable.filter f x [] - member __.Select (x, [] f) = Observable.map f x + member _.Select (x, [] f) = Observable.map f x [] - member inline __.ScanSumBy (source, [] f : 'T -> 'U) : IObservable<'U> = Observable.scan (fun a b -> a + f b) LanguagePrimitives.GenericZero<'U> source + member inline _.ScanSumBy (source, [] f : 'T -> 'U) : IObservable<'U> = Observable.scan (fun a b -> a + f b) LanguagePrimitives.GenericZero<'U> source let myquery = EventBuilder() let f = new Event() diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.QuickParse.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.QuickParse.fs index 36fe51370d0..4f2297a74e4 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.QuickParse.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.QuickParse.fs @@ -4,7 +4,7 @@ namespace Tests.LanguageService open System open NUnit.Framework -open FSharp.Compiler +open FSharp.Compiler.EditorServices [] [] diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Script.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Script.fs index ec5f5f29188..ea2d28ad606 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Script.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.Script.fs @@ -907,9 +907,7 @@ type UsingMSBuild() as this = let (project, file) = createSingleFileFsxFromLines code MoveCursorToEndOfMarker(file, "System.ConsoleModifiers.Sh") let tooltip = GetQuickInfoAtCursor file - AssertContains(tooltip, @"[Signature:F:System.ConsoleModifiers.Shift]") // A message from the mock IDocumentationBuilder - AssertContains(tooltip, @"[Filename:") - AssertContains(tooltip, @"mscorlib.dll]") // The assembly we expect the documentation to get taken from + AssertContains(tooltip, @"The left or right SHIFT modifier key.") MoveCursorToEndOfMarker(file, "(3).ToString().Len") let tooltip = GetQuickInfoAtCursor file @@ -1345,8 +1343,8 @@ type UsingMSBuild() as this = %s\\FSharp.Compiler.Interactive.Settings.dll - - %s\\FSharp.Compiler.Private.dll + + %s\\FSharp.Compiler.Service.dll " binariesFolder binariesFolder) @@ -1660,10 +1658,10 @@ type UsingMSBuild() as this = Assert.IsTrue((countInvaldiationHandlersAdded() = countInvaldiationHandlersRemoved()), "Check6b2, at end, all invalidation handlers removed after explicit cleraring") checkConfigsDisposed() - [] + [] member public this.``TypeProvider.Disposal.SmokeTest1``() = this.TypeProviderDisposalSmokeTest(true) - [] + [] member public this.``TypeProvider.Disposal.SmokeTest2``() = this.TypeProviderDisposalSmokeTest(false) diff --git a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.TimeStamp.fs b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.TimeStamp.fs index 4fdf86bca8d..f3f72deacf8 100644 --- a/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.TimeStamp.fs +++ b/vsintegration/tests/UnitTests/LegacyLanguageService/Tests.LanguageService.TimeStamp.fs @@ -46,6 +46,7 @@ type UsingMSBuild() = // In this bug, if you clean the dependent project, the dependee started getting errors again about the unresolved assembly. // The desired behavior is like C#, which is if the assembly disappears from disk, we use cached results of last time it was there. [] + [] member public this.``Regression.NoError.Timestamps.Bug3368b``() = use _guard = this.UsingNewVS() let solution = this.CreateSolution() diff --git a/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.Configs.fs b/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.Configs.fs index ff06f80bac6..74a0178e312 100644 --- a/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.Configs.fs +++ b/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.Configs.fs @@ -27,7 +27,7 @@ open UnitTests.TestLib.ProjectSystem type public AssemblyResolverTestFixture () = [] - member public __.Init () = AssemblyResolver.addResolver () + member public _.Init () = AssemblyResolver.addResolver () [][] type Config() = diff --git a/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.Miscellaneous.fs b/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.Miscellaneous.fs index 1f5dfff2054..b390100ded5 100644 --- a/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.Miscellaneous.fs +++ b/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.Miscellaneous.fs @@ -266,8 +266,7 @@ type Miscellaneous() = this.MSBuildProjectBoilerplate "Library", (fun project ccn projFileName -> let fooPath = Path.Combine(project.ProjectFolder, "foo.fs") - File.AppendAllText(fooPath, "#light") - File.AppendAllText(fooPath, "module Foo") + File.AppendAllLines(fooPath, ["#light"; "module Foo"]) //ccn((project :> IVsHierarchy), "Debug|Any CPU") let configName = "Debug" @@ -278,6 +277,7 @@ type Miscellaneous() = let buildableCfg = vsBuildableCfg :?> BuildableProjectConfig AssertEqual VSConstants.S_OK hr + let mutable isCleaning = false let success = ref false use event = new System.Threading.ManualResetEvent(false) let (hr, cookie) = @@ -286,6 +286,8 @@ type Miscellaneous() = member this.BuildBegin pfContinue = pfContinue <- 1; VSConstants.S_OK member this.BuildEnd fSuccess = success := fSuccess <> 0 + printfn "Build %s, code %i, phase: %s." (if !success then "succeeded" else "failed") fSuccess (if isCleaning then "Cleaning" else "Build") + event.Set() |> Assert.IsTrue VSConstants.S_OK member this.Tick pfContinue = pfContinue <- 1; VSConstants.S_OK @@ -301,14 +303,19 @@ type Miscellaneous() = buildableCfg.Build(0u, output, target) event.WaitOne() |> Assert.IsTrue buildMgrAccessor.EndDesignTimeBuild() |> ValidateOK // this is not a design-time build, but our mock does all the right initialization of the build manager for us, similar to what the system would do in VS for real - AssertEqual true !success - printfn "building..." - doBuild "Build" + AssertEqual true !success + + printfn "Building..." + doBuild "Build" AssertEqual true (File.Exists (Path.Combine(project.ProjectFolder, "bin\\Debug\\Blah.dll"))) + printfn "Output files present." - printfn "cleaning..." + isCleaning <- true + printfn "Cleaning..." doBuild "Clean" + printfn "Finished build-then-clean." AssertEqual false (File.Exists (Path.Combine(project.ProjectFolder, "bin\\Debug\\Blah.dll"))) + printfn "Files were cleaned." finally buildableCfg.UnadviseBuildStatusCallback(cookie) |> AssertEqual VSConstants.S_OK )) diff --git a/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.UpToDate.fs b/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.UpToDate.fs index 41b596fcfac..a8775d777a0 100644 --- a/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.UpToDate.fs +++ b/vsintegration/tests/UnitTests/LegacyProjectSystem/Tests.ProjectSystem.UpToDate.fs @@ -29,7 +29,7 @@ type UpToDate() = inherit TheTests() [] - member public __.Init () = AssemblyResolver.addResolver () + member public _.Init () = AssemblyResolver.addResolver () [] member public this.ItemInputs () = diff --git a/vsintegration/tests/UnitTests/ProjectOptionsBuilder.fs b/vsintegration/tests/UnitTests/ProjectOptionsBuilder.fs index 106b7602a56..847adf617b2 100644 --- a/vsintegration/tests/UnitTests/ProjectOptionsBuilder.fs +++ b/vsintegration/tests/UnitTests/ProjectOptionsBuilder.fs @@ -3,7 +3,7 @@ open System open System.IO open System.Xml.Linq -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis module FileSystemHelpers = let safeDeleteFile (path: string) = @@ -81,7 +81,6 @@ module internal ProjectOptionsBuilder = LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None - ExtraProjectInfo = None Stamp = None } { @@ -125,7 +124,7 @@ module internal ProjectOptionsBuilder = let otherOptions = Array.append projectOptions.Options.OtherOptions binaryRefs { projectOptions with Options = { projectOptions.Options with - ReferencedProjects = referenceList + ReferencedProjects = referenceList |> Array.map FSharpReferencedProject.CreateFSharp OtherOptions = otherOptions } }) diff --git a/vsintegration/tests/UnitTests/QuickInfoProviderTests.fs b/vsintegration/tests/UnitTests/QuickInfoProviderTests.fs index e412029cf26..8c4eabc9b66 100644 --- a/vsintegration/tests/UnitTests/QuickInfoProviderTests.fs +++ b/vsintegration/tests/UnitTests/QuickInfoProviderTests.fs @@ -14,12 +14,12 @@ // and capturing large amounts of structured output. (* cd Debug\net40\bin - .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Private.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\CompletionProviderTests.fs + .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Service.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\CompletionProviderTests.fs .\VisualFSharp.UnitTests.exe *) // Technique 3: // -// Use F# Interactive. This only works for FSharp.Compiler.Private.dll which has a public API +// Use F# Interactive. This only works for FSharp.Compiler.Service.dll which has a public API // // ------------------------------------------------------------------------------------------------------------------------ @@ -74,7 +74,7 @@ let private getQuickInfoText (FSharpToolTipText elements) : string = let remarksText = (match remarks with [] -> "" | _ -> "\n" + String.concat "\n" remarks) text + remarksText + tpText | FSharpToolTipElement.CompositionError(error) -> error - elements |> List.map (Tooltips.ToFSharpToolTipElement >> parseElement) |> String.concat "\n" |> normalizeLineEnds + elements |> List.map (FSharpToolTip.ToFSharpToolTipElement >> parseElement) |> String.concat "\n" |> normalizeLineEnds [] let ShouldShowQuickInfoAtCorrectPositions() = diff --git a/vsintegration/tests/UnitTests/QuickInfoTests.fs b/vsintegration/tests/UnitTests/QuickInfoTests.fs index 415079942e7..b53905f57df 100644 --- a/vsintegration/tests/UnitTests/QuickInfoTests.fs +++ b/vsintegration/tests/UnitTests/QuickInfoTests.fs @@ -1,7 +1,7 @@ namespace Microsoft.VisualStudio.FSharp.Editor.Tests.Roslyn open System.IO -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis open Microsoft.CodeAnalysis open Microsoft.CodeAnalysis.Text open Microsoft.VisualStudio.FSharp.Editor @@ -15,9 +15,8 @@ module QuickInfo = let internal GetQuickInfo (project:FSharpProject) (fileName:string) (caretPosition:int) = async { let code = File.ReadAllText(fileName) - let sourceText = SourceText.From(code) - let documentId = DocumentId.CreateNewId(ProjectId.CreateNewId()) // only used for caching purposes - return! FSharpAsyncQuickInfoSource.ProvideQuickInfo(checker, documentId, sourceText, fileName, caretPosition, FSharpParsingOptions.Default, project.Options, 0, LanguageServicePerformanceOptions.Default) + let document, _ = RoslynTestHelpers.CreateDocument(fileName, code) + return! FSharpAsyncQuickInfoSource.ProvideQuickInfo(document, caretPosition) } |> Async.RunSynchronously let GetQuickInfoText (project:FSharpProject) (fileName:string) (caretPosition:int) = @@ -26,8 +25,8 @@ let GetQuickInfoText (project:FSharpProject) (fileName:string) (caretPosition:in | Some (quickInfo) -> let documentationBuilder = { new IDocumentationBuilder with - override __.AppendDocumentationFromProcessedXML(_, _, _, _, _, _) = () - override __.AppendDocumentation(_, _, _, _, _, _, _) = () + override _.AppendDocumentationFromProcessedXML(_, _, _, _, _, _) = () + override _.AppendDocumentation(_, _, _, _, _, _, _) = () } let mainDescription, docs = FSharpAsyncQuickInfoSource.BuildSingleQuickInfoItem documentationBuilder quickInfo let mainTextItems = diff --git a/vsintegration/tests/UnitTests/RoslynSourceTextTests.fs b/vsintegration/tests/UnitTests/RoslynSourceTextTests.fs index 9a817df9771..54a92f3cd0b 100644 --- a/vsintegration/tests/UnitTests/RoslynSourceTextTests.fs +++ b/vsintegration/tests/UnitTests/RoslynSourceTextTests.fs @@ -6,7 +6,7 @@ open System open NUnit.Framework open Microsoft.VisualStudio.FSharp.Editor -open FSharp.Compiler.Text +open FSharp.Compiler.CodeAnalysis open Microsoft.CodeAnalysis.Text [] diff --git a/vsintegration/tests/UnitTests/SemanticColorizationServiceTests.fs b/vsintegration/tests/UnitTests/SemanticColorizationServiceTests.fs index e1591ed0cb1..78d0732493b 100644 --- a/vsintegration/tests/UnitTests/SemanticColorizationServiceTests.fs +++ b/vsintegration/tests/UnitTests/SemanticColorizationServiceTests.fs @@ -4,8 +4,9 @@ namespace Microsoft.VisualStudio.FSharp.Editor.Tests.Roslyn open System open NUnit.Framework open Microsoft.VisualStudio.FSharp.Editor -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Text open Microsoft.CodeAnalysis.Text open Microsoft.CodeAnalysis.Classification @@ -24,17 +25,16 @@ type SemanticClassificationServiceTests() = LoadTime = DateTime.MaxValue UnresolvedReferences = None OriginalLoadReferences = [] - ExtraProjectInfo = None Stamp = None } let checker = FSharpChecker.Create() let perfOptions = { LanguageServicePerformanceOptions.Default with AllowStaleCompletionResults = false } - let getRanges (source: string) : struct (Range.range * SemanticClassificationType) list = + let getRanges (source: string) : SemanticClassificationItem list = asyncMaybe { - - let! _, _, checkFileResults = checker.ParseAndCheckDocument(filePath, 0, SourceText.From(source), projectOptions, perfOptions, "") + let document, _ = RoslynTestHelpers.CreateDocument(filePath, source) + let! _, checkFileResults = document.GetFSharpParseAndCheckResultsAsync("SemanticClassificationServiceTests") |> liftAsync return checkFileResults.GetSemanticClassification(None) } |> Async.RunSynchronously @@ -45,17 +45,17 @@ type SemanticClassificationServiceTests() = let text = SourceText.From(fileContents) let ranges = getRanges fileContents let line = text.Lines.GetLinePosition (fileContents.IndexOf(marker) + marker.Length - 1) - let markerPos = Range.mkPos (Range.Line.fromZ line.Line) (line.Character + marker.Length - 1) - match ranges |> List.tryFind (fun struct (range, _) -> Range.rangeContainsPos range markerPos) with + let markerPos = Position.mkPos (Line.fromZ line.Line) (line.Character + marker.Length - 1) + match ranges |> List.tryFind (fun item -> Range.rangeContainsPos item.Range markerPos) with | None -> Assert.Fail("Cannot find colorization data for end of marker") - | Some(_, ty) -> Assert.AreEqual(classificationType, FSharpClassificationTypes.getClassificationTypeName ty, "Classification data doesn't match for end of marker") + | Some item -> Assert.AreEqual(classificationType, FSharpClassificationTypes.getClassificationTypeName item.Type, "Classification data doesn't match for end of marker") let verifyNoClassificationDataAtEndOfMarker(fileContents: string, marker: string, classificationType: string) = let text = SourceText.From(fileContents) let ranges = getRanges fileContents let line = text.Lines.GetLinePosition (fileContents.IndexOf(marker) + marker.Length - 1) - let markerPos = Range.mkPos (Range.Line.fromZ line.Line) (line.Character + marker.Length - 1) - let anyData = ranges |> List.exists (fun struct (range, sct) -> Range.rangeContainsPos range markerPos && ((FSharpClassificationTypes.getClassificationTypeName sct) = classificationType)) + let markerPos = Position.mkPos (Line.fromZ line.Line) (line.Character + marker.Length - 1) + let anyData = ranges |> List.exists (fun item -> Range.rangeContainsPos item.Range markerPos && ((FSharpClassificationTypes.getClassificationTypeName item.Type) = classificationType)) Assert.False(anyData, "Classification data was found when it wasn't expected.") [] @@ -65,7 +65,7 @@ type SemanticClassificationServiceTests() = [] [] [] - member __.Measured_Types(marker: string, classificationType: string) = + member _.Measured_Types(marker: string, classificationType: string) = verifyClassificationAtEndOfMarker( """#light (*Light*) open System @@ -99,7 +99,7 @@ type SemanticClassificationServiceTests() = [] [] [] - member __.MutableValues(marker: string, classificationType: string) = + member _.MutableValues(marker: string, classificationType: string) = let sourceText =""" type R1 = { mutable (*1*)Doop: int} let r1 = { (*2*)Doop = 12 } @@ -123,6 +123,30 @@ r.MutableField := 3 """ verifyClassificationAtEndOfMarker(sourceText, marker, classificationType) + [] + [] + [] + [] + [] + [] + [] + member _.Disposables(marker: string, classificationType: string) = + let sourceText = """ +open System + +type (*1*)Disposable() = + interface IDisposable with + member _.Dispose() = () + +let (*2*)topLevel1 = new (*3*)Disposable() +let (*4*)topLevel2 = { new IDisposable with member _.Dispose() = () } + +let f() = + let (*5*)local1 = new (*6*)Disposable() + let (*7*)local2 = { new IDisposable with member _.Dispose() = () } + () +""" + verifyClassificationAtEndOfMarker(sourceText, marker, classificationType) [] [] @@ -130,7 +154,7 @@ r.MutableField := 3 [] [] [] - member __.NoInrefsExpected(marker: string, classificationType: string) = + member _.NoInrefsExpected(marker: string, classificationType: string) = let sourceText = """ let f (item: (*1*)inref) = printfn "%d" (*2*)item let g() = diff --git a/vsintegration/tests/UnitTests/SignatureHelpProviderTests.fs b/vsintegration/tests/UnitTests/SignatureHelpProviderTests.fs index 02252928b39..77b8038e98c 100644 --- a/vsintegration/tests/UnitTests/SignatureHelpProviderTests.fs +++ b/vsintegration/tests/UnitTests/SignatureHelpProviderTests.fs @@ -1,37 +1,22 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -// -// To run the tests in this file: -// -// Technique 1: Compile VisualFSharp.UnitTests.dll and run it as a set of unit tests -// -// Technique 2: -// -// Enable some tests in the #if EXE section at the end of the file, -// then compile this file as an EXE that has InternalsVisibleTo access into the -// appropriate DLLs. This can be the quickest way to get turnaround on updating the tests -// and capturing large amounts of structured output. -(* - cd Debug\net40\bin - .\fsc.exe --define:EXE -r:.\Microsoft.Build.Utilities.Core.dll -o VisualFSharp.UnitTests.exe -g --optimize- -r .\FSharp.Compiler.Private.dll -r .\FSharp.Editor.dll -r nunit.framework.dll ..\..\..\tests\service\FsUnit.fs ..\..\..\tests\service\Common.fs /delaysign /keyfile:..\..\..\src\fsharp\msft.pubkey ..\..\..\vsintegration\tests\UnitTests\SignatureHelpProviderTests.fs - .\VisualFSharp.UnitTests.exe -*) -// Technique 3: -// -// Use F# Interactive. This only works for FSharp.Compiler.Private.dll which has a public API [] module Microsoft.VisualStudio.FSharp.Editor.Tests.Roslyn.SignatureHelpProvider open System open System.IO -open System.Text + open NUnit.Framework -open Microsoft.CodeAnalysis.Text -open VisualFSharp.UnitTests.Roslyn + open Microsoft.VisualStudio.FSharp.Editor -open FSharp.Compiler.SourceCodeServices + +open VisualFSharp.UnitTests.Roslyn + open UnitTests.TestLib.LanguageService -open FSharp.Compiler.Range + +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Text + open Microsoft.CodeAnalysis +open Microsoft.CodeAnalysis.Text let filePath = "C:\\test.fs" @@ -48,7 +33,6 @@ let internal projectOptions = { LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None - ExtraProjectInfo = None Stamp = None } @@ -69,16 +53,13 @@ let GetSignatureHelp (project:FSharpProject) (fileName:string) (caretPosition:in let textLines = sourceText.Lines let caretLinePos = textLines.GetLinePosition(caretPosition) let caretLineColumn = caretLinePos.Character - let perfOptions = LanguageServicePerformanceOptions.Default - let textVersionHash = 1 - let parseResults, _, checkFileResults = - let x = - checker.ParseAndCheckDocument(fileName, textVersionHash, sourceText, project.Options, perfOptions, "TestSignatureHelpProvider") - |> Async.RunSynchronously - x.Value + let document = RoslynTestHelpers.CreateDocument(fileName, sourceText, options = project.Options) + let parseResults, checkFileResults = + document.GetFSharpParseAndCheckResultsAsync("GetSignatureHelp") + |> Async.RunSynchronously - let paramInfoLocations = parseResults.FindNoteworthyParamInfoLocations(Pos.fromZ caretLinePos.Line caretLineColumn).Value + let paramInfoLocations = parseResults.FindParameterLocations(Position.fromZ caretLinePos.Line caretLineColumn).Value let triggered = FSharpSignatureHelpProvider.ProvideMethodsAsyncAux( caretLinePos, @@ -112,34 +93,236 @@ let GetCompletionTypeNamesFromXmlString (xml:string) = use project = CreateProject xml GetCompletionTypeNamesFromCursorPosition project -[] -let ShouldGiveSignatureHelpAtCorrectMarkers() = - let manyTestCases = - [ (""" +let assertSignatureHelpForMethodCalls (fileContents: string) (marker: string) (expected: (string * int * int * string option) option) = + let caretPosition = fileContents.IndexOf(marker) + marker.Length + let triggerChar = if marker ="," then Some ',' elif marker = "(" then Some '(' elif marker = "<" then Some '<' else None + let sourceText = SourceText.From(fileContents) + let textLines = sourceText.Lines + let caretLinePos = textLines.GetLinePosition(caretPosition) + let caretLineColumn = caretLinePos.Character + + let document = RoslynTestHelpers.CreateDocument(filePath, sourceText, options = projectOptions) + let parseResults, checkFileResults = + document.GetFSharpParseAndCheckResultsAsync("assertSignatureHelpForMethodCalls") + |> Async.RunSynchronously + + let actual = + let paramInfoLocations = parseResults.FindParameterLocations(Position.fromZ caretLinePos.Line caretLineColumn) + match paramInfoLocations with + | None -> None + | Some paramInfoLocations -> + let triggered = + FSharpSignatureHelpProvider.ProvideMethodsAsyncAux( + caretLinePos, + caretLineColumn, + paramInfoLocations, + checkFileResults, + DefaultDocumentationProvider, + sourceText, + caretPosition, + triggerChar) + |> Async.RunSynchronously + + checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() + match triggered with + | None -> None + | Some data -> Some (data.ApplicableSpan.ToString(),data.ArgumentIndex,data.ArgumentCount,data.ArgumentName) + + Assert.AreEqual(expected, actual) + +let assertSignatureHelpForFunctionApplication (fileContents: string) (marker: string) expectedArgumentCount expectedArgumentIndex = + let caretPosition = fileContents.LastIndexOf(marker) + marker.Length + let document, sourceText = RoslynTestHelpers.CreateDocument(filePath, fileContents) + + let parseResults, checkFileResults = + document.GetFSharpParseAndCheckResultsAsync("assertSignatureHelpForFunctionApplication") + |> Async.RunSynchronously + + let adjustedColumnInSource = + let rec loop ch pos = + if Char.IsWhiteSpace(ch) then + loop sourceText.[pos - 1] (pos - 1) + else + pos + loop sourceText.[caretPosition - 1] (caretPosition - 1) + + let sigHelp = + FSharpSignatureHelpProvider.ProvideParametersAsyncAux( + parseResults, + checkFileResults, + document.Id, + [], + DefaultDocumentationProvider, + sourceText, + caretPosition, + adjustedColumnInSource, + filePath) + |> Async.RunSynchronously + + checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() + + match sigHelp with + | None -> Assert.Fail("Expected signature help") + | Some sigHelp -> + Assert.AreEqual(expectedArgumentCount, sigHelp.ArgumentCount) + Assert.AreEqual(expectedArgumentIndex, sigHelp.ArgumentIndex) + +[] +module ``Gives signature help in method calls`` = + + [] + let ``dot``() = + let fileContents = """ //1 System.Console.WriteLine(format="Hello, {0}",arg0="World") -""", - [(".", None); - ("System", None); - ("WriteLine", None); - ("(", Some ("[7..64)", 0, 2, Some "format")); - ("format", Some ("[7..64)", 0, 2, Some "format")); - (",", None); - ("""",""", Some ("[7..64)", 1, 2, Some "arg0")); - ("arg0", Some ("[7..64)", 1, 2, Some "arg0")); - ("arg0=", Some ("[7..64)", 1, 2, Some "arg0")); - ("World", Some ("[7..64)", 1, 2, Some "arg0")); - (")", Some("[7..64)", 0, 2, Some "format"))]); - ( """ +""" + let marker = "." + assertSignatureHelpForMethodCalls fileContents marker None + + [] + let ``System``() = + let fileContents = """ +//1 +System.Console.WriteLine(format="Hello, {0}",arg0="World") +""" + let marker = "System" + assertSignatureHelpForMethodCalls fileContents marker None + + [] + let ``WriteLine``() = + let fileContents = """ +//1 +System.Console.WriteLine(format="Hello, {0}",arg0="World") +""" + let marker = "WriteLine" + assertSignatureHelpForMethodCalls fileContents marker None + + [] + let ``open paren``() = + let fileContents = """ +//1 +System.Console.WriteLine(format="Hello, {0}",arg0="World") +""" + let marker = "(" + assertSignatureHelpForMethodCalls fileContents marker (Some ("[7..64)", 0, 2, Some "format")) + + [] + let ``named arg``() = + let fileContents = """ +//1 +System.Console.WriteLine(format="Hello, {0}",arg0="World") +""" + let marker = "format" + assertSignatureHelpForMethodCalls fileContents marker (Some ("[7..64)", 0, 2, Some "format")) + + [] + let ``comma``() = + let fileContents = """ +//1 +System.Console.WriteLine(format="Hello, {0}",arg0="World") +""" + let marker = "," + assertSignatureHelpForMethodCalls fileContents marker None + + [] + let ``second comma``() = + let fileContents = """ +//1 +System.Console.WriteLine(format="Hello, {0}",arg0="World") +""" + assertSignatureHelpForMethodCalls fileContents """",""" (Some ("[7..64)", 1, 2, Some "arg0")) + + [] + let ``second named arg``() = + let fileContents = """ +//1 +System.Console.WriteLine(format="Hello, {0}",arg0="World") +""" + let marker = "arg0" + assertSignatureHelpForMethodCalls fileContents marker (Some ("[7..64)", 1, 2, Some "arg0")) + + [] + let ``second named arg equals``() = + let fileContents = """ +//1 +System.Console.WriteLine(format="Hello, {0}",arg0="World") +""" + let marker = "arg0=" + assertSignatureHelpForMethodCalls fileContents marker (Some ("[7..64)", 1, 2, Some "arg0")) + + [] + let ``World``() = + let fileContents = """ +//1 +System.Console.WriteLine(format="Hello, {0}",arg0="World") +""" + let marker = "World" + assertSignatureHelpForMethodCalls fileContents marker (Some ("[7..64)", 1, 2, Some "arg0")) + + [] + let ``end paren``() = + let fileContents = """ +//1 +System.Console.WriteLine(format="Hello, {0}",arg0="World") + """ + let marker = ")" + assertSignatureHelpForMethodCalls fileContents marker (Some("[7..64)", 0, 2, Some "format")) + +[] +module ``Signature help with list literals, parens, etc`` = + [] + let ``Open paren``() = + let fileContents = """ //2 open System Console.WriteLine([(1,2)]) -""", - [ - ("WriteLine(", Some ("[20..45)", 0, 0, None)); - (",", None); - ("[(", Some ("[20..45)", 0, 1, None)) - ]); +""" + let marker = "WriteLine(" + assertSignatureHelpForMethodCalls fileContents marker (Some ("[20..45)", 0, 0, None)) + + [] + let ``comma``() = + let fileContents = """ +//2 +open System +Console.WriteLine([(1,2)]) +""" + let marker = "," + assertSignatureHelpForMethodCalls fileContents marker None + + [] + let ``list and tuple bracket pair start``() = + let fileContents = """ +//2 +open System +Console.WriteLine([(1,2)]) +""" + let marker = "[(" + assertSignatureHelpForMethodCalls fileContents marker (Some ("[20..45)", 0, 1, None)) + +[] +module ``Unfinished parentheses`` = + [] + let ``Unfinished parentheses``() = + let fileContents = """ +let _ = System.DateTime( +""" + let marker = "let _ = System.DateTime(" + assertSignatureHelpForMethodCalls fileContents marker (Some ("[10..26)", 0, 0, None)) + + [] + let ``Unfinished parentheses with comma``() = + let fileContents = """ +let _ = System.DateTime(1L, +""" + let marker = "let _ = System.DateTime(1L," + assertSignatureHelpForMethodCalls fileContents marker (Some ("[10..31)", 1, 2, None )) + +[] +let ``type provider static parameter tests``() = + // This is old code and I'm too lazy to move it all out. - Phillip Carter + let manyTestCases = + [ ( """ //3 type foo = N1.T< @@ -187,317 +370,106 @@ type foo5 = N1.T ("type foo5 = N1.T Async.RunSynchronously - - if x.IsNone then - Assert.Fail("Could not parse and check document.") - x.Value - - let actual = - let paramInfoLocations = parseResults.FindNoteworthyParamInfoLocations(Pos.fromZ caretLinePos.Line caretLineColumn) - match paramInfoLocations with - | None -> None - | Some paramInfoLocations -> - let triggered = - FSharpSignatureHelpProvider.ProvideMethodsAsyncAux( - caretLinePos, - caretLineColumn, - paramInfoLocations, - checkFileResults, - DefaultDocumentationProvider, - sourceText, - caretPosition, - triggerChar) - |> Async.RunSynchronously - - checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() - match triggered with - | None -> None - | Some data -> Some (data.ApplicableSpan.ToString(),data.ArgumentIndex,data.ArgumentCount,data.ArgumentName) - - if expected <> actual then - sb.AppendLine(sprintf "FSharpCompletionProvider.ProvideMethodsAsyncAux() gave unexpected results, expected %A, got %A" expected actual) |> ignore - yield (marker, actual) ] - - printfn "(\"\"\"%s\n\"\"\",\n%s)" fileContents ((sprintf "%A" actual).Replace("null","None")) - - - match sb.ToString() with - | "" -> () - | errorText -> Assert.Fail errorText - -[] -let ``single argument function application``() = - let fileContents = """ + for (marker, expected) in testCases do + assertSignatureHelpForMethodCalls fileContents marker expected + +[] +module ``Function argument applications`` = + [] + let ``single argument function application``() = + let fileContents = """ sqrt -""" - let marker = "sqrt " - let caretPosition = fileContents.IndexOf(marker) + marker.Length - let sourceText = SourceText.From(fileContents) - let perfOptions = LanguageServicePerformanceOptions.Default - let textVersionHash = 0 - let documentId = DocumentId.CreateNewId(ProjectId.CreateNewId()) - - let parseResults, _, checkFileResults = - let x = - checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, projectOptions, perfOptions, "TestSignatureHelpProvider") - |> Async.RunSynchronously - - if x.IsNone then - Assert.Fail("Could not parse and check document.") - x.Value - - let sigHelp = - FSharpSignatureHelpProvider.ProvideParametersAsyncAux( - parseResults, - checkFileResults, - documentId, - [], - DefaultDocumentationProvider, - sourceText, - caretPosition, - filePath) - |> Async.RunSynchronously + """ + let marker = "sqrt " + assertSignatureHelpForFunctionApplication fileContents marker 1 0 - checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() - - match sigHelp with - | None -> Assert.Fail("Expected signature help") - | Some sigHelp -> - Assert.AreEqual(1, sigHelp.ArgumentCount) - Assert.AreEqual(0, sigHelp.ArgumentIndex) - -[] -let ``multi-argument function application``() = - let fileContents = """ + [] + let ``multi-argument function application``() = + let fileContents = """ let add2 x y = x + y add2 1 -""" - let marker = "add2 1 " - let caretPosition = fileContents.IndexOf(marker) + marker.Length - let sourceText = SourceText.From(fileContents) - let perfOptions = LanguageServicePerformanceOptions.Default - let textVersionHash = 0 - let documentId = DocumentId.CreateNewId(ProjectId.CreateNewId()) - - let parseResults, _, checkFileResults = - let x = - checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, projectOptions, perfOptions, "TestSignatureHelpProvider") - |> Async.RunSynchronously + """ + let marker = "add2 1 " + assertSignatureHelpForFunctionApplication fileContents marker 2 1 - if x.IsNone then - Assert.Fail("Could not parse and check document.") - x.Value - - let sigHelp = - FSharpSignatureHelpProvider.ProvideParametersAsyncAux( - parseResults, - checkFileResults, - documentId, - [], - DefaultDocumentationProvider, - sourceText, - caretPosition, - filePath) - |> Async.RunSynchronously - - checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() - - match sigHelp with - | None -> Assert.Fail("Expected signature help") - | Some sigHelp -> - Assert.AreEqual(2, sigHelp.ArgumentCount) - Assert.AreEqual(1, sigHelp.ArgumentIndex) - -[] -let ``qualified function application``() = - let fileContents = """ + [] + let ``qualified function application``() = + let fileContents = """ module M = let f x = x M.f -""" - let marker = "M.f " - let caretPosition = fileContents.IndexOf(marker) + marker.Length - let sourceText = SourceText.From(fileContents) - let perfOptions = LanguageServicePerformanceOptions.Default - let textVersionHash = 0 - let documentId = DocumentId.CreateNewId(ProjectId.CreateNewId()) - - let parseResults, _, checkFileResults = - let x = - checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, projectOptions, perfOptions, "TestSignatureHelpProvider") - |> Async.RunSynchronously + """ + let marker = "M.f " + assertSignatureHelpForFunctionApplication fileContents marker 1 0 - if x.IsNone then - Assert.Fail("Could not parse and check document.") - x.Value - - let sigHelp = - FSharpSignatureHelpProvider.ProvideParametersAsyncAux( - parseResults, - checkFileResults, - documentId, - [], - DefaultDocumentationProvider, - sourceText, - caretPosition, - filePath) - |> Async.RunSynchronously - - checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() - - match sigHelp with - | None -> Assert.Fail("Expected signature help") - | Some sigHelp -> - Assert.AreEqual(1, sigHelp.ArgumentCount) - Assert.AreEqual(0, sigHelp.ArgumentIndex) - -[] -let ``function application in single pipeline with no additional args``() = - let fileContents = """ + [] + let ``function application in single pipeline with no additional args``() = + let fileContents = """ [1..10] |> id -""" - let marker = "id " - let caretPosition = fileContents.IndexOf(marker) + marker.Length - let sourceText = SourceText.From(fileContents) - let perfOptions = LanguageServicePerformanceOptions.Default - let textVersionHash = 0 - let documentId = DocumentId.CreateNewId(ProjectId.CreateNewId()) - - let parseResults, _, checkFileResults = - let x = - checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, projectOptions, perfOptions, "TestSignatureHelpProvider") - |> Async.RunSynchronously + """ + let marker = "id " + let caretPosition = fileContents.IndexOf(marker) + marker.Length - if x.IsNone then - Assert.Fail("Could not parse and check document.") - x.Value + let document, sourceText = RoslynTestHelpers.CreateDocument(filePath, fileContents) - let sigHelp = - FSharpSignatureHelpProvider.ProvideParametersAsyncAux( - parseResults, - checkFileResults, - documentId, - [], - DefaultDocumentationProvider, - sourceText, - caretPosition, - filePath) - |> Async.RunSynchronously - - checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() - - Assert.True(sigHelp.IsNone, "No signature help is expected because there are no additional args to apply.") - -[] -let ``function application in single pipeline with an additional argument``() = - let fileContents = """ -[1..10] |> List.map -""" - let marker = "List.map " - let caretPosition = fileContents.IndexOf(marker) + marker.Length - let sourceText = SourceText.From(fileContents) - let perfOptions = LanguageServicePerformanceOptions.Default - let textVersionHash = 0 - let documentId = DocumentId.CreateNewId(ProjectId.CreateNewId()) + let parseResults, checkFileResults = + document.GetFSharpParseAndCheckResultsAsync("function application in single pipeline with no additional args") + |> Async.RunSynchronously - let parseResults, _, checkFileResults = - let x = - checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, projectOptions, perfOptions, "TestSignatureHelpProvider") + let adjustedColumnInSource = + let rec loop ch pos = + if Char.IsWhiteSpace(ch) then + loop sourceText.[pos - 1] (pos - 1) + else + pos + loop sourceText.[caretPosition - 1] (caretPosition - 1) + + let sigHelp = + FSharpSignatureHelpProvider.ProvideParametersAsyncAux( + parseResults, + checkFileResults, + document.Id, + [], + DefaultDocumentationProvider, + sourceText, + caretPosition, + adjustedColumnInSource, + filePath) |> Async.RunSynchronously - if x.IsNone then - Assert.Fail("Could not parse and check document.") - x.Value - - let sigHelp = - FSharpSignatureHelpProvider.ProvideParametersAsyncAux( - parseResults, - checkFileResults, - documentId, - [], - DefaultDocumentationProvider, - sourceText, - caretPosition, - filePath) - |> Async.RunSynchronously + checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() - checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() + Assert.True(sigHelp.IsNone, "No signature help is expected because there are no additional args to apply.") - match sigHelp with - | None -> Assert.Fail("Expected signature help") - | Some sigHelp -> - Assert.AreEqual(1, sigHelp.ArgumentCount) - Assert.AreEqual(0, sigHelp.ArgumentIndex) + [] + let ``function application in single pipeline with an additional argument``() = + let fileContents = """ +[1..10] |> List.map + """ + let marker = "List.map " + assertSignatureHelpForFunctionApplication fileContents marker 1 0 -[] -let ``function application in middle of pipeline with an additional argument``() = - let fileContents = """ + [] + let ``function application in middle of pipeline with an additional argument``() = + let fileContents = """ [1..10] |> List.map |> List.filer (fun x -> x > 3) + """ + let marker = "List.map " + assertSignatureHelpForFunctionApplication fileContents marker 1 0 + + [] + let ``function application with function as parameter``() = + let fileContents = """ +let derp (f: int -> int -> int) x = f x 1 +derp """ - let marker = "List.map " - let caretPosition = fileContents.IndexOf(marker) + marker.Length - let sourceText = SourceText.From(fileContents) - let perfOptions = LanguageServicePerformanceOptions.Default - let textVersionHash = 0 - let documentId = DocumentId.CreateNewId(ProjectId.CreateNewId()) - - let parseResults, _, checkFileResults = - let x = - checker.ParseAndCheckDocument(filePath, textVersionHash, sourceText, projectOptions, perfOptions, "TestSignatureHelpProvider") - |> Async.RunSynchronously - - if x.IsNone then - Assert.Fail("Could not parse and check document.") - x.Value - - let sigHelp = - FSharpSignatureHelpProvider.ProvideParametersAsyncAux( - parseResults, - checkFileResults, - documentId, - [], - DefaultDocumentationProvider, - sourceText, - caretPosition, - filePath) - |> Async.RunSynchronously - - checker.ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients() - - match sigHelp with - | None -> Assert.Fail("Expected signature help") - | Some sigHelp -> - Assert.AreEqual(1, sigHelp.ArgumentCount) - Assert.AreEqual(0, sigHelp.ArgumentIndex) + let marker = "derp " + assertSignatureHelpForFunctionApplication fileContents marker 2 0 // migrated from legacy test [] diff --git a/vsintegration/tests/UnitTests/TestLib.LanguageService.fs b/vsintegration/tests/UnitTests/TestLib.LanguageService.fs index fbd950480f9..c33223c6ff0 100644 --- a/vsintegration/tests/UnitTests/TestLib.LanguageService.fs +++ b/vsintegration/tests/UnitTests/TestLib.LanguageService.fs @@ -12,9 +12,9 @@ open Salsa.VsOpsUtils open Salsa.VsMocks open UnitTests.TestLib.Salsa open UnitTests.TestLib.Utils -open FSharp.Compiler open System.Text.RegularExpressions -open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.Diagnostics open Microsoft.VisualStudio.FSharp #nowarn "52" // The value has been copied to ensure the original is not mutated @@ -159,7 +159,7 @@ type internal GlobalParseAndTypeCheckCounter private(initialParseCount:int, init static member StartNew(vs) = TakeCoffeeBreak(vs) let n = IncrementalBuilderEventTesting.GetCurrentIncrementalBuildEventNum() - new GlobalParseAndTypeCheckCounter(FSharpChecker.GlobalForegroundParseCountStatistic, FSharpChecker.GlobalForegroundTypeCheckCountStatistic, n, vs) + new GlobalParseAndTypeCheckCounter(FSharpChecker.ActualParseFileCount, FSharpChecker.ActualCheckFileCount, n, vs) member private this.GetEvents() = TakeCoffeeBreak(vs) let n = IncrementalBuilderEventTesting.GetCurrentIncrementalBuildEventNum() @@ -422,7 +422,7 @@ type LanguageServiceBaseTests() = failwith "LanguageServiceBaseTests.UsingNewVS was called when 'active' instance of VS is not 'default' one - this may denote that tests contains errors" currentVS <- ops.CreateVisualStudio() { new System.IDisposable with - member __.Dispose() = + member _.Dispose() = if box currentVS = box defaultVS then failwith "At this moment 'current' instance of VS cannot be the same as the 'default' one. This may denote that tests contains errors." GlobalFunctions.Cleanup(currentVS) diff --git a/vsintegration/tests/UnitTests/Tests.Build.fs b/vsintegration/tests/UnitTests/Tests.Build.fs index c011dcfe260..19f4bffd569 100644 --- a/vsintegration/tests/UnitTests/Tests.Build.fs +++ b/vsintegration/tests/UnitTests/Tests.Build.fs @@ -79,7 +79,6 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--codepage:65001" + Environment.NewLine + "--optimize+" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -95,7 +94,6 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("-g" + Environment.NewLine + "--optimize+" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -111,7 +109,6 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--debug:pdbonly" + Environment.NewLine + "--optimize+" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -129,7 +126,6 @@ type Build() = 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 + @@ -145,7 +141,6 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + "--nowarn:52,109" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -160,7 +155,6 @@ type Build() = 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 + @@ -175,7 +169,6 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--warnaserror-:52,109" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -192,7 +185,6 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + "--versionfile:src/version" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -208,7 +200,6 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--doc:foo.xml" + Environment.NewLine + "--optimize+" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -224,7 +215,6 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--sig:foo.fsi" + Environment.NewLine + "--optimize+" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -240,7 +230,6 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--keyfile:key.txt" + Environment.NewLine + "--optimize+" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -256,7 +245,6 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--noframework" + Environment.NewLine + "--optimize+" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -271,7 +259,6 @@ type Build() = 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 + @@ -287,7 +274,6 @@ type Build() = printfn "cmd=\"%s\"" cmd // REVIEW we don't put the default, is that desired? AssertEqual ("--optimize+" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -302,7 +288,6 @@ type Build() = 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 + @@ -320,7 +305,6 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("-o:oUt.dll" + Environment.NewLine + "--optimize+" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -336,7 +320,6 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + "--pdb:out.pdb" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -352,7 +335,6 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + "--platform:x64" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -368,7 +350,6 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + "--platform:x86" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -385,7 +366,6 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + "-r:" + dll + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -402,7 +382,6 @@ type Build() = printfn "cmd=\"%s\"" 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 + @@ -419,7 +398,6 @@ type Build() = printfn "cmd=\"%s\"" 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 + @@ -435,7 +413,6 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + "--resource:Foo.resources" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -452,7 +429,6 @@ type Build() = 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 + @@ -471,7 +447,6 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + "--target:library" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -487,7 +462,6 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + "--target:winexe" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -503,7 +477,6 @@ type Build() = printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + "--target:module" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--highentropyva-" + Environment.NewLine + @@ -517,7 +490,6 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--utf8output" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -532,7 +504,6 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--win32res:foo.res" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -547,7 +518,6 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--win32manifest:foo.manifest" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + @@ -562,7 +532,6 @@ type Build() = 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 + @@ -576,7 +545,6 @@ type Build() = let cmd = tool.InternalGenerateResponseFileCommands() printfn "cmd=\"%s\"" cmd AssertEqual ("--optimize+" + Environment.NewLine + - "--warnaserror:76" + Environment.NewLine + "--fullpaths" + Environment.NewLine + "--flaterrors" + Environment.NewLine + "--subsystemversion:6.02" + Environment.NewLine + @@ -592,7 +560,7 @@ type Build() = tool.DebugType <- "full" tool.DefineConstants <- [| MakeTaskItem "FOO=3" MakeTaskItem "BAR=4" |] - tool.DisabledWarnings <- "52 109" + tool.DisabledWarnings <- "52,109" tool.VersionFile <- "src/version" tool.DocumentationFile <- "foo.xml" tool.GenerateInterfaceFile <- "foo.fsi" @@ -643,7 +611,6 @@ type Build() = "--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 + @@ -687,7 +654,6 @@ type Build() = "--nowarn:52,109" "--warn:4" "--warnaserror" - "--warnaserror:76" "--vserrors" "--utf8output" "--fullpaths" @@ -701,3 +667,29 @@ type Build() = AssertEqual expectedFlags hostObject.Flags let expectedSources = [| "foo.fs"; "C:\\Program Files\\spaces.fs" |] AssertEqual expectedSources hostObject.Sources + + [] + member public this.``DisabledWarnings build property``() = + let tool = new FSharp.Build.Fsc() + tool.DisabledWarnings <- " + + \n52,,\n,,,109,110;\r73 + + , + + ; + 85; + " + let cmd = tool.InternalGenerateResponseFileCommands() + printfn "cmd=\"%s\"" cmd + + let expected = + "--optimize+" + Environment.NewLine + + "--nowarn:52,109,110,73,85" + Environment.NewLine + + "--fullpaths" + Environment.NewLine + + "--flaterrors" + Environment.NewLine + + "--highentropyva-" + Environment.NewLine + + "--nocopyfsharpcore" + + AssertEqual expected cmd + diff --git a/vsintegration/tests/UnitTests/Tests.RoslynHelpers.fs b/vsintegration/tests/UnitTests/Tests.RoslynHelpers.fs new file mode 100644 index 00000000000..4387329518f --- /dev/null +++ b/vsintegration/tests/UnitTests/Tests.RoslynHelpers.fs @@ -0,0 +1,278 @@ +namespace rec Microsoft.VisualStudio.FSharp.Editor.Tests.Roslyn + +open System +open System.IO +open System.Text +open System.Reflection +open System.Linq +open System.Composition.Hosting +open System.Collections.Generic +open System.Collections.Immutable +open Microsoft.VisualStudio.Composition +open Microsoft.CodeAnalysis +open Microsoft.CodeAnalysis.Host +open Microsoft.CodeAnalysis.Text +open Microsoft.VisualStudio.FSharp.Editor +open Microsoft.CodeAnalysis.Host.Mef +open Microsoft.VisualStudio.LanguageServices +open Microsoft.VisualStudio.Shell + +[] +module MefHelpers = + + let getAssemblies() = + let self = Assembly.GetExecutingAssembly() + let here = AppContext.BaseDirectory + + let imports = [| + "Microsoft.CodeAnalysis.Workspaces.dll" + "Microsoft.VisualStudio.Shell.15.0.dll" + "FSharp.Editor.dll" + |] + + let resolvedImports = imports.Select(fun name -> Path.Combine(here, name)).ToList() + let missingDlls = resolvedImports.Where(fun path -> not(File.Exists(path))).ToList() + if (missingDlls.Any()) then + failwith "Missing imports" + + let loadedImports = resolvedImports.Select(fun p -> Assembly.LoadFrom(p)).ToList() + + let result = loadedImports.ToDictionary(fun k -> Path.GetFileNameWithoutExtension(k.Location)) + result.Values + |> Seq.append [|self|] + |> Seq.append MefHostServices.DefaultAssemblies + |> Array.ofSeq + + let createExportProvider() = + let resolver = Resolver.DefaultInstance + let catalog = + let asms = getAssemblies() + let partDiscovery = PartDiscovery.Combine(new AttributedPartDiscoveryV1(resolver), new AttributedPartDiscovery(resolver, isNonPublicSupported = true)); + let parts = partDiscovery.CreatePartsAsync(asms).Result + let catalog = ComposableCatalog.Create(resolver) + catalog.AddParts(parts) + + let configuration = CompositionConfiguration.Create(catalog.WithCompositionService()) + let runtimeComposition = RuntimeComposition.CreateRuntimeComposition(configuration) + let exportProviderFactory = runtimeComposition.CreateExportProviderFactory() + exportProviderFactory.CreateExportProvider() + +type TestWorkspaceServiceMetadata(serviceType: string, layer: string) = + + member _.ServiceType = serviceType + member _.Layer = layer + + new(data: IDictionary) = + let serviceType = + match data.TryGetValue("ServiceType") with + | true, result -> result :?> string + | _ -> Unchecked.defaultof<_> + + let layer = + match data.TryGetValue("Layer") with + | true, result -> result :?> string + | _ -> Unchecked.defaultof<_> + TestWorkspaceServiceMetadata(serviceType, layer) + + new(serviceType: Type, layer: string) = + TestWorkspaceServiceMetadata(serviceType.AssemblyQualifiedName, layer) + +type TestLanguageServiceMetadata(language: string, serviceType: string, layer: string, data: IDictionary) = + + member _.Language = language + member _.ServiceType = serviceType + member _.Layer = layer + member _.Data = data + + new(data: IDictionary) = + let language = + match data.TryGetValue("Language") with + | true, result -> result :?> string + | _ -> Unchecked.defaultof<_> + + let serviceType = + match data.TryGetValue("ServiceType") with + | true, result -> result :?> string + | _ -> Unchecked.defaultof<_> + + let layer = + match data.TryGetValue("Layer") with + | true, result -> result :?> string + | _ -> Unchecked.defaultof<_> + TestLanguageServiceMetadata(language, serviceType, layer, data) + +type TestHostLanguageServices(workspaceServices: HostWorkspaceServices, language: string, exportProvider: ExportProvider) as this = + inherit HostLanguageServices() + + let services1 = + exportProvider.GetExports() + |> Seq.filter (fun x -> x.Metadata.Language = language) + + let factories1 = + exportProvider.GetExports() + |> Seq.filter (fun x -> x.Metadata.Language = language) + |> Seq.map (fun x -> + Lazy<_, _>((fun () -> x.Value.CreateLanguageService(this)), x.Metadata) + ) + + let otherServices1 = Seq.append factories1 services1 + + let otherServicesMap1 = + otherServices1 + |> Seq.map (fun x -> + KeyValuePair(x.Metadata.ServiceType, x) + ) + |> Seq.distinctBy (fun x -> x.Key) + |> System.Collections.Concurrent.ConcurrentDictionary + + override this.WorkspaceServices = workspaceServices + + override this.Language = language + + override this.GetService<'T when 'T :> ILanguageService>() : 'T = + match otherServicesMap1.TryGetValue(typeof<'T>.AssemblyQualifiedName) with + | true, otherService -> + otherService.Value :?> 'T + | _ -> + try + exportProvider.GetExport<'T>().Value + with + | _ -> + Unchecked.defaultof<'T> + +type TestHostWorkspaceServices(hostServices: HostServices, workspace: Workspace) as this = + inherit HostWorkspaceServices() + + let exportProvider = createExportProvider() + + let services1 = + exportProvider.GetExports() + + let factories1 = + exportProvider.GetExports() + |> Seq.map (fun x -> + Lazy<_, _>((fun () -> x.Value.CreateService(this)), x.Metadata) + ) + + let otherServices1 = + Seq.append factories1 services1 + + let otherServicesMap1 = + otherServices1 + |> Seq.map (fun x -> + KeyValuePair(x.Metadata.ServiceType, x) + ) + |> Seq.distinctBy (fun x -> x.Key) + |> System.Collections.Concurrent.ConcurrentDictionary + + let langServices = TestHostLanguageServices(this, LanguageNames.FSharp, exportProvider) + + override _.Workspace = workspace + + override this.GetService<'T when 'T :> IWorkspaceService>() : 'T = + let ty = typeof<'T> + match otherServicesMap1.TryGetValue(ty.AssemblyQualifiedName) with + | true, otherService -> + otherService.Value :?> 'T + | _ -> + try + exportProvider.GetExport<'T>().Value + with + | _ -> + Unchecked.defaultof<'T> + + override _.FindLanguageServices(filter) = Seq.empty + + override _.GetLanguageServices(languageName) = + match languageName with + | LanguageNames.FSharp -> + langServices :> HostLanguageServices + | _ -> + raise(NotSupportedException(sprintf "Language '%s' not supported in FSharp VS tests." languageName)) + + override _.HostServices = hostServices + +type TestHostServices() = + inherit HostServices() + + override this.CreateWorkspaceServices(workspace) = + TestHostWorkspaceServices(this, workspace) :> HostWorkspaceServices + +[] +type RoslynTestHelpers private () = + + static member CreateProjectInfoWithSingleDocument(projName, docFilePath) = + let isScript = String.Equals(Path.GetExtension(docFilePath), ".fsx", StringComparison.OrdinalIgnoreCase) + + let projId = ProjectId.CreateNewId() + let docId = DocumentId.CreateNewId(projId) + + let docInfo = + DocumentInfo.Create( + docId, + docFilePath, + filePath=docFilePath, + loader = new FileTextLoader(docFilePath, Encoding.Default), + sourceCodeKind= if isScript then SourceCodeKind.Script else SourceCodeKind.Regular) + + let projFilePath = "C:\\test.fsproj" + ProjectInfo.Create( + projId, + VersionStamp.Create(DateTime.UtcNow), + projName, + "test.dll", + LanguageNames.FSharp, + documents = [docInfo], + filePath = projFilePath + ) + + static member CreateDocument (filePath, text: SourceText, ?options: FSharp.Compiler.CodeAnalysis.FSharpProjectOptions) = + let isScript = String.Equals(Path.GetExtension(filePath), ".fsx", StringComparison.OrdinalIgnoreCase) + + let workspace = new AdhocWorkspace(TestHostServices()) + + let projId = ProjectId.CreateNewId() + let docId = DocumentId.CreateNewId(projId) + + let docInfo = + DocumentInfo.Create( + docId, + filePath, + loader=TextLoader.From(text.Container, VersionStamp.Create(DateTime.UtcNow)), + filePath=filePath, + sourceCodeKind= if isScript then SourceCodeKind.Script else SourceCodeKind.Regular) + + let projFilePath = "C:\\test.fsproj" + let projInfo = + ProjectInfo.Create( + projId, + VersionStamp.Create(DateTime.UtcNow), + projFilePath, + "test.dll", + LanguageNames.FSharp, + documents = [docInfo], + filePath = projFilePath + ) + + let solutionInfo = SolutionInfo.Create(SolutionId.CreateNewId(), VersionStamp.Create(DateTime.UtcNow), "test.sln", [projInfo]) + + let solution = workspace.AddSolution(solutionInfo) + + let workspaceService = workspace.Services.GetService() + + let document = solution.GetProject(projId).GetDocument(docId) + + match options with + | Some options -> + let options = { options with ProjectId = Some(Guid.NewGuid().ToString()) } + workspaceService.FSharpProjectOptionsManager.SetCommandLineOptions(projId, options.SourceFiles, options.OtherOptions |> ImmutableArray.CreateRange) + document.SetFSharpProjectOptionsForTesting(options) + | _ -> + workspaceService.FSharpProjectOptionsManager.SetCommandLineOptions(projId, [|filePath|], ImmutableArray.Empty) + + document + + static member CreateDocument (filePath, code: string) = + let text = SourceText.From(code) + RoslynTestHelpers.CreateDocument(filePath, text), text + diff --git a/vsintegration/tests/UnitTests/Tests.Watson.fs b/vsintegration/tests/UnitTests/Tests.Watson.fs index f6643eded89..d579acf3ac7 100644 --- a/vsintegration/tests/UnitTests/Tests.Watson.fs +++ b/vsintegration/tests/UnitTests/Tests.Watson.fs @@ -4,8 +4,10 @@ namespace Tests.Compiler.Watson #nowarn "52" // The value has been copied to ensure the original is not mutated +open FSharp.Compiler open FSharp.Compiler.AbstractIL.ILBinaryReader -open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.CodeAnalysis +open Internal.Utilities.Library open FSharp.Compiler.CompilerConfig open FSharp.Compiler.Driver open NUnit.Framework diff --git a/vsintegration/tests/UnitTests/UnusedOpensTests.fs b/vsintegration/tests/UnitTests/UnusedOpensTests.fs index 58ba173e4ca..36eb71e6a21 100644 --- a/vsintegration/tests/UnitTests/UnusedOpensTests.fs +++ b/vsintegration/tests/UnitTests/UnusedOpensTests.fs @@ -4,9 +4,10 @@ module Tests.ServiceAnalysis.UnusedOpens open System open NUnit.Framework -open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Range - +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.CodeAnalysis +open FSharp.Compiler.EditorServices +open FSharp.Compiler.Text /// like "should equal", but validates same-type let shouldEqual (x: 'a) (y: 'a) = Assert.AreEqual(x, y, sprintf "Expected: %A\nActual: %A" x y) @@ -24,7 +25,6 @@ let private projectOptions : FSharpProjectOptions = LoadTime = DateTime.MaxValue OriginalLoadReferences = [] UnresolvedReferences = None - ExtraProjectInfo = None Stamp = None } let private checker = FSharpChecker.Create() @@ -221,7 +221,7 @@ let ``open declaration is not marked as unused if an extension property is used` """ module Module = type System.String with - member __.ExtensionProperty = () + member _.ExtensionProperty = () open Module let _ = "a long string".ExtensionProperty """ @@ -232,7 +232,7 @@ let ``open declaration is marked as unused if an extension property is not used` """ module Module = type System.String with - member __.ExtensionProperty = () + member _.ExtensionProperty = () open Module let _ = "a long string".Trim() """ @@ -244,7 +244,7 @@ let ``open declaration is not marked as unused if an extension method is used``( type Class() = class end module Module = type Class with - member __.ExtensionMethod() = () + member _.ExtensionMethod() = () open Module let x = Class() let _ = x.ExtensionMethod() @@ -257,7 +257,7 @@ let ``open declaration is marked as unused if an extension method is not used``( type Class() = class end module Module = type Class with - member __.ExtensionMethod() = () + member _.ExtensionMethod() = () open Module let x = Class() """ @@ -582,7 +582,7 @@ let ``open declaration is not marked as unused if a related type extension is us module Module = open System type String with - member __.Method() = () + member _.Method() = () """ => [] @@ -593,7 +593,7 @@ open System.IO.Compression type OutliningHint() as self = do self.E.Add (fun (e: GZipStream) -> ()) - member __.E: IEvent<_> = Unchecked.defaultof<_> + member _.E: IEvent<_> = Unchecked.defaultof<_> """ => [] @@ -636,7 +636,7 @@ type IInterface = type IClass() = interface IInterface with - member __.Property = 0 + member _.Property = 0 let f (x: IClass) = (x :> IInterface).Property """ diff --git a/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj b/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj index 9ffc92b6f09..d4a67482ad2 100644 --- a/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj +++ b/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj @@ -8,8 +8,6 @@ Library $(NoWarn);44;58;75;3005 true - true - $(SystemValueTupleVersion) true true false @@ -38,6 +36,8 @@ + + @@ -124,11 +124,11 @@ - + - + @@ -197,11 +197,12 @@ + + - - + diff --git a/vsintegration/tests/UnitTests/Workspace/WorkspaceTests.fs b/vsintegration/tests/UnitTests/Workspace/WorkspaceTests.fs new file mode 100644 index 00000000000..e9c2bfe5fee --- /dev/null +++ b/vsintegration/tests/UnitTests/Workspace/WorkspaceTests.fs @@ -0,0 +1,317 @@ +namespace VisualFSharp.UnitTests + +open System +open System.IO +open System.Reflection +open System.Linq +open System.Composition.Hosting +open System.Collections.Generic +open System.Collections.Immutable +open System.Threading +open Microsoft.VisualStudio.Composition +open Microsoft.CodeAnalysis +open Microsoft.CodeAnalysis.Host +open Microsoft.CodeAnalysis.Text +open Microsoft.VisualStudio.FSharp.Editor +open Microsoft.CodeAnalysis.Host.Mef +open Microsoft.VisualStudio.LanguageServices +open Microsoft.VisualStudio.Shell +open Microsoft.VisualStudio.FSharp.Editor.Tests.Roslyn +open NUnit.Framework + +[] +module WorkspaceTests = + + let createOnDiskScript src = + let tmpFilePath = Path.GetTempFileName() + let tmpRealFilePath = Path.ChangeExtension(tmpFilePath, ".fsx") + try File.Delete(tmpFilePath) with | _ -> () + File.WriteAllText(tmpRealFilePath, src) + tmpRealFilePath + + let createWorkspace() = + new AdhocWorkspace(TestHostServices()) + + let createMiscFileWorkspace() = + createWorkspace() + + let openDocument (workspace: Workspace) (docId: DocumentId) = + use waitHandle = new ManualResetEventSlim(false) + use _sub = workspace.DocumentOpened.Subscribe(fun _ -> + waitHandle.Set() + ) + workspace.OpenDocument(docId) + waitHandle.Wait() + + let getDocument (workspace: Workspace) filePath = + let solution = workspace.CurrentSolution + solution.GetDocumentIdsWithFilePath(filePath) + |> Seq.exactlyOne + |> solution.GetDocument + + let addProject (workspace: Workspace) projInfo = + if not (workspace.TryApplyChanges(workspace.CurrentSolution.AddProject(projInfo))) then + failwith "Unable to apply workspace changes." + + let removeProject (workspace: Workspace) projId = + if not (workspace.TryApplyChanges(workspace.CurrentSolution.RemoveProject(projId))) then + failwith "Unable to apply workspace changes." + + let assertEmptyDocumentDiagnostics (doc: Document) = + let parseResults, checkResults = doc.GetFSharpParseAndCheckResultsAsync("assertEmptyDocumentDiagnostics") |> Async.RunSynchronously + + Assert.IsEmpty(parseResults.Diagnostics) + Assert.IsEmpty(checkResults.Diagnostics) + + let assertHasDocumentDiagnostics (doc: Document) = + let parseResults, checkResults = doc.GetFSharpParseAndCheckResultsAsync("assertHasDocumentDiagnostics") |> Async.RunSynchronously + + Assert.IsEmpty(parseResults.Diagnostics) + Assert.IsNotEmpty(checkResults.Diagnostics) + + type TestFSharpWorkspaceProjectContext(mainProj: Project) = + + let mutable mainProj = mainProj + + interface IFSharpWorkspaceProjectContext with + + member this.Dispose(): unit = () + + member this.FilePath: string = mainProj.FilePath + + member this.HasProjectReference(filePath: string): bool = + mainProj.ProjectReferences + |> Seq.exists (fun x -> + let projRef = mainProj.Solution.GetProject(x.ProjectId) + if projRef <> null then + String.Equals(filePath, projRef.FilePath, StringComparison.OrdinalIgnoreCase) + else + false + ) + + member this.Id: ProjectId = mainProj.Id + + member this.ProjectReferenceCount: int = mainProj.ProjectReferences.Count() + + member this.SetProjectReferences(projRefs: seq): unit = + let currentProj = mainProj + let mutable solution = currentProj.Solution + + mainProj.ProjectReferences + |> Seq.iter (fun projRef -> + solution <- solution.RemoveProjectReference(currentProj.Id, projRef) + ) + + projRefs + |> Seq.iter (fun projRef -> + solution <- + solution.AddProjectReference( + currentProj.Id, + ProjectReference(projRef.Id) + ) + ) + + not (solution.Workspace.TryApplyChanges(solution)) |> ignore + + mainProj <- solution.GetProject(currentProj.Id) + + type TestFSharpWorkspaceProjectContextFactory(workspace: Workspace, miscFilesWorkspace: Workspace) = + + interface IFSharpWorkspaceProjectContextFactory with + member this.CreateProjectContext(filePath: string): IFSharpWorkspaceProjectContext = + match miscFilesWorkspace.CurrentSolution.GetDocumentIdsWithFilePath(filePath) |> Seq.tryExactlyOne with + | Some docId -> + let doc = miscFilesWorkspace.CurrentSolution.GetDocument(docId) + removeProject miscFilesWorkspace doc.Project.Id + | _ -> + () + + let projInfo = RoslynTestHelpers.CreateProjectInfoWithSingleDocument(FSharpConstants.FSharpMiscellaneousFilesName, filePath) + addProject workspace projInfo + + let proj = workspace.CurrentSolution.GetProject(projInfo.Id) + new TestFSharpWorkspaceProjectContext(proj) :> IFSharpWorkspaceProjectContext + + [] + let ``Script file opened in misc files workspace will get transferred to normal workspace``() = + let workspace = createWorkspace() + let miscFilesWorkspace = createMiscFileWorkspace() + let projectContextFactory = TestFSharpWorkspaceProjectContextFactory(workspace, miscFilesWorkspace) + + let _miscFileService = FSharpMiscellaneousFileService(workspace, miscFilesWorkspace, projectContextFactory) + + let filePath = + createOnDiskScript + """ +module Script1 + +let x = 1 + """ + + try + let projInfo = RoslynTestHelpers.CreateProjectInfoWithSingleDocument(filePath, filePath) + addProject miscFilesWorkspace projInfo + + let doc = getDocument miscFilesWorkspace filePath + + Assert.IsFalse(miscFilesWorkspace.IsDocumentOpen(doc.Id)) + Assert.AreEqual(0, workspace.CurrentSolution.GetDocumentIdsWithFilePath(filePath).Length) + + openDocument miscFilesWorkspace doc.Id + // Although we opened the document, this is false as it has been transferred to the other workspace. + Assert.IsFalse(miscFilesWorkspace.IsDocumentOpen(doc.Id)) + + Assert.AreEqual(0, miscFilesWorkspace.CurrentSolution.GetDocumentIdsWithFilePath(filePath).Length) + Assert.AreEqual(1, workspace.CurrentSolution.GetDocumentIdsWithFilePath(filePath).Length) + + let doc = getDocument workspace filePath + + Assert.IsFalse(workspace.IsDocumentOpen(doc.Id)) + + assertEmptyDocumentDiagnostics doc + + finally + try File.Delete(filePath) with | _ -> () + + [] + let ``Script file referencing another script should have no diagnostics``() = + let workspace = createWorkspace() + let miscFilesWorkspace = createMiscFileWorkspace() + let projectContextFactory = TestFSharpWorkspaceProjectContextFactory(workspace, miscFilesWorkspace) + + let _miscFileService = FSharpMiscellaneousFileService(workspace, miscFilesWorkspace, projectContextFactory) + + let filePath1 = + createOnDiskScript + """ +module Script1 + +let x = 1 + """ + + let filePath2 = + createOnDiskScript + $""" +module Script2 +#load "{ Path.GetFileName(filePath1) }" + +let x = Script1.x + """ + + try + let projInfo2 = RoslynTestHelpers.CreateProjectInfoWithSingleDocument(filePath2, filePath2) + + addProject miscFilesWorkspace projInfo2 + + openDocument miscFilesWorkspace (getDocument miscFilesWorkspace filePath2).Id + + let doc2 = getDocument workspace filePath2 + assertEmptyDocumentDiagnostics doc2 + + finally + try File.Delete(filePath1) with | _ -> () + try File.Delete(filePath2) with | _ -> () + + [] + let ``Script file referencing another script will correct update when the referenced script file changes``() = + let workspace = createWorkspace() + let miscFilesWorkspace = createMiscFileWorkspace() + let projectContextFactory = TestFSharpWorkspaceProjectContextFactory(workspace, miscFilesWorkspace) + + let _miscFileService = FSharpMiscellaneousFileService(workspace, miscFilesWorkspace, projectContextFactory) + + let filePath1 = + createOnDiskScript + """ +module Script1 + """ + + let filePath2 = + createOnDiskScript + $""" +module Script2 +#load "{ Path.GetFileName(filePath1) }" + +let x = Script1.x + """ + + try + let projInfo1 = RoslynTestHelpers.CreateProjectInfoWithSingleDocument(filePath1, filePath1) + let projInfo2 = RoslynTestHelpers.CreateProjectInfoWithSingleDocument(filePath2, filePath2) + + addProject miscFilesWorkspace projInfo1 + addProject miscFilesWorkspace projInfo2 + + openDocument miscFilesWorkspace (getDocument miscFilesWorkspace filePath1).Id + openDocument miscFilesWorkspace (getDocument miscFilesWorkspace filePath2).Id + + let doc1 = getDocument workspace filePath1 + assertEmptyDocumentDiagnostics doc1 + + let doc2 = getDocument workspace filePath2 + assertHasDocumentDiagnostics doc2 + + File.WriteAllText(filePath1, + """ +module Script1 + +let x = 1 + """) + + assertEmptyDocumentDiagnostics doc2 + + finally + try File.Delete(filePath1) with | _ -> () + try File.Delete(filePath2) with | _ -> () + + [] + let ``Script file referencing another script will correct update when the referenced script file changes with opening in reverse order``() = + let workspace = createWorkspace() + let miscFilesWorkspace = createMiscFileWorkspace() + let projectContextFactory = TestFSharpWorkspaceProjectContextFactory(workspace, miscFilesWorkspace) + + let _miscFileService = FSharpMiscellaneousFileService(workspace, miscFilesWorkspace, projectContextFactory) + + let filePath1 = + createOnDiskScript + """ +module Script1 + """ + + let filePath2 = + createOnDiskScript + $""" +module Script2 +#load "{ Path.GetFileName(filePath1) }" + +let x = Script1.x + """ + + try + let projInfo1 = RoslynTestHelpers.CreateProjectInfoWithSingleDocument(filePath1, filePath1) + let projInfo2 = RoslynTestHelpers.CreateProjectInfoWithSingleDocument(filePath2, filePath2) + + addProject miscFilesWorkspace projInfo1 + addProject miscFilesWorkspace projInfo2 + + openDocument miscFilesWorkspace (getDocument miscFilesWorkspace filePath2).Id + openDocument miscFilesWorkspace (getDocument miscFilesWorkspace filePath1).Id + + let doc2 = getDocument workspace filePath2 + assertHasDocumentDiagnostics doc2 + + let doc1 = getDocument workspace filePath1 + assertEmptyDocumentDiagnostics doc1 + + File.WriteAllText(filePath1, + """ +module Script1 + +let x = 1 + """) + + assertEmptyDocumentDiagnostics doc2 + + finally + try File.Delete(filePath1) with | _ -> () + try File.Delete(filePath2) with | _ -> () diff --git a/vsintegration/update-vsintegration.cmd b/vsintegration/update-vsintegration.cmd index c4a4471e109..3a7da14f77d 100644 --- a/vsintegration/update-vsintegration.cmd +++ b/vsintegration/update-vsintegration.cmd @@ -216,7 +216,7 @@ if "!BIN_AVAILABLE!" == "true" ( CALL :backupAndOrCopy fsc.exe "!COMPILERSDKPATH!" CALL :backupAndOrCopy fsc.exe.config "%COMPILERSDKPATH%" CALL :backupAndOrCopy FSharp.Build.dll "%COMPILERSDKPATH%" - CALL :backupAndOrCopy FSharp.Compiler.Private.dll "%COMPILERSDKPATH%" + CALL :backupAndOrCopy FSharp.Compiler.Service.dll "%COMPILERSDKPATH%" CALL :backupAndOrCopy FSharp.Compiler.Interactive.Settings.dll "%COMPILERSDKPATH%" CALL :backupAndOrCopy fsi.exe "%COMPILERSDKPATH%" CALL :backupAndOrCopy fsi.exe.config "%COMPILERSDKPATH%" From 4968fb3419e01a72d15e057310f5325f8412f576 Mon Sep 17 00:00:00 2001 From: Vlad Zarytovskii Date: Tue, 29 Jun 2021 11:44:21 +0200 Subject: [PATCH 4/5] Fix after merge (and reverts) --- src/fsharp/ParseAndCheckInputs.fs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/fsharp/ParseAndCheckInputs.fs b/src/fsharp/ParseAndCheckInputs.fs index fcd366e6bfb..3fdcad9d519 100644 --- a/src/fsharp/ParseAndCheckInputs.fs +++ b/src/fsharp/ParseAndCheckInputs.fs @@ -293,7 +293,7 @@ type Tokenizer = unit -> Parser.token // Show all tokens in the stream, for testing purposes let ShowAllTokensAndExit (shortFilename, tokenizer: Tokenizer, lexbuf: LexBuffer) = - while true do + while true do printf "tokenize - getting one token from %s\n" shortFilename let t = tokenizer () printf "tokenize - got %s @ %a\n" (Parser.token_to_string t) outputRange lexbuf.LexemeRange @@ -302,12 +302,12 @@ let ShowAllTokensAndExit (shortFilename, tokenizer: Tokenizer, lexbuf: LexBuffer | _ -> () if lexbuf.IsPastEndOfStream then printf "!!! at end of stream\n" -// Test one of the parser entry points, just for testing purposes +// Test one of the parser entry points, just for testing purposes let TestInteractionParserAndExit (tokenizer: Tokenizer, lexbuf: LexBuffer) = - while true do + while true do match (Parser.interaction (fun _ -> tokenizer ()) lexbuf) with - | IDefns(l, m) -> printfn "Parsed OK, got %d defs @ %a" l.Length outputRange m - | IHash (_, m) -> printfn "Parsed OK, got hash @ %a" outputRange m + | ParsedScriptInteraction.Definitions(l, m) -> printfn "Parsed OK, got %d defs @ %a" l.Length outputRange m + | ParsedScriptInteraction.HashDirective(_, m) -> printfn "Parsed OK, got hash @ %a" outputRange m exit 0 // Report the statistics for testing purposes From eb4b2505e0e80077597cddb016078eb2c2813e0c Mon Sep 17 00:00:00 2001 From: Vlad Zarytovskii Date: Tue, 29 Jun 2021 12:25:06 +0200 Subject: [PATCH 5/5] Added basic tokenizer switch tests --- .../CompilerOptions/fsc/tokenize/env.lst | 3 + .../fsc/tokenize/tokenize01.fs | 60 +++++++++++++++++++ .../fsc/tokenize/tokenize02.fs | 22 +++++++ tests/fsharpqa/Source/test.lst | 1 + 4 files changed, 86 insertions(+) create mode 100644 tests/fsharpqa/Source/CompilerOptions/fsc/tokenize/env.lst create mode 100644 tests/fsharpqa/Source/CompilerOptions/fsc/tokenize/tokenize01.fs create mode 100644 tests/fsharpqa/Source/CompilerOptions/fsc/tokenize/tokenize02.fs diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/tokenize/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/tokenize/env.lst new file mode 100644 index 00000000000..5016280a55a --- /dev/null +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/tokenize/env.lst @@ -0,0 +1,3 @@ +# Test tokenize outputs tokens + SOURCE=tokenize01.fs COMPILE_ONLY=1 SCFLAGS="--tokenize" + SOURCE=tokenize02.fs COMPILE_ONLY=1 SCFLAGS="--tokenize-unfiltered" \ No newline at end of file diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/tokenize/tokenize01.fs b/tests/fsharpqa/Source/CompilerOptions/fsc/tokenize/tokenize01.fs new file mode 100644 index 00000000000..48c56e06129 --- /dev/null +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/tokenize/tokenize01.fs @@ -0,0 +1,60 @@ +// #NoMT #CompilerOptions +#light + +namespace N + module M = + let f x = () + f 10 + +//tokenize - got NAMESPACE +//tokenize - got IDENT +//tokenize - got OBLOCKBEGIN +//tokenize - got MODULE_COMING_SOON +//tokenize - got MODULE_COMING_SOON +//tokenize - got MODULE_COMING_SOON +//tokenize - got MODULE_COMING_SOON +//tokenize - got MODULE_COMING_SOON +//tokenize - got MODULE_COMING_SOON +//tokenize - got MODULE_IS_HERE +//tokenize - got IDENT +//tokenize - got EQUALS +//tokenize - got OBLOCKBEGIN +//tokenize - got OLET +//tokenize - got IDENT +//tokenize - got IDENT +//tokenize - got EQUALS +//tokenize - got OBLOCKBEGIN +//tokenize - got LPAREN +//tokenize - got RPAREN_COMING_SOON +//tokenize - got RPAREN_COMING_SOON +//tokenize - got RPAREN_COMING_SOON +//tokenize - got RPAREN_COMING_SOON +//tokenize - got RPAREN_COMING_SOON +//tokenize - got RPAREN_COMING_SOON +//tokenize - got RPAREN_IS_HERE +//tokenize - got OBLOCKEND_COMING_SOON +//tokenize - got OBLOCKEND_COMING_SOON +//tokenize - got OBLOCKEND_COMING_SOON +//tokenize - got OBLOCKEND_COMING_SOON +//tokenize - got OBLOCKEND_COMING_SOON +//tokenize - got OBLOCKEND_COMING_SOON +//tokenize - got OBLOCKEND_IS_HERE +//tokenize - got ODECLEND +//tokenize - got OBLOCKSEP +//tokenize - got IDENT +//tokenize - got INT32 +//tokenize - got OBLOCKEND_COMING_SOON +//tokenize - got OBLOCKEND_COMING_SOON +//tokenize - got OBLOCKEND_COMING_SOON +//tokenize - got OBLOCKEND_COMING_SOON +//tokenize - got OBLOCKEND_COMING_SOON +//tokenize - got OBLOCKEND_COMING_SOON +//tokenize - got OBLOCKEND_IS_HERE +//tokenize - got OBLOCKEND_COMING_SOON +//tokenize - got OBLOCKEND_COMING_SOON +//tokenize - got OBLOCKEND_COMING_SOON +//tokenize - got OBLOCKEND_COMING_SOON +//tokenize - got OBLOCKEND_COMING_SOON +//tokenize - got OBLOCKEND_COMING_SOON +//tokenize - got OBLOCKEND_IS_HERE +//tokenize - got EOF \ No newline at end of file diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/tokenize/tokenize02.fs b/tests/fsharpqa/Source/CompilerOptions/fsc/tokenize/tokenize02.fs new file mode 100644 index 00000000000..d139e72caee --- /dev/null +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/tokenize/tokenize02.fs @@ -0,0 +1,22 @@ +// #NoMT #CompilerOptions +#light + +namespace N + module M = + let f x = () + f 10 + +//tokenize - got NAMESPACE +//tokenize - got IDENT +//tokenize - got MODULE +//tokenize - got IDENT +//tokenize - got EQUALS +//tokenize - got LET +//tokenize - got IDENT +//tokenize - got IDENT +//tokenize - got EQUALS +//tokenize - got LPAREN +//tokenize - got RPAREN +//tokenize - got IDENT +//tokenize - got INT32 +//tokenize - got EOF \ No newline at end of file diff --git a/tests/fsharpqa/Source/test.lst b/tests/fsharpqa/Source/test.lst index e4b9f292d8c..5a8307bdb9f 100644 --- a/tests/fsharpqa/Source/test.lst +++ b/tests/fsharpqa/Source/test.lst @@ -57,6 +57,7 @@ CompilerOptions01,NoMT CompilerOptions\fsc\subsystemversion CompilerOptions01,NoMT CompilerOptions\fsc\tailcalls CompilerOptions01,NoMT CompilerOptions\fsc\target CompilerOptions01,NoMT,NoHostedCompiler CompilerOptions\fsc\times +CompilerOptions01,NoMT,NoHostedCompiler CompilerOptions\fsc\tokenize CompilerOptions01,NoMT CompilerOptions\fsc\warn CompilerOptions01,NoMT CompilerOptions\fsc\warnaserror CompilerOptions01,NoMT CompilerOptions\fsc\warnon